ZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9hcHBzL01vbkFwcC9zcmMvbWFpbi9qYXZhL2NvbS9lbGYvZW50ZXJwcmlzZS9tb25pdG9yaW5nL1Byb2JlU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL2FwcHMvTW9uQXBwL3NyYy9tYWluL2phdmEvY29tL2VsZi9lbnRlcnByaXNlL21vbml0b3JpbmcvUHJvYmVTZXJ2bGV0LmphdmEKaW5kZXggZDMwOWM2OC4uM2I0ZGNhOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL2FwcHMvTW9uQXBwL3NyYy9tYWluL2phdmEvY29tL2VsZi9lbnRlcnByaXNlL21vbml0b3JpbmcvUHJvYmVTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL2FwcHMvTW9uQXBwL3NyYy9tYWluL2phdmEvY29tL2VsZi9lbnRlcnByaXNlL21vbml0b3JpbmcvUHJvYmVTZXJ2bGV0LmphdmEKQEAgLTc1LDEwICs3NSwxMCBAQAogICAgICAgICAgICAgLy8gS0lTUwogICAgICAgICAgICAgZm9yIChJdGVyYXRvcjxTdHJpbmc+IGl0ID0gZ2V0QWxsUHJvYmVzKCkuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOykgewogICAgICAgICAgICAgICAgIFN0cmluZyBzID0gaXQubmV4dCgpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgaWYocy5zdGFydHNXaXRoKCJmb29ibG9nIikpCiAgICAgICAgICAgICAgICAgICAgIHMgPSAiPGI+IiArIHMgKyAiPC9iPiI7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBwcigiPGxpPiIgKyBzICsgIjwvbGk+Iik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBwcigiPC91bD4iKTsKQEAgLTE0Nyw3ICsxNDcsNyBAQAogICAgICAgICBwcm9jZXNzUmVxdWVzdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgLyoqIAorICAgIC8qKgogICAgICAqIEhhbmRsZXMgdGhlIEhUVFAgPGNvZGU+UE9TVDwvY29kZT4gbWV0aG9kLgogICAgICAqIEBwYXJhbSByZXF1ZXN0IHNlcnZsZXQgcmVxdWVzdAogICAgICAqIEBwYXJhbSByZXNwb25zZSBzZXJ2bGV0IHJlc3BvbnNlCkBAIC0xNjAsNyArMTYwLDcgQEAKICAgICAgICAgcHJvY2Vzc1JlcXVlc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIC8qKiAKKyAgICAvKioKICAgICAgKiBSZXR1cm5zIGEgc2hvcnQgZGVzY3JpcHRpb24gb2YgdGhlIHNlcnZsZXQuCiAgICAgICogQHJldHVybiBhIFN0cmluZyBjb250YWluaW5nIHNlcnZsZXQgZGVzY3JpcHRpb24KICAgICAgKi8KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9hcHBzL015RWpiL015RWpiLWFwcC1jbGllbnQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL2FwcHMvTXlFamIvTXlFamItYXBwLWNsaWVudC9idWlsZC54bWwKaW5kZXggNjIyYmNiZC4uMWExMzdhMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL2FwcHMvTXlFamIvTXlFamItYXBwLWNsaWVudC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL2FwcHMvTXlFamIvTXlFamItYXBwLWNsaWVudC9idWlsZC54bWwKQEAgLTMwLDkgKzMwLDkgQEAKICAgICA8aW1wb3J0IGZpbGU9Im5icHJvamVjdC9idWlsZC1pbXBsLnhtbCIvPgogICAgIDwhLS0KIAotICAgIFRoZXJlIGV4aXN0IHNldmVyYWwgdGFyZ2V0cyB3aGljaCBhcmUgYnkgZGVmYXVsdCBlbXB0eSBhbmQgd2hpY2ggY2FuIGJlIAotICAgIHVzZWQgZm9yIGV4ZWN1dGlvbiBvZiB5b3VyIHRhc2tzLiBUaGVzZSB0YXJnZXRzIGFyZSB1c3VhbGx5IGV4ZWN1dGVkIAotICAgIGJlZm9yZSBhbmQgYWZ0ZXIgc29tZSBtYWluIHRhcmdldHMuIFRoZXkgYXJlOiAKKyAgICBUaGVyZSBleGlzdCBzZXZlcmFsIHRhcmdldHMgd2hpY2ggYXJlIGJ5IGRlZmF1bHQgZW1wdHkgYW5kIHdoaWNoIGNhbiBiZQorICAgIHVzZWQgZm9yIGV4ZWN1dGlvbiBvZiB5b3VyIHRhc2tzLiBUaGVzZSB0YXJnZXRzIGFyZSB1c3VhbGx5IGV4ZWN1dGVkCisgICAgYmVmb3JlIGFuZCBhZnRlciBzb21lIG1haW4gdGFyZ2V0cy4gVGhleSBhcmU6CiAKICAgICAgIC1wcmUtaW5pdDogICAgICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgaW5pdGlhbGl6YXRpb24gb2YgcHJvamVjdCBwcm9wZXJ0aWVzCiAgICAgICAtcG9zdC1pbml0OiAgICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgaW5pdGlhbGl6YXRpb24gb2YgcHJvamVjdCBwcm9wZXJ0aWVzCkBAIC01OCwxMiArNTgsMTIgQEAKICAgICAgICAgICAgIDwvb2JmdXNjYXRlPgogICAgICAgICA8L3RhcmdldD4KIAotICAgIEZvciBsaXN0IG9mIGF2YWlsYWJsZSBwcm9wZXJ0aWVzIGNoZWNrIHRoZSBpbXBvcnRlZCAKLSAgICBuYnByb2plY3QvYnVpbGQtaW1wbC54bWwgZmlsZS4gCisgICAgRm9yIGxpc3Qgb2YgYXZhaWxhYmxlIHByb3BlcnRpZXMgY2hlY2sgdGhlIGltcG9ydGVkCisgICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuCiAKIAogICAgIEFub3RoZXIgd2F5IHRvIGN1c3RvbWl6ZSB0aGUgYnVpbGQgaXMgYnkgb3ZlcnJpZGluZyBleGlzdGluZyBtYWluIHRhcmdldHMuCi0gICAgVGhlIHRhcmdldHMgb2YgaW50ZXJlc3QgYXJlOiAKKyAgICBUaGUgdGFyZ2V0cyBvZiBpbnRlcmVzdCBhcmU6CiAKICAgICAgIC1pbml0LW1hY3JvZGVmLWphdmFjOiAgICAgZGVmaW5lcyBtYWNybyBmb3IgamF2YWMgY29tcGlsYXRpb24KICAgICAgIC1pbml0LW1hY3JvZGVmLWp1bml0OiAgICAgZGVmaW5lcyBtYWNybyBmb3IganVuaXQgZXhlY3V0aW9uCkBAIC03MSw3ICs3MSw3IEBACiAgICAgICAtaW5pdC1tYWNyb2RlZi1qYXZhOiAgICAgIGRlZmluZXMgbWFjcm8gZm9yIGNsYXNzIGV4ZWN1dGlvbgogICAgICAgLWRvLWphci13aXRoLW1hbmlmZXN0OiAgICBKQVIgYnVpbGRpbmcgKGlmIHlvdSBhcmUgdXNpbmcgYSBtYW5pZmVzdCkKICAgICAgIC1kby1qYXItd2l0aG91dC1tYW5pZmVzdDogSkFSIGJ1aWxkaW5nIChpZiB5b3UgYXJlIG5vdCB1c2luZyBhIG1hbmlmZXN0KQotICAgICAgcnVuOiAgICAgICAgICAgICAgICAgICAgICBleGVjdXRpb24gb2YgcHJvamVjdCAKKyAgICAgIHJ1bjogICAgICAgICAgICAgICAgICAgICAgZXhlY3V0aW9uIG9mIHByb2plY3QKICAgICAgIC1qYXZhZG9jLWJ1aWxkOiAgICAgICAgICAgSmF2YWRvYyBnZW5lcmF0aW9uCiAgICAgICB0ZXN0LXJlcG9ydDogICAgICAgICAgICAgIEpVbml0IHJlcG9ydCBnZW5lcmF0aW9uCiAKQEAgLTgzLDEwICs4MywxMCBAQAogICAgICAgICAgICAgPC9leGVjPgogICAgICAgICA8L3RhcmdldD4KIAotICAgIE5vdGljZSB0aGF0IHRoZSBvdmVycmlkZGVuIHRhcmdldCBkZXBlbmRzIG9uIHRoZSBqYXIgdGFyZ2V0IGFuZCBub3Qgb25seSBvbiAKLSAgICB0aGUgY29tcGlsZSB0YXJnZXQgYXMgdGhlIHJlZ3VsYXIgcnVuIHRhcmdldCBkb2VzLiBBZ2FpbiwgZm9yIGEgbGlzdCBvZiBhdmFpbGFibGUgCisgICAgTm90aWNlIHRoYXQgdGhlIG92ZXJyaWRkZW4gdGFyZ2V0IGRlcGVuZHMgb24gdGhlIGphciB0YXJnZXQgYW5kIG5vdCBvbmx5IG9uCisgICAgdGhlIGNvbXBpbGUgdGFyZ2V0IGFzIHRoZSByZWd1bGFyIHJ1biB0YXJnZXQgZG9lcy4gQWdhaW4sIGZvciBhIGxpc3Qgb2YgYXZhaWxhYmxlCiAgICAgcHJvcGVydGllcyB3aGljaCB5b3UgY2FuIHVzZSwgY2hlY2sgdGhlIHRhcmdldCB5b3UgYXJlIG92ZXJyaWRpbmcgaW4gdGhlCi0gICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuIAorICAgIG5icHJvamVjdC9idWlsZC1pbXBsLnhtbCBmaWxlLgogCiAgICAgLS0+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvYXBwcy9NeUVqYi9NeUVqYi1lamIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL2FwcHMvTXlFamIvTXlFamItZWpiL2J1aWxkLnhtbAppbmRleCBlZTIzYzA3Li42NzhjMTE2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvYXBwcy9NeUVqYi9NeUVqYi1lamIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9hcHBzL015RWpiL015RWpiLWVqYi9idWlsZC54bWwKQEAgLTMwLDkgKzMwLDkgQEAKICAgICA8aW1wb3J0IGZpbGU9Im5icHJvamVjdC9idWlsZC1pbXBsLnhtbCIvPgogICAgIDwhLS0KIAotICAgIFRoZXJlIGV4aXN0IHNldmVyYWwgdGFyZ2V0cyB3aGljaCBhcmUgYnkgZGVmYXVsdCBlbXB0eSBhbmQgd2hpY2ggY2FuIGJlIAotICAgIHVzZWQgZm9yIGV4ZWN1dGlvbiBvZiB5b3VyIHRhc2tzLiBUaGVzZSB0YXJnZXRzIGFyZSB1c3VhbGx5IGV4ZWN1dGVkIAotICAgIGJlZm9yZSBhbmQgYWZ0ZXIgc29tZSBtYWluIHRhcmdldHMuIFRoZXkgYXJlOiAKKyAgICBUaGVyZSBleGlzdCBzZXZlcmFsIHRhcmdldHMgd2hpY2ggYXJlIGJ5IGRlZmF1bHQgZW1wdHkgYW5kIHdoaWNoIGNhbiBiZQorICAgIHVzZWQgZm9yIGV4ZWN1dGlvbiBvZiB5b3VyIHRhc2tzLiBUaGVzZSB0YXJnZXRzIGFyZSB1c3VhbGx5IGV4ZWN1dGVkCisgICAgYmVmb3JlIGFuZCBhZnRlciBzb21lIG1haW4gdGFyZ2V0cy4gVGhleSBhcmU6CiAKICAgICAgIC1wcmUtaW5pdDogICAgICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgaW5pdGlhbGl6YXRpb24gb2YgcHJvamVjdCBwcm9wZXJ0aWVzCiAgICAgICAtcG9zdC1pbml0OiAgICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgaW5pdGlhbGl6YXRpb24gb2YgcHJvamVjdCBwcm9wZXJ0aWVzCkBAIC00OCw3ICs0OCw3IEBACiAKICAgICAoVGFyZ2V0cyBiZWdpbm5pbmcgd2l0aCAnLScgYXJlIG5vdCBpbnRlbmRlZCB0byBiZSBjYWxsZWQgb24gdGhlaXIgb3duLikKIAotICAgIEV4YW1wbGUgb2YgcGx1Z2luZyBhbiBvYmZ1c2NhdG9yIGFmdGVyIHRoZSBjb21waWxhdGlvbiBjb3VsZCBsb29rIGxpa2UgCisgICAgRXhhbXBsZSBvZiBwbHVnaW5nIGFuIG9iZnVzY2F0b3IgYWZ0ZXIgdGhlIGNvbXBpbGF0aW9uIGNvdWxkIGxvb2sgbGlrZQogCiAgICAgICAgIDx0YXJnZXQgbmFtZT0iLXBvc3QtY29tcGlsZSI+CiAgICAgICAgICAgICA8b2JmdXNjYXRlPgpAQCAtNTYsMjAgKzU2LDIwIEBACiAgICAgICAgICAgICA8L29iZnVzY2F0ZT4KICAgICAgICAgPC90YXJnZXQ+CiAKLSAgICBGb3IgbGlzdCBvZiBhdmFpbGFibGUgcHJvcGVydGllcyBjaGVjayB0aGUgaW1wb3J0ZWQgCi0gICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuIAorICAgIEZvciBsaXN0IG9mIGF2YWlsYWJsZSBwcm9wZXJ0aWVzIGNoZWNrIHRoZSBpbXBvcnRlZAorICAgIG5icHJvamVjdC9idWlsZC1pbXBsLnhtbCBmaWxlLgogCiAKICAgICBPdGhlciB3YXkgaG93IHRvIGN1c3RvbWl6ZSB0aGUgYnVpbGQgaXMgYnkgb3ZlcnJpZGluZyBleGlzdGluZyBtYWluIHRhcmdldHMuCi0gICAgVGhlIHRhcmdldCBvZiBpbnRlcmVzdCBhcmU6IAorICAgIFRoZSB0YXJnZXQgb2YgaW50ZXJlc3QgYXJlOgogCiAgICAgICBpbml0LW1hY3JvZGVmLWphdmFjOiAgICBkZWZpbmVzIG1hY3JvIGZvciBqYXZhYyBjb21waWxhdGlvbgogICAgICAgaW5pdC1tYWNyb2RlZi1kZWJ1ZzogICAgZGVmaW5lcyBtYWNybyBmb3IgY2xhc3MgZGVidWdnaW5nCiAgICAgICBkby1kaXN0OiAgICAgICAgICAgICAgICBhcmNoaXZlIGJ1aWxkaW5nCi0gICAgICBydW46ICAgICAgICAgICAgICAgICAgICBleGVjdXRpb24gb2YgcHJvamVjdCAKLSAgICAgIGphdmFkb2MtYnVpbGQ6ICAgICAgICAgIGphdmFkb2MgZ2VuZXJhdGlvbiAKKyAgICAgIHJ1bjogICAgICAgICAgICAgICAgICAgIGV4ZWN1dGlvbiBvZiBwcm9qZWN0CisgICAgICBqYXZhZG9jLWJ1aWxkOiAgICAgICAgICBqYXZhZG9jIGdlbmVyYXRpb24KIAotICAgIEV4YW1wbGUgb2Ygb3ZlcnJpZGluZyB0aGUgdGFyZ2V0IGZvciBwcm9qZWN0IGV4ZWN1dGlvbiBjb3VsZCBsb29rIGxpa2UgCisgICAgRXhhbXBsZSBvZiBvdmVycmlkaW5nIHRoZSB0YXJnZXQgZm9yIHByb2plY3QgZXhlY3V0aW9uIGNvdWxkIGxvb2sgbGlrZQogCiAgICAgICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSI8UFJPSk5BTUU+LWltcGwuamFyIj4KICAgICAgICAgICAgIDxleGVjIGRpcj0iYmluIiBleGVjdXRhYmxlPSJsYXVuY2hlci5leGUiPgpAQCAtNzcsMTAgKzc3LDEwIEBACiAgICAgICAgICAgICA8L2V4ZWM+CiAgICAgICAgIDwvdGFyZ2V0PgogCi0gICAgTm90aWNlIHRoYXQgb3ZlcnJpZGRlbiB0YXJnZXQgZGVwZW5kcyBvbiBqYXIgdGFyZ2V0IGFuZCBub3Qgb25seSBvbiAKLSAgICBjb21waWxlIHRhcmdldCBhcyByZWd1bGFyIHJ1biB0YXJnZXQgZG9lcy4gQWdhaW4sIGZvciBsaXN0IG9mIGF2YWlsYWJsZSAKLSAgICBwcm9wZXJ0aWVzIHdoaWNoIHlvdSBjYW4gdXNlIGNoZWNrIHRoZSB0YXJnZXQgeW91IGFyZSBvdmVycmlkaW5nIGluIAotICAgIG5icHJvamVjdC9idWlsZC1pbXBsLnhtbCBmaWxlLiAKKyAgICBOb3RpY2UgdGhhdCBvdmVycmlkZGVuIHRhcmdldCBkZXBlbmRzIG9uIGphciB0YXJnZXQgYW5kIG5vdCBvbmx5IG9uCisgICAgY29tcGlsZSB0YXJnZXQgYXMgcmVndWxhciBydW4gdGFyZ2V0IGRvZXMuIEFnYWluLCBmb3IgbGlzdCBvZiBhdmFpbGFibGUKKyAgICBwcm9wZXJ0aWVzIHdoaWNoIHlvdSBjYW4gdXNlIGNoZWNrIHRoZSB0YXJnZXQgeW91IGFyZSBvdmVycmlkaW5nIGluCisgICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuCiAKICAgICAtLT4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9hcHBzL015RWpiL015RWpiLWVqYi9zcmMvamF2YS9mb28vTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL2FwcHMvTXlFamIvTXlFamItZWpiL3NyYy9qYXZhL2Zvby9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKaW5kZXggMDZmZjYzZS4uNTE2ZTliYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL2FwcHMvTXlFamIvTXlFamItZWpiL3NyYy9qYXZhL2Zvby9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL2FwcHMvTXlFamIvTXlFamItZWpiL3NyYy9qYXZhL2Zvby9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKQEAgLTMxLDUgKzMxLDUgQEAKIHB1YmxpYyBpbnRlcmZhY2UgTXlTZXNzaW9uQmVhblJlbW90ZSB7CiAKICAgICBTdHJpbmcgZ2V0TWVzc2FnZSgpOwotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvYXBwcy9NeUVqYi9NeUVqYi13YXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL2FwcHMvTXlFamIvTXlFamItd2FyL2J1aWxkLnhtbAppbmRleCAwODUwMmQwLi5lNDMxYWQ1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvYXBwcy9NeUVqYi9NeUVqYi13YXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9hcHBzL015RWpiL015RWpiLXdhci9idWlsZC54bWwKQEAgLTMwLDI3ICszMCwyNyBAQAogICAgIDxpbXBvcnQgZmlsZT0ibmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIi8+CiAgICAgPCEtLQogCi0gICAgVGhlcmUgZXhpc3Qgc2V2ZXJhbCB0YXJnZXRzIHdoaWNoIGFyZSBieSBkZWZhdWx0IGVtcHR5IGFuZCB3aGljaCBjYW4gYmUgCi0gICAgdXNlZCBmb3IgZXhlY3V0aW9uIG9mIHlvdXIgdGFza3MuIFRoZXNlIHRhcmdldHMgYXJlIHVzdWFsbHkgZXhlY3V0ZWQgCi0gICAgYmVmb3JlIGFuZCBhZnRlciBzb21lIG1haW4gdGFyZ2V0cy4gVGhleSBhcmU6IAorICAgIFRoZXJlIGV4aXN0IHNldmVyYWwgdGFyZ2V0cyB3aGljaCBhcmUgYnkgZGVmYXVsdCBlbXB0eSBhbmQgd2hpY2ggY2FuIGJlCisgICAgdXNlZCBmb3IgZXhlY3V0aW9uIG9mIHlvdXIgdGFza3MuIFRoZXNlIHRhcmdldHMgYXJlIHVzdWFsbHkgZXhlY3V0ZWQKKyAgICBiZWZvcmUgYW5kIGFmdGVyIHNvbWUgbWFpbiB0YXJnZXRzLiBUaGV5IGFyZToKIAotICAgICAgLXByZS1pbml0OiAgICAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBpbml0aWFsaXphdGlvbiBvZiBwcm9qZWN0IHByb3BlcnRpZXMgCi0gICAgICAtcG9zdC1pbml0OiAgICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgaW5pdGlhbGl6YXRpb24gb2YgcHJvamVjdCBwcm9wZXJ0aWVzIAotICAgICAgLXByZS1jb21waWxlOiAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBqYXZhYyBjb21waWxhdGlvbiAKLSAgICAgIC1wb3N0LWNvbXBpbGU6ICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBqYXZhYyBjb21waWxhdGlvbiAKKyAgICAgIC1wcmUtaW5pdDogICAgICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgaW5pdGlhbGl6YXRpb24gb2YgcHJvamVjdCBwcm9wZXJ0aWVzCisgICAgICAtcG9zdC1pbml0OiAgICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgaW5pdGlhbGl6YXRpb24gb2YgcHJvamVjdCBwcm9wZXJ0aWVzCisgICAgICAtcHJlLWNvbXBpbGU6ICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGphdmFjIGNvbXBpbGF0aW9uCisgICAgICAtcG9zdC1jb21waWxlOiAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgamF2YWMgY29tcGlsYXRpb24KICAgICAgIC1wcmUtY29tcGlsZS1zaW5nbGU6ICAgICAgIGNhbGxlZCBiZWZvcmUgamF2YWMgY29tcGlsYXRpb24gb2Ygc2luZ2xlIGZpbGUKICAgICAgIC1wb3N0LWNvbXBpbGUtc2luZ2xlOiAgICAgIGNhbGxlZCBhZnRlciBqYXZhYyBjb21waWxhdGlvbiBvZiBzaW5nbGUgZmlsZQogICAgICAgLXByZS1jb21waWxlLXRlc3Q6ICAgICAgICAgY2FsbGVkIGJlZm9yZSBqYXZhYyBjb21waWxhdGlvbiBvZiBKVW5pdCB0ZXN0cwogICAgICAgLXBvc3QtY29tcGlsZS10ZXN0OiAgICAgICAgY2FsbGVkIGFmdGVyIGphdmFjIGNvbXBpbGF0aW9uIG9mIEpVbml0IHRlc3RzCiAgICAgICAtcHJlLWNvbXBpbGUtdGVzdC1zaW5nbGU6ICBjYWxsZWQgYmVmb3JlIGphdmFjIGNvbXBpbGF0aW9uIG9mIHNpbmdsZSBKVW5pdCB0ZXN0CiAgICAgICAtcG9zdC1jb21waWxlLXRlc3Qtc2luZ2xlOiBjYWxsZWQgYWZ0ZXIgamF2YWMgY29tcGlsYXRpb24gb2Ygc2luZ2xlIEpVdW5pdCB0ZXN0Ci0gICAgICAtcHJlLWRpc3Q6ICAgICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGFyY2hpdmUgYnVpbGRpbmcgCi0gICAgICAtcG9zdC1kaXN0OiAgICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgYXJjaGl2ZSBidWlsZGluZyAKLSAgICAgIC1wb3N0LWNsZWFuOiAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBjbGVhbmluZyBidWlsZCBwcm9kdWN0cyAKKyAgICAgIC1wcmUtZGlzdDogICAgICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgYXJjaGl2ZSBidWlsZGluZworICAgICAgLXBvc3QtZGlzdDogICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGFyY2hpdmUgYnVpbGRpbmcKKyAgICAgIC1wb3N0LWNsZWFuOiAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBjbGVhbmluZyBidWlsZCBwcm9kdWN0cwogICAgICAgLXByZS1ydW4tZGVwbG95OiAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBkZXBsb3lpbmcKICAgICAgIC1wb3N0LXJ1bi1kZXBsb3k6ICAgICAgICAgIGNhbGxlZCBhZnRlciBkZXBsb3lpbmcKIAotICAgIEV4YW1wbGUgb2YgcGx1Z2luZyBhbiBvYmZ1c2NhdG9yIGFmdGVyIHRoZSBjb21waWxhdGlvbiBjb3VsZCBsb29rIGxpa2UgCisgICAgRXhhbXBsZSBvZiBwbHVnaW5nIGFuIG9iZnVzY2F0b3IgYWZ0ZXIgdGhlIGNvbXBpbGF0aW9uIGNvdWxkIGxvb2sgbGlrZQogCiAgICAgICAgIDx0YXJnZXQgbmFtZT0iLXBvc3QtY29tcGlsZSI+CiAgICAgICAgICAgICA8b2JmdXNjYXRlPgpAQCAtNTgsMjEgKzU4LDIxIEBACiAgICAgICAgICAgICA8L29iZnVzY2F0ZT4KICAgICAgICAgPC90YXJnZXQ+CiAKLSAgICBGb3IgbGlzdCBvZiBhdmFpbGFibGUgcHJvcGVydGllcyBjaGVjayB0aGUgaW1wb3J0ZWQgCi0gICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuIAorICAgIEZvciBsaXN0IG9mIGF2YWlsYWJsZSBwcm9wZXJ0aWVzIGNoZWNrIHRoZSBpbXBvcnRlZAorICAgIG5icHJvamVjdC9idWlsZC1pbXBsLnhtbCBmaWxlLgogCiAKICAgICBPdGhlciB3YXkgaG93IHRvIGN1c3RvbWl6ZSB0aGUgYnVpbGQgaXMgYnkgb3ZlcnJpZGluZyBleGlzdGluZyBtYWluIHRhcmdldHMuCi0gICAgVGhlIHRhcmdldCBvZiBpbnRlcmVzdCBhcmU6IAorICAgIFRoZSB0YXJnZXQgb2YgaW50ZXJlc3QgYXJlOgogCiAgICAgICBpbml0LW1hY3JvZGVmLWphdmFjOiAgICBkZWZpbmVzIG1hY3JvIGZvciBqYXZhYyBjb21waWxhdGlvbgogICAgICAgaW5pdC1tYWNyb2RlZi1qdW5pdDogICBkZWZpbmVzIG1hY3JvIGZvciBqdW5pdCBleGVjdXRpb24KICAgICAgIGluaXQtbWFjcm9kZWYtZGVidWc6ICAgIGRlZmluZXMgbWFjcm8gZm9yIGNsYXNzIGRlYnVnZ2luZwogICAgICAgZG8tZGlzdDogICAgICAgICAgICAgICAgYXJjaGl2ZSBidWlsZGluZwotICAgICAgcnVuOiAgICAgICAgICAgICAgICAgICAgZXhlY3V0aW9uIG9mIHByb2plY3QgCi0gICAgICBqYXZhZG9jLWJ1aWxkOiAgICAgICAgICBqYXZhZG9jIGdlbmVyYXRpb24gCisgICAgICBydW46ICAgICAgICAgICAgICAgICAgICBleGVjdXRpb24gb2YgcHJvamVjdAorICAgICAgamF2YWRvYy1idWlsZDogICAgICAgICAgamF2YWRvYyBnZW5lcmF0aW9uCiAKLSAgICBFeGFtcGxlIG9mIG92ZXJyaWRpbmcgdGhlIHRhcmdldCBmb3IgcHJvamVjdCBleGVjdXRpb24gY291bGQgbG9vayBsaWtlIAorICAgIEV4YW1wbGUgb2Ygb3ZlcnJpZGluZyB0aGUgdGFyZ2V0IGZvciBwcm9qZWN0IGV4ZWN1dGlvbiBjb3VsZCBsb29rIGxpa2UKIAogICAgICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iPFBST0pOQU1FPi1pbXBsLmphciI+CiAgICAgICAgICAgICA8ZXhlYyBkaXI9ImJpbiIgZXhlY3V0YWJsZT0ibGF1bmNoZXIuZXhlIj4KQEAgLTgwLDEwICs4MCwxMCBAQAogICAgICAgICAgICAgPC9leGVjPgogICAgICAgICA8L3RhcmdldD4KIAotICAgIE5vdGljZSB0aGF0IG92ZXJyaWRkZW4gdGFyZ2V0IGRlcGVuZHMgb24gamFyIHRhcmdldCBhbmQgbm90IG9ubHkgb24gCi0gICAgY29tcGlsZSB0YXJnZXQgYXMgcmVndWxhciBydW4gdGFyZ2V0IGRvZXMuIEFnYWluLCBmb3IgbGlzdCBvZiBhdmFpbGFibGUgCi0gICAgcHJvcGVydGllcyB3aGljaCB5b3UgY2FuIHVzZSBjaGVjayB0aGUgdGFyZ2V0IHlvdSBhcmUgb3ZlcnJpZGluZyBpbiAKLSAgICBuYnByb2plY3QvYnVpbGQtaW1wbC54bWwgZmlsZS4gCisgICAgTm90aWNlIHRoYXQgb3ZlcnJpZGRlbiB0YXJnZXQgZGVwZW5kcyBvbiBqYXIgdGFyZ2V0IGFuZCBub3Qgb25seSBvbgorICAgIGNvbXBpbGUgdGFyZ2V0IGFzIHJlZ3VsYXIgcnVuIHRhcmdldCBkb2VzLiBBZ2FpbiwgZm9yIGxpc3Qgb2YgYXZhaWxhYmxlCisgICAgcHJvcGVydGllcyB3aGljaCB5b3UgY2FuIHVzZSBjaGVjayB0aGUgdGFyZ2V0IHlvdSBhcmUgb3ZlcnJpZGluZyBpbgorICAgIG5icHJvamVjdC9idWlsZC1pbXBsLnhtbCBmaWxlLgogCiAgICAgLS0+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvYXBwcy9NeUVqYi9NeUVqYi13YXIvc3JjL2phdmEvTXlFamJTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvYXBwcy9NeUVqYi9NeUVqYi13YXIvc3JjL2phdmEvTXlFamJTZXJ2bGV0LmphdmEKaW5kZXggMDU1OGZlYS4uY2JjNzM4YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL2FwcHMvTXlFamIvTXlFamItd2FyL3NyYy9qYXZhL015RWpiU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9hcHBzL015RWpiL015RWpiLXdhci9zcmMvamF2YS9NeUVqYlNlcnZsZXQuamF2YQpAQCAtNjUsNyArNjUsNyBAQAogICAgIH0KIAogICAgIC8vIDxlZGl0b3ItZm9sZCBkZWZhdWx0c3RhdGU9ImNvbGxhcHNlZCIgZGVzYz0iSHR0cFNlcnZsZXQgbWV0aG9kcy4gQ2xpY2sgb24gdGhlICsgc2lnbiBvbiB0aGUgbGVmdCB0byBlZGl0IHRoZSBjb2RlLiI+Ci0gICAgLyoqIAorICAgIC8qKgogICAgICAqIEhhbmRsZXMgdGhlIEhUVFAgPGNvZGU+R0VUPC9jb2RlPiBtZXRob2QuCiAgICAgICogQHBhcmFtIHJlcXVlc3Qgc2VydmxldCByZXF1ZXN0CiAgICAgICogQHBhcmFtIHJlc3BvbnNlIHNlcnZsZXQgcmVzcG9uc2UKQEAgLTc4LDcgKzc4LDcgQEAKICAgICAgICAgcHJvY2Vzc1JlcXVlc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIC8qKiAKKyAgICAvKioKICAgICAgKiBIYW5kbGVzIHRoZSBIVFRQIDxjb2RlPlBPU1Q8L2NvZGU+IG1ldGhvZC4KICAgICAgKiBAcGFyYW0gcmVxdWVzdCBzZXJ2bGV0IHJlcXVlc3QKICAgICAgKiBAcGFyYW0gcmVzcG9uc2Ugc2VydmxldCByZXNwb25zZQpAQCAtOTEsNyArOTEsNyBAQAogICAgICAgICBwcm9jZXNzUmVxdWVzdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgLyoqIAorICAgIC8qKgogICAgICAqIFJldHVybnMgYSBzaG9ydCBkZXNjcmlwdGlvbiBvZiB0aGUgc2VydmxldC4KICAgICAgKiBAcmV0dXJuIGEgU3RyaW5nIGNvbnRhaW5pbmcgc2VydmxldCBkZXNjcmlwdGlvbgogICAgICAqLwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL2FwcHMvTXlFamIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL2FwcHMvTXlFamIvYnVpbGQueG1sCmluZGV4IDU2OTY1NzEuLjg5NjY4OWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9hcHBzL015RWpiL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvYXBwcy9NeUVqYi9idWlsZC54bWwKQEAgLTMwLDIxICszMCwyMSBAQAogICAgIDxpbXBvcnQgZmlsZT0ibmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIi8+CiAgICAgPCEtLQogCi0gICAgVGhlcmUgZXhpc3Qgc2V2ZXJhbCB0YXJnZXRzIHdoaWNoIGFyZSBieSBkZWZhdWx0IGVtcHR5IGFuZCB3aGljaCBjYW4gYmUgCi0gICAgdXNlZCBmb3IgZXhlY3V0aW9uIG9mIHlvdXIgdGFza3MuIFRoZXNlIHRhcmdldHMgYXJlIHVzdWFsbHkgZXhlY3V0ZWQgCi0gICAgYmVmb3JlIGFuZCBhZnRlciBzb21lIG1haW4gdGFyZ2V0cy4gVGhleSBhcmU6IAorICAgIFRoZXJlIGV4aXN0IHNldmVyYWwgdGFyZ2V0cyB3aGljaCBhcmUgYnkgZGVmYXVsdCBlbXB0eSBhbmQgd2hpY2ggY2FuIGJlCisgICAgdXNlZCBmb3IgZXhlY3V0aW9uIG9mIHlvdXIgdGFza3MuIFRoZXNlIHRhcmdldHMgYXJlIHVzdWFsbHkgZXhlY3V0ZWQKKyAgICBiZWZvcmUgYW5kIGFmdGVyIHNvbWUgbWFpbiB0YXJnZXRzLiBUaGV5IGFyZToKIAotICAgICAgcHJlLWluaXQ6ICAgICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGluaXRpYWxpemF0aW9uIG9mIHByb2plY3QgcHJvcGVydGllcyAKLSAgICAgIHBvc3QtaW5pdDogICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGluaXRpYWxpemF0aW9uIG9mIHByb2plY3QgcHJvcGVydGllcyAKLSAgICAgIHByZS1jb21waWxlOiAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBqYXZhYyBjb21waWxhdGlvbiAKLSAgICAgIHBvc3QtY29tcGlsZTogICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGphdmFjIGNvbXBpbGF0aW9uIAotICAgICAgcHJlLWRpc3Q6ICAgICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGFyY2hpdmUgYnVpbGRpbmcgCi0gICAgICBwb3N0LWRpc3Q6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBhcmNoaXZlIGJ1aWxkaW5nIAotICAgICAgcG9zdC1jbGVhbjogICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgY2xlYW5pbmcgYnVpbGQgcHJvZHVjdHMgCisgICAgICBwcmUtaW5pdDogICAgICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgaW5pdGlhbGl6YXRpb24gb2YgcHJvamVjdCBwcm9wZXJ0aWVzCisgICAgICBwb3N0LWluaXQ6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBpbml0aWFsaXphdGlvbiBvZiBwcm9qZWN0IHByb3BlcnRpZXMKKyAgICAgIHByZS1jb21waWxlOiAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBqYXZhYyBjb21waWxhdGlvbgorICAgICAgcG9zdC1jb21waWxlOiAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgamF2YWMgY29tcGlsYXRpb24KKyAgICAgIHByZS1kaXN0OiAgICAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBhcmNoaXZlIGJ1aWxkaW5nCisgICAgICBwb3N0LWRpc3Q6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBhcmNoaXZlIGJ1aWxkaW5nCisgICAgICBwb3N0LWNsZWFuOiAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBjbGVhbmluZyBidWlsZCBwcm9kdWN0cwogICAgICAgcHJlLXJ1bi1kZXBsb3k6ICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGRlcGxveWluZwogICAgICAgcG9zdC1ydW4tZGVwbG95OiAgICAgICAgICBjYWxsZWQgYWZ0ZXIgZGVwbG95aW5nCiAKLSAgICBFeGFtcGxlIG9mIHBsdWdpbmcgYW4gb2JmdXNjYXRvciBhZnRlciB0aGUgY29tcGlsYXRpb24gY291bGQgbG9vayBsaWtlIAorICAgIEV4YW1wbGUgb2YgcGx1Z2luZyBhbiBvYmZ1c2NhdG9yIGFmdGVyIHRoZSBjb21waWxhdGlvbiBjb3VsZCBsb29rIGxpa2UKIAogICAgICAgICA8dGFyZ2V0IG5hbWU9InBvc3QtY29tcGlsZSI+CiAgICAgICAgICAgICA8b2JmdXNjYXRlPgpAQCAtNTIsMTcgKzUyLDE3IEBACiAgICAgICAgICAgICA8L29iZnVzY2F0ZT4KICAgICAgICAgPC90YXJnZXQ+CiAKLSAgICBGb3IgbGlzdCBvZiBhdmFpbGFibGUgcHJvcGVydGllcyBjaGVjayB0aGUgaW1wb3J0ZWQgCi0gICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuIAorICAgIEZvciBsaXN0IG9mIGF2YWlsYWJsZSBwcm9wZXJ0aWVzIGNoZWNrIHRoZSBpbXBvcnRlZAorICAgIG5icHJvamVjdC9idWlsZC1pbXBsLnhtbCBmaWxlLgogCiAKICAgICBPdGhlciB3YXkgaG93IHRvIGN1c3RvbWl6ZSB0aGUgYnVpbGQgaXMgYnkgb3ZlcnJpZGluZyBleGlzdGluZyBtYWluIHRhcmdldHMuCi0gICAgVGhlIHRhcmdldCBvZiBpbnRlcmVzdCBhcmU6IAorICAgIFRoZSB0YXJnZXQgb2YgaW50ZXJlc3QgYXJlOgogCiAgICAgICBkby1kaXN0OiAgICAgICAgICAgICAgICBhcmNoaXZlIGJ1aWxkaW5nCi0gICAgICBydW46ICAgICAgICAgICAgICAgICAgICBleGVjdXRpb24gb2YgcHJvamVjdCAKKyAgICAgIHJ1bjogICAgICAgICAgICAgICAgICAgIGV4ZWN1dGlvbiBvZiBwcm9qZWN0CiAKLSAgICBFeGFtcGxlIG9mIG92ZXJyaWRpbmcgdGhlIHRhcmdldCBmb3IgcHJvamVjdCBleGVjdXRpb24gY291bGQgbG9vayBsaWtlIAorICAgIEV4YW1wbGUgb2Ygb3ZlcnJpZGluZyB0aGUgdGFyZ2V0IGZvciBwcm9qZWN0IGV4ZWN1dGlvbiBjb3VsZCBsb29rIGxpa2UKIAogICAgICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iPFBST0pOQU1FPi1pbXBsLmphciI+CiAgICAgICAgICAgICA8ZXhlYyBkaXI9ImJpbiIgZXhlY3V0YWJsZT0ibGF1bmNoZXIuZXhlIj4KQEAgLTcwLDEwICs3MCwxMCBAQAogICAgICAgICAgICAgPC9leGVjPgogICAgICAgICA8L3RhcmdldD4KIAotICAgIE5vdGljZSB0aGF0IG92ZXJyaWRkZW4gdGFyZ2V0IGRlcGVuZHMgb24gamFyIHRhcmdldCBhbmQgbm90IG9ubHkgb24gCi0gICAgY29tcGlsZSB0YXJnZXQgYXMgcmVndWxhciBydW4gdGFyZ2V0IGRvZXMuIEFnYWluLCBmb3IgbGlzdCBvZiBhdmFpbGFibGUgCi0gICAgcHJvcGVydGllcyB3aGljaCB5b3UgY2FuIHVzZSBjaGVjayB0aGUgdGFyZ2V0IHlvdSBhcmUgb3ZlcnJpZGluZyBpbiAKLSAgICBuYnByb2plY3QvYnVpbGQtaW1wbC54bWwgZmlsZS4gCisgICAgTm90aWNlIHRoYXQgb3ZlcnJpZGRlbiB0YXJnZXQgZGVwZW5kcyBvbiBqYXIgdGFyZ2V0IGFuZCBub3Qgb25seSBvbgorICAgIGNvbXBpbGUgdGFyZ2V0IGFzIHJlZ3VsYXIgcnVuIHRhcmdldCBkb2VzLiBBZ2FpbiwgZm9yIGxpc3Qgb2YgYXZhaWxhYmxlCisgICAgcHJvcGVydGllcyB3aGljaCB5b3UgY2FuIHVzZSBjaGVjayB0aGUgdGFyZ2V0IHlvdSBhcmUgb3ZlcnJpZGluZyBpbgorICAgIG5icHJvamVjdC9idWlsZC1pbXBsLnhtbCBmaWxlLgogCiAgICAgLS0+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvYXBwcy9ab21iaWUvcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9hcHBzL1pvbWJpZS9wb20ueG1sCmluZGV4IDY4MzgzMjIuLjMzNmU5NTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9hcHBzL1pvbWJpZS9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9hcHBzL1pvbWJpZS9wb20ueG1sCkBAIC00MCwxNiArNDAsMTYgQEAKICAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KICAgICAgICAgPC9kZXBlbmRlbmN5PgogCi0JPGRlcGVuZGVuY3k+Ci0JCTxncm91cElkPmNvbS5lbGY8L2dyb3VwSWQ+Ci0JCTxhcnRpZmFjdElkPmdsYXNzZmlzaDwvYXJ0aWZhY3RJZD4KLQkJPHZlcnNpb24+MS4wLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgIDxkZXBlbmRlbmN5PgorICAgICAgICA8Z3JvdXBJZD5jb20uZWxmPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD5nbGFzc2Zpc2g8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjEuMC1TTkFQU0hPVDwvdmVyc2lvbj4KICAgICAgICAgPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4KLQk8L2RlcGVuZGVuY3k+CisgICAgPC9kZXBlbmRlbmN5PgogCiAgICAgPC9kZXBlbmRlbmNpZXM+CiAgICAgPGJ1aWxkPgotCQk8ZGVmYXVsdEdvYWw+aW5zdGFsbDwvZGVmYXVsdEdvYWw+CisgICAgICAgIDxkZWZhdWx0R29hbD5pbnN0YWxsPC9kZWZhdWx0R29hbD4KICAgICAgICAgPHBsdWdpbnM+CiAgICAgICAgICAgICA8cGx1Z2luPgogICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5tb3J0YmF5LmpldHR5PC9ncm91cElkPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9idWlsZC54bWwKaW5kZXggMzgxMTUyMy4uZDliZTMyNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvYnVpbGQueG1sCkBAIC0xNzMsNyArMTczLDcgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXYtcmVwb3J0Ii8+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkRldGFpbGVkIHJlc3VsdHMgYXZhaWxhYmxlIHVuZGVyICR7ZW52LkFQU19IT01FfS90ZXN0X3Jlc3VsdHMuaHRtbCIvPgogICAgIDwvdGFyZ2V0PgotICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY2xpZW50c3R1YnMiIGRlcGVuZHM9ImluaXQiPgogICAgICAgICA8cnVudGVzdCBjbGFzc25hbWU9ImFkbWluLkNsaWVudFN0dWJzVGVzdHMiLz4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3BvbS54bWwKaW5kZXggMTRlYTI0Ny4uZmZhNzA5ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3BvbS54bWwKQEAgLTM1LDcgKzM1LDcgQEAKICAgICAgIDxkZXZlbG9wZXJDb25uZWN0aW9uPnNjbTpnaXQ6Z2l0Oi8vZ2l0aHViLmNvbS9lY2xpcHNlLWVlNGovZ2xhc3NmaXNoPC9kZXZlbG9wZXJDb25uZWN0aW9uPgogICAgICAgPHVybD5odHRwczovL2dpdGh1Yi5jb20vZWNsaXBzZS1lZTRqL2dsYXNzZmlzaDwvdXJsPgogICAgIDwvc2NtPgotICAgIAorCiAgICAgPG1vZHVsZXM+CiAgICAgICAgIDxtb2R1bGU+Y2x1c3RlcjwvbW9kdWxlPgogICAgICAgICA8bW9kdWxlPmluc3RhbmNlPC9tb2R1bGU+CkBAIC03OSw3ICs3OSw3IEBACiAgICAgICAgICAgICA8cGx1Z2luPgogICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXN1cmVmaXJlLXBsdWdpbjwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgPGZvcmtDb3VudD4wPC9mb3JrQ291bnQ+IAorICAgICAgICAgICAgICAgICAgICA8Zm9ya0NvdW50PjA8L2ZvcmtDb3VudD4KICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CiAgICAgICAgICAgICA8L3BsdWdpbj4KICAgICAgICAgPC9wbHVnaW5zPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9BZG1pbk9iamVjdFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vQWRtaW5PYmplY3RUZXN0LmphdmEKaW5kZXggMjM2ZWU0ZS4uZDVhYWM0YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9BZG1pbk9iamVjdFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL0FkbWluT2JqZWN0VGVzdC5qYXZhCkBAIC0zNiw3ICszNiw3IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFTEVURV9SRVNPVVJDRV9SRUYgPSAiZGVsZXRlLXJlc291cmNlLXJlZiI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIExJU1RfUkVTT1VSQ0VfUkVGID0gImxpc3QtcmVzb3VyY2UtcmVmcyI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIExJU1RfSk5ESV9FTlRSSUVTID0gImxpc3Qtam5kaS1lbnRyaWVzIjsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERUxFVEVfQURNSU5fT0JKRUNUID0gImRlbGV0ZS1hZG1pbi1vYmplY3QiOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDUkVBVEVfQURNSU5fT0JKRUNUID0gImNyZWF0ZS1hZG1pbi1vYmplY3QiOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBMSVNUX0FETUlOX09CSkVDVFMgPSAibGlzdC1hZG1pbi1vYmplY3RzIjsKQEAgLTIyMSw3ICsyMjEsNyBAQAogICAgICAgICByZXBvcnRSZXN1bHRTdGF0dXModGVzdE5hbWUsIHJlc3VsdCk7CiAgICAgICAgIHJlcG9ydEV4cGVjdGVkUmVzdWx0KHRlc3ROYW1lLCByZXN1bHQsICIiKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgdGVzdERlbGV0ZUFkbWluT2JqZWN0RXhwZWN0RmFpbHVyZShTdHJpbmcgdGFyZ2V0KXsKICAgICAgICAgU3RyaW5nIHRlc3ROYW1lID0gInRlc3REZWxldGVBZG1pbk9iamVjdEV4cGVjdEZhaWx1cmUiOwogICAgICAgICBBc2FkbWluUmV0dXJuIHJlc3VsdCA9IGFzYWRtaW5XaXRoT3V0cHV0KERFTEVURV9BRE1JTl9PQkpFQ1QsVEFSR0VUX09QVElPTiwgdGFyZ2V0LCBSRVNPVVJDRV9OQU1FKTsKQEAgLTM0Nyw3ICszNDcsNyBAQAogICAgICAgICByZXBvcnRSZXN1bHRTdGF0dXModGVzdE5hbWUsIHJlc3VsdCk7CiAgICAgICAgIC8vcmVwb3J0RXhwZWN0ZWRSZXN1bHQodGVzdE5hbWUsIHJlc3VsdCwgU1RBTkRBTE9ORV9JTlNUQU5DRV9OQU1FLCBJTlNUQU5DRTFfTkFNRSwgSU5TVEFOQ0UyX05BTUUpOwogICAgICAgICByZXBvcnRFeHBlY3RlZFJlc3VsdCh0ZXN0TmFtZSwgcmVzdWx0LCAiQWRtaW5pc3RlcmVkIG9iamVjdCByZXNvdXJjZS0xIGRlbGV0ZWQuIik7Ci0JLypDb21tZW50aW5nIG91dCB0aGUgZmFpbGVkIHRlc3QsIGNhbiBiZSB1bmNvbW1lbnRlZCBhZnRlciBmaXhpbmcgR2xhc3NmaXNoIElzc3VlIDIxNzc0ICovCisgICAgLypDb21tZW50aW5nIG91dCB0aGUgZmFpbGVkIHRlc3QsIGNhbiBiZSB1bmNvbW1lbnRlZCBhZnRlciBmaXhpbmcgR2xhc3NmaXNoIElzc3VlIDIxNzc0ICovCiAgICAgICAgIC8vcmVwb3J0VW5leHBlY3RlZFJlc3VsdCh0ZXN0TmFtZSwgcmVzdWx0LCBTRVJWRVIsIENMVVNURVJfTkFNRSk7CiAgICAgfQogCkBAIC0zNTcsNyArMzU3LDcgQEAKICAgICAgICAgcmVwb3J0UmVzdWx0U3RhdHVzKHRlc3ROYW1lLCByZXN1bHQpOwogICAgICAgICAvL3JlcG9ydEV4cGVjdGVkUmVzdWx0KHRlc3ROYW1lLCByZXN1bHQsIElOU1RBTkNFMV9OQU1FLCBJTlNUQU5DRTJfTkFNRSwgU1RBTkRBTE9ORV9JTlNUQU5DRV9OQU1FKTsKICAgICAgICAgcmVwb3J0RXhwZWN0ZWRSZXN1bHQodGVzdE5hbWUsIHJlc3VsdCwgIkFkbWluaXN0ZXJlZCBvYmplY3QgcmVzb3VyY2UtMSBkZWxldGVkLiIpOwotCS8qQ29tbWVudGluZyBvdXQgdGhlIGZhaWxlZCB0ZXN0LCBjYW4gYmUgdW5jb21tZW50ZWQgYWZ0ZXIgZml4aW5nIEdsYXNzZmlzaCBJc3N1ZSAyMTc3NCAqLworICAgIC8qQ29tbWVudGluZyBvdXQgdGhlIGZhaWxlZCB0ZXN0LCBjYW4gYmUgdW5jb21tZW50ZWQgYWZ0ZXIgZml4aW5nIEdsYXNzZmlzaCBJc3N1ZSAyMTc3NCAqLwogICAgICAgICAvL3JlcG9ydFVuZXhwZWN0ZWRSZXN1bHQodGVzdE5hbWUsIHJlc3VsdCwgU0VSVkVSKTsKICAgICB9CiAKQEAgLTQwOSw3ICs0MDksNyBAQAogICAgICAgICByZXBvcnRFeHBlY3RlZFJlc3VsdCh0ZXN0TmFtZSwgcmVzdWx0KTsKICAgICAgICAgLy9yZXBvcnRFeHBlY3RlZFJlc3VsdCh0ZXN0TmFtZSwgcmVzdWx0LCBJTlNUQU5DRTJfTkFNRSwgSU5TVEFOQ0UxX05BTUUsIFNUQU5EQUxPTkVfSU5TVEFOQ0VfTkFNRSk7CiAgICAgICAgIHJlcG9ydEV4cGVjdGVkUmVzdWx0KHRlc3ROYW1lLCByZXN1bHQsICJBZG1pbmlzdGVyZWQgb2JqZWN0IHJlc291cmNlLTEgY3JlYXRlZC4iKTsKLQkvKkNvbW1lbnRpbmcgb3V0IHRoZSBmYWlsZWQgdGVzdCwgY2FuIGJlIHVuY29tbWVudGVkIGFmdGVyIGZpeGluZyBHbGFzc2Zpc2ggSXNzdWUgMjE3NzQgKi8KKyAgICAvKkNvbW1lbnRpbmcgb3V0IHRoZSBmYWlsZWQgdGVzdCwgY2FuIGJlIHVuY29tbWVudGVkIGFmdGVyIGZpeGluZyBHbGFzc2Zpc2ggSXNzdWUgMjE3NzQgKi8KICAgICAgICAgLy9yZXBvcnRVbmV4cGVjdGVkUmVzdWx0KHRlc3ROYW1lLCByZXN1bHQsIFNUQU5EQUxPTkVfSU5TVEFOQ0VfTkFNRSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL0NoYW5nZU1hc3RlckJyb2tlclRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vQ2hhbmdlTWFzdGVyQnJva2VyVGVzdC5qYXZhCmluZGV4IGJlZWY2ZmEuLmRjOTczYmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vQ2hhbmdlTWFzdGVyQnJva2VyVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vQ2hhbmdlTWFzdGVyQnJva2VyVGVzdC5qYXZhCkBAIC0xMjIsOSArMTIyLDkgQEAKICAgICBwdWJsaWMgT2JqZWN0IGpteENhbGwoU3RyaW5nIGptc1Byb3ZpZGVyUG9ydCwgU3RyaW5nIG9iamVjdE5hbWUsIFN0cmluZyBhdHRyTmFtZSl7CiAvKgogICogQ29tbWVudGVkIG91dCBiZWNhdXNlIGJ1aWxkaW5nIHRoaXMgY29kZSBkZXBlbmRzIG9uIGhhdmluZyBHbGFzc0Zpc2ggYWxyZWFkeSBkb3dubG9hZGVkLgotICogVGhlIGFkbWluIGRldnRlc3QgbXVzdCBidWlsZCB3aXRob3V0IGhhdmluZyBHbGFzc0Zpc2ggcHJlc2VudC4gCisgKiBUaGUgYWRtaW4gZGV2dGVzdCBtdXN0IGJ1aWxkIHdpdGhvdXQgaGF2aW5nIEdsYXNzRmlzaCBwcmVzZW50LgogICAgICAgICB0cnl7Ci0gCisKICAgICAgICAgQWRtaW5Db25uZWN0aW9uRmFjdG9yeSBhY2YgPSBuZXcgQWRtaW5Db25uZWN0aW9uRmFjdG9yeSgpOwogICAgICAgICBhY2Yuc2V0UHJvcGVydHkoQWRtaW5Db25uZWN0aW9uQ29uZmlndXJhdGlvbi5pbXFBZGRyZXNzLCAgICAibG9jYWxob3N0OiIgKyBqbXNQcm92aWRlclBvcnQpOwogICAgICAgICBKTVhDb25uZWN0b3IgY29ubmVjdG9yID0gYWNmLmNyZWF0ZUNvbm5lY3Rpb24oImFkbWluIiwiYWRtaW4iKTsKQEAgLTEzNywxMSArMTM3LDExIEBACiAgICAgICAgT2JqZWN0IGF0dHJ2YWx1ZSA9ICBtYnNjLmdldEF0dHJpYnV0ZShvYmpOYW1lLCBhdHRyTmFtZSk7CiAgICAgICAgY29ubmVjdG9yLmNsb3NlKCk7CiAgICAgICAgcmV0dXJuIGF0dHJ2YWx1ZTsKLSAgICAgICAgICAgIAorCiAgICAgICB9Y2F0Y2goRXhjZXB0aW9uIGV4KXsKICAgICAgICAgICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgIH0KLSAqIAorICoKICAqLwogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9Db25maWd1cmVBcmJpdGFyeUJyb2tlclByb3BlcnRpZXNUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL0NvbmZpZ3VyZUFyYml0YXJ5QnJva2VyUHJvcGVydGllc1Rlc3QuamF2YQppbmRleCAxODRiOTE2Li41ZjU3ZWY1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL0NvbmZpZ3VyZUFyYml0YXJ5QnJva2VyUHJvcGVydGllc1Rlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL0NvbmZpZ3VyZUFyYml0YXJ5QnJva2VyUHJvcGVydGllc1Rlc3QuamF2YQpAQCAtMTA5LDcgKzEwOSw3IEBACiBwdWJsaWMgT2JqZWN0IGpteENhbGwoU3RyaW5nIGptc1Byb3ZpZGVyUG9ydCwgU3RyaW5nIG9iamVjdE5hbWUsIFN0cmluZyBhdHRyaWJ1dGVOYW1lKXsKIC8qCiAgKiBDb21tZW50ZWQgb3V0IGJlY2F1c2UgYnVpbGRpbmcgdGhpcyBjb2RlIGRlcGVuZHMgb24gaGF2aW5nIEdsYXNzRmlzaCBhbHJlYWR5IGRvd25sb2FkZWQuCi0gKiBUaGUgYWRtaW4gZGV2dGVzdCBtdXN0IGJ1aWxkIHdpdGhvdXQgaGF2aW5nIEdsYXNzRmlzaCBwcmVzZW50LiAKKyAqIFRoZSBhZG1pbiBkZXZ0ZXN0IG11c3QgYnVpbGQgd2l0aG91dCBoYXZpbmcgR2xhc3NGaXNoIHByZXNlbnQuCiAgdHJ5ewogICAgIEFkbWluQ29ubmVjdGlvbkZhY3RvcnkgYWNmID0gbmV3IEFkbWluQ29ubmVjdGlvbkZhY3RvcnkoKTsKICAgICBhY2Yuc2V0UHJvcGVydHkoQWRtaW5Db25uZWN0aW9uQ29uZmlndXJhdGlvbi5pbXFBZGRyZXNzLCAgICAibG9jYWxob3N0OiIgKyBqbXNQcm92aWRlclBvcnQpOwpAQCAtMTMyLDcgKzEzMiw3IEBACiAgIH1jYXRjaChFeGNlcHRpb24gZXgpewogICAgICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogIH0KLSAqIAorICoKICAqLwogICAgICByZXR1cm4gbnVsbDsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vQ29uZmlndXJlSm1zQ2x1c3RlclRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vQ29uZmlndXJlSm1zQ2x1c3RlclRlc3QuamF2YQppbmRleCA0ZDhjNjMzLi43MGU2MjQ0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL0NvbmZpZ3VyZUptc0NsdXN0ZXJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9Db25maWd1cmVKbXNDbHVzdGVyVGVzdC5qYXZhCkBAIC0yMCw3ICsyMCw3IEBACiAvKgogaW1wb3J0IGNvbS5zdW4ubWVzc2FnaW5nLkFkbWluQ29ubmVjdGlvbkNvbmZpZ3VyYXRpb247CiBpbXBvcnQgY29tLnN1bi5tZXNzYWdpbmcuQWRtaW5Db25uZWN0aW9uRmFjdG9yeTsKLSAqIAorICoKICAqLwogCiBpbXBvcnQgamF2YXgubWFuYWdlbWVudC5NQmVhblNlcnZlckNvbm5lY3Rpb247CkBAIC0xNjIsNyArMTYyLDcgQEAKICAgICBwdWJsaWMgT2JqZWN0IGpteENhbGwoU3RyaW5nIGptc1Byb3ZpZGVyUG9ydCwgU3RyaW5nIG9iamVjdE5hbWUsIFN0cmluZyBhdHRyTmFtZSl7CiAvKgogICogQ29tbWVudGVkIG91dCBiZWNhdXNlIGJ1aWxkaW5nIHRoaXMgY29kZSBkZXBlbmRzIG9uIGhhdmluZyBHbGFzc0Zpc2ggYWxyZWFkeSBkb3dubG9hZGVkLgotICogVGhlIGFkbWluIGRldnRlc3QgbXVzdCBidWlsZCB3aXRob3V0IGhhdmluZyBHbGFzc0Zpc2ggcHJlc2VudC4gCisgKiBUaGUgYWRtaW4gZGV2dGVzdCBtdXN0IGJ1aWxkIHdpdGhvdXQgaGF2aW5nIEdsYXNzRmlzaCBwcmVzZW50LgogICAgICAgICB0cnl7CiAKICAgICAgICAgQWRtaW5Db25uZWN0aW9uRmFjdG9yeSBhY2YgPSBuZXcgQWRtaW5Db25uZWN0aW9uRmFjdG9yeSgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9Db25uZWN0b3JSZXNvdXJjZVRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vQ29ubmVjdG9yUmVzb3VyY2VUZXN0LmphdmEKaW5kZXggYzRhNmQ4Yy4uNGQzNWU3MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9Db25uZWN0b3JSZXNvdXJjZVRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL0Nvbm5lY3RvclJlc291cmNlVGVzdC5qYXZhCkBAIC00MjksNyArNDI5LDcgQEAKICAgICAgICAgcmVwb3J0RXhwZWN0ZWRSZXN1bHQodGVzdE5hbWUsIHJlc3VsdCk7CiAgICAgICAgIC8vcmVwb3J0RXhwZWN0ZWRSZXN1bHQodGVzdE5hbWUsIHJlc3VsdCwgSU5TVEFOQ0UyX05BTUUsIElOU1RBTkNFMV9OQU1FKTsKICAgICAgICAgcmVwb3J0RXhwZWN0ZWRSZXN1bHQodGVzdE5hbWUsIHJlc3VsdCwgIkNvbm5lY3RvciByZXNvdXJjZSByZXNvdXJjZS0xIGNyZWF0ZWQuIik7Ci0JLypDb21tZW50aW5nIG91dCB0aGUgZmFpbGVkIHRlc3QsIGNhbiBiZSB1bmNvbW1lbnRlZCBhZnRlciBmaXhpbmcgR2xhc3NmaXNoIElzc3VlIDIxNzc0ICovCisgICAgLypDb21tZW50aW5nIG91dCB0aGUgZmFpbGVkIHRlc3QsIGNhbiBiZSB1bmNvbW1lbnRlZCBhZnRlciBmaXhpbmcgR2xhc3NmaXNoIElzc3VlIDIxNzc0ICovCiAgICAgICAgLy9yZXBvcnRVbmV4cGVjdGVkUmVzdWx0KHRlc3ROYW1lLCByZXN1bHQsIFNUQU5EQUxPTkVfSU5TVEFOQ0VfTkFNRSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL0N1c3RvbVJlc291cmNlVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9DdXN0b21SZXNvdXJjZVRlc3QuamF2YQppbmRleCA3MmM4NTI0Li4wNDY1ZDE1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL0N1c3RvbVJlc291cmNlVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vQ3VzdG9tUmVzb3VyY2VUZXN0LmphdmEKQEAgLTEyMyw3ICsxMjMsNyBAQAogICAgICAgICB0ZXN0TGlzdEN1c3RvbVJlc291cmNlVGFyZ2V0RG9tYWluKCk7CiAKICAgICAgICAgdGVzdENyZWF0ZVJlc291cmNlUmVmSW5DbHVzdGVyKCk7Ci0JICAgIHRlc3RMaXN0UmVzb3VyY2VSZWZJbkNsdXN0ZXIoKTsKKyAgICAgICAgdGVzdExpc3RSZXNvdXJjZVJlZkluQ2x1c3RlcigpOwogICAgICAgICAvL3Rlc3RMaXN0Sm5kaUVudHJpZXNJbkNsdXN0ZXIoKTsKICAgICAgICAgdGVzdExpc3RDdXN0b21SZXNvdXJjZVRhcmdldENsdXN0ZXIoKTsKICAgICAgICAgdGVzdERlbGV0ZUN1c3RvbVJlc291cmNlSW5Eb21haW5FeHBlY3RGYWlsdXJlKCk7CkBAIC0xMzQsOCArMTM0LDggQEAKIAogCiAgICAgICAgIHRlc3RDcmVhdGVSZXNvdXJjZVJlZkluU3RhbmRhbG9uZUluc3RhbmNlKCk7Ci0JICAgIHRlc3RMaXN0UmVzb3VyY2VSZWZJblN0YW5kYWxvbmVJbnN0YW5jZSgpOwotCSAgICAvL3Rlc3RMaXN0Sm5kaUVudHJpZXNJblN0YW5kYWxvbmVJbnN0YW5jZSgpOworICAgICAgICB0ZXN0TGlzdFJlc291cmNlUmVmSW5TdGFuZGFsb25lSW5zdGFuY2UoKTsKKyAgICAgICAgLy90ZXN0TGlzdEpuZGlFbnRyaWVzSW5TdGFuZGFsb25lSW5zdGFuY2UoKTsKICAgICAgICAgdGVzdExpc3RDdXN0b21SZXNvdXJjZVRhcmdldFN0YW5kYWxvbmVJbnN0YW5jZSgpOwogICAgICAgICB0ZXN0RGVsZXRlQ3VzdG9tUmVzb3VyY2VJbkRvbWFpbkV4cGVjdEZhaWx1cmUoKTsKICAgICAgICAgdGVzdERlbGV0ZUN1c3RvbVJlc291cmNlRXhwZWN0RmFpbHVyZShDTFVTVEVSX05BTUUpOwpAQCAtMjg0LDcgKzI4NCw3IEBACiAgICAgICAgIHJlcG9ydFJlc3VsdFN0YXR1cyh0ZXN0TmFtZSwgcmVzdWx0KTsKICAgICAgICAgLy9yZXBvcnRFeHBlY3RlZFJlc3VsdCh0ZXN0TmFtZSwgcmVzdWx0LCBTVEFOREFMT05FX0lOU1RBTkNFX05BTUUsIElOU1RBTkNFMV9OQU1FLCBJTlNUQU5DRTJfTkFNRSk7CiAgICAgICAgIHJlcG9ydEV4cGVjdGVkUmVzdWx0KHRlc3ROYW1lLCByZXN1bHQsICJDdXN0b20gcmVzb3VyY2UgcmVzb3VyY2UtMSBkZWxldGVkLiIpOwotCS8qQ29tbWVudGluZyBvdXQgdGhlIGZhaWxlZCB0ZXN0LCBjYW4gYmUgdW5jb21tZW50ZWQgYWZ0ZXIgZml4aW5nIEdsYXNzZmlzaCBJc3N1ZSAyMTc3NCAqLworICAgIC8qQ29tbWVudGluZyBvdXQgdGhlIGZhaWxlZCB0ZXN0LCBjYW4gYmUgdW5jb21tZW50ZWQgYWZ0ZXIgZml4aW5nIEdsYXNzZmlzaCBJc3N1ZSAyMTc3NCAqLwogICAgICAgICAvL3JlcG9ydFVuZXhwZWN0ZWRSZXN1bHQodGVzdE5hbWUsIHJlc3VsdCwgU0VSVkVSLCBDTFVTVEVSX05BTUUpOwogICAgIH0KIApAQCAtMjk0LDcgKzI5NCw3IEBACiAgICAgICAgIHJlcG9ydFJlc3VsdFN0YXR1cyh0ZXN0TmFtZSwgcmVzdWx0KTsKICAgICAgICAgLy9yZXBvcnRFeHBlY3RlZFJlc3VsdCh0ZXN0TmFtZSwgcmVzdWx0LCBJTlNUQU5DRTFfTkFNRSwgSU5TVEFOQ0UyX05BTUUsIFNUQU5EQUxPTkVfSU5TVEFOQ0VfTkFNRSk7CiAgICAgICAgIHJlcG9ydEV4cGVjdGVkUmVzdWx0KHRlc3ROYW1lLCByZXN1bHQsICJDdXN0b20gcmVzb3VyY2UgcmVzb3VyY2UtMSBkZWxldGVkLiIpOwotCS8qQ29tbWVudGluZyBvdXQgdGhlIGZhaWxlZCB0ZXN0LCBjYW4gYmUgdW5jb21tZW50ZWQgYWZ0ZXIgZml4aW5nIEdsYXNzZmlzaCBJc3N1ZSAyMTc3NCAqLworICAgIC8qQ29tbWVudGluZyBvdXQgdGhlIGZhaWxlZCB0ZXN0LCBjYW4gYmUgdW5jb21tZW50ZWQgYWZ0ZXIgZml4aW5nIEdsYXNzZmlzaCBJc3N1ZSAyMTc3NCAqLwogICAgICAgICAvL3JlcG9ydFVuZXhwZWN0ZWRSZXN1bHQodGVzdE5hbWUsIHJlc3VsdCwgU0VSVkVSKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vRG9tYWluVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9Eb21haW5UZXN0LmphdmEKaW5kZXggYmNiMTFjNC4uYWUxMGU2NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9Eb21haW5UZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9Eb21haW5UZXN0LmphdmEKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgICAgICAgICBfYnJhbmRpbmdQcm9wZXJ0aWVzLmxvYWQobmV3IEZpbGVJbnB1dFN0cmVhbShicmFuZGluZ0ZpbGUpKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk5vdCBhYmxlIHRvIGxvYWQgYnJhbmRpbmcgZmlsZS4iKTsKLSAgICAgICAgICAgIH0gCisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTk5LDcgKzk5LDcgQEAKICAgICAgKgogICAgICAqIEBwYXJhbSBuYW1lIERvbWFpbiBuYW1lLgogICAgICAqIEBwYXJhbSB0ZW1wbGF0ZVBhdGggYWJzb2x1dGUgdGVtcGxhdGUgcGF0aC4KLSAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGdpdmVuIHRlbXBsYXRlIGlzIHVzZWQgZm9yIGRvbWFpbiBjcmVhdGlvbi4gCisgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSBnaXZlbiB0ZW1wbGF0ZSBpcyB1c2VkIGZvciBkb21haW4gY3JlYXRpb24uCiAgICAgICovCiAgICAgYm9vbGVhbiBjaGVja0RvbWFpbihTdHJpbmcgbmFtZSwgU3RyaW5nIHRlbXBsYXRlUGF0aCkgewogICAgICAgICBGaWxlIGRvbUluZm9YbWwgPSBUZXN0RW52LmdldERvbWFpbkluZm9YbWwobmFtZSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL0R5bmFtaWNTeW5jQnJva2VyTGlzdFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vRHluYW1pY1N5bmNCcm9rZXJMaXN0VGVzdC5qYXZhCmluZGV4IGYxMTQ5MDUuLmE5ZTRmNjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vRHluYW1pY1N5bmNCcm9rZXJMaXN0VGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vRHluYW1pY1N5bmNCcm9rZXJMaXN0VGVzdC5qYXZhCkBAIC0xNTEsNyArMTUxLDcgQEAKICAgICBwdWJsaWMgT2JqZWN0IGpteENhbGwoU3RyaW5nIGptc1Byb3ZpZGVyUG9ydCwgU3RyaW5nIG9iamVjdE5hbWUpewogLyoKICAqIENvbW1lbnRlZCBvdXQgYmVjYXVzZSBidWlsZGluZyB0aGlzIGNvZGUgZGVwZW5kcyBvbiBoYXZpbmcgR2xhc3NGaXNoIGFscmVhZHkgZG93bmxvYWRlZC4KLSAqIFRoZSBhZG1pbiBkZXZ0ZXN0IG11c3QgYnVpbGQgd2l0aG91dCBoYXZpbmcgR2xhc3NGaXNoIHByZXNlbnQuIAorICogVGhlIGFkbWluIGRldnRlc3QgbXVzdCBidWlsZCB3aXRob3V0IGhhdmluZyBHbGFzc0Zpc2ggcHJlc2VudC4KICAgICAgdHJ5ewogICAgICAgICBBZG1pbkNvbm5lY3Rpb25GYWN0b3J5IGFjZiA9IG5ldyBBZG1pbkNvbm5lY3Rpb25GYWN0b3J5KCk7CiAgICAgICAgIGFjZi5zZXRQcm9wZXJ0eShBZG1pbkNvbm5lY3Rpb25Db25maWd1cmF0aW9uLmltcUFkZHJlc3MsICAgICJsb2NhbGhvc3Q6IiArIGptc1Byb3ZpZGVyUG9ydCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL0V4dGVybmFsSm5kaVJlc291cmNlVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9FeHRlcm5hbEpuZGlSZXNvdXJjZVRlc3QuamF2YQppbmRleCBkYTc2OWRlLi4wYTQwNzZmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL0V4dGVybmFsSm5kaVJlc291cmNlVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vRXh0ZXJuYWxKbmRpUmVzb3VyY2VUZXN0LmphdmEKQEAgLTI4Nyw3ICsyODcsNyBAQAogICAgICAgICByZXBvcnRSZXN1bHRTdGF0dXModGVzdE5hbWUsIHJlc3VsdCk7CiAgICAgICAgIC8vcmVwb3J0RXhwZWN0ZWRSZXN1bHQodGVzdE5hbWUsIHJlc3VsdCwgU1RBTkRBTE9ORV9JTlNUQU5DRV9OQU1FLCBJTlNUQU5DRTFfTkFNRSwgSU5TVEFOQ0UyX05BTUUpOwogICAgICAgICByZXBvcnRFeHBlY3RlZFJlc3VsdCh0ZXN0TmFtZSwgcmVzdWx0LCAiSm5kaSByZXNvdXJjZSByZXNvdXJjZS0xIGRlbGV0ZWQuIik7Ci0JLypDb21tZW50aW5nIG91dCB0aGUgZmFpbGVkIHRlc3QsIGNhbiBiZSB1bmNvbW1lbnRlZCBhZnRlciBmaXhpbmcgR2xhc3NmaXNoIElzc3VlIDIxNzc0ICovCisgICAgLypDb21tZW50aW5nIG91dCB0aGUgZmFpbGVkIHRlc3QsIGNhbiBiZSB1bmNvbW1lbnRlZCBhZnRlciBmaXhpbmcgR2xhc3NmaXNoIElzc3VlIDIxNzc0ICovCiAgICAgICAgIC8vcmVwb3J0VW5leHBlY3RlZFJlc3VsdCh0ZXN0TmFtZSwgcmVzdWx0LCBTRVJWRVIsIENMVVNURVJfTkFNRSk7CiAgICAgfQogCkBAIC0yOTcsNyArMjk3LDcgQEAKICAgICAgICAgcmVwb3J0UmVzdWx0U3RhdHVzKHRlc3ROYW1lLCByZXN1bHQpOwogICAgICAgICAvL3JlcG9ydEV4cGVjdGVkUmVzdWx0KHRlc3ROYW1lLCByZXN1bHQsIElOU1RBTkNFMV9OQU1FLCBJTlNUQU5DRTJfTkFNRSwgU1RBTkRBTE9ORV9JTlNUQU5DRV9OQU1FKTsKICAgICAgICAgcmVwb3J0RXhwZWN0ZWRSZXN1bHQodGVzdE5hbWUsIHJlc3VsdCwgIkpuZGkgcmVzb3VyY2UgcmVzb3VyY2UtMSBkZWxldGVkLiIpOwotCS8qQ29tbWVudGluZyBvdXQgdGhlIGZhaWxlZCB0ZXN0LCBjYW4gYmUgdW5jb21tZW50ZWQgYWZ0ZXIgZml4aW5nIEdsYXNzZmlzaCBJc3N1ZSAyMTc3NCAqLworICAgIC8qQ29tbWVudGluZyBvdXQgdGhlIGZhaWxlZCB0ZXN0LCBjYW4gYmUgdW5jb21tZW50ZWQgYWZ0ZXIgZml4aW5nIEdsYXNzZmlzaCBJc3N1ZSAyMTc3NCAqLwogICAgICAgICAvL3JlcG9ydFVuZXhwZWN0ZWRSZXN1bHQodGVzdE5hbWUsIHJlc3VsdCwgU0VSVkVSKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vR2V0U2V0VGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9HZXRTZXRUZXN0LmphdmEKaW5kZXggNzAwYWQ1MC4uNDRiY2UyZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9HZXRTZXRUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9HZXRTZXRUZXN0LmphdmEKQEAgLTMzLDcgKzMzLDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0gICAgICAgIG5ldyBHZXRTZXRUZXN0KCkucnVuVGVzdHMoKTsgICAgCisgICAgICAgIG5ldyBHZXRTZXRUZXN0KCkucnVuVGVzdHMoKTsKICAgICB9CiAKICAgICBwcml2YXRlIFN0cmluZyBlbmNvZGVTdGFyKFN0cmluZyBzKSB7CkBAIC01MiwyMCArNTIsMjAgQEAKICAgICAgICAgc3RhcnREb21haW4oKTsKICAgICAgICAgcmVwb3J0KCJjcmVhdGUtY2x1c3RlciIsIGFzYWRtaW4oImNyZWF0ZS1jbHVzdGVyIiwgImdzMSIpKTsKICAgICB9Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBjbGVhbnVwKCkgewogICAgICAgICByZXBvcnQoImRlbGV0ZS1jbHVzdGVyIiwgYXNhZG1pbigiZGVsZXRlLWNsdXN0ZXIiLCAiZ3MxIikpOwotICAgICAgICBzdG9wRG9tYWluKCk7ICAgICAgICAKKyAgICAgICAgc3RvcERvbWFpbigpOwogICAgIH0KLSAgICAKKwogICAgIC8qCiAgICAgICogVXNlICJnZXQgKiIgdG8gZ2V0IGFsbCBzZXR0YWJsZSB2YWx1ZXMsIGFuZCB0aGVuIHVzZSBzZXQgdG8gc2V0IHRoZSBhdHRyaWJ1dGUKICAgICAgKiB0byB0aGUgY3VycmVudCB2YWx1ZS4KICAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgdGVzdEdldFNldEFsbCgpIHsKICAgICAgICAgZmluYWwgU3RyaW5nIHQgPSAiZ2V0c2V0YWxsLSI7Ci0gICAgICAgIAorCiAgICAgICAgIEFzYWRtaW5SZXR1cm4gcnYgPSBhc2FkbWluV2l0aE91dHB1dCgiZ2V0IiwgZW5jb2RlU3RhcigiKiIpKTsKICAgICAgICAgcmVwb3J0KHQgKyAiZ2V0IiwgcnYucmV0dXJuVmFsdWUpOwogICAgICAgICBTdHJpbmdbXSBsaW5lcyA9IHJ2Lm91dC5zcGxpdCgiW1xyXG5dIik7CkBAIC04MCw3ICs4MCw3IEBACiAgICAgICAgIH0KICAgICAgICAgdGVzdFNldHModCwgc2V0bGluZXMpOwogICAgIH0KLSAgICAKKwogICAgIC8qCiAgICAgICogVXNlICJnZXQgKiIgdG8gZ2V0IGFsbCBzZXR0YWJsZSBhbGlhcyB2YWx1ZXMsIGFuZCB0aGVuIHVzZSBzZXQgdG8gc2V0IHRoZSBhdHRyaWJ1dGUKICAgICAgKiB0byB0aGUgY3VycmVudCB2YWx1ZSB1c2luZyB0aGUgYWxpYXMgZm9yIHRoZSB2YWx1ZS4KQEAgLTk0LDcgKzk0LDcgQEAKICAgICAgICAgfTsKICAgICAgICAgTGlzdDxTdHJpbmc+IHNldGxpbmVzID0gbmV3IEFycmF5TGlzdCgpOwogCi0gICAgICAgIAorCiAgICAgICAgIGZvciAoU3RyaW5nIGEgOiBhbGlhc2VzKSB7CiAgICAgICAgICAgICBBc2FkbWluUmV0dXJuIHJ2ID0gYXNhZG1pbldpdGhPdXRwdXQoImdldCIsIGVuY29kZVN0YXIoYSArICIuKiIpKTsKICAgICAgICAgICAgIHJlcG9ydCh0ICsgImdldCIsIHJ2LnJldHVyblZhbHVlKTsKQEAgLTEwMiwxMiArMTAyLDEyIEBACiAgICAgICAgICAgICBpZiAoIXJ2LnJldHVyblZhbHVlKSBjb250aW51ZTsKIAogICAgICAgICAgICAgZmlsdGVySnVuayhsaW5lcyk7Ci0gICAgICAgIAorCiAgICAgICAgICAgICBmb3IgKFN0cmluZyBsaW5lIDogbGluZXMpIHsKICAgICAgICAgICAgICAgICBsaW5lID0gZmlsdGVyU2V0KGxpbmUpOwogICAgICAgICAgICAgICAgIGlmIChsaW5lID09IG51bGwpIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoYSArICIuIiwgIiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgaWYgKGxpbmUuY29udGFpbnMoInNlcnZlci5uYW1lIikgfHwKICAgICAgICAgICAgICAgICAgICAgbGluZS5jb250YWlucygiZ3MxLm5hbWUiKSkgY29udGludWU7CiAgICAgICAgICAgICAgICAgc2V0bGluZXMuYWRkKGxpbmUpOwpAQCAtMTE1LDkgKzExNSw5IEBACiAgICAgICAgIH0KICAgICAgICAgdGVzdFNldHModCwgc2V0bGluZXMpOwogICAgIH0KLSAgICAKKwogICAgIC8qCi0gICAgICogRmlsdGVyIG91dCBzZXQgcmVxdWVzdHMgdGhhdCBhcmUga25vd24gbm90IHdvcmsuIAorICAgICAqIEZpbHRlciBvdXQgc2V0IHJlcXVlc3RzIHRoYXQgYXJlIGtub3duIG5vdCB3b3JrLgogICAgICAqIEVuY29kZSB0aGUgcmVxdWVzdCBpZiBuZWNlc3NhcnkuCiAgICAgICovCiAgICAgcHJpdmF0ZSBTdHJpbmcgZmlsdGVyU2V0KFN0cmluZyBsaW5lKSB7CkBAIC0xNDAsMTQgKzE0MCwxNCBAQAogICAgICAgICBpZiAobGluZS5jb250YWlucygic2VjdXJpdHktY29uZmlndXJhdGlvbnMiKSkgcmV0dXJuIG51bGw7CiAKICAgICAgICAgLy8gZXNjYXBlIHRoZSAiLiIgaW4gc29tZSBwcm9wZXJ0eSBuYW1lcwotICAgICAgICBmaW5hbCBTdHJpbmdbXSBkb3R0ZWRwcm9wcyA9IHsgCi0gICAgICAgICAgICAiZW5jcnlwdGlvbi5rZXkuYWxpYXMiLCAKKyAgICAgICAgZmluYWwgU3RyaW5nW10gZG90dGVkcHJvcHMgPSB7CisgICAgICAgICAgICAiZW5jcnlwdGlvbi5rZXkuYWxpYXMiLAogICAgICAgICAgICAgInNpZ25hdHVyZS5rZXkuYWxpYXMiLAogICAgICAgICAgICAgImR5bmFtaWMudXNlcm5hbWUucGFzc3dvcmQiLAogICAgICAgICAgICAgInNlY3VyaXR5LmNvbmZpZyIsCiAgICAgICAgICAgICAiYWRtaW5pc3RyYXRpdmUuZG9tYWluLm5hbWUiLAogICAgICAgICB9OwotICAgICAgICAKKwogICAgICAgICBmb3IgKFN0cmluZyBkcCA6IGRvdHRlZHByb3BzKSB7CiAgICAgICAgICAgICBpZiAobGluZS5jb250YWlucyhkcCkpIHsKICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZShkcCwgZHAucmVwbGFjZSgiLiIsICJcXC4iKSk7CkBAIC0xNTcsNyArMTU3LDcgQEAKICAgICAgICAgcmV0dXJuIGxpbmU7CiAKIH0KLSAgICAvKiAKKyAgICAvKgogICAgICAqIFRlc3QgYSBsaXN0IG9mIHNldCByZXF1ZXN0cyBieSBydW5uaW5nIGFzYWRtaW4gc2V0IHJlcGVhdGVkbHkuCiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIHRlc3RTZXRzKFN0cmluZyB0bmFtZSwgTGlzdDxTdHJpbmc+IHJlcXMpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vSW5zdGFuY2VUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL0luc3RhbmNlVGVzdC5qYXZhCmluZGV4IDQxZDkzOGUuLjc1OTllYzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vSW5zdGFuY2VUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9JbnN0YW5jZVRlc3QuamF2YQpAQCAtOTUsMTAgKzk1LDEwIEBACiAgICAgICAgIHRlc3RSZW5kZXp2b3VzKCk7CiAgICAgICAgIHRlc3RVcGdyYWRlKCk7CiAgICAgICAgIHRlc3ROb2RlKCk7Ci0JdGVzdENyZWF0ZUluc3RhbmNlQ29uZmlnTm9kZSgpOworICAgIHRlc3RDcmVhdGVJbnN0YW5jZUNvbmZpZ05vZGUoKTsKICAgICAgICAgdGVzdFBvcnRCYXNlKCk7CiAgICAgICAgIGludmFsaWRDb25maWdSZWYoKTsKLSAgICAgICAgCisKICAgICAgICAgaWYoIWlzSGFkYXMoKSkKICAgICAgICAgICAgIGRlbGV0ZURpcmVjdG9yeShub2RlRGlyKTsKIApAQCAtMjY4LDcgKzI2OCw3IEBACiAgICAgICAgIHJldCA9IGFzYWRtaW5XaXRoT3V0cHV0KCJnZXQiLCAic2VydmVycy5zZXJ2ZXIuIiArIGluYW1lICsgIi5zeXN0ZW0tcHJvcGVydHkucHJvcDEudmFsdWUiKTsKICAgICAgICAgc3VjY2VzcyA9IHJldC5vdXRBbmRFcnIuaW5kZXhPZigic2VydmVycy5zZXJ2ZXIuIiArIGluYW1lICsgIi5zeXN0ZW0tcHJvcGVydHkucHJvcDEudmFsdWU9dmFsQSIpID49IDA7CiAgICAgICAgIHJlcG9ydCgiY3JlYXRlLWluc3RhbmNlLXByb3AxdmFsdWUiLCBzdWNjZXNzKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0ID0gYXNhZG1pbldpdGhPdXRwdXQoImdldCIsICJzZXJ2ZXJzLnNlcnZlci4iICsgaW5hbWUgKyAiLnN5c3RlbS1wcm9wZXJ0eS5wcm9wMy5uYW1lIik7CiAgICAgICAgIHN1Y2Nlc3MgPSByZXQub3V0QW5kRXJyLmluZGV4T2YoInNlcnZlcnMuc2VydmVyLiIgKyBpbmFtZSArICIuc3lzdGVtLXByb3BlcnR5LnByb3AzLm5hbWU9cHJvcDMiKSA+PSAwOwogICAgICAgICByZXBvcnQoImNyZWF0ZS1pbnN0YW5jZS1wcm9wM25hbWUiLCBzdWNjZXNzKTsKQEAgLTMwNCw3ICszMDQsNyBAQAogICAgICAgICByZXBvcnQoImRlbGV0ZS1pbnN0YW5jZS1yZWdkYXMiLCAhYXNhZG1pbigiZ2V0IiwgInNlcnZlcnMuc2VydmVyLiIgKyBpbmFtZSkpOwogICAgICAgICByZXBvcnQoImRlbGV0ZS1pbnN0YW5jZS1jb25maWciLCAhYXNhZG1pbigiZ2V0IiwgImNvbmZpZ3MuY29uZmlnLiIgKyBpbmFtZSArICItY29uZmlnIikpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBjcmVhdGVBZG1pbkNvbW1hbmRGYWlsKCkgewogICAgICAgICBwcmludGYoIkNhbGwgcmVtb3RlIEFkbWluQ29tbWFuZCBjcmVhdGUtaW5zdGFuY2Ugd2l0aCBiYWQgcGFyYW1zIik7CiAgICAgICAgIFN0cmluZyBpbmFtZSA9ICJiYWRhcHBsZSI7CkBAIC0zNjIsNyArMzYyLDcgQEAKICAgICAgICAgU3RyaW5nIG5vZGVkaXIgPSBpbnN0YWxsZGlyICsgRmlsZS5zZXBhcmF0b3IgKyAibXlub2RlcyI7CiAgICAgICAgIFN0cmluZyBub2RlID0gIm4xIjsKICAgICAgICAgU3RyaW5nIGluc3RhbmNlID0gImkxIjsKLSAgICAgICAgCisKICAgICAgICAgcmVwb3J0KCJjcmVhdGUtbG9jYWwtaW5zdGFuY2Utbm9zdWNobm9kZSIsICFhc2FkbWluKCJjcmVhdGUtbG9jYWwtaW5zdGFuY2UiLAogICAgICAgICAgICAgIi0tbm9kZSIsICJib2d1cyIsICJib2d1c2luc3RhbmNlIikpOwogCkBAIC00NDMsMTggKzQ0MywxOCBAQAogICAgICAgICAvLyBzZWUgSklSQSBpc3N1ZSAxNjU3OQogICAgICAgICBTdHJpbmcgbm9kZSA9ICJ0ZXN0LW5vZGUiOwogICAgICAgICBTdHJpbmcgaW5zdGFuY2UgPSAidGVzdC1pbnN0YW5jZSI7Ci0JU3RyaW5nIHRlc3ROYW1lID0gImNyZWF0ZS1ub2RlLWNvbmZpZy1vZmZsaW5lIjsKKyAgICBTdHJpbmcgdGVzdE5hbWUgPSAiY3JlYXRlLW5vZGUtY29uZmlnLW9mZmxpbmUiOwogCi0JLy8gQ3JlYXRlcyBjb25maWcgbm9kZSB3aXRob3V0IHRoZSBpbnN0YWxsZGlyCisgICAgLy8gQ3JlYXRlcyBjb25maWcgbm9kZSB3aXRob3V0IHRoZSBpbnN0YWxsZGlyCiAgICAgICAgIHJlcG9ydCh0ZXN0TmFtZSArICIwIiwgYXNhZG1pbigiY3JlYXRlLW5vZGUtY29uZmlnIiwKLQkJIi0tbm9kZWhvc3QiLCAibG9jYWxob3N0Iixub2RlKSk7Ci0JcmVwb3J0KHRlc3ROYW1lKyIxIiwgYXNhZG1pbigiY3JlYXRlLWluc3RhbmNlIiwgIi0tbm9kZSIsIG5vZGUsIGluc3RhbmNlKSk7Ci0JLy8gY2hlY2sgdGhhdCBpbnN0YWxsZGlyIHdhcyBzZXQgCisgICAgICAgICItLW5vZGVob3N0IiwgImxvY2FsaG9zdCIsbm9kZSkpOworICAgIHJlcG9ydCh0ZXN0TmFtZSsiMSIsIGFzYWRtaW4oImNyZWF0ZS1pbnN0YW5jZSIsICItLW5vZGUiLCBub2RlLCBpbnN0YW5jZSkpOworICAgIC8vIGNoZWNrIHRoYXQgaW5zdGFsbGRpciB3YXMgc2V0CiAgICAgICAgIHJlcG9ydCh0ZXN0TmFtZSsiMiIsYXNhZG1pbigiZ2V0IiwgIm5vZGVzLm5vZGUuIiArIG5vZGUgKyAiLmluc3RhbGwtZGlyIikpOwotCQotCS8vY2xlYW51cAotCXJlcG9ydCh0ZXN0TmFtZSArIjMiLCBhc2FkbWluKCJkZWxldGUtaW5zdGFuY2UiLCBpbnN0YW5jZSApKTsKLQlyZXBvcnQodGVzdE5hbWUgKyI0IiwgYXNhZG1pbigiZGVsZXRlLW5vZGUtY29uZmlnIiwgbm9kZSApKTsKKworICAgIC8vY2xlYW51cAorICAgIHJlcG9ydCh0ZXN0TmFtZSArIjMiLCBhc2FkbWluKCJkZWxldGUtaW5zdGFuY2UiLCBpbnN0YW5jZSApKTsKKyAgICByZXBvcnQodGVzdE5hbWUgKyI0IiwgYXNhZG1pbigiZGVsZXRlLW5vZGUtY29uZmlnIiwgbm9kZSApKTsKIAogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9KYXZhTWFpbFJlc291cmNlVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9KYXZhTWFpbFJlc291cmNlVGVzdC5qYXZhCmluZGV4IDVlOTU4ODguLmIyNzY2ZDEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vSmF2YU1haWxSZXNvdXJjZVRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL0phdmFNYWlsUmVzb3VyY2VUZXN0LmphdmEKQEAgLTI4Nyw3ICsyODcsNyBAQAogICAgICAgICByZXBvcnRSZXN1bHRTdGF0dXModGVzdE5hbWUsIHJlc3VsdCk7CiAgICAgICAgIC8vcmVwb3J0RXhwZWN0ZWRSZXN1bHQodGVzdE5hbWUsIHJlc3VsdCwgU1RBTkRBTE9ORV9JTlNUQU5DRV9OQU1FLCBJTlNUQU5DRTFfTkFNRSwgSU5TVEFOQ0UyX05BTUUpOwogICAgICAgICByZXBvcnRFeHBlY3RlZFJlc3VsdCh0ZXN0TmFtZSwgcmVzdWx0LCAiTWFpbCByZXNvdXJjZSByZXNvdXJjZS0xIGRlbGV0ZWQuIik7Ci0JLypDb21tZW50aW5nIG91dCB0aGUgZmFpbGVkIHRlc3QsIGNhbiBiZSB1bmNvbW1lbnRlZCBhZnRlciBmaXhpbmcgR2xhc3NmaXNoIElzc3VlIDIxNzc0ICovCisgICAgLypDb21tZW50aW5nIG91dCB0aGUgZmFpbGVkIHRlc3QsIGNhbiBiZSB1bmNvbW1lbnRlZCBhZnRlciBmaXhpbmcgR2xhc3NmaXNoIElzc3VlIDIxNzc0ICovCiAgICAgICAgIC8vcmVwb3J0VW5leHBlY3RlZFJlc3VsdCh0ZXN0TmFtZSwgcmVzdWx0LCBTRVJWRVIsIENMVVNURVJfTkFNRSk7CiAgICAgfQogCkBAIC0yOTcsNyArMjk3LDcgQEAKICAgICAgICAgcmVwb3J0UmVzdWx0U3RhdHVzKHRlc3ROYW1lLCByZXN1bHQpOwogICAgICAgICAvL3JlcG9ydEV4cGVjdGVkUmVzdWx0KHRlc3ROYW1lLCByZXN1bHQsIElOU1RBTkNFMV9OQU1FLCBJTlNUQU5DRTJfTkFNRSwgU1RBTkRBTE9ORV9JTlNUQU5DRV9OQU1FKTsKICAgICAgICAgcmVwb3J0RXhwZWN0ZWRSZXN1bHQodGVzdE5hbWUsIHJlc3VsdCwgIk1haWwgcmVzb3VyY2UgcmVzb3VyY2UtMSBkZWxldGVkLiIpOwotCS8qQ29tbWVudGluZyBvdXQgdGhlIGZhaWxlZCB0ZXN0LCBjYW4gYmUgdW5jb21tZW50ZWQgYWZ0ZXIgZml4aW5nIEdsYXNzZmlzaCBJc3N1ZSAyMTc3NCAqLworICAgIC8qQ29tbWVudGluZyBvdXQgdGhlIGZhaWxlZCB0ZXN0LCBjYW4gYmUgdW5jb21tZW50ZWQgYWZ0ZXIgZml4aW5nIEdsYXNzZmlzaCBJc3N1ZSAyMTc3NCAqLwogICAgICAgICAvL3JlcG9ydFVuZXhwZWN0ZWRSZXN1bHQodGVzdE5hbWUsIHJlc3VsdCwgU0VSVkVSKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vSmRiY1Jlc291cmNlVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9KZGJjUmVzb3VyY2VUZXN0LmphdmEKaW5kZXggYmIxNTM1MS4uMDgyNmEwNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9KZGJjUmVzb3VyY2VUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9KZGJjUmVzb3VyY2VUZXN0LmphdmEKQEAgLTIxLDcgKzIxLDcgQEAKICAqLwogcHVibGljIGNsYXNzIEpkYmNSZXNvdXJjZVRlc3QgZXh0ZW5kcyBBZG1pbkJhc2VEZXZUZXN0IHsKIAotICAgIC8vVE9ETyB0ZXN0LWNhc2UgZm9yIElUIDEyNjE0IAorICAgIC8vVE9ETyB0ZXN0LWNhc2UgZm9yIElUIDEyNjE0CiAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDTFVTVEVSX05BTUUgPSAiY2x1c3RlcjEiOwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElOU1RBTkNFMV9OQU1FID0gImluc3RhbmNlMSI7CkBAIC0zNTIsNyArMzUyLDcgQEAKICAgICAgICAgcmVwb3J0UmVzdWx0U3RhdHVzKHRlc3ROYW1lLCByZXN1bHQpOwogICAgICAgICAvL3JlcG9ydEV4cGVjdGVkUmVzdWx0KHRlc3ROYW1lLCByZXN1bHQsIElOU1RBTkNFMV9OQU1FLCBJTlNUQU5DRTJfTkFNRSk7CiAgICAgICAgIHJlcG9ydEV4cGVjdGVkUmVzdWx0KHRlc3ROYW1lLCByZXN1bHQsICJKREJDIHJlc291cmNlIHJlc291cmNlLTEgZGVsZXRlZCBzdWNjZXNzZnVsbHkiKTsKLQkvKkNvbW1lbnRpbmcgb3V0IHRoZSBmYWlsZWQgdGVzdCwgY2FuIGJlIHVuY29tbWVudGVkIGFmdGVyIGZpeGluZyBHbGFzc2Zpc2ggSXNzdWUgMjE3NzQgKi8KKyAgICAvKkNvbW1lbnRpbmcgb3V0IHRoZSBmYWlsZWQgdGVzdCwgY2FuIGJlIHVuY29tbWVudGVkIGFmdGVyIGZpeGluZyBHbGFzc2Zpc2ggSXNzdWUgMjE3NzQgKi8KICAgICAgICAgLy9yZXBvcnRVbmV4cGVjdGVkUmVzdWx0KHRlc3ROYW1lLCByZXN1bHQsIFNUQU5EQUxPTkVfSU5TVEFOQ0VfTkFNRSk7CiAgICAgfQogCkBAIC00MDAsNyArNDAwLDcgQEAKICAgICAgICAgcmVwb3J0RXhwZWN0ZWRSZXN1bHQodGVzdE5hbWUsIHJlc3VsdCk7CiAgICAgICAgIC8vcmVwb3J0RXhwZWN0ZWRSZXN1bHQodGVzdE5hbWUsIHJlc3VsdCwgSU5TVEFOQ0UyX05BTUUsIElOU1RBTkNFMV9OQU1FKTsKICAgICAgICAgcmVwb3J0RXhwZWN0ZWRSZXN1bHQodGVzdE5hbWUsIHJlc3VsdCwgIkpEQkMgcmVzb3VyY2UgcmVzb3VyY2UtMSBjcmVhdGVkIHN1Y2Nlc3NmdWxseS4iKTsKLQkvKkNvbW1lbnRpbmcgb3V0IHRoZSBmYWlsZWQgdGVzdCwgY2FuIGJlIHVuY29tbWVudGVkIGFmdGVyIGZpeGluZyBHbGFzc2Zpc2ggSXNzdWUgMjE3NzQgKi8KKyAgICAvKkNvbW1lbnRpbmcgb3V0IHRoZSBmYWlsZWQgdGVzdCwgY2FuIGJlIHVuY29tbWVudGVkIGFmdGVyIGZpeGluZyBHbGFzc2Zpc2ggSXNzdWUgMjE3NzQgKi8KICAgICAgICAgLy9yZXBvcnRVbmV4cGVjdGVkUmVzdWx0KHRlc3ROYW1lLCByZXN1bHQsIFNUQU5EQUxPTkVfSU5TVEFOQ0VfTkFNRSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL0xCQ29tbWFuZHNUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL0xCQ29tbWFuZHNUZXN0LmphdmEKaW5kZXggNjM5NTBmMS4uZTE3YjVhNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9MQkNvbW1hbmRzVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vTEJDb21tYW5kc1Rlc3QuamF2YQpAQCAtMzE2LDcgKzMxNiw3IEBACiAKICAgICAgICAgZGVsZXRlSW5zdGFuY2VzKCk7CiAgICAgICAgIGFzYWRtaW4oInN0b3AtZG9tYWluIik7Ci0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL0xvZ2dpbmdDb21tYW5kVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9Mb2dnaW5nQ29tbWFuZFRlc3QuamF2YQppbmRleCBjNDhiYTc1Li43MGMxNDFhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL0xvZ2dpbmdDb21tYW5kVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vTG9nZ2luZ0NvbW1hbmRUZXN0LmphdmEKQEAgLTIxLDcgKzIxLDcgQEAKICAqLwogcHVibGljIGNsYXNzIExvZ2dpbmdDb21tYW5kVGVzdCBleHRlbmRzIEFkbWluQmFzZURldlRlc3QgewogCi0gICAgLy9UT0RPIHRlc3QtY2FzZSBmb3IgSVQgMTI2MTQgCisgICAgLy9UT0RPIHRlc3QtY2FzZSBmb3IgSVQgMTI2MTQKIAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENMVVNURVJfTkFNRSA9ICJjbHVzdGVyMSI7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5TVEFOQ0UxX05BTUUgPSAiaW5zdGFuY2UxIjsKQEAgLTMwLDE2ICszMCwxNiBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNFVF9MT0dfTEVWRUwgPSAic2V0LWxvZy1sZXZlbHMiOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTRVRfTE9HX0FUVFJJQlVURSA9ICJzZXQtbG9nLWF0dHJpYnV0ZXMiOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBMSVNUX0xPR19BVFRSSUJVVEUgPSAibGlzdC1sb2ctYXR0cmlidXRlcyI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIExJU1RfTE9HX0xFVkVMID0gImxpc3QtbG9nLWxldmVscyI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENPTExFQ1RfTE9HX0ZJTEVTID0gImNvbGxlY3QtbG9nLWZpbGVzIjsKLSAgICAKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFSR0VUX09QVElPTiA9ICItLXRhcmdldCI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBBQ0tBR0VfTkFNRSA9ImxvZ2dpbmcuY29tbWFuZC50ZXN0PUlORk8iOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBMSVNUX0xPR19BVFRSSUJVVEUgPSAibGlzdC1sb2ctYXR0cmlidXRlcyI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIExJU1RfTE9HX0xFVkVMID0gImxpc3QtbG9nLWxldmVscyI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENPTExFQ1RfTE9HX0ZJTEVTID0gImNvbGxlY3QtbG9nLWZpbGVzIjsKIAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSSUJVVEVfTkFNRSA9ImphdmEudXRpbC5sb2dnaW5nLkZpbGVIYW5kbGVyLmNvdW50PTEwIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFSR0VUX09QVElPTiA9ICItLXRhcmdldCI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBBQ0tBR0VfTkFNRSA9ImxvZ2dpbmcuY29tbWFuZC50ZXN0PUlORk8iOwogCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNFUlZFUiA9ICJzZXJ2ZXIiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSSUJVVEVfTkFNRSA9ImphdmEudXRpbC5sb2dnaW5nLkZpbGVIYW5kbGVyLmNvdW50PTEwIjsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTRVJWRVIgPSAic2VydmVyIjsKIAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nW10gRVhQRUNURURfVE9LRU5TID0ge1BBQ0tBR0VfTkFNRX07CiAKQEAgLTQ5LDcgKzQ5LDcgQEAKICAgICAgICAgbmV3IExvZ2dpbmdDb21tYW5kVGVzdCgpLnJ1blRlc3RzKCk7CiAgICAgfQogCi0JQE92ZXJyaWRlCisgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIFN0cmluZyBnZXRUZXN0TmFtZSgpIHsKICAgICAgICAgcmV0dXJuICJMb2dnaW5nIjsKICAgICB9CkBAIC02Niw3ICs2Niw3IEBACiAgICAgICAgICAgICBhc2FkbWluKCJzdG9wLWxvY2FsLWluc3RhbmNlIiwgSU5TVEFOQ0UxX05BTUUpOwogICAgICAgICAgICAgYXNhZG1pbigic3RvcC1sb2NhbC1pbnN0YW5jZSIsIElOU1RBTkNFMl9OQU1FKTsKICAgICAgICAgICAgIGFzYWRtaW4oInN0b3AtY2x1c3RlciIsIENMVVNURVJfTkFNRSk7Ci0JCQlhc2FkbWluKCJkZWxldGUtbG9jYWwtaW5zdGFuY2UiLCBTVEFOREFMT05FX0lOU1RBTkNFX05BTUUpOyAgICAgICAgICAgIAorICAgICAgICAgICAgYXNhZG1pbigiZGVsZXRlLWxvY2FsLWluc3RhbmNlIiwgU1RBTkRBTE9ORV9JTlNUQU5DRV9OQU1FKTsKICAgICAgICAgICAgIGFzYWRtaW4oImRlbGV0ZS1sb2NhbC1pbnN0YW5jZSIsIElOU1RBTkNFMV9OQU1FKTsKICAgICAgICAgICAgIGFzYWRtaW4oImRlbGV0ZS1sb2NhbC1pbnN0YW5jZSIsIElOU1RBTkNFMl9OQU1FKTsKICAgICAgICAgICAgIGFzYWRtaW4oImRlbGV0ZS1jbHVzdGVyIiwgQ0xVU1RFUl9OQU1FKTsKQEAgLTc3LDggKzc3LDggQEAKIAogICAgIHB1YmxpYyB2b2lkIHJ1blRlc3RzKCkgewogICAgICAgICBzdGFydERvbWFpbigpOwotICAgICAgICAKLQkJYXNhZG1pbigiY3JlYXRlLWNsdXN0ZXIiLCBDTFVTVEVSX05BTUUpOworCisgICAgICAgIGFzYWRtaW4oImNyZWF0ZS1jbHVzdGVyIiwgQ0xVU1RFUl9OQU1FKTsKIAogICAgICAgICBhc2FkbWluKCJjcmVhdGUtbG9jYWwtaW5zdGFuY2UiLCAiLS1jbHVzdGVyIiwgQ0xVU1RFUl9OQU1FLAogICAgICAgICAgICAgICAgIC8qIi0tbm9kZSIsICJsb2NhbGhvc3QiLCovICItLXN5c3RlbXByb3BlcnRpZXMiLApAQCAtOTgsMzkgKzk4LDM5IEBACiAgICAgICAgIGFzYWRtaW4oInN0YXJ0LWNsdXN0ZXIiLCBDTFVTVEVSX05BTUUpOwogICAgICAgICBhc2FkbWluKCJzdGFydC1sb2NhbC1pbnN0YW5jZSIsIFNUQU5EQUxPTkVfSU5TVEFOQ0VfTkFNRSk7CiAKLQkJdGVzdFNldExvZ0xldmVsSW5TZXJ2ZXIoKTsKKyAgICAgICAgdGVzdFNldExvZ0xldmVsSW5TZXJ2ZXIoKTsKICAgICAgICAgdGVzdFNldExvZ0xldmVsSW5DbHVzdGVyKCk7CiAgICAgICAgIHRlc3RTZXRMb2dMZXZlbEluU3RhbmRhbG9uZUluc3RhbmNlKCk7CiAgICAgICAgIHRlc3RTZXRMb2dMZXZlbEluU2VydmVyQ29uZmlnKCk7CiAgICAgICAgIHRlc3RTZXRMb2dMZXZlbEluQ2x1c3RlckNvbmZpZygpOwogICAgICAgICB0ZXN0U2V0TG9nTGV2ZWxJblN0YW5kYWxvbmVJbnN0YW5jZUNvbmZpZygpOwotCQkKLQkJdGVzdFNldExvZ0F0dHJpYnV0ZUluU2VydmVyKCk7CisKKyAgICAgICAgdGVzdFNldExvZ0F0dHJpYnV0ZUluU2VydmVyKCk7CiAgICAgICAgIHRlc3RTZXRMb2dBdHRyaWJ1dGVJbkNsdXN0ZXIoKTsKICAgICAgICAgdGVzdFNldExvZ0F0dHJpYnV0ZUluU3RhbmRhbG9uZUluc3RhbmNlKCk7CiAgICAgICAgIHRlc3RTZXRMb2dBdHRyaWJ1dGVJblNlcnZlckNvbmZpZygpOwogICAgICAgICB0ZXN0U2V0TG9nQXR0cmlidXRlSW5DbHVzdGVyQ29uZmlnKCk7CiAgICAgICAgIHRlc3RTZXRMb2dBdHRyaWJ1dGVJblN0YW5kYWxvbmVJbnN0YW5jZUNvbmZpZygpOwogCi0JCXRlc3RMaXN0TG9nQXR0cmlidXRlSW5TZXJ2ZXIoKTsKLQkJdGVzdExpc3RMb2dBdHRyaWJ1dGVJblNlcnZlcigpOworICAgICAgICB0ZXN0TGlzdExvZ0F0dHJpYnV0ZUluU2VydmVyKCk7CisgICAgICAgIHRlc3RMaXN0TG9nQXR0cmlidXRlSW5TZXJ2ZXIoKTsKICAgICAgICAgdGVzdExpc3RMb2dBdHRyaWJ1dGVJbkNsdXN0ZXIoKTsKICAgICAgICAgdGVzdExpc3RMb2dBdHRyaWJ1dGVJblN0YW5kYWxvbmVJbnN0YW5jZSgpOwogICAgICAgICB0ZXN0TGlzdExvZ0F0dHJpYnV0ZUluU2VydmVyQ29uZmlnKCk7CiAgICAgICAgIHRlc3RMaXN0TG9nQXR0cmlidXRlSW5DbHVzdGVyQ29uZmlnKCk7CiAgICAgICAgIHRlc3RMaXN0TG9nQXR0cmlidXRlSW5TdGFuZGFsb25lSW5zdGFuY2VDb25maWcoKTsKIAotCQl0ZXN0TGlzdExvZ0xldmxlSW5TZXJ2ZXIoKTsKLQkJdGVzdExpc3RMb2dMZXZsZUluU2VydmVyKCk7CisgICAgICAgIHRlc3RMaXN0TG9nTGV2bGVJblNlcnZlcigpOworICAgICAgICB0ZXN0TGlzdExvZ0xldmxlSW5TZXJ2ZXIoKTsKICAgICAgICAgdGVzdExpc3RMb2dMZXZsZUluQ2x1c3RlcigpOwogICAgICAgICB0ZXN0TGlzdExvZ0xldmxlSW5TdGFuZGFsb25lSW5zdGFuY2UoKTsKICAgICAgICAgdGVzdExpc3RMb2dMZXZsZUluU2VydmVyQ29uZmlnKCk7CiAgICAgICAgIHRlc3RMaXN0TG9nTGV2bGVJbkNsdXN0ZXJDb25maWcoKTsKICAgICAgICAgdGVzdExpc3RMb2dMZXZsZUluU3RhbmRhbG9uZUluc3RhbmNlQ29uZmlnKCk7CiAKLQkJdGVzdENvbGxlY3RMb2dGaWxlc0luU2VydmVyKCk7Ci0JCXRlc3RDb2xsZWN0TG9nRmlsZXNJbkNsdXN0ZXIoKTsJCi0JCXRlc3RDb2xsZWN0TG9nRmlsZXNTdGFuZGFsb25lSW5zdGFuY2UoKTsKKyAgICAgICAgdGVzdENvbGxlY3RMb2dGaWxlc0luU2VydmVyKCk7CisgICAgICAgIHRlc3RDb2xsZWN0TG9nRmlsZXNJbkNsdXN0ZXIoKTsKKyAgICAgICAgdGVzdENvbGxlY3RMb2dGaWxlc1N0YW5kYWxvbmVJbnN0YW5jZSgpOwogCiAgICAgICAgIGNsZWFudXAoKTsKICAgICAgICAgc3RvcERvbWFpbigpOwpAQCAtMTU4LDcgKzE1OCw3IEBACiAgICAgICAgIHJlcG9ydEV4cGVjdGVkUmVzdWx0KHRlc3ROYW1lLCByZXN1bHQsIFNFUlZFUiApOwogICAgIH0KIAotCSBwcml2YXRlIHZvaWQgdGVzdFNldExvZ0xldmVsSW5DbHVzdGVyQ29uZmlnKCkgeworICAgICBwcml2YXRlIHZvaWQgdGVzdFNldExvZ0xldmVsSW5DbHVzdGVyQ29uZmlnKCkgewogICAgICAgICBTdHJpbmcgdGVzdE5hbWUgPSAidGVzdFNldExvZ0xldmVsSW5DbHVzdGVyQ29uZmlnIjsKICAgICAgICAgQXNhZG1pblJldHVybiByZXN1bHQgPSBhc2FkbWluV2l0aE91dHB1dChTRVRfTE9HX0xFVkVMLFRBUkdFVF9PUFRJT04sIENMVVNURVJfTkFNRSsiLWNvbmZpZyIsIFBBQ0tBR0VfTkFNRSk7CiAgICAgICAgIHJlcG9ydFJlc3VsdFN0YXR1cyh0ZXN0TmFtZSwgcmVzdWx0KTsKQEAgLTE4MCw3ICsxODAsNyBAQAogICAgIH0KIAogCi0JcHJpdmF0ZSB2b2lkIHRlc3RTZXRMb2dBdHRyaWJ1dGVJbkNsdXN0ZXIoKSB7CisgICAgcHJpdmF0ZSB2b2lkIHRlc3RTZXRMb2dBdHRyaWJ1dGVJbkNsdXN0ZXIoKSB7CiAgICAgICAgIFN0cmluZyB0ZXN0TmFtZSA9ICJ0ZXN0U2V0TG9nQXR0cmlidXRlSW5DbHVzdGVyIjsKICAgICAgICAgQXNhZG1pblJldHVybiByZXN1bHQgPSBhc2FkbWluV2l0aE91dHB1dChTRVRfTE9HX0FUVFJJQlVURSxUQVJHRVRfT1BUSU9OLCBDTFVTVEVSX05BTUUsIEFUVFJJQlVURV9OQU1FKTsKICAgICAgICAgcmVwb3J0UmVzdWx0U3RhdHVzKHRlc3ROYW1lLCByZXN1bHQpOwpAQCAtMjAxLDcgKzIwMSw3IEBACiAgICAgICAgIHJlcG9ydEV4cGVjdGVkUmVzdWx0KHRlc3ROYW1lLCByZXN1bHQsIFNFUlZFUiApOwogICAgIH0KIAotCSBwcml2YXRlIHZvaWQgdGVzdFNldExvZ0F0dHJpYnV0ZUluQ2x1c3RlckNvbmZpZygpIHsKKyAgICAgcHJpdmF0ZSB2b2lkIHRlc3RTZXRMb2dBdHRyaWJ1dGVJbkNsdXN0ZXJDb25maWcoKSB7CiAgICAgICAgIFN0cmluZyB0ZXN0TmFtZSA9ICJ0ZXN0U2V0TG9nQXR0cmlidXRlSW5DbHVzdGVyQ29uZmlnIjsKICAgICAgICAgQXNhZG1pblJldHVybiByZXN1bHQgPSBhc2FkbWluV2l0aE91dHB1dChTRVRfTE9HX0FUVFJJQlVURSxUQVJHRVRfT1BUSU9OLCBDTFVTVEVSX05BTUUrIi1jb25maWciLCBBVFRSSUJVVEVfTkFNRSk7CiAgICAgICAgIHJlcG9ydFJlc3VsdFN0YXR1cyh0ZXN0TmFtZSwgcmVzdWx0KTsKQEAgLTIyMiw5NCArMjIyLDk0IEBACiAgICAgICAgIHJlcG9ydEV4cGVjdGVkUmVzdWx0KHRlc3ROYW1lLCByZXN1bHQsIFNFUlZFUiApOwogICAgIH0KIAotCXByaXZhdGUgdm9pZCB0ZXN0TGlzdExvZ0F0dHJpYnV0ZUluU2VydmVyKCl7CisgICAgcHJpdmF0ZSB2b2lkIHRlc3RMaXN0TG9nQXR0cmlidXRlSW5TZXJ2ZXIoKXsKICAgICAgICAgU3RyaW5nIHRlc3ROYW1lID0gInRlc3RMaXN0TG9nQXR0cmlidXRlSW5TZXJ2ZXIiOwogICAgICAgICBBc2FkbWluUmV0dXJuIHJlc3VsdCA9IGFzYWRtaW5XaXRoT3V0cHV0KExJU1RfTE9HX0FUVFJJQlVURSwgU0VSVkVSKTsKLQkJcmVwb3J0RXhwZWN0ZWRSZXN1bHQodGVzdE5hbWUsIHJlc3VsdCwgImxvZzRqLmxvZ2dlci5vcmcuaGliZXJuYXRlLnZhbGlkYXRvci51dGlsLlZlcnNpb24iKTsgICAgICAgIAorICAgICAgICByZXBvcnRFeHBlY3RlZFJlc3VsdCh0ZXN0TmFtZSwgcmVzdWx0LCAibG9nNGoubG9nZ2VyLm9yZy5oaWJlcm5hdGUudmFsaWRhdG9yLnV0aWwuVmVyc2lvbiIpOwogICAgIH0KIAotCXByaXZhdGUgdm9pZCB0ZXN0TGlzdExvZ0F0dHJpYnV0ZUluQ2x1c3RlcigpeworICAgIHByaXZhdGUgdm9pZCB0ZXN0TGlzdExvZ0F0dHJpYnV0ZUluQ2x1c3RlcigpewogICAgICAgICBTdHJpbmcgdGVzdE5hbWUgPSAidGVzdExpc3RMb2dBdHRyaWJ1dGVJbkNsdXN0ZXIiOwogICAgICAgICBBc2FkbWluUmV0dXJuIHJlc3VsdCA9IGFzYWRtaW5XaXRoT3V0cHV0KExJU1RfTE9HX0FUVFJJQlVURSwgQ0xVU1RFUl9OQU1FKTsKLQkJcmVwb3J0RXhwZWN0ZWRSZXN1bHQodGVzdE5hbWUsIHJlc3VsdCwgImxvZzRqLmxvZ2dlci5vcmcuaGliZXJuYXRlLnZhbGlkYXRvci51dGlsLlZlcnNpb24iKTsgICAgICAgIAorICAgICAgICByZXBvcnRFeHBlY3RlZFJlc3VsdCh0ZXN0TmFtZSwgcmVzdWx0LCAibG9nNGoubG9nZ2VyLm9yZy5oaWJlcm5hdGUudmFsaWRhdG9yLnV0aWwuVmVyc2lvbiIpOwogICAgIH0KIAotCXByaXZhdGUgdm9pZCB0ZXN0TGlzdExvZ0F0dHJpYnV0ZUluU3RhbmRhbG9uZUluc3RhbmNlKCl7CisgICAgcHJpdmF0ZSB2b2lkIHRlc3RMaXN0TG9nQXR0cmlidXRlSW5TdGFuZGFsb25lSW5zdGFuY2UoKXsKICAgICAgICAgU3RyaW5nIHRlc3ROYW1lID0gInRlc3RMaXN0TG9nQXR0cmlidXRlSW5TdGFuZGFsb25lSW5zdGFuY2UiOwogICAgICAgICBBc2FkbWluUmV0dXJuIHJlc3VsdCA9IGFzYWRtaW5XaXRoT3V0cHV0KExJU1RfTE9HX0FUVFJJQlVURSwgU1RBTkRBTE9ORV9JTlNUQU5DRV9OQU1FKTsKLQkJcmVwb3J0RXhwZWN0ZWRSZXN1bHQodGVzdE5hbWUsIHJlc3VsdCwgImxvZzRqLmxvZ2dlci5vcmcuaGliZXJuYXRlLnZhbGlkYXRvci51dGlsLlZlcnNpb24iKTsgICAgICAgIAorICAgICAgICByZXBvcnRFeHBlY3RlZFJlc3VsdCh0ZXN0TmFtZSwgcmVzdWx0LCAibG9nNGoubG9nZ2VyLm9yZy5oaWJlcm5hdGUudmFsaWRhdG9yLnV0aWwuVmVyc2lvbiIpOwogICAgIH0KIAotCXByaXZhdGUgdm9pZCB0ZXN0TGlzdExvZ0F0dHJpYnV0ZUluU2VydmVyQ29uZmlnKCl7CisgICAgcHJpdmF0ZSB2b2lkIHRlc3RMaXN0TG9nQXR0cmlidXRlSW5TZXJ2ZXJDb25maWcoKXsKICAgICAgICAgU3RyaW5nIHRlc3ROYW1lID0gInRlc3RMaXN0TG9nQXR0cmlidXRlSW5TZXJ2ZXJDb25maWciOwogICAgICAgICBBc2FkbWluUmV0dXJuIHJlc3VsdCA9IGFzYWRtaW5XaXRoT3V0cHV0KExJU1RfTE9HX0FUVFJJQlVURSwgU0VSVkVSKyItY29uZmlnIik7Ci0JCXJlcG9ydEV4cGVjdGVkUmVzdWx0KHRlc3ROYW1lLCByZXN1bHQsICJsb2c0ai5sb2dnZXIub3JnLmhpYmVybmF0ZS52YWxpZGF0b3IudXRpbC5WZXJzaW9uIik7ICAgICAgICAKKyAgICAgICAgcmVwb3J0RXhwZWN0ZWRSZXN1bHQodGVzdE5hbWUsIHJlc3VsdCwgImxvZzRqLmxvZ2dlci5vcmcuaGliZXJuYXRlLnZhbGlkYXRvci51dGlsLlZlcnNpb24iKTsKICAgICB9CiAKLQlwcml2YXRlIHZvaWQgdGVzdExpc3RMb2dBdHRyaWJ1dGVJbkNsdXN0ZXJDb25maWcoKXsKKyAgICBwcml2YXRlIHZvaWQgdGVzdExpc3RMb2dBdHRyaWJ1dGVJbkNsdXN0ZXJDb25maWcoKXsKICAgICAgICAgU3RyaW5nIHRlc3ROYW1lID0gInRlc3RMaXN0TG9nQXR0cmlidXRlSW5DbHVzdGVyQ29uZmlnIjsKICAgICAgICAgQXNhZG1pblJldHVybiByZXN1bHQgPSBhc2FkbWluV2l0aE91dHB1dChMSVNUX0xPR19BVFRSSUJVVEUsIENMVVNURVJfTkFNRSsiLWNvbmZpZyIpOwotCQlyZXBvcnRFeHBlY3RlZFJlc3VsdCh0ZXN0TmFtZSwgcmVzdWx0LCAibG9nNGoubG9nZ2VyLm9yZy5oaWJlcm5hdGUudmFsaWRhdG9yLnV0aWwuVmVyc2lvbiIpOyAgICAgICAgCisgICAgICAgIHJlcG9ydEV4cGVjdGVkUmVzdWx0KHRlc3ROYW1lLCByZXN1bHQsICJsb2c0ai5sb2dnZXIub3JnLmhpYmVybmF0ZS52YWxpZGF0b3IudXRpbC5WZXJzaW9uIik7CiAgICAgfQogCi0JcHJpdmF0ZSB2b2lkIHRlc3RMaXN0TG9nQXR0cmlidXRlSW5TdGFuZGFsb25lSW5zdGFuY2VDb25maWcoKXsKKyAgICBwcml2YXRlIHZvaWQgdGVzdExpc3RMb2dBdHRyaWJ1dGVJblN0YW5kYWxvbmVJbnN0YW5jZUNvbmZpZygpewogICAgICAgICBTdHJpbmcgdGVzdE5hbWUgPSAidGVzdExpc3RMb2dBdHRyaWJ1dGVJblN0YW5kYWxvbmVJbnN0YW5jZUNvbmZpZyI7CiAgICAgICAgIEFzYWRtaW5SZXR1cm4gcmVzdWx0ID0gYXNhZG1pbldpdGhPdXRwdXQoTElTVF9MT0dfQVRUUklCVVRFLCBTVEFOREFMT05FX0lOU1RBTkNFX05BTUUrIi1jb25maWciKTsKLQkJcmVwb3J0RXhwZWN0ZWRSZXN1bHQodGVzdE5hbWUsIHJlc3VsdCwgImxvZzRqLmxvZ2dlci5vcmcuaGliZXJuYXRlLnZhbGlkYXRvci51dGlsLlZlcnNpb24iKTsgICAgICAgIAorICAgICAgICByZXBvcnRFeHBlY3RlZFJlc3VsdCh0ZXN0TmFtZSwgcmVzdWx0LCAibG9nNGoubG9nZ2VyLm9yZy5oaWJlcm5hdGUudmFsaWRhdG9yLnV0aWwuVmVyc2lvbiIpOwogICAgIH0KIAotCXByaXZhdGUgdm9pZCB0ZXN0TGlzdExvZ0xldmxlSW5TZXJ2ZXIoKXsKKyAgICBwcml2YXRlIHZvaWQgdGVzdExpc3RMb2dMZXZsZUluU2VydmVyKCl7CiAgICAgICAgIFN0cmluZyB0ZXN0TmFtZSA9ICJ0ZXN0TGlzdExvZ0xldmxlSW5TZXJ2ZXIiOwogICAgICAgICBBc2FkbWluUmV0dXJuIHJlc3VsdCA9IGFzYWRtaW5XaXRoT3V0cHV0KExJU1RfTE9HX0xFVkVMLCBTRVJWRVIpOwotCQlyZXBvcnRFeHBlY3RlZFJlc3VsdCh0ZXN0TmFtZSwgcmVzdWx0LCAiamFrYXJ0YS5lbnRlcnByaXNlLnN5c3RlbS5zc2wuc2VjdXJpdHkiLCJqYXZhLnV0aWwubG9nZ2luZy5Db25zb2xlSGFuZGxlciIpOyAgICAgICAgCisgICAgICAgIHJlcG9ydEV4cGVjdGVkUmVzdWx0KHRlc3ROYW1lLCByZXN1bHQsICJqYWthcnRhLmVudGVycHJpc2Uuc3lzdGVtLnNzbC5zZWN1cml0eSIsImphdmEudXRpbC5sb2dnaW5nLkNvbnNvbGVIYW5kbGVyIik7CiAgICAgfQogCi0JcHJpdmF0ZSB2b2lkIHRlc3RMaXN0TG9nTGV2bGVJbkNsdXN0ZXIoKXsKKyAgICBwcml2YXRlIHZvaWQgdGVzdExpc3RMb2dMZXZsZUluQ2x1c3RlcigpewogICAgICAgICBTdHJpbmcgdGVzdE5hbWUgPSAidGVzdExpc3RMb2dMZXZsZUluQ2x1c3RlciI7CiAgICAgICAgIEFzYWRtaW5SZXR1cm4gcmVzdWx0ID0gYXNhZG1pbldpdGhPdXRwdXQoTElTVF9MT0dfTEVWRUwsIENMVVNURVJfTkFNRSk7Ci0JCXJlcG9ydEV4cGVjdGVkUmVzdWx0KHRlc3ROYW1lLCByZXN1bHQsICJqYWthcnRhLmVudGVycHJpc2Uuc3lzdGVtLnNzbC5zZWN1cml0eSIsImphdmEudXRpbC5sb2dnaW5nLkNvbnNvbGVIYW5kbGVyIik7ICAgICAgICAKKyAgICAgICAgcmVwb3J0RXhwZWN0ZWRSZXN1bHQodGVzdE5hbWUsIHJlc3VsdCwgImpha2FydGEuZW50ZXJwcmlzZS5zeXN0ZW0uc3NsLnNlY3VyaXR5IiwiamF2YS51dGlsLmxvZ2dpbmcuQ29uc29sZUhhbmRsZXIiKTsKICAgICB9CiAKLQlwcml2YXRlIHZvaWQgdGVzdExpc3RMb2dMZXZsZUluU3RhbmRhbG9uZUluc3RhbmNlKCl7CisgICAgcHJpdmF0ZSB2b2lkIHRlc3RMaXN0TG9nTGV2bGVJblN0YW5kYWxvbmVJbnN0YW5jZSgpewogICAgICAgICBTdHJpbmcgdGVzdE5hbWUgPSAidGVzdExpc3RMb2dMZXZsZUluU3RhbmRhbG9uZUluc3RhbmNlIjsKICAgICAgICAgQXNhZG1pblJldHVybiByZXN1bHQgPSBhc2FkbWluV2l0aE91dHB1dChMSVNUX0xPR19MRVZFTCwgU1RBTkRBTE9ORV9JTlNUQU5DRV9OQU1FKTsKLQkJcmVwb3J0RXhwZWN0ZWRSZXN1bHQodGVzdE5hbWUsIHJlc3VsdCwgImpha2FydGEuZW50ZXJwcmlzZS5zeXN0ZW0uc3NsLnNlY3VyaXR5IiwiamF2YS51dGlsLmxvZ2dpbmcuQ29uc29sZUhhbmRsZXIiKTsgICAgICAgIAorICAgICAgICByZXBvcnRFeHBlY3RlZFJlc3VsdCh0ZXN0TmFtZSwgcmVzdWx0LCAiamFrYXJ0YS5lbnRlcnByaXNlLnN5c3RlbS5zc2wuc2VjdXJpdHkiLCJqYXZhLnV0aWwubG9nZ2luZy5Db25zb2xlSGFuZGxlciIpOwogICAgIH0KIAotCXByaXZhdGUgdm9pZCB0ZXN0TGlzdExvZ0xldmxlSW5TZXJ2ZXJDb25maWcoKXsKKyAgICBwcml2YXRlIHZvaWQgdGVzdExpc3RMb2dMZXZsZUluU2VydmVyQ29uZmlnKCl7CiAgICAgICAgIFN0cmluZyB0ZXN0TmFtZSA9ICJ0ZXN0TGlzdExvZ0xldmxlSW5TZXJ2ZXJDb25maWciOwogICAgICAgICBBc2FkbWluUmV0dXJuIHJlc3VsdCA9IGFzYWRtaW5XaXRoT3V0cHV0KExJU1RfTE9HX0xFVkVMLCBTRVJWRVIrIi1jb25maWciKTsKLQkJcmVwb3J0RXhwZWN0ZWRSZXN1bHQodGVzdE5hbWUsIHJlc3VsdCwgImpha2FydGEuZW50ZXJwcmlzZS5zeXN0ZW0uc3NsLnNlY3VyaXR5IiwiamF2YS51dGlsLmxvZ2dpbmcuQ29uc29sZUhhbmRsZXIiKTsgICAgICAgIAorICAgICAgICByZXBvcnRFeHBlY3RlZFJlc3VsdCh0ZXN0TmFtZSwgcmVzdWx0LCAiamFrYXJ0YS5lbnRlcnByaXNlLnN5c3RlbS5zc2wuc2VjdXJpdHkiLCJqYXZhLnV0aWwubG9nZ2luZy5Db25zb2xlSGFuZGxlciIpOwogICAgIH0KIAotCXByaXZhdGUgdm9pZCB0ZXN0TGlzdExvZ0xldmxlSW5DbHVzdGVyQ29uZmlnKCl7CisgICAgcHJpdmF0ZSB2b2lkIHRlc3RMaXN0TG9nTGV2bGVJbkNsdXN0ZXJDb25maWcoKXsKICAgICAgICAgU3RyaW5nIHRlc3ROYW1lID0gInRlc3RMaXN0TG9nTGV2bGVJbkNsdXN0ZXJDb25maWciOwogICAgICAgICBBc2FkbWluUmV0dXJuIHJlc3VsdCA9IGFzYWRtaW5XaXRoT3V0cHV0KExJU1RfTE9HX0xFVkVMLCBDTFVTVEVSX05BTUUrIi1jb25maWciKTsKLQkJcmVwb3J0RXhwZWN0ZWRSZXN1bHQodGVzdE5hbWUsIHJlc3VsdCwgImpha2FydGEuZW50ZXJwcmlzZS5zeXN0ZW0uc3NsLnNlY3VyaXR5IiwiamF2YS51dGlsLmxvZ2dpbmcuQ29uc29sZUhhbmRsZXIiKTsgICAgICAgIAorICAgICAgICByZXBvcnRFeHBlY3RlZFJlc3VsdCh0ZXN0TmFtZSwgcmVzdWx0LCAiamFrYXJ0YS5lbnRlcnByaXNlLnN5c3RlbS5zc2wuc2VjdXJpdHkiLCJqYXZhLnV0aWwubG9nZ2luZy5Db25zb2xlSGFuZGxlciIpOwogICAgIH0KIAotCXByaXZhdGUgdm9pZCB0ZXN0TGlzdExvZ0xldmxlSW5TdGFuZGFsb25lSW5zdGFuY2VDb25maWcoKXsKKyAgICBwcml2YXRlIHZvaWQgdGVzdExpc3RMb2dMZXZsZUluU3RhbmRhbG9uZUluc3RhbmNlQ29uZmlnKCl7CiAgICAgICAgIFN0cmluZyB0ZXN0TmFtZSA9ICJ0ZXN0TGlzdExvZ0xldmxlSW5TdGFuZGFsb25lSW5zdGFuY2VDb25maWciOwogICAgICAgICBBc2FkbWluUmV0dXJuIHJlc3VsdCA9IGFzYWRtaW5XaXRoT3V0cHV0KExJU1RfTE9HX0xFVkVMLCBTVEFOREFMT05FX0lOU1RBTkNFX05BTUUrIi1jb25maWciKTsKLQkJcmVwb3J0RXhwZWN0ZWRSZXN1bHQodGVzdE5hbWUsIHJlc3VsdCwgImpha2FydGEuZW50ZXJwcmlzZS5zeXN0ZW0uc3NsLnNlY3VyaXR5IiwiamF2YS51dGlsLmxvZ2dpbmcuQ29uc29sZUhhbmRsZXIiKTsgICAgICAgIAorICAgICAgICByZXBvcnRFeHBlY3RlZFJlc3VsdCh0ZXN0TmFtZSwgcmVzdWx0LCAiamFrYXJ0YS5lbnRlcnByaXNlLnN5c3RlbS5zc2wuc2VjdXJpdHkiLCJqYXZhLnV0aWwubG9nZ2luZy5Db25zb2xlSGFuZGxlciIpOwogICAgIH0KIAotCXByaXZhdGUgdm9pZCB0ZXN0Q29sbGVjdExvZ0ZpbGVzSW5TZXJ2ZXIoKXsKKyAgICBwcml2YXRlIHZvaWQgdGVzdENvbGxlY3RMb2dGaWxlc0luU2VydmVyKCl7CiAgICAgICAgIFN0cmluZyB0ZXN0TmFtZSA9ICJ0ZXN0Q29sbGVjdExvZ0ZpbGVzSW5TZXJ2ZXIiOwogICAgICAgICBBc2FkbWluUmV0dXJuIHJlc3VsdCA9IGFzYWRtaW5XaXRoT3V0cHV0KENPTExFQ1RfTE9HX0ZJTEVTLFRBUkdFVF9PUFRJT04sIFNFUlZFUik7Ci0JCXJlcG9ydEV4cGVjdGVkUmVzdWx0KHRlc3ROYW1lLCByZXN1bHQsICJDcmVhdGVkIFppcCBmaWxlIHVuZGVyIik7ICAgICAgICAKKyAgICAgICAgcmVwb3J0RXhwZWN0ZWRSZXN1bHQodGVzdE5hbWUsIHJlc3VsdCwgIkNyZWF0ZWQgWmlwIGZpbGUgdW5kZXIiKTsKICAgICB9CiAKLQlwcml2YXRlIHZvaWQgdGVzdENvbGxlY3RMb2dGaWxlc0luQ2x1c3RlcigpeworICAgIHByaXZhdGUgdm9pZCB0ZXN0Q29sbGVjdExvZ0ZpbGVzSW5DbHVzdGVyKCl7CiAgICAgICAgIFN0cmluZyB0ZXN0TmFtZSA9ICJ0ZXN0Q29sbGVjdExvZ0ZpbGVzSW5DbHVzdGVyIjsKICAgICAgICAgQXNhZG1pblJldHVybiByZXN1bHQgPSBhc2FkbWluV2l0aE91dHB1dChDT0xMRUNUX0xPR19GSUxFUyxUQVJHRVRfT1BUSU9OLCBDTFVTVEVSX05BTUUpOwotCQlyZXBvcnRFeHBlY3RlZFJlc3VsdCh0ZXN0TmFtZSwgcmVzdWx0LCAiQ3JlYXRlZCBaaXAgZmlsZSB1bmRlciIpOyAgICAgICAgCisgICAgICAgIHJlcG9ydEV4cGVjdGVkUmVzdWx0KHRlc3ROYW1lLCByZXN1bHQsICJDcmVhdGVkIFppcCBmaWxlIHVuZGVyIik7CiAgICAgfQogCi0JcHJpdmF0ZSB2b2lkIHRlc3RDb2xsZWN0TG9nRmlsZXNTdGFuZGFsb25lSW5zdGFuY2UoKXsKKyAgICBwcml2YXRlIHZvaWQgdGVzdENvbGxlY3RMb2dGaWxlc1N0YW5kYWxvbmVJbnN0YW5jZSgpewogICAgICAgICBTdHJpbmcgdGVzdE5hbWUgPSAidGVzdENvbGxlY3RMb2dGaWxlc1N0YW5kYWxvbmVJbnN0YW5jZSI7CiAgICAgICAgIEFzYWRtaW5SZXR1cm4gcmVzdWx0ID0gYXNhZG1pbldpdGhPdXRwdXQoQ09MTEVDVF9MT0dfRklMRVMsVEFSR0VUX09QVElPTiwgU1RBTkRBTE9ORV9JTlNUQU5DRV9OQU1FKTsKLQkJcmVwb3J0RXhwZWN0ZWRSZXN1bHQodGVzdE5hbWUsIHJlc3VsdCwgIkNyZWF0ZWQgWmlwIGZpbGUgdW5kZXIiKTsgICAgICAgIAorICAgICAgICByZXBvcnRFeHBlY3RlZFJlc3VsdCh0ZXN0TmFtZSwgcmVzdWx0LCAiQ3JlYXRlZCBaaXAgZmlsZSB1bmRlciIpOwogICAgIH0KIAogCkBAIC0zMjcsNSArMzI3LDUgQEAKICAgICAgICAgfQogICAgIH0KIAotCQorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL01hbnVhbFN5bmNUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL01hbnVhbFN5bmNUZXN0LmphdmEKaW5kZXggMGEyZDFhMy4uMTNlYzYwNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9NYW51YWxTeW5jVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vTWFudWFsU3luY1Rlc3QuamF2YQpAQCAtMzkwLDcgKzM5MCw3IEBACiAKICAgICAgICAgbG9uZyBkYXNEb21haW5YbWxUUyA9IGRhc0RvbWFpblhtbC5sYXN0TW9kaWZpZWQoKTsKICAgICAgICAgcmVwb3J0KCJleHBvcnQtc3luYy1idW5kbGUtIiArIHRlc3RuYW1lLCBhc2FkbWluKCJleHBvcnQtc3luYy1idW5kbGUiLCAiLS10YXJnZXQiLCB0ZXN0bmFtZSkpOwotICAgICAgICAKKwogICAgICAgICByZXBvcnQoImNoZWNrLWRvbWFpbnhtbC0iICsgdGVzdG5hbWUsIGluc3REb21haW5YbWwuZXhpc3RzKCkpOwogCiAgICAgICAgIHN0b3BEb21haW4oKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vTm9kZVRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vTm9kZVRlc3QuamF2YQppbmRleCBkNjdiYmU2Li43ZjdkODJhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL05vZGVUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9Ob2RlVGVzdC5qYXZhCkBAIC05Nyw5ICs5Nyw5IEBACiAgICAgICAgIHRlc3RMb2NhbEhvc3ROb2RlKCk7CiAgICAgICAgIHRlc3RDcmVhdGVOb2RlU3NoKCk7CiAgICAgICAgIHRlc3RDcmVhdGVOb2RlQ29uZmlnKCk7Ci0JdGVzdENyZWF0ZU9mZmxpbmVDb25maWcoKTsKLQl0ZXN0VXBkYXRlTm9kZXMoKTsKLQl0ZXN0TGlzdE5vZGVzKCk7CisgICAgdGVzdENyZWF0ZU9mZmxpbmVDb25maWcoKTsKKyAgICB0ZXN0VXBkYXRlTm9kZXMoKTsKKyAgICB0ZXN0TGlzdE5vZGVzKCk7CiAgICAgICAgIHRlc3RWYWxpZGF0ZU5vZGVDb21tYW5kKCk7CiAgICAgICAgIHRlc3RCYXNpY0NsdXN0ZXIoKTsKICAgICAgICAgc3RvcERvbWFpbigpOwpAQCAtMTE4LDcgKzExOCw3IEBACiAKICAgICAgICAgLy8gV0JOIEZpbGUgTGF5b3V0IE1heSAyMDEyCiAgICAgICAgIFN0cmluZyBwYXJhbU5hbWUgPSAiLS1kb21haW5kaXIiOwotICAgICAgICAKKwogICAgICAgICBpZiAoIVRlc3RFbnYuaXNIYWRhcygpKQogICAgICAgICAgICAgcGFyYW1OYW1lID0gIi0tbm9kZWRpciI7CiAKQEAgLTI2NSw3ICsyNjUsNyBAQAogICAgICAgICBmaW5hbCBTdHJpbmcgdGVzdE5hbWVQcmVmaXhWYWxpZGF0ZSA9ICJ2YWxpZGF0ZU9mZmxpbmVDb25maWctIjsKICAgICAgICAgZmluYWwgU3RyaW5nIHRlc3ROYW1lUHJlZml4VmFsaWRhdGVEZWxldGUgPSAidmFsaWRhdGVEZWxldGVPZmZsaW5lQ29uZmlnLSI7CiAgICAgICAgIGZpbmFsIFN0cmluZyBub2RlTmFtZVByZWZpeCA9ICJuX2NvbmZpZ18iOwotCWZpbmFsIFN0cmluZyBpbnN0YW5jZU5hbWUgPSAib2ZmbGluZS1jb25maWctaW5zIjsKKyAgICBmaW5hbCBTdHJpbmcgaW5zdGFuY2VOYW1lID0gIm9mZmxpbmUtY29uZmlnLWlucyI7CiAKICAgICAgICAgU3RyaW5nIG5vZGVOYW1lID0gU3RyaW5nLmZvcm1hdCgiJXMlZCIsIG5vZGVOYW1lUHJlZml4LCAwKTsKIApAQCAtMjc3LDIxICsyNzcsMjEgQEAKICAgICAgICAgdGVzdE5hbWUgPSB0ZXN0TmFtZVByZWZpeFZhbGlkYXRlICsgIjAiOwogICAgICAgICByZXBvcnQodGVzdE5hbWUsIGFzYWRtaW4oImdldCIsIHByb3BQcmVmaXggKyBub2RlTmFtZSArICIuIiArICJuYW1lIikpOwogCi0JLy8gVXBkYXRlIHRoZSBub2RlIGhvc3RuYW1lIHVzaW5nIGNyZWF0ZS1sb2NhbC1pbnN0YW5jZQotCXRlc3ROYW1lID0gdGVzdE5hbWVQcmVmaXhDcmVhdGVJbnN0YW5jZSArICIwIjsKLQlyZXBvcnQodGVzdE5hbWUsIGFzYWRtaW4oImNyZWF0ZS1sb2NhbC1pbnN0YW5jZSIsICItLW5vZGUiLCBub2RlTmFtZSwgaW5zdGFuY2VOYW1lKSk7CisgICAgLy8gVXBkYXRlIHRoZSBub2RlIGhvc3RuYW1lIHVzaW5nIGNyZWF0ZS1sb2NhbC1pbnN0YW5jZQorICAgIHRlc3ROYW1lID0gdGVzdE5hbWVQcmVmaXhDcmVhdGVJbnN0YW5jZSArICIwIjsKKyAgICByZXBvcnQodGVzdE5hbWUsIGFzYWRtaW4oImNyZWF0ZS1sb2NhbC1pbnN0YW5jZSIsICItLW5vZGUiLCBub2RlTmFtZSwgaW5zdGFuY2VOYW1lKSk7CiAKLQkvLyBNYWtlIHN1cmUgaG9zdG5hbWUgaXMgZmlsbGVkIGluCi0JdGVzdE5hbWUgPSB0ZXN0TmFtZVByZWZpeFZhbGlkYXRlICsgIjEiOwotCXJlcG9ydCAodGVzdE5hbWUsIGFzYWRtaW4oImdldCIsIHByb3BQcmVmaXgrbm9kZU5hbWUrIi4iKyJub2RlLWhvc3QiKSk7CisgICAgLy8gTWFrZSBzdXJlIGhvc3RuYW1lIGlzIGZpbGxlZCBpbgorICAgIHRlc3ROYW1lID0gdGVzdE5hbWVQcmVmaXhWYWxpZGF0ZSArICIxIjsKKyAgICByZXBvcnQgKHRlc3ROYW1lLCBhc2FkbWluKCJnZXQiLCBwcm9wUHJlZml4K25vZGVOYW1lKyIuIisibm9kZS1ob3N0IikpOwogCi0JLy8gTWFrZSBzdXJlIGluc3RhbGxkaXIgaXMgZmlsbGVkIGluCi0JdGVzdE5hbWUgPSB0ZXN0TmFtZVByZWZpeFZhbGlkYXRlICsgIjIiOwotCXJlcG9ydCAodGVzdE5hbWUsIGFzYWRtaW4oImdldCIsIHByb3BQcmVmaXgrbm9kZU5hbWUrIi4iKyJpbnN0YWxsLWRpciIpKTsKKyAgICAvLyBNYWtlIHN1cmUgaW5zdGFsbGRpciBpcyBmaWxsZWQgaW4KKyAgICB0ZXN0TmFtZSA9IHRlc3ROYW1lUHJlZml4VmFsaWRhdGUgKyAiMiI7CisgICAgcmVwb3J0ICh0ZXN0TmFtZSwgYXNhZG1pbigiZ2V0IiwgcHJvcFByZWZpeCtub2RlTmFtZSsiLiIrImluc3RhbGwtZGlyIikpOwogCi0JLy8gRGVsZXRlIHRoZSBpbnN0YW5jZSAKLQl0ZXN0TmFtZSA9IHRlc3ROYW1lUHJlZml4RGVsZXRlICsgIjAiOwotCXJlcG9ydCAodGVzdE5hbWUsIGFzYWRtaW4oImRlbGV0ZS1sb2NhbC1pbnN0YW5jZSIsICItLW5vZGUiLCBub2RlTmFtZSwgaW5zdGFuY2VOYW1lKSk7CisgICAgLy8gRGVsZXRlIHRoZSBpbnN0YW5jZQorICAgIHRlc3ROYW1lID0gdGVzdE5hbWVQcmVmaXhEZWxldGUgKyAiMCI7CisgICAgcmVwb3J0ICh0ZXN0TmFtZSwgYXNhZG1pbigiZGVsZXRlLWxvY2FsLWluc3RhbmNlIiwgIi0tbm9kZSIsIG5vZGVOYW1lLCBpbnN0YW5jZU5hbWUpKTsKIAogICAgICAgICAvLyBEZWxldGUgaXQKICAgICAgICAgdGVzdE5hbWUgPSB0ZXN0TmFtZVByZWZpeERlbGV0ZSArICIxIjsKQEAgLTMyMSwxNyArMzIxLDE3IEBACiAgICAgICAgIHRlc3ROYW1lID0gdGVzdE5hbWVQcmVmaXhWYWxpZGF0ZSArICIwIjsKICAgICAgICAgcmVwb3J0KHRlc3ROYW1lLCBhc2FkbWluKCJnZXQiLCBwcm9wUHJlZml4ICsgbm9kZU5hbWUgKyAiLiIgKyAibmFtZSIpKTsKIAotCXRlc3ROYW1lID0gdGVzdE5hbWVQcmVmaXhVcGRhdGVDb25maWcgKyAiMCI7Ci0JcmVwb3J0KHRlc3ROYW1lLCBhc2FkbWluKCJ1cGRhdGUtbm9kZS1jb25maWciLCAiLS1ub2RlaG9zdCIsICJsb2NhbGhvc3QiLCBub2RlTmFtZSkpOworICAgIHRlc3ROYW1lID0gdGVzdE5hbWVQcmVmaXhVcGRhdGVDb25maWcgKyAiMCI7CisgICAgcmVwb3J0KHRlc3ROYW1lLCBhc2FkbWluKCJ1cGRhdGUtbm9kZS1jb25maWciLCAiLS1ub2RlaG9zdCIsICJsb2NhbGhvc3QiLCBub2RlTmFtZSkpOwogCi0JdGVzdE5hbWUgID0gdGVzdE5hbWVQcmVmaXhVcGRhdGVDb25maWcgKyAiMSI7Ci0JQXNhZG1pblJldHVybiByZXQgPSBhc2FkbWluV2l0aE91dHB1dCgiZ2V0IiwgcHJvcFByZWZpeCtub2RlTmFtZSsiLiIrIm5vZGUtaG9zdCIpOworICAgIHRlc3ROYW1lICA9IHRlc3ROYW1lUHJlZml4VXBkYXRlQ29uZmlnICsgIjEiOworICAgIEFzYWRtaW5SZXR1cm4gcmV0ID0gYXNhZG1pbldpdGhPdXRwdXQoImdldCIsIHByb3BQcmVmaXgrbm9kZU5hbWUrIi4iKyJub2RlLWhvc3QiKTsKICAgICAgICAgYm9vbGVhbiBzdWNjZXNzID0gcmV0Lm91dEFuZEVyci5pbmRleE9mKCJsb2NhbGhvc3QiKSA+PTA7CiAgICAgICAgIHJlcG9ydCh0ZXN0TmFtZSwgc3VjY2Vzcyk7CiAKICAgICAgICAgLy8gQ3JlYXRlIGFuIHNzaCBub2RlIHdpdGggbm8gaG9zdG5hbWUgb3IgaW5zdGFsbGRpcgogICAgICAgICB0ZXN0TmFtZSA9IHRlc3ROYW1lUHJlZml4Q3JlYXRlICsgIjEiOwotCVN0cmluZyBub2RlTmFtZTEgPSBTdHJpbmcuZm9ybWF0KCIlcyVkIiwgbm9kZU5hbWVQcmVmaXgsIDEpOworICAgIFN0cmluZyBub2RlTmFtZTEgPSBTdHJpbmcuZm9ybWF0KCIlcyVkIiwgbm9kZU5hbWVQcmVmaXgsIDEpOwogICAgICAgICByZXBvcnQodGVzdE5hbWUsIGFzYWRtaW4oImNyZWF0ZS1ub2RlLXNzaCIsICItLW5vZGVob3N0IiwgImFjYiIsICItLWZvcmNlIiwgbm9kZU5hbWUxKSk7CiAKICAgICAgICAgLy8gTWFrZSBzdXJlIGl0IGlzIHRoZXJlIGJ5IGdldHRpbmcgaXRzIG5hbWUKQEAgLTMzOSwyMCArMzM5LDIwIEBACiAgICAgICAgIHJlcG9ydCh0ZXN0TmFtZSwgYXNhZG1pbigiZ2V0IiwgcHJvcFByZWZpeCArIG5vZGVOYW1lMSArICIuIiArICJuYW1lIikpOwogCiAgICAgICAgIHRlc3ROYW1lICA9IHRlc3ROYW1lUHJlZml4VXBkYXRlQ29uZmlnICsgIjIiOwotCXJlcG9ydCh0ZXN0TmFtZSwgYXNhZG1pbigidXBkYXRlLW5vZGUtY29uZmlnIiwgIi0tbm9kZWhvc3QiLCAiYWJjIiwgbm9kZU5hbWUxKSk7CisgICAgcmVwb3J0KHRlc3ROYW1lLCBhc2FkbWluKCJ1cGRhdGUtbm9kZS1jb25maWciLCAiLS1ub2RlaG9zdCIsICJhYmMiLCBub2RlTmFtZTEpKTsKIAogICAgICAgICB0ZXN0TmFtZSAgPSB0ZXN0TmFtZVByZWZpeFVwZGF0ZUNvbmZpZyArICIzIjsKICAgICAgICAgcmV0ID0gYXNhZG1pbldpdGhPdXRwdXQoImdldCIsIHByb3BQcmVmaXgrbm9kZU5hbWUxKyIuIisibm9kZS1ob3N0Iik7CiAgICAgICAgIHN1Y2Nlc3MgPSByZXQub3V0QW5kRXJyLmluZGV4T2YoImFiYyIpID49MDsKICAgICAgICAgcmVwb3J0KHRlc3ROYW1lLCBzdWNjZXNzKTsKLSAgICAgICAgCisKICAgICAgICAgdGVzdE5hbWUgID0gdGVzdE5hbWVQcmVmaXhVcGRhdGVDb25maWcgKyAiNCI7CiAgICAgICAgIHJldCA9IGFzYWRtaW5XaXRoT3V0cHV0KCJnZXQiLCBwcm9wUHJlZml4K25vZGVOYW1lMSsiLiIrInR5cGUiKTsKICAgICAgICAgc3VjY2VzcyA9IHJldC5vdXRBbmRFcnIuaW5kZXhPZigiQ09ORklHIikgPj0wOwogICAgICAgICByZXBvcnQodGVzdE5hbWUsIHN1Y2Nlc3MpOwotICAgICAgICAKKwogICAgICAgICB0ZXN0TmFtZSAgPSB0ZXN0TmFtZVByZWZpeFVwZGF0ZVNzaCArICIwIjsKLQlyZXBvcnQodGVzdE5hbWUsIGFzYWRtaW4oInVwZGF0ZS1ub2RlLXNzaCIsICItLW5vZGVob3N0IiwgImFiYyIsICItLWZvcmNlIiwgbm9kZU5hbWUxKSk7CisgICAgcmVwb3J0KHRlc3ROYW1lLCBhc2FkbWluKCJ1cGRhdGUtbm9kZS1zc2giLCAiLS1ub2RlaG9zdCIsICJhYmMiLCAiLS1mb3JjZSIsIG5vZGVOYW1lMSkpOwogICAgICAgICB0ZXN0TmFtZSAgPSB0ZXN0TmFtZVByZWZpeFVwZGF0ZVNzaCArICIxIjsKICAgICAgICAgcmV0ID0gYXNhZG1pbldpdGhPdXRwdXQoImdldCIsIHByb3BQcmVmaXgrbm9kZU5hbWUxKyIuIisidHlwZSIpOwogICAgICAgICBzdWNjZXNzID0gcmV0Lm91dEFuZEVyci5pbmRleE9mKCJTU0giKSA+PTA7CkBAIC0zODksMTEgKzM4OSwxMSBAQAogCiAgICAgICAgIFN0cmluZyBub2RlTmFtZSA9IFN0cmluZy5mb3JtYXQoIiVzJWQiLCBub2RlTmFtZVByZWZpeCwgMCk7CiAKLQkvLyBMaXN0IHRoZSBub2RlcyBzaG91bGQgc2VlIHRoZSBkZWZhdWx0IG5vZGUKKyAgICAvLyBMaXN0IHRoZSBub2RlcyBzaG91bGQgc2VlIHRoZSBkZWZhdWx0IG5vZGUKICAgICAgICAgU3RyaW5nIHRlc3ROYW1lID0gdGVzdE5hbWVQcmVmaXhMaXN0ICsgIjAiOwotCUFzYWRtaW5SZXR1cm4gcmV0ID0gYXNhZG1pbldpdGhPdXRwdXQoImxpc3Qtbm9kZXMiKTsKLQlib29sZWFuIHN1Y2Nlc3MgPSByZXQub3V0QW5kRXJyLmluZGV4T2YoImxvY2FsaG9zdC1kb21haW4xIikgPj0wOwotCXJlcG9ydCh0ZXN0TmFtZSwgc3VjY2Vzcyk7CisgICAgQXNhZG1pblJldHVybiByZXQgPSBhc2FkbWluV2l0aE91dHB1dCgibGlzdC1ub2RlcyIpOworICAgIGJvb2xlYW4gc3VjY2VzcyA9IHJldC5vdXRBbmRFcnIuaW5kZXhPZigibG9jYWxob3N0LWRvbWFpbjEiKSA+PTA7CisgICAgcmVwb3J0KHRlc3ROYW1lLCBzdWNjZXNzKTsKIAogICAgICAgICAvLyBDcmVhdGUgYSBjb25maWcgbm9kZSwgZGVmYXVsdCBpcyBhIENPTkZJRyBub2RlCiAgICAgICAgIHRlc3ROYW1lID0gdGVzdE5hbWVQcmVmaXhDT05GSUdMaXN0ICsgIjAiOwpAQCAtNDAzLDQ2ICs0MDMsNDYgQEAKICAgICAgICAgdGVzdE5hbWUgPSB0ZXN0TmFtZVByZWZpeFZhbGlkYXRlICsgIjAiOwogICAgICAgICByZXBvcnQodGVzdE5hbWUsIGFzYWRtaW4oImdldCIsIHByb3BQcmVmaXggKyBub2RlTmFtZSArICIuIiArICJuYW1lIikpOwogCi0JLy8gTGlzdCB0aGUgbm9kZXMsIHNob3VsZCBiZSAyCi0JdGVzdE5hbWUgPSB0ZXN0TmFtZVByZWZpeExpc3QgKyAiMSI7Ci0JcmV0ID0gYXNhZG1pbldpdGhPdXRwdXQoImxpc3Qtbm9kZXMiKTsKKyAgICAvLyBMaXN0IHRoZSBub2Rlcywgc2hvdWxkIGJlIDIKKyAgICB0ZXN0TmFtZSA9IHRlc3ROYW1lUHJlZml4TGlzdCArICIxIjsKKyAgICByZXQgPSBhc2FkbWluV2l0aE91dHB1dCgibGlzdC1ub2RlcyIpOwogICAgICAgICBzdWNjZXNzID0gcmV0Lm91dEFuZEVyci5pbmRleE9mKCJsb2NhbGhvc3QtZG9tYWluMSIpID49MDsKLQlib29sZWFuIHN1Y2Nlc3MyID0gcmV0Lm91dEFuZEVyci5pbmRleE9mKG5vZGVOYW1lKT49MDsKLQlpZiAoc3VjY2VzcyAmJiBzdWNjZXNzMikKLQkJcmVwb3J0KHRlc3ROYW1lLCB0cnVlKTsKLQllbHNlCi0gICAgICAgIAlyZXBvcnQodGVzdE5hbWUsIGZhbHNlKTsKKyAgICBib29sZWFuIHN1Y2Nlc3MyID0gcmV0Lm91dEFuZEVyci5pbmRleE9mKG5vZGVOYW1lKT49MDsKKyAgICBpZiAoc3VjY2VzcyAmJiBzdWNjZXNzMikKKyAgICAgICAgcmVwb3J0KHRlc3ROYW1lLCB0cnVlKTsKKyAgICBlbHNlCisgICAgICAgICAgICByZXBvcnQodGVzdE5hbWUsIGZhbHNlKTsKIAotCS8vIExpc3QgdGhlIG5vZGVzIHVzaW5nIGxpc3Qtbm9kZXMtY29uZmlnLCBzaG91bGQgYmUgMgotCXRlc3ROYW1lID0gdGVzdE5hbWVQcmVmaXhDT05GSUdMaXN0ICsgIjEiOwotCXJldCA9IGFzYWRtaW5XaXRoT3V0cHV0KCJsaXN0LW5vZGVzLWNvbmZpZyIpOworICAgIC8vIExpc3QgdGhlIG5vZGVzIHVzaW5nIGxpc3Qtbm9kZXMtY29uZmlnLCBzaG91bGQgYmUgMgorICAgIHRlc3ROYW1lID0gdGVzdE5hbWVQcmVmaXhDT05GSUdMaXN0ICsgIjEiOworICAgIHJldCA9IGFzYWRtaW5XaXRoT3V0cHV0KCJsaXN0LW5vZGVzLWNvbmZpZyIpOwogICAgICAgICBzdWNjZXNzID0gcmV0Lm91dEFuZEVyci5pbmRleE9mKCJsb2NhbGhvc3QtZG9tYWluMSIpID49MDsKLQlzdWNjZXNzMiA9IHJldC5vdXRBbmRFcnIuaW5kZXhPZihub2RlTmFtZSk+PTA7Ci0JaWYgKHN1Y2Nlc3MgJiYgc3VjY2VzczIpCi0JCXJlcG9ydCh0ZXN0TmFtZSwgdHJ1ZSk7Ci0JZWxzZQotICAgICAgICAJcmVwb3J0KHRlc3ROYW1lLCBmYWxzZSk7CisgICAgc3VjY2VzczIgPSByZXQub3V0QW5kRXJyLmluZGV4T2Yobm9kZU5hbWUpPj0wOworICAgIGlmIChzdWNjZXNzICYmIHN1Y2Nlc3MyKQorICAgICAgICByZXBvcnQodGVzdE5hbWUsIHRydWUpOworICAgIGVsc2UKKyAgICAgICAgICAgIHJlcG9ydCh0ZXN0TmFtZSwgZmFsc2UpOwogCi0JLy8gQ3JlYXRlIGFuIHNzaCBub2RlIChmb3JjZSkgYW5kIGxpc3QgYWdhaW4sIHNob3VsZCBiZSAzCi0JdGVzdE5hbWUgPSB0ZXN0TmFtZVByZWZpeFNTSExpc3QgKyAiMCI7CisgICAgLy8gQ3JlYXRlIGFuIHNzaCBub2RlIChmb3JjZSkgYW5kIGxpc3QgYWdhaW4sIHNob3VsZCBiZSAzCisgICAgdGVzdE5hbWUgPSB0ZXN0TmFtZVByZWZpeFNTSExpc3QgKyAiMCI7CiAgICAgICAgIFN0cmluZyBub2RlTmFtZTEgPSBTdHJpbmcuZm9ybWF0KCIlcyVkIiwgbm9kZU5hbWVQcmVmaXgsIDEpOwotCXJlcG9ydCAodGVzdE5hbWUsIGFzYWRtaW4oImNyZWF0ZS1ub2RlLXNzaCIsIi0tZm9yY2UiLCAiLS1ub2RlaG9zdCIsICJhYmMiLCBub2RlTmFtZTEpKTsKKyAgICByZXBvcnQgKHRlc3ROYW1lLCBhc2FkbWluKCJjcmVhdGUtbm9kZS1zc2giLCItLWZvcmNlIiwgIi0tbm9kZWhvc3QiLCAiYWJjIiwgbm9kZU5hbWUxKSk7CiAKLQl0ZXN0TmFtZSA9IHRlc3ROYW1lUHJlZml4TGlzdCArICIyIjsKLQlyZXQgPSBhc2FkbWluV2l0aE91dHB1dCgibGlzdC1ub2RlcyIpOworICAgIHRlc3ROYW1lID0gdGVzdE5hbWVQcmVmaXhMaXN0ICsgIjIiOworICAgIHJldCA9IGFzYWRtaW5XaXRoT3V0cHV0KCJsaXN0LW5vZGVzIik7CiAgICAgICAgIHN1Y2Nlc3MgPSByZXQub3V0QW5kRXJyLmluZGV4T2YoImxvY2FsaG9zdC1kb21haW4xIikgPj0wOwotCXN1Y2Nlc3MyID0gcmV0Lm91dEFuZEVyci5pbmRleE9mKG5vZGVOYW1lKT49MDsKLQlib29sZWFuIHN1Y2Nlc3MzID0gcmV0Lm91dEFuZEVyci5pbmRleE9mKG5vZGVOYW1lMSk+PTA7Ci0JaWYgKHN1Y2Nlc3MgJiYgc3VjY2VzczIgJiYgc3VjY2VzczMpCi0JCXJlcG9ydCh0ZXN0TmFtZSwgdHJ1ZSk7Ci0JZWxzZQotICAgICAgICAJcmVwb3J0KHRlc3ROYW1lLCBmYWxzZSk7CisgICAgc3VjY2VzczIgPSByZXQub3V0QW5kRXJyLmluZGV4T2Yobm9kZU5hbWUpPj0wOworICAgIGJvb2xlYW4gc3VjY2VzczMgPSByZXQub3V0QW5kRXJyLmluZGV4T2Yobm9kZU5hbWUxKT49MDsKKyAgICBpZiAoc3VjY2VzcyAmJiBzdWNjZXNzMiAmJiBzdWNjZXNzMykKKyAgICAgICAgcmVwb3J0KHRlc3ROYW1lLCB0cnVlKTsKKyAgICBlbHNlCisgICAgICAgICAgICByZXBvcnQodGVzdE5hbWUsIGZhbHNlKTsKIAotCS8vIExpc3QgdGhlIG5vZGVzIHVzaW5nIGxpc3Qtbm9kZXMtc3NoLCBzaG91bGQgYmUgMQotCXRlc3ROYW1lID0gdGVzdE5hbWVQcmVmaXhTU0hMaXN0ICsgIjEiOwotCXJldCA9IGFzYWRtaW5XaXRoT3V0cHV0KCJsaXN0LW5vZGVzLXNzaCIpOworICAgIC8vIExpc3QgdGhlIG5vZGVzIHVzaW5nIGxpc3Qtbm9kZXMtc3NoLCBzaG91bGQgYmUgMQorICAgIHRlc3ROYW1lID0gdGVzdE5hbWVQcmVmaXhTU0hMaXN0ICsgIjEiOworICAgIHJldCA9IGFzYWRtaW5XaXRoT3V0cHV0KCJsaXN0LW5vZGVzLXNzaCIpOwogICAgICAgICBzdWNjZXNzID0gcmV0Lm91dEFuZEVyci5pbmRleE9mKG5vZGVOYW1lMSkgPj0wOwotICAgICAgIAlyZXBvcnQodGVzdE5hbWUsIHN1Y2Nlc3MpOworICAgICAgICAgICByZXBvcnQodGVzdE5hbWUsIHN1Y2Nlc3MpOwogCiAgICAgICAgIC8vIERlbGV0ZSBjb25maWcgbm9kZQogICAgICAgICB0ZXN0TmFtZSA9IHRlc3ROYW1lUHJlZml4RGVsZXRlICsgIjAiOwpAQCAtNDUyLDE4ICs0NTIsMTggQEAKICAgICAgICAgdGVzdE5hbWUgPSB0ZXN0TmFtZVByZWZpeFZhbGlkYXRlRGVsZXRlICsgIjAiOwogICAgICAgICByZXBvcnQodGVzdE5hbWUsICFhc2FkbWluKCJnZXQiLCBwcm9wUHJlZml4ICsgbm9kZU5hbWUgKyAiLiIgKyAibmFtZSIpKTsKIAotCS8vIExpc3QgdGhlIG5vZGVzLCBzaG91bGQgYmUgMgotCXRlc3ROYW1lID0gdGVzdE5hbWVQcmVmaXhMaXN0ICsgIjMiOwotCXJldCA9IGFzYWRtaW5XaXRoT3V0cHV0KCJsaXN0LW5vZGVzIik7CisgICAgLy8gTGlzdCB0aGUgbm9kZXMsIHNob3VsZCBiZSAyCisgICAgdGVzdE5hbWUgPSB0ZXN0TmFtZVByZWZpeExpc3QgKyAiMyI7CisgICAgcmV0ID0gYXNhZG1pbldpdGhPdXRwdXQoImxpc3Qtbm9kZXMiKTsKICAgICAgICAgc3VjY2VzcyA9IHJldC5vdXRBbmRFcnIuaW5kZXhPZigibG9jYWxob3N0LWRvbWFpbjEiKSA+PTA7Ci0Jc3VjY2VzczIgPSAgcmV0Lm91dEFuZEVyci5pbmRleE9mKG5vZGVOYW1lKT49MDsKLQlzdWNjZXNzMyA9IHJldC5vdXRBbmRFcnIuaW5kZXhPZihub2RlTmFtZTEpPj0wOwotCWlmIChzdWNjZXNzMikKLQkJcmVwb3J0KHRlc3ROYW1lLCBmYWxzZSk7Ci0JZWxzZSBpZiAoc3VjY2VzcyAmJiBzdWNjZXNzMykKLQkJcmVwb3J0KHRlc3ROYW1lLCB0cnVlKTsKLQllbHNlCi0gICAgICAgIAlyZXBvcnQodGVzdE5hbWUsIGZhbHNlKTsKKyAgICBzdWNjZXNzMiA9ICByZXQub3V0QW5kRXJyLmluZGV4T2Yobm9kZU5hbWUpPj0wOworICAgIHN1Y2Nlc3MzID0gcmV0Lm91dEFuZEVyci5pbmRleE9mKG5vZGVOYW1lMSk+PTA7CisgICAgaWYgKHN1Y2Nlc3MyKQorICAgICAgICByZXBvcnQodGVzdE5hbWUsIGZhbHNlKTsKKyAgICBlbHNlIGlmIChzdWNjZXNzICYmIHN1Y2Nlc3MzKQorICAgICAgICByZXBvcnQodGVzdE5hbWUsIHRydWUpOworICAgIGVsc2UKKyAgICAgICAgICAgIHJlcG9ydCh0ZXN0TmFtZSwgZmFsc2UpOwogCiAgICAgICAgIC8vIERlbGV0ZSBzc2ggbm9kZQogICAgICAgICB0ZXN0TmFtZSA9IHRlc3ROYW1lUHJlZml4RGVsZXRlICsgIjEiOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9TZXR1cFNzaFJlbW90ZVRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vU2V0dXBTc2hSZW1vdGVUZXN0LmphdmEKaW5kZXggZTVmNWE5Ni4uOGM5YWI0ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9TZXR1cFNzaFJlbW90ZVRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL1NldHVwU3NoUmVtb3RlVGVzdC5qYXZhCkBAIC0xNTMsNyArMTUzLDcgQEAKICAgICAgICAgLy9jbGVhbiB1cCB0aGUgcGFzc3dvcmQgZmlsZQogICAgICAgICByZW1vdmVQYXNzd29yZHMoIlNTSCIpOwogICAgICAgICBzdG9wRG9tYWluKCk7Ci0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHByaXZhdGUgYm9vbGVhbiB0ZXN0S2V5RGlzdHJpYnV0aW9uV2l0aG91dEtleUdlbmVyYXRpb24oKSB7CkBAIC0yNDQsNyArMjQ0LDcgQEAKICAgICAvKgogICAgICAqIEluLW9yZGVyIHRvIHJ1biB0aGlzIHRlc3QsIG9uZSBuZWVkcyB0byBnZW5lcmF0ZSB0aGUgcHVibGljLXByaXZhdGUga2V5IGZpcnN0LCBlbmFibGUgdGhpcyB0ZXN0IGFuZCBydW4gaXQuIFByZS1nZW5lcmF0ZWQgaWRfZHNhIGFuZCBpZF9kc2EucHViIGtleXMgYXJlCiAgICAgICogYmVpbmcgcmVtb3ZlZC4KLSAgICAgKi8gICAgCisgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIHRlc3RFbmNyeXB0ZWRLZXkoKSB7CiAgICAgICAgIC8vcGFzcyBjb3JyZWN0IHNzaCBwYXNzd29yZCBmb3IgZWFjaCB0ZXN0CiAgICAgICAgIGFkZFBhc3N3b3JkKFBhc3N3b3JkVmFsdWUuUklHSFQsIFBhc3N3b3JkVHlwZS5TU0hfUEFTUyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL1NldHVwU3NoVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9TZXR1cFNzaFRlc3QuamF2YQppbmRleCA5MDZlMDc4Li4zYzFjMTQ0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL1NldHVwU3NoVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vU2V0dXBTc2hUZXN0LmphdmEKQEAgLTE2OSw3ICsxNjksNyBAQAogCiAgICAgICAgIC8vY2xlYW4gdXAgdGhlIHBhc3N3b3JkIGZpbGUKICAgICAgICAgcmVtb3ZlUGFzc3dvcmRzKCJTU0giKTsKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSBib29sZWFuIHRlc3RLZXlEaXN0cmlidXRpb25XaXRob3V0S2V5R2VuZXJhdGlvbigpIHsKQEAgLTI1NCw3ICsyNTQsNyBAQAogICAgIC8qCiAgICAgICogSW4tb3JkZXIgdG8gcnVuIHRoaXMgdGVzdCwgb25lIG5lZWRzIHRvIGdlbmVyYXRlIHRoZSBwdWJsaWMtcHJpdmF0ZSBrZXkgZmlyc3QsIGVuYWJsZSB0aGlzIHRlc3QgYW5kIHJ1biBpdC4gUHJlLWdlbmVyYXRlZCBpZF9kc2EgYW5kIGlkX2RzYS5wdWIga2V5cyBhcmUKICAgICAgKiBiZWluZyByZW1vdmVkLgotICAgICAqLyAgICAKKyAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgdGVzdEVuY3J5cHRlZEtleSgpIHsKICAgICAgICAgLy9wYXNzIGNvcnJlY3Qgc3NoIHBhc3N3b3JkIGZvciBlYWNoIHRlc3QKICAgICAgICAgYWRkUGFzc3dvcmQoUGFzc3dvcmRWYWx1ZS5SSUdIVCwgUGFzc3dvcmRUeXBlLlNTSF9QQVNTKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vVGVzdEVudi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9UZXN0RW52LmphdmEKaW5kZXggZGMxZjJhNy4uNjM3ZmUyYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9UZXN0RW52LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9UZXN0RW52LmphdmEKQEAgLTgwLDcgKzgwLDcgQEAKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIG5ldyBGaWxlKFRlc3RFbnYuZ2V0SW5zdGFuY2VzSG9tZShub2RlTmFtZSksIERBU19QUk9QU19QQVRIKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIEZpbGUgZ2V0SW5zdGFuY2VzSG9tZShTdHJpbmcgZG9tYWluTmFtZSwgU3RyaW5nIG5vZGVOYW1lKSB7CiAgICAgICAgIGlmKGlzSGFkYXMoKSkKICAgICAgICAgICAgIHJldHVybiBnZXREb21haW5Ib21lKGRvbWFpbk5hbWUpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9WYWxpZGF0aW9uVGVzdHMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vVmFsaWRhdGlvblRlc3RzLmphdmEKaW5kZXggMjUwOTIwZS4uMGQ1MTY2ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9WYWxpZGF0aW9uVGVzdHMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL1ZhbGlkYXRpb25UZXN0cy5qYXZhCkBAIC03Myw5ICs3Myw5IEBACiAKICAgICAgICAgcmVwb3J0KCJpc3N1ZTExMjAwLWNyZWF0ZS1tZXNzYWdlLXNlYy1wcm92aWRlciIsICFhc2FkbWluKCAiY3JlYXRlLW1lc3NhZ2Utc2VjdXJpdHktcHJvdmlkZXIiLCAiLS1jbGFzc25hbWUiLCAiY29tLnN1bi5mb28iLCAiLS1sYXllciIgLCJTT0FQIiAsIjxzY3JpcHQ+YWxlcnQoXCJ4XCIpPC9zY3JpcHQ+IikpOwogCi0gICAgICAgIHJlcG9ydCgiY3JlYXRlLW1lc3NhZ2Utc2VjLXByb3ZpZGVyLWludmFsaWQtY2xhc3NuYW1lIiwgISBhc2FkbWluKCAiY3JlYXRlLW1lc3NhZ2Utc2VjdXJpdHktcHJvdmlkZXIiLCAiLS1sYXllciIsICJTT0FQIiwgCisgICAgICAgIHJlcG9ydCgiY3JlYXRlLW1lc3NhZ2Utc2VjLXByb3ZpZGVyLWludmFsaWQtY2xhc3NuYW1lIiwgISBhc2FkbWluKCAiY3JlYXRlLW1lc3NhZ2Utc2VjdXJpdHktcHJvdmlkZXIiLCAiLS1sYXllciIsICJTT0FQIiwKICAgICAgICAgICAgICAgICAiLS1jbGFzc25hbWUiLCAiY29tL3N1biIsICJnZ2ciKSk7Ci0gICAgICAgIAorCiAgICAgICAgIHJlcG9ydCgiY3JlYXRlLWF1ZGl0LW1vZHVsZS1pbnZhbGlkLWNsYXNzbmFtZSIsISBhc2FkbWluKCAiY3JlYXRlLWF1ZGl0LW1vZHVsZSIsCiAgICAgICAgICAgICAgICAgIi0tY2xhc3NuYW1lIiwgIipmZmZzMzQ0OjMzIiwgICJmb28xIikpOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL1doYWNrZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vV2hhY2tlci5qYXZhCmluZGV4IGZmYjY1MDkuLmM4NzcyZDUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vV2hhY2tlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vV2hhY2tlci5qYXZhCkBAIC0yNCwxMyArMjQsMTMgQEAKICAqLwogcHVibGljIGNsYXNzIFdoYWNrZXIgZXh0ZW5kcyBBZG1pbkJhc2VEZXZUZXN0IHsKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JCVByb2Nlc3NVdGlscy5raWxsSnZtKCJBU01haW4iKTsKLQkJUHJvY2Vzc1V0aWxzLmtpbGxKdm0oIkFzYWRtaW5NYWluIik7Ci0JCVByb2Nlc3NVdGlscy5raWxsSnZtKCJEZXJieUNvbnRyb2wiKTsKLQkJUHJvY2Vzc1V0aWxzLmtpbGxKdm0oImFkbWluLWNsaS5qYXIiKTsKLQkJUHJvY2Vzc1V0aWxzLmtpbGxKdm0oImRlcmJ5cnVuLmphciIpOwotCQlQcm9jZXNzVXRpbHMua2lsbEp2bSgiZ2xhc3NmaXNoLmphciIpOwotCQluZXcgV2hhY2tlcigpLnJlcG9ydCgiS2lsbGVkIG9sZCBKVk1zIiwgdHJ1ZSk7CisgICAgICAgIFByb2Nlc3NVdGlscy5raWxsSnZtKCJBU01haW4iKTsKKyAgICAgICAgUHJvY2Vzc1V0aWxzLmtpbGxKdm0oIkFzYWRtaW5NYWluIik7CisgICAgICAgIFByb2Nlc3NVdGlscy5raWxsSnZtKCJEZXJieUNvbnRyb2wiKTsKKyAgICAgICAgUHJvY2Vzc1V0aWxzLmtpbGxKdm0oImFkbWluLWNsaS5qYXIiKTsKKyAgICAgICAgUHJvY2Vzc1V0aWxzLmtpbGxKdm0oImRlcmJ5cnVuLmphciIpOworICAgICAgICBQcm9jZXNzVXRpbHMua2lsbEp2bSgiZ2xhc3NmaXNoLmphciIpOworICAgICAgICBuZXcgV2hhY2tlcigpLnJlcG9ydCgiS2lsbGVkIG9sZCBKVk1zIiwgdHJ1ZSk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL21vbml0b3JpbmcvRW5hYmxlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9tb25pdG9yaW5nL0VuYWJsZXIuamF2YQppbmRleCBmNmUzMTNkLi44MDBhZTUxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL21vbml0b3JpbmcvRW5hYmxlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vbW9uaXRvcmluZy9FbmFibGVyLmphdmEKQEAgLTE5LDcgKzE5LDcgQEAKIGltcG9ydCBzdGF0aWMgYWRtaW4ubW9uaXRvcmluZy5Db25zdGFudHMuKjsKIAogLyoqCi0gKiBFbmFibGUgTW9uaXRvcmluZyAKKyAqIEVuYWJsZSBNb25pdG9yaW5nCiAgKiBAYXV0aG9yIEJ5cm9uIE5ldmlucwogICovCiBwdWJsaWMgY2xhc3MgRW5hYmxlciBleHRlbmRzIE1vblRlc3QgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9tb25pdG9yaW5nL0pkYmMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vbW9uaXRvcmluZy9KZGJjLmphdmEKaW5kZXggMGE4NWQxYi4uZmE0ZTYwMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9tb25pdG9yaW5nL0pkYmMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL21vbml0b3JpbmcvSmRiYy5qYXZhCkBAIC00NSw3ICs0NSw3IEBACiAgICAgICAgICAgICAgICAgYXNhZG1pbldpdGhPdXRwdXQoImdldCIsICItbSIsICJzZXJ2ZXIucmVzb3VyY2VzLmpkYmMtb25seWdldGNvbm5lY3Rpb25zZXJ2bGV0LXBvb2wubnVtY29ubmZyZWUtY3VycmVudCIpLAogICAgICAgICAgICAgICAgICJzZXJ2ZXIucmVzb3VyY2VzLmpkYmMtb25seWdldGNvbm5lY3Rpb25zZXJ2bGV0LXBvb2wubnVtY29ubmZyZWUtY3VycmVudCA9IDgiKSwKICAgICAgICAgICAgICAgICAiamRiYy1jaGVjay1nZXRtLW51bWNvbm5mcmVlLWNvdW50Iik7Ci0gICAgICAgIAorCiAgICAgICAgIHJlcG9ydChjaGVja0ZvclN0cmluZygKICAgICAgICAgICAgICAgICBhc2FkbWluV2l0aE91dHB1dCgiZ2V0IiwgIi1tIiwgInNlcnZlci5yZXNvdXJjZXMuamRiYy1vbmx5Z2V0Y29ubmVjdGlvbnNlcnZsZXQtcG9vbC5udW1jb25uYWNxdWlyZWQtY291bnQiKSwKICAgICAgICAgICAgICAgICAic2VydmVyLnJlc291cmNlcy5qZGJjLW9ubHlnZXRjb25uZWN0aW9uc2VydmxldC1wb29sLm51bWNvbm5hY3F1aXJlZC1jb3VudCA9IDEiKSwKQEAgLTEwNyw3ICsxMDcsNyBAQAogCiAKIAotCQkvKiBBZnRlciBncml6emx5IDIuMCBpbnRlZ3JhdGlvbiBudW1jb25mcmVlIGNoYW5nZWQgZnJvbSA1IHRvIDcuICBUaGUgb25seWdldGNvbm5lY3Rpb25zZXJ2bGV0IGlzIGJlaW5nIGludm9rZWQKKyAgICAgICAgLyogQWZ0ZXIgZ3JpenpseSAyLjAgaW50ZWdyYXRpb24gbnVtY29uZnJlZSBjaGFuZ2VkIGZyb20gNSB0byA3LiAgVGhlIG9ubHlnZXRjb25uZWN0aW9uc2VydmxldCBpcyBiZWluZyBpbnZva2VkCiAgICAgICAgICAgICAgICAgIGluIHRoZSAqc2FtZSogdGhyZWFkIGFuZCBjb20uc3VuLmVudGVycHJpc2UucmVzb3VyY2UucG9vbC5Bc3NvY1dpdGhUaHJlYWRSZXNvdXJjZVBvb2wgaW4gdGhpcyBjYXNlIGRvZXNuJ3QgYWxsb2NhdGUKICAgICAgICAgICAgICAgICAgbmV3IHJlc291cmNlLCBidXQgdXNlcyB0aGUgb25lIGFscmVhZHkgYXNzb2NpYXRlZCB3aXRoIHRoZSB0aHJlYWQuICovCiAgICAgICAgIC8vQ29tbWVudCBvdXQgLSB0aGlzIG51bWJlciBzZWVtcyB1cHJlZGljdGFibGUgdG8gdGVzdCAtIHNvbWV0aW1lcyA2LCBzb21ldGltZXMgNyAtIEpDCkBAIC0xMTUsNyArMTE1LDcgQEAKICAgICAgICAgLy8gICAgICAgIGFzYWRtaW5XaXRoT3V0cHV0KCJnZXQiLCAiLW0iLCAic2VydmVyLnJlc291cmNlcy5qZGJjLW9ubHlnZXRjb25uZWN0aW9uc2VydmxldC1wb29sLm51bWNvbm5mcmVlLWN1cnJlbnQiKSwKICAgICAgICAgLy8gICAgICAgICJzZXJ2ZXIucmVzb3VyY2VzLmpkYmMtb25seWdldGNvbm5lY3Rpb25zZXJ2bGV0LXBvb2wubnVtY29ubmZyZWUtY3VycmVudCA9IDciKSwKICAgICAgICAgLy8gICAgICAgICJqZGJjLWNoZWNrLWdldG0tbnVtY29ubmZyZWUtY291bnQiKTsKLQkJCisKIAogCiAgICAgICAgIHJlcG9ydChjaGVja0ZvclN0cmluZygKQEAgLTEzMCw3ICsxMzAsNyBAQAogICAgICAgICAgICAgICAgIGFzYWRtaW5XaXRoT3V0cHV0KCJnZXQiLCAiLW0iLCAic2VydmVyLnJlc291cmNlcy5qZGJjLW9ubHlnZXRjb25uZWN0aW9uc2VydmxldC1wb29sLm51bWNvbm5yZWxlYXNlZC1jb3VudCIpLAogICAgICAgICAgICAgICAgICJzZXJ2ZXIucmVzb3VyY2VzLmpkYmMtb25seWdldGNvbm5lY3Rpb25zZXJ2bGV0LXBvb2wubnVtY29ubnJlbGVhc2VkLWNvdW50ID0gMCIpLAogICAgICAgICAgICAgICAgICJqZGJjLWNoZWNrLWdldG0tbnVtY29ubnJlbGVhc2VkLWNvdW50LTAtcmVzZXQiKTsKLSAgICAgICAgCisKICAgICAgICAgcmVwb3J0KHdnZXQoODA4MCwgIm9ubHlnZXRjb25uZWN0aW9uc2VydmxldC9vbmx5Z2V0Y29ubmVjdGlvbnNlcnZsZXQiKSwgImhpdCA0IG9ubHlnZXRjb25uZWN0aW9uc2VydmxldCBvbiA4MDgwLSIpOwogCiAgICAgICAgIHJlcG9ydChjaGVja0ZvclN0cmluZygKQEAgLTIyNyw3ICsyMjcsNyBAQAogICAgICAgICB9CiAKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBGaWxlIGNvbm5BcHAgPSBuZXcgRmlsZShSRVNPVVJDRVNfRElSLCAiamRiYy1vbmx5Z2V0Y29ubmVjdGlvbi1zZXJ2bGV0QXBwLmVhciIpOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBjb25uZWN0aW9uVVJMID0gImpkYmM6ZGVyYnk6Ly9sb2NhbGhvc3Q6MTUyNy90ZXN0ZGI7Y3JlYXRlPXRydWU7IjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgZGJEcml2ZXIgPSJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuQ2xpZW50RHJpdmVyIjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vbW9uaXRvcmluZy9KaXJhLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL21vbml0b3JpbmcvSmlyYS5qYXZhCmluZGV4IDg1MzRkYjcuLjQzYzBmOTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vbW9uaXRvcmluZy9KaXJhLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9tb25pdG9yaW5nL0ppcmEuamF2YQpAQCAtMzMsMTAgKzMzLDEwIEBACiAgICAgdm9pZCBydW5UZXN0cyhUZXN0RHJpdmVyIGRyaXZlcikgewogICAgICAgICBzZXREcml2ZXIoZHJpdmVyKTsKICAgICAgICAgcmVwb3J0KHRydWUsICJIZWxsbyBmcm9tIEpJUkEgVGVzdHMhIik7Ci0JCS8qIHR1cm4gb2ZmIHRoaXMgaW50ZXJtaXR0ZW50IHRlc3QgZm9yIG5vdy4KKyAgICAgICAgLyogdHVybiBvZmYgdGhpcyBpbnRlcm1pdHRlbnQgdGVzdCBmb3Igbm93LgogCiAgICAgICAgICAgICAgICAgICAgICAgdGVzdDE0Mzg5KCk7Ci0JCSovCisgICAgICAgICovCiAKICAgICAgICAgdGVzdDIxNjQ2KCk7CiAgICAgICAgIHRlc3QxNjMxMygpOwpAQCAtMzE1LDcgKzMxNSw3IEBACiAgICAgICAgICAgICAgICAgcmVwb3J0KGZhbHNlLCAiTG9nTGlzdGVuZXIuZ2V0RmlsZSgpIHJldHVybmVkIG51bGwiKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgcmVwb3J0KGxvZ2ZpbGUuZXhpc3RzKCksIHByZXBlbmQgKyAibG9nZmlsZSBleGlzdHMiKTsKICAgICAgICAgICAgIHJlcG9ydChsb2dmaWxlLmlzRmlsZSgpLCBwcmVwZW5kICsgImxvZ2ZpbGUgaXMtYS1maWxlIik7CiAgICAgICAgICAgICByZXBvcnQobG9nZmlsZS5jYW5SZWFkKCksIHByZXBlbmQgKyAibG9nZmlsZSBpcyByZWFkYWJsZSIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9tb25pdG9yaW5nL1Rlc3REcml2ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vbW9uaXRvcmluZy9UZXN0RHJpdmVyLmphdmEKaW5kZXggNjFlNTlmMC4uODE5ZjcwYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9tb25pdG9yaW5nL1Rlc3REcml2ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL21vbml0b3JpbmcvVGVzdERyaXZlci5qYXZhCkBAIC03Myw3ICs3Myw3IEBACiAgICAgICAgIG5ldyBFamIoKSwKICAgICAgICAgbmV3IEpkYmMoKSwKICAgICAgICAgbmV3IEppcmEoKSwKLQluZXcgV2ViKCksCisgICAgbmV3IFdlYigpLAogICAgICAgICBuZXcgVGVhckRvd24oKSwKICAgICB9OwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9tb25pdG9yaW5nL1dlYi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi9tb25pdG9yaW5nL1dlYi5qYXZhCmluZGV4IGIzZWJmZGMuLmY2MTE0ZTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vbW9uaXRvcmluZy9XZWIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL21vbml0b3JpbmcvV2ViLmphdmEKQEAgLTIxLDggKzIxLDggQEAKIGltcG9ydCBzdGF0aWMgYWRtaW4ubW9uaXRvcmluZy5Db25zdGFudHMuKjsKIAogLyoqCi0gKiBUZXN0cyB3ZWIgbW9uaXRvcmluZy4gCi0gKiBAYXV0aG9yIENhcmxhIE1vdHQgCisgKiBUZXN0cyB3ZWIgbW9uaXRvcmluZy4KKyAqIEBhdXRob3IgQ2FybGEgTW90dAogICovCiBwdWJsaWMgY2xhc3MgV2ViIGV4dGVuZHMgTW9uVGVzdCB7CiAgICAgQE92ZXJyaWRlCkBAIC0zMCw3ICszMCw3IEBACiAgICAgICAgIHNldERyaXZlcihkcml2ZXIpOwogICAgICAgICByZXBvcnQodHJ1ZSwgIkhlbGxvIGZyb20gV2ViIE1vbml0b3JpbmcgVGVzdHMhIik7CiAgICAgICAgIGJhc2ljVGVzdHMoKTsKLQlqc3BUZXN0cygpOworICAgIGpzcFRlc3RzKCk7CiAgICAgICAgIHRlc3RNeVdlYigpOwogICAgIH0KIApAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICBmaW5hbCBTdHJpbmcgZ2V0bUFyZyA9ICIuYXBwbGljYXRpb25zLkhlbGxvV2ViLnNlcnZlci50b3RhbGpzcGNvdW50LWNvdW50IjsKICAgICAgICAgZmluYWwgU3RyaW5nIGdldG1LZXkgPSAiMSI7CiAKLQlyZXBvcnQod2dldCgyODA4MCwgdXJpKSwgImpzcGxvYWQgb24gMjgwODAtIik7ICAvLyBjb21tYW5kcyBpbmNyZW1lbnQgdGhlIHNlc3Npb24gY291bnQKKyAgICByZXBvcnQod2dldCgyODA4MCwgdXJpKSwgImpzcGxvYWQgb24gMjgwODAtIik7ICAvLyBjb21tYW5kcyBpbmNyZW1lbnQgdGhlIHNlc3Npb24gY291bnQKICAgICAgICAgcmVwb3J0KHdnZXQoMjgwODEsIHVyaSksICJqc3Bsb2FkIG9uIDI4MDgxLSIpOwogCiAgICAgICAgIHJlcG9ydCh2ZXJpZnlHZXRtKENMVVNURVJFRF9JTlNUQU5DRV9OQU1FMStnZXRtQXJnLCBnZXRtS2V5KSwgImpzcGxvYWR0ZXN0LTEiKTsKQEAgLTY5LDcgKzY5LDcgQEAKICAgICBwcml2YXRlIHZvaWQgdGVzdE15V2ViKCkgewogICAgICAgICBmaW5hbCBTdHJpbmcgdXJpID0gIkhlbGxvV2ViL0hlbGxvV29ybGQiOwogICAgICAgICBmaW5hbCBTdHJpbmcgdXJpMiA9ICJIZWxsb1dlYi9NeVNlcnZsZXQiOwotCWZpbmFsIFN0cmluZyBzZXNzaW9uQ291bnQgPSIuYXBwbGljYXRpb25zLkhlbGxvV2ViLnNlcnZlci5zZXNzaW9uc3RvdGFsLWNvdW50IjsgCisgICAgZmluYWwgU3RyaW5nIHNlc3Npb25Db3VudCA9Ii5hcHBsaWNhdGlvbnMuSGVsbG9XZWIuc2VydmVyLnNlc3Npb25zdG90YWwtY291bnQiOwogICAgICAgICBmaW5hbCBTdHJpbmcgYWN0aXZhdGVkQ291bnQgPSIud2ViLnNlc3Npb24uYWN0aXZhdGVkc2Vzc2lvbnN0b3RhbC1jb3VudCI7CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi91dGlsL0pwcy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi91dGlsL0pwcy5qYXZhCmluZGV4IDc1NTQxZDQuLmU0Y2Q3NTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vdXRpbC9KcHMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL3V0aWwvSnBzLmphdmEKQEAgLTQ1LDcgKzQ1LDcgQEAKIAogICAgIC8qKgogICAgICAqIHJldHVybiB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgcHJvY2Vzcy1pZCBvZiBhIEpWTQotICAgICAqIEBwYXJhbSBtYWluQ2xhc3NOYW1lIFRoZSBtYWluIGNsYXNzIC0gdGhpcyBpcyBob3cgd2UgaWRlbnRpZnkgdGhlIHJpZ2h0IEpWTS4gIAorICAgICAqIEBwYXJhbSBtYWluQ2xhc3NOYW1lIFRoZSBtYWluIGNsYXNzIC0gdGhpcyBpcyBob3cgd2UgaWRlbnRpZnkgdGhlIHJpZ2h0IEpWTS4KICAgICAgKiBZb3UgY2FuIHBhc3MgaW4gYSBmdWxseS1xdWFsaWZpZWQgbmFtZSBvciBqdXN0IHRoZSBjbGFzc25hbWUuCiAgICAgICogRS5nLiBjb20uc3VuLmVudGVycHJpc2UuZ2xhc3NmaXNoLmJvb3RzdHJhcC5BU01haW4gYW5kIEFTTWFpbiB3b3JrIHRoZSBzYW1lLgogICAgICAqIEByZXR1cm4gdGhlIHByb2Nlc3MgaWQgaWYgcG9zc2libGUgb3RoZXJ3aXNlIDAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vdXRpbC9Qcm9jZXNzVXRpbHMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vdXRpbC9Qcm9jZXNzVXRpbHMuamF2YQppbmRleCAyZjJjZDQwLi4xOGFhYjEwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL3V0aWwvUHJvY2Vzc1V0aWxzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi91dGlsL1Byb2Nlc3NVdGlscy5qYXZhCkBAIC0xNTcsMTAgKzE1NywxMCBAQAogICAgICAgICBwbS5leGVjdXRlKCk7CiAgICAgICAgIFN0cmluZyBvdXQgPSBwbS5nZXRTdGRvdXQoKSArIHBtLmdldFN0ZGVycigpOwogCi0gICAgICAgIC8qIG91dHB1dCBpcyBlaXRoZXIgCi0gICAgICAgICgxKSAKKyAgICAgICAgLyogb3V0cHV0IGlzIGVpdGhlcgorICAgICAgICAoMSkKICAgICAgICAgSU5GTzogTm8gdGFza3MgcnVubmluZyB3aXRoIHRoZSBzcGVjaWZpZWQgY3JpdGVyaWEuCi0gICAgICAgICgyKSAKKyAgICAgICAgKDIpCiAgICAgICAgIEltYWdlIE5hbWUgICAgICAgICAgICAgICAgICAgUElEIFNlc3Npb24gTmFtZSAgICAgU2Vzc2lvbiMgICAgTWVtIFVzYWdlCiAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT0gPT09PT09ID09PT09PT09PT09PT09PT0gPT09PT09PT0gPT09PT09PT09PT09CiAgICAgICAgIGphdmEuZXhlICAgICAgICAgICAgICAgICAgICAzNzYwIENvbnNvbGUgICAgICAgICAgICAgICAgIDAgICAgIDY0LDE5MiBLCkBAIC0yMzAsMTggKzIzMCwxOCBAQAogICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gZGVidWc7CiAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzV2luZG93cygpIHsKICAgICAgICAgU3RyaW5nIG9zbmFtZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgib3MubmFtZSIpOwotICAgICAgICAKKwogICAgICAgICBpZihvc25hbWUgPT0gbnVsbCB8fCBvc25hbWUubGVuZ3RoKCkgPD0gMCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCisKICAgICAgICAgLy8gY2FzZSBpbnNlbnNpdGl2ZSBjb21wYXJlLi4uCi0gICAgICAgIG9zbmFtZQk9IG9zbmFtZS50b0xvd2VyQ2FzZSgpOwotICAgICAgICAKKyAgICAgICAgb3NuYW1lICAgID0gb3NuYW1lLnRvTG93ZXJDYXNlKCk7CisKICAgICAgICAgaWYob3NuYW1lLmluZGV4T2YoIndpbmRvd3MiKSA+PSAwKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCisKICAgICB9CiAKICAgICBzdGF0aWMgYm9vbGVhbiBvayhTdHJpbmcgcykgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi91dGlsL1NtYXJ0RmlsZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYWRtaW4vY2xpL3NyYy9hZG1pbi91dGlsL1NtYXJ0RmlsZS5qYXZhCmluZGV4IDRjYzk1ODUuLjVjYWY3MzEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2FkbWluL2NsaS9zcmMvYWRtaW4vdXRpbC9TbWFydEZpbGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjL2FkbWluL3V0aWwvU21hcnRGaWxlLmphdmEKQEAgLTI0LDYgKzI0LDYgQEAKICAqLwogcHVibGljIGNsYXNzIFNtYXJ0RmlsZSB7CiAgICAgc3RhdGljIEZpbGUgc2FuaXRpemUoRmlsZSBmKSB7Ci0JCXJldHVybiBmLmdldEFic29sdXRlRmlsZSgpOwotCX0KKyAgICAgICAgcmV0dXJuIGYuZ2V0QWJzb2x1dGVGaWxlKCk7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvYmF0Y2gtZGV2LXRlc3RzL2JhdGNoLWNvbW1hbmRzLXRlc3RzL3BvbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9iYXRjaC1kZXYtdGVzdHMvYmF0Y2gtY29tbWFuZHMtdGVzdHMvcG9tLnhtbAppbmRleCAxYjUxZDE1Li40NDhjZjA3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9iYXRjaC1kZXYtdGVzdHMvYmF0Y2gtY29tbWFuZHMtdGVzdHMvcG9tLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9iYXRjaC1kZXYtdGVzdHMvYmF0Y2gtY29tbWFuZHMtdGVzdHMvcG9tLnhtbApAQCAtMjQsNyArMjQsNyBAQAogCiAgICAgPHBhcmVudD4KICAgICAgICAgPGdyb3VwSWQ+b3JnLmdsYXNzZmlzaC5tYWluPC9ncm91cElkPgotICAgIAk8YXJ0aWZhY3RJZD5iYXRjaC1kZXYtdGVzdHM8L2FydGlmYWN0SWQ+CisgICAgICAgIDxhcnRpZmFjdElkPmJhdGNoLWRldi10ZXN0czwvYXJ0aWZhY3RJZD4KICAgICAgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgICAgPC9wYXJlbnQ+CiAgICAgPGFydGlmYWN0SWQ+YmF0Y2gtY29tbWFuZHMtdGVzdHM8L2FydGlmYWN0SWQ+CkBAIC0zNiw1ICszNiw1IEBACiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5iYXRjaC10ZXN0cy11dGlsczwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgIDx2ZXJzaW9uPiR7cHJvamVjdC52ZXJzaW9ufTwvdmVyc2lvbj4KICAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgIDwvZGVwZW5kZW5jaWVzPiAKKyAgICA8L2RlcGVuZGVuY2llcz4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2JhdGNoLWRldi10ZXN0cy9iYXRjaC1jb21tYW5kcy10ZXN0cy9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvamF2YWVlNy9iYXRjaC90ZXN0L0JhdGNoQ29tbWFuZHNUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9iYXRjaC1kZXYtdGVzdHMvYmF0Y2gtY29tbWFuZHMtdGVzdHMvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL2phdmFlZTcvYmF0Y2gvdGVzdC9CYXRjaENvbW1hbmRzVGVzdC5qYXZhCmluZGV4IDBlY2IyYjguLmI2YTY4MTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2JhdGNoLWRldi10ZXN0cy9iYXRjaC1jb21tYW5kcy10ZXN0cy9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvamF2YWVlNy9iYXRjaC90ZXN0L0JhdGNoQ29tbWFuZHNUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvYmF0Y2gtZGV2LXRlc3RzL2JhdGNoLWNvbW1hbmRzLXRlc3RzL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9qYXZhZWU3L2JhdGNoL3Rlc3QvQmF0Y2hDb21tYW5kc1Rlc3QuamF2YQpAQCAtNDQ2LDEyICs0NDYsMTIgQEAKIAogICAgICAgICBDb21tYW5kVXRpbCBjbWRXaXRoSnVzdE5hbWUgPSBDb21tYW5kVXRpbC5nZXRJbnN0YW5jZSgpLmV4ZWN1dGVDb21tYW5kQW5kR2V0QXNMaXN0KCJhc2FkbWluIiwKICAgICAgICAgICAgICAgICAibGlzdC1iYXRjaC1qb2JzIiwgIi1vIiwgImpvYm5hbWUiKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCIqKiBsaXN0LWJhdGNoLWpvYnMgLWwgPT0+ICIgKyBzaXplICsgIjsgICBsaXN0LWJhdGNoLWpvYnMgLW8gam9ibmFtZSA9PT4gIiArIGNtZFdpdGhKdXN0TmFtZS5yZXN1bHQoKS5zaXplKCkpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqIGxpc3QtYmF0Y2gtam9icyAtbCA9PT4gIiArIHNpemUgKyAiOyAgIGxpc3QtYmF0Y2gtam9icyAtbyBqb2JuYW1lID09PiAiICsgY21kV2l0aEp1c3ROYW1lLnJlc3VsdCgpLnNpemUoKSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIik7CiAgICAgICAgIGFzc2VydFRydWUoY21kLnJhbk9LKCkpOwogICAgICAgICBhc3NlcnRUcnVlKGNtZFdpdGhKdXN0TmFtZS5yYW5PSygpICYmIGNtZFdpdGhKdXN0TmFtZS5yZXN1bHQoKS5zaXplKCkgPT0gY21kLnJlc3VsdCgpLnNpemUoKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvYmF0Y2gtZGV2LXRlc3RzL2JhdGNoLXRlc3RzLXV0aWxzL3BvbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9iYXRjaC1kZXYtdGVzdHMvYmF0Y2gtdGVzdHMtdXRpbHMvcG9tLnhtbAppbmRleCBmYzY1Y2RhLi5kODBlMjQ5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9iYXRjaC1kZXYtdGVzdHMvYmF0Y2gtdGVzdHMtdXRpbHMvcG9tLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9iYXRjaC1kZXYtdGVzdHMvYmF0Y2gtdGVzdHMtdXRpbHMvcG9tLnhtbApAQCAtMjQsMTAgKzI0LDEwIEBACiAKICAgICA8cGFyZW50PgogICAgICAgICA8Z3JvdXBJZD5vcmcuZ2xhc3NmaXNoLm1haW48L2dyb3VwSWQ+Ci0gICAgCTxhcnRpZmFjdElkPmJhdGNoLWRldi10ZXN0czwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+YmF0Y2gtZGV2LXRlc3RzPC9hcnRpZmFjdElkPgogICAgICAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgICA8L3BhcmVudD4KICAgICA8YXJ0aWZhY3RJZD5iYXRjaC10ZXN0cy11dGlsczwvYXJ0aWZhY3RJZD4KICAgICA8cGFja2FnaW5nPmphcjwvcGFja2FnaW5nPgotICAgIAorCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9iYXRjaC1kZXYtdGVzdHMvcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2JhdGNoLWRldi10ZXN0cy9wb20ueG1sCmluZGV4IGQwMDlmOTkuLjQwNjg5ZGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2JhdGNoLWRldi10ZXN0cy9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2JhdGNoLWRldi10ZXN0cy9wb20ueG1sCkBAIC0zMCw3ICszMCw3IEBACiAKICAgICA8YXJ0aWZhY3RJZD5iYXRjaC1kZXYtdGVzdHM8L2FydGlmYWN0SWQ+CiAgICAgPHBhY2thZ2luZz5wb208L3BhY2thZ2luZz4KLSAgICAKKwogICAgPG1vZHVsZXM+CiAgICAgICAgPG1vZHVsZT5iYXRjaC10ZXN0cy11dGlsczwvbW9kdWxlPgogICAgICAgIDxtb2R1bGU+YmF0Y2gtY29tbWFuZHMtdGVzdHM8L21vZHVsZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2JtdC1jaHVuay1qb2IvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2JtdC1jaHVuay1qb2IvYnVpbGQucHJvcGVydGllcwppbmRleCBiYWMxMTIxLi5hYjg3ZDk1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9ibXQtY2h1bmstam9iL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvYm10LWNodW5rLWpvYi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMyArMTUsMTMgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImRldnRlc3QtYmF0Y2gtYm10LWNodW5rLWpvYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImJlYW5zLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYmVhbnMueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iYmF0Y2gueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9iYXRjaC54bWwiLz4KQEAgLTI5LDExICsyOSwxMSBAQAogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImJhdGNoLmpvYnMuZGlyIiB2YWx1ZT0iZGVzY3JpcHRvci9iYXRjaC1qb2JzIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJiYXRjaF9kZXJieS5zcWwiIHZhbHVlPSIuLi8uLi9iYXRjaF9kZXJieS5zcWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2JtdC1jaHVuay1qb2IvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvYm10LWNodW5rLWpvYi9idWlsZC54bWwKaW5kZXggNjJmNjA2MC4uYmNkNjBiNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvYm10LWNodW5rLWpvYi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvYm10LWNodW5rLWpvYi9idWlsZC54bWwKQEAgLTM4LDcgKzM4LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTUxLDE5ICs1MSwxOSBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKi5jbGFzcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0NsaWVudC5jbGFzcywqKi9TbGVzcy5jbGFzcywqKi9TbGVzczMwLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJjb3B5LWJhdGNoLXNxbCIgZGVwZW5kcz0iYnVpbGQiPgotICAgIAk8ZWNobyBtZXNzYWdlPSIqKioqKiBDb3B5ICR7YmF0Y2hfZGVyYnkuc3FsfSB0byBUYXJnZXQgZGlyOiAke2Vudi5TMUFTX0hPTUV9L2xpYiIvPgotICAgIAk8Y29weSBmaWxlPSIke2JhdGNoX2RlcmJ5LnNxbH0iIHRvZGlyPSIke2Vudi5TMUFTX0hPTUV9L2xpYiIvPgogICAgIDwvdGFyZ2V0PgogCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDx0YXJnZXQgbmFtZT0iY29weS1iYXRjaC1zcWwiIGRlcGVuZHM9ImJ1aWxkIj4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iKioqKiogQ29weSAke2JhdGNoX2RlcmJ5LnNxbH0gdG8gVGFyZ2V0IGRpcjogJHtlbnYuUzFBU19IT01FfS9saWIiLz4KKyAgICAgICAgPGNvcHkgZmlsZT0iJHtiYXRjaF9kZXJieS5zcWx9IiB0b2Rpcj0iJHtlbnYuUzFBU19IT01FfS9saWIiLz4KKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTcxLDEwICs3MSwxMCBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9ibXQtY2h1bmstam9iL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2JtdC1jaHVuay1qb2IvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGZmZjc0YTAuLmQ0ZDhhZGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2JtdC1jaHVuay1qb2IvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2JtdC1jaHVuay1qb2IvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNiw3ICsyNiw3IEBACiBARUpCKG5hbWU9ImVqYi9HRyIsIGJlYW5JbnRlcmZhY2U9U2xlc3MuY2xhc3MpCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewpAQCAtMzUsMzMgKzM1LDMzIEBACiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJiYXRjaC1jaHVuay1zdGF0ZWxlc3MiKTsKLSAgICB9ICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgQEVKQihuYW1lPSJlamIva2siKSBTbGVzcyBzbGVzczsKIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIChuZXcgSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9HRyIpOwotCSAgICBsb25nIGV4ZWN1dGlvbklkID0gc2xlc3Muc3VibWl0Sm9iKCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKiBKb2JJRDogIiArIGV4ZWN1dGlvbklkICsgIiAqKioqKioqKioqKioqKioqKioiKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiKTsKLQkgICAgU3RyaW5nIGpvYkJhdGNoU3RhdHVzID0gIiI7Ci0JICAgIGZvciAoaW50IHNlYz0xMDsgc2VjPjA7IHNlYy0tKSB7Ci0JICAgICAgICB0cnkgewotCQkgICAgam9iQmF0Y2hTdGF0dXMgPSBzbGVzcy5nZXRKb2JFeGl0U3RhdHVzKGV4ZWN1dGlvbklkKTsKLQkJICAgIGlmICghICJDT01QTEVURUQiLmVxdWFscyhqb2JCYXRjaFN0YXR1cykpIHsKLQkJICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldpbGwgc2xlZXAgZm9yICIgKyBzZWMgKyAiIG1vcmUgc2Vjb25kcy4uLjogIiArIGpvYkJhdGNoU3RhdHVzKTsKLQkJICAgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDEwMDApOwotCQkgICAgfQotCQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJfQotCSAgICB9CisgICAgICAgIGxvbmcgZXhlY3V0aW9uSWQgPSBzbGVzcy5zdWJtaXRKb2IoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqIEpvYklEOiAiICsgZXhlY3V0aW9uSWQgKyAiICoqKioqKioqKioqKioqKioqKiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpOworICAgICAgICBTdHJpbmcgam9iQmF0Y2hTdGF0dXMgPSAiIjsKKyAgICAgICAgZm9yIChpbnQgc2VjPTEwOyBzZWM+MDsgc2VjLS0pIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICBqb2JCYXRjaFN0YXR1cyA9IHNsZXNzLmdldEpvYkV4aXRTdGF0dXMoZXhlY3V0aW9uSWQpOworICAgICAgICAgICAgaWYgKCEgIkNPTVBMRVRFRCIuZXF1YWxzKGpvYkJhdGNoU3RhdHVzKSkgeworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2lsbCBzbGVlcCBmb3IgIiArIHNlYyArICIgbW9yZSBzZWNvbmRzLi4uOiAiICsgam9iQmF0Y2hTdGF0dXMpOworICAgICAgICAgICAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoMTAwMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICB9CisgICAgICAgIH0KICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJiYXRjaC1jaHVuay1zdGF0ZWxlc3MiLCAoIkNPTVBMRVRFRCIuZXF1YWxzKGpvYkJhdGNoU3RhdHVzKSA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCkpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImJhdGNoLWNodW5rLXN0YXRlbGVzcyIsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9ibXQtY2h1bmstam9iL2Rlc2NyaXB0b3IvYmF0Y2gtam9icy9DaHVua0pvYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9ibXQtY2h1bmstam9iL2Rlc2NyaXB0b3IvYmF0Y2gtam9icy9DaHVua0pvYi54bWwKaW5kZXggZDY4YjNmNi4uNGRlYzk1NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvYm10LWNodW5rLWpvYi9kZXNjcmlwdG9yL2JhdGNoLWpvYnMvQ2h1bmtKb2IueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2JtdC1jaHVuay1qb2IvZGVzY3JpcHRvci9iYXRjaC1qb2JzL0NodW5rSm9iLnhtbApAQCAtMjAsOSArMjAsOSBAQAogPGpvYiBpZD0iYm10LWNodW5rLWpvYiIgeG1sbnM9Imh0dHBzOi8vamFrYXJ0YS5lZS94bWwvbnMvamFrYXJ0YWVlIiB2ZXJzaW9uPSIyLjAiPgogICAgIDxzdGVwIGlkPSJzdGVwMSI+CiAgICAgICAgIDxjaHVuayBpdGVtLWNvdW50PSIzIj4KLSAgICAgICAgICAgIDxyZWFkZXIgcmVmPSJTaW1wbGVJdGVtUmVhZGVyIj48L3JlYWRlcj4gCisgICAgICAgICAgICA8cmVhZGVyIHJlZj0iU2ltcGxlSXRlbVJlYWRlciI+PC9yZWFkZXI+CiAgICAgICAgICAgICA8cHJvY2Vzc29yIHJlZj0iU2ltcGxlSXRlbVByb2Nlc3NvciI+PC9wcm9jZXNzb3I+Ci0gICAgICAgICAgICA8d3JpdGVyIHJlZj0iU2ltcGxlSXRlbVdyaXRlciI+PC93cml0ZXI+IAorICAgICAgICAgICAgPHdyaXRlciByZWY9IlNpbXBsZUl0ZW1Xcml0ZXIiPjwvd3JpdGVyPgogICAgICAgICA8L2NodW5rPgogICAgIDwvc3RlcD4KIDwvam9iPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvYm10LWNodW5rLWpvYi9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvY2h1bmsvSWRHZW5lcmF0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2JtdC1jaHVuay1qb2IvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL2NodW5rL0lkR2VuZXJhdG9yLmphdmEKaW5kZXggMTU3ZWE0MC4uYjZkM2Y1ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvYm10LWNodW5rLWpvYi9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvY2h1bmsvSWRHZW5lcmF0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9ibXQtY2h1bmstam9iL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9jaHVuay9JZEdlbmVyYXRvci5qYXZhCkBAIC0yMSw1ICsyMSw1IEBACiBwdWJsaWMgaW50ZXJmYWNlIElkR2VuZXJhdG9yIHsKIAogICAgIHB1YmxpYyBTdHJpbmcgbmV4dElkKCk7Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2JtdC1jaHVuay1qb2IvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL2NodW5rL1NpbXBsZUlkR2VuZXJhdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9ibXQtY2h1bmstam9iL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9jaHVuay9TaW1wbGVJZEdlbmVyYXRvci5qYXZhCmluZGV4IDc4MmFjODUuLjNjNzRiNjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2JtdC1jaHVuay1qb2IvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL2NodW5rL1NpbXBsZUlkR2VuZXJhdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvYm10LWNodW5rLWpvYi9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvY2h1bmsvU2ltcGxlSWRHZW5lcmF0b3IuamF2YQpAQCAtMjIsOSArMjIsOSBAQAogICovCiBwdWJsaWMgY2xhc3MgU2ltcGxlSWRHZW5lcmF0b3IKICAgICBpbXBsZW1lbnRzIElkR2VuZXJhdG9yIHsKLSAgICAKKwogICAgIHByaXZhdGUgQXRvbWljSW50ZWdlciBjb3VudGVyID0gbmV3IEF0b21pY0ludGVnZXIoMCk7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIG5leHRJZCgpIHsKICAgICAgICAgcmV0dXJuICIiICsgY291bnRlci5pbmNyZW1lbnRBbmRHZXQoKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9ibXQtY2h1bmstam9iL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9jaHVuay9TaW1wbGVJdGVtUHJvY2Vzc29yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9ibXQtY2h1bmstam9iL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9jaHVuay9TaW1wbGVJdGVtUHJvY2Vzc29yLmphdmEKaW5kZXggZjQzMDhiMC4uYzUzMzllYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvYm10LWNodW5rLWpvYi9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvY2h1bmsvU2ltcGxlSXRlbVByb2Nlc3Nvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2JtdC1jaHVuay1qb2IvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL2NodW5rL1NpbXBsZUl0ZW1Qcm9jZXNzb3IuamF2YQpAQCAtMjMsMTIgKzIzLDEyIEBACiAKIC8vICAgIEBJbmplY3QKIC8vICAgIElkR2VuZXJhdG9yIGlkR2VuOwotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIFN0cmluZyBwcm9jZXNzSXRlbShPYmplY3Qgb2JqKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQlTdHJpbmcgdCA9IChTdHJpbmcpIG9iajsKKyAgICBTdHJpbmcgdCA9IChTdHJpbmcpIG9iajsKICAgICAgICAgU3RyaW5nW10gcmVjb3JkID0gdC5zcGxpdCgiLCAiKTsKLSAgICAgICAgCisKICAgICAvL0VNUC1JRCwgTU9OVEgtWUVBUiwgU0FMQVJZLCBUQVglLCBNRURJQ0FSRSUsIE9USEVSCiAgICAgICAgIGludCBzYWxhcnkgPSBJbnRlZ2VyLnZhbHVlT2YocmVjb3JkWzJdKTsKICAgICAgICAgZG91YmxlIHRheCA9IERvdWJsZS52YWx1ZU9mKHJlY29yZFszXSk7CkBAIC0zOSw1ICszOSw1IEBACiAgICAgICAgIHNiLmFwcGVuZCgiLCAiKS5hcHBlbmQoc2FsYXJ5IC0gKHNhbGFyeSAqIHRheCAvIDEwMCkgLSAoc2FsYXJ5ICogbWVkaUNhcmUgLyAxMDApKTsKICAgICAgICAgcmV0dXJuICBzYi50b1N0cmluZygpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvYm10LWNodW5rLWpvYi9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvY2h1bmsvU2ltcGxlSXRlbVJlYWRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvYm10LWNodW5rLWpvYi9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvY2h1bmsvU2ltcGxlSXRlbVJlYWRlci5qYXZhCmluZGV4IDcwMmI3MTguLjZlOTNhOWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2JtdC1jaHVuay1qb2IvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL2NodW5rL1NpbXBsZUl0ZW1SZWFkZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9ibXQtY2h1bmstam9iL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9jaHVuay9TaW1wbGVJdGVtUmVhZGVyLmphdmEKQEAgLTIxLDcgKzIxLDcgQEAKICAgICBpbXBsZW1lbnRzIGpha2FydGEuYmF0Y2guYXBpLmNodW5rLkl0ZW1SZWFkZXIgewogCiAgICAgcHJpdmF0ZSBpbnQgaW5kZXggPSAwOwotICAgIAorCiAgICAgLy9FTVAtSUQsIE1PTlRILVlFQVIsIFNBTEFSWSwgVEFYJSwgTUVESUNBUkUlLCBPVEhFUgogICAgIHByaXZhdGUgU3RyaW5nW10gaXRlbXMgPSBuZXcgU3RyaW5nW10gewogICAgICAgICAiMTIwLTAxLCBKQU4tMjAxMywgODAwMCwgMjcsIDMsIDAiLApAQCAtMzMsNyArMzMsNyBAQAogICAgICAgICAiMTIwLTA3LCBKQU4tMjAxMywgMTEwMDAsIDM2LCA1LCAwIiwKICAgICAgICAgIjEyMC0wOCwgSkFOLTIwMTMsIDExNTAwLCAzNiwgNSwgMCIsCiAgICAgfTsKLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIG9wZW4oU2VyaWFsaXphYmxlIGUpIHRocm93cyBFeGNlcHRpb24gewogICAgIH0KQEAgLTUxLDUgKzUxLDUgQEAKICAgICBwdWJsaWMgU2VyaWFsaXphYmxlIGNoZWNrcG9pbnRJbmZvKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvYm10LWNodW5rLWpvYi9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvY2h1bmsvU2ltcGxlSXRlbVdyaXRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvYm10LWNodW5rLWpvYi9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvY2h1bmsvU2ltcGxlSXRlbVdyaXRlci5qYXZhCmluZGV4IDRmYjVlZGQuLmY2Y2FkNjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2JtdC1jaHVuay1qb2IvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL2NodW5rL1NpbXBsZUl0ZW1Xcml0ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9ibXQtY2h1bmstam9iL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9jaHVuay9TaW1wbGVJdGVtV3JpdGVyLmphdmEKQEAgLTE5LDcgKzE5LDcgQEAKIEBqYWthcnRhLmluamVjdC5OYW1lZCgiU2ltcGxlSXRlbVdyaXRlciIpCiBwdWJsaWMgY2xhc3MgU2ltcGxlSXRlbVdyaXRlcgogICAgIGltcGxlbWVudHMgamFrYXJ0YS5iYXRjaC5hcGkuY2h1bmsuSXRlbVdyaXRlciB7Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBvcGVuKFNlcmlhbGl6YWJsZSBlKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICB9CkBAIC0zMSw3ICszMSw3IEBACiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgd3JpdGVJdGVtcyhMaXN0IGxzdCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigiU2ltcGxlSXRlbVdyaXRlcjoiKTsKLQlMaXN0PFN0cmluZz4gbGlzdCA9IChMaXN0PFN0cmluZz4pIGxzdDsKKyAgICBMaXN0PFN0cmluZz4gbGlzdCA9IChMaXN0PFN0cmluZz4pIGxzdDsKICAgICAgICAgZm9yIChTdHJpbmcgcyA6IGxpc3QpIHsKICAgICAgICAgICAgIHNiLmFwcGVuZCgiICIpLmFwcGVuZChzKTsKICAgICAgICAgfQpAQCAtNDIsNSArNDIsNSBAQAogICAgIHB1YmxpYyBTZXJpYWxpemFibGUgY2hlY2twb2ludEluZm8oKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9ibXQtY2h1bmstam9iL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9jaHVuay9TbGVzc0JlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2JtdC1jaHVuay1qb2IvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL2NodW5rL1NsZXNzQmVhbi5qYXZhCmluZGV4IGExZTA5ZTcuLjc3MTc5MzQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2JtdC1jaHVuay1qb2IvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL2NodW5rL1NsZXNzQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2JtdC1jaHVuay1qb2IvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL2NodW5rL1NsZXNzQmVhbi5qYXZhCkBAIC0zNiwzMiArMzYsMzIgQEAKICAgICB9CiAKICAgICBwdWJsaWMgbG9uZyBzdWJtaXRKb2IoKSB7Ci0JdHJ5IHsKLQkgIEpvYk9wZXJhdG9yIGpvYk9wZXJhdG9yID0gQmF0Y2hSdW50aW1lLmdldEpvYk9wZXJhdG9yKCk7CisgICAgdHJ5IHsKKyAgICAgIEpvYk9wZXJhdG9yIGpvYk9wZXJhdG9yID0gQmF0Y2hSdW50aW1lLmdldEpvYk9wZXJhdG9yKCk7CiAKLQkgIFByb3BlcnRpZXMgcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOwotCSAgZm9yIChpbnQgaT0wOyBpPDk7IGkrKykKLQkJcHJvcHMucHV0KCJDaHVuay1LZXktIisgaSwgIkNodW5rLVZhbHVlLSIgKyBpKTsKLQkgIHJldHVybiAgam9iT3BlcmF0b3Iuc3RhcnQoIkNodW5rSm9iIiwgcHJvcHMpOworICAgICAgUHJvcGVydGllcyBwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7CisgICAgICBmb3IgKGludCBpPTA7IGk8OTsgaSsrKQorICAgICAgICBwcm9wcy5wdXQoIkNodW5rLUtleS0iKyBpLCAiQ2h1bmstVmFsdWUtIiArIGkpOworICAgICAgcmV0dXJuICBqb2JPcGVyYXRvci5zdGFydCgiQ2h1bmtKb2IiLCBwcm9wcyk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCSAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZXgpOwotCX0KKyAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGV4KTsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyBnZXRKb2JFeGl0U3RhdHVzKGxvbmcgZXhlY3V0aW9uSWQpIHsKLQl0cnkgewotCSAgSm9iT3BlcmF0b3Igam9iT3BlcmF0b3IgPSBCYXRjaFJ1bnRpbWUuZ2V0Sm9iT3BlcmF0b3IoKTsKLQkgIEpvYkV4ZWN1dGlvbiBqZSA9ICBqb2JPcGVyYXRvci5nZXRKb2JFeGVjdXRpb24oZXhlY3V0aW9uSWQpOwotCSAgcmV0dXJuIGplLmdldEV4aXRTdGF0dXMoKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGV4KTsKLQl9CisgICAgdHJ5IHsKKyAgICAgIEpvYk9wZXJhdG9yIGpvYk9wZXJhdG9yID0gQmF0Y2hSdW50aW1lLmdldEpvYk9wZXJhdG9yKCk7CisgICAgICBKb2JFeGVjdXRpb24gamUgPSAgam9iT3BlcmF0b3IuZ2V0Sm9iRXhlY3V0aW9uKGV4ZWN1dGlvbklkKTsKKyAgICAgIHJldHVybiBqZS5nZXRFeGl0U3RhdHVzKCk7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihleCk7CisgICAgfQogCiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gd2FzRWpiQ3JlYXRlQ2FsbGVkKCkgewotCXJldHVybiBlamJDcmVhdGVDYWxsZWQ7CisgICAgcmV0dXJuIGVqYkNyZWF0ZUNhbGxlZDsKICAgICB9CiAKLQkJCQkJCQkJCQkJCQkJICAgICAgICAgICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2J1aWxkLnhtbAppbmRleCA0ZjdhZTgxLi4wYWM4NzZjIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvYnVpbGQueG1sCkBAIC0zMiwyMiArMzIsMjIgQEAKIDxwcm9wZXJ0eSBmaWxlPSJidWlsZC5wcm9wZXJ0aWVzIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiPgotCTxkZWxldGU+CisgICAgPGRlbGV0ZT4KICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5BUFNfSE9NRX0iIGluY2x1ZGVzPSJ0ZXN0X3Jlc3VsdHMqIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgICAgICA8ZGVsZXRlPgogICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLm91dHB1dCIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICAgICAgPHJlY29yZCBuYW1lPSJiYXRjaC5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiIC8+Ci08IS0tCTxhbnQgZGlyPSJiYXRjaC1kZXYtdGVzdHMiIHRhcmdldD0iYWxsIi8+ICAtLT4KLQk8YW50IGRpcj0iYm10LWNodW5rLWpvYiIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0iY210LWNodW5rLWpvYiIgdGFyZ2V0PSJhbGwiLz4KLTwhLS0JPGFudCBkaXI9InBheS1yb2xsLWpvYi13aXRoLWVqYi9zdGF0ZWxlc3MiIHRhcmdldD0iYWxsIi8+ICAKLQk8YW50IGRpcj0ic2ltcGxlLWJhdGNobGV0IiB0YXJnZXQ9ImFsbCIvPiAtLT4KLQk8YW50IGRpcj0ic2ltcGxlLXZhbGlkYXRpb24tdGVzdCIgdGFyZ2V0PSJhbGwiLz4KLTwhLS0JPGFudCBkaXI9InR3by1zdGVwcy1qb2IiIHRhcmdldD0iYWxsIi8+ICAgLS0+Ci0JPHJlY29yZCBuYW1lPSJiYXRjaC5vdXRwdXQiIGFjdGlvbj0ic3RvcCIgLz4KLQkKKzwhLS0gICAgPGFudCBkaXI9ImJhdGNoLWRldi10ZXN0cyIgdGFyZ2V0PSJhbGwiLz4gIC0tPgorICAgIDxhbnQgZGlyPSJibXQtY2h1bmstam9iIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJjbXQtY2h1bmstam9iIiB0YXJnZXQ9ImFsbCIvPgorPCEtLSAgICA8YW50IGRpcj0icGF5LXJvbGwtam9iLXdpdGgtZWpiL3N0YXRlbGVzcyIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0ic2ltcGxlLWJhdGNobGV0IiB0YXJnZXQ9ImFsbCIvPiAtLT4KKyAgICA8YW50IGRpcj0ic2ltcGxlLXZhbGlkYXRpb24tdGVzdCIgdGFyZ2V0PSJhbGwiLz4KKzwhLS0gICAgPGFudCBkaXI9InR3by1zdGVwcy1qb2IiIHRhcmdldD0iYWxsIi8+ICAgLS0+CisgICAgPHJlY29yZCBuYW1lPSJiYXRjaC5vdXRwdXQiIGFjdGlvbj0ic3RvcCIgLz4KKwogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgotCQorCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9jbXQtY2h1bmstam9iL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9jbXQtY2h1bmstam9iL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNjc4MTcwOC4uNzQyYzhiYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvY210LWNodW5rLWpvYi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2NtdC1jaHVuay1qb2IvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTMgKzE1LDEzIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJiYXRjaC1jbXQtY2h1bmsiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJiZWFucy54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2JlYW5zLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImJhdGNoLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYmF0Y2gueG1sIi8+CkBAIC0yOSwxMSArMjksMTEgQEAKIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJiYXRjaC5qb2JzLmRpciIgdmFsdWU9ImRlc2NyaXB0b3IvYmF0Y2gtam9icyIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0iYmF0Y2hfZGVyYnkuc3FsIiB2YWx1ZT0iLi4vLi4vYmF0Y2hfZGVyYnkuc3FsIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9jbXQtY2h1bmstam9iL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2NtdC1jaHVuay1qb2IvYnVpbGQueG1sCmluZGV4IDE2ODFjYjQuLjVjNjY4NDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2NtdC1jaHVuay1qb2IvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2NtdC1jaHVuay1qb2IvYnVpbGQueG1sCkBAIC0zOCw3ICszOCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC01MSwxOSArNTEsMTkgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLyouY2xhc3MiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9DbGllbnQuY2xhc3MsKiovSm9iU3VibWl0dGVyLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJjb3B5LWJhdGNoLXNxbCIgZGVwZW5kcz0iYnVpbGQiPgotICAgIAk8ZWNobyBtZXNzYWdlPSIqKioqKiBDb3B5ICR7YmF0Y2hfZGVyYnkuc3FsfSB0byBUYXJnZXQgZGlyOiAke2Vudi5TMUFTX0hPTUV9L2xpYiIvPgotICAgIAk8Y29weSBmaWxlPSIke2JhdGNoX2RlcmJ5LnNxbH0iIHRvZGlyPSIke2Vudi5TMUFTX0hPTUV9L2xpYiIvPgogICAgIDwvdGFyZ2V0PgogCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDx0YXJnZXQgbmFtZT0iY29weS1iYXRjaC1zcWwiIGRlcGVuZHM9ImJ1aWxkIj4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iKioqKiogQ29weSAke2JhdGNoX2RlcmJ5LnNxbH0gdG8gVGFyZ2V0IGRpcjogJHtlbnYuUzFBU19IT01FfS9saWIiLz4KKyAgICAgICAgPGNvcHkgZmlsZT0iJHtiYXRjaF9kZXJieS5zcWx9IiB0b2Rpcj0iJHtlbnYuUzFBU19IT01FfS9saWIiLz4KKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTcxLDEwICs3MSwxMCBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9jbXQtY2h1bmstam9iL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2NtdC1jaHVuay1qb2IvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDg2NzI1ZDguLjAzYjYxNmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2NtdC1jaHVuay1qb2IvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2NtdC1jaHVuay1qb2IvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNSw3ICsyNSw3IEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CkBAIC0zNCw0NSArMzQsNDUgQEAKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImJhdGNoLWNtdC1jaHVuayIpOwotICAgIH0gIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBARUpCIEpvYlN1Ym1pdHRlciBqb2JTdWJtaXR0ZXI7CiAKICAgICBpbnQgTUFYX0pPQl9TSVpFID0gMjsKICAgICBsb25nW10gZXhlY3V0aW9uSWRzID0gbmV3IGxvbmdbTUFYX0pPQl9TSVpFXTsKIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLQlmb3IgKGludCBpPTA7IGk8TUFYX0pPQl9TSVpFOyBpKyspCi0JICAgIGV4ZWN1dGlvbklkc1tpXSA9IC0xOworICAgIGZvciAoaW50IGk9MDsgaTxNQVhfSk9CX1NJWkU7IGkrKykKKyAgICAgICAgZXhlY3V0aW9uSWRzW2ldID0gLTE7CiAgICAgICAgIHN1Ym1pdEpvYnMoKTsKICAgICAgICAgY2hlY2tKb2JFeGVjdXRpb24oZXhlY3V0aW9uSWRzWzBdKTsKLSAgICAJaXNKb2JFeGVjdXRpb25PSyhleGVjdXRpb25JZHNbMF0pOwotICAgIAljaGVja0lmT25seUpvYnNGcm9tVGhpc0FwcEFyZVZpc2libGUoKTsKKyAgICAgICAgaXNKb2JFeGVjdXRpb25PSyhleGVjdXRpb25JZHNbMF0pOworICAgICAgICBjaGVja0lmT25seUpvYnNGcm9tVGhpc0FwcEFyZVZpc2libGUoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzdWJtaXRKb2JzKCkgewogICAgICAgICB0cnkgewotCSAgICBmb3IgKGludCBpID0gMDsgaTwgTUFYX0pPQl9TSVpFOyBpKyspIHsKLQkgICAgICAgIGV4ZWN1dGlvbklkc1tpXSA9IGpvYlN1Ym1pdHRlci5zdWJtaXRKb2IoIkNNVC1DaHVua0pvYiIpOwotCSAgICAgICAgY2hlY2tCYXRjaEpvYlN0YXR1cyhleGVjdXRpb25JZHNbaV0sIDEwKTsKLQkgICAgfQotCSAgICBib29sZWFuIHJlc3VsdCA9IHRydWU7Ci0JICAgIGZvciAoaW50IGk9MDsgaTxNQVhfSk9CX1NJWkU7IGkrKykgewotCSAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgZXhlY3V0aW9uSWRzW2ldICE9IC0xOwotCSAgICB9CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpPCBNQVhfSk9CX1NJWkU7IGkrKykgeworICAgICAgICAgICAgZXhlY3V0aW9uSWRzW2ldID0gam9iU3VibWl0dGVyLnN1Ym1pdEpvYigiQ01ULUNodW5rSm9iIik7CisgICAgICAgICAgICBjaGVja0JhdGNoSm9iU3RhdHVzKGV4ZWN1dGlvbklkc1tpXSwgMTApOworICAgICAgICB9CisgICAgICAgIGJvb2xlYW4gcmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPE1BWF9KT0JfU0laRTsgaSsrKSB7CisgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiBleGVjdXRpb25JZHNbaV0gIT0gLTE7CisgICAgICAgIH0KICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJiYXRjaC1jbXQtY2h1bmstdGVzdDEiLCAocmVzdWx0ID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKSk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiYmF0Y2gtY210LWNodW5rLXRlc3QxIiwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGNoZWNrSm9iRXhlY3V0aW9uKGxvbmcgZXhlY3V0aW9uSWQpIHsKICAgICAgICAgdHJ5IHsKLQkgICAgYm9vbGVhbiBzdGF0dXMgPSB0cnVlOwotCSAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IG1hcCA9IGpvYlN1Ym1pdHRlci50b01hcChleGVjdXRpb25JZCk7CisgICAgICAgIGJvb2xlYW4gc3RhdHVzID0gdHJ1ZTsKKyAgICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiBtYXAgPSBqb2JTdWJtaXR0ZXIudG9NYXAoZXhlY3V0aW9uSWQpOwogCiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiYmF0Y2gtY210LXN0YXR1cy1jaGVja0V4ZS1qb2JOYW1lIiwgbWFwLmdldCgiam9iTmFtZSIpICE9IG51bGwgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImJhdGNoLWNtdC1zdGF0dXMtY2hlY2tFeGUtYXBwTmFtZSIsIG1hcC5nZXQoImFwcE5hbWUiKSAhPSBudWxsID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKTsKQEAgLTgzLDcgKzgzLDcgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJiYXRjaC1jbXQtc3RhdHVzLWNoZWNrRXhlLWJhdGNoU3RhdHVzIiwgbWFwLmdldCgiYmF0Y2hTdGF0dXMiKSAhPSBudWxsID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJiYXRjaC1jbXQtc3RhdHVzLWNoZWNrRXhlLWVuZFRpbWUiLCBtYXAuZ2V0KCJlbmRUaW1lIikgIT0gbnVsbCA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7CiAKLQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJiYXRjaC1jbXQtY2h1bmstdGVzdDMiLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAgICAgfQpAQCAtOTQsMTggKzk0LDE4IEBACiAKICAgICBwcml2YXRlIGJvb2xlYW4gY2hlY2tPbmVKb2JFeGVjdXRpb24obG9uZyBleGVjdXRpb25JZCkgewogICAgICAgICB0cnkgewotCSAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IG1hcCA9IGpvYlN1Ym1pdHRlci50b01hcChleGVjdXRpb25JZCk7Ci0JICAgIHJldHVybiBtYXAgIT0gbnVsbCAmJgotICAgICAgICAgICAgCW1hcC5nZXQoImpvYk5hbWUiKSAhPSBudWxsICYmCi0gICAgICAgICAgICAJbWFwLmdldCgiYXBwTmFtZSIpICE9IG51bGwgJiYKLSAgICAgICAgICAgIAltYXAuZ2V0KCJpbnN0YW5jZUNvdW50IikgIT0gbnVsbCAmJgotICAgICAgICAgICAgCW1hcC5nZXQoImluc3RhbmNlSUQiKSAhPSBudWxsICYmCi0gICAgICAgICAgICAJbWFwLmdldCgiZXhlY3V0aW9uSUQiKSAhPSBudWxsICYmCi0gICAgICAgICAgICAJbWFwLmdldCgic3RhcnRUaW1lIikgIT0gbnVsbCAmJgotICAgICAgICAgICAgCW1hcC5nZXQoImJhdGNoU3RhdHVzIikgIT0gbnVsbCAmJgotICAgICAgICAgICAgCW1hcC5nZXQoImVuZFRpbWUiKSAhPSBudWxsOworICAgICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IG1hcCA9IGpvYlN1Ym1pdHRlci50b01hcChleGVjdXRpb25JZCk7CisgICAgICAgIHJldHVybiBtYXAgIT0gbnVsbCAmJgorICAgICAgICAgICAgICAgIG1hcC5nZXQoImpvYk5hbWUiKSAhPSBudWxsICYmCisgICAgICAgICAgICAgICAgbWFwLmdldCgiYXBwTmFtZSIpICE9IG51bGwgJiYKKyAgICAgICAgICAgICAgICBtYXAuZ2V0KCJpbnN0YW5jZUNvdW50IikgIT0gbnVsbCAmJgorICAgICAgICAgICAgICAgIG1hcC5nZXQoImluc3RhbmNlSUQiKSAhPSBudWxsICYmCisgICAgICAgICAgICAgICAgbWFwLmdldCgiZXhlY3V0aW9uSUQiKSAhPSBudWxsICYmCisgICAgICAgICAgICAgICAgbWFwLmdldCgic3RhcnRUaW1lIikgIT0gbnVsbCAmJgorICAgICAgICAgICAgICAgIG1hcC5nZXQoImJhdGNoU3RhdHVzIikgIT0gbnVsbCAmJgorICAgICAgICAgICAgICAgIG1hcC5nZXQoImVuZFRpbWUiKSAhPSBudWxsOwogCi0JfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMTMsMzcgKzExMywzNyBAQAogCiAgICAgcHVibGljIHZvaWQgY2hlY2tJZk9ubHlKb2JzRnJvbVRoaXNBcHBBcmVWaXNpYmxlKCkgewogICAgICAgICB0cnkgewotCSAgICBib29sZWFuIHN0YXR1cyA9IHRydWU7CisgICAgICAgIGJvb2xlYW4gc3RhdHVzID0gdHJ1ZTsKICAgICAgICAgICAgIGZvciAobG9uZyBleGVJZCA6IGpvYlN1Ym1pdHRlci5nZXRBbGxFeGVjdXRpb25JZHMobnVsbCkpIHsKLQkgICAgICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gbWFwID0gam9iU3VibWl0dGVyLnRvTWFwKGV4ZUlkKTsKLQkJU3RyaW5nIGpvYk5hbWUgPSBtYXAuZ2V0KCJqb2JOYW1lIik7Ci0JCVN0cmluZyBhcHBOYW1lID0gbWFwLmdldCgiYXBwTmFtZSIpOwotCSAgICAgICAgaWYgKCFqb2JOYW1lLnN0YXJ0c1dpdGgoImNtdC1jaHVuay1qb2IiKSB8fCAhYXBwTmFtZS5zdGFydHNXaXRoKCJzZXJ2ZXItY29uZmlnOmJhdGNoLWNtdC1jaHVua0FwcCIpKSB7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIik7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKiBKb2IgRnJvbSBhbm90aGVyIGFwcD8gIiArIGpvYk5hbWUgKyAiOyAiICsgYXBwTmFtZSArICIgKioqIik7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIik7Ci0JCSAgICBzdGF0dXMgPSBmYWxzZTsKLQkJICAgIGJyZWFrOwotCQl9Ci0JICAgIH0KKyAgICAgICAgICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gbWFwID0gam9iU3VibWl0dGVyLnRvTWFwKGV4ZUlkKTsKKyAgICAgICAgU3RyaW5nIGpvYk5hbWUgPSBtYXAuZ2V0KCJqb2JOYW1lIik7CisgICAgICAgIFN0cmluZyBhcHBOYW1lID0gbWFwLmdldCgiYXBwTmFtZSIpOworICAgICAgICAgICAgaWYgKCFqb2JOYW1lLnN0YXJ0c1dpdGgoImNtdC1jaHVuay1qb2IiKSB8fCAhYXBwTmFtZS5zdGFydHNXaXRoKCJzZXJ2ZXItY29uZmlnOmJhdGNoLWNtdC1jaHVua0FwcCIpKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIik7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKiBKb2IgRnJvbSBhbm90aGVyIGFwcD8gIiArIGpvYk5hbWUgKyAiOyAiICsgYXBwTmFtZSArICIgKioqIik7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIik7CisgICAgICAgICAgICBzdGF0dXMgPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIH0KICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJiYXRjaC1jbXQtY2h1bmstY2hlY2tJZk9ubHlKb2JzRnJvbVRoaXNBcHBBcmVWaXNpYmxlIiwgKHN0YXR1cyA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCkpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImJhdGNoLWNtdC1jaHVuay1jaGVja0lmT25seUpvYnNGcm9tVGhpc0FwcEFyZVZpc2libGUiLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgY2hlY2tCYXRjaEpvYlN0YXR1cyhsb25nIGV4ZWN1dGlvbklkLCBpbnQgc2VjKSB7Ci0Jd2hpbGUgKHNlYy0tID4gMCkgeworICAgIHdoaWxlIChzZWMtLSA+IDApIHsKICAgICAgICAgICAgIHRyeSB7Ci0JCVN0cmluZyBzdGF0dXMgPSBqb2JTdWJtaXR0ZXIuZ2V0Sm9iRXhpdFN0YXR1cyhleGVjdXRpb25JZCk7Ci0JCWlmICgiQ09NUExFVEVEIi5lcXVhbHNJZ25vcmVDYXNlKHN0YXR1cykgfHwgIkZBSUxFRCIuZXF1YWxzSWdub3JlQ2FzZShzdGF0dXMpKSB7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqIGNoZWNrQmF0Y2hKb2JTdGF0dXNbIiArIGV4ZWN1dGlvbklkICsgIl0gID09PiAiICsgc3RhdHVzKTsKLQkJICAgIGJyZWFrOwotCQl9CisgICAgICAgIFN0cmluZyBzdGF0dXMgPSBqb2JTdWJtaXR0ZXIuZ2V0Sm9iRXhpdFN0YXR1cyhleGVjdXRpb25JZCk7CisgICAgICAgIGlmICgiQ09NUExFVEVEIi5lcXVhbHNJZ25vcmVDYXNlKHN0YXR1cykgfHwgIkZBSUxFRCIuZXF1YWxzSWdub3JlQ2FzZShzdGF0dXMpKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqIGNoZWNrQmF0Y2hKb2JTdGF0dXNbIiArIGV4ZWN1dGlvbklkICsgIl0gID09PiAiICsgc3RhdHVzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXaWxsIHNsZWVwIGZvciAiICsgc2VjICsgIiBtb3JlIHNlY29uZHMuLi4iKTsKICAgICAgICAgICAgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDEwMDApOwogICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JICAgIH0KKyAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9jbXQtY2h1bmstam9iL2Rlc2NyaXB0b3IvYmF0Y2gtam9icy9DTVQtQ2h1bmtKb2IueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvY210LWNodW5rLWpvYi9kZXNjcmlwdG9yL2JhdGNoLWpvYnMvQ01ULUNodW5rSm9iLnhtbAppbmRleCBmMGQ0MjBhLi5iODQ1NmE0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9jbXQtY2h1bmstam9iL2Rlc2NyaXB0b3IvYmF0Y2gtam9icy9DTVQtQ2h1bmtKb2IueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2NtdC1jaHVuay1qb2IvZGVzY3JpcHRvci9iYXRjaC1qb2JzL0NNVC1DaHVua0pvYi54bWwKQEAgLTIwLDkgKzIwLDkgQEAKIDxqb2IgaWQ9ImNtdC1jaHVuay1qb2IiIHhtbG5zPSJodHRwczovL2pha2FydGEuZWUveG1sL25zL2pha2FydGFlZSIgdmVyc2lvbj0iMi4wIj4KICAgICA8c3RlcCBpZD0ic3RlcDEiPgogICAgICAgICA8Y2h1bmsgaXRlbS1jb3VudD0iMyI+Ci0gICAgICAgICAgICA8cmVhZGVyIHJlZj0iU2ltcGxlSXRlbVJlYWRlciI+PC9yZWFkZXI+IAorICAgICAgICAgICAgPHJlYWRlciByZWY9IlNpbXBsZUl0ZW1SZWFkZXIiPjwvcmVhZGVyPgogICAgICAgICAgICAgPHByb2Nlc3NvciByZWY9IlNpbXBsZUl0ZW1Qcm9jZXNzb3IiPjwvcHJvY2Vzc29yPgotICAgICAgICAgICAgPHdyaXRlciByZWY9IlNpbXBsZUl0ZW1Xcml0ZXIiPjwvd3JpdGVyPiAKKyAgICAgICAgICAgIDx3cml0ZXIgcmVmPSJTaW1wbGVJdGVtV3JpdGVyIj48L3dyaXRlcj4KICAgICAgICAgPC9jaHVuaz4KICAgICA8L3N0ZXA+CiA8L2pvYj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2NtdC1jaHVuay1qb2IvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL2NtdC9jaHVuay9JZEdlbmVyYXRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvY210LWNodW5rLWpvYi9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvY210L2NodW5rL0lkR2VuZXJhdG9yLmphdmEKaW5kZXggNzgyMzI0OS4uMzkxNjhhOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvY210LWNodW5rLWpvYi9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvY210L2NodW5rL0lkR2VuZXJhdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvY210LWNodW5rLWpvYi9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvY210L2NodW5rL0lkR2VuZXJhdG9yLmphdmEKQEAgLTIxLDUgKzIxLDUgQEAKIHB1YmxpYyBpbnRlcmZhY2UgSWRHZW5lcmF0b3IgewogCiAgICAgcHVibGljIFN0cmluZyBuZXh0SWQoKTsKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvY210LWNodW5rLWpvYi9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvY210L2NodW5rL0pvYlN1Ym1pdHRlckJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2NtdC1jaHVuay1qb2IvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL2NtdC9jaHVuay9Kb2JTdWJtaXR0ZXJCZWFuLmphdmEKaW5kZXggOTU5YTNhYy4uYWE1YTY5YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvY210LWNodW5rLWpvYi9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvY210L2NodW5rL0pvYlN1Ym1pdHRlckJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9jbXQtY2h1bmstam9iL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9jbXQvY2h1bmsvSm9iU3VibWl0dGVyQmVhbi5qYXZhCkBAIC00NSw3NSArNDUsNzUgQEAKICAgICB9CiAKICAgICBwdWJsaWMgbG9uZyBzdWJtaXRKb2IoU3RyaW5nIGpvYk5hbWUpIHsKLQl0cnkgewotCSAgSm9iT3BlcmF0b3Igam9iT3BlcmF0b3IgPSBCYXRjaFJ1bnRpbWUuZ2V0Sm9iT3BlcmF0b3IoKTsKKyAgICB0cnkgeworICAgICAgSm9iT3BlcmF0b3Igam9iT3BlcmF0b3IgPSBCYXRjaFJ1bnRpbWUuZ2V0Sm9iT3BlcmF0b3IoKTsKIAotCSAgUHJvcGVydGllcyBwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7Ci0JICBmb3IgKGludCBpPTA7IGk8MzsgaSsrKQotCQlwcm9wcy5wdXQoam9iTmFtZSArICItS2V5LSIgKyBpLCBqb2JOYW1lKyItVmFsdWUtIiArIGkpOwotCSAgcmV0dXJuICBqb2JPcGVyYXRvci5zdGFydChqb2JOYW1lLCBwcm9wcyk7CisgICAgICBQcm9wZXJ0aWVzIHByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKKyAgICAgIGZvciAoaW50IGk9MDsgaTwzOyBpKyspCisgICAgICAgIHByb3BzLnB1dChqb2JOYW1lICsgIi1LZXktIiArIGksIGpvYk5hbWUrIi1WYWx1ZS0iICsgaSk7CisgICAgICByZXR1cm4gIGpvYk9wZXJhdG9yLnN0YXJ0KGpvYk5hbWUsIHByb3BzKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihleCk7Ci0JfQorICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZXgpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgU3RyaW5nIGdldEpvYkV4aXRTdGF0dXMobG9uZyBleGVjdXRpb25JZCkgewotCXRyeSB7Ci0JICBKb2JPcGVyYXRvciBqb2JPcGVyYXRvciA9IEJhdGNoUnVudGltZS5nZXRKb2JPcGVyYXRvcigpOwotCSAgSm9iRXhlY3V0aW9uIGplID0gIGpvYk9wZXJhdG9yLmdldEpvYkV4ZWN1dGlvbihleGVjdXRpb25JZCk7Ci0JICByZXR1cm4gamUuZ2V0RXhpdFN0YXR1cygpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCSAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZXgpOwotCX0KKyAgICB0cnkgeworICAgICAgSm9iT3BlcmF0b3Igam9iT3BlcmF0b3IgPSBCYXRjaFJ1bnRpbWUuZ2V0Sm9iT3BlcmF0b3IoKTsKKyAgICAgIEpvYkV4ZWN1dGlvbiBqZSA9ICBqb2JPcGVyYXRvci5nZXRKb2JFeGVjdXRpb24oZXhlY3V0aW9uSWQpOworICAgICAgcmV0dXJuIGplLmdldEV4aXRTdGF0dXMoKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGV4KTsKKyAgICB9CiAKICAgICB9CiAKICAgICBwdWJsaWMgQ29sbGVjdGlvbjxTdHJpbmc+IGxpc3RKb2JzKGJvb2xlYW4gdXNlTG9uZ0Zvcm1hdCkgewotCXRyeSB7Ci0JICBKb2JPcGVyYXRvciBqb2JPcGVyYXRvciA9IEJhdGNoUnVudGltZS5nZXRKb2JPcGVyYXRvcigpOwotCSAgU2V0PFN0cmluZz4gam9icyA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKLQkgIGlmICghdXNlTG9uZ0Zvcm1hdCkgewotCSAgICAgIGZvciAoU3RyaW5nIGpvYk5hbWUgOiBqb2JPcGVyYXRvci5nZXRKb2JOYW1lcygpKSB7Ci0JICAgICAgICAgIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwotCQkgIHNiLmFwcGVuZChqb2JOYW1lKS5hcHBlbmQoIiAiKS5hcHBlbmQoam9iT3BlcmF0b3IuZ2V0Sm9iSW5zdGFuY2VDb3VudChqb2JOYW1lKSk7Ci0JCSAgam9icy5hZGQoc2IudG9TdHJpbmcoKSk7Ci0JICAgICB9CisgICAgdHJ5IHsKKyAgICAgIEpvYk9wZXJhdG9yIGpvYk9wZXJhdG9yID0gQmF0Y2hSdW50aW1lLmdldEpvYk9wZXJhdG9yKCk7CisgICAgICBTZXQ8U3RyaW5nPiBqb2JzID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOworICAgICAgaWYgKCF1c2VMb25nRm9ybWF0KSB7CisgICAgICAgICAgZm9yIChTdHJpbmcgam9iTmFtZSA6IGpvYk9wZXJhdG9yLmdldEpvYk5hbWVzKCkpIHsKKyAgICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisgICAgICAgICAgc2IuYXBwZW5kKGpvYk5hbWUpLmFwcGVuZCgiICIpLmFwcGVuZChqb2JPcGVyYXRvci5nZXRKb2JJbnN0YW5jZUNvdW50KGpvYk5hbWUpKTsKKyAgICAgICAgICBqb2JzLmFkZChzYi50b1N0cmluZygpKTsKKyAgICAgICAgIH0KICAgICAgICAgICB9IGVsc2UgewotCSAgICAgaW50IGluZGV4ID0gMDsKLQkgICAgIGZvciAoU3RyaW5nIGpvYk5hbWUgOiBqb2JPcGVyYXRvci5nZXRKb2JOYW1lcygpKSB7Ci0JCUxpc3Q8Sm9iSW5zdGFuY2U+IGV4ZSA9IGpvYk9wZXJhdG9yLmdldEpvYkluc3RhbmNlcyhqb2JOYW1lLCAwLCBJbnRlZ2VyLk1BWF9WQUxVRSAtIDEpOwotCQlpZiAoZXhlICE9IG51bGwpIHsKLQkJICAgZm9yIChKb2JJbnN0YW5jZSBqaSA6IGV4ZSkgewotCQkgICAgICBmb3IgKEpvYkV4ZWN1dGlvbiBqZSA6IGpvYk9wZXJhdG9yLmdldEpvYkV4ZWN1dGlvbnMoamkpKSB7Ci0JICAgICAgICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisgICAgICAgICBpbnQgaW5kZXggPSAwOworICAgICAgICAgZm9yIChTdHJpbmcgam9iTmFtZSA6IGpvYk9wZXJhdG9yLmdldEpvYk5hbWVzKCkpIHsKKyAgICAgICAgTGlzdDxKb2JJbnN0YW5jZT4gZXhlID0gam9iT3BlcmF0b3IuZ2V0Sm9iSW5zdGFuY2VzKGpvYk5hbWUsIDAsIEludGVnZXIuTUFYX1ZBTFVFIC0gMSk7CisgICAgICAgIGlmIChleGUgIT0gbnVsbCkgeworICAgICAgICAgICBmb3IgKEpvYkluc3RhbmNlIGppIDogZXhlKSB7CisgICAgICAgICAgICAgIGZvciAoSm9iRXhlY3V0aW9uIGplIDogam9iT3BlcmF0b3IuZ2V0Sm9iRXhlY3V0aW9ucyhqaSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNiLmFwcGVuZChpbmRleCsrKS5hcHBlbmQoIiAiKS5hcHBlbmQoam9iTmFtZSkuYXBwZW5kKCIgIikuYXBwZW5kKCgoVGFnZ2VkSm9iRXhlY3V0aW9uKSBqZSkuZ2V0VGFnTmFtZSgpKQotCQkJICAgICAgCS5hcHBlbmQoIiAiKS5hcHBlbmQoamUuZ2V0QmF0Y2hTdGF0dXMoKSkuYXBwZW5kKCIgIikuYXBwZW5kKGplLmdldEV4aXRTdGF0dXMoKSk7Ci0JICAgICAgICAgICAgICAgICAgICAgIGpvYnMuYWRkKHNiLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgICAgICAgICAgIC5hcHBlbmQoIiAiKS5hcHBlbmQoamUuZ2V0QmF0Y2hTdGF0dXMoKSkuYXBwZW5kKCIgIikuYXBwZW5kKGplLmdldEV4aXRTdGF0dXMoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGpvYnMuYWRkKHNiLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkgICAgICAgICAgICAgICAgICAgICAgam9icy5hZGQoIkV4Y2VwdGlvbiA6ICIgKyBzYi50b1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgam9icy5hZGQoIkV4Y2VwdGlvbiA6ICIgKyBzYi50b1N0cmluZygpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9Ci0JCX0KLQkgICAgIH0KLQkgICB9CisgICAgICAgIH0KKyAgICAgICAgIH0KKyAgICAgICB9CiAKLQkgICByZXR1cm4gam9iczsKLQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGV4KTsKLQl9CisgICAgICAgcmV0dXJuIGpvYnM7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihleCk7CisgICAgfQogICAgICB9CiAKICAgICBwdWJsaWMgTWFwPFN0cmluZywgU3RyaW5nPiB0b01hcChsb25nIGV4ZWN1dGlvbklkKSB7CiAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gbWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7CiAgICAgICAgdHJ5IHsKLQkgIEpvYk9wZXJhdG9yIGpvYk9wZXJhdG9yID0gQmF0Y2hSdW50aW1lLmdldEpvYk9wZXJhdG9yKCk7Ci0JICBKb2JFeGVjdXRpb24gamUgPSBqb2JPcGVyYXRvci5nZXRKb2JFeGVjdXRpb24oZXhlY3V0aW9uSWQpOworICAgICAgSm9iT3BlcmF0b3Igam9iT3BlcmF0b3IgPSBCYXRjaFJ1bnRpbWUuZ2V0Sm9iT3BlcmF0b3IoKTsKKyAgICAgIEpvYkV4ZWN1dGlvbiBqZSA9IGpvYk9wZXJhdG9yLmdldEpvYkV4ZWN1dGlvbihleGVjdXRpb25JZCk7CiAgICAgICAgICAgbWFwLnB1dCgiam9iTmFtZSIsICIiK2plLmdldEpvYk5hbWUoKSk7CiAgICAgICAgICAgbWFwLnB1dCgiYXBwTmFtZSIsICIiKygoVGFnZ2VkSm9iRXhlY3V0aW9uKSBqZSkuZ2V0VGFnTmFtZSgpKTsKIAotCSAgdHJ5IHsKKyAgICAgIHRyeSB7CiAgICAgICAgICAgICBtYXAucHV0KCJpbnN0YW5jZUNvdW50IiwgIiIram9iT3BlcmF0b3IuZ2V0Sm9iSW5zdGFuY2VDb3VudChqZS5nZXRKb2JOYW1lKCkpKTsKICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHt9CiAKQEAgLTEyOSwzOSArMTI5LDM5IEBACiAKICAgICAgICByZXR1cm4gbWFwOwogICAgIH0KLQkKKwogICAgIHB1YmxpYyBDb2xsZWN0aW9uPFN0cmluZz4gbGlzdEpvYkV4ZWN1dGlvbnMoYm9vbGVhbiB1c2VMb25nRm9ybWF0LCBsb25nLi4uIGV4ZWN1dGluSWRzKSB7Ci0JU2V0PFN0cmluZz4gam9icyA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKLQlyZXR1cm4gam9iczsKKyAgICBTZXQ8U3RyaW5nPiBqb2JzID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOworICAgIHJldHVybiBqb2JzOwogICAgIH0KIAogICAgIHB1YmxpYyBMaXN0PExvbmc+IGdldEFsbEV4ZWN1dGlvbklkcyhTdHJpbmcgam9iTmFtZSkgewotCUxpc3Q8TG9uZz4gbGlzdCA9IG5ldyBMaW5rZWRMaXN0PExvbmc+KCk7Ci0JdHJ5IHsKKyAgICBMaXN0PExvbmc+IGxpc3QgPSBuZXcgTGlua2VkTGlzdDxMb25nPigpOworICAgIHRyeSB7CiAgICAgICAgIGlmIChqb2JOYW1lICE9IG51bGwpCiAgICAgICAgICAgIGdldEFsbEV4ZWN1dGlvbklkcyhqb2JOYW1lLCBsaXN0KTsKLQllbHNlIHsKLQkgICBKb2JPcGVyYXRvciBqb2JPcGVyYXRvciA9IEJhdGNoUnVudGltZS5nZXRKb2JPcGVyYXRvcigpOwotCSAgIGZvciAoU3RyaW5nIGpuIDogam9iT3BlcmF0b3IuZ2V0Sm9iTmFtZXMoKSkKKyAgICBlbHNlIHsKKyAgICAgICBKb2JPcGVyYXRvciBqb2JPcGVyYXRvciA9IEJhdGNoUnVudGltZS5nZXRKb2JPcGVyYXRvcigpOworICAgICAgIGZvciAoU3RyaW5nIGpuIDogam9iT3BlcmF0b3IuZ2V0Sm9iTmFtZXMoKSkKICAgICAgICAgICAgICAgZ2V0QWxsRXhlY3V0aW9uSWRzKGpuLCBsaXN0KTsKLQl9CisgICAgfQogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKIAotCX0KLQlyZXR1cm4gbGlzdDsKKyAgICB9CisgICAgcmV0dXJuIGxpc3Q7CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGdldEFsbEV4ZWN1dGlvbklkcyhTdHJpbmcgam9iTmFtZSwgTGlzdDxMb25nPiBsaXN0KQotICAgIAl0aHJvd3MgRXhjZXB0aW9uIHsKLQlKb2JPcGVyYXRvciBqb2JPcGVyYXRvciA9IEJhdGNoUnVudGltZS5nZXRKb2JPcGVyYXRvcigpOwotCUxpc3Q8Sm9iSW5zdGFuY2U+IGV4ZSA9IGpvYk9wZXJhdG9yLmdldEpvYkluc3RhbmNlcyhqb2JOYW1lLCAwLCBJbnRlZ2VyLk1BWF9WQUxVRSAtIDEpOwotCWlmIChleGUgIT0gbnVsbCkgewotCSAgIGZvciAoSm9iSW5zdGFuY2UgamkgOiBleGUpIHsKLQkgICAgICBmb3IgKEpvYkV4ZWN1dGlvbiBqZSA6IGpvYk9wZXJhdG9yLmdldEpvYkV4ZWN1dGlvbnMoamkpKSB7CisgICAgICAgIHRocm93cyBFeGNlcHRpb24geworICAgIEpvYk9wZXJhdG9yIGpvYk9wZXJhdG9yID0gQmF0Y2hSdW50aW1lLmdldEpvYk9wZXJhdG9yKCk7CisgICAgTGlzdDxKb2JJbnN0YW5jZT4gZXhlID0gam9iT3BlcmF0b3IuZ2V0Sm9iSW5zdGFuY2VzKGpvYk5hbWUsIDAsIEludGVnZXIuTUFYX1ZBTFVFIC0gMSk7CisgICAgaWYgKGV4ZSAhPSBudWxsKSB7CisgICAgICAgZm9yIChKb2JJbnN0YW5jZSBqaSA6IGV4ZSkgeworICAgICAgICAgIGZvciAoSm9iRXhlY3V0aW9uIGplIDogam9iT3BlcmF0b3IuZ2V0Sm9iRXhlY3V0aW9ucyhqaSkpIHsKICAgICAgICAgICAgICAgICAgbGlzdC5hZGQoamUuZ2V0RXhlY3V0aW9uSWQoKSk7CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQotCX0KKyAgICB9CiAgICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvY210LWNodW5rLWpvYi9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvY210L2NodW5rL1NpbXBsZUlkR2VuZXJhdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9jbXQtY2h1bmstam9iL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9jbXQvY2h1bmsvU2ltcGxlSWRHZW5lcmF0b3IuamF2YQppbmRleCAwY2Y0ZWUyLi4xZGE2NDQ3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9jbXQtY2h1bmstam9iL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9jbXQvY2h1bmsvU2ltcGxlSWRHZW5lcmF0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9jbXQtY2h1bmstam9iL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9jbXQvY2h1bmsvU2ltcGxlSWRHZW5lcmF0b3IuamF2YQpAQCAtMjIsOSArMjIsOSBAQAogICovCiBwdWJsaWMgY2xhc3MgU2ltcGxlSWRHZW5lcmF0b3IKICAgICBpbXBsZW1lbnRzIElkR2VuZXJhdG9yIHsKLSAgICAKKwogICAgIHByaXZhdGUgQXRvbWljSW50ZWdlciBjb3VudGVyID0gbmV3IEF0b21pY0ludGVnZXIoMCk7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIG5leHRJZCgpIHsKICAgICAgICAgcmV0dXJuICIiICsgY291bnRlci5pbmNyZW1lbnRBbmRHZXQoKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9jbXQtY2h1bmstam9iL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9jbXQvY2h1bmsvU2ltcGxlSXRlbVByb2Nlc3Nvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvY210LWNodW5rLWpvYi9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvY210L2NodW5rL1NpbXBsZUl0ZW1Qcm9jZXNzb3IuamF2YQppbmRleCA0ZDU3ODlkLi5kOGNlMjczIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9jbXQtY2h1bmstam9iL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9jbXQvY2h1bmsvU2ltcGxlSXRlbVByb2Nlc3Nvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2NtdC1jaHVuay1qb2IvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL2NtdC9jaHVuay9TaW1wbGVJdGVtUHJvY2Vzc29yLmphdmEKQEAgLTIzLDEyICsyMywxMiBAQAogCiAvLyAgICBASW5qZWN0CiAvLyAgICBJZEdlbmVyYXRvciBpZEdlbjsKLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBTdHJpbmcgcHJvY2Vzc0l0ZW0oT2JqZWN0IG9iaikgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JU3RyaW5nIHQgPSAoU3RyaW5nKSBvYmo7CisgICAgU3RyaW5nIHQgPSAoU3RyaW5nKSBvYmo7CiAgICAgICAgIFN0cmluZ1tdIHJlY29yZCA9IHQuc3BsaXQoIiwgIik7Ci0gICAgICAgIAorCiAgICAgLy9FTVAtSUQsIE1PTlRILVlFQVIsIFNBTEFSWSwgVEFYJSwgTUVESUNBUkUlLCBPVEhFUgogICAgICAgICBpbnQgc2FsYXJ5ID0gSW50ZWdlci52YWx1ZU9mKHJlY29yZFsyXSk7CiAgICAgICAgIGRvdWJsZSB0YXggPSBEb3VibGUudmFsdWVPZihyZWNvcmRbM10pOwpAQCAtMzksNSArMzksNSBAQAogICAgICAgICBzYi5hcHBlbmQoIiwgIikuYXBwZW5kKHNhbGFyeSAtIChzYWxhcnkgKiB0YXggLyAxMDApIC0gKHNhbGFyeSAqIG1lZGlDYXJlIC8gMTAwKSk7CiAgICAgICAgIHJldHVybiAgc2IudG9TdHJpbmcoKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2NtdC1jaHVuay1qb2IvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL2NtdC9jaHVuay9TaW1wbGVJdGVtUmVhZGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9jbXQtY2h1bmstam9iL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9jbXQvY2h1bmsvU2ltcGxlSXRlbVJlYWRlci5qYXZhCmluZGV4IGNjMTdjMmYuLjAxNjIyZjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2NtdC1jaHVuay1qb2IvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL2NtdC9jaHVuay9TaW1wbGVJdGVtUmVhZGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvY210LWNodW5rLWpvYi9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvY210L2NodW5rL1NpbXBsZUl0ZW1SZWFkZXIuamF2YQpAQCAtMjEsNyArMjEsNyBAQAogICAgIGltcGxlbWVudHMgamFrYXJ0YS5iYXRjaC5hcGkuY2h1bmsuSXRlbVJlYWRlciB7CiAKICAgICBwcml2YXRlIGludCBpbmRleCA9IDA7Ci0gICAgCisKICAgICAvL0VNUC1JRCwgTU9OVEgtWUVBUiwgU0FMQVJZLCBUQVglLCBNRURJQ0FSRSUsIE9USEVSCiAgICAgcHJpdmF0ZSBTdHJpbmdbXSBpdGVtcyA9IG5ldyBTdHJpbmdbXSB7CiAgICAgICAgICIxMjAtMDEsIEpBTi0yMDEzLCA4MDAwLCAyNywgMywgMCIsCkBAIC0zMyw3ICszMyw3IEBACiAgICAgICAgICIxMjAtMDcsIEpBTi0yMDEzLCAxMTAwMCwgMzYsIDUsIDAiLAogICAgICAgICAiMTIwLTA4LCBKQU4tMjAxMywgMTE1MDAsIDM2LCA1LCAwIiwKICAgICB9OwotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgb3BlbihTZXJpYWxpemFibGUgZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgfQpAQCAtNTEsNSArNTEsNSBAQAogICAgIHB1YmxpYyBTZXJpYWxpemFibGUgY2hlY2twb2ludEluZm8oKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9jbXQtY2h1bmstam9iL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9jbXQvY2h1bmsvU2ltcGxlSXRlbVdyaXRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvY210LWNodW5rLWpvYi9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvY210L2NodW5rL1NpbXBsZUl0ZW1Xcml0ZXIuamF2YQppbmRleCA1MDhmOWE2Li5jMTYxYjI1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9jbXQtY2h1bmstam9iL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9jbXQvY2h1bmsvU2ltcGxlSXRlbVdyaXRlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL2NtdC1jaHVuay1qb2IvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL2NtdC9jaHVuay9TaW1wbGVJdGVtV3JpdGVyLmphdmEKQEAgLTE5LDcgKzE5LDcgQEAKIEBqYWthcnRhLmluamVjdC5OYW1lZCgiU2ltcGxlSXRlbVdyaXRlciIpCiBwdWJsaWMgY2xhc3MgU2ltcGxlSXRlbVdyaXRlcgogICAgIGltcGxlbWVudHMgamFrYXJ0YS5iYXRjaC5hcGkuY2h1bmsuSXRlbVdyaXRlciB7Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBvcGVuKFNlcmlhbGl6YWJsZSBlKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICB9CkBAIC0zMSw3ICszMSw3IEBACiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgd3JpdGVJdGVtcyhMaXN0IGxzdCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigiU2ltcGxlSXRlbVdyaXRlcjoiKTsKLQlMaXN0PFN0cmluZz4gbGlzdCA9IChMaXN0PFN0cmluZz4pIGxzdDsKKyAgICBMaXN0PFN0cmluZz4gbGlzdCA9IChMaXN0PFN0cmluZz4pIGxzdDsKICAgICAgICAgZm9yIChTdHJpbmcgcyA6IGxpc3QpIHsKICAgICAgICAgICAgIHNiLmFwcGVuZCgiICIpLmFwcGVuZChzKTsKICAgICAgICAgfQpAQCAtNDIsNSArNDIsNSBAQAogICAgIHB1YmxpYyBTZXJpYWxpemFibGUgY2hlY2twb2ludEluZm8oKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9wYXktcm9sbC1qb2Itd2l0aC1lamIvc3RhdGVsZXNzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9wYXktcm9sbC1qb2Itd2l0aC1lamIvc3RhdGVsZXNzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZjVmMmY0Ny4uNGFiZDI0MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvcGF5LXJvbGwtam9iLXdpdGgtZWpiL3N0YXRlbGVzcy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3BheS1yb2xsLWpvYi13aXRoLWVqYi9zdGF0ZWxlc3MvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTMgKzE1LDEzIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJkZXZ0ZXN0LWludHJvLXN0YXRlbGVzcyIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImJlYW5zLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYmVhbnMueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iYmF0Y2gueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9iYXRjaC54bWwiLz4KQEAgLTI5LDExICsyOSwxMSBAQAogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImJhdGNoLmpvYnMuZGlyIiB2YWx1ZT0iZGVzY3JpcHRvci9iYXRjaC1qb2JzIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJiYXRjaF9kZXJieS5zcWwiIHZhbHVlPSIuLi8uLi9iYXRjaF9kZXJieS5zcWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3BheS1yb2xsLWpvYi13aXRoLWVqYi9zdGF0ZWxlc3MvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvcGF5LXJvbGwtam9iLXdpdGgtZWpiL3N0YXRlbGVzcy9idWlsZC54bWwKaW5kZXggZDEwMmZmNC4uMDlmYzQ4YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvcGF5LXJvbGwtam9iLXdpdGgtZWpiL3N0YXRlbGVzcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvcGF5LXJvbGwtam9iLXdpdGgtZWpiL3N0YXRlbGVzcy9idWlsZC54bWwKQEAgLTM4LDcgKzM4LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTUxLDE5ICs1MSwxOSBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKi5jbGFzcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0NsaWVudC5jbGFzcywqKi9TbGVzcy5jbGFzcywqKi9TbGVzczMwLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJjb3B5LWJhdGNoLXNxbCIgZGVwZW5kcz0iYnVpbGQiPgotICAgIAk8ZWNobyBtZXNzYWdlPSIqKioqKiBDb3B5ICR7YmF0Y2hfZGVyYnkuc3FsfSB0byBUYXJnZXQgZGlyOiAke2Vudi5TMUFTX0hPTUV9L2xpYiIvPgotICAgIAk8Y29weSBmaWxlPSIke2JhdGNoX2RlcmJ5LnNxbH0iIHRvZGlyPSIke2Vudi5TMUFTX0hPTUV9L2xpYiIvPgogICAgIDwvdGFyZ2V0PgogCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDx0YXJnZXQgbmFtZT0iY29weS1iYXRjaC1zcWwiIGRlcGVuZHM9ImJ1aWxkIj4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iKioqKiogQ29weSAke2JhdGNoX2RlcmJ5LnNxbH0gdG8gVGFyZ2V0IGRpcjogJHtlbnYuUzFBU19IT01FfS9saWIiLz4KKyAgICAgICAgPGNvcHkgZmlsZT0iJHtiYXRjaF9kZXJieS5zcWx9IiB0b2Rpcj0iJHtlbnYuUzFBU19IT01FfS9saWIiLz4KKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTcxLDEwICs3MSwxMCBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9wYXktcm9sbC1qb2Itd2l0aC1lamIvc3RhdGVsZXNzL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3BheS1yb2xsLWpvYi13aXRoLWVqYi9zdGF0ZWxlc3MvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDg5MGJkZWIuLjVhNzk1NzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3BheS1yb2xsLWpvYi13aXRoLWVqYi9zdGF0ZWxlc3MvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3BheS1yb2xsLWpvYi13aXRoLWVqYi9zdGF0ZWxlc3MvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNiw3ICsyNiw3IEBACiBARUpCKG5hbWU9ImVqYi9HRyIsIGJlYW5JbnRlcmZhY2U9U2xlc3MuY2xhc3MpCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewpAQCAtMzUsMjIgKzM1LDIyIEBACiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJiYXRjaC1wYXktcm9vbC1qb2ItZWpiLXN0YXRlbGVzcyIpOwotICAgIH0gIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBARUpCKG5hbWU9ImVqYi9rayIpIFNsZXNzIHNsZXNzOwogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgKG5ldyBJbml0aWFsQ29udGV4dCgpKS5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL0dHIik7Ci0JICAgIGxvbmcgcmVzdWx0ID0gc2xlc3Muc3VibWl0Sm9iKCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKiBKb2JJRDogIiArIHJlc3VsdCArICIgKioqKioqKioqKioqKioqKioqIik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIik7CisgICAgICAgIGxvbmcgcmVzdWx0ID0gc2xlc3Muc3VibWl0Sm9iKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKiBKb2JJRDogIiArIHJlc3VsdCArICIgKioqKioqKioqKioqKioqKioqIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIik7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiYmF0Y2ggcGF5cm9sbCIsIHN0YXQuUEFTUyk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiYmF0Y2ggcGF5cm9sbCIsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9wYXktcm9sbC1qb2Itd2l0aC1lamIvc3RhdGVsZXNzL2Rlc2NyaXB0b3IvYmF0Y2gtam9icy9QYXlSb2xsSm9iLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3BheS1yb2xsLWpvYi13aXRoLWVqYi9zdGF0ZWxlc3MvZGVzY3JpcHRvci9iYXRjaC1qb2JzL1BheVJvbGxKb2IueG1sCmluZGV4IDYyNWY1NGIuLmNjMDMxMGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3BheS1yb2xsLWpvYi13aXRoLWVqYi9zdGF0ZWxlc3MvZGVzY3JpcHRvci9iYXRjaC1qb2JzL1BheVJvbGxKb2IueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3BheS1yb2xsLWpvYi13aXRoLWVqYi9zdGF0ZWxlc3MvZGVzY3JpcHRvci9iYXRjaC1qb2JzL1BheVJvbGxKb2IueG1sCkBAIC0yMCwxNiArMjAsMTYgQEAKIDxqb2IgaWQ9ImpvYjEiIHhtbG5zPSJodHRwOi8vYmF0Y2guanNyMzUyL2pzbCI+CiAgICAgPHN0ZXAgaWQ9InByZXBhcmUiIG5leHQ9InByb2Nlc3MiPgogICAgICAgICA8Y2h1bmsgaXRlbS1jb3VudD0iMSI+Ci0gICAgICAgICAgICA8cmVhZGVyIHJlZj0iU2ltcGxlSXRlbVJlYWRlciI+PC9yZWFkZXI+IAorICAgICAgICAgICAgPHJlYWRlciByZWY9IlNpbXBsZUl0ZW1SZWFkZXIiPjwvcmVhZGVyPgogICAgICAgICAgICAgPHByb2Nlc3NvciByZWY9IlNpbXBsZUl0ZW1Qcm9jZXNzb3IiPjwvcHJvY2Vzc29yPgotICAgICAgICAgICAgPHdyaXRlciByZWY9IlNpbXBsZUl0ZW1Xcml0ZXIiPjwvd3JpdGVyPiAKKyAgICAgICAgICAgIDx3cml0ZXIgcmVmPSJTaW1wbGVJdGVtV3JpdGVyIj48L3dyaXRlcj4KICAgICAgICAgPC9jaHVuaz4KICAgICA8L3N0ZXA+CiAgICAgPHN0ZXAgaWQ9InByb2Nlc3MiPgogICAgICAgICA8Y2h1bmsgaXRlbS1jb3VudD0iMyI+Ci0gICAgICAgICAgICA8cmVhZGVyIHJlZj0iU2ltcGxlSXRlbVJlYWRlciI+PC9yZWFkZXI+IAorICAgICAgICAgICAgPHJlYWRlciByZWY9IlNpbXBsZUl0ZW1SZWFkZXIiPjwvcmVhZGVyPgogICAgICAgICAgICAgPHByb2Nlc3NvciByZWY9IlNpbXBsZUl0ZW1Qcm9jZXNzb3IiPjwvcHJvY2Vzc29yPgotICAgICAgICAgICAgPHdyaXRlciByZWY9IlNpbXBsZUl0ZW1Xcml0ZXIiPjwvd3JpdGVyPiAKKyAgICAgICAgICAgIDx3cml0ZXIgcmVmPSJTaW1wbGVJdGVtV3JpdGVyIj48L3dyaXRlcj4KICAgICAgICAgPC9jaHVuaz4KICAgICA8L3N0ZXA+CiA8L2pvYj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3BheS1yb2xsLWpvYi13aXRoLWVqYi9zdGF0ZWxlc3MvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL3NpbXBsZS9Kb2JTdWJtaXR0ZXJTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9wYXktcm9sbC1qb2Itd2l0aC1lamIvc3RhdGVsZXNzL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9zaW1wbGUvSm9iU3VibWl0dGVyU2VydmxldC5qYXZhCmluZGV4IDdhMTY3ZTYuLjZiNTM3NWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3BheS1yb2xsLWpvYi13aXRoLWVqYi9zdGF0ZWxlc3MvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL3NpbXBsZS9Kb2JTdWJtaXR0ZXJTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvcGF5LXJvbGwtam9iLXdpdGgtZWpiL3N0YXRlbGVzcy9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvc2ltcGxlL0pvYlN1Ym1pdHRlclNlcnZsZXQuamF2YQpAQCAtMzgsMTAgKzM4LDEwIEBACiAgKiBAYXV0aG9yIG1ha2FubmFuCiAgKi8KIHB1YmxpYyBjbGFzcyBKb2JTdWJtaXR0ZXJTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewotICAgIAorCiAvLyAgICBAUmVzb3VyY2UobmFtZT0iY29uY3VycmVudC9iYXRjaC1leGVjdXRvci1zZXJ2aWNlIikKIC8vICAgIE1hbmFnZWRFeGVjdXRvclNlcnZpY2UgbWFuYWdlZEV4ZWN1dG9yU2VydmljZTsKLSAgICAKKwogICAgIC8qKgogICAgICAqIFByb2Nlc3NlcyByZXF1ZXN0cyBmb3IgYm90aCBIVFRQCiAgICAgICogPGNvZGU+R0VUPC9jb2RlPiBhbmQKQEAgLTcyLDcgKzcyLDcgQEAKICAgICAgICAgICAgICAgICBzdWJtaXRKb2JGcm9tWE1MKG91dCk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJsaXN0Sm9icyIpICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPHRyPjx0ZD5saXN0Sm9iczwvdGQ+PHRkPk5vdCBpbXBsZW1lbnRlZCB5ZXQ8L3RkPjwvdHI+Iik7Ci0gICAgICAgICAgICB9IAorICAgICAgICAgICAgfQogCiAKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L3RhYmxlPiIpOwpAQCAtODgsNyArODgsNyBAQAogCiAgICAgcHJpdmF0ZSB2b2lkIHN1Ym1pdEpvYkZyb21YTUwoUHJpbnRXcml0ZXIgcHcpCiAgICAgICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgSm9iT3BlcmF0b3Igam9iT3BlcmF0b3IgPSBCYXRjaFJ1bnRpbWUuZ2V0Sm9iT3BlcmF0b3IoKTsKICAgICAgICAgcHcucHJpbnRsbigiPHRyPjx0ZD5Kb2JPcGVyYXRvciBjbGFzcyA8L3RkPjx0ZD4iICsgam9iT3BlcmF0b3IuZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKyAiIDwvdGQ+PC90cj4iKTsKIApAQCAtOTYsMTEgKzk2LDExIEBACiAgICAgICAgIGZvciAoaW50IGk9MDsgaTw5OyBpKyspCiAgICAgICAgICAgICBwcm9wcy5wdXQoaSwgaSk7CiAgICAgICAgIExvbmcgaWQgPSBqb2JPcGVyYXRvci5zdGFydCgiUGF5Um9sbEpvYiIsIHByb3BzKTsKLSAgICAgICAgCisKICAgICAgICAgcHcucHJpbnRsbihqb2JJbmZvKGpvYk9wZXJhdG9yLCBpZCwgcHcpKTsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICAvL2dldEpvYk5hbWVzKCkKICAgICBwcml2YXRlIFN0cmluZyBqb2JOYW1lcyhKb2JPcGVyYXRvciBqb2JPcGVyYXRvcikgewogICAgICAgICBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoIkpvYk9wZXJhdG9yLmpvYk5hbWVzOiAiKTsKQEAgLTEwOCw3ICsxMDgsNyBAQAogICAgICAgICAgICAgc2IuYXBwZW5kKCIgIikuYXBwZW5kKGopOwogICAgICAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIFN0cmluZyBqb2JJbmZvKEpvYk9wZXJhdG9yIGpvYk9wZXJhdG9yLCBsb25nIGlkLCBQcmludFdyaXRlciBwdykgewogICAgICAgICBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoIkpvYk9wZXJhdG9yLmpvYk5hbWVzOiAiKTsKICAgICAgICAgc2IuYXBwZW5kKCI8dHI+PHRkPklkPC90ZD48dGQiICsgaWQgKyAiPC90ZD48L3RyPiIpOwpAQCAtMTE3LDcgKzExNyw3IEBACiAgICAgICAgIHNiLmFwcGVuZChhc1N0cmluZyhqb2JPcGVyYXRvci5nZXRKb2JFeGVjdXRpb24oaWQpKSk7CiAgICAgICAgIHJldHVybiBzYi50b1N0cmluZygpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgU3RyaW5nIGFzU3RyaW5nKEpvYkV4ZWN1dGlvbiBqZSkgewogICAgICAgICBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoIkpvYkV4ZWN1dGlvbjogIik7CiAgICAgICAgIHNiLmFwcGVuZCgiPHRyPjx0ZD49PiAgICBjcmVhdGVUaW1lPC90ZD48dGQ+IikuYXBwZW5kKGplLmdldENyZWF0ZVRpbWUoKSkuYXBwZW5kKCI8L3RkPjwvdHI+Iik7CkBAIC0xMjgsMTAgKzEyOCwxMCBAQAogICAgICAgICBzYi5hcHBlbmQoIjx0cj48dGQ+PT4gICAgam9iUGFyYW1ldGVyczogPC90ZD48dGQ+IikuYXBwZW5kKGplLmdldEpvYlBhcmFtZXRlcnMoKSkuYXBwZW5kKCI8L3RkPjwvdHI+Iik7CiAgICAgICAgIHNiLmFwcGVuZCgiPHRyPjx0ZD49PiAgICBsYXN0VXBkYXRlZFRpbWU6IDwvdGQ+PHRkPiIpLmFwcGVuZChqZS5nZXRMYXN0VXBkYXRlZFRpbWUoKSkuYXBwZW5kKCI8L3RkPjwvdHI+Iik7CiAgICAgICAgIHNiLmFwcGVuZCgiPHRyPjx0ZD49PiAgICBzdGF0dXM6IDwvdGQ+PHRkPiIpLmFwcGVuZChqZS5nZXRFeGl0U3RhdHVzKCkpLmFwcGVuZCgiPC90ZD48L3RyPiIpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICAgICB9Ci0gICAgCisKICAgICAvLyA8ZWRpdG9yLWZvbGQgZGVmYXVsdHN0YXRlPSJjb2xsYXBzZWQiIGRlc2M9Ikh0dHBTZXJ2bGV0IG1ldGhvZHMuIENsaWNrIG9uIHRoZSArIHNpZ24gb24gdGhlIGxlZnQgdG8gZWRpdCB0aGUgY29kZS4iPgogICAgIC8qKgogICAgICAqIEhhbmRsZXMgdGhlIEhUVFAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3BheS1yb2xsLWpvYi13aXRoLWVqYi9zdGF0ZWxlc3MvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL3NpbXBsZS9TaW1wbGVJdGVtUHJvY2Vzc29yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9wYXktcm9sbC1qb2Itd2l0aC1lamIvc3RhdGVsZXNzL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9zaW1wbGUvU2ltcGxlSXRlbVByb2Nlc3Nvci5qYXZhCmluZGV4IDI0OGRmOGYuLmJjNTljMTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3BheS1yb2xsLWpvYi13aXRoLWVqYi9zdGF0ZWxlc3MvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL3NpbXBsZS9TaW1wbGVJdGVtUHJvY2Vzc29yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvcGF5LXJvbGwtam9iLXdpdGgtZWpiL3N0YXRlbGVzcy9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvc2ltcGxlL1NpbXBsZUl0ZW1Qcm9jZXNzb3IuamF2YQpAQCAtMjMsMTEgKzIzLDExIEBACiAKIC8vICAgIEBJbmplY3QKIC8vICAgIElkR2VuZXJhdG9yIGlkR2VuOwotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIFN0cmluZyBwcm9jZXNzSXRlbShTdHJpbmcgdCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFN0cmluZ1tdIHJlY29yZCA9IHQuc3BsaXQoIiwgIik7Ci0gICAgICAgIAorCiAgICAgLy9FTVAtSUQsIE1PTlRILVlFQVIsIFNBTEFSWSwgVEFYJSwgTUVESUNBUkUlLCBPVEhFUgogICAgICAgICBpbnQgc2FsYXJ5ID0gSW50ZWdlci52YWx1ZU9mKHJlY29yZFsyXSk7CiAgICAgICAgIGRvdWJsZSB0YXggPSBEb3VibGUudmFsdWVPZihyZWNvcmRbM10pOwpAQCAtMzgsNSArMzgsNSBAQAogICAgICAgICBzYi5hcHBlbmQoIiwgIikuYXBwZW5kKHNhbGFyeSAtIChzYWxhcnkgKiB0YXggLyAxMDApIC0gKHNhbGFyeSAqIG1lZGlDYXJlIC8gMTAwKSk7CiAgICAgICAgIHJldHVybiAgc2IudG9TdHJpbmcoKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3BheS1yb2xsLWpvYi13aXRoLWVqYi9zdGF0ZWxlc3MvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL3NpbXBsZS9TaW1wbGVJdGVtUmVhZGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9wYXktcm9sbC1qb2Itd2l0aC1lamIvc3RhdGVsZXNzL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9zaW1wbGUvU2ltcGxlSXRlbVJlYWRlci5qYXZhCmluZGV4IGY0MmI1MDQuLjkxMThjYjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3BheS1yb2xsLWpvYi13aXRoLWVqYi9zdGF0ZWxlc3MvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL3NpbXBsZS9TaW1wbGVJdGVtUmVhZGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvcGF5LXJvbGwtam9iLXdpdGgtZWpiL3N0YXRlbGVzcy9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvc2ltcGxlL1NpbXBsZUl0ZW1SZWFkZXIuamF2YQpAQCAtMjEsNyArMjEsNyBAQAogICAgIGV4dGVuZHMgamFrYXJ0YS5iYXRjaC5hcGkuQWJzdHJhY3RJdGVtUmVhZGVyPFN0cmluZz4gewogCiAgICAgcHJpdmF0ZSBpbnQgaW5kZXggPSAwOwotICAgIAorCiAgICAgLy9FTVAtSUQsIE1PTlRILVlFQVIsIFNBTEFSWSwgVEFYJSwgTUVESUNBUkUlLCBPVEhFUgogICAgIHByaXZhdGUgU3RyaW5nW10gaXRlbXMgPSBuZXcgU3RyaW5nW10gewogICAgICAgICAiMTIwLTAxLCBKQU4tMjAxMywgODAwMCwgMjcsIDMsIDAiLApAQCAtMzMsNyArMzMsNyBAQAogICAgICAgICAiMTIwLTA3LCBKQU4tMjAxMywgMTEwMDAsIDM2LCA1LCAwIiwKICAgICAgICAgIjEyMC0wOCwgSkFOLTIwMTMsIDExNTAwLCAzNiwgNSwgMCIsCiAgICAgfTsKLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIG9wZW4oRXh0ZXJuYWxpemFibGUgZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgfQpAQCAtNTEsNSArNTEsNSBAQAogICAgIHB1YmxpYyBFeHRlcm5hbGl6YWJsZSBjaGVja3BvaW50SW5mbygpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3BheS1yb2xsLWpvYi13aXRoLWVqYi9zdGF0ZWxlc3MvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL3NpbXBsZS9TaW1wbGVJdGVtV3JpdGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9wYXktcm9sbC1qb2Itd2l0aC1lamIvc3RhdGVsZXNzL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9zaW1wbGUvU2ltcGxlSXRlbVdyaXRlci5qYXZhCmluZGV4IDEyMmM4ZTAuLmFhZDRmOWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3BheS1yb2xsLWpvYi13aXRoLWVqYi9zdGF0ZWxlc3MvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL3NpbXBsZS9TaW1wbGVJdGVtV3JpdGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvcGF5LXJvbGwtam9iLXdpdGgtZWpiL3N0YXRlbGVzcy9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvc2ltcGxlL1NpbXBsZUl0ZW1Xcml0ZXIuamF2YQpAQCAtMTksNyArMTksNyBAQAogQGpha2FydGEuaW5qZWN0Lk5hbWVkKCJTaW1wbGVJdGVtV3JpdGVyIikKIHB1YmxpYyBjbGFzcyBTaW1wbGVJdGVtV3JpdGVyCiAgICAgZXh0ZW5kcyBqYWthcnRhLmJhdGNoLmFwaS5BYnN0cmFjdEl0ZW1Xcml0ZXI8U3RyaW5nPiB7Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBvcGVuKEV4dGVybmFsaXphYmxlIGUpIHRocm93cyBFeGNlcHRpb24gewogICAgIH0KQEAgLTQxLDUgKzQxLDUgQEAKICAgICBwdWJsaWMgRXh0ZXJuYWxpemFibGUgY2hlY2twb2ludEluZm8oKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9wYXktcm9sbC1qb2Itd2l0aC1lamIvc3RhdGVsZXNzL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9zaW1wbGUvU2xlc3NCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9wYXktcm9sbC1qb2Itd2l0aC1lamIvc3RhdGVsZXNzL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9zaW1wbGUvU2xlc3NCZWFuLmphdmEKaW5kZXggNTdkMDgzMC4uMDM1NTJhNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvcGF5LXJvbGwtam9iLXdpdGgtZWpiL3N0YXRlbGVzcy9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvc2ltcGxlL1NsZXNzQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3BheS1yb2xsLWpvYi13aXRoLWVqYi9zdGF0ZWxlc3MvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL3NpbXBsZS9TbGVzc0JlYW4uamF2YQpAQCAtMzIsMjEgKzMyLDIxIEBACiAgICAgfQogCiAgICAgcHVibGljIGxvbmcgc3VibWl0Sm9iKCkgewotCXRyeSB7Ci0JICBKb2JPcGVyYXRvciBqb2JPcGVyYXRvciA9IEJhdGNoUnVudGltZS5nZXRKb2JPcGVyYXRvcigpOworICAgIHRyeSB7CisgICAgICBKb2JPcGVyYXRvciBqb2JPcGVyYXRvciA9IEJhdGNoUnVudGltZS5nZXRKb2JPcGVyYXRvcigpOwogCi0JICBQcm9wZXJ0aWVzIHByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKLQkgIGZvciAoaW50IGk9MDsgaTw5OyBpKyspCi0JCXByb3BzLnB1dChpLCBpKTsKLQkgIHJldHVybiAgam9iT3BlcmF0b3Iuc3RhcnQoIlBheVJvbGxKb2IiLCBwcm9wcyk7CisgICAgICBQcm9wZXJ0aWVzIHByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKKyAgICAgIGZvciAoaW50IGk9MDsgaTw5OyBpKyspCisgICAgICAgIHByb3BzLnB1dChpLCBpKTsKKyAgICAgIHJldHVybiAgam9iT3BlcmF0b3Iuc3RhcnQoIlBheVJvbGxKb2IiLCBwcm9wcyk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCSAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZXgpOwotCX0KKyAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGV4KTsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gd2FzRWpiQ3JlYXRlQ2FsbGVkKCkgewotCXJldHVybiBlamJDcmVhdGVDYWxsZWQ7CisgICAgcmV0dXJuIGVqYkNyZWF0ZUNhbGxlZDsKICAgICB9CiAKLQkJCQkJCQkJCQkJCQkJICAgICAgICAgICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3J1bl90ZXN0LnNoIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvcnVuX3Rlc3Quc2gKaW5kZXggODI1ZjQxNy4uZWFlNWFjYyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvcnVuX3Rlc3Quc2gKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvcnVuX3Rlc3Quc2gKQEAgLTUwLDExICs1MCwxMSBAQAogfQogCiBnZXRfdGVzdF90YXJnZXQoKXsKLQljYXNlICR7MX0gaW4KLQkJYmF0Y2hfYWxsICkKLQkJCVRBUkdFVD1hbGwKLQkJCWV4cG9ydCBUQVJHRVQ7OwotCWVzYWMKKyAgICBjYXNlICR7MX0gaW4KKyAgICAgICAgYmF0Y2hfYWxsICkKKyAgICAgICAgICAgIFRBUkdFVD1hbGwKKyAgICAgICAgICAgIGV4cG9ydCBUQVJHRVQ7OworICAgIGVzYWMKIH0KIAogT1BUPSR7MX0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS1iYXRjaGxldC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvc2ltcGxlLWJhdGNobGV0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYmYwMWI2NC4uYTgwNzkzYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvc2ltcGxlLWJhdGNobGV0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvc2ltcGxlLWJhdGNobGV0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEzICsxNSwxMyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZGV2dGVzdC1pbnRyby1zaW1wbGUtYmF0Y2hsZXQiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJiZWFucy54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2JlYW5zLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImJhdGNoLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYmF0Y2gueG1sIi8+CkBAIC0yOSwxMSArMjksMTEgQEAKIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJiYXRjaC5qb2JzLmRpciIgdmFsdWU9ImRlc2NyaXB0b3IvYmF0Y2gtam9icyIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0iYmF0Y2hfZGVyYnkuc3FsIiB2YWx1ZT0iLi4vLi4vYmF0Y2hfZGVyYnkuc3FsIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9zaW1wbGUtYmF0Y2hsZXQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvc2ltcGxlLWJhdGNobGV0L2J1aWxkLnhtbAppbmRleCBhZDUzMzIwLi42MWQzNDhlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9zaW1wbGUtYmF0Y2hsZXQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS1iYXRjaGxldC9idWlsZC54bWwKQEAgLTM4LDcgKzM4LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTUxLDE5ICs1MSwxOSBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKi5jbGFzcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0NsaWVudC5jbGFzcywqKi9TbGVzcy5jbGFzcywqKi9TbGVzczMwLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJjb3B5LWJhdGNoLXNxbCIgZGVwZW5kcz0iYnVpbGQiPgotICAgIAk8ZWNobyBtZXNzYWdlPSIqKioqKiBDb3B5ICR7YmF0Y2hfZGVyYnkuc3FsfSB0byBUYXJnZXQgZGlyOiAke2Vudi5TMUFTX0hPTUV9L2xpYiIvPgotICAgIAk8Y29weSBmaWxlPSIke2JhdGNoX2RlcmJ5LnNxbH0iIHRvZGlyPSIke2Vudi5TMUFTX0hPTUV9L2xpYiIvPgogICAgIDwvdGFyZ2V0PgogCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDx0YXJnZXQgbmFtZT0iY29weS1iYXRjaC1zcWwiIGRlcGVuZHM9ImJ1aWxkIj4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iKioqKiogQ29weSAke2JhdGNoX2RlcmJ5LnNxbH0gdG8gVGFyZ2V0IGRpcjogJHtlbnYuUzFBU19IT01FfS9saWIiLz4KKyAgICAgICAgPGNvcHkgZmlsZT0iJHtiYXRjaF9kZXJieS5zcWx9IiB0b2Rpcj0iJHtlbnYuUzFBU19IT01FfS9saWIiLz4KKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTcxLDEwICs3MSwxMCBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9zaW1wbGUtYmF0Y2hsZXQvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvc2ltcGxlLWJhdGNobGV0L2NsaWVudC9DbGllbnQuamF2YQppbmRleCBjMzk5MGNkLi40Njg4MDE3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9zaW1wbGUtYmF0Y2hsZXQvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS1iYXRjaGxldC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI2LDcgKzI2LDcgQEAKIEBFSkIobmFtZT0iZWpiL0dHIiwgYmVhbkludGVyZmFjZT1TbGVzcy5jbGFzcykKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CkBAIC0zNSwzMyArMzUsMzMgQEAKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImJhdGNoLXBheS1yb29sLWpvYi1lamItc3RhdGVsZXNzIik7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIEBFSkIobmFtZT0iZWpiL2trIikgU2xlc3Mgc2xlc3M7CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAobmV3IEluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvR0ciKTsKLQkgICAgbG9uZyBleGVjdXRpb25JZCA9IHNsZXNzLnN1Ym1pdEpvYigpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKiogSm9iSUQ6ICIgKyBleGVjdXRpb25JZCArICIgKioqKioqKioqKioqKioqKioqIik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIik7Ci0JICAgIFN0cmluZyBqb2JCYXRjaFN0YXR1cyA9ICIiOwotCSAgICBmb3IgKGludCBzZWM9MTA7IHNlYz4wOyBzZWMtLSkgewotCSAgICAgICAgdHJ5IHsKLQkJICAgIGpvYkJhdGNoU3RhdHVzID0gc2xlc3MuZ2V0Sm9iRXhpdFN0YXR1cyhleGVjdXRpb25JZCk7Ci0JCSAgICBpZiAoISAiQ09NUExFVEVEIi5lcXVhbHMoam9iQmF0Y2hTdGF0dXMpKSB7Ci0JCSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXaWxsIHNsZWVwIGZvciAiICsgc2VjICsgIiBtb3JlIHNlY29uZHMuLi46ICIgKyBqb2JCYXRjaFN0YXR1cyk7Ci0JCSAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCgxMDAwKTsKLQkJICAgIH0KLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCX0KLQkgICAgfQorICAgICAgICBsb25nIGV4ZWN1dGlvbklkID0gc2xlc3Muc3VibWl0Sm9iKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKiBKb2JJRDogIiArIGV4ZWN1dGlvbklkICsgIiAqKioqKioqKioqKioqKioqKioiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiKTsKKyAgICAgICAgU3RyaW5nIGpvYkJhdGNoU3RhdHVzID0gIiI7CisgICAgICAgIGZvciAoaW50IHNlYz0xMDsgc2VjPjA7IHNlYy0tKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgam9iQmF0Y2hTdGF0dXMgPSBzbGVzcy5nZXRKb2JFeGl0U3RhdHVzKGV4ZWN1dGlvbklkKTsKKyAgICAgICAgICAgIGlmICghICJDT01QTEVURUQiLmVxdWFscyhqb2JCYXRjaFN0YXR1cykpIHsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldpbGwgc2xlZXAgZm9yICIgKyBzZWMgKyAiIG1vcmUgc2Vjb25kcy4uLjogIiArIGpvYkJhdGNoU3RhdHVzKTsKKyAgICAgICAgICAgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDEwMDApOworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgfQorICAgICAgICB9CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygic2ltcGxlLWJhdGNobGV0IHBheXJvbGwiLCAoIkNPTVBMRVRFRCIuZXF1YWxzKGpvYkJhdGNoU3RhdHVzKSA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCkpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoInNpbXBsZS1iYXRjaGxldCBwYXlyb2xsIiwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS1iYXRjaGxldC9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvc2ltcGxlL2JhdGNobGV0L0lkR2VuZXJhdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9zaW1wbGUtYmF0Y2hsZXQvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL3NpbXBsZS9iYXRjaGxldC9JZEdlbmVyYXRvci5qYXZhCmluZGV4IDE1YjczMDQuLmJkMGNjYjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS1iYXRjaGxldC9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvc2ltcGxlL2JhdGNobGV0L0lkR2VuZXJhdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvc2ltcGxlLWJhdGNobGV0L2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9zaW1wbGUvYmF0Y2hsZXQvSWRHZW5lcmF0b3IuamF2YQpAQCAtMjEsNSArMjEsNSBAQAogcHVibGljIGludGVyZmFjZSBJZEdlbmVyYXRvciB7CiAKICAgICBwdWJsaWMgU3RyaW5nIG5leHRJZCgpOwotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9zaW1wbGUtYmF0Y2hsZXQvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL3NpbXBsZS9iYXRjaGxldC9TaW1wbGVCYXRjaGxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvc2ltcGxlLWJhdGNobGV0L2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9zaW1wbGUvYmF0Y2hsZXQvU2ltcGxlQmF0Y2hsZXQuamF2YQppbmRleCAyMTUwZDM2Li42ZmFkNzk1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9zaW1wbGUtYmF0Y2hsZXQvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL3NpbXBsZS9iYXRjaGxldC9TaW1wbGVCYXRjaGxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS1iYXRjaGxldC9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvc2ltcGxlL2JhdGNobGV0L1NpbXBsZUJhdGNobGV0LmphdmEKQEAgLTI1LDkgKzI1LDkgQEAKICAgICBwdWJsaWMgU3RyaW5nIHByb2Nlc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuICAiR1JFQVRfU1VDQ0VTUyI7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgIHN0b3AoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS1iYXRjaGxldC9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvc2ltcGxlL2JhdGNobGV0L1NpbXBsZUlkR2VuZXJhdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9zaW1wbGUtYmF0Y2hsZXQvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL3NpbXBsZS9iYXRjaGxldC9TaW1wbGVJZEdlbmVyYXRvci5qYXZhCmluZGV4IDU4YWNmZTYuLmJhNmE5OTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS1iYXRjaGxldC9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvc2ltcGxlL2JhdGNobGV0L1NpbXBsZUlkR2VuZXJhdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvc2ltcGxlLWJhdGNobGV0L2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9zaW1wbGUvYmF0Y2hsZXQvU2ltcGxlSWRHZW5lcmF0b3IuamF2YQpAQCAtMjIsOSArMjIsOSBAQAogICovCiBwdWJsaWMgY2xhc3MgU2ltcGxlSWRHZW5lcmF0b3IKICAgICBpbXBsZW1lbnRzIElkR2VuZXJhdG9yIHsKLSAgICAKKwogICAgIHByaXZhdGUgQXRvbWljSW50ZWdlciBjb3VudGVyID0gbmV3IEF0b21pY0ludGVnZXIoMCk7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIG5leHRJZCgpIHsKICAgICAgICAgcmV0dXJuICIiICsgY291bnRlci5pbmNyZW1lbnRBbmRHZXQoKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9zaW1wbGUtYmF0Y2hsZXQvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL3NpbXBsZS9iYXRjaGxldC9TbGVzc0JlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS1iYXRjaGxldC9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvc2ltcGxlL2JhdGNobGV0L1NsZXNzQmVhbi5qYXZhCmluZGV4IGY3ODYzM2MuLmU4ZWVjZjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS1iYXRjaGxldC9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvc2ltcGxlL2JhdGNobGV0L1NsZXNzQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS1iYXRjaGxldC9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvc2ltcGxlL2JhdGNobGV0L1NsZXNzQmVhbi5qYXZhCkBAIC0zMywzMSArMzMsMzEgQEAKICAgICB9CiAKICAgICBwdWJsaWMgbG9uZyBzdWJtaXRKb2IoKSB7Ci0JdHJ5IHsKLQkgIEpvYk9wZXJhdG9yIGpvYk9wZXJhdG9yID0gQmF0Y2hSdW50aW1lLmdldEpvYk9wZXJhdG9yKCk7CisgICAgdHJ5IHsKKyAgICAgIEpvYk9wZXJhdG9yIGpvYk9wZXJhdG9yID0gQmF0Y2hSdW50aW1lLmdldEpvYk9wZXJhdG9yKCk7CiAKLQkgIFByb3BlcnRpZXMgcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOwotCSAgZm9yIChpbnQgaT0wOyBpPDk7IGkrKykKLQkJcHJvcHMucHV0KGksIGkpOwotCSAgcmV0dXJuICBqb2JPcGVyYXRvci5zdGFydCgic2ltcGxlQmF0Y2hsZXRKb2IiLCBwcm9wcyk7CisgICAgICBQcm9wZXJ0aWVzIHByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKKyAgICAgIGZvciAoaW50IGk9MDsgaTw5OyBpKyspCisgICAgICAgIHByb3BzLnB1dChpLCBpKTsKKyAgICAgIHJldHVybiAgam9iT3BlcmF0b3Iuc3RhcnQoInNpbXBsZUJhdGNobGV0Sm9iIiwgcHJvcHMpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGV4KTsKLQl9CisgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihleCk7CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Sm9iRXhpdFN0YXR1cyhsb25nIGV4ZWN1dGlvbklkKSB7Ci0JdHJ5IHsKLQlKb2JPcGVyYXRvciBqb2JPcGVyYXRvciA9IEJhdGNoUnVudGltZS5nZXRKb2JPcGVyYXRvcigpOwotCUpvYkV4ZWN1dGlvbiBqb2JFeGVjdXRpb24gPSBqb2JPcGVyYXRvci5nZXRKb2JFeGVjdXRpb24oZXhlY3V0aW9uSWQpOwotCXJldHVybiBqb2JFeGVjdXRpb24uZ2V0RXhpdFN0YXR1cygpOworICAgIHRyeSB7CisgICAgSm9iT3BlcmF0b3Igam9iT3BlcmF0b3IgPSBCYXRjaFJ1bnRpbWUuZ2V0Sm9iT3BlcmF0b3IoKTsKKyAgICBKb2JFeGVjdXRpb24gam9iRXhlY3V0aW9uID0gam9iT3BlcmF0b3IuZ2V0Sm9iRXhlY3V0aW9uKGV4ZWN1dGlvbklkKTsKKyAgICByZXR1cm4gam9iRXhlY3V0aW9uLmdldEV4aXRTdGF0dXMoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7fQotCXJldHVybiAiLTEiOworICAgIHJldHVybiAiLTEiOwogICAgIH0KIAogCiAgICAgcHVibGljIGJvb2xlYW4gd2FzRWpiQ3JlYXRlQ2FsbGVkKCkgewotCXJldHVybiBlamJDcmVhdGVDYWxsZWQ7CisgICAgcmV0dXJuIGVqYkNyZWF0ZUNhbGxlZDsKICAgICB9CiAKLQkJCQkJCQkJCQkJCQkJICAgICAgICAgICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS12YWxpZGF0aW9uLXRlc3QvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS12YWxpZGF0aW9uLXRlc3QvYnVpbGQucHJvcGVydGllcwppbmRleCAzM2RmYzlkLi41OGUzNjM4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9zaW1wbGUtdmFsaWRhdGlvbi10ZXN0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvc2ltcGxlLXZhbGlkYXRpb24tdGVzdC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMyArMTUsMTMgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IlNpbXBsZS1WYWxpZGF0aW9uIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iYmVhbnMueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9iZWFucy54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJiYXRjaC54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2JhdGNoLnhtbCIvPgpAQCAtMjksMTEgKzI5LDExIEBACiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iYmF0Y2guam9icy5kaXIiIHZhbHVlPSJkZXNjcmlwdG9yL2JhdGNoLWpvYnMiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImJhdGNoX2RlcmJ5LnNxbCIgdmFsdWU9Ii4uLy4uL2JhdGNoX2RlcmJ5LnNxbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvc2ltcGxlLXZhbGlkYXRpb24tdGVzdC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9zaW1wbGUtdmFsaWRhdGlvbi10ZXN0L2J1aWxkLnhtbAppbmRleCAxMjdlNjhhLi5jMjFkMDU5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9zaW1wbGUtdmFsaWRhdGlvbi10ZXN0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9zaW1wbGUtdmFsaWRhdGlvbi10ZXN0L2J1aWxkLnhtbApAQCAtMzgsNyArMzgsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNTEsMTkgKzUxLDE5IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovQ2xpZW50LmNsYXNzLCoqL0pvYlN1Ym1pdHRlci5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iY29weS1iYXRjaC1zcWwiIGRlcGVuZHM9ImJ1aWxkIj4KLSAgICAJPGVjaG8gbWVzc2FnZT0iKioqKiogQ29weSAke2JhdGNoX2RlcmJ5LnNxbH0gdG8gVGFyZ2V0IGRpcjogJHtlbnYuUzFBU19IT01FfS9saWIiLz4KLSAgICAJPGNvcHkgZmlsZT0iJHtiYXRjaF9kZXJieS5zcWx9IiB0b2Rpcj0iJHtlbnYuUzFBU19IT01FfS9saWIiLz4KICAgICA8L3RhcmdldD4KIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8dGFyZ2V0IG5hbWU9ImNvcHktYmF0Y2gtc3FsIiBkZXBlbmRzPSJidWlsZCI+CisgICAgICAgIDxlY2hvIG1lc3NhZ2U9IioqKioqIENvcHkgJHtiYXRjaF9kZXJieS5zcWx9IHRvIFRhcmdldCBkaXI6ICR7ZW52LlMxQVNfSE9NRX0vbGliIi8+CisgICAgICAgIDxjb3B5IGZpbGU9IiR7YmF0Y2hfZGVyYnkuc3FsfSIgdG9kaXI9IiR7ZW52LlMxQVNfSE9NRX0vbGliIi8+CisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC03MSwxMCArNzEsMTAgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvc2ltcGxlLXZhbGlkYXRpb24tdGVzdC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9zaW1wbGUtdmFsaWRhdGlvbi10ZXN0L2NsaWVudC9DbGllbnQuamF2YQppbmRleCA4MTJhMzhkLi44NzIwN2NkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9zaW1wbGUtdmFsaWRhdGlvbi10ZXN0L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9zaW1wbGUtdmFsaWRhdGlvbi10ZXN0L2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjUsNyArMjUsNyBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewpAQCAtMzQsNzQgKzM0LDc0IEBACiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJiYXRjaC1jbXQtY2h1bmsiKTsKLSAgICB9ICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgQEVKQiBKb2JTdWJtaXR0ZXIgam9iU3VibWl0dGVyOwogCiAgICAgaW50IE1BWF9KT0JfU0laRSA9IDI7CiAgICAgbG9uZ1tdIGV4ZWN1dGlvbklkcyA9IG5ldyBsb25nW01BWF9KT0JfU0laRV07CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0JZm9yIChpbnQgaT0wOyBpPE1BWF9KT0JfU0laRTsgaSsrKQotCSAgICBleGVjdXRpb25JZHNbaV0gPSAtMTsKKyAgICBmb3IgKGludCBpPTA7IGk8TUFYX0pPQl9TSVpFOyBpKyspCisgICAgICAgIGV4ZWN1dGlvbklkc1tpXSA9IC0xOwogICAgICAgICBzdWJtaXRKb2JzKCk7CiAgICAgICAgIGxpc3RCYXRjaEpvYnMoKTsKICAgICAgICAgbGlzdEJhdGNoSm9ic0luTG9uZ0Zvcm1hdCgpOwogICAgICAgICBjaGVja0pvYkV4ZWN1dGlvbihleGVjdXRpb25JZHNbMF0pOwotICAgIAlpc0pvYkV4ZWN1dGlvbk9LKGV4ZWN1dGlvbklkc1swXSk7Ci0gICAgCWNoZWNrQWxsSm9iRXhlY3V0aW9ucygpOwotICAgIAljaGVja0lmT25seUpvYnNGcm9tVGhpc0FwcEFyZVZpc2libGUoKTsKKyAgICAgICAgaXNKb2JFeGVjdXRpb25PSyhleGVjdXRpb25JZHNbMF0pOworICAgICAgICBjaGVja0FsbEpvYkV4ZWN1dGlvbnMoKTsKKyAgICAgICAgY2hlY2tJZk9ubHlKb2JzRnJvbVRoaXNBcHBBcmVWaXNpYmxlKCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc3VibWl0Sm9icygpIHsKICAgICAgICAgdHJ5IHsKLQkgICAgZm9yIChpbnQgaSA9IDA7IGk8IE1BWF9KT0JfU0laRTsgaSsrKSB7Ci0JICAgICAgICBleGVjdXRpb25JZHNbaV0gPSBqb2JTdWJtaXR0ZXIuc3VibWl0Sm9iKCJTaW1wbGUtVmFsaWRhdGlvbi1Kb2IiKTsKLQkgICAgICAgIGNoZWNrQmF0Y2hKb2JTdGF0dXMoZXhlY3V0aW9uSWRzW2ldLCAxMDApOwotCSAgICB9Ci0JICAgIGJvb2xlYW4gcmVzdWx0ID0gdHJ1ZTsKLQkgICAgZm9yIChpbnQgaT0wOyBpPE1BWF9KT0JfU0laRTsgaSsrKSB7Ci0JICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiBleGVjdXRpb25JZHNbaV0gIT0gLTE7Ci0JICAgIH0KKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGk8IE1BWF9KT0JfU0laRTsgaSsrKSB7CisgICAgICAgICAgICBleGVjdXRpb25JZHNbaV0gPSBqb2JTdWJtaXR0ZXIuc3VibWl0Sm9iKCJTaW1wbGUtVmFsaWRhdGlvbi1Kb2IiKTsKKyAgICAgICAgICAgIGNoZWNrQmF0Y2hKb2JTdGF0dXMoZXhlY3V0aW9uSWRzW2ldLCAxMDApOworICAgICAgICB9CisgICAgICAgIGJvb2xlYW4gcmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPE1BWF9KT0JfU0laRTsgaSsrKSB7CisgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiBleGVjdXRpb25JZHNbaV0gIT0gLTE7CisgICAgICAgIH0KICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJiYXRjaC1jbXQtY2h1bmstdGVzdDEiLCAocmVzdWx0ID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKSk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiYmF0Y2gtY210LWNodW5rLXRlc3QxIiwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGxpc3RCYXRjaEpvYnMoKSB7CiAgICAgICAgIHRyeSB7Ci0JICAgIGJvb2xlYW4gc3RhdHVzID0gdHJ1ZTsKLQkgICAgQ29sbGVjdGlvbjxTdHJpbmc+IGpvYnMgPSBqb2JTdWJtaXR0ZXIubGlzdEpvYnMoZmFsc2UpOwotCSAgICBmb3IgKFN0cmluZyBqb2IgOiBqb2JzKSB7Ci0JICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqIEpPQiA9PT4gIiArIGpvYik7Ci0JICAgIH0KKyAgICAgICAgYm9vbGVhbiBzdGF0dXMgPSB0cnVlOworICAgICAgICBDb2xsZWN0aW9uPFN0cmluZz4gam9icyA9IGpvYlN1Ym1pdHRlci5saXN0Sm9icyhmYWxzZSk7CisgICAgICAgIGZvciAoU3RyaW5nIGpvYiA6IGpvYnMpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKiogSk9CID09PiAiICsgam9iKTsKKyAgICAgICAgfQogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImJhdGNoLWNtdC1jaHVuay10ZXN0MiIsIChzdGF0dXMgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJiYXRjaC1jbXQtY2h1bmstdGVzdDIiLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgbGlzdEJhdGNoSm9ic0luTG9uZ0Zvcm1hdCgpIHsKICAgICAgICAgdHJ5IHsKLQkgICAgYm9vbGVhbiBzdGF0dXMgPSB0cnVlOwotCSAgICBDb2xsZWN0aW9uPFN0cmluZz4gam9icyA9IGpvYlN1Ym1pdHRlci5saXN0Sm9icyh0cnVlKTsKLQkgICAgZm9yIChTdHJpbmcgam9iIDogam9icykgewotCSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKiBKT0IgPT0+ICIgKyBqb2IpOwotCSAgICB9CisgICAgICAgIGJvb2xlYW4gc3RhdHVzID0gdHJ1ZTsKKyAgICAgICAgQ29sbGVjdGlvbjxTdHJpbmc+IGpvYnMgPSBqb2JTdWJtaXR0ZXIubGlzdEpvYnModHJ1ZSk7CisgICAgICAgIGZvciAoU3RyaW5nIGpvYiA6IGpvYnMpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKiogSk9CID09PiAiICsgam9iKTsKKyAgICAgICAgfQogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImJhdGNoLWNtdC1jaHVuay10ZXN0MyIsIChzdGF0dXMgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJiYXRjaC1jbXQtY2h1bmstdGVzdDMiLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgY2hlY2tKb2JFeGVjdXRpb24obG9uZyBleGVjdXRpb25JZCkgewogICAgICAgICB0cnkgewotCSAgICBib29sZWFuIHN0YXR1cyA9IHRydWU7Ci0JICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gbWFwID0gam9iU3VibWl0dGVyLnRvTWFwKGV4ZWN1dGlvbklkKTsKKyAgICAgICAgYm9vbGVhbiBzdGF0dXMgPSB0cnVlOworICAgICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IG1hcCA9IGpvYlN1Ym1pdHRlci50b01hcChleGVjdXRpb25JZCk7CiAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJiYXRjaC1jbXQtc3RhdHVzLWNoZWNrRXhlLWpvYk5hbWUiLCBtYXAuZ2V0KCJqb2JOYW1lIikgIT0gbnVsbCA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiYmF0Y2gtY210LXN0YXR1cy1jaGVja0V4ZS1hcHBOYW1lIiwgbWFwLmdldCgiYXBwTmFtZSIpICE9IG51bGwgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpOwpAQCAtMTEyLDcgKzExMiw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiYmF0Y2gtY210LXN0YXR1cy1jaGVja0V4ZS1iYXRjaFN0YXR1cyIsIG1hcC5nZXQoImJhdGNoU3RhdHVzIikgIT0gbnVsbCA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiYmF0Y2gtY210LXN0YXR1cy1jaGVja0V4ZS1lbmRUaW1lIiwgbWFwLmdldCgiZW5kVGltZSIpICE9IG51bGwgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpOwogCi0JfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiYmF0Y2gtY210LWNodW5rLXRlc3QzIiwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogICAgIH0KQEAgLTEyMywxOCArMTIzLDE4IEBACiAKICAgICBwcml2YXRlIGJvb2xlYW4gY2hlY2tPbmVKb2JFeGVjdXRpb24obG9uZyBleGVjdXRpb25JZCkgewogICAgICAgICB0cnkgewotCSAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IG1hcCA9IGpvYlN1Ym1pdHRlci50b01hcChleGVjdXRpb25JZCk7Ci0JICAgIHJldHVybiBtYXAgIT0gbnVsbCAmJgotICAgICAgICAgICAgCW1hcC5nZXQoImpvYk5hbWUiKSAhPSBudWxsICYmCi0gICAgICAgICAgICAJbWFwLmdldCgiYXBwTmFtZSIpICE9IG51bGwgJiYKLSAgICAgICAgICAgIAltYXAuZ2V0KCJpbnN0YW5jZUNvdW50IikgIT0gbnVsbCAmJgotICAgICAgICAgICAgCW1hcC5nZXQoImluc3RhbmNlSUQiKSAhPSBudWxsICYmCi0gICAgICAgICAgICAJbWFwLmdldCgiZXhlY3V0aW9uSUQiKSAhPSBudWxsICYmCi0gICAgICAgICAgICAJbWFwLmdldCgic3RhcnRUaW1lIikgIT0gbnVsbCAmJgotICAgICAgICAgICAgCW1hcC5nZXQoImJhdGNoU3RhdHVzIikgIT0gbnVsbCAmJgotICAgICAgICAgICAgCW1hcC5nZXQoImVuZFRpbWUiKSAhPSBudWxsOworICAgICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IG1hcCA9IGpvYlN1Ym1pdHRlci50b01hcChleGVjdXRpb25JZCk7CisgICAgICAgIHJldHVybiBtYXAgIT0gbnVsbCAmJgorICAgICAgICAgICAgICAgIG1hcC5nZXQoImpvYk5hbWUiKSAhPSBudWxsICYmCisgICAgICAgICAgICAgICAgbWFwLmdldCgiYXBwTmFtZSIpICE9IG51bGwgJiYKKyAgICAgICAgICAgICAgICBtYXAuZ2V0KCJpbnN0YW5jZUNvdW50IikgIT0gbnVsbCAmJgorICAgICAgICAgICAgICAgIG1hcC5nZXQoImluc3RhbmNlSUQiKSAhPSBudWxsICYmCisgICAgICAgICAgICAgICAgbWFwLmdldCgiZXhlY3V0aW9uSUQiKSAhPSBudWxsICYmCisgICAgICAgICAgICAgICAgbWFwLmdldCgic3RhcnRUaW1lIikgIT0gbnVsbCAmJgorICAgICAgICAgICAgICAgIG1hcC5nZXQoImJhdGNoU3RhdHVzIikgIT0gbnVsbCAmJgorICAgICAgICAgICAgICAgIG1hcC5nZXQoImVuZFRpbWUiKSAhPSBudWxsOwogCi0JfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNDUsNDUgKzE0NSw0NSBAQAogICAgICAgIGZvciAobG9uZyBleGVJZCA6IGpvYlN1Ym1pdHRlci5nZXRBbGxFeGVjdXRpb25JZHMobnVsbCkpIHsKICAgICAgICAgICAgaWYgKCFjaGVja09uZUpvYkV4ZWN1dGlvbihleGVJZCkpIHsKICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7Ci0JICAgICAgYnJlYWs7Ci0JICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgIH0KICAgICAgICB9CiAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJiYXRjaC1jbXQtc3RhdHVzLWNoZWNrRXhlLWNoZWNrQWxsSm9iRXhlY3V0aW9ucyIsIHJlc3VsdCA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgY2hlY2tJZk9ubHlKb2JzRnJvbVRoaXNBcHBBcmVWaXNpYmxlKCkgewogICAgICAgICB0cnkgewotCSAgICBib29sZWFuIHN0YXR1cyA9IHRydWU7CisgICAgICAgIGJvb2xlYW4gc3RhdHVzID0gdHJ1ZTsKICAgICAgICAgICAgIGZvciAobG9uZyBleGVJZCA6IGpvYlN1Ym1pdHRlci5nZXRBbGxFeGVjdXRpb25JZHMobnVsbCkpIHsKLQkgICAgICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gbWFwID0gam9iU3VibWl0dGVyLnRvTWFwKGV4ZUlkKTsKLQkJU3RyaW5nIGpvYk5hbWUgPSBtYXAuZ2V0KCJqb2JOYW1lIik7Ci0JCVN0cmluZyBhcHBOYW1lID0gbWFwLmdldCgiYXBwTmFtZSIpOwotCSAgICAgICAgaWYgKCFqb2JOYW1lLnN0YXJ0c1dpdGgoIlNpbXBsZS1WYWxpZGF0aW9uLUpvYiIpIHx8ICFhcHBOYW1lLnN0YXJ0c1dpdGgoInNlcnZlci1jb25maWc6U2ltcGxlLVZhbGlkYXRpb25BcHAiKSkgewotCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpOwotCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKiogSm9iIEZyb20gYW5vdGhlciBhcHA/ICIgKyBqb2JOYW1lICsgIjsgIiArIGFwcE5hbWUgKyAiICoqKiIpOwotCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpOwotCQkgICAgc3RhdHVzID0gZmFsc2U7Ci0JCSAgICBicmVhazsKLQkJfQotCSAgICB9CisgICAgICAgICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IG1hcCA9IGpvYlN1Ym1pdHRlci50b01hcChleGVJZCk7CisgICAgICAgIFN0cmluZyBqb2JOYW1lID0gbWFwLmdldCgiam9iTmFtZSIpOworICAgICAgICBTdHJpbmcgYXBwTmFtZSA9IG1hcC5nZXQoImFwcE5hbWUiKTsKKyAgICAgICAgICAgIGlmICgham9iTmFtZS5zdGFydHNXaXRoKCJTaW1wbGUtVmFsaWRhdGlvbi1Kb2IiKSB8fCAhYXBwTmFtZS5zdGFydHNXaXRoKCJzZXJ2ZXItY29uZmlnOlNpbXBsZS1WYWxpZGF0aW9uQXBwIikpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqIEpvYiBGcm9tIGFub3RoZXIgYXBwPyAiICsgam9iTmFtZSArICI7ICIgKyBhcHBOYW1lICsgIiAqKioiKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiKTsKKyAgICAgICAgICAgIHN0YXR1cyA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImJhdGNoLWNtdC1jaHVuay1jaGVja0lmT25seUpvYnNGcm9tVGhpc0FwcEFyZVZpc2libGUiLCAoc3RhdHVzID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKSk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiYmF0Y2gtY210LWNodW5rLWNoZWNrSWZPbmx5Sm9ic0Zyb21UaGlzQXBwQXJlVmlzaWJsZSIsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBjaGVja0JhdGNoSm9iU3RhdHVzKGxvbmcgZXhlY3V0aW9uSWQsIGludCBzZWMpIHsKLQl3aGlsZSAoc2VjLS0gPiAwKSB7CisgICAgd2hpbGUgKHNlYy0tID4gMCkgewogICAgICAgICAgICAgdHJ5IHsKLQkJU3RyaW5nIHN0YXR1cyA9IGpvYlN1Ym1pdHRlci5nZXRKb2JFeGl0U3RhdHVzKGV4ZWN1dGlvbklkKTsKLQkJaWYgKCJDT01QTEVURUQiLmVxdWFsc0lnbm9yZUNhc2Uoc3RhdHVzKSB8fCAiRkFJTEVEIi5lcXVhbHNJZ25vcmVDYXNlKHN0YXR1cykpIHsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKiogY2hlY2tCYXRjaEpvYlN0YXR1c1siICsgZXhlY3V0aW9uSWQgKyAiXSAgPT0+ICIgKyBzdGF0dXMpOwotCQkgICAgYnJlYWs7Ci0JCX0KKyAgICAgICAgU3RyaW5nIHN0YXR1cyA9IGpvYlN1Ym1pdHRlci5nZXRKb2JFeGl0U3RhdHVzKGV4ZWN1dGlvbklkKTsKKyAgICAgICAgaWYgKCJDT01QTEVURUQiLmVxdWFsc0lnbm9yZUNhc2Uoc3RhdHVzKSB8fCAiRkFJTEVEIi5lcXVhbHNJZ25vcmVDYXNlKHN0YXR1cykpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKiogY2hlY2tCYXRjaEpvYlN0YXR1c1siICsgZXhlY3V0aW9uSWQgKyAiXSAgPT0+ICIgKyBzdGF0dXMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldpbGwgc2xlZXAgZm9yICIgKyBzZWMgKyAiIG1vcmUgc2Vjb25kcy4uLiIpOwogICAgICAgICAgICAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoMTAwMCk7CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkgICAgfQorICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS12YWxpZGF0aW9uLXRlc3QvZGVzY3JpcHRvci9iYXRjaC1qb2JzL0NNVC1PbmVTdGVwSm9iLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS12YWxpZGF0aW9uLXRlc3QvZGVzY3JpcHRvci9iYXRjaC1qb2JzL0NNVC1PbmVTdGVwSm9iLnhtbAppbmRleCAxZGUwY2Q2Li43YTI5NDdkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9zaW1wbGUtdmFsaWRhdGlvbi10ZXN0L2Rlc2NyaXB0b3IvYmF0Y2gtam9icy9DTVQtT25lU3RlcEpvYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvc2ltcGxlLXZhbGlkYXRpb24tdGVzdC9kZXNjcmlwdG9yL2JhdGNoLWpvYnMvQ01ULU9uZVN0ZXBKb2IueG1sCkBAIC0yMCw5ICsyMCw5IEBACiA8am9iIGlkPSJjbXQtY2h1bmstam9iIiB4bWxucz0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSIgdmVyc2lvbj0iMS4wIj4KICAgICA8c3RlcCBpZD0ic3RlcDEiPgogICAgICAgICA8Y2h1bmsgaXRlbS1jb3VudD0iMyI+Ci0gICAgICAgICAgICA8cmVhZGVyIHJlZj0iU2ltcGxlSXRlbVJlYWRlciI+PC9yZWFkZXI+IAorICAgICAgICAgICAgPHJlYWRlciByZWY9IlNpbXBsZUl0ZW1SZWFkZXIiPjwvcmVhZGVyPgogICAgICAgICAgICAgPHByb2Nlc3NvciByZWY9IlNpbXBsZUl0ZW1Qcm9jZXNzb3IiPjwvcHJvY2Vzc29yPgotICAgICAgICAgICAgPHdyaXRlciByZWY9IlNpbXBsZUl0ZW1Xcml0ZXIiPjwvd3JpdGVyPiAKKyAgICAgICAgICAgIDx3cml0ZXIgcmVmPSJTaW1wbGVJdGVtV3JpdGVyIj48L3dyaXRlcj4KICAgICAgICAgPC9jaHVuaz4KICAgICA8L3N0ZXA+CiA8L2pvYj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS12YWxpZGF0aW9uLXRlc3QvZGVzY3JpcHRvci9iYXRjaC1qb2JzL1NpbXBsZS1WYWxpZGF0aW9uLUpvYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9zaW1wbGUtdmFsaWRhdGlvbi10ZXN0L2Rlc2NyaXB0b3IvYmF0Y2gtam9icy9TaW1wbGUtVmFsaWRhdGlvbi1Kb2IueG1sCmluZGV4IDgzN2UxYjEuLmMwMzJkOWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS12YWxpZGF0aW9uLXRlc3QvZGVzY3JpcHRvci9iYXRjaC1qb2JzL1NpbXBsZS1WYWxpZGF0aW9uLUpvYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvc2ltcGxlLXZhbGlkYXRpb24tdGVzdC9kZXNjcmlwdG9yL2JhdGNoLWpvYnMvU2ltcGxlLVZhbGlkYXRpb24tSm9iLnhtbApAQCAtMjAsMTYgKzIwLDE2IEBACiA8am9iIGlkPSJTaW1wbGUtVmFsaWRhdGlvbi1Kb2IiIHhtbG5zPSJodHRwczovL2pha2FydGEuZWUveG1sL25zL2pha2FydGFlZSIgdmVyc2lvbj0iMi4wIj4KICAgICA8c3RlcCBpZD0ic3RlcDEiIG5leHQ9InN0ZXAyIj4KICAgICAgICAgPGNodW5rIGl0ZW0tY291bnQ9IjMiPgotICAgICAgICAgICAgPHJlYWRlciByZWY9IlNpbXBsZUl0ZW1SZWFkZXIiPjwvcmVhZGVyPiAKKyAgICAgICAgICAgIDxyZWFkZXIgcmVmPSJTaW1wbGVJdGVtUmVhZGVyIj48L3JlYWRlcj4KICAgICAgICAgICAgIDxwcm9jZXNzb3IgcmVmPSJTaW1wbGVJdGVtUHJvY2Vzc29yIj48L3Byb2Nlc3Nvcj4KLSAgICAgICAgICAgIDx3cml0ZXIgcmVmPSJTaW1wbGVJdGVtV3JpdGVyIj48L3dyaXRlcj4gCisgICAgICAgICAgICA8d3JpdGVyIHJlZj0iU2ltcGxlSXRlbVdyaXRlciI+PC93cml0ZXI+CiAgICAgICAgIDwvY2h1bms+CiAgICAgPC9zdGVwPgogICAgIDxzdGVwIGlkPSJzdGVwMiI+CiAgICAgICAgIDxjaHVuayBpdGVtLWNvdW50PSIyIj4KLSAgICAgICAgICAgIDxyZWFkZXIgcmVmPSJTaW1wbGVJdGVtUmVhZGVyIj48L3JlYWRlcj4gCisgICAgICAgICAgICA8cmVhZGVyIHJlZj0iU2ltcGxlSXRlbVJlYWRlciI+PC9yZWFkZXI+CiAgICAgICAgICAgICA8cHJvY2Vzc29yIHJlZj0iU2ltcGxlSXRlbVByb2Nlc3NvciI+PC9wcm9jZXNzb3I+Ci0gICAgICAgICAgICA8d3JpdGVyIHJlZj0iU2ltcGxlSXRlbVdyaXRlciI+PC93cml0ZXI+IAorICAgICAgICAgICAgPHdyaXRlciByZWY9IlNpbXBsZUl0ZW1Xcml0ZXIiPjwvd3JpdGVyPgogICAgICAgICA8L2NodW5rPgogICAgIDwvc3RlcD4KIDwvam9iPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvc2ltcGxlLXZhbGlkYXRpb24tdGVzdC9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvY210L2NodW5rL0lkR2VuZXJhdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9zaW1wbGUtdmFsaWRhdGlvbi10ZXN0L2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9jbXQvY2h1bmsvSWRHZW5lcmF0b3IuamF2YQppbmRleCA3ODIzMjQ5Li4zOTE2OGE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9zaW1wbGUtdmFsaWRhdGlvbi10ZXN0L2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9jbXQvY2h1bmsvSWRHZW5lcmF0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9zaW1wbGUtdmFsaWRhdGlvbi10ZXN0L2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9jbXQvY2h1bmsvSWRHZW5lcmF0b3IuamF2YQpAQCAtMjEsNSArMjEsNSBAQAogcHVibGljIGludGVyZmFjZSBJZEdlbmVyYXRvciB7CiAKICAgICBwdWJsaWMgU3RyaW5nIG5leHRJZCgpOwotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9zaW1wbGUtdmFsaWRhdGlvbi10ZXN0L2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9jbXQvY2h1bmsvSm9iU3VibWl0dGVyQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvc2ltcGxlLXZhbGlkYXRpb24tdGVzdC9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvY210L2NodW5rL0pvYlN1Ym1pdHRlckJlYW4uamF2YQppbmRleCA5NTlhM2FjLi5hYTVhNjljIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9zaW1wbGUtdmFsaWRhdGlvbi10ZXN0L2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9jbXQvY2h1bmsvSm9iU3VibWl0dGVyQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS12YWxpZGF0aW9uLXRlc3QvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL2NtdC9jaHVuay9Kb2JTdWJtaXR0ZXJCZWFuLmphdmEKQEAgLTQ1LDc1ICs0NSw3NSBAQAogICAgIH0KIAogICAgIHB1YmxpYyBsb25nIHN1Ym1pdEpvYihTdHJpbmcgam9iTmFtZSkgewotCXRyeSB7Ci0JICBKb2JPcGVyYXRvciBqb2JPcGVyYXRvciA9IEJhdGNoUnVudGltZS5nZXRKb2JPcGVyYXRvcigpOworICAgIHRyeSB7CisgICAgICBKb2JPcGVyYXRvciBqb2JPcGVyYXRvciA9IEJhdGNoUnVudGltZS5nZXRKb2JPcGVyYXRvcigpOwogCi0JICBQcm9wZXJ0aWVzIHByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKLQkgIGZvciAoaW50IGk9MDsgaTwzOyBpKyspCi0JCXByb3BzLnB1dChqb2JOYW1lICsgIi1LZXktIiArIGksIGpvYk5hbWUrIi1WYWx1ZS0iICsgaSk7Ci0JICByZXR1cm4gIGpvYk9wZXJhdG9yLnN0YXJ0KGpvYk5hbWUsIHByb3BzKTsKKyAgICAgIFByb3BlcnRpZXMgcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOworICAgICAgZm9yIChpbnQgaT0wOyBpPDM7IGkrKykKKyAgICAgICAgcHJvcHMucHV0KGpvYk5hbWUgKyAiLUtleS0iICsgaSwgam9iTmFtZSsiLVZhbHVlLSIgKyBpKTsKKyAgICAgIHJldHVybiAgam9iT3BlcmF0b3Iuc3RhcnQoam9iTmFtZSwgcHJvcHMpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGV4KTsKLQl9CisgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihleCk7CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Sm9iRXhpdFN0YXR1cyhsb25nIGV4ZWN1dGlvbklkKSB7Ci0JdHJ5IHsKLQkgIEpvYk9wZXJhdG9yIGpvYk9wZXJhdG9yID0gQmF0Y2hSdW50aW1lLmdldEpvYk9wZXJhdG9yKCk7Ci0JICBKb2JFeGVjdXRpb24gamUgPSAgam9iT3BlcmF0b3IuZ2V0Sm9iRXhlY3V0aW9uKGV4ZWN1dGlvbklkKTsKLQkgIHJldHVybiBqZS5nZXRFeGl0U3RhdHVzKCk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihleCk7Ci0JfQorICAgIHRyeSB7CisgICAgICBKb2JPcGVyYXRvciBqb2JPcGVyYXRvciA9IEJhdGNoUnVudGltZS5nZXRKb2JPcGVyYXRvcigpOworICAgICAgSm9iRXhlY3V0aW9uIGplID0gIGpvYk9wZXJhdG9yLmdldEpvYkV4ZWN1dGlvbihleGVjdXRpb25JZCk7CisgICAgICByZXR1cm4gamUuZ2V0RXhpdFN0YXR1cygpOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZXgpOworICAgIH0KIAogICAgIH0KIAogICAgIHB1YmxpYyBDb2xsZWN0aW9uPFN0cmluZz4gbGlzdEpvYnMoYm9vbGVhbiB1c2VMb25nRm9ybWF0KSB7Ci0JdHJ5IHsKLQkgIEpvYk9wZXJhdG9yIGpvYk9wZXJhdG9yID0gQmF0Y2hSdW50aW1lLmdldEpvYk9wZXJhdG9yKCk7Ci0JICBTZXQ8U3RyaW5nPiBqb2JzID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOwotCSAgaWYgKCF1c2VMb25nRm9ybWF0KSB7Ci0JICAgICAgZm9yIChTdHJpbmcgam9iTmFtZSA6IGpvYk9wZXJhdG9yLmdldEpvYk5hbWVzKCkpIHsKLQkgICAgICAgICAgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7Ci0JCSAgc2IuYXBwZW5kKGpvYk5hbWUpLmFwcGVuZCgiICIpLmFwcGVuZChqb2JPcGVyYXRvci5nZXRKb2JJbnN0YW5jZUNvdW50KGpvYk5hbWUpKTsKLQkJICBqb2JzLmFkZChzYi50b1N0cmluZygpKTsKLQkgICAgIH0KKyAgICB0cnkgeworICAgICAgSm9iT3BlcmF0b3Igam9iT3BlcmF0b3IgPSBCYXRjaFJ1bnRpbWUuZ2V0Sm9iT3BlcmF0b3IoKTsKKyAgICAgIFNldDxTdHJpbmc+IGpvYnMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CisgICAgICBpZiAoIXVzZUxvbmdGb3JtYXQpIHsKKyAgICAgICAgICBmb3IgKFN0cmluZyBqb2JOYW1lIDogam9iT3BlcmF0b3IuZ2V0Sm9iTmFtZXMoKSkgeworICAgICAgICAgICAgICBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKyAgICAgICAgICBzYi5hcHBlbmQoam9iTmFtZSkuYXBwZW5kKCIgIikuYXBwZW5kKGpvYk9wZXJhdG9yLmdldEpvYkluc3RhbmNlQ291bnQoam9iTmFtZSkpOworICAgICAgICAgIGpvYnMuYWRkKHNiLnRvU3RyaW5nKCkpOworICAgICAgICAgfQogICAgICAgICAgIH0gZWxzZSB7Ci0JICAgICBpbnQgaW5kZXggPSAwOwotCSAgICAgZm9yIChTdHJpbmcgam9iTmFtZSA6IGpvYk9wZXJhdG9yLmdldEpvYk5hbWVzKCkpIHsKLQkJTGlzdDxKb2JJbnN0YW5jZT4gZXhlID0gam9iT3BlcmF0b3IuZ2V0Sm9iSW5zdGFuY2VzKGpvYk5hbWUsIDAsIEludGVnZXIuTUFYX1ZBTFVFIC0gMSk7Ci0JCWlmIChleGUgIT0gbnVsbCkgewotCQkgICBmb3IgKEpvYkluc3RhbmNlIGppIDogZXhlKSB7Ci0JCSAgICAgIGZvciAoSm9iRXhlY3V0aW9uIGplIDogam9iT3BlcmF0b3IuZ2V0Sm9iRXhlY3V0aW9ucyhqaSkpIHsKLQkgICAgICAgICAgICAgICAgICBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKyAgICAgICAgIGludCBpbmRleCA9IDA7CisgICAgICAgICBmb3IgKFN0cmluZyBqb2JOYW1lIDogam9iT3BlcmF0b3IuZ2V0Sm9iTmFtZXMoKSkgeworICAgICAgICBMaXN0PEpvYkluc3RhbmNlPiBleGUgPSBqb2JPcGVyYXRvci5nZXRKb2JJbnN0YW5jZXMoam9iTmFtZSwgMCwgSW50ZWdlci5NQVhfVkFMVUUgLSAxKTsKKyAgICAgICAgaWYgKGV4ZSAhPSBudWxsKSB7CisgICAgICAgICAgIGZvciAoSm9iSW5zdGFuY2UgamkgOiBleGUpIHsKKyAgICAgICAgICAgICAgZm9yIChKb2JFeGVjdXRpb24gamUgOiBqb2JPcGVyYXRvci5nZXRKb2JFeGVjdXRpb25zKGppKSkgeworICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2IuYXBwZW5kKGluZGV4KyspLmFwcGVuZCgiICIpLmFwcGVuZChqb2JOYW1lKS5hcHBlbmQoIiAiKS5hcHBlbmQoKChUYWdnZWRKb2JFeGVjdXRpb24pIGplKS5nZXRUYWdOYW1lKCkpCi0JCQkgICAgICAJLmFwcGVuZCgiICIpLmFwcGVuZChqZS5nZXRCYXRjaFN0YXR1cygpKS5hcHBlbmQoIiAiKS5hcHBlbmQoamUuZ2V0RXhpdFN0YXR1cygpKTsKLQkgICAgICAgICAgICAgICAgICAgICAgam9icy5hZGQoc2IudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgICAgLmFwcGVuZCgiICIpLmFwcGVuZChqZS5nZXRCYXRjaFN0YXR1cygpKS5hcHBlbmQoIiAiKS5hcHBlbmQoamUuZ2V0RXhpdFN0YXR1cygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgam9icy5hZGQoc2IudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCSAgICAgICAgICAgICAgICAgICAgICBqb2JzLmFkZCgiRXhjZXB0aW9uIDogIiArIHNiLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICBqb2JzLmFkZCgiRXhjZXB0aW9uIDogIiArIHNiLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KLQkJfQotCSAgICAgfQotCSAgIH0KKyAgICAgICAgfQorICAgICAgICAgfQorICAgICAgIH0KIAotCSAgIHJldHVybiBqb2JzOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCSAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZXgpOwotCX0KKyAgICAgICByZXR1cm4gam9iczsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGV4KTsKKyAgICB9CiAgICAgIH0KIAogICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBTdHJpbmc+IHRvTWFwKGxvbmcgZXhlY3V0aW9uSWQpIHsKICAgICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBtYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKICAgICAgICB0cnkgewotCSAgSm9iT3BlcmF0b3Igam9iT3BlcmF0b3IgPSBCYXRjaFJ1bnRpbWUuZ2V0Sm9iT3BlcmF0b3IoKTsKLQkgIEpvYkV4ZWN1dGlvbiBqZSA9IGpvYk9wZXJhdG9yLmdldEpvYkV4ZWN1dGlvbihleGVjdXRpb25JZCk7CisgICAgICBKb2JPcGVyYXRvciBqb2JPcGVyYXRvciA9IEJhdGNoUnVudGltZS5nZXRKb2JPcGVyYXRvcigpOworICAgICAgSm9iRXhlY3V0aW9uIGplID0gam9iT3BlcmF0b3IuZ2V0Sm9iRXhlY3V0aW9uKGV4ZWN1dGlvbklkKTsKICAgICAgICAgICBtYXAucHV0KCJqb2JOYW1lIiwgIiIramUuZ2V0Sm9iTmFtZSgpKTsKICAgICAgICAgICBtYXAucHV0KCJhcHBOYW1lIiwgIiIrKChUYWdnZWRKb2JFeGVjdXRpb24pIGplKS5nZXRUYWdOYW1lKCkpOwogCi0JICB0cnkgeworICAgICAgdHJ5IHsKICAgICAgICAgICAgIG1hcC5wdXQoImluc3RhbmNlQ291bnQiLCAiIitqb2JPcGVyYXRvci5nZXRKb2JJbnN0YW5jZUNvdW50KGplLmdldEpvYk5hbWUoKSkpOwogICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkge30KIApAQCAtMTI5LDM5ICsxMjksMzkgQEAKIAogICAgICAgIHJldHVybiBtYXA7CiAgICAgfQotCQorCiAgICAgcHVibGljIENvbGxlY3Rpb248U3RyaW5nPiBsaXN0Sm9iRXhlY3V0aW9ucyhib29sZWFuIHVzZUxvbmdGb3JtYXQsIGxvbmcuLi4gZXhlY3V0aW5JZHMpIHsKLQlTZXQ8U3RyaW5nPiBqb2JzID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOwotCXJldHVybiBqb2JzOworICAgIFNldDxTdHJpbmc+IGpvYnMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CisgICAgcmV0dXJuIGpvYnM7CiAgICAgfQogCiAgICAgcHVibGljIExpc3Q8TG9uZz4gZ2V0QWxsRXhlY3V0aW9uSWRzKFN0cmluZyBqb2JOYW1lKSB7Ci0JTGlzdDxMb25nPiBsaXN0ID0gbmV3IExpbmtlZExpc3Q8TG9uZz4oKTsKLQl0cnkgeworICAgIExpc3Q8TG9uZz4gbGlzdCA9IG5ldyBMaW5rZWRMaXN0PExvbmc+KCk7CisgICAgdHJ5IHsKICAgICAgICAgaWYgKGpvYk5hbWUgIT0gbnVsbCkKICAgICAgICAgICAgZ2V0QWxsRXhlY3V0aW9uSWRzKGpvYk5hbWUsIGxpc3QpOwotCWVsc2UgewotCSAgIEpvYk9wZXJhdG9yIGpvYk9wZXJhdG9yID0gQmF0Y2hSdW50aW1lLmdldEpvYk9wZXJhdG9yKCk7Ci0JICAgZm9yIChTdHJpbmcgam4gOiBqb2JPcGVyYXRvci5nZXRKb2JOYW1lcygpKQorICAgIGVsc2UgeworICAgICAgIEpvYk9wZXJhdG9yIGpvYk9wZXJhdG9yID0gQmF0Y2hSdW50aW1lLmdldEpvYk9wZXJhdG9yKCk7CisgICAgICAgZm9yIChTdHJpbmcgam4gOiBqb2JPcGVyYXRvci5nZXRKb2JOYW1lcygpKQogICAgICAgICAgICAgICBnZXRBbGxFeGVjdXRpb25JZHMoam4sIGxpc3QpOwotCX0KKyAgICB9CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogCi0JfQotCXJldHVybiBsaXN0OworICAgIH0KKyAgICByZXR1cm4gbGlzdDsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgZ2V0QWxsRXhlY3V0aW9uSWRzKFN0cmluZyBqb2JOYW1lLCBMaXN0PExvbmc+IGxpc3QpCi0gICAgCXRocm93cyBFeGNlcHRpb24gewotCUpvYk9wZXJhdG9yIGpvYk9wZXJhdG9yID0gQmF0Y2hSdW50aW1lLmdldEpvYk9wZXJhdG9yKCk7Ci0JTGlzdDxKb2JJbnN0YW5jZT4gZXhlID0gam9iT3BlcmF0b3IuZ2V0Sm9iSW5zdGFuY2VzKGpvYk5hbWUsIDAsIEludGVnZXIuTUFYX1ZBTFVFIC0gMSk7Ci0JaWYgKGV4ZSAhPSBudWxsKSB7Ci0JICAgZm9yIChKb2JJbnN0YW5jZSBqaSA6IGV4ZSkgewotCSAgICAgIGZvciAoSm9iRXhlY3V0aW9uIGplIDogam9iT3BlcmF0b3IuZ2V0Sm9iRXhlY3V0aW9ucyhqaSkpIHsKKyAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgSm9iT3BlcmF0b3Igam9iT3BlcmF0b3IgPSBCYXRjaFJ1bnRpbWUuZ2V0Sm9iT3BlcmF0b3IoKTsKKyAgICBMaXN0PEpvYkluc3RhbmNlPiBleGUgPSBqb2JPcGVyYXRvci5nZXRKb2JJbnN0YW5jZXMoam9iTmFtZSwgMCwgSW50ZWdlci5NQVhfVkFMVUUgLSAxKTsKKyAgICBpZiAoZXhlICE9IG51bGwpIHsKKyAgICAgICBmb3IgKEpvYkluc3RhbmNlIGppIDogZXhlKSB7CisgICAgICAgICAgZm9yIChKb2JFeGVjdXRpb24gamUgOiBqb2JPcGVyYXRvci5nZXRKb2JFeGVjdXRpb25zKGppKSkgewogICAgICAgICAgICAgICAgICBsaXN0LmFkZChqZS5nZXRFeGVjdXRpb25JZCgpKTsKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9Ci0JfQorICAgIH0KICAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9zaW1wbGUtdmFsaWRhdGlvbi10ZXN0L2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9jbXQvY2h1bmsvU2ltcGxlSWRHZW5lcmF0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS12YWxpZGF0aW9uLXRlc3QvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL2NtdC9jaHVuay9TaW1wbGVJZEdlbmVyYXRvci5qYXZhCmluZGV4IDBjZjRlZTIuLjFkYTY0NDcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS12YWxpZGF0aW9uLXRlc3QvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL2NtdC9jaHVuay9TaW1wbGVJZEdlbmVyYXRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS12YWxpZGF0aW9uLXRlc3QvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL2NtdC9jaHVuay9TaW1wbGVJZEdlbmVyYXRvci5qYXZhCkBAIC0yMiw5ICsyMiw5IEBACiAgKi8KIHB1YmxpYyBjbGFzcyBTaW1wbGVJZEdlbmVyYXRvcgogICAgIGltcGxlbWVudHMgSWRHZW5lcmF0b3IgewotICAgIAorCiAgICAgcHJpdmF0ZSBBdG9taWNJbnRlZ2VyIGNvdW50ZXIgPSBuZXcgQXRvbWljSW50ZWdlcigwKTsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgbmV4dElkKCkgewogICAgICAgICByZXR1cm4gIiIgKyBjb3VudGVyLmluY3JlbWVudEFuZEdldCgpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS12YWxpZGF0aW9uLXRlc3QvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL2NtdC9jaHVuay9TaW1wbGVJdGVtUHJvY2Vzc29yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9zaW1wbGUtdmFsaWRhdGlvbi10ZXN0L2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9jbXQvY2h1bmsvU2ltcGxlSXRlbVByb2Nlc3Nvci5qYXZhCmluZGV4IGY0MGJhYjYuLjVmOGU0YjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS12YWxpZGF0aW9uLXRlc3QvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL2NtdC9jaHVuay9TaW1wbGVJdGVtUHJvY2Vzc29yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvc2ltcGxlLXZhbGlkYXRpb24tdGVzdC9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvY210L2NodW5rL1NpbXBsZUl0ZW1Qcm9jZXNzb3IuamF2YQpAQCAtMjMsMTIgKzIzLDEyIEBACiAKICAgICBASW5qZWN0CiAgICAgSWRHZW5lcmF0b3IgaWRHZW47Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgU3RyaW5nIHByb2Nlc3NJdGVtKE9iamVjdCBvYmopIHRocm93cyBFeGNlcHRpb24gewotCVN0cmluZyB0ID0gKFN0cmluZykgb2JqOworICAgIFN0cmluZyB0ID0gKFN0cmluZykgb2JqOwogICAgICAgICBTdHJpbmdbXSByZWNvcmQgPSB0LnNwbGl0KCIsICIpOwotICAgICAgICAKKwogICAgIC8vRU1QLUlELCBNT05USC1ZRUFSLCBTQUxBUlksIFRBWCUsIE1FRElDQVJFJSwgT1RIRVIKICAgICAgICAgaW50IHNhbGFyeSA9IEludGVnZXIudmFsdWVPZihyZWNvcmRbMl0pOwogICAgICAgICBkb3VibGUgdGF4ID0gRG91YmxlLnZhbHVlT2YocmVjb3JkWzNdKTsKQEAgLTQxLDUgKzQxLDUgQEAKIFN5c3RlbS5vdXQucHJpbnRsbigiSWRHZW4gPT0+ICIgKyBpZEdlbik7CiAgICAgICAgIHJldHVybiAgc2IudG9TdHJpbmcoKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS12YWxpZGF0aW9uLXRlc3QvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL2NtdC9jaHVuay9TaW1wbGVJdGVtUmVhZGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9zaW1wbGUtdmFsaWRhdGlvbi10ZXN0L2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9jbXQvY2h1bmsvU2ltcGxlSXRlbVJlYWRlci5qYXZhCmluZGV4IGNjMTdjMmYuLjAxNjIyZjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS12YWxpZGF0aW9uLXRlc3QvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL2NtdC9jaHVuay9TaW1wbGVJdGVtUmVhZGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvc2ltcGxlLXZhbGlkYXRpb24tdGVzdC9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvY210L2NodW5rL1NpbXBsZUl0ZW1SZWFkZXIuamF2YQpAQCAtMjEsNyArMjEsNyBAQAogICAgIGltcGxlbWVudHMgamFrYXJ0YS5iYXRjaC5hcGkuY2h1bmsuSXRlbVJlYWRlciB7CiAKICAgICBwcml2YXRlIGludCBpbmRleCA9IDA7Ci0gICAgCisKICAgICAvL0VNUC1JRCwgTU9OVEgtWUVBUiwgU0FMQVJZLCBUQVglLCBNRURJQ0FSRSUsIE9USEVSCiAgICAgcHJpdmF0ZSBTdHJpbmdbXSBpdGVtcyA9IG5ldyBTdHJpbmdbXSB7CiAgICAgICAgICIxMjAtMDEsIEpBTi0yMDEzLCA4MDAwLCAyNywgMywgMCIsCkBAIC0zMyw3ICszMyw3IEBACiAgICAgICAgICIxMjAtMDcsIEpBTi0yMDEzLCAxMTAwMCwgMzYsIDUsIDAiLAogICAgICAgICAiMTIwLTA4LCBKQU4tMjAxMywgMTE1MDAsIDM2LCA1LCAwIiwKICAgICB9OwotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgb3BlbihTZXJpYWxpemFibGUgZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgfQpAQCAtNTEsNSArNTEsNSBAQAogICAgIHB1YmxpYyBTZXJpYWxpemFibGUgY2hlY2twb2ludEluZm8oKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9zaW1wbGUtdmFsaWRhdGlvbi10ZXN0L2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9jbXQvY2h1bmsvU2ltcGxlSXRlbVdyaXRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvc2ltcGxlLXZhbGlkYXRpb24tdGVzdC9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvY210L2NodW5rL1NpbXBsZUl0ZW1Xcml0ZXIuamF2YQppbmRleCAxNWM1ZTllLi4wMTc4Y2Y3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC9zaW1wbGUtdmFsaWRhdGlvbi10ZXN0L2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC9jbXQvY2h1bmsvU2ltcGxlSXRlbVdyaXRlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3NpbXBsZS12YWxpZGF0aW9uLXRlc3QvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL2NtdC9jaHVuay9TaW1wbGVJdGVtV3JpdGVyLmphdmEKQEAgLTE5LDcgKzE5LDcgQEAKIEBqYWthcnRhLmluamVjdC5OYW1lZCgiU2ltcGxlSXRlbVdyaXRlciIpCiBwdWJsaWMgY2xhc3MgU2ltcGxlSXRlbVdyaXRlcgogICAgIGltcGxlbWVudHMgamFrYXJ0YS5iYXRjaC5hcGkuY2h1bmsuSXRlbVdyaXRlciB7Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBvcGVuKFNlcmlhbGl6YWJsZSBlKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICB9CkBAIC0zMSwxNyArMzEsMTcgQEAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCB3cml0ZUl0ZW1zKExpc3QgbHN0KSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCJTaW1wbGVJdGVtV3JpdGVyOiIpOwotCUxpc3Q8U3RyaW5nPiBsaXN0ID0gKExpc3Q8U3RyaW5nPikgbHN0OworICAgIExpc3Q8U3RyaW5nPiBsaXN0ID0gKExpc3Q8U3RyaW5nPikgbHN0OwogICAgICAgICBmb3IgKFN0cmluZyBzIDogbGlzdCkgewogICAgICAgICAgICAgc2IuYXBwZW5kKCIgIikuYXBwZW5kKHMpOwogICAgICAgICB9CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzYi50b1N0cmluZygpKTsKLQl0cnkgeyBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDEwMDApOyB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHt9CisgICAgdHJ5IHsgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCgxMDAwKTsgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7fQogICAgIH0KIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBTZXJpYWxpemFibGUgY2hlY2twb2ludEluZm8oKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC90d28tc3RlcHMtam9iL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC90d28tc3RlcHMtam9iL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNTBhMjgyZS4uNTEyYzBmNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvdHdvLXN0ZXBzLWpvYi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3R3by1zdGVwcy1qb2IvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTMgKzE1LDEzIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJkZXZ0ZXN0LWJhdGNoLXR3by1zdGVwcy1qb2IiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJiZWFucy54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2JlYW5zLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImJhdGNoLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYmF0Y2gueG1sIi8+CkBAIC0yOSwxMSArMjksMTEgQEAKIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJiYXRjaC5qb2JzLmRpciIgdmFsdWU9ImRlc2NyaXB0b3IvYmF0Y2gtam9icyIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0iYmF0Y2hfZGVyYnkuc3FsIiB2YWx1ZT0iLi4vLi4vYmF0Y2hfZGVyYnkuc3FsIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC90d28tc3RlcHMtam9iL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3R3by1zdGVwcy1qb2IvYnVpbGQueG1sCmluZGV4IDQwODY1NGYuLmNkMDVjNzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3R3by1zdGVwcy1qb2IvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3R3by1zdGVwcy1qb2IvYnVpbGQueG1sCkBAIC0zOCw3ICszOCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC01MSwxOSArNTEsMTkgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLyouY2xhc3MiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9DbGllbnQuY2xhc3MsKiovU2xlc3MuY2xhc3MsKiovU2xlc3MzMC5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iY29weS1iYXRjaC1zcWwiIGRlcGVuZHM9ImJ1aWxkIj4KLSAgICAJPGVjaG8gbWVzc2FnZT0iKioqKiogQ29weSAke2JhdGNoX2RlcmJ5LnNxbH0gdG8gVGFyZ2V0IGRpcjogJHtlbnYuUzFBU19IT01FfS9saWIiLz4KLSAgICAJPGNvcHkgZmlsZT0iJHtiYXRjaF9kZXJieS5zcWx9IiB0b2Rpcj0iJHtlbnYuUzFBU19IT01FfS9saWIiLz4KICAgICA8L3RhcmdldD4KIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8dGFyZ2V0IG5hbWU9ImNvcHktYmF0Y2gtc3FsIiBkZXBlbmRzPSJidWlsZCI+CisgICAgICAgIDxlY2hvIG1lc3NhZ2U9IioqKioqIENvcHkgJHtiYXRjaF9kZXJieS5zcWx9IHRvIFRhcmdldCBkaXI6ICR7ZW52LlMxQVNfSE9NRX0vbGliIi8+CisgICAgICAgIDxjb3B5IGZpbGU9IiR7YmF0Y2hfZGVyYnkuc3FsfSIgdG9kaXI9IiR7ZW52LlMxQVNfSE9NRX0vbGliIi8+CisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC03MSwxMCArNzEsMTAgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvdHdvLXN0ZXBzLWpvYi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC90d28tc3RlcHMtam9iL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBjMTA3NThkLi5jMzlmNTg2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC90d28tc3RlcHMtam9iL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC90d28tc3RlcHMtam9iL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjYsNyArMjYsNyBAQAogQEVKQihuYW1lPSJlamIvR0ciLCBiZWFuSW50ZXJmYWNlPVNsZXNzLmNsYXNzKQogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTM1LDMzICszNSwzMyBAQAogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiYmF0Y2gtdHdvLXN0ZXBzLXN0YXRlbGVzcyIpOwotICAgIH0gIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBARUpCKG5hbWU9ImVqYi9rayIpIFNsZXNzIHNsZXNzOwogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgKG5ldyBJbml0aWFsQ29udGV4dCgpKS5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL0dHIik7Ci0JICAgIGxvbmcgZXhlY3V0aW9uSWQgPSBzbGVzcy5zdWJtaXRKb2IoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqIEpvYklEOiAiICsgZXhlY3V0aW9uSWQgKyAiICoqKioqKioqKioqKioqKioqKiIpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpOwotCSAgICBTdHJpbmcgam9iQmF0Y2hTdGF0dXMgPSAiIjsKLQkgICAgZm9yIChpbnQgc2VjPTEwOyBzZWM+MDsgc2VjLS0pIHsKLQkgICAgICAgIHRyeSB7Ci0JCSAgICBqb2JCYXRjaFN0YXR1cyA9IHNsZXNzLmdldEpvYkV4aXRTdGF0dXMoZXhlY3V0aW9uSWQpOwotCQkgICAgaWYgKCEgIkNPTVBMRVRFRCIuZXF1YWxzKGpvYkJhdGNoU3RhdHVzKSkgewotCQkgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2lsbCBzbGVlcCBmb3IgIiArIHNlYyArICIgbW9yZSBzZWNvbmRzLi4uOiAiICsgam9iQmF0Y2hTdGF0dXMpOwotCQkgICAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoMTAwMCk7Ci0JCSAgICB9Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQl9Ci0JICAgIH0KKyAgICAgICAgbG9uZyBleGVjdXRpb25JZCA9IHNsZXNzLnN1Ym1pdEpvYigpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKiogSm9iSUQ6ICIgKyBleGVjdXRpb25JZCArICIgKioqKioqKioqKioqKioqKioqIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIik7CisgICAgICAgIFN0cmluZyBqb2JCYXRjaFN0YXR1cyA9ICIiOworICAgICAgICBmb3IgKGludCBzZWM9MTA7IHNlYz4wOyBzZWMtLSkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGpvYkJhdGNoU3RhdHVzID0gc2xlc3MuZ2V0Sm9iRXhpdFN0YXR1cyhleGVjdXRpb25JZCk7CisgICAgICAgICAgICBpZiAoISAiQ09NUExFVEVEIi5lcXVhbHMoam9iQmF0Y2hTdGF0dXMpKSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXaWxsIHNsZWVwIGZvciAiICsgc2VjICsgIiBtb3JlIHNlY29uZHMuLi46ICIgKyBqb2JCYXRjaFN0YXR1cyk7CisgICAgICAgICAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCgxMDAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImJhdGNoLXR3by1zdGVwcy1zdGF0ZWxlc3MiLCAoIkNPTVBMRVRFRCIuZXF1YWxzKGpvYkJhdGNoU3RhdHVzKSA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCkpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImJhdGNoLXR3by1zdGVwcy1zdGF0ZWxlc3MiLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvdHdvLXN0ZXBzLWpvYi9kZXNjcmlwdG9yL2JhdGNoLWpvYnMvVHdvU3RlcHNKb2IueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvdHdvLXN0ZXBzLWpvYi9kZXNjcmlwdG9yL2JhdGNoLWpvYnMvVHdvU3RlcHNKb2IueG1sCmluZGV4IGE4NWJhMWUuLmJkN2UwODEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3R3by1zdGVwcy1qb2IvZGVzY3JpcHRvci9iYXRjaC1qb2JzL1R3b1N0ZXBzSm9iLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC90d28tc3RlcHMtam9iL2Rlc2NyaXB0b3IvYmF0Y2gtam9icy9Ud29TdGVwc0pvYi54bWwKQEAgLTIwLDE2ICsyMCwxNiBAQAogPGpvYiBpZD0idHdvLXN0ZXBzLWpvYiIgeG1sbnM9Imh0dHA6Ly9iYXRjaC5qc3IzNTIvanNsIj4KICAgICA8c3RlcCBpZD0ic3RlcDEiIG5leHQ9InN0ZXAyIj4KICAgICAgICAgPGNodW5rIGl0ZW0tY291bnQ9IjEiPgotICAgICAgICAgICAgPHJlYWRlciByZWY9IlNpbXBsZUl0ZW1SZWFkZXIiPjwvcmVhZGVyPiAKKyAgICAgICAgICAgIDxyZWFkZXIgcmVmPSJTaW1wbGVJdGVtUmVhZGVyIj48L3JlYWRlcj4KICAgICAgICAgICAgIDxwcm9jZXNzb3IgcmVmPSJTaW1wbGVJdGVtUHJvY2Vzc29yIj48L3Byb2Nlc3Nvcj4KLSAgICAgICAgICAgIDx3cml0ZXIgcmVmPSJTaW1wbGVJdGVtV3JpdGVyIj48L3dyaXRlcj4gCisgICAgICAgICAgICA8d3JpdGVyIHJlZj0iU2ltcGxlSXRlbVdyaXRlciI+PC93cml0ZXI+CiAgICAgICAgIDwvY2h1bms+CiAgICAgPC9zdGVwPgogICAgIDxzdGVwIGlkPSJzdGVwMiI+CiAgICAgICAgIDxjaHVuayBpdGVtLWNvdW50PSIyIj4KLSAgICAgICAgICAgIDxyZWFkZXIgcmVmPSJTaW1wbGVJdGVtUmVhZGVyIj48L3JlYWRlcj4gCisgICAgICAgICAgICA8cmVhZGVyIHJlZj0iU2ltcGxlSXRlbVJlYWRlciI+PC9yZWFkZXI+CiAgICAgICAgICAgICA8cHJvY2Vzc29yIHJlZj0iU2ltcGxlSXRlbVByb2Nlc3NvciI+PC9wcm9jZXNzb3I+Ci0gICAgICAgICAgICA8d3JpdGVyIHJlZj0iU2ltcGxlSXRlbVdyaXRlciI+PC93cml0ZXI+IAorICAgICAgICAgICAgPHdyaXRlciByZWY9IlNpbXBsZUl0ZW1Xcml0ZXIiPjwvd3JpdGVyPgogICAgICAgICA8L2NodW5rPgogICAgIDwvc3RlcD4KIDwvam9iPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvdHdvLXN0ZXBzLWpvYi9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvdHdvc3RlcHMvSWRHZW5lcmF0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3R3by1zdGVwcy1qb2IvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL3R3b3N0ZXBzL0lkR2VuZXJhdG9yLmphdmEKaW5kZXggMTZiMDZmZi4uYzI5ODFiZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvdHdvLXN0ZXBzLWpvYi9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvdHdvc3RlcHMvSWRHZW5lcmF0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC90d28tc3RlcHMtam9iL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC90d29zdGVwcy9JZEdlbmVyYXRvci5qYXZhCkBAIC0yMSw1ICsyMSw1IEBACiBwdWJsaWMgaW50ZXJmYWNlIElkR2VuZXJhdG9yIHsKIAogICAgIHB1YmxpYyBTdHJpbmcgbmV4dElkKCk7Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3R3by1zdGVwcy1qb2IvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL3R3b3N0ZXBzL1NpbXBsZUlkR2VuZXJhdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC90d28tc3RlcHMtam9iL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC90d29zdGVwcy9TaW1wbGVJZEdlbmVyYXRvci5qYXZhCmluZGV4IDlkYzQ3OTAuLmE1OGM0OTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3R3by1zdGVwcy1qb2IvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL3R3b3N0ZXBzL1NpbXBsZUlkR2VuZXJhdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvdHdvLXN0ZXBzLWpvYi9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvdHdvc3RlcHMvU2ltcGxlSWRHZW5lcmF0b3IuamF2YQpAQCAtMjIsOSArMjIsOSBAQAogICovCiBwdWJsaWMgY2xhc3MgU2ltcGxlSWRHZW5lcmF0b3IKICAgICBpbXBsZW1lbnRzIElkR2VuZXJhdG9yIHsKLSAgICAKKwogICAgIHByaXZhdGUgQXRvbWljSW50ZWdlciBjb3VudGVyID0gbmV3IEF0b21pY0ludGVnZXIoMCk7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIG5leHRJZCgpIHsKICAgICAgICAgcmV0dXJuICIiICsgY291bnRlci5pbmNyZW1lbnRBbmRHZXQoKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC90d28tc3RlcHMtam9iL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC90d29zdGVwcy9TaW1wbGVJdGVtUHJvY2Vzc29yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC90d28tc3RlcHMtam9iL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC90d29zdGVwcy9TaW1wbGVJdGVtUHJvY2Vzc29yLmphdmEKaW5kZXggMjFmNDJiNS4uNDJhNzZiMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvdHdvLXN0ZXBzLWpvYi9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvdHdvc3RlcHMvU2ltcGxlSXRlbVByb2Nlc3Nvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3R3by1zdGVwcy1qb2IvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL3R3b3N0ZXBzL1NpbXBsZUl0ZW1Qcm9jZXNzb3IuamF2YQpAQCAtMjMsMTEgKzIzLDExIEBACiAKIC8vICAgIEBJbmplY3QKIC8vICAgIElkR2VuZXJhdG9yIGlkR2VuOwotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIFN0cmluZyBwcm9jZXNzSXRlbShTdHJpbmcgdCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFN0cmluZ1tdIHJlY29yZCA9IHQuc3BsaXQoIiwgIik7Ci0gICAgICAgIAorCiAgICAgLy9FTVAtSUQsIE1PTlRILVlFQVIsIFNBTEFSWSwgVEFYJSwgTUVESUNBUkUlLCBPVEhFUgogICAgICAgICBpbnQgc2FsYXJ5ID0gSW50ZWdlci52YWx1ZU9mKHJlY29yZFsyXSk7CiAgICAgICAgIGRvdWJsZSB0YXggPSBEb3VibGUudmFsdWVPZihyZWNvcmRbM10pOwpAQCAtMzgsNSArMzgsNSBAQAogICAgICAgICBzYi5hcHBlbmQoIiwgIikuYXBwZW5kKHNhbGFyeSAtIChzYWxhcnkgKiB0YXggLyAxMDApIC0gKHNhbGFyeSAqIG1lZGlDYXJlIC8gMTAwKSk7CiAgICAgICAgIHJldHVybiAgc2IudG9TdHJpbmcoKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3R3by1zdGVwcy1qb2IvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL3R3b3N0ZXBzL1NpbXBsZUl0ZW1SZWFkZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3R3by1zdGVwcy1qb2IvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL3R3b3N0ZXBzL1NpbXBsZUl0ZW1SZWFkZXIuamF2YQppbmRleCA2YTRlNjg4Li5iY2ZmMDYxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC90d28tc3RlcHMtam9iL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC90d29zdGVwcy9TaW1wbGVJdGVtUmVhZGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvdHdvLXN0ZXBzLWpvYi9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvdHdvc3RlcHMvU2ltcGxlSXRlbVJlYWRlci5qYXZhCkBAIC0yMSw3ICsyMSw3IEBACiAgICAgZXh0ZW5kcyBqYWthcnRhLmJhdGNoLmFwaS5BYnN0cmFjdEl0ZW1SZWFkZXI8U3RyaW5nPiB7CiAKICAgICBwcml2YXRlIGludCBpbmRleCA9IDA7Ci0gICAgCisKICAgICAvL0VNUC1JRCwgTU9OVEgtWUVBUiwgU0FMQVJZLCBUQVglLCBNRURJQ0FSRSUsIE9USEVSCiAgICAgcHJpdmF0ZSBTdHJpbmdbXSBpdGVtcyA9IG5ldyBTdHJpbmdbXSB7CiAgICAgICAgICIxMjAtMDEsIEpBTi0yMDEzLCA4MDAwLCAyNywgMywgMCIsCkBAIC0zMyw3ICszMyw3IEBACiAgICAgICAgICIxMjAtMDcsIEpBTi0yMDEzLCAxMTAwMCwgMzYsIDUsIDAiLAogICAgICAgICAiMTIwLTA4LCBKQU4tMjAxMywgMTE1MDAsIDM2LCA1LCAwIiwKICAgICB9OwotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgb3BlbihFeHRlcm5hbGl6YWJsZSBlKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICB9CkBAIC01MSw1ICs1MSw1IEBACiAgICAgcHVibGljIEV4dGVybmFsaXphYmxlIGNoZWNrcG9pbnRJbmZvKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvdHdvLXN0ZXBzLWpvYi9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvdHdvc3RlcHMvU2ltcGxlSXRlbVdyaXRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvdHdvLXN0ZXBzLWpvYi9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvdHdvc3RlcHMvU2ltcGxlSXRlbVdyaXRlci5qYXZhCmluZGV4IGVmMTQ3OTIuLjg4YjIzN2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2JhdGNoL3R3by1zdGVwcy1qb2IvZWpiL2NvbS9vcmFjbGUvamF2YWVlNy9zYW1wbGVzL2JhdGNoL3R3b3N0ZXBzL1NpbXBsZUl0ZW1Xcml0ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC90d28tc3RlcHMtam9iL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC90d29zdGVwcy9TaW1wbGVJdGVtV3JpdGVyLmphdmEKQEAgLTE5LDcgKzE5LDcgQEAKIEBqYWthcnRhLmluamVjdC5OYW1lZCgiU2ltcGxlSXRlbVdyaXRlciIpCiBwdWJsaWMgY2xhc3MgU2ltcGxlSXRlbVdyaXRlcgogICAgIGV4dGVuZHMgamFrYXJ0YS5iYXRjaC5hcGkuQWJzdHJhY3RJdGVtV3JpdGVyPFN0cmluZz4gewotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgb3BlbihFeHRlcm5hbGl6YWJsZSBlKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICB9CkBAIC00MSw1ICs0MSw1IEBACiAgICAgcHVibGljIEV4dGVybmFsaXphYmxlIGNoZWNrcG9pbnRJbmZvKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvYmF0Y2gvdHdvLXN0ZXBzLWpvYi9lamIvY29tL29yYWNsZS9qYXZhZWU3L3NhbXBsZXMvYmF0Y2gvdHdvc3RlcHMvU2xlc3NCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC90d28tc3RlcHMtam9iL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC90d29zdGVwcy9TbGVzc0JlYW4uamF2YQppbmRleCBiOTZjZTk2Li5lODM3ZTAyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC90d28tc3RlcHMtam9iL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC90d29zdGVwcy9TbGVzc0JlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9iYXRjaC90d28tc3RlcHMtam9iL2VqYi9jb20vb3JhY2xlL2phdmFlZTcvc2FtcGxlcy9iYXRjaC90d29zdGVwcy9TbGVzc0JlYW4uamF2YQpAQCAtMzMsMzIgKzMzLDMyIEBACiAgICAgfQogCiAgICAgcHVibGljIGxvbmcgc3VibWl0Sm9iKCkgewotCXRyeSB7Ci0JICBKb2JPcGVyYXRvciBqb2JPcGVyYXRvciA9IEJhdGNoUnVudGltZS5nZXRKb2JPcGVyYXRvcigpOworICAgIHRyeSB7CisgICAgICBKb2JPcGVyYXRvciBqb2JPcGVyYXRvciA9IEJhdGNoUnVudGltZS5nZXRKb2JPcGVyYXRvcigpOwogCi0JICBQcm9wZXJ0aWVzIHByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKLQkgIGZvciAoaW50IGk9MDsgaTw5OyBpKyspCi0JCXByb3BzLnB1dCgiUGFyYW0tRm9yLVR3b1N0ZXBzLUpvYi0iICsgaSwgIlZhbHVlLSIgKyBpKTsKLQkgIHJldHVybiAgam9iT3BlcmF0b3Iuc3RhcnQoIlR3b1N0ZXBzSm9iIiwgcHJvcHMpOworICAgICAgUHJvcGVydGllcyBwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7CisgICAgICBmb3IgKGludCBpPTA7IGk8OTsgaSsrKQorICAgICAgICBwcm9wcy5wdXQoIlBhcmFtLUZvci1Ud29TdGVwcy1Kb2ItIiArIGksICJWYWx1ZS0iICsgaSk7CisgICAgICByZXR1cm4gIGpvYk9wZXJhdG9yLnN0YXJ0KCJUd29TdGVwc0pvYiIsIHByb3BzKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihleCk7Ci0JfQorICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZXgpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgU3RyaW5nIGdldEpvYkV4aXRTdGF0dXMobG9uZyBleGVjdXRpb25JZCkgewotCXRyeSB7Ci0JICBKb2JPcGVyYXRvciBqb2JPcGVyYXRvciA9IEJhdGNoUnVudGltZS5nZXRKb2JPcGVyYXRvcigpOwotCSAgSm9iRXhlY3V0aW9uIGplID0gIGpvYk9wZXJhdG9yLmdldEpvYkV4ZWN1dGlvbihleGVjdXRpb25JZCk7Ci0JICByZXR1cm4gamUuZ2V0RXhpdFN0YXR1cygpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCSAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZXgpOwotCX0KKyAgICB0cnkgeworICAgICAgSm9iT3BlcmF0b3Igam9iT3BlcmF0b3IgPSBCYXRjaFJ1bnRpbWUuZ2V0Sm9iT3BlcmF0b3IoKTsKKyAgICAgIEpvYkV4ZWN1dGlvbiBqZSA9ICBqb2JPcGVyYXRvci5nZXRKb2JFeGVjdXRpb24oZXhlY3V0aW9uSWQpOworICAgICAgcmV0dXJuIGplLmdldEV4aXRTdGF0dXMoKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGV4KTsKKyAgICB9CiAKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiB3YXNFamJDcmVhdGVDYWxsZWQoKSB7Ci0JcmV0dXJuIGVqYkNyZWF0ZUNhbGxlZDsKKyAgICByZXR1cm4gZWpiQ3JlYXRlQ2FsbGVkOwogICAgIH0KIAotCQkJCQkJCQkJCQkJCQkgICAgICAgICAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2FsdGVybmF0aXZlcy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvYWx0ZXJuYXRpdmVzL1dlYlRlc3QuamF2YQppbmRleCA0NTA1MTQ3Li41MTEwYjg2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvYWx0ZXJuYXRpdmVzL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvYWx0ZXJuYXRpdmVzL1dlYlRlc3QuamF2YQpAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVGVzdGluZyBBbHRlcm5hdGl2ZXMiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC00Niw3ICs0Niw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVNUX05BTUUgKyAiIHRlc3QgZmFpbGVkIik7CkBAIC01Niw3ICs1Niw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgICAgICAgICAgKyAiL215dXJsIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvcGVuaW5nIGNvbm5lY3Rpb24gdG8gIiArIHVybCk7CkBAIC05NiwxMCArOTYsMTAgQEAKICAgICAgICAgICAgIGlmIChFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9hbHRlcm5hdGl2ZXMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9hbHRlcm5hdGl2ZXMvYnVpbGQucHJvcGVydGllcwppbmRleCAzMTdiMzcyLi45NmY0MmVkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvYWx0ZXJuYXRpdmVzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2FsdGVybmF0aXZlcy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGktYWx0ZXJuYXRpdmVzIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LWFubm90YXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9hbHRlcm5hdGl2ZXMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2FsdGVybmF0aXZlcy9idWlsZC54bWwKaW5kZXggYzBkOTA0ZC4uODcyZjM2NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2FsdGVybmF0aXZlcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2FsdGVybmF0aXZlcy9idWlsZC54bWwKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDcsMjMgKzQ3LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzUsMTAgKzc1LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2FtYmlndW91cy1kZXBzL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9hbWJpZ3VvdXMtZGVwcy9XZWJUZXN0LmphdmEKaW5kZXggODQ0YzJhOC4uNDg2YmNhZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2FtYmlndW91cy1kZXBzL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvYW1iaWd1b3VzLWRlcHMvV2ViVGVzdC5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJUZXN0aW5nIEFtYmlndW91cyBkZXBlbmRlbmNpZXMiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC00Niw3ICs0Niw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVNUX05BTUUgKyAiIHRlc3QgZmFpbGVkIik7CkBAIC01Niw3ICs1Niw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgICAgICAgICAgKyAiL215dXJsIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvcGVuaW5nIGNvbm5lY3Rpb24gdG8gIiArIHVybCk7CkBAIC05NiwxMCArOTYsMTAgQEAKICAgICAgICAgICAgIGlmIChFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9hbWJpZ3VvdXMtZGVwcy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2FtYmlndW91cy1kZXBzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMmI3M2I5OC4uZWI0MzE1ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2FtYmlndW91cy1kZXBzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2FtYmlndW91cy1kZXBzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaS1hbWJpZ3VvdXNkZXBzIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LWFubm90YXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9hbWJpZ3VvdXMtZGVwcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvYW1iaWd1b3VzLWRlcHMvYnVpbGQueG1sCmluZGV4IGMwZDkwNGQuLjg3MmYzNjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9hbWJpZ3VvdXMtZGVwcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2FtYmlndW91cy1kZXBzL2J1aWxkLnhtbApAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NywyMyArNDcsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NSwxMCArNzUsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvYW1iaWd1b3VzLWRlcHMvZGVzY3JpcHRvci9iZWFucy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvYW1iaWd1b3VzLWRlcHMvZGVzY3JpcHRvci9iZWFucy54bWwKaW5kZXggMTlmMDcwZi4uZjA1ZjkwMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2FtYmlndW91cy1kZXBzL2Rlc2NyaXB0b3IvYmVhbnMueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9hbWJpZ3VvdXMtZGVwcy9kZXNjcmlwdG9yL2JlYW5zLnhtbApAQCAtMjMsMTEgKzIzLDExIEBACiAgIDxhbHRlcm5hdGl2ZXM+CiAgICAgPGNsYXNzPnRlc3QuYXJ0aWZhY3RzLk1vY2tQYXltZW50UHJvY2Vzc29yPC9jbGFzcz4KICAgICA8IS0tIERpc2FibGVkTW9ja1BheW1lbnRQcm9jZXNzb3IgaXMgbm90IGVuYWJsZWQgLS0+Ci0gICAgPCEtLSAKKyAgICA8IS0tCiAgICAgICAgIDxjbGFzcz50ZXN0LmFydGlmYWN0cy5EaXNhYmxlZE1vY2tQYXltZW50UHJvY2Vzc29yPC9jbGFzcz4KICAgICAtLT4KLSAgICAKKwogICAgIDwhLS0gIE1vY2tDYXNoUmVsaWFibGVQYXltZW50UHJvY2Vzc29yIGFuZCBNb2NrQ2hlcXVlUGF5bWVudFByb2Nlc3NvciBhcmUgbm90IGVuYWJsZWQgLS0+CiAgIDwvYWx0ZXJuYXRpdmVzPgotICAKKwogPC9iZWFucz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvYnVpbGQueG1sCmluZGV4IGNjZWM1NzQuLjYwMDVhZDEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2J1aWxkLnhtbApAQCAtMzAsNyArMzAsNyBAQAogICAgICZjb21tb25CdWlsZDsKICAgICAmY29tbW9uUnVuOwogICAgICZyZXBvcnRpbmc7Ci0gICAgCisKICAgICA8cHJvcGVydHkgbmFtZT0iY2RpLXRhcmdldCIgdmFsdWU9ImFsbCIgLz4KIAogICAgIDx0YXNrZGVmIHJlc291cmNlPSJuZXQvc2YvYW50Y29udHJpYi9hbnRjb250cmliLnByb3BlcnRpZXMiPgpAQCAtMTc4LDEyICsxNzgsMTIgQEAKICAgICAgICAgPGFudCBkaXI9InF1YWxpZmllcnMiIHRhcmdldD0iJHtjZGktdGFyZ2V0fSIgLz4KIAogICAgICAgICA8IS0tCi0JICAgICAgICBOb3QgcnVubmluZyB1bnRpbCBodHRwczovL2lzc3Vlcy5qYm9zcy5vcmcvYnJvd3NlL0NESS0zMzEgaXMgc29ydGVkIG91dC4KLQkgICAgICAgIEluIDEuMS4xMC5GaW5hbCB0aGUgdGVzdCBwYXNzZXMuCi0JICAgICAgICBJbiAyLjAgQmV0YSBpdCBmYWlscy4KLQkgICAgICAgIFNlZSBlbWFpbCBmcm9tIEpvemVmIDMvNC8xMwotCSAgICAgICAgPGFudCBkaXI9ImFsdGVybmF0aXZlcyIgdGFyZ2V0PSIke2NkaS10YXJnZXR9Ii8+Ci0JICAgICAgICA8YW50IGRpcj0iYW1iaWd1b3VzLWRlcHMiIHRhcmdldD0iJHtjZGktdGFyZ2V0fSIvPgorICAgICAgICAgICAgTm90IHJ1bm5pbmcgdW50aWwgaHR0cHM6Ly9pc3N1ZXMuamJvc3Mub3JnL2Jyb3dzZS9DREktMzMxIGlzIHNvcnRlZCBvdXQuCisgICAgICAgICAgICBJbiAxLjEuMTAuRmluYWwgdGhlIHRlc3QgcGFzc2VzLgorICAgICAgICAgICAgSW4gMi4wIEJldGEgaXQgZmFpbHMuCisgICAgICAgICAgICBTZWUgZW1haWwgZnJvbSBKb3plZiAzLzQvMTMKKyAgICAgICAgICAgIDxhbnQgZGlyPSJhbHRlcm5hdGl2ZXMiIHRhcmdldD0iJHtjZGktdGFyZ2V0fSIvPgorICAgICAgICAgICAgPGFudCBkaXI9ImFtYmlndW91cy1kZXBzIiB0YXJnZXQ9IiR7Y2RpLXRhcmdldH0iLz4KICAgICAgICAgLS0+CiAKICAgICAgICAgPGVjaG8gbWVzc2FnZT0iUnVubmluZyBldmVudHMiIC8+CkBAIC0yMTEsMTEgKzIxMSwxMSBAQAogICAgICAgICA8YW50IGRpcj0icHJvZHVjZXItbWV0aG9kcyIgdGFyZ2V0PSIke2NkaS10YXJnZXR9IiAvPgogCiAgICAgICAgIDwhLS0KLQkgICAgICAgIE5vdCBydW5uaW5nIHVudGlsIGh0dHBzOi8vaXNzdWVzLmpib3NzLm9yZy9icm93c2UvQ0RJLTMzMSBpcyBzb3J0ZWQgb3V0LgotCSAgICAgICAgSW4gMS4xLjEwLkZpbmFsIHRoZSB0ZXN0IHBhc3Nlcy4KLQkgICAgICAgIEluIDIuMCBCZXRhIGl0IGZhaWxzLgotCSAgICAgICAgU2VlIGVtYWlsIGZyb20gSm96ZWYgMy80LzEzCi0JICAgICAgICA8YW50IGRpcj0icHJvZ3JhbW1hdGljLWxvb2t1cCIgdGFyZ2V0PSIke2NkaS10YXJnZXR9Ii8+CisgICAgICAgICAgICBOb3QgcnVubmluZyB1bnRpbCBodHRwczovL2lzc3Vlcy5qYm9zcy5vcmcvYnJvd3NlL0NESS0zMzEgaXMgc29ydGVkIG91dC4KKyAgICAgICAgICAgIEluIDEuMS4xMC5GaW5hbCB0aGUgdGVzdCBwYXNzZXMuCisgICAgICAgICAgICBJbiAyLjAgQmV0YSBpdCBmYWlscy4KKyAgICAgICAgICAgIFNlZSBlbWFpbCBmcm9tIEpvemVmIDMvNC8xMworICAgICAgICAgICAgPGFudCBkaXI9InByb2dyYW1tYXRpYy1sb29rdXAiIHRhcmdldD0iJHtjZGktdGFyZ2V0fSIvPgogICAgICAgICAtLT4KIAogICAgICAgICA8ZWNobyBtZXNzYWdlPSJSdW5uaW5nIHNjb3BlcyIgLz4KQEAgLTI0Niw3ICsyNDYsNyBAQAogICAgICAgICAgICAgPC90aGVuPgogICAgICAgICAgICAgPGVsc2U+CiAgICAgICAgICAgICAgICAgPCEtLQotICAgICAgICAgICAgICAgIAlOb3QgcnVubmluZyB1bnRpbCBmaWdoZXJmaXNoIGlzIGJhY2sKKyAgICAgICAgICAgICAgICAgICAgTm90IHJ1bm5pbmcgdW50aWwgZmlnaGVyZmlzaCBpcyBiYWNrCiAgICAgICAgICAgICAgICAgLS0+CiAgICAgICAgICAgICAgICAgPCEtLQogICAgICAgICAgICAgICAgIDxhbnQgZGlyPSJvc2dpLWNkaSIgdGFyZ2V0PSIke2NkaS10YXJnZXR9Ii8+CkBAIC0yNjQsMTYgKzI2NCwxNiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxlY2hvPiBVc2FnZToKLQkJYW50IGNkaSAoRXhlY3V0ZXMgdGhlIGNkaSB0ZXN0cykKLQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBjZGkgdGVzdHMpCi0JCWFudCBjbGVhbiAoY2xlYW5zIGFsbCB0aGUgY2RpIHRlc3RzKQotCQlhbnQgYnVpbGQgKGJ1aWxkcyBhbGwgdGhlIGNkaSB0ZXN0cykKLQkJYW50IHNldHVwIChzZXRzIHVwIGFsbCByZXNvdXJjZXMgZm9yIGNkaSB0ZXN0cykKLQkJYW50IGRlcGxveSAoZGVwbG95cyBhbGwgdGhlIGNkaSBhcHBzKQotCQlhbnQgcnVuIChFeGVjdXRlcyBhbGwgdGhlIGNkaSB0ZXN0cykKLQkJYW50IHVuZGVwbG95ICh1bmRlcGxveXMgYWxsIHRoZSAgY2RpIGFwcHMpCi0JCWFudCB1bnNldHVwICh1bnNldHMgYWxsIHJlc291cmNlcyBmb3IgY2RpIHRlc3RzKQotCTwvZWNobz4KKyAgICAgICAgYW50IGNkaSAoRXhlY3V0ZXMgdGhlIGNkaSB0ZXN0cykKKyAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBjZGkgdGVzdHMpCisgICAgICAgIGFudCBjbGVhbiAoY2xlYW5zIGFsbCB0aGUgY2RpIHRlc3RzKQorICAgICAgICBhbnQgYnVpbGQgKGJ1aWxkcyBhbGwgdGhlIGNkaSB0ZXN0cykKKyAgICAgICAgYW50IHNldHVwIChzZXRzIHVwIGFsbCByZXNvdXJjZXMgZm9yIGNkaSB0ZXN0cykKKyAgICAgICAgYW50IGRlcGxveSAoZGVwbG95cyBhbGwgdGhlIGNkaSBhcHBzKQorICAgICAgICBhbnQgcnVuIChFeGVjdXRlcyBhbGwgdGhlIGNkaSB0ZXN0cykKKyAgICAgICAgYW50IHVuZGVwbG95ICh1bmRlcGxveXMgYWxsIHRoZSAgY2RpIGFwcHMpCisgICAgICAgIGFudCB1bnNldHVwICh1bnNldHMgYWxsIHJlc291cmNlcyBmb3IgY2RpIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVwb3J0LWxvY2FsIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9jb25maWcvZGF0YWJhc2UueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2NvbmZpZy9kYXRhYmFzZS54bWwKaW5kZXggZDRkMWZiMC4uNWE1ODMxMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2NvbmZpZy9kYXRhYmFzZS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2NvbmZpZy9kYXRhYmFzZS54bWwKQEAgLTI4LDE2ICsyOCwxNiBAQAogPCEtLQogPHByb2plY3QgbmFtZT0ib3JhY2xlLWRiLXNldHRpbmdzIiBkZWZhdWx0PSJjcmVhdGUtamRiYy1jb25wb29sLWNvbm5lY3RvciIgYmFzZWRpcj0iLiI+CiAKLSZjb21tb247IAorJmNvbW1vbjsKICZ0ZXN0Y29tbW9uOwogLS0+CiAKIDx0YXJnZXQgbmFtZT0iY3JlYXRlLWpkYmMtY29ucG9vbC1jb25uZWN0b3IiIGRlcGVuZHM9ImRlZmF1bHQtamRiYy1jb25wb29sLCBvcmFjbGUtamRiYy1jb25wb29sIi8+CiAKIDx0YXJnZXQgbmFtZT0iZGVmYXVsdC1qZGJjLWNvbnBvb2wiIGRlcGVuZHM9ImluaXQtY29tbW9uIiB1bmxlc3M9Im9yYWNsZSI+Ci0JPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1jb25ucG9vbC1jb21tb24iLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiIvPgogPC90YXJnZXQ+Ci0JICAgCisKIDx0YXJnZXQgbmFtZT0ib3JhY2xlLWpkYmMtY29ucG9vbCIgZGVwZW5kcz0iaW5pdC1jb21tb24iIGlmPSJvcmFjbGUiPgogPGVjaG8gbWVzc2FnZT0iY3JlYXRpbmcgamRiYyBjb25uZWN0aW9uIHBvb2wgJHtqZGJjLmNvbnBvb2wubmFtZX0iCiAgICAgbGV2ZWw9InZlcmJvc2UiLz4KQEAgLTUwLDEyICs1MCwxMiBAQAogICAgICAgICA8YXJnIGxpbmU9IiR7amRiYy5jb25wb29sLm5hbWV9Ii8+CiAgICAgPC9leGVjPgogICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0LW9yYWNsZS1wcm9wcyI+Ci0JPHBhcmFtIG5hbWU9InBvb2wudHlwZSIgdmFsdWU9ImpkYmMiLz4KLQk8cGFyYW0gbmFtZT0iY29ucG9vbC5uYW1lIiB2YWx1ZT0iJHtqZGJjLmNvbnBvb2wubmFtZX0iLz4KKyAgICA8cGFyYW0gbmFtZT0icG9vbC50eXBlIiB2YWx1ZT0iamRiYyIvPgorICAgIDxwYXJhbSBuYW1lPSJjb25wb29sLm5hbWUiIHZhbHVlPSIke2pkYmMuY29ucG9vbC5uYW1lfSIvPgogICAgIDwvYW50Y2FsbD4KIDwvdGFyZ2V0PgogCi08dGFyZ2V0IG5hbWU9InNldC1vcmFjbGUtcHJvcHMiIGRlcGVuZHM9ImluaXQtY29tbW9uIiBpZj0ib3JhY2xlIj4gCis8dGFyZ2V0IG5hbWU9InNldC1vcmFjbGUtcHJvcHMiIGRlcGVuZHM9ImluaXQtY29tbW9uIiBpZj0ib3JhY2xlIj4KICAgPHByb3BlcnR5IGZpbGU9IiR7ZW52LkFQU19IT01FfS9kZXZ0ZXN0cy9jb25uZWN0b3IvY29uZmlnL29yYWNsZS5wcm9wZXJ0aWVzIi8+CiAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0IiAvPgpAQCAtOTcsMTUgKzk3LDE1IEBACiAKIDx0YXJnZXQgbmFtZT0iZXhlY3V0ZS1zcWwtY29ubmVjdG9yIiBkZXBlbmRzPSJpbml0LWNvbW1vbiwgZGVmYXVsdC1zcWwsIHNxbC1vcmFjbGUiLz4KIAotPHRhcmdldCBuYW1lPSJkZWZhdWx0LXNxbCIgZGVwZW5kcz0iaW5pdC1jb21tb24iIHVubGVzcz0ib3JhY2xlIiA+IAotCTxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIi8+Cis8dGFyZ2V0IG5hbWU9ImRlZmF1bHQtc3FsIiBkZXBlbmRzPSJpbml0LWNvbW1vbiIgdW5sZXNzPSJvcmFjbGUiID4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiIvPgogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0ic3FsLW9yYWNsZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iIGlmPSJvcmFjbGUiPgotCTxwcm9wZXJ0eSBmaWxlPSIke2Vudi5BUFNfSE9NRX0vZGV2dGVzdHMvY29ubmVjdG9yL2NvbmZpZy9vcmFjbGUucHJvcGVydGllcyIvPgotCTxwcm9wZXJ0eSBuYW1lPSJkb21haW4ubGliLmV4dCIgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2xpYi9leHQiLz4KLQk8cHJvcGVydHkgbmFtZT0ib3JhY2xlLmRyaXZlci5wYXRoIiB2YWx1ZT0iJHtkb21haW4ubGliLmV4dH0vc21vcmFjbGUuamFyOiR7ZG9tYWluLmxpYi5leHR9L3NtYmFzZS5qYXI6JHtkb21haW4ubGliLmV4dH0vc21yZXNvdXJjZS5qYXI6JHtkb21haW4ubGliLmV4dH0vc211dGlsLmphcjoke2RvbWFpbi5saWIuZXh0fS9zbXNweS5qYXI6JHtkb21haW4ubGliLmV4dH0vT3JhbnhvLmphciIvPgotCTxlY2hvIG1lc3NhZ2U9IiR7b3JhY2xlRm9yQ29ubmVjdG9yLmRyaXZlcn0iLz4KKyAgICA8cHJvcGVydHkgZmlsZT0iJHtlbnYuQVBTX0hPTUV9L2RldnRlc3RzL2Nvbm5lY3Rvci9jb25maWcvb3JhY2xlLnByb3BlcnRpZXMiLz4KKyAgICA8cHJvcGVydHkgbmFtZT0iZG9tYWluLmxpYi5leHQiIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9saWIvZXh0Ii8+CisgICAgPHByb3BlcnR5IG5hbWU9Im9yYWNsZS5kcml2ZXIucGF0aCIgdmFsdWU9IiR7ZG9tYWluLmxpYi5leHR9L3Ntb3JhY2xlLmphcjoke2RvbWFpbi5saWIuZXh0fS9zbWJhc2UuamFyOiR7ZG9tYWluLmxpYi5leHR9L3NtcmVzb3VyY2UuamFyOiR7ZG9tYWluLmxpYi5leHR9L3NtdXRpbC5qYXI6JHtkb21haW4ubGliLmV4dH0vc21zcHkuamFyOiR7ZG9tYWluLmxpYi5leHR9L09yYW54by5qYXIiLz4KKyAgICA8ZWNobyBtZXNzYWdlPSIke29yYWNsZUZvckNvbm5lY3Rvci5kcml2ZXJ9Ii8+CiA8ZWNobyBtZXNzYWdlPSJFeGVjdXRpbmcgc3FsIHN0YXRlbWVudCBhdCAke2Jhc2VkaXJ9IGZyb20gJHtzcWwuZmlsZX0iCiAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgPHNxbApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2RlY29yYXRvcnMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2RlY29yYXRvcnMvYnVpbGQueG1sCmluZGV4IDgyM2IxYjEuLmIxODgzYzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9kZWNvcmF0b3JzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZGVjb3JhdG9ycy9idWlsZC54bWwKQEAgLTgyLDE1ICs4MiwxNSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+IFVzYWdlOgotCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGRlY29yYXRvcnMgdGVzdHMpCi0JCWFudCBjbGVhbiAoY2xlYW5zIGFsbCB0aGUgZGVjb3JhdG9ycyB0ZXN0cykKLQkJYW50IGJ1aWxkIChidWlsZHMgYWxsIHRoZSBkZWNvcmF0b3JzIHRlc3RzKQotCQlhbnQgc2V0dXAgKHNldHMgdXAgYWxsIHJlc291cmNlcyBmb3IgZGVjb3JhdG9ycyB0ZXN0cykKLQkJYW50IGRlcGxveSAoZGVwbG95cyBhbGwgdGhlIGRlY29yYXRvcnMgYXBwcykKLQkJYW50IHJ1biAoRXhlY3V0ZXMgYWxsIHRoZSBkZWNvcmF0b3JzIHRlc3RzKQotCQlhbnQgdW5kZXBsb3kgKHVuZGVwbG95cyBhbGwgdGhlICBkZWNvcmF0b3JzIGFwcHMpCi0JCWFudCB1bnNldHVwICh1bnNldHMgYWxsIHJlc291cmNlcyBmb3IgZGVjb3JhdG9ycyB0ZXN0cykKLQk8L2VjaG8+CisgICAgPGVjaG8+IFVzYWdlOgorICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGRlY29yYXRvcnMgdGVzdHMpCisgICAgICAgIGFudCBjbGVhbiAoY2xlYW5zIGFsbCB0aGUgZGVjb3JhdG9ycyB0ZXN0cykKKyAgICAgICAgYW50IGJ1aWxkIChidWlsZHMgYWxsIHRoZSBkZWNvcmF0b3JzIHRlc3RzKQorICAgICAgICBhbnQgc2V0dXAgKHNldHMgdXAgYWxsIHJlc291cmNlcyBmb3IgZGVjb3JhdG9ycyB0ZXN0cykKKyAgICAgICAgYW50IGRlcGxveSAoZGVwbG95cyBhbGwgdGhlIGRlY29yYXRvcnMgYXBwcykKKyAgICAgICAgYW50IHJ1biAoRXhlY3V0ZXMgYWxsIHRoZSBkZWNvcmF0b3JzIHRlc3RzKQorICAgICAgICBhbnQgdW5kZXBsb3kgKHVuZGVwbG95cyBhbGwgdGhlICBkZWNvcmF0b3JzIGFwcHMpCisgICAgICAgIGFudCB1bnNldHVwICh1bnNldHMgYWxsIHJlc291cmNlcyBmb3IgZGVjb3JhdG9ycyB0ZXN0cykKKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZGVjb3JhdG9ycy9kZWNvcmF0b3JzLW92ZXItYmVhbnMtZnJvbS1wcm9kdWNlci1tZXRob2RzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZGVjb3JhdG9ycy9kZWNvcmF0b3JzLW92ZXItYmVhbnMtZnJvbS1wcm9kdWNlci1tZXRob2RzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNTgxYmU5OS4uYzJmZjI0NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2RlY29yYXRvcnMvZGVjb3JhdG9ycy1vdmVyLWJlYW5zLWZyb20tcHJvZHVjZXItbWV0aG9kcy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9kZWNvcmF0b3JzL2RlY29yYXRvcnMtb3Zlci1iZWFucy1mcm9tLXByb2R1Y2VyLW1ldGhvZHMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1kZWNvcmF0b3ItZm9yLWJlZWFucy1mcm9tLXByb2R1Y2VyLW1ldGhvZHMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9kZWNvcmF0b3JzL2RlY29yYXRvcnMtb3Zlci1iZWFucy1mcm9tLXByb2R1Y2VyLW1ldGhvZHMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2RlY29yYXRvcnMvZGVjb3JhdG9ycy1vdmVyLWJlYW5zLWZyb20tcHJvZHVjZXItbWV0aG9kcy9idWlsZC54bWwKaW5kZXggMGI5YjNhMy4uMGExZjJmOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2RlY29yYXRvcnMvZGVjb3JhdG9ycy1vdmVyLWJlYW5zLWZyb20tcHJvZHVjZXItbWV0aG9kcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2RlY29yYXRvcnMvZGVjb3JhdG9ycy1vdmVyLWJlYW5zLWZyb20tcHJvZHVjZXItbWV0aG9kcy9idWlsZC54bWwKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iY2xpZW50L3Rlc3QvY2xpZW50IiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00OCwyMyArNDgsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iY2xpZW50IiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0idGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJ0ZXN0LmNsaWVudC5XZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9kZWNvcmF0b3JzL2RlY29yYXRvcnMtb3Zlci1iZWFucy1mcm9tLXByb2R1Y2VyLW1ldGhvZHMvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9kZWNvcmF0b3JzL2RlY29yYXRvcnMtb3Zlci1iZWFucy1mcm9tLXByb2R1Y2VyLW1ldGhvZHMvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQppbmRleCBkNDQ1YjY5Li5lNDI4NjAzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZGVjb3JhdG9ycy9kZWNvcmF0b3JzLW92ZXItYmVhbnMtZnJvbS1wcm9kdWNlci1tZXRob2RzL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2RlY29yYXRvcnMvZGVjb3JhdG9ycy1vdmVyLWJlYW5zLWZyb20tcHJvZHVjZXItbWV0aG9kcy9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGludGVyY2VwdG9ycyIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ5LDcgKzQ5LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKQEAgLTU5LDcgKzU5LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICArICIvbXl1cmwiOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9wZW5pbmcgY29ubmVjdGlvbiB0byAiICsgdXJsKTsKQEAgLTk4LDEwICs5OCwxMCBAQAogICAgICAgICAgICAgaWYgKEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2RlY29yYXRvcnMvZGVjb3JhdG9ycy1vdmVyLWJlYW5zLWZyb20tcHJvZHVjZXItbWV0aG9kcy9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEJlYW5EZWNvcmF0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9kZWNvcmF0b3JzL2RlY29yYXRvcnMtb3Zlci1iZWFucy1mcm9tLXByb2R1Y2VyLW1ldGhvZHMvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RCZWFuRGVjb3JhdG9yLmphdmEKaW5kZXggM2M5Zjg0Zi4uN2Q2NjM4MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2RlY29yYXRvcnMvZGVjb3JhdG9ycy1vdmVyLWJlYW5zLWZyb20tcHJvZHVjZXItbWV0aG9kcy9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEJlYW5EZWNvcmF0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZGVjb3JhdG9ycy9kZWNvcmF0b3JzLW92ZXItYmVhbnMtZnJvbS1wcm9kdWNlci1tZXRob2RzL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0QmVhbkRlY29yYXRvci5qYXZhCkBAIC0yMiw5ICsyMiw5IEBACiAKIEBEZWNvcmF0b3IKIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBUZXN0QmVhbkRlY29yYXRvciBpbXBsZW1lbnRzIFRlc3RCZWFuSW50ZXJmYWNlewotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGRlY29yYXRvckNhbGxlZCA9IGZhbHNlOwotICAgIAorCiAgICAgQEluamVjdAogICAgIEBEZWxlZ2F0ZQogICAgIEBQcm9kdWNlZEF0UnVudGltZQpAQCAtMzYsNyArMzYsNyBAQAogICAgICAgICBkZWNvcmF0b3JDYWxsZWQgPSB0cnVlOwogICAgICAgICByZXR1cm4gdGIubTEoKTsKICAgICB9Ci0gICAgCi0gICAgCisKKwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZGVjb3JhdG9ycy9kZWNvcmF0b3JzLW92ZXItYmVhbnMtZnJvbS1wcm9kdWNlci1tZXRob2RzL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1Rlc3REZWNvcmF0aW9uT2ZCZWFuc0Zyb21Qcm9kdWNlck1ldGhvZHNUZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2RlY29yYXRvcnMvZGVjb3JhdG9ycy1vdmVyLWJlYW5zLWZyb20tcHJvZHVjZXItbWV0aG9kcy9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9UZXN0RGVjb3JhdGlvbk9mQmVhbnNGcm9tUHJvZHVjZXJNZXRob2RzVGVzdFNlcnZsZXQuamF2YQppbmRleCAxNzJhN2UzLi41ODkwMTUzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZGVjb3JhdG9ycy9kZWNvcmF0b3JzLW92ZXItYmVhbnMtZnJvbS1wcm9kdWNlci1tZXRob2RzL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1Rlc3REZWNvcmF0aW9uT2ZCZWFuc0Zyb21Qcm9kdWNlck1ldGhvZHNUZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9kZWNvcmF0b3JzL2RlY29yYXRvcnMtb3Zlci1iZWFucy1mcm9tLXByb2R1Y2VyLW1ldGhvZHMvc2VydmxldC90ZXN0L3NlcnZsZXQvVGVzdERlY29yYXRpb25PZkJlYW5zRnJvbVByb2R1Y2VyTWV0aG9kc1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTM1LDcgKzM1LDcgQEAKICAgICBASW5qZWN0CiAgICAgQFByb2R1Y2VkQXRSdW50aW1lCiAgICAgVGVzdEJlYW5JbnRlcmZhY2UgdGI7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXJ2aWNlKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzKQogICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uIHsKIApAQCAtNDksNyArNDksNyBAQAogICAgICAgICB0Yi5tMSgpOwogICAgICAgICBpZiAoIVRlc3RCZWFuRGVjb3JhdG9yLmRlY29yYXRvckNhbGxlZCkKICAgICAgICAgICAgIG1zZyArPSAiZGVjb3JhdG9yIGZvciBiZWFucyBmcm9tIHByb2R1Y2VyIG1ldGhvZHMgbm90IGNhbGxlZCI7Ci0gICAgICAgIAorCiAgICAgICAgIHdyaXRlci53cml0ZShtc2cgKyAiXG4iKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9kZWNvcmF0b3JzL3NpbXBsZS1kZWNvcmF0b3IvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9kZWNvcmF0b3JzL3NpbXBsZS1kZWNvcmF0b3IvYnVpbGQucHJvcGVydGllcwppbmRleCA1ZDQ1YjA3Li44NTVkNDc3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZGVjb3JhdG9ycy9zaW1wbGUtZGVjb3JhdG9yL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2RlY29yYXRvcnMvc2ltcGxlLWRlY29yYXRvci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNpbXBsZS1kZWNvcmF0b3IiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9kZWNvcmF0b3JzL3NpbXBsZS1kZWNvcmF0b3IvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2RlY29yYXRvcnMvc2ltcGxlLWRlY29yYXRvci9idWlsZC54bWwKaW5kZXggMGI5YjNhMy4uMGExZjJmOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2RlY29yYXRvcnMvc2ltcGxlLWRlY29yYXRvci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2RlY29yYXRvcnMvc2ltcGxlLWRlY29yYXRvci9idWlsZC54bWwKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iY2xpZW50L3Rlc3QvY2xpZW50IiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00OCwyMyArNDgsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iY2xpZW50IiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0idGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJ0ZXN0LmNsaWVudC5XZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9kZWNvcmF0b3JzL3NpbXBsZS1kZWNvcmF0b3IvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9kZWNvcmF0b3JzL3NpbXBsZS1kZWNvcmF0b3IvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQppbmRleCAwYTE5NGM5Li5lODVjNTVjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZGVjb3JhdG9ycy9zaW1wbGUtZGVjb3JhdG9yL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2RlY29yYXRvcnMvc2ltcGxlLWRlY29yYXRvci9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGludGVyY2VwdG9ycyIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ5LDcgKzQ5LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKQEAgLTU5LDcgKzU5LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICArICIvbXl1cmwiOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9wZW5pbmcgY29ubmVjdGlvbiB0byAiICsgdXJsKTsKQEAgLTk4LDEwICs5OCwxMCBAQAogICAgICAgICAgICAgaWYgKEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2RlY29yYXRvcnMvc2ltcGxlLWRlY29yYXRvci9zZXJ2bGV0L3Rlc3QvYmVhbnMvTGFyZ2VUcmFuc2FjdGlvbkRlY29yYXRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2RlY29yYXRvcnMvc2ltcGxlLWRlY29yYXRvci9zZXJ2bGV0L3Rlc3QvYmVhbnMvTGFyZ2VUcmFuc2FjdGlvbkRlY29yYXRvci5qYXZhCmluZGV4IGY1NGU3YmYuLmUzMTIzYmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9kZWNvcmF0b3JzL3NpbXBsZS1kZWNvcmF0b3Ivc2VydmxldC90ZXN0L2JlYW5zL0xhcmdlVHJhbnNhY3Rpb25EZWNvcmF0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZGVjb3JhdG9ycy9zaW1wbGUtZGVjb3JhdG9yL3NlcnZsZXQvdGVzdC9iZWFucy9MYXJnZVRyYW5zYWN0aW9uRGVjb3JhdG9yLmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiB3aXRoRHJhd0NhbGxlZCA9IGZhbHNlOwogICAgcHVibGljIHN0YXRpYyBib29sZWFuIGRlcG9zaXRDYWxsZWQgPSBmYWxzZTsKIAotICAgQEluamVjdCBARGVsZWdhdGUgCisgICBASW5qZWN0IEBEZWxlZ2F0ZQogICAgQWNjb3VudCBhY2NvdW50OwogCiAgICBAT3ZlcnJpZGUKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9kZWNvcmF0b3JzL3NpbXBsZS1kZWNvcmF0b3Ivc2VydmxldC90ZXN0L2JlYW5zL1JlcXVpcmVzTmV3VHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2RlY29yYXRvcnMvc2ltcGxlLWRlY29yYXRvci9zZXJ2bGV0L3Rlc3QvYmVhbnMvUmVxdWlyZXNOZXdUcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEKaW5kZXggZTYyNmEzNy4uYzAzMDYwNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2RlY29yYXRvcnMvc2ltcGxlLWRlY29yYXRvci9zZXJ2bGV0L3Rlc3QvYmVhbnMvUmVxdWlyZXNOZXdUcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2RlY29yYXRvcnMvc2ltcGxlLWRlY29yYXRvci9zZXJ2bGV0L3Rlc3QvYmVhbnMvUmVxdWlyZXNOZXdUcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEKQEAgLTI4LDEwICsyOCwxMCBAQAogICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBhcm91bmRJbnZva2VDYWxsZWQgPSBmYWxzZTsKICAgICBwdWJsaWMgc3RhdGljIGludCBhcm91bmRJbnZva2VJbnZvY2F0aW9uQ291bnQgPSAwOwogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGVycm9yTWVzc2FnZSA9ICIiOwotICAgIAorCiAgICAgQEluamVjdAogICAgIFRlc3REZXBlbmRlbnRCZWFuIHRiOwotICAgIAorCiAgICAgQEFyb3VuZEludm9rZQogICAgIHB1YmxpYyBPYmplY3QgbWFuYWdlVHJhbnNhY3Rpb24oSW52b2NhdGlvbkNvbnRleHQgY3R4KSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXF1aXJlc05ld1RyYW5zYWN0aW9uSW50ZXJjZXB0b3I6OkFyb3VuZEludm9rZSIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2RlY29yYXRvcnMvc2ltcGxlLWRlY29yYXRvci9zZXJ2bGV0L3Rlc3QvYmVhbnMvU2hvcHBpbmdDYXJ0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZGVjb3JhdG9ycy9zaW1wbGUtZGVjb3JhdG9yL3NlcnZsZXQvdGVzdC9iZWFucy9TaG9wcGluZ0NhcnQuamF2YQppbmRleCA2MGE4YTQwLi5mOGM5YThhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZGVjb3JhdG9ycy9zaW1wbGUtZGVjb3JhdG9yL3NlcnZsZXQvdGVzdC9iZWFucy9TaG9wcGluZ0NhcnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZGVjb3JhdG9ycy9zaW1wbGUtZGVjb3JhdG9yL3NlcnZsZXQvdGVzdC9iZWFucy9TaG9wcGluZ0NhcnQuamF2YQpAQCAtMjAsMTAgKzIwLDEwIEBACiBAVHJhbnNhY3Rpb25hbChyZXF1aXJlc05ldz10cnVlKQogQFByZWZlcnJlZAogcHVibGljIGNsYXNzIFNob3BwaW5nQ2FydCAgewotICAgIAorCiAgICAgcHVibGljIHZvaWQgYWRkSXRlbShTdHJpbmcgcykgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNob3BwaW5nQ2FydDo6YWRkSXRlbSBjYWxsZWQiKTsKLSAgICAgICAgCisKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9kZWNvcmF0b3JzL3NpbXBsZS1kZWNvcmF0b3Ivc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RBY2NvdW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZGVjb3JhdG9ycy9zaW1wbGUtZGVjb3JhdG9yL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0QWNjb3VudC5qYXZhCmluZGV4IDA2NmU2MmIuLjE0MWQ3NjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9kZWNvcmF0b3JzL3NpbXBsZS1kZWNvcmF0b3Ivc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RBY2NvdW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2RlY29yYXRvcnMvc2ltcGxlLWRlY29yYXRvci9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEFjY291bnQuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIGRlcG9zaXQoQmlnRGVjaW1hbCBhbW91bnQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0QWNjb3VudDo6ZGVwb3NpdCsiICsgYW1vdW50KTsKLSAgICAgICAgCisKICAgICAgICAgLy9nZXQgYSBib251cyBvZiA1CiAgICAgICAgIGN1cnJlbnRCYWwgPSBjdXJyZW50QmFsLmFkZChhbW91bnQuYWRkKG5ldyBCaWdEZWNpbWFsKDUpKSk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibmV3IGJhbDoiICsgY3VycmVudEJhbCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZGVjb3JhdG9ycy9zaW1wbGUtZGVjb3JhdG9yL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZGVjb3JhdG9ycy9zaW1wbGUtZGVjb3JhdG9yL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEKaW5kZXggYWZkYzE1Ni4uZTFkMGQ1MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2RlY29yYXRvcnMvc2ltcGxlLWRlY29yYXRvci9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9kZWNvcmF0b3JzL3NpbXBsZS1kZWNvcmF0b3Ivc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YQpAQCAtMjcsMTUgKzI3LDE1IEBACiAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGFyb3VuZEludm9rZUNhbGxlZCA9IGZhbHNlOwogICAgIHB1YmxpYyBzdGF0aWMgaW50IGFyb3VuZEludm9rZUludm9jYXRpb25Db3VudCA9IDA7CiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZXJyb3JNZXNzYWdlID0gIiI7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgVGVzdERlcGVuZGVudEJlYW4gdGI7Ci0gICAgCisKICAgICBAQXJvdW5kSW52b2tlCiAgICAgcHVibGljIE9iamVjdCBtYW5hZ2VUcmFuc2FjdGlvbihJbnZvY2F0aW9uQ29udGV4dCBjdHgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRyYW5zYWN0aW9uSW50ZXJjZXB0b3I6OkFyb3VuZEludm9rZSIpOwogICAgICAgICBpZiAodGIgPT0gbnVsbCkgZXJyb3JNZXNzYWdlPSJEZXBlbmRlbmN5IEluamVjdGlvbiAiICsKLSAgICAgICAgCQkiaW50byBUcmFuc2FjdGlvbkludGVyY2VwdG9yIGZhaWxlZCI7CisgICAgICAgICAgICAgICAgImludG8gVHJhbnNhY3Rpb25JbnRlcmNlcHRvciBmYWlsZWQiOwogICAgICAgICBhcm91bmRJbnZva2VDYWxsZWQgPSB0cnVlOwogICAgICAgICBhcm91bmRJbnZva2VJbnZvY2F0aW9uQ291bnQgKys7CiAgICAgICAgIHJldHVybiBjdHgucHJvY2VlZCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2RlY29yYXRvcnMvc2ltcGxlLWRlY29yYXRvci9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9TaW1wbGVEZWNvcmF0b3JUZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2RlY29yYXRvcnMvc2ltcGxlLWRlY29yYXRvci9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9TaW1wbGVEZWNvcmF0b3JUZXN0U2VydmxldC5qYXZhCmluZGV4IDg5N2NhYjMuLjBkOTE1NDIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9kZWNvcmF0b3JzL3NpbXBsZS1kZWNvcmF0b3Ivc2VydmxldC90ZXN0L3NlcnZsZXQvU2ltcGxlRGVjb3JhdG9yVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZGVjb3JhdG9ycy9zaW1wbGUtZGVjb3JhdG9yL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1NpbXBsZURlY29yYXRvclRlc3RTZXJ2bGV0LmphdmEKQEAgLTQwLDExICs0MCwxMSBAQAogICAgIEBJbmplY3QKICAgICBAUHJlZmVycmVkCiAgICAgVGVzdEJlYW4gdGI7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgQFByZWZlcnJlZAogICAgIFNob3BwaW5nQ2FydCBzYzsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBBY2NvdW50IHRlc3RBY2NvdW50OwogCkBAIC02OSw1MSArNjksNTEgQEAKICAgICAgICAgICAgICAgICAgICAgKyBUcmFuc2FjdGlvbkludGVyY2VwdG9yLmFyb3VuZEludm9rZUludm9jYXRpb25Db3VudDsKICAgICAgICAgaWYgKCFUcmFuc2FjdGlvbkludGVyY2VwdG9yLmVycm9yTWVzc2FnZS50cmltKCkuZXF1YWxzKCIiKSkKICAgICAgICAgICAgIG1zZyArPSBUcmFuc2FjdGlvbkludGVyY2VwdG9yLmVycm9yTWVzc2FnZTsKLSAgICAgICAgCisKICAgICAgICAgaWYgKFJlcXVpcmVzTmV3VHJhbnNhY3Rpb25JbnRlcmNlcHRvci5hcm91bmRJbnZva2VDYWxsZWQpCiAgICAgICAgICAgICBtc2cgKz0gIlJlcXVpcmVzTmV3IFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IgY2FsbGVkIHdoZW4gIiArCi0gICAgICAgICAgICAJCSJpdCBzaG91bGRuJ3QgaGF2ZSBiZWVuIGNhbGxlZCI7Ci0gICAgICAgIAorICAgICAgICAgICAgICAgICAgICAiaXQgc2hvdWxkbid0IGhhdmUgYmVlbiBjYWxsZWQiOworCiAgICAgICAgIFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IuY2xlYXIoKTsKICAgICAgICAgLy9pbnZva2Ugc2hvcHBpbmcgY2FydCBiZWFuLiBUaGlzIHNob3VsZCByZXN1bHQgaW4gYW4gaW52b2NhdGlvbiBvbgogICAgICAgICAvL3RoZSBSZXF1aXJlc05ld1RyYW5zYWN0aW9uYWwKICAgICAgICAgc2MuYWRkSXRlbSgiVGVzdCBJdGVtIik7CiAgICAgICAgIGlmICghUmVxdWlyZXNOZXdUcmFuc2FjdGlvbkludGVyY2VwdG9yLmFyb3VuZEludm9rZUNhbGxlZCkKICAgICAgICAgICAgIG1zZyArPSAiQnVzaW5lc3MgbWV0aG9kIGludGVyY2VwdG9yIGFyb3VuZEludm9rZSBpbiByZXF1aXJlcyBuZXcgIiArCi0gICAgICAgICAgICAJCSJ0cmFuc2FjdGlvbiBpbnRlcmNlcHRvciBub3QgY2FsbGVkIjsKKyAgICAgICAgICAgICAgICAgICAgInRyYW5zYWN0aW9uIGludGVyY2VwdG9yIG5vdCBjYWxsZWQiOwogICAgICAgICBpZiAoUmVxdWlyZXNOZXdUcmFuc2FjdGlvbkludGVyY2VwdG9yLmFyb3VuZEludm9rZUludm9jYXRpb25Db3VudCAhPSAxKQogICAgICAgICAgICAgbXNnICs9ICJCdXNpbmVzcyBtZXRob2QgcmVxdWlyZXMgbmV3IGludGVyY2VwdG9yIGludm9jYXRpb24gb24gIiArCi0gICAgICAgICAgICAJCSJtZXRob2QtbGV2ZWwgaW50ZXJjZXB0b3IgYW5ub3RhdGlvbiBjb3VudCBub3QgZXhwZWN0ZWQuICIKKyAgICAgICAgICAgICAgICAgICAgIm1ldGhvZC1sZXZlbCBpbnRlcmNlcHRvciBhbm5vdGF0aW9uIGNvdW50IG5vdCBleHBlY3RlZC4gIgogICAgICAgICAgICAgICAgICAgICArICJleHBlY3RlZCA9MSwgYWN0dWFsPSIKICAgICAgICAgICAgICAgICAgICAgKyBSZXF1aXJlc05ld1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50OwogICAgICAgICBpZiAoIVJlcXVpcmVzTmV3VHJhbnNhY3Rpb25JbnRlcmNlcHRvci5lcnJvck1lc3NhZ2UudHJpbSgpLmVxdWFscygiIikpCiAgICAgICAgICAgICBtc2cgKz0gUmVxdWlyZXNOZXdUcmFuc2FjdGlvbkludGVyY2VwdG9yLmVycm9yTWVzc2FnZTsKLSAgICAgICAgCisKICAgICAgICAgLy9UcmFuc2FjdGlvbkludGVyY2VwdG9yIHNob3VsZCBub3QgaGF2ZSBiZWVuIGNhbGxlZAogICAgICAgICBpZiAoVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5hcm91bmRJbnZva2VDYWxsZWQpCiAgICAgICAgICAgICBtc2cgKz0gIlRyYW5zY2F0aW9uSW50ZXJjZXB0b3IgYXJvdW5kSW52b2tlIGNhbGxlZCB3aGVuIGEgcmVxdWlyZXNuZXciICsKLSAgICAgICAgICAgIAkJInRyYW5zYWN0aW9uIGludGVyY2VwdG9yIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIjsKLSAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICJ0cmFuc2FjdGlvbiBpbnRlcmNlcHRvciBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCI7CisKICAgICAgICAgLy9UZXN0IGRlY29yYXRvcnMKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHRlc3RBY2NvdW50LmdldEJhbGFuY2UoKSk7Ci0gICAgICAgIGlmICh0ZXN0QWNjb3VudC5nZXRCYWxhbmNlKCkuY29tcGFyZVRvKG5ldyBCaWdEZWNpbWFsKDEwMCkpICE9IDApICAgICAgICAgICAgCisgICAgICAgIGlmICh0ZXN0QWNjb3VudC5nZXRCYWxhbmNlKCkuY29tcGFyZVRvKG5ldyBCaWdEZWNpbWFsKDEwMCkpICE9IDApCiAgICAgICAgICAgICAgICAgbXNnICs9ICJEZWNvcmF0b3JzOkludmFsaWQgaW5pdGlhbCBiYWxhbmNlIjsKLSAgICAgICAgCisKICAgICAgICAgdGVzdEFjY291bnQuZGVwb3NpdChuZXcgQmlnRGVjaW1hbCgxMCkpOwogICAgICAgICBpZiAodGVzdEFjY291bnQuZ2V0QmFsYW5jZSgpLmNvbXBhcmVUbyhuZXcgQmlnRGVjaW1hbCgxMTUpKSAhPSAwKSAvLzUgYXMgYm9udXMgYnkgdGhlIGRlY29yYXRvcgogICAgICAgICAgICAgbXNnICs9ICJEZWNvcmF0b3JzOkludmFsaWQgYmFsYW5jZSBhZnRlciBkZXBvc2l0IjsKLSAgICAgICAgICAgIAotICAgICAgICAKKworCiAgICAgICAgIHRlc3RBY2NvdW50LndpdGhkcmF3KG5ldyBCaWdEZWNpbWFsKDEwKSk7CiAgICAgICAgIGlmICh0ZXN0QWNjb3VudC5nZXRCYWxhbmNlKCkuY29tcGFyZVRvKG5ldyBCaWdEZWNpbWFsKDEwNSkpICE9IDApCiAgICAgICAgICAgICBtc2cgKz0gIkRlY29yYXRvcnM6SW52YWxpZCBiYWxhbmNlIGFmdGVyIHdpdGhkcmF3YWwiOwogCi0gICAgICAgIAorCiAgICAgICAgIGlmICghTGFyZ2VUcmFuc2FjdGlvbkRlY29yYXRvci5kZXBvc2l0Q2FsbGVkKQogICAgICAgICAgICAgbXNnICs9ICJkZXBvc2l0IG1ldGhvZCBpbiBEZWNvcmF0b3Igbm90IGNhbGxlZCI7CiAgICAgICAgIGlmICghTGFyZ2VUcmFuc2FjdGlvbkRlY29yYXRvci53aXRoRHJhd0NhbGxlZCkKICAgICAgICAgICAgIG1zZyArPSAiZGVwb3NpdCBtZXRob2QgaW4gRGVjb3JhdG9yIG5vdCBjYWxsZWQiOwotICAgICAgICAKKwogICAgICAgICB3cml0ZXIud3JpdGUobXNnICsgIlxuIik7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvYnVpbGQueG1sCmluZGV4IDYzYmViNGEuLjE4MTM0Y2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvYnVpbGQueG1sCkBAIC04NywxNSArODcsMTUgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPiBVc2FnZToKLQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBldmVudHMgdGVzdHMpCi0JCWFudCBjbGVhbiAoY2xlYW5zIGFsbCB0aGUgZXZlbnRzIHRlc3RzKQotCQlhbnQgYnVpbGQgKGJ1aWxkcyBhbGwgdGhlIGV2ZW50cyB0ZXN0cykKLQkJYW50IHNldHVwIChzZXRzIHVwIGFsbCByZXNvdXJjZXMgZm9yIGV2ZW50cyB0ZXN0cykKLQkJYW50IGRlcGxveSAoZGVwbG95cyBhbGwgdGhlIGV2ZW50cyBhcHBzKQotCQlhbnQgcnVuIChFeGVjdXRlcyBhbGwgdGhlIGV2ZW50cyB0ZXN0cykKLQkJYW50IHVuZGVwbG95ICh1bmRlcGxveXMgYWxsIHRoZSAgZXZlbnRzIGFwcHMpCi0JCWFudCB1bnNldHVwICh1bnNldHMgYWxsIHJlc291cmNlcyBmb3IgZXZlbnRzIHRlc3RzKQotCTwvZWNobz4KKyAgICA8ZWNobz4gVXNhZ2U6CisgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZXZlbnRzIHRlc3RzKQorICAgICAgICBhbnQgY2xlYW4gKGNsZWFucyBhbGwgdGhlIGV2ZW50cyB0ZXN0cykKKyAgICAgICAgYW50IGJ1aWxkIChidWlsZHMgYWxsIHRoZSBldmVudHMgdGVzdHMpCisgICAgICAgIGFudCBzZXR1cCAoc2V0cyB1cCBhbGwgcmVzb3VyY2VzIGZvciBldmVudHMgdGVzdHMpCisgICAgICAgIGFudCBkZXBsb3kgKGRlcGxveXMgYWxsIHRoZSBldmVudHMgYXBwcykKKyAgICAgICAgYW50IHJ1biAoRXhlY3V0ZXMgYWxsIHRoZSBldmVudHMgdGVzdHMpCisgICAgICAgIGFudCB1bmRlcGxveSAodW5kZXBsb3lzIGFsbCB0aGUgIGV2ZW50cyBhcHBzKQorICAgICAgICBhbnQgdW5zZXR1cCAodW5zZXRzIGFsbCByZXNvdXJjZXMgZm9yIGV2ZW50cyB0ZXN0cykKKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2NvbmRpdGlvbmFsLW9ic2VydmVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2NvbmRpdGlvbmFsLW9ic2VydmVyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYWFhOTIwMi4uNjJkODQyZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9jb25kaXRpb25hbC1vYnNlcnZlci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvY29uZGl0aW9uYWwtb2JzZXJ2ZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1ldmVudC1wcm9kdWNlcnMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvY29uZGl0aW9uYWwtb2JzZXJ2ZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9jb25kaXRpb25hbC1vYnNlcnZlci9idWlsZC54bWwKaW5kZXggMGI5YjNhMy4uMGExZjJmOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9jb25kaXRpb25hbC1vYnNlcnZlci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9jb25kaXRpb25hbC1vYnNlcnZlci9idWlsZC54bWwKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iY2xpZW50L3Rlc3QvY2xpZW50IiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00OCwyMyArNDgsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iY2xpZW50IiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0idGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJ0ZXN0LmNsaWVudC5XZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvY29uZGl0aW9uYWwtb2JzZXJ2ZXIvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvY29uZGl0aW9uYWwtb2JzZXJ2ZXIvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQppbmRleCAxZWE0NTRiLi4xOTI0MTk3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2NvbmRpdGlvbmFsLW9ic2VydmVyL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9jb25kaXRpb25hbC1vYnNlcnZlci9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdAogICAgICAgICA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9OQU1FID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfTkFNRSA9CiAgICAgICAgICJldmVudHMtY29uZGl0aW9uYWwtb2JzZXJ2ZXJzIjsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFWFBFQ1RFRF9SRVNQT05TRSA9ICJIZWxsbyBmcm9tIFNlcnZsZXQgMy4wLiI7CkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGludGVyY2VwdG9ycyIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTUwLDcgKzUwLDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKQEAgLTYwLDcgKzYwLDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICArICIvbXl1cmwiOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9wZW5pbmcgY29ubmVjdGlvbiB0byAiICsgdXJsKTsKQEAgLTk5LDEwICs5OSwxMCBAQAogICAgICAgICAgICAgaWYgKEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9jb25kaXRpb25hbC1vYnNlcnZlci9zZXJ2bGV0L3Rlc3QvYmVhbnMvRG9jdW1lbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvY29uZGl0aW9uYWwtb2JzZXJ2ZXIvc2VydmxldC90ZXN0L2JlYW5zL0RvY3VtZW50LmphdmEKaW5kZXggZDg1N2Y1YS4uMGNiZjdlNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9jb25kaXRpb25hbC1vYnNlcnZlci9zZXJ2bGV0L3Rlc3QvYmVhbnMvRG9jdW1lbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2NvbmRpdGlvbmFsLW9ic2VydmVyL3NlcnZsZXQvdGVzdC9iZWFucy9Eb2N1bWVudC5qYXZhCkBAIC0yMiw3ICsyMiw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRG9jdW1lbnQgY3JlYXRlZCB3aXRoIG5hbWUiICsgbmFtZSApOwogICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHVwZGF0ZSgpewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRvY3VtZW50OiIgKyBuYW1lICsgIiB1cGRhdGVkLiIpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvY29uZGl0aW9uYWwtb2JzZXJ2ZXIvc2VydmxldC90ZXN0L2JlYW5zL1NlY29uZFRlc3RFdmVudENvbmRpdGlvbmFsT2JzZXJ2ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvY29uZGl0aW9uYWwtb2JzZXJ2ZXIvc2VydmxldC90ZXN0L2JlYW5zL1NlY29uZFRlc3RFdmVudENvbmRpdGlvbmFsT2JzZXJ2ZXIuamF2YQppbmRleCA5Njk4ZjJhLi5iZWRiMWY3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2NvbmRpdGlvbmFsLW9ic2VydmVyL3NlcnZsZXQvdGVzdC9iZWFucy9TZWNvbmRUZXN0RXZlbnRDb25kaXRpb25hbE9ic2VydmVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9jb25kaXRpb25hbC1vYnNlcnZlci9zZXJ2bGV0L3Rlc3QvYmVhbnMvU2Vjb25kVGVzdEV2ZW50Q29uZGl0aW9uYWxPYnNlcnZlci5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiAgICAgcHVibGljIHN0YXRpYyBpbnQgZG9jdW1lbnRDcmVhdGVkRXZlbnQgPSAwOwogCiAgICAgLy9zaG91bGQgbm90IGdldCBjYWxsZWQgYXMgdGhlcmUgaXMgbm8gY29udmVyc2F0aW9uIGlzIGluIHRoaXMgdGVzdAotICAgIHB1YmxpYyB2b2lkIG9uRG9jdW1lbnRDcmVhdGUoQE9ic2VydmVzKG5vdGlmeU9ic2VydmVyPVJlY2VwdGlvbi5JRl9FWElTVFMpIAorICAgIHB1YmxpYyB2b2lkIG9uRG9jdW1lbnRDcmVhdGUoQE9ic2VydmVzKG5vdGlmeU9ic2VydmVyPVJlY2VwdGlvbi5JRl9FWElTVFMpCiAgICAgICAgICAgICBAQ3JlYXRlZCBEb2N1bWVudCBkKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdEV2ZW50T2JzZXJ2ZXI6b25Eb2N1bWVudENyZWF0ZSIpOwogICAgICAgICBkb2N1bWVudENyZWF0ZWRFdmVudCsrOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9jb25kaXRpb25hbC1vYnNlcnZlci9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEV2ZW50Q29uZGl0aW9uYWxPYnNlcnZlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9jb25kaXRpb25hbC1vYnNlcnZlci9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEV2ZW50Q29uZGl0aW9uYWxPYnNlcnZlci5qYXZhCmluZGV4IGU2OTBjYTAuLmEyMjRmYmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvY29uZGl0aW9uYWwtb2JzZXJ2ZXIvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RFdmVudENvbmRpdGlvbmFsT2JzZXJ2ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2NvbmRpdGlvbmFsLW9ic2VydmVyL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0RXZlbnRDb25kaXRpb25hbE9ic2VydmVyLmphdmEKQEAgLTQxLDEyICs0MSwxMiBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RFdmVudE9ic2VydmVyOmFmdGVyRG9jdW1lbnRVcGRhdGUiKTsKICAgICAgICAgZG9jdW1lbnRVcGRhdGVkRXZlbnQrKzsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBvbkRvY3VtZW50VXBkYXRlZEFuZEFwcHJvdmVkKAogICAgICAgICAgICAgQE9ic2VydmVzIEBVcGRhdGVkIEBBcHByb3ZlZCBEb2N1bWVudCBkKXsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0RXZlbnRPYnNlcnZlcjp1cGRhdGVkIGFuZCBhcHByb3ZlZCIpOwogICAgICAgICBkb2N1bWVudEFwcHJvdmVkRXZlbnRzKys7Ci0gICAgICAgIAorCiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2NvbmRpdGlvbmFsLW9ic2VydmVyL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0RXZlbnRQcm9kdWNlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9jb25kaXRpb25hbC1vYnNlcnZlci9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEV2ZW50UHJvZHVjZXIuamF2YQppbmRleCBiYjZjMWJlLi4xZGY0Y2NhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2NvbmRpdGlvbmFsLW9ic2VydmVyL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0RXZlbnRQcm9kdWNlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvY29uZGl0aW9uYWwtb2JzZXJ2ZXIvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RFdmVudFByb2R1Y2VyLmphdmEKQEAgLTIyLDI0ICsyMiwyNCBAQAogCiBwdWJsaWMgY2xhc3MgVGVzdEV2ZW50UHJvZHVjZXIgewogICAgIEBJbmplY3QgRXZlbnQ8RG9jdW1lbnQ+IGRvY0V2ZW50OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgZmlyZUV2ZW50cygpewogICAgICAgICBEb2N1bWVudCBkID0gbmV3IERvY3VtZW50KCJUZXN0Iik7CiAgICAgICAgIGRvY0V2ZW50LmZpcmUoZCk7IC8vZ2VuZXJhbCBmaXJlIG9mIGEgRG9jdW1lbnQgcmVsYXRlZCBldmVudAotICAgICAgICAKKwogICAgICAgICAvL3NlbmQgYSBjcmVhdGVkIGV2ZW50CiAgICAgICAgIGRvY0V2ZW50LnNlbGVjdCgKICAgICAgICAgICAgICAgICBuZXcgQW5ub3RhdGlvbkxpdGVyYWw8Q3JlYXRlZD4oKXt9KS5maXJlKGQpOwotICAgICAgICAKLSAgICAgICAgCisKKwogICAgICAgICBkLnVwZGF0ZSgpOwogICAgICAgICAvL3NlbmQgYW4gdXBkYXRlZCBldmVudAogICAgICAgICBkb2NFdmVudC5zZWxlY3QoCiAgICAgICAgICAgICAgICAgbmV3IEFubm90YXRpb25MaXRlcmFsPFVwZGF0ZWQ+KCl7fSkuZmlyZShkKTsKLSAgICAgICAgCisKICAgICAgICAgLy9zZW5kIGFuIHVwZGF0ZWQgYW5kIGFwcHJvdmVkIGV2ZW50CiAgICAgICAgIGRvY0V2ZW50LnNlbGVjdChuZXcgQW5ub3RhdGlvbkxpdGVyYWw8VXBkYXRlZD4oKXt9LCBuZXcgQW5ub3RhdGlvbkxpdGVyYWw8QXBwcm92ZWQ+KCl7fSkuZmlyZShkKTsKLSAgICAgICAgCisKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvY29uZGl0aW9uYWwtb2JzZXJ2ZXIvc2VydmxldC90ZXN0L3NlcnZsZXQvQ29uZGl0aW9uYWxPYnNlcnZlclRlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2NvbmRpdGlvbmFsLW9ic2VydmVyL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L0NvbmRpdGlvbmFsT2JzZXJ2ZXJUZXN0U2VydmxldC5qYXZhCmluZGV4IGE4ZTRmMGUuLmVlZDc0N2UgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvY29uZGl0aW9uYWwtb2JzZXJ2ZXIvc2VydmxldC90ZXN0L3NlcnZsZXQvQ29uZGl0aW9uYWxPYnNlcnZlclRlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9jb25kaXRpb25hbC1vYnNlcnZlci9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9Db25kaXRpb25hbE9ic2VydmVyVGVzdFNlcnZsZXQuamF2YQpAQCAtNDgsMjUgKzQ4LDI1IEBACiAgICAgICAgIGlmIChUZXN0RXZlbnRDb25kaXRpb25hbE9ic2VydmVyLmRvY3VtZW50Q3JlYXRlZEV2ZW50ICE9IDEpewogICAgICAgICAgICAgbXNnICs9ICJEb2N1bWVudCBjcmVhdGVkIGV2ZW50IG5vdCByZWNlaXZlZCBieSBvYnNlcnZlciI7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKFRlc3RFdmVudENvbmRpdGlvbmFsT2JzZXJ2ZXIuZG9jdW1lbnRVcGRhdGVkRXZlbnQgIT0gMil7CiAgICAgICAgICAgICBtc2cgKz0gIkRvY3VtZW50IHVwZGF0ZWQgZXZlbnQgbm90IHJlY2VpdmVkIGJ5IG9ic2VydmVyIjsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAoVGVzdEV2ZW50Q29uZGl0aW9uYWxPYnNlcnZlci5kb2N1bWVudEFwcHJvdmVkRXZlbnRzICE9IDEpewogICAgICAgICAgICAgbXNnICs9ICJEb2N1bWVudCB1cGRhdGVkIGFuZCBhcHByb3ZlZCBldmVudCBub3QgIiArCi0gICAgICAgICAgICAJCSJyZWNlaXZlZCBieSBvYnNlcnZlciI7CisgICAgICAgICAgICAgICAgICAgICJyZWNlaXZlZCBieSBvYnNlcnZlciI7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKFRlc3RFdmVudENvbmRpdGlvbmFsT2JzZXJ2ZXIuZG9jdW1lbnRBbnlFdmVudHMgIT0gNCl7CiAgICAgICAgICAgICBtc2cgKz0gIiMgb2YgRG9jdW1lbnQgZXZlbnQgcmVjZWl2ZWQgYnkgb2JzZXJ2ZXIgZG9lcyBub3QgIiArCi0gICAgICAgICAgICAJCSJtYXRjaCBleHBlY3RlZCB2YWx1ZXMuIGV4cGVjdGVkID0gMi4gb2JzZXJ2ZWQ9IisgVGVzdEV2ZW50Q29uZGl0aW9uYWxPYnNlcnZlci5kb2N1bWVudEFueUV2ZW50czsKKyAgICAgICAgICAgICAgICAgICAgIm1hdGNoIGV4cGVjdGVkIHZhbHVlcy4gZXhwZWN0ZWQgPSAyLiBvYnNlcnZlZD0iKyBUZXN0RXZlbnRDb25kaXRpb25hbE9ic2VydmVyLmRvY3VtZW50QW55RXZlbnRzOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoU2Vjb25kVGVzdEV2ZW50Q29uZGl0aW9uYWxPYnNlcnZlci5kb2N1bWVudENyZWF0ZWRFdmVudCA+IDApIAorCisgICAgICAgIGlmIChTZWNvbmRUZXN0RXZlbnRDb25kaXRpb25hbE9ic2VydmVyLmRvY3VtZW50Q3JlYXRlZEV2ZW50ID4gMCkKICAgICAgICAgICAgIG1zZyArPSAiQSBjb25kaXRpb25hbCBvYnNlcnZlciB3YXMgbm90aWZpZWQgd2hlbiBpdCBkaWQgbm90IGV4aXN0IjsKLSAgICAgICAgCi0gICAgICAgIAorCisKIAogICAgICAgICB3cml0ZXIud3JpdGUobXNnICsgIlxuIik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9ldmVudC1wcm9kdWNlcnMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvZXZlbnQtcHJvZHVjZXJzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYWFhOTIwMi4uNjJkODQyZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9ldmVudC1wcm9kdWNlcnMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2V2ZW50LXByb2R1Y2Vycy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWV2ZW50LXByb2R1Y2VycyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9ldmVudC1wcm9kdWNlcnMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9ldmVudC1wcm9kdWNlcnMvYnVpbGQueG1sCmluZGV4IDBiOWIzYTMuLjBhMWYyZjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvZXZlbnQtcHJvZHVjZXJzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2V2ZW50LXByb2R1Y2Vycy9idWlsZC54bWwKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iY2xpZW50L3Rlc3QvY2xpZW50IiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00OCwyMyArNDgsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iY2xpZW50IiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0idGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJ0ZXN0LmNsaWVudC5XZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvZXZlbnQtcHJvZHVjZXJzL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2V2ZW50LXByb2R1Y2Vycy9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCmluZGV4IDVkNmI1MDMuLmUzNjkzMDYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvZXZlbnQtcHJvZHVjZXJzL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9ldmVudC1wcm9kdWNlcnMvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQKICAgICAgICAgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfTkFNRSA9IAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX05BTUUgPQogICAgICAgICAiZXZlbnRzLXNpbXBsZS1ldmVudC1wcm9kdWNlciI7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhQRUNURURfUkVTUE9OU0UgPSAiSGVsbG8gZnJvbSBTZXJ2bGV0IDMuMC4iOwpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBpbnRlcmNlcHRvcnMiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC01MCw3ICs1MCw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVNUX05BTUUgKyAiIHRlc3QgZmFpbGVkIik7CkBAIC02MCw3ICs2MCw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgICAgICAgICAgKyAiL215dXJsIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvcGVuaW5nIGNvbm5lY3Rpb24gdG8gIiArIHVybCk7CkBAIC05OSwxMCArOTksMTAgQEAKICAgICAgICAgICAgIGlmIChFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvZXZlbnQtcHJvZHVjZXJzL3NlcnZsZXQvdGVzdC9iZWFucy9Eb2N1bWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9ldmVudC1wcm9kdWNlcnMvc2VydmxldC90ZXN0L2JlYW5zL0RvY3VtZW50LmphdmEKaW5kZXggZDg1N2Y1YS4uMGNiZjdlNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9ldmVudC1wcm9kdWNlcnMvc2VydmxldC90ZXN0L2JlYW5zL0RvY3VtZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9ldmVudC1wcm9kdWNlcnMvc2VydmxldC90ZXN0L2JlYW5zL0RvY3VtZW50LmphdmEKQEAgLTIyLDcgKzIyLDcgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEb2N1bWVudCBjcmVhdGVkIHdpdGggbmFtZSIgKyBuYW1lICk7CiAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgdXBkYXRlKCl7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRG9jdW1lbnQ6IiArIG5hbWUgKyAiIHVwZGF0ZWQuIik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9ldmVudC1wcm9kdWNlcnMvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RFdmVudE9ic2VydmVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2V2ZW50LXByb2R1Y2Vycy9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEV2ZW50T2JzZXJ2ZXIuamF2YQppbmRleCA2MGEwYjgzLi40Njg3ZTY0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2V2ZW50LXByb2R1Y2Vycy9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEV2ZW50T2JzZXJ2ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2V2ZW50LXByb2R1Y2Vycy9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEV2ZW50T2JzZXJ2ZXIuamF2YQpAQCAtMzgsMTIgKzM4LDEyIEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdEV2ZW50T2JzZXJ2ZXI6YWZ0ZXJEb2N1bWVudFVwZGF0ZSIpOwogICAgICAgICBkb2N1bWVudFVwZGF0ZWRFdmVudCsrOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIG9uRG9jdW1lbnRVcGRhdGVkQW5kQXBwcm92ZWQoCiAgICAgICAgICAgICBAT2JzZXJ2ZXMgQFVwZGF0ZWQgQEFwcHJvdmVkIERvY3VtZW50IGQpewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RFdmVudE9ic2VydmVyOnVwZGF0ZWQgYW5kIGFwcHJvdmVkIik7CiAgICAgICAgIGRvY3VtZW50QXBwcm92ZWRFdmVudHMrKzsKLSAgICAgICAgCisKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvZXZlbnQtcHJvZHVjZXJzL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0RXZlbnRQcm9kdWNlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9ldmVudC1wcm9kdWNlcnMvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RFdmVudFByb2R1Y2VyLmphdmEKaW5kZXggYmI2YzFiZS4uMWRmNGNjYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9ldmVudC1wcm9kdWNlcnMvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RFdmVudFByb2R1Y2VyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9ldmVudC1wcm9kdWNlcnMvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RFdmVudFByb2R1Y2VyLmphdmEKQEAgLTIyLDI0ICsyMiwyNCBAQAogCiBwdWJsaWMgY2xhc3MgVGVzdEV2ZW50UHJvZHVjZXIgewogICAgIEBJbmplY3QgRXZlbnQ8RG9jdW1lbnQ+IGRvY0V2ZW50OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgZmlyZUV2ZW50cygpewogICAgICAgICBEb2N1bWVudCBkID0gbmV3IERvY3VtZW50KCJUZXN0Iik7CiAgICAgICAgIGRvY0V2ZW50LmZpcmUoZCk7IC8vZ2VuZXJhbCBmaXJlIG9mIGEgRG9jdW1lbnQgcmVsYXRlZCBldmVudAotICAgICAgICAKKwogICAgICAgICAvL3NlbmQgYSBjcmVhdGVkIGV2ZW50CiAgICAgICAgIGRvY0V2ZW50LnNlbGVjdCgKICAgICAgICAgICAgICAgICBuZXcgQW5ub3RhdGlvbkxpdGVyYWw8Q3JlYXRlZD4oKXt9KS5maXJlKGQpOwotICAgICAgICAKLSAgICAgICAgCisKKwogICAgICAgICBkLnVwZGF0ZSgpOwogICAgICAgICAvL3NlbmQgYW4gdXBkYXRlZCBldmVudAogICAgICAgICBkb2NFdmVudC5zZWxlY3QoCiAgICAgICAgICAgICAgICAgbmV3IEFubm90YXRpb25MaXRlcmFsPFVwZGF0ZWQ+KCl7fSkuZmlyZShkKTsKLSAgICAgICAgCisKICAgICAgICAgLy9zZW5kIGFuIHVwZGF0ZWQgYW5kIGFwcHJvdmVkIGV2ZW50CiAgICAgICAgIGRvY0V2ZW50LnNlbGVjdChuZXcgQW5ub3RhdGlvbkxpdGVyYWw8VXBkYXRlZD4oKXt9LCBuZXcgQW5ub3RhdGlvbkxpdGVyYWw8QXBwcm92ZWQ+KCl7fSkuZmlyZShkKTsKLSAgICAgICAgCisKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvZXZlbnQtcHJvZHVjZXJzL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1NpbXBsZUV2ZW50T2JzZXJ2ZXJUZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9ldmVudC1wcm9kdWNlcnMvc2VydmxldC90ZXN0L3NlcnZsZXQvU2ltcGxlRXZlbnRPYnNlcnZlclRlc3RTZXJ2bGV0LmphdmEKaW5kZXggNTdlOGMzYi4uNzA4ZWE0NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9ldmVudC1wcm9kdWNlcnMvc2VydmxldC90ZXN0L3NlcnZsZXQvU2ltcGxlRXZlbnRPYnNlcnZlclRlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9ldmVudC1wcm9kdWNlcnMvc2VydmxldC90ZXN0L3NlcnZsZXQvU2ltcGxlRXZlbnRPYnNlcnZlclRlc3RTZXJ2bGV0LmphdmEKQEAgLTQ3LDIwICs0NywyMCBAQAogICAgICAgICBpZiAoVGVzdEV2ZW50T2JzZXJ2ZXIuZG9jdW1lbnRDcmVhdGVkRXZlbnQgIT0gMSl7CiAgICAgICAgICAgICBtc2cgKz0gIkRvY3VtZW50IGNyZWF0ZWQgZXZlbnQgbm90IHJlY2VpdmVkIGJ5IG9ic2VydmVyIjsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAoVGVzdEV2ZW50T2JzZXJ2ZXIuZG9jdW1lbnRVcGRhdGVkRXZlbnQgIT0gMil7CiAgICAgICAgICAgICBtc2cgKz0gIkRvY3VtZW50IHVwZGF0ZWQgZXZlbnQgbm90IHJlY2VpdmVkIGJ5IG9ic2VydmVyIjsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAoVGVzdEV2ZW50T2JzZXJ2ZXIuZG9jdW1lbnRBcHByb3ZlZEV2ZW50cyAhPSAxKXsKICAgICAgICAgICAgIG1zZyArPSAiRG9jdW1lbnQgdXBkYXRlZCBhbmQgYXBwcm92ZWQgZXZlbnQgbm90ICIgKwotICAgICAgICAgICAgCQkicmVjZWl2ZWQgYnkgb2JzZXJ2ZXIiOworICAgICAgICAgICAgICAgICAgICAicmVjZWl2ZWQgYnkgb2JzZXJ2ZXIiOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAKKworCiAgICAgICAgIGlmIChUZXN0RXZlbnRPYnNlcnZlci5kb2N1bWVudEFueUV2ZW50cyAhPSA0KXsKICAgICAgICAgICAgIG1zZyArPSAiIyBvZiBEb2N1bWVudCBldmVudCByZWNlaXZlZCBieSBvYnNlcnZlciBkb2VzIG5vdCAiICsKLSAgICAgICAgICAgIAkJIm1hdGNoIGV4cGVjdGVkIHZhbHVlcy4gZXhwZWN0ZWQgPSAyLiBvYnNlcnZlZD0iKyBUZXN0RXZlbnRPYnNlcnZlci5kb2N1bWVudEFueUV2ZW50czsKKyAgICAgICAgICAgICAgICAgICAgIm1hdGNoIGV4cGVjdGVkIHZhbHVlcy4gZXhwZWN0ZWQgPSAyLiBvYnNlcnZlZD0iKyBUZXN0RXZlbnRPYnNlcnZlci5kb2N1bWVudEFueUV2ZW50czsKICAgICAgICAgfQogCiAgICAgICAgIHdyaXRlci53cml0ZShtc2cgKyAiXG4iKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvZXZlbnQtcXVhbGlmaWVycy13aXRoLW1lbWJlcnMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvZXZlbnQtcXVhbGlmaWVycy13aXRoLW1lbWJlcnMvYnVpbGQucHJvcGVydGllcwppbmRleCBhYWE5MjAyLi42MmQ4NDJlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2V2ZW50LXF1YWxpZmllcnMtd2l0aC1tZW1iZXJzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9ldmVudC1xdWFsaWZpZXJzLXdpdGgtbWVtYmVycy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWV2ZW50LXByb2R1Y2VycyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9ldmVudC1xdWFsaWZpZXJzLXdpdGgtbWVtYmVycy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2V2ZW50LXF1YWxpZmllcnMtd2l0aC1tZW1iZXJzL2J1aWxkLnhtbAppbmRleCAwYjliM2EzLi4wYTFmMmY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2V2ZW50LXF1YWxpZmllcnMtd2l0aC1tZW1iZXJzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2V2ZW50LXF1YWxpZmllcnMtd2l0aC1tZW1iZXJzL2J1aWxkLnhtbApAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSJjbGllbnQvdGVzdC9jbGllbnQiIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ4LDIzICs0OCwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSJjbGllbnQiIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJ0ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9InRlc3QuY2xpZW50LldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9ldmVudC1xdWFsaWZpZXJzLXdpdGgtbWVtYmVycy9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9ldmVudC1xdWFsaWZpZXJzLXdpdGgtbWVtYmVycy9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCmluZGV4IGRlZDFkMjAuLmNlMjViMWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvZXZlbnQtcXVhbGlmaWVycy13aXRoLW1lbWJlcnMvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2V2ZW50LXF1YWxpZmllcnMtd2l0aC1tZW1iZXJzL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0CiAgICAgICAgID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX05BTUUgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9OQU1FID0KICAgICAgICAgImV2ZW50cy1ldmVudC1xdWFsaWZpZXJzLXdpdGgtbWVtYmVycyI7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhQRUNURURfUkVTUE9OU0UgPSAiSGVsbG8gZnJvbSBTZXJ2bGV0IDMuMC4iOwpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBpbnRlcmNlcHRvcnMiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC01MCw3ICs1MCw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVNUX05BTUUgKyAiIHRlc3QgZmFpbGVkIik7CkBAIC02MCw3ICs2MCw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgICAgICAgICAgKyAiL215dXJsIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvcGVuaW5nIGNvbm5lY3Rpb24gdG8gIiArIHVybCk7CkBAIC05OSwxMCArOTksMTAgQEAKICAgICAgICAgICAgIGlmIChFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvZXZlbnQtcXVhbGlmaWVycy13aXRoLW1lbWJlcnMvc2VydmxldC90ZXN0L2JlYW5zL0RvY3VtZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2V2ZW50LXF1YWxpZmllcnMtd2l0aC1tZW1iZXJzL3NlcnZsZXQvdGVzdC9iZWFucy9Eb2N1bWVudC5qYXZhCmluZGV4IGQ4NTdmNWEuLjBjYmY3ZTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvZXZlbnQtcXVhbGlmaWVycy13aXRoLW1lbWJlcnMvc2VydmxldC90ZXN0L2JlYW5zL0RvY3VtZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9ldmVudC1xdWFsaWZpZXJzLXdpdGgtbWVtYmVycy9zZXJ2bGV0L3Rlc3QvYmVhbnMvRG9jdW1lbnQuamF2YQpAQCAtMjIsNyArMjIsNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRvY3VtZW50IGNyZWF0ZWQgd2l0aCBuYW1lIiArIG5hbWUgKTsKICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCB1cGRhdGUoKXsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEb2N1bWVudDoiICsgbmFtZSArICIgdXBkYXRlZC4iKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2V2ZW50LXF1YWxpZmllcnMtd2l0aC1tZW1iZXJzL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0RXZlbnRQcm9kdWNlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9ldmVudC1xdWFsaWZpZXJzLXdpdGgtbWVtYmVycy9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEV2ZW50UHJvZHVjZXIuamF2YQppbmRleCBiOWVkNmQzLi5iMzk5YTc0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL2V2ZW50LXF1YWxpZmllcnMtd2l0aC1tZW1iZXJzL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0RXZlbnRQcm9kdWNlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvZXZlbnQtcXVhbGlmaWVycy13aXRoLW1lbWJlcnMvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RFdmVudFByb2R1Y2VyLmphdmEKQEAgLTIyLDI3ICsyMiwyNyBAQAogCiBwdWJsaWMgY2xhc3MgVGVzdEV2ZW50UHJvZHVjZXIgewogICAgIEBJbmplY3QgRXZlbnQ8RG9jdW1lbnQ+IGRvY0V2ZW50OwotICAgIAorCiAgICAgQEluamVjdCBAVXBkYXRlZCh1cGRhdGVkQnk9ImFkbWluIikgRXZlbnQ8RG9jdW1lbnQ+IHVwZGF0ZWRCeUFkbWluRXZlbnQ7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBmaXJlRXZlbnRzKCl7CiAgICAgICAgIERvY3VtZW50IGQgPSBuZXcgRG9jdW1lbnQoIlRlc3QiKTsKICAgICAgICAgZG9jRXZlbnQuZmlyZShkKTsgLy9nZW5lcmFsIGZpcmUgb2YgYSBEb2N1bWVudCByZWxhdGVkIGV2ZW50Ci0gICAgICAgIAorCiAgICAgICAgIC8vc2VuZCBhIGNyZWF0ZWQgZXZlbnQKICAgICAgICAgZG9jRXZlbnQuc2VsZWN0KAogICAgICAgICAgICAgICAgIG5ldyBBbm5vdGF0aW9uTGl0ZXJhbDxDcmVhdGVkPigpe30pLmZpcmUoZCk7Ci0gICAgICAgIAotICAgICAgICAKKworCiAgICAgICAgIGQudXBkYXRlKCk7CiAgICAgICAgIC8vc2VuZCBhbiB1cGRhdGVkIGJ5IGFkbWluIGV2ZW50CiAgICAgICAgIHVwZGF0ZWRCeUFkbWluRXZlbnQuZmlyZShkKTsKLSAgICAgICAgCisKICAgICAgICAgLy9zZW5kIGFuIHVwZGF0ZWQgYnkgRm9vVXNlciBldmVudAogICAgICAgICBkb2NFdmVudC5zZWxlY3QobmV3IFVzZXJCaW5kaW5nKCJGb29Vc2VyIikpLmZpcmUoZCk7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAorCiAKIH0KIApAQCAtNTcsNSArNTcsNSBAQAogICAgIHB1YmxpYyBTdHJpbmcgdXBkYXRlZEJ5KCkgewogICAgICAgICByZXR1cm4gdGhpcy51c2VyTmFtZTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvbXVsdGlwbGUtZXZlbnQtcXVhbGlmaWVycy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9tdWx0aXBsZS1ldmVudC1xdWFsaWZpZXJzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMzYyZTgzMi4uMzUzNWQ2MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9tdWx0aXBsZS1ldmVudC1xdWFsaWZpZXJzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9tdWx0aXBsZS1ldmVudC1xdWFsaWZpZXJzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tbXVsdGlwbGUtZXZlbnQtcXVhbGlmaWVycyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9tdWx0aXBsZS1ldmVudC1xdWFsaWZpZXJzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvbXVsdGlwbGUtZXZlbnQtcXVhbGlmaWVycy9idWlsZC54bWwKaW5kZXggMGI5YjNhMy4uMGExZjJmOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9tdWx0aXBsZS1ldmVudC1xdWFsaWZpZXJzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL211bHRpcGxlLWV2ZW50LXF1YWxpZmllcnMvYnVpbGQueG1sCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9ImNsaWVudC90ZXN0L2NsaWVudCIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDgsMjMgKzQ4LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9ImNsaWVudCIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9InRlc3QvY2xpZW50L1dlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0idGVzdC5jbGllbnQuV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL211bHRpcGxlLWV2ZW50LXF1YWxpZmllcnMvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvbXVsdGlwbGUtZXZlbnQtcXVhbGlmaWVycy9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCmluZGV4IDc0OGZjNGQuLjJiM2E4YWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvbXVsdGlwbGUtZXZlbnQtcXVhbGlmaWVycy9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvbXVsdGlwbGUtZXZlbnQtcXVhbGlmaWVycy9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdAogICAgICAgICA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9OQU1FID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfTkFNRSA9CiAgICAgICAgICJldmVudHMtbXVsdGlwbGUtZXZlbnQtcXVhbGlmaWVycyI7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhQRUNURURfUkVTUE9OU0UgPSAiSGVsbG8gZnJvbSBTZXJ2bGV0IDMuMC4iOwpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBpbnRlcmNlcHRvcnMiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC01MCw3ICs1MCw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVNUX05BTUUgKyAiIHRlc3QgZmFpbGVkIik7CkBAIC02MCw3ICs2MCw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgICAgICAgICAgKyAiL215dXJsIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvcGVuaW5nIGNvbm5lY3Rpb24gdG8gIiArIHVybCk7CkBAIC05OSwxMCArOTksMTAgQEAKICAgICAgICAgICAgIGlmIChFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvbXVsdGlwbGUtZXZlbnQtcXVhbGlmaWVycy9zZXJ2bGV0L3Rlc3QvYmVhbnMvRG9jdW1lbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvbXVsdGlwbGUtZXZlbnQtcXVhbGlmaWVycy9zZXJ2bGV0L3Rlc3QvYmVhbnMvRG9jdW1lbnQuamF2YQppbmRleCA2ZTZlZWU2Li4wNDU4MTRiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL211bHRpcGxlLWV2ZW50LXF1YWxpZmllcnMvc2VydmxldC90ZXN0L2JlYW5zL0RvY3VtZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9tdWx0aXBsZS1ldmVudC1xdWFsaWZpZXJzL3NlcnZsZXQvdGVzdC9iZWFucy9Eb2N1bWVudC5qYXZhCkBAIC0yNCwxMSArMjQsMTEgQEAKICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICAgICAgdGhpcy5pc0Jsb2cgPSBibG9nOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGlzQmxvZygpewogICAgICAgICByZXR1cm4gdGhpcy5pc0Jsb2c7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgdXBkYXRlKCl7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRG9jdW1lbnQ6IiArIG5hbWUgKyAiIHVwZGF0ZWQuIik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9tdWx0aXBsZS1ldmVudC1xdWFsaWZpZXJzL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0RXZlbnRPYnNlcnZlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9tdWx0aXBsZS1ldmVudC1xdWFsaWZpZXJzL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0RXZlbnRPYnNlcnZlci5qYXZhCmluZGV4IGFjZTUzZjAuLjYzZmI1OGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvbXVsdGlwbGUtZXZlbnQtcXVhbGlmaWVycy9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEV2ZW50T2JzZXJ2ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL211bHRpcGxlLWV2ZW50LXF1YWxpZmllcnMvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RFdmVudE9ic2VydmVyLmphdmEKQEAgLTM2LDE3ICszNiwxNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RFdmVudE9ic2VydmVyOmFmdGVyRG9jdW1lbnRVcGRhdGUiKTsKICAgICAgICAgZG9jdW1lbnRBZnRlckRvY3VtZW50VXBkYXRlKys7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgb25BbnlCbG9nRXZlbnQoCiAgICAgICAgICAgICBAT2JzZXJ2ZXMgQEJsb2cgRG9jdW1lbnQgZCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RFdmVudE9ic2VydmVyOm9uQW55QmxvZ0V2ZW50Iik7CiAgICAgICAgIGRvY3VtZW50T25BbnlCbG9nRXZlbnQrKzsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBvbkFueURvY3VtZW50RXZlbnQoQE9ic2VydmVzIERvY3VtZW50IGQpewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RFdmVudE9ic2VydmVyOm9uQW55RG9jdW1lbnRFdmVudCIpOwogICAgICAgICBkb2N1bWVudE9uQW55RG9jdW1lbnRFdmVudCsrOwotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9tdWx0aXBsZS1ldmVudC1xdWFsaWZpZXJzL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L011bHRpcGxlRXZlbnRRdWFsaWZpZXJUZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9tdWx0aXBsZS1ldmVudC1xdWFsaWZpZXJzL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L011bHRpcGxlRXZlbnRRdWFsaWZpZXJUZXN0U2VydmxldC5qYXZhCmluZGV4IDMxNWM3ZmQuLmU5ZjU5OTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvbXVsdGlwbGUtZXZlbnQtcXVhbGlmaWVycy9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9NdWx0aXBsZUV2ZW50UXVhbGlmaWVyVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL211bHRpcGxlLWV2ZW50LXF1YWxpZmllcnMvc2VydmxldC90ZXN0L3NlcnZsZXQvTXVsdGlwbGVFdmVudFF1YWxpZmllclRlc3RTZXJ2bGV0LmphdmEKQEAgLTUwLDE1ICs1MCwxNSBAQAogICAgICAgICBpZiAoVGVzdEV2ZW50T2JzZXJ2ZXIuZG9jdW1lbnRBZnRlckRvY3VtZW50VXBkYXRlICE9IDEpIHsKICAgICAgICAgICAgIG1zZyArPSAiRG9jdW1lbnQgdXBkYXRlZCBldmVudCBub3QgcmVjZWl2ZWQgYnkgb2JzZXJ2ZXIiOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChUZXN0RXZlbnRPYnNlcnZlci5kb2N1bWVudE9uQW55QmxvZ0V2ZW50ICE9IDEpIHsKICAgICAgICAgICAgIG1zZyArPSAiT24gQW55IEJsb2cgZXZlbnQgbm90IHJlY2VpdmVkIGJ5IG9ic2VydmVyIjsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAoVGVzdEV2ZW50T2JzZXJ2ZXIuZG9jdW1lbnRPbkFueURvY3VtZW50RXZlbnQgIT0gMykgewogICAgICAgICAgICAgbXNnICs9ICJPbiBhbnkgZG9jdW1lbnQgZXZlbnQgbm90IHJlY2VpdmVkIGJ5IG9ic2VydmVyIjsKICAgICAgICAgfQotICAgICAgICAKKwogCiAKICAgICAgICAgd3JpdGVyLndyaXRlKG1zZyArICJcbiIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9zaW1wbGUtZXZlbnQtb2JzZXJ2ZXJzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL3NpbXBsZS1ldmVudC1vYnNlcnZlcnMvYnVpbGQucHJvcGVydGllcwppbmRleCA1YjRiODMwLi5mOWJlMTk2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL3NpbXBsZS1ldmVudC1vYnNlcnZlcnMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL3NpbXBsZS1ldmVudC1vYnNlcnZlcnMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zaW1wbGUtZXZlbnQtb2JzZXJ2ZXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvc2ltcGxlLWV2ZW50LW9ic2VydmVycy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL3NpbXBsZS1ldmVudC1vYnNlcnZlcnMvYnVpbGQueG1sCmluZGV4IDBiOWIzYTMuLjBhMWYyZjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvc2ltcGxlLWV2ZW50LW9ic2VydmVycy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9zaW1wbGUtZXZlbnQtb2JzZXJ2ZXJzL2J1aWxkLnhtbApAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSJjbGllbnQvdGVzdC9jbGllbnQiIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ4LDIzICs0OCwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSJjbGllbnQiIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJ0ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9InRlc3QuY2xpZW50LldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9zaW1wbGUtZXZlbnQtb2JzZXJ2ZXJzL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL3NpbXBsZS1ldmVudC1vYnNlcnZlcnMvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQppbmRleCBiY2FjMWQyLi4wMmM3Mzc5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL3NpbXBsZS1ldmVudC1vYnNlcnZlcnMvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL3NpbXBsZS1ldmVudC1vYnNlcnZlcnMvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQKICAgICAgICAgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfTkFNRSA9IAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX05BTUUgPQogICAgICAgICAiZXZlbnRzLXNpbXBsZS1ldmVudC1vYnNlcnZlciI7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhQRUNURURfUkVTUE9OU0UgPSAiSGVsbG8gZnJvbSBTZXJ2bGV0IDMuMC4iOwpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBpbnRlcmNlcHRvcnMiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC01MCw3ICs1MCw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVNUX05BTUUgKyAiIHRlc3QgZmFpbGVkIik7CkBAIC02MCw3ICs2MCw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgICAgICAgICAgKyAiL215dXJsIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvcGVuaW5nIGNvbm5lY3Rpb24gdG8gIiArIHVybCk7CkBAIC05OSwxMCArOTksMTAgQEAKICAgICAgICAgICAgIGlmIChFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvc2ltcGxlLWV2ZW50LW9ic2VydmVycy9zZXJ2bGV0L3Rlc3QvYmVhbnMvRG9jdW1lbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvc2ltcGxlLWV2ZW50LW9ic2VydmVycy9zZXJ2bGV0L3Rlc3QvYmVhbnMvRG9jdW1lbnQuamF2YQppbmRleCBkODU3ZjVhLi4wY2JmN2U3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL3NpbXBsZS1ldmVudC1vYnNlcnZlcnMvc2VydmxldC90ZXN0L2JlYW5zL0RvY3VtZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9zaW1wbGUtZXZlbnQtb2JzZXJ2ZXJzL3NlcnZsZXQvdGVzdC9iZWFucy9Eb2N1bWVudC5qYXZhCkBAIC0yMiw3ICsyMiw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRG9jdW1lbnQgY3JlYXRlZCB3aXRoIG5hbWUiICsgbmFtZSApOwogICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHVwZGF0ZSgpewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRvY3VtZW50OiIgKyBuYW1lICsgIiB1cGRhdGVkLiIpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvc2ltcGxlLWV2ZW50LW9ic2VydmVycy9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdFJlcXVlc3RTY29wZWRCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL3NpbXBsZS1ldmVudC1vYnNlcnZlcnMvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RSZXF1ZXN0U2NvcGVkQmVhbi5qYXZhCmluZGV4IGRhODU4ODcuLjUwZjFiOTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvc2ltcGxlLWV2ZW50LW9ic2VydmVycy9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdFJlcXVlc3RTY29wZWRCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9zaW1wbGUtZXZlbnQtb2JzZXJ2ZXJzL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0UmVxdWVzdFNjb3BlZEJlYW4uamF2YQpAQCAtMjIsNyArMjIsNyBAQAogcHVibGljIGNsYXNzIFRlc3RSZXF1ZXN0U2NvcGVkQmVhbiB7CiAgICAgQEluamVjdCBAQ3JlYXRlZCBFdmVudDxEb2N1bWVudD4gZG9jQ3JlYXRlZEV2ZW50OwogICAgIEBJbmplY3QgQFVwZGF0ZWQgRXZlbnQ8RG9jdW1lbnQ+IGRvY1VwZGF0ZWRFdmVudDsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGZpcmVFdmVudHMoKXsKICAgICAgICAgRG9jdW1lbnQgZCA9IG5ldyBEb2N1bWVudCgiVGVzdCIpOwogICAgICAgICBkb2NDcmVhdGVkRXZlbnQuZmlyZShkKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvc2ltcGxlLWV2ZW50LW9ic2VydmVycy9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9TaW1wbGVFdmVudE9ic2VydmVyVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ldmVudHMvc2ltcGxlLWV2ZW50LW9ic2VydmVycy9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9TaW1wbGVFdmVudE9ic2VydmVyVGVzdFNlcnZsZXQuamF2YQppbmRleCA5ZDFhNTZhLi40YmI1ZDE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvZXZlbnRzL3NpbXBsZS1ldmVudC1vYnNlcnZlcnMvc2VydmxldC90ZXN0L3NlcnZsZXQvU2ltcGxlRXZlbnRPYnNlcnZlclRlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2V2ZW50cy9zaW1wbGUtZXZlbnQtb2JzZXJ2ZXJzL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1NpbXBsZUV2ZW50T2JzZXJ2ZXJUZXN0U2VydmxldC5qYXZhCkBAIC01MCw3ICs1MCw3IEBACiAgICAgICAgIGlmIChUZXN0RXZlbnRPYnNlcnZlci5kb2N1bWVudFVwZGF0ZWRFdmVudCAhPSAxKXsKICAgICAgICAgICAgIG1zZyArPSAiRG9jdW1lbnQgdXBkYXRlZCBldmVudCBub3QgcmVjZWl2ZWQgYnkgb2JzZXJ2ZXIiOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChUZXN0RXZlbnRPYnNlcnZlci5kb2N1bWVudEFueUV2ZW50cyAhPSAyKXsKICAgICAgICAgICAgIG1zZyArPSAiIyBvZiBEb2N1bWVudCBldmVudCByZWNlaXZlZCBieSBvYnNlcnZlciBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZCB2YWx1ZXMuIGV4cGVjdGVkID0gMi4gb2JzZXJ2ZWQ9IisgVGVzdEV2ZW50T2JzZXJ2ZXIuZG9jdW1lbnRBbnlFdmVudHM7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbXBsaWNpdC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW1wbGljaXQvYnVpbGQueG1sCmluZGV4IDEwYmQ3NmUuLjRlMGI5NTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbXBsaWNpdC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ltcGxpY2l0L2J1aWxkLnhtbApAQCAtMzAsODYgKzMwLDg2IEBACiAgICAgJmNvbW1vbkJ1aWxkOwogICAgICZjb21tb25SdW47CiAgICAgJnJlcG9ydGluZzsKLSAgICAKKwogICAgIDxwcm9wZXJ0eSBuYW1lPSJpbXBsaWNpdC10YXJnZXQiIHZhbHVlPSJhbGwiIC8+CiAKLQk8dGFza2RlZiByZXNvdXJjZT0ibmV0L3NmL2FudGNvbnRyaWIvYW50Y29udHJpYi5wcm9wZXJ0aWVzIj4KLQkJPGNsYXNzcGF0aD4KLQkJCTxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuQVBTX0hPTUV9L2RldnRlc3RzL2NkaS9saWIvYW50LWNvbnRyaWItMS4wYjMuamFyIiAvPgotCQk8L2NsYXNzcGF0aD4KLQk8L3Rhc2tkZWY+CisgICAgPHRhc2tkZWYgcmVzb3VyY2U9Im5ldC9zZi9hbnRjb250cmliL2FudGNvbnRyaWIucHJvcGVydGllcyI+CisgICAgICAgIDxjbGFzc3BhdGg+CisgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LkFQU19IT01FfS9kZXZ0ZXN0cy9jZGkvbGliL2FudC1jb250cmliLTEuMGIzLmphciIgLz4KKyAgICAgICAgPC9jbGFzc3BhdGg+CisgICAgPC90YXNrZGVmPgogCi0JPHRhcmdldCBuYW1lPSJydW4tdGVzdCI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iaW1wbGljaXQiPgotCQkJPHBhcmFtIG5hbWU9ImltcGxpY2l0LXRhcmdldCIgdmFsdWU9InJ1bi10ZXN0IiAvPgotCQk8L2FudGNhbGw+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJydW4tdGVzdCI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iaW1wbGljaXQiPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImltcGxpY2l0LXRhcmdldCIgdmFsdWU9InJ1bi10ZXN0IiAvPgorICAgICAgICA8L2FudGNhbGw+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImFsbCI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iaW1wbGljaXQiPgotCQkJPHBhcmFtIG5hbWU9ImltcGxpY2l0LXRhcmdldCIgdmFsdWU9ImFsbCIgLz4KLQkJPC9hbnRjYWxsPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0iYWxsIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJpbXBsaWNpdCI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaW1wbGljaXQtdGFyZ2V0IiB2YWx1ZT0iYWxsIiAvPgorICAgICAgICA8L2FudGNhbGw+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImNsZWFuIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJpbXBsaWNpdCI+Ci0JCQk8cGFyYW0gbmFtZT0iaW1wbGljaXQtdGFyZ2V0IiB2YWx1ZT0iY2xlYW4iIC8+Ci0JCTwvYW50Y2FsbD4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJpbXBsaWNpdCI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaW1wbGljaXQtdGFyZ2V0IiB2YWx1ZT0iY2xlYW4iIC8+CisgICAgICAgIDwvYW50Y2FsbD4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iYnVpbGQiPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImltcGxpY2l0Ij4KLQkJCTxwYXJhbSBuYW1lPSJpbXBsaWNpdC10YXJnZXQiIHZhbHVlPSJidWlsZCIgLz4KLQkJPC9hbnRjYWxsPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImltcGxpY2l0Ij4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJpbXBsaWNpdC10YXJnZXQiIHZhbHVlPSJidWlsZCIgLz4KKyAgICAgICAgPC9hbnRjYWxsPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJzZXR1cCI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iaW1wbGljaXQiPgotCQkJPHBhcmFtIG5hbWU9ImltcGxpY2l0LXRhcmdldCIgdmFsdWU9InNldHVwIiAvPgotCQk8L2FudGNhbGw+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJzZXR1cCI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iaW1wbGljaXQiPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImltcGxpY2l0LXRhcmdldCIgdmFsdWU9InNldHVwIiAvPgorICAgICAgICA8L2FudGNhbGw+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImRlcGxveSI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iaW1wbGljaXQiPgotCQkJPHBhcmFtIG5hbWU9ImltcGxpY2l0LXRhcmdldCIgdmFsdWU9ImRlcGxveSIgLz4KLQkJPC9hbnRjYWxsPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95Ij4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJpbXBsaWNpdCI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaW1wbGljaXQtdGFyZ2V0IiB2YWx1ZT0iZGVwbG95IiAvPgorICAgICAgICA8L2FudGNhbGw+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9InVuZGVwbG95Ij4KLQkJPGFudGNhbGwgdGFyZ2V0PSJpbXBsaWNpdCI+Ci0JCQk8cGFyYW0gbmFtZT0iaW1wbGljaXQtdGFyZ2V0IiB2YWx1ZT0idW5kZXBsb3kiIC8+Ci0JCTwvYW50Y2FsbD4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95Ij4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJpbXBsaWNpdCI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaW1wbGljaXQtdGFyZ2V0IiB2YWx1ZT0idW5kZXBsb3kiIC8+CisgICAgICAgIDwvYW50Y2FsbD4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0idW5zZXR1cCI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iaW1wbGljaXQiPgotCQkJPHBhcmFtIG5hbWU9ImltcGxpY2l0LXRhcmdldCIgdmFsdWU9InVuc2V0dXAiIC8+Ci0JCTwvYW50Y2FsbD4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9InVuc2V0dXAiPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImltcGxpY2l0Ij4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJpbXBsaWNpdC10YXJnZXQiIHZhbHVlPSJ1bnNldHVwIiAvPgorICAgICAgICA8L2FudGNhbGw+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9InJ1biI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iaW1wbGljaXQiPgotCQkJPHBhcmFtIG5hbWU9ImltcGxpY2l0LXRhcmdldCIgdmFsdWU9InJ1biIgLz4KLQkJPC9hbnRjYWxsPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0icnVuIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJpbXBsaWNpdCI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaW1wbGljaXQtdGFyZ2V0IiB2YWx1ZT0icnVuIiAvPgorICAgICAgICA8L2FudGNhbGw+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImltcGxpY2l0Ij4KLQkJPHJlY29yZCBuYW1lPSJpbXBsaWNpdC5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiIC8+Ci0JCTxhbnQgZGlyPSJzaW1wbGUtZWpiLWNkaSIgdGFyZ2V0PSIke2ltcGxpY2l0LXRhcmdldH0iIC8+Ci0JCTxhbnQgZGlyPSJkZXBsb3ltZW50LW9wdGlvbiIgdGFyZ2V0PSIke2ltcGxpY2l0LXRhcmdldH0iIC8+Ci0JCTxyZWNvcmQgbmFtZT0iaW1wbGljaXQub3V0cHV0IiBhY3Rpb249InN0b3AiIC8+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJpbXBsaWNpdCI+CisgICAgICAgIDxyZWNvcmQgbmFtZT0iaW1wbGljaXQub3V0cHV0IiBhY3Rpb249InN0YXJ0IiAvPgorICAgICAgICA8YW50IGRpcj0ic2ltcGxlLWVqYi1jZGkiIHRhcmdldD0iJHtpbXBsaWNpdC10YXJnZXR9IiAvPgorICAgICAgICA8YW50IGRpcj0iZGVwbG95bWVudC1vcHRpb24iIHRhcmdldD0iJHtpbXBsaWNpdC10YXJnZXR9IiAvPgorICAgICAgICA8cmVjb3JkIG5hbWU9ImltcGxpY2l0Lm91dHB1dCIgYWN0aW9uPSJzdG9wIiAvPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JCTxlY2hvPiBVc2FnZToKLQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBzbW9rZSB0ZXN0cykKLQkJYW50IGNsZWFuIChjbGVhbnMgYWxsIHRoZSBzbW9rZSB0ZXN0cykKLQkJYW50IGJ1aWxkIChidWlsZHMgYWxsIHRoZSBzbW9rZSB0ZXN0cykKLQkJYW50IHNldHVwIChzZXRzIHVwIGFsbCByZXNvdXJjZXMgZm9yIHNtb2tlIHRlc3RzKQotCQlhbnQgZGVwbG95IChkZXBsb3lzIGFsbCB0aGUgc21va2UgYXBwcykKLQkJYW50IHJ1biAoRXhlY3V0ZXMgYWxsIHRoZSBzbW9rZSB0ZXN0cykKLQkJYW50IHVuZGVwbG95ICh1bmRlcGxveXMgYWxsIHRoZSAgc21va2UgYXBwcykKLQkJYW50IHVuc2V0dXAgKHVuc2V0cyBhbGwgcmVzb3VyY2VzIGZvciBzbW9rZSB0ZXN0cykKLQk8L2VjaG8+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CisgICAgICAgIDxlY2hvPiBVc2FnZToKKyAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBzbW9rZSB0ZXN0cykKKyAgICAgICAgYW50IGNsZWFuIChjbGVhbnMgYWxsIHRoZSBzbW9rZSB0ZXN0cykKKyAgICAgICAgYW50IGJ1aWxkIChidWlsZHMgYWxsIHRoZSBzbW9rZSB0ZXN0cykKKyAgICAgICAgYW50IHNldHVwIChzZXRzIHVwIGFsbCByZXNvdXJjZXMgZm9yIHNtb2tlIHRlc3RzKQorICAgICAgICBhbnQgZGVwbG95IChkZXBsb3lzIGFsbCB0aGUgc21va2UgYXBwcykKKyAgICAgICAgYW50IHJ1biAoRXhlY3V0ZXMgYWxsIHRoZSBzbW9rZSB0ZXN0cykKKyAgICAgICAgYW50IHVuZGVwbG95ICh1bmRlcGxveXMgYWxsIHRoZSAgc21va2UgYXBwcykKKyAgICAgICAgYW50IHVuc2V0dXAgKHVuc2V0cyBhbGwgcmVzb3VyY2VzIGZvciBzbW9rZSB0ZXN0cykKKyAgICA8L2VjaG8+CisgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW1wbGljaXQvZGVwbG95bWVudC1vcHRpb24vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbXBsaWNpdC9kZXBsb3ltZW50LW9wdGlvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDI4MWJhMDIuLjhiM2JhYjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbXBsaWNpdC9kZXBsb3ltZW50LW9wdGlvbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbXBsaWNpdC9kZXBsb3ltZW50LW9wdGlvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzaW1wbGUtZWpiLWltcGxpY2l0LWNkaS1kZXBsb3ltZW50LW9wdCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbXBsaWNpdC9kZXBsb3ltZW50LW9wdGlvbi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW1wbGljaXQvZGVwbG95bWVudC1vcHRpb24vY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGFhYmE3NDUuLmMxZjc3Y2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbXBsaWNpdC9kZXBsb3ltZW50LW9wdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ltcGxpY2l0L2RlcGxveW1lbnQtb3B0aW9uL2NsaWVudC9DbGllbnQuamF2YQpAQCAtNjIsNyArNjIsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iICwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0gICAgCXJldHVybjsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCB0ZXN0UmVzcG9uc2UoU3RyaW5nIHRlc3REZXNjcmlwdGlvbiwgU3RyaW5nIHJlc3BvbnNlKXsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbXBsaWNpdC9zaW1wbGUtZWpiLWNkaS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ltcGxpY2l0L3NpbXBsZS1lamItY2RpL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMzgyYmNkMy4uMWVjYjlhYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ltcGxpY2l0L3NpbXBsZS1lamItY2RpL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ltcGxpY2l0L3NpbXBsZS1lamItY2RpL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InNpbXBsZS1lamItaW1wbGljaXQtY2RpIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ltcGxpY2l0L3NpbXBsZS1lamItY2RpL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbXBsaWNpdC9zaW1wbGUtZWpiLWNkaS9idWlsZC54bWwKaW5kZXggM2Y4NDUyOS4uMDVhZjgzNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ltcGxpY2l0L3NpbXBsZS1lamItY2RpL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW1wbGljaXQvc2ltcGxlLWVqYi1jZGkvYnVpbGQueG1sCkBAIC0zMSw0MyArMzEsNDMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCxkZXBsb3kscnVuLHVuZGVwbG95Ii8+CiAKLQk8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgotCQk8ZGVsZXRlIGZpbGU9ImNsaWVudC9DbGllbnQuamF2YSIvPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CisgICAgICAgIDxkZWxldGUgZmlsZT0iY2xpZW50L0NsaWVudC5qYXZhIi8+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KLQkJPGNvcHkgZmlsZT0iY2xpZW50L0NsaWVudC5qYXZhLnRva2VuIiB0b2ZpbGU9ImNsaWVudC9DbGllbnQuamF2YSIvPgotCQk8cmVwbGFjZSBmaWxlPSJjbGllbnQvQ2xpZW50LmphdmEiIHRva2VuPSJAT1JCX1BPUlRAIiB2YWx1ZT0iJHtvcmIucG9ydH0iLz4KKyAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KKyAgICAgICAgPGNvcHkgZmlsZT0iY2xpZW50L0NsaWVudC5qYXZhLnRva2VuIiB0b2ZpbGU9ImNsaWVudC9DbGllbnQuamF2YSIvPgorICAgICAgICA8cmVwbGFjZSBmaWxlPSJjbGllbnQvQ2xpZW50LmphdmEiIHRva2VuPSJAT1JCX1BPUlRAIiB2YWx1ZT0iJHtvcmIucG9ydH0iLz4KIAotCQk8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KLQkJPC9hbnRjYWxsPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjbGllbnQiLz4KLQkJPC9hbnRjYWxsPgotCTwvdGFyZ2V0PgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KKyAgICAgICAgPC9hbnRjYWxsPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjbGllbnQiLz4KKyAgICAgICAgPC9hbnRjYWxsPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0JCQk8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIHZhbHVlPSIqKi9TbGVzcyouY2xhc3MsICoqL0ZvbyouY2xhc3MsICoqL0ltcGxpY2l0VGVzdEJlYW4uY2xhc3MiLz4KLQkJCTxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgdmFsdWU9IioqL0NsaWVudC5jbGFzcywgKiovRm9vKi5jbGFzcywgKiovU2xlc3MuY2xhc3MiLz4KLQkJPC9hbnRjYWxsPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiB2YWx1ZT0iKiovU2xlc3MqLmNsYXNzLCAqKi9Gb28qLmNsYXNzLCAqKi9JbXBsaWNpdFRlc3RCZWFuLmNsYXNzIi8+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIHZhbHVlPSIqKi9DbGllbnQuY2xhc3MsICoqL0ZvbyouY2xhc3MsICoqL1NsZXNzLmNsYXNzIi8+CisgICAgICAgIDwvYW50Y2FsbD4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JCTxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CisgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW1wbGljaXQvc2ltcGxlLWVqYi1jZGkvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ltcGxpY2l0L3NpbXBsZS1lamItY2RpL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBjMjY2YWEzLi4zOGI1MmUxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW1wbGljaXQvc2ltcGxlLWVqYi1jZGkvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbXBsaWNpdC9zaW1wbGUtZWpiLWNkaS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTQxLDEwICs0MSwxMCBAQAogICAgIC8vIE5PVEU6IFRva2VuIDM3MDAgd2lsbCBiZSByZXBsYWNlZCBpbiBARUpCIGFubm90YXRpb25zIGJlbG93CiAgICAgLy8gd2l0aCB0aGUgdmFsdWUgb2YgdGhlIHBvcnQgZnJvbSBjb25maWcucHJvcGVydGllcyBkdXJpbmcgdGhlIGJ1aWxkCiAgICAgLy8KLSAgICBARUpCKG1hcHBlZE5hbWUgPSAiY29yYmFuYW1lOmlpb3A6bG9jYWxob3N0OjM3MDAjdGVzdC5Gb28iKSAKKyAgICBARUpCKG1hcHBlZE5hbWUgPSAiY29yYmFuYW1lOmlpb3A6bG9jYWxob3N0OjM3MDAjdGVzdC5Gb28iKQogICAgIHByaXZhdGUgc3RhdGljIEZvbyBzbGVzczI7CiAKLSAgICBARUpCKG1hcHBlZE5hbWUgPSAiY29yYmFuYW1lOmlpb3A6bG9jYWxob3N0OjM3MDAjamF2YTpnbG9iYWwvc2ltcGxlLWVqYi1pbXBsaWNpdC1jZGlBcHAvc2ltcGxlLWVqYi1pbXBsaWNpdC1jZGktZWpiL1NsZXNzRUpCIXRlc3QuRm9vIikgCisgICAgQEVKQihtYXBwZWROYW1lID0gImNvcmJhbmFtZTppaW9wOmxvY2FsaG9zdDozNzAwI2phdmE6Z2xvYmFsL3NpbXBsZS1lamItaW1wbGljaXQtY2RpQXBwL3NpbXBsZS1lamItaW1wbGljaXQtY2RpLWVqYi9TbGVzc0VKQiF0ZXN0LkZvbyIpCiAgICAgcHJpdmF0ZSBzdGF0aWMgRm9vIHNsZXNzMzsKIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbXBsaWNpdC9zaW1wbGUtZWpiLWNkaS9lamIvdGVzdC9TbGVzc0VKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ltcGxpY2l0L3NpbXBsZS1lamItY2RpL2VqYi90ZXN0L1NsZXNzRUpCLmphdmEKaW5kZXggYTAwYzcxNy4uNjNhOWIzNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ltcGxpY2l0L3NpbXBsZS1lamItY2RpL2VqYi90ZXN0L1NsZXNzRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ltcGxpY2l0L3NpbXBsZS1lamItY2RpL2VqYi90ZXN0L1NsZXNzRUpCLmphdmEKQEAgLTMzLDcgKzMzLDcgQEAKICAgICAgICAgaWYgKHRlc3RCZWFuICE9IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybiAiaGVsbG8iOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2luamVjdGlvbi1wb2ludC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW5qZWN0aW9uLXBvaW50L1dlYlRlc3QuamF2YQppbmRleCA0ZmQ3ODJhLi5iYTRlYjZjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW5qZWN0aW9uLXBvaW50L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW5qZWN0aW9uLXBvaW50L1dlYlRlc3QuamF2YQpAQCAtNDIsNyArNDIsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVGVzdGluZyBJbmplY3Rpb25Qb2ludCBjYXBhYmlsaXRpZXMiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC01MSw3ICs1MSw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVNUX05BTUUgKyAiIHRlc3QgZmFpbGVkIik7CkBAIC02MSw3ICs2MSw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgICAgICAgICAgKyAiL215dXJsP3VzZXJuYW1lPXNjb3R0JnBhc3N3b3JkPXRpZ2VyIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvcGVuaW5nIGNvbm5lY3Rpb24gdG8gIiArIHVybCk7CkBAIC0xMDEsMTAgKzEwMSwxMCBAQAogICAgICAgICAgICAgaWYgKEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2luamVjdGlvbi1wb2ludC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2luamVjdGlvbi1wb2ludC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDU3YmE1ZmYuLmJhZWE1YTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbmplY3Rpb24tcG9pbnQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW5qZWN0aW9uLXBvaW50L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaS1wcm9ncmFtbWF0aWMtbG9va3VwIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LWFubm90YXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbmplY3Rpb24tcG9pbnQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2luamVjdGlvbi1wb2ludC9idWlsZC54bWwKaW5kZXggYzBkOTA0ZC4uODcyZjM2NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2luamVjdGlvbi1wb2ludC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2luamVjdGlvbi1wb2ludC9idWlsZC54bWwKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDcsMjMgKzQ3LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzUsMTAgKzc1LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2luamVjdGlvbi1wb2ludC9zZXJ2bGV0L0luamVjdGlvblBvaW50RmlsdGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW5qZWN0aW9uLXBvaW50L3NlcnZsZXQvSW5qZWN0aW9uUG9pbnRGaWx0ZXIuamF2YQppbmRleCBjODg0MjI2Li5iNTg3ZjZmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW5qZWN0aW9uLXBvaW50L3NlcnZsZXQvSW5qZWN0aW9uUG9pbnRGaWx0ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW5qZWN0aW9uLXBvaW50L3NlcnZsZXQvSW5qZWN0aW9uUG9pbnRGaWx0ZXIuamF2YQpAQCAtMzAsMTkgKzMwLDE5IEBACiAvL0Egd2ViIGZpbHRlciB0byBzZXQgU2VydmxldFJlcXVlc3QgaW4gdGhlIHRocmVhZCBsb2NhbCBjb250ZXh0LgogQFdlYkZpbHRlcih1cmxQYXR0ZXJucz0iLyoiKQogcHVibGljIGNsYXNzIEluamVjdGlvblBvaW50RmlsdGVyIGltcGxlbWVudHMgRmlsdGVyewotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbmplY3Rpb25Qb2ludEZpbHRlcjo6ZGVzdHJveSIpOwotICAgICAgICAKKwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvRmlsdGVyKFNlcnZsZXRSZXF1ZXN0IHJlcSwgU2VydmxldFJlc3BvbnNlIHJlcywKICAgICAgICAgICAgIEZpbHRlckNoYWluIGFyZzIpIHRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW5qZWN0aW9uUG9pbnRGaWx0ZXI6OmRvRmlsdGVyIik7Ci0gICAgICAgIC8vc2V0dGluZyB0aGUgU2VydmxldFJlcXVlc3QgaW4gdGhlIHRocmVhZC1sb2NhbCAKKyAgICAgICAgLy9zZXR0aW5nIHRoZSBTZXJ2bGV0UmVxdWVzdCBpbiB0aGUgdGhyZWFkLWxvY2FsCiAgICAgICAgIC8vdmFyaWFibGUgc28gdGhhdCBpdCBjb3VsZCBiZSB1c2VkIGluIEh0dHBQYXJhbXMKLSAgICAgICAgSHR0cFBhcmFtcy5zci5zZXQocmVxKTsgCisgICAgICAgIEh0dHBQYXJhbXMuc3Iuc2V0KHJlcSk7CiAgICAgICAgIGFyZzIuZG9GaWx0ZXIocmVxLCByZXMpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2luamVjdGlvbi1wb2ludC9zZXJ2bGV0L3Rlc3QvYXJ0aWZhY3RzL0h0dHBQYXJhbXMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbmplY3Rpb24tcG9pbnQvc2VydmxldC90ZXN0L2FydGlmYWN0cy9IdHRwUGFyYW1zLmphdmEKaW5kZXggNWUyNzkzZi4uNmQ3MWUxMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2luamVjdGlvbi1wb2ludC9zZXJ2bGV0L3Rlc3QvYXJ0aWZhY3RzL0h0dHBQYXJhbXMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW5qZWN0aW9uLXBvaW50L3NlcnZsZXQvdGVzdC9hcnRpZmFjdHMvSHR0cFBhcmFtcy5qYXZhCkBAIC0yNiwxMyArMjYsMTMgQEAKIEBSZXF1ZXN0U2NvcGVkCiBwdWJsaWMgY2xhc3MgSHR0cFBhcmFtcyB7CiAgICAgLy9BIHRocmVhZCBsb2NhbCB2YXJpYWJsZSB0byBob3VzZSB0aGUgc2VydmxldCByZXF1ZXN0LiBUaGlzIGlzIHNldCBieSB0aGUKLSAgICAvL3NlcnZsZXQgZmlsdGVyLiBUaGlzIGlzIG5vdCBhIHJlY29tbWVuZGVkIHdheSB0byBnZXQgaG9sZCBvZiBIdHRwU2VydmxldFJlcXVlc3QgCisgICAgLy9zZXJ2bGV0IGZpbHRlci4gVGhpcyBpcyBub3QgYSByZWNvbW1lbmRlZCB3YXkgdG8gZ2V0IGhvbGQgb2YgSHR0cFNlcnZsZXRSZXF1ZXN0CiAgICAgLy9pbiBhIENESSBiZWFuIGJ1dCBhIHdvcmthcm91bmQgdGhhdCBpcyBkZXNjcmliZWQgaW4KICAgICAvL2h0dHA6Ly93d3cuc2VhbWZyYW1ld29yay5vcmcvQ29tbXVuaXR5L0hvd1RvUmVhY2hIdHRwU2VydmxldFJlcXVlc3RBbmRIdHRwU2VydmxldFJlc3BvbnNlRnJvbUJlYW4KICAgICAvL1RoZSByaWdodCBhcHByb2FjaCBpcyB0byB1c2UgSlNGJ3MgRmFjZXNDb250ZXh0IGFzIGRlc2NyaWJlZCBpbgogICAgIC8vaHR0cHM6Ly9kb2NzLmpib3NzLm9yZy93ZWxkL3JlZmVyZW5jZS9zbmFwc2hvdC9lbi1VUy9odG1sL2luamVjdGlvbi5odG1sI2QwZTE2MzUKICAgICBwdWJsaWMgc3RhdGljIFRocmVhZExvY2FsPFNlcnZsZXRSZXF1ZXN0PiBzciA9IG5ldyBUaHJlYWRMb2NhbDxTZXJ2bGV0UmVxdWVzdD4oKTsKLSAgICAKKwogICAgIEBQcm9kdWNlcwogICAgIEBIdHRwUGFyYW0oIiIpCiAgICAgU3RyaW5nIGdldFBhcmFtVmFsdWUoSW5qZWN0aW9uUG9pbnQgaXApIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9idWlsZC54bWwKaW5kZXggMGNiN2FiMS4uZGRmODc3YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9idWlsZC54bWwKQEAgLTkxLDE1ICs5MSwxNSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+IFVzYWdlOgotCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGludGVyY2VwdG9ycyB0ZXN0cykKLQkJYW50IGNsZWFuIChjbGVhbnMgYWxsIHRoZSBpbnRlcmNlcHRvcnMgdGVzdHMpCi0JCWFudCBidWlsZCAoYnVpbGRzIGFsbCB0aGUgaW50ZXJjZXB0b3JzIHRlc3RzKQotCQlhbnQgc2V0dXAgKHNldHMgdXAgYWxsIHJlc291cmNlcyBmb3IgaW50ZXJjZXB0b3JzIHRlc3RzKQotCQlhbnQgZGVwbG95IChkZXBsb3lzIGFsbCB0aGUgaW50ZXJjZXB0b3JzIGFwcHMpCi0JCWFudCBydW4gKEV4ZWN1dGVzIGFsbCB0aGUgaW50ZXJjZXB0b3JzIHRlc3RzKQotCQlhbnQgdW5kZXBsb3kgKHVuZGVwbG95cyBhbGwgdGhlICBpbnRlcmNlcHRvcnMgYXBwcykKLQkJYW50IHVuc2V0dXAgKHVuc2V0cyBhbGwgcmVzb3VyY2VzIGZvciBpbnRlcmNlcHRvcnMgdGVzdHMpCi0JPC9lY2hvPgorICAgIDxlY2hvPiBVc2FnZToKKyAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBpbnRlcmNlcHRvcnMgdGVzdHMpCisgICAgICAgIGFudCBjbGVhbiAoY2xlYW5zIGFsbCB0aGUgaW50ZXJjZXB0b3JzIHRlc3RzKQorICAgICAgICBhbnQgYnVpbGQgKGJ1aWxkcyBhbGwgdGhlIGludGVyY2VwdG9ycyB0ZXN0cykKKyAgICAgICAgYW50IHNldHVwIChzZXRzIHVwIGFsbCByZXNvdXJjZXMgZm9yIGludGVyY2VwdG9ycyB0ZXN0cykKKyAgICAgICAgYW50IGRlcGxveSAoZGVwbG95cyBhbGwgdGhlIGludGVyY2VwdG9ycyBhcHBzKQorICAgICAgICBhbnQgcnVuIChFeGVjdXRlcyBhbGwgdGhlIGludGVyY2VwdG9ycyB0ZXN0cykKKyAgICAgICAgYW50IHVuZGVwbG95ICh1bmRlcGxveXMgYWxsIHRoZSAgaW50ZXJjZXB0b3JzIGFwcHMpCisgICAgICAgIGFudCB1bnNldHVwICh1bnNldHMgYWxsIHJlc291cmNlcyBmb3IgaW50ZXJjZXB0b3JzIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJlYW4tdmFsaWRhdGlvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYmVhbi12YWxpZGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOTBhNGU1MS4uMTU2Y2Q5MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYmVhbi12YWxpZGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYmVhbi12YWxpZGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tYmVhbi12YWxpZGF0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1iZWFuLXZhbGlkYXRpb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYmVhbi12YWxpZGF0aW9uL2J1aWxkLnhtbAppbmRleCA0YzdlMzAwLi44MmZmMDdmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1iZWFuLXZhbGlkYXRpb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJlYW4tdmFsaWRhdGlvbi9idWlsZC54bWwKQEAgLTQzLDcgKzQzLDcgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iY2xpZW50L3Rlc3QvY2xpZW50IiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC01MSwyMyArNTEsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iY2xpZW50IiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0idGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgZm9yaz0idHJ1ZSIgY2xhc3NuYW1lPSJ0ZXN0LmNsaWVudC5XZWJUZXN0Ij4KICAgICAgICAgICA8anZtYXJnIHZhbHVlPSItYWdlbnRsaWI6amR3cD10cmFuc3BvcnQ9ZHRfc29ja2V0LHNlcnZlcj15LHN1c3BlbmQ9JHtzdXNwZW5kfSxhZGRyZXNzPSR7anBkYS5wb3J0fSIvPgpAQCAtODAsMTAgKzgwLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYmVhbi12YWxpZGF0aW9uL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1iZWFuLXZhbGlkYXRpb24vY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQppbmRleCAwNjg0Y2ZkLi4xMDYwZWYwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1iZWFuLXZhbGlkYXRpb24vY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1iZWFuLXZhbGlkYXRpb24vY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQpAQCAtMzksNyArMzksNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBpbnRlcmNlcHRvcnMiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC00OCw3ICs0OCw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVNUX05BTUUgKyAiIHRlc3QgZmFpbGVkIik7CkBAIC01OCw3ICs1OCw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdCArICIvbXl1cmwiOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9wZW5pbmcgY29ubmVjdGlvbiB0byAiICsgdXJsKTsKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgKG5ldyBVUkwodXJsKSkub3BlbkNvbm5lY3Rpb24oKTsKQEAgLTk0LDEwICs5NCwxMCBAQAogICAgICAgICAgICAgaWYgKEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYmVhbi12YWxpZGF0aW9uL3NlcnZsZXQvdGVzdC9iZWFucy9DRElUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1iZWFuLXZhbGlkYXRpb24vc2VydmxldC90ZXN0L2JlYW5zL0NESVRlc3QuamF2YQppbmRleCBlYTUyZjZjLi5iYTg5Y2UzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1iZWFuLXZhbGlkYXRpb24vc2VydmxldC90ZXN0L2JlYW5zL0NESVRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1iZWFuLXZhbGlkYXRpb24vc2VydmxldC90ZXN0L2JlYW5zL0NESVRlc3QuamF2YQpAQCAtMzEsNSArMzEsNSBAQAogQEludGVyY2VwdG9yQmluZGluZwogcHVibGljIEBpbnRlcmZhY2UgQ0RJVGVzdCB7CiAKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYmluZGluZy10eXBlLWluaGVyaXRhbmNlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1iaW5kaW5nLXR5cGUtaW5oZXJpdGFuY2UvYnVpbGQucHJvcGVydGllcwppbmRleCA4NDMyZDc3Li40NGM0ZTU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1iaW5kaW5nLXR5cGUtaW5oZXJpdGFuY2UvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1iaW5kaW5nLXR5cGUtaW5oZXJpdGFuY2UvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1pbnRlcmNlcHRvci1iaW5kaW5nLXR5cGUtaW5oZXJpdGFuY2UiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJpbmRpbmctdHlwZS1pbmhlcml0YW5jZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1iaW5kaW5nLXR5cGUtaW5oZXJpdGFuY2UvYnVpbGQueG1sCmluZGV4IDBiOWIzYTMuLjBhMWYyZjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJpbmRpbmctdHlwZS1pbmhlcml0YW5jZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYmluZGluZy10eXBlLWluaGVyaXRhbmNlL2J1aWxkLnhtbApAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSJjbGllbnQvdGVzdC9jbGllbnQiIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ4LDIzICs0OCwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSJjbGllbnQiIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJ0ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9InRlc3QuY2xpZW50LldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYmluZGluZy10eXBlLWluaGVyaXRhbmNlL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1iaW5kaW5nLXR5cGUtaW5oZXJpdGFuY2UvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQppbmRleCAzYzQ1ZjNjLi4zMjZhYmJjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1iaW5kaW5nLXR5cGUtaW5oZXJpdGFuY2UvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1iaW5kaW5nLXR5cGUtaW5oZXJpdGFuY2UvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQKICAgICAgICAgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfTkFNRSA9IAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX05BTUUgPQogICAgICAgICAiaW50ZXJjZXB0b3JzLWludGVyY2VwdG9yLWJpbmRpbmctdHlwZS1pbmhlcml0YW5jZSI7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhQRUNURURfUkVTUE9OU0UgPSAiSGVsbG8gZnJvbSBTZXJ2bGV0IDMuMC4iOwpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBpbnRlcmNlcHRvcnMiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC01MCw3ICs1MCw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVNUX05BTUUgKyAiIHRlc3QgZmFpbGVkIik7CkBAIC02MCw3ICs2MCw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgICAgICAgICAgKyAiL215dXJsIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvcGVuaW5nIGNvbm5lY3Rpb24gdG8gIiArIHVybCk7CkBAIC05OSwxMCArOTksMTAgQEAKICAgICAgICAgICAgIGlmIChFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJpbmRpbmctdHlwZS1pbmhlcml0YW5jZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvU2VjdXJlSW50ZXJjZXB0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJpbmRpbmctdHlwZS1pbmhlcml0YW5jZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvU2VjdXJlSW50ZXJjZXB0b3IuamF2YQppbmRleCAxOGMxYjQ5Li43YzRjMjQzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1iaW5kaW5nLXR5cGUtaW5oZXJpdGFuY2Uvc2VydmxldC90ZXN0L2JlYW5zL1NlY3VyZUludGVyY2VwdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYmluZGluZy10eXBlLWluaGVyaXRhbmNlL3NlcnZsZXQvdGVzdC9iZWFucy9TZWN1cmVJbnRlcmNlcHRvci5qYXZhCkBAIC0yNiwxMyArMjYsMTMgQEAKICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gYXJvdW5kSW52b2tlQ2FsbGVkID0gZmFsc2U7CiAgICAgcHVibGljIHN0YXRpYyBpbnQgYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50ID0gMDsKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBlcnJvck1lc3NhZ2UgPSAiIjsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBUZXN0UmVxdWVzdFNjb3BlZEJlYW4gdGI7Ci0gICAgCisKICAgICBAQXJvdW5kSW52b2tlCiAgICAgcHVibGljIE9iamVjdCBtYW5hZ2VUcmFuc2FjdGlvbihJbnZvY2F0aW9uQ29udGV4dCBjdHgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlY3VyZUludGVyY2VwdG9yOjpBcm91bmRJbnZva2UiKTsKICAgICAgICAgaWYgKHRiID09IG51bGwpIGVycm9yTWVzc2FnZT0iRGVwZW5kZW5jeSBJbmplY3Rpb24gIiArCiAgICAgICAgICAgICAgICAgImludG8gVHJhbnNhY3Rpb25JbnRlcmNlcHRvciBmYWlsZWQiOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYmluZGluZy10eXBlLWluaGVyaXRhbmNlL3NlcnZsZXQvdGVzdC9iZWFucy9TaG9wcGluZ0NhcnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJpbmRpbmctdHlwZS1pbmhlcml0YW5jZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvU2hvcHBpbmdDYXJ0LmphdmEKaW5kZXggNzkzYzQwOC4uMWQ2ZjMzNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYmluZGluZy10eXBlLWluaGVyaXRhbmNlL3NlcnZsZXQvdGVzdC9iZWFucy9TaG9wcGluZ0NhcnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1iaW5kaW5nLXR5cGUtaW5oZXJpdGFuY2Uvc2VydmxldC90ZXN0L2JlYW5zL1Nob3BwaW5nQ2FydC5qYXZhCkBAIC0xNyw3ICsxNyw3IEBACiBwYWNrYWdlIHRlc3QuYmVhbnM7CiAKIHB1YmxpYyBjbGFzcyBTaG9wcGluZ0NhcnQgewotICAgIAorCiAgICAgQEFjdGlvbiBwdWJsaWMgdm9pZCBjaGVja291dCgpewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNob3BwaW5nQ2FydDo6Y2hlY2tvdXQiKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1iaW5kaW5nLXR5cGUtaW5oZXJpdGFuY2Uvc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJpbmRpbmctdHlwZS1pbmhlcml0YW5jZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCmluZGV4IDEyN2JhMWIuLjY3MTZlMTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJpbmRpbmctdHlwZS1pbmhlcml0YW5jZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJpbmRpbmctdHlwZS1pbmhlcml0YW5jZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCkBAIC0yNiwxMyArMjYsMTMgQEAKICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gYXJvdW5kSW52b2tlQ2FsbGVkID0gZmFsc2U7CiAgICAgcHVibGljIHN0YXRpYyBpbnQgYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50ID0gMDsKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBlcnJvck1lc3NhZ2UgPSAiIjsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBUZXN0UmVxdWVzdFNjb3BlZEJlYW4gdGI7Ci0gICAgCisKICAgICBAQXJvdW5kSW52b2tlCiAgICAgcHVibGljIE9iamVjdCBtYW5hZ2VUcmFuc2FjdGlvbihJbnZvY2F0aW9uQ29udGV4dCBjdHgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRyYW5zYWN0aW9uSW50ZXJjZXB0b3I6OkFyb3VuZEludm9rZSIpOwogICAgICAgICBpZiAodGIgPT0gbnVsbCkgZXJyb3JNZXNzYWdlPSJEZXBlbmRlbmN5IEluamVjdGlvbiAiICsKICAgICAgICAgICAgICAgICAiaW50byBUcmFuc2FjdGlvbkludGVyY2VwdG9yIGZhaWxlZCI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1iaW5kaW5nLXR5cGUtaW5oZXJpdGFuY2Uvc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uYWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJpbmRpbmctdHlwZS1pbmhlcml0YW5jZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25hbC5qYXZhCmluZGV4IGRjYjU5MzEuLjA0ZmQzNTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJpbmRpbmctdHlwZS1pbmhlcml0YW5jZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25hbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJpbmRpbmctdHlwZS1pbmhlcml0YW5jZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25hbC5qYXZhCkBAIC0zMCw1ICszMCw1IEBACiBASW50ZXJjZXB0b3JCaW5kaW5nCiBwdWJsaWMgQGludGVyZmFjZSBUcmFuc2FjdGlvbmFsIHsKIAotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1iaW5kaW5nLXR5cGUtaW5oZXJpdGFuY2Uvc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uYWxTZWN1cmVJbnRlcmNlcHRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYmluZGluZy10eXBlLWluaGVyaXRhbmNlL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbmFsU2VjdXJlSW50ZXJjZXB0b3IuamF2YQppbmRleCA0MDdiMDc5Li4wMDU5MzE2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1iaW5kaW5nLXR5cGUtaW5oZXJpdGFuY2Uvc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uYWxTZWN1cmVJbnRlcmNlcHRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJpbmRpbmctdHlwZS1pbmhlcml0YW5jZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25hbFNlY3VyZUludGVyY2VwdG9yLmphdmEKQEAgLTI2LDEzICsyNiwxMyBAQAogICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBhcm91bmRJbnZva2VDYWxsZWQgPSBmYWxzZTsKICAgICBwdWJsaWMgc3RhdGljIGludCBhcm91bmRJbnZva2VJbnZvY2F0aW9uQ291bnQgPSAwOwogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGVycm9yTWVzc2FnZSA9ICIiOwotICAgIAorCiAgICAgQEluamVjdAogICAgIFRlc3RSZXF1ZXN0U2NvcGVkQmVhbiB0YjsKLSAgICAKKwogICAgIEBBcm91bmRJbnZva2UKICAgICBwdWJsaWMgT2JqZWN0IG1hbmFnZVRyYW5zYWN0aW9uKEludm9jYXRpb25Db250ZXh0IGN0eCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVHJhbnNhY3Rpb25hbFNlY3VyZUludGVyY2VwdG9yOjpBcm91bmRJbnZva2UiKTsKICAgICAgICAgaWYgKHRiID09IG51bGwpIGVycm9yTWVzc2FnZT0iRGVwZW5kZW5jeSBJbmplY3Rpb24gIiArCiAgICAgICAgICAgICAgICAgImludG8gVHJhbnNhY3Rpb25JbnRlcmNlcHRvciBmYWlsZWQiOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYmluZGluZy10eXBlLXdpdGgtbWVtYmVycy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYmluZGluZy10eXBlLXdpdGgtbWVtYmVycy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDY2OWVkYzAuLjJjOTUyN2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJpbmRpbmctdHlwZS13aXRoLW1lbWJlcnMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1iaW5kaW5nLXR5cGUtd2l0aC1tZW1iZXJzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tYmluZGluZy10eXBlcy13aXRoLW1lbWJlcnMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJpbmRpbmctdHlwZS13aXRoLW1lbWJlcnMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYmluZGluZy10eXBlLXdpdGgtbWVtYmVycy9idWlsZC54bWwKaW5kZXggMGI5YjNhMy4uMGExZjJmOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYmluZGluZy10eXBlLXdpdGgtbWVtYmVycy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYmluZGluZy10eXBlLXdpdGgtbWVtYmVycy9idWlsZC54bWwKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iY2xpZW50L3Rlc3QvY2xpZW50IiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00OCwyMyArNDgsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iY2xpZW50IiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0idGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJ0ZXN0LmNsaWVudC5XZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJpbmRpbmctdHlwZS13aXRoLW1lbWJlcnMvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJpbmRpbmctdHlwZS13aXRoLW1lbWJlcnMvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQppbmRleCBlZDBiZWMwLi42MGQ3OWY5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1iaW5kaW5nLXR5cGUtd2l0aC1tZW1iZXJzL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYmluZGluZy10eXBlLXdpdGgtbWVtYmVycy9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGludGVyY2VwdG9ycyIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ5LDcgKzQ5LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKQEAgLTU5LDcgKzU5LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICArICIvbXl1cmwiOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9wZW5pbmcgY29ubmVjdGlvbiB0byAiICsgdXJsKTsKQEAgLTk4LDEwICs5OCwxMCBAQAogICAgICAgICAgICAgaWYgKEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYmluZGluZy10eXBlLXdpdGgtbWVtYmVycy9zZXJ2bGV0L3Rlc3QvYmVhbnMvUmVxdWlyZXNOZXdUcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1iaW5kaW5nLXR5cGUtd2l0aC1tZW1iZXJzL3NlcnZsZXQvdGVzdC9iZWFucy9SZXF1aXJlc05ld1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YQppbmRleCBlNjI2YTM3Li5jMDMwNjA0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1iaW5kaW5nLXR5cGUtd2l0aC1tZW1iZXJzL3NlcnZsZXQvdGVzdC9iZWFucy9SZXF1aXJlc05ld1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1iaW5kaW5nLXR5cGUtd2l0aC1tZW1iZXJzL3NlcnZsZXQvdGVzdC9iZWFucy9SZXF1aXJlc05ld1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YQpAQCAtMjgsMTAgKzI4LDEwIEBACiAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGFyb3VuZEludm9rZUNhbGxlZCA9IGZhbHNlOwogICAgIHB1YmxpYyBzdGF0aWMgaW50IGFyb3VuZEludm9rZUludm9jYXRpb25Db3VudCA9IDA7CiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZXJyb3JNZXNzYWdlID0gIiI7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgVGVzdERlcGVuZGVudEJlYW4gdGI7Ci0gICAgCisKICAgICBAQXJvdW5kSW52b2tlCiAgICAgcHVibGljIE9iamVjdCBtYW5hZ2VUcmFuc2FjdGlvbihJbnZvY2F0aW9uQ29udGV4dCBjdHgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlcXVpcmVzTmV3VHJhbnNhY3Rpb25JbnRlcmNlcHRvcjo6QXJvdW5kSW52b2tlIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1iaW5kaW5nLXR5cGUtd2l0aC1tZW1iZXJzL3NlcnZsZXQvdGVzdC9iZWFucy9TaG9wcGluZ0NhcnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJpbmRpbmctdHlwZS13aXRoLW1lbWJlcnMvc2VydmxldC90ZXN0L2JlYW5zL1Nob3BwaW5nQ2FydC5qYXZhCmluZGV4IDYwYThhNDAuLmY4YzlhOGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJpbmRpbmctdHlwZS13aXRoLW1lbWJlcnMvc2VydmxldC90ZXN0L2JlYW5zL1Nob3BwaW5nQ2FydC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJpbmRpbmctdHlwZS13aXRoLW1lbWJlcnMvc2VydmxldC90ZXN0L2JlYW5zL1Nob3BwaW5nQ2FydC5qYXZhCkBAIC0yMCwxMCArMjAsMTAgQEAKIEBUcmFuc2FjdGlvbmFsKHJlcXVpcmVzTmV3PXRydWUpCiBAUHJlZmVycmVkCiBwdWJsaWMgY2xhc3MgU2hvcHBpbmdDYXJ0ICB7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBhZGRJdGVtKFN0cmluZyBzKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2hvcHBpbmdDYXJ0OjphZGRJdGVtIGNhbGxlZCIpOwotICAgICAgICAKKwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYmluZGluZy10eXBlLXdpdGgtbWVtYmVycy9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYmluZGluZy10eXBlLXdpdGgtbWVtYmVycy9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCmluZGV4IGFmZGMxNTYuLmUxZDBkNTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJpbmRpbmctdHlwZS13aXRoLW1lbWJlcnMvc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1iaW5kaW5nLXR5cGUtd2l0aC1tZW1iZXJzL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEKQEAgLTI3LDE1ICsyNywxNSBAQAogICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBhcm91bmRJbnZva2VDYWxsZWQgPSBmYWxzZTsKICAgICBwdWJsaWMgc3RhdGljIGludCBhcm91bmRJbnZva2VJbnZvY2F0aW9uQ291bnQgPSAwOwogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGVycm9yTWVzc2FnZSA9ICIiOwotICAgIAorCiAgICAgQEluamVjdAogICAgIFRlc3REZXBlbmRlbnRCZWFuIHRiOwotICAgIAorCiAgICAgQEFyb3VuZEludm9rZQogICAgIHB1YmxpYyBPYmplY3QgbWFuYWdlVHJhbnNhY3Rpb24oSW52b2NhdGlvbkNvbnRleHQgY3R4KSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUcmFuc2FjdGlvbkludGVyY2VwdG9yOjpBcm91bmRJbnZva2UiKTsKICAgICAgICAgaWYgKHRiID09IG51bGwpIGVycm9yTWVzc2FnZT0iRGVwZW5kZW5jeSBJbmplY3Rpb24gIiArCi0gICAgICAgIAkJImludG8gVHJhbnNhY3Rpb25JbnRlcmNlcHRvciBmYWlsZWQiOworICAgICAgICAgICAgICAgICJpbnRvIFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IgZmFpbGVkIjsKICAgICAgICAgYXJvdW5kSW52b2tlQ2FsbGVkID0gdHJ1ZTsKICAgICAgICAgYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50ICsrOwogICAgICAgICByZXR1cm4gY3R4LnByb2NlZWQoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJpbmRpbmctdHlwZS13aXRoLW1lbWJlcnMvc2VydmxldC90ZXN0L3NlcnZsZXQvQnVzaW5lc3NNZXRob2RJbnRlcmNlcHRvclRlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1iaW5kaW5nLXR5cGUtd2l0aC1tZW1iZXJzL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L0J1c2luZXNzTWV0aG9kSW50ZXJjZXB0b3JUZXN0U2VydmxldC5qYXZhCmluZGV4IDA4OGQ2Y2UuLjNiODk4ZDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJpbmRpbmctdHlwZS13aXRoLW1lbWJlcnMvc2VydmxldC90ZXN0L3NlcnZsZXQvQnVzaW5lc3NNZXRob2RJbnRlcmNlcHRvclRlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYmluZGluZy10eXBlLXdpdGgtbWVtYmVycy9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9CdXNpbmVzc01ldGhvZEludGVyY2VwdG9yVGVzdFNlcnZsZXQuamF2YQpAQCAtMzcsNyArMzcsNyBAQAogICAgIEBJbmplY3QKICAgICBAUHJlZmVycmVkCiAgICAgVGVzdEJlYW4gdGI7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgQFByZWZlcnJlZAogICAgIFNob3BwaW5nQ2FydCBzYzsKQEAgLTYzLDMwICs2MywzMCBAQAogICAgICAgICAgICAgICAgICAgICArIFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IuYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50OwogICAgICAgICBpZiAoIVRyYW5zYWN0aW9uSW50ZXJjZXB0b3IuZXJyb3JNZXNzYWdlLnRyaW0oKS5lcXVhbHMoIiIpKQogICAgICAgICAgICAgbXNnICs9IFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IuZXJyb3JNZXNzYWdlOwotICAgICAgICAKKwogICAgICAgICBpZiAoUmVxdWlyZXNOZXdUcmFuc2FjdGlvbkludGVyY2VwdG9yLmFyb3VuZEludm9rZUNhbGxlZCkKICAgICAgICAgICAgIG1zZyArPSAiUmVxdWlyZXNOZXcgVHJhbnNhY3Rpb25JbnRlcmNlcHRvciBjYWxsZWQgd2hlbiAiICsKLSAgICAgICAgICAgIAkJIml0IHNob3VsZG4ndCBoYXZlIGJlZW4gY2FsbGVkIjsKLSAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICJpdCBzaG91bGRuJ3QgaGF2ZSBiZWVuIGNhbGxlZCI7CisKICAgICAgICAgVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5jbGVhcigpOwogICAgICAgICAvL2ludm9rZSBzaG9wcGluZyBjYXJ0IGJlYW4uIFRoaXMgc2hvdWxkIHJlc3VsdCBpbiBhbiBpbnZvY2F0aW9uIG9uCiAgICAgICAgIC8vdGhlIFJlcXVpcmVzTmV3VHJhbnNhY3Rpb25hbAogICAgICAgICBzYy5hZGRJdGVtKCJUZXN0IEl0ZW0iKTsKICAgICAgICAgaWYgKCFSZXF1aXJlc05ld1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuYXJvdW5kSW52b2tlQ2FsbGVkKQogICAgICAgICAgICAgbXNnICs9ICJCdXNpbmVzcyBtZXRob2QgaW50ZXJjZXB0b3IgYXJvdW5kSW52b2tlIGluIHJlcXVpcmVzIG5ldyAiICsKLSAgICAgICAgICAgIAkJInRyYW5zYWN0aW9uIGludGVyY2VwdG9yIG5vdCBjYWxsZWQiOworICAgICAgICAgICAgICAgICAgICAidHJhbnNhY3Rpb24gaW50ZXJjZXB0b3Igbm90IGNhbGxlZCI7CiAgICAgICAgIGlmIChSZXF1aXJlc05ld1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50ICE9IDEpCiAgICAgICAgICAgICBtc2cgKz0gIkJ1c2luZXNzIG1ldGhvZCByZXF1aXJlcyBuZXcgaW50ZXJjZXB0b3IgaW52b2NhdGlvbiBvbiAiICsKLSAgICAgICAgICAgIAkJIm1ldGhvZC1sZXZlbCBpbnRlcmNlcHRvciBhbm5vdGF0aW9uIGNvdW50IG5vdCBleHBlY3RlZC4gIgorICAgICAgICAgICAgICAgICAgICAibWV0aG9kLWxldmVsIGludGVyY2VwdG9yIGFubm90YXRpb24gY291bnQgbm90IGV4cGVjdGVkLiAiCiAgICAgICAgICAgICAgICAgICAgICsgImV4cGVjdGVkID0xLCBhY3R1YWw9IgogICAgICAgICAgICAgICAgICAgICArIFJlcXVpcmVzTmV3VHJhbnNhY3Rpb25JbnRlcmNlcHRvci5hcm91bmRJbnZva2VJbnZvY2F0aW9uQ291bnQ7CiAgICAgICAgIGlmICghUmVxdWlyZXNOZXdUcmFuc2FjdGlvbkludGVyY2VwdG9yLmVycm9yTWVzc2FnZS50cmltKCkuZXF1YWxzKCIiKSkKICAgICAgICAgICAgIG1zZyArPSBSZXF1aXJlc05ld1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuZXJyb3JNZXNzYWdlOwotICAgICAgICAKKwogICAgICAgICAvL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3Igc2hvdWxkIG5vdCBoYXZlIGJlZW4gY2FsbGVkCiAgICAgICAgIGlmIChUcmFuc2FjdGlvbkludGVyY2VwdG9yLmFyb3VuZEludm9rZUNhbGxlZCkKICAgICAgICAgICAgIG1zZyArPSAiVHJhbnNjYXRpb25JbnRlcmNlcHRvciBhcm91bmRJbnZva2UgY2FsbGVkIHdoZW4gYSByZXF1aXJlc25ldyIgKwotICAgICAgICAgICAgCQkidHJhbnNhY3Rpb24gaW50ZXJjZXB0b3Igc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQiOworICAgICAgICAgICAgICAgICAgICAidHJhbnNhY3Rpb24gaW50ZXJjZXB0b3Igc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQiOwogCiAgICAgICAgIHdyaXRlci53cml0ZShtc2cgKyAiXG4iKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1idXNpbmVzcy1tZXRob2QtaW50ZXJjZXB0aW9uL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1idXNpbmVzcy1tZXRob2QtaW50ZXJjZXB0aW9uL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggN2ZlZTgyZS4uOGU1ZDE1MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYnVzaW5lc3MtbWV0aG9kLWludGVyY2VwdGlvbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJ1c2luZXNzLW1ldGhvZC1pbnRlcmNlcHRpb24vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1idXNpbmVzcy1tZXRob2QtaW50ZXJjZXB0b3JzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1idXNpbmVzcy1tZXRob2QtaW50ZXJjZXB0aW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJ1c2luZXNzLW1ldGhvZC1pbnRlcmNlcHRpb24vYnVpbGQueG1sCmluZGV4IDBiOWIzYTMuLjBhMWYyZjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJ1c2luZXNzLW1ldGhvZC1pbnRlcmNlcHRpb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJ1c2luZXNzLW1ldGhvZC1pbnRlcmNlcHRpb24vYnVpbGQueG1sCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9ImNsaWVudC90ZXN0L2NsaWVudCIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDgsMjMgKzQ4LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9ImNsaWVudCIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9InRlc3QvY2xpZW50L1dlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0idGVzdC5jbGllbnQuV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1idXNpbmVzcy1tZXRob2QtaW50ZXJjZXB0aW9uL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1idXNpbmVzcy1tZXRob2QtaW50ZXJjZXB0aW9uL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKaW5kZXggZWQwYmVjMC4uNjBkNzlmOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYnVzaW5lc3MtbWV0aG9kLWludGVyY2VwdGlvbi9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJ1c2luZXNzLW1ldGhvZC1pbnRlcmNlcHRpb24vY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQpAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBpbnRlcmNlcHRvcnMiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC00OSw3ICs0OSw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVNUX05BTUUgKyAiIHRlc3QgZmFpbGVkIik7CkBAIC01OSw3ICs1OSw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgICAgICAgICAgKyAiL215dXJsIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvcGVuaW5nIGNvbm5lY3Rpb24gdG8gIiArIHVybCk7CkBAIC05OCwxMCArOTgsMTAgQEAKICAgICAgICAgICAgIGlmIChFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJ1c2luZXNzLW1ldGhvZC1pbnRlcmNlcHRpb24vc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJ1c2luZXNzLW1ldGhvZC1pbnRlcmNlcHRpb24vc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YQppbmRleCBhZmRjMTU2Li5lMWQwZDUyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1idXNpbmVzcy1tZXRob2QtaW50ZXJjZXB0aW9uL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYnVzaW5lc3MtbWV0aG9kLWludGVyY2VwdGlvbi9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCkBAIC0yNywxNSArMjcsMTUgQEAKICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gYXJvdW5kSW52b2tlQ2FsbGVkID0gZmFsc2U7CiAgICAgcHVibGljIHN0YXRpYyBpbnQgYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50ID0gMDsKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBlcnJvck1lc3NhZ2UgPSAiIjsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBUZXN0RGVwZW5kZW50QmVhbiB0YjsKLSAgICAKKwogICAgIEBBcm91bmRJbnZva2UKICAgICBwdWJsaWMgT2JqZWN0IG1hbmFnZVRyYW5zYWN0aW9uKEludm9jYXRpb25Db250ZXh0IGN0eCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVHJhbnNhY3Rpb25JbnRlcmNlcHRvcjo6QXJvdW5kSW52b2tlIik7CiAgICAgICAgIGlmICh0YiA9PSBudWxsKSBlcnJvck1lc3NhZ2U9IkRlcGVuZGVuY3kgSW5qZWN0aW9uICIgKwotICAgICAgICAJCSJpbnRvIFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IgZmFpbGVkIjsKKyAgICAgICAgICAgICAgICAiaW50byBUcmFuc2FjdGlvbkludGVyY2VwdG9yIGZhaWxlZCI7CiAgICAgICAgIGFyb3VuZEludm9rZUNhbGxlZCA9IHRydWU7CiAgICAgICAgIGFyb3VuZEludm9rZUludm9jYXRpb25Db3VudCArKzsKICAgICAgICAgcmV0dXJuIGN0eC5wcm9jZWVkKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1idXNpbmVzcy1tZXRob2QtaW50ZXJjZXB0aW9uL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbmFsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1idXNpbmVzcy1tZXRob2QtaW50ZXJjZXB0aW9uL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbmFsLmphdmEKaW5kZXggOThmODVkNC4uOGJkOThjYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtYnVzaW5lc3MtbWV0aG9kLWludGVyY2VwdGlvbi9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25hbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWJ1c2luZXNzLW1ldGhvZC1pbnRlcmNlcHRpb24vc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uYWwuamF2YQpAQCAtMzEsNSArMzEsNSBAQAogQEludGVyY2VwdG9yQmluZGluZwogcHVibGljIEBpbnRlcmZhY2UgVHJhbnNhY3Rpb25hbCB7CiAKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtaW52YWxpZC1pbnRlcmNlcHRvci1zcGVjaWZpZWQtYXQtYmVhbnMteG1sL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1pbnZhbGlkLWludGVyY2VwdG9yLXNwZWNpZmllZC1hdC1iZWFucy14bWwvYnVpbGQucHJvcGVydGllcwppbmRleCBiYWViNjNiLi45NjExZjBjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1pbnZhbGlkLWludGVyY2VwdG9yLXNwZWNpZmllZC1hdC1iZWFucy14bWwvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1pbnZhbGlkLWludGVyY2VwdG9yLXNwZWNpZmllZC1hdC1iZWFucy14bWwvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1pbnZhbGlkLWludGVyY2VwdG9yLWluLWJlYW5zLXhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtaW52YWxpZC1pbnRlcmNlcHRvci1zcGVjaWZpZWQtYXQtYmVhbnMteG1sL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWludmFsaWQtaW50ZXJjZXB0b3Itc3BlY2lmaWVkLWF0LWJlYW5zLXhtbC9idWlsZC54bWwKaW5kZXggMGI5YjNhMy4uMGExZjJmOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtaW52YWxpZC1pbnRlcmNlcHRvci1zcGVjaWZpZWQtYXQtYmVhbnMteG1sL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1pbnZhbGlkLWludGVyY2VwdG9yLXNwZWNpZmllZC1hdC1iZWFucy14bWwvYnVpbGQueG1sCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9ImNsaWVudC90ZXN0L2NsaWVudCIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDgsMjMgKzQ4LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9ImNsaWVudCIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9InRlc3QvY2xpZW50L1dlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0idGVzdC5jbGllbnQuV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1pbnZhbGlkLWludGVyY2VwdG9yLXNwZWNpZmllZC1hdC1iZWFucy14bWwvc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWludmFsaWQtaW50ZXJjZXB0b3Itc3BlY2lmaWVkLWF0LWJlYW5zLXhtbC9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCmluZGV4IGFmZGMxNTYuLmUxZDBkNTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWludmFsaWQtaW50ZXJjZXB0b3Itc3BlY2lmaWVkLWF0LWJlYW5zLXhtbC9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWludmFsaWQtaW50ZXJjZXB0b3Itc3BlY2lmaWVkLWF0LWJlYW5zLXhtbC9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCkBAIC0yNywxNSArMjcsMTUgQEAKICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gYXJvdW5kSW52b2tlQ2FsbGVkID0gZmFsc2U7CiAgICAgcHVibGljIHN0YXRpYyBpbnQgYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50ID0gMDsKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBlcnJvck1lc3NhZ2UgPSAiIjsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBUZXN0RGVwZW5kZW50QmVhbiB0YjsKLSAgICAKKwogICAgIEBBcm91bmRJbnZva2UKICAgICBwdWJsaWMgT2JqZWN0IG1hbmFnZVRyYW5zYWN0aW9uKEludm9jYXRpb25Db250ZXh0IGN0eCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVHJhbnNhY3Rpb25JbnRlcmNlcHRvcjo6QXJvdW5kSW52b2tlIik7CiAgICAgICAgIGlmICh0YiA9PSBudWxsKSBlcnJvck1lc3NhZ2U9IkRlcGVuZGVuY3kgSW5qZWN0aW9uICIgKwotICAgICAgICAJCSJpbnRvIFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IgZmFpbGVkIjsKKyAgICAgICAgICAgICAgICAiaW50byBUcmFuc2FjdGlvbkludGVyY2VwdG9yIGZhaWxlZCI7CiAgICAgICAgIGFyb3VuZEludm9rZUNhbGxlZCA9IHRydWU7CiAgICAgICAgIGFyb3VuZEludm9rZUludm9jYXRpb25Db3VudCArKzsKICAgICAgICAgcmV0dXJuIGN0eC5wcm9jZWVkKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1pbnZhbGlkLWludGVyY2VwdG9yLXNwZWNpZmllZC1hdC1iZWFucy14bWwvc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uYWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWludmFsaWQtaW50ZXJjZXB0b3Itc3BlY2lmaWVkLWF0LWJlYW5zLXhtbC9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25hbC5qYXZhCmluZGV4IGRjYjU5MzEuLjA0ZmQzNTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWludmFsaWQtaW50ZXJjZXB0b3Itc3BlY2lmaWVkLWF0LWJlYW5zLXhtbC9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25hbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWludmFsaWQtaW50ZXJjZXB0b3Itc3BlY2lmaWVkLWF0LWJlYW5zLXhtbC9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25hbC5qYXZhCkBAIC0zMCw1ICszMCw1IEBACiBASW50ZXJjZXB0b3JCaW5kaW5nCiBwdWJsaWMgQGludGVyZmFjZSBUcmFuc2FjdGlvbmFsIHsKIAotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1tdWx0aXBsZS1pbnRlcmNlcHRvci1iaW5kaW5nLWFubm90YXRpb25zL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1tdWx0aXBsZS1pbnRlcmNlcHRvci1iaW5kaW5nLWFubm90YXRpb25zL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYTViMDhhNC4uMTNlNWFkNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtbXVsdGlwbGUtaW50ZXJjZXB0b3ItYmluZGluZy1hbm5vdGF0aW9ucy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLW11bHRpcGxlLWludGVyY2VwdG9yLWJpbmRpbmctYW5ub3RhdGlvbnMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1tdWx0aXBsZS1pbnRlcmNlcHRvci1iaW5kaW5nLWFubm90YXRpb25zIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1tdWx0aXBsZS1pbnRlcmNlcHRvci1iaW5kaW5nLWFubm90YXRpb25zL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLW11bHRpcGxlLWludGVyY2VwdG9yLWJpbmRpbmctYW5ub3RhdGlvbnMvYnVpbGQueG1sCmluZGV4IDBiOWIzYTMuLjBhMWYyZjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLW11bHRpcGxlLWludGVyY2VwdG9yLWJpbmRpbmctYW5ub3RhdGlvbnMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLW11bHRpcGxlLWludGVyY2VwdG9yLWJpbmRpbmctYW5ub3RhdGlvbnMvYnVpbGQueG1sCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9ImNsaWVudC90ZXN0L2NsaWVudCIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDgsMjMgKzQ4LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9ImNsaWVudCIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9InRlc3QvY2xpZW50L1dlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0idGVzdC5jbGllbnQuV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1tdWx0aXBsZS1pbnRlcmNlcHRvci1iaW5kaW5nLWFubm90YXRpb25zL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1tdWx0aXBsZS1pbnRlcmNlcHRvci1iaW5kaW5nLWFubm90YXRpb25zL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKaW5kZXggNzdhYmU5Ni4uN2M3MTdmZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtbXVsdGlwbGUtaW50ZXJjZXB0b3ItYmluZGluZy1hbm5vdGF0aW9ucy9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLW11bHRpcGxlLWludGVyY2VwdG9yLWJpbmRpbmctYW5ub3RhdGlvbnMvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQKICAgICAgICAgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfTkFNRSA9IAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX05BTUUgPQogICAgICAgICAiaW50ZXJjZXB0b3JzLW11bHRpcGxlLWludGVyY2VwdG9yLWJpbmRpbmctYW5ub3RhdGlvbnMiOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVYUEVDVEVEX1JFU1BPTlNFID0gIkhlbGxvIGZyb20gU2VydmxldCAzLjAuIjsKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgaW50ZXJjZXB0b3JzIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTAsNyArNTAsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZCIpOwpAQCAtNjAsNyArNjAsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgICsgIi9teXVybCI7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigib3BlbmluZyBjb25uZWN0aW9uIHRvICIgKyB1cmwpOwpAQCAtOTksMTAgKzk5LDEwIEBACiAgICAgICAgICAgICBpZiAoRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1tdWx0aXBsZS1pbnRlcmNlcHRvci1iaW5kaW5nLWFubm90YXRpb25zL3NlcnZsZXQvdGVzdC9iZWFucy9TaG9wcGluZ0NhcnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLW11bHRpcGxlLWludGVyY2VwdG9yLWJpbmRpbmctYW5ub3RhdGlvbnMvc2VydmxldC90ZXN0L2JlYW5zL1Nob3BwaW5nQ2FydC5qYXZhCmluZGV4IGI5OWNlNmMuLjIwYjc5NmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLW11bHRpcGxlLWludGVyY2VwdG9yLWJpbmRpbmctYW5ub3RhdGlvbnMvc2VydmxldC90ZXN0L2JlYW5zL1Nob3BwaW5nQ2FydC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLW11bHRpcGxlLWludGVyY2VwdG9yLWJpbmRpbmctYW5ub3RhdGlvbnMvc2VydmxldC90ZXN0L2JlYW5zL1Nob3BwaW5nQ2FydC5qYXZhCkBAIC0xNyw3ICsxNyw3IEBACiBwYWNrYWdlIHRlc3QuYmVhbnM7CiAKIHB1YmxpYyBjbGFzcyBTaG9wcGluZ0NhcnQgewotICAgIAorCiAgICAgQFRyYW5zYWN0aW9uYWwgQFNlY3VyZSBwdWJsaWMgdm9pZCBjaGVja291dCgpewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNob3BwaW5nQ2FydDo6Y2hlY2tvdXQiKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1tdWx0aXBsZS1pbnRlcmNlcHRvci1iaW5kaW5nLWFubm90YXRpb25zL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbmFsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1tdWx0aXBsZS1pbnRlcmNlcHRvci1iaW5kaW5nLWFubm90YXRpb25zL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbmFsLmphdmEKaW5kZXggZGNiNTkzMS4uMDRmZDM1MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtbXVsdGlwbGUtaW50ZXJjZXB0b3ItYmluZGluZy1hbm5vdGF0aW9ucy9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25hbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLW11bHRpcGxlLWludGVyY2VwdG9yLWJpbmRpbmctYW5ub3RhdGlvbnMvc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uYWwuamF2YQpAQCAtMzAsNSArMzAsNSBAQAogQEludGVyY2VwdG9yQmluZGluZwogcHVibGljIEBpbnRlcmZhY2UgVHJhbnNhY3Rpb25hbCB7CiAKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtbXVsdGlwbGUtaW50ZXJjZXB0b3ItYmluZGluZy1hbm5vdGF0aW9ucy9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25hbFNlY3VyZUludGVyY2VwdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1tdWx0aXBsZS1pbnRlcmNlcHRvci1iaW5kaW5nLWFubm90YXRpb25zL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbmFsU2VjdXJlSW50ZXJjZXB0b3IuamF2YQppbmRleCBkNTJlYjU4Li40ZmY3ZmNlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1tdWx0aXBsZS1pbnRlcmNlcHRvci1iaW5kaW5nLWFubm90YXRpb25zL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbmFsU2VjdXJlSW50ZXJjZXB0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1tdWx0aXBsZS1pbnRlcmNlcHRvci1iaW5kaW5nLWFubm90YXRpb25zL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbmFsU2VjdXJlSW50ZXJjZXB0b3IuamF2YQpAQCAtMjYsMTMgKzI2LDEzIEBACiAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGFyb3VuZEludm9rZUNhbGxlZCA9IGZhbHNlOwogICAgIHB1YmxpYyBzdGF0aWMgaW50IGFyb3VuZEludm9rZUludm9jYXRpb25Db3VudCA9IDA7CiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZXJyb3JNZXNzYWdlID0gIiI7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgVGVzdFJlcXVlc3RTY29wZWRCZWFuIHRiOwotICAgIAorCiAgICAgQEFyb3VuZEludm9rZQogICAgIHB1YmxpYyBPYmplY3QgbWFuYWdlVHJhbnNhY3Rpb24oSW52b2NhdGlvbkNvbnRleHQgY3R4KSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUcmFuc2FjdGlvbkludGVyY2VwdG9yOjpBcm91bmRJbnZva2UiKTsKICAgICAgICAgaWYgKHRiID09IG51bGwpIGVycm9yTWVzc2FnZT0iRGVwZW5kZW5jeSBJbmplY3Rpb24gIiArCiAgICAgICAgICAgICAgICAgImludG8gVHJhbnNhY3Rpb25JbnRlcmNlcHRvciBmYWlsZWQiOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtbXVsdGlwbGUtaW50ZXJjZXB0b3ItYmluZGluZy1hbm5vdGF0aW9ucy9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9NdWx0aXBsZUludGVyY2VwdG9yQmluZGluZ0Fubm90YXRpb25zVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLW11bHRpcGxlLWludGVyY2VwdG9yLWJpbmRpbmctYW5ub3RhdGlvbnMvc2VydmxldC90ZXN0L3NlcnZsZXQvTXVsdGlwbGVJbnRlcmNlcHRvckJpbmRpbmdBbm5vdGF0aW9uc1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggZjhjMGE4ZC4uZTU2MGU4NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtbXVsdGlwbGUtaW50ZXJjZXB0b3ItYmluZGluZy1hbm5vdGF0aW9ucy9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9NdWx0aXBsZUludGVyY2VwdG9yQmluZGluZ0Fubm90YXRpb25zVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1tdWx0aXBsZS1pbnRlcmNlcHRvci1iaW5kaW5nLWFubm90YXRpb25zL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L011bHRpcGxlSW50ZXJjZXB0b3JCaW5kaW5nQW5ub3RhdGlvbnNUZXN0U2VydmxldC5qYXZhCkBAIC0zOSwxMCArMzksMTAgQEAKICAgICBASW5qZWN0CiAgICAgQFByZWZlcnJlZAogICAgIFRlc3RCZWFuIHRiOwotICAgIAorCiAgICAgQEluamVjdAogICAgIFNob3BwaW5nQ2FydCBzYzsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBAUHJlZmVycmVkCiAgICAgU2Vjb25kU2hvcHBpbmdDYXJ0IHNjMjsKQEAgLTUwLDcgKzUwLDcgQEAKICAgICBASW5qZWN0CiAgICAgQFByZWZlcnJlZAogICAgIFRoaXJkU2hvcHBpbmdDYXJ0IHNjMzsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlcnZpY2UoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpCiAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24gewogCkBAIC02NCw3ICs2NCw3IEBACiAgICAgICAgIHRiLm0xKCk7CiAgICAgICAgIGlmIChUcmFuc2FjdGlvbmFsU2VjdXJlSW50ZXJjZXB0b3IuYXJvdW5kSW52b2tlQ2FsbGVkKQogICAgICAgICAgICAgbXNnICs9ICJCdXNpbmVzcyBtZXRob2QgaW50ZXJjZXB0b3IgYXJvdW5kSW52b2tlIG9uICIgKwotICAgICAgICAgICAgCQkiVHJhbnNhY3Rpb25TZWN1cmVJbnRlcmNlcHRvciBjYWxsZWQgd2hlbiBpdCBzaG91bGRuJ3QgaGF2ZSI7CisgICAgICAgICAgICAgICAgICAgICJUcmFuc2FjdGlvblNlY3VyZUludGVyY2VwdG9yIGNhbGxlZCB3aGVuIGl0IHNob3VsZG4ndCBoYXZlIjsKICAgICAgICAgdGIubTIoKTsKICAgICAgICAgaWYgKFRyYW5zYWN0aW9uYWxTZWN1cmVJbnRlcmNlcHRvci5hcm91bmRJbnZva2VJbnZvY2F0aW9uQ291bnQgIT0gMCkKICAgICAgICAgICAgIG1zZyArPSAiQnVzaW5lc3MgbWV0aG9kIGludGVyY2VwdG9yIGludm9jYXRpb24gb24gbWV0aG9kLWxldmVsICIKQEAgLTczLDggKzczLDggQEAKICAgICAgICAgICAgICAgICAgICAgKyBUcmFuc2FjdGlvbmFsU2VjdXJlSW50ZXJjZXB0b3IuYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50OwogICAgICAgICBpZiAoIVRyYW5zYWN0aW9uYWxTZWN1cmVJbnRlcmNlcHRvci5lcnJvck1lc3NhZ2UudHJpbSgpLmVxdWFscygiIikpCiAgICAgICAgICAgICBtc2cgKz0gVHJhbnNhY3Rpb25hbFNlY3VyZUludGVyY2VwdG9yLmVycm9yTWVzc2FnZTsKLSAgICAgICAgCi0gICAgICAgIAorCisKICAgICAgICAgLy9Ob3cgdXNlIHRoZSB0d28gc2hvcHBpbmcgY2FydCB0byB0ZXN0IFRyYW5zYWN0aW9uYWxTZWN1cmVJbnRlcmNlcHRvcgogICAgICAgICBzYy5jaGVja291dCgpOwogICAgICAgICBpZiAoIVRyYW5zYWN0aW9uYWxTZWN1cmVJbnRlcmNlcHRvci5hcm91bmRJbnZva2VDYWxsZWQpCkBAIC04Nyw3ICs4Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICsgVHJhbnNhY3Rpb25hbFNlY3VyZUludGVyY2VwdG9yLmFyb3VuZEludm9rZUludm9jYXRpb25Db3VudDsKICAgICAgICAgaWYgKCFUcmFuc2FjdGlvbmFsU2VjdXJlSW50ZXJjZXB0b3IuZXJyb3JNZXNzYWdlLnRyaW0oKS5lcXVhbHMoIiIpKQogICAgICAgICAgICAgbXNnICs9IFRyYW5zYWN0aW9uYWxTZWN1cmVJbnRlcmNlcHRvci5lcnJvck1lc3NhZ2U7Ci0gICAgICAgIAorCiAgICAgICAgIHNjMi5jaGVja291dCgpOwogICAgICAgICBpZiAoVHJhbnNhY3Rpb25hbFNlY3VyZUludGVyY2VwdG9yLmFyb3VuZEludm9rZUludm9jYXRpb25Db3VudCAhPSAyKQogICAgICAgICAgICAgbXNnICs9ICJCdXNpbmVzcyBtZXRob2QgaW50ZXJjZXB0b3IgaW52b2NhdGlvbiBvbiBtZXRob2QtbGV2ZWwgIgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtbXVsdGlwbGUtaW50ZXJjZXB0b3JzLWZvci1hLWJpbmRpbmctdHlwZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtbXVsdGlwbGUtaW50ZXJjZXB0b3JzLWZvci1hLWJpbmRpbmctdHlwZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDY0N2M1M2YuLmZjMzQ1ZGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLW11bHRpcGxlLWludGVyY2VwdG9ycy1mb3ItYS1iaW5kaW5nLXR5cGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1tdWx0aXBsZS1pbnRlcmNlcHRvcnMtZm9yLWEtYmluZGluZy10eXBlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tbXVsdGlwbGUtaW50ZXJjZXB0b3ItaW1wbGVtZW50YXRpb25zIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1tdWx0aXBsZS1pbnRlcmNlcHRvcnMtZm9yLWEtYmluZGluZy10eXBlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLW11bHRpcGxlLWludGVyY2VwdG9ycy1mb3ItYS1iaW5kaW5nLXR5cGUvYnVpbGQueG1sCmluZGV4IDBiOWIzYTMuLjBhMWYyZjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLW11bHRpcGxlLWludGVyY2VwdG9ycy1mb3ItYS1iaW5kaW5nLXR5cGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLW11bHRpcGxlLWludGVyY2VwdG9ycy1mb3ItYS1iaW5kaW5nLXR5cGUvYnVpbGQueG1sCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9ImNsaWVudC90ZXN0L2NsaWVudCIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDgsMjMgKzQ4LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9ImNsaWVudCIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9InRlc3QvY2xpZW50L1dlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0idGVzdC5jbGllbnQuV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1tdWx0aXBsZS1pbnRlcmNlcHRvcnMtZm9yLWEtYmluZGluZy10eXBlL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1tdWx0aXBsZS1pbnRlcmNlcHRvcnMtZm9yLWEtYmluZGluZy10eXBlL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKaW5kZXggOThiZjhjNi4uZTRkY2EyNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtbXVsdGlwbGUtaW50ZXJjZXB0b3JzLWZvci1hLWJpbmRpbmctdHlwZS9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLW11bHRpcGxlLWludGVyY2VwdG9ycy1mb3ItYS1iaW5kaW5nLXR5cGUvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQKICAgICAgICAgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfTkFNRSA9IAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX05BTUUgPQogICAgICAgICAiaW50ZXJjZXB0b3JzLW11bHRpcGxlLWludGVyY2VwdG9ycy1mb3ItYS1iaW5kaW5nLXR5cGUiOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVYUEVDVEVEX1JFU1BPTlNFID0gIkhlbGxvIGZyb20gU2VydmxldCAzLjAuIjsKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgaW50ZXJjZXB0b3JzIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTAsNyArNTAsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZCIpOwpAQCAtNjAsNyArNjAsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgICsgIi9teXVybCI7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigib3BlbmluZyBjb25uZWN0aW9uIHRvICIgKyB1cmwpOwpAQCAtOTksMTAgKzk5LDEwIEBACiAgICAgICAgICAgICBpZiAoRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1tdWx0aXBsZS1pbnRlcmNlcHRvcnMtZm9yLWEtYmluZGluZy10eXBlL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1tdWx0aXBsZS1pbnRlcmNlcHRvcnMtZm9yLWEtYmluZGluZy10eXBlL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEKaW5kZXggMGFlMzEwZi4uMzNjZWRmOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtbXVsdGlwbGUtaW50ZXJjZXB0b3JzLWZvci1hLWJpbmRpbmctdHlwZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLW11bHRpcGxlLWludGVyY2VwdG9ycy1mb3ItYS1iaW5kaW5nLXR5cGUvc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YQpAQCAtMjcsMTYgKzI3LDE2IEBACiAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGFyb3VuZEludm9rZUNhbGxlZCA9IGZhbHNlOwogICAgIHB1YmxpYyBzdGF0aWMgaW50IGFyb3VuZEludm9rZUludm9jYXRpb25Db3VudCA9IDA7CiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZXJyb3JNZXNzYWdlID0gIiI7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgVGVzdFJlcXVlc3RTY29wZWRCZWFuIHRiOwotICAgIAorCiAgICAgQEFyb3VuZEludm9rZQogICAgIHB1YmxpYyBPYmplY3QgbWFuYWdlVHJhbnNhY3Rpb24oSW52b2NhdGlvbkNvbnRleHQgY3R4KSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUcmFuc2FjdGlvbkludGVyY2VwdG9yOjpBcm91bmRJbnZva2UiKTsKICAgICAgICAgaWYgKHRiID09IG51bGwpIGVycm9yTWVzc2FnZT0iRGVwZW5kZW5jeSBJbmplY3Rpb24gIiArCi0gICAgICAgIAkJImludG8gVHJhbnNhY3Rpb25JbnRlcmNlcHRvciBmYWlsZWQiOworICAgICAgICAgICAgICAgICJpbnRvIFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IgZmFpbGVkIjsKICAgICAgICAgYXJvdW5kSW52b2tlQ2FsbGVkID0gdHJ1ZTsKICAgICAgICAgYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50ICsrOwogICAgICAgICB0Yi5pbnRlcmNlcHRvckludm9jYXRpb25PcmRlci5hZGQodGhpcy5nZXRDbGFzcygpLmdldENhbm9uaWNhbE5hbWUoKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1tdWx0aXBsZS1pbnRlcmNlcHRvcnMtZm9yLWEtYmluZGluZy10eXBlL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbmFsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1tdWx0aXBsZS1pbnRlcmNlcHRvcnMtZm9yLWEtYmluZGluZy10eXBlL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbmFsLmphdmEKaW5kZXggZGNiNTkzMS4uMDRmZDM1MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtbXVsdGlwbGUtaW50ZXJjZXB0b3JzLWZvci1hLWJpbmRpbmctdHlwZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25hbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLW11bHRpcGxlLWludGVyY2VwdG9ycy1mb3ItYS1iaW5kaW5nLXR5cGUvc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uYWwuamF2YQpAQCAtMzAsNSArMzAsNSBAQAogQEludGVyY2VwdG9yQmluZGluZwogcHVibGljIEBpbnRlcmZhY2UgVHJhbnNhY3Rpb25hbCB7CiAKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtbXVsdGlwbGUtaW50ZXJjZXB0b3JzLWZvci1hLWJpbmRpbmctdHlwZS9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9NdWx0aXBsZUludGVyY2VwdG9ySW1wbGVtZW50YXRpb25zVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLW11bHRpcGxlLWludGVyY2VwdG9ycy1mb3ItYS1iaW5kaW5nLXR5cGUvc2VydmxldC90ZXN0L3NlcnZsZXQvTXVsdGlwbGVJbnRlcmNlcHRvckltcGxlbWVudGF0aW9uc1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggZDVjZjZmMy4uN2I3NDY1ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtbXVsdGlwbGUtaW50ZXJjZXB0b3JzLWZvci1hLWJpbmRpbmctdHlwZS9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9NdWx0aXBsZUludGVyY2VwdG9ySW1wbGVtZW50YXRpb25zVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1tdWx0aXBsZS1pbnRlcmNlcHRvcnMtZm9yLWEtYmluZGluZy10eXBlL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L011bHRpcGxlSW50ZXJjZXB0b3JJbXBsZW1lbnRhdGlvbnNUZXN0U2VydmxldC5qYXZhCkBAIC0zOSw3ICszOSw3IEBACiAgICAgQFByZWZlcnJlZAogICAgIFRlc3RCZWFuIHRiOwogCi0gICAgQEluamVjdCAKKyAgICBASW5qZWN0CiAgICAgVGVzdFJlcXVlc3RTY29wZWRCZWFuIHRyc2I7CiAgICAgcHVibGljIHZvaWQgc2VydmljZShIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlcykKICAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbiB7CkBAIC02MywzMCArNjMsMzAgQEAKICAgICAgICAgaWYgKCFUcmFuc2FjdGlvbkludGVyY2VwdG9yLmVycm9yTWVzc2FnZS50cmltKCkuZXF1YWxzKCIiKSkKICAgICAgICAgICAgIG1zZyArPSBUcmFuc2FjdGlvbkludGVyY2VwdG9yLmVycm9yTWVzc2FnZTsKIAotICAgICAgICAKKwogICAgICAgICBpZiAoIVNlY29uZFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IuYXJvdW5kSW52b2tlQ2FsbGVkKQogICAgICAgICAgICAgbXNnICs9ICJCdXNpbmVzcyBtZXRob2QgaW50ZXJjZXB0b3IgYXJvdW5kSW52b2tlIGluIHRoZSBzZWNvbmQgIiArCi0gICAgICAgICAgICAJCSJ0cmFuc2FjdGlvbiBpbnRlcmNlcHRvciBub3QgY2FsbGVkIjsKKyAgICAgICAgICAgICAgICAgICAgInRyYW5zYWN0aW9uIGludGVyY2VwdG9yIG5vdCBjYWxsZWQiOwogICAgICAgICB0Yi5tMigpOyAvL2NhbGxpbmcgbTIgYWdhaW4KICAgICAgICAgaWYgKFNlY29uZFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IuYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50ICE9IDMpCiAgICAgICAgICAgICBtc2cgKz0gIkJ1c2luZXNzIG1ldGhvZCBzZWNvbmQgaW50ZXJjZXB0b3IgaW52b2NhdGlvbiBvbiBtZXRob2QtbGV2ZWwgIgogICAgICAgICAgICAgICAgICAgICArICJpbnRlcmNlcHRvciBhbm5vdGF0aW9uIGNvdW50IG5vdCBleHBlY3RlZC4gIgogICAgICAgICAgICAgICAgICAgICArICJleHBlY3RlZCA9MywgYWN0dWFsPSIKICAgICAgICAgICAgICAgICAgICAgKyBTZWNvbmRUcmFuc2FjdGlvbkludGVyY2VwdG9yLmFyb3VuZEludm9rZUludm9jYXRpb25Db3VudDsKLSAgICAgICAgCisKICAgICAgICAgLy90ZXN0IG9yZGVyaW5nIG9mIGludGVyY2VwdG9ycyBpbiB0aGUgc3lzdGVtCi0gICAgICAgIGJvb2xlYW4gZXhwZWN0ZWRPcmRlcmluZyA9IAorICAgICAgICBib29sZWFuIGV4cGVjdGVkT3JkZXJpbmcgPQogICAgICAgICAgICAgKCh0cnNiLmludGVyY2VwdG9ySW52b2NhdGlvbk9yZGVyLmdldCgwKS4KICAgICAgICAgICAgICAgICAgICAgZXF1YWxzKFNlY29uZFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IuY2xhc3MuZ2V0Q2Fub25pY2FsTmFtZSgpKSkKICAgICAgICAgICAgICAgICAmJiAodHJzYi5pbnRlcmNlcHRvckludm9jYXRpb25PcmRlci5nZXQoMSkuCiAgICAgICAgICAgICAgICAgICAgICAgICBlcXVhbHMoVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5jbGFzcy5nZXRDYW5vbmljYWxOYW1lKCkpKSk7Ci0gICAgICAgIGlmICghZXhwZWN0ZWRPcmRlcmluZykgCisgICAgICAgIGlmICghZXhwZWN0ZWRPcmRlcmluZykKICAgICAgICAgICAgIG1zZyArPSAiSW50ZXJjZXB0b3IgaW52b2NhdGlvbiBvcmRlciBkb2VzIG5vdCBtYXRjaCB3aXRoIHRoZSBleHBlY3RlZCBvcmRlciI7Ci0gICAgICAgIAotICAgICAgICAvL3Rlc3QgZGlzYWJsaW5nIG9mIGludGVyY2VwdG9ycyB2aWEgYmVhbnMueG1sIAotICAgICAgICBpZiAoVGhpcmRUcmFuc2FjdGlvbkludGVyY2VwdG9yLmFyb3VuZEludm9rZUNhbGxlZCkgCisKKyAgICAgICAgLy90ZXN0IGRpc2FibGluZyBvZiBpbnRlcmNlcHRvcnMgdmlhIGJlYW5zLnhtbAorICAgICAgICBpZiAoVGhpcmRUcmFuc2FjdGlvbkludGVyY2VwdG9yLmFyb3VuZEludm9rZUNhbGxlZCkKICAgICAgICAgICAgIG1zZyArPSAiRGlzYWJsZWQgaW50ZXJjZXB0b3IgY2FsbGVkIjsKLSAgICAgICAgCisKICAgICAgICAgd3JpdGVyLndyaXRlKG1zZyArICJcbiIpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWF0LWludGVyY2VwdG9ycy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWF0LWludGVyY2VwdG9ycy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGE2NDYxOTEuLmIxMDExZGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1hdC1pbnRlcmNlcHRvcnMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtYXQtaW50ZXJjZXB0b3JzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tdXNlLW9mLWF0LWludGVyY2VwdG9ycyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWF0LWludGVyY2VwdG9ycy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtYXQtaW50ZXJjZXB0b3JzL2J1aWxkLnhtbAppbmRleCAwYjliM2EzLi4wYTFmMmY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtYXQtaW50ZXJjZXB0b3JzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtYXQtaW50ZXJjZXB0b3JzL2J1aWxkLnhtbApAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSJjbGllbnQvdGVzdC9jbGllbnQiIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ4LDIzICs0OCwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSJjbGllbnQiIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJ0ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9InRlc3QuY2xpZW50LldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWF0LWludGVyY2VwdG9ycy9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWF0LWludGVyY2VwdG9ycy9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCmluZGV4IGNkODEyYmQuLjA3YmRlOTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1hdC1pbnRlcmNlcHRvcnMvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtYXQtaW50ZXJjZXB0b3JzL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKQEAgLTMyLDcgKzMyLDcgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0CiAgICAgICAgID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX05BTUUgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9OQU1FID0KICAgICAgICAgImludGVyY2VwdG9ycy11c2Utb2YtIjsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFWFBFQ1RFRF9SRVNQT05TRSA9ICJIZWxsbyBmcm9tIFNlcnZsZXQgMy4wLiI7CkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGludGVyY2VwdG9ycyIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTU1LDcgKzU1LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKQEAgLTY1LDcgKzY1LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICArICIvbXl1cmwiOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9wZW5pbmcgY29ubmVjdGlvbiB0byAiICsgdXJsKTsKQEAgLTEwNCwxMCArMTA0LDEwIEBACiAgICAgICAgICAgICBpZiAoRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtYXQtaW50ZXJjZXB0b3JzL3NlcnZsZXQvdGVzdC9iZWFucy9TZWN1cmVJbnRlcmNlcHRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWF0LWludGVyY2VwdG9ycy9zZXJ2bGV0L3Rlc3QvYmVhbnMvU2VjdXJlSW50ZXJjZXB0b3IuamF2YQppbmRleCAxOGMxYjQ5Li43YzRjMjQzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtYXQtaW50ZXJjZXB0b3JzL3NlcnZsZXQvdGVzdC9iZWFucy9TZWN1cmVJbnRlcmNlcHRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1hdC1pbnRlcmNlcHRvcnMvc2VydmxldC90ZXN0L2JlYW5zL1NlY3VyZUludGVyY2VwdG9yLmphdmEKQEAgLTI2LDEzICsyNiwxMyBAQAogICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBhcm91bmRJbnZva2VDYWxsZWQgPSBmYWxzZTsKICAgICBwdWJsaWMgc3RhdGljIGludCBhcm91bmRJbnZva2VJbnZvY2F0aW9uQ291bnQgPSAwOwogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGVycm9yTWVzc2FnZSA9ICIiOwotICAgIAorCiAgICAgQEluamVjdAogICAgIFRlc3RSZXF1ZXN0U2NvcGVkQmVhbiB0YjsKLSAgICAKKwogICAgIEBBcm91bmRJbnZva2UKICAgICBwdWJsaWMgT2JqZWN0IG1hbmFnZVRyYW5zYWN0aW9uKEludm9jYXRpb25Db250ZXh0IGN0eCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VjdXJlSW50ZXJjZXB0b3I6OkFyb3VuZEludm9rZSIpOwogICAgICAgICBpZiAodGIgPT0gbnVsbCkgZXJyb3JNZXNzYWdlPSJEZXBlbmRlbmN5IEluamVjdGlvbiAiICsKICAgICAgICAgICAgICAgICAiaW50byBUcmFuc2FjdGlvbkludGVyY2VwdG9yIGZhaWxlZCI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtYXQtaW50ZXJjZXB0b3JzL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtYXQtaW50ZXJjZXB0b3JzL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEKaW5kZXggMTI3YmExYi4uNjcxNmUxMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWF0LWludGVyY2VwdG9ycy9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1hdC1pbnRlcmNlcHRvcnMvc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YQpAQCAtMjYsMTMgKzI2LDEzIEBACiAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGFyb3VuZEludm9rZUNhbGxlZCA9IGZhbHNlOwogICAgIHB1YmxpYyBzdGF0aWMgaW50IGFyb3VuZEludm9rZUludm9jYXRpb25Db3VudCA9IDA7CiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZXJyb3JNZXNzYWdlID0gIiI7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgVGVzdFJlcXVlc3RTY29wZWRCZWFuIHRiOwotICAgIAorCiAgICAgQEFyb3VuZEludm9rZQogICAgIHB1YmxpYyBPYmplY3QgbWFuYWdlVHJhbnNhY3Rpb24oSW52b2NhdGlvbkNvbnRleHQgY3R4KSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUcmFuc2FjdGlvbkludGVyY2VwdG9yOjpBcm91bmRJbnZva2UiKTsKICAgICAgICAgaWYgKHRiID09IG51bGwpIGVycm9yTWVzc2FnZT0iRGVwZW5kZW5jeSBJbmplY3Rpb24gIiArCiAgICAgICAgICAgICAgICAgImludG8gVHJhbnNhY3Rpb25JbnRlcmNlcHRvciBmYWlsZWQiOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWF0LWludGVyY2VwdG9ycy9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25hbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWF0LWludGVyY2VwdG9ycy9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25hbC5qYXZhCmluZGV4IGRjYjU5MzEuLjA0ZmQzNTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1hdC1pbnRlcmNlcHRvcnMvc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uYWwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtYXQtaW50ZXJjZXB0b3JzL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbmFsLmphdmEKQEAgLTMwLDUgKzMwLDUgQEAKIEBJbnRlcmNlcHRvckJpbmRpbmcKIHB1YmxpYyBAaW50ZXJmYWNlIFRyYW5zYWN0aW9uYWwgewogCi0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1hdC1pbnRlcmNlcHRvcnMvc2VydmxldC90ZXN0L3NlcnZsZXQvSW50ZXJjZXB0b3JzVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1hdC1pbnRlcmNlcHRvcnMvc2VydmxldC90ZXN0L3NlcnZsZXQvSW50ZXJjZXB0b3JzVGVzdFNlcnZsZXQuamF2YQppbmRleCAxNDZmZjI3Li4zMmJiNDU5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtYXQtaW50ZXJjZXB0b3JzL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L0ludGVyY2VwdG9yc1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWF0LWludGVyY2VwdG9ycy9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9JbnRlcmNlcHRvcnNUZXN0U2VydmxldC5qYXZhCkBAIC0zNiwxNCArMzYsMTQgQEAKICAgICBASW5qZWN0CiAgICAgQFByZWZlcnJlZAogICAgIFRlc3RCZWFuIHRiOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2VydmljZShIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlcykKICAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbiB7CiAKICAgICAgICAgUHJpbnRXcml0ZXIgd3JpdGVyID0gcmVzLmdldFdyaXRlcigpOwogICAgICAgICB3cml0ZXIud3JpdGUoIkhlbGxvIGZyb20gU2VydmxldCAzLjAuIik7CiAgICAgICAgIFN0cmluZyBtc2cgPSAiIjsKLSAgICAgICAgCisKICAgICAgICAgdGIubTEoKTsKICAgICAgICAgaWYgKCFUcmFuc2FjdGlvbkludGVyY2VwdG9yLmFyb3VuZEludm9rZUNhbGxlZCkKICAgICAgICAgICAgIG1zZyArPSJUcmFuc2FjdGlvbkludGVyY2VwdG9yIGFyb3VuZEludm9rZSBtZXRob2Qgbm90IGNhbGxlZCI7CkBAIC01MSwxMiArNTEsMTIgQEAKICAgICAgICAgICAgIG1zZyArPSJTZWN1cmVJbnRlcmNlcHRvciBhcm91bmRJbnZva2UgbWV0aG9kIG5vdCBjYWxsZWQiOwogICAgICAgICBpZiAoKFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IuYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50ICE9IDEpKQogICAgICAgICAgICAgbXNnICs9IlRyYW5zYWN0aW9uSW50ZXJjZXB0b3IgYXJvdW5kSW52b2tlIGludm9jYXRpb24gY291bnQgaXMgIiArCi0gICAgICAgICAgICAgICAgICAgICJub3QgZXhwZWN0ZWQgMSBidXQiICsgCisgICAgICAgICAgICAgICAgICAgICJub3QgZXhwZWN0ZWQgMSBidXQiICsKICAgICAgICAgICAgICAgICAgICAgVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5hcm91bmRJbnZva2VJbnZvY2F0aW9uQ291bnQ7CiAgICAgICAgIHRiLm0yKCk7CiAgICAgICAgIGlmICgoU2VjdXJlSW50ZXJjZXB0b3IuYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50ICE9IDIpKQogICAgICAgICAgICAgbXNnICs9IlNlY3VyZUludGVyY2VwdG9yIGFyb3VuZEludm9rZSBpbnZvY2F0aW9uIGNvdW50IGlzICIgKwotICAgICAgICAgICAgICAgICAgICAibm90IGV4cGVjdGVkIDIgYnV0IiArIAorICAgICAgICAgICAgICAgICAgICAibm90IGV4cGVjdGVkIDIgYnV0IiArCiAgICAgICAgICAgICAgICAgICAgIFNlY3VyZUludGVyY2VwdG9yLmFyb3VuZEludm9rZUludm9jYXRpb25Db3VudDsKIAogICAgICAgICB3cml0ZXIud3JpdGUobXNnICsgIlxuIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtaW50ZXJjZXB0b3JzLWluLWVqYnMtdGhyb3VnaC1hdC1pbnRlcmNlcHRvcnMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWF0LWludGVyY2VwdG9ycy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDFhYjNiNDAuLmRjNDUzODIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWF0LWludGVyY2VwdG9ycy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWF0LWludGVyY2VwdG9ycy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWF0LWludGVyY2VwdG9ycyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWludGVyY2VwdG9ycy1pbi1lamJzLXRocm91Z2gtYXQtaW50ZXJjZXB0b3JzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWF0LWludGVyY2VwdG9ycy9idWlsZC54bWwKaW5kZXggMGI5YjNhMy4uMGExZjJmOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWludGVyY2VwdG9ycy1pbi1lamJzLXRocm91Z2gtYXQtaW50ZXJjZXB0b3JzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtaW50ZXJjZXB0b3JzLWluLWVqYnMtdGhyb3VnaC1hdC1pbnRlcmNlcHRvcnMvYnVpbGQueG1sCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9ImNsaWVudC90ZXN0L2NsaWVudCIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDgsMjMgKzQ4LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9ImNsaWVudCIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9InRlc3QvY2xpZW50L1dlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0idGVzdC5jbGllbnQuV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtaW50ZXJjZXB0b3JzLWluLWVqYnMtdGhyb3VnaC1hdC1pbnRlcmNlcHRvcnMvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWF0LWludGVyY2VwdG9ycy9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCmluZGV4IGU3NTIxYjcuLjE2NzMxODIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWF0LWludGVyY2VwdG9ycy9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWF0LWludGVyY2VwdG9ycy9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCkBAIC0zMiw3ICszMiw3IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdAogICAgICAgICA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9OQU1FID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfTkFNRSA9CiAgICAgICAgICJpbnRlcmNlcHRvcnMtdXNlLW9mLWludGVyY2VwdG9ycy1pbi1lamJzLXRocm91Z2gtYXQtaW50ZXJjZXB0b3JzIjsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFWFBFQ1RFRF9SRVNQT05TRSA9ICJIZWxsbyBmcm9tIFNlcnZsZXQgMy4wLiI7CkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGludGVyY2VwdG9ycyIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTU1LDcgKzU1LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKQEAgLTY1LDcgKzY1LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICArICIvbXl1cmwiOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9wZW5pbmcgY29ubmVjdGlvbiB0byAiICsgdXJsKTsKQEAgLTEwNCwxMCArMTA0LDEwIEBACiAgICAgICAgICAgICBpZiAoRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtaW50ZXJjZXB0b3JzLWluLWVqYnMtdGhyb3VnaC1hdC1pbnRlcmNlcHRvcnMvc2VydmxldC9vcmcvZ2xhc3NmaXNoL2NkaXRlc3Qvc2VjdXJpdHkvYXBpL1NlY3VyZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWludGVyY2VwdG9ycy1pbi1lamJzLXRocm91Z2gtYXQtaW50ZXJjZXB0b3JzL3NlcnZsZXQvb3JnL2dsYXNzZmlzaC9jZGl0ZXN0L3NlY3VyaXR5L2FwaS9TZWN1cmUuamF2YQppbmRleCBkYmY1M2UyLi41YzI0ZDFiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtaW50ZXJjZXB0b3JzLWluLWVqYnMtdGhyb3VnaC1hdC1pbnRlcmNlcHRvcnMvc2VydmxldC9vcmcvZ2xhc3NmaXNoL2NkaXRlc3Qvc2VjdXJpdHkvYXBpL1NlY3VyZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWF0LWludGVyY2VwdG9ycy9zZXJ2bGV0L29yZy9nbGFzc2Zpc2gvY2RpdGVzdC9zZWN1cml0eS9hcGkvU2VjdXJlLmphdmEKQEAgLTMwLDExICszMCwxMSBAQAogICogRUpCcyBhbm5vdGF0ZWQgd2l0aCBTZWN1cmUgYXJlIGludGVyY2VwdGVkIGJ5IFNlY3VyaXR5SW50ZXJjZXB0b3IsIGVuc3VyaW5nCiAgKiB0aGF0IHRoZSBjYWxsZXIgaGFzIHRoZSBwZXJtaXNzaW9ucyB0byBjYWxsIGFuIEVKQiBtZXRob2QuIE1heSBvbmx5IGJlCiAgKiBhcHBsaWVkIHRvIEVKQnMuCi0gKiAKKyAqCiAgKiBAYXV0aG9yIGlmaXNjaGVyCi0gKiAKKyAqCiAgKiBAc2VlIFNlY3VyaXR5SW50ZXJjZXB0b3IKLSAqIAorICoKICAqIEBzaW5jZSAwLjMKICAqLwogQEluaGVyaXRlZApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWludGVyY2VwdG9ycy1pbi1lamJzLXRocm91Z2gtYXQtaW50ZXJjZXB0b3JzL3NlcnZsZXQvb3JnL2dsYXNzZmlzaC9jZGl0ZXN0L3NlY3VyaXR5L2ludGVyY2VwdG9yL1NlY3VyaXR5SW50ZXJjZXB0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWF0LWludGVyY2VwdG9ycy9zZXJ2bGV0L29yZy9nbGFzc2Zpc2gvY2RpdGVzdC9zZWN1cml0eS9pbnRlcmNlcHRvci9TZWN1cml0eUludGVyY2VwdG9yLmphdmEKaW5kZXggNTdmNThjNC4uNDk4MzRhMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWludGVyY2VwdG9ycy1pbi1lamJzLXRocm91Z2gtYXQtaW50ZXJjZXB0b3JzL3NlcnZsZXQvb3JnL2dsYXNzZmlzaC9jZGl0ZXN0L3NlY3VyaXR5L2ludGVyY2VwdG9yL1NlY3VyaXR5SW50ZXJjZXB0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtaW50ZXJjZXB0b3JzLWluLWVqYnMtdGhyb3VnaC1hdC1pbnRlcmNlcHRvcnMvc2VydmxldC9vcmcvZ2xhc3NmaXNoL2NkaXRlc3Qvc2VjdXJpdHkvaW50ZXJjZXB0b3IvU2VjdXJpdHlJbnRlcmNlcHRvci5qYXZhCkBAIC0zMiwyNiArMzIsMjYgQEAKIAogLyoqCiAgKiBSZWFsaXplcyBzZWN1cml0eSBmb3IgRUpCcy4KLSAqIAorICoKICAqIEBhdXRob3IgaWZpc2NoZXIKLSAqIAorICoKICAqLwogQFNlY3VyZQogQEludGVyY2VwdG9yCiBwdWJsaWMgY2xhc3MgU2VjdXJpdHlJbnRlcmNlcHRvciBpbXBsZW1lbnRzIFNlcmlhbGl6YWJsZQogewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0cgPSBMb2dnZXIuZ2V0TG9nZ2VyKFNlY3VyaXR5SW50ZXJjZXB0b3IuY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBhcm91bmRJbnZva2VDYWxsZWQgPSBmYWxzZTsKLSAgICAKKwogICAgIEBSZXNvdXJjZQogICAgIHByaXZhdGUgRUpCQ29udGV4dCBlamJDdHg7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBQZXJmb3JtIGxvb2t1cCBmb3IgcGVybWlzc2lvbnMuCiAgICAgICogRG9lcyB0aGUgY2FsbGVyIGhhcyB0aGUgcGVybWlzc2lvbiB0byBjYWxsIHRoZSBtZXRob2Q/CiAgICAgICogVE9ETzogaW1wbGVtZW50IGxvb2t1cAotICAgICAqIAorICAgICAqCiAgICAgICogQHBhcmFtIEludm9jYXRpb25Db250ZXh0IG9mIGludGVyY2VwdGVkIG1ldGhvZAogICAgICAqIEByZXR1cm4KICAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgpAQCAtNjEsMTggKzYxLDE4IEBACiAgICAgewogICAgICAgICBQcmluY2lwYWwgcCA9IGVqYkN0eC5nZXRDYWxsZXJQcmluY2lwYWwoKTsKICAgICAgICAgTWV0aG9kIGludGVyZmFjZU1ldGhvZCA9IGN0eC5nZXRNZXRob2QoKTsKLSAgICAgICAgCisKICAgICAgICAgTE9HLmxvZyhMZXZlbC5JTkZPLCAiRUpCIE1ldGhvZCBjYWxsZWQgW0Z1bGxdOlwiezB9XCIgYnkgUHJpbmNpcGFsOnsxfSIsIG5ldyBPYmplY3RbXXtnZXRGdWxsRUpCQ2xhc3NOYW1lKGludGVyZmFjZU1ldGhvZCksIHAudG9TdHJpbmcoKX0pOwogICAgICAgICBMT0cubG9nKExldmVsLklORk8sICJFSkIgTWV0aG9kIGNhbGxlZCBbTWV0aG9kb25seV06ezB9IGJ5IFByaW5jaXBhbDp7MX0iLCBuZXcgT2JqZWN0W117aW50ZXJmYWNlTWV0aG9kLmdldE5hbWUoKSwgcC50b1N0cmluZygpfSk7Ci0gICAgICAgIAorCiAgICAgICAgIFNlY3VyaXR5SW50ZXJjZXB0b3IuYXJvdW5kSW52b2tlQ2FsbGVkID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIGN0eC5wcm9jZWVkKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogVGhlIEVKQkNvbnRleHQgaW50ZXJmYWNlIGRvZXNuJ3QgcHJvdmlkZSBjb252ZW5pZW50IG1ldGhvZHMgdG8gZ2V0IHRoZSBuYW1lIG9mIHRoZSBFSkIgY2xhc3MsIAorICAgICAqIFRoZSBFSkJDb250ZXh0IGludGVyZmFjZSBkb2Vzbid0IHByb3ZpZGUgY29udmVuaWVudCBtZXRob2RzIHRvIGdldCB0aGUgbmFtZSBvZiB0aGUgRUpCIGNsYXNzLAogICAgICAqIHNvIHRoZSBjbGFzc25hbWUgaGFzIHRvIGJlIGV4dHJhY3RlZCBmcm9tIHRoZSBtZXRob2QuCi0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gdGhlIG1ldGhvZCB3aG9zZSBjbGFzc25hbWUgaXMgbmVlZGVkCiAgICAgICogQHJldHVybiBjbGFzc25hbWUgKGZ1bGx5IHF1YWxpZmllZCkgb2YgZ2l2ZW4gbWV0aG9kLCBlLmcuICJjb20ucHJvZml0YnJpY2tzLnVzZXIuYXBpLlVzZXJTZXJ2aWNlIgogICAgICAqLwpAQCAtODAsMTUgKzgwLDE1IEBACiAgICAgICAgIC8vIGV4dHJhY3QgY2xhc3NOYW1lIGZyb20gbWV0aG9kTmFtZQogICAgICAgICAvLyBtZXRob2ROYW1lIGZvcm1hdCBleGFtcGxlOiJwdWJsaWMgdm9pZCBjb20ucHJvZml0YnJpY2tzLnVzZXIuYXBpLlVzZXJTZXJ2aWNlLnRlc3RNZSgpIgogICAgICAgICBTdHJpbmcgbWV0aG9kTmFtZSA9IG1ldGhvZC50b1N0cmluZygpOwotICAgICAgICAKKwogICAgICAgICBpbnQgc3RhcnQgPSBtZXRob2ROYW1lLmxhc3RJbmRleE9mKCcgJykgKyAxOwogICAgICAgICBpbnQgZW5kID0gbWV0aG9kTmFtZS5sYXN0SW5kZXhPZignLicpOwotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgY2xhc3NOYW1lID0gbWV0aG9kTmFtZS5zdWJzdHJpbmcoc3RhcnQsIGVuZCk7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBjbGFzc05hbWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIHJlc2V0KCl7CiAgICAgICAgIC8vcmVzZXQgaW52b2NhdGlvbiBzdGF0dXMKICAgICAgICAgU2VjdXJpdHlJbnRlcmNlcHRvci5hcm91bmRJbnZva2VDYWxsZWQgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWF0LWludGVyY2VwdG9ycy9zZXJ2bGV0L29yZy9nbGFzc2Zpc2gvY2RpdGVzdC91c2VyL2FwaS9Vc2VyU2VydmljZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWludGVyY2VwdG9ycy1pbi1lamJzLXRocm91Z2gtYXQtaW50ZXJjZXB0b3JzL3NlcnZsZXQvb3JnL2dsYXNzZmlzaC9jZGl0ZXN0L3VzZXIvYXBpL1VzZXJTZXJ2aWNlLmphdmEKaW5kZXggODZlZWM3Yi4uZjQwMjkxYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWludGVyY2VwdG9ycy1pbi1lamJzLXRocm91Z2gtYXQtaW50ZXJjZXB0b3JzL3NlcnZsZXQvb3JnL2dsYXNzZmlzaC9jZGl0ZXN0L3VzZXIvYXBpL1VzZXJTZXJ2aWNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWludGVyY2VwdG9ycy1pbi1lamJzLXRocm91Z2gtYXQtaW50ZXJjZXB0b3JzL3NlcnZsZXQvb3JnL2dsYXNzZmlzaC9jZGl0ZXN0L3VzZXIvYXBpL1VzZXJTZXJ2aWNlLmphdmEKQEAgLTI4LDI0ICsyOCwyNCBAQAogICogPHA+CiAgKiBNYW5hZ2UgdXNlci1yZWxhdGVkIGRhdGEKICAqIDwvcD4KLSAqIAorICoKICAqIDxwPgogICogQSBzZXJ2aWNlIHRoYXQgaW1wbGVtZW50cyB0aGlzIGludGVyZmFjZSBpcyByZXNwb25zaWJsZSBmb3IgbWFuYWdpbmcKICAqIHVzZXItcmVsYXRlZCBtYXN0ZXItZGF0YQogICogPC9wPgotICogCisgKgogICogQGF1dGhvciBrYW5lCi0gKiAKKyAqCiAgKiBAc2VlIFVzZXIKICAqLwogcHVibGljIGludGVyZmFjZSBVc2VyU2VydmljZQogewotICAgIAorCiAgICAgLyoqCiAgICAgICogPHA+CiAgICAgICogR2V0IGEge0BsaW5rIFVzZXJ9IGJ5IHRoZSB1c2VyIGlkCiAgICAgICogPC9wPgotICAgICAqIAorICAgICAqCiAgICAgICogQHBhcmFtIHVzZXJpZAogICAgICAqICAgICAgICAgICAgVGhlIHVzZXJpZCB0byBzZWFyY2ggZm9yCiAgICAgICogQHJldHVybiBBIHtAbGluayBVc2VyfSBvYmplY3Qgb3IgPGNvZGU+bnVsbDwvY29kZT4gaWYgbm8gdXNlciB3YXMgZm91bmQKQEAgLTU2LDE2ICs1NiwxNiBAQAogICAgICAqIDxwPgogICAgICAqIEFkZCBhIG5ldyB1c2VyCiAgICAgICogPC9wPgotICAgICAqIAorICAgICAqCiAgICAgICogPHA+CiAgICAgICogVGhlIGltcGxlbWVudGF0aW9uIG11c3QgZW5zdXJlIHRoYXQgdGhlIHByb3ZpZGVkIHVzZXIgb2JqZWN0IGlzIHBlcnNpc3RlZAogICAgICAqIGJlZm9yZSByZXR1cm5pbmcgdGhlIGFzc2lnbmVkIHBlcnNpc3RlbnQgdXNlciBJRC4KICAgICAgKiA8L3A+Ci0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gdXNlcgogICAgICAqICAgICAgICAgICAgVGhlIHVzZXIgb2JqZWN0IHRvIHBlcnNpc3QKICAgICAgKiBAcmV0dXJuIFRoZSBuZXdseSBjcmVhdGVkIHBlcnNpc3RlbnQgSUQgb2YgdGhlIHVzZXIgb2JqZWN0Ci0gICAgICogCisgICAgICoKICAgICAgKiBAc2VlIFVzZXIKICAgICAgKi8KICAgICBwdWJsaWMgTG9uZyBhZGRVc2VyKFVzZXIgdXNlcikgdGhyb3dzIEVKQkV4Y2VwdGlvbjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWF0LWludGVyY2VwdG9ycy9zZXJ2bGV0L29yZy9nbGFzc2Zpc2gvY2RpdGVzdC91c2VyL2FwaS9tb2RlbC9Vc2VyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtaW50ZXJjZXB0b3JzLWluLWVqYnMtdGhyb3VnaC1hdC1pbnRlcmNlcHRvcnMvc2VydmxldC9vcmcvZ2xhc3NmaXNoL2NkaXRlc3QvdXNlci9hcGkvbW9kZWwvVXNlci5qYXZhCmluZGV4IDU5NDUwZjEuLjQ4MDA5ZGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWF0LWludGVyY2VwdG9ycy9zZXJ2bGV0L29yZy9nbGFzc2Zpc2gvY2RpdGVzdC91c2VyL2FwaS9tb2RlbC9Vc2VyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWludGVyY2VwdG9ycy1pbi1lamJzLXRocm91Z2gtYXQtaW50ZXJjZXB0b3JzL3NlcnZsZXQvb3JnL2dsYXNzZmlzaC9jZGl0ZXN0L3VzZXIvYXBpL21vZGVsL1VzZXIuamF2YQpAQCAtMjMsOSArMjMsOSBAQAogCiAvKioKICAqIEEgdXNlciBsb2dpbiBhY2NvdW50IHdpdGhpbiBvdXIgc3lzdGVtLgotICogCisgKgogICogQGF1dGhvciBrYW5lCi0gKiAKKyAqCiAgKiBAc2luY2UgMC4xCiAgKi8KIHB1YmxpYyBpbnRlcmZhY2UgVXNlcgpAQCAtMzUsNyArMzUsNyBAQAogCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSB2YWx1ZSBvZiBmaXJzdE5hbWUKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIGZpcnN0TmFtZQogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Rmlyc3ROYW1lKCk7CkBAIC00NCwxOSArNDQsMTkgQEAKICAgICAgKiA8cD4KICAgICAgKiBHZXQgdGhlIGdlbmRlciBmb3IgdGhlIHVzZXIKICAgICAgKiA8L3A+Ci0gICAgICogCisgICAgICoKICAgICAgKiA8cD4KICAgICAgKiBBIGdlbmRlciBpcyBtdWNoIGJldHRlciBzdWl0ZWQgdG8gb3VyIG5lZWRzIGhlcmUgYXMgdGhlIHB1cmUgYmlvbG9naWNhbAogICAgICAqIHNleCBpcy4KICAgICAgKiA8L3A+Ci0gICAgICogCisgICAgICoKICAgICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiBnZW5kZXIKICAgICAgKi8KICAgICBwdWJsaWMgR2VuZGVyIGdldEdlbmRlcigpOwogCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSB2YWx1ZSBvZiBsYXN0TmFtZQotICAgICAqIAorICAgICAqCiAgICAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgbGFzdE5hbWUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldExhc3ROYW1lKCk7CkBAIC02NSw3ICs2NSw3IEBACiAgICAgICogPHA+CiAgICAgICogR2V0IHRoZSB1c2VybmFtZSB1c2VkIGZvciBsb2dpbgogICAgICAqIDwvcD4KLSAgICAgKiAKKyAgICAgKgogICAgICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHVzZXJuYW1lCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRVc2VybmFtZSgpOwpAQCAtNzQsNyArNzQsNyBAQAogICAgICAqIDxwPgogICAgICAqIEdldCB0aGUgZW1haWwgYWRkcmVzcyBvZiB0aGUgdXNlcgogICAgICAqIDwvcD4KLSAgICAgKiAKKyAgICAgKgogICAgICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBlbWFpbAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RW1haWxBZGRyZXNzKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtaW50ZXJjZXB0b3JzLWluLWVqYnMtdGhyb3VnaC1hdC1pbnRlcmNlcHRvcnMvc2VydmxldC9vcmcvZ2xhc3NmaXNoL2NkaXRlc3QvdXNlci9pbXBsL1VzZXJTZXJ2aWNlSW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWludGVyY2VwdG9ycy1pbi1lamJzLXRocm91Z2gtYXQtaW50ZXJjZXB0b3JzL3NlcnZsZXQvb3JnL2dsYXNzZmlzaC9jZGl0ZXN0L3VzZXIvaW1wbC9Vc2VyU2VydmljZUltcGwuamF2YQppbmRleCBlODY5OTVmLi5mY2EzYzM2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtaW50ZXJjZXB0b3JzLWluLWVqYnMtdGhyb3VnaC1hdC1pbnRlcmNlcHRvcnMvc2VydmxldC9vcmcvZ2xhc3NmaXNoL2NkaXRlc3QvdXNlci9pbXBsL1VzZXJTZXJ2aWNlSW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWF0LWludGVyY2VwdG9ycy9zZXJ2bGV0L29yZy9nbGFzc2Zpc2gvY2RpdGVzdC91c2VyL2ltcGwvVXNlclNlcnZpY2VJbXBsLmphdmEKQEAgLTMyLDcgKzMyLDcgQEAKICAqIDxwPgogICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFVzZXJTZXJ2aWNlLgogICogPC9wPgotICogCisgKgogICogQGF1dGhvciBjaGFvc2xheWVyCiAgKi8KIEBTdGF0ZWxlc3MKQEAgLTQ1LDE2ICs0NSwxNiBAQAogICAgICAqIDxwPgogICAgICAqIEFkZCBhIG5ldyB1c2VyCiAgICAgICogPC9wPgotICAgICAqIAorICAgICAqCiAgICAgICogPHA+CiAgICAgICogVGhlIGltcGxlbWVudGF0aW9uIG11c3QgZW5zdXJlIHRoYXQgdGhlIHByb3ZpZGVkIHVzZXIgb2JqZWN0IGlzIHBlcnNpc3RlZAogICAgICAqIGJlZm9yZSByZXR1cm5pbmcgdGhlIGFzc2lnbmVkIHBlcnNpc3RlbnQgdXNlciBJRC4KICAgICAgKiA8L3A+Ci0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gdXNlcgogICAgICAqICAgICAgICAgICAgVGhlIHVzZXIgb2JqZWN0IHRvIHBlcnNpc3QKICAgICAgKiBAcmV0dXJuIFRoZSBuZXdseSBjcmVhdGVkIHBlcnNpc3RlbnQgSUQgb2YgdGhlIHVzZXIgb2JqZWN0Ci0gICAgICogCisgICAgICoKICAgICAgKiBAc2VlIFVzZXJJbXBsCiAgICAgICovCiAgICAgQE92ZXJyaWRlCkBAIC02OSw3ICs2OSw3IEBACiAgICAgICogPHA+CiAgICAgICogR2V0IGEge0BsaW5rIFVzZXJ9IGJ5IHRoZSB1c2VyIGlkCiAgICAgICogPC9wPgotICAgICAqIAorICAgICAqCiAgICAgICogQHBhcmFtIHVzZXJpZAogICAgICAqICAgICAgICAgICAgVGhlIHVzZXJpZCB0byBzZWFyY2ggZm9yCiAgICAgICogQHJldHVybiBBIHtAbGluayBVc2VyfSBvYmplY3Qgb3IgPGNvZGU+bnVsbDwvY29kZT4gaWYgbm8gdXNlciB3YXMgZm91bmQKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWF0LWludGVyY2VwdG9ycy9zZXJ2bGV0L29yZy9nbGFzc2Zpc2gvY2RpdGVzdC91c2VyL21vZGVsL1VzZXJJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtaW50ZXJjZXB0b3JzLWluLWVqYnMtdGhyb3VnaC1hdC1pbnRlcmNlcHRvcnMvc2VydmxldC9vcmcvZ2xhc3NmaXNoL2NkaXRlc3QvdXNlci9tb2RlbC9Vc2VySW1wbC5qYXZhCmluZGV4IDA3YWU5YjcuLjFlNzM0ZTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWF0LWludGVyY2VwdG9ycy9zZXJ2bGV0L29yZy9nbGFzc2Zpc2gvY2RpdGVzdC91c2VyL21vZGVsL1VzZXJJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWludGVyY2VwdG9ycy1pbi1lamJzLXRocm91Z2gtYXQtaW50ZXJjZXB0b3JzL3NlcnZsZXQvb3JnL2dsYXNzZmlzaC9jZGl0ZXN0L3VzZXIvbW9kZWwvVXNlckltcGwuamF2YQpAQCAtMjgsNyArMjgsNyBAQAogICogPHA+CiAgKiBDbGllbnQtc2lkZSBpbXBsZW1lbnRhdGlvbiBvZiB7QGxpbmsgVXNlcn0uCiAgKiA8L3A+Ci0gKiAKKyAqCiAgKiBAYXV0aG9yIGNoYW9zbGF5ZXIKICAqLwogcHVibGljIGNsYXNzIFVzZXJJbXBsIGltcGxlbWVudHMgVXNlcgpAQCAtNTUsNyArNTUsNyBAQAogICAgICAqIDxwPgogICAgICAqIEdldCB0aGUgdXNlcm5hbWUgdXNlZCBmb3IgbG9naW4KICAgICAgKiA8L3A+Ci0gICAgICogCisgICAgICoKICAgICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB1c2VybmFtZQogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VXNlcm5hbWUoKQpAQCAtNjcsNyArNjcsNyBAQAogICAgICAqIDxwPgogICAgICAqIFNldCB0aGUgdXNlcm5hbWUKICAgICAgKiA8L3A+Ci0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gdXNlcm5hbWUKICAgICAgKiAgICAgICAgICAgIG5ldyB2YWx1ZSBvZiB1c2VybmFtZQogICAgICAqLwpAQCAtODAsMTIgKzgwLDEyIEBACiAgICAgICogPHA+CiAgICAgICogR2V0IHRoZSBnZW5kZXIgZm9yIHRoZSB1c2VyCiAgICAgICogPC9wPgotICAgICAqIAorICAgICAqCiAgICAgICogPHA+CiAgICAgICogQSBnZW5kZXIgaXMgbXVjaCBiZXR0ZXIgc3VpdGVkIHRvIG91ciBuZWVkcyBoZXJlIGFzIHRoZSBwdXJlIGJpb2xvZ2ljYWwKICAgICAgKiBzZXggaXMuCiAgICAgICogPC9wPgotICAgICAqIAorICAgICAqCiAgICAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgZ2VuZGVyCiAgICAgICovCiAgICAgcHVibGljIEdlbmRlciBnZXRHZW5kZXIoKQpAQCAtOTcsMTIgKzk3LDEyIEBACiAgICAgICogPHA+CiAgICAgICogU2V0IHRoZSBnZW5kZXIgZm9yIHRoZSB1c2VyCiAgICAgICogPC9wPgotICAgICAqIAorICAgICAqCiAgICAgICogPHA+CiAgICAgICogQSBnZW5kZXIgaXMgbXVjaCBiZXR0ZXIgc3VpdGVkIHRvIG91ciBuZWVkcyBoZXJlIGFzIHRoZSBwdXJlIGJpb2xvZ2ljYWwKICAgICAgKiBzZXggaXMuCiAgICAgICogPC9wPgotICAgICAqIAorICAgICAqCiAgICAgICogQHBhcmFtIGdlbmRlcgogICAgICAqICAgICAgICAgICAgbmV3IHZhbHVlIG9mIGdlbmRlcgogICAgICAqLwpAQCAtMTEzLDcgKzExMyw3IEBACiAKICAgICAvKioKICAgICAgKiBHZXQgdGhlIHZhbHVlIG9mIGZpcnN0TmFtZQotICAgICAqIAorICAgICAqCiAgICAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgZmlyc3ROYW1lCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRGaXJzdE5hbWUoKQpAQCAtMTIzLDcgKzEyMyw3IEBACiAKICAgICAvKioKICAgICAgKiBTZXQgdGhlIHZhbHVlIG9mIGZpcnN0TmFtZQotICAgICAqIAorICAgICAqCiAgICAgICogQHBhcmFtIGZpcnN0TmFtZQogICAgICAqICAgICAgICAgICAgbmV3IHZhbHVlIG9mIGZpcnN0TmFtZQogICAgICAqLwpAQCAtMTM0LDcgKzEzNCw3IEBACiAKICAgICAvKioKICAgICAgKiBHZXQgdGhlIHZhbHVlIG9mIGxhc3ROYW1lCi0gICAgICogCisgICAgICoKICAgICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiBsYXN0TmFtZQogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TGFzdE5hbWUoKQpAQCAtMTQ0LDcgKzE0NCw3IEBACiAKICAgICAvKioKICAgICAgKiBTZXQgdGhlIHZhbHVlIG9mIGxhc3ROYW1lCi0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gbGFzdE5hbWUKICAgICAgKiAgICAgICAgICAgIG5ldyB2YWx1ZSBvZiBsYXN0TmFtZQogICAgICAqLwpAQCAtMTU1LDcgKzE1NSw3IEBACiAKICAgICAvKioKICAgICAgKiBHZXQgdGhlIHZhbHVlIG9mIGVtYWlsQWRkcmVzcwotICAgICAqIAorICAgICAqCiAgICAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgZW1haWxBZGRyZXNzCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRFbWFpbEFkZHJlc3MoKQpAQCAtMTY1LDcgKzE2NSw3IEBACiAKICAgICAvKioKICAgICAgKiBTZXQgdGhlIHZhbHVlIG9mIGVtYWlsQWRkcmVzcwotICAgICAqIAorICAgICAqCiAgICAgICogQHBhcmFtIGVtYWlsQWRkcmVzcwogICAgICAqICAgICAgICAgICAgbmV3IHZhbHVlIG9mIGVtYWlsQWRkcmVzcwogICAgICAqLwpAQCAtMTc2LDcgKzE3Niw3IEBACiAKICAgICAvKioKICAgICAgKiBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9iamVjdCBkYXRhCi0gICAgICogCisgICAgICoKICAgICAgKiBAcmV0dXJuIFRoZSBvYmplY3QgZGF0YSBhcyBTdHJpbmcKICAgICAgKi8KICAgICBAT3ZlcnJpZGUKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWludGVyY2VwdG9yLWJpbmRpbmdzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtaW50ZXJjZXB0b3JzLWluLWVqYnMtdGhyb3VnaC1pbnRlcmNlcHRvci1iaW5kaW5ncy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDgyZjBjM2IuLjdiOGIwZDEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWludGVyY2VwdG9yLWJpbmRpbmdzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWludGVyY2VwdG9ycy1pbi1lamJzLXRocm91Z2gtaW50ZXJjZXB0b3ItYmluZGluZ3MvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS11c2Utb2YtaW50ZXJjZXB0b3JzLWluLWVqYnMtdGhyb3VnaC1pbnRlcmNlcHRvci1iaW5kaW5ncyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWludGVyY2VwdG9ycy1pbi1lamJzLXRocm91Z2gtaW50ZXJjZXB0b3ItYmluZGluZ3MvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWludGVyY2VwdG9ycy1pbi1lamJzLXRocm91Z2gtaW50ZXJjZXB0b3ItYmluZGluZ3MvYnVpbGQueG1sCmluZGV4IDBiOWIzYTMuLjBhMWYyZjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWludGVyY2VwdG9yLWJpbmRpbmdzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtaW50ZXJjZXB0b3JzLWluLWVqYnMtdGhyb3VnaC1pbnRlcmNlcHRvci1iaW5kaW5ncy9idWlsZC54bWwKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iY2xpZW50L3Rlc3QvY2xpZW50IiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00OCwyMyArNDgsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iY2xpZW50IiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0idGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJ0ZXN0LmNsaWVudC5XZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWludGVyY2VwdG9yLWJpbmRpbmdzL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtaW50ZXJjZXB0b3JzLWluLWVqYnMtdGhyb3VnaC1pbnRlcmNlcHRvci1iaW5kaW5ncy9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCmluZGV4IDZmYmE5MjkuLjk1NmFlMjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWludGVyY2VwdG9yLWJpbmRpbmdzL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWludGVyY2VwdG9ycy1pbi1lamJzLXRocm91Z2gtaW50ZXJjZXB0b3ItYmluZGluZ3MvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQpAQCAtMzIsNyArMzIsNyBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQKICAgICAgICAgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfTkFNRSA9IAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX05BTUUgPQogICAgICAgICAiaW50ZXJjZXB0b3JzLXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWludGVyY2VwdG9yLWJpbmRpbmdzIjsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFWFBFQ1RFRF9SRVNQT05TRSA9ICJIZWxsbyBmcm9tIFNlcnZsZXQgMy4wLiI7CkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGludGVyY2VwdG9ycyIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTU1LDcgKzU1LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKQEAgLTY1LDcgKzY1LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICArICIvbXl1cmwiOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9wZW5pbmcgY29ubmVjdGlvbiB0byAiICsgdXJsKTsKQEAgLTEwNCwxMCArMTA0LDEwIEBACiAgICAgICAgICAgICBpZiAoRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtaW50ZXJjZXB0b3JzLWluLWVqYnMtdGhyb3VnaC1pbnRlcmNlcHRvci1iaW5kaW5ncy9zZXJ2bGV0L29yZy9nbGFzc2Zpc2gvY2RpdGVzdC9zZWN1cml0eS9hcGkvU2VjdXJlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtaW50ZXJjZXB0b3JzLWluLWVqYnMtdGhyb3VnaC1pbnRlcmNlcHRvci1iaW5kaW5ncy9zZXJ2bGV0L29yZy9nbGFzc2Zpc2gvY2RpdGVzdC9zZWN1cml0eS9hcGkvU2VjdXJlLmphdmEKaW5kZXggZGJmNTNlMi4uNWMyNGQxYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWludGVyY2VwdG9ycy1pbi1lamJzLXRocm91Z2gtaW50ZXJjZXB0b3ItYmluZGluZ3Mvc2VydmxldC9vcmcvZ2xhc3NmaXNoL2NkaXRlc3Qvc2VjdXJpdHkvYXBpL1NlY3VyZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWludGVyY2VwdG9yLWJpbmRpbmdzL3NlcnZsZXQvb3JnL2dsYXNzZmlzaC9jZGl0ZXN0L3NlY3VyaXR5L2FwaS9TZWN1cmUuamF2YQpAQCAtMzAsMTEgKzMwLDExIEBACiAgKiBFSkJzIGFubm90YXRlZCB3aXRoIFNlY3VyZSBhcmUgaW50ZXJjZXB0ZWQgYnkgU2VjdXJpdHlJbnRlcmNlcHRvciwgZW5zdXJpbmcKICAqIHRoYXQgdGhlIGNhbGxlciBoYXMgdGhlIHBlcm1pc3Npb25zIHRvIGNhbGwgYW4gRUpCIG1ldGhvZC4gTWF5IG9ubHkgYmUKICAqIGFwcGxpZWQgdG8gRUpCcy4KLSAqIAorICoKICAqIEBhdXRob3IgaWZpc2NoZXIKLSAqIAorICoKICAqIEBzZWUgU2VjdXJpdHlJbnRlcmNlcHRvcgotICogCisgKgogICogQHNpbmNlIDAuMwogICovCiBASW5oZXJpdGVkCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtaW50ZXJjZXB0b3JzLWluLWVqYnMtdGhyb3VnaC1pbnRlcmNlcHRvci1iaW5kaW5ncy9zZXJ2bGV0L29yZy9nbGFzc2Zpc2gvY2RpdGVzdC9zZWN1cml0eS9pbnRlcmNlcHRvci9TZWN1cml0eUludGVyY2VwdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtaW50ZXJjZXB0b3JzLWluLWVqYnMtdGhyb3VnaC1pbnRlcmNlcHRvci1iaW5kaW5ncy9zZXJ2bGV0L29yZy9nbGFzc2Zpc2gvY2RpdGVzdC9zZWN1cml0eS9pbnRlcmNlcHRvci9TZWN1cml0eUludGVyY2VwdG9yLmphdmEKaW5kZXggNTdmNThjNC4uNDk4MzRhMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWludGVyY2VwdG9ycy1pbi1lamJzLXRocm91Z2gtaW50ZXJjZXB0b3ItYmluZGluZ3Mvc2VydmxldC9vcmcvZ2xhc3NmaXNoL2NkaXRlc3Qvc2VjdXJpdHkvaW50ZXJjZXB0b3IvU2VjdXJpdHlJbnRlcmNlcHRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWludGVyY2VwdG9yLWJpbmRpbmdzL3NlcnZsZXQvb3JnL2dsYXNzZmlzaC9jZGl0ZXN0L3NlY3VyaXR5L2ludGVyY2VwdG9yL1NlY3VyaXR5SW50ZXJjZXB0b3IuamF2YQpAQCAtMzIsMjYgKzMyLDI2IEBACiAKIC8qKgogICogUmVhbGl6ZXMgc2VjdXJpdHkgZm9yIEVKQnMuCi0gKiAKKyAqCiAgKiBAYXV0aG9yIGlmaXNjaGVyCi0gKiAKKyAqCiAgKi8KIEBTZWN1cmUKIEBJbnRlcmNlcHRvcgogcHVibGljIGNsYXNzIFNlY3VyaXR5SW50ZXJjZXB0b3IgaW1wbGVtZW50cyBTZXJpYWxpemFibGUKIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9HID0gTG9nZ2VyLmdldExvZ2dlcihTZWN1cml0eUludGVyY2VwdG9yLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gYXJvdW5kSW52b2tlQ2FsbGVkID0gZmFsc2U7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIEVKQkNvbnRleHQgZWpiQ3R4OwotICAgIAorCiAgICAgLyoqCiAgICAgICogUGVyZm9ybSBsb29rdXAgZm9yIHBlcm1pc3Npb25zLgogICAgICAqIERvZXMgdGhlIGNhbGxlciBoYXMgdGhlIHBlcm1pc3Npb24gdG8gY2FsbCB0aGUgbWV0aG9kPwogICAgICAqIFRPRE86IGltcGxlbWVudCBsb29rdXAKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSBJbnZvY2F0aW9uQ29udGV4dCBvZiBpbnRlcmNlcHRlZCBtZXRob2QKICAgICAgKiBAcmV0dXJuCiAgICAgICogQHRocm93cyBFeGNlcHRpb24KQEAgLTYxLDE4ICs2MSwxOCBAQAogICAgIHsKICAgICAgICAgUHJpbmNpcGFsIHAgPSBlamJDdHguZ2V0Q2FsbGVyUHJpbmNpcGFsKCk7CiAgICAgICAgIE1ldGhvZCBpbnRlcmZhY2VNZXRob2QgPSBjdHguZ2V0TWV0aG9kKCk7Ci0gICAgICAgIAorCiAgICAgICAgIExPRy5sb2coTGV2ZWwuSU5GTywgIkVKQiBNZXRob2QgY2FsbGVkIFtGdWxsXTpcInswfVwiIGJ5IFByaW5jaXBhbDp7MX0iLCBuZXcgT2JqZWN0W117Z2V0RnVsbEVKQkNsYXNzTmFtZShpbnRlcmZhY2VNZXRob2QpLCBwLnRvU3RyaW5nKCl9KTsKICAgICAgICAgTE9HLmxvZyhMZXZlbC5JTkZPLCAiRUpCIE1ldGhvZCBjYWxsZWQgW01ldGhvZG9ubHldOnswfSBieSBQcmluY2lwYWw6ezF9IiwgbmV3IE9iamVjdFtde2ludGVyZmFjZU1ldGhvZC5nZXROYW1lKCksIHAudG9TdHJpbmcoKX0pOwotICAgICAgICAKKwogICAgICAgICBTZWN1cml0eUludGVyY2VwdG9yLmFyb3VuZEludm9rZUNhbGxlZCA9IHRydWU7CiAgICAgICAgIHJldHVybiBjdHgucHJvY2VlZCgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFRoZSBFSkJDb250ZXh0IGludGVyZmFjZSBkb2Vzbid0IHByb3ZpZGUgY29udmVuaWVudCBtZXRob2RzIHRvIGdldCB0aGUgbmFtZSBvZiB0aGUgRUpCIGNsYXNzLCAKKyAgICAgKiBUaGUgRUpCQ29udGV4dCBpbnRlcmZhY2UgZG9lc24ndCBwcm92aWRlIGNvbnZlbmllbnQgbWV0aG9kcyB0byBnZXQgdGhlIG5hbWUgb2YgdGhlIEVKQiBjbGFzcywKICAgICAgKiBzbyB0aGUgY2xhc3NuYW1lIGhhcyB0byBiZSBleHRyYWN0ZWQgZnJvbSB0aGUgbWV0aG9kLgotICAgICAqIAorICAgICAqCiAgICAgICogQHBhcmFtIHRoZSBtZXRob2Qgd2hvc2UgY2xhc3NuYW1lIGlzIG5lZWRlZAogICAgICAqIEByZXR1cm4gY2xhc3NuYW1lIChmdWxseSBxdWFsaWZpZWQpIG9mIGdpdmVuIG1ldGhvZCwgZS5nLiAiY29tLnByb2ZpdGJyaWNrcy51c2VyLmFwaS5Vc2VyU2VydmljZSIKICAgICAgKi8KQEAgLTgwLDE1ICs4MCwxNSBAQAogICAgICAgICAvLyBleHRyYWN0IGNsYXNzTmFtZSBmcm9tIG1ldGhvZE5hbWUKICAgICAgICAgLy8gbWV0aG9kTmFtZSBmb3JtYXQgZXhhbXBsZToicHVibGljIHZvaWQgY29tLnByb2ZpdGJyaWNrcy51c2VyLmFwaS5Vc2VyU2VydmljZS50ZXN0TWUoKSIKICAgICAgICAgU3RyaW5nIG1ldGhvZE5hbWUgPSBtZXRob2QudG9TdHJpbmcoKTsKLSAgICAgICAgCisKICAgICAgICAgaW50IHN0YXJ0ID0gbWV0aG9kTmFtZS5sYXN0SW5kZXhPZignICcpICsgMTsKICAgICAgICAgaW50IGVuZCA9IG1ldGhvZE5hbWUubGFzdEluZGV4T2YoJy4nKTsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIGNsYXNzTmFtZSA9IG1ldGhvZE5hbWUuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gY2xhc3NOYW1lOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCByZXNldCgpewogICAgICAgICAvL3Jlc2V0IGludm9jYXRpb24gc3RhdHVzCiAgICAgICAgIFNlY3VyaXR5SW50ZXJjZXB0b3IuYXJvdW5kSW52b2tlQ2FsbGVkID0gZmFsc2U7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtaW50ZXJjZXB0b3JzLWluLWVqYnMtdGhyb3VnaC1pbnRlcmNlcHRvci1iaW5kaW5ncy9zZXJ2bGV0L29yZy9nbGFzc2Zpc2gvY2RpdGVzdC91c2VyL2FwaS9Vc2VyU2VydmljZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWludGVyY2VwdG9ycy1pbi1lamJzLXRocm91Z2gtaW50ZXJjZXB0b3ItYmluZGluZ3Mvc2VydmxldC9vcmcvZ2xhc3NmaXNoL2NkaXRlc3QvdXNlci9hcGkvVXNlclNlcnZpY2UuamF2YQppbmRleCA4NmVlYzdiLi5mNDAyOTFjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtaW50ZXJjZXB0b3JzLWluLWVqYnMtdGhyb3VnaC1pbnRlcmNlcHRvci1iaW5kaW5ncy9zZXJ2bGV0L29yZy9nbGFzc2Zpc2gvY2RpdGVzdC91c2VyL2FwaS9Vc2VyU2VydmljZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWludGVyY2VwdG9yLWJpbmRpbmdzL3NlcnZsZXQvb3JnL2dsYXNzZmlzaC9jZGl0ZXN0L3VzZXIvYXBpL1VzZXJTZXJ2aWNlLmphdmEKQEAgLTI4LDI0ICsyOCwyNCBAQAogICogPHA+CiAgKiBNYW5hZ2UgdXNlci1yZWxhdGVkIGRhdGEKICAqIDwvcD4KLSAqIAorICoKICAqIDxwPgogICogQSBzZXJ2aWNlIHRoYXQgaW1wbGVtZW50cyB0aGlzIGludGVyZmFjZSBpcyByZXNwb25zaWJsZSBmb3IgbWFuYWdpbmcKICAqIHVzZXItcmVsYXRlZCBtYXN0ZXItZGF0YQogICogPC9wPgotICogCisgKgogICogQGF1dGhvciBrYW5lCi0gKiAKKyAqCiAgKiBAc2VlIFVzZXIKICAqLwogcHVibGljIGludGVyZmFjZSBVc2VyU2VydmljZQogewotICAgIAorCiAgICAgLyoqCiAgICAgICogPHA+CiAgICAgICogR2V0IGEge0BsaW5rIFVzZXJ9IGJ5IHRoZSB1c2VyIGlkCiAgICAgICogPC9wPgotICAgICAqIAorICAgICAqCiAgICAgICogQHBhcmFtIHVzZXJpZAogICAgICAqICAgICAgICAgICAgVGhlIHVzZXJpZCB0byBzZWFyY2ggZm9yCiAgICAgICogQHJldHVybiBBIHtAbGluayBVc2VyfSBvYmplY3Qgb3IgPGNvZGU+bnVsbDwvY29kZT4gaWYgbm8gdXNlciB3YXMgZm91bmQKQEAgLTU2LDE2ICs1NiwxNiBAQAogICAgICAqIDxwPgogICAgICAqIEFkZCBhIG5ldyB1c2VyCiAgICAgICogPC9wPgotICAgICAqIAorICAgICAqCiAgICAgICogPHA+CiAgICAgICogVGhlIGltcGxlbWVudGF0aW9uIG11c3QgZW5zdXJlIHRoYXQgdGhlIHByb3ZpZGVkIHVzZXIgb2JqZWN0IGlzIHBlcnNpc3RlZAogICAgICAqIGJlZm9yZSByZXR1cm5pbmcgdGhlIGFzc2lnbmVkIHBlcnNpc3RlbnQgdXNlciBJRC4KICAgICAgKiA8L3A+Ci0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gdXNlcgogICAgICAqICAgICAgICAgICAgVGhlIHVzZXIgb2JqZWN0IHRvIHBlcnNpc3QKICAgICAgKiBAcmV0dXJuIFRoZSBuZXdseSBjcmVhdGVkIHBlcnNpc3RlbnQgSUQgb2YgdGhlIHVzZXIgb2JqZWN0Ci0gICAgICogCisgICAgICoKICAgICAgKiBAc2VlIFVzZXIKICAgICAgKi8KICAgICBwdWJsaWMgTG9uZyBhZGRVc2VyKFVzZXIgdXNlcikgdGhyb3dzIEVKQkV4Y2VwdGlvbjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWludGVyY2VwdG9yLWJpbmRpbmdzL3NlcnZsZXQvb3JnL2dsYXNzZmlzaC9jZGl0ZXN0L3VzZXIvYXBpL21vZGVsL1VzZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWludGVyY2VwdG9yLWJpbmRpbmdzL3NlcnZsZXQvb3JnL2dsYXNzZmlzaC9jZGl0ZXN0L3VzZXIvYXBpL21vZGVsL1VzZXIuamF2YQppbmRleCA1OTQ1MGYxLi40ODAwOWRlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtaW50ZXJjZXB0b3JzLWluLWVqYnMtdGhyb3VnaC1pbnRlcmNlcHRvci1iaW5kaW5ncy9zZXJ2bGV0L29yZy9nbGFzc2Zpc2gvY2RpdGVzdC91c2VyL2FwaS9tb2RlbC9Vc2VyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWludGVyY2VwdG9ycy1pbi1lamJzLXRocm91Z2gtaW50ZXJjZXB0b3ItYmluZGluZ3Mvc2VydmxldC9vcmcvZ2xhc3NmaXNoL2NkaXRlc3QvdXNlci9hcGkvbW9kZWwvVXNlci5qYXZhCkBAIC0yMyw5ICsyMyw5IEBACiAKIC8qKgogICogQSB1c2VyIGxvZ2luIGFjY291bnQgd2l0aGluIG91ciBzeXN0ZW0uCi0gKiAKKyAqCiAgKiBAYXV0aG9yIGthbmUKLSAqIAorICoKICAqIEBzaW5jZSAwLjEKICAqLwogcHVibGljIGludGVyZmFjZSBVc2VyCkBAIC0zNSw3ICszNSw3IEBACiAKICAgICAvKioKICAgICAgKiBHZXQgdGhlIHZhbHVlIG9mIGZpcnN0TmFtZQotICAgICAqIAorICAgICAqCiAgICAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgZmlyc3ROYW1lCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRGaXJzdE5hbWUoKTsKQEAgLTQ0LDE5ICs0NCwxOSBAQAogICAgICAqIDxwPgogICAgICAqIEdldCB0aGUgZ2VuZGVyIGZvciB0aGUgdXNlcgogICAgICAqIDwvcD4KLSAgICAgKiAKKyAgICAgKgogICAgICAqIDxwPgogICAgICAqIEEgZ2VuZGVyIGlzIG11Y2ggYmV0dGVyIHN1aXRlZCB0byBvdXIgbmVlZHMgaGVyZSBhcyB0aGUgcHVyZSBiaW9sb2dpY2FsCiAgICAgICogc2V4IGlzLgogICAgICAqIDwvcD4KLSAgICAgKiAKKyAgICAgKgogICAgICAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIGdlbmRlcgogICAgICAqLwogICAgIHB1YmxpYyBHZW5kZXIgZ2V0R2VuZGVyKCk7CiAKICAgICAvKioKICAgICAgKiBHZXQgdGhlIHZhbHVlIG9mIGxhc3ROYW1lCi0gICAgICogCisgICAgICoKICAgICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiBsYXN0TmFtZQogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TGFzdE5hbWUoKTsKQEAgLTY1LDcgKzY1LDcgQEAKICAgICAgKiA8cD4KICAgICAgKiBHZXQgdGhlIHVzZXJuYW1lIHVzZWQgZm9yIGxvZ2luCiAgICAgICogPC9wPgotICAgICAqIAorICAgICAqCiAgICAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdXNlcm5hbWUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFVzZXJuYW1lKCk7CkBAIC03NCw3ICs3NCw3IEBACiAgICAgICogPHA+CiAgICAgICogR2V0IHRoZSBlbWFpbCBhZGRyZXNzIG9mIHRoZSB1c2VyCiAgICAgICogPC9wPgotICAgICAqIAorICAgICAqCiAgICAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGVtYWlsCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRFbWFpbEFkZHJlc3MoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWludGVyY2VwdG9yLWJpbmRpbmdzL3NlcnZsZXQvb3JnL2dsYXNzZmlzaC9jZGl0ZXN0L3VzZXIvaW1wbC9Vc2VyU2VydmljZUltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWludGVyY2VwdG9yLWJpbmRpbmdzL3NlcnZsZXQvb3JnL2dsYXNzZmlzaC9jZGl0ZXN0L3VzZXIvaW1wbC9Vc2VyU2VydmljZUltcGwuamF2YQppbmRleCBhZDhlNmRiLi4wMjEzNmU1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtaW50ZXJjZXB0b3JzLWluLWVqYnMtdGhyb3VnaC1pbnRlcmNlcHRvci1iaW5kaW5ncy9zZXJ2bGV0L29yZy9nbGFzc2Zpc2gvY2RpdGVzdC91c2VyL2ltcGwvVXNlclNlcnZpY2VJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWludGVyY2VwdG9ycy1pbi1lamJzLXRocm91Z2gtaW50ZXJjZXB0b3ItYmluZGluZ3Mvc2VydmxldC9vcmcvZ2xhc3NmaXNoL2NkaXRlc3QvdXNlci9pbXBsL1VzZXJTZXJ2aWNlSW1wbC5qYXZhCkBAIC0zMiw3ICszMiw3IEBACiAgKiA8cD4KICAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBVc2VyU2VydmljZS4KICAqIDwvcD4KLSAqIAorICoKICAqIEBhdXRob3IgY2hhb3NsYXllcgogICovCiBAU3RhdGVsZXNzCkBAIC00NSwxNiArNDUsMTYgQEAKICAgICAgKiA8cD4KICAgICAgKiBBZGQgYSBuZXcgdXNlcgogICAgICAqIDwvcD4KLSAgICAgKiAKKyAgICAgKgogICAgICAqIDxwPgogICAgICAqIFRoZSBpbXBsZW1lbnRhdGlvbiBtdXN0IGVuc3VyZSB0aGF0IHRoZSBwcm92aWRlZCB1c2VyIG9iamVjdCBpcyBwZXJzaXN0ZWQKICAgICAgKiBiZWZvcmUgcmV0dXJuaW5nIHRoZSBhc3NpZ25lZCBwZXJzaXN0ZW50IHVzZXIgSUQuCiAgICAgICogPC9wPgotICAgICAqIAorICAgICAqCiAgICAgICogQHBhcmFtIHVzZXIKICAgICAgKiAgICAgICAgICAgIFRoZSB1c2VyIG9iamVjdCB0byBwZXJzaXN0CiAgICAgICogQHJldHVybiBUaGUgbmV3bHkgY3JlYXRlZCBwZXJzaXN0ZW50IElEIG9mIHRoZSB1c2VyIG9iamVjdAotICAgICAqIAorICAgICAqCiAgICAgICogQHNlZSBVc2VySW1wbAogICAgICAqLwogICAgIEBPdmVycmlkZQpAQCAtNjksNyArNjksNyBAQAogICAgICAqIDxwPgogICAgICAqIEdldCBhIHtAbGluayBVc2VyfSBieSB0aGUgdXNlciBpZAogICAgICAqIDwvcD4KLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSB1c2VyaWQKICAgICAgKiAgICAgICAgICAgIFRoZSB1c2VyaWQgdG8gc2VhcmNoIGZvcgogICAgICAqIEByZXR1cm4gQSB7QGxpbmsgVXNlcn0gb2JqZWN0IG9yIDxjb2RlPm51bGw8L2NvZGU+IGlmIG5vIHVzZXIgd2FzIGZvdW5kCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtaW50ZXJjZXB0b3JzLWluLWVqYnMtdGhyb3VnaC1pbnRlcmNlcHRvci1iaW5kaW5ncy9zZXJ2bGV0L29yZy9nbGFzc2Zpc2gvY2RpdGVzdC91c2VyL21vZGVsL1VzZXJJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy11c2Utb2YtaW50ZXJjZXB0b3JzLWluLWVqYnMtdGhyb3VnaC1pbnRlcmNlcHRvci1iaW5kaW5ncy9zZXJ2bGV0L29yZy9nbGFzc2Zpc2gvY2RpdGVzdC91c2VyL21vZGVsL1VzZXJJbXBsLmphdmEKaW5kZXggMDdhZTliNy4uMWU3MzRlMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtdXNlLW9mLWludGVyY2VwdG9ycy1pbi1lamJzLXRocm91Z2gtaW50ZXJjZXB0b3ItYmluZGluZ3Mvc2VydmxldC9vcmcvZ2xhc3NmaXNoL2NkaXRlc3QvdXNlci9tb2RlbC9Vc2VySW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLXVzZS1vZi1pbnRlcmNlcHRvcnMtaW4tZWpicy10aHJvdWdoLWludGVyY2VwdG9yLWJpbmRpbmdzL3NlcnZsZXQvb3JnL2dsYXNzZmlzaC9jZGl0ZXN0L3VzZXIvbW9kZWwvVXNlckltcGwuamF2YQpAQCAtMjgsNyArMjgsNyBAQAogICogPHA+CiAgKiBDbGllbnQtc2lkZSBpbXBsZW1lbnRhdGlvbiBvZiB7QGxpbmsgVXNlcn0uCiAgKiA8L3A+Ci0gKiAKKyAqCiAgKiBAYXV0aG9yIGNoYW9zbGF5ZXIKICAqLwogcHVibGljIGNsYXNzIFVzZXJJbXBsIGltcGxlbWVudHMgVXNlcgpAQCAtNTUsNyArNTUsNyBAQAogICAgICAqIDxwPgogICAgICAqIEdldCB0aGUgdXNlcm5hbWUgdXNlZCBmb3IgbG9naW4KICAgICAgKiA8L3A+Ci0gICAgICogCisgICAgICoKICAgICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB1c2VybmFtZQogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VXNlcm5hbWUoKQpAQCAtNjcsNyArNjcsNyBAQAogICAgICAqIDxwPgogICAgICAqIFNldCB0aGUgdXNlcm5hbWUKICAgICAgKiA8L3A+Ci0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gdXNlcm5hbWUKICAgICAgKiAgICAgICAgICAgIG5ldyB2YWx1ZSBvZiB1c2VybmFtZQogICAgICAqLwpAQCAtODAsMTIgKzgwLDEyIEBACiAgICAgICogPHA+CiAgICAgICogR2V0IHRoZSBnZW5kZXIgZm9yIHRoZSB1c2VyCiAgICAgICogPC9wPgotICAgICAqIAorICAgICAqCiAgICAgICogPHA+CiAgICAgICogQSBnZW5kZXIgaXMgbXVjaCBiZXR0ZXIgc3VpdGVkIHRvIG91ciBuZWVkcyBoZXJlIGFzIHRoZSBwdXJlIGJpb2xvZ2ljYWwKICAgICAgKiBzZXggaXMuCiAgICAgICogPC9wPgotICAgICAqIAorICAgICAqCiAgICAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgZ2VuZGVyCiAgICAgICovCiAgICAgcHVibGljIEdlbmRlciBnZXRHZW5kZXIoKQpAQCAtOTcsMTIgKzk3LDEyIEBACiAgICAgICogPHA+CiAgICAgICogU2V0IHRoZSBnZW5kZXIgZm9yIHRoZSB1c2VyCiAgICAgICogPC9wPgotICAgICAqIAorICAgICAqCiAgICAgICogPHA+CiAgICAgICogQSBnZW5kZXIgaXMgbXVjaCBiZXR0ZXIgc3VpdGVkIHRvIG91ciBuZWVkcyBoZXJlIGFzIHRoZSBwdXJlIGJpb2xvZ2ljYWwKICAgICAgKiBzZXggaXMuCiAgICAgICogPC9wPgotICAgICAqIAorICAgICAqCiAgICAgICogQHBhcmFtIGdlbmRlcgogICAgICAqICAgICAgICAgICAgbmV3IHZhbHVlIG9mIGdlbmRlcgogICAgICAqLwpAQCAtMTEzLDcgKzExMyw3IEBACiAKICAgICAvKioKICAgICAgKiBHZXQgdGhlIHZhbHVlIG9mIGZpcnN0TmFtZQotICAgICAqIAorICAgICAqCiAgICAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgZmlyc3ROYW1lCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRGaXJzdE5hbWUoKQpAQCAtMTIzLDcgKzEyMyw3IEBACiAKICAgICAvKioKICAgICAgKiBTZXQgdGhlIHZhbHVlIG9mIGZpcnN0TmFtZQotICAgICAqIAorICAgICAqCiAgICAgICogQHBhcmFtIGZpcnN0TmFtZQogICAgICAqICAgICAgICAgICAgbmV3IHZhbHVlIG9mIGZpcnN0TmFtZQogICAgICAqLwpAQCAtMTM0LDcgKzEzNCw3IEBACiAKICAgICAvKioKICAgICAgKiBHZXQgdGhlIHZhbHVlIG9mIGxhc3ROYW1lCi0gICAgICogCisgICAgICoKICAgICAgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiBsYXN0TmFtZQogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TGFzdE5hbWUoKQpAQCAtMTQ0LDcgKzE0NCw3IEBACiAKICAgICAvKioKICAgICAgKiBTZXQgdGhlIHZhbHVlIG9mIGxhc3ROYW1lCi0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gbGFzdE5hbWUKICAgICAgKiAgICAgICAgICAgIG5ldyB2YWx1ZSBvZiBsYXN0TmFtZQogICAgICAqLwpAQCAtMTU1LDcgKzE1NSw3IEBACiAKICAgICAvKioKICAgICAgKiBHZXQgdGhlIHZhbHVlIG9mIGVtYWlsQWRkcmVzcwotICAgICAqIAorICAgICAqCiAgICAgICogQHJldHVybiB0aGUgdmFsdWUgb2YgZW1haWxBZGRyZXNzCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRFbWFpbEFkZHJlc3MoKQpAQCAtMTY1LDcgKzE2NSw3IEBACiAKICAgICAvKioKICAgICAgKiBTZXQgdGhlIHZhbHVlIG9mIGVtYWlsQWRkcmVzcwotICAgICAqIAorICAgICAqCiAgICAgICogQHBhcmFtIGVtYWlsQWRkcmVzcwogICAgICAqICAgICAgICAgICAgbmV3IHZhbHVlIG9mIGVtYWlsQWRkcmVzcwogICAgICAqLwpAQCAtMTc2LDcgKzE3Niw3IEBACiAKICAgICAvKioKICAgICAgKiBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9iamVjdCBkYXRhCi0gICAgICogCisgICAgICoKICAgICAgKiBAcmV0dXJuIFRoZSBvYmplY3QgZGF0YSBhcyBTdHJpbmcKICAgICAgKi8KICAgICBAT3ZlcnJpZGUKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvYnVpbGQueG1sCmluZGV4IDliMDIxZDIuLjljM2JjMGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2J1aWxkLnhtbApAQCAtODQsNyArODQsNyBAQAogICAgICAgICAgICAgPGFudCBkaXI9ImpwYS1yZXNvdXJjZS1pbmplY3Rpb24td2l0aC1zaW5nbGV0b24tZWpiLXByb2R1Y2VyIiB0YXJnZXQ9IiR7amF2YWVlLWNvbXAtdGFyZ2V0fSIvPgogICAgICAgICAgICAgPGFudCBkaXI9Im5vLWludGVyZmFjZS1lamIiIHRhcmdldD0iJHtqYXZhZWUtY29tcC10YXJnZXR9Ii8+CiAgICAgICAgICAgICA8YW50IGRpcj0iam1zLXJlc291cmNlLXByb2R1Y2VyLWZpZWxkIiB0YXJnZXQ9IiR7amF2YWVlLWNvbXAtdGFyZ2V0fSIvPgotPCEtLSBUT0RPOiBJbnZlc3RpZ2F0ZSAKKzwhLS0gVE9ETzogSW52ZXN0aWdhdGUKICAgICAgICAgICAgIDxhbnQgZGlyPSJqbXMtcmVzb3VyY2UtcHJvZHVjZXItZmllbGQtaW4tbGlicmFyeS1qYXIiIHRhcmdldD0iJHtqYXZhZWUtY29tcC10YXJnZXR9Ii8+CiAtLT4KICAgICAgICAgICAgIDxhbnQgZGlyPSJlbS1yZXNvdXJjZS1pbmplY3Rpb24iIHRhcmdldD0iJHtqYXZhZWUtY29tcC10YXJnZXR9Ii8+CkBAIC05NSwxNSArOTUsMTUgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPiBVc2FnZToKLQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBqYXZhZWUtY29tcCB0ZXN0cykKLQkJYW50IGNsZWFuIChjbGVhbnMgYWxsIHRoZSBqYXZhZWUtY29tcCB0ZXN0cykKLQkJYW50IGJ1aWxkIChidWlsZHMgYWxsIHRoZSBqYXZhZWUtY29tcCB0ZXN0cykKLQkJYW50IHNldHVwIChzZXRzIHVwIGFsbCByZXNvdXJjZXMgZm9yIGphdmFlZS1jb21wIHRlc3RzKQotCQlhbnQgZGVwbG95IChkZXBsb3lzIGFsbCB0aGUgamF2YWVlLWNvbXAgYXBwcykKLQkJYW50IHJ1biAoRXhlY3V0ZXMgYWxsIHRoZSBqYXZhZWUtY29tcCB0ZXN0cykKLQkJYW50IHVuZGVwbG95ICh1bmRlcGxveXMgYWxsIHRoZSAgamF2YWVlLWNvbXAgYXBwcykKLQkJYW50IHVuc2V0dXAgKHVuc2V0cyBhbGwgcmVzb3VyY2VzIGZvciBqYXZhZWUtY29tcCB0ZXN0cykKLQk8L2VjaG8+CisgICAgPGVjaG8+IFVzYWdlOgorICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGphdmFlZS1jb21wIHRlc3RzKQorICAgICAgICBhbnQgY2xlYW4gKGNsZWFucyBhbGwgdGhlIGphdmFlZS1jb21wIHRlc3RzKQorICAgICAgICBhbnQgYnVpbGQgKGJ1aWxkcyBhbGwgdGhlIGphdmFlZS1jb21wIHRlc3RzKQorICAgICAgICBhbnQgc2V0dXAgKHNldHMgdXAgYWxsIHJlc291cmNlcyBmb3IgamF2YWVlLWNvbXAgdGVzdHMpCisgICAgICAgIGFudCBkZXBsb3kgKGRlcGxveXMgYWxsIHRoZSBqYXZhZWUtY29tcCBhcHBzKQorICAgICAgICBhbnQgcnVuIChFeGVjdXRlcyBhbGwgdGhlIGphdmFlZS1jb21wIHRlc3RzKQorICAgICAgICBhbnQgdW5kZXBsb3kgKHVuZGVwbG95cyBhbGwgdGhlICBqYXZhZWUtY29tcCBhcHBzKQorICAgICAgICBhbnQgdW5zZXR1cCAodW5zZXRzIGFsbCByZXNvdXJjZXMgZm9yIGphdmFlZS1jb21wIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1pbmplY3Rpb24tbm8taW50ZXJmYWNlLWVqYi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLWluamVjdGlvbi1uby1pbnRlcmZhY2UtZWpiL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMjY5NmI0NS4uZDRhZmVlOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLWluamVjdGlvbi1uby1pbnRlcmZhY2UtZWpiL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLWluamVjdGlvbi1uby1pbnRlcmZhY2UtZWpiL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZW1pbmplY3Rpb24taW50by1uby1pbnRlcmZhY2UtZWpiIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0taW5qZWN0aW9uLW5vLWludGVyZmFjZS1lamIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLWluamVjdGlvbi1uby1pbnRlcmZhY2UtZWpiL2J1aWxkLnhtbAppbmRleCBhMGU2YTlkLi4yODI0YjU4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0taW5qZWN0aW9uLW5vLWludGVyZmFjZS1lamIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1pbmplY3Rpb24tbm8taW50ZXJmYWNlLWVqYi9idWlsZC54bWwKQEAgLTMzLDU0ICszMyw1NCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLGRlcGxveSxydW4sdW5kZXBsb3kiIC8+CiAKLQk8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIiAvPgotCQk8ZGVsZXRlPgotCQkJPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIgLz4KLQkJCTxmaWxlc2V0IGRpcj0iY2xpZW50L3Rlc3QvY2xpZW50IiBpbmNsdWRlcz0iKi5jbGFzcyIgLz4KLQkJPC9kZWxldGU+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIgLz4KKyAgICAgICAgPGRlbGV0ZT4KKyAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiIC8+CisgICAgICAgICAgICA8ZmlsZXNldCBkaXI9ImNsaWVudC90ZXN0L2NsaWVudCIgaW5jbHVkZXM9IiouY2xhc3MiIC8+CisgICAgICAgIDwvZGVsZXRlPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgotCQkJPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiIC8+Ci0JCTwvYW50Y2FsbD4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIgLz4KKyAgICAgICAgPC9hbnRjYWxsPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiIC8+Ci0JCTxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgotCQkJPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIgLz4KLQkJCTxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgotCQk8L2FudGNhbGw+CisgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiIC8+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIgLz4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgorICAgICAgICA8L2FudGNhbGw+CiAKLQkJPGphdmFjIHNyY2Rpcj0iY2xpZW50IiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiIGluY2x1ZGVzPSJ0ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEiIC8+CisgICAgICAgIDxqYXZhYyBzcmNkaXI9ImNsaWVudCIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIiBpbmNsdWRlcz0idGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIiAvPgogCi0JPC90YXJnZXQ+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgorICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKLQk8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIiAvPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iIC8+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8amF2YSBjbGFzc25hbWU9InRlc3QuY2xpZW50LldlYlRlc3QiPgotCQkJPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9IiAvPgotCQkJPGFyZyB2YWx1ZT0iJHtodHRwLnBvcnR9IiAvPgotCQkJPGFyZyB2YWx1ZT0iJHtjb250ZXh0cm9vdH0iIC8+Ci0JCQk8Y2xhc3NwYXRoPgotCQkJCTxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIgLz4KLQkJCQk8cGF0aGVsZW1lbnQgbG9jYXRpb249ImNsaWVudCIgLz4KLQkJCTwvY2xhc3NwYXRoPgotCQk8L2phdmE+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJ0ZXN0LmNsaWVudC5XZWJUZXN0Ij4KKyAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIgLz4KKyAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5wb3J0fSIgLz4KKyAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7Y29udGV4dHJvb3R9IiAvPgorICAgICAgICAgICAgPGNsYXNzcGF0aD4KKyAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiIC8+CisgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJjbGllbnQiIC8+CisgICAgICAgICAgICA8L2NsYXNzcGF0aD4KKyAgICAgICAgPC9qYXZhPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iIC8+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iIC8+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iIC8+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIiAvPgorICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLWluamVjdGlvbi1uby1pbnRlcmZhY2UtZWpiL3NlcnZsZXQvdGVzdC9iZWFucy9ub25tb2NrL1Rlc3RCZWFuU3VwZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1pbmplY3Rpb24tbm8taW50ZXJmYWNlLWVqYi9zZXJ2bGV0L3Rlc3QvYmVhbnMvbm9ubW9jay9UZXN0QmVhblN1cGVyLmphdmEKaW5kZXggMDExNjUyNS4uYjhmMGI2NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLWluamVjdGlvbi1uby1pbnRlcmZhY2UtZWpiL3NlcnZsZXQvdGVzdC9iZWFucy9ub25tb2NrL1Rlc3RCZWFuU3VwZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0taW5qZWN0aW9uLW5vLWludGVyZmFjZS1lamIvc2VydmxldC90ZXN0L2JlYW5zL25vbm1vY2svVGVzdEJlYW5TdXBlci5qYXZhCkBAIC0yMiw3ICsyMiw3IEBACiBpbXBvcnQgdGVzdC5lamIuVGVzdE5vSW50ZXJmYWNlRUpCOwogCiBhYnN0cmFjdCBjbGFzcyBUZXN0QmVhblN1cGVyIGltcGxlbWVudHMgVGVzdEJlYW5JbnRlcmZhY2UgewotICAgIAorCiAgICAgYWJzdHJhY3QgVGVzdE5vSW50ZXJmYWNlRUpCIGdldFRlc3RFSkIoKTsKIAogICAgIEBPdmVycmlkZQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLWluamVjdGlvbi1uby1pbnRlcmZhY2UtZWpiL3NlcnZsZXQvdGVzdC9lamIvVGVzdE5vSW50ZXJmYWNlRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0taW5qZWN0aW9uLW5vLWludGVyZmFjZS1lamIvc2VydmxldC90ZXN0L2VqYi9UZXN0Tm9JbnRlcmZhY2VFSkIuamF2YQppbmRleCBlYzRlNjVmLi5iOGM3N2RlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0taW5qZWN0aW9uLW5vLWludGVyZmFjZS1lamIvc2VydmxldC90ZXN0L2VqYi9UZXN0Tm9JbnRlcmZhY2VFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0taW5qZWN0aW9uLW5vLWludGVyZmFjZS1lamIvc2VydmxldC90ZXN0L2VqYi9UZXN0Tm9JbnRlcmZhY2VFSkIuamF2YQpAQCAtMjIsNyArMjIsNyBAQAogCiBAU3RhdGVsZXNzCiBwdWJsaWMgY2xhc3MgVGVzdE5vSW50ZXJmYWNlRUpCIGV4dGVuZHMgVGVzdFN1cGVyQ2xhc3MgewotICAgIEBJbmplY3QgCisgICAgQEluamVjdAogICAgIEVudGl0eU1hbmFnZXIgZW07CiAKICAgICBwdWJsaWMgU3RyaW5nIG0yKCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLWluamVjdGlvbi1uby1pbnRlcmZhY2UtZWpiL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L05vSW50ZXJmYWNlRUpCVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1pbmplY3Rpb24tbm8taW50ZXJmYWNlLWVqYi9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9Ob0ludGVyZmFjZUVKQlRlc3RTZXJ2bGV0LmphdmEKaW5kZXggM2QzODI5Zi4uNDlkYzQ3NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLWluamVjdGlvbi1uby1pbnRlcmZhY2UtZWpiL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L05vSW50ZXJmYWNlRUpCVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0taW5qZWN0aW9uLW5vLWludGVyZmFjZS1lamIvc2VydmxldC90ZXN0L3NlcnZsZXQvTm9JbnRlcmZhY2VFSkJUZXN0U2VydmxldC5qYXZhCkBAIC04NCw3ICs4NCw3IEBACiAgICAgICAgIGlmICghc3RhdHVzKSBtc2cgKz0gIkluamVjdGlvbiBhbmQgdXNlIG9mIEVudGl0eU1hYW5nZXIgZmFpbGVkIjsKICAgICAgICAgc3RhdHVzID0ganQubGF6eUxvYWRpbmdCeUZpbmQoMSk7CiAgICAgICAgIGlmICghc3RhdHVzKSBtc2cgKz0gIkluamVjdGlvbiBhbmQgdXNlIG9mIEVudGl0eU1hYW5nZXIgbGF6eSBsb2FkaW5nIHRlc3QgZmFpbGVkIjsKLSAgICAgICAgCisKICAgICAgICAgd3JpdGVyLndyaXRlKG1zZyArICJcbiIpOwogCiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi1leHRlbmRlZC10cmFuc2FjdGlvbi1jb250ZXh0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uLWV4dGVuZGVkLXRyYW5zYWN0aW9uLWNvbnRleHQvYnVpbGQucHJvcGVydGllcwppbmRleCBiMmE4NzU2Li42MjRkMWVlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uLWV4dGVuZGVkLXRyYW5zYWN0aW9uLWNvbnRleHQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uLWV4dGVuZGVkLXRyYW5zYWN0aW9uLWNvbnRleHQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1lbS1yZXNvdXJjZS1pbmplY3Rpb24tZXh0ZW5kZWQtdHJhbnNhY3Rpb25hbC1jb250ZXh0Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uLWV4dGVuZGVkLXRyYW5zYWN0aW9uLWNvbnRleHQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi1leHRlbmRlZC10cmFuc2FjdGlvbi1jb250ZXh0L2J1aWxkLnhtbAppbmRleCAyOTVkMDg2Li5lYjc5MGJmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uLWV4dGVuZGVkLXRyYW5zYWN0aW9uLWNvbnRleHQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24tZXh0ZW5kZWQtdHJhbnNhY3Rpb24tY29udGV4dC9idWlsZC54bWwKQEAgLTMzLDc1ICszMyw3NSBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLGNyZWF0ZS1yZXNvdXJjZXMsZGVwbG95LHJ1bix1bmRlcGxveSxkZWxldGUtcmVzb3VyY2VzIiAvPgogCi0JPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIgLz4KLQkJPGRlbGV0ZT4KLQkJCTxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiIC8+Ci0JCQk8ZmlsZXNldCBkaXI9ImNsaWVudC90ZXN0L2NsaWVudCIgaW5jbHVkZXM9IiouY2xhc3MiIC8+Ci0JCTwvZGVsZXRlPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iIC8+CisgICAgICAgIDxkZWxldGU+CisgICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIiAvPgorICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSJjbGllbnQvdGVzdC9jbGllbnQiIGluY2x1ZGVzPSIqLmNsYXNzIiAvPgorICAgICAgICA8L2RlbGV0ZT4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0IiAvPgotCQk8L2FudGNhbGw+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiIC8+CisgICAgICAgIDwvYW50Y2FsbD4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotCQk8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIiAvPgotCQk8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiIC8+Ci0JCQk8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KLQkJPC9hbnRjYWxsPgorICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIiAvPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiIC8+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KKyAgICAgICAgPC9hbnRjYWxsPgogCi0JCTxqYXZhYyBzcmNkaXI9ImNsaWVudCIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIiBpbmNsdWRlcz0idGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIiAvPgorICAgICAgICA8amF2YWMgc3JjZGlyPSJjbGllbnQiIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIgaW5jbHVkZXM9InRlc3QvY2xpZW50L1dlYlRlc3QuamF2YSIgLz4KIAotCTwvdGFyZ2V0PgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KKyAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCi0JPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIgLz4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIiAvPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJjcmVhdGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJqZGJjLmNvbm5wb29sLm5hbWUiIHZhbHVlPSJqZGJjLWRldi10ZXN0LXBvb2wiIC8+Ci0JCTwvYW50Y2FsbD4KLQkJPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgotCQkJPHBhcmFtIG5hbWU9ImpkYmMuY29ubnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtZGV2LXRlc3QtcG9vbCIgLz4KLQkJCTxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2pkYmMtZGV2LXRlc3QtcmVzb3VyY2UiIC8+Ci0JCTwvYW50Y2FsbD4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1jb25ucG9vbC1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ubnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtZGV2LXRlc3QtcG9vbCIgLz4KKyAgICAgICAgPC9hbnRjYWxsPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1kZXYtdGVzdC1wb29sIiAvPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvamRiYy1kZXYtdGVzdC1yZXNvdXJjZSIgLz4KKyAgICAgICAgPC9hbnRjYWxsPgorICAgIDwvdGFyZ2V0PgogCiAKLQk8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8amF2YSBjbGFzc25hbWU9InRlc3QuY2xpZW50LldlYlRlc3QiPgotCQkJPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9IiAvPgotCQkJPGFyZyB2YWx1ZT0iJHtodHRwLnBvcnR9IiAvPgotCQkJPGFyZyB2YWx1ZT0iJHtjb250ZXh0cm9vdH0iIC8+Ci0JCQk8Y2xhc3NwYXRoPgotCQkJCTxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIgLz4KLQkJCQk8cGF0aGVsZW1lbnQgbG9jYXRpb249ImNsaWVudCIgLz4KLQkJCTwvY2xhc3NwYXRoPgotCQk8L2phdmE+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJ0ZXN0LmNsaWVudC5XZWJUZXN0Ij4KKyAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIgLz4KKyAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5wb3J0fSIgLz4KKyAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7Y29udGV4dHJvb3R9IiAvPgorICAgICAgICAgICAgPGNsYXNzcGF0aD4KKyAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiIC8+CisgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJjbGllbnQiIC8+CisgICAgICAgICAgICA8L2NsYXNzcGF0aD4KKyAgICAgICAgPC9qYXZhPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iIC8+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iIC8+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgotCQkJPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvamRiYy1kZXYtdGVzdC1yZXNvdXJjZSIgLz4KLQkJPC9hbnRjYWxsPgorICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9qZGJjLWRldi10ZXN0LXJlc291cmNlIiAvPgorICAgICAgICA8L2FudGNhbGw+CiAKLQkJPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1jb25ucG9vbC1jb21tb24iPgotCQkJPHBhcmFtIG5hbWU9ImpkYmMuY29ubnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtZGV2LXRlc3QtcG9vbCIgLz4KLQkJPC9hbnRjYWxsPgotCTwvdGFyZ2V0PgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1kZXYtdGVzdC1wb29sIiAvPgorICAgICAgICA8L2FudGNhbGw+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iIC8+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIiAvPgorICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi1leHRlbmRlZC10cmFuc2FjdGlvbi1jb250ZXh0L3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0QmVhbkludGVyZmFjZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi1leHRlbmRlZC10cmFuc2FjdGlvbi1jb250ZXh0L3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0QmVhbkludGVyZmFjZS5qYXZhCmluZGV4IDI5ZTEzN2EuLmU1YmU0ZDMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24tZXh0ZW5kZWQtdHJhbnNhY3Rpb24tY29udGV4dC9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEJlYW5JbnRlcmZhY2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uLWV4dGVuZGVkLXRyYW5zYWN0aW9uLWNvbnRleHQvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RCZWFuSW50ZXJmYWNlLmphdmEKQEAgLTE5LDYgKzE5LDYgQEAKIHB1YmxpYyBpbnRlcmZhY2UgVGVzdEJlYW5JbnRlcmZhY2UgewogICAgIHB1YmxpYyB2b2lkIG0xKCk7CiAgICAgcHVibGljIHZvaWQgbTIoKTsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgdGVzdERhdGFzb3VyY2VJbmplY3Rpb24oKTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24tZXh0ZW5kZWQtdHJhbnNhY3Rpb24tY29udGV4dC9zZXJ2bGV0L3Rlc3QvYmVhbnMvbm9ubW9jay9UZXN0QmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi1leHRlbmRlZC10cmFuc2FjdGlvbi1jb250ZXh0L3NlcnZsZXQvdGVzdC9iZWFucy9ub25tb2NrL1Rlc3RCZWFuLmphdmEKaW5kZXggYjA0N2IzZC4uMDFkZWY0NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi1leHRlbmRlZC10cmFuc2FjdGlvbi1jb250ZXh0L3NlcnZsZXQvdGVzdC9iZWFucy9ub25tb2NrL1Rlc3RCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi1leHRlbmRlZC10cmFuc2FjdGlvbi1jb250ZXh0L3NlcnZsZXQvdGVzdC9iZWFucy9ub25tb2NrL1Rlc3RCZWFuLmphdmEKQEAgLTMwLDggKzMwLDggQEAKIEBQcmVmZXJyZWQKIHB1YmxpYyBjbGFzcyBUZXN0QmVhbiBpbXBsZW1lbnRzIFRlc3RCZWFuSW50ZXJmYWNlewogICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiB0ZXN0QmVhbkludm9rZWQgPSBmYWxzZTsKLSAgICAKLSAgICBASW5qZWN0IC8vQFRlc3REYXRhYmFzZSAKKworICAgIEBJbmplY3QgLy9AVGVzdERhdGFiYXNlCiAgICAgRW50aXR5TWFuYWdlciBlbWY7CiAKICAgICBAT3ZlcnJpZGUKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24tZXh0ZW5kZWQtdHJhbnNhY3Rpb24tY29udGV4dC9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9KUEFSZXNvdXJjZUluamVjdGlvblNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24tZXh0ZW5kZWQtdHJhbnNhY3Rpb24tY29udGV4dC9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9KUEFSZXNvdXJjZUluamVjdGlvblNlcnZsZXQuamF2YQppbmRleCBhMjMyMGJkLi5lY2Q5MDdhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uLWV4dGVuZGVkLXRyYW5zYWN0aW9uLWNvbnRleHQvc2VydmxldC90ZXN0L3NlcnZsZXQvSlBBUmVzb3VyY2VJbmplY3Rpb25TZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi1leHRlbmRlZC10cmFuc2FjdGlvbi1jb250ZXh0L3NlcnZsZXQvdGVzdC9zZXJ2bGV0L0pQQVJlc291cmNlSW5qZWN0aW9uU2VydmxldC5qYXZhCkBAIC00OCw3ICs0OCw3IEBACiAKICAgICBwcml2YXRlIEBSZXNvdXJjZQogICAgIFVzZXJUcmFuc2FjdGlvbiB1dHg7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgQFByZWZlcnJlZAogICAgIFRlc3RCZWFuSW50ZXJmYWNlIHRiaTsKQEAgLTYwLDExICs2MCwxMSBAQAogICAgICAgICB3cml0ZXIud3JpdGUoIkhlbGxvIGZyb20gU2VydmxldCAzLjAuIik7CiAgICAgICAgIFN0cmluZyBtc2cgPSAiIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJKUEFSZXNvdXJjZUluamVjdGlvblNlcnZsZXQ6OkBQZXJzaXN0ZW5jZVVuaXQgIiArCi0gICAgICAgIAkJIkNESSBFbnRpdHlNYW5hZ2VyRmFjdG9yeT0iICsgZW1mMSk7CisgICAgICAgICAgICAgICAgIkNESSBFbnRpdHlNYW5hZ2VyRmFjdG9yeT0iICsgZW1mMSk7CiAKICAgICAgICAgRW50aXR5TWFuYWdlciBlbSA9IGVtZjE7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSlBBUmVzb3VyY2VJbmplY3Rpb25TZXJ2bGV0OjpjcmVhdGVFTSIgKwotICAgICAgICAJCSJFbnRpdHlNYW5hZ2VyPSIgKyBlbSk7CisgICAgICAgICAgICAgICAgIkVudGl0eU1hbmFnZXI9IiArIGVtKTsKICAgICAgICAgU3RyaW5nIHRlc3RjYXNlID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoInRlc3RjYXNlIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidGVzdGNhc2U9IiArIHRlc3RjYXNlKTsKIApAQCAtNzgsNyArNzgsNyBAQAogICAgICAgICAgICAgfSBlbHNlIGlmICgibGxxdWVyeSIuZXF1YWxzKHRlc3RjYXNlKSkgewogICAgICAgICAgICAgICAgIHN0YXR1cyA9IGp0LmxhenlMb2FkaW5nQnlRdWVyeSgiQ2FybGEiKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoImxsaW5qIi5lcXVhbHModGVzdGNhc2UpKXsKLSAgICAgICAgICAgICAgICBzdGF0dXMgPSAoKHRiaSAhPSBudWxsKSAmJiAKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSAoKHRiaSAhPSBudWxsKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgKHRiaS50ZXN0RGF0YXNvdXJjZUluamVjdGlvbigpLnRyaW0oKS5sZW5ndGgoKT09MCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHN0YXR1cykgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi1leHRlbmRlZC10cmFuc2FjdGlvbi1jb250ZXh0L3NlcnZsZXQvdGVzdC91dGlsL0pQQVJlc291cmNlUHJvZHVjZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24tZXh0ZW5kZWQtdHJhbnNhY3Rpb24tY29udGV4dC9zZXJ2bGV0L3Rlc3QvdXRpbC9KUEFSZXNvdXJjZVByb2R1Y2VyLmphdmEKaW5kZXggZTI4ZDhhOS4uMWNiZmVmZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi1leHRlbmRlZC10cmFuc2FjdGlvbi1jb250ZXh0L3NlcnZsZXQvdGVzdC91dGlsL0pQQVJlc291cmNlUHJvZHVjZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uLWV4dGVuZGVkLXRyYW5zYWN0aW9uLWNvbnRleHQvc2VydmxldC90ZXN0L3V0aWwvSlBBUmVzb3VyY2VQcm9kdWNlci5qYXZhCkBAIC0yNSw3ICsyNSw3IEBACiBAU2luZ2xldG9uCiBwdWJsaWMgY2xhc3MgSlBBUmVzb3VyY2VQcm9kdWNlciB7CiAgICAgQFByb2R1Y2VzIEBQZXJzaXN0ZW5jZUNvbnRleHQodW5pdE5hbWU9InB1MSIsIHR5cGU9UGVyc2lzdGVuY2VDb250ZXh0VHlwZS5FWFRFTkRFRCkKLSAgICAvL0BUZXN0RGF0YWJhc2UgCisgICAgLy9AVGVzdERhdGFiYXNlCiAgICAgRW50aXR5TWFuYWdlciBjdXN0b21lckRhdGFiYXNlUGVyc2lzdGVuY2VVbml0OwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uLXdpdGgtcmVzb3VyY2UtZGVjbGFyYXRpb24taW4tYW5vdGhlci1qYXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24td2l0aC1yZXNvdXJjZS1kZWNsYXJhdGlvbi1pbi1hbm90aGVyLWphci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDFiYzBjMmUuLmE4MmY3YjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24td2l0aC1yZXNvdXJjZS1kZWNsYXJhdGlvbi1pbi1hbm90aGVyLWphci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24td2l0aC1yZXNvdXJjZS1kZWNsYXJhdGlvbi1pbi1hbm90aGVyLWphci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaS1mdWxsLWVhciIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzZS5jbGllbnQiIHZhbHVlPSJjb20uYWNtZS5DbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uLXdpdGgtcmVzb3VyY2UtZGVjbGFyYXRpb24taW4tYW5vdGhlci1qYXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi13aXRoLXJlc291cmNlLWRlY2xhcmF0aW9uLWluLWFub3RoZXItamFyL2J1aWxkLnhtbAppbmRleCBkMzEwNmZiLi5hZGIwNTg1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uLXdpdGgtcmVzb3VyY2UtZGVjbGFyYXRpb24taW4tYW5vdGhlci1qYXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24td2l0aC1yZXNvdXJjZS1kZWNsYXJhdGlvbi1pbi1hbm90aGVyLWphci9idWlsZC54bWwKQEAgLTM0LDEzICszNCwxMyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJsaWIiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCi0gICAgICAgCisKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KQEAgLTQ5LDcgKzQ5LDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJ3YXIiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCi0JICAgIDxqYXZhYyBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgc3JjZGlyPSJjbGllbnQiIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiBkZWJ1Zz0ib24iIGZhaWxvbmVycm9yPSJ0cnVlIj4KKyAgICAgICAgPGphdmFjIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiBzcmNkaXI9ImNsaWVudCIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIGRlYnVnPSJvbiIgZmFpbG9uZXJyb3I9InRydWUiPgogICAgICAgICA8L2phdmFjPgogICAgIDwvdGFyZ2V0PgogCkBAIC05Miw3ICs5Miw3IEBACiAgICAgICAgIDxkZWxldGUgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0uZWFyIi8+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgogICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgotICAgICAgICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiICAJZmFpbG9uZXJyb3I9ImZhbHNlIi8+CisgICAgICAgIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICAgICAgPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtcmVzb3VyY2VzLWVhci54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiICBmaWx0ZXJpbmc9InRydWUiLz4KICAgICAgICAgPGVhciBlYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiCiAgICAgICAgICAgICAgYXBweG1sPSIke2FwcGxpY2F0aW9uLnhtbH0iID4KQEAgLTEwMSwyNCArMTAxLDI0IEBACiAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLndhciIvPgogICAgICAgICAgIDwvZmlsZXNldD4KICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ij4KLQkgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KKyAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sIi8+CiAgICAgICAgICAgPC9maWxlc2V0PgogPCEtLQogICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuQVBTX0hPTUV9IiBpbmNsdWRlcz0ibGliL3JlcG9ydGVyLmphciIvPgogLS0+CiAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgaW5jbHVkZXM9ImxpYi1kaXIvKiIvPgotICA8L2Vhcj4gIAorICA8L2Vhcj4KIAotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgIDxqYXZhICBmb3JrPSJvbiIgCisgICAgICAgPGphdmEgIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iJHtzZS5jbGllbnR9Ij4KQEAgLTEyNywxMCArMTI3LDEwIEBACiAgICAgICAgICAgIDxhcmcgbGluZT0iJHtodHRwLnBvcnR9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi13aXRoLXJlc291cmNlLWRlY2xhcmF0aW9uLWluLWFub3RoZXItamFyL2NsaWVudC9jb20vYWNtZS9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24td2l0aC1yZXNvdXJjZS1kZWNsYXJhdGlvbi1pbi1hbm90aGVyLWphci9jbGllbnQvY29tL2FjbWUvQ2xpZW50LmphdmEKaW5kZXggMjEwZmMwZi4uYjVjYTRiZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi13aXRoLXJlc291cmNlLWRlY2xhcmF0aW9uLWluLWFub3RoZXItamFyL2NsaWVudC9jb20vYWNtZS9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uLXdpdGgtcmVzb3VyY2UtZGVjbGFyYXRpb24taW4tYW5vdGhlci1qYXIvY2xpZW50L2NvbS9hY21lL0NsaWVudC5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9OQU1FID0gImVtLXJlc291cmNlLWluamVjdGlvbi13aXRoLXJlc291cmNlLWRlY2xhcmF0aW9uLWluLWFub3RoZXItamFyIjsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBhcHBOYW1lOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi13aXRoLXJlc291cmNlLWRlY2xhcmF0aW9uLWluLWFub3RoZXItamFyL2VqYi9jb20vYWNtZS9lamIvaW1wbC9IZWxsb1NpbmdsZXRvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi13aXRoLXJlc291cmNlLWRlY2xhcmF0aW9uLWluLWFub3RoZXItamFyL2VqYi9jb20vYWNtZS9lamIvaW1wbC9IZWxsb1NpbmdsZXRvbi5qYXZhCmluZGV4IGQyMmRjODIuLmJjNGEyODYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24td2l0aC1yZXNvdXJjZS1kZWNsYXJhdGlvbi1pbi1hbm90aGVyLWphci9lamIvY29tL2FjbWUvZWpiL2ltcGwvSGVsbG9TaW5nbGV0b24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uLXdpdGgtcmVzb3VyY2UtZGVjbGFyYXRpb24taW4tYW5vdGhlci1qYXIvZWpiL2NvbS9hY21lL2VqYi9pbXBsL0hlbGxvU2luZ2xldG9uLmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKICAgICBAUGVyc2lzdGVuY2VVbml0KHVuaXROYW1lID0gInB1MSIpCiAgICAgQFRlc3REYXRhYmFzZQogICAgIHByaXZhdGUgRW50aXR5TWFuYWdlckZhY3RvcnkgZW1mOwotICAgIAorCiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0KCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi13aXRoLXJlc291cmNlLWRlY2xhcmF0aW9uLWluLWFub3RoZXItamFyL2VqYi9jb20vYWNtZS9lamIvaW1wbC9TaW5nbGV0b240LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uLXdpdGgtcmVzb3VyY2UtZGVjbGFyYXRpb24taW4tYW5vdGhlci1qYXIvZWpiL2NvbS9hY21lL2VqYi9pbXBsL1NpbmdsZXRvbjQuamF2YQppbmRleCBhNTRjNTllLi42YWExZjI0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uLXdpdGgtcmVzb3VyY2UtZGVjbGFyYXRpb24taW4tYW5vdGhlci1qYXIvZWpiL2NvbS9hY21lL2VqYi9pbXBsL1NpbmdsZXRvbjQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uLXdpdGgtcmVzb3VyY2UtZGVjbGFyYXRpb24taW4tYW5vdGhlci1qYXIvZWpiL2NvbS9hY21lL2VqYi9pbXBsL1NpbmdsZXRvbjQuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogICAgIHB1YmxpYyB2b2lkIGluaXQoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjQ6OmluaXQoKSIpOwogICAgIH0KLSAgICAKKwogICAgIEBQcmVEZXN0cm95CiAgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuNDo6ZGVzdHJveSgpIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uLXdpdGgtcmVzb3VyY2UtZGVjbGFyYXRpb24taW4tYW5vdGhlci1qYXIvbGliL2NvbS9hY21lL3V0aWwvUmVzb3VyY2VzUHJvZHVjZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24td2l0aC1yZXNvdXJjZS1kZWNsYXJhdGlvbi1pbi1hbm90aGVyLWphci9saWIvY29tL2FjbWUvdXRpbC9SZXNvdXJjZXNQcm9kdWNlci5qYXZhCmluZGV4IGVhMDI5YWMuLjk2ZTJkMGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24td2l0aC1yZXNvdXJjZS1kZWNsYXJhdGlvbi1pbi1hbm90aGVyLWphci9saWIvY29tL2FjbWUvdXRpbC9SZXNvdXJjZXNQcm9kdWNlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24td2l0aC1yZXNvdXJjZS1kZWNsYXJhdGlvbi1pbi1hbm90aGVyLWphci9saWIvY29tL2FjbWUvdXRpbC9SZXNvdXJjZXNQcm9kdWNlci5qYXZhCkBAIC0yOCwxMCArMjgsMTAgQEAKICAgICBAUGVyc2lzdGVuY2VDb250ZXh0KHVuaXROYW1lID0gInB1MSIpCiAgICAgQFRlc3REYXRhYmFzZQogICAgIEVudGl0eU1hbmFnZXIgY3VzdG9tZXJEYXRhYmFzZVBlcnNpc3RlbmNlVW5pdDsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBUZXN0RGVwZW5kZW50QmVhbkluTGliIGZvbzsKLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGlzSW5qZWN0aW9uU3VjY2Vzc2Z1bCgpewogICAgICAgICByZXR1cm4gKGZvbyAhPSBudWxsKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uLXdpdGgtcmVzb3VyY2UtZGVjbGFyYXRpb24taW4tYW5vdGhlci1qYXIvbGliL2NvbS9hY21lL3V0aWwvVGVzdERlcGVuZGVudEJlYW5JbkxpYi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi13aXRoLXJlc291cmNlLWRlY2xhcmF0aW9uLWluLWFub3RoZXItamFyL2xpYi9jb20vYWNtZS91dGlsL1Rlc3REZXBlbmRlbnRCZWFuSW5MaWIuamF2YQppbmRleCA5NTk2YjIyLi42MWQ0OWI2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uLXdpdGgtcmVzb3VyY2UtZGVjbGFyYXRpb24taW4tYW5vdGhlci1qYXIvbGliL2NvbS9hY21lL3V0aWwvVGVzdERlcGVuZGVudEJlYW5JbkxpYi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24td2l0aC1yZXNvdXJjZS1kZWNsYXJhdGlvbi1pbi1hbm90aGVyLWphci9saWIvY29tL2FjbWUvdXRpbC9UZXN0RGVwZW5kZW50QmVhbkluTGliLmphdmEKQEAgLTIxLDcgKzIxLDcgQEAKICAgICBwdWJsaWMgVGVzdERlcGVuZGVudEJlYW5JbkxpYigpIHsKICAgICAgICAgc3VwZXIoKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGZvbygpewogICAgICAgICByZXR1cm4gImZvbyEiOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24td2l0aC1yZXNvdXJjZS1kZWNsYXJhdGlvbi1pbi1hbm90aGVyLWphci9saWIvY29tL2FjbWUvdXRpbC9UZXN0TWFuYWdlZEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24td2l0aC1yZXNvdXJjZS1kZWNsYXJhdGlvbi1pbi1hbm90aGVyLWphci9saWIvY29tL2FjbWUvdXRpbC9UZXN0TWFuYWdlZEJlYW4uamF2YQppbmRleCA1ZDg1YTBmLi44YzUwYjY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uLXdpdGgtcmVzb3VyY2UtZGVjbGFyYXRpb24taW4tYW5vdGhlci1qYXIvbGliL2NvbS9hY21lL3V0aWwvVGVzdE1hbmFnZWRCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi13aXRoLXJlc291cmNlLWRlY2xhcmF0aW9uLWluLWFub3RoZXItamFyL2xpYi9jb20vYWNtZS91dGlsL1Rlc3RNYW5hZ2VkQmVhbi5qYXZhCkBAIC0yMyw3ICsyMyw3IEBACiBwdWJsaWMgY2xhc3MgVGVzdE1hbmFnZWRCZWFuIHsKICAgICBASW5qZWN0CiAgICAgcHJpdmF0ZSBUZXN0RGVwZW5kZW50QmVhbkluTGliIHRkYmw7Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBpc0luamVjdGlvblN1Y2Nlc3NmdWwoKXsKICAgICAgICAgcmV0dXJuIHRkYmwgIT0gbnVsbDsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uLXdpdGgtcmVzb3VyY2UtZGVjbGFyYXRpb24taW4tYW5vdGhlci1qYXIvd2FyL2NvbS9hY21lL3NlcnZsZXQvSGVsbG9TZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uLXdpdGgtcmVzb3VyY2UtZGVjbGFyYXRpb24taW4tYW5vdGhlci1qYXIvd2FyL2NvbS9hY21lL3NlcnZsZXQvSGVsbG9TZXJ2bGV0LmphdmEKaW5kZXggZjZhOTA0ZC4uNmY4NzNlNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi13aXRoLXJlc291cmNlLWRlY2xhcmF0aW9uLWluLWFub3RoZXItamFyL3dhci9jb20vYWNtZS9zZXJ2bGV0L0hlbGxvU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24td2l0aC1yZXNvdXJjZS1kZWNsYXJhdGlvbi1pbi1hbm90aGVyLWphci93YXIvY29tL2FjbWUvc2VydmxldC9IZWxsb1NlcnZsZXQuamF2YQpAQCAtNDEsNTYgKzQxLDU2IEBACiBAU3VwcHJlc3NXYXJuaW5ncygic2VyaWFsIikKIHB1YmxpYyBjbGFzcyBIZWxsb1NlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAgICAgU3RyaW5nIG1zZyA9ICIiOwotICAgIAorCiAgICAgQEVKQihuYW1lID0gImphdmE6bW9kdWxlL20xIiwgYmVhbk5hbWUgPSAiSGVsbG9TaW5nbGV0b24iLCBiZWFuSW50ZXJmYWNlID0gSGVsbG8uY2xhc3MpCiAgICAgSGVsbG8gaDsKLSAgICAKKwogICAgIEBQZXJzaXN0ZW5jZVVuaXQodW5pdE5hbWUgPSAicHUxIikKICAgICBAVGVzdERhdGFiYXNlCiAgICAgcHJpdmF0ZSBFbnRpdHlNYW5hZ2VyRmFjdG9yeSBlbWY7CiAKICAgICBASW5qZWN0CiAgICAgcHJpdmF0ZSBSZXNvdXJjZXNQcm9kdWNlciBycDsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBwcml2YXRlIFRlc3REZXBlbmRlbnRCZWFuSW5MaWIgZmI7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgcHJpdmF0ZSBUZXN0TWFuYWdlZEJlYW4gdG1iOwotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgcHJvdGVjdGVkIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQogICAgICAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NlcnZsZXQ6OmRvR2V0Iik7CiAgICAgICAgIHJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwLmdldFdyaXRlcigpOwotICAgICAgICAKKwogICAgICAgICBjaGVja0Zvck51bGwoZW1mLCAiSW5qZWN0aW9uIG9mIEVNRiBmYWlsZWQgaW4gU2VydmxldCIpOwogICAgICAgICAvL2Vuc3VyZSBFTUYgd29ya3MhCiAgICAgICAgIGVtZi5jcmVhdGVFbnRpdHlNYW5hZ2VyKCk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vY2FsbCBTaW5nbGV0b24gRUpCCiAgICAgICAgIFN0cmluZyByZXNwb25zZSA9IGguaGVsbG8oKTsKICAgICAgICAgaWYoIXJlc3BvbnNlLmVxdWFscyhIZWxsby5IRUxMT19URVNUX1NUUklORykpCiAgICAgICAgICAgICBtc2cgKz0gIkludm9jYXRpb24gb2YgSGVsbG8gU2luZ2V0b24gRUpCIGZhaWxlZDptc2c9IiArIHJlc3BvbnNlOwotICAgICAgICAKKwogICAgICAgICBpZiAoIXJwLmlzSW5qZWN0aW9uU3VjY2Vzc2Z1bCgpKQogICAgICAgICAgICAgbXNnICs9ICJJbmplY3Rpb24gb2YgYSBiZWFuIGluIGxpYiBkaXJlY3RvcnkgaW50byBhbm90aGVyICIgKwotICAgICAgICAgICAgCQkiQmVhbiBpbiBsaWIgZGlyZWN0b3J5IGZhaWxlZCI7CisgICAgICAgICAgICAgICAgICAgICJCZWFuIGluIGxpYiBkaXJlY3RvcnkgZmFpbGVkIjsKICAgICAgICAgY2hlY2tGb3JOdWxsKGZiLCAiSW5qZWN0aW9uIG9mIGEgYmVhbiB0aGF0IGlzIHBsYWNlZCBpbiBsaWIgZGlyZWN0b3J5ICIgKwotICAgICAgICAJCSJpbnRvIGEgU2VydmxldCB0aGF0IGlzIHBsYWNlZCBpbiBhIFdBUiBmYWlsZWQiKTsKKyAgICAgICAgICAgICAgICAiaW50byBhIFNlcnZsZXQgdGhhdCBpcyBwbGFjZWQgaW4gYSBXQVIgZmFpbGVkIik7CiAgICAgICAgIGNoZWNrRm9yTnVsbCh0bWIsICJJbmplY3Rpb24gb2YgYSBNYW5hZ2VkIGJlYW4gdGhhdCBpcyBwbGFjZWQgaW4gbGliIGRpcmVjdG9yeSAiICsKICAgICAgICAgImludG8gYSBTZXJ2bGV0IHRoYXQgaXMgcGxhY2VkIGluIGEgV0FSIGZhaWxlZCIpOwotICAgICAgICAKKwogICAgICAgICBpZiAoIXJwLmlzSW5qZWN0aW9uU3VjY2Vzc2Z1bCgpKQogICAgICAgICAgICAgbXNnICs9ICJJbmplY3Rpb24gb2YgYSBiZWFuIGluIGxpYiBkaXJlY3RvcnkgaW50byBhbm90aGVyIEJlYW4gIiArCi0gICAgICAgICAgICAJCSJpbiBsaWIgZGlyZWN0b3J5IGZhaWxlZCI7Ci0gICAgICAgIAorICAgICAgICAgICAgICAgICAgICAiaW4gbGliIGRpcmVjdG9yeSBmYWlsZWQiOworCiAgICAgICAgIGlmICghdG1iLmlzSW5qZWN0aW9uU3VjY2Vzc2Z1bCgpKQogICAgICAgICAgICAgbXNnICs9ICJJbmplY3Rpb24gb2YgYSBCZWFuIHBsYWNlZCBpbiBsaWIgZGlyIGludG8gYSAiICsKLSAgICAgICAgICAgIAkJIk1hbmFnZWRCZWFuIHBsYWNlZCBpbiBsaWIgZGlyIGZhaWxlZCI7Ci0gICAgICAgIAotICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgIk1hbmFnZWRCZWFuIHBsYWNlZCBpbiBsaWIgZGlyIGZhaWxlZCI7CisKKwogICAgICAgICBvdXQucHJpbnRsbihtc2cpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDA0MTFlYzkuLjcyZTM0MjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZW0tcmVzb3VyY2UtaW5qZWN0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24vYnVpbGQueG1sCmluZGV4IDI5NWQwODYuLmViNzkwYmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24vYnVpbGQueG1sCkBAIC0zMyw3NSArMzMsNzUgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCxjcmVhdGUtcmVzb3VyY2VzLGRlcGxveSxydW4sdW5kZXBsb3ksZGVsZXRlLXJlc291cmNlcyIgLz4KIAotCTx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iIC8+Ci0JCTxkZWxldGU+Ci0JCQk8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIiAvPgotCQkJPGZpbGVzZXQgZGlyPSJjbGllbnQvdGVzdC9jbGllbnQiIGluY2x1ZGVzPSIqLmNsYXNzIiAvPgotCQk8L2RlbGV0ZT4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIiAvPgorICAgICAgICA8ZGVsZXRlPgorICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIgLz4KKyAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iY2xpZW50L3Rlc3QvY2xpZW50IiBpbmNsdWRlcz0iKi5jbGFzcyIgLz4KKyAgICAgICAgPC9kZWxldGU+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+Ci0JCQk8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIgLz4KLQkJPC9hbnRjYWxsPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0IiAvPgorICAgICAgICA8L2FudGNhbGw+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLQkJPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIgLz4KLQkJPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+Ci0JCQk8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIiAvPgotCQkJPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiIC8+Ci0JCTwvYW50Y2FsbD4KKyAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIgLz4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIiAvPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiIC8+CisgICAgICAgIDwvYW50Y2FsbD4KIAotCQk8amF2YWMgc3JjZGlyPSJjbGllbnQiIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIgaW5jbHVkZXM9InRlc3QvY2xpZW50L1dlYlRlc3QuamF2YSIgLz4KKyAgICAgICAgPGphdmFjIHNyY2Rpcj0iY2xpZW50IiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiIGluY2x1ZGVzPSJ0ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEiIC8+CiAKLQk8L3RhcmdldD4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CisgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIAotCTx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iIC8+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIgLz4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iY3JlYXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiI+Ci0JCQk8cGFyYW0gbmFtZT0iamRiYy5jb25ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1kZXYtdGVzdC1wb29sIiAvPgotCQk8L2FudGNhbGw+Ci0JCTxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJqZGJjLmNvbm5wb29sLm5hbWUiIHZhbHVlPSJqZGJjLWRldi10ZXN0LXBvb2wiIC8+Ci0JCQk8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9qZGJjLWRldi10ZXN0LXJlc291cmNlIiAvPgotCQk8L2FudGNhbGw+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbm5wb29sLm5hbWUiIHZhbHVlPSJqZGJjLWRldi10ZXN0LXBvb2wiIC8+CisgICAgICAgIDwvYW50Y2FsbD4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ubnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtZGV2LXRlc3QtcG9vbCIgLz4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2pkYmMtZGV2LXRlc3QtcmVzb3VyY2UiIC8+CisgICAgICAgIDwvYW50Y2FsbD4KKyAgICA8L3RhcmdldD4KIAogCi0JPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGphdmEgY2xhc3NuYW1lPSJ0ZXN0LmNsaWVudC5XZWJUZXN0Ij4KLQkJCTxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIgLz4KLQkJCTxhcmcgdmFsdWU9IiR7aHR0cC5wb3J0fSIgLz4KLQkJCTxhcmcgdmFsdWU9IiR7Y29udGV4dHJvb3R9IiAvPgotCQkJPGNsYXNzcGF0aD4KLQkJCQk8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiIC8+Ci0JCQkJPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJjbGllbnQiIC8+Ci0JCQk8L2NsYXNzcGF0aD4KLQkJPC9qYXZhPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0idGVzdC5jbGllbnQuV2ViVGVzdCI+CisgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iIC8+CisgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAucG9ydH0iIC8+CisgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2NvbnRleHRyb290fSIgLz4KKyAgICAgICAgICAgIDxjbGFzc3BhdGg+CisgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIiAvPgorICAgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iY2xpZW50IiAvPgorICAgICAgICAgICAgPC9jbGFzc3BhdGg+CisgICAgICAgIDwvamF2YT4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIiAvPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIiAvPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2pkYmMtZGV2LXRlc3QtcmVzb3VyY2UiIC8+Ci0JCTwvYW50Y2FsbD4KKyAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvamRiYy1kZXYtdGVzdC1yZXNvdXJjZSIgLz4KKyAgICAgICAgPC9hbnRjYWxsPgogCi0JCTxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJqZGJjLmNvbm5wb29sLm5hbWUiIHZhbHVlPSJqZGJjLWRldi10ZXN0LXBvb2wiIC8+Ci0JCTwvYW50Y2FsbD4KLQk8L3RhcmdldD4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1jb25ucG9vbC1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ubnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtZGV2LXRlc3QtcG9vbCIgLz4KKyAgICAgICAgPC9hbnRjYWxsPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JCTxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIiAvPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIgLz4KKyAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24vc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RCZWFuSW50ZXJmYWNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0QmVhbkludGVyZmFjZS5qYXZhCmluZGV4IDI5ZTEzN2EuLmU1YmU0ZDMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24vc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RCZWFuSW50ZXJmYWNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEJlYW5JbnRlcmZhY2UuamF2YQpAQCAtMTksNiArMTksNiBAQAogcHVibGljIGludGVyZmFjZSBUZXN0QmVhbkludGVyZmFjZSB7CiAgICAgcHVibGljIHZvaWQgbTEoKTsKICAgICBwdWJsaWMgdm9pZCBtMigpOwotICAgIAorCiAgICAgcHVibGljIFN0cmluZyB0ZXN0RGF0YXNvdXJjZUluamVjdGlvbigpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi9zZXJ2bGV0L3Rlc3QvYmVhbnMvbm9ubW9jay9UZXN0QmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi9zZXJ2bGV0L3Rlc3QvYmVhbnMvbm9ubW9jay9UZXN0QmVhbi5qYXZhCmluZGV4IGIwNDdiM2QuLjAxZGVmNDYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24vc2VydmxldC90ZXN0L2JlYW5zL25vbm1vY2svVGVzdEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uL3NlcnZsZXQvdGVzdC9iZWFucy9ub25tb2NrL1Rlc3RCZWFuLmphdmEKQEAgLTMwLDggKzMwLDggQEAKIEBQcmVmZXJyZWQKIHB1YmxpYyBjbGFzcyBUZXN0QmVhbiBpbXBsZW1lbnRzIFRlc3RCZWFuSW50ZXJmYWNlewogICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiB0ZXN0QmVhbkludm9rZWQgPSBmYWxzZTsKLSAgICAKLSAgICBASW5qZWN0IC8vQFRlc3REYXRhYmFzZSAKKworICAgIEBJbmplY3QgLy9AVGVzdERhdGFiYXNlCiAgICAgRW50aXR5TWFuYWdlciBlbWY7CiAKICAgICBAT3ZlcnJpZGUKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24vc2VydmxldC90ZXN0L3NlcnZsZXQvSlBBUmVzb3VyY2VJbmplY3Rpb25TZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvZW0tcmVzb3VyY2UtaW5qZWN0aW9uL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L0pQQVJlc291cmNlSW5qZWN0aW9uU2VydmxldC5qYXZhCmluZGV4IDQxODkxNDQuLjFlZDcwMTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24vc2VydmxldC90ZXN0L3NlcnZsZXQvSlBBUmVzb3VyY2VJbmplY3Rpb25TZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9KUEFSZXNvdXJjZUluamVjdGlvblNlcnZsZXQuamF2YQpAQCAtNDcsNyArNDcsNyBAQAogCiAgICAgcHJpdmF0ZSBAUmVzb3VyY2UKICAgICBVc2VyVHJhbnNhY3Rpb24gdXR4OwotICAgIAorCiAgICAgQEluamVjdAogICAgIEBQcmVmZXJyZWQKICAgICBUZXN0QmVhbkludGVyZmFjZSB0Ymk7CkBAIC01OSwxMSArNTksMTEgQEAKICAgICAgICAgd3JpdGVyLndyaXRlKCJIZWxsbyBmcm9tIFNlcnZsZXQgMy4wLiIpOwogICAgICAgICBTdHJpbmcgbXNnID0gIiI7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSlBBUmVzb3VyY2VJbmplY3Rpb25TZXJ2bGV0OjpAUGVyc2lzdGVuY2VVbml0ICIgKwotICAgICAgICAJCSJDREkgRW50aXR5TWFuYWdlckZhY3Rvcnk9IiArIGVtZl9hdF9pbmopOworICAgICAgICAgICAgICAgICJDREkgRW50aXR5TWFuYWdlckZhY3Rvcnk9IiArIGVtZl9hdF9pbmopOwogCiAgICAgICAgIEVudGl0eU1hbmFnZXIgZW0gPSBlbWZfYXRfaW5qOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkpQQVJlc291cmNlSW5qZWN0aW9uU2VydmxldDo6Y3JlYXRlRU0iICsKLSAgICAgICAgCQkiRW50aXR5TWFuYWdlcj0iICsgZW0pOworICAgICAgICAgICAgICAgICJFbnRpdHlNYW5hZ2VyPSIgKyBlbSk7CiAgICAgICAgIFN0cmluZyB0ZXN0Y2FzZSA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJ0ZXN0Y2FzZSIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRlc3RjYXNlPSIgKyB0ZXN0Y2FzZSk7CiAKQEAgLTc3LDcgKzc3LDcgQEAKICAgICAgICAgICAgIH0gZWxzZSBpZiAoImxscXVlcnkiLmVxdWFscyh0ZXN0Y2FzZSkpIHsKICAgICAgICAgICAgICAgICBzdGF0dXMgPSBqdC5sYXp5TG9hZGluZ0J5UXVlcnkoIkNhcmxhIik7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKCJsbGluaiIuZXF1YWxzKHRlc3RjYXNlKSl7Ci0gICAgICAgICAgICAgICAgc3RhdHVzID0gKCh0YmkgIT0gbnVsbCkgJiYgCisgICAgICAgICAgICAgICAgc3RhdHVzID0gKCh0YmkgIT0gbnVsbCkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICh0YmkudGVzdERhdGFzb3VyY2VJbmplY3Rpb24oKS50cmltKCkubGVuZ3RoKCk9PTApKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChzdGF0dXMpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9lbS1yZXNvdXJjZS1pbmplY3Rpb24vc2VydmxldC90ZXN0L3V0aWwvSlBBUmVzb3VyY2VQcm9kdWNlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi9zZXJ2bGV0L3Rlc3QvdXRpbC9KUEFSZXNvdXJjZVByb2R1Y2VyLmphdmEKaW5kZXggOTg0YjQ3ZC4uM2EwOWE3YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi9zZXJ2bGV0L3Rlc3QvdXRpbC9KUEFSZXNvdXJjZVByb2R1Y2VyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2VtLXJlc291cmNlLWluamVjdGlvbi9zZXJ2bGV0L3Rlc3QvdXRpbC9KUEFSZXNvdXJjZVByb2R1Y2VyLmphdmEKQEAgLTI2LDcgKzI2LDcgQEAKIEBTaW5nbGV0b24KIHB1YmxpYyBjbGFzcyBKUEFSZXNvdXJjZVByb2R1Y2VyIHsKICAgICBAUHJvZHVjZXMgQFBlcnNpc3RlbmNlQ29udGV4dCh1bml0TmFtZT0icHUxIikKLSAgICAvL0BUZXN0RGF0YWJhc2UgCisgICAgLy9AVGVzdERhdGFiYXNlCiAgICAgRW50aXR5TWFuYWdlciBjdXN0b21lckRhdGFiYXNlUGVyc2lzdGVuY2VVbml0OwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZS10eXBlc2FmZS1pbmplY3Rpb24vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlLXR5cGVzYWZlLWluamVjdGlvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDM1NDNlNGMuLjcyMTc2ZDYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlLXR5cGVzYWZlLWluamVjdGlvbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlLXR5cGVzYWZlLWluamVjdGlvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXR5cGVzYWZlLWphdmFlZS1yZXNvdXJjZS1pbmplY3Rpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlLXR5cGVzYWZlLWluamVjdGlvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZS10eXBlc2FmZS1pbmplY3Rpb24vYnVpbGQueG1sCmluZGV4IDI5NWQwODYuLmViNzkwYmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlLXR5cGVzYWZlLWluamVjdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2UtdHlwZXNhZmUtaW5qZWN0aW9uL2J1aWxkLnhtbApAQCAtMzMsNzUgKzMzLDc1IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQsY3JlYXRlLXJlc291cmNlcyxkZXBsb3kscnVuLHVuZGVwbG95LGRlbGV0ZS1yZXNvdXJjZXMiIC8+CiAKLQk8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIiAvPgotCQk8ZGVsZXRlPgotCQkJPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIgLz4KLQkJCTxmaWxlc2V0IGRpcj0iY2xpZW50L3Rlc3QvY2xpZW50IiBpbmNsdWRlcz0iKi5jbGFzcyIgLz4KLQkJPC9kZWxldGU+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIgLz4KKyAgICAgICAgPGRlbGV0ZT4KKyAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiIC8+CisgICAgICAgICAgICA8ZmlsZXNldCBkaXI9ImNsaWVudC90ZXN0L2NsaWVudCIgaW5jbHVkZXM9IiouY2xhc3MiIC8+CisgICAgICAgIDwvZGVsZXRlPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgotCQkJPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiIC8+Ci0JCTwvYW50Y2FsbD4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIgLz4KKyAgICAgICAgPC9hbnRjYWxsPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiIC8+Ci0JCTxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgotCQkJPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIgLz4KLQkJCTxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgotCQk8L2FudGNhbGw+CisgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiIC8+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIgLz4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgorICAgICAgICA8L2FudGNhbGw+CiAKLQkJPGphdmFjIHNyY2Rpcj0iY2xpZW50IiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiIGluY2x1ZGVzPSJ0ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEiIC8+CisgICAgICAgIDxqYXZhYyBzcmNkaXI9ImNsaWVudCIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIiBpbmNsdWRlcz0idGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIiAvPgogCi0JPC90YXJnZXQ+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgorICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKLQk8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIiAvPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iIC8+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1jb25ucG9vbC1jb21tb24iPgotCQkJPHBhcmFtIG5hbWU9ImpkYmMuY29ubnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtZGV2LXRlc3QtcG9vbCIgLz4KLQkJPC9hbnRjYWxsPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+Ci0JCQk8cGFyYW0gbmFtZT0iamRiYy5jb25ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1kZXYtdGVzdC1wb29sIiAvPgotCQkJPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvamRiYy1kZXYtdGVzdC1yZXNvdXJjZSIgLz4KLQkJPC9hbnRjYWxsPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1kZXYtdGVzdC1wb29sIiAvPgorICAgICAgICA8L2FudGNhbGw+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbm5wb29sLm5hbWUiIHZhbHVlPSJqZGJjLWRldi10ZXN0LXBvb2wiIC8+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9qZGJjLWRldi10ZXN0LXJlc291cmNlIiAvPgorICAgICAgICA8L2FudGNhbGw+CisgICAgPC90YXJnZXQ+CiAKIAotCTx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxqYXZhIGNsYXNzbmFtZT0idGVzdC5jbGllbnQuV2ViVGVzdCI+Ci0JCQk8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iIC8+Ci0JCQk8YXJnIHZhbHVlPSIke2h0dHAucG9ydH0iIC8+Ci0JCQk8YXJnIHZhbHVlPSIke2NvbnRleHRyb290fSIgLz4KLQkJCTxjbGFzc3BhdGg+Ci0JCQkJPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIiAvPgotCQkJCTxwYXRoZWxlbWVudCBsb2NhdGlvbj0iY2xpZW50IiAvPgotCQkJPC9jbGFzc3BhdGg+Ci0JCTwvamF2YT4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8amF2YSBjbGFzc25hbWU9InRlc3QuY2xpZW50LldlYlRlc3QiPgorICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9IiAvPgorICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLnBvcnR9IiAvPgorICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtjb250ZXh0cm9vdH0iIC8+CisgICAgICAgICAgICA8Y2xhc3NwYXRoPgorICAgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIgLz4KKyAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImNsaWVudCIgLz4KKyAgICAgICAgICAgIDwvY2xhc3NwYXRoPgorICAgICAgICA8L2phdmE+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIgLz4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIgLz4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+Ci0JCQk8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9qZGJjLWRldi10ZXN0LXJlc291cmNlIiAvPgotCQk8L2FudGNhbGw+CisgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2pkYmMtZGV2LXRlc3QtcmVzb3VyY2UiIC8+CisgICAgICAgIDwvYW50Y2FsbD4KIAotCQk8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiI+Ci0JCQk8cGFyYW0gbmFtZT0iamRiYy5jb25ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1kZXYtdGVzdC1wb29sIiAvPgotCQk8L2FudGNhbGw+Ci0JPC90YXJnZXQ+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbm5wb29sLm5hbWUiIHZhbHVlPSJqZGJjLWRldi10ZXN0LXBvb2wiIC8+CisgICAgICAgIDwvYW50Y2FsbD4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCQk8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIgLz4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iIC8+CisgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZS10eXBlc2FmZS1pbmplY3Rpb24vc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RCZWFuSW50ZXJmYWNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZS10eXBlc2FmZS1pbmplY3Rpb24vc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RCZWFuSW50ZXJmYWNlLmphdmEKaW5kZXggMjllMTM3YS4uZTViZTRkMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2UtdHlwZXNhZmUtaW5qZWN0aW9uL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0QmVhbkludGVyZmFjZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlLXR5cGVzYWZlLWluamVjdGlvbi9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEJlYW5JbnRlcmZhY2UuamF2YQpAQCAtMTksNiArMTksNiBAQAogcHVibGljIGludGVyZmFjZSBUZXN0QmVhbkludGVyZmFjZSB7CiAgICAgcHVibGljIHZvaWQgbTEoKTsKICAgICBwdWJsaWMgdm9pZCBtMigpOwotICAgIAorCiAgICAgcHVibGljIFN0cmluZyB0ZXN0RGF0YXNvdXJjZUluamVjdGlvbigpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2UtdHlwZXNhZmUtaW5qZWN0aW9uL3NlcnZsZXQvdGVzdC9iZWFucy9ub25tb2NrL1Rlc3RCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZS10eXBlc2FmZS1pbmplY3Rpb24vc2VydmxldC90ZXN0L2JlYW5zL25vbm1vY2svVGVzdEJlYW4uamF2YQppbmRleCAzMzhhM2JmLi5iNDZkZDI3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZS10eXBlc2FmZS1pbmplY3Rpb24vc2VydmxldC90ZXN0L2JlYW5zL25vbm1vY2svVGVzdEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZS10eXBlc2FmZS1pbmplY3Rpb24vc2VydmxldC90ZXN0L2JlYW5zL25vbm1vY2svVGVzdEJlYW4uamF2YQpAQCAtMjksOCArMjksOCBAQAogQFByZWZlcnJlZAogcHVibGljIGNsYXNzIFRlc3RCZWFuIGltcGxlbWVudHMgVGVzdEJlYW5JbnRlcmZhY2V7CiAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIHRlc3RCZWFuSW52b2tlZCA9IGZhbHNlOwotICAgIAotICAgIEBJbmplY3QgQFRlc3REYXRhYmFzZSAKKworICAgIEBJbmplY3QgQFRlc3REYXRhYmFzZQogICAgIERhdGFTb3VyY2UgZHM7CiAKICAgICBAT3ZlcnJpZGUKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlLXR5cGVzYWZlLWluamVjdGlvbi9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9EYXRhYmFzZU1hbmFnZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlLXR5cGVzYWZlLWluamVjdGlvbi9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9EYXRhYmFzZU1hbmFnZXIuamF2YQppbmRleCA2YzU5NWNkLi4yNTdmZWFhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZS10eXBlc2FmZS1pbmplY3Rpb24vc2VydmxldC90ZXN0L3NlcnZsZXQvRGF0YWJhc2VNYW5hZ2VyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2UtdHlwZXNhZmUtaW5qZWN0aW9uL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L0RhdGFiYXNlTWFuYWdlci5qYXZhCkBAIC0yMyw5ICsyMyw5IEBACiBpbXBvcnQgdGVzdC5iZWFucy5hcnRpZmFjdHMuVGVzdERhdGFiYXNlOwogCiBwdWJsaWMgY2xhc3MgRGF0YWJhc2VNYW5hZ2VyIHsKLSAgICBAUHJvZHVjZXMgCisgICAgQFByb2R1Y2VzCiAgICAgQFRlc3REYXRhYmFzZQotICAgIEBSZXNvdXJjZShuYW1lID0gImpkYmMvamRiYy1kZXYtdGVzdC1yZXNvdXJjZSIsIAorICAgIEBSZXNvdXJjZShuYW1lID0gImpkYmMvamRiYy1kZXYtdGVzdC1yZXNvdXJjZSIsCiAgICAgICAgICAgICBtYXBwZWROYW1lID0gImpkYmMvamRiYy1kZXYtdGVzdC1yZXNvdXJjZSIpCiAgICAgRGF0YVNvdXJjZSBkczsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2UtdHlwZXNhZmUtaW5qZWN0aW9uL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1R5cGVzYWZlSmF2YUVFUmVzb3VyY2VJbmplY3Rpb25UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2UtdHlwZXNhZmUtaW5qZWN0aW9uL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1R5cGVzYWZlSmF2YUVFUmVzb3VyY2VJbmplY3Rpb25UZXN0U2VydmxldC5qYXZhCmluZGV4IGQyODI3M2MuLjhiZDMyZDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlLXR5cGVzYWZlLWluamVjdGlvbi9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9UeXBlc2FmZUphdmFFRVJlc291cmNlSW5qZWN0aW9uVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZS10eXBlc2FmZS1pbmplY3Rpb24vc2VydmxldC90ZXN0L3NlcnZsZXQvVHlwZXNhZmVKYXZhRUVSZXNvdXJjZUluamVjdGlvblRlc3RTZXJ2bGV0LmphdmEKQEAgLTM2LDI3ICszNiwyNyBAQAogICAgIEBJbmplY3QKICAgICBAUHJlZmVycmVkCiAgICAgVGVzdEJlYW5JbnRlcmZhY2UgdGI7Ci0gICAgCisKICAgICBASW5qZWN0IEBUZXN0RGF0YWJhc2UKICAgICBEYXRhU291cmNlIGRzOwotICAgICAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlcnZpY2UoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpCiAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24gewogCiAgICAgICAgIFByaW50V3JpdGVyIHdyaXRlciA9IHJlcy5nZXRXcml0ZXIoKTsKICAgICAgICAgd3JpdGVyLndyaXRlKCJIZWxsbyBmcm9tIFNlcnZsZXQgMy4wLiIpOwogICAgICAgICBTdHJpbmcgbXNnID0gIiI7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChkcyA9PSBudWxsKQogICAgICAgICAgICAgbXNnICs9ICJ0eXBlc2FmZSBJbmplY3Rpb24gb2YgZGF0YXNvdXJjZSBpbnRvIGEgc2VydmxldCBmYWlsZWQiOwogCiAgICAgICAgIGlmICh0YiA9PSBudWxsKQogICAgICAgICAgICAgbXNnICs9ICJJbmplY3Rpb24gb2YgcmVxdWVzdCBzY29wZWQgYmVhbiBmYWlsZWQiOwotICAgICAgICAKKwogICAgICAgICBpZiAodGIudGVzdERhdGFzb3VyY2VJbmplY3Rpb24oKS50cmltKCkubGVuZ3RoKCkgIT0gMCkKICAgICAgICAgICAgIG1zZyArPSB0Yi50ZXN0RGF0YXNvdXJjZUluamVjdGlvbigpOwogCi0gICAgICAgIAorCiAKICAgICAgICAgd3JpdGVyLndyaXRlKG1zZyArICJcbiIpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qbXMtcmVzb3VyY2UtcHJvZHVjZXItZmllbGQtaW4tbGlicmFyeS1qYXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qbXMtcmVzb3VyY2UtcHJvZHVjZXItZmllbGQtaW4tbGlicmFyeS1qYXIvYnVpbGQucHJvcGVydGllcwppbmRleCA0ODA2MTQ5Li43MzMxY2NhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvam1zLXJlc291cmNlLXByb2R1Y2VyLWZpZWxkLWluLWxpYnJhcnktamFyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2ptcy1yZXNvdXJjZS1wcm9kdWNlci1maWVsZC1pbi1saWJyYXJ5LWphci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWptcy1yZXNvdXJjZS1pbmplY3Rpb24taW4tbGlicmFyeS1iZWFuLWFyY2hpdmUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qbXMtcmVzb3VyY2UtcHJvZHVjZXItZmllbGQtaW4tbGlicmFyeS1qYXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2ptcy1yZXNvdXJjZS1wcm9kdWNlci1maWVsZC1pbi1saWJyYXJ5LWphci9idWlsZC54bWwKaW5kZXggOGRmMmMyNC4uNjBkNDI0MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2ptcy1yZXNvdXJjZS1wcm9kdWNlci1maWVsZC1pbi1saWJyYXJ5LWphci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2ptcy1yZXNvdXJjZS1wcm9kdWNlci1maWVsZC1pbi1saWJyYXJ5LWphci9idWlsZC54bWwKQEAgLTMzLDE1ICszMywxNSBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLGNyZWF0ZS1yZXNvdXJjZXMsZGVwbG95LHJ1bix1bmRlcGxveSxkZWxldGUtcmVzb3VyY2VzIiAvPgogCi0JPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIgLz4KLQkJPGRlbGV0ZT4KLQkJCTxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiIC8+Ci0JCQk8ZmlsZXNldCBkaXI9ImNsaWVudC90ZXN0L2NsaWVudCIgaW5jbHVkZXM9IiouY2xhc3MiIC8+Ci0JCTwvZGVsZXRlPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iIC8+CisgICAgICAgIDxkZWxldGU+CisgICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIiAvPgorICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSJjbGllbnQvdGVzdC9jbGllbnQiIGluY2x1ZGVzPSIqLmNsYXNzIiAvPgorICAgICAgICA8L2RlbGV0ZT4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgorICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8IS0tIGNvbXBpbGUgYW5kIGNyZWF0ZSBsaWJyYXJ5IGphciAtLT4KICAgICAgICAgPG1rZGlyIGRpcj0idG1wIi8+CiAgICAgICAgIDxta2RpciBkaXI9InRtcC9NRVRBLUlORiIvPgpAQCAtNTcsMzQgKzU3LDM0IEBACiAgICAgICAgIDwvamFyPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJjcmVhdGVkIGxpYnJhcnkgamFyIGF0IGxpYi9wcm9kdWNlci1saWJyYXJ5LmphciIvPgogCi0JCTxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgotCQkJPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiIC8+Ci0JCTwvYW50Y2FsbD4KLQk8L3RhcmdldD4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIgLz4KKyAgICAgICAgPC9hbnRjYWxsPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiIC8+Ci0JCTxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgotCQkJPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIgLz4KLQkJCTxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgotCQk8L2FudGNhbGw+CisgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiIC8+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIgLz4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgorICAgICAgICA8L2FudGNhbGw+CiAKLQkJPGphdmFjIHNyY2Rpcj0iY2xpZW50IiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiIGluY2x1ZGVzPSJ0ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEiIC8+CisgICAgICAgIDxqYXZhYyBzcmNkaXI9ImNsaWVudCIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIiBpbmNsdWRlcz0idGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIiAvPgogCi0JPC90YXJnZXQ+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgorICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKLQk8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIiAvPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iIC8+CisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImNyZWF0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtOTIsMjQgKzkyLDI0IEBACiAgICAgPC90YXJnZXQ+CiAKIAotCTx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxqYXZhIGNsYXNzbmFtZT0idGVzdC5jbGllbnQuV2ViVGVzdCI+Ci0JCQk8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iIC8+Ci0JCQk8YXJnIHZhbHVlPSIke2h0dHAucG9ydH0iIC8+Ci0JCQk8YXJnIHZhbHVlPSIke2NvbnRleHRyb290fSIgLz4KLQkJCTxjbGFzc3BhdGg+Ci0JCQkJPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIiAvPgotCQkJCTxwYXRoZWxlbWVudCBsb2NhdGlvbj0iY2xpZW50IiAvPgotCQkJPC9jbGFzc3BhdGg+Ci0JCTwvamF2YT4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8amF2YSBjbGFzc25hbWU9InRlc3QuY2xpZW50LldlYlRlc3QiPgorICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9IiAvPgorICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLnBvcnR9IiAvPgorICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtjb250ZXh0cm9vdH0iIC8+CisgICAgICAgICAgICA8Y2xhc3NwYXRoPgorICAgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIgLz4KKyAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImNsaWVudCIgLz4KKyAgICAgICAgICAgIDwvY2xhc3NwYXRoPgorICAgICAgICA8L2phdmE+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIgLz4KKyAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIgLz4KICAgICAgICAgPGRlbGV0ZSBmaWxlPSJsaWIvcHJvZHVjZXItbGlicmFyeS5qYXIiLz4KLQk8L3RhcmdldD4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCQk8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIgLz4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iIC8+CisgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvam1zLXJlc291cmNlLXByb2R1Y2VyLWZpZWxkLWluLWxpYnJhcnktamFyL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0QmVhbkludGVyZmFjZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2ptcy1yZXNvdXJjZS1wcm9kdWNlci1maWVsZC1pbi1saWJyYXJ5LWphci9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEJlYW5JbnRlcmZhY2UuamF2YQppbmRleCAyOWUxMzdhLi5lNWJlNGQzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvam1zLXJlc291cmNlLXByb2R1Y2VyLWZpZWxkLWluLWxpYnJhcnktamFyL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0QmVhbkludGVyZmFjZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qbXMtcmVzb3VyY2UtcHJvZHVjZXItZmllbGQtaW4tbGlicmFyeS1qYXIvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RCZWFuSW50ZXJmYWNlLmphdmEKQEAgLTE5LDYgKzE5LDYgQEAKIHB1YmxpYyBpbnRlcmZhY2UgVGVzdEJlYW5JbnRlcmZhY2UgewogICAgIHB1YmxpYyB2b2lkIG0xKCk7CiAgICAgcHVibGljIHZvaWQgbTIoKTsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgdGVzdERhdGFzb3VyY2VJbmplY3Rpb24oKTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qbXMtcmVzb3VyY2UtcHJvZHVjZXItZmllbGQtaW4tbGlicmFyeS1qYXIvc2VydmxldC90ZXN0L2JlYW5zL25vbm1vY2svVGVzdEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qbXMtcmVzb3VyY2UtcHJvZHVjZXItZmllbGQtaW4tbGlicmFyeS1qYXIvc2VydmxldC90ZXN0L2JlYW5zL25vbm1vY2svVGVzdEJlYW4uamF2YQppbmRleCA1ZGFhZjM0Li5kMzBlMWMxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvam1zLXJlc291cmNlLXByb2R1Y2VyLWZpZWxkLWluLWxpYnJhcnktamFyL3NlcnZsZXQvdGVzdC9iZWFucy9ub25tb2NrL1Rlc3RCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2ptcy1yZXNvdXJjZS1wcm9kdWNlci1maWVsZC1pbi1saWJyYXJ5LWphci9zZXJ2bGV0L3Rlc3QvYmVhbnMvbm9ubW9jay9UZXN0QmVhbi5qYXZhCkBAIC0yOCw4ICsyOCw4IEBACiBAUHJlZmVycmVkCiBwdWJsaWMgY2xhc3MgVGVzdEJlYW4gaW1wbGVtZW50cyBUZXN0QmVhbkludGVyZmFjZXsKICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gdGVzdEJlYW5JbnZva2VkID0gZmFsc2U7Ci0gICAgCi0gICAgQEluamVjdCAKKworICAgIEBJbmplY3QKICAgICBRdWV1ZSBkczsKIAogICAgIEBPdmVycmlkZQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2ptcy1yZXNvdXJjZS1wcm9kdWNlci1maWVsZC1pbi1saWJyYXJ5LWphci9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9KTVNSZXNvdXJjZUluamVjdGlvbkluTGlicmFyeUJlYW5BcmNoaXZlVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qbXMtcmVzb3VyY2UtcHJvZHVjZXItZmllbGQtaW4tbGlicmFyeS1qYXIvc2VydmxldC90ZXN0L3NlcnZsZXQvSk1TUmVzb3VyY2VJbmplY3Rpb25JbkxpYnJhcnlCZWFuQXJjaGl2ZVRlc3RTZXJ2bGV0LmphdmEKaW5kZXggNjNmZjUyZC4uMDBkYTIxNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2ptcy1yZXNvdXJjZS1wcm9kdWNlci1maWVsZC1pbi1saWJyYXJ5LWphci9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9KTVNSZXNvdXJjZUluamVjdGlvbkluTGlicmFyeUJlYW5BcmNoaXZlVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvam1zLXJlc291cmNlLXByb2R1Y2VyLWZpZWxkLWluLWxpYnJhcnktamFyL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L0pNU1Jlc291cmNlSW5qZWN0aW9uSW5MaWJyYXJ5QmVhbkFyY2hpdmVUZXN0U2VydmxldC5qYXZhCkBAIC0zNiwyOSArMzYsMjkgQEAKICAgICBASW5qZWN0CiAgICAgQFByZWZlcnJlZAogICAgIFRlc3RCZWFuSW50ZXJmYWNlIHRiOwotICAgIAorCiAgICAgQEluamVjdAogICAgIHByaXZhdGUgUXVldWUgcXVldWU7CiAKICAgICBASW5qZWN0CiAgICAgcHJpdmF0ZSBTZXNzaW9uIHNlc3Npb247Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXJ2aWNlKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzKQogICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uIHsKIAogICAgICAgICBQcmludFdyaXRlciB3cml0ZXIgPSByZXMuZ2V0V3JpdGVyKCk7CiAgICAgICAgIHdyaXRlci53cml0ZSgiSGVsbG8gZnJvbSBTZXJ2bGV0IDMuMC4iKTsKICAgICAgICAgU3RyaW5nIG1zZyA9ICIiOwotICAgICAgICAKKwogICAgICAgICBpZiAocXVldWUgPT0gbnVsbCkKICAgICAgICAgICAgIG1zZyArPSAidHlwZXNhZmUgSW5qZWN0aW9uIG9mIHF1ZXVlIGludG8gYSBzZXJ2bGV0IGZhaWxlZCI7CiAKICAgICAgICAgaWYgKHNlc3Npb24gPT0gbnVsbCkKICAgICAgICAgICAgIG1zZyArPSAidHlwZXNhZmUgSW5qZWN0aW9uIG9mIFNlc3Npb24gaW50byBhIHNlcnZsZXQgZmFpbGVkIjsKLSAgICAgICAgCisKICAgICAgICAgaWYgKHRiID09IG51bGwpCiAgICAgICAgICAgICBtc2cgKz0gIkluamVjdGlvbiBvZiByZXF1ZXN0IHNjb3BlZCBiZWFuIGZhaWxlZCI7Ci0gICAgICAgIAorCiAgICAgICAgIGlmICh0Yi50ZXN0RGF0YXNvdXJjZUluamVjdGlvbigpLnRyaW0oKS5sZW5ndGgoKSAhPSAwKQogICAgICAgICAgICAgbXNnICs9IHRiLnRlc3REYXRhc291cmNlSW5qZWN0aW9uKCk7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qbXMtcmVzb3VyY2UtcHJvZHVjZXItZmllbGQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qbXMtcmVzb3VyY2UtcHJvZHVjZXItZmllbGQvYnVpbGQucHJvcGVydGllcwppbmRleCA2NWE2MjAzLi43NjVhNTkyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvam1zLXJlc291cmNlLXByb2R1Y2VyLWZpZWxkL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2ptcy1yZXNvdXJjZS1wcm9kdWNlci1maWVsZC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWptcy1yZXNvdXJjZS1pbmplY3Rpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qbXMtcmVzb3VyY2UtcHJvZHVjZXItZmllbGQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2ptcy1yZXNvdXJjZS1wcm9kdWNlci1maWVsZC9idWlsZC54bWwKaW5kZXggMTM4MGU2Yi4uOTY5M2RmZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2ptcy1yZXNvdXJjZS1wcm9kdWNlci1maWVsZC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2ptcy1yZXNvdXJjZS1wcm9kdWNlci1maWVsZC9idWlsZC54bWwKQEAgLTMzLDQzICszMyw0MyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLGNyZWF0ZS1yZXNvdXJjZXMsZGVwbG95LHJ1bix1bmRlcGxveSxkZWxldGUtcmVzb3VyY2VzIiAvPgogCi0JPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIgLz4KLQkJPGRlbGV0ZT4KLQkJCTxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiIC8+Ci0JCQk8ZmlsZXNldCBkaXI9ImNsaWVudC90ZXN0L2NsaWVudCIgaW5jbHVkZXM9IiouY2xhc3MiIC8+Ci0JCTwvZGVsZXRlPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iIC8+CisgICAgICAgIDxkZWxldGU+CisgICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIiAvPgorICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSJjbGllbnQvdGVzdC9jbGllbnQiIGluY2x1ZGVzPSIqLmNsYXNzIiAvPgorICAgICAgICA8L2RlbGV0ZT4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0IiAvPgotCQk8L2FudGNhbGw+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiIC8+CisgICAgICAgIDwvYW50Y2FsbD4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotCQk8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIiAvPgotCQk8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiIC8+Ci0JCQk8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KLQkJPC9hbnRjYWxsPgorICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIiAvPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiIC8+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KKyAgICAgICAgPC9hbnRjYWxsPgogCi0JCTxqYXZhYyBzcmNkaXI9ImNsaWVudCIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIiBpbmNsdWRlcz0idGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIiAvPgorICAgICAgICA8amF2YWMgc3JjZGlyPSJjbGllbnQiIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIgaW5jbHVkZXM9InRlc3QvY2xpZW50L1dlYlRlc3QuamF2YSIgLz4KIAotCTwvdGFyZ2V0PgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KKyAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCi0JPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIgLz4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIiAvPgorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJjcmVhdGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTc3LDIzICs3NywyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAKLQk8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8amF2YSBjbGFzc25hbWU9InRlc3QuY2xpZW50LldlYlRlc3QiPgotCQkJPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9IiAvPgotCQkJPGFyZyB2YWx1ZT0iJHtodHRwLnBvcnR9IiAvPgotCQkJPGFyZyB2YWx1ZT0iJHtjb250ZXh0cm9vdH0iIC8+Ci0JCQk8Y2xhc3NwYXRoPgotCQkJCTxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIgLz4KLQkJCQk8cGF0aGVsZW1lbnQgbG9jYXRpb249ImNsaWVudCIgLz4KLQkJCTwvY2xhc3NwYXRoPgotCQk8L2phdmE+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJ0ZXN0LmNsaWVudC5XZWJUZXN0Ij4KKyAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIgLz4KKyAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5wb3J0fSIgLz4KKyAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7Y29udGV4dHJvb3R9IiAvPgorICAgICAgICAgICAgPGNsYXNzcGF0aD4KKyAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiIC8+CisgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJjbGllbnQiIC8+CisgICAgICAgICAgICA8L2NsYXNzcGF0aD4KKyAgICAgICAgPC9qYXZhPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iIC8+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iIC8+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iIC8+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIiAvPgorICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2ptcy1yZXNvdXJjZS1wcm9kdWNlci1maWVsZC9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEJlYW5JbnRlcmZhY2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qbXMtcmVzb3VyY2UtcHJvZHVjZXItZmllbGQvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RCZWFuSW50ZXJmYWNlLmphdmEKaW5kZXggMjllMTM3YS4uZTViZTRkMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2ptcy1yZXNvdXJjZS1wcm9kdWNlci1maWVsZC9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEJlYW5JbnRlcmZhY2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvam1zLXJlc291cmNlLXByb2R1Y2VyLWZpZWxkL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0QmVhbkludGVyZmFjZS5qYXZhCkBAIC0xOSw2ICsxOSw2IEBACiBwdWJsaWMgaW50ZXJmYWNlIFRlc3RCZWFuSW50ZXJmYWNlIHsKICAgICBwdWJsaWMgdm9pZCBtMSgpOwogICAgIHB1YmxpYyB2b2lkIG0yKCk7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIHRlc3REYXRhc291cmNlSW5qZWN0aW9uKCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvam1zLXJlc291cmNlLXByb2R1Y2VyLWZpZWxkL3NlcnZsZXQvdGVzdC9iZWFucy9ub25tb2NrL1Rlc3RCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvam1zLXJlc291cmNlLXByb2R1Y2VyLWZpZWxkL3NlcnZsZXQvdGVzdC9iZWFucy9ub25tb2NrL1Rlc3RCZWFuLmphdmEKaW5kZXggNWRhYWYzNC4uZDMwZTFjMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2ptcy1yZXNvdXJjZS1wcm9kdWNlci1maWVsZC9zZXJ2bGV0L3Rlc3QvYmVhbnMvbm9ubW9jay9UZXN0QmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qbXMtcmVzb3VyY2UtcHJvZHVjZXItZmllbGQvc2VydmxldC90ZXN0L2JlYW5zL25vbm1vY2svVGVzdEJlYW4uamF2YQpAQCAtMjgsOCArMjgsOCBAQAogQFByZWZlcnJlZAogcHVibGljIGNsYXNzIFRlc3RCZWFuIGltcGxlbWVudHMgVGVzdEJlYW5JbnRlcmZhY2V7CiAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIHRlc3RCZWFuSW52b2tlZCA9IGZhbHNlOwotICAgIAotICAgIEBJbmplY3QgCisKKyAgICBASW5qZWN0CiAgICAgUXVldWUgZHM7CiAKICAgICBAT3ZlcnJpZGUKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qbXMtcmVzb3VyY2UtcHJvZHVjZXItZmllbGQvc2VydmxldC90ZXN0L3NlcnZsZXQvSk1TUmVzb3VyY2VJbmplY3Rpb25JbkxpYnJhcnlCZWFuQXJjaGl2ZVRlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvam1zLXJlc291cmNlLXByb2R1Y2VyLWZpZWxkL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L0pNU1Jlc291cmNlSW5qZWN0aW9uSW5MaWJyYXJ5QmVhbkFyY2hpdmVUZXN0U2VydmxldC5qYXZhCmluZGV4IDYzZmY1MmQuLjAwZGEyMTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qbXMtcmVzb3VyY2UtcHJvZHVjZXItZmllbGQvc2VydmxldC90ZXN0L3NlcnZsZXQvSk1TUmVzb3VyY2VJbmplY3Rpb25JbkxpYnJhcnlCZWFuQXJjaGl2ZVRlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2ptcy1yZXNvdXJjZS1wcm9kdWNlci1maWVsZC9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9KTVNSZXNvdXJjZUluamVjdGlvbkluTGlicmFyeUJlYW5BcmNoaXZlVGVzdFNlcnZsZXQuamF2YQpAQCAtMzYsMjkgKzM2LDI5IEBACiAgICAgQEluamVjdAogICAgIEBQcmVmZXJyZWQKICAgICBUZXN0QmVhbkludGVyZmFjZSB0YjsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBwcml2YXRlIFF1ZXVlIHF1ZXVlOwogCiAgICAgQEluamVjdAogICAgIHByaXZhdGUgU2Vzc2lvbiBzZXNzaW9uOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2VydmljZShIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlcykKICAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbiB7CiAKICAgICAgICAgUHJpbnRXcml0ZXIgd3JpdGVyID0gcmVzLmdldFdyaXRlcigpOwogICAgICAgICB3cml0ZXIud3JpdGUoIkhlbGxvIGZyb20gU2VydmxldCAzLjAuIik7CiAgICAgICAgIFN0cmluZyBtc2cgPSAiIjsKLSAgICAgICAgCisKICAgICAgICAgaWYgKHF1ZXVlID09IG51bGwpCiAgICAgICAgICAgICBtc2cgKz0gInR5cGVzYWZlIEluamVjdGlvbiBvZiBxdWV1ZSBpbnRvIGEgc2VydmxldCBmYWlsZWQiOwogCiAgICAgICAgIGlmIChzZXNzaW9uID09IG51bGwpCiAgICAgICAgICAgICBtc2cgKz0gInR5cGVzYWZlIEluamVjdGlvbiBvZiBTZXNzaW9uIGludG8gYSBzZXJ2bGV0IGZhaWxlZCI7Ci0gICAgICAgIAorCiAgICAgICAgIGlmICh0YiA9PSBudWxsKQogICAgICAgICAgICAgbXNnICs9ICJJbmplY3Rpb24gb2YgcmVxdWVzdCBzY29wZWQgYmVhbiBmYWlsZWQiOwotICAgICAgICAKKwogICAgICAgICBpZiAodGIudGVzdERhdGFzb3VyY2VJbmplY3Rpb24oKS50cmltKCkubGVuZ3RoKCkgIT0gMCkKICAgICAgICAgICAgIG1zZyArPSB0Yi50ZXN0RGF0YXNvdXJjZUluamVjdGlvbigpOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi1ub24tc2VyaWFsaXphYmxlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi1ub24tc2VyaWFsaXphYmxlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZmE3M2IzMy4uNmJlYWQ1NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24tbm9uLXNlcmlhbGl6YWJsZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLW5vbi1zZXJpYWxpemFibGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLW5vbi1zZXJpYWxpemFibGUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLW5vbi1zZXJpYWxpemFibGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24tbm9uLXNlcmlhbGl6YWJsZS9idWlsZC54bWwKaW5kZXggMjk1ZDA4Ni4uZWI3OTBiZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24tbm9uLXNlcmlhbGl6YWJsZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24tbm9uLXNlcmlhbGl6YWJsZS9idWlsZC54bWwKQEAgLTMzLDc1ICszMyw3NSBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLGNyZWF0ZS1yZXNvdXJjZXMsZGVwbG95LHJ1bix1bmRlcGxveSxkZWxldGUtcmVzb3VyY2VzIiAvPgogCi0JPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIgLz4KLQkJPGRlbGV0ZT4KLQkJCTxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiIC8+Ci0JCQk8ZmlsZXNldCBkaXI9ImNsaWVudC90ZXN0L2NsaWVudCIgaW5jbHVkZXM9IiouY2xhc3MiIC8+Ci0JCTwvZGVsZXRlPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iIC8+CisgICAgICAgIDxkZWxldGU+CisgICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIiAvPgorICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSJjbGllbnQvdGVzdC9jbGllbnQiIGluY2x1ZGVzPSIqLmNsYXNzIiAvPgorICAgICAgICA8L2RlbGV0ZT4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0IiAvPgotCQk8L2FudGNhbGw+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiIC8+CisgICAgICAgIDwvYW50Y2FsbD4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotCQk8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIiAvPgotCQk8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiIC8+Ci0JCQk8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KLQkJPC9hbnRjYWxsPgorICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIiAvPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiIC8+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KKyAgICAgICAgPC9hbnRjYWxsPgogCi0JCTxqYXZhYyBzcmNkaXI9ImNsaWVudCIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIiBpbmNsdWRlcz0idGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIiAvPgorICAgICAgICA8amF2YWMgc3JjZGlyPSJjbGllbnQiIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIgaW5jbHVkZXM9InRlc3QvY2xpZW50L1dlYlRlc3QuamF2YSIgLz4KIAotCTwvdGFyZ2V0PgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KKyAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCi0JPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIgLz4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIiAvPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJjcmVhdGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJqZGJjLmNvbm5wb29sLm5hbWUiIHZhbHVlPSJqZGJjLWRldi10ZXN0LXBvb2wiIC8+Ci0JCTwvYW50Y2FsbD4KLQkJPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgotCQkJPHBhcmFtIG5hbWU9ImpkYmMuY29ubnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtZGV2LXRlc3QtcG9vbCIgLz4KLQkJCTxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2pkYmMtZGV2LXRlc3QtcmVzb3VyY2UiIC8+Ci0JCTwvYW50Y2FsbD4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1jb25ucG9vbC1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ubnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtZGV2LXRlc3QtcG9vbCIgLz4KKyAgICAgICAgPC9hbnRjYWxsPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1kZXYtdGVzdC1wb29sIiAvPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvamRiYy1kZXYtdGVzdC1yZXNvdXJjZSIgLz4KKyAgICAgICAgPC9hbnRjYWxsPgorICAgIDwvdGFyZ2V0PgogCiAKLQk8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8amF2YSBjbGFzc25hbWU9InRlc3QuY2xpZW50LldlYlRlc3QiPgotCQkJPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9IiAvPgotCQkJPGFyZyB2YWx1ZT0iJHtodHRwLnBvcnR9IiAvPgotCQkJPGFyZyB2YWx1ZT0iJHtjb250ZXh0cm9vdH0iIC8+Ci0JCQk8Y2xhc3NwYXRoPgotCQkJCTxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIgLz4KLQkJCQk8cGF0aGVsZW1lbnQgbG9jYXRpb249ImNsaWVudCIgLz4KLQkJCTwvY2xhc3NwYXRoPgotCQk8L2phdmE+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJ0ZXN0LmNsaWVudC5XZWJUZXN0Ij4KKyAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIgLz4KKyAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5wb3J0fSIgLz4KKyAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7Y29udGV4dHJvb3R9IiAvPgorICAgICAgICAgICAgPGNsYXNzcGF0aD4KKyAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiIC8+CisgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJjbGllbnQiIC8+CisgICAgICAgICAgICA8L2NsYXNzcGF0aD4KKyAgICAgICAgPC9qYXZhPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iIC8+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iIC8+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgotCQkJPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvamRiYy1kZXYtdGVzdC1yZXNvdXJjZSIgLz4KLQkJPC9hbnRjYWxsPgorICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9qZGJjLWRldi10ZXN0LXJlc291cmNlIiAvPgorICAgICAgICA8L2FudGNhbGw+CiAKLQkJPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1jb25ucG9vbC1jb21tb24iPgotCQkJPHBhcmFtIG5hbWU9ImpkYmMuY29ubnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtZGV2LXRlc3QtcG9vbCIgLz4KLQkJPC9hbnRjYWxsPgotCTwvdGFyZ2V0PgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1kZXYtdGVzdC1wb29sIiAvPgorICAgICAgICA8L2FudGNhbGw+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iIC8+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIiAvPgorICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24tbm9uLXNlcmlhbGl6YWJsZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEJlYW5JbnRlcmZhY2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLW5vbi1zZXJpYWxpemFibGUvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RCZWFuSW50ZXJmYWNlLmphdmEKaW5kZXggMjllMTM3YS4uZTViZTRkMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24tbm9uLXNlcmlhbGl6YWJsZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEJlYW5JbnRlcmZhY2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi1ub24tc2VyaWFsaXphYmxlL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0QmVhbkludGVyZmFjZS5qYXZhCkBAIC0xOSw2ICsxOSw2IEBACiBwdWJsaWMgaW50ZXJmYWNlIFRlc3RCZWFuSW50ZXJmYWNlIHsKICAgICBwdWJsaWMgdm9pZCBtMSgpOwogICAgIHB1YmxpYyB2b2lkIG0yKCk7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIHRlc3REYXRhc291cmNlSW5qZWN0aW9uKCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi1ub24tc2VyaWFsaXphYmxlL3NlcnZsZXQvdGVzdC9iZWFucy9ub25tb2NrL1Rlc3RCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi1ub24tc2VyaWFsaXphYmxlL3NlcnZsZXQvdGVzdC9iZWFucy9ub25tb2NrL1Rlc3RCZWFuLmphdmEKaW5kZXggNjAwOWJlNS4uMDc2NTVkZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24tbm9uLXNlcmlhbGl6YWJsZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvbm9ubW9jay9UZXN0QmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLW5vbi1zZXJpYWxpemFibGUvc2VydmxldC90ZXN0L2JlYW5zL25vbm1vY2svVGVzdEJlYW4uamF2YQpAQCAtMzIsMTEgKzMyLDExIEBACiBAUHJlZmVycmVkCiBwdWJsaWMgY2xhc3MgVGVzdEJlYW4gaW1wbGVtZW50cyBUZXN0QmVhbkludGVyZmFjZSwgU2VyaWFsaXphYmxlewogICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiB0ZXN0QmVhbkludm9rZWQgPSBmYWxzZTsKLSAgICAKLSAgICBASW5qZWN0IEBUZXN0RGF0YWJhc2UgCisKKyAgICBASW5qZWN0IEBUZXN0RGF0YWJhc2UKICAgICBFbnRpdHlNYW5hZ2VyRmFjdG9yeSBlbWY7CiAKLQkvL0luamVjdCBhIG5vbi1zZXJpYWxpemFibGUgcmVzb3VyY2UKKyAgICAvL0luamVjdCBhIG5vbi1zZXJpYWxpemFibGUgcmVzb3VyY2UKICAgICBASW5qZWN0IEBUZXN0RGF0YWJhc2UKICAgICBFbnRpdHlNYW5hZ2VyIGVtOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi1ub24tc2VyaWFsaXphYmxlL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L0pQQVJlc291cmNlSW5qZWN0aW9uU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24tbm9uLXNlcmlhbGl6YWJsZS9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9KUEFSZXNvdXJjZUluamVjdGlvblNlcnZsZXQuamF2YQppbmRleCAzMjQ3NzUwLi45Yjg0NzE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi1ub24tc2VyaWFsaXphYmxlL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L0pQQVJlc291cmNlSW5qZWN0aW9uU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLW5vbi1zZXJpYWxpemFibGUvc2VydmxldC90ZXN0L3NlcnZsZXQvSlBBUmVzb3VyY2VJbmplY3Rpb25TZXJ2bGV0LmphdmEKQEAgLTQ4LDcgKzQ4LDcgQEAKIAogICAgIHByaXZhdGUgQFJlc291cmNlCiAgICAgVXNlclRyYW5zYWN0aW9uIHV0eDsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBAUHJlZmVycmVkCiAgICAgVGVzdEJlYW5JbnRlcmZhY2UgdGJpOwpAQCAtNjAsMTEgKzYwLDExIEBACiAgICAgICAgIHdyaXRlci53cml0ZSgiSGVsbG8gZnJvbSBTZXJ2bGV0IDMuMC4iKTsKICAgICAgICAgU3RyaW5nIG1zZyA9ICIiOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkpQQVJlc291cmNlSW5qZWN0aW9uU2VydmxldDo6QFBlcnNpc3RlbmNlVW5pdCAiICsKLSAgICAgICAgCQkiQ0RJIEVudGl0eU1hbmFnZXJGYWN0b3J5PSIgKyBlbWYxKTsKKyAgICAgICAgICAgICAgICAiQ0RJIEVudGl0eU1hbmFnZXJGYWN0b3J5PSIgKyBlbWYxKTsKIAogICAgICAgICBFbnRpdHlNYW5hZ2VyIGVtID0gZW1mMS5jcmVhdGVFbnRpdHlNYW5hZ2VyKCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSlBBUmVzb3VyY2VJbmplY3Rpb25TZXJ2bGV0OjpjcmVhdGVFTSIgKwotICAgICAgICAJCSJFbnRpdHlNYW5hZ2VyPSIgKyBlbSk7CisgICAgICAgICAgICAgICAgIkVudGl0eU1hbmFnZXI9IiArIGVtKTsKICAgICAgICAgU3RyaW5nIHRlc3RjYXNlID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoInRlc3RjYXNlIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidGVzdGNhc2U9IiArIHRlc3RjYXNlKTsKIApAQCAtNzgsNyArNzgsNyBAQAogICAgICAgICAgICAgfSBlbHNlIGlmICgibGxxdWVyeSIuZXF1YWxzKHRlc3RjYXNlKSkgewogICAgICAgICAgICAgICAgIHN0YXR1cyA9IGp0LmxhenlMb2FkaW5nQnlRdWVyeSgiQ2FybGEiKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoImxsaW5qIi5lcXVhbHModGVzdGNhc2UpKXsKLSAgICAgICAgICAgICAgICBzdGF0dXMgPSAoKHRiaSAhPSBudWxsKSAmJiAKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSAoKHRiaSAhPSBudWxsKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgKHRiaS50ZXN0RGF0YXNvdXJjZUluamVjdGlvbigpLnRyaW0oKS5sZW5ndGgoKT09MCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHN0YXR1cykgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24tbm9uLXNlcmlhbGl6YWJsZS9zZXJ2bGV0L3Rlc3QvdXRpbC9KUEFSZXNvdXJjZVByb2R1Y2VyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi1ub24tc2VyaWFsaXphYmxlL3NlcnZsZXQvdGVzdC91dGlsL0pQQVJlc291cmNlUHJvZHVjZXIuamF2YQppbmRleCA5OTE3YWNhLi41N2I0MjE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi1ub24tc2VyaWFsaXphYmxlL3NlcnZsZXQvdGVzdC91dGlsL0pQQVJlc291cmNlUHJvZHVjZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi1ub24tc2VyaWFsaXphYmxlL3NlcnZsZXQvdGVzdC91dGlsL0pQQVJlc291cmNlUHJvZHVjZXIuamF2YQpAQCAtMjgsMTAgKzI4LDEwIEBACiBAU2luZ2xldG9uCiBwdWJsaWMgY2xhc3MgSlBBUmVzb3VyY2VQcm9kdWNlciB7CiAgICAgQFByb2R1Y2VzIEBQZXJzaXN0ZW5jZVVuaXQodW5pdE5hbWU9InB1MiIpCi0gICAgQFRlc3REYXRhYmFzZSAKKyAgICBAVGVzdERhdGFiYXNlCiAgICAgRW50aXR5TWFuYWdlckZhY3RvcnkgY3VzdG9tZXJEYXRhYmFzZVBlcnNpc3RlbmNlVW5pdDsKIAogICAgIEBQcm9kdWNlcyBAUGVyc2lzdGVuY2VDb250ZXh0KHVuaXROYW1lPSJwdTIiKQotICAgIEBUZXN0RGF0YWJhc2UgCisgICAgQFRlc3REYXRhYmFzZQogICAgIEVudGl0eU1hbmFnZXIgY3VzdG9tZXJEYXRhYmFzZVBlcnNpc3RlbmNlQ29udGV4dDsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLXBhc3NpdmF0aW5nLXNjb3BlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi1wYXNzaXZhdGluZy1zY29wZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDg3YWYxZWIuLjA5Y2UyYjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLXBhc3NpdmF0aW5nLXNjb3BlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24tcGFzc2l2YXRpbmctc2NvcGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLXBhc3NpdmF0aW5nLXNjb3BlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi1wYXNzaXZhdGluZy1zY29wZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi1wYXNzaXZhdGluZy1zY29wZS9idWlsZC54bWwKaW5kZXggMjk1ZDA4Ni4uZWI3OTBiZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24tcGFzc2l2YXRpbmctc2NvcGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLXBhc3NpdmF0aW5nLXNjb3BlL2J1aWxkLnhtbApAQCAtMzMsNzUgKzMzLDc1IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQsY3JlYXRlLXJlc291cmNlcyxkZXBsb3kscnVuLHVuZGVwbG95LGRlbGV0ZS1yZXNvdXJjZXMiIC8+CiAKLQk8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIiAvPgotCQk8ZGVsZXRlPgotCQkJPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIgLz4KLQkJCTxmaWxlc2V0IGRpcj0iY2xpZW50L3Rlc3QvY2xpZW50IiBpbmNsdWRlcz0iKi5jbGFzcyIgLz4KLQkJPC9kZWxldGU+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIgLz4KKyAgICAgICAgPGRlbGV0ZT4KKyAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiIC8+CisgICAgICAgICAgICA8ZmlsZXNldCBkaXI9ImNsaWVudC90ZXN0L2NsaWVudCIgaW5jbHVkZXM9IiouY2xhc3MiIC8+CisgICAgICAgIDwvZGVsZXRlPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgotCQkJPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiIC8+Ci0JCTwvYW50Y2FsbD4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIgLz4KKyAgICAgICAgPC9hbnRjYWxsPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiIC8+Ci0JCTxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgotCQkJPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIgLz4KLQkJCTxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgotCQk8L2FudGNhbGw+CisgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiIC8+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIgLz4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgorICAgICAgICA8L2FudGNhbGw+CiAKLQkJPGphdmFjIHNyY2Rpcj0iY2xpZW50IiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiIGluY2x1ZGVzPSJ0ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEiIC8+CisgICAgICAgIDxqYXZhYyBzcmNkaXI9ImNsaWVudCIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIiBpbmNsdWRlcz0idGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIiAvPgogCi0JPC90YXJnZXQ+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgorICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKLQk8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIiAvPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iIC8+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1jb25ucG9vbC1jb21tb24iPgotCQkJPHBhcmFtIG5hbWU9ImpkYmMuY29ubnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtZGV2LXRlc3QtcG9vbCIgLz4KLQkJPC9hbnRjYWxsPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+Ci0JCQk8cGFyYW0gbmFtZT0iamRiYy5jb25ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1kZXYtdGVzdC1wb29sIiAvPgotCQkJPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvamRiYy1kZXYtdGVzdC1yZXNvdXJjZSIgLz4KLQkJPC9hbnRjYWxsPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1kZXYtdGVzdC1wb29sIiAvPgorICAgICAgICA8L2FudGNhbGw+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbm5wb29sLm5hbWUiIHZhbHVlPSJqZGJjLWRldi10ZXN0LXBvb2wiIC8+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9qZGJjLWRldi10ZXN0LXJlc291cmNlIiAvPgorICAgICAgICA8L2FudGNhbGw+CisgICAgPC90YXJnZXQ+CiAKIAotCTx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxqYXZhIGNsYXNzbmFtZT0idGVzdC5jbGllbnQuV2ViVGVzdCI+Ci0JCQk8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iIC8+Ci0JCQk8YXJnIHZhbHVlPSIke2h0dHAucG9ydH0iIC8+Ci0JCQk8YXJnIHZhbHVlPSIke2NvbnRleHRyb290fSIgLz4KLQkJCTxjbGFzc3BhdGg+Ci0JCQkJPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIiAvPgotCQkJCTxwYXRoZWxlbWVudCBsb2NhdGlvbj0iY2xpZW50IiAvPgotCQkJPC9jbGFzc3BhdGg+Ci0JCTwvamF2YT4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8amF2YSBjbGFzc25hbWU9InRlc3QuY2xpZW50LldlYlRlc3QiPgorICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9IiAvPgorICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLnBvcnR9IiAvPgorICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtjb250ZXh0cm9vdH0iIC8+CisgICAgICAgICAgICA8Y2xhc3NwYXRoPgorICAgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIgLz4KKyAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImNsaWVudCIgLz4KKyAgICAgICAgICAgIDwvY2xhc3NwYXRoPgorICAgICAgICA8L2phdmE+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIgLz4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIgLz4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+Ci0JCQk8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9qZGJjLWRldi10ZXN0LXJlc291cmNlIiAvPgotCQk8L2FudGNhbGw+CisgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2pkYmMtZGV2LXRlc3QtcmVzb3VyY2UiIC8+CisgICAgICAgIDwvYW50Y2FsbD4KIAotCQk8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiI+Ci0JCQk8cGFyYW0gbmFtZT0iamRiYy5jb25ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1kZXYtdGVzdC1wb29sIiAvPgotCQk8L2FudGNhbGw+Ci0JPC90YXJnZXQ+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbm5wb29sLm5hbWUiIHZhbHVlPSJqZGJjLWRldi10ZXN0LXBvb2wiIC8+CisgICAgICAgIDwvYW50Y2FsbD4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCQk8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIgLz4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iIC8+CisgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi1wYXNzaXZhdGluZy1zY29wZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEJlYW5JbnRlcmZhY2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLXBhc3NpdmF0aW5nLXNjb3BlL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0QmVhbkludGVyZmFjZS5qYXZhCmluZGV4IDI5ZTEzN2EuLmU1YmU0ZDMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLXBhc3NpdmF0aW5nLXNjb3BlL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0QmVhbkludGVyZmFjZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLXBhc3NpdmF0aW5nLXNjb3BlL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0QmVhbkludGVyZmFjZS5qYXZhCkBAIC0xOSw2ICsxOSw2IEBACiBwdWJsaWMgaW50ZXJmYWNlIFRlc3RCZWFuSW50ZXJmYWNlIHsKICAgICBwdWJsaWMgdm9pZCBtMSgpOwogICAgIHB1YmxpYyB2b2lkIG0yKCk7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIHRlc3REYXRhc291cmNlSW5qZWN0aW9uKCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi1wYXNzaXZhdGluZy1zY29wZS9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9KUEFSZXNvdXJjZUluamVjdGlvblNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLXBhc3NpdmF0aW5nLXNjb3BlL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L0pQQVJlc291cmNlSW5qZWN0aW9uU2VydmxldC5qYXZhCmluZGV4IDYyMDFmNzAuLjJmMDYwMDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLXBhc3NpdmF0aW5nLXNjb3BlL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L0pQQVJlc291cmNlSW5qZWN0aW9uU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLXBhc3NpdmF0aW5nLXNjb3BlL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L0pQQVJlc291cmNlSW5qZWN0aW9uU2VydmxldC5qYXZhCkBAIC00OSw3ICs0OSw3IEBACiAKICAgICBwcml2YXRlIEBSZXNvdXJjZQogICAgIFVzZXJUcmFuc2FjdGlvbiB1dHg7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgVGVzdEVKQiB0Ymk7CiAKQEAgLTYwLDExICs2MCwxMSBAQAogICAgICAgICB3cml0ZXIud3JpdGUoIkhlbGxvIGZyb20gU2VydmxldCAzLjAuIik7CiAgICAgICAgIFN0cmluZyBtc2cgPSAiIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJKUEFSZXNvdXJjZUluamVjdGlvblNlcnZsZXQ6OkBQZXJzaXN0ZW5jZVVuaXQgIiArCi0gICAgICAgIAkJIkNESSBFbnRpdHlNYW5hZ2VyRmFjdG9yeT0iICsgZW1mMSk7CisgICAgICAgICAgICAgICAgIkNESSBFbnRpdHlNYW5hZ2VyRmFjdG9yeT0iICsgZW1mMSk7CiAKICAgICAgICAgRW50aXR5TWFuYWdlciBlbSA9IGVtZjEuY3JlYXRlRW50aXR5TWFuYWdlcigpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkpQQVJlc291cmNlSW5qZWN0aW9uU2VydmxldDo6Y3JlYXRlRU0iICsKLSAgICAgICAgCQkiRW50aXR5TWFuYWdlcj0iICsgZW0pOworICAgICAgICAgICAgICAgICJFbnRpdHlNYW5hZ2VyPSIgKyBlbSk7CiAgICAgICAgIFN0cmluZyB0ZXN0Y2FzZSA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJ0ZXN0Y2FzZSIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRlc3RjYXNlPSIgKyB0ZXN0Y2FzZSk7CiAKQEAgLTc4LDcgKzc4LDcgQEAKICAgICAgICAgICAgIH0gZWxzZSBpZiAoImxscXVlcnkiLmVxdWFscyh0ZXN0Y2FzZSkpIHsKICAgICAgICAgICAgICAgICBzdGF0dXMgPSBqdC5sYXp5TG9hZGluZ0J5UXVlcnkoIkNhcmxhIik7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKCJsbGluaiIuZXF1YWxzKHRlc3RjYXNlKSl7Ci0gICAgICAgICAgICAgICAgc3RhdHVzID0gKCh0YmkgIT0gbnVsbCkgJiYgCisgICAgICAgICAgICAgICAgc3RhdHVzID0gKCh0YmkgIT0gbnVsbCkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICh0YmkudGVzdCgpLmxlbmd0aCgpID09IDApKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChzdGF0dXMpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLXBhc3NpdmF0aW5nLXNjb3BlL3NlcnZsZXQvdGVzdC91dGlsL0pQQVJlc291cmNlUHJvZHVjZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLXBhc3NpdmF0aW5nLXNjb3BlL3NlcnZsZXQvdGVzdC91dGlsL0pQQVJlc291cmNlUHJvZHVjZXIuamF2YQppbmRleCAzYTMyNGQ2Li5jZWMwZmZlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi1wYXNzaXZhdGluZy1zY29wZS9zZXJ2bGV0L3Rlc3QvdXRpbC9KUEFSZXNvdXJjZVByb2R1Y2VyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24tcGFzc2l2YXRpbmctc2NvcGUvc2VydmxldC90ZXN0L3V0aWwvSlBBUmVzb3VyY2VQcm9kdWNlci5qYXZhCkBAIC0yOSwxMSArMjksMTEgQEAKIEBTaW5nbGV0b24KIHB1YmxpYyBjbGFzcyBKUEFSZXNvdXJjZVByb2R1Y2VyIHsKICAgICBAUHJvZHVjZXMgQFBlcnNpc3RlbmNlVW5pdCh1bml0TmFtZT0icHUzIikKLSAgICBAVGVzdERhdGFiYXNlIAorICAgIEBUZXN0RGF0YWJhc2UKICAgICBFbnRpdHlNYW5hZ2VyRmFjdG9yeSBjdXN0b21lckRhdGFiYXNlUGVyc2lzdGVuY2VVbml0OwogCiAgICAgQFByb2R1Y2VzIEBQZXJzaXN0ZW5jZUNvbnRleHQodW5pdE5hbWU9InB1MyIpCi0gICAgQFRlc3REYXRhYmFzZSAKKyAgICBAVGVzdERhdGFiYXNlCiAgICAgRW50aXR5TWFuYWdlciBjdXN0b21lckRhdGFiYXNlUGVyc2lzdGVuY2VDb250ZXh0OwotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi13aXRoLXNpbmdsZXRvbi1lamItcHJvZHVjZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLXdpdGgtc2luZ2xldG9uLWVqYi1wcm9kdWNlci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGUyZjE5NWMuLmRhNmI3MGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLXdpdGgtc2luZ2xldG9uLWVqYi1wcm9kdWNlci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLXdpdGgtc2luZ2xldG9uLWVqYi1wcm9kdWNlci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpwYS1yZXNvdXJjZS1pbmplY3Rpb24taW4tc2luZ2xldG9uLWVqYiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24td2l0aC1zaW5nbGV0b24tZWpiLXByb2R1Y2VyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLXdpdGgtc2luZ2xldG9uLWVqYi1wcm9kdWNlci9idWlsZC54bWwKaW5kZXggMjk1ZDA4Ni4uZWI3OTBiZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24td2l0aC1zaW5nbGV0b24tZWpiLXByb2R1Y2VyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi13aXRoLXNpbmdsZXRvbi1lamItcHJvZHVjZXIvYnVpbGQueG1sCkBAIC0zMyw3NSArMzMsNzUgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCxjcmVhdGUtcmVzb3VyY2VzLGRlcGxveSxydW4sdW5kZXBsb3ksZGVsZXRlLXJlc291cmNlcyIgLz4KIAotCTx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iIC8+Ci0JCTxkZWxldGU+Ci0JCQk8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIiAvPgotCQkJPGZpbGVzZXQgZGlyPSJjbGllbnQvdGVzdC9jbGllbnQiIGluY2x1ZGVzPSIqLmNsYXNzIiAvPgotCQk8L2RlbGV0ZT4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIiAvPgorICAgICAgICA8ZGVsZXRlPgorICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIgLz4KKyAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iY2xpZW50L3Rlc3QvY2xpZW50IiBpbmNsdWRlcz0iKi5jbGFzcyIgLz4KKyAgICAgICAgPC9kZWxldGU+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+Ci0JCQk8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIgLz4KLQkJPC9hbnRjYWxsPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0IiAvPgorICAgICAgICA8L2FudGNhbGw+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLQkJPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIgLz4KLQkJPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+Ci0JCQk8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIiAvPgotCQkJPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiIC8+Ci0JCTwvYW50Y2FsbD4KKyAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIgLz4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIiAvPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiIC8+CisgICAgICAgIDwvYW50Y2FsbD4KIAotCQk8amF2YWMgc3JjZGlyPSJjbGllbnQiIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIgaW5jbHVkZXM9InRlc3QvY2xpZW50L1dlYlRlc3QuamF2YSIgLz4KKyAgICAgICAgPGphdmFjIHNyY2Rpcj0iY2xpZW50IiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiIGluY2x1ZGVzPSJ0ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEiIC8+CiAKLQk8L3RhcmdldD4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CisgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIAotCTx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iIC8+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIgLz4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iY3JlYXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiI+Ci0JCQk8cGFyYW0gbmFtZT0iamRiYy5jb25ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1kZXYtdGVzdC1wb29sIiAvPgotCQk8L2FudGNhbGw+Ci0JCTxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJqZGJjLmNvbm5wb29sLm5hbWUiIHZhbHVlPSJqZGJjLWRldi10ZXN0LXBvb2wiIC8+Ci0JCQk8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9qZGJjLWRldi10ZXN0LXJlc291cmNlIiAvPgotCQk8L2FudGNhbGw+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbm5wb29sLm5hbWUiIHZhbHVlPSJqZGJjLWRldi10ZXN0LXBvb2wiIC8+CisgICAgICAgIDwvYW50Y2FsbD4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ubnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtZGV2LXRlc3QtcG9vbCIgLz4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2pkYmMtZGV2LXRlc3QtcmVzb3VyY2UiIC8+CisgICAgICAgIDwvYW50Y2FsbD4KKyAgICA8L3RhcmdldD4KIAogCi0JPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGphdmEgY2xhc3NuYW1lPSJ0ZXN0LmNsaWVudC5XZWJUZXN0Ij4KLQkJCTxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIgLz4KLQkJCTxhcmcgdmFsdWU9IiR7aHR0cC5wb3J0fSIgLz4KLQkJCTxhcmcgdmFsdWU9IiR7Y29udGV4dHJvb3R9IiAvPgotCQkJPGNsYXNzcGF0aD4KLQkJCQk8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiIC8+Ci0JCQkJPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJjbGllbnQiIC8+Ci0JCQk8L2NsYXNzcGF0aD4KLQkJPC9qYXZhPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0idGVzdC5jbGllbnQuV2ViVGVzdCI+CisgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iIC8+CisgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAucG9ydH0iIC8+CisgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2NvbnRleHRyb290fSIgLz4KKyAgICAgICAgICAgIDxjbGFzc3BhdGg+CisgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIiAvPgorICAgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iY2xpZW50IiAvPgorICAgICAgICAgICAgPC9jbGFzc3BhdGg+CisgICAgICAgIDwvamF2YT4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIiAvPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIiAvPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2pkYmMtZGV2LXRlc3QtcmVzb3VyY2UiIC8+Ci0JCTwvYW50Y2FsbD4KKyAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvamRiYy1kZXYtdGVzdC1yZXNvdXJjZSIgLz4KKyAgICAgICAgPC9hbnRjYWxsPgogCi0JCTxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJqZGJjLmNvbm5wb29sLm5hbWUiIHZhbHVlPSJqZGJjLWRldi10ZXN0LXBvb2wiIC8+Ci0JCTwvYW50Y2FsbD4KLQk8L3RhcmdldD4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1jb25ucG9vbC1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ubnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtZGV2LXRlc3QtcG9vbCIgLz4KKyAgICAgICAgPC9hbnRjYWxsPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JCTxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIiAvPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIgLz4KKyAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLXdpdGgtc2luZ2xldG9uLWVqYi1wcm9kdWNlci9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24td2l0aC1zaW5nbGV0b24tZWpiLXByb2R1Y2VyL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKaW5kZXggYjQ3NDczMy4uMGY2NWQ5MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24td2l0aC1zaW5nbGV0b24tZWpiLXByb2R1Y2VyL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24td2l0aC1zaW5nbGV0b24tZWpiLXByb2R1Y2VyL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKQEAgLTY0LDcgKzY0LDcgQEAKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHJ1bk9uZUN5Y2xlKFN0cmluZyB3aGljaEVNRikgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIGludm9rZSh3aGljaEVNRiwgImxsaW5pdCIpOwogICAgICAgICBpbnZva2Uod2hpY2hFTUYsICJsbHF1ZXJ5Iik7CkBAIC0xMTgsOCArMTE4LDggQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgU3RyaW5nIGdldFRlc3ROYW1lKFN0cmluZyB3aGljaEVNRiwgU3RyaW5nIHRlc3RDYXNlKXsKLSAgICAgICAgcmV0dXJuIFRFU1RfTkFNRSArICJfIiArIHdoaWNoRU1GICsgIl8iICt0ZXN0Q2FzZTsgICAgICAgIAorICAgICAgICByZXR1cm4gVEVTVF9OQU1FICsgIl8iICsgd2hpY2hFTUYgKyAiXyIgK3Rlc3RDYXNlOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLXdpdGgtc2luZ2xldG9uLWVqYi1wcm9kdWNlci9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEJlYW5JbnRlcmZhY2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLXdpdGgtc2luZ2xldG9uLWVqYi1wcm9kdWNlci9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEJlYW5JbnRlcmZhY2UuamF2YQppbmRleCAyOWUxMzdhLi5lNWJlNGQzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi13aXRoLXNpbmdsZXRvbi1lamItcHJvZHVjZXIvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RCZWFuSW50ZXJmYWNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24td2l0aC1zaW5nbGV0b24tZWpiLXByb2R1Y2VyL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0QmVhbkludGVyZmFjZS5qYXZhCkBAIC0xOSw2ICsxOSw2IEBACiBwdWJsaWMgaW50ZXJmYWNlIFRlc3RCZWFuSW50ZXJmYWNlIHsKICAgICBwdWJsaWMgdm9pZCBtMSgpOwogICAgIHB1YmxpYyB2b2lkIG0yKCk7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIHRlc3REYXRhc291cmNlSW5qZWN0aW9uKCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi13aXRoLXNpbmdsZXRvbi1lamItcHJvZHVjZXIvc2VydmxldC90ZXN0L2JlYW5zL25vbm1vY2svVGVzdEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLXdpdGgtc2luZ2xldG9uLWVqYi1wcm9kdWNlci9zZXJ2bGV0L3Rlc3QvYmVhbnMvbm9ubW9jay9UZXN0QmVhbi5qYXZhCmluZGV4IDNkY2ZhOTQuLjZiZjM4N2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLXdpdGgtc2luZ2xldG9uLWVqYi1wcm9kdWNlci9zZXJ2bGV0L3Rlc3QvYmVhbnMvbm9ubW9jay9UZXN0QmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLXdpdGgtc2luZ2xldG9uLWVqYi1wcm9kdWNlci9zZXJ2bGV0L3Rlc3QvYmVhbnMvbm9ubW9jay9UZXN0QmVhbi5qYXZhCkBAIC0zMSw4ICszMSw4IEBACiBAUHJlZmVycmVkCiBwdWJsaWMgY2xhc3MgVGVzdEJlYW4gaW1wbGVtZW50cyBUZXN0QmVhbkludGVyZmFjZXsKICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gdGVzdEJlYW5JbnZva2VkID0gZmFsc2U7Ci0gICAgCi0gICAgQEluamVjdCBAUHJvZHVjZWRWaWFQcm9kdWNlck1ldGhvZCAKKworICAgIEBJbmplY3QgQFByb2R1Y2VkVmlhUHJvZHVjZXJNZXRob2QKICAgICBFbnRpdHlNYW5hZ2VyRmFjdG9yeSBlbWY7CiAKICAgICBAT3ZlcnJpZGUKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLXdpdGgtc2luZ2xldG9uLWVqYi1wcm9kdWNlci9zZXJ2bGV0L3Rlc3QvZWpiL0pQQVJlc291cmNlUHJvZHVjZXJTaW5nbGV0b25FSkJfQnVzaW5lc3NNZXRob2RQcm9kdWNlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24td2l0aC1zaW5nbGV0b24tZWpiLXByb2R1Y2VyL3NlcnZsZXQvdGVzdC9lamIvSlBBUmVzb3VyY2VQcm9kdWNlclNpbmdsZXRvbkVKQl9CdXNpbmVzc01ldGhvZFByb2R1Y2VyLmphdmEKaW5kZXggYTM1ZTZhYS4uODFmMWYzOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24td2l0aC1zaW5nbGV0b24tZWpiLXByb2R1Y2VyL3NlcnZsZXQvdGVzdC9lamIvSlBBUmVzb3VyY2VQcm9kdWNlclNpbmdsZXRvbkVKQl9CdXNpbmVzc01ldGhvZFByb2R1Y2VyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24td2l0aC1zaW5nbGV0b24tZWpiLXByb2R1Y2VyL3NlcnZsZXQvdGVzdC9lamIvSlBBUmVzb3VyY2VQcm9kdWNlclNpbmdsZXRvbkVKQl9CdXNpbmVzc01ldGhvZFByb2R1Y2VyLmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKIHB1YmxpYyBjbGFzcyBKUEFSZXNvdXJjZVByb2R1Y2VyU2luZ2xldG9uRUpCX0J1c2luZXNzTWV0aG9kUHJvZHVjZXIgewogICAgIEBQZXJzaXN0ZW5jZVVuaXQodW5pdE5hbWU9InB1MSIpCiAgICAgRW50aXR5TWFuYWdlckZhY3RvcnkgY3VzdG9tZXJEYXRhYmFzZVBlcnNpc3RlbmNlVW5pdDsKLSAgICAKKwogICAgIEBQcm9kdWNlcyBAUHJvZHVjZWRWaWFQcm9kdWNlck1ldGhvZAogICAgIHB1YmxpYyBFbnRpdHlNYW5hZ2VyRmFjdG9yeSBjcmVhdGVFTUYoKXsKICAgICAgICAgcmV0dXJuIGN1c3RvbWVyRGF0YWJhc2VQZXJzaXN0ZW5jZVVuaXQ7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi13aXRoLXNpbmdsZXRvbi1lamItcHJvZHVjZXIvc2VydmxldC90ZXN0L2VqYi9KUEFSZXNvdXJjZVByb2R1Y2VyU2luZ2xldG9uRUpCX1N0YXRpY0ZpZWxkLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi13aXRoLXNpbmdsZXRvbi1lamItcHJvZHVjZXIvc2VydmxldC90ZXN0L2VqYi9KUEFSZXNvdXJjZVByb2R1Y2VyU2luZ2xldG9uRUpCX1N0YXRpY0ZpZWxkLmphdmEKaW5kZXggY2JkZjkzNi4uMTdkZTdjMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24td2l0aC1zaW5nbGV0b24tZWpiLXByb2R1Y2VyL3NlcnZsZXQvdGVzdC9lamIvSlBBUmVzb3VyY2VQcm9kdWNlclNpbmdsZXRvbkVKQl9TdGF0aWNGaWVsZC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLXdpdGgtc2luZ2xldG9uLWVqYi1wcm9kdWNlci9zZXJ2bGV0L3Rlc3QvZWpiL0pQQVJlc291cmNlUHJvZHVjZXJTaW5nbGV0b25FSkJfU3RhdGljRmllbGQuamF2YQpAQCAtMjQsNiArMjQsNiBAQAogCiBAamFrYXJ0YS5lamIuU2luZ2xldG9uCiBwdWJsaWMgY2xhc3MgSlBBUmVzb3VyY2VQcm9kdWNlclNpbmdsZXRvbkVKQl9TdGF0aWNGaWVsZCB7Ci0gICAgQFByb2R1Y2VzIEBQZXJzaXN0ZW5jZVVuaXQodW5pdE5hbWU9InB1MSIpIEBQcm9kdWNlZFZpYVN0YXRpY0ZpZWxkIAorICAgIEBQcm9kdWNlcyBAUGVyc2lzdGVuY2VVbml0KHVuaXROYW1lPSJwdTEiKSBAUHJvZHVjZWRWaWFTdGF0aWNGaWVsZAogICAgIHB1YmxpYyBzdGF0aWMgRW50aXR5TWFuYWdlckZhY3RvcnkgY3VzdG9tZXJEYXRhYmFzZVBlcnNpc3RlbmNlVW5pdDE7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi13aXRoLXNpbmdsZXRvbi1lamItcHJvZHVjZXIvc2VydmxldC90ZXN0L3NlcnZsZXQvSlBBUmVzb3VyY2VJbmplY3Rpb25TZXJ2bGV0RnJvbVNpbmdsZXRvbkVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24td2l0aC1zaW5nbGV0b24tZWpiLXByb2R1Y2VyL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L0pQQVJlc291cmNlSW5qZWN0aW9uU2VydmxldEZyb21TaW5nbGV0b25FSkIuamF2YQppbmRleCA4ZjdiMmY5Li4yNjY1MmU4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi13aXRoLXNpbmdsZXRvbi1lamItcHJvZHVjZXIvc2VydmxldC90ZXN0L3NlcnZsZXQvSlBBUmVzb3VyY2VJbmplY3Rpb25TZXJ2bGV0RnJvbVNpbmdsZXRvbkVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uLXdpdGgtc2luZ2xldG9uLWVqYi1wcm9kdWNlci9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9KUEFSZXNvdXJjZUluamVjdGlvblNlcnZsZXRGcm9tU2luZ2xldG9uRUpCLmphdmEKQEAgLTQ2LDE1ICs0NiwxNSBAQAogICAgIEBJbmplY3QKICAgICBAUHJvZHVjZWRWaWFQcm9kdWNlck1ldGhvZAogICAgIHByaXZhdGUgRW50aXR5TWFuYWdlckZhY3RvcnkgZW1mX3Byb2R1Y2VyOwotICAgIAorCiAgICAgQEluamVjdAogICAgIEBQcm9kdWNlZFZpYVN0YXRpY0ZpZWxkCiAgICAgcHJpdmF0ZSBFbnRpdHlNYW5hZ2VyRmFjdG9yeSBlbWZfc3RhdGljOwotICAgIAorCiAKICAgICBwcml2YXRlIEBSZXNvdXJjZQogICAgIFVzZXJUcmFuc2FjdGlvbiB1dHg7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgQFByZWZlcnJlZAogICAgIFRlc3RCZWFuSW50ZXJmYWNlIHRiaTsKQEAgLTY1LDEzICs2NSwxMyBAQAogICAgICAgICBQcmludFdyaXRlciB3cml0ZXIgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKICAgICAgICAgd3JpdGVyLndyaXRlKCJIZWxsbyBmcm9tIFNlcnZsZXQgMy4wLiIpOwogICAgICAgICBTdHJpbmcgbXNnID0gIiI7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChlbWYgPT0gbnVsbCkKICAgICAgICAgICAgIG1zZyArPSAiU2ltcGxlIGluamVjdGlvbiBvZiBFbnRpdHlNYW5hZ2VyRmFjdG9yeSB0aHJvdWdoICIgKwotICAgICAgICAgICAgCQkiQFBlcnNpc3RlbmNlVW5pdCBmYWlsZWQiOworICAgICAgICAgICAgICAgICAgICAiQFBlcnNpc3RlbmNlVW5pdCBmYWlsZWQiOwogICAgICAgICBTdHJpbmcgdGVzdGNhc2UgPSByZXF1ZXN0LmdldFBhcmFtZXRlcigidGVzdGNhc2UiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0ZXN0Y2FzZT0iICsgdGVzdGNhc2UpOwotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgd2hpY2hFTUYgPSByZXF1ZXN0LmdldFBhcmFtZXRlcigid2hpY2hlbWYiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ3aGljaEVNRj0iICsgd2hpY2hFTUYpOwogCkBAIC04OSw5ICs4OSw5IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkpQQVJlc291cmNlSW5qZWN0aW9uU2VydmxldDo6Y3JlYXRlRU0iICsKICAgICAgICAgICAgICAgICAgICAgIkVudGl0eU1hbmFnZXI9IiArIGVtKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAodGVzdGNhc2UgIT0gbnVsbCkgewotICAgICAgICAgICAgCisKICAgICAgICAgICAgIEpwYVRlc3QganQgPSBuZXcgSnBhVGVzdChlbSwgdXR4KTsKICAgICAgICAgICAgIGJvb2xlYW4gc3RhdHVzID0gZmFsc2U7CiAgICAgICAgICAgICBpZiAoImxsaW5pdCIuZXF1YWxzKHRlc3RjYXNlKSkgewpAQCAtMTAxLDEwICsxMDEsMTAgQEAKICAgICAgICAgICAgIH0gZWxzZSBpZiAoImxscXVlcnkiLmVxdWFscyh0ZXN0Y2FzZSkpIHsKICAgICAgICAgICAgICAgICBzdGF0dXMgPSBqdC5sYXp5TG9hZGluZ0J5UXVlcnkoIkNhcmxhIik7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKCJsbGluaiIuZXF1YWxzKHRlc3RjYXNlKSl7Ci0gICAgICAgICAgICAgICAgc3RhdHVzID0gKCh0YmkgIT0gbnVsbCkgJiYgCisgICAgICAgICAgICAgICAgc3RhdHVzID0gKCh0YmkgIT0gbnVsbCkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICh0YmkudGVzdERhdGFzb3VyY2VJbmplY3Rpb24oKS50cmltKCkubGVuZ3RoKCk9PTApKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoc3RhdHVzKSB7CiAgICAgICAgICAgICAgICAgbXNnICs9ICIiOy8vIHBhc3MKICAgICAgICAgICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24vYnVpbGQucHJvcGVydGllcwppbmRleCAxNjhmYWU3Li4xODgzZDQ2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanBhLXJlc291cmNlLWluamVjdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24vYnVpbGQueG1sCmluZGV4IDI5NWQwODYuLmViNzkwYmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi9idWlsZC54bWwKQEAgLTMzLDc1ICszMyw3NSBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLGNyZWF0ZS1yZXNvdXJjZXMsZGVwbG95LHJ1bix1bmRlcGxveSxkZWxldGUtcmVzb3VyY2VzIiAvPgogCi0JPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIgLz4KLQkJPGRlbGV0ZT4KLQkJCTxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiIC8+Ci0JCQk8ZmlsZXNldCBkaXI9ImNsaWVudC90ZXN0L2NsaWVudCIgaW5jbHVkZXM9IiouY2xhc3MiIC8+Ci0JCTwvZGVsZXRlPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iIC8+CisgICAgICAgIDxkZWxldGU+CisgICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIiAvPgorICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSJjbGllbnQvdGVzdC9jbGllbnQiIGluY2x1ZGVzPSIqLmNsYXNzIiAvPgorICAgICAgICA8L2RlbGV0ZT4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0IiAvPgotCQk8L2FudGNhbGw+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiIC8+CisgICAgICAgIDwvYW50Y2FsbD4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotCQk8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIiAvPgotCQk8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiIC8+Ci0JCQk8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KLQkJPC9hbnRjYWxsPgorICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIiAvPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiIC8+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KKyAgICAgICAgPC9hbnRjYWxsPgogCi0JCTxqYXZhYyBzcmNkaXI9ImNsaWVudCIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIiBpbmNsdWRlcz0idGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIiAvPgorICAgICAgICA8amF2YWMgc3JjZGlyPSJjbGllbnQiIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIgaW5jbHVkZXM9InRlc3QvY2xpZW50L1dlYlRlc3QuamF2YSIgLz4KIAotCTwvdGFyZ2V0PgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KKyAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCi0JPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIgLz4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIiAvPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJjcmVhdGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJqZGJjLmNvbm5wb29sLm5hbWUiIHZhbHVlPSJqZGJjLWRldi10ZXN0LXBvb2wiIC8+Ci0JCTwvYW50Y2FsbD4KLQkJPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgotCQkJPHBhcmFtIG5hbWU9ImpkYmMuY29ubnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtZGV2LXRlc3QtcG9vbCIgLz4KLQkJCTxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2pkYmMtZGV2LXRlc3QtcmVzb3VyY2UiIC8+Ci0JCTwvYW50Y2FsbD4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1jb25ucG9vbC1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ubnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtZGV2LXRlc3QtcG9vbCIgLz4KKyAgICAgICAgPC9hbnRjYWxsPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1kZXYtdGVzdC1wb29sIiAvPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvamRiYy1kZXYtdGVzdC1yZXNvdXJjZSIgLz4KKyAgICAgICAgPC9hbnRjYWxsPgorICAgIDwvdGFyZ2V0PgogCiAKLQk8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8amF2YSBjbGFzc25hbWU9InRlc3QuY2xpZW50LldlYlRlc3QiPgotCQkJPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9IiAvPgotCQkJPGFyZyB2YWx1ZT0iJHtodHRwLnBvcnR9IiAvPgotCQkJPGFyZyB2YWx1ZT0iJHtjb250ZXh0cm9vdH0iIC8+Ci0JCQk8Y2xhc3NwYXRoPgotCQkJCTxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIgLz4KLQkJCQk8cGF0aGVsZW1lbnQgbG9jYXRpb249ImNsaWVudCIgLz4KLQkJCTwvY2xhc3NwYXRoPgotCQk8L2phdmE+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJ0ZXN0LmNsaWVudC5XZWJUZXN0Ij4KKyAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIgLz4KKyAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5wb3J0fSIgLz4KKyAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7Y29udGV4dHJvb3R9IiAvPgorICAgICAgICAgICAgPGNsYXNzcGF0aD4KKyAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiIC8+CisgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJjbGllbnQiIC8+CisgICAgICAgICAgICA8L2NsYXNzcGF0aD4KKyAgICAgICAgPC9qYXZhPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iIC8+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iIC8+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgotCQkJPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvamRiYy1kZXYtdGVzdC1yZXNvdXJjZSIgLz4KLQkJPC9hbnRjYWxsPgorICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9qZGJjLWRldi10ZXN0LXJlc291cmNlIiAvPgorICAgICAgICA8L2FudGNhbGw+CiAKLQkJPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1jb25ucG9vbC1jb21tb24iPgotCQkJPHBhcmFtIG5hbWU9ImpkYmMuY29ubnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtZGV2LXRlc3QtcG9vbCIgLz4KLQkJPC9hbnRjYWxsPgotCTwvdGFyZ2V0PgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1kZXYtdGVzdC1wb29sIiAvPgorICAgICAgICA8L2FudGNhbGw+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iIC8+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIiAvPgorICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24vc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RCZWFuSW50ZXJmYWNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEJlYW5JbnRlcmZhY2UuamF2YQppbmRleCAyOWUxMzdhLi5lNWJlNGQzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEJlYW5JbnRlcmZhY2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEJlYW5JbnRlcmZhY2UuamF2YQpAQCAtMTksNiArMTksNiBAQAogcHVibGljIGludGVyZmFjZSBUZXN0QmVhbkludGVyZmFjZSB7CiAgICAgcHVibGljIHZvaWQgbTEoKTsKICAgICBwdWJsaWMgdm9pZCBtMigpOwotICAgIAorCiAgICAgcHVibGljIFN0cmluZyB0ZXN0RGF0YXNvdXJjZUluamVjdGlvbigpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24vc2VydmxldC90ZXN0L2JlYW5zL25vbm1vY2svVGVzdEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uL3NlcnZsZXQvdGVzdC9iZWFucy9ub25tb2NrL1Rlc3RCZWFuLmphdmEKaW5kZXggNjFjYTVjZi4uM2YyYTRiYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24vc2VydmxldC90ZXN0L2JlYW5zL25vbm1vY2svVGVzdEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi9zZXJ2bGV0L3Rlc3QvYmVhbnMvbm9ubW9jay9UZXN0QmVhbi5qYXZhCkBAIC0yOSw4ICsyOSw4IEBACiBAUHJlZmVycmVkCiBwdWJsaWMgY2xhc3MgVGVzdEJlYW4gaW1wbGVtZW50cyBUZXN0QmVhbkludGVyZmFjZXsKICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gdGVzdEJlYW5JbnZva2VkID0gZmFsc2U7Ci0gICAgCi0gICAgQEluamVjdCBAVGVzdERhdGFiYXNlIAorCisgICAgQEluamVjdCBAVGVzdERhdGFiYXNlCiAgICAgRW50aXR5TWFuYWdlckZhY3RvcnkgZW1mOwogCiAgICAgQE92ZXJyaWRlCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9KUEFSZXNvdXJjZUluamVjdGlvblNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L0pQQVJlc291cmNlSW5qZWN0aW9uU2VydmxldC5qYXZhCmluZGV4IGRjNGUxOGYuLjY5NDZjZTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L0pQQVJlc291cmNlSW5qZWN0aW9uU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L0pQQVJlc291cmNlSW5qZWN0aW9uU2VydmxldC5qYXZhCkBAIC00OCw3ICs0OCw3IEBACiAKICAgICBwcml2YXRlIEBSZXNvdXJjZQogICAgIFVzZXJUcmFuc2FjdGlvbiB1dHg7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgQFByZWZlcnJlZAogICAgIFRlc3RCZWFuSW50ZXJmYWNlIHRiaTsKQEAgLTYwLDExICs2MCwxMSBAQAogICAgICAgICB3cml0ZXIud3JpdGUoIkhlbGxvIGZyb20gU2VydmxldCAzLjAuIik7CiAgICAgICAgIFN0cmluZyBtc2cgPSAiIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJKUEFSZXNvdXJjZUluamVjdGlvblNlcnZsZXQ6OkBQZXJzaXN0ZW5jZVVuaXQgIiArCi0gICAgICAgIAkJIkNESSBFbnRpdHlNYW5hZ2VyRmFjdG9yeT0iICsgZW1mMSk7CisgICAgICAgICAgICAgICAgIkNESSBFbnRpdHlNYW5hZ2VyRmFjdG9yeT0iICsgZW1mMSk7CiAKICAgICAgICAgRW50aXR5TWFuYWdlciBlbSA9IGVtZjEuY3JlYXRlRW50aXR5TWFuYWdlcigpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkpQQVJlc291cmNlSW5qZWN0aW9uU2VydmxldDo6Y3JlYXRlRU0iICsKLSAgICAgICAgCQkiRW50aXR5TWFuYWdlcj0iICsgZW0pOworICAgICAgICAgICAgICAgICJFbnRpdHlNYW5hZ2VyPSIgKyBlbSk7CiAgICAgICAgIFN0cmluZyB0ZXN0Y2FzZSA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJ0ZXN0Y2FzZSIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRlc3RjYXNlPSIgKyB0ZXN0Y2FzZSk7CiAKQEAgLTc4LDcgKzc4LDcgQEAKICAgICAgICAgICAgIH0gZWxzZSBpZiAoImxscXVlcnkiLmVxdWFscyh0ZXN0Y2FzZSkpIHsKICAgICAgICAgICAgICAgICBzdGF0dXMgPSBqdC5sYXp5TG9hZGluZ0J5UXVlcnkoIkNhcmxhIik7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKCJsbGluaiIuZXF1YWxzKHRlc3RjYXNlKSl7Ci0gICAgICAgICAgICAgICAgc3RhdHVzID0gKCh0YmkgIT0gbnVsbCkgJiYgCisgICAgICAgICAgICAgICAgc3RhdHVzID0gKCh0YmkgIT0gbnVsbCkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICh0YmkudGVzdERhdGFzb3VyY2VJbmplY3Rpb24oKS50cmltKCkubGVuZ3RoKCk9PTApKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChzdGF0dXMpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uL3NlcnZsZXQvdGVzdC91dGlsL0pQQVJlc291cmNlUHJvZHVjZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9qcGEtcmVzb3VyY2UtaW5qZWN0aW9uL3NlcnZsZXQvdGVzdC91dGlsL0pQQVJlc291cmNlUHJvZHVjZXIuamF2YQppbmRleCBhN2ExNGFkLi44OWI2YjBiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvanBhLXJlc291cmNlLWluamVjdGlvbi9zZXJ2bGV0L3Rlc3QvdXRpbC9KUEFSZXNvdXJjZVByb2R1Y2VyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL2pwYS1yZXNvdXJjZS1pbmplY3Rpb24vc2VydmxldC90ZXN0L3V0aWwvSlBBUmVzb3VyY2VQcm9kdWNlci5qYXZhCkBAIC0yNiw3ICsyNiw3IEBACiBAU2luZ2xldG9uCiBwdWJsaWMgY2xhc3MgSlBBUmVzb3VyY2VQcm9kdWNlciB7CiAgICAgQFByb2R1Y2VzIEBQZXJzaXN0ZW5jZVVuaXQodW5pdE5hbWU9InB1MSIpCi0gICAgQFRlc3REYXRhYmFzZSAKKyAgICBAVGVzdERhdGFiYXNlCiAgICAgRW50aXR5TWFuYWdlckZhY3RvcnkgY3VzdG9tZXJEYXRhYmFzZVBlcnNpc3RlbmNlVW5pdDsKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL25vLWludGVyZmFjZS1lamIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9uby1pbnRlcmZhY2UtZWpiL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNWI4YmExMS4uYmI3YjQ5MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL25vLWludGVyZmFjZS1lamIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvbm8taW50ZXJmYWNlLWVqYi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LW5vLWludGVyZmFjZS1lamIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9uby1pbnRlcmZhY2UtZWpiL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9uby1pbnRlcmZhY2UtZWpiL2J1aWxkLnhtbAppbmRleCBhMGU2YTlkLi4yODI0YjU4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvbm8taW50ZXJmYWNlLWVqYi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL25vLWludGVyZmFjZS1lamIvYnVpbGQueG1sCkBAIC0zMyw1NCArMzMsNTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCxkZXBsb3kscnVuLHVuZGVwbG95IiAvPgogCi0JPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIgLz4KLQkJPGRlbGV0ZT4KLQkJCTxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiIC8+Ci0JCQk8ZmlsZXNldCBkaXI9ImNsaWVudC90ZXN0L2NsaWVudCIgaW5jbHVkZXM9IiouY2xhc3MiIC8+Ci0JCTwvZGVsZXRlPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iIC8+CisgICAgICAgIDxkZWxldGU+CisgICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIiAvPgorICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSJjbGllbnQvdGVzdC9jbGllbnQiIGluY2x1ZGVzPSIqLmNsYXNzIiAvPgorICAgICAgICA8L2RlbGV0ZT4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0IiAvPgotCQk8L2FudGNhbGw+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiIC8+CisgICAgICAgIDwvYW50Y2FsbD4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotCQk8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIiAvPgotCQk8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiIC8+Ci0JCQk8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KLQkJPC9hbnRjYWxsPgorICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIiAvPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiIC8+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KKyAgICAgICAgPC9hbnRjYWxsPgogCi0JCTxqYXZhYyBzcmNkaXI9ImNsaWVudCIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIiBpbmNsdWRlcz0idGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIiAvPgorICAgICAgICA8amF2YWMgc3JjZGlyPSJjbGllbnQiIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIgaW5jbHVkZXM9InRlc3QvY2xpZW50L1dlYlRlc3QuamF2YSIgLz4KIAotCTwvdGFyZ2V0PgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KKyAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCi0JPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIgLz4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIiAvPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGphdmEgY2xhc3NuYW1lPSJ0ZXN0LmNsaWVudC5XZWJUZXN0Ij4KLQkJCTxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIgLz4KLQkJCTxhcmcgdmFsdWU9IiR7aHR0cC5wb3J0fSIgLz4KLQkJCTxhcmcgdmFsdWU9IiR7Y29udGV4dHJvb3R9IiAvPgotCQkJPGNsYXNzcGF0aD4KLQkJCQk8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiIC8+Ci0JCQkJPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJjbGllbnQiIC8+Ci0JCQk8L2NsYXNzcGF0aD4KLQkJPC9qYXZhPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0idGVzdC5jbGllbnQuV2ViVGVzdCI+CisgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iIC8+CisgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAucG9ydH0iIC8+CisgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2NvbnRleHRyb290fSIgLz4KKyAgICAgICAgICAgIDxjbGFzc3BhdGg+CisgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIiAvPgorICAgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iY2xpZW50IiAvPgorICAgICAgICAgICAgPC9jbGFzc3BhdGg+CisgICAgICAgIDwvamF2YT4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIiAvPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIiAvPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JCTxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIiAvPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIgLz4KKyAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9uby1pbnRlcmZhY2UtZWpiL3NlcnZsZXQvdGVzdC9iZWFucy9ub25tb2NrL25vaW50ZXJmYWNlYmVhbnZpZXcvVGVzdEJlYW5TdXBlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL25vLWludGVyZmFjZS1lamIvc2VydmxldC90ZXN0L2JlYW5zL25vbm1vY2svbm9pbnRlcmZhY2ViZWFudmlldy9UZXN0QmVhblN1cGVyLmphdmEKaW5kZXggNWEzOGY5MC4uMDIzNTEyMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL25vLWludGVyZmFjZS1lamIvc2VydmxldC90ZXN0L2JlYW5zL25vbm1vY2svbm9pbnRlcmZhY2ViZWFudmlldy9UZXN0QmVhblN1cGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL25vLWludGVyZmFjZS1lamIvc2VydmxldC90ZXN0L2JlYW5zL25vbm1vY2svbm9pbnRlcmZhY2ViZWFudmlldy9UZXN0QmVhblN1cGVyLmphdmEKQEAgLTIwLDcgKzIwLDcgQEAKIGltcG9ydCB0ZXN0LmVqYi5ub2ludGVyZmFjZWJlYW52aWV3LlRlc3ROb0ludGVyZmFjZUVKQjsKIAogYWJzdHJhY3QgY2xhc3MgVGVzdEJlYW5TdXBlciBpbXBsZW1lbnRzIFRlc3RCZWFuSW50ZXJmYWNlIHsKLSAgICAKKwogICAgIGFic3RyYWN0IFRlc3ROb0ludGVyZmFjZUVKQiBnZXRUZXN0RUpCKCk7CiAKICAgICBAT3ZlcnJpZGUKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9uby1pbnRlcmZhY2UtZWpiL3NlcnZsZXQvdGVzdC9lamIvbG9jYWwvVGVzdFN1cGVyQ2xhc3MuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9uby1pbnRlcmZhY2UtZWpiL3NlcnZsZXQvdGVzdC9lamIvbG9jYWwvVGVzdFN1cGVyQ2xhc3MuamF2YQppbmRleCA0YTQxOWMwLi42MWRiOWZhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvbm8taW50ZXJmYWNlLWVqYi9zZXJ2bGV0L3Rlc3QvZWpiL2xvY2FsL1Rlc3RTdXBlckNsYXNzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL25vLWludGVyZmFjZS1lamIvc2VydmxldC90ZXN0L2VqYi9sb2NhbC9UZXN0U3VwZXJDbGFzcy5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIGltcG9ydCBqYWthcnRhLmVudGVycHJpc2UuaW5qZWN0LkFsdGVybmF0aXZlOwogCi0gCisKIC8vbWFya2VkIGFzIEFsdGVybmF0aXZlLCBvdGhlcndpc2UgdGhlcmUgd291bGQKIC8vYW4gYW1iaWd1b3VzIGRlZmluaXRpb24gZm9yIFRlc3RMb2NhbEludGVyZmFjZSBiZXR3ZWVuIHRoaXMKIC8vc3VwZXIgY2xhc3MgYW5kIHRoZSBUZXN0TG9jYWxFSkIKQEAgLTI5LDcgKzI5LDcgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJsb2NhbCBiZWFuOiBtMSIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBtMkRlZmluZWRJblN1cGVyQ2xhc3MoKXsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJsb2NhbDogbTIiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvbm8taW50ZXJmYWNlLWVqYi9zZXJ2bGV0L3Rlc3QvZWpiL25vaW50ZXJmYWNlYmVhbnZpZXcvVGVzdFN1cGVyQ2xhc3MuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9uby1pbnRlcmZhY2UtZWpiL3NlcnZsZXQvdGVzdC9lamIvbm9pbnRlcmZhY2ViZWFudmlldy9UZXN0U3VwZXJDbGFzcy5qYXZhCmluZGV4IGQwOTNkMWMuLmQ5MTc5Y2MgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9uby1pbnRlcmZhY2UtZWpiL3NlcnZsZXQvdGVzdC9lamIvbm9pbnRlcmZhY2ViZWFudmlldy9UZXN0U3VwZXJDbGFzcy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9uby1pbnRlcmZhY2UtZWpiL3NlcnZsZXQvdGVzdC9lamIvbm9pbnRlcmZhY2ViZWFudmlldy9UZXN0U3VwZXJDbGFzcy5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIGltcG9ydCBqYWthcnRhLmVudGVycHJpc2UuaW5qZWN0LkFsdGVybmF0aXZlOwogCi0gCisKIHB1YmxpYyBjbGFzcyBUZXN0U3VwZXJDbGFzcyBpbXBsZW1lbnRzIFRlc3RJbnRlcmZhY2V7CiAKICAgICBAT3ZlcnJpZGUKQEAgLTI2LDcgKzI2LDcgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJubyBpbnRlcmZhY2UgYmVhbjogbTEiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gbTJEZWZpbmVkSW5TdXBlckNsYXNzKCl7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibm8gaW50ZXJmYWNlIGJlYW46IG0yIik7CiAgICAgICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL25vLWludGVyZmFjZS1lamIvc2VydmxldC90ZXN0L3NlcnZsZXQvRm9vQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL25vLWludGVyZmFjZS1lamIvc2VydmxldC90ZXN0L3NlcnZsZXQvRm9vQmVhbi5qYXZhCmluZGV4IDQ0ZTFlY2UuLjg2ZjhiMjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9uby1pbnRlcmZhY2UtZWpiL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L0Zvb0JlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvbm8taW50ZXJmYWNlLWVqYi9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9Gb29CZWFuLmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKICAgICBASW5qZWN0VmlhQXRFSkIKICAgICBATm9JbnRlcmZhY2VCZWFuVmlldwogICAgIFRlc3RCZWFuSW50ZXJmYWNlIHRlc3RCZWFuRUpCOwotICAgIAorCiAgICAgcHVibGljIFRlc3RCZWFuSW50ZXJmYWNlIGdldEJlYW4oKXsKICAgICAgICAgcmV0dXJuIHRlc3RCZWFuRUpCOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9uby1pbnRlcmZhY2UtZWpiL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L05vSW50ZXJmYWNlRUpCVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9uby1pbnRlcmZhY2UtZWpiL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L05vSW50ZXJmYWNlRUpCVGVzdFNlcnZsZXQuamF2YQppbmRleCBkZjAwMGNhLi4xZGZmMTFhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvbm8taW50ZXJmYWNlLWVqYi9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9Ob0ludGVyZmFjZUVKQlRlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL25vLWludGVyZmFjZS1lamIvc2VydmxldC90ZXN0L3NlcnZsZXQvTm9JbnRlcmZhY2VFSkJUZXN0U2VydmxldC5qYXZhCkBAIC01NCw0NSArNTQsNDUgQEAKIC8vICAgIEBJbmplY3RWaWFBdEVKQgogLy8gICAgQExvY2FsRUpCCiAvLyAgICBUZXN0QmVhbkludGVyZmFjZSB0ZXN0TG9jYWxCZWFuRUpCOwotICAgIAorCiAgICAgQEluamVjdAogICAgIFRlc3RJbnRlcmZhY2UgdGk7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgVGVzdFN1cGVyQ2xhc3MgdGkxOwotICAgIAorCiAgICAgcHJvdGVjdGVkIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsCiAgICAgICAgICAgICBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwKICAgICAgICAgICAgIElPRXhjZXB0aW9uIHsKICAgICAgICAgUHJpbnRXcml0ZXIgd3JpdGVyID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7CiAgICAgICAgIHdyaXRlci53cml0ZSgiSGVsbG8gZnJvbSBTZXJ2bGV0IDMuMC4iKTsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIG1zZyA9ICIiOwogICAgICAgICAvL3Rlc3QgRUpCIGluamVjdGlvbiB2aWEgQEVKQgogICAgICAgICBTdHJpbmcgbSA9IGZiLmdldEJlYW4oKS5ydW5UZXN0cygpOwogICAgICAgICBpZiAoIW0uZXF1YWxzKCIiKSkKICAgICAgICAgICAgIG1zZyArPSAiSW52b2NhdGlvbiBvbiBuby1pbnRlcmZhY2UgRUpCIC0tIG9idGFpbmVkIHRocm91Z2ggQEVKQiAtLSBmYWlsZWQuIEZhaWxlZCB0ZXN0cyIgKyBtOwotICAgICAgICAKKwogICAgICAgICAvL3Rlc3QgRUpCIGluamVjdGlvbiB2aWEgQEluamVjdAogLy8gICAgICAgIG0gPSB0ZXN0QmVhbkluamVjdC5ydW5UZXN0cygpOwogLy8gICAgICAgIGlmICghbS5lcXVhbHMoIiIpKQogLy8gICAgICAgICAgICBtc2cgKz0gIkludm9jYXRpb24gb24gbm8taW50ZXJmYWNlIEVKQiAtLSBvYnRhaW5lZCB0aHJvdWdoIEBJbmplY3QgLS0gZmFpbGVkLiBGYWlsZWQgdGVzdHMiICsgbTsKIAotICAgICAgICAvL3Rlc3QgTm8tSW50ZXJmYWNlIEVKQiBpbmplY3Rpb24gdmlhIEBJbmplY3Qgb2YgYW4gaW50ZXJmYWNlIHRoZSAKKyAgICAgICAgLy90ZXN0IE5vLUludGVyZmFjZSBFSkIgaW5qZWN0aW9uIHZpYSBASW5qZWN0IG9mIGFuIGludGVyZmFjZSB0aGUKICAgICAgICAgLy9uby1pbnRlcmZhY2UgYmVhbiBpcyBpbXBsZW1lbnRpbmcKICAgICAgICAgaWYgKHRpICE9IG51bGwgJiYgISh0aS5tMURlZmluZWRJbkludGVyZmFjZSgpKSkKICAgICAgICAgICAgIG1zZyArPSAiSW52b2NhdGlvbiBvbiBuby1pbnRlcmZhY2UgRUpCIC0tIG9idGFpbmVkIHRocm91Z2ggQEluamVjdCAtLSAobWV0aG9kIGRlZmluZWQgaW4gc3VwZXIgaW50ZXJmYWNlKSBmYWlsZWQiOwotICAgICAgICAKLSAgICAgICAgLy90ZXN0IE5vLUludGVyZmFjZSBFSkIgaW5qZWN0aW9uIHZpYSBASW5qZWN0IG9mIGFuIGludGVyZmFjZSB0aGUgCisKKyAgICAgICAgLy90ZXN0IE5vLUludGVyZmFjZSBFSkIgaW5qZWN0aW9uIHZpYSBASW5qZWN0IG9mIGFuIGludGVyZmFjZSB0aGUKICAgICAgICAgLy9uby1pbnRlcmZhY2UgYmVhbiBpcyBpbXBsZW1lbnRpbmcKICAgICAgICAgaWYgKHRpMSAhPSBudWxsICYmICEodGkxLm0yRGVmaW5lZEluU3VwZXJDbGFzcygpKSkKICAgICAgICAgICAgIG1zZyArPSAiSW52b2NhdGlvbiBvbiBuby1pbnRlcmZhY2UgRUpCIC0tIG9idGFpbmVkIHRocm91Z2ggQEluamVjdCAtLSAobWV0aG9kIGRlZmluZWQgaW4gc3VwZXIgY2xhc3MpIGZhaWxlZCI7Ci0gICAgICAgIAorCiAgICAgICAgIC8vdGVzdCBsb2NhbCBFSkIgaW5qZWN0aW9uIHZpYSBARUpCCiAvLyAgICAgICAgbSA9IHRlc3RMb2NhbEJlYW5FSkIucnVuVGVzdHMoKTsKIC8vICAgICAgICBpZiAoIW0uZXF1YWxzKCIiKSkKIC8vICAgICAgICAgICAgbXNnICs9ICJJbnZvY2F0aW9uIG9uIGxvY2FsIEVKQiAtLSBvYnRhaW5lZCB0aHJvdWdoIEBFSkIgLS0gZmFpbGVkLiBGYWlsZWQgdGVzdHMiICsgbTsKLSAgICAgICAgCisKICAgICAgICAgLy90ZXN0IEVKQiBpbmplY3Rpb24gdmlhIEBJbmplY3QKIC8vICAgICAgICBtID0gdGVzdExvY2FsQmVhbkluamVjdC5ydW5UZXN0cygpOwogLy8gICAgICAgIGlmICghbS5lcXVhbHMoIiIpKQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL3Nsc2ItaW5qZWN0aW9uLWludG8tc2Vzc2lvbnNjb3BlZC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL3Nsc2ItaW5qZWN0aW9uLWludG8tc2Vzc2lvbnNjb3BlZC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDViOGJhMTEuLmJiN2I0OTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9zbHNiLWluamVjdGlvbi1pbnRvLXNlc3Npb25zY29wZWQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvc2xzYi1pbmplY3Rpb24taW50by1zZXNzaW9uc2NvcGVkL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tbm8taW50ZXJmYWNlLWVqYiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL3Nsc2ItaW5qZWN0aW9uLWludG8tc2Vzc2lvbnNjb3BlZC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvc2xzYi1pbmplY3Rpb24taW50by1zZXNzaW9uc2NvcGVkL2J1aWxkLnhtbAppbmRleCBhMGU2YTlkLi4yODI0YjU4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvc2xzYi1pbmplY3Rpb24taW50by1zZXNzaW9uc2NvcGVkL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvc2xzYi1pbmplY3Rpb24taW50by1zZXNzaW9uc2NvcGVkL2J1aWxkLnhtbApAQCAtMzMsNTQgKzMzLDU0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQsZGVwbG95LHJ1bix1bmRlcGxveSIgLz4KIAotCTx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iIC8+Ci0JCTxkZWxldGU+Ci0JCQk8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIiAvPgotCQkJPGZpbGVzZXQgZGlyPSJjbGllbnQvdGVzdC9jbGllbnQiIGluY2x1ZGVzPSIqLmNsYXNzIiAvPgotCQk8L2RlbGV0ZT4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIiAvPgorICAgICAgICA8ZGVsZXRlPgorICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIgLz4KKyAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iY2xpZW50L3Rlc3QvY2xpZW50IiBpbmNsdWRlcz0iKi5jbGFzcyIgLz4KKyAgICAgICAgPC9kZWxldGU+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+Ci0JCQk8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIgLz4KLQkJPC9hbnRjYWxsPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0IiAvPgorICAgICAgICA8L2FudGNhbGw+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLQkJPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIgLz4KLQkJPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+Ci0JCQk8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIiAvPgotCQkJPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiIC8+Ci0JCTwvYW50Y2FsbD4KKyAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIgLz4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIiAvPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiIC8+CisgICAgICAgIDwvYW50Y2FsbD4KIAotCQk8amF2YWMgc3JjZGlyPSJjbGllbnQiIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIgaW5jbHVkZXM9InRlc3QvY2xpZW50L1dlYlRlc3QuamF2YSIgLz4KKyAgICAgICAgPGphdmFjIHNyY2Rpcj0iY2xpZW50IiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiIGluY2x1ZGVzPSJ0ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEiIC8+CiAKLQk8L3RhcmdldD4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CisgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIAotCTx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iIC8+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIgLz4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxqYXZhIGNsYXNzbmFtZT0idGVzdC5jbGllbnQuV2ViVGVzdCI+Ci0JCQk8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iIC8+Ci0JCQk8YXJnIHZhbHVlPSIke2h0dHAucG9ydH0iIC8+Ci0JCQk8YXJnIHZhbHVlPSIke2NvbnRleHRyb290fSIgLz4KLQkJCTxjbGFzc3BhdGg+Ci0JCQkJPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIiAvPgotCQkJCTxwYXRoZWxlbWVudCBsb2NhdGlvbj0iY2xpZW50IiAvPgotCQkJPC9jbGFzc3BhdGg+Ci0JCTwvamF2YT4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8amF2YSBjbGFzc25hbWU9InRlc3QuY2xpZW50LldlYlRlc3QiPgorICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9IiAvPgorICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLnBvcnR9IiAvPgorICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtjb250ZXh0cm9vdH0iIC8+CisgICAgICAgICAgICA8Y2xhc3NwYXRoPgorICAgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIgLz4KKyAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImNsaWVudCIgLz4KKyAgICAgICAgICAgIDwvY2xhc3NwYXRoPgorICAgICAgICA8L2phdmE+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIgLz4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIgLz4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCQk8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIgLz4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iIC8+CisgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvc2xzYi1pbmplY3Rpb24taW50by1zZXNzaW9uc2NvcGVkL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0U2Vzc2lvblNjb3BlZEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9zbHNiLWluamVjdGlvbi1pbnRvLXNlc3Npb25zY29wZWQvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RTZXNzaW9uU2NvcGVkQmVhbi5qYXZhCmluZGV4IDY2N2E3MjkuLjRmMjNkYTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9zbHNiLWluamVjdGlvbi1pbnRvLXNlc3Npb25zY29wZWQvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RTZXNzaW9uU2NvcGVkQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9zbHNiLWluamVjdGlvbi1pbnRvLXNlc3Npb25zY29wZWQvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RTZXNzaW9uU2NvcGVkQmVhbi5qYXZhCkBAIC0zMiwxMSArMzIsMTEgQEAKIAogICAgIHB1YmxpYyBUZXN0U2Vzc2lvblNjb3BlZEJlYW4oKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdFNMU0JBY2Nlc3MoKXsKICAgICAgICAgaWYgKHN0YXRlbGVzc1Nlc3Npb25CZWFuICE9IG51bGwpCiAgICAgICAgICAgICByZXR1cm4gc3RhdGVsZXNzU2Vzc2lvbkJlYW4uc3RhdGVsZXNzTWV0aG9kMSgpOwogICAgICAgICBlbHNlIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9zbHNiLWluamVjdGlvbi1pbnRvLXNlc3Npb25zY29wZWQvc2VydmxldC90ZXN0L2JlYW5zL25vbm1vY2svbm9pbnRlcmZhY2ViZWFudmlldy9UZXN0QmVhblN1cGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvc2xzYi1pbmplY3Rpb24taW50by1zZXNzaW9uc2NvcGVkL3NlcnZsZXQvdGVzdC9iZWFucy9ub25tb2NrL25vaW50ZXJmYWNlYmVhbnZpZXcvVGVzdEJlYW5TdXBlci5qYXZhCmluZGV4IDVhMzhmOTAuLjAyMzUxMjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9zbHNiLWluamVjdGlvbi1pbnRvLXNlc3Npb25zY29wZWQvc2VydmxldC90ZXN0L2JlYW5zL25vbm1vY2svbm9pbnRlcmZhY2ViZWFudmlldy9UZXN0QmVhblN1cGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL3Nsc2ItaW5qZWN0aW9uLWludG8tc2Vzc2lvbnNjb3BlZC9zZXJ2bGV0L3Rlc3QvYmVhbnMvbm9ubW9jay9ub2ludGVyZmFjZWJlYW52aWV3L1Rlc3RCZWFuU3VwZXIuamF2YQpAQCAtMjAsNyArMjAsNyBAQAogaW1wb3J0IHRlc3QuZWpiLm5vaW50ZXJmYWNlYmVhbnZpZXcuVGVzdE5vSW50ZXJmYWNlRUpCOwogCiBhYnN0cmFjdCBjbGFzcyBUZXN0QmVhblN1cGVyIGltcGxlbWVudHMgVGVzdEJlYW5JbnRlcmZhY2UgewotICAgIAorCiAgICAgYWJzdHJhY3QgVGVzdE5vSW50ZXJmYWNlRUpCIGdldFRlc3RFSkIoKTsKIAogICAgIEBPdmVycmlkZQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL3Nsc2ItaW5qZWN0aW9uLWludG8tc2Vzc2lvbnNjb3BlZC9zZXJ2bGV0L3Rlc3QvZWpiL2xvY2FsL1Rlc3RTdXBlckNsYXNzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvc2xzYi1pbmplY3Rpb24taW50by1zZXNzaW9uc2NvcGVkL3NlcnZsZXQvdGVzdC9lamIvbG9jYWwvVGVzdFN1cGVyQ2xhc3MuamF2YQppbmRleCA0YTQxOWMwLi42MWRiOWZhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvc2xzYi1pbmplY3Rpb24taW50by1zZXNzaW9uc2NvcGVkL3NlcnZsZXQvdGVzdC9lamIvbG9jYWwvVGVzdFN1cGVyQ2xhc3MuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvc2xzYi1pbmplY3Rpb24taW50by1zZXNzaW9uc2NvcGVkL3NlcnZsZXQvdGVzdC9lamIvbG9jYWwvVGVzdFN1cGVyQ2xhc3MuamF2YQpAQCAtMTgsNyArMTgsNyBAQAogCiBpbXBvcnQgamFrYXJ0YS5lbnRlcnByaXNlLmluamVjdC5BbHRlcm5hdGl2ZTsKIAotIAorCiAvL21hcmtlZCBhcyBBbHRlcm5hdGl2ZSwgb3RoZXJ3aXNlIHRoZXJlIHdvdWxkCiAvL2FuIGFtYmlndW91cyBkZWZpbml0aW9uIGZvciBUZXN0TG9jYWxJbnRlcmZhY2UgYmV0d2VlbiB0aGlzCiAvL3N1cGVyIGNsYXNzIGFuZCB0aGUgVGVzdExvY2FsRUpCCkBAIC0yOSw3ICsyOSw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibG9jYWwgYmVhbjogbTEiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gbTJEZWZpbmVkSW5TdXBlckNsYXNzKCl7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibG9jYWw6IG0yIik7CiAgICAgICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL3Nsc2ItaW5qZWN0aW9uLWludG8tc2Vzc2lvbnNjb3BlZC9zZXJ2bGV0L3Rlc3QvZWpiL25vaW50ZXJmYWNlYmVhbnZpZXcvVGVzdFN1cGVyQ2xhc3MuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9zbHNiLWluamVjdGlvbi1pbnRvLXNlc3Npb25zY29wZWQvc2VydmxldC90ZXN0L2VqYi9ub2ludGVyZmFjZWJlYW52aWV3L1Rlc3RTdXBlckNsYXNzLmphdmEKaW5kZXggZGJhMjhlNi4uYTAxYzFjNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL3Nsc2ItaW5qZWN0aW9uLWludG8tc2Vzc2lvbnNjb3BlZC9zZXJ2bGV0L3Rlc3QvZWpiL25vaW50ZXJmYWNlYmVhbnZpZXcvVGVzdFN1cGVyQ2xhc3MuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvc2xzYi1pbmplY3Rpb24taW50by1zZXNzaW9uc2NvcGVkL3NlcnZsZXQvdGVzdC9lamIvbm9pbnRlcmZhY2ViZWFudmlldy9UZXN0U3VwZXJDbGFzcy5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIGltcG9ydCBqYWthcnRhLmVudGVycHJpc2UuaW5qZWN0LkFsdGVybmF0aXZlOwogCi0gCisKIC8vbWFya2VkIGFzIEFsdGVybmF0aXZlLCBvdGhlcndpc2UgdGhlcmUgd291bGQKIC8vYW4gYW1iaWd1b3VzIGRlZmluaXRpb24gZm9yIFRlc3RMb2NhbEludGVyZmFjZSBiZXR3ZWVuIHRoaXMKIC8vc3VwZXIgY2xhc3MgYW5kIHRoZSBUZXN0TG9jYWxFSkIKQEAgLTI5LDcgKzI5LDcgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJubyBpbnRlcmZhY2UgYmVhbjogbTEiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gbTJEZWZpbmVkSW5TdXBlckNsYXNzKCl7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibm8gaW50ZXJmYWNlIGJlYW46IG0yIik7CiAgICAgICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL3Nsc2ItaW5qZWN0aW9uLWludG8tc2Vzc2lvbnNjb3BlZC9zZXJ2bGV0L3Rlc3QvZWpiL3Nsc2IvVGVzdFNMU0IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9zbHNiLWluamVjdGlvbi1pbnRvLXNlc3Npb25zY29wZWQvc2VydmxldC90ZXN0L2VqYi9zbHNiL1Rlc3RTTFNCLmphdmEKaW5kZXggMjAyZDdkYS4uMjg3NWQ1MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL3Nsc2ItaW5qZWN0aW9uLWludG8tc2Vzc2lvbnNjb3BlZC9zZXJ2bGV0L3Rlc3QvZWpiL3Nsc2IvVGVzdFNMU0IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvc2xzYi1pbmplY3Rpb24taW50by1zZXNzaW9uc2NvcGVkL3NlcnZsZXQvdGVzdC9lamIvc2xzYi9UZXN0U0xTQi5qYXZhCkBAIC0yNiw5ICsyNiw5IEBACiAKICAgICBwdWJsaWMgVGVzdFNMU0IoKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gc3RhdGVsZXNzTWV0aG9kMSgpewogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9zbHNiLWluamVjdGlvbi1pbnRvLXNlc3Npb25zY29wZWQvc2VydmxldC90ZXN0L3NlcnZsZXQvU0xTQkluamVjdGlvbkludG9TZXNzaW9uU2NvcGVkQmVhblRlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWNvbXBvbmVudC1yZXNvdXJjZXMvc2xzYi1pbmplY3Rpb24taW50by1zZXNzaW9uc2NvcGVkL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1NMU0JJbmplY3Rpb25JbnRvU2Vzc2lvblNjb3BlZEJlYW5UZXN0U2VydmxldC5qYXZhCmluZGV4IDRhYzkyNzQuLmRlZjAyMzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtY29tcG9uZW50LXJlc291cmNlcy9zbHNiLWluamVjdGlvbi1pbnRvLXNlc3Npb25zY29wZWQvc2VydmxldC90ZXN0L3NlcnZsZXQvU0xTQkluamVjdGlvbkludG9TZXNzaW9uU2NvcGVkQmVhblRlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1jb21wb25lbnQtcmVzb3VyY2VzL3Nsc2ItaW5qZWN0aW9uLWludG8tc2Vzc2lvbnNjb3BlZC9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9TTFNCSW5qZWN0aW9uSW50b1Nlc3Npb25TY29wZWRCZWFuVGVzdFNlcnZsZXQuamF2YQpAQCAtNTcsNTMgKzU3LDUzIEBACiAgICAgQEluamVjdFZpYUF0RUpCCiAgICAgQExvY2FsRUpCCiAgICAgVGVzdEJlYW5JbnRlcmZhY2UgdGVzdExvY2FsQmVhbkVKQjsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBUZXN0SW50ZXJmYWNlIHRpOwotICAgIAorCiAgICAgQEluamVjdAogICAgIFRlc3RTdXBlckNsYXNzIHRpMTsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBUZXN0U2Vzc2lvblNjb3BlZEJlYW4gdHNzYjsKLSAgICAKKwogICAgIHByb3RlY3RlZCB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LAogICAgICAgICAgICAgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sCiAgICAgICAgICAgICBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIFByaW50V3JpdGVyIHdyaXRlciA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwogICAgICAgICB3cml0ZXIud3JpdGUoIkhlbGxvIGZyb20gU2VydmxldCAzLjAuIik7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyBtc2cgPSAiIjsKICAgICAgICAgLy90ZXN0IEVKQiBpbmplY3Rpb24gdmlhIEBFSkIKICAgICAgICAgU3RyaW5nIG0gPSB0ZXN0QmVhbkVKQi5ydW5UZXN0cygpOwogICAgICAgICBpZiAoIW0uZXF1YWxzKCIiKSkKICAgICAgICAgICAgIG1zZyArPSAiSW52b2NhdGlvbiBvbiBuby1pbnRlcmZhY2UgRUpCIC0tIG9idGFpbmVkIHRocm91Z2ggQEVKQiAtLSBmYWlsZWQuIEZhaWxlZCB0ZXN0cyIgKyBtOwotICAgICAgICAKKwogICAgICAgICAvL3Rlc3QgRUpCIGluamVjdGlvbiB2aWEgQEluamVjdAogICAgICAgICBtID0gdGVzdEJlYW5JbmplY3QucnVuVGVzdHMoKTsKICAgICAgICAgaWYgKCFtLmVxdWFscygiIikpCiAgICAgICAgICAgICBtc2cgKz0gIkludm9jYXRpb24gb24gbm8taW50ZXJmYWNlIEVKQiAtLSBvYnRhaW5lZCB0aHJvdWdoIEBJbmplY3QgLS0gZmFpbGVkLiBGYWlsZWQgdGVzdHMiICsgbTsKIAotICAgICAgICAvL3Rlc3QgTm8tSW50ZXJmYWNlIEVKQiBpbmplY3Rpb24gdmlhIEBJbmplY3Qgb2YgYW4gaW50ZXJmYWNlIHRoZSAKKyAgICAgICAgLy90ZXN0IE5vLUludGVyZmFjZSBFSkIgaW5qZWN0aW9uIHZpYSBASW5qZWN0IG9mIGFuIGludGVyZmFjZSB0aGUKICAgICAgICAgLy9uby1pbnRlcmZhY2UgYmVhbiBpcyBpbXBsZW1lbnRpbmcKICAgICAgICAgaWYgKHRpICE9IG51bGwgJiYgISh0aS5tMURlZmluZWRJbkludGVyZmFjZSgpKSkKICAgICAgICAgICAgIG1zZyArPSAiSW52b2NhdGlvbiBvbiBuby1pbnRlcmZhY2UgRUpCIC0tIG9idGFpbmVkIHRocm91Z2ggQEluamVjdCAtLSAobWV0aG9kIGRlZmluZWQgaW4gc3VwZXIgaW50ZXJmYWNlKSBmYWlsZWQiOwotICAgICAgICAKLSAgICAgICAgLy90ZXN0IE5vLUludGVyZmFjZSBFSkIgaW5qZWN0aW9uIHZpYSBASW5qZWN0IG9mIGFuIGludGVyZmFjZSB0aGUgCisKKyAgICAgICAgLy90ZXN0IE5vLUludGVyZmFjZSBFSkIgaW5qZWN0aW9uIHZpYSBASW5qZWN0IG9mIGFuIGludGVyZmFjZSB0aGUKICAgICAgICAgLy9uby1pbnRlcmZhY2UgYmVhbiBpcyBpbXBsZW1lbnRpbmcKICAgICAgICAgaWYgKHRpMSAhPSBudWxsICYmICEodGkxLm0yRGVmaW5lZEluU3VwZXJDbGFzcygpKSkKICAgICAgICAgICAgIG1zZyArPSAiSW52b2NhdGlvbiBvbiBuby1pbnRlcmZhY2UgRUpCIC0tIG9idGFpbmVkIHRocm91Z2ggQEluamVjdCAtLSAobWV0aG9kIGRlZmluZWQgaW4gc3VwZXIgY2xhc3MpIGZhaWxlZCI7Ci0gICAgICAgIAorCiAgICAgICAgIC8vdGVzdCBsb2NhbCBFSkIgaW5qZWN0aW9uIHZpYSBARUpCCiAgICAgICAgIG0gPSB0ZXN0TG9jYWxCZWFuRUpCLnJ1blRlc3RzKCk7CiAgICAgICAgIGlmICghbS5lcXVhbHMoIiIpKQogICAgICAgICAgICAgbXNnICs9ICJJbnZvY2F0aW9uIG9uIGxvY2FsIEVKQiAtLSBvYnRhaW5lZCB0aHJvdWdoIEBFSkIgLS0gZmFpbGVkLiBGYWlsZWQgdGVzdHMiICsgbTsKLSAgICAgICAgCisKICAgICAgICAgLy90ZXN0IEVKQiBpbmplY3Rpb24gdmlhIEBJbmplY3QKICAgICAgICAgbSA9IHRlc3RMb2NhbEJlYW5JbmplY3QucnVuVGVzdHMoKTsKICAgICAgICAgaWYgKCFtLmVxdWFscygiIikpCiAgICAgICAgICAgICBtc2cgKz0gIkludm9jYXRpb24gb24gbG9jYWwgRUpCIC0tIG9idGFpbmVkIHRocm91Z2ggQEluamVjdCAtLSBmYWlsZWQuIEZhaWxlZCB0ZXN0cyIgKyBtOwotICAgICAgICAKKwogICAgICAgICBpZiAoIXRzc2IudGVzdFNMU0JBY2Nlc3MoKSkKICAgICAgICAgICAgIG1zZyArPSAiU3RhdGVsZXNzIFNlc3Npb24gQmVhbiBpbnRvIHNlc3Npb24gc2NvcGVkIGJlYW4gZmFpbGVkIjsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9iZWFuLWluLWxpYi1kaXItdXNlZC1ieS1lamItaW4tZWFyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2JlYW4taW4tbGliLWRpci11c2VkLWJ5LWVqYi1pbi1lYXIvYnVpbGQucHJvcGVydGllcwppbmRleCBiYzE1YjYwLi5kOWU3Y2IzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2JlYW4taW4tbGliLWRpci11c2VkLWJ5LWVqYi1pbi1lYXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2JlYW4taW4tbGliLWRpci11c2VkLWJ5LWVqYi1pbi1lYXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJiZWFuLWluLWxpYi1kaXItdXNlZC1ieS1lamItaW4tZWFyIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InNlLmNsaWVudCIgdmFsdWU9ImNvbS5hY21lLkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vYmVhbi1pbi1saWItZGlyLXVzZWQtYnktZWpiLWluLWVhci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2JlYW4taW4tbGliLWRpci11c2VkLWJ5LWVqYi1pbi1lYXIvYnVpbGQueG1sCmluZGV4IGIwZDUzNzIuLjVhODNiNWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vYmVhbi1pbi1saWItZGlyLXVzZWQtYnktZWpiLWluLWVhci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9iZWFuLWluLWxpYi1kaXItdXNlZC1ieS1lamItaW4tZWFyL2J1aWxkLnhtbApAQCAtMzEsMTAwICszMSwxMDAgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJjbGVhbixidWlsZCxkZXBsb3kscnVuLHVuZGVwbG95IiAvPgogCi0JPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIgLz4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIiAvPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+Ci0JCTwhLS0gY29tcGlsZSBsaWJyYXJ5IC0tPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJsaWIiIC8+Ci0JCTwvYW50Y2FsbD4KKyAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KKyAgICAgICAgPCEtLSBjb21waWxlIGxpYnJhcnkgLS0+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImxpYiIgLz4KKyAgICAgICAgPC9hbnRjYWxsPgogCiAKLQkJPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+Ci0JCQk8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIiAvPgotCQk8L2FudGNhbGw+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIgLz4KKyAgICAgICAgPC9hbnRjYWxsPgogCiAKLQkJPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+Ci0JCQk8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0id2FyIiAvPgotCQk8L2FudGNhbGw+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9IndhciIgLz4KKyAgICAgICAgPC9hbnRjYWxsPgogCiAKLQkJPGphdmFjIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiBzcmNkaXI9ImNsaWVudCIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIGRlYnVnPSJvbiIgZmFpbG9uZXJyb3I9InRydWUiPgotCQk8L2phdmFjPgotCTwvdGFyZ2V0PgorICAgICAgICA8amF2YWMgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIHNyY2Rpcj0iY2xpZW50IiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgZGVidWc9Im9uIiBmYWlsb25lcnJvcj0idHJ1ZSI+CisgICAgICAgIDwvamF2YWM+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLQkJPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9IiAvPgorICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgorICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iIC8+CiAKLQkJPCEtLSBidWlsZCBsaWJyYXJ5IGphciAtLT4KLQkJPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiIC8+Ci0JCTxjb3B5IGZpbGU9IiR7cGVyc2lzdGVuY2UueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9wZXJzaXN0ZW5jZS54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIgLz4KLQkJPGNvcHkgZmlsZT0iJHtiZWFucy54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2JlYW5zLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIiAvPgotCQk8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9saWItZGlyIiAvPgotCQk8amFyIGphcmZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2xpYi1kaXIvbGliLmphciIgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIGluY2x1ZGVzPSJjb20vYWNtZS91dGlsLyouY2xhc3MsIGNvbS9hY21lL2VqYi9hcGkvKi5jbGFzcyI+Ci0JCQk8bWV0YWluZiBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIj4KLQkJCQk8aW5jbHVkZSBuYW1lPSJwZXJzaXN0ZW5jZS54bWwiIC8+Ci0JCQkJPGluY2x1ZGUgbmFtZT0iYmVhbnMueG1sIiAvPgotCQkJPC9tZXRhaW5mPgotCQk8L2phcj4KLQkJPGNvcHkgZmlsZT0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9saWItZGlyIiAvPgorICAgICAgICA8IS0tIGJ1aWxkIGxpYnJhcnkgamFyIC0tPgorICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIgLz4KKyAgICAgICAgPGNvcHkgZmlsZT0iJHtwZXJzaXN0ZW5jZS54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3BlcnNpc3RlbmNlLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIiAvPgorICAgICAgICA8Y29weSBmaWxlPSIke2JlYW5zLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvYmVhbnMueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiIC8+CisgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2xpYi1kaXIiIC8+CisgICAgICAgIDxqYXIgamFyZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vbGliLWRpci9saWIuamFyIiBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgaW5jbHVkZXM9ImNvbS9hY21lL3V0aWwvKi5jbGFzcywgY29tL2FjbWUvZWpiL2FwaS8qLmNsYXNzIj4KKyAgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiPgorICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InBlcnNpc3RlbmNlLnhtbCIgLz4KKyAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJiZWFucy54bWwiIC8+CisgICAgICAgICAgICA8L21ldGFpbmY+CisgICAgICAgIDwvamFyPgorICAgICAgICA8Y29weSBmaWxlPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2xpYi1kaXIiIC8+CiAKLQkJPCEtLSBidWlsZCBFSkIgamFyIC0tPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImVqYi1qYXItY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgdmFsdWU9ImNvbS9hY21lL2VqYi9pbXBsLyouY2xhc3MiIC8+Ci0JCTwvYW50Y2FsbD4KKyAgICAgICAgPCEtLSBidWlsZCBFSkIgamFyIC0tPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVqYi1qYXItY29tbW9uIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgdmFsdWU9ImNvbS9hY21lL2VqYi9pbXBsLyouY2xhc3MiIC8+CisgICAgICAgIDwvYW50Y2FsbD4KIAotCQk8IS0tIGRlbGV0ZSBFSkIgaW1wbCBhbmQgbGliIGNsYXNzZXMgYXMgV0FSIHNob3VsZCBub3QgaGF2ZSB0aGVtIC0tPgotCQk8ZGVsZXRlIGluY2x1ZGVFbXB0eURpcnM9InRydWUiPgotCQkJPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jb20vYWNtZS9lamIvIiAvPgotCQkJPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jb20vYWNtZS91dGlsLyIgLz4KLQkJPC9kZWxldGU+CisgICAgICAgIDwhLS0gZGVsZXRlIEVKQiBpbXBsIGFuZCBsaWIgY2xhc3NlcyBhcyBXQVIgc2hvdWxkIG5vdCBoYXZlIHRoZW0gLS0+CisgICAgICAgIDxkZWxldGUgaW5jbHVkZUVtcHR5RGlycz0idHJ1ZSI+CisgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NvbS9hY21lL2VqYi8iIC8+CisgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NvbS9hY21lL3V0aWwvIiAvPgorICAgICAgICA8L2RlbGV0ZT4KIAotCQk8IS0tIGNyZWF0ZSBXQVIgLS0+Ci0JCTxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgotCQkJPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InRydWUiIC8+Ci0JCTwvYW50Y2FsbD4KKyAgICAgICAgPCEtLSBjcmVhdGUgV0FSIC0tPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ0cnVlIiAvPgorICAgICAgICA8L2FudGNhbGw+CiAKLQkJPCEtLSBhc3NlbWJsZSBFQVIgLS0+Ci0JCTxkZWxldGUgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0uZWFyIiAvPgotCQk8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iIC8+Ci0JCTxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIiAvPgotCQk8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIgLz4KLQkJPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtcmVzb3VyY2VzLWVhci54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiIGZpbHRlcmluZz0idHJ1ZSIgLz4KLQkJPGVhciBlYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiIGFwcHhtbD0iJHthcHBsaWNhdGlvbi54bWx9Ij4KLQkJCTxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KLQkJCQk8aW5jbHVkZSBuYW1lPSIqLmphciIgLz4KLQkJCQk8aW5jbHVkZSBuYW1lPSIqLndhciIgLz4KLQkJCTwvZmlsZXNldD4KLQkJCTxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iPgotCQkJCTxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiIC8+Ci0JCQkJPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwiIC8+Ci0JCQk8L2ZpbGVzZXQ+Ci0JCQk8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiBpbmNsdWRlcz0ibGliLWRpci8qIiAvPgotCQk8L2Vhcj4KKyAgICAgICAgPCEtLSBhc3NlbWJsZSBFQVIgLS0+CisgICAgICAgIDxkZWxldGUgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0uZWFyIiAvPgorICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iIC8+CisgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIiAvPgorICAgICAgICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIgLz4KKyAgICAgICAgPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtcmVzb3VyY2VzLWVhci54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiIGZpbHRlcmluZz0idHJ1ZSIgLz4KKyAgICAgICAgPGVhciBlYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiIGFwcHhtbD0iJHthcHBsaWNhdGlvbi54bWx9Ij4KKyAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KKyAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLmphciIgLz4KKyAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLndhciIgLz4KKyAgICAgICAgICAgIDwvZmlsZXNldD4KKyAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iPgorICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiIC8+CisgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwiIC8+CisgICAgICAgICAgICA8L2ZpbGVzZXQ+CisgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiBpbmNsdWRlcz0ibGliLWRpci8qIiAvPgorICAgICAgICA8L2Vhcj4KIAotCTwvdGFyZ2V0PgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIiAvPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIgLz4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxqYXZhIGZvcms9Im9uIiBmYWlsb25lcnJvcj0idHJ1ZSIgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIGNsYXNzbmFtZT0iJHtzZS5jbGllbnR9Ij4KLQkJCTxhcmcgbGluZT0iJHtjb250ZXh0cm9vdH0iIC8+Ci0JCQk8YXJnIGxpbmU9IiR7aHR0cC5ob3N0fSIgLz4KLQkJCTxhcmcgbGluZT0iJHtodHRwLnBvcnR9IiAvPgotCQk8L2phdmE+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGphdmEgZm9yaz0ib24iIGZhaWxvbmVycm9yPSJ0cnVlIiBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgY2xhc3NuYW1lPSIke3NlLmNsaWVudH0iPgorICAgICAgICAgICAgPGFyZyBsaW5lPSIke2NvbnRleHRyb290fSIgLz4KKyAgICAgICAgICAgIDxhcmcgbGluZT0iJHtodHRwLmhvc3R9IiAvPgorICAgICAgICAgICAgPGFyZyBsaW5lPSIke2h0dHAucG9ydH0iIC8+CisgICAgICAgIDwvamF2YT4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iIC8+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIgLz4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCQk8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIgLz4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iIC8+CisgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2JlYW4taW4tbGliLWRpci11c2VkLWJ5LWVqYi1pbi1lYXIvY2xpZW50L2NvbS9hY21lL0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9iZWFuLWluLWxpYi1kaXItdXNlZC1ieS1lamItaW4tZWFyL2NsaWVudC9jb20vYWNtZS9DbGllbnQuamF2YQppbmRleCBiMGI2NGI5Li40M2MwZWZhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2JlYW4taW4tbGliLWRpci11c2VkLWJ5LWVqYi1pbi1lYXIvY2xpZW50L2NvbS9hY21lL0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vYmVhbi1pbi1saWItZGlyLXVzZWQtYnktZWpiLWluLWVhci9jbGllbnQvY29tL2FjbWUvQ2xpZW50LmphdmEKQEAgLTMwLDcgKzMwLDcgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX05BTUUgPSAiYmVhbi1pbi1saWItZGlyLW9mLWVhci11c2VkLWJ5LWVqYiI7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgYXBwTmFtZTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vYmVhbi1pbi1saWItZGlyLXVzZWQtYnktZWpiLWluLWVhci9lamIvY29tL2FjbWUvZWpiL2ltcGwvSGVsbG9TaW5nbGV0b24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vYmVhbi1pbi1saWItZGlyLXVzZWQtYnktZWpiLWluLWVhci9lamIvY29tL2FjbWUvZWpiL2ltcGwvSGVsbG9TaW5nbGV0b24uamF2YQppbmRleCA4MTQ0NTFmLi5hZmU5ZDU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2JlYW4taW4tbGliLWRpci11c2VkLWJ5LWVqYi1pbi1lYXIvZWpiL2NvbS9hY21lL2VqYi9pbXBsL0hlbGxvU2luZ2xldG9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9iZWFuLWluLWxpYi1kaXItdXNlZC1ieS1lamItaW4tZWFyL2VqYi9jb20vYWNtZS9lamIvaW1wbC9IZWxsb1NpbmdsZXRvbi5qYXZhCkBAIC00NSwxNiArNDUsMTYgQEAKICAgICBAUGVyc2lzdGVuY2VVbml0KHVuaXROYW1lID0gInB1MSIpCiAgICAgQFRlc3REYXRhYmFzZQogICAgIHByaXZhdGUgRW50aXR5TWFuYWdlckZhY3RvcnkgZW1mOwotICAgIAorCiAgICAgQEluamVjdAogICAgIFRlc3RNYW5hZ2VkQmVhbiB0bWI7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgVGVzdERlcGVuZGVudEJlYW5JbkxpYiB0ZGJpbDsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBUZXN0U2Vzc2lvblNjb3BlZEJlYW5JbkxpYiB0c3NpbDsKLSAgICAKKwogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdCgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vYmVhbi1pbi1saWItZGlyLXVzZWQtYnktZWpiLWluLWVhci9lamIvY29tL2FjbWUvZWpiL2ltcGwvU2luZ2xldG9uNC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9iZWFuLWluLWxpYi1kaXItdXNlZC1ieS1lamItaW4tZWFyL2VqYi9jb20vYWNtZS9lamIvaW1wbC9TaW5nbGV0b240LmphdmEKaW5kZXggYTU0YzU5ZS4uNmFhMWYyNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9iZWFuLWluLWxpYi1kaXItdXNlZC1ieS1lamItaW4tZWFyL2VqYi9jb20vYWNtZS9lamIvaW1wbC9TaW5nbGV0b240LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9iZWFuLWluLWxpYi1kaXItdXNlZC1ieS1lamItaW4tZWFyL2VqYi9jb20vYWNtZS9lamIvaW1wbC9TaW5nbGV0b240LmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKICAgICBwdWJsaWMgdm9pZCBpbml0KCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW40Ojppbml0KCkiKTsKICAgICB9Ci0gICAgCisKICAgICBAUHJlRGVzdHJveQogICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjQ6OmRlc3Ryb3koKSIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9iZWFuLWluLWxpYi1kaXItdXNlZC1ieS1lamItaW4tZWFyL2xpYi9jb20vYWNtZS91dGlsL1Jlc291cmNlc1Byb2R1Y2VyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2JlYW4taW4tbGliLWRpci11c2VkLWJ5LWVqYi1pbi1lYXIvbGliL2NvbS9hY21lL3V0aWwvUmVzb3VyY2VzUHJvZHVjZXIuamF2YQppbmRleCBlYTAyOWFjLi45NmUyZDBhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2JlYW4taW4tbGliLWRpci11c2VkLWJ5LWVqYi1pbi1lYXIvbGliL2NvbS9hY21lL3V0aWwvUmVzb3VyY2VzUHJvZHVjZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2JlYW4taW4tbGliLWRpci11c2VkLWJ5LWVqYi1pbi1lYXIvbGliL2NvbS9hY21lL3V0aWwvUmVzb3VyY2VzUHJvZHVjZXIuamF2YQpAQCAtMjgsMTAgKzI4LDEwIEBACiAgICAgQFBlcnNpc3RlbmNlQ29udGV4dCh1bml0TmFtZSA9ICJwdTEiKQogICAgIEBUZXN0RGF0YWJhc2UKICAgICBFbnRpdHlNYW5hZ2VyIGN1c3RvbWVyRGF0YWJhc2VQZXJzaXN0ZW5jZVVuaXQ7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgVGVzdERlcGVuZGVudEJlYW5JbkxpYiBmb287Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBpc0luamVjdGlvblN1Y2Nlc3NmdWwoKXsKICAgICAgICAgcmV0dXJuIChmb28gIT0gbnVsbCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9iZWFuLWluLWxpYi1kaXItdXNlZC1ieS1lamItaW4tZWFyL2xpYi9jb20vYWNtZS91dGlsL1Rlc3REZXBlbmRlbnRCZWFuSW5MaWIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vYmVhbi1pbi1saWItZGlyLXVzZWQtYnktZWpiLWluLWVhci9saWIvY29tL2FjbWUvdXRpbC9UZXN0RGVwZW5kZW50QmVhbkluTGliLmphdmEKaW5kZXggOTU5NmIyMi4uNjFkNDliNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9iZWFuLWluLWxpYi1kaXItdXNlZC1ieS1lamItaW4tZWFyL2xpYi9jb20vYWNtZS91dGlsL1Rlc3REZXBlbmRlbnRCZWFuSW5MaWIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2JlYW4taW4tbGliLWRpci11c2VkLWJ5LWVqYi1pbi1lYXIvbGliL2NvbS9hY21lL3V0aWwvVGVzdERlcGVuZGVudEJlYW5JbkxpYi5qYXZhCkBAIC0yMSw3ICsyMSw3IEBACiAgICAgcHVibGljIFRlc3REZXBlbmRlbnRCZWFuSW5MaWIoKSB7CiAgICAgICAgIHN1cGVyKCk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBmb28oKXsKICAgICAgICAgcmV0dXJuICJmb28hIjsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2JlYW4taW4tbGliLWRpci11c2VkLWJ5LWVqYi1pbi1lYXIvbGliL2NvbS9hY21lL3V0aWwvVXRpbEluTGliRGlyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2JlYW4taW4tbGliLWRpci11c2VkLWJ5LWVqYi1pbi1lYXIvbGliL2NvbS9hY21lL3V0aWwvVXRpbEluTGliRGlyLmphdmEKaW5kZXggMThlNzZhYi4uOWVmNmQ2MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9iZWFuLWluLWxpYi1kaXItdXNlZC1ieS1lamItaW4tZWFyL2xpYi9jb20vYWNtZS91dGlsL1V0aWxJbkxpYkRpci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vYmVhbi1pbi1saWItZGlyLXVzZWQtYnktZWpiLWluLWVhci9saWIvY29tL2FjbWUvdXRpbC9VdGlsSW5MaWJEaXIuamF2YQpAQCAtMTcsMTAgKzE3LDEwIEBACiBwYWNrYWdlIGNvbS5hY21lLnV0aWw7CiAKIHB1YmxpYyBjbGFzcyBVdGlsSW5MaWJEaXIgewotICAgIAorCiAgICAgcHVibGljIGludCBhZGQoaW50IGkxLCBpbnQgaTIpIHsKICAgICAgICAgcmV0dXJuIGkxK2kyOwogICAgIH0KLSAgICAKKwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2JlYW4taW4tbGliLWRpci11c2VkLWJ5LWVqYi1pbi1lYXIvd2FyL2NvbS9hY21lL3NlcnZsZXQvSGVsbG9TZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2JlYW4taW4tbGliLWRpci11c2VkLWJ5LWVqYi1pbi1lYXIvd2FyL2NvbS9hY21lL3NlcnZsZXQvSGVsbG9TZXJ2bGV0LmphdmEKaW5kZXggNTUwYjBhMy4uYjYyMjU5MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9iZWFuLWluLWxpYi1kaXItdXNlZC1ieS1lamItaW4tZWFyL3dhci9jb20vYWNtZS9zZXJ2bGV0L0hlbGxvU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vYmVhbi1pbi1saWItZGlyLXVzZWQtYnktZWpiLWluLWVhci93YXIvY29tL2FjbWUvc2VydmxldC9IZWxsb1NlcnZsZXQuamF2YQpAQCAtMzcsNjAgKzM3LDYwIEBACiBAU3VwcHJlc3NXYXJuaW5ncygic2VyaWFsIikKIHB1YmxpYyBjbGFzcyBIZWxsb1NlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAgICAgU3RyaW5nIG1zZyA9ICIiOwotICAgIAorCiAgICAgQEVKQihuYW1lID0gImphdmE6bW9kdWxlL20xIiwgYmVhbk5hbWUgPSAiSGVsbG9TaW5nbGV0b24iLCBiZWFuSW50ZXJmYWNlID0gSGVsbG8uY2xhc3MpCiAgICAgSGVsbG8gaDsKLSAgICAKKwogICAgIEBQZXJzaXN0ZW5jZVVuaXQodW5pdE5hbWUgPSAicHUxIikKICAgICBAVGVzdERhdGFiYXNlCiAgICAgcHJpdmF0ZSBFbnRpdHlNYW5hZ2VyRmFjdG9yeSBlbWY7CiAKIC8vICAgIEBJbmplY3QKIC8vICAgIHByaXZhdGUgUmVzb3VyY2VzUHJvZHVjZXIgcnA7Ci0vLyAgICAKKy8vCiAvLyAgICBASW5qZWN0CiAvLyAgICBwcml2YXRlIFRlc3REZXBlbmRlbnRCZWFuSW5MaWIgZmI7Ci0gICAgCisKIC8vICAgIEBJbmplY3QKIC8vICAgIHByaXZhdGUgVGVzdE1hbmFnZWRCZWFuIHRtYjsKLSAgICAKKwogLy8gICAgQEluamVjdAogLy8gICAgcHJpdmF0ZSBUZXN0U2Vzc2lvblNjb3BlZEJlYW5JbkxpYiB0c3NpbDsKLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIHByb3RlY3RlZCB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkKICAgICAgICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TZXJ2bGV0Ojpkb0dldCIpOwogICAgICAgICByZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcC5nZXRXcml0ZXIoKTsKLSAgICAgICAgCisKICAgICAgICAgY2hlY2tGb3JOdWxsKGVtZiwgIkluamVjdGlvbiBvZiBFTUYgZmFpbGVkIGluIFNlcnZsZXQiKTsKICAgICAgICAgLy9lbnN1cmUgRU1GIHdvcmtzIQogICAgICAgICBlbWYuY3JlYXRlRW50aXR5TWFuYWdlcigpOwotICAgICAgICAKKwogICAgICAgICAvL2NhbGwgU2luZ2xldG9uIEVKQgogICAgICAgICBTdHJpbmcgcmVzcG9uc2UgPSBoLmhlbGxvKCk7CiAgICAgICAgIGlmKCFyZXNwb25zZS5lcXVhbHMoSGVsbG8uQUxMX09LX1NUUklORykpCiAgICAgICAgICAgICBtc2cgKz0gIkludm9jYXRpb24gb2YgSGVsbG8gU2luZ2V0b24gRUpCIGZhaWxlZDptc2c9IiArIHJlc3BvbnNlOwotICAgICAgICAKKwogLy8gICAgICAgIGlmICghcnAuaXNJbmplY3Rpb25TdWNjZXNzZnVsKCkpCiAvLyAgICAgICAgICAgIG1zZyArPSAiSW5qZWN0aW9uIG9mIGEgYmVhbiBpbiBsaWIgZGlyZWN0b3J5IGludG8gYW5vdGhlciAiICsKLS8vICAgICAgICAgICAgCQkiQmVhbiBpbiBsaWIgZGlyZWN0b3J5IGZhaWxlZCI7CisvLyAgICAgICAgICAgICAgICAgICAgIkJlYW4gaW4gbGliIGRpcmVjdG9yeSBmYWlsZWQiOwogLy8gICAgICAgIGNoZWNrRm9yTnVsbChmYiwgIkluamVjdGlvbiBvZiBhIGJlYW4gdGhhdCBpcyBwbGFjZWQgaW4gbGliIGRpcmVjdG9yeSAiICsKLS8vICAgICAgICAJCSJpbnRvIGEgU2VydmxldCB0aGF0IGlzIHBsYWNlZCBpbiBhIFdBUiBmYWlsZWQiKTsKKy8vICAgICAgICAgICAgICAgICJpbnRvIGEgU2VydmxldCB0aGF0IGlzIHBsYWNlZCBpbiBhIFdBUiBmYWlsZWQiKTsKIC8vICAgICAgICBjaGVja0Zvck51bGwodG1iLCAiSW5qZWN0aW9uIG9mIGEgTWFuYWdlZCBiZWFuIHRoYXQgaXMgcGxhY2VkIGluIGxpYiBkaXJlY3RvcnkgIiArCiAvLyAgICAgICAgImludG8gYSBTZXJ2bGV0IHRoYXQgaXMgcGxhY2VkIGluIGEgV0FSIGZhaWxlZCIpOwogLy8gICAgICAgIGNoZWNrRm9yTnVsbCh0c3NpbCwgIkluamVjdGlvbiBvZiBhIHNlc3Npb24gc2NvcGVkIEJlYW4gcGxhY2VkIGluIGxpYiBkaXIgaW50byBhICIgKwogLy8gICAgICAgICAgICAiaW50byBhIHNlcnZsZXQgaW4gdGhhdCBlYXIgZmFpbGVkIik7Ci0gICAgICAgIAorCiAvLyAgICAgICAgaWYgKCFycC5pc0luamVjdGlvblN1Y2Nlc3NmdWwoKSkKIC8vICAgICAgICAgICAgbXNnICs9ICJJbmplY3Rpb24gb2YgYSBiZWFuIGluIGxpYiBkaXJlY3RvcnkgaW50byBhbm90aGVyIEJlYW4gIiArCi0vLyAgICAgICAgICAgIAkJImluIGxpYiBkaXJlY3RvcnkgZmFpbGVkIjsKLSAgICAgICAgCisvLyAgICAgICAgICAgICAgICAgICAgImluIGxpYiBkaXJlY3RvcnkgZmFpbGVkIjsKKwogLy8gICAgICAgIGlmICghdG1iLmlzSW5qZWN0aW9uU3VjY2Vzc2Z1bCgpKQogLy8gICAgICAgICAgICBtc2cgKz0gIkluamVjdGlvbiBvZiBhIEJlYW4gcGxhY2VkIGluIGxpYiBkaXIgaW50byBhICIgKwotLy8gICAgICAgICAgICAJCSJNYW5hZ2VkQmVhbiBwbGFjZWQgaW4gbGliIGRpciBmYWlsZWQiOwotICAgICAgICAKKy8vICAgICAgICAgICAgICAgICAgICAiTWFuYWdlZEJlYW4gcGxhY2VkIGluIGxpYiBkaXIgZmFpbGVkIjsKKwogICAgICAgICBvdXQucHJpbnRsbihtc2cpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2J1aWxkLnhtbAppbmRleCBiM2RmZjY2Li42YzBiMTNjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2J1aWxkLnhtbApAQCAtNzcsNyArNzcsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJqYXZhZWUtaW50Ij4KICAgICAgICAgPHJlY29yZCBuYW1lPSJqYXZhZWUtaW50Lm91dHB1dCIgYWN0aW9uPSJzdGFydCIgLz4KLSAgICAgICAgCisKICAgICAgICAgPGFudCBkaXI9ImJ1aWx0aW4tYmVhbnMiIHRhcmdldD0iJHtqYXZhZWUtaW50LXRhcmdldH0iIC8+CiAgICAgICAgIDxhbnQgZGlyPSJzZXJ2bGV0LWNvbnRleHQtaW5qZWN0aW9uLWNkaSIgdGFyZ2V0PSIke2phdmFlZS1pbnQtdGFyZ2V0fSIgLz4KICAgICAgICAgPGFudCBkaXI9InNpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Itbm9ubnVsbC1wYWNrYWdlIiB0YXJnZXQ9IiR7amF2YWVlLWludC10YXJnZXR9IiAvPgpAQCAtOTcsMTQgKzk3LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGVjaG8+IFVzYWdlOgotCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGphdmFlZS1pbnQgdGVzdHMpCi0JCWFudCBjbGVhbiAoY2xlYW5zIGFsbCB0aGUgamF2YWVlLWludCB0ZXN0cykKLQkJYW50IGJ1aWxkIChidWlsZHMgYWxsIHRoZSBqYXZhZWUtaW50IHRlc3RzKQotCQlhbnQgc2V0dXAgKHNldHMgdXAgYWxsIHJlc291cmNlcyBmb3IgamF2YWVlLWludCB0ZXN0cykKLQkJYW50IGRlcGxveSAoZGVwbG95cyBhbGwgdGhlIGphdmFlZS1pbnQgYXBwcykKLQkJYW50IHJ1biAoRXhlY3V0ZXMgYWxsIHRoZSBqYXZhZWUtaW50IHRlc3RzKQotCQlhbnQgdW5kZXBsb3kgKHVuZGVwbG95cyBhbGwgdGhlICBqYXZhZWUtaW50IGFwcHMpCi0JCWFudCB1bnNldHVwICh1bnNldHMgYWxsIHJlc291cmNlcyBmb3IgamF2YWVlLWludCB0ZXN0cykKLQk8L2VjaG8+CisgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgamF2YWVlLWludCB0ZXN0cykKKyAgICAgICAgYW50IGNsZWFuIChjbGVhbnMgYWxsIHRoZSBqYXZhZWUtaW50IHRlc3RzKQorICAgICAgICBhbnQgYnVpbGQgKGJ1aWxkcyBhbGwgdGhlIGphdmFlZS1pbnQgdGVzdHMpCisgICAgICAgIGFudCBzZXR1cCAoc2V0cyB1cCBhbGwgcmVzb3VyY2VzIGZvciBqYXZhZWUtaW50IHRlc3RzKQorICAgICAgICBhbnQgZGVwbG95IChkZXBsb3lzIGFsbCB0aGUgamF2YWVlLWludCBhcHBzKQorICAgICAgICBhbnQgcnVuIChFeGVjdXRlcyBhbGwgdGhlIGphdmFlZS1pbnQgdGVzdHMpCisgICAgICAgIGFudCB1bmRlcGxveSAodW5kZXBsb3lzIGFsbCB0aGUgIGphdmFlZS1pbnQgYXBwcykKKyAgICAgICAgYW50IHVuc2V0dXAgKHVuc2V0cyBhbGwgcmVzb3VyY2VzIGZvciBqYXZhZWUtaW50IHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vYnVpbHRpbi1iZWFucy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9idWlsdGluLWJlYW5zL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMzU0M2U0Yy4uNzIxNzZkNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9idWlsdGluLWJlYW5zL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9idWlsdGluLWJlYW5zL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tdHlwZXNhZmUtamF2YWVlLXJlc291cmNlLWluamVjdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9idWlsdGluLWJlYW5zL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vYnVpbHRpbi1iZWFucy9idWlsZC54bWwKaW5kZXggMjk1ZDA4Ni4uZWI3OTBiZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9idWlsdGluLWJlYW5zL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2J1aWx0aW4tYmVhbnMvYnVpbGQueG1sCkBAIC0zMyw3NSArMzMsNzUgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCxjcmVhdGUtcmVzb3VyY2VzLGRlcGxveSxydW4sdW5kZXBsb3ksZGVsZXRlLXJlc291cmNlcyIgLz4KIAotCTx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iIC8+Ci0JCTxkZWxldGU+Ci0JCQk8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIiAvPgotCQkJPGZpbGVzZXQgZGlyPSJjbGllbnQvdGVzdC9jbGllbnQiIGluY2x1ZGVzPSIqLmNsYXNzIiAvPgotCQk8L2RlbGV0ZT4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIiAvPgorICAgICAgICA8ZGVsZXRlPgorICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIgLz4KKyAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iY2xpZW50L3Rlc3QvY2xpZW50IiBpbmNsdWRlcz0iKi5jbGFzcyIgLz4KKyAgICAgICAgPC9kZWxldGU+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+Ci0JCQk8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIgLz4KLQkJPC9hbnRjYWxsPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0IiAvPgorICAgICAgICA8L2FudGNhbGw+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLQkJPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIgLz4KLQkJPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+Ci0JCQk8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIiAvPgotCQkJPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiIC8+Ci0JCTwvYW50Y2FsbD4KKyAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIgLz4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIiAvPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiIC8+CisgICAgICAgIDwvYW50Y2FsbD4KIAotCQk8amF2YWMgc3JjZGlyPSJjbGllbnQiIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIgaW5jbHVkZXM9InRlc3QvY2xpZW50L1dlYlRlc3QuamF2YSIgLz4KKyAgICAgICAgPGphdmFjIHNyY2Rpcj0iY2xpZW50IiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiIGluY2x1ZGVzPSJ0ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEiIC8+CiAKLQk8L3RhcmdldD4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CisgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIAotCTx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iIC8+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIgLz4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iY3JlYXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiI+Ci0JCQk8cGFyYW0gbmFtZT0iamRiYy5jb25ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1kZXYtdGVzdC1wb29sIiAvPgotCQk8L2FudGNhbGw+Ci0JCTxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJqZGJjLmNvbm5wb29sLm5hbWUiIHZhbHVlPSJqZGJjLWRldi10ZXN0LXBvb2wiIC8+Ci0JCQk8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9qZGJjLWRldi10ZXN0LXJlc291cmNlIiAvPgotCQk8L2FudGNhbGw+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbm5wb29sLm5hbWUiIHZhbHVlPSJqZGJjLWRldi10ZXN0LXBvb2wiIC8+CisgICAgICAgIDwvYW50Y2FsbD4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ubnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtZGV2LXRlc3QtcG9vbCIgLz4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2pkYmMtZGV2LXRlc3QtcmVzb3VyY2UiIC8+CisgICAgICAgIDwvYW50Y2FsbD4KKyAgICA8L3RhcmdldD4KIAogCi0JPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGphdmEgY2xhc3NuYW1lPSJ0ZXN0LmNsaWVudC5XZWJUZXN0Ij4KLQkJCTxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIgLz4KLQkJCTxhcmcgdmFsdWU9IiR7aHR0cC5wb3J0fSIgLz4KLQkJCTxhcmcgdmFsdWU9IiR7Y29udGV4dHJvb3R9IiAvPgotCQkJPGNsYXNzcGF0aD4KLQkJCQk8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiIC8+Ci0JCQkJPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJjbGllbnQiIC8+Ci0JCQk8L2NsYXNzcGF0aD4KLQkJPC9qYXZhPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0idGVzdC5jbGllbnQuV2ViVGVzdCI+CisgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iIC8+CisgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAucG9ydH0iIC8+CisgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2NvbnRleHRyb290fSIgLz4KKyAgICAgICAgICAgIDxjbGFzc3BhdGg+CisgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIiAvPgorICAgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iY2xpZW50IiAvPgorICAgICAgICAgICAgPC9jbGFzc3BhdGg+CisgICAgICAgIDwvamF2YT4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIiAvPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIiAvPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2pkYmMtZGV2LXRlc3QtcmVzb3VyY2UiIC8+Ci0JCTwvYW50Y2FsbD4KKyAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvamRiYy1kZXYtdGVzdC1yZXNvdXJjZSIgLz4KKyAgICAgICAgPC9hbnRjYWxsPgogCi0JCTxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJqZGJjLmNvbm5wb29sLm5hbWUiIHZhbHVlPSJqZGJjLWRldi10ZXN0LXBvb2wiIC8+Ci0JCTwvYW50Y2FsbD4KLQk8L3RhcmdldD4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1jb25ucG9vbC1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ubnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtZGV2LXRlc3QtcG9vbCIgLz4KKyAgICAgICAgPC9hbnRjYWxsPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JCTxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIiAvPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIgLz4KKyAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vYnVpbHRpbi1iZWFucy9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEJlYW5JbnRlcmZhY2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vYnVpbHRpbi1iZWFucy9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEJlYW5JbnRlcmZhY2UuamF2YQppbmRleCAyOWUxMzdhLi5lNWJlNGQzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2J1aWx0aW4tYmVhbnMvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RCZWFuSW50ZXJmYWNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9idWlsdGluLWJlYW5zL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0QmVhbkludGVyZmFjZS5qYXZhCkBAIC0xOSw2ICsxOSw2IEBACiBwdWJsaWMgaW50ZXJmYWNlIFRlc3RCZWFuSW50ZXJmYWNlIHsKICAgICBwdWJsaWMgdm9pZCBtMSgpOwogICAgIHB1YmxpYyB2b2lkIG0yKCk7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIHRlc3REYXRhc291cmNlSW5qZWN0aW9uKCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2J1aWx0aW4tYmVhbnMvc2VydmxldC90ZXN0L2JlYW5zL25vbm1vY2svVGVzdEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vYnVpbHRpbi1iZWFucy9zZXJ2bGV0L3Rlc3QvYmVhbnMvbm9ubW9jay9UZXN0QmVhbi5qYXZhCmluZGV4IDMzOGEzYmYuLmI0NmRkMjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vYnVpbHRpbi1iZWFucy9zZXJ2bGV0L3Rlc3QvYmVhbnMvbm9ubW9jay9UZXN0QmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vYnVpbHRpbi1iZWFucy9zZXJ2bGV0L3Rlc3QvYmVhbnMvbm9ubW9jay9UZXN0QmVhbi5qYXZhCkBAIC0yOSw4ICsyOSw4IEBACiBAUHJlZmVycmVkCiBwdWJsaWMgY2xhc3MgVGVzdEJlYW4gaW1wbGVtZW50cyBUZXN0QmVhbkludGVyZmFjZXsKICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gdGVzdEJlYW5JbnZva2VkID0gZmFsc2U7Ci0gICAgCi0gICAgQEluamVjdCBAVGVzdERhdGFiYXNlIAorCisgICAgQEluamVjdCBAVGVzdERhdGFiYXNlCiAgICAgRGF0YVNvdXJjZSBkczsKIAogICAgIEBPdmVycmlkZQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9idWlsdGluLWJlYW5zL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L0RhdGFiYXNlTWFuYWdlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9idWlsdGluLWJlYW5zL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L0RhdGFiYXNlTWFuYWdlci5qYXZhCmluZGV4IDZjNTk1Y2QuLjI1N2ZlYWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vYnVpbHRpbi1iZWFucy9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9EYXRhYmFzZU1hbmFnZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2J1aWx0aW4tYmVhbnMvc2VydmxldC90ZXN0L3NlcnZsZXQvRGF0YWJhc2VNYW5hZ2VyLmphdmEKQEAgLTIzLDkgKzIzLDkgQEAKIGltcG9ydCB0ZXN0LmJlYW5zLmFydGlmYWN0cy5UZXN0RGF0YWJhc2U7CiAKIHB1YmxpYyBjbGFzcyBEYXRhYmFzZU1hbmFnZXIgewotICAgIEBQcm9kdWNlcyAKKyAgICBAUHJvZHVjZXMKICAgICBAVGVzdERhdGFiYXNlCi0gICAgQFJlc291cmNlKG5hbWUgPSAiamRiYy9qZGJjLWRldi10ZXN0LXJlc291cmNlIiwgCisgICAgQFJlc291cmNlKG5hbWUgPSAiamRiYy9qZGJjLWRldi10ZXN0LXJlc291cmNlIiwKICAgICAgICAgICAgIG1hcHBlZE5hbWUgPSAiamRiYy9qZGJjLWRldi10ZXN0LXJlc291cmNlIikKICAgICBEYXRhU291cmNlIGRzOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItZXh0ZW5zaW9uLWFsdGVybmF0aXZlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1leHRlbnNpb24tYWx0ZXJuYXRpdmUvV2ViVGVzdC5qYXZhCmluZGV4IGQxMTk4YzQuLmZjMjE1ZGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1leHRlbnNpb24tYWx0ZXJuYXRpdmUvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1leHRlbnNpb24tYWx0ZXJuYXRpdmUvV2ViVGVzdC5qYXZhCkBAIC0zOCw3ICszOCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEBXZWJTZXJ2bGV0Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLWV4dGVuc2lvbi1hbHRlcm5hdGl2ZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLWV4dGVuc2lvbi1hbHRlcm5hdGl2ZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDQ5M2Q0YTguLmQ2NGQzZGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1leHRlbnNpb24tYWx0ZXJuYXRpdmUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItZXh0ZW5zaW9uLWFsdGVybmF0aXZlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItZXh0ZW5zaW9uLWFsdGVybmF0aXZlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItZXh0ZW5zaW9uLWFsdGVybmF0aXZlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1leHRlbnNpb24tYWx0ZXJuYXRpdmUvYnVpbGQueG1sCmluZGV4IDYwMWMzZGIuLjhlNTkxYmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1leHRlbnNpb24tYWx0ZXJuYXRpdmUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1leHRlbnNpb24tYWx0ZXJuYXRpdmUvYnVpbGQueG1sCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgIDwvZGVsZXRlPgogICAgICAgICA8ZGVsZXRlIGZpbGU9ImxpYi9iZWFuLWxpYi5qYXIiLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8IS0tIGNyZWF0ZSBXRUItSU5GL2xpYi9iZWFuLWxpYi5qYXIgLS0+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CkBAIC01Niw4ICs1Niw4IEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CiAgICAgICAgIDwvamFyPgogICAgICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KLSAgIAotICAgICAgICA8IS0tIGNvbXBpbGUgdGVzdCBzZXJ2bGV0IC0tPiAgICAgCisKKyAgICAgICAgPCEtLSBjb21waWxlIHRlc3Qgc2VydmxldCAtLT4KICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iY29tbW9uLnhtbDogQ29tcGlsaW5nIHRlc3Qgc291cmNlIGZpbGVzIiBsZXZlbD0idmVyYm9zZSIvPgogICAgICAgICA8bWtkaXIgZGlyPSJzZXJ2bGV0Ii8+CkBAIC02NSwyMyArNjUsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1jb25ucG9vbC1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ubnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtZGV2LXRlc3QtcG9vbCIgLz4KQEAgLTkxLDcgKzkxLDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2pkYmMtZGV2LXRlc3QtcmVzb3VyY2UiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLQkKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC0xMDMsMTEgKzEwMywxMSBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0JCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvamRiYy1kZXYtdGVzdC1yZXNvdXJjZSIgLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1leHRlbnNpb24tYWx0ZXJuYXRpdmUvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItZXh0ZW5zaW9uLWFsdGVybmF0aXZlL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0QmVhbi5qYXZhCmluZGV4IDlhMmNlY2YuLmU3N2VkNmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1leHRlbnNpb24tYWx0ZXJuYXRpdmUvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLWV4dGVuc2lvbi1hbHRlcm5hdGl2ZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEJlYW4uamF2YQpAQCAtMjcsOCArMjcsOCBAQAogQFByZWZlcnJlZAogcHVibGljIGNsYXNzIFRlc3RCZWFuIGltcGxlbWVudHMgVGVzdEJlYW5JbnRlcmZhY2V7CiAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIHRlc3RCZWFuSW52b2tlZCA9IGZhbHNlOwotICAgIAotICAgIEBJbmplY3QgLy9AVGVzdERhdGFiYXNlIAorCisgICAgQEluamVjdCAvL0BUZXN0RGF0YWJhc2UKICAgICBFbnRpdHlNYW5hZ2VyIGVtZjsKIAogICAgIEBPdmVycmlkZQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLWV4dGVuc2lvbi1hbHRlcm5hdGl2ZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEJlYW5JbnRlcmZhY2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1leHRlbnNpb24tYWx0ZXJuYXRpdmUvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RCZWFuSW50ZXJmYWNlLmphdmEKaW5kZXggMjllMTM3YS4uZTViZTRkMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLWV4dGVuc2lvbi1hbHRlcm5hdGl2ZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdEJlYW5JbnRlcmZhY2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItZXh0ZW5zaW9uLWFsdGVybmF0aXZlL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0QmVhbkludGVyZmFjZS5qYXZhCkBAIC0xOSw2ICsxOSw2IEBACiBwdWJsaWMgaW50ZXJmYWNlIFRlc3RCZWFuSW50ZXJmYWNlIHsKICAgICBwdWJsaWMgdm9pZCBtMSgpOwogICAgIHB1YmxpYyB2b2lkIG0yKCk7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIHRlc3REYXRhc291cmNlSW5qZWN0aW9uKCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItZXh0ZW5zaW9uLWFsdGVybmF0aXZlL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItZXh0ZW5zaW9uLWFsdGVybmF0aXZlL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggNjFjYjBkZi4uZDA4NjE2NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLWV4dGVuc2lvbi1hbHRlcm5hdGl2ZS9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1leHRlbnNpb24tYWx0ZXJuYXRpdmUvc2VydmxldC90ZXN0L3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQpAQCAtNTEsNyArNTEsNyBAQAogcHVibGljIGNsYXNzIFRlc3RTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewogCiAgICAgLyogTm9ybWFsIGluamVjdGlvbiBvZiBCZWFucyAqLwotICAgIEBJbmplY3QgCisgICAgQEluamVjdAogICAgIHByaXZhdGUgdHJhbnNpZW50IG9yZy5qYm9zcy5sb2dnaW5nLkxvZ2dlciBsb2c7CiAgICAgQEluamVjdCBCZWFuTWFuYWdlciBibV9hdF9pbmo7CiAKQEAgLTY0LDI2ICs2NCwyNiBAQAogCiAgICAgcHJpdmF0ZSBAUmVzb3VyY2UKICAgICBVc2VyVHJhbnNhY3Rpb24gdXR4OwotICAgIAorCiAgICAgQEluamVjdCBAUHJlZmVycmVkCiAgICAgVGVzdEJlYW5JbnRlcmZhY2UgdGJpOwotICAgIAorCiAgICAgLyogSW5qZWN0aW9uIG9mIEJlYW5zIGZyb20gV0VCLUlORi9saWIgKi8KLSAgICBASW5qZWN0IFRlc3RCZWFuSW5XZWJJbmZMaWIgdGJpd2lsOyAKKyAgICBASW5qZWN0IFRlc3RCZWFuSW5XZWJJbmZMaWIgdGJpd2lsOwogICAgIC8vV2UgYXJlIGluamVjdGluZyBUZXN0QmVhbkluV2ViSW5mTGliIGRpcmVjdGx5IGFib3ZlLiBTaW5jZSB0aGUgYWx0ZXJuYXRpdmUKLSAgICAvL1Rlc3RCZWFuIGlzIG5vdCBlbmFibGVkIGluIHRoZSBXQVIncyBCREEoYmVhbnMueG1sKSwgCi0gICAgLy9UZXN0QmVhbkluV2ViSW5mTGliIG11c3QgYmUgaW5qZWN0ZWQgCi0gICAgCi0gICAgCisgICAgLy9UZXN0QmVhbiBpcyBub3QgZW5hYmxlZCBpbiB0aGUgV0FSJ3MgQkRBKGJlYW5zLnhtbCksCisgICAgLy9UZXN0QmVhbkluV2ViSW5mTGliIG11c3QgYmUgaW5qZWN0ZWQKKworCiAgICAgQEluamVjdCBBbm90aGVyVGVzdEJlYW5JbldlYkluZkxpYiBhdGJpd2lsOwogICAgIC8vSG93ZXZlciBpbiB0aGlzIGNhc2UsIHdoZW4gQW5vdGhlclRlc3RCZWFuSW5XZWJJbmZMaWIgdHJpZXMgdG8gaW5qZWN0CiAgICAgLy9UZXN0QmVhbkluV2ViSW5mTGliIGluIGl0cyBiZWFuLCBpdCBtdXN0IGluamVjdCBUZXN0QWx0ZXJuYXRpdmVCZWFuSW5XZWJJbmZMaWIKLSAgICAvL2FzIHRoZSBhbHRlcm5hdGl2ZSBiZWFuIGlzIGVuYWJsZWQgaW4gdGhlIFdFQi1JTkYvbGliJ3MgQkRBIChiZWFucy54bWwpIAorICAgIC8vYXMgdGhlIGFsdGVybmF0aXZlIGJlYW4gaXMgZW5hYmxlZCBpbiB0aGUgV0VCLUlORi9saWIncyBCREEgKGJlYW5zLnhtbCkKIAogICAgIC8qIFRlc3QgbG9va3VwIG9mIEJlYW5NYW5hZ2VyKi8KICAgICBCZWFuTWFuYWdlciBibV9sb29rdXA7CiAKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlcnZpY2UoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpCiAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24gewogCkBAIC0xMDgsNyArMTA4LDcgQEAKICAgICAgICAgLy92aWEgQmVhbk1hbmFnZXIgb2YgV0FSCiAgICAgICAgIFNldCB3YXJCZWFucyA9IGJtX2F0X2luai5nZXRCZWFucyhUZXN0QmVhbi5jbGFzcyxuZXcgQW5ub3RhdGlvbkxpdGVyYWw8QW55PigpIHt9KTsKICAgICAgICAgaWYgKHdhckJlYW5zLnNpemUoKSAhPSAxKSBtc2cgKz0gIlRlc3RCZWFuIGluIFdBUiBpcyBub3QgYXZhaWxhYmxlIHZpYSB0aGUgV0FSIEJlYW5NYW5hZ2VyIjsKLSAgICAgICAgCisKICAgICAgICAgU2V0IHdlYmluZkxpYkJlYW5zID0gYm1fYXRfaW5qLmdldEJlYW5zKFRlc3RCZWFuSW5XZWJJbmZMaWIuY2xhc3MsbmV3IEFubm90YXRpb25MaXRlcmFsPEFueT4oKSB7fSk7CiAgICAgICAgIGlmICh3ZWJpbmZMaWJCZWFucy5zaXplKCkgIT0gMSkgbXNnICs9ICJUZXN0QmVhbiBpbiBXRUItSU5GL2xpYiBpcyBub3QgYXZhaWxhYmxlIHZpYSB0aGUgV0FSIEJlYW5NYW5hZ2VyIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0IEJlYW4gZnJvbSBXRUItSU5GL2xpYiB2aWEgQmVhbk1hbmFnZXI6IiArIHdlYmluZkxpYkJlYW5zKTsKQEAgLTExOCwyMCArMTE4LDIwIEBACiAgICAgICAgIFNldCB3ZWJpbmZMaWJBbHRCZWFucyA9IGJtX2F0X2luai5nZXRCZWFucyhUZXN0QWx0ZXJuYXRpdmVCZWFuSW5XZWJJbmZMaWIuY2xhc3MsbmV3IEFubm90YXRpb25MaXRlcmFsPEFueT4oKSB7fSk7CiAgICAgICAgIGlmICh3ZWJpbmZMaWJBbHRCZWFucy5zaXplKCkgIT0gMCkgbXNnICs9ICJUZXN0QWx0ZXJuYXRpdmVCZWFuIGluIFdFQi1JTkYvbGliIGlzIGF2YWlsYWJsZSB2aWEgdGhlIFdBUiBCZWFuTWFuYWdlciI7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdCBCZWFuIGZyb20gV0VCLUlORi9saWIgdmlhIEJlYW5NYW5hZ2VyOiIgKyB3ZWJpbmZMaWJBbHRCZWFucyk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vVGVzdCBpbmplY3Rpb24gb2YgYSBCZWFuIGluIFdFQi1JTkYvbGliIGJlYW5zIGludG8gU2VydmxldAogICAgICAgICAvL2FuZCBjaGVjayB0aGF0IHRoZSBBbHRlcm5hdGl2ZSBiZWFuIGlzIG5vdCBjYWxsZWQuCiAgICAgICAgIC8vVGhlIGFsdGVybmF0aXZlIGJlYW4gaW4gd2ViLWluZi9saWIgaXMgbm90IGVuYWJsZWQgaW4gdGhlIFdBUidzIGJlYW5zLnhtbAogICAgICAgICAvL2FuZCBoZW5jZSBtdXN0IG5vdCBiZSB2aXNpYmxlLgogICAgICAgICBUZXN0QWx0ZXJuYXRpdmVCZWFuSW5XZWJJbmZMaWIuY2xlYXJTdGF0dXMoKTsgLy9jbGVhciBzdGF0dXMKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIGluamVjdGlvbk9mQmVhbkluV2ViSW5mTGliUmVzdWx0ID0gdGJpd2lsLnRlc3RJbmplY3Rpb24oKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbmplY3Rpb25XaXRoQWx0ZXJuYXRpdmUgcmV0dXJuZWQ6ICIgKyBpbmplY3Rpb25PZkJlYW5JbldlYkluZkxpYlJlc3VsdCk7CiAgICAgICAgIGlmIChpbmplY3Rpb25PZkJlYW5JbldlYkluZkxpYlJlc3VsdC5lcXVhbHMgKCJBbHRlcm5hdGl2ZSIpKSB7CiAgICAgICAgICAgICBtc2cgKz0gIkV4cGVjdGVkIHRoYXQgdGhlIG9yaWdpbmFsIFRlc3RCZWFuSW5XZWJJbmZMaWIgaXMgY2FsbGVkLCAiICsKLSAgICAgICAgICAgIAkJImJ1dCBpbnN0ZWFkIGdvdCAiICsgaW5qZWN0aW9uT2ZCZWFuSW5XZWJJbmZMaWJSZXN1bHQgKyAiIGluc3RlYWQiOwotICAgICAgICB9IAotICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgImJ1dCBpbnN0ZWFkIGdvdCAiICsgaW5qZWN0aW9uT2ZCZWFuSW5XZWJJbmZMaWJSZXN1bHQgKyAiIGluc3RlYWQiOworICAgICAgICB9CisKICAgICAgICAgaWYoVGVzdEFsdGVybmF0aXZlQmVhbkluV2ViSW5mTGliLkFMVEVSTkFUSVZFX0JFQU5fSEFTX0JFRU5fQ0FMTEVEKSB7CiAgICAgICAgICAgICBtc2cgKz0gIkFsdGVybmF0ZSBCZWFuIGlzIGNhbGxlZCBldmVuIHRob3VnaCBpdCBpcyBub3QgZW5hYmxlZCBpbiB0aGUgV0FSJ3MgYmVhbnMueG1sIjsKICAgICAgICAgfQpAQCAtMTUxLDEzICsxNTEsMTMgQEAKIAogICAgICAgICBpZiAoIVRlc3RBbHRlcm5hdGl2ZUJlYW5JbldlYkluZkxpYi5BTFRFUk5BVElWRV9CRUFOX0hBU19CRUVOX0NBTExFRCkgewogICAgICAgICAgICAgbXNnICs9ICJBbHRlcm5hdGl2ZSBCZWFuIGVuYWJsZWQgaW4gV0VCLUlORi9saWIgd2FzIG5vdCBjYWxsZWQgIiArCi0gICAgICAgICAgICAJCSJ3aGVuIHRoZSBpbmplY3Rpb24gaGFwcGVuZWQgaW4gdGhlIGNvbnRleHQgb2YgYSAiICsKLSAgICAgICAgICAgIAkJIkJlYW4gaW4gV0VCLUlORi9saWIgd2hlcmUgdGhlIGFsdGVybmF0aXZlIEJlYW4gd2FzIGVuYWJsZWQiOworICAgICAgICAgICAgICAgICAgICAid2hlbiB0aGUgaW5qZWN0aW9uIGhhcHBlbmVkIGluIHRoZSBjb250ZXh0IG9mIGEgIiArCisgICAgICAgICAgICAgICAgICAgICJCZWFuIGluIFdFQi1JTkYvbGliIHdoZXJlIHRoZSBhbHRlcm5hdGl2ZSBCZWFuIHdhcyBlbmFibGVkIjsKICAgICAgICAgfQogCi0gICAgICAgIAorCiAgICAgICAgIG1zZyArPSB0ZXN0RU1JbmplY3Rpb24ocmVxKTsKLSAgICAgICAgCisKICAgICAgICAgd3JpdGVyLndyaXRlKG1zZyArICJcbiIpOwogICAgIH0KIApAQCAtMTgwLDcgKzE4MCw3IEBACiAgICAgICAgICAgICB9IGVsc2UgaWYgKCJsbHF1ZXJ5Ii5lcXVhbHModGVzdGNhc2UpKSB7CiAgICAgICAgICAgICAgICAgc3RhdHVzID0ganQubGF6eUxvYWRpbmdCeVF1ZXJ5KCJDYXJsYSIpOwogICAgICAgICAgICAgfSBlbHNlIGlmICgibGxpbmoiLmVxdWFscyh0ZXN0Y2FzZSkpewotICAgICAgICAgICAgICAgIHN0YXR1cyA9ICgodGJpICE9IG51bGwpICYmIAorICAgICAgICAgICAgICAgIHN0YXR1cyA9ICgodGJpICE9IG51bGwpICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAodGJpLnRlc3REYXRhc291cmNlSW5qZWN0aW9uKCkudHJpbSgpLmxlbmd0aCgpPT0wKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoc3RhdHVzKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItZXh0ZW5zaW9uLWFsdGVybmF0aXZlL3NlcnZsZXQvdGVzdC91dGlsL0pQQVJlc291cmNlUHJvZHVjZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1leHRlbnNpb24tYWx0ZXJuYXRpdmUvc2VydmxldC90ZXN0L3V0aWwvSlBBUmVzb3VyY2VQcm9kdWNlci5qYXZhCmluZGV4IDE4YmJhNzcuLjkyNjE2ZjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1leHRlbnNpb24tYWx0ZXJuYXRpdmUvc2VydmxldC90ZXN0L3V0aWwvSlBBUmVzb3VyY2VQcm9kdWNlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1leHRlbnNpb24tYWx0ZXJuYXRpdmUvc2VydmxldC90ZXN0L3V0aWwvSlBBUmVzb3VyY2VQcm9kdWNlci5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiBAU2luZ2xldG9uCiBwdWJsaWMgY2xhc3MgSlBBUmVzb3VyY2VQcm9kdWNlciB7CiAgICAgQFByb2R1Y2VzIEBQZXJzaXN0ZW5jZUNvbnRleHQodW5pdE5hbWU9InB1MSIpCi0gICAgLy9AVGVzdERhdGFiYXNlIAorICAgIC8vQFRlc3REYXRhYmFzZQogICAgIEVudGl0eU1hbmFnZXIgY3VzdG9tZXJEYXRhYmFzZVBlcnNpc3RlbmNlVW5pdDsKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLWV4dGVuc2lvbi1hbHRlcm5hdGl2ZS91dGlsL3Rlc3QvYmVhbnMvd2JpbmZsaWIvVGVzdEFsdGVybmF0aXZlQmVhbkluV2ViSW5mTGliLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItZXh0ZW5zaW9uLWFsdGVybmF0aXZlL3V0aWwvdGVzdC9iZWFucy93YmluZmxpYi9UZXN0QWx0ZXJuYXRpdmVCZWFuSW5XZWJJbmZMaWIuamF2YQppbmRleCBmMDU2MzRkLi41Mzk0MzZmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItZXh0ZW5zaW9uLWFsdGVybmF0aXZlL3V0aWwvdGVzdC9iZWFucy93YmluZmxpYi9UZXN0QWx0ZXJuYXRpdmVCZWFuSW5XZWJJbmZMaWIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItZXh0ZW5zaW9uLWFsdGVybmF0aXZlL3V0aWwvdGVzdC9iZWFucy93YmluZmxpYi9UZXN0QWx0ZXJuYXRpdmVCZWFuSW5XZWJJbmZMaWIuamF2YQpAQCAtMzEsNyArMzEsNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqKioqKioqKiB0ZXN0aW5qZWN0aW9uIGluIGFsdGVybmF0aXZlIGJlYW4gaW4gd2ViLWluZi9saWIgY2FsbGVkIik7CiAgICAgICAgIHJldHVybiAiQWx0ZXJuYXRpdmUiOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBjbGVhclN0YXR1cygpewogICAgICAgICBBTFRFUk5BVElWRV9CRUFOX0hBU19CRUVOX0NBTExFRCA9IGZhbHNlOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1leHRlbnNpb24tYWx0ZXJuYXRpdmUvdXRpbC90ZXN0L2JlYW5zL3diaW5mbGliL1Rlc3RCZWFuSW5XZWJJbmZMaWIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1leHRlbnNpb24tYWx0ZXJuYXRpdmUvdXRpbC90ZXN0L2JlYW5zL3diaW5mbGliL1Rlc3RCZWFuSW5XZWJJbmZMaWIuamF2YQppbmRleCAzODdhYzQ1Li5jNWVmMjY3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItZXh0ZW5zaW9uLWFsdGVybmF0aXZlL3V0aWwvdGVzdC9iZWFucy93YmluZmxpYi9UZXN0QmVhbkluV2ViSW5mTGliLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLWV4dGVuc2lvbi1hbHRlcm5hdGl2ZS91dGlsL3Rlc3QvYmVhbnMvd2JpbmZsaWIvVGVzdEJlYW5JbldlYkluZkxpYi5qYXZhCkBAIC0yOCwxMSArMjgsMTEgQEAKIHB1YmxpYyBjbGFzcyBUZXN0QmVhbkluV2ViSW5mTGliIHsKICAgICBASW5qZWN0CiAgICAgQmVhbk1hbmFnZXIgYm07Ci0gICAgCi0vLyAgICBASW5qZWN0IC8vQFRlc3REYXRhYmFzZSAKKworLy8gICAgQEluamVjdCAvL0BUZXN0RGF0YWJhc2UKIC8vICAgIEVudGl0eU1hbmFnZXIgZW1mX2F0X2luajsKIAotICAgIEBQZXJzaXN0ZW5jZUNvbnRleHQodW5pdE5hbWU9InB1MSIpICAKKyAgICBAUGVyc2lzdGVuY2VDb250ZXh0KHVuaXROYW1lPSJwdTEiKQogICAgIEVudGl0eU1hbmFnZXIgZW1mX2F0X3B1OwogCiAgICAgLy9UaGlzIHRlc3QgaW5qZWN0aW9uIG1ldGhvZCB3b3VsZCBiZSBjYWxsZWQgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHNlcnZsZXQgaW4gV0FSCkBAIC00NSwyMiArNDUsMjIgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFTUYgaW5qZWN0ZWQgaW4gV0VCLUlORi9saWIgYmVhbiBpcyAiICsgZW1mX2F0X3B1KTsKICAgICAgICAgaWYgKGVtZl9hdF9wdSA9PSBudWxsKQogICAgICAgICAgICAgcmV0dXJuICJFTUYgaW5qZWN0ZWQgdmlhIEBQZXJzaXN0ZW5jZUNvbnRleHQgaXMgbm90IGluamVjdGVkIGludG8gIiArCi0gICAgICAgICAgICAJCSJ0aGUgVGVzdEJlYW4gcGFja2FnZWQgaW4gV0VCLUlORi9saWIiOwotICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgInRoZSBUZXN0QmVhbiBwYWNrYWdlZCBpbiBXRUItSU5GL2xpYiI7CisKICAgICAgICAgU2V0PEJlYW48Pz4+IHdlYmluZkxpYkJlYW5zID0gYm0uZ2V0QmVhbnMoVGVzdEJlYW5JbldlYkluZkxpYi5jbGFzcywgbmV3IEFubm90YXRpb25MaXRlcmFsPEFueT4oKSB7fSk7CiAgICAgICAgIGlmICh3ZWJpbmZMaWJCZWFucy5zaXplKCkgIT0gMikgLy9CZWFuIGFuZCBlbmFibGVkIEFsdGVybmF0aXZlCiAgICAgICAgICAgICByZXR1cm4gIlRlc3RCZWFuIGluIFdFQi1JTkYvbGliIGlzIG5vdCBhdmFpbGFibGUgdmlhIHRoZSBXRUItSU5GL2xpYiAiCiAgICAgICAgICAgICAgICAgICAgICsgIkJlYW4ncyBCZWFuTWFuYWdlciI7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiKTsKICAgICAgICAgcHJpbnRCZWFucyh3ZWJpbmZMaWJCZWFucywgIkJlYW5NYW5hZ2VyLmdldEJlYW5zKFRlc3RCZWFuSW5XZWJJbmZMaWIsIEFueSk6Iik7Ci0gICAgICAgIAorCiAgICAgICAgIFNldDxCZWFuPD8+PiB3ZWJpbmZMaWJBbHRCZWFucyA9IGJtLmdldEJlYW5zKFRlc3RBbHRlcm5hdGl2ZUJlYW5JbldlYkluZkxpYi5jbGFzcywgbmV3IEFubm90YXRpb25MaXRlcmFsPEFueT4oKSB7fSk7CiAgICAgICAgIGlmICh3ZWJpbmZMaWJCZWFucy5zaXplKCkgIT0gMSkgLy9lbmFibGVkIEFsdGVybmF0aXZlCiAgICAgICAgICAgICByZXR1cm4gIlRlc3RBbHRlcm5hdGl2ZUJlYW4gaW4gV0VCLUlORi9saWIgaXMgbm90IGF2YWlsYWJsZSB2aWEgdGhlIFdFQi1JTkYvbGliICIKICAgICAgICAgICAgICAgICAgICAgKyAiQmVhbidzIEJlYW5NYW5hZ2VyIjsKICAgICAgICAgcHJpbnRCZWFucyh3ZWJpbmZMaWJBbHRCZWFucywgIkJlYW5NYW5hZ2VyLmdldEJlYW5zKFRlc3RBbHRlcm5hdGl2ZUJlYW5JbldlYkluZkxpYiwgQW55KToiKTsKLSAgICAgICAgCi0gICAgICAgIAorCisKICAgICAgICAgSXRlcmFibGU8QmVhbjw/Pj4gYWNjZXNzaWJsZUJlYW5zID0gKChvcmcuamJvc3Mud2VsZC5tYW5hZ2VyLkJlYW5NYW5hZ2VySW1wbCkgYm0pLmdldEFjY2Vzc2libGVCZWFucygpOwogICAgICAgICBwcmludEJlYW5zKGFjY2Vzc2libGVCZWFucywgIkJlYW5NYW5hZ2VySW1wbC5nZXRBY2Nlc3NpYmxlQmVhbnM6Iik7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1qYXZhZWUtaW5qZWN0aW9uL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1qYXZhZWUtaW5qZWN0aW9uL1dlYlRlc3QuamF2YQppbmRleCA5ZWNjZmFkLi5jYzJhNTllIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItamF2YWVlLWluamVjdGlvbi9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLWphdmFlZS1pbmplY3Rpb24vV2ViVGVzdC5qYXZhCkBAIC0zOCw3ICszOCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEBXZWJTZXJ2bGV0Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLWphdmFlZS1pbmplY3Rpb24vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1qYXZhZWUtaW5qZWN0aW9uL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggY2YyZjBjMC4uOTIwNGNiYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLWphdmFlZS1pbmplY3Rpb24vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItamF2YWVlLWluamVjdGlvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLWphdmFlZS1pbmplY3Rpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1qYXZhZWUtaW5qZWN0aW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1qYXZhZWUtaW5qZWN0aW9uL2J1aWxkLnhtbAppbmRleCAwNjQwNjY1Li4wYzYyZjI5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItamF2YWVlLWluamVjdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLWphdmFlZS1pbmplY3Rpb24vYnVpbGQueG1sCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgIDwvZGVsZXRlPgogICAgICAgICA8ZGVsZXRlIGZpbGU9ImxpYi9iZWFuLWxpYi5qYXIiLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8IS0tIGNyZWF0ZSBXRUItSU5GL2xpYi9iZWFuLWxpYi5qYXIgLS0+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CkBAIC01NCw4ICs1NCw4IEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CiAgICAgICAgIDwvamFyPgogICAgICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KLSAgIAotICAgICAgICA8IS0tIGNvbXBpbGUgdGVzdCBzZXJ2bGV0IC0tPiAgICAgCisKKyAgICAgICAgPCEtLSBjb21waWxlIHRlc3Qgc2VydmxldCAtLT4KICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iY29tbW9uLnhtbDogQ29tcGlsaW5nIHRlc3Qgc291cmNlIGZpbGVzIiBsZXZlbD0idmVyYm9zZSIvPgogICAgICAgICA8bWtkaXIgZGlyPSJzZXJ2bGV0Ii8+CkBAIC02MywyMyArNjMsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1jb25ucG9vbC1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ubnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtZGV2LXRlc3QtcG9vbCIgLz4KQEAgLTg5LDcgKzg5LDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2pkYmMtZGV2LXRlc3QtcmVzb3VyY2UiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLQkKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC0xMDEsMTEgKzEwMSwxMSBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0JCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvamRiYy1kZXYtdGVzdC1yZXNvdXJjZSIgLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1qYXZhZWUtaW5qZWN0aW9uL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0QmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLWphdmFlZS1pbmplY3Rpb24vc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RCZWFuLmphdmEKaW5kZXggMTA0YzZiMC4uZjQ2ZTA5NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLWphdmFlZS1pbmplY3Rpb24vc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLWphdmFlZS1pbmplY3Rpb24vc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RCZWFuLmphdmEKQEAgLTI2LDggKzI2LDggQEAKIEBQcmVmZXJyZWQKIHB1YmxpYyBjbGFzcyBUZXN0QmVhbiBpbXBsZW1lbnRzIFRlc3RCZWFuSW50ZXJmYWNlewogICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiB0ZXN0QmVhbkludm9rZWQgPSBmYWxzZTsKLSAgICAKLSAgICBASW5qZWN0IC8vQFRlc3REYXRhYmFzZSAKKworICAgIEBJbmplY3QgLy9AVGVzdERhdGFiYXNlCiAgICAgRW50aXR5TWFuYWdlciBlbWY7CiAKICAgICBAT3ZlcnJpZGUKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1qYXZhZWUtaW5qZWN0aW9uL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0QmVhbkludGVyZmFjZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLWphdmFlZS1pbmplY3Rpb24vc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RCZWFuSW50ZXJmYWNlLmphdmEKaW5kZXggMjllMTM3YS4uZTViZTRkMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLWphdmFlZS1pbmplY3Rpb24vc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RCZWFuSW50ZXJmYWNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLWphdmFlZS1pbmplY3Rpb24vc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RCZWFuSW50ZXJmYWNlLmphdmEKQEAgLTE5LDYgKzE5LDYgQEAKIHB1YmxpYyBpbnRlcmZhY2UgVGVzdEJlYW5JbnRlcmZhY2UgewogICAgIHB1YmxpYyB2b2lkIG0xKCk7CiAgICAgcHVibGljIHZvaWQgbTIoKTsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgdGVzdERhdGFzb3VyY2VJbmplY3Rpb24oKTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1qYXZhZWUtaW5qZWN0aW9uL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItamF2YWVlLWluamVjdGlvbi9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9UZXN0U2VydmxldC5qYXZhCmluZGV4IDM5NTExOGMuLjI1YTY2OWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1qYXZhZWUtaW5qZWN0aW9uL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLWphdmFlZS1pbmplY3Rpb24vc2VydmxldC90ZXN0L3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQpAQCAtNTAsNyArNTAsNyBAQAogcHVibGljIGNsYXNzIFRlc3RTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewogCiAgICAgLyogTm9ybWFsIGluamVjdGlvbiBvZiBCZWFucyAqLwotICAgIEBJbmplY3QgCisgICAgQEluamVjdAogICAgIHByaXZhdGUgdHJhbnNpZW50IG9yZy5qYm9zcy5sb2dnaW5nLkxvZ2dlciBsb2c7CiAgICAgQEluamVjdCBCZWFuTWFuYWdlciBibV9hdF9pbmo7CiAKQEAgLTYzLDE3ICs2MywxNyBAQAogCiAgICAgcHJpdmF0ZSBAUmVzb3VyY2UKICAgICBVc2VyVHJhbnNhY3Rpb24gdXR4OwotICAgIAorCiAgICAgQEluamVjdCBAUHJlZmVycmVkCiAgICAgVGVzdEJlYW5JbnRlcmZhY2UgdGJpOwotICAgIAorCiAgICAgLyogSW5qZWN0aW9uIG9mIEJlYW5zIGZyb20gV0VCLUlORi9saWIgKi8KICAgICBASW5qZWN0IFRlc3RCZWFuSW5XZWJJbmZMaWIgdGJpd2lsOwotICAgIAorCiAgICAgLyogVGVzdCBsb29rdXAgb2YgQmVhbk1hbmFnZXIqLwogICAgIEJlYW5NYW5hZ2VyIGJtX2xvb2t1cDsKIAotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2VydmljZShIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlcykKICAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbiB7CiAKQEAgLTEwMSwxNiArMTAxLDE2IEBACiAgICAgICAgIC8vdmlhIEJlYW5NYW5hZ2VyIG9mIFdBUgogICAgICAgICBTZXQgd2FyQmVhbnMgPSBibV9hdF9pbmouZ2V0QmVhbnMoVGVzdEJlYW4uY2xhc3MsbmV3IEFubm90YXRpb25MaXRlcmFsPEFueT4oKSB7fSk7CiAgICAgICAgIGlmICh3YXJCZWFucy5zaXplKCkgIT0gMSkgbXNnICs9ICJUZXN0QmVhbiBpbiBXQVIgaXMgbm90IGF2YWlsYWJsZSB2aWEgdGhlIFdBUiBCZWFuTWFuYWdlciI7Ci0gICAgICAgIAorCiAgICAgICAgIFNldCB3ZWJpbmZMaWJCZWFucyA9IGJtX2F0X2luai5nZXRCZWFucyhUZXN0QmVhbkluV2ViSW5mTGliLmNsYXNzLG5ldyBBbm5vdGF0aW9uTGl0ZXJhbDxBbnk+KCkge30pOwogICAgICAgICBpZiAod2ViaW5mTGliQmVhbnMuc2l6ZSgpICE9IDEpIG1zZyArPSAiVGVzdEJlYW4gaW4gV0VCLUlORi9saWIgaXMgbm90IGF2YWlsYWJsZSB2aWEgdGhlIFdBUiBCZWFuTWFuYWdlciI7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdCBCZWFuIGZyb20gV0VCLUlORi9saWIgdmlhIEJlYW5NYW5hZ2VyOiIgKyB3ZWJpbmZMaWJCZWFucyk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vVGVzdCBpbmplY3Rpb24gaW50byBXRUItSU5GL2xpYiBiZWFucwogICAgICAgICBtc2cgKz0gdGJpd2lsLnRlc3RJbmplY3Rpb24oKTsKLSAgICAgICAgCisKICAgICAgICAgbXNnICs9IHRlc3RFTUluamVjdGlvbihyZXEpOwotICAgICAgICAKKwogICAgICAgICB3cml0ZXIud3JpdGUoImluaXRQYXJhbXM6ICIgKyBtc2cgKyAiXG4iKTsKICAgICB9CiAKQEAgLTEzMyw3ICsxMzMsNyBAQAogICAgICAgICAgICAgfSBlbHNlIGlmICgibGxxdWVyeSIuZXF1YWxzKHRlc3RjYXNlKSkgewogICAgICAgICAgICAgICAgIHN0YXR1cyA9IGp0LmxhenlMb2FkaW5nQnlRdWVyeSgiQ2FybGEiKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoImxsaW5qIi5lcXVhbHModGVzdGNhc2UpKXsKLSAgICAgICAgICAgICAgICBzdGF0dXMgPSAoKHRiaSAhPSBudWxsKSAmJiAKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSAoKHRiaSAhPSBudWxsKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgKHRiaS50ZXN0RGF0YXNvdXJjZUluamVjdGlvbigpLnRyaW0oKS5sZW5ndGgoKT09MCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHN0YXR1cykgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLWphdmFlZS1pbmplY3Rpb24vc2VydmxldC90ZXN0L3V0aWwvSlBBUmVzb3VyY2VQcm9kdWNlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLWphdmFlZS1pbmplY3Rpb24vc2VydmxldC90ZXN0L3V0aWwvSlBBUmVzb3VyY2VQcm9kdWNlci5qYXZhCmluZGV4IDE4YmJhNzcuLjkyNjE2ZjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1qYXZhZWUtaW5qZWN0aW9uL3NlcnZsZXQvdGVzdC91dGlsL0pQQVJlc291cmNlUHJvZHVjZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItamF2YWVlLWluamVjdGlvbi9zZXJ2bGV0L3Rlc3QvdXRpbC9KUEFSZXNvdXJjZVByb2R1Y2VyLmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKIEBTaW5nbGV0b24KIHB1YmxpYyBjbGFzcyBKUEFSZXNvdXJjZVByb2R1Y2VyIHsKICAgICBAUHJvZHVjZXMgQFBlcnNpc3RlbmNlQ29udGV4dCh1bml0TmFtZT0icHUxIikKLSAgICAvL0BUZXN0RGF0YWJhc2UgCisgICAgLy9AVGVzdERhdGFiYXNlCiAgICAgRW50aXR5TWFuYWdlciBjdXN0b21lckRhdGFiYXNlUGVyc2lzdGVuY2VVbml0OwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItamF2YWVlLWluamVjdGlvbi91dGlsL3Rlc3QvYmVhbnMvd2JpbmZsaWIvVGVzdEJlYW5JbldlYkluZkxpYi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLWphdmFlZS1pbmplY3Rpb24vdXRpbC90ZXN0L2JlYW5zL3diaW5mbGliL1Rlc3RCZWFuSW5XZWJJbmZMaWIuamF2YQppbmRleCA3NjM1Y2UxLi5kOGYwMjZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItamF2YWVlLWluamVjdGlvbi91dGlsL3Rlc3QvYmVhbnMvd2JpbmZsaWIvVGVzdEJlYW5JbldlYkluZkxpYi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1qYXZhZWUtaW5qZWN0aW9uL3V0aWwvdGVzdC9iZWFucy93YmluZmxpYi9UZXN0QmVhbkluV2ViSW5mTGliLmphdmEKQEAgLTI5LDExICsyOSwxMSBAQAogcHVibGljIGNsYXNzIFRlc3RCZWFuSW5XZWJJbmZMaWIgewogICAgIEBJbmplY3QKICAgICBCZWFuTWFuYWdlciBibTsKLSAgICAKLS8vICAgIEBJbmplY3QgLy9AVGVzdERhdGFiYXNlIAorCisvLyAgICBASW5qZWN0IC8vQFRlc3REYXRhYmFzZQogLy8gICAgRW50aXR5TWFuYWdlciBlbWZfYXRfaW5qOwogCi0gICAgQFBlcnNpc3RlbmNlQ29udGV4dCh1bml0TmFtZT0icHUxIikgIAorICAgIEBQZXJzaXN0ZW5jZUNvbnRleHQodW5pdE5hbWU9InB1MSIpCiAgICAgRW50aXR5TWFuYWdlciBlbWZfYXRfcHU7CiAKICAgICBwdWJsaWMgU3RyaW5nIHRlc3RJbmplY3Rpb24oKSB7CkBAIC00NCw4ICs0NCw4IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRU1GIGluamVjdGVkIGluIFdFQi1JTkYvbGliIGJlYW4gaXMgIiArIGVtZl9hdF9wdSk7CiAgICAgICAgIGlmIChlbWZfYXRfcHUgPT0gbnVsbCkKICAgICAgICAgICAgIHJldHVybiAiRU1GIGluamVjdGVkIHZpYSBAUGVyc2lzdGVuY2VDb250ZXh0IGlzIG5vdCBpbmplY3RlZCBpbnRvICIgKwotICAgICAgICAgICAgCQkidGhlIFRlc3RCZWFuIHBhY2thZ2VkIGluIFdFQi1JTkYvbGliIjsKLSAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICJ0aGUgVGVzdEJlYW4gcGFja2FnZWQgaW4gV0VCLUlORi9saWIiOworCiAgICAgICAgIFNldDxCZWFuPD8+PiB3ZWJpbmZMaWJCZWFucyA9IGJtLmdldEJlYW5zKFRlc3RCZWFuSW5XZWJJbmZMaWIuY2xhc3MsIG5ldyBBbm5vdGF0aW9uTGl0ZXJhbDxBbnk+KCkge30pOwogICAgICAgICBpZiAod2ViaW5mTGliQmVhbnMuc2l6ZSgpICE9IDEpCiAgICAgICAgICAgICByZXR1cm4gIlRlc3RCZWFuIGluIFdFQi1JTkYvbGliIGlzIG5vdCBhdmFpbGFibGUgdmlhIHRoZSBXRUItSU5GL2xpYiAiCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItb3JkZXJpbmctcmV2ZXJzZWQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLW9yZGVyaW5nLXJldmVyc2VkL1dlYlRlc3QuamF2YQppbmRleCA5Y2FiYjNkLi41Yjg2MTVlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItb3JkZXJpbmctcmV2ZXJzZWQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1vcmRlcmluZy1yZXZlcnNlZC9XZWJUZXN0LmphdmEKQEAgLTY5LDcgKzY5LDcgQEAKICAgICAgICAgICAgICAgICBsaW5lID0gaW5wdXQucmVhZExpbmUoKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImxpbmUgPSAiICsgbGluZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItb3JkZXJpbmctcmV2ZXJzZWQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1vcmRlcmluZy1yZXZlcnNlZC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGM2YjViNWEuLmViMzhhMTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1vcmRlcmluZy1yZXZlcnNlZC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1vcmRlcmluZy1yZXZlcnNlZC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLXdpdGgtb3JkZXJpbmctcmV2ZXJzZWQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1vcmRlcmluZy1yZXZlcnNlZC9zZXJ2bGV0L3NlcnZsZXQvVGVzdEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1vcmRlcmluZy1yZXZlcnNlZC9zZXJ2bGV0L3NlcnZsZXQvVGVzdEJlYW4uamF2YQppbmRleCA4YmNlYmI0Li5mNjkxZDk3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItb3JkZXJpbmctcmV2ZXJzZWQvc2VydmxldC9zZXJ2bGV0L1Rlc3RCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLW9yZGVyaW5nLXJldmVyc2VkL3NlcnZsZXQvc2VydmxldC9UZXN0QmVhbi5qYXZhCkBAIC0xNSw3ICsxNSw3IEBACiAgKi8KIHBhY2thZ2Ugc2VydmxldDsKIAotLy9TaW1wbGUgVGVzdEJlYW4gdG8gdGVzdCBDREkuIAorLy9TaW1wbGUgVGVzdEJlYW4gdG8gdGVzdCBDREkuCiBwdWJsaWMgY2xhc3MgVGVzdEJlYW4gewogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItb3JkZXJpbmctcmV2ZXJzZWQvc2VydmxldC9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItb3JkZXJpbmctcmV2ZXJzZWQvc2VydmxldC9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggOTk0NmYxMi4uYmE5OTJiYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLW9yZGVyaW5nLXJldmVyc2VkL3NlcnZsZXQvc2VydmxldC9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1vcmRlcmluZy1yZXZlcnNlZC9zZXJ2bGV0L3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQpAQCAtMzcsMjEgKzM3LDIxIEBACiBpbXBvcnQgamF2YXgubmFtaW5nLkluaXRpYWxDb250ZXh0OwogCiBAV2ViU2VydmxldCgKLSAgICBuYW1lID0gIm15dGVzdCIsIAotICAgIHVybFBhdHRlcm5zID0geyAiL215dXJsIiB9LCAKLSAgICBpbml0UGFyYW1zID0geyAKKyAgICBuYW1lID0gIm15dGVzdCIsCisgICAgdXJsUGF0dGVybnMgPSB7ICIvbXl1cmwiIH0sCisgICAgaW5pdFBhcmFtcyA9IHsKICAgICAgICAgQFdlYkluaXRQYXJhbShuYW1lID0gIm4xIiwgdmFsdWUgPSAidjEiKSwKICAgICAgICAgQFdlYkluaXRQYXJhbShuYW1lID0gIm4yIiwgdmFsdWUgPSAidjIiKSB9KQogcHVibGljIGNsYXNzIFRlc3RTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewogICAgIEBJbmplY3QKICAgICBUZXN0QmVhbiB0YjsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBCZWFuTWFuYWdlciBibTsKIAogICAgIEBJbmplY3QKICAgICBGb28gZjsgLy8gZnJvbSBXRUItSU5GL2xpYi9hbHBoYS5qYXIKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBCYXIgYjsgLy8gZnJvbSBXRUItSU5GL2xpYi9icmF2by5qYXIKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLW9yZGVyaW5nL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1vcmRlcmluZy9XZWJUZXN0LmphdmEKaW5kZXggMmExNDUzZi4uZWYzMTUxNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLW9yZGVyaW5nL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItb3JkZXJpbmcvV2ViVGVzdC5qYXZhCkBAIC02OSw3ICs2OSw3IEBACiAgICAgICAgICAgICAgICAgbGluZSA9IGlucHV0LnJlYWRMaW5lKCk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJsaW5lID0gIiArIGxpbmUpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmIChFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLW9yZGVyaW5nL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItb3JkZXJpbmcvYnVpbGQucHJvcGVydGllcwppbmRleCA1NDJkMDExLi5mODk1MDY0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItb3JkZXJpbmcvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItb3JkZXJpbmcvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi13aXRoLW9yZGVyaW5nIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItb3JkZXJpbmcvc2VydmxldC9zZXJ2bGV0L1Rlc3RCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItb3JkZXJpbmcvc2VydmxldC9zZXJ2bGV0L1Rlc3RCZWFuLmphdmEKaW5kZXggOGJjZWJiNC4uZjY5MWQ5NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLW9yZGVyaW5nL3NlcnZsZXQvc2VydmxldC9UZXN0QmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1vcmRlcmluZy9zZXJ2bGV0L3NlcnZsZXQvVGVzdEJlYW4uamF2YQpAQCAtMTUsNyArMTUsNyBAQAogICovCiBwYWNrYWdlIHNlcnZsZXQ7CiAKLS8vU2ltcGxlIFRlc3RCZWFuIHRvIHRlc3QgQ0RJLiAKKy8vU2ltcGxlIFRlc3RCZWFuIHRvIHRlc3QgQ0RJLgogcHVibGljIGNsYXNzIFRlc3RCZWFuIHsKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLW9yZGVyaW5nL3NlcnZsZXQvc2VydmxldC9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliLW9yZGVyaW5nL3NlcnZsZXQvc2VydmxldC9UZXN0U2VydmxldC5qYXZhCmluZGV4IDkyNTJmMmQuLjAzODQ0NTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi1vcmRlcmluZy9zZXJ2bGV0L3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWItb3JkZXJpbmcvc2VydmxldC9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTM4LDIxICszOCwyMSBAQAogaW1wb3J0IGphdmF4Lm5hbWluZy5Jbml0aWFsQ29udGV4dDsKIAogQFdlYlNlcnZsZXQoCi0gICAgbmFtZSA9ICJteXRlc3QiLCAKLSAgICB1cmxQYXR0ZXJucyA9IHsgIi9teXVybCIgfSwgCi0gICAgaW5pdFBhcmFtcyA9IHsgCisgICAgbmFtZSA9ICJteXRlc3QiLAorICAgIHVybFBhdHRlcm5zID0geyAiL215dXJsIiB9LAorICAgIGluaXRQYXJhbXMgPSB7CiAgICAgICAgIEBXZWJJbml0UGFyYW0obmFtZSA9ICJuMSIsIHZhbHVlID0gInYxIiksCiAgICAgICAgIEBXZWJJbml0UGFyYW0obmFtZSA9ICJuMiIsIHZhbHVlID0gInYyIikgfSkKIHB1YmxpYyBjbGFzcyBUZXN0U2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKICAgICBASW5qZWN0CiAgICAgVGVzdEJlYW4gdGI7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgQmVhbk1hbmFnZXIgYm07CiAKICAgICBASW5qZWN0CiAgICAgRm9vIGY7IC8vIGZyb20gV0VCLUlORi9saWIvYWxwaGEuamFyCi0gICAgCisKICAgICBASW5qZWN0CiAgICAgQmFyIGI7IC8vIGZyb20gV0VCLUlORi9saWIvYnJhdm8uamFyCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWIvV2ViVGVzdC5qYXZhCmluZGV4IDFlYTcxMGIuLmZlN2I0YjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliL1dlYlRlc3QuamF2YQpAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBAV2ViU2VydmxldCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKQEAgLTU2LDcgKzU2LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICArICIvbXl1cmwiOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9wZW5pbmcgY29ubmVjdGlvbiB0byAiICsgdXJsKTsKQEAgLTk1LDEwICs5NSwxMCBAQAogICAgICAgICAgICAgaWYgKEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWIvYnVpbGQucHJvcGVydGllcwppbmRleCBiYjdiYzhkLi41ZDdlZGU1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi9idWlsZC54bWwKaW5kZXggN2Y3ZjNlZS4uZjE4MTQxYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWIvYnVpbGQueG1sCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgIDwvZGVsZXRlPgogICAgICAgICA8ZGVsZXRlIGZpbGU9ImxpYi9iZWFuLWxpYi5qYXIiLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8IS0tIGNyZWF0ZSBXRUItSU5GL2xpYi9iZWFuLWxpYi5qYXIgLS0+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CkBAIC01NCw4ICs1NCw4IEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CiAgICAgICAgIDwvamFyPgogICAgICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KLSAgIAotICAgICAgICA8IS0tIGNvbXBpbGUgdGVzdCBzZXJ2bGV0IC0tPiAgICAgCisKKyAgICAgICAgPCEtLSBjb21waWxlIHRlc3Qgc2VydmxldCAtLT4KICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iY29tbW9uLnhtbDogQ29tcGlsaW5nIHRlc3Qgc291cmNlIGZpbGVzIiBsZXZlbD0idmVyYm9zZSIvPgogICAgICAgICA8bWtkaXIgZGlyPSJzZXJ2bGV0Ii8+CkBAIC02MywyMyArNjMsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtOTEsMTAgKzkxLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliL3NlcnZsZXQvVGVzdEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi9zZXJ2bGV0L1Rlc3RCZWFuLmphdmEKaW5kZXggYzY5NmNhZi4uNjA4YzRjNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliL3NlcnZsZXQvVGVzdEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWIvc2VydmxldC9UZXN0QmVhbi5qYXZhCkBAIC0xNCw4ICsxNCw4IEBACiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKICAqLwogCi0vL1NpbXBsZSBUZXN0QmVhbiB0byB0ZXN0IENESS4gCi1wdWJsaWMgY2xhc3MgVGVzdEJlYW4gCisvL1NpbXBsZSBUZXN0QmVhbiB0byB0ZXN0IENESS4KK3B1YmxpYyBjbGFzcyBUZXN0QmVhbgogewogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWIvc2VydmxldC9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi13aXRoLXdlYi1pbmYtbGliL3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQppbmRleCA5MDhhNWNkLi44YmQ5ZTA1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uLXdpdGgtd2ViLWluZi1saWIvc2VydmxldC9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24td2l0aC13ZWItaW5mLWxpYi9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTQxLDggKzQxLDggQEAKICAgICBASW5qZWN0IFRlc3RCZWFuSW5XZWJJbmZMaWIgdGJpd2lsOwogCiAgICAgQmVhbk1hbmFnZXIgYm0xOwotICAgIAotICAgIEBJbmplY3QgCisKKyAgICBASW5qZWN0CiAgICAgcHJpdmF0ZSB0cmFuc2llbnQgb3JnLmpib3NzLmxvZ2dpbmcuTG9nZ2VyIGxvZzsKIAogICAgIHB1YmxpYyB2b2lkIHNlcnZpY2UoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpCkBAIC03MiwxNCArNzIsMTQgQEAKICAgICAgICAgLy92aWEgQmVhbk1hbmFnZXIgb2YgV0FSCiAgICAgICAgIFNldCB3YXJCZWFucyA9IGJtLmdldEJlYW5zKFRlc3RCZWFuLmNsYXNzLG5ldyBBbm5vdGF0aW9uTGl0ZXJhbDxBbnk+KCkge30pOwogICAgICAgICBpZiAod2FyQmVhbnMuc2l6ZSgpICE9IDEpIG1zZyArPSAiVGVzdEJlYW4gaW4gV0FSIGlzIG5vdCBhdmFpbGFibGUgdmlhIHRoZSBXQVIgQmVhbk1hbmFnZXIiOwotICAgICAgICAKKwogICAgICAgICBTZXQgd2ViaW5mTGliQmVhbnMgPSBibS5nZXRCZWFucyhUZXN0QmVhbkluV2ViSW5mTGliLmNsYXNzLG5ldyBBbm5vdGF0aW9uTGl0ZXJhbDxBbnk+KCkge30pOwogICAgICAgICBpZiAod2ViaW5mTGliQmVhbnMuc2l6ZSgpICE9IDEpIG1zZyArPSAiVGVzdEJlYW4gaW4gV0VCLUlORi9saWIgaXMgbm90IGF2YWlsYWJsZSB2aWEgdGhlIFdBUiBCZWFuTWFuYWdlciI7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdCBCZWFuIGZyb20gV0VCLUlORi9saWIgdmlhIEJlYW5NYW5hZ2VyOiIgKyB3ZWJpbmZMaWJCZWFucyk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vVGVzdCBpbmplY3Rpb24gaW50byBXRUItSU5GL2xpYiBiZWFucwogICAgICAgICBtc2cgKz0gdGJpd2lsLnRlc3RJbmplY3Rpb24oKTsKLSAgICAgICAgCisKICAgICAgICAgd3JpdGVyLndyaXRlKCJpbml0UGFyYW1zOiAiICsgbXNnICsgIlxuIik7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9lbWJlZGRlZC1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9hcHAvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9lbWJlZGRlZC1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9hcHAvYnVpbGQueG1sCmluZGV4IDhiZTJhYjcuLmE5MzIzZDUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vZW1iZWRkZWQtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvYXBwL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2VtYmVkZGVkLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL2FwcC9idWlsZC54bWwKQEAgLTM4LDggKzM4LDggQEAKICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyIi8+CiAgPCEtLQogICAgPGFudGNhbGwgdGFyZ2V0PSJlYXItY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0iYXBwbmFtZSIgdmFsdWU9ImdlbmVyaWMtZW1iZWRkZWQiLz4KLQk8cGFyYW0gbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIi8+CisgICAgPHBhcmFtIG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJnZW5lcmljLWVtYmVkZGVkIi8+CisgICAgPHBhcmFtIG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9Ik1FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIvPgogICAgPC9hbnRjYWxsPgogIC0tPgogICA8L3RhcmdldD4KQEAgLTUxLDcgKzUxLDcgQEAKICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KICAgICAgPGVhciBlYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vZ2VuZXJpYy1lbWJlZGRlZEFwcC5lYXIiCiAgICAgICAgYXBweG1sPSJNRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiPgotICAgICAgICAgICAgCisKICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSI+CiAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLmphciIvPgogICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi53YXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vZW1iZWRkZWQtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvYXBwL3NyYy9NRVRBLUlORi9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vZW1iZWRkZWQtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvYXBwL3NyYy9NRVRBLUlORi9lamItamFyLnhtbAppbmRleCA2OTZkZDNlLi41YTUyMTBlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2VtYmVkZGVkLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9lbWJlZGRlZC1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9hcHAvc3JjL01FVEEtSU5GL2VqYi1qYXIueG1sCkBAIC04MSw4ICs4MSw4IEBACiAgICAgICAgIDxyZXMtc2hhcmluZy1zY29wZT5TaGFyZWFibGU8L3Jlcy1zaGFyaW5nLXNjb3BlPgogICAgICAgPC9yZXNvdXJjZS1yZWY+CiAgICAgICA8cmVzb3VyY2UtZW52LXJlZj4KLQk8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmVpcy90ZXN0QWRtaW48L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KLQk8cmVzb3VyY2UtZW52LXJlZi10eXBlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC9yZXNvdXJjZS1lbnYtcmVmLXR5cGU+CisgICAgPHJlc291cmNlLWVudi1yZWYtbmFtZT5laXMvdGVzdEFkbWluPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+CisgICAgPHJlc291cmNlLWVudi1yZWYtdHlwZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvcmVzb3VyY2UtZW52LXJlZi10eXBlPgogICAgICAgPC9yZXNvdXJjZS1lbnYtcmVmPgogICAgICAgPHNlY3VyaXR5LWlkZW50aXR5PgogICAgICAgICA8dXNlLWNhbGxlci1pZGVudGl0eS8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2VtYmVkZGVkLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9lbWJlZGRlZC1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9hcHAvc3JjL01FVEEtSU5GL3N1bi1lamItamFyLnhtbAppbmRleCBkZTcwMWRmLi45MTNhNDY2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2VtYmVkZGVkLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vZW1iZWRkZWQtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvYXBwL3NyYy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwKQEAgLTg0LDcgKzg0LDcgQEAKICAgICAgIDwvcmVzb3VyY2UtcmVmPgogICAgICAgPHJlc291cmNlLWVudi1yZWY+CiAgICAgICAgIDxyZXNvdXJjZS1lbnYtcmVmLW5hbWU+ZWlzL3Rlc3RBZG1pbjwvcmVzb3VyY2UtZW52LXJlZi1uYW1lPgotCTxqbmRpLW5hbWU+ZWlzL3Rlc3RBZG1pbjwvam5kaS1uYW1lPgorICAgIDxqbmRpLW5hbWU+ZWlzL3Rlc3RBZG1pbjwvam5kaS1uYW1lPgogICAgICAgPC9yZXNvdXJjZS1lbnYtcmVmPgogICAgICAgPGdlbi1jbGFzc2VzLz4KICAgICA8L2VqYj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vZW1iZWRkZWQtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvYXBwL3NyYy9iZWFucy9NZXNzYWdlQ2hlY2tlckVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9lbWJlZGRlZC1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9hcHAvc3JjL2JlYW5zL01lc3NhZ2VDaGVja2VyRUpCLmphdmEKaW5kZXggYTdmMjRiZS4uZmUxNjE4NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9lbWJlZGRlZC1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9hcHAvc3JjL2JlYW5zL01lc3NhZ2VDaGVja2VyRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9lbWJlZGRlZC1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9hcHAvc3JjL2JlYW5zL01lc3NhZ2VDaGVja2VyRUpCLmphdmEKQEAgLTQ0LDcgKzQ0LDcgQEAKIAogICAgIHB1YmxpYyBNZXNzYWdlQ2hlY2tlckVKQigpIHt9CiAKLSAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSAKKyAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKQogICAgICAgICB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJiZWFuIHJlbW92ZWQiKTsKICAgICAgICAgaGVsZENvbiA9IG51bGw7CkBAIC03MiwxMSArNzIsMTEgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHN5bmNocm9uaXplZCAoQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpKSB7CiAgICAgICAgICAgICAgICAgLy9UZWxsIHRoZSByZXNvdXJjZSBhZGFwdGVyIHRoZSBjbGllbnQgaXMgcmVhZHkgdG8gcnVuCi0gICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLm5vdGlmeUFsbCgpOyAKLSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkubm90aWZ5QWxsKCk7CisKICAgICAgICAgICAgICAgICBkZWJ1ZygiTk9USUZJRUQuLi4gU1RBUlQgV0FJVElORyIpOwogICAgICAgICAgICAgICAgIC8vV2FpdCB1bnRpbCBiZWluZyB0b2xkIHRvIHJlYWQgZnJvbSB0aGUgZGF0YWJhc2UKLSAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkud2FpdCgpOyAKKyAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkud2FpdCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwpAQCAtODQsMjIgKzg0LDIyIEBACiAgICAgfQogCiAgICAgcHVibGljIGludCBnZXRNZXNzYWdlQ291bnQoKSB7Ci0JdHJ5IHsKKyAgICB0cnkgewogICAgICAgICAgICAgQ29ubmVjdGlvbiBjb24gPSBnZXRGcmVzaENvbm5lY3Rpb24oKTsKICAgICAgICAgICAgIGludCBjb3VudDEgPSBnZXRDb3VudChjb24pOwogICAgICAgICAgICAgY29uLmNsb3NlKCk7Ci0gICAgICAgICAgICAKLQkgICAgLyoKKworICAgICAgICAvKgogICAgICAgICAgICAgc3luY2hyb25pemVkKENvbnRyb2xzLmdldExvY2tPYmplY3QoKSkgewogICAgICAgICAgICAgICAgIENvbnRyb2xzLmdldExvY2tPYmplY3QoKS5ub3RpZnkoKTsKICAgICAgICAgICAgIH0KLQkgICAgKi8KLSAgICAgICAgICAgICAgICAKKyAgICAgICAgKi8KKwogICAgICAgICAgICAgcmV0dXJuIGNvdW50MTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5vdXQpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlKTsKLQl9CisgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgaW50IGdldENvdW50KENvbm5lY3Rpb24gY29uKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKQEAgLTEyNSwxMCArMTI1LDEwIEBACiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICB1c2VyID0gKFN0cmluZykgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3VzZXIiKTsKICAgICAgICAgICAgIHBhc3N3b3JkID0gKFN0cmluZykgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3Bhc3N3b3JkIik7Ci0JICAgIENvbnRyb2xzID0gKE15QWRtaW5PYmplY3QpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9laXMvdGVzdEFkbWluIik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ0FMTElORyBJTklUSUxJWkUgXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV0iKTsKLQkgICAgQ29udHJvbHMuaW5pdGlhbGl6ZSgpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNBTExFRCBJTklUSUxJWkUgXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV0iKTsKKyAgICAgICAgQ29udHJvbHMgPSAoTXlBZG1pbk9iamVjdCkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2Vpcy90ZXN0QWRtaW4iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDQUxMSU5HIElOSVRJTElaRSBdXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXSIpOworICAgICAgICBDb250cm9scy5pbml0aWFsaXplKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ0FMTEVEIElOSVRJTElaRSBdXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXSIpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CkBAIC0xNjMsNyArMTYzLDcgQEAKICAgICAgICAgICAgIGRlYnVnKCJMb29rZWQgdXAgRGF0YXNvdXJjZVxuIik7CiAgICAgICAgICAgICBkZWJ1ZygiR2V0IEpEQkMgY29ubmVjdGlvbiwgYXV0byBzaWduIG9uIik7CiAgICAgICAgICAgICBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKGNvbiAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbjsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0xNzQsNyArMTc0LDcgQEAKICAgICAgICAgICAgIHRocm93IGV4MTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBjbG9zZUNvbm5lY3Rpb24oQ29ubmVjdGlvbiBjb24pIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgICBpZiAoaGVsZENvbiAhPSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2VtYmVkZGVkLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL2FwcC9zcmMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vZW1iZWRkZWQtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvYXBwL3NyYy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGRhZDIwN2IuLjBiMzhjMTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vZW1iZWRkZWQtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvYXBwL3NyYy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vZW1iZWRkZWQtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvYXBwL3NyYy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIGVqYi1qYXIueG1sPU1FVEEtSU5GL2VqYi1qYXIueG1sCiBzdW4tZWpiLWphci54bWw9TUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2VtYmVkZGVkLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL2FwcC9zcmMvbWRiL015TWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vZW1iZWRkZWQtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhCmluZGV4IGRkMDIwMzkuLjVmYWUwZjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vZW1iZWRkZWQtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vZW1iZWRkZWQtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhCkBAIC00Niw3ICs0Niw3IEBACiAgICAgICogc2V0TWVzc2FnZURyaXZlbkNvbnRleHQgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IKICAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggb25lIGFyZ3VtZW50IG9mIHR5cGUKICAgICAgKiBqYWthcnRhLmVqYi5NZXNzYWdlRHJpdmVuQ29udGV4dC4KLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSBtZGMKICAgICAgKiAgICAgICAgICAgIHRoZSBjb250ZXh0IHRvIHNldAogICAgICAqLwpAQCAtNjQsOSArNjQsOSBAQAogICAgIC8qKgogICAgICAqIG9uTWVzc2FnZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvciBzdGF0aWMpLCB3aXRoIGEKICAgICAgKiByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBvbmUgYXJndW1lbnQgb2YgdHlwZSBqYWthcnRhLmptcy5NZXNzYWdlLgotICAgICAqIAorICAgICAqCiAgICAgICogQ2FzdHMgdGhlIGluY29taW5nIE1lc3NhZ2UgdG8gYSBUZXh0TWVzc2FnZSBhbmQgZGlzcGxheXMgdGhlIHRleHQuCi0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gaW5NZXNzYWdlCiAgICAgICogICAgICAgICAgICB0aGUgaW5jb21pbmcgbWVzc2FnZQogICAgICAqLwpAQCAtMTIzLDE0ICsxMjMsMTQgQEAKICAgICAgICAgICAgICAgICAgKiBkZWJ1ZygiTG9va2VkIHVwIERhdGFzb3VyY2VcbiIpOwogICAgICAgICAgICAgICAgICAqIGRlYnVnKCJHZXQgSkRCQyBjb25uZWN0aW9uLCBhdXRvIHNpZ24gb24iKTsgZGJDb25uZWN0aW9uID0KICAgICAgICAgICAgICAgICAgKiBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgICogCisgICAgICAgICAgICAgICAgICoKICAgICAgICAgICAgICAgICAgKiBTdGF0ZW1lbnQgc3RtdCA9IGRiQ29ubmVjdGlvbi5jcmVhdGVTdGF0ZW1lbnQoKTsgU3RyaW5nIHF1ZXJ5CiAgICAgICAgICAgICAgICAgICogPSAiU0VMRUNUIGlkIGZyb20gbWVzc2FnZXMgd2hlcmUgaWQgPSAnUVEnIjsgUmVzdWx0U2V0CiAgICAgICAgICAgICAgICAgICogcmVzdWx0cyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHF1ZXJ5KTsgcmVzdWx0cy5uZXh0KCk7CiAgICAgICAgICAgICAgICAgICogU3lzdGVtLm91dC5wcmludGxuKCJRUSBoYXMgYmFsYW5jZSAiICsKICAgICAgICAgICAgICAgICAgKiByZXN1bHRzLmdldEludCgiYmFsYW5jZSIpICsgIiBkb2xsYXJzIik7IHJlc3VsdHMuY2xvc2UoKTsKICAgICAgICAgICAgICAgICAgKiBzdG10LmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgICogCisgICAgICAgICAgICAgICAgICoKICAgICAgICAgICAgICAgICAgKiBTeXN0ZW0ub3V0LnByaW50bG4oIlJlYWQgb25lIGFjY291bnRcbiIpOwogICAgICAgICAgICAgICAgICAqLwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2VtYmVkZGVkLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vZW1iZWRkZWQtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvYnVpbGQueG1sCmluZGV4IGNjZDNmYTUuLmRiNjZmMGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vZW1iZWRkZWQtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vZW1iZWRkZWQtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvYnVpbGQueG1sCkBAIC00OCw3ICs0OCw3IEBACiAKICAgPHRhcmdldCBuYW1lPSJydW50ZXN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0iYXBwbmFtZSIgdmFsdWU9ImdlbmVyaWMtZW1iZWRkZWQiIC8+CisgICAgPHBhcmFtIG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJnZW5lcmljLWVtYmVkZGVkIiAvPgogICAgIDwvYW50Y2FsbD4KICAgPC90YXJnZXQ+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vZW1iZWRkZWQtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvTUVUQS1JTkYvcmEueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9lbWJlZGRlZC1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9NRVRBLUlORi9yYS54bWwKaW5kZXggMmNhMmViYy4uMjFkZWI5MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9lbWJlZGRlZC1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9NRVRBLUlORi9yYS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9lbWJlZGRlZC1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9NRVRBLUlORi9yYS54bWwKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgPGluYm91bmQtcmVzb3VyY2VhZGFwdGVyPgotICAgICAgICAgICAgPG1lc3NhZ2VhZGFwdGVyPiAgICAgICAgICAKKyAgICAgICAgICAgIDxtZXNzYWdlYWRhcHRlcj4KICAgICAgICAgICAgICAgICA8bWVzc2FnZWxpc3RlbmVyPgogICAgICAgICAgICAgICAgICAgICA8bWVzc2FnZWxpc3RlbmVyLXR5cGU+CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIKQEAgLTU2LDcgKzU2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIDwvYWN0aXZhdGlvbnNwZWMtY2xhc3M+CiAgICAgICAgICAgICAgICAgICAgIDwvYWN0aXZhdGlvbnNwZWM+CiAgICAgICAgICAgICAgICAgPC9tZXNzYWdlbGlzdGVuZXI+Ci0gICAgICAgICAgICA8L21lc3NhZ2VhZGFwdGVyPiAgICAgICAgICAKKyAgICAgICAgICAgIDwvbWVzc2FnZWFkYXB0ZXI+CiAgICAgICAgIDwvaW5ib3VuZC1yZXNvdXJjZWFkYXB0ZXI+CiAgICAgICAgIDxhZG1pbm9iamVjdD4KICAgICAgICAgICA8YWRtaW5vYmplY3QtaW50ZXJmYWNlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC9hZG1pbm9iamVjdC1pbnRlcmZhY2U+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2VtYmVkZGVkLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2VtYmVkZGVkLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9idWlsZC54bWwKaW5kZXggZmY4YmNjMi4uODQ5NmY2MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9lbWJlZGRlZC1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vZW1iZWRkZWQtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2J1aWxkLnhtbApAQCAtMzAsOCArMzAsOCBAQAogCiAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJpbml0LWNvbW1vbiIgPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJidWlsZC5jbGFzc2VzLmRpciIgdmFsdWU9ImNsYXNzZXMiIC8+Ci0JPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNvbm5lY3RvciIgLz4KKyAgICA8cGFyYW0gbmFtZT0iYnVpbGQuY2xhc3Nlcy5kaXIiIHZhbHVlPSJjbGFzc2VzIiAvPgorICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjb25uZWN0b3IiIC8+CiAgICAgPC9hbnRjYWxsPgogICAgIDxqYXIgamFyZmlsZT0iLi4vZ2VuZXJpYy1yYS5qYXIiIGJhc2VkaXI9ImNsYXNzZXMiCiAgICAgICAgICBpbmNsdWRlcz0iY29ubmVjdG9yLyouY2xhc3MiIC8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2VtYmVkZGVkLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vZW1iZWRkZWQtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhCmluZGV4IDM1NDEyMzUuLjhhYmEyNjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vZW1iZWRkZWQtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vZW1iZWRkZWQtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhCkBAIC0xNyw3ICsxNyw3IEBACiBwYWNrYWdlIGNvbm5lY3RvcjsKIAogLyoqCi0gKiAKKyAqCiAgKiBAYXV0aG9yIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgQ29udHJvbHMgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9lbWJlZGRlZC1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9lbWJlZGRlZC1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhCmluZGV4IDBjODBhYTYuLjhjNmIyMmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vZW1iZWRkZWQtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2VtYmVkZGVkLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEKQEAgLTIyLDcgKzIyLDcgQEAKIGltcG9ydCBqYWthcnRhLnJlc291cmNlLnNwaS53b3JrLldvcms7CiAKIC8qKgotICogCisgKgogICogQGF1dGhvciBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIERlbGl2ZXJ5V29yayBpbXBsZW1lbnRzIFdvcmsgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9lbWJlZGRlZC1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL01lc3NhZ2VzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2VtYmVkZGVkLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvTWVzc2FnZXMuamF2YQppbmRleCA1OTdhMzRiLi4yMTZkZmEyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2VtYmVkZGVkLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvTWVzc2FnZXMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2VtYmVkZGVkLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvTWVzc2FnZXMuamF2YQpAQCAtMjEsNyArMjEsNyBAQAogCiAvKioKICAqIGNvbGxlY3Rpb24gb2YgbWVzc2FnZXMuCi0gKiAKKyAqCiAgKiBAYXV0aG9yIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgTWVzc2FnZXMgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9lbWJlZGRlZC1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL015V29yay5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9lbWJlZGRlZC1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL015V29yay5qYXZhCmluZGV4IDYwNzVlYzQuLjZmNWYxNWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vZW1iZWRkZWQtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2Nvbm5lY3Rvci9NeVdvcmsuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2VtYmVkZGVkLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvTXlXb3JrLmphdmEKQEAgLTIzLDcgKzIzLDcgQEAKIGltcG9ydCBqYWthcnRhLnJlc291cmNlLnNwaS53b3JrLldvcmtNYW5hZ2VyOwogCiAvKioKLSAqIAorICoKICAqIEBhdXRob3IgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBNeVdvcmsgaW1wbGVtZW50cyBXb3JrIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vZW1iZWRkZWQtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9lbWJlZGRlZC1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEKaW5kZXggNjI4NTljOC4uNDQ5ZTI0NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9lbWJlZGRlZC1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9lbWJlZGRlZC1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEKQEAgLTIyLDcgKzIyLDcgQEAKIC8qKgogICogVGhpcyBjbGFzcyBpcyBzdXBwb3NlZCB0byBpbXBsZW1lbnRlZCBhcyBhIEphdmFCZWFuIHNvIHRoYXQgdGhlIGFwcCBzZXJ2ZXIKICAqIGNhbiBpbnN0YW50aWF0ZSBhbmQgY29uZmlndXJlIGl0IGF0IHRoZSBydW50aW1lLgotICogCisgKgogICogQGF1dGhvciBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIFNpbXBsZUFjdGl2YXRpb25TcGVjIGltcGxlbWVudHMgQWN0aXZhdGlvblNwZWMsCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2VtYmVkZGVkLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9lbWJlZGRlZC1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YQppbmRleCAwZjcxYjI3Li43YTkxY2RmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2VtYmVkZGVkLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vZW1iZWRkZWQtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEKQEAgLTM1LDcgKzM1LDcgQEAKIAogLyoqCiAgKiBUaGlzIGlzIGEgc2FtcGxlIHJlc291cmNlIGFkYXB0ZXIKLSAqIAorICoKICAqIEBhdXRob3IgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBTaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsIGltcGxlbWVudHMgUmVzb3VyY2VBZGFwdGVyLApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9lbWJlZGRlZC1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL1Rlc3RXTVdvcmsuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vZW1iZWRkZWQtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2Nvbm5lY3Rvci9UZXN0V01Xb3JrLmphdmEKaW5kZXggNmNmNTQ2ZS4uYTg0N2I2NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9lbWJlZGRlZC1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL1Rlc3RXTVdvcmsuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2VtYmVkZGVkLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvVGVzdFdNV29yay5qYXZhCkBAIC0yMiw3ICsyMiw3IEBACiBpbXBvcnQgamFrYXJ0YS5yZXNvdXJjZS5zcGkud29yay5Xb3JrTWFuYWdlcjsKIAogLyoqCi0gKiAKKyAqCiAgKiBAYXV0aG9yIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgVGVzdFdNV29yayBpbXBsZW1lbnRzIFdvcmsgewpAQCAtMzMsNyArMzMsNyBAQAogICAgIHByaXZhdGUgYm9vbGVhbiBkb05lc3Q7CiAgICAgcHJpdmF0ZSBXb3JrTWFuYWdlciB3bTsKICAgICBwcml2YXRlIEV4ZWN1dGlvbkNvbnRleHQgY3R4OwotICAgIAorCiAgICAgcHVibGljIFRlc3RXTVdvcmsoaW50IGlkLCBib29sZWFuIGlzUm9ndWUpIHsKICAgICAgICAgdGhpcyhpZCwgaXNSb2d1ZSwgZmFsc2UsIG51bGwpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vZW1iZWRkZWQtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9lbWJlZGRlZC1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEKaW5kZXggYWRhMGEwYy4uODc5MDU4YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9lbWJlZGRlZC1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9lbWJlZGRlZC1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEKQEAgLTMyLDcgKzMyLDcgQEAKIGltcG9ydCBqYXZheC50cmFuc2FjdGlvbi54YS5YaWQ7CiAKIC8qKgotICogCisgKgogICogQGF1dGhvciBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIFdvcmtEaXNwYXRjaGVyIGltcGxlbWVudHMgV29yayB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2VtYmVkZGVkLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL2VtYmVkZGVkLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEKaW5kZXggMTkxYjkwNC4uMzIzMTkwYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9lbWJlZGRlZC1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vZW1iZWRkZWQtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YQpAQCAtNjgsNyArNjgsNyBAQAogCiAgICAgLyoqCiAgICAgICogQ29tcHV0ZSB0aGUgaGFzaCBjb2RlLgotICAgICAqIAorICAgICAqCiAgICAgICogQHJldHVybiB0aGUgY29tcHV0ZWQgaGFzaGNvZGUKICAgICAgKi8KICAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewpAQCAtODIsMTMgKzgyLDEzIEBACiAKICAgICAvKgogICAgICAqIENvbnZlcnQgdG8gU3RyaW5nCi0gICAgICogCisgICAgICoKICAgICAgKiA8cD4gVGhpcyBpcyBub3JtYWxseSB1c2VkIHRvIGRpc3BsYXkgdGhlIFhJRCB3aGVuIGRlYnVnZ2luZy4KICAgICAgKi8KIAogICAgIC8qKgogICAgICAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhpcyBYSUQuCi0gICAgICogCisgICAgICoKICAgICAgKiBAcmV0dXJuIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBYSUQKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewpAQCAtMTA2LDcgKzEwNiw3IEBACiAKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSBicmFuY2ggcXVhbGlmaWVyIGZvciB0aGlzIFhJRC4KLSAgICAgKiAKKyAgICAgKgogICAgICAqIEByZXR1cm4gdGhlIGJyYW5jaCBxdWFsaWZpZXIKICAgICAgKi8KICAgICBwdWJsaWMgYnl0ZVtdIGdldEJyYW5jaFF1YWxpZmllcigpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vbm8taW50ZXJmYWNlLWxvY2FsLXZpZXctcHJveHktc2VyaWFsaXphYmxlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL25vLWludGVyZmFjZS1sb2NhbC12aWV3LXByb3h5LXNlcmlhbGl6YWJsZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDcwNmQ0NmEuLmM5N2Y5MWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vbm8taW50ZXJmYWNlLWxvY2FsLXZpZXctcHJveHktc2VyaWFsaXphYmxlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9uby1pbnRlcmZhY2UtbG9jYWwtdmlldy1wcm94eS1zZXJpYWxpemFibGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1uby1pbnRlcmZhY2UtbG9jYWwtdmlldy1wcm94eS1zZXJpYWxpemFibGUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vbm8taW50ZXJmYWNlLWxvY2FsLXZpZXctcHJveHktc2VyaWFsaXphYmxlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vbm8taW50ZXJmYWNlLWxvY2FsLXZpZXctcHJveHktc2VyaWFsaXphYmxlL2J1aWxkLnhtbAppbmRleCAyOTVkMDg2Li5lYjc5MGJmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL25vLWludGVyZmFjZS1sb2NhbC12aWV3LXByb3h5LXNlcmlhbGl6YWJsZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9uby1pbnRlcmZhY2UtbG9jYWwtdmlldy1wcm94eS1zZXJpYWxpemFibGUvYnVpbGQueG1sCkBAIC0zMyw3NSArMzMsNzUgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCxjcmVhdGUtcmVzb3VyY2VzLGRlcGxveSxydW4sdW5kZXBsb3ksZGVsZXRlLXJlc291cmNlcyIgLz4KIAotCTx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iIC8+Ci0JCTxkZWxldGU+Ci0JCQk8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIiAvPgotCQkJPGZpbGVzZXQgZGlyPSJjbGllbnQvdGVzdC9jbGllbnQiIGluY2x1ZGVzPSIqLmNsYXNzIiAvPgotCQk8L2RlbGV0ZT4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIiAvPgorICAgICAgICA8ZGVsZXRlPgorICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIgLz4KKyAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iY2xpZW50L3Rlc3QvY2xpZW50IiBpbmNsdWRlcz0iKi5jbGFzcyIgLz4KKyAgICAgICAgPC9kZWxldGU+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+Ci0JCQk8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIgLz4KLQkJPC9hbnRjYWxsPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0IiAvPgorICAgICAgICA8L2FudGNhbGw+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLQkJPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIgLz4KLQkJPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+Ci0JCQk8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIiAvPgotCQkJPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiIC8+Ci0JCTwvYW50Y2FsbD4KKyAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIgLz4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIiAvPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiIC8+CisgICAgICAgIDwvYW50Y2FsbD4KIAotCQk8amF2YWMgc3JjZGlyPSJjbGllbnQiIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIgaW5jbHVkZXM9InRlc3QvY2xpZW50L1dlYlRlc3QuamF2YSIgLz4KKyAgICAgICAgPGphdmFjIHNyY2Rpcj0iY2xpZW50IiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiIGluY2x1ZGVzPSJ0ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEiIC8+CiAKLQk8L3RhcmdldD4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CisgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIAotCTx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iIC8+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIgLz4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iY3JlYXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiI+Ci0JCQk8cGFyYW0gbmFtZT0iamRiYy5jb25ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1kZXYtdGVzdC1wb29sIiAvPgotCQk8L2FudGNhbGw+Ci0JCTxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJqZGJjLmNvbm5wb29sLm5hbWUiIHZhbHVlPSJqZGJjLWRldi10ZXN0LXBvb2wiIC8+Ci0JCQk8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9qZGJjLWRldi10ZXN0LXJlc291cmNlIiAvPgotCQk8L2FudGNhbGw+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbm5wb29sLm5hbWUiIHZhbHVlPSJqZGJjLWRldi10ZXN0LXBvb2wiIC8+CisgICAgICAgIDwvYW50Y2FsbD4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ubnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtZGV2LXRlc3QtcG9vbCIgLz4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2pkYmMtZGV2LXRlc3QtcmVzb3VyY2UiIC8+CisgICAgICAgIDwvYW50Y2FsbD4KKyAgICA8L3RhcmdldD4KIAogCi0JPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGphdmEgY2xhc3NuYW1lPSJ0ZXN0LmNsaWVudC5XZWJUZXN0Ij4KLQkJCTxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIgLz4KLQkJCTxhcmcgdmFsdWU9IiR7aHR0cC5wb3J0fSIgLz4KLQkJCTxhcmcgdmFsdWU9IiR7Y29udGV4dHJvb3R9IiAvPgotCQkJPGNsYXNzcGF0aD4KLQkJCQk8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiIC8+Ci0JCQkJPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJjbGllbnQiIC8+Ci0JCQk8L2NsYXNzcGF0aD4KLQkJPC9qYXZhPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0idGVzdC5jbGllbnQuV2ViVGVzdCI+CisgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iIC8+CisgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAucG9ydH0iIC8+CisgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2NvbnRleHRyb290fSIgLz4KKyAgICAgICAgICAgIDxjbGFzc3BhdGg+CisgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIiAvPgorICAgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iY2xpZW50IiAvPgorICAgICAgICAgICAgPC9jbGFzc3BhdGg+CisgICAgICAgIDwvamF2YT4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIiAvPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIiAvPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2pkYmMtZGV2LXRlc3QtcmVzb3VyY2UiIC8+Ci0JCTwvYW50Y2FsbD4KKyAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvamRiYy1kZXYtdGVzdC1yZXNvdXJjZSIgLz4KKyAgICAgICAgPC9hbnRjYWxsPgogCi0JCTxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJqZGJjLmNvbm5wb29sLm5hbWUiIHZhbHVlPSJqZGJjLWRldi10ZXN0LXBvb2wiIC8+Ci0JCTwvYW50Y2FsbD4KLQk8L3RhcmdldD4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1jb25ucG9vbC1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ubnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtZGV2LXRlc3QtcG9vbCIgLz4KKyAgICAgICAgPC9hbnRjYWxsPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JCTxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIiAvPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIgLz4KKyAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vbm8taW50ZXJmYWNlLWxvY2FsLXZpZXctcHJveHktc2VyaWFsaXphYmxlL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0QmVhbkludGVyZmFjZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9uby1pbnRlcmZhY2UtbG9jYWwtdmlldy1wcm94eS1zZXJpYWxpemFibGUvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RCZWFuSW50ZXJmYWNlLmphdmEKaW5kZXggNDc2NjhhNC4uYWM0MjkwNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9uby1pbnRlcmZhY2UtbG9jYWwtdmlldy1wcm94eS1zZXJpYWxpemFibGUvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RCZWFuSW50ZXJmYWNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9uby1pbnRlcmZhY2UtbG9jYWwtdmlldy1wcm94eS1zZXJpYWxpemFibGUvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RCZWFuSW50ZXJmYWNlLmphdmEKQEAgLTE5LDggKzE5LDggQEAKIHB1YmxpYyBpbnRlcmZhY2UgVGVzdEJlYW5JbnRlcmZhY2UgewogICAgIHB1YmxpYyB2b2lkIHNldFN0YXRlKFN0cmluZyBzKTsKICAgICBwdWJsaWMgU3RyaW5nIGdldFN0YXRlKCk7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBtZXRob2QxKCk7CiB9Ci0gICAgCi0gCisKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9uby1pbnRlcmZhY2UtbG9jYWwtdmlldy1wcm94eS1zZXJpYWxpemFibGUvc2VydmxldC90ZXN0L2JlYW5zL25vbm1vY2svVGVzdEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vbm8taW50ZXJmYWNlLWxvY2FsLXZpZXctcHJveHktc2VyaWFsaXphYmxlL3NlcnZsZXQvdGVzdC9iZWFucy9ub25tb2NrL1Rlc3RCZWFuLmphdmEKaW5kZXggNzA5YmYxYS4uMmNiOWFjYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9uby1pbnRlcmZhY2UtbG9jYWwtdmlldy1wcm94eS1zZXJpYWxpemFibGUvc2VydmxldC90ZXN0L2JlYW5zL25vbm1vY2svVGVzdEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL25vLWludGVyZmFjZS1sb2NhbC12aWV3LXByb3h5LXNlcmlhbGl6YWJsZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvbm9ubW9jay9UZXN0QmVhbi5qYXZhCkBAIC0yOSwxMyArMjksMTMgQEAKIEBTZXNzaW9uU2NvcGVkCiBwdWJsaWMgY2xhc3MgVGVzdEJlYW4gaW1wbGVtZW50cyBUZXN0QmVhbkludGVyZmFjZSwgU2VyaWFsaXphYmxlewogICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiB0ZXN0QmVhbkludm9rZWQgPSBmYWxzZTsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBIZWxsb05vSW50ZXJmYWNlTG9jYWxWaWV3U2Z1bEVKQiBzZnVsRUpCOwogCiAgICAgQEluamVjdAogICAgIEhlbGxvTm9JbnRlcmZhY2VMb2NhbFZpZXdTbGVzc0VKQiBzbGVzc0VKQjsKLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIHNldFN0YXRlKFN0cmluZyBzKSB7CiAgICAgICAgIHRlc3RCZWFuSW52b2tlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL25vLWludGVyZmFjZS1sb2NhbC12aWV3LXByb3h5LXNlcmlhbGl6YWJsZS9zZXJ2bGV0L3Rlc3QvZWpiL0hlbGxvTm9JbnRlcmZhY2VMb2NhbFZpZXdTZnVsRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL25vLWludGVyZmFjZS1sb2NhbC12aWV3LXByb3h5LXNlcmlhbGl6YWJsZS9zZXJ2bGV0L3Rlc3QvZWpiL0hlbGxvTm9JbnRlcmZhY2VMb2NhbFZpZXdTZnVsRUpCLmphdmEKaW5kZXggZTk0ZGRmMS4uYmFjNmE5YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9uby1pbnRlcmZhY2UtbG9jYWwtdmlldy1wcm94eS1zZXJpYWxpemFibGUvc2VydmxldC90ZXN0L2VqYi9IZWxsb05vSW50ZXJmYWNlTG9jYWxWaWV3U2Z1bEVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vbm8taW50ZXJmYWNlLWxvY2FsLXZpZXctcHJveHktc2VyaWFsaXphYmxlL3NlcnZsZXQvdGVzdC9lamIvSGVsbG9Ob0ludGVyZmFjZUxvY2FsVmlld1NmdWxFSkIuamF2YQpAQCAtMjAsMTEgKzIwLDExIEBACiAKIEBTdGF0ZWZ1bAogcHVibGljIGNsYXNzIEhlbGxvTm9JbnRlcmZhY2VMb2NhbFZpZXdTZnVsRUpCIHsKLSAgICAKKwogICAgIHByaXZhdGUgU3RyaW5nIG1lc3NhZ2U7CiAgICAgcHVibGljIHZvaWQgc2V0U3RhdGUoU3RyaW5nIG1zZyl7CiAgICAgICAgIHRoaXMubWVzc2FnZSA9IG1zZzsKLSAgICAgICAgCisKICAgICB9CiAgICAgcHVibGljIFN0cmluZyBnZXRTdGF0ZSgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMubWVzc2FnZTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vbm8taW50ZXJmYWNlLWxvY2FsLXZpZXctcHJveHktc2VyaWFsaXphYmxlL3NlcnZsZXQvdGVzdC9lamIvSGVsbG9Ob0ludGVyZmFjZUxvY2FsVmlld1NsZXNzRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL25vLWludGVyZmFjZS1sb2NhbC12aWV3LXByb3h5LXNlcmlhbGl6YWJsZS9zZXJ2bGV0L3Rlc3QvZWpiL0hlbGxvTm9JbnRlcmZhY2VMb2NhbFZpZXdTbGVzc0VKQi5qYXZhCmluZGV4IGUwMWVlZTMuLmFmYzU5ODYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vbm8taW50ZXJmYWNlLWxvY2FsLXZpZXctcHJveHktc2VyaWFsaXphYmxlL3NlcnZsZXQvdGVzdC9lamIvSGVsbG9Ob0ludGVyZmFjZUxvY2FsVmlld1NsZXNzRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9uby1pbnRlcmZhY2UtbG9jYWwtdmlldy1wcm94eS1zZXJpYWxpemFibGUvc2VydmxldC90ZXN0L2VqYi9IZWxsb05vSW50ZXJmYWNlTG9jYWxWaWV3U2xlc3NFSkIuamF2YQpAQCAtMjMsNiArMjMsNiBAQAogICAgIHB1YmxpYyB2b2lkIG1ldGhvZDEoU3RyaW5nIG1zZykgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvIiArIG1zZyk7CiAgICAgfQotICAgIAorCiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vbm9ybWFsLWJlYW4taW5qZWN0aW9uLWVhci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9ub3JtYWwtYmVhbi1pbmplY3Rpb24tZWFyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZThjYTc4Mi4uYmRiNTkwNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9ub3JtYWwtYmVhbi1pbmplY3Rpb24tZWFyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9ub3JtYWwtYmVhbi1pbmplY3Rpb24tZWFyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpLWZ1bGwtZWFyIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InNlLmNsaWVudCIgdmFsdWU9ImNvbS5hY21lLkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vbm9ybWFsLWJlYW4taW5qZWN0aW9uLWVhci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL25vcm1hbC1iZWFuLWluamVjdGlvbi1lYXIvYnVpbGQueG1sCmluZGV4IDE2MDM2MDUuLmU2YTI0NTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vbm9ybWFsLWJlYW4taW5qZWN0aW9uLWVhci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9ub3JtYWwtYmVhbi1pbmplY3Rpb24tZWFyL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9IndhciIvPgpAQCAtNDYsOCArNDYsOCBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgogICAgICAgICA8L2FudGNhbGw+CiAKLQk8amF2YWMgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbW9kdWxlcy9nZi1jbGllbnQuamFyOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiBzcmNkaXI9ImNsaWVudCIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIGRlYnVnPSJvbiIgZmFpbG9uZXJyb3I9InRydWUiPgotCSAKKyAgICA8amF2YWMgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbW9kdWxlcy9nZi1jbGllbnQuamFyOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiBzcmNkaXI9ImNsaWVudCIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIGRlYnVnPSJvbiIgZmFpbG9uZXJyb3I9InRydWUiPgorCiAgICAgICAgIDwvamF2YWM+CiA8IS0tCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgpAQCAtNjIsMTUgKzYyLDE1IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiB2YWx1ZT0iKiovRm9vLmNsYXNzLCoqL0hlbGxvLmNsYXNzLCoqL0hlbGxvUmVtb3RlLmNsYXNzLCoqL1NpbmdsZXRvbiouY2xhc3MsKiovSGVsbG9TdGF0ZWxlc3MuY2xhc3MsKiovSGVsbG9TaW5nbGV0b24uY2xhc3MsKiovRm9vTWFuYWdlZEJlYW4uY2xhc3MsKiovQmFyTWFuYWdlZEJlYW4uY2xhc3MsICoqL0Zvb0Jhck1hbmFnZWRCZWFuLmNsYXNzLCAqKi9NYW5hZ2VkU3VwZXIuY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgIDxqYXZhICBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L21vZHVsZXMvZ2YtY2xpZW50Lmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSIke3NlLmNsaWVudH0iPgpAQCAtNzksMTAgKzc5LDEwIEBACiAgICAgICAgICAgIDxhcmcgbGluZT0iJHtodHRwLnBvcnR9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9ub3JtYWwtYmVhbi1pbmplY3Rpb24tZWFyL3dhci9jb20vYWNtZS9Ob3JtYWxMb29rdXBJbkVBUlNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vbm9ybWFsLWJlYW4taW5qZWN0aW9uLWVhci93YXIvY29tL2FjbWUvTm9ybWFsTG9va3VwSW5FQVJTZXJ2bGV0LmphdmEKaW5kZXggOTdkYjJiZC4uYzg4NjJlNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9ub3JtYWwtYmVhbi1pbmplY3Rpb24tZWFyL3dhci9jb20vYWNtZS9Ob3JtYWxMb29rdXBJbkVBUlNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL25vcm1hbC1iZWFuLWluamVjdGlvbi1lYXIvd2FyL2NvbS9hY21lL05vcm1hbExvb2t1cEluRUFSU2VydmxldC5qYXZhCkBAIC00MCw4ICs0MCw4IEBACiAgICAgcHJvdGVjdGVkIFN0cmluZyBteVN0cmluZzsKIAogICAgIHByaXZhdGUgSGVsbG8gc2luZ2xldG9uMTsKLSAgICAKLSAgICBASW5qZWN0IAorCisgICAgQEluamVjdAogICAgIFRlc3RCZWFuIHR3OwogCiAgICAgcHJpdmF0ZSBTdHJpbmcgbXNnID0gIiI7CkBAIC05MSw3ICs5MSw3IEBACiAgICAgICAgIH0KIAogICAgICAgICBzaW5nbGV0b24xLmhlbGxvKCk7Ci0gICAgICAgIAorCiAgICAgICAgIGNoZWNrRm9yTnVsbCh0dywgIm5vcm1hbCBsb29rdXAgb2Ygc2Vzc2lvbiBzY29wZWQgYmVhbiBpbiB3YXIgZmFpbGVkIik7CiAKICAgICAgICAgb3V0LnByaW50bG4obXNnKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vcHJvZ3JhbW1hdGljLWxvb2t1cC1lYXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vcHJvZ3JhbW1hdGljLWxvb2t1cC1lYXIvYnVpbGQucHJvcGVydGllcwppbmRleCBlOGNhNzgyLi5iZGI1OTA0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3Byb2dyYW1tYXRpYy1sb29rdXAtZWFyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9wcm9ncmFtbWF0aWMtbG9va3VwLWVhci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaS1mdWxsLWVhciIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzZS5jbGllbnQiIHZhbHVlPSJjb20uYWNtZS5DbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3Byb2dyYW1tYXRpYy1sb29rdXAtZWFyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vcHJvZ3JhbW1hdGljLWxvb2t1cC1lYXIvYnVpbGQueG1sCmluZGV4IDE2MDM2MDUuLmU2YTI0NTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vcHJvZ3JhbW1hdGljLWxvb2t1cC1lYXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vcHJvZ3JhbW1hdGljLWxvb2t1cC1lYXIvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0id2FyIi8+CkBAIC00Niw4ICs0Niw4IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAotCTxqYXZhYyBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9tb2R1bGVzL2dmLWNsaWVudC5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIHNyY2Rpcj0iY2xpZW50IiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgZGVidWc9Im9uIiBmYWlsb25lcnJvcj0idHJ1ZSI+Ci0JIAorICAgIDxqYXZhYyBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9tb2R1bGVzL2dmLWNsaWVudC5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIHNyY2Rpcj0iY2xpZW50IiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgZGVidWc9Im9uIiBmYWlsb25lcnJvcj0idHJ1ZSI+CisKICAgICAgICAgPC9qYXZhYz4KIDwhLS0KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CkBAIC02MiwxNSArNjIsMTUgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIHZhbHVlPSIqKi9Gb28uY2xhc3MsKiovSGVsbG8uY2xhc3MsKiovSGVsbG9SZW1vdGUuY2xhc3MsKiovU2luZ2xldG9uKi5jbGFzcywqKi9IZWxsb1N0YXRlbGVzcy5jbGFzcywqKi9IZWxsb1NpbmdsZXRvbi5jbGFzcywqKi9Gb29NYW5hZ2VkQmVhbi5jbGFzcywqKi9CYXJNYW5hZ2VkQmVhbi5jbGFzcywgKiovRm9vQmFyTWFuYWdlZEJlYW4uY2xhc3MsICoqL01hbmFnZWRTdXBlci5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZWFyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgIDxqYXZhICBmb3JrPSJvbiIgCisgICAgICAgPGphdmEgIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbW9kdWxlcy9nZi1jbGllbnQuamFyOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9IiR7c2UuY2xpZW50fSI+CkBAIC03OSwxMCArNzksMTAgQEAKICAgICAgICAgICAgPGFyZyBsaW5lPSIke2h0dHAucG9ydH0iLz4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3Byb2dyYW1tYXRpYy1sb29rdXAtZWFyL3dhci9jb20vYWNtZS9Qcm9ncmFtbWF0aWNMb29rdXBJbkVBUlNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vcHJvZ3JhbW1hdGljLWxvb2t1cC1lYXIvd2FyL2NvbS9hY21lL1Byb2dyYW1tYXRpY0xvb2t1cEluRUFSU2VydmxldC5qYXZhCmluZGV4IGViNjM3NjguLjA3NjM3NjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vcHJvZ3JhbW1hdGljLWxvb2t1cC1lYXIvd2FyL2NvbS9hY21lL1Byb2dyYW1tYXRpY0xvb2t1cEluRUFSU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vcHJvZ3JhbW1hdGljLWxvb2t1cC1lYXIvd2FyL2NvbS9hY21lL1Byb2dyYW1tYXRpY0xvb2t1cEluRUFSU2VydmxldC5qYXZhCkBAIC00MCw4ICs0MCw4IEBACiAgICAgcHJvdGVjdGVkIFN0cmluZyBteVN0cmluZzsKIAogICAgIHByaXZhdGUgSGVsbG8gc2luZ2xldG9uMTsKLSAgICAKLSAgICBASW5qZWN0IAorCisgICAgQEluamVjdAogICAgIEluc3RhbmNlPFRlc3RCZWFuPiBwcm9ncmFtbWF0aWNMb29rdXA7CiAKICAgICBwcml2YXRlIFN0cmluZyBtc2cgPSAiIjsKQEAgLTkxLDcgKzkxLDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIHNpbmdsZXRvbjEuaGVsbG8oKTsKLSAgICAgICAgCisKICAgICAgICAgY2hlY2tGb3JOdWxsKHByb2dyYW1tYXRpY0xvb2t1cC5nZXQoKSwgInByb2dyYW1tYXRpYyBsb29rdXAgb2Ygc2Vzc2lvbiBzY29wZWQgYmVhbiBpbiB3YXIgZmFpbGVkIik7CiAKICAgICAgICAgb3V0LnByaW50bG4obXNnKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc2VydmxldC1jb250ZXh0LWluamVjdGlvbi1jZGkvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zZXJ2bGV0LWNvbnRleHQtaW5qZWN0aW9uLWNkaS9XZWJUZXN0LmphdmEKaW5kZXggN2Y0NzQyNi4uMjA2NzJjOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zZXJ2bGV0LWNvbnRleHQtaW5qZWN0aW9uLWNkaS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zZXJ2bGV0LWNvbnRleHQtaW5qZWN0aW9uLWNkaS9XZWJUZXN0LmphdmEKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgQFdlYlNlcnZsZXQiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC00Niw3ICs0Niw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVNUX05BTUUgKyAiIHRlc3QgZmFpbGVkIik7CkBAIC01Niw3ICs1Niw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgICAgICAgICAgKyAiL215dXJsIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvcGVuaW5nIGNvbm5lY3Rpb24gdG8gIiArIHVybCk7CkBAIC05NSwxMCArOTUsMTAgQEAKICAgICAgICAgICAgIGlmIChFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc2VydmxldC1jb250ZXh0LWluamVjdGlvbi1jZGkvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc2VydmxldC1jb250ZXh0LWluamVjdGlvbi1jZGkvYnVpbGQucHJvcGVydGllcwppbmRleCBjYTJlZGFlLi5iZGUwNGY5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3NlcnZsZXQtY29udGV4dC1pbmplY3Rpb24tY2RpL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zZXJ2bGV0LWNvbnRleHQtaW5qZWN0aW9uLWNkaS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtY29udGV4dC1pbmplY3Rpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc2VydmxldC1jb250ZXh0LWluamVjdGlvbi1jZGkvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zZXJ2bGV0LWNvbnRleHQtaW5qZWN0aW9uLWNkaS9idWlsZC54bWwKaW5kZXggODNhZDY2Ni4uMDY5MTIxMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zZXJ2bGV0LWNvbnRleHQtaW5qZWN0aW9uLWNkaS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zZXJ2bGV0LWNvbnRleHQtaW5qZWN0aW9uLWNkaS9idWlsZC54bWwKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDcsMjMgKzQ3LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzUsMTAgKzc1LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zZXJ2bGV0LWNvbnRleHQtaW5qZWN0aW9uLWNkaS9zZXJ2bGV0L3Rlc3RzL2NkaS9hcnRpZmFjdHMvRGVzdHJveWVkLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3NlcnZsZXQtY29udGV4dC1pbmplY3Rpb24tY2RpL3NlcnZsZXQvdGVzdHMvY2RpL2FydGlmYWN0cy9EZXN0cm95ZWQuamF2YQppbmRleCA2MWVmMjRhLi4yMGRhOTBlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3NlcnZsZXQtY29udGV4dC1pbmplY3Rpb24tY2RpL3NlcnZsZXQvdGVzdHMvY2RpL2FydGlmYWN0cy9EZXN0cm95ZWQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3NlcnZsZXQtY29udGV4dC1pbmplY3Rpb24tY2RpL3NlcnZsZXQvdGVzdHMvY2RpL2FydGlmYWN0cy9EZXN0cm95ZWQuamF2YQpAQCAtMzIsNSArMzIsNSBAQAogQFJldGVudGlvbihSZXRlbnRpb25Qb2xpY3kuUlVOVElNRSkKIHB1YmxpYyBAaW50ZXJmYWNlIERlc3Ryb3llZCB7CiAKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zZXJ2bGV0LWNvbnRleHQtaW5qZWN0aW9uLWNkaS9zZXJ2bGV0L3Rlc3RzL2NkaS9hcnRpZmFjdHMvSW5pdGlhbGl6ZWQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc2VydmxldC1jb250ZXh0LWluamVjdGlvbi1jZGkvc2VydmxldC90ZXN0cy9jZGkvYXJ0aWZhY3RzL0luaXRpYWxpemVkLmphdmEKaW5kZXggOWEwYTE4ZS4uMDcwYTI4OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zZXJ2bGV0LWNvbnRleHQtaW5qZWN0aW9uLWNkaS9zZXJ2bGV0L3Rlc3RzL2NkaS9hcnRpZmFjdHMvSW5pdGlhbGl6ZWQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3NlcnZsZXQtY29udGV4dC1pbmplY3Rpb24tY2RpL3NlcnZsZXQvdGVzdHMvY2RpL2FydGlmYWN0cy9Jbml0aWFsaXplZC5qYXZhCkBAIC0zMiw1ICszMiw1IEBACiBAUmV0ZW50aW9uKFJldGVudGlvblBvbGljeS5SVU5USU1FKQogcHVibGljIEBpbnRlcmZhY2UgSW5pdGlhbGl6ZWQgewogCi0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc2VydmxldC1jb250ZXh0LWluamVjdGlvbi1jZGkvc2VydmxldC90ZXN0cy9jZGkvYXJ0aWZhY3RzL1ByZWZlcnJlZC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zZXJ2bGV0LWNvbnRleHQtaW5qZWN0aW9uLWNkaS9zZXJ2bGV0L3Rlc3RzL2NkaS9hcnRpZmFjdHMvUHJlZmVycmVkLmphdmEKaW5kZXggODNmZTQ0ZS4uYjYyOGY4NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zZXJ2bGV0LWNvbnRleHQtaW5qZWN0aW9uLWNkaS9zZXJ2bGV0L3Rlc3RzL2NkaS9hcnRpZmFjdHMvUHJlZmVycmVkLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zZXJ2bGV0LWNvbnRleHQtaW5qZWN0aW9uLWNkaS9zZXJ2bGV0L3Rlc3RzL2NkaS9hcnRpZmFjdHMvUHJlZmVycmVkLmphdmEKQEAgLTMyLDUgKzMyLDUgQEAKIEBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlJVTlRJTUUpCiBwdWJsaWMgQGludGVyZmFjZSBQcmVmZXJyZWQgewogCi0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc2VydmxldC1jb250ZXh0LWluamVjdGlvbi1jZGkvc2VydmxldC90ZXN0cy9jZGkvc2VydmxldC9UZXN0QmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zZXJ2bGV0LWNvbnRleHQtaW5qZWN0aW9uLWNkaS9zZXJ2bGV0L3Rlc3RzL2NkaS9zZXJ2bGV0L1Rlc3RCZWFuLmphdmEKaW5kZXggNDIxZjgzNi4uYzA1ZTg2NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zZXJ2bGV0LWNvbnRleHQtaW5qZWN0aW9uLWNkaS9zZXJ2bGV0L3Rlc3RzL2NkaS9zZXJ2bGV0L1Rlc3RCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zZXJ2bGV0LWNvbnRleHQtaW5qZWN0aW9uLWNkaS9zZXJ2bGV0L3Rlc3RzL2NkaS9zZXJ2bGV0L1Rlc3RCZWFuLmphdmEKQEAgLTE5LDEyICsxOSwxMiBAQAogaW1wb3J0IGpha2FydGEuaW5qZWN0LkluamVjdDsKIGltcG9ydCBqYWthcnRhLnNlcnZsZXQuU2VydmxldENvbnRleHQ7CiAKLS8vU2ltcGxlIFRlc3RCZWFuIHRvIHRlc3QgQ0RJLiAKKy8vU2ltcGxlIFRlc3RCZWFuIHRvIHRlc3QgQ0RJLgogcHVibGljIGNsYXNzIFRlc3RCZWFuCiB7CiAgICAgQEluamVjdAogICAgIFNlcnZsZXRDb250ZXh0IHNjOwotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBtMSgpewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqKipTQyA9ICIgKyBzYy5nZXRDb250ZXh0UGF0aCgpKTsKICAgICAgICAgcmV0dXJuIHNjLmdldENvbnRleHRQYXRoKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3NlcnZsZXQtY29udGV4dC1pbmplY3Rpb24tY2RpL3NlcnZsZXQvdGVzdHMvY2RpL3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc2VydmxldC1jb250ZXh0LWluamVjdGlvbi1jZGkvc2VydmxldC90ZXN0cy9jZGkvc2VydmxldC9UZXN0U2VydmxldC5qYXZhCmluZGV4IDJiMjYzYWMuLjg0MDcxNzkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc2VydmxldC1jb250ZXh0LWluamVjdGlvbi1jZGkvc2VydmxldC90ZXN0cy9jZGkvc2VydmxldC9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc2VydmxldC1jb250ZXh0LWluamVjdGlvbi1jZGkvc2VydmxldC90ZXN0cy9jZGkvc2VydmxldC9UZXN0U2VydmxldC5qYXZhCkBAIC0zOCw5ICszOCw5IEBACiAgICAgVGVzdEJlYW4gdGI7CiAgICAgQEluamVjdAogICAgIEJlYW5NYW5hZ2VyIGJtOwotICAgIAorCiAgICAgQmVhbk1hbmFnZXIgYm0xOwotICAgIAorCiAgICAgQEluamVjdAogICAgIFNlcnZsZXRDb250ZXh0IHNjOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Itbm9hcmdjb25zdHJ1Y3Rvci1taXNzaW5nL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci1ub2FyZ2NvbnN0cnVjdG9yLW1pc3NpbmcvV2ViVGVzdC5qYXZhCmluZGV4IGQyYzY5YTYuLmNlZjFmYzQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci1ub2FyZ2NvbnN0cnVjdG9yLW1pc3NpbmcvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci1ub2FyZ2NvbnN0cnVjdG9yLW1pc3NpbmcvV2ViVGVzdC5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEBXZWJTZXJ2bGV0Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDYsNyArNDYsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZCIpOwpAQCAtNTYsNyArNTYsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgICsgIi9teXVybCI7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigib3BlbmluZyBjb25uZWN0aW9uIHRvICIgKyB1cmwpOwpAQCAtOTQsMTAgKzk0LDEwIEBACiAgICAgICAgICAgICBpZiAoRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Itbm9hcmdjb25zdHJ1Y3Rvci1taXNzaW5nL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Itbm9hcmdjb25zdHJ1Y3Rvci1taXNzaW5nL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNDgwOWU3NS4uZWRkNWRhMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yLW5vYXJnY29uc3RydWN0b3ItbWlzc2luZy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci1ub2FyZ2NvbnN0cnVjdG9yLW1pc3NpbmcvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Itbm9hcmdjb25zdHJ1Y3Rvci1taXNzaW5nL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci1ub2FyZ2NvbnN0cnVjdG9yLW1pc3NpbmcvYnVpbGQueG1sCmluZGV4IGMyNWUxN2UuLmVhYTA2YmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci1ub2FyZ2NvbnN0cnVjdG9yLW1pc3NpbmcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci1ub2FyZ2NvbnN0cnVjdG9yLW1pc3NpbmcvYnVpbGQueG1sCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSJXZWJUZXN0LmNsYXNzIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ3LDIzICs0NywyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc1LDEwICs3NSwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci1ub2FyZ2NvbnN0cnVjdG9yLW1pc3Npbmcvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RNYW5hZ2VkQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yLW5vYXJnY29uc3RydWN0b3ItbWlzc2luZy9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdE1hbmFnZWRCZWFuLmphdmEKaW5kZXggOGJjODAxNC4uMTkxZjRlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yLW5vYXJnY29uc3RydWN0b3ItbWlzc2luZy9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdE1hbmFnZWRCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yLW5vYXJnY29uc3RydWN0b3ItbWlzc2luZy9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdE1hbmFnZWRCZWFuLmphdmEKQEAgLTE2LDcgKzE2LDcgQEAKIAogcGFja2FnZSB0ZXN0LmJlYW5zOwogCi0vL1NpbXBsZSBUZXN0QmVhbiB0byB0ZXN0IENESS4gCisvL1NpbXBsZSBUZXN0QmVhbiB0byB0ZXN0IENESS4KIC8vVGhpcyBiZWFuIGltcGxlbWVudHMgU2VyaWFsaXphYmxlIGFzIGl0IG5lZWRzIHRvIGJlIHBsYWNlZCBpbnRvIGEgU3RhdGVmdWwgQmVhbgogQGpha2FydGEuYW5ub3RhdGlvbi5NYW5hZ2VkQmVhbgogcHVibGljIGNsYXNzIFRlc3RNYW5hZ2VkQmVhbiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Itbm9hcmdjb25zdHJ1Y3Rvci1taXNzaW5nL3NlcnZsZXQvdGVzdC9pbnRlcmNlcHRvcnMvVGVzdEFyb3VuZEludm9rZUludGVyY2VwdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Itbm9hcmdjb25zdHJ1Y3Rvci1taXNzaW5nL3NlcnZsZXQvdGVzdC9pbnRlcmNlcHRvcnMvVGVzdEFyb3VuZEludm9rZUludGVyY2VwdG9yLmphdmEKaW5kZXggNGNhYWFhNy4uZTYwZTA3MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yLW5vYXJnY29uc3RydWN0b3ItbWlzc2luZy9zZXJ2bGV0L3Rlc3QvaW50ZXJjZXB0b3JzL1Rlc3RBcm91bmRJbnZva2VJbnRlcmNlcHRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci1ub2FyZ2NvbnN0cnVjdG9yLW1pc3Npbmcvc2VydmxldC90ZXN0L2ludGVyY2VwdG9ycy9UZXN0QXJvdW5kSW52b2tlSW50ZXJjZXB0b3IuamF2YQpAQCAtMjgsNyArMjgsNyBAQAogICAgICAgICBhcm91bmRJbnZva2VDb3VudCA9IDA7CiAgICAgfQogCi0gICBAQXJvdW5kSW52b2tlIAorICAgQEFyb3VuZEludm9rZQogICAgcHVibGljIE9iamVjdCB0ZXN0TWV0aG9kKEludm9jYXRpb25Db250ZXh0IGN0eCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdEFyb3VuZEludm9rZUludGVyY2V0cHI6OiBhcm91bmRJbnZva2UgY2FsbGVkIC0gdGFyZ2V0OiIgKyBjdHguZ2V0VGFyZ2V0KCkgKyAiICwgcGFyYW1zOiIrIGN0eC5nZXRQYXJhbWV0ZXJzKCkpOwogICAgICAgICBhcm91bmRJbnZva2VDb3VudCArKzsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci1ub2FyZ2NvbnN0cnVjdG9yLW1pc3Npbmcvc2VydmxldC90ZXN0L3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci1ub2FyZ2NvbnN0cnVjdG9yLW1pc3Npbmcvc2VydmxldC90ZXN0L3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQppbmRleCAxNzNiMDMwLi5kZjVlZjJjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Itbm9hcmdjb25zdHJ1Y3Rvci1taXNzaW5nL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yLW5vYXJnY29uc3RydWN0b3ItbWlzc2luZy9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9UZXN0U2VydmxldC5qYXZhCkBAIC03MCw5ICs3MCw5IEBACiAgICAgICAgIGludCBjb3VudCA9IFRlc3RBcm91bmRJbnZva2VJbnRlcmNlcHRvci5hcm91bmRJbnZva2VDb3VudDsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0QXJvdW5kSW52b2tlSW50ZXJjZXB0b3IgY2FsbGVkICIgKyBjb3VudCArICIgdGltZXMiKTsKICAgICAgICAgVGVzdEFyb3VuZEludm9rZUludGVyY2VwdG9yLnJlc2V0KCk7Ci0gICAgICAgIGlmIChjb3VudCA9PSAxKSByZXR1cm4gIiI7IAorICAgICAgICBpZiAoY291bnQgPT0gMSkgcmV0dXJuICIiOwogICAgICAgICAgICAgZWxzZSByZXR1cm4gIkludGVyY2VwdG9yIGludm9jYXRpb24gY291bnQiICsgY291bnQgKyAiIGludmFsaWQiOwogICAgfQogCi0gCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci1ub25udWxsLXBhY2thZ2UvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yLW5vbm51bGwtcGFja2FnZS9XZWJUZXN0LmphdmEKaW5kZXggY2JkM2JlMi4uODE2ZTkxYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yLW5vbm51bGwtcGFja2FnZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yLW5vbm51bGwtcGFja2FnZS9XZWJUZXN0LmphdmEKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgQFdlYlNlcnZsZXQiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC00Niw3ICs0Niw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVNUX05BTUUgKyAiIHRlc3QgZmFpbGVkIik7CkBAIC01Niw3ICs1Niw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgICAgICAgICAgKyAiL215dXJsIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvcGVuaW5nIGNvbm5lY3Rpb24gdG8gIiArIHVybCk7CkBAIC05NSwxMCArOTUsMTAgQEAKICAgICAgICAgICAgIGlmIChFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci1ub25udWxsLXBhY2thZ2UvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci1ub25udWxsLXBhY2thZ2UvYnVpbGQucHJvcGVydGllcwppbmRleCA0ODA5ZTc1Li5lZGQ1ZGEzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Itbm9ubnVsbC1wYWNrYWdlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yLW5vbm51bGwtcGFja2FnZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3IiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci1ub25udWxsLXBhY2thZ2UvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yLW5vbm51bGwtcGFja2FnZS9idWlsZC54bWwKaW5kZXggODNhZDY2Ni4uMDY5MTIxMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yLW5vbm51bGwtcGFja2FnZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yLW5vbm51bGwtcGFja2FnZS9idWlsZC54bWwKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDcsMjMgKzQ3LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzUsMTAgKzc1LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yLW5vbm51bGwtcGFja2FnZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdE1hbmFnZWRCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Itbm9ubnVsbC1wYWNrYWdlL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0TWFuYWdlZEJlYW4uamF2YQppbmRleCAxNjMzYzFlLi4xNTBlNDI0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Itbm9ubnVsbC1wYWNrYWdlL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0TWFuYWdlZEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Itbm9ubnVsbC1wYWNrYWdlL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0TWFuYWdlZEJlYW4uamF2YQpAQCAtMTYsNyArMTYsNyBAQAogCiBwYWNrYWdlIHRlc3QuYmVhbnM7CiAKLS8vU2ltcGxlIFRlc3RCZWFuIHRvIHRlc3QgQ0RJLiAKKy8vU2ltcGxlIFRlc3RCZWFuIHRvIHRlc3QgQ0RJLgogLy9UaGlzIGJlYW4gaW1wbGVtZW50cyBTZXJpYWxpemFibGUgYXMgaXQgbmVlZHMgdG8gYmUgcGxhY2VkIGludG8gYSBTdGF0ZWZ1bCBCZWFuCiBAamFrYXJ0YS5hbm5vdGF0aW9uLk1hbmFnZWRCZWFuCiBwdWJsaWMgY2xhc3MgVGVzdE1hbmFnZWRCZWFuIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci1ub25udWxsLXBhY2thZ2Uvc2VydmxldC90ZXN0L2ludGVyY2VwdG9ycy9UZXN0QXJvdW5kSW52b2tlSW50ZXJjZXB0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci1ub25udWxsLXBhY2thZ2Uvc2VydmxldC90ZXN0L2ludGVyY2VwdG9ycy9UZXN0QXJvdW5kSW52b2tlSW50ZXJjZXB0b3IuamF2YQppbmRleCA0Y2FhYWE3Li5lNjBlMDcxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Itbm9ubnVsbC1wYWNrYWdlL3NlcnZsZXQvdGVzdC9pbnRlcmNlcHRvcnMvVGVzdEFyb3VuZEludm9rZUludGVyY2VwdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yLW5vbm51bGwtcGFja2FnZS9zZXJ2bGV0L3Rlc3QvaW50ZXJjZXB0b3JzL1Rlc3RBcm91bmRJbnZva2VJbnRlcmNlcHRvci5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAgICAgICAgIGFyb3VuZEludm9rZUNvdW50ID0gMDsKICAgICB9CiAKLSAgIEBBcm91bmRJbnZva2UgCisgICBAQXJvdW5kSW52b2tlCiAgICBwdWJsaWMgT2JqZWN0IHRlc3RNZXRob2QoSW52b2NhdGlvbkNvbnRleHQgY3R4KSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0QXJvdW5kSW52b2tlSW50ZXJjZXRwcjo6IGFyb3VuZEludm9rZSBjYWxsZWQgLSB0YXJnZXQ6IiArIGN0eC5nZXRUYXJnZXQoKSArICIgLCBwYXJhbXM6IisgY3R4LmdldFBhcmFtZXRlcnMoKSk7CiAgICAgICAgIGFyb3VuZEludm9rZUNvdW50ICsrOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yLW5vbm51bGwtcGFja2FnZS9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yLW5vbm51bGwtcGFja2FnZS9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9UZXN0U2VydmxldC5qYXZhCmluZGV4IGIxZTU5MzkuLjdjNmMxZTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci1ub25udWxsLXBhY2thZ2Uvc2VydmxldC90ZXN0L3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Itbm9ubnVsbC1wYWNrYWdlL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTc0LDUgKzc0LDUgQEAKICAgICAgICAgICAgIGVsc2UgcmV0dXJuICJJbnRlcmNlcHRvciBpbnZvY2F0aW9uIGNvdW50IiArIGNvdW50ICsgIiBpbnZhbGlkIjsKICAgIH0KIAotIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvYXBwL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9hcHAvYnVpbGQueG1sCmluZGV4IDIxMGFiYWUuLmQ2MDdiNjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9hcHAvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9hcHAvYnVpbGQueG1sCkBAIC0zNiw4ICszNiw4IEBACiAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJpbml0LWNvbW1vbiwgY2xlYW4tY29tbW9uIj4KICAgIDxhbnQgZGlyPSJzcmMiIGluaGVyaXRBbGw9ImZhbHNlIiB0YXJnZXQ9ImFsbCIvPgogICAgPGFudGNhbGwgdGFyZ2V0PSJlYXItY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0iYXBwbmFtZSIgdmFsdWU9InNpbXBsZW1kYiIvPgotCTxwYXJhbSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJNRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiLz4KKyAgICA8cGFyYW0gbmFtZT0iYXBwbmFtZSIgdmFsdWU9InNpbXBsZW1kYiIvPgorICAgIDxwYXJhbSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJNRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiLz4KICAgIDwvYW50Y2FsbD4KICAgPC90YXJnZXQ+CiAKQEAgLTU1LDcgKzU1LDcgQEAKIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb25uZWN0b3IiPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJjcmVhdGVkYi5zcWwiLz4KLSAgICAgIDwvYW50Y2FsbD4JCisgICAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0idW5zZXRKZGJjIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvYXBwL3NyYy9NRVRBLUlORi9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9hcHAvc3JjL01FVEEtSU5GL2VqYi1qYXIueG1sCmluZGV4IDRiZGNjNmYuLjMyM2MwZWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9hcHAvc3JjL01FVEEtSU5GL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9hcHAvc3JjL01FVEEtSU5GL2VqYi1qYXIueG1sCkBAIC05MSw4ICs5MSw4IEBACiAgICAgICAgIDxyZXMtc2hhcmluZy1zY29wZT5TaGFyZWFibGU8L3Jlcy1zaGFyaW5nLXNjb3BlPgogICAgICAgPC9yZXNvdXJjZS1yZWY+CiAgICAgICA8cmVzb3VyY2UtZW52LXJlZj4KLQk8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmVpcy90ZXN0QWRtaW48L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KLQk8cmVzb3VyY2UtZW52LXJlZi10eXBlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC9yZXNvdXJjZS1lbnYtcmVmLXR5cGU+CisgICAgPHJlc291cmNlLWVudi1yZWYtbmFtZT5laXMvdGVzdEFkbWluPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+CisgICAgPHJlc291cmNlLWVudi1yZWYtdHlwZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvcmVzb3VyY2UtZW52LXJlZi10eXBlPgogICAgICAgPC9yZXNvdXJjZS1lbnYtcmVmPgogICAgICAgPHNlY3VyaXR5LWlkZW50aXR5PgogICAgICAgICA8dXNlLWNhbGxlci1pZGVudGl0eS8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvYXBwL3NyYy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvYXBwL3NyYy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwKaW5kZXggNDJjZDYwNC4uMjc1M2QwMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9hcHAvc3JjL01FVEEtSU5GL3N1bi1lamItamFyLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgICAgICAgICAgVGVzdEludGVnZXJQcm9wCiAgICAgICAgICAgPC9hY3RpdmF0aW9uLWNvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgIDxhY3RpdmF0aW9uLWNvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLSAgICAgICAgICAgIDIgCisgICAgICAgICAgICAyCiAgICAgICAgICAgPC9hY3RpdmF0aW9uLWNvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgPC9hY3RpdmF0aW9uLWNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgPC9hY3RpdmF0aW9uLWNvbmZpZz4KQEAgLTg4LDcgKzg4LDcgQEAKICAgICAgIDwvcmVzb3VyY2UtcmVmPgogICAgICAgPHJlc291cmNlLWVudi1yZWY+CiAgICAgICAgIDxyZXNvdXJjZS1lbnYtcmVmLW5hbWU+ZWlzL3Rlc3RBZG1pbjwvcmVzb3VyY2UtZW52LXJlZi1uYW1lPgotCTxqbmRpLW5hbWU+ZWlzL3Rlc3RBZG1pbjwvam5kaS1uYW1lPgorICAgIDxqbmRpLW5hbWU+ZWlzL3Rlc3RBZG1pbjwvam5kaS1uYW1lPgogICAgICAgPC9yZXNvdXJjZS1lbnYtcmVmPgogICAgICAgPGdlbi1jbGFzc2VzLz4KICAgICA8L2VqYj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9hcHAvc3JjL2JlYW5zL01lc3NhZ2VDaGVja2VyRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvYXBwL3NyYy9iZWFucy9NZXNzYWdlQ2hlY2tlckVKQi5qYXZhCmluZGV4IGRkZWQ0NTQuLjFlZDllNTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9hcHAvc3JjL2JlYW5zL01lc3NhZ2VDaGVja2VyRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL2FwcC9zcmMvYmVhbnMvTWVzc2FnZUNoZWNrZXJFSkIuamF2YQpAQCAtNDMsNyArNDMsNyBAQAogCiAgICAgcHVibGljIE1lc3NhZ2VDaGVja2VyRUpCKCkge30KIAotICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIAorICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpCiAgICAgICAgIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImJlYW4gcmVtb3ZlZCIpOwogICAgICAgICBoZWxkQ29uID0gbnVsbDsKQEAgLTcxLDExICs3MSwxMSBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgc3luY2hyb25pemVkIChDb250cm9scy5nZXRMb2NrT2JqZWN0KCkpIHsKICAgICAgICAgICAgICAgICAvL1RlbGwgdGhlIHJlc291cmNlIGFkYXB0ZXIgdGhlIGNsaWVudCBpcyByZWFkeSB0byBydW4KLSAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkubm90aWZ5QWxsKCk7IAotICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIENvbnRyb2xzLmdldExvY2tPYmplY3QoKS5ub3RpZnlBbGwoKTsKKwogICAgICAgICAgICAgICAgIGRlYnVnKCJOT1RJRklFRC4uLiBTVEFSVCBXQUlUSU5HIik7CiAgICAgICAgICAgICAgICAgLy9XYWl0IHVudGlsIGJlaW5nIHRvbGQgdG8gcmVhZCBmcm9tIHRoZSBkYXRhYmFzZQotICAgICAgICAgICAgICAgIENvbnRyb2xzLmdldExvY2tPYmplY3QoKS53YWl0KCk7IAorICAgICAgICAgICAgICAgIENvbnRyb2xzLmdldExvY2tPYmplY3QoKS53YWl0KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CkBAIC04MywyMiArODMsMjIgQEAKICAgICB9CiAKICAgICBwdWJsaWMgaW50IGdldE1lc3NhZ2VDb3VudCgpIHsKLQl0cnkgeworICAgIHRyeSB7CiAgICAgICAgICAgICBDb25uZWN0aW9uIGNvbiA9IGdldEZyZXNoQ29ubmVjdGlvbigpOwogICAgICAgICAgICAgaW50IGNvdW50MSA9IGdldENvdW50KGNvbik7CiAgICAgICAgICAgICBjb24uY2xvc2UoKTsKLSAgICAgICAgICAgIAotCSAgICAvKgorCisgICAgICAgIC8qCiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQoQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpKSB7CiAgICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLm5vdGlmeSgpOwogICAgICAgICAgICAgfQotCSAgICAqLwotICAgICAgICAgICAgICAgIAorICAgICAgICAqLworCiAgICAgICAgICAgICByZXR1cm4gY291bnQxOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLm91dCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwotCX0KKyAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSBpbnQgZ2V0Q291bnQoQ29ubmVjdGlvbiBjb24pIHRocm93cyBTUUxFeGNlcHRpb24gewpAQCAtMTI0LDEwICsxMjQsMTAgQEAKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIHVzZXIgPSAoU3RyaW5nKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvdXNlciIpOwogICAgICAgICAgICAgcGFzc3dvcmQgPSAoU3RyaW5nKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvcGFzc3dvcmQiKTsKLQkgICAgQ29udHJvbHMgPSAoTXlBZG1pbk9iamVjdCkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2Vpcy90ZXN0QWRtaW4iKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDQUxMSU5HIElOSVRJTElaRSBdXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXSIpOwotCSAgICBDb250cm9scy5pbml0aWFsaXplKCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ0FMTEVEIElOSVRJTElaRSBdXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXSIpOworICAgICAgICBDb250cm9scyA9IChNeUFkbWluT2JqZWN0KSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWlzL3Rlc3RBZG1pbiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNBTExJTkcgSU5JVElMSVpFIF1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dIik7CisgICAgICAgIENvbnRyb2xzLmluaXRpYWxpemUoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDQUxMRUQgSU5JVElMSVpFIF1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dIik7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KQEAgLTE2Miw3ICsxNjIsNyBAQAogICAgICAgICAgICAgZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKICAgICAgICAgICAgIGRlYnVnKCJHZXQgSkRCQyBjb25uZWN0aW9uLCBhdXRvIHNpZ24gb24iKTsKICAgICAgICAgICAgIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoY29uICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gY29uOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTE3Myw3ICsxNzMsNyBAQAogICAgICAgICAgICAgdGhyb3cgZXgxOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIGNsb3NlQ29ubmVjdGlvbihDb25uZWN0aW9uIGNvbikgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICAgIGlmIChoZWxkQ29uICE9IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvYXBwL3NyYy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGRhZDIwN2IuLjBiMzhjMTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL2FwcC9zcmMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiBlamItamFyLnhtbD1NRVRBLUlORi9lamItamFyLnhtbAogc3VuLWVqYi1qYXIueG1sPU1FVEEtSU5GL3N1bi1lamItamFyLnhtbApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL2FwcC9zcmMvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL2FwcC9zcmMvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGY1NTFjZTEuLmZkYzYzOTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9hcHAvc3JjL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvYXBwL3NyYy9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI4LDQ1ICsyOCw0NSBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwotICAgIAorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgICAgICAvL3N1cGVyKGFyZ3MpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGRvVGVzdCgpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVGhpcyBpcyB0byB0ZXN0IGNvbm5lY3RvciAxLjUgIisKLQkgICAgICAgICAgICAgImNvbnRyYWN0cy4iKTsKLSAgICAgICAgCisgICAgICAgICAgICAgICAgICJjb250cmFjdHMuIik7CisKICAgICAgICAgU3RyaW5nIHJlcyA9ICJOT1QgUlVOIjsKLQlkZWJ1ZygiZG9UZXN0KCkgRU5URVIuLi4iKTsKKyAgICBkZWJ1ZygiZG9UZXN0KCkgRU5URVIuLi4iKTsKICAgICAgICAgYm9vbGVhbiBwYXNzID0gZmFsc2U7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXMgID0gIkFMTCBURVNUUyBQQVNTRUQiOwotCSAgICBpbnQgdGVzdENvdW50ID0gMTsKKyAgICAgICAgaW50IHRlc3RDb3VudCA9IDE7CiAgICAgICAgICAgICB3aGlsZSAoIWRvbmUoKSkgewotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgbm90aWZ5QW5kV2FpdCgpOwogICAgICAgICAgICAgICAgIGlmICghZG9uZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJSdW5uaW5nLi4uIik7CiAgICAgICAgICAgICAgICAgICAgIHBhc3MgPSBjaGVja1Jlc3VsdHMoZXhwZWN0ZWRSZXN1bHRzKCkpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiR290IGV4cGVjdGVkIHJlc3VsdHMgPSAiICsgcGFzcyk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vZG8gbm90IGNvbnRpbnVlIGlmIG9uZSB0ZXN0IGZhaWxlZAogICAgICAgICAgICAgICAgICAgICBpZiAoIXBhc3MpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlcyA9ICJTT01FIFRFU1RTIEZBSUxFRCI7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiSUQgQ29ubmVjdG9yIDEuNSB0ZXN0IC0gIiArIHRlc3RDb3VudCwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJJRCBDb25uZWN0b3IgMS41IHRlc3QgLSAiICsgdGVzdENvdW50LCBzdGF0LlBBU1MpOwotCQkgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLQkJdGVzdENvdW50ICsrOworICAgICAgICB0ZXN0Q291bnQgKys7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CkBAIC03NiwxNCArNzYsMTQgQEAKICAgICAgICAgfQogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiY29ubmVjdG9yMS41SUQiKTsKIAotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiRVhJVElORy4uLiBTVEFUVVMgPSAiICsgcmVzKTsKICAgICAgICAgcmV0dXJuIHJlczsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIGJvb2xlYW4gY2hlY2tSZXN1bHRzKGludCBudW0pIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBPYmplY3QgbyA9IChuZXcgSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJNeU1lc3NhZ2VDaGVja2VyIik7Ci0gICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpIAorICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKQogICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG8sIE1lc3NhZ2VDaGVja2VySG9tZS5jbGFzcyk7CiAgICAgICAgIE1lc3NhZ2VDaGVja2VyIGNoZWNrZXIgPSBob21lLmNyZWF0ZSgpOwogICAgICAgICBpbnQgcmVzdWx0ID0gY2hlY2tlci5nZXRNZXNzYWdlQ291bnQoKTsKQEAgLTkyLDcgKzkyLDcgQEAKIAogICAgIHByaXZhdGUgYm9vbGVhbiBkb25lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIE9iamVjdCBvID0gKG5ldyBJbml0aWFsQ29udGV4dCgpKS5sb29rdXAoIk15TWVzc2FnZUNoZWNrZXIiKTsKLSAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkgCisgICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpCiAgICAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cobywgTWVzc2FnZUNoZWNrZXJIb21lLmNsYXNzKTsKICAgICAgICAgTWVzc2FnZUNoZWNrZXIgY2hlY2tlciA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgIHJldHVybiBjaGVja2VyLmRvbmUoKTsKQEAgLTEwMCw3ICsxMDAsNyBAQAogCiAgICAgcHJpdmF0ZSBpbnQgZXhwZWN0ZWRSZXN1bHRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIE9iamVjdCBvID0gKG5ldyBJbml0aWFsQ29udGV4dCgpKS5sb29rdXAoIk15TWVzc2FnZUNoZWNrZXIiKTsKLSAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkgCisgICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpCiAgICAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cobywgTWVzc2FnZUNoZWNrZXJIb21lLmNsYXNzKTsKICAgICAgICAgTWVzc2FnZUNoZWNrZXIgY2hlY2tlciA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgIHJldHVybiBjaGVja2VyLmV4cGVjdGVkUmVzdWx0cygpOwpAQCAtMTA4LDcgKzEwOCw3IEBACiAKICAgICBwcml2YXRlIHZvaWQgbm90aWZ5QW5kV2FpdCgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBPYmplY3QgbyA9IChuZXcgSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJNeU1lc3NhZ2VDaGVja2VyIik7Ci0gICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpIAorICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKQogICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG8sIE1lc3NhZ2VDaGVja2VySG9tZS5jbGFzcyk7CiAgICAgICAgIE1lc3NhZ2VDaGVja2VyIGNoZWNrZXIgPSBob21lLmNyZWF0ZSgpOwogICAgICAgICBjaGVja2VyLm5vdGlmeUFuZFdhaXQoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9hcHAvc3JjL21kYi9NeU1lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhCmluZGV4IGVmZmU0ZGMuLjc4YWZhYmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9hcHAvc3JjL21kYi9NeU1lc3NhZ2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL2FwcC9zcmMvbWRiL015TWVzc2FnZUJlYW4uamF2YQpAQCAtMzksMTIgKzM5LDEyIEBACiAKIC8qKgogICovCi1wdWJsaWMgY2xhc3MgTXlNZXNzYWdlQmVhbiBpbXBsZW1lbnRzIE1lc3NhZ2VEcml2ZW5CZWFuLCAKK3B1YmxpYyBjbGFzcyBNeU1lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZURyaXZlbkJlYW4sCiAgICAgICAgIE15TWVzc2FnZUxpc3RlbmVyIHsKIAogICAgIHByaXZhdGUgdHJhbnNpZW50IE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYyA9IG51bGw7CiAgICAgcHJpdmF0ZSBDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICBAamFrYXJ0YS5pbmplY3QuSW5qZWN0CiAgICAgcHJpdmF0ZSBjb25uZWN0b3IuVGVzdENESUJlYW4gdGI7CiAKQEAgLTU0LDI5ICs1NCwyOSBAQAogICAgIHB1YmxpYyBNeU1lc3NhZ2VCZWFuKCkge30KIAogICAgIC8qKgotICAgICAqIHNldE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgCi0gICAgICogbm90IGZpbmFsIG9yIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgCisgICAgICogc2V0TWVzc2FnZURyaXZlbkNvbnRleHQgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dAorICAgICAqIG5vdCBmaW5hbCBvciBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kCiAgICAgICogd2l0aCBvbmUgYXJndW1lbnQgb2YgdHlwZSBqYWthcnRhLmVqYi5NZXNzYWdlRHJpdmVuQ29udGV4dC4KICAgICAgKgogICAgICAqIEBwYXJhbSBtZGMgICAgdGhlIGNvbnRleHQgdG8gc2V0CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TWVzc2FnZURyaXZlbkNvbnRleHQoTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjKSB7Ci0JdGhpcy5tZGMgPSBtZGM7CisgICAgdGhpcy5tZGMgPSBtZGM7CiAgICAgfQogCiAgICAgLyoqCi0gICAgICogZWpiQ3JlYXRlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yIAotICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBubyAKKyAgICAgKiBlamJDcmVhdGUgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IKKyAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggbm8KICAgICAgKiBhcmd1bWVudHMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgeyB9CiAKICAgICAvKioKLSAgICAgKiBvbk1lc3NhZ2UgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IgCisgICAgICogb25NZXNzYWdlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yCiAgICAgICogc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCB3aXRoIG9uZSBhcmd1bWVudAogICAgICAqIG9mIHR5cGUgamFrYXJ0YS5qbXMuTWVzc2FnZS4KICAgICAgKgotICAgICAqIENhc3RzIHRoZSBpbmNvbWluZyBNZXNzYWdlIHRvIGEgVGV4dE1lc3NhZ2UgYW5kIGRpc3BsYXlzIAorICAgICAqIENhc3RzIHRoZSBpbmNvbWluZyBNZXNzYWdlIHRvIGEgVGV4dE1lc3NhZ2UgYW5kIGRpc3BsYXlzCiAgICAgICogdGhlIHRleHQuCiAgICAgICoKICAgICAgKiBAcGFyYW0gaW5NZXNzYWdlICAgIHRoZSBpbmNvbWluZyBtZXNzYWdlCkBAIC05Miw3ICs5Miw3IEBACiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGlmIChpbk1lc3NhZ2UuZW5kc1dpdGgoIldSSVRFIikpIHsKLSAgICAgICAgICAgICAgICBkb0RiU3R1ZmYoIldSSVRFIiwgCisgICAgICAgICAgICAgICAgZG9EYlN0dWZmKCJXUklURSIsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbk1lc3NhZ2Uuc3Vic3RyaW5nKDAsIGluTWVzc2FnZS5sYXN0SW5kZXhPZigiOiIpKSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGluTWVzc2FnZS5lbmRzV2l0aCgiREVMRVRFIikpIHsKICAgICAgICAgICAgICAgICBkb0RiU3R1ZmYoIkRFTEVURSIsCkBAIC0xMDgsMTAgKzEwOCwxMCBAQAogICAgICAgICB9CiAKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBlamJSZW1vdmUgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IgCi0gICAgICogc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCB3aXRoIG5vIAorICAgICAqIGVqYlJlbW92ZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvcgorICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBubwogICAgICAqIGFyZ3VtZW50cy4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7fQpAQCAtMTIxLDYzICsxMjEsNjMgQEAKIAogICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbiA9IG51bGw7CiAgICAgICAgIFN0cmluZyBpZCAgICA9IG1lc3NhZ2Uuc3Vic3RyaW5nKDAsIG1lc3NhZ2UuaW5kZXhPZigiOiIpKTsKLSAgICAgICAgU3RyaW5nIGJvZHkgID0gbWVzc2FnZS5zdWJzdHJpbmcobWVzc2FnZS5pbmRleE9mKCI6IikrMSk7IAorICAgICAgICBTdHJpbmcgYm9keSAgPSBtZXNzYWdlLnN1YnN0cmluZyhtZXNzYWdlLmluZGV4T2YoIjoiKSsxKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoIlJFQUQiLmVxdWFscyhvcCkpIHsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGRlYnVnKCJSZWFkaW5nIHJvdyBmcm9tIGRhdGFiYXNlLi4uIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBDcmVhdGluZyBhIGRhdGFiYXNlIGNvbm5lY3Rpb24KICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvTXlEQiIpOwogICAgICAgICAgICAgICAgICAgZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKICAgICAgICAgICAgICAgICAgIGRlYnVnKCJHZXQgSkRCQyBjb25uZWN0aW9uLCBhdXRvIHNpZ24gb24iKTsKICAgICAgICAgICAgICAgICAgIGRiQ29ubmVjdGlvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICBTdGF0ZW1lbnQgc3RtdCA9IGRiQ29ubmVjdGlvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgIFN0cmluZyBxdWVyeSA9IAorICAgICAgICAgICAgICAgICAgU3RyaW5nIHF1ZXJ5ID0KICAgICAgICAgICAgICAgICAgICJTRUxFQ1QgaWQgZnJvbSBtZXNzYWdlcyB3aGVyZSBpZCA9ICdRUSciOwogICAgICAgICAgICAgICAgICAgUmVzdWx0U2V0IHJlc3VsdHMgPSBzdG10LmV4ZWN1dGVRdWVyeShxdWVyeSk7CiAgICAgICAgICAgICAgICAgICByZXN1bHRzLm5leHQoKTsKLSAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUVEgaGFzIGJhbGFuY2UgIiArIAorICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJRUSBoYXMgYmFsYW5jZSAiICsKICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuZ2V0SW50KCJiYWxhbmNlIikgKyAiIGRvbGxhcnMiKTsKICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuY2xvc2UoKTsKICAgICAgICAgICAgICAgICAgIHN0bXQuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlYWQgb25lIGFjY291bnRcbiIpOwogICAgICAgICAgICAgICAgICovCiAKICAgICAgICAgICAgIH0gZWxzZSBpZiAoIldSSVRFIi5lcXVhbHMob3ApKSB7CiAKICAgICAgICAgICAgICAgICBkZWJ1ZygiSW5zZXJ0aW5nIG9uZSBtZXNzYWdlIGluIHRoZSBkYXRhYmFzZVxuIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIC8vIENyZWF0aW5nIGEgZGF0YWJhc2UgY29ubmVjdGlvbgogICAgICAgICAgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L015REIiKTsKICAgICAgICAgICAgICAgICAvL2RlYnVnKCJMb29rZWQgdXAgRGF0YXNvdXJjZVxuIik7CiAgICAgICAgICAgICAgICAgLy9kZWJ1ZygiR2V0IEpEQkMgY29ubmVjdGlvbiwgYXV0byBzaWduIG9uIik7CiAgICAgICAgICAgICAgICAgZGJDb25uZWN0aW9uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgY3JlYXRlUm93KGlkLCBib2R5LCBkYkNvbm5lY3Rpb24pOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRlZCBvbmUgbWVzc2FnZVxuIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIH0gZWxzZSBpZiAoIkRFTEVURSIuZXF1YWxzKG9wKSkgewotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgZGVidWcoIkRlbGV0aW5nIG9uZSBtZXNzYWdlIGZyb20gdGhlIGRhdGFiYXNlXG4iKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIC8vIENyZWF0aW5nIGEgZGF0YWJhc2UgY29ubmVjdGlvbgogICAgICAgICAgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L015REIiKTsKICAgICAgICAgICAgICAgICAvL2RlYnVnKCJMb29rZWQgdXAgRGF0YXNvdXJjZVxuIik7CiAgICAgICAgICAgICAgICAgLy9kZWJ1ZygiR2V0IEpEQkMgY29ubmVjdGlvbiwgYXV0byBzaWduIG9uIik7CiAgICAgICAgICAgICAgICAgZGJDb25uZWN0aW9uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgZGVsZXRlUm93KGlkLCBkYkNvbm5lY3Rpb24pOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGVsZXRlZCBvbmUgbWVzc2FnZVxuIik7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKCJERUxFVEVfQUxMIi5lcXVhbHMob3ApKSB7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZWJ1ZygiRGVsZXRpbmcgYWxsIG1lc3NhZ2VzIGZyb20gdGhlIGRhdGFiYXNlXG4iKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIC8vIENyZWF0aW5nIGEgZGF0YWJhc2UgY29ubmVjdGlvbgogICAgICAgICAgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L015REIiKTsKICAgICAgICAgICAgICAgICAvL2RlYnVnKCJMb29rZWQgdXAgRGF0YXNvdXJjZVxuIik7CkBAIC0xODgsNyArMTg4LDcgQEAKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy91bnN1cHBvcnRlZCBvcAogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgfWZpbmFsbHl7CiAgICAgICAgICAgICB0cnl7CiAgICAgICAgICAgICAgICAgZGJDb25uZWN0aW9uLmNsb3NlKCk7CkBAIC0xOTcsOSArMTk3LDkgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICBwcml2YXRlIHZvaWQgY3JlYXRlUm93KFN0cmluZyBpZCwgU3RyaW5nIGJvZHksIAotICAgICAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pIAorCisgICAgcHJpdmF0ZSB2b2lkIGNyZWF0ZVJvdyhTdHJpbmcgaWQsIFN0cmluZyBib2R5LAorICAgICAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogCiAgICAgICAgIC8vIENyZWF0ZSByb3cgZm9yIHRoaXMgbWVzc2FnZQpAQCAtMjE1LDkgKzIxNSw5IEBACiAgICAgICAgIHN0bXQuY2xvc2UoKTsKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgZGVsZXRlUm93KFN0cmluZyBpZCwgamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pIAorICAgIHByaXZhdGUgdm9pZCBkZWxldGVSb3coU3RyaW5nIGlkLCBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIERlbGV0ZSByb3cgZm9yIHRoaXMgbWVzc2FnZQogICAgICAgICBkZWJ1ZygiRGVsZXRlUm93IHdpdGggSUQgPSAiICsgaWQpOwogICAgICAgICBTdGF0ZW1lbnQgc3RtdCA9IGRiQ29ubmVjdGlvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKQEAgLTIzMCw5ICsyMzAsOSBAQAogICAgICAgICBzdG10LmNsb3NlKCk7CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIGRlbGV0ZUFsbChqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikgCisgICAgcHJpdmF0ZSB2b2lkIGRlbGV0ZUFsbChqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIERlbGV0ZSByb3cgZm9yIHRoaXMgbWVzc2FnZQogICAgICAgICBTdGF0ZW1lbnQgc3RtdCA9IGRiQ29ubmVjdGlvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKICAgICAgICAgU3RyaW5nIHF1ZXJ5ID0gIkRFTEVURSBGUk9NIG1lc3NhZ2VzIjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvYnVpbGQueG1sCmluZGV4IDY0NWYxYzkuLjkyMzEyMDAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL2J1aWxkLnhtbApAQCAtNjAsNyArNjAsNyBAQAogCiAgIDx0YXJnZXQgbmFtZT0icnVudGVzdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJzaW1wbGVtZGIiIC8+CisgICAgPHBhcmFtIG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJzaW1wbGVtZGIiIC8+CiAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL01FVEEtSU5GL3JhLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9NRVRBLUlORi9yYS54bWwKaW5kZXggMmNhMmViYy4uMjFkZWI5MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL01FVEEtSU5GL3JhLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvTUVUQS1JTkYvcmEueG1sCkBAIC00NSw3ICs0NSw3IEBACiAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CiAgICAgICAgIDxpbmJvdW5kLXJlc291cmNlYWRhcHRlcj4KLSAgICAgICAgICAgIDxtZXNzYWdlYWRhcHRlcj4gICAgICAgICAgCisgICAgICAgICAgICA8bWVzc2FnZWFkYXB0ZXI+CiAgICAgICAgICAgICAgICAgPG1lc3NhZ2VsaXN0ZW5lcj4KICAgICAgICAgICAgICAgICAgICAgPG1lc3NhZ2VsaXN0ZW5lci10eXBlPgogICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdG9yLk15TWVzc2FnZUxpc3RlbmVyCkBAIC01Niw3ICs1Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICA8L2FjdGl2YXRpb25zcGVjLWNsYXNzPgogICAgICAgICAgICAgICAgICAgICA8L2FjdGl2YXRpb25zcGVjPgogICAgICAgICAgICAgICAgIDwvbWVzc2FnZWxpc3RlbmVyPgotICAgICAgICAgICAgPC9tZXNzYWdlYWRhcHRlcj4gICAgICAgICAgCisgICAgICAgICAgICA8L21lc3NhZ2VhZGFwdGVyPgogICAgICAgICA8L2luYm91bmQtcmVzb3VyY2VhZGFwdGVyPgogICAgICAgICA8YWRtaW5vYmplY3Q+CiAgICAgICAgICAgPGFkbWlub2JqZWN0LWludGVyZmFjZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvYWRtaW5vYmplY3QtaW50ZXJmYWNlPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2J1aWxkLnhtbAppbmRleCBmYWQyZWRiLi42N2EwYWVmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2J1aWxkLnhtbApAQCAtMzAsOCArMzAsOCBAQAogCiAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJpbml0LWNvbW1vbiIgPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgotCSAgICA8cGFyYW0gbmFtZT0iYnVpbGQuY2xhc3Nlcy5kaXIiIHZhbHVlPSJjbGFzc2VzIiAvPgotICAgIAk8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY29ubmVjdG9yIiAvPgorICAgICAgICA8cGFyYW0gbmFtZT0iYnVpbGQuY2xhc3Nlcy5kaXIiIHZhbHVlPSJjbGFzc2VzIiAvPgorICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY29ubmVjdG9yIiAvPgogICAgIDwvYW50Y2FsbD4KICAgICA8amFyIGphcmZpbGU9Ii4uL2dlbmVyaWMtcmEuamFyIiBiYXNlZGlyPSJjbGFzc2VzIgogICAgICAgICAgaW5jbHVkZXM9ImNvbm5lY3Rvci8qLmNsYXNzIiAvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEKaW5kZXggNDIxODhhNi4uNjJlMjI1NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgQ29udHJvbHMgewogICAgIHB1YmxpYyBzdGF0aWMgT2JqZWN0IHJlYWR5TG9jayA9IG5ldyBPYmplY3QoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEKaW5kZXggZjRlMmJhNC4uNmQ2YzcyMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBEZWxpdmVyeVdvcmsgaW1wbGVtZW50cyBXb3JrIHsKIApAQCAtMzYsNyArMzYsNyBAQAogICAgIHByaXZhdGUgU3RyaW5nIG9wOwogICAgIHByaXZhdGUgYm9vbGVhbiBrZWVwQ291bnQ7CiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50ZXIgPSAwOwotICAgIAorCiAgICAgcHVibGljIERlbGl2ZXJ5V29yayhNZXNzYWdlRW5kcG9pbnQgZXAsIGludCBudW1PZk1lc3NhZ2VzLCBTdHJpbmcgb3ApIHsKICAgICAgICAgdGhpcy5lcCA9IGVwOwogICAgICAgICB0aGlzLm51bSA9IG51bU9mTWVzc2FnZXM7CkBAIC00NCw3ICs0NCw3IEBACiAgICAgICAgIHRoaXMua2VlcENvdW50ID0gZmFsc2U7CiAgICAgfQogCi0gICAgcHVibGljIERlbGl2ZXJ5V29yayhNZXNzYWdlRW5kcG9pbnQgZXAsIGludCBudW1PZk1lc3NhZ2VzLCAKKyAgICBwdWJsaWMgRGVsaXZlcnlXb3JrKE1lc3NhZ2VFbmRwb2ludCBlcCwgaW50IG51bU9mTWVzc2FnZXMsCiAgICAgICAgICAgICBTdHJpbmcgb3AsIGJvb2xlYW4ga2VlcENvdW50KSB7CiAgICAgICAgIHRoaXMuZXAgPSBlcDsKICAgICAgICAgdGhpcy5udW0gPSBudW1PZk1lc3NhZ2VzOwpAQCAtNTUsNyArNTUsNyBAQAogICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKIAogICAgICAgICBkZWJ1ZygiRU5URVIuLi4iKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIC8vTWV0aG9kIG9uTWVzc2FnZSA9IGdldE9uTWVzc2FnZU1ldGhvZCgpOwogICAgICAgICAgICAgLy9lcC5iZWZvcmVEZWxpdmVyeShvbk1lc3NhZ2UpOwpAQCAtNzgsMTEgKzc4LDExIEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vZXAuYWZ0ZXJEZWxpdmVyeSgpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiTEVBVkUuLi4iKTsKICAgICB9CiAKQEAgLTkzLDE0ICs5MywxNCBAQAogICAgIH0KIAogICAgIHByaXZhdGUgTWV0aG9kIGdldE9uTWVzc2FnZU1ldGhvZCgpIHsKLSAgICAgICAgCisKICAgICAgICAgTWV0aG9kIG9uTWVzc2FnZU1ldGhvZCA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDbGFzcyBtc2dMaXN0ZW5lckNsYXNzID0gY29ubmVjdG9yLk15TWVzc2FnZUxpc3RlbmVyLmNsYXNzOwogICAgICAgICAgICAgQ2xhc3NbXSBwYXJhbVR5cGVzID0geyBqYXZhLmxhbmcuU3RyaW5nLmNsYXNzIH07Ci0gICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPSAKKyAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9CiAgICAgICAgICAgICAgICAgbXNnTGlzdGVuZXJDbGFzcy5nZXRNZXRob2QoIm9uTWVzc2FnZSIsIHBhcmFtVHlwZXMpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEKaW5kZXggOTdlZDA5ZS4uMjkyOTA3ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhCkBAIC0zNiw3ICszNiw3IEBACiAgICAgICAgICAgICAgIGZsYWdUb1N0cmluZyhmbGFncykpOwogICAgIH0KIAotICAgIAorCiAgICAgcHVibGljIHZvaWQgZm9yZ2V0KFhpZCB4aWQpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5mb3JnZXQ6ICIgKyB4aWRUb1N0cmluZyh4aWQpKTsKICAgICB9CkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5wcmVwYXJlOiAiICsgeGlkVG9TdHJpbmcoeGlkKSk7CiAgICAgICAgIHJldHVybiBYQVJlc291cmNlLlhBX09LOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBYaWRbXSByZWNvdmVyKGludCBmbGFnKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2UucmVjb3ZlcjogIiArIGZsYWdUb1N0cmluZyhmbGFnKSk7CiAgICAgICAgIHJldHVybiBudWxsOwpAQCAtNjYsNyArNjYsNyBAQAogICAgIHB1YmxpYyBib29sZWFuIHNldFRyYW5zYWN0aW9uVGltZW91dChpbnQgc2Vjb25kcykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHN0YXJ0KFhpZCB4aWQsIGludCBmbGFncykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLnN0YXJ0OiAiICsgeGlkVG9TdHJpbmcoeGlkKSArICIsIiArCiAgICAgICAgICAgICAgICAgZmxhZ1RvU3RyaW5nKGZsYWdzKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvTWVzc2FnZXMuamF2YQppbmRleCA4NGUxYzcxLi44NDc0NmQ0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL01lc3NhZ2VzLmphdmEKQEAgLTIxLDcgKzIxLDcgQEAKIC8qKgogICogY29sbGVjdGlvbiBvZiBtZXNzYWdlcy4KICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIE1lc3NhZ2VzIHsKIApAQCAtNTQsNyArNTQsNyBAQAogICAgICAgIFN0cmluZyBjb21tYW5kICA9IGFyZ3NbMF07CiAgICAgICAgU3RyaW5nIGRlc3ROYW1lID0gYXJnc1sxXTsKICAgICAgICBTdHJpbmcgbWVzc2FnZSAgPSBhcmdzWzJdOwotICAgCisKICAgICAgICBpZiAoISJhZGQiLmVxdWFscyhjb21tYW5kKSkgewogICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEKaW5kZXggZjMzYTcxMS4uZDc3YjQ4NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YQpAQCAtMzgsMTEgKzM4LDExIEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgaW5pdGlhbGl6ZSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXppbmcgdGhlIENvbnRyb2xzIHRvIGZhbHNlOiIrcmVzZXRDb250cm9sKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXppbmcgdGhlIENvbnRyb2xzIHRvIGZhbHNlOiIrcmVzZXRDb250cm9sKTsKICAgICAgICAgaWYgKHJlc2V0Q29udHJvbC5lcXVhbHMoIkJFR0lOTklORyIpKSB7CiAgICAgICAgICAgIENvbnRyb2xzLmRvbmU9ZmFsc2U7Ci0JICAgU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6ZWQgdGhlIENvbnRyb2xzIHRvIGZhbHNlIik7Ci0JfQorICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW015QWRtaW5PYmplY3RdIEluaXRpYWxpemVkIHRoZSBDb250cm9scyB0byBmYWxzZSIpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiBkb25lKCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvTXlXb3JrLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2Nvbm5lY3Rvci9NeVdvcmsuamF2YQppbmRleCA2MTU4OGVjLi5mMjA0MjQwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2Nvbm5lY3Rvci9NeVdvcmsuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2Nvbm5lY3Rvci9NeVdvcmsuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIE15V29yayBpbXBsZW1lbnRzIFdvcmsgewogCkBAIC0zNSw3ICszNSw3IEBACiAgICAgcHJpdmF0ZSBib29sZWFuIHN0b3AgPSBmYWxzZTsKICAgICBwcml2YXRlIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZmFjdG9yeTsKICAgICBwcml2YXRlIFdvcmtNYW5hZ2VyIHdtOwotICAgIAorCiAgICAgcHVibGljIE15V29yaygKICAgICAgICAgICAgIFN0cmluZyBuYW1lLCBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGZhY3RvcnksIFdvcmtNYW5hZ2VyIHdtKSB7CiAgICAgICAgIHRoaXMuZmFjdG9yeSA9IGZhY3Rvcnk7CkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgICAgICB0cnkgewogCiAgICAgICAgICAgICAgICAgTWV0aG9kIG9uTWVzc2FnZSA9IGdldE9uTWVzc2FnZU1ldGhvZCgpOwotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaXNEZWxpdmVyeVRyYW5zYWN0ZWQgPSAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpc0RlbGl2ZXJ5VHJhbnNhY3RlZCA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3J5LmlzRGVsaXZlcnlUcmFuc2FjdGVkKG9uTWVzc2FnZSkpOwogCiAgICAgICAgICAgICAgICAgLyoKQEAgLTcwLDcgKzcwLDcgQEAKICAgICAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiTEVBVkUuLi4iKTsKICAgICB9CiAKQEAgLTg1LDE0ICs4NSwxNCBAQAogICAgIH0KIAogICAgIHB1YmxpYyBNZXRob2QgZ2V0T25NZXNzYWdlTWV0aG9kKCkgewotICAgICAgICAKKwogICAgICAgICBNZXRob2Qgb25NZXNzYWdlTWV0aG9kID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENsYXNzIG1zZ0xpc3RlbmVyQ2xhc3MgPSBjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIuY2xhc3M7CiAgICAgICAgICAgICBDbGFzc1tdIHBhcmFtVHlwZXMgPSB7IGphdmEubGFuZy5TdHJpbmcuY2xhc3MgfTsKLSAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9IAorICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0KICAgICAgICAgICAgICAgICBtc2dMaXN0ZW5lckNsYXNzLmdldE1ldGhvZCgib25NZXNzYWdlIiwgcGFyYW1UeXBlcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YQppbmRleCBmYTk5ODNmLi41YmU2NTNjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEKQEAgLTI0LDkgKzI0LDkgQEAKICAqIHNvIHRoYXQgdGhlIGFwcCBzZXJ2ZXIgY2FuIGluc3RhbnRpYXRlIGFuZCBjb25maWd1cmUKICAqIGl0IGF0IHRoZSBydW50aW1lLgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCi1wdWJsaWMgY2xhc3MgU2ltcGxlQWN0aXZhdGlvblNwZWMgCitwdWJsaWMgY2xhc3MgU2ltcGxlQWN0aXZhdGlvblNwZWMKICAgICBpbXBsZW1lbnRzIEFjdGl2YXRpb25TcGVjLCBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7CiAKICAgICBwcml2YXRlIFN0cmluZyBkZXN0aW5hdGlvbk5hbWU7CkBAIC00Myw3ICs0Myw3IEBACiAgICAgcHVibGljIFN0cmluZyBnZXREZXN0aW5hdGlvbk5hbWUgKCkgewogICAgICAgICByZXR1cm4gdGhpcy5kZXN0aW5hdGlvbk5hbWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0RGVzdGluYXRpb25OYW1lIChTdHJpbmcgbmFtZSkgewogICAgICAgICBkZWJ1Zygic2V0RGVzdGluYXRpb25OYW1lKCkgY2FsbGVkLi4uIG5hbWUgPSAiICsgbmFtZSk7CiAgICAgICAgIHRoaXMuZGVzdGluYXRpb25OYW1lID0gbmFtZTsKQEAgLTUyLDcgKzUyLDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldERlc3RpbmF0aW9uVHlwZSgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZGVzdGluYXRpb25UeXBlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldERlc3RpbmF0aW9uVHlwZSAoU3RyaW5nIHR5cGUpIHsKICAgICAgICAgZGVidWcoInNldERlc3RpbmF0aW9uVHlwZSAoKSBjYWxsZWQuLi4gdHlwZSA9ICIgKyB0eXBlKTsKICAgICAgICAgdGhpcy5kZXN0aW5hdGlvblR5cGU9IHR5cGU7CkBAIC02MSw3ICs2MSw3IEBACiAgICAgcHVibGljIFN0cmluZyBnZXRUZXN0UHJvcCgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMudGVzdFByb3A7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0VGVzdFByb3AgKFN0cmluZyB0ZXN0UHJvcCkgewogICAgICAgICBkZWJ1Zygic2V0VGVzdFByb3AgKCkgY2FsbGVkLi4uIHRlc3RQcm9wID0gIiArIHRlc3RQcm9wKTsKICAgICAgICAgdGhpcy50ZXN0UHJvcCA9IHRlc3RQcm9wOwpAQCAtNzAsNyArNzAsNyBAQAogICAgIHB1YmxpYyBJbnRlZ2VyIGdldFRlc3RJbnRlZ2VyUHJvcCgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMudGVzdEludGVnZXJQcm9wOwogICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFRlc3RJbnRlZ2VyUHJvcCAoSW50ZWdlciB0ZXN0UHJvcDEpIHsKICAgICAgICAgZGVidWcoInNldFRlc3RJbnRlZ2VyUHJvcCAoKSBjYWxsZWQuLi4gdGVzdEludGVnZXJQcm9wID0gIiArIHRlc3RQcm9wMSk7CiAgICAgICAgIHRoaXMudGVzdEludGVnZXJQcm9wID0gdGVzdFByb3AxOwpAQCAtOTQsNyArOTQsNyBAQAogCiAgICAgICB9CiAKLSAgIH0gCisgICB9CiAKICAgICBwcml2YXRlIHZvaWQgZGVidWcgKFN0cmluZyBtZXNzYWdlKQogICAgIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YQppbmRleCA1Nzc4ODlkLi40YjUwMGJjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbC5qYXZhCkBAIC00MCw5ICs0MCw5IEBACiAvKioKICAqIFRoaXMgaXMgYSBzYW1wbGUgcmVzb3VyY2UgYWRhcHRlcgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCi1wdWJsaWMgY2xhc3MgU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbCAKK3B1YmxpYyBjbGFzcyBTaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsCiBpbXBsZW1lbnRzIFJlc291cmNlQWRhcHRlciwgamF2YS5pby5TZXJpYWxpemFibGUgewogCiAgICAgcHJpdmF0ZSBCb290c3RyYXBDb250ZXh0IGN0eDsKQEAgLTU4LDcgKzU4LDcgQEAKIAogICAgIHB1YmxpYyB2b2lkCiAgICAgc3RhcnQoQm9vdHN0cmFwQ29udGV4dCBjdHgpIHRocm93cyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbnsKLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIjAwMS4gU2ltcGxlIFJBIHN0YXJ0Li4uIik7CiAKICAgICAgICAgdGhpcy5jdHggPSBjdHg7CkBAIC02OCwyMSArNjgsMjEgQEAKIAogICAgICAgICAvL3Rlc3RpbmcgY3JlYXQgdGltZXIKICAgICAgICAgVGltZXIgdGltZXIgPSBudWxsOwotCSAgdHJ5ewotCSAgICAgIHRpbWVyID0gY3R4LmNyZWF0ZVRpbWVyKCk7Ci0JICB9IGNhdGNoKFVuYXZhaWxhYmxlRXhjZXB0aW9uIHVlKSB7Ci0JICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFcnJvciIpOwotCSAgICAgIHRocm93IG5ldyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbigiRXJyb3IgZm9ybSBib290c3RyYXAiKTsKLQkgIH0KKyAgICAgIHRyeXsKKyAgICAgICAgICB0aW1lciA9IGN0eC5jcmVhdGVUaW1lcigpOworICAgICAgfSBjYXRjaChVbmF2YWlsYWJsZUV4Y2VwdGlvbiB1ZSkgeworICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXJyb3IiKTsKKyAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VBZGFwdGVySW50ZXJuYWxFeGNlcHRpb24oIkVycm9yIGZvcm0gYm9vdHN0cmFwIik7CisgICAgICB9CiAgICAgICAgIGRlYnVnKCIwMDQuIFNpbXBsZSBSQSBzdGFydC4uLiIpOwogCiAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAKKwogICAgICAgICAgIFhBVGVybWluYXRvciB4YSA9IGN0eC5nZXRYQVRlcm1pbmF0b3IoKTsKLSAgICAgICAgICAKKwogICAgICAgICAgIFhpZCB4aWQxID0gbmV3IFhJRCgpOwogICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFhJRDEgPSAiICsgeGlkMSk7Ci0gICAgICAgICAgCisKICAgICAgICAgICBFeGVjdXRpb25Db250ZXh0IGVjID0gbmV3IEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICAgICAgICBlYy5zZXRYaWQoeGlkMSk7CiAgICAgICAgICAgZWMuc2V0VHJhbnNhY3Rpb25UaW1lb3V0KDUqMTAwMCk7IC8vNSBzZWNvbmRzCkBAIC05MiwxNCArOTIsMTQgQEAKICAgICAgICAgICB3bS5kb1dvcmsob3V0dywgMSoxMDAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgeGEuY29tbWl0KHhpZDEsIHRydWUpOwogICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgIAorCiAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgZXggPSAiICsgZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICB4YS5yb2xsYmFjayh4aWQxKTsKICAgICAgICAgICB9Ci0gICAgICAgICAgCisKICAgICAgICAgICBYaWQgeGlkMiA9IG5ldyBYSUQoKTsKICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBYSUQyID0gIiArIHhpZDIpOwotICAgICAgICAgIAorCiAgICAgICAgICAgZWMgPSBuZXcgRXhlY3V0aW9uQ29udGV4dCgpOwogICAgICAgICAgIGVjLnNldFhpZCh4aWQyKTsKICAgICAgICAgICBlYy5zZXRUcmFuc2FjdGlvblRpbWVvdXQoNSoxMDAwKTsgLy81IHNlY29uZHMKQEAgLTExNiw3ICsxMTYsNyBAQAogICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgIH0KIAotICAgICAgICAKKwogICAgICAgICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IDM7IGkrKykgewogICAgICAgICAgIFRlc3RXTVdvcmsgdyA9IG5ldyBUZXN0V01Xb3JrKGksIGZhbHNlKTsKICAgICAgICAgICB0cnkgewpAQCAtMTI0LDcgKzEyNCw3IEBACiAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGQUlMOiBDQVVHSFQgZXhjZXB0aW9uIDogaSA9ICIgKyBpKTsKICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgICB9IAorICAgICAgICAgIH0KICAgICAgICAgICB9CiAKICAgICAgICAgICBmb3IgKGludCBpID0gMyA7IGkgPCA2OyBpKyspIHsKQEAgLTE3Miw3ICsxNzIsNyBAQAogICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgIH0KICAgICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCIwMDUuIFNpbXBsZSBSQSBzdGFydC4uLiIpOwogICAgIH0KIApAQCAtMjA2LDEzICsyMDYsMTMgQEAKIAogICAgIHB1YmxpYyB2b2lkCiAgICAgZW5kcG9pbnREZWFjdGl2YXRpb24gKAotICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBlbmRwb2ludEZhY3RvcnksIAorICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBlbmRwb2ludEZhY3RvcnksCiAgICAgICAgICAgICBBY3RpdmF0aW9uU3BlYyBzcGVjKSB7CiAgICAgICAgIGRlYnVnICgiZW5kcG9pbnREZWFjdGl2YXRpb24gY2FsbGVkLi4uIik7Ci0gICAgICAgIAorCiAgICAgICAgICgoV29ya0Rpc3BhdGNoZXIpIHdvcmspLnN0b3AoKTsKICAgICB9Ci0gIAorCiAgICAgcHVibGljIFN0cmluZyBnZXRUZXN0TmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHRlc3ROYW1lOwogICAgIH0KQEAgLTIyOCw3ICsyMjgsNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbF0gPT0+ICIgKyBtZXNzYWdlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgWEFSZXNvdXJjZVtdIGdldFhBUmVzb3VyY2VzKEFjdGl2YXRpb25TcGVjW10gc3BlY3MpIAorICAgIHB1YmxpYyBYQVJlc291cmNlW10gZ2V0WEFSZXNvdXJjZXMoQWN0aXZhdGlvblNwZWNbXSBzcGVjcykKICAgICAgICAgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvVGVzdFdNV29yay5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvVGVzdFdNV29yay5qYXZhCmluZGV4IDQ3ZmRlZGUuLmQzMzZjYjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL1Rlc3RXTVdvcmsuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2Nvbm5lY3Rvci9UZXN0V01Xb3JrLmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBUZXN0V01Xb3JrIGltcGxlbWVudHMgV29yayB7CiAKQEAgLTQyLDggKzQyLDggQEAKICAgICBwdWJsaWMgVGVzdFdNV29yayhpbnQgaWQsIGJvb2xlYW4gaXNSb2d1ZSkgewogICAgICAgICB0aGlzKGlkLCBpc1JvZ3VlLCBmYWxzZSwgbnVsbCk7CiAgICAgfQotICAgIAotICAgIHB1YmxpYyBUZXN0V01Xb3JrKGludCBpZCwgYm9vbGVhbiBpc1JvZ3VlLCAKKworICAgIHB1YmxpYyBUZXN0V01Xb3JrKGludCBpZCwgYm9vbGVhbiBpc1JvZ3VlLAogICAgICAgICAgICAgYm9vbGVhbiBkb05lc3QsIEV4ZWN1dGlvbkNvbnRleHQgY3R4KSB7CiAgICAgICAgIHRoaXMuaWQgPSBpZDsKICAgICAgICAgdGhpcy5pc1JvZ3VlID0gaXNSb2d1ZTsKQEAgLTc3LDEwICs3NywxMCBAQAogICAgICAgICAgICAgfSBjYXRjaCAoV29ya0V4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgICAgIGlmIChleC5nZXRFcnJvckNvZGUoKS5lcXVhbHMoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV29ya0V4Y2VwdGlvbi5UWF9DT05DVVJSRU5UX1dPUktfRElTQUxMT1dFRCkpIHsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKyAKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQQVNTOiBDQVVHSFQgRVhQRUNURUQgPSAiICsgZXguZ2V0RXJyb3JDb2RlKCkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsgCisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRkFJTDogQ0FVR0hUIFVORVhQRUNURUQgPSAiICsgZXguZ2V0RXJyb3JDb2RlKCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTkyLDcgKzkyLDcgQEAKICAgICAgICAgICAgICAgICBlYy5zZXRUcmFuc2FjdGlvblRpbWVvdXQoNSoxMDAwKTsgLy81IHNlY29uZHMKICAgICAgICAgICAgICAgICB3bS5kb1dvcmsobmVzdGVkV29yaywgMSoxMDAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICJGQUlMOiBDQVVHSFQgVU5FWFBFQ1RFRCA9ICIgKyBleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL2phdmFlZS1pbnRlZ3JhdGlvbi9zdGFuZGFsb25lLXJlc291cmNlLWFkYXB0ZXItYXMtYmVhbi1hcmNoaXZlL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQppbmRleCA5YTA1OWZlLi5mYTAzMmVmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEKQEAgLTMzLDcgKzMzLDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBXb3JrRGlzcGF0Y2hlciBpbXBsZW1lbnRzIFdvcmsgewogCkBAIC00NCwxMSArNDQsMTEgQEAKICAgICBwcml2YXRlIEFjdGl2YXRpb25TcGVjIHNwZWM7CiAgICAgcHJpdmF0ZSBXb3JrTWFuYWdlciB3bTsKICAgICBwcml2YXRlIFhBVGVybWluYXRvciB4YTsKLSAgICAKKwogICAgIHB1YmxpYyBXb3JrRGlzcGF0Y2hlcigKICAgICAgICAgICAgIFN0cmluZyBpZCwKICAgICAgICAgICAgIEJvb3RzdHJhcENvbnRleHQgY3R4LAotICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBmYWN0b3J5LCAKKyAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZmFjdG9yeSwKICAgICAgICAgICAgIEFjdGl2YXRpb25TcGVjIHNwZWMpIHsKICAgICAgICAgdGhpcy5pZCAgICAgID0gaWQ7CiAgICAgICAgIHRoaXMuY3R4ICAgICA9IGN0eDsKQEAgLTYxLDcgKzYxLDcgQEAKICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CiAKICAgICAgICAgZGVidWcoIkVOVEVSLi4uIik7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKENvbnRyb2xzLnJlYWR5TG9jaykgewogICAgICAgICAgICAgICAgIGRlYnVnKCJXQUlULi4uIik7CkBAIC04MywyNiArODMsMjYgQEAKICAgICAgICAgICAgIHRyeSB7CiAKICAgICAgICAgICAgICAgICBNZXRob2Qgb25NZXNzYWdlID0gZ2V0T25NZXNzYWdlTWV0aG9kKCk7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpc0RlbGl2ZXJ5VHJhbnNhY3RlZCA9ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlzRGVsaXZlcnlUcmFuc2FjdGVkID0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3J5LmlzRGVsaXZlcnlUcmFuc2FjdGVkKG9uTWVzc2FnZSkpOwogCiAgICAgICAgICAgICAgICAgaWYgKCFmYWN0b3J5LmlzRGVsaXZlcnlUcmFuc2FjdGVkKG9uTWVzc2FnZSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy9NZXNzYWdlRW5kcG9pbnQgZXAgPSBmYWN0b3J5LmNyZWF0ZUVuZHBvaW50KG51bGwpOwotICAgICAgICAgICAgICAgICAgICAvL0RlbGl2ZXJ5V29yayBkID0gbmV3IERlbGl2ZXJ5V29yaygiTk9fVFgiLCBlcCk7IAorICAgICAgICAgICAgICAgICAgICAvL0RlbGl2ZXJ5V29yayBkID0gbmV3IERlbGl2ZXJ5V29yaygiTk9fVFgiLCBlcCk7CiAgICAgICAgICAgICAgICAgICAgIC8vd20uZG9Xb3JrKGQsIDAsIG51bGwsIG51bGwpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vTWVzc2FnZUVuZHBvaW50IGVwID0gZmFjdG9yeS5jcmVhdGVFbmRwb2ludChudWxsKTsKICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50IGVwID0gZmFjdG9yeS5jcmVhdGVFbmRwb2ludChuZXcgRmFrZVhBUmVzb3VyY2UoKSk7CiAgICAgICAgICAgICAgICAgICAgIGludCBudW1PZk1lc3NhZ2VzID0gNTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy9pbXBvcnRpbmcgdHJhbnNhY3Rpb24KIAogICAgICAgICAgICAgICAgICAgICAvL3dyaXRlL2NvbW1pdAogICAgICAgICAgICAgICAgICAgICBFeGVjdXRpb25Db250ZXh0IGVjID0gc3RhcnRUeCgpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiU3RhcnQgVFggLSAiICsgZWMuZ2V0WGlkKCkpOwogCi0gICAgICAgICAgICAgICAgICAgIERlbGl2ZXJ5V29yayB3ID0gCisgICAgICAgICAgICAgICAgICAgIERlbGl2ZXJ5V29yayB3ID0KICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEZWxpdmVyeVdvcmsoZXAsIG51bU9mTWVzc2FnZXMsICJXUklURSIpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIHRydWUpOwpAQCAtMTEwLDcgKzExMCw3IEBACiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJET05FIFdSSVRFIFRPIERCIik7CiAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xzLmV4cGVjdGVkUmVzdWx0cyA9IG51bU9mTWVzc2FnZXM7CiAgICAgICAgICAgICAgICAgICAgIG5vdGlmeUFuZFdhaXQoKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy9kZWxldGUvcm9sbGJhY2sKICAgICAgICAgICAgICAgICAgICAgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7CkBAIC0xMjYsNyArMTI2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgLy9kZWxldGUvY29tbWl0CiAgICAgICAgICAgICAgICAgICAgIGVjID0gc3RhcnRUeCgpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiU3RhcnQgVFggLSAiICsgZWMuZ2V0WGlkKCkpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICB3ID0gbmV3IERlbGl2ZXJ5V29yayhlcCwgbnVtT2ZNZXNzYWdlcywgIkRFTEVURSIpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIHRydWUpOwpAQCAtMTUwLDcgKzE1MCw3IEBACiAgICAgICAgICAgICAgICAgICAgIC8vZGVsZXRlL2NvbW1pdAogICAgICAgICAgICAgICAgICAgICBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgdyA9IG5ldyBEZWxpdmVyeVdvcmsoZXAsIG51bU9mTWVzc2FnZXMsICJERUxFVEUiKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgeGEuY29tbWl0KGVjLmdldFhpZCgpLCB0cnVlKTsKQEAgLTE5NSw3ICsxOTUsNyBAQAogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBpZiAoWEFSZXNvdXJjZS5YQV9PSyA9PSB4YS5wcmVwYXJlKGVjLmdldFhpZCgpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgeGEuY29tbWl0KGVjLmdldFhpZCgpLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiWEEgUFJFUEFSRS9DT01NSVQuIERPTkUgV1JJVEUgVE8gREIgIik7CkBAIC0yMDcsMTkgKzIwNywxOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMuZXhwZWN0ZWRSZXN1bHRzID0gMzsKICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeUFuZFdhaXQoKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvL2RlbGV0ZSBhbGwuCiAgICAgICAgICAgICAgICAgICAgIGVjID0gc3RhcnRUeCgpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiU3RhcnQgVFggLSAiICsgZWMuZ2V0WGlkKCkpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICB3ID0gbmV3IERlbGl2ZXJ5V29yayhlcCwgMSwgIkRFTEVURV9BTEwiKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgeGEuY29tbWl0KGVjLmdldFhpZCgpLCB0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIkRPTkUgREVMRVRFIEFMTCBGUk9NIERCIik7CiAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xzLmV4cGVjdGVkUmVzdWx0cyA9IDA7CiAgICAgICAgICAgICAgICAgICAgIG5vdGlmeUFuZFdhaXQoKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgZG9uZSgpOwogICAgICAgICAgICAgICAgIH0KIApAQCAtMjQzLDcgKzI0Myw3IEBACiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIkxFQVZFLi4uIik7CiAgICAgfQogCkBAIC0yNTgsMTQgKzI1OCwxNCBAQAogICAgIH0KIAogICAgIHB1YmxpYyBNZXRob2QgZ2V0T25NZXNzYWdlTWV0aG9kKCkgewotICAgICAgICAKKwogICAgICAgICBNZXRob2Qgb25NZXNzYWdlTWV0aG9kID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENsYXNzIG1zZ0xpc3RlbmVyQ2xhc3MgPSBjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIuY2xhc3M7CiAgICAgICAgICAgICBDbGFzc1tdIHBhcmFtVHlwZXMgPSB7IGphdmEubGFuZy5TdHJpbmcuY2xhc3MgfTsKLSAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9IAorICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0KICAgICAgICAgICAgICAgICBtc2dMaXN0ZW5lckNsYXNzLmdldE1ldGhvZCgib25NZXNzYWdlIiwgcGFyYW1UeXBlcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CkBAIC0yODgsMTMgKzI4OCwxMyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgLy9TbGVlcCBmb3IgNSBzZWNvbmRzCiAgICAgICAgICAgICAvL1RocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoNSoxMDAwKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQoQ29udHJvbHMucmVhZHlMb2NrKSB7CiAgICAgICAgICAgICAgICAgLy9Ob3RpZnkgdGhlIGNsaWVudCB0byBjaGVjayB0aGUgcmVzdWx0cwotICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay5ub3RpZnkoKTsgCi0gICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLm5vdGlmeSgpOworCiAgICAgICAgICAgICAgICAgLy9XYWl0IHVudGlsIHJlc3VsdHMgYXJlIHZlcmlmaWVkIGJ5IHRoZSBjbGllbnQKLSAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2sud2FpdCgpOyAKKyAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2sud2FpdCgpOwogCiAgICAgICAgICAgICAgICAgaWYgKHN0b3ApIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzEwLDcgKzMxMCw3IEBACiAgICAgICAgICAgICBDb250cm9scy5kb25lID0gdHJ1ZTsKICAgICAgICAgICAgIHN5bmNocm9uaXplZChDb250cm9scy5yZWFkeUxvY2spIHsKICAgICAgICAgICAgICAgICAvL05vdGlmeSB0aGUgY2xpZW50IHRvIGNoZWNrIHRoZSByZXN1bHRzCi0gICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLm5vdGlmeSgpOyAKKyAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2subm90aWZ5KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvamF2YWVlLWludGVncmF0aW9uL3N0YW5kYWxvbmUtcmVzb3VyY2UtYWRhcHRlci1hcy1iZWFuLWFyY2hpdmUvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhCmluZGV4IDEzOGU5MWIuLjI4YzE3ZWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9qYXZhZWUtaW50ZWdyYXRpb24vc3RhbmRhbG9uZS1yZXNvdXJjZS1hZGFwdGVyLWFzLWJlYW4tYXJjaGl2ZS9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhCkBAIC0zNiw4ICszNiw4IEBACiAgICAgcHVibGljIGludCBicmFuY2hRdWFsaWZpZXI7CiAgICAgcHVibGljIGludCBnbG9iYWxUeElEOwogCi0gICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEdUUklEU0laRT0gNjQ7IAotICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhCUVVBTFNJWkU9IDY0OyAKKyAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYR1RSSURTSVpFPSA2NDsKKyAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYQlFVQUxTSVpFPSA2NDsKIAogICAgIHB1YmxpYyBYSUQoKSB7CiAgICAgICAgIGludCBmb28gPSBJRCsrOwpAQCAtNTUsMTAgKzU1LDEwIEBACiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAgICAgICAgICAgICAgICAvLyBJdCBjYW4ndCBiZSBlcXVhbAogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIG90aGVyID0gKFhJRClvOyAgICAgICAgICAgICAgICAgICAvLyBUaGUgb3RoZXIgWElELCBub3cgcHJvcGVybHkgY2FzdAotICAgICAgICAKLSAgICAgICAgaWYgKHRoaXMuZm9ybWF0SUQgPT0gb3RoZXIuZm9ybWF0SUQgCisKKyAgICAgICAgaWYgKHRoaXMuZm9ybWF0SUQgPT0gb3RoZXIuZm9ybWF0SUQKICAgICAgICAgICAgICAgICAmJiB0aGlzLmJyYW5jaFF1YWxpZmllciA9PSBvdGhlci5icmFuY2hRdWFsaWZpZXIKICAgICAgICAgICAgICAgICAmJiB0aGlzLmdsb2JhbFR4SUQgPT0gb3RoZXIuZ2xvYmFsVHhJRCkgewogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC05OCw3ICs5OCw3IEBACiAgICAgICAgICAgICAgICAgImZvcm1hdElEKCIgICAgICsgZm9ybWF0SUQgICAgICsgIiksICIgKwogICAgICAgICAgICAgICAgICJicmFuY2hRdWFsaWZpZXIgKCIgKyBicmFuY2hRdWFsaWZpZXIgKyAiKSwgIiArCiAgICAgICAgICAgICAgICAgImdsb2JhbFR4SUQoIiArIGdsb2JhbFR4SUQgKyAiKX0iKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIHM7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvbWFuYWdlZC1iZWFucy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvbWFuYWdlZC1iZWFucy9idWlsZC54bWwKaW5kZXggNTQ3NmMzNC4uOWFlYzFjNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL21hbmFnZWQtYmVhbnMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9tYW5hZ2VkLWJlYW5zL2J1aWxkLnhtbApAQCAtODYsMTUgKzg2LDE1IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4gVXNhZ2U6Ci0JCWFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgbWFuYWdlZGJlYW5zIHRlc3RzKQotCQlhbnQgY2xlYW4gKGNsZWFucyBhbGwgdGhlIG1hbmFnZWRiZWFucyB0ZXN0cykKLQkJYW50IGJ1aWxkIChidWlsZHMgYWxsIHRoZSBtYW5hZ2VkYmVhbnMgdGVzdHMpCi0JCWFudCBzZXR1cCAoc2V0cyB1cCBhbGwgcmVzb3VyY2VzIGZvciBtYW5hZ2VkYmVhbnMgdGVzdHMpCi0JCWFudCBkZXBsb3kgKGRlcGxveXMgYWxsIHRoZSBtYW5hZ2VkYmVhbnMgYXBwcykKLQkJYW50IHJ1biAoRXhlY3V0ZXMgYWxsIHRoZSBtYW5hZ2VkYmVhbnMgdGVzdHMpCi0JCWFudCB1bmRlcGxveSAodW5kZXBsb3lzIGFsbCB0aGUgIG1hbmFnZWRiZWFucyBhcHBzKQotCQlhbnQgdW5zZXR1cCAodW5zZXRzIGFsbCByZXNvdXJjZXMgZm9yIG1hbmFnZWRiZWFucyB0ZXN0cykKLQk8L2VjaG8+CisgICAgPGVjaG8+IFVzYWdlOgorICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIG1hbmFnZWRiZWFucyB0ZXN0cykKKyAgICAgICAgYW50IGNsZWFuIChjbGVhbnMgYWxsIHRoZSBtYW5hZ2VkYmVhbnMgdGVzdHMpCisgICAgICAgIGFudCBidWlsZCAoYnVpbGRzIGFsbCB0aGUgbWFuYWdlZGJlYW5zIHRlc3RzKQorICAgICAgICBhbnQgc2V0dXAgKHNldHMgdXAgYWxsIHJlc291cmNlcyBmb3IgbWFuYWdlZGJlYW5zIHRlc3RzKQorICAgICAgICBhbnQgZGVwbG95IChkZXBsb3lzIGFsbCB0aGUgbWFuYWdlZGJlYW5zIGFwcHMpCisgICAgICAgIGFudCBydW4gKEV4ZWN1dGVzIGFsbCB0aGUgbWFuYWdlZGJlYW5zIHRlc3RzKQorICAgICAgICBhbnQgdW5kZXBsb3kgKHVuZGVwbG95cyBhbGwgdGhlICBtYW5hZ2VkYmVhbnMgYXBwcykKKyAgICAgICAgYW50IHVuc2V0dXAgKHVuc2V0cyBhbGwgcmVzb3VyY2VzIGZvciBtYW5hZ2VkYmVhbnMgdGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL21hbmFnZWQtYmVhbnMvbWFuYWdlZC1iZWFuLWxpZmVjeWNsZS1wb2x5bW9ycGhpc20vV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL21hbmFnZWQtYmVhbnMvbWFuYWdlZC1iZWFuLWxpZmVjeWNsZS1wb2x5bW9ycGhpc20vV2ViVGVzdC5qYXZhCmluZGV4IGU3MzZiOTcuLjFlZTA3NmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9tYW5hZ2VkLWJlYW5zL21hbmFnZWQtYmVhbi1saWZlY3ljbGUtcG9seW1vcnBoaXNtL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvbWFuYWdlZC1iZWFucy9tYW5hZ2VkLWJlYW4tbGlmZWN5Y2xlLXBvbHltb3JwaGlzbS9XZWJUZXN0LmphdmEKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgQFdlYlNlcnZsZXQiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC01NCw3ICs1NCw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVNUX05BTUUgKyAiIHRlc3QgZmFpbGVkIik7CkBAIC02NCw3ICs2NCw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgICAgICAgICAgKyAiL215dXJsIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvcGVuaW5nIGNvbm5lY3Rpb24gdG8gIiArIHVybCk7CkBAIC0xMDMsMTAgKzEwMywxMCBAQAogICAgICAgICAgICAgaWYgKEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL21hbmFnZWQtYmVhbnMvbWFuYWdlZC1iZWFuLWxpZmVjeWNsZS1wb2x5bW9ycGhpc20vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9tYW5hZ2VkLWJlYW5zL21hbmFnZWQtYmVhbi1saWZlY3ljbGUtcG9seW1vcnBoaXNtL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYzBmMjBiYi4uYjY1NzA1ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL21hbmFnZWQtYmVhbnMvbWFuYWdlZC1iZWFuLWxpZmVjeWNsZS1wb2x5bW9ycGhpc20vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvbWFuYWdlZC1iZWFucy9tYW5hZ2VkLWJlYW4tbGlmZWN5Y2xlLXBvbHltb3JwaGlzbS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LW1hbmFnZWQtYmVhbi1saWZlY3ljbGUtcG9seW1vcnBoaXNtIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvbWFuYWdlZC1iZWFucy9tYW5hZ2VkLWJlYW4tbGlmZWN5Y2xlLXBvbHltb3JwaGlzbS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvbWFuYWdlZC1iZWFucy9tYW5hZ2VkLWJlYW4tbGlmZWN5Y2xlLXBvbHltb3JwaGlzbS9idWlsZC54bWwKaW5kZXggMGE3MmUxMi4uMjRhNGM4ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL21hbmFnZWQtYmVhbnMvbWFuYWdlZC1iZWFuLWxpZmVjeWNsZS1wb2x5bW9ycGhpc20vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9tYW5hZ2VkLWJlYW5zL21hbmFnZWQtYmVhbi1saWZlY3ljbGUtcG9seW1vcnBoaXNtL2J1aWxkLnhtbApAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NywyMyArNDcsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NSwxMCArNzUsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvbWFuYWdlZC1iZWFucy9tYW5hZ2VkLWJlYW4tbGlmZWN5Y2xlLXBvbHltb3JwaGlzbS9zZXJ2bGV0L2NvbS90ZXN0cy9UZXN0QXJvdW5kSW52b2tlSW50ZXJjZXB0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9tYW5hZ2VkLWJlYW5zL21hbmFnZWQtYmVhbi1saWZlY3ljbGUtcG9seW1vcnBoaXNtL3NlcnZsZXQvY29tL3Rlc3RzL1Rlc3RBcm91bmRJbnZva2VJbnRlcmNlcHRvci5qYXZhCmluZGV4IGEzZjcyYmMuLmQxNjdjOTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9tYW5hZ2VkLWJlYW5zL21hbmFnZWQtYmVhbi1saWZlY3ljbGUtcG9seW1vcnBoaXNtL3NlcnZsZXQvY29tL3Rlc3RzL1Rlc3RBcm91bmRJbnZva2VJbnRlcmNlcHRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9tYW5hZ2VkLWJlYW5zL21hbmFnZWQtYmVhbi1saWZlY3ljbGUtcG9seW1vcnBoaXNtL3NlcnZsZXQvY29tL3Rlc3RzL1Rlc3RBcm91bmRJbnZva2VJbnRlcmNlcHRvci5qYXZhCkBAIC0yNiw3ICsyNiw3IEBACiAgICAgICAgIGFyb3VuZEludm9rZUNvdW50ID0gMDsKICAgICB9CiAKLSAgIEBBcm91bmRJbnZva2UgCisgICBAQXJvdW5kSW52b2tlCiAgICBwdWJsaWMgT2JqZWN0IHRlc3RNZXRob2QoSW52b2NhdGlvbkNvbnRleHQgY3R4KSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0QXJvdW5kSW52b2tlSW50ZXJjZXB0b3I6OiBhcm91bmRJbnZva2UgY2FsbGVkIC0gdGFyZ2V0OiIgKyBjdHguZ2V0VGFyZ2V0KCkgKyAiICwgcGFyYW1zOiIrIGN0eC5nZXRQYXJhbWV0ZXJzKCkpOwogICAgICAgICBhcm91bmRJbnZva2VDb3VudCArKzsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9tYW5hZ2VkLWJlYW5zL21hbmFnZWQtYmVhbi1saWZlY3ljbGUtcG9seW1vcnBoaXNtL3NlcnZsZXQvY29tL3Rlc3RzL1Rlc3RNYW5hZ2VkQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL21hbmFnZWQtYmVhbnMvbWFuYWdlZC1iZWFuLWxpZmVjeWNsZS1wb2x5bW9ycGhpc20vc2VydmxldC9jb20vdGVzdHMvVGVzdE1hbmFnZWRCZWFuLmphdmEKaW5kZXggYTI4YTcyZC4uZTA5M2JlYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL21hbmFnZWQtYmVhbnMvbWFuYWdlZC1iZWFuLWxpZmVjeWNsZS1wb2x5bW9ycGhpc20vc2VydmxldC9jb20vdGVzdHMvVGVzdE1hbmFnZWRCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL21hbmFnZWQtYmVhbnMvbWFuYWdlZC1iZWFuLWxpZmVjeWNsZS1wb2x5bW9ycGhpc20vc2VydmxldC9jb20vdGVzdHMvVGVzdE1hbmFnZWRCZWFuLmphdmEKQEAgLTY0LDcgKzY0LDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldFBvc3RDb25zdHJ1Y3RNZXNzYWdlKCkgewogICAgICAgICByZXR1cm4gcG9zdENvbnN0cnVjdE1lc3NhZ2U7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBnZXRQcmVEZXN0cm95TWVzc2FnZSgpIHsKICAgICAgICAgcmV0dXJuIHByZURlc3Ryb3lNZXNzYWdlOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9tYW5hZ2VkLWJlYW5zL21hbmFnZWQtYmVhbi1saWZlY3ljbGUtcG9seW1vcnBoaXNtL3NlcnZsZXQvY29tL3Rlc3RzL1Rlc3RNYW5hZ2VkQmVhbkV4dGVuc2lvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL21hbmFnZWQtYmVhbnMvbWFuYWdlZC1iZWFuLWxpZmVjeWNsZS1wb2x5bW9ycGhpc20vc2VydmxldC9jb20vdGVzdHMvVGVzdE1hbmFnZWRCZWFuRXh0ZW5zaW9uLmphdmEKaW5kZXggOWQ3MWQ1Ny4uMDE0YzlmZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL21hbmFnZWQtYmVhbnMvbWFuYWdlZC1iZWFuLWxpZmVjeWNsZS1wb2x5bW9ycGhpc20vc2VydmxldC9jb20vdGVzdHMvVGVzdE1hbmFnZWRCZWFuRXh0ZW5zaW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL21hbmFnZWQtYmVhbnMvbWFuYWdlZC1iZWFuLWxpZmVjeWNsZS1wb2x5bW9ycGhpc20vc2VydmxldC9jb20vdGVzdHMvVGVzdE1hbmFnZWRCZWFuRXh0ZW5zaW9uLmphdmEKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHByZURlc3Ryb3lNZXNzYWdlKTsKICAgICB9CiAKLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICAgICAgIHJldHVybiBUT1NUUklOR19FWFQ7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvbWFuYWdlZC1iZWFucy9tYW5hZ2VkLWJlYW4tdmlhLXJlc291cmNlLWluamVjdGlvbi9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvbWFuYWdlZC1iZWFucy9tYW5hZ2VkLWJlYW4tdmlhLXJlc291cmNlLWluamVjdGlvbi9XZWJUZXN0LmphdmEKaW5kZXggNmEyOGEwOC4uY2M4NTA3ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL21hbmFnZWQtYmVhbnMvbWFuYWdlZC1iZWFuLXZpYS1yZXNvdXJjZS1pbmplY3Rpb24vV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9tYW5hZ2VkLWJlYW5zL21hbmFnZWQtYmVhbi12aWEtcmVzb3VyY2UtaW5qZWN0aW9uL1dlYlRlc3QuamF2YQpAQCAtNDIsNyArNDIsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBAV2ViU2VydmxldCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTUxLDcgKzUxLDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKQEAgLTYxLDcgKzYxLDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICArICIvbXl1cmwiOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9wZW5pbmcgY29ubmVjdGlvbiB0byAiICsgdXJsKTsKQEAgLTEwMCwxMCArMTAwLDEwIEBACiAgICAgICAgICAgICBpZiAoRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvbWFuYWdlZC1iZWFucy9tYW5hZ2VkLWJlYW4tdmlhLXJlc291cmNlLWluamVjdGlvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL21hbmFnZWQtYmVhbnMvbWFuYWdlZC1iZWFuLXZpYS1yZXNvdXJjZS1pbmplY3Rpb24vYnVpbGQucHJvcGVydGllcwppbmRleCA5MWFiOTgzLi5iNWE3ZjMzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvbWFuYWdlZC1iZWFucy9tYW5hZ2VkLWJlYW4tdmlhLXJlc291cmNlLWluamVjdGlvbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9tYW5hZ2VkLWJlYW5zL21hbmFnZWQtYmVhbi12aWEtcmVzb3VyY2UtaW5qZWN0aW9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL21hbmFnZWQtYmVhbnMvbWFuYWdlZC1iZWFuLXZpYS1yZXNvdXJjZS1pbmplY3Rpb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL21hbmFnZWQtYmVhbnMvbWFuYWdlZC1iZWFuLXZpYS1yZXNvdXJjZS1pbmplY3Rpb24vYnVpbGQueG1sCmluZGV4IDgzYWQ2NjYuLjA2OTEyMTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9tYW5hZ2VkLWJlYW5zL21hbmFnZWQtYmVhbi12aWEtcmVzb3VyY2UtaW5qZWN0aW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvbWFuYWdlZC1iZWFucy9tYW5hZ2VkLWJlYW4tdmlhLXJlc291cmNlLWluamVjdGlvbi9idWlsZC54bWwKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDcsMjMgKzQ3LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzUsMTAgKzc1LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL21hbmFnZWQtYmVhbnMvbWFuYWdlZC1iZWFuLXZpYS1yZXNvdXJjZS1pbmplY3Rpb24vc2VydmxldC9jb20vdGVzdHMvVGVzdEFyb3VuZEludm9rZUludGVyY2VwdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvbWFuYWdlZC1iZWFucy9tYW5hZ2VkLWJlYW4tdmlhLXJlc291cmNlLWluamVjdGlvbi9zZXJ2bGV0L2NvbS90ZXN0cy9UZXN0QXJvdW5kSW52b2tlSW50ZXJjZXB0b3IuamF2YQppbmRleCA1OTA0MzFkLi5kNWVlYjdjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvbWFuYWdlZC1iZWFucy9tYW5hZ2VkLWJlYW4tdmlhLXJlc291cmNlLWluamVjdGlvbi9zZXJ2bGV0L2NvbS90ZXN0cy9UZXN0QXJvdW5kSW52b2tlSW50ZXJjZXB0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvbWFuYWdlZC1iZWFucy9tYW5hZ2VkLWJlYW4tdmlhLXJlc291cmNlLWluamVjdGlvbi9zZXJ2bGV0L2NvbS90ZXN0cy9UZXN0QXJvdW5kSW52b2tlSW50ZXJjZXB0b3IuamF2YQpAQCAtMjYsNyArMjYsNyBAQAogICAgICAgICBhcm91bmRJbnZva2VDb3VudCA9IDA7CiAgICAgfQogCi0gICBAQXJvdW5kSW52b2tlIAorICAgQEFyb3VuZEludm9rZQogICAgcHVibGljIE9iamVjdCB0ZXN0TWV0aG9kKEludm9jYXRpb25Db250ZXh0IGN0eCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdEFyb3VuZEludm9rZUludGVyY2V0cHI6OiBhcm91bmRJbnZva2UgY2FsbGVkIC0gdGFyZ2V0OiIgKyBjdHguZ2V0VGFyZ2V0KCkgKyAiICwgcGFyYW1zOiIrIGN0eC5nZXRQYXJhbWV0ZXJzKCkpOwogICAgICAgICBhcm91bmRJbnZva2VDb3VudCArKzsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9tYW5hZ2VkLWJlYW5zL21hbmFnZWQtYmVhbi12aWEtcmVzb3VyY2UtaW5qZWN0aW9uL3NlcnZsZXQvY29tL3Rlc3RzL1Rlc3RNYW5hZ2VkQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL21hbmFnZWQtYmVhbnMvbWFuYWdlZC1iZWFuLXZpYS1yZXNvdXJjZS1pbmplY3Rpb24vc2VydmxldC9jb20vdGVzdHMvVGVzdE1hbmFnZWRCZWFuLmphdmEKaW5kZXggY2Y0OWNiMi4uYzMxOWViMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL21hbmFnZWQtYmVhbnMvbWFuYWdlZC1iZWFuLXZpYS1yZXNvdXJjZS1pbmplY3Rpb24vc2VydmxldC9jb20vdGVzdHMvVGVzdE1hbmFnZWRCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL21hbmFnZWQtYmVhbnMvbWFuYWdlZC1iZWFuLXZpYS1yZXNvdXJjZS1pbmplY3Rpb24vc2VydmxldC9jb20vdGVzdHMvVGVzdE1hbmFnZWRCZWFuLmphdmEKQEAgLTE2LDcgKzE2LDcgQEAKIAogcGFja2FnZSBjb20udGVzdHM7CiAKLS8vU2ltcGxlIFRlc3RCZWFuIHRvIHRlc3QgQ0RJLiAKKy8vU2ltcGxlIFRlc3RCZWFuIHRvIHRlc3QgQ0RJLgogLy9UaGlzIGJlYW4gaW1wbGVtZW50cyBTZXJpYWxpemFibGUgYXMgaXQgbmVlZHMgdG8gYmUgcGxhY2VkIGludG8gYSBTdGF0ZWZ1bCBCZWFuCiBAamFrYXJ0YS5hbm5vdGF0aW9uLk1hbmFnZWRCZWFuCiBwdWJsaWMgY2xhc3MgVGVzdE1hbmFnZWRCZWFuIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9tYW5hZ2VkLWJlYW5zL21hbmFnZWQtYmVhbi12aWEtcmVzb3VyY2UtaW5qZWN0aW9uL3NlcnZsZXQvY29tL3Rlc3RzL1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvbWFuYWdlZC1iZWFucy9tYW5hZ2VkLWJlYW4tdmlhLXJlc291cmNlLWluamVjdGlvbi9zZXJ2bGV0L2NvbS90ZXN0cy9UZXN0U2VydmxldC5qYXZhCmluZGV4IDZhZWM4NGUuLmNlMjI2NjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9tYW5hZ2VkLWJlYW5zL21hbmFnZWQtYmVhbi12aWEtcmVzb3VyY2UtaW5qZWN0aW9uL3NlcnZsZXQvY29tL3Rlc3RzL1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL21hbmFnZWQtYmVhbnMvbWFuYWdlZC1iZWFuLXZpYS1yZXNvdXJjZS1pbmplY3Rpb24vc2VydmxldC9jb20vdGVzdHMvVGVzdFNlcnZsZXQuamF2YQpAQCAtNTAsNyArNTAsNyBAQAogICAgIHByaXZhdGUgU3RyaW5nIHRlc3RPdmVycmlkZGVuTWV0aG9kcygpIHsKICAgICAgICAgU3RyaW5nIHMgPSAiIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0b1N0cmluZyByZXR1cm5lZDoiICt0ZXN0UmVzb3VyY2UudG9TdHJpbmcoKSk7Ci0gICAgICAgIGlmICghdGVzdFJlc291cmNlLnRvU3RyaW5nKCkuZXF1YWxzKFRlc3RNYW5hZ2VkQmVhbi5UT1NUUklORykpIAorICAgICAgICBpZiAoIXRlc3RSZXNvdXJjZS50b1N0cmluZygpLmVxdWFscyhUZXN0TWFuYWdlZEJlYW4uVE9TVFJJTkcpKQogICAgICAgICAgICAgcyArPSAiVGVzdE1hbmFnZWRCZWFuIG9idGFpbmVkIHZpYSBAUmVzb3VyY2UgdG9TdHJpbmcgbWV0aG9kIGludm9jYXRpb24gZmFpbGVkIjsKICAgICAgICAgcmV0dXJuIHM7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL29wZW4taXNzdWVzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9vcGVuLWlzc3Vlcy9idWlsZC54bWwKaW5kZXggMzQ4OGFlOC4uMWE2Mzc2MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL29wZW4taXNzdWVzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvb3Blbi1pc3N1ZXMvYnVpbGQueG1sCkBAIC04NSwxNSArODUsMTUgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPiBVc2FnZToKLQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBvcGVuaXNzdWVzIHRlc3RzKQotCQlhbnQgY2xlYW4gKGNsZWFucyBhbGwgdGhlIG9wZW5pc3N1ZXMgdGVzdHMpCi0JCWFudCBidWlsZCAoYnVpbGRzIGFsbCB0aGUgb3Blbmlzc3VlcyB0ZXN0cykKLQkJYW50IHNldHVwIChzZXRzIHVwIGFsbCByZXNvdXJjZXMgZm9yIG9wZW5pc3N1ZXMgdGVzdHMpCi0JCWFudCBkZXBsb3kgKGRlcGxveXMgYWxsIHRoZSBvcGVuaXNzdWVzIGFwcHMpCi0JCWFudCBydW4gKEV4ZWN1dGVzIGFsbCB0aGUgb3Blbmlzc3VlcyB0ZXN0cykKLQkJYW50IHVuZGVwbG95ICh1bmRlcGxveXMgYWxsIHRoZSAgb3Blbmlzc3VlcyBhcHBzKQotCQlhbnQgdW5zZXR1cCAodW5zZXRzIGFsbCByZXNvdXJjZXMgZm9yIG9wZW5pc3N1ZXMgdGVzdHMpCi0JPC9lY2hvPgorICAgIDxlY2hvPiBVc2FnZToKKyAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBvcGVuaXNzdWVzIHRlc3RzKQorICAgICAgICBhbnQgY2xlYW4gKGNsZWFucyBhbGwgdGhlIG9wZW5pc3N1ZXMgdGVzdHMpCisgICAgICAgIGFudCBidWlsZCAoYnVpbGRzIGFsbCB0aGUgb3Blbmlzc3VlcyB0ZXN0cykKKyAgICAgICAgYW50IHNldHVwIChzZXRzIHVwIGFsbCByZXNvdXJjZXMgZm9yIG9wZW5pc3N1ZXMgdGVzdHMpCisgICAgICAgIGFudCBkZXBsb3kgKGRlcGxveXMgYWxsIHRoZSBvcGVuaXNzdWVzIGFwcHMpCisgICAgICAgIGFudCBydW4gKEV4ZWN1dGVzIGFsbCB0aGUgb3Blbmlzc3VlcyB0ZXN0cykKKyAgICAgICAgYW50IHVuZGVwbG95ICh1bmRlcGxveXMgYWxsIHRoZSAgb3Blbmlzc3VlcyBhcHBzKQorICAgICAgICBhbnQgdW5zZXR1cCAodW5zZXRzIGFsbCByZXNvdXJjZXMgZm9yIG9wZW5pc3N1ZXMgdGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL29zZ2ktY2RpL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9vc2dpLWNkaS9idWlsZC54bWwKaW5kZXggYmMwNTg4Zi4uMGEyMWRhMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL29zZ2ktY2RpL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvb3NnaS1jZGkvYnVpbGQueG1sCkBAIC04MiwxNSArODIsMTUgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPiBVc2FnZToKLQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBvc2dpLWNkaSB0ZXN0cykKLQkJYW50IGNsZWFuIChjbGVhbnMgYWxsIHRoZSBvc2dpLWNkaSB0ZXN0cykKLQkJYW50IGJ1aWxkIChidWlsZHMgYWxsIHRoZSBvc2dpLWNkaSB0ZXN0cykKLQkJYW50IHNldHVwIChzZXRzIHVwIGFsbCByZXNvdXJjZXMgZm9yIG9zZ2ktY2RpIHRlc3RzKQotCQlhbnQgZGVwbG95IChkZXBsb3lzIGFsbCB0aGUgb3NnaS1jZGkgYXBwcykKLQkJYW50IHJ1biAoRXhlY3V0ZXMgYWxsIHRoZSBvc2dpLWNkaSB0ZXN0cykKLQkJYW50IHVuZGVwbG95ICh1bmRlcGxveXMgYWxsIHRoZSAgb3NnaS1jZGkgYXBwcykKLQkJYW50IHVuc2V0dXAgKHVuc2V0cyBhbGwgcmVzb3VyY2VzIGZvciBvc2dpLWNkaSB0ZXN0cykKLQk8L2VjaG8+CisgICAgPGVjaG8+IFVzYWdlOgorICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIG9zZ2ktY2RpIHRlc3RzKQorICAgICAgICBhbnQgY2xlYW4gKGNsZWFucyBhbGwgdGhlIG9zZ2ktY2RpIHRlc3RzKQorICAgICAgICBhbnQgYnVpbGQgKGJ1aWxkcyBhbGwgdGhlIG9zZ2ktY2RpIHRlc3RzKQorICAgICAgICBhbnQgc2V0dXAgKHNldHMgdXAgYWxsIHJlc291cmNlcyBmb3Igb3NnaS1jZGkgdGVzdHMpCisgICAgICAgIGFudCBkZXBsb3kgKGRlcGxveXMgYWxsIHRoZSBvc2dpLWNkaSBhcHBzKQorICAgICAgICBhbnQgcnVuIChFeGVjdXRlcyBhbGwgdGhlIG9zZ2ktY2RpIHRlc3RzKQorICAgICAgICBhbnQgdW5kZXBsb3kgKHVuZGVwbG95cyBhbGwgdGhlICBvc2dpLWNkaSBhcHBzKQorICAgICAgICBhbnQgdW5zZXR1cCAodW5zZXRzIGFsbCByZXNvdXJjZXMgZm9yIG9zZ2ktY2RpIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9vc2dpLWNkaS9jb21tb24ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL29zZ2ktY2RpL2NvbW1vbi54bWwKaW5kZXggZjM0MmQ4Ny4uOTJmNTVlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL29zZ2ktY2RpL2NvbW1vbi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL29zZ2ktY2RpL2NvbW1vbi54bWwKQEAgLTE3LDI0ICsxNywyNCBAQAogLS0+CiAKIDwhLS0KLSAgICBUaGlzIGlzIHRoZSB0b3AgbGV2ZWwgYnVpbGQgZmlsZSB0aGF0IHNob3VsZCBiZSAKLSAgICBpbXBvcnRlZCBpbnRvIGFsbCB0aGUgbGVhZiBsZXZlbCBidWlsZCBmaWxlcyAKKyAgICBUaGlzIGlzIHRoZSB0b3AgbGV2ZWwgYnVpbGQgZmlsZSB0aGF0IHNob3VsZCBiZQorICAgIGltcG9ydGVkIGludG8gYWxsIHRoZSBsZWFmIGxldmVsIGJ1aWxkIGZpbGVzCiAtLT4KIAogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPCEtLSBUYXJnZXRzIHRvIGNsZWFuIGNsYXNzIGZpbGVzIGFuZCBqYXJzIGZpbGVzIC0tPgotPCEtLSAKLVZhcmlhYmxlcyB1c2VkOiAKLSAgICAke2J1aWxkLmNsYXNzZXMuZGlyfSAKKzwhLS0KK1ZhcmlhYmxlcyB1c2VkOgorICAgICR7YnVpbGQuY2xhc3Nlcy5kaXJ9CiAgICAgJHthc3NlbWJsZS5kaXJ9CiAtLT4KIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIDx0YXJnZXQgbmFtZT0iY2xlYW4tY2xhc3Nlcy1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICA8ZWNobyBtZXNzYWdlPSJjb21tb24ueG1sOiBDbGVhbmluZyB0ZXN0IHNvdXJjZSBmaWxlczogJHtidWlsZC5iYXNlLmRpcn0iIAorICAgIDxlY2hvIG1lc3NhZ2U9ImNvbW1vbi54bWw6IENsZWFuaW5nIHRlc3Qgc291cmNlIGZpbGVzOiAke2J1aWxkLmJhc2UuZGlyfSIKICAgICAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuYmFzZS5kaXJ9Ii8+CiA8L3RhcmdldD4KLSAgICAKKwogPHRhcmdldCBuYW1lPSJjbGVhbi1qYXJzLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICA8ZGVsZXRlIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+CiA8L3RhcmdldD4KQEAgLTQ2LDkgKzQ2LDkgQEAKIAogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPCEtLSBUYXJnZXQgdG8gY29tcGlsZSB0aGUgamF2YSBzb3VyY2UgZmlsZXMgLS0+Ci08IS0tIAotVmFyaWFibGVzIHVzZWQ6IAotICAgICR7YnVpbGQuY2xhc3Nlcy5kaXJ9IAorPCEtLQorVmFyaWFibGVzIHVzZWQ6CisgICAgJHtidWlsZC5jbGFzc2VzLmRpcn0KICAgICAke3MxYXN0ZXN0LmNsYXNzcGF0aH0KICAgICAke3NyY30KIC0tPgpAQCAtNzUsNyArNzUsNyBAQAogVmFyaWFibGVzIFVzZWQ6CiAgICAgJHt3YXIuZmlsZX0KICAgICAke2J1aWxkLmNsYXNzZXMuZGlyfQotICAgICR7YXBwbmFtZX0gICAgCisgICAgJHthcHBuYW1lfQogICAgICR7YXNzZW1ibGUuZGlyfQogICAgICR7d2ViLnhtbH0KICAgICAke2JlYW5zLnhtbH0KQEAgLTEwNiwxNyArMTA2LDE3IEBACiAKIDx0YXJnZXQgbmFtZT0icHVibGlzaC13YXItY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgIDxta2RpciBkaXI9IiR7YnVpbGQud2ViYXBwcy5kaXJ9Ii8+Ci0gIDxjb3B5IGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIiIAotICAgICAgICB0b2ZpbGU9IiR7YnVpbGQud2ViYXBwcy5kaXJ9LyR7YXBwbmFtZX0ud2FyIiAKKyAgPGNvcHkgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciIKKyAgICAgICAgdG9maWxlPSIke2J1aWxkLndlYmFwcHMuZGlyfS8ke2FwcG5hbWV9LndhciIKICAgICAgICAgb3ZlcndyaXRlPSJ0cnVlIiAvPgogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0iY2xlYW4td2ViYXBwcy1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC53ZWJhcHBzLmRpcn0iIHF1aWV0PSJ0cnVlIiAvPiAgCisgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQud2ViYXBwcy5kaXJ9IiBxdWlldD0idHJ1ZSIgLz4KIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImNsZWFyIj4KLSAgICA8ZGVsZXRlIGZpbGU9IiR7d2FyLmZpbGV9Ii8+ICAKKyAgICA8ZGVsZXRlIGZpbGU9IiR7d2FyLmZpbGV9Ii8+CiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJjb3B5LXRsZHMiIGlmPSJ0bGRzLWV4aXN0IiBkZXBlbmRzPSJjbGVhcix0ZXN0LXRsZHMtZXhpc3QiPgpAQCAtMTQ1LDEzICsxNDUsMTMgQEAKICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvY2xhc3NlcyIvPgogICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi9saWIiLz4KICAgPG1rZGlyIGRpcj0ibGliIi8+Ci0gIDxjb3B5IGZpbGU9IiR7Z2xhc3NmaXNoLXdlYi54bWx9IiAKKyAgPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtd2ViLnhtbH0iCiAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL2dsYXNzZmlzaC13ZWIueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgPGNvcHkgZmlsZT0iJHtzdW4td2ViLnhtbH0iIAorICA8Y29weSBmaWxlPSIke3N1bi13ZWIueG1sfSIKICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvc3VuLXdlYi54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICA8Y29weSBmaWxlPSIke3dlYmxvZ2ljLnhtbH0iIAorICA8Y29weSBmaWxlPSIke3dlYmxvZ2ljLnhtbH0iCiAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL3dlYmxvZ2ljLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gIDxjb3B5IGZpbGU9IiR7Z2xhc3NmaXNoLXJlc291cmNlcy54bWx9IiAKKyAgPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbH0iCiAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL2xpYiIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICAgIDxmaWxlc2V0IGRpcj0ibGliIj4KQEAgLTE1OSwzMiArMTU5LDMyIEBACiAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKiovKi56aXAiLz4KICAgICAgIDwvZmlsZXNldD4KICAgPC9jb3B5PgotICA8Y29weSBmaWxlPSIke3dlYnNlcnZpY2VzLnhtbH0iIAorICA8Y29weSBmaWxlPSIke3dlYnNlcnZpY2VzLnhtbH0iCiAgICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvd2Vic2VydmljZXMueG1sIgogICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgPGNvcHkgZmlsZT0iJHttYXBwaW5nZmlsZS5sb2NhdGlvbn0vJHttYXBwaW5nZmlsZS5uYW1lfSIgCisgIDxjb3B5IGZpbGU9IiR7bWFwcGluZ2ZpbGUubG9jYXRpb259LyR7bWFwcGluZ2ZpbGUubmFtZX0iCiAgICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wLyR7bWFwcGluZ2ZpbGUubmFtZX0iCiAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICA8Y29weSBmaWxlPSIke3dzZGxmaWxlLmxvY2F0aW9ufS8ke3dzZGxmaWxlLm5hbWV9IiAKKyAgPGNvcHkgZmlsZT0iJHt3c2RsZmlsZS5sb2NhdGlvbn0vJHt3c2RsZmlsZS5uYW1lfSIKICAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi93c2RsLyR7d3NkbGZpbGUubmFtZX0iCiAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICA8Y29weSBmaWxlPSIke3RhZ1BsdWdpbnMueG1sfSIgCisgIDxjb3B5IGZpbGU9IiR7dGFnUGx1Z2lucy54bWx9IgogICAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL3RhZ1BsdWdpbnMueG1sIgogICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgPGNvcHkgZmlsZT0iJHt3ZWIueG1sfSIgCisgIDxjb3B5IGZpbGU9IiR7d2ViLnhtbH0iCiAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL3dlYi54bWwiCiAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICAgIDxjb3B5IGZpbGU9IiR7cGVyc2lzdGVuY2UueG1sfSIgCisgICAgPGNvcHkgZmlsZT0iJHtwZXJzaXN0ZW5jZS54bWx9IgogICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi9jbGFzc2VzL01FVEEtSU5GL3BlcnNpc3RlbmNlLnhtbCIKICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gICA8Y29weSBmaWxlPSIke2JlYW5zLnhtbH0iIAorICAgPGNvcHkgZmlsZT0iJHtiZWFucy54bWx9IgogICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi9iZWFucy54bWwiCiAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICA8Y29weSBmaWxlPSIke2NvbnRleHQueG1sfSIKICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL01FVEEtSU5GL2NvbnRleHQueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgPGNvcHkgZmlsZT0iJHtjZGktZXh0ZW5zaW9uLnNlcnZpY2V9IgogICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi9jbGFzc2VzL01FVEEtSU5GL3NlcnZpY2VzL2pha2FydGEuZW50ZXJwcmlzZS5pbmplY3Quc3BpLkV4dGVuc2lvbiIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gICAgICAKKwogICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvY2xhc3NlcyI+CiAgICAgICA8ZmlsZXNldCBkaXI9IiR7d2FyLmNsYXNzZXN9Ij4KICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLmNsYXNzIi8+CkBAIC0yMjksMTAgKzIyOSwxMCBAQAogICAgICAgPGluY2x1ZGUgbmFtZT0iV0VCLUlORi9jbGFzc2VzL01FVEEtSU5GL3NlcnZpY2VzL2pha2FydGEuZW50ZXJwcmlzZS5pbmplY3Quc3BpLkV4dGVuc2lvbiIvPgogICAgICAgPGluY2x1ZGUgbmFtZT0iV0VCLUlORi9jbGFzc2VzL01FVEEtSU5GL3BlcnNpc3RlbmNlLnhtbCIvPgogICAgIDwvZmlsZXNldD4KLSAgPC9qYXI+ICAgICAgIAorICA8L2phcj4KICAgPGVjaG8gbWVzc2FnZT0iY3JlYXRlZCB3YXIgZmlsZSAke3dhci5maWxlfSIgbGV2ZWw9InZlcmJvc2UiLz4KLSAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4gCi0gIDxlY2hvIG1lc3NhZ2U9Im15IHdlYmNsaWVudCB3YXIgY2xhc3NlcyBhcmU6JHt3ZWJjbGllbnQud2FyLmNsYXNzZXN9IiAKKyAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KKyAgPGVjaG8gbWVzc2FnZT0ibXkgd2ViY2xpZW50IHdhciBjbGFzc2VzIGFyZToke3dlYmNsaWVudC53YXIuY2xhc3Nlc30iCiAgICAgICBsZXZlbD0idmVyYm9zZSIvPgogPC90YXJnZXQ+CiAKQEAgLTI0NCwxMyArMjQ0LDEzIEBACiAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL2xpYiIvPgogICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi9NRVRBLUlORiIvPgogICA8bWtkaXIgZGlyPSJsaWIiLz4KLSAgPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtd2ViLnhtbH0iIAorICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC13ZWIueG1sfSIKICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvZ2xhc3NmaXNoLXdlYi54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICA8Y29weSBmaWxlPSIke3N1bi13ZWIueG1sfSIgCisgIDxjb3B5IGZpbGU9IiR7c3VuLXdlYi54bWx9IgogICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi9zdW4td2ViLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gIDxjb3B5IGZpbGU9IiR7d2VibG9naWMueG1sfSIgCisgIDxjb3B5IGZpbGU9IiR7d2VibG9naWMueG1sfSIKICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvd2VibG9naWMueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbH0iIAorICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sfSIKICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvbGliIiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgICAgPGZpbGVzZXQgZGlyPSJsaWIiPgpAQCAtMjU4LDM2ICsyNTgsMzYgQEAKICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLnppcCIvPgogICAgICAgPC9maWxlc2V0PgogICA8L2NvcHk+Ci0gIDxjb3B5IGZpbGU9IiR7d2Vic2VydmljZXMueG1sfSIgCisgIDxjb3B5IGZpbGU9IiR7d2Vic2VydmljZXMueG1sfSIKICAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi93ZWJzZXJ2aWNlcy54bWwiCiAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICA8Y29weSBmaWxlPSIke21hcHBpbmdmaWxlLmxvY2F0aW9ufS8ke21hcHBpbmdmaWxlLm5hbWV9IiAKKyAgPGNvcHkgZmlsZT0iJHttYXBwaW5nZmlsZS5sb2NhdGlvbn0vJHttYXBwaW5nZmlsZS5uYW1lfSIKICAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvJHttYXBwaW5nZmlsZS5uYW1lfSIKICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gIDxjb3B5IGZpbGU9IiR7d3NkbGZpbGUubG9jYXRpb259LyR7d3NkbGZpbGUubmFtZX0iIAorICA8Y29weSBmaWxlPSIke3dzZGxmaWxlLmxvY2F0aW9ufS8ke3dzZGxmaWxlLm5hbWV9IgogICAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL3dzZGwvJHt3c2RsZmlsZS5uYW1lfSIKICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gIDxjb3B5IGZpbGU9IiR7dGFnUGx1Z2lucy54bWx9IiAKKyAgPGNvcHkgZmlsZT0iJHt0YWdQbHVnaW5zLnhtbH0iCiAgICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvdGFnUGx1Z2lucy54bWwiCiAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICA8Y29weSBmaWxlPSIke3dlYi54bWx9IiAKKyAgPGNvcHkgZmlsZT0iJHt3ZWIueG1sfSIKICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvd2ViLnhtbCIKICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gICAgPGNvcHkgZmlsZT0iJHtwZXJzaXN0ZW5jZS54bWx9IiAKKyAgICA8Y29weSBmaWxlPSIke3BlcnNpc3RlbmNlLnhtbH0iCiAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL2NsYXNzZXMvTUVUQS1JTkYvcGVyc2lzdGVuY2UueG1sIgogICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgIDxjb3B5IGZpbGU9IiR7YmVhbnMueG1sfSIgCisgICA8Y29weSBmaWxlPSIke2JlYW5zLnhtbH0iCiAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL2JlYW5zLnhtbCIKICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAKLSAgIDxjb3B5IGZpbGU9IiR7YnVuZGxlLmRlc2NyaXB0b3J9IiAKKyAgIDxjb3B5IGZpbGU9IiR7YnVuZGxlLmRlc2NyaXB0b3J9IgogICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi9jbGFzc2VzL01FVEEtSU5GL01BTklGRVNULk1GIgogICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgPGNvcHkgZmlsZT0iJHtjb250ZXh0LnhtbH0iCiAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9NRVRBLUlORi9jb250ZXh0LnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgIDxjb3B5IGZpbGU9IiR7Y2RpLWV4dGVuc2lvbi5zZXJ2aWNlfSIKICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvY2xhc3Nlcy9NRVRBLUlORi9zZXJ2aWNlcy9qYWthcnRhLmVudGVycHJpc2UuaW5qZWN0LnNwaS5FeHRlbnNpb24iIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICAgICAgCisKICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL2NsYXNzZXMiPgogICAgICAgPGZpbGVzZXQgZGlyPSIke3dhci5jbGFzc2VzfSI+CiAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKiovKi5jbGFzcyIvPgpAQCAtMzMyLDEwICszMzIsMTAgQEAKICAgICAgIDxpbmNsdWRlIG5hbWU9IldFQi1JTkYvY2xhc3Nlcy9NRVRBLUlORi9zZXJ2aWNlcy9qYWthcnRhLmVudGVycHJpc2UuaW5qZWN0LnNwaS5FeHRlbnNpb24iLz4KICAgICAgIDxpbmNsdWRlIG5hbWU9IldFQi1JTkYvY2xhc3Nlcy9NRVRBLUlORi9wZXJzaXN0ZW5jZS54bWwiLz4KICAgICA8L2ZpbGVzZXQ+Ci0gIDwvamFyPiAgICAgICAKKyAgPC9qYXI+CiAgIDxlY2hvIG1lc3NhZ2U9ImNyZWF0ZWQgV0FCIGZpbGUgJHt3YXIuZmlsZX0iIGxldmVsPSJ2ZXJib3NlIi8+Ci0gIDxkZWxldGUgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORiIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+IAotICA8ZWNobyBtZXNzYWdlPSJteSB3ZWJjbGllbnQgV0FCIGNsYXNzZXMgYXJlOiR7d2ViY2xpZW50Lndhci5jbGFzc2VzfSIgCisgIDxkZWxldGUgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORiIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CisgIDxlY2hvIG1lc3NhZ2U9Im15IHdlYmNsaWVudCBXQUIgY2xhc3NlcyBhcmU6JHt3ZWJjbGllbnQud2FyLmNsYXNzZXN9IgogICAgICAgbGV2ZWw9InZlcmJvc2UiLz4KIDwvdGFyZ2V0PgogCkBAIC0zNTQsMzUgKzM1NCwzNSBAQAogVmFyaWFibGVzIFVzZWQ6CiAgICAgJHtlamIuamFyfQogICAgICR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ci0gICAgJHtlamItamFyLnhtbH0gICAgCisgICAgJHtlamItamFyLnhtbH0KICAgICAke2JlYW5zLnhtbH0KLSAgICAke3BlcnNpc3RlbmNlLW9ybS54bWx9ICAgIAotICAgICR7c3VuLWVqYi1qYXIueG1sfSAgICAKLSAgICAke2dsYXNzZmlzaC1lamItamFyLnhtbH0gICAgCi0gICAgJHtzdW4tY21wLW1hcHBpbmdzLnhtbH0gICAgCi0gICAgJHttZXRhaW5mLmRpcn0gICAgCisgICAgJHtwZXJzaXN0ZW5jZS1vcm0ueG1sfQorICAgICR7c3VuLWVqYi1qYXIueG1sfQorICAgICR7Z2xhc3NmaXNoLWVqYi1qYXIueG1sfQorICAgICR7c3VuLWNtcC1tYXBwaW5ncy54bWx9CisgICAgJHttZXRhaW5mLmRpcn0KICAgICAke2VqYmphci5maWxlc30KICAgICAke2Ric2NoZW1hfQogLS0+CiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8dGFyZ2V0IG5hbWU9InBhY2thZ2UtZWpiamFyLWNvbW1vbiI+CiAgIDxkZWxldGUgZmlsZT0iJHtlamIuamFyfSIvPgotICA8ZWNobyBtZXNzYWdlPSJjb21tb24ueG1sOiBHZW5lcmF0aW5nIGVqYi1qYXIgaW5zaWRlIGJ1aWxkIGRpcmVjdG9yeSIgCisgIDxlY2hvIG1lc3NhZ2U9ImNvbW1vbi54bWw6IEdlbmVyYXRpbmcgZWpiLWphciBpbnNpZGUgYnVpbGQgZGlyZWN0b3J5IgogICAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KLSAgPGNvcHkgZmlsZT0iJHtlamItamFyLnhtbH0iIAorICA8Y29weSBmaWxlPSIke2VqYi1qYXIueG1sfSIKICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2VqYi1qYXIueG1sIgogICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICA8Y29weSBmaWxlPSIke3BlcnNpc3RlbmNlLW9ybS54bWx9IiAKKyAgPGNvcHkgZmlsZT0iJHtwZXJzaXN0ZW5jZS1vcm0ueG1sfSIKICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3BlcnNpc3RlbmNlLW9ybS54bWwiCiAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gIDxjb3B5IGZpbGU9IiR7d2Vic2VydmljZXMueG1sfSIgCisgIDxjb3B5IGZpbGU9IiR7d2Vic2VydmljZXMueG1sfSIKICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3dlYnNlcnZpY2VzLnhtbCIKICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgPGNvcHkgZmlsZT0iJHtzdW4tZWpiLWphci54bWx9IiAKKyAgPGNvcHkgZmlsZT0iJHtzdW4tZWpiLWphci54bWx9IgogICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sIgogICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC1lamItamFyLnhtbH0iIAorICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC1lamItamFyLnhtbH0iCiAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9nbGFzc2Zpc2gtZWpiLWphci54bWwiCiAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgIDxjb3B5IGZpbGU9IiR7Z2xhc3NmaXNoLXJlc291cmNlcy54bWx9IgpAQCAtNDA3LDQyICs0MDcsNDIgQEAKICAgICAgIDxpbmNsdWRlIG5hbWU9InN1bi1jbXAtbWFwcGluZ3MueG1sIi8+CiAgICAgICA8aW5jbHVkZSBuYW1lPSJiZWFucy54bWwiLz4KICAgICA8L21ldGFpbmY+Ci0gIDwvamFyPiAgICAgICAKKyAgPC9qYXI+CiAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgIDxkZWxldGUgZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vKi5kYnNjaGVtYSIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci08L3RhcmdldD4gIAorPC90YXJnZXQ+CiAKIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIDwhLS0gVGFyZ2V0IHRvIHBhY2thZ2UgdGhlIGFwcGNsaWVudCBhcHBsaWNhdGlvbiB0byBqYXIgZmlsZSAtLT4KIDwhLS0KIFZhcmlhYmxlcyBVc2VkOgogICAgICR7YXBwY2xpZW50Lmphcn0KLSAgICAke2FwcGNsaWVudGphci5jbGFzc2VzfSAgICAKLSAgICAke2FwcGNsaWVudGphci5maWxlc30gICAgCisgICAgJHthcHBjbGllbnRqYXIuY2xhc3Nlc30KKyAgICAke2FwcGNsaWVudGphci5maWxlc30KICAgICAke2J1aWxkLmNsYXNzZXMuZGlyfQotICAgICR7YXBwbGljYXRpb24tY2xpZW50LnhtbH0gICAgCi0gICAgJHtzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbH0gICAgCisgICAgJHthcHBsaWNhdGlvbi1jbGllbnQueG1sfQorICAgICR7c3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWx9CiAtLT4KIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIDx0YXJnZXQgbmFtZT0icGFja2FnZS1hcHBjbGllbnRqYXItY29tbW9uIj4KICAgPGRlbGV0ZSBmaWxlPSIke2FwcGNsaWVudC5qYXJ9Ii8+Ci0gIDxlY2hvIG1lc3NhZ2U9ImNvbW1vbi54bWw6IEdlbmVyYXRpbmcgYXBwY2xpZW50LWphciBpbnNpZGUgYnVpbGQgZGlyZWN0b3J5IiAKKyAgPGVjaG8gbWVzc2FnZT0iY29tbW9uLnhtbDogR2VuZXJhdGluZyBhcHBjbGllbnQtamFyIGluc2lkZSBidWlsZCBkaXJlY3RvcnkiCiAgICAgICBsZXZlbD0idmVyYm9zZSIvPgogICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgogICA8Y29weSBmaWxlPSIke2FwcGxpY2F0aW9uLWNsaWVudC54bWx9IgotICAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiIAorICAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiCiAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIKICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gIDxqYXIgamFyZmlsZT0iJHthcHBjbGllbnQuamFyfSIgYmFzZWRpcj0iJHthcHBjbGllbnRqYXIuZmlsZXN9IiAKLSAgICB1cGRhdGU9InRydWUiIGluY2x1ZGVzID0iJHthcHBjbGllbnRqYXIuY2xhc3Nlc30iIAotICAgIG1hbmlmZXN0PSIuL2NsaWVudC9NQU5JRkVTVC5NRiI+ICAgICAgICAgCisgIDxqYXIgamFyZmlsZT0iJHthcHBjbGllbnQuamFyfSIgYmFzZWRpcj0iJHthcHBjbGllbnRqYXIuZmlsZXN9IgorICAgIHVwZGF0ZT0idHJ1ZSIgaW5jbHVkZXMgPSIke2FwcGNsaWVudGphci5jbGFzc2VzfSIKKyAgICBtYW5pZmVzdD0iLi9jbGllbnQvTUFOSUZFU1QuTUYiPgogICAgIDxtZXRhaW5mIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiPgogICAgICAgPGluY2x1ZGUgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogICAgICAgPGluY2x1ZGUgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KICAgICA8L21ldGFpbmY+Ci0gIDwvamFyPiAgICAgICAKLTwvdGFyZ2V0PiAKKyAgPC9qYXI+Cis8L3RhcmdldD4KIAogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPCEtLSBUYXJnZXQgdG8gY3JlYXRlIHRoZSBlamIgYXBwbGljYXRpb24gamFyIGZpbGUgLS0+CkBAIC00NTMsNyArNDUzLDcgQEAKICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICA8cGFyYW0gbmFtZT0iZWpiLmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXIiLz4KICAgPC9hbnRjYWxsPgotPC90YXJnZXQ+ICAgICAKKzwvdGFyZ2V0PgogCiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8IS0tIFRhcmdldCB0byBjcmVhdGUgdGhlIGFwcGNsaWVudCBqYXIgZmlsZSAtLT4KQEAgLTQ2MSw5ICs0NjEsOSBAQAogPHRhcmdldCBuYW1lPSJhcHBjbGllbnQtamFyLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLWFwcGNsaWVudGphci1jb21tb24iPgotICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIAorICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiCiAgICAgICB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KLSAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmphciIgCisgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5qYXIiCiAgICAgICB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogICA8L2FudGNhbGw+CiA8L3RhcmdldD4KQEAgLTQ5MiwyMiArNDkyLDIyIEBACiA8dGFyZ2V0IG5hbWU9ImJ1aWxkLWVhci1jb21tb24iIGRlcGVuZHM9ImZpeEZpbGVzLHBhY2thZ2UtcGVyc2lzdGVuY2UtY29tbW9uLGVqYi1qYXItY29tbW9uLGFwcGNsaWVudC1qYXItY29tbW9uLHdlYmNsaWVudC13YXItY29tbW9uIj4KICAgPGRlbGV0ZSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS5lYXIiLz4KICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+Ci0gIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+ICAgCi0gIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIgIAlmYWlsb25lcnJvcj0iZmFsc2UiLz4gCi0gIDxjb3B5IGZpbGU9IiR7YXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiICAJZmFpbG9uZXJyb3I9ImZhbHNlIi8+IAorICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgorICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CisgIDxjb3B5IGZpbGU9IiR7YXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgIDxjb3B5IGZpbGU9IiR7Z2xhc3NmaXNoLXJlc291cmNlcy1lYXIueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIiAgZmlsdGVyaW5nPSJ0cnVlIi8+Ci0gIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIj4gCisgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIj4KICAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSI+CiAgICAgICA8aW5jbHVkZSBuYW1lPSIqLmphciIvPgogICAgICAgPGluY2x1ZGUgbmFtZT0iKi53YXIiLz4KICAgICA8L2ZpbGVzZXQ+CiAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSI+Ci0JPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotCTxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIvPgorICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KKyAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiLz4KICAgICAgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwiLz4KICAgICA8L2ZpbGVzZXQ+CiAgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5BUFNfSE9NRX0iIGluY2x1ZGVzPSJsaWIvcmVwb3J0ZXIuamFyIi8+Ci0gIDwvamFyPiAgICAgICAgCisgIDwvamFyPgogPC90YXJnZXQ+CiAKIApAQCAtNTE3LDIxICs1MTcsMjEgQEAKIDx0YXJnZXQgbmFtZT0iZWFyLWNvbW1vbiIgZGVwZW5kcz0iZml4RmlsZXMsaW5pdC1jb21tb24iPgogICA8ZGVsZXRlIGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LmVhciIvPgogICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KLSAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4gICAgCi0gIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIgIAlmYWlsb25lcnJvcj0iZmFsc2UiLz4gCisgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CisgIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtcmVzb3VyY2VzLWVhci54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiICBmaWx0ZXJpbmc9InRydWUiLz4KLSAgPGVhciBlYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiIAorICA8ZWFyIGVhcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIKICAgICBhcHB4bWw9IiR7YXBwbGljYXRpb24ueG1sfSI+CiAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgogICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KICAgICAgIDxpbmNsdWRlIG5hbWU9Iioud2FyIi8+CiAgICAgPC9maWxlc2V0PgogICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iPgotCTxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KKyAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiAgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sIi8+CiAgICAgPC9maWxlc2V0PgogICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuQVBTX0hPTUV9IiBpbmNsdWRlcz0ibGliL3JlcG9ydGVyLmphciIvPgotICA8L2Vhcj4gICAgICAgIAorICA8L2Vhcj4KIDwvdGFyZ2V0PgogCiAKQEAgLTU2MSwxNyArNTYxLDE3IEBACiAgIDxlY2hvIG1lc3NhZ2U9Ik9wZXJhbmQgJHtvcGVyYW5kLnByb3BzfSIgIGxldmVsPSJ2ZXJib3NlIi8+CiAgIDxlY2hvIG1lc3NhZ2U9ImFzYWRtaW4gJHthZG1pbi5jb21tYW5kfSAke2FzLnByb3BzfSAke29wZXJhbmQucHJvcHN9Ii8+CiAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9InRydWUiPgotICAgICAgICA8YXJnIGxpbmU9IiR7YWRtaW4uY29tbWFuZH0gJHthcy5wcm9wc30gJHtvcGVyYW5kLnByb3BzfSIgLz4gICAgICAgIAorICAgICAgICA8YXJnIGxpbmU9IiR7YWRtaW4uY29tbWFuZH0gJHthcy5wcm9wc30gJHtvcGVyYW5kLnByb3BzfSIgLz4KICAgICA8L2V4ZWM+CiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+Ci0gIDxlY2hvIG1lc3NhZ2U9IkRvaW5nIGFkbWluIHRhc2sgJHthZG1pbi5jb21tYW5kfSAoaWdub3JlIGZhaWx1cmVzKSIgCisgIDxlY2hvIG1lc3NhZ2U9IkRvaW5nIGFkbWluIHRhc2sgJHthZG1pbi5jb21tYW5kfSAoaWdub3JlIGZhaWx1cmVzKSIKICAgICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAgIDxlY2hvIG1lc3NhZ2U9Ik9wZXJhbmQgJHtvcGVyYW5kLnByb3BzfSIgIGxldmVsPSJ2ZXJib3NlIi8+CiAgIDxlY2hvIG1lc3NhZ2U9ImFzYWRtaW4gJHthZG1pbi5jb21tYW5kfSAke2FzLnByb3BzfSAke29wZXJhbmQucHJvcHN9Ii8+CiAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KLSAgICAgICAgPGFyZyBsaW5lPSIke2FkbWluLmNvbW1hbmR9ICR7YXMucHJvcHN9ICR7b3BlcmFuZC5wcm9wc30iIC8+ICAgICAgICAKKyAgICAgICAgPGFyZyBsaW5lPSIke2FkbWluLmNvbW1hbmR9ICR7YXMucHJvcHN9ICR7b3BlcmFuZC5wcm9wc30iIC8+CiAgICAgPC9leGVjPgogPC90YXJnZXQ+CiAKQEAgLTU3OSw3ICs1NzksNyBAQAogPCEtLSBUYXJnZXQgdG8gZXhlY3V0ZSBhIGJhdGNoZmlsZSBvZiBhc2FkbWluIGNvbW1hbmRzICAtLT4KIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIDx0YXJnZXQgbmFtZT0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgotICA8ZWNobyBtZXNzYWdlPSJEb2luZyBhZG1pbiBiYXRjaCB0YXNrICR7YWRtaW4uY29tbWFuZH0gLS1maWxlIiAKKyAgPGVjaG8gbWVzc2FnZT0iRG9pbmcgYWRtaW4gYmF0Y2ggdGFzayAke2FkbWluLmNvbW1hbmR9IC0tZmlsZSIKICAgICAgIGxldmVsPSJ2ZXJib3NlIi8+CiA8cHJvcGVydHkgbmFtZT0idXNlci5wYXNzd29yZC5maWxlIiB2YWx1ZT0iYXNhZG1pbnVzZXJwYXNzd29yZC50eHQiLz4KIDxlY2hvIGZpbGU9IiR7dXNlci5wYXNzd29yZC5maWxlfSIgYXBwZW5kPSJmYWxzZSI+CkBAIC01OTAsMTEgKzU5MCwxMSBAQAogPC9lY2hvPgogICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0idHJ1ZSI+CiAgICAgIDxhcmcgbGluZT0iLS11c2VyICR7YWRtaW4udXNlcn0gLS1wYXNzd29yZGZpbGUgJHt1c2VyLnBhc3N3b3JkLmZpbGV9IC0taG9zdCAke2FkbWluLmhvc3R9IC0tcG9ydCAke2FkbWluLnBvcnR9IC0tZWNobz10cnVlIC0tdGVyc2U9dHJ1ZSIvPgotICAgICA8YXJnIGxpbmU9Im11bHRpbW9kZSAtLWZpbGUgJHthc2FkbWluLmZpbGV9IiAvPiAgICAgICAgCisgICAgIDxhcmcgbGluZT0ibXVsdGltb2RlIC0tZmlsZSAke2FzYWRtaW4uZmlsZX0iIC8+CiAgIDwvZXhlYz4KICAgPGRlbGV0ZSBmaWxlPSIke3VzZXIucGFzc3dvcmQuZmlsZX0iIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogPC90YXJnZXQ+Ci0gCisKIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIAogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgpAQCAtNjE4LDcgKzYxOCw3IEBACiAgIDwvZXhlYz4KICAgPGRlbGV0ZSBmaWxlPSIke3VzZXIucGFzc3dvcmQuZmlsZX0iIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogPC90YXJnZXQ+Ci0gICAgIAorCiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8IS0tIFRhcmdldCB0byBkZWxldGUgdGhlIHVzZXIgaW4gZmlsZSByZWFsbSB0aGUgQXBwU2VydiAgLS0+CiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CkBAIC02MzQsNyArNjM0LDcgQEAKIDwvdGFyZ2V0PgogCiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci08IS0tIEoyRUUgQ29ubmVjdG9yIHJlbGF0ZWQgdGFyZ2V0cyAJCQkgICAgIAkgIC0tPgorPCEtLSBKMkVFIENvbm5lY3RvciByZWxhdGVkIHRhcmdldHMgICAgICAgICAgICAgICAgICAgICAgICAtLT4KIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIAogPHRhcmdldCBuYW1lPSJjcmVhdGUtY29ubmVjdG9yLWNvbm5wb29sLWNvbW1vbiIKQEAgLTcyMSw3ICs3MjEsNyBAQAogPCEtLSBUYXJnZXQgdG8gY3JlYXRlIEpEQkMgY29ubmVjdGlvbiBwb29sICAtLT4KIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIDx0YXJnZXQgbmFtZT0iY3JlYXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci08ZWNobyBtZXNzYWdlPSJjcmVhdGVkIGpkYmMgY29ubmVjdGlvbiBwb29sICR7amRiYy5jb25wb29sLm5hbWV9IiAKKzxlY2hvIG1lc3NhZ2U9ImNyZWF0ZWQgamRiYyBjb25uZWN0aW9uIHBvb2wgJHtqZGJjLmNvbnBvb2wubmFtZX0iCiAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgICAgICA8YXJnIGxpbmU9ImNyZWF0ZS1qZGJjLWNvbm5lY3Rpb24tcG9vbCIvPgpAQCAtNzM1LDcgKzczNSw3IEBACiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJjcmVhdGUtamRiYy1kcml2ZXItY29ubnBvb2wtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci08ZWNobyBtZXNzYWdlPSJjcmVhdGVkIGpkYmMgY29ubmVjdGlvbiBwb29sICR7amRiYy5jb25wb29sLm5hbWV9IiAKKzxlY2hvIG1lc3NhZ2U9ImNyZWF0ZWQgamRiYyBjb25uZWN0aW9uIHBvb2wgJHtqZGJjLmNvbnBvb2wubmFtZX0iCiAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgICA8cHJvcGVydHkgbmFtZT0iZXh0cmEtcGFyYW1zIiB2YWx1ZT0iIi8+CiAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KQEAgLTc3Miw3ICs3NzIsNyBAQAogICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIgLz4KICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKLQkgICAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC4ke2pkYmMuY29ucG9vbC5uYW1lfS5wcm9wZXJ0eS5VUkw9JHtkYi51cmx9O3VzZXI9JHtkYi51c2VyfTtwYXNzd29yZD0ke2RiLnB3ZH0iLz4KKyAgICAgICAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC4ke2pkYmMuY29ucG9vbC5uYW1lfS5wcm9wZXJ0eS5VUkw9JHtkYi51cmx9O3VzZXI9JHtkYi51c2VyfTtwYXNzd29yZD0ke2RiLnB3ZH0iLz4KICAgPC9hbnRjYWxsPgogPC90YXJnZXQ+CiAKQEAgLTgyMyw3ICs4MjMsNyBAQAogICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIgLz4KICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKLQkgICAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC4ke2pkYmMuY29ucG9vbC5uYW1lfS5wcm9wZXJ0eS5VUkw9JHtkYi51cmx9O3VzZXI9JHtkYi51c2VyfTtwYXNzd29yZD0ke2RiLnB3ZH0iLz4KKyAgICAgICAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC4ke2pkYmMuY29ucG9vbC5uYW1lfS5wcm9wZXJ0eS5VUkw9JHtkYi51cmx9O3VzZXI9JHtkYi51c2VyfTtwYXNzd29yZD0ke2RiLnB3ZH0iLz4KICAgPC9hbnRjYWxsPgogPC90YXJnZXQ+CiAKQEAgLTgzOSwxNCArODM5LDE0IEBACiAgICAgICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KICAgICAgICAgPGFyZyBsaW5lPSIke2pkYmMuY29ucG9vbC5uYW1lfSIvPgogICAgIDwvZXhlYz4KLSAgICA8ZWNobyBtZXNzYWdlPSJjbWQgZXhlY3V0ZWQgZm9yICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+ICAKKyAgICA8ZWNobyBtZXNzYWdlPSJjbWQgZXhlY3V0ZWQgZm9yICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiA8L3RhcmdldD4KIAogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPCEtLSBUYXJnZXQgdG8gY3JlYXRlIEpEQkMgcmVzb3VyY2UgIC0tPgogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPHRhcmdldCBuYW1lPSJjcmVhdGUtamRiYy1yZXNvdXJjZS1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLTxlY2hvIG1lc3NhZ2U9IkNyZWF0aW5nIGpkYmMgcmVzb3VyY2UgcG9vbCAke2pkYmMucmVzb3VyY2UubmFtZX0iIAorPGVjaG8gbWVzc2FnZT0iQ3JlYXRpbmcgamRiYyByZXNvdXJjZSBwb29sICR7amRiYy5yZXNvdXJjZS5uYW1lfSIKICAgICBsZXZlbD0idmVyYm9zZSIvPgogICA8ZWNobyBtZXNzYWdlPSJhc2FkbWluIGNyZWF0ZS1qZGJjLXJlc291cmNlICR7YXMucHJvcHN9IC0tY29ubmVjdGlvbnBvb2xpZCAke2pkYmMuY29ucG9vbC5uYW1lfSAtLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSAke2pkYmMucmVzb3VyY2UubmFtZX0iLz4KICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KQEAgLTg5OCw3ICs4OTgsNyBAQAogPCEtLSBUYXJnZXQgdG8gY3JlYXRlIHBlcnNpc3RlbmNlIHJlc291cmNlICAtLT4KIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIDx0YXJnZXQgbmFtZT0iY3JlYXRlLXBlcnNpc3RlbmNlLXJlc291cmNlLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotPGVjaG8gbWVzc2FnZT0iQ3JlYXRpbmcgcG0gcmVzb3VyY2UgYXQgJHtwbS5yZXNvdXJjZS5uYW1lfSIgCis8ZWNobyBtZXNzYWdlPSJDcmVhdGluZyBwbSByZXNvdXJjZSBhdCAke3BtLnJlc291cmNlLm5hbWV9IgogICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAgICAgPGVjaG8gbWVzc2FnZT0iYXNhZG1pbiBjcmVhdGUtcGVyc2lzdGVuY2UtcmVzb3VyY2UgJHthcy5wcm9wc30gLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0gJHtwbS5yZXNvdXJjZS5uYW1lfSIvPgogICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CkBAIC05MDgsNyArOTA4LDcgQEAKICAgICAgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICAgICAgICA8YXJnIGxpbmU9IiR7cG0ucmVzb3VyY2UubmFtZX0iLz4KICAgICA8L2V4ZWM+Ci0gICAgPGVjaG8gbWVzc2FnZT0iQ3JlYXRlZCAke3BtLnJlc291cmNlLm5hbWV9IC0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+IAorICAgIDxlY2hvIG1lc3NhZ2U9IkNyZWF0ZWQgJHtwbS5yZXNvdXJjZS5uYW1lfSAtLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgogICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgpAQCAtOTI3LDE0ICs5MjcsMTQgQEAKIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXBlcnNpc3RlbmNlLXJlc291cmNlLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIKLSAgICAgIHZhbHVlPSJkZWxldGUtcGVyc2lzdGVuY2UtcmVzb3VyY2UgCisgICAgICB2YWx1ZT0iZGVsZXRlLXBlcnNpc3RlbmNlLXJlc291cmNlCiAgICAgICAgIC0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9IiAvPgogICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtwbS5yZXNvdXJjZS5uYW1lfSIgLz4KICAgPC9hbnRjYWxsPgogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0iZXhlY3V0ZS1zcWwtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci08ZWNobyBtZXNzYWdlPSJFeGVjdXRpbmcgc3FsIHN0YXRlbWVudCBhdCAke2Jhc2VkaXJ9IGZyb20gJHtzcWwuZmlsZX0iIAorPGVjaG8gbWVzc2FnZT0iRXhlY3V0aW5nIHNxbCBzdGF0ZW1lbnQgYXQgJHtiYXNlZGlyfSBmcm9tICR7c3FsLmZpbGV9IgogICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAgIDxzcWwKICAgICBkcml2ZXI9IiR7ZGIuZHJpdmVyfSIKQEAgLTk0OSw3ICs5NDksNyBAQAogCiAKIDx0YXJnZXQgbmFtZT0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotPGVjaG8gbWVzc2FnZT0iRXhlY3V0aW5nIHNxbCBzdGF0ZW1lbnQgYXQgJHtiYXNlZGlyfSBmcm9tICR7c3FsLmZpbGV9IiAKKzxlY2hvIG1lc3NhZ2U9IkV4ZWN1dGluZyBzcWwgc3RhdGVtZW50IGF0ICR7YmFzZWRpcn0gZnJvbSAke3NxbC5maWxlfSIKICAgICBsZXZlbD0idmVyYm9zZSIvPgogICA8c3FsCiAgICAgZHJpdmVyPSIke2RiLmRyaXZlcn0iCkBAIC05NjUsOCArOTY1LDggQEAKIAogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPCEtLSBUYXJnZXQgdG8gY3JlYXRlL2RlbGV0ZSBqYXZhbWFpbCByZXNvdXJjZXMgIC0tPgotPCEtLSAKLSAgICBQcm9wZXJ0aWVzIHJlcXVpcmVkOiAKKzwhLS0KKyAgICBQcm9wZXJ0aWVzIHJlcXVpcmVkOgogICAgIG1haWxob3N0CiAgICAgZnJvbWFkZHJlc3MKICAgICBkZWJ1ZwpAQCAtMTAwNyw3ICsxMDA3LDcgQEAKIDwhLS0gVGFyZ2V0IHRvIGNyZWF0ZSBkYXRhYmFzZSB0YWJsZSB0aHJvdWdoIFNRTCBmaWxlICAtLT4KIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIDx0YXJnZXQgbmFtZT0iY3JlYXRlLXNxbC1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLTxlY2hvIG1lc3NhZ2U9ImNyZWF0aW5nIHRhYmxlcyBmcm9tICR7YmFzZWRpcn0vc3FsLyR7ZGIuY3JlYXRlfSIgCis8ZWNobyBtZXNzYWdlPSJjcmVhdGluZyB0YWJsZXMgZnJvbSAke2Jhc2VkaXJ9L3NxbC8ke2RiLmNyZWF0ZX0iCiAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgPHNxbAogICAgIGRyaXZlcj0iJHtkYi5kcml2ZXJ9IgpAQCAtMTAyNiw3ICsxMDI2LDcgQEAKIDwhLS0gVGFyZ2V0IHRvIGRlbGV0ZSBkYXRhYmFzZSB0YWJsZSB0aHJvdWdoIFNRTCBmaWxlICAtLT4KIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXNxbC1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLTxlY2hvIG1lc3NhZ2U9ImRyb3BwaW5nIHRhYmxlcyBmcm9tICR7YmFzZWRpcn0vc3FsLyR7ZGIuZHJvcH0iIAorPGVjaG8gbWVzc2FnZT0iZHJvcHBpbmcgdGFibGVzIGZyb20gJHtiYXNlZGlyfS9zcWwvJHtkYi5kcm9wfSIKICAgICBsZXZlbD0idmVyYm9zZSIvPgogICA8c3FsCiAgICAgZHJpdmVyPSIke2RiLmRyaXZlcn0iCkBAIC0xMDQ1LDExICsxMDQ1LDExIEBACiA8IS0tIFRhZ2V0IHRvIGNyZWF0ZSBKTVMgQ29ubmVjdGlvbiAgICAgIC0tPgogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPHRhcmdldCBuYW1lPSJjcmVhdGUtam1zLWNvbm5lY3Rpb24tY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gIDxlY2hvIG1lc3NhZ2U9IkNyZWF0aW5nIEpNUyBjb25uZWN0aW9uIGZhY3Rvcnkgd2l0aCBuYW1lICR7am1zLmZhY3RvcnkubmFtZX0iIAorICA8ZWNobyBtZXNzYWdlPSJDcmVhdGluZyBKTVMgY29ubmVjdGlvbiBmYWN0b3J5IHdpdGggbmFtZSAke2ptcy5mYWN0b3J5Lm5hbWV9IgogICAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSI+CiAgICAgPGFyZyBsaW5lPSJjcmVhdGUtam1zLXJlc291cmNlICIvPgotICAgIDxhcmcgbGluZT0iLS1yZXN0eXBlICR7am1zLmZhY3RvcnkudHlwZX0iLz4gICAgCisgICAgPGFyZyBsaW5lPSItLXJlc3R5cGUgJHtqbXMuZmFjdG9yeS50eXBlfSIvPgogICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KICAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgICAgPGFyZyBsaW5lPSIke2ptcy5mYWN0b3J5Lm5hbWV9IiAvPgpAQCAtMTA2MCwyMyArMTA2MCwyMyBAQAogPCEtLSBUYWdldCB0byBkZWxldGUgSk1TIENvbm5lY3Rpb24gICAgICAtLT4KIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIDx0YXJnZXQgbmFtZT0iZGVsZXRlLWptcy1jb25uZWN0aW9uLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICA8ZWNobyBtZXNzYWdlPSJEZWxldGUgSk1TIGNvbm5lY3Rpb24gZmFjdG9yeSB3aXRoIG5hbWUgJHtqbXMuZmFjdG9yeS5uYW1lfSIgCisgIDxlY2hvIG1lc3NhZ2U9IkRlbGV0ZSBKTVMgY29ubmVjdGlvbiBmYWN0b3J5IHdpdGggbmFtZSAke2ptcy5mYWN0b3J5Lm5hbWV9IgogICAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSI+Ci0gICAgPGFyZyBsaW5lPSJkZWxldGUtam1zLXJlc291cmNlICIvPiAgICAKKyAgICA8YXJnIGxpbmU9ImRlbGV0ZS1qbXMtcmVzb3VyY2UgIi8+CiAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgotICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4gICAgCisgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICAgIDxhcmcgbGluZT0iJHtqbXMuZmFjdG9yeS5uYW1lfSIvPgogICA8L2V4ZWM+CiA8L3RhcmdldD4KIAogPCEtLSBKTVM6IGNyZWF0ZS9kZWxldGUgRGVzdGluYXRpb24gUmVzb3VyY2UgVGFyZ2V0cyAtLT4KIDx0YXJnZXQgbmFtZT0iY3JlYXRlLWptcy1yZXNvdXJjZS1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgPGVjaG8gbWVzc2FnZT0iQ3JlYXRpbmcgSk1TIHJlc291cmNlIHdpdGggbmFtZSAke2ptcy5yZXNvdXJjZS5uYW1lfSIgCisgIDxlY2hvIG1lc3NhZ2U9IkNyZWF0aW5nIEpNUyByZXNvdXJjZSB3aXRoIG5hbWUgJHtqbXMucmVzb3VyY2UubmFtZX0iCiAgICAgICBsZXZlbD0idmVyYm9zZSIvPgogCiAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iPgotICAgIDxhcmcgbGluZT0iY3JlYXRlLWptc2Rlc3QgLS1kZXN0dHlwZSAke2Rlc3QudHlwZX0gIi8+ICAgIAorICAgIDxhcmcgbGluZT0iY3JlYXRlLWptc2Rlc3QgLS1kZXN0dHlwZSAke2Rlc3QudHlwZX0gIi8+CiAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgogICAgIDxhcmcgbGluZT0iJHtkZXN0Lm5hbWV9Ii8+CiAgIDwvZXhlYz4KQEAgLTEwODUsMjQgKzEwODUsMjQgQEAKICAgICA8YXJnIGxpbmU9ImNyZWF0ZS1qbXMtcmVzb3VyY2UgIi8+CiAgICAgPGFyZyBsaW5lPSItLXJlc3R5cGUgJHtqbXMucmVzb3VyY2UudHlwZX0iLz4KICAgICA8YXJnIGxpbmU9Ii0tcHJvcGVydHkgaW1xRGVzdGluYXRpb25OYW1lPSR7ZGVzdC5uYW1lfSIvPgotICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4gICAgCisgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KICAgICA8YXJnIGxpbmU9IiR7am1zLnJlc291cmNlLm5hbWV9Ii8+CiAgIDwvZXhlYz4KIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1qbXMtcmVzb3VyY2UtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gIDxlY2hvIG1lc3NhZ2U9IkRlbGV0ZSBKTVMgcmVzb3VyY2Ugd2l0aCBuYW1lICR7am1zLnJlc291cmNlLm5hbWV9IiAKKyAgPGVjaG8gbWVzc2FnZT0iRGVsZXRlIEpNUyByZXNvdXJjZSB3aXRoIG5hbWUgJHtqbXMucmVzb3VyY2UubmFtZX0iCiAgICAgICBsZXZlbD0idmVyYm9zZSIvPgogCiAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iPgogICAgIDxhcmcgbGluZT0iZGVsZXRlLWptcy1yZXNvdXJjZSAiLz4KLSAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+ICAgIAorICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9ICR7am1zLnJlc291cmNlLm5hbWV9Ii8+CiAgIDwvZXhlYz4KIAogICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59Ij4KLSAgICA8YXJnIGxpbmU9ImRlbGV0ZS1qbXNkZXN0IC0tZGVzdHR5cGUgJHtkZXN0LnR5cGV9ICIvPiAgICAKKyAgICA8YXJnIGxpbmU9ImRlbGV0ZS1qbXNkZXN0IC0tZGVzdHR5cGUgJHtkZXN0LnR5cGV9ICIvPgogICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30gJHtkZXN0Lm5hbWV9Ii8+CiAgIDwvZXhlYz4KIDwvdGFyZ2V0PgpAQCAtMTE0NiwyMCArMTE0NiwyMCBAQAogPHRhcmdldCBuYW1lPSJkZXBsb3ktY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uLXBlIi8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uLWVlIi8+Ci08L3RhcmdldD4gICAgICAgCis8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJkZXBsb3ktdmVyaWZ5LWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXZlcmlmeS1jb21tb24tcGUiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS12ZXJpZnktY29tbW9uLWVlIi8+Ci08L3RhcmdldD4gICAgICAgCis8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJkZXBsb3ktY29tbW9uLXBlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiIgdW5sZXNzPSJlZSI+CiAgIDxwcm9wZXJ0eSBuYW1lPSJkZXBsb3llZC5hcHAiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiLz4KICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYS1wYXJhbXMiIHZhbHVlPSIiLz4KICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICA8YXJnIGxpbmU9ImRlcGxveSIvPgotICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4gICAgCi0gICAgPGFyZyBsaW5lPSIke2V4dHJhLXBhcmFtc30iLz4gICAgCisgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgorICAgIDxhcmcgbGluZT0iJHtleHRyYS1wYXJhbXN9Ii8+CiAgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICAgIDxhcmcgbGluZT0iLS1yZXRyaWV2ZSAke2Fzc2VtYmxlLmRpcn0iLz4KICAgICA8YXJnIGxpbmU9Ii0tbGlicmFyaWVzICR7bGlicmFyaWVzfSIvPgpAQCAtMTE2OSw3ICsxMTY5LDcgQEAKICAgPGVjaG8gbWVzc2FnZT0iRGVwbG95bWVudCBvbiB0YXJnZXQgc2VydmVyICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9IHN1Y2Nlc3NmdWwiLz4KICAgIDwvdGFyZ2V0PgogCi08dGFyZ2V0IG5hbWU9ImRlcGxveS1jb21tb24tZWUiIGRlcGVuZHM9ImluaXQtY29tbW9uIiBpZj0iZWUiPiAgICAgIAorPHRhcmdldCBuYW1lPSJkZXBsb3ktY29tbW9uLWVlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiIgaWY9ImVlIj4KICAgPGVjaG8gbWVzc2FnZT0iRGVwbG95aW5nIGluIEVFLi4uIi8+CiAgIDxwcm9wZXJ0eSBuYW1lPSJkZXBsb3llZC5hcHAiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiLz4KICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KQEAgLTEyMjEsOSArMTIyMSw5IEBACiAgICAgPGFyZyBsaW5lPSItLXByZWNvbXBpbGVqc3A9JHtwcmVjb21waWxlanNwfSIvPgogICAgIDxhcmcgbGluZT0iLS11cGxvYWQgdHJ1ZSIvPgogICAgIDxhcmcgbGluZT0iLS1yZXRyaWV2ZSAke2Fzc2VtYmxlLmRpcn0iLz4KLSAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CQorICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KICAgPC9leGVjPgotPC90YXJnZXQ+ICAgIAorPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0iZGVwbG95LXdhci1uYW1lIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgIDxlY2hvIG1lc3NhZ2U9IkRlcGxveWluZyAke3dhcm5hbWV9IGZyb20gJHtiYXNlZGlyfS4iCkBAIC0xMjUzLDcgKzEyNTMsNyBAQAogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0iZGVwbG95LXdhYi1jb21tb25wZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iIHVubGVzcz0iZWUiPgotICA8ZWNobyBtZXNzYWdlPSJEZXBsb3lpbmcgV0FCICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIgZnJvbSAke2Jhc2VkaXJ9LiIgCisgIDxlY2hvIG1lc3NhZ2U9IkRlcGxveWluZyBXQUIgJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciBmcm9tICR7YmFzZWRpcn0uIgogICAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgPHByb3BlcnR5IG5hbWU9InByZWNvbXBpbGVqc3AiIHZhbHVlPSJ0cnVlIi8+CiAgIDxwcm9wZXJ0eSBuYW1lPSJmb3JjZSIgdmFsdWU9ImZhbHNlIi8+CkBAIC0xMjYzLDE3ICsxMjYzLDE3IEBACiAgICAgPGFyZyBsaW5lPSItLXByZWNvbXBpbGVqc3A9JHtwcmVjb21waWxlanNwfSIvPgogICAgIDxhcmcgbGluZT0iLS1mb3JjZT0ke2ZvcmNlfSIvPgogICAgIDxhcmcgbGluZT0iLS11cGxvYWQ9dHJ1ZSIvPgotICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4JCisgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICAgIDxhcmcgbGluZT0iLS1saWJyYXJpZXMgJHtsaWJyYXJpZXN9Ii8+CiAgICAgPGFyZyBsaW5lPSItLXR5cGU9b3NnaSIvPgogICAgIDxhcmcgbGluZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciIvPgogICA8L2V4ZWM+Ci08L3RhcmdldD4gCis8L3RhcmdldD4KIAogCiAKIDx0YXJnZXQgbmFtZT0iZGVwbG95LXdhci1jb21tb25wZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iIHVubGVzcz0iZWUiPgotICA8ZWNobyBtZXNzYWdlPSJEZXBsb3lpbmcgJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciBmcm9tICR7YmFzZWRpcn0uIiAKKyAgPGVjaG8gbWVzc2FnZT0iRGVwbG95aW5nICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIgZnJvbSAke2Jhc2VkaXJ9LiIKICAgICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAgIDxwcm9wZXJ0eSBuYW1lPSJwcmVjb21waWxlanNwIiB2YWx1ZT0idHJ1ZSIvPgogICA8cHJvcGVydHkgbmFtZT0iZm9yY2UiIHZhbHVlPSJmYWxzZSIvPgpAQCAtMTI4NCwxMSArMTI4NCwxMSBAQAogICAgIDxhcmcgbGluZT0iLS1wcmVjb21waWxlanNwPSR7cHJlY29tcGlsZWpzcH0iLz4KICAgICA8YXJnIGxpbmU9Ii0tZm9yY2U9JHtmb3JjZX0iLz4KICAgICA8YXJnIGxpbmU9Ii0tdXBsb2FkPXRydWUiLz4KLSAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CQorICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KICAgICA8YXJnIGxpbmU9Ii0tbGlicmFyaWVzICR7bGlicmFyaWVzfSIvPgogICAgIDxhcmcgbGluZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciIvPgogICA8L2V4ZWM+Ci08L3RhcmdldD4gCis8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJkZXBsb3ktd2FyLWNvbW1vbmVlIiBpZj0iZWUiPgogICA8cHJvcGVydHkgbmFtZT0icHJlY29tcGlsZWpzcCIgdmFsdWU9InRydWUiLz4KQEAgLTEzMDEsNyArMTMwMSw3IEBACiAgICAgPGFyZyBsaW5lPSItLXByZWNvbXBpbGVqc3A9JHtwcmVjb21waWxlanNwfSIvPgogICAgIDxhcmcgbGluZT0iLS1mb3JjZT0ke2ZvcmNlfSIvPgogICAgIDxhcmcgbGluZT0iLS11cGxvYWQ9dHJ1ZSIvPgotICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4JCisgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICAgIDxhcmcgbGluZT0iLS1saWJyYXJpZXMgJHtsaWJyYXJpZXN9Ii8+CiAgICAgPGFyZyBsaW5lPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIi8+CiAgIDwvZXhlYz4KQEAgLTEzNTEsMTAgKzEzNTEsMTAgQEAKICAgICA8YXJnIGxpbmU9ImRlcGxveSIvPgogICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KICAgICA8YXJnIGxpbmU9Ii0tdXBsb2FkPXRydWUiLz4KLSAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CQorICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KICAgICA8YXJnIGxpbmU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXIiLz4KICAgPC9leGVjPgotPC90YXJnZXQ+IAorPC90YXJnZXQ+CiAKIDwhLS0gZGVwbG95IHRoZSBzdGFuZGFsb25lIGphciBpbiBBcHBTZXJ2ICAtLT4KIDx0YXJnZXQgbmFtZT0iZGVwbG95LWNsaWVudC1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTEzNjIsMTEgKzEzNjIsMTEgQEAKICAgICA8YXJnIGxpbmU9ImRlcGxveSIvPgogICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KICAgICA8YXJnIGxpbmU9Ii0tdXBsb2FkPXRydWUiLz4KLSAgICA8YXJnIGxpbmU9Ii0tcmV0cmlldmUgJHthc3NlbWJsZS5kaXJ9Ii8+ICAgIAotICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4JCisgICAgPGFyZyBsaW5lPSItLXJldHJpZXZlICR7YXNzZW1ibGUuZGlyfSIvPgorICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KICAgICA8YXJnIGxpbmU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KICAgPC9leGVjPgotPC90YXJnZXQ+IAorPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0idW5kZXBsb3ktd2FyLW5hbWUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgPHByb3BlcnR5IG5hbWU9ImRlcGxveWVkYXBwLm5hbWUiIHZhbHVlPSIke3dhcm5hbWV9Ii8+CkBAIC0xMzg4LDI3ICsxMzg4LDI3IEBACiAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CiAgICAgPGFyZyBsaW5lPSJ1bmRlcGxveSIvPgogICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KLTwhLS0gICAgCi08YXJnIGxpbmU9dHlwZSAke2FwcHR5cGV9Lz4gCis8IS0tCis8YXJnIGxpbmU9dHlwZSAke2FwcHR5cGV9Lz4KIC0tPgotICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4JCisgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICAgIDxhcmcgbGluZT0iJHtleHRyYS1wYXJhbXN9Ii8+CiA8IS0tIGRlcGxveWVkYXBwLm5hbWUgZGVmYXVsdHMgdG8ge2FwcG5hbWV9QXBwLmRlY2xhcmVkIGluIHByb3BlcnRpZXMueG1sLS0+Ci0gICAgPGFyZyBsaW5lPSIke2RlcGxveWVkYXBwLm5hbWV9Ii8+CQorICAgIDxhcmcgbGluZT0iJHtkZXBsb3llZGFwcC5uYW1lfSIvPgogICA8L2V4ZWM+CiA8L3RhcmdldD4KIAogPCEtLSAgdW5kZXBsb3kgdGhlIHN0YW5kYWxvbmUgd2FyIGluIEFwcFNlcnYgIC0tPgogPHRhcmdldCBuYW1lPSJ1bmRlcGxveS13YXItY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgPGVjaG8gbWVzc2FnZT0iVW5kZXBsb3lpbmcgd2FyZmlsZSAke2FwcG5hbWV9LXdlYiBmcm9tIAorICAgIDxlY2hvIG1lc3NhZ2U9IlVuZGVwbG95aW5nIHdhcmZpbGUgJHthcHBuYW1lfS13ZWIgZnJvbQogICAgICAgICAke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIGZyb20gJHtiYXNlZGlyfS4iIGxldmVsPSJ2ZXJib3NlIi8+CiAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CiAgICAgPGFyZyBsaW5lPSJ1bmRlcGxveSIvPgogICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KLSAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CQorICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KICAgICA8YXJnIGxpbmU9IiR7YXBwbmFtZX0td2ViIi8+CiAgIDwvZXhlYz4KLTwvdGFyZ2V0PiAKKzwvdGFyZ2V0PgogCiAKIDwhLS0gIHVuZGVwbG95IHRoZSBzdGFuZGFsb25lIHdhciBpbiBBcHBTZXJ2ICAtLT4KQEAgLTE0MTYsNyArMTQxNiw3IEBACiAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CiAgICAgPGFyZyBsaW5lPSJ1bmRlcGxveSIvPgogICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KLSAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CQorICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KICAgICA8YXJnIGxpbmU9IiR7YXBwbmFtZX0tZWpiIi8+CiAgIDwvZXhlYz4KIDwvdGFyZ2V0PgpAQCAtMTQyNiwxMCArMTQyNiwxMCBAQAogICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgIDxhcmcgbGluZT0idW5kZXBsb3kiLz4KICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+Ci0gICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgkKKyAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgICAgPGFyZyBsaW5lPSIke2FwcG5hbWV9LWNsaWVudCIvPgogICA8L2V4ZWM+Ci08L3RhcmdldD4gIAorPC90YXJnZXQ+CiAKIAogPCEtLSBydW4gYXBwY2xpZW50IGluIEFwcFNlcnYgIC0tPgpAQCAtMTQ3MiwxMSArMTQ3MiwxMSBAQAogICAgIDxhcmcgdmFsdWU9IiR7dGVzdHN1aXRlLmlkfSIvPgogICA8L2phdmE+CiA8L3RhcmdldD4KLSAgCisKIDwhLS0gcHJlcGFyZSBQb2ludGJhc2Ugc2VydmVycyAtLT4KIDx0YXJnZXQgbmFtZT0icHJlcGFyZVBCIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgIDxlY2hvIG1lc3NhZ2U9IlN0YXJ0aW5nIFBvaW50YmFzZSBzZXJ2ZXJzIiBsZXZlbD0idmVyYm9zZSIvPgotICA8Y29weSBmaWxlPSIke2Vudi5BUFNfSE9NRX0vbGliL3BvaW50YmFzZS5pbmkiIAorICA8Y29weSBmaWxlPSIke2Vudi5BUFNfSE9NRX0vbGliL3BvaW50YmFzZS5pbmkiCiAgICAgICB0b2ZpbGU9IiR7ZGIuZGlyfS9wb2ludGJhc2UuaW5pIi8+CiAgIDxyZXBsYWNlIGZpbGU9IiR7ZGIuZGlyfS9wb2ludGJhc2UuaW5pIiB0b2tlbj0iQEBAIiB2YWx1ZT0iJHtkYi5kaXJ9Ii8+CiA8L3RhcmdldD4KQEAgLTE0OTksMTIgKzE0OTksMTIgQEAKIAogPCEtLSB0YXJnZXQgbmFtZT0ic3RhcnRQQiIgZGVwZW5kcz0icHJlcGFyZVBCIj4KICAgPHBhcmFsbGVsPgotICAgIDxqYXZhIGNsYXNzbmFtZT0iY29tLnBvaW50YmFzZS5uZXQubmV0U2VydmVyIiAKKyAgICA8amF2YSBjbGFzc25hbWU9ImNvbS5wb2ludGJhc2UubmV0Lm5ldFNlcnZlciIKICAgICAgICAgY2xhc3NwYXRoPSIke2RiLmNsYXNzcGF0aH0iIGZhaWxvbmVycm9yPSJmYWxzZSIgZm9yaz0idHJ1ZSI+CiAgICAgICA8YXJnIGxpbmU9Ii9wb3J0OjkwOTIiLz4KICAgICAgIDxhcmcgbGluZT0iL3BvaW50YmFzZS5pbmk9JHtkYi5kaXJ9L3BvaW50YmFzZS5pbmkiLz4KICAgICA8L2phdmE+Ci0gICAgPGphdmEgY2xhc3NuYW1lPSJjb20ucG9pbnRiYXNlLm5ldC5uZXRTZXJ2ZXIiIAorICAgIDxqYXZhIGNsYXNzbmFtZT0iY29tLnBvaW50YmFzZS5uZXQubmV0U2VydmVyIgogICAgICAgICBjbGFzc3BhdGg9IiR7ZGIuY2xhc3NwYXRofSIgZmFpbG9uZXJyb3I9InRydWUiIGZvcms9InRydWUiPgogICAgICAgPGFyZyBsaW5lPSIvcG9ydDo5MDkzIi8+CiAgICAgICA8YXJnIGxpbmU9Ii9wb2ludGJhc2UuaW5pPSR7ZGIuZGlyfS9wb2ludGJhc2UuaW5pIi8+CkBAIC0xNTE1LDcgKzE1MTUsNyBAQAogPCEtLSAgc3RhcnQgRGVyYnkgRGF0YWJhc2UgLS0+CiA8dGFyZ2V0IG5hbWU9InN0YXJ0RGVyYnkiPgogICA8Y29uZGl0aW9uIHByb3BlcnR5PSJkYXJ3aW4iPgotCTxvcyBuYW1lPSJNYWMgT1MgWCIvPgorICAgIDxvcyBuYW1lPSJNYWMgT1MgWCIvPgogICA8L2NvbmRpdGlvbj4KICAgPGFudGNhbGwgdGFyZ2V0PSJzdGFydERlcmJ5Tm9uTWFjIi8+CiAgIDxhbnRjYWxsIHRhcmdldD0ic3RhcnREZXJieU1hYyIvPgpAQCAtMTUzMiw3ICsxNTMyLDcgQEAKICAgICAgIGNsYXNzcGF0aD0iJHtkYi5jbGFzc3BhdGh9IiBmb3JrPSJ0cnVlIiBzcGF3bj0idHJ1ZSI+CiAgICAgICA8YXJnIGxpbmU9Ii1oIGxvY2FsaG9zdCAtcCAxNTI4IHN0YXJ0Ii8+CiAgICAgPC9qYXZhPgotICA8L3BhcmFsbGVsPiAgICAgCisgIDwvcGFyYWxsZWw+CiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJzdGFydERlcmJ5TWFjIiBkZXBlbmRzPSJpbml0LWNvbW1vbiIgaWY9ImRhcndpbiI+CkBAIC0xNTQ1LDcgKzE1NDUsNyBAQAogICAgIDwvamF2YT4KICAgICA8amF2YSBjbGFzc25hbWU9Im9yZy5hcGFjaGUuZGVyYnkuZHJkYS5OZXR3b3JrU2VydmVyQ29udHJvbCIKICAgICAgIGNsYXNzcGF0aD0iJHtkYi5jbGFzc3BhdGh9IiBmb3JrPSJ0cnVlIiBzcGF3bj0idHJ1ZSI+Ci0gICAgICAgPHN5c3Byb3BlcnR5IGtleT0iZGVyYnkuc3RvcmFnZS5maWxlU3luY1RyYW5zYWN0aW9uTG9nIiB2YWx1ZT0idHJ1ZSIvPiAgICAgCisgICAgICAgPHN5c3Byb3BlcnR5IGtleT0iZGVyYnkuc3RvcmFnZS5maWxlU3luY1RyYW5zYWN0aW9uTG9nIiB2YWx1ZT0idHJ1ZSIvPgogICAgICAgPGFyZyBsaW5lPSItaCBsb2NhbGhvc3QgLXAgMTUyOCBzdGFydCIvPgogICAgIDwvamF2YT4KICAgPC9wYXJhbGxlbD4KQEAgLTE1NzMsMTAgKzE1NzMsMTAgQEAKIAogPCEtLSBzZXR1cCBJTVEgZm9yIFJJIEJ1aWxkIC0tPgogPHRhcmdldCBuYW1lPSJzZXR1cC1tcS1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICA8ZWNobyBtZXNzYWdlPSJFeGVjdXRpbmcgRGF0YXN0b3JlIHNldHVwIGZvciBTMU1RLiBSZXF1aXJlZCBvbmx5IGZvciBSSSIgCisgICAgPGVjaG8gbWVzc2FnZT0iRXhlY3V0aW5nIERhdGFzdG9yZSBzZXR1cCBmb3IgUzFNUS4gUmVxdWlyZWQgb25seSBmb3IgUkkiCiAgICAgICAgIGxldmVsPSJ2ZXJib3NlIi8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iJHtJTVFEQk1HUn0gLWphdmFob21lICR7amF2YS5ob21lfSAKLSAgICAgICAgLWIgJHthZG1pbi5kb21haW59XyR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9IGNyZWF0ZSBhbGwiIAorICAgIDxlY2hvIG1lc3NhZ2U9IiR7SU1RREJNR1J9IC1qYXZhaG9tZSAke2phdmEuaG9tZX0KKyAgICAgICAgLWIgJHthZG1pbi5kb21haW59XyR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9IGNyZWF0ZSBhbGwiCiAgICAgICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAgIDxleGVjIGV4ZWN1dGFibGU9IiR7SU1RREJNR1J9IiBmYWlsb25lcnJvcj0idHJ1ZSI+CiAgICAgIDxhcmcgbGluZT0iLWphdmFob21lICR7amF2YS5ob21lfSAtYiAke2FkbWluLmRvbWFpbn1fJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0gY3JlYXRlIGFsbCIgLz4KQEAgLTE2MzcsMTMgKzE2MzcsMTMgQEAKIAogPCEtLSB1c2FnZSAgLS0+CiA8dGFyZ2V0IG5hbWU9InVzYWdlLWNvbW1vbiI+Ci0gICAgPGVjaG8+ICAgICAgICAgCisgICAgPGVjaG8+CiAgICAgICAgIGFudCBjbGVhbiAgICAgICAgICAgUmVtb3ZlIGFsbCBjbGFzc2VzIGZpbGVzCiAgICAgICAgIGFudCBidWlsZCAgICAgICAgICAgQnVpbGQgdGhlIGFwcGxpY2F0aW9uCiAgICAgICAgIGFudCBkZXBsb3kgICAgICAgICAgRGVwbG95IHRoZSBlYXIgZmlsZXMgdG8gUzFBUwotICAgICAgICBhbnQgcnVuCSAgICAgICAgICAgIFJ1biB0aGUgYXBwbGljYXRpb24KKyAgICAgICAgYW50IHJ1biAgICAgICAgICAgICAgICBSdW4gdGhlIGFwcGxpY2F0aW9uCiAgICAgICAgIGFudCB1bmRlcGxveSAgICAgICAgVW5kZXBsb3kgdGhlIGVhciBmaWxlcyBmcm9tIFMxQVMKLSAgICAgICAgYW50IHVzYWdlICAgICAgICAgICBEaXNwbGF5IHRoaXMgbWVzc2FnZSAgICAgICAgICAgIAorICAgICAgICBhbnQgdXNhZ2UgICAgICAgICAgIERpc3BsYXkgdGhpcyBtZXNzYWdlCiAgICAgPC9lY2hvPgogPC90YXJnZXQ+CiAKQEAgLTE2NjksMTMgKzE2NjksMTMgQEAKIAogPHRhcmdldCBuYW1lPSJyZXN0YXJ0LWluc3RhbmNlIj4KICAgICA8ZWNobyBtZXNzYWdlPSJSZXN0YXJ0aW5nIHJlbW90ZSBzZXJ2ZXIgaW5zdGFuY2UsdW50aWwgdGhpcyBnZXRzIGZpeGVkIi8+Ci0JPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KKyAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgICAgICA8YXJnIGxpbmU9InN0b3AtaW5zdGFuY2UiLz4KICAgICAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgogICAgICAgICA8YXJnIGxpbmU9IiR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgICAgPC9leGVjPgogICAgIDxzbGVlcCBzZWNvbmRzPSIzMCIvPgotCTxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CisgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICAgICAgPGFyZyBsaW5lPSJzdGFydC1pbnN0YW5jZSIvPgogICAgICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+CiAgICAgICAgIDxhcmcgbGluZT0iJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KQEAgLTE2OTgsNyArMTY5OCw3IEBACiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJzZXR1cFRpbWVyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiIgaWY9ImVlIj4KLQk8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgorICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CiAgICAgICAgIDxhcmcgbGluZT0iY3JlYXRlLXJlc291cmNlLXJlZiIvPgogICAgICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+CiAgICAgICAgIDxhcmcgbGluZT0iLS10YXJnZXQgc2VydmVyIi8+CkBAIC0xNzI1LDEzICsxNzI1LDEzIEBACiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJ1bnNldHVwVGltZXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIiBpZj0iZWUiPgotCTxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CisgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICAgICAgPGFyZyBsaW5lPSJkZWxldGUtcmVzb3VyY2UtcmVmIi8+CiAgICAgICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KICAgICAgICAgPGFyZyBsaW5lPSItLXRhcmdldCBzZXJ2ZXIiLz4KICAgICAgICAgPGFyZyBsaW5lPSIke2pkYmMucmVzb3VyY2UubmFtZX0iLz4KICAgICA8L2V4ZWM+Ci0JPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KKyAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgICAgICA8YXJnIGxpbmU9InVuc2V0Ii8+CiAgICAgICAgIDxhcmcgbGluZT0iJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0tY29uZmlnLmVqYi1jb250YWluZXIuZWpiLXRpbWVyLXNlcnZpY2UudGltZXItZGF0YXNvdXJjZSIvPgogICAgIDwvZXhlYz4KQEAgLTE5MjQsNyArMTkyNCw3IEBACiA8IS0tIFRhcmdldCB0byBGbHVzaCBjb25uZWN0aW9uIHBvb2wgIC0tPgogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPHRhcmdldCBuYW1lPSJmbHVzaC1jb25ucG9vbC1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLTxlY2hvIG1lc3NhZ2U9IkZsdXNoIGNvbm5lY3Rpb24gcG9vbCAke2pkYmMuY29ucG9vbC5uYW1lfSIgCis8ZWNobyBtZXNzYWdlPSJGbHVzaCBjb25uZWN0aW9uIHBvb2wgJHtqZGJjLmNvbnBvb2wubmFtZX0iCiAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgICAgICA8YXJnIGxpbmU9ImZsdXNoLWNvbm5lY3Rpb24tcG9vbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL29zZ2ktY2RpL3NpbXBsZS13YWItd2l0aC1jZGkvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9vc2dpLWNkaS9zaW1wbGUtd2FiLXdpdGgtY2RpL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMzhkOTdiZC4uMGY4YWRmOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL29zZ2ktY2RpL3NpbXBsZS13YWItd2l0aC1jZGkvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvb3NnaS1jZGkvc2ltcGxlLXdhYi13aXRoLWNkaS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXdhYiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL29zZ2ktY2RpL3NpbXBsZS13YWItd2l0aC1jZGkvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL29zZ2ktY2RpL3NpbXBsZS13YWItd2l0aC1jZGkvYnVpbGQueG1sCmluZGV4IGM0MTBmZDAuLjE4N2VjZjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9vc2dpLWNkaS9zaW1wbGUtd2FiLXdpdGgtY2RpL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvb3NnaS1jZGkvc2ltcGxlLXdhYi13aXRoLWNkaS9idWlsZC54bWwKQEAgLTQyLDcgKzQyLDcgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNTAsMjYgKzUwLDI2IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YWItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhYi1jb21tb24iLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0ic2xlZXBpbmcgZm9yIDEwIHNlY29uZHMgdG8gYWxsb3cgdGhlIFdBQiBkZXBsb3ltZW50Ii8+CiAgICAgICAgIDxzbGVlcCBzZWNvbmRzPSIxMCIvPgogCiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtODEsMTAgKzgxLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL29zZ2ktY2RpL3NpbXBsZS13YWItd2l0aC1jZGkvc2VydmxldC90ZXN0cy9jZGkvVGVzdEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9vc2dpLWNkaS9zaW1wbGUtd2FiLXdpdGgtY2RpL3NlcnZsZXQvdGVzdHMvY2RpL1Rlc3RCZWFuLmphdmEKaW5kZXggZmFkNjg5Ni4uOWJjYzg0ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL29zZ2ktY2RpL3NpbXBsZS13YWItd2l0aC1jZGkvc2VydmxldC90ZXN0cy9jZGkvVGVzdEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvb3NnaS1jZGkvc2ltcGxlLXdhYi13aXRoLWNkaS9zZXJ2bGV0L3Rlc3RzL2NkaS9UZXN0QmVhbi5qYXZhCkBAIC0xNiw3ICsxNiw3IEBACiAKIHBhY2thZ2UgdGVzdHMuY2RpOwogCi0vL1NpbXBsZSBUZXN0QmVhbiB0byB0ZXN0IENESS4gCisvL1NpbXBsZSBUZXN0QmVhbiB0byB0ZXN0IENESS4KIC8vVGhpcyBiZWFuIGltcGxlbWVudHMgU2VyaWFsaXphYmxlIGFzIGl0IG5lZWRzIHRvIGJlIHBsYWNlZCBpbnRvIGEgU3RhdGVmdWwgQmVhbgogcHVibGljIGNsYXNzIFRlc3RCZWFuCiB7fQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL29zZ2ktY2RpL3NpbXBsZS13YWItd2l0aC1jZGkvc2VydmxldC90ZXN0cy9jZGkvVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9vc2dpLWNkaS9zaW1wbGUtd2FiLXdpdGgtY2RpL3NlcnZsZXQvdGVzdHMvY2RpL1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggMTc3ZjgzMC4uNmQ1NTI3ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL29zZ2ktY2RpL3NpbXBsZS13YWItd2l0aC1jZGkvc2VydmxldC90ZXN0cy9jZGkvVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvb3NnaS1jZGkvc2ltcGxlLXdhYi13aXRoLWNkaS9zZXJ2bGV0L3Rlc3RzL2NkaS9UZXN0U2VydmxldC5qYXZhCkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgICAgICBtc2cgKz0gIkJlYW5NYW5hZ2VyIEluamVjdGlvbiB2aWEgY29tcG9uZW50IGVudmlyb25tZW50IGxvb2t1cCBmYWlsZWQiOwogICAgICAgICB9CiAgICAgICAgIGlmIChibTEgPT0gbnVsbCkgbXNnICs9ICJCZWFuTWFuYWdlciBJbmplY3Rpb24gdmlhIGNvbXBvbmVudCBlbnZpcm9ubWVudCBsb29rdXAgZmFpbGVkIjsKLSAgICAgICAgCisKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCZWFuTWFuYWdlciBpcyAiICsgYm0pOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJlYW5NYW5hZ2VyIHZpYSBsb29rdXAgaXMgIiArIGJtMSk7CiAgICAgICAgIHdyaXRlci53cml0ZShtc2cgKyAiXG4iKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvbS54bWwKaW5kZXggNzZlOTc5OC4uOWYxOTFlOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvbS54bWwKQEAgLTI3LDcgKzI3LDcgQEAKICAgICA8Z3JvdXBJZD5vcmcuZ2xhc3NmaXNoLm1haW4udGVzdHM8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+dGVzdHM8L2FydGlmYWN0SWQ+CiAgICAgPHBhY2thZ2luZz5wb208L3BhY2thZ2luZz4KLSAgICA8bmFtZT5HbGFzc0Zpc2ggZGV2dGVzdHMgY2RpPC9uYW1lPiAgCisgICAgPG5hbWU+R2xhc3NGaXNoIGRldnRlc3RzIGNkaTwvbmFtZT4KICAgICA8bW9kdWxlcz4KICAgICAgICAgPCEtLSBtb2R1bGU+cXVpY2tsb29rPC9tb2R1bGUgLS0+CiAgICAgPC9tb2R1bGVzPgpAQCAtNDQsMTkgKzQ0LDE5IEBACiAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tYW50cnVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KICAgICAgICAgICA8dmVyc2lvbj4xLjg8L3ZlcnNpb24+CiAgICAgICAgICAgPGRlcGVuZGVuY2llcz4KLQkgICAgPGRlcGVuZGVuY3k+Ci0JICAgICAgPGdyb3VwSWQ+Y29tLnN1bjwvZ3JvdXBJZD4KLQkgICAgICA8YXJ0aWZhY3RJZD50b29sczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgPGdyb3VwSWQ+Y29tLnN1bjwvZ3JvdXBJZD4KKyAgICAgICAgICA8YXJ0aWZhY3RJZD50b29sczwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgICAgPHZlcnNpb24+MS44LjA8L3ZlcnNpb24+Ci0JICAgICAgPHNjb3BlPnN5c3RlbTwvc2NvcGU+Ci0JICAgICAgPHN5c3RlbVBhdGg+JHtlbnYuSkFWQV9IT01FfS9saWIvdG9vbHMuamFyPC9zeXN0ZW1QYXRoPgotCSAgIDwvZGVwZW5kZW5jeT4gICAgIAorICAgICAgICAgIDxzY29wZT5zeXN0ZW08L3Njb3BlPgorICAgICAgICAgIDxzeXN0ZW1QYXRoPiR7ZW52LkpBVkFfSE9NRX0vbGliL3Rvb2xzLmphcjwvc3lzdGVtUGF0aD4KKyAgICAgICA8L2RlcGVuZGVuY3k+CiAgICAgICAgICA8L2RlcGVuZGVuY2llcz4KICAgICAgICAgICA8ZXhlY3V0aW9ucz4KICAgICAgICAgICAgIDxleGVjdXRpb24+CiAgICAgICAgICAgICAgIDxpZD5pZC50ZXN0LjE8L2lkPgogICAgICAgICAgICAgICA8cGhhc2U+dGVzdDwvcGhhc2U+Ci0gICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPiAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CiAgICAgICAgICAgICAgICAgPHRhcmdldCBuYW1lPSJtdm5Vc2FnZSIgdW5sZXNzPSJ0ZXN0TW9kcyI+CiAgICAgICAgICAgICAgICAgICA8YW50IGFudGZpbGU9ImJ1aWxkLnhtbCIgdGFyZ2V0PSJtdm5Vc2FnZSIvPgogICAgICAgICAgICAgICAgIDwvdGFyZ2V0PgpAQCAtNjgsNyArNjgsNyBAQAogICAgICAgICAgICAgPGV4ZWN1dGlvbj4KICAgICAgICAgICAgICAgPGlkPmlkLnRlc3QuMjwvaWQ+CiAgICAgICAgICAgICAgIDxwaGFzZT50ZXN0PC9waGFzZT4KLSAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KICAgICAgICAgICAgICAgICA8dGFyZ2V0IG5hbWU9ImFudFRlc3RzIiBpZj0idGVzdE1vZHMiPgogICAgICAgICAgICAgICAgICAgPGFudCBhbnRmaWxlPSJidWlsZC54bWwiIHRhcmdldD0iYW50VGVzdHMiLz4KICAgICAgICAgICAgICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2JlYW4taW50ZXJmYWNlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9iZWFuLWludGVyZmFjZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGY2OTc1ZDEuLjgxYTA1NjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2JlYW4taW50ZXJmYWNlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvYmVhbi1pbnRlcmZhY2UvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1iZWFuLWludGVyZmFjZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvYmVhbi1pbnRlcmZhY2UvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvYmVhbi1pbnRlcmZhY2UvYnVpbGQueG1sCmluZGV4IDg4OTQ2ODguLjI1NTY1MzIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2JlYW4taW50ZXJmYWNlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9iZWFuLWludGVyZmFjZS9idWlsZC54bWwKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iY2xpZW50L3Rlc3QvY2xpZW50IiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00OCwyNCArNDgsMjQgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KLSAgICAgICAgCTxwYXJhbSBuYW1lPSJjZGktZXh0ZW5zaW9uLnNlcnZpY2UiIHZhbHVlPSJjZGktZXh0ZW5zaW9uLnNlcnZpY2UiLz4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJjZGktZXh0ZW5zaW9uLnNlcnZpY2UiIHZhbHVlPSJjZGktZXh0ZW5zaW9uLnNlcnZpY2UiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9ImNsaWVudCIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9InRlc3QvY2xpZW50L1dlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0idGVzdC5jbGllbnQuV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NywxMCArNzcsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9iZWFuLWludGVyZmFjZS9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvYmVhbi1pbnRlcmZhY2UvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQppbmRleCA2ZWIzMWU0Li5iY2Y4YWVmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9iZWFuLWludGVyZmFjZS9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2JlYW4taW50ZXJmYWNlL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgcG9ydGFibGUgZXh0ZW5zaW9ucyIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ5LDcgKzQ5LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKQEAgLTU5LDcgKzU5LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICArICIvbXl1cmwiOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9wZW5pbmcgY29ubmVjdGlvbiB0byAiICsgdXJsKTsKQEAgLTk4LDEwICs5OCwxMCBAQAogICAgICAgICAgICAgaWYgKEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvYmVhbi1pbnRlcmZhY2Uvc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2JlYW4taW50ZXJmYWNlL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEKaW5kZXggYzhjZDc2Ny4uNjA1OThlNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvYmVhbi1pbnRlcmZhY2Uvc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9iZWFuLWludGVyZmFjZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCkBAIC0yOSwyMyArMjksMjMgQEAKICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gYXJvdW5kSW52b2tlQ2FsbGVkID0gZmFsc2U7CiAgICAgcHVibGljIHN0YXRpYyBpbnQgYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50ID0gMDsKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBlcnJvck1lc3NhZ2UgPSAiIjsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBUZXN0RGVwZW5kZW50QmVhbiB0YjsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBUcmFuc2FjdGlvbkludGVyY2VwdG9yKE15RXh0ZW5zaW9uIG15ZXgpeyAvL0luamVjdGlvbiBvZiBwb3J0YWJsZSBleHRlbnNpb24gaW4gYSBiZWFuCiAgICAgICAgIGlmKG15ZXggPT0gbnVsbCkgewogICAgICAgICAgICAgZXJyb3JNZXNzYWdlICs9ICJQb3J0YWJsZSBFeHRlbnNpb24gSW5qZWN0aW9uIGluIEludGVyY2VwdG9yIGZhaWxlZCI7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIEBBcm91bmRJbnZva2UKICAgICBwdWJsaWMgT2JqZWN0IG1hbmFnZVRyYW5zYWN0aW9uKEludm9jYXRpb25Db250ZXh0IGN0eCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVHJhbnNhY3Rpb25JbnRlcmNlcHRvcjo6QXJvdW5kSW52b2tlIik7CiAgICAgICAgIGlmICh0YiA9PSBudWxsKSBlcnJvck1lc3NhZ2UgKz0gIkRlcGVuZGVuY3kgSW5qZWN0aW9uICIgKwotICAgICAgICAJCSJpbnRvIFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IgZmFpbGVkIjsKKyAgICAgICAgICAgICAgICAiaW50byBUcmFuc2FjdGlvbkludGVyY2VwdG9yIGZhaWxlZCI7CiAgICAgICAgIGFyb3VuZEludm9rZUNhbGxlZCA9IHRydWU7CiAgICAgICAgIGFyb3VuZEludm9rZUludm9jYXRpb25Db3VudCArKzsKICAgICAgICAgcmV0dXJuIGN0eC5wcm9jZWVkKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9iZWFuLWludGVyZmFjZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25hbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvYmVhbi1pbnRlcmZhY2Uvc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uYWwuamF2YQppbmRleCA5OGY4NWQ0Li44YmQ5OGNiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9iZWFuLWludGVyZmFjZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25hbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2JlYW4taW50ZXJmYWNlL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbmFsLmphdmEKQEAgLTMxLDUgKzMxLDUgQEAKIEBJbnRlcmNlcHRvckJpbmRpbmcKIHB1YmxpYyBAaW50ZXJmYWNlIFRyYW5zYWN0aW9uYWwgewogCi0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2JlYW4taW50ZXJmYWNlL3NlcnZsZXQvdGVzdC9leHRlbnNpb24vTXlFeHRlbnNpb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2JlYW4taW50ZXJmYWNlL3NlcnZsZXQvdGVzdC9leHRlbnNpb24vTXlFeHRlbnNpb24uamF2YQppbmRleCA2NzczN2E5Li5mYWYzOWIxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9iZWFuLWludGVyZmFjZS9zZXJ2bGV0L3Rlc3QvZXh0ZW5zaW9uL015RXh0ZW5zaW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvYmVhbi1pbnRlcmZhY2Uvc2VydmxldC90ZXN0L2V4dGVuc2lvbi9NeUV4dGVuc2lvbi5qYXZhCkBAIC0yOSwxMiArMjksMTIgQEAKICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gYmVmb3JlQmVhbkRpc2NvdmVyeUNhbGxlZCA9IGZhbHNlOwogICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBhZnRlckJlYW5EaXNjb3ZlcnlDYWxsZWQgPSBmYWxzZTsKICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gcHJvY2Vzc0Fubm90YXRlZFR5cGVDYWxsZWQgPSBmYWxzZTsKLSAgICAKKwogICAgIHZvaWQgYmVmb3JlQmVhbkRpc2NvdmVyeShAT2JzZXJ2ZXMgQmVmb3JlQmVhbkRpc2NvdmVyeSBiZGQpewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk15RXh0ZW5zaW9uOjpiZWZvcmVCZWFuRGlzY292ZXJ5IiArIGJkZCk7CiAgICAgICAgIGJlZm9yZUJlYW5EaXNjb3ZlcnlDYWxsZWQgPSB0cnVlOwogICAgIH0KLSAgICAKKwogICAgIDxUPiB2b2lkIHByb2Nlc3NBbm5vdGF0ZWRUeXBlKEBPYnNlcnZlcyBQcm9jZXNzQW5ub3RhdGVkVHlwZTxUPiBwYXQpewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk15RXh0ZW5zaW9uOlByb2Nlc3MgYW5ub3RhdGVkIHR5cGUiICsgcGF0LmdldEFubm90YXRlZFR5cGUoKS5nZXRCYXNlVHlwZSgpKTsKICAgICAgICAgcHJvY2Vzc0Fubm90YXRlZFR5cGVDYWxsZWQgPSB0cnVlOwpAQCAtNDUsMTAgKzQ1LDEwIEBACiAgICAgICAgICAgICBwYXQudmV0bygpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgdm9pZCBhZnRlckJlYW5EaXNjb3ZlcnkoQE9ic2VydmVzIEFmdGVyQmVhbkRpc2NvdmVyeSBhYmQsIEJlYW5NYW5hZ2VyIGJtKXsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNeUV4dGVuc2lvbjogYWJkOiAiICsgYWJkICsgIiBCZWFuTWFuYWdlcjogIiArIGJtKTsKLSAgICAgICAgCisKICAgICAgICAgaWYgKGJtICE9IG51bGwpIHsKICAgICAgICAgICAgIC8vZW5zdXJlIGEgdmFsaWQgQmVhbk1hbmFnZXIgaXMgaW5qZWN0ZWQKICAgICAgICAgICAgIGFmdGVyQmVhbkRpc2NvdmVyeUNhbGxlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9iZWFuLW1hbmFnZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2JlYW4tbWFuYWdlci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGZmMDVkYjAuLjBhOTYzM2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2JlYW4tbWFuYWdlci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2JlYW4tbWFuYWdlci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWJlYW4tbWFuYWdlciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvYmVhbi1tYW5hZ2VyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2JlYW4tbWFuYWdlci9idWlsZC54bWwKaW5kZXggODg5NDY4OC4uMjU1NjUzMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvYmVhbi1tYW5hZ2VyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9iZWFuLW1hbmFnZXIvYnVpbGQueG1sCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9ImNsaWVudC90ZXN0L2NsaWVudCIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDgsMjQgKzQ4LDI0IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+Ci0gICAgICAgIAk8cGFyYW0gbmFtZT0iY2RpLWV4dGVuc2lvbi5zZXJ2aWNlIiB2YWx1ZT0iY2RpLWV4dGVuc2lvbi5zZXJ2aWNlIi8+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iY2RpLWV4dGVuc2lvbi5zZXJ2aWNlIiB2YWx1ZT0iY2RpLWV4dGVuc2lvbi5zZXJ2aWNlIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSJjbGllbnQiIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJ0ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9InRlc3QuY2xpZW50LldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzcsMTAgKzc3LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvYmVhbi1tYW5hZ2VyL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9iZWFuLW1hbmFnZXIvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQppbmRleCA4M2NkNGFiLi45N2FkMTk4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9iZWFuLW1hbmFnZXIvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9iZWFuLW1hbmFnZXIvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQpAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBwb3J0YWJsZSBleHRlbnNpb25zIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDksNyArNDksNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZCIpOwpAQCAtNTksNyArNTksNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgICsgIi9teXVybCI7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigib3BlbmluZyBjb25uZWN0aW9uIHRvICIgKyB1cmwpOwpAQCAtOTgsMTAgKzk4LDEwIEBACiAgICAgICAgICAgICBpZiAoRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9iZWFuLW1hbmFnZXIvc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2JlYW4tbWFuYWdlci9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCmluZGV4IGM4Y2Q3NjcuLjYwNTk4ZTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2JlYW4tbWFuYWdlci9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2JlYW4tbWFuYWdlci9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCkBAIC0yOSwyMyArMjksMjMgQEAKICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gYXJvdW5kSW52b2tlQ2FsbGVkID0gZmFsc2U7CiAgICAgcHVibGljIHN0YXRpYyBpbnQgYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50ID0gMDsKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBlcnJvck1lc3NhZ2UgPSAiIjsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBUZXN0RGVwZW5kZW50QmVhbiB0YjsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBUcmFuc2FjdGlvbkludGVyY2VwdG9yKE15RXh0ZW5zaW9uIG15ZXgpeyAvL0luamVjdGlvbiBvZiBwb3J0YWJsZSBleHRlbnNpb24gaW4gYSBiZWFuCiAgICAgICAgIGlmKG15ZXggPT0gbnVsbCkgewogICAgICAgICAgICAgZXJyb3JNZXNzYWdlICs9ICJQb3J0YWJsZSBFeHRlbnNpb24gSW5qZWN0aW9uIGluIEludGVyY2VwdG9yIGZhaWxlZCI7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIEBBcm91bmRJbnZva2UKICAgICBwdWJsaWMgT2JqZWN0IG1hbmFnZVRyYW5zYWN0aW9uKEludm9jYXRpb25Db250ZXh0IGN0eCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVHJhbnNhY3Rpb25JbnRlcmNlcHRvcjo6QXJvdW5kSW52b2tlIik7CiAgICAgICAgIGlmICh0YiA9PSBudWxsKSBlcnJvck1lc3NhZ2UgKz0gIkRlcGVuZGVuY3kgSW5qZWN0aW9uICIgKwotICAgICAgICAJCSJpbnRvIFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IgZmFpbGVkIjsKKyAgICAgICAgICAgICAgICAiaW50byBUcmFuc2FjdGlvbkludGVyY2VwdG9yIGZhaWxlZCI7CiAgICAgICAgIGFyb3VuZEludm9rZUNhbGxlZCA9IHRydWU7CiAgICAgICAgIGFyb3VuZEludm9rZUludm9jYXRpb25Db3VudCArKzsKICAgICAgICAgcmV0dXJuIGN0eC5wcm9jZWVkKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9iZWFuLW1hbmFnZXIvc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uYWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2JlYW4tbWFuYWdlci9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25hbC5qYXZhCmluZGV4IDk4Zjg1ZDQuLjhiZDk4Y2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2JlYW4tbWFuYWdlci9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25hbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2JlYW4tbWFuYWdlci9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25hbC5qYXZhCkBAIC0zMSw1ICszMSw1IEBACiBASW50ZXJjZXB0b3JCaW5kaW5nCiBwdWJsaWMgQGludGVyZmFjZSBUcmFuc2FjdGlvbmFsIHsKIAotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9iZWFuLW1hbmFnZXIvc2VydmxldC90ZXN0L2V4dGVuc2lvbi9NeUV4dGVuc2lvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvYmVhbi1tYW5hZ2VyL3NlcnZsZXQvdGVzdC9leHRlbnNpb24vTXlFeHRlbnNpb24uamF2YQppbmRleCA2NzczN2E5Li5mYWYzOWIxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9iZWFuLW1hbmFnZXIvc2VydmxldC90ZXN0L2V4dGVuc2lvbi9NeUV4dGVuc2lvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2JlYW4tbWFuYWdlci9zZXJ2bGV0L3Rlc3QvZXh0ZW5zaW9uL015RXh0ZW5zaW9uLmphdmEKQEAgLTI5LDEyICsyOSwxMiBAQAogICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBiZWZvcmVCZWFuRGlzY292ZXJ5Q2FsbGVkID0gZmFsc2U7CiAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGFmdGVyQmVhbkRpc2NvdmVyeUNhbGxlZCA9IGZhbHNlOwogICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBwcm9jZXNzQW5ub3RhdGVkVHlwZUNhbGxlZCA9IGZhbHNlOwotICAgIAorCiAgICAgdm9pZCBiZWZvcmVCZWFuRGlzY292ZXJ5KEBPYnNlcnZlcyBCZWZvcmVCZWFuRGlzY292ZXJ5IGJkZCl7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTXlFeHRlbnNpb246OmJlZm9yZUJlYW5EaXNjb3ZlcnkiICsgYmRkKTsKICAgICAgICAgYmVmb3JlQmVhbkRpc2NvdmVyeUNhbGxlZCA9IHRydWU7CiAgICAgfQotICAgIAorCiAgICAgPFQ+IHZvaWQgcHJvY2Vzc0Fubm90YXRlZFR5cGUoQE9ic2VydmVzIFByb2Nlc3NBbm5vdGF0ZWRUeXBlPFQ+IHBhdCl7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTXlFeHRlbnNpb246UHJvY2VzcyBhbm5vdGF0ZWQgdHlwZSIgKyBwYXQuZ2V0QW5ub3RhdGVkVHlwZSgpLmdldEJhc2VUeXBlKCkpOwogICAgICAgICBwcm9jZXNzQW5ub3RhdGVkVHlwZUNhbGxlZCA9IHRydWU7CkBAIC00NSwxMCArNDUsMTAgQEAKICAgICAgICAgICAgIHBhdC52ZXRvKCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICB2b2lkIGFmdGVyQmVhbkRpc2NvdmVyeShAT2JzZXJ2ZXMgQWZ0ZXJCZWFuRGlzY292ZXJ5IGFiZCwgQmVhbk1hbmFnZXIgYm0pewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk15RXh0ZW5zaW9uOiBhYmQ6ICIgKyBhYmQgKyAiIEJlYW5NYW5hZ2VyOiAiICsgYm0pOwotICAgICAgICAKKwogICAgICAgICBpZiAoYm0gIT0gbnVsbCkgewogICAgICAgICAgICAgLy9lbnN1cmUgYSB2YWxpZCBCZWFuTWFuYWdlciBpcyBpbmplY3RlZAogICAgICAgICAgICAgYWZ0ZXJCZWFuRGlzY292ZXJ5Q2FsbGVkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2JlYW4tbWFuYWdlci9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9Qb3J0YWJsZUV4dGVuc2lvbkJlYW5NYW5hZ2VyVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2JlYW4tbWFuYWdlci9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9Qb3J0YWJsZUV4dGVuc2lvbkJlYW5NYW5hZ2VyVGVzdFNlcnZsZXQuamF2YQppbmRleCA1ODYxZmZiLi4wOGM1YmJlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9iZWFuLW1hbmFnZXIvc2VydmxldC90ZXN0L3NlcnZsZXQvUG9ydGFibGVFeHRlbnNpb25CZWFuTWFuYWdlclRlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvYmVhbi1tYW5hZ2VyL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1BvcnRhYmxlRXh0ZW5zaW9uQmVhbk1hbmFnZXJUZXN0U2VydmxldC5qYXZhCkBAIC00NiwxMCArNDYsMTAgQEAKICAgICBASW5qZWN0CiAgICAgQFByZWZlcnJlZAogICAgIFRlc3RCZWFuIHRiOwotICAgIAorCiAgICAgQEluamVjdAogICAgIEJlYW5NYW5hZ2VyIGJtOwotICAgIAorCiAgICAgU3RyaW5nIG1zZyA9ICIiOwogCiAKQEAgLTczLDM0ICs3MywzNCBAQAogICAgICAgICAgICAgICAgICAgICArIFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IuYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50OwogICAgICAgICBpZiAoIVRyYW5zYWN0aW9uSW50ZXJjZXB0b3IuZXJyb3JNZXNzYWdlLnRyaW0oKS5lcXVhbHMoIiIpKQogICAgICAgICAgICAgbXNnICs9IFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IuZXJyb3JNZXNzYWdlOwotICAgICAgICAKKwogICAgICAgICAvL2NoZWNrIGlmIG91ciBwb3J0YWJsZSBleHRlbnNpb24gd2FzIGNhbGxlZAogICAgICAgICBpZiAoIU15RXh0ZW5zaW9uLmJlZm9yZUJlYW5EaXNjb3ZlcnlDYWxsZWQpCiAgICAgICAgICAgICBtc2cgKz0gIlBvcnRhYmxlIEV4dGVuc2lvbiBsaWZlY3ljbGUgb2JzZXJ2ZXIgbWV0aG9kOiAiICsKLSAgICAgICAgICAgIAkJImJlZm9yZUJlYW5EaXNjb3Zlcnkgbm90IGNhbGxlZCI7CisgICAgICAgICAgICAgICAgICAgICJiZWZvcmVCZWFuRGlzY292ZXJ5IG5vdCBjYWxsZWQiOwogCiAgICAgICAgIGlmICghTXlFeHRlbnNpb24uYWZ0ZXJCZWFuRGlzY292ZXJ5Q2FsbGVkKQogICAgICAgICAgICAgbXNnICs9ICJQb3J0YWJsZSBFeHRlbnNpb24gbGlmZWN5Y2xlIG9ic2VydmVyIG1ldGhvZDogIiArCi0gICAgICAgICAgICAJCSJhZnRlckJlYW5EaXNjb3Zlcnkgbm90IGNhbGxlZCBvciBpbmplY3Rpb24gb2YgQmVhbk1hbmFnZXIgIiArCi0gICAgICAgICAgICAJCSJpbiBhbiBvYnNlcnZlciBtZXRob2QgZmFpbGVkIjsKLSAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICJhZnRlckJlYW5EaXNjb3Zlcnkgbm90IGNhbGxlZCBvciBpbmplY3Rpb24gb2YgQmVhbk1hbmFnZXIgIiArCisgICAgICAgICAgICAgICAgICAgICJpbiBhbiBvYnNlcnZlciBtZXRob2QgZmFpbGVkIjsKKwogICAgICAgICBpZiAoIU15RXh0ZW5zaW9uLnByb2Nlc3NBbm5vdGF0ZWRUeXBlQ2FsbGVkKQogICAgICAgICAgICAgbXNnICs9ICJQb3J0YWJsZSBFeHRlbnNpb24gbGlmZWN5Y2xlIG9ic2VydmVyIG1ldGhvZDogcHJvY2VzcyAiICsKLSAgICAgICAgICAgIAkJImFubm90YXRlZCB0eXBlIG5vdCBjYWxsZWQiOworICAgICAgICAgICAgICAgICAgICAiYW5ub3RhdGVkIHR5cGUgbm90IGNhbGxlZCI7CiAKICAgICAgICAgLy9CZWFuTWFuYWdlciBsb29rdXAKICAgICAgICAgaWYgKGJtID09IG51bGwpCiAgICAgICAgICAgICBtc2cgKz0gIkluamVjdGlvbiBvZiBCZWFuTWFuYWdlciBpbnRvIHNlcnZsZXQgZmFpbGVkIjsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIEJlYW5NYW5hZ2VyIGJtMSA9IChCZWFuTWFuYWdlcikgKG5ldyBJbml0aWFsQ29udGV4dCgpKS5sb29rdXAoImphdmE6Y29tcC9CZWFuTWFuYWdlciIpOwotICAgICAgICAgICAgaWYgKGJtMSA9PSBudWxsKSAKKyAgICAgICAgICAgIGlmIChibTEgPT0gbnVsbCkKICAgICAgICAgICAgICAgICBtc2cgKz0gImxvb2t1cCBvZiBCZWFuTWFuYWdlciB2aWEgY29tcG9uZW50IGNvbnRleHQgZmFpbGVkIjsKICAgICAgICAgfSBjYXRjaCAoTmFtaW5nRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBtc2cgKz0gIk5hbWluZ0V4Y2VwdGlvbiBkdXJpbmcgbG9va3VwIG9mIEJlYW5NYW5hZ2VyIHZpYSBjb21wb25lbnQgY29udGV4dCI7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgLy9Vc2luZyBCZWFuTWFuYWdlcgogICAgICAgICBjaGVjaygoYm0uZ2V0QmVhbnMoInRlc3RfbmFtZWRfYmVhbiIpLnNpemUoKSA9PSAxKSwgIkludmFsaWQgbnVtYmVyIG9mIE5hbWVkIEJlYW5zIik7CiAgICAgICAgIGNoZWNrKChibS5nZXRCZWFucygiZHVwbGljYXRlX3Rlc3RfYmVhbiIpLnNpemUoKSA9PSAwKSwgIkludmFsaWQgbnVtYmVyIG9mIER1cGxpY2F0ZSBUZXN0IEJlYW5zIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9idWlsZC54bWwKaW5kZXggNzgzNjhhYi4uYTM0YjVhZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2J1aWxkLnhtbApAQCAtODgsMTUgKzg4LDE1IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4gVXNhZ2U6Ci0JCWFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgcG9ydGFibGUtZXh0ZW5zaW9ucyB0ZXN0cykKLQkJYW50IGNsZWFuIChjbGVhbnMgYWxsIHRoZSBwb3J0YWJsZS1leHRlbnNpb25zIHRlc3RzKQotCQlhbnQgYnVpbGQgKGJ1aWxkcyBhbGwgdGhlIHBvcnRhYmxlLWV4dGVuc2lvbnMgdGVzdHMpCi0JCWFudCBzZXR1cCAoc2V0cyB1cCBhbGwgcmVzb3VyY2VzIGZvciBwb3J0YWJsZS1leHRlbnNpb25zIHRlc3RzKQotCQlhbnQgZGVwbG95IChkZXBsb3lzIGFsbCB0aGUgcG9ydGFibGUtZXh0ZW5zaW9ucyBhcHBzKQotCQlhbnQgcnVuIChFeGVjdXRlcyBhbGwgdGhlIHBvcnRhYmxlLWV4dGVuc2lvbnMgdGVzdHMpCi0JCWFudCB1bmRlcGxveSAodW5kZXBsb3lzIGFsbCB0aGUgIHBvcnRhYmxlLWV4dGVuc2lvbnMgYXBwcykKLQkJYW50IHVuc2V0dXAgKHVuc2V0cyBhbGwgcmVzb3VyY2VzIGZvciBwb3J0YWJsZS1leHRlbnNpb25zIHRlc3RzKQotCTwvZWNobz4KKyAgICA8ZWNobz4gVXNhZ2U6CisgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgcG9ydGFibGUtZXh0ZW5zaW9ucyB0ZXN0cykKKyAgICAgICAgYW50IGNsZWFuIChjbGVhbnMgYWxsIHRoZSBwb3J0YWJsZS1leHRlbnNpb25zIHRlc3RzKQorICAgICAgICBhbnQgYnVpbGQgKGJ1aWxkcyBhbGwgdGhlIHBvcnRhYmxlLWV4dGVuc2lvbnMgdGVzdHMpCisgICAgICAgIGFudCBzZXR1cCAoc2V0cyB1cCBhbGwgcmVzb3VyY2VzIGZvciBwb3J0YWJsZS1leHRlbnNpb25zIHRlc3RzKQorICAgICAgICBhbnQgZGVwbG95IChkZXBsb3lzIGFsbCB0aGUgcG9ydGFibGUtZXh0ZW5zaW9ucyBhcHBzKQorICAgICAgICBhbnQgcnVuIChFeGVjdXRlcyBhbGwgdGhlIHBvcnRhYmxlLWV4dGVuc2lvbnMgdGVzdHMpCisgICAgICAgIGFudCB1bmRlcGxveSAodW5kZXBsb3lzIGFsbCB0aGUgIHBvcnRhYmxlLWV4dGVuc2lvbnMgYXBwcykKKyAgICAgICAgYW50IHVuc2V0dXAgKHVuc2V0cyBhbGwgcmVzb3VyY2VzIGZvciBwb3J0YWJsZS1leHRlbnNpb25zIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2luamVjdGlvbi10YXJnZXQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2luamVjdGlvbi10YXJnZXQvYnVpbGQucHJvcGVydGllcwppbmRleCA3NGIxNWUxLi42NmFiMzNkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9pbmplY3Rpb24tdGFyZ2V0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvaW5qZWN0aW9uLXRhcmdldC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWluamVjdGlvbi10YXJnZXQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2luamVjdGlvbi10YXJnZXQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvaW5qZWN0aW9uLXRhcmdldC9idWlsZC54bWwKaW5kZXggODg5NDY4OC4uMjU1NjUzMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvaW5qZWN0aW9uLXRhcmdldC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvaW5qZWN0aW9uLXRhcmdldC9idWlsZC54bWwKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iY2xpZW50L3Rlc3QvY2xpZW50IiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00OCwyNCArNDgsMjQgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KLSAgICAgICAgCTxwYXJhbSBuYW1lPSJjZGktZXh0ZW5zaW9uLnNlcnZpY2UiIHZhbHVlPSJjZGktZXh0ZW5zaW9uLnNlcnZpY2UiLz4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJjZGktZXh0ZW5zaW9uLnNlcnZpY2UiIHZhbHVlPSJjZGktZXh0ZW5zaW9uLnNlcnZpY2UiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9ImNsaWVudCIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9InRlc3QvY2xpZW50L1dlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0idGVzdC5jbGllbnQuV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NywxMCArNzcsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9pbmplY3Rpb24tdGFyZ2V0L2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9pbmplY3Rpb24tdGFyZ2V0L2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKaW5kZXggOWIwMWUwOS4uM2NkOGU5MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvaW5qZWN0aW9uLXRhcmdldC9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2luamVjdGlvbi10YXJnZXQvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQpAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBwb3J0YWJsZSBleHRlbnNpb25zIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDksNyArNDksNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZCIpOwpAQCAtNTksNyArNTksNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgICsgIi9teXVybCI7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigib3BlbmluZyBjb25uZWN0aW9uIHRvICIgKyB1cmwpOwpAQCAtOTgsMTAgKzk4LDEwIEBACiAgICAgICAgICAgICBpZiAoRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9pbmplY3Rpb24tdGFyZ2V0L3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9pbmplY3Rpb24tdGFyZ2V0L3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEKaW5kZXggYzhjZDc2Ny4uNjA1OThlNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvaW5qZWN0aW9uLXRhcmdldC9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2luamVjdGlvbi10YXJnZXQvc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YQpAQCAtMjksMjMgKzI5LDIzIEBACiAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGFyb3VuZEludm9rZUNhbGxlZCA9IGZhbHNlOwogICAgIHB1YmxpYyBzdGF0aWMgaW50IGFyb3VuZEludm9rZUludm9jYXRpb25Db3VudCA9IDA7CiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZXJyb3JNZXNzYWdlID0gIiI7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgVGVzdERlcGVuZGVudEJlYW4gdGI7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgVHJhbnNhY3Rpb25JbnRlcmNlcHRvcihNeUV4dGVuc2lvbiBteWV4KXsgLy9JbmplY3Rpb24gb2YgcG9ydGFibGUgZXh0ZW5zaW9uIGluIGEgYmVhbgogICAgICAgICBpZihteWV4ID09IG51bGwpIHsKICAgICAgICAgICAgIGVycm9yTWVzc2FnZSArPSAiUG9ydGFibGUgRXh0ZW5zaW9uIEluamVjdGlvbiBpbiBJbnRlcmNlcHRvciBmYWlsZWQiOwogICAgICAgICB9CiAgICAgfQotICAgIAotICAgIAorCisKICAgICBAQXJvdW5kSW52b2tlCiAgICAgcHVibGljIE9iamVjdCBtYW5hZ2VUcmFuc2FjdGlvbihJbnZvY2F0aW9uQ29udGV4dCBjdHgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRyYW5zYWN0aW9uSW50ZXJjZXB0b3I6OkFyb3VuZEludm9rZSIpOwogICAgICAgICBpZiAodGIgPT0gbnVsbCkgZXJyb3JNZXNzYWdlICs9ICJEZXBlbmRlbmN5IEluamVjdGlvbiAiICsKLSAgICAgICAgCQkiaW50byBUcmFuc2FjdGlvbkludGVyY2VwdG9yIGZhaWxlZCI7CisgICAgICAgICAgICAgICAgImludG8gVHJhbnNhY3Rpb25JbnRlcmNlcHRvciBmYWlsZWQiOwogICAgICAgICBhcm91bmRJbnZva2VDYWxsZWQgPSB0cnVlOwogICAgICAgICBhcm91bmRJbnZva2VJbnZvY2F0aW9uQ291bnQgKys7CiAgICAgICAgIHJldHVybiBjdHgucHJvY2VlZCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvaW5qZWN0aW9uLXRhcmdldC9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25hbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvaW5qZWN0aW9uLXRhcmdldC9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25hbC5qYXZhCmluZGV4IDk4Zjg1ZDQuLjhiZDk4Y2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2luamVjdGlvbi10YXJnZXQvc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uYWwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9pbmplY3Rpb24tdGFyZ2V0L3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbmFsLmphdmEKQEAgLTMxLDUgKzMxLDUgQEAKIEBJbnRlcmNlcHRvckJpbmRpbmcKIHB1YmxpYyBAaW50ZXJmYWNlIFRyYW5zYWN0aW9uYWwgewogCi0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2luamVjdGlvbi10YXJnZXQvc2VydmxldC90ZXN0L2V4dGVuc2lvbi9NeUV4dGVuc2lvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvaW5qZWN0aW9uLXRhcmdldC9zZXJ2bGV0L3Rlc3QvZXh0ZW5zaW9uL015RXh0ZW5zaW9uLmphdmEKaW5kZXggNjc3MzdhOS4uZmFmMzliMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvaW5qZWN0aW9uLXRhcmdldC9zZXJ2bGV0L3Rlc3QvZXh0ZW5zaW9uL015RXh0ZW5zaW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvaW5qZWN0aW9uLXRhcmdldC9zZXJ2bGV0L3Rlc3QvZXh0ZW5zaW9uL015RXh0ZW5zaW9uLmphdmEKQEAgLTI5LDEyICsyOSwxMiBAQAogICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBiZWZvcmVCZWFuRGlzY292ZXJ5Q2FsbGVkID0gZmFsc2U7CiAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGFmdGVyQmVhbkRpc2NvdmVyeUNhbGxlZCA9IGZhbHNlOwogICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBwcm9jZXNzQW5ub3RhdGVkVHlwZUNhbGxlZCA9IGZhbHNlOwotICAgIAorCiAgICAgdm9pZCBiZWZvcmVCZWFuRGlzY292ZXJ5KEBPYnNlcnZlcyBCZWZvcmVCZWFuRGlzY292ZXJ5IGJkZCl7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTXlFeHRlbnNpb246OmJlZm9yZUJlYW5EaXNjb3ZlcnkiICsgYmRkKTsKICAgICAgICAgYmVmb3JlQmVhbkRpc2NvdmVyeUNhbGxlZCA9IHRydWU7CiAgICAgfQotICAgIAorCiAgICAgPFQ+IHZvaWQgcHJvY2Vzc0Fubm90YXRlZFR5cGUoQE9ic2VydmVzIFByb2Nlc3NBbm5vdGF0ZWRUeXBlPFQ+IHBhdCl7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTXlFeHRlbnNpb246UHJvY2VzcyBhbm5vdGF0ZWQgdHlwZSIgKyBwYXQuZ2V0QW5ub3RhdGVkVHlwZSgpLmdldEJhc2VUeXBlKCkpOwogICAgICAgICBwcm9jZXNzQW5ub3RhdGVkVHlwZUNhbGxlZCA9IHRydWU7CkBAIC00NSwxMCArNDUsMTAgQEAKICAgICAgICAgICAgIHBhdC52ZXRvKCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICB2b2lkIGFmdGVyQmVhbkRpc2NvdmVyeShAT2JzZXJ2ZXMgQWZ0ZXJCZWFuRGlzY292ZXJ5IGFiZCwgQmVhbk1hbmFnZXIgYm0pewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk15RXh0ZW5zaW9uOiBhYmQ6ICIgKyBhYmQgKyAiIEJlYW5NYW5hZ2VyOiAiICsgYm0pOwotICAgICAgICAKKwogICAgICAgICBpZiAoYm0gIT0gbnVsbCkgewogICAgICAgICAgICAgLy9lbnN1cmUgYSB2YWxpZCBCZWFuTWFuYWdlciBpcyBpbmplY3RlZAogICAgICAgICAgICAgYWZ0ZXJCZWFuRGlzY292ZXJ5Q2FsbGVkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2luamVjdGlvbi10YXJnZXQvc2VydmxldC90ZXN0L2ZyYW1ld29yay9UZXN0RnJhbWV3b3JrQ2xhc3NXaXRoQ29uc3RydWN0b3JJbmplY3Rpb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2luamVjdGlvbi10YXJnZXQvc2VydmxldC90ZXN0L2ZyYW1ld29yay9UZXN0RnJhbWV3b3JrQ2xhc3NXaXRoQ29uc3RydWN0b3JJbmplY3Rpb24uamF2YQppbmRleCA2NjhkYjA0Li4yMzFiNDM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9pbmplY3Rpb24tdGFyZ2V0L3NlcnZsZXQvdGVzdC9mcmFtZXdvcmsvVGVzdEZyYW1ld29ya0NsYXNzV2l0aENvbnN0cnVjdG9ySW5qZWN0aW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvaW5qZWN0aW9uLXRhcmdldC9zZXJ2bGV0L3Rlc3QvZnJhbWV3b3JrL1Rlc3RGcmFtZXdvcmtDbGFzc1dpdGhDb25zdHJ1Y3RvckluamVjdGlvbi5qYXZhCkBAIC0zOCw3ICszOCw3IEBACiAgICAgQEluamVjdAogICAgIHB1YmxpYyBUZXN0RnJhbWV3b3JrQ2xhc3NXaXRoQ29uc3RydWN0b3JJbmplY3Rpb24oQFByZWZlcnJlZCBUZXN0QmVhbiB0YikgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNvbnN0cnVjdG9yIGJhc2VkIGluamVjdGlvbiAiICsKLSAgICAgICAgCQkiaW50byBhIGZyYW1ld29yayBjbGFzcyIgKyB0Yik7CisgICAgICAgICAgICAgICAgImludG8gYSBmcmFtZXdvcmsgY2xhc3MiICsgdGIpOwogICAgICAgICB0aGlzLnRiID0gdGI7CiAgICAgICAgIGlmICh0YiA9PSBudWxsKSB7CiAgICAgICAgICAgICBtc2cgKz0gIkNvbnN0cnVjdG9yIGluamVjdGlvbiBpbiBhIHRlc3QgZnJhbWV3b3JrIGNsYXNzIGZhaWxlZCI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9pbmplY3Rpb24tdGFyZ2V0L3NlcnZsZXQvdGVzdC9mcmFtZXdvcmsvVGVzdEZyYW1ld29ya0NsYXNzV2l0aFNldHRlckFuZEZpZWxkSW5qZWN0aW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9pbmplY3Rpb24tdGFyZ2V0L3NlcnZsZXQvdGVzdC9mcmFtZXdvcmsvVGVzdEZyYW1ld29ya0NsYXNzV2l0aFNldHRlckFuZEZpZWxkSW5qZWN0aW9uLmphdmEKaW5kZXggNmU4MWUwZS4uNWM2NjYxMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvaW5qZWN0aW9uLXRhcmdldC9zZXJ2bGV0L3Rlc3QvZnJhbWV3b3JrL1Rlc3RGcmFtZXdvcmtDbGFzc1dpdGhTZXR0ZXJBbmRGaWVsZEluamVjdGlvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2luamVjdGlvbi10YXJnZXQvc2VydmxldC90ZXN0L2ZyYW1ld29yay9UZXN0RnJhbWV3b3JrQ2xhc3NXaXRoU2V0dGVyQW5kRmllbGRJbmplY3Rpb24uamF2YQpAQCAtMjUsMTEgKzI1LDExIEBACiAKIAogcHVibGljIGNsYXNzIFRlc3RGcmFtZXdvcmtDbGFzc1dpdGhTZXR0ZXJBbmRGaWVsZEluamVjdGlvbiB7Ci0gICAgCisKICAgICBASW5qZWN0IFRlc3ROYW1lZEJlYW4gdG5iOwogCiAgICAgcHJpdmF0ZSBUZXN0QmVhbiB0YjsKLSAgICAKKwogICAgIHByaXZhdGUgU3RyaW5nIG1zZyA9ICIiOwogCiAgICAgcHJpdmF0ZSBib29sZWFuIHBvc3RDb25zdHJ1Y3RDYWxsZWQgPSBmYWxzZTsKQEAgLTQyLDggKzQyLDggQEAKICAgICBwdWJsaWMgVGVzdEZyYW1ld29ya0NsYXNzV2l0aFNldHRlckFuZEZpZWxkSW5qZWN0aW9uKFN0cmluZyBtYWdpY0tleSl7CiAgICAgICAgIGlmKCFtYWdpY0tleS5lcXVhbHMoInRlc3QiKSkgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oKTsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIEBJbmplY3QKICAgICBwdWJsaWMgdm9pZCBzZXRUZXN0QmVhbihAUHJlZmVycmVkIFRlc3RCZWFuIHRiKXsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZXR0ZXIgYmFzZWQgaW5qZWN0aW9uICIgKwpAQCAtNTIsOSArNTIsOSBAQAogICAgICAgICBpZiAodGIgPT0gbnVsbCkgewogICAgICAgICAgICAgbXNnICs9ICJDb25zdHJ1Y3RvciBpbmplY3Rpb24gaW4gYSB0ZXN0IGZyYW1ld29yayBjbGFzcyBmYWlsZWQiOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgfQotICAgIAorCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgYmVhblBvc3RDb25zdHJ1Y3QoKSB7CiAgICAgICAgIHRoaXMucG9zdENvbnN0cnVjdENhbGxlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9pbmplY3Rpb24tdGFyZ2V0L3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1BvcnRhYmxlRXh0ZW5zaW9uSW5qZWN0aW9uVGFyZ2V0VGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2luamVjdGlvbi10YXJnZXQvc2VydmxldC90ZXN0L3NlcnZsZXQvUG9ydGFibGVFeHRlbnNpb25JbmplY3Rpb25UYXJnZXRUZXN0U2VydmxldC5qYXZhCmluZGV4IDA1YzQ4MWMuLjA2Y2QxYTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2luamVjdGlvbi10YXJnZXQvc2VydmxldC90ZXN0L3NlcnZsZXQvUG9ydGFibGVFeHRlbnNpb25JbmplY3Rpb25UYXJnZXRUZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL2luamVjdGlvbi10YXJnZXQvc2VydmxldC90ZXN0L3NlcnZsZXQvUG9ydGFibGVFeHRlbnNpb25JbmplY3Rpb25UYXJnZXRUZXN0U2VydmxldC5qYXZhCkBAIC00NSw3ICs0NSw3IEBACiAKIEBXZWJTZXJ2bGV0KG5hbWUgPSAibXl0ZXN0IiwgdXJsUGF0dGVybnMgPSB7ICIvbXl1cmwiIH0pCiBwdWJsaWMgY2xhc3MgUG9ydGFibGVFeHRlbnNpb25JbmplY3Rpb25UYXJnZXRUZXN0U2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBAUHJlZmVycmVkCiAgICAgVGVzdEJlYW4gdGI7CkBAIC02NSw3ICs2NSw3IEBACiAgICAgICAgIHRiLm0xKCk7CiAgICAgICAgIGlmICghVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5hcm91bmRJbnZva2VDYWxsZWQpCiAgICAgICAgICAgICBtc2cgKz0gIkJ1c2luZXNzIG1ldGhvZCBpbnRlcmNlcHRvciBhcm91bmRJbnZva2Ugbm90IGNhbGxlZCI7Ci0gICAgICAgIAorCiAgICAgICAgIHRiLm0yKCk7CiAgICAgICAgIGlmIChUcmFuc2FjdGlvbkludGVyY2VwdG9yLmFyb3VuZEludm9rZUludm9jYXRpb25Db3VudCAhPSAyKQogICAgICAgICAgICAgbXNnICs9ICJCdXNpbmVzcyBtZXRob2QgaW50ZXJjZXB0b3IgaW52b2NhdGlvbiBvbiBtZXRob2QtbGV2ZWwgIiArICJpbnRlcmNlcHRvciBhbm5vdGF0aW9uIGNvdW50IG5vdCBleHBlY3RlZC4gIiArICJleHBlY3RlZCA9MiwgYWN0dWFsPSIKQEAgLTg5LDEyICs4OSwxMiBAQAogICAgICAgICAgICAgbXNnICs9ICJJbmplY3Rpb24gb2YgQmVhbk1hbmFnZXIgaW50byBzZXJ2bGV0IGZhaWxlZCI7CiAKICAgICAgICAgQW5ub3RhdGVkVHlwZTxUZXN0RnJhbWV3b3JrQ2xhc3NXaXRoQ29uc3RydWN0b3JJbmplY3Rpb24+IGF0ZmMgPSBibS5jcmVhdGVBbm5vdGF0ZWRUeXBlKFRlc3RGcmFtZXdvcmtDbGFzc1dpdGhDb25zdHJ1Y3RvckluamVjdGlvbi5jbGFzcyk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIEZpcnN0OiBDb25zdHJ1Y3RvciBJbmplY3Rpb24gRnJhbWV3b3JrIGNsYXNzCiAgICAgICAgIENyZWF0aW9uYWxDb250ZXh0IGN0eCA9IGJtLmNyZWF0ZUNyZWF0aW9uYWxDb250ZXh0KG51bGwpOwogICAgICAgICBJbmplY3Rpb25UYXJnZXQ8VGVzdEZyYW1ld29ya0NsYXNzV2l0aENvbnN0cnVjdG9ySW5qZWN0aW9uPiBpdCA9IGJtLmNyZWF0ZUluamVjdGlvblRhcmdldChhdGZjKTsKICAgICAgICAgVGVzdEZyYW1ld29ya0NsYXNzV2l0aENvbnN0cnVjdG9ySW5qZWN0aW9uIGN0b3JJbnN0YW5jZSA9IGl0LnByb2R1Y2UoY3R4KTsKLSAgICAgICAgCisKICAgICAgICAgLy8gU2luY2UgdGhpcyBmcmFtZXdvcmsgY2xhc3MgbmVlZHMgdG8gc3VwcG9ydCBjb25zdHJ1Y3RvciBiYXNlZCBpbmplY3Rpb24KICAgICAgICAgLy8gd2UgbmVlZCB0byBhc2sgdGhlIENESSBydW50aW1lIHRvIHByb2R1Y2UgdGhlIGluc3RhbmNlLgogICAgICAgICBpdC5pbmplY3QoY3Rvckluc3RhbmNlLCBjdHgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvbmV3LWJlYW4tcmVnaXN0cmF0aW9uLWV4dGVuc2lvbi1pbi1saWIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL25ldy1iZWFuLXJlZ2lzdHJhdGlvbi1leHRlbnNpb24taW4tbGliL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYTNhMWI0Mi4uMGYxZjMwMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvbmV3LWJlYW4tcmVnaXN0cmF0aW9uLWV4dGVuc2lvbi1pbi1saWIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24tZXh0ZW5zaW9uLWluLWxpYi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LW1ha2UtZnJhbWV3b3JrLWJlYW4tYXZhaWxhYmxlLWZvci1pbmplY3Rpb24tZXh0ZW5zaW9uLWluLWxpYiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvbmV3LWJlYW4tcmVnaXN0cmF0aW9uLWV4dGVuc2lvbi1pbi1saWIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvbmV3LWJlYW4tcmVnaXN0cmF0aW9uLWV4dGVuc2lvbi1pbi1saWIvYnVpbGQueG1sCmluZGV4IGViYTE2ODcuLjdiODEzMmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL25ldy1iZWFuLXJlZ2lzdHJhdGlvbi1leHRlbnNpb24taW4tbGliL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24tZXh0ZW5zaW9uLWluLWxpYi9idWlsZC54bWwKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iY2xpZW50L3Rlc3QvY2xpZW50IiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8IS0tIGNvbXBpbGUgYW5kIGJ1aWxkIGV4dGVuc2lvbiBqYXIgLS0+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgpAQCAtNTUsNyArNTUsNyBAQAogICAgICAgICAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3NlcnZpY2VzL2pha2FydGEuZW50ZXJwcmlzZS5pbmplY3Quc3BpLkV4dGVuc2lvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgICAgICAgIDxjb3B5IGZpbGU9IiR7YmVhbnMueG1sfSIKLQkgICAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9iZWFucy54bWwiCisgICAgICAgICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvYmVhbnMueG1sIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICAgICAgPGphciBqYXJmaWxlPSJsaWIvJHtleHRlbnNpb24uamFyfSIgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIHVwZGF0ZT0idHJ1ZSIgaW5jbHVkZXMgPSIke2J1aWxkLmNsYXNzZXMuZGlyfSI+CiAgICAgICAgICAgICA8bWV0YWluZiBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIj4KQEAgLTc2LDcgKzc2LDcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KQEAgLTg1LDE0ICs4NSwxNCBAQAogICAgICAgICA8amF2YWMgc3JjZGlyPSJjbGllbnQiIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJ0ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9InRlc3QuY2xpZW50LldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtMTA0LDEwICsxMDQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24tZXh0ZW5zaW9uLWluLWxpYi9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvbmV3LWJlYW4tcmVnaXN0cmF0aW9uLWV4dGVuc2lvbi1pbi1saWIvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQppbmRleCAzODRjMzgzLi45OWUwNmJjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24tZXh0ZW5zaW9uLWluLWxpYi9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL25ldy1iZWFuLXJlZ2lzdHJhdGlvbi1leHRlbnNpb24taW4tbGliL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgcG9ydGFibGUgZXh0ZW5zaW9ucyIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTU0LDcgKzU0LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKQEAgLTY0LDcgKzY0LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICArICIvbXl1cmwiOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9wZW5pbmcgY29ubmVjdGlvbiB0byAiICsgdXJsKTsKQEAgLTEwMywxMCArMTAzLDEwIEBACiAgICAgICAgICAgICBpZiAoRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24tZXh0ZW5zaW9uLWluLWxpYi9leHRlbnNpb24vdGVzdC9leHRlbnNpb24vRnJhbWV3b3JrU2VydmljZUZhY3RvcnkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL25ldy1iZWFuLXJlZ2lzdHJhdGlvbi1leHRlbnNpb24taW4tbGliL2V4dGVuc2lvbi90ZXN0L2V4dGVuc2lvbi9GcmFtZXdvcmtTZXJ2aWNlRmFjdG9yeS5qYXZhCmluZGV4IDQ0ZTJmN2YuLjFkODRhNzUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL25ldy1iZWFuLXJlZ2lzdHJhdGlvbi1leHRlbnNpb24taW4tbGliL2V4dGVuc2lvbi90ZXN0L2V4dGVuc2lvbi9GcmFtZXdvcmtTZXJ2aWNlRmFjdG9yeS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL25ldy1iZWFuLXJlZ2lzdHJhdGlvbi1leHRlbnNpb24taW4tbGliL2V4dGVuc2lvbi90ZXN0L2V4dGVuc2lvbi9GcmFtZXdvcmtTZXJ2aWNlRmFjdG9yeS5qYXZhCkBAIC0yNSwxMSArMjUsMTEgQEAKIAogCiAvKioKLSAqIEEgc2ltcGxlIFNlcnZpY2UgRmFjdG9yeSBjbGFzcyB0aGF0IHByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIG9idGFpbi9nZXQgCi0gKiByZWZlcmVuY2VzIHRvIGEgc2VydmljZSBpbXBsZW1lbnRhdGlvbiAob2J0YWluZWQgZnJvbSBhIHNlcnZpY2UgcmVnaXN0cnkpIAorICogQSBzaW1wbGUgU2VydmljZSBGYWN0b3J5IGNsYXNzIHRoYXQgcHJvdmlkZXMgdGhlIGFiaWxpdHkgdG8gb2J0YWluL2dldAorICogcmVmZXJlbmNlcyB0byBhIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gKG9idGFpbmVkIGZyb20gYSBzZXJ2aWNlIHJlZ2lzdHJ5KQogICogYW5kIGFsc28gcHJvdmlkZXMgYSBtZWNoYW5pc20gdG8gdW5nZXQgb3IgcmV0dXJuIGEgc2VydmljZSBhZnRlciBpdHMgdXNhZ2UKICAqIGlzIGNvbXBsZXRlZC4KLSAqIAorICoKICAqIEBhdXRob3IgU2l2YWt1bWFyIFRoeWFnYXJhamFuCiAgKi8KIHB1YmxpYyBjbGFzcyBGcmFtZXdvcmtTZXJ2aWNlRmFjdG9yeSB7CkBAIC00MSwxMSArNDEsMTEgQEAKICAgICBwdWJsaWMgc3RhdGljIE9iamVjdCBnZXRTZXJ2aWNlKGZpbmFsIFR5cGUgdHlwZSwgZmluYWwgRnJhbWV3b3JrU2VydmljZSBmcyl7CiAgICAgICAgIGRlYnVnKCJnZXRTZXJ2aWNlICIgKyB0eXBlICsgIiBGUzoiICsgZnMpOwogICAgICAgICBPYmplY3QgaW5zdGFuY2UgPSBsb29rdXBTZXJ2aWNlKHR5cGUsIGZzLndhaXRUaW1lb3V0KCkpOwotICAgICAgICAKLSAgICAgICAgLy9JZiB0aGUgc2VydmljZSBpcyBtYXJrZWQgYXMgZHluYW1pYywgd2hlbiBhIG1ldGhvZCBpcyBpbnZva2VkIG9uIGEgCi0gICAgICAgIC8vYSBzZXJ2aWNlIHByb3h5LCBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gZ2V0IGEgcmVmZXJlbmNlIHRvIHRoZSBzZXJ2aWNlIAorCisgICAgICAgIC8vSWYgdGhlIHNlcnZpY2UgaXMgbWFya2VkIGFzIGR5bmFtaWMsIHdoZW4gYSBtZXRob2QgaXMgaW52b2tlZCBvbiBhCisgICAgICAgIC8vYSBzZXJ2aWNlIHByb3h5LCBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gZ2V0IGEgcmVmZXJlbmNlIHRvIHRoZSBzZXJ2aWNlCiAgICAgICAgIC8vYW5kIHRoZW4gdGhlIG1ldGhvZCBpcyBpbnZva2VkIG9uIHRoZSBuZXdseSBvYnRhaW5lZCBzZXJ2aWNlLgotICAgICAgICAvL1RoaXMgc2NoZW1lIHNob3VsZCB3b3JrIGZvciBzdGF0bGVzcyBhbmQvb3IgaWRlbXBvdGVudCBzZXJ2aWNlIAorICAgICAgICAvL1RoaXMgc2NoZW1lIHNob3VsZCB3b3JrIGZvciBzdGF0bGVzcyBhbmQvb3IgaWRlbXBvdGVudCBzZXJ2aWNlCiAgICAgICAgIC8vaW1wbGVtZW50YXRpb25zIHRoYXQgaGF2ZSBhIGR5bmFtaWMgbGlmZWN5Y2xlIHRoYXQgaXMgbm90IGxpbmtlZCB0bwogICAgICAgICAvL3RoZSBzZXJ2aWNlIGNvbnN1bWVyIFtzZXJ2aWNlIGR5bmFtaXNtXQogICAgICAgICBpZiAoZnMuZHluYW1pYygpKSB7CkBAIC01OSwxNCArNTksMTQgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9OwogICAgICAgICAgICAgaW5zdGFuY2UgPSAgUHJveHkubmV3UHJveHlJbnN0YW5jZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBDbGFzc1tdeyhDbGFzcyl0eXBlfSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3h5SW52SG5kbHIpOyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IENsYXNzW117KENsYXNzKXR5cGV9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm94eUludkhuZGxyKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gaW5zdGFuY2U7CiAgICAgfQogCi0gICAgLy9OT1RFOmhhcmQtY29kZWQgc2VydmljZSBpbnN0YW50aWF0aW9uIGZvciB0aGlzIHRlc3QsIAorICAgIC8vTk9URTpoYXJkLWNvZGVkIHNlcnZpY2UgaW5zdGFudGlhdGlvbiBmb3IgdGhpcyB0ZXN0LAogICAgIC8vYnV0IGlkZWFsbHkgc2hvdWxkIGdldCB0aGUKICAgICAvL3NlcnZpY2UgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgZnJhbWV3b3JrJ3Mgc2VydmljZSByZWdpc3RyeQogICAgIHByaXZhdGUgc3RhdGljIE9iamVjdCBsb29rdXBTZXJ2aWNlKFR5cGUgdHlwZSwgaW50IHdhaXRUaW1lb3V0KSB7CkBAIC05MCwxNSArOTAsMTUgQEAKICAgICAvKioKICAgICAgKiBVbmdldCB0aGUgc2VydmljZQogICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCB1bmdldFNlcnZpY2UoT2JqZWN0IHNlcnZpY2VJbnN0YW5jZSwgCisgICAgcHVibGljIHN0YXRpYyB2b2lkIHVuZ2V0U2VydmljZShPYmplY3Qgc2VydmljZUluc3RhbmNlLAogICAgICAgICAgICAgVHlwZSB0eXBlLCBGcmFtZXdvcmtTZXJ2aWNlIGZyYW1ld29ya1NlcnZpY2UpewogICAgICAgICAvL3VuZ2V0IHRoZSBzZXJ2aWNlIGluc3RhbmNlIGZyb20gdGhlIHNlcnZpY2UgcmVnaXN0cnkKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGRlYnVnKFN0cmluZyBzdHJpbmcpIHsKICAgICAgICAgaWYoREVCVUdfRU5BQkxFRCkKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VydmljZUZhY3Rvcnk6OiAiICsgc3RyaW5nKTsKICAgICB9Ci0gICAgCisKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvbmV3LWJlYW4tcmVnaXN0cmF0aW9uLWV4dGVuc2lvbi1pbi1saWIvZXh0ZW5zaW9uL3Rlc3QvZXh0ZW5zaW9uL1NlcnZpY2VGcmFtZXdvcmtFeHRlbnNpb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL25ldy1iZWFuLXJlZ2lzdHJhdGlvbi1leHRlbnNpb24taW4tbGliL2V4dGVuc2lvbi90ZXN0L2V4dGVuc2lvbi9TZXJ2aWNlRnJhbWV3b3JrRXh0ZW5zaW9uLmphdmEKaW5kZXggZTAwNmRhMy4uMzEyNWVkNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvbmV3LWJlYW4tcmVnaXN0cmF0aW9uLWV4dGVuc2lvbi1pbi1saWIvZXh0ZW5zaW9uL3Rlc3QvZXh0ZW5zaW9uL1NlcnZpY2VGcmFtZXdvcmtFeHRlbnNpb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24tZXh0ZW5zaW9uLWluLWxpYi9leHRlbnNpb24vdGVzdC9leHRlbnNpb24vU2VydmljZUZyYW1ld29ya0V4dGVuc2lvbi5qYXZhCkBAIC00Niw4ICs0Niw4IEBACiAKIC8qKgogICogQSBwb3J0YWJsZSBleHRlbnNpb24gdGhhdCBzdXBwb3J0cyBpbmplY3Rpb24gb2YgY3VzdG9tIGZyYW1ld29yawotICogc2VydmljZXMgaW50byBCZWFucy4gCi0gKiAKKyAqIHNlcnZpY2VzIGludG8gQmVhbnMuCisgKgogICogQGF1dGhvciBTaXZha3VtYXIgVGh5YWdhcmFqYW4KICAqLwogcHVibGljIGNsYXNzIFNlcnZpY2VGcmFtZXdvcmtFeHRlbnNpb24gaW1wbGVtZW50cyBFeHRlbnNpb257CkBAIC01Niw3ICs1Niw3IEBACiAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGFmdGVyQmVhbkRpc2NvdmVyeUNhbGxlZCA9IGZhbHNlOwogICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBhZnRlclByb2Nlc3NCZWFuQ2FsbGVkID0gZmFsc2U7CiAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIHByb2Nlc3NBbm5vdGF0ZWRUeXBlQ2FsbGVkID0gZmFsc2U7Ci0gICAgCisKICAgICAvKgogICAgICAqIEEgbWFwIG9mIEZyYW1ld29yayBTZXJ2aWNlIFR5cGVzIHRvIGJlIGluamVjdGVkIGFuZCBhZGRpdGlvbmFsIG1ldGFkYXRhCiAgICAgICogYWJvdXQgdGhlIEZyYW1ld29ya1NlcnZpY2UgdG8gYmUgaW5qZWN0ZWQuCkBAIC03NiwyNyArNzYsMjcgQEAKICAgICAgICAgZGVidWcoIlByb2Nlc3MgYW5ub3RhdGVkIHR5cGUiICsgcGF0LmdldEFubm90YXRlZFR5cGUoKS5nZXRCYXNlVHlwZSgpKTsKICAgICAgICAgcHJvY2Vzc0Fubm90YXRlZFR5cGVDYWxsZWQgPSB0cnVlOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIE9ic2VydmVyIGZvciA8Y29kZT5Qcm9jZXNzSW5qZWN0aW9uVGFyZ2V0PC9jb2RlPiBldmVudHMuIFRoaXMgZXZlbnQgaXMKLSAgICAgKiBmaXJlZCBmb3IgZXZlcnkgSmF2YSBFRSBjb21wb25lbnQgY2xhc3Mgc3VwcG9ydGluZyBpbmplY3Rpb24gdGhhdCBtYXkgYmUgCi0gICAgICogaW5zdGFudGlhdGVkIGJ5IHRoZSBjb250YWluZXIgYXQgcnVudGltZS4gSW5qZWN0aW9ucyBwb2ludHMgb2YgZXZlcnkgCi0gICAgICogZGlzY292ZXJlZCBlbmFibGVkIEphdmEgRUUgY29tcG9uZW50IGlzIGNoZWNrZWQgdG8gc2VlIGlmIHRoZXJlIGlzIGEgCi0gICAgICogcmVxdWVzdCBmb3IgaW5qZWN0aW9uIG9mIGEgZnJhbWV3b3JrIHNlcnZpY2UuIAorICAgICAqIGZpcmVkIGZvciBldmVyeSBKYXZhIEVFIGNvbXBvbmVudCBjbGFzcyBzdXBwb3J0aW5nIGluamVjdGlvbiB0aGF0IG1heSBiZQorICAgICAqIGluc3RhbnRpYXRlZCBieSB0aGUgY29udGFpbmVyIGF0IHJ1bnRpbWUuIEluamVjdGlvbnMgcG9pbnRzIG9mIGV2ZXJ5CisgICAgICogZGlzY292ZXJlZCBlbmFibGVkIEphdmEgRUUgY29tcG9uZW50IGlzIGNoZWNrZWQgdG8gc2VlIGlmIHRoZXJlIGlzIGEKKyAgICAgKiByZXF1ZXN0IGZvciBpbmplY3Rpb24gb2YgYSBmcmFtZXdvcmsgc2VydmljZS4KICAgICAgKi8KICAgICB2b2lkIGFmdGVyUHJvY2Vzc0luamVjdGlvblRhcmdldChAT2JzZXJ2ZXMgUHJvY2Vzc0luamVjdGlvblRhcmdldDw/PiBwYil7CiAgICAgICAgIGRlYnVnKCJBZnRlclByb2Nlc3NJbmplY3Rpb25UYXJnZXQiICsgcGIuZ2V0QW5ub3RhdGVkVHlwZSgpLmdldEJhc2VUeXBlKCkpOwogICAgICAgICBTZXQ8SW5qZWN0aW9uUG9pbnQ+IGlwcyA9IHBiLmdldEluamVjdGlvblRhcmdldCgpLmdldEluamVjdGlvblBvaW50cygpOwogICAgICAgICBkaXNjb3ZlclNlcnZpY2VJbmplY3Rpb25Qb2ludHMoaXBzKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBPYnNlcnZlciBmb3IgPGNvZGU+UHJvY2Vzc0luamVjdGlvblRhcmdldDwvY29kZT4gZXZlbnRzLiBUaGlzIGV2ZW50IGlzCi0gICAgICogZmlyZWQgZmlyZSBhbiBldmVudCBmb3IgZWFjaCBlbmFibGVkIGJlYW4sIGludGVyY2VwdG9yIG9yIGRlY29yYXRvciAKLSAgICAgKiBkZXBsb3llZCBpbiBhIGJlYW4gYXJjaGl2ZSwgYmVmb3JlIHJlZ2lzdGVyaW5nIHRoZSBCZWFuIG9iamVjdC4gCi0gICAgICogSW5qZWN0aW9ucyBwb2ludHMgb2YgZXZlcnkgZGlzY292ZXJlZCBlbmFibGVkIEphdmEgRUUgY29tcG9uZW50IGlzIAotICAgICAqIGNoZWNrZWQgdG8gc2VlIGlmIHRoZXJlIGlzIGEgcmVxdWVzdCBmb3IgaW5qZWN0aW9uIG9mIGEgZnJhbWV3b3JrIAotICAgICAqIHNlcnZpY2UuIAorICAgICAqIGZpcmVkIGZpcmUgYW4gZXZlbnQgZm9yIGVhY2ggZW5hYmxlZCBiZWFuLCBpbnRlcmNlcHRvciBvciBkZWNvcmF0b3IKKyAgICAgKiBkZXBsb3llZCBpbiBhIGJlYW4gYXJjaGl2ZSwgYmVmb3JlIHJlZ2lzdGVyaW5nIHRoZSBCZWFuIG9iamVjdC4KKyAgICAgKiBJbmplY3Rpb25zIHBvaW50cyBvZiBldmVyeSBkaXNjb3ZlcmVkIGVuYWJsZWQgSmF2YSBFRSBjb21wb25lbnQgaXMKKyAgICAgKiBjaGVja2VkIHRvIHNlZSBpZiB0aGVyZSBpcyBhIHJlcXVlc3QgZm9yIGluamVjdGlvbiBvZiBhIGZyYW1ld29yaworICAgICAqIHNlcnZpY2UuCiAgICAgICovCiAgICAgdm9pZCBhZnRlclByb2Nlc3NCZWFuKEBPYnNlcnZlcyBQcm9jZXNzQmVhbiBwYil7CiAgICAgICAgIGFmdGVyUHJvY2Vzc0JlYW5DYWxsZWQgPSB0cnVlOwpAQCAtMTA3LDIyICsxMDcsMjIgQEAKIAogICAgIC8qCiAgICAgICogRGlzY292ZXIgaW5qZWN0aW9uIHBvaW50cyB3aGVyZSB0aGUgZnJhbWV3b3JrIHNlcnZpY2UgaXMgcmVxdWVzdGVkCi0gICAgICogdGhyb3VnaCB0aGUgPGNvZGU+RnJhbWV3b3JrU2VydmljZTwvY29kZT4gcXVhbGlmaWVyIGFuZCBhIG1hcCBpcyAKKyAgICAgKiB0aHJvdWdoIHRoZSA8Y29kZT5GcmFtZXdvcmtTZXJ2aWNlPC9jb2RlPiBxdWFsaWZpZXIgYW5kIGEgbWFwIGlzCiAgICAgICogcG9wdWxhdGVkIGZvciBhbGwgZnJhbWV3b3JrIHNlcnZpY2VzIHRoYXQgaGF2ZSBiZWVuIHJlcXVlc3RlZC4KICAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgZGlzY292ZXJTZXJ2aWNlSW5qZWN0aW9uUG9pbnRzKFNldDxJbmplY3Rpb25Qb2ludD4gaXBzKSB7Ci0gICAgICAgIGZvciAoSXRlcmF0b3I8SW5qZWN0aW9uUG9pbnQ+IGl0ZXJhdG9yID0gaXBzLml0ZXJhdG9yKCk7IAorICAgICAgICBmb3IgKEl0ZXJhdG9yPEluamVjdGlvblBvaW50PiBpdGVyYXRvciA9IGlwcy5pdGVyYXRvcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmhhc05leHQoKTspIHsKICAgICAgICAgICAgIEluamVjdGlvblBvaW50IGluamVjdGlvblBvaW50ID0gaXRlcmF0b3IubmV4dCgpOwogICAgICAgICAgICAgU2V0PEFubm90YXRpb24+IHF1YWxpZnMgPSBpbmplY3Rpb25Qb2ludC5nZXRRdWFsaWZpZXJzKCk7Ci0gICAgICAgICAgICBmb3IgKEl0ZXJhdG9yPEFubm90YXRpb24+IHF1YWxpZkl0ZXIgPSBxdWFsaWZzLml0ZXJhdG9yKCk7IAorICAgICAgICAgICAgZm9yIChJdGVyYXRvcjxBbm5vdGF0aW9uPiBxdWFsaWZJdGVyID0gcXVhbGlmcy5pdGVyYXRvcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1YWxpZkl0ZXIuaGFzTmV4dCgpOykgewogICAgICAgICAgICAgICAgIEFubm90YXRpb24gYW5ub3RhdGlvbiA9IHF1YWxpZkl0ZXIubmV4dCgpOwogICAgICAgICAgICAgICAgIGlmIChhbm5vdGF0aW9uLmFubm90YXRpb25UeXBlKCkuZXF1YWxzKEZyYW1ld29ya1NlcnZpY2UuY2xhc3MpKXsKICAgICAgICAgICAgICAgICAgICAgcHJpbnREZWJ1Z0ZvckluamVjdGlvblBvaW50KGluamVjdGlvblBvaW50KTsKICAgICAgICAgICAgICAgICAgICAgLy9LZWVwIHRyYWNrIG9mIHNlcnZpY2UtdHlwZSBhbmQgaXRzIGF0dHJpYnV0ZXMKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tIEluamVjdGlvbiByZXF1ZXN0ZWQgZm9yICIgKwotICAgICAgICAgICAgICAgICAgICAJCSJmcmFtZXdvcmsgc2VydmljZSB0eXBlICIgKyBpbmplY3Rpb25Qb2ludC5nZXRUeXBlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZnJhbWV3b3JrIHNlcnZpY2UgdHlwZSAiICsgaW5qZWN0aW9uUG9pbnQuZ2V0VHlwZSgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGFuZCBhbm5vdGF0ZWQgd2l0aCBkeW5hbWljPSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGluamVjdGlvblBvaW50LmdldEFubm90YXRlZCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0QW5ub3RhdGlvbihGcmFtZXdvcmtTZXJ2aWNlLmNsYXNzKQpAQCAtMTM0LDMxICsxMzQsMzEgQEAKICAgICAgICAgICAgICAgICAgICAgLy9BZGQgdG8gbGlzdCBvZiBmcmFtZXdvcmsgc2VydmljZXMgdG8gYmUgaW5qZWN0ZWQKICAgICAgICAgICAgICAgICAgICAgVHlwZSBrZXkgPSBpbmplY3Rpb25Qb2ludC5nZXRUeXBlKCk7CiAgICAgICAgICAgICAgICAgICAgIEZyYW1ld29ya1NlcnZpY2UgdmFsdWUgPSBpbmplY3Rpb25Qb2ludC5nZXRBbm5vdGF0ZWQoKQotICAgICAgICAgICAgICAgICAgICAuZ2V0QW5ub3RhdGlvbihGcmFtZXdvcmtTZXJ2aWNlLmNsYXNzKTsgCisgICAgICAgICAgICAgICAgICAgIC5nZXRBbm5vdGF0aW9uKEZyYW1ld29ya1NlcnZpY2UuY2xhc3MpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWZyYW1ld29ya1NlcnZpY2VzVG9CZUluamVjdGVkLmNvbnRhaW5zS2V5KGtleSkpewogICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWV3b3JrU2VydmljZXNUb0JlSW5qZWN0ZWQucHV0KGtleSwgbmV3IEhhc2hTZXQ8RnJhbWV3b3JrU2VydmljZT4oKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgZnJhbWV3b3JrU2VydmljZXNUb0JlSW5qZWN0ZWQuZ2V0KGtleSkuYWRkKHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGZyYW1ld29ya1NlcnZpY2VzVG9CZUluamVjdGVkLmdldChrZXkpLnNpemUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCiAgICAgLyoqCi0gICAgICogT2JzZXJ2ZXIgZm9yIDxjb2RlPkFmdGVyQmVhbkRpc2NvdmVyeTwvY29kZT4gZXZlbnRzLiBUaGlzIAorICAgICAqIE9ic2VydmVyIGZvciA8Y29kZT5BZnRlckJlYW5EaXNjb3Zlcnk8L2NvZGU+IGV2ZW50cy4gVGhpcwogICAgICAqIG9ic2VydmVyIG1ldGhvZCBpcyB1c2VkIHRvIHJlZ2lzdGVyIDxjb2RlPkJlYW48L2NvZGU+cyBmb3IgdGhlIGZyYW1ld29yawotICAgICAqIHNlcnZpY2VzIHRoYXQgaGF2ZSBiZWVuIHJlcXVlc3RlZCB0byBiZSBpbmplY3RlZC4gCisgICAgICogc2VydmljZXMgdGhhdCBoYXZlIGJlZW4gcmVxdWVzdGVkIHRvIGJlIGluamVjdGVkLgogICAgICAqLwogICAgIHZvaWQgYWZ0ZXJCZWFuRGlzY292ZXJ5KEBPYnNlcnZlcyBBZnRlckJlYW5EaXNjb3ZlcnkgYWJkKXsKICAgICAgICAgYWZ0ZXJCZWFuRGlzY292ZXJ5Q2FsbGVkID0gdHJ1ZTsKICAgICAgICAgZGVidWcoIkFmdGVyIEJlYW4gRGlzY292ZXJ5Iik7Ci0gICAgICAgIGZvciAoSXRlcmF0b3I8VHlwZT4gaXRlcmF0b3IgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2VzVG9CZUluamVjdGVkLmtleVNldCgpLml0ZXJhdG9yKCk7IAorICAgICAgICBmb3IgKEl0ZXJhdG9yPFR5cGU+IGl0ZXJhdG9yID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlc1RvQmVJbmplY3RlZC5rZXlTZXQoKS5pdGVyYXRvcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IuaGFzTmV4dCgpOykgewogICAgICAgICAgICAgVHlwZSB0eXBlID0gIGl0ZXJhdG9yLm5leHQoKTsKICAgICAgICAgICAgIC8vSWYgdGhlIGluamVjdGlvbiBwb2ludCdzIHR5cGUgaXMgbm90IGEgQ2xhc3Mgb3IgSW50ZXJmYWNlLCB3ZQotICAgICAgICAgICAgLy9kb24ndCBrbm93IGhvdyB0byBoYW5kbGUgdGhpcy4gCisgICAgICAgICAgICAvL2Rvbid0IGtub3cgaG93IHRvIGhhbmRsZSB0aGlzLgogICAgICAgICAgICAgaWYgKCEodHlwZSBpbnN0YW5jZW9mIENsYXNzKSkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5rbm93biB0eXBlOiIgKyB0eXBlKTsKICAgICAgICAgICAgICAgICBhYmQuYWRkRGVmaW5pdGlvbkVycm9yKG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigKQEAgLTE3MywxMCArMTczLDEwIEBACiAKICAgICAvKgogICAgICAqIEFkZCBhIDxjb2RlPkJlYW48L2NvZGU+IGZvciB0aGUgZnJhbWV3b3JrIHNlcnZpY2UgcmVxdWVzdGVkLiBJbnN0YW50aWF0ZQotICAgICAqIG9yIGRpc2NvdmVyIHRoZSBiZWFuIGZyb20gdGhlIGZyYW1ld29yayBzZXJ2aWNlIHJlZ2lzdHJ5LCAKKyAgICAgKiBvciBkaXNjb3ZlciB0aGUgYmVhbiBmcm9tIHRoZSBmcmFtZXdvcmsgc2VydmljZSByZWdpc3RyeSwKICAgICAgKiBhbmQgcmV0dXJuIGEgcmVmZXJlbmNlIHRvIHRoZSBzZXJ2aWNlIGlmIGEgZHluYW1pYyByZWZlcmVuY2UgaXMgcmVxdWVzdGVkLgogICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBhZGRCZWFuKEFmdGVyQmVhbkRpc2NvdmVyeSBhYmQsIGZpbmFsIFR5cGUgdHlwZSwgCisgICAgcHJpdmF0ZSB2b2lkIGFkZEJlYW4oQWZ0ZXJCZWFuRGlzY292ZXJ5IGFiZCwgZmluYWwgVHlwZSB0eXBlLAogICAgICAgICAgICAgZmluYWwgU2V0PEZyYW1ld29ya1NlcnZpY2U+IGZyYW1ld29ya1NlcnZpY2VzKSB7CiAgICAgICAgIGZvciAoSXRlcmF0b3I8RnJhbWV3b3JrU2VydmljZT4gaXRlcmF0b3IgPSBmcmFtZXdvcmtTZXJ2aWNlcy5pdGVyYXRvcigpOyBpdGVyYXRvcgogICAgICAgICAgICAgICAgIC5oYXNOZXh0KCk7KSB7CkBAIC0xODUsNyArMTg1LDcgQEAKICAgICAgICAgICAgIGFiZC5hZGRCZWFuKG5ldyBGcmFtZXdvcmtTZXJ2aWNlQmVhbih0eXBlLCBmcmFtZXdvcmtTZXJ2aWNlKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKIAogICAgIHByaXZhdGUgZmluYWwgY2xhc3MgRnJhbWV3b3JrU2VydmljZUJlYW4gaW1wbGVtZW50cyBCZWFuIHsKICAgICAgICAgcHJpdmF0ZSBmaW5hbCBUeXBlIHR5cGU7CkBAIC0yMjQsNyArMjI0LDcgQEAKICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKICAgICAgICAgICAgIHJldHVybiB0eXBlICsgIl9keW5hbWljXyIgKyBmcmFtZXdvcmtTZXJ2aWNlLmR5bmFtaWMoKQotICAgICAgICAgICAgICAgICAgICArICJfY3JpdGVyaWFfIiArIGZyYW1ld29ya1NlcnZpY2Uuc2VydmljZUNyaXRlcmlhKCkgCisgICAgICAgICAgICAgICAgICAgICsgIl9jcml0ZXJpYV8iICsgZnJhbWV3b3JrU2VydmljZS5zZXJ2aWNlQ3JpdGVyaWEoKQogICAgICAgICAgICAgICAgICAgICArICJfd2FpdFRpbWVvdXQiICsgZnJhbWV3b3JrU2VydmljZS53YWl0VGltZW91dCgpOwogICAgICAgICB9CiAKQEAgLTIzNSw3ICsyMzUsNyBAQAogICAgICAgICAgICAgcy5hZGQobmV3IEFubm90YXRpb25MaXRlcmFsPEFueT4oKSB7fSk7CiAgICAgICAgICAgICAvL0FkZCB0aGUgYXBwcm9wcmlhdGUgcGFyYW1ldGVycyB0byB0aGUgRnJhbWV3b3JrU2VydmljZSBxdWFsaWZpZXIKICAgICAgICAgICAgIC8vYXMgcmVxdWVzdGVkIGluIHRoZSBpbmplY3Rpb24gcG9pbnQKLSAgICAgICAgICAgIHMuYWRkKG5ldyBGcmFtZXdvcmtTZXJ2aWNlUXVhbGlmaWVyVHlwZShmcmFtZXdvcmtTZXJ2aWNlKSk7IAorICAgICAgICAgICAgcy5hZGQobmV3IEZyYW1ld29ya1NlcnZpY2VRdWFsaWZpZXJUeXBlKGZyYW1ld29ya1NlcnZpY2UpKTsKICAgICAgICAgICAgIHJldHVybiBzOwogICAgICAgICB9CiAKQEAgLTI3Miw3ICsyNzIsNyBAQAogICAgICAqIFJlcHJlc2VudHMgYW4gYW5ub3RhdGlvbiB0eXBlIGluc3RhbmNlIG9mIEZyYW1ld29ya1NlcnZpY2UKICAgICAgKiB3aXRoIHBhcmFtZXRlcnMgZXF1YWwgdG8gdGhvc2Ugc3BlY2lmaWVkIGluIHRoZSBpbmplY3Rpb24gcG9pbnQKICAgICAgKi8KLSAgICBwcml2YXRlIGZpbmFsIGNsYXNzIEZyYW1ld29ya1NlcnZpY2VRdWFsaWZpZXJUeXBlIAorICAgIHByaXZhdGUgZmluYWwgY2xhc3MgRnJhbWV3b3JrU2VydmljZVF1YWxpZmllclR5cGUKICAgICBleHRlbmRzIEFubm90YXRpb25MaXRlcmFsPEZyYW1ld29ya1NlcnZpY2U+IGltcGxlbWVudHMgRnJhbWV3b3JrU2VydmljZSB7CiAgICAgICAgIHByaXZhdGUgU3RyaW5nIHNlcnZpY2VDcml0ZXJpYSA9ICIiOwogICAgICAgICBwcml2YXRlIGJvb2xlYW4gZHluYW1pYyA9IGZhbHNlOwpAQCAtMjk4LDExICsyOTgsMTEgQEAKICAgICAgICAgICAgIHJldHVybiB0aGlzLndhaXRUaW1lb3V0OwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIGRlYnVnKFN0cmluZyBzdHJpbmcpIHsKICAgICAgICAgaWYoREVCVUdfRU5BQkxFRCkKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTXlFeHRlbnNpb246OiAiICsgc3RyaW5nKTsKLSAgICAgICAgCisKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgcHJpbnREZWJ1Z0ZvckluamVjdGlvblBvaW50KEluamVjdGlvblBvaW50IGluamVjdGlvblBvaW50KSB7CkBAIC0zMTksNSArMzE5LDUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBvaW50CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL25ldy1iZWFuLXJlZ2lzdHJhdGlvbi1leHRlbnNpb24taW4tbGliL2V4dGVuc2lvbi90ZXN0L2Z3ay9GcmFtZXdvcmtTZXJ2aWNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24tZXh0ZW5zaW9uLWluLWxpYi9leHRlbnNpb24vdGVzdC9md2svRnJhbWV3b3JrU2VydmljZS5qYXZhCmluZGV4IDY4ZWY0NmQuLmNmYTcwZmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL25ldy1iZWFuLXJlZ2lzdHJhdGlvbi1leHRlbnNpb24taW4tbGliL2V4dGVuc2lvbi90ZXN0L2Z3ay9GcmFtZXdvcmtTZXJ2aWNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvbmV3LWJlYW4tcmVnaXN0cmF0aW9uLWV4dGVuc2lvbi1pbi1saWIvZXh0ZW5zaW9uL3Rlc3QvZndrL0ZyYW1ld29ya1NlcnZpY2UuamF2YQpAQCAtMzMsMjYgKzMzLDI2IEBACiAKIC8qKgogICogQSBDREkgUXVhbGlmaWVyIHRoYXQgcmVwcmVzZW50cyBhIHJlZmVyZW5jZSB0byBhCi0gKiBzZXJ2aWNlIGluIHRoZSBmcmFtZXdvcmsuIElmIHRoaXMgcXVhbGlmaWVycyBhbm5vdGF0ZXMgYW4gaW5qZWN0aW9uIHBvaW50LCAKKyAqIHNlcnZpY2UgaW4gdGhlIGZyYW1ld29yay4gSWYgdGhpcyBxdWFsaWZpZXJzIGFubm90YXRlcyBhbiBpbmplY3Rpb24gcG9pbnQsCiAgKiB0aGUgZnJhbWV3b3JrIGV4dGVuc2lvbiBkaXNjb3ZlcnMgYW5kIGluc3RhbnRpYXRlcwogICogYSBzZXJ2aWNlIGltcGxlbWVudGluZyB0aGUgc2VydmljZSBpbnRlcmZhY2UgdHlwZSBvZiB0aGUgaW5qZWN0aW9uIHBvaW50CiAgKiBhbmQgbWFrZXMgaXQgYXZhaWxhYmxlIGZvciBpbmplY3Rpb24gdG8gdGhhdCBpbmplY3Rpb24gcG9pbnQuCi0gKi8gCisgKi8KIHB1YmxpYyBAaW50ZXJmYWNlIEZyYW1ld29ya1NlcnZpY2UgewogICAgIC8qKgogICAgICAqIERldGVybWluZXMgaWYgdGhlIHNlcnZpY2UgcmVmZXJlbmNlIHRoYXQgaXMgaW5qZWN0ZWQKICAgICAgKiByZWZlcnMgdG8gYSBkeW5hbWljIHByb3h5IG9yIHRoZSBhY3R1YWwgc2VydmljZSByZWZlcmVuY2Ugb2J0YWluZWQKLSAgICAgKiBmcm9tIHRoZSBmcmFtZXdvcmsgc2VydmljZSByZWdpc3RyeSAgCisgICAgICogZnJvbSB0aGUgZnJhbWV3b3JrIHNlcnZpY2UgcmVnaXN0cnkKICAgICAgKi8KICAgIGJvb2xlYW4gZHluYW1pYygpIGRlZmF1bHQgZmFsc2U7IC8vZHluYW1pYwotICAgCisKICAgIC8qKgogICAgICogc2VydmljZSBkaXNjb3ZlcnkgY3JpdGVyaWEKICAgICAqLwotICAgU3RyaW5nIHNlcnZpY2VDcml0ZXJpYSgpIGRlZmF1bHQgIiI7IAotICAgCisgICBTdHJpbmcgc2VydmljZUNyaXRlcmlhKCkgZGVmYXVsdCAiIjsKKwogICAgLyoqCiAgICAgKiB3YWl0IHNwZWNpZmllZCBpbiBtaWxsaXMuIC0xIGluZGljYXRlcyBpbmRlZmluaXRlIHdhaXQKICAgICAqLwotICAgaW50IHdhaXRUaW1lb3V0KCkgZGVmYXVsdCAtMTsgCisgICBpbnQgd2FpdFRpbWVvdXQoKSBkZWZhdWx0IC0xOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvbmV3LWJlYW4tcmVnaXN0cmF0aW9uLWV4dGVuc2lvbi1pbi1saWIvZXh0ZW5zaW9uL3Rlc3QvZndrL1NvbWVGd2tTZXJ2aWNlSW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvbmV3LWJlYW4tcmVnaXN0cmF0aW9uLWV4dGVuc2lvbi1pbi1saWIvZXh0ZW5zaW9uL3Rlc3QvZndrL1NvbWVGd2tTZXJ2aWNlSW1wbC5qYXZhCmluZGV4IDY0Mzc0NGQuLjg5MzUzOTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL25ldy1iZWFuLXJlZ2lzdHJhdGlvbi1leHRlbnNpb24taW4tbGliL2V4dGVuc2lvbi90ZXN0L2Z3ay9Tb21lRndrU2VydmljZUltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24tZXh0ZW5zaW9uLWluLWxpYi9leHRlbnNpb24vdGVzdC9md2svU29tZUZ3a1NlcnZpY2VJbXBsLmphdmEKQEAgLTE3LDcgKzE3LDcgQEAKIHBhY2thZ2UgdGVzdC5md2s7CiAKIHB1YmxpYyBjbGFzcyBTb21lRndrU2VydmljZUltcGwgaW1wbGVtZW50cyBTb21lRndrU2VydmljZSB7Ci0gICAgCisKICAgICBwdWJsaWMgU29tZUZ3a1NlcnZpY2VJbXBsKCl7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU29tZUZyYW1ld29ya0NsYXNzOiIpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL25ldy1iZWFuLXJlZ2lzdHJhdGlvbi1leHRlbnNpb24taW4tbGliL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24tZXh0ZW5zaW9uLWluLWxpYi9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCmluZGV4IDcwMjQ5NGUuLmI5Yzc5NzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL25ldy1iZWFuLXJlZ2lzdHJhdGlvbi1leHRlbnNpb24taW4tbGliL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvbmV3LWJlYW4tcmVnaXN0cmF0aW9uLWV4dGVuc2lvbi1pbi1saWIvc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YQpAQCAtMjksMTQgKzI5LDE0IEBACiAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGFyb3VuZEludm9rZUNhbGxlZCA9IGZhbHNlOwogICAgIHB1YmxpYyBzdGF0aWMgaW50IGFyb3VuZEludm9rZUludm9jYXRpb25Db3VudCA9IDA7CiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZXJyb3JNZXNzYWdlID0gIiI7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgVHJhbnNhY3Rpb25JbnRlcmNlcHRvcihTZXJ2aWNlRnJhbWV3b3JrRXh0ZW5zaW9uIG15ZXgpeyAvL0luamVjdGlvbiBvZiBwb3J0YWJsZSBleHRlbnNpb24gaW4gYSBiZWFuCiAgICAgICAgIGlmKG15ZXggPT0gbnVsbCkgewogICAgICAgICAgICAgZXJyb3JNZXNzYWdlICs9ICJQb3J0YWJsZSBFeHRlbnNpb24gSW5qZWN0aW9uIGluIEludGVyY2VwdG9yIGZhaWxlZCI7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBAQXJvdW5kSW52b2tlCiAgICAgcHVibGljIE9iamVjdCBtYW5hZ2VUcmFuc2FjdGlvbihJbnZvY2F0aW9uQ29udGV4dCBjdHgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRyYW5zYWN0aW9uSW50ZXJjZXB0b3I6OkFyb3VuZEludm9rZSIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvbmV3LWJlYW4tcmVnaXN0cmF0aW9uLWV4dGVuc2lvbi1pbi1saWIvc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uYWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL25ldy1iZWFuLXJlZ2lzdHJhdGlvbi1leHRlbnNpb24taW4tbGliL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbmFsLmphdmEKaW5kZXggOThmODVkNC4uOGJkOThjYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvbmV3LWJlYW4tcmVnaXN0cmF0aW9uLWV4dGVuc2lvbi1pbi1saWIvc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uYWwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24tZXh0ZW5zaW9uLWluLWxpYi9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25hbC5qYXZhCkBAIC0zMSw1ICszMSw1IEBACiBASW50ZXJjZXB0b3JCaW5kaW5nCiBwdWJsaWMgQGludGVyZmFjZSBUcmFuc2FjdGlvbmFsIHsKIAotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24tZXh0ZW5zaW9uLWluLWxpYi9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9Qb3J0YWJsZUV4dGVuc2lvbkJlYW5SZWdpc3RyYXRpb25UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvbmV3LWJlYW4tcmVnaXN0cmF0aW9uLWV4dGVuc2lvbi1pbi1saWIvc2VydmxldC90ZXN0L3NlcnZsZXQvUG9ydGFibGVFeHRlbnNpb25CZWFuUmVnaXN0cmF0aW9uVGVzdFNlcnZsZXQuamF2YQppbmRleCBlZmFmYzQ0Li42NDExMWNiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24tZXh0ZW5zaW9uLWluLWxpYi9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9Qb3J0YWJsZUV4dGVuc2lvbkJlYW5SZWdpc3RyYXRpb25UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL25ldy1iZWFuLXJlZ2lzdHJhdGlvbi1leHRlbnNpb24taW4tbGliL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1BvcnRhYmxlRXh0ZW5zaW9uQmVhblJlZ2lzdHJhdGlvblRlc3RTZXJ2bGV0LmphdmEKQEAgLTQ4LDEwICs0OCwxMCBAQAogICAgIEBJbmplY3QKICAgICBAUHJlZmVycmVkCiAgICAgVGVzdEJlYW4gdGI7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgQmVhbk1hbmFnZXIgYm07Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgQEZyYW1ld29ya1NlcnZpY2Uoc2VydmljZUNyaXRlcmlhPSJURVNUIiwgZHluYW1pYz10cnVlKQogICAgIFNvbWVGd2tTZXJ2aWNlIHNmY19wcm94eTsKQEAgLTgyLDI1ICs4MiwyNSBAQAogICAgICAgICAgICAgICAgICAgICArIFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IuYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50OwogICAgICAgICBpZiAoIVRyYW5zYWN0aW9uSW50ZXJjZXB0b3IuZXJyb3JNZXNzYWdlLnRyaW0oKS5lcXVhbHMoIiIpKQogICAgICAgICAgICAgbXNnICs9IFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IuZXJyb3JNZXNzYWdlOwotICAgICAgICAKKwogICAgICAgICAvL2NoZWNrIGlmIG91ciBwb3J0YWJsZSBleHRlbnNpb24gd2FzIGNhbGxlZAogICAgICAgICBpZiAoIVNlcnZpY2VGcmFtZXdvcmtFeHRlbnNpb24uYmVmb3JlQmVhbkRpc2NvdmVyeUNhbGxlZCkKICAgICAgICAgICAgIG1zZyArPSAiUG9ydGFibGUgRXh0ZW5zaW9uIGxpZmVjeWNsZSBvYnNlcnZlciBtZXRob2Q6ICIgKwotICAgICAgICAgICAgCQkiYmVmb3JlQmVhbkRpc2NvdmVyeSBub3QgY2FsbGVkIjsKKyAgICAgICAgICAgICAgICAgICAgImJlZm9yZUJlYW5EaXNjb3Zlcnkgbm90IGNhbGxlZCI7CiAKICAgICAgICAgaWYgKCFTZXJ2aWNlRnJhbWV3b3JrRXh0ZW5zaW9uLmFmdGVyQmVhbkRpc2NvdmVyeUNhbGxlZCkKICAgICAgICAgICAgIG1zZyArPSAiUG9ydGFibGUgRXh0ZW5zaW9uIGxpZmVjeWNsZSBvYnNlcnZlciBtZXRob2Q6ICIgKwotICAgICAgICAgICAgCQkiYWZ0ZXJCZWFuRGlzY292ZXJ5IG5vdCBjYWxsZWQgb3IgaW5qZWN0aW9uIG9mIEJlYW5NYW5hZ2VyICIgKwotICAgICAgICAgICAgCQkiaW4gYW4gb2JzZXJ2ZXIgbWV0aG9kIGZhaWxlZCI7Ci0gICAgICAgIAorICAgICAgICAgICAgICAgICAgICAiYWZ0ZXJCZWFuRGlzY292ZXJ5IG5vdCBjYWxsZWQgb3IgaW5qZWN0aW9uIG9mIEJlYW5NYW5hZ2VyICIgKworICAgICAgICAgICAgICAgICAgICAiaW4gYW4gb2JzZXJ2ZXIgbWV0aG9kIGZhaWxlZCI7CisKICAgICAgICAgaWYgKCFTZXJ2aWNlRnJhbWV3b3JrRXh0ZW5zaW9uLnByb2Nlc3NBbm5vdGF0ZWRUeXBlQ2FsbGVkKQogICAgICAgICAgICAgbXNnICs9ICJQb3J0YWJsZSBFeHRlbnNpb24gbGlmZWN5Y2xlIG9ic2VydmVyIG1ldGhvZDogcHJvY2VzcyAiICsKLSAgICAgICAgICAgIAkJImFubm90YXRlZCB0eXBlIG5vdCBjYWxsZWQiOworICAgICAgICAgICAgICAgICAgICAiYW5ub3RhdGVkIHR5cGUgbm90IGNhbGxlZCI7CiAKICAgICAgICAgLy9CZWFuTWFuYWdlciBsb29rdXAKICAgICAgICAgaWYgKGJtID09IG51bGwpCiAgICAgICAgICAgICBtc2cgKz0gIkluamVjdGlvbiBvZiBCZWFuTWFuYWdlciBpbnRvIHNlcnZsZXQgZmFpbGVkIjsKLSAgICAgICAgCisKICAgICAgICAgLy9HZXQgYWxsIGJlYW5zIGFuZCBjb3VudCB0aGUgbnVtYmVyIG9mIGJlYW5zIGluIHRoZSB0ZXN0IHBhY2thZ2UKICAgICAgICAgU2V0PEJlYW48Pz4+IGFsbEJlYW5zID0gYm0uZ2V0QmVhbnMoT2JqZWN0LmNsYXNzLCBuZXcgQW5ub3RhdGlvbkxpdGVyYWw8QW55Pigpe30pOwogCkBAIC0xMTMsMTEgKzExMywxMSBAQAogICAgICAgICAvL2NoZWNrIGlmIHByb3hpZWQgc2VydmljZSByZWZlcmVuY2UgaXMgaW5kZWVkIHByb3hpZWQKICAgICAgICAgaWYgKCFQcm94eS5pc1Byb3h5Q2xhc3Moc2ZjX3Byb3h5LmdldENsYXNzKCkpKQogICAgICAgICAgICAgbXNnICs9ICJFeHBlY3RlZCBQcm94aWVkIHNlcnZpY2UgcmVmZXJlbmNlLCBidXQgZ290IGJhY2sgYW4gIiArCi0gICAgICAgICAgICAJCSJ1bnByb3hpZWQgc2VydmljZSByZWZlcmVuY2UgIjsKKyAgICAgICAgICAgICAgICAgICAgInVucHJveGllZCBzZXJ2aWNlIHJlZmVyZW5jZSAiOwogICAgICAgICAvL2ludm9rZSBhIG1ldGhvZCBvCiAgICAgICAgIGlmKCFzZmNfcHJveHkuZm9vTWV0aG9kKCkpCiAgICAgICAgICAgICBtc2cgKz0gImludm9jYXRpb24gb2YgbWV0aG9kIG9uIHByb3hpZWQgc2VydmljZSBmYWlsZWQiOwotICAgICAgICAKKwogLy8gICAgICAgIC8vY2hlY2sgaWYgdW5wcm94aWVkIHNlcnZpY2UgcmVmZXJlbmNlIGlzIG5vdCBwcm94aWVkCiAvLyAgICAgICAgaWYgKFByb3h5LmlzUHJveHlDbGFzcyhzZmNfdW5wcm94aWVkLmdldENsYXNzKCkpKQogLy8gICAgICAgICAgICBtc2cgKz0gIkV4cGVjdGVkIHVuUHJveGllZCBzZXJ2aWNlIHJlZmVyZW5jZSwgYnV0IGdvdCBiYWNrIGFuICIgKwpAQCAtMTI1LDMyICsxMjUsMzIgQEAKIC8vICAgICAgICAvL2ludm9rZSBhIG1ldGhvZCBvCiAvLyAgICAgICAgaWYoIXNmY191bnByb3hpZWQuZm9vTWV0aG9kKCkpCiAvLyAgICAgICAgICAgIG1zZyArPSAiaW52b2NhdGlvbiBvZiBtZXRob2Qgb24gdW5wcm94aWVkIHNlcnZpY2UgZmFpbGVkIjsKLSAgICAgICAgCisKICAgICAgICAgZm9yIChJdGVyYXRvcjxCZWFuPD8+PiBpdGVyYXRvciA9IGFsbEJlYW5zLml0ZXJhdG9yKCk7IGl0ZXJhdG9yLmhhc05leHQoKTspIHsKICAgICAgICAgICAgIEJlYW48Pz4gYmVhbiA9IGl0ZXJhdG9yLm5leHQoKTsKICAgICAgICAgICAgIGlmIChiZWFuLmdldEJlYW5DbGFzcygpLmdldE5hbWUoKS5jb250YWlucygiU29tZUZyYW1ld29yayIpKXsKICAgICAgICAgICAgICAgICBtc2cgKz0gdGVzdEZyYW1ld29ya0JlYW4oYmVhbik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKCFTZXJ2aWNlRnJhbWV3b3JrRXh0ZW5zaW9uLmFmdGVyUHJvY2Vzc0JlYW5DYWxsZWQpCiAgICAgICAgICAgICBtc2cgKz0gIlBvcnRhYmxlIEV4dGVuc2lvbiBsaWZlY3ljbGUgb2JzZXJ2ZXIgbWV0aG9kOiBhZnRlciAiICsKICAgICAgICAgICAgICAgICAgICAgIlByb2Nlc3NCZWFuIG5vdCBjYWxsZWQgZm9yIGEgYmVhbiByZWdpc3RlcmVkIGJ5IHRoZSBwb3J0YWJsZSIgKwogICAgICAgICAgICAgICAgICAgICAiZXh0ZW5zaW9uIjsKLSAgICAgICAgCisKICAgICAgICAgd3JpdGVyLndyaXRlKG1zZyArICJcbiIpOwogICAgIH0KIAogCiAgICAgcHJpdmF0ZSBTdHJpbmcgdGVzdEZyYW1ld29ya0JlYW4oQmVhbjw/PiBiZWFuKSB7CiAgICAgICAgIFN0cmluZyBtc2cgPSAiIjsKLSAgICAgICAgaWYgKCFiZWFuLmdldFF1YWxpZmllcnMoKS5jb250YWlucyhuZXcgQW5ub3RhdGlvbkxpdGVyYWw8QW55PigpIHt9KSAKLSAgICAgICAgICAgICAgICB8fCAhYmVhbi5nZXRRdWFsaWZpZXJzKCkuY29udGFpbnMobmV3IEFubm90YXRpb25MaXRlcmFsPERlZmF1bHQ+KCkge30pKSAgCisgICAgICAgIGlmICghYmVhbi5nZXRRdWFsaWZpZXJzKCkuY29udGFpbnMobmV3IEFubm90YXRpb25MaXRlcmFsPEFueT4oKSB7fSkKKyAgICAgICAgICAgICAgICB8fCAhYmVhbi5nZXRRdWFsaWZpZXJzKCkuY29udGFpbnMobmV3IEFubm90YXRpb25MaXRlcmFsPERlZmF1bHQ+KCkge30pKQogICAgICAgICAgICAgbXNnICs9ICJGcmFtZXdvcmtCZWFuIGRvZXMgbm90IGhhdmUgdGhlIGRlZmF1bHQgZXhwZWN0ZWQgcXVhbGlmaWVycyI7Ci0gICAgICAgIAorCiAgICAgICAgIGlmICghYmVhbi5nZXRTY29wZSgpLmVxdWFscyhEZXBlbmRlbnQuY2xhc3MpKQogICAgICAgICAgICAgbXNnICs9ICJGcmFtZXdvcmtCZWFuIHNjb3BlIGlzIG5vdCBkZXBlbmRlbnQiOwotICAgICAgICAKKwogICAgICAgICBpZighYmVhbi5nZXRCZWFuQ2xhc3MoKS5nZXROYW1lKCkuZXF1YWxzKFNvbWVGd2tTZXJ2aWNlSW1wbC5jbGFzcy5nZXROYW1lKCkpKQogICAgICAgICAgICAgbXNnICs9ICJGcmFtZXdvcmsgQmVhbjogSW5jb3JyZWN0IGJlYW4gY2xhc3MiOwogICAgICAgICByZXR1cm4gbXNnOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvbmV3LWJlYW4tcmVnaXN0cmF0aW9uL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24vYnVpbGQucHJvcGVydGllcwppbmRleCAzNTgzNjg2Li43OWNiNDg1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1tYWtlLWZyYW1ld29yay1iZWFuLWF2YWlsYWJsZS1mb3ItaW5qZWN0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvbmV3LWJlYW4tcmVnaXN0cmF0aW9uL2J1aWxkLnhtbAppbmRleCA4ODk0Njg4Li4yNTU2NTMyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL25ldy1iZWFuLXJlZ2lzdHJhdGlvbi9idWlsZC54bWwKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iY2xpZW50L3Rlc3QvY2xpZW50IiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00OCwyNCArNDgsMjQgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KLSAgICAgICAgCTxwYXJhbSBuYW1lPSJjZGktZXh0ZW5zaW9uLnNlcnZpY2UiIHZhbHVlPSJjZGktZXh0ZW5zaW9uLnNlcnZpY2UiLz4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJjZGktZXh0ZW5zaW9uLnNlcnZpY2UiIHZhbHVlPSJjZGktZXh0ZW5zaW9uLnNlcnZpY2UiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9ImNsaWVudCIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9InRlc3QvY2xpZW50L1dlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0idGVzdC5jbGllbnQuV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NywxMCArNzcsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24vY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL25ldy1iZWFuLXJlZ2lzdHJhdGlvbi9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCmluZGV4IDJjMzE2N2UuLmY5ZTlhMDcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL25ldy1iZWFuLXJlZ2lzdHJhdGlvbi9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL25ldy1iZWFuLXJlZ2lzdHJhdGlvbi9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCkBAIC00NSw3ICs0NSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIHBvcnRhYmxlIGV4dGVuc2lvbnMiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC01NCw3ICs1NCw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVNUX05BTUUgKyAiIHRlc3QgZmFpbGVkIik7CkBAIC02NCw3ICs2NCw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgICAgICAgICAgKyAiL215dXJsIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvcGVuaW5nIGNvbm5lY3Rpb24gdG8gIiArIHVybCk7CkBAIC0xMDMsMTAgKzEwMywxMCBAQAogICAgICAgICAgICAgaWYgKEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvbmV3LWJlYW4tcmVnaXN0cmF0aW9uL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24vc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YQppbmRleCA3MDI0OTRlLi5iOWM3OTc3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24vc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24vc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YQpAQCAtMjksMTQgKzI5LDE0IEBACiAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGFyb3VuZEludm9rZUNhbGxlZCA9IGZhbHNlOwogICAgIHB1YmxpYyBzdGF0aWMgaW50IGFyb3VuZEludm9rZUludm9jYXRpb25Db3VudCA9IDA7CiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZXJyb3JNZXNzYWdlID0gIiI7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgVHJhbnNhY3Rpb25JbnRlcmNlcHRvcihTZXJ2aWNlRnJhbWV3b3JrRXh0ZW5zaW9uIG15ZXgpeyAvL0luamVjdGlvbiBvZiBwb3J0YWJsZSBleHRlbnNpb24gaW4gYSBiZWFuCiAgICAgICAgIGlmKG15ZXggPT0gbnVsbCkgewogICAgICAgICAgICAgZXJyb3JNZXNzYWdlICs9ICJQb3J0YWJsZSBFeHRlbnNpb24gSW5qZWN0aW9uIGluIEludGVyY2VwdG9yIGZhaWxlZCI7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBAQXJvdW5kSW52b2tlCiAgICAgcHVibGljIE9iamVjdCBtYW5hZ2VUcmFuc2FjdGlvbihJbnZvY2F0aW9uQ29udGV4dCBjdHgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRyYW5zYWN0aW9uSW50ZXJjZXB0b3I6OkFyb3VuZEludm9rZSIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvbmV3LWJlYW4tcmVnaXN0cmF0aW9uL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbmFsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24vc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uYWwuamF2YQppbmRleCA5OGY4NWQ0Li44YmQ5OGNiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24vc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uYWwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24vc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uYWwuamF2YQpAQCAtMzEsNSArMzEsNSBAQAogQEludGVyY2VwdG9yQmluZGluZwogcHVibGljIEBpbnRlcmZhY2UgVHJhbnNhY3Rpb25hbCB7CiAKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvbmV3LWJlYW4tcmVnaXN0cmF0aW9uL3NlcnZsZXQvdGVzdC9leHRlbnNpb24vRnJhbWV3b3JrU2VydmljZUZhY3RvcnkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL25ldy1iZWFuLXJlZ2lzdHJhdGlvbi9zZXJ2bGV0L3Rlc3QvZXh0ZW5zaW9uL0ZyYW1ld29ya1NlcnZpY2VGYWN0b3J5LmphdmEKaW5kZXggYWU2NmZkOS4uYjVjMTlmMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvbmV3LWJlYW4tcmVnaXN0cmF0aW9uL3NlcnZsZXQvdGVzdC9leHRlbnNpb24vRnJhbWV3b3JrU2VydmljZUZhY3RvcnkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24vc2VydmxldC90ZXN0L2V4dGVuc2lvbi9GcmFtZXdvcmtTZXJ2aWNlRmFjdG9yeS5qYXZhCkBAIC0yOSw5ICsyOSw5IEBACiAgICAgcHVibGljIHN0YXRpYyBPYmplY3QgZ2V0U2VydmljZShmaW5hbCBUeXBlIHR5cGUsIGZpbmFsIEZyYW1ld29ya1NlcnZpY2UgZnMpewogICAgICAgICAvL05PVEU6aGFyZC1jb2RlZCBmb3IgdGhpcyB0ZXN0LCBidXQgaWRlYWxseSBzaG91bGQgZ2V0IHRoZQogICAgICAgICAvL3NlcnZpY2UgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgc2VydmljZSByZWdpc3RyeQotICAgICAgICBTb21lRndrU2VydmljZUludGVyZmFjZSBpbnN0YW5jZSA9IAorICAgICAgICBTb21lRndrU2VydmljZUludGVyZmFjZSBpbnN0YW5jZSA9CiAgICAgICAgICAgICAoU29tZUZ3a1NlcnZpY2VJbnRlcmZhY2UpIGxvb2t1cFNlcnZpY2UodHlwZSwgZnMud2FpdFRpbWVvdXQoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChmcy5keW5hbWljKCkpIHsKICAgICAgICAgICAgIEludm9jYXRpb25IYW5kbGVyIGloID0gbmV3IEludm9jYXRpb25IYW5kbGVyKCkgewogICAgICAgICAgICAgICAgIEBPdmVycmlkZQpAQCAtNDEsMTUgKzQxLDE1IEBACiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXRob2QuaW52b2tlKGxvb2t1cFNlcnZpY2UodHlwZSwgZnMud2FpdFRpbWVvdXQoKSksIGFyZ3MpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBpbnN0YW5jZSA9IChTb21lRndrU2VydmljZUludGVyZmFjZSkgCi0gICAgICAgICAgICBQcm94eS5uZXdQcm94eUluc3RhbmNlKFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0Q29udGV4dENsYXNzTG9hZGVyKCksIAotICAgICAgICAgICAgICAgICAgICBuZXcgQ2xhc3NbXXtTb21lRndrU2VydmljZUludGVyZmFjZS5jbGFzc30sIGloKTsgCisgICAgICAgICAgICBpbnN0YW5jZSA9IChTb21lRndrU2VydmljZUludGVyZmFjZSkKKyAgICAgICAgICAgIFByb3h5Lm5ld1Byb3h5SW5zdGFuY2UoVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgbmV3IENsYXNzW117U29tZUZ3a1NlcnZpY2VJbnRlcmZhY2UuY2xhc3N9LCBpaCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGluc3RhbmNlOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIE9iamVjdCBsb29rdXBTZXJ2aWNlKFR5cGUgdHlwZSwgaW50IHdhaXRUaW1lb3V0KSB7Ci0gICAgICAgIGlmICh0eXBlLmVxdWFscyhTb21lRndrU2VydmljZUludGVyZmFjZS5jbGFzcykpeyAKKyAgICAgICAgaWYgKHR5cGUuZXF1YWxzKFNvbWVGd2tTZXJ2aWNlSW50ZXJmYWNlLmNsYXNzKSl7CiAgICAgICAgICAgICByZXR1cm4gbmV3IFNvbWVGd2tTZXJ2aWNlSW1wbCgidGVzdCIpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBudWxsOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvbmV3LWJlYW4tcmVnaXN0cmF0aW9uL3NlcnZsZXQvdGVzdC9leHRlbnNpb24vU2VydmljZUZyYW1ld29ya0V4dGVuc2lvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvbmV3LWJlYW4tcmVnaXN0cmF0aW9uL3NlcnZsZXQvdGVzdC9leHRlbnNpb24vU2VydmljZUZyYW1ld29ya0V4dGVuc2lvbi5qYXZhCmluZGV4IGU0YjczMmIuLjE5ZDg4YjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL25ldy1iZWFuLXJlZ2lzdHJhdGlvbi9zZXJ2bGV0L3Rlc3QvZXh0ZW5zaW9uL1NlcnZpY2VGcmFtZXdvcmtFeHRlbnNpb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24vc2VydmxldC90ZXN0L2V4dGVuc2lvbi9TZXJ2aWNlRnJhbWV3b3JrRXh0ZW5zaW9uLmphdmEKQEAgLTQ2LDggKzQ2LDggQEAKIAogLyoqCiAgKiBBIHBvcnRhYmxlIGV4dGVuc2lvbiB0aGF0IHN1cHBvcnRzIGluamVjdGlvbiBvZiBjdXN0b20gZnJhbWV3b3JrCi0gKiBzZXJ2aWNlcyBpbnRvIEJlYW5zLiAKLSAqIAorICogc2VydmljZXMgaW50byBCZWFucy4KKyAqCiAgKiBAYXV0aG9yIFNpdmFrdW1hciBUaHlhZ2FyYWphbgogICovCiBwdWJsaWMgY2xhc3MgU2VydmljZUZyYW1ld29ya0V4dGVuc2lvbiBpbXBsZW1lbnRzIEV4dGVuc2lvbnsKQEAgLTU2LDcgKzU2LDcgQEAKICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gYWZ0ZXJCZWFuRGlzY292ZXJ5Q2FsbGVkID0gZmFsc2U7CiAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGFmdGVyUHJvY2Vzc0JlYW5DYWxsZWQgPSBmYWxzZTsKICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gcHJvY2Vzc0Fubm90YXRlZFR5cGVDYWxsZWQgPSBmYWxzZTsKLSAgICAKKwogICAgIC8qCiAgICAgICogQSBtYXAgb2YgRnJhbWV3b3JrIFNlcnZpY2UgVHlwZXMgdG8gYmUgaW5qZWN0ZWQgYW5kIGFkZGl0aW9uYWwgbWV0YWRhdGEKICAgICAgKiBhYm91dCB0aGUgRnJhbWV3b3JrU2VydmljZSB0byBiZSBpbmplY3RlZC4KQEAgLTc2LDI3ICs3NiwyNyBAQAogICAgICAgICBkZWJ1ZygiUHJvY2VzcyBhbm5vdGF0ZWQgdHlwZSIgKyBwYXQuZ2V0QW5ub3RhdGVkVHlwZSgpLmdldEJhc2VUeXBlKCkpOwogICAgICAgICBwcm9jZXNzQW5ub3RhdGVkVHlwZUNhbGxlZCA9IHRydWU7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogT2JzZXJ2ZXIgZm9yIDxjb2RlPlByb2Nlc3NJbmplY3Rpb25UYXJnZXQ8L2NvZGU+IGV2ZW50cy4gVGhpcyBldmVudCBpcwotICAgICAqIGZpcmVkIGZvciBldmVyeSBKYXZhIEVFIGNvbXBvbmVudCBjbGFzcyBzdXBwb3J0aW5nIGluamVjdGlvbiB0aGF0IG1heSBiZSAKLSAgICAgKiBpbnN0YW50aWF0ZWQgYnkgdGhlIGNvbnRhaW5lciBhdCBydW50aW1lLiBJbmplY3Rpb25zIHBvaW50cyBvZiBldmVyeSAKLSAgICAgKiBkaXNjb3ZlcmVkIGVuYWJsZWQgSmF2YSBFRSBjb21wb25lbnQgaXMgY2hlY2tlZCB0byBzZWUgaWYgdGhlcmUgaXMgYSAKLSAgICAgKiByZXF1ZXN0IGZvciBpbmplY3Rpb24gb2YgYSBmcmFtZXdvcmsgc2VydmljZS4gCisgICAgICogZmlyZWQgZm9yIGV2ZXJ5IEphdmEgRUUgY29tcG9uZW50IGNsYXNzIHN1cHBvcnRpbmcgaW5qZWN0aW9uIHRoYXQgbWF5IGJlCisgICAgICogaW5zdGFudGlhdGVkIGJ5IHRoZSBjb250YWluZXIgYXQgcnVudGltZS4gSW5qZWN0aW9ucyBwb2ludHMgb2YgZXZlcnkKKyAgICAgKiBkaXNjb3ZlcmVkIGVuYWJsZWQgSmF2YSBFRSBjb21wb25lbnQgaXMgY2hlY2tlZCB0byBzZWUgaWYgdGhlcmUgaXMgYQorICAgICAqIHJlcXVlc3QgZm9yIGluamVjdGlvbiBvZiBhIGZyYW1ld29yayBzZXJ2aWNlLgogICAgICAqLwogICAgIHZvaWQgYWZ0ZXJQcm9jZXNzSW5qZWN0aW9uVGFyZ2V0KEBPYnNlcnZlcyBQcm9jZXNzSW5qZWN0aW9uVGFyZ2V0PD8+IHBiKXsKICAgICAgICAgZGVidWcoIkFmdGVyUHJvY2Vzc0luamVjdGlvblRhcmdldCIgKyBwYi5nZXRBbm5vdGF0ZWRUeXBlKCkuZ2V0QmFzZVR5cGUoKSk7CiAgICAgICAgIFNldDxJbmplY3Rpb25Qb2ludD4gaXBzID0gcGIuZ2V0SW5qZWN0aW9uVGFyZ2V0KCkuZ2V0SW5qZWN0aW9uUG9pbnRzKCk7CiAgICAgICAgIGRpc2NvdmVyU2VydmljZUluamVjdGlvblBvaW50cyhpcHMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIE9ic2VydmVyIGZvciA8Y29kZT5Qcm9jZXNzSW5qZWN0aW9uVGFyZ2V0PC9jb2RlPiBldmVudHMuIFRoaXMgZXZlbnQgaXMKLSAgICAgKiBmaXJlZCBmaXJlIGFuIGV2ZW50IGZvciBlYWNoIGVuYWJsZWQgYmVhbiwgaW50ZXJjZXB0b3Igb3IgZGVjb3JhdG9yIAotICAgICAqIGRlcGxveWVkIGluIGEgYmVhbiBhcmNoaXZlLCBiZWZvcmUgcmVnaXN0ZXJpbmcgdGhlIEJlYW4gb2JqZWN0LiAKLSAgICAgKiBJbmplY3Rpb25zIHBvaW50cyBvZiBldmVyeSBkaXNjb3ZlcmVkIGVuYWJsZWQgSmF2YSBFRSBjb21wb25lbnQgaXMgCi0gICAgICogY2hlY2tlZCB0byBzZWUgaWYgdGhlcmUgaXMgYSByZXF1ZXN0IGZvciBpbmplY3Rpb24gb2YgYSBmcmFtZXdvcmsgCi0gICAgICogc2VydmljZS4gCisgICAgICogZmlyZWQgZmlyZSBhbiBldmVudCBmb3IgZWFjaCBlbmFibGVkIGJlYW4sIGludGVyY2VwdG9yIG9yIGRlY29yYXRvcgorICAgICAqIGRlcGxveWVkIGluIGEgYmVhbiBhcmNoaXZlLCBiZWZvcmUgcmVnaXN0ZXJpbmcgdGhlIEJlYW4gb2JqZWN0LgorICAgICAqIEluamVjdGlvbnMgcG9pbnRzIG9mIGV2ZXJ5IGRpc2NvdmVyZWQgZW5hYmxlZCBKYXZhIEVFIGNvbXBvbmVudCBpcworICAgICAqIGNoZWNrZWQgdG8gc2VlIGlmIHRoZXJlIGlzIGEgcmVxdWVzdCBmb3IgaW5qZWN0aW9uIG9mIGEgZnJhbWV3b3JrCisgICAgICogc2VydmljZS4KICAgICAgKi8KICAgICB2b2lkIGFmdGVyUHJvY2Vzc0JlYW4oQE9ic2VydmVzIFByb2Nlc3NCZWFuIHBiKXsKICAgICAgICAgYWZ0ZXJQcm9jZXNzQmVhbkNhbGxlZCA9IHRydWU7CkBAIC0xMDcsMjIgKzEwNywyMiBAQAogCiAgICAgLyoKICAgICAgKiBEaXNjb3ZlciBpbmplY3Rpb24gcG9pbnRzIHdoZXJlIHRoZSBmcmFtZXdvcmsgc2VydmljZSBpcyByZXF1ZXN0ZWQKLSAgICAgKiB0aHJvdWdoIHRoZSA8Y29kZT5GcmFtZXdvcmtTZXJ2aWNlPC9jb2RlPiBxdWFsaWZpZXIgYW5kIGEgbWFwIGlzIAorICAgICAqIHRocm91Z2ggdGhlIDxjb2RlPkZyYW1ld29ya1NlcnZpY2U8L2NvZGU+IHF1YWxpZmllciBhbmQgYSBtYXAgaXMKICAgICAgKiBwb3B1bGF0ZWQgZm9yIGFsbCBmcmFtZXdvcmsgc2VydmljZXMgdGhhdCBoYXZlIGJlZW4gcmVxdWVzdGVkLgogICAgICAqLwogICAgIHByaXZhdGUgdm9pZCBkaXNjb3ZlclNlcnZpY2VJbmplY3Rpb25Qb2ludHMoU2V0PEluamVjdGlvblBvaW50PiBpcHMpIHsKLSAgICAgICAgZm9yIChJdGVyYXRvcjxJbmplY3Rpb25Qb2ludD4gaXRlcmF0b3IgPSBpcHMuaXRlcmF0b3IoKTsgCisgICAgICAgIGZvciAoSXRlcmF0b3I8SW5qZWN0aW9uUG9pbnQ+IGl0ZXJhdG9yID0gaXBzLml0ZXJhdG9yKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IuaGFzTmV4dCgpOykgewogICAgICAgICAgICAgSW5qZWN0aW9uUG9pbnQgaW5qZWN0aW9uUG9pbnQgPSBpdGVyYXRvci5uZXh0KCk7CiAgICAgICAgICAgICBTZXQ8QW5ub3RhdGlvbj4gcXVhbGlmcyA9IGluamVjdGlvblBvaW50LmdldFF1YWxpZmllcnMoKTsKLSAgICAgICAgICAgIGZvciAoSXRlcmF0b3I8QW5ub3RhdGlvbj4gcXVhbGlmSXRlciA9IHF1YWxpZnMuaXRlcmF0b3IoKTsgCisgICAgICAgICAgICBmb3IgKEl0ZXJhdG9yPEFubm90YXRpb24+IHF1YWxpZkl0ZXIgPSBxdWFsaWZzLml0ZXJhdG9yKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhbGlmSXRlci5oYXNOZXh0KCk7KSB7CiAgICAgICAgICAgICAgICAgQW5ub3RhdGlvbiBhbm5vdGF0aW9uID0gcXVhbGlmSXRlci5uZXh0KCk7CiAgICAgICAgICAgICAgICAgaWYgKGFubm90YXRpb24uYW5ub3RhdGlvblR5cGUoKS5lcXVhbHMoRnJhbWV3b3JrU2VydmljZS5jbGFzcykpewogICAgICAgICAgICAgICAgICAgICBwcmludERlYnVnRm9ySW5qZWN0aW9uUG9pbnQoaW5qZWN0aW9uUG9pbnQpOwogICAgICAgICAgICAgICAgICAgICAvL0tlZXAgdHJhY2sgb2Ygc2VydmljZS10eXBlIGFuZCBpdHMgYXR0cmlidXRlcwogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0gSW5qZWN0aW9uIHJlcXVlc3RlZCBmb3IgIiArCi0gICAgICAgICAgICAgICAgICAgIAkJImZyYW1ld29yayBzZXJ2aWNlIHR5cGUgIiArIGluamVjdGlvblBvaW50LmdldFR5cGUoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmcmFtZXdvcmsgc2VydmljZSB0eXBlICIgKyBpbmplY3Rpb25Qb2ludC5nZXRUeXBlKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgYW5kIGFubm90YXRlZCB3aXRoIGR5bmFtaWM9IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgaW5qZWN0aW9uUG9pbnQuZ2V0QW5ub3RhdGVkKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRBbm5vdGF0aW9uKEZyYW1ld29ya1NlcnZpY2UuY2xhc3MpCkBAIC0xMzQsMzEgKzEzNCwzMSBAQAogICAgICAgICAgICAgICAgICAgICAvL0FkZCB0byBsaXN0IG9mIGZyYW1ld29yayBzZXJ2aWNlcyB0byBiZSBpbmplY3RlZAogICAgICAgICAgICAgICAgICAgICBUeXBlIGtleSA9IGluamVjdGlvblBvaW50LmdldFR5cGUoKTsKICAgICAgICAgICAgICAgICAgICAgRnJhbWV3b3JrU2VydmljZSB2YWx1ZSA9IGluamVjdGlvblBvaW50LmdldEFubm90YXRlZCgpCi0gICAgICAgICAgICAgICAgICAgIC5nZXRBbm5vdGF0aW9uKEZyYW1ld29ya1NlcnZpY2UuY2xhc3MpOyAKKyAgICAgICAgICAgICAgICAgICAgLmdldEFubm90YXRpb24oRnJhbWV3b3JrU2VydmljZS5jbGFzcyk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghZnJhbWV3b3JrU2VydmljZXNUb0JlSW5qZWN0ZWQuY29udGFpbnNLZXkoa2V5KSl7CiAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXdvcmtTZXJ2aWNlc1RvQmVJbmplY3RlZC5wdXQoa2V5LCBuZXcgSGFzaFNldDxGcmFtZXdvcmtTZXJ2aWNlPigpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBmcmFtZXdvcmtTZXJ2aWNlc1RvQmVJbmplY3RlZC5nZXQoa2V5KS5hZGQodmFsdWUpOwogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZnJhbWV3b3JrU2VydmljZXNUb0JlSW5qZWN0ZWQuc2l6ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvKioKLSAgICAgKiBPYnNlcnZlciBmb3IgPGNvZGU+QWZ0ZXJCZWFuRGlzY292ZXJ5PC9jb2RlPiBldmVudHMuIFRoaXMgCisgICAgICogT2JzZXJ2ZXIgZm9yIDxjb2RlPkFmdGVyQmVhbkRpc2NvdmVyeTwvY29kZT4gZXZlbnRzLiBUaGlzCiAgICAgICogb2JzZXJ2ZXIgbWV0aG9kIGlzIHVzZWQgdG8gcmVnaXN0ZXIgPGNvZGU+QmVhbjwvY29kZT5zIGZvciB0aGUgZnJhbWV3b3JrCi0gICAgICogc2VydmljZXMgdGhhdCBoYXZlIGJlZW4gcmVxdWVzdGVkIHRvIGJlIGluamVjdGVkLiAKKyAgICAgKiBzZXJ2aWNlcyB0aGF0IGhhdmUgYmVlbiByZXF1ZXN0ZWQgdG8gYmUgaW5qZWN0ZWQuCiAgICAgICovCiAgICAgdm9pZCBhZnRlckJlYW5EaXNjb3ZlcnkoQE9ic2VydmVzIEFmdGVyQmVhbkRpc2NvdmVyeSBhYmQpewogICAgICAgICBhZnRlckJlYW5EaXNjb3ZlcnlDYWxsZWQgPSB0cnVlOwogICAgICAgICBkZWJ1ZygiQWZ0ZXIgQmVhbiBEaXNjb3ZlcnkiKTsKLSAgICAgICAgZm9yIChJdGVyYXRvcjxUeXBlPiBpdGVyYXRvciA9IHRoaXMuZnJhbWV3b3JrU2VydmljZXNUb0JlSW5qZWN0ZWQua2V5U2V0KCkuaXRlcmF0b3IoKTsgCisgICAgICAgIGZvciAoSXRlcmF0b3I8VHlwZT4gaXRlcmF0b3IgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2VzVG9CZUluamVjdGVkLmtleVNldCgpLml0ZXJhdG9yKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5oYXNOZXh0KCk7KSB7CiAgICAgICAgICAgICBUeXBlIHR5cGUgPSAgaXRlcmF0b3IubmV4dCgpOwogICAgICAgICAgICAgLy9JZiB0aGUgaW5qZWN0aW9uIHBvaW50J3MgdHlwZSBpcyBub3QgYSBDbGFzcyBvciBJbnRlcmZhY2UsIHdlCi0gICAgICAgICAgICAvL2Rvbid0IGtub3cgaG93IHRvIGhhbmRsZSB0aGlzLiAKKyAgICAgICAgICAgIC8vZG9uJ3Qga25vdyBob3cgdG8gaGFuZGxlIHRoaXMuCiAgICAgICAgICAgICBpZiAoISh0eXBlIGluc3RhbmNlb2YgQ2xhc3MpKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmtub3duIHR5cGU6IiArIHR5cGUpOwogICAgICAgICAgICAgICAgIGFiZC5hZGREZWZpbml0aW9uRXJyb3IobmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKApAQCAtMTczLDEwICsxNzMsMTAgQEAKIAogICAgIC8qCiAgICAgICogQWRkIGEgPGNvZGU+QmVhbjwvY29kZT4gZm9yIHRoZSBmcmFtZXdvcmsgc2VydmljZSByZXF1ZXN0ZWQuIEluc3RhbnRpYXRlCi0gICAgICogb3IgZGlzY292ZXIgdGhlIGJlYW4gZnJvbSB0aGUgZnJhbWV3b3JrIHNlcnZpY2UgcmVnaXN0cnksIAorICAgICAqIG9yIGRpc2NvdmVyIHRoZSBiZWFuIGZyb20gdGhlIGZyYW1ld29yayBzZXJ2aWNlIHJlZ2lzdHJ5LAogICAgICAqIGFuZCByZXR1cm4gYSByZWZlcmVuY2UgdG8gdGhlIHNlcnZpY2UgaWYgYSBkeW5hbWljIHJlZmVyZW5jZSBpcyByZXF1ZXN0ZWQuCiAgICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIGFkZEJlYW4oQWZ0ZXJCZWFuRGlzY292ZXJ5IGFiZCwgZmluYWwgVHlwZSB0eXBlLCAKKyAgICBwcml2YXRlIHZvaWQgYWRkQmVhbihBZnRlckJlYW5EaXNjb3ZlcnkgYWJkLCBmaW5hbCBUeXBlIHR5cGUsCiAgICAgICAgICAgICBmaW5hbCBTZXQ8RnJhbWV3b3JrU2VydmljZT4gZnJhbWV3b3JrU2VydmljZXMpIHsKICAgICAgICAgZm9yIChJdGVyYXRvcjxGcmFtZXdvcmtTZXJ2aWNlPiBpdGVyYXRvciA9IGZyYW1ld29ya1NlcnZpY2VzLml0ZXJhdG9yKCk7IGl0ZXJhdG9yCiAgICAgICAgICAgICAgICAgLmhhc05leHQoKTspIHsKQEAgLTE4NSw3ICsxODUsNyBAQAogICAgICAgICAgICAgYWJkLmFkZEJlYW4obmV3IEZyYW1ld29ya1NlcnZpY2VCZWFuKHR5cGUsIGZyYW1ld29ya1NlcnZpY2UpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogCiAgICAgcHJpdmF0ZSBmaW5hbCBjbGFzcyBGcmFtZXdvcmtTZXJ2aWNlQmVhbiBpbXBsZW1lbnRzIEJlYW4gewogICAgICAgICBwcml2YXRlIGZpbmFsIFR5cGUgdHlwZTsKQEAgLTIyNCw3ICsyMjQsNyBAQAogICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewogICAgICAgICAgICAgcmV0dXJuIHR5cGUgKyAiX2R5bmFtaWNfIiArIGZyYW1ld29ya1NlcnZpY2UuZHluYW1pYygpCi0gICAgICAgICAgICAgICAgICAgICsgIl9jcml0ZXJpYV8iICsgZnJhbWV3b3JrU2VydmljZS5zZXJ2aWNlQ3JpdGVyaWEoKSAKKyAgICAgICAgICAgICAgICAgICAgKyAiX2NyaXRlcmlhXyIgKyBmcmFtZXdvcmtTZXJ2aWNlLnNlcnZpY2VDcml0ZXJpYSgpCiAgICAgICAgICAgICAgICAgICAgICsgIl93YWl0VGltZW91dCIgKyBmcmFtZXdvcmtTZXJ2aWNlLndhaXRUaW1lb3V0KCk7CiAgICAgICAgIH0KIApAQCAtMjM1LDcgKzIzNSw3IEBACiAgICAgICAgICAgICBzLmFkZChuZXcgQW5ub3RhdGlvbkxpdGVyYWw8QW55PigpIHt9KTsKICAgICAgICAgICAgIC8vQWRkIHRoZSBhcHByb3ByaWF0ZSBwYXJhbWV0ZXJzIHRvIHRoZSBGcmFtZXdvcmtTZXJ2aWNlIHF1YWxpZmllcgogICAgICAgICAgICAgLy9hcyByZXF1ZXN0ZWQgaW4gdGhlIGluamVjdGlvbiBwb2ludAotICAgICAgICAgICAgcy5hZGQobmV3IEZyYW1ld29ya1NlcnZpY2VRdWFsaWZpZXJUeXBlKGZyYW1ld29ya1NlcnZpY2UpKTsgCisgICAgICAgICAgICBzLmFkZChuZXcgRnJhbWV3b3JrU2VydmljZVF1YWxpZmllclR5cGUoZnJhbWV3b3JrU2VydmljZSkpOwogICAgICAgICAgICAgcmV0dXJuIHM7CiAgICAgICAgIH0KIApAQCAtMjcyLDcgKzI3Miw3IEBACiAgICAgICogUmVwcmVzZW50cyBhbiBhbm5vdGF0aW9uIHR5cGUgaW5zdGFuY2Ugb2YgRnJhbWV3b3JrU2VydmljZQogICAgICAqIHdpdGggcGFyYW1ldGVycyBlcXVhbCB0byB0aG9zZSBzcGVjaWZpZWQgaW4gdGhlIGluamVjdGlvbiBwb2ludAogICAgICAqLwotICAgIHByaXZhdGUgZmluYWwgY2xhc3MgRnJhbWV3b3JrU2VydmljZVF1YWxpZmllclR5cGUgCisgICAgcHJpdmF0ZSBmaW5hbCBjbGFzcyBGcmFtZXdvcmtTZXJ2aWNlUXVhbGlmaWVyVHlwZQogICAgIGV4dGVuZHMgQW5ub3RhdGlvbkxpdGVyYWw8RnJhbWV3b3JrU2VydmljZT4gaW1wbGVtZW50cyBGcmFtZXdvcmtTZXJ2aWNlIHsKICAgICAgICAgcHJpdmF0ZSBTdHJpbmcgc2VydmljZUNyaXRlcmlhID0gIiI7CiAgICAgICAgIHByaXZhdGUgYm9vbGVhbiBkeW5hbWljID0gZmFsc2U7CkBAIC0yOTgsMTEgKzI5OCwxMSBAQAogICAgICAgICAgICAgcmV0dXJuIHRoaXMud2FpdFRpbWVvdXQ7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgZGVidWcoU3RyaW5nIHN0cmluZykgewogICAgICAgICBpZihERUJVR19FTkFCTEVEKQogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNeUV4dGVuc2lvbjo6ICIgKyBzdHJpbmcpOwotICAgICAgICAKKwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBwcmludERlYnVnRm9ySW5qZWN0aW9uUG9pbnQoSW5qZWN0aW9uUG9pbnQgaW5qZWN0aW9uUG9pbnQpIHsKQEAgLTMxOSw1ICszMTksNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcG9pbnQKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvbmV3LWJlYW4tcmVnaXN0cmF0aW9uL3NlcnZsZXQvdGVzdC9md2svRnJhbWV3b3JrU2VydmljZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvbmV3LWJlYW4tcmVnaXN0cmF0aW9uL3NlcnZsZXQvdGVzdC9md2svRnJhbWV3b3JrU2VydmljZS5qYXZhCmluZGV4IDY4ZWY0NmQuLmNmYTcwZmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL25ldy1iZWFuLXJlZ2lzdHJhdGlvbi9zZXJ2bGV0L3Rlc3QvZndrL0ZyYW1ld29ya1NlcnZpY2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9uZXctYmVhbi1yZWdpc3RyYXRpb24vc2VydmxldC90ZXN0L2Z3ay9GcmFtZXdvcmtTZXJ2aWNlLmphdmEKQEAgLTMzLDI2ICszMywyNiBAQAogCiAvKioKICAqIEEgQ0RJIFF1YWxpZmllciB0aGF0IHJlcHJlc2VudHMgYSByZWZlcmVuY2UgdG8gYQotICogc2VydmljZSBpbiB0aGUgZnJhbWV3b3JrLiBJZiB0aGlzIHF1YWxpZmllcnMgYW5ub3RhdGVzIGFuIGluamVjdGlvbiBwb2ludCwgCisgKiBzZXJ2aWNlIGluIHRoZSBmcmFtZXdvcmsuIElmIHRoaXMgcXVhbGlmaWVycyBhbm5vdGF0ZXMgYW4gaW5qZWN0aW9uIHBvaW50LAogICogdGhlIGZyYW1ld29yayBleHRlbnNpb24gZGlzY292ZXJzIGFuZCBpbnN0YW50aWF0ZXMKICAqIGEgc2VydmljZSBpbXBsZW1lbnRpbmcgdGhlIHNlcnZpY2UgaW50ZXJmYWNlIHR5cGUgb2YgdGhlIGluamVjdGlvbiBwb2ludAogICogYW5kIG1ha2VzIGl0IGF2YWlsYWJsZSBmb3IgaW5qZWN0aW9uIHRvIHRoYXQgaW5qZWN0aW9uIHBvaW50LgotICovIAorICovCiBwdWJsaWMgQGludGVyZmFjZSBGcmFtZXdvcmtTZXJ2aWNlIHsKICAgICAvKioKICAgICAgKiBEZXRlcm1pbmVzIGlmIHRoZSBzZXJ2aWNlIHJlZmVyZW5jZSB0aGF0IGlzIGluamVjdGVkCiAgICAgICogcmVmZXJzIHRvIGEgZHluYW1pYyBwcm94eSBvciB0aGUgYWN0dWFsIHNlcnZpY2UgcmVmZXJlbmNlIG9idGFpbmVkCi0gICAgICogZnJvbSB0aGUgZnJhbWV3b3JrIHNlcnZpY2UgcmVnaXN0cnkgIAorICAgICAqIGZyb20gdGhlIGZyYW1ld29yayBzZXJ2aWNlIHJlZ2lzdHJ5CiAgICAgICovCiAgICBib29sZWFuIGR5bmFtaWMoKSBkZWZhdWx0IGZhbHNlOyAvL2R5bmFtaWMKLSAgIAorCiAgICAvKioKICAgICAqIHNlcnZpY2UgZGlzY292ZXJ5IGNyaXRlcmlhCiAgICAgKi8KLSAgIFN0cmluZyBzZXJ2aWNlQ3JpdGVyaWEoKSBkZWZhdWx0ICIiOyAKLSAgIAorICAgU3RyaW5nIHNlcnZpY2VDcml0ZXJpYSgpIGRlZmF1bHQgIiI7CisKICAgIC8qKgogICAgICogd2FpdCBzcGVjaWZpZWQgaW4gbWlsbGlzLiAtMSBpbmRpY2F0ZXMgaW5kZWZpbml0ZSB3YWl0CiAgICAgKi8KLSAgIGludCB3YWl0VGltZW91dCgpIGRlZmF1bHQgLTE7IAorICAgaW50IHdhaXRUaW1lb3V0KCkgZGVmYXVsdCAtMTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL25ldy1iZWFuLXJlZ2lzdHJhdGlvbi9zZXJ2bGV0L3Rlc3QvZndrL1NvbWVGd2tTZXJ2aWNlSW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvbmV3LWJlYW4tcmVnaXN0cmF0aW9uL3NlcnZsZXQvdGVzdC9md2svU29tZUZ3a1NlcnZpY2VJbXBsLmphdmEKaW5kZXggZmIwOGIwOC4uYTJlMTg3NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvbmV3LWJlYW4tcmVnaXN0cmF0aW9uL3NlcnZsZXQvdGVzdC9md2svU29tZUZ3a1NlcnZpY2VJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvbmV3LWJlYW4tcmVnaXN0cmF0aW9uL3NlcnZsZXQvdGVzdC9md2svU29tZUZ3a1NlcnZpY2VJbXBsLmphdmEKQEAgLTE3LDcgKzE3LDcgQEAKIHBhY2thZ2UgdGVzdC5md2s7CiAKIHB1YmxpYyBjbGFzcyBTb21lRndrU2VydmljZUltcGwgaW1wbGVtZW50cyBTb21lRndrU2VydmljZUludGVyZmFjZSB7Ci0gICAgCisKICAgICBwdWJsaWMgU29tZUZ3a1NlcnZpY2VJbXBsKFN0cmluZyB0KXsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTb21lRnJhbWV3b3JrQ2xhc3M6IiArIHQpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL25ldy1iZWFuLXJlZ2lzdHJhdGlvbi9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9Qb3J0YWJsZUV4dGVuc2lvbkJlYW5SZWdpc3RyYXRpb25UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvbmV3LWJlYW4tcmVnaXN0cmF0aW9uL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1BvcnRhYmxlRXh0ZW5zaW9uQmVhblJlZ2lzdHJhdGlvblRlc3RTZXJ2bGV0LmphdmEKaW5kZXggOWI5YWNjYS4uY2FhNjAxMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvbmV3LWJlYW4tcmVnaXN0cmF0aW9uL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1BvcnRhYmxlRXh0ZW5zaW9uQmVhblJlZ2lzdHJhdGlvblRlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvbmV3LWJlYW4tcmVnaXN0cmF0aW9uL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1BvcnRhYmxlRXh0ZW5zaW9uQmVhblJlZ2lzdHJhdGlvblRlc3RTZXJ2bGV0LmphdmEKQEAgLTQ4LDEwICs0OCwxMCBAQAogICAgIEBJbmplY3QKICAgICBAUHJlZmVycmVkCiAgICAgVGVzdEJlYW4gdGI7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgQmVhbk1hbmFnZXIgYm07Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgQEZyYW1ld29ya1NlcnZpY2Uoc2VydmljZUNyaXRlcmlhPSJURVNUIiwgZHluYW1pYz10cnVlKQogICAgIFNvbWVGd2tTZXJ2aWNlSW50ZXJmYWNlIHNmY19wcm94eTsKQEAgLTgyLDI1ICs4MiwyNSBAQAogICAgICAgICAgICAgICAgICAgICArIFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IuYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50OwogICAgICAgICBpZiAoIVRyYW5zYWN0aW9uSW50ZXJjZXB0b3IuZXJyb3JNZXNzYWdlLnRyaW0oKS5lcXVhbHMoIiIpKQogICAgICAgICAgICAgbXNnICs9IFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IuZXJyb3JNZXNzYWdlOwotICAgICAgICAKKwogICAgICAgICAvL2NoZWNrIGlmIG91ciBwb3J0YWJsZSBleHRlbnNpb24gd2FzIGNhbGxlZAogICAgICAgICBpZiAoIVNlcnZpY2VGcmFtZXdvcmtFeHRlbnNpb24uYmVmb3JlQmVhbkRpc2NvdmVyeUNhbGxlZCkKICAgICAgICAgICAgIG1zZyArPSAiUG9ydGFibGUgRXh0ZW5zaW9uIGxpZmVjeWNsZSBvYnNlcnZlciBtZXRob2Q6ICIgKwotICAgICAgICAgICAgCQkiYmVmb3JlQmVhbkRpc2NvdmVyeSBub3QgY2FsbGVkIjsKKyAgICAgICAgICAgICAgICAgICAgImJlZm9yZUJlYW5EaXNjb3Zlcnkgbm90IGNhbGxlZCI7CiAKICAgICAgICAgaWYgKCFTZXJ2aWNlRnJhbWV3b3JrRXh0ZW5zaW9uLmFmdGVyQmVhbkRpc2NvdmVyeUNhbGxlZCkKICAgICAgICAgICAgIG1zZyArPSAiUG9ydGFibGUgRXh0ZW5zaW9uIGxpZmVjeWNsZSBvYnNlcnZlciBtZXRob2Q6ICIgKwotICAgICAgICAgICAgCQkiYWZ0ZXJCZWFuRGlzY292ZXJ5IG5vdCBjYWxsZWQgb3IgaW5qZWN0aW9uIG9mIEJlYW5NYW5hZ2VyICIgKwotICAgICAgICAgICAgCQkiaW4gYW4gb2JzZXJ2ZXIgbWV0aG9kIGZhaWxlZCI7Ci0gICAgICAgIAorICAgICAgICAgICAgICAgICAgICAiYWZ0ZXJCZWFuRGlzY292ZXJ5IG5vdCBjYWxsZWQgb3IgaW5qZWN0aW9uIG9mIEJlYW5NYW5hZ2VyICIgKworICAgICAgICAgICAgICAgICAgICAiaW4gYW4gb2JzZXJ2ZXIgbWV0aG9kIGZhaWxlZCI7CisKICAgICAgICAgaWYgKCFTZXJ2aWNlRnJhbWV3b3JrRXh0ZW5zaW9uLnByb2Nlc3NBbm5vdGF0ZWRUeXBlQ2FsbGVkKQogICAgICAgICAgICAgbXNnICs9ICJQb3J0YWJsZSBFeHRlbnNpb24gbGlmZWN5Y2xlIG9ic2VydmVyIG1ldGhvZDogcHJvY2VzcyAiICsKLSAgICAgICAgICAgIAkJImFubm90YXRlZCB0eXBlIG5vdCBjYWxsZWQiOworICAgICAgICAgICAgICAgICAgICAiYW5ub3RhdGVkIHR5cGUgbm90IGNhbGxlZCI7CiAKICAgICAgICAgLy9CZWFuTWFuYWdlciBsb29rdXAKICAgICAgICAgaWYgKGJtID09IG51bGwpCiAgICAgICAgICAgICBtc2cgKz0gIkluamVjdGlvbiBvZiBCZWFuTWFuYWdlciBpbnRvIHNlcnZsZXQgZmFpbGVkIjsKLSAgICAgICAgCisKICAgICAgICAgLy9HZXQgYWxsIGJlYW5zIGFuZCBjb3VudCB0aGUgbnVtYmVyIG9mIGJlYW5zIGluIHRoZSB0ZXN0IHBhY2thZ2UKICAgICAgICAgU2V0PEJlYW48Pz4+IGFsbEJlYW5zID0gYm0uZ2V0QmVhbnMoT2JqZWN0LmNsYXNzLCBuZXcgQW5ub3RhdGlvbkxpdGVyYWw8QW55Pigpe30pOwogCkBAIC0xMTMsMTEgKzExMywxMSBAQAogICAgICAgICAvL2NoZWNrIGlmIHByb3hpZWQgc2VydmljZSByZWZlcmVuY2UgaXMgaW5kZWVkIHByb3hpZWQKICAgICAgICAgaWYgKCFQcm94eS5pc1Byb3h5Q2xhc3Moc2ZjX3Byb3h5LmdldENsYXNzKCkpKQogICAgICAgICAgICAgbXNnICs9ICJFeHBlY3RlZCBQcm94aWVkIHNlcnZpY2UgcmVmZXJlbmNlLCBidXQgZ290IGJhY2sgYW4gIiArCi0gICAgICAgICAgICAJCSJ1bnByb3hpZWQgc2VydmljZSByZWZlcmVuY2UgIjsKKyAgICAgICAgICAgICAgICAgICAgInVucHJveGllZCBzZXJ2aWNlIHJlZmVyZW5jZSAiOwogICAgICAgICAvL2ludm9rZSBhIG1ldGhvZCBvCiAgICAgICAgIGlmKCFzZmNfcHJveHkuZm9vTWV0aG9kKCkpCiAgICAgICAgICAgICBtc2cgKz0gImludm9jYXRpb24gb2YgbWV0aG9kIG9uIHByb3hpZWQgc2VydmljZSBmYWlsZWQiOwotICAgICAgICAKKwogICAgICAgICAvL2NoZWNrIGlmIHVucHJveGllZCBzZXJ2aWNlIHJlZmVyZW5jZSBpcyBub3QgcHJveGllZAogICAgICAgICBpZiAoUHJveHkuaXNQcm94eUNsYXNzKHNmY191bnByb3hpZWQuZ2V0Q2xhc3MoKSkpCiAgICAgICAgICAgICBtc2cgKz0gIkV4cGVjdGVkIHVuUHJveGllZCBzZXJ2aWNlIHJlZmVyZW5jZSwgYnV0IGdvdCBiYWNrIGFuICIgKwpAQCAtMTI1LDMyICsxMjUsMzIgQEAKICAgICAgICAgLy9pbnZva2UgYSBtZXRob2QgbwogICAgICAgICBpZighc2ZjX3VucHJveGllZC5mb29NZXRob2QoKSkKICAgICAgICAgICAgIG1zZyArPSAiaW52b2NhdGlvbiBvZiBtZXRob2Qgb24gdW5wcm94aWVkIHNlcnZpY2UgZmFpbGVkIjsKLSAgICAgICAgCisKICAgICAgICAgZm9yIChJdGVyYXRvcjxCZWFuPD8+PiBpdGVyYXRvciA9IGFsbEJlYW5zLml0ZXJhdG9yKCk7IGl0ZXJhdG9yLmhhc05leHQoKTspIHsKICAgICAgICAgICAgIEJlYW48Pz4gYmVhbiA9IGl0ZXJhdG9yLm5leHQoKTsKICAgICAgICAgICAgIGlmIChiZWFuLmdldEJlYW5DbGFzcygpLmdldE5hbWUoKS5jb250YWlucygiU29tZUZyYW1ld29yayIpKXsKICAgICAgICAgICAgICAgICBtc2cgKz0gdGVzdEZyYW1ld29ya0JlYW4oYmVhbik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKCFTZXJ2aWNlRnJhbWV3b3JrRXh0ZW5zaW9uLmFmdGVyUHJvY2Vzc0JlYW5DYWxsZWQpCiAgICAgICAgICAgICBtc2cgKz0gIlBvcnRhYmxlIEV4dGVuc2lvbiBsaWZlY3ljbGUgb2JzZXJ2ZXIgbWV0aG9kOiBhZnRlciAiICsKICAgICAgICAgICAgICAgICAgICAgIlByb2Nlc3NCZWFuIG5vdCBjYWxsZWQgZm9yIGEgYmVhbiByZWdpc3RlcmVkIGJ5IHRoZSBwb3J0YWJsZSIgKwogICAgICAgICAgICAgICAgICAgICAiZXh0ZW5zaW9uIjsKLSAgICAgICAgCisKICAgICAgICAgd3JpdGVyLndyaXRlKG1zZyArICJcbiIpOwogICAgIH0KIAogCiAgICAgcHJpdmF0ZSBTdHJpbmcgdGVzdEZyYW1ld29ya0JlYW4oQmVhbjw/PiBiZWFuKSB7CiAgICAgICAgIFN0cmluZyBtc2cgPSAiIjsKLSAgICAgICAgaWYgKCFiZWFuLmdldFF1YWxpZmllcnMoKS5jb250YWlucyhuZXcgQW5ub3RhdGlvbkxpdGVyYWw8QW55PigpIHt9KSAKLSAgICAgICAgICAgICAgICB8fCAhYmVhbi5nZXRRdWFsaWZpZXJzKCkuY29udGFpbnMobmV3IEFubm90YXRpb25MaXRlcmFsPERlZmF1bHQ+KCkge30pKSAgCisgICAgICAgIGlmICghYmVhbi5nZXRRdWFsaWZpZXJzKCkuY29udGFpbnMobmV3IEFubm90YXRpb25MaXRlcmFsPEFueT4oKSB7fSkKKyAgICAgICAgICAgICAgICB8fCAhYmVhbi5nZXRRdWFsaWZpZXJzKCkuY29udGFpbnMobmV3IEFubm90YXRpb25MaXRlcmFsPERlZmF1bHQ+KCkge30pKQogICAgICAgICAgICAgbXNnICs9ICJGcmFtZXdvcmtCZWFuIGRvZXMgbm90IGhhdmUgdGhlIGRlZmF1bHQgZXhwZWN0ZWQgcXVhbGlmaWVycyI7Ci0gICAgICAgIAorCiAgICAgICAgIGlmICghYmVhbi5nZXRTY29wZSgpLmVxdWFscyhEZXBlbmRlbnQuY2xhc3MpKQogICAgICAgICAgICAgbXNnICs9ICJGcmFtZXdvcmtCZWFuIHNjb3BlIGlzIG5vdCBkZXBlbmRlbnQiOwotICAgICAgICAKKwogICAgICAgICBpZighYmVhbi5nZXRCZWFuQ2xhc3MoKS5nZXROYW1lKCkuZXF1YWxzKFNvbWVGd2tTZXJ2aWNlSW1wbC5jbGFzcy5nZXROYW1lKCkpKQogICAgICAgICAgICAgbXNnICs9ICJGcmFtZXdvcmsgQmVhbjogSW5jb3JyZWN0IGJlYW4gY2xhc3MiOwogICAgICAgICByZXR1cm4gbXNnOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvcGFja2FnZS1wcml2YXRlLWV4dGVuc2lvbi1jb25zdHJ1Y3Rvci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvcGFja2FnZS1wcml2YXRlLWV4dGVuc2lvbi1jb25zdHJ1Y3Rvci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDhkZDFjMTIuLmYxMDRhZDYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3BhY2thZ2UtcHJpdmF0ZS1leHRlbnNpb24tY29uc3RydWN0b3IvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9wYWNrYWdlLXByaXZhdGUtZXh0ZW5zaW9uLWNvbnN0cnVjdG9yL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tcGFja2FnZS1wcml2YXRlLWNvbnN0cnVjdG9yLWluLXBvcnRhYmxlLWV4dGVuc2lvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvcGFja2FnZS1wcml2YXRlLWV4dGVuc2lvbi1jb25zdHJ1Y3Rvci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9wYWNrYWdlLXByaXZhdGUtZXh0ZW5zaW9uLWNvbnN0cnVjdG9yL2J1aWxkLnhtbAppbmRleCA4ODk0Njg4Li4yNTU2NTMyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9wYWNrYWdlLXByaXZhdGUtZXh0ZW5zaW9uLWNvbnN0cnVjdG9yL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9wYWNrYWdlLXByaXZhdGUtZXh0ZW5zaW9uLWNvbnN0cnVjdG9yL2J1aWxkLnhtbApAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSJjbGllbnQvdGVzdC9jbGllbnQiIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ4LDI0ICs0OCwyNCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgotICAgICAgICAJPHBhcmFtIG5hbWU9ImNkaS1leHRlbnNpb24uc2VydmljZSIgdmFsdWU9ImNkaS1leHRlbnNpb24uc2VydmljZSIvPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImNkaS1leHRlbnNpb24uc2VydmljZSIgdmFsdWU9ImNkaS1leHRlbnNpb24uc2VydmljZSIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iY2xpZW50IiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0idGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJ0ZXN0LmNsaWVudC5XZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc3LDEwICs3NywxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3BhY2thZ2UtcHJpdmF0ZS1leHRlbnNpb24tY29uc3RydWN0b3IvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3BhY2thZ2UtcHJpdmF0ZS1leHRlbnNpb24tY29uc3RydWN0b3IvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQppbmRleCA2MWJjZmE3Li41M2JkOWY0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9wYWNrYWdlLXByaXZhdGUtZXh0ZW5zaW9uLWNvbnN0cnVjdG9yL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvcGFja2FnZS1wcml2YXRlLWV4dGVuc2lvbi1jb25zdHJ1Y3Rvci9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIHBvcnRhYmxlIGV4dGVuc2lvbnMiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC00OSw3ICs0OSw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVNUX05BTUUgKyAiIHRlc3QgZmFpbGVkIik7CkBAIC01OSw3ICs1OSw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgICAgICAgICAgKyAiL215dXJsIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvcGVuaW5nIGNvbm5lY3Rpb24gdG8gIiArIHVybCk7CkBAIC05OCwxMCArOTgsMTAgQEAKICAgICAgICAgICAgIGlmIChFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3BhY2thZ2UtcHJpdmF0ZS1leHRlbnNpb24tY29uc3RydWN0b3Ivc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3BhY2thZ2UtcHJpdmF0ZS1leHRlbnNpb24tY29uc3RydWN0b3Ivc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YQppbmRleCBhMWNmNzY4Li43MWE4ODQ3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9wYWNrYWdlLXByaXZhdGUtZXh0ZW5zaW9uLWNvbnN0cnVjdG9yL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvcGFja2FnZS1wcml2YXRlLWV4dGVuc2lvbi1jb25zdHJ1Y3Rvci9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCkBAIC0yOSwyMyArMjksMjMgQEAKICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gYXJvdW5kSW52b2tlQ2FsbGVkID0gZmFsc2U7CiAgICAgcHVibGljIHN0YXRpYyBpbnQgYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50ID0gMDsKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBlcnJvck1lc3NhZ2UgPSAiIjsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBUZXN0RGVwZW5kZW50QmVhbiB0YjsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBUcmFuc2FjdGlvbkludGVyY2VwdG9yKFBhY2thZ2VQcml2YXRlQ29uc3RydWN0b3JFeHRlbnNpb24gbXlleCl7IC8vSW5qZWN0aW9uIG9mIHBvcnRhYmxlIGV4dGVuc2lvbiBpbiBhIGJlYW4KICAgICAgICAgaWYobXlleCA9PSBudWxsKSB7CiAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgKz0gIlBvcnRhYmxlIEV4dGVuc2lvbiBJbmplY3Rpb24gaW4gSW50ZXJjZXB0b3IgZmFpbGVkIjsKICAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgQEFyb3VuZEludm9rZQogICAgIHB1YmxpYyBPYmplY3QgbWFuYWdlVHJhbnNhY3Rpb24oSW52b2NhdGlvbkNvbnRleHQgY3R4KSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUcmFuc2FjdGlvbkludGVyY2VwdG9yOjpBcm91bmRJbnZva2UiKTsKICAgICAgICAgaWYgKHRiID09IG51bGwpIGVycm9yTWVzc2FnZSArPSAiRGVwZW5kZW5jeSBJbmplY3Rpb24gIiArCi0gICAgICAgIAkJImludG8gVHJhbnNhY3Rpb25JbnRlcmNlcHRvciBmYWlsZWQiOworICAgICAgICAgICAgICAgICJpbnRvIFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IgZmFpbGVkIjsKICAgICAgICAgYXJvdW5kSW52b2tlQ2FsbGVkID0gdHJ1ZTsKICAgICAgICAgYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50ICsrOwogICAgICAgICByZXR1cm4gY3R4LnByb2NlZWQoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3BhY2thZ2UtcHJpdmF0ZS1leHRlbnNpb24tY29uc3RydWN0b3Ivc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uYWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3BhY2thZ2UtcHJpdmF0ZS1leHRlbnNpb24tY29uc3RydWN0b3Ivc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uYWwuamF2YQppbmRleCA5OGY4NWQ0Li44YmQ5OGNiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9wYWNrYWdlLXByaXZhdGUtZXh0ZW5zaW9uLWNvbnN0cnVjdG9yL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbmFsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvcGFja2FnZS1wcml2YXRlLWV4dGVuc2lvbi1jb25zdHJ1Y3Rvci9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25hbC5qYXZhCkBAIC0zMSw1ICszMSw1IEBACiBASW50ZXJjZXB0b3JCaW5kaW5nCiBwdWJsaWMgQGludGVyZmFjZSBUcmFuc2FjdGlvbmFsIHsKIAotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9wYWNrYWdlLXByaXZhdGUtZXh0ZW5zaW9uLWNvbnN0cnVjdG9yL3NlcnZsZXQvdGVzdC9leHRlbnNpb24vSW50ZXJjZXB0b3JzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9wYWNrYWdlLXByaXZhdGUtZXh0ZW5zaW9uLWNvbnN0cnVjdG9yL3NlcnZsZXQvdGVzdC9leHRlbnNpb24vSW50ZXJjZXB0b3JzLmphdmEKaW5kZXggY2M1OGQ2Zi4uZjU3ZWNhMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvcGFja2FnZS1wcml2YXRlLWV4dGVuc2lvbi1jb25zdHJ1Y3Rvci9zZXJ2bGV0L3Rlc3QvZXh0ZW5zaW9uL0ludGVyY2VwdG9ycy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3BhY2thZ2UtcHJpdmF0ZS1leHRlbnNpb24tY29uc3RydWN0b3Ivc2VydmxldC90ZXN0L2V4dGVuc2lvbi9JbnRlcmNlcHRvcnMuamF2YQpAQCAtMjEsMTQgKzIxLDE0IEBACiAKIHB1YmxpYyBjbGFzcyBJbnRlcmNlcHRvcnMKIHsKLSAgIAorCiAgICBASW5qZWN0CiAgICBwcml2YXRlIFBhY2thZ2VQcml2YXRlQ29uc3RydWN0b3JFeHRlbnNpb24gaW50ZXJjZXB0b3JFeHRlbnNpb247Ci0gICAKKwogICAgcHJpdmF0ZSBJbnRlcmNlcHRvcnMoKQogICAgewogICAgfQotICAgCisKICAgIHB1YmxpYyBib29sZWFuIGlzSW50ZXJjZXB0b3JFbmFibGVkKENsYXNzPD8+IGNsYXp6KQogICAgewogICAgICAgcmV0dXJuIGludGVyY2VwdG9yRXh0ZW5zaW9uLmdldEVuYWJsZWRJbnRlcmNlcHRvcnMoKS5jb250YWlucyhjbGF6eik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9wYWNrYWdlLXByaXZhdGUtZXh0ZW5zaW9uLWNvbnN0cnVjdG9yL3NlcnZsZXQvdGVzdC9leHRlbnNpb24vUGFja2FnZVByaXZhdGVDb25zdHJ1Y3RvckV4dGVuc2lvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvcGFja2FnZS1wcml2YXRlLWV4dGVuc2lvbi1jb25zdHJ1Y3Rvci9zZXJ2bGV0L3Rlc3QvZXh0ZW5zaW9uL1BhY2thZ2VQcml2YXRlQ29uc3RydWN0b3JFeHRlbnNpb24uamF2YQppbmRleCAwMDVmYTMyLi4zMmRiYmE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9wYWNrYWdlLXByaXZhdGUtZXh0ZW5zaW9uLWNvbnN0cnVjdG9yL3NlcnZsZXQvdGVzdC9leHRlbnNpb24vUGFja2FnZVByaXZhdGVDb25zdHJ1Y3RvckV4dGVuc2lvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3BhY2thZ2UtcHJpdmF0ZS1leHRlbnNpb24tY29uc3RydWN0b3Ivc2VydmxldC90ZXN0L2V4dGVuc2lvbi9QYWNrYWdlUHJpdmF0ZUNvbnN0cnVjdG9yRXh0ZW5zaW9uLmphdmEKQEAgLTQzLDcgKzQzLDcgQEAKICAgICAgICAgdGhpcy5lbmFibGVkSW50ZXJjZXB0b3JzID0gQ29sbGVjdGlvbnMuc3luY2hyb25pemVkU2V0KG5ldwogICAgICAgICAgICAgICAgIEhhc2hTZXQ8Q2xhc3M8Pz4+KCkpOwogICAgIH0KLSAgICAKKwogICAgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCiAgICB2b2lkIG9ic2VydmVJbnRlcmNlcHRvcnMoQE9ic2VydmVzIFByb2Nlc3NCZWFuPD8+IHBtYikKICAgIHsKQEAgLTUyLDE3ICs1MiwxNyBAQAogICAgICAgICAgdGhpcy5lbmFibGVkSW50ZXJjZXB0b3JzLmFkZChwbWIuZ2V0QmVhbigpLmdldEJlYW5DbGFzcygpKTsKICAgICAgIH0KICAgIH0KLSAgIAorCiAgICBDb2xsZWN0aW9uPENsYXNzPD8+PiBnZXRFbmFibGVkSW50ZXJjZXB0b3JzKCkKICAgIHsKICAgICAgIHJldHVybiBlbmFibGVkSW50ZXJjZXB0b3JzOwogICAgfQotICAgIAorCiAgICAgdm9pZCBiZWZvcmVCZWFuRGlzY292ZXJ5KEBPYnNlcnZlcyBCZWZvcmVCZWFuRGlzY292ZXJ5IGJkZCl7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTXlFeHRlbnNpb246OmJlZm9yZUJlYW5EaXNjb3ZlcnkiICsgYmRkKTsKICAgICAgICAgYmVmb3JlQmVhbkRpc2NvdmVyeUNhbGxlZCA9IHRydWU7CiAgICAgfQotICAgIAorCiAgICAgPFQ+IHZvaWQgcHJvY2Vzc0Fubm90YXRlZFR5cGUoQE9ic2VydmVzIFByb2Nlc3NBbm5vdGF0ZWRUeXBlPFQ+IHBhdCl7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTXlFeHRlbnNpb246UHJvY2VzcyBhbm5vdGF0ZWQgdHlwZSIgKyBwYXQuZ2V0QW5ub3RhdGVkVHlwZSgpLmdldEJhc2VUeXBlKCkpOwogICAgICAgICBwcm9jZXNzQW5ub3RhdGVkVHlwZUNhbGxlZCA9IHRydWU7CkBAIC03MywxMCArNzMsMTAgQEAKICAgICAgICAgICAgIHBhdC52ZXRvKCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICB2b2lkIGFmdGVyQmVhbkRpc2NvdmVyeShAT2JzZXJ2ZXMgQWZ0ZXJCZWFuRGlzY292ZXJ5IGFiZCwgQmVhbk1hbmFnZXIgYm0pewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk15RXh0ZW5zaW9uOiBhYmQ6ICIgKyBhYmQgKyAiIEJlYW5NYW5hZ2VyOiAiICsgYm0pOwotICAgICAgICAKKwogICAgICAgICBpZiAoYm0gIT0gbnVsbCkgewogICAgICAgICAgICAgLy9lbnN1cmUgYSB2YWxpZCBCZWFuTWFuYWdlciBpcyBpbmplY3RlZAogICAgICAgICAgICAgYWZ0ZXJCZWFuRGlzY292ZXJ5Q2FsbGVkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3BhY2thZ2UtcHJpdmF0ZS1leHRlbnNpb24tY29uc3RydWN0b3Ivc2VydmxldC90ZXN0L3NlcnZsZXQvUGFja2FnZVByaXZhdGVDb25zdHJ1Y3RvckluUG9ydGFibGVFeHRlbnNpb25UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvcGFja2FnZS1wcml2YXRlLWV4dGVuc2lvbi1jb25zdHJ1Y3Rvci9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9QYWNrYWdlUHJpdmF0ZUNvbnN0cnVjdG9ySW5Qb3J0YWJsZUV4dGVuc2lvblRlc3RTZXJ2bGV0LmphdmEKaW5kZXggM2RmODhiMi4uNjE2Y2Q2NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvcGFja2FnZS1wcml2YXRlLWV4dGVuc2lvbi1jb25zdHJ1Y3Rvci9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9QYWNrYWdlUHJpdmF0ZUNvbnN0cnVjdG9ySW5Qb3J0YWJsZUV4dGVuc2lvblRlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvcGFja2FnZS1wcml2YXRlLWV4dGVuc2lvbi1jb25zdHJ1Y3Rvci9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9QYWNrYWdlUHJpdmF0ZUNvbnN0cnVjdG9ySW5Qb3J0YWJsZUV4dGVuc2lvblRlc3RTZXJ2bGV0LmphdmEKQEAgLTM5LDcgKzM5LDcgQEAKICAgICBASW5qZWN0CiAgICAgQFByZWZlcnJlZAogICAgIFRlc3RCZWFuIHRiOwotICAgIAorCiAgICAgQEluamVjdAogICAgIEJlYW5NYW5hZ2VyIGJtOwogCkBAIC02NCwyNSArNjQsMjUgQEAKICAgICAgICAgICAgICAgICAgICAgKyBUcmFuc2FjdGlvbkludGVyY2VwdG9yLmFyb3VuZEludm9rZUludm9jYXRpb25Db3VudDsKICAgICAgICAgaWYgKCFUcmFuc2FjdGlvbkludGVyY2VwdG9yLmVycm9yTWVzc2FnZS50cmltKCkuZXF1YWxzKCIiKSkKICAgICAgICAgICAgIG1zZyArPSBUcmFuc2FjdGlvbkludGVyY2VwdG9yLmVycm9yTWVzc2FnZTsKLSAgICAgICAgCisKICAgICAgICAgLy9jaGVjayBpZiBvdXIgcG9ydGFibGUgZXh0ZW5zaW9uIHdhcyBjYWxsZWQKICAgICAgICAgaWYgKCFQYWNrYWdlUHJpdmF0ZUNvbnN0cnVjdG9yRXh0ZW5zaW9uLnBhY2thZ2VQcml2YXRlQ29uc3RydWN0b3JDYWxsZWQpCiAgICAgICAgICAgICBtc2cgKz0gIlBvcnRhYmxlIEV4dGVuc2lvbiBwYWNrYWdlIHByaXZhdGUgY29uc3RydWN0b3I6ICBub3QgY2FsbGVkIjsKLSAgICAgICAgCisKICAgICAgICAgaWYgKCFQYWNrYWdlUHJpdmF0ZUNvbnN0cnVjdG9yRXh0ZW5zaW9uLmJlZm9yZUJlYW5EaXNjb3ZlcnlDYWxsZWQpCiAgICAgICAgICAgICBtc2cgKz0gIlBvcnRhYmxlIEV4dGVuc2lvbiBsaWZlY3ljbGUgb2JzZXJ2ZXIgbWV0aG9kOiAiICsKLSAgICAgICAgICAgIAkJImJlZm9yZUJlYW5EaXNjb3Zlcnkgbm90IGNhbGxlZCI7CisgICAgICAgICAgICAgICAgICAgICJiZWZvcmVCZWFuRGlzY292ZXJ5IG5vdCBjYWxsZWQiOwogCiAgICAgICAgIGlmICghUGFja2FnZVByaXZhdGVDb25zdHJ1Y3RvckV4dGVuc2lvbi5hZnRlckJlYW5EaXNjb3ZlcnlDYWxsZWQpCiAgICAgICAgICAgICBtc2cgKz0gIlBvcnRhYmxlIEV4dGVuc2lvbiBsaWZlY3ljbGUgb2JzZXJ2ZXIgbWV0aG9kOiAiICsKLSAgICAgICAgICAgIAkJImFmdGVyQmVhbkRpc2NvdmVyeSBub3QgY2FsbGVkIG9yIGluamVjdGlvbiBvZiBCZWFuTWFuYWdlciAiICsKLSAgICAgICAgICAgIAkJImluIGFuIG9ic2VydmVyIG1ldGhvZCBmYWlsZWQiOwotICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgImFmdGVyQmVhbkRpc2NvdmVyeSBub3QgY2FsbGVkIG9yIGluamVjdGlvbiBvZiBCZWFuTWFuYWdlciAiICsKKyAgICAgICAgICAgICAgICAgICAgImluIGFuIG9ic2VydmVyIG1ldGhvZCBmYWlsZWQiOworCiAgICAgICAgIGlmICghUGFja2FnZVByaXZhdGVDb25zdHJ1Y3RvckV4dGVuc2lvbi5wcm9jZXNzQW5ub3RhdGVkVHlwZUNhbGxlZCkKICAgICAgICAgICAgIG1zZyArPSAiUG9ydGFibGUgRXh0ZW5zaW9uIGxpZmVjeWNsZSBvYnNlcnZlciBtZXRob2Q6IHByb2Nlc3MgIiArCi0gICAgICAgICAgICAJCSJhbm5vdGF0ZWQgdHlwZSBub3QgY2FsbGVkIjsKKyAgICAgICAgICAgICAgICAgICAgImFubm90YXRlZCB0eXBlIG5vdCBjYWxsZWQiOwogCi0gICAgICAgIGlmKChibS5nZXRCZWFucyhQYWNrYWdlUHJpdmF0ZUNvbnN0cnVjdG9yRXh0ZW5zaW9uLmNsYXNzLCBuZXcgQW5ub3RhdGlvbkxpdGVyYWw8QW55Pigpe30pLml0ZXJhdG9yKCkubmV4dCgpLmdldENsYXNzKCkpID09IG51bGwpIAorICAgICAgICBpZigoYm0uZ2V0QmVhbnMoUGFja2FnZVByaXZhdGVDb25zdHJ1Y3RvckV4dGVuc2lvbi5jbGFzcywgbmV3IEFubm90YXRpb25MaXRlcmFsPEFueT4oKXt9KS5pdGVyYXRvcigpLm5leHQoKS5nZXRDbGFzcygpKSA9PSBudWxsKQogICAgICAgICAgICAgbXNnICs9ICJQb3J0YWJsZSBFeHRlbnNpb24gbm90IGF2YWlsYWJsZSBmb3IgbG9va3VwIHRocm91Z2ggQmVhbk1hbmFnZXIiOwogCiAgICAgICAgIHdyaXRlci53cml0ZShtc2cgKyAiXG4iKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3Byb2Nlc3MtaW5qZWN0aW9uLXRhcmdldC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvcHJvY2Vzcy1pbmplY3Rpb24tdGFyZ2V0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZTcyYjQ0NC4uZDMxZDQyZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvcHJvY2Vzcy1pbmplY3Rpb24tdGFyZ2V0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvcHJvY2Vzcy1pbmplY3Rpb24tdGFyZ2V0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tcHJvY2Vzcy1pbmplY3Rpb24tdGFyZ2V0Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9wcm9jZXNzLWluamVjdGlvbi10YXJnZXQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvcHJvY2Vzcy1pbmplY3Rpb24tdGFyZ2V0L2J1aWxkLnhtbAppbmRleCA4ODk0Njg4Li4yNTU2NTMyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9wcm9jZXNzLWluamVjdGlvbi10YXJnZXQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3Byb2Nlc3MtaW5qZWN0aW9uLXRhcmdldC9idWlsZC54bWwKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iY2xpZW50L3Rlc3QvY2xpZW50IiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00OCwyNCArNDgsMjQgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KLSAgICAgICAgCTxwYXJhbSBuYW1lPSJjZGktZXh0ZW5zaW9uLnNlcnZpY2UiIHZhbHVlPSJjZGktZXh0ZW5zaW9uLnNlcnZpY2UiLz4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJjZGktZXh0ZW5zaW9uLnNlcnZpY2UiIHZhbHVlPSJjZGktZXh0ZW5zaW9uLnNlcnZpY2UiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9ImNsaWVudCIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9InRlc3QvY2xpZW50L1dlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0idGVzdC5jbGllbnQuV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NywxMCArNzcsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9wcm9jZXNzLWluamVjdGlvbi10YXJnZXQvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3Byb2Nlc3MtaW5qZWN0aW9uLXRhcmdldC9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCmluZGV4IGM1NzRkZmQuLmNhZTVhYjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3Byb2Nlc3MtaW5qZWN0aW9uLXRhcmdldC9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3Byb2Nlc3MtaW5qZWN0aW9uLXRhcmdldC9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCkBAIC0yNyw4ICsyNyw4IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdAogICAgICAgICA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9OQU1FID0gCi0JCSJwb3J0YWJsZS1leHRlbnNpb25zLXByb2Nlc3MtaW5qZWN0aW9uLXRhcmdldCI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfTkFNRSA9CisgICAgICAgICJwb3J0YWJsZS1leHRlbnNpb25zLXByb2Nlc3MtaW5qZWN0aW9uLXRhcmdldCI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVYUEVDVEVEX1JFU1BPTlNFID0gIkhlbGxvIGZyb20gU2VydmxldCAzLjAuIjsKIAogICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIGhvc3Q7CkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIHByb2Nlc3MgaW5qZWN0aW9uIHRhcmdldCBleHRlbnNpb24iKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC00OSw3ICs0OSw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVNUX05BTUUgKyAiIHRlc3QgZmFpbGVkIik7CkBAIC02OCw3ICs2OCw3IEBACiAgICAgICAgIGlmIChFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3Byb2Nlc3MtaW5qZWN0aW9uLXRhcmdldC9zZXJ2bGV0L3Rlc3QvZXh0ZW5zaW9uL015RXh0ZW5zaW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9wcm9jZXNzLWluamVjdGlvbi10YXJnZXQvc2VydmxldC90ZXN0L2V4dGVuc2lvbi9NeUV4dGVuc2lvbi5qYXZhCmluZGV4IDkzYWJkNTMuLmMyNTllYTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3Byb2Nlc3MtaW5qZWN0aW9uLXRhcmdldC9zZXJ2bGV0L3Rlc3QvZXh0ZW5zaW9uL015RXh0ZW5zaW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvcHJvY2Vzcy1pbmplY3Rpb24tdGFyZ2V0L3NlcnZsZXQvdGVzdC9leHRlbnNpb24vTXlFeHRlbnNpb24uamF2YQpAQCAtNTQsNyArNTQsNyBAQAogICAgICAgICAgICAgICAgIGl0LnByZURlc3Ryb3koaW5zdGFuY2UpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCBkaXNwb3NlKFBvcnRhYmxlRXh0ZW5zaW9uSW5qZWN0aW9uVGFyZ2V0VGVzdFNlcnZsZXQgaW5zdGFuY2UpIHsgICAgICAgIAorICAgICAgICAgICAgcHVibGljIHZvaWQgZGlzcG9zZShQb3J0YWJsZUV4dGVuc2lvbkluamVjdGlvblRhcmdldFRlc3RTZXJ2bGV0IGluc3RhbmNlKSB7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHB1YmxpYyBTZXQ8SW5qZWN0aW9uUG9pbnQ+IGdldEluamVjdGlvblBvaW50cygpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3Byb2Nlc3MtaW5qZWN0aW9uLXRhcmdldC9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9Qb3J0YWJsZUV4dGVuc2lvbkluamVjdGlvblRhcmdldFRlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9wcm9jZXNzLWluamVjdGlvbi10YXJnZXQvc2VydmxldC90ZXN0L3NlcnZsZXQvUG9ydGFibGVFeHRlbnNpb25JbmplY3Rpb25UYXJnZXRUZXN0U2VydmxldC5qYXZhCmluZGV4IGJmZDlhYTUuLjQ1N2E1YzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3Byb2Nlc3MtaW5qZWN0aW9uLXRhcmdldC9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9Qb3J0YWJsZUV4dGVuc2lvbkluamVjdGlvblRhcmdldFRlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvcHJvY2Vzcy1pbmplY3Rpb24tdGFyZ2V0L3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1BvcnRhYmxlRXh0ZW5zaW9uSW5qZWN0aW9uVGFyZ2V0VGVzdFNlcnZsZXQuamF2YQpAQCAtNDAsMTAgKzQwLDEwIEBACiAgKi8KIEBXZWJTZXJ2bGV0KG5hbWUgPSAibXl0ZXN0IiwgdXJsUGF0dGVybnMgPSB7ICIvbXl1cmwiIH0pCiBwdWJsaWMgY2xhc3MgUG9ydGFibGVFeHRlbnNpb25JbmplY3Rpb25UYXJnZXRUZXN0U2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKLSAgICAKKwogLy8gICAgQEluamVjdAogLy8gICAgQmVhbk1hbmFnZXIgYm07Ci0gICAgCisKICAgICBTdHJpbmcgbXNnID0gIiI7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvbGF0aWxlIGJvb2xlYW4gcGl0Q2FsbGVkOwpAQCAtNjIsNyArNjIsNyBAQAogICAgICAgICBpZiAoIXBpdHNJbmplY3Rpb25UYXJnZXRVc2VkKSB7CiAgICAgICAgICAgICBtc2cgKz0gIiBNeUV4dGVuc2lvbidzIHJlcGxhY2VkIEluamVjdGlvblRhcmdldCBpcyBub3QgdXNlZCI7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgd3JpdGVyLndyaXRlKG1zZyArICJcbiIpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvc2ltcGxlLXBvcnRhYmxlLWV4dGVuc2lvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvc2ltcGxlLXBvcnRhYmxlLWV4dGVuc2lvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGU3ODQ2NzUuLjVjMDlhYjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3NpbXBsZS1wb3J0YWJsZS1leHRlbnNpb24vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9zaW1wbGUtcG9ydGFibGUtZXh0ZW5zaW9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2ltcGxlLXBvcnRhYmxlLWV4dGVuc2lvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvc2ltcGxlLXBvcnRhYmxlLWV4dGVuc2lvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9zaW1wbGUtcG9ydGFibGUtZXh0ZW5zaW9uL2J1aWxkLnhtbAppbmRleCA4ODk0Njg4Li4yNTU2NTMyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9zaW1wbGUtcG9ydGFibGUtZXh0ZW5zaW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9zaW1wbGUtcG9ydGFibGUtZXh0ZW5zaW9uL2J1aWxkLnhtbApAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSJjbGllbnQvdGVzdC9jbGllbnQiIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ4LDI0ICs0OCwyNCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgotICAgICAgICAJPHBhcmFtIG5hbWU9ImNkaS1leHRlbnNpb24uc2VydmljZSIgdmFsdWU9ImNkaS1leHRlbnNpb24uc2VydmljZSIvPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImNkaS1leHRlbnNpb24uc2VydmljZSIgdmFsdWU9ImNkaS1leHRlbnNpb24uc2VydmljZSIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iY2xpZW50IiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0idGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJ0ZXN0LmNsaWVudC5XZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc3LDEwICs3NywxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3NpbXBsZS1wb3J0YWJsZS1leHRlbnNpb24vY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3NpbXBsZS1wb3J0YWJsZS1leHRlbnNpb24vY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQppbmRleCAxNzRkMTcxLi5hMjBlNGRiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9zaW1wbGUtcG9ydGFibGUtZXh0ZW5zaW9uL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvc2ltcGxlLXBvcnRhYmxlLWV4dGVuc2lvbi9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIHBvcnRhYmxlIGV4dGVuc2lvbnMiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC00OSw3ICs0OSw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVNUX05BTUUgKyAiIHRlc3QgZmFpbGVkIik7CkBAIC01OSw3ICs1OSw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgICAgICAgICAgKyAiL215dXJsIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvcGVuaW5nIGNvbm5lY3Rpb24gdG8gIiArIHVybCk7CkBAIC05OCwxMCArOTgsMTAgQEAKICAgICAgICAgICAgIGlmIChFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3NpbXBsZS1wb3J0YWJsZS1leHRlbnNpb24vc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3NpbXBsZS1wb3J0YWJsZS1leHRlbnNpb24vc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YQppbmRleCBjOGNkNzY3Li42MDU5OGU1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9zaW1wbGUtcG9ydGFibGUtZXh0ZW5zaW9uL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvc2ltcGxlLXBvcnRhYmxlLWV4dGVuc2lvbi9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCkBAIC0yOSwyMyArMjksMjMgQEAKICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gYXJvdW5kSW52b2tlQ2FsbGVkID0gZmFsc2U7CiAgICAgcHVibGljIHN0YXRpYyBpbnQgYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50ID0gMDsKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBlcnJvck1lc3NhZ2UgPSAiIjsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBUZXN0RGVwZW5kZW50QmVhbiB0YjsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBUcmFuc2FjdGlvbkludGVyY2VwdG9yKE15RXh0ZW5zaW9uIG15ZXgpeyAvL0luamVjdGlvbiBvZiBwb3J0YWJsZSBleHRlbnNpb24gaW4gYSBiZWFuCiAgICAgICAgIGlmKG15ZXggPT0gbnVsbCkgewogICAgICAgICAgICAgZXJyb3JNZXNzYWdlICs9ICJQb3J0YWJsZSBFeHRlbnNpb24gSW5qZWN0aW9uIGluIEludGVyY2VwdG9yIGZhaWxlZCI7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIEBBcm91bmRJbnZva2UKICAgICBwdWJsaWMgT2JqZWN0IG1hbmFnZVRyYW5zYWN0aW9uKEludm9jYXRpb25Db250ZXh0IGN0eCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVHJhbnNhY3Rpb25JbnRlcmNlcHRvcjo6QXJvdW5kSW52b2tlIik7CiAgICAgICAgIGlmICh0YiA9PSBudWxsKSBlcnJvck1lc3NhZ2UgKz0gIkRlcGVuZGVuY3kgSW5qZWN0aW9uICIgKwotICAgICAgICAJCSJpbnRvIFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IgZmFpbGVkIjsKKyAgICAgICAgICAgICAgICAiaW50byBUcmFuc2FjdGlvbkludGVyY2VwdG9yIGZhaWxlZCI7CiAgICAgICAgIGFyb3VuZEludm9rZUNhbGxlZCA9IHRydWU7CiAgICAgICAgIGFyb3VuZEludm9rZUludm9jYXRpb25Db3VudCArKzsKICAgICAgICAgcmV0dXJuIGN0eC5wcm9jZWVkKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9zaW1wbGUtcG9ydGFibGUtZXh0ZW5zaW9uL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbmFsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9zaW1wbGUtcG9ydGFibGUtZXh0ZW5zaW9uL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbmFsLmphdmEKaW5kZXggOThmODVkNC4uOGJkOThjYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvc2ltcGxlLXBvcnRhYmxlLWV4dGVuc2lvbi9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25hbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wb3J0YWJsZS1leHRlbnNpb25zL3NpbXBsZS1wb3J0YWJsZS1leHRlbnNpb24vc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uYWwuamF2YQpAQCAtMzEsNSArMzEsNSBAQAogQEludGVyY2VwdG9yQmluZGluZwogcHVibGljIEBpbnRlcmZhY2UgVHJhbnNhY3Rpb25hbCB7CiAKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvc2ltcGxlLXBvcnRhYmxlLWV4dGVuc2lvbi9zZXJ2bGV0L3Rlc3QvZXh0ZW5zaW9uL015RXh0ZW5zaW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9zaW1wbGUtcG9ydGFibGUtZXh0ZW5zaW9uL3NlcnZsZXQvdGVzdC9leHRlbnNpb24vTXlFeHRlbnNpb24uamF2YQppbmRleCAwZTlmMWE3Li5kNDk3Y2U0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9zaW1wbGUtcG9ydGFibGUtZXh0ZW5zaW9uL3NlcnZsZXQvdGVzdC9leHRlbnNpb24vTXlFeHRlbnNpb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9zaW1wbGUtcG9ydGFibGUtZXh0ZW5zaW9uL3NlcnZsZXQvdGVzdC9leHRlbnNpb24vTXlFeHRlbnNpb24uamF2YQpAQCAtMzMsMTIgKzMzLDEyIEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gTXlFeHRlbnNpb24gY3RvciIpOwogICAgICAgICAvL25ldyBUaHJvd2FibGUoKS5wcmludFN0YWNrVHJhY2UoKTsKICAgICB9Ci0gICAgCisKICAgICB2b2lkIGJlZm9yZUJlYW5EaXNjb3ZlcnkoQE9ic2VydmVzIEJlZm9yZUJlYW5EaXNjb3ZlcnkgYmRkKXsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNeUV4dGVuc2lvbjo6YmVmb3JlQmVhbkRpc2NvdmVyeSIgKyBiZGQpOwogICAgICAgICBiZWZvcmVCZWFuRGlzY292ZXJ5Q2FsbGVkID0gdHJ1ZTsKICAgICB9Ci0gICAgCisKICAgICA8VD4gdm9pZCBwcm9jZXNzQW5ub3RhdGVkVHlwZShAT2JzZXJ2ZXMgUHJvY2Vzc0Fubm90YXRlZFR5cGU8VD4gcGF0KXsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNeUV4dGVuc2lvbjpQcm9jZXNzIGFubm90YXRlZCB0eXBlIiArIHBhdC5nZXRBbm5vdGF0ZWRUeXBlKCkuZ2V0QmFzZVR5cGUoKSk7CiAgICAgICAgIHByb2Nlc3NBbm5vdGF0ZWRUeXBlQ2FsbGVkID0gdHJ1ZTsKQEAgLTQ5LDEwICs0OSwxMCBAQAogICAgICAgICAgICAgcGF0LnZldG8oKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHZvaWQgYWZ0ZXJCZWFuRGlzY292ZXJ5KEBPYnNlcnZlcyBBZnRlckJlYW5EaXNjb3ZlcnkgYWJkLCBCZWFuTWFuYWdlciBibSl7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTXlFeHRlbnNpb246IGFiZDogIiArIGFiZCArICIgQmVhbk1hbmFnZXI6ICIgKyBibSk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChibSAhPSBudWxsKSB7CiAgICAgICAgICAgICAvL2Vuc3VyZSBhIHZhbGlkIEJlYW5NYW5hZ2VyIGlzIGluamVjdGVkCiAgICAgICAgICAgICBhZnRlckJlYW5EaXNjb3ZlcnlDYWxsZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3BvcnRhYmxlLWV4dGVuc2lvbnMvc2ltcGxlLXBvcnRhYmxlLWV4dGVuc2lvbi9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9TaW1wbGVQb3J0YWJsZUV4dGVuc2lvblRlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9zaW1wbGUtcG9ydGFibGUtZXh0ZW5zaW9uL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1NpbXBsZVBvcnRhYmxlRXh0ZW5zaW9uVGVzdFNlcnZsZXQuamF2YQppbmRleCA4NGE4NjhhLi5hNzBlZDUwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9zaW1wbGUtcG9ydGFibGUtZXh0ZW5zaW9uL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1NpbXBsZVBvcnRhYmxlRXh0ZW5zaW9uVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcG9ydGFibGUtZXh0ZW5zaW9ucy9zaW1wbGUtcG9ydGFibGUtZXh0ZW5zaW9uL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1NpbXBsZVBvcnRhYmxlRXh0ZW5zaW9uVGVzdFNlcnZsZXQuamF2YQpAQCAtMzksNyArMzksNyBAQAogICAgIEBJbmplY3QKICAgICBAUHJlZmVycmVkCiAgICAgVGVzdEJlYW4gdGI7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgQmVhbk1hbmFnZXIgYm07CiAKQEAgLTY0LDIyICs2NCwyMiBAQAogICAgICAgICAgICAgICAgICAgICArIFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IuYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50OwogICAgICAgICBpZiAoIVRyYW5zYWN0aW9uSW50ZXJjZXB0b3IuZXJyb3JNZXNzYWdlLnRyaW0oKS5lcXVhbHMoIiIpKQogICAgICAgICAgICAgbXNnICs9IFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IuZXJyb3JNZXNzYWdlOwotICAgICAgICAKKwogICAgICAgICAvL2NoZWNrIGlmIG91ciBwb3J0YWJsZSBleHRlbnNpb24gd2FzIGNhbGxlZAogICAgICAgICBpZiAoIU15RXh0ZW5zaW9uLmJlZm9yZUJlYW5EaXNjb3ZlcnlDYWxsZWQpCiAgICAgICAgICAgICBtc2cgKz0gIlBvcnRhYmxlIEV4dGVuc2lvbiBsaWZlY3ljbGUgb2JzZXJ2ZXIgbWV0aG9kOiAiICsKLSAgICAgICAgICAgIAkJImJlZm9yZUJlYW5EaXNjb3Zlcnkgbm90IGNhbGxlZCI7CisgICAgICAgICAgICAgICAgICAgICJiZWZvcmVCZWFuRGlzY292ZXJ5IG5vdCBjYWxsZWQiOwogCiAgICAgICAgIGlmICghTXlFeHRlbnNpb24uYWZ0ZXJCZWFuRGlzY292ZXJ5Q2FsbGVkKQogICAgICAgICAgICAgbXNnICs9ICJQb3J0YWJsZSBFeHRlbnNpb24gbGlmZWN5Y2xlIG9ic2VydmVyIG1ldGhvZDogIiArCi0gICAgICAgICAgICAJCSJhZnRlckJlYW5EaXNjb3Zlcnkgbm90IGNhbGxlZCBvciBpbmplY3Rpb24gb2YgQmVhbk1hbmFnZXIgIiArCi0gICAgICAgICAgICAJCSJpbiBhbiBvYnNlcnZlciBtZXRob2QgZmFpbGVkIjsKLSAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICJhZnRlckJlYW5EaXNjb3Zlcnkgbm90IGNhbGxlZCBvciBpbmplY3Rpb24gb2YgQmVhbk1hbmFnZXIgIiArCisgICAgICAgICAgICAgICAgICAgICJpbiBhbiBvYnNlcnZlciBtZXRob2QgZmFpbGVkIjsKKwogICAgICAgICBpZiAoIU15RXh0ZW5zaW9uLnByb2Nlc3NBbm5vdGF0ZWRUeXBlQ2FsbGVkKQogICAgICAgICAgICAgbXNnICs9ICJQb3J0YWJsZSBFeHRlbnNpb24gbGlmZWN5Y2xlIG9ic2VydmVyIG1ldGhvZDogcHJvY2VzcyAiICsKLSAgICAgICAgICAgIAkJImFubm90YXRlZCB0eXBlIG5vdCBjYWxsZWQiOworICAgICAgICAgICAgICAgICAgICAiYW5ub3RhdGVkIHR5cGUgbm90IGNhbGxlZCI7CiAKLSAgICAgICAgaWYoKGJtLmdldEJlYW5zKE15RXh0ZW5zaW9uLmNsYXNzLCBuZXcgQW5ub3RhdGlvbkxpdGVyYWw8QW55Pigpe30pLml0ZXJhdG9yKCkubmV4dCgpLmdldENsYXNzKCkpID09IG51bGwpIAorICAgICAgICBpZigoYm0uZ2V0QmVhbnMoTXlFeHRlbnNpb24uY2xhc3MsIG5ldyBBbm5vdGF0aW9uTGl0ZXJhbDxBbnk+KCl7fSkuaXRlcmF0b3IoKS5uZXh0KCkuZ2V0Q2xhc3MoKSkgPT0gbnVsbCkKICAgICAgICAgICAgIG1zZyArPSAiUG9ydGFibGUgRXh0ZW5zaW9uIG5vdCBhdmFpbGFibGUgZm9yIGxvb2t1cCB0aHJvdWdoIEJlYW5NYW5hZ2VyIjsKIAogICAgICAgICB3cml0ZXIud3JpdGUobXNnICsgIlxuIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9idWlsZC54bWwKaW5kZXggYjFmZWJmNi4uOGNiOGQzNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL2J1aWxkLnhtbApAQCAtODQsMTUgKzg0LDE1IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4gVXNhZ2U6Ci0JCWFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgcHJvZG1ldGggdGVzdHMpCi0JCWFudCBjbGVhbiAoY2xlYW5zIGFsbCB0aGUgcHJvZG1ldGggdGVzdHMpCi0JCWFudCBidWlsZCAoYnVpbGRzIGFsbCB0aGUgcHJvZG1ldGggdGVzdHMpCi0JCWFudCBzZXR1cCAoc2V0cyB1cCBhbGwgcmVzb3VyY2VzIGZvciBwcm9kbWV0aCB0ZXN0cykKLQkJYW50IGRlcGxveSAoZGVwbG95cyBhbGwgdGhlIHByb2RtZXRoIGFwcHMpCi0JCWFudCBydW4gKEV4ZWN1dGVzIGFsbCB0aGUgcHJvZG1ldGggdGVzdHMpCi0JCWFudCB1bmRlcGxveSAodW5kZXBsb3lzIGFsbCB0aGUgIHByb2RtZXRoIGFwcHMpCi0JCWFudCB1bnNldHVwICh1bnNldHMgYWxsIHJlc291cmNlcyBmb3IgcHJvZG1ldGggdGVzdHMpCi0JPC9lY2hvPgorICAgIDxlY2hvPiBVc2FnZToKKyAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBwcm9kbWV0aCB0ZXN0cykKKyAgICAgICAgYW50IGNsZWFuIChjbGVhbnMgYWxsIHRoZSBwcm9kbWV0aCB0ZXN0cykKKyAgICAgICAgYW50IGJ1aWxkIChidWlsZHMgYWxsIHRoZSBwcm9kbWV0aCB0ZXN0cykKKyAgICAgICAgYW50IHNldHVwIChzZXRzIHVwIGFsbCByZXNvdXJjZXMgZm9yIHByb2RtZXRoIHRlc3RzKQorICAgICAgICBhbnQgZGVwbG95IChkZXBsb3lzIGFsbCB0aGUgcHJvZG1ldGggYXBwcykKKyAgICAgICAgYW50IHJ1biAoRXhlY3V0ZXMgYWxsIHRoZSBwcm9kbWV0aCB0ZXN0cykKKyAgICAgICAgYW50IHVuZGVwbG95ICh1bmRlcGxveXMgYWxsIHRoZSAgcHJvZG1ldGggYXBwcykKKyAgICAgICAgYW50IHVuc2V0dXAgKHVuc2V0cyBhbGwgcmVzb3VyY2VzIGZvciBwcm9kbWV0aCB0ZXN0cykKKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9wcm9kdWNlci1tZXRob2QtZGlzcG9zZXMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1kaXNwb3Nlcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDk5ZTM4NWIuLjI1MTIxNjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1kaXNwb3Nlcy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1kaXNwb3Nlcy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXByb2R1Y2VyLW1ldGhvZHMtZGlzcG9zZXJtZXRob2RzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9wcm9kdWNlci1tZXRob2QtZGlzcG9zZXMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLWRpc3Bvc2VzL2J1aWxkLnhtbAppbmRleCAwYjliM2EzLi4wYTFmMmY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9wcm9kdWNlci1tZXRob2QtZGlzcG9zZXMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1kaXNwb3Nlcy9idWlsZC54bWwKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iY2xpZW50L3Rlc3QvY2xpZW50IiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00OCwyMyArNDgsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iY2xpZW50IiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0idGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJ0ZXN0LmNsaWVudC5XZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1kaXNwb3Nlcy9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLWRpc3Bvc2VzL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKaW5kZXggYzAwN2JiNi4uYzlhZWZhNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLWRpc3Bvc2VzL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLWRpc3Bvc2VzL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgcHJvZHVjZXIgbWV0aG9kcyIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ5LDcgKzQ5LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKQEAgLTEwMSwxMCArMTAxLDEwIEBACiAgICAgICAgICAgICBpZiAoRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9wcm9kdWNlci1tZXRob2QtZGlzcG9zZXMvc2VydmxldC90ZXN0L2JlYW5zL0JlYW5TZXR1cC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLWRpc3Bvc2VzL3NlcnZsZXQvdGVzdC9iZWFucy9CZWFuU2V0dXAuamF2YQppbmRleCA4NDE3NTM4Li42NjEyMzZhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9wcm9kdWNlci1tZXRob2QtZGlzcG9zZXMvc2VydmxldC90ZXN0L2JlYW5zL0JlYW5TZXR1cC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1kaXNwb3Nlcy9zZXJ2bGV0L3Rlc3QvYmVhbnMvQmVhblNldHVwLmphdmEKQEAgLTUxLDcgKzUxLDcgQEAKICAgICAgICAgICAgICAgICAucHJpbnRsbigiRGlzcG9zZSBtZXRob2QgaW4gQmVhblNldHVwIGZvciB0ZXN0UXVhbGlmaWVyIGNhbGxlZCIpOwogICAgICAgICBpZiAodGIgIT0gbnVsbCkgewogICAgICAgICAgICAgZGlzcG9zZUNhbGxlZEZvclRlc3RRdWFsaWZpZXJFcnJvciA9ICJkaXNwb3NlIG1ldGhvZCBmb3IgdGVzdHF1YWxpZmllciAiICsKLSAgICAgICAgICAgIAkJImNhbGxlZCB3aXRob3V0IGluamVjdGluZyBUZXN0QmVhbiI7CisgICAgICAgICAgICAgICAgICAgICJjYWxsZWQgd2l0aG91dCBpbmplY3RpbmcgVGVzdEJlYW4iOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9wcm9kdWNlci1tZXRob2QtZGlzcG9zZXMvc2VydmxldC90ZXN0L2JlYW5zL1ByZWZlcnJlZC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLWRpc3Bvc2VzL3NlcnZsZXQvdGVzdC9iZWFucy9QcmVmZXJyZWQuamF2YQppbmRleCA4NjRkMzEzLi4yNTJmOGM4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9wcm9kdWNlci1tZXRob2QtZGlzcG9zZXMvc2VydmxldC90ZXN0L2JlYW5zL1ByZWZlcnJlZC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1kaXNwb3Nlcy9zZXJ2bGV0L3Rlc3QvYmVhbnMvUHJlZmVycmVkLmphdmEKQEAgLTMyLDUgKzMyLDUgQEAKIEBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlJVTlRJTUUpCiBwdWJsaWMgQGludGVyZmFjZSBQcmVmZXJyZWQgewogCi0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1kaXNwb3Nlcy9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdFF1YWxpZmllci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLWRpc3Bvc2VzL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0UXVhbGlmaWVyLmphdmEKaW5kZXggNmU4OTIzOS4uZDJkN2E5YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLWRpc3Bvc2VzL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0UXVhbGlmaWVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLWRpc3Bvc2VzL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0UXVhbGlmaWVyLmphdmEKQEAgLTMyLDUgKzMyLDUgQEAKIEBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlJVTlRJTUUpCiBwdWJsaWMgQGludGVyZmFjZSBUZXN0UXVhbGlmaWVyIHsKIAotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9wcm9kdWNlci1tZXRob2QtZGlzcG9zZXMvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RSZXF1ZXN0U2NvcGVkQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLWRpc3Bvc2VzL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0UmVxdWVzdFNjb3BlZEJlYW4uamF2YQppbmRleCA2OWE4NjcyLi5lOWNjNTQyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9wcm9kdWNlci1tZXRob2QtZGlzcG9zZXMvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RSZXF1ZXN0U2NvcGVkQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1kaXNwb3Nlcy9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdFJlcXVlc3RTY29wZWRCZWFuLmphdmEKQEAgLTE4LDUgKzE4LDUgQEAKIAogCiBwdWJsaWMgY2xhc3MgVGVzdFJlcXVlc3RTY29wZWRCZWFuIHsKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLWRpc3Bvc2VzL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1Byb2R1Y2VyTWV0aG9kRGlzcG9zZXNUZXN0U2VydmxldDEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1kaXNwb3Nlcy9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9Qcm9kdWNlck1ldGhvZERpc3Bvc2VzVGVzdFNlcnZsZXQxLmphdmEKaW5kZXggN2MxYTU5Ny4uMjgzMDg3MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLWRpc3Bvc2VzL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1Byb2R1Y2VyTWV0aG9kRGlzcG9zZXNUZXN0U2VydmxldDEuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9wcm9kdWNlci1tZXRob2QtZGlzcG9zZXMvc2VydmxldC90ZXN0L3NlcnZsZXQvUHJvZHVjZXJNZXRob2REaXNwb3Nlc1Rlc3RTZXJ2bGV0MS5qYXZhCkBAIC0zNSw3ICszNSw3IEBACiAKICAgICBASW5qZWN0IEBQcmVmZXJyZWQKICAgICBUZXN0UmVxdWVzdFNjb3BlZEJlYW4gdHJzOwotICAgIAorCiAgICAgQEluamVjdCBAVGVzdFF1YWxpZmllcgogICAgIFRlc3RSZXF1ZXN0U2NvcGVkQmVhbiB0cnMyOwogCkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgIGlmICh0cnMyID09IG51bGwpCiAgICAgICAgICAgICBtc2cgKz0gIlJlcXVlc3RTY29wZWQgQmVhbiBpbmplY3Rpb24gaW50byBTZXJ2bGV0IG9mIEJlYW4gY3JlYXRlZCB0aHJvdWdoICIKICAgICAgICAgICAgICAgICAgICAgKyAicHJvZ3JhbW1hdGljIGluc3RhbnRpYXRpb24gaW4gcHJvZHVjZXIgbWV0aG9kIChUZXN0UXVhbGlmaWVyKSBmYWlsZWQiOwotICAgICAgICAKKwogICAgICAgICB3cml0ZXIud3JpdGUobXNnICsgIlxuIik7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9wcm9kdWNlci1tZXRob2QtZGlzcG9zZXMvc2VydmxldC90ZXN0L3NlcnZsZXQvUHJvZHVjZXJNZXRob2REaXNwb3Nlc1Rlc3RTZXJ2bGV0Mi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLWRpc3Bvc2VzL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1Byb2R1Y2VyTWV0aG9kRGlzcG9zZXNUZXN0U2VydmxldDIuamF2YQppbmRleCA1MzVjMWY0Li44YzZiY2EyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9wcm9kdWNlci1tZXRob2QtZGlzcG9zZXMvc2VydmxldC90ZXN0L3NlcnZsZXQvUHJvZHVjZXJNZXRob2REaXNwb3Nlc1Rlc3RTZXJ2bGV0Mi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1kaXNwb3Nlcy9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9Qcm9kdWNlck1ldGhvZERpc3Bvc2VzVGVzdFNlcnZsZXQyLmphdmEKQEAgLTQzLDcgKzQzLDcgQEAKICAgICAgICAgICAgIG1zZyArPSAiRGlzcG9zZXIgbWV0aG9kIGZvciBwcmVmZXJyZWQgbm90IGNhbGxlZCI7CiAgICAgICAgIGlmICghKEJlYW5TZXR1cC5kaXNwb3NlQ2FsbGVkRm9yVGVzdFF1YWxpZmllckVycm9yLnRyaW0oKS5sZW5ndGgoKSA9PSAwKSkKICAgICAgICAgICAgIG1zZyArPSBCZWFuU2V0dXAuZGlzcG9zZUNhbGxlZEZvclRlc3RRdWFsaWZpZXJFcnJvcjsKLSAgICAgICAgCisKICAgICAgICAgd3JpdGVyLndyaXRlKG1zZyArICJcbiIpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLXF1YWxpZmllcnMvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLXF1YWxpZmllcnMvV2ViVGVzdC5qYXZhCmluZGV4IDFiNmU5N2MuLjYyMTBhY2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1xdWFsaWZpZXJzL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9wcm9kdWNlci1tZXRob2QtcXVhbGlmaWVycy9XZWJUZXN0LmphdmEKQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgQFdlYlNlcnZsZXQiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC00Nyw3ICs0Nyw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVNUX05BTUUgKyAiIHRlc3QgZmFpbGVkIik7CkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgICAgICAgICAgKyAiL215dXJsIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvcGVuaW5nIGNvbm5lY3Rpb24gdG8gIiArIHVybCk7CkBAIC05NiwxMCArOTYsMTAgQEAKICAgICAgICAgICAgIGlmIChFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1xdWFsaWZpZXJzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9wcm9kdWNlci1tZXRob2QtcXVhbGlmaWVycy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGVlZjcwNjAuLjdlNDZhMjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1xdWFsaWZpZXJzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLXF1YWxpZmllcnMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1wcm9kdWNlci1tZXRob2RzLXF1YWxpZmllcnMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1xdWFsaWZpZXJzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1xdWFsaWZpZXJzL2J1aWxkLnhtbAppbmRleCA4M2FkNjY2Li4wNjkxMjEyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9wcm9kdWNlci1tZXRob2QtcXVhbGlmaWVycy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLXF1YWxpZmllcnMvYnVpbGQueG1sCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ3LDIzICs0NywyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc1LDEwICs3NSwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1xdWFsaWZpZXJzL3NlcnZsZXQvUmFuZG9tTnVtYmVyR2VuZXJhdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9wcm9kdWNlci1tZXRob2QtcXVhbGlmaWVycy9zZXJ2bGV0L1JhbmRvbU51bWJlckdlbmVyYXRvci5qYXZhCmluZGV4IDhhZDY1NGYuLjI0ZDYwZGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1xdWFsaWZpZXJzL3NlcnZsZXQvUmFuZG9tTnVtYmVyR2VuZXJhdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLXF1YWxpZmllcnMvc2VydmxldC9SYW5kb21OdW1iZXJHZW5lcmF0b3IuamF2YQpAQCAtMjgsMTAgKzI4LDEwIEBACiAgICAgQFByb2R1Y2VzIEBOYW1lZCBAUmFuZG9tTGVzc1RoYW5PckVxdWFsVG9IdW5kcmVkIGludCBnZXRSYW5kb21OdW1iZXIoKXsKICAgICAgICAgcmV0dXJuIGxlc3NUaGFuMTAwLS07CiAgICAgfQotICAgIAorCiAgICAgLy9HZW5lcmF0ZSBhIG51bWJlciBncmVhdGVyIHRoYW4gMTAwCiAgICAgQFByb2R1Y2VzIEBOYW1lZCBAUmFuZG9tR3JlYXRlclRoYW5IdW5kcmVkIGludCBnZXRSYW5kb21OdW1iZXJHcmVhdGhlclRoYW5IdW5kcmVkKCl7CiAgICAgICAgIHJldHVybiBncmVhdGVyVGhhbjEwMCsrOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLXF1YWxpZmllcnMvc2VydmxldC9UZXN0QmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLXF1YWxpZmllcnMvc2VydmxldC9UZXN0QmVhbi5qYXZhCmluZGV4IDA3YzM1NWYuLjEzZjA3NWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1xdWFsaWZpZXJzL3NlcnZsZXQvVGVzdEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9wcm9kdWNlci1tZXRob2QtcXVhbGlmaWVycy9zZXJ2bGV0L1Rlc3RCZWFuLmphdmEKQEAgLTE2LDEwICsxNiwxMCBAQAogCiBpbXBvcnQgamFrYXJ0YS5pbmplY3QuSW5qZWN0OwogcHVibGljIGNsYXNzIFRlc3RCZWFuIHsKLSAKLSAgICAvL1RoaXMgc2hvdWxkIHVzZSB0aGUgaW50IGNob3NlbiBpbiBCZWFuVG9UZXN0UXVhbGlmZXJJblByb2R1Y2VyTWV0aG9kcyAKKworICAgIC8vVGhpcyBzaG91bGQgdXNlIHRoZSBpbnQgY2hvc2VuIGluIEJlYW5Ub1Rlc3RRdWFsaWZlckluUHJvZHVjZXJNZXRob2RzCiAgICAgQEluamVjdCBpbnQgcm5nOwotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdFByb2R1Y2VyTWV0aG9kKCl7CiAgICAgICAgIHJldHVybiBybmcgPD0gMTAwOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1ydW50aW1lcG9seW1vcnBoaXNtL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9wcm9kdWNlci1tZXRob2QtcnVudGltZXBvbHltb3JwaGlzbS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGVlZjcwNjAuLjdlNDZhMjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1ydW50aW1lcG9seW1vcnBoaXNtL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLXJ1bnRpbWVwb2x5bW9ycGhpc20vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1wcm9kdWNlci1tZXRob2RzLXF1YWxpZmllcnMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1ydW50aW1lcG9seW1vcnBoaXNtL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1ydW50aW1lcG9seW1vcnBoaXNtL2J1aWxkLnhtbAppbmRleCAwYjliM2EzLi4wYTFmMmY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9wcm9kdWNlci1tZXRob2QtcnVudGltZXBvbHltb3JwaGlzbS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLXJ1bnRpbWVwb2x5bW9ycGhpc20vYnVpbGQueG1sCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9ImNsaWVudC90ZXN0L2NsaWVudCIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDgsMjMgKzQ4LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9ImNsaWVudCIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9InRlc3QvY2xpZW50L1dlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0idGVzdC5jbGllbnQuV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9wcm9kdWNlci1tZXRob2QtcnVudGltZXBvbHltb3JwaGlzbS9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLXJ1bnRpbWVwb2x5bW9ycGhpc20vY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQppbmRleCAxZGMxZWExLi40M2ExMmU1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9wcm9kdWNlci1tZXRob2QtcnVudGltZXBvbHltb3JwaGlzbS9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1ydW50aW1lcG9seW1vcnBoaXNtL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgcHJvZHVjZXIgbWV0aG9kcyIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ5LDcgKzQ5LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKQEAgLTU5LDcgKzU5LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICArICIvbXl1cmwiOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9wZW5pbmcgY29ubmVjdGlvbiB0byAiICsgdXJsKTsKQEAgLTk4LDEwICs5OCwxMCBAQAogICAgICAgICAgICAgaWYgKEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLXJ1bnRpbWVwb2x5bW9ycGhpc20vc2VydmxldC90ZXN0L2JlYW5zL0NyZWRpdENhcmRQYXltZW50U3RyYXRlZ3kuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1ydW50aW1lcG9seW1vcnBoaXNtL3NlcnZsZXQvdGVzdC9iZWFucy9DcmVkaXRDYXJkUGF5bWVudFN0cmF0ZWd5LmphdmEKaW5kZXggYjhmMzUxOC4uZDMyMTFiYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLXJ1bnRpbWVwb2x5bW9ycGhpc20vc2VydmxldC90ZXN0L2JlYW5zL0NyZWRpdENhcmRQYXltZW50U3RyYXRlZ3kuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9wcm9kdWNlci1tZXRob2QtcnVudGltZXBvbHltb3JwaGlzbS9zZXJ2bGV0L3Rlc3QvYmVhbnMvQ3JlZGl0Q2FyZFBheW1lbnRTdHJhdGVneS5qYXZhCkBAIC0yMCw3ICsyMCw3IEBACiAKIGltcG9ydCBqYWthcnRhLmVudGVycHJpc2UuY29udGV4dC5SZXF1ZXN0U2NvcGVkOwogCi1AUmVxdWVzdFNjb3BlZCAKK0BSZXF1ZXN0U2NvcGVkCiAvL05vdGU6IFRoaXMgaXMgcmVxdWVzdCBzY29wZWQgYmVhbgogcHVibGljIGNsYXNzIENyZWRpdENhcmRQYXltZW50U3RyYXRlZ3kgaW1wbGVtZW50cyBQYXltZW50U3RyYXRlZ3ksIFNlcmlhbGl6YWJsZSB7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1ydW50aW1lcG9seW1vcnBoaXNtL3NlcnZsZXQvdGVzdC9iZWFucy9QcmVmZXJyZWRfQ3JlYXRlZFByb2dyYW1tYXRpY2FsbHkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1ydW50aW1lcG9seW1vcnBoaXNtL3NlcnZsZXQvdGVzdC9iZWFucy9QcmVmZXJyZWRfQ3JlYXRlZFByb2dyYW1tYXRpY2FsbHkuamF2YQppbmRleCAzYmRkMTY4Li5kOTAyMzI3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9wcm9kdWNlci1tZXRob2QtcnVudGltZXBvbHltb3JwaGlzbS9zZXJ2bGV0L3Rlc3QvYmVhbnMvUHJlZmVycmVkX0NyZWF0ZWRQcm9ncmFtbWF0aWNhbGx5LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLXJ1bnRpbWVwb2x5bW9ycGhpc20vc2VydmxldC90ZXN0L2JlYW5zL1ByZWZlcnJlZF9DcmVhdGVkUHJvZ3JhbW1hdGljYWxseS5qYXZhCkBAIC0zMiw1ICszMiw1IEBACiBAUmV0ZW50aW9uKFJldGVudGlvblBvbGljeS5SVU5USU1FKQogcHVibGljIEBpbnRlcmZhY2UgUHJlZmVycmVkX0NyZWF0ZWRQcm9ncmFtbWF0aWNhbGx5IHsKIAotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9wcm9kdWNlci1tZXRob2QtcnVudGltZXBvbHltb3JwaGlzbS9zZXJ2bGV0L3Rlc3QvYmVhbnMvUHJlZmVycmVkX0NyZWF0ZWRWaWFJbmplY3Rpb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1ydW50aW1lcG9seW1vcnBoaXNtL3NlcnZsZXQvdGVzdC9iZWFucy9QcmVmZXJyZWRfQ3JlYXRlZFZpYUluamVjdGlvbi5qYXZhCmluZGV4IGQ5YmNiNGMuLjQwMmRjYzkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1ydW50aW1lcG9seW1vcnBoaXNtL3NlcnZsZXQvdGVzdC9iZWFucy9QcmVmZXJyZWRfQ3JlYXRlZFZpYUluamVjdGlvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1ydW50aW1lcG9seW1vcnBoaXNtL3NlcnZsZXQvdGVzdC9iZWFucy9QcmVmZXJyZWRfQ3JlYXRlZFZpYUluamVjdGlvbi5qYXZhCkBAIC0zMyw1ICszMyw1IEBACiBAUmV0ZW50aW9uKFJldGVudGlvblBvbGljeS5SVU5USU1FKQogcHVibGljIEBpbnRlcmZhY2UgUHJlZmVycmVkX0NyZWF0ZWRWaWFJbmplY3Rpb24gewogCi0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1ydW50aW1lcG9seW1vcnBoaXNtL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1Byb2R1Y2VyTWV0aG9kUnVudGltZVBvbHltb3JocGlzbVRlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZHVjZXItbWV0aG9kcy9wcm9kdWNlci1tZXRob2QtcnVudGltZXBvbHltb3JwaGlzbS9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9Qcm9kdWNlck1ldGhvZFJ1bnRpbWVQb2x5bW9yaHBpc21UZXN0U2VydmxldC5qYXZhCmluZGV4IGFkNDYyY2UuLjQ4OGE0ZTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9kdWNlci1tZXRob2RzL3Byb2R1Y2VyLW1ldGhvZC1ydW50aW1lcG9seW1vcnBoaXNtL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1Byb2R1Y2VyTWV0aG9kUnVudGltZVBvbHltb3JocGlzbVRlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2R1Y2VyLW1ldGhvZHMvcHJvZHVjZXItbWV0aG9kLXJ1bnRpbWVwb2x5bW9ycGhpc20vc2VydmxldC90ZXN0L3NlcnZsZXQvUHJvZHVjZXJNZXRob2RSdW50aW1lUG9seW1vcmhwaXNtVGVzdFNlcnZsZXQuamF2YQpAQCAtNDYsNyArNDYsNyBAQAogICAgIEBJbmplY3QKICAgICBAUHJlZmVycmVkX0NyZWF0ZWRWaWFJbmplY3Rpb24KICAgICBQYXltZW50U3RyYXRlZ3kgcGF5SW5qZWN0MjsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBDcmVkaXRDYXJkUGF5bWVudFN0cmF0ZWd5IGNjcHM7Ly8gVGhpcyBzaG91bGQgYmUgdGhlIHJlcXVlc3Qtc2NvcGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluc3RhbmNlLgpAQCAtNjgsMTggKzY4LDE4IEBACiAKICAgICAgICAgaWYgKCEocGF5Q3JlYXRlIGluc3RhbmNlb2YgUGF5bWVudFN0cmF0ZWd5KSkKICAgICAgICAgICAgIG1zZyArPSAiQmVhbiBydW50aW1lIHBvbHltb3JwaGlzbSBpbiBwcm9kdWNlciBtZXRob2QgIiArCi0gICAgICAgICAgICAJCSJpbiBQcmVmZXJlbmNlcyBmYWlsZWQiOworICAgICAgICAgICAgICAgICAgICAiaW4gUHJlZmVyZW5jZXMgZmFpbGVkIjsKICAgICAgICAgaWYgKCEocGF5SW5qZWN0IGluc3RhbmNlb2YgUGF5bWVudFN0cmF0ZWd5KSkKICAgICAgICAgICAgIG1zZyArPSAiQmVhbiBydW50aW1lIHBvbHltb3JwaGlzbSBpbiBwcm9kdWNlciBtZXRob2QoZGVwIGluamVjdGlvbiAiICsKLSAgICAgICAgICAgIAkJImluIG1ldGhvZCBwYXJhbWV0ZXJzIGluIFByZWZlcmVuY2VzIGZhaWxlZCI7CisgICAgICAgICAgICAgICAgICAgICJpbiBtZXRob2QgcGFyYW1ldGVycyBpbiBQcmVmZXJlbmNlcyBmYWlsZWQiOwogCiAgICAgICAgIGlmIChhcmVJbmplY3RlZEluc3RhbmNlc0VxdWFsKGNjcHMsIHBheUluamVjdCkpCiAgICAgICAgICAgICBtc2cgKz0gIlVzZSBvZiBATmV3IHRvIGNyZWF0ZSBuZXcgRGVwZW5kZW50IG9iamVjdCB3aGlsZSBpbmplY3RpbmcgIiArCi0gICAgICAgICAgICAJCSJpbiBwcm9kdWNlciBtZXRob2QgZmFpbGVkIjsKKyAgICAgICAgICAgICAgICAgICAgImluIHByb2R1Y2VyIG1ldGhvZCBmYWlsZWQiOwogCiAgICAgICAgIGlmICghYXJlSW5qZWN0ZWRJbnN0YW5jZXNFcXVhbChwYXlJbmplY3QsIHBheUluamVjdDIpKQogICAgICAgICAgICAgbXNnICs9ICJTZXNzaW9uLXNjb3BlZCBwcm9kdWNlciBtZXRob2QgY3JlYXRlZCBCZWFuIGluamVjdGVkIGluICIgKwotICAgICAgICAgICAgCQkiZGlmZmVyZW50IGluamVjdGlvbiBwb2ludHMgYXJlIG5vdCBlcXVhbCI7CisgICAgICAgICAgICAgICAgICAgICJkaWZmZXJlbnQgaW5qZWN0aW9uIHBvaW50cyBhcmUgbm90IGVxdWFsIjsKIAogICAgICAgICB3cml0ZXIud3JpdGUobXNnICsgIlxuIik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2dyYW1tYXRpYy1sb29rdXAvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2dyYW1tYXRpYy1sb29rdXAvV2ViVGVzdC5qYXZhCmluZGV4IDM1Zjc1MTguLjE2NjE5MzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9ncmFtbWF0aWMtbG9va3VwL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZ3JhbW1hdGljLWxvb2t1cC9XZWJUZXN0LmphdmEKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlRlc3RpbmcgUHJvZ3JhbW1hdGljIExvb2t1cCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKQEAgLTU2LDcgKzU2LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICArICIvbXl1cmwiOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9wZW5pbmcgY29ubmVjdGlvbiB0byAiICsgdXJsKTsKQEAgLTk2LDEwICs5NiwxMCBAQAogICAgICAgICAgICAgaWYgKEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2dyYW1tYXRpYy1sb29rdXAvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9ncmFtbWF0aWMtbG9va3VwL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNTdiYTVmZi4uYmFlYTVhOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2dyYW1tYXRpYy1sb29rdXAvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZ3JhbW1hdGljLWxvb2t1cC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGktcHJvZ3JhbW1hdGljLWxvb2t1cCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC1hbm5vdGF0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZ3JhbW1hdGljLWxvb2t1cC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZ3JhbW1hdGljLWxvb2t1cC9idWlsZC54bWwKaW5kZXggYzBkOTA0ZC4uODcyZjM2NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2dyYW1tYXRpYy1sb29rdXAvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9ncmFtbWF0aWMtbG9va3VwL2J1aWxkLnhtbApAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NywyMyArNDcsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NSwxMCArNzUsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZ3JhbW1hdGljLWxvb2t1cC9zZXJ2bGV0L3Rlc3QvYXJ0aWZhY3RzL1Rlc3RBcHBsaWNhdGlvblNjb3BlZEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9ncmFtbWF0aWMtbG9va3VwL3NlcnZsZXQvdGVzdC9hcnRpZmFjdHMvVGVzdEFwcGxpY2F0aW9uU2NvcGVkQmVhbi5qYXZhCmluZGV4IGQyNGE3NmUuLjhkNzY0MjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9ncmFtbWF0aWMtbG9va3VwL3NlcnZsZXQvdGVzdC9hcnRpZmFjdHMvVGVzdEFwcGxpY2F0aW9uU2NvcGVkQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9ncmFtbWF0aWMtbG9va3VwL3NlcnZsZXQvdGVzdC9hcnRpZmFjdHMvVGVzdEFwcGxpY2F0aW9uU2NvcGVkQmVhbi5qYXZhCkBAIC0yMyw3ICsyMyw3IEBACiBwdWJsaWMgY2xhc3MgVGVzdEFwcGxpY2F0aW9uU2NvcGVkQmVhbiB7CiAgICAgQEluamVjdAogICAgIFRlc3RTZXNzaW9uU2NvcGVkQmVhbiB0c2I7Ci0gICAgCisKICAgICBwdWJsaWMgVGVzdFNlc3Npb25TY29wZWRCZWFuIGdldFNlc3Npb25TY29wZWRCZWFuKCl7CiAgICAgICAgIHJldHVybiB0c2I7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2dyYW1tYXRpYy1sb29rdXAvc2VydmxldC90ZXN0L2FydGlmYWN0cy9VbnByb3h5YWJsZVR5cGVXaXRoTm9QdWJsaWNOdWxsQ29uc3RydWN0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9ncmFtbWF0aWMtbG9va3VwL3NlcnZsZXQvdGVzdC9hcnRpZmFjdHMvVW5wcm94eWFibGVUeXBlV2l0aE5vUHVibGljTnVsbENvbnN0cnVjdG9yLmphdmEKaW5kZXggMzE4M2NmYi4uNmZlZWM4NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2dyYW1tYXRpYy1sb29rdXAvc2VydmxldC90ZXN0L2FydGlmYWN0cy9VbnByb3h5YWJsZVR5cGVXaXRoTm9QdWJsaWNOdWxsQ29uc3RydWN0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZ3JhbW1hdGljLWxvb2t1cC9zZXJ2bGV0L3Rlc3QvYXJ0aWZhY3RzL1VucHJveHlhYmxlVHlwZVdpdGhOb1B1YmxpY051bGxDb25zdHJ1Y3Rvci5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiBwdWJsaWMgY2xhc3MgVW5wcm94eWFibGVUeXBlV2l0aE5vUHVibGljTnVsbENvbnN0cnVjdG9yIGltcGxlbWVudHMgVW5wcm94eWFibGVUeXBlLCBTZXJpYWxpemFibGV7CiAgICAgLy9wcml2YXRlIG51bGwgY3RvcgogICAgIHByaXZhdGUgVW5wcm94eWFibGVUeXBlV2l0aE5vUHVibGljTnVsbENvbnN0cnVjdG9yKCl7Ci0gICAgICAgIAorCiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZ3JhbW1hdGljLWxvb2t1cC9zZXJ2bGV0L3Rlc3QvYmVhbnMvQmVhblRvVGVzdFByb2dyYW1tYXRpY0xvb2t1cC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Byb2dyYW1tYXRpYy1sb29rdXAvc2VydmxldC90ZXN0L2JlYW5zL0JlYW5Ub1Rlc3RQcm9ncmFtbWF0aWNMb29rdXAuamF2YQppbmRleCA3MTBkZjI3Li4wNDE2YmJmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcHJvZ3JhbW1hdGljLWxvb2t1cC9zZXJ2bGV0L3Rlc3QvYmVhbnMvQmVhblRvVGVzdFByb2dyYW1tYXRpY0xvb2t1cC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9wcm9ncmFtbWF0aWMtbG9va3VwL3NlcnZsZXQvdGVzdC9iZWFucy9CZWFuVG9UZXN0UHJvZ3JhbW1hdGljTG9va3VwLmphdmEKQEAgLTYyLDcgKzYyLDcgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIjIG9mIFVucHJveHlhYmxlIHR5cGVzOiIKICAgICAgICAgICAgICAgICArIG51bWJlck9mVW5wcm94eWFibGVUeXBlcyk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibW9jayBwYXltZW50IHByb2Nzc29yOiIgKyBwcCk7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiAobnVtYmVyT2ZQYXltZW50UHJvY2Vzc29ycyA9PSA1KQogICAgICAgICAvLyBBc3luYywgU3luYywgQ2hlcXVlLAogICAgICAgICAgICAgICAgIC8vIFJlbGlhYmxlQ2FzaCwKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9xdWFsaWZpZXJzL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9xdWFsaWZpZXJzL1dlYlRlc3QuamF2YQppbmRleCA2NGM3NjQzLi5jMWM5ZTJjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcXVhbGlmaWVycy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3F1YWxpZmllcnMvV2ViVGVzdC5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJUZXN0aW5nIFF1YWxpZmllcnMiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC00Niw3ICs0Niw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVNUX05BTUUgKyAiIHRlc3QgZmFpbGVkIik7CkBAIC01Niw3ICs1Niw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgICAgICAgICAgKyAiL215dXJsIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvcGVuaW5nIGNvbm5lY3Rpb24gdG8gIiArIHVybCk7CkBAIC05NiwxMCArOTYsMTAgQEAKICAgICAgICAgICAgIGlmIChFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9xdWFsaWZpZXJzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcXVhbGlmaWVycy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDBhMWVjYmQuLjI0MTZmM2UgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9xdWFsaWZpZXJzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3F1YWxpZmllcnMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpLXF1YWxpZmllcnMiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtYW5ub3RhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3F1YWxpZmllcnMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3F1YWxpZmllcnMvYnVpbGQueG1sCmluZGV4IGMwZDkwNGQuLjg3MmYzNjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9xdWFsaWZpZXJzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcXVhbGlmaWVycy9idWlsZC54bWwKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDcsMjMgKzQ3LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzUsMTAgKzc1LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3F1YWxpZmllcnMvc2VydmxldC9RdWFsaWZpZXJTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcXVhbGlmaWVycy9zZXJ2bGV0L1F1YWxpZmllclNlcnZsZXQuamF2YQppbmRleCA1ZjMyZDY4Li4zMTQ4NDczIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcXVhbGlmaWVycy9zZXJ2bGV0L1F1YWxpZmllclNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcXVhbGlmaWVycy9zZXJ2bGV0L1F1YWxpZmllclNlcnZsZXQuamF2YQpAQCAtMzksNyArMzksNyBAQAogICAgICAgICBAV2ViSW5pdFBhcmFtKG5hbWUgPSAibjEiLCB2YWx1ZSA9ICJ2MSIpLAogICAgICAgICBAV2ViSW5pdFBhcmFtKG5hbWUgPSAibjIiLCB2YWx1ZSA9ICJ2MiIpIH0pCiBwdWJsaWMgY2xhc3MgUXVhbGlmaWVyU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBCZWFuVG9UZXN0SW5pdGlhbGl6ZXJNZXRob2RJbmplY3Rpb24gdGI7CiAKQEAgLTQ4LDcgKzQ4LDcgQEAKIAogICAgIEBJbmplY3QKICAgICBCZWFuVG9UZXN0QW55IHRiMzsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBCZWFuVG9UZXN0TXVsdGlwbGVRdWFsaWZpZXJzIHRiNDsKIApAQCAtNzgsNyArNzgsNyBAQAogICAgICAgICAgICAgbXNnICs9ICJRdWFsaWZpZXIgYmFzZWQgaW5qZWN0aW9uIGludG8gQmVhblRvVGVzdENvbnN0cnVjdG9yTWV0aG9kSW5qZWN0aW9uIChjb25zdHJ1Y3RvciBtZXRob2QgaW5qZWN0aW9uKSBGYWlsZWQiOwogICAgICAgICBpZiAoIXRiMy50ZXN0SW5qZWN0aW9uKCkpCiAgICAgICAgICAgICBtc2cgKz0gIlF1YWxpZmllciBiYXNlZCBAQW55IGluamVjdGlvbiBpbnRvIEJlYW5Ub1Rlc3RBbnkgRmFpbGVkIjsKLSAgICAgICAgaWYgKCF0YjQudGVzdEluamVjdGlvbigpKSAKKyAgICAgICAgaWYgKCF0YjQudGVzdEluamVjdGlvbigpKQogICAgICAgICAgICAgbXNnICs9ICJNdWx0aXBsZSBxdWFsaWZpZXJzIHRlc3QgZmFpbGVkIjsKIAogICAgICAgICB3cml0ZXIud3JpdGUoImluaXRQYXJhbXM6ICIgKyBtc2cgKyAiXG4iKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9xdWFsaWZpZXJzL3NlcnZsZXQvdGVzdC9iZWFucy9CZWFuVG9UZXN0Q29uc3RydWN0b3JJbmplY3Rpb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9xdWFsaWZpZXJzL3NlcnZsZXQvdGVzdC9iZWFucy9CZWFuVG9UZXN0Q29uc3RydWN0b3JJbmplY3Rpb24uamF2YQppbmRleCA0NjBmMzIwLi40ZTY3NTVjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcXVhbGlmaWVycy9zZXJ2bGV0L3Rlc3QvYmVhbnMvQmVhblRvVGVzdENvbnN0cnVjdG9ySW5qZWN0aW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3F1YWxpZmllcnMvc2VydmxldC90ZXN0L2JlYW5zL0JlYW5Ub1Rlc3RDb25zdHJ1Y3RvckluamVjdGlvbi5qYXZhCkBAIC0yOCwxNCArMjgsMTQgQEAKIHB1YmxpYyBjbGFzcyBCZWFuVG9UZXN0Q29uc3RydWN0b3JJbmplY3Rpb24gewogICAgIHByaXZhdGUgUGF5bWVudFByb2Nlc3NvciBzeW5jUGF5OwogICAgIHByaXZhdGUgUGF5bWVudFByb2Nlc3NvciBhc3luY1BheTsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBwdWJsaWMgQmVhblRvVGVzdENvbnN0cnVjdG9ySW5qZWN0aW9uKEBTeW5jaHJvbm91cyBQYXltZW50UHJvY2Vzc29yIHN5bmNQYXksCiAgICAgICAgICAgICBAQXN5bmNocm9ub3VzIFBheW1lbnRQcm9jZXNzb3IgYXN5bmNQYXkpIHsKICAgICAgICAgdGhpcy5zeW5jUGF5ID0gc3luY1BheTsKICAgICAgICAgdGhpcy5hc3luY1BheSA9IGFzeW5jUGF5OwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIHRlc3RJbmplY3Rpb24oKXsKICAgICAgICAgcmV0dXJuIChzeW5jUGF5IGluc3RhbmNlb2YgU3luY2hyb25vdXNQYXltZW50UHJvY2Vzc29yICYmCiAgICAgICAgIGFzeW5jUGF5IGluc3RhbmNlb2YgQXN5bmNocm9ub3VzUGF5bWVudFByb2Nlc3Nvcik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcXVhbGlmaWVycy9zZXJ2bGV0L3Rlc3QvYmVhbnMvQmVhblRvVGVzdEluaXRpYWxpemVyTWV0aG9kSW5qZWN0aW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcXVhbGlmaWVycy9zZXJ2bGV0L3Rlc3QvYmVhbnMvQmVhblRvVGVzdEluaXRpYWxpemVyTWV0aG9kSW5qZWN0aW9uLmphdmEKaW5kZXggMDIzNzk3OC4uNGE4OTJlYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3F1YWxpZmllcnMvc2VydmxldC90ZXN0L2JlYW5zL0JlYW5Ub1Rlc3RJbml0aWFsaXplck1ldGhvZEluamVjdGlvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9xdWFsaWZpZXJzL3NlcnZsZXQvdGVzdC9iZWFucy9CZWFuVG9UZXN0SW5pdGlhbGl6ZXJNZXRob2RJbmplY3Rpb24uamF2YQpAQCAtMjcsMTQgKzI3LDE0IEBACiBwdWJsaWMgY2xhc3MgQmVhblRvVGVzdEluaXRpYWxpemVyTWV0aG9kSW5qZWN0aW9uIHsKICAgICBwcml2YXRlIFBheW1lbnRQcm9jZXNzb3Igc3luY1BheTsKICAgICBwcml2YXRlIFBheW1lbnRQcm9jZXNzb3IgYXN5bmNQYXk7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgcHVibGljIHZvaWQgc2V0UGF5bWVudFByb2Nlc3NvcihAU3luY2hyb25vdXMgUGF5bWVudFByb2Nlc3NvciBzeW5jUGF5LAogICAgICAgICAgICAgQEFzeW5jaHJvbm91cyBQYXltZW50UHJvY2Vzc29yIGFzeW5jUGF5KSB7CiAgICAgICAgIHRoaXMuc3luY1BheSA9IHN5bmNQYXk7CiAgICAgICAgIHRoaXMuYXN5bmNQYXkgPSBhc3luY1BheTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0SW5qZWN0aW9uKCl7CiAgICAgICAgIHJldHVybiAoc3luY1BheSBpbnN0YW5jZW9mIFN5bmNocm9ub3VzUGF5bWVudFByb2Nlc3NvciAmJgogICAgICAgICBhc3luY1BheSBpbnN0YW5jZW9mIEFzeW5jaHJvbm91c1BheW1lbnRQcm9jZXNzb3IpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3JlcG9ydC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcmVwb3J0LnhtbAppbmRleCBhODZjOTM3Li5kZjliZjcwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcmVwb3J0LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcmVwb3J0LnhtbApAQCAtMjksOCArMjksOCBAQAogICAgICAgICAgICAgPHhzbHQgc3R5bGU9IiR7c3R5bGVzaGVldH0iIGluPSIke3htbGZpbGV9IiBvdXQ9IiR7aHRtbGZpbGV9IiBiYXNlZGlyPSIuIiBkZXN0ZGlyPSIuIiBmYWlsT25Ob1Jlc291cmNlcz0iZmFsc2UiIC8+CiAgICAgICAgIDwvdGhlbj4KICAgICA8L2lmPgotICAgICAgCi0gICAgCisKKwogICAgIDxhbnRjYWxsIHRhcmdldD0icmVwb3J0LXNoIiAvPgogPC90YXJnZXQ+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ydW5fdGVzdC5zaCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9ydW5fdGVzdC5zaAppbmRleCBiZTU0ZmM1Li4yOGM0MGUwIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvcnVuX3Rlc3Quc2gKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3J1bl90ZXN0LnNoCkBAIC0xNyw1MiArMTcsNTIgQEAKIAogdGVzdF9ydW4oKXsKICAgICBwcmludGYgIlxuJXMgXG5cbiIgIj09PT09IFRFU1QgUlVOIC0gTUFJTiA9PT09PSIKLSAgICAKLQkjIEZpeCBmb3IgZmFsc2UgcG9zaXRpdmUKLQllY2hvICI8cHJvcGVydHkgbmFtZT1cImxpYnJhcmllc1wiIHZhbHVlPVwiJyAnXCIvPiIgPj4gc21va2UtdGVzdHMvc2ltcGxlLXdhYi13aXRoLWNkaS9idWlsZC5wcm9wZXJ0aWVzCi0JZmluZCAuIC1uYW1lICJSZXBSdW5Db25mLnR4dCIgfCB4YXJncyBybSAtZgotCXJtIAktcmYgKi5vdXRwdXQgYWxsdGVzdHMucmVzICR7QVBTX0hPTUV9L3Rlc3RfcmVzdWx0cyoKLQkKLQkjIFJ1biB0aGUgdGVzdHMKLQlzZXQgK2UKLQlhbnQgY2xlYW4gLWUgLXEgPiAvZGV2L251bGwKLQkKLQlwcmludGYgIlxuJXMgXG5cbiIgIj09PT09IFRFU1QgUlVOIC0gU1RBUlRJTkcgR0xBU1NGSVNIIEFORCBEQiA9PT09PSIKLQkke1MxQVNfSE9NRX0vYmluL2FzYWRtaW4gc3RhcnQtZG9tYWluCi0JJHtTMUFTX0hPTUV9L2Jpbi9hc2FkbWluIHN0YXJ0LWRhdGFiYXNlCi0JCi0JcHJpbnRmICJcbiVzIFxuXG4iICI9PT09PSBURVNUIFJVTiAtIFJVTk5JTkcgVEVTVFMgZm9yICR7VEFSR0VUfSA9PT09PSIKLQlhbnQgJHtUQVJHRVR9IHwgdGVlICR7VEVTVF9SVU5fTE9HfQotCQotCXByaW50ZiAiXG4lcyBcblxuIiAiPT09PT0gVEVTVCBSVU4gLSBTVE9QUElORyBHTEFTU0ZJU0ggQU5EIERCID09PT09IgotCSR7UzFBU19IT01FfS9iaW4vYXNhZG1pbiBzdG9wLWRvbWFpbgotCSR7UzFBU19IT01FfS9iaW4vYXNhZG1pbiBzdG9wLWRhdGFiYXNlCi0Jc2V0IC1lCisKKyAgICAjIEZpeCBmb3IgZmFsc2UgcG9zaXRpdmUKKyAgICBlY2hvICI8cHJvcGVydHkgbmFtZT1cImxpYnJhcmllc1wiIHZhbHVlPVwiJyAnXCIvPiIgPj4gc21va2UtdGVzdHMvc2ltcGxlLXdhYi13aXRoLWNkaS9idWlsZC5wcm9wZXJ0aWVzCisgICAgZmluZCAuIC1uYW1lICJSZXBSdW5Db25mLnR4dCIgfCB4YXJncyBybSAtZgorICAgIHJtICAgICAtcmYgKi5vdXRwdXQgYWxsdGVzdHMucmVzICR7QVBTX0hPTUV9L3Rlc3RfcmVzdWx0cyoKKworICAgICMgUnVuIHRoZSB0ZXN0cworICAgIHNldCArZQorICAgIGFudCBjbGVhbiAtZSAtcSA+IC9kZXYvbnVsbAorCisgICAgcHJpbnRmICJcbiVzIFxuXG4iICI9PT09PSBURVNUIFJVTiAtIFNUQVJUSU5HIEdMQVNTRklTSCBBTkQgREIgPT09PT0iCisgICAgJHtTMUFTX0hPTUV9L2Jpbi9hc2FkbWluIHN0YXJ0LWRvbWFpbgorICAgICR7UzFBU19IT01FfS9iaW4vYXNhZG1pbiBzdGFydC1kYXRhYmFzZQorCisgICAgcHJpbnRmICJcbiVzIFxuXG4iICI9PT09PSBURVNUIFJVTiAtIFJVTk5JTkcgVEVTVFMgZm9yICR7VEFSR0VUfSA9PT09PSIKKyAgICBhbnQgJHtUQVJHRVR9IHwgdGVlICR7VEVTVF9SVU5fTE9HfQorCisgICAgcHJpbnRmICJcbiVzIFxuXG4iICI9PT09PSBURVNUIFJVTiAtIFNUT1BQSU5HIEdMQVNTRklTSCBBTkQgREIgPT09PT0iCisgICAgJHtTMUFTX0hPTUV9L2Jpbi9hc2FkbWluIHN0b3AtZG9tYWluCisgICAgJHtTMUFTX0hPTUV9L2Jpbi9hc2FkbWluIHN0b3AtZGF0YWJhc2UKKyAgICBzZXQgLWUKIH0KIAogZ2V0X3Rlc3RfdGFyZ2V0KCl7CiAgICAgcHJpbnRmICJcbiVzIFxuXG4iICI9PT09PSBHRVRUSU5HIFRFU1QgVEFSR0VUID09PT09IgotCWNhc2UgJHsxfSBpbgotCQljZGlfYWxsICkKLQkJCVRBUkdFVD1hbGwKLQkJCWV4cG9ydCBUQVJHRVQ7OwotCWVzYWMKKyAgICBjYXNlICR7MX0gaW4KKyAgICAgICAgY2RpX2FsbCApCisgICAgICAgICAgICBUQVJHRVQ9YWxsCisgICAgICAgICAgICBleHBvcnQgVEFSR0VUOzsKKyAgICBlc2FjCiB9CiAKIAogcnVuX3Rlc3RfaWQoKXsKLQl1bnppcF90ZXN0X3Jlc291cmNlcyAke1dPUktTUEFDRX0vYnVuZGxlcy9nbGFzc2Zpc2guemlwCi0JY2QgYGRpcm5hbWUgJHswfWAKLQl0ZXN0X2luaXQKLQlnZXRfdGVzdF90YXJnZXQgJHsxfQotCXRlc3RfcnVuCi0JY2hlY2tfc3VjY2Vzc2Z1bF9ydW4KKyAgICB1bnppcF90ZXN0X3Jlc291cmNlcyAke1dPUktTUEFDRX0vYnVuZGxlcy9nbGFzc2Zpc2guemlwCisgICAgY2QgYGRpcm5hbWUgJHswfWAKKyAgICB0ZXN0X2luaXQKKyAgICBnZXRfdGVzdF90YXJnZXQgJHsxfQorICAgIHRlc3RfcnVuCisgICAgY2hlY2tfc3VjY2Vzc2Z1bF9ydW4KICAgICBnZW5lcmF0ZV9qdW5pdF9yZXBvcnQgJHsxfQogICAgIGNoYW5nZV9qdW5pdF9yZXBvcnRfY2xhc3NfbmFtZXMKIH0KIAogbGlzdF90ZXN0X2lkcygpewotCWVjaG8gY2RpX2FsbAorICAgIGVjaG8gY2RpX2FsbAogfQogCiBPUFQ9JHsxfQpAQCAtNzAsOSArNzAsOSBAQAogc291cmNlIGBkaXJuYW1lICR7MH1gLy4uLy4uLy4uL2NvbW1vbl90ZXN0LnNoCiAKIGNhc2UgJHtPUFR9IGluCi0JbGlzdF90ZXN0X2lkcyApCi0JCWxpc3RfdGVzdF9pZHM7OwotCXJ1bl90ZXN0X2lkICkKLQkJdHJhcCAiY29weV90ZXN0X2FydGlmYWN0cyAke1RFU1RfSUR9IiBFWElUCi0JCXJ1bl90ZXN0X2lkICR7VEVTVF9JRH0gOzsKKyAgICBsaXN0X3Rlc3RfaWRzICkKKyAgICAgICAgbGlzdF90ZXN0X2lkczs7CisgICAgcnVuX3Rlc3RfaWQgKQorICAgICAgICB0cmFwICJjb3B5X3Rlc3RfYXJ0aWZhY3RzICR7VEVTVF9JRH0iIEVYSVQKKyAgICAgICAgcnVuX3Rlc3RfaWQgJHtURVNUX0lEfSA7OwogZXNhYwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL2J1aWxkLnhtbAppbmRleCA3YjNhY2RkLi4xNmMwYzRjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL2J1aWxkLnhtbApAQCAtOTEsMTUgKzkxLDE1IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4gVXNhZ2U6Ci0JCWFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgc2NvcGVzIHRlc3RzKQotCQlhbnQgY2xlYW4gKGNsZWFucyBhbGwgdGhlIHNjb3BlcyB0ZXN0cykKLQkJYW50IGJ1aWxkIChidWlsZHMgYWxsIHRoZSBzY29wZXMgdGVzdHMpCi0JCWFudCBzZXR1cCAoc2V0cyB1cCBhbGwgcmVzb3VyY2VzIGZvciBzY29wZXMgdGVzdHMpCi0JCWFudCBkZXBsb3kgKGRlcGxveXMgYWxsIHRoZSBzY29wZXMgYXBwcykKLQkJYW50IHJ1biAoRXhlY3V0ZXMgYWxsIHRoZSBzY29wZXMgdGVzdHMpCi0JCWFudCB1bmRlcGxveSAodW5kZXBsb3lzIGFsbCB0aGUgIHNjb3BlcyBhcHBzKQotCQlhbnQgdW5zZXR1cCAodW5zZXRzIGFsbCByZXNvdXJjZXMgZm9yIHNjb3BlcyB0ZXN0cykKLQk8L2VjaG8+CisgICAgPGVjaG8+IFVzYWdlOgorICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIHNjb3BlcyB0ZXN0cykKKyAgICAgICAgYW50IGNsZWFuIChjbGVhbnMgYWxsIHRoZSBzY29wZXMgdGVzdHMpCisgICAgICAgIGFudCBidWlsZCAoYnVpbGRzIGFsbCB0aGUgc2NvcGVzIHRlc3RzKQorICAgICAgICBhbnQgc2V0dXAgKHNldHMgdXAgYWxsIHJlc291cmNlcyBmb3Igc2NvcGVzIHRlc3RzKQorICAgICAgICBhbnQgZGVwbG95IChkZXBsb3lzIGFsbCB0aGUgc2NvcGVzIGFwcHMpCisgICAgICAgIGFudCBydW4gKEV4ZWN1dGVzIGFsbCB0aGUgc2NvcGVzIHRlc3RzKQorICAgICAgICBhbnQgdW5kZXBsb3kgKHVuZGVwbG95cyBhbGwgdGhlICBzY29wZXMgYXBwcykKKyAgICAgICAgYW50IHVuc2V0dXAgKHVuc2V0cyBhbGwgcmVzb3VyY2VzIGZvciBzY29wZXMgdGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9kZXBlbmRlbnQtc2NvcGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvZGVwZW5kZW50LXNjb3BlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYzE4OTNmMy4uZGRjNTBjMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9kZXBlbmRlbnQtc2NvcGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL2RlcGVuZGVudC1zY29wZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWRlcGVuZGVudC1zY29wZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9kZXBlbmRlbnQtc2NvcGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9kZXBlbmRlbnQtc2NvcGUvYnVpbGQueG1sCmluZGV4IDgzYWQ2NjYuLjA2OTEyMTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvZGVwZW5kZW50LXNjb3BlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL2RlcGVuZGVudC1zY29wZS9idWlsZC54bWwKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDcsMjMgKzQ3LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzUsMTAgKzc1LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9kZXBlbmRlbnQtc2NvcGUvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3REZXBlbmRlbnRTY29wZWRCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL2RlcGVuZGVudC1zY29wZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdERlcGVuZGVudFNjb3BlZEJlYW4uamF2YQppbmRleCBiOTc4ZTYwLi4wYTU5ZWJlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL2RlcGVuZGVudC1zY29wZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdERlcGVuZGVudFNjb3BlZEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL2RlcGVuZGVudC1zY29wZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdERlcGVuZGVudFNjb3BlZEJlYW4uamF2YQpAQCAtMjMsMTEgKzIzLDExIEBACiAvL2ludG8gc2Vzc2lvbiBzY29wZWQgb3IgY29udmVyc2F0aW9uIHNjb3BlZCBiZWFuCiBwdWJsaWMgY2xhc3MgVGVzdERlcGVuZGVudFNjb3BlZEJlYW4gewogICAgIHByaXZhdGUgc3RhdGljIGludCBpbnN0YW50aWF0aW9uQ291bnRlciA9IDA7Ci0gICAgCisKICAgICBwdWJsaWMgVGVzdERlcGVuZGVudFNjb3BlZEJlYW4oKXsKICAgICAgICAgaW5zdGFudGlhdGlvbkNvdW50ZXIrKzsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgaW50IGdldEluc3RhbmNlc0NvdW50KCl7CiAgICAgICAgIHJldHVybiB0aGlzLmluc3RhbnRpYXRpb25Db3VudGVyOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvZGVwZW5kZW50LXNjb3BlL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0UmVxdWVzdFNjb3BlZEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvZGVwZW5kZW50LXNjb3BlL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0UmVxdWVzdFNjb3BlZEJlYW4uamF2YQppbmRleCAxOTFhZjljLi45OWU3ZDE3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL2RlcGVuZGVudC1zY29wZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdFJlcXVlc3RTY29wZWRCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9kZXBlbmRlbnQtc2NvcGUvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RSZXF1ZXN0U2NvcGVkQmVhbi5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiAKICAgICBASW5qZWN0CiAgICAgcHJpdmF0ZSBUZXN0RGVwZW5kZW50U2NvcGVkQmVhbiB0ZHNiOwotICAgIAorCiAgICAgcHVibGljIFRlc3REZXBlbmRlbnRTY29wZWRCZWFuIGdldERlcGVuZGVudFNjb3BlZEJlYW4oKXsKICAgICAgICAgcmV0dXJuIHRoaXMudGRzYjsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL25ldy1xdWFsaWZpZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvbmV3LXF1YWxpZmllci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGVhZmViOGYuLmFmZTYyMzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvbmV3LXF1YWxpZmllci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvbmV3LXF1YWxpZmllci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LW5ldy1xdWFsaWZpZXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvbmV3LXF1YWxpZmllci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL25ldy1xdWFsaWZpZXIvYnVpbGQueG1sCmluZGV4IDgzYWQ2NjYuLjA2OTEyMTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvbmV3LXF1YWxpZmllci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9uZXctcXVhbGlmaWVyL2J1aWxkLnhtbApAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NywyMyArNDcsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NSwxMCArNzUsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL25ldy1xdWFsaWZpZXIvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RSZXF1ZXN0U2NvcGVkQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9uZXctcXVhbGlmaWVyL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0UmVxdWVzdFNjb3BlZEJlYW4uamF2YQppbmRleCA5NzJlYWQ0Li5hNjExOTU5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL25ldy1xdWFsaWZpZXIvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RSZXF1ZXN0U2NvcGVkQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvbmV3LXF1YWxpZmllci9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdFJlcXVlc3RTY29wZWRCZWFuLmphdmEKQEAgLTIxLDE1ICsyMSwxNSBAQAogQFJlcXVlc3RTY29wZWQKIHB1YmxpYyBjbGFzcyBUZXN0UmVxdWVzdFNjb3BlZEJlYW4gewogICAgIHByaXZhdGUgc3RhdGljIGludCBpbnN0YW50aWF0aW9uQ291bnQgPSAwOwotICAgIAorCiAgICAgcHVibGljIFRlc3RSZXF1ZXN0U2NvcGVkQmVhbigpewogICAgICAgICBpbnN0YW50aWF0aW9uQ291bnQrKzsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgaW50IGdldEluc3RhbnRpYXRpb25Db3VudCgpewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluc3RhbmNlcyBvZiBUZXN0UmVxdWVzdFNjb3BlZEJlYW49IiArIGluc3RhbnRpYXRpb25Db3VudCk7CiAgICAgICAgIHJldHVybiB0aGlzLmluc3RhbnRpYXRpb25Db3VudDsKICAgICB9CiAKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9uZXctcXVhbGlmaWVyL3NlcnZsZXQvdGVzdC9zZXJ2bGV0cy9OZXdRdWFsaWZpZXJUZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9uZXctcXVhbGlmaWVyL3NlcnZsZXQvdGVzdC9zZXJ2bGV0cy9OZXdRdWFsaWZpZXJUZXN0U2VydmxldC5qYXZhCmluZGV4IDk3NWEzNTUuLjJkNmFmYzUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvbmV3LXF1YWxpZmllci9zZXJ2bGV0L3Rlc3Qvc2VydmxldHMvTmV3UXVhbGlmaWVyVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL25ldy1xdWFsaWZpZXIvc2VydmxldC90ZXN0L3NlcnZsZXRzL05ld1F1YWxpZmllclRlc3RTZXJ2bGV0LmphdmEKQEAgLTM1LDcgKzM1LDcgQEAKIAogICAgIEBJbmplY3QKICAgICBUZXN0UmVxdWVzdFNjb3BlZEJlYW4gdHJzYjsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBUZXN0UmVxdWVzdFNjb3BlZEJlYW4gYW5vdGhlclJlZlRvUmVxdWVzdFNjb3BlZEJlYW47CiAKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICBASW5qZWN0CiAgICAgQE5ldwogICAgIEluc3RhbmNlPFRlc3RSZXF1ZXN0U2NvcGVkQmVhbj4gbmV3UmVxdWVzdFNjb3BlZEJlYW5Qcm9ncmFtbWF0aWNMb29rdXA7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgQE5ldyhUZXN0UmVxdWVzdFNjb3BlZEJlYW4uY2xhc3MpCiAgICAgSW5zdGFuY2U8VGVzdFJlcXVlc3RTY29wZWRCZWFuPiBuZXdSZXF1ZXN0U2NvcGVkQmVhblByb2dyYW1tYXRpY0xvb2t1cDI7CkBAIC02NiwxOSArNjYsMTkgQEAKICAgICAgICAgaWYgKCEodHJzYi5nZXRJbnN0YW50aWF0aW9uQ291bnQoKSA9PSAzKSkKICAgICAgICAgICAgIG1zZyArPSAiUmVxdWVzdCBzY29wZWQgYmVhbiBjcmVhdGVkIG1vcmUgdGhhbiB0aGUgZXhwZWN0ZWQgbnVtYmVyIG9mIHRpbWVzIjsKIAotICAgICAgICBpZiAoIWFyZUluamVjdGVjZWRJbnN0YW5jZXNFcXVhbCh0cnNiLCBhbm90aGVyUmVmVG9SZXF1ZXN0U2NvcGVkQmVhbikpIAorICAgICAgICBpZiAoIWFyZUluamVjdGVjZWRJbnN0YW5jZXNFcXVhbCh0cnNiLCBhbm90aGVyUmVmVG9SZXF1ZXN0U2NvcGVkQmVhbikpCiAgICAgICAgICAgICBtc2cgKz0gIlR3byByZWZlcmVuY2VzIHRvIHRoZSBzYW1lIHJlcXVlc3Qgc2NvcGVkIGJlYW4gYXJlIG5vdCBlcXVhbCI7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChhcmVJbmplY3RlY2VkSW5zdGFuY2VzRXF1YWwodHJzYiwgbmV3UmVxdWVzdFNjb3BlZEJlYW4pKQogICAgICAgICAgICAgbXNnICs9ICJSZXF1ZXN0IHNjb3BlZCBCZWFuIGluamVjdGVkIHdpdGggQE5ldyBxdWFsaWZpZXIgbXVzdCBub3QgYmUgZXF1YWwgdG8gdGhlIG5vcm1hbCBSZXF1ZXN0IHNjb3BlZCBiZWFuIjsKIAogICAgICAgICBpZiAoIXRlc3RJc0NsaWVudFByb3h5KHRyc2IsIFRlc3RSZXF1ZXN0U2NvcGVkQmVhbi5jbGFzcykpCiAgICAgICAgICAgICBtc2cgKz0gIlJlcXVlc3Qgc2NvcGVkIGJlYW5zIG11c3QgYmUgaW5qZWN0ZWQgYXMgYSBjbGllbnQgcHJveHkiOwotICAgICAgICAKLSAgICAgICAgaWYobmV3UmVxdWVzdFNjb3BlZEJlYW5Qcm9ncmFtbWF0aWNMb29rdXAuZ2V0KCkgPT0gbnVsbCkgCisKKyAgICAgICAgaWYobmV3UmVxdWVzdFNjb3BlZEJlYW5Qcm9ncmFtbWF0aWNMb29rdXAuZ2V0KCkgPT0gbnVsbCkKICAgICAgICAgICAgIG1zZyArPSAiQSBuZXcgaW5zdGFuY2Ugb2YgUmVxdWVzdCBTY29wZWQgQmVhbiBvYnRhaW5lZCB0aHJvdWdoIHByb2dyYW1tYXRpYyBsb29rdXAgZmFpbGVkIjsKLSAgICAgICAgCi0gICAgICAgIGlmKG5ld1JlcXVlc3RTY29wZWRCZWFuUHJvZ3JhbW1hdGljTG9va3VwMi5nZXQoKSA9PSBudWxsKSAKKworICAgICAgICBpZihuZXdSZXF1ZXN0U2NvcGVkQmVhblByb2dyYW1tYXRpY0xvb2t1cDIuZ2V0KCkgPT0gbnVsbCkKICAgICAgICAgICAgIG1zZyArPSAiQSBuZXcoY29tcGxleCB0eXBlIHNwZWNpZmljYXRpb24gc2NlbmFyaW8pIGluc3RhbmNlIG9mIFJlcXVlc3QgU2NvcGVkIEJlYW4gb2J0YWluZWQgdGhyb3VnaCBwcm9ncmFtbWF0aWMgbG9va3VwIGZhaWxlZCI7CiAKICAgICAgICAgd3JpdGVyLndyaXRlKG1zZyArICJcbiIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9yZXF1ZXN0LWFuZC1hcHBsaWNhdGlvbi1zY29wZS1lamItbWRiL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL3JlcXVlc3QtYW5kLWFwcGxpY2F0aW9uLXNjb3BlLWVqYi1tZGIvYnVpbGQucHJvcGVydGllcwppbmRleCBkNjQ4NDhlLi4xMjhkYWU2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL3JlcXVlc3QtYW5kLWFwcGxpY2F0aW9uLXNjb3BlLWVqYi1tZGIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL3JlcXVlc3QtYW5kLWFwcGxpY2F0aW9uLXNjb3BlLWVqYi1tZGIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjMgKzE1LDIzIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGktaGVsbG8tbWRiIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9InNpbXBsZS5jbGllbnQiIHZhbHVlPSJjb20uc3VuLnMxYXNkZXYuY2RpLmhlbGxvLm1kYi5jbGllbnQuQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJiZWFucy54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2JlYW5zLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9yZXF1ZXN0LWFuZC1hcHBsaWNhdGlvbi1zY29wZS1lamItbWRiL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvcmVxdWVzdC1hbmQtYXBwbGljYXRpb24tc2NvcGUtZWpiLW1kYi9idWlsZC54bWwKaW5kZXggMGQ3NTA0Yi4uZWY2NTBiYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9yZXF1ZXN0LWFuZC1hcHBsaWNhdGlvbi1zY29wZS1lamItbWRiL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL3JlcXVlc3QtYW5kLWFwcGxpY2F0aW9uLXNjb3BlLWVqYi1tZGIvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic3JjIi8+CkBAIC00NiwxNCArNDYsMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypCZWFuKi5jbGFzcywqKi8qSGVsbG8qIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQqLmNsYXNzLCB0ZXN0L2VqYi9zZXNzaW9uL0hlbGxvU2xlc3MqLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYzLDcgKzYzLDcgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iY3JlYXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC03NywyMCArNzcsMjAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuX3N0YW5kYWxvbmVjbGllbnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgIDxqYXZhICBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L21vZHVsZXMvamFrYXJ0YS5qbXMtYXBpLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9IiR7c2ltcGxlLmNsaWVudH0iPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL3JlcXVlc3QtYW5kLWFwcGxpY2F0aW9uLXNjb3BlLWVqYi1tZGIvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9yZXF1ZXN0LWFuZC1hcHBsaWNhdGlvbi1zY29wZS1lamItbWRiL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA1ZmRhYzA1Li4wNzk3OWM0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL3JlcXVlc3QtYW5kLWFwcGxpY2F0aW9uLXNjb3BlLWVqYi1tZGIvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvcmVxdWVzdC1hbmQtYXBwbGljYXRpb24tc2NvcGUtZWpiLW1kYi9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTE0Nyw3ICsxNDcsNyBAQAogICAgICAgICBtZXNzYWdlLnNldEJvb2xlYW5Qcm9wZXJ0eSgiZmxhZyIsIHRydWUpOwogICAgICAgICBtZXNzYWdlLnNldEludFByb3BlcnR5KCJudW0iLCAyKTsKICAgICAgICAgc2VuZE1zZ3MoKGpha2FydGEuam1zLlF1ZXVlKSBkZXN0LCBtZXNzYWdlLCBudW0pOwotICAgICAgICAKKwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInJlbW90ZSBiZWFuOiIgKyBoZWxsb1N0YXRlbGVzc1JlbW90ZUJlYW4pOwogICAgICAgICBTdHJpbmcgcmVzcG9uc2UgPSBoZWxsb1N0YXRlbGVzc1JlbW90ZUJlYW4uaGVsbG8oKTsKICAgICAgICAgaWYgKCFyZXNwb25zZS5lcXVhbHMoImhlbGxvIikpewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9yZXF1ZXN0LWFuZC1hcHBsaWNhdGlvbi1zY29wZS1lamItbWRiL3NyYy90ZXN0L2JlYW5zL0JlYW5Ub1Rlc3RUaW1lclVzZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9yZXF1ZXN0LWFuZC1hcHBsaWNhdGlvbi1zY29wZS1lamItbWRiL3NyYy90ZXN0L2JlYW5zL0JlYW5Ub1Rlc3RUaW1lclVzZS5qYXZhCmluZGV4IDU3OTY1NDMuLmY2ZDNkZTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvcmVxdWVzdC1hbmQtYXBwbGljYXRpb24tc2NvcGUtZWpiLW1kYi9zcmMvdGVzdC9iZWFucy9CZWFuVG9UZXN0VGltZXJVc2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL3JlcXVlc3QtYW5kLWFwcGxpY2F0aW9uLXNjb3BlLWVqYi1tZGIvc3JjL3Rlc3QvYmVhbnMvQmVhblRvVGVzdFRpbWVyVXNlLmphdmEKQEAgLTE5LDE5ICsxOSwxOSBAQAogaW1wb3J0IGpha2FydGEuaW5qZWN0LlNpbmdsZXRvbjsKIAogCi0vL1NpbXBsZSBUZXN0QmVhbiB0byB0ZXN0IENESS4gCisvL1NpbXBsZSBUZXN0QmVhbiB0byB0ZXN0IENESS4KIAogQFNpbmdsZXRvbgogcHVibGljIGNsYXNzIEJlYW5Ub1Rlc3RUaW1lclVzZSBpbXBsZW1lbnRzIGphdmEuaW8uU2VyaWFsaXphYmxlewogICAgIHByaXZhdGUgYm9vbGVhbiB0ZXN0VG9DaGVja0lmVGltZXJJbnZva2VkID0gZmFsc2U7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRSZXN1bHQoYm9vbGVhbiB2YWwpIHsKICAgICAgICAgdGhpcy50ZXN0VG9DaGVja0lmVGltZXJJbnZva2VkID0gdmFsOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGdldFJlc3VsdCgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMudGVzdFRvQ2hlY2tJZlRpbWVySW52b2tlZDsKICAgICB9Ci0gIAorCiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvcmVxdWVzdC1hbmQtYXBwbGljYXRpb24tc2NvcGUtZWpiLW1kYi9zcmMvdGVzdC9iZWFucy9UZXN0QXBwbGljYXRpb25TY29wZWRCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL3JlcXVlc3QtYW5kLWFwcGxpY2F0aW9uLXNjb3BlLWVqYi1tZGIvc3JjL3Rlc3QvYmVhbnMvVGVzdEFwcGxpY2F0aW9uU2NvcGVkQmVhbi5qYXZhCmluZGV4IGY0ZmRkMjkuLmQ5ZDQyYjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvcmVxdWVzdC1hbmQtYXBwbGljYXRpb24tc2NvcGUtZWpiLW1kYi9zcmMvdGVzdC9iZWFucy9UZXN0QXBwbGljYXRpb25TY29wZWRCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9yZXF1ZXN0LWFuZC1hcHBsaWNhdGlvbi1zY29wZS1lamItbWRiL3NyYy90ZXN0L2JlYW5zL1Rlc3RBcHBsaWNhdGlvblNjb3BlZEJlYW4uamF2YQpAQCAtMTgsNyArMTgsNyBAQAogCiBpbXBvcnQgamFrYXJ0YS5lbnRlcnByaXNlLmNvbnRleHQuQXBwbGljYXRpb25TY29wZWQ7CiAKLS8vU2ltcGxlIFRlc3RCZWFuIHRvIHRlc3QgQ0RJLiAKKy8vU2ltcGxlIFRlc3RCZWFuIHRvIHRlc3QgQ0RJLgogQEFwcGxpY2F0aW9uU2NvcGVkCiBwdWJsaWMgY2xhc3MgVGVzdEFwcGxpY2F0aW9uU2NvcGVkQmVhbgoge30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvcmVxdWVzdC1hbmQtYXBwbGljYXRpb24tc2NvcGUtZWpiLW1kYi9zcmMvdGVzdC9iZWFucy9UZXN0UmVxdWVzdFNjb3BlZEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvcmVxdWVzdC1hbmQtYXBwbGljYXRpb24tc2NvcGUtZWpiLW1kYi9zcmMvdGVzdC9iZWFucy9UZXN0UmVxdWVzdFNjb3BlZEJlYW4uamF2YQppbmRleCAxMTg1MDNiLi4wYWRkODQ2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL3JlcXVlc3QtYW5kLWFwcGxpY2F0aW9uLXNjb3BlLWVqYi1tZGIvc3JjL3Rlc3QvYmVhbnMvVGVzdFJlcXVlc3RTY29wZWRCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9yZXF1ZXN0LWFuZC1hcHBsaWNhdGlvbi1zY29wZS1lamItbWRiL3NyYy90ZXN0L2JlYW5zL1Rlc3RSZXF1ZXN0U2NvcGVkQmVhbi5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIGltcG9ydCBqYWthcnRhLmVudGVycHJpc2UuY29udGV4dC5SZXF1ZXN0U2NvcGVkOwogCi0vL1NpbXBsZSBUZXN0QmVhbiB0byB0ZXN0IENESS4gCisvL1NpbXBsZSBUZXN0QmVhbiB0byB0ZXN0IENESS4KIEBSZXF1ZXN0U2NvcGVkCiBwdWJsaWMgY2xhc3MgVGVzdFJlcXVlc3RTY29wZWRCZWFuCiB7fQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9yZXF1ZXN0LWFuZC1hcHBsaWNhdGlvbi1zY29wZS1lamItbWRiL3NyYy90ZXN0L2VqYi9tZGIvTWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvcmVxdWVzdC1hbmQtYXBwbGljYXRpb24tc2NvcGUtZWpiLW1kYi9zcmMvdGVzdC9lamIvbWRiL01lc3NhZ2VCZWFuLmphdmEKaW5kZXggYzdkMGRjYS4uZTJiZDA5NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9yZXF1ZXN0LWFuZC1hcHBsaWNhdGlvbi1zY29wZS1lamItbWRiL3NyYy90ZXN0L2VqYi9tZGIvTWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL3JlcXVlc3QtYW5kLWFwcGxpY2F0aW9uLXNjb3BlLWVqYi1tZGIvc3JjL3Rlc3QvZWpiL21kYi9NZXNzYWdlQmVhbi5qYXZhCkBAIC01OCw3ICs1OCw3IEBACiAgICAgVGVzdEFwcGxpY2F0aW9uU2NvcGVkQmVhbiB0YXNiOwogICAgIEBJbmplY3QKICAgICBUZXN0UmVxdWVzdFNjb3BlZEJlYW4gdHJzYjsKLSAgICAKKwogICAgIEBJbmplY3QgQmVhbk1hbmFnZXIgYm07CiAKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CkBAIC04OCw3ICs4OCw3IEBACiAgICAgICAgICAgICBpZiAodHJzYiA9PSBudWxsKQogICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAiSW5qZWN0aW9uIG9mIHJlcXVlc3Qgc2NvcGVkIEJlYW4gaW4gTURCIGZhaWxlZCIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGNvbm5lY3Rpb24gPSBxY0ZhY3RvcnkuY3JlYXRlUXVldWVDb25uZWN0aW9uKCk7CiAgICAgICAgICAgICBRdWV1ZVNlc3Npb24gc2Vzc2lvbiA9IGNvbm5lY3Rpb24uY3JlYXRlUXVldWVTZXNzaW9uKGZhbHNlLAogICAgICAgICAgICAgICAgICAgICBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9yZXF1ZXN0LWFuZC1hcHBsaWNhdGlvbi1zY29wZS1lamItbWRiL3NyYy90ZXN0L2VqYi9zZXNzaW9uL0hlbGxvMS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9yZXF1ZXN0LWFuZC1hcHBsaWNhdGlvbi1zY29wZS1lamItbWRiL3NyYy90ZXN0L2VqYi9zZXNzaW9uL0hlbGxvMS5qYXZhCmluZGV4IDY3NzNiMzEuLjJhNWRkM2MgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvcmVxdWVzdC1hbmQtYXBwbGljYXRpb24tc2NvcGUtZWpiLW1kYi9zcmMvdGVzdC9lamIvc2Vzc2lvbi9IZWxsbzEuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL3JlcXVlc3QtYW5kLWFwcGxpY2F0aW9uLXNjb3BlLWVqYi1tZGIvc3JjL3Rlc3QvZWpiL3Nlc3Npb24vSGVsbG8xLmphdmEKQEAgLTE5LDUgKzE5LDUgQEAKIHB1YmxpYyBpbnRlcmZhY2UgSGVsbG8xIHsKIAogICAgIHB1YmxpYyB2b2lkIGhlbGxvKFN0cmluZyBzKTsKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9yZXF1ZXN0LWFuZC1hcHBsaWNhdGlvbi1zY29wZS1lamItbWRiL3NyYy90ZXN0L2VqYi9zZXNzaW9uL0hlbGxvU3RhdGVmdWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvcmVxdWVzdC1hbmQtYXBwbGljYXRpb24tc2NvcGUtZWpiLW1kYi9zcmMvdGVzdC9lamIvc2Vzc2lvbi9IZWxsb1N0YXRlZnVsLmphdmEKaW5kZXggOWVlOTg4Yy4uMzg5NzFkZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9yZXF1ZXN0LWFuZC1hcHBsaWNhdGlvbi1zY29wZS1lamItbWRiL3NyYy90ZXN0L2VqYi9zZXNzaW9uL0hlbGxvU3RhdGVmdWwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL3JlcXVlc3QtYW5kLWFwcGxpY2F0aW9uLXNjb3BlLWVqYi1tZGIvc3JjL3Rlc3QvZWpiL3Nlc3Npb24vSGVsbG9TdGF0ZWZ1bC5qYXZhCkBAIC0zNCw5ICszNCw5IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQnVzaW5lc3MgbWV0aG9kIG1hcmtlZCB3aXRoIEBSZW1vdmUgY2FsbGVkIGluICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnKTsKICAgICB9Ci0gICAgCisKICAgICBAUHJlRGVzdHJveSBwdWJsaWMgdm9pZCBteVByZURlc3Ryb3lNZXRob2QoKSB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUFJFLURFU1RST1kgY2FsbGJhY2sgcmVjZWl2ZWQgaW4gIiArIG1zZyk7ICAgICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQUkUtREVTVFJPWSBjYWxsYmFjayByZWNlaXZlZCBpbiAiICsgbXNnKTsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvcmVxdWVzdC1hbmQtYXBwbGljYXRpb24tc2NvcGUtZWpiLW1kYi9zcmMvdGVzdC9lamIvc2Vzc2lvbi9IZWxsb1N0YXRlbGVzcy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9yZXF1ZXN0LWFuZC1hcHBsaWNhdGlvbi1zY29wZS1lamItbWRiL3NyYy90ZXN0L2VqYi9zZXNzaW9uL0hlbGxvU3RhdGVsZXNzLmphdmEKaW5kZXggMjU0NmZkYi4uMDg1YzkwYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9yZXF1ZXN0LWFuZC1hcHBsaWNhdGlvbi1zY29wZS1lamItbWRiL3NyYy90ZXN0L2VqYi9zZXNzaW9uL0hlbGxvU3RhdGVsZXNzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9yZXF1ZXN0LWFuZC1hcHBsaWNhdGlvbi1zY29wZS1lamItbWRiL3NyYy90ZXN0L2VqYi9zZXNzaW9uL0hlbGxvU3RhdGVsZXNzLmphdmEKQEAgLTIyLDcgKzIyLDcgQEAKIC8vIGJlYW4gb25seSBpbXBsZW1lbnRzIG9uZSBpbnRlcmZhY2UgaXQgaXMgYXNzdW1lZCB0byBiZQogLy8gYSBsb2NhbCBidXNpbmVzcyBpbnRlcmZhY2UuCiAKLUBTdGF0ZWxlc3MoZGVzY3JpcHRpb249Im15IHN0YXRlbGVzcyBiZWFuIGRlc2NyaXB0aW9uIikgCitAU3RhdGVsZXNzKGRlc2NyaXB0aW9uPSJteSBzdGF0ZWxlc3MgYmVhbiBkZXNjcmlwdGlvbiIpCiBwdWJsaWMgY2xhc3MgSGVsbG9TdGF0ZWxlc3MgaW1wbGVtZW50cyBIZWxsbzEgewogCiAgICAgcHVibGljIHZvaWQgaGVsbG8oU3RyaW5nIHMpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvcmVxdWVzdC1hbmQtYXBwbGljYXRpb24tc2NvcGUtZWpiLW1kYi9zcmMvdGVzdC9lamIvc2Vzc2lvbi9IZWxsb1N0YXRlbGVzc1JlbW90ZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvcmVxdWVzdC1hbmQtYXBwbGljYXRpb24tc2NvcGUtZWpiLW1kYi9zcmMvdGVzdC9lamIvc2Vzc2lvbi9IZWxsb1N0YXRlbGVzc1JlbW90ZUJlYW4uamF2YQppbmRleCAzYWViZDM1Li4zZjIxNzYzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL3JlcXVlc3QtYW5kLWFwcGxpY2F0aW9uLXNjb3BlLWVqYi1tZGIvc3JjL3Rlc3QvZWpiL3Nlc3Npb24vSGVsbG9TdGF0ZWxlc3NSZW1vdGVCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9yZXF1ZXN0LWFuZC1hcHBsaWNhdGlvbi1zY29wZS1lamItbWRiL3NyYy90ZXN0L2VqYi9zZXNzaW9uL0hlbGxvU3RhdGVsZXNzUmVtb3RlQmVhbi5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiAKICAgICBASW5qZWN0CiAgICAgQmVhbk1hbmFnZXIgYm07Ci0gICAgCisKICAgICBASW5qZWN0IEJlYW5Ub1Rlc3RUaW1lclVzZSB0aW1lckJlYW5UZXN0OwogCiAgICAgQFBvc3RDb25zdHJ1Y3QKQEAgLTU1LDEwICs1NSwxMCBAQAogICAgICAgICAgICAgbXNnICs9ICJJbmplY3Rpb24gb2YgQXBwbGljYXRpb24gc2NvcGVkIGJlYW4gaW4gRUpCIHJlbW90ZSBtZXRob2QgZmFpbGVkIjsKICAgICAgICAgaWYgKHRyc2IgPT0gbnVsbCkKICAgICAgICAgICAgIG1zZyArPSAiSW5qZWN0aW9uIG9mIFJlcXVlc3Qgc2NvcGVkIGJlYW4gaW4gRUpCIHJlbW90ZSBtZXRob2QgZmFpbGVkIjsKLSAgICAgICAgCi0gICAgICAgIGlmICghdGltZXJCZWFuVGVzdC5nZXRSZXN1bHQoKSkgCisKKyAgICAgICAgaWYgKCF0aW1lckJlYW5UZXN0LmdldFJlc3VsdCgpKQogICAgICAgICAgICAgbXNnICs9ICJJbmplY3Rpb24gb2Ygc2Vzc2lvbiBzY29wZWQgYmVhbiBpbnRvIEVKQiB0aW1lciBiZWFucyBmYWlsZWQiOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgIHJldHVybiBtc2c7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9zaW5nbGV0b24tc2NvcGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvc2luZ2xldG9uLXNjb3BlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNDU5ODBmNC4uODI5OWI1MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9zaW5nbGV0b24tc2NvcGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL3NpbmdsZXRvbi1zY29wZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNpbmdsZXRvbi1zY29wZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9zaW5nbGV0b24tc2NvcGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9zaW5nbGV0b24tc2NvcGUvYnVpbGQueG1sCmluZGV4IDgzYWQ2NjYuLjA2OTEyMTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvc2luZ2xldG9uLXNjb3BlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL3NpbmdsZXRvbi1zY29wZS9idWlsZC54bWwKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDcsMjMgKzQ3LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzUsMTAgKzc1LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9zaW5nbGV0b24tc2NvcGUvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RTZXNzaW9uU2NvcGVkQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9zaW5nbGV0b24tc2NvcGUvc2VydmxldC90ZXN0L2JlYW5zL1Rlc3RTZXNzaW9uU2NvcGVkQmVhbi5qYXZhCmluZGV4IDEzZGNhNzcuLjU4NTc5NDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvc2luZ2xldG9uLXNjb3BlL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0U2Vzc2lvblNjb3BlZEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL3NpbmdsZXRvbi1zY29wZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdFNlc3Npb25TY29wZWRCZWFuLmphdmEKQEAgLTI2LDcgKzI2LDcgQEAKIHB1YmxpYyBjbGFzcyBUZXN0U2Vzc2lvblNjb3BlZEJlYW4gaW1wbGVtZW50cyBTZXJpYWxpemFibGV7CiAgICAgQEluamVjdAogICAgIEluc3RhbmNlPFRlc3RTaW5nbGV0b25TY29wZWRCZWFuPiB0c3NJbnN0YW5jZTsKLSAgICAKKwogICAgIHB1YmxpYyBUZXN0U2luZ2xldG9uU2NvcGVkQmVhbiBnZXRTaW5nbGV0b25TY29wZWRCZWFuKCl7CiAgICAgICAgIHJldHVybiB0c3NJbnN0YW5jZS5nZXQoKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL3NpbmdsZXRvbi1zY29wZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvVGVzdFNpbmdsZXRvblNjb3BlZEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvc2luZ2xldG9uLXNjb3BlL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0U2luZ2xldG9uU2NvcGVkQmVhbi5qYXZhCmluZGV4IGIyMWRlOTguLmNkZGM2MzkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvc2luZ2xldG9uLXNjb3BlL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0U2luZ2xldG9uU2NvcGVkQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvc2luZ2xldG9uLXNjb3BlL3NlcnZsZXQvdGVzdC9iZWFucy9UZXN0U2luZ2xldG9uU2NvcGVkQmVhbi5qYXZhCkBAIC0yNCwxMSArMjQsMTEgQEAKIC8vaW50byBzZXNzaW9uIHNjb3BlZCBvciBjb252ZXJzYXRpb24gc2NvcGVkIGJlYW4KIHB1YmxpYyBjbGFzcyBUZXN0U2luZ2xldG9uU2NvcGVkQmVhbiB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGluc3RhbnRpYXRpb25Db3VudGVyID0gMDsKLSAgICAKKwogICAgIHB1YmxpYyBUZXN0U2luZ2xldG9uU2NvcGVkQmVhbigpewogICAgICAgICBpbnN0YW50aWF0aW9uQ291bnRlcisrOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBpbnQgZ2V0SW5zdGFuY2VzQ291bnQoKXsKICAgICAgICAgcmV0dXJuIHRoaXMuaW5zdGFudGlhdGlvbkNvdW50ZXI7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9zaW5nbGV0b24tc2NvcGUvc2VydmxldC90ZXN0L3NlcnZsZXRzL1NpbmdsZXRvblNjb3BlZFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zY29wZXMvc2luZ2xldG9uLXNjb3BlL3NlcnZsZXQvdGVzdC9zZXJ2bGV0cy9TaW5nbGV0b25TY29wZWRTZXJ2bGV0LmphdmEKaW5kZXggYTc2OTRjYi4uY2IwMGYyYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Njb3Blcy9zaW5nbGV0b24tc2NvcGUvc2VydmxldC90ZXN0L3NlcnZsZXRzL1NpbmdsZXRvblNjb3BlZFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc2NvcGVzL3NpbmdsZXRvbi1zY29wZS9zZXJ2bGV0L3Rlc3Qvc2VydmxldHMvU2luZ2xldG9uU2NvcGVkU2VydmxldC5qYXZhCkBAIC02NCw3ICs2NCw3IEBACiAgICAgICAgIH0KICAgICAgICAgaWYgKGJtMSA9PSBudWxsKQogICAgICAgICAgICAgbXNnICs9ICJCZWFuTWFuYWdlciBJbmplY3Rpb24gdmlhIGNvbXBvbmVudCBlbnZpcm9ubWVudCBsb29rdXAgZmFpbGVkIjsKLSAgICAgICAgaWYgKHRiLmdldEluc3RhbmNlc0NvdW50KCkgPiAxKSAKKyAgICAgICAgaWYgKHRiLmdldEluc3RhbmNlc0NvdW50KCkgPiAxKQogICAgICAgICAgICAgbXNnICs9ICJTaW5nbGV0b24gc2NvcGVkIGJlYW4gbXVzdCBiZSBjcmVhdGVkIG9ubHkgb25jZSI7CiAgICAgICAgIGlmICghYXJlSW5qZWN0ZWNlZEluc3RhbmNlc0VxdWFsKHRiLCBhbm90aGVySW5qZWN0ZWRTaW5nbGV0b25JbnN0YW5jZSkpCiAgICAgICAgICAgICBtc2cgKz0gIlR3byBkaWZmZXJlbnQgaW5qZWN0aW9uIG9mIGEgU2luZ2xldG9uIHBzZXVkby1zY29wZWQgQmVhbiBtdXN0IHBvaW50IHRvIHRoZSBzYW1lIGJlYW4gaW5zdGFuY2UiOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9idWlsZC54bWwKaW5kZXggNTNhOTcyYy4uNDRkYmM5NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvYnVpbGQueG1sCkBAIC0zMCw3ICszMCw3IEBACiAgICAgJmNvbW1vbkJ1aWxkOwogICAgICZjb21tb25SdW47CiAgICAgJnJlcG9ydGluZzsKLSAgICAKKwogICAgIDxwcm9wZXJ0eSBuYW1lPSJzbW9rZS10YXJnZXQiIHZhbHVlPSJhbGwiLz4KIAogICAgIDx0YXNrZGVmIHJlc291cmNlPSJuZXQvc2YvYW50Y29udHJpYi9hbnRjb250cmliLnByb3BlcnRpZXMiPgpAQCAtMTA5LDcgKzEwOSw3IEBACiAgICAgICAgICAgICAgICAgPC9lbHNlPgogICAgICAgICAgICAgPC9pZj4KICAgICAgICAgICAgIDxhbnQgZGlyPSJzaW1wbGUtZWpiLWNkaSIgdGFyZ2V0PSIke3Ntb2tlLXRhcmdldH0iLz4KLSAgICAgICAgCisKICAgICAgICAgPCEtLQogICAgICAgICBOb3QgcnVubmluZyB1bnRpbAogICAgICAgICBodHRwczovL2lzc3Vlcy5qYm9zcy5vcmcvYnJvd3NlL1dFTEQtMTM0NSBpcyBmaXhlZC4gKGZpeGVkIGluIDIuMC4wLkJldGE1KQpAQCAtMTMxLDE1ICsxMzEsMTUgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPiBVc2FnZToKLQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBzbW9rZSB0ZXN0cykKLQkJYW50IGNsZWFuIChjbGVhbnMgYWxsIHRoZSBzbW9rZSB0ZXN0cykKLQkJYW50IGJ1aWxkIChidWlsZHMgYWxsIHRoZSBzbW9rZSB0ZXN0cykKLQkJYW50IHNldHVwIChzZXRzIHVwIGFsbCByZXNvdXJjZXMgZm9yIHNtb2tlIHRlc3RzKQotCQlhbnQgZGVwbG95IChkZXBsb3lzIGFsbCB0aGUgc21va2UgYXBwcykKLQkJYW50IHJ1biAoRXhlY3V0ZXMgYWxsIHRoZSBzbW9rZSB0ZXN0cykKLQkJYW50IHVuZGVwbG95ICh1bmRlcGxveXMgYWxsIHRoZSAgc21va2UgYXBwcykKLQkJYW50IHVuc2V0dXAgKHVuc2V0cyBhbGwgcmVzb3VyY2VzIGZvciBzbW9rZSB0ZXN0cykKLQk8L2VjaG8+CisgICAgPGVjaG8+IFVzYWdlOgorICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIHNtb2tlIHRlc3RzKQorICAgICAgICBhbnQgY2xlYW4gKGNsZWFucyBhbGwgdGhlIHNtb2tlIHRlc3RzKQorICAgICAgICBhbnQgYnVpbGQgKGJ1aWxkcyBhbGwgdGhlIHNtb2tlIHRlc3RzKQorICAgICAgICBhbnQgc2V0dXAgKHNldHMgdXAgYWxsIHJlc291cmNlcyBmb3Igc21va2UgdGVzdHMpCisgICAgICAgIGFudCBkZXBsb3kgKGRlcGxveXMgYWxsIHRoZSBzbW9rZSBhcHBzKQorICAgICAgICBhbnQgcnVuIChFeGVjdXRlcyBhbGwgdGhlIHNtb2tlIHRlc3RzKQorICAgICAgICBhbnQgdW5kZXBsb3kgKHVuZGVwbG95cyBhbGwgdGhlICBzbW9rZSBhcHBzKQorICAgICAgICBhbnQgdW5zZXR1cCAodW5zZXRzIGFsbCByZXNvdXJjZXMgZm9yIHNtb2tlIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24vV2ViVGVzdC5qYXZhCmluZGV4IGZlZTdkMTguLjk4YjM4MzIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uL1dlYlRlc3QuamF2YQpAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBAV2ViU2VydmxldCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKQEAgLTU2LDcgKzU2LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICArICIvbXl1cmwiOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9wZW5pbmcgY29ubmVjdGlvbiB0byAiICsgdXJsKTsKQEAgLTk1LDEwICs5NSwxMCBAQAogICAgICAgICAgICAgaWYgKEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24vYnVpbGQucHJvcGVydGllcwppbmRleCBkMmYzNmFhLi5mNTE3ODIxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LWFubm90YXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24vYnVpbGQueG1sCmluZGV4IDgzYWQ2NjYuLjA2OTEyMTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uL2J1aWxkLnhtbApAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NywyMyArNDcsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NSwxMCArNzUsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24vc2VydmxldC9UZXN0QmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uL3NlcnZsZXQvVGVzdEJlYW4uamF2YQppbmRleCA2ZDA1OWUyLi5jNDM2Mzk1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24vc2VydmxldC9UZXN0QmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi9zZXJ2bGV0L1Rlc3RCZWFuLmphdmEKQEAgLTE0LDcgKzE0LDcgQEAKICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogICovCiAKLS8vU2ltcGxlIFRlc3RCZWFuIHRvIHRlc3QgQ0RJLiAKKy8vU2ltcGxlIFRlc3RCZWFuIHRvIHRlc3QgQ0RJLgogLy9UaGlzIGJlYW4gaW1wbGVtZW50cyBTZXJpYWxpemFibGUgYXMgaXQgbmVlZHMgdG8gYmUgcGxhY2VkIGludG8gYSBTdGF0ZWZ1bCBCZWFuCiBwdWJsaWMgY2xhc3MgVGVzdEJlYW4KIHt9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24vc2VydmxldC9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL2NkaS1zZXJ2bGV0LTMuMC1hbm5vdGF0aW9uL3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQppbmRleCBhZjZmYWUzLi5mMjVkY2YxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvY2RpLXNlcnZsZXQtMy4wLWFubm90YXRpb24vc2VydmxldC9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9jZGktc2VydmxldC0zLjAtYW5ub3RhdGlvbi9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTM1LDggKzM1LDggQEAKICAgICBASW5qZWN0IFRlc3RCZWFuIHRiOwogICAgIEBJbmplY3QgQmVhbk1hbmFnZXIgYm07CiAgICAgQmVhbk1hbmFnZXIgYm0xOwotICAgIAotICAgIEBJbmplY3QgCisKKyAgICBASW5qZWN0CiAgICAgcHJpdmF0ZSB0cmFuc2llbnQgb3JnLmpib3NzLmxvZ2dpbmcuTG9nZ2VyIGxvZzsKIAogICAgIHB1YmxpYyB2b2lkIHNlcnZpY2UoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpCkBAIC01NSw3ICs1NSw3IEBACiAgICAgICAgICAgICBtc2cgKz0gIkJlYW5NYW5hZ2VyIEluamVjdGlvbiB2aWEgY29tcG9uZW50IGVudmlyb25tZW50IGxvb2t1cCBmYWlsZWQiOwogICAgICAgICB9CiAgICAgICAgIGlmIChibTEgPT0gbnVsbCkgbXNnICs9ICJCZWFuTWFuYWdlciBJbmplY3Rpb24gdmlhIGNvbXBvbmVudCBlbnZpcm9ubWVudCBsb29rdXAgZmFpbGVkIjsKLSAgICAgICAgCisKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCZWFuTWFuYWdlciBpcyAiICsgYm0pOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJlYW5NYW5hZ2VyIHZpYSBsb29rdXAgaXMgIiArIGJtMSk7CiAgICAgICAgIHdyaXRlci53cml0ZSgiaW5pdFBhcmFtczogIiArIG1zZyArICJcbiIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL2NkaS1zZXJ2bGV0LWZpbHRlci0zLjAtYW5ub3RhdGlvbi9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvY2RpLXNlcnZsZXQtZmlsdGVyLTMuMC1hbm5vdGF0aW9uL1dlYlRlc3QuamF2YQppbmRleCBiMmRhN2Q1Li5kYjVmNjhlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvY2RpLXNlcnZsZXQtZmlsdGVyLTMuMC1hbm5vdGF0aW9uL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvY2RpLXNlcnZsZXQtZmlsdGVyLTMuMC1hbm5vdGF0aW9uL1dlYlRlc3QuamF2YQpAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBAV2ViU2VydmxldCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKQEAgLTU2LDcgKzU2LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICArICIvbXl1cmwiOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9wZW5pbmcgY29ubmVjdGlvbiB0byAiICsgdXJsKTsKQEAgLTk1LDEwICs5NSwxMCBAQAogICAgICAgICAgICAgaWYgKEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL2NkaS1zZXJ2bGV0LWZpbHRlci0zLjAtYW5ub3RhdGlvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL2NkaS1zZXJ2bGV0LWZpbHRlci0zLjAtYW5ub3RhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGE5YmE4MTAuLjE1MDMzYTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9jZGktc2VydmxldC1maWx0ZXItMy4wLWFubm90YXRpb24vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvY2RpLXNlcnZsZXQtZmlsdGVyLTMuMC1hbm5vdGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC1maWx0ZXItYW5ub3RhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL2NkaS1zZXJ2bGV0LWZpbHRlci0zLjAtYW5ub3RhdGlvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvY2RpLXNlcnZsZXQtZmlsdGVyLTMuMC1hbm5vdGF0aW9uL2J1aWxkLnhtbAppbmRleCA4M2FkNjY2Li4wNjkxMjEyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvY2RpLXNlcnZsZXQtZmlsdGVyLTMuMC1hbm5vdGF0aW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvY2RpLXNlcnZsZXQtZmlsdGVyLTMuMC1hbm5vdGF0aW9uL2J1aWxkLnhtbApAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NywyMyArNDcsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NSwxMCArNzUsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvY2RpLXNlcnZsZXQtZmlsdGVyLTMuMC1hbm5vdGF0aW9uL3NlcnZsZXQvVGVzdEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9jZGktc2VydmxldC1maWx0ZXItMy4wLWFubm90YXRpb24vc2VydmxldC9UZXN0QmVhbi5qYXZhCmluZGV4IDZkMDU5ZTIuLmM0MzYzOTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9jZGktc2VydmxldC1maWx0ZXItMy4wLWFubm90YXRpb24vc2VydmxldC9UZXN0QmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9jZGktc2VydmxldC1maWx0ZXItMy4wLWFubm90YXRpb24vc2VydmxldC9UZXN0QmVhbi5qYXZhCkBAIC0xNCw3ICsxNCw3IEBACiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKICAqLwogCi0vL1NpbXBsZSBUZXN0QmVhbiB0byB0ZXN0IENESS4gCisvL1NpbXBsZSBUZXN0QmVhbiB0byB0ZXN0IENESS4KIC8vVGhpcyBiZWFuIGltcGxlbWVudHMgU2VyaWFsaXphYmxlIGFzIGl0IG5lZWRzIHRvIGJlIHBsYWNlZCBpbnRvIGEgU3RhdGVmdWwgQmVhbgogcHVibGljIGNsYXNzIFRlc3RCZWFuCiB7fQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL29wdGlvbmFsLXVuYnVuZGxlZC1iZWFucy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvb3B0aW9uYWwtdW5idW5kbGVkLWJlYW5zL1dlYlRlc3QuamF2YQppbmRleCBiY2QyNWFlLi4zZTAzNzg2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvb3B0aW9uYWwtdW5idW5kbGVkLWJlYW5zL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvb3B0aW9uYWwtdW5idW5kbGVkLWJlYW5zL1dlYlRlc3QuamF2YQpAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBAV2ViU2VydmxldCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKQEAgLTU2LDcgKzU2LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICArICIvbXl1cmwiOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9wZW5pbmcgY29ubmVjdGlvbiB0byAiICsgdXJsKTsKQEAgLTk1LDEwICs5NSwxMCBAQAogICAgICAgICAgICAgaWYgKEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL29wdGlvbmFsLXVuYnVuZGxlZC1iZWFucy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL29wdGlvbmFsLXVuYnVuZGxlZC1iZWFucy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDM2YjQyOTguLjE5OTcwMzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9vcHRpb25hbC11bmJ1bmRsZWQtYmVhbnMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvb3B0aW9uYWwtdW5idW5kbGVkLWJlYW5zL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tb3B0aW9uYWwtdW5idW5kbGVkLWJlYW5zIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvb3B0aW9uYWwtdW5idW5kbGVkLWJlYW5zL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9vcHRpb25hbC11bmJ1bmRsZWQtYmVhbnMvYnVpbGQueG1sCmluZGV4IDJiYTdjM2EuLjlkNDkwNzIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9vcHRpb25hbC11bmJ1bmRsZWQtYmVhbnMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9vcHRpb25hbC11bmJ1bmRsZWQtYmVhbnMvYnVpbGQueG1sCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ3LDI3ICs0NywyNyBAQAogCiAgICAgICAgIDwhLS0gcmVtb3ZlIHRoZSBjbGFzcyB0aGF0IG5lZWRzIHRvIGJlIHVuYXZhaWxhYmxlIGluIHRoZSBkZXBsb3ltZW50IGFyY2hpdmUgLS0+CiAgICAgICAgIDxkZWxldGUgZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vQ2xhc3NVbmF2YWlsYWJsZUF0UnVudGltZS5jbGFzcyIvPgotIAorCiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzksMTAgKzc5LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL29wdGlvbmFsLXVuYnVuZGxlZC1iZWFucy9zZXJ2bGV0L0NsYXNzVW5hdmFpbGFibGVBdFJ1bnRpbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9vcHRpb25hbC11bmJ1bmRsZWQtYmVhbnMvc2VydmxldC9DbGFzc1VuYXZhaWxhYmxlQXRSdW50aW1lLmphdmEKaW5kZXggM2JhZTlkNy4uYjIyMTgwZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL29wdGlvbmFsLXVuYnVuZGxlZC1iZWFucy9zZXJ2bGV0L0NsYXNzVW5hdmFpbGFibGVBdFJ1bnRpbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvb3B0aW9uYWwtdW5idW5kbGVkLWJlYW5zL3NlcnZsZXQvQ2xhc3NVbmF2YWlsYWJsZUF0UnVudGltZS5qYXZhCkBAIC0xNCw3ICsxNCw3IEBACiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKICAqLwogCi0vL0EgVGVzdCBwYXJlbnQgQmVhbiBjbGFzcyB0aGF0IGlzIGF2YWlsYWJsZSAKKy8vQSBUZXN0IHBhcmVudCBCZWFuIGNsYXNzIHRoYXQgaXMgYXZhaWxhYmxlCiAvL2R1cmluZyBjb21waWxhdGlvbiBidXQgaXMgbm90IHBhY2thZ2VkIGF0IHJ1bnRpbWUKIHB1YmxpYyBjbGFzcyBDbGFzc1VuYXZhaWxhYmxlQXRSdW50aW1lIGV4dGVuZHMgVGVzdFNlcnZpY2UgewogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL29wdGlvbmFsLXVuYnVuZGxlZC1iZWFucy9zZXJ2bGV0L1Rlc3RCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvb3B0aW9uYWwtdW5idW5kbGVkLWJlYW5zL3NlcnZsZXQvVGVzdEJlYW4uamF2YQppbmRleCA2ZDA1OWUyLi5jNDM2Mzk1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvb3B0aW9uYWwtdW5idW5kbGVkLWJlYW5zL3NlcnZsZXQvVGVzdEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvb3B0aW9uYWwtdW5idW5kbGVkLWJlYW5zL3NlcnZsZXQvVGVzdEJlYW4uamF2YQpAQCAtMTQsNyArMTQsNyBAQAogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAgKi8KIAotLy9TaW1wbGUgVGVzdEJlYW4gdG8gdGVzdCBDREkuIAorLy9TaW1wbGUgVGVzdEJlYW4gdG8gdGVzdCBDREkuCiAvL1RoaXMgYmVhbiBpbXBsZW1lbnRzIFNlcmlhbGl6YWJsZSBhcyBpdCBuZWVkcyB0byBiZSBwbGFjZWQgaW50byBhIFN0YXRlZnVsIEJlYW4KIHB1YmxpYyBjbGFzcyBUZXN0QmVhbgoge30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9vcHRpb25hbC11bmJ1bmRsZWQtYmVhbnMvc2VydmxldC9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL29wdGlvbmFsLXVuYnVuZGxlZC1iZWFucy9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggMzExOWJjNS4uNmNmNzdjYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL29wdGlvbmFsLXVuYnVuZGxlZC1iZWFucy9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL29wdGlvbmFsLXVuYnVuZGxlZC1iZWFucy9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTQwLDggKzQwLDggQEAKICAgICBASW5qZWN0IFRlc3RCZWFuIHRiOwogICAgIEBJbmplY3QgQmVhbk1hbmFnZXIgYm07CiAgICAgQmVhbk1hbmFnZXIgYm0xOwotICAgIAotICAgIEBJbmplY3QgCisKKyAgICBASW5qZWN0CiAgICAgcHJpdmF0ZSB0cmFuc2llbnQgb3JnLmpib3NzLmxvZ2dpbmcuTG9nZ2VyIGxvZzsKIAogICAgIHB1YmxpYyB2b2lkIHNlcnZpY2UoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpCkBAIC02MCw3ICs2MCw3IEBACiAgICAgICAgICAgICBtc2cgKz0gIkJlYW5NYW5hZ2VyIEluamVjdGlvbiB2aWEgY29tcG9uZW50IGVudmlyb25tZW50IGxvb2t1cCBmYWlsZWQiOwogICAgICAgICB9CiAgICAgICAgIGlmIChibTEgPT0gbnVsbCkgbXNnICs9ICJCZWFuTWFuYWdlciBJbmplY3Rpb24gdmlhIGNvbXBvbmVudCBlbnZpcm9ubWVudCBsb29rdXAgZmFpbGVkIjsKLSAgICAgICAgCisKICAgICAgICAgLy9FbnN1cmUgdGhhdCB0aGUgT3B0aW9uYWxTZXJ2aWNlIEJlYW4gaXMgbm90IHJlZ2lzdGVyZWQuCiAgICAgICAgIFNldDxCZWFuPD8+PiBvcHRpb25hbFNlcnZpY2VCZWFucyA9IGJtLmdldEJlYW5zKFRlc3RTZXJ2aWNlLmNsYXNzLG5ldyBBbm5vdGF0aW9uTGl0ZXJhbDxBbnk+KCkge30pOwogICAgICAgICBib29sZWFuIG9wdGlvbmFsU2VydmljZUF2YWlsYWJsZSA9IGZhbHNlOwpAQCAtNjgsMTIgKzY4LDEyIEBACiAgICAgICAgICAgICAgICAgLmhhc05leHQoKTspIHsKICAgICAgICAgICAgIEJlYW48Pz4gYiA9ICBpdGVyYXRvci5uZXh0KCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tIiArIGIgKyAiICIgKyBiLmdldENsYXNzKCkgKyAiICIgKyBiLmdldEJlYW5DbGFzcygpLmdldENhbm9uaWNhbE5hbWUoKSk7Ci0gICAgICAgICAgICBpZiAoYi5nZXRCZWFuQ2xhc3MoKS5nZXRDYW5vbmljYWxOYW1lKCkuY29udGFpbnMoIk9wdGlvbmFsIikpIG9wdGlvbmFsU2VydmljZUF2YWlsYWJsZSA9IHRydWU7IAorICAgICAgICAgICAgaWYgKGIuZ2V0QmVhbkNsYXNzKCkuZ2V0Q2Fub25pY2FsTmFtZSgpLmNvbnRhaW5zKCJPcHRpb25hbCIpKSBvcHRpb25hbFNlcnZpY2VBdmFpbGFibGUgPSB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIC8vVGhlIE9wdGlvbmFsU2VydmljZSBCZWFuIHdhcyBub3QgYWRkZWQgdG8gdGhlIFdBUiBhbmQgaGVuY2UgbXVzdCBub3QgYXZhaWxhYmxlIHRocm91Z2ggdGhlIEJNLgogICAgICAgICBpZiAob3B0aW9uYWxTZXJ2aWNlQXZhaWxhYmxlKSBtc2cgKz0gIk9wdGlvbmFsU2VydmljZUJlYW4gaXMgcmVnaXN0ZXJlZCwgdGhvdWdoIGl0IHdhcyBub3QgaW5jbHVkZWQgaW4gdGhlIFdBUiI7Ci0gICAgICAgIAorCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmVhbk1hbmFnZXIgaXMgIiArIGJtKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCZWFuTWFuYWdlciB2aWEgbG9va3VwIGlzICIgKyBibTEpOwogICAgICAgICB3cml0ZXIud3JpdGUoImluaXRQYXJhbXM6ICIgKyBtc2cgKyAiXG4iKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWFyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVhci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGU4Y2E3ODIuLmJkYjU5MDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWFyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lYXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGktZnVsbC1lYXIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic2UuY2xpZW50IiB2YWx1ZT0iY29tLmFjbWUuQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lYXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lYXIvYnVpbGQueG1sCmluZGV4IDViNzVlY2YuLjU2MTBlNzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWFyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVhci9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJ3YXIiLz4KQEAgLTQ2LDggKzQ2LDggQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCi0JPGphdmFjIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiBzcmNkaXI9ImNsaWVudCIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIGRlYnVnPSJvbiIgZmFpbG9uZXJyb3I9InRydWUiPgotCSAKKyAgICA8amF2YWMgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIHNyY2Rpcj0iY2xpZW50IiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgZGVidWc9Im9uIiBmYWlsb25lcnJvcj0idHJ1ZSI+CisKICAgICAgICAgPC9qYXZhYz4KIDwhLS0KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CkBAIC02MiwxNSArNjIsMTUgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIHZhbHVlPSIqKi9Gb28uY2xhc3MsKiovSGVsbG8uY2xhc3MsKiovSGVsbG9SZW1vdGUuY2xhc3MsKiovU2luZ2xldG9uKi5jbGFzcywqKi9IZWxsb1N0YXRlbGVzcy5jbGFzcywqKi9IZWxsb1NpbmdsZXRvbi5jbGFzcywqKi9Gb29NYW5hZ2VkQmVhbi5jbGFzcywqKi9CYXJNYW5hZ2VkQmVhbi5jbGFzcywgKiovRm9vQmFyTWFuYWdlZEJlYW4uY2xhc3MsICoqL01hbmFnZWRTdXBlci5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZWFyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgIDxqYXZhICBmb3JrPSJvbiIgCisgICAgICAgPGphdmEgIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iJHtzZS5jbGllbnR9Ij4KQEAgLTc5LDEwICs3OSwxMCBAQAogICAgICAgICAgICA8YXJnIGxpbmU9IiR7aHR0cC5wb3J0fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWFyL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWFyL2NsaWVudC9DbGllbnQuamF2YQppbmRleCAwY2ZkZjU1Li43YTA3MzFjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVhci9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lYXIvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBhcHBOYW1lOwpAQCAtMzksNTUgKzM5LDU1IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgSW50ZWdlciBhcHBMZXZlbFZpYUxvb2t1cDsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKLQlhcHBOYW1lID0gYXJnc1swXTsKLQlzdGF0LmFkZERlc2NyaXB0aW9uKGFwcE5hbWUpOwotCUNsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOyAgICAgICAKLSAgICAgICAgY2xpZW50LmRvVGVzdCgpOwkKKyAgICBhcHBOYW1lID0gYXJnc1swXTsKKyAgICBzdGF0LmFkZERlc2NyaXB0aW9uKGFwcE5hbWUpOworICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOworICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KGFwcE5hbWUgKyAiSUQiKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImFwcExldmVsVmlhTG9va3VwID0gJyIgKwotCQkJICAgYXBwTGV2ZWxWaWFMb29rdXAgKyAiJyIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYXBwTGV2ZWxWaWFMb29rdXAgPSAnIiArCisgICAgICAgICAgICAgICBhcHBMZXZlbFZpYUxvb2t1cCArICInIik7CiAgICAgfQogCiAgICAgcHVibGljIENsaWVudChTdHJpbmdbXSBhcmdzKSB7Ci0JaG9zdCA9IGFyZ3NbMV07CisgICAgaG9zdCA9IGFyZ3NbMV07CiAgICAgICAgIHBvcnQgPSBhcmdzWzJdOwogICAgIH0KIAotICAgCisKIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKIAotCXRyeSB7CisgICAgdHJ5IHsKIAotCSAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyAKKyAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsKICAgICAgICAgICAgICAgICAiLyIgKyBhcHBOYW1lICsgIi9IZWxsb1NlcnZsZXQiOwogCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImludm9raW5nIHdlYmNsaWVudCBzZXJ2bGV0IGF0ICIgKyB1cmwpOwogCi0JICAgIFVSTCB1ID0gbmV3IFVSTCh1cmwpOwotICAgICAgICAKLQkgICAgSHR0cFVSTENvbm5lY3Rpb24gYzEgPSAoSHR0cFVSTENvbm5lY3Rpb24pdS5vcGVuQ29ubmVjdGlvbigpOwotCSAgICBpbnQgY29kZSA9IGMxLmdldFJlc3BvbnNlQ29kZSgpOwotCSAgICBJbnB1dFN0cmVhbSBpcyA9IGMxLmdldElucHV0U3RyZWFtKCk7Ci0JICAgIEJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyIChuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKLQkgICAgU3RyaW5nIGxpbmUgPSBudWxsOwotCSAgICB3aGlsZSgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpeworICAgICAgICBVUkwgdSA9IG5ldyBVUkwodXJsKTsKKworICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjMSA9IChIdHRwVVJMQ29ubmVjdGlvbil1Lm9wZW5Db25uZWN0aW9uKCk7CisgICAgICAgIGludCBjb2RlID0gYzEuZ2V0UmVzcG9uc2VDb2RlKCk7CisgICAgICAgIElucHV0U3RyZWFtIGlzID0gYzEuZ2V0SW5wdXRTdHJlYW0oKTsKKyAgICAgICAgQnVmZmVyZWRSZWFkZXIgaW5wdXQgPSBuZXcgQnVmZmVyZWRSZWFkZXIgKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOworICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CisgICAgICAgIHdoaWxlKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCl7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIjxyZXNwb25zZT46IisgbGluZSk7CiAgICAgICAgICAgICBpZiAobGluZS50cmltKCkubGVuZ3RoKCkgPiAwKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotCSAgICBpZihjb2RlICE9IDIwMCkgeworICAgICAgICBpZihjb2RlICE9IDIwMCkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgcmV0dXJuOwotCSAgICB9Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5QQVNTKTsKKyAgICAgICAgfQorICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuUEFTUyk7CiAKLQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5GQUlMKTsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuRkFJTCk7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQogICAgIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVhci9lamIvQmFyTWFuYWdlZEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWFyL2VqYi9CYXJNYW5hZ2VkQmVhbi5qYXZhCmluZGV4IDkwNTNlNmEuLmFmYTI4ODUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWFyL2VqYi9CYXJNYW5hZ2VkQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWFyL2VqYi9CYXJNYW5hZ2VkQmVhbi5qYXZhCkBAIC0yOSw3ICsyOSw3IEBACiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gQmFyTWFuYWdlZEJlYW46OmluaXQoKSAiICsgdGhpcyk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBCYXJNYW5hZ2VkQmVhbjo6aW5pdCgpICIgKyB0aGlzKTsKICAgICB9CiAKICAgIHB1YmxpYyB2b2lkIGJhcigpIHsKQEAgLTM5LDEyICszOSwxMiBAQAogCiAgICAgQFByZURlc3Ryb3kKICAgICBwcml2YXRlIHZvaWQgZGVzdHJveSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEJhck1hbmFnZWRCZWFuOjpkZXN0cm95KCkgIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBCYXJNYW5hZ2VkQmVhbjo6ZGVzdHJveSgpICIpOwogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JcmV0dXJuICJCYXJNYW5hZ2VkQmVhbiB0aGlzID0gIiArIHN1cGVyLnRvU3RyaW5nKCkgKyAKLQkgICAgIiBzID0gIiArIHMgKyAiICwgZHMgPSAiICsgZHM7CisgICAgcmV0dXJuICJCYXJNYW5hZ2VkQmVhbiB0aGlzID0gIiArIHN1cGVyLnRvU3RyaW5nKCkgKworICAgICAgICAiIHMgPSAiICsgcyArICIgLCBkcyA9ICIgKyBkczsKIAogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lYXIvZWpiL0Zvb0Jhck1hbmFnZWRCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVhci9lamIvRm9vQmFyTWFuYWdlZEJlYW4uamF2YQppbmRleCA0NmNjM2MzLi41OTRhOGY0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVhci9lamIvRm9vQmFyTWFuYWdlZEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVhci9lamIvRm9vQmFyTWFuYWdlZEJlYW4uamF2YQpAQCAtMjMsMTIgKzIzLDEyIEBACiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vQmFyTWFuYWdlZEJlYW46OmluaXQoKSAiICsgdGhpcyk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29CYXJNYW5hZ2VkQmVhbjo6aW5pdCgpICIgKyB0aGlzKTsKICAgICB9Ci0gICAgCisKICAgICBAUHJlRGVzdHJveQogICAgIHByaXZhdGUgdm9pZCBkZXN0cm95KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vQmFyTWFuYWdlZEJlYW46OmRlc3Ryb3koKSAiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb0Jhck1hbmFnZWRCZWFuOjpkZXN0cm95KCkgIik7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVhci9lamIvRm9vTWFuYWdlZEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWFyL2VqYi9Gb29NYW5hZ2VkQmVhbi5qYXZhCmluZGV4IDVlZTE0ODguLmVkOWQzZmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWFyL2VqYi9Gb29NYW5hZ2VkQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWFyL2VqYi9Gb29NYW5hZ2VkQmVhbi5qYXZhCkBAIC0zNCwzMyArMzQsMzMgQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29NYW5hZ2VkQmVhbjo6aW5pdCgpICIgKyB0aGlzKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb01hbmFnZWRCZWFuOjppbml0KCkgIiArIHRoaXMpOwogICAgIH0KLSAgICAKKwogCiAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotCXJldHVybiAic29tZW1hbmFnZWRiZWFuIjsKKyAgICByZXR1cm4gInNvbWVtYW5hZ2VkYmVhbiI7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZm9vKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vTWFuYWdlZEJlYW46OmZvbygpICIpOwotCWJtYi5iYXIoKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb01hbmFnZWRCZWFuOjpmb28oKSAiKTsKKyAgICBibWIuYmFyKCk7CiAgICAgfQogCiAgICAgcHVibGljIE9iamVjdCBnZXRUaGlzKCkgewotCXJldHVybiB0aGlzOworICAgIHJldHVybiB0aGlzOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CiAgICAgcHJpdmF0ZSB2b2lkIGRlc3Ryb3koKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29NYW5hZ2VkQmVhbjo6ZGVzdHJveSgpICIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vTWFuYWdlZEJlYW46OmRlc3Ryb3koKSAiKTsKICAgICB9CiAKIAogICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JcmV0dXJuICJGb29NYW5hZ2VkQmVhbiB0aGlzID0gIiArIHN1cGVyLnRvU3RyaW5nKCkgKyAKLQkJCSAgICIgcyA9ICIgKyBzICsgIiAsIG9yYiA9ICIgKyBvcmIgKyAKLQkgICAgIiAsIGJtYiA9ICIgKyBibWIgKyAiICwgZW0gPSAiICsgZW07CisgICAgcmV0dXJuICJGb29NYW5hZ2VkQmVhbiB0aGlzID0gIiArIHN1cGVyLnRvU3RyaW5nKCkgKworICAgICAgICAgICAgICAgIiBzID0gIiArIHMgKyAiICwgb3JiID0gIiArIG9yYiArCisgICAgICAgICIgLCBibWIgPSAiICsgYm1iICsgIiAsIGVtID0gIiArIGVtOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lYXIvZWpiL0hlbGxvU2luZ2xldG9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVhci9lamIvSGVsbG9TaW5nbGV0b24uamF2YQppbmRleCA2ZDkyMDZkLi4wOTRlMjkzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVhci9lamIvSGVsbG9TaW5nbGV0b24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVhci9lamIvSGVsbG9TaW5nbGV0b24uamF2YQpAQCAtMzksOSArMzksOSBAQAogICAgIEBSZXNvdXJjZShuYW1lPSJqYXZhOm1vZHVsZS9lbnYvTU9SQjIiKQogICAgIHByaXZhdGUgT1JCIG9yYjsKIAotICAgIEBSZXNvdXJjZSAKKyAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIEZvb01hbmFnZWRCZWFuIGZvbzsKLSAgICAKKwogICAgIEBSZXNvdXJjZShuYW1lPSJmb28ycmVmIiwgbWFwcGVkTmFtZT0iamF2YTptb2R1bGUvc29tZW1hbmFnZWRiZWFuIikKICAgICBwcml2YXRlIEZvb01hbmFnZWRCZWFuIGZvbzI7CiAKQEAgLTU5LDU5ICs1OSw1OSBAQAogCiAgICAgQEVKQihuYW1lPSJqYXZhOmFwcC9lbnYvYXBwTGV2ZWxFamJSZWYiKQogICAgIHByaXZhdGUgSGVsbG8gaGVsbG87Ci0gICAgCisKICAgICBTdHJpbmcgYXBwTmFtZTsKICAgICBTdHJpbmcgbW9kdWxlTmFtZTsKIAotICAgIEBQb3N0Q29uc3RydWN0ICAgIAorICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJIZWxsb1NpbmdsZXRvbjo6aW5pdCgpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJIZWxsb1NpbmdsZXRvbjo6aW5pdCgpIik7CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIm15U3RyaW5nID0gJyIgKyBteVN0cmluZyArICInIik7Ci0JaWYoIChteVN0cmluZyA9PSBudWxsKSB8fCAhKG15U3RyaW5nLmVxdWFscygibXlTdHJpbmciKSApICkgewotCSAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiSW52YWxpZCB2YWx1ZSAiICsgbXlTdHJpbmcgKyAiIGZvciBteVN0cmluZyIpOwotCX0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm15U3RyaW5nID0gJyIgKyBteVN0cmluZyArICInIik7CisgICAgaWYoIChteVN0cmluZyA9PSBudWxsKSB8fCAhKG15U3RyaW5nLmVxdWFscygibXlTdHJpbmciKSApICkgeworICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiSW52YWxpZCB2YWx1ZSAiICsgbXlTdHJpbmcgKyAiIGZvciBteVN0cmluZyIpOworICAgIH0KIAotCWFwcE5hbWUgPSAoU3RyaW5nKSBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTphcHAvQXBwTmFtZSIpOwotCW1vZHVsZU5hbWUgPSAoU3RyaW5nKSBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTptb2R1bGUvTW9kdWxlTmFtZSIpOworICAgIGFwcE5hbWUgPSAoU3RyaW5nKSBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTphcHAvQXBwTmFtZSIpOworICAgIG1vZHVsZU5hbWUgPSAoU3RyaW5nKSBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTptb2R1bGUvTW9kdWxlTmFtZSIpOwogCi0JT1JCIG9yYjEgPSAoT1JCKSBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTptb2R1bGUvTU9SQjEiKTsKLQlPUkIgb3JiMiA9IChPUkIpIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOm1vZHVsZS9lbnYvTU9SQjIiKTsKKyAgICBPUkIgb3JiMSA9IChPUkIpIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOm1vZHVsZS9NT1JCMSIpOworICAgIE9SQiBvcmIyID0gKE9SQikgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6bW9kdWxlL2Vudi9NT1JCMiIpOwogCi0JU3lzdGVtLm91dC5wcmludGxuKCJBcHBOYW1lID0gIiArIGFwcE5hbWUpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiTW9kdWxlTmFtZSA9ICIgKyBtb2R1bGVOYW1lKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFwcE5hbWUgPSAiICsgYXBwTmFtZSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJNb2R1bGVOYW1lID0gIiArIG1vZHVsZU5hbWUpOwogCi0JZm9vNCA9IChGb29NYW5hZ2VkQmVhbikgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6bW9kdWxlL3NvbWVtYW5hZ2VkYmVhbiIpOwotCWZvbzUgPSAoRm9vTWFuYWdlZEJlYW4pIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOmFwcC8iICsgbW9kdWxlTmFtZSArCi0JCQkJCQkgICIvc29tZW1hbmFnZWRiZWFuIik7Ci0JZm9vNiA9IChGb28pIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOmFwcC8iICsgbW9kdWxlTmFtZSArCi0JCQkJCQkgICIvc29tZW1hbmFnZWRiZWFuIik7Ci0JZm9vNyA9IChGb29NYW5hZ2VkQmVhbikgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6Y29tcC9lbnYvZm9vMnJlZiIpOwotCWZvbzggPSAoRm9vKSBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9mb28zcmVmIik7CisgICAgZm9vNCA9IChGb29NYW5hZ2VkQmVhbikgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6bW9kdWxlL3NvbWVtYW5hZ2VkYmVhbiIpOworICAgIGZvbzUgPSAoRm9vTWFuYWdlZEJlYW4pIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOmFwcC8iICsgbW9kdWxlTmFtZSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICIvc29tZW1hbmFnZWRiZWFuIik7CisgICAgZm9vNiA9IChGb28pIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOmFwcC8iICsgbW9kdWxlTmFtZSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICIvc29tZW1hbmFnZWRiZWFuIik7CisgICAgZm9vNyA9IChGb29NYW5hZ2VkQmVhbikgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6Y29tcC9lbnYvZm9vMnJlZiIpOworICAgIGZvbzggPSAoRm9vKSBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9mb28zcmVmIik7CiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyBoZWxsbygpIHsKLQkKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvU2luZ2xldG9uOjpoZWxsbygpIik7CisKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvU2luZ2xldG9uOjpoZWxsbygpIik7CiAKIAotCWZvby5mb28oKTsKLQlmb28yLmZvbygpOwotCWZvbzMuZm9vKCk7CisgICAgZm9vLmZvbygpOworICAgIGZvbzIuZm9vKCk7CisgICAgZm9vMy5mb28oKTsKIAotCWZvbzQuZm9vKCk7Ci0JZm9vNS5mb28oKTsKLQlmb282LmZvbygpOwotCWZvbzcuZm9vKCk7Ci0gICAgICAJZm9vOC5mb28oKTsKKyAgICBmb280LmZvbygpOworICAgIGZvbzUuZm9vKCk7CisgICAgZm9vNi5mb28oKTsKKyAgICBmb283LmZvbygpOworICAgICAgICAgIGZvbzguZm9vKCk7CiAKLQlyZXR1cm4gImhlbGxvLCB3b3JsZCFcbiI7CisgICAgcmV0dXJuICJoZWxsbywgd29ybGQhXG4iOwogICAgIH0KIAogCiAgICAgQFByZURlc3Ryb3kKICAgICBwcml2YXRlIHZvaWQgZGVzdHJveSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvU2luZ2xldG9uOjpkZXN0cm95KCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvU2luZ2xldG9uOjpkZXN0cm95KCkiKTsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWFyL2VqYi9IZWxsb1N0YXRlbGVzcy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lYXIvZWpiL0hlbGxvU3RhdGVsZXNzLmphdmEKaW5kZXggYjA5NDg1Ni4uODdiNWY3OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lYXIvZWpiL0hlbGxvU3RhdGVsZXNzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lYXIvZWpiL0hlbGxvU3RhdGVsZXNzLmphdmEKQEAgLTMwLDcgKzMwLDcgQEAKIAogICAgIEBSZXNvdXJjZShuYW1lPSJqYXZhOm1vZHVsZS9NT1JCMSIpCiAgICAgcHJpdmF0ZSBPUkIgb3JiOwotICAgIAorCiAgICAgQEVKQihuYW1lPSJsb29rdXByZWYxIiwgbG9va3VwPSJqYXZhOmFwcC9lbnYvQVMxIikKICAgICBwcml2YXRlIEhlbGxvIGxvb2t1cHJlZjE7CiAKQEAgLTQxLDUxICs0MSw1MSBAQAogICAgIHByaXZhdGUgSGVsbG9SZW1vdGUgbG9va3VwcmVmMzsKIAogICAgIC8vIGRlY2xhcmUgY29tcG9uZW50LWxldmVsIGRlcGVuZGVuY3kgdXNpbmcgZnVsbHktcXVhbGlmaWVkCi0gICAgLy8gamF2YTpjb21wL2VudiBmb3JtLiAgCisgICAgLy8gamF2YTpjb21wL2VudiBmb3JtLgogICAgIEBSZXNvdXJjZShuYW1lPSJqYXZhOmNvbXAvZW52L2ZvbyIpIFNlc3Npb25Db250ZXh0IHNlc3Npb25DdHg7CiAKLSAgICBAUG9zdENvbnN0cnVjdCAKKyAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG9TdGF0ZWxlc3M6OmluaXQoKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG9TdGF0ZWxlc3M6OmluaXQoKSIpOwogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgaGVsbG8oKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1N0YXRlbGVzczo6aGVsbG8oKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TdGF0ZWxlc3M6OmhlbGxvKCkiKTsKIAotCVN0cmluZyBhcHBOYW1lID0gKFN0cmluZykgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6YXBwL0FwcE5hbWUiKTsKLQlTdHJpbmcgbW9kdWxlTmFtZSA9IChTdHJpbmcpIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOm1vZHVsZS9Nb2R1bGVOYW1lIik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJBcHBOYW1lID0gIiArIGFwcE5hbWUpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiTW9kdWxlTmFtZSA9ICIgKyBtb2R1bGVOYW1lKTsKKyAgICBTdHJpbmcgYXBwTmFtZSA9IChTdHJpbmcpIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOmFwcC9BcHBOYW1lIik7CisgICAgU3RyaW5nIG1vZHVsZU5hbWUgPSAoU3RyaW5nKSBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTptb2R1bGUvTW9kdWxlTmFtZSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQXBwTmFtZSA9ICIgKyBhcHBOYW1lKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk1vZHVsZU5hbWUgPSAiICsgbW9kdWxlTmFtZSk7CiAKLQlPUkIgb3JiMSA9IChPUkIpIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOm1vZHVsZS9NT1JCMSIpOwotCU9SQiBvcmIyID0gKE9SQikgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6bW9kdWxlL2Vudi9NT1JCMiIpOworICAgIE9SQiBvcmIxID0gKE9SQikgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6bW9kdWxlL01PUkIxIik7CisgICAgT1JCIG9yYjIgPSAoT1JCKSBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTptb2R1bGUvZW52L01PUkIyIik7CiAKLQlIZWxsbyBzMSA9IChIZWxsbykgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6Z2xvYmFsLyIgKwotCQkJCQkgICBhcHBOYW1lICsgIi8iICsKLQkJCQkJICAgbW9kdWxlTmFtZSArICIvIiArCi0JCQkJCSAgICJIZWxsb1NpbmdsZXRvbiIpOworICAgIEhlbGxvIHMxID0gKEhlbGxvKSBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTpnbG9iYWwvIiArCisgICAgICAgICAgICAgICAgICAgICAgIGFwcE5hbWUgKyAiLyIgKworICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVOYW1lICsgIi8iICsKKyAgICAgICAgICAgICAgICAgICAgICAgIkhlbGxvU2luZ2xldG9uIik7CiAKLQlIZWxsbyBzMiA9IChIZWxsbykgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6YXBwLyIgKwotCQkJCQkJCSBtb2R1bGVOYW1lICsgIi8iICsKLQkJCQkJCQkgIkhlbGxvU2luZ2xldG9uIik7CisgICAgSGVsbG8gczIgPSAoSGVsbG8pIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOmFwcC8iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlTmFtZSArICIvIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZWxsb1NpbmdsZXRvbiIpOwogCi0JLy8gUmVseSBvbiBkZWZhdWx0IHRvIHJlc29sdmUgImphdmE6Y29tcC9lbnYvIGRlY2xhcmVkIHJlc291cmNlCi0JU2Vzc2lvbkNvbnRleHQgc2MxID0gKFNlc3Npb25Db250ZXh0KQotCSAgICBzZXNzaW9uQ3R4Lmxvb2t1cCgiZm9vIik7CisgICAgLy8gUmVseSBvbiBkZWZhdWx0IHRvIHJlc29sdmUgImphdmE6Y29tcC9lbnYvIGRlY2xhcmVkIHJlc291cmNlCisgICAgU2Vzc2lvbkNvbnRleHQgc2MxID0gKFNlc3Npb25Db250ZXh0KQorICAgICAgICBzZXNzaW9uQ3R4Lmxvb2t1cCgiZm9vIik7CiAKLQlTZXNzaW9uQ29udGV4dCBzYzIgPSAoU2Vzc2lvbkNvbnRleHQpCi0JICAgIHNjMS5sb29rdXAoImphdmE6Y29tcC9lbnYvZm9vIik7CisgICAgU2Vzc2lvbkNvbnRleHQgc2MyID0gKFNlc3Npb25Db250ZXh0KQorICAgICAgICBzYzEubG9va3VwKCJqYXZhOmNvbXAvZW52L2ZvbyIpOwogCi0JSW50ZWdlciBlbnZFbnRyeSA9IChJbnRlZ2VyKQotCSAgICBzYzEubG9va3VwKCJqYXZhOmFwcC9lbnYvdmFsdWUxIik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJqYXZhOmFwL2Vudi92YWx1ZTEgPSAiICsgZW52RW50cnkpOworICAgIEludGVnZXIgZW52RW50cnkgPSAoSW50ZWdlcikKKyAgICAgICAgc2MxLmxvb2t1cCgiamF2YTphcHAvZW52L3ZhbHVlMSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiamF2YTphcC9lbnYvdmFsdWUxID0gIiArIGVudkVudHJ5KTsKIAotCXJldHVybiAiaGVsbG8sIHdvcmxkIVxuIjsKKyAgICByZXR1cm4gImhlbGxvLCB3b3JsZCFcbiI7CiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKICAgICBwcml2YXRlIHZvaWQgZGVzdHJveSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvU3RhdGVsZXNzOjpkZXN0cm95KCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvU3RhdGVsZXNzOjpkZXN0cm95KCkiKTsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWFyL2VqYi9NYW5hZ2VkU3VwZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWFyL2VqYi9NYW5hZ2VkU3VwZXIuamF2YQppbmRleCAzNDAxYjQxLi42NDlkMTYwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVhci9lamIvTWFuYWdlZFN1cGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lYXIvZWpiL01hbmFnZWRTdXBlci5qYXZhCkBAIC0yOCwxNyArMjgsMTcgQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBNYW5hZ2VkU3VwZXI6OmluaXQoKSAiICsgdGhpcyk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBNYW5hZ2VkU3VwZXI6OmluaXQoKSAiICsgdGhpcyk7CiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKICAgICBwcml2YXRlIHZvaWQgZGVzdHJveSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIE1hbmFnZWRTdXBlcjo6ZGVzdHJveSgpICIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gTWFuYWdlZFN1cGVyOjpkZXN0cm95KCkgIik7CiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQlyZXR1cm4gIk1hbmFnZWRTdXBlciB0aGlzID0gIiArIHN1cGVyLnRvU3RyaW5nKCkgKyAKLQkgICAgIiBzID0gIiArIHMgKyAiICwgZHMgPSAiICsgZHM7CisgICAgcmV0dXJuICJNYW5hZ2VkU3VwZXIgdGhpcyA9ICIgKyBzdXBlci50b1N0cmluZygpICsKKyAgICAgICAgIiBzID0gIiArIHMgKyAiICwgZHMgPSAiICsgZHM7CiAKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWFyL2VqYi9TaW5nbGV0b24yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVhci9lamIvU2luZ2xldG9uMi5qYXZhCmluZGV4IGJjZGExOTQuLjQ2MTVlZDcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWFyL2VqYi9TaW5nbGV0b24yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lYXIvZWpiL1NpbmdsZXRvbjIuamF2YQpAQCAtMjgsNyArMjgsNyBAQAogICAgIHB1YmxpYyB2b2lkIGluaXQoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjI6OmluaXQoKSIpOwogICAgIH0KLSAgICAKKwogICAgIEBQcmVEZXN0cm95CiAgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuMjo6ZGVzdHJveSgpIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVhci9lamIvU2luZ2xldG9uMy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lYXIvZWpiL1NpbmdsZXRvbjMuamF2YQppbmRleCAwODRlZDdhLi5lMjc3YjA2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVhci9lamIvU2luZ2xldG9uMy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWFyL2VqYi9TaW5nbGV0b24zLmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKICAgICBwdWJsaWMgdm9pZCBpbml0KCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW4zOjppbml0KCkiKTsKICAgICB9Ci0gICAgCisKICAgICBAUHJlRGVzdHJveQogICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjM6OmRlc3Ryb3koKSIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lYXIvZWpiL1NpbmdsZXRvbjQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWFyL2VqYi9TaW5nbGV0b240LmphdmEKaW5kZXggNzM4NjM4OC4uZjJmMzQwYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lYXIvZWpiL1NpbmdsZXRvbjQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVhci9lamIvU2luZ2xldG9uNC5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiAgICAgcHVibGljIHZvaWQgaW5pdCgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuNDo6aW5pdCgpIik7CiAgICAgfQotICAgIAorCiAgICAgQFByZURlc3Ryb3kKICAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW40OjpkZXN0cm95KCkiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWFyL3dhci9Gb28yTWFuYWdlZEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWFyL3dhci9Gb28yTWFuYWdlZEJlYW4uamF2YQppbmRleCAxMzRlN2E4Li45ODY2NWI2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVhci93YXIvRm9vMk1hbmFnZWRCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lYXIvd2FyL0ZvbzJNYW5hZ2VkQmVhbi5qYXZhCkBAIC0zMywyNyArMzMsMjcgQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb28yTWFuYWdlZEJlYW46OmluaXQoKSAiICsgdGhpcyk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb28yTWFuYWdlZEJlYW46OmluaXQoKSAiICsgdGhpcyk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZm9vKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vMk1hbmFnZWRCZWFuOjpmb28oKSAiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvbzJNYW5hZ2VkQmVhbjo6Zm9vKCkgIik7CiAgICAgfQogCiAgICAgcHVibGljIE9iamVjdCBnZXRUaGlzKCkgewotCXJldHVybiB0aGlzOworICAgIHJldHVybiB0aGlzOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CiAgICAgcHJpdmF0ZSB2b2lkIGRlc3Ryb3koKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb28yTWFuYWdlZEJlYW46OmRlc3Ryb3koKSAiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvbzJNYW5hZ2VkQmVhbjo6ZGVzdHJveSgpICIpOwogICAgIH0KIAogCiAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQlyZXR1cm4gIkZvbzJNYW5hZ2VkQmVhbiB0aGlzID0gIiArIAotCQkJICAgIiBzID0gIiArIHMgKyAiICwgb3JiID0gIiArIG9yYiArIAotCSAgICAiICwgZW0gPSAiICsgZW07CisgICAgcmV0dXJuICJGb28yTWFuYWdlZEJlYW4gdGhpcyA9ICIgKworICAgICAgICAgICAgICAgIiBzID0gIiArIHMgKyAiICwgb3JiID0gIiArIG9yYiArCisgICAgICAgICIgLCBlbSA9ICIgKyBlbTsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWFyL3dhci9Gb29CYXJNYW5hZ2VkQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lYXIvd2FyL0Zvb0Jhck1hbmFnZWRCZWFuLmphdmEKaW5kZXggNDZjYzNjMy4uNTk0YThmNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lYXIvd2FyL0Zvb0Jhck1hbmFnZWRCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lYXIvd2FyL0Zvb0Jhck1hbmFnZWRCZWFuLmphdmEKQEAgLTIzLDEyICsyMywxMiBAQAogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb0Jhck1hbmFnZWRCZWFuOjppbml0KCkgIiArIHRoaXMpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vQmFyTWFuYWdlZEJlYW46OmluaXQoKSAiICsgdGhpcyk7CiAgICAgfQotICAgIAorCiAgICAgQFByZURlc3Ryb3kKICAgICBwcml2YXRlIHZvaWQgZGVzdHJveSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb0Jhck1hbmFnZWRCZWFuOjpkZXN0cm95KCkgIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29CYXJNYW5hZ2VkQmVhbjo6ZGVzdHJveSgpICIpOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lamItY2RpL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVqYi1jZGkvYnVpbGQucHJvcGVydGllcwppbmRleCBlMDUzM2FiLi40YmMzZjczIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVqYi1jZGkvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVqYi1jZGkvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjQgKzE1LDI0IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzaW1wbGUtZWpiLWNkaSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzaW1wbGUuY2xpZW50IiB2YWx1ZT0iY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5oZWxsby5zZXNzaW9uLmNsaWVudC5TdGFuZGFsb25lQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0ic2ltcGxlLmNsaWVudDIiIHZhbHVlPSJjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmhlbGxvLnNlc3Npb24uY2xpZW50LlN0YW5kYWxvbmVDbGllbnQyIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJiZWFucy54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2JlYW5zLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lamItY2RpL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWpiLWNkaS9idWlsZC54bWwKaW5kZXggMDBjZGI5MC4uOGQ4NzdjZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lamItY2RpL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVqYi1jZGkvYnVpbGQueG1sCkBAIC0zMSw2MiArMzEsNjIgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCxkZXBsb3kscnVuLHVuZGVwbG95IiAvPgogCi0JPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIgLz4KLQkJPGRlbGV0ZSBmaWxlPSJjbGllbnQvQ2xpZW50LmphdmEiIC8+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIgLz4KKyAgICAgICAgPGRlbGV0ZSBmaWxlPSJjbGllbnQvQ2xpZW50LmphdmEiIC8+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KLQkJPGNvcHkgZmlsZT0iY2xpZW50L0NsaWVudC5qYXZhLnRva2VuIiB0b2ZpbGU9ImNsaWVudC9DbGllbnQuamF2YSIgLz4KLQkJPHJlcGxhY2UgZmlsZT0iY2xpZW50L0NsaWVudC5qYXZhIiB0b2tlbj0iQE9SQl9QT1JUQCIgdmFsdWU9IiR7b3JiLnBvcnR9IiAvPgorICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgorICAgICAgICA8Y29weSBmaWxlPSJjbGllbnQvQ2xpZW50LmphdmEudG9rZW4iIHRvZmlsZT0iY2xpZW50L0NsaWVudC5qYXZhIiAvPgorICAgICAgICA8cmVwbGFjZSBmaWxlPSJjbGllbnQvQ2xpZW50LmphdmEiIHRva2VuPSJAT1JCX1BPUlRAIiB2YWx1ZT0iJHtvcmIucG9ydH0iIC8+CiAKLQkJPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+Ci0JCQk8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIiAvPgotCQk8L2FudGNhbGw+Ci0JCTxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgotCQkJPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNsaWVudCIgLz4KLQkJPC9hbnRjYWxsPgotCTwvdGFyZ2V0PgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiIC8+CisgICAgICAgIDwvYW50Y2FsbD4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY2xpZW50IiAvPgorICAgICAgICA8L2FudGNhbGw+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLQkJCTxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgdmFsdWU9IioqL1NmdWwqLmNsYXNzLCoqL1NsZXNzKi5jbGFzcywgKiovVGVzdEJlYW4uY2xhc3MiIC8+Ci0JCQk8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIHZhbHVlPSIqKi9DbGllbnQuY2xhc3MsKiovU2Z1bC5jbGFzcywqKi9TbGVzcy5jbGFzcyIgLz4KLQkJPC9hbnRjYWxsPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiB2YWx1ZT0iKiovU2Z1bCouY2xhc3MsKiovU2xlc3MqLmNsYXNzLCAqKi9UZXN0QmVhbi5jbGFzcyIgLz4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgdmFsdWU9IioqL0NsaWVudC5jbGFzcywqKi9TZnVsLmNsYXNzLCoqL1NsZXNzLmNsYXNzIiAvPgorICAgICAgICA8L2FudGNhbGw+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iIC8+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIiAvPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIiAvPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIgLz4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0icnVuX3N0YW5kYWxvbmVjbGllbnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGphdmEgZm9yaz0ib24iIGZhaWxvbmVycm9yPSJ0cnVlIiAKLQkJCWNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiAKLQkJCWNsYXNzbmFtZT0iJHtzaW1wbGUuY2xpZW50fSI+Ci0JCQk8c3lzcHJvcGVydHkga2V5PSJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0IiB2YWx1ZT0iJHtvcmIucG9ydH0iIC8+Ci0JCTwvamF2YT4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9InJ1bl9zdGFuZGFsb25lY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxqYXZhIGZvcms9Im9uIiBmYWlsb25lcnJvcj0idHJ1ZSIKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgorICAgICAgICAgICAgY2xhc3NuYW1lPSIke3NpbXBsZS5jbGllbnR9Ij4KKyAgICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke29yYi5wb3J0fSIgLz4KKyAgICAgICAgPC9qYXZhPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJydW5fc3RhbmRhbG9uZWNsaWVudDIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGphdmEgZm9yaz0ib24iIGZhaWxvbmVycm9yPSJ0cnVlIiAKLQkJCWNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiAKLQkJCWNsYXNzbmFtZT0iJHtzaW1wbGUuY2xpZW50Mn0iPgotCQkJPGp2bWFyZyB2YWx1ZT0iLURqYXZhLm5hbWluZy5mYWN0b3J5LmluaXRpYWw9b3JnLmdsYXNzZmlzaC5qbmRpLmNvc25hbWluZy5DTkN0eEZhY3RvcnkiIC8+Ci0JCQk8anZtYXJnIHZhbHVlPSItRGphdmEubmFtaW5nLnByb3ZpZGVyLnVybD1paW9wOi8vbG9jYWxob3N0OiR7b3JiLnBvcnR9IiAvPgotCQkJPGp2bWFyZyB2YWx1ZT0iLURvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0PSR7b3JiLnBvcnR9IiAvPgorICAgIDx0YXJnZXQgbmFtZT0icnVuX3N0YW5kYWxvbmVjbGllbnQyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgIDxqYXZhIGZvcms9Im9uIiBmYWlsb25lcnJvcj0idHJ1ZSIKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgorICAgICAgICAgICAgY2xhc3NuYW1lPSIke3NpbXBsZS5jbGllbnQyfSI+CisgICAgICAgICAgICA8anZtYXJnIHZhbHVlPSItRGphdmEubmFtaW5nLmZhY3RvcnkuaW5pdGlhbD1vcmcuZ2xhc3NmaXNoLmpuZGkuY29zbmFtaW5nLkNOQ3R4RmFjdG9yeSIgLz4KKyAgICAgICAgICAgIDxqdm1hcmcgdmFsdWU9Ii1EamF2YS5uYW1pbmcucHJvdmlkZXIudXJsPWlpb3A6Ly9sb2NhbGhvc3Q6JHtvcmIucG9ydH0iIC8+CisgICAgICAgICAgICA8anZtYXJnIHZhbHVlPSItRG9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQ9JHtvcmIucG9ydH0iIC8+CiAKLQkJPC9qYXZhPgotCTwvdGFyZ2V0PgorICAgICAgICA8L2phdmE+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIiAvPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iIC8+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iIC8+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIiAvPgorICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lamItY2RpL2VqYi9TZnVsRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVqYi1jZGkvZWpiL1NmdWxFSkIuamF2YQppbmRleCA5MjgxZDg3Li41OGY4ZmM2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVqYi1jZGkvZWpiL1NmdWxFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVqYi1jZGkvZWpiL1NmdWxFSkIuamF2YQpAQCAtMjksNyArMjksNyBAQAogICAgICAgICBpZiAodGIgIT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuICJoZWxsbyI7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVqYi1jZGkvZWpiL1NsZXNzRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVqYi1jZGkvZWpiL1NsZXNzRUpCLmphdmEKaW5kZXggMmIwZGZmOC4uOGJiODU3YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lamItY2RpL2VqYi9TbGVzc0VKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWpiLWNkaS9lamIvU2xlc3NFSkIuamF2YQpAQCAtMjgsNyArMjgsNyBAQAogICAgICAgICBpZiAodGIgIT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuICJoZWxsbyI7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVqYi1zaW5nbGV0b24vaGVsbG8vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWpiLXNpbmdsZXRvbi9oZWxsby9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDk4MmMzNDQuLjBlZGI2ZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWpiLXNpbmdsZXRvbi9oZWxsby9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWpiLXNpbmdsZXRvbi9oZWxsby9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMyArMTUsMTMgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaS1zaW5nbGV0b24taGVsbG8iLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+IAotPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPlx1MDAyMAorPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzZS5jbGllbnQiIHZhbHVlPSJjb20uYWNtZS5DbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJiZWFucy54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2JlYW5zLnhtbCIvPgotCQorCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWpiLXNpbmdsZXRvbi9oZWxsby9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVqYi1zaW5nbGV0b24vaGVsbG8vYnVpbGQueG1sCmluZGV4IGFkOGMwMDEuLjY0MWIzZTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWpiLXNpbmdsZXRvbi9oZWxsby9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lamItc2luZ2xldG9uL2hlbGxvL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTIgKzQ2LDEyIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJlamItamFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovRm9vKi5jbGFzcywqKi9UZXN0Ki5jbGFzcywqKi9TaW5nbGV0b24qLmNsYXNzLCoqL0hlbGxvKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qYXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC01OSw5ICs1OSw5IEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5fc2UiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuX3NlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgPGphdmEgIGZvcms9Im9uIiAKKyAgICAgICA8amF2YSAgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvYXBwc2Vydi1ydC5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iJHtzZS5jbGllbnR9Ij4KQEAgLTcyLDcgKzcyLDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qYXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWpiLXNpbmdsZXRvbi9oZWxsby9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVqYi1zaW5nbGV0b24vaGVsbG8vY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDBkMDhlOTMuLjU3MDc1MjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWpiLXNpbmdsZXRvbi9oZWxsby9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lamItc2luZ2xldG9uL2hlbGxvL2NsaWVudC9DbGllbnQuamF2YQpAQCAtNTIsNyArNTIsNyBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBoZWxsby50ZXN0RXJyb3IoKTsKICAgICAgICAgICAgICAgICBhZGRTdGF0dXMoIkV4cGVjdGVkIEVKQkV4Y2VwdGlvbiBmcm9tIFNpbmdsZXRvbi50ZXN0RXJyb3IoKSIsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJFeHBlY3RlZCBFSkJFeGNlcHRpb24iKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKEVKQkV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgYWRkU3RhdHVzKCJFeHBlY3RlZCBFSkJFeGNlcHRpb24gZnJvbSBTaW5nbGV0b24udGVzdEVycm9yKCkiLCB0cnVlKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWpiLXNpbmdsZXRvbi9oZWxsby9lamIvRm9vLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVqYi1zaW5nbGV0b24vaGVsbG8vZWpiL0Zvby5qYXZhCmluZGV4IDcwZDhmNGMuLjQwMDg4MjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWpiLXNpbmdsZXRvbi9oZWxsby9lamIvRm9vLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1lamItc2luZ2xldG9uL2hlbGxvL2VqYi9Gb28uamF2YQpAQCAtMjIsNyArMjIsNyBAQAogCiAgICAgQEVKQgogICAgIEhlbGxvIGhlbGxvOwotICAgIAorCiAgICAgQGpha2FydGEuaW5qZWN0LkluamVjdAogICAgIFRlc3RCZWFuIHRiOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLWVqYi1zaW5nbGV0b24vaGVsbG8vZWpiL1NpbmdsZXRvbkJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWpiLXNpbmdsZXRvbi9oZWxsby9lamIvU2luZ2xldG9uQmVhbi5qYXZhCmluZGV4IDYyYjA3MDIuLjQ5MDA0NTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWpiLXNpbmdsZXRvbi9oZWxsby9lamIvU2luZ2xldG9uQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtZWpiLXNpbmdsZXRvbi9oZWxsby9lamIvU2luZ2xldG9uQmVhbi5qYXZhCkBAIC0zNCw3ICszNCw3IEBACiAKICAgICBASW5qZWN0CiAgICAgRm9vIGZvbzsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBUZXN0QmVhbiB0YjsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Itbm9ubnVsbC1wYWNrYWdlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yLW5vbm51bGwtcGFja2FnZS9XZWJUZXN0LmphdmEKaW5kZXggNzZiMjFjOS4uMWYzYTAzOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Itbm9ubnVsbC1wYWNrYWdlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci1ub25udWxsLXBhY2thZ2UvV2ViVGVzdC5qYXZhCkBAIC00Miw3ICs0Miw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEBXZWJTZXJ2bGV0Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTEsNyArNTEsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZCIpOwpAQCAtNjEsNyArNjEsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgICsgIi9teXVybCI7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigib3BlbmluZyBjb25uZWN0aW9uIHRvICIgKyB1cmwpOwpAQCAtMTAwLDEwICsxMDAsMTAgQEAKICAgICAgICAgICAgIGlmIChFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yLW5vbm51bGwtcGFja2FnZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Itbm9ubnVsbC1wYWNrYWdlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYTRkNTA3OC4uZThhOWY2NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Itbm9ubnVsbC1wYWNrYWdlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Itbm9ubnVsbC1wYWNrYWdlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci13aXRoLW5vbi1kZWZhdWx0LXBhY2thZ2VzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci1ub25udWxsLXBhY2thZ2UvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Itbm9ubnVsbC1wYWNrYWdlL2J1aWxkLnhtbAppbmRleCA4M2FkNjY2Li4wNjkxMjEyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci1ub25udWxsLXBhY2thZ2UvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yLW5vbm51bGwtcGFja2FnZS9idWlsZC54bWwKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDcsMjMgKzQ3LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzUsMTAgKzc1LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Itbm9ubnVsbC1wYWNrYWdlL3NlcnZsZXQvY29tL3Rlc3RzL1Rlc3RBcm91bmRJbnZva2VJbnRlcmNlcHRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Itbm9ubnVsbC1wYWNrYWdlL3NlcnZsZXQvY29tL3Rlc3RzL1Rlc3RBcm91bmRJbnZva2VJbnRlcmNlcHRvci5qYXZhCmluZGV4IDU5MDQzMWQuLmQ1ZWViN2MgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yLW5vbm51bGwtcGFja2FnZS9zZXJ2bGV0L2NvbS90ZXN0cy9UZXN0QXJvdW5kSW52b2tlSW50ZXJjZXB0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci1ub25udWxsLXBhY2thZ2Uvc2VydmxldC9jb20vdGVzdHMvVGVzdEFyb3VuZEludm9rZUludGVyY2VwdG9yLmphdmEKQEAgLTI2LDcgKzI2LDcgQEAKICAgICAgICAgYXJvdW5kSW52b2tlQ291bnQgPSAwOwogICAgIH0KIAotICAgQEFyb3VuZEludm9rZSAKKyAgIEBBcm91bmRJbnZva2UKICAgIHB1YmxpYyBPYmplY3QgdGVzdE1ldGhvZChJbnZvY2F0aW9uQ29udGV4dCBjdHgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RBcm91bmRJbnZva2VJbnRlcmNldHByOjogYXJvdW5kSW52b2tlIGNhbGxlZCAtIHRhcmdldDoiICsgY3R4LmdldFRhcmdldCgpICsgIiAsIHBhcmFtczoiKyBjdHguZ2V0UGFyYW1ldGVycygpKTsKICAgICAgICAgYXJvdW5kSW52b2tlQ291bnQgKys7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci1ub25udWxsLXBhY2thZ2Uvc2VydmxldC9jb20vdGVzdHMvVGVzdE1hbmFnZWRCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci1ub25udWxsLXBhY2thZ2Uvc2VydmxldC9jb20vdGVzdHMvVGVzdE1hbmFnZWRCZWFuLmphdmEKaW5kZXggMGM5MzU4My4uNDhiMzNmYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Itbm9ubnVsbC1wYWNrYWdlL3NlcnZsZXQvY29tL3Rlc3RzL1Rlc3RNYW5hZ2VkQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yLW5vbm51bGwtcGFja2FnZS9zZXJ2bGV0L2NvbS90ZXN0cy9UZXN0TWFuYWdlZEJlYW4uamF2YQpAQCAtMTYsNyArMTYsNyBAQAogCiBwYWNrYWdlIGNvbS50ZXN0czsKIAotLy9TaW1wbGUgVGVzdEJlYW4gdG8gdGVzdCBDREkuIAorLy9TaW1wbGUgVGVzdEJlYW4gdG8gdGVzdCBDREkuCiAvL1RoaXMgYmVhbiBpbXBsZW1lbnRzIFNlcmlhbGl6YWJsZSBhcyBpdCBuZWVkcyB0byBiZSBwbGFjZWQgaW50byBhIFN0YXRlZnVsIEJlYW4KIEBqYWthcnRhLmFubm90YXRpb24uTWFuYWdlZEJlYW4KIHB1YmxpYyBjbGFzcyBUZXN0TWFuYWdlZEJlYW4gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Itbm9ubnVsbC1wYWNrYWdlL3NlcnZsZXQvY29tL3Rlc3RzL1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci1ub25udWxsLXBhY2thZ2Uvc2VydmxldC9jb20vdGVzdHMvVGVzdFNlcnZsZXQuamF2YQppbmRleCBlYzM4NDE1Li42M2VjOThhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci1ub25udWxsLXBhY2thZ2Uvc2VydmxldC9jb20vdGVzdHMvVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci1ub25udWxsLXBhY2thZ2Uvc2VydmxldC9jb20vdGVzdHMvVGVzdFNlcnZsZXQuamF2YQpAQCAtNzIsNSArNzIsNSBAQAogICAgICAgICAgICAgZWxzZSByZXR1cm4gIkludGVyY2VwdG9yIGludm9jYXRpb24gY291bnQiICsgY291bnQgKyAiIGludmFsaWQiOwogICAgfQogCi0gCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yL1dlYlRlc3QuamF2YQppbmRleCAzNDNkMTcxLi5hZWIwMTZhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3IvV2ViVGVzdC5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEBXZWJTZXJ2bGV0Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDYsNyArNDYsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZCIpOwpAQCAtNTYsNyArNTYsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgICsgIi9teXVybCI7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigib3BlbmluZyBjb25uZWN0aW9uIHRvICIgKyB1cmwpOwpAQCAtOTUsMTAgKzk1LDEwIEBACiAgICAgICAgICAgICBpZiAoRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3IvYnVpbGQucHJvcGVydGllcwppbmRleCA0ODA5ZTc1Li5lZGQ1ZGEzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3IvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3IvYnVpbGQueG1sCmluZGV4IDgzYWQ2NjYuLjA2OTEyMTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci9idWlsZC54bWwKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDcsMjMgKzQ3LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzUsMTAgKzc1LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Ivc2VydmxldC9UZXN0QXJvdW5kSW52b2tlSW50ZXJjZXB0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yL3NlcnZsZXQvVGVzdEFyb3VuZEludm9rZUludGVyY2VwdG9yLmphdmEKaW5kZXggOThjY2Q0Yy4uNWQyNjMzZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Ivc2VydmxldC9UZXN0QXJvdW5kSW52b2tlSW50ZXJjZXB0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci9zZXJ2bGV0L1Rlc3RBcm91bmRJbnZva2VJbnRlcmNlcHRvci5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiAgICAgICAgIGFyb3VuZEludm9rZUNvdW50ID0gMDsKICAgICB9CiAKLSAgIEBBcm91bmRJbnZva2UgCisgICBAQXJvdW5kSW52b2tlCiAgICBwdWJsaWMgT2JqZWN0IHRlc3RNZXRob2QoSW52b2NhdGlvbkNvbnRleHQgY3R4KSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0QXJvdW5kSW52b2tlSW50ZXJjZXRwcjo6IGFyb3VuZEludm9rZSBjYWxsZWQgLSB0YXJnZXQ6IiArIGN0eC5nZXRUYXJnZXQoKSArICIgLCBwYXJhbXM6IisgY3R4LmdldFBhcmFtZXRlcnMoKSk7CiAgICAgICAgIGFyb3VuZEludm9rZUNvdW50ICsrOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Ivc2VydmxldC9UZXN0TWFuYWdlZEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yL3NlcnZsZXQvVGVzdE1hbmFnZWRCZWFuLmphdmEKaW5kZXggMmEzNmYxMC4uOGFhZjEwMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Ivc2VydmxldC9UZXN0TWFuYWdlZEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci9zZXJ2bGV0L1Rlc3RNYW5hZ2VkQmVhbi5qYXZhCkBAIC0xNCw3ICsxNCw3IEBACiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKICAqLwogCi0vL1NpbXBsZSBUZXN0QmVhbiB0byB0ZXN0IENESS4gCisvL1NpbXBsZSBUZXN0QmVhbiB0byB0ZXN0IENESS4KIC8vVGhpcyBiZWFuIGltcGxlbWVudHMgU2VyaWFsaXphYmxlIGFzIGl0IG5lZWRzIHRvIGJlIHBsYWNlZCBpbnRvIGEgU3RhdGVmdWwgQmVhbgogQGpha2FydGEuYW5ub3RhdGlvbi5NYW5hZ2VkQmVhbgogcHVibGljIGNsYXNzIFRlc3RNYW5hZ2VkQmVhbiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1hbmFnZWQtYmVhbi1pbnRlcmNlcHRvci9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggNjNkODlkYS4uMGQ3ODZjYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tYW5hZ2VkLWJlYW4taW50ZXJjZXB0b3Ivc2VydmxldC9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWFuYWdlZC1iZWFuLWludGVyY2VwdG9yL3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQpAQCAtNjUsOSArNjUsOSBAQAogICAgICAgICBpbnQgY291bnQgPSBUZXN0QXJvdW5kSW52b2tlSW50ZXJjZXB0b3IuYXJvdW5kSW52b2tlQ291bnQ7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdEFyb3VuZEludm9rZUludGVyY2VwdG9yIGNhbGxlZCAiICsgY291bnQgKyAiIHRpbWVzIik7CiAgICAgICAgIFRlc3RBcm91bmRJbnZva2VJbnRlcmNlcHRvci5yZXNldCgpOwotICAgICAgICBpZiAoY291bnQgPT0gMSkgcmV0dXJuICIiOyAKKyAgICAgICAgaWYgKGNvdW50ID09IDEpIHJldHVybiAiIjsKICAgICAgICAgICAgIGVsc2UgcmV0dXJuICJJbnRlcmNlcHRvciBpbnZvY2F0aW9uIGNvdW50IiArIGNvdW50ICsgIiBpbnZhbGlkIjsKICAgIH0KIAotIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1hbmFnZWQtYmVhbi9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1hbmFnZWQtYmVhbi9XZWJUZXN0LmphdmEKaW5kZXggZmY0MGMyYy4uNWY2NWNjNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tYW5hZ2VkLWJlYW4vV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWFuYWdlZC1iZWFuL1dlYlRlc3QuamF2YQpAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBAV2ViU2VydmxldCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKQEAgLTU2LDcgKzU2LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICArICIvbXl1cmwiOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9wZW5pbmcgY29ubmVjdGlvbiB0byAiICsgdXJsKTsKQEAgLTk1LDEwICs5NSwxMCBAQAogICAgICAgICAgICAgaWYgKEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tYW5hZ2VkLWJlYW4vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWFuYWdlZC1iZWFuL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNzEyYmE0YS4uZGI4OTRiNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tYW5hZ2VkLWJlYW4vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1hbmFnZWQtYmVhbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNpbXBsZS1tYW5hZ2VkLWJlYW4iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWFuYWdlZC1iZWFuL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWFuYWdlZC1iZWFuL2J1aWxkLnhtbAppbmRleCA4M2FkNjY2Li4wNjkxMjEyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1hbmFnZWQtYmVhbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tYW5hZ2VkLWJlYW4vYnVpbGQueG1sCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ3LDIzICs0NywyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc1LDEwICs3NSwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWFuYWdlZC1iZWFuL3NlcnZsZXQvVGVzdE1hbmFnZWRCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1hbmFnZWQtYmVhbi9zZXJ2bGV0L1Rlc3RNYW5hZ2VkQmVhbi5qYXZhCmluZGV4IGYzZTU3YWUuLjgzYjNkZmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWFuYWdlZC1iZWFuL3NlcnZsZXQvVGVzdE1hbmFnZWRCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tYW5hZ2VkLWJlYW4vc2VydmxldC9UZXN0TWFuYWdlZEJlYW4uamF2YQpAQCAtMTQsMTMgKzE0LDEzIEBACiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKICAqLwogCi0vL1NpbXBsZSBUZXN0QmVhbiB0byB0ZXN0IENESS4gCisvL1NpbXBsZSBUZXN0QmVhbiB0byB0ZXN0IENESS4KIC8vVGhpcyBiZWFuIGltcGxlbWVudHMgU2VyaWFsaXphYmxlIGFzIGl0IG5lZWRzIHRvIGJlIHBsYWNlZCBpbnRvIGEgU3RhdGVmdWwgQmVhbgogQGpha2FydGEuYW5ub3RhdGlvbi5NYW5hZ2VkQmVhbgogcHVibGljIGNsYXNzIFRlc3RNYW5hZ2VkQmVhbiB7CiAgICAgVGVzdEJlYW4gdGI7CiAgICAgYm9vbGVhbiBwb3N0Q29uc3RydWN0Q2FsbGVkID0gZmFsc2U7Ci0gICAgCisKICAgICBwdWJsaWMgVGVzdE1hbmFnZWRCZWFuKCl7fQogCiAgICAgQGpha2FydGEuaW5qZWN0LkluamVjdCAvL0NvbnN0cnVjdG9yIGJhc2VkIEluamVjdGlvbgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tYW5hZ2VkLWJlYW4vc2VydmxldC9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tYW5hZ2VkLWJlYW4vc2VydmxldC9UZXN0U2VydmxldC5qYXZhCmluZGV4IDgxODBjNGYuLmM2MWFlN2MgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWFuYWdlZC1iZWFuL3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1hbmFnZWQtYmVhbi9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTU0LDUgKzU0LDUgQEAKICAgICAgICAgaWYgKHRiICE9IG51bGwgJiYgIXRiLnRlc3RJbmplY3Rpb24oKSkgbXNnICs9IGluZm8gKyAiQmVhbiBJbmplY3Rpb24gaW50byBNYW5hZ2VkQmVhbiBmYWlsZWQiOwogICAgICAgICByZXR1cm4gbXNnOwogICAgIH0KLSAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tZGIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWRiL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZDY0ODQ4ZS4uMTI4ZGFlNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tZGIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1kYi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMyArMTUsMjMgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaS1oZWxsby1tZGIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0ic2ltcGxlLmNsaWVudCIgdmFsdWU9ImNvbS5zdW4uczFhc2Rldi5jZGkuaGVsbG8ubWRiLmNsaWVudC5DbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImJlYW5zLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYmVhbnMueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1kYi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1kYi9idWlsZC54bWwKaW5kZXggMmRkMjUzYy4uMDg4YTUwMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tZGIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWRiL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTQgKzQ2LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQmVhbiouY2xhc3MsKiovKkhlbGxvKiIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImNyZWF0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtNzcsMjAgKzc3LDIwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bl9zdGFuZGFsb25lY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgPGphdmEgIGZvcms9Im9uIiAKKyAgICAgICA8amF2YSAgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9tb2R1bGVzL2pha2FydGEuam1zLWFwaS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSIke3NpbXBsZS5jbGllbnR9Ij4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tZGIvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tZGIvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDgxNjczODguLjkzYWFkNjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWRiL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1kYi9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTQyLDcgKzQyLDcgQEAKICAgICB9CiAKIAotICAgIEBSZXNvdXJjZShuYW1lPSJGb29DRiIsIG1hcHBlZE5hbWU9Imptcy9jZGlfaGVsbG9fbWRiX1FDRiIpIAorICAgIEBSZXNvdXJjZShuYW1lPSJGb29DRiIsIG1hcHBlZE5hbWU9Imptcy9jZGlfaGVsbG9fbWRiX1FDRiIpCiAgICAgcHJpdmF0ZSBzdGF0aWMgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxdWV1ZUNvbkZhY3Rvcnk7CiAKICAgICBAUmVzb3VyY2UobmFtZT0iTXNnQmVhblF1ZXVlIiwgbWFwcGVkTmFtZT0iam1zL2NkaV9oZWxsb19tZGJfSW5RdWV1ZSIpCkBAIC01OSw3ICs1OSw3IEBACiAKICAgICBwcml2YXRlIGludCBudW1NZXNzYWdlcyA9IDI7CiAgICAgcHVibGljIENsaWVudChTdHJpbmdbXSBhcmdzKSB7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKCBhcmdzLmxlbmd0aCA9PSAxICkgewogICAgICAgICAgICAgbnVtTWVzc2FnZXMgPSBuZXcgSW50ZWdlcihhcmdzWzBdKS5pbnRWYWx1ZSgpOwogICAgICAgICB9CkBAIC02OCwxNSArNjgsMTUgQEAKIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKICAgICAgICAgdHJ5IHsKLQkgICAgaWYoIHF1ZXVlQ29uRmFjdG9yeSA9PSBudWxsICkgeworICAgICAgICBpZiggcXVldWVDb25GYWN0b3J5ID09IG51bGwgKSB7CiAKLQkJU3lzdGVtLm91dC5wcmludGxuKCJKYXZhIFNFIG1vZGUuLi4iKTsKLQkJSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkJcXVldWVDb25GYWN0b3J5ID0gKGpha2FydGEuam1zLlF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkpIGljLmxvb2t1cCgiam1zL2NkaV9oZWxsb19tZGJfUUNGIik7Ci0JCW1zZ0JlYW5RdWV1ZSA9IChqYWthcnRhLmptcy5RdWV1ZSkgaWMubG9va3VwKCJqbXMvY2RpX2hlbGxvX21kYl9JblF1ZXVlIik7Ci0JCWNsaWVudFF1ZXVlID0gKGpha2FydGEuam1zLlF1ZXVlKSBpYy5sb29rdXAoImptcy9jZGlfaGVsbG9fbWRiX091dFF1ZXVlIik7Ci0JCQotCSAgICB9CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSmF2YSBTRSBtb2RlLi4uIik7CisgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgIHF1ZXVlQ29uRmFjdG9yeSA9IChqYWthcnRhLmptcy5RdWV1ZUNvbm5lY3Rpb25GYWN0b3J5KSBpYy5sb29rdXAoImptcy9jZGlfaGVsbG9fbWRiX1FDRiIpOworICAgICAgICBtc2dCZWFuUXVldWUgPSAoamFrYXJ0YS5qbXMuUXVldWUpIGljLmxvb2t1cCgiam1zL2NkaV9oZWxsb19tZGJfSW5RdWV1ZSIpOworICAgICAgICBjbGllbnRRdWV1ZSA9IChqYWthcnRhLmptcy5RdWV1ZSkgaWMubG9va3VwKCJqbXMvY2RpX2hlbGxvX21kYl9PdXRRdWV1ZSIpOworCisgICAgICAgIH0KIAogICAgICAgICAgICAgc2V0dXAoKTsKICAgICAgICAgICAgIGRvVGVzdChudW1NZXNzYWdlcyk7CkBAIC05MCwxNCArOTAsMTQgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXR1cCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBxdWV1ZUNvbiA9IHF1ZXVlQ29uRmFjdG9yeS5jcmVhdGVRdWV1ZUNvbm5lY3Rpb24oKTsKIAogICAgICAgICBxdWV1ZVNlc3Npb24gPSBxdWV1ZUNvbi5jcmVhdGVRdWV1ZVNlc3Npb24KLSAgICAgICAgICAgIChmYWxzZSwgU2Vzc2lvbi5BVVRPX0FDS05PV0xFREdFKTsgCisgICAgICAgICAgICAoZmFsc2UsIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSk7CiAKICAgICAgICAgLy8gUHJvZHVjZXIgd2lsbCBiZSBzcGVjaWZpZWQgd2hlbiBhY3R1YWwgbXNnIGlzIHNlbnQuCi0gICAgICAgIHF1ZXVlU2VuZGVyID0gcXVldWVTZXNzaW9uLmNyZWF0ZVNlbmRlcihudWxsKTsgICAgICAgIAorICAgICAgICBxdWV1ZVNlbmRlciA9IHF1ZXVlU2Vzc2lvbi5jcmVhdGVTZW5kZXIobnVsbCk7CiAKICAgICAgICAgcXVldWVSZWNlaXZlciA9IHF1ZXVlU2Vzc2lvbi5jcmVhdGVSZWNlaXZlcihjbGllbnRRdWV1ZSk7CiAKQEAgLTExNSwxOCArMTE1LDE4IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBzZW5kTXNncyhqYWthcnRhLmptcy5RdWV1ZSBxdWV1ZSwgTWVzc2FnZSBtc2csIGludCBudW0pIAorICAgIHB1YmxpYyB2b2lkIHNlbmRNc2dzKGpha2FydGEuam1zLlF1ZXVlIHF1ZXVlLCBNZXNzYWdlIG1zZywgaW50IG51bSkKICAgICAgICAgdGhyb3dzIEpNU0V4Y2VwdGlvbiB7CiAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW07IGkrKykgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZW5kaW5nIG1lc3NhZ2UgIiArIGkgKyAiIHRvICIgKyBxdWV1ZSArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZW5kaW5nIG1lc3NhZ2UgIiArIGkgKyAiIHRvICIgKyBxdWV1ZSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBhdCB0aW1lICIgKyBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSk7CiAgICAgICAgICAgICBxdWV1ZVNlbmRlci5zZW5kKHF1ZXVlLCBtc2cpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZW50IG1lc3NhZ2UgIiArIGkgKyAiIHRvICIgKyBxdWV1ZSArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZW50IG1lc3NhZ2UgIiArIGkgKyAiIHRvICIgKyBxdWV1ZSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBhdCB0aW1lICIgKyBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoaW50IG51bSkgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KGludCBudW0pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogCiAgICAgICAgIERlc3RpbmF0aW9uIGRlc3QgPSBtc2dCZWFuUXVldWU7CkBAIC0xNDAsNyArMTQwLDcgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXYWl0aW5nIGZvciBxdWV1ZSBtZXNzYWdlIik7CiAgICAgICAgIE1lc3NhZ2UgcmVjdmRtZXNzYWdlID0gcXVldWVSZWNlaXZlci5yZWNlaXZlKFRJTUVPVVQpOwogICAgICAgICBpZiggcmVjdmRtZXNzYWdlICE9IG51bGwgKSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlY2VpdmVkIG1lc3NhZ2UgOiAiICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlY2VpdmVkIG1lc3NhZ2UgOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUZXh0TWVzc2FnZSlyZWN2ZG1lc3NhZ2UpLmdldFRleHQoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRpbWVvdXQgYWZ0ZXIgIiArIFRJTUVPVVQgKyAiIHNlY29uZHMiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWRiL2VqYi9IZWxsbzEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWRiL2VqYi9IZWxsbzEuamF2YQppbmRleCA1NWYxZDlmLi5iZTYxOTE2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1kYi9lamIvSGVsbG8xLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tZGIvZWpiL0hlbGxvMS5qYXZhCkBAIC0xOSw1ICsxOSw1IEBACiBwdWJsaWMgaW50ZXJmYWNlIEhlbGxvMSB7CiAKICAgICBwdWJsaWMgdm9pZCBoZWxsbyhTdHJpbmcgcyk7Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWRiL2VqYi9IZWxsb1N0YXRlZnVsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1kYi9lamIvSGVsbG9TdGF0ZWZ1bC5qYXZhCmluZGV4IDE3NzA5YTkuLmUzZjk5YjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWRiL2VqYi9IZWxsb1N0YXRlZnVsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tZGIvZWpiL0hlbGxvU3RhdGVmdWwuamF2YQpAQCAtMzgsNyArMzgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnKTsKICAgICB9CiAgICAgQFByZURlc3Ryb3kgcHVibGljIHZvaWQgbXlQcmVEZXN0cm95TWV0aG9kKCkgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBSRS1ERVNUUk9ZIGNhbGxiYWNrIHJlY2VpdmVkIGluICIgKyBtc2cpOyAgICAgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUFJFLURFU1RST1kgY2FsbGJhY2sgcmVjZWl2ZWQgaW4gIiArIG1zZyk7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1kYi9lamIvSGVsbG9TdGF0ZWxlc3MuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWRiL2VqYi9IZWxsb1N0YXRlbGVzcy5qYXZhCmluZGV4IDY3NDc2NDguLjQ3ZmQ1NDIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWRiL2VqYi9IZWxsb1N0YXRlbGVzcy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWRiL2VqYi9IZWxsb1N0YXRlbGVzcy5qYXZhCkBAIC0yMSw3ICsyMSw3IEBACiAvLyBIZWxsbzEgaW50ZXJmYWNlIGlzIG5vdCBhbm5vdGF0ZWQgd2l0aCBATG9jYWwuIElmIHRoZQogLy8gYmVhbiBvbmx5IGltcGxlbWVudHMgb25lIGludGVyZmFjZSBpdCBpcyBhc3N1bWVkIHRvIGJlCiAvLyBhIGxvY2FsIGJ1c2luZXNzIGludGVyZmFjZS4KLUBTdGF0ZWxlc3MoZGVzY3JpcHRpb249Im15IHN0YXRlbGVzcyBiZWFuIGRlc2NyaXB0aW9uIikgCitAU3RhdGVsZXNzKGRlc2NyaXB0aW9uPSJteSBzdGF0ZWxlc3MgYmVhbiBkZXNjcmlwdGlvbiIpCiBwdWJsaWMgY2xhc3MgSGVsbG9TdGF0ZWxlc3MgaW1wbGVtZW50cyBIZWxsbzEgewogCiAgICAgcHVibGljIHZvaWQgaGVsbG8oU3RyaW5nIHMpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtbWRiL2VqYi9NZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tZGIvZWpiL01lc3NhZ2VCZWFuLmphdmEKaW5kZXggNmU5YmFjMC4uMTlkZmI1MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tZGIvZWpiL01lc3NhZ2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tZGIvZWpiL01lc3NhZ2VCZWFuLmphdmEKQEAgLTQzLDggKzQzLDggQEAKICAgICBARUpCIHByaXZhdGUgSGVsbG8xIGhlbGxvMTsKICAgICBARUpCIHByaXZhdGUgSGVsbG8yIGhlbGxvMjsKIAotICAgIEBSZXNvdXJjZShuYW1lPSJqbXMvTXlRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IiwgCi0gICAgICAgICAgICAgIG1hcHBlZE5hbWU9Imptcy9jZGlfaGVsbG9fbWRiX1FDRiIpIAorICAgIEBSZXNvdXJjZShuYW1lPSJqbXMvTXlRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IiwKKyAgICAgICAgICAgICAgbWFwcGVkTmFtZT0iam1zL2NkaV9oZWxsb19tZGJfUUNGIikKICAgICBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHFjRmFjdG9yeTsKIAogICAgIEBSZXNvdXJjZShtYXBwZWROYW1lPSJqbXMvY2RpX2hlbGxvX21kYl9PdXRRdWV1ZSIpIFF1ZXVlIGNsaWVudFF1ZXVlOwpAQCAtNTcsNyArNTcsNyBAQAogCiAgICAgICAgIFF1ZXVlQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gbnVsbDsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxpbmcgaGVsbG8xIHN0YXRlbGVzcyBiZWFuIik7CiAgICAgICAgICAgICBoZWxsbzEuaGVsbG8oImxvY2FsIGVqYjMuMCBzdGF0ZWxlc3MiKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbGluZyBoZWxsbzIgc3RhdGVmdWwgYmVhbiIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS1tZGIvZWpiL1Rlc3RCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1kYi9lamIvVGVzdEJlYW4uamF2YQppbmRleCAwZGQ0MTAyLi4xZmJjMDcwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1kYi9lamIvVGVzdEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLW1kYi9lamIvVGVzdEJlYW4uamF2YQpAQCAtMTgsNiArMTgsNiBAQAogCiAKIAotLy9TaW1wbGUgVGVzdEJlYW4gdG8gdGVzdCBDREkuIAorLy9TaW1wbGUgVGVzdEJlYW4gdG8gdGVzdCBDREkuCiBwdWJsaWMgY2xhc3MgVGVzdEJlYW4KIHt9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLXdhYi13aXRoLWNkaS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLXdhYi13aXRoLWNkaS9XZWJUZXN0LmphdmEKaW5kZXggMDljZGZjYS4uNzVkYTNkYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS13YWItd2l0aC1jZGkvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtd2FiLXdpdGgtY2RpL1dlYlRlc3QuamF2YQpAQCAtNDIsNyArNDIsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBAV2ViU2VydmxldCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTUxLDcgKzUxLDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKQEAgLTYxLDcgKzYxLDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFRocmVhZC5zbGVlcCgyMDAwKTsgLy9XT1JLQVJPVU5EIEBYWFgKICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3Q7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigib3BlbmluZyBjb25uZWN0aW9uIHRvICIgKyB1cmwpOwpAQCAtMTAwLDEwICsxMDAsMTAgQEAKICAgICAgICAgICAgIGlmIChFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtd2FiLXdpdGgtY2RpL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLXdhYi13aXRoLWNkaS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDM4ZDk3YmQuLjBmOGFkZjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtd2FiLXdpdGgtY2RpL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS13YWItd2l0aC1jZGkvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS13YWIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtd2FiLXdpdGgtY2RpL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtd2FiLXdpdGgtY2RpL2J1aWxkLnhtbAppbmRleCBhMjc2Y2RhLi4zYWU2MmY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLXdhYi13aXRoLWNkaS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS13YWItd2l0aC1jZGkvYnVpbGQueG1sCkBAIC00Miw3ICs0Miw3IEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTUwLDIzICs1MCwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FiLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YWItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8c2xlZXAgc2Vjb25kcz0iMjUiLz4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KQEAgLTc5LDEwICs3OSwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtd2FiLXdpdGgtY2RpL2NvbW1vbi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLXdhYi13aXRoLWNkaS9jb21tb24ueG1sCmluZGV4IGYzNDJkODcuLjkyZjU1ZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtd2FiLXdpdGgtY2RpL2NvbW1vbi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS13YWItd2l0aC1jZGkvY29tbW9uLnhtbApAQCAtMTcsMjQgKzE3LDI0IEBACiAtLT4KIAogPCEtLQotICAgIFRoaXMgaXMgdGhlIHRvcCBsZXZlbCBidWlsZCBmaWxlIHRoYXQgc2hvdWxkIGJlIAotICAgIGltcG9ydGVkIGludG8gYWxsIHRoZSBsZWFmIGxldmVsIGJ1aWxkIGZpbGVzIAorICAgIFRoaXMgaXMgdGhlIHRvcCBsZXZlbCBidWlsZCBmaWxlIHRoYXQgc2hvdWxkIGJlCisgICAgaW1wb3J0ZWQgaW50byBhbGwgdGhlIGxlYWYgbGV2ZWwgYnVpbGQgZmlsZXMKIC0tPgogCiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8IS0tIFRhcmdldHMgdG8gY2xlYW4gY2xhc3MgZmlsZXMgYW5kIGphcnMgZmlsZXMgLS0+Ci08IS0tIAotVmFyaWFibGVzIHVzZWQ6IAotICAgICR7YnVpbGQuY2xhc3Nlcy5kaXJ9IAorPCEtLQorVmFyaWFibGVzIHVzZWQ6CisgICAgJHtidWlsZC5jbGFzc2VzLmRpcn0KICAgICAke2Fzc2VtYmxlLmRpcn0KIC0tPgogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPHRhcmdldCBuYW1lPSJjbGVhbi1jbGFzc2VzLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgIDxlY2hvIG1lc3NhZ2U9ImNvbW1vbi54bWw6IENsZWFuaW5nIHRlc3Qgc291cmNlIGZpbGVzOiAke2J1aWxkLmJhc2UuZGlyfSIgCisgICAgPGVjaG8gbWVzc2FnZT0iY29tbW9uLnhtbDogQ2xlYW5pbmcgdGVzdCBzb3VyY2UgZmlsZXM6ICR7YnVpbGQuYmFzZS5kaXJ9IgogICAgICAgICBsZXZlbD0idmVyYm9zZSIvPgogICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5iYXNlLmRpcn0iLz4KIDwvdGFyZ2V0PgotICAgIAorCiA8dGFyZ2V0IG5hbWU9ImNsZWFuLWphcnMtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgIDxkZWxldGUgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KIDwvdGFyZ2V0PgpAQCAtNDYsOSArNDYsOSBAQAogCiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8IS0tIFRhcmdldCB0byBjb21waWxlIHRoZSBqYXZhIHNvdXJjZSBmaWxlcyAtLT4KLTwhLS0gCi1WYXJpYWJsZXMgdXNlZDogCi0gICAgJHtidWlsZC5jbGFzc2VzLmRpcn0gCis8IS0tCitWYXJpYWJsZXMgdXNlZDoKKyAgICAke2J1aWxkLmNsYXNzZXMuZGlyfQogICAgICR7czFhc3Rlc3QuY2xhc3NwYXRofQogICAgICR7c3JjfQogLS0+CkBAIC03NSw3ICs3NSw3IEBACiBWYXJpYWJsZXMgVXNlZDoKICAgICAke3dhci5maWxlfQogICAgICR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ci0gICAgJHthcHBuYW1lfSAgICAKKyAgICAke2FwcG5hbWV9CiAgICAgJHthc3NlbWJsZS5kaXJ9CiAgICAgJHt3ZWIueG1sfQogICAgICR7YmVhbnMueG1sfQpAQCAtMTA2LDE3ICsxMDYsMTcgQEAKIAogPHRhcmdldCBuYW1lPSJwdWJsaXNoLXdhci1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgPG1rZGlyIGRpcj0iJHtidWlsZC53ZWJhcHBzLmRpcn0iLz4KLSAgPGNvcHkgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciIgCi0gICAgICAgIHRvZmlsZT0iJHtidWlsZC53ZWJhcHBzLmRpcn0vJHthcHBuYW1lfS53YXIiIAorICA8Y29weSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIgorICAgICAgICB0b2ZpbGU9IiR7YnVpbGQud2ViYXBwcy5kaXJ9LyR7YXBwbmFtZX0ud2FyIgogICAgICAgICBvdmVyd3JpdGU9InRydWUiIC8+CiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJjbGVhbi13ZWJhcHBzLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLndlYmFwcHMuZGlyfSIgcXVpZXQ9InRydWUiIC8+ICAKKyAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC53ZWJhcHBzLmRpcn0iIHF1aWV0PSJ0cnVlIiAvPgogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0iY2xlYXIiPgotICAgIDxkZWxldGUgZmlsZT0iJHt3YXIuZmlsZX0iLz4gIAorICAgIDxkZWxldGUgZmlsZT0iJHt3YXIuZmlsZX0iLz4KIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImNvcHktdGxkcyIgaWY9InRsZHMtZXhpc3QiIGRlcGVuZHM9ImNsZWFyLHRlc3QtdGxkcy1leGlzdCI+CkBAIC0xNDUsMTMgKzE0NSwxMyBAQAogICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi9jbGFzc2VzIi8+CiAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL2xpYiIvPgogICA8bWtkaXIgZGlyPSJsaWIiLz4KLSAgPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtd2ViLnhtbH0iIAorICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC13ZWIueG1sfSIKICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvZ2xhc3NmaXNoLXdlYi54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICA8Y29weSBmaWxlPSIke3N1bi13ZWIueG1sfSIgCisgIDxjb3B5IGZpbGU9IiR7c3VuLXdlYi54bWx9IgogICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi9zdW4td2ViLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gIDxjb3B5IGZpbGU9IiR7d2VibG9naWMueG1sfSIgCisgIDxjb3B5IGZpbGU9IiR7d2VibG9naWMueG1sfSIKICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvd2VibG9naWMueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbH0iIAorICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sfSIKICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvbGliIiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgICAgPGZpbGVzZXQgZGlyPSJsaWIiPgpAQCAtMTU5LDMyICsxNTksMzIgQEAKICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLnppcCIvPgogICAgICAgPC9maWxlc2V0PgogICA8L2NvcHk+Ci0gIDxjb3B5IGZpbGU9IiR7d2Vic2VydmljZXMueG1sfSIgCisgIDxjb3B5IGZpbGU9IiR7d2Vic2VydmljZXMueG1sfSIKICAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi93ZWJzZXJ2aWNlcy54bWwiCiAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICA8Y29weSBmaWxlPSIke21hcHBpbmdmaWxlLmxvY2F0aW9ufS8ke21hcHBpbmdmaWxlLm5hbWV9IiAKKyAgPGNvcHkgZmlsZT0iJHttYXBwaW5nZmlsZS5sb2NhdGlvbn0vJHttYXBwaW5nZmlsZS5uYW1lfSIKICAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvJHttYXBwaW5nZmlsZS5uYW1lfSIKICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gIDxjb3B5IGZpbGU9IiR7d3NkbGZpbGUubG9jYXRpb259LyR7d3NkbGZpbGUubmFtZX0iIAorICA8Y29weSBmaWxlPSIke3dzZGxmaWxlLmxvY2F0aW9ufS8ke3dzZGxmaWxlLm5hbWV9IgogICAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL3dzZGwvJHt3c2RsZmlsZS5uYW1lfSIKICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gIDxjb3B5IGZpbGU9IiR7dGFnUGx1Z2lucy54bWx9IiAKKyAgPGNvcHkgZmlsZT0iJHt0YWdQbHVnaW5zLnhtbH0iCiAgICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvdGFnUGx1Z2lucy54bWwiCiAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICA8Y29weSBmaWxlPSIke3dlYi54bWx9IiAKKyAgPGNvcHkgZmlsZT0iJHt3ZWIueG1sfSIKICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvd2ViLnhtbCIKICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gICAgPGNvcHkgZmlsZT0iJHtwZXJzaXN0ZW5jZS54bWx9IiAKKyAgICA8Y29weSBmaWxlPSIke3BlcnNpc3RlbmNlLnhtbH0iCiAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL2NsYXNzZXMvTUVUQS1JTkYvcGVyc2lzdGVuY2UueG1sIgogICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgIDxjb3B5IGZpbGU9IiR7YmVhbnMueG1sfSIgCisgICA8Y29weSBmaWxlPSIke2JlYW5zLnhtbH0iCiAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL2JlYW5zLnhtbCIKICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgIDxjb3B5IGZpbGU9IiR7Y29udGV4dC54bWx9IgogICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvTUVUQS1JTkYvY29udGV4dC54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICA8Y29weSBmaWxlPSIke2NkaS1leHRlbnNpb24uc2VydmljZX0iCiAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL2NsYXNzZXMvTUVUQS1JTkYvc2VydmljZXMvamFrYXJ0YS5lbnRlcnByaXNlLmluamVjdC5zcGkuRXh0ZW5zaW9uIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgICAgIAorCiAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi9jbGFzc2VzIj4KICAgICAgIDxmaWxlc2V0IGRpcj0iJHt3YXIuY2xhc3Nlc30iPgogICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqLyouY2xhc3MiLz4KQEAgLTIyOSwxMCArMjI5LDEwIEBACiAgICAgICA8aW5jbHVkZSBuYW1lPSJXRUItSU5GL2NsYXNzZXMvTUVUQS1JTkYvc2VydmljZXMvamFrYXJ0YS5lbnRlcnByaXNlLmluamVjdC5zcGkuRXh0ZW5zaW9uIi8+CiAgICAgICA8aW5jbHVkZSBuYW1lPSJXRUItSU5GL2NsYXNzZXMvTUVUQS1JTkYvcGVyc2lzdGVuY2UueG1sIi8+CiAgICAgPC9maWxlc2V0PgotICA8L2phcj4gICAgICAgCisgIDwvamFyPgogICA8ZWNobyBtZXNzYWdlPSJjcmVhdGVkIHdhciBmaWxlICR7d2FyLmZpbGV9IiBsZXZlbD0idmVyYm9zZSIvPgotICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYiIGZhaWxvbmVycm9yPSJmYWxzZSIvPiAKLSAgPGVjaG8gbWVzc2FnZT0ibXkgd2ViY2xpZW50IHdhciBjbGFzc2VzIGFyZToke3dlYmNsaWVudC53YXIuY2xhc3Nlc30iIAorICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICA8ZWNobyBtZXNzYWdlPSJteSB3ZWJjbGllbnQgd2FyIGNsYXNzZXMgYXJlOiR7d2ViY2xpZW50Lndhci5jbGFzc2VzfSIKICAgICAgIGxldmVsPSJ2ZXJib3NlIi8+CiA8L3RhcmdldD4KIApAQCAtMjQ0LDEzICsyNDQsMTMgQEAKICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvbGliIi8+CiAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL01FVEEtSU5GIi8+CiAgIDxta2RpciBkaXI9ImxpYiIvPgotICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC13ZWIueG1sfSIgCisgIDxjb3B5IGZpbGU9IiR7Z2xhc3NmaXNoLXdlYi54bWx9IgogICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi9nbGFzc2Zpc2gtd2ViLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gIDxjb3B5IGZpbGU9IiR7c3VuLXdlYi54bWx9IiAKKyAgPGNvcHkgZmlsZT0iJHtzdW4td2ViLnhtbH0iCiAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL3N1bi13ZWIueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgPGNvcHkgZmlsZT0iJHt3ZWJsb2dpYy54bWx9IiAKKyAgPGNvcHkgZmlsZT0iJHt3ZWJsb2dpYy54bWx9IgogICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi93ZWJsb2dpYy54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sfSIgCisgIDxjb3B5IGZpbGU9IiR7Z2xhc3NmaXNoLXJlc291cmNlcy54bWx9IgogICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi9saWIiIGZhaWxvbmVycm9yPSJmYWxzZSI+CiAgICAgICA8ZmlsZXNldCBkaXI9ImxpYiI+CkBAIC0yNTgsMzYgKzI1OCwzNiBAQAogICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqLyouemlwIi8+CiAgICAgICA8L2ZpbGVzZXQ+CiAgIDwvY29weT4KLSAgPGNvcHkgZmlsZT0iJHt3ZWJzZXJ2aWNlcy54bWx9IiAKKyAgPGNvcHkgZmlsZT0iJHt3ZWJzZXJ2aWNlcy54bWx9IgogICAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL3dlYnNlcnZpY2VzLnhtbCIKICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gIDxjb3B5IGZpbGU9IiR7bWFwcGluZ2ZpbGUubG9jYXRpb259LyR7bWFwcGluZ2ZpbGUubmFtZX0iIAorICA8Y29weSBmaWxlPSIke21hcHBpbmdmaWxlLmxvY2F0aW9ufS8ke21hcHBpbmdmaWxlLm5hbWV9IgogICAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC8ke21hcHBpbmdmaWxlLm5hbWV9IgogICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgPGNvcHkgZmlsZT0iJHt3c2RsZmlsZS5sb2NhdGlvbn0vJHt3c2RsZmlsZS5uYW1lfSIgCisgIDxjb3B5IGZpbGU9IiR7d3NkbGZpbGUubG9jYXRpb259LyR7d3NkbGZpbGUubmFtZX0iCiAgICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvd3NkbC8ke3dzZGxmaWxlLm5hbWV9IgogICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgPGNvcHkgZmlsZT0iJHt0YWdQbHVnaW5zLnhtbH0iIAorICA8Y29weSBmaWxlPSIke3RhZ1BsdWdpbnMueG1sfSIKICAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi90YWdQbHVnaW5zLnhtbCIKICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gIDxjb3B5IGZpbGU9IiR7d2ViLnhtbH0iIAorICA8Y29weSBmaWxlPSIke3dlYi54bWx9IgogICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi93ZWIueG1sIgogICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgICA8Y29weSBmaWxlPSIke3BlcnNpc3RlbmNlLnhtbH0iIAorICAgIDxjb3B5IGZpbGU9IiR7cGVyc2lzdGVuY2UueG1sfSIKICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvY2xhc3Nlcy9NRVRBLUlORi9wZXJzaXN0ZW5jZS54bWwiCiAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICAgPGNvcHkgZmlsZT0iJHtiZWFucy54bWx9IiAKKyAgIDxjb3B5IGZpbGU9IiR7YmVhbnMueG1sfSIKICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvYmVhbnMueG1sIgogICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KIAotICAgPGNvcHkgZmlsZT0iJHtidW5kbGUuZGVzY3JpcHRvcn0iIAorICAgPGNvcHkgZmlsZT0iJHtidW5kbGUuZGVzY3JpcHRvcn0iCiAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL2NsYXNzZXMvTUVUQS1JTkYvTUFOSUZFU1QuTUYiCiAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICA8Y29weSBmaWxlPSIke2NvbnRleHQueG1sfSIKICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL01FVEEtSU5GL2NvbnRleHQueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgPGNvcHkgZmlsZT0iJHtjZGktZXh0ZW5zaW9uLnNlcnZpY2V9IgogICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi9jbGFzc2VzL01FVEEtSU5GL3NlcnZpY2VzL2pha2FydGEuZW50ZXJwcmlzZS5pbmplY3Quc3BpLkV4dGVuc2lvbiIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gICAgICAKKwogICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvY2xhc3NlcyI+CiAgICAgICA8ZmlsZXNldCBkaXI9IiR7d2FyLmNsYXNzZXN9Ij4KICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLmNsYXNzIi8+CkBAIC0zMzIsMTAgKzMzMiwxMCBAQAogICAgICAgPGluY2x1ZGUgbmFtZT0iV0VCLUlORi9jbGFzc2VzL01FVEEtSU5GL3NlcnZpY2VzL2pha2FydGEuZW50ZXJwcmlzZS5pbmplY3Quc3BpLkV4dGVuc2lvbiIvPgogICAgICAgPGluY2x1ZGUgbmFtZT0iV0VCLUlORi9jbGFzc2VzL01FVEEtSU5GL3BlcnNpc3RlbmNlLnhtbCIvPgogICAgIDwvZmlsZXNldD4KLSAgPC9qYXI+ICAgICAgIAorICA8L2phcj4KICAgPGVjaG8gbWVzc2FnZT0iY3JlYXRlZCBXQUIgZmlsZSAke3dhci5maWxlfSIgbGV2ZWw9InZlcmJvc2UiLz4KLSAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4gCi0gIDxlY2hvIG1lc3NhZ2U9Im15IHdlYmNsaWVudCBXQUIgY2xhc3NlcyBhcmU6JHt3ZWJjbGllbnQud2FyLmNsYXNzZXN9IiAKKyAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KKyAgPGVjaG8gbWVzc2FnZT0ibXkgd2ViY2xpZW50IFdBQiBjbGFzc2VzIGFyZToke3dlYmNsaWVudC53YXIuY2xhc3Nlc30iCiAgICAgICBsZXZlbD0idmVyYm9zZSIvPgogPC90YXJnZXQ+CiAKQEAgLTM1NCwzNSArMzU0LDM1IEBACiBWYXJpYWJsZXMgVXNlZDoKICAgICAke2VqYi5qYXJ9CiAgICAgJHtidWlsZC5jbGFzc2VzLmRpcn0KLSAgICAke2VqYi1qYXIueG1sfSAgICAKKyAgICAke2VqYi1qYXIueG1sfQogICAgICR7YmVhbnMueG1sfQotICAgICR7cGVyc2lzdGVuY2Utb3JtLnhtbH0gICAgCi0gICAgJHtzdW4tZWpiLWphci54bWx9ICAgIAotICAgICR7Z2xhc3NmaXNoLWVqYi1qYXIueG1sfSAgICAKLSAgICAke3N1bi1jbXAtbWFwcGluZ3MueG1sfSAgICAKLSAgICAke21ldGFpbmYuZGlyfSAgICAKKyAgICAke3BlcnNpc3RlbmNlLW9ybS54bWx9CisgICAgJHtzdW4tZWpiLWphci54bWx9CisgICAgJHtnbGFzc2Zpc2gtZWpiLWphci54bWx9CisgICAgJHtzdW4tY21wLW1hcHBpbmdzLnhtbH0KKyAgICAke21ldGFpbmYuZGlyfQogICAgICR7ZWpiamFyLmZpbGVzfQogICAgICR7ZGJzY2hlbWF9CiAtLT4KIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIDx0YXJnZXQgbmFtZT0icGFja2FnZS1lamJqYXItY29tbW9uIj4KICAgPGRlbGV0ZSBmaWxlPSIke2VqYi5qYXJ9Ii8+Ci0gIDxlY2hvIG1lc3NhZ2U9ImNvbW1vbi54bWw6IEdlbmVyYXRpbmcgZWpiLWphciBpbnNpZGUgYnVpbGQgZGlyZWN0b3J5IiAKKyAgPGVjaG8gbWVzc2FnZT0iY29tbW9uLnhtbDogR2VuZXJhdGluZyBlamItamFyIGluc2lkZSBidWlsZCBkaXJlY3RvcnkiCiAgICAgICBsZXZlbD0idmVyYm9zZSIvPgogICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgotICA8Y29weSBmaWxlPSIke2VqYi1qYXIueG1sfSIgCisgIDxjb3B5IGZpbGU9IiR7ZWpiLWphci54bWx9IgogICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvZWpiLWphci54bWwiCiAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gIDxjb3B5IGZpbGU9IiR7cGVyc2lzdGVuY2Utb3JtLnhtbH0iIAorICA8Y29weSBmaWxlPSIke3BlcnNpc3RlbmNlLW9ybS54bWx9IgogICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvcGVyc2lzdGVuY2Utb3JtLnhtbCIKICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgPGNvcHkgZmlsZT0iJHt3ZWJzZXJ2aWNlcy54bWx9IiAKKyAgPGNvcHkgZmlsZT0iJHt3ZWJzZXJ2aWNlcy54bWx9IgogICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvd2Vic2VydmljZXMueG1sIgogICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICA8Y29weSBmaWxlPSIke3N1bi1lamItamFyLnhtbH0iIAorICA8Y29weSBmaWxlPSIke3N1bi1lamItamFyLnhtbH0iCiAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tZWpiLWphci54bWwiCiAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gIDxjb3B5IGZpbGU9IiR7Z2xhc3NmaXNoLWVqYi1qYXIueG1sfSIgCisgIDxjb3B5IGZpbGU9IiR7Z2xhc3NmaXNoLWVqYi1qYXIueG1sfSIKICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2dsYXNzZmlzaC1lamItamFyLnhtbCIKICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbH0iCkBAIC00MDcsNDIgKzQwNyw0MiBAQAogICAgICAgPGluY2x1ZGUgbmFtZT0ic3VuLWNtcC1tYXBwaW5ncy54bWwiLz4KICAgICAgIDxpbmNsdWRlIG5hbWU9ImJlYW5zLnhtbCIvPgogICAgIDwvbWV0YWluZj4KLSAgPC9qYXI+ICAgICAgIAorICA8L2phcj4KICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgPGRlbGV0ZSBmaWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS8qLmRic2NoZW1hIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLTwvdGFyZ2V0PiAgCis8L3RhcmdldD4KIAogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPCEtLSBUYXJnZXQgdG8gcGFja2FnZSB0aGUgYXBwY2xpZW50IGFwcGxpY2F0aW9uIHRvIGphciBmaWxlIC0tPgogPCEtLQogVmFyaWFibGVzIFVzZWQ6CiAgICAgJHthcHBjbGllbnQuamFyfQotICAgICR7YXBwY2xpZW50amFyLmNsYXNzZXN9ICAgIAotICAgICR7YXBwY2xpZW50amFyLmZpbGVzfSAgICAKKyAgICAke2FwcGNsaWVudGphci5jbGFzc2VzfQorICAgICR7YXBwY2xpZW50amFyLmZpbGVzfQogICAgICR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ci0gICAgJHthcHBsaWNhdGlvbi1jbGllbnQueG1sfSAgICAKLSAgICAke3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sfSAgICAKKyAgICAke2FwcGxpY2F0aW9uLWNsaWVudC54bWx9CisgICAgJHtzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbH0KIC0tPgogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPHRhcmdldCBuYW1lPSJwYWNrYWdlLWFwcGNsaWVudGphci1jb21tb24iPgogICA8ZGVsZXRlIGZpbGU9IiR7YXBwY2xpZW50Lmphcn0iLz4KLSAgPGVjaG8gbWVzc2FnZT0iY29tbW9uLnhtbDogR2VuZXJhdGluZyBhcHBjbGllbnQtamFyIGluc2lkZSBidWlsZCBkaXJlY3RvcnkiIAorICA8ZWNobyBtZXNzYWdlPSJjb21tb24ueG1sOiBHZW5lcmF0aW5nIGFwcGNsaWVudC1qYXIgaW5zaWRlIGJ1aWxkIGRpcmVjdG9yeSIKICAgICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CiAgIDxjb3B5IGZpbGU9IiR7YXBwbGljYXRpb24tY2xpZW50LnhtbH0iCi0gICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCisgICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvYXBwbGljYXRpb24tY2xpZW50LnhtbCIKICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIgogICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgPGphciBqYXJmaWxlPSIke2FwcGNsaWVudC5qYXJ9IiBiYXNlZGlyPSIke2FwcGNsaWVudGphci5maWxlc30iIAotICAgIHVwZGF0ZT0idHJ1ZSIgaW5jbHVkZXMgPSIke2FwcGNsaWVudGphci5jbGFzc2VzfSIgCi0gICAgbWFuaWZlc3Q9Ii4vY2xpZW50L01BTklGRVNULk1GIj4gICAgICAgICAKKyAgPGphciBqYXJmaWxlPSIke2FwcGNsaWVudC5qYXJ9IiBiYXNlZGlyPSIke2FwcGNsaWVudGphci5maWxlc30iCisgICAgdXBkYXRlPSJ0cnVlIiBpbmNsdWRlcyA9IiR7YXBwY2xpZW50amFyLmNsYXNzZXN9IgorICAgIG1hbmlmZXN0PSIuL2NsaWVudC9NQU5JRkVTVC5NRiI+CiAgICAgPG1ldGFpbmYgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiI+CiAgICAgICA8aW5jbHVkZSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiAgICAgICA8aW5jbHVkZSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogICAgIDwvbWV0YWluZj4KLSAgPC9qYXI+ICAgICAgIAotPC90YXJnZXQ+IAorICA8L2phcj4KKzwvdGFyZ2V0PgogCiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8IS0tIFRhcmdldCB0byBjcmVhdGUgdGhlIGVqYiBhcHBsaWNhdGlvbiBqYXIgZmlsZSAtLT4KQEAgLTQ1Myw3ICs0NTMsNyBAQAogICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgogICAgIDxwYXJhbSBuYW1lPSJlamIuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphciIvPgogICA8L2FudGNhbGw+Ci08L3RhcmdldD4gICAgIAorPC90YXJnZXQ+CiAKIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIDwhLS0gVGFyZ2V0IHRvIGNyZWF0ZSB0aGUgYXBwY2xpZW50IGphciBmaWxlIC0tPgpAQCAtNDYxLDkgKzQ2MSw5IEBACiA8dGFyZ2V0IG5hbWU9ImFwcGNsaWVudC1qYXItY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgogICA8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2UtYXBwY2xpZW50amFyLWNvbW1vbiI+Ci0gICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgCisgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIKICAgICAgIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgotICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuamFyIiAKKyAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmphciIKICAgICAgIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiAgIDwvYW50Y2FsbD4KIDwvdGFyZ2V0PgpAQCAtNDkyLDIyICs0OTIsMjIgQEAKIDx0YXJnZXQgbmFtZT0iYnVpbGQtZWFyLWNvbW1vbiIgZGVwZW5kcz0iZml4RmlsZXMscGFja2FnZS1wZXJzaXN0ZW5jZS1jb21tb24sZWpiLWphci1jb21tb24sYXBwY2xpZW50LWphci1jb21tb24sd2ViY2xpZW50LXdhci1jb21tb24iPgogICA8ZGVsZXRlIGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LmVhciIvPgogICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KLSAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4gICAKLSAgPGNvcHkgZmlsZT0iJHtzdW4tYXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIiAgCWZhaWxvbmVycm9yPSJmYWxzZSIvPiAKLSAgPGNvcHkgZmlsZT0iJHthcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIgIAlmYWlsb25lcnJvcj0iZmFsc2UiLz4gCisgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CisgIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KKyAgPGNvcHkgZmlsZT0iJHthcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtcmVzb3VyY2VzLWVhci54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiICBmaWx0ZXJpbmc9InRydWUiLz4KLSAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiPiAKKyAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiPgogICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KICAgICAgIDxpbmNsdWRlIG5hbWU9IiouamFyIi8+CiAgICAgICA8aW5jbHVkZSBuYW1lPSIqLndhciIvPgogICAgIDwvZmlsZXNldD4KICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ij4KLQk8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci0JPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIi8+CisgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgorICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIvPgogICAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbCIvPgogICAgIDwvZmlsZXNldD4KICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LkFQU19IT01FfSIgaW5jbHVkZXM9ImxpYi9yZXBvcnRlci5qYXIiLz4KLSAgPC9qYXI+ICAgICAgICAKKyAgPC9qYXI+CiA8L3RhcmdldD4KIAogCkBAIC01MTcsMjEgKzUxNywyMSBAQAogPHRhcmdldCBuYW1lPSJlYXItY29tbW9uIiBkZXBlbmRzPSJmaXhGaWxlcyxpbml0LWNvbW1vbiI+CiAgIDxkZWxldGUgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0uZWFyIi8+CiAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgotICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPiAgICAKLSAgPGNvcHkgZmlsZT0iJHtzdW4tYXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIiAgCWZhaWxvbmVycm9yPSJmYWxzZSIvPiAKKyAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KKyAgPGNvcHkgZmlsZT0iJHtzdW4tYXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIiAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC1yZXNvdXJjZXMtZWFyLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIgIGZpbHRlcmluZz0idHJ1ZSIvPgotICA8ZWFyIGVhcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIgCisgIDxlYXIgZWFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIgogICAgIGFwcHhtbD0iJHthcHBsaWNhdGlvbi54bWx9Ij4KICAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSI+CiAgICAgICA8aW5jbHVkZSBuYW1lPSIqLmphciIvPgogICAgICAgPGluY2x1ZGUgbmFtZT0iKi53YXIiLz4KICAgICA8L2ZpbGVzZXQ+CiAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSI+Ci0JPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgorICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KICAgICAgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwiLz4KICAgICA8L2ZpbGVzZXQ+CiAgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5BUFNfSE9NRX0iIGluY2x1ZGVzPSJsaWIvcmVwb3J0ZXIuamFyIi8+Ci0gIDwvZWFyPiAgICAgICAgCisgIDwvZWFyPgogPC90YXJnZXQ+CiAKIApAQCAtNTYxLDE3ICs1NjEsMTcgQEAKICAgPGVjaG8gbWVzc2FnZT0iT3BlcmFuZCAke29wZXJhbmQucHJvcHN9IiAgbGV2ZWw9InZlcmJvc2UiLz4KICAgPGVjaG8gbWVzc2FnZT0iYXNhZG1pbiAke2FkbWluLmNvbW1hbmR9ICR7YXMucHJvcHN9ICR7b3BlcmFuZC5wcm9wc30iLz4KICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0idHJ1ZSI+Ci0gICAgICAgIDxhcmcgbGluZT0iJHthZG1pbi5jb21tYW5kfSAke2FzLnByb3BzfSAke29wZXJhbmQucHJvcHN9IiAvPiAgICAgICAgCisgICAgICAgIDxhcmcgbGluZT0iJHthZG1pbi5jb21tYW5kfSAke2FzLnByb3BzfSAke29wZXJhbmQucHJvcHN9IiAvPgogICAgIDwvZXhlYz4KIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KLSAgPGVjaG8gbWVzc2FnZT0iRG9pbmcgYWRtaW4gdGFzayAke2FkbWluLmNvbW1hbmR9IChpZ25vcmUgZmFpbHVyZXMpIiAKKyAgPGVjaG8gbWVzc2FnZT0iRG9pbmcgYWRtaW4gdGFzayAke2FkbWluLmNvbW1hbmR9IChpZ25vcmUgZmFpbHVyZXMpIgogICAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgPGVjaG8gbWVzc2FnZT0iT3BlcmFuZCAke29wZXJhbmQucHJvcHN9IiAgbGV2ZWw9InZlcmJvc2UiLz4KICAgPGVjaG8gbWVzc2FnZT0iYXNhZG1pbiAke2FkbWluLmNvbW1hbmR9ICR7YXMucHJvcHN9ICR7b3BlcmFuZC5wcm9wc30iLz4KICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgotICAgICAgICA8YXJnIGxpbmU9IiR7YWRtaW4uY29tbWFuZH0gJHthcy5wcm9wc30gJHtvcGVyYW5kLnByb3BzfSIgLz4gICAgICAgIAorICAgICAgICA8YXJnIGxpbmU9IiR7YWRtaW4uY29tbWFuZH0gJHthcy5wcm9wc30gJHtvcGVyYW5kLnByb3BzfSIgLz4KICAgICA8L2V4ZWM+CiA8L3RhcmdldD4KIApAQCAtNTc5LDcgKzU3OSw3IEBACiA8IS0tIFRhcmdldCB0byBleGVjdXRlIGEgYmF0Y2hmaWxlIG9mIGFzYWRtaW4gY29tbWFuZHMgIC0tPgogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPHRhcmdldCBuYW1lPSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+Ci0gIDxlY2hvIG1lc3NhZ2U9IkRvaW5nIGFkbWluIGJhdGNoIHRhc2sgJHthZG1pbi5jb21tYW5kfSAtLWZpbGUiIAorICA8ZWNobyBtZXNzYWdlPSJEb2luZyBhZG1pbiBiYXRjaCB0YXNrICR7YWRtaW4uY29tbWFuZH0gLS1maWxlIgogICAgICAgbGV2ZWw9InZlcmJvc2UiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ1c2VyLnBhc3N3b3JkLmZpbGUiIHZhbHVlPSJhc2FkbWludXNlcnBhc3N3b3JkLnR4dCIvPgogPGVjaG8gZmlsZT0iJHt1c2VyLnBhc3N3b3JkLmZpbGV9IiBhcHBlbmQ9ImZhbHNlIj4KQEAgLTU5MCwxMSArNTkwLDExIEBACiA8L2VjaG8+CiAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJ0cnVlIj4KICAgICAgPGFyZyBsaW5lPSItLXVzZXIgJHthZG1pbi51c2VyfSAtLXBhc3N3b3JkZmlsZSAke3VzZXIucGFzc3dvcmQuZmlsZX0gLS1ob3N0ICR7YWRtaW4uaG9zdH0gLS1wb3J0ICR7YWRtaW4ucG9ydH0gLS1lY2hvPXRydWUgLS10ZXJzZT10cnVlIi8+Ci0gICAgIDxhcmcgbGluZT0ibXVsdGltb2RlIC0tZmlsZSAke2FzYWRtaW4uZmlsZX0iIC8+ICAgICAgICAKKyAgICAgPGFyZyBsaW5lPSJtdWx0aW1vZGUgLS1maWxlICR7YXNhZG1pbi5maWxlfSIgLz4KICAgPC9leGVjPgogICA8ZGVsZXRlIGZpbGU9IiR7dXNlci5wYXNzd29yZC5maWxlfSIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiA8L3RhcmdldD4KLSAKKwogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogCiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CkBAIC02MTgsNyArNjE4LDcgQEAKICAgPC9leGVjPgogICA8ZGVsZXRlIGZpbGU9IiR7dXNlci5wYXNzd29yZC5maWxlfSIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiA8L3RhcmdldD4KLSAgICAgCisKIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIDwhLS0gVGFyZ2V0IHRvIGRlbGV0ZSB0aGUgdXNlciBpbiBmaWxlIHJlYWxtIHRoZSBBcHBTZXJ2ICAtLT4KIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KQEAgLTYzNCw3ICs2MzQsNyBAQAogPC90YXJnZXQ+CiAKIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLTwhLS0gSjJFRSBDb25uZWN0b3IgcmVsYXRlZCB0YXJnZXRzIAkJCSAgICAgCSAgLS0+Cis8IS0tIEoyRUUgQ29ubmVjdG9yIHJlbGF0ZWQgdGFyZ2V0cyAgICAgICAgICAgICAgICAgICAgICAgIC0tPgogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogCiA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1jb25uZWN0b3ItY29ubnBvb2wtY29tbW9uIgpAQCAtNzIxLDcgKzcyMSw3IEBACiA8IS0tIFRhcmdldCB0byBjcmVhdGUgSkRCQyBjb25uZWN0aW9uIHBvb2wgIC0tPgogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPHRhcmdldCBuYW1lPSJjcmVhdGUtamRiYy1jb25ucG9vbC1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLTxlY2hvIG1lc3NhZ2U9ImNyZWF0ZWQgamRiYyBjb25uZWN0aW9uIHBvb2wgJHtqZGJjLmNvbnBvb2wubmFtZX0iIAorPGVjaG8gbWVzc2FnZT0iY3JlYXRlZCBqZGJjIGNvbm5lY3Rpb24gcG9vbCAke2pkYmMuY29ucG9vbC5uYW1lfSIKICAgICBsZXZlbD0idmVyYm9zZSIvPgogICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CiAgICAgICAgIDxhcmcgbGluZT0iY3JlYXRlLWpkYmMtY29ubmVjdGlvbi1wb29sIi8+CkBAIC03MzUsNyArNzM1LDcgQEAKIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1qZGJjLWRyaXZlci1jb25ucG9vbC1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLTxlY2hvIG1lc3NhZ2U9ImNyZWF0ZWQgamRiYyBjb25uZWN0aW9uIHBvb2wgJHtqZGJjLmNvbnBvb2wubmFtZX0iIAorPGVjaG8gbWVzc2FnZT0iY3JlYXRlZCBqZGJjIGNvbm5lY3Rpb24gcG9vbCAke2pkYmMuY29ucG9vbC5uYW1lfSIKICAgICBsZXZlbD0idmVyYm9zZSIvPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJleHRyYS1wYXJhbXMiIHZhbHVlPSIiLz4KICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgpAQCAtNzcyLDcgKzc3Miw3IEBACiAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0IiAvPgogICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgotCSAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7amRiYy5jb25wb29sLm5hbWV9LnByb3BlcnR5LlVSTD0ke2RiLnVybH07dXNlcj0ke2RiLnVzZXJ9O3Bhc3N3b3JkPSR7ZGIucHdkfSIvPgorICAgICAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7amRiYy5jb25wb29sLm5hbWV9LnByb3BlcnR5LlVSTD0ke2RiLnVybH07dXNlcj0ke2RiLnVzZXJ9O3Bhc3N3b3JkPSR7ZGIucHdkfSIvPgogICA8L2FudGNhbGw+CiA8L3RhcmdldD4KIApAQCAtODIzLDcgKzgyMyw3IEBACiAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0IiAvPgogICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgotCSAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7amRiYy5jb25wb29sLm5hbWV9LnByb3BlcnR5LlVSTD0ke2RiLnVybH07dXNlcj0ke2RiLnVzZXJ9O3Bhc3N3b3JkPSR7ZGIucHdkfSIvPgorICAgICAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7amRiYy5jb25wb29sLm5hbWV9LnByb3BlcnR5LlVSTD0ke2RiLnVybH07dXNlcj0ke2RiLnVzZXJ9O3Bhc3N3b3JkPSR7ZGIucHdkfSIvPgogICA8L2FudGNhbGw+CiA8L3RhcmdldD4KIApAQCAtODM5LDE0ICs4MzksMTQgQEAKICAgICAgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICAgICAgICA8YXJnIGxpbmU9IiR7amRiYy5jb25wb29sLm5hbWV9Ii8+CiAgICAgPC9leGVjPgotICAgIDxlY2hvIG1lc3NhZ2U9ImNtZCBleGVjdXRlZCBmb3IgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4gIAorICAgIDxlY2hvIG1lc3NhZ2U9ImNtZCBleGVjdXRlZCBmb3IgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KIDwvdGFyZ2V0PgogCiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8IS0tIFRhcmdldCB0byBjcmVhdGUgSkRCQyByZXNvdXJjZSAgLS0+CiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotPGVjaG8gbWVzc2FnZT0iQ3JlYXRpbmcgamRiYyByZXNvdXJjZSBwb29sICR7amRiYy5yZXNvdXJjZS5uYW1lfSIgCis8ZWNobyBtZXNzYWdlPSJDcmVhdGluZyBqZGJjIHJlc291cmNlIHBvb2wgJHtqZGJjLnJlc291cmNlLm5hbWV9IgogICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAgIDxlY2hvIG1lc3NhZ2U9ImFzYWRtaW4gY3JlYXRlLWpkYmMtcmVzb3VyY2UgJHthcy5wcm9wc30gLS1jb25uZWN0aW9ucG9vbGlkICR7amRiYy5jb25wb29sLm5hbWV9IC0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9ICR7amRiYy5yZXNvdXJjZS5uYW1lfSIvPgogICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgpAQCAtODk4LDcgKzg5OCw3IEBACiA8IS0tIFRhcmdldCB0byBjcmVhdGUgcGVyc2lzdGVuY2UgcmVzb3VyY2UgIC0tPgogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPHRhcmdldCBuYW1lPSJjcmVhdGUtcGVyc2lzdGVuY2UtcmVzb3VyY2UtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci08ZWNobyBtZXNzYWdlPSJDcmVhdGluZyBwbSByZXNvdXJjZSBhdCAke3BtLnJlc291cmNlLm5hbWV9IiAKKzxlY2hvIG1lc3NhZ2U9IkNyZWF0aW5nIHBtIHJlc291cmNlIGF0ICR7cG0ucmVzb3VyY2UubmFtZX0iCiAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgICA8ZWNobyBtZXNzYWdlPSJhc2FkbWluIGNyZWF0ZS1wZXJzaXN0ZW5jZS1yZXNvdXJjZSAke2FzLnByb3BzfSAtLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSAke3BtLnJlc291cmNlLm5hbWV9Ii8+CiAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KQEAgLTkwOCw3ICs5MDgsNyBAQAogICAgICAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgICAgICAgIDxhcmcgbGluZT0iJHtwbS5yZXNvdXJjZS5uYW1lfSIvPgogICAgIDwvZXhlYz4KLSAgICA8ZWNobyBtZXNzYWdlPSJDcmVhdGVkICR7cG0ucmVzb3VyY2UubmFtZX0gLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4gCisgICAgPGVjaG8gbWVzc2FnZT0iQ3JlYXRlZCAke3BtLnJlc291cmNlLm5hbWV9IC0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+CiAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCkBAIC05MjcsMTQgKzkyNywxNCBAQAogPHRhcmdldCBuYW1lPSJkZWxldGUtcGVyc2lzdGVuY2UtcmVzb3VyY2UtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIgotICAgICAgdmFsdWU9ImRlbGV0ZS1wZXJzaXN0ZW5jZS1yZXNvdXJjZSAKKyAgICAgIHZhbHVlPSJkZWxldGUtcGVyc2lzdGVuY2UtcmVzb3VyY2UKICAgICAgICAgLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iIC8+CiAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke3BtLnJlc291cmNlLm5hbWV9IiAvPgogICA8L2FudGNhbGw+CiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJleGVjdXRlLXNxbC1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLTxlY2hvIG1lc3NhZ2U9IkV4ZWN1dGluZyBzcWwgc3RhdGVtZW50IGF0ICR7YmFzZWRpcn0gZnJvbSAke3NxbC5maWxlfSIgCis8ZWNobyBtZXNzYWdlPSJFeGVjdXRpbmcgc3FsIHN0YXRlbWVudCBhdCAke2Jhc2VkaXJ9IGZyb20gJHtzcWwuZmlsZX0iCiAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgPHNxbAogICAgIGRyaXZlcj0iJHtkYi5kcml2ZXJ9IgpAQCAtOTQ5LDcgKzk0OSw3IEBACiAKIAogPHRhcmdldCBuYW1lPSJleGVjdXRlLWVqYi1zcWwtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci08ZWNobyBtZXNzYWdlPSJFeGVjdXRpbmcgc3FsIHN0YXRlbWVudCBhdCAke2Jhc2VkaXJ9IGZyb20gJHtzcWwuZmlsZX0iIAorPGVjaG8gbWVzc2FnZT0iRXhlY3V0aW5nIHNxbCBzdGF0ZW1lbnQgYXQgJHtiYXNlZGlyfSBmcm9tICR7c3FsLmZpbGV9IgogICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAgIDxzcWwKICAgICBkcml2ZXI9IiR7ZGIuZHJpdmVyfSIKQEAgLTk2NSw4ICs5NjUsOCBAQAogCiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8IS0tIFRhcmdldCB0byBjcmVhdGUvZGVsZXRlIGphdmFtYWlsIHJlc291cmNlcyAgLS0+Ci08IS0tIAotICAgIFByb3BlcnRpZXMgcmVxdWlyZWQ6IAorPCEtLQorICAgIFByb3BlcnRpZXMgcmVxdWlyZWQ6CiAgICAgbWFpbGhvc3QKICAgICBmcm9tYWRkcmVzcwogICAgIGRlYnVnCkBAIC0xMDA3LDcgKzEwMDcsNyBAQAogPCEtLSBUYXJnZXQgdG8gY3JlYXRlIGRhdGFiYXNlIHRhYmxlIHRocm91Z2ggU1FMIGZpbGUgIC0tPgogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPHRhcmdldCBuYW1lPSJjcmVhdGUtc3FsLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotPGVjaG8gbWVzc2FnZT0iY3JlYXRpbmcgdGFibGVzIGZyb20gJHtiYXNlZGlyfS9zcWwvJHtkYi5jcmVhdGV9IiAKKzxlY2hvIG1lc3NhZ2U9ImNyZWF0aW5nIHRhYmxlcyBmcm9tICR7YmFzZWRpcn0vc3FsLyR7ZGIuY3JlYXRlfSIKICAgICBsZXZlbD0idmVyYm9zZSIvPgogICA8c3FsCiAgICAgZHJpdmVyPSIke2RiLmRyaXZlcn0iCkBAIC0xMDI2LDcgKzEwMjYsNyBAQAogPCEtLSBUYXJnZXQgdG8gZGVsZXRlIGRhdGFiYXNlIHRhYmxlIHRocm91Z2ggU1FMIGZpbGUgIC0tPgogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPHRhcmdldCBuYW1lPSJkZWxldGUtc3FsLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotPGVjaG8gbWVzc2FnZT0iZHJvcHBpbmcgdGFibGVzIGZyb20gJHtiYXNlZGlyfS9zcWwvJHtkYi5kcm9wfSIgCis8ZWNobyBtZXNzYWdlPSJkcm9wcGluZyB0YWJsZXMgZnJvbSAke2Jhc2VkaXJ9L3NxbC8ke2RiLmRyb3B9IgogICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAgIDxzcWwKICAgICBkcml2ZXI9IiR7ZGIuZHJpdmVyfSIKQEAgLTEwNDUsMTEgKzEwNDUsMTEgQEAKIDwhLS0gVGFnZXQgdG8gY3JlYXRlIEpNUyBDb25uZWN0aW9uICAgICAgLS0+CiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1qbXMtY29ubmVjdGlvbi1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgPGVjaG8gbWVzc2FnZT0iQ3JlYXRpbmcgSk1TIGNvbm5lY3Rpb24gZmFjdG9yeSB3aXRoIG5hbWUgJHtqbXMuZmFjdG9yeS5uYW1lfSIgCisgIDxlY2hvIG1lc3NhZ2U9IkNyZWF0aW5nIEpNUyBjb25uZWN0aW9uIGZhY3Rvcnkgd2l0aCBuYW1lICR7am1zLmZhY3RvcnkubmFtZX0iCiAgICAgICBsZXZlbD0idmVyYm9zZSIvPgogICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59Ij4KICAgICA8YXJnIGxpbmU9ImNyZWF0ZS1qbXMtcmVzb3VyY2UgIi8+Ci0gICAgPGFyZyBsaW5lPSItLXJlc3R5cGUgJHtqbXMuZmFjdG9yeS50eXBlfSIvPiAgICAKKyAgICA8YXJnIGxpbmU9Ii0tcmVzdHlwZSAke2ptcy5mYWN0b3J5LnR5cGV9Ii8+CiAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgogICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KICAgICA8YXJnIGxpbmU9IiR7am1zLmZhY3RvcnkubmFtZX0iIC8+CkBAIC0xMDYwLDIzICsxMDYwLDIzIEBACiA8IS0tIFRhZ2V0IHRvIGRlbGV0ZSBKTVMgQ29ubmVjdGlvbiAgICAgIC0tPgogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogPHRhcmdldCBuYW1lPSJkZWxldGUtam1zLWNvbm5lY3Rpb24tY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gIDxlY2hvIG1lc3NhZ2U9IkRlbGV0ZSBKTVMgY29ubmVjdGlvbiBmYWN0b3J5IHdpdGggbmFtZSAke2ptcy5mYWN0b3J5Lm5hbWV9IiAKKyAgPGVjaG8gbWVzc2FnZT0iRGVsZXRlIEpNUyBjb25uZWN0aW9uIGZhY3Rvcnkgd2l0aCBuYW1lICR7am1zLmZhY3RvcnkubmFtZX0iCiAgICAgICBsZXZlbD0idmVyYm9zZSIvPgogICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59Ij4KLSAgICA8YXJnIGxpbmU9ImRlbGV0ZS1qbXMtcmVzb3VyY2UgIi8+ICAgIAorICAgIDxhcmcgbGluZT0iZGVsZXRlLWptcy1yZXNvdXJjZSAiLz4KICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+Ci0gICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPiAgICAKKyAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgICAgPGFyZyBsaW5lPSIke2ptcy5mYWN0b3J5Lm5hbWV9Ii8+CiAgIDwvZXhlYz4KIDwvdGFyZ2V0PgogCiA8IS0tIEpNUzogY3JlYXRlL2RlbGV0ZSBEZXN0aW5hdGlvbiBSZXNvdXJjZSBUYXJnZXRzIC0tPgogPHRhcmdldCBuYW1lPSJjcmVhdGUtam1zLXJlc291cmNlLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICA8ZWNobyBtZXNzYWdlPSJDcmVhdGluZyBKTVMgcmVzb3VyY2Ugd2l0aCBuYW1lICR7am1zLnJlc291cmNlLm5hbWV9IiAKKyAgPGVjaG8gbWVzc2FnZT0iQ3JlYXRpbmcgSk1TIHJlc291cmNlIHdpdGggbmFtZSAke2ptcy5yZXNvdXJjZS5uYW1lfSIKICAgICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAKICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSI+Ci0gICAgPGFyZyBsaW5lPSJjcmVhdGUtam1zZGVzdCAtLWRlc3R0eXBlICR7ZGVzdC50eXBlfSAiLz4gICAgCisgICAgPGFyZyBsaW5lPSJjcmVhdGUtam1zZGVzdCAtLWRlc3R0eXBlICR7ZGVzdC50eXBlfSAiLz4KICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+CiAgICAgPGFyZyBsaW5lPSIke2Rlc3QubmFtZX0iLz4KICAgPC9leGVjPgpAQCAtMTA4NSwyNCArMTA4NSwyNCBAQAogICAgIDxhcmcgbGluZT0iY3JlYXRlLWptcy1yZXNvdXJjZSAiLz4KICAgICA8YXJnIGxpbmU9Ii0tcmVzdHlwZSAke2ptcy5yZXNvdXJjZS50eXBlfSIvPgogICAgIDxhcmcgbGluZT0iLS1wcm9wZXJ0eSBpbXFEZXN0aW5hdGlvbk5hbWU9JHtkZXN0Lm5hbWV9Ii8+Ci0gICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPiAgICAKKyAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgogICAgIDxhcmcgbGluZT0iJHtqbXMucmVzb3VyY2UubmFtZX0iLz4KICAgPC9leGVjPgogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0iZGVsZXRlLWptcy1yZXNvdXJjZS1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgPGVjaG8gbWVzc2FnZT0iRGVsZXRlIEpNUyByZXNvdXJjZSB3aXRoIG5hbWUgJHtqbXMucmVzb3VyY2UubmFtZX0iIAorICA8ZWNobyBtZXNzYWdlPSJEZWxldGUgSk1TIHJlc291cmNlIHdpdGggbmFtZSAke2ptcy5yZXNvdXJjZS5uYW1lfSIKICAgICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAKICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSI+CiAgICAgPGFyZyBsaW5lPSJkZWxldGUtam1zLXJlc291cmNlICIvPgotICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4gICAgCisgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30gJHtqbXMucmVzb3VyY2UubmFtZX0iLz4KICAgPC9leGVjPgogCiAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iPgotICAgIDxhcmcgbGluZT0iZGVsZXRlLWptc2Rlc3QgLS1kZXN0dHlwZSAke2Rlc3QudHlwZX0gIi8+ICAgIAorICAgIDxhcmcgbGluZT0iZGVsZXRlLWptc2Rlc3QgLS1kZXN0dHlwZSAke2Rlc3QudHlwZX0gIi8+CiAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSAke2Rlc3QubmFtZX0iLz4KICAgPC9leGVjPgogPC90YXJnZXQ+CkBAIC0xMTQ2LDIwICsxMTQ2LDIwIEBACiA8dGFyZ2V0IG5hbWU9ImRlcGxveS1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24tcGUiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24tZWUiLz4KLTwvdGFyZ2V0PiAgICAgICAKKzwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImRlcGxveS12ZXJpZnktY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktdmVyaWZ5LWNvbW1vbi1wZSIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXZlcmlmeS1jb21tb24tZWUiLz4KLTwvdGFyZ2V0PiAgICAgICAKKzwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImRlcGxveS1jb21tb24tcGUiIGRlcGVuZHM9ImluaXQtY29tbW9uIiB1bmxlc3M9ImVlIj4KICAgPHByb3BlcnR5IG5hbWU9ImRlcGxveWVkLmFwcCIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIvPgogICAgPHByb3BlcnR5IG5hbWU9ImV4dHJhLXBhcmFtcyIgdmFsdWU9IiIvPgogICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgIDxhcmcgbGluZT0iZGVwbG95Ii8+Ci0gICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPiAgICAKLSAgICA8YXJnIGxpbmU9IiR7ZXh0cmEtcGFyYW1zfSIvPiAgICAKKyAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+CisgICAgPGFyZyBsaW5lPSIke2V4dHJhLXBhcmFtc30iLz4KICAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgICAgPGFyZyBsaW5lPSItLXJldHJpZXZlICR7YXNzZW1ibGUuZGlyfSIvPgogICAgIDxhcmcgbGluZT0iLS1saWJyYXJpZXMgJHtsaWJyYXJpZXN9Ii8+CkBAIC0xMTY5LDcgKzExNjksNyBAQAogICA8ZWNobyBtZXNzYWdlPSJEZXBsb3ltZW50IG9uIHRhcmdldCBzZXJ2ZXIgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0gc3VjY2Vzc2Z1bCIvPgogICAgPC90YXJnZXQ+CiAKLTx0YXJnZXQgbmFtZT0iZGVwbG95LWNvbW1vbi1lZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iIGlmPSJlZSI+ICAgICAgCis8dGFyZ2V0IG5hbWU9ImRlcGxveS1jb21tb24tZWUiIGRlcGVuZHM9ImluaXQtY29tbW9uIiBpZj0iZWUiPgogICA8ZWNobyBtZXNzYWdlPSJEZXBsb3lpbmcgaW4gRUUuLi4iLz4KICAgPHByb3BlcnR5IG5hbWU9ImRlcGxveWVkLmFwcCIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIvPgogICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgpAQCAtMTIyMSw5ICsxMjIxLDkgQEAKICAgICA8YXJnIGxpbmU9Ii0tcHJlY29tcGlsZWpzcD0ke3ByZWNvbXBpbGVqc3B9Ii8+CiAgICAgPGFyZyBsaW5lPSItLXVwbG9hZCB0cnVlIi8+CiAgICAgPGFyZyBsaW5lPSItLXJldHJpZXZlICR7YXNzZW1ibGUuZGlyfSIvPgotICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4JCisgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICA8L2V4ZWM+Ci08L3RhcmdldD4gICAgCis8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJkZXBsb3ktd2FyLW5hbWUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgPGVjaG8gbWVzc2FnZT0iRGVwbG95aW5nICR7d2FybmFtZX0gZnJvbSAke2Jhc2VkaXJ9LiIKQEAgLTEyNTMsNyArMTI1Myw3IEBACiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJkZXBsb3ktd2FiLWNvbW1vbnBlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiIgdW5sZXNzPSJlZSI+Ci0gIDxlY2hvIG1lc3NhZ2U9IkRlcGxveWluZyBXQUIgJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciBmcm9tICR7YmFzZWRpcn0uIiAKKyAgPGVjaG8gbWVzc2FnZT0iRGVwbG95aW5nIFdBQiAke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIGZyb20gJHtiYXNlZGlyfS4iCiAgICAgICBsZXZlbD0idmVyYm9zZSIvPgogICA8cHJvcGVydHkgbmFtZT0icHJlY29tcGlsZWpzcCIgdmFsdWU9InRydWUiLz4KICAgPHByb3BlcnR5IG5hbWU9ImZvcmNlIiB2YWx1ZT0iZmFsc2UiLz4KQEAgLTEyNjMsMTcgKzEyNjMsMTcgQEAKICAgICA8YXJnIGxpbmU9Ii0tcHJlY29tcGlsZWpzcD0ke3ByZWNvbXBpbGVqc3B9Ii8+CiAgICAgPGFyZyBsaW5lPSItLWZvcmNlPSR7Zm9yY2V9Ii8+CiAgICAgPGFyZyBsaW5lPSItLXVwbG9hZD10cnVlIi8+Ci0gICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgkKKyAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgICAgPGFyZyBsaW5lPSItLWxpYnJhcmllcyAke2xpYnJhcmllc30iLz4KICAgICA8YXJnIGxpbmU9Ii0tdHlwZT1vc2dpIi8+CiAgICAgPGFyZyBsaW5lPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIi8+CiAgIDwvZXhlYz4KLTwvdGFyZ2V0PiAKKzwvdGFyZ2V0PgogCiAKIAogPHRhcmdldCBuYW1lPSJkZXBsb3ktd2FyLWNvbW1vbnBlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiIgdW5sZXNzPSJlZSI+Ci0gIDxlY2hvIG1lc3NhZ2U9IkRlcGxveWluZyAke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIGZyb20gJHtiYXNlZGlyfS4iIAorICA8ZWNobyBtZXNzYWdlPSJEZXBsb3lpbmcgJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciBmcm9tICR7YmFzZWRpcn0uIgogICAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgPHByb3BlcnR5IG5hbWU9InByZWNvbXBpbGVqc3AiIHZhbHVlPSJ0cnVlIi8+CiAgIDxwcm9wZXJ0eSBuYW1lPSJmb3JjZSIgdmFsdWU9ImZhbHNlIi8+CkBAIC0xMjg0LDExICsxMjg0LDExIEBACiAgICAgPGFyZyBsaW5lPSItLXByZWNvbXBpbGVqc3A9JHtwcmVjb21waWxlanNwfSIvPgogICAgIDxhcmcgbGluZT0iLS1mb3JjZT0ke2ZvcmNlfSIvPgogICAgIDxhcmcgbGluZT0iLS11cGxvYWQ9dHJ1ZSIvPgotICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4JCisgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICAgIDxhcmcgbGluZT0iLS1saWJyYXJpZXMgJHtsaWJyYXJpZXN9Ii8+CiAgICAgPGFyZyBsaW5lPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIi8+CiAgIDwvZXhlYz4KLTwvdGFyZ2V0PiAKKzwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImRlcGxveS13YXItY29tbW9uZWUiIGlmPSJlZSI+CiAgIDxwcm9wZXJ0eSBuYW1lPSJwcmVjb21waWxlanNwIiB2YWx1ZT0idHJ1ZSIvPgpAQCAtMTMwMSw3ICsxMzAxLDcgQEAKICAgICA8YXJnIGxpbmU9Ii0tcHJlY29tcGlsZWpzcD0ke3ByZWNvbXBpbGVqc3B9Ii8+CiAgICAgPGFyZyBsaW5lPSItLWZvcmNlPSR7Zm9yY2V9Ii8+CiAgICAgPGFyZyBsaW5lPSItLXVwbG9hZD10cnVlIi8+Ci0gICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgkKKyAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgICAgPGFyZyBsaW5lPSItLWxpYnJhcmllcyAke2xpYnJhcmllc30iLz4KICAgICA8YXJnIGxpbmU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIiLz4KICAgPC9leGVjPgpAQCAtMTM1MSwxMCArMTM1MSwxMCBAQAogICAgIDxhcmcgbGluZT0iZGVwbG95Ii8+CiAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgogICAgIDxhcmcgbGluZT0iLS11cGxvYWQ9dHJ1ZSIvPgotICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4JCisgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICAgIDxhcmcgbGluZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphciIvPgogICA8L2V4ZWM+Ci08L3RhcmdldD4gCis8L3RhcmdldD4KIAogPCEtLSBkZXBsb3kgdGhlIHN0YW5kYWxvbmUgamFyIGluIEFwcFNlcnYgIC0tPgogPHRhcmdldCBuYW1lPSJkZXBsb3ktY2xpZW50LWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtMTM2MiwxMSArMTM2MiwxMSBAQAogICAgIDxhcmcgbGluZT0iZGVwbG95Ii8+CiAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgogICAgIDxhcmcgbGluZT0iLS11cGxvYWQ9dHJ1ZSIvPgotICAgIDxhcmcgbGluZT0iLS1yZXRyaWV2ZSAke2Fzc2VtYmxlLmRpcn0iLz4gICAgCi0gICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgkKKyAgICA8YXJnIGxpbmU9Ii0tcmV0cmlldmUgJHthc3NlbWJsZS5kaXJ9Ii8+CisgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICAgIDxhcmcgbGluZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogICA8L2V4ZWM+Ci08L3RhcmdldD4gCis8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJ1bmRlcGxveS13YXItbmFtZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICA8cHJvcGVydHkgbmFtZT0iZGVwbG95ZWRhcHAubmFtZSIgdmFsdWU9IiR7d2FybmFtZX0iLz4KQEAgLTEzODgsMjcgKzEzODgsMjcgQEAKICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICA8YXJnIGxpbmU9InVuZGVwbG95Ii8+CiAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgotPCEtLSAgICAKLTxhcmcgbGluZT10eXBlICR7YXBwdHlwZX0vPiAKKzwhLS0KKzxhcmcgbGluZT10eXBlICR7YXBwdHlwZX0vPgogLS0+Ci0gICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgkKKyAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgICAgPGFyZyBsaW5lPSIke2V4dHJhLXBhcmFtc30iLz4KIDwhLS0gZGVwbG95ZWRhcHAubmFtZSBkZWZhdWx0cyB0byB7YXBwbmFtZX1BcHAuZGVjbGFyZWQgaW4gcHJvcGVydGllcy54bWwtLT4KLSAgICA8YXJnIGxpbmU9IiR7ZGVwbG95ZWRhcHAubmFtZX0iLz4JCisgICAgPGFyZyBsaW5lPSIke2RlcGxveWVkYXBwLm5hbWV9Ii8+CiAgIDwvZXhlYz4KIDwvdGFyZ2V0PgogCiA8IS0tICB1bmRlcGxveSB0aGUgc3RhbmRhbG9uZSB3YXIgaW4gQXBwU2VydiAgLS0+CiA8dGFyZ2V0IG5hbWU9InVuZGVwbG95LXdhci1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICA8ZWNobyBtZXNzYWdlPSJVbmRlcGxveWluZyB3YXJmaWxlICR7YXBwbmFtZX0td2ViIGZyb20gCisgICAgPGVjaG8gbWVzc2FnZT0iVW5kZXBsb3lpbmcgd2FyZmlsZSAke2FwcG5hbWV9LXdlYiBmcm9tCiAgICAgICAgICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIgZnJvbSAke2Jhc2VkaXJ9LiIgbGV2ZWw9InZlcmJvc2UiLz4KICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICA8YXJnIGxpbmU9InVuZGVwbG95Ii8+CiAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgotICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4JCisgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICAgIDxhcmcgbGluZT0iJHthcHBuYW1lfS13ZWIiLz4KICAgPC9leGVjPgotPC90YXJnZXQ+IAorPC90YXJnZXQ+CiAKIAogPCEtLSAgdW5kZXBsb3kgdGhlIHN0YW5kYWxvbmUgd2FyIGluIEFwcFNlcnYgIC0tPgpAQCAtMTQxNiw3ICsxNDE2LDcgQEAKICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICA8YXJnIGxpbmU9InVuZGVwbG95Ii8+CiAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgotICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4JCisgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICAgIDxhcmcgbGluZT0iJHthcHBuYW1lfS1lamIiLz4KICAgPC9leGVjPgogPC90YXJnZXQ+CkBAIC0xNDI2LDEwICsxNDI2LDEwIEBACiAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CiAgICAgPGFyZyBsaW5lPSJ1bmRlcGxveSIvPgogICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KLSAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CQorICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KICAgICA8YXJnIGxpbmU9IiR7YXBwbmFtZX0tY2xpZW50Ii8+CiAgIDwvZXhlYz4KLTwvdGFyZ2V0PiAgCis8L3RhcmdldD4KIAogCiA8IS0tIHJ1biBhcHBjbGllbnQgaW4gQXBwU2VydiAgLS0+CkBAIC0xNDcyLDExICsxNDcyLDExIEBACiAgICAgPGFyZyB2YWx1ZT0iJHt0ZXN0c3VpdGUuaWR9Ii8+CiAgIDwvamF2YT4KIDwvdGFyZ2V0PgotICAKKwogPCEtLSBwcmVwYXJlIFBvaW50YmFzZSBzZXJ2ZXJzIC0tPgogPHRhcmdldCBuYW1lPSJwcmVwYXJlUEIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgPGVjaG8gbWVzc2FnZT0iU3RhcnRpbmcgUG9pbnRiYXNlIHNlcnZlcnMiIGxldmVsPSJ2ZXJib3NlIi8+Ci0gIDxjb3B5IGZpbGU9IiR7ZW52LkFQU19IT01FfS9saWIvcG9pbnRiYXNlLmluaSIgCisgIDxjb3B5IGZpbGU9IiR7ZW52LkFQU19IT01FfS9saWIvcG9pbnRiYXNlLmluaSIKICAgICAgIHRvZmlsZT0iJHtkYi5kaXJ9L3BvaW50YmFzZS5pbmkiLz4KICAgPHJlcGxhY2UgZmlsZT0iJHtkYi5kaXJ9L3BvaW50YmFzZS5pbmkiIHRva2VuPSJAQEAiIHZhbHVlPSIke2RiLmRpcn0iLz4KIDwvdGFyZ2V0PgpAQCAtMTQ5OSwxMiArMTQ5OSwxMiBAQAogCiA8IS0tIHRhcmdldCBuYW1lPSJzdGFydFBCIiBkZXBlbmRzPSJwcmVwYXJlUEIiPgogICA8cGFyYWxsZWw+Ci0gICAgPGphdmEgY2xhc3NuYW1lPSJjb20ucG9pbnRiYXNlLm5ldC5uZXRTZXJ2ZXIiIAorICAgIDxqYXZhIGNsYXNzbmFtZT0iY29tLnBvaW50YmFzZS5uZXQubmV0U2VydmVyIgogICAgICAgICBjbGFzc3BhdGg9IiR7ZGIuY2xhc3NwYXRofSIgZmFpbG9uZXJyb3I9ImZhbHNlIiBmb3JrPSJ0cnVlIj4KICAgICAgIDxhcmcgbGluZT0iL3BvcnQ6OTA5MiIvPgogICAgICAgPGFyZyBsaW5lPSIvcG9pbnRiYXNlLmluaT0ke2RiLmRpcn0vcG9pbnRiYXNlLmluaSIvPgogICAgIDwvamF2YT4KLSAgICA8amF2YSBjbGFzc25hbWU9ImNvbS5wb2ludGJhc2UubmV0Lm5ldFNlcnZlciIgCisgICAgPGphdmEgY2xhc3NuYW1lPSJjb20ucG9pbnRiYXNlLm5ldC5uZXRTZXJ2ZXIiCiAgICAgICAgIGNsYXNzcGF0aD0iJHtkYi5jbGFzc3BhdGh9IiBmYWlsb25lcnJvcj0idHJ1ZSIgZm9yaz0idHJ1ZSI+CiAgICAgICA8YXJnIGxpbmU9Ii9wb3J0OjkwOTMiLz4KICAgICAgIDxhcmcgbGluZT0iL3BvaW50YmFzZS5pbmk9JHtkYi5kaXJ9L3BvaW50YmFzZS5pbmkiLz4KQEAgLTE1MTUsNyArMTUxNSw3IEBACiA8IS0tICBzdGFydCBEZXJieSBEYXRhYmFzZSAtLT4KIDx0YXJnZXQgbmFtZT0ic3RhcnREZXJieSI+CiAgIDxjb25kaXRpb24gcHJvcGVydHk9ImRhcndpbiI+Ci0JPG9zIG5hbWU9Ik1hYyBPUyBYIi8+CisgICAgPG9zIG5hbWU9Ik1hYyBPUyBYIi8+CiAgIDwvY29uZGl0aW9uPgogICA8YW50Y2FsbCB0YXJnZXQ9InN0YXJ0RGVyYnlOb25NYWMiLz4KICAgPGFudGNhbGwgdGFyZ2V0PSJzdGFydERlcmJ5TWFjIi8+CkBAIC0xNTMyLDcgKzE1MzIsNyBAQAogICAgICAgY2xhc3NwYXRoPSIke2RiLmNsYXNzcGF0aH0iIGZvcms9InRydWUiIHNwYXduPSJ0cnVlIj4KICAgICAgIDxhcmcgbGluZT0iLWggbG9jYWxob3N0IC1wIDE1Mjggc3RhcnQiLz4KICAgICA8L2phdmE+Ci0gIDwvcGFyYWxsZWw+ICAgICAKKyAgPC9wYXJhbGxlbD4KIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9InN0YXJ0RGVyYnlNYWMiIGRlcGVuZHM9ImluaXQtY29tbW9uIiBpZj0iZGFyd2luIj4KQEAgLTE1NDUsNyArMTU0NSw3IEBACiAgICAgPC9qYXZhPgogICAgIDxqYXZhIGNsYXNzbmFtZT0ib3JnLmFwYWNoZS5kZXJieS5kcmRhLk5ldHdvcmtTZXJ2ZXJDb250cm9sIgogICAgICAgY2xhc3NwYXRoPSIke2RiLmNsYXNzcGF0aH0iIGZvcms9InRydWUiIHNwYXduPSJ0cnVlIj4KLSAgICAgICA8c3lzcHJvcGVydHkga2V5PSJkZXJieS5zdG9yYWdlLmZpbGVTeW5jVHJhbnNhY3Rpb25Mb2ciIHZhbHVlPSJ0cnVlIi8+ICAgICAKKyAgICAgICA8c3lzcHJvcGVydHkga2V5PSJkZXJieS5zdG9yYWdlLmZpbGVTeW5jVHJhbnNhY3Rpb25Mb2ciIHZhbHVlPSJ0cnVlIi8+CiAgICAgICA8YXJnIGxpbmU9Ii1oIGxvY2FsaG9zdCAtcCAxNTI4IHN0YXJ0Ii8+CiAgICAgPC9qYXZhPgogICA8L3BhcmFsbGVsPgpAQCAtMTU3MywxMCArMTU3MywxMCBAQAogCiA8IS0tIHNldHVwIElNUSBmb3IgUkkgQnVpbGQgLS0+CiA8dGFyZ2V0IG5hbWU9InNldHVwLW1xLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgIDxlY2hvIG1lc3NhZ2U9IkV4ZWN1dGluZyBEYXRhc3RvcmUgc2V0dXAgZm9yIFMxTVEuIFJlcXVpcmVkIG9ubHkgZm9yIFJJIiAKKyAgICA8ZWNobyBtZXNzYWdlPSJFeGVjdXRpbmcgRGF0YXN0b3JlIHNldHVwIGZvciBTMU1RLiBSZXF1aXJlZCBvbmx5IGZvciBSSSIKICAgICAgICAgbGV2ZWw9InZlcmJvc2UiLz4KLSAgICA8ZWNobyBtZXNzYWdlPSIke0lNUURCTUdSfSAtamF2YWhvbWUgJHtqYXZhLmhvbWV9IAotICAgICAgICAtYiAke2FkbWluLmRvbWFpbn1fJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0gY3JlYXRlIGFsbCIgCisgICAgPGVjaG8gbWVzc2FnZT0iJHtJTVFEQk1HUn0gLWphdmFob21lICR7amF2YS5ob21lfQorICAgICAgICAtYiAke2FkbWluLmRvbWFpbn1fJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0gY3JlYXRlIGFsbCIKICAgICAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtJTVFEQk1HUn0iIGZhaWxvbmVycm9yPSJ0cnVlIj4KICAgICAgPGFyZyBsaW5lPSItamF2YWhvbWUgJHtqYXZhLmhvbWV9IC1iICR7YWRtaW4uZG9tYWlufV8ke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSBjcmVhdGUgYWxsIiAvPgpAQCAtMTYzNywxMyArMTYzNywxMyBAQAogCiA8IS0tIHVzYWdlICAtLT4KIDx0YXJnZXQgbmFtZT0idXNhZ2UtY29tbW9uIj4KLSAgICA8ZWNobz4gICAgICAgICAKKyAgICA8ZWNobz4KICAgICAgICAgYW50IGNsZWFuICAgICAgICAgICBSZW1vdmUgYWxsIGNsYXNzZXMgZmlsZXMKICAgICAgICAgYW50IGJ1aWxkICAgICAgICAgICBCdWlsZCB0aGUgYXBwbGljYXRpb24KICAgICAgICAgYW50IGRlcGxveSAgICAgICAgICBEZXBsb3kgdGhlIGVhciBmaWxlcyB0byBTMUFTCi0gICAgICAgIGFudCBydW4JICAgICAgICAgICAgUnVuIHRoZSBhcHBsaWNhdGlvbgorICAgICAgICBhbnQgcnVuICAgICAgICAgICAgICAgIFJ1biB0aGUgYXBwbGljYXRpb24KICAgICAgICAgYW50IHVuZGVwbG95ICAgICAgICBVbmRlcGxveSB0aGUgZWFyIGZpbGVzIGZyb20gUzFBUwotICAgICAgICBhbnQgdXNhZ2UgICAgICAgICAgIERpc3BsYXkgdGhpcyBtZXNzYWdlICAgICAgICAgICAgCisgICAgICAgIGFudCB1c2FnZSAgICAgICAgICAgRGlzcGxheSB0aGlzIG1lc3NhZ2UKICAgICA8L2VjaG8+CiA8L3RhcmdldD4KIApAQCAtMTY2OSwxMyArMTY2OSwxMyBAQAogCiA8dGFyZ2V0IG5hbWU9InJlc3RhcnQtaW5zdGFuY2UiPgogICAgIDxlY2hvIG1lc3NhZ2U9IlJlc3RhcnRpbmcgcmVtb3RlIHNlcnZlciBpbnN0YW5jZSx1bnRpbCB0aGlzIGdldHMgZml4ZWQiLz4KLQk8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgorICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CiAgICAgICAgIDxhcmcgbGluZT0ic3RvcC1pbnN0YW5jZSIvPgogICAgICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+CiAgICAgICAgIDxhcmcgbGluZT0iJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KICAgICA8L2V4ZWM+CiAgICAgPHNsZWVwIHNlY29uZHM9IjMwIi8+Ci0JPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KKyAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgICAgICA8YXJnIGxpbmU9InN0YXJ0LWluc3RhbmNlIi8+CiAgICAgICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KICAgICAgICAgPGFyZyBsaW5lPSIke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgpAQCAtMTY5OCw3ICsxNjk4LDcgQEAKIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9InNldHVwVGltZXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIiBpZj0iZWUiPgotCTxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CisgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICAgICAgPGFyZyBsaW5lPSJjcmVhdGUtcmVzb3VyY2UtcmVmIi8+CiAgICAgICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KICAgICAgICAgPGFyZyBsaW5lPSItLXRhcmdldCBzZXJ2ZXIiLz4KQEAgLTE3MjUsMTMgKzE3MjUsMTMgQEAKIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9InVuc2V0dXBUaW1lciIgZGVwZW5kcz0iaW5pdC1jb21tb24iIGlmPSJlZSI+Ci0JPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KKyAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgICAgICA8YXJnIGxpbmU9ImRlbGV0ZS1yZXNvdXJjZS1yZWYiLz4KICAgICAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgogICAgICAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0IHNlcnZlciIvPgogICAgICAgICA8YXJnIGxpbmU9IiR7amRiYy5yZXNvdXJjZS5uYW1lfSIvPgogICAgIDwvZXhlYz4KLQk8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgorICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CiAgICAgICAgIDxhcmcgbGluZT0idW5zZXQiLz4KICAgICAgICAgPGFyZyBsaW5lPSIke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfS1jb25maWcuZWpiLWNvbnRhaW5lci5lamItdGltZXItc2VydmljZS50aW1lci1kYXRhc291cmNlIi8+CiAgICAgPC9leGVjPgpAQCAtMTkyNCw3ICsxOTI0LDcgQEAKIDwhLS0gVGFyZ2V0IHRvIEZsdXNoIGNvbm5lY3Rpb24gcG9vbCAgLS0+CiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8dGFyZ2V0IG5hbWU9ImZsdXNoLWNvbm5wb29sLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotPGVjaG8gbWVzc2FnZT0iRmx1c2ggY29ubmVjdGlvbiBwb29sICR7amRiYy5jb25wb29sLm5hbWV9IiAKKzxlY2hvIG1lc3NhZ2U9IkZsdXNoIGNvbm5lY3Rpb24gcG9vbCAke2pkYmMuY29ucG9vbC5uYW1lfSIKICAgICBsZXZlbD0idmVyYm9zZSIvPgogICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CiAgICAgICAgIDxhcmcgbGluZT0iZmx1c2gtY29ubmVjdGlvbi1wb29sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLXdhYi13aXRoLWNkaS9zZXJ2bGV0L3Rlc3RzL2NkaS9UZXN0QmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS13YWItd2l0aC1jZGkvc2VydmxldC90ZXN0cy9jZGkvVGVzdEJlYW4uamF2YQppbmRleCBmYWQ2ODk2Li45YmNjODRlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLXdhYi13aXRoLWNkaS9zZXJ2bGV0L3Rlc3RzL2NkaS9UZXN0QmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtd2FiLXdpdGgtY2RpL3NlcnZsZXQvdGVzdHMvY2RpL1Rlc3RCZWFuLmphdmEKQEAgLTE2LDcgKzE2LDcgQEAKIAogcGFja2FnZSB0ZXN0cy5jZGk7CiAKLS8vU2ltcGxlIFRlc3RCZWFuIHRvIHRlc3QgQ0RJLiAKKy8vU2ltcGxlIFRlc3RCZWFuIHRvIHRlc3QgQ0RJLgogLy9UaGlzIGJlYW4gaW1wbGVtZW50cyBTZXJpYWxpemFibGUgYXMgaXQgbmVlZHMgdG8gYmUgcGxhY2VkIGludG8gYSBTdGF0ZWZ1bCBCZWFuCiBwdWJsaWMgY2xhc3MgVGVzdEJlYW4KIHt9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLXdhYi13aXRoLWNkaS9zZXJ2bGV0L3Rlc3RzL2NkaS9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbXBsZS13YWItd2l0aC1jZGkvc2VydmxldC90ZXN0cy9jZGkvVGVzdFNlcnZsZXQuamF2YQppbmRleCAxNzdmODMwLi42ZDU1MjdkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2ltcGxlLXdhYi13aXRoLWNkaS9zZXJ2bGV0L3Rlc3RzL2NkaS9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW1wbGUtd2FiLXdpdGgtY2RpL3NlcnZsZXQvdGVzdHMvY2RpL1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTUxLDcgKzUxLDcgQEAKICAgICAgICAgICAgIG1zZyArPSAiQmVhbk1hbmFnZXIgSW5qZWN0aW9uIHZpYSBjb21wb25lbnQgZW52aXJvbm1lbnQgbG9va3VwIGZhaWxlZCI7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGJtMSA9PSBudWxsKSBtc2cgKz0gIkJlYW5NYW5hZ2VyIEluamVjdGlvbiB2aWEgY29tcG9uZW50IGVudmlyb25tZW50IGxvb2t1cCBmYWlsZWQiOwotICAgICAgICAKKwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJlYW5NYW5hZ2VyIGlzICIgKyBibSk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmVhbk1hbmFnZXIgdmlhIGxvb2t1cCBpcyAiICsgYm0xKTsKICAgICAgICAgd3JpdGVyLndyaXRlKG1zZyArICJcbiIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbmdsZXRvbi1zdGFydHVwL2hlbGxvL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2luZ2xldG9uLXN0YXJ0dXAvaGVsbG8vYnVpbGQucHJvcGVydGllcwppbmRleCA5ODJjMzQ0Li4wZWRiNmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2luZ2xldG9uLXN0YXJ0dXAvaGVsbG8vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2luZ2xldG9uLXN0YXJ0dXAvaGVsbG8vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTMgKzE1LDEzIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGktc2luZ2xldG9uLWhlbGxvIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAKLTxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz5cdTAwMjAKKzxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic2UuY2xpZW50IiB2YWx1ZT0iY29tLmFjbWUuQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYmVhbnMueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9iZWFucy54bWwiLz4KLQkKKwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2luZ2xldG9uLXN0YXJ0dXAvaGVsbG8vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbmdsZXRvbi1zdGFydHVwL2hlbGxvL2J1aWxkLnhtbAppbmRleCBkMjkyNTBkLi44NWJlZGE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2luZ2xldG9uLXN0YXJ0dXAvaGVsbG8vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW5nbGV0b24tc3RhcnR1cC9oZWxsby9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDEyICs0NiwxMiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZWpiLWphci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9ImNvbS9hY21lLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktamFyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNTksOSArNTksOSBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuX3NlIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bl9zZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgIDxqYXZhICBmb3JrPSJvbiIgCisgICAgICAgPGphdmEgIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2FwcHNlcnYtcnQuamFyOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9IiR7c2UuY2xpZW50fSI+CkBAIC03Miw3ICs3Miw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamFyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2luZ2xldG9uLXN0YXJ0dXAvaGVsbG8vY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbmdsZXRvbi1zdGFydHVwL2hlbGxvL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA5MzNlZGJiLi4zMmFmNzAxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2luZ2xldG9uLXN0YXJ0dXAvaGVsbG8vY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW5nbGV0b24tc3RhcnR1cC9oZWxsby9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTMxLDE3ICszMSwxNyBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgYXBwTmFtZTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKIAotCWFwcE5hbWUgPSBhcmdzWzBdOyAKLQlzdGF0LmFkZERlc2NyaXB0aW9uKGFwcE5hbWUpOwotCUNsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOyAgICAgICAKLSAgICAgICAgY2xpZW50LmRvVGVzdCgpOwkKKyAgICBhcHBOYW1lID0gYXJnc1swXTsKKyAgICBzdGF0LmFkZERlc2NyaXB0aW9uKGFwcE5hbWUpOworICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOworICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KGFwcE5hbWUgKyAiSUQiKTsKICAgICB9CiAKQEAgLTQ5LDM3ICs0OSwzNyBAQAogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogCi0JdHJ5IHsKKyAgICB0cnkgewogCi0JICAgIC8vIEVuc3VyZSB0aGF0IE1FSkIgaXMgcmVnaXN0ZXJlZCB1bmRlciBhbGwgdGhyZWUgb2YgaXRzIEpOREkgbmFtZXMKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29raW5nIHVwIE1FSkIgSG9tZXMiKTsKLQkgICAgTWFuYWdlbWVudEhvbWUgbWgxT2JqID0gKE1hbmFnZW1lbnRIb21lKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImVqYi9tZ210L01FSkIiKTsKLQkgICAgTWFuYWdlbWVudEhvbWUgbWgyT2JqID0gKE1hbmFnZW1lbnRIb21lKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6Z2xvYmFsL21lamIvTUVKQkJlYW4iKTsKLQkgICAgTWFuYWdlbWVudEhvbWUgbWgzT2JqID0gKE1hbmFnZW1lbnRIb21lKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6Z2xvYmFsL21lamIvTUVKQkJlYW4hamF2YXgubWFuYWdlbWVudC5qMmVlLk1hbmFnZW1lbnRIb21lIik7CisgICAgICAgIC8vIEVuc3VyZSB0aGF0IE1FSkIgaXMgcmVnaXN0ZXJlZCB1bmRlciBhbGwgdGhyZWUgb2YgaXRzIEpOREkgbmFtZXMKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29raW5nIHVwIE1FSkIgSG9tZXMiKTsKKyAgICAgICAgTWFuYWdlbWVudEhvbWUgbWgxT2JqID0gKE1hbmFnZW1lbnRIb21lKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImVqYi9tZ210L01FSkIiKTsKKyAgICAgICAgTWFuYWdlbWVudEhvbWUgbWgyT2JqID0gKE1hbmFnZW1lbnRIb21lKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6Z2xvYmFsL21lamIvTUVKQkJlYW4iKTsKKyAgICAgICAgTWFuYWdlbWVudEhvbWUgbWgzT2JqID0gKE1hbmFnZW1lbnRIb21lKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6Z2xvYmFsL21lamIvTUVKQkJlYW4hamF2YXgubWFuYWdlbWVudC5qMmVlLk1hbmFnZW1lbnRIb21lIik7CiAgICAgICAgIGFkZFN0YXR1cygibWVqYiByZWxhdGl2ZSBsb29rdXAiLCAobWgxT2JqICE9IG51bGwpKTsKICAgICAgICAgYWRkU3RhdHVzKCJtZWpiIGdsb2JhbCBsb29rdXAiLCAobWgyT2JqICE9IG51bGwpKTsKICAgICAgICAgYWRkU3RhdHVzKCJtZWpiIGdsb2JhbCBsb29rdXAgd2l0aCBleHBsaWNpdCBNYW5hZ2VkSG9tZSBpbnRlcmZhY2UiLCAobWgzT2JqICE9IG51bGwpKTsKIAotCSAgICBIZWxsbyBoZWxsbyA9IChIZWxsbykgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmdsb2JhbC8iICsgYXBwTmFtZSArICIvU2luZ2xldG9uQmVhbiIpOworICAgICAgICBIZWxsbyBoZWxsbyA9IChIZWxsbykgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmdsb2JhbC8iICsgYXBwTmFtZSArICIvU2luZ2xldG9uQmVhbiIpOwogICAgICAgICBTdHJpbmcgcmVzcG9uc2UgPSBoZWxsby5oZWxsbygpOwogICAgICAgICBhZGRTdGF0dXMoIlNpbmdsZXRvbiBiZWFuIHJlc3BvbnNlIiwgcmVzcG9uc2UuZXF1YWxzKCJoZWxsbywgd29ybGQhXG4iKSk7CiAKLQkgICAgdHJ5IHsKLSAgICAJCWhlbGxvLnRlc3RFcnJvcigpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgaGVsbG8udGVzdEVycm9yKCk7CiAgICAgICAgICAgICBhZGRTdGF0dXMoIkV4cGVjdGVkIEVKQkV4Y2VwdGlvbiBmcm9tIFNpbmdsZXRvbi50ZXN0RXJyb3IoKSIsIGZhbHNlKTsKLQkgICAgCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJFeHBlY3RlZCBFSkJFeGNlcHRpb24iKTsKLQkgICAgfSBjYXRjaChFSkJFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkV4cGVjdGVkIEVKQkV4Y2VwdGlvbiIpOworICAgICAgICB9IGNhdGNoKEVKQkV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBhZGRTdGF0dXMoIkV4cGVjdGVkIEVKQkV4Y2VwdGlvbiBmcm9tIFNpbmdsZXRvbi50ZXN0RXJyb3IoKSIsIHRydWUpOwotCSAgICB9CisgICAgICAgIH0KIAogICAgICAgICBTdHJpbmcgaW5qZWN0aW9uU3RhdHVzID0gaGVsbG8udGVzdEluamVjdGlvbigpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluamVjdGlvbiB0ZXN0cyBpbiBzZXJ2ZXIgcmVzcG9uc2UiKyBpbmplY3Rpb25TdGF0dXMpOwogICAgICAgICBhZGRTdGF0dXMoIlRlc3RpbmcgSW5qZWN0aW9uIGluIEVKQiBTaW5nbGV0b24iICwgaW5qZWN0aW9uU3RhdHVzLnRyaW0oKS5lcXVhbHMoIiIpKTsKIAotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LkRJRF9OT1RfUlVOKTsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuRElEX05PVF9SVU4pOworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgYWRkU3RhdHVzKFN0cmluZyBtZXNzYWdlLCBib29sZWFuIHJlc3VsdCl7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2luZ2xldG9uLXN0YXJ0dXAvaGVsbG8vZWpiL2NvbS9hY21lL0Zvby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbmdsZXRvbi1zdGFydHVwL2hlbGxvL2VqYi9jb20vYWNtZS9Gb28uamF2YQppbmRleCA0NTQ2OTc2Li4zNWE5ZDI3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2luZ2xldG9uLXN0YXJ0dXAvaGVsbG8vZWpiL2NvbS9hY21lL0Zvby5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zaW5nbGV0b24tc3RhcnR1cC9oZWxsby9lamIvY29tL2FjbWUvRm9vLmphdmEKQEAgLTIyLDcgKzIyLDcgQEAKIAogICAgIEBFSkIgSGVsbG8gaGVsbG87CiAgICAgQGpha2FydGEuaW5qZWN0LkluamVjdCBUZXN0QmVhbiB0YjsKLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIHRlc3RJbmplY3Rpb24oKXsKICAgICAgICAgcmV0dXJuIHRiICE9IG51bGw7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NpbmdsZXRvbi1zdGFydHVwL2hlbGxvL2VqYi9jb20vYWNtZS9TaW5nbGV0b25CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2luZ2xldG9uLXN0YXJ0dXAvaGVsbG8vZWpiL2NvbS9hY21lL1NpbmdsZXRvbkJlYW4uamF2YQppbmRleCBhNzU0ZmVjLi4yZDE5MTY2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2luZ2xldG9uLXN0YXJ0dXAvaGVsbG8vZWpiL2NvbS9hY21lL1NpbmdsZXRvbkJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2luZ2xldG9uLXN0YXJ0dXAvaGVsbG8vZWpiL2NvbS9hY21lL1NpbmdsZXRvbkJlYW4uamF2YQpAQCAtMzcsOSArMzcsOSBAQAogICAgIEZvbyBmb287CiAgICAgQEluamVjdAogICAgIFRlc3RCZWFuIHRiOwotICAgIAorCiAgICAgQmFyIGI7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgcHVibGljIFNpbmdsZXRvbkJlYW4oQmFyIGIpewogICAgICAgICB0aGlzLmIgPSBiOwpAQCAtNzEsNyArNzEsNyBAQAogICAgICAgICBpZiAoIWZvby50ZXN0SW5qZWN0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gInRlc3RJbmplY3Rpb24gaW4gRm9vIGZhaWxlZCI7CiAgICAgICAgIGlmIChiID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gIkNvbnN0cnVjdG9yIEluamVjdGlvbiBvZiBiZWFuIGZhaWxlZCI7IAorICAgICAgICAgICAgcmV0dXJuICJDb25zdHJ1Y3RvciBJbmplY3Rpb24gb2YgYmVhbiBmYWlsZWQiOwogICAgICAgICByZXR1cm4gIiI7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2xmNGotdmlzaWJpbGl0eS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2xmNGotdmlzaWJpbGl0eS9XZWJUZXN0LmphdmEKaW5kZXggNTExODA2Zi4uMGJjYTJjMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NsZjRqLXZpc2liaWxpdHkvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zbGY0ai12aXNpYmlsaXR5L1dlYlRlc3QuamF2YQpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBAV2ViU2VydmxldCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTUwLDcgKzUwLDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKQEAgLTYwLDcgKzYwLDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICArICIvbXl1cmwiOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9wZW5pbmcgY29ubmVjdGlvbiB0byAiICsgdXJsKTsKQEAgLTk5LDExICs5OSwxMSBAQAogICAgICAgICAgICAgaWYgKGlzRXhwZWN0ZWRSZXNwb25zZShsaW5lKSkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6IG9yZy5qYm9zcy5sb2dnaW5nLkpES0xvZ2dlciBhbmQgb3JnLmpib3NzLmxvZ2dpbmcuamJvc3MtbG9nZ2luZyBpbiBvdXRwdXQiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6IG9yZy5qYm9zcy5sb2dnaW5nLkpES0xvZ2dlciBhbmQgb3JnLmpib3NzLmxvZ2dpbmcuamJvc3MtbG9nZ2luZyBpbiBvdXRwdXQiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiAKICAgICBwcml2YXRlIGJvb2xlYW4gaXNFeHBlY3RlZFJlc3BvbnNlKFN0cmluZyBsaW5lKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2xmNGotdmlzaWJpbGl0eS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NsZjRqLXZpc2liaWxpdHkvYnVpbGQucHJvcGVydGllcwppbmRleCAxNDQ2N2ZkLi5jOWE5ZGRjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2xmNGotdmlzaWJpbGl0eS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zbGY0ai12aXNpYmlsaXR5L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2xmNGotdmlzaWJpbGl0eSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NsZjRqLXZpc2liaWxpdHkvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NsZjRqLXZpc2liaWxpdHkvYnVpbGQueG1sCmluZGV4IDgzYWQ2NjYuLjA2OTEyMTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zbGY0ai12aXNpYmlsaXR5L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2xmNGotdmlzaWJpbGl0eS9idWlsZC54bWwKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDcsMjMgKzQ3LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzUsMTAgKzc1LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NsZjRqLXZpc2liaWxpdHkvc2VydmxldC9UZXN0QmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NsZjRqLXZpc2liaWxpdHkvc2VydmxldC9UZXN0QmVhbi5qYXZhCmluZGV4IDZkMDU5ZTIuLmM0MzYzOTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zbGY0ai12aXNpYmlsaXR5L3NlcnZsZXQvVGVzdEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2xmNGotdmlzaWJpbGl0eS9zZXJ2bGV0L1Rlc3RCZWFuLmphdmEKQEAgLTE0LDcgKzE0LDcgQEAKICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogICovCiAKLS8vU2ltcGxlIFRlc3RCZWFuIHRvIHRlc3QgQ0RJLiAKKy8vU2ltcGxlIFRlc3RCZWFuIHRvIHRlc3QgQ0RJLgogLy9UaGlzIGJlYW4gaW1wbGVtZW50cyBTZXJpYWxpemFibGUgYXMgaXQgbmVlZHMgdG8gYmUgcGxhY2VkIGludG8gYSBTdGF0ZWZ1bCBCZWFuCiBwdWJsaWMgY2xhc3MgVGVzdEJlYW4KIHt9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2xmNGotdmlzaWJpbGl0eS9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc21va2UtdGVzdHMvc2xmNGotdmlzaWJpbGl0eS9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggZmZjNDA5Yi4uMzFlYzNiMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Ntb2tlLXRlc3RzL3NsZjRqLXZpc2liaWxpdHkvc2VydmxldC9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zbW9rZS10ZXN0cy9zbGY0ai12aXNpYmlsaXR5L3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQpAQCAtNTIsMTUgKzUyLDE1IEBACiAgICAgICAgIH0KICAgICAgICAgaWYgKGJtMSA9PSBudWxsKSBtc2cgKz0gIkJlYW5NYW5hZ2VyIEluamVjdGlvbiB2aWEgY29tcG9uZW50IGVudmlyb25tZW50IGxvb2t1cCBmYWlsZWQiOwogCi0gICAgICAgIAorCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmVhbk1hbmFnZXIgaXMgIiArIGJtKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCZWFuTWFuYWdlciB2aWEgbG9va3VwIGlzICIgKyBibTEpOwotICAgICAgICAKKwogICAgICAgICBMb2dnZXIgbCA9IExvZ2dlci5nZXRMb2dnZXIoZ2V0Q2xhc3MoKSk7CiAgICAgICAgIFN0cmluZyBzID0gIlsgSGVsbG8gV29ybGQgaXMgbG9nZ2VkIGJ5IGFuIGluc3RhbmNlIG9mICIgKyBsLmdldENsYXNzKCkgKyAiLCB3aGljaCBpcyBsb2FkZWQgYnkgIiArIGwuZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpICsgIl0iOwogICAgICAgICBtc2cgKz0gczsKICAgICAgICAgbC5pbmZvKHMpOwotICAgICAgICAKKwogICAgICAgICB3cml0ZXIud3JpdGUobXNnICsgIlxuIik7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3NwZWNpYWxpemF0aW9uL2FsdGVybmF0aXZlLWxlYWtzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vYWx0ZXJuYXRpdmUtbGVha3MvYnVpbGQucHJvcGVydGllcwppbmRleCA4MjUwNjgyLi4yNGU0NzYxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vYWx0ZXJuYXRpdmUtbGVha3MvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vYWx0ZXJuYXRpdmUtbGVha3MvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zcGVjaWFsaXphdGlvbi1sZWFrLWFsdGVybmF0aXZlcyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3NwZWNpYWxpemF0aW9uL2FsdGVybmF0aXZlLWxlYWtzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zcGVjaWFsaXphdGlvbi9hbHRlcm5hdGl2ZS1sZWFrcy9idWlsZC54bWwKaW5kZXggMGI5YjNhMy4uMGExZjJmOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3NwZWNpYWxpemF0aW9uL2FsdGVybmF0aXZlLWxlYWtzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vYWx0ZXJuYXRpdmUtbGVha3MvYnVpbGQueG1sCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9ImNsaWVudC90ZXN0L2NsaWVudCIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDgsMjMgKzQ4LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9ImNsaWVudCIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9InRlc3QvY2xpZW50L1dlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0idGVzdC5jbGllbnQuV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vYWx0ZXJuYXRpdmUtbGVha3MvZGVzY3JpcHRvci9iZWFucy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vYWx0ZXJuYXRpdmUtbGVha3MvZGVzY3JpcHRvci9iZWFucy54bWwKaW5kZXggMWNkOTZjMy4uMWYyNGYxNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3NwZWNpYWxpemF0aW9uL2FsdGVybmF0aXZlLWxlYWtzL2Rlc2NyaXB0b3IvYmVhbnMueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zcGVjaWFsaXphdGlvbi9hbHRlcm5hdGl2ZS1sZWFrcy9kZXNjcmlwdG9yL2JlYW5zLnhtbApAQCAtMjksNSArMjksNSBAQAogICAgPGFsdGVybmF0aXZlcz4KICAgIDxzdGVyZW90eXBlPnRlc3QuYmVhbnMuYXJ0aWZhY3RzLk1vY2tTdGVyZW90eXBlPC9zdGVyZW90eXBlPgogICAgPC9hbHRlcm5hdGl2ZXM+Ci0gICAKKwogPC9iZWFucz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zcGVjaWFsaXphdGlvbi9hbHRlcm5hdGl2ZS1sZWFrcy9zZXJ2bGV0L3Rlc3QvYmVhbnMvYXJ0aWZhY3RzL1JlcXVpcmVzTmV3VHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3NwZWNpYWxpemF0aW9uL2FsdGVybmF0aXZlLWxlYWtzL3NlcnZsZXQvdGVzdC9iZWFucy9hcnRpZmFjdHMvUmVxdWlyZXNOZXdUcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEKaW5kZXggMWJlNWQxMS4uMzk2ODkxMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3NwZWNpYWxpemF0aW9uL2FsdGVybmF0aXZlLWxlYWtzL3NlcnZsZXQvdGVzdC9iZWFucy9hcnRpZmFjdHMvUmVxdWlyZXNOZXdUcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3NwZWNpYWxpemF0aW9uL2FsdGVybmF0aXZlLWxlYWtzL3NlcnZsZXQvdGVzdC9iZWFucy9hcnRpZmFjdHMvUmVxdWlyZXNOZXdUcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEKQEAgLTMwLDEwICszMCwxMCBAQAogICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBhcm91bmRJbnZva2VDYWxsZWQgPSBmYWxzZTsKICAgICBwdWJsaWMgc3RhdGljIGludCBhcm91bmRJbnZva2VJbnZvY2F0aW9uQ291bnQgPSAwOwogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGVycm9yTWVzc2FnZSA9ICIiOwotICAgIAorCiAgICAgQEluamVjdAogICAgIFRlc3REZXBlbmRlbnRCZWFuIHRiOwotICAgIAorCiAgICAgQEFyb3VuZEludm9rZQogICAgIHB1YmxpYyBPYmplY3QgbWFuYWdlVHJhbnNhY3Rpb24oSW52b2NhdGlvbkNvbnRleHQgY3R4KSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXF1aXJlc05ld1RyYW5zYWN0aW9uSW50ZXJjZXB0b3I6OkFyb3VuZEludm9rZSIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3NwZWNpYWxpemF0aW9uL2FsdGVybmF0aXZlLWxlYWtzL3NlcnZsZXQvdGVzdC9iZWFucy9hcnRpZmFjdHMvVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3NwZWNpYWxpemF0aW9uL2FsdGVybmF0aXZlLWxlYWtzL3NlcnZsZXQvdGVzdC9iZWFucy9hcnRpZmFjdHMvVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCmluZGV4IDg5Yjc0M2EuLmY1ZGExNGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zcGVjaWFsaXphdGlvbi9hbHRlcm5hdGl2ZS1sZWFrcy9zZXJ2bGV0L3Rlc3QvYmVhbnMvYXJ0aWZhY3RzL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vYWx0ZXJuYXRpdmUtbGVha3Mvc2VydmxldC90ZXN0L2JlYW5zL2FydGlmYWN0cy9UcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEKQEAgLTI5LDE1ICsyOSwxNSBAQAogICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBhcm91bmRJbnZva2VDYWxsZWQgPSBmYWxzZTsKICAgICBwdWJsaWMgc3RhdGljIGludCBhcm91bmRJbnZva2VJbnZvY2F0aW9uQ291bnQgPSAwOwogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGVycm9yTWVzc2FnZSA9ICIiOwotICAgIAorCiAgICAgQEluamVjdAogICAgIFRlc3REZXBlbmRlbnRCZWFuIHRiOwotICAgIAorCiAgICAgQEFyb3VuZEludm9rZQogICAgIHB1YmxpYyBPYmplY3QgbWFuYWdlVHJhbnNhY3Rpb24oSW52b2NhdGlvbkNvbnRleHQgY3R4KSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUcmFuc2FjdGlvbkludGVyY2VwdG9yOjpBcm91bmRJbnZva2UiKTsKICAgICAgICAgaWYgKHRiID09IG51bGwpIGVycm9yTWVzc2FnZT0iRGVwZW5kZW5jeSBJbmplY3Rpb24gIiArCi0gICAgICAgIAkJImludG8gVHJhbnNhY3Rpb25JbnRlcmNlcHRvciBmYWlsZWQiOworICAgICAgICAgICAgICAgICJpbnRvIFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IgZmFpbGVkIjsKICAgICAgICAgYXJvdW5kSW52b2tlQ2FsbGVkID0gdHJ1ZTsKICAgICAgICAgYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50ICsrOwogICAgICAgICByZXR1cm4gY3R4LnByb2NlZWQoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zcGVjaWFsaXphdGlvbi9hbHRlcm5hdGl2ZS1sZWFrcy9zZXJ2bGV0L3Rlc3QvYmVhbnMvbW9jay9Nb2NrU2hvcHBpbmdDYXJ0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vYWx0ZXJuYXRpdmUtbGVha3Mvc2VydmxldC90ZXN0L2JlYW5zL21vY2svTW9ja1Nob3BwaW5nQ2FydC5qYXZhCmluZGV4IGZkNjAxMzguLjZkOTdkYzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zcGVjaWFsaXphdGlvbi9hbHRlcm5hdGl2ZS1sZWFrcy9zZXJ2bGV0L3Rlc3QvYmVhbnMvbW9jay9Nb2NrU2hvcHBpbmdDYXJ0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3NwZWNpYWxpemF0aW9uL2FsdGVybmF0aXZlLWxlYWtzL3NlcnZsZXQvdGVzdC9iZWFucy9tb2NrL01vY2tTaG9wcGluZ0NhcnQuamF2YQpAQCAtMjcsMTEgKzI3LDExIEBACiAKIHB1YmxpYyBjbGFzcyBNb2NrU2hvcHBpbmdDYXJ0ICBleHRlbmRzIFNob3BwaW5nQ2FydHsKICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gbW9ja1Nob3BwaW5nQ2FydEludm9rZWQgPSBmYWxzZTsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGFkZEl0ZW0oU3RyaW5nIHMpIHsKICAgICAgICAgbW9ja1Nob3BwaW5nQ2FydEludm9rZWQgPSB0cnVlOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk1vY2tTaG9wcGluZ0NhcnQ6OmFkZEl0ZW0gY2FsbGVkIik7Ci0gICAgICAgIAorCiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vYWx0ZXJuYXRpdmUtbGVha3Mvc2VydmxldC90ZXN0L2JlYW5zL25vbm1vY2svU2hvcHBpbmdDYXJ0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vYWx0ZXJuYXRpdmUtbGVha3Mvc2VydmxldC90ZXN0L2JlYW5zL25vbm1vY2svU2hvcHBpbmdDYXJ0LmphdmEKaW5kZXggNTQwODc1OC4uZGZmNmUzMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3NwZWNpYWxpemF0aW9uL2FsdGVybmF0aXZlLWxlYWtzL3NlcnZsZXQvdGVzdC9iZWFucy9ub25tb2NrL1Nob3BwaW5nQ2FydC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zcGVjaWFsaXphdGlvbi9hbHRlcm5hdGl2ZS1sZWFrcy9zZXJ2bGV0L3Rlc3QvYmVhbnMvbm9ubW9jay9TaG9wcGluZ0NhcnQuamF2YQpAQCAtMjgsNyArMjgsNyBAQAogICAgIHB1YmxpYyB2b2lkIGFkZEl0ZW0oU3RyaW5nIHMpIHsKICAgICAgICAgc2hvcHBpbmdDYXJ0SW52b2tlZCA9IHRydWU7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2hvcHBpbmdDYXJ0OjphZGRJdGVtIGNhbGxlZCIpOwotICAgICAgICAKKwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3NwZWNpYWxpemF0aW9uL2FsdGVybmF0aXZlLWxlYWtzL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L0xlYWtRdWFsaWZpZXJUZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3NwZWNpYWxpemF0aW9uL2FsdGVybmF0aXZlLWxlYWtzL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L0xlYWtRdWFsaWZpZXJUZXN0U2VydmxldC5qYXZhCmluZGV4IDUxOTI5OWUuLjFiZmFkYWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zcGVjaWFsaXphdGlvbi9hbHRlcm5hdGl2ZS1sZWFrcy9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9MZWFrUXVhbGlmaWVyVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vYWx0ZXJuYXRpdmUtbGVha3Mvc2VydmxldC90ZXN0L3NlcnZsZXQvTGVha1F1YWxpZmllclRlc3RTZXJ2bGV0LmphdmEKQEAgLTQyLDExICs0MiwxMSBAQAogICAgIEBJbmplY3QKICAgICBAUHJlZmVycmVkCiAgICAgVGVzdEJlYW5JbnRlcmZhY2UgdGI7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgQExlYWtRdWFsaWZpZXIKICAgICBUZXN0QmVhbkludGVyZmFjZSB0Yl9sZWFrOwotICAgIAorCiAgICAgQEluamVjdAogICAgIEBQcmVmZXJyZWQKICAgICBTaG9wcGluZ0NhcnQgc2M7CkBAIC03MywxOSArNzMsMTkgQEAKICAgICAgICAgICAgICAgICAgICAgKyBUcmFuc2FjdGlvbkludGVyY2VwdG9yLmFyb3VuZEludm9rZUludm9jYXRpb25Db3VudDsKICAgICAgICAgaWYgKCFUcmFuc2FjdGlvbkludGVyY2VwdG9yLmVycm9yTWVzc2FnZS50cmltKCkuZXF1YWxzKCIiKSkKICAgICAgICAgICAgIG1zZyArPSBUcmFuc2FjdGlvbkludGVyY2VwdG9yLmVycm9yTWVzc2FnZTsKLSAgICAgICAgCisKICAgICAgICAgaWYgKFJlcXVpcmVzTmV3VHJhbnNhY3Rpb25JbnRlcmNlcHRvci5hcm91bmRJbnZva2VDYWxsZWQpCiAgICAgICAgICAgICBtc2cgKz0gIlJlcXVpcmVzTmV3IFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IgY2FsbGVkIHdoZW4gIiArCi0gICAgICAgICAgICAJCSJpdCBzaG91bGRuJ3QgaGF2ZSBiZWVuIGNhbGxlZCI7Ci0gICAgICAgIAorICAgICAgICAgICAgICAgICAgICAiaXQgc2hvdWxkbid0IGhhdmUgYmVlbiBjYWxsZWQiOworCiAgICAgICAgIC8vdGVzdCB0aGF0IHRoZSBtb2NrcyBhcmUgY2FsbGVkIGluc3RlYWQgb2YgdGhlIGFjdHVhbCBiZWFucwogICAgICAgICBpZiAoVGVzdEJlYW4udGVzdEJlYW5JbnZva2VkKQogICAgICAgICAgICAgbXNnICs9ICJUZXN0IEJlYW4gaW52b2tlZCB3aGVuIGFjdHVhbGx5IG1vY2sgYmVhbiBzaG91bGQgIiArCi0gICAgICAgICAgICAJCSJoYXZlIGJlZW4gaW52b2tlZCI7Ci0gICAgICAgIAorICAgICAgICAgICAgICAgICAgICAiaGF2ZSBiZWVuIGludm9rZWQiOworCiAgICAgICAgIGlmICghTW9ja0JlYW4ubW9ja0JlYW5JbnZva2VkKQogICAgICAgICAgICAgbXNnICs9ICJNb2NrIGJlYW4gbm90IGludm9rZWQiOwotICAgICAgICAKKwogICAgICAgICBUcmFuc2FjdGlvbkludGVyY2VwdG9yLmNsZWFyKCk7CiAgICAgICAgIC8vaW52b2tlIHNob3BwaW5nIGNhcnQgYmVhbi4gU2hvcHBpbmdDYXJ0IGJlYW4gdXNlcyBhIFN0ZXJlb3R5cGUgdG8KICAgICAgICAgLy9hc3NpZ24gdGhlIHJlcXVpcmVzIG5ldyB0cmFuc2FjdGlvbiBpbnRlcmNlcHRvcgpAQCAtOTQsMjggKzk0LDI4IEBACiAgICAgICAgIHNjLmFkZEl0ZW0oIlRlc3QgSXRlbSIpOwogICAgICAgICBpZiAoIVJlcXVpcmVzTmV3VHJhbnNhY3Rpb25JbnRlcmNlcHRvci5hcm91bmRJbnZva2VDYWxsZWQpCiAgICAgICAgICAgICBtc2cgKz0gIkJ1c2luZXNzIG1ldGhvZCBpbnRlcmNlcHRvciBhcm91bmRJbnZva2UgaW4gcmVxdWlyZXMgbmV3ICIgKwotICAgICAgICAgICAgCQkidHJhbnNhY3Rpb24gaW50ZXJjZXB0b3Igbm90IGNhbGxlZCI7CisgICAgICAgICAgICAgICAgICAgICJ0cmFuc2FjdGlvbiBpbnRlcmNlcHRvciBub3QgY2FsbGVkIjsKICAgICAgICAgaWYgKFJlcXVpcmVzTmV3VHJhbnNhY3Rpb25JbnRlcmNlcHRvci5hcm91bmRJbnZva2VJbnZvY2F0aW9uQ291bnQgIT0gMSkKICAgICAgICAgICAgIG1zZyArPSAiQnVzaW5lc3MgbWV0aG9kIHJlcXVpcmVzIG5ldyBpbnRlcmNlcHRvciBpbnZvY2F0aW9uIG9uICIgKwotICAgICAgICAgICAgCQkibWV0aG9kLWxldmVsIGludGVyY2VwdG9yIGFubm90YXRpb24gY291bnQgbm90IGV4cGVjdGVkLiAiCisgICAgICAgICAgICAgICAgICAgICJtZXRob2QtbGV2ZWwgaW50ZXJjZXB0b3IgYW5ub3RhdGlvbiBjb3VudCBub3QgZXhwZWN0ZWQuICIKICAgICAgICAgICAgICAgICAgICAgKyAiZXhwZWN0ZWQgPTEsIGFjdHVhbD0iCiAgICAgICAgICAgICAgICAgICAgICsgUmVxdWlyZXNOZXdUcmFuc2FjdGlvbkludGVyY2VwdG9yLmFyb3VuZEludm9rZUludm9jYXRpb25Db3VudDsKICAgICAgICAgaWYgKCFSZXF1aXJlc05ld1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuZXJyb3JNZXNzYWdlLnRyaW0oKS5lcXVhbHMoIiIpKQogICAgICAgICAgICAgbXNnICs9IFJlcXVpcmVzTmV3VHJhbnNhY3Rpb25JbnRlcmNlcHRvci5lcnJvck1lc3NhZ2U7Ci0gICAgICAgIAorCiAgICAgICAgIC8vVHJhbnNhY3Rpb25JbnRlcmNlcHRvciBzaG91bGQgbm90IGJlIGNhbGxlZAogICAgICAgICBpZiAoVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5hcm91bmRJbnZva2VDYWxsZWQpCiAgICAgICAgICAgICBtc2cgKz0gIlRyYW5zY2F0aW9uSW50ZXJjZXB0b3IgYXJvdW5kSW52b2tlIGNhbGxlZCB3aGVuIGEgcmVxdWlyZXNuZXciICsKLSAgICAgICAgICAgIAkJInRyYW5zYWN0aW9uIGludGVyY2VwdG9yIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIjsKLSAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICJ0cmFuc2FjdGlvbiBpbnRlcmNlcHRvciBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCI7CisKICAgICAgICAgLy90ZXN0IHRoYXQgdGhlIG1vY2tzIGFyZSBjYWxsZWQgaW5zdGVhZCBvZiB0aGUgYWN0dWFsIGJlYW5zCiAgICAgICAgIGlmIChTaG9wcGluZ0NhcnQuc2hvcHBpbmdDYXJ0SW52b2tlZCkKICAgICAgICAgICAgIG1zZyArPSAiVGVzdCBzaG9wcGluZyBjYXJ0IGludm9rZWQgd2hlbiBhY3R1YWxseSBtb2NrIHNob3BwaW5nIGNhcnQgIiArCi0gICAgICAgICAgICAJCSJzaG91bGQgaGF2ZSBiZWVuIGludm9rZWQiOwotICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgInNob3VsZCBoYXZlIGJlZW4gaW52b2tlZCI7CisKICAgICAgICAgaWYgKCFNb2NrU2hvcHBpbmdDYXJ0Lm1vY2tTaG9wcGluZ0NhcnRJbnZva2VkKQogICAgICAgICAgICAgbXNnICs9ICJNb2NrIHNob3BwaW5nIGNhcnQgbm90IGludm9rZWQiOwotICAgICAgICAKKwogICAgICAgICAvL3Rlc3QgQW5vdGhlclRlc3RCZWFuV2l0aExlYWtRdWFsaWZpZXIgd2FzIGluamVjdGVkIGZvciBMZWFrUXVhbGlmaWVyLgogICAgICAgICAvL1RoZXJlIGFyZSBubyBtb2NrcyBmb3IgYSBMZWFrUXVhbGlmaWVyIGFubm90YXRlZCBiZWFuIGFuZCBzbwogICAgICAgICAvL3RoZSBhY3R1YWwgbm9uLW1vY2sgQW5vdGhlclRlc3RCZWFuV2l0aExlYWtRdWFsaWZpZXIgaXMgaW5qZWN0ZWQKQEAgLTEyMywxMCArMTIzLDEwIEBACiAgICAgICAgIC8vYW5kIGlzIG92ZXJjb21lIGJ5IHVzaW5nIFNwZWNpYWxpemVzCiAgICAgICAgIGlmICh0Yl9sZWFrID09IG51bGwpCiAgICAgICAgICAgICBtc2cgKz0gImxlYWsgYmVhbiB3YXMgbm90IGluamVjdGVkIjsKLSAgICAgICAgCisKICAgICAgICAgaWYgKCEodGJfbGVhayBpbnN0YW5jZW9mIEFub3RoZXJUZXN0QmVhbldpdGhMZWFrUXVhbGlmaWVyKSkKICAgICAgICAgICAgIG1zZyArPSAibGVhayBiZWFuIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBBbm90aGVyVGVzdEJlYW5XaXRoTGVha1F1YWxpZmllciI7Ci0gICAgICAgIAorCiAKICAgICAgICAgd3JpdGVyLndyaXRlKG1zZyArICJcbiIpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zcGVjaWFsaXphdGlvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vYnVpbGQueG1sCmluZGV4IGY3YTJiMjcuLjlhNzk4OGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zcGVjaWFsaXphdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3NwZWNpYWxpemF0aW9uL2J1aWxkLnhtbApAQCAtODMsMTUgKzgzLDE1IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4gVXNhZ2U6Ci0JCWFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgc3BlY2lhbGl6YXRpb24gdGVzdHMpCi0JCWFudCBjbGVhbiAoY2xlYW5zIGFsbCB0aGUgc3BlY2lhbGl6YXRpb24gdGVzdHMpCi0JCWFudCBidWlsZCAoYnVpbGRzIGFsbCB0aGUgc3BlY2lhbGl6YXRpb24gdGVzdHMpCi0JCWFudCBzZXR1cCAoc2V0cyB1cCBhbGwgcmVzb3VyY2VzIGZvciBzcGVjaWFsaXphdGlvbiB0ZXN0cykKLQkJYW50IGRlcGxveSAoZGVwbG95cyBhbGwgdGhlIHNwZWNpYWxpemF0aW9uIGFwcHMpCi0JCWFudCBydW4gKEV4ZWN1dGVzIGFsbCB0aGUgc3BlY2lhbGl6YXRpb24gdGVzdHMpCi0JCWFudCB1bmRlcGxveSAodW5kZXBsb3lzIGFsbCB0aGUgIHNwZWNpYWxpemF0aW9uIGFwcHMpCi0JCWFudCB1bnNldHVwICh1bnNldHMgYWxsIHJlc291cmNlcyBmb3Igc3BlY2lhbGl6YXRpb24gdGVzdHMpCi0JPC9lY2hvPgorICAgIDxlY2hvPiBVc2FnZToKKyAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBzcGVjaWFsaXphdGlvbiB0ZXN0cykKKyAgICAgICAgYW50IGNsZWFuIChjbGVhbnMgYWxsIHRoZSBzcGVjaWFsaXphdGlvbiB0ZXN0cykKKyAgICAgICAgYW50IGJ1aWxkIChidWlsZHMgYWxsIHRoZSBzcGVjaWFsaXphdGlvbiB0ZXN0cykKKyAgICAgICAgYW50IHNldHVwIChzZXRzIHVwIGFsbCByZXNvdXJjZXMgZm9yIHNwZWNpYWxpemF0aW9uIHRlc3RzKQorICAgICAgICBhbnQgZGVwbG95IChkZXBsb3lzIGFsbCB0aGUgc3BlY2lhbGl6YXRpb24gYXBwcykKKyAgICAgICAgYW50IHJ1biAoRXhlY3V0ZXMgYWxsIHRoZSBzcGVjaWFsaXphdGlvbiB0ZXN0cykKKyAgICAgICAgYW50IHVuZGVwbG95ICh1bmRlcGxveXMgYWxsIHRoZSAgc3BlY2lhbGl6YXRpb24gYXBwcykKKyAgICAgICAgYW50IHVuc2V0dXAgKHVuc2V0cyBhbGwgcmVzb3VyY2VzIGZvciBzcGVjaWFsaXphdGlvbiB0ZXN0cykKKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vc3BlY2lhbGl6YXRpb24tc2ltcGxlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vc3BlY2lhbGl6YXRpb24tc2ltcGxlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOWEwMmUxNC4uYWQ2OGJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3NwZWNpYWxpemF0aW9uL3NwZWNpYWxpemF0aW9uLXNpbXBsZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zcGVjaWFsaXphdGlvbi9zcGVjaWFsaXphdGlvbi1zaW1wbGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zaW1wbGUtc3BlY2lhbGl6YXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zcGVjaWFsaXphdGlvbi9zcGVjaWFsaXphdGlvbi1zaW1wbGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3NwZWNpYWxpemF0aW9uL3NwZWNpYWxpemF0aW9uLXNpbXBsZS9idWlsZC54bWwKaW5kZXggMGI5YjNhMy4uMGExZjJmOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3NwZWNpYWxpemF0aW9uL3NwZWNpYWxpemF0aW9uLXNpbXBsZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3NwZWNpYWxpemF0aW9uL3NwZWNpYWxpemF0aW9uLXNpbXBsZS9idWlsZC54bWwKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iY2xpZW50L3Rlc3QvY2xpZW50IiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00OCwyMyArNDgsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iY2xpZW50IiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0idGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJ0ZXN0LmNsaWVudC5XZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zcGVjaWFsaXphdGlvbi9zcGVjaWFsaXphdGlvbi1zaW1wbGUvZGVzY3JpcHRvci9iZWFucy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vc3BlY2lhbGl6YXRpb24tc2ltcGxlL2Rlc2NyaXB0b3IvYmVhbnMueG1sCmluZGV4IDFjZDk2YzMuLjFmMjRmMTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zcGVjaWFsaXphdGlvbi9zcGVjaWFsaXphdGlvbi1zaW1wbGUvZGVzY3JpcHRvci9iZWFucy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3NwZWNpYWxpemF0aW9uL3NwZWNpYWxpemF0aW9uLXNpbXBsZS9kZXNjcmlwdG9yL2JlYW5zLnhtbApAQCAtMjksNSArMjksNSBAQAogICAgPGFsdGVybmF0aXZlcz4KICAgIDxzdGVyZW90eXBlPnRlc3QuYmVhbnMuYXJ0aWZhY3RzLk1vY2tTdGVyZW90eXBlPC9zdGVyZW90eXBlPgogICAgPC9hbHRlcm5hdGl2ZXM+Ci0gICAKKwogPC9iZWFucz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zcGVjaWFsaXphdGlvbi9zcGVjaWFsaXphdGlvbi1zaW1wbGUvc2VydmxldC90ZXN0L2JlYW5zL2FydGlmYWN0cy9SZXF1aXJlc05ld1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zcGVjaWFsaXphdGlvbi9zcGVjaWFsaXphdGlvbi1zaW1wbGUvc2VydmxldC90ZXN0L2JlYW5zL2FydGlmYWN0cy9SZXF1aXJlc05ld1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YQppbmRleCAxYmU1ZDExLi4zOTY4OTEyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vc3BlY2lhbGl6YXRpb24tc2ltcGxlL3NlcnZsZXQvdGVzdC9iZWFucy9hcnRpZmFjdHMvUmVxdWlyZXNOZXdUcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3NwZWNpYWxpemF0aW9uL3NwZWNpYWxpemF0aW9uLXNpbXBsZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvYXJ0aWZhY3RzL1JlcXVpcmVzTmV3VHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCkBAIC0zMCwxMCArMzAsMTAgQEAKICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gYXJvdW5kSW52b2tlQ2FsbGVkID0gZmFsc2U7CiAgICAgcHVibGljIHN0YXRpYyBpbnQgYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50ID0gMDsKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBlcnJvck1lc3NhZ2UgPSAiIjsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBUZXN0RGVwZW5kZW50QmVhbiB0YjsKLSAgICAKKwogICAgIEBBcm91bmRJbnZva2UKICAgICBwdWJsaWMgT2JqZWN0IG1hbmFnZVRyYW5zYWN0aW9uKEludm9jYXRpb25Db250ZXh0IGN0eCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVxdWlyZXNOZXdUcmFuc2FjdGlvbkludGVyY2VwdG9yOjpBcm91bmRJbnZva2UiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zcGVjaWFsaXphdGlvbi9zcGVjaWFsaXphdGlvbi1zaW1wbGUvc2VydmxldC90ZXN0L2JlYW5zL2FydGlmYWN0cy9UcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vc3BlY2lhbGl6YXRpb24tc2ltcGxlL3NlcnZsZXQvdGVzdC9iZWFucy9hcnRpZmFjdHMvVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCmluZGV4IDg5Yjc0M2EuLmY1ZGExNGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zcGVjaWFsaXphdGlvbi9zcGVjaWFsaXphdGlvbi1zaW1wbGUvc2VydmxldC90ZXN0L2JlYW5zL2FydGlmYWN0cy9UcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3NwZWNpYWxpemF0aW9uL3NwZWNpYWxpemF0aW9uLXNpbXBsZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvYXJ0aWZhY3RzL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YQpAQCAtMjksMTUgKzI5LDE1IEBACiAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGFyb3VuZEludm9rZUNhbGxlZCA9IGZhbHNlOwogICAgIHB1YmxpYyBzdGF0aWMgaW50IGFyb3VuZEludm9rZUludm9jYXRpb25Db3VudCA9IDA7CiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZXJyb3JNZXNzYWdlID0gIiI7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgVGVzdERlcGVuZGVudEJlYW4gdGI7Ci0gICAgCisKICAgICBAQXJvdW5kSW52b2tlCiAgICAgcHVibGljIE9iamVjdCBtYW5hZ2VUcmFuc2FjdGlvbihJbnZvY2F0aW9uQ29udGV4dCBjdHgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRyYW5zYWN0aW9uSW50ZXJjZXB0b3I6OkFyb3VuZEludm9rZSIpOwogICAgICAgICBpZiAodGIgPT0gbnVsbCkgZXJyb3JNZXNzYWdlPSJEZXBlbmRlbmN5IEluamVjdGlvbiAiICsKLSAgICAgICAgCQkiaW50byBUcmFuc2FjdGlvbkludGVyY2VwdG9yIGZhaWxlZCI7CisgICAgICAgICAgICAgICAgImludG8gVHJhbnNhY3Rpb25JbnRlcmNlcHRvciBmYWlsZWQiOwogICAgICAgICBhcm91bmRJbnZva2VDYWxsZWQgPSB0cnVlOwogICAgICAgICBhcm91bmRJbnZva2VJbnZvY2F0aW9uQ291bnQgKys7CiAgICAgICAgIHJldHVybiBjdHgucHJvY2VlZCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3NwZWNpYWxpemF0aW9uL3NwZWNpYWxpemF0aW9uLXNpbXBsZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvbW9jay9Nb2NrQW5vdGhlclF1YWxpZmllclByb2R1Y2VyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vc3BlY2lhbGl6YXRpb24tc2ltcGxlL3NlcnZsZXQvdGVzdC9iZWFucy9tb2NrL01vY2tBbm90aGVyUXVhbGlmaWVyUHJvZHVjZXIuamF2YQppbmRleCBlYTVkOWRjLi45MWIxMzljIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vc3BlY2lhbGl6YXRpb24tc2ltcGxlL3NlcnZsZXQvdGVzdC9iZWFucy9tb2NrL01vY2tBbm90aGVyUXVhbGlmaWVyUHJvZHVjZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vc3BlY2lhbGl6YXRpb24tc2ltcGxlL3NlcnZsZXQvdGVzdC9iZWFucy9tb2NrL01vY2tBbm90aGVyUXVhbGlmaWVyUHJvZHVjZXIuamF2YQpAQCAtMjYsNyArMjYsNyBAQAogCiBwdWJsaWMgY2xhc3MgTW9ja0Fub3RoZXJRdWFsaWZpZXJQcm9kdWNlciBleHRlbmRzIEFub3RoZXJRdWFsaWZpZXJQcm9kdWNlcnsKICAgICBAUHJvZHVjZXMgQFNwZWNpYWxpemVzCi0gICAgLy9XZSBkb24ndCBzcGVjaWZ5IEFub3RoZXJRdWFsaWZpZXIgaGVyZS4gSXQgaXMgaW5oZXJpdGVkIGZyb20gCisgICAgLy9XZSBkb24ndCBzcGVjaWZ5IEFub3RoZXJRdWFsaWZpZXIgaGVyZS4gSXQgaXMgaW5oZXJpdGVkIGZyb20KICAgICAvL0Fub3RoZXJRdWFsaWZpZXJQcm9kdWNlci5nZXRUZXN0QmVhbldpdGhBbm90aGVyUXVhbGlmaWVyCiAgICAgLy9iZWNhdXNlIG9mIHRoZSBAU3BlY2lhbGl6ZXMgYW5ub3RhdGlvbgogICAgIHByb3RlY3RlZCBUZXN0QmVhbkludGVyZmFjZSBnZXRUZXN0QmVhbldpdGhBbm90aGVyUXVhbGlmaWVyKCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3NwZWNpYWxpemF0aW9uL3NwZWNpYWxpemF0aW9uLXNpbXBsZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvbW9jay9Nb2NrU2hvcHBpbmdDYXJ0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vc3BlY2lhbGl6YXRpb24tc2ltcGxlL3NlcnZsZXQvdGVzdC9iZWFucy9tb2NrL01vY2tTaG9wcGluZ0NhcnQuamF2YQppbmRleCBkOTBiODc0Li5jOGFhZjBhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vc3BlY2lhbGl6YXRpb24tc2ltcGxlL3NlcnZsZXQvdGVzdC9iZWFucy9tb2NrL01vY2tTaG9wcGluZ0NhcnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vc3BlY2lhbGl6YXRpb24tc2ltcGxlL3NlcnZsZXQvdGVzdC9iZWFucy9tb2NrL01vY2tTaG9wcGluZ0NhcnQuamF2YQpAQCAtMjcsMTcgKzI3LDE3IEBACiBAU3BlY2lhbGl6ZXMKIEBUcmFuc2FjdGlvbmFsKHJlcXVpcmVzTmV3PXRydWUpCiAvL1RoaXMgYWx0ZXJuYXRpdmUgKHZpYSBNb2NrU3RlcmVvdHlwZSkgZG9lcyBub3Qgc3BlY2lmeSBQcmVmZXJyZWQKLS8vcXVhbGlmaWVyLCBidXQgc2luY2UgaXQgc3BlY2lhbGl6ZXMgU2hvcHBpbmdDYXJ0LCBpdCAKKy8vcXVhbGlmaWVyLCBidXQgc2luY2UgaXQgc3BlY2lhbGl6ZXMgU2hvcHBpbmdDYXJ0LCBpdAogLy9nZXRzIFNob3BwaW5nQ2FydCdzIHF1YWxpZmVycyBldGMKIC8vSW50ZXJjZXB0b3JzIGFyZSBub3QgaW5oZXJpdGVkIGFuZCBzbyB3ZSBuZWVkIHRvIHNwZWNpZnkgVHJhbnNhY3Rpb25hbAogLy9leHBsaWNpdGx5CiBwdWJsaWMgY2xhc3MgTW9ja1Nob3BwaW5nQ2FydCAgZXh0ZW5kcyBTaG9wcGluZ0NhcnR7CiAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIG1vY2tTaG9wcGluZ0NhcnRJbnZva2VkID0gZmFsc2U7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBhZGRJdGVtKFN0cmluZyBzKSB7CiAgICAgICAgIG1vY2tTaG9wcGluZ0NhcnRJbnZva2VkID0gdHJ1ZTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNb2NrU2hvcHBpbmdDYXJ0OjphZGRJdGVtIGNhbGxlZCIpOwotICAgICAgICAKKwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3NwZWNpYWxpemF0aW9uL3NwZWNpYWxpemF0aW9uLXNpbXBsZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvbW9jay9Nb2NrVGVzdEJlYW5Gb3JBbm90aGVyUXVhbGlmaWVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vc3BlY2lhbGl6YXRpb24tc2ltcGxlL3NlcnZsZXQvdGVzdC9iZWFucy9tb2NrL01vY2tUZXN0QmVhbkZvckFub3RoZXJRdWFsaWZpZXIuamF2YQppbmRleCBkMWNhNWZkLi5mYjRhNjhmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vc3BlY2lhbGl6YXRpb24tc2ltcGxlL3NlcnZsZXQvdGVzdC9iZWFucy9tb2NrL01vY2tUZXN0QmVhbkZvckFub3RoZXJRdWFsaWZpZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vc3BlY2lhbGl6YXRpb24tc2ltcGxlL3NlcnZsZXQvdGVzdC9iZWFucy9tb2NrL01vY2tUZXN0QmVhbkZvckFub3RoZXJRdWFsaWZpZXIuamF2YQpAQCAtMzAsNiArMzAsNiBAQAogICAgIHB1YmxpYyB2b2lkIG0yKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk1vY2tCZWFuOjptMiBjYWxsZWQiKTsKICAgICB9Ci0gICAgCisKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3NwZWNpYWxpemF0aW9uL3NwZWNpYWxpemF0aW9uLXNpbXBsZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvbm9ubW9jay9TaG9wcGluZ0NhcnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zcGVjaWFsaXphdGlvbi9zcGVjaWFsaXphdGlvbi1zaW1wbGUvc2VydmxldC90ZXN0L2JlYW5zL25vbm1vY2svU2hvcHBpbmdDYXJ0LmphdmEKaW5kZXggOGVjZjU2Zi4uZWU5YzMwOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3NwZWNpYWxpemF0aW9uL3NwZWNpYWxpemF0aW9uLXNpbXBsZS9zZXJ2bGV0L3Rlc3QvYmVhbnMvbm9ubW9jay9TaG9wcGluZ0NhcnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vc3BlY2lhbGl6YXRpb24tc2ltcGxlL3NlcnZsZXQvdGVzdC9iZWFucy9ub25tb2NrL1Nob3BwaW5nQ2FydC5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAgICAgcHVibGljIHZvaWQgYWRkSXRlbShTdHJpbmcgcykgewogICAgICAgICBzaG9wcGluZ0NhcnRJbnZva2VkID0gdHJ1ZTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTaG9wcGluZ0NhcnQ6OmFkZEl0ZW0gY2FsbGVkIik7Ci0gICAgICAgIAorCiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3BlY2lhbGl6YXRpb24vc3BlY2lhbGl6YXRpb24tc2ltcGxlL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1NpbXBsZVNwZWNpYWxpemF0aW9uVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zcGVjaWFsaXphdGlvbi9zcGVjaWFsaXphdGlvbi1zaW1wbGUvc2VydmxldC90ZXN0L3NlcnZsZXQvU2ltcGxlU3BlY2lhbGl6YXRpb25UZXN0U2VydmxldC5qYXZhCmluZGV4IDM4ZDgzNmQuLjkzOGQ3ODcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zcGVjaWFsaXphdGlvbi9zcGVjaWFsaXphdGlvbi1zaW1wbGUvc2VydmxldC90ZXN0L3NlcnZsZXQvU2ltcGxlU3BlY2lhbGl6YXRpb25UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zcGVjaWFsaXphdGlvbi9zcGVjaWFsaXphdGlvbi1zaW1wbGUvc2VydmxldC90ZXN0L3NlcnZsZXQvU2ltcGxlU3BlY2lhbGl6YXRpb25UZXN0U2VydmxldC5qYXZhCkBAIC00MywxNSArNDMsMTUgQEAKICAgICBASW5qZWN0CiAgICAgQFByZWZlcnJlZAogICAgIFRlc3RCZWFuSW50ZXJmYWNlIHRiOwotICAgIAorCiAgICAgQEluamVjdAogICAgIEBBbm90aGVyUXVhbGlmaWVyCiAgICAgVGVzdEJlYW5JbnRlcmZhY2UgdGJfYW5vdGhlcjsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBAUHJlZmVycmVkCiAgICAgU2hvcHBpbmdDYXJ0IHNjOwotICAgIAorCiAKICAgICBwdWJsaWMgdm9pZCBzZXJ2aWNlKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzKQogICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uIHsKQEAgLTc1LDYxICs3NSw2MSBAQAogICAgICAgICAgICAgICAgICAgICArIFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IuYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50OwogICAgICAgICBpZiAoIVRyYW5zYWN0aW9uSW50ZXJjZXB0b3IuZXJyb3JNZXNzYWdlLnRyaW0oKS5lcXVhbHMoIiIpKQogICAgICAgICAgICAgbXNnICs9IFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IuZXJyb3JNZXNzYWdlOwotICAgICAgICAKKwogICAgICAgICBpZiAoUmVxdWlyZXNOZXdUcmFuc2FjdGlvbkludGVyY2VwdG9yLmFyb3VuZEludm9rZUNhbGxlZCkKICAgICAgICAgICAgIG1zZyArPSAiUmVxdWlyZXNOZXcgVHJhbnNhY3Rpb25JbnRlcmNlcHRvciBjYWxsZWQgd2hlbiAiICsKLSAgICAgICAgICAgIAkJIml0IHNob3VsZG4ndCBoYXZlIGJlZW4gY2FsbGVkIjsKLSAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICJpdCBzaG91bGRuJ3QgaGF2ZSBiZWVuIGNhbGxlZCI7CisKICAgICAgICAgaWYgKFRlc3RCZWFuLnRlc3RCZWFuSW52b2tlZCkKICAgICAgICAgICAgIG1zZyArPSAiVGVzdCBCZWFuIGludm9rZWQgd2hlbiBhY3R1YWxseSBtb2NrIGJlYW4gc2hvdWxkICIgKwotICAgICAgICAgICAgCQkiaGF2ZSBiZWVuIGludm9rZWQiOwotICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgImhhdmUgYmVlbiBpbnZva2VkIjsKKwogICAgICAgICBpZiAoIU1vY2tCZWFuLm1vY2tCZWFuSW52b2tlZCkKICAgICAgICAgICAgIG1zZyArPSAiTW9jayBiZWFuIG5vdCBpbnZva2VkIjsKLSAgICAgICAgCisKICAgICAgICAgVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5jbGVhcigpOwogICAgICAgICAvL2ludm9rZSBzaG9wcGluZyBjYXJ0IGJlYW4uIFNob3BwaW5nQ2FydCBiZWFuIHVzZXMgYSBTdGVyZW90eXBlIHRvCiAgICAgICAgIC8vYXNzaWduIHRoZSByZXF1aXJlcyBuZXcgdHJhbnNhY3Rpb24gaW50ZXJjZXB0b3IKICAgICAgICAgLy9UaGlzIHNob3VsZCByZXN1bHQgaW4gYW4gaW52b2NhdGlvbiBvbgogICAgICAgICAvL3RoZSBSZXF1aXJlc05ld1RyYW5zYWN0aW9uYWwKLSAgICAgICAgCi0gICAgICAgIC8vY2hlY2sgdGhhdCB0aGUgbW9jayBzaG9wcGluZyBjYXJ0IGJlYW4gaW5oZXJpdHMgdGhlIHF1YWxpZmllcnMgd2hlbiB0aGUgYWx0ZXJuYXRpdmUgCi0gICAgICAgIC8vYmVhbiBleHRlbmRzIHRoZSBhY3R1YWwgYmVhbiBhbmQgdXNlcyBAU3BlY2lhbGl6ZXMgdG8gaW5oZXJpdCB0aGUgCi0gICAgICAgIC8vUXVhbGlmaWVyIAotICAgICAgICAKKworICAgICAgICAvL2NoZWNrIHRoYXQgdGhlIG1vY2sgc2hvcHBpbmcgY2FydCBiZWFuIGluaGVyaXRzIHRoZSBxdWFsaWZpZXJzIHdoZW4gdGhlIGFsdGVybmF0aXZlCisgICAgICAgIC8vYmVhbiBleHRlbmRzIHRoZSBhY3R1YWwgYmVhbiBhbmQgdXNlcyBAU3BlY2lhbGl6ZXMgdG8gaW5oZXJpdCB0aGUKKyAgICAgICAgLy9RdWFsaWZpZXIKKwogICAgICAgICBzYy5hZGRJdGVtKCJUZXN0IEl0ZW0iKTsKICAgICAgICAgaWYgKCFSZXF1aXJlc05ld1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuYXJvdW5kSW52b2tlQ2FsbGVkKQogICAgICAgICAgICAgbXNnICs9ICJCdXNpbmVzcyBtZXRob2QgaW50ZXJjZXB0b3IgYXJvdW5kSW52b2tlIGluIHJlcXVpcmVzIG5ldyAiICsKLSAgICAgICAgICAgIAkJInRyYW5zYWN0aW9uIGludGVyY2VwdG9yIG5vdCBjYWxsZWQiOworICAgICAgICAgICAgICAgICAgICAidHJhbnNhY3Rpb24gaW50ZXJjZXB0b3Igbm90IGNhbGxlZCI7CiAgICAgICAgIGlmIChSZXF1aXJlc05ld1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50ICE9IDEpCiAgICAgICAgICAgICBtc2cgKz0gIkJ1c2luZXNzIG1ldGhvZCByZXF1aXJlcyBuZXcgaW50ZXJjZXB0b3IgaW52b2NhdGlvbiBvbiAiICsKLSAgICAgICAgICAgIAkJIm1ldGhvZC1sZXZlbCBpbnRlcmNlcHRvciBhbm5vdGF0aW9uIGNvdW50IG5vdCBleHBlY3RlZC4gIgorICAgICAgICAgICAgICAgICAgICAibWV0aG9kLWxldmVsIGludGVyY2VwdG9yIGFubm90YXRpb24gY291bnQgbm90IGV4cGVjdGVkLiAiCiAgICAgICAgICAgICAgICAgICAgICsgImV4cGVjdGVkID0xLCBhY3R1YWw9IgogICAgICAgICAgICAgICAgICAgICArIFJlcXVpcmVzTmV3VHJhbnNhY3Rpb25JbnRlcmNlcHRvci5hcm91bmRJbnZva2VJbnZvY2F0aW9uQ291bnQ7CiAgICAgICAgIGlmICghUmVxdWlyZXNOZXdUcmFuc2FjdGlvbkludGVyY2VwdG9yLmVycm9yTWVzc2FnZS50cmltKCkuZXF1YWxzKCIiKSkKICAgICAgICAgICAgIG1zZyArPSBSZXF1aXJlc05ld1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuZXJyb3JNZXNzYWdlOwotICAgICAgICAKKwogICAgICAgICAvL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3Igc2hvdWxkIG5vdCBiZSBjYWxsZWQKICAgICAgICAgaWYgKFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IuYXJvdW5kSW52b2tlQ2FsbGVkKQogICAgICAgICAgICAgbXNnICs9ICJUcmFuc2NhdGlvbkludGVyY2VwdG9yIGFyb3VuZEludm9rZSBjYWxsZWQgd2hlbiBhIHJlcXVpcmVzbmV3IiArCi0gICAgICAgICAgICAJCSJ0cmFuc2FjdGlvbiBpbnRlcmNlcHRvciBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCI7Ci0gICAgICAgIAorICAgICAgICAgICAgICAgICAgICAidHJhbnNhY3Rpb24gaW50ZXJjZXB0b3Igc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQiOworCiAgICAgICAgIC8vdGVzdCB0aGF0IHRoZSBtb2NrcyBhcmUgY2FsbGVkIGluc3RlYWQgb2YgdGhlIGFjdHVhbCBiZWFucwogICAgICAgICBpZiAoU2hvcHBpbmdDYXJ0LnNob3BwaW5nQ2FydEludm9rZWQpCiAgICAgICAgICAgICBtc2cgKz0gIlRlc3Qgc2hvcHBpbmcgY2FydCBpbnZva2VkIHdoZW4gYWN0dWFsbHkgbW9jayBzaG9wcGluZyBjYXJ0ICIgKwotICAgICAgICAgICAgCQkic2hvdWxkIGhhdmUgYmVlbiBpbnZva2VkIjsKLSAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICJzaG91bGQgaGF2ZSBiZWVuIGludm9rZWQiOworCiAgICAgICAgIGlmICghTW9ja1Nob3BwaW5nQ2FydC5tb2NrU2hvcHBpbmdDYXJ0SW52b2tlZCkKICAgICAgICAgICAgIG1zZyArPSAiTW9jayBzaG9wcGluZyBjYXJ0IG5vdCBpbnZva2VkIjsKLSAgICAgICAgCi0gICAgICAgIC8vY2hlY2sgdGhhdCB0aGUgbW9jayBiZWFuIGluaGVyaXRzIHRoZSBxdWFsaWZpZXJzIHdoZW4gdGhlIGJlYW4gaXMgCisKKyAgICAgICAgLy9jaGVjayB0aGF0IHRoZSBtb2NrIGJlYW4gaW5oZXJpdHMgdGhlIHF1YWxpZmllcnMgd2hlbiB0aGUgYmVhbiBpcwogICAgICAgICAvL3Byb2R1Y2VkIHRocm91Z2ggYSBTcGVjaWFsaXplcyBwcm9kdWNlciBtZXRob2QKICAgICAgICAgaWYgKHRiX2Fub3RoZXIgPT0gbnVsbCkKICAgICAgICAgICAgIG1zZyArPSAiIGJlYW4gd2l0aCBhbm90aGVyIHF1YWxpZmllciB3YXMgbm90IGluamVjdGVkIjsKLSAgICAgICAgCisKICAgICAgICAgaWYgKCEodGJfYW5vdGhlciBpbnN0YW5jZW9mIE1vY2tUZXN0QmVhbkZvckFub3RoZXJRdWFsaWZpZXIpKQogICAgICAgICAgICAgbXNnICs9ICJiZWFuIHdpdGggYW5vdGhlciBxdWFsaWZpZXIgaXMgbm90IGFuIGluc3RhbmNlIG9mIFRlc3RCZWFuV2l0aEFub3RoZXJRdWFsaWZpZXIiOwotICAgICAgICAKKwogCiAgICAgICAgIHdyaXRlci53cml0ZShtc2cgKyAiXG4iKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvYWx0ZXJuYXRpdmUtc3RlcmVvdHlwZXMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9hbHRlcm5hdGl2ZS1zdGVyZW90eXBlcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDczNjUyZWQuLmJkNWFlMjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9hbHRlcm5hdGl2ZS1zdGVyZW90eXBlcy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9hbHRlcm5hdGl2ZS1zdGVyZW90eXBlcy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWFsdGVybmF0aXZlLXN0ZXJlb3R5cGVzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvYWx0ZXJuYXRpdmUtc3RlcmVvdHlwZXMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3N0ZXJlb3R5cGVzL2FsdGVybmF0aXZlLXN0ZXJlb3R5cGVzL2J1aWxkLnhtbAppbmRleCAwYjliM2EzLi4wYTFmMmY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvYWx0ZXJuYXRpdmUtc3RlcmVvdHlwZXMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9hbHRlcm5hdGl2ZS1zdGVyZW90eXBlcy9idWlsZC54bWwKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iY2xpZW50L3Rlc3QvY2xpZW50IiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00OCwyMyArNDgsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iY2xpZW50IiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0idGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJ0ZXN0LmNsaWVudC5XZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9hbHRlcm5hdGl2ZS1zdGVyZW90eXBlcy9kZXNjcmlwdG9yL2JlYW5zLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9hbHRlcm5hdGl2ZS1zdGVyZW90eXBlcy9kZXNjcmlwdG9yL2JlYW5zLnhtbAppbmRleCAxY2Q5NmMzLi4xZjI0ZjE1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvYWx0ZXJuYXRpdmUtc3RlcmVvdHlwZXMvZGVzY3JpcHRvci9iZWFucy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3N0ZXJlb3R5cGVzL2FsdGVybmF0aXZlLXN0ZXJlb3R5cGVzL2Rlc2NyaXB0b3IvYmVhbnMueG1sCkBAIC0yOSw1ICsyOSw1IEBACiAgICA8YWx0ZXJuYXRpdmVzPgogICAgPHN0ZXJlb3R5cGU+dGVzdC5iZWFucy5hcnRpZmFjdHMuTW9ja1N0ZXJlb3R5cGU8L3N0ZXJlb3R5cGU+CiAgICA8L2FsdGVybmF0aXZlcz4KLSAgIAorCiA8L2JlYW5zPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3N0ZXJlb3R5cGVzL2FsdGVybmF0aXZlLXN0ZXJlb3R5cGVzL3NlcnZsZXQvdGVzdC9iZWFucy9hcnRpZmFjdHMvUmVxdWlyZXNOZXdUcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvYWx0ZXJuYXRpdmUtc3RlcmVvdHlwZXMvc2VydmxldC90ZXN0L2JlYW5zL2FydGlmYWN0cy9SZXF1aXJlc05ld1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YQppbmRleCAxYmU1ZDExLi4zOTY4OTEyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvYWx0ZXJuYXRpdmUtc3RlcmVvdHlwZXMvc2VydmxldC90ZXN0L2JlYW5zL2FydGlmYWN0cy9SZXF1aXJlc05ld1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvYWx0ZXJuYXRpdmUtc3RlcmVvdHlwZXMvc2VydmxldC90ZXN0L2JlYW5zL2FydGlmYWN0cy9SZXF1aXJlc05ld1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YQpAQCAtMzAsMTAgKzMwLDEwIEBACiAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGFyb3VuZEludm9rZUNhbGxlZCA9IGZhbHNlOwogICAgIHB1YmxpYyBzdGF0aWMgaW50IGFyb3VuZEludm9rZUludm9jYXRpb25Db3VudCA9IDA7CiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZXJyb3JNZXNzYWdlID0gIiI7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgVGVzdERlcGVuZGVudEJlYW4gdGI7Ci0gICAgCisKICAgICBAQXJvdW5kSW52b2tlCiAgICAgcHVibGljIE9iamVjdCBtYW5hZ2VUcmFuc2FjdGlvbihJbnZvY2F0aW9uQ29udGV4dCBjdHgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlcXVpcmVzTmV3VHJhbnNhY3Rpb25JbnRlcmNlcHRvcjo6QXJvdW5kSW52b2tlIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvYWx0ZXJuYXRpdmUtc3RlcmVvdHlwZXMvc2VydmxldC90ZXN0L2JlYW5zL2FydGlmYWN0cy9UcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvYWx0ZXJuYXRpdmUtc3RlcmVvdHlwZXMvc2VydmxldC90ZXN0L2JlYW5zL2FydGlmYWN0cy9UcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEKaW5kZXggODliNzQzYS4uZjVkYTE0YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3N0ZXJlb3R5cGVzL2FsdGVybmF0aXZlLXN0ZXJlb3R5cGVzL3NlcnZsZXQvdGVzdC9iZWFucy9hcnRpZmFjdHMvVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9hbHRlcm5hdGl2ZS1zdGVyZW90eXBlcy9zZXJ2bGV0L3Rlc3QvYmVhbnMvYXJ0aWZhY3RzL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YQpAQCAtMjksMTUgKzI5LDE1IEBACiAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGFyb3VuZEludm9rZUNhbGxlZCA9IGZhbHNlOwogICAgIHB1YmxpYyBzdGF0aWMgaW50IGFyb3VuZEludm9rZUludm9jYXRpb25Db3VudCA9IDA7CiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZXJyb3JNZXNzYWdlID0gIiI7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgVGVzdERlcGVuZGVudEJlYW4gdGI7Ci0gICAgCisKICAgICBAQXJvdW5kSW52b2tlCiAgICAgcHVibGljIE9iamVjdCBtYW5hZ2VUcmFuc2FjdGlvbihJbnZvY2F0aW9uQ29udGV4dCBjdHgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRyYW5zYWN0aW9uSW50ZXJjZXB0b3I6OkFyb3VuZEludm9rZSIpOwogICAgICAgICBpZiAodGIgPT0gbnVsbCkgZXJyb3JNZXNzYWdlPSJEZXBlbmRlbmN5IEluamVjdGlvbiAiICsKLSAgICAgICAgCQkiaW50byBUcmFuc2FjdGlvbkludGVyY2VwdG9yIGZhaWxlZCI7CisgICAgICAgICAgICAgICAgImludG8gVHJhbnNhY3Rpb25JbnRlcmNlcHRvciBmYWlsZWQiOwogICAgICAgICBhcm91bmRJbnZva2VDYWxsZWQgPSB0cnVlOwogICAgICAgICBhcm91bmRJbnZva2VJbnZvY2F0aW9uQ291bnQgKys7CiAgICAgICAgIHJldHVybiBjdHgucHJvY2VlZCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3N0ZXJlb3R5cGVzL2FsdGVybmF0aXZlLXN0ZXJlb3R5cGVzL3NlcnZsZXQvdGVzdC9iZWFucy9tb2NrL01vY2tTaG9wcGluZ0NhcnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9hbHRlcm5hdGl2ZS1zdGVyZW90eXBlcy9zZXJ2bGV0L3Rlc3QvYmVhbnMvbW9jay9Nb2NrU2hvcHBpbmdDYXJ0LmphdmEKaW5kZXggZmQ2MDEzOC4uNmQ5N2RjNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3N0ZXJlb3R5cGVzL2FsdGVybmF0aXZlLXN0ZXJlb3R5cGVzL3NlcnZsZXQvdGVzdC9iZWFucy9tb2NrL01vY2tTaG9wcGluZ0NhcnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvYWx0ZXJuYXRpdmUtc3RlcmVvdHlwZXMvc2VydmxldC90ZXN0L2JlYW5zL21vY2svTW9ja1Nob3BwaW5nQ2FydC5qYXZhCkBAIC0yNywxMSArMjcsMTEgQEAKIAogcHVibGljIGNsYXNzIE1vY2tTaG9wcGluZ0NhcnQgIGV4dGVuZHMgU2hvcHBpbmdDYXJ0ewogICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBtb2NrU2hvcHBpbmdDYXJ0SW52b2tlZCA9IGZhbHNlOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgYWRkSXRlbShTdHJpbmcgcykgewogICAgICAgICBtb2NrU2hvcHBpbmdDYXJ0SW52b2tlZCA9IHRydWU7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTW9ja1Nob3BwaW5nQ2FydDo6YWRkSXRlbSBjYWxsZWQiKTsKLSAgICAgICAgCisKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9hbHRlcm5hdGl2ZS1zdGVyZW90eXBlcy9zZXJ2bGV0L3Rlc3QvYmVhbnMvbm9ubW9jay9TaG9wcGluZ0NhcnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9hbHRlcm5hdGl2ZS1zdGVyZW90eXBlcy9zZXJ2bGV0L3Rlc3QvYmVhbnMvbm9ubW9jay9TaG9wcGluZ0NhcnQuamF2YQppbmRleCA1NDA4NzU4Li5kZmY2ZTMxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvYWx0ZXJuYXRpdmUtc3RlcmVvdHlwZXMvc2VydmxldC90ZXN0L2JlYW5zL25vbm1vY2svU2hvcHBpbmdDYXJ0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3N0ZXJlb3R5cGVzL2FsdGVybmF0aXZlLXN0ZXJlb3R5cGVzL3NlcnZsZXQvdGVzdC9iZWFucy9ub25tb2NrL1Nob3BwaW5nQ2FydC5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAgICAgcHVibGljIHZvaWQgYWRkSXRlbShTdHJpbmcgcykgewogICAgICAgICBzaG9wcGluZ0NhcnRJbnZva2VkID0gdHJ1ZTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTaG9wcGluZ0NhcnQ6OmFkZEl0ZW0gY2FsbGVkIik7Ci0gICAgICAgIAorCiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvYWx0ZXJuYXRpdmUtc3RlcmVvdHlwZXMvc2VydmxldC90ZXN0L3NlcnZsZXQvQWx0ZXJuYXRpdmVTdGVyZW90eXBlc1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvYWx0ZXJuYXRpdmUtc3RlcmVvdHlwZXMvc2VydmxldC90ZXN0L3NlcnZsZXQvQWx0ZXJuYXRpdmVTdGVyZW90eXBlc1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggY2JlZTdmNS4uNmE5ZDdkZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3N0ZXJlb3R5cGVzL2FsdGVybmF0aXZlLXN0ZXJlb3R5cGVzL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L0FsdGVybmF0aXZlU3RlcmVvdHlwZXNUZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9hbHRlcm5hdGl2ZS1zdGVyZW90eXBlcy9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9BbHRlcm5hdGl2ZVN0ZXJlb3R5cGVzVGVzdFNlcnZsZXQuamF2YQpAQCAtNDAsNyArNDAsNyBAQAogICAgIEBJbmplY3QKICAgICBAUHJlZmVycmVkCiAgICAgVGVzdEJlYW5JbnRlcmZhY2UgdGI7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgQFByZWZlcnJlZAogICAgIFNob3BwaW5nQ2FydCBzYzsKQEAgLTY3LDE5ICs2NywxOSBAQAogICAgICAgICAgICAgICAgICAgICArIFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IuYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50OwogICAgICAgICBpZiAoIVRyYW5zYWN0aW9uSW50ZXJjZXB0b3IuZXJyb3JNZXNzYWdlLnRyaW0oKS5lcXVhbHMoIiIpKQogICAgICAgICAgICAgbXNnICs9IFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IuZXJyb3JNZXNzYWdlOwotICAgICAgICAKKwogICAgICAgICBpZiAoUmVxdWlyZXNOZXdUcmFuc2FjdGlvbkludGVyY2VwdG9yLmFyb3VuZEludm9rZUNhbGxlZCkKICAgICAgICAgICAgIG1zZyArPSAiUmVxdWlyZXNOZXcgVHJhbnNhY3Rpb25JbnRlcmNlcHRvciBjYWxsZWQgd2hlbiAiICsKLSAgICAgICAgICAgIAkJIml0IHNob3VsZG4ndCBoYXZlIGJlZW4gY2FsbGVkIjsKLSAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICJpdCBzaG91bGRuJ3QgaGF2ZSBiZWVuIGNhbGxlZCI7CisKICAgICAgICAgLy90ZXN0IHRoYXQgdGhlIG1vY2tzIGFyZSBjYWxsZWQgaW5zdGVhZCBvZiB0aGUgYWN0dWFsIGJlYW5zCiAgICAgICAgIGlmIChUZXN0QmVhbi50ZXN0QmVhbkludm9rZWQpCiAgICAgICAgICAgICBtc2cgKz0gIlRlc3QgQmVhbiBpbnZva2VkIHdoZW4gYWN0dWFsbHkgbW9jayBiZWFuIHNob3VsZCAiICsKLSAgICAgICAgICAgIAkJImhhdmUgYmVlbiBpbnZva2VkIjsKLSAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICJoYXZlIGJlZW4gaW52b2tlZCI7CisKICAgICAgICAgaWYgKCFNb2NrQmVhbi5tb2NrQmVhbkludm9rZWQpCiAgICAgICAgICAgICBtc2cgKz0gIk1vY2sgYmVhbiBub3QgaW52b2tlZCI7Ci0gICAgICAgIAorCiAgICAgICAgIFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IuY2xlYXIoKTsKICAgICAgICAgLy9pbnZva2Ugc2hvcHBpbmcgY2FydCBiZWFuLiBTaG9wcGluZ0NhcnQgYmVhbiB1c2VzIGEgU3RlcmVvdHlwZSB0bwogICAgICAgICAvL2Fzc2lnbiB0aGUgcmVxdWlyZXMgbmV3IHRyYW5zYWN0aW9uIGludGVyY2VwdG9yCkBAIC04OCwyNSArODgsMjUgQEAKICAgICAgICAgc2MuYWRkSXRlbSgiVGVzdCBJdGVtIik7CiAgICAgICAgIGlmICghUmVxdWlyZXNOZXdUcmFuc2FjdGlvbkludGVyY2VwdG9yLmFyb3VuZEludm9rZUNhbGxlZCkKICAgICAgICAgICAgIG1zZyArPSAiQnVzaW5lc3MgbWV0aG9kIGludGVyY2VwdG9yIGFyb3VuZEludm9rZSBpbiByZXF1aXJlcyBuZXcgIiArCi0gICAgICAgICAgICAJCSJ0cmFuc2FjdGlvbiBpbnRlcmNlcHRvciBub3QgY2FsbGVkIjsKKyAgICAgICAgICAgICAgICAgICAgInRyYW5zYWN0aW9uIGludGVyY2VwdG9yIG5vdCBjYWxsZWQiOwogICAgICAgICBpZiAoUmVxdWlyZXNOZXdUcmFuc2FjdGlvbkludGVyY2VwdG9yLmFyb3VuZEludm9rZUludm9jYXRpb25Db3VudCAhPSAxKQogICAgICAgICAgICAgbXNnICs9ICJCdXNpbmVzcyBtZXRob2QgcmVxdWlyZXMgbmV3IGludGVyY2VwdG9yIGludm9jYXRpb24gb24gIiArCi0gICAgICAgICAgICAJCSJtZXRob2QtbGV2ZWwgaW50ZXJjZXB0b3IgYW5ub3RhdGlvbiBjb3VudCBub3QgZXhwZWN0ZWQuICIKKyAgICAgICAgICAgICAgICAgICAgIm1ldGhvZC1sZXZlbCBpbnRlcmNlcHRvciBhbm5vdGF0aW9uIGNvdW50IG5vdCBleHBlY3RlZC4gIgogICAgICAgICAgICAgICAgICAgICArICJleHBlY3RlZCA9MSwgYWN0dWFsPSIKICAgICAgICAgICAgICAgICAgICAgKyBSZXF1aXJlc05ld1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50OwogICAgICAgICBpZiAoIVJlcXVpcmVzTmV3VHJhbnNhY3Rpb25JbnRlcmNlcHRvci5lcnJvck1lc3NhZ2UudHJpbSgpLmVxdWFscygiIikpCiAgICAgICAgICAgICBtc2cgKz0gUmVxdWlyZXNOZXdUcmFuc2FjdGlvbkludGVyY2VwdG9yLmVycm9yTWVzc2FnZTsKLSAgICAgICAgCisKICAgICAgICAgLy9UcmFuc2FjdGlvbkludGVyY2VwdG9yIHNob3VsZCBub3QgYmUgY2FsbGVkCiAgICAgICAgIGlmIChUcmFuc2FjdGlvbkludGVyY2VwdG9yLmFyb3VuZEludm9rZUNhbGxlZCkKICAgICAgICAgICAgIG1zZyArPSAiVHJhbnNjYXRpb25JbnRlcmNlcHRvciBhcm91bmRJbnZva2UgY2FsbGVkIHdoZW4gYSByZXF1aXJlc25ldyIgKwotICAgICAgICAgICAgCQkidHJhbnNhY3Rpb24gaW50ZXJjZXB0b3Igc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQiOwotICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgInRyYW5zYWN0aW9uIGludGVyY2VwdG9yIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIjsKKwogICAgICAgICAvL3Rlc3QgdGhhdCB0aGUgbW9ja3MgYXJlIGNhbGxlZCBpbnN0ZWFkIG9mIHRoZSBhY3R1YWwgYmVhbnMKICAgICAgICAgaWYgKFNob3BwaW5nQ2FydC5zaG9wcGluZ0NhcnRJbnZva2VkKQogICAgICAgICAgICAgbXNnICs9ICJUZXN0IHNob3BwaW5nIGNhcnQgaW52b2tlZCB3aGVuIGFjdHVhbGx5IG1vY2sgc2hvcHBpbmcgY2FydCAiICsKLSAgICAgICAgICAgIAkJInNob3VsZCBoYXZlIGJlZW4gaW52b2tlZCI7Ci0gICAgICAgIAorICAgICAgICAgICAgICAgICAgICAic2hvdWxkIGhhdmUgYmVlbiBpbnZva2VkIjsKKwogICAgICAgICBpZiAoIU1vY2tTaG9wcGluZ0NhcnQubW9ja1Nob3BwaW5nQ2FydEludm9rZWQpCiAgICAgICAgICAgICBtc2cgKz0gIk1vY2sgc2hvcHBpbmcgY2FydCBub3QgaW52b2tlZCI7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvYnVpbGQueG1sCmluZGV4IGUwNmY4ZTcuLjhmOGRhZjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3N0ZXJlb3R5cGVzL2J1aWxkLnhtbApAQCAtODQsMTUgKzg0LDE1IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4gVXNhZ2U6Ci0JCWFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgc3RlcmVvdHlwZXMgdGVzdHMpCi0JCWFudCBjbGVhbiAoY2xlYW5zIGFsbCB0aGUgc3RlcmVvdHlwZXMgdGVzdHMpCi0JCWFudCBidWlsZCAoYnVpbGRzIGFsbCB0aGUgc3RlcmVvdHlwZXMgdGVzdHMpCi0JCWFudCBzZXR1cCAoc2V0cyB1cCBhbGwgcmVzb3VyY2VzIGZvciBzdGVyZW90eXBlcyB0ZXN0cykKLQkJYW50IGRlcGxveSAoZGVwbG95cyBhbGwgdGhlIHN0ZXJlb3R5cGVzIGFwcHMpCi0JCWFudCBydW4gKEV4ZWN1dGVzIGFsbCB0aGUgc3RlcmVvdHlwZXMgdGVzdHMpCi0JCWFudCB1bmRlcGxveSAodW5kZXBsb3lzIGFsbCB0aGUgIHN0ZXJlb3R5cGVzIGFwcHMpCi0JCWFudCB1bnNldHVwICh1bnNldHMgYWxsIHJlc291cmNlcyBmb3Igc3RlcmVvdHlwZXMgdGVzdHMpCi0JPC9lY2hvPgorICAgIDxlY2hvPiBVc2FnZToKKyAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBzdGVyZW90eXBlcyB0ZXN0cykKKyAgICAgICAgYW50IGNsZWFuIChjbGVhbnMgYWxsIHRoZSBzdGVyZW90eXBlcyB0ZXN0cykKKyAgICAgICAgYW50IGJ1aWxkIChidWlsZHMgYWxsIHRoZSBzdGVyZW90eXBlcyB0ZXN0cykKKyAgICAgICAgYW50IHNldHVwIChzZXRzIHVwIGFsbCByZXNvdXJjZXMgZm9yIHN0ZXJlb3R5cGVzIHRlc3RzKQorICAgICAgICBhbnQgZGVwbG95IChkZXBsb3lzIGFsbCB0aGUgc3RlcmVvdHlwZXMgYXBwcykKKyAgICAgICAgYW50IHJ1biAoRXhlY3V0ZXMgYWxsIHRoZSBzdGVyZW90eXBlcyB0ZXN0cykKKyAgICAgICAgYW50IHVuZGVwbG95ICh1bmRlcGxveXMgYWxsIHRoZSAgc3RlcmVvdHlwZXMgYXBwcykKKyAgICAgICAgYW50IHVuc2V0dXAgKHVuc2V0cyBhbGwgcmVzb3VyY2VzIGZvciBzdGVyZW90eXBlcyB0ZXN0cykKKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvaW50ZXJjZXB0b3ItYmluZGluZ3MtZm9yLXN0ZXJlb3R5cGVzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvaW50ZXJjZXB0b3ItYmluZGluZ3MtZm9yLXN0ZXJlb3R5cGVzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNmY3ZjgxYy4uMDcyMTdkYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3N0ZXJlb3R5cGVzL2ludGVyY2VwdG9yLWJpbmRpbmdzLWZvci1zdGVyZW90eXBlcy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9pbnRlcmNlcHRvci1iaW5kaW5ncy1mb3Itc3RlcmVvdHlwZXMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1pbnRlcmNlcHRvci1iaW5kaW5nLWZvci1zdGVyZW90eXBlcyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3N0ZXJlb3R5cGVzL2ludGVyY2VwdG9yLWJpbmRpbmdzLWZvci1zdGVyZW90eXBlcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvaW50ZXJjZXB0b3ItYmluZGluZ3MtZm9yLXN0ZXJlb3R5cGVzL2J1aWxkLnhtbAppbmRleCAwYjliM2EzLi4wYTFmMmY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvaW50ZXJjZXB0b3ItYmluZGluZ3MtZm9yLXN0ZXJlb3R5cGVzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvaW50ZXJjZXB0b3ItYmluZGluZ3MtZm9yLXN0ZXJlb3R5cGVzL2J1aWxkLnhtbApAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSJjbGllbnQvdGVzdC9jbGllbnQiIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ4LDIzICs0OCwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSJjbGllbnQiIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJ0ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9InRlc3QuY2xpZW50LldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3N0ZXJlb3R5cGVzL2ludGVyY2VwdG9yLWJpbmRpbmdzLWZvci1zdGVyZW90eXBlcy9kZXNjcmlwdG9yL2JlYW5zLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9pbnRlcmNlcHRvci1iaW5kaW5ncy1mb3Itc3RlcmVvdHlwZXMvZGVzY3JpcHRvci9iZWFucy54bWwKaW5kZXggNmU1YjZhMi4uNzkwMGM1MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3N0ZXJlb3R5cGVzL2ludGVyY2VwdG9yLWJpbmRpbmdzLWZvci1zdGVyZW90eXBlcy9kZXNjcmlwdG9yL2JlYW5zLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvaW50ZXJjZXB0b3ItYmluZGluZ3MtZm9yLXN0ZXJlb3R5cGVzL2Rlc2NyaXB0b3IvYmVhbnMueG1sCkBAIC0yNiw1ICsyNiw1IEBACiAgICAgICA8Y2xhc3M+dGVzdC5iZWFucy5UcmFuc2FjdGlvbkludGVyY2VwdG9yPC9jbGFzcz4KICAgICAgIDxjbGFzcz50ZXN0LmJlYW5zLlJlcXVpcmVzTmV3VHJhbnNhY3Rpb25JbnRlcmNlcHRvcjwvY2xhc3M+CiAgICA8L2ludGVyY2VwdG9ycz4KLSAgIAorCiA8L2JlYW5zPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3N0ZXJlb3R5cGVzL2ludGVyY2VwdG9yLWJpbmRpbmdzLWZvci1zdGVyZW90eXBlcy9zZXJ2bGV0L3Rlc3QvYmVhbnMvUmVxdWlyZXNOZXdUcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvaW50ZXJjZXB0b3ItYmluZGluZ3MtZm9yLXN0ZXJlb3R5cGVzL3NlcnZsZXQvdGVzdC9iZWFucy9SZXF1aXJlc05ld1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YQppbmRleCBlNjI2YTM3Li5jMDMwNjA0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvaW50ZXJjZXB0b3ItYmluZGluZ3MtZm9yLXN0ZXJlb3R5cGVzL3NlcnZsZXQvdGVzdC9iZWFucy9SZXF1aXJlc05ld1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvaW50ZXJjZXB0b3ItYmluZGluZ3MtZm9yLXN0ZXJlb3R5cGVzL3NlcnZsZXQvdGVzdC9iZWFucy9SZXF1aXJlc05ld1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YQpAQCAtMjgsMTAgKzI4LDEwIEBACiAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGFyb3VuZEludm9rZUNhbGxlZCA9IGZhbHNlOwogICAgIHB1YmxpYyBzdGF0aWMgaW50IGFyb3VuZEludm9rZUludm9jYXRpb25Db3VudCA9IDA7CiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZXJyb3JNZXNzYWdlID0gIiI7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgVGVzdERlcGVuZGVudEJlYW4gdGI7Ci0gICAgCisKICAgICBAQXJvdW5kSW52b2tlCiAgICAgcHVibGljIE9iamVjdCBtYW5hZ2VUcmFuc2FjdGlvbihJbnZvY2F0aW9uQ29udGV4dCBjdHgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlcXVpcmVzTmV3VHJhbnNhY3Rpb25JbnRlcmNlcHRvcjo6QXJvdW5kSW52b2tlIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvaW50ZXJjZXB0b3ItYmluZGluZ3MtZm9yLXN0ZXJlb3R5cGVzL3NlcnZsZXQvdGVzdC9iZWFucy9TaG9wcGluZ0NhcnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9pbnRlcmNlcHRvci1iaW5kaW5ncy1mb3Itc3RlcmVvdHlwZXMvc2VydmxldC90ZXN0L2JlYW5zL1Nob3BwaW5nQ2FydC5qYXZhCmluZGV4IDYxNzVmZDYuLmZjYTAyYWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9pbnRlcmNlcHRvci1iaW5kaW5ncy1mb3Itc3RlcmVvdHlwZXMvc2VydmxldC90ZXN0L2JlYW5zL1Nob3BwaW5nQ2FydC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9pbnRlcmNlcHRvci1iaW5kaW5ncy1mb3Itc3RlcmVvdHlwZXMvc2VydmxldC90ZXN0L2JlYW5zL1Nob3BwaW5nQ2FydC5qYXZhCkBAIC0yMCwxMCArMjAsMTAgQEAKIEBBY3Rpb25TdGVyZW90eXBlCiBAUHJlZmVycmVkCiBwdWJsaWMgY2xhc3MgU2hvcHBpbmdDYXJ0ICB7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBhZGRJdGVtKFN0cmluZyBzKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2hvcHBpbmdDYXJ0OjphZGRJdGVtIGNhbGxlZCIpOwotICAgICAgICAKKwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3N0ZXJlb3R5cGVzL2ludGVyY2VwdG9yLWJpbmRpbmdzLWZvci1zdGVyZW90eXBlcy9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3N0ZXJlb3R5cGVzL2ludGVyY2VwdG9yLWJpbmRpbmdzLWZvci1zdGVyZW90eXBlcy9zZXJ2bGV0L3Rlc3QvYmVhbnMvVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5qYXZhCmluZGV4IGFmZGMxNTYuLmUxZDBkNTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9pbnRlcmNlcHRvci1iaW5kaW5ncy1mb3Itc3RlcmVvdHlwZXMvc2VydmxldC90ZXN0L2JlYW5zL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvaW50ZXJjZXB0b3ItYmluZGluZ3MtZm9yLXN0ZXJlb3R5cGVzL3NlcnZsZXQvdGVzdC9iZWFucy9UcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEKQEAgLTI3LDE1ICsyNywxNSBAQAogICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBhcm91bmRJbnZva2VDYWxsZWQgPSBmYWxzZTsKICAgICBwdWJsaWMgc3RhdGljIGludCBhcm91bmRJbnZva2VJbnZvY2F0aW9uQ291bnQgPSAwOwogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGVycm9yTWVzc2FnZSA9ICIiOwotICAgIAorCiAgICAgQEluamVjdAogICAgIFRlc3REZXBlbmRlbnRCZWFuIHRiOwotICAgIAorCiAgICAgQEFyb3VuZEludm9rZQogICAgIHB1YmxpYyBPYmplY3QgbWFuYWdlVHJhbnNhY3Rpb24oSW52b2NhdGlvbkNvbnRleHQgY3R4KSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUcmFuc2FjdGlvbkludGVyY2VwdG9yOjpBcm91bmRJbnZva2UiKTsKICAgICAgICAgaWYgKHRiID09IG51bGwpIGVycm9yTWVzc2FnZT0iRGVwZW5kZW5jeSBJbmplY3Rpb24gIiArCi0gICAgICAgIAkJImludG8gVHJhbnNhY3Rpb25JbnRlcmNlcHRvciBmYWlsZWQiOworICAgICAgICAgICAgICAgICJpbnRvIFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IgZmFpbGVkIjsKICAgICAgICAgYXJvdW5kSW52b2tlQ2FsbGVkID0gdHJ1ZTsKICAgICAgICAgYXJvdW5kSW52b2tlSW52b2NhdGlvbkNvdW50ICsrOwogICAgICAgICByZXR1cm4gY3R4LnByb2NlZWQoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9pbnRlcmNlcHRvci1iaW5kaW5ncy1mb3Itc3RlcmVvdHlwZXMvc2VydmxldC90ZXN0L3NlcnZsZXQvSW50ZXJjZXB0b3JCaW5kaW5nc0ZvclN0ZXJlb3R5cGVzVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9pbnRlcmNlcHRvci1iaW5kaW5ncy1mb3Itc3RlcmVvdHlwZXMvc2VydmxldC90ZXN0L3NlcnZsZXQvSW50ZXJjZXB0b3JCaW5kaW5nc0ZvclN0ZXJlb3R5cGVzVGVzdFNlcnZsZXQuamF2YQppbmRleCBiNDRlNjMxLi4wMGY2ZDNkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvaW50ZXJjZXB0b3ItYmluZGluZ3MtZm9yLXN0ZXJlb3R5cGVzL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L0ludGVyY2VwdG9yQmluZGluZ3NGb3JTdGVyZW90eXBlc1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3N0ZXJlb3R5cGVzL2ludGVyY2VwdG9yLWJpbmRpbmdzLWZvci1zdGVyZW90eXBlcy9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9JbnRlcmNlcHRvckJpbmRpbmdzRm9yU3RlcmVvdHlwZXNUZXN0U2VydmxldC5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiAgICAgQEluamVjdAogICAgIEBQcmVmZXJyZWQKICAgICBUZXN0QmVhbiB0YjsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBAUHJlZmVycmVkCiAgICAgU2hvcHBpbmdDYXJ0IHNjOwpAQCAtNjQsMTEgKzY0LDExIEBACiAgICAgICAgICAgICAgICAgICAgICsgVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5hcm91bmRJbnZva2VJbnZvY2F0aW9uQ291bnQ7CiAgICAgICAgIGlmICghVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5lcnJvck1lc3NhZ2UudHJpbSgpLmVxdWFscygiIikpCiAgICAgICAgICAgICBtc2cgKz0gVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5lcnJvck1lc3NhZ2U7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChSZXF1aXJlc05ld1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuYXJvdW5kSW52b2tlQ2FsbGVkKQogICAgICAgICAgICAgbXNnICs9ICJSZXF1aXJlc05ldyBUcmFuc2FjdGlvbkludGVyY2VwdG9yIGNhbGxlZCB3aGVuICIgKwotICAgICAgICAgICAgCQkiaXQgc2hvdWxkbid0IGhhdmUgYmVlbiBjYWxsZWQiOwotICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgIml0IHNob3VsZG4ndCBoYXZlIGJlZW4gY2FsbGVkIjsKKwogICAgICAgICBUcmFuc2FjdGlvbkludGVyY2VwdG9yLmNsZWFyKCk7CiAgICAgICAgIC8vaW52b2tlIHNob3BwaW5nIGNhcnQgYmVhbi4gU2hvcHBpbmdDYXJ0IGJlYW4gdXNlcyBhIFN0ZXJlb3R5cGUgdG8KICAgICAgICAgLy9hc3NpZ24gdGhlIHJlcXVpcmVzIG5ldyB0cmFuc2FjdGlvbiBpbnRlcmNlcHRvcgpAQCAtNzcsMTkgKzc3LDE5IEBACiAgICAgICAgIHNjLmFkZEl0ZW0oIlRlc3QgSXRlbSIpOwogICAgICAgICBpZiAoIVJlcXVpcmVzTmV3VHJhbnNhY3Rpb25JbnRlcmNlcHRvci5hcm91bmRJbnZva2VDYWxsZWQpCiAgICAgICAgICAgICBtc2cgKz0gIkJ1c2luZXNzIG1ldGhvZCBpbnRlcmNlcHRvciBhcm91bmRJbnZva2UgaW4gcmVxdWlyZXMgbmV3ICIgKwotICAgICAgICAgICAgCQkidHJhbnNhY3Rpb24gaW50ZXJjZXB0b3Igbm90IGNhbGxlZCI7CisgICAgICAgICAgICAgICAgICAgICJ0cmFuc2FjdGlvbiBpbnRlcmNlcHRvciBub3QgY2FsbGVkIjsKICAgICAgICAgaWYgKFJlcXVpcmVzTmV3VHJhbnNhY3Rpb25JbnRlcmNlcHRvci5hcm91bmRJbnZva2VJbnZvY2F0aW9uQ291bnQgIT0gMSkKICAgICAgICAgICAgIG1zZyArPSAiQnVzaW5lc3MgbWV0aG9kIHJlcXVpcmVzIG5ldyBpbnRlcmNlcHRvciBpbnZvY2F0aW9uIG9uICIgKwotICAgICAgICAgICAgCQkibWV0aG9kLWxldmVsIGludGVyY2VwdG9yIGFubm90YXRpb24gY291bnQgbm90IGV4cGVjdGVkLiAiCisgICAgICAgICAgICAgICAgICAgICJtZXRob2QtbGV2ZWwgaW50ZXJjZXB0b3IgYW5ub3RhdGlvbiBjb3VudCBub3QgZXhwZWN0ZWQuICIKICAgICAgICAgICAgICAgICAgICAgKyAiZXhwZWN0ZWQgPTEsIGFjdHVhbD0iCiAgICAgICAgICAgICAgICAgICAgICsgUmVxdWlyZXNOZXdUcmFuc2FjdGlvbkludGVyY2VwdG9yLmFyb3VuZEludm9rZUludm9jYXRpb25Db3VudDsKICAgICAgICAgaWYgKCFSZXF1aXJlc05ld1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuZXJyb3JNZXNzYWdlLnRyaW0oKS5lcXVhbHMoIiIpKQogICAgICAgICAgICAgbXNnICs9IFJlcXVpcmVzTmV3VHJhbnNhY3Rpb25JbnRlcmNlcHRvci5lcnJvck1lc3NhZ2U7Ci0gICAgICAgIAorCiAgICAgICAgIC8vVHJhbnNhY3Rpb25JbnRlcmNlcHRvciBzaG91bGQgbm90IGJlIGNhbGxlZAogICAgICAgICBpZiAoVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5hcm91bmRJbnZva2VDYWxsZWQpCiAgICAgICAgICAgICBtc2cgKz0gIlRyYW5zY2F0aW9uSW50ZXJjZXB0b3IgYXJvdW5kSW52b2tlIGNhbGxlZCB3aGVuIGEgcmVxdWlyZXNuZXciICsKLSAgICAgICAgICAgIAkJInRyYW5zYWN0aW9uIGludGVyY2VwdG9yIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIjsKKyAgICAgICAgICAgICAgICAgICAgInRyYW5zYWN0aW9uIGludGVyY2VwdG9yIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIjsKIAogICAgICAgICB3cml0ZXIud3JpdGUobXNnICsgIlxuIik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3N0ZXJlb3R5cGVzL3N0ZXJlb3R5cGUtc3RhY2tpbmcvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9zdGVyZW90eXBlLXN0YWNraW5nL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZThlNjAwOC4uM2QyODFjOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3N0ZXJlb3R5cGVzL3N0ZXJlb3R5cGUtc3RhY2tpbmcvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvc3RlcmVvdHlwZS1zdGFja2luZy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjZGkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXN0YWNraW5nLXN0ZXJlb3R5cGVzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvc3RlcmVvdHlwZS1zdGFja2luZy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvc3RlcmVvdHlwZS1zdGFja2luZy9idWlsZC54bWwKaW5kZXggMGI5YjNhMy4uMGExZjJmOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3N0ZXJlb3R5cGVzL3N0ZXJlb3R5cGUtc3RhY2tpbmcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9zdGVyZW90eXBlLXN0YWNraW5nL2J1aWxkLnhtbApAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSJjbGllbnQvdGVzdC9jbGllbnQiIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ4LDIzICs0OCwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSJjbGllbnQiIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJ0ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9InRlc3QuY2xpZW50LldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3N0ZXJlb3R5cGVzL3N0ZXJlb3R5cGUtc3RhY2tpbmcvc2VydmxldC90ZXN0L2JlYW5zL2ludGVyY2VwdG9ycy9TZWN1cml0eUludGVyY2VwdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvc3RlcmVvdHlwZS1zdGFja2luZy9zZXJ2bGV0L3Rlc3QvYmVhbnMvaW50ZXJjZXB0b3JzL1NlY3VyaXR5SW50ZXJjZXB0b3IuamF2YQppbmRleCAyYTZlNTgwLi4xOTY1YzI2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvc3RlcmVvdHlwZS1zdGFja2luZy9zZXJ2bGV0L3Rlc3QvYmVhbnMvaW50ZXJjZXB0b3JzL1NlY3VyaXR5SW50ZXJjZXB0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvc3RlcmVvdHlwZS1zdGFja2luZy9zZXJ2bGV0L3Rlc3QvYmVhbnMvaW50ZXJjZXB0b3JzL1NlY3VyaXR5SW50ZXJjZXB0b3IuamF2YQpAQCAtMjksMTAgKzI5LDEwIEBACiAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGFyb3VuZEludm9rZUNhbGxlZCA9IGZhbHNlOwogICAgIHB1YmxpYyBzdGF0aWMgaW50IGFyb3VuZEludm9rZUludm9jYXRpb25Db3VudCA9IDA7CiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZXJyb3JNZXNzYWdlID0gIiI7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgVGVzdERlcGVuZGVudEJlYW4gdGI7Ci0gICAgCisKICAgICBAQXJvdW5kSW52b2tlCiAgICAgcHVibGljIE9iamVjdCBtYW5hZ2VUcmFuc2FjdGlvbihJbnZvY2F0aW9uQ29udGV4dCBjdHgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlY3VyaXR5SW50ZXJjZXB0b3I6OkFyb3VuZEludm9rZSIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3N0ZXJlb3R5cGVzL3N0ZXJlb3R5cGUtc3RhY2tpbmcvc2VydmxldC90ZXN0L2JlYW5zL2ludGVyY2VwdG9ycy9UcmFuc2FjdGlvbkludGVyY2VwdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvc3RlcmVvdHlwZS1zdGFja2luZy9zZXJ2bGV0L3Rlc3QvYmVhbnMvaW50ZXJjZXB0b3JzL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YQppbmRleCAwODY3YjI1Li5lN2UwMzY1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvc3RlcmVvdHlwZS1zdGFja2luZy9zZXJ2bGV0L3Rlc3QvYmVhbnMvaW50ZXJjZXB0b3JzL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvc3RlcmVvdHlwZS1zdGFja2luZy9zZXJ2bGV0L3Rlc3QvYmVhbnMvaW50ZXJjZXB0b3JzL1RyYW5zYWN0aW9uSW50ZXJjZXB0b3IuamF2YQpAQCAtMjksMTUgKzI5LDE1IEBACiAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGFyb3VuZEludm9rZUNhbGxlZCA9IGZhbHNlOwogICAgIHB1YmxpYyBzdGF0aWMgaW50IGFyb3VuZEludm9rZUludm9jYXRpb25Db3VudCA9IDA7CiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZXJyb3JNZXNzYWdlID0gIiI7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgVGVzdERlcGVuZGVudEJlYW4gdGI7Ci0gICAgCisKICAgICBAQXJvdW5kSW52b2tlCiAgICAgcHVibGljIE9iamVjdCBtYW5hZ2VUcmFuc2FjdGlvbihJbnZvY2F0aW9uQ29udGV4dCBjdHgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRyYW5zYWN0aW9uSW50ZXJjZXB0b3I6OkFyb3VuZEludm9rZSIpOwogICAgICAgICBpZiAodGIgPT0gbnVsbCkgZXJyb3JNZXNzYWdlPSJEZXBlbmRlbmN5IEluamVjdGlvbiAiICsKLSAgICAgICAgCQkiaW50byBUcmFuc2FjdGlvbkludGVyY2VwdG9yIGZhaWxlZCI7CisgICAgICAgICAgICAgICAgImludG8gVHJhbnNhY3Rpb25JbnRlcmNlcHRvciBmYWlsZWQiOwogICAgICAgICBhcm91bmRJbnZva2VDYWxsZWQgPSB0cnVlOwogICAgICAgICBhcm91bmRJbnZva2VJbnZvY2F0aW9uQ291bnQgKys7CiAgICAgICAgIHJldHVybiBjdHgucHJvY2VlZCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3N0ZXJlb3R5cGVzL3N0ZXJlb3R5cGUtc3RhY2tpbmcvc2VydmxldC90ZXN0L3NlcnZsZXQvU3RlcmVvdHlwZVN0YWNraW5nVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS9zdGVyZW90eXBlcy9zdGVyZW90eXBlLXN0YWNraW5nL3NlcnZsZXQvdGVzdC9zZXJ2bGV0L1N0ZXJlb3R5cGVTdGFja2luZ1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggM2U2NmIyMy4uYjViY2Y0OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3N0ZXJlb3R5cGVzL3N0ZXJlb3R5cGUtc3RhY2tpbmcvc2VydmxldC90ZXN0L3NlcnZsZXQvU3RlcmVvdHlwZVN0YWNraW5nVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvc3RlcmVvdHlwZXMvc3RlcmVvdHlwZS1zdGFja2luZy9zZXJ2bGV0L3Rlc3Qvc2VydmxldC9TdGVyZW90eXBlU3RhY2tpbmdUZXN0U2VydmxldC5qYXZhCkBAIC02NCw3ICs2NCw3IEBACiAgICAgICAgIHRiX3R4Lm0yKCk7CiAgICAgICAgIGlmIChUcmFuc2FjdGlvbkludGVyY2VwdG9yLmFyb3VuZEludm9rZUludm9jYXRpb25Db3VudCAhPSAyKQogICAgICAgICAgICAgbXNnICs9ICJCdXNpbmVzcyBtZXRob2QgaW50ZXJjZXB0b3IgW1RyYW5zYWN0aW9uSW50ZXJjZXB0b3JdICIgKwotICAgICAgICAgICAgCQkiaW52b2NhdGlvbiBvbiBtZXRob2QtbGV2ZWwgIgorICAgICAgICAgICAgICAgICAgICAiaW52b2NhdGlvbiBvbiBtZXRob2QtbGV2ZWwgIgogICAgICAgICAgICAgICAgICAgICArICJpbnRlcmNlcHRvciBhbm5vdGF0aW9uIGNvdW50IG5vdCBleHBlY3RlZC4gIgogICAgICAgICAgICAgICAgICAgICArICJleHBlY3RlZCA9MiwgYWN0dWFsPSIKICAgICAgICAgICAgICAgICAgICAgKyBUcmFuc2FjdGlvbkludGVyY2VwdG9yLmFyb3VuZEludm9rZUludm9jYXRpb25Db3VudDsKQEAgLTc2LDcgKzc2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgKyAiaXQgc2hvdWxkbid0IGhhdmUgYmVlbiBjYWxsZWQiOwogCiAgICAgICAgIGNsZWFySW50ZXJjZXB0b3JzKCk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vSnVzdCBzZWN1cml0eSBpbnRlcmNlcHRvcgogICAgICAgICBpZiAodGJfc2VjID09IG51bGwpCiAgICAgICAgICAgICBtc2cgKz0gIkluamVjdGlvbiBvZiBAc2VjdXJlIGJlYW4gZmFpbGVkIjsKQEAgLTg3LDcgKzg3LDcgQEAKICAgICAgICAgdGJfc2VjLm0yKCk7CiAgICAgICAgIGlmIChTZWN1cml0eUludGVyY2VwdG9yLmFyb3VuZEludm9rZUludm9jYXRpb25Db3VudCAhPSAyKQogICAgICAgICAgICAgbXNnICs9ICJCdXNpbmVzcyBtZXRob2QgaW50ZXJjZXB0b3IgaW52b2NhdGlvbiBbU2VjdXJpdHlJbnRlcmNlcHRvcl0iICsKLSAgICAgICAgICAgIAkJIm9uIG1ldGhvZC1sZXZlbCAiCisgICAgICAgICAgICAgICAgICAgICJvbiBtZXRob2QtbGV2ZWwgIgogICAgICAgICAgICAgICAgICAgICArICJpbnRlcmNlcHRvciBhbm5vdGF0aW9uIGNvdW50IG5vdCBleHBlY3RlZC4gIgogICAgICAgICAgICAgICAgICAgICArICJleHBlY3RlZCA9MiwgYWN0dWFsPSIKICAgICAgICAgICAgICAgICAgICAgKyBTZWN1cml0eUludGVyY2VwdG9yLmFyb3VuZEludm9rZUludm9jYXRpb25Db3VudDsKQEAgLTEwOSw3ICsxMDksNyBAQAogICAgICAgICAgICAgbXNnICs9ICJCdXNpbmVzcyBtZXRob2QgaW50ZXJjZXB0b3IgW1NlY3VyaXR5IEludGVyY2VwdG9yXSBhcm91bmRJbnZva2Ugbm90IGNhbGxlZCI7CiAgICAgICAgIGlmICghVHJhbnNhY3Rpb25JbnRlcmNlcHRvci5hcm91bmRJbnZva2VDYWxsZWQpCiAgICAgICAgICAgICBtc2cgKz0gIkJ1c2luZXNzIG1ldGhvZCBpbnRlcmNlcHRvciBbVHJhbnNhY3Rpb24gSW50ZXJjZXB0b3JdIGFyb3VuZEludm9rZSBub3QgY2FsbGVkIjsKLSAgICAgICAgCisKICAgICAgICAgdGJfdHhfc2VjLm0yKCk7CiAgICAgICAgIGlmIChTZWN1cml0eUludGVyY2VwdG9yLmFyb3VuZEludm9rZUludm9jYXRpb25Db3VudCAhPSAyKQogICAgICAgICAgICAgbXNnICs9ICJCdXNpbmVzcyBtZXRob2QgaW50ZXJjZXB0b3IgaW52b2NhdGlvbiBbU2VjdXJpdHlJbnRlcmNlcHRvcl0iICsKQEAgLTEyMyw3ICsxMjMsNyBAQAogICAgICAgICAgICAgICAgICAgICArICJpbnRlcmNlcHRvciBhbm5vdGF0aW9uIGNvdW50IG5vdCBleHBlY3RlZC4gIgogICAgICAgICAgICAgICAgICAgICArICJleHBlY3RlZCA9MiwgYWN0dWFsPSIKICAgICAgICAgICAgICAgICAgICAgKyBUcmFuc2FjdGlvbkludGVyY2VwdG9yLmFyb3VuZEludm9rZUludm9jYXRpb25Db3VudDsKLSAgICAgICAgCisKICAgICAgICAgaWYgKCFTZWN1cml0eUludGVyY2VwdG9yLmVycm9yTWVzc2FnZS50cmltKCkuZXF1YWxzKCIiKSkKICAgICAgICAgICAgIG1zZyArPSBTZWN1cml0eUludGVyY2VwdG9yLmVycm9yTWVzc2FnZTsKICAgICAgICAgaWYgKCFUcmFuc2FjdGlvbkludGVyY2VwdG9yLmVycm9yTWVzc2FnZS50cmltKCkuZXF1YWxzKCIiKSkKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS90cmFuc2FjdGlvbnMvdHJhbnNhY3Rpb24tc2NvcGVkL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvdHJhbnNhY3Rpb25zL3RyYW5zYWN0aW9uLXNjb3BlZC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDM3MTllNDkuLjQ1YmIxYjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS90cmFuc2FjdGlvbnMvdHJhbnNhY3Rpb24tc2NvcGVkL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3RyYW5zYWN0aW9ucy90cmFuc2FjdGlvbi1zY29wZWQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS10cmFuc2FjdGlvbi1zY29wZWQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS90cmFuc2FjdGlvbnMvdHJhbnNhY3Rpb24tc2NvcGVkL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvdHJhbnNhY3Rpb25zL3RyYW5zYWN0aW9uLXNjb3BlZC9jbGllbnQvdGVzdC9jbGllbnQvV2ViVGVzdC5qYXZhCmluZGV4IDUyZTFjNzQuLjNmMmNlMDMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS90cmFuc2FjdGlvbnMvdHJhbnNhY3Rpb24tc2NvcGVkL2NsaWVudC90ZXN0L2NsaWVudC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3RyYW5zYWN0aW9ucy90cmFuc2FjdGlvbi1zY29wZWQvY2xpZW50L3Rlc3QvY2xpZW50L1dlYlRlc3QuamF2YQpAQCAtMzksNyArMzksNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiRnVuY3Rpb25hbCB0ZXN0IGZvciBAVHJhbnNhY3Rpb25TY29wZWQiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC00OCw3ICs0OCw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVNUX05BTUUgKyAiIHRlc3QgZmFpbGVkIik7CkBAIC01OCw3ICs1OCw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdCArICIvVHJhbnNhY3Rpb25TY29wZWRUZXN0U2VydmxldCI7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigib3BlbmluZyBjb25uZWN0aW9uIHRvICIgKyB1cmwpOwogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSAobmV3IFVSTCh1cmwpKS5vcGVuQ29ubmVjdGlvbigpOwpAQCAtOTgsNiArOTgsNiBAQAogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS91bnByb3h5YWJsZS1kZXBzL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS91bnByb3h5YWJsZS1kZXBzL1dlYlRlc3QuamF2YQppbmRleCAzYjhjMjc3Li4yMzA4YTZmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvdW5wcm94eWFibGUtZGVwcy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3VucHJveHlhYmxlLWRlcHMvV2ViVGVzdC5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJUZXN0aW5nIEFsdGVybmF0aXZlcyIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKQEAgLTU2LDcgKzU2LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICArICIvbXl1cmwiOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9wZW5pbmcgY29ubmVjdGlvbiB0byAiICsgdXJsKTsKQEAgLTcwLDYgKzcwLDYgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvdW5wcm94eWFibGUtZGVwcy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3VucHJveHlhYmxlLWRlcHMvYnVpbGQucHJvcGVydGllcwppbmRleCAzMTdiMzcyLi45NmY0MmVkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvdW5wcm94eWFibGUtZGVwcy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS91bnByb3h5YWJsZS1kZXBzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNkaS1hbHRlcm5hdGl2ZXMiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtYW5ub3RhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3VucHJveHlhYmxlLWRlcHMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3VucHJveHlhYmxlLWRlcHMvYnVpbGQueG1sCmluZGV4IDlhNDQyZDYuLjk3MmFlMDAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS91bnByb3h5YWJsZS1kZXBzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvdW5wcm94eWFibGUtZGVwcy9idWlsZC54bWwKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDcsMjMgKzQ3LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgIAkgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgorICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzUsMTIgKzc1LDEyIEBACiAgICAgICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci08IS0tIE5vdGhpbmcgdG8gdW5kZXBseSBoZXJlIGFzIHRoZSBkZXBsb3ltZW50IG11c3QgZmFpbCBmb3IgdGhpcyB0ZXN0IAorPCEtLSBOb3RoaW5nIHRvIHVuZGVwbHkgaGVyZSBhcyB0aGUgZGVwbG95bWVudCBtdXN0IGZhaWwgZm9yIHRoaXMgdGVzdAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KIC0tPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvdW5zYXRpc2ZpZWQtZGVwcy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvdW5zYXRpc2ZpZWQtZGVwcy9XZWJUZXN0LmphdmEKaW5kZXggOTIwMWRjYi4uNTg2MGE4YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Vuc2F0aXNmaWVkLWRlcHMvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS91bnNhdGlzZmllZC1kZXBzL1dlYlRlc3QuamF2YQpAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVGVzdGluZyBVbnNhdGlzZmllZCBkZXBlbmRlbmNpZXMiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC00Niw3ICs0Niw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVNUX05BTUUgKyAiIHRlc3QgZmFpbGVkIik7CkBAIC01Niw3ICs1Niw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgICAgICAgICAgKyAiL215dXJsIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvcGVuaW5nIGNvbm5lY3Rpb24gdG8gIiArIHVybCk7CkBAIC05NiwxMCArOTYsMTAgQEAKICAgICAgICAgICAgIGlmIChFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS91bnNhdGlzZmllZC1kZXBzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvdW5zYXRpc2ZpZWQtZGVwcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGI0NGE3NGUuLmYyZWIzNDUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS91bnNhdGlzZmllZC1kZXBzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Vuc2F0aXNmaWVkLWRlcHMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2RpLXVuc2F0aXNmaWVkZGVwcyIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC1hbm5vdGF0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvdW5zYXRpc2ZpZWQtZGVwcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvdW5zYXRpc2ZpZWQtZGVwcy9idWlsZC54bWwKaW5kZXggYzBkOTA0ZC4uODcyZjM2NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Vuc2F0aXNmaWVkLWRlcHMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS91bnNhdGlzZmllZC1kZXBzL2J1aWxkLnhtbApAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NywyMyArNDcsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NSwxMCArNzUsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvdW5zYXRpc2ZpZWQtZGVwcy9zZXJ2bGV0L3Rlc3QvYXJ0aWZhY3RzL01vY2tQYXltZW50UHJvY2Vzc29yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvdW5zYXRpc2ZpZWQtZGVwcy9zZXJ2bGV0L3Rlc3QvYXJ0aWZhY3RzL01vY2tQYXltZW50UHJvY2Vzc29yLmphdmEKaW5kZXggNzVjYzUyYi4uNDdiNWJiNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Vuc2F0aXNmaWVkLWRlcHMvc2VydmxldC90ZXN0L2FydGlmYWN0cy9Nb2NrUGF5bWVudFByb2Nlc3Nvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS91bnNhdGlzZmllZC1kZXBzL3NlcnZsZXQvdGVzdC9hcnRpZmFjdHMvTW9ja1BheW1lbnRQcm9jZXNzb3IuamF2YQpAQCAtMTgsNyArMTgsNyBAQAogCiBpbXBvcnQgamFrYXJ0YS5lbnRlcnByaXNlLmluamVjdC5BbHRlcm5hdGl2ZTsKIAotQEFsdGVybmF0aXZlIAorQEFsdGVybmF0aXZlCiBwdWJsaWMgY2xhc3MgTW9ja1BheW1lbnRQcm9jZXNzb3IgaW1wbGVtZW50cyBQYXltZW50UHJvY2Vzc29yewogCiAgICAgQE92ZXJyaWRlCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvdW5zYXRpc2ZpZWQtZGVwcy9zZXJ2bGV0L3Rlc3QvYmVhbnMvQmVhblRvVGVzdFVuc2F0aXNmaWVkRGVwZW5kZW5jaWVzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jZGkvdW5zYXRpc2ZpZWQtZGVwcy9zZXJ2bGV0L3Rlc3QvYmVhbnMvQmVhblRvVGVzdFVuc2F0aXNmaWVkRGVwZW5kZW5jaWVzLmphdmEKaW5kZXggMTM3M2M2Yi4uODkyNzdjMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2RpL3Vuc2F0aXNmaWVkLWRlcHMvc2VydmxldC90ZXN0L2JlYW5zL0JlYW5Ub1Rlc3RVbnNhdGlzZmllZERlcGVuZGVuY2llcy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NkaS91bnNhdGlzZmllZC1kZXBzL3NlcnZsZXQvdGVzdC9iZWFucy9CZWFuVG9UZXN0VW5zYXRpc2ZpZWREZXBlbmRlbmNpZXMuamF2YQpAQCAtNDQsNiArNDQsNiBAQAogICAgICAgICAgICAgICAgICsgbnVtYmVyT2ZQYXltZW50UHJvY2Vzc29ycyk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibW9jayBwYXltZW50IHByb2Nzc29yOiIgKyBwcCk7CiAgICAgICAgIHJldHVybiAobnVtYmVyT2ZQYXltZW50UHJvY2Vzc29ycyA9PSAxKSAvLyBNb2NrUGF5bWVudFByb2Nlc3NvcgotICAgICAgICAgICAgICAgICYmIChwcCBpbnN0YW5jZW9mIE1vY2tQYXltZW50UHJvY2Vzc29yKTsgCisgICAgICAgICAgICAgICAgJiYgKHBwIGluc3RhbmNlb2YgTW9ja1BheW1lbnRQcm9jZXNzb3IpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2NsdXN0ZXIvdGVzdC1iaWdjbHVzdGVyLnNoIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2x1c3Rlci90ZXN0LWJpZ2NsdXN0ZXIuc2gKaW5kZXggNDQ0YWQ0NC4uZWI5ODdiMiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2x1c3Rlci90ZXN0LWJpZ2NsdXN0ZXIuc2gKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY2x1c3Rlci90ZXN0LWJpZ2NsdXN0ZXIuc2gKQEAgLTQ5LDkgKzQ5LDkgQEAKICAgICAgICAgICAgICAkMSB+IC9zZXJ2ZXJzLnNlcnZlci4uKi5zeXN0ZW0tcHJvcGVydHkuSFRUUF9MSVNURU5FUl9QT1JULnZhbHVlLyB7IHBvcnRbJDFdID0gJDIgfQogICAgICAgICAgICAgICQxIH4gL3NlcnZlcnNcLnNlcnZlclwuW14uXSpcLm5hbWUkLyB7IGluYW1lWyQyXSA9ICQyIH0KICAgICAgICAgICAgICAkMSB+IC9zZXJ2ZXJzXC5zZXJ2ZXJcLlteLl0qXC5jb25maWctcmVmJC8geyBjbmFtZVskMV0gPSAkMiB9Ci0gICAgICAgICAgICAgRU5EIHsgCisgICAgICAgICAgICAgRU5EIHsKICAgICAgICAgICAgICAgIGNrID0gImNvbmZpZ3MuY29uZmlnLmNoMS1jb25maWcuc3lzdGVtLXByb3BlcnR5LkhUVFBfTElTVEVORVJfUE9SVC52YWx1ZSI7Ci0gICAgICAgICAgICAgICBmb3IgKGkgaW4gaW5hbWUpIHsgCisgICAgICAgICAgICAgICBmb3IgKGkgaW4gaW5hbWUpIHsKICAgICAgICAgICAgICAgICAgaWYgKGkgPT0gInNlcnZlciIpIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICBpZiAoY25hbWVbInNlcnZlcnMuc2VydmVyLiIgaSAiLmNvbmZpZy1yZWYiXSAhPSAiY2gxLWNvbmZpZyIpIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICBrID0gInNlcnZlcnMuc2VydmVyLiIgaSAiLnN5c3RlbS1wcm9wZXJ0eS5IVFRQX0xJU1RFTkVSX1BPUlQudmFsdWUiOwpAQCAtNjEsNyArNjEsNyBAQAogICAgICAgICAgICAgICAgICBwcmludGYgImh0dHA6Ly8lczolcy8lc1xuIiwgaG9zdFtoa10sIHBvcnRba10sIEVOVklST05bInVybCJdCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfScgfAotICAgICB4YXJncyAtdCAtbiAxIC1QIDAgd2dldCAtcSAtLW5vLXByb3h5IC1QICRURVNUSE9NRS9sb2dzLyRpZCAteCAKKyAgICAgeGFyZ3MgLXQgLW4gMSAtUCAwIHdnZXQgLXEgLS1uby1wcm94eSAtUCAkVEVTVEhPTUUvbG9ncy8kaWQgLXgKIH0KIAogYmVuY2goKSB7CkBAIC04Niw3ICs4Niw3IEBACiAgIGJlbmNoIHN0b3AtZG9tYWluICRET01BSU4KICAgYmVuY2ggc3RhcnQtZG9tYWluICRET01BSU4KICAgYmVuY2ggcmVzdGFydC1kb21haW4gJERPTUFJTgotICBncmVwICd0aW1lIHRvIHBhcnNlIGRvbWFpbi54bWwnICRHRkhPTUUvZ2xhc3NmaXNoL2RvbWFpbnMvJERPTUFJTi9sb2dzL3NlcnZlci5sb2cgfCAKKyAgZ3JlcCAndGltZSB0byBwYXJzZSBkb21haW4ueG1sJyAkR0ZIT01FL2dsYXNzZmlzaC9kb21haW5zLyRET01BSU4vbG9ncy9zZXJ2ZXIubG9nIHwKICAgICBzZWQgLWUgJ3MvXi4qVG90YWwgLy8nIC1lICdzL3wjXS8vJyB8IHRhaWwgLTEKICAgZWNobyAnc2l6ZSBvZiBkb21haW4ueG1sOiAnIGBscyAtbCAkR0ZIT01FL2dsYXNzZmlzaC9kb21haW5zLyRET01BSU4vY29uZmlnL2RvbWFpbi54bWwgfCBhd2sgJ3sgcHJpbnQgJDUgfSdgCiAgIFBJREZJTEU9JFRFU1RIT01FL2dsYXNzZmlzaDYvZ2xhc3NmaXNoL2RvbWFpbnMvZG9tYWluMS9jb25maWcvcGlkCkBAIC0xMDIsNyArMTAyLDcgQEAKICAgdGltZSBhc2FkbWluIGRlcGxveSAtLXRhcmdldCBjaDEgLS1uYW1lIGhlbGxvMSAkVEVTVEhPTUUvYXBwcy9oZWxsb3dvcmxkLSR7c3p9LndhcgogICBlY2hvICJzdGFydGluZyBpbnN0YW5jZXMiCiAgIHRpbWUgYXNhZG1pbiBzdGFydC1jbHVzdGVyIGNoMQotICBiZW5jaG1hcmtfY29tbWFuZHMgCisgIGJlbmNobWFya19jb21tYW5kcwogICBlY2hvICJ1bmRlcGxveWluZyBhcHAgZnJvbSBydW5uaW5nIGNsdXN0ZXIiCiAgIHRpbWUgYXNhZG1pbiB1bmRlcGxveSAtLXRhcmdldCBjaDEgaGVsbG8xCiAgIGVjaG8gImRlcGxveWluZyAkc3ogYXBwIHRvIHJ1bm5pbmcgY2x1c3RlciIKQEAgLTEzMiw3ICsxMzIsNyBAQAogICAgICAgZWNobyAiY3JlYXRlLW5vZGUtY29uZmlnIC0tbm9kZWhvc3QgaCR7Y31fJHtpfSBuJHtjfV8ke2l9IgogICAgICAgZWNobyAiY3JlYXRlLWluc3RhbmNlIC0tY2x1c3RlciBjJGMgLS1ub2RlIG4ke2N9XyR7aX0gaSR7Y31fJHtpfSIKICAgICBkb25lCi0gIGRvbmUgfCBhc2FkbWluIAorICBkb25lIHwgYXNhZG1pbgogfQogCiBjcmVhdGVfaG9zdGVkX2NsdXN0ZXJzKCkgewpAQCAtMTU5LDcgKzE1OSw3IEBACiAgICAgICBkb25lCiAgICAgZG9uZQogICAgICNlY2hvICJzZXQgY29uZmlncy5jb25maWcuY2gkYy1jb25maWcuZHluYW1pYy1yZWNvbmZpZ3VyYXRpb24tZW5hYmxlZD10cnVlIgotICBkb25lIHwgYXNhZG1pbiAKKyAgZG9uZSB8IGFzYWRtaW4KIH0KIAogY3JlYXRlX2xvY2FsX2NsdXN0ZXJzKCkgewpAQCAtMTkyLDcgKzE5Miw3IEBACiBjcmVhdGVfaG9zdGVkX25vZGVzKCkgewogICBlY2hvIENyZWF0aW5nIFNTSCBub2RlcyBmcm9tIHRoZSBob3N0ZWRfbm9kZXMgZmlsZSBmb3IgZG9tYWluICRET01BSU4uLi4KICAgZ3JlcCAtdiAnXiMnICRURVNUSE9NRS9ob3N0ZWQtbm9kZXMgfAotICAgIGF3ayAneyBwcmludGYgImNyZWF0ZS1ub2RlLXNzaCAtLW5vZGVob3N0ICVzIC0taW5zdGFsbGRpciAnJElOU1RBTExfTE9DJy9nbGFzc2Zpc2g2IC0tc3NodXNlciAlcyBuLXNzaC0nJERPTUFJTictJWRcbiIsICQyLCAkMSwgKytuIH0nIHwgCisgICAgYXdrICd7IHByaW50ZiAiY3JlYXRlLW5vZGUtc3NoIC0tbm9kZWhvc3QgJXMgLS1pbnN0YWxsZGlyICckSU5TVEFMTF9MT0MnL2dsYXNzZmlzaDYgLS1zc2h1c2VyICVzIG4tc3NoLSckRE9NQUlOJy0lZFxuIiwgJDIsICQxLCArK24gfScgfAogICAgIGFzYWRtaW4KICAgYXNhZG1pbiBsaXN0LW5vZGVzCiB9CkBAIC0yMTIsNyArMjEyLDcgQEAKIGRlbGV0ZV9ob3N0ZWRfbm9kZXMoKSB7CiAgIGVjaG8gRGVsZXRpbmcgU1NIIG5vZGVzLi4uCiAgIGFzYWRtaW4gLS10ZXJzZSBsaXN0LW5vZGVzIHwgZWdyZXAgLXYgJ15bIFx0XSokJyB8IGdyZXAgbi1zc2gtIHwKLSAgICB4YXJncyAtbiAxIGVjaG8gZGVsZXRlLW5vZGUtc3NoIHwgCisgICAgeGFyZ3MgLW4gMSBlY2hvIGRlbGV0ZS1ub2RlLXNzaCB8CiAgICAgYXNhZG1pbiB8fCByZXR1cm4gMQogfQogCkBAIC0yMzksNyArMjM5LDcgQEAKICAgZWNobyBEZXBsb3lpbmcgYW4gYXBwIHRvIGFsbCBjbHVzdGVycyBhbmQgaW5zdGFuY2VzLi4uCiAgIGFzYWRtaW4gZGVwbG95IC0tbmFtZSAkbmFtZSAkZmlsZQogICBhc2FkbWluIC0tdGVyc2UgbGlzdC1jbHVzdGVycyB8IGVncmVwIC12ICdeWyBcdF0qJCcgfCBhd2sgJ3twcmludCAkMX0nIHwKLSAgd2hpbGUgcmVhZCBjbmFtZSAKKyAgd2hpbGUgcmVhZCBjbmFtZQogICBkbwogICAgIGVjaG8gImNyZWF0ZS1hcHBsaWNhdGlvbi1yZWYgLS10YXJnZXQgJGNuYW1lICRuYW1lIgogICBkb25lIHwgYXNhZG1pbiB8fCByZXR1cm4gMQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL1N1blJhWG1sL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9TdW5SYVhtbC9idWlsZC54bWwKaW5kZXggZTU2Y2ZmMy4uYTE2NWVhZSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL1N1blJhWG1sL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvU3VuUmFYbWwvYnVpbGQueG1sCkBAIC0zOCw3ICszOCw3IEBACiAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4gCisgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgogICA8L3RhcmdldD4KIAogICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvU3VuUmFYbWwvY2NpLWVtYmVkZGVkL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvU3VuUmFYbWwvY2NpLWVtYmVkZGVkL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZTdhNjJlNi4uMjE4YWUwMCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL1N1blJhWG1sL2NjaS1lbWJlZGRlZC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9TdW5SYVhtbC9jY2ktZW1iZWRkZWQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTIgKzE1LDEyIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjb25uZWN0b3IiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0iY2NpYmxhY2tib3gucGF0aCIgdmFsdWU9Ii4uL2xpYi9jY2libGFja2JveC10eC5qYXIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWVtYmVkZGVkLWNjaSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZW1iZWRkZWQtY2NpIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImRiLnR5cGUiIHZhbHVlPSJwb2ludGJhc2UiLz4KQEAgLTI5LDUgKzI5LDUgQEAKIDxwcm9wZXJ0eSBuYW1lPSJzdW4tY21wLWRic2NoZW1hIiB2YWx1ZT0iZGVzY3JpcHRvci9zZWNfYmFua2FkbWluX3NjaGVtYS5kYnNjaGVtYSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJyYXJuYW1lIiB2YWx1ZT0iY2NpYmxhY2tib3gtdHgiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJyYXJuYW1lIiB2YWx1ZT0iY2NpYmxhY2tib3gtdHgiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImpkYmMuZHJpdmVycyIgdmFsdWU9ImNvbS5wb2ludGJhc2UuamRiYy5qZGJjVW5pdmVyc2FsRHJpdmVyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvU3VuUmFYbWwvY2NpLWVtYmVkZGVkL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9TdW5SYVhtbC9jY2ktZW1iZWRkZWQvYnVpbGQueG1sCmluZGV4IGU5MzI4OTMuLmE3NjY5ODYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9TdW5SYVhtbC9jY2ktZW1iZWRkZWQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9TdW5SYVhtbC9jY2ktZW1iZWRkZWQvYnVpbGQueG1sCkBAIC0zMSw3ICszMSw3IEBACiAgICAmY29tbW9uQnVpbGQ7CiAgICAmdGVzdFByb3BlcnRpZXM7CiAgICAmcnVuOwotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLHNldHVwLGRlcGxveSxydW4sdW5kZXBsb3ksdW5zZXR1cCIvPgogICAgIDx0YXJnZXQgbmFtZT0icnVuLXRlc3QiIGRlcGVuZHM9ImJ1aWxkLGRlcGxveSxydW4sdW5kZXBsb3kiLz4KIApAQCAtODAsNyArODAsNyBAQAogICAgICA8L3RhcmdldD4KIAogICAgIDwhLS0KLQlDdXN0b20gdGFyZ2V0IGZvciBjb21waWxhdGlvbiB3aXRoIGxvY2FsIGxpYnJhcmllcyBmb3IgY29ubmVjdG9yCisgICAgQ3VzdG9tIHRhcmdldCBmb3IgY29tcGlsYXRpb24gd2l0aCBsb2NhbCBsaWJyYXJpZXMgZm9yIGNvbm5lY3RvcgogICAgIC0tPgogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZS1jY2kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CkBAIC05Niw3ICs5Niw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lbWJlZGRlZC1lYXIiLz4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lbWJlZGRlZC1lYXIiLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icGFja2FnZS1lbWJlZGRlZC1lamIiPgpAQCAtMTI0LDkgKzEyNCw5IEBACiAgICAgICAgICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+CiAgICAgICAgICAgICAgICAgPGNvcHkgZmlsZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiIHRvZmlsZT0iJHthc3NlbWJsZS5kaXJ9L2FwcGxpY2F0aW9uLnhtbCIvPgogICAgICAgICAgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+Ci0JCTxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1lbWJlZGRlZC1lamIiLz4KLQkJPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLWVtYmVkZGVkLWNsaWVudCIvPgotCQk8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2UtcmFyIi8+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1lbWJlZGRlZC1lamIiLz4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLWVtYmVkZGVkLWNsaWVudCIvPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2UtcmFyIi8+CiAgICAgICAgICAgICAgICAgPGVhciBlYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiCiAgICAgICAgICAgICAgICAgICAgICAgICBhcHB4bWw9IiR7YXNzZW1ibGUuZGlyfS9hcHBsaWNhdGlvbi54bWwiPgogICAgICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KQEAgLTEzOSwzMCArMTM5LDMwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICAJPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CisgICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICAgICAgICAgICAgICA8IS0tCi0JCTxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLXBvb2wiPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1wb29sIj4KICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ0eC5tb2RlIiB2YWx1ZT0idHgiLz4KICAgICAgICAgICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtcmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9InR4Lm1vZGUiIHZhbHVlPSJ0eCIvPgogICAgICAgICAgICAgICAgIDwvYW50Y2FsbD4KLQkJLS0+CisgICAgICAgIC0tPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSI+CiAgICAgICAgICAgICAgICAgPCEtLQotCQk8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1yZXNvdXJjZSIvPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1yZXNvdXJjZSIvPgogICAgICAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLXBvb2wiLz4KLQkJLS0+Ci0JCTxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CisgICAgICAgIC0tPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgogCiAKLSAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPiAgCi0gICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4gICAKLQk8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSJFbWJlZGRlZCIvPiAgICAgCi0gICAgPC9hbnRjYWxsPiAgIAorICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KKyAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSJFbWJlZGRlZCIvPgorICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgpAQCAtMjA5LDEwICsyMDksMTAgQEAKIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1yYXIiPgotCTxjb3B5IGZpbGU9ImRlc2NyaXB0b3IvcmEueG1sIiB0b2ZpbGU9IiR7YXNzZW1ibGUuZGlyfS9yYXIvTUVUQS1JTkYvcmEueG1sIi8+Ci0JPGNvcHkgZmlsZT0iZGVzY3JpcHRvci9zdW4tcmEueG1sIiB0b2ZpbGU9IiR7YXNzZW1ibGUuZGlyfS9yYXIvTUVUQS1JTkYvc3VuLXJhLnhtbCIvPgotCTxjb3B5IGZpbGU9IiR7ZW52LkFQU19IT01FfS9zcWV0ZXN0cy9jb25uZWN0b3IvbGliL2NjaWJsYWNrYm94LXR4LmphciIgdG9maWxlPSIke2Fzc2VtYmxlLmRpcn0vcmFyL2NjaWJsYWNrYm94LXR4LmphciIvPgotCTxyZXBsYWNlIGZpbGU9IiR7YXNzZW1ibGUuZGlyfS9yYXIvTUVUQS1JTkYvcmEueG1sIiB0b2tlbj0iREJVUkwiIHZhbHVlPSIke2RiLnVybH0iLz4KKyAgICA8Y29weSBmaWxlPSJkZXNjcmlwdG9yL3JhLnhtbCIgdG9maWxlPSIke2Fzc2VtYmxlLmRpcn0vcmFyL01FVEEtSU5GL3JhLnhtbCIvPgorICAgIDxjb3B5IGZpbGU9ImRlc2NyaXB0b3Ivc3VuLXJhLnhtbCIgdG9maWxlPSIke2Fzc2VtYmxlLmRpcn0vcmFyL01FVEEtSU5GL3N1bi1yYS54bWwiLz4KKyAgICA8Y29weSBmaWxlPSIke2Vudi5BUFNfSE9NRX0vc3FldGVzdHMvY29ubmVjdG9yL2xpYi9jY2libGFja2JveC10eC5qYXIiIHRvZmlsZT0iJHthc3NlbWJsZS5kaXJ9L3Jhci9jY2libGFja2JveC10eC5qYXIiLz4KKyAgICA8cmVwbGFjZSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vcmFyL01FVEEtSU5GL3JhLnhtbCIgdG9rZW49IkRCVVJMIiB2YWx1ZT0iJHtkYi51cmx9Ii8+CiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJwYWNrYWdlLXJhciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtMjYyLDUgKzI2Miw1IEBACiAgICAgICAgIDwvZXhlYz4KIDwvdGFyZ2V0PgogCi0gIAorCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvU3VuUmFYbWwvY2NpLWVtYmVkZGVkL2NsaWVudC9Db2ZmZWVDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9TdW5SYVhtbC9jY2ktZW1iZWRkZWQvY2xpZW50L0NvZmZlZUNsaWVudC5qYXZhCmluZGV4IGQzNWE3YjguLmNmOTY0YzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9TdW5SYVhtbC9jY2ktZW1iZWRkZWQvY2xpZW50L0NvZmZlZUNsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9TdW5SYVhtbC9jY2ktZW1iZWRkZWQvY2xpZW50L0NvZmZlZUNsaWVudC5qYXZhCkBAIC0zMCwxNyArMzAsMTcgQEAKICAgICAgICBTdHJpbmcgdGVzdElkID0gIkoyRUUgQ29ubmVjdG9ycyA6IEVtYmVkZGVkIEFkYXB0ZXIgVGVzdHMiOwogICAgICAgIHRyeSB7CiAKLQkgICBpZiAoYXJncy5sZW5ndGggPT0gMSkgewotCSAgICAgICB0ZXN0SWQgPSBhcmdzWzBdOwotCSAgIH0KKyAgICAgICBpZiAoYXJncy5sZW5ndGggPT0gMSkgeworICAgICAgICAgICB0ZXN0SWQgPSBhcmdzWzBdOworICAgICAgIH0KIAogICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4odGVzdElkICsgIiA6IENvZmZlZUNsaWVudCBzdGFydGVkIGluIG1haW4uLi4iKTsKLQkgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJKMkVFIENvbm5lY3RvcnMgMS41OiBFbWJlZGRlZCBDQ0kgQWRhcHRlciB0ZXN0cyIpOworICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIkoyRUUgQ29ubmVjdG9ycyAxLjU6IEVtYmVkZGVkIENDSSBBZGFwdGVyIHRlc3RzIik7CiAgICAgICAgICAgIENvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICBPYmplY3Qgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZUNvZmZlZSIpOwogCi0gICAgICAgICAgIENvZmZlZVJlbW90ZUhvbWUgaG9tZSA9IAotICAgICAgICAgICAgICAgKENvZmZlZVJlbW90ZUhvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwgCisgICAgICAgICAgIENvZmZlZVJlbW90ZUhvbWUgaG9tZSA9CisgICAgICAgICAgICAgICAoQ29mZmVlUmVtb3RlSG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZmZlZVJlbW90ZUhvbWUuY2xhc3MpOwogCiAgICAgICAgICAgIENvZmZlZVJlbW90ZSBjb2ZmZWUgPSBob21lLmNyZWF0ZSgpOwpAQCAtNTUsMjMgKzU1LDIzIEBACiAKICAgICAgICAgICAgaW50IG5ld0NvdW50ID0gY29mZmVlLmdldENvZmZlZUNvdW50KCk7CiAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiQ29mZmVlIGNvdW50ID0gIiArIG5ld0NvdW50KTsKLQkgICBpZiAoY291bnQ9PShuZXdDb3VudC0zKSkgewotCQlzdGF0LmFkZFN0YXR1cygiQ29ubmVjdG9yOmNjaSBDb25uZWN0b3IgIiArIHRlc3RJZCArICIgcmFyIFRlc3Qgc3RhdHVzOiIsc3RhdC5QQVNTKTsKLQkgICB9ZWxzZXsKLQkJc3RhdC5hZGRTdGF0dXMoIkNvbm5lY3RvcjpjY2kgQ29ubmVjdG9yICIgKyB0ZXN0SWQgKyAiIHJhciBUZXN0IHN0YXR1czoiLHN0YXQuRkFJTCk7Ci0JICAgfQorICAgICAgIGlmIChjb3VudD09KG5ld0NvdW50LTMpKSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJDb25uZWN0b3I6Y2NpIENvbm5lY3RvciAiICsgdGVzdElkICsgIiByYXIgVGVzdCBzdGF0dXM6IixzdGF0LlBBU1MpOworICAgICAgIH1lbHNleworICAgICAgICBzdGF0LmFkZFN0YXR1cygiQ29ubmVjdG9yOmNjaSBDb25uZWN0b3IgIiArIHRlc3RJZCArICIgcmFyIFRlc3Qgc3RhdHVzOiIsc3RhdC5GQUlMKTsKKyAgICAgICB9CiAKIAogCiAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiQ2F1Z2h0IGFuIHVuZXhwZWN0ZWQgZXhjZXB0aW9uISIpOwotCSAgIHN0YXQuYWRkU3RhdHVzKCJDb25uZWN0b3I6Q0NJIENvbm5lY3RvciAiICsgdGVzdElkICsgIiByYXIgVGVzdCBzdGF0dXM6IixzdGF0LkZBSUwpOworICAgICAgIHN0YXQuYWRkU3RhdHVzKCJDb25uZWN0b3I6Q0NJIENvbm5lY3RvciAiICsgdGVzdElkICsgIiByYXIgVGVzdCBzdGF0dXM6IixzdGF0LkZBSUwpOwogICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICB9ZmluYWxseXsKLQkgICAvL3ByaW50IHRlc3Qgc3VtbWFyeQotCSAgIHN0YXQucHJpbnRTdW1tYXJ5KHRlc3RJZCk7CisgICAgICAgLy9wcmludCB0ZXN0IHN1bW1hcnkKKyAgICAgICBzdGF0LnByaW50U3VtbWFyeSh0ZXN0SWQpOwogICAgICAgIH0KLSAgIH0gCisgICB9CiAKIAotfSAKK30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9TdW5SYVhtbC9jY2ktZW1iZWRkZWQvZWpiL0NvZmZlZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9TdW5SYVhtbC9jY2ktZW1iZWRkZWQvZWpiL0NvZmZlZUJlYW4uamF2YQppbmRleCBiNGNjYjdjLi45NjU0ZDdjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvU3VuUmFYbWwvY2NpLWVtYmVkZGVkL2VqYi9Db2ZmZWVCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL1N1blJhWG1sL2NjaS1lbWJlZGRlZC9lamIvQ29mZmVlQmVhbi5qYXZhCkBAIC02MCw3ICs2MCw3IEBACiAgICAgICAgICAgICBJbmRleGVkUmVjb3JkIGlSZWMgPSByZi5jcmVhdGVJbmRleGVkUmVjb3JkKCJJbnB1dFJlY29yZCIpOwogICAgICAgICAgICAgUmVjb3JkIG9SZWMgPSBpeC5leGVjdXRlKGlTcGVjLCBpUmVjKTsKICAgICAgICAgICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gKChJbmRleGVkUmVjb3JkKW9SZWMpLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICB3aGlsZShpdGVyYXRvci5oYXNOZXh0KCkpIHsgICAKKyAgICAgICAgICAgIHdoaWxlKGl0ZXJhdG9yLmhhc05leHQoKSkgewogICAgICAgICAgICAgICAgIE9iamVjdCBvYmogPSBpdGVyYXRvci5uZXh0KCk7CiAgICAgICAgICAgICAgICAgaWYob2JqIGluc3RhbmNlb2YgSW50ZWdlcikgewogICAgICAgICAgICAgICAgICAgICBjb3VudCA9ICgoSW50ZWdlcilvYmopLmludFZhbHVlKCk7CkBAIC05OSwxMSArOTksMTEgQEAKICAgICBwcml2YXRlIENvbm5lY3Rpb24gZ2V0Q0NJQ29ubmVjdGlvbigpIHsKICAgICAgICAgQ29ubmVjdGlvbiBjb24gPSBudWxsOwogCi0JU3lzdGVtLm91dC5wcmludGxuKCI8PT09PT09PT09PSBJTiBnZXQgY2NpIENvbm5lY3Rpb24gPT09PT09PT09PT0+Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCI8PT09PT09PT09PSBJTiBnZXQgY2NpIENvbm5lY3Rpb24gPT09PT09PT09PT0+Iik7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb25uZWN0aW9uU3BlYyBzcGVjID0gbmV3IENjaUNvbm5lY3Rpb25TcGVjKCJEQlVTRVIiLCAiREJQQVNTV09SRCIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiPD09PT09PT09PT0gQ3JlYXRlZCBJU3BlYyA9PT09PT09PT09PT4iKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkNGIHZhbHVlIDogIiArIGNmKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIjw9PT09PT09PT09IENyZWF0ZWQgSVNwZWMgPT09PT09PT09PT0+Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJDRiB2YWx1ZSA6ICIgKyBjZik7CiAgICAgICAgICAgICBjb24gPSBjZi5nZXRDb25uZWN0aW9uKHNwZWMpOwogICAgICAgICB9IGNhdGNoIChSZXNvdXJjZUV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CkBAIC0xMjMsNCArMTIzLDQgQEAKICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHt9CiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkge30KIAotfSAKK30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9TdW5SYVhtbC9jY2kvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9TdW5SYVhtbC9jY2kvYnVpbGQucHJvcGVydGllcwppbmRleCBmYTg2NTU2Li4wZDc1MTQyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvU3VuUmFYbWwvY2NpL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL1N1blJhWG1sL2NjaS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMiArMTUsMTIgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNvbm5lY3RvciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJjY2libGFja2JveC5wYXRoIiB2YWx1ZT0iLi4vbGliL2NjaWJsYWNrYm94LXR4LmphciIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJjb25uZWN0b3ItY2NpIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9ImNvbm5lY3Rvci1jY2kiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZGIudHlwZSIgdmFsdWU9InBvaW50YmFzZSIvPgpAQCAtMjksNSArMjksNSBAQAogPHByb3BlcnR5IG5hbWU9InN1bi1jbXAtZGJzY2hlbWEiIHZhbHVlPSJkZXNjcmlwdG9yL3NlY19iYW5rYWRtaW5fc2NoZW1hLmRic2NoZW1hIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InJhcm5hbWUiIHZhbHVlPSJjY2libGFja2JveC10eCIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9InJhcm5hbWUiIHZhbHVlPSJjY2libGFja2JveC10eCIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iamRiYy5kcml2ZXJzIiB2YWx1ZT0iY29tLnBvaW50YmFzZS5qZGJjLmpkYmNVbml2ZXJzYWxEcml2ZXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9TdW5SYVhtbC9jY2kvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL1N1blJhWG1sL2NjaS9idWlsZC54bWwKaW5kZXggYjkxNGI5Zi4uYTIyYWE0MyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL1N1blJhWG1sL2NjaS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL1N1blJhWG1sL2NjaS9idWlsZC54bWwKQEAgLTEwNSw3ICsxMDUsNyBAQAogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiPgotPCEtLSAKKzwhLS0KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1yZXNvdXJjZSIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLXBvb2wiLz4KIC0tPgpAQCAtMTE5LDEwICsxMTksMTAgQEAKICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgogPC90YXJnZXQ+CiAKLTx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+ICAKLSAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPiAgIAotICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSJzdGFuZGFsb25lIi8+ICAgICAKLSAgICA8L2FudGNhbGw+ICAgCis8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiI+CisgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9InN0YW5kYWxvbmUiLz4KKyAgICA8L2FudGNhbGw+CiA8L3RhcmdldD4KIAogPCEtLSBzZXR1cCAtLT4KQEAgLTEzOSw3ICsxMzksNyBAQAogPHRhcmdldCBuYW1lPSJjcmVhdGUtcG9vbCI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtY29ubmVjdG9yLWNvbm5wb29sLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJyYS5uYW1lIiB2YWx1ZT0iY2NpYmxhY2tib3gtJHt0eC5tb2RlfSIvPgotICAgICAgICA8cGFyYW0gbmFtZT0iY29ubmVjdGlvbi5kZWZuYW1lIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImNvbm5lY3Rpb24uZGVmbmFtZSIKICAgICAgICAgICAgIHZhbHVlPSJqYWthcnRhLnJlc291cmNlLmNjaS5Db25uZWN0aW9uRmFjdG9yeSIvPgogICAgICAgICA8cGFyYW0gbmFtZT0iY29ubmVjdG9yLmNvbnBvb2wubmFtZSIgdmFsdWU9IkNDSS1DT05OUE9PTCIvPgogICAgIDwvYW50Y2FsbD4KQEAgLTE4MSw3ICsxODEsNyBAQAogCiA8IS0tIGNyZWF0ZSB0aGUgYXBwY2xpZW50IGphciBmaWxlIHdpdGggY3VzdG9tIGNsYXNzZXMtLT4KIDx0YXJnZXQgbmFtZT0iYXBwY2xpZW50LWphciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICB2YWx1ZT0iKiovKkxvY2FsKi5jbGFzcywqKi8qUmVtb3RlKi5jbGFzcywqKi8qSG9tZSouY2xhc3MsKiovKkNsaWVudCouY2xhc3MiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2UtYXBwY2xpZW50amFyLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiCkBAIC0yMTUsMTMgKzIxNSwxMyBAQAogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0iY3JlYXRlLXJhciI+Ci0gICAgPGNvcHkgZmlsZT0iZGVzY3JpcHRvci9yYS54bWwiIAorICAgIDxjb3B5IGZpbGU9ImRlc2NyaXB0b3IvcmEueG1sIgogICAgICAgICB0b2ZpbGU9IiR7YXNzZW1ibGUuZGlyfS9yYXIvTUVUQS1JTkYvcmEueG1sIi8+CiAgICAgPGNvcHkgZmlsZT0iZGVzY3JpcHRvci9zdW4tcmEueG1sIgotCXRvZmlsZT0iJHthc3NlbWJsZS5kaXJ9L3Jhci9NRVRBLUlORi9zdW4tcmEueG1sIi8+Ci0gICAgPGNvcHkgZmlsZT0iJHtlbnYuQVBTX0hPTUV9L3NxZXRlc3RzL2Nvbm5lY3Rvci9saWIvY2NpYmxhY2tib3gtdHguamFyIiAKKyAgICB0b2ZpbGU9IiR7YXNzZW1ibGUuZGlyfS9yYXIvTUVUQS1JTkYvc3VuLXJhLnhtbCIvPgorICAgIDxjb3B5IGZpbGU9IiR7ZW52LkFQU19IT01FfS9zcWV0ZXN0cy9jb25uZWN0b3IvbGliL2NjaWJsYWNrYm94LXR4LmphciIKICAgICAgICAgdG9maWxlPSIke2Fzc2VtYmxlLmRpcn0vcmFyL2NjaWJsYWNrYm94LXR4LmphciIvPgotICAgIDxyZXBsYWNlIGZpbGU9IiR7YXNzZW1ibGUuZGlyfS9yYXIvTUVUQS1JTkYvcmEueG1sIiAKKyAgICA8cmVwbGFjZSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vcmFyL01FVEEtSU5GL3JhLnhtbCIKICAgICAgICAgdG9rZW49IkRCVVJMIiB2YWx1ZT0iJHtkYi51cmx9Ii8+CiA8L3RhcmdldD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL1N1blJhWG1sL2NjaS9jbGllbnQvQ29mZmVlQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvU3VuUmFYbWwvY2NpL2NsaWVudC9Db2ZmZWVDbGllbnQuamF2YQppbmRleCBkOGMyNmEzLi5mYWEwYzBlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvU3VuUmFYbWwvY2NpL2NsaWVudC9Db2ZmZWVDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvU3VuUmFYbWwvY2NpL2NsaWVudC9Db2ZmZWVDbGllbnQuamF2YQpAQCAtMzAsMTcgKzMwLDE3IEBACiAgICAgICAgU3RyaW5nIHRlc3RJZCA9ICJKMkVFIENvbm5lY3RvcnMgMS41IDogU3RhbmRhbG9uZSBhZGFwdGVyIHRlc3RzIjsKICAgICAgICB0cnkgewogCi0JICAgaWYgKGFyZ3MubGVuZ3RoID09IDEpIHsKLQkgICAgICAgdGVzdElkID0gYXJnc1swXTsKLQkgICB9CisgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09IDEpIHsKKyAgICAgICAgICAgdGVzdElkID0gYXJnc1swXTsKKyAgICAgICB9CiAKICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKHRlc3RJZCArICIgOiBDb2ZmZWVDbGllbnQgc3RhcnRlZCBpbiBtYWluLi4uIik7Ci0JICAgc3RhdC5hZGREZXNjcmlwdGlvbigiSjJFRSBDb25uZWN0b3JzIDEuNSA6IFN0YW5kYWxvbmUgQ0NJIGFkYXB0ZXIgVGVzdHMiKTsKKyAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJKMkVFIENvbm5lY3RvcnMgMS41IDogU3RhbmRhbG9uZSBDQ0kgYWRhcHRlciBUZXN0cyIpOwogICAgICAgICAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVDb2ZmZWUiKTsKIAotICAgICAgICAgICBDb2ZmZWVSZW1vdGVIb21lIGhvbWUgPSAKLSAgICAgICAgICAgICAgIChDb2ZmZWVSZW1vdGVIb21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIAorICAgICAgICAgICBDb2ZmZWVSZW1vdGVIb21lIGhvbWUgPQorICAgICAgICAgICAgICAgKENvZmZlZVJlbW90ZUhvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2ZmZWVSZW1vdGVIb21lLmNsYXNzKTsKIAogICAgICAgICAgICBDb2ZmZWVSZW1vdGUgY29mZmVlID0gaG9tZS5jcmVhdGUoKTsKQEAgLTU1LDIyICs1NSwyMiBAQAogCiAgICAgICAgICAgIGludCBuZXdDb3VudCA9IGNvZmZlZS5nZXRDb2ZmZWVDb3VudCgpOwogICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkNvZmZlZSBjb3VudCA9ICIgKyBuZXdDb3VudCk7Ci0JICAgaWYgKGNvdW50PT0obmV3Q291bnQtMykpIHsKLQkJc3RhdC5hZGRTdGF0dXMoIkNvbm5lY3RvcjpjY2kgQ29ubmVjdG9yICIgKyB0ZXN0SWQgKyAiIHJhciBUZXN0IHN0YXR1czoiLHN0YXQuUEFTUyk7Ci0JICAgfWVsc2V7Ci0JCXN0YXQuYWRkU3RhdHVzKCJDb25uZWN0b3I6Y2NpIENvbm5lY3RvciAiICsgdGVzdElkICsgIiByYXIgVGVzdCBzdGF0dXM6IixzdGF0LkZBSUwpOwotCSAgIH0KKyAgICAgICBpZiAoY291bnQ9PShuZXdDb3VudC0zKSkgeworICAgICAgICBzdGF0LmFkZFN0YXR1cygiQ29ubmVjdG9yOmNjaSBDb25uZWN0b3IgIiArIHRlc3RJZCArICIgcmFyIFRlc3Qgc3RhdHVzOiIsc3RhdC5QQVNTKTsKKyAgICAgICB9ZWxzZXsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoIkNvbm5lY3RvcjpjY2kgQ29ubmVjdG9yICIgKyB0ZXN0SWQgKyAiIHJhciBUZXN0IHN0YXR1czoiLHN0YXQuRkFJTCk7CisgICAgICAgfQogCi0JICAgLy9wcmludCB0ZXN0IHN1bW1hcnkKLQkgICBzdGF0LnByaW50U3VtbWFyeSh0ZXN0SWQpOworICAgICAgIC8vcHJpbnQgdGVzdCBzdW1tYXJ5CisgICAgICAgc3RhdC5wcmludFN1bW1hcnkodGVzdElkKTsKIAogCiAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiQ2F1Z2h0IGFuIHVuZXhwZWN0ZWQgZXhjZXB0aW9uISIpOwotCSAgIHN0YXQuYWRkU3RhdHVzKCJDb25uZWN0b3I6Q0NJIENvbm5lY3RvciAiICsgdGVzdElkICsgIiByYXIgVGVzdCBzdGF0dXM6IixzdGF0LkZBSUwpOworICAgICAgIHN0YXQuYWRkU3RhdHVzKCJDb25uZWN0b3I6Q0NJIENvbm5lY3RvciAiICsgdGVzdElkICsgIiByYXIgVGVzdCBzdGF0dXM6IixzdGF0LkZBSUwpOwogICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICB9Ci0gICB9IAorICAgfQogCiAKLX0gCit9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvU3VuUmFYbWwvY2NpL2VqYi9Db2ZmZWVCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvU3VuUmFYbWwvY2NpL2VqYi9Db2ZmZWVCZWFuLmphdmEKaW5kZXggMjg4MzU4OS4uZmYxYTg1ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL1N1blJhWG1sL2NjaS9lamIvQ29mZmVlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9TdW5SYVhtbC9jY2kvZWpiL0NvZmZlZUJlYW4uamF2YQpAQCAtNjAsNyArNjAsNyBAQAogICAgICAgICAgICAgSW5kZXhlZFJlY29yZCBpUmVjID0gcmYuY3JlYXRlSW5kZXhlZFJlY29yZCgiSW5wdXRSZWNvcmQiKTsKICAgICAgICAgICAgIFJlY29yZCBvUmVjID0gaXguZXhlY3V0ZShpU3BlYywgaVJlYyk7CiAgICAgICAgICAgICBJdGVyYXRvciBpdGVyYXRvciA9ICgoSW5kZXhlZFJlY29yZClvUmVjKS5pdGVyYXRvcigpOwotICAgICAgICAgICAgd2hpbGUoaXRlcmF0b3IuaGFzTmV4dCgpKSB7ICAgCisgICAgICAgICAgICB3aGlsZShpdGVyYXRvci5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgICAgICBPYmplY3Qgb2JqID0gaXRlcmF0b3IubmV4dCgpOwogICAgICAgICAgICAgICAgIGlmKG9iaiBpbnN0YW5jZW9mIEludGVnZXIpIHsKICAgICAgICAgICAgICAgICAgICAgY291bnQgPSAoKEludGVnZXIpb2JqKS5pbnRWYWx1ZSgpOwpAQCAtOTksMTEgKzk5LDExIEBACiAgICAgcHJpdmF0ZSBDb25uZWN0aW9uIGdldENDSUNvbm5lY3Rpb24oKSB7CiAgICAgICAgIENvbm5lY3Rpb24gY29uID0gbnVsbDsKIAotCVN5c3RlbS5vdXQucHJpbnRsbigiPD09PT09PT09PT0gSU4gZ2V0IGNjaSBDb25uZWN0aW9uID09PT09PT09PT09PiIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPD09PT09PT09PT0gSU4gZ2V0IGNjaSBDb25uZWN0aW9uID09PT09PT09PT09PiIpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ29ubmVjdGlvblNwZWMgc3BlYyA9IG5ldyBDY2lDb25uZWN0aW9uU3BlYygiREJVU0VSIiwgIkRCUEFTU1dPUkQiKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIjw9PT09PT09PT09IENyZWF0ZWQgSVNwZWMgPT09PT09PT09PT0+Iik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJDRiB2YWx1ZSA6ICIgKyBjZik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCI8PT09PT09PT09PSBDcmVhdGVkIElTcGVjID09PT09PT09PT09PiIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ0YgdmFsdWUgOiAiICsgY2YpOwogICAgICAgICAgICAgY29uID0gY2YuZ2V0Q29ubmVjdGlvbihzcGVjKTsKICAgICAgICAgfSBjYXRjaCAoUmVzb3VyY2VFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwpAQCAtMTIzLDQgKzEyMyw0IEBACiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7fQogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHt9CiAKLX0gCit9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2J1aWxkLnhtbAppbmRleCBkYjEyNTIwLi44NDM2NzNmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9idWlsZC54bWwKQEAgLTM3LDE5ICszNywxOSBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJwZS1hbGwiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJhY2t1cC1jb25maWctcGUiLz4KLQk8ZWNobyBtZXNzYWdlPSJOT1RFOiBUaGUgZmlsZSAke2Vudi5BUFNfSE9NRX0vY29uZmlnLnByb3BlcnRpZXMgaXMgYmVpbmcgcmVwbGFjZWQgd2l0aCAke2Jhc2VkaXJ9L2NvbmZpZy9wZS1jb25maWcucHJvcGVydGllcy4gVGhlIGZpbGUgd2lsbCBiZSByZXZlcnRlZCB0byBpdHMgb3JpZ2luYWwgc3RhdGUgYWZ0ZXIgdGhlIGNvbXBsZXRpb24gb2YgdGhlc2UgdGVzdHMuIi8+Ci0JPGNvcHkgZmlsZT0iJHtiYXNlZGlyfS9jb25maWcvcGUtY29uZmlnLnByb3BlcnRpZXMiIHRvZmlsZT0iJHtlbnYuQVBTX0hPTUV9L2NvbmZpZy5wcm9wZXJ0aWVzIiBvdmVyd3JpdGU9InRydWUiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1wZS1wYXNzd29yZGZpbGUiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9ImFsbCIvPgorICAgIDxlY2hvIG1lc3NhZ2U9Ik5PVEU6IFRoZSBmaWxlICR7ZW52LkFQU19IT01FfS9jb25maWcucHJvcGVydGllcyBpcyBiZWluZyByZXBsYWNlZCB3aXRoICR7YmFzZWRpcn0vY29uZmlnL3BlLWNvbmZpZy5wcm9wZXJ0aWVzLiBUaGUgZmlsZSB3aWxsIGJlIHJldmVydGVkIHRvIGl0cyBvcmlnaW5hbCBzdGF0ZSBhZnRlciB0aGUgY29tcGxldGlvbiBvZiB0aGVzZSB0ZXN0cy4iLz4KKyAgICA8Y29weSBmaWxlPSIke2Jhc2VkaXJ9L2NvbmZpZy9wZS1jb25maWcucHJvcGVydGllcyIgdG9maWxlPSIke2Vudi5BUFNfSE9NRX0vY29uZmlnLnByb3BlcnRpZXMiIG92ZXJ3cml0ZT0idHJ1ZSIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLXBlLXBhc3N3b3JkZmlsZSIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdG9yZS1jb25maWctcGUiLz4KICAgICA8L3RhcmdldD4KLQkKKwogICAgIDx0YXJnZXQgbmFtZT0iZGFzLWFsbCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYmFja3VwLWNvbmZpZy1wZSIvPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJOT1RFOiBUaGUgZmlsZSAke2Vudi5BUFNfSE9NRX0vY29uZmlnLnByb3BlcnRpZXMgaXMgYmVpbmcgcmVwbGFjZWQgd2l0aCAke2Jhc2VkaXJ9L2NvbmZpZy9kYXMtY29uZmlnLnByb3BlcnRpZXMuIFRoZSBmaWxlIHdpbGwgYmUgcmV2ZXJ0ZWQgdG8gaXRzIG9yaWdpbmFsIHN0YXRlIGFmdGVyIHRoZSBjb21wbGV0aW9uIG9mIHRoZXNlIHRlc3RzLiIvPgotCTxjb3B5IGZpbGU9IiR7YmFzZWRpcn0vY29uZmlnL2Rhcy1jb25maWcucHJvcGVydGllcyIgdG9maWxlPSIke2Vudi5BUFNfSE9NRX0vY29uZmlnLnByb3BlcnRpZXMiIG92ZXJ3cml0ZT0idHJ1ZSIvPgotCTxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWVlLXBhc3N3b3JkZmlsZSIvPgotCTxhbnRjYWxsIHRhcmdldD0iYWxsIi8+CisgICAgPGNvcHkgZmlsZT0iJHtiYXNlZGlyfS9jb25maWcvZGFzLWNvbmZpZy5wcm9wZXJ0aWVzIiB0b2ZpbGU9IiR7ZW52LkFQU19IT01FfS9jb25maWcucHJvcGVydGllcyIgb3ZlcndyaXRlPSJ0cnVlIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtZWUtcGFzc3dvcmRmaWxlIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXN0b3JlLWNvbmZpZy1wZSIvPgogICAgIDwvdGFyZ2V0PgogCkBAIC01Nyw1OCArNTcsNTggQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJiYWNrdXAtY29uZmlnLXBlIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYmFja3VwLWNvbmZpZy1lZSIvPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJOT1RFOiBUaGUgZmlsZSAke2Vudi5BUFNfSE9NRX0vY29uZmlnLnByb3BlcnRpZXMgaXMgYmVpbmcgcmVwbGFjZWQgd2l0aCAke2Jhc2VkaXJ9L2NvbmZpZy9kYXMtY29uZmlnLnByb3BlcnRpZXMuIFRoZSBmaWxlIHdpbGwgYmUgcmV2ZXJ0ZWQgdG8gaXRzIG9yaWdpbmFsIHN0YXRlIGFmdGVyIHRoZSBjb21wbGV0aW9uIG9mIHRoZXNlIHRlc3RzLiIvPgotCTxjb3B5IGZpbGU9IiR7YmFzZWRpcn0vY29uZmlnL2VlLWNvbmZpZy5wcm9wZXJ0aWVzIiB0b2ZpbGU9IiR7ZW52LkFQU19IT01FfS9jb25maWcucHJvcGVydGllcyIgb3ZlcndyaXRlPSJ0cnVlIi8+Ci0JPGNvcHkgZmlsZT0iJHtiYXNlZGlyfS9jb25maWcvZWUtY29uZmlnLnByb3BlcnRpZXMiIHRvZmlsZT0iJHtlbnYuQVBTX0hPTUV9L2VlY29uZmlnL2VlLWNvbmZpZy5wcm9wZXJ0aWVzIiBvdmVyd3JpdGU9InRydWUiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1lZS1wYXNzd29yZGZpbGUiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9ImVlIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJhbGwiLz4KKyAgICA8Y29weSBmaWxlPSIke2Jhc2VkaXJ9L2NvbmZpZy9lZS1jb25maWcucHJvcGVydGllcyIgdG9maWxlPSIke2Vudi5BUFNfSE9NRX0vY29uZmlnLnByb3BlcnRpZXMiIG92ZXJ3cml0ZT0idHJ1ZSIvPgorICAgIDxjb3B5IGZpbGU9IiR7YmFzZWRpcn0vY29uZmlnL2VlLWNvbmZpZy5wcm9wZXJ0aWVzIiB0b2ZpbGU9IiR7ZW52LkFQU19IT01FfS9lZWNvbmZpZy9lZS1jb25maWcucHJvcGVydGllcyIgb3ZlcndyaXRlPSJ0cnVlIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtZWUtcGFzc3dvcmRmaWxlIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJlZSIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdG9yZS1jb25maWctcGUiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXN0b3JlLWNvbmZpZy1lZSIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJiYWNrdXAtY29uZmlnLXBlIiBkZXBlbmRzPSJyZXBsYWNlLXBhc3N3b3JkLXdpdGgtcGFzc3dvcmRmaWxlIj4KLQk8Y29weSBmaWxlPSIke2Vudi5BUFNfSE9NRX0vY29uZmlnLnByb3BlcnRpZXMiIHRvZmlsZT0iJHtlbnYuQVBTX0hPTUV9L2NvbmZpZy5wcm9wZXJ0aWVzLmJhayIgb3ZlcndyaXRlPSJ0cnVlIi8+CisgICAgPGNvcHkgZmlsZT0iJHtlbnYuQVBTX0hPTUV9L2NvbmZpZy5wcm9wZXJ0aWVzIiB0b2ZpbGU9IiR7ZW52LkFQU19IT01FfS9jb25maWcucHJvcGVydGllcy5iYWsiIG92ZXJ3cml0ZT0idHJ1ZSIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0b3JlLWNvbmZpZy1wZSIgZGVwZW5kcz0idW5kby1yZXBsYWNlLXBhc3N3b3JkLXdpdGgtcGFzc3dvcmRmaWxlIj4KLQk8Y29weSBmaWxlPSIke2Vudi5BUFNfSE9NRX0vY29uZmlnLnByb3BlcnRpZXMuYmFrIiB0b2ZpbGU9IiR7ZW52LkFQU19IT01FfS9jb25maWcucHJvcGVydGllcyIgb3ZlcndyaXRlPSJ0cnVlIi8+CisgICAgPGNvcHkgZmlsZT0iJHtlbnYuQVBTX0hPTUV9L2NvbmZpZy5wcm9wZXJ0aWVzLmJhayIgdG9maWxlPSIke2Vudi5BUFNfSE9NRX0vY29uZmlnLnByb3BlcnRpZXMiIG92ZXJ3cml0ZT0idHJ1ZSIvPgogICAgIDwvdGFyZ2V0PgotCQkKKwogICAgIDx0YXJnZXQgbmFtZT0iYmFja3VwLWNvbmZpZy1lZSI+Ci0JPGNvcHkgZmlsZT0iJHtlbnYuQVBTX0hPTUV9L2VlY29uZmlnL2VlLWNvbmZpZy5wcm9wZXJ0aWVzIiB0b2ZpbGU9IiR7ZW52LkFQU19IT01FfS9lZWNvbmZpZy9lZS1jb25maWcucHJvcGVydGllcy5iYWsiIG92ZXJ3cml0ZT0idHJ1ZSIvPgorICAgIDxjb3B5IGZpbGU9IiR7ZW52LkFQU19IT01FfS9lZWNvbmZpZy9lZS1jb25maWcucHJvcGVydGllcyIgdG9maWxlPSIke2Vudi5BUFNfSE9NRX0vZWVjb25maWcvZWUtY29uZmlnLnByb3BlcnRpZXMuYmFrIiBvdmVyd3JpdGU9InRydWUiLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVzdG9yZS1jb25maWctZWUiPgotCTxjb3B5IGZpbGU9IiR7ZW52LkFQU19IT01FfS9lZWNvbmZpZy9lZS1jb25maWcucHJvcGVydGllcy5iYWsiIHRvZmlsZT0iJHtlbnYuQVBTX0hPTUV9L2VlY29uZmlnL2VlLWNvbmZpZy5wcm9wZXJ0aWVzIiBvdmVyd3JpdGU9InRydWUiLz4KKyAgICA8Y29weSBmaWxlPSIke2Vudi5BUFNfSE9NRX0vZWVjb25maWcvZWUtY29uZmlnLnByb3BlcnRpZXMuYmFrIiB0b2ZpbGU9IiR7ZW52LkFQU19IT01FfS9lZWNvbmZpZy9lZS1jb25maWcucHJvcGVydGllcyIgb3ZlcndyaXRlPSJ0cnVlIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1wZS1wYXNzd29yZGZpbGUiPgotCTxwcm9wZXJ0eSBmaWxlPSIke2Vudi5BUFNfSE9NRX0vY29uZmlnLnByb3BlcnRpZXMiLz4KLQk8ZWNobyBtZXNzYWdlPSJBU19BRE1JTl9QQVNTV09SRD0ke2FkbWluLnBhc3N3b3JkfSR7bGluZS5zZXBhcmF0b3J9IiBmaWxlPSIke2Vudi5BUFNfSE9NRX0vZGV2dGVzdHMvY29ubmVjdG9yL2NvbmZpZy9wYXNzd29yZC50eHQiLz4KKyAgICA8cHJvcGVydHkgZmlsZT0iJHtlbnYuQVBTX0hPTUV9L2NvbmZpZy5wcm9wZXJ0aWVzIi8+CisgICAgPGVjaG8gbWVzc2FnZT0iQVNfQURNSU5fUEFTU1dPUkQ9JHthZG1pbi5wYXNzd29yZH0ke2xpbmUuc2VwYXJhdG9yfSIgZmlsZT0iJHtlbnYuQVBTX0hPTUV9L2RldnRlc3RzL2Nvbm5lY3Rvci9jb25maWcvcGFzc3dvcmQudHh0Ii8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1lZS1wYXNzd29yZGZpbGUiPgotCTxwcm9wZXJ0eSBmaWxlPSIke2Vudi5BUFNfSE9NRX0vY29uZmlnLnByb3BlcnRpZXMiLz4KLQk8ZWNobyBtZXNzYWdlPSJBU19BRE1JTl9QQVNTV09SRD0ke2FkbWluLnBhc3N3b3JkfSR7bGluZS5zZXBhcmF0b3J9IiBmaWxlPSIke2Vudi5BUFNfSE9NRX0vZGV2dGVzdHMvY29ubmVjdG9yL2NvbmZpZy9wYXNzd29yZC50eHQiLz4KLQk8ZWNobyBtZXNzYWdlPSJBU19BRE1JTl9NQVNURVJQQVNTV09SRD0ke21hc3Rlci5wYXNzd29yZH0ke2xpbmUuc2VwYXJhdG9yfSIgZmlsZT0iJHtlbnYuQVBTX0hPTUV9L2RldnRlc3RzL2Nvbm5lY3Rvci9jb25maWcvcGFzc3dvcmQudHh0IiBhcHBlbmQ9InRydWUiLz4KKyAgICA8cHJvcGVydHkgZmlsZT0iJHtlbnYuQVBTX0hPTUV9L2NvbmZpZy5wcm9wZXJ0aWVzIi8+CisgICAgPGVjaG8gbWVzc2FnZT0iQVNfQURNSU5fUEFTU1dPUkQ9JHthZG1pbi5wYXNzd29yZH0ke2xpbmUuc2VwYXJhdG9yfSIgZmlsZT0iJHtlbnYuQVBTX0hPTUV9L2RldnRlc3RzL2Nvbm5lY3Rvci9jb25maWcvcGFzc3dvcmQudHh0Ii8+CisgICAgPGVjaG8gbWVzc2FnZT0iQVNfQURNSU5fTUFTVEVSUEFTU1dPUkQ9JHttYXN0ZXIucGFzc3dvcmR9JHtsaW5lLnNlcGFyYXRvcn0iIGZpbGU9IiR7ZW52LkFQU19IT01FfS9kZXZ0ZXN0cy9jb25uZWN0b3IvY29uZmlnL3Bhc3N3b3JkLnR4dCIgYXBwZW5kPSJ0cnVlIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlcGxhY2UtcGFzc3dvcmQtd2l0aC1wYXNzd29yZGZpbGUiPgotCTxyZXBsYWNlIGRpcj0iJHtlbnYuQVBTX0hPTUV9L2NvbmZpZy8iPgorICAgIDxyZXBsYWNlIGRpcj0iJHtlbnYuQVBTX0hPTUV9L2NvbmZpZy8iPgogICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLnhtbCIvPgotCSAgIDxyZXBsYWNldG9rZW4+LS1wYXNzd29yZCAke2FkbWluLnBhc3N3b3JkfTwvcmVwbGFjZXRva2VuPgotCSAgIDxyZXBsYWNldmFsdWU+LS1wYXNzd29yZGZpbGUgJHtlbnYuQVBTX0hPTUV9L2RldnRlc3RzL2Nvbm5lY3Rvci9jb25maWcvcGFzc3dvcmQudHh0PC9yZXBsYWNldmFsdWU+Ci0JPC9yZXBsYWNlPgorICAgICAgIDxyZXBsYWNldG9rZW4+LS1wYXNzd29yZCAke2FkbWluLnBhc3N3b3JkfTwvcmVwbGFjZXRva2VuPgorICAgICAgIDxyZXBsYWNldmFsdWU+LS1wYXNzd29yZGZpbGUgJHtlbnYuQVBTX0hPTUV9L2RldnRlc3RzL2Nvbm5lY3Rvci9jb25maWcvcGFzc3dvcmQudHh0PC9yZXBsYWNldmFsdWU+CisgICAgPC9yZXBsYWNlPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRvLXJlcGxhY2UtcGFzc3dvcmQtd2l0aC1wYXNzd29yZGZpbGUiPgotCTxyZXBsYWNlIGRpcj0iJHtlbnYuQVBTX0hPTUV9L2NvbmZpZy8iPgorICAgIDxyZXBsYWNlIGRpcj0iJHtlbnYuQVBTX0hPTUV9L2NvbmZpZy8iPgogICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLnhtbCIvPgotCSAgIDxyZXBsYWNldG9rZW4+LS1wYXNzd29yZGZpbGUgJHtlbnYuQVBTX0hPTUV9L2RldnRlc3RzL2Nvbm5lY3Rvci9jb25maWcvcGFzc3dvcmQudHh0PC9yZXBsYWNldG9rZW4+Ci0JICAgPHJlcGxhY2V2YWx1ZT4tLXBhc3N3b3JkICR7YWRtaW4ucGFzc3dvcmR9PC9yZXBsYWNldmFsdWU+Ci0JPC9yZXBsYWNlPgorICAgICAgIDxyZXBsYWNldG9rZW4+LS1wYXNzd29yZGZpbGUgJHtlbnYuQVBTX0hPTUV9L2RldnRlc3RzL2Nvbm5lY3Rvci9jb25maWcvcGFzc3dvcmQudHh0PC9yZXBsYWNldG9rZW4+CisgICAgICAgPHJlcGxhY2V2YWx1ZT4tLXBhc3N3b3JkICR7YWRtaW4ucGFzc3dvcmR9PC9yZXBsYWNldmFsdWU+CisgICAgPC9yZXBsYWNlPgogICAgIDwvdGFyZ2V0PgotCQorCiAgICAgPHRhcmdldCBuYW1lPSJydW4tdGVzdCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29ubmVjdG9yIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImNvbm5lY3Rvci10YXJnZXQiIHZhbHVlPSJydW4tdGVzdCIvPgpAQCAtMTY4LDU3ICsxNjgsNTcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iY29ubmVjdG9yIj4KICAgICAgICAgPHJlY29yZCBuYW1lPSJjb25uZWN0b3Iub3V0cHV0IiBhY3Rpb249InN0YXJ0IiAvPgotCQk8ZWNobyBtZXNzYWdlPSJAQCMjIGNvbm5lY3RvcjEuNSAjI0BAIi8+CisgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkBAIyMgY29ubmVjdG9yMS41ICMjQEAiLz4KICAgICAgICAgICAgIDxhbnQgZGlyPSJjb25uZWN0b3IxLjUiIHRhcmdldD0iJHtjb25uZWN0b3ItdGFyZ2V0fSIvPgotCQk8ZWNobyBtZXNzYWdlPSJAQCMjIGVtYmVkZGVkQ29ubmVjdG9yMS41ICMjQEAiLz4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iQEAjIyBlbWJlZGRlZENvbm5lY3RvcjEuNSAjI0BAIi8+CiAgICAgICAgICAgICA8YW50IGRpcj0iZW1iZWRkZWRDb25uZWN0b3IxLjUiIHRhcmdldD0iJHtjb25uZWN0b3ItdGFyZ2V0fSIvPgotCQk8ZWNobyBtZXNzYWdlPSJAQCMjIGVtYmVkZGVkd2ViICMjQEAiLz4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iQEAjIyBlbWJlZGRlZHdlYiAjI0BAIi8+CiAgICAgICAgICAgICA8YW50IGRpcj0iZW1iZWRkZWR3ZWIiIHRhcmdldD0iJHtjb25uZWN0b3ItdGFyZ2V0fSIvPgogICAgICAgICAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkBAIyMgbXEgIyNAQCIvPgogICAgICAgICAgICAgPGFudCBkaXI9Im1xIiB0YXJnZXQ9IiR7Y29ubmVjdG9yLXRhcmdldH0iLz4KLSAgICAgCSAgICAgICAgPGVjaG8gbWVzc2FnZT0iQEAjIyBub25hY2MgIyNAQCIvPgorICAgICAgICAgICAgICAgICA8ZWNobyBtZXNzYWdlPSJAQCMjIG5vbmFjYyAjI0BAIi8+CiAgICAgICAgICAgICA8YW50IGRpcj0ibm9uYWNjIiB0YXJnZXQ9IiR7Y29ubmVjdG9yLXRhcmdldH0iLz4KLTwhLS0JICAgIENvbW1lbnRlZCBvdXQgdGhlIGRlZmF1bHRDb25uZWN0b3JSZXNvdXJjZSB0ZXN0IGJlY2F1c2Ugd2UgIGNhbm5vdCAKKzwhLS0gICAgICAgIENvbW1lbnRlZCBvdXQgdGhlIGRlZmF1bHRDb25uZWN0b3JSZXNvdXJjZSB0ZXN0IGJlY2F1c2Ugd2UgIGNhbm5vdAogYWRkIGEgbm9uLVhBIFJlc291cmNlIFthIGRhdGFiYXNlIGNvbm5lY3Rpb24gaW4gdGhpcyBjYXNlXSB0byBhIGdsb2JhbCBKVFMgdHJhbnNhY3Rpb24gY29udGFpbmluZwotYSBYQSByZXNvdXJjZSwgW2EgSk1TIHJlc291cmNlIGluIHRoaXMgY2FzZV0uIFRoaXMgdGVzdCB3YXMgcGFzc2luZyBkdWUgdG8gYSAKLUpUUyBidWcsIHRoYXQgYWxsb3dlZCBhIG5vbi1YQSByZXNvdXJjZSBlbmxpc3RtZW50IGFmdGVyIGEgWEEtUmVzb3VyY2UgZW5saXN0bWVudCBpbiAKK2EgWEEgcmVzb3VyY2UsIFthIEpNUyByZXNvdXJjZSBpbiB0aGlzIGNhc2VdLiBUaGlzIHRlc3Qgd2FzIHBhc3NpbmcgZHVlIHRvIGEKK0pUUyBidWcsIHRoYXQgYWxsb3dlZCBhIG5vbi1YQSByZXNvdXJjZSBlbmxpc3RtZW50IGFmdGVyIGEgWEEtUmVzb3VyY2UgZW5saXN0bWVudCBpbgogYSBnbG9iYWwgdHJhbnNhY3Rpb24hCi0JICAgIDxhbnQgZGlyPSJkZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2UiIHRhcmdldD0iJHtjb25uZWN0b3ItdGFyZ2V0fSIvPgorICAgICAgICA8YW50IGRpcj0iZGVmYXVsdENvbm5lY3RvclJlc291cmNlIiB0YXJnZXQ9IiR7Y29ubmVjdG9yLXRhcmdldH0iLz4KIC0tPgogICAgICAgICAgICAgPCEtLSBydW5uaW5nIHdlYjJjb25uZWN0b3IgdHdpY2UgLS0+Ci0JCTxlY2hvIG1lc3NhZ2U9IkBAIyMgd2ViMmNvbm5lY3RvciAjI0BAIi8+Ci0JICAgIDxhbnQgZGlyPSJ3ZWIyY29ubmVjdG9yIiB0YXJnZXQ9IiR7Y29ubmVjdG9yLXRhcmdldH0iIC8+Ci0JCTxlY2hvIG1lc3NhZ2U9IkBAIyMgd2ViMmNvbm5lY3RvciAoc2Vjb25kIHRpbWUpICMjQEAiLz4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iQEAjIyB3ZWIyY29ubmVjdG9yICMjQEAiLz4KKyAgICAgICAgPGFudCBkaXI9IndlYjJjb25uZWN0b3IiIHRhcmdldD0iJHtjb25uZWN0b3ItdGFyZ2V0fSIgLz4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iQEAjIyB3ZWIyY29ubmVjdG9yIChzZWNvbmQgdGltZSkgIyNAQCIvPgogICAgICAgICAgICAgPGFudCBkaXI9IndlYjJjb25uZWN0b3IiIHRhcmdldD0iJHtjb25uZWN0b3ItdGFyZ2V0fSIgLz4KICAgICAgICAgPCEtLSB0aGlzIHRlc3QgaXMgZGlzYWJsZWQgYmVjYXVzZSBvZiBkZXBlbmRlbmN5IG9uIHBvaW50IGJhc2UgZGF0YWJhc2UgamFyIHdoaWNoIGlzIG5vdCBhdmFpbGFibGUgLS0+Ci0JCTwhLS1lY2hvIG1lc3NhZ2U9IkBAIyMgcmVkZXBsb3lSYXIgIyNAQCIvPgorICAgICAgICA8IS0tZWNobyBtZXNzYWdlPSJAQCMjIHJlZGVwbG95UmFyICMjQEAiLz4KICAgICAgICAgICAgIDxhbnQgZGlyPSJyZWRlcGxveVJhciIgdGFyZ2V0PSIke2Nvbm5lY3Rvci10YXJnZXR9IiAvLS0+Ci0JCTxlY2hvIG1lc3NhZ2U9IkBAIyMgbm9uc3RyaW5nbWNmcHJvcGVydGllcyAjI0BAIi8+CisgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkBAIyMgbm9uc3RyaW5nbWNmcHJvcGVydGllcyAjI0BAIi8+CiAgICAgICAgICAgICA8YW50IGRpcj0ibm9uc3RyaW5nbWNmcHJvcGVydGllcyIgdGFyZ2V0PSIke2Nvbm5lY3Rvci10YXJnZXR9IiAvPgotCQk8ZWNobyBtZXNzYWdlPSJAQCMjIG5vbnN0cmluZ3JhcHJvcGVydGllcyAjI0BAIi8+CisgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkBAIyMgbm9uc3RyaW5ncmFwcm9wZXJ0aWVzICMjQEAiLz4KICAgICAgICAgICAgIDxhbnQgZGlyPSJub25zdHJpbmdyYXByb3BlcnRpZXMiIHRhcmdldD0iJHtjb25uZWN0b3ItdGFyZ2V0fSIgLz4KLQkJPGVjaG8gbWVzc2FnZT0iQEAjIyB0eGxldmVsc3dpdGNoICMjQEAiLz4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iQEAjIyB0eGxldmVsc3dpdGNoICMjQEAiLz4KICAgICAgICAgICAgIDxhbnQgZGlyPSJ0eGxldmVsc3dpdGNoIiB0YXJnZXQ9IiR7Y29ubmVjdG9yLXRhcmdldH0iIC8+Ci0JCTxlY2hvIG1lc3NhZ2U9IkBAIyMgdGhyZWFkcG9vbCAjI0BAIi8+CisgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkBAIyMgdGhyZWFkcG9vbCAjI0BAIi8+CiAgICAgICAgICAgICA8YW50IGRpcj0idGhyZWFkcG9vbCIgdGFyZ2V0PSIke2Nvbm5lY3Rvci10YXJnZXR9IiAvPgogICAgICAgICA8cmVjb3JkIG5hbWU9ImNvbm5lY3Rvci5vdXRwdXQiIGFjdGlvbj0ic3RvcCIgLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPiBVc2FnZToKLQkJYW50IGNvbm5lY3RvcjEuNSAoRXhlY3V0ZXMgdGhlIGNvbm5lY3RvcjEuNSB0ZXN0cykKLQkJYW50IGVtYmRlZGRlZFdlYiAoRXhlY3V0ZXMgZW1iZWRkZWRXZWIgdGVzdHMpCi0JCWFudCBtcSAoRXhlY3V0ZXMgdGhlIG1xIHRlc3RzKQotCQlhbnQgbm9uYWNjIChFeGVjdXRlcyB0aGUgbm9uYWNjIHRlc3QpCi0JCWFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgY29ubmVjdG9yIHRlc3RzKQotCQlhbnQgY2xlYW4gKGNsZWFucyBhbGwgdGhlIGNvbm5lY3RvciB0ZXN0cykKLQkJYW50IGJ1aWxkIChidWlsZHMgYWxsIHRoZSBjb25uZWN0b3IgdGVzdHMpCi0JCWFudCBzZXR1cCAoc2V0cyB1cCBhbGwgcmVzb3VyY2VzIGZvciBjb25uZWN0b3IgdGVzdHMpCi0JCWFudCBkZXBsb3kgKGRlcGxveXMgYWxsIHRoZSBjb25uZWN0b3IgYXBwcykKLQkJYW50IHJ1biAoRXhlY3V0ZXMgYWxsIHRoZSBjb25uZWN0b3IgdGVzdHMpCi0JCWFudCB1bmRlcGxveSAodW5kZXBsb3lzIGFsbCB0aGUgIGNvbm5lY3RvciBhcHBzKQotCQlhbnQgdW5zZXR1cCAodW5zZXRzIGFsbCByZXNvdXJjZXMgZm9yIGNvbm5lY3RvciB0ZXN0cykKLQk8L2VjaG8+CisgICAgPGVjaG8+IFVzYWdlOgorICAgICAgICBhbnQgY29ubmVjdG9yMS41IChFeGVjdXRlcyB0aGUgY29ubmVjdG9yMS41IHRlc3RzKQorICAgICAgICBhbnQgZW1iZGVkZGVkV2ViIChFeGVjdXRlcyBlbWJlZGRlZFdlYiB0ZXN0cykKKyAgICAgICAgYW50IG1xIChFeGVjdXRlcyB0aGUgbXEgdGVzdHMpCisgICAgICAgIGFudCBub25hY2MgKEV4ZWN1dGVzIHRoZSBub25hY2MgdGVzdCkKKyAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBjb25uZWN0b3IgdGVzdHMpCisgICAgICAgIGFudCBjbGVhbiAoY2xlYW5zIGFsbCB0aGUgY29ubmVjdG9yIHRlc3RzKQorICAgICAgICBhbnQgYnVpbGQgKGJ1aWxkcyBhbGwgdGhlIGNvbm5lY3RvciB0ZXN0cykKKyAgICAgICAgYW50IHNldHVwIChzZXRzIHVwIGFsbCByZXNvdXJjZXMgZm9yIGNvbm5lY3RvciB0ZXN0cykKKyAgICAgICAgYW50IGRlcGxveSAoZGVwbG95cyBhbGwgdGhlIGNvbm5lY3RvciBhcHBzKQorICAgICAgICBhbnQgcnVuIChFeGVjdXRlcyBhbGwgdGhlIGNvbm5lY3RvciB0ZXN0cykKKyAgICAgICAgYW50IHVuZGVwbG95ICh1bmRlcGxveXMgYWxsIHRoZSAgY29ubmVjdG9yIGFwcHMpCisgICAgICAgIGFudCB1bnNldHVwICh1bnNldHMgYWxsIHJlc291cmNlcyBmb3IgY29ubmVjdG9yIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0ib3JhY2xlIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25maWcvZGF0YWJhc2UueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2NvbmZpZy9kYXRhYmFzZS54bWwKaW5kZXggYzJjODgxZC4uYjM2MzgzMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2NvbmZpZy9kYXRhYmFzZS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2NvbmZpZy9kYXRhYmFzZS54bWwKQEAgLTI4LDE1ICsyOCwxNSBAQAogPCEtLQogPHByb2plY3QgbmFtZT0ib3JhY2xlLWRiLXNldHRpbmdzIiBkZWZhdWx0PSJjcmVhdGUtamRiYy1jb25wb29sLWNvbm5lY3RvciIgYmFzZWRpcj0iLiI+CiAKLSZjb21tb247IAorJmNvbW1vbjsKICZ0ZXN0Y29tbW9uOwogLS0+CiA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1qZGJjLWNvbnBvb2wtY29ubmVjdG9yIiBkZXBlbmRzPSJkZWZhdWx0LWpkYmMtY29ucG9vbCwgb3JhY2xlLWpkYmMtY29ucG9vbCIvPgogCiA8dGFyZ2V0IG5hbWU9ImRlZmF1bHQtamRiYy1jb25wb29sIiBkZXBlbmRzPSJpbml0LWNvbW1vbiIgdW5sZXNzPSJvcmFjbGUiPgotCTxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1jb25ucG9vbC1jb21tb24iLz4KIDwvdGFyZ2V0PgotCSAgIAorCiA8dGFyZ2V0IG5hbWU9Im9yYWNsZS1qZGJjLWNvbnBvb2wiIGRlcGVuZHM9ImluaXQtY29tbW9uIiBpZj0ib3JhY2xlIj4KIDxlY2hvIG1lc3NhZ2U9ImNyZWF0aW5nIGpkYmMgY29ubmVjdGlvbiBwb29sICR7amRiYy5jb25wb29sLm5hbWV9IgogICAgIGxldmVsPSJ2ZXJib3NlIi8+CkBAIC00OSwxMiArNDksMTIgQEAKICAgICAgICAgPGFyZyBsaW5lPSIke2pkYmMuY29ucG9vbC5uYW1lfSIvPgogICAgIDwvZXhlYz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InNldC1vcmFjbGUtcHJvcHMiPgotCTxwYXJhbSBuYW1lPSJwb29sLnR5cGUiIHZhbHVlPSJqZGJjIi8+Ci0JPHBhcmFtIG5hbWU9ImNvbnBvb2wubmFtZSIgdmFsdWU9IiR7amRiYy5jb25wb29sLm5hbWV9Ii8+CisgICAgPHBhcmFtIG5hbWU9InBvb2wudHlwZSIgdmFsdWU9ImpkYmMiLz4KKyAgICA8cGFyYW0gbmFtZT0iY29ucG9vbC5uYW1lIiB2YWx1ZT0iJHtqZGJjLmNvbnBvb2wubmFtZX0iLz4KICAgICA8L2FudGNhbGw+CiA8L3RhcmdldD4KIAotPHRhcmdldCBuYW1lPSJzZXQtb3JhY2xlLXByb3BzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiIgaWY9Im9yYWNsZSI+IAorPHRhcmdldCBuYW1lPSJzZXQtb3JhY2xlLXByb3BzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiIgaWY9Im9yYWNsZSI+CiAgIDxwcm9wZXJ0eSBmaWxlPSIke2Vudi5BUFNfSE9NRX0vZGV2dGVzdHMvY29ubmVjdG9yL2NvbmZpZy9vcmFjbGUucHJvcGVydGllcyIvPgogICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIgLz4KQEAgLTk2LDE1ICs5NiwxNSBAQAogCiA8dGFyZ2V0IG5hbWU9ImV4ZWN1dGUtc3FsLWNvbm5lY3RvciIgZGVwZW5kcz0iaW5pdC1jb21tb24sIGRlZmF1bHQtc3FsLCBzcWwtb3JhY2xlIi8+CiAKLTx0YXJnZXQgbmFtZT0iZGVmYXVsdC1zcWwiIGRlcGVuZHM9ImluaXQtY29tbW9uIiB1bmxlc3M9Im9yYWNsZSIgPiAKLQk8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiIvPgorPHRhcmdldCBuYW1lPSJkZWZhdWx0LXNxbCIgZGVwZW5kcz0iaW5pdC1jb21tb24iIHVubGVzcz0ib3JhY2xlIiA+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iLz4KIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9InNxbC1vcmFjbGUiIGRlcGVuZHM9ImluaXQtY29tbW9uIiBpZj0ib3JhY2xlIj4KLQk8cHJvcGVydHkgZmlsZT0iJHtlbnYuQVBTX0hPTUV9L2RldnRlc3RzL2Nvbm5lY3Rvci9jb25maWcvb3JhY2xlLnByb3BlcnRpZXMiLz4KLQk8cHJvcGVydHkgbmFtZT0iZG9tYWluLmxpYi5leHQiIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9saWIvZXh0Ii8+Ci0JPHByb3BlcnR5IG5hbWU9Im9yYWNsZS5kcml2ZXIucGF0aCIgdmFsdWU9IiR7ZG9tYWluLmxpYi5leHR9L3Ntb3JhY2xlLmphcjoke2RvbWFpbi5saWIuZXh0fS9zbWJhc2UuamFyOiR7ZG9tYWluLmxpYi5leHR9L3NtcmVzb3VyY2UuamFyOiR7ZG9tYWluLmxpYi5leHR9L3NtdXRpbC5qYXI6JHtkb21haW4ubGliLmV4dH0vc21zcHkuamFyOiR7ZG9tYWluLmxpYi5leHR9L09yYW54by5qYXIiLz4KLQk8ZWNobyBtZXNzYWdlPSIke29yYWNsZUZvckNvbm5lY3Rvci5kcml2ZXJ9Ii8+CisgICAgPHByb3BlcnR5IGZpbGU9IiR7ZW52LkFQU19IT01FfS9kZXZ0ZXN0cy9jb25uZWN0b3IvY29uZmlnL29yYWNsZS5wcm9wZXJ0aWVzIi8+CisgICAgPHByb3BlcnR5IG5hbWU9ImRvbWFpbi5saWIuZXh0IiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvbGliL2V4dCIvPgorICAgIDxwcm9wZXJ0eSBuYW1lPSJvcmFjbGUuZHJpdmVyLnBhdGgiIHZhbHVlPSIke2RvbWFpbi5saWIuZXh0fS9zbW9yYWNsZS5qYXI6JHtkb21haW4ubGliLmV4dH0vc21iYXNlLmphcjoke2RvbWFpbi5saWIuZXh0fS9zbXJlc291cmNlLmphcjoke2RvbWFpbi5saWIuZXh0fS9zbXV0aWwuamFyOiR7ZG9tYWluLmxpYi5leHR9L3Ntc3B5Lmphcjoke2RvbWFpbi5saWIuZXh0fS9PcmFueG8uamFyIi8+CisgICAgPGVjaG8gbWVzc2FnZT0iJHtvcmFjbGVGb3JDb25uZWN0b3IuZHJpdmVyfSIvPgogPGVjaG8gbWVzc2FnZT0iRXhlY3V0aW5nIHNxbCBzdGF0ZW1lbnQgYXQgJHtiYXNlZGlyfSBmcm9tICR7c3FsLmZpbGV9IgogICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAgIDxzcWwKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sLW1vZHVsZS1zY29wZS9hcHAvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL2FwcC9idWlsZC54bWwKaW5kZXggNDI2ZWNkZC4uMzU0OGI5MyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL2FwcC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL2FwcC9idWlsZC54bWwKQEAgLTM2LDE4ICszNiwxOCBAQAogICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iaW5pdC1jb21tb24sIGNsZWFuLWNvbW1vbiI+CiAgICA8YW50IGRpcj0ic3JjIiBpbmhlcml0QWxsPSJmYWxzZSIgdGFyZ2V0PSJhbGwiLz4KICAgIDxhbnRjYWxsIHRhcmdldD0iZWFyLWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJzaW1wbGVtZGIiLz4KLQk8cGFyYW0gbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIi8+Ci0JPHBhcmFtIG5hbWU9ImdsYXNzZmlzaC1yZXNvdXJjZXMtZWFyLnhtbCIgdmFsdWU9Ik1FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sIi8+CisgICAgPHBhcmFtIG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJzaW1wbGVtZGIiLz4KKyAgICA8cGFyYW0gbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIi8+CisgICAgPHBhcmFtIG5hbWU9ImdsYXNzZmlzaC1yZXNvdXJjZXMtZWFyLnhtbCIgdmFsdWU9Ik1FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sIi8+CiAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0ic2V0dXBKZGJjIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiA8IS0tCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLWNvbnBvb2wtY29ubmVjdG9yIj4KLQkgPHBhcmFtIG5hbWU9ImRiLmNsYXNzIiB2YWx1ZT0iY29tLnN1bi5zcWwuamRiY3gub3JhY2xlLk9yYWNsZURhdGFTb3VyY2UiLz4KKyAgICAgPHBhcmFtIG5hbWU9ImRiLmNsYXNzIiB2YWx1ZT0iY29tLnN1bi5zcWwuamRiY3gub3JhY2xlLk9yYWNsZURhdGFTb3VyY2UiLz4KICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtcG9pbnRiYXNlLXBvb2wxIi8+Ci0JIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLnR5cGUiIHZhbHVlPSJqYXZheC5zcWwuWEFEYXRhU291cmNlIi8+CisgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLnR5cGUiIHZhbHVlPSJqYXZheC5zcWwuWEFEYXRhU291cmNlIi8+CiAgICAgICA8L2FudGNhbGw+CiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KQEAgLTU3LDcgKzU3LDcgQEAKIC0tPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb25uZWN0b3IiPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJjcmVhdGVkYi5zcWwiLz4KLSAgICAgIDwvYW50Y2FsbD4JCisgICAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0idW5zZXRKZGJjIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvYXBwL3NyYy9NRVRBLUlORi9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sLW1vZHVsZS1zY29wZS9hcHAvc3JjL01FVEEtSU5GL2VqYi1qYXIueG1sCmluZGV4IDRiZGNjNmYuLjMyM2MwZWMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sLW1vZHVsZS1zY29wZS9hcHAvc3JjL01FVEEtSU5GL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sLW1vZHVsZS1zY29wZS9hcHAvc3JjL01FVEEtSU5GL2VqYi1qYXIueG1sCkBAIC05MSw4ICs5MSw4IEBACiAgICAgICAgIDxyZXMtc2hhcmluZy1zY29wZT5TaGFyZWFibGU8L3Jlcy1zaGFyaW5nLXNjb3BlPgogICAgICAgPC9yZXNvdXJjZS1yZWY+CiAgICAgICA8cmVzb3VyY2UtZW52LXJlZj4KLQk8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmVpcy90ZXN0QWRtaW48L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KLQk8cmVzb3VyY2UtZW52LXJlZi10eXBlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC9yZXNvdXJjZS1lbnYtcmVmLXR5cGU+CisgICAgPHJlc291cmNlLWVudi1yZWYtbmFtZT5laXMvdGVzdEFkbWluPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+CisgICAgPHJlc291cmNlLWVudi1yZWYtdHlwZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvcmVzb3VyY2UtZW52LXJlZi10eXBlPgogICAgICAgPC9yZXNvdXJjZS1lbnYtcmVmPgogICAgICAgPHNlY3VyaXR5LWlkZW50aXR5PgogICAgICAgICA8dXNlLWNhbGxlci1pZGVudGl0eS8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvYXBwL3NyYy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvYXBwL3NyYy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwKaW5kZXggMmQ4MmFkMy4uMTAwMzU2NiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sLW1vZHVsZS1zY29wZS9hcHAvc3JjL01FVEEtSU5GL3N1bi1lamItamFyLnhtbApAQCAtMzMsNyArMzMsNyBAQAogICAgICAgICAgICAgVGVzdEludGVnZXJQcm9wCiAgICAgICAgICAgPC9hY3RpdmF0aW9uLWNvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgIDxhY3RpdmF0aW9uLWNvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLSAgICAgICAgICAgIDIgCisgICAgICAgICAgICAyCiAgICAgICAgICAgPC9hY3RpdmF0aW9uLWNvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgPC9hY3RpdmF0aW9uLWNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgPC9hY3RpdmF0aW9uLWNvbmZpZz4KQEAgLTg1LDcgKzg1LDcgQEAKICAgICAgIDwvcmVzb3VyY2UtcmVmPgogICAgICAgPHJlc291cmNlLWVudi1yZWY+CiAgICAgICAgIDxyZXNvdXJjZS1lbnYtcmVmLW5hbWU+ZWlzL3Rlc3RBZG1pbjwvcmVzb3VyY2UtZW52LXJlZi1uYW1lPgotCTxqbmRpLW5hbWU+amF2YTptb2R1bGUvZWlzL3Rlc3RBZG1pbjwvam5kaS1uYW1lPgorICAgIDxqbmRpLW5hbWU+amF2YTptb2R1bGUvZWlzL3Rlc3RBZG1pbjwvam5kaS1uYW1lPgogICAgICAgPC9yZXNvdXJjZS1lbnYtcmVmPgogICAgICAgPGdlbi1jbGFzc2VzLz4KICAgICA8L2VqYj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sLW1vZHVsZS1zY29wZS9hcHAvc3JjL2JlYW5zL01lc3NhZ2VDaGVja2VyRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvYXBwL3NyYy9iZWFucy9NZXNzYWdlQ2hlY2tlckVKQi5qYXZhCmluZGV4IGJjMGM5ZWUuLjZlMWNmNDggMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sLW1vZHVsZS1zY29wZS9hcHAvc3JjL2JlYW5zL01lc3NhZ2VDaGVja2VyRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL2FwcC9zcmMvYmVhbnMvTWVzc2FnZUNoZWNrZXJFSkIuamF2YQpAQCAtNDMsNyArNDMsNyBAQAogCiAgICAgcHVibGljIE1lc3NhZ2VDaGVja2VyRUpCKCkge30KIAotICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIAorICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpCiAgICAgICAgIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImJlYW4gY3JlYXRlZCIpOwogICAgICAgICBoZWxkQ29uID0gbnVsbDsKQEAgLTcxLDExICs3MSwxMSBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgc3luY2hyb25pemVkIChDb250cm9scy5nZXRMb2NrT2JqZWN0KCkpIHsKICAgICAgICAgICAgICAgICAvL1RlbGwgdGhlIHJlc291cmNlIGFkYXB0ZXIgdGhlIGNsaWVudCBpcyByZWFkeSB0byBydW4KLSAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkubm90aWZ5QWxsKCk7IAotICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIENvbnRyb2xzLmdldExvY2tPYmplY3QoKS5ub3RpZnlBbGwoKTsKKwogICAgICAgICAgICAgICAgIGRlYnVnKCJOT1RJRklFRC4uLiBTVEFSVCBXQUlUSU5HIik7CiAgICAgICAgICAgICAgICAgLy9XYWl0IHVudGlsIGJlaW5nIHRvbGQgdG8gcmVhZCBmcm9tIHRoZSBkYXRhYmFzZQotICAgICAgICAgICAgICAgIENvbnRyb2xzLmdldExvY2tPYmplY3QoKS53YWl0KCk7IAorICAgICAgICAgICAgICAgIENvbnRyb2xzLmdldExvY2tPYmplY3QoKS53YWl0KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CkBAIC04MywyMiArODMsMjIgQEAKICAgICB9CiAKICAgICBwdWJsaWMgaW50IGdldE1lc3NhZ2VDb3VudCgpIHsKLQl0cnkgeworICAgIHRyeSB7CiAgICAgICAgICAgICBDb25uZWN0aW9uIGNvbiA9IGdldEZyZXNoQ29ubmVjdGlvbigpOwogICAgICAgICAgICAgaW50IGNvdW50MSA9IGdldENvdW50KGNvbik7CiAgICAgICAgICAgICBjb24uY2xvc2UoKTsKLSAgICAgICAgICAgIAotCSAgICAvKgorCisgICAgICAgIC8qCiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQoQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpKSB7CiAgICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLm5vdGlmeSgpOwogICAgICAgICAgICAgfQotCSAgICAqLwotICAgICAgICAgICAgICAgIAorICAgICAgICAqLworCiAgICAgICAgICAgICByZXR1cm4gY291bnQxOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLm91dCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwotCX0KKyAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSBpbnQgZ2V0Q291bnQoQ29ubmVjdGlvbiBjb24pIHRocm93cyBTUUxFeGNlcHRpb24gewpAQCAtMTI0LDE4ICsxMjQsMTggQEAKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIHVzZXIgPSAoU3RyaW5nKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvdXNlciIpOwogICAgICAgICAgICAgcGFzc3dvcmQgPSAoU3RyaW5nKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvcGFzc3dvcmQiKTsKLQkgICAgQ29udHJvbHMgPSAoTXlBZG1pbk9iamVjdCkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2Vpcy90ZXN0QWRtaW4iKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDQUxMSU5HIElOSVRJTElaRSBdXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXSIpOwotCSAgICBDb250cm9scy5pbml0aWFsaXplKCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ0FMTEVEIElOSVRJTElaRSBdXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXSIpOworICAgICAgICBDb250cm9scyA9IChNeUFkbWluT2JqZWN0KSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWlzL3Rlc3RBZG1pbiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNBTExJTkcgSU5JVElMSVpFIF1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dIik7CisgICAgICAgIENvbnRyb2xzLmluaXRpYWxpemUoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDQUxMRUQgSU5JVElMSVpFIF1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dIik7CiAKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KIAogICAgICAgICAvKnRyeXsKLSAgICAgICAgICAKKwogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgT2JqZWN0IGRzID0gaWMubG9va3VwKCJqYXZhOm1vZHVsZS9qZGJjL21vZHVsZS1sZXZlbC1yZXNvdXJjZSIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJqYXZhOm1vZHVsZS9qZGJjL21vZHVsZS1sZXZlbC1yZXNvdXJjZSA6ICIgKyBkcyk7CkBAIC0xNzMsNyArMTczLDcgQEAKICAgICAgICAgICAgIGRlYnVnKCJMb29rZWQgdXAgRGF0YXNvdXJjZVxuIik7CiAgICAgICAgICAgICBkZWJ1ZygiR2V0IEpEQkMgY29ubmVjdGlvbiwgYXV0byBzaWduIG9uIik7CiAgICAgICAgICAgICBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKGNvbiAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbjsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0xODQsNyArMTg0LDcgQEAKICAgICAgICAgICAgIHRocm93IGV4MTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBjbG9zZUNvbm5lY3Rpb24oQ29ubmVjdGlvbiBjb24pIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgICBpZiAoaGVsZENvbiAhPSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvYXBwL3NyYy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL2FwcC9zcmMvYnVpbGQucHJvcGVydGllcwppbmRleCBkYWQyMDdiLi4wYjM4YzE5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvYXBwL3NyYy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sLW1vZHVsZS1zY29wZS9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogZWpiLWphci54bWw9TUVUQS1JTkYvZWpiLWphci54bWwKIHN1bi1lamItamFyLnhtbD1NRVRBLUlORi9zdW4tZWpiLWphci54bWwKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sLW1vZHVsZS1zY29wZS9hcHAvc3JjL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sLW1vZHVsZS1zY29wZS9hcHAvc3JjL2NsaWVudC9DbGllbnQuamF2YQppbmRleCAwNWM0MjY1Li5lYzc3Y2U1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvYXBwL3NyYy9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL2FwcC9zcmMvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yOCw0NSArMjgsNDUgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLSAgICAKKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgLy9zdXBlcihhcmdzKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBkb1Rlc3QoKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlRoaXMgaXMgdG8gdGVzdCBjb25uZWN0b3IgMS41ICIrCi0JICAgICAgICAgICAgICJjb250cmFjdHMuIik7Ci0gICAgICAgIAorICAgICAgICAgICAgICAgICAiY29udHJhY3RzLiIpOworCiAgICAgICAgIFN0cmluZyByZXMgPSAiTk9UIFJVTiI7Ci0JZGVidWcoImRvVGVzdCgpIEVOVEVSLi4uIik7CisgICAgZGVidWcoImRvVGVzdCgpIEVOVEVSLi4uIik7CiAgICAgICAgIGJvb2xlYW4gcGFzcyA9IGZhbHNlOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmVzICA9ICJBTEwgVEVTVFMgUEFTU0VEIjsKLQkgICAgaW50IHRlc3RDb3VudCA9IDE7CisgICAgICAgIGludCB0ZXN0Q291bnQgPSAxOwogICAgICAgICAgICAgd2hpbGUgKCFkb25lKCkpIHsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIG5vdGlmeUFuZFdhaXQoKTsKICAgICAgICAgICAgICAgICBpZiAoIWRvbmUoKSkgewogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiUnVubmluZy4uLiIpOwogICAgICAgICAgICAgICAgICAgICBwYXNzID0gY2hlY2tSZXN1bHRzKGV4cGVjdGVkUmVzdWx0cygpKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIkdvdCBleHBlY3RlZCByZXN1bHRzID0gIiArIHBhc3MpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvL2RvIG5vdCBjb250aW51ZSBpZiBvbmUgdGVzdCBmYWlsZWQKICAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXNzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXMgPSAiU09NRSBURVNUUyBGQUlMRUQiOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIiBDb25uZWN0b3IgMS41IHRlc3QgLSAiICsgdGVzdENvdW50LCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIiBDb25uZWN0b3IgMS41IHRlc3QgLSAiICsgdGVzdENvdW50LCBzdGF0LlBBU1MpOwotCQkgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLQkJdGVzdENvdW50ICsrOworICAgICAgICB0ZXN0Q291bnQgKys7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CkBAIC03NiwxNCArNzYsMTQgQEAKICAgICAgICAgfQogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgic2ltcGxlbWRiIik7CiAKLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIkVYSVRJTkcuLi4gU1RBVFVTID0gIiArIHJlcyk7CiAgICAgICAgIHJldHVybiByZXM7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBib29sZWFuIGNoZWNrUmVzdWx0cyhpbnQgbnVtKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgT2JqZWN0IG8gPSAobmV3IEluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiTXlNZXNzYWdlQ2hlY2tlciIpOwotICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKSAKKyAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkKICAgICAgICAgICAgIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvLCBNZXNzYWdlQ2hlY2tlckhvbWUuY2xhc3MpOwogICAgICAgICBNZXNzYWdlQ2hlY2tlciBjaGVja2VyID0gaG9tZS5jcmVhdGUoKTsKICAgICAgICAgaW50IHJlc3VsdCA9IGNoZWNrZXIuZ2V0TWVzc2FnZUNvdW50KCk7CkBAIC05Miw3ICs5Miw3IEBACiAKICAgICBwcml2YXRlIGJvb2xlYW4gZG9uZSgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBPYmplY3QgbyA9IChuZXcgSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJNeU1lc3NhZ2VDaGVja2VyIik7Ci0gICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpIAorICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKQogICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG8sIE1lc3NhZ2VDaGVja2VySG9tZS5jbGFzcyk7CiAgICAgICAgIE1lc3NhZ2VDaGVja2VyIGNoZWNrZXIgPSBob21lLmNyZWF0ZSgpOwogICAgICAgICByZXR1cm4gY2hlY2tlci5kb25lKCk7CkBAIC0xMDAsNyArMTAwLDcgQEAKIAogICAgIHByaXZhdGUgaW50IGV4cGVjdGVkUmVzdWx0cygpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBPYmplY3QgbyA9IChuZXcgSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJNeU1lc3NhZ2VDaGVja2VyIik7Ci0gICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpIAorICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKQogICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG8sIE1lc3NhZ2VDaGVja2VySG9tZS5jbGFzcyk7CiAgICAgICAgIE1lc3NhZ2VDaGVja2VyIGNoZWNrZXIgPSBob21lLmNyZWF0ZSgpOwogICAgICAgICByZXR1cm4gY2hlY2tlci5leHBlY3RlZFJlc3VsdHMoKTsKQEAgLTEwOCw3ICsxMDgsNyBAQAogCiAgICAgcHJpdmF0ZSB2b2lkIG5vdGlmeUFuZFdhaXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgT2JqZWN0IG8gPSAobmV3IEluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiTXlNZXNzYWdlQ2hlY2tlciIpOwotICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKSAKKyAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkKICAgICAgICAgICAgIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvLCBNZXNzYWdlQ2hlY2tlckhvbWUuY2xhc3MpOwogICAgICAgICBNZXNzYWdlQ2hlY2tlciBjaGVja2VyID0gaG9tZS5jcmVhdGUoKTsKICAgICAgICAgY2hlY2tlci5ub3RpZnlBbmRXYWl0KCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL2FwcC9zcmMvbWRiL015TWVzc2FnZUJlYW4uamF2YQppbmRleCA1NGU3N2VhLi42YjEyOTA0IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sLW1vZHVsZS1zY29wZS9hcHAvc3JjL21kYi9NeU1lc3NhZ2VCZWFuLmphdmEKQEAgLTMwLDQxICszMCw0MSBAQAogCiAvKioKICAqLwotcHVibGljIGNsYXNzIE15TWVzc2FnZUJlYW4gaW1wbGVtZW50cyBNZXNzYWdlRHJpdmVuQmVhbiwgCitwdWJsaWMgY2xhc3MgTXlNZXNzYWdlQmVhbiBpbXBsZW1lbnRzIE1lc3NhZ2VEcml2ZW5CZWFuLAogICAgICAgICBNeU1lc3NhZ2VMaXN0ZW5lciB7CiAKICAgICBwcml2YXRlIHRyYW5zaWVudCBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGMgPSBudWxsOwogICAgIHByaXZhdGUgQ29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0b3IsIHdoaWNoIGlzIHB1YmxpYyBhbmQgdGFrZXMgbm8gYXJndW1lbnRzLgogICAgICAqLwogICAgIHB1YmxpYyBNeU1lc3NhZ2VCZWFuKCkge30KIAogICAgIC8qKgotICAgICAqIHNldE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgCi0gICAgICogbm90IGZpbmFsIG9yIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgCisgICAgICogc2V0TWVzc2FnZURyaXZlbkNvbnRleHQgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dAorICAgICAqIG5vdCBmaW5hbCBvciBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kCiAgICAgICogd2l0aCBvbmUgYXJndW1lbnQgb2YgdHlwZSBqYWthcnRhLmVqYi5NZXNzYWdlRHJpdmVuQ29udGV4dC4KICAgICAgKgogICAgICAqIEBwYXJhbSBtZGMgICAgdGhlIGNvbnRleHQgdG8gc2V0CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TWVzc2FnZURyaXZlbkNvbnRleHQoTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjKSB7Ci0JdGhpcy5tZGMgPSBtZGM7CisgICAgdGhpcy5tZGMgPSBtZGM7CiAgICAgfQogCiAgICAgLyoqCi0gICAgICogZWpiQ3JlYXRlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yIAotICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBubyAKKyAgICAgKiBlamJDcmVhdGUgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IKKyAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggbm8KICAgICAgKiBhcmd1bWVudHMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgeyB9CiAKICAgICAvKioKLSAgICAgKiBvbk1lc3NhZ2UgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IgCisgICAgICogb25NZXNzYWdlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yCiAgICAgICogc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCB3aXRoIG9uZSBhcmd1bWVudAogICAgICAqIG9mIHR5cGUgamFrYXJ0YS5qbXMuTWVzc2FnZS4KICAgICAgKgotICAgICAqIENhc3RzIHRoZSBpbmNvbWluZyBNZXNzYWdlIHRvIGEgVGV4dE1lc3NhZ2UgYW5kIGRpc3BsYXlzIAorICAgICAqIENhc3RzIHRoZSBpbmNvbWluZyBNZXNzYWdlIHRvIGEgVGV4dE1lc3NhZ2UgYW5kIGRpc3BsYXlzCiAgICAgICogdGhlIHRleHQuCiAgICAgICoKICAgICAgKiBAcGFyYW0gaW5NZXNzYWdlICAgIHRoZSBpbmNvbWluZyBtZXNzYWdlCkBAIC03NSw3ICs3NSw3IEBACiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGlmIChpbk1lc3NhZ2UuZW5kc1dpdGgoIldSSVRFIikpIHsKLSAgICAgICAgICAgICAgICBkb0RiU3R1ZmYoIldSSVRFIiwgCisgICAgICAgICAgICAgICAgZG9EYlN0dWZmKCJXUklURSIsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbk1lc3NhZ2Uuc3Vic3RyaW5nKDAsIGluTWVzc2FnZS5sYXN0SW5kZXhPZigiOiIpKSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGluTWVzc2FnZS5lbmRzV2l0aCgiREVMRVRFIikpIHsKICAgICAgICAgICAgICAgICBkb0RiU3R1ZmYoIkRFTEVURSIsCkBAIC05MSwxMCArOTEsMTAgQEAKICAgICAgICAgfQogCiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogZWpiUmVtb3ZlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yIAotICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBubyAKKyAgICAgKiBlamJSZW1vdmUgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IKKyAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggbm8KICAgICAgKiBhcmd1bWVudHMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkge30KQEAgLTEwNCw2MyArMTA0LDYzIEBACiAKICAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24gPSBudWxsOwogICAgICAgICBTdHJpbmcgaWQgICAgPSBtZXNzYWdlLnN1YnN0cmluZygwLCBtZXNzYWdlLmluZGV4T2YoIjoiKSk7Ci0gICAgICAgIFN0cmluZyBib2R5ICA9IG1lc3NhZ2Uuc3Vic3RyaW5nKG1lc3NhZ2UuaW5kZXhPZigiOiIpKzEpOyAKKyAgICAgICAgU3RyaW5nIGJvZHkgID0gbWVzc2FnZS5zdWJzdHJpbmcobWVzc2FnZS5pbmRleE9mKCI6IikrMSk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKCJSRUFEIi5lcXVhbHMob3ApKSB7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZWJ1ZygiUmVhZGluZyByb3cgZnJvbSBkYXRhYmFzZS4uLiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L015REIiKTsKICAgICAgICAgICAgICAgICAgIGRlYnVnKCJMb29rZWQgdXAgRGF0YXNvdXJjZVxuIik7CiAgICAgICAgICAgICAgICAgICBkZWJ1ZygiR2V0IEpEQkMgY29ubmVjdGlvbiwgYXV0byBzaWduIG9uIik7CiAgICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgU3RhdGVtZW50IHN0bXQgPSBkYkNvbm5lY3Rpb24uY3JlYXRlU3RhdGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICBTdHJpbmcgcXVlcnkgPSAKKyAgICAgICAgICAgICAgICAgIFN0cmluZyBxdWVyeSA9CiAgICAgICAgICAgICAgICAgICAiU0VMRUNUIGlkIGZyb20gbWVzc2FnZXMgd2hlcmUgaWQgPSAnUVEnIjsKICAgICAgICAgICAgICAgICAgIFJlc3VsdFNldCByZXN1bHRzID0gc3RtdC5leGVjdXRlUXVlcnkocXVlcnkpOwogICAgICAgICAgICAgICAgICAgcmVzdWx0cy5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlFRIGhhcyBiYWxhbmNlICIgKyAKKyAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUVEgaGFzIGJhbGFuY2UgIiArCiAgICAgICAgICAgICAgICAgICByZXN1bHRzLmdldEludCgiYmFsYW5jZSIpICsgIiBkb2xsYXJzIik7CiAgICAgICAgICAgICAgICAgICByZXN1bHRzLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgICBzdG10LmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZWFkIG9uZSBhY2NvdW50XG4iKTsKICAgICAgICAgICAgICAgICAqLwogCiAgICAgICAgICAgICB9IGVsc2UgaWYgKCJXUklURSIuZXF1YWxzKG9wKSkgewogCiAgICAgICAgICAgICAgICAgZGVidWcoIkluc2VydGluZyBvbmUgbWVzc2FnZSBpbiB0aGUgZGF0YWJhc2VcbiIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBDcmVhdGluZyBhIGRhdGFiYXNlIGNvbm5lY3Rpb24KICAgICAgICAgICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamF2YTphcHAvamRiYy9YQVBvaW50YmFzZSIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKICAgICAgICAgICAgICAgICAvL2RlYnVnKCJHZXQgSkRCQyBjb25uZWN0aW9uLCBhdXRvIHNpZ24gb24iKTsKICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBjcmVhdGVSb3coaWQsIGJvZHksIGRiQ29ubmVjdGlvbik7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGVkIG9uZSBtZXNzYWdlXG4iKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgfSBlbHNlIGlmICgiREVMRVRFIi5lcXVhbHMob3ApKSB7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZWJ1ZygiRGVsZXRpbmcgb25lIG1lc3NhZ2UgZnJvbSB0aGUgZGF0YWJhc2VcbiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6YXBwL2pkYmMvWEFQb2ludGJhc2UiKTsKICAgICAgICAgICAgICAgICAvL2RlYnVnKCJMb29rZWQgdXAgRGF0YXNvdXJjZVxuIik7CiAgICAgICAgICAgICAgICAgLy9kZWJ1ZygiR2V0IEpEQkMgY29ubmVjdGlvbiwgYXV0byBzaWduIG9uIik7CiAgICAgICAgICAgICAgICAgZGJDb25uZWN0aW9uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgZGVsZXRlUm93KGlkLCBkYkNvbm5lY3Rpb24pOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGVsZXRlZCBvbmUgbWVzc2FnZVxuIik7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKCJERUxFVEVfQUxMIi5lcXVhbHMob3ApKSB7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZWJ1ZygiRGVsZXRpbmcgYWxsIG1lc3NhZ2VzIGZyb20gdGhlIGRhdGFiYXNlXG4iKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIC8vIENyZWF0aW5nIGEgZGF0YWJhc2UgY29ubmVjdGlvbgogICAgICAgICAgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSkgaWMubG9va3VwKCJqYXZhOmFwcC9qZGJjL1hBUG9pbnRiYXNlIik7CiAgICAgICAgICAgICAgICAgLy9kZWJ1ZygiTG9va2VkIHVwIERhdGFzb3VyY2VcbiIpOwpAQCAtMTcxLDcgKzE3MSw3IEBACiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vdW5zdXBwb3J0ZWQgb3AKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgIH1maW5hbGx5ewogICAgICAgICAgICAgdHJ5ewogICAgICAgICAgICAgICAgIGRiQ29ubmVjdGlvbi5jbG9zZSgpOwpAQCAtMTgwLDkgKzE4MCw5IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSB2b2lkIGNyZWF0ZVJvdyhTdHJpbmcgaWQsIFN0cmluZyBib2R5LCAKLSAgICAgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKSAKKworICAgIHByaXZhdGUgdm9pZCBjcmVhdGVSb3coU3RyaW5nIGlkLCBTdHJpbmcgYm9keSwKKyAgICAgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKIAogICAgICAgICAvLyBDcmVhdGUgcm93IGZvciB0aGlzIG1lc3NhZ2UKQEAgLTE5OCw5ICsxOTgsOSBAQAogICAgICAgICBzdG10LmNsb3NlKCk7CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIGRlbGV0ZVJvdyhTdHJpbmcgaWQsIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKSAKKyAgICBwcml2YXRlIHZvaWQgZGVsZXRlUm93KFN0cmluZyBpZCwgamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICAvLyBEZWxldGUgcm93IGZvciB0aGlzIG1lc3NhZ2UKICAgICAgICAgZGVidWcoIkRlbGV0ZVJvdyB3aXRoIElEID0gIiArIGlkKTsKICAgICAgICAgU3RhdGVtZW50IHN0bXQgPSBkYkNvbm5lY3Rpb24uY3JlYXRlU3RhdGVtZW50KCk7CkBAIC0yMTMsOSArMjEzLDkgQEAKICAgICAgICAgc3RtdC5jbG9zZSgpOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBkZWxldGVBbGwoamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pIAorICAgIHByaXZhdGUgdm9pZCBkZWxldGVBbGwoamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICAvLyBEZWxldGUgcm93IGZvciB0aGlzIG1lc3NhZ2UKICAgICAgICAgU3RhdGVtZW50IHN0bXQgPSBkYkNvbm5lY3Rpb24uY3JlYXRlU3RhdGVtZW50KCk7CiAgICAgICAgIFN0cmluZyBxdWVyeSA9ICJERUxFVEUgRlJPTSBtZXNzYWdlcyI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL2J1aWxkLnhtbAppbmRleCA4YjAzODBlLi5hMDY4ZTFjIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sLW1vZHVsZS1zY29wZS9idWlsZC54bWwKQEAgLTYyLDcgKzYyLDcgQEAKIAogICA8dGFyZ2V0IG5hbWU9InJ1bnRlc3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0ic2ltcGxlbWRiIiAvPgorICAgIDxwYXJhbSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0ic2ltcGxlbWRiIiAvPgogICAgIDwvYW50Y2FsbD4KICAgPC90YXJnZXQ+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sLW1vZHVsZS1zY29wZS9yYS9NRVRBLUlORi9yYS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvcmEvTUVUQS1JTkYvcmEueG1sCmluZGV4IDJjYTJlYmMuLjIxZGViOTMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sLW1vZHVsZS1zY29wZS9yYS9NRVRBLUlORi9yYS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL3JhL01FVEEtSU5GL3JhLnhtbApAQCAtNDUsNyArNDUsNyBAQAogICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgogICAgICAgICA8aW5ib3VuZC1yZXNvdXJjZWFkYXB0ZXI+Ci0gICAgICAgICAgICA8bWVzc2FnZWFkYXB0ZXI+ICAgICAgICAgIAorICAgICAgICAgICAgPG1lc3NhZ2VhZGFwdGVyPgogICAgICAgICAgICAgICAgIDxtZXNzYWdlbGlzdGVuZXI+CiAgICAgICAgICAgICAgICAgICAgIDxtZXNzYWdlbGlzdGVuZXItdHlwZT4KICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rvci5NeU1lc3NhZ2VMaXN0ZW5lcgpAQCAtNTYsNyArNTYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgPC9hY3RpdmF0aW9uc3BlYy1jbGFzcz4KICAgICAgICAgICAgICAgICAgICAgPC9hY3RpdmF0aW9uc3BlYz4KICAgICAgICAgICAgICAgICA8L21lc3NhZ2VsaXN0ZW5lcj4KLSAgICAgICAgICAgIDwvbWVzc2FnZWFkYXB0ZXI+ICAgICAgICAgIAorICAgICAgICAgICAgPC9tZXNzYWdlYWRhcHRlcj4KICAgICAgICAgPC9pbmJvdW5kLXJlc291cmNlYWRhcHRlcj4KICAgICAgICAgPGFkbWlub2JqZWN0PgogICAgICAgICAgIDxhZG1pbm9iamVjdC1pbnRlcmZhY2U+Y29ubmVjdG9yLk15QWRtaW5PYmplY3Q8L2FkbWlub2JqZWN0LWludGVyZmFjZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sLW1vZHVsZS1zY29wZS9yYS9zcmMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL3JhL3NyYy9idWlsZC54bWwKaW5kZXggMmI3NzQ4OS4uNzgzOTkxZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL3JhL3NyYy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL3JhL3NyYy9idWlsZC54bWwKQEAgLTMwLDggKzMwLDggQEAKIAogICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iaW5pdC1jb21tb24iID4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0iYnVpbGQuY2xhc3Nlcy5kaXIiIHZhbHVlPSJjbGFzc2VzIiAvPgotCTxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjb25uZWN0b3IiIC8+CisgICAgPHBhcmFtIG5hbWU9ImJ1aWxkLmNsYXNzZXMuZGlyIiB2YWx1ZT0iY2xhc3NlcyIgLz4KKyAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY29ubmVjdG9yIiAvPgogICAgIDwvYW50Y2FsbD4KICAgICA8amFyIGphcmZpbGU9Ii4uL2dlbmVyaWMtcmEuamFyIiBiYXNlZGlyPSJjbGFzc2VzIgogICAgICAgICAgaW5jbHVkZXM9ImNvbm5lY3Rvci8qLmNsYXNzIiAvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sLW1vZHVsZS1zY29wZS9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEKaW5kZXggNTU1MzNkNC4uZjU5YjJiMyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgQ29udHJvbHMgewogICAgIHB1YmxpYyBzdGF0aWMgT2JqZWN0IHJlYWR5TG9jayA9IG5ldyBPYmplY3QoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sLW1vZHVsZS1zY29wZS9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEKaW5kZXggMWY1OWI5OC4uNjUyZDY4YiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBEZWxpdmVyeVdvcmsgaW1wbGVtZW50cyBXb3JrIHsKIApAQCAtMzcsNyArMzcsNyBAQAogICAgIHByaXZhdGUgU3RyaW5nIG9wOwogICAgIHByaXZhdGUgYm9vbGVhbiBrZWVwQ291bnQ7CiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50ZXIgPSAwOwotICAgIAorCiAgICAgcHVibGljIERlbGl2ZXJ5V29yayhNZXNzYWdlRW5kcG9pbnQgZXAsIGludCBudW1PZk1lc3NhZ2VzLCBTdHJpbmcgb3ApIHsKICAgICAgICAgdGhpcy5lcCA9IGVwOwogICAgICAgICB0aGlzLm51bSA9IG51bU9mTWVzc2FnZXM7CkBAIC00NSw3ICs0NSw3IEBACiAgICAgICAgIHRoaXMua2VlcENvdW50ID0gZmFsc2U7CiAgICAgfQogCi0gICAgcHVibGljIERlbGl2ZXJ5V29yayhNZXNzYWdlRW5kcG9pbnQgZXAsIGludCBudW1PZk1lc3NhZ2VzLCAKKyAgICBwdWJsaWMgRGVsaXZlcnlXb3JrKE1lc3NhZ2VFbmRwb2ludCBlcCwgaW50IG51bU9mTWVzc2FnZXMsCiAgICAgICAgICAgICBTdHJpbmcgb3AsIGJvb2xlYW4ga2VlcENvdW50KSB7CiAgICAgICAgIHRoaXMuZXAgPSBlcDsKICAgICAgICAgdGhpcy5udW0gPSBudW1PZk1lc3NhZ2VzOwpAQCAtNTYsNyArNTYsNyBAQAogICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKIAogICAgICAgICBkZWJ1ZygiRU5URVIuLi4iKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIC8vTWV0aG9kIG9uTWVzc2FnZSA9IGdldE9uTWVzc2FnZU1ldGhvZCgpOwogICAgICAgICAgICAgLy9lcC5iZWZvcmVEZWxpdmVyeShvbk1lc3NhZ2UpOwpAQCAtNzksMTEgKzc5LDExIEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vZXAuYWZ0ZXJEZWxpdmVyeSgpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiTEVBVkUuLi4iKTsKICAgICB9CiAKQEAgLTk0LDE0ICs5NCwxNCBAQAogICAgIH0KIAogICAgIHByaXZhdGUgTWV0aG9kIGdldE9uTWVzc2FnZU1ldGhvZCgpIHsKLSAgICAgICAgCisKICAgICAgICAgTWV0aG9kIG9uTWVzc2FnZU1ldGhvZCA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDbGFzcyBtc2dMaXN0ZW5lckNsYXNzID0gY29ubmVjdG9yLk15TWVzc2FnZUxpc3RlbmVyLmNsYXNzOwogICAgICAgICAgICAgQ2xhc3NbXSBwYXJhbVR5cGVzID0geyBqYXZhLmxhbmcuU3RyaW5nLmNsYXNzIH07Ci0gICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPSAKKyAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9CiAgICAgICAgICAgICAgICAgbXNnTGlzdGVuZXJDbGFzcy5nZXRNZXRob2QoIm9uTWVzc2FnZSIsIHBhcmFtVHlwZXMpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sLW1vZHVsZS1zY29wZS9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEKaW5kZXggMTAwY2FjZS4uZmE5M2Y2MyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhCkBAIC0zNiw3ICszNiw3IEBACiAgICAgICAgICAgICAgIGZsYWdUb1N0cmluZyhmbGFncykpOwogICAgIH0KIAotICAgIAorCiAgICAgcHVibGljIHZvaWQgZm9yZ2V0KFhpZCB4aWQpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5mb3JnZXQ6ICIgKyB4aWRUb1N0cmluZyh4aWQpKTsKICAgICB9CkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5wcmVwYXJlOiAiICsgeGlkVG9TdHJpbmcoeGlkKSk7CiAgICAgICAgIHJldHVybiBYQVJlc291cmNlLlhBX09LOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBYaWRbXSByZWNvdmVyKGludCBmbGFnKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2UucmVjb3ZlcjogIiArIGZsYWdUb1N0cmluZyhmbGFnKSk7CiAgICAgICAgIHJldHVybiBudWxsOwpAQCAtNjYsNyArNjYsNyBAQAogICAgIHB1YmxpYyBib29sZWFuIHNldFRyYW5zYWN0aW9uVGltZW91dChpbnQgc2Vjb25kcykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHN0YXJ0KFhpZCB4aWQsIGludCBmbGFncykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLnN0YXJ0OiAiICsgeGlkVG9TdHJpbmcoeGlkKSArICIsIiArCiAgICAgICAgICAgICAgICAgZmxhZ1RvU3RyaW5nKGZsYWdzKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL3JhL3NyYy9jb25uZWN0b3IvTWVzc2FnZXMuamF2YQppbmRleCBiNWIwZjAyLi40YzljMDEyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sLW1vZHVsZS1zY29wZS9yYS9zcmMvY29ubmVjdG9yL01lc3NhZ2VzLmphdmEKQEAgLTIxLDcgKzIxLDcgQEAKIC8qKgogICogY29sbGVjdGlvbiBvZiBtZXNzYWdlcy4KICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIE1lc3NhZ2VzIHsKIApAQCAtNTQsNyArNTQsNyBAQAogICAgICAgIFN0cmluZyBjb21tYW5kICA9IGFyZ3NbMF07CiAgICAgICAgU3RyaW5nIGRlc3ROYW1lID0gYXJnc1sxXTsKICAgICAgICBTdHJpbmcgbWVzc2FnZSAgPSBhcmdzWzJdOwotICAgCisKICAgICAgICBpZiAoISJhZGQiLmVxdWFscyhjb21tYW5kKSkgewogICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEKaW5kZXggMTA0ODNlZC4uMWQwMmM2MiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sLW1vZHVsZS1zY29wZS9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YQpAQCAtMzgsMTMgKzM4LDEzIEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgaW5pdGlhbGl6ZSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXppbmcgdGhlIENvbnRyb2xzIHRvIGZhbHNlOiIrcmVzZXRDb250cm9sKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXppbmcgdGhlIENvbnRyb2xzIHRvIGZhbHNlOiIrcmVzZXRDb250cm9sKTsKICAgICAgICAgaWYgKHJlc2V0Q29udHJvbC5lcXVhbHMoIkJFR0lOTklORyIpKSB7CiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKENvbnRyb2xzLnJlYWR5TG9jayl7CiAgICAgICAgICAgICAgICAgQ29udHJvbHMuZG9uZT1mYWxzZTsKICAgICAgICAgICAgIH0KLQkgICBTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXplZCB0aGUgQ29udHJvbHMgdG8gZmFsc2UiKTsKLQl9CisgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6ZWQgdGhlIENvbnRyb2xzIHRvIGZhbHNlIik7CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIGRvbmUoKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YQppbmRleCA4MTgyZWY1Li4zZmNlNTQ0IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sLW1vZHVsZS1zY29wZS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEKQEAgLTI0LDkgKzI0LDkgQEAKICAqIHNvIHRoYXQgdGhlIGFwcCBzZXJ2ZXIgY2FuIGluc3RhbnRpYXRlIGFuZCBjb25maWd1cmUKICAqIGl0IGF0IHRoZSBydW50aW1lLgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCi1wdWJsaWMgY2xhc3MgU2ltcGxlQWN0aXZhdGlvblNwZWMgCitwdWJsaWMgY2xhc3MgU2ltcGxlQWN0aXZhdGlvblNwZWMKICAgICBpbXBsZW1lbnRzIEFjdGl2YXRpb25TcGVjLCBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7CiAKICAgICBwcml2YXRlIFN0cmluZyBkZXN0aW5hdGlvbk5hbWU7CkBAIC00Myw3ICs0Myw3IEBACiAgICAgcHVibGljIFN0cmluZyBnZXREZXN0aW5hdGlvbk5hbWUgKCkgewogICAgICAgICByZXR1cm4gdGhpcy5kZXN0aW5hdGlvbk5hbWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0RGVzdGluYXRpb25OYW1lIChTdHJpbmcgbmFtZSkgewogICAgICAgICBkZWJ1Zygic2V0RGVzdGluYXRpb25OYW1lKCkgY2FsbGVkLi4uIG5hbWUgPSAiICsgbmFtZSk7CiAgICAgICAgIHRoaXMuZGVzdGluYXRpb25OYW1lID0gbmFtZTsKQEAgLTUyLDcgKzUyLDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldERlc3RpbmF0aW9uVHlwZSgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZGVzdGluYXRpb25UeXBlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldERlc3RpbmF0aW9uVHlwZSAoU3RyaW5nIHR5cGUpIHsKICAgICAgICAgZGVidWcoInNldERlc3RpbmF0aW9uVHlwZSAoKSBjYWxsZWQuLi4gdHlwZSA9ICIgKyB0eXBlKTsKICAgICAgICAgdGhpcy5kZXN0aW5hdGlvblR5cGU9IHR5cGU7CkBAIC02MSw3ICs2MSw3IEBACiAgICAgcHVibGljIFN0cmluZyBnZXRUZXN0UHJvcCgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMudGVzdFByb3A7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0VGVzdFByb3AgKFN0cmluZyB0ZXN0UHJvcCkgewogICAgICAgICBkZWJ1Zygic2V0VGVzdFByb3AgKCkgY2FsbGVkLi4uIHRlc3RQcm9wID0gIiArIHRlc3RQcm9wKTsKICAgICAgICAgdGhpcy50ZXN0UHJvcCA9IHRlc3RQcm9wOwpAQCAtNzAsNyArNzAsNyBAQAogICAgIHB1YmxpYyBJbnRlZ2VyIGdldFRlc3RJbnRlZ2VyUHJvcCgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMudGVzdEludGVnZXJQcm9wOwogICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFRlc3RJbnRlZ2VyUHJvcCAoSW50ZWdlciB0ZXN0UHJvcDEpIHsKICAgICAgICAgZGVidWcoInNldFRlc3RJbnRlZ2VyUHJvcCAoKSBjYWxsZWQuLi4gdGVzdEludGVnZXJQcm9wID0gIiArIHRlc3RQcm9wMSk7CiAgICAgICAgIHRoaXMudGVzdEludGVnZXJQcm9wID0gdGVzdFByb3AxOwpAQCAtOTQsNyArOTQsNyBAQAogCiAgICAgICB9CiAKLSAgIH0gCisgICB9CiAKICAgICBwcml2YXRlIHZvaWQgZGVidWcgKFN0cmluZyBtZXNzYWdlKQogICAgIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sLW1vZHVsZS1zY29wZS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sLW1vZHVsZS1zY29wZS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YQppbmRleCA2ZTUzNTNmLi4zZGY3MDcwIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbC5qYXZhCkBAIC00MCw5ICs0MCw5IEBACiAvKioKICAqIFRoaXMgaXMgYSBzYW1wbGUgcmVzb3VyY2UgYWRhcHRlcgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCi1wdWJsaWMgY2xhc3MgU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbCAKK3B1YmxpYyBjbGFzcyBTaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsCiBpbXBsZW1lbnRzIFJlc291cmNlQWRhcHRlciwgamF2YS5pby5TZXJpYWxpemFibGUgewogCiAgICAgcHJpdmF0ZSBCb290c3RyYXBDb250ZXh0IGN0eDsKQEAgLTU4LDcgKzU4LDcgQEAKIAogICAgIHB1YmxpYyB2b2lkCiAgICAgc3RhcnQoQm9vdHN0cmFwQ29udGV4dCBjdHgpIHRocm93cyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbnsKLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIjAwMS4gU2ltcGxlIFJBIHN0YXJ0Li4uIik7CiAKICAgICAgICAgdGhpcy5jdHggPSBjdHg7CkBAIC02OCwyMSArNjgsMjEgQEAKIAogICAgICAgICAvL3Rlc3RpbmcgY3JlYXQgdGltZXIKICAgICAgICAgVGltZXIgdGltZXIgPSBudWxsOwotCSAgdHJ5ewotCSAgICAgIHRpbWVyID0gY3R4LmNyZWF0ZVRpbWVyKCk7Ci0JICB9IGNhdGNoKFVuYXZhaWxhYmxlRXhjZXB0aW9uIHVlKSB7Ci0JICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFcnJvciIpOwotCSAgICAgIHRocm93IG5ldyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbigiRXJyb3IgZm9ybSBib290c3RyYXAiKTsKLQkgIH0KKyAgICAgIHRyeXsKKyAgICAgICAgICB0aW1lciA9IGN0eC5jcmVhdGVUaW1lcigpOworICAgICAgfSBjYXRjaChVbmF2YWlsYWJsZUV4Y2VwdGlvbiB1ZSkgeworICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXJyb3IiKTsKKyAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VBZGFwdGVySW50ZXJuYWxFeGNlcHRpb24oIkVycm9yIGZvcm0gYm9vdHN0cmFwIik7CisgICAgICB9CiAgICAgICAgIGRlYnVnKCIwMDQuIFNpbXBsZSBSQSBzdGFydC4uLiIpOwogCiAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAKKwogICAgICAgICAgIFhBVGVybWluYXRvciB4YSA9IGN0eC5nZXRYQVRlcm1pbmF0b3IoKTsKLSAgICAgICAgICAKKwogICAgICAgICAgIFhpZCB4aWQxID0gbmV3IFhJRCgpOwogICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFhJRDEgPSAiICsgeGlkMSk7Ci0gICAgICAgICAgCisKICAgICAgICAgICBFeGVjdXRpb25Db250ZXh0IGVjID0gbmV3IEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICAgICAgICBlYy5zZXRYaWQoeGlkMSk7CiAgICAgICAgICAgZWMuc2V0VHJhbnNhY3Rpb25UaW1lb3V0KDUqMTAwMCk7IC8vNSBzZWNvbmRzCkBAIC05MiwxNCArOTIsMTQgQEAKICAgICAgICAgICB3bS5kb1dvcmsob3V0dywgMSoxMDAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgeGEuY29tbWl0KHhpZDEsIHRydWUpOwogICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgIAorCiAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgZXggPSAiICsgZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICB4YS5yb2xsYmFjayh4aWQxKTsKICAgICAgICAgICB9Ci0gICAgICAgICAgCisKICAgICAgICAgICBYaWQgeGlkMiA9IG5ldyBYSUQoKTsKICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBYSUQyID0gIiArIHhpZDIpOwotICAgICAgICAgIAorCiAgICAgICAgICAgZWMgPSBuZXcgRXhlY3V0aW9uQ29udGV4dCgpOwogICAgICAgICAgIGVjLnNldFhpZCh4aWQyKTsKICAgICAgICAgICBlYy5zZXRUcmFuc2FjdGlvblRpbWVvdXQoNSoxMDAwKTsgLy81IHNlY29uZHMKQEAgLTExNiw3ICsxMTYsNyBAQAogICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgIH0KIAotICAgICAgICAKKwogICAgICAgICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IDM7IGkrKykgewogICAgICAgICAgIFRlc3RXTVdvcmsgdyA9IG5ldyBUZXN0V01Xb3JrKGksIGZhbHNlKTsKICAgICAgICAgICB0cnkgewpAQCAtMTI0LDcgKzEyNCw3IEBACiAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGQUlMOiBDQVVHSFQgZXhjZXB0aW9uIDogaSA9ICIgKyBpKTsKICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgICB9IAorICAgICAgICAgIH0KICAgICAgICAgICB9CiAKICAgICAgICAgICBmb3IgKGludCBpID0gMyA7IGkgPCA2OyBpKyspIHsKQEAgLTE3Miw3ICsxNzIsNyBAQAogICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgIH0KICAgICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCIwMDUuIFNpbXBsZSBSQSBzdGFydC4uLiIpOwogICAgIH0KIApAQCAtMjA2LDEzICsyMDYsMTMgQEAKIAogICAgIHB1YmxpYyB2b2lkCiAgICAgZW5kcG9pbnREZWFjdGl2YXRpb24gKAotICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBlbmRwb2ludEZhY3RvcnksIAorICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBlbmRwb2ludEZhY3RvcnksCiAgICAgICAgICAgICBBY3RpdmF0aW9uU3BlYyBzcGVjKSB7CiAgICAgICAgIGRlYnVnICgiZW5kcG9pbnREZWFjdGl2YXRpb24gY2FsbGVkLi4uIik7Ci0gICAgICAgIAorCiAgICAgICAgICgoV29ya0Rpc3BhdGNoZXIpIHdvcmspLnN0b3AoKTsKICAgICB9Ci0gIAorCiAgICAgcHVibGljIFN0cmluZyBnZXRUZXN0TmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHRlc3ROYW1lOwogICAgIH0KQEAgLTIyOCw3ICsyMjgsNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbF0gPT0+ICIgKyBtZXNzYWdlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgWEFSZXNvdXJjZVtdIGdldFhBUmVzb3VyY2VzKEFjdGl2YXRpb25TcGVjW10gc3BlY3MpIAorICAgIHB1YmxpYyBYQVJlc291cmNlW10gZ2V0WEFSZXNvdXJjZXMoQWN0aXZhdGlvblNwZWNbXSBzcGVjcykKICAgICAgICAgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL3JhL3NyYy9jb25uZWN0b3IvVGVzdFdNV29yay5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL3JhL3NyYy9jb25uZWN0b3IvVGVzdFdNV29yay5qYXZhCmluZGV4IGJiMDU1MzQuLmRlOTNiYzEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sLW1vZHVsZS1zY29wZS9yYS9zcmMvY29ubmVjdG9yL1Rlc3RXTVdvcmsuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvcmEvc3JjL2Nvbm5lY3Rvci9UZXN0V01Xb3JrLmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBUZXN0V01Xb3JrIGltcGxlbWVudHMgV29yayB7CiAKQEAgLTQyLDggKzQyLDggQEAKICAgICBwdWJsaWMgVGVzdFdNV29yayhpbnQgaWQsIGJvb2xlYW4gaXNSb2d1ZSkgewogICAgICAgICB0aGlzKGlkLCBpc1JvZ3VlLCBmYWxzZSwgbnVsbCk7CiAgICAgfQotICAgIAotICAgIHB1YmxpYyBUZXN0V01Xb3JrKGludCBpZCwgYm9vbGVhbiBpc1JvZ3VlLCAKKworICAgIHB1YmxpYyBUZXN0V01Xb3JrKGludCBpZCwgYm9vbGVhbiBpc1JvZ3VlLAogICAgICAgICAgICAgYm9vbGVhbiBkb05lc3QsIEV4ZWN1dGlvbkNvbnRleHQgY3R4KSB7CiAgICAgICAgIHRoaXMuaWQgPSBpZDsKICAgICAgICAgdGhpcy5pc1JvZ3VlID0gaXNSb2d1ZTsKQEAgLTc3LDEwICs3NywxMCBAQAogICAgICAgICAgICAgfSBjYXRjaCAoV29ya0V4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgICAgIGlmIChleC5nZXRFcnJvckNvZGUoKS5lcXVhbHMoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV29ya0V4Y2VwdGlvbi5UWF9DT05DVVJSRU5UX1dPUktfRElTQUxMT1dFRCkpIHsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKyAKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQQVNTOiBDQVVHSFQgRVhQRUNURUQgPSAiICsgZXguZ2V0RXJyb3JDb2RlKCkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsgCisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRkFJTDogQ0FVR0hUIFVORVhQRUNURUQgPSAiICsgZXguZ2V0RXJyb3JDb2RlKCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTkyLDcgKzkyLDcgQEAKICAgICAgICAgICAgICAgICBlYy5zZXRUcmFuc2FjdGlvblRpbWVvdXQoNSoxMDAwKTsgLy81IHNlY29uZHMKICAgICAgICAgICAgICAgICB3bS5kb1dvcmsobmVzdGVkV29yaywgMSoxMDAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICJGQUlMOiBDQVVHSFQgVU5FWFBFQ1RFRCA9ICIgKyBleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQppbmRleCBhZWM4OWJlLi43NWQ3NTMwIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC1tb2R1bGUtc2NvcGUvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sLW1vZHVsZS1zY29wZS9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEKQEAgLTMzLDcgKzMzLDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBXb3JrRGlzcGF0Y2hlciBpbXBsZW1lbnRzIFdvcmsgewogCkBAIC00NCwxMSArNDQsMTEgQEAKICAgICBwcml2YXRlIEFjdGl2YXRpb25TcGVjIHNwZWM7CiAgICAgcHJpdmF0ZSBXb3JrTWFuYWdlciB3bTsKICAgICBwcml2YXRlIFhBVGVybWluYXRvciB4YTsKLSAgICAKKwogICAgIHB1YmxpYyBXb3JrRGlzcGF0Y2hlcigKICAgICAgICAgICAgIFN0cmluZyBpZCwKICAgICAgICAgICAgIEJvb3RzdHJhcENvbnRleHQgY3R4LAotICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBmYWN0b3J5LCAKKyAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZmFjdG9yeSwKICAgICAgICAgICAgIEFjdGl2YXRpb25TcGVjIHNwZWMpIHsKICAgICAgICAgdGhpcy5pZCAgICAgID0gaWQ7CiAgICAgICAgIHRoaXMuY3R4ICAgICA9IGN0eDsKQEAgLTYxLDcgKzYxLDcgQEAKICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CiAKICAgICAgICAgZGVidWcoIkVOVEVSLi4uIik7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKENvbnRyb2xzLnJlYWR5TG9jaykgewogICAgICAgICAgICAgICAgIGRlYnVnKCJXQUlULi4uIik7CkBAIC04MywyNiArODMsMjYgQEAKICAgICAgICAgICAgIHRyeSB7CiAKICAgICAgICAgICAgICAgICBNZXRob2Qgb25NZXNzYWdlID0gZ2V0T25NZXNzYWdlTWV0aG9kKCk7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpc0RlbGl2ZXJ5VHJhbnNhY3RlZCA9ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlzRGVsaXZlcnlUcmFuc2FjdGVkID0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3J5LmlzRGVsaXZlcnlUcmFuc2FjdGVkKG9uTWVzc2FnZSkpOwogCiAgICAgICAgICAgICAgICAgaWYgKCFmYWN0b3J5LmlzRGVsaXZlcnlUcmFuc2FjdGVkKG9uTWVzc2FnZSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy9NZXNzYWdlRW5kcG9pbnQgZXAgPSBmYWN0b3J5LmNyZWF0ZUVuZHBvaW50KG51bGwpOwotICAgICAgICAgICAgICAgICAgICAvL0RlbGl2ZXJ5V29yayBkID0gbmV3IERlbGl2ZXJ5V29yaygiTk9fVFgiLCBlcCk7IAorICAgICAgICAgICAgICAgICAgICAvL0RlbGl2ZXJ5V29yayBkID0gbmV3IERlbGl2ZXJ5V29yaygiTk9fVFgiLCBlcCk7CiAgICAgICAgICAgICAgICAgICAgIC8vd20uZG9Xb3JrKGQsIDAsIG51bGwsIG51bGwpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vTWVzc2FnZUVuZHBvaW50IGVwID0gZmFjdG9yeS5jcmVhdGVFbmRwb2ludChudWxsKTsKICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50IGVwID0gZmFjdG9yeS5jcmVhdGVFbmRwb2ludChuZXcgRmFrZVhBUmVzb3VyY2UoKSk7CiAgICAgICAgICAgICAgICAgICAgIGludCBudW1PZk1lc3NhZ2VzID0gNTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy9pbXBvcnRpbmcgdHJhbnNhY3Rpb24KIAogICAgICAgICAgICAgICAgICAgICAvL3dyaXRlL2NvbW1pdAogICAgICAgICAgICAgICAgICAgICBFeGVjdXRpb25Db250ZXh0IGVjID0gc3RhcnRUeCgpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiU3RhcnQgVFggLSAiICsgZWMuZ2V0WGlkKCkpOwogCi0gICAgICAgICAgICAgICAgICAgIERlbGl2ZXJ5V29yayB3ID0gCisgICAgICAgICAgICAgICAgICAgIERlbGl2ZXJ5V29yayB3ID0KICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEZWxpdmVyeVdvcmsoZXAsIG51bU9mTWVzc2FnZXMsICJXUklURSIpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIHRydWUpOwpAQCAtMTEwLDcgKzExMCw3IEBACiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJET05FIFdSSVRFIFRPIERCIik7CiAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xzLmV4cGVjdGVkUmVzdWx0cyA9IG51bU9mTWVzc2FnZXM7CiAgICAgICAgICAgICAgICAgICAgIG5vdGlmeUFuZFdhaXQoKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy9kZWxldGUvcm9sbGJhY2sKICAgICAgICAgICAgICAgICAgICAgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7CkBAIC0xMjYsNyArMTI2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgLy9kZWxldGUvY29tbWl0CiAgICAgICAgICAgICAgICAgICAgIGVjID0gc3RhcnRUeCgpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiU3RhcnQgVFggLSAiICsgZWMuZ2V0WGlkKCkpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICB3ID0gbmV3IERlbGl2ZXJ5V29yayhlcCwgbnVtT2ZNZXNzYWdlcywgIkRFTEVURSIpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIHRydWUpOwpAQCAtMTUwLDcgKzE1MCw3IEBACiAgICAgICAgICAgICAgICAgICAgIC8vZGVsZXRlL2NvbW1pdAogICAgICAgICAgICAgICAgICAgICBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgdyA9IG5ldyBEZWxpdmVyeVdvcmsoZXAsIG51bU9mTWVzc2FnZXMsICJERUxFVEUiKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgeGEuY29tbWl0KGVjLmdldFhpZCgpLCB0cnVlKTsKQEAgLTE5NSw3ICsxOTUsNyBAQAogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBpZiAoWEFSZXNvdXJjZS5YQV9PSyA9PSB4YS5wcmVwYXJlKGVjLmdldFhpZCgpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgeGEuY29tbWl0KGVjLmdldFhpZCgpLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiWEEgUFJFUEFSRS9DT01NSVQuIERPTkUgV1JJVEUgVE8gREIgIik7CkBAIC0yMDcsMTkgKzIwNywxOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMuZXhwZWN0ZWRSZXN1bHRzID0gMzsKICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeUFuZFdhaXQoKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvL2RlbGV0ZSBhbGwuCiAgICAgICAgICAgICAgICAgICAgIGVjID0gc3RhcnRUeCgpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiU3RhcnQgVFggLSAiICsgZWMuZ2V0WGlkKCkpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICB3ID0gbmV3IERlbGl2ZXJ5V29yayhlcCwgMSwgIkRFTEVURV9BTEwiKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgeGEuY29tbWl0KGVjLmdldFhpZCgpLCB0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIkRPTkUgREVMRVRFIEFMTCBGUk9NIERCIik7CiAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xzLmV4cGVjdGVkUmVzdWx0cyA9IDA7CiAgICAgICAgICAgICAgICAgICAgIG5vdGlmeUFuZFdhaXQoKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgZG9uZSgpOwogICAgICAgICAgICAgICAgIH0KIApAQCAtMjQ2LDcgKzI0Niw3IEBACiAgICAgICAgICAgICAgICAgZG9uZSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCJMRUFWRS4uLiIpOwogICAgIH0KIApAQCAtMjYxLDE0ICsyNjEsMTQgQEAKICAgICB9CiAKICAgICBwdWJsaWMgTWV0aG9kIGdldE9uTWVzc2FnZU1ldGhvZCgpIHsKLSAgICAgICAgCisKICAgICAgICAgTWV0aG9kIG9uTWVzc2FnZU1ldGhvZCA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDbGFzcyBtc2dMaXN0ZW5lckNsYXNzID0gY29ubmVjdG9yLk15TWVzc2FnZUxpc3RlbmVyLmNsYXNzOwogICAgICAgICAgICAgQ2xhc3NbXSBwYXJhbVR5cGVzID0geyBqYXZhLmxhbmcuU3RyaW5nLmNsYXNzIH07Ci0gICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPSAKKyAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9CiAgICAgICAgICAgICAgICAgbXNnTGlzdGVuZXJDbGFzcy5nZXRNZXRob2QoIm9uTWVzc2FnZSIsIHBhcmFtVHlwZXMpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQpAQCAtMjkxLDEzICsyOTEsMTMgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIC8vU2xlZXAgZm9yIDUgc2Vjb25kcwogICAgICAgICAgICAgLy9UaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDUqMTAwMCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgc3luY2hyb25pemVkKENvbnRyb2xzLnJlYWR5TG9jaykgewogICAgICAgICAgICAgICAgIC8vTm90aWZ5IHRoZSBjbGllbnQgdG8gY2hlY2sgdGhlIHJlc3VsdHMKLSAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2subm90aWZ5KCk7IAotICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay5ub3RpZnkoKTsKKwogICAgICAgICAgICAgICAgIC8vV2FpdCB1bnRpbCByZXN1bHRzIGFyZSB2ZXJpZmllZCBieSB0aGUgY2xpZW50Ci0gICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLndhaXQoKTsgCisgICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLndhaXQoKTsKIAogICAgICAgICAgICAgICAgIGlmIChzdG9wKSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sLW1vZHVsZS1zY29wZS9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEKaW5kZXggMGNiNzdiMi4uMmJlYTEyMSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwtbW9kdWxlLXNjb3BlL3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEKQEAgLTMxLDggKzMxLDggQEAKICAgICBwdWJsaWMgaW50IGJyYW5jaFF1YWxpZmllcjsKICAgICBwdWJsaWMgaW50IGdsb2JhbFR4SUQ7CiAKLSAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYR1RSSURTSVpFPSA2NDsgCi0gICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEJRVUFMU0laRT0gNjQ7IAorICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhHVFJJRFNJWkU9IDY0OworICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhCUVVBTFNJWkU9IDY0OwogCiAgICAgcHVibGljIFhJRCgpIHsKICAgICAgICAgaW50IGZvbyA9IElEKys7CkBAIC01MCwxMCArNTAsMTAgQEAKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgICAgICAgICAgICAgICAgIC8vIEl0IGNhbid0IGJlIGVxdWFsCiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgb3RoZXIgPSAoWElEKW87ICAgICAgICAgICAgICAgICAgIC8vIFRoZSBvdGhlciBYSUQsIG5vdyBwcm9wZXJseSBjYXN0Ci0gICAgICAgIAotICAgICAgICBpZiAodGhpcy5mb3JtYXRJRCA9PSBvdGhlci5mb3JtYXRJRCAKKworICAgICAgICBpZiAodGhpcy5mb3JtYXRJRCA9PSBvdGhlci5mb3JtYXRJRAogICAgICAgICAgICAgICAgICYmIHRoaXMuYnJhbmNoUXVhbGlmaWVyID09IG90aGVyLmJyYW5jaFF1YWxpZmllcgogICAgICAgICAgICAgICAgICYmIHRoaXMuZ2xvYmFsVHhJRCA9PSBvdGhlci5nbG9iYWxUeElEKSB7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTkzLDcgKzkzLDcgQEAKICAgICAgICAgICAgICAgICAiZm9ybWF0SUQoIiAgICAgKyBmb3JtYXRJRCAgICAgKyAiKSwgIiArCiAgICAgICAgICAgICAgICAgImJyYW5jaFF1YWxpZmllciAoIiArIGJyYW5jaFF1YWxpZmllciArICIpLCAiICsKICAgICAgICAgICAgICAgICAiZ2xvYmFsVHhJRCgiICsgZ2xvYmFsVHhJRCArICIpfSIpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gczsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL2FwcC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9hcHAvYnVpbGQueG1sCmluZGV4IGRkZDA1M2UuLmYwNGYwOTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL2FwcC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvYXBwL2J1aWxkLnhtbApAQCAtMzYsMTggKzM2LDE4IEBACiAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJpbml0LWNvbW1vbiwgY2xlYW4tY29tbW9uIj4KICAgIDxhbnQgZGlyPSJzcmMiIGluaGVyaXRBbGw9ImZhbHNlIiB0YXJnZXQ9ImFsbCIvPgogICAgPGFudGNhbGwgdGFyZ2V0PSJlYXItY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0iYXBwbmFtZSIgdmFsdWU9InNpbXBsZW1kYiIvPgotCTxwYXJhbSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJNRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiLz4KLQk8cGFyYW0gbmFtZT0iZ2xhc3NmaXNoLXJlc291cmNlcy1lYXIueG1sIiB2YWx1ZT0ic3JjL01FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sIi8+CisgICAgPHBhcmFtIG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJzaW1wbGVtZGIiLz4KKyAgICA8cGFyYW0gbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIi8+CisgICAgPHBhcmFtIG5hbWU9ImdsYXNzZmlzaC1yZXNvdXJjZXMtZWFyLnhtbCIgdmFsdWU9InNyYy9NRVRBLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbCIvPgogICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KIAogICA8dGFyZ2V0IG5hbWU9InNldHVwSmRiYyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogPCEtLQogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1jb25wb29sLWNvbm5lY3RvciI+Ci0JIDxwYXJhbSBuYW1lPSJkYi5jbGFzcyIgdmFsdWU9ImNvbS5zdW4uc3FsLmpkYmN4Lm9yYWNsZS5PcmFjbGVEYXRhU291cmNlIi8+CisgICAgIDxwYXJhbSBuYW1lPSJkYi5jbGFzcyIgdmFsdWU9ImNvbS5zdW4uc3FsLmpkYmN4Lm9yYWNsZS5PcmFjbGVEYXRhU291cmNlIi8+CiAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJqZGJjLXBvaW50YmFzZS1wb29sMSIvPgotCSA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS50eXBlIiB2YWx1ZT0iamF2YXguc3FsLlhBRGF0YVNvdXJjZSIvPgorICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS50eXBlIiB2YWx1ZT0iamF2YXguc3FsLlhBRGF0YVNvdXJjZSIvPgogICAgICAgPC9hbnRjYWxsPgogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+CkBAIC01Nyw3ICs1Nyw3IEBACiAtLT4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29ubmVjdG9yIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0iY3JlYXRlZGIuc3FsIi8+Ci0gICAgICA8L2FudGNhbGw+CQorICAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KIAogICA8dGFyZ2V0IG5hbWU9InVuc2V0SmRiYyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvYXBwL3NyYy9NRVRBLUlORi9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwKaW5kZXggNGJkY2M2Zi4uMzIzYzBlYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvYXBwL3NyYy9NRVRBLUlORi9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9hcHAvc3JjL01FVEEtSU5GL2VqYi1qYXIueG1sCkBAIC05MSw4ICs5MSw4IEBACiAgICAgICAgIDxyZXMtc2hhcmluZy1zY29wZT5TaGFyZWFibGU8L3Jlcy1zaGFyaW5nLXNjb3BlPgogICAgICAgPC9yZXNvdXJjZS1yZWY+CiAgICAgICA8cmVzb3VyY2UtZW52LXJlZj4KLQk8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmVpcy90ZXN0QWRtaW48L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KLQk8cmVzb3VyY2UtZW52LXJlZi10eXBlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC9yZXNvdXJjZS1lbnYtcmVmLXR5cGU+CisgICAgPHJlc291cmNlLWVudi1yZWYtbmFtZT5laXMvdGVzdEFkbWluPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+CisgICAgPHJlc291cmNlLWVudi1yZWYtdHlwZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvcmVzb3VyY2UtZW52LXJlZi10eXBlPgogICAgICAgPC9yZXNvdXJjZS1lbnYtcmVmPgogICAgICAgPHNlY3VyaXR5LWlkZW50aXR5PgogICAgICAgICA8dXNlLWNhbGxlci1pZGVudGl0eS8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9hcHAvc3JjL01FVEEtSU5GL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCmluZGV4IGU0NjU3N2YuLmNiOGNkMjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCkBAIC0zMyw3ICszMyw3IEBACiAgICAgICAgICAgICBUZXN0SW50ZWdlclByb3AKICAgICAgICAgICA8L2FjdGl2YXRpb24tY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgPGFjdGl2YXRpb24tY29uZmlnLXByb3BlcnR5LXZhbHVlPgotICAgICAgICAgICAgMiAKKyAgICAgICAgICAgIDIKICAgICAgICAgICA8L2FjdGl2YXRpb24tY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICA8L2FjdGl2YXRpb24tY29uZmlnLXByb3BlcnR5PgogICAgICAgICA8L2FjdGl2YXRpb24tY29uZmlnPgpAQCAtODUsNyArODUsNyBAQAogICAgICAgPC9yZXNvdXJjZS1yZWY+CiAgICAgICA8cmVzb3VyY2UtZW52LXJlZj4KICAgICAgICAgPHJlc291cmNlLWVudi1yZWYtbmFtZT5laXMvdGVzdEFkbWluPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+Ci0JPGpuZGktbmFtZT5qYXZhOmFwcC9laXMvdGVzdEFkbWluPC9qbmRpLW5hbWU+CisgICAgPGpuZGktbmFtZT5qYXZhOmFwcC9laXMvdGVzdEFkbWluPC9qbmRpLW5hbWU+CiAgICAgICA8L3Jlc291cmNlLWVudi1yZWY+CiAgICAgICA8Z2VuLWNsYXNzZXMvPgogICAgIDwvZWpiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvYXBwL3NyYy9iZWFucy9NZXNzYWdlQ2hlY2tlckVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvYXBwL3NyYy9iZWFucy9NZXNzYWdlQ2hlY2tlckVKQi5qYXZhCmluZGV4IDdkNzhjNDEuLjgyNGUwMzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL2FwcC9zcmMvYmVhbnMvTWVzc2FnZUNoZWNrZXJFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9hcHAvc3JjL2JlYW5zL01lc3NhZ2VDaGVja2VyRUpCLmphdmEKQEAgLTQzLDcgKzQzLDcgQEAKIAogICAgIHB1YmxpYyBNZXNzYWdlQ2hlY2tlckVKQigpIHt9CiAKLSAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSAKKyAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKQogICAgICAgICB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJiZWFuIGNyZWF0ZWQiKTsKICAgICAgICAgaGVsZENvbiA9IG51bGw7CkBAIC03MSwxMSArNzEsMTEgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHN5bmNocm9uaXplZCAoQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpKSB7CiAgICAgICAgICAgICAgICAgLy9UZWxsIHRoZSByZXNvdXJjZSBhZGFwdGVyIHRoZSBjbGllbnQgaXMgcmVhZHkgdG8gcnVuCi0gICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLm5vdGlmeUFsbCgpOyAKLSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkubm90aWZ5QWxsKCk7CisKICAgICAgICAgICAgICAgICBkZWJ1ZygiTk9USUZJRUQuLi4gU1RBUlQgV0FJVElORyIpOwogICAgICAgICAgICAgICAgIC8vV2FpdCB1bnRpbCBiZWluZyB0b2xkIHRvIHJlYWQgZnJvbSB0aGUgZGF0YWJhc2UKLSAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkud2FpdCgpOyAKKyAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkud2FpdCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwpAQCAtODMsMjIgKzgzLDIyIEBACiAgICAgfQogCiAgICAgcHVibGljIGludCBnZXRNZXNzYWdlQ291bnQoKSB7Ci0JdHJ5IHsKKyAgICB0cnkgewogICAgICAgICAgICAgQ29ubmVjdGlvbiBjb24gPSBnZXRGcmVzaENvbm5lY3Rpb24oKTsKICAgICAgICAgICAgIGludCBjb3VudDEgPSBnZXRDb3VudChjb24pOwogICAgICAgICAgICAgY29uLmNsb3NlKCk7Ci0gICAgICAgICAgICAKLQkgICAgLyoKKworICAgICAgICAvKgogICAgICAgICAgICAgc3luY2hyb25pemVkKENvbnRyb2xzLmdldExvY2tPYmplY3QoKSkgewogICAgICAgICAgICAgICAgIENvbnRyb2xzLmdldExvY2tPYmplY3QoKS5ub3RpZnkoKTsKICAgICAgICAgICAgIH0KLQkgICAgKi8KLSAgICAgICAgICAgICAgICAKKyAgICAgICAgKi8KKwogICAgICAgICAgICAgcmV0dXJuIGNvdW50MTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5vdXQpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlKTsKLQl9CisgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgaW50IGdldENvdW50KENvbm5lY3Rpb24gY29uKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKQEAgLTEyNCwxOCArMTI0LDE4IEBACiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICB1c2VyID0gKFN0cmluZykgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3VzZXIiKTsKICAgICAgICAgICAgIHBhc3N3b3JkID0gKFN0cmluZykgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3Bhc3N3b3JkIik7Ci0JICAgIENvbnRyb2xzID0gKE15QWRtaW5PYmplY3QpIGljLmxvb2t1cCgiamF2YTphcHAvZWlzL3Rlc3RBZG1pbiIpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNBTExJTkcgSU5JVElMSVpFIF1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dIik7Ci0JICAgIENvbnRyb2xzLmluaXRpYWxpemUoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDQUxMRUQgSU5JVElMSVpFIF1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dIik7CisgICAgICAgIENvbnRyb2xzID0gKE15QWRtaW5PYmplY3QpIGljLmxvb2t1cCgiamF2YTphcHAvZWlzL3Rlc3RBZG1pbiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNBTExJTkcgSU5JVElMSVpFIF1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dIik7CisgICAgICAgIENvbnRyb2xzLmluaXRpYWxpemUoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDQUxMRUQgSU5JVElMSVpFIF1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dIik7CiAKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KIC8qCiAgICAgICAgIHRyeXsKLSAgICAgICAgICAKKwogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgT2JqZWN0IGRzID0gaWMubG9va3VwKCJqYXZhOmFwcC9qZGJjL2FwcC1sZXZlbC1yZXNvdXJjZSIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJqYXZhOmFwcC9qZGJjL2FwcC1sZXZlbC1yZXNvdXJjZSA6ICIgKyBkcyk7CkBAIC0xNzMsNyArMTczLDcgQEAKICAgICAgICAgICAgIGRlYnVnKCJMb29rZWQgdXAgRGF0YXNvdXJjZVxuIik7CiAgICAgICAgICAgICBkZWJ1ZygiR2V0IEpEQkMgY29ubmVjdGlvbiwgYXV0byBzaWduIG9uIik7CiAgICAgICAgICAgICBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKGNvbiAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbjsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0xODQsNyArMTg0LDcgQEAKICAgICAgICAgICAgIHRocm93IGV4MTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBjbG9zZUNvbm5lY3Rpb24oQ29ubmVjdGlvbiBjb24pIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgICBpZiAoaGVsZENvbiAhPSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZGFkMjA3Yi4uMGIzOGMxOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvYXBwL3NyYy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL2FwcC9zcmMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiBlamItamFyLnhtbD1NRVRBLUlORi9lamItamFyLnhtbAogc3VuLWVqYi1qYXIueG1sPU1FVEEtSU5GL3N1bi1lamItamFyLnhtbApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvYXBwL3NyYy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9hcHAvc3JjL2NsaWVudC9DbGllbnQuamF2YQppbmRleCAwNWM0MjY1Li5lYzc3Y2U1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9hcHAvc3JjL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9hcHAvc3JjL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjgsNDUgKzI4LDQ1IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7Ci0gICAgCisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIC8vc3VwZXIoYXJncyk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZG9UZXN0KCkgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJUaGlzIGlzIHRvIHRlc3QgY29ubmVjdG9yIDEuNSAiKwotCSAgICAgICAgICAgICAiY29udHJhY3RzLiIpOwotICAgICAgICAKKyAgICAgICAgICAgICAgICAgImNvbnRyYWN0cy4iKTsKKwogICAgICAgICBTdHJpbmcgcmVzID0gIk5PVCBSVU4iOwotCWRlYnVnKCJkb1Rlc3QoKSBFTlRFUi4uLiIpOworICAgIGRlYnVnKCJkb1Rlc3QoKSBFTlRFUi4uLiIpOwogICAgICAgICBib29sZWFuIHBhc3MgPSBmYWxzZTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJlcyAgPSAiQUxMIFRFU1RTIFBBU1NFRCI7Ci0JICAgIGludCB0ZXN0Q291bnQgPSAxOworICAgICAgICBpbnQgdGVzdENvdW50ID0gMTsKICAgICAgICAgICAgIHdoaWxlICghZG9uZSgpKSB7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBub3RpZnlBbmRXYWl0KCk7CiAgICAgICAgICAgICAgICAgaWYgKCFkb25lKCkpIHsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlJ1bm5pbmcuLi4iKTsKICAgICAgICAgICAgICAgICAgICAgcGFzcyA9IGNoZWNrUmVzdWx0cyhleHBlY3RlZFJlc3VsdHMoKSk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJHb3QgZXhwZWN0ZWQgcmVzdWx0cyA9ICIgKyBwYXNzKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy9kbyBub3QgY29udGludWUgaWYgb25lIHRlc3QgZmFpbGVkCiAgICAgICAgICAgICAgICAgICAgIGlmICghcGFzcykgewogICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gIlNPTUUgVEVTVFMgRkFJTEVEIjsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCIgQ29ubmVjdG9yIDEuNSB0ZXN0IC0gIiArIHRlc3RDb3VudCwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCIgQ29ubmVjdG9yIDEuNSB0ZXN0IC0gIiArIHRlc3RDb3VudCwgc3RhdC5QQVNTKTsKLQkJICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0JCXRlc3RDb3VudCArKzsKKyAgICAgICAgdGVzdENvdW50ICsrOwogICAgICAgICAgICAgfQogCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpAQCAtNzYsMTQgKzc2LDE0IEBACiAgICAgICAgIH0KICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoInNpbXBsZW1kYiIpOwogCi0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCJFWElUSU5HLi4uIFNUQVRVUyA9ICIgKyByZXMpOwogICAgICAgICByZXR1cm4gcmVzOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgYm9vbGVhbiBjaGVja1Jlc3VsdHMoaW50IG51bSkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIE9iamVjdCBvID0gKG5ldyBJbml0aWFsQ29udGV4dCgpKS5sb29rdXAoIk15TWVzc2FnZUNoZWNrZXIiKTsKLSAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkgCisgICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpCiAgICAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cobywgTWVzc2FnZUNoZWNrZXJIb21lLmNsYXNzKTsKICAgICAgICAgTWVzc2FnZUNoZWNrZXIgY2hlY2tlciA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgIGludCByZXN1bHQgPSBjaGVja2VyLmdldE1lc3NhZ2VDb3VudCgpOwpAQCAtOTIsNyArOTIsNyBAQAogCiAgICAgcHJpdmF0ZSBib29sZWFuIGRvbmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgT2JqZWN0IG8gPSAobmV3IEluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiTXlNZXNzYWdlQ2hlY2tlciIpOwotICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKSAKKyAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkKICAgICAgICAgICAgIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvLCBNZXNzYWdlQ2hlY2tlckhvbWUuY2xhc3MpOwogICAgICAgICBNZXNzYWdlQ2hlY2tlciBjaGVja2VyID0gaG9tZS5jcmVhdGUoKTsKICAgICAgICAgcmV0dXJuIGNoZWNrZXIuZG9uZSgpOwpAQCAtMTAwLDcgKzEwMCw3IEBACiAKICAgICBwcml2YXRlIGludCBleHBlY3RlZFJlc3VsdHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgT2JqZWN0IG8gPSAobmV3IEluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiTXlNZXNzYWdlQ2hlY2tlciIpOwotICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKSAKKyAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkKICAgICAgICAgICAgIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvLCBNZXNzYWdlQ2hlY2tlckhvbWUuY2xhc3MpOwogICAgICAgICBNZXNzYWdlQ2hlY2tlciBjaGVja2VyID0gaG9tZS5jcmVhdGUoKTsKICAgICAgICAgcmV0dXJuIGNoZWNrZXIuZXhwZWN0ZWRSZXN1bHRzKCk7CkBAIC0xMDgsNyArMTA4LDcgQEAKIAogICAgIHByaXZhdGUgdm9pZCBub3RpZnlBbmRXYWl0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIE9iamVjdCBvID0gKG5ldyBJbml0aWFsQ29udGV4dCgpKS5sb29rdXAoIk15TWVzc2FnZUNoZWNrZXIiKTsKLSAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkgCisgICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpCiAgICAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cobywgTWVzc2FnZUNoZWNrZXJIb21lLmNsYXNzKTsKICAgICAgICAgTWVzc2FnZUNoZWNrZXIgY2hlY2tlciA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgIGNoZWNrZXIubm90aWZ5QW5kV2FpdCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhCmluZGV4IGVhOTE5ZGMuLmNiZDcwOTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL2FwcC9zcmMvbWRiL015TWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9hcHAvc3JjL21kYi9NeU1lc3NhZ2VCZWFuLmphdmEKQEAgLTI5LDQxICsyOSw0MSBAQAogCiAvKioKICAqLwotcHVibGljIGNsYXNzIE15TWVzc2FnZUJlYW4gaW1wbGVtZW50cyBNZXNzYWdlRHJpdmVuQmVhbiwgCitwdWJsaWMgY2xhc3MgTXlNZXNzYWdlQmVhbiBpbXBsZW1lbnRzIE1lc3NhZ2VEcml2ZW5CZWFuLAogICAgICAgICBNeU1lc3NhZ2VMaXN0ZW5lciB7CiAKICAgICBwcml2YXRlIHRyYW5zaWVudCBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGMgPSBudWxsOwogICAgIHByaXZhdGUgQ29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0b3IsIHdoaWNoIGlzIHB1YmxpYyBhbmQgdGFrZXMgbm8gYXJndW1lbnRzLgogICAgICAqLwogICAgIHB1YmxpYyBNeU1lc3NhZ2VCZWFuKCkge30KIAogICAgIC8qKgotICAgICAqIHNldE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgCi0gICAgICogbm90IGZpbmFsIG9yIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgCisgICAgICogc2V0TWVzc2FnZURyaXZlbkNvbnRleHQgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dAorICAgICAqIG5vdCBmaW5hbCBvciBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kCiAgICAgICogd2l0aCBvbmUgYXJndW1lbnQgb2YgdHlwZSBqYWthcnRhLmVqYi5NZXNzYWdlRHJpdmVuQ29udGV4dC4KICAgICAgKgogICAgICAqIEBwYXJhbSBtZGMgICAgdGhlIGNvbnRleHQgdG8gc2V0CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TWVzc2FnZURyaXZlbkNvbnRleHQoTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjKSB7Ci0JdGhpcy5tZGMgPSBtZGM7CisgICAgdGhpcy5tZGMgPSBtZGM7CiAgICAgfQogCiAgICAgLyoqCi0gICAgICogZWpiQ3JlYXRlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yIAotICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBubyAKKyAgICAgKiBlamJDcmVhdGUgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IKKyAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggbm8KICAgICAgKiBhcmd1bWVudHMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgeyB9CiAKICAgICAvKioKLSAgICAgKiBvbk1lc3NhZ2UgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IgCisgICAgICogb25NZXNzYWdlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yCiAgICAgICogc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCB3aXRoIG9uZSBhcmd1bWVudAogICAgICAqIG9mIHR5cGUgamFrYXJ0YS5qbXMuTWVzc2FnZS4KICAgICAgKgotICAgICAqIENhc3RzIHRoZSBpbmNvbWluZyBNZXNzYWdlIHRvIGEgVGV4dE1lc3NhZ2UgYW5kIGRpc3BsYXlzIAorICAgICAqIENhc3RzIHRoZSBpbmNvbWluZyBNZXNzYWdlIHRvIGEgVGV4dE1lc3NhZ2UgYW5kIGRpc3BsYXlzCiAgICAgICogdGhlIHRleHQuCiAgICAgICoKICAgICAgKiBAcGFyYW0gaW5NZXNzYWdlICAgIHRoZSBpbmNvbWluZyBtZXNzYWdlCkBAIC03NCw3ICs3NCw3IEBACiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGlmIChpbk1lc3NhZ2UuZW5kc1dpdGgoIldSSVRFIikpIHsKLSAgICAgICAgICAgICAgICBkb0RiU3R1ZmYoIldSSVRFIiwgCisgICAgICAgICAgICAgICAgZG9EYlN0dWZmKCJXUklURSIsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbk1lc3NhZ2Uuc3Vic3RyaW5nKDAsIGluTWVzc2FnZS5sYXN0SW5kZXhPZigiOiIpKSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGluTWVzc2FnZS5lbmRzV2l0aCgiREVMRVRFIikpIHsKICAgICAgICAgICAgICAgICBkb0RiU3R1ZmYoIkRFTEVURSIsCkBAIC05MCwxMCArOTAsMTAgQEAKICAgICAgICAgfQogCiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogZWpiUmVtb3ZlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yIAotICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBubyAKKyAgICAgKiBlamJSZW1vdmUgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IKKyAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggbm8KICAgICAgKiBhcmd1bWVudHMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkge30KQEAgLTEwMyw2MyArMTAzLDYzIEBACiAKICAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24gPSBudWxsOwogICAgICAgICBTdHJpbmcgaWQgICAgPSBtZXNzYWdlLnN1YnN0cmluZygwLCBtZXNzYWdlLmluZGV4T2YoIjoiKSk7Ci0gICAgICAgIFN0cmluZyBib2R5ICA9IG1lc3NhZ2Uuc3Vic3RyaW5nKG1lc3NhZ2UuaW5kZXhPZigiOiIpKzEpOyAKKyAgICAgICAgU3RyaW5nIGJvZHkgID0gbWVzc2FnZS5zdWJzdHJpbmcobWVzc2FnZS5pbmRleE9mKCI6IikrMSk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKCJSRUFEIi5lcXVhbHMob3ApKSB7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZWJ1ZygiUmVhZGluZyByb3cgZnJvbSBkYXRhYmFzZS4uLiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L015REIiKTsKICAgICAgICAgICAgICAgICAgIGRlYnVnKCJMb29rZWQgdXAgRGF0YXNvdXJjZVxuIik7CiAgICAgICAgICAgICAgICAgICBkZWJ1ZygiR2V0IEpEQkMgY29ubmVjdGlvbiwgYXV0byBzaWduIG9uIik7CiAgICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgU3RhdGVtZW50IHN0bXQgPSBkYkNvbm5lY3Rpb24uY3JlYXRlU3RhdGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICBTdHJpbmcgcXVlcnkgPSAKKyAgICAgICAgICAgICAgICAgIFN0cmluZyBxdWVyeSA9CiAgICAgICAgICAgICAgICAgICAiU0VMRUNUIGlkIGZyb20gbWVzc2FnZXMgd2hlcmUgaWQgPSAnUVEnIjsKICAgICAgICAgICAgICAgICAgIFJlc3VsdFNldCByZXN1bHRzID0gc3RtdC5leGVjdXRlUXVlcnkocXVlcnkpOwogICAgICAgICAgICAgICAgICAgcmVzdWx0cy5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlFRIGhhcyBiYWxhbmNlICIgKyAKKyAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUVEgaGFzIGJhbGFuY2UgIiArCiAgICAgICAgICAgICAgICAgICByZXN1bHRzLmdldEludCgiYmFsYW5jZSIpICsgIiBkb2xsYXJzIik7CiAgICAgICAgICAgICAgICAgICByZXN1bHRzLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgICBzdG10LmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZWFkIG9uZSBhY2NvdW50XG4iKTsKICAgICAgICAgICAgICAgICAqLwogCiAgICAgICAgICAgICB9IGVsc2UgaWYgKCJXUklURSIuZXF1YWxzKG9wKSkgewogCiAgICAgICAgICAgICAgICAgZGVidWcoIkluc2VydGluZyBvbmUgbWVzc2FnZSBpbiB0aGUgZGF0YWJhc2VcbiIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBDcmVhdGluZyBhIGRhdGFiYXNlIGNvbm5lY3Rpb24KICAgICAgICAgICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamF2YTphcHAvamRiYy9YQVBvaW50YmFzZSIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKICAgICAgICAgICAgICAgICAvL2RlYnVnKCJHZXQgSkRCQyBjb25uZWN0aW9uLCBhdXRvIHNpZ24gb24iKTsKICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBjcmVhdGVSb3coaWQsIGJvZHksIGRiQ29ubmVjdGlvbik7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGVkIG9uZSBtZXNzYWdlXG4iKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgfSBlbHNlIGlmICgiREVMRVRFIi5lcXVhbHMob3ApKSB7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZWJ1ZygiRGVsZXRpbmcgb25lIG1lc3NhZ2UgZnJvbSB0aGUgZGF0YWJhc2VcbiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6YXBwL2pkYmMvWEFQb2ludGJhc2UiKTsKICAgICAgICAgICAgICAgICAvL2RlYnVnKCJMb29rZWQgdXAgRGF0YXNvdXJjZVxuIik7CiAgICAgICAgICAgICAgICAgLy9kZWJ1ZygiR2V0IEpEQkMgY29ubmVjdGlvbiwgYXV0byBzaWduIG9uIik7CiAgICAgICAgICAgICAgICAgZGJDb25uZWN0aW9uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgZGVsZXRlUm93KGlkLCBkYkNvbm5lY3Rpb24pOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGVsZXRlZCBvbmUgbWVzc2FnZVxuIik7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKCJERUxFVEVfQUxMIi5lcXVhbHMob3ApKSB7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZWJ1ZygiRGVsZXRpbmcgYWxsIG1lc3NhZ2VzIGZyb20gdGhlIGRhdGFiYXNlXG4iKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIC8vIENyZWF0aW5nIGEgZGF0YWJhc2UgY29ubmVjdGlvbgogICAgICAgICAgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSkgaWMubG9va3VwKCJqYXZhOmFwcC9qZGJjL1hBUG9pbnRiYXNlIik7CiAgICAgICAgICAgICAgICAgLy9kZWJ1ZygiTG9va2VkIHVwIERhdGFzb3VyY2VcbiIpOwpAQCAtMTcwLDcgKzE3MCw3IEBACiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vdW5zdXBwb3J0ZWQgb3AKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgIH1maW5hbGx5ewogICAgICAgICAgICAgdHJ5ewogICAgICAgICAgICAgICAgIGRiQ29ubmVjdGlvbi5jbG9zZSgpOwpAQCAtMTc5LDkgKzE3OSw5IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSB2b2lkIGNyZWF0ZVJvdyhTdHJpbmcgaWQsIFN0cmluZyBib2R5LCAKLSAgICAgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKSAKKworICAgIHByaXZhdGUgdm9pZCBjcmVhdGVSb3coU3RyaW5nIGlkLCBTdHJpbmcgYm9keSwKKyAgICAgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKIAogICAgICAgICAvLyBDcmVhdGUgcm93IGZvciB0aGlzIG1lc3NhZ2UKQEAgLTE5Nyw5ICsxOTcsOSBAQAogICAgICAgICBzdG10LmNsb3NlKCk7CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIGRlbGV0ZVJvdyhTdHJpbmcgaWQsIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKSAKKyAgICBwcml2YXRlIHZvaWQgZGVsZXRlUm93KFN0cmluZyBpZCwgamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICAvLyBEZWxldGUgcm93IGZvciB0aGlzIG1lc3NhZ2UKICAgICAgICAgZGVidWcoIkRlbGV0ZVJvdyB3aXRoIElEID0gIiArIGlkKTsKICAgICAgICAgU3RhdGVtZW50IHN0bXQgPSBkYkNvbm5lY3Rpb24uY3JlYXRlU3RhdGVtZW50KCk7CkBAIC0yMTIsOSArMjEyLDkgQEAKICAgICAgICAgc3RtdC5jbG9zZSgpOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBkZWxldGVBbGwoamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pIAorICAgIHByaXZhdGUgdm9pZCBkZWxldGVBbGwoamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICAvLyBEZWxldGUgcm93IGZvciB0aGlzIG1lc3NhZ2UKICAgICAgICAgU3RhdGVtZW50IHN0bXQgPSBkYkNvbm5lY3Rpb24uY3JlYXRlU3RhdGVtZW50KCk7CiAgICAgICAgIFN0cmluZyBxdWVyeSA9ICJERUxFVEUgRlJPTSBtZXNzYWdlcyI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9idWlsZC54bWwKaW5kZXggOGIwMzgwZS4uYTA2OGUxYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL2J1aWxkLnhtbApAQCAtNjIsNyArNjIsNyBAQAogCiAgIDx0YXJnZXQgbmFtZT0icnVudGVzdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJzaW1wbGVtZGIiIC8+CisgICAgPHBhcmFtIG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJzaW1wbGVtZGIiIC8+CiAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvTUVUQS1JTkYvcmEueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvTUVUQS1JTkYvcmEueG1sCmluZGV4IDJjYTJlYmMuLjIxZGViOTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL01FVEEtSU5GL3JhLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9NRVRBLUlORi9yYS54bWwKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgPGluYm91bmQtcmVzb3VyY2VhZGFwdGVyPgotICAgICAgICAgICAgPG1lc3NhZ2VhZGFwdGVyPiAgICAgICAgICAKKyAgICAgICAgICAgIDxtZXNzYWdlYWRhcHRlcj4KICAgICAgICAgICAgICAgICA8bWVzc2FnZWxpc3RlbmVyPgogICAgICAgICAgICAgICAgICAgICA8bWVzc2FnZWxpc3RlbmVyLXR5cGU+CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIKQEAgLTU2LDcgKzU2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIDwvYWN0aXZhdGlvbnNwZWMtY2xhc3M+CiAgICAgICAgICAgICAgICAgICAgIDwvYWN0aXZhdGlvbnNwZWM+CiAgICAgICAgICAgICAgICAgPC9tZXNzYWdlbGlzdGVuZXI+Ci0gICAgICAgICAgICA8L21lc3NhZ2VhZGFwdGVyPiAgICAgICAgICAKKyAgICAgICAgICAgIDwvbWVzc2FnZWFkYXB0ZXI+CiAgICAgICAgIDwvaW5ib3VuZC1yZXNvdXJjZWFkYXB0ZXI+CiAgICAgICAgIDxhZG1pbm9iamVjdD4KICAgICAgICAgICA8YWRtaW5vYmplY3QtaW50ZXJmYWNlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC9hZG1pbm9iamVjdC1pbnRlcmZhY2U+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2J1aWxkLnhtbAppbmRleCAyYjc3NDg5Li43ODM5OTFkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9idWlsZC54bWwKQEAgLTMwLDggKzMwLDggQEAKIAogICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iaW5pdC1jb21tb24iID4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0iYnVpbGQuY2xhc3Nlcy5kaXIiIHZhbHVlPSJjbGFzc2VzIiAvPgotCTxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjb25uZWN0b3IiIC8+CisgICAgPHBhcmFtIG5hbWU9ImJ1aWxkLmNsYXNzZXMuZGlyIiB2YWx1ZT0iY2xhc3NlcyIgLz4KKyAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY29ubmVjdG9yIiAvPgogICAgIDwvYW50Y2FsbD4KICAgICA8amFyIGphcmZpbGU9Ii4uL2dlbmVyaWMtcmEuamFyIiBiYXNlZGlyPSJjbGFzc2VzIgogICAgICAgICAgaW5jbHVkZXM9ImNvbm5lY3Rvci8qLmNsYXNzIiAvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhCmluZGV4IDU1NTMzZDQuLmY1OWIyYjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEKQEAgLTE4LDcgKzE4LDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBDb250cm9scyB7CiAgICAgcHVibGljIHN0YXRpYyBPYmplY3QgcmVhZHlMb2NrID0gbmV3IE9iamVjdCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEKaW5kZXggNjU4MjMzZS4uZDczYzg2MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgRGVsaXZlcnlXb3JrIGltcGxlbWVudHMgV29yayB7CiAKQEAgLTM2LDcgKzM2LDcgQEAKICAgICBwcml2YXRlIFN0cmluZyBvcDsKICAgICBwcml2YXRlIGJvb2xlYW4ga2VlcENvdW50OwogICAgIHByaXZhdGUgc3RhdGljIGludCBjb3VudGVyID0gMDsKLSAgICAKKwogICAgIHB1YmxpYyBEZWxpdmVyeVdvcmsoTWVzc2FnZUVuZHBvaW50IGVwLCBpbnQgbnVtT2ZNZXNzYWdlcywgU3RyaW5nIG9wKSB7CiAgICAgICAgIHRoaXMuZXAgPSBlcDsKICAgICAgICAgdGhpcy5udW0gPSBudW1PZk1lc3NhZ2VzOwpAQCAtNDQsNyArNDQsNyBAQAogICAgICAgICB0aGlzLmtlZXBDb3VudCA9IGZhbHNlOwogICAgIH0KIAotICAgIHB1YmxpYyBEZWxpdmVyeVdvcmsoTWVzc2FnZUVuZHBvaW50IGVwLCBpbnQgbnVtT2ZNZXNzYWdlcywgCisgICAgcHVibGljIERlbGl2ZXJ5V29yayhNZXNzYWdlRW5kcG9pbnQgZXAsIGludCBudW1PZk1lc3NhZ2VzLAogICAgICAgICAgICAgU3RyaW5nIG9wLCBib29sZWFuIGtlZXBDb3VudCkgewogICAgICAgICB0aGlzLmVwID0gZXA7CiAgICAgICAgIHRoaXMubnVtID0gbnVtT2ZNZXNzYWdlczsKQEAgLTU1LDcgKzU1LDcgQEAKICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CiAKICAgICAgICAgZGVidWcoIkVOVEVSLi4uIik7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAvL01ldGhvZCBvbk1lc3NhZ2UgPSBnZXRPbk1lc3NhZ2VNZXRob2QoKTsKICAgICAgICAgICAgIC8vZXAuYmVmb3JlRGVsaXZlcnkob25NZXNzYWdlKTsKQEAgLTc4LDExICs3OCwxMSBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvL2VwLmFmdGVyRGVsaXZlcnkoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIkxFQVZFLi4uIik7CiAgICAgfQogCkBAIC05MywxNCArOTMsMTQgQEAKICAgICB9CiAKICAgICBwcml2YXRlIE1ldGhvZCBnZXRPbk1lc3NhZ2VNZXRob2QoKSB7Ci0gICAgICAgIAorCiAgICAgICAgIE1ldGhvZCBvbk1lc3NhZ2VNZXRob2QgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ2xhc3MgbXNnTGlzdGVuZXJDbGFzcyA9IGNvbm5lY3Rvci5NeU1lc3NhZ2VMaXN0ZW5lci5jbGFzczsKICAgICAgICAgICAgIENsYXNzW10gcGFyYW1UeXBlcyA9IHsgamF2YS5sYW5nLlN0cmluZy5jbGFzcyB9OwotICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0gCisgICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPQogICAgICAgICAgICAgICAgIG1zZ0xpc3RlbmVyQ2xhc3MuZ2V0TWV0aG9kKCJvbk1lc3NhZ2UiLCBwYXJhbVR5cGVzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YQppbmRleCAxMDBjYWNlLi5mYTkzZjYzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhCkBAIC0zNiw3ICszNiw3IEBACiAgICAgICAgICAgICAgIGZsYWdUb1N0cmluZyhmbGFncykpOwogICAgIH0KIAotICAgIAorCiAgICAgcHVibGljIHZvaWQgZm9yZ2V0KFhpZCB4aWQpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5mb3JnZXQ6ICIgKyB4aWRUb1N0cmluZyh4aWQpKTsKICAgICB9CkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5wcmVwYXJlOiAiICsgeGlkVG9TdHJpbmcoeGlkKSk7CiAgICAgICAgIHJldHVybiBYQVJlc291cmNlLlhBX09LOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBYaWRbXSByZWNvdmVyKGludCBmbGFnKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2UucmVjb3ZlcjogIiArIGZsYWdUb1N0cmluZyhmbGFnKSk7CiAgICAgICAgIHJldHVybiBudWxsOwpAQCAtNjYsNyArNjYsNyBAQAogICAgIHB1YmxpYyBib29sZWFuIHNldFRyYW5zYWN0aW9uVGltZW91dChpbnQgc2Vjb25kcykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHN0YXJ0KFhpZCB4aWQsIGludCBmbGFncykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLnN0YXJ0OiAiICsgeGlkVG9TdHJpbmcoeGlkKSArICIsIiArCiAgICAgICAgICAgICAgICAgZmxhZ1RvU3RyaW5nKGZsYWdzKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvY29ubmVjdG9yL01lc3NhZ2VzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvY29ubmVjdG9yL01lc3NhZ2VzLmphdmEKaW5kZXggYjViMGYwMi4uNGM5YzAxMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9jb25uZWN0b3IvTWVzc2FnZXMuamF2YQpAQCAtMjEsNyArMjEsNyBAQAogLyoqCiAgKiBjb2xsZWN0aW9uIG9mIG1lc3NhZ2VzLgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgTWVzc2FnZXMgewogCkBAIC01NCw3ICs1NCw3IEBACiAgICAgICAgU3RyaW5nIGNvbW1hbmQgID0gYXJnc1swXTsKICAgICAgICBTdHJpbmcgZGVzdE5hbWUgPSBhcmdzWzFdOwogICAgICAgIFN0cmluZyBtZXNzYWdlICA9IGFyZ3NbMl07Ci0gICAKKwogICAgICAgIGlmICghImFkZCIuZXF1YWxzKGNvbW1hbmQpKSB7CiAgICAgICAgICAgIFN5c3RlbS5leGl0KDEpOwogICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEKaW5kZXggMTA0ODNlZC4uMWQwMmM2MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEKQEAgLTM4LDEzICszOCwxMyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGluaXRpYWxpemUoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6aW5nIHRoZSBDb250cm9scyB0byBmYWxzZToiK3Jlc2V0Q29udHJvbCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6aW5nIHRoZSBDb250cm9scyB0byBmYWxzZToiK3Jlc2V0Q29udHJvbCk7CiAgICAgICAgIGlmIChyZXNldENvbnRyb2wuZXF1YWxzKCJCRUdJTk5JTkciKSkgewogICAgICAgICAgICAgc3luY2hyb25pemVkIChDb250cm9scy5yZWFkeUxvY2spewogICAgICAgICAgICAgICAgIENvbnRyb2xzLmRvbmU9ZmFsc2U7CiAgICAgICAgICAgICB9Ci0JICAgU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6ZWQgdGhlIENvbnRyb2xzIHRvIGZhbHNlIik7Ci0JfQorICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW015QWRtaW5PYmplY3RdIEluaXRpYWxpemVkIHRoZSBDb250cm9scyB0byBmYWxzZSIpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiBkb25lKCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhCmluZGV4IDgxODJlZjUuLjNmY2U1NDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEKQEAgLTI0LDkgKzI0LDkgQEAKICAqIHNvIHRoYXQgdGhlIGFwcCBzZXJ2ZXIgY2FuIGluc3RhbnRpYXRlIGFuZCBjb25maWd1cmUKICAqIGl0IGF0IHRoZSBydW50aW1lLgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCi1wdWJsaWMgY2xhc3MgU2ltcGxlQWN0aXZhdGlvblNwZWMgCitwdWJsaWMgY2xhc3MgU2ltcGxlQWN0aXZhdGlvblNwZWMKICAgICBpbXBsZW1lbnRzIEFjdGl2YXRpb25TcGVjLCBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7CiAKICAgICBwcml2YXRlIFN0cmluZyBkZXN0aW5hdGlvbk5hbWU7CkBAIC00Myw3ICs0Myw3IEBACiAgICAgcHVibGljIFN0cmluZyBnZXREZXN0aW5hdGlvbk5hbWUgKCkgewogICAgICAgICByZXR1cm4gdGhpcy5kZXN0aW5hdGlvbk5hbWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0RGVzdGluYXRpb25OYW1lIChTdHJpbmcgbmFtZSkgewogICAgICAgICBkZWJ1Zygic2V0RGVzdGluYXRpb25OYW1lKCkgY2FsbGVkLi4uIG5hbWUgPSAiICsgbmFtZSk7CiAgICAgICAgIHRoaXMuZGVzdGluYXRpb25OYW1lID0gbmFtZTsKQEAgLTUyLDcgKzUyLDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldERlc3RpbmF0aW9uVHlwZSgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZGVzdGluYXRpb25UeXBlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldERlc3RpbmF0aW9uVHlwZSAoU3RyaW5nIHR5cGUpIHsKICAgICAgICAgZGVidWcoInNldERlc3RpbmF0aW9uVHlwZSAoKSBjYWxsZWQuLi4gdHlwZSA9ICIgKyB0eXBlKTsKICAgICAgICAgdGhpcy5kZXN0aW5hdGlvblR5cGU9IHR5cGU7CkBAIC02MSw3ICs2MSw3IEBACiAgICAgcHVibGljIFN0cmluZyBnZXRUZXN0UHJvcCgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMudGVzdFByb3A7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0VGVzdFByb3AgKFN0cmluZyB0ZXN0UHJvcCkgewogICAgICAgICBkZWJ1Zygic2V0VGVzdFByb3AgKCkgY2FsbGVkLi4uIHRlc3RQcm9wID0gIiArIHRlc3RQcm9wKTsKICAgICAgICAgdGhpcy50ZXN0UHJvcCA9IHRlc3RQcm9wOwpAQCAtNzAsNyArNzAsNyBAQAogICAgIHB1YmxpYyBJbnRlZ2VyIGdldFRlc3RJbnRlZ2VyUHJvcCgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMudGVzdEludGVnZXJQcm9wOwogICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFRlc3RJbnRlZ2VyUHJvcCAoSW50ZWdlciB0ZXN0UHJvcDEpIHsKICAgICAgICAgZGVidWcoInNldFRlc3RJbnRlZ2VyUHJvcCAoKSBjYWxsZWQuLi4gdGVzdEludGVnZXJQcm9wID0gIiArIHRlc3RQcm9wMSk7CiAgICAgICAgIHRoaXMudGVzdEludGVnZXJQcm9wID0gdGVzdFByb3AxOwpAQCAtOTQsNyArOTQsNyBAQAogCiAgICAgICB9CiAKLSAgIH0gCisgICB9CiAKICAgICBwcml2YXRlIHZvaWQgZGVidWcgKFN0cmluZyBtZXNzYWdlKQogICAgIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEKaW5kZXggNmU1MzUzZi4uM2RmNzA3MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEKQEAgLTQwLDkgKzQwLDkgQEAKIC8qKgogICogVGhpcyBpcyBhIHNhbXBsZSByZXNvdXJjZSBhZGFwdGVyCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KLXB1YmxpYyBjbGFzcyBTaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsIAorcHVibGljIGNsYXNzIFNpbXBsZVJlc291cmNlQWRhcHRlckltcGwKIGltcGxlbWVudHMgUmVzb3VyY2VBZGFwdGVyLCBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7CiAKICAgICBwcml2YXRlIEJvb3RzdHJhcENvbnRleHQgY3R4OwpAQCAtNTgsNyArNTgsNyBAQAogCiAgICAgcHVibGljIHZvaWQKICAgICBzdGFydChCb290c3RyYXBDb250ZXh0IGN0eCkgdGhyb3dzIFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uewotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiMDAxLiBTaW1wbGUgUkEgc3RhcnQuLi4iKTsKIAogICAgICAgICB0aGlzLmN0eCA9IGN0eDsKQEAgLTY4LDIxICs2OCwyMSBAQAogCiAgICAgICAgIC8vdGVzdGluZyBjcmVhdCB0aW1lcgogICAgICAgICBUaW1lciB0aW1lciA9IG51bGw7Ci0JICB0cnl7Ci0JICAgICAgdGltZXIgPSBjdHguY3JlYXRlVGltZXIoKTsKLQkgIH0gY2F0Y2goVW5hdmFpbGFibGVFeGNlcHRpb24gdWUpIHsKLQkgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIik7Ci0JICAgICAgdGhyb3cgbmV3IFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uKCJFcnJvciBmb3JtIGJvb3RzdHJhcCIpOwotCSAgfQorICAgICAgdHJ5eworICAgICAgICAgIHRpbWVyID0gY3R4LmNyZWF0ZVRpbWVyKCk7CisgICAgICB9IGNhdGNoKFVuYXZhaWxhYmxlRXhjZXB0aW9uIHVlKSB7CisgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFcnJvciIpOworICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbigiRXJyb3IgZm9ybSBib290c3RyYXAiKTsKKyAgICAgIH0KICAgICAgICAgZGVidWcoIjAwNC4gU2ltcGxlIFJBIHN0YXJ0Li4uIik7CiAKICAgICAgICAgICB0cnkgewotICAgICAgICAgIAorCiAgICAgICAgICAgWEFUZXJtaW5hdG9yIHhhID0gY3R4LmdldFhBVGVybWluYXRvcigpOwotICAgICAgICAgIAorCiAgICAgICAgICAgWGlkIHhpZDEgPSBuZXcgWElEKCk7CiAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgWElEMSA9ICIgKyB4aWQxKTsKLSAgICAgICAgICAKKwogICAgICAgICAgIEV4ZWN1dGlvbkNvbnRleHQgZWMgPSBuZXcgRXhlY3V0aW9uQ29udGV4dCgpOwogICAgICAgICAgIGVjLnNldFhpZCh4aWQxKTsKICAgICAgICAgICBlYy5zZXRUcmFuc2FjdGlvblRpbWVvdXQoNSoxMDAwKTsgLy81IHNlY29uZHMKQEAgLTkyLDE0ICs5MiwxNCBAQAogICAgICAgICAgIHdtLmRvV29yayhvdXR3LCAxKjEwMDAsIGVjLCBudWxsKTsKICAgICAgICAgICB4YS5jb21taXQoeGlkMSwgdHJ1ZSk7CiAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgCisKICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBleCA9ICIgKyBleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgIHhhLnJvbGxiYWNrKHhpZDEpOwogICAgICAgICAgIH0KLSAgICAgICAgICAKKwogICAgICAgICAgIFhpZCB4aWQyID0gbmV3IFhJRCgpOwogICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFhJRDIgPSAiICsgeGlkMik7Ci0gICAgICAgICAgCisKICAgICAgICAgICBlYyA9IG5ldyBFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgICAgICAgZWMuc2V0WGlkKHhpZDIpOwogICAgICAgICAgIGVjLnNldFRyYW5zYWN0aW9uVGltZW91dCg1KjEwMDApOyAvLzUgc2Vjb25kcwpAQCAtMTE2LDcgKzExNiw3IEBACiAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgfQogCi0gICAgICAgIAorCiAgICAgICAgICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgMzsgaSsrKSB7CiAgICAgICAgICAgVGVzdFdNV29yayB3ID0gbmV3IFRlc3RXTVdvcmsoaSwgZmFsc2UpOwogICAgICAgICAgIHRyeSB7CkBAIC0xMjQsNyArMTI0LDcgQEAKICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZBSUw6IENBVUdIVCBleGNlcHRpb24gOiBpID0gIiArIGkpOwogICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAgIH0gCisgICAgICAgICAgfQogICAgICAgICAgIH0KIAogICAgICAgICAgIGZvciAoaW50IGkgPSAzIDsgaSA8IDY7IGkrKykgewpAQCAtMTcyLDcgKzE3Miw3IEBACiAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgfQogICAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIjAwNS4gU2ltcGxlIFJBIHN0YXJ0Li4uIik7CiAgICAgfQogCkBAIC0yMDYsMTMgKzIwNiwxMyBAQAogCiAgICAgcHVibGljIHZvaWQKICAgICBlbmRwb2ludERlYWN0aXZhdGlvbiAoCi0gICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGVuZHBvaW50RmFjdG9yeSwgCisgICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGVuZHBvaW50RmFjdG9yeSwKICAgICAgICAgICAgIEFjdGl2YXRpb25TcGVjIHNwZWMpIHsKICAgICAgICAgZGVidWcgKCJlbmRwb2ludERlYWN0aXZhdGlvbiBjYWxsZWQuLi4iKTsKLSAgICAgICAgCisKICAgICAgICAgKChXb3JrRGlzcGF0Y2hlcikgd29yaykuc3RvcCgpOwogICAgIH0KLSAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldFRlc3ROYW1lKCkgewogICAgICAgICByZXR1cm4gdGVzdE5hbWU7CiAgICAgfQpAQCAtMjI4LDcgKzIyOCw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsXSA9PT4gIiArIG1lc3NhZ2UpOwogICAgIH0KIAotICAgIHB1YmxpYyBYQVJlc291cmNlW10gZ2V0WEFSZXNvdXJjZXMoQWN0aXZhdGlvblNwZWNbXSBzcGVjcykgCisgICAgcHVibGljIFhBUmVzb3VyY2VbXSBnZXRYQVJlc291cmNlcyhBY3RpdmF0aW9uU3BlY1tdIHNwZWNzKQogICAgICAgICB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvY29ubmVjdG9yL1Rlc3RXTVdvcmsuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9jb25uZWN0b3IvVGVzdFdNV29yay5qYXZhCmluZGV4IGJiMDU1MzQuLmRlOTNiYzEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9jb25uZWN0b3IvVGVzdFdNV29yay5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9jb25uZWN0b3IvVGVzdFdNV29yay5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgVGVzdFdNV29yayBpbXBsZW1lbnRzIFdvcmsgewogCkBAIC00Miw4ICs0Miw4IEBACiAgICAgcHVibGljIFRlc3RXTVdvcmsoaW50IGlkLCBib29sZWFuIGlzUm9ndWUpIHsKICAgICAgICAgdGhpcyhpZCwgaXNSb2d1ZSwgZmFsc2UsIG51bGwpOwogICAgIH0KLSAgICAKLSAgICBwdWJsaWMgVGVzdFdNV29yayhpbnQgaWQsIGJvb2xlYW4gaXNSb2d1ZSwgCisKKyAgICBwdWJsaWMgVGVzdFdNV29yayhpbnQgaWQsIGJvb2xlYW4gaXNSb2d1ZSwKICAgICAgICAgICAgIGJvb2xlYW4gZG9OZXN0LCBFeGVjdXRpb25Db250ZXh0IGN0eCkgewogICAgICAgICB0aGlzLmlkID0gaWQ7CiAgICAgICAgIHRoaXMuaXNSb2d1ZSA9IGlzUm9ndWU7CkBAIC03NywxMCArNzcsMTAgQEAKICAgICAgICAgICAgIH0gY2F0Y2ggKFdvcmtFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgICAgICBpZiAoZXguZ2V0RXJyb3JDb2RlKCkuZXF1YWxzKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdvcmtFeGNlcHRpb24uVFhfQ09OQ1VSUkVOVF9XT1JLX0RJU0FMTE9XRUQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsgCisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUEFTUzogQ0FVR0hUIEVYUEVDVEVEID0gIiArIGV4LmdldEVycm9yQ29kZSgpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArIAorICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZBSUw6IENBVUdIVCBVTkVYUEVDVEVEID0gIiArIGV4LmdldEVycm9yQ29kZSgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC05Miw3ICs5Miw3IEBACiAgICAgICAgICAgICAgICAgZWMuc2V0VHJhbnNhY3Rpb25UaW1lb3V0KDUqMTAwMCk7IC8vNSBzZWNvbmRzCiAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKG5lc3RlZFdvcmssIDEqMTAwMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAiRkFJTDogQ0FVR0hUIFVORVhQRUNURUQgPSAiICsgZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhCmluZGV4IGFlYzg5YmUuLjc1ZDc1MzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEKQEAgLTMzLDcgKzMzLDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBXb3JrRGlzcGF0Y2hlciBpbXBsZW1lbnRzIFdvcmsgewogCkBAIC00NCwxMSArNDQsMTEgQEAKICAgICBwcml2YXRlIEFjdGl2YXRpb25TcGVjIHNwZWM7CiAgICAgcHJpdmF0ZSBXb3JrTWFuYWdlciB3bTsKICAgICBwcml2YXRlIFhBVGVybWluYXRvciB4YTsKLSAgICAKKwogICAgIHB1YmxpYyBXb3JrRGlzcGF0Y2hlcigKICAgICAgICAgICAgIFN0cmluZyBpZCwKICAgICAgICAgICAgIEJvb3RzdHJhcENvbnRleHQgY3R4LAotICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBmYWN0b3J5LCAKKyAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZmFjdG9yeSwKICAgICAgICAgICAgIEFjdGl2YXRpb25TcGVjIHNwZWMpIHsKICAgICAgICAgdGhpcy5pZCAgICAgID0gaWQ7CiAgICAgICAgIHRoaXMuY3R4ICAgICA9IGN0eDsKQEAgLTYxLDcgKzYxLDcgQEAKICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CiAKICAgICAgICAgZGVidWcoIkVOVEVSLi4uIik7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKENvbnRyb2xzLnJlYWR5TG9jaykgewogICAgICAgICAgICAgICAgIGRlYnVnKCJXQUlULi4uIik7CkBAIC04MywyNiArODMsMjYgQEAKICAgICAgICAgICAgIHRyeSB7CiAKICAgICAgICAgICAgICAgICBNZXRob2Qgb25NZXNzYWdlID0gZ2V0T25NZXNzYWdlTWV0aG9kKCk7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpc0RlbGl2ZXJ5VHJhbnNhY3RlZCA9ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlzRGVsaXZlcnlUcmFuc2FjdGVkID0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3J5LmlzRGVsaXZlcnlUcmFuc2FjdGVkKG9uTWVzc2FnZSkpOwogCiAgICAgICAgICAgICAgICAgaWYgKCFmYWN0b3J5LmlzRGVsaXZlcnlUcmFuc2FjdGVkKG9uTWVzc2FnZSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy9NZXNzYWdlRW5kcG9pbnQgZXAgPSBmYWN0b3J5LmNyZWF0ZUVuZHBvaW50KG51bGwpOwotICAgICAgICAgICAgICAgICAgICAvL0RlbGl2ZXJ5V29yayBkID0gbmV3IERlbGl2ZXJ5V29yaygiTk9fVFgiLCBlcCk7IAorICAgICAgICAgICAgICAgICAgICAvL0RlbGl2ZXJ5V29yayBkID0gbmV3IERlbGl2ZXJ5V29yaygiTk9fVFgiLCBlcCk7CiAgICAgICAgICAgICAgICAgICAgIC8vd20uZG9Xb3JrKGQsIDAsIG51bGwsIG51bGwpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vTWVzc2FnZUVuZHBvaW50IGVwID0gZmFjdG9yeS5jcmVhdGVFbmRwb2ludChudWxsKTsKICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50IGVwID0gZmFjdG9yeS5jcmVhdGVFbmRwb2ludChuZXcgRmFrZVhBUmVzb3VyY2UoKSk7CiAgICAgICAgICAgICAgICAgICAgIGludCBudW1PZk1lc3NhZ2VzID0gNTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy9pbXBvcnRpbmcgdHJhbnNhY3Rpb24KIAogICAgICAgICAgICAgICAgICAgICAvL3dyaXRlL2NvbW1pdAogICAgICAgICAgICAgICAgICAgICBFeGVjdXRpb25Db250ZXh0IGVjID0gc3RhcnRUeCgpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiU3RhcnQgVFggLSAiICsgZWMuZ2V0WGlkKCkpOwogCi0gICAgICAgICAgICAgICAgICAgIERlbGl2ZXJ5V29yayB3ID0gCisgICAgICAgICAgICAgICAgICAgIERlbGl2ZXJ5V29yayB3ID0KICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEZWxpdmVyeVdvcmsoZXAsIG51bU9mTWVzc2FnZXMsICJXUklURSIpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIHRydWUpOwpAQCAtMTEwLDcgKzExMCw3IEBACiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJET05FIFdSSVRFIFRPIERCIik7CiAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xzLmV4cGVjdGVkUmVzdWx0cyA9IG51bU9mTWVzc2FnZXM7CiAgICAgICAgICAgICAgICAgICAgIG5vdGlmeUFuZFdhaXQoKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy9kZWxldGUvcm9sbGJhY2sKICAgICAgICAgICAgICAgICAgICAgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7CkBAIC0xMjYsNyArMTI2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgLy9kZWxldGUvY29tbWl0CiAgICAgICAgICAgICAgICAgICAgIGVjID0gc3RhcnRUeCgpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiU3RhcnQgVFggLSAiICsgZWMuZ2V0WGlkKCkpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICB3ID0gbmV3IERlbGl2ZXJ5V29yayhlcCwgbnVtT2ZNZXNzYWdlcywgIkRFTEVURSIpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIHRydWUpOwpAQCAtMTUwLDcgKzE1MCw3IEBACiAgICAgICAgICAgICAgICAgICAgIC8vZGVsZXRlL2NvbW1pdAogICAgICAgICAgICAgICAgICAgICBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgdyA9IG5ldyBEZWxpdmVyeVdvcmsoZXAsIG51bU9mTWVzc2FnZXMsICJERUxFVEUiKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgeGEuY29tbWl0KGVjLmdldFhpZCgpLCB0cnVlKTsKQEAgLTE5NSw3ICsxOTUsNyBAQAogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBpZiAoWEFSZXNvdXJjZS5YQV9PSyA9PSB4YS5wcmVwYXJlKGVjLmdldFhpZCgpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgeGEuY29tbWl0KGVjLmdldFhpZCgpLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiWEEgUFJFUEFSRS9DT01NSVQuIERPTkUgV1JJVEUgVE8gREIgIik7CkBAIC0yMDcsMTkgKzIwNywxOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMuZXhwZWN0ZWRSZXN1bHRzID0gMzsKICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeUFuZFdhaXQoKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvL2RlbGV0ZSBhbGwuCiAgICAgICAgICAgICAgICAgICAgIGVjID0gc3RhcnRUeCgpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiU3RhcnQgVFggLSAiICsgZWMuZ2V0WGlkKCkpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICB3ID0gbmV3IERlbGl2ZXJ5V29yayhlcCwgMSwgIkRFTEVURV9BTEwiKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgeGEuY29tbWl0KGVjLmdldFhpZCgpLCB0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIkRPTkUgREVMRVRFIEFMTCBGUk9NIERCIik7CiAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xzLmV4cGVjdGVkUmVzdWx0cyA9IDA7CiAgICAgICAgICAgICAgICAgICAgIG5vdGlmeUFuZFdhaXQoKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgZG9uZSgpOwogICAgICAgICAgICAgICAgIH0KIApAQCAtMjQ2LDcgKzI0Niw3IEBACiAgICAgICAgICAgICAgICAgZG9uZSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCJMRUFWRS4uLiIpOwogICAgIH0KIApAQCAtMjYxLDE0ICsyNjEsMTQgQEAKICAgICB9CiAKICAgICBwdWJsaWMgTWV0aG9kIGdldE9uTWVzc2FnZU1ldGhvZCgpIHsKLSAgICAgICAgCisKICAgICAgICAgTWV0aG9kIG9uTWVzc2FnZU1ldGhvZCA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDbGFzcyBtc2dMaXN0ZW5lckNsYXNzID0gY29ubmVjdG9yLk15TWVzc2FnZUxpc3RlbmVyLmNsYXNzOwogICAgICAgICAgICAgQ2xhc3NbXSBwYXJhbVR5cGVzID0geyBqYXZhLmxhbmcuU3RyaW5nLmNsYXNzIH07Ci0gICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPSAKKyAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9CiAgICAgICAgICAgICAgICAgbXNnTGlzdGVuZXJDbGFzcy5nZXRNZXRob2QoIm9uTWVzc2FnZSIsIHBhcmFtVHlwZXMpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQpAQCAtMjkxLDEzICsyOTEsMTMgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIC8vU2xlZXAgZm9yIDUgc2Vjb25kcwogICAgICAgICAgICAgLy9UaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDUqMTAwMCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgc3luY2hyb25pemVkKENvbnRyb2xzLnJlYWR5TG9jaykgewogICAgICAgICAgICAgICAgIC8vTm90aWZ5IHRoZSBjbGllbnQgdG8gY2hlY2sgdGhlIHJlc3VsdHMKLSAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2subm90aWZ5KCk7IAotICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay5ub3RpZnkoKTsKKwogICAgICAgICAgICAgICAgIC8vV2FpdCB1bnRpbCByZXN1bHRzIGFyZSB2ZXJpZmllZCBieSB0aGUgY2xpZW50Ci0gICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLndhaXQoKTsgCisgICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLndhaXQoKTsKIAogICAgICAgICAgICAgICAgIGlmIChzdG9wKSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhCmluZGV4IDBjYjc3YjIuLjJiZWExMjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YQpAQCAtMzEsOCArMzEsOCBAQAogICAgIHB1YmxpYyBpbnQgYnJhbmNoUXVhbGlmaWVyOwogICAgIHB1YmxpYyBpbnQgZ2xvYmFsVHhJRDsKIAotICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhHVFJJRFNJWkU9IDY0OyAKLSAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYQlFVQUxTSVpFPSA2NDsgCisgICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEdUUklEU0laRT0gNjQ7CisgICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEJRVUFMU0laRT0gNjQ7CiAKICAgICBwdWJsaWMgWElEKCkgewogICAgICAgICBpbnQgZm9vID0gSUQrKzsKQEAgLTUwLDEwICs1MCwxMCBAQAogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgICAgICAgICAgICAgICAgLy8gSXQgY2FuJ3QgYmUgZXF1YWwKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBvdGhlciA9IChYSUQpbzsgICAgICAgICAgICAgICAgICAgLy8gVGhlIG90aGVyIFhJRCwgbm93IHByb3Blcmx5IGNhc3QKLSAgICAgICAgCi0gICAgICAgIGlmICh0aGlzLmZvcm1hdElEID09IG90aGVyLmZvcm1hdElEIAorCisgICAgICAgIGlmICh0aGlzLmZvcm1hdElEID09IG90aGVyLmZvcm1hdElECiAgICAgICAgICAgICAgICAgJiYgdGhpcy5icmFuY2hRdWFsaWZpZXIgPT0gb3RoZXIuYnJhbmNoUXVhbGlmaWVyCiAgICAgICAgICAgICAgICAgJiYgdGhpcy5nbG9iYWxUeElEID09IG90aGVyLmdsb2JhbFR4SUQpIHsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtOTMsNyArOTMsNyBAQAogICAgICAgICAgICAgICAgICJmb3JtYXRJRCgiICAgICArIGZvcm1hdElEICAgICArICIpLCAiICsKICAgICAgICAgICAgICAgICAiYnJhbmNoUXVhbGlmaWVyICgiICsgYnJhbmNoUXVhbGlmaWVyICsgIiksICIgKwogICAgICAgICAgICAgICAgICJnbG9iYWxUeElEKCIgKyBnbG9iYWxUeElEICsgIil9Iik7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBzOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9hcHAvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9hcHAvYnVpbGQueG1sCmluZGV4IGNkMGQxOTMuLjY3Yjk4MjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUvYXBwL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L2FwcC9idWlsZC54bWwKQEAgLTM2LDE2ICszNiwxNiBAQAogICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iaW5pdC1jb21tb24sIGNsZWFuLWNvbW1vbiI+CiAgICA8YW50IGRpcj0ic3JjIiBpbmhlcml0QWxsPSJmYWxzZSIgdGFyZ2V0PSJhbGwiLz4KICAgIDxhbnRjYWxsIHRhcmdldD0iZWFyLWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJzaW1wbGVtZGIiLz4KLQk8cGFyYW0gbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIi8+CisgICAgPHBhcmFtIG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJzaW1wbGVtZGIiLz4KKyAgICA8cGFyYW0gbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIi8+CiAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0ic2V0dXBKZGJjIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtY29ucG9vbC1jb25uZWN0b3IiPgotCSA8cGFyYW0gbmFtZT0iZGIuY2xhc3MiIHZhbHVlPSJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuQ2xpZW50WEFEYXRhU291cmNlIi8+CisgICAgIDxwYXJhbSBuYW1lPSJkYi5jbGFzcyIgdmFsdWU9Im9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnRYQURhdGFTb3VyY2UiLz4KICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtcG9pbnRiYXNlLXBvb2wxIi8+Ci0JIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLnR5cGUiIHZhbHVlPSJqYXZheC5zcWwuWEFEYXRhU291cmNlIi8+CisgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLnR5cGUiIHZhbHVlPSJqYXZheC5zcWwuWEFEYXRhU291cmNlIi8+CiAgICAgICA8L2FudGNhbGw+CiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KQEAgLTU1LDcgKzU1LDcgQEAKIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb25uZWN0b3IiPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJjcmVhdGVkYi5zcWwiLz4KLSAgICAgIDwvYW50Y2FsbD4JCisgICAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0idW5zZXRKZGJjIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwKaW5kZXggNGJkY2M2Zi4uMzIzYzBlYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9hcHAvc3JjL01FVEEtSU5GL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUvYXBwL3NyYy9NRVRBLUlORi9lamItamFyLnhtbApAQCAtOTEsOCArOTEsOCBAQAogICAgICAgICA8cmVzLXNoYXJpbmctc2NvcGU+U2hhcmVhYmxlPC9yZXMtc2hhcmluZy1zY29wZT4KICAgICAgIDwvcmVzb3VyY2UtcmVmPgogICAgICAgPHJlc291cmNlLWVudi1yZWY+Ci0JPHJlc291cmNlLWVudi1yZWYtbmFtZT5laXMvdGVzdEFkbWluPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+Ci0JPHJlc291cmNlLWVudi1yZWYtdHlwZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvcmVzb3VyY2UtZW52LXJlZi10eXBlPgorICAgIDxyZXNvdXJjZS1lbnYtcmVmLW5hbWU+ZWlzL3Rlc3RBZG1pbjwvcmVzb3VyY2UtZW52LXJlZi1uYW1lPgorICAgIDxyZXNvdXJjZS1lbnYtcmVmLXR5cGU+Y29ubmVjdG9yLk15QWRtaW5PYmplY3Q8L3Jlc291cmNlLWVudi1yZWYtdHlwZT4KICAgICAgIDwvcmVzb3VyY2UtZW52LXJlZj4KICAgICAgIDxzZWN1cml0eS1pZGVudGl0eT4KICAgICAgICAgPHVzZS1jYWxsZXItaWRlbnRpdHkvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9hcHAvc3JjL01FVEEtSU5GL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUvYXBwL3NyYy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwKaW5kZXggMTE0NmE1YS4uMGE3ZTBkYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9hcHAvc3JjL01FVEEtSU5GL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCkBAIC0zMyw3ICszMyw3IEBACiAgICAgICAgICAgICBUZXN0SW50ZWdlclByb3AKICAgICAgICAgICA8L2FjdGl2YXRpb24tY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgPGFjdGl2YXRpb24tY29uZmlnLXByb3BlcnR5LXZhbHVlPgotICAgICAgICAgICAgMiAKKyAgICAgICAgICAgIDIKICAgICAgICAgICA8L2FjdGl2YXRpb24tY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICA8L2FjdGl2YXRpb24tY29uZmlnLXByb3BlcnR5PgogICAgICAgICA8L2FjdGl2YXRpb24tY29uZmlnPgpAQCAtODUsNyArODUsNyBAQAogICAgICAgPC9yZXNvdXJjZS1yZWY+CiAgICAgICA8cmVzb3VyY2UtZW52LXJlZj4KICAgICAgICAgPHJlc291cmNlLWVudi1yZWYtbmFtZT5laXMvdGVzdEFkbWluPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+Ci0JPGpuZGktbmFtZT5laXMvdGVzdEFkbWluPC9qbmRpLW5hbWU+CisgICAgPGpuZGktbmFtZT5laXMvdGVzdEFkbWluPC9qbmRpLW5hbWU+CiAgICAgICA8L3Jlc291cmNlLWVudi1yZWY+CiAgICAgICA8Z2VuLWNsYXNzZXMvPgogICAgIDwvZWpiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9hcHAvc3JjL2JlYW5zL01lc3NhZ2VDaGVja2VyRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L2FwcC9zcmMvYmVhbnMvTWVzc2FnZUNoZWNrZXJFSkIuamF2YQppbmRleCBiNTBkN2U0Li41NDI5ZWE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L2FwcC9zcmMvYmVhbnMvTWVzc2FnZUNoZWNrZXJFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L2FwcC9zcmMvYmVhbnMvTWVzc2FnZUNoZWNrZXJFSkIuamF2YQpAQCAtNDMsNyArNDMsNyBAQAogCiAgICAgcHVibGljIE1lc3NhZ2VDaGVja2VyRUpCKCkge30KIAotICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIAorICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpCiAgICAgICAgIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImJlYW4gY3JlYXRlZCIpOwogICAgICAgICBoZWxkQ29uID0gbnVsbDsKQEAgLTcxLDExICs3MSwxMSBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgc3luY2hyb25pemVkIChDb250cm9scy5nZXRMb2NrT2JqZWN0KCkpIHsKICAgICAgICAgICAgICAgICAvL1RlbGwgdGhlIHJlc291cmNlIGFkYXB0ZXIgdGhlIGNsaWVudCBpcyByZWFkeSB0byBydW4KLSAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkubm90aWZ5QWxsKCk7IAotICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIENvbnRyb2xzLmdldExvY2tPYmplY3QoKS5ub3RpZnlBbGwoKTsKKwogICAgICAgICAgICAgICAgIGRlYnVnKCJOT1RJRklFRC4uLiBTVEFSVCBXQUlUSU5HIik7CiAgICAgICAgICAgICAgICAgLy9XYWl0IHVudGlsIGJlaW5nIHRvbGQgdG8gcmVhZCBmcm9tIHRoZSBkYXRhYmFzZQotICAgICAgICAgICAgICAgIENvbnRyb2xzLmdldExvY2tPYmplY3QoKS53YWl0KCk7IAorICAgICAgICAgICAgICAgIENvbnRyb2xzLmdldExvY2tPYmplY3QoKS53YWl0KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CkBAIC04MywyMiArODMsMjIgQEAKICAgICB9CiAKICAgICBwdWJsaWMgaW50IGdldE1lc3NhZ2VDb3VudCgpIHsKLQl0cnkgeworICAgIHRyeSB7CiAgICAgICAgICAgICBDb25uZWN0aW9uIGNvbiA9IGdldEZyZXNoQ29ubmVjdGlvbigpOwogICAgICAgICAgICAgaW50IGNvdW50MSA9IGdldENvdW50KGNvbik7CiAgICAgICAgICAgICBjb24uY2xvc2UoKTsKLSAgICAgICAgICAgIAotCSAgICAvKgorCisgICAgICAgIC8qCiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQoQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpKSB7CiAgICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLm5vdGlmeSgpOwogICAgICAgICAgICAgfQotCSAgICAqLwotICAgICAgICAgICAgICAgIAorICAgICAgICAqLworCiAgICAgICAgICAgICByZXR1cm4gY291bnQxOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLm91dCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwotCX0KKyAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSBpbnQgZ2V0Q291bnQoQ29ubmVjdGlvbiBjb24pIHRocm93cyBTUUxFeGNlcHRpb24gewpAQCAtMTI0LDEwICsxMjQsMTAgQEAKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIHVzZXIgPSAoU3RyaW5nKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvdXNlciIpOwogICAgICAgICAgICAgcGFzc3dvcmQgPSAoU3RyaW5nKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvcGFzc3dvcmQiKTsKLQkgICAgQ29udHJvbHMgPSAoTXlBZG1pbk9iamVjdCkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2Vpcy90ZXN0QWRtaW4iKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDQUxMSU5HIElOSVRJTElaRSBdXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXSIpOwotCSAgICBDb250cm9scy5pbml0aWFsaXplKCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ0FMTEVEIElOSVRJTElaRSBdXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXSIpOworICAgICAgICBDb250cm9scyA9IChNeUFkbWluT2JqZWN0KSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWlzL3Rlc3RBZG1pbiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNBTExJTkcgSU5JVElMSVpFIF1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dIik7CisgICAgICAgIENvbnRyb2xzLmluaXRpYWxpemUoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDQUxMRUQgSU5JVElMSVpFIF1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dIik7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KQEAgLTE2Miw3ICsxNjIsNyBAQAogICAgICAgICAgICAgZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKICAgICAgICAgICAgIGRlYnVnKCJHZXQgSkRCQyBjb25uZWN0aW9uLCBhdXRvIHNpZ24gb24iKTsKICAgICAgICAgICAgIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoY29uICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gY29uOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTE3Myw3ICsxNzMsNyBAQAogICAgICAgICAgICAgdGhyb3cgZXgxOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIGNsb3NlQ29ubmVjdGlvbihDb25uZWN0aW9uIGNvbikgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICAgIGlmIChoZWxkQ29uICE9IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUvYXBwL3NyYy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZGFkMjA3Yi4uMGIzOGMxOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogZWpiLWphci54bWw9TUVUQS1JTkYvZWpiLWphci54bWwKIHN1bi1lamItamFyLnhtbD1NRVRBLUlORi9zdW4tZWpiLWphci54bWwKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUvYXBwL3NyYy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L2FwcC9zcmMvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGJiZGVjZmEuLjI0MjgwZDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUvYXBwL3NyYy9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9hcHAvc3JjL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjgsNDUgKzI4LDQ1IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7Ci0gICAgCisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIC8vc3VwZXIoYXJncyk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZG9UZXN0KCkgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJUaGlzIGlzIHRvIHRlc3QgY29ubmVjdG9yIDEuNSAiKwotCSAgICAgICAgICAgICAiY29udHJhY3RzLiIpOwotICAgICAgICAKKyAgICAgICAgICAgICAgICAgImNvbnRyYWN0cy4iKTsKKwogICAgICAgICBTdHJpbmcgcmVzID0gIk5PVCBSVU4iOwotCWRlYnVnKCJkb1Rlc3QoKSBFTlRFUi4uLiIpOworICAgIGRlYnVnKCJkb1Rlc3QoKSBFTlRFUi4uLiIpOwogICAgICAgICBib29sZWFuIHBhc3MgPSBmYWxzZTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJlcyAgPSAiQUxMIFRFU1RTIFBBU1NFRCI7Ci0JICAgIGludCB0ZXN0Q291bnQgPSAxOworICAgICAgICBpbnQgdGVzdENvdW50ID0gMTsKICAgICAgICAgICAgIHdoaWxlICghZG9uZSgpKSB7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBub3RpZnlBbmRXYWl0KCk7CiAgICAgICAgICAgICAgICAgaWYgKCFkb25lKCkpIHsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlJ1bm5pbmcuLi4iKTsKICAgICAgICAgICAgICAgICAgICAgcGFzcyA9IGNoZWNrUmVzdWx0cyhleHBlY3RlZFJlc3VsdHMoKSk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJHb3QgZXhwZWN0ZWQgcmVzdWx0cyA9ICIgKyBwYXNzKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy9kbyBub3QgY29udGludWUgaWYgb25lIHRlc3QgZmFpbGVkCiAgICAgICAgICAgICAgICAgICAgIGlmICghcGFzcykgewogICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gIlNPTUUgVEVTVFMgRkFJTEVEIjsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJJRCBDb25uZWN0b3IgMS41IHRlc3QgLSAiICsgdGVzdENvdW50LCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIklEIENvbm5lY3RvciAxLjUgdGVzdCAtICIgKyB0ZXN0Q291bnQsIHN0YXQuUEFTUyk7Ci0JCSAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotCQl0ZXN0Q291bnQgKys7CisgICAgICAgIHRlc3RDb3VudCArKzsKICAgICAgICAgICAgIH0KIAogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTc2LDE0ICs3NiwxNCBAQAogICAgICAgICB9CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJjb25uZWN0b3IxLjVJRCIpOwogCi0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCJFWElUSU5HLi4uIFNUQVRVUyA9ICIgKyByZXMpOwogICAgICAgICByZXR1cm4gcmVzOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgYm9vbGVhbiBjaGVja1Jlc3VsdHMoaW50IG51bSkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIE9iamVjdCBvID0gKG5ldyBJbml0aWFsQ29udGV4dCgpKS5sb29rdXAoIk15TWVzc2FnZUNoZWNrZXIiKTsKLSAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkgCisgICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpCiAgICAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cobywgTWVzc2FnZUNoZWNrZXJIb21lLmNsYXNzKTsKICAgICAgICAgTWVzc2FnZUNoZWNrZXIgY2hlY2tlciA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgIGludCByZXN1bHQgPSBjaGVja2VyLmdldE1lc3NhZ2VDb3VudCgpOwpAQCAtOTIsNyArOTIsNyBAQAogCiAgICAgcHJpdmF0ZSBib29sZWFuIGRvbmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgT2JqZWN0IG8gPSAobmV3IEluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiTXlNZXNzYWdlQ2hlY2tlciIpOwotICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKSAKKyAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkKICAgICAgICAgICAgIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvLCBNZXNzYWdlQ2hlY2tlckhvbWUuY2xhc3MpOwogICAgICAgICBNZXNzYWdlQ2hlY2tlciBjaGVja2VyID0gaG9tZS5jcmVhdGUoKTsKICAgICAgICAgcmV0dXJuIGNoZWNrZXIuZG9uZSgpOwpAQCAtMTAwLDcgKzEwMCw3IEBACiAKICAgICBwcml2YXRlIGludCBleHBlY3RlZFJlc3VsdHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgT2JqZWN0IG8gPSAobmV3IEluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiTXlNZXNzYWdlQ2hlY2tlciIpOwotICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKSAKKyAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkKICAgICAgICAgICAgIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvLCBNZXNzYWdlQ2hlY2tlckhvbWUuY2xhc3MpOwogICAgICAgICBNZXNzYWdlQ2hlY2tlciBjaGVja2VyID0gaG9tZS5jcmVhdGUoKTsKICAgICAgICAgcmV0dXJuIGNoZWNrZXIuZXhwZWN0ZWRSZXN1bHRzKCk7CkBAIC0xMDgsNyArMTA4LDcgQEAKIAogICAgIHByaXZhdGUgdm9pZCBub3RpZnlBbmRXYWl0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIE9iamVjdCBvID0gKG5ldyBJbml0aWFsQ29udGV4dCgpKS5sb29rdXAoIk15TWVzc2FnZUNoZWNrZXIiKTsKLSAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkgCisgICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpCiAgICAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cobywgTWVzc2FnZUNoZWNrZXJIb21lLmNsYXNzKTsKICAgICAgICAgTWVzc2FnZUNoZWNrZXIgY2hlY2tlciA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgIGNoZWNrZXIubm90aWZ5QW5kV2FpdCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9hcHAvc3JjL21kYi9NeU1lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L2FwcC9zcmMvbWRiL015TWVzc2FnZUJlYW4uamF2YQppbmRleCBiN2Q0NDNiLi5jZDlmMTA4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L2FwcC9zcmMvbWRiL015TWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L2FwcC9zcmMvbWRiL015TWVzc2FnZUJlYW4uamF2YQpAQCAtMjksNDEgKzI5LDQxIEBACiAKIC8qKgogICovCi1wdWJsaWMgY2xhc3MgTXlNZXNzYWdlQmVhbiBpbXBsZW1lbnRzIE1lc3NhZ2VEcml2ZW5CZWFuLCAKK3B1YmxpYyBjbGFzcyBNeU1lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZURyaXZlbkJlYW4sCiAgICAgICAgIE15TWVzc2FnZUxpc3RlbmVyIHsKIAogICAgIHByaXZhdGUgdHJhbnNpZW50IE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYyA9IG51bGw7CiAgICAgcHJpdmF0ZSBDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3Rvciwgd2hpY2ggaXMgcHVibGljIGFuZCB0YWtlcyBubyBhcmd1bWVudHMuCiAgICAgICovCiAgICAgcHVibGljIE15TWVzc2FnZUJlYW4oKSB7fQogCiAgICAgLyoqCi0gICAgICogc2V0TWVzc2FnZURyaXZlbkNvbnRleHQgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCAKLSAgICAgKiBub3QgZmluYWwgb3Igc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCAKKyAgICAgKiBzZXRNZXNzYWdlRHJpdmVuQ29udGV4dCBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0CisgICAgICogbm90IGZpbmFsIG9yIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQKICAgICAgKiB3aXRoIG9uZSBhcmd1bWVudCBvZiB0eXBlIGpha2FydGEuZWpiLk1lc3NhZ2VEcml2ZW5Db250ZXh0LgogICAgICAqCiAgICAgICogQHBhcmFtIG1kYyAgICB0aGUgY29udGV4dCB0byBzZXQKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRNZXNzYWdlRHJpdmVuQ29udGV4dChNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGMpIHsKLQl0aGlzLm1kYyA9IG1kYzsKKyAgICB0aGlzLm1kYyA9IG1kYzsKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBlamJDcmVhdGUgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IgCi0gICAgICogc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCB3aXRoIG5vIAorICAgICAqIGVqYkNyZWF0ZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvcgorICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBubwogICAgICAqIGFyZ3VtZW50cy4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB7IH0KIAogICAgIC8qKgotICAgICAqIG9uTWVzc2FnZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvciAKKyAgICAgKiBvbk1lc3NhZ2UgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IKICAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggb25lIGFyZ3VtZW50CiAgICAgICogb2YgdHlwZSBqYWthcnRhLmptcy5NZXNzYWdlLgogICAgICAqCi0gICAgICogQ2FzdHMgdGhlIGluY29taW5nIE1lc3NhZ2UgdG8gYSBUZXh0TWVzc2FnZSBhbmQgZGlzcGxheXMgCisgICAgICogQ2FzdHMgdGhlIGluY29taW5nIE1lc3NhZ2UgdG8gYSBUZXh0TWVzc2FnZSBhbmQgZGlzcGxheXMKICAgICAgKiB0aGUgdGV4dC4KICAgICAgKgogICAgICAqIEBwYXJhbSBpbk1lc3NhZ2UgICAgdGhlIGluY29taW5nIG1lc3NhZ2UKQEAgLTc0LDcgKzc0LDcgQEAKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgaWYgKGluTWVzc2FnZS5lbmRzV2l0aCgiV1JJVEUiKSkgewotICAgICAgICAgICAgICAgIGRvRGJTdHVmZigiV1JJVEUiLCAKKyAgICAgICAgICAgICAgICBkb0RiU3R1ZmYoIldSSVRFIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGluTWVzc2FnZS5zdWJzdHJpbmcoMCwgaW5NZXNzYWdlLmxhc3RJbmRleE9mKCI6IikpKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5NZXNzYWdlLmVuZHNXaXRoKCJERUxFVEUiKSkgewogICAgICAgICAgICAgICAgIGRvRGJTdHVmZigiREVMRVRFIiwKQEAgLTkwLDEwICs5MCwxMCBAQAogICAgICAgICB9CiAKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBlamJSZW1vdmUgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IgCi0gICAgICogc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCB3aXRoIG5vIAorICAgICAqIGVqYlJlbW92ZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvcgorICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBubwogICAgICAqIGFyZ3VtZW50cy4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7fQpAQCAtMTAzLDYzICsxMDMsNjMgQEAKIAogICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbiA9IG51bGw7CiAgICAgICAgIFN0cmluZyBpZCAgICA9IG1lc3NhZ2Uuc3Vic3RyaW5nKDAsIG1lc3NhZ2UuaW5kZXhPZigiOiIpKTsKLSAgICAgICAgU3RyaW5nIGJvZHkgID0gbWVzc2FnZS5zdWJzdHJpbmcobWVzc2FnZS5pbmRleE9mKCI6IikrMSk7IAorICAgICAgICBTdHJpbmcgYm9keSAgPSBtZXNzYWdlLnN1YnN0cmluZyhtZXNzYWdlLmluZGV4T2YoIjoiKSsxKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoIlJFQUQiLmVxdWFscyhvcCkpIHsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGRlYnVnKCJSZWFkaW5nIHJvdyBmcm9tIGRhdGFiYXNlLi4uIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBDcmVhdGluZyBhIGRhdGFiYXNlIGNvbm5lY3Rpb24KICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvTXlEQiIpOwogICAgICAgICAgICAgICAgICAgZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKICAgICAgICAgICAgICAgICAgIGRlYnVnKCJHZXQgSkRCQyBjb25uZWN0aW9uLCBhdXRvIHNpZ24gb24iKTsKICAgICAgICAgICAgICAgICAgIGRiQ29ubmVjdGlvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICBTdGF0ZW1lbnQgc3RtdCA9IGRiQ29ubmVjdGlvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgIFN0cmluZyBxdWVyeSA9IAorICAgICAgICAgICAgICAgICAgU3RyaW5nIHF1ZXJ5ID0KICAgICAgICAgICAgICAgICAgICJTRUxFQ1QgaWQgZnJvbSBtZXNzYWdlcyB3aGVyZSBpZCA9ICdRUSciOwogICAgICAgICAgICAgICAgICAgUmVzdWx0U2V0IHJlc3VsdHMgPSBzdG10LmV4ZWN1dGVRdWVyeShxdWVyeSk7CiAgICAgICAgICAgICAgICAgICByZXN1bHRzLm5leHQoKTsKLSAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUVEgaGFzIGJhbGFuY2UgIiArIAorICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJRUSBoYXMgYmFsYW5jZSAiICsKICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuZ2V0SW50KCJiYWxhbmNlIikgKyAiIGRvbGxhcnMiKTsKICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuY2xvc2UoKTsKICAgICAgICAgICAgICAgICAgIHN0bXQuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlYWQgb25lIGFjY291bnRcbiIpOwogICAgICAgICAgICAgICAgICovCiAKICAgICAgICAgICAgIH0gZWxzZSBpZiAoIldSSVRFIi5lcXVhbHMob3ApKSB7CiAKICAgICAgICAgICAgICAgICBkZWJ1ZygiSW5zZXJ0aW5nIG9uZSBtZXNzYWdlIGluIHRoZSBkYXRhYmFzZVxuIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIC8vIENyZWF0aW5nIGEgZGF0YWJhc2UgY29ubmVjdGlvbgogICAgICAgICAgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L015REIiKTsKICAgICAgICAgICAgICAgICAvL2RlYnVnKCJMb29rZWQgdXAgRGF0YXNvdXJjZVxuIik7CiAgICAgICAgICAgICAgICAgLy9kZWJ1ZygiR2V0IEpEQkMgY29ubmVjdGlvbiwgYXV0byBzaWduIG9uIik7CiAgICAgICAgICAgICAgICAgZGJDb25uZWN0aW9uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgY3JlYXRlUm93KGlkLCBib2R5LCBkYkNvbm5lY3Rpb24pOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRlZCBvbmUgbWVzc2FnZVxuIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIH0gZWxzZSBpZiAoIkRFTEVURSIuZXF1YWxzKG9wKSkgewotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgZGVidWcoIkRlbGV0aW5nIG9uZSBtZXNzYWdlIGZyb20gdGhlIGRhdGFiYXNlXG4iKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIC8vIENyZWF0aW5nIGEgZGF0YWJhc2UgY29ubmVjdGlvbgogICAgICAgICAgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L015REIiKTsKICAgICAgICAgICAgICAgICAvL2RlYnVnKCJMb29rZWQgdXAgRGF0YXNvdXJjZVxuIik7CiAgICAgICAgICAgICAgICAgLy9kZWJ1ZygiR2V0IEpEQkMgY29ubmVjdGlvbiwgYXV0byBzaWduIG9uIik7CiAgICAgICAgICAgICAgICAgZGJDb25uZWN0aW9uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgZGVsZXRlUm93KGlkLCBkYkNvbm5lY3Rpb24pOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGVsZXRlZCBvbmUgbWVzc2FnZVxuIik7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKCJERUxFVEVfQUxMIi5lcXVhbHMob3ApKSB7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZWJ1ZygiRGVsZXRpbmcgYWxsIG1lc3NhZ2VzIGZyb20gdGhlIGRhdGFiYXNlXG4iKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIC8vIENyZWF0aW5nIGEgZGF0YWJhc2UgY29ubmVjdGlvbgogICAgICAgICAgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L015REIiKTsKICAgICAgICAgICAgICAgICAvL2RlYnVnKCJMb29rZWQgdXAgRGF0YXNvdXJjZVxuIik7CkBAIC0xNzAsNyArMTcwLDcgQEAKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy91bnN1cHBvcnRlZCBvcAogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgfWZpbmFsbHl7CiAgICAgICAgICAgICB0cnl7CiAgICAgICAgICAgICAgICAgZGJDb25uZWN0aW9uLmNsb3NlKCk7CkBAIC0xNzksOSArMTc5LDkgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICBwcml2YXRlIHZvaWQgY3JlYXRlUm93KFN0cmluZyBpZCwgU3RyaW5nIGJvZHksIAotICAgICAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pIAorCisgICAgcHJpdmF0ZSB2b2lkIGNyZWF0ZVJvdyhTdHJpbmcgaWQsIFN0cmluZyBib2R5LAorICAgICAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogCiAgICAgICAgIC8vIENyZWF0ZSByb3cgZm9yIHRoaXMgbWVzc2FnZQpAQCAtMTk3LDkgKzE5Nyw5IEBACiAgICAgICAgIHN0bXQuY2xvc2UoKTsKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgZGVsZXRlUm93KFN0cmluZyBpZCwgamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pIAorICAgIHByaXZhdGUgdm9pZCBkZWxldGVSb3coU3RyaW5nIGlkLCBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIERlbGV0ZSByb3cgZm9yIHRoaXMgbWVzc2FnZQogICAgICAgICBkZWJ1ZygiRGVsZXRlUm93IHdpdGggSUQgPSAiICsgaWQpOwogICAgICAgICBTdGF0ZW1lbnQgc3RtdCA9IGRiQ29ubmVjdGlvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKQEAgLTIxMiw5ICsyMTIsOSBAQAogICAgICAgICBzdG10LmNsb3NlKCk7CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIGRlbGV0ZUFsbChqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikgCisgICAgcHJpdmF0ZSB2b2lkIGRlbGV0ZUFsbChqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIERlbGV0ZSByb3cgZm9yIHRoaXMgbWVzc2FnZQogICAgICAgICBTdGF0ZW1lbnQgc3RtdCA9IGRiQ29ubmVjdGlvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKICAgICAgICAgU3RyaW5nIHF1ZXJ5ID0gIkRFTEVURSBGUk9NIG1lc3NhZ2VzIjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9idWlsZC54bWwKaW5kZXggMzIwOTNjOC4uNDAzZDk3MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9idWlsZC54bWwKQEAgLTYwLDcgKzYwLDcgQEAKIAogICA8dGFyZ2V0IG5hbWU9InJ1bnRlc3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0ic2ltcGxlbWRiIiAvPgorICAgIDxwYXJhbSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0ic2ltcGxlbWRiIiAvPgogICAgIDwvYW50Y2FsbD4KICAgPC90YXJnZXQ+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUvcmEvTUVUQS1JTkYvcmEueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9yYS9NRVRBLUlORi9yYS54bWwKaW5kZXggMmNhMmViYy4uMjFkZWI5MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9yYS9NRVRBLUlORi9yYS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9yYS9NRVRBLUlORi9yYS54bWwKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgPGluYm91bmQtcmVzb3VyY2VhZGFwdGVyPgotICAgICAgICAgICAgPG1lc3NhZ2VhZGFwdGVyPiAgICAgICAgICAKKyAgICAgICAgICAgIDxtZXNzYWdlYWRhcHRlcj4KICAgICAgICAgICAgICAgICA8bWVzc2FnZWxpc3RlbmVyPgogICAgICAgICAgICAgICAgICAgICA8bWVzc2FnZWxpc3RlbmVyLXR5cGU+CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIKQEAgLTU2LDcgKzU2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIDwvYWN0aXZhdGlvbnNwZWMtY2xhc3M+CiAgICAgICAgICAgICAgICAgICAgIDwvYWN0aXZhdGlvbnNwZWM+CiAgICAgICAgICAgICAgICAgPC9tZXNzYWdlbGlzdGVuZXI+Ci0gICAgICAgICAgICA8L21lc3NhZ2VhZGFwdGVyPiAgICAgICAgICAKKyAgICAgICAgICAgIDwvbWVzc2FnZWFkYXB0ZXI+CiAgICAgICAgIDwvaW5ib3VuZC1yZXNvdXJjZWFkYXB0ZXI+CiAgICAgICAgIDxhZG1pbm9iamVjdD4KICAgICAgICAgICA8YWRtaW5vYmplY3QtaW50ZXJmYWNlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC9hZG1pbm9iamVjdC1pbnRlcmZhY2U+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L3JhL3NyYy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L3JhL3NyYy9idWlsZC54bWwKaW5kZXggMmI3NzQ4OS4uNzgzOTkxZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9yYS9zcmMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUvcmEvc3JjL2J1aWxkLnhtbApAQCAtMzAsOCArMzAsOCBAQAogCiAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJpbml0LWNvbW1vbiIgPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJidWlsZC5jbGFzc2VzLmRpciIgdmFsdWU9ImNsYXNzZXMiIC8+Ci0JPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNvbm5lY3RvciIgLz4KKyAgICA8cGFyYW0gbmFtZT0iYnVpbGQuY2xhc3Nlcy5kaXIiIHZhbHVlPSJjbGFzc2VzIiAvPgorICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjb25uZWN0b3IiIC8+CiAgICAgPC9hbnRjYWxsPgogICAgIDxqYXIgamFyZmlsZT0iLi4vZ2VuZXJpYy1yYS5qYXIiIGJhc2VkaXI9ImNsYXNzZXMiCiAgICAgICAgICBpbmNsdWRlcz0iY29ubmVjdG9yLyouY2xhc3MiIC8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhCmluZGV4IDU1NTMzZDQuLmY1OWIyYjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgQ29udHJvbHMgewogICAgIHB1YmxpYyBzdGF0aWMgT2JqZWN0IHJlYWR5TG9jayA9IG5ldyBPYmplY3QoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQppbmRleCA2NTgyMzNlLi5kNzNjODYyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgRGVsaXZlcnlXb3JrIGltcGxlbWVudHMgV29yayB7CiAKQEAgLTM2LDcgKzM2LDcgQEAKICAgICBwcml2YXRlIFN0cmluZyBvcDsKICAgICBwcml2YXRlIGJvb2xlYW4ga2VlcENvdW50OwogICAgIHByaXZhdGUgc3RhdGljIGludCBjb3VudGVyID0gMDsKLSAgICAKKwogICAgIHB1YmxpYyBEZWxpdmVyeVdvcmsoTWVzc2FnZUVuZHBvaW50IGVwLCBpbnQgbnVtT2ZNZXNzYWdlcywgU3RyaW5nIG9wKSB7CiAgICAgICAgIHRoaXMuZXAgPSBlcDsKICAgICAgICAgdGhpcy5udW0gPSBudW1PZk1lc3NhZ2VzOwpAQCAtNDQsNyArNDQsNyBAQAogICAgICAgICB0aGlzLmtlZXBDb3VudCA9IGZhbHNlOwogICAgIH0KIAotICAgIHB1YmxpYyBEZWxpdmVyeVdvcmsoTWVzc2FnZUVuZHBvaW50IGVwLCBpbnQgbnVtT2ZNZXNzYWdlcywgCisgICAgcHVibGljIERlbGl2ZXJ5V29yayhNZXNzYWdlRW5kcG9pbnQgZXAsIGludCBudW1PZk1lc3NhZ2VzLAogICAgICAgICAgICAgU3RyaW5nIG9wLCBib29sZWFuIGtlZXBDb3VudCkgewogICAgICAgICB0aGlzLmVwID0gZXA7CiAgICAgICAgIHRoaXMubnVtID0gbnVtT2ZNZXNzYWdlczsKQEAgLTU1LDcgKzU1LDcgQEAKICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CiAKICAgICAgICAgZGVidWcoIkVOVEVSLi4uIik7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAvL01ldGhvZCBvbk1lc3NhZ2UgPSBnZXRPbk1lc3NhZ2VNZXRob2QoKTsKICAgICAgICAgICAgIC8vZXAuYmVmb3JlRGVsaXZlcnkob25NZXNzYWdlKTsKQEAgLTc4LDExICs3OCwxMSBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvL2VwLmFmdGVyRGVsaXZlcnkoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIkxFQVZFLi4uIik7CiAgICAgfQogCkBAIC05MywxNCArOTMsMTQgQEAKICAgICB9CiAKICAgICBwcml2YXRlIE1ldGhvZCBnZXRPbk1lc3NhZ2VNZXRob2QoKSB7Ci0gICAgICAgIAorCiAgICAgICAgIE1ldGhvZCBvbk1lc3NhZ2VNZXRob2QgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ2xhc3MgbXNnTGlzdGVuZXJDbGFzcyA9IGNvbm5lY3Rvci5NeU1lc3NhZ2VMaXN0ZW5lci5jbGFzczsKICAgICAgICAgICAgIENsYXNzW10gcGFyYW1UeXBlcyA9IHsgamF2YS5sYW5nLlN0cmluZy5jbGFzcyB9OwotICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0gCisgICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPQogICAgICAgICAgICAgICAgIG1zZ0xpc3RlbmVyQ2xhc3MuZ2V0TWV0aG9kKCJvbk1lc3NhZ2UiLCBwYXJhbVR5cGVzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEKaW5kZXggMTAwY2FjZS4uZmE5M2Y2MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgICAgICAgICAgZmxhZ1RvU3RyaW5nKGZsYWdzKSk7CiAgICAgfQogCi0gICAgCisKICAgICBwdWJsaWMgdm9pZCBmb3JnZXQoWGlkIHhpZCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLmZvcmdldDogIiArIHhpZFRvU3RyaW5nKHhpZCkpOwogICAgIH0KQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLnByZXBhcmU6ICIgKyB4aWRUb1N0cmluZyh4aWQpKTsKICAgICAgICAgcmV0dXJuIFhBUmVzb3VyY2UuWEFfT0s7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFhpZFtdIHJlY292ZXIoaW50IGZsYWcpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5yZWNvdmVyOiAiICsgZmxhZ1RvU3RyaW5nKGZsYWcpKTsKICAgICAgICAgcmV0dXJuIG51bGw7CkBAIC02Niw3ICs2Niw3IEBACiAgICAgcHVibGljIGJvb2xlYW4gc2V0VHJhbnNhY3Rpb25UaW1lb3V0KGludCBzZWNvbmRzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc3RhcnQoWGlkIHhpZCwgaW50IGZsYWdzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2Uuc3RhcnQ6ICIgKyB4aWRUb1N0cmluZyh4aWQpICsgIiwiICsKICAgICAgICAgICAgICAgICBmbGFnVG9TdHJpbmcoZmxhZ3MpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL01lc3NhZ2VzLmphdmEKaW5kZXggYjViMGYwMi4uNGM5YzAxMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL01lc3NhZ2VzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL01lc3NhZ2VzLmphdmEKQEAgLTIxLDcgKzIxLDcgQEAKIC8qKgogICogY29sbGVjdGlvbiBvZiBtZXNzYWdlcy4KICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIE1lc3NhZ2VzIHsKIApAQCAtNTQsNyArNTQsNyBAQAogICAgICAgIFN0cmluZyBjb21tYW5kICA9IGFyZ3NbMF07CiAgICAgICAgU3RyaW5nIGRlc3ROYW1lID0gYXJnc1sxXTsKICAgICAgICBTdHJpbmcgbWVzc2FnZSAgPSBhcmdzWzJdOwotICAgCisKICAgICAgICBpZiAoISJhZGQiLmVxdWFscyhjb21tYW5kKSkgewogICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YQppbmRleCA4NjJmOWZmLi5kMTk5ZDAxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEKQEAgLTM4LDExICszOCwxMSBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGluaXRpYWxpemUoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6aW5nIHRoZSBDb250cm9scyB0byBmYWxzZToiK3Jlc2V0Q29udHJvbCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6aW5nIHRoZSBDb250cm9scyB0byBmYWxzZToiK3Jlc2V0Q29udHJvbCk7CiAgICAgICAgIGlmIChyZXNldENvbnRyb2wuZXF1YWxzKCJCRUdJTk5JTkciKSkgewogICAgICAgICAgICBDb250cm9scy5kb25lPWZhbHNlOwotCSAgIFN5c3RlbS5vdXQucHJpbnRsbigiW015QWRtaW5PYmplY3RdIEluaXRpYWxpemVkIHRoZSBDb250cm9scyB0byBmYWxzZSIpOwotCX0KKyAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXplZCB0aGUgQ29udHJvbHMgdG8gZmFsc2UiKTsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gZG9uZSgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9NeVdvcmsuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9NeVdvcmsuamF2YQppbmRleCAyZWNlYzYzLi5hOWE4ODgxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvTXlXb3JrLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL015V29yay5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgTXlXb3JrIGltcGxlbWVudHMgV29yayB7CiAKQEAgLTM1LDcgKzM1LDcgQEAKICAgICBwcml2YXRlIGJvb2xlYW4gc3RvcCA9IGZhbHNlOwogICAgIHByaXZhdGUgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBmYWN0b3J5OwogICAgIHByaXZhdGUgV29ya01hbmFnZXIgd207Ci0gICAgCisKICAgICBwdWJsaWMgTXlXb3JrKAogICAgICAgICAgICAgU3RyaW5nIG5hbWUsIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZmFjdG9yeSwgV29ya01hbmFnZXIgd20pIHsKICAgICAgICAgdGhpcy5mYWN0b3J5ID0gZmFjdG9yeTsKQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgICAgIHRyeSB7CiAKICAgICAgICAgICAgICAgICBNZXRob2Qgb25NZXNzYWdlID0gZ2V0T25NZXNzYWdlTWV0aG9kKCk7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpc0RlbGl2ZXJ5VHJhbnNhY3RlZCA9ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlzRGVsaXZlcnlUcmFuc2FjdGVkID0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3RvcnkuaXNEZWxpdmVyeVRyYW5zYWN0ZWQob25NZXNzYWdlKSk7CiAKICAgICAgICAgICAgICAgICAvKgpAQCAtNzAsNyArNzAsNyBAQAogICAgICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCJMRUFWRS4uLiIpOwogICAgIH0KIApAQCAtODUsMTQgKzg1LDE0IEBACiAgICAgfQogCiAgICAgcHVibGljIE1ldGhvZCBnZXRPbk1lc3NhZ2VNZXRob2QoKSB7Ci0gICAgICAgIAorCiAgICAgICAgIE1ldGhvZCBvbk1lc3NhZ2VNZXRob2QgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ2xhc3MgbXNnTGlzdGVuZXJDbGFzcyA9IGNvbm5lY3Rvci5NeU1lc3NhZ2VMaXN0ZW5lci5jbGFzczsKICAgICAgICAgICAgIENsYXNzW10gcGFyYW1UeXBlcyA9IHsgamF2YS5sYW5nLlN0cmluZy5jbGFzcyB9OwotICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0gCisgICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPQogICAgICAgICAgICAgICAgIG1zZ0xpc3RlbmVyQ2xhc3MuZ2V0TWV0aG9kKCJvbk1lc3NhZ2UiLCBwYXJhbVR5cGVzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEKaW5kZXggODE4MmVmNS4uM2ZjZTU0NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEKQEAgLTI0LDkgKzI0LDkgQEAKICAqIHNvIHRoYXQgdGhlIGFwcCBzZXJ2ZXIgY2FuIGluc3RhbnRpYXRlIGFuZCBjb25maWd1cmUKICAqIGl0IGF0IHRoZSBydW50aW1lLgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCi1wdWJsaWMgY2xhc3MgU2ltcGxlQWN0aXZhdGlvblNwZWMgCitwdWJsaWMgY2xhc3MgU2ltcGxlQWN0aXZhdGlvblNwZWMKICAgICBpbXBsZW1lbnRzIEFjdGl2YXRpb25TcGVjLCBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7CiAKICAgICBwcml2YXRlIFN0cmluZyBkZXN0aW5hdGlvbk5hbWU7CkBAIC00Myw3ICs0Myw3IEBACiAgICAgcHVibGljIFN0cmluZyBnZXREZXN0aW5hdGlvbk5hbWUgKCkgewogICAgICAgICByZXR1cm4gdGhpcy5kZXN0aW5hdGlvbk5hbWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0RGVzdGluYXRpb25OYW1lIChTdHJpbmcgbmFtZSkgewogICAgICAgICBkZWJ1Zygic2V0RGVzdGluYXRpb25OYW1lKCkgY2FsbGVkLi4uIG5hbWUgPSAiICsgbmFtZSk7CiAgICAgICAgIHRoaXMuZGVzdGluYXRpb25OYW1lID0gbmFtZTsKQEAgLTUyLDcgKzUyLDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldERlc3RpbmF0aW9uVHlwZSgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZGVzdGluYXRpb25UeXBlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldERlc3RpbmF0aW9uVHlwZSAoU3RyaW5nIHR5cGUpIHsKICAgICAgICAgZGVidWcoInNldERlc3RpbmF0aW9uVHlwZSAoKSBjYWxsZWQuLi4gdHlwZSA9ICIgKyB0eXBlKTsKICAgICAgICAgdGhpcy5kZXN0aW5hdGlvblR5cGU9IHR5cGU7CkBAIC02MSw3ICs2MSw3IEBACiAgICAgcHVibGljIFN0cmluZyBnZXRUZXN0UHJvcCgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMudGVzdFByb3A7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0VGVzdFByb3AgKFN0cmluZyB0ZXN0UHJvcCkgewogICAgICAgICBkZWJ1Zygic2V0VGVzdFByb3AgKCkgY2FsbGVkLi4uIHRlc3RQcm9wID0gIiArIHRlc3RQcm9wKTsKICAgICAgICAgdGhpcy50ZXN0UHJvcCA9IHRlc3RQcm9wOwpAQCAtNzAsNyArNzAsNyBAQAogICAgIHB1YmxpYyBJbnRlZ2VyIGdldFRlc3RJbnRlZ2VyUHJvcCgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMudGVzdEludGVnZXJQcm9wOwogICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFRlc3RJbnRlZ2VyUHJvcCAoSW50ZWdlciB0ZXN0UHJvcDEpIHsKICAgICAgICAgZGVidWcoInNldFRlc3RJbnRlZ2VyUHJvcCAoKSBjYWxsZWQuLi4gdGVzdEludGVnZXJQcm9wID0gIiArIHRlc3RQcm9wMSk7CiAgICAgICAgIHRoaXMudGVzdEludGVnZXJQcm9wID0gdGVzdFByb3AxOwpAQCAtOTQsNyArOTQsNyBAQAogCiAgICAgICB9CiAKLSAgIH0gCisgICB9CiAKICAgICBwcml2YXRlIHZvaWQgZGVidWcgKFN0cmluZyBtZXNzYWdlKQogICAgIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbC5qYXZhCmluZGV4IDZlNTM1M2YuLjNkZjcwNzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YQpAQCAtNDAsOSArNDAsOSBAQAogLyoqCiAgKiBUaGlzIGlzIGEgc2FtcGxlIHJlc291cmNlIGFkYXB0ZXIKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwotcHVibGljIGNsYXNzIFNpbXBsZVJlc291cmNlQWRhcHRlckltcGwgCitwdWJsaWMgY2xhc3MgU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbAogaW1wbGVtZW50cyBSZXNvdXJjZUFkYXB0ZXIsIGphdmEuaW8uU2VyaWFsaXphYmxlIHsKIAogICAgIHByaXZhdGUgQm9vdHN0cmFwQ29udGV4dCBjdHg7CkBAIC01OCw3ICs1OCw3IEBACiAKICAgICBwdWJsaWMgdm9pZAogICAgIHN0YXJ0KEJvb3RzdHJhcENvbnRleHQgY3R4KSB0aHJvd3MgUmVzb3VyY2VBZGFwdGVySW50ZXJuYWxFeGNlcHRpb257Ci0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCIwMDEuIFNpbXBsZSBSQSBzdGFydC4uLiIpOwogCiAgICAgICAgIHRoaXMuY3R4ID0gY3R4OwpAQCAtNjgsMjEgKzY4LDIxIEBACiAKICAgICAgICAgLy90ZXN0aW5nIGNyZWF0IHRpbWVyCiAgICAgICAgIFRpbWVyIHRpbWVyID0gbnVsbDsKLQkgIHRyeXsKLQkgICAgICB0aW1lciA9IGN0eC5jcmVhdGVUaW1lcigpOwotCSAgfSBjYXRjaChVbmF2YWlsYWJsZUV4Y2VwdGlvbiB1ZSkgewotCSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXJyb3IiKTsKLQkgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VBZGFwdGVySW50ZXJuYWxFeGNlcHRpb24oIkVycm9yIGZvcm0gYm9vdHN0cmFwIik7Ci0JICB9CisgICAgICB0cnl7CisgICAgICAgICAgdGltZXIgPSBjdHguY3JlYXRlVGltZXIoKTsKKyAgICAgIH0gY2F0Y2goVW5hdmFpbGFibGVFeGNlcHRpb24gdWUpIHsKKyAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIik7CisgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uKCJFcnJvciBmb3JtIGJvb3RzdHJhcCIpOworICAgICAgfQogICAgICAgICBkZWJ1ZygiMDA0LiBTaW1wbGUgUkEgc3RhcnQuLi4iKTsKIAogICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgCisKICAgICAgICAgICBYQVRlcm1pbmF0b3IgeGEgPSBjdHguZ2V0WEFUZXJtaW5hdG9yKCk7Ci0gICAgICAgICAgCisKICAgICAgICAgICBYaWQgeGlkMSA9IG5ldyBYSUQoKTsKICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBYSUQxID0gIiArIHhpZDEpOwotICAgICAgICAgIAorCiAgICAgICAgICAgRXhlY3V0aW9uQ29udGV4dCBlYyA9IG5ldyBFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgICAgICAgZWMuc2V0WGlkKHhpZDEpOwogICAgICAgICAgIGVjLnNldFRyYW5zYWN0aW9uVGltZW91dCg1KjEwMDApOyAvLzUgc2Vjb25kcwpAQCAtOTIsMTQgKzkyLDE0IEBACiAgICAgICAgICAgd20uZG9Xb3JrKG91dHcsIDEqMTAwMCwgZWMsIG51bGwpOwogICAgICAgICAgIHhhLmNvbW1pdCh4aWQxLCB0cnVlKTsKICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAKKwogICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIGV4ID0gIiArIGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgeGEucm9sbGJhY2soeGlkMSk7CiAgICAgICAgICAgfQotICAgICAgICAgIAorCiAgICAgICAgICAgWGlkIHhpZDIgPSBuZXcgWElEKCk7CiAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgWElEMiA9ICIgKyB4aWQyKTsKLSAgICAgICAgICAKKwogICAgICAgICAgIGVjID0gbmV3IEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICAgICAgICBlYy5zZXRYaWQoeGlkMik7CiAgICAgICAgICAgZWMuc2V0VHJhbnNhY3Rpb25UaW1lb3V0KDUqMTAwMCk7IC8vNSBzZWNvbmRzCkBAIC0xMTYsNyArMTE2LDcgQEAKICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICB9CiAKLSAgICAgICAgCisKICAgICAgICAgICBmb3IgKGludCBpID0gMCA7IGkgPCAzOyBpKyspIHsKICAgICAgICAgICBUZXN0V01Xb3JrIHcgPSBuZXcgVGVzdFdNV29yayhpLCBmYWxzZSk7CiAgICAgICAgICAgdHJ5IHsKQEAgLTEyNCw3ICsxMjQsNyBAQAogICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRkFJTDogQ0FVR0hUIGV4Y2VwdGlvbiA6IGkgPSAiICsgaSk7CiAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgfSAKKyAgICAgICAgICB9CiAgICAgICAgICAgfQogCiAgICAgICAgICAgZm9yIChpbnQgaSA9IDMgOyBpIDwgNjsgaSsrKSB7CkBAIC0xNzIsNyArMTcyLDcgQEAKICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICB9CiAgICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiMDA1LiBTaW1wbGUgUkEgc3RhcnQuLi4iKTsKICAgICB9CiAKQEAgLTIwNiwxMyArMjA2LDEzIEBACiAKICAgICBwdWJsaWMgdm9pZAogICAgIGVuZHBvaW50RGVhY3RpdmF0aW9uICgKLSAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZW5kcG9pbnRGYWN0b3J5LCAKKyAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZW5kcG9pbnRGYWN0b3J5LAogICAgICAgICAgICAgQWN0aXZhdGlvblNwZWMgc3BlYykgewogICAgICAgICBkZWJ1ZyAoImVuZHBvaW50RGVhY3RpdmF0aW9uIGNhbGxlZC4uLiIpOwotICAgICAgICAKKwogICAgICAgICAoKFdvcmtEaXNwYXRjaGVyKSB3b3JrKS5zdG9wKCk7CiAgICAgfQotICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGVzdE5hbWUoKSB7CiAgICAgICAgIHJldHVybiB0ZXN0TmFtZTsKICAgICB9CkBAIC0yMjgsNyArMjI4LDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NpbXBsZVJlc291cmNlQWRhcHRlckltcGxdID09PiAiICsgbWVzc2FnZSk7CiAgICAgfQogCi0gICAgcHVibGljIFhBUmVzb3VyY2VbXSBnZXRYQVJlc291cmNlcyhBY3RpdmF0aW9uU3BlY1tdIHNwZWNzKSAKKyAgICBwdWJsaWMgWEFSZXNvdXJjZVtdIGdldFhBUmVzb3VyY2VzKEFjdGl2YXRpb25TcGVjW10gc3BlY3MpCiAgICAgICAgIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9UZXN0V01Xb3JrLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvVGVzdFdNV29yay5qYXZhCmluZGV4IGJiMDU1MzQuLmRlOTNiYzEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9UZXN0V01Xb3JrLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1Rlc3RXTVdvcmsuamF2YQpAQCAtMjgsNyArMjgsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIFRlc3RXTVdvcmsgaW1wbGVtZW50cyBXb3JrIHsKIApAQCAtNDIsOCArNDIsOCBAQAogICAgIHB1YmxpYyBUZXN0V01Xb3JrKGludCBpZCwgYm9vbGVhbiBpc1JvZ3VlKSB7CiAgICAgICAgIHRoaXMoaWQsIGlzUm9ndWUsIGZhbHNlLCBudWxsKTsKICAgICB9Ci0gICAgCi0gICAgcHVibGljIFRlc3RXTVdvcmsoaW50IGlkLCBib29sZWFuIGlzUm9ndWUsIAorCisgICAgcHVibGljIFRlc3RXTVdvcmsoaW50IGlkLCBib29sZWFuIGlzUm9ndWUsCiAgICAgICAgICAgICBib29sZWFuIGRvTmVzdCwgRXhlY3V0aW9uQ29udGV4dCBjdHgpIHsKICAgICAgICAgdGhpcy5pZCA9IGlkOwogICAgICAgICB0aGlzLmlzUm9ndWUgPSBpc1JvZ3VlOwpAQCAtNzcsMTAgKzc3LDEwIEBACiAgICAgICAgICAgICB9IGNhdGNoIChXb3JrRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICAgICAgaWYgKGV4LmdldEVycm9yQ29kZSgpLmVxdWFscygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXb3JrRXhjZXB0aW9uLlRYX0NPTkNVUlJFTlRfV09SS19ESVNBTExPV0VEKSkgewotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArIAorICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBBU1M6IENBVUdIVCBFWFBFQ1RFRCA9ICIgKyBleC5nZXRFcnJvckNvZGUoKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKyAKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGQUlMOiBDQVVHSFQgVU5FWFBFQ1RFRCA9ICIgKyBleC5nZXRFcnJvckNvZGUoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtOTIsNyArOTIsNyBAQAogICAgICAgICAgICAgICAgIGVjLnNldFRyYW5zYWN0aW9uVGltZW91dCg1KjEwMDApOyAvLzUgc2Vjb25kcwogICAgICAgICAgICAgICAgIHdtLmRvV29yayhuZXN0ZWRXb3JrLCAxKjEwMDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgIkZBSUw6IENBVUdIVCBVTkVYUEVDVEVEID0gIiArIGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEKaW5kZXggMzRhNjA0Zi4uY2Q5OGM0NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEKQEAgLTMzLDcgKzMzLDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBXb3JrRGlzcGF0Y2hlciBpbXBsZW1lbnRzIFdvcmsgewogCkBAIC00NCwxMSArNDQsMTEgQEAKICAgICBwcml2YXRlIEFjdGl2YXRpb25TcGVjIHNwZWM7CiAgICAgcHJpdmF0ZSBXb3JrTWFuYWdlciB3bTsKICAgICBwcml2YXRlIFhBVGVybWluYXRvciB4YTsKLSAgICAKKwogICAgIHB1YmxpYyBXb3JrRGlzcGF0Y2hlcigKICAgICAgICAgICAgIFN0cmluZyBpZCwKICAgICAgICAgICAgIEJvb3RzdHJhcENvbnRleHQgY3R4LAotICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBmYWN0b3J5LCAKKyAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZmFjdG9yeSwKICAgICAgICAgICAgIEFjdGl2YXRpb25TcGVjIHNwZWMpIHsKICAgICAgICAgdGhpcy5pZCAgICAgID0gaWQ7CiAgICAgICAgIHRoaXMuY3R4ICAgICA9IGN0eDsKQEAgLTYxLDcgKzYxLDcgQEAKICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CiAKICAgICAgICAgZGVidWcoIkVOVEVSLi4uIik7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKENvbnRyb2xzLnJlYWR5TG9jaykgewogICAgICAgICAgICAgICAgIGRlYnVnKCJXQUlULi4uIik7CkBAIC04MywyNiArODMsMjYgQEAKICAgICAgICAgICAgIHRyeSB7CiAKICAgICAgICAgICAgICAgICBNZXRob2Qgb25NZXNzYWdlID0gZ2V0T25NZXNzYWdlTWV0aG9kKCk7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpc0RlbGl2ZXJ5VHJhbnNhY3RlZCA9ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlzRGVsaXZlcnlUcmFuc2FjdGVkID0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3J5LmlzRGVsaXZlcnlUcmFuc2FjdGVkKG9uTWVzc2FnZSkpOwogCiAgICAgICAgICAgICAgICAgaWYgKCFmYWN0b3J5LmlzRGVsaXZlcnlUcmFuc2FjdGVkKG9uTWVzc2FnZSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy9NZXNzYWdlRW5kcG9pbnQgZXAgPSBmYWN0b3J5LmNyZWF0ZUVuZHBvaW50KG51bGwpOwotICAgICAgICAgICAgICAgICAgICAvL0RlbGl2ZXJ5V29yayBkID0gbmV3IERlbGl2ZXJ5V29yaygiTk9fVFgiLCBlcCk7IAorICAgICAgICAgICAgICAgICAgICAvL0RlbGl2ZXJ5V29yayBkID0gbmV3IERlbGl2ZXJ5V29yaygiTk9fVFgiLCBlcCk7CiAgICAgICAgICAgICAgICAgICAgIC8vd20uZG9Xb3JrKGQsIDAsIG51bGwsIG51bGwpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vTWVzc2FnZUVuZHBvaW50IGVwID0gZmFjdG9yeS5jcmVhdGVFbmRwb2ludChudWxsKTsKICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50IGVwID0gZmFjdG9yeS5jcmVhdGVFbmRwb2ludChuZXcgRmFrZVhBUmVzb3VyY2UoKSk7CiAgICAgICAgICAgICAgICAgICAgIGludCBudW1PZk1lc3NhZ2VzID0gNTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy9pbXBvcnRpbmcgdHJhbnNhY3Rpb24KIAogICAgICAgICAgICAgICAgICAgICAvL3dyaXRlL2NvbW1pdAogICAgICAgICAgICAgICAgICAgICBFeGVjdXRpb25Db250ZXh0IGVjID0gc3RhcnRUeCgpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiU3RhcnQgVFggLSAiICsgZWMuZ2V0WGlkKCkpOwogCi0gICAgICAgICAgICAgICAgICAgIERlbGl2ZXJ5V29yayB3ID0gCisgICAgICAgICAgICAgICAgICAgIERlbGl2ZXJ5V29yayB3ID0KICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEZWxpdmVyeVdvcmsoZXAsIG51bU9mTWVzc2FnZXMsICJXUklURSIpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIHRydWUpOwpAQCAtMTEwLDcgKzExMCw3IEBACiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJET05FIFdSSVRFIFRPIERCIik7CiAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xzLmV4cGVjdGVkUmVzdWx0cyA9IG51bU9mTWVzc2FnZXM7CiAgICAgICAgICAgICAgICAgICAgIG5vdGlmeUFuZFdhaXQoKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy9kZWxldGUvcm9sbGJhY2sKICAgICAgICAgICAgICAgICAgICAgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7CkBAIC0xMjYsNyArMTI2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgLy9kZWxldGUvY29tbWl0CiAgICAgICAgICAgICAgICAgICAgIGVjID0gc3RhcnRUeCgpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiU3RhcnQgVFggLSAiICsgZWMuZ2V0WGlkKCkpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICB3ID0gbmV3IERlbGl2ZXJ5V29yayhlcCwgbnVtT2ZNZXNzYWdlcywgIkRFTEVURSIpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIHRydWUpOwpAQCAtMTUwLDcgKzE1MCw3IEBACiAgICAgICAgICAgICAgICAgICAgIC8vZGVsZXRlL2NvbW1pdAogICAgICAgICAgICAgICAgICAgICBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgdyA9IG5ldyBEZWxpdmVyeVdvcmsoZXAsIG51bU9mTWVzc2FnZXMsICJERUxFVEUiKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgeGEuY29tbWl0KGVjLmdldFhpZCgpLCB0cnVlKTsKQEAgLTE5NSw3ICsxOTUsNyBAQAogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBpZiAoWEFSZXNvdXJjZS5YQV9PSyA9PSB4YS5wcmVwYXJlKGVjLmdldFhpZCgpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgeGEuY29tbWl0KGVjLmdldFhpZCgpLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiWEEgUFJFUEFSRS9DT01NSVQuIERPTkUgV1JJVEUgVE8gREIgIik7CkBAIC0yMDcsMTkgKzIwNywxOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMuZXhwZWN0ZWRSZXN1bHRzID0gMzsKICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeUFuZFdhaXQoKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvL2RlbGV0ZSBhbGwuCiAgICAgICAgICAgICAgICAgICAgIGVjID0gc3RhcnRUeCgpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiU3RhcnQgVFggLSAiICsgZWMuZ2V0WGlkKCkpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICB3ID0gbmV3IERlbGl2ZXJ5V29yayhlcCwgMSwgIkRFTEVURV9BTEwiKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgeGEuY29tbWl0KGVjLmdldFhpZCgpLCB0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIkRPTkUgREVMRVRFIEFMTCBGUk9NIERCIik7CiAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xzLmV4cGVjdGVkUmVzdWx0cyA9IDA7CiAgICAgICAgICAgICAgICAgICAgIG5vdGlmeUFuZFdhaXQoKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgZG9uZSgpOwogICAgICAgICAgICAgICAgIH0KIApAQCAtMjQzLDcgKzI0Myw3IEBACiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIkxFQVZFLi4uIik7CiAgICAgfQogCkBAIC0yNTgsMTQgKzI1OCwxNCBAQAogICAgIH0KIAogICAgIHB1YmxpYyBNZXRob2QgZ2V0T25NZXNzYWdlTWV0aG9kKCkgewotICAgICAgICAKKwogICAgICAgICBNZXRob2Qgb25NZXNzYWdlTWV0aG9kID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENsYXNzIG1zZ0xpc3RlbmVyQ2xhc3MgPSBjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIuY2xhc3M7CiAgICAgICAgICAgICBDbGFzc1tdIHBhcmFtVHlwZXMgPSB7IGphdmEubGFuZy5TdHJpbmcuY2xhc3MgfTsKLSAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9IAorICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0KICAgICAgICAgICAgICAgICBtc2dMaXN0ZW5lckNsYXNzLmdldE1ldGhvZCgib25NZXNzYWdlIiwgcGFyYW1UeXBlcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CkBAIC0yODgsMTMgKzI4OCwxMyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgLy9TbGVlcCBmb3IgNSBzZWNvbmRzCiAgICAgICAgICAgICAvL1RocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoNSoxMDAwKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQoQ29udHJvbHMucmVhZHlMb2NrKSB7CiAgICAgICAgICAgICAgICAgLy9Ob3RpZnkgdGhlIGNsaWVudCB0byBjaGVjayB0aGUgcmVzdWx0cwotICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay5ub3RpZnkoKTsgCi0gICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLm5vdGlmeSgpOworCiAgICAgICAgICAgICAgICAgLy9XYWl0IHVudGlsIHJlc3VsdHMgYXJlIHZlcmlmaWVkIGJ5IHRoZSBjbGllbnQKLSAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2sud2FpdCgpOyAKKyAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2sud2FpdCgpOwogCiAgICAgICAgICAgICAgICAgaWYgKHN0b3ApIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzEwLDcgKzMxMCw3IEBACiAgICAgICAgICAgICBDb250cm9scy5kb25lID0gdHJ1ZTsKICAgICAgICAgICAgIHN5bmNocm9uaXplZChDb250cm9scy5yZWFkeUxvY2spIHsKICAgICAgICAgICAgICAgICAvL05vdGlmeSB0aGUgY2xpZW50IHRvIGNoZWNrIHRoZSByZXN1bHRzCi0gICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLm5vdGlmeSgpOyAKKyAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2subm90aWZ5KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEKaW5kZXggNGVkMzA4Ny4uMWJiODA1ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YQpAQCAtMzYsOCArMzYsOCBAQAogICAgIHB1YmxpYyBpbnQgYnJhbmNoUXVhbGlmaWVyOwogICAgIHB1YmxpYyBpbnQgZ2xvYmFsVHhJRDsKIAotICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhHVFJJRFNJWkU9IDY0OyAKLSAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYQlFVQUxTSVpFPSA2NDsgCisgICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEdUUklEU0laRT0gNjQ7CisgICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEJRVUFMU0laRT0gNjQ7CiAKICAgICBwdWJsaWMgWElEKCkgewogICAgICAgICBpbnQgZm9vID0gSUQrKzsKQEAgLTU1LDEwICs1NSwxMCBAQAogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgICAgICAgICAgICAgICAgLy8gSXQgY2FuJ3QgYmUgZXF1YWwKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBvdGhlciA9IChYSUQpbzsgICAgICAgICAgICAgICAgICAgLy8gVGhlIG90aGVyIFhJRCwgbm93IHByb3Blcmx5IGNhc3QKLSAgICAgICAgCi0gICAgICAgIGlmICh0aGlzLmZvcm1hdElEID09IG90aGVyLmZvcm1hdElEIAorCisgICAgICAgIGlmICh0aGlzLmZvcm1hdElEID09IG90aGVyLmZvcm1hdElECiAgICAgICAgICAgICAgICAgJiYgdGhpcy5icmFuY2hRdWFsaWZpZXIgPT0gb3RoZXIuYnJhbmNoUXVhbGlmaWVyCiAgICAgICAgICAgICAgICAgJiYgdGhpcy5nbG9iYWxUeElEID09IG90aGVyLmdsb2JhbFR4SUQpIHsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtOTgsNyArOTgsNyBAQAogICAgICAgICAgICAgICAgICJmb3JtYXRJRCgiICAgICArIGZvcm1hdElEICAgICArICIpLCAiICsKICAgICAgICAgICAgICAgICAiYnJhbmNoUXVhbGlmaWVyICgiICsgYnJhbmNoUXVhbGlmaWVyICsgIiksICIgKwogICAgICAgICAgICAgICAgICJnbG9iYWxUeElEKCIgKyBnbG9iYWxUeElEICsgIil9Iik7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBzOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41LXJlc291cmNlc3htbC9hcHAvc3JjL01FVEEtSU5GL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41LXJlc291cmNlc3htbC9hcHAvc3JjL01FVEEtSU5GL2VqYi1qYXIueG1sCmluZGV4IDY5NmRkM2UuLjVhNTIxMGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvYXBwL3NyYy9NRVRBLUlORi9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwKQEAgLTgxLDggKzgxLDggQEAKICAgICAgICAgPHJlcy1zaGFyaW5nLXNjb3BlPlNoYXJlYWJsZTwvcmVzLXNoYXJpbmctc2NvcGU+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KICAgICAgIDxyZXNvdXJjZS1lbnYtcmVmPgotCTxyZXNvdXJjZS1lbnYtcmVmLW5hbWU+ZWlzL3Rlc3RBZG1pbjwvcmVzb3VyY2UtZW52LXJlZi1uYW1lPgotCTxyZXNvdXJjZS1lbnYtcmVmLXR5cGU+Y29ubmVjdG9yLk15QWRtaW5PYmplY3Q8L3Jlc291cmNlLWVudi1yZWYtdHlwZT4KKyAgICA8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmVpcy90ZXN0QWRtaW48L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KKyAgICA8cmVzb3VyY2UtZW52LXJlZi10eXBlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC9yZXNvdXJjZS1lbnYtcmVmLXR5cGU+CiAgICAgICA8L3Jlc291cmNlLWVudi1yZWY+CiAgICAgICA8c2VjdXJpdHktaWRlbnRpdHk+CiAgICAgICAgIDx1c2UtY2FsbGVyLWlkZW50aXR5Lz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvYXBwL3NyYy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCmluZGV4IDdkODEyZDAuLjBkNzNhOTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvYXBwL3NyYy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41LXJlc291cmNlc3htbC9hcHAvc3JjL01FVEEtSU5GL3N1bi1lamItamFyLnhtbApAQCAtODQsNyArODQsNyBAQAogICAgICAgPC9yZXNvdXJjZS1yZWY+CiAgICAgICA8cmVzb3VyY2UtZW52LXJlZj4KICAgICAgICAgPHJlc291cmNlLWVudi1yZWYtbmFtZT5laXMvdGVzdEFkbWluPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+Ci0JPGpuZGktbmFtZT5qYXZhOmFwcC9laXMvdGVzdEFkbWluPC9qbmRpLW5hbWU+CisgICAgPGpuZGktbmFtZT5qYXZhOmFwcC9laXMvdGVzdEFkbWluPC9qbmRpLW5hbWU+CiAgICAgICA8L3Jlc291cmNlLWVudi1yZWY+CiAgICAgICA8Z2VuLWNsYXNzZXMvPgogICAgIDwvZWpiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41LXJlc291cmNlc3htbC9hcHAvc3JjL2JlYW5zL01lc3NhZ2VDaGVja2VyRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL2FwcC9zcmMvYmVhbnMvTWVzc2FnZUNoZWNrZXJFSkIuamF2YQppbmRleCBiNTBkN2U0Li41NDI5ZWE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL2FwcC9zcmMvYmVhbnMvTWVzc2FnZUNoZWNrZXJFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL2FwcC9zcmMvYmVhbnMvTWVzc2FnZUNoZWNrZXJFSkIuamF2YQpAQCAtNDMsNyArNDMsNyBAQAogCiAgICAgcHVibGljIE1lc3NhZ2VDaGVja2VyRUpCKCkge30KIAotICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIAorICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpCiAgICAgICAgIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImJlYW4gY3JlYXRlZCIpOwogICAgICAgICBoZWxkQ29uID0gbnVsbDsKQEAgLTcxLDExICs3MSwxMSBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgc3luY2hyb25pemVkIChDb250cm9scy5nZXRMb2NrT2JqZWN0KCkpIHsKICAgICAgICAgICAgICAgICAvL1RlbGwgdGhlIHJlc291cmNlIGFkYXB0ZXIgdGhlIGNsaWVudCBpcyByZWFkeSB0byBydW4KLSAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkubm90aWZ5QWxsKCk7IAotICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIENvbnRyb2xzLmdldExvY2tPYmplY3QoKS5ub3RpZnlBbGwoKTsKKwogICAgICAgICAgICAgICAgIGRlYnVnKCJOT1RJRklFRC4uLiBTVEFSVCBXQUlUSU5HIik7CiAgICAgICAgICAgICAgICAgLy9XYWl0IHVudGlsIGJlaW5nIHRvbGQgdG8gcmVhZCBmcm9tIHRoZSBkYXRhYmFzZQotICAgICAgICAgICAgICAgIENvbnRyb2xzLmdldExvY2tPYmplY3QoKS53YWl0KCk7IAorICAgICAgICAgICAgICAgIENvbnRyb2xzLmdldExvY2tPYmplY3QoKS53YWl0KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CkBAIC04MywyMiArODMsMjIgQEAKICAgICB9CiAKICAgICBwdWJsaWMgaW50IGdldE1lc3NhZ2VDb3VudCgpIHsKLQl0cnkgeworICAgIHRyeSB7CiAgICAgICAgICAgICBDb25uZWN0aW9uIGNvbiA9IGdldEZyZXNoQ29ubmVjdGlvbigpOwogICAgICAgICAgICAgaW50IGNvdW50MSA9IGdldENvdW50KGNvbik7CiAgICAgICAgICAgICBjb24uY2xvc2UoKTsKLSAgICAgICAgICAgIAotCSAgICAvKgorCisgICAgICAgIC8qCiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQoQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpKSB7CiAgICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLm5vdGlmeSgpOwogICAgICAgICAgICAgfQotCSAgICAqLwotICAgICAgICAgICAgICAgIAorICAgICAgICAqLworCiAgICAgICAgICAgICByZXR1cm4gY291bnQxOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLm91dCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwotCX0KKyAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSBpbnQgZ2V0Q291bnQoQ29ubmVjdGlvbiBjb24pIHRocm93cyBTUUxFeGNlcHRpb24gewpAQCAtMTI0LDEwICsxMjQsMTAgQEAKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIHVzZXIgPSAoU3RyaW5nKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvdXNlciIpOwogICAgICAgICAgICAgcGFzc3dvcmQgPSAoU3RyaW5nKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvcGFzc3dvcmQiKTsKLQkgICAgQ29udHJvbHMgPSAoTXlBZG1pbk9iamVjdCkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2Vpcy90ZXN0QWRtaW4iKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDQUxMSU5HIElOSVRJTElaRSBdXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXSIpOwotCSAgICBDb250cm9scy5pbml0aWFsaXplKCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ0FMTEVEIElOSVRJTElaRSBdXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXSIpOworICAgICAgICBDb250cm9scyA9IChNeUFkbWluT2JqZWN0KSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWlzL3Rlc3RBZG1pbiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNBTExJTkcgSU5JVElMSVpFIF1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dIik7CisgICAgICAgIENvbnRyb2xzLmluaXRpYWxpemUoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDQUxMRUQgSU5JVElMSVpFIF1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dIik7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KQEAgLTE2Miw3ICsxNjIsNyBAQAogICAgICAgICAgICAgZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKICAgICAgICAgICAgIGRlYnVnKCJHZXQgSkRCQyBjb25uZWN0aW9uLCBhdXRvIHNpZ24gb24iKTsKICAgICAgICAgICAgIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoY29uICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gY29uOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTE3Myw3ICsxNzMsNyBAQAogICAgICAgICAgICAgdGhyb3cgZXgxOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIGNsb3NlQ29ubmVjdGlvbihDb25uZWN0aW9uIGNvbikgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICAgIGlmIChoZWxkQ29uICE9IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvYXBwL3NyYy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41LXJlc291cmNlc3htbC9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZGFkMjA3Yi4uMGIzOGMxOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41LXJlc291cmNlc3htbC9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41LXJlc291cmNlc3htbC9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogZWpiLWphci54bWw9TUVUQS1JTkYvZWpiLWphci54bWwKIHN1bi1lamItamFyLnhtbD1NRVRBLUlORi9zdW4tZWpiLWphci54bWwKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvYXBwL3NyYy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL2FwcC9zcmMvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGNmMjVlN2QuLjRlMjUzNmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvYXBwL3NyYy9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41LXJlc291cmNlc3htbC9hcHAvc3JjL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjksMjMgKzI5LDIzIEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7Ci0gICAgCisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIC8vc3VwZXIoYXJncyk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZG9UZXN0KCkgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJUaGlzIGlzIHRvIHRlc3QgY29ubmVjdG9yIDEuNSAiKwotCSAgICAgICAgICAgICAiY29udHJhY3RzLiIpOwotICAgICAgICAKKyAgICAgICAgICAgICAgICAgImNvbnRyYWN0cy4iKTsKKwogICAgICAgICBTdHJpbmcgcmVzID0gIk5PVCBSVU4iOwotCWRlYnVnKCJkb1Rlc3QoKSBFTlRFUi4uLiIpOwotCSAgICBpbnQgdGVzdENvdW50ID0gMTsKKyAgICBkZWJ1ZygiZG9UZXN0KCkgRU5URVIuLi4iKTsKKyAgICAgICAgaW50IHRlc3RDb3VudCA9IDE7CiAgICAgICAgIHRyeXsKICAgICAgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpaWMubG9va3VwKCJqYXZhOmFwcC9qZGJjL1hBUG9pbnRiYXNlIik7CkBAIC01NCw3ICs1NCw3IEBACiAgICAgICAgIH1jYXRjaChFeGNlcHRpb24gZSl7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiSUQgQ29ubmVjdG9yIEVtYmVkZGVkIDEuNSB0ZXN0IC0gIiArIHRlc3RDb3VudCsrLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGNlcHRpb24gZHVyaW5nIGxvb2t1cCBvZiBqYXZhOmFwcC9qZGJjL1hBUG9pbnRiYXNlIDogIiArIGUuZ2V0TWVzc2FnZSgpKTsKLQkgICAgLy9lLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAvL2UucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KICAgICAgICAgdHJ5ewogICAgICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKQEAgLTY0LDcgKzY0LDcgQEAKICAgICAgICAgfWNhdGNoKEV4Y2VwdGlvbiBlKXsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJJRCBDb25uZWN0b3IgRW1iZWRkZWQgMS41IHRlc3QgLSAiICsgdGVzdENvdW50KyssIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4Y2VwdGlvbiBkdXJpbmcgbG9va3VwIG9mIGphdmE6YXBwL2pkYmMvdGVzdC1yZXNvdXJjZTogIiArIGUuZ2V0TWVzc2FnZSgpKTsKLQkgICAgLy9lLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAvL2UucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KIC8qICAgICAgICB0cnl7CiAgICAgICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwpAQCAtNzksMTMgKzc5LDEzIEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXMgID0gIkFMTCBURVNUUyBQQVNTRUQiOwogICAgICAgICAgICAgd2hpbGUgKCFkb25lKCkpIHsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIG5vdGlmeUFuZFdhaXQoKTsKICAgICAgICAgICAgICAgICBpZiAoIWRvbmUoKSkgewogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiUnVubmluZy4uLiIpOwogICAgICAgICAgICAgICAgICAgICBwYXNzID0gY2hlY2tSZXN1bHRzKGV4cGVjdGVkUmVzdWx0cygpKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIkdvdCBleHBlY3RlZCByZXN1bHRzID0gIiArIHBhc3MpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvL2RvIG5vdCBjb250aW51ZSBpZiBvbmUgdGVzdCBmYWlsZWQKICAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXNzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXMgPSAiU09NRSBURVNUUyBGQUlMRUQiOwpAQCAtOTMsMTEgKzkzLDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJJRCBDb25uZWN0b3IgRW1iZWRkZWQgMS41IHRlc3QgLSAiICsgdGVzdENvdW50LCBzdGF0LlBBU1MpOwotCQkgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLQkJdGVzdENvdW50Kys7CisgICAgICAgIHRlc3RDb3VudCsrOwogICAgICAgICAgICAgfQogCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpAQCAtMTE4LDE0ICsxMTgsMTQgQEAKIAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiY29ubmVjdG9yMS41RW1iZWRkZWRJRCIpOwogCi0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCJFWElUSU5HLi4uIFNUQVRVUyA9ICIgKyByZXMpOwogICAgICAgICByZXR1cm4gcmVzOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgYm9vbGVhbiBjaGVja1Jlc3VsdHMoaW50IG51bSkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIE9iamVjdCBvID0gKG5ldyBJbml0aWFsQ29udGV4dCgpKS5sb29rdXAoIk15TWVzc2FnZUNoZWNrZXIiKTsKLSAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkgCisgICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpCiAgICAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cobywgTWVzc2FnZUNoZWNrZXJIb21lLmNsYXNzKTsKICAgICAgICAgTWVzc2FnZUNoZWNrZXIgY2hlY2tlciA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgIGludCByZXN1bHQgPSBjaGVja2VyLmdldE1lc3NhZ2VDb3VudCgpOwpAQCAtMTM0LDcgKzEzNCw3IEBACiAKICAgICBwcml2YXRlIGJvb2xlYW4gZG9uZSgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBPYmplY3QgbyA9IChuZXcgSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJNeU1lc3NhZ2VDaGVja2VyIik7Ci0gICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpIAorICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKQogICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG8sIE1lc3NhZ2VDaGVja2VySG9tZS5jbGFzcyk7CiAgICAgICAgIE1lc3NhZ2VDaGVja2VyIGNoZWNrZXIgPSBob21lLmNyZWF0ZSgpOwogICAgICAgICByZXR1cm4gY2hlY2tlci5kb25lKCk7CkBAIC0xNDIsNyArMTQyLDcgQEAKIAogICAgIHByaXZhdGUgaW50IGV4cGVjdGVkUmVzdWx0cygpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBPYmplY3QgbyA9IChuZXcgSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJNeU1lc3NhZ2VDaGVja2VyIik7Ci0gICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpIAorICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKQogICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG8sIE1lc3NhZ2VDaGVja2VySG9tZS5jbGFzcyk7CiAgICAgICAgIE1lc3NhZ2VDaGVja2VyIGNoZWNrZXIgPSBob21lLmNyZWF0ZSgpOwogICAgICAgICByZXR1cm4gY2hlY2tlci5leHBlY3RlZFJlc3VsdHMoKTsKQEAgLTE1MCw3ICsxNTAsNyBAQAogCiAgICAgcHJpdmF0ZSB2b2lkIG5vdGlmeUFuZFdhaXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgT2JqZWN0IG8gPSAobmV3IEluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiTXlNZXNzYWdlQ2hlY2tlciIpOwotICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKSAKKyAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkKICAgICAgICAgICAgIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvLCBNZXNzYWdlQ2hlY2tlckhvbWUuY2xhc3MpOwogICAgICAgICBNZXNzYWdlQ2hlY2tlciBjaGVja2VyID0gaG9tZS5jcmVhdGUoKTsKICAgICAgICAgY2hlY2tlci5ub3RpZnlBbmRXYWl0KCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL2FwcC9zcmMvbWRiL015TWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhCmluZGV4IGQxZDc4ZjIuLmQ4MDY5NTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhCkBAIC0zMCw0MSArMzAsNDEgQEAKIAogLyoqCiAgKi8KLXB1YmxpYyBjbGFzcyBNeU1lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZURyaXZlbkJlYW4sIAorcHVibGljIGNsYXNzIE15TWVzc2FnZUJlYW4gaW1wbGVtZW50cyBNZXNzYWdlRHJpdmVuQmVhbiwKICAgICAgICAgTXlNZXNzYWdlTGlzdGVuZXIgewogCiAgICAgcHJpdmF0ZSB0cmFuc2llbnQgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjID0gbnVsbDsKICAgICBwcml2YXRlIENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdG9yLCB3aGljaCBpcyBwdWJsaWMgYW5kIHRha2VzIG5vIGFyZ3VtZW50cy4KICAgICAgKi8KICAgICBwdWJsaWMgTXlNZXNzYWdlQmVhbigpIHt9CiAKICAgICAvKioKLSAgICAgKiBzZXRNZXNzYWdlRHJpdmVuQ29udGV4dCBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IAotICAgICAqIG5vdCBmaW5hbCBvciBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIAorICAgICAqIHNldE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQKKyAgICAgKiBub3QgZmluYWwgb3Igc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZAogICAgICAqIHdpdGggb25lIGFyZ3VtZW50IG9mIHR5cGUgamFrYXJ0YS5lamIuTWVzc2FnZURyaXZlbkNvbnRleHQuCiAgICAgICoKICAgICAgKiBAcGFyYW0gbWRjICAgIHRoZSBjb250ZXh0IHRvIHNldAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldE1lc3NhZ2VEcml2ZW5Db250ZXh0KE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYykgewotCXRoaXMubWRjID0gbWRjOworICAgIHRoaXMubWRjID0gbWRjOwogICAgIH0KIAogICAgIC8qKgotICAgICAqIGVqYkNyZWF0ZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvciAKLSAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggbm8gCisgICAgICogZWpiQ3JlYXRlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yCisgICAgICogc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCB3aXRoIG5vCiAgICAgICogYXJndW1lbnRzLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHsgfQogCiAgICAgLyoqCi0gICAgICogb25NZXNzYWdlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yIAorICAgICAqIG9uTWVzc2FnZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvcgogICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBvbmUgYXJndW1lbnQKICAgICAgKiBvZiB0eXBlIGpha2FydGEuam1zLk1lc3NhZ2UuCiAgICAgICoKLSAgICAgKiBDYXN0cyB0aGUgaW5jb21pbmcgTWVzc2FnZSB0byBhIFRleHRNZXNzYWdlIGFuZCBkaXNwbGF5cyAKKyAgICAgKiBDYXN0cyB0aGUgaW5jb21pbmcgTWVzc2FnZSB0byBhIFRleHRNZXNzYWdlIGFuZCBkaXNwbGF5cwogICAgICAqIHRoZSB0ZXh0LgogICAgICAqCiAgICAgICogQHBhcmFtIGluTWVzc2FnZSAgICB0aGUgaW5jb21pbmcgbWVzc2FnZQpAQCAtNzUsNyArNzUsNyBAQAogCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpZiAoaW5NZXNzYWdlLmVuZHNXaXRoKCJXUklURSIpKSB7Ci0gICAgICAgICAgICAgICAgZG9EYlN0dWZmKCJXUklURSIsIAorICAgICAgICAgICAgICAgIGRvRGJTdHVmZigiV1JJVEUiLAogICAgICAgICAgICAgICAgICAgICAgICAgaW5NZXNzYWdlLnN1YnN0cmluZygwLCBpbk1lc3NhZ2UubGFzdEluZGV4T2YoIjoiKSkpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChpbk1lc3NhZ2UuZW5kc1dpdGgoIkRFTEVURSIpKSB7CiAgICAgICAgICAgICAgICAgZG9EYlN0dWZmKCJERUxFVEUiLApAQCAtOTEsMTAgKzkxLDEwIEBACiAgICAgICAgIH0KIAogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIGVqYlJlbW92ZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvciAKLSAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggbm8gCisgICAgICogZWpiUmVtb3ZlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yCisgICAgICogc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCB3aXRoIG5vCiAgICAgICogYXJndW1lbnRzLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHt9CkBAIC0xMDQsNjMgKzEwNCw2MyBAQAogCiAgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uID0gbnVsbDsKICAgICAgICAgU3RyaW5nIGlkICAgID0gbWVzc2FnZS5zdWJzdHJpbmcoMCwgbWVzc2FnZS5pbmRleE9mKCI6IikpOwotICAgICAgICBTdHJpbmcgYm9keSAgPSBtZXNzYWdlLnN1YnN0cmluZyhtZXNzYWdlLmluZGV4T2YoIjoiKSsxKTsgCisgICAgICAgIFN0cmluZyBib2R5ICA9IG1lc3NhZ2Uuc3Vic3RyaW5nKG1lc3NhZ2UuaW5kZXhPZigiOiIpKzEpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmICgiUkVBRCIuZXF1YWxzKG9wKSkgewotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgZGVidWcoIlJlYWRpbmcgcm93IGZyb20gZGF0YWJhc2UuLi4iKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIC8vIENyZWF0aW5nIGEgZGF0YWJhc2UgY29ubmVjdGlvbgogICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9NeURCIik7CiAgICAgICAgICAgICAgICAgICBkZWJ1ZygiTG9va2VkIHVwIERhdGFzb3VyY2VcbiIpOwogICAgICAgICAgICAgICAgICAgZGVidWcoIkdldCBKREJDIGNvbm5lY3Rpb24sIGF1dG8gc2lnbiBvbiIpOwogICAgICAgICAgICAgICAgICAgZGJDb25uZWN0aW9uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgIFN0YXRlbWVudCBzdG10ID0gZGJDb25uZWN0aW9uLmNyZWF0ZVN0YXRlbWVudCgpOwotICAgICAgICAgICAgICAgICAgU3RyaW5nIHF1ZXJ5ID0gCisgICAgICAgICAgICAgICAgICBTdHJpbmcgcXVlcnkgPQogICAgICAgICAgICAgICAgICAgIlNFTEVDVCBpZCBmcm9tIG1lc3NhZ2VzIHdoZXJlIGlkID0gJ1FRJyI7CiAgICAgICAgICAgICAgICAgICBSZXN1bHRTZXQgcmVzdWx0cyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHF1ZXJ5KTsKICAgICAgICAgICAgICAgICAgIHJlc3VsdHMubmV4dCgpOwotICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJRUSBoYXMgYmFsYW5jZSAiICsgCisgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlFRIGhhcyBiYWxhbmNlICIgKwogICAgICAgICAgICAgICAgICAgcmVzdWx0cy5nZXRJbnQoImJhbGFuY2UiKSArICIgZG9sbGFycyIpOwogICAgICAgICAgICAgICAgICAgcmVzdWx0cy5jbG9zZSgpOwogICAgICAgICAgICAgICAgICAgc3RtdC5jbG9zZSgpOwotICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVhZCBvbmUgYWNjb3VudFxuIik7CiAgICAgICAgICAgICAgICAgKi8KIAogICAgICAgICAgICAgfSBlbHNlIGlmICgiV1JJVEUiLmVxdWFscyhvcCkpIHsKIAogICAgICAgICAgICAgICAgIGRlYnVnKCJJbnNlcnRpbmcgb25lIG1lc3NhZ2UgaW4gdGhlIGRhdGFiYXNlXG4iKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvTXlEQiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKICAgICAgICAgICAgICAgICAvL2RlYnVnKCJHZXQgSkRCQyBjb25uZWN0aW9uLCBhdXRvIHNpZ24gb24iKTsKICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBjcmVhdGVSb3coaWQsIGJvZHksIGRiQ29ubmVjdGlvbik7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGVkIG9uZSBtZXNzYWdlXG4iKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgfSBlbHNlIGlmICgiREVMRVRFIi5lcXVhbHMob3ApKSB7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZWJ1ZygiRGVsZXRpbmcgb25lIG1lc3NhZ2UgZnJvbSB0aGUgZGF0YWJhc2VcbiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvTXlEQiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKICAgICAgICAgICAgICAgICAvL2RlYnVnKCJHZXQgSkRCQyBjb25uZWN0aW9uLCBhdXRvIHNpZ24gb24iKTsKICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZWxldGVSb3coaWQsIGRiQ29ubmVjdGlvbik7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZWxldGVkIG9uZSBtZXNzYWdlXG4iKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoIkRFTEVURV9BTEwiLmVxdWFscyhvcCkpIHsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGRlYnVnKCJEZWxldGluZyBhbGwgbWVzc2FnZXMgZnJvbSB0aGUgZGF0YWJhc2VcbiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvTXlEQiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKQEAgLTE3MSw3ICsxNzEsNyBAQAogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvL3Vuc3VwcG9ydGVkIG9wCiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICB9ZmluYWxseXsKICAgICAgICAgICAgIHRyeXsKICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24uY2xvc2UoKTsKQEAgLTE4MCw5ICsxODAsOSBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIAotICAgIHByaXZhdGUgdm9pZCBjcmVhdGVSb3coU3RyaW5nIGlkLCBTdHJpbmcgYm9keSwgCi0gICAgICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikgCisKKyAgICBwcml2YXRlIHZvaWQgY3JlYXRlUm93KFN0cmluZyBpZCwgU3RyaW5nIGJvZHksCisgICAgICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgLy8gQ3JlYXRlIHJvdyBmb3IgdGhpcyBtZXNzYWdlCkBAIC0xOTgsOSArMTk4LDkgQEAKICAgICAgICAgc3RtdC5jbG9zZSgpOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBkZWxldGVSb3coU3RyaW5nIGlkLCBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikgCisgICAgcHJpdmF0ZSB2b2lkIGRlbGV0ZVJvdyhTdHJpbmcgaWQsIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgLy8gRGVsZXRlIHJvdyBmb3IgdGhpcyBtZXNzYWdlCiAgICAgICAgIGRlYnVnKCJEZWxldGVSb3cgd2l0aCBJRCA9ICIgKyBpZCk7CiAgICAgICAgIFN0YXRlbWVudCBzdG10ID0gZGJDb25uZWN0aW9uLmNyZWF0ZVN0YXRlbWVudCgpOwpAQCAtMjEzLDkgKzIxMyw5IEBACiAgICAgICAgIHN0bXQuY2xvc2UoKTsKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgZGVsZXRlQWxsKGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKSAKKyAgICBwcml2YXRlIHZvaWQgZGVsZXRlQWxsKGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgLy8gRGVsZXRlIHJvdyBmb3IgdGhpcyBtZXNzYWdlCiAgICAgICAgIFN0YXRlbWVudCBzdG10ID0gZGJDb25uZWN0aW9uLmNyZWF0ZVN0YXRlbWVudCgpOwogICAgICAgICBTdHJpbmcgcXVlcnkgPSAiREVMRVRFIEZST00gbWVzc2FnZXMiOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41LXJlc291cmNlc3htbC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL2J1aWxkLnhtbAppbmRleCA2Yzg0OGE0Li4xNzJiNTY1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL2J1aWxkLnhtbApAQCAtNTIsNyArNTIsNyBAQAogICA8dGFyZ2V0IG5hbWU9InJ1bnRlc3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmNsYXNzcGF0aCIgdmFsdWU9IiR7ZW52LkFQU19IT01FfS9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL2dlbmVyaWMtcmEuamFyIi8+Ci0JPHBhcmFtIG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJnZW5lcmljLWVtYmVkZGVkIiAvPgorICAgIDxwYXJhbSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iZ2VuZXJpYy1lbWJlZGRlZCIgLz4KICAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL01FVEEtSU5GL3JhLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvTUVUQS1JTkYvcmEueG1sCmluZGV4IDJjYTJlYmMuLjIxZGViOTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvTUVUQS1JTkYvcmEueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvTUVUQS1JTkYvcmEueG1sCkBAIC00NSw3ICs0NSw3IEBACiAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CiAgICAgICAgIDxpbmJvdW5kLXJlc291cmNlYWRhcHRlcj4KLSAgICAgICAgICAgIDxtZXNzYWdlYWRhcHRlcj4gICAgICAgICAgCisgICAgICAgICAgICA8bWVzc2FnZWFkYXB0ZXI+CiAgICAgICAgICAgICAgICAgPG1lc3NhZ2VsaXN0ZW5lcj4KICAgICAgICAgICAgICAgICAgICAgPG1lc3NhZ2VsaXN0ZW5lci10eXBlPgogICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdG9yLk15TWVzc2FnZUxpc3RlbmVyCkBAIC01Niw3ICs1Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICA8L2FjdGl2YXRpb25zcGVjLWNsYXNzPgogICAgICAgICAgICAgICAgICAgICA8L2FjdGl2YXRpb25zcGVjPgogICAgICAgICAgICAgICAgIDwvbWVzc2FnZWxpc3RlbmVyPgotICAgICAgICAgICAgPC9tZXNzYWdlYWRhcHRlcj4gICAgICAgICAgCisgICAgICAgICAgICA8L21lc3NhZ2VhZGFwdGVyPgogICAgICAgICA8L2luYm91bmQtcmVzb3VyY2VhZGFwdGVyPgogICAgICAgICA8YWRtaW5vYmplY3Q+CiAgICAgICAgICAgPGFkbWlub2JqZWN0LWludGVyZmFjZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvYWRtaW5vYmplY3QtaW50ZXJmYWNlPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvYnVpbGQueG1sCmluZGV4IDJiNzc0ODkuLjc4Mzk5MWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9idWlsZC54bWwKQEAgLTMwLDggKzMwLDggQEAKIAogICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iaW5pdC1jb21tb24iID4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0iYnVpbGQuY2xhc3Nlcy5kaXIiIHZhbHVlPSJjbGFzc2VzIiAvPgotCTxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjb25uZWN0b3IiIC8+CisgICAgPHBhcmFtIG5hbWU9ImJ1aWxkLmNsYXNzZXMuZGlyIiB2YWx1ZT0iY2xhc3NlcyIgLz4KKyAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY29ubmVjdG9yIiAvPgogICAgIDwvYW50Y2FsbD4KICAgICA8amFyIGphcmZpbGU9Ii4uL2dlbmVyaWMtcmEuamFyIiBiYXNlZGlyPSJjbGFzc2VzIgogICAgICAgICAgaW5jbHVkZXM9ImNvbm5lY3Rvci8qLmNsYXNzIiAvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YQppbmRleCA1NTUzM2Q0Li5mNTliMmIzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YQpAQCAtMTgsNyArMTgsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIENvbnRyb2xzIHsKICAgICBwdWJsaWMgc3RhdGljIE9iamVjdCByZWFkeUxvY2sgPSBuZXcgT2JqZWN0KCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEKaW5kZXggNjU4MjMzZS4uZDczYzg2MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIERlbGl2ZXJ5V29yayBpbXBsZW1lbnRzIFdvcmsgewogCkBAIC0zNiw3ICszNiw3IEBACiAgICAgcHJpdmF0ZSBTdHJpbmcgb3A7CiAgICAgcHJpdmF0ZSBib29sZWFuIGtlZXBDb3VudDsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnRlciA9IDA7Ci0gICAgCisKICAgICBwdWJsaWMgRGVsaXZlcnlXb3JrKE1lc3NhZ2VFbmRwb2ludCBlcCwgaW50IG51bU9mTWVzc2FnZXMsIFN0cmluZyBvcCkgewogICAgICAgICB0aGlzLmVwID0gZXA7CiAgICAgICAgIHRoaXMubnVtID0gbnVtT2ZNZXNzYWdlczsKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICAgICAgdGhpcy5rZWVwQ291bnQgPSBmYWxzZTsKICAgICB9CiAKLSAgICBwdWJsaWMgRGVsaXZlcnlXb3JrKE1lc3NhZ2VFbmRwb2ludCBlcCwgaW50IG51bU9mTWVzc2FnZXMsIAorICAgIHB1YmxpYyBEZWxpdmVyeVdvcmsoTWVzc2FnZUVuZHBvaW50IGVwLCBpbnQgbnVtT2ZNZXNzYWdlcywKICAgICAgICAgICAgIFN0cmluZyBvcCwgYm9vbGVhbiBrZWVwQ291bnQpIHsKICAgICAgICAgdGhpcy5lcCA9IGVwOwogICAgICAgICB0aGlzLm51bSA9IG51bU9mTWVzc2FnZXM7CkBAIC01NSw3ICs1NSw3IEBACiAgICAgcHVibGljIHZvaWQgcnVuKCkgewogCiAgICAgICAgIGRlYnVnKCJFTlRFUi4uLiIpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgLy9NZXRob2Qgb25NZXNzYWdlID0gZ2V0T25NZXNzYWdlTWV0aG9kKCk7CiAgICAgICAgICAgICAvL2VwLmJlZm9yZURlbGl2ZXJ5KG9uTWVzc2FnZSk7CkBAIC03OCwxMSArNzgsMTEgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy9lcC5hZnRlckRlbGl2ZXJ5KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCJMRUFWRS4uLiIpOwogICAgIH0KIApAQCAtOTMsMTQgKzkzLDE0IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSBNZXRob2QgZ2V0T25NZXNzYWdlTWV0aG9kKCkgewotICAgICAgICAKKwogICAgICAgICBNZXRob2Qgb25NZXNzYWdlTWV0aG9kID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENsYXNzIG1zZ0xpc3RlbmVyQ2xhc3MgPSBjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIuY2xhc3M7CiAgICAgICAgICAgICBDbGFzc1tdIHBhcmFtVHlwZXMgPSB7IGphdmEubGFuZy5TdHJpbmcuY2xhc3MgfTsKLSAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9IAorICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0KICAgICAgICAgICAgICAgICBtc2dMaXN0ZW5lckNsYXNzLmdldE1ldGhvZCgib25NZXNzYWdlIiwgcGFyYW1UeXBlcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhCmluZGV4IDEwMGNhY2UuLmZhOTNmNjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhCkBAIC0zNiw3ICszNiw3IEBACiAgICAgICAgICAgICAgIGZsYWdUb1N0cmluZyhmbGFncykpOwogICAgIH0KIAotICAgIAorCiAgICAgcHVibGljIHZvaWQgZm9yZ2V0KFhpZCB4aWQpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5mb3JnZXQ6ICIgKyB4aWRUb1N0cmluZyh4aWQpKTsKICAgICB9CkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5wcmVwYXJlOiAiICsgeGlkVG9TdHJpbmcoeGlkKSk7CiAgICAgICAgIHJldHVybiBYQVJlc291cmNlLlhBX09LOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBYaWRbXSByZWNvdmVyKGludCBmbGFnKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2UucmVjb3ZlcjogIiArIGZsYWdUb1N0cmluZyhmbGFnKSk7CiAgICAgICAgIHJldHVybiBudWxsOwpAQCAtNjYsNyArNjYsNyBAQAogICAgIHB1YmxpYyBib29sZWFuIHNldFRyYW5zYWN0aW9uVGltZW91dChpbnQgc2Vjb25kcykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHN0YXJ0KFhpZCB4aWQsIGludCBmbGFncykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLnN0YXJ0OiAiICsgeGlkVG9TdHJpbmcoeGlkKSArICIsIiArCiAgICAgICAgICAgICAgICAgZmxhZ1RvU3RyaW5nKGZsYWdzKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9jb25uZWN0b3IvTWVzc2FnZXMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhCmluZGV4IGI1YjBmMDIuLjRjOWMwMTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhCkBAIC0yMSw3ICsyMSw3IEBACiAvKioKICAqIGNvbGxlY3Rpb24gb2YgbWVzc2FnZXMuCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBNZXNzYWdlcyB7CiAKQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICBTdHJpbmcgY29tbWFuZCAgPSBhcmdzWzBdOwogICAgICAgIFN0cmluZyBkZXN0TmFtZSA9IGFyZ3NbMV07CiAgICAgICAgU3RyaW5nIG1lc3NhZ2UgID0gYXJnc1syXTsKLSAgIAorCiAgICAgICAgaWYgKCEiYWRkIi5lcXVhbHMoY29tbWFuZCkpIHsKICAgICAgICAgICAgU3lzdGVtLmV4aXQoMSk7CiAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEKaW5kZXggODYyZjlmZi4uZDE5OWQwMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdC5qYXZhCkBAIC0zOCwxMSArMzgsMTEgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBpbml0aWFsaXplKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiW015QWRtaW5PYmplY3RdIEluaXRpYWxpemluZyB0aGUgQ29udHJvbHMgdG8gZmFsc2U6IityZXNldENvbnRyb2wpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW015QWRtaW5PYmplY3RdIEluaXRpYWxpemluZyB0aGUgQ29udHJvbHMgdG8gZmFsc2U6IityZXNldENvbnRyb2wpOwogICAgICAgICBpZiAocmVzZXRDb250cm9sLmVxdWFscygiQkVHSU5OSU5HIikpIHsKICAgICAgICAgICAgQ29udHJvbHMuZG9uZT1mYWxzZTsKLQkgICBTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXplZCB0aGUgQ29udHJvbHMgdG8gZmFsc2UiKTsKLQl9CisgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6ZWQgdGhlIENvbnRyb2xzIHRvIGZhbHNlIik7CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIGRvbmUoKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9jb25uZWN0b3IvTXlXb3JrLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9jb25uZWN0b3IvTXlXb3JrLmphdmEKaW5kZXggMmVjZWM2My4uYTlhODg4MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvY29ubmVjdG9yL015V29yay5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9NeVdvcmsuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIE15V29yayBpbXBsZW1lbnRzIFdvcmsgewogCkBAIC0zNSw3ICszNSw3IEBACiAgICAgcHJpdmF0ZSBib29sZWFuIHN0b3AgPSBmYWxzZTsKICAgICBwcml2YXRlIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZmFjdG9yeTsKICAgICBwcml2YXRlIFdvcmtNYW5hZ2VyIHdtOwotICAgIAorCiAgICAgcHVibGljIE15V29yaygKICAgICAgICAgICAgIFN0cmluZyBuYW1lLCBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGZhY3RvcnksIFdvcmtNYW5hZ2VyIHdtKSB7CiAgICAgICAgIHRoaXMuZmFjdG9yeSA9IGZhY3Rvcnk7CkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgICAgICB0cnkgewogCiAgICAgICAgICAgICAgICAgTWV0aG9kIG9uTWVzc2FnZSA9IGdldE9uTWVzc2FnZU1ldGhvZCgpOwotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaXNEZWxpdmVyeVRyYW5zYWN0ZWQgPSAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpc0RlbGl2ZXJ5VHJhbnNhY3RlZCA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3J5LmlzRGVsaXZlcnlUcmFuc2FjdGVkKG9uTWVzc2FnZSkpOwogCiAgICAgICAgICAgICAgICAgLyoKQEAgLTcwLDcgKzcwLDcgQEAKICAgICAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiTEVBVkUuLi4iKTsKICAgICB9CiAKQEAgLTg1LDE0ICs4NSwxNCBAQAogICAgIH0KIAogICAgIHB1YmxpYyBNZXRob2QgZ2V0T25NZXNzYWdlTWV0aG9kKCkgewotICAgICAgICAKKwogICAgICAgICBNZXRob2Qgb25NZXNzYWdlTWV0aG9kID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENsYXNzIG1zZ0xpc3RlbmVyQ2xhc3MgPSBjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIuY2xhc3M7CiAgICAgICAgICAgICBDbGFzc1tdIHBhcmFtVHlwZXMgPSB7IGphdmEubGFuZy5TdHJpbmcuY2xhc3MgfTsKLSAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9IAorICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0KICAgICAgICAgICAgICAgICBtc2dMaXN0ZW5lckNsYXNzLmdldE1ldGhvZCgib25NZXNzYWdlIiwgcGFyYW1UeXBlcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhCmluZGV4IDk0NmQ5ODcuLmJiNzkxOGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhCkBAIC0yNCw5ICsyNCw5IEBACiAgKiBzbyB0aGF0IHRoZSBhcHAgc2VydmVyIGNhbiBpbnN0YW50aWF0ZSBhbmQgY29uZmlndXJlCiAgKiBpdCBhdCB0aGUgcnVudGltZS4KICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwotcHVibGljIGNsYXNzIFNpbXBsZUFjdGl2YXRpb25TcGVjIAorcHVibGljIGNsYXNzIFNpbXBsZUFjdGl2YXRpb25TcGVjCiAgICAgaW1wbGVtZW50cyBBY3RpdmF0aW9uU3BlYywgamF2YS5pby5TZXJpYWxpemFibGUgewogCiAgICAgcHJpdmF0ZSBTdHJpbmcgZGVzdGluYXRpb25OYW1lOwpAQCAtNDIsNyArNDIsNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzdGluYXRpb25OYW1lICgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZGVzdGluYXRpb25OYW1lOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldERlc3RpbmF0aW9uTmFtZSAoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgZGVidWcoInNldERlc3RpbmF0aW9uTmFtZSgpIGNhbGxlZC4uLiBuYW1lID0gIiArIG5hbWUpOwogICAgICAgICB0aGlzLmRlc3RpbmF0aW9uTmFtZSA9IG5hbWU7CkBAIC01MSw3ICs1MSw3IEBACiAgICAgcHVibGljIFN0cmluZyBnZXREZXN0aW5hdGlvblR5cGUoKSB7CiAgICAgICAgIHJldHVybiB0aGlzLmRlc3RpbmF0aW9uVHlwZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXREZXN0aW5hdGlvblR5cGUgKFN0cmluZyB0eXBlKSB7CiAgICAgICAgIGRlYnVnKCJzZXREZXN0aW5hdGlvblR5cGUgKCkgY2FsbGVkLi4uIHR5cGUgPSAiICsgdHlwZSk7CiAgICAgICAgIHRoaXMuZGVzdGluYXRpb25UeXBlPSB0eXBlOwpAQCAtNjAsNyArNjAsNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGVzdFByb3AoKSB7CiAgICAgICAgIHJldHVybiB0aGlzLnRlc3RQcm9wOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFRlc3RQcm9wIChTdHJpbmcgdGVzdFByb3ApIHsKICAgICAgICAgZGVidWcoInNldFRlc3RQcm9wICgpIGNhbGxlZC4uLiB0ZXN0UHJvcCA9ICIgKyB0ZXN0UHJvcCk7CiAgICAgICAgIHRoaXMudGVzdFByb3AgPSB0ZXN0UHJvcDsKQEAgLTc2LDcgKzc2LDcgQEAKICAgICAgICAgdGhpcy5yZXNvdXJjZWFkYXB0ZXIgPSByYTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCB2YWxpZGF0ZSgpIHt9IAorICAgIHB1YmxpYyB2b2lkIHZhbGlkYXRlKCkge30KIAogICAgIHByaXZhdGUgdm9pZCBkZWJ1ZyAoU3RyaW5nIG1lc3NhZ2UpCiAgICAgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEKaW5kZXggMjFlNzkxZC4uMWNmNWFjMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbC5qYXZhCkBAIC00MCw5ICs0MCw5IEBACiAvKioKICAqIFRoaXMgaXMgYSBzYW1wbGUgcmVzb3VyY2UgYWRhcHRlcgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCi1wdWJsaWMgY2xhc3MgU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbCAKK3B1YmxpYyBjbGFzcyBTaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsCiBpbXBsZW1lbnRzIFJlc291cmNlQWRhcHRlciwgamF2YS5pby5TZXJpYWxpemFibGUgewogCiAgICAgcHJpdmF0ZSBCb290c3RyYXBDb250ZXh0IGN0eDsKQEAgLTU4LDcgKzU4LDcgQEAKIAogICAgIHB1YmxpYyB2b2lkCiAgICAgc3RhcnQoQm9vdHN0cmFwQ29udGV4dCBjdHgpIHRocm93cyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbnsKLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIjAwMS4gU2ltcGxlIFJBIHN0YXJ0Li4uIik7CiAKICAgICAgICAgdGhpcy5jdHggPSBjdHg7CkBAIC02OCwyMSArNjgsMjEgQEAKIAogICAgICAgICAvL3Rlc3RpbmcgY3JlYXQgdGltZXIKICAgICAgICAgVGltZXIgdGltZXIgPSBudWxsOwotCSAgdHJ5ewotCSAgICAgIHRpbWVyID0gY3R4LmNyZWF0ZVRpbWVyKCk7Ci0JICB9IGNhdGNoKFVuYXZhaWxhYmxlRXhjZXB0aW9uIHVlKSB7Ci0JICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFcnJvciIpOwotCSAgICAgIHRocm93IG5ldyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbigiRXJyb3IgZm9ybSBib290c3RyYXAiKTsKLQkgIH0KKyAgICAgIHRyeXsKKyAgICAgICAgICB0aW1lciA9IGN0eC5jcmVhdGVUaW1lcigpOworICAgICAgfSBjYXRjaChVbmF2YWlsYWJsZUV4Y2VwdGlvbiB1ZSkgeworICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXJyb3IiKTsKKyAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VBZGFwdGVySW50ZXJuYWxFeGNlcHRpb24oIkVycm9yIGZvcm0gYm9vdHN0cmFwIik7CisgICAgICB9CiAgICAgICAgIGRlYnVnKCIwMDQuIFNpbXBsZSBSQSBzdGFydC4uLiIpOwogCiAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAKKwogICAgICAgICAgIFhBVGVybWluYXRvciB4YSA9IGN0eC5nZXRYQVRlcm1pbmF0b3IoKTsKLSAgICAgICAgICAKKwogICAgICAgICAgIFhpZCB4aWQxID0gbmV3IFhJRCgpOwogICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFhJRDEgPSAiICsgeGlkMSk7Ci0gICAgICAgICAgCisKICAgICAgICAgICBFeGVjdXRpb25Db250ZXh0IGVjID0gbmV3IEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICAgICAgICBlYy5zZXRYaWQoeGlkMSk7CiAgICAgICAgICAgZWMuc2V0VHJhbnNhY3Rpb25UaW1lb3V0KDUqMTAwMCk7IC8vNSBzZWNvbmRzCkBAIC05MiwxNCArOTIsMTQgQEAKICAgICAgICAgICB3bS5kb1dvcmsob3V0dywgMSoxMDAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgeGEuY29tbWl0KHhpZDEsIHRydWUpOwogICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgIAorCiAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgZXggPSAiICsgZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICB4YS5yb2xsYmFjayh4aWQxKTsKICAgICAgICAgICB9Ci0gICAgICAgICAgCisKICAgICAgICAgICBYaWQgeGlkMiA9IG5ldyBYSUQoKTsKICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBYSUQyID0gIiArIHhpZDIpOwotICAgICAgICAgIAorCiAgICAgICAgICAgZWMgPSBuZXcgRXhlY3V0aW9uQ29udGV4dCgpOwogICAgICAgICAgIGVjLnNldFhpZCh4aWQyKTsKICAgICAgICAgICBlYy5zZXRUcmFuc2FjdGlvblRpbWVvdXQoNSoxMDAwKTsgLy81IHNlY29uZHMKQEAgLTExNiw3ICsxMTYsNyBAQAogICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgIH0KIAotICAgICAgICAKKwogICAgICAgICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IDM7IGkrKykgewogICAgICAgICAgIFRlc3RXTVdvcmsgdyA9IG5ldyBUZXN0V01Xb3JrKGksIGZhbHNlKTsKICAgICAgICAgICB0cnkgewpAQCAtMTI0LDcgKzEyNCw3IEBACiAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGQUlMOiBDQVVHSFQgZXhjZXB0aW9uIDogaSA9ICIgKyBpKTsKICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgICB9IAorICAgICAgICAgIH0KICAgICAgICAgICB9CiAKICAgICAgICAgICBmb3IgKGludCBpID0gMyA7IGkgPCA2OyBpKyspIHsKQEAgLTE3Miw3ICsxNzIsNyBAQAogICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgIH0KICAgICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCIwMDUuIFNpbXBsZSBSQSBzdGFydC4uLiIpOwogICAgIH0KIApAQCAtMjA0LDEyICsyMDQsMTIgQEAKIAogICAgIHB1YmxpYyB2b2lkCiAgICAgZW5kcG9pbnREZWFjdGl2YXRpb24gKAotICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBlbmRwb2ludEZhY3RvcnksIAorICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBlbmRwb2ludEZhY3RvcnksCiAgICAgICAgICAgICBBY3RpdmF0aW9uU3BlYyBzcGVjKSB7CiAgICAgICAgIGRlYnVnICgiZW5kcG9pbnREZWFjdGl2YXRpb24gY2FsbGVkLi4uIik7CiAgICAgICAgICgoV29ya0Rpc3BhdGNoZXIpIHdvcmspLnN0b3AoKTsKICAgICB9Ci0gIAorCiAgICAgcHVibGljIFN0cmluZyBnZXRUZXN0TmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHRlc3ROYW1lOwogICAgIH0KQEAgLTIyNSw3ICsyMjUsNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbF0gPT0+ICIgKyBtZXNzYWdlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgWEFSZXNvdXJjZVtdIGdldFhBUmVzb3VyY2VzKEFjdGl2YXRpb25TcGVjW10gc3BlY3MpIAorICAgIHB1YmxpYyBYQVJlc291cmNlW10gZ2V0WEFSZXNvdXJjZXMoQWN0aXZhdGlvblNwZWNbXSBzcGVjcykKICAgICAgICAgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvY29ubmVjdG9yL1Rlc3RXTVdvcmsuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9UZXN0V01Xb3JrLmphdmEKaW5kZXggN2U1ODVhMy4uOWNkMDY2MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvY29ubmVjdG9yL1Rlc3RXTVdvcmsuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9jb25uZWN0b3IvVGVzdFdNV29yay5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgVGVzdFdNV29yayBpbXBsZW1lbnRzIFdvcmsgewogCkBAIC00Miw4ICs0Miw4IEBACiAgICAgcHVibGljIFRlc3RXTVdvcmsoaW50IGlkLCBib29sZWFuIGlzUm9ndWUpIHsKICAgICAgICAgdGhpcyhpZCwgaXNSb2d1ZSwgZmFsc2UsIG51bGwpOwogICAgIH0KLSAgICAKLSAgICBwdWJsaWMgVGVzdFdNV29yayhpbnQgaWQsIGJvb2xlYW4gaXNSb2d1ZSwgCisKKyAgICBwdWJsaWMgVGVzdFdNV29yayhpbnQgaWQsIGJvb2xlYW4gaXNSb2d1ZSwKICAgICAgICAgICAgIGJvb2xlYW4gZG9OZXN0LCBFeGVjdXRpb25Db250ZXh0IGN0eCkgewogICAgICAgICB0aGlzLmlkID0gaWQ7CiAgICAgICAgIHRoaXMuaXNSb2d1ZSA9IGlzUm9ndWU7CkBAIC03NywxMCArNzcsMTAgQEAKICAgICAgICAgICAgIH0gY2F0Y2ggKFdvcmtFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgICAgICBpZiAoZXguZ2V0RXJyb3JDb2RlKCkuZXF1YWxzKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdvcmtFeGNlcHRpb24uVFhfQ09OQ1VSUkVOVF9XT1JLX0RJU0FMTE9XRUQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsgCisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUEFTUzogQ0FVR0hUIEVYUEVDVEVEID0gIiArIGV4LmdldEVycm9yQ29kZSgpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArIAorICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZBSUw6IENBVUdIVCBVTkVYUEVDVEVEID0gIiArIGV4LmdldEVycm9yQ29kZSgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC05Miw3ICs5Miw3IEBACiAgICAgICAgICAgICAgICAgZWMuc2V0VHJhbnNhY3Rpb25UaW1lb3V0KDUqMTAwMCk7IC8vNSBzZWNvbmRzCiAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKG5lc3RlZFdvcmssIDEqMTAwMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAiRkFJTDogQ0FVR0hUIFVORVhQRUNURUQgPSAiICsgZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQppbmRleCAzNGE2MDRmLi5jZDk4YzQ1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQpAQCAtMzMsNyArMzMsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIFdvcmtEaXNwYXRjaGVyIGltcGxlbWVudHMgV29yayB7CiAKQEAgLTQ0LDExICs0NCwxMSBAQAogICAgIHByaXZhdGUgQWN0aXZhdGlvblNwZWMgc3BlYzsKICAgICBwcml2YXRlIFdvcmtNYW5hZ2VyIHdtOwogICAgIHByaXZhdGUgWEFUZXJtaW5hdG9yIHhhOwotICAgIAorCiAgICAgcHVibGljIFdvcmtEaXNwYXRjaGVyKAogICAgICAgICAgICAgU3RyaW5nIGlkLAogICAgICAgICAgICAgQm9vdHN0cmFwQ29udGV4dCBjdHgsCi0gICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGZhY3RvcnksIAorICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBmYWN0b3J5LAogICAgICAgICAgICAgQWN0aXZhdGlvblNwZWMgc3BlYykgewogICAgICAgICB0aGlzLmlkICAgICAgPSBpZDsKICAgICAgICAgdGhpcy5jdHggICAgID0gY3R4OwpAQCAtNjEsNyArNjEsNyBAQAogICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKIAogICAgICAgICBkZWJ1ZygiRU5URVIuLi4iKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHN5bmNocm9uaXplZCAoQ29udHJvbHMucmVhZHlMb2NrKSB7CiAgICAgICAgICAgICAgICAgZGVidWcoIldBSVQuLi4iKTsKQEAgLTgzLDI2ICs4MywyNiBAQAogICAgICAgICAgICAgdHJ5IHsKIAogICAgICAgICAgICAgICAgIE1ldGhvZCBvbk1lc3NhZ2UgPSBnZXRPbk1lc3NhZ2VNZXRob2QoKTsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlzRGVsaXZlcnlUcmFuc2FjdGVkID0gIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaXNEZWxpdmVyeVRyYW5zYWN0ZWQgPSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3RvcnkuaXNEZWxpdmVyeVRyYW5zYWN0ZWQob25NZXNzYWdlKSk7CiAKICAgICAgICAgICAgICAgICBpZiAoIWZhY3RvcnkuaXNEZWxpdmVyeVRyYW5zYWN0ZWQob25NZXNzYWdlKSkgewogICAgICAgICAgICAgICAgICAgICAvL01lc3NhZ2VFbmRwb2ludCBlcCA9IGZhY3RvcnkuY3JlYXRlRW5kcG9pbnQobnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIC8vRGVsaXZlcnlXb3JrIGQgPSBuZXcgRGVsaXZlcnlXb3JrKCJOT19UWCIsIGVwKTsgCisgICAgICAgICAgICAgICAgICAgIC8vRGVsaXZlcnlXb3JrIGQgPSBuZXcgRGVsaXZlcnlXb3JrKCJOT19UWCIsIGVwKTsKICAgICAgICAgICAgICAgICAgICAgLy93bS5kb1dvcmsoZCwgMCwgbnVsbCwgbnVsbCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy9NZXNzYWdlRW5kcG9pbnQgZXAgPSBmYWN0b3J5LmNyZWF0ZUVuZHBvaW50KG51bGwpOwogICAgICAgICAgICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnQgZXAgPSBmYWN0b3J5LmNyZWF0ZUVuZHBvaW50KG5ldyBGYWtlWEFSZXNvdXJjZSgpKTsKICAgICAgICAgICAgICAgICAgICAgaW50IG51bU9mTWVzc2FnZXMgPSA1OwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvL2ltcG9ydGluZyB0cmFuc2FjdGlvbgogCiAgICAgICAgICAgICAgICAgICAgIC8vd3JpdGUvY29tbWl0CiAgICAgICAgICAgICAgICAgICAgIEV4ZWN1dGlvbkNvbnRleHQgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7CiAKLSAgICAgICAgICAgICAgICAgICAgRGVsaXZlcnlXb3JrIHcgPSAKKyAgICAgICAgICAgICAgICAgICAgRGVsaXZlcnlXb3JrIHcgPQogICAgICAgICAgICAgICAgICAgICAgICAgbmV3IERlbGl2ZXJ5V29yayhlcCwgbnVtT2ZNZXNzYWdlcywgIldSSVRFIik7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgdHJ1ZSk7CkBAIC0xMTAsNyArMTEwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIkRPTkUgV1JJVEUgVE8gREIiKTsKICAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMuZXhwZWN0ZWRSZXN1bHRzID0gbnVtT2ZNZXNzYWdlczsKICAgICAgICAgICAgICAgICAgICAgbm90aWZ5QW5kV2FpdCgpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvL2RlbGV0ZS9yb2xsYmFjawogICAgICAgICAgICAgICAgICAgICBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKQEAgLTEyNiw3ICsxMjYsNyBAQAogICAgICAgICAgICAgICAgICAgICAvL2RlbGV0ZS9jb21taXQKICAgICAgICAgICAgICAgICAgICAgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIHcgPSBuZXcgRGVsaXZlcnlXb3JrKGVwLCBudW1PZk1lc3NhZ2VzLCAiREVMRVRFIik7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgdHJ1ZSk7CkBAIC0xNTAsNyArMTUwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgLy9kZWxldGUvY29tbWl0CiAgICAgICAgICAgICAgICAgICAgIGVjID0gc3RhcnRUeCgpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiU3RhcnQgVFggLSAiICsgZWMuZ2V0WGlkKCkpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICB3ID0gbmV3IERlbGl2ZXJ5V29yayhlcCwgbnVtT2ZNZXNzYWdlcywgIkRFTEVURSIpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIHRydWUpOwpAQCAtMTk1LDcgKzE5NSw3IEBACiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGlmIChYQVJlc291cmNlLlhBX09LID09IHhhLnByZXBhcmUoZWMuZ2V0WGlkKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJYQSBQUkVQQVJFL0NPTU1JVC4gRE9ORSBXUklURSBUTyBEQiAiKTsKQEAgLTIwNywxOSArMjA3LDE5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBDb250cm9scy5leHBlY3RlZFJlc3VsdHMgPSAzOwogICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZ5QW5kV2FpdCgpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vZGVsZXRlIGFsbC4KICAgICAgICAgICAgICAgICAgICAgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIHcgPSBuZXcgRGVsaXZlcnlXb3JrKGVwLCAxLCAiREVMRVRFX0FMTCIpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIHRydWUpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiRE9ORSBERUxFVEUgQUxMIEZST00gREIiKTsKICAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMuZXhwZWN0ZWRSZXN1bHRzID0gMDsKICAgICAgICAgICAgICAgICAgICAgbm90aWZ5QW5kV2FpdCgpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBkb25lKCk7CiAgICAgICAgICAgICAgICAgfQogCkBAIC0yNDMsNyArMjQzLDcgQEAKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiTEVBVkUuLi4iKTsKICAgICB9CiAKQEAgLTI1OCwxNCArMjU4LDE0IEBACiAgICAgfQogCiAgICAgcHVibGljIE1ldGhvZCBnZXRPbk1lc3NhZ2VNZXRob2QoKSB7Ci0gICAgICAgIAorCiAgICAgICAgIE1ldGhvZCBvbk1lc3NhZ2VNZXRob2QgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ2xhc3MgbXNnTGlzdGVuZXJDbGFzcyA9IGNvbm5lY3Rvci5NeU1lc3NhZ2VMaXN0ZW5lci5jbGFzczsKICAgICAgICAgICAgIENsYXNzW10gcGFyYW1UeXBlcyA9IHsgamF2YS5sYW5nLlN0cmluZy5jbGFzcyB9OwotICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0gCisgICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPQogICAgICAgICAgICAgICAgIG1zZ0xpc3RlbmVyQ2xhc3MuZ2V0TWV0aG9kKCJvbk1lc3NhZ2UiLCBwYXJhbVR5cGVzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KQEAgLTI4OCwxMyArMjg4LDEzIEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAvL1NsZWVwIGZvciA1IHNlY29uZHMKICAgICAgICAgICAgIC8vVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCg1KjEwMDApOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHN5bmNocm9uaXplZChDb250cm9scy5yZWFkeUxvY2spIHsKICAgICAgICAgICAgICAgICAvL05vdGlmeSB0aGUgY2xpZW50IHRvIGNoZWNrIHRoZSByZXN1bHRzCi0gICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLm5vdGlmeSgpOyAKLSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2subm90aWZ5KCk7CisKICAgICAgICAgICAgICAgICAvL1dhaXQgdW50aWwgcmVzdWx0cyBhcmUgdmVyaWZpZWQgYnkgdGhlIGNsaWVudAotICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay53YWl0KCk7IAorICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay53YWl0KCk7CiAKICAgICAgICAgICAgICAgICBpZiAoc3RvcCkgewogICAgICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0zMTAsNyArMzEwLDcgQEAKICAgICAgICAgICAgIENvbnRyb2xzLmRvbmUgPSB0cnVlOwogICAgICAgICAgICAgc3luY2hyb25pemVkKENvbnRyb2xzLnJlYWR5TG9jaykgewogICAgICAgICAgICAgICAgIC8vTm90aWZ5IHRoZSBjbGllbnQgdG8gY2hlY2sgdGhlIHJlc3VsdHMKLSAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2subm90aWZ5KCk7IAorICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay5ub3RpZnkoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YQppbmRleCA1NTI4NzNlLi5kYzg3YmI0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sL3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41LXJlc291cmNlc3htbC9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhCkBAIC0zNiw4ICszNiw4IEBACiAgICAgcHVibGljIGludCBicmFuY2hRdWFsaWZpZXI7CiAgICAgcHVibGljIGludCBnbG9iYWxUeElEOwogCi0gICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEdUUklEU0laRT0gNjQ7IAotICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhCUVVBTFNJWkU9IDY0OyAKKyAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYR1RSSURTSVpFPSA2NDsKKyAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYQlFVQUxTSVpFPSA2NDsKIAogICAgIHB1YmxpYyBYSUQoKSB7CiAgICAgICAgIGludCBmb28gPSBJRCsrOwpAQCAtNTUsMTAgKzU1LDEwIEBACiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAgICAgICAgICAgICAgICAvLyBJdCBjYW4ndCBiZSBlcXVhbAogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIG90aGVyID0gKFhJRClvOyAgICAgICAgICAgICAgICAgICAvLyBUaGUgb3RoZXIgWElELCBub3cgcHJvcGVybHkgY2FzdAotICAgICAgICAKLSAgICAgICAgaWYgKHRoaXMuZm9ybWF0SUQgPT0gb3RoZXIuZm9ybWF0SUQgCisKKyAgICAgICAgaWYgKHRoaXMuZm9ybWF0SUQgPT0gb3RoZXIuZm9ybWF0SUQKICAgICAgICAgICAgICAgICAmJiB0aGlzLmJyYW5jaFF1YWxpZmllciA9PSBvdGhlci5icmFuY2hRdWFsaWZpZXIKICAgICAgICAgICAgICAgICAmJiB0aGlzLmdsb2JhbFR4SUQgPT0gb3RoZXIuZ2xvYmFsVHhJRCkgewogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC05OCw3ICs5OCw3IEBACiAgICAgICAgICAgICAgICAgImZvcm1hdElEKCIgICAgICsgZm9ybWF0SUQgICAgICsgIiksICIgKwogICAgICAgICAgICAgICAgICJicmFuY2hRdWFsaWZpZXIgKCIgKyBicmFuY2hRdWFsaWZpZXIgKyAiKSwgIiArCiAgICAgICAgICAgICAgICAgImdsb2JhbFR4SUQoIiArIGdsb2JhbFR4SUQgKyAiKX0iKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIHM7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvYXBwL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9hcHAvYnVpbGQueG1sCmluZGV4IGIzZDdlYjQuLjBkOGY5OTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9hcHAvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9hcHAvYnVpbGQueG1sCkBAIC0zOCw4ICszOCw4IEBACiAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhciIvPgogIDwhLS0KICAgIDxhbnRjYWxsIHRhcmdldD0iZWFyLWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJnZW5lcmljLWVtYmVkZGVkIi8+Ci0JPHBhcmFtIG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9Ik1FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIvPgorICAgIDxwYXJhbSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iZ2VuZXJpYy1lbWJlZGRlZCIvPgorICAgIDxwYXJhbSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJNRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiLz4KICAgIDwvYW50Y2FsbD4KICAtLT4KICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvYXBwL3NyYy9NRVRBLUlORi9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9hcHAvc3JjL01FVEEtSU5GL2VqYi1qYXIueG1sCmluZGV4IDY5NmRkM2UuLjVhNTIxMGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9hcHAvc3JjL01FVEEtSU5GL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9hcHAvc3JjL01FVEEtSU5GL2VqYi1qYXIueG1sCkBAIC04MSw4ICs4MSw4IEBACiAgICAgICAgIDxyZXMtc2hhcmluZy1zY29wZT5TaGFyZWFibGU8L3Jlcy1zaGFyaW5nLXNjb3BlPgogICAgICAgPC9yZXNvdXJjZS1yZWY+CiAgICAgICA8cmVzb3VyY2UtZW52LXJlZj4KLQk8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmVpcy90ZXN0QWRtaW48L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KLQk8cmVzb3VyY2UtZW52LXJlZi10eXBlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC9yZXNvdXJjZS1lbnYtcmVmLXR5cGU+CisgICAgPHJlc291cmNlLWVudi1yZWYtbmFtZT5laXMvdGVzdEFkbWluPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+CisgICAgPHJlc291cmNlLWVudi1yZWYtdHlwZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvcmVzb3VyY2UtZW52LXJlZi10eXBlPgogICAgICAgPC9yZXNvdXJjZS1lbnYtcmVmPgogICAgICAgPHNlY3VyaXR5LWlkZW50aXR5PgogICAgICAgICA8dXNlLWNhbGxlci1pZGVudGl0eS8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvYXBwL3NyYy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvYXBwL3NyYy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwKaW5kZXggZjcyYWQ3OS4uNmUwZGFlZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9hcHAvc3JjL01FVEEtSU5GL3N1bi1lamItamFyLnhtbApAQCAtODMsNyArODMsNyBAQAogICAgICAgPC9yZXNvdXJjZS1yZWY+CiAgICAgICA8cmVzb3VyY2UtZW52LXJlZj4KICAgICAgICAgPHJlc291cmNlLWVudi1yZWYtbmFtZT5laXMvdGVzdEFkbWluPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+Ci0JPGpuZGktbmFtZT5laXMvdGVzdEFkbWluPC9qbmRpLW5hbWU+CisgICAgPGpuZGktbmFtZT5laXMvdGVzdEFkbWluPC9qbmRpLW5hbWU+CiAgICAgICA8L3Jlc291cmNlLWVudi1yZWY+CiAgICAgICA8Z2VuLWNsYXNzZXMvPgogICAgIDwvZWpiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L2FwcC9zcmMvYmVhbnMvTWVzc2FnZUNoZWNrZXJFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9hcHAvc3JjL2JlYW5zL01lc3NhZ2VDaGVja2VyRUpCLmphdmEKaW5kZXggYjUwZDdlNC4uNTQyOWVhOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L2FwcC9zcmMvYmVhbnMvTWVzc2FnZUNoZWNrZXJFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvYXBwL3NyYy9iZWFucy9NZXNzYWdlQ2hlY2tlckVKQi5qYXZhCkBAIC00Myw3ICs0Myw3IEBACiAKICAgICBwdWJsaWMgTWVzc2FnZUNoZWNrZXJFSkIoKSB7fQogCi0gICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgCisgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkKICAgICAgICAgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYmVhbiBjcmVhdGVkIik7CiAgICAgICAgIGhlbGRDb24gPSBudWxsOwpAQCAtNzEsMTEgKzcxLDExIEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKENvbnRyb2xzLmdldExvY2tPYmplY3QoKSkgewogICAgICAgICAgICAgICAgIC8vVGVsbCB0aGUgcmVzb3VyY2UgYWRhcHRlciB0aGUgY2xpZW50IGlzIHJlYWR5IHRvIHJ1bgotICAgICAgICAgICAgICAgIENvbnRyb2xzLmdldExvY2tPYmplY3QoKS5ub3RpZnlBbGwoKTsgCi0gICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLm5vdGlmeUFsbCgpOworCiAgICAgICAgICAgICAgICAgZGVidWcoIk5PVElGSUVELi4uIFNUQVJUIFdBSVRJTkciKTsKICAgICAgICAgICAgICAgICAvL1dhaXQgdW50aWwgYmVpbmcgdG9sZCB0byByZWFkIGZyb20gdGhlIGRhdGFiYXNlCi0gICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLndhaXQoKTsgCisgICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLndhaXQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTgzLDIyICs4MywyMiBAQAogICAgIH0KIAogICAgIHB1YmxpYyBpbnQgZ2V0TWVzc2FnZUNvdW50KCkgewotCXRyeSB7CisgICAgdHJ5IHsKICAgICAgICAgICAgIENvbm5lY3Rpb24gY29uID0gZ2V0RnJlc2hDb25uZWN0aW9uKCk7CiAgICAgICAgICAgICBpbnQgY291bnQxID0gZ2V0Q291bnQoY29uKTsKICAgICAgICAgICAgIGNvbi5jbG9zZSgpOwotICAgICAgICAgICAgCi0JICAgIC8qCisKKyAgICAgICAgLyoKICAgICAgICAgICAgIHN5bmNocm9uaXplZChDb250cm9scy5nZXRMb2NrT2JqZWN0KCkpIHsKICAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkubm90aWZ5KCk7CiAgICAgICAgICAgICB9Ci0JICAgICovCi0gICAgICAgICAgICAgICAgCisgICAgICAgICovCisKICAgICAgICAgICAgIHJldHVybiBjb3VudDE7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZShTeXN0ZW0ub3V0KTsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7Ci0JfQorICAgIH0KICAgICB9CiAKICAgICBwcml2YXRlIGludCBnZXRDb3VudChDb25uZWN0aW9uIGNvbikgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CkBAIC0xMjQsMTAgKzEyNCwxMCBAQAogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgdXNlciA9IChTdHJpbmcpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi91c2VyIik7CiAgICAgICAgICAgICBwYXNzd29yZCA9IChTdHJpbmcpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9wYXNzd29yZCIpOwotCSAgICBDb250cm9scyA9IChNeUFkbWluT2JqZWN0KSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWlzL3Rlc3RBZG1pbiIpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNBTExJTkcgSU5JVElMSVpFIF1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dIik7Ci0JICAgIENvbnRyb2xzLmluaXRpYWxpemUoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDQUxMRUQgSU5JVElMSVpFIF1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dIik7CisgICAgICAgIENvbnRyb2xzID0gKE15QWRtaW5PYmplY3QpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9laXMvdGVzdEFkbWluIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ0FMTElORyBJTklUSUxJWkUgXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV0iKTsKKyAgICAgICAgQ29udHJvbHMuaW5pdGlhbGl6ZSgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNBTExFRCBJTklUSUxJWkUgXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV0iKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQpAQCAtMTYyLDcgKzE2Miw3IEBACiAgICAgICAgICAgICBkZWJ1ZygiTG9va2VkIHVwIERhdGFzb3VyY2VcbiIpOwogICAgICAgICAgICAgZGVidWcoIkdldCBKREJDIGNvbm5lY3Rpb24sIGF1dG8gc2lnbiBvbiIpOwogICAgICAgICAgICAgY29uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmIChjb24gIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIHJldHVybiBjb247CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMTczLDcgKzE3Myw3IEBACiAgICAgICAgICAgICB0aHJvdyBleDE7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgY2xvc2VDb25uZWN0aW9uKENvbm5lY3Rpb24gY29uKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgICAgaWYgKGhlbGRDb24gIT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L2FwcC9zcmMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZGFkMjA3Yi4uMGIzOGMxOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L2FwcC9zcmMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvYXBwL3NyYy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIGVqYi1qYXIueG1sPU1FVEEtSU5GL2VqYi1qYXIueG1sCiBzdW4tZWpiLWphci54bWw9TUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvYXBwL3NyYy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvYXBwL3NyYy9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMTRjMTY5My4uMzBmNjI5MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L2FwcC9zcmMvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9hcHAvc3JjL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjgsMzQgKzI4LDM0IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7Ci0gICAgCisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIC8vc3VwZXIoYXJncyk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZG9UZXN0KCkgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJUaGlzIGlzIHRvIHRlc3QgY29ubmVjdG9yIDEuNSAiKwotCSAgICAgICAgICAgICAiY29udHJhY3RzLiIpOwotICAgICAgICAKKyAgICAgICAgICAgICAgICAgImNvbnRyYWN0cy4iKTsKKwogICAgICAgICBTdHJpbmcgcmVzID0gIk5PVCBSVU4iOwotCWRlYnVnKCJkb1Rlc3QoKSBFTlRFUi4uLiIpOworICAgIGRlYnVnKCJkb1Rlc3QoKSBFTlRFUi4uLiIpOwogICAgICAgICBib29sZWFuIHBhc3MgPSBmYWxzZTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJlcyAgPSAiQUxMIFRFU1RTIFBBU1NFRCI7Ci0JICAgIGludCB0ZXN0Q291bnQgPSAxOworICAgICAgICBpbnQgdGVzdENvdW50ID0gMTsKICAgICAgICAgICAgIHdoaWxlICghZG9uZSgpKSB7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBub3RpZnlBbmRXYWl0KCk7CiAgICAgICAgICAgICAgICAgaWYgKCFkb25lKCkpIHsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlJ1bm5pbmcuLi4iKTsKICAgICAgICAgICAgICAgICAgICAgcGFzcyA9IGNoZWNrUmVzdWx0cyhleHBlY3RlZFJlc3VsdHMoKSk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJHb3QgZXhwZWN0ZWQgcmVzdWx0cyA9ICIgKyBwYXNzKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy9kbyBub3QgY29udGludWUgaWYgb25lIHRlc3QgZmFpbGVkCiAgICAgICAgICAgICAgICAgICAgIGlmICghcGFzcykgewogICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gIlNPTUUgVEVTVFMgRkFJTEVEIjsKQEAgLTYzLDExICs2MywxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiIEVtYmVkZGVkLUNvbm5lY3Rvci0xLjUgdGVzdCAtICIgKyB0ZXN0Q291bnQsIHN0YXQuUEFTUyk7Ci0JCSAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotCQl0ZXN0Q291bnQrKzsKKyAgICAgICAgdGVzdENvdW50Kys7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CkBAIC03OCwxNCArNzgsMTQgQEAKIAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiRW1iZWRkZWQtQ29ubmVjdG9yLTEuNSIpOwogCi0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCJFWElUSU5HLi4uIFNUQVRVUyA9ICIgKyByZXMpOwogICAgICAgICByZXR1cm4gcmVzOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgYm9vbGVhbiBjaGVja1Jlc3VsdHMoaW50IG51bSkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIE9iamVjdCBvID0gKG5ldyBJbml0aWFsQ29udGV4dCgpKS5sb29rdXAoIk15TWVzc2FnZUNoZWNrZXIiKTsKLSAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkgCisgICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpCiAgICAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cobywgTWVzc2FnZUNoZWNrZXJIb21lLmNsYXNzKTsKICAgICAgICAgTWVzc2FnZUNoZWNrZXIgY2hlY2tlciA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgIGludCByZXN1bHQgPSBjaGVja2VyLmdldE1lc3NhZ2VDb3VudCgpOwpAQCAtOTQsNyArOTQsNyBAQAogCiAgICAgcHJpdmF0ZSBib29sZWFuIGRvbmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgT2JqZWN0IG8gPSAobmV3IEluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiTXlNZXNzYWdlQ2hlY2tlciIpOwotICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKSAKKyAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkKICAgICAgICAgICAgIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvLCBNZXNzYWdlQ2hlY2tlckhvbWUuY2xhc3MpOwogICAgICAgICBNZXNzYWdlQ2hlY2tlciBjaGVja2VyID0gaG9tZS5jcmVhdGUoKTsKICAgICAgICAgcmV0dXJuIGNoZWNrZXIuZG9uZSgpOwpAQCAtMTAyLDcgKzEwMiw3IEBACiAKICAgICBwcml2YXRlIGludCBleHBlY3RlZFJlc3VsdHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgT2JqZWN0IG8gPSAobmV3IEluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiTXlNZXNzYWdlQ2hlY2tlciIpOwotICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKSAKKyAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkKICAgICAgICAgICAgIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvLCBNZXNzYWdlQ2hlY2tlckhvbWUuY2xhc3MpOwogICAgICAgICBNZXNzYWdlQ2hlY2tlciBjaGVja2VyID0gaG9tZS5jcmVhdGUoKTsKICAgICAgICAgcmV0dXJuIGNoZWNrZXIuZXhwZWN0ZWRSZXN1bHRzKCk7CkBAIC0xMTAsNyArMTEwLDcgQEAKIAogICAgIHByaXZhdGUgdm9pZCBub3RpZnlBbmRXYWl0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIE9iamVjdCBvID0gKG5ldyBJbml0aWFsQ29udGV4dCgpKS5sb29rdXAoIk15TWVzc2FnZUNoZWNrZXIiKTsKLSAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkgCisgICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpCiAgICAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cobywgTWVzc2FnZUNoZWNrZXJIb21lLmNsYXNzKTsKICAgICAgICAgTWVzc2FnZUNoZWNrZXIgY2hlY2tlciA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgIGNoZWNrZXIubm90aWZ5QW5kV2FpdCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L2FwcC9zcmMvbWRiL015TWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9hcHAvc3JjL21kYi9NeU1lc3NhZ2VCZWFuLmphdmEKaW5kZXggYjdkNDQzYi4uY2Q5ZjEwOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L2FwcC9zcmMvbWRiL015TWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhCkBAIC0yOSw0MSArMjksNDEgQEAKIAogLyoqCiAgKi8KLXB1YmxpYyBjbGFzcyBNeU1lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZURyaXZlbkJlYW4sIAorcHVibGljIGNsYXNzIE15TWVzc2FnZUJlYW4gaW1wbGVtZW50cyBNZXNzYWdlRHJpdmVuQmVhbiwKICAgICAgICAgTXlNZXNzYWdlTGlzdGVuZXIgewogCiAgICAgcHJpdmF0ZSB0cmFuc2llbnQgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjID0gbnVsbDsKICAgICBwcml2YXRlIENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdG9yLCB3aGljaCBpcyBwdWJsaWMgYW5kIHRha2VzIG5vIGFyZ3VtZW50cy4KICAgICAgKi8KICAgICBwdWJsaWMgTXlNZXNzYWdlQmVhbigpIHt9CiAKICAgICAvKioKLSAgICAgKiBzZXRNZXNzYWdlRHJpdmVuQ29udGV4dCBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IAotICAgICAqIG5vdCBmaW5hbCBvciBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIAorICAgICAqIHNldE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQKKyAgICAgKiBub3QgZmluYWwgb3Igc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZAogICAgICAqIHdpdGggb25lIGFyZ3VtZW50IG9mIHR5cGUgamFrYXJ0YS5lamIuTWVzc2FnZURyaXZlbkNvbnRleHQuCiAgICAgICoKICAgICAgKiBAcGFyYW0gbWRjICAgIHRoZSBjb250ZXh0IHRvIHNldAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldE1lc3NhZ2VEcml2ZW5Db250ZXh0KE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYykgewotCXRoaXMubWRjID0gbWRjOworICAgIHRoaXMubWRjID0gbWRjOwogICAgIH0KIAogICAgIC8qKgotICAgICAqIGVqYkNyZWF0ZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvciAKLSAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggbm8gCisgICAgICogZWpiQ3JlYXRlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yCisgICAgICogc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCB3aXRoIG5vCiAgICAgICogYXJndW1lbnRzLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHsgfQogCiAgICAgLyoqCi0gICAgICogb25NZXNzYWdlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yIAorICAgICAqIG9uTWVzc2FnZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvcgogICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBvbmUgYXJndW1lbnQKICAgICAgKiBvZiB0eXBlIGpha2FydGEuam1zLk1lc3NhZ2UuCiAgICAgICoKLSAgICAgKiBDYXN0cyB0aGUgaW5jb21pbmcgTWVzc2FnZSB0byBhIFRleHRNZXNzYWdlIGFuZCBkaXNwbGF5cyAKKyAgICAgKiBDYXN0cyB0aGUgaW5jb21pbmcgTWVzc2FnZSB0byBhIFRleHRNZXNzYWdlIGFuZCBkaXNwbGF5cwogICAgICAqIHRoZSB0ZXh0LgogICAgICAqCiAgICAgICogQHBhcmFtIGluTWVzc2FnZSAgICB0aGUgaW5jb21pbmcgbWVzc2FnZQpAQCAtNzQsNyArNzQsNyBAQAogCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpZiAoaW5NZXNzYWdlLmVuZHNXaXRoKCJXUklURSIpKSB7Ci0gICAgICAgICAgICAgICAgZG9EYlN0dWZmKCJXUklURSIsIAorICAgICAgICAgICAgICAgIGRvRGJTdHVmZigiV1JJVEUiLAogICAgICAgICAgICAgICAgICAgICAgICAgaW5NZXNzYWdlLnN1YnN0cmluZygwLCBpbk1lc3NhZ2UubGFzdEluZGV4T2YoIjoiKSkpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChpbk1lc3NhZ2UuZW5kc1dpdGgoIkRFTEVURSIpKSB7CiAgICAgICAgICAgICAgICAgZG9EYlN0dWZmKCJERUxFVEUiLApAQCAtOTAsMTAgKzkwLDEwIEBACiAgICAgICAgIH0KIAogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIGVqYlJlbW92ZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvciAKLSAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggbm8gCisgICAgICogZWpiUmVtb3ZlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yCisgICAgICogc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCB3aXRoIG5vCiAgICAgICogYXJndW1lbnRzLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHt9CkBAIC0xMDMsNjMgKzEwMyw2MyBAQAogCiAgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uID0gbnVsbDsKICAgICAgICAgU3RyaW5nIGlkICAgID0gbWVzc2FnZS5zdWJzdHJpbmcoMCwgbWVzc2FnZS5pbmRleE9mKCI6IikpOwotICAgICAgICBTdHJpbmcgYm9keSAgPSBtZXNzYWdlLnN1YnN0cmluZyhtZXNzYWdlLmluZGV4T2YoIjoiKSsxKTsgCisgICAgICAgIFN0cmluZyBib2R5ICA9IG1lc3NhZ2Uuc3Vic3RyaW5nKG1lc3NhZ2UuaW5kZXhPZigiOiIpKzEpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmICgiUkVBRCIuZXF1YWxzKG9wKSkgewotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgZGVidWcoIlJlYWRpbmcgcm93IGZyb20gZGF0YWJhc2UuLi4iKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIC8vIENyZWF0aW5nIGEgZGF0YWJhc2UgY29ubmVjdGlvbgogICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9NeURCIik7CiAgICAgICAgICAgICAgICAgICBkZWJ1ZygiTG9va2VkIHVwIERhdGFzb3VyY2VcbiIpOwogICAgICAgICAgICAgICAgICAgZGVidWcoIkdldCBKREJDIGNvbm5lY3Rpb24sIGF1dG8gc2lnbiBvbiIpOwogICAgICAgICAgICAgICAgICAgZGJDb25uZWN0aW9uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgIFN0YXRlbWVudCBzdG10ID0gZGJDb25uZWN0aW9uLmNyZWF0ZVN0YXRlbWVudCgpOwotICAgICAgICAgICAgICAgICAgU3RyaW5nIHF1ZXJ5ID0gCisgICAgICAgICAgICAgICAgICBTdHJpbmcgcXVlcnkgPQogICAgICAgICAgICAgICAgICAgIlNFTEVDVCBpZCBmcm9tIG1lc3NhZ2VzIHdoZXJlIGlkID0gJ1FRJyI7CiAgICAgICAgICAgICAgICAgICBSZXN1bHRTZXQgcmVzdWx0cyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHF1ZXJ5KTsKICAgICAgICAgICAgICAgICAgIHJlc3VsdHMubmV4dCgpOwotICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJRUSBoYXMgYmFsYW5jZSAiICsgCisgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlFRIGhhcyBiYWxhbmNlICIgKwogICAgICAgICAgICAgICAgICAgcmVzdWx0cy5nZXRJbnQoImJhbGFuY2UiKSArICIgZG9sbGFycyIpOwogICAgICAgICAgICAgICAgICAgcmVzdWx0cy5jbG9zZSgpOwogICAgICAgICAgICAgICAgICAgc3RtdC5jbG9zZSgpOwotICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVhZCBvbmUgYWNjb3VudFxuIik7CiAgICAgICAgICAgICAgICAgKi8KIAogICAgICAgICAgICAgfSBlbHNlIGlmICgiV1JJVEUiLmVxdWFscyhvcCkpIHsKIAogICAgICAgICAgICAgICAgIGRlYnVnKCJJbnNlcnRpbmcgb25lIG1lc3NhZ2UgaW4gdGhlIGRhdGFiYXNlXG4iKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvTXlEQiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKICAgICAgICAgICAgICAgICAvL2RlYnVnKCJHZXQgSkRCQyBjb25uZWN0aW9uLCBhdXRvIHNpZ24gb24iKTsKICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBjcmVhdGVSb3coaWQsIGJvZHksIGRiQ29ubmVjdGlvbik7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGVkIG9uZSBtZXNzYWdlXG4iKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgfSBlbHNlIGlmICgiREVMRVRFIi5lcXVhbHMob3ApKSB7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZWJ1ZygiRGVsZXRpbmcgb25lIG1lc3NhZ2UgZnJvbSB0aGUgZGF0YWJhc2VcbiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvTXlEQiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKICAgICAgICAgICAgICAgICAvL2RlYnVnKCJHZXQgSkRCQyBjb25uZWN0aW9uLCBhdXRvIHNpZ24gb24iKTsKICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZWxldGVSb3coaWQsIGRiQ29ubmVjdGlvbik7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZWxldGVkIG9uZSBtZXNzYWdlXG4iKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoIkRFTEVURV9BTEwiLmVxdWFscyhvcCkpIHsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGRlYnVnKCJEZWxldGluZyBhbGwgbWVzc2FnZXMgZnJvbSB0aGUgZGF0YWJhc2VcbiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvTXlEQiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKQEAgLTE3MCw3ICsxNzAsNyBAQAogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvL3Vuc3VwcG9ydGVkIG9wCiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICB9ZmluYWxseXsKICAgICAgICAgICAgIHRyeXsKICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24uY2xvc2UoKTsKQEAgLTE3OSw5ICsxNzksOSBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIAotICAgIHByaXZhdGUgdm9pZCBjcmVhdGVSb3coU3RyaW5nIGlkLCBTdHJpbmcgYm9keSwgCi0gICAgICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikgCisKKyAgICBwcml2YXRlIHZvaWQgY3JlYXRlUm93KFN0cmluZyBpZCwgU3RyaW5nIGJvZHksCisgICAgICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgLy8gQ3JlYXRlIHJvdyBmb3IgdGhpcyBtZXNzYWdlCkBAIC0xOTcsOSArMTk3LDkgQEAKICAgICAgICAgc3RtdC5jbG9zZSgpOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBkZWxldGVSb3coU3RyaW5nIGlkLCBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikgCisgICAgcHJpdmF0ZSB2b2lkIGRlbGV0ZVJvdyhTdHJpbmcgaWQsIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgLy8gRGVsZXRlIHJvdyBmb3IgdGhpcyBtZXNzYWdlCiAgICAgICAgIGRlYnVnKCJEZWxldGVSb3cgd2l0aCBJRCA9ICIgKyBpZCk7CiAgICAgICAgIFN0YXRlbWVudCBzdG10ID0gZGJDb25uZWN0aW9uLmNyZWF0ZVN0YXRlbWVudCgpOwpAQCAtMjEyLDkgKzIxMiw5IEBACiAgICAgICAgIHN0bXQuY2xvc2UoKTsKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgZGVsZXRlQWxsKGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKSAKKyAgICBwcml2YXRlIHZvaWQgZGVsZXRlQWxsKGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgLy8gRGVsZXRlIHJvdyBmb3IgdGhpcyBtZXNzYWdlCiAgICAgICAgIFN0YXRlbWVudCBzdG10ID0gZGJDb25uZWN0aW9uLmNyZWF0ZVN0YXRlbWVudCgpOwogICAgICAgICBTdHJpbmcgcXVlcnkgPSAiREVMRVRFIEZST00gbWVzc2FnZXMiOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9idWlsZC54bWwKaW5kZXggZjlmMGFlZS4uODYxZTdiYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvYnVpbGQueG1sCkBAIC00OCw3ICs0OCw3IEBACiAKICAgPHRhcmdldCBuYW1lPSJydW50ZXN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0iYXBwbmFtZSIgdmFsdWU9ImdlbmVyaWMtZW1iZWRkZWQiIC8+CisgICAgPHBhcmFtIG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJnZW5lcmljLWVtYmVkZGVkIiAvPgogICAgIDwvYW50Y2FsbD4KICAgPC90YXJnZXQ+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9yYS9NRVRBLUlORi9yYS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvcmEvTUVUQS1JTkYvcmEueG1sCmluZGV4IDJjYTJlYmMuLjIxZGViOTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9yYS9NRVRBLUlORi9yYS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L3JhL01FVEEtSU5GL3JhLnhtbApAQCAtNDUsNyArNDUsNyBAQAogICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgogICAgICAgICA8aW5ib3VuZC1yZXNvdXJjZWFkYXB0ZXI+Ci0gICAgICAgICAgICA8bWVzc2FnZWFkYXB0ZXI+ICAgICAgICAgIAorICAgICAgICAgICAgPG1lc3NhZ2VhZGFwdGVyPgogICAgICAgICAgICAgICAgIDxtZXNzYWdlbGlzdGVuZXI+CiAgICAgICAgICAgICAgICAgICAgIDxtZXNzYWdlbGlzdGVuZXItdHlwZT4KICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rvci5NeU1lc3NhZ2VMaXN0ZW5lcgpAQCAtNTYsNyArNTYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgPC9hY3RpdmF0aW9uc3BlYy1jbGFzcz4KICAgICAgICAgICAgICAgICAgICAgPC9hY3RpdmF0aW9uc3BlYz4KICAgICAgICAgICAgICAgICA8L21lc3NhZ2VsaXN0ZW5lcj4KLSAgICAgICAgICAgIDwvbWVzc2FnZWFkYXB0ZXI+ICAgICAgICAgIAorICAgICAgICAgICAgPC9tZXNzYWdlYWRhcHRlcj4KICAgICAgICAgPC9pbmJvdW5kLXJlc291cmNlYWRhcHRlcj4KICAgICAgICAgPGFkbWlub2JqZWN0PgogICAgICAgICAgIDxhZG1pbm9iamVjdC1pbnRlcmZhY2U+Y29ubmVjdG9yLk15QWRtaW5PYmplY3Q8L2FkbWlub2JqZWN0LWludGVyZmFjZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9yYS9zcmMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L3JhL3NyYy9idWlsZC54bWwKaW5kZXggMmI3NzQ4OS4uNzgzOTkxZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L3JhL3NyYy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L3JhL3NyYy9idWlsZC54bWwKQEAgLTMwLDggKzMwLDggQEAKIAogICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iaW5pdC1jb21tb24iID4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0iYnVpbGQuY2xhc3Nlcy5kaXIiIHZhbHVlPSJjbGFzc2VzIiAvPgotCTxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjb25uZWN0b3IiIC8+CisgICAgPHBhcmFtIG5hbWU9ImJ1aWxkLmNsYXNzZXMuZGlyIiB2YWx1ZT0iY2xhc3NlcyIgLz4KKyAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY29ubmVjdG9yIiAvPgogICAgIDwvYW50Y2FsbD4KICAgICA8amFyIGphcmZpbGU9Ii4uL2dlbmVyaWMtcmEuamFyIiBiYXNlZGlyPSJjbGFzc2VzIgogICAgICAgICAgaW5jbHVkZXM9ImNvbm5lY3Rvci8qLmNsYXNzIiAvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEKaW5kZXggNTU1MzNkNC4uZjU5YjJiMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgQ29udHJvbHMgewogICAgIHB1YmxpYyBzdGF0aWMgT2JqZWN0IHJlYWR5TG9jayA9IG5ldyBPYmplY3QoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEKaW5kZXggNjU4MjMzZS4uZDczYzg2MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBEZWxpdmVyeVdvcmsgaW1wbGVtZW50cyBXb3JrIHsKIApAQCAtMzYsNyArMzYsNyBAQAogICAgIHByaXZhdGUgU3RyaW5nIG9wOwogICAgIHByaXZhdGUgYm9vbGVhbiBrZWVwQ291bnQ7CiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50ZXIgPSAwOwotICAgIAorCiAgICAgcHVibGljIERlbGl2ZXJ5V29yayhNZXNzYWdlRW5kcG9pbnQgZXAsIGludCBudW1PZk1lc3NhZ2VzLCBTdHJpbmcgb3ApIHsKICAgICAgICAgdGhpcy5lcCA9IGVwOwogICAgICAgICB0aGlzLm51bSA9IG51bU9mTWVzc2FnZXM7CkBAIC00NCw3ICs0NCw3IEBACiAgICAgICAgIHRoaXMua2VlcENvdW50ID0gZmFsc2U7CiAgICAgfQogCi0gICAgcHVibGljIERlbGl2ZXJ5V29yayhNZXNzYWdlRW5kcG9pbnQgZXAsIGludCBudW1PZk1lc3NhZ2VzLCAKKyAgICBwdWJsaWMgRGVsaXZlcnlXb3JrKE1lc3NhZ2VFbmRwb2ludCBlcCwgaW50IG51bU9mTWVzc2FnZXMsCiAgICAgICAgICAgICBTdHJpbmcgb3AsIGJvb2xlYW4ga2VlcENvdW50KSB7CiAgICAgICAgIHRoaXMuZXAgPSBlcDsKICAgICAgICAgdGhpcy5udW0gPSBudW1PZk1lc3NhZ2VzOwpAQCAtNTUsNyArNTUsNyBAQAogICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKIAogICAgICAgICBkZWJ1ZygiRU5URVIuLi4iKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIC8vTWV0aG9kIG9uTWVzc2FnZSA9IGdldE9uTWVzc2FnZU1ldGhvZCgpOwogICAgICAgICAgICAgLy9lcC5iZWZvcmVEZWxpdmVyeShvbk1lc3NhZ2UpOwpAQCAtNzgsMTEgKzc4LDExIEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vZXAuYWZ0ZXJEZWxpdmVyeSgpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiTEVBVkUuLi4iKTsKICAgICB9CiAKQEAgLTkzLDE0ICs5MywxNCBAQAogICAgIH0KIAogICAgIHByaXZhdGUgTWV0aG9kIGdldE9uTWVzc2FnZU1ldGhvZCgpIHsKLSAgICAgICAgCisKICAgICAgICAgTWV0aG9kIG9uTWVzc2FnZU1ldGhvZCA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDbGFzcyBtc2dMaXN0ZW5lckNsYXNzID0gY29ubmVjdG9yLk15TWVzc2FnZUxpc3RlbmVyLmNsYXNzOwogICAgICAgICAgICAgQ2xhc3NbXSBwYXJhbVR5cGVzID0geyBqYXZhLmxhbmcuU3RyaW5nLmNsYXNzIH07Ci0gICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPSAKKyAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9CiAgICAgICAgICAgICAgICAgbXNnTGlzdGVuZXJDbGFzcy5nZXRNZXRob2QoIm9uTWVzc2FnZSIsIHBhcmFtVHlwZXMpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEKaW5kZXggMTAwY2FjZS4uZmE5M2Y2MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhCkBAIC0zNiw3ICszNiw3IEBACiAgICAgICAgICAgICAgIGZsYWdUb1N0cmluZyhmbGFncykpOwogICAgIH0KIAotICAgIAorCiAgICAgcHVibGljIHZvaWQgZm9yZ2V0KFhpZCB4aWQpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5mb3JnZXQ6ICIgKyB4aWRUb1N0cmluZyh4aWQpKTsKICAgICB9CkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5wcmVwYXJlOiAiICsgeGlkVG9TdHJpbmcoeGlkKSk7CiAgICAgICAgIHJldHVybiBYQVJlc291cmNlLlhBX09LOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBYaWRbXSByZWNvdmVyKGludCBmbGFnKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2UucmVjb3ZlcjogIiArIGZsYWdUb1N0cmluZyhmbGFnKSk7CiAgICAgICAgIHJldHVybiBudWxsOwpAQCAtNjYsNyArNjYsNyBAQAogICAgIHB1YmxpYyBib29sZWFuIHNldFRyYW5zYWN0aW9uVGltZW91dChpbnQgc2Vjb25kcykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHN0YXJ0KFhpZCB4aWQsIGludCBmbGFncykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLnN0YXJ0OiAiICsgeGlkVG9TdHJpbmcoeGlkKSArICIsIiArCiAgICAgICAgICAgICAgICAgZmxhZ1RvU3RyaW5nKGZsYWdzKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvTWVzc2FnZXMuamF2YQppbmRleCBiNWIwZjAyLi40YzljMDEyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL01lc3NhZ2VzLmphdmEKQEAgLTIxLDcgKzIxLDcgQEAKIC8qKgogICogY29sbGVjdGlvbiBvZiBtZXNzYWdlcy4KICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIE1lc3NhZ2VzIHsKIApAQCAtNTQsNyArNTQsNyBAQAogICAgICAgIFN0cmluZyBjb21tYW5kICA9IGFyZ3NbMF07CiAgICAgICAgU3RyaW5nIGRlc3ROYW1lID0gYXJnc1sxXTsKICAgICAgICBTdHJpbmcgbWVzc2FnZSAgPSBhcmdzWzJdOwotICAgCisKICAgICAgICBpZiAoISJhZGQiLmVxdWFscyhjb21tYW5kKSkgewogICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEKaW5kZXggODYyZjlmZi4uZDE5OWQwMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YQpAQCAtMzgsMTEgKzM4LDExIEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgaW5pdGlhbGl6ZSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXppbmcgdGhlIENvbnRyb2xzIHRvIGZhbHNlOiIrcmVzZXRDb250cm9sKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXppbmcgdGhlIENvbnRyb2xzIHRvIGZhbHNlOiIrcmVzZXRDb250cm9sKTsKICAgICAgICAgaWYgKHJlc2V0Q29udHJvbC5lcXVhbHMoIkJFR0lOTklORyIpKSB7CiAgICAgICAgICAgIENvbnRyb2xzLmRvbmU9ZmFsc2U7Ci0JICAgU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6ZWQgdGhlIENvbnRyb2xzIHRvIGZhbHNlIik7Ci0JfQorICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW015QWRtaW5PYmplY3RdIEluaXRpYWxpemVkIHRoZSBDb250cm9scyB0byBmYWxzZSIpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiBkb25lKCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvTXlXb3JrLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9NeVdvcmsuamF2YQppbmRleCAyZWNlYzYzLi5hOWE4ODgxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9NeVdvcmsuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9NeVdvcmsuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIE15V29yayBpbXBsZW1lbnRzIFdvcmsgewogCkBAIC0zNSw3ICszNSw3IEBACiAgICAgcHJpdmF0ZSBib29sZWFuIHN0b3AgPSBmYWxzZTsKICAgICBwcml2YXRlIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZmFjdG9yeTsKICAgICBwcml2YXRlIFdvcmtNYW5hZ2VyIHdtOwotICAgIAorCiAgICAgcHVibGljIE15V29yaygKICAgICAgICAgICAgIFN0cmluZyBuYW1lLCBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGZhY3RvcnksIFdvcmtNYW5hZ2VyIHdtKSB7CiAgICAgICAgIHRoaXMuZmFjdG9yeSA9IGZhY3Rvcnk7CkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgICAgICB0cnkgewogCiAgICAgICAgICAgICAgICAgTWV0aG9kIG9uTWVzc2FnZSA9IGdldE9uTWVzc2FnZU1ldGhvZCgpOwotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaXNEZWxpdmVyeVRyYW5zYWN0ZWQgPSAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpc0RlbGl2ZXJ5VHJhbnNhY3RlZCA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3J5LmlzRGVsaXZlcnlUcmFuc2FjdGVkKG9uTWVzc2FnZSkpOwogCiAgICAgICAgICAgICAgICAgLyoKQEAgLTcwLDcgKzcwLDcgQEAKICAgICAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiTEVBVkUuLi4iKTsKICAgICB9CiAKQEAgLTg1LDE0ICs4NSwxNCBAQAogICAgIH0KIAogICAgIHB1YmxpYyBNZXRob2QgZ2V0T25NZXNzYWdlTWV0aG9kKCkgewotICAgICAgICAKKwogICAgICAgICBNZXRob2Qgb25NZXNzYWdlTWV0aG9kID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENsYXNzIG1zZ0xpc3RlbmVyQ2xhc3MgPSBjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIuY2xhc3M7CiAgICAgICAgICAgICBDbGFzc1tdIHBhcmFtVHlwZXMgPSB7IGphdmEubGFuZy5TdHJpbmcuY2xhc3MgfTsKLSAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9IAorICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0KICAgICAgICAgICAgICAgICBtc2dMaXN0ZW5lckNsYXNzLmdldE1ldGhvZCgib25NZXNzYWdlIiwgcGFyYW1UeXBlcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YQppbmRleCA5NDZkOTg3Li5iYjc5MThlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEKQEAgLTI0LDkgKzI0LDkgQEAKICAqIHNvIHRoYXQgdGhlIGFwcCBzZXJ2ZXIgY2FuIGluc3RhbnRpYXRlIGFuZCBjb25maWd1cmUKICAqIGl0IGF0IHRoZSBydW50aW1lLgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCi1wdWJsaWMgY2xhc3MgU2ltcGxlQWN0aXZhdGlvblNwZWMgCitwdWJsaWMgY2xhc3MgU2ltcGxlQWN0aXZhdGlvblNwZWMKICAgICBpbXBsZW1lbnRzIEFjdGl2YXRpb25TcGVjLCBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7CiAKICAgICBwcml2YXRlIFN0cmluZyBkZXN0aW5hdGlvbk5hbWU7CkBAIC00Miw3ICs0Miw3IEBACiAgICAgcHVibGljIFN0cmluZyBnZXREZXN0aW5hdGlvbk5hbWUgKCkgewogICAgICAgICByZXR1cm4gdGhpcy5kZXN0aW5hdGlvbk5hbWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0RGVzdGluYXRpb25OYW1lIChTdHJpbmcgbmFtZSkgewogICAgICAgICBkZWJ1Zygic2V0RGVzdGluYXRpb25OYW1lKCkgY2FsbGVkLi4uIG5hbWUgPSAiICsgbmFtZSk7CiAgICAgICAgIHRoaXMuZGVzdGluYXRpb25OYW1lID0gbmFtZTsKQEAgLTUxLDcgKzUxLDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldERlc3RpbmF0aW9uVHlwZSgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZGVzdGluYXRpb25UeXBlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldERlc3RpbmF0aW9uVHlwZSAoU3RyaW5nIHR5cGUpIHsKICAgICAgICAgZGVidWcoInNldERlc3RpbmF0aW9uVHlwZSAoKSBjYWxsZWQuLi4gdHlwZSA9ICIgKyB0eXBlKTsKICAgICAgICAgdGhpcy5kZXN0aW5hdGlvblR5cGU9IHR5cGU7CkBAIC02MCw3ICs2MCw3IEBACiAgICAgcHVibGljIFN0cmluZyBnZXRUZXN0UHJvcCgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMudGVzdFByb3A7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0VGVzdFByb3AgKFN0cmluZyB0ZXN0UHJvcCkgewogICAgICAgICBkZWJ1Zygic2V0VGVzdFByb3AgKCkgY2FsbGVkLi4uIHRlc3RQcm9wID0gIiArIHRlc3RQcm9wKTsKICAgICAgICAgdGhpcy50ZXN0UHJvcCA9IHRlc3RQcm9wOwpAQCAtNzYsNyArNzYsNyBAQAogICAgICAgICB0aGlzLnJlc291cmNlYWRhcHRlciA9IHJhOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHZhbGlkYXRlKCkge30gCisgICAgcHVibGljIHZvaWQgdmFsaWRhdGUoKSB7fQogCiAgICAgcHJpdmF0ZSB2b2lkIGRlYnVnIChTdHJpbmcgbWVzc2FnZSkKICAgICB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEKaW5kZXggMjFlNzkxZC4uMWNmNWFjMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YQpAQCAtNDAsOSArNDAsOSBAQAogLyoqCiAgKiBUaGlzIGlzIGEgc2FtcGxlIHJlc291cmNlIGFkYXB0ZXIKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwotcHVibGljIGNsYXNzIFNpbXBsZVJlc291cmNlQWRhcHRlckltcGwgCitwdWJsaWMgY2xhc3MgU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbAogaW1wbGVtZW50cyBSZXNvdXJjZUFkYXB0ZXIsIGphdmEuaW8uU2VyaWFsaXphYmxlIHsKIAogICAgIHByaXZhdGUgQm9vdHN0cmFwQ29udGV4dCBjdHg7CkBAIC01OCw3ICs1OCw3IEBACiAKICAgICBwdWJsaWMgdm9pZAogICAgIHN0YXJ0KEJvb3RzdHJhcENvbnRleHQgY3R4KSB0aHJvd3MgUmVzb3VyY2VBZGFwdGVySW50ZXJuYWxFeGNlcHRpb257Ci0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCIwMDEuIFNpbXBsZSBSQSBzdGFydC4uLiIpOwogCiAgICAgICAgIHRoaXMuY3R4ID0gY3R4OwpAQCAtNjgsMjEgKzY4LDIxIEBACiAKICAgICAgICAgLy90ZXN0aW5nIGNyZWF0IHRpbWVyCiAgICAgICAgIFRpbWVyIHRpbWVyID0gbnVsbDsKLQkgIHRyeXsKLQkgICAgICB0aW1lciA9IGN0eC5jcmVhdGVUaW1lcigpOwotCSAgfSBjYXRjaChVbmF2YWlsYWJsZUV4Y2VwdGlvbiB1ZSkgewotCSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXJyb3IiKTsKLQkgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VBZGFwdGVySW50ZXJuYWxFeGNlcHRpb24oIkVycm9yIGZvcm0gYm9vdHN0cmFwIik7Ci0JICB9CisgICAgICB0cnl7CisgICAgICAgICAgdGltZXIgPSBjdHguY3JlYXRlVGltZXIoKTsKKyAgICAgIH0gY2F0Y2goVW5hdmFpbGFibGVFeGNlcHRpb24gdWUpIHsKKyAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIik7CisgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uKCJFcnJvciBmb3JtIGJvb3RzdHJhcCIpOworICAgICAgfQogICAgICAgICBkZWJ1ZygiMDA0LiBTaW1wbGUgUkEgc3RhcnQuLi4iKTsKIAogICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgCisKICAgICAgICAgICBYQVRlcm1pbmF0b3IgeGEgPSBjdHguZ2V0WEFUZXJtaW5hdG9yKCk7Ci0gICAgICAgICAgCisKICAgICAgICAgICBYaWQgeGlkMSA9IG5ldyBYSUQoKTsKICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBYSUQxID0gIiArIHhpZDEpOwotICAgICAgICAgIAorCiAgICAgICAgICAgRXhlY3V0aW9uQ29udGV4dCBlYyA9IG5ldyBFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgICAgICAgZWMuc2V0WGlkKHhpZDEpOwogICAgICAgICAgIGVjLnNldFRyYW5zYWN0aW9uVGltZW91dCg1KjEwMDApOyAvLzUgc2Vjb25kcwpAQCAtOTIsMTQgKzkyLDE0IEBACiAgICAgICAgICAgd20uZG9Xb3JrKG91dHcsIDEqMTAwMCwgZWMsIG51bGwpOwogICAgICAgICAgIHhhLmNvbW1pdCh4aWQxLCB0cnVlKTsKICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAKKwogICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIGV4ID0gIiArIGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgeGEucm9sbGJhY2soeGlkMSk7CiAgICAgICAgICAgfQotICAgICAgICAgIAorCiAgICAgICAgICAgWGlkIHhpZDIgPSBuZXcgWElEKCk7CiAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgWElEMiA9ICIgKyB4aWQyKTsKLSAgICAgICAgICAKKwogICAgICAgICAgIGVjID0gbmV3IEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICAgICAgICBlYy5zZXRYaWQoeGlkMik7CiAgICAgICAgICAgZWMuc2V0VHJhbnNhY3Rpb25UaW1lb3V0KDUqMTAwMCk7IC8vNSBzZWNvbmRzCkBAIC0xMTYsNyArMTE2LDcgQEAKICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICB9CiAKLSAgICAgICAgCisKICAgICAgICAgICBmb3IgKGludCBpID0gMCA7IGkgPCAzOyBpKyspIHsKICAgICAgICAgICBUZXN0V01Xb3JrIHcgPSBuZXcgVGVzdFdNV29yayhpLCBmYWxzZSk7CiAgICAgICAgICAgdHJ5IHsKQEAgLTEyNCw3ICsxMjQsNyBAQAogICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRkFJTDogQ0FVR0hUIGV4Y2VwdGlvbiA6IGkgPSAiICsgaSk7CiAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgfSAKKyAgICAgICAgICB9CiAgICAgICAgICAgfQogCiAgICAgICAgICAgZm9yIChpbnQgaSA9IDMgOyBpIDwgNjsgaSsrKSB7CkBAIC0xNzIsNyArMTcyLDcgQEAKICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICB9CiAgICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiMDA1LiBTaW1wbGUgUkEgc3RhcnQuLi4iKTsKICAgICB9CiAKQEAgLTIwNCwxMiArMjA0LDEyIEBACiAKICAgICBwdWJsaWMgdm9pZAogICAgIGVuZHBvaW50RGVhY3RpdmF0aW9uICgKLSAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZW5kcG9pbnRGYWN0b3J5LCAKKyAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZW5kcG9pbnRGYWN0b3J5LAogICAgICAgICAgICAgQWN0aXZhdGlvblNwZWMgc3BlYykgewogICAgICAgICBkZWJ1ZyAoImVuZHBvaW50RGVhY3RpdmF0aW9uIGNhbGxlZC4uLiIpOwogICAgICAgICAoKFdvcmtEaXNwYXRjaGVyKSB3b3JrKS5zdG9wKCk7CiAgICAgfQotICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGVzdE5hbWUoKSB7CiAgICAgICAgIHJldHVybiB0ZXN0TmFtZTsKICAgICB9CkBAIC0yMjUsNyArMjI1LDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NpbXBsZVJlc291cmNlQWRhcHRlckltcGxdID09PiAiICsgbWVzc2FnZSk7CiAgICAgfQogCi0gICAgcHVibGljIFhBUmVzb3VyY2VbXSBnZXRYQVJlc291cmNlcyhBY3RpdmF0aW9uU3BlY1tdIHNwZWNzKSAKKyAgICBwdWJsaWMgWEFSZXNvdXJjZVtdIGdldFhBUmVzb3VyY2VzKEFjdGl2YXRpb25TcGVjW10gc3BlY3MpCiAgICAgICAgIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1Rlc3RXTVdvcmsuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1Rlc3RXTVdvcmsuamF2YQppbmRleCA3ZTU4NWEzLi45Y2QwNjYzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9UZXN0V01Xb3JrLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvVGVzdFdNV29yay5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgVGVzdFdNV29yayBpbXBsZW1lbnRzIFdvcmsgewogCkBAIC00Miw4ICs0Miw4IEBACiAgICAgcHVibGljIFRlc3RXTVdvcmsoaW50IGlkLCBib29sZWFuIGlzUm9ndWUpIHsKICAgICAgICAgdGhpcyhpZCwgaXNSb2d1ZSwgZmFsc2UsIG51bGwpOwogICAgIH0KLSAgICAKLSAgICBwdWJsaWMgVGVzdFdNV29yayhpbnQgaWQsIGJvb2xlYW4gaXNSb2d1ZSwgCisKKyAgICBwdWJsaWMgVGVzdFdNV29yayhpbnQgaWQsIGJvb2xlYW4gaXNSb2d1ZSwKICAgICAgICAgICAgIGJvb2xlYW4gZG9OZXN0LCBFeGVjdXRpb25Db250ZXh0IGN0eCkgewogICAgICAgICB0aGlzLmlkID0gaWQ7CiAgICAgICAgIHRoaXMuaXNSb2d1ZSA9IGlzUm9ndWU7CkBAIC03NywxMCArNzcsMTAgQEAKICAgICAgICAgICAgIH0gY2F0Y2ggKFdvcmtFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgICAgICBpZiAoZXguZ2V0RXJyb3JDb2RlKCkuZXF1YWxzKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdvcmtFeGNlcHRpb24uVFhfQ09OQ1VSUkVOVF9XT1JLX0RJU0FMTE9XRUQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsgCisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUEFTUzogQ0FVR0hUIEVYUEVDVEVEID0gIiArIGV4LmdldEVycm9yQ29kZSgpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArIAorICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZBSUw6IENBVUdIVCBVTkVYUEVDVEVEID0gIiArIGV4LmdldEVycm9yQ29kZSgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC05Miw3ICs5Miw3IEBACiAgICAgICAgICAgICAgICAgZWMuc2V0VHJhbnNhY3Rpb25UaW1lb3V0KDUqMTAwMCk7IC8vNSBzZWNvbmRzCiAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKG5lc3RlZFdvcmssIDEqMTAwMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAiRkFJTDogQ0FVR0hUIFVORVhQRUNURUQgPSAiICsgZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZENvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEKaW5kZXggMzRhNjA0Zi4uY2Q5OGM0NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhCkBAIC0zMyw3ICszMyw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgV29ya0Rpc3BhdGNoZXIgaW1wbGVtZW50cyBXb3JrIHsKIApAQCAtNDQsMTEgKzQ0LDExIEBACiAgICAgcHJpdmF0ZSBBY3RpdmF0aW9uU3BlYyBzcGVjOwogICAgIHByaXZhdGUgV29ya01hbmFnZXIgd207CiAgICAgcHJpdmF0ZSBYQVRlcm1pbmF0b3IgeGE7Ci0gICAgCisKICAgICBwdWJsaWMgV29ya0Rpc3BhdGNoZXIoCiAgICAgICAgICAgICBTdHJpbmcgaWQsCiAgICAgICAgICAgICBCb290c3RyYXBDb250ZXh0IGN0eCwKLSAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZmFjdG9yeSwgCisgICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGZhY3RvcnksCiAgICAgICAgICAgICBBY3RpdmF0aW9uU3BlYyBzcGVjKSB7CiAgICAgICAgIHRoaXMuaWQgICAgICA9IGlkOwogICAgICAgICB0aGlzLmN0eCAgICAgPSBjdHg7CkBAIC02MSw3ICs2MSw3IEBACiAgICAgcHVibGljIHZvaWQgcnVuKCkgewogCiAgICAgICAgIGRlYnVnKCJFTlRFUi4uLiIpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgc3luY2hyb25pemVkIChDb250cm9scy5yZWFkeUxvY2spIHsKICAgICAgICAgICAgICAgICBkZWJ1ZygiV0FJVC4uLiIpOwpAQCAtODMsMjYgKzgzLDI2IEBACiAgICAgICAgICAgICB0cnkgewogCiAgICAgICAgICAgICAgICAgTWV0aG9kIG9uTWVzc2FnZSA9IGdldE9uTWVzc2FnZU1ldGhvZCgpOwotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaXNEZWxpdmVyeVRyYW5zYWN0ZWQgPSAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpc0RlbGl2ZXJ5VHJhbnNhY3RlZCA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yeS5pc0RlbGl2ZXJ5VHJhbnNhY3RlZChvbk1lc3NhZ2UpKTsKIAogICAgICAgICAgICAgICAgIGlmICghZmFjdG9yeS5pc0RlbGl2ZXJ5VHJhbnNhY3RlZChvbk1lc3NhZ2UpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vTWVzc2FnZUVuZHBvaW50IGVwID0gZmFjdG9yeS5jcmVhdGVFbmRwb2ludChudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgLy9EZWxpdmVyeVdvcmsgZCA9IG5ldyBEZWxpdmVyeVdvcmsoIk5PX1RYIiwgZXApOyAKKyAgICAgICAgICAgICAgICAgICAgLy9EZWxpdmVyeVdvcmsgZCA9IG5ldyBEZWxpdmVyeVdvcmsoIk5PX1RYIiwgZXApOwogICAgICAgICAgICAgICAgICAgICAvL3dtLmRvV29yayhkLCAwLCBudWxsLCBudWxsKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvL01lc3NhZ2VFbmRwb2ludCBlcCA9IGZhY3RvcnkuY3JlYXRlRW5kcG9pbnQobnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludCBlcCA9IGZhY3RvcnkuY3JlYXRlRW5kcG9pbnQobmV3IEZha2VYQVJlc291cmNlKCkpOwogICAgICAgICAgICAgICAgICAgICBpbnQgbnVtT2ZNZXNzYWdlcyA9IDU7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vaW1wb3J0aW5nIHRyYW5zYWN0aW9uCiAKICAgICAgICAgICAgICAgICAgICAgLy93cml0ZS9jb21taXQKICAgICAgICAgICAgICAgICAgICAgRXhlY3V0aW9uQ29udGV4dCBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKIAotICAgICAgICAgICAgICAgICAgICBEZWxpdmVyeVdvcmsgdyA9IAorICAgICAgICAgICAgICAgICAgICBEZWxpdmVyeVdvcmsgdyA9CiAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRGVsaXZlcnlXb3JrKGVwLCBudW1PZk1lc3NhZ2VzLCAiV1JJVEUiKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgeGEuY29tbWl0KGVjLmdldFhpZCgpLCB0cnVlKTsKQEAgLTExMCw3ICsxMTAsNyBAQAogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiRE9ORSBXUklURSBUTyBEQiIpOwogICAgICAgICAgICAgICAgICAgICBDb250cm9scy5leHBlY3RlZFJlc3VsdHMgPSBudW1PZk1lc3NhZ2VzOwogICAgICAgICAgICAgICAgICAgICBub3RpZnlBbmRXYWl0KCk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vZGVsZXRlL3JvbGxiYWNrCiAgICAgICAgICAgICAgICAgICAgIGVjID0gc3RhcnRUeCgpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiU3RhcnQgVFggLSAiICsgZWMuZ2V0WGlkKCkpOwpAQCAtMTI2LDcgKzEyNiw3IEBACiAgICAgICAgICAgICAgICAgICAgIC8vZGVsZXRlL2NvbW1pdAogICAgICAgICAgICAgICAgICAgICBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgdyA9IG5ldyBEZWxpdmVyeVdvcmsoZXAsIG51bU9mTWVzc2FnZXMsICJERUxFVEUiKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgeGEuY29tbWl0KGVjLmdldFhpZCgpLCB0cnVlKTsKQEAgLTE1MCw3ICsxNTAsNyBAQAogICAgICAgICAgICAgICAgICAgICAvL2RlbGV0ZS9jb21taXQKICAgICAgICAgICAgICAgICAgICAgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIHcgPSBuZXcgRGVsaXZlcnlXb3JrKGVwLCBudW1PZk1lc3NhZ2VzLCAiREVMRVRFIik7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgdHJ1ZSk7CkBAIC0xOTUsNyArMTk1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgaWYgKFhBUmVzb3VyY2UuWEFfT0sgPT0geGEucHJlcGFyZShlYy5nZXRYaWQoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgZmFsc2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlhBIFBSRVBBUkUvQ09NTUlULiBET05FIFdSSVRFIFRPIERCICIpOwpAQCAtMjA3LDE5ICsyMDcsMTkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xzLmV4cGVjdGVkUmVzdWx0cyA9IDM7CiAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZnlBbmRXYWl0KCk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy9kZWxldGUgYWxsLgogICAgICAgICAgICAgICAgICAgICBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgdyA9IG5ldyBEZWxpdmVyeVdvcmsoZXAsIDEsICJERUxFVEVfQUxMIik7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJET05FIERFTEVURSBBTEwgRlJPTSBEQiIpOwogICAgICAgICAgICAgICAgICAgICBDb250cm9scy5leHBlY3RlZFJlc3VsdHMgPSAwOwogICAgICAgICAgICAgICAgICAgICBub3RpZnlBbmRXYWl0KCk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTsKICAgICAgICAgICAgICAgICB9CiAKQEAgLTI0Myw3ICsyNDMsNyBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCJMRUFWRS4uLiIpOwogICAgIH0KIApAQCAtMjU4LDE0ICsyNTgsMTQgQEAKICAgICB9CiAKICAgICBwdWJsaWMgTWV0aG9kIGdldE9uTWVzc2FnZU1ldGhvZCgpIHsKLSAgICAgICAgCisKICAgICAgICAgTWV0aG9kIG9uTWVzc2FnZU1ldGhvZCA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDbGFzcyBtc2dMaXN0ZW5lckNsYXNzID0gY29ubmVjdG9yLk15TWVzc2FnZUxpc3RlbmVyLmNsYXNzOwogICAgICAgICAgICAgQ2xhc3NbXSBwYXJhbVR5cGVzID0geyBqYXZhLmxhbmcuU3RyaW5nLmNsYXNzIH07Ci0gICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPSAKKyAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9CiAgICAgICAgICAgICAgICAgbXNnTGlzdGVuZXJDbGFzcy5nZXRNZXRob2QoIm9uTWVzc2FnZSIsIHBhcmFtVHlwZXMpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQpAQCAtMjg4LDEzICsyODgsMTMgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIC8vU2xlZXAgZm9yIDUgc2Vjb25kcwogICAgICAgICAgICAgLy9UaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDUqMTAwMCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgc3luY2hyb25pemVkKENvbnRyb2xzLnJlYWR5TG9jaykgewogICAgICAgICAgICAgICAgIC8vTm90aWZ5IHRoZSBjbGllbnQgdG8gY2hlY2sgdGhlIHJlc3VsdHMKLSAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2subm90aWZ5KCk7IAotICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay5ub3RpZnkoKTsKKwogICAgICAgICAgICAgICAgIC8vV2FpdCB1bnRpbCByZXN1bHRzIGFyZSB2ZXJpZmllZCBieSB0aGUgY2xpZW50Ci0gICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLndhaXQoKTsgCisgICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLndhaXQoKTsKIAogICAgICAgICAgICAgICAgIGlmIChzdG9wKSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTMxMCw3ICszMTAsNyBAQAogICAgICAgICAgICAgQ29udHJvbHMuZG9uZSA9IHRydWU7CiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQoQ29udHJvbHMucmVhZHlMb2NrKSB7CiAgICAgICAgICAgICAgICAgLy9Ob3RpZnkgdGhlIGNsaWVudCB0byBjaGVjayB0aGUgcmVzdWx0cwotICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay5ub3RpZnkoKTsgCisgICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLm5vdGlmeSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkQ29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YQppbmRleCA1NTI4NzNlLi5kYzg3YmI0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWRDb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YQpAQCAtMzYsOCArMzYsOCBAQAogICAgIHB1YmxpYyBpbnQgYnJhbmNoUXVhbGlmaWVyOwogICAgIHB1YmxpYyBpbnQgZ2xvYmFsVHhJRDsKIAotICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhHVFJJRFNJWkU9IDY0OyAKLSAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYQlFVQUxTSVpFPSA2NDsgCisgICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEdUUklEU0laRT0gNjQ7CisgICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEJRVUFMU0laRT0gNjQ7CiAKICAgICBwdWJsaWMgWElEKCkgewogICAgICAgICBpbnQgZm9vID0gSUQrKzsKQEAgLTU1LDEwICs1NSwxMCBAQAogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgICAgICAgICAgICAgICAgLy8gSXQgY2FuJ3QgYmUgZXF1YWwKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBvdGhlciA9IChYSUQpbzsgICAgICAgICAgICAgICAgICAgLy8gVGhlIG90aGVyIFhJRCwgbm93IHByb3Blcmx5IGNhc3QKLSAgICAgICAgCi0gICAgICAgIGlmICh0aGlzLmZvcm1hdElEID09IG90aGVyLmZvcm1hdElEIAorCisgICAgICAgIGlmICh0aGlzLmZvcm1hdElEID09IG90aGVyLmZvcm1hdElECiAgICAgICAgICAgICAgICAgJiYgdGhpcy5icmFuY2hRdWFsaWZpZXIgPT0gb3RoZXIuYnJhbmNoUXVhbGlmaWVyCiAgICAgICAgICAgICAgICAgJiYgdGhpcy5nbG9iYWxUeElEID09IG90aGVyLmdsb2JhbFR4SUQpIHsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtOTgsNyArOTgsNyBAQAogICAgICAgICAgICAgICAgICJmb3JtYXRJRCgiICAgICArIGZvcm1hdElEICAgICArICIpLCAiICsKICAgICAgICAgICAgICAgICAiYnJhbmNoUXVhbGlmaWVyICgiICsgYnJhbmNoUXVhbGlmaWVyICsgIiksICIgKwogICAgICAgICAgICAgICAgICJnbG9iYWxUeElEKCIgKyBnbG9iYWxUeElEICsgIil9Iik7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBzOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9NRVRBLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbAppbmRleCBiMDNiYmFiLi5kYWU4Y2FjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9NRVRBLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9NRVRBLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbApAQCAtMzQsMTIgKzM0LDEyIEBACiAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9IlVSTCIgdmFsdWU9ImpkYmM6ZGVyYnk6Ly9sb2NhbGhvc3Q6MTUyNy90ZXN0ZGI7Y3JlYXRlPXRydWU7Ii8+CiAgICAgICAgIDwvY29ubmVjdG9yLWNvbm5lY3Rpb24tcG9vbD4KIAotICAgCisKIDxjb25uZWN0b3ItcmVzb3VyY2Ugam5kaS1uYW1lPSJqZGJjL2VqYi1zdWJjbGFzc2luZyIgcG9vbC1uYW1lPSJ3ZWItc3ViY2xhc3NpbmdBcHAjamRiY3JhI2phdmF4LnNxbC5EYXRhU291cmNlIi8+CiAKIDxhZG1pbi1vYmplY3QtcmVzb3VyY2Ugam5kaS1uYW1lPSJlaXMvamRiY0FkbWluIiByZXMtdHlwZT0iY29tLnN1bi5qZGJjcmEuc3BpLkpkYmNTZXR1cEFkbWluIiByZXMtYWRhcHRlcj0id2ViLXN1YmNsYXNzaW5nQXBwI2pkYmNyYSI+CiAgICA8cHJvcGVydHkgbmFtZT0iVGFibGVOYW1lIiB2YWx1ZT0iY3VzdG9tZXIyIi8+Ci0gICA8cHJvcGVydHkgbmFtZT0iSm5kaU5hbWUiIHZhbHVlPSJqYXZhOmFwcC9qZGJjL2VqYi1zdWJjbGFzc2luZyIvPiAKKyAgIDxwcm9wZXJ0eSBuYW1lPSJKbmRpTmFtZSIgdmFsdWU9ImphdmE6YXBwL2pkYmMvZWpiLXN1YmNsYXNzaW5nIi8+CiAgICA8cHJvcGVydHkgbmFtZT0iU2NoZW1hTmFtZSIgdmFsdWU9IkRCVVNFUiIvPgogICAgPHByb3BlcnR5IG5hbWU9Ik5vT2ZSb3dzIiB2YWx1ZT0iMSIvPgogPC9hZG1pbi1vYmplY3QtcmVzb3VyY2U+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvYnVpbGQucHJvcGVydGllcwppbmRleCBlMmNjNzVkLi5kYzE5YzliIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE2ICsxNSwxNiBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zdWJjbGFzc2luZyIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc3ViY2xhc3NpbmciLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9InN1YmNsYXNzaW5nIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9idWlsZC54bWwKaW5kZXggOWUwY2I2Yi4uYjk5YjQzZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL2J1aWxkLnhtbApAQCAtMzIsNyArMzIsNyBAQAogICAgICZjb21tb25CdWlsZDsKICAgICAmY29tbW9uUnVuOwogICAgICZ0ZXN0cHJvcGVydGllczsKLSAgICAKKwogPCEtLQogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCxzZXR1cCxkZXBsb3ktd2FyLCBydW4td2FyLCB1bmRlcGxveS13YXIsIGRlcGxveS1lYXIsIHJ1bi1lYXIsIHVuZGVwbG95LWVhciwgdW5zZXR1cCIvPgogCkBAIC00MSwxNSArNDEsMTUgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQsIHNldHVwLCBkZXBsb3ktZWFyLCBydW4tZWFyLCB1bnNldHVwLCB1bmRlcGxveS1lYXIiLz4KIAogPCEtLQotCTxhbnRjYWxsIHRhcmdldD0iYnVpbGQiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InNldHVwIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJydW4td2FyIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXIiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1lYXIiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InJ1bi1lYXIiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWVhciIvPgotCTxhbnRjYWxsIHRhcmdldD0idW5zZXR1cCIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InNldHVwIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4td2FyIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXIiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1lYXIiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi1lYXIiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWVhciIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0idW5zZXR1cCIvPgogICAgIDwvdGFyZ2V0PgogLS0+CiAKQEAgLTU3LDEyICs1NywxMiBAQAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICAgIDxhbnQgZGlyPSJyYSIgdGFyZ2V0PSJjbGVhbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb25uZWN0b3IiPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvc2ltcGxlQmFuay5zcWwiLz4KICAgICA8L2FudGNhbGw+Ci0gICAgICAgIAorCiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtcG9vbCI+CiAgICAgICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtY29ubmVjdG9yLWNvbm5wb29sLWNvbW1vbiI+CkBAIC03MSw5ICs3MSw5IEBACiAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImNvbm5lY3Rvci5jb25wb29sLm5hbWUiIHZhbHVlPSJlbWJlZGRlZC1yYS1wb29sIi8+CiAgICAgICAgICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0LW9yYWNsZS1wcm9wcyI+Ci0JCTxwYXJhbSBuYW1lPSJwb29sLnR5cGUiIHZhbHVlPSJjb25uZWN0b3IiLz4KLQkJPHBhcmFtIG5hbWU9ImNvbnBvb2wubmFtZSIgdmFsdWU9ImVtYmVkZGVkLXJhLXBvb2wiLz4KLQkJPC9hbnRjYWxsPgorICAgICAgICA8cGFyYW0gbmFtZT0icG9vbC50eXBlIiB2YWx1ZT0iY29ubmVjdG9yIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJjb25wb29sLm5hbWUiIHZhbHVlPSJlbWJlZGRlZC1yYS1wb29sIi8+CisgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1yZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtY29ubmVjdG9yLXJlc291cmNlLWNvbW1vbiI+CkBAIC04NiwxOCArODYsMTggQEAKICAgICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtYWRtaW4tb2JqZWN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0iY3JlYXRlLWFkbWluLW9iamVjdCAtLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSAtLXJlc3R5cGUgY29tLnN1bi5qZGJjcmEuc3BpLkpkYmNTZXR1cEFkbWluIC0tcmFuYW1lICR7YXBwbmFtZX1BcHAjamRiY3JhIC0tcHJvcGVydHkgVGFibGVOYW1lPWN1c3RvbWVyMjpKbmRpTmFtZT1qZGJjL2VqYi1zdWJjbGFzc2luZzpTY2hlbWFOYW1lPWNvbm5lY3RvcjpOb09mUm93cz0xIi8+Ci0JICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iZWlzL2pkYmNBZG1pbiIvPgorICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9ImVpcy9qZGJjQWRtaW4iLz4KICAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgPC90YXJnZXQ+CiAKICAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtYWRtaW4tb2JqZWN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KLQkgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJkZWxldGUtYWRtaW4tb2JqZWN0Ii8+Ci0JICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0gZWlzL2pkYmNBZG1pbiIvPgotCSA8L2FudGNhbGw+Ci0JIDwhLS1hbnRjYWxsIHRhcmdldD0icmVjb25maWctY29tbW9uIi8tLT4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJkZWxldGUtYWRtaW4tb2JqZWN0Ii8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0gZWlzL2pkYmNBZG1pbiIvPgorICAgICA8L2FudGNhbGw+CisgICAgIDwhLS1hbnRjYWxsIHRhcmdldD0icmVjb25maWctY29tbW9uIi8tLT4KICAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RhcnQiPgogICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXItaW5zdGFuY2UtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC0xMDUsMTUgKzEwNSwxNSBAQAogICAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1yYS1jb25maWciIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJjcmVhdGUtcmVzb3VyY2UtYWRhcHRlci1jb25maWcgIC0tcHJvcGVydHkgUkFQcm9wZXJ0eT1WQUxJRCIvPgotCSAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7YXBwbmFtZX1BcHAjamRiY3JhIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHthcHBuYW1lfUFwcCNqZGJjcmEiLz4KICAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgPC90YXJnZXQ+CiAKICAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmEtY29uZmlnIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KLQkgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJkZWxldGUtcmVzb3VyY2UtYWRhcHRlci1jb25maWciLz4KLQkgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke2FwcG5hbWV9QXBwI2pkYmNyYSIvPgotCSA8L2FudGNhbGw+CisgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0iZGVsZXRlLXJlc291cmNlLWFkYXB0ZXItY29uZmlnIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHthcHBuYW1lfUFwcCNqZGJjcmEiLz4KKyAgICAgPC9hbnRjYWxsPgogICAgICAgICAgPCEtLWFudGNhbGwgdGFyZ2V0PSJyZWNvbmZpZy1jb21tb24iLy0tPgogICAgICA8L3RhcmdldD4KIApAQCAtMTIyLDcgKzEyMiw3IEBACiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wQmFua1RhYmxlcy5zcWwiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXBvb2wiPgogICAgICAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWNvbm5lY3Rvci1jb25ucG9vbC1jb21tb24iPgogICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJjb25uZWN0b3IuY29ucG9vbC5uYW1lIiB2YWx1ZT0iZW1iZWRkZWQtcmEtcG9vbCIvPgpAQCAtMTMyLDcgKzEzMiw3IEBACiAgICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlIj4KICAgICAgICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1jb25uZWN0b3ItcmVzb3VyY2UtY29tbW9uIj4KICAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iY29ubmVjdG9yLmpuZGkubmFtZSIgdmFsdWU9ImpkYmMvZWpiLXN1YmNsYXNzaW5nIi8+Ci0JCTwvYW50Y2FsbD4KKyAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CkBAIC0xNDgsOSArMTQ4LDkgQEAKICAgICAgIDxlY2hvIG1lc3NhZ2U9ImNvbW1vbi54bWw6IENvbXBpbGluZyB0ZXN0IHNvdXJjZSBmaWxlcyIgbGV2ZWw9InZlcmJvc2UiLz4KICAgICAgIDxqYXZhYyBzcmNkaXI9InNlcnZsZXQiCiAgICAgICAgICBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKLQkgY2xhc3NwYXRoPSIke3MxYXN0ZXN0LmNsYXNzcGF0aH06cmEvcHVibGlzaC9pbnRlcm5hbC9jbGFzc2VzIgorICAgICBjbGFzc3BhdGg9IiR7czFhc3Rlc3QuY2xhc3NwYXRofTpyYS9wdWJsaXNoL2ludGVybmFsL2NsYXNzZXMiCiAgICAgICAgICBkZWJ1Zz0ib24iCi0JIGZhaWxvbmVycm9yPSJ0cnVlIi8+CisgICAgIGZhaWxvbmVycm9yPSJ0cnVlIi8+CiAgICAgIDwvdGFyZ2V0PgogCiAKQEAgLTE1OSwyNyArMTU5LDI3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICA8YW50IGRpcj0icmEiIHRhcmdldD0iYXNzZW1ibGUiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICA8L2FudGNhbGw+Ci0gICAgICAgCisKICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVqYi1qYXItY29tbW9uIj4KICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgPC9hbnRjYWxsPgogCi0gICAgCisKICAgICA8ZGVsZXRlIGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LmVhciIvPgogICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgogICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+Ci0gICAgPGVhciBlYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiICAKKyAgICA8ZWFyIGVhcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIKICAgICAgYXBweG1sPSIke2FwcGxpY2F0aW9uLnhtbH0iPgogICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KICAgICAgIDxpbmNsdWRlIG5hbWU9IiouamFyIi8+CiAgICAgICA8aW5jbHVkZSBuYW1lPSIqLndhciIvPgotICAgIDwvZmlsZXNldD4gIAorICAgIDwvZmlsZXNldD4KICAgICA8ZmlsZXNldCBkaXI9InJhL3B1Ymxpc2gvbGliIj4KICAgICAgIDxpbmNsdWRlIG5hbWU9IioucmFyIi8+CiAgICAgPC9maWxlc2V0PgpAQCAtMTg3LDkgKzE4Nyw5IEBACiAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbCIvPgogICAgIDwvZmlsZXNldD4KICAgICA8L2Vhcj4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95LWVhciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTE5NywyNyArMTk3LDI3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3ktd2FyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuLXdhciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bndlYmNsaWVudC1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJ3ZWItdG8tZWpiIChzdGFuZC1hbG9uZSB3YXIgYmFzZWQpIi8+Ci0JPC9hbnRjYWxsPgorICAgIDxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJ3ZWItdG8tZWpiIChzdGFuZC1hbG9uZSB3YXIgYmFzZWQpIi8+CisgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4tZWFyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVud2ViY2xpZW50LWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9InRlc3RzdWl0ZS5pZCIgdmFsdWU9IndlYi10by1lamIgKGVhciBiYXNlZCkiLz4KLQk8L2FudGNhbGw+CisgICAgPHBhcmFtIG5hbWU9InRlc3RzdWl0ZS5pZCIgdmFsdWU9IndlYi10by1lamIgKGVhciBiYXNlZCkiLz4KKyAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95LWVhciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogPCEtLSAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtcmEtY29uZmlnIi8+LS0+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3ktd2FyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCmluZGV4IDc5OTVjZTMuLjUxZjNiZWMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCkBAIC0yOSwyMCArMjksMjAgQEAKICAgICAgICAgPHJlcy1yZWYtbmFtZT5qZGJjL1NpbXBsZUJhbms8L3Jlcy1yZWYtbmFtZT4KICAgICAgICAgPGpuZGktbmFtZT5qYXZhOmFwcC9qZGJjL2VqYi1zdWJjbGFzc2luZzwvam5kaS1uYW1lPgogICAgICAgPC9yZXNvdXJjZS1yZWY+Ci0gICAgICA8aXMtcmVhZC1vbmx5LWJlYW4+ZmFsc2U8L2lzLXJlYWQtb25seS1iZWFuPiAKLSAgICAgIDxjb21taXQtb3B0aW9uPkI8L2NvbW1pdC1vcHRpb24+IAotICAgICA8YmVhbi1wb29sPiAKLSAgICAgICAgIDxzdGVhZHktcG9vbC1zaXplPjA8L3N0ZWFkeS1wb29sLXNpemU+IAotICAgICAgICAgPHJlc2l6ZS1xdWFudGl0eT4xPC9yZXNpemUtcXVhbnRpdHk+IAotICAgICAgICAgPG1heC1wb29sLXNpemU+MTA8L21heC1wb29sLXNpemU+IAotICAgICAgICAgPHBvb2wtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcG9vbC1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4gCi0gICAgICA8L2JlYW4tcG9vbD4gCi0gICAgICA8YmVhbi1jYWNoZT4gCi0gICAgICAgICAgPG1heC1jYWNoZS1zaXplPjEwMDwvbWF4LWNhY2hlLXNpemU+IAotICAgICAgICA8Y2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+NjA8L2NhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPiAKLSAgICAgICAgPHJlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPjM2MDA8L3JlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPiAKLSAgICAgICAgPHZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PkxSVTwvdmljdGltLXNlbGVjdGlvbi1wb2xpY3k+IAotICAgICAgPC9iZWFuLWNhY2hlPiAKKyAgICAgIDxpcy1yZWFkLW9ubHktYmVhbj5mYWxzZTwvaXMtcmVhZC1vbmx5LWJlYW4+CisgICAgICA8Y29tbWl0LW9wdGlvbj5CPC9jb21taXQtb3B0aW9uPgorICAgICA8YmVhbi1wb29sPgorICAgICAgICAgPHN0ZWFkeS1wb29sLXNpemU+MDwvc3RlYWR5LXBvb2wtc2l6ZT4KKyAgICAgICAgIDxyZXNpemUtcXVhbnRpdHk+MTwvcmVzaXplLXF1YW50aXR5PgorICAgICAgICAgPG1heC1wb29sLXNpemU+MTA8L21heC1wb29sLXNpemU+CisgICAgICAgICA8cG9vbC1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4zNjAwPC9wb29sLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPgorICAgICAgPC9iZWFuLXBvb2w+CisgICAgICA8YmVhbi1jYWNoZT4KKyAgICAgICAgICA8bWF4LWNhY2hlLXNpemU+MTAwPC9tYXgtY2FjaGUtc2l6ZT4KKyAgICAgICAgPGNhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjYwPC9jYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4KKyAgICAgICAgPHJlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPjM2MDA8L3JlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPgorICAgICAgICA8dmljdGltLXNlbGVjdGlvbi1wb2xpY3k+TFJVPC92aWN0aW0tc2VsZWN0aW9uLXBvbGljeT4KKyAgICAgIDwvYmVhbi1jYWNoZT4KICAgICA8L2VqYj4KICAgICA8ZWpiPgogICAgICAgPGVqYi1uYW1lPkN1c3RvbWVyQ2hlY2tpbmdFSkI8L2VqYi1uYW1lPgpAQCAtNTEsMjAgKzUxLDIwIEBACiAgICAgICAgIDxyZXMtcmVmLW5hbWU+amRiYy9TaW1wbGVCYW5rPC9yZXMtcmVmLW5hbWU+CiAgICAgICAgIDxqbmRpLW5hbWU+amF2YTphcHAvamRiYy9lamItc3ViY2xhc3Npbmc8L2puZGktbmFtZT4KICAgICAgIDwvcmVzb3VyY2UtcmVmPgotICAgICAgPGlzLXJlYWQtb25seS1iZWFuPmZhbHNlPC9pcy1yZWFkLW9ubHktYmVhbj4gCi0gICAgICA8Y29tbWl0LW9wdGlvbj5CPC9jb21taXQtb3B0aW9uPiAKLSAgICAgPGJlYW4tcG9vbD4gCi0gICAgICAgICA8c3RlYWR5LXBvb2wtc2l6ZT4wPC9zdGVhZHktcG9vbC1zaXplPiAKLSAgICAgICAgIDxyZXNpemUtcXVhbnRpdHk+MTwvcmVzaXplLXF1YW50aXR5PiAKLSAgICAgICAgIDxtYXgtcG9vbC1zaXplPjEwPC9tYXgtcG9vbC1zaXplPiAKKyAgICAgIDxpcy1yZWFkLW9ubHktYmVhbj5mYWxzZTwvaXMtcmVhZC1vbmx5LWJlYW4+CisgICAgICA8Y29tbWl0LW9wdGlvbj5CPC9jb21taXQtb3B0aW9uPgorICAgICA8YmVhbi1wb29sPgorICAgICAgICAgPHN0ZWFkeS1wb29sLXNpemU+MDwvc3RlYWR5LXBvb2wtc2l6ZT4KKyAgICAgICAgIDxyZXNpemUtcXVhbnRpdHk+MTwvcmVzaXplLXF1YW50aXR5PgorICAgICAgICAgPG1heC1wb29sLXNpemU+MTA8L21heC1wb29sLXNpemU+CiAgICAgICAgIDxwb29sLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjM2MDA8L3Bvb2wtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+Ci0gICAgICA8L2JlYW4tcG9vbD4gCi0gICAgICA8YmVhbi1jYWNoZT4gCisgICAgICA8L2JlYW4tcG9vbD4KKyAgICAgIDxiZWFuLWNhY2hlPgogICAgICAgICAgIDxtYXgtY2FjaGUtc2l6ZT4xMDA8L21heC1jYWNoZS1zaXplPgogICAgICAgICAgIDxjYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz42MDwvY2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+CiAgICAgICAgICAgPHJlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPjM2MDA8L3JlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPgogICAgICAgICAgIDx2aWN0aW0tc2VsZWN0aW9uLXBvbGljeT5MUlU8L3ZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PgotICAgICAgPC9iZWFuLWNhY2hlPiAKKyAgICAgIDwvYmVhbi1jYWNoZT4KICAgICA8L2VqYj4KICAgPC9lbnRlcnByaXNlLWJlYW5zPgogPC9zdW4tZWpiLWphcj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL2VqYi9DdXN0b21lci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvZWpiL0N1c3RvbWVyLmphdmEKaW5kZXggNTkyMmYzMS4uMzYxNWUxNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvZWpiL0N1c3RvbWVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvZWpiL0N1c3RvbWVyLmphdmEKQEAgLTQ2LDQgKzQ2LDQgQEAKIAogfQogCi0gIAorCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9lamIvQ3VzdG9tZXJDaGVja2luZy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvZWpiL0N1c3RvbWVyQ2hlY2tpbmcuamF2YQppbmRleCBmZjE1ZTdlLi44OWRjMzIzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9lamIvQ3VzdG9tZXJDaGVja2luZy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL2VqYi9DdXN0b21lckNoZWNraW5nLmphdmEKQEAgLTIyLDQgKzIyLDQgQEAKIHsKIH0KIAotICAKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvZWpiL0N1c3RvbWVyQ2hlY2tpbmdFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL2VqYi9DdXN0b21lckNoZWNraW5nRUpCLmphdmEKaW5kZXggZWUwZDE3Yy4uNGI1NDQ0NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvZWpiL0N1c3RvbWVyQ2hlY2tpbmdFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9lamIvQ3VzdG9tZXJDaGVja2luZ0VKQi5qYXZhCkBAIC05NCw1ICs5NCw1IEBACiAgIH0KIAogfQotICAgIAotICAgIAorCisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL2VqYi9DdXN0b21lckVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvZWpiL0N1c3RvbWVyRUpCLmphdmEKaW5kZXggMDUyMGI2MC4uMDcyMjBkYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvZWpiL0N1c3RvbWVyRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvZWpiL0N1c3RvbWVyRUpCLmphdmEKQEAgLTUzLDcgKzUzLDcgQEAKIAogICBwdWJsaWMgU3RyaW5nIGdldEFkZHJlc3MxKCkKICAgewotICAgIHJldHVybiBhZGRyZXNzMTsgCisgICAgcmV0dXJuIGFkZHJlc3MxOwogICB9CiAKICAgcHVibGljIFN0cmluZyBnZXRBZGRyZXNzMigpCkBAIC0xMzksNyArMTM5LDcgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTUUwgZXhjZXB0aW9uIG9jY3VyZWQgaW4gZWpiUmVtb3ZlIG1ldGhvZCIpOwogICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgfQotICAgIAorCiAgIH0KIAogICBwdWJsaWMgdm9pZCBlamJTdG9yZSgpCkBAIC0yMDYsMTIgKzIwNiwxMiBAQAogICAgIH0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CiAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNRTEV4Y2VwdGlvbiBvY2N1cnJlZCBpbiBlamJMb2FkKCkgbWV0aG9kIik7CiAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0gICAKKyAgICB9CiAgIH0KIAogICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHt9CiAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHt9CiB9Ci0gICAgICAKLSAgICAKLSAgICAKKworCisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL2VqYi9DdXN0b21lclNhdmluZ3MuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL2VqYi9DdXN0b21lclNhdmluZ3MuamF2YQppbmRleCAyNzQwNjkyLi5jNDVhMWM1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9lamIvQ3VzdG9tZXJTYXZpbmdzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvZWpiL0N1c3RvbWVyU2F2aW5ncy5qYXZhCkBAIC0yMiw0ICsyMiw0IEBACiB7CiB9CiAKLSAgCisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL2VqYi9DdXN0b21lclNhdmluZ3NFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL2VqYi9DdXN0b21lclNhdmluZ3NFSkIuamF2YQppbmRleCBmMzBiNTA2Li5iMGNlN2I1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9lamIvQ3VzdG9tZXJTYXZpbmdzRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvZWpiL0N1c3RvbWVyU2F2aW5nc0VKQi5qYXZhCkBAIC05NSw2ICs5NSw2IEBACiAgIH0KIAogfQotICAgICAgCi0gICAgCi0gICAgCisKKworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvYnVpbGQucHJvcGVydGllcwppbmRleCBlZTJlY2EwLi5mZDIxYzNkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE0LDcgKzE0LDcgQEAKICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAjCiAKLSAgICAKKwogIyMjIENvbXBvbmVudCBQcm9wZXJ0aWVzICMjIwogc3JjLmRpcj1zcmMKIGNvbXBvbmVudC5wdWJsaXNoLmhvbWU9LgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvYnVpbGQueG1sCmluZGV4IDNiYjZjM2YuLmZjNTQ1ODEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9idWlsZC54bWwKQEAgLTIzLDYyICsyMyw2MiBAQAogCiA8cHJvamVjdCBuYW1lPSJKREJDQ29ubmVjdG9yIHRvcCBsZXZlbCIgZGVmYXVsdD0iYnVpbGQiPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJwa2cuZGlyIiB2YWx1ZT0iY29tL3N1bi9qZGJjcmEvc3BpIi8+Ci0gICAgCisKICAgICAmY29tbW9uOwogICAgICZ0ZXN0Y29tbW9uOwogICAgIDxwcm9wZXJ0eSBmaWxlPSIuL2J1aWxkLnByb3BlcnRpZXMiLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUsYXNzZW1ibGUiIC8+Ci0gICAgICAgICAgCisKIAogICAgIDwhLS0gaW5pdC4gSW5pdGlhbGl6YXRpb24gaW52b2x2ZXMgY3JlYXRpbmcgcHVibGlzaGluZyBkaXJlY3RvcmllcyBhbmQKLSAgICAgICAgIE9TIHNwZWNpZmljIHRhcmdldHMuIC0tPiAKKyAgICAgICAgIE9TIHNwZWNpZmljIHRhcmdldHMuIC0tPgogICAgIDx0YXJnZXQgbmFtZT0iaW5pdCIgZGVzY3JpcHRpb249IiR7Y29tcG9uZW50Lm5hbWV9IGluaXRpYWxpemF0aW9uIj4KICAgICAgICAgPHRzdGFtcD4KICAgICAgICAgICAgIDxmb3JtYXQgcHJvcGVydHk9InN0YXJ0LnRpbWUiIHBhdHRlcm49Ik1NL2RkL3l5eXkgaGg6bW0gYWEiLz4KLSAgICAgICAgPC90c3RhbXA+ICAgIAorICAgICAgICA8L3RzdGFtcD4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iQnVpbGRpbmcgY29tcG9uZW50ICR7Y29tcG9uZW50Lm5hbWV9Ii8+CiAgICAgICAgIDxta2RpciBkaXI9IiR7Y29tcG9uZW50LmNsYXNzZXMuZGlyfSIvPgotICAgICAgICA8bWtkaXIgZGlyPSIke2NvbXBvbmVudC5saWIuaG9tZX0iLz4gICAgCisgICAgICAgIDxta2RpciBkaXI9IiR7Y29tcG9uZW50LmxpYi5ob21lfSIvPgogICAgIDwvdGFyZ2V0PgotICAgIDwhLS0gY29tcGlsZSAtLT4gCisgICAgPCEtLSBjb21waWxlIC0tPgogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iaW5pdCIKLSAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJDb21waWxlIGNvbS9zdW4vKiBjb20vaXBsYW5ldC8qIHNvdXJjZXMiPiAgCisgICAgICAgICAgICBkZXNjcmlwdGlvbj0iQ29tcGlsZSBjb20vc3VuLyogY29tL2lwbGFuZXQvKiBzb3VyY2VzIj4KICAgICAgICAgPCEtLTxlY2hvIG1lc3NhZ2U9IkNvbm5lY3RvciBhcGkgcmVzaWRlcyBpbiAke2Nvbm5lY3Rvci1hcGkuamFyfSIvPi0tPgotICAgICAgICA8amF2YWMgc3JjZGlyPSIke3NyYy5kaXJ9IiAKKyAgICAgICAgPGphdmFjIHNyY2Rpcj0iJHtzcmMuZGlyfSIKICAgICAgICAgICAgICAgIGRlc3RkaXI9IiR7Y29tcG9uZW50LmNsYXNzZXMuZGlyfSIKLQkgICAgICAgZmFpbG9uZXJyb3I9InRydWUiPgotCSAgICAgICA8Y2xhc3NwYXRoPgotCSAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuUzFBU19IT01FfS9tb2R1bGVzIj4KLQkgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLmphciIgLz4KLQkgCSA8L2ZpbGVzZXQ+CisgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIj4KKyAgICAgICAgICAgPGNsYXNzcGF0aD4KKyAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LlMxQVNfSE9NRX0vbW9kdWxlcyI+CisgICAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKiovKi5qYXIiIC8+CisgICAgICAgICAgPC9maWxlc2V0PgogICAgICAgICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJjb20vc3VuL2pkYmNyYS8qKiIvPgogICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iY29tL3N1bi9hcHBzZXJ2LyoqIi8+CiAgICAgICAgIDwvamF2YWM+CiAgICAgPC90YXJnZXQ+Ci0gICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkIi8+CiAKLSAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUiPiAgICAKLSAgICAJCi0JPGphciBqYXJmaWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vamRiYy5qYXIiIAotICAgICAgICAgICAgYmFzZWRpcj0iJHtjb21wb25lbnQuY2xhc3Nlcy5kaXJ9IiBpbmNsdWRlcz0iJHtwa2cuZGlyfS8qKi8qLCAKLSAgICAgICAgICAgIGNvbS9zdW4vYXBwc2Vydi8qKi8qLCBjb20vc3VuL2pkYmNyYS91dGlsLyoqLyosIGNvbS9zdW4vamRiY3JhL2NvbW1vbi8qKi8qIi8+IAotICAgCQotICAgICAgICA8Y29weSBmaWxlPSIke3NyYy5kaXJ9L2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvcmEtZHMueG1sIiAKLSAgICAgICAgICAgICAgICB0b2ZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4JCisgICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIj4KKworICAgIDxqYXIgamFyZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L2pkYmMuamFyIgorICAgICAgICAgICAgYmFzZWRpcj0iJHtjb21wb25lbnQuY2xhc3Nlcy5kaXJ9IiBpbmNsdWRlcz0iJHtwa2cuZGlyfS8qKi8qLAorICAgICAgICAgICAgY29tL3N1bi9hcHBzZXJ2LyoqLyosIGNvbS9zdW4vamRiY3JhL3V0aWwvKiovKiwgY29tL3N1bi9qZGJjcmEvY29tbW9uLyoqLyoiLz4KKworICAgICAgICA8Y29weSBmaWxlPSIke3NyYy5kaXJ9L2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvcmEtZHMueG1sIgorICAgICAgICAgICAgICAgIHRvZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgogICAgICAgICA8L2NvcHk+Ci0gICAJPGphciBqYXJmaWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vamRiY3JhLnJhciIgCi0JCWJhc2VkaXI9IiR7Y29tcG9uZW50LmxpYi5ob21lfSIgaW5jbHVkZXM9ImpkYmMuamFyIj4KKyAgICAgICA8amFyIGphcmZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9qZGJjcmEucmFyIgorICAgICAgICBiYXNlZGlyPSIke2NvbXBvbmVudC5saWIuaG9tZX0iIGluY2x1ZGVzPSJqZGJjLmphciI+CiAKLSAgIAkJPG1ldGFpbmYgZGlyPSIke2NvbXBvbmVudC5saWIuaG9tZX0iPgotICAgCQkJPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+Ci0gICAJCTwvbWV0YWluZj4KLSAgIAk8L2phcj4KKyAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2NvbXBvbmVudC5saWIuaG9tZX0iPgorICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+CisgICAgICAgICAgIDwvbWV0YWluZj4KKyAgICAgICA8L2phcj4KIAotICAgCTxkZWxldGUgZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L3JhLnhtbCIvPgotCQorICAgICAgIDxkZWxldGUgZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L3JhLnhtbCIvPgorCiAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVzY3JpcHRpb249IkNsZWFuIHRoZSBidWlsZCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9hcHBzZXJ2L2pkYmNyYS9EYXRhU291cmNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9hcHBzZXJ2L2pkYmNyYS9EYXRhU291cmNlLmphdmEKaW5kZXggOWY4Mzk5YS4uYjZlZjMwYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vYXBwc2Vydi9qZGJjcmEvRGF0YVNvdXJjZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2FwcHNlcnYvamRiY3JhL0RhdGFTb3VyY2UuamF2YQpAQCAtMjAsMTUgKzIwLDE1IEBACiBpbXBvcnQgamF2YS5zcWwuU1FMRXhjZXB0aW9uOwogCiAvKioKLSAqIFRoZSA8Y29kZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29kZT4gaW1wbGVtZW50YXRpb24gb2YgU3VuT05FIGFwcGxpY2F0aW9uIAorICogVGhlIDxjb2RlPmphdmF4LnNxbC5EYXRhU291cmNlPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBvZiBTdW5PTkUgYXBwbGljYXRpb24KICAqIHNlcnZlciB3aWxsIGltcGxlbWVudCB0aGlzIGludGVyZmFjZS4gQW4gYXBwbGljYXRpb24gcHJvZ3JhbSB3b3VsZCBiZSBhYmxlCi0gKiB0byB1c2UgdGhpcyBpbnRlcmZhY2UgdG8gZG8gdGhlIGV4dGVuZGVkIGZ1bmN0aW9uYWxpdHkgZXhwb3NlZCBieSBTdW5PTkUgCisgKiB0byB1c2UgdGhpcyBpbnRlcmZhY2UgdG8gZG8gdGhlIGV4dGVuZGVkIGZ1bmN0aW9uYWxpdHkgZXhwb3NlZCBieSBTdW5PTkUKICAqIGFwcGxpY2F0aW9uIHNlcnZlci4KLSAqIDxwPkEgc2FtcGxlIGNvZGUgZm9yIGdldHRpbmcgZHJpdmVyJ3MgY29ubmVjdGlvbiBpbXBsZW1lbnRhdGlvbiB3b3VsZCBsaWtlIAorICogPHA+QSBzYW1wbGUgY29kZSBmb3IgZ2V0dGluZyBkcml2ZXIncyBjb25uZWN0aW9uIGltcGxlbWVudGF0aW9uIHdvdWxkIGxpa2UKICAqIHRoZSBmb2xsb3dpbmcuCiAgKiA8cHJlPgogICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICBjb20uc3VuLmFwcHNlcnYuRGF0YVNvdXJjZSBkcyA9IChjb20uc3VuLmFwcHNlcnYuRGF0YVNPdXJjZSkgaWMubG9va3VwKCJqZGJjL1BvaW50QmFzZSIpOyAKKyAgICAgY29tLnN1bi5hcHBzZXJ2LkRhdGFTb3VyY2UgZHMgPSAoY29tLnN1bi5hcHBzZXJ2LkRhdGFTT3VyY2UpIGljLmxvb2t1cCgiamRiYy9Qb2ludEJhc2UiKTsKICAgICAgQ29ubmVjdGlvbiBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7CiAgICAgIENvbm5lY3Rpb24gZHJpdmVyY29uID0gZHMuZ2V0Q29ubmVjdGlvbihjb24pOwogCkBAIC0zNiwxMyArMzYsMTMgQEAKIAogICAgICBjb24uY2xvc2UoKTsKICAgIDwvcHJlPgotICogCisgKgogICogQGF1dGhvciBCaW5vZCBQLkcKICAqLwogcHVibGljIGludGVyZmFjZSBEYXRhU291cmNlIGV4dGVuZHMgamF2YXguc3FsLkRhdGFTb3VyY2UgewogCiAgICAgLyoqCi0gICAgICogUmV0cmlldmVzIHRoZSBhY3R1YWwgU1FMQ29ubmVjdGlvbiBmcm9tIHRoZSBDb25uZWN0aW9uIHdyYXBwZXIgCisgICAgICogUmV0cmlldmVzIHRoZSBhY3R1YWwgU1FMQ29ubmVjdGlvbiBmcm9tIHRoZSBDb25uZWN0aW9uIHdyYXBwZXIKICAgICAgKiBpbXBsZW1lbnRhdGlvbiBvZiBTdW5PTkUgYXBwbGljYXRpb24gc2VydmVyLiBJZiBhbiBhY3R1YWwgY29ubmVjdGlvbiBpcwogICAgICAqIHN1cHBsaWVkIGFzIGFyZ3VtZW50LCB0aGVuIGl0IHdpbGwgYmUganVzdCByZXR1cm5lZC4KICAgICAgKgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlT2JqZWN0QnVpbGRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlT2JqZWN0QnVpbGRlci5qYXZhCmluZGV4IGMyODIyZTIuLjZhMzY2YjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VPYmplY3RCdWlsZGVyLmphdmEKQEAgLTI3LDIyICsyNywyMiBAQAogaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsKIGltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsKIC8qKgotICogVXRpbGl0eSBjbGFzcywgd2hpY2ggd291bGQgY3JlYXRlIG5lY2Vzc2FyeSBEYXRhc291cmNlIG9iamVjdCBhY2NvcmRpbmcgdG8gdGhlIAorICogVXRpbGl0eSBjbGFzcywgd2hpY2ggd291bGQgY3JlYXRlIG5lY2Vzc2FyeSBEYXRhc291cmNlIG9iamVjdCBhY2NvcmRpbmcgdG8gdGhlCiAgKiBzcGVjaWZpY2F0aW9uLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMjMKLSAqIEBhdXRob3IJQmlub2QgUC5HCi0gKiBAc2VlCQljb20uc3VuLmpkYmNyYS5jb21tb24uRGF0YVNvdXJjZVNwZWMKLSAqIEBzZWUJCWNvbS5zdW4uamRiY3JhLnV0aWwuTWV0aG9kRXhjZWN1dG9yCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzIzCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRworICogQHNlZSAgICAgICAgY29tLnN1bi5qZGJjcmEuY29tbW9uLkRhdGFTb3VyY2VTcGVjCisgKiBAc2VlICAgICAgICBjb20uc3VuLmpkYmNyYS51dGlsLk1ldGhvZEV4Y2VjdXRvcgogICovCiBwdWJsaWMgY2xhc3MgRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIgaW1wbGVtZW50cyBqYXZhLmlvLlNlcmlhbGl6YWJsZXsKIAogICAgIHByaXZhdGUgRGF0YVNvdXJjZVNwZWMgc3BlYzsKLSAgICAKKwogICAgIHByaXZhdGUgSGFzaHRhYmxlIGRyaXZlclByb3BlcnRpZXMgPSBudWxsOwotICAgIAotICAgIHByaXZhdGUgTWV0aG9kRXhlY3V0b3IgZXhlY3V0b3IgPSBudWxsOyAgICAKLSAgICAKKworICAgIHByaXZhdGUgTWV0aG9kRXhlY3V0b3IgZXhlY3V0b3IgPSBudWxsOworCiAgICAgcHJpdmF0ZSBzdGF0aWMgTG9nZ2VyIF9sb2dnZXI7CiAgICAgc3RhdGljIHsKICAgICAgICAgX2xvZ2dlciA9IExvZ2dlci5nZXRBbm9ueW1vdXNMb2dnZXIoKTsKQEAgLTUwLDE2NyArNTAsMTY3IEBACiAgICAgcHJpdmF0ZSBib29sZWFuIGRlYnVnID0gZmFsc2U7CiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0IGEgRGF0YVNvdXJjZSBPYmplY3QgZnJvbSB0aGUgc3BlYy4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0Jc3BlYwk8Y29kZT4gRGF0YVNvdXJjZVNwZWMgPC9jb2RlPiBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3BlYyAgICA8Y29kZT4gRGF0YVNvdXJjZVNwZWMgPC9jb2RlPiBvYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIERhdGFTb3VyY2VPYmplY3RCdWlsZGVyKERhdGFTb3VyY2VTcGVjIHNwZWMpIHsKLSAgICAJdGhpcy5zcGVjID0gc3BlYzsKLSAgICAJZXhlY3V0b3IgPSBuZXcgTWV0aG9kRXhlY3V0b3IoKTsKKyAgICAgICAgdGhpcy5zcGVjID0gc3BlYzsKKyAgICAgICAgZXhlY3V0b3IgPSBuZXcgTWV0aG9kRXhlY3V0b3IoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3QgdGhlIERhdGFTb3VyY2UgT2JqZWN0IGZyb20gdGhlIHNwZWMuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCU9iamVjdCBjb25zdHJ1Y3RlZCB1c2luZyB0aGUgRGF0YVNvdXJjZVNwZWMuCi0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4gaWYgdGhlIGNsYXNzIGlzIG5vdCBmb3VuZCBvciBzb21lIGlzc3VlIGluIGV4ZWN1dGluZwotICAgICAqCQlzb21lIG1ldGhvZC4KKyAgICAgKiBAcmV0dXJuICAgIE9iamVjdCBjb25zdHJ1Y3RlZCB1c2luZyB0aGUgRGF0YVNvdXJjZVNwZWMuCisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4gaWYgdGhlIGNsYXNzIGlzIG5vdCBmb3VuZCBvciBzb21lIGlzc3VlIGluIGV4ZWN1dGluZworICAgICAqICAgICAgICBzb21lIG1ldGhvZC4KICAgICAgKi8KICAgICBwdWJsaWMgT2JqZWN0IGNvbnN0cnVjdERhdGFTb3VyY2VPYmplY3QoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb257Ci0gICAgCWRyaXZlclByb3BlcnRpZXMgPSBwYXJzZURyaXZlclByb3BlcnRpZXMoc3BlYyk7CisgICAgICAgIGRyaXZlclByb3BlcnRpZXMgPSBwYXJzZURyaXZlclByb3BlcnRpZXMoc3BlYyk7CiAgICAgICAgIE9iamVjdCBkYXRhU291cmNlT2JqZWN0ID0gZ2V0RGF0YVNvdXJjZU9iamVjdCgpOwogICAgICAgICBNZXRob2RbXSBtZXRob2RzID0gZGF0YVNvdXJjZU9iamVjdC5nZXRDbGFzcygpLmdldE1ldGhvZHMoKTsKICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgbWV0aG9kcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgU3RyaW5nIG1ldGhvZE5hbWUgPSBtZXRob2RzW2ldLmdldE5hbWUoKTsKLQkgICAgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0VXNlciIpKXsJICAgIAkKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlVTRVJOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRQYXNzd29yZCIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBBU1NXT1JEKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRMb2dpblRpbWVPdXQiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dJTlRJTUVPVVQpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldExvZ1dyaXRlciIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR1dSSVRFUiksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0RGF0YWJhc2VOYW1lIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQUJBU0VOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXREYXRhU291cmNlTmFtZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXREZXNjcmlwdGlvbiIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFU0NSSVBUSU9OKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TmV0d29ya1Byb3RvY29sIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTkVUV09SS1BST1RPQ09MKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRQb3J0TnVtYmVyIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUE9SVE5VTUJFUiksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0Um9sZU5hbWUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ST0xFTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAkJICAgIAkKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0U2VydmVyTmFtZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlNFUlZFUk5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWF4U3RhdGVtZW50cyIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1BWFNUQVRFTUVOVFMpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldEluaXRpYWxQb29sU2l6ZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLklOSVRJQUxQT09MU0laRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAkKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWluUG9vbFNpemUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NSU5QT09MU0laRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWF4UG9vbFNpemUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NQVhQT09MU0laRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAkKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWF4SWRsZVRpbWUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NQVhJRExFVElNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAkKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0UHJvcGVydHlDeWNsZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBST1BFUlRZQ1lDTEUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChkcml2ZXJQcm9wZXJ0aWVzLmNvbnRhaW5zS2V5KG1ldGhvZE5hbWUudG9VcHBlckNhc2UoKSkpewotCSAgICAJVmVjdG9yIHZhbHVlcyA9IChWZWN0b3IpIGRyaXZlclByb3BlcnRpZXMuZ2V0KG1ldGhvZE5hbWUudG9VcHBlckNhc2UoKSk7Ci0JICAgICAgICBleGVjdXRvci5ydW5NZXRob2QobWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0LCB2YWx1ZXMpOwotCSAgICB9CisgICAgICAgIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFVzZXIiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5VU0VSTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0UGFzc3dvcmQiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QQVNTV09SRCksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TG9naW5UaW1lT3V0IikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HSU5USU1FT1VUKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRMb2dXcml0ZXIiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dXUklURVIpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldERhdGFiYXNlTmFtZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFCQVNFTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0RGF0YVNvdXJjZU5hbWUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBU09VUkNFTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0RGVzY3JpcHRpb24iKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERVNDUklQVElPTiksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TmV0d29ya1Byb3RvY29sIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTkVUV09SS1BST1RPQ09MKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRQb3J0TnVtYmVyIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUE9SVE5VTUJFUiksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0Um9sZU5hbWUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ST0xFTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0U2VydmVyTmFtZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlNFUlZFUk5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1heFN0YXRlbWVudHMiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NQVhTVEFURU1FTlRTKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRJbml0aWFsUG9vbFNpemUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5JTklUSUFMUE9PTFNJWkUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1pblBvb2xTaXplIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUlOUE9PTFNJWkUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1heFBvb2xTaXplIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUFYUE9PTFNJWkUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1heElkbGVUaW1lIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUFYSURMRVRJTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFByb3BlcnR5Q3ljbGUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QUk9QRVJUWUNZQ0xFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAoZHJpdmVyUHJvcGVydGllcy5jb250YWluc0tleShtZXRob2ROYW1lLnRvVXBwZXJDYXNlKCkpKXsKKyAgICAgICAgICAgIFZlY3RvciB2YWx1ZXMgPSAoVmVjdG9yKSBkcml2ZXJQcm9wZXJ0aWVzLmdldChtZXRob2ROYW1lLnRvVXBwZXJDYXNlKCkpOworICAgICAgICAgICAgZXhlY3V0b3IucnVuTWV0aG9kKG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCwgdmFsdWVzKTsKKyAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBkYXRhU291cmNlT2JqZWN0OwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgZXh0cmEgZHJpdmVyIHByb3BlcnRpZXMgZnJvbSB0aGUgRGF0YVNvdXJjZVNwZWMgb2JqZWN0IGFuZAogICAgICAqIHBhcnNlIHRoZW0gdG8gYSBzZXQgb2YgbWV0aG9kTmFtZSBhbmQgcGFyYW1ldGVycy4gUHJlcGFyZSBhIGhhc2h0YWJsZQogICAgICAqIGNvbnRhaW5pbmcgdGhlc2UgZGV0YWlscyBhbmQgcmV0dXJuLgogICAgICAqCi0gICAgICogQHBhcmFtCXNwZWMJPGNvZGU+IERhdGFTb3VyY2VTcGVjIDwvY29kZT4gb2JqZWN0LgotICAgICAqIEByZXR1cm4JSGFzaHRhYmxlIGNvbnRhaW5pbmcgbWV0aG9kIG5hbWVzIGFuZCBwYXJhbWV0ZXJzLAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JSWYgZGVsaW1pdGVyIGlzIG5vdCBwcm92aWRlZCBhbmQgcHJvcGVydHkgc3RyaW5nCi0gICAgICoJCQkJCWlzIG5vdCBudWxsLgorICAgICAqIEBwYXJhbSAgICBzcGVjICAgIDxjb2RlPiBEYXRhU291cmNlU3BlYyA8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcmV0dXJuICAgIEhhc2h0YWJsZSBjb250YWluaW5nIG1ldGhvZCBuYW1lcyBhbmQgcGFyYW1ldGVycywKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIElmIGRlbGltaXRlciBpcyBub3QgcHJvdmlkZWQgYW5kIHByb3BlcnR5IHN0cmluZworICAgICAqICAgICAgICAgICAgICAgICAgICBpcyBub3QgbnVsbC4KICAgICAgKi8KICAgICBwcml2YXRlIEhhc2h0YWJsZSBwYXJzZURyaXZlclByb3BlcnRpZXMoRGF0YVNvdXJjZVNwZWMgc3BlYykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewotICAgIAlTdHJpbmcgZGVsaW0gPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERUxJTUlURVIpOworICAgICAgICBTdHJpbmcgZGVsaW0gPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERUxJTUlURVIpOwogCiAgICAgICAgIFN0cmluZyBwcm9wID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuRFJJVkVSUFJPUEVSVElFUyk7Ci0JaWYgKCBwcm9wID09IG51bGwgfHwgcHJvcC50cmltKCkuZXF1YWxzKCIiKSkgewotCSAgICByZXR1cm4gbmV3IEhhc2h0YWJsZSgpOwotCX0gZWxzZSBpZiAoZGVsaW0gPT0gbnVsbCB8fCBkZWxpbS5lcXVhbHMoIiIpKSB7Ci0JICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbiAoIkRlbGltaXRlciBpcyBub3QgcHJvdmlkZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24iKTsKLQl9Ci0JCi0JSGFzaHRhYmxlIHByb3BlcnRpZXMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0JZGVsaW0gPSBkZWxpbS50cmltKCk7CQotCVN0cmluZyBzZXAgPSBkZWxpbStkZWxpbTsKLQlpbnQgc2VwTGVuID0gc2VwLmxlbmd0aCgpOwotCVN0cmluZyBjYWNoZSA9IHByb3A7Ci0JVmVjdG9yIG1ldGhvZHMgPSBuZXcgVmVjdG9yKCk7Ci0JCi0Jd2hpbGUgKGNhY2hlLmluZGV4T2Yoc2VwKSAhPSAtMSkgewotCSAgICBpbnQgaW5kZXggPSBjYWNoZS5pbmRleE9mKHNlcCk7Ci0JICAgIFN0cmluZyBuYW1lID0gY2FjaGUuc3Vic3RyaW5nKDAsaW5kZXgpOwotCSAgICBpZiAobmFtZS50cmltKCkgIT0gIiIpIHsKLQkgICAgICAgIG1ldGhvZHMuYWRkKG5hbWUpOwotCSAgICAJY2FjaGUgPSBjYWNoZS5zdWJzdHJpbmcoaW5kZXgrc2VwTGVuKTsKLQkgICAgfQotCX0KLQkKLSAgICAJRW51bWVyYXRpb24gYWxsTWV0aG9kcyA9IG1ldGhvZHMuZWxlbWVudHMoKTsKLSAgICAJd2hpbGUgKGFsbE1ldGhvZHMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAJICAgIFN0cmluZyBvbmVNZXRob2QgPSAoU3RyaW5nKSBhbGxNZXRob2RzLm5leHRFbGVtZW50KCk7ICAgIAkgICAgCi0gICAgCSAgICBpZiAoIW9uZU1ldGhvZC50cmltKCkuZXF1YWxzKCIiKSkgewotICAgIAkgICAgCVN0cmluZyBtZXRob2ROYW1lID0gbnVsbDsKLSAgICAJICAgIAlWZWN0b3IgcGFybXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgCSAgICAJU3RyaW5nVG9rZW5pemVyIG1ldGhvZERldGFpbHMgPSBuZXcgU3RyaW5nVG9rZW5pemVyKG9uZU1ldGhvZCxkZWxpbSk7Ci0JCWZvciAoaW50IGk9MDsgbWV0aG9kRGV0YWlscy5oYXNNb3JlVG9rZW5zKCk7aSsrICkgewotCQkgICAgU3RyaW5nIHRva2VuID0gKFN0cmluZykgbWV0aG9kRGV0YWlscy5uZXh0VG9rZW4oKTsKLQkJICAgIGlmIChpPT0wKSB7Ci0JCSAgICAJbWV0aG9kTmFtZSA9IHRva2VuLnRvVXBwZXJDYXNlKCk7Ci0JCSAgICB9IGVsc2UgewotCQkgICAgCXBhcm1zLmFkZCh0b2tlbik7CQkgICAgCQotCQkgICAgfQotCQl9Ci0JCXByb3BlcnRpZXMucHV0KG1ldGhvZE5hbWUscGFybXMpOwotICAgIAkgICAgfSAgICAJICAgIAotICAgIAl9Ci0gICAgCXJldHVybiBwcm9wZXJ0aWVzOworICAgIGlmICggcHJvcCA9PSBudWxsIHx8IHByb3AudHJpbSgpLmVxdWFscygiIikpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBIYXNodGFibGUoKTsKKyAgICB9IGVsc2UgaWYgKGRlbGltID09IG51bGwgfHwgZGVsaW0uZXF1YWxzKCIiKSkgeworICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24gKCJEZWxpbWl0ZXIgaXMgbm90IHByb3ZpZGVkIGluIHRoZSBjb25maWd1cmF0aW9uIik7CiAgICAgfQotICAgIAorCisgICAgSGFzaHRhYmxlIHByb3BlcnRpZXMgPSBuZXcgSGFzaHRhYmxlKCk7CisgICAgZGVsaW0gPSBkZWxpbS50cmltKCk7CisgICAgU3RyaW5nIHNlcCA9IGRlbGltK2RlbGltOworICAgIGludCBzZXBMZW4gPSBzZXAubGVuZ3RoKCk7CisgICAgU3RyaW5nIGNhY2hlID0gcHJvcDsKKyAgICBWZWN0b3IgbWV0aG9kcyA9IG5ldyBWZWN0b3IoKTsKKworICAgIHdoaWxlIChjYWNoZS5pbmRleE9mKHNlcCkgIT0gLTEpIHsKKyAgICAgICAgaW50IGluZGV4ID0gY2FjaGUuaW5kZXhPZihzZXApOworICAgICAgICBTdHJpbmcgbmFtZSA9IGNhY2hlLnN1YnN0cmluZygwLGluZGV4KTsKKyAgICAgICAgaWYgKG5hbWUudHJpbSgpICE9ICIiKSB7CisgICAgICAgICAgICBtZXRob2RzLmFkZChuYW1lKTsKKyAgICAgICAgICAgIGNhY2hlID0gY2FjaGUuc3Vic3RyaW5nKGluZGV4K3NlcExlbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAgICAgRW51bWVyYXRpb24gYWxsTWV0aG9kcyA9IG1ldGhvZHMuZWxlbWVudHMoKTsKKyAgICAgICAgd2hpbGUgKGFsbE1ldGhvZHMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKKyAgICAgICAgICAgIFN0cmluZyBvbmVNZXRob2QgPSAoU3RyaW5nKSBhbGxNZXRob2RzLm5leHRFbGVtZW50KCk7CisgICAgICAgICAgICBpZiAoIW9uZU1ldGhvZC50cmltKCkuZXF1YWxzKCIiKSkgeworICAgICAgICAgICAgICAgIFN0cmluZyBtZXRob2ROYW1lID0gbnVsbDsKKyAgICAgICAgICAgICAgICBWZWN0b3IgcGFybXMgPSBuZXcgVmVjdG9yKCk7CisgICAgICAgICAgICAgICAgU3RyaW5nVG9rZW5pemVyIG1ldGhvZERldGFpbHMgPSBuZXcgU3RyaW5nVG9rZW5pemVyKG9uZU1ldGhvZCxkZWxpbSk7CisgICAgICAgIGZvciAoaW50IGk9MDsgbWV0aG9kRGV0YWlscy5oYXNNb3JlVG9rZW5zKCk7aSsrICkgeworICAgICAgICAgICAgU3RyaW5nIHRva2VuID0gKFN0cmluZykgbWV0aG9kRGV0YWlscy5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAgIGlmIChpPT0wKSB7CisgICAgICAgICAgICAgICAgbWV0aG9kTmFtZSA9IHRva2VuLnRvVXBwZXJDYXNlKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHBhcm1zLmFkZCh0b2tlbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcHJvcGVydGllcy5wdXQobWV0aG9kTmFtZSxwYXJtcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHByb3BlcnRpZXM7CisgICAgfQorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIERhdGFzb3VyY2Ugb2JqZWN0IGFjY29yZGluZyB0byB0aGUgc3BlYy4KICAgICAgKgotICAgICAqIEByZXR1cm4JSW5pdGlhbCBEYXRhU291cmNlIE9iamVjdCBpbnN0YW5jZS4KLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiBJZiBjbGFzcyBuYW1lIGlzIHdyb25nIG9yIGNsYXNzcGF0aCBpcyBub3Qgc2V0Ci0gICAgICoJCXByb3Blcmx5LgorICAgICAqIEByZXR1cm4gICAgSW5pdGlhbCBEYXRhU291cmNlIE9iamVjdCBpbnN0YW5jZS4KKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiBJZiBjbGFzcyBuYW1lIGlzIHdyb25nIG9yIGNsYXNzcGF0aCBpcyBub3Qgc2V0CisgICAgICogICAgICAgIHByb3Blcmx5LgogICAgICAqLwogICAgIHByaXZhdGUgT2JqZWN0IGdldERhdGFTb3VyY2VPYmplY3QoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb257Ci0gICAgCVN0cmluZyBjbGFzc05hbWUgPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DTEFTU05BTUUpOwotICAgICAgICB0cnkgeyAgICAgICAgICAgIAorICAgICAgICBTdHJpbmcgY2xhc3NOYW1lID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ0xBU1NOQU1FKTsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENsYXNzIGRhdGFTb3VyY2VDbGFzcyA9IENsYXNzLmZvck5hbWUoY2xhc3NOYW1lKTsKICAgICAgICAgICAgIE9iamVjdCBkYXRhU291cmNlT2JqZWN0ID0gZGF0YVNvdXJjZUNsYXNzLm5ld0luc3RhbmNlKCk7CiAgICAgICAgICAgICByZXR1cm4gZGF0YVNvdXJjZU9iamVjdDsKICAgICAgICAgfSBjYXRjaChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGNmbmUpewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19jbmZlX2RzIiwgY2ZuZSk7Ci0JCisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2NuZmVfZHMiLCBjZm5lKTsKKwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJDbGFzcyBOYW1lIGlzIHdyb25nIG9yIENsYXNzIHBhdGggaXMgbm90IHNldCBmb3IgOiIgKyBjbGFzc05hbWUpOwogICAgICAgICB9IGNhdGNoKEluc3RhbnRpYXRpb25FeGNlcHRpb24gY2UpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfaW5zdCIsIGNsYXNzTmFtZSk7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2luc3QiLCBjbGFzc05hbWUpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJFcnJvciBpbiBpbnN0YW50aWF0aW5nIiArIGNsYXNzTmFtZSk7CiAgICAgICAgIH0gY2F0Y2goSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBjZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19hY2NfaW5zdCIsIGNsYXNzTmFtZSk7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2FjY19pbnN0IiwgY2xhc3NOYW1lKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIEVycm9yIGluIGluc3RhbnRpYXRpbmciICsgY2xhc3NOYW1lKTsKICAgICAgICAgfQogICAgIH0KLSAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZVNwZWMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZVNwZWMuamF2YQppbmRleCBlZjZjNGM5Li4zZGMxNTRkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VTcGVjLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlU3BlYy5qYXZhCkBAIC0xOSw5MiArMTksOTIgQEAKIGltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwogCiAvKioKLSAqIEVuY2Fwc3VsYXRlIHRoZSBEYXRhU291cmNlIG9iamVjdCBkZXRhaWxzIG9idGFpbmVkIGZyb20gCisgKiBFbmNhcHN1bGF0ZSB0aGUgRGF0YVNvdXJjZSBvYmplY3QgZGV0YWlscyBvYnRhaW5lZCBmcm9tCiAgKiBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8yMwotICogQGF1dGhvcglCaW5vZCBQLkcKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMjMKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCiAgKi8KIHB1YmxpYyBjbGFzcyBEYXRhU291cmNlU3BlYyBpbXBsZW1lbnRzIGphdmEuaW8uU2VyaWFsaXphYmxlewogCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVVNFUk5BTUUJCQkJPSAxOyAgICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQQVNTV09SRAkJCQk9IDI7ICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVUkwJCQkJCT0gMzsgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExPR0lOVElNRU9VVAkJCT0gNDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMT0dXUklURVIJCQkJPSA1OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFCQVNFTkFNRQkJCT0gNjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQVRBU09VUkNFTkFNRQkJCT0gNzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERVNDUklQVElPTgkJCQk9IDg7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTkVUV09SS1BST1RPQ09MCQkJPSA5OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBPUlROVU1CRVIJCQkJPSAxMDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBST0xFTkFNRQkJCQk9IDExOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNFUlZFUk5BTUUJCQkJPSAxMjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhTVEFURU1FTlRTCQkJPSAxMzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTklUSUFMUE9PTFNJWkUJCQk9IDE0OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1JTlBPT0xTSVpFCQkJCT0gMTU7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYUE9PTFNJWkUJCQkJPSAxNjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhJRExFVElNRQkJCQk9IDE3OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBST1BFUlRZQ1lDTEUJCQk9IDE4OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERSSVZFUlBST1BFUlRJRVMJCQk9IDE5OyAgICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDTEFTU05BTUUJCQkJPSAyMDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERUxJTUlURVIJCQkJPSAyMTsKLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBYQURBVEFTT1VSQ0UJCQk9IDIyOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFTT1VSQ0UJCQkJPSAyMzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05ORUNUSU9OUE9PTERBVEFTT1VSQ0UJCT0gMjQ7Ci0gICAgICAKLSAgICAvL0dKQ0lOVCAgICAgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQJPSAyNTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWQUxJREFUSU9OTUVUSE9ECQkJPSAyNjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWQUxJREFUSU9OVEFCTEVOQU1FCQkJPSAyNzsKLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUUkFOU0FDVElPTklTT0xBVElPTgkJPSAyODsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHVUFSQU5URUVJU09MQVRJT05MRVZFTAkJPSAyOTsKLSAgICAgICAgICAgIAorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVTRVJOQU1FICAgICAgICAgICAgICAgID0gMTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQQVNTV09SRCAgICAgICAgICAgICAgICA9IDI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVVJMICAgICAgICAgICAgICAgICAgICA9IDM7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTE9HSU5USU1FT1VUICAgICAgICAgICAgPSA0OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExPR1dSSVRFUiAgICAgICAgICAgICAgICA9IDU7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREFUQUJBU0VOQU1FICAgICAgICAgICAgPSA2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFTT1VSQ0VOQU1FICAgICAgICAgICAgPSA3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFU0NSSVBUSU9OICAgICAgICAgICAgICAgID0gODsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBORVRXT1JLUFJPVE9DT0wgICAgICAgICAgICA9IDk7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUE9SVE5VTUJFUiAgICAgICAgICAgICAgICA9IDEwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJPTEVOQU1FICAgICAgICAgICAgICAgID0gMTE7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0VSVkVSTkFNRSAgICAgICAgICAgICAgICA9IDEyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWFNUQVRFTUVOVFMgICAgICAgICAgICA9IDEzOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOSVRJQUxQT09MU0laRSAgICAgICAgICAgID0gMTQ7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUlOUE9PTFNJWkUgICAgICAgICAgICAgICAgPSAxNTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhQT09MU0laRSAgICAgICAgICAgICAgICA9IDE2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWElETEVUSU1FICAgICAgICAgICAgICAgID0gMTc7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUFJPUEVSVFlDWUNMRSAgICAgICAgICAgID0gMTg7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRFJJVkVSUFJPUEVSVElFUyAgICAgICAgICAgID0gMTk7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0xBU1NOQU1FICAgICAgICAgICAgICAgID0gMjA7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVMSU1JVEVSICAgICAgICAgICAgICAgID0gMjE7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBYQURBVEFTT1VSQ0UgICAgICAgICAgICA9IDIyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFTT1VSQ0UgICAgICAgICAgICAgICAgPSAyMzsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05ORUNUSU9OUE9PTERBVEFTT1VSQ0UgICAgICAgID0gMjQ7CisKKyAgICAvL0dKQ0lOVAorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQgICAgPSAyNTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWQUxJREFUSU9OTUVUSE9EICAgICAgICAgICAgPSAyNjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWQUxJREFUSU9OVEFCTEVOQU1FICAgICAgICAgICAgPSAyNzsKKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRSQU5TQUNUSU9OSVNPTEFUSU9OICAgICAgICA9IDI4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdVQVJBTlRFRUlTT0xBVElPTkxFVkVMICAgICAgICA9IDI5OworCiAgICAgcHJpdmF0ZSBIYXNodGFibGUgZGV0YWlscyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgcHJvcGVydHkuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcHJvcGVydHkJUHJvcGVydHkgTmFtZSB0byBiZSBzZXQuCi0gICAgICogQHBhcmFtCXZhbHVlCQlWYWx1ZSBvZiBwcm9wZXJ0eSB0byBiZSBzZXQuCisgICAgICogQHBhcmFtICAgIHByb3BlcnR5ICAgIFByb3BlcnR5IE5hbWUgdG8gYmUgc2V0LgorICAgICAqIEBwYXJhbSAgICB2YWx1ZSAgICAgICAgVmFsdWUgb2YgcHJvcGVydHkgdG8gYmUgc2V0LgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERldGFpbChpbnQgcHJvcGVydHksIFN0cmluZyB2YWx1ZSkgewotICAgIAlkZXRhaWxzLnB1dChuZXcgSW50ZWdlcihwcm9wZXJ0eSksdmFsdWUpOworICAgICAgICBkZXRhaWxzLnB1dChuZXcgSW50ZWdlcihwcm9wZXJ0eSksdmFsdWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgdmFsdWUgb2YgcHJvcGVydHkKICAgICAgKgotICAgICAqIEByZXR1cm4JVmFsdWUgb2YgdGhlIHByb3BlcnR5LgorICAgICAqIEByZXR1cm4gICAgVmFsdWUgb2YgdGhlIHByb3BlcnR5LgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGV0YWlsKGludCBwcm9wZXJ0eSkgewotICAgIAlpZiAoZGV0YWlscy5jb250YWluc0tleShuZXcgSW50ZWdlcihwcm9wZXJ0eSkpKSB7Ci0gICAgCSAgICByZXR1cm4gKFN0cmluZykgZGV0YWlscy5nZXQobmV3IEludGVnZXIocHJvcGVydHkpKTsKLSAgICAJfSBlbHNlIHsKLSAgICAJICAgIHJldHVybiBudWxsOwotICAgIAl9ICAgIAkKKyAgICAgICAgaWYgKGRldGFpbHMuY29udGFpbnNLZXkobmV3IEludGVnZXIocHJvcGVydHkpKSkgeworICAgICAgICAgICAgcmV0dXJuIChTdHJpbmcpIGRldGFpbHMuZ2V0KG5ldyBJbnRlZ2VyKHByb3BlcnR5KSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENoZWNrcyB3aGV0aGVyIHR3byA8Y29kZT5EYXRhU291cmNlU3BlYzwvY29kZT4gb2JqZWN0cwogICAgICAqIGFyZSBlcXVhbCBvciBub3QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jb2JqCUluc3RhbmNlIG9mIDxjb2RlPkRhdGFTb3VyY2VTcGVjPC9jb2RlPiBvYmplY3QuCisgICAgICogQHBhcmFtICAgIG9iaiAgICBJbnN0YW5jZSBvZiA8Y29kZT5EYXRhU291cmNlU3BlYzwvY29kZT4gb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb2JqKSB7Ci0gICAgCWlmIChvYmogaW5zdGFuY2VvZiBEYXRhU291cmNlU3BlYykgewotICAgIAkgICAgcmV0dXJuIHRoaXMuZGV0YWlscy5lcXVhbHMoKChEYXRhU291cmNlU3BlYylvYmopLmRldGFpbHMpOwotICAgIAl9Ci0gICAgCXJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIERhdGFTb3VyY2VTcGVjKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5kZXRhaWxzLmVxdWFscygoKERhdGFTb3VyY2VTcGVjKW9iaikuZGV0YWlscyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgaGFzaENvZGUgb2YgdGhpcyA8Y29kZT5EYXRhU291cmNlU3BlYzwvY29kZT4gb2JqZWN0LgogICAgICAqCi0gICAgICogQHJldHVybgloYXNoQ29kZSBvZiB0aGlzIG9iamVjdC4KKyAgICAgKiBAcmV0dXJuICAgIGhhc2hDb2RlIG9mIHRoaXMgb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7Ci0gICAgCXJldHVybiB0aGlzLmRldGFpbHMuaGFzaENvZGUoKTsKLSAgICB9ICAgIAorICAgICAgICByZXR1cm4gdGhpcy5kZXRhaWxzLmhhc2hDb2RlKCk7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL2J1aWxkLnhtbAppbmRleCBlZjQzOGZjLi4zYjRmYWViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL2J1aWxkLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8cHJvamVjdCBuYW1lPSJqZGJjX2Nvbm5lY3RvciIgYmFzZWRpcj0iLiIgZGVmYXVsdD0iYnVpbGQiPgogICA8cHJvcGVydHkgbmFtZT0icGtnLmRpciIgdmFsdWU9ImNvbS9zdW4vZ2pjL2NvbW1vbiIvPgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImNsZWFuIj4KICAgICA8YW50IGFudGZpbGU9ImJ1aWxkLnhtbCIgZGlyPSIke2dqYy5ob21lfS9iaW4iIHRhcmdldD0iY2xlYW4iLz4KICAgPC90YXJnZXQ+CkBAIC0zNiwxMyArMzYsMTMgQEAKIAogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUxMyIgZGVwZW5kcz0iY29tcGlsZSIvPgogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUxNCIgZGVwZW5kcz0iY29tcGlsZSIvPgotICAKKwogICA8dGFyZ2V0IG5hbWU9InBhY2thZ2UxMyIgZGVwZW5kcz0icGFja2FnZSIvPgogICA8dGFyZ2V0IG5hbWU9InBhY2thZ2UxNCIgZGVwZW5kcz0icGFja2FnZSIvPgogCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQxMyIgZGVwZW5kcz0iY29tcGlsZTEzLCBwYWNrYWdlMTMiLz4KICAgPHRhcmdldCBuYW1lPSJidWlsZDE0IiBkZXBlbmRzPSJjb21waWxlMTQsIHBhY2thZ2UxNCIvPgotICAgIAorCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImJ1aWxkMTMsIGJ1aWxkMTQiLz4KIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvQ29ubmVjdGlvbkhvbGRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvQ29ubmVjdGlvbkhvbGRlci5qYXZhCmluZGV4IGE5NTZkOTcuLjExYWQ3NDYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L0Nvbm5lY3Rpb25Ib2xkZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9Db25uZWN0aW9uSG9sZGVyLmphdmEKQEAgLTI0LDI0ICsyNCwyNCBAQAogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9yOwogCiAvKioKLSAqIEhvbGRzIHRoZSBqYXZhLnNxbC5Db25uZWN0aW9uIG9iamVjdCwgd2hpY2ggaXMgdG8gYmUgCisgKiBIb2xkcyB0aGUgamF2YS5zcWwuQ29ubmVjdGlvbiBvYmplY3QsIHdoaWNoIGlzIHRvIGJlCiAgKiBwYXNzZWQgdG8gdGhlIGFwcGxpY2F0aW9uIHByb2dyYW0uCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8yMwotICogQGF1dGhvcglCaW5vZCBQLkcKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMjMKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCiAgKi8KLXB1YmxpYyBjbGFzcyBDb25uZWN0aW9uSG9sZGVyIGltcGxlbWVudHMgQ29ubmVjdGlvbnsgCitwdWJsaWMgY2xhc3MgQ29ubmVjdGlvbkhvbGRlciBpbXBsZW1lbnRzIENvbm5lY3Rpb257CiAKICAgICBwcml2YXRlIENvbm5lY3Rpb24gY29uOwotICAgIAorCiAgICAgcHJpdmF0ZSBNYW5hZ2VkQ29ubmVjdGlvbiBtYzsKLSAgICAKLSAgICBwcml2YXRlIGJvb2xlYW4gd3JhcHBlZEFscmVhZHkgPSBmYWxzZTsgICAgCi0gICAgCisKKyAgICBwcml2YXRlIGJvb2xlYW4gd3JhcHBlZEFscmVhZHkgPSBmYWxzZTsKKwogICAgIHByaXZhdGUgYm9vbGVhbiBpc0Nsb3NlZCA9IGZhbHNlOwotICAgIAorCiAgICAgcHJpdmF0ZSBib29sZWFuIHZhbGlkID0gdHJ1ZTsKLSAgICAKKwogICAgIHByaXZhdGUgYm9vbGVhbiBhY3RpdmUgPSBmYWxzZTsKICAgICAvKioKICAgICAgKiBUaGUgYWN0aXZlIGZsYWcgaXMgZmFsc2Ugd2hlbiB0aGUgY29ubmVjdGlvbiBoYW5kbGUgaXMKQEAgLTUzLDIxOSArNTMsMjE5IEBACiAgICAgICogZnVuY3Rpb24sIHRoZSBhYm92ZSBtZXRob2QgaW52b2NhdGlvbiBzdWNjZWVkczsgb3RoZXJ3aXNlCiAgICAgICogYW4gZXhjZXB0aW9uIGlzIHRocm93bi4KICAgICAgKi8KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdHMgYSBDb25uZWN0aW9uIGhvbGRlci4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JY29uCTxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBjb24gICAgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyBDb25uZWN0aW9uSG9sZGVyKENvbm5lY3Rpb24gY29uLCBNYW5hZ2VkQ29ubmVjdGlvbiBtYykgewogICAgICAgICB0aGlzLmNvbiA9IGNvbjsKICAgICAgICAgdGhpcy5tYyAgPSBtYzsKICAgICB9Ci0gICAgICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgYWN0dWFsIGNvbm5lY3Rpb24gaW4gdGhpcyBob2xkZXIgb2JqZWN0LgotICAgICAqIAotICAgICAqIEByZXR1cm4JQ29ubmVjdGlvbiBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcmV0dXJuICAgIENvbm5lY3Rpb24gb2JqZWN0LgogICAgICAqLwogICAgIENvbm5lY3Rpb24gZ2V0Q29ubmVjdGlvbigpIHsKLSAgICAJcmV0dXJuIGNvbjsKKyAgICAgICAgcmV0dXJuIGNvbjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBmbGFnIHRvIGluZGljYXRlIHRoYXQsIHRoZSBjb25uZWN0aW9uIGlzIHdyYXBwZWQgYWxyZWFkeSBvciBub3QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jd3JhcEZsYWcJCisgICAgICogQHBhcmFtICAgIHdyYXBGbGFnCiAgICAgICovCiAgICAgdm9pZCB3cmFwcGVkKGJvb2xlYW4gd3JhcEZsYWcpewogICAgICAgICB0aGlzLndyYXBwZWRBbHJlYWR5ID0gd3JhcEZsYWc7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB3aGV0aGVyIGl0IGlzIHdyYXBwZWQgYWxyZWFkeSBvciBub3QuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXdyYXBwZWQgZmxhZy4KKyAgICAgKiBAcmV0dXJuICAgIHdyYXBwZWQgZmxhZy4KICAgICAgKi8KICAgICBib29sZWFuIGlzV3JhcHBlZCgpewogICAgICAgICByZXR1cm4gd3JhcHBlZEFscmVhZHk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlIHJlc3BvbnNpYmxlCiAgICAgICogZm9yIHRoaXMgY29ubmVjdGlvbi4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqLwogICAgIE1hbmFnZWRDb25uZWN0aW9uIGdldE1hbmFnZWRDb25uZWN0aW9uKCkgewogICAgICAgICByZXR1cm4gbWM7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmVwbGFjZSB0aGUgYWN0dWFsIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCB3aXRoIHRoZSBvbmUKLSAgICAgKiBzdXBwbGllZC4gQWxzbyByZXBsYWNlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBsaW5rLiAgICAgCisgICAgICogc3VwcGxpZWQuIEFsc28gcmVwbGFjZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gbGluay4KICAgICAgKgotICAgICAqIEBwYXJhbQljb24gPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgotICAgICAqIEBwYXJhbQltYyAgPGNvZGU+IE1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCisgICAgICogQHBhcmFtICAgIGNvbiA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCisgICAgICogQHBhcmFtICAgIG1jICA8Y29kZT4gTWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KICAgICAgKi8KICAgICB2b2lkIGFzc29jaWF0ZUNvbm5lY3Rpb24oQ29ubmVjdGlvbiBjb24sIE1hbmFnZWRDb25uZWN0aW9uIG1jKSB7Ci0gICAgCXRoaXMubWMgPSBtYzsKLSAgICAJdGhpcy5jb24gPSBjb247CisgICAgICAgIHRoaXMubWMgPSBtYzsKKyAgICAgICAgdGhpcy5jb24gPSBjb247CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2xlYXJzIGFsbCB3YXJuaW5ncyByZXBvcnRlZCBmb3IgdGhlIHVuZGVybHlpbmcgY29ubmVjdGlvbiAgb2JqZWN0LgogICAgICAqCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBjbGVhcldhcm5pbmdzKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsgICAgCi0JY2hlY2tWYWxpZGl0eSgpOworICAgIHB1YmxpYyB2b2lkIGNsZWFyV2FybmluZ3MoKSB0aHJvd3MgU1FMRXhjZXB0aW9ueworICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgY29uLmNsZWFyV2FybmluZ3MoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBDbG9zZXMgdGhlIGxvZ2ljYWwgY29ubmVjdGlvbi4gICAgCisgICAgICogQ2xvc2VzIHRoZSBsb2dpY2FsIGNvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjbG9zZSgpIHRocm93cyBTUUxFeGNlcHRpb257CiAgICAgICAgIGlzQ2xvc2VkID0gdHJ1ZTsKLSAgICAgICAgbWMuY29ubmVjdGlvbkNsb3NlZChudWxsLCB0aGlzKTsgICAgICAgIAorICAgICAgICBtYy5jb25uZWN0aW9uQ2xvc2VkKG51bGwsIHRoaXMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEludmFsaWRhdGVzIHRoaXMgb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGludmFsaWRhdGUoKSB7Ci0gICAgCXZhbGlkID0gZmFsc2U7CisgICAgICAgIHZhbGlkID0gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2xvc2VzIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGludm9sdmVkIGluIHRoaXMuCiAgICAgICoKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwotICAgIHZvaWQgYWN0dWFsQ2xvc2UoKSB0aHJvd3MgU1FMRXhjZXB0aW9ueyAgICAKKyAgICB2b2lkIGFjdHVhbENsb3NlKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKICAgICAgICAgY29uLmNsb3NlKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29tbWl0IHRoZSBjaGFuZ2VzIGluIHRoZSB1bmRlcmx5aW5nIENvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNvbW1pdCgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5jb21taXQoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5jb21taXQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgc3RhdGVtZW50IGZyb20gdGhlIHVuZGVybHlpbmcgQ29ubmVjdGlvbgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5TdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHJldHVybiAgICA8Y29kZT5TdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFN0YXRlbWVudCBjcmVhdGVTdGF0ZW1lbnQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgcmV0dXJuIGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgc3RhdGVtZW50IGZyb20gdGhlIHVuZGVybHlpbmcgQ29ubmVjdGlvbi4KICAgICAgKgotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRUeXBlCVR5cGUgb2YgdGhlIFJlc3VsdFNldAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRDb25jdXJyZW5jeQlSZXN1bHRTZXQgQ29uY3VycmVuY3kuCi0gICAgICogQHJldHVybgk8Y29kZT5TdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4gICAgIAotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0VHlwZSAgICBUeXBlIG9mIHRoZSBSZXN1bHRTZXQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0Q29uY3VycmVuY3kgICAgUmVzdWx0U2V0IENvbmN1cnJlbmN5LgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+U3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTdGF0ZW1lbnQgY3JlYXRlU3RhdGVtZW50KGludCByZXN1bHRTZXRUeXBlLCBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3kpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICByZXR1cm4gY29uLmNyZWF0ZVN0YXRlbWVudChyZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIHN0YXRlbWVudCBmcm9tIHRoZSB1bmRlcmx5aW5nIENvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0VHlwZQlUeXBlIG9mIHRoZSBSZXN1bHRTZXQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0Q29uY3VycmVuY3kJUmVzdWx0U2V0IENvbmN1cnJlbmN5LgotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRIb2xkYWJpbGl0eQlSZXN1bHRTZXQgSG9sZGFiaWxpdHkuICAgICAKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlN0YXRlbWVudDwvY29kZT4gb2JqZWN0LiAKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgICAgIAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRUeXBlICAgIFR5cGUgb2YgdGhlIFJlc3VsdFNldAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRDb25jdXJyZW5jeSAgICBSZXN1bHRTZXQgQ29uY3VycmVuY3kuCisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldEhvbGRhYmlsaXR5ICAgIFJlc3VsdFNldCBIb2xkYWJpbGl0eS4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KLSAgICBwdWJsaWMgU3RhdGVtZW50IGNyZWF0ZVN0YXRlbWVudChpbnQgcmVzdWx0U2V0VHlwZSwgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5LCAKLSAgICAJCQkJICAgICBpbnQgcmVzdWx0U2V0SG9sZGFiaWx0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAJCQkJICAgICAKKyAgICBwdWJsaWMgU3RhdGVtZW50IGNyZWF0ZVN0YXRlbWVudChpbnQgcmVzdWx0U2V0VHlwZSwgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRIb2xkYWJpbHR5KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIHJldHVybiBjb24uY3JlYXRlU3RhdGVtZW50KHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5LAotICAgICAgICAJCQkgICByZXN1bHRTZXRIb2xkYWJpbHR5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0U2V0SG9sZGFiaWx0eSk7CiAgICAgfQotIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBjdXJyZW50IGF1dG8tY29tbWl0IG1vZGUgZm9yIHRoZSB1bmRlcmx5aW5nIDxjb2RlPiBDb25uZWN0aW9uPC9jb2RlPi4KICAgICAgKgogICAgICAqIEByZXR1cm4gVGhlIGN1cnJlbnQgc3RhdGUgb2YgY29ubmVjdGlvbidzIGF1dG8tY29tbWl0IG1vZGUuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBnZXRBdXRvQ29tbWl0KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5nZXRBdXRvQ29tbWl0KCk7Ci0gICAgfSAgIAotIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5nZXRBdXRvQ29tbWl0KCk7CisgICAgfQorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSB1bmRlcmx5aW5nIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCdzIGNhdGFsb2cgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JQ2F0YWxvZyBOYW1lLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcmV0dXJuICAgIENhdGFsb2cgTmFtZS4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRDYXRhbG9nKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIHJldHVybiBjb24uZ2V0Q2F0YWxvZygpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgY3VycmVudCBob2xkYWJpbGl0eSBvZiA8Y29kZT5SZXN1bHRTZXQ8L2NvZGU+IG9iamVjdHMgY3JlYXRlZAogICAgICAqIHVzaW5nIHRoaXMgY29ubmVjdGlvbiBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWhvbGRhYmlsaXR5IHZhbHVlLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcmV0dXJuICAgIGhvbGRhYmlsaXR5IHZhbHVlLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldEhvbGRhYmlsaXR5KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuCWNvbi5nZXRIb2xkYWJpbGl0eSgpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuICAgIGNvbi5nZXRIb2xkYWJpbGl0eSgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgPGNvZGU+RGF0YWJhc2VNZXRhRGF0YTwvY29kZT5vYmplY3QgZnJvbSB0aGUgdW5kZXJseWluZwogICAgICAqIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgogICAgICAqCiAgICAgICogQHJldHVybiA8Y29kZT5EYXRhYmFzZU1ldGFEYXRhPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgRGF0YWJhc2VNZXRhRGF0YSBnZXRNZXRhRGF0YSgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uZ2V0TWV0YURhdGEoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uZ2V0TWV0YURhdGEoKTsKICAgICB9Ci0gCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhpcyA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QncyBjdXJyZW50IHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbC4KICAgICAgKgogICAgICAqIEByZXR1cm4gVHJhbnNhY3Rpb24gbGV2ZWwKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgcmV0dXJuIGNvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFJldHJpZXZlcyB0aGUgPGNvZGU+TWFwPC9jb2RlPiBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIAorICAgICAqIFJldHJpZXZlcyB0aGUgPGNvZGU+TWFwPC9jb2RlPiBvYmplY3QgYXNzb2NpYXRlZCB3aXRoCiAgICAgICogPGNvZGU+IENvbm5lY3Rpb248L2NvZGU+IE9iamVjdC4KICAgICAgKgotICAgICAqIEByZXR1cm4JVHlwZU1hcCBzZXQgaW4gdGhpcyBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEByZXR1cm4gICAgVHlwZU1hcCBzZXQgaW4gdGhpcyBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBNYXAgZ2V0VHlwZU1hcCgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uZ2V0VHlwZU1hcCgpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5nZXRUeXBlTWFwKCk7CiAgICAgfQogCiAvKgpAQCAtMjc5LDE4NCArMjc5LDE4NCBAQAogICAgICAqIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KICAgICAgKgogICAgICAqIEByZXR1cm4gRmlyc3QgPGNvZGU+IFNRTFdhcm5pbmc8L2NvZGU+IE9iamVjdCBvciBudWxsLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFNRTFdhcm5pbmcgZ2V0V2FybmluZ3MoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLmdldFdhcm5pbmdzKCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLmdldFdhcm5pbmdzKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHdoZXRoZXIgdW5kZXJseWluZyA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaXMgY2xvc2VkLgogICAgICAqCi0gICAgICogQHJldHVybgl0cnVlIGlmIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpcyBjbG9zZWQsIGZhbHNlCi0gICAgICogCQlpZiBpdCBpcyBjbG9zZWQuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEByZXR1cm4gICAgdHJ1ZSBpZiA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaXMgY2xvc2VkLCBmYWxzZQorICAgICAqICAgICAgICAgaWYgaXQgaXMgY2xvc2VkLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc0Nsb3NlZCgpIHRocm93cyBTUUxFeGNlcHRpb24gewotICAgIAlyZXR1cm4gaXNDbG9zZWQ7CisgICAgICAgIHJldHVybiBpc0Nsb3NlZDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgd2hldGhlciB0aGlzIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpcyByZWFkLW9ubHkuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRydWUgaWYgPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBpcyByZWFkLW9ubHksIGZhbHNlIG90aGVyLXdpc2UKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHJldHVybiAgICB0cnVlIGlmIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gaXMgcmVhZC1vbmx5LCBmYWxzZSBvdGhlci13aXNlCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGlzUmVhZE9ubHkoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLmlzUmVhZE9ubHkoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uaXNSZWFkT25seSgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnZlcnRzIHRoZSBnaXZlbiBTUUwgc3RhdGVtZW50IGludG8gdGhlIHN5c3RlbSdzIG5hdGl2ZSBTUUwgZ3JhbW1lci4KICAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIHN0YXRlbWVudCAsIHRvIGJlIGNvbnZlcnRlZC4KLSAgICAgKiBAcmV0dXJuCUNvbnZlcnRlZCBTUUwgc3RyaW5nLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBzdGF0ZW1lbnQgLCB0byBiZSBjb252ZXJ0ZWQuCisgICAgICogQHJldHVybiAgICBDb252ZXJ0ZWQgU1FMIHN0cmluZy4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBuYXRpdmVTUUwoU3RyaW5nIHNxbCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5uYXRpdmVTUUwoc3FsKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ubmF0aXZlU1FMKHNxbCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3IgY2FsbGluZyBkYXRhYmFzZQogICAgICAqIHN0b3JlZCBwcm9jZWR1cmVzLgogICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CiAgICAgICogQHJldHVybiA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBDYWxsYWJsZVN0YXRlbWVudCBwcmVwYXJlQ2FsbChTdHJpbmcgc3FsKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnByZXBhcmVDYWxsKHNxbCk7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIGNhbGxpbmcgZGF0YWJhc2UKLSAgICAgKiBzdG9yZWQgcHJvY2VkdXJlcy4KLSAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRUeXBlCVR5cGUgb2YgdGhlIFJlc3VsdFNldAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRDb25jdXJyZW5jeQlSZXN1bHRTZXQgQ29uY3VycmVuY3kuCi0gICAgICogQHJldHVybiA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovCi0gICAgcHVibGljIENhbGxhYmxlU3RhdGVtZW50IHByZXBhcmVDYWxsKFN0cmluZyBzcWwsaW50IHJlc3VsdFNldFR5cGUsIAotICAgIAkJCQkJaW50IHJlc3VsdFNldENvbmN1cnJlbmN5KSB0aHJvd3MgU1FMRXhjZXB0aW9uewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCQkJCQkKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlQ2FsbChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5KTsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3IgY2FsbGluZyBkYXRhYmFzZQotICAgICAqIHN0b3JlZCBwcm9jZWR1cmVzLgotICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldFR5cGUJVHlwZSBvZiB0aGUgUmVzdWx0U2V0Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldENvbmN1cnJlbmN5CVJlc3VsdFNldCBDb25jdXJyZW5jeS4KLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0SG9sZGFiaWxpdHkJUmVzdWx0U2V0IEhvbGRhYmlsaXR5LiAgICAgICAgICAKLSAgICAgKiBAcmV0dXJuIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8KLSAgICBwdWJsaWMgQ2FsbGFibGVTdGF0ZW1lbnQgcHJlcGFyZUNhbGwoU3RyaW5nIHNxbCwgaW50IHJlc3VsdFNldFR5cGUsIAotICAgIAkJCQkJIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwgCi0gICAgCQkJCQkgaW50IHJlc3VsdFNldEhvbGRhYmlsdHkpIHRocm93cyBTUUxFeGNlcHRpb257Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAJCQkJCSAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlQ2FsbChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5LAotICAgIAkJCSAgICAgICByZXN1bHRTZXRIb2xkYWJpbHR5KTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZUNhbGwoc3FsKTsKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nIAorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIGNhbGxpbmcgZGF0YWJhc2UKKyAgICAgKiBzdG9yZWQgcHJvY2VkdXJlcy4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRUeXBlICAgIFR5cGUgb2YgdGhlIFJlc3VsdFNldAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRDb25jdXJyZW5jeSAgICBSZXN1bHRTZXQgQ29uY3VycmVuY3kuCisgICAgICogQHJldHVybiA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCisgICAgcHVibGljIENhbGxhYmxlU3RhdGVtZW50IHByZXBhcmVDYWxsKFN0cmluZyBzcWwsaW50IHJlc3VsdFNldFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3kpIHRocm93cyBTUUxFeGNlcHRpb257CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVDYWxsKHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3kpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIGNhbGxpbmcgZGF0YWJhc2UKKyAgICAgKiBzdG9yZWQgcHJvY2VkdXJlcy4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRUeXBlICAgIFR5cGUgb2YgdGhlIFJlc3VsdFNldAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRDb25jdXJyZW5jeSAgICBSZXN1bHRTZXQgQ29uY3VycmVuY3kuCisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldEhvbGRhYmlsaXR5ICAgIFJlc3VsdFNldCBIb2xkYWJpbGl0eS4KKyAgICAgKiBAcmV0dXJuIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgQ2FsbGFibGVTdGF0ZW1lbnQgcHJlcGFyZUNhbGwoU3RyaW5nIHNxbCwgaW50IHJlc3VsdFNldFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRIb2xkYWJpbHR5KSB0aHJvd3MgU1FMRXhjZXB0aW9ueworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlQ2FsbChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRTZXRIb2xkYWJpbHR5KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nCiAgICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKICAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsKTsKICAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZyAKLSAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKLSAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQlhdXRvR2VuZXJhdGVkS2V5cyBhIGZsYWcgaW5kaWNhdGluZyBBdXRvR2VuZXJhdGVkS2V5cyBuZWVkIHRvIGJlIHJldHVybmVkLgotICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLwotICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludCBhdXRvR2VuZXJhdGVkS2V5cykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCxhdXRvR2VuZXJhdGVkS2V5cyk7Ci0gICAgfSAgICAKLSAgICAgIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcgCi0gICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCi0gICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JY29sdW1uSW5kZXhlcyBhbiBhcnJheSBvZiBjb2x1bW4gaW5kZXhlcyBpbmRpY2F0aW5nIHRoZSBjb2x1bW5zIHRoYXQgc2hvdWxkIGJlCi0gICAgICoJCXJldHVybmVkIGZyb20gdGhlIGluc2VydGVkIHJvdyBvciByb3dzLgotICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLwotICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludFtdIGNvbHVtbkluZGV4ZXMpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsY29sdW1uSW5kZXhlcyk7Ci0gICAgfSAgICAgICAgICAKLSAKLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nIAotICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQotICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldFR5cGUJVHlwZSBvZiB0aGUgUmVzdWx0U2V0Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldENvbmN1cnJlbmN5CVJlc3VsdFNldCBDb25jdXJyZW5jeS4KLSAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8KLSAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLGludCByZXN1bHRTZXRUeXBlLCAKLSAgICAJCQkJCWludCByZXN1bHRTZXRDb25jdXJyZW5jeSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAkJCQkJCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5KTsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZyAKLSAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKLSAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRUeXBlCVR5cGUgb2YgdGhlIFJlc3VsdFNldAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRDb25jdXJyZW5jeQlSZXN1bHRTZXQgQ29uY3VycmVuY3kuCi0gICAgICogQHBhcmFtCXJlc3VsdFNldEhvbGRhYmlsaXR5CVJlc3VsdFNldCBIb2xkYWJpbGl0eS4gICAgICAgICAgCi0gICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovCi0gICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCwgaW50IHJlc3VsdFNldFR5cGUsIAotICAgIAkJCQkJIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwgCi0gICAgCQkJCQkgaW50IHJlc3VsdFNldEhvbGRhYmlsdHkpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCQkJCQkgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5LAotICAgIAkJCQkgICAgcmVzdWx0U2V0SG9sZGFiaWx0eSk7Ci0gICAgfSAgICAgICAgICAgCiAKICAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nIAorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcKICAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKICAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQljb2x1bW5OYW1lcyBOYW1lIG9mIGJvdW5kIGNvbHVtbnMuCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIGF1dG9HZW5lcmF0ZWRLZXlzIGEgZmxhZyBpbmRpY2F0aW5nIEF1dG9HZW5lcmF0ZWRLZXlzIG5lZWQgdG8gYmUgcmV0dXJuZWQuCiAgICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludCBhdXRvR2VuZXJhdGVkS2V5cykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLGF1dG9HZW5lcmF0ZWRLZXlzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nCisgICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgY29sdW1uSW5kZXhlcyBhbiBhcnJheSBvZiBjb2x1bW4gaW5kZXhlcyBpbmRpY2F0aW5nIHRoZSBjb2x1bW5zIHRoYXQgc2hvdWxkIGJlCisgICAgICogICAgICAgIHJldHVybmVkIGZyb20gdGhlIGluc2VydGVkIHJvdyBvciByb3dzLgorICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludFtdIGNvbHVtbkluZGV4ZXMpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCxjb2x1bW5JbmRleGVzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nCisgICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0VHlwZSAgICBUeXBlIG9mIHRoZSBSZXN1bHRTZXQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0Q29uY3VycmVuY3kgICAgUmVzdWx0U2V0IENvbmN1cnJlbmN5LgorICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsaW50IHJlc3VsdFNldFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3kpIHRocm93cyBTUUxFeGNlcHRpb257CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZworICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldFR5cGUgICAgVHlwZSBvZiB0aGUgUmVzdWx0U2V0CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldENvbmN1cnJlbmN5ICAgIFJlc3VsdFNldCBDb25jdXJyZW5jeS4KKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0SG9sZGFiaWxpdHkgICAgUmVzdWx0U2V0IEhvbGRhYmlsaXR5LgorICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludCByZXN1bHRTZXRUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0SG9sZGFiaWx0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFNldEhvbGRhYmlsdHkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcKKyAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICBjb2x1bW5OYW1lcyBOYW1lIG9mIGJvdW5kIGNvbHVtbnMuCisgICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCwgU3RyaW5nW10gY29sdW1uTmFtZXMpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsY29sdW1uTmFtZXMpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCxjb2x1bW5OYW1lcyk7CiAgICAgfQogCiAgICAgcHVibGljIENsb2IgY3JlYXRlQ2xvYigpIHRocm93cyBTUUxFeGNlcHRpb24gewpAQCAtNTA2LDE2MiArNTA2LDE2MiBAQAogICAgIC8qKgogICAgICAqIFJlbW92ZXMgdGhlIGdpdmVuIDxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0IGZyb20gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc2F2ZXBvaW50CTxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0Ci0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBzYXZlcG9pbnQgICAgPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcmVsZWFzZVNhdmVwb2ludChTYXZlcG9pbnQgc2F2ZXBvaW50KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24ucmVsZWFzZVNhdmVwb2ludChzYXZlcG9pbnQpOwotICAgIH0gCi0gICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24ucmVsZWFzZVNhdmVwb2ludChzYXZlcG9pbnQpOworICAgIH0KKwogICAgIC8qKgogICAgICAqIFJvbGxzIGJhY2sgdGhlIGNoYW5nZXMgbWFkZSBpbiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbi4KICAgICAgKgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8gICAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KICAgICBwdWJsaWMgdm9pZCByb2xsYmFjaygpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5yb2xsYmFjaygpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnJvbGxiYWNrKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUm9sbHMgYmFjayB0aGUgY2hhbmdlcyBtYWRlIGFmdGVyIHRoZSBzYXZlcG9pbnQuCiAgICAgICoKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovICAgICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCiAgICAgcHVibGljIHZvaWQgcm9sbGJhY2soU2F2ZXBvaW50IHNhdmVwb2ludCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnJvbGxiYWNrKHNhdmVwb2ludCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24ucm9sbGJhY2soc2F2ZXBvaW50KTsKICAgICB9Ci0gICAgICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgYXV0by1jb21tbWl0IG1vZGUgb2YgdGhlIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KICAgICAgKgotICAgICAqIEBwYXJhbQlhdXRvQ29tbWl0IGJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyB0aGUgYXV0by1jb21taXQgbW9kZS4gICAgIAotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgYXV0b0NvbW1pdCBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgdGhlIGF1dG8tY29tbWl0IG1vZGUuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldEF1dG9Db21taXQoYm9vbGVhbiBhdXRvQ29tbWl0KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24uc2V0QXV0b0NvbW1pdChhdXRvQ29tbWl0KTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5zZXRBdXRvQ29tbWl0KGF1dG9Db21taXQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGNhdGFsb2cgbmFtZSB0byB0aGUgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0CiAgICAgICoKLSAgICAgKiBAcGFyYW0JY2F0YWxvZwlDYXRhbG9nIG5hbWUuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBjYXRhbG9nICAgIENhdGFsb2cgbmFtZS4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Q2F0YWxvZyhTdHJpbmcgY2F0YWxvZykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnNldENhdGFsb2coY2F0YWxvZyk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24uc2V0Q2F0YWxvZyhjYXRhbG9nKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBTZXRzIHRoZSBob2xkYWJpbGl0eSBvZiA8Y29kZT5SZXN1bHRTZXQ8L2NvZGU+IG9iamVjdHMgY3JlYXRlZCAKKyAgICAgKiBTZXRzIHRoZSBob2xkYWJpbGl0eSBvZiA8Y29kZT5SZXN1bHRTZXQ8L2NvZGU+IG9iamVjdHMgY3JlYXRlZAogICAgICAqIHVzaW5nIHRoaXMgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgogICAgICAqCi0gICAgICogQHBhcmFtCWhvbGRhYmlsaXR5CUEgPGNvZGU+UmVzdWx0U2V0PC9jb2RlPiBob2xkYWJpbGl0eSBjb25zdGFudAotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgaG9sZGFiaWxpdHkgICAgQSA8Y29kZT5SZXN1bHRTZXQ8L2NvZGU+IGhvbGRhYmlsaXR5IGNvbnN0YW50CisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldEhvbGRhYmlsaXR5KGludCBob2xkYWJpbGl0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAgCWNvbi5zZXRIb2xkYWJpbGl0eShob2xkYWJpbGl0eSk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICAgY29uLnNldEhvbGRhYmlsaXR5KGhvbGRhYmlsaXR5KTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBQdXRzIHRoZSBjb25uZWN0aW9uIGluIHJlYWQtb25seSBtb2RlIGFzIGEgaGludCB0byB0aGUgZHJpdmVyIHRvIAorICAgICAqIFB1dHMgdGhlIGNvbm5lY3Rpb24gaW4gcmVhZC1vbmx5IG1vZGUgYXMgYSBoaW50IHRvIHRoZSBkcml2ZXIgdG8KICAgICAgKiBwZXJmb3JtIGRhdGFiYXNlIG9wdGltaXphdGlvbnMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcmVhZE9ubHkgIHRydWUgZW5hYmxlcyByZWFkLW9ubHkgbW9kZSwgZmFsc2UgZGlzYWJsZXMgaXQuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICByZWFkT25seSAgdHJ1ZSBlbmFibGVzIHJlYWQtb25seSBtb2RlLCBmYWxzZSBkaXNhYmxlcyBpdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0UmVhZE9ubHkoYm9vbGVhbiByZWFkT25seSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnNldFJlYWRPbmx5KHJlYWRPbmx5KTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5zZXRSZWFkT25seShyZWFkT25seSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhbmQgdW5uYW1lZCBzYXZlcG9pbnQgYW5kIHJldHVybnMgYW4gb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhhdC4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHJldHVybiAgICA8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdC4KICAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFNhdmVwb2ludCBzZXRTYXZlcG9pbnQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnNldFNhdmVwb2ludCgpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5zZXRTYXZlcG9pbnQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgc2F2ZXBvaW50IHdpdGggdGhlIG5hbWUgYW5kIHJldHVybnMgYW4gb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhhdC4KICAgICAgKgotICAgICAqIEBwYXJhbQluYW1lCU5hbWUgb2YgdGhlIHNhdmVwb2ludC4KLSAgICAgKiBAcmV0dXJuCTxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgbmFtZSAgICBOYW1lIG9mIHRoZSBzYXZlcG9pbnQuCisgICAgICogQHJldHVybiAgICA8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFNhdmVwb2ludCBzZXRTYXZlcG9pbnQoU3RyaW5nIG5hbWUpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uc2V0U2F2ZXBvaW50KG5hbWUpOwotICAgIH0gICAgCi0gICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnNldFNhdmVwb2ludChuYW1lKTsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbGV2ZWwgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgbGV2ZWwgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRUcmFuc2FjdGlvbklzb2xhdGlvbihpbnQgbGV2ZWwpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbihsZXZlbCk7Ci0gICAgfSAgICAgCi0gICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24obGV2ZWwpOworICAgIH0KKwogICAgIC8qKgotICAgICAqIEluc3RhbGxzIHRoZSBnaXZlbiA8Y29kZT5NYXA8L2NvZGU+IG9iamVjdCBhcyB0aGUgdHlvZSBtYXAgZm9yIHRoaXMgCisgICAgICogSW5zdGFsbHMgdGhlIGdpdmVuIDxjb2RlPk1hcDwvY29kZT4gb2JqZWN0IGFzIHRoZSB0eW9lIG1hcCBmb3IgdGhpcwogICAgICAqIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgogICAgICAqCi0gICAgICogQHBhcmFtCW1hcAk8Y29kZT5NYXA8L2NvZGU+IGEgTWFwIG9iamVjdCB0byBpbnN0YWxsLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgbWFwICAgIDxjb2RlPk1hcDwvY29kZT4gYSBNYXAgb2JqZWN0IHRvIGluc3RhbGwuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFR5cGVNYXAoTWFwIG1hcCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOwotICAgIAljb24uc2V0VHlwZU1hcChtYXApOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnNldFR5cGVNYXAobWFwKTsKICAgICB9CiAKICAgICBwdWJsaWMgaW50IGdldE5ldHdvcmtUaW1lb3V0KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICB0aHJvdyBuZXcgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiRG8gbm90IHN1cHBvcnQgSmF2YSA3IG5ldyBmZWF0dXJlLiIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldE5ldHdvcmtUaW1lb3V0KEV4ZWN1dG9yIGV4ZWN1dG9yLCBpbnQgbWlsbGlzZWNvbmRzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgbmV3IGZlYXR1cmUuIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgYWJvcnQoRXhlY3V0b3IgZXhlY3V0b3IpICB0aHJvd3MgU1FMRXhjZXB0aW9uewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBuZXcgZmVhdHVyZS4iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldFNjaGVtYSgpIHRocm93cyBTUUxFeGNlcHRpb257CiAgICAgICB0aHJvdyBuZXcgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiRG8gbm90IHN1cHBvcnQgSmF2YSA3IG5ldyBmZWF0dXJlLiIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFNjaGVtYShTdHJpbmcgc2NoZW1hKSB0aHJvd3MgU1FMRXhjZXB0aW9uewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBuZXcgZmVhdHVyZS4iKTsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIENoZWNrcyB0aGUgdmFsaWRpdHkgb2YgdGhpcyBvYmplY3QKICAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgY2hlY2tWYWxpZGl0eSgpIHRocm93cyBTUUxFeGNlcHRpb24gewotICAgIAlpZiAoaXNDbG9zZWQpIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKCJDb25uZWN0aW9uIGNsb3NlZCIpOwotICAgIAlpZiAoIXZhbGlkKSB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uICgiSW52YWxpZCBDb25uZWN0aW9uIik7Ci0gICAgCWlmKGFjdGl2ZSA9PSBmYWxzZSkgewotICAgIAkgICAgbWMuY2hlY2tJZkFjdGl2ZSh0aGlzKTsKLSAgICAJfQorICAgICAgICBpZiAoaXNDbG9zZWQpIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKCJDb25uZWN0aW9uIGNsb3NlZCIpOworICAgICAgICBpZiAoIXZhbGlkKSB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uICgiSW52YWxpZCBDb25uZWN0aW9uIik7CisgICAgICAgIGlmKGFjdGl2ZSA9PSBmYWxzZSkgeworICAgICAgICAgICAgbWMuY2hlY2tJZkFjdGl2ZSh0aGlzKTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGFjdGl2ZSBmbGFnIHRvIHRydWUKICAgICAgKgotICAgICAqIEBwYXJhbQlhY3R2CWJvb2xlYW4KKyAgICAgKiBAcGFyYW0gICAgYWN0diAgICBib29sZWFuCiAgICAgICovCiAgICAgdm9pZCBzZXRBY3RpdmUoYm9vbGVhbiBhY3R2KSB7CiAgICAgICAgIGFjdGl2ZSA9IGFjdHY7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCmluZGV4IGFjN2U3NDguLmYwNjc1YTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCkBAIC0zMywxOSArMzMsMTkgQEAKICAqIFRoaXMgY2xhc3MgaXMgZXh0ZW5kZWQgYnkgdGhlIERhdGFTb3VyY2Ugc3BlY2lmaWMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGZhY3RvcmllcwogICogYW5kIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGZvciB0aGUgPGNvZGU+RHJpdmVyTWFuYWdlcjwvY29kZT4uCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wOC8wMwotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDgvMDMKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIAotcHVibGljIGFic3RyYWN0IGNsYXNzIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSwgCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LAogICAgIGphdmEuaW8uU2VyaWFsaXphYmxlIHsKLSAgICAKKwogICAgIHByb3RlY3RlZCBEYXRhU291cmNlU3BlYyBzcGVjID0gbmV3IERhdGFTb3VyY2VTcGVjKCk7CiAgICAgcHJvdGVjdGVkIHRyYW5zaWVudCBEYXRhU291cmNlT2JqZWN0QnVpbGRlciBkc09iakJ1aWxkZXI7Ci0gICAgCisKICAgICBwcm90ZWN0ZWQgamF2YS5pby5QcmludFdyaXRlciBsb2dXcml0ZXIgPSBudWxsOwogICAgIHByb3RlY3RlZCBqYWthcnRhLnJlc291cmNlLnNwaS5SZXNvdXJjZUFkYXB0ZXIgcmEgPSBudWxsOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgTG9nZ2VyIF9sb2dnZXI7CiAgICAgc3RhdGljIHsKICAgICAgICAgX2xvZ2dlciA9IExvZ2dlci5nZXRBbm9ueW1vdXNMb2dnZXIoKTsKQEAgLTU0LDggKzU0LDggQEAKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgQ29ubmVjdGlvbiBGYWN0b3J5IGluc3RhbmNlLiBUaGUgPGNvZGU+Q29ubmVjdGlvbk1hbmFnZXI8L2NvZGU+IGltcGxlbWVudGF0aW9uCiAgICAgICogb2YgdGhlIHJlc291cmNlIGFkYXB0ZXIgaXMgdXNlZCBoZXJlLgotICAgICAqIAotICAgICAqIEByZXR1cm4JR2VuZXJpYyBKREJDIENvbm5lY3RvciBpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29kZT4KKyAgICAgKgorICAgICAqIEByZXR1cm4gICAgR2VuZXJpYyBKREJDIENvbm5lY3RvciBpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgT2JqZWN0IGNyZWF0ZUNvbm5lY3Rpb25GYWN0b3J5KCkgewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtNjMsMTYgKzYzLDE2IEBACiAgICAgICAgIH0KICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2UgY2YgPSBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2UoCiAgICAgICAgICAgICAoamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KXRoaXMsIG51bGwpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gY2Y7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIENvbm5lY3Rpb24gRmFjdG9yeSBpbnN0YW5jZS4gVGhlIDxjb2RlPkNvbm5lY3Rpb25NYW5hZ2VyPC9jb2RlPiBpbXBsZW1lbnRhdGlvbgogICAgICAqIG9mIHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIgaXMgdXNlZCBoZXJlLgotICAgICAqIAotICAgICAqIEBwYXJhbQljeE1hbmFnZXIJPGNvZGU+Q29ubmVjdGlvbk1hbmFnZXI8L2NvZGU+IHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICogQHJldHVybglHZW5lcmljIEpEQkMgQ29ubmVjdG9yIGltcGxlbWVudGF0aW9uIG9mIDxjb2RlPmphdmF4LnNxbC5EYXRhU291cmNlPC9jb2RlPgorICAgICAqCisgICAgICogQHBhcmFtICAgIGN4TWFuYWdlciAgICA8Y29kZT5Db25uZWN0aW9uTWFuYWdlcjwvY29kZT4gcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiBAcmV0dXJuICAgIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IgaW1wbGVtZW50YXRpb24gb2YgPGNvZGU+amF2YXguc3FsLkRhdGFTb3VyY2U8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIE9iamVjdCBjcmVhdGVDb25uZWN0aW9uRmFjdG9yeShqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uTWFuYWdlciBjeE1hbmFnZXIpIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTgwLDU1ICs4MCw1NSBAQAogICAgICAgICB9CiAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlIGNmID0gbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlKAogICAgICAgICAgICAgKGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSl0aGlzLCBjeE1hbmFnZXIpOwotICAgICAgICByZXR1cm4gY2Y7IAorICAgICAgICByZXR1cm4gY2Y7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIG5ldyBwaHlzaWNhbCBjb25uZWN0aW9uIHRvIHRoZSB1bmRlcmx5aW5nIEVJUyByZXNvdXJjZQogICAgICAqIG1hbmFnZXIuCi0gICAgICogCi0gICAgICogQHBhcmFtCXN1YmplY3QJPGNvZGU+U3ViamVjdDwvY29kZT4gaW5zdGFuY2UgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKiBAcGFyYW0JY3hSZXF1ZXN0SW5mbwk8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHdoaWNoIG1heSBiZSBjcmVhdGVkCi0gICAgICogICAgICAgCSAgICAgICAgICAgICAJYXMgYSByZXN1bHQgb2YgdGhlIGludm9jYXRpb24gPGNvZGU+Z2V0Q29ubmVjdGlvbih1c2VyLCBwYXNzd29yZCk8L2NvZGU+Ci0gICAgICogICAgICAgCSAgICAgICAgICAgICAJb24gdGhlIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdAotICAgICAqIEByZXR1cm4JPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBjcmVhdGVkCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBpbnN0YW50aWF0aW5nIHRoZQotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0IHVzZWQgZm9yIHRoZQotICAgICAqICAgICAgIAkJCQljcmVhdGlvbiBvZiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdAotICAgICAqIEB0aHJvd3MJU2VjdXJpdHlFeGNlcHRpb24JaWYgdGhlcmUgaW5vIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0Ci0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAlzYXRpc2Z5aW5nIHRoaXMgcmVxdWVzdCAKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZSAKLSAgICAgKgkJCQkJCXBoeXNpY2FsIGNvbm5lY3Rpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzdWJqZWN0ICAgIDxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogQHBhcmFtICAgIGN4UmVxdWVzdEluZm8gICAgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiB3aGljaCBtYXkgYmUgY3JlYXRlZAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIGEgcmVzdWx0IG9mIHRoZSBpbnZvY2F0aW9uIDxjb2RlPmdldENvbm5lY3Rpb24odXNlciwgcGFzc3dvcmQpPC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIHRoZSA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QgY3JlYXRlZAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gaW5zdGFudGlhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdCB1c2VkIGZvciB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRpb24gb2YgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QKKyAgICAgKiBAdGhyb3dzICAgIFNlY3VyaXR5RXhjZXB0aW9uICAgIGlmIHRoZXJlIGlubyA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F0aXNmeWluZyB0aGlzIHJlcXVlc3QKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgcGh5c2ljYWwgY29ubmVjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyBhYnN0cmFjdCBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBjcmVhdGVNYW5hZ2VkQ29ubmVjdGlvbihqYXZheC5zZWN1cml0eS5hdXRoLlN1YmplY3Qgc3ViamVjdCwKICAgICAgICAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxdWVzdEluZm8pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIC8qKgotICAgICAqIENoZWNrIGlmIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpcyBlcXVhbCB0byAKKyAgICAgKiBDaGVjayBpZiB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaXMgZXF1YWwgdG8KICAgICAgKiBhbm90aGVyIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4uCi0gICAgICogCi0gICAgICogQHBhcmFtCW90aGVyCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0IGZvciBjaGVja2luZyBlcXVhbGl0eSB3aXRoCi0gICAgICogQHJldHVybgl0cnVlCWlmIHRoZSBwcm9wZXJ0eSBzZXRzIG9mIGJvdGggdGhlIAotICAgICAqCQkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3RzIGFyZSB0aGUgc2FtZQotICAgICAqCQlmYWxzZQlvdGhlcndpc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBvdGhlciAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdCBmb3IgY2hlY2tpbmcgZXF1YWxpdHkgd2l0aAorICAgICAqIEByZXR1cm4gICAgdHJ1ZSAgICBpZiB0aGUgcHJvcGVydHkgc2V0cyBvZiBib3RoIHRoZQorICAgICAqICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3RzIGFyZSB0aGUgc2FtZQorICAgICAqICAgICAgICBmYWxzZSAgICBvdGhlcndpc2UKICAgICAgKi8KICAgICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG90aGVyKTsKLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgbG9nIHdyaXRlciBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEBzZWUJPGNvZGU+c2V0TG9nV3JpdGVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldExvZ1dyaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgamF2YS5pby5QcmludFdyaXRlciBnZXRMb2dXcml0ZXIoKSB7CiAgICAgICAgIHJldHVybiBsb2dXcml0ZXI7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSA8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEBzZWUJPGNvZGU+c2V0UmVzb3VyY2VBZGFwdGVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRSZXNvdXJjZUFkYXB0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIGpha2FydGEucmVzb3VyY2Uuc3BpLlJlc291cmNlQWRhcHRlciBnZXRSZXNvdXJjZUFkYXB0ZXIoKSB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC0xMzYsMTEgKzEzNiwxMSBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiByYTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSBoYXNoIGNvZGUgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPi4KICAgICAgKgotICAgICAqIEByZXR1cm4JaGFzaCBjb2RlIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGhhc2ggY29kZSBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIGludCBoYXNoQ29kZSgpewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtMTQ4LDQxICsxNDgsNDEgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gc3BlYy5oYXNoQ29kZSgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFJldHVybnMgYSBtYXRjaGVkIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBmcm9tIHRoZSBjYW5kaWRhdGUgCisgICAgICogUmV0dXJucyBhIG1hdGNoZWQgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGZyb20gdGhlIGNhbmRpZGF0ZQogICAgICAqIHNldCBvZiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0cy4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JY29ubmVjdGlvblNldAk8Y29kZT5TZXQ8L2NvZGU+IG9mICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KLSAgICAgKgkJCQlvYmplY3RzIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICogQHBhcmFtCXN1YmplY3QJIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICoJCQlmb3IgcmV0cmlldmluZyBpbmZvcm1hdGlvbiByZXF1aXJlZCBmb3IgbWF0Y2hpbmcKLSAgICAgKiBAcGFyYW0JY3hSZXF1ZXN0SW5mbwk8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICoJCQkJZm9yIHJldHJpZXZpbmcgaW5mb3JtYXRpb24gcmVxdWlyZWQgZm9yIG1hdGNoaW5nCi0gICAgICogQHJldHVybgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdGhhdCBpcyB0aGUgYmVzdCBtYXRjaCBzYXRpc2Z5aW5nIHRoaXMgcmVxdWVzdAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgYWNjZXNzaW5nIHRoZSA8Y29kZT5TdWJqZWN0PC9jb2RlPgotICAgICAqCQkJCQlwYXJhbWV0ZXIgb3IgdGhlIDxjb2RlPlNldDwvY29kZT4gb2YgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+Ci0gICAgICoJCQkJCW9iamVjdHMgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBjb25uZWN0aW9uU2V0ICAgIDxjb2RlPlNldDwvY29kZT4gb2YgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgIG9iamVjdHMgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiBAcGFyYW0gICAgc3ViamVjdCAgICAgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiAgICAgICAgICAgIGZvciByZXRyaWV2aW5nIGluZm9ybWF0aW9uIHJlcXVpcmVkIGZvciBtYXRjaGluZworICAgICAqIEBwYXJhbSAgICBjeFJlcXVlc3RJbmZvICAgIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiAgICAgICAgICAgICAgICBmb3IgcmV0cmlldmluZyBpbmZvcm1hdGlvbiByZXF1aXJlZCBmb3IgbWF0Y2hpbmcKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiB0aGF0IGlzIHRoZSBiZXN0IG1hdGNoIHNhdGlzZnlpbmcgdGhpcyByZXF1ZXN0CisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBhY2Nlc3NpbmcgdGhlIDxjb2RlPlN1YmplY3Q8L2NvZGU+CisgICAgICogICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlciBvciB0aGUgPGNvZGU+U2V0PC9jb2RlPiBvZiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgb2JqZWN0cyBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgogICAgICAqLwotICAgIHB1YmxpYyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYXRjaE1hbmFnZWRDb25uZWN0aW9ucyhqYXZhLnV0aWwuU2V0IGNvbm5lY3Rpb25TZXQsIAorICAgIHB1YmxpYyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYXRjaE1hbmFnZWRDb25uZWN0aW9ucyhqYXZhLnV0aWwuU2V0IGNvbm5lY3Rpb25TZXQsCiAgICAgICAgIGphdmF4LnNlY3VyaXR5LmF1dGguU3ViamVjdCBzdWJqZWN0LCBDb25uZWN0aW9uUmVxdWVzdEluZm8gY3hSZXF1ZXN0SW5mbykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBtYXRjaE1hbmFnZWRDb25uZWN0aW9ucyIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmKGNvbm5lY3Rpb25TZXQgPT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgUGFzc3dvcmRDcmVkZW50aWFsIHBjID0gU2VjdXJpdHlVdGlscy5nZXRQYXNzd29yZENyZWRlbnRpYWwodGhpcywgc3ViamVjdCwgY3hSZXF1ZXN0SW5mbyk7Ci0gICAgICAgIAorCiAgICAgICAgIGphdmEudXRpbC5JdGVyYXRvciBpdGVyID0gY29ubmVjdGlvblNldC5pdGVyYXRvcigpOwogICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWMgPSBudWxsOwogICAgICAgICB3aGlsZShpdGVyLmhhc05leHQoKSkgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBtYyA9IChjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24pIGl0ZXIubmV4dCgpOwogICAgICAgICAgICAgfSBjYXRjaChqYXZhLnV0aWwuTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiBuc2VlKSB7Ci0JICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19pdGVyIik7CisgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19pdGVyIik7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKG5zZWUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmKHBjID09IG51bGwgJiYgdGhpcy5lcXVhbHMobWMuZ2V0TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KCkpKSB7CkBAIC0xOTEsNyArMTkxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgaXNWYWxpZChtYyk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYzsKICAgICAgICAgICAgICAgICB9IGNhdGNoKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7Ci0JICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfcmUiLCByZSk7CisgICAgICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfcmUiLCByZSk7CiAgICAgICAgICAgICAgICAgICAgIG1jLmNvbm5lY3Rpb25FcnJvck9jY3VycmVkKHJlLCBudWxsKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgaWYoU2VjdXJpdHlVdGlscy5pc1Bhc3N3b3JkQ3JlZGVudGlhbEVxdWFsKHBjLCBtYy5nZXRQYXNzd29yZENyZWRlbnRpYWwoKSkgPT0gdHJ1ZSkgewpAQCAtMjAwLDQ1ICsyMDAsNDUgQEAKICAgICAgICAgICAgICAgICAgICAgaXNWYWxpZChtYyk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYzsKICAgICAgICAgICAgICAgICB9IGNhdGNoKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7Ci0JICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5yZSIpOworICAgICAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMucmUiKTsKICAgICAgICAgICAgICAgICAgICAgbWMuY29ubmVjdGlvbkVycm9yT2NjdXJyZWQocmUsIG51bGwpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICAvL0dKQ0lOVAogICAgIC8qKgogICAgICAqIENoZWNrcyBpZiBhIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpcyB0byBiZSB2YWxpZGF0ZWQgb3Igbm90CiAgICAgICogYW5kIHZhbGlkYXRlcyBpdCBvciByZXR1cm5zLgotICAgICAqIAotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgb3IKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAJCWlmIHZhbGlkYXRpb24gbWV0aG9kIGlzIG5vdCBwcm9wZXIKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBtYyAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgb3IKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHZhbGlkYXRpb24gbWV0aG9kIGlzIG5vdCBwcm9wZXIKICAgICAgKi8KICAgICB2b2lkIGlzVmFsaWQoY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1jKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogCiAgICAgICAgIGlmKG1jLmlzVHJhbnNhY3Rpb25JblByb2dyZXNzKCkpIHsKLQkgICAgcmV0dXJuOworICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAKLSAgICAgICAgYm9vbGVhbiBjb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkID0gCisKKyAgICAgICAgYm9vbGVhbiBjb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkID0KICAgICAgICAgICAgIChuZXcgQm9vbGVhbihzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVEKS50b0xvd2VyQ2FzZSgpKSkuYm9vbGVhblZhbHVlKCk7CiAgICAgICAgIGlmKCBjb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkID09IGZhbHNlIHx8IG1jID09IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgCisKKwogICAgICAgICBTdHJpbmcgdmFsaWRhdGlvbk1ldGhvZCA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05NRVRIT0QpLnRvTG93ZXJDYXNlKCk7Ci0gICAgICAgIAorCiAgICAgICAgIG1jLmNoZWNrSWZWYWxpZCgpOwogICAgICAgICAvKioKICAgICAgICAgICogVGhlIGFib3ZlIGNhbGwgY2hlY2tzIGlmIHRoZSBhY3R1YWwgcGh5c2ljYWwgY29ubmVjdGlvbgogICAgICAgICAgKiBpcyB1c2FibGUgb3Igbm90LgogICAgICAgICAgKi8KICAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBjb24gPSBtYy5nZXRBY3R1YWxDb25uZWN0aW9uKCk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKHZhbGlkYXRpb25NZXRob2QuZXF1YWxzKCJhdXRvLWNvbW1pdCIpID09IHRydWUpIHsKICAgICAgICAgICAgIGlzVmFsaWRCeUF1dG9Db21taXQoY29uKTsKICAgICAgICAgfSBlbHNlIGlmKHZhbGlkYXRpb25NZXRob2QuZXF1YWxzSWdub3JlQ2FzZSgibWV0YS1kYXRhIikgPT0gdHJ1ZSkgewpAQCAtMjQ5LDI4ICsyNDksMjggQEAKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIHZhbGlkYXRpb24gbWV0aG9kIGlzIG5vdCBwcm9wZXIiKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENoZWNrcyBpZiBhIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IGlzIHZhbGlkIG9yIG5vdAogICAgICAqIGJ5IGNoZWNraW5nIGl0cyBhdXRvIGNvbW1pdCBwcm9wZXJ0eS4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JY29uCTxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgY29uICAgIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCiAgICAgICovCiAgICAgcHJvdGVjdGVkIHZvaWQgaXNWYWxpZEJ5QXV0b0NvbW1pdChqYXZhLnNxbC5Db25uZWN0aW9uIGNvbikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYoY29uID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzICIKICAgICAgICAgICAgICAgICArICJ0aGUgY29ubmVjdGlvbiBpcyBudWxsIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgLy8gTm90aWNlIHRoYXQgdXNpbmcgc29tZXRoaW5nIGxpa2UgCisgICAgICAgICAgIC8vIE5vdGljZSB0aGF0IHVzaW5nIHNvbWV0aGluZyBsaWtlCiAgICAgICAgICAgIC8vIGRiQ29uLnNldEF1dG9Db21taXQoZGJDb24uZ2V0QXV0b0NvbW1pdCgpKSB3aWxsIGNhdXNlIHByb2JsZW1zIHdpdGgKICAgICAgICAgICAgLy8gc29tZSBkcml2ZXJzIGxpa2Ugc3liYXNlCi0gICAgICAgICAgIC8vIFdlIGRvIG5vdCB2YWxpZGF0ZSBjb25uZWN0aW9ucyB0aGF0IGFyZSBhbHJlYWR5IGVubGlzdGVkIAotCSAgIC8vaW4gYSB0cmFuc2FjdGlvbiAKLQkgICAvLyBXZSBjeWNsZSBhdXRvY29tbWl0IHRvIHRydWUgYW5kIGZhbHNlIHRvIGJ5LXBhc3MgZHJpdmVycyB0aGF0IAotCSAgIC8vIG1pZ2h0IGNhY2hlIHRoZSBjYWxsIHRvIHNldCBhdXRvY29taXR0CisgICAgICAgICAgIC8vIFdlIGRvIG5vdCB2YWxpZGF0ZSBjb25uZWN0aW9ucyB0aGF0IGFyZSBhbHJlYWR5IGVubGlzdGVkCisgICAgICAgLy9pbiBhIHRyYW5zYWN0aW9uCisgICAgICAgLy8gV2UgY3ljbGUgYXV0b2NvbW1pdCB0byB0cnVlIGFuZCBmYWxzZSB0byBieS1wYXNzIGRyaXZlcnMgdGhhdAorICAgICAgIC8vIG1pZ2h0IGNhY2hlIHRoZSBjYWxsIHRvIHNldCBhdXRvY29taXR0CiAgICAgICAgICAgIC8vIEFsc28gbm90aWNlIHRoYXQgc29tZSBYQSBkYXRhIHNvdXJjZXMgd2lsbCB0aHJvdyBhbmQgZXhjZXB0aW9uIGlmCiAgICAgICAgICAgIC8vIHlvdSB0cnkgdG8gY2FsbCBzZXRBdXRvQ29tbWl0LCBmb3IgdGhlbSB0aGlzIG1ldGhvZCBpcyBub3QgcmVjb21tZW5kZWQKIApAQCAtMjgxLDkwICsyODEsOTAgQEAKICAgICAgICAgICAgICAgICBjb24ucm9sbGJhY2soKTsgLy8gcHJldmVudHMgdW5jb21wbGV0ZWQgdHJhbnNhY3Rpb24gZXhjZXB0aW9ucwogICAgICAgICAgICAgICAgIGNvbi5zZXRBdXRvQ29tbWl0KHRydWUpOwogICAgICAgICAgICB9Ci0gICAgICAgIAotCSAgIGNvbi5zZXRBdXRvQ29tbWl0KGFjKTsKKworICAgICAgIGNvbi5zZXRBdXRvQ29tbWl0KGFjKTsKIAogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2F1dG9jb21taXQiKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfYXV0b2NvbW1pdCIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENoZWNrcyBpZiBhIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IGlzIHZhbGlkIG9yIG5vdAogICAgICAqIGJ5IGNoZWNraW5nIGl0cyBtZXRhIGRhdGEuCi0gICAgICogCi0gICAgICogQHBhcmFtCWNvbgk8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqCisgICAgICogQHBhcmFtICAgIGNvbiAgICA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqLwogICAgIHByb3RlY3RlZCB2b2lkIGlzVmFsaWRCeU1ldGFEYXRhKGphdmEuc3FsLkNvbm5lY3Rpb24gY29uKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihjb24gPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgIgogICAgICAgICAgICAgICAgICsgInRoZSBjb25uZWN0aW9uIGlzIG51bGwiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgamF2YS5zcWwuRGF0YWJhc2VNZXRhRGF0YSBkbWQgPSBjb24uZ2V0TWV0YURhdGEoKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19tZCIpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19tZCIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgIgogICAgICAgICAgICAgICAgICsgImdldHRpbmcgdGhlIG1ldGEgZGF0YSBmYWlsZWQ6ICIgKyBzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDaGVja3MgaWYgYSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBpcyB2YWxpZCBvciBub3QKICAgICAgKiBieSBxdWVyeWluZyBhIHRhYmxlLgotICAgICAqIAotICAgICAqIEBwYXJhbQljb24JPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCi0gICAgICogQHBhcmFtCXRhYmxlTmFtZQl0YWJsZSB3aGljaCBzaG91bGQgYmUgcXVlcmllZAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgY29uICAgIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAorICAgICAqIEBwYXJhbSAgICB0YWJsZU5hbWUgICAgdGFibGUgd2hpY2ggc2hvdWxkIGJlIHF1ZXJpZWQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqLwotICAgIHByb3RlY3RlZCB2b2lkIGlzVmFsaWRCeVRhYmxlUXVlcnkoamF2YS5zcWwuQ29ubmVjdGlvbiBjb24sIAorICAgIHByb3RlY3RlZCB2b2lkIGlzVmFsaWRCeVRhYmxlUXVlcnkoamF2YS5zcWwuQ29ubmVjdGlvbiBjb24sCiAgICAgICAgIFN0cmluZyB0YWJsZU5hbWUpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGNvbiA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyAiCiAgICAgICAgICAgICAgICAgKyAidGhlIGNvbm5lY3Rpb24gaXMgbnVsbCIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBqYXZhLnNxbC5TdGF0ZW1lbnQgc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKICAgICAgICAgICAgIGphdmEuc3FsLlJlc3VsdFNldCBycyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KCJTRUxFQ1QgKiBGUk9NICIgKyB0YWJsZU5hbWUpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2V4ZWN1dGUiKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZXhlY3V0ZSIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgIgogICAgICAgICAgICAgICAgICsgInF1ZXJ5aW5nIHRoZSB0YWJsZSAiICsgdGFibGVOYW1lICsgIiBmYWlsZWQ6ICIgKyBzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBpc29sYXRpb24gbGV2ZWwgc3BlY2lmaWVkIGluIHRoZSA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+CiAgICAgICogZm9yIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gcGFzc2VkLgogICAgICAqCi0gICAgICogQHBhcmFtCW1jCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIGlzb2xhdGlvbiBwcm9wZXJ0eSBpcyBpbnZhbGlkCi0gICAgICoJCQkJCW9yIGlmIHRoZSBpc29sYXRpb24gY2Fubm90IGJlIHNldCBvdmVyIHRoZSBjb25uZWN0aW9uCisgICAgICogQHBhcmFtICAgIG1jICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIGlzb2xhdGlvbiBwcm9wZXJ0eSBpcyBpbnZhbGlkCisgICAgICogICAgICAgICAgICAgICAgICAgIG9yIGlmIHRoZSBpc29sYXRpb24gY2Fubm90IGJlIHNldCBvdmVyIHRoZSBjb25uZWN0aW9uCiAgICAgICovCiAgICAgcHJvdGVjdGVkIHZvaWQgc2V0SXNvbGF0aW9uKGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKLSAgICAJCi0gICAgCWphdmEuc3FsLkNvbm5lY3Rpb24gY29uID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpOwotICAgIAlpZihjb24gPT0gbnVsbCkgewotICAgIAkgICAgcmV0dXJuOwotICAgIAl9Ci0gICAgCQotICAgIAlTdHJpbmcgdHJhbklzb2xhdGlvbiA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKLSAgICAJaWYodHJhbklzb2xhdGlvbiAhPSBudWxsICYmIHRyYW5Jc29sYXRpb24uZXF1YWxzKCIiKSA9PSBmYWxzZSkgewotICAgIAkgICAgaW50IHRyYW5Jc29sYXRpb25JbnQgPSBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbkludCh0cmFuSXNvbGF0aW9uKTsKLSAgICAJICAgIHRyeSB7Ci0gICAgCSAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sYXRpb25JbnQpOwotICAgIAkgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfdHhfbGV2ZWwiKTsKLSAgICAJICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gY291bGQgIgotICAgIAkgICAgICAgICAgICArICJub3QgYmUgc2V0OiAiICsgc3FsZS5nZXRNZXNzYWdlKCkpOwotICAgIAkgICAgfQotICAgIAl9CisKKyAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBjb24gPSBtYy5nZXRBY3R1YWxDb25uZWN0aW9uKCk7CisgICAgICAgIGlmKGNvbiA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBTdHJpbmcgdHJhbklzb2xhdGlvbiA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKKyAgICAgICAgaWYodHJhbklzb2xhdGlvbiAhPSBudWxsICYmIHRyYW5Jc29sYXRpb24uZXF1YWxzKCIiKSA9PSBmYWxzZSkgeworICAgICAgICAgICAgaW50IHRyYW5Jc29sYXRpb25JbnQgPSBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbkludCh0cmFuSXNvbGF0aW9uKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sYXRpb25JbnQpOworICAgICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgeworICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfdHhfbGV2ZWwiKTsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gY291bGQgIgorICAgICAgICAgICAgICAgICAgICArICJub3QgYmUgc2V0OiAiICsgc3FsZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmVzZXRzIHRoZSBpc29sYXRpb24gbGV2ZWwgZm9yIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gcGFzc2VkLgogICAgICAqIElmIHRoZSB0cmFuc2FjdGlvbiBsZXZlbCBpcyB0byBiZSBndWFyYW50ZWVkIHRvIGJlIHRoZSBzYW1lIGFzIHRoZSBvbmUKQEAgLTM3MywzODIgKzM3MywzODIgQEAKICAgICAgKiBpc29sYXRpb24gbGV2ZWwgZnJvbSB0aGUgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBwYXNzZWQuIEVsc2UsCiAgICAgICogaXQgc2V0cyBpdCB0byB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIHBhc3NlZC4KICAgICAgKgotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KLSAgICAgKiBAcGFyYW0JdHJhbklzb2wJaW50Ci0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgaXNvbGF0aW9uIHByb3BlcnR5IGlzIGludmFsaWQKLSAgICAgKgkJCQkJb3IgaWYgdGhlIGlzb2xhdGlvbiBjYW5ub3QgYmUgc2V0IG92ZXIgdGhlIGNvbm5lY3Rpb24KKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogQHBhcmFtICAgIHRyYW5Jc29sICAgIGludAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIGlzb2xhdGlvbiBwcm9wZXJ0eSBpcyBpbnZhbGlkCisgICAgICogICAgICAgICAgICAgICAgICAgIG9yIGlmIHRoZSBpc29sYXRpb24gY2Fubm90IGJlIHNldCBvdmVyIHRoZSBjb25uZWN0aW9uCiAgICAgICovCiAgICAgdm9pZCByZXNldElzb2xhdGlvbihjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWMsIGludCB0cmFuSXNvbCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKLSAgICAJCi0gICAgCWphdmEuc3FsLkNvbm5lY3Rpb24gY29uID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpOwotICAgIAlpZihjb24gPT0gbnVsbCkgewotICAgIAkgICAgcmV0dXJuOwotICAgIAl9Ci0gICAgCQotICAgIAlTdHJpbmcgdHJhbklzb2xhdGlvbiA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKLSAgICAJaWYodHJhbklzb2xhdGlvbiAhPSBudWxsICYmIHRyYW5Jc29sYXRpb24uZXF1YWxzKCIiKSA9PSBmYWxzZSkgewotICAgIAkgICAgU3RyaW5nIGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwpOwotICAgIAkgICAgCi0gICAgCSAgICBpZihndWFyYW50ZWVJc29sYXRpb25MZXZlbCAhPSBudWxsICYmIGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsLmVxdWFscygiIikgPT0gZmFsc2UpIHsKLSAgICAJICAgICAgICBib29sZWFuIGd1YXJhbnRlZSA9IChuZXcgQm9vbGVhbihndWFyYW50ZWVJc29sYXRpb25MZXZlbC50b0xvd2VyQ2FzZSgpKSkuYm9vbGVhblZhbHVlKCk7Ci0gICAgCSAgICAgICAgCi0gICAgCSAgICAgICAgaWYoZ3VhcmFudGVlKSB7Ci0gICAgCSAgICAgICAgICAgIGludCB0cmFuSXNvbGF0aW9uSW50ID0gZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb25JbnQodHJhbklzb2xhdGlvbik7Ci0gICAgCSAgICAgICAgICAgIHRyeSB7Ci0gICAgCSAgICAgICAgICAgICAgICBpZih0cmFuSXNvbGF0aW9uSW50ICE9IGNvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpKSB7Ci0gICAgCSAgICAgICAgICAgICAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sYXRpb25JbnQpOwotICAgIAkgICAgICAgICAgICAgICAgfQotICAgIAkgICAgICAgICAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgICAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3R4X2xldmVsIik7Ci0gICAgCSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBpc29sYXRpb24gbGV2ZWwgY291bGQgbm90IGJlIHNldDogIgotICAgIAkgICAgICAgICAgICAgICAgICAgICsgc3FsZS5nZXRNZXNzYWdlKCkpOwotICAgIAkgICAgICAgICAgICB9Ci0gICAgCSAgICAgICAgfSBlbHNlIHsKLSAgICAJICAgICAgICAgICAgdHJ5IHsKLSAgICAJICAgICAgICAgICAgICAgIGlmKHRyYW5Jc29sICE9IGNvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpKSB7Ci0gICAgCSAgICAgICAgICAgICAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sKTsKLSAgICAJICAgICAgICAgICAgICAgIH0KLSAgICAJICAgICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y190eF9sZXZlbCIpOwotICAgIAkgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgaXNvbGF0aW9uIGxldmVsIGNvdWxkIG5vdCBiZSBzZXQ6ICIKLSAgICAJICAgICAgICAgICAgICAgICAgICArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAJICAgICAgICAgICAgfQotICAgIAkgICAgICAgIH0KLSAgICAJICAgIH0KLSAgICAJfQorCisgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gY29uID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpOworICAgICAgICBpZihjb24gPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgU3RyaW5nIHRyYW5Jc29sYXRpb24gPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTik7CisgICAgICAgIGlmKHRyYW5Jc29sYXRpb24gIT0gbnVsbCAmJiB0cmFuSXNvbGF0aW9uLmVxdWFscygiIikgPT0gZmFsc2UpIHsKKyAgICAgICAgICAgIFN0cmluZyBndWFyYW50ZWVJc29sYXRpb25MZXZlbCA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkdVQVJBTlRFRUlTT0xBVElPTkxFVkVMKTsKKworICAgICAgICAgICAgaWYoZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwgIT0gbnVsbCAmJiBndWFyYW50ZWVJc29sYXRpb25MZXZlbC5lcXVhbHMoIiIpID09IGZhbHNlKSB7CisgICAgICAgICAgICAgICAgYm9vbGVhbiBndWFyYW50ZWUgPSAobmV3IEJvb2xlYW4oZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwudG9Mb3dlckNhc2UoKSkpLmJvb2xlYW5WYWx1ZSgpOworCisgICAgICAgICAgICAgICAgaWYoZ3VhcmFudGVlKSB7CisgICAgICAgICAgICAgICAgICAgIGludCB0cmFuSXNvbGF0aW9uSW50ID0gZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb25JbnQodHJhbklzb2xhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZih0cmFuSXNvbGF0aW9uSW50ICE9IGNvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sYXRpb25JbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7CisgICAgICAgICAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3R4X2xldmVsIik7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBpc29sYXRpb24gbGV2ZWwgY291bGQgbm90IGJlIHNldDogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgc3FsZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRyYW5Jc29sICE9IGNvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgeworICAgICAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y190eF9sZXZlbCIpOworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgaXNvbGF0aW9uIGxldmVsIGNvdWxkIG5vdCBiZSBzZXQ6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGludGVnZXIgZXF1aXZhbGVudCBvZiB0aGUgc3RyaW5nIHNwZWNpZnlpbmcKICAgICAgKiB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uLgogICAgICAqCi0gICAgICogQHBhcmFtCXRyYW5Jc29sYXRpb24Jc3RyaW5nIHNwZWNpZnlpbmcgdGhlIGlzb2xhdGlvbiBsZXZlbAotICAgICAqIEByZXR1cm4JdHJhbklzb2xhdGlvbkludAl0aGUgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gY29uc3RhbnQKLSAgICAgKgkJCQkJZm9yIHRoZSBzdHJpbmcgc3BlY2lmeWluZyB0aGUgaXNvbGF0aW9uLgorICAgICAqIEBwYXJhbSAgICB0cmFuSXNvbGF0aW9uICAgIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBpc29sYXRpb24gbGV2ZWwKKyAgICAgKiBAcmV0dXJuICAgIHRyYW5Jc29sYXRpb25JbnQgICAgdGhlIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IGNvbnN0YW50CisgICAgICogICAgICAgICAgICAgICAgICAgIGZvciB0aGUgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIGlzb2xhdGlvbi4KICAgICAgKi8KICAgICBwcml2YXRlIGludCBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbkludChTdHJpbmcgdHJhbklzb2xhdGlvbikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKLSAgICAJaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJyZWFkLXVuY29tbWl0dGVkIikpIHsKLSAgICAJICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1JFQURfVU5DT01NSVRURUQ7Ci0gICAgCX0gZWxzZSBpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInJlYWQtY29tbWl0dGVkIikpIHsKLSAgICAJICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1JFQURfQ09NTUlUVEVEOwotICAgIAl9IGVsc2UgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJyZXBlYXRhYmxlLXJlYWQiKSkgewotICAgIAkgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fUkVQRUFUQUJMRV9SRUFEOwotICAgIAl9IGVsc2UgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJzZXJpYWxpemFibGUiKSkgewotICAgIAkgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fU0VSSUFMSVpBQkxFOwotICAgIAl9IGVsc2UgewotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJJbnZhbGlkIHRyYW5zYWN0aW9uIGlzb2xhdGlvbjsgdGhlIHRyYW5zYWN0aW9uICIKLSAgICAJICAgICAgICArICJpc29sYXRpb24gbGV2ZWwgY2FuIGJlIGVtcHR5IG9yIGFueSBvZiB0aGUgZm9sbG93aW5nOiAiCi0gICAgCSAgICAgICAgICAgICsgInJlYWQtdW5jb21taXR0ZWQsIHJlYWQtY29tbWl0dGVkLCByZXBlYXRhYmxlLXJlYWQsIHNlcmlhbGl6YWJsZSIpOwotICAgIAl9CisgICAgICAgIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgicmVhZC11bmNvbW1pdHRlZCIpKSB7CisgICAgICAgICAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9SRUFEX1VOQ09NTUlUVEVEOworICAgICAgICB9IGVsc2UgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJyZWFkLWNvbW1pdHRlZCIpKSB7CisgICAgICAgICAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9SRUFEX0NPTU1JVFRFRDsKKyAgICAgICAgfSBlbHNlIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgicmVwZWF0YWJsZS1yZWFkIikpIHsKKyAgICAgICAgICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1JFUEVBVEFCTEVfUkVBRDsKKyAgICAgICAgfSBlbHNlIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgic2VyaWFsaXphYmxlIikpIHsKKyAgICAgICAgICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1NFUklBTElaQUJMRTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiSW52YWxpZCB0cmFuc2FjdGlvbiBpc29sYXRpb247IHRoZSB0cmFuc2FjdGlvbiAiCisgICAgICAgICAgICAgICAgKyAiaXNvbGF0aW9uIGxldmVsIGNhbiBiZSBlbXB0eSBvciBhbnkgb2YgdGhlIGZvbGxvd2luZzogIgorICAgICAgICAgICAgICAgICAgICArICJyZWFkLXVuY29tbWl0dGVkLCByZWFkLWNvbW1pdHRlZCwgcmVwZWF0YWJsZS1yZWFkLCBzZXJpYWxpemFibGUiKTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgbG9nIHdyaXRlciBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCW91dAk8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKiBAc2VlCTxjb2RlPmdldExvZ1dyaXRlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgb3V0ICAgIDxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0TG9nV3JpdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldExvZ1dyaXRlcihqYXZhLmlvLlByaW50V3JpdGVyIG91dCkgewogICAgICAgICBsb2dXcml0ZXIgPSBvdXQ7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0IHRoZSBhc3NvY2lhdGVkIDxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gSmF2YUJlYW4uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcmEJPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcyAKLSAgICAgKgkJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAc2VlCTxjb2RlPmdldFJlc291cmNlQWRhcHRlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcmEgICAgPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAqICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0UmVzb3VyY2VBZGFwdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFJlc291cmNlQWRhcHRlcihqYWthcnRhLnJlc291cmNlLnNwaS5SZXNvdXJjZUFkYXB0ZXIgcmEpIHsKLSAgICAgICAgdGhpcy5yYSA9IHJhOyAgIAorICAgICAgICB0aGlzLnJhID0gcmE7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdXNlciBuYW1lCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdXNlcgk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHVzZXIgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFVzZXIoU3RyaW5nIHVzZXIpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVVNFUk5BTUUsIHVzZXIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHVzZXIgbmFtZQogICAgICAqCi0gICAgICogQHJldHVybgl1c2VyCisgICAgICogQHJldHVybiAgICB1c2VyCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRVc2VyKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVVNFUk5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHVzZXIgbmFtZQogICAgICAqCi0gICAgICogQHBhcmFtCXVzZXIJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB1c2VyICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXR1c2VyKFN0cmluZyB1c2VyKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlVTRVJOQU1FLCB1c2VyKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSB1c2VyIG5hbWUKICAgICAgKgotICAgICAqIEByZXR1cm4JdXNlcgorICAgICAqIEByZXR1cm4gICAgdXNlcgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0dXNlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlVTRVJOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBwYXNzd29yZAogICAgICAqCi0gICAgICogQHBhcmFtCXBhc3N3ZAk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHBhc3N3ZCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0UGFzc3dvcmQoU3RyaW5nIHBhc3N3ZCkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5QQVNTV09SRCwgcGFzc3dkKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBwYXNzd29yZAogICAgICAqCi0gICAgICogQHJldHVybglwYXNzd2QKKyAgICAgKiBAcmV0dXJuICAgIHBhc3N3ZAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0UGFzc3dvcmQoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QQVNTV09SRCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgcGFzc3dvcmQKICAgICAgKgotICAgICAqIEBwYXJhbQlwYXNzd2QJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBwYXNzd2QgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHBhc3N3b3JkKFN0cmluZyBwYXNzd2QpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUEFTU1dPUkQsIHBhc3N3ZCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcGFzc3dvcmQKICAgICAgKgotICAgICAqIEByZXR1cm4JcGFzc3dkCisgICAgICogQHJldHVybiAgICBwYXNzd2QKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHBhc3N3b3JkKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUEFTU1dPUkQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGRhdGEgc291cmNlCiAgICAgICoKLSAgICAgKiBAcGFyYW0JY2xhc3NOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgY2xhc3NOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRDbGFzc05hbWUoU3RyaW5nIGNsYXNzTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5DTEFTU05BTUUsIGNsYXNzTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgZGF0YSBzb3VyY2UKICAgICAgKgotICAgICAqIEByZXR1cm4JY2xhc3NOYW1lCisgICAgICogQHJldHVybiAgICBjbGFzc05hbWUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldENsYXNzTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNMQVNTTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgZGF0YSBzb3VyY2UKICAgICAgKgotICAgICAqIEBwYXJhbQljbGFzc05hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBjbGFzc05hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGNsYXNzTmFtZShTdHJpbmcgY2xhc3NOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNMQVNTTkFNRSwgY2xhc3NOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBkYXRhIHNvdXJjZQogICAgICAqCi0gICAgICogQHJldHVybgljbGFzc05hbWUKKyAgICAgKiBAcmV0dXJuICAgIGNsYXNzTmFtZQogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Y2xhc3NOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ0xBU1NOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIGlmIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiBpcyByZXF1aXJlZCBvciBub3QKICAgICAgKgotICAgICAqIEBwYXJhbQljb25WbGRSZXEJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBjb25WbGRSZXEgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldENvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQoU3RyaW5nIGNvblZsZFJlcSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5DT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVELCBjb25WbGRSZXEpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgaWYgY29ubmVjdGlvbiB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkIG9yIG5vdAogICAgICAqCi0gICAgICogQHJldHVybgljb25uZWN0aW9uIHZhbGlkYXRpb24gcmVxdWlyZW1lbnQKKyAgICAgKiBAcmV0dXJuICAgIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiByZXF1aXJlbWVudAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgaWYgY29ubmVjdGlvbiB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkIG9yIG5vdAogICAgICAqCi0gICAgICogQHBhcmFtCWNvblZsZFJlcQk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGNvblZsZFJlcSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Y29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZChTdHJpbmcgY29uVmxkUmVxKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQsIGNvblZsZFJlcSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBpZiBjb25uZWN0aW9uIHZhbGlkYXRpb24gaXMgcmVxdWlyZWQgb3Igbm90CiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWNvbm5lY3Rpb24gdmFsaWRhdGlvbiByZXF1aXJlbWVudAorICAgICAqIEByZXR1cm4gICAgY29ubmVjdGlvbiB2YWxpZGF0aW9uIHJlcXVpcmVtZW50CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRjb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ09OTkVDVElPTlZBTElEQVRJT05SRVFVSVJFRCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdmFsaWRhdGlvbiBtZXRob2QgcmVxdWlyZWQKICAgICAgKgotICAgICAqIEBwYXJhbQl2YWxpZGF0aW9uTWV0aG9kCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdmFsaWRhdGlvbk1ldGhvZCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0VmFsaWRhdGlvbk1ldGhvZChTdHJpbmcgdmFsaWRhdGlvbk1ldGhvZCkgewogICAgICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTk1FVEhPRCwgdmFsaWRhdGlvbk1ldGhvZCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgY29ubmVjdGlvbiB2YWxpZGF0aW9uIG1ldGhvZCB0eXBlCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXZhbGlkYXRpb24gbWV0aG9kCisgICAgICogQHJldHVybiAgICB2YWxpZGF0aW9uIG1ldGhvZAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VmFsaWRhdGlvbk1ldGhvZCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05NRVRIT0QpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHZhbGlkYXRpb24gbWV0aG9kIHJlcXVpcmVkCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdmFsaWRhdGlvbk1ldGhvZAk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHZhbGlkYXRpb25NZXRob2QgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHZhbGlkYXRpb25NZXRob2QoU3RyaW5nIHZhbGlkYXRpb25NZXRob2QpIHsKICAgICAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05NRVRIT0QsIHZhbGlkYXRpb25NZXRob2QpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiBtZXRob2QgdHlwZQogICAgICAqCi0gICAgICogQHJldHVybgl2YWxpZGF0aW9uIG1ldGhvZAorICAgICAqIEByZXR1cm4gICAgdmFsaWRhdGlvbiBtZXRob2QKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHZhbGlkYXRpb25NZXRob2QoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OTUVUSE9EKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB0YWJsZSBjaGVja2VkIGZvciBkdXJpbmcgdmFsaWRhdGlvbgogICAgICAqCi0gICAgICogQHBhcmFtCXRhYmxlCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdGFibGUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFZhbGlkYXRpb25UYWJsZU5hbWUoU3RyaW5nIHRhYmxlKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05UQUJMRU5BTUUsIHRhYmxlKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSB0YWJsZSBjaGVja2VkIGZvciBkdXJpbmcgdmFsaWRhdGlvbgogICAgICAqCi0gICAgICogQHJldHVybgl0YWJsZQorICAgICAqIEByZXR1cm4gICAgdGFibGUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFZhbGlkYXRpb25UYWJsZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OVEFCTEVOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB0YWJsZSBjaGVja2VkIGZvciBkdXJpbmcgdmFsaWRhdGlvbgogICAgICAqCi0gICAgICogQHBhcmFtCXRhYmxlCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdGFibGUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHZhbGlkYXRpb25UYWJsZU5hbWUoU3RyaW5nIHRhYmxlKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05UQUJMRU5BTUUsIHRhYmxlKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSB0YWJsZSBjaGVja2VkIGZvciBkdXJpbmcgdmFsaWRhdGlvbgogICAgICAqCi0gICAgICogQHJldHVybgl0YWJsZQorICAgICAqIEByZXR1cm4gICAgdGFibGUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHZhbGlkYXRpb25UYWJsZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OVEFCTEVOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKgotICAgICAqIEBwYXJhbQl0cm5Jc29sYXRpb24JPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB0cm5Jc29sYXRpb24gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKFN0cmluZyB0cm5Jc29sYXRpb24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04sIHRybklzb2xhdGlvbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAorICAgICAqIEByZXR1cm4gICAgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKgotICAgICAqIEBwYXJhbQl0cm5Jc29sYXRpb24JPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB0cm5Jc29sYXRpb24gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHRyYW5zYWN0aW9uSXNvbGF0aW9uKFN0cmluZyB0cm5Jc29sYXRpb24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04sIHRybklzb2xhdGlvbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAorICAgICAqIEByZXR1cm4gICAgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXR0cmFuc2FjdGlvbklzb2xhdGlvbigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIGlmIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwgaXMgdG8gYmUgZ3VhcmFudGVlZAogICAgICAqCi0gICAgICogQHBhcmFtCWd1YXJhbnRlZUlzb2xhdGlvbgk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGd1YXJhbnRlZUlzb2xhdGlvbiAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0R3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwoU3RyaW5nIGd1YXJhbnRlZUlzb2xhdGlvbikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5HVUFSQU5URUVJU09MQVRJT05MRVZFTCwgZ3VhcmFudGVlSXNvbGF0aW9uKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKgotICAgICAqIEByZXR1cm4JaXNvbGF0aW9uIGxldmVsIGd1YXJhbnRlZQorICAgICAqIEByZXR1cm4gICAgaXNvbGF0aW9uIGxldmVsIGd1YXJhbnRlZQogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0R3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5HVUFSQU5URUVJU09MQVRJT05MRVZFTCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyBpZiB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsIGlzIHRvIGJlIGd1YXJhbnRlZWQKICAgICAgKgotICAgICAqIEBwYXJhbQlndWFyYW50ZWVJc29sYXRpb24JPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBndWFyYW50ZWVJc29sYXRpb24gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsKFN0cmluZyBndWFyYW50ZWVJc29sYXRpb24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwsIGd1YXJhbnRlZUlzb2xhdGlvbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWlzb2xhdGlvbiBsZXZlbCBndWFyYW50ZWUKKyAgICAgKiBAcmV0dXJuICAgIGlzb2xhdGlvbiBsZXZlbCBndWFyYW50ZWUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvUmVzb3VyY2VBZGFwdGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9SZXNvdXJjZUFkYXB0ZXIuamF2YQppbmRleCA1NTViZTc3Li5lYTU0MDc2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9SZXNvdXJjZUFkYXB0ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9SZXNvdXJjZUFkYXB0ZXIuamF2YQpAQCAtMjYsOCArMjYsOCBAQAogLyoqCiAgKiA8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDgvMDUKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA4LzA1CisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiBwdWJsaWMgY2xhc3MgUmVzb3VyY2VBZGFwdGVyIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuUmVzb3VyY2VBZGFwdGVyIHsKIApAQCAtMzcsNTIgKzM3LDUyIEBACiAgICAgICogRW1wdHkgbWV0aG9kIGltcGxlbWVudGF0aW9uIGZvciBlbmRwb2ludEFjdGl2YXRpb24KICAgICAgKiB3aGljaCBqdXN0IHRocm93cyA8Y29kZT5Ob3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+CiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWVmCTxjb2RlPk1lc3NhZ2VFbmRwb2ludEZhY3Rvcnk8L2NvZGU+Ci0gICAgICogQHBhcmFtCWFzCTxjb2RlPkFjdGl2YXRpb25TcGVjPC9jb2RlPgotICAgICAqIEB0aHJvd3MJPGNvZGU+Tm90U3VwcG9ydGVkRXhjZXB0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBtZWYgICAgPGNvZGU+TWVzc2FnZUVuZHBvaW50RmFjdG9yeTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgYXMgICAgPGNvZGU+QWN0aXZhdGlvblNwZWM8L2NvZGU+CisgICAgICogQHRocm93cyAgICA8Y29kZT5Ob3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZW5kcG9pbnRBY3RpdmF0aW9uKE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgbWVmLCBBY3RpdmF0aW9uU3BlYyBhcykgdGhyb3dzIE5vdFN1cHBvcnRlZEV4Y2VwdGlvbiB7CiAgICAgICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIlRoaXMgbWV0aG9kIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgSkRCQyBjb25uZWN0b3IiKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBFbXB0eSBtZXRob2QgaW1wbGVtZW50YXRpb24gZm9yIGVuZHBvaW50RGVhY3RpdmF0aW9uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWVmCTxjb2RlPk1lc3NhZ2VFbmRwb2ludEZhY3Rvcnk8L2NvZGU+Ci0gICAgICogQHBhcmFtCWFzCTxjb2RlPkFjdGl2YXRpb25TcGVjPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBtZWYgICAgPGNvZGU+TWVzc2FnZUVuZHBvaW50RmFjdG9yeTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgYXMgICAgPGNvZGU+QWN0aXZhdGlvblNwZWM8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZW5kcG9pbnREZWFjdGl2YXRpb24oTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBtZWYsIEFjdGl2YXRpb25TcGVjIGFzKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogRW1wdHkgbWV0aG9kIGltcGxlbWVudGF0aW9uIGZvciBnZXRYQVJlc291cmNlcwogICAgICAqIHdoaWNoIGp1c3QgdGhyb3dzIDxjb2RlPk5vdFN1cHBvcnRlZEV4Y2VwdGlvbjwvY29kZT4KICAgICAgKgotICAgICAqIEBwYXJhbQlzcGVjcwk8Y29kZT5BY3RpdmF0aW9uU3BlYzwvY29kZT4gYXJyYXkKLSAgICAgKiBAdGhyb3dzCTxjb2RlPk5vdFN1cHBvcnRlZEV4Y2VwdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgc3BlY3MgICAgPGNvZGU+QWN0aXZhdGlvblNwZWM8L2NvZGU+IGFycmF5CisgICAgICogQHRocm93cyAgICA8Y29kZT5Ob3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFhBUmVzb3VyY2VbXSBnZXRYQVJlc291cmNlcyhBY3RpdmF0aW9uU3BlY1tdIHNwZWNzKSB0aHJvd3MgTm90U3VwcG9ydGVkRXhjZXB0aW9uIHsKICAgICAgICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiVGhpcyBtZXRob2QgaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBKREJDIGNvbm5lY3RvciIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEVtcHR5IGltcGxlbWVudGF0aW9uIG9mIHN0YXJ0IG1ldGhvZAogICAgICAqCi0gICAgICogQHBhcmFtCWN0eAk8Y29kZT5Cb290c3RyYXBDb250ZXh0PC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBjdHggICAgPGNvZGU+Qm9vdHN0cmFwQ29udGV4dDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzdGFydChCb290c3RyYXBDb250ZXh0IGN0eCkgdGhyb3dzIFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXNvdXJjZSBBZGFwdGVyIGlzIHN0YXJ0aW5nIHdpdGggY29uZmlndXJhdGlvbiA6IiArIHJhUHJvcCk7CiAgICAgICAgIGlmIChyYVByb3AgPT0gbnVsbCB8fCAhcmFQcm9wLmVxdWFscygiVkFMSUQiKSkgewotCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VBZGFwdGVySW50ZXJuYWxFeGNlcHRpb24oIlJlc291cmNlIGFkYXB0ZXIgY2Fubm90IHN0YXJ0LiBJdCBpcyBjb25maWd1cmVkIGFzIDogIiArIHJhUHJvcCk7Ci0JfSAKKyAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uKCJSZXNvdXJjZSBhZGFwdGVyIGNhbm5vdCBzdGFydC4gSXQgaXMgY29uZmlndXJlZCBhcyA6ICIgKyByYVByb3ApOwogICAgIH0KLSAgICAKKyAgICB9CisKICAgICAvKioKICAgICAgKiBFbXB0eSBpbXBsZW1lbnRhdGlvbiBvZiBzdG9wIG1ldGhvZAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHN0b3AoKSB7Ci0gICAgCisKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRSQVByb3BlcnR5KFN0cmluZyBzKSB7CkBAIC05Miw1ICs5Miw1IEBACiAgICAgcHVibGljIFN0cmluZyBnZXRSQVByb3BlcnR5KCkgewogICAgICAgICByZXR1cm4gcmFQcm9wOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvYnVpbGQueG1sCmluZGV4IDVlMTRkNDQuLmZmMGYwMmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9idWlsZC54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPHByb2plY3QgbmFtZT0iamRiY19jb25uZWN0b3IiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9IiBkZWZhdWx0PSJidWlsZCI+CiAgIDxwcm9wZXJ0eSBuYW1lPSJwa2cuZGlyIiB2YWx1ZT0iY29tL3N1bi9namMvc3BpIi8+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iPgogICAgIDxhbnQgYW50ZmlsZT0iYnVpbGQueG1sIiBkaXI9IiR7Z2pjLmhvbWV9L2JpbiIgdGFyZ2V0PSJjbGVhbiIvPgogICA8L3RhcmdldD4KQEAgLTI5LDU1ICsyOSw1NSBAQAogICA8L3RhcmdldD4KIAogICA8dGFyZ2V0IG5hbWU9InBhY2thZ2UxNCI+Ci0gICAgCQotICAgIAk8bWtkaXIgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiLz4KLSAgICAJCi0JPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvamRiYy5qYXIiIGJhc2VkaXI9IiR7Y2xhc3MuZGlyfSIKKworICAgICAgICA8bWtkaXIgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiLz4KKworICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L2pkYmMuamFyIiBiYXNlZGlyPSIke2NsYXNzLmRpcn0iCiAgICAgICAgIGluY2x1ZGVzPSIke3BrZy5kaXJ9LyoqLyosIGNvbS9zdW4vZ2pjL3V0aWwvKiovKiwgY29tL3N1bi9namMvY29tbW9uLyoqLyoiIGV4Y2x1ZGVzPSJjb20vc3VuL2dqYy9jY2kvKiovKixjb20vc3VuL2dqYy9zcGkvMS40LyoqLyoiLz4KLSAgICAgICAgCisKICAgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19jcC5yYXIiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIgaW5jbHVkZXM9ImpkYmMuamFyIi8+Ci0gICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLWNwLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CQorICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS1jcC54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgogICAgICAgICA8L2NvcHk+Ci0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19jcC5yYXIiIHVwZGF0ZT0ieWVzIj4KLSAgIAkJPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgotICAgCQkJPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+Ci0gICAJCTwvbWV0YWluZj4KLSAgIAk8L2phcj4KLSAgIAkKLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX3hhLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KLSAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEteGEueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4JCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19jcC5yYXIiIHVwZGF0ZT0ieWVzIj4KKyAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgorICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+CisgICAgICAgICAgIDwvbWV0YWluZj4KKyAgICAgICA8L2phcj4KKworICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19feGEucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgorICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS14YS54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgogICAgICAgICA8L2NvcHk+Ci0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX194YS5yYXIiIHVwZGF0ZT0ieWVzIj4KLSAgIAkJPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgotICAgCQkJPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+Ci0gICAJCTwvbWV0YWluZj4KLSAgIAk8L2phcj4KLSAgIAkKLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RtLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KLSAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEtZG0ueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4JCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX194YS5yYXIiIHVwZGF0ZT0ieWVzIj4KKyAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgorICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+CisgICAgICAgICAgIDwvbWV0YWluZj4KKyAgICAgICA8L2phcj4KKworICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZG0ucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgorICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS1kbS54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgogICAgICAgICA8L2NvcHk+Ci0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kbS5yYXIiIHVwZGF0ZT0ieWVzIj4KLSAgIAkJPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgotICAgCQkJPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+Ci0gICAJCTwvbWV0YWluZj4KLSAgIAk8L2phcj4KLSAgIAkKLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RzLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KLSAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEtZHMueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4JCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kbS5yYXIiIHVwZGF0ZT0ieWVzIj4KKyAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgorICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+CisgICAgICAgICAgIDwvbWV0YWluZj4KKyAgICAgICA8L2phcj4KKworICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZHMucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgorICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS1kcy54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgogICAgICAgICA8L2NvcHk+Ci0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kcy5yYXIiIHVwZGF0ZT0ieWVzIj4KLSAgIAkJPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgotICAgCQkJPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+Ci0gICAJCTwvbWV0YWluZj4KLSAgIAk8L2phcj4KLSAgIAkKLSAgIAk8ZGVsZXRlIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9jb20iLz4KLSAgIAk8ZGVsZXRlIGZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9qZGJjLmphciIvPgotICAgCTxkZWxldGUgZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIvPgotICAgCQorICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZHMucmFyIiB1cGRhdGU9InllcyI+CisgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KKyAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgorICAgICAgICAgICA8L21ldGFpbmY+CisgICAgICAgPC9qYXI+CisKKyAgICAgICA8ZGVsZXRlIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9jb20iLz4KKyAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9qZGJjLmphciIvPgorICAgICAgIDxkZWxldGUgZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIvPgorCiAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQxNCIgZGVwZW5kcz0iY29tcGlsZTE0LCBwYWNrYWdlMTQiLz4KICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkMTMiLz4KLQk8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJidWlsZDE0LCBidWlsZDEzIi8+CisgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iYnVpbGQxNCwgYnVpbGQxMyIvPgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvcmEtZHMueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvcmEtZHMueG1sCmluZGV4IDYwZTFlNGUuLjY1ZThmYjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L3JhLWRzLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9yYS1kcy54bWwKQEAgLTIyLDY5ICsyMiw2OSBAQAogICAgICAgICAgICB2ZXJzaW9uPSIxLjUiPgogCiAgICAgPCEtLSBUaGVyZSBjYW4gYmUgYW55IG51bWJlciBvZiAiZGVzY3JpcHRpb24iIGVsZW1lbnRzIGluY2x1ZGluZyAwIC0tPgotICAgIDwhLS0gVGhpcyBmaWVsZCBjYW4gYmUgb3B0aW9uYWxseSB1c2VkIGJ5IHRoZSBkcml2ZXIgdmVuZG9yIHRvIHByb3ZpZGUgYSAKKyAgICA8IS0tIFRoaXMgZmllbGQgY2FuIGJlIG9wdGlvbmFsbHkgdXNlZCBieSB0aGUgZHJpdmVyIHZlbmRvciB0byBwcm92aWRlIGEKICAgICAgICAgIGRlc2NyaXB0aW9uIGZvciB0aGUgcmVzb3VyY2UgYWRhcHRlci4KICAgICAtLT4KICAgICA8ZGVzY3JpcHRpb24+UmVzb3VyY2UgYWRhcHRlciB3cmFwcGluZyBEYXRhc291cmNlIGltcGxlbWVudGF0aW9uIG9mIGRyaXZlcjwvZGVzY3JpcHRpb24+Ci0gICAgCisKICAgICA8IS0tIFRoZXJlIGNhbiBiZSBhbnkgbnVtYmVyIG9mICJkaXNwbGF5LW5hbWUiIGVsZW1lbnRzIGluY2x1ZGluZyAwIC0tPgotICAgIDwhLS0gVGhlIGZpZWxkIGNhbiBiZSBvcHRpb25hbGx5IHVzZWQgYnkgdGhlIGRyaXZlciB2ZW5kb3IgdG8gcHJvdmlkZSBhIG5hbWUgdGhhdCAKKyAgICA8IS0tIFRoZSBmaWVsZCBjYW4gYmUgb3B0aW9uYWxseSB1c2VkIGJ5IHRoZSBkcml2ZXIgdmVuZG9yIHRvIHByb3ZpZGUgYSBuYW1lIHRoYXQKICAgICAgICAgIGlzIGludGVuZGVkIHRvIGJlIGRpc3BsYXllZCBieSB0b29scy4KICAgICAtLT4KICAgICA8ZGlzcGxheS1uYW1lPkRhdGFTb3VyY2UgUmVzb3VyY2UgQWRhcHRlcjwvZGlzcGxheS1uYW1lPgotICAgIAorCiAgICAgPCEtLSBUaGVyZSBjYW4gYmUgYW55IG51bWJlciBvZiAiaWNvbiIgZWxlbWVudHMgaW5jbHVkaW5nIDAgLS0+CiAgICAgPCEtLSBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUuCiAgICAgICAgIDxpY29uPgotICAgICAgICAgICAgVGhpcyAic21hbGwtaWNvbiIgZWxlbWVudCBjYW4gb2NjdXIgYXRtb3N0IG9uY2UuIFRoaXMgc2hvdWxkIHNwZWNpZnkgdGhlIAotICAgICAgICAgICAgYWJzb2x1dGUgb3IgdGhlIHJlbGF0aXZlIHBhdGggbmFtZSBvZiBhIGZpbGUgY29udGFpbmluZyBhIHNtYWxsICgxNiB4IDE2KSAKKyAgICAgICAgICAgIFRoaXMgInNtYWxsLWljb24iIGVsZW1lbnQgY2FuIG9jY3VyIGF0bW9zdCBvbmNlLiBUaGlzIHNob3VsZCBzcGVjaWZ5IHRoZQorICAgICAgICAgICAgYWJzb2x1dGUgb3IgdGhlIHJlbGF0aXZlIHBhdGggbmFtZSBvZiBhIGZpbGUgY29udGFpbmluZyBhIHNtYWxsICgxNiB4IDE2KQogICAgICAgICAgICAgaWNvbiAtIEpQRUcgb3IgR0lGIGltYWdlLiBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUuCiAgICAgICAgICAgICA8c21hbGwtaWNvbj5zbWFsbGljb24uanBnPC9zbWFsbC1pY29uPgotICAgICAgICAKLSAgICAgICAgICAgIFRoaXMgImxhcmdlLWljb24iIGVsZW1lbnQgY2FuIG9jY3VyIGF0bW9zdCBvbmNlLiBUaGlzIHNob3VsZCBzcGVjaWZ5IHRoZSAKLSAgICAgICAgICAgIGFic29sdXRlIG9yIHRoZSByZWxhdGl2ZSBwYXRoIG5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcgYSBzbWFsbCAoMzIgeCAzMikgCisKKyAgICAgICAgICAgIFRoaXMgImxhcmdlLWljb24iIGVsZW1lbnQgY2FuIG9jY3VyIGF0bW9zdCBvbmNlLiBUaGlzIHNob3VsZCBzcGVjaWZ5IHRoZQorICAgICAgICAgICAgYWJzb2x1dGUgb3IgdGhlIHJlbGF0aXZlIHBhdGggbmFtZSBvZiBhIGZpbGUgY29udGFpbmluZyBhIHNtYWxsICgzMiB4IDMyKQogICAgICAgICAgICAgaWNvbiAtIEpQRUcgb3IgR0lGIGltYWdlLiBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUuCi0gICAgICAgICAgICA8bGFyZ2UtaWNvbj5sYXJnZWljb24uanBnPC9sYXJnZS1pY29uPiAgIAorICAgICAgICAgICAgPGxhcmdlLWljb24+bGFyZ2VpY29uLmpwZzwvbGFyZ2UtaWNvbj4KICAgICAgICAgPC9pY29uPgogICAgIC0tPgogICAgIDxpY29uPgogICAgICAgICA8c21hbGwtaWNvbj48L3NtYWxsLWljb24+Ci0gICAgICAgIDxsYXJnZS1pY29uPjwvbGFyZ2UtaWNvbj4gICAKKyAgICAgICAgPGxhcmdlLWljb24+PC9sYXJnZS1pY29uPgogICAgIDwvaWNvbj4KLSAgICAKKwogICAgIDwhLS0gVGhlICJ2ZW5kb3ItbmFtZSIgZWxlbWVudCBzaG91bGQgb2NjdXIgZXhhY3RseSBvbmNlLiAtLT4KICAgICA8IS0tIFRoaXMgc2hvdWxkIHNwZWNpZnkgdGhlIG5hbWUgb2YgdGhlIGRyaXZlciB2ZW5kb3IuIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZS4KICAgICAgICAgPHZlbmRvci1uYW1lPlhZWiBJTkMuPC92ZW5kb3ItbmFtZT4KICAgICAtLT4KICAgICA8dmVuZG9yLW5hbWU+U3VuIE1pY3Jvc3lzdGVtczwvdmVuZG9yLW5hbWU+Ci0gICAgCisKICAgICA8IS0tIFRoZSAiZWlzLXR5cGUiIGVsZW1lbnQgc2hvdWxkIG9jY3VyIGV4YWN0bHkgb25jZS4gLS0+Ci0gICAgPCEtLSBUaGlzIHNob3VsZCBzcGVjaWZ5IHRoZSBkYXRhYmFzZSwgZm9yIGV4YW1wbGUgdGhlIHByb2R1Y3QgbmFtZSBvZiAKKyAgICA8IS0tIFRoaXMgc2hvdWxkIHNwZWNpZnkgdGhlIGRhdGFiYXNlLCBmb3IgZXhhbXBsZSB0aGUgcHJvZHVjdCBuYW1lIG9mCiAgICAgICAgICB0aGUgZGF0YWJhc2UgaW5kZXBlbmRlbnQgb2YgYW55IHZlcnNpb24gaW5mb3JtYXRpb24uIFRoZSBmb2xsb3dpbmcKICAgICAgICAgIGlzIGFuIGV4YW1wbGUuCiAgICAgICAgIDxlaXMtdHlwZT5YWVo8L2Vpcy10eXBlPgogICAgIC0tPgogICAgIDxlaXMtdHlwZT5EYXRhYmFzZTwvZWlzLXR5cGU+Ci0gICAgCisKICAgICA8IS0tIFRoZSAicmVzb3VyY2VhZGFwdGVyLXZlcnNpb24iIGVsZW1lbnQgc2hvdWxkIG9jY3VyIGV4YWN0bHkgb25jZS4gLS0+Ci0gICAgPCEtLSBUaGlzIHNwZWNpZmllcyBhIHN0cmluZyBiYXNlZCB2ZXJzaW9uIG9mIHRoZSByZXNvdXJjZSBhZGFwdGVyIGZyb20gCisgICAgPCEtLSBUaGlzIHNwZWNpZmllcyBhIHN0cmluZyBiYXNlZCB2ZXJzaW9uIG9mIHRoZSByZXNvdXJjZSBhZGFwdGVyIGZyb20KICAgICAgICAgIHRoZSBkcml2ZXIgdmVuZG9yLiBUaGUgZGVmYXVsdCBpcyBiZWluZyBzZXQgYXMgMS4wLiBUaGUgZHJpdmVyCiAgICAgICAgICB2ZW5kb3IgY2FuIGNoYW5nZSBpdCBhcyByZXF1aXJlZC4KICAgICAtLT4KICAgICA8cmVzb3VyY2VhZGFwdGVyLXZlcnNpb24+MS4wPC9yZXNvdXJjZWFkYXB0ZXItdmVyc2lvbj4KLSAgICAKKwogICAgIDwhLS0gVGhpcyAibGljZW5zZSIgZWxlbWVudCBjYW4gb2NjdXIgYXRtb3N0IG9uY2UgLS0+CiAgICAgPCEtLSBUaGlzIHNwZWNpZmllcyBsaWNlbnNpbmcgcmVxdWlyZW1lbnRzIGZvciB0aGUgcmVzb3VyY2UgYWRhcHRlciBtb2R1bGUuCiAgICAgICAgICBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUuCiAgICAgICAgIDxsaWNlbnNlPgogICAgICAgICAgICAgVGhlcmUgY2FuIGJlIGFueSBudW1iZXIgb2YgImRlc2NyaXB0aW9uIiBlbGVtZW50cyBpbmNsdWRpbmcgMC4KICAgICAgICAgICAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICAgICAgICAgICBUaGlzIGZpZWxkIGNhbiBiZSBvcHRpb25hbGx5IHVzZWQgYnkgdGhlIGRyaXZlciB2ZW5kb3IgdG8gCi0gICAgICAgICAgICAgICAgcHJvdmlkZSBhIGRlc2NyaXB0aW9uIGZvciB0aGUgbGljZW5zaW5nIHJlcXVpcmVtZW50cyBvZiB0aGUgCi0gICAgICAgICAgICAgICAgcmVzb3VyY2UgYWRhcHRlciBsaWtlIGR1cmF0aW9uIG9mIGxpY2Vuc2UsIG51bWJlcm9mIGNvbm5lY3Rpb24gCisgICAgICAgICAgICAgICAgVGhpcyBmaWVsZCBjYW4gYmUgb3B0aW9uYWxseSB1c2VkIGJ5IHRoZSBkcml2ZXIgdmVuZG9yIHRvCisgICAgICAgICAgICAgICAgcHJvdmlkZSBhIGRlc2NyaXB0aW9uIGZvciB0aGUgbGljZW5zaW5nIHJlcXVpcmVtZW50cyBvZiB0aGUKKyAgICAgICAgICAgICAgICByZXNvdXJjZSBhZGFwdGVyIGxpa2UgZHVyYXRpb24gb2YgbGljZW5zZSwgbnVtYmVyb2YgY29ubmVjdGlvbgogICAgICAgICAgICAgICAgIHJlc3RyaWN0aW9ucy4KICAgICAgICAgICAgIDwvZGVzY3JpcHRpb24+Ci0gICAgICAgIAorCiAgICAgICAgICAgICBUaGlzIHNwZWNpZmllcyB3aGV0aGVyIGEgbGljZW5zZSBpcyByZXF1aXJlZCB0byBkZXBsb3kgYW5kIHVzZSB0aGUgcmVzb3VyY2UgYWRhcHRlci4KICAgICAgICAgICAgIERlZmF1bHQgaXMgZmFsc2UuCiAgICAgICAgICAgICA8bGljZW5zZS1yZXF1aXJlZD5mYWxzZTwvbGljZW5zZS1yZXF1aXJlZD4KQEAgLTkzLDI0ICs5MywyNCBAQAogICAgIDxsaWNlbnNlPgogICAgICAgICA8bGljZW5zZS1yZXF1aXJlZD5mYWxzZTwvbGljZW5zZS1yZXF1aXJlZD4KICAgICA8L2xpY2Vuc2U+Ci0gICAgCisKICAgICA8cmVzb3VyY2VhZGFwdGVyPgotICAgICAgICAKLSAgICAgICAgPCEtLSAKLSAgICAgICAgICAgIFRoZSAiY29uZmlnLXByb3BlcnR5IiBlbGVtZW50cyBjYW4gaGF2ZSB6ZXJvIG9yIG1vcmUgImRlc2NyaXB0aW9uIiAKKworICAgICAgICA8IS0tCisgICAgICAgICAgICBUaGUgImNvbmZpZy1wcm9wZXJ0eSIgZWxlbWVudHMgY2FuIGhhdmUgemVybyBvciBtb3JlICJkZXNjcmlwdGlvbiIKICAgICAgICAgICAgIGVsZW1lbnRzLiBUaGUgImRlc2NyaXB0aW9uIiBlbGVtZW50cyBhcmUgbm90IGJlaW5nIGluY2x1ZGVkCiAgICAgICAgICAgICBpbiB0aGUgImNvbmZpZy1wcm9wZXJ0eSIgZWxlbWVudHMgYmVsb3cuIFRoZSBkcml2ZXIgdmVuZG9yIGNhbgogICAgICAgICAgICAgYWRkIHRoZW0gYXMgcmVxdWlyZWQuCiAgICAgICAgIC0tPgotICAgICAgICAKKwogICAgICAgICA8cmVzb3VyY2VhZGFwdGVyLWNsYXNzPmNvbS5zdW4uamRiY3JhLnNwaS5SZXNvdXJjZUFkYXB0ZXI8L3Jlc291cmNlYWRhcHRlci1jbGFzcz4KLSAgICAgICAgCisKICAgICAgICAgPG91dGJvdW5kLXJlc291cmNlYWRhcHRlcj4KLSAgICAgICAgCisKICAgICAgICAgICAgIDxjb25uZWN0aW9uLWRlZmluaXRpb24+Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICA8bWFuYWdlZGNvbm5lY3Rpb25mYWN0b3J5LWNsYXNzPmNvbS5zdW4uamRiY3JhLnNwaS5EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvbWFuYWdlZGNvbm5lY3Rpb25mYWN0b3J5LWNsYXNzPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPCEtLSBUaGVyZSBjYW4gYmUgYW55IG51bWJlciBvZiB0aGVzZSBlbGVtZW50cyBpbmNsdWRpbmcgMCAtLT4KICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+U2VydmVyTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CkBAIC0xMjIsMTM2ICsxMjIsMTM2IEBACiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT45MDkyPC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4gICAgCisgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlVzZXI8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+REJVU0VSPC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4gICAgCisgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlBhc3N3b3JkPC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPkRCUEFTU1dPUkQ8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+RGF0YWJhc2VOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPmpkYmM6cG9pbnRiYXNlOnNlcnZlcjovL2xvY2FsaG9zdDo5MDkyL3NxZS1zYW1wbGVzLG5ldzwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5EYXRhU291cmNlTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+RGVzY3JpcHRpb248L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+T3JhY2xlIHRoaW4gZHJpdmVyIERhdGFzb3VyY2U8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4gICAgCisgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPk5ldHdvcmtQcm90b2NvbDwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+Um9sZU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4gICAgCisgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkxvZ2luVGltZU91dDwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT4wPC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4gICAgCisgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkRyaXZlclByb3BlcnRpZXM8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4gICAgCisgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkRlbGltaXRlcjwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT4jPC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4gICAgCisgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkNsYXNzTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT5jb20ucG9pbnRiYXNlLmpkYmMuamRiY0RhdGFTb3VyY2U8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgIAkJPGNvbmZpZy1wcm9wZXJ0eT4gICAgCi0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktbmFtZT5Db25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkPC9jb25maWctcHJvcGVydHktbmFtZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPmZhbHNlPC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0gICAgICAgIAk8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgCTxjb25maWctcHJvcGVydHk+ICAgIAotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VmFsaWRhdGlvbk1ldGhvZDwvY29uZmlnLXByb3BlcnR5LW5hbWU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLSAgICAgICAgCTwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAJPGNvbmZpZy1wcm9wZXJ0eT4gICAgCi0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktbmFtZT5WYWxpZGF0aW9uVGFibGVOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotICAgICAgICAJPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgIAk8Y29uZmlnLXByb3BlcnR5PiAgICAKLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlRyYW5zYWN0aW9uSXNvbGF0aW9uPC9jb25maWctcHJvcGVydHktbmFtZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotICAgICAgICAJPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgIAk8Y29uZmlnLXByb3BlcnR5PiAgICAKLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkd1YXJhbnRlZUlzb2xhdGlvbkxldmVsPC9jb25maWctcHJvcGVydHktbmFtZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotICAgICAgICAJPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5Db25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPmZhbHNlPC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5WYWxpZGF0aW9uTWV0aG9kPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VmFsaWRhdGlvblRhYmxlTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlRyYW5zYWN0aW9uSXNvbGF0aW9uPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+R3VhcmFudGVlSXNvbGF0aW9uTGV2ZWw8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKwogICAgICAgICAgICAgICAgIDxjb25uZWN0aW9uZmFjdG9yeS1pbnRlcmZhY2U+amF2YXguc3FsLkRhdGFTb3VyY2U8L2Nvbm5lY3Rpb25mYWN0b3J5LWludGVyZmFjZT4KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIDxjb25uZWN0aW9uZmFjdG9yeS1pbXBsLWNsYXNzPmNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlPC9jb25uZWN0aW9uZmFjdG9yeS1pbXBsLWNsYXNzPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPGNvbm5lY3Rpb24taW50ZXJmYWNlPmphdmEuc3FsLkNvbm5lY3Rpb248L2Nvbm5lY3Rpb24taW50ZXJmYWNlPgotICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIDxjb25uZWN0aW9uLWltcGwtY2xhc3M+Y29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25Ib2xkZXI8L2Nvbm5lY3Rpb24taW1wbC1jbGFzcz4KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgPC9jb25uZWN0aW9uLWRlZmluaXRpb24+Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgPHRyYW5zYWN0aW9uLXN1cHBvcnQ+TG9jYWxUcmFuc2FjdGlvbjwvdHJhbnNhY3Rpb24tc3VwcG9ydD4KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICA8YXV0aGVudGljYXRpb24tbWVjaGFuaXNtPgogICAgICAgICAgICAgICAgIDwhLS0gVGhlcmUgY2FuIGJlIGFueSBudW1iZXIgb2YgImRlc2NyaXB0aW9uIiBlbGVtZW50cyBpbmNsdWRpbmcgMCAtLT4KICAgICAgICAgICAgICAgICA8IS0tIE5vdCBpbmNsdWRpbmcgdGhlICJkZXNjcmlwdGlvbiIgZWxlbWVudCAtLT4KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIDxhdXRoZW50aWNhdGlvbi1tZWNoYW5pc20tdHlwZT5CYXNpY1Bhc3N3b3JkPC9hdXRoZW50aWNhdGlvbi1tZWNoYW5pc20tdHlwZT4KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIDxjcmVkZW50aWFsLWludGVyZmFjZT5qYXZheC5yZXNvdXJjZS5zcGkuc2VjdXJpdHkuUGFzc3dvcmRDcmVkZW50aWFsPC9jcmVkZW50aWFsLWludGVyZmFjZT4KICAgICAgICAgICAgIDwvYXV0aGVudGljYXRpb24tbWVjaGFuaXNtPgotICAgICAgICAgICAgCisKICAgICAgICAgICAgIDxyZWF1dGhlbnRpY2F0aW9uLXN1cHBvcnQ+ZmFsc2U8L3JlYXV0aGVudGljYXRpb24tc3VwcG9ydD4KLSAgICAgICAgICAgIAorCiAgICAgICAgIDwvb3V0Ym91bmQtcmVzb3VyY2VhZGFwdGVyPgotCTxhZG1pbm9iamVjdD4KLQkgICAgICAgPGFkbWlub2JqZWN0LWludGVyZmFjZT5jb20uc3VuLmpkYmNyYS5zcGkuSmRiY1NldHVwQWRtaW48L2FkbWlub2JqZWN0LWludGVyZmFjZT4KLQkgICAgICAgPGFkbWlub2JqZWN0LWNsYXNzPmNvbS5zdW4uamRiY3JhLnNwaS5KZGJjU2V0dXBBZG1pbkltcGw8L2FkbWlub2JqZWN0LWNsYXNzPgotCSAgICAgICA8Y29uZmlnLXByb3BlcnR5PgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlRhYmxlTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotCSAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLQkgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5TY2hlbWFOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0JICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotCSAgICAgICA8Y29uZmlnLXByb3BlcnR5PgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkpuZGlOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0JICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotCSAgICAgICA8Y29uZmlnLXByb3BlcnR5PgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPk5vT2ZSb3dzPC9jb25maWctcHJvcGVydHktbmFtZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuSW50ZWdlcjwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjA8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLQkgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgPGFkbWlub2JqZWN0PgorICAgICAgICAgICA8YWRtaW5vYmplY3QtaW50ZXJmYWNlPmNvbS5zdW4uamRiY3JhLnNwaS5KZGJjU2V0dXBBZG1pbjwvYWRtaW5vYmplY3QtaW50ZXJmYWNlPgorICAgICAgICAgICA8YWRtaW5vYmplY3QtY2xhc3M+Y29tLnN1bi5qZGJjcmEuc3BpLkpkYmNTZXR1cEFkbWluSW1wbDwvYWRtaW5vYmplY3QtY2xhc3M+CisgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VGFibGVOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlNjaGVtYU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+Sm5kaU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+Tm9PZlJvd3M8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5JbnRlZ2VyPC9jb25maWctcHJvcGVydHktdHlwZT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+MDwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgPC9hZG1pbm9iamVjdD4KLSAgICAgICAgCisKICAgICA8L3Jlc291cmNlYWRhcHRlcj4KLSAgICAKKwogPC9jb25uZWN0b3I+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25NYW5hZ2VyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25NYW5hZ2VyLmphdmEKaW5kZXggYjIxOWNkMi4uMTI0ODA5YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uTWFuYWdlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvbk1hbmFnZXIuamF2YQpAQCAtMjQsMjYgKzI0LDI2IEBACiAvKioKICAqIENvbm5lY3Rpb25NYW5hZ2VyIGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMzEKLSAqIEBhdXRob3IJQmlub2QgUC5HCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzMxCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRwogICovCi1wdWJsaWMgY2xhc3MgQ29ubmVjdGlvbk1hbmFnZXIgaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uTWFuYWdlcnsgCitwdWJsaWMgY2xhc3MgQ29ubmVjdGlvbk1hbmFnZXIgaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uTWFuYWdlcnsKIAogICAgIC8qKgogICAgICAqIFJldHVybnMgYSA8Y29kZT5Db25uZWN0aW9uIDwvY29kZT4gb2JqZWN0IHRvIHRoZSA8Y29kZT5Db25uZWN0aW9uRmFjdG9yeTwvY29kZT4KICAgICAgKgotICAgICAqIEBwYXJhbQltY2YJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHBhcmFtCWluZm8JPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHJldHVybglBIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IE9iamVjdC4KLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uIEluIGNhc2Ugb2YgYW4gZXJyb3IgaW4gZ2V0dGluZyB0aGUgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4uCisgICAgICogQHBhcmFtICAgIG1jZiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgaW5mbyAgICA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcmV0dXJuICAgIEEgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gT2JqZWN0LgorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gSW4gY2FzZSBvZiBhbiBlcnJvciBpbiBnZXR0aW5nIHRoZSA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPi4KICAgICAgKi8KICAgICBwdWJsaWMgT2JqZWN0IGFsbG9jYXRlQ29ubmVjdGlvbihNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmLAotICAgIAkJCQkgICAgIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbmZvKSAKLSAgICAJCQkJICAgICB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewotCU1hbmFnZWRDb25uZWN0aW9uIG1jID0gbWNmLmNyZWF0ZU1hbmFnZWRDb25uZWN0aW9uKG51bGwsIGluZm8pOwotCXJldHVybiBtYy5nZXRDb25uZWN0aW9uKG51bGwsIGluZm8pOyAgICAJCQkJICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW5mbykKKyAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24geworICAgIE1hbmFnZWRDb25uZWN0aW9uIG1jID0gbWNmLmNyZWF0ZU1hbmFnZWRDb25uZWN0aW9uKG51bGwsIGluZm8pOworICAgIHJldHVybiBtYy5nZXRDb25uZWN0aW9uKG51bGwsIGluZm8pOwogICAgIH0KLSAgICAKKwogICAgIC8qCiAgICAgICogVGhpcyBjbGFzcyBjb3VsZCBlZmZlY3RpdmVseSBpbXBsZW1lbnQgQ29ubmVjdGlvbiBwb29saW5nIGFsc28uCiAgICAgICogQ291bGQgYmUgZG9uZSBmb3IgRkNTLgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uUmVxdWVzdEluZm8uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvblJlcXVlc3RJbmZvLmphdmEKaW5kZXggMzljNzg3Ni4uYzQ3N2ZjMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uUmVxdWVzdEluZm8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25SZXF1ZXN0SW5mby5qYXZhCkBAIC0xOSwxMCArMTksMTAgQEAKIC8qKgogICogQ29ubmVjdGlvblJlcXVlc3RJbmZvIGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMzEKLSAqIEBhdXRob3IJQmlub2QgUC5HCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzMxCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRwogICovCi1wdWJsaWMgY2xhc3MgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZveyAKK3B1YmxpYyBjbGFzcyBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm97CiAKICAgICBwcml2YXRlIFN0cmluZyB1c2VyOwogICAgIHByaXZhdGUgU3RyaW5nIHBhc3N3b3JkOwpAQCAtMzAsOCArMzAsOCBAQAogICAgIC8qKgogICAgICAqIENvbnN0cnVjdHMgYSBuZXcgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBvYmplY3QKICAgICAgKgotICAgICAqIEBwYXJhbQl1c2VyCVVzZXIgTmFtZS4KLSAgICAgKiBAcGFyYW0JcGFzc3dvcmQJUGFzc3dvcmQKKyAgICAgKiBAcGFyYW0gICAgdXNlciAgICBVc2VyIE5hbWUuCisgICAgICogQHBhcmFtICAgIHBhc3N3b3JkICAgIFBhc3N3b3JkCiAgICAgICovCiAgICAgcHVibGljIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyhTdHJpbmcgdXNlciwgU3RyaW5nIHBhc3N3b3JkKSB7CiAgICAgICAgIHRoaXMudXNlciA9IHVzZXI7CkBAIC00MSw3ICs0MSw3IEBACiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSB1c2VyIG5hbWUgb2YgdGhlIENvbm5lY3Rpb25SZXF1ZXN0SW5mby4KICAgICAgKgotICAgICAqIEByZXR1cm4JVXNlciBuYW1lIG9mIENvbm5lY3Rpb25SZXF1ZXN0SW5mby4KKyAgICAgKiBAcmV0dXJuICAgIFVzZXIgbmFtZSBvZiBDb25uZWN0aW9uUmVxdWVzdEluZm8uCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRVc2VyKCkgewogICAgICAgICByZXR1cm4gdXNlcjsKQEAgLTUwLDcgKzUwLDcgQEAKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIHBhc3N3b3JkIG9mIHRoZSBDb25uZWN0aW9uUmVxdWVzdEluZm8uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVBhc3N3b3JkIG9mIENvbm5lY3Rpb25SZXF1ZXN0SW5mby4KKyAgICAgKiBAcmV0dXJuICAgIFBhc3N3b3JkIG9mIENvbm5lY3Rpb25SZXF1ZXN0SW5mby4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFBhc3N3b3JkKCkgewogICAgICAgICByZXR1cm4gcGFzc3dvcmQ7CkBAIC01OSw3ICs1OSw3IEBACiAgICAgLyoqCiAgICAgICogVmVyaWZ5IHdoZXRoZXIgdHdvIENvbm5lY3Rpb25SZXF1ZXN0SW5mb3MgYXJlIGVxdWFsLgogICAgICAqCi0gICAgICogQHJldHVybglUcnVlLCBpZiB0aGV5IGFyZSBlcXVhbCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLgorICAgICAqIEByZXR1cm4gICAgVHJ1ZSwgaWYgdGhleSBhcmUgZXF1YWwgYW5kIGZhbHNlIG90aGVyd2lzZS4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9iaikgewogICAgICAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBmYWxzZTsKQEAgLTc1LDE4ICs3NSwxOCBAQAogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgaGFzaGNvZGUgb2YgdGhlIG9iamVjdC4KICAgICAgKgotICAgICAqIEByZXR1cm4JaGFzaENvZGUuCisgICAgICogQHJldHVybiAgICBoYXNoQ29kZS4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewogICAgICAgICBTdHJpbmcgcmVzdWx0ID0gIiIgKyB1c2VyICsgcGFzc3dvcmQ7CiAgICAgICAgIHJldHVybiByZXN1bHQuaGFzaENvZGUoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb21wYXJlcyB0d28gb2JqZWN0cy4KICAgICAgKgotICAgICAqIEBwYXJhbQlvMQlGaXJzdCBvYmplY3QuCi0gICAgICogQHBhcmFtCW8yCVNlY29uZCBvYmplY3QuCisgICAgICogQHBhcmFtICAgIG8xICAgIEZpcnN0IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgbzIgICAgU2Vjb25kIG9iamVjdC4KICAgICAgKi8KICAgICBwcml2YXRlIGJvb2xlYW4gaXNFcXVhbChPYmplY3QgbzEsIE9iamVjdCBvMikgewogICAgICAgICBpZiAobzEgPT0gbnVsbCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCmluZGV4IDQxMWI3M2YuLmQ5ODc0YTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKQEAgLTMxLDM2ICszMSwzNiBAQAogLyoqCiAgKiBEYXRhIFNvdXJjZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMzAKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzMwCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiAKIHB1YmxpYyBjbGFzcyBEU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBleHRlbmRzIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSB7Ci0gICAKKwogICAgIHByaXZhdGUgdHJhbnNpZW50IGphdmF4LnNxbC5EYXRhU291cmNlIGRhdGFTb3VyY2VPYmo7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBMb2dnZXIgX2xvZ2dlcjsKICAgICBzdGF0aWMgewogICAgICAgICBfbG9nZ2VyID0gTG9nZ2VyLmdldEFub255bW91c0xvZ2dlcigpOwogICAgIH0KICAgICBwcml2YXRlIGJvb2xlYW4gZGVidWcgPSBmYWxzZTsKLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBuZXcgcGh5c2ljYWwgY29ubmVjdGlvbiB0byB0aGUgdW5kZXJseWluZyBFSVMgcmVzb3VyY2UKICAgICAgKiBtYW5hZ2VyLgotICAgICAqIAotICAgICAqIEBwYXJhbQlzdWJqZWN0CTxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICogQHBhcmFtCWN4UmVxdWVzdEluZm8JPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiB3aGljaCBtYXkgYmUgY3JlYXRlZAotICAgICAqICAgICAgIAkgICAgICAgICAgICAgCWFzIGEgcmVzdWx0IG9mIHRoZSBpbnZvY2F0aW9uIDxjb2RlPmdldENvbm5lY3Rpb24odXNlciwgcGFzc3dvcmQpPC9jb2RlPgotICAgICAqICAgICAgIAkgICAgICAgICAgICAgCW9uIHRoZSA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QKLSAgICAgKiBAcmV0dXJuCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QgY3JlYXRlZAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gaW5zdGFudGlhdGluZyB0aGUKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCTxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdCB1c2VkIGZvciB0aGUKLSAgICAgKiAgICAgICAJCQkJY3JlYXRpb24gb2YgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QKLSAgICAgKiBAdGhyb3dzCVNlY3VyaXR5RXhjZXB0aW9uCWlmIHRoZXJlIGlubyA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdAotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJc2F0aXNmeWluZyB0aGlzIHJlcXVlc3QgCi0gICAgICogQHRocm93cwlSZXNvdXJjZUFsbG9jYXRpb25FeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUgCi0gICAgICoJCQkJCQlwaHlzaWNhbCBjb25uZWN0aW9uCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3ViamVjdCAgICA8Y29kZT5TdWJqZWN0PC9jb2RlPiBpbnN0YW5jZSBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqIEBwYXJhbSAgICBjeFJlcXVlc3RJbmZvICAgIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gd2hpY2ggbWF5IGJlIGNyZWF0ZWQKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyBhIHJlc3VsdCBvZiB0aGUgaW52b2NhdGlvbiA8Y29kZT5nZXRDb25uZWN0aW9uKHVzZXIsIHBhc3N3b3JkKTwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiB0aGUgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0CisgICAgICogQHJldHVybiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGNyZWF0ZWQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGluc3RhbnRpYXRpbmcgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QgdXNlZCBmb3IgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgIGNyZWF0aW9uIG9mIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0CisgICAgICogQHRocm93cyAgICBTZWN1cml0eUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpbm8gPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdGlzZnlpbmcgdGhpcyByZXF1ZXN0CisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUFsbG9jYXRpb25FeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHBoeXNpY2FsIGNvbm5lY3Rpb24KICAgICAgKi8KICAgICBwdWJsaWMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gY3JlYXRlTWFuYWdlZENvbm5lY3Rpb24oamF2YXguc2VjdXJpdHkuYXV0aC5TdWJqZWN0IHN1YmplY3QsCiAgICAgICAgIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBjeFJlcXVlc3RJbmZvKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewpAQCAtNjgsNTUgKzY4LDU1IEBACiAgICAgICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGNyZWF0ZU1hbmFnZWRDb25uZWN0aW9uIik7CiAgICAgICAgIH0KICAgICAgICAgUGFzc3dvcmRDcmVkZW50aWFsIHBjID0gU2VjdXJpdHlVdGlscy5nZXRQYXNzd29yZENyZWRlbnRpYWwodGhpcywgc3ViamVjdCwgY3hSZXF1ZXN0SW5mbyk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKGRhdGFTb3VyY2VPYmogPT0gbnVsbCkgewogICAgICAgICAgICAgaWYoZHNPYmpCdWlsZGVyID09IG51bGwpIHsKICAgICAgICAgICAgICAgICBkc09iakJ1aWxkZXIgPSBuZXcgRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIoc3BlYyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGRhdGFTb3VyY2VPYmogPSAoamF2YXguc3FsLkRhdGFTb3VyY2UpIGRzT2JqQnVpbGRlci5jb25zdHJ1Y3REYXRhU291cmNlT2JqZWN0KCk7CiAgICAgICAgICAgICB9IGNhdGNoKENsYXNzQ2FzdEV4Y2VwdGlvbiBjY2UpIHsKLQkgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2NjZSIsIGNjZSk7CisgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19jY2UiLCBjY2UpOwogICAgICAgICAgICAgICAgIHRocm93IG5ldyBqYWthcnRhLnJlc291cmNlLlJlc291cmNlRXhjZXB0aW9uKGNjZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gZHNDb25uID0gbnVsbDsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKLQkgICAgLyogRm9yIHRoZSBjYXNlIHdoZXJlIHRoZSB1c2VyL3Bhc3N3ZCBvZiB0aGUgY29ubmVjdGlvbiBwb29sIGlzCi0JICAgICAqIGVxdWFsIHRvIHRoZSBQYXNzd29yZENyZWRlbnRpYWwgZm9yIHRoZSBjb25uZWN0aW9uIHJlcXVlc3QKLQkgICAgICogZ2V0IGEgY29ubmVjdGlvbiBmcm9tIHRoaXMgcG9vbCBkaXJlY3RseS4KLQkgICAgICogZm9yIGFsbCBvdGhlciBjb25kaXRpb25zIGdvIGNyZWF0ZSBhIG5ldyBjb25uZWN0aW9uCi0JICAgICAqLwotCSAgICBpZiAoIGlzRXF1YWwoIHBjLCBnZXRVc2VyKCksIGdldFBhc3N3b3JkKCkgKSApIHsKLQkgICAgICAgIGRzQ29ubiA9IGRhdGFTb3VyY2VPYmouZ2V0Q29ubmVjdGlvbigpOwotCSAgICB9IGVsc2UgewotCSAgICAgICAgZHNDb25uID0gZGF0YVNvdXJjZU9iai5nZXRDb25uZWN0aW9uKHBjLmdldFVzZXJOYW1lKCksIAotCQkgICAgbmV3IFN0cmluZyhwYy5nZXRQYXNzd29yZCgpKSk7Ci0JICAgIH0KKyAgICAgICAgLyogRm9yIHRoZSBjYXNlIHdoZXJlIHRoZSB1c2VyL3Bhc3N3ZCBvZiB0aGUgY29ubmVjdGlvbiBwb29sIGlzCisgICAgICAgICAqIGVxdWFsIHRvIHRoZSBQYXNzd29yZENyZWRlbnRpYWwgZm9yIHRoZSBjb25uZWN0aW9uIHJlcXVlc3QKKyAgICAgICAgICogZ2V0IGEgY29ubmVjdGlvbiBmcm9tIHRoaXMgcG9vbCBkaXJlY3RseS4KKyAgICAgICAgICogZm9yIGFsbCBvdGhlciBjb25kaXRpb25zIGdvIGNyZWF0ZSBhIG5ldyBjb25uZWN0aW9uCisgICAgICAgICAqLworICAgICAgICBpZiAoIGlzRXF1YWwoIHBjLCBnZXRVc2VyKCksIGdldFBhc3N3b3JkKCkgKSApIHsKKyAgICAgICAgICAgIGRzQ29ubiA9IGRhdGFTb3VyY2VPYmouZ2V0Q29ubmVjdGlvbigpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZHNDb25uID0gZGF0YVNvdXJjZU9iai5nZXRDb25uZWN0aW9uKHBjLmdldFVzZXJOYW1lKCksCisgICAgICAgICAgICBuZXcgU3RyaW5nKHBjLmdldFBhc3N3b3JkKCkpKTsKKyAgICAgICAgfQogICAgICAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLmV4Y19jcmVhdGVfY29ubiIsIHNxbGUpOwotICAgICAgICAgICAgdGhyb3cgbmV3IGpha2FydGEucmVzb3VyY2Uuc3BpLlJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gY291bGQgbm90IGJlIGFsbG9jYXRlZDogIiArIAorICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5leGNfY3JlYXRlX2Nvbm4iLCBzcWxlKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBqYWthcnRhLnJlc291cmNlLnNwaS5SZXNvdXJjZUFsbG9jYXRpb25FeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGNvdWxkIG5vdCBiZSBhbGxvY2F0ZWQ6ICIgKwogICAgICAgICAgICAgICAgIHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWMgPSBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uKG51bGwsIGRzQ29ubiwgcGMsIHRoaXMpOwogICAgICAgICAvL0dKQ0lOVAogICAgICAgICBzZXRJc29sYXRpb24obWMpOwogICAgICAgICBpc1ZhbGlkKG1jKTsKICAgICAgICAgcmV0dXJuIG1jOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIENoZWNrIGlmIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpcyBlcXVhbCB0byAKKyAgICAgKiBDaGVjayBpZiB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaXMgZXF1YWwgdG8KICAgICAgKiBhbm90aGVyIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4uCi0gICAgICogCi0gICAgICogQHBhcmFtCW90aGVyCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0IGZvciBjaGVja2luZyBlcXVhbGl0eSB3aXRoCi0gICAgICogQHJldHVybgl0cnVlCWlmIHRoZSBwcm9wZXJ0eSBzZXRzIG9mIGJvdGggdGhlIAotICAgICAqCQkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3RzIGFyZSB0aGUgc2FtZQotICAgICAqCQlmYWxzZQlvdGhlcndpc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBvdGhlciAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdCBmb3IgY2hlY2tpbmcgZXF1YWxpdHkgd2l0aAorICAgICAqIEByZXR1cm4gICAgdHJ1ZSAgICBpZiB0aGUgcHJvcGVydHkgc2V0cyBvZiBib3RoIHRoZQorICAgICAqICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3RzIGFyZSB0aGUgc2FtZQorICAgICAqICAgICAgICBmYWxzZSAgICBvdGhlcndpc2UKICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG90aGVyKSB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC0xMjcsNDA5ICsxMjcsNDA5IEBACiAgICAgICAgICAqIGlmIGFuZCBvbmx5IGlmIHRoZWlyIHByb3BlcnRpZXMgYXJlIHRoZSBzYW1lLgogICAgICAgICAgKi8KICAgICAgICAgaWYob3RoZXIgaW5zdGFuY2VvZiBjb20uc3VuLmpkYmNyYS5zcGkuRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkpIHsKLSAgICAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBvdGhlck1DRiA9IAorICAgICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLkRTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG90aGVyTUNGID0KICAgICAgICAgICAgICAgICAoY29tLnN1bi5qZGJjcmEuc3BpLkRTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KSBvdGhlcjsKICAgICAgICAgICAgIHJldHVybiB0aGlzLnNwZWMuZXF1YWxzKG90aGVyTUNGLnNwZWMpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBzZXJ2ZXIgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlzZXJ2ZXJOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldFNlcnZlck5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHNlcnZlck5hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0U2VydmVyTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRzZXJ2ZXJOYW1lKFN0cmluZyBzZXJ2ZXJOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlNFUlZFUk5BTUUsIHNlcnZlck5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHNlcnZlciBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglzZXJ2ZXJOYW1lCi0gICAgICogQHNlZQk8Y29kZT5zZXRTZXJ2ZXJOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgc2VydmVyTmFtZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0U2VydmVyTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHNlcnZlck5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5TRVJWRVJOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBzZXJ2ZXIgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlzZXJ2ZXJOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldFNlcnZlck5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHNlcnZlck5hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0U2VydmVyTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJOYW1lKFN0cmluZyBzZXJ2ZXJOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlNFUlZFUk5BTUUsIHNlcnZlck5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHNlcnZlciBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglzZXJ2ZXJOYW1lCi0gICAgICogQHNlZQk8Y29kZT5zZXRTZXJ2ZXJOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgc2VydmVyTmFtZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0U2VydmVyTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFNlcnZlck5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5TRVJWRVJOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBwb3J0IG51bWJlci4KICAgICAgKgotICAgICAqIEBwYXJhbQlwb3J0TnVtYmVyCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldFBvcnROdW1iZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHBvcnROdW1iZXIgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0UG9ydE51bWJlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRwb3J0TnVtYmVyKFN0cmluZyBwb3J0TnVtYmVyKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIsIHBvcnROdW1iZXIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHBvcnQgbnVtYmVyLgogICAgICAqCi0gICAgICogQHJldHVybglwb3J0TnVtYmVyCi0gICAgICogQHNlZQk8Y29kZT5zZXRQb3J0TnVtYmVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgcG9ydE51bWJlcgorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0UG9ydE51bWJlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHBvcnROdW1iZXIoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QT1JUTlVNQkVSKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBwb3J0IG51bWJlci4KICAgICAgKgotICAgICAqIEBwYXJhbQlwb3J0TnVtYmVyCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldFBvcnROdW1iZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHBvcnROdW1iZXIgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0UG9ydE51bWJlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRQb3J0TnVtYmVyKFN0cmluZyBwb3J0TnVtYmVyKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIsIHBvcnROdW1iZXIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHBvcnQgbnVtYmVyLgogICAgICAqCi0gICAgICogQHJldHVybglwb3J0TnVtYmVyCi0gICAgICogQHNlZQk8Y29kZT5zZXRQb3J0TnVtYmVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgcG9ydE51bWJlcgorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0UG9ydE51bWJlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFBvcnROdW1iZXIoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QT1JUTlVNQkVSKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkYXRhYmFzZSBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCWRhdGFiYXNlTmFtZQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREYXRhYmFzZU5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRhdGFiYXNlTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREYXRhYmFzZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0ZGF0YWJhc2VOYW1lKFN0cmluZyBkYXRhYmFzZU5hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQUJBU0VOQU1FLCBkYXRhYmFzZU5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRhdGFiYXNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRhdGFiYXNlTmFtZQotICAgICAqIEBzZWUJPGNvZGU+c2V0RGF0YWJhc2VOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZGF0YWJhc2VOYW1lCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREYXRhYmFzZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRkYXRhYmFzZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBQkFTRU5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRhdGFiYXNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZGF0YWJhc2VOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERhdGFiYXNlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGF0YWJhc2VOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERhdGFiYXNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXREYXRhYmFzZU5hbWUoU3RyaW5nIGRhdGFiYXNlTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBQkFTRU5BTUUsIGRhdGFiYXNlTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGF0YWJhc2UgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGF0YWJhc2VOYW1lCi0gICAgICogQHNlZQk8Y29kZT5zZXREYXRhYmFzZU5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkYXRhYmFzZU5hbWUKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERhdGFiYXNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldERhdGFiYXNlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFCQVNFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGF0YSBzb3VyY2UgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlkc24gPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRzbiA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREYXRhU291cmNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRkYXRhU291cmNlTmFtZShTdHJpbmcgZHNuKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FLCBkc24pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRhdGEgc291cmNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRzbgotICAgICAqIEBzZWUJPGNvZGU+c2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkc24KKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERhdGFTb3VyY2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0ZGF0YVNvdXJjZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBU09VUkNFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGF0YSBzb3VyY2UgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlkc24gPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRzbiA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREYXRhU291cmNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXREYXRhU291cmNlTmFtZShTdHJpbmcgZHNuKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FLCBkc24pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRhdGEgc291cmNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRzbgotICAgICAqIEBzZWUJPGNvZGU+c2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkc24KKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERhdGFTb3VyY2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGF0YVNvdXJjZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBU09VUkNFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGVzY3JpcHRpb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZGVzYwk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREZXNjcmlwdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGVzYyAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREZXNjcmlwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRkZXNjcmlwdGlvbihTdHJpbmcgZGVzYykgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ERVNDUklQVElPTiwgZGVzYyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGVzY3JpcHRpb24uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRlc2MKLSAgICAgKiBAc2VlCTxjb2RlPnNldERlc2NyaXB0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZGVzYworICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGVzY3JpcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRkZXNjcmlwdGlvbigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFU0NSSVBUSU9OKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkZXNjcmlwdGlvbi4KICAgICAgKgotICAgICAqIEBwYXJhbQlkZXNjCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERlc2NyaXB0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkZXNjICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERlc2NyaXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERlc2NyaXB0aW9uKFN0cmluZyBkZXNjKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFU0NSSVBUSU9OLCBkZXNjKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkZXNjcmlwdGlvbi4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGVzYwotICAgICAqIEBzZWUJPGNvZGU+c2V0RGVzY3JpcHRpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBkZXNjCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREZXNjcmlwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVTQ1JJUFRJT04pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIG5ldHdvcmsgcHJvdG9jb2wuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbndQcm90b2NvbAk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CisgICAgICogQHBhcmFtICAgIG53UHJvdG9jb2wgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldG5ldHdvcmtQcm90b2NvbChTdHJpbmcgbndQcm90b2NvbCkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ORVRXT1JLUFJPVE9DT0wsIG53UHJvdG9jb2wpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIG5ldHdvcmsgcHJvdG9jb2wuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCW53UHJvdG9jb2wKLSAgICAgKiBAc2VlCTxjb2RlPnNldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIG53UHJvdG9jb2wKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldG5ldHdvcmtQcm90b2NvbCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk5FVFdPUktQUk9UT0NPTCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgbmV0d29yayBwcm90b2NvbC4KICAgICAgKgotICAgICAqIEBwYXJhbQlud1Byb3RvY29sCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbndQcm90b2NvbCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TmV0d29ya1Byb3RvY29sKFN0cmluZyBud1Byb3RvY29sKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk5FVFdPUktQUk9UT0NPTCwgbndQcm90b2NvbCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgbmV0d29yayBwcm90b2NvbC4KICAgICAgKgotICAgICAqIEByZXR1cm4JbndQcm90b2NvbAotICAgICAqIEBzZWUJPGNvZGU+c2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgbndQcm90b2NvbAorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmV0d29ya1Byb3RvY29sKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTkVUV09SS1BST1RPQ09MKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSByb2xlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jcm9sZU5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0Um9sZU5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHJvbGVOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldFJvbGVOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHJvbGVOYW1lKFN0cmluZyByb2xlTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ST0xFTkFNRSwgcm9sZU5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHJvbGUgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4Jcm9sZU5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldFJvbGVOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgcm9sZU5hbWUKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldFJvbGVOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0cm9sZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ST0xFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgcm9sZSBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCXJvbGVOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldFJvbGVOYW1lPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICByb2xlTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRSb2xlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRSb2xlTmFtZShTdHJpbmcgcm9sZU5hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUk9MRU5BTUUsIHJvbGVOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSByb2xlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXJvbGVOYW1lCi0gICAgICogQHNlZQk8Y29kZT5zZXRSb2xlTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHJvbGVOYW1lCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRSb2xlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFJvbGVOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUk9MRU5BTUUpOwogICAgIH0KIAotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgbG9naW4gdGltZW91dC4KICAgICAgKgotICAgICAqIEBwYXJhbQlsb2dpblRpbWVPdXQJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0TG9naW5UaW1lT3V0PC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBsb2dpblRpbWVPdXQgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0TG9naW5UaW1lT3V0PC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGxvZ2luVGltZU91dChTdHJpbmcgbG9naW5UaW1lT3V0KSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR0lOVElNRU9VVCwgbG9naW5UaW1lT3V0KTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBsb2dpbiB0aW1lb3V0LgogICAgICAqCi0gICAgICogQHJldHVybglsb2dpblRpbWVvdXQKLSAgICAgKiBAc2VlCTxjb2RlPnNldExvZ2luVGltZU91dDwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGxvZ2luVGltZW91dAorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0TG9naW5UaW1lT3V0PC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0bG9naW5UaW1lT3V0KCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HSU5USU1FT1VUKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBsb2dpbiB0aW1lb3V0LgogICAgICAqCi0gICAgICogQHBhcmFtCWxvZ2luVGltZU91dAk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXRMb2dpblRpbWVPdXQ8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGxvZ2luVGltZU91dCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRMb2dpblRpbWVPdXQ8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TG9naW5UaW1lT3V0KFN0cmluZyBsb2dpblRpbWVPdXQpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HSU5USU1FT1VULCBsb2dpblRpbWVPdXQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGxvZ2luIHRpbWVvdXQuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWxvZ2luVGltZW91dAotICAgICAqIEBzZWUJPGNvZGU+c2V0TG9naW5UaW1lT3V0PC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgbG9naW5UaW1lb3V0CisgICAgICogQHNlZSAgICA8Y29kZT5zZXRMb2dpblRpbWVPdXQ8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRMb2dpblRpbWVPdXQoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dJTlRJTUVPVVQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRlbGltaXRlci4KICAgICAgKgotICAgICAqIEBwYXJhbQlkZWxpbQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREZWxpbWl0ZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRlbGltICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERlbGltaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRkZWxpbWl0ZXIoU3RyaW5nIGRlbGltKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUiwgZGVsaW0pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRlbGltaXRlci4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGVsaW0KLSAgICAgKiBAc2VlCTxjb2RlPnNldERlbGltaXRlcjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRlbGltCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREZWxpbWl0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRkZWxpbWl0ZXIoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERUxJTUlURVIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRlbGltaXRlci4KICAgICAgKgotICAgICAqIEBwYXJhbQlkZWxpbQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREZWxpbWl0ZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRlbGltICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERlbGltaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXREZWxpbWl0ZXIoU3RyaW5nIGRlbGltKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUiwgZGVsaW0pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRlbGltaXRlci4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGVsaW0KLSAgICAgKiBAc2VlCTxjb2RlPnNldERlbGltaXRlcjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRlbGltCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREZWxpbWl0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXREZWxpbWl0ZXIoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERUxJTUlURVIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRyaXZlciBzcGVjaWZpYyBwcm9wZXJ0aWVzLgogICAgICAqCi0gICAgICogQHBhcmFtCWRyaXZlclByb3BzCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRyaXZlclByb3BzICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0ZHJpdmVyUHJvcGVydGllcyhTdHJpbmcgZHJpdmVyUHJvcHMpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuRFJJVkVSUFJPUEVSVElFUywgZHJpdmVyUHJvcHMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRyaXZlciBzcGVjaWZpYyBwcm9wZXJ0aWVzLgogICAgICAqCi0gICAgICogQHJldHVybglkcml2ZXJQcm9wcwotICAgICAqIEBzZWUJPGNvZGU+c2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRyaXZlclByb3BzCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0ZHJpdmVyUHJvcGVydGllcygpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRSSVZFUlBST1BFUlRJRVMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRyaXZlciBzcGVjaWZpYyBwcm9wZXJ0aWVzLgogICAgICAqCi0gICAgICogQHBhcmFtCWRyaXZlclByb3BzCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRyaXZlclByb3BzICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RHJpdmVyUHJvcGVydGllcyhTdHJpbmcgZHJpdmVyUHJvcHMpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuRFJJVkVSUFJPUEVSVElFUywgZHJpdmVyUHJvcHMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRyaXZlciBzcGVjaWZpYyBwcm9wZXJ0aWVzLgogICAgICAqCi0gICAgICogQHJldHVybglkcml2ZXJQcm9wcwotICAgICAqIEBzZWUJPGNvZGU+c2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRyaXZlclByb3BzCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RHJpdmVyUHJvcGVydGllcygpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRSSVZFUlBST1BFUlRJRVMpOwpAQCAtNTM5LDM1ICs1MzksMzUgQEAKICAgICAgKiBDaGVjayBpZiB0aGUgUGFzc3dvcmRDcmVkZW50aWFsIHBhc3NlZCBmb3IgdGhpcyBnZXQgY29ubmVjdGlvbgogICAgICAqIHJlcXVlc3QgaXMgZXF1YWwgdG8gdGhlIHVzZXIvcGFzc3dkIG9mIHRoaXMgY29ubmVjdGlvbiBwb29sLgogICAgICAqLwotICAgIHByaXZhdGUgYm9vbGVhbiBpc0VxdWFsKCBQYXNzd29yZENyZWRlbnRpYWwgcGMsIFN0cmluZyB1c2VyLCAKKyAgICBwcml2YXRlIGJvb2xlYW4gaXNFcXVhbCggUGFzc3dvcmRDcmVkZW50aWFsIHBjLCBTdHJpbmcgdXNlciwKICAgICAgICAgU3RyaW5nIHBhc3N3b3JkKSB7Ci0gICAgICAgIAotCS8vaWYgZXF1YWwgZ2V0IGRpcmVjdCBjb25uZWN0aW9uIGVsc2UgCi0JLy9nZXQgY29ubmVjdGlvbiB3aXRoIHVzZXIgYW5kIHBhc3N3b3JkLgotCQotCWlmICh1c2VyID09IG51bGwgJiYgcGMgPT0gbnVsbCkgewotCSAgICByZXR1cm4gdHJ1ZTsKLQl9Ci0JCi0JaWYgKCB1c2VyID09IG51bGwgJiYgcGMgIT0gbnVsbCApIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQl9CiAKLQlpZiggcGMgPT0gbnVsbCApIHsKLQkgICAgcmV0dXJuIHRydWU7Ci0JfQotCQotCWlmICggdXNlci5lcXVhbHMoIHBjLmdldFVzZXJOYW1lKCkgKSApIHsKLQkgICAgaWYgKCBwYXNzd29yZCA9PSBudWxsICYmIHBjLmdldFBhc3N3b3JkKCkgPT0gbnVsbCApIHsKLQkgICAgICAgIHJldHVybiB0cnVlOwotCSAgICB9Ci0JfQotCQotCWlmICggdXNlci5lcXVhbHMocGMuZ2V0VXNlck5hbWUoKSkgJiYgcGFzc3dvcmQuZXF1YWxzKHBjLmdldFBhc3N3b3JkKCkpICkgewotCSAgICByZXR1cm4gdHJ1ZTsKLQl9IAotCQotICAgICAgICAKLQlyZXR1cm4gZmFsc2U7CisgICAgLy9pZiBlcXVhbCBnZXQgZGlyZWN0IGNvbm5lY3Rpb24gZWxzZQorICAgIC8vZ2V0IGNvbm5lY3Rpb24gd2l0aCB1c2VyIGFuZCBwYXNzd29yZC4KKworICAgIGlmICh1c2VyID09IG51bGwgJiYgcGMgPT0gbnVsbCkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIHVzZXIgPT0gbnVsbCAmJiBwYyAhPSBudWxsICkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmKCBwYyA9PSBudWxsICkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIHVzZXIuZXF1YWxzKCBwYy5nZXRVc2VyTmFtZSgpICkgKSB7CisgICAgICAgIGlmICggcGFzc3dvcmQgPT0gbnVsbCAmJiBwYy5nZXRQYXNzd29yZCgpID09IG51bGwgKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICggdXNlci5lcXVhbHMocGMuZ2V0VXNlck5hbWUoKSkgJiYgcGFzc3dvcmQuZXF1YWxzKHBjLmdldFBhc3N3b3JkKCkpICkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKworICAgIHJldHVybiBmYWxzZTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RhdGFTb3VyY2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRGF0YVNvdXJjZS5qYXZhCmluZGV4IDIwNjg0MzAuLjczOWZmNGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRGF0YVNvdXJjZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRGF0YVNvdXJjZS5qYXZhCkBAIC0yOCwyMiArMjgsMjIgQEAKIGltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7CiBpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7CiAvKioKLSAqIEhvbGRzIHRoZSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QsIHdoaWNoIGlzIHRvIGJlIAorICogSG9sZHMgdGhlIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCwgd2hpY2ggaXMgdG8gYmUKICAqIHBhc3NlZCB0byB0aGUgYXBwbGljYXRpb24gcHJvZ3JhbS4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzMxCi0gKiBAYXV0aG9yCUJpbm9kIFAuRworICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8zMQorICogQGF1dGhvciAgICBCaW5vZCBQLkcKICAqLwogcHVibGljIGNsYXNzIERhdGFTb3VyY2UgaW1wbGVtZW50cyBqYXZheC5zcWwuRGF0YVNvdXJjZSwgamF2YS5pby5TZXJpYWxpemFibGUsCi0JCWNvbS5zdW4uYXBwc2Vydi5qZGJjcmEuRGF0YVNvdXJjZSwgamFrYXJ0YS5yZXNvdXJjZS5SZWZlcmVuY2VhYmxleyAKLQkJCQkgICAKKyAgICAgICAgY29tLnN1bi5hcHBzZXJ2LmpkYmNyYS5EYXRhU291cmNlLCBqYWthcnRhLnJlc291cmNlLlJlZmVyZW5jZWFibGV7CisKICAgICBwcml2YXRlIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2Y7Ci0gICAgcHJpdmF0ZSBDb25uZWN0aW9uTWFuYWdlciBjbTsJCQkJICAgCQkJCSAgIAorICAgIHByaXZhdGUgQ29ubmVjdGlvbk1hbmFnZXIgY207CiAgICAgcHJpdmF0ZSBpbnQgbG9naW5UaW1lb3V0OwogICAgIHByaXZhdGUgUHJpbnRXcml0ZXIgbG9nV3JpdGVyOwotICAgIHByaXZhdGUgU3RyaW5nIGRlc2NyaXB0aW9uOwkJCQkgICAKKyAgICBwcml2YXRlIFN0cmluZyBkZXNjcmlwdGlvbjsKICAgICBwcml2YXRlIFJlZmVyZW5jZSByZWZlcmVuY2U7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBMb2dnZXIgX2xvZ2dlcjsKICAgICBzdGF0aWMgewogICAgICAgICBfbG9nZ2VyID0gTG9nZ2VyLmdldEFub255bW91c0xvZ2dlcigpOwpAQCAtNTEsNTcgKzUxLDU3IEBACiAgICAgcHJpdmF0ZSBib29sZWFuIGRlYnVnID0gZmFsc2U7CiAKICAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdC4gVGhpcyBpcyBjcmVhdGVkIGJ5IHRoZSAKKyAgICAgKiBDb25zdHJ1Y3RzIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdC4gVGhpcyBpcyBjcmVhdGVkIGJ5IHRoZQogICAgICAqIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0LgogICAgICAqCi0gICAgICogQHBhcmFtCW1jZgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdCAKLSAgICAgKgkJCWNyZWF0aW5nIHRoaXMgb2JqZWN0LgotICAgICAqIEBwYXJhbQljbQk8Y29kZT5Db25uZWN0aW9uTWFuYWdlcjwvY29kZT4gb2JqZWN0IGVpdGhlciBhc3NvY2lhdGVkCi0gICAgICoJCQl3aXRoIEFwcGxpY2F0aW9uIHNlcnZlciBvciBSZXNvdXJjZSBBZGFwdGVyLgorICAgICAqIEBwYXJhbSAgICBtY2YgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QKKyAgICAgKiAgICAgICAgICAgIGNyZWF0aW5nIHRoaXMgb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBjbSAgICA8Y29kZT5Db25uZWN0aW9uTWFuYWdlcjwvY29kZT4gb2JqZWN0IGVpdGhlciBhc3NvY2lhdGVkCisgICAgICogICAgICAgICAgICB3aXRoIEFwcGxpY2F0aW9uIHNlcnZlciBvciBSZXNvdXJjZSBBZGFwdGVyLgogICAgICAqLwogICAgIHB1YmxpYyBEYXRhU291cmNlIChNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmLCBDb25uZWN0aW9uTWFuYWdlciBjbSkgewotICAgIAl0aGlzLm1jZiA9IG1jZjsKLSAgICAJaWYgKGNtID09IG51bGwpIHsKLSAgICAJICAgIHRoaXMuY20gPSAoQ29ubmVjdGlvbk1hbmFnZXIpIG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbk1hbmFnZXIoKTsKLSAgICAJfSBlbHNlIHsKLSAgICAJICAgIHRoaXMuY20gPSBjbTsKLSAgICAJfSAgICAJCi0gICAgfSAgIAotICAgIAorICAgICAgICB0aGlzLm1jZiA9IG1jZjsKKyAgICAgICAgaWYgKGNtID09IG51bGwpIHsKKyAgICAgICAgICAgIHRoaXMuY20gPSAoQ29ubmVjdGlvbk1hbmFnZXIpIG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbk1hbmFnZXIoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuY20gPSBjbTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QuCi0gICAgICogCi0gICAgICogQHJldHVybgk8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGFuIGVycm9yLiAgICAgIAorICAgICAqCisgICAgICogQHJldHVybiAgICA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGFuIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBDb25uZWN0aW9uIGdldENvbm5lY3Rpb24oKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLSAgICAJdHJ5IHsKLSAgICAJICAgIHJldHVybiAoQ29ubmVjdGlvbikgY20uYWxsb2NhdGVDb25uZWN0aW9uKG1jZixudWxsKTsgICAgCSAgICAKLSAgICAJfSBjYXRjaCAoUmVzb3VyY2VFeGNlcHRpb24gcmUpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJldHVybiAoQ29ubmVjdGlvbikgY20uYWxsb2NhdGVDb25uZWN0aW9uKG1jZixudWxsKTsKKyAgICAgICAgfSBjYXRjaCAoUmVzb3VyY2VFeGNlcHRpb24gcmUpIHsKIC8vIFRoaXMgaXMgdGVtcG9yYXJ5LiBUaGlzIG5lZWRzIHRvIGJlIGNoYW5nZWQgdG8gU0VWRVJFIGFmdGVyIFRQCi0JICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLmV4Y19nZXRfY29ubiIsIHJlLmdldE1lc3NhZ2UoKSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uIChyZS5nZXRNZXNzYWdlKCkpOwotICAgIAl9CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLmV4Y19nZXRfY29ubiIsIHJlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uIChyZS5nZXRNZXNzYWdlKCkpOworICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JdXNlcglVc2VyIG5hbWUgZm9yIHRoZSBDb25uZWN0aW9uLgotICAgICAqIEBwYXJhbQlwd2QJUGFzc3dvcmQgZm9yIHRoZSBDb25uZWN0aW9uLgotICAgICAqIEByZXR1cm4JPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhbiBlcnJvci4gICAgICAKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICB1c2VyICAgIFVzZXIgbmFtZSBmb3IgdGhlIENvbm5lY3Rpb24uCisgICAgICogQHBhcmFtICAgIHB3ZCAgICBQYXNzd29yZCBmb3IgdGhlIENvbm5lY3Rpb24uCisgICAgICogQHJldHVybiAgICA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGFuIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBDb25uZWN0aW9uIGdldENvbm5lY3Rpb24oU3RyaW5nIHVzZXIsIFN0cmluZyBwd2QpIHRocm93cyBTUUxFeGNlcHRpb24gewotICAgIAl0cnkgewotICAgIAkgICAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGluZm8gPSBuZXcgQ29ubmVjdGlvblJlcXVlc3RJbmZvICh1c2VyLCBwd2QpOwotICAgIAkgICAgcmV0dXJuIChDb25uZWN0aW9uKSBjbS5hbGxvY2F0ZUNvbm5lY3Rpb24obWNmLGluZm8pOwotICAgIAl9IGNhdGNoIChSZXNvdXJjZUV4Y2VwdGlvbiByZSkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGluZm8gPSBuZXcgQ29ubmVjdGlvblJlcXVlc3RJbmZvICh1c2VyLCBwd2QpOworICAgICAgICAgICAgcmV0dXJuIChDb25uZWN0aW9uKSBjbS5hbGxvY2F0ZUNvbm5lY3Rpb24obWNmLGluZm8pOworICAgICAgICB9IGNhdGNoIChSZXNvdXJjZUV4Y2VwdGlvbiByZSkgewogLy8gVGhpcyBpcyB0ZW1wb3JhcnkuIFRoaXMgbmVlZHMgdG8gYmUgY2hhbmdlZCB0byBTRVZFUkUgYWZ0ZXIgVFAKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMuZXhjX2dldF9jb25uIiwgcmUuZ2V0TWVzc2FnZSgpKTsKLSAgICAJICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKHJlLmdldE1lc3NhZ2UoKSk7Ci0gICAgCX0KLSAgICB9ICAgIAorICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5leGNfZ2V0X2Nvbm4iLCByZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAocmUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgfQorICAgIH0KIAogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIFNRTENvbm5lY3Rpb24gZnJvbSB0aGUgQ29ubmVjdGlvbiB3cmFwcGVyCkBAIC0xMTQsOTEgKzExNCw5MSBAQAogICAgICAqLwogICAgIHB1YmxpYyBDb25uZWN0aW9uIGdldENvbm5lY3Rpb24oQ29ubmVjdGlvbiBjb24pIHRocm93cyBTUUxFeGNlcHRpb24gewogCi0gICAgICAgIENvbm5lY3Rpb24gZHJpdmVyQ29uID0gY29uOyAKKyAgICAgICAgQ29ubmVjdGlvbiBkcml2ZXJDb24gPSBjb247CiAgICAgICAgIGlmIChjb24gaW5zdGFuY2VvZiBjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbkhvbGRlcikgewotICAgICAgICAgICBkcml2ZXJDb24gPSAoKGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uSG9sZGVyKSBjb24pLmdldENvbm5lY3Rpb24oKTsgCi0gICAgICAgIH0gCisgICAgICAgICAgIGRyaXZlckNvbiA9ICgoY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25Ib2xkZXIpIGNvbikuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIGRyaXZlckNvbjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXQgdGhlIGxvZ2luIHRpbWVvdXQKICAgICAgKgogICAgICAqIEByZXR1cm4gbG9naW4gdGltZW91dC4KLSAgICAgKiBAdGhyb3dzCVNRTEV4Y2VwdGlvbglJZiBhIGRhdGFiYXNlIGVycm9yIG9jY3Vycy4KKyAgICAgKiBAdGhyb3dzICAgIFNRTEV4Y2VwdGlvbiAgICBJZiBhIGRhdGFiYXNlIGVycm9yIG9jY3Vycy4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldExvZ2luVGltZW91dCgpIHRocm93cyBTUUxFeGNlcHRpb257Ci0gICAgCXJldHVybglsb2dpblRpbWVvdXQ7CisgICAgICAgIHJldHVybiAgICBsb2dpblRpbWVvdXQ7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0IHRoZSBsb2dpbiB0aW1lb3V0CiAgICAgICoKLSAgICAgKiBAcGFyYW0JbG9naW5UaW1lb3V0CUxvZ2luIHRpbWVvdXQuCi0gICAgICogQHRocm93cwlTUUxFeGNlcHRpb24JSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCisgICAgICogQHBhcmFtICAgIGxvZ2luVGltZW91dCAgICBMb2dpbiB0aW1lb3V0LgorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIElmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldExvZ2luVGltZW91dChpbnQgbG9naW5UaW1lb3V0KSB0aHJvd3MgU1FMRXhjZXB0aW9uewotICAgIAl0aGlzLmxvZ2luVGltZW91dCA9IGxvZ2luVGltZW91dDsKKyAgICAgICAgdGhpcy5sb2dpblRpbWVvdXQgPSBsb2dpblRpbWVvdXQ7CiAgICAgfQotICAgIAotICAgIC8qKiAKKworICAgIC8qKgogICAgICAqIEdldCB0aGUgbG9nd3JpdGVyIG9iamVjdC4KICAgICAgKgogICAgICAqIEByZXR1cm4gPGNvZGU+IFByaW50V3JpdGVyIDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MJU1FMRXhjZXB0aW9uCUlmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIElmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgogICAgICAqLwogICAgIHB1YmxpYyBQcmludFdyaXRlciBnZXRMb2dXcml0ZXIoKSB0aHJvd3MgU1FMRXhjZXB0aW9uewotICAgIAlyZXR1cm4JbG9nV3JpdGVyOworICAgICAgICByZXR1cm4gICAgbG9nV3JpdGVyOwogICAgIH0KLSAgICAgICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGxvZ3dyaXRlciBvbiB0aGlzIG9iamVjdC4KICAgICAgKgogICAgICAqIEBwYXJhbSA8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MJU1FMRXhjZXB0aW9uCUlmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIElmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldExvZ1dyaXRlcihQcmludFdyaXRlciBsb2dXcml0ZXIpIHRocm93cyBTUUxFeGNlcHRpb257Ci0gICAgCXRoaXMubG9nV3JpdGVyID0gbG9nV3JpdGVyOwotICAgIH0gICAgICAgIAotICAgICAgICAKKyAgICAgICAgdGhpcy5sb2dXcml0ZXIgPSBsb2dXcml0ZXI7CisgICAgfQorCiAgICAgcHVibGljIExvZ2dlciBnZXRQYXJlbnRMb2dnZXIoKSB0aHJvd3MgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbnsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgZmVhdHVyZS4iKTsKICAgICB9CiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBkZXNjcmlwdGlvbi4KICAgICAgKgotICAgICAqIEByZXR1cm4JRGVzY3JpcHRpb24gYWJvdXQgdGhlIERhdGFTb3VyY2UuCisgICAgICogQHJldHVybiAgICBEZXNjcmlwdGlvbiBhYm91dCB0aGUgRGF0YVNvdXJjZS4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgewotICAgIAlyZXR1cm4gZGVzY3JpcHRpb247CisgICAgICAgIHJldHVybiBkZXNjcmlwdGlvbjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGRlc2NyaXB0aW9uLgogICAgICAqCiAgICAgICogQHBhcmFtIGRlc2NyaXB0aW9uIERlc2NyaXB0aW9uIGFib3V0IHRoZSBEYXRhU291cmNlLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERlc2NyaXB0aW9uKFN0cmluZyBkZXNjcmlwdGlvbikgewotICAgIAl0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247Ci0gICAgfSAgICAKLSAgICAKKyAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOworICAgIH0KKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgcmVmZXJlbmNlLgogICAgICAqCiAgICAgICogQHJldHVybiA8Y29kZT5SZWZlcmVuY2U8L2NvZGU+b2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyBSZWZlcmVuY2UgZ2V0UmVmZXJlbmNlKCkgewotICAgIAlyZXR1cm4gcmVmZXJlbmNlOworICAgICAgICByZXR1cm4gcmVmZXJlbmNlOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgcmVmZXJlbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCXJlZmVyZW5jZSA8Y29kZT5SZWZlcmVuY2U8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgcmVmZXJlbmNlIDxjb2RlPlJlZmVyZW5jZTwvY29kZT4gb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFJlZmVyZW5jZShSZWZlcmVuY2UgcmVmZXJlbmNlKSB7Ci0gICAgCXRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlOworICAgICAgICB0aGlzLnJlZmVyZW5jZSA9IHJlZmVyZW5jZTsKICAgICB9CiAKICAgICBwdWJsaWMgPFQ+IFQgdW53cmFwKENsYXNzPFQ+IGlmYWNlKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW4uamF2YQppbmRleCA1NzRlZDY2Li5iZWMwZDZiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbi5qYXZhCkBAIC0xOCwxMyArMTgsMTMgQEAKIAogcHVibGljIGludGVyZmFjZSBKZGJjU2V0dXBBZG1pbiB7CiAKLSAgICBwdWJsaWMgdm9pZCBzZXRUYWJsZU5hbWUoU3RyaW5nIGRiKTsgCisgICAgcHVibGljIHZvaWQgc2V0VGFibGVOYW1lKFN0cmluZyBkYik7CiAKICAgICBwdWJsaWMgU3RyaW5nIGdldFRhYmxlTmFtZSgpOwogCi0gICAgcHVibGljIHZvaWQgc2V0Sm5kaU5hbWUoU3RyaW5nIG5hbWUpOyAKKyAgICBwdWJsaWMgdm9pZCBzZXRKbmRpTmFtZShTdHJpbmcgbmFtZSk7CiAKLSAgICBwdWJsaWMgU3RyaW5nIGdldEpuZGlOYW1lKCk7IAorICAgIHB1YmxpYyBTdHJpbmcgZ2V0Sm5kaU5hbWUoKTsKIAogICAgIHB1YmxpYyB2b2lkIHNldFNjaGVtYU5hbWUoU3RyaW5nIG5hbWUpOwogCkBAIC0zNCw2ICszNCw2IEBACiAKICAgICBwdWJsaWMgSW50ZWdlciBnZXROb09mUm93cygpOwogCi0gICAgcHVibGljIGJvb2xlYW4gY2hlY2tTZXR1cCgpOyAKKyAgICBwdWJsaWMgYm9vbGVhbiBjaGVja1NldHVwKCk7CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW5JbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluSW1wbC5qYXZhCmluZGV4IDNiZDdjYWQuLmZlYzc0NDMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW5JbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbkltcGwuamF2YQpAQCAtNjUsMTEgKzY1LDExIEBACiAKIHByaXZhdGUgdm9pZCBwcmludEhpZXJhcmNoeShDbGFzc0xvYWRlciBjbCwgaW50IGNudCl7CiB3aGlsZShjbCAhPSBudWxsKSB7Ci0JZm9yKGludCBpID0wOyBpIDwgY250OyBpKyspIAotCQlTeXN0ZW0ub3V0LnByaW50KCIgIiApOwotCVN5c3RlbS5vdXQucHJpbnRsbigiUEFSRU5UIDoiICsgY2wpOwotCWNsID0gY2wuZ2V0UGFyZW50KCk7Ci0JY250ICs9IDM7CisgICAgZm9yKGludCBpID0wOyBpIDwgY250OyBpKyspCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIiAiICk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJQQVJFTlQgOiIgKyBjbCk7CisgICAgY2wgPSBjbC5nZXRQYXJlbnQoKTsKKyAgICBjbnQgKz0gMzsKIH0KIH0KIApAQCAtNzgsMTAgKzc4LDEwIEBACiAgICAgICAgIGZvcihpbnQgaSA9MDsgaSA8IGNudDsgaSsrKQogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIiAiICk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUEFSRU5UIG9mIENsYXNzTG9hZGVyIDEgOiIgKyBjbDEpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiUEFSRU5UIG9mIENsYXNzTG9hZGVyIDIgOiIgKyBjbDIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiRVFVQUxTIDogIiArIChjbDEgPT0gY2wyKSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJQQVJFTlQgb2YgQ2xhc3NMb2FkZXIgMiA6IiArIGNsMik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJFUVVBTFMgOiAiICsgKGNsMSA9PSBjbDIpKTsKICAgICAgICAgY2wxID0gY2wxLmdldFBhcmVudCgpOwotCWNsMiA9IGNsMi5nZXRQYXJlbnQoKTsKKyAgICBjbDIgPSBjbDIuZ2V0UGFyZW50KCk7CiAgICAgICAgIGNudCArPSAzOwogfQogfQpAQCAtOTAsOTMgKzkwLDkzIEBACiAgICAgcHVibGljIGJvb2xlYW4gY2hlY2tTZXR1cCgpewogCiAgICAgICAgIGlmIChqbmRpTmFtZT09IG51bGwgfHwgam5kaU5hbWUudHJpbSgpLmVxdWFscygiIikpIHsKLQkgICByZXR1cm4gZmFsc2U7Ci0JfQorICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAgICAgICAgaWYgKHRhYmxlTmFtZT09IG51bGwgfHwgdGFibGVOYW1lLnRyaW0oKS5lcXVhbHMoIiIpKSB7Ci0JICAgcmV0dXJuIGZhbHNlOwotCX0KKyAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgICAgIENvbm5lY3Rpb24gY29uID0gbnVsbDsKLQlTdGF0ZW1lbnQgcyA9IG51bGw7Ci0JUmVzdWx0U2V0IHJzID0gbnVsbDsKLQlib29sZWFuIGIgPSBmYWxzZTsKKyAgICBTdGF0ZW1lbnQgcyA9IG51bGw7CisgICAgUmVzdWx0U2V0IHJzID0gbnVsbDsKKyAgICBib29sZWFuIGIgPSBmYWxzZTsKICAgICAgICAgdHJ5IHsKLQkgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkvL2RlYnVnCi0JQ2xhc3MgY2x6ID0gRGF0YVNvdXJjZS5jbGFzczsKKyAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAvL2RlYnVnCisgICAgQ2xhc3MgY2x6ID0gRGF0YVNvdXJjZS5jbGFzczsKIC8qCi0JaWYoY2x6LmdldENsYXNzTG9hZGVyKCkgIT0gbnVsbCkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkRhdGFTb3VyY2UncyBjbGFzeHMgOiAiICsgIGNsei5nZXROYW1lKCkgKyAgIiBjbGFzc2xvYWRlciAiICsgY2x6LmdldENsYXNzTG9hZGVyKCkpOwotCQlwcmludEhpZXJhcmNoeShjbHouZ2V0Q2xhc3NMb2FkZXIoKS5nZXRQYXJlbnQoKSwgOCk7Ci0JfQotCUNsYXNzIGNscyA9IGljLmxvb2t1cChqbmRpTmFtZSkuZ2V0Q2xhc3MoKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tlZCB1cCBjbGFzcydzIDogIiArIGNscy5nZXRQYWNrYWdlKCkgKyAiOiIgKyBjbHMuZ2V0TmFtZSgpICArICIgY2xhc3Nsb2FkZXIgIiAgKyBjbHMuZ2V0Q2xhc3NMb2FkZXIoKSk7Ci0JcHJpbnRIaWVyYXJjaHkoY2xzLmdldENsYXNzTG9hZGVyKCkuZ2V0UGFyZW50KCksIDgpOworICAgIGlmKGNsei5nZXRDbGFzc0xvYWRlcigpICE9IG51bGwpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEYXRhU291cmNlJ3MgY2xhc3hzIDogIiArICBjbHouZ2V0TmFtZSgpICsgICIgY2xhc3Nsb2FkZXIgIiArIGNsei5nZXRDbGFzc0xvYWRlcigpKTsKKyAgICAgICAgcHJpbnRIaWVyYXJjaHkoY2x6LmdldENsYXNzTG9hZGVyKCkuZ2V0UGFyZW50KCksIDgpOworICAgIH0KKyAgICBDbGFzcyBjbHMgPSBpYy5sb29rdXAoam5kaU5hbWUpLmdldENsYXNzKCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29rZWQgdXAgY2xhc3MncyA6ICIgKyBjbHMuZ2V0UGFja2FnZSgpICsgIjoiICsgY2xzLmdldE5hbWUoKSAgKyAiIGNsYXNzbG9hZGVyICIgICsgY2xzLmdldENsYXNzTG9hZGVyKCkpOworICAgIHByaW50SGllcmFyY2h5KGNscy5nZXRDbGFzc0xvYWRlcigpLmdldFBhcmVudCgpLCA4KTsKIAotCVN5c3RlbS5vdXQucHJpbnRsbigiQ2xhc3Nsb2FkZXJzIGVxdWFsID8gIiArICAoY2x6LmdldENsYXNzTG9hZGVyKCkgPT0gY2xzLmdldENsYXNzTG9hZGVyKCkpKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIiYqJiomKiYqIENvbXBhcmluZyBIaWVyYWNoeSBEYXRhU291cmNlIHZzIGxvb2tlZHVwIik7Ci0JaWYoY2x6LmdldENsYXNzTG9hZGVyKCkgIT0gbnVsbCkgewotCQljb21wYXJlSGllcmFyY2h5KGNsei5nZXRDbGFzc0xvYWRlcigpLCBjbHMuZ2V0Q2xhc3NMb2FkZXIoKSwgOCk7Ci0JfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2xhc3Nsb2FkZXJzIGVxdWFsID8gIiArICAoY2x6LmdldENsYXNzTG9hZGVyKCkgPT0gY2xzLmdldENsYXNzTG9hZGVyKCkpKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiYqJiomKiYqIENvbXBhcmluZyBIaWVyYWNoeSBEYXRhU291cmNlIHZzIGxvb2tlZHVwIik7CisgICAgaWYoY2x6LmdldENsYXNzTG9hZGVyKCkgIT0gbnVsbCkgeworICAgICAgICBjb21wYXJlSGllcmFyY2h5KGNsei5nZXRDbGFzc0xvYWRlcigpLCBjbHMuZ2V0Q2xhc3NMb2FkZXIoKSwgOCk7CisgICAgfQogCi0JU3lzdGVtLm91dC5wcmludGxuKCJCZWZvcmUgbG9va3VwIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJCZWZvcmUgbG9va3VwIik7CiAqLwotCU9iamVjdCBvID0gaWMubG9va3VwKGpuZGlOYW1lKTsKLS8vCVN5c3RlbS5vdXQucHJpbnRsbigiYWZ0ZXIgbG9va3VwIGxvb2t1cCIpOworICAgIE9iamVjdCBvID0gaWMubG9va3VwKGpuZGlOYW1lKTsKKy8vICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYWZ0ZXIgbG9va3VwIGxvb2t1cCIpOwogCi0JICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSlvIDsKKyAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKW8gOwogLyoKLQlTeXN0ZW0ub3V0LnByaW50bG4oImFmdGVyIGNhc3QiKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0gVHJ5aW5nIG91ciBTdHVmZiAhISEiKTsKLQl0cnkgewotCQlDbGFzcyBvMSA9IChDbGFzcy5mb3JOYW1lKCJjb20uc3VuLmpkYmNyYS5zcGkuRGF0YVNvdXJjZSIpKTsKLQkJQ2xhc3NMb2FkZXIgY2wxID0gbzEuZ2V0Q2xhc3NMb2FkZXIoKTsKLQkJQ2xhc3NMb2FkZXIgY2wyID0gRGF0YVNvdXJjZS5jbGFzcy5nZXRDbGFzc0xvYWRlcigpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNsMSA9PSBDbDIiICsgKGNsMSA9PSBjbDIpKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJDbGFzc2VzIGVxdWFsIiArIChEYXRhU291cmNlLmNsYXNzID09IG8xKSk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCWV4LnByaW50U3RhY2tUcmFjZSgpOwotCX0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImFmdGVyIGNhc3QiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0gVHJ5aW5nIG91ciBTdHVmZiAhISEiKTsKKyAgICB0cnkgeworICAgICAgICBDbGFzcyBvMSA9IChDbGFzcy5mb3JOYW1lKCJjb20uc3VuLmpkYmNyYS5zcGkuRGF0YVNvdXJjZSIpKTsKKyAgICAgICAgQ2xhc3NMb2FkZXIgY2wxID0gbzEuZ2V0Q2xhc3NMb2FkZXIoKTsKKyAgICAgICAgQ2xhc3NMb2FkZXIgY2wyID0gRGF0YVNvdXJjZS5jbGFzcy5nZXRDbGFzc0xvYWRlcigpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNsMSA9PSBDbDIiICsgKGNsMSA9PSBjbDIpKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDbGFzc2VzIGVxdWFsIiArIChEYXRhU291cmNlLmNsYXNzID09IG8xKSk7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KICovCiAgICAgICAgICAgICBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIFN0cmluZyBmdWxsVGFibGVOYW1lID0gdGFibGVOYW1lOwotCSAgICBpZiAoc2NoZW1hTmFtZSAhPSBudWxsICYmICghKHNjaGVtYU5hbWUudHJpbSgpLmVxdWFscygiIikpKSkgewotCSAgICAgICAgZnVsbFRhYmxlTmFtZSA9IHNjaGVtYU5hbWUudHJpbSgpICsgIi4iICsgZnVsbFRhYmxlTmFtZTsKLQkgICAgfQotCSAgICBTdHJpbmcgcXJ5ID0gInNlbGVjdCAqIGZyb20gIiArIGZ1bGxUYWJsZU5hbWU7IAorICAgICAgICBTdHJpbmcgZnVsbFRhYmxlTmFtZSA9IHRhYmxlTmFtZTsKKyAgICAgICAgaWYgKHNjaGVtYU5hbWUgIT0gbnVsbCAmJiAoIShzY2hlbWFOYW1lLnRyaW0oKS5lcXVhbHMoIiIpKSkpIHsKKyAgICAgICAgICAgIGZ1bGxUYWJsZU5hbWUgPSBzY2hlbWFOYW1lLnRyaW0oKSArICIuIiArIGZ1bGxUYWJsZU5hbWU7CisgICAgICAgIH0KKyAgICAgICAgU3RyaW5nIHFyeSA9ICJzZWxlY3QgKiBmcm9tICIgKyBmdWxsVGFibGVOYW1lOwogCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhlY3V0aW5nIHF1ZXJ5IDoiICsgcXJ5KTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGVjdXRpbmcgcXVlcnkgOiIgKyBxcnkpOwogCi0JICAgIHMgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7Ci0JICAgIHJzID0gcy5leGVjdXRlUXVlcnkocXJ5KTsgCisgICAgICAgIHMgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgIHJzID0gcy5leGVjdXRlUXVlcnkocXJ5KTsKIAogICAgICAgICAgICAgaW50IGkgPSAwOwotCSAgICBpZiAocnMubmV4dCgpKSB7Ci0JICAgICAgICBpKys7Ci0JICAgIH0KKyAgICAgICAgaWYgKHJzLm5leHQoKSkgeworICAgICAgICAgICAgaSsrOworICAgICAgICB9CiAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTm8gb2Ygcm93cyBmb3VuZDoiICsgaSk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk5vIG9mIHJvd3MgZXhwZWN0ZWQ6IiArIG5vT2ZSb3dzKTsKIAotCSAgICBpZiAoaSA9PSBub09mUm93cy5pbnRWYWx1ZSgpKSB7Ci0JICAgICAgIGIgPSB0cnVlOwotCSAgICB9IGVsc2UgewotCSAgICAgICBiID0gZmFsc2U7Ci0JICAgIH0KLQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIGIgPSBmYWxzZTsKLQl9IGZpbmFsbHkgewotCSAgICB0cnkgewotCSAgICAgICAgaWYgKHJzICE9IG51bGwpIHJzLmNsb3NlKCk7Ci0JICAgICAgICBpZiAocyAhPSBudWxsKSBzLmNsb3NlKCk7Ci0JICAgICAgICBpZiAoY29uICE9IG51bGwpIGNvbi5jbG9zZSgpOworICAgICAgICBpZiAoaSA9PSBub09mUm93cy5pbnRWYWx1ZSgpKSB7CisgICAgICAgICAgIGIgPSB0cnVlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICBiID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIGIgPSBmYWxzZTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgaWYgKHJzICE9IG51bGwpIHJzLmNsb3NlKCk7CisgICAgICAgICAgICBpZiAocyAhPSBudWxsKSBzLmNsb3NlKCk7CisgICAgICAgICAgICBpZiAoY29uICE9IG51bGwpIGNvbi5jbG9zZSgpOwogICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgfQotCX0KLQlTeXN0ZW0ub3V0LnByaW50bG4oIlJldHVybmluZyBzZXR1cCA6IiArYik7Ci0JcmV0dXJuIGI7CisgICAgICAgIH0KKyAgICB9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXR1cm5pbmcgc2V0dXAgOiIgK2IpOworICAgIHJldHVybiBiOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Mb2NhbFRyYW5zYWN0aW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0xvY2FsVHJhbnNhY3Rpb24uamF2YQppbmRleCA4ZWJlMDU3Li5jNTRhMjE2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0xvY2FsVHJhbnNhY3Rpb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0xvY2FsVHJhbnNhY3Rpb24uamF2YQpAQCAtMjMsNDUgKzIzLDQ1IEBACiAvKioKICAqIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDgvMDMKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA4LzAzCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiBwdWJsaWMgY2xhc3MgTG9jYWxUcmFuc2FjdGlvbiBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLkxvY2FsVHJhbnNhY3Rpb24gewotICAgIAorCiAgICAgcHJpdmF0ZSBNYW5hZ2VkQ29ubmVjdGlvbiBtYzsKLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdG9yIGZvciA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPi4KLSAgICAgKiBAcGFyYW0JbWMJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHRoYXQgcmV0dXJucwotICAgICAqCQkJdGhpcyA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBvYmplY3QgYXMKLSAgICAgKgkJCWEgcmVzdWx0IG9mIDxjb2RlPmdldExvY2FsVHJhbnNhY3Rpb248L2NvZGU+CisgICAgICogQHBhcmFtICAgIG1jICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiB0aGF0IHJldHVybnMKKyAgICAgKiAgICAgICAgICAgIHRoaXMgPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gb2JqZWN0IGFzCisgICAgICogICAgICAgICAgICBhIHJlc3VsdCBvZiA8Y29kZT5nZXRMb2NhbFRyYW5zYWN0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBMb2NhbFRyYW5zYWN0aW9uKE1hbmFnZWRDb25uZWN0aW9uIG1jKSB7CiAgICAgICAgIHRoaXMubWMgPSBtYzsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBCZWdpbiBhIGxvY2FsIHRyYW5zYWN0aW9uLgogICAgICAqCi0gICAgICogQHRocm93cwlMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNoYW5naW5nCi0gICAgICoJCQkJCQl0aGUgYXV0b2NvbW1pdCBtb2RlIG9mIHRoZSBwaHlzaWNhbAotICAgICAqCQkJCQkJY29ubmVjdGlvbgorICAgICAqIEB0aHJvd3MgICAgTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjaGFuZ2luZworICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGF1dG9jb21taXQgbW9kZSBvZiB0aGUgcGh5c2ljYWwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBiZWdpbigpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIC8vR0pDSU5UCi0JbWMudHJhbnNhY3Rpb25TdGFydGVkKCk7CisgICAgbWMudHJhbnNhY3Rpb25TdGFydGVkKCk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBtYy5nZXRBY3R1YWxDb25uZWN0aW9uKCkuc2V0QXV0b0NvbW1pdChmYWxzZSk7CiAgICAgICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbW1pdCBhIGxvY2FsIHRyYW5zYWN0aW9uLgotICAgICAqIEB0aHJvd3MJTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjaGFuZ2luZwotICAgICAqCQkJCQkJdGhlIGF1dG9jb21taXQgbW9kZSBvZiB0aGUgcGh5c2ljYWwKLSAgICAgKgkJCQkJCWNvbm5lY3Rpb24gb3IgY29tbWl0dGluZyB0aGUgdHJhbnNhY3Rpb24KKyAgICAgKiBAdGhyb3dzICAgIExvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2hhbmdpbmcKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhdXRvY29tbWl0IG1vZGUgb2YgdGhlIHBoeXNpY2FsCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uIG9yIGNvbW1pdHRpbmcgdGhlIHRyYW5zYWN0aW9uCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgY29tbWl0KCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgRXhjZXB0aW9uIGUgPSBudWxsOwpAQCAtNzIsMTUgKzcyLDE1IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICAgICAgLy9HSkNJTlQKLQltYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOworICAgIG1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUm9sbGJhY2sgYSBsb2NhbCB0cmFuc2FjdGlvbi4KLSAgICAgKiAKLSAgICAgKiBAdGhyb3dzCUxvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2hhbmdpbmcKLSAgICAgKgkJCQkJCXRoZSBhdXRvY29tbWl0IG1vZGUgb2YgdGhlIHBoeXNpY2FsCi0gICAgICoJCQkJCQljb25uZWN0aW9uIG9yIHJvbGxpbmcgYmFjayB0aGUgdHJhbnNhY3Rpb24KKyAgICAgKgorICAgICAqIEB0aHJvd3MgICAgTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjaGFuZ2luZworICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGF1dG9jb21taXQgbW9kZSBvZiB0aGUgcGh5c2ljYWwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gb3Igcm9sbGluZyBiYWNrIHRoZSB0cmFuc2FjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJvbGxiYWNrKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKQEAgLTkwLDcgKzkwLDcgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgICAgICAvL0dKQ0lOVAotCW1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CisgICAgbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb24uamF2YQppbmRleCAzMGY0NjBhLi4yZGFkNTlhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbi5qYXZhCkBAIC00MSw4ICs0MSw4IEBACiAvKioKICAqIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzIyCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8yMgorICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogcHVibGljIGNsYXNzIE1hbmFnZWRDb25uZWN0aW9uIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gewogCkBAIC01Miw3ICs1Miw3IEBACiAKICAgICBwcml2YXRlIGJvb2xlYW4gaXNEZXN0cm95ZWQgPSBmYWxzZTsKICAgICBwcml2YXRlIGJvb2xlYW4gaXNVc2FibGUgPSB0cnVlOwotICAgIAorCiAgICAgcHJpdmF0ZSBpbnQgY29ubmVjdGlvblR5cGUgPSBJU05PVEFQT09MRURDT05ORUNUSU9OOwogICAgIHByaXZhdGUgUG9vbGVkQ29ubmVjdGlvbiBwYyA9IG51bGw7CiAgICAgcHJpdmF0ZSBqYXZhLnNxbC5Db25uZWN0aW9uIGFjdHVhbENvbm5lY3Rpb24gPSBudWxsOwpAQCAtNjIsNyArNjIsNyBAQAogICAgIHByaXZhdGUgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG1jZiA9IG51bGw7CiAgICAgcHJpdmF0ZSBYQVJlc291cmNlIHhhciA9IG51bGw7CiAgICAgcHVibGljIENvbm5lY3Rpb25Ib2xkZXIgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZTsKLSAgICAKKwogICAgIC8vR0pDSU5UCiAgICAgcHJpdmF0ZSBpbnQgaXNvbGF0aW9uTGV2ZWxXaGVuQ2xlYW5lZDsKICAgICBwcml2YXRlIGJvb2xlYW4gaXNDbGVhbiA9IGZhbHNlOwpAQCAtNzcsNzEgKzc3LDcxIEBACiAgICAgc3RhdGljIHsKICAgICAgICAgX2xvZ2dlciA9IExvZ2dlci5nZXRBbm9ueW1vdXNMb2dnZXIoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+LiBUaGUgcG9vbGVkQ29ubiBwYXJhbWV0ZXIgaXMgZXhwZWN0ZWQKLSAgICAgKiB0byBiZSBudWxsIGFuZCBzcWxDb25uIHBhcmFtZXRlciBpcyB0aGUgYWN0dWFsIGNvbm5lY3Rpb24gaW4gY2FzZSB3aGVyZSAKLSAgICAgKiB0aGUgYWN0dWFsIGNvbm5lY3Rpb24gaXMgZ290IGZyb20gYSBub24gcG9vbGVkIGRhdGFzb3VyY2Ugb2JqZWN0LiBUaGUgCisgICAgICogdG8gYmUgbnVsbCBhbmQgc3FsQ29ubiBwYXJhbWV0ZXIgaXMgdGhlIGFjdHVhbCBjb25uZWN0aW9uIGluIGNhc2Ugd2hlcmUKKyAgICAgKiB0aGUgYWN0dWFsIGNvbm5lY3Rpb24gaXMgZ290IGZyb20gYSBub24gcG9vbGVkIGRhdGFzb3VyY2Ugb2JqZWN0LiBUaGUKICAgICAgKiBwb29sZWRDb25uIHBhcmFtZXRlciBpcyBleHBlY3RlZCB0byBiZSBub24gbnVsbCBhbmQgc3FsQ29ubiBwYXJhbWV0ZXIKICAgICAgKiBpcyBleHBlY3RlZCB0byBiZSBudWxsIGluIHRoZSBjYXNlIHdoZXJlIHRoZSBkYXRhc291cmNlIG9iamVjdCBpcyBhCiAgICAgICogY29ubmVjdGlvbiBwb29sIGRhdGFzb3VyY2Ugb3IgYW4geGEgZGF0YXNvdXJjZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlwb29sZWRDb25uCTxjb2RlPlBvb2xlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpbiBjYXNlIHRoZSAKLSAgICAgKgkJCQlwaHlzaWNhbCBjb25uZWN0aW9uIGlzIHRvIGJlIG9idGFpbmVkIGZyb20gYSBwb29sZWQKLSAgICAgKgkJCQk8Y29kZT5EYXRhU291cmNlPC9jb2RlPjsgbnVsbCBvdGhlcndpc2UKLSAgICAgKiBAcGFyYW0Jc3FsQ29ubgk8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaW4gY2FzZSB0aGUgcGh5c2ljYWwKLSAgICAgKgkJCWNvbm5lY3Rpb24gaXMgdG8gYmUgb2J0YWluZWQgZnJvbSBhIG5vbiBwb29sZWQgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT47Ci0gICAgICoJCQludWxsIG90aGVyd2lzZQotICAgICAqIEBwYXJhbQlwYXNzd2RDcmVkCW9iamVjdCBjb25hdGluaW5nIHRoZQotICAgICAqCQkJCXVzZXIgYW5kIHBhc3N3b3JkIGZvciBhbGxvY2F0aW5nIHRoZSBjb25uZWN0aW9uCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QKLSAgICAgKgkJCQkJdGhhdCBjcmVhdGVkIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdAotICAgICAqCQkJCQlpcyBub3QgdGhlIHNhbWUgYXMgcmV0dXJuZWQgYnkgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgotICAgICAqCQkJCQlvYmplY3QgcGFzc2VkCisgICAgICogQHBhcmFtICAgIHBvb2xlZENvbm4gICAgPGNvZGU+UG9vbGVkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGluIGNhc2UgdGhlCisgICAgICogICAgICAgICAgICAgICAgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyB0byBiZSBvYnRhaW5lZCBmcm9tIGEgcG9vbGVkCisgICAgICogICAgICAgICAgICAgICAgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT47IG51bGwgb3RoZXJ3aXNlCisgICAgICogQHBhcmFtICAgIHNxbENvbm4gICAgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGluIGNhc2UgdGhlIHBoeXNpY2FsCisgICAgICogICAgICAgICAgICBjb25uZWN0aW9uIGlzIHRvIGJlIG9idGFpbmVkIGZyb20gYSBub24gcG9vbGVkIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+OworICAgICAqICAgICAgICAgICAgbnVsbCBvdGhlcndpc2UKKyAgICAgKiBAcGFyYW0gICAgcGFzc3dkQ3JlZCAgICBvYmplY3QgY29uYXRpbmluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICB1c2VyIGFuZCBwYXNzd29yZCBmb3IgYWxsb2NhdGluZyB0aGUgY29ubmVjdGlvbgorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0CisgICAgICogICAgICAgICAgICAgICAgICAgIHRoYXQgY3JlYXRlZCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgaXMgbm90IHRoZSBzYW1lIGFzIHJldHVybmVkIGJ5IDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgb2JqZWN0IHBhc3NlZAogICAgICAqLwotICAgIHB1YmxpYyBNYW5hZ2VkQ29ubmVjdGlvbihQb29sZWRDb25uZWN0aW9uIHBvb2xlZENvbm4sIGphdmEuc3FsLkNvbm5lY3Rpb24gc3FsQ29ubiwgCisgICAgcHVibGljIE1hbmFnZWRDb25uZWN0aW9uKFBvb2xlZENvbm5lY3Rpb24gcG9vbGVkQ29ubiwgamF2YS5zcWwuQ29ubmVjdGlvbiBzcWxDb25uLAogICAgICAgICBQYXNzd29yZENyZWRlbnRpYWwgcGFzc3dkQ3JlZCwgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG1jZikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYocG9vbGVkQ29ubiA9PSBudWxsICYmIHNxbENvbm4gPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJDb25uZWN0aW9uIG9iamVjdCBjYW5ub3QgYmUgbnVsbCIpOwogICAgICAgICB9CiAKLQlpZiAoY29ubmVjdGlvblR5cGUgPT0gSVNOT1RBUE9PTEVEQ09OTkVDVElPTiApIHsKLQkgICAgYWN0dWFsQ29ubmVjdGlvbiA9IHNxbENvbm47Ci0JfQorICAgIGlmIChjb25uZWN0aW9uVHlwZSA9PSBJU05PVEFQT09MRURDT05ORUNUSU9OICkgeworICAgICAgICBhY3R1YWxDb25uZWN0aW9uID0gc3FsQ29ubjsKKyAgICB9CiAKICAgICAgICAgcGMgPSBwb29sZWRDb25uOwogICAgICAgICBjb25uZWN0aW9uSGFuZGxlcyA9IG5ldyBIYXNodGFibGUoKTsKICAgICAgICAgcGFzc3dkQ3JlZGVudGlhbCA9IHBhc3N3ZENyZWQ7CiAgICAgICAgIHRoaXMubWNmID0gbWNmOwotICAgICAgICBpZihwYXNzd2RDcmVkZW50aWFsICE9IG51bGwgJiYgIAorICAgICAgICBpZihwYXNzd2RDcmVkZW50aWFsICE9IG51bGwgJiYKICAgICAgICAgICAgIHRoaXMubWNmLmVxdWFscyhwYXNzd2RDcmVkZW50aWFsLmdldE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSgpKSA9PSBmYWxzZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IHRoYXQgaGFzIGNyZWF0ZWQgdGhpcyAiICsgCisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgdGhhdCBoYXMgY3JlYXRlZCB0aGlzICIgKwogICAgICAgICAgICAgICAgICJNYW5hZ2VkQ29ubmVjdGlvbiBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSByZXR1cm5lZCBieSIgKwogICAgICAgICAgICAgICAgICAgICAiIHRoZSBQYXNzd29yZENyZWRlbnRpYWwgZm9yIHRoaXMgTWFuYWdlZENvbm5lY3Rpb24iKTsKICAgICAgICAgfQogICAgICAgICBsb2dXcml0ZXIgPSBtY2YuZ2V0TG9nV3JpdGVyKCk7CiAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOwotCWNlID0gbmV3IENvbm5lY3Rpb25FdmVudCh0aGlzLCBDb25uZWN0aW9uRXZlbnQuQ09OTkVDVElPTl9DTE9TRUQpOworICAgIGNlID0gbmV3IENvbm5lY3Rpb25FdmVudCh0aGlzLCBDb25uZWN0aW9uRXZlbnQuQ09OTkVDVElPTl9DTE9TRUQpOwogICAgIH0KIAogICAgIC8qKgogICAgICAqIEFkZHMgYSBjb25uZWN0aW9uIGV2ZW50IGxpc3RlbmVyIHRvIHRoZSBNYW5hZ2VkQ29ubmVjdGlvbiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlsaXN0ZW5lcgk8Y29kZT5Db25uZWN0aW9uRXZlbnRMaXN0ZW5lcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbGlzdGVuZXIgICAgPGNvZGU+Q29ubmVjdGlvbkV2ZW50TGlzdGVuZXI8L2NvZGU+CiAgICAgICogQHNlZSA8Y29kZT5yZW1vdmVDb25uZWN0aW9uRXZlbnRMaXN0ZW5lcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBhZGRDb25uZWN0aW9uRXZlbnRMaXN0ZW5lcihDb25uZWN0aW9uRXZlbnRMaXN0ZW5lciBsaXN0ZW5lcikgewotCXRoaXMubGlzdGVuZXIgPSBsaXN0ZW5lcjsKKyAgICB0aGlzLmxpc3RlbmVyID0gbGlzdGVuZXI7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogVXNlZCBieSB0aGUgY29udGFpbmVyIHRvIGNoYW5nZSB0aGUgYXNzb2NpYXRpb24gb2YgYW4gYXBwbGljYXRpb24tbGV2ZWwgCisgICAgICogVXNlZCBieSB0aGUgY29udGFpbmVyIHRvIGNoYW5nZSB0aGUgYXNzb2NpYXRpb24gb2YgYW4gYXBwbGljYXRpb24tbGV2ZWwKICAgICAgKiBjb25uZWN0aW9uIGhhbmRsZSB3aXRoIGEgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCWNvbm5lY3Rpb24JPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdG8gYmUgYXNzb2NpYXRlZCB3aXRoCi0gICAgICoJCQkJdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vIG1vcmUKLSAgICAgKgkJCQkJdmFsaWQgb3IgdGhlIGNvbm5lY3Rpb24gaGFuZGxlIHBhc3NlZCBpcyBudWxsCisgICAgICogQHBhcmFtICAgIGNvbm5lY3Rpb24gICAgPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdG8gYmUgYXNzb2NpYXRlZCB3aXRoCisgICAgICogICAgICAgICAgICAgICAgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vIG1vcmUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgdmFsaWQgb3IgdGhlIGNvbm5lY3Rpb24gaGFuZGxlIHBhc3NlZCBpcyBudWxsCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgYXNzb2NpYXRlQ29ubmVjdGlvbihPYmplY3QgY29ubmVjdGlvbikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTE1MiwxMSArMTUyLDExIEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkNvbm5lY3Rpb24gaGFuZGxlIGNhbm5vdCBiZSBudWxsIik7CiAgICAgICAgIH0KICAgICAgICAgQ29ubmVjdGlvbkhvbGRlciBjaCA9IChDb25uZWN0aW9uSG9sZGVyKSBjb25uZWN0aW9uOwotICAgICAgICAKKwogICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWMgPSAoY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uKWNoLmdldE1hbmFnZWRDb25uZWN0aW9uKCk7Ci0JbWMuYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7Ci0JaXNDbGVhbiA9IGZhbHNlOwotICAgICAgICAKKyAgICBtYy5hY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKKyAgICBpc0NsZWFuID0gZmFsc2U7CisKICAgICAgICAgY2guYXNzb2NpYXRlQ29ubmVjdGlvbihhY3R1YWxDb25uZWN0aW9uLCB0aGlzKTsKICAgICAgICAgLyoqCiAgICAgICAgICAqIFRoZSBleHBlY3RhdGlvbiBmcm9tIHRoZSBhYm92ZSBtZXRob2QgaXMgdGhhdCB0aGUgY29ubmVjdGlvbiBob2xkZXIKQEAgLTE2NSwzNCArMTY1LDM0IEBACiAgICAgICAgICAqIHRvIHRoZSBNYW5hZ2VkQ29ubmVjdGlvbiBpbnN0YW5jZSB3aXRoIHRoaXMgTWFuYWdlZENvbm5lY3Rpb24gaW5zdGFuY2UuCiAgICAgICAgICAqIEFueSBwcmV2aW91cyBzdGF0ZW1lbnRzIGFuZCByZXN1bHQgc2V0cyBhbHNvIG5lZWQgdG8gYmUgcmVtb3ZlZC4KICAgICAgICAgICovCi0gICAgICAgICAKKwogICAgICAgICAgaWYoYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSAhPSBudWxsKSB7CiAgICAgICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlLnNldEFjdGl2ZShmYWxzZSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgY2guc2V0QWN0aXZlKHRydWUpOwotICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gY2g7IAorICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gY2g7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogQXBwbGljYXRpb24gc2VydmVyIGNhbGxzIHRoaXMgbWV0aG9kIHRvIGZvcmNlIGFueSBjbGVhbnVwIG9uIHRoZSAKKyAgICAgKiBBcHBsaWNhdGlvbiBzZXJ2ZXIgY2FsbHMgdGhpcyBtZXRob2QgdG8gZm9yY2UgYW55IGNsZWFudXAgb24gdGhlCiAgICAgICogPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLiBUaGlzIG1ldGhvZCBjYWxscyB0aGUgaW52YWxpZGF0ZQogICAgICAqIG1ldGhvZCBvbiBhbGwgQ29ubmVjdGlvbkhhbmRsZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+LgotICAgICAqIAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm8gbW9yZSB2YWxpZAorICAgICAqCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBubyBtb3JlIHZhbGlkCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgY2xlYW51cCgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGNsZWFudXAiKTsKICAgICAgICAgfQogICAgICAgICBjaGVja0lmVmFsaWQoKTsKLSAgICAgICAgCisKICAgICAgICAgLyoqCiAgICAgICAgICAqIG1heSBuZWVkIHRvIHNldCB0aGUgYXV0b2NvbW1pdCB0byB0cnVlIGZvciB0aGUgbm9uLXBvb2xlZCBjYXNlLgogICAgICAgICAgKi8KICAgICAgICAgLy9HSkNJTlQKLQkvL2lmIChhY3R1YWxDb25uZWN0aW9uICE9IG51bGwpIHsKLQlpZiAoY29ubmVjdGlvblR5cGUgPT0gSVNOT1RBUE9PTEVEQ09OTkVDVElPTiApIHsKKyAgICAvL2lmIChhY3R1YWxDb25uZWN0aW9uICE9IG51bGwpIHsKKyAgICBpZiAoY29ubmVjdGlvblR5cGUgPT0gSVNOT1RBUE9PTEVEQ09OTkVDVElPTiApIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGlzb2xhdGlvbkxldmVsV2hlbkNsZWFuZWQgPSBhY3R1YWxDb25uZWN0aW9uLmdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCk7CiAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKQEAgLTIwMSwxNyArMjAxLDE3IEBACiAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpc0NsZWFuID0gdHJ1ZTsKLSAgICAgICAgCisKICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGhpcyBtZXRob2QgcmVtb3ZlcyBhbGwgdGhlIGNvbm5lY3Rpb24gaGFuZGxlcyBmcm9tIHRoZSB0YWJsZQogICAgICAqIG9mIGNvbm5lY3Rpb24gaGFuZGxlcyBhbmQgaW52YWxpZGF0ZXMgYWxsIG9mIHRoZW0gc28gdGhhdCBhbnkKICAgICAgKiBvcGVyYXRpb24gb24gdGhvc2UgY29ubmVjdGlvbiBoYW5kbGVzIHRocm93cyBhbiBleGNlcHRpb24uCiAgICAgICoKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGEgcHJvYmxlbSBpbiByZXRyaWV2aW5nCi0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAl0aGUgY29ubmVjdGlvbiBoYW5kbGVzCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhIHByb2JsZW0gaW4gcmV0cmlldmluZworICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNvbm5lY3Rpb24gaGFuZGxlcwogICAgICAqLwogICAgIHByaXZhdGUgdm9pZCBpbnZhbGlkYXRlQWxsQ29ubmVjdGlvbkhhbmRsZXMoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBTZXQgaGFuZGxlcyA9IGNvbm5lY3Rpb25IYW5kbGVzLmtleVNldCgpOwpAQCAtMjI2LDIyICsyMjYsMjIgQEAKICAgICAgICAgfQogICAgICAgICBjb25uZWN0aW9uSGFuZGxlcy5jbGVhcigpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIERlc3Ryb3lzIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIHRvIHRoZSB1bmRlcmx5aW5nIHJlc291cmNlIG1hbmFnZXIuCi0gICAgICogCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjbG9zaW5nIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uCisgICAgICoKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNsb3NpbmcgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGRlc3Ryb3kiKTsKICAgICAgICAgfQotCS8vR0pDSU5UCi0JaWYoaXNEZXN0cm95ZWQgPT0gdHJ1ZSkgewotCSAgICByZXR1cm47CQotCX0KKyAgICAvL0dKQ0lOVAorICAgIGlmKGlzRGVzdHJveWVkID09IHRydWUpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotCWFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOworICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgaWYoY29ubmVjdGlvblR5cGUgPT0gSVNYQUNPTk5FQ1RJT04gfHwgY29ubmVjdGlvblR5cGUgPT0gSVNQT09MRURDT05ORUNUSU9OKSB7CiAgICAgICAgICAgICAgICAgcGMuY2xvc2UoKTsKQEAgLTI1NSwyOCArMjU1LDI4IEBACiAgICAgICAgICAgICBpc0Rlc3Ryb3llZCA9IHRydWU7CiAgICAgICAgICAgICBwYXNzd2RDcmVkZW50aWFsID0gbnVsbDsKICAgICAgICAgICAgIGNvbm5lY3Rpb25IYW5kbGVzID0gbnVsbDsKLSAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGZvbGxvd2luZyBleGNlcHRpb24gaGFzIG9jY3VyZWQgZHVyaW5nIGRlc3Ryb3k6ICIgCisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBmb2xsb3dpbmcgZXhjZXB0aW9uIGhhcyBvY2N1cmVkIGR1cmluZyBkZXN0cm95OiAiCiAgICAgICAgICAgICAgICAgKyBzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICAgICAgaXNEZXN0cm95ZWQgPSB0cnVlOwogICAgICAgICBwYXNzd2RDcmVkZW50aWFsID0gbnVsbDsKICAgICAgICAgY29ubmVjdGlvbkhhbmRsZXMgPSBudWxsOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSBuZXcgY29ubmVjdGlvbiBoYW5kbGUgZm9yIHRoZSB1bmRlcmx5aW5nIHBoeXNpY2FsIAorICAgICAqIENyZWF0ZXMgYSBuZXcgY29ubmVjdGlvbiBoYW5kbGUgZm9yIHRoZSB1bmRlcmx5aW5nIHBoeXNpY2FsCiAgICAgICogY29ubmVjdGlvbiByZXByZXNlbnRlZCBieSB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCXN1YmplY3QJPGNvZGU+U3ViamVjdDwvY29kZT4gcGFyYW1ldGVyIG5lZWRlZCBmb3IgYXV0aGVudGljYXRpb24KLSAgICAgKiBAcGFyYW0JY3hSZXFJbmZvCTxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gY2FycmllcyB0aGUgdXNlciAKLSAgICAgKiAgICAgICAJICAgICAgICAgCWFuZCBwYXNzd29yZCByZXF1aXJlZCBmb3IgZ2V0dGluZyB0aGlzIGNvbm5lY3Rpb24uCi0gICAgICogQHJldHVybglDb25uZWN0aW9uCXRoZSBjb25uZWN0aW9uIGhhbmRsZSA8Y29kZT5PYmplY3Q8L2NvZGU+Ci0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZSAKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCXBoeXNpY2FsIGNvbm5lY3Rpb24gZnJvbSB0aGUgcG9vbGVkIGNvbm5lY3Rpb24gCi0gICAgICogQHRocm93cwlTZWN1cml0eUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhIG1pc21hdGNoIGJldHdlZW4gdGhlCi0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAlwYXNzd29yZCBjcmVkZW50aWFscyBvciByZWF1dGhlbnRpY2F0aW9uIGlzIHJlcXVlc3RlZAorICAgICAqIEBwYXJhbSAgICBzdWJqZWN0ICAgIDxjb2RlPlN1YmplY3Q8L2NvZGU+IHBhcmFtZXRlciBuZWVkZWQgZm9yIGF1dGhlbnRpY2F0aW9uCisgICAgICogQHBhcmFtICAgIGN4UmVxSW5mbyAgICA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IGNhcnJpZXMgdGhlIHVzZXIKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBwYXNzd29yZCByZXF1aXJlZCBmb3IgZ2V0dGluZyB0aGlzIGNvbm5lY3Rpb24uCisgICAgICogQHJldHVybiAgICBDb25uZWN0aW9uICAgIHRoZSBjb25uZWN0aW9uIGhhbmRsZSA8Y29kZT5PYmplY3Q8L2NvZGU+CisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGh5c2ljYWwgY29ubmVjdGlvbiBmcm9tIHRoZSBwb29sZWQgY29ubmVjdGlvbgorICAgICAqIEB0aHJvd3MgICAgU2VjdXJpdHlFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYSBtaXNtYXRjaCBiZXR3ZWVuIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQgY3JlZGVudGlhbHMgb3IgcmVhdXRoZW50aWNhdGlvbiBpcyByZXF1ZXN0ZWQKICAgICAgKi8KLSAgICBwdWJsaWMgT2JqZWN0IGdldENvbm5lY3Rpb24oU3ViamVjdCBzdWIsIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mbyBjeFJlcUluZm8pIAorICAgIHB1YmxpYyBPYmplY3QgZ2V0Q29ubmVjdGlvbihTdWJqZWN0IHN1YiwgamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxSW5mbykKICAgICAgICAgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBnZXRDb25uZWN0aW9uIik7CkBAIC0yODQsMTQgKzI4NCwxNCBAQAogICAgICAgICBjaGVja0lmVmFsaWQoKTsKICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mbyBjeFJlcXVlc3RJbmZvID0gKGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm8pIGN4UmVxSW5mbzsKICAgICAgICAgUGFzc3dvcmRDcmVkZW50aWFsIHBhc3N3ZENyZWQgPSBTZWN1cml0eVV0aWxzLmdldFBhc3N3b3JkQ3JlZGVudGlhbCh0aGlzLm1jZiwgc3ViLCBjeFJlcXVlc3RJbmZvKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIGlmKFNlY3VyaXR5VXRpbHMuaXNQYXNzd29yZENyZWRlbnRpYWxFcXVhbCh0aGlzLnBhc3N3ZENyZWRlbnRpYWwsIHBhc3N3ZENyZWQpID09IGZhbHNlKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgamFrYXJ0YS5yZXNvdXJjZS5zcGkuU2VjdXJpdHlFeGNlcHRpb24oIlJlLWF1dGhlbnRpY2F0aW9uIG5vdCBzdXBwb3J0ZWQiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAvL0dKQ0lOVAogICAgICAgICBnZXRBY3R1YWxDb25uZWN0aW9uKCk7Ci0gCisKICAgICAgICAgLyoqCiAgICAgICAgICAqIFRoZSBmb2xsb3dpbmcgY29kZSBpbiB0aGUgaWYgc3RhdGVtZW50IGZpcnN0IGNoZWNrcyBpZiB0aGlzIE1hbmFnZWRDb25uZWN0aW9uCiAgICAgICAgICAqIGlzIGNsZWFuIG9yIG5vdC4gSWYgaXQgaXMsIGl0IHJlc2V0cyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsIHRvIHdoYXQKQEAgLTMwMSwyOCArMzAxLDI4IEBACiAgICAgICAgIGlmKGlzQ2xlYW4pIHsKICAgICAgICAgICAgICgoY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSltY2YpLnJlc2V0SXNvbGF0aW9uKHRoaXMsIGlzb2xhdGlvbkxldmVsV2hlbkNsZWFuZWQpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAgCisKKwogICAgICAgICBDb25uZWN0aW9uSG9sZGVyIGNvbm5Ib2xkZXJPYmplY3QgPSBuZXcgQ29ubmVjdGlvbkhvbGRlcihhY3R1YWxDb25uZWN0aW9uLCB0aGlzKTsKLQlpc0NsZWFuPWZhbHNlOwotICAgICAgICAKKyAgICBpc0NsZWFuPWZhbHNlOworCiAgICAgICAgIGlmKGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgIT0gbnVsbCkgewogICAgICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZS5zZXRBY3RpdmUoZmFsc2UpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGNvbm5Ib2xkZXJPYmplY3Quc2V0QWN0aXZlKHRydWUpOwogICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gY29ubkhvbGRlck9iamVjdDsKLSAKKwogICAgICAgICByZXR1cm4gY29ubkhvbGRlck9iamVjdDsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIGFuIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IGluc3RhbmNlLiBUaGUgPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gaW50ZXJmYWNlCi0gICAgICogaXMgdXNlZCBieSB0aGUgY29udGFpbmVyIHRvIG1hbmFnZSBsb2NhbCB0cmFuc2FjdGlvbnMgZm9yIGEgUk0gaW5zdGFuY2UuIAorICAgICAqIGlzIHVzZWQgYnkgdGhlIGNvbnRhaW5lciB0byBtYW5hZ2UgbG9jYWwgdHJhbnNhY3Rpb25zIGZvciBhIFJNIGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICogQHJldHVybiAgICA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCiAgICAgICovCiAgICAgcHVibGljIGpha2FydGEucmVzb3VyY2Uuc3BpLkxvY2FsVHJhbnNhY3Rpb24gZ2V0TG9jYWxUcmFuc2FjdGlvbigpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC0zMzEsMTMgKzMzMSwxMyBAQAogICAgICAgICBjaGVja0lmVmFsaWQoKTsKICAgICAgICAgcmV0dXJuIG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuTG9jYWxUcmFuc2FjdGlvbih0aGlzKTsKICAgICB9Ci0gICAgIAorCiAgICAgLyoqCi0gICAgICogR2V0cyB0aGUgbG9nIHdyaXRlciBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuIAorICAgICAqIEdldHMgdGhlIGxvZyB3cml0ZXIgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgCi0gICAgICoJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICogQHJldHVybiAgICA8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyAgICAgKiAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKiBAc2VlIDxjb2RlPnNldExvZ1dyaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgUHJpbnRXcml0ZXIgZ2V0TG9nV3JpdGVyKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKQEAgLTM0NSw0NiArMzQ1LDQ2IEBACiAgICAgICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGdldExvZ1dyaXRlciIpOwogICAgICAgICB9CiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gbG9nV3JpdGVyOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIEdldHMgdGhlIG1ldGFkYXRhIGluZm9ybWF0aW9uIGZvciB0aGlzIGNvbm5lY3Rpb24ncyB1bmRlcmx5aW5nIEVJUyAKLSAgICAgKiByZXNvdXJjZSBtYW5hZ2VyIGluc3RhbmNlLiAKKyAgICAgKiBHZXRzIHRoZSBtZXRhZGF0YSBpbmZvcm1hdGlvbiBmb3IgdGhpcyBjb25uZWN0aW9uJ3MgdW5kZXJseWluZyBFSVMKKyAgICAgKiByZXNvdXJjZSBtYW5hZ2VyIGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICogQHJldHVybiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCiAgICAgICovCiAgICAgcHVibGljIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEgZ2V0TWV0YURhdGEoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBnZXRNZXRhRGF0YSIpOwogICAgICAgICB9CiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhKHRoaXMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFJldHVybnMgYW4gPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UuIAorICAgICAqIFJldHVybnMgYW4gPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgb3IKLSAgICAgKgkJCQkJdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUgCi0gICAgICoJCQkJCTxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlOb3RTdXBwb3J0ZWRFeGNlcHRpb24JaWYgdW5kZXJseWluZyBkYXRhc291cmNlIGlzIG5vdCBhbgotICAgICAqCQkJCQk8Y29kZT5YQURhdGFTb3VyY2U8L2NvZGU+CisgICAgICogQHJldHVybiAgICA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIG9yCisgICAgICogICAgICAgICAgICAgICAgICAgIHRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBOb3RTdXBwb3J0ZWRFeGNlcHRpb24gICAgaWYgdW5kZXJseWluZyBkYXRhc291cmNlIGlzIG5vdCBhbgorICAgICAqICAgICAgICAgICAgICAgICAgICA8Y29kZT5YQURhdGFTb3VyY2U8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFhBUmVzb3VyY2UgZ2V0WEFSZXNvdXJjZSgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGdldFhBUmVzb3VyY2UiKTsKICAgICAgICAgfQogICAgICAgICBjaGVja0lmVmFsaWQoKTsKLSAgICAgICAgCisKICAgICAgICAgaWYoY29ubmVjdGlvblR5cGUgPT0gSVNYQUNPTk5FQ1RJT04pIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgaWYoeGFyID09IG51bGwpIHsKLQkJICAgIC8qKgorICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgICAgICAqIFVzaW5nIHRoZSB3cmFwcGVyIFhBUmVzb3VyY2UuCiAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgICAgICB4YXIgPSBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLlhBUmVzb3VyY2VJbXBsKCgoWEFDb25uZWN0aW9uKXBjKS5nZXRYQVJlc291cmNlKCksIHRoaXMpOwpAQCAtMzk3LDE2ICszOTcsMTYgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkNhbm5vdCBnZXQgYW4gWEFSZXNvdXJjZSBmcm9tIGEgbm9uIFhBIGNvbm5lY3Rpb24iKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJlbW92ZXMgYW4gYWxyZWFkeSByZWdpc3RlcmVkIGNvbm5lY3Rpb24gZXZlbnQgbGlzdGVuZXIgZnJvbSB0aGUKICAgICAgKiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbGlzdGVuZXIJPGNvZGU+Q29ubmVjdGlvbkV2ZW50TGlzdGVuZXI8L2NvZGU+IHRvIGJlIHJlbW92ZWQKKyAgICAgKiBAcGFyYW0gICAgbGlzdGVuZXIgICAgPGNvZGU+Q29ubmVjdGlvbkV2ZW50TGlzdGVuZXI8L2NvZGU+IHRvIGJlIHJlbW92ZWQKICAgICAgKiBAc2VlIDxjb2RlPmFkZENvbm5lY3Rpb25FdmVudExpc3RlbmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJlbW92ZUNvbm5lY3Rpb25FdmVudExpc3RlbmVyKENvbm5lY3Rpb25FdmVudExpc3RlbmVyIGxpc3RlbmVyKSB7Ci0JbGlzdGVuZXIgPSBudWxsOworICAgIGxpc3RlbmVyID0gbnVsbDsKICAgICB9CiAKICAgICAvKioKQEAgLTQxNSw3ICs0MTUsNyBAQAogICAgICAqIExvY2FsVHJhbnNhY3Rpb24gb2JqZWN0IHdoZW4gaXRzIGJlZ2luKCkgbWV0aG9kIGlzIGNhbGxlZC4KICAgICAgKi8KICAgICB2b2lkIHRyYW5zYWN0aW9uU3RhcnRlZCgpIHsKLQl0cmFuc2FjdGlvbkluUHJvZ3Jlc3MgPSB0cnVlOwkKKyAgICB0cmFuc2FjdGlvbkluUHJvZ3Jlc3MgPSB0cnVlOwogICAgIH0KIAogICAgIC8qKgpAQCAtNDI0LDE2ICs0MjQsMTYgQEAKICAgICAgKiBMb2NhbFRyYW5zYWN0aW9uIG9iamVjdCB3aGVuIGl0cyBlbmQoKSBtZXRob2QgaXMgY2FsbGVkLgogICAgICAqLwogICAgIHZvaWQgdHJhbnNhY3Rpb25Db21wbGV0ZWQoKSB7Ci0JdHJhbnNhY3Rpb25JblByb2dyZXNzID0gZmFsc2U7Ci0JaWYoY29ubmVjdGlvblR5cGUgPT0gSVNQT09MRURDT05ORUNUSU9OIHx8IGNvbm5lY3Rpb25UeXBlID09IElTWEFDT05ORUNUSU9OKSB7CisgICAgdHJhbnNhY3Rpb25JblByb2dyZXNzID0gZmFsc2U7CisgICAgaWYoY29ubmVjdGlvblR5cGUgPT0gSVNQT09MRURDT05ORUNUSU9OIHx8IGNvbm5lY3Rpb25UeXBlID09IElTWEFDT05ORUNUSU9OKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGlzb2xhdGlvbkxldmVsV2hlbkNsZWFuZWQgPSBhY3R1YWxDb25uZWN0aW9uLmdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCk7CiAgICAgICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgICAgICAvL2NoZWNrIHdoYXQgdG8gZG8gaW4gdGhpcyBjYXNlISEKLQkJX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMubm90Z290X3R4X2lzb2x2bCIpOworICAgICAgICAgICAgLy9jaGVjayB3aGF0IHRvIGRvIGluIHRoaXMgY2FzZSEhCisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLm5vdGdvdF90eF9pc29sdmwiKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotCSAgICB0cnkgeworCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgYWN0dWFsQ29ubmVjdGlvbi5jbG9zZSgpOwogICAgICAgICAgICAgICAgIGFjdHVhbENvbm5lY3Rpb24gPSBudWxsOwogICAgICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewpAQCAtNDQxLDcgKzQ0MSw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotCSAgICAgICAgCisKICAgICAgICAgaXNDbGVhbiA9IHRydWU7CiAKICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7CkBAIC00NTMsMjggKzQ1MywyOCBAQAogICAgICAqIG9yIG5vdC4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc1RyYW5zYWN0aW9uSW5Qcm9ncmVzcygpIHsKLQlyZXR1cm4gdHJhbnNhY3Rpb25JblByb2dyZXNzOworICAgIHJldHVybiB0cmFuc2FjdGlvbkluUHJvZ3Jlc3M7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgbG9nIHdyaXRlciBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jb3V0CTxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhpcwotICAgICAqCQkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKiBAcGFyYW0gICAgb3V0ICAgIDxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAqICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKiBAc2VlIDxjb2RlPmdldExvZ1dyaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRMb2dXcml0ZXIoUHJpbnRXcml0ZXIgb3V0KSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBjaGVja0lmVmFsaWQoKTsKICAgICAgICAgbG9nV3JpdGVyID0gb3V0OwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFRoaXMgbWV0aG9kIGRldGVybWluZXMgdGhlIHR5cGUgb2YgdGhlIGNvbm5lY3Rpb24gYmVpbmcgaGVsZCAKKyAgICAgKiBUaGlzIG1ldGhvZCBkZXRlcm1pbmVzIHRoZSB0eXBlIG9mIHRoZSBjb25uZWN0aW9uIGJlaW5nIGhlbGQKICAgICAgKiBpbiB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPi4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JcG9vbGVkQ29ubgk8Y29kZT5Qb29sZWRDb25uZWN0aW9uPC9jb2RlPgotICAgICAqIEByZXR1cm4JY29ubmVjdGlvbiB0eXBlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgcG9vbGVkQ29ubiAgICA8Y29kZT5Qb29sZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgY29ubmVjdGlvbiB0eXBlCiAgICAgICovCiAgICAgcHJpdmF0ZSBpbnQgZ2V0Q29ubmVjdGlvblR5cGUoUG9vbGVkQ29ubmVjdGlvbiBwb29sZWRDb25uKSB7CiAgICAgICAgIGlmKHBvb2xlZENvbm4gPT0gbnVsbCkgewpAQCAtNDg1LDIyICs0ODUsMjIgQEAKICAgICAgICAgICAgIHJldHVybiBJU1BPT0xFRENPTk5FQ1RJT047CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlIHRoYXQgCisgICAgICogUmV0dXJucyB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZSB0aGF0CiAgICAgICogY3JlYXRlZCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZSB0aGF0IGNyZWF0ZWQgdGhpcwotICAgICAqCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UgdGhhdCBjcmVhdGVkIHRoaXMKKyAgICAgKiAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCiAgICAgICovCiAgICAgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IGdldE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSgpIHsKICAgICAgICAgcmV0dXJuIChjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KW1jZjsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBhY3R1YWwgc3FsIGNvbm5lY3Rpb24gZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+LiAKKyAgICAgKiBSZXR1cm5zIHRoZSBhY3R1YWwgc3FsIGNvbm5lY3Rpb24gZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+LgogICAgICAqCi0gICAgICogQHJldHVybgl0aGUgcGh5c2ljYWwgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHRoZSBwaHlzaWNhbCA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPgogICAgICAqLwogICAgIC8vR0pDSU5UCiAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBnZXRBY3R1YWxDb25uZWN0aW9uKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKQEAgLTUwOSw4ICs1MDksOCBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBpZihhY3R1YWxDb25uZWN0aW9uID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgYWN0dWFsQ29ubmVjdGlvbiA9IHBjLmdldENvbm5lY3Rpb24oKTsKLQkJfQotCQkKKyAgICAgICAgfQorCiAgICAgICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7CiAgICAgICAgICAgICAgICAgc3FsZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwpAQCAtNTE4LDgxICs1MTgsODEgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gYWN0dWFsQ29ubmVjdGlvbjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgCi0gICAgICoJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEByZXR1cm4gICAgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAqICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKICAgICAgKi8KICAgICBQYXNzd29yZENyZWRlbnRpYWwgZ2V0UGFzc3dvcmRDcmVkZW50aWFsKCkgewogICAgICAgICByZXR1cm4gcGFzc3dkQ3JlZGVudGlhbDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDaGVja3MgaWYgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaXMgdmFsaWQgb3Igbm90IGFuZCB0aHJvd3MgYW4KICAgICAgKiBleGNlcHRpb24gaWYgaXQgaXMgbm90IHZhbGlkLiBBIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpcyBub3QgdmFsaWQgaWYKICAgICAgKiBkZXN0cm95IGhhcyBub3QgYmVlbiBjYWxsZWQgYW5kIG5vIHBoeXNpY2FsIGNvbm5lY3Rpb24gZXJyb3IgaGFzCiAgICAgICogb2NjdXJyZWQgcmVuZGVyaW5nIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIHVudXNhYmxlLgogICAgICAqCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiA8Y29kZT5kZXN0cm95PC9jb2RlPiBoYXMgYmVlbiBjYWxsZWQgb24gdGhpcyAKLSAgICAgKgkJCQkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlIG9yIGlmIGEgCi0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAlwaHlzaWNhbCBjb25uZWN0aW9uIGVycm9yIG9jY3VycmVkIHJlbmRlcmluZyBpdCB1bnVzYWJsZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgPGNvZGU+ZGVzdHJveTwvY29kZT4gaGFzIGJlZW4gY2FsbGVkIG9uIHRoaXMKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlIG9yIGlmIGEKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoeXNpY2FsIGNvbm5lY3Rpb24gZXJyb3Igb2NjdXJyZWQgcmVuZGVyaW5nIGl0IHVudXNhYmxlCiAgICAgICovCiAgICAgLy9HSkNJTlQKICAgICB2b2lkIGNoZWNrSWZWYWxpZCgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGlzRGVzdHJveWVkID09IHRydWUgfHwgaXNVc2FibGUgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhpcyBNYW5hZ2VkQ29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgdGhlIHBoeXNpY2FsICIgKyAKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhpcyBNYW5hZ2VkQ29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgdGhlIHBoeXNpY2FsICIgKwogICAgICAgICAgICAgICAgICJjb25uZWN0aW9uIGlzIG5vdCB1c2FibGUuIik7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIDxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHdoZW4gaXRzIGNsb3NlIG1ldGhvZCBpcwogICAgICAqIGNhbGxlZC4gVGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UgIGludmFsaWRhdGVzIHRoZSBjb25uZWN0aW9uIGhhbmRsZQogICAgICAqIGFuZCBzZW5kcyBhIENPTk5FQ1RJT05fQ0xPU0VEIGV2ZW50IHRvIGFsbCB0aGUgcmVnaXN0ZXJlZCBldmVudCBsaXN0ZW5lcnMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZQlFeGNlcHRpb24gdGhhdCBtYXkgaGF2ZSBvY2N1cmVkIHdoaWxlIGNsb3NpbmcgdGhlIGNvbm5lY3Rpb24gaGFuZGxlCi0gICAgICogQHBhcmFtCWNvbm5Ib2xkZXJPYmplY3QJPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdGhhdCBoYXMgYmVlbiBjbG9zZWQKLSAgICAgKiBAdGhyb3dzCVNRTEV4Y2VwdGlvbglpbiBjYXNlIGNsb3NpbmcgdGhlIHNxbCBjb25uZWN0aW9uIGdvdCBvdXQgb2YKLSAgICAgKiAgICAgICAgIAkgICAgICAgICAgICAJPGNvZGU+Z2V0Q29ubmVjdGlvbjwvY29kZT4gb24gdGhlIHVuZGVybHlpbmcgCi0gICAgICoJCQkJPGNvZGU+UG9vbGVkQ29ubmVjdGlvbjwvY29kZT4gdGhyb3dzIGFuIGV4Y2VwdGlvbgorICAgICAqIEBwYXJhbSAgICBlICAgIEV4Y2VwdGlvbiB0aGF0IG1heSBoYXZlIG9jY3VyZWQgd2hpbGUgY2xvc2luZyB0aGUgY29ubmVjdGlvbiBoYW5kbGUKKyAgICAgKiBAcGFyYW0gICAgY29ubkhvbGRlck9iamVjdCAgICA8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0aGF0IGhhcyBiZWVuIGNsb3NlZAorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIGluIGNhc2UgY2xvc2luZyB0aGUgc3FsIGNvbm5lY3Rpb24gZ290IG91dCBvZgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZT5nZXRDb25uZWN0aW9uPC9jb2RlPiBvbiB0aGUgdW5kZXJseWluZworICAgICAqICAgICAgICAgICAgICAgIDxjb2RlPlBvb2xlZENvbm5lY3Rpb248L2NvZGU+IHRocm93cyBhbiBleGNlcHRpb24KICAgICAgKi8KICAgICB2b2lkIGNvbm5lY3Rpb25DbG9zZWQoRXhjZXB0aW9uIGUsIENvbm5lY3Rpb25Ib2xkZXIgY29ubkhvbGRlck9iamVjdCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICAgIGNvbm5Ib2xkZXJPYmplY3QuaW52YWxpZGF0ZSgpOwotICAgICAgICAKKwogICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKLSAgICAgICAgCisKICAgICAgICAgY2Uuc2V0Q29ubmVjdGlvbkhhbmRsZShjb25uSG9sZGVyT2JqZWN0KTsKICAgICAgICAgbGlzdGVuZXIuY29ubmVjdGlvbkNsb3NlZChjZSk7Ci0JCisKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIDxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHdoZW4gaXQgZGV0ZWN0cyBhIGNvbm5lY2lvbgogICAgICAqIHJlbGF0ZWQgZXJyb3IuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZQlFeGNlcHRpb24gdGhhdCBoYXMgb2NjdXJyZWQgZHVyaW5nIGFuIG9wZXJhdGlvbiBvbiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbgotICAgICAqIEBwYXJhbQljb25uSG9sZGVyT2JqZWN0CTxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRoYXQgZGV0ZWN0ZWQgdGhlIHBoeXNpY2FsCi0gICAgICoJCQkJCWNvbm5lY3Rpb24gZXJyb3IKKyAgICAgKiBAcGFyYW0gICAgZSAgICBFeGNlcHRpb24gdGhhdCBoYXMgb2NjdXJyZWQgZHVyaW5nIGFuIG9wZXJhdGlvbiBvbiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbgorICAgICAqIEBwYXJhbSAgICBjb25uSG9sZGVyT2JqZWN0ICAgIDxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRoYXQgZGV0ZWN0ZWQgdGhlIHBoeXNpY2FsCisgICAgICogICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gZXJyb3IKICAgICAgKi8KLSAgICB2b2lkIGNvbm5lY3Rpb25FcnJvck9jY3VycmVkKEV4Y2VwdGlvbiBlLCAKKyAgICB2b2lkIGNvbm5lY3Rpb25FcnJvck9jY3VycmVkKEV4Y2VwdGlvbiBlLAogICAgICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25Ib2xkZXIgY29ubkhvbGRlck9iamVjdCkgewotCSAgICAKKwogICAgICAgICAgQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXIgY2VsID0gdGhpcy5saXN0ZW5lcjsKICAgICAgICAgIENvbm5lY3Rpb25FdmVudCBjZSA9IG51bGw7CiAgICAgICAgICBjZSA9IGUgPT0gbnVsbCA/IG5ldyBDb25uZWN0aW9uRXZlbnQodGhpcywgQ29ubmVjdGlvbkV2ZW50LkNPTk5FQ1RJT05fRVJST1JfT0NDVVJSRUQpCiAgICAgICAgICAgICAgICAgICAgIDogbmV3IENvbm5lY3Rpb25FdmVudCh0aGlzLCBDb25uZWN0aW9uRXZlbnQuQ09OTkVDVElPTl9FUlJPUl9PQ0NVUlJFRCwgZSk7CiAgICAgICAgICBpZiAoY29ubkhvbGRlck9iamVjdCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgY2Uuc2V0Q29ubmVjdGlvbkhhbmRsZShjb25uSG9sZGVyT2JqZWN0KTsKLSAgICAgICAgIH0gICAgCisgICAgICAgICB9CiAKICAgICAgICAgIGNlbC5jb25uZWN0aW9uRXJyb3JPY2N1cnJlZChjZSk7CiAgICAgICAgICBpc1VzYWJsZSA9IGZhbHNlOwogICAgIH0KLSAgICAKLSAgICAKLSAgICAKKworCisKICAgICAvKioKICAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IG9iamVjdCB3aGVuIGl0cyBzdGFydCBtZXRob2QKICAgICAgKiBoYXMgYmVlbiBpbnZva2VkLgpAQCAtNjA2LDcgKzYwNiw3IEBACiAgICAgICAgICAgICBjb25uZWN0aW9uRXJyb3JPY2N1cnJlZChlLCBudWxsKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gb2JqZWN0IHdoZW4gaXRzIGVuZCBtZXRob2QKICAgICAgKiBoYXMgYmVlbiBpbnZva2VkLgpAQCAtNjIwLDcgKzYyMCw3IEBACiAgICAgICAgICAgICBjb25uZWN0aW9uRXJyb3JPY2N1cnJlZChlLCBudWxsKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSBhIENvbm5lY3Rpb24gSGFuZGxlIHRvIGNoZWNrIGlmIGl0IGlzCiAgICAgICogdGhlIGFjdGl2ZSBDb25uZWN0aW9uIEhhbmRsZS4gSWYgaXQgaXMgbm90IHRoZSBhY3RpdmUgQ29ubmVjdGlvbgpAQCAtNjI5LDI0ICs2MjksMjQgQEAKICAgICAgKiBDb25uZWN0aW9uIEhhbmRsZSBvYmplY3QgdG8gdGhpcyBvYmplY3QgaWYgdGhlIGFjdGl2ZSBDb25uZWN0aW9uCiAgICAgICogSGFuZGxlIGlzIG51bGwuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JY2gJPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdGhhdCByZXF1ZXN0cyB0aGlzCi0gICAgICoJCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2Ugd2hldGhlcgotICAgICAqCQkJaXQgY2FuIGJlIGFjdGl2ZSBvciBub3QKLSAgICAgKiBAdGhyb3dzCVNRTEV4Y2VwdGlvbglpbiBjYXNlIHRoZSBwaHlzaWNhbCBpcyBub3QgdmFsaWQgb3IKLSAgICAgKgkJCQl0aGVyZSBpcyBhbHJlYWR5IGFuIGFjdGl2ZSBjb25uZWN0aW9uIGhhbmRsZQorICAgICAqIEBwYXJhbSAgICBjaCAgICA8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0aGF0IHJlcXVlc3RzIHRoaXMKKyAgICAgKiAgICAgICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZSB3aGV0aGVyCisgICAgICogICAgICAgICAgICBpdCBjYW4gYmUgYWN0aXZlIG9yIG5vdAorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIGluIGNhc2UgdGhlIHBoeXNpY2FsIGlzIG5vdCB2YWxpZCBvcgorICAgICAqICAgICAgICAgICAgICAgIHRoZXJlIGlzIGFscmVhZHkgYW4gYWN0aXZlIGNvbm5lY3Rpb24gaGFuZGxlCiAgICAgICovCi0gICAgIAorCiAgICAgdm9pZCBjaGVja0lmQWN0aXZlKENvbm5lY3Rpb25Ib2xkZXIgY2gpIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgICBpZihpc0Rlc3Ryb3llZCA9PSB0cnVlIHx8IGlzVXNhYmxlID09IGZhbHNlKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uKCJUaGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdXNhYmxlIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYoYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9PSBudWxsKSB7CiAgICAgICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gY2g7CiAgICAgICAgICAgICBjaC5zZXRBY3RpdmUodHJ1ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYoYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSAhPSBjaCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gaGFuZGxlIGNhbm5vdCBiZSB1c2VkIGFzIGFub3RoZXIgY29ubmVjdGlvbiBpcyBjdXJyZW50bHkgYWN0aXZlIik7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhLmphdmEKaW5kZXggMjBmMDNhYS4uZjY1MGQ0MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhLmphdmEKQEAgLTI1LDggKzI1LDggQEAKIC8qKgogICogPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YTwvY29kZT4gaW1wbGVtZW50YXRpb24gZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wOC8wMwotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDgvMDMKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIHB1YmxpYyBjbGFzcyBNYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YSB7CiAKQEAgLTQxLDgxICs0MSw4MSBAQAogICAgIC8qKgogICAgICAqIENvbnN0cnVjdG9yIGZvciA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhPC9jb2RlPgogICAgICAqCi0gICAgICogQHBhcmFtCW1jCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CWlmIGdldHRpbmcgdGhlIERhdGFiYXNlTWV0YURhdGEgb2JqZWN0IGZhaWxzCisgICAgICogQHBhcmFtICAgIG1jICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+ICAgIGlmIGdldHRpbmcgdGhlIERhdGFiYXNlTWV0YURhdGEgb2JqZWN0IGZhaWxzCiAgICAgICovCiAgICAgcHVibGljIE1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEoTWFuYWdlZENvbm5lY3Rpb24gbWMpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICB0aGlzLm1jID0gbWM7CiAgICAgICAgICAgICBkbWQgPSBtYy5nZXRBY3R1YWxDb25uZWN0aW9uKCkuZ2V0TWV0YURhdGEoKTsKICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19tZCIpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19tZCIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgcHJvZHVjdCBuYW1lIG9mIHRoZSB1bmRlcmx5aW5nIEVJUyBpbnN0YW5jZSBjb25uZWN0ZWQKICAgICAgKiB0aHJvdWdoIHRoZSBNYW5hZ2VkQ29ubmVjdGlvbi4KICAgICAgKgotICAgICAqIEByZXR1cm4JUHJvZHVjdCBuYW1lIG9mIHRoZSBFSVMgaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgUHJvZHVjdCBuYW1lIG9mIHRoZSBFSVMgaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RUlTUHJvZHVjdE5hbWUoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmV0dXJuIGRtZC5nZXREYXRhYmFzZVByb2R1Y3ROYW1lKCk7CiAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZWlzX3Byb2RuYW1lIiwgc3FsZSk7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2Vpc19wcm9kbmFtZSIsIHNxbGUpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgcHJvZHVjdCB2ZXJzaW9uIG9mIHRoZSB1bmRlcmx5aW5nIEVJUyBpbnN0YW5jZSBjb25uZWN0ZWQKICAgICAgKiB0aHJvdWdoIHRoZSBNYW5hZ2VkQ29ubmVjdGlvbi4KICAgICAgKgotICAgICAqIEByZXR1cm4JUHJvZHVjdCB2ZXJzaW9uIG9mIHRoZSBFSVMgaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgUHJvZHVjdCB2ZXJzaW9uIG9mIHRoZSBFSVMgaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RUlTUHJvZHVjdFZlcnNpb24oKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmV0dXJuIGRtZC5nZXREYXRhYmFzZVByb2R1Y3RWZXJzaW9uKCk7CiAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZWlzX3Byb2R2ZXJzIiwgc3FsZSk7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2Vpc19wcm9kdmVycyIsIHNxbGUpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpLCBzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIG1heGltdW0gbGltaXQgb24gbnVtYmVyIG9mIGFjdGl2ZSBjb25jdXJyZW50IGNvbm5lY3Rpb25zCiAgICAgICogdGhhdCBhbiBFSVMgaW5zdGFuY2UgY2FuIHN1cHBvcnQgYWNyb3NzIGNsaWVudCBwcm9jZXNzZXMuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCU1heGltdW0gbGltaXQgZm9yIG51bWJlciBvZiBhY3RpdmUgY29uY3VycmVudCBjb25uZWN0aW9ucwotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBNYXhpbXVtIGxpbWl0IGZvciBudW1iZXIgb2YgYWN0aXZlIGNvbmN1cnJlbnQgY29ubmVjdGlvbnMKKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0TWF4Q29ubmVjdGlvbnMoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmV0dXJuIGRtZC5nZXRNYXhDb25uZWN0aW9ucygpOwogICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2Vpc19tYXhjb25uIik7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2Vpc19tYXhjb25uIik7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBuYW1lIG9mIHRoZSB1c2VyIGFzc29jaWF0ZWQgd2l0aCB0aGUgTWFuYWdlZENvbm5lY3Rpb24gaW5zdGFuY2UuIFRoZSBuYW1lCiAgICAgICogY29ycmVzcG9uZHMgdG8gdGhlIHJlc291cmNlIHByaW5jaXBhbCB1bmRlciB3aG9zZSB3aG9zZSBzZWN1cml0eSBjb250ZXh0LCBhIGNvbm5lY3Rpb24KICAgICAgKiB0byB0aGUgRUlTIGluc3RhbmNlIGhhcyBiZWVuIGVzdGFibGlzaGVkLgogICAgICAqCi0gICAgICogQHJldHVybgluYW1lIG9mIHRoZSB1c2VyCi0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIG5hbWUgb2YgdGhlIHVzZXIKKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VXNlck5hbWUoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBqYWthcnRhLnJlc291cmNlLnNwaS5zZWN1cml0eS5QYXNzd29yZENyZWRlbnRpYWwgcGMgPSBtYy5nZXRQYXNzd29yZENyZWRlbnRpYWwoKTsKICAgICAgICAgaWYocGMgIT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuIHBjLmdldFVzZXJOYW1lKCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIG1jLmdldE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSgpLmdldFVzZXIoKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL1hBUmVzb3VyY2VJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL1hBUmVzb3VyY2VJbXBsLmphdmEKaW5kZXggZGFkMWQ3Ny4uNDgyZjMzMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9YQVJlc291cmNlSW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvWEFSZXNvdXJjZUltcGwuamF2YQpAQCAtMjQsMTQ4ICsyNCwxNDggQEAKIC8qKgogICogPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gd3JhcHBlciBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA4LzIzCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wOC8yMworICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogcHVibGljIGNsYXNzIFhBUmVzb3VyY2VJbXBsIGltcGxlbWVudHMgWEFSZXNvdXJjZSB7CiAKICAgICBYQVJlc291cmNlIHhhcjsKICAgICBNYW5hZ2VkQ29ubmVjdGlvbiBtYzsKLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdG9yIGZvciBYQVJlc291cmNlSW1wbAogICAgICAqCi0gICAgICogQHBhcmFtCXhhcgk8Y29kZT5YQVJlc291cmNlPC9jb2RlPgotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgeGFyICAgIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+CisgICAgICogQHBhcmFtICAgIG1jICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBYQVJlc291cmNlSW1wbChYQVJlc291cmNlIHhhciwgTWFuYWdlZENvbm5lY3Rpb24gbWMpIHsKICAgICAgICAgdGhpcy54YXIgPSB4YXI7CiAgICAgICAgIHRoaXMubWMgPSBtYzsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb21taXQgdGhlIGdsb2JhbCB0cmFuc2FjdGlvbiBzcGVjaWZpZWQgYnkgeGlkLgogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCi0gICAgICogQHBhcmFtCW9uZVBoYXNlCUlmIHRydWUsIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHNob3VsZCB1c2UgYSBvbmUtcGhhc2UgY29tbWl0IAotICAgICAqICAgICAgIAkgICAgICAgIAlwcm90b2NvbCB0byBjb21taXQgdGhlIHdvcmsgZG9uZSBvbiBiZWhhbGYgb2YgeGlkLgorICAgICAqIEBwYXJhbSAgICB4aWQgICAgQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgorICAgICAqIEBwYXJhbSAgICBvbmVQaGFzZSAgICBJZiB0cnVlLCB0aGUgcmVzb3VyY2UgbWFuYWdlciBzaG91bGQgdXNlIGEgb25lLXBoYXNlIGNvbW1pdAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICBwcm90b2NvbCB0byBjb21taXQgdGhlIHdvcmsgZG9uZSBvbiBiZWhhbGYgb2YgeGlkLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNvbW1pdChYaWQgeGlkLCBib29sZWFuIG9uZVBoYXNlKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICAvL3RoZSBtYy50cmFuc2FjdGlvbkNvbXBsZXRlZCBjYWxsIGhhcyBjb21lIGhlcmUgYmVjYXN1ZQotCS8vdGhlIHRyYW5zYWN0aW9uICphY3R1YWxseSogY29tcGxldGVzIGFmdGVyIHRoZSBmbG93Ci0JLy9yZWFjaGVzIGhlcmUuIHRoZSBlbmQoKSBtZXRob2QgbWlnaHQgbm90IHJlYWxseSBzaWduYWwKLQkvL2NvbXBsZXRpb24gb2YgdHJhbnNhY3Rpb24gaW4gY2FzZSB0aGUgdHJhbnNhY3Rpb24gaXMKLQkvL3N1c3BlbmRlZC4gSW4gY2FzZSBvZiB0cmFuc2FjdGlvbiBzdXNwZW5zaW9uLCB0aGUgZW5kCi0JLy9tZXRob2QgaXMgc3RpbGwgY2FsbGVkIGJ5IHRoZSB0cmFuc2FjdGlvbiBtYW5hZ2VyCi0JbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKKyAgICAvL3RoZSB0cmFuc2FjdGlvbiAqYWN0dWFsbHkqIGNvbXBsZXRlcyBhZnRlciB0aGUgZmxvdworICAgIC8vcmVhY2hlcyBoZXJlLiB0aGUgZW5kKCkgbWV0aG9kIG1pZ2h0IG5vdCByZWFsbHkgc2lnbmFsCisgICAgLy9jb21wbGV0aW9uIG9mIHRyYW5zYWN0aW9uIGluIGNhc2UgdGhlIHRyYW5zYWN0aW9uIGlzCisgICAgLy9zdXNwZW5kZWQuIEluIGNhc2Ugb2YgdHJhbnNhY3Rpb24gc3VzcGVuc2lvbiwgdGhlIGVuZAorICAgIC8vbWV0aG9kIGlzIHN0aWxsIGNhbGxlZCBieSB0aGUgdHJhbnNhY3Rpb24gbWFuYWdlcgorICAgIG1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiAgICAgICAgIHhhci5jb21taXQoeGlkLCBvbmVQaGFzZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogRW5kcyB0aGUgd29yayBwZXJmb3JtZWQgb24gYmVoYWxmIG9mIGEgdHJhbnNhY3Rpb24gYnJhbmNoLgogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyIHRoYXQgaXMgdGhlIHNhbWUgYXMgd2hhdCAKLSAgICAgKgkJCXdhcyB1c2VkIHByZXZpb3VzbHkgaW4gdGhlIHN0YXJ0IG1ldGhvZC4KLSAgICAgKiBAcGFyYW0JZmxhZ3MJT25lIG9mIFRNU1VDQ0VTUywgVE1GQUlMLCBvciBUTVNVU1BFTkQKKyAgICAgKiBAcGFyYW0gICAgeGlkICAgIEEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIgdGhhdCBpcyB0aGUgc2FtZSBhcyB3aGF0CisgICAgICogICAgICAgICAgICB3YXMgdXNlZCBwcmV2aW91c2x5IGluIHRoZSBzdGFydCBtZXRob2QuCisgICAgICogQHBhcmFtICAgIGZsYWdzICAgIE9uZSBvZiBUTVNVQ0NFU1MsIFRNRkFJTCwgb3IgVE1TVVNQRU5ECiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZW5kKFhpZCB4aWQsIGludCBmbGFncykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgeGFyLmVuZCh4aWQsIGZsYWdzKTsKICAgICAgICAgLy9HSkNJTlQKLQkvL21jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CisgICAgLy9tYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRlbGwgdGhlIHJlc291cmNlIG1hbmFnZXIgdG8gZm9yZ2V0IGFib3V0IGEgaGV1cmlzdGljYWxseSBjb21wbGV0ZWQgdHJhbnNhY3Rpb24gYnJhbmNoLgogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCisgICAgICogQHBhcmFtICAgIHhpZCAgICBBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZm9yZ2V0KFhpZCB4aWQpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHhhci5mb3JnZXQoeGlkKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBPYnRhaW4gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBzZXQgZm9yIHRoaXMgCisgICAgICogT2J0YWluIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgc2V0IGZvciB0aGlzCiAgICAgICogPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRoZSB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIGluIHNlY29uZHMKKyAgICAgKiBAcmV0dXJuICAgIHRoZSB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIGluIHNlY29uZHMKICAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldFRyYW5zYWN0aW9uVGltZW91dCgpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiB4YXIuZ2V0VHJhbnNhY3Rpb25UaW1lb3V0KCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIGRldGVybWluZSBpZiB0aGUgcmVzb3VyY2UgbWFuYWdlciBpbnN0YW5jZSAKLSAgICAgKiByZXByZXNlbnRlZCBieSB0aGUgdGFyZ2V0IG9iamVjdCBpcyB0aGUgc2FtZSBhcyB0aGUgcmVzb3VjZSBtYW5hZ2VyIAorICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB0byBkZXRlcm1pbmUgaWYgdGhlIHJlc291cmNlIG1hbmFnZXIgaW5zdGFuY2UKKyAgICAgKiByZXByZXNlbnRlZCBieSB0aGUgdGFyZ2V0IG9iamVjdCBpcyB0aGUgc2FtZSBhcyB0aGUgcmVzb3VjZSBtYW5hZ2VyCiAgICAgICogaW5zdGFuY2UgcmVwcmVzZW50ZWQgYnkgdGhlIHBhcmFtZXRlciB4YXJlcy4KICAgICAgKgotICAgICAqIEBwYXJhbQl4YXJlcwlBbiA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBvYmplY3Qgd2hvc2UgcmVzb3VyY2UgbWFuYWdlciAKLSAgICAgKiAJCQlpbnN0YW5jZSBpcyB0byBiZSBjb21wYXJlZCB3aXRoIHRoZSByZXNvdXJjZQotICAgICAqIEByZXR1cm4JdHJ1ZSBpZiBpdCdzIHRoZSBzYW1lIFJNIGluc3RhbmNlOyBvdGhlcndpc2UgZmFsc2UuCisgICAgICogQHBhcmFtICAgIHhhcmVzICAgIEFuIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IG9iamVjdCB3aG9zZSByZXNvdXJjZSBtYW5hZ2VyCisgICAgICogICAgICAgICAgICAgaW5zdGFuY2UgaXMgdG8gYmUgY29tcGFyZWQgd2l0aCB0aGUgcmVzb3VyY2UKKyAgICAgKiBAcmV0dXJuICAgIHRydWUgaWYgaXQncyB0aGUgc2FtZSBSTSBpbnN0YW5jZTsgb3RoZXJ3aXNlIGZhbHNlLgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGlzU2FtZVJNKFhBUmVzb3VyY2UgeGFyZXMpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiB4YXIuaXNTYW1lUk0oeGFyZXMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIEFzayB0aGUgcmVzb3VyY2UgbWFuYWdlciB0byBwcmVwYXJlIGZvciBhIHRyYW5zYWN0aW9uIGNvbW1pdCAKKyAgICAgKiBBc2sgdGhlIHJlc291cmNlIG1hbmFnZXIgdG8gcHJlcGFyZSBmb3IgYSB0cmFuc2FjdGlvbiBjb21taXQKICAgICAgKiBvZiB0aGUgdHJhbnNhY3Rpb24gc3BlY2lmaWVkIGluIHhpZC4KICAgICAgKgotICAgICAqIEBwYXJhbQl4aWQJQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgotICAgICAqIEByZXR1cm4JQSB2YWx1ZSBpbmRpY2F0aW5nIHRoZSByZXNvdXJjZSBtYW5hZ2VyJ3Mgdm90ZSBvbiB0aGUgCi0gICAgICoJCW91dGNvbWUgb2YgdGhlIHRyYW5zYWN0aW9uLiBUaGUgcG9zc2libGUgdmFsdWVzCi0gICAgICoJCWFyZTogWEFfUkRPTkxZIG9yIFhBX09LLiBJZiB0aGUgcmVzb3VyY2UgbWFuYWdlciB3YW50cyAKLSAgICAgKgkJdG8gcm9sbCBiYWNrIHRoZSB0cmFuc2FjdGlvbiwgaXQgc2hvdWxkIGRvIHNvCi0gICAgICoJCWJ5IHJhaXNpbmcgYW4gYXBwcm9wcmlhdGUgPGNvZGU+WEFFeGNlcHRpb248L2NvZGU+IGluIHRoZSBwcmVwYXJlIG1ldGhvZC4KKyAgICAgKiBAcGFyYW0gICAgeGlkICAgIEEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKKyAgICAgKiBAcmV0dXJuICAgIEEgdmFsdWUgaW5kaWNhdGluZyB0aGUgcmVzb3VyY2UgbWFuYWdlcidzIHZvdGUgb24gdGhlCisgICAgICogICAgICAgIG91dGNvbWUgb2YgdGhlIHRyYW5zYWN0aW9uLiBUaGUgcG9zc2libGUgdmFsdWVzCisgICAgICogICAgICAgIGFyZTogWEFfUkRPTkxZIG9yIFhBX09LLiBJZiB0aGUgcmVzb3VyY2UgbWFuYWdlciB3YW50cworICAgICAqICAgICAgICB0byByb2xsIGJhY2sgdGhlIHRyYW5zYWN0aW9uLCBpdCBzaG91bGQgZG8gc28KKyAgICAgKiAgICAgICAgYnkgcmFpc2luZyBhbiBhcHByb3ByaWF0ZSA8Y29kZT5YQUV4Y2VwdGlvbjwvY29kZT4gaW4gdGhlIHByZXBhcmUgbWV0aG9kLgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgcHJlcGFyZShYaWQgeGlkKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICByZXR1cm4geGFyLnByZXBhcmUoeGlkKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBPYnRhaW4gYSBsaXN0IG9mIHByZXBhcmVkIHRyYW5zYWN0aW9uIGJyYW5jaGVzIGZyb20gYSByZXNvdXJjZSBtYW5hZ2VyLgogICAgICAqCi0gICAgICogQHBhcmFtCWZsYWcJT25lIG9mIFRNU1RBUlRSU0NBTiwgVE1FTkRSU0NBTiwgVE1OT0ZMQUdTLiBUTU5PRkxBR1MgCi0gICAgICoJCQltdXN0IGJlIHVzZWQgd2hlbiBubyBvdGhlciBmbGFncyBhcmUgc2V0IGluIGZsYWdzLgotICAgICAqIEByZXR1cm4JVGhlIHJlc291cmNlIG1hbmFnZXIgcmV0dXJucyB6ZXJvIG9yIG1vcmUgWElEcyBmb3IgdGhlIHRyYW5zYWN0aW9uIAotICAgICAqCQlicmFuY2hlcyB0aGF0IGFyZSBjdXJyZW50bHkgaW4gYSBwcmVwYXJlZCBvciBoZXVyaXN0aWNhbGx5IAotICAgICAqCQljb21wbGV0ZWQgc3RhdGUuIElmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIG9wZXJhdGlvbiwgdGhlIHJlc291cmNlCi0gICAgICoJCW1hbmFnZXIgc2hvdWxkIHRocm93IHRoZSBhcHByb3ByaWF0ZSA8Y29kZT5YQUV4Y2VwdGlvbjwvY29kZT4uCisgICAgICogQHBhcmFtICAgIGZsYWcgICAgT25lIG9mIFRNU1RBUlRSU0NBTiwgVE1FTkRSU0NBTiwgVE1OT0ZMQUdTLiBUTU5PRkxBR1MKKyAgICAgKiAgICAgICAgICAgIG11c3QgYmUgdXNlZCB3aGVuIG5vIG90aGVyIGZsYWdzIGFyZSBzZXQgaW4gZmxhZ3MuCisgICAgICogQHJldHVybiAgICBUaGUgcmVzb3VyY2UgbWFuYWdlciByZXR1cm5zIHplcm8gb3IgbW9yZSBYSURzIGZvciB0aGUgdHJhbnNhY3Rpb24KKyAgICAgKiAgICAgICAgYnJhbmNoZXMgdGhhdCBhcmUgY3VycmVudGx5IGluIGEgcHJlcGFyZWQgb3IgaGV1cmlzdGljYWxseQorICAgICAqICAgICAgICBjb21wbGV0ZWQgc3RhdGUuIElmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIG9wZXJhdGlvbiwgdGhlIHJlc291cmNlCisgICAgICogICAgICAgIG1hbmFnZXIgc2hvdWxkIHRocm93IHRoZSBhcHByb3ByaWF0ZSA8Y29kZT5YQUV4Y2VwdGlvbjwvY29kZT4uCiAgICAgICovCiAgICAgcHVibGljIFhpZFtdIHJlY292ZXIoaW50IGZsYWcpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiB4YXIucmVjb3ZlcihmbGFnKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBJbmZvcm0gdGhlIHJlc291cmNlIG1hbmFnZXIgdG8gcm9sbCBiYWNrIHdvcmsgZG9uZSBvbiBiZWhhbGYgb2YgYSB0cmFuc2FjdGlvbiBicmFuY2gKICAgICAgKgotICAgICAqIEBwYXJhbQl4aWQJQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgorICAgICAqIEBwYXJhbSAgICB4aWQgICAgQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJvbGxiYWNrKFhpZCB4aWQpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIC8vdGhlIG1jLnRyYW5zYWN0aW9uQ29tcGxldGVkIGNhbGwgaGFzIGNvbWUgaGVyZSBiZWNhc3VlCi0JLy90aGUgdHJhbnNhY3Rpb24gKmFjdHVhbGx5KiBjb21wbGV0ZXMgYWZ0ZXIgdGhlIGZsb3cKLQkvL3JlYWNoZXMgaGVyZS4gdGhlIGVuZCgpIG1ldGhvZCBtaWdodCBub3QgcmVhbGx5IHNpZ25hbAotCS8vY29tcGxldGlvbiBvZiB0cmFuc2FjdGlvbiBpbiBjYXNlIHRoZSB0cmFuc2FjdGlvbiBpcwotCS8vc3VzcGVuZGVkLiBJbiBjYXNlIG9mIHRyYW5zYWN0aW9uIHN1c3BlbnNpb24sIHRoZSBlbmQKLQkvL21ldGhvZCBpcyBzdGlsbCBjYWxsZWQgYnkgdGhlIHRyYW5zYWN0aW9uIG1hbmFnZXIKKyAgICAvL3RoZSB0cmFuc2FjdGlvbiAqYWN0dWFsbHkqIGNvbXBsZXRlcyBhZnRlciB0aGUgZmxvdworICAgIC8vcmVhY2hlcyBoZXJlLiB0aGUgZW5kKCkgbWV0aG9kIG1pZ2h0IG5vdCByZWFsbHkgc2lnbmFsCisgICAgLy9jb21wbGV0aW9uIG9mIHRyYW5zYWN0aW9uIGluIGNhc2UgdGhlIHRyYW5zYWN0aW9uIGlzCisgICAgLy9zdXNwZW5kZWQuIEluIGNhc2Ugb2YgdHJhbnNhY3Rpb24gc3VzcGVuc2lvbiwgdGhlIGVuZAorICAgIC8vbWV0aG9kIGlzIHN0aWxsIGNhbGxlZCBieSB0aGUgdHJhbnNhY3Rpb24gbWFuYWdlcgogICAgICAgICBtYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOwogICAgICAgICB4YXIucm9sbGJhY2soeGlkKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBmb3IgdGhpcyA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlzZWNvbmRzCXRoZSB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIGluIHNlY29uZHMuCi0gICAgICogQHJldHVybgl0cnVlIGlmIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaXMgc2V0IHN1Y2Nlc3NmdWxseTsgb3RoZXJ3aXNlIGZhbHNlLgorICAgICAqIEBwYXJhbSAgICBzZWNvbmRzICAgIHRoZSB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIGluIHNlY29uZHMuCisgICAgICogQHJldHVybiAgICB0cnVlIGlmIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaXMgc2V0IHN1Y2Nlc3NmdWxseTsgb3RoZXJ3aXNlIGZhbHNlLgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIHNldFRyYW5zYWN0aW9uVGltZW91dChpbnQgc2Vjb25kcykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIHhhci5zZXRUcmFuc2FjdGlvblRpbWVvdXQoc2Vjb25kcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU3RhcnQgd29yayBvbiBiZWhhbGYgb2YgYSB0cmFuc2FjdGlvbiBicmFuY2ggc3BlY2lmaWVkIGluIHhpZC4KICAgICAgKgotICAgICAqIEBwYXJhbQl4aWQJQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllciB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIHJlc291cmNlCi0gICAgICogQHJldHVybglmbGFncwlPbmUgb2YgVE1OT0ZMQUdTLCBUTUpPSU4sIG9yIFRNUkVTVU1FCisgICAgICogQHBhcmFtICAgIHhpZCAgICBBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVzb3VyY2UKKyAgICAgKiBAcmV0dXJuICAgIGZsYWdzICAgIE9uZSBvZiBUTU5PRkxBR1MsIFRNSk9JTiwgb3IgVE1SRVNVTUUKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzdGFydChYaWQgeGlkLCBpbnQgZmxhZ3MpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIC8vR0pDSU5UCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvYnVpbGQueG1sCmluZGV4IDk2Nzg2OGIuLjY0MTA1NTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvYnVpbGQueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxwcm9qZWN0IG5hbWU9ImpkYmNfY29ubmVjdG9yIiBiYXNlZGlyPSIke2dqYy5ob21lfSIgZGVmYXVsdD0iYnVpbGQiPgogICA8cHJvcGVydHkgbmFtZT0icGtnLmRpciIgdmFsdWU9ImNvbS9zdW4vZ2pjL3NwaSIvPgotIAorCiAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iPgogICAgIDxhbnQgYW50ZmlsZT0iYnVpbGQueG1sIiBkaXI9IiR7Z2pjLmhvbWV9L2JpbiIgdGFyZ2V0PSJjbGVhbiIvPgogICA8L3RhcmdldD4KQEAgLTM3LDUgKzM3LDUgQEAKIAogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkMTQiIGRlcGVuZHM9ImNvbXBpbGUxNCIvPgogCi0JPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iYnVpbGQxMywgYnVpbGQxNCIvPgorICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImJ1aWxkMTMsIGJ1aWxkMTQiLz4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL01ldGhvZEV4ZWN1dG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9NZXRob2RFeGVjdXRvci5qYXZhCmluZGV4IGNlMzIxYWYuLjllN2YyNTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL01ldGhvZEV4ZWN1dG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvTWV0aG9kRXhlY3V0b3IuamF2YQpAQCAtMjYsOCArMjYsOCBAQAogLyoqCiAgKiBFeGVjdXRlIHRoZSBtZXRob2RzIGJhc2VkIG9uIHRoZSBwYXJhbWV0ZXJzLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMjMKLSAqIEBhdXRob3IJQmlub2QgUC5HCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzIzCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRwogICovCiBwdWJsaWMgY2xhc3MgTWV0aG9kRXhlY3V0b3IgaW1wbGVtZW50cyBqYXZhLmlvLlNlcmlhbGl6YWJsZXsKIApAQCAtMzksMTMwICszOSwxMzAgQEAKICAgICAvKioKICAgICAgKiBFeGNldXRlIGEgc2ltcGxlIHNldCBNZXRob2QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdmFsdWUJVmFsdWUgdG8gYmUgc2V0LgotICAgICAqIEBwYXJhbQltZXRob2QJPGNvZGU+TWV0aG9kPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHBhcmFtCW9iaglPYmplY3Qgb24gd2hpY2ggdGhlIG1ldGhvZCB0byBiZSBleGVjdXRlZC4KKyAgICAgKiBAcGFyYW0gICAgdmFsdWUgICAgVmFsdWUgdG8gYmUgc2V0LgorICAgICAqIEBwYXJhbSAgICBtZXRob2QgICAgPGNvZGU+TWV0aG9kPC9jb2RlPiBvYmplY3QuCisgICAgICogQHBhcmFtICAgIG9iaiAgICBPYmplY3Qgb24gd2hpY2ggdGhlIG1ldGhvZCB0byBiZSBleGVjdXRlZC4KICAgICAgKiBAdGhyb3dzICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4sIGluIGNhc2Ugb2YgdGhlIG1pc21hdGNoIG9mIHBhcmFtZXRlciB2YWx1ZXMgb3IKLSAgICAgKgkJYSBzZWN1cml0eSB2aW9sYXRpb24uICAgICAKKyAgICAgKiAgICAgICAgYSBzZWN1cml0eSB2aW9sYXRpb24uCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcnVuSmF2YUJlYW5NZXRob2QoU3RyaW5nIHZhbHVlLCBNZXRob2QgbWV0aG9kLCBPYmplY3Qgb2JqKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb257Ci0gICAgCWlmICh2YWx1ZT09bnVsbCB8fCB2YWx1ZS50cmltKCkuZXF1YWxzKCIiKSkgewotICAgIAkgICAgcmV0dXJuOwotICAgIAl9Ci0gICAgCXRyeSB7Ci0gICAgCSAgICBDbGFzc1tdIHBhcmFtZXRlcnMgPSBtZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKTsKLSAgICAJICAgIGlmICggcGFyYW1ldGVycy5sZW5ndGggPT0gMSkgewotICAgIAkgICAgICAgIE9iamVjdFtdIHZhbHVlcyA9IG5ldyBPYmplY3RbMV07Ci0gICAgCSAgICAJdmFsdWVzWzBdID0gY29udmVydFR5cGUocGFyYW1ldGVyc1swXSwgdmFsdWUpOwotICAgIAkgICAgCW1ldGhvZC5pbnZva2Uob2JqLCB2YWx1ZXMpOwotICAgIAkgICAgfQotICAgIAl9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGlhZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpYWUpOwotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOwotICAgIAl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWUpOwotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBcmd1bWVudHMgYXJlIHdyb25nIGZvciB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7ICAgIAkKLSAgICAJfSBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBpdGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaXRlKTsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsgICAgCQotICAgIAl9CisgICAgICAgIGlmICh2YWx1ZT09bnVsbCB8fCB2YWx1ZS50cmltKCkuZXF1YWxzKCIiKSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBDbGFzc1tdIHBhcmFtZXRlcnMgPSBtZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKTsKKyAgICAgICAgICAgIGlmICggcGFyYW1ldGVycy5sZW5ndGggPT0gMSkgeworICAgICAgICAgICAgICAgIE9iamVjdFtdIHZhbHVlcyA9IG5ldyBPYmplY3RbMV07CisgICAgICAgICAgICAgICAgdmFsdWVzWzBdID0gY29udmVydFR5cGUocGFyYW1ldGVyc1swXSwgdmFsdWUpOworICAgICAgICAgICAgICAgIG1ldGhvZC5pbnZva2Uob2JqLCB2YWx1ZXMpOworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGlhZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpYWUpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOworICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWUpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBcmd1bWVudHMgYXJlIHdyb25nIGZvciB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7CisgICAgICAgIH0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gaXRlKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGl0ZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBFeGVjdXRlcyB0aGUgbWV0aG9kLiAgICAgCisgICAgICogRXhlY3V0ZXMgdGhlIG1ldGhvZC4KICAgICAgKgotICAgICAqIEBwYXJhbQltZXRob2QgPGNvZGU+TWV0aG9kPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHBhcmFtCW9iaglPYmplY3Qgb24gd2hpY2ggdGhlIG1ldGhvZCB0byBiZSBleGVjdXRlZC4KLSAgICAgKiBAcGFyYW0JdmFsdWVzCVBhcmFtZXRlciB2YWx1ZXMgZm9yIGV4ZWN1dGluZyB0aGUgbWV0aG9kLgorICAgICAqIEBwYXJhbSAgICBtZXRob2QgPGNvZGU+TWV0aG9kPC9jb2RlPiBvYmplY3QuCisgICAgICogQHBhcmFtICAgIG9iaiAgICBPYmplY3Qgb24gd2hpY2ggdGhlIG1ldGhvZCB0byBiZSBleGVjdXRlZC4KKyAgICAgKiBAcGFyYW0gICAgdmFsdWVzICAgIFBhcmFtZXRlciB2YWx1ZXMgZm9yIGV4ZWN1dGluZyB0aGUgbWV0aG9kLgogICAgICAqIEB0aHJvd3MgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiwgaW4gY2FzZSBvZiB0aGUgbWlzbWF0Y2ggb2YgcGFyYW1ldGVyIHZhbHVlcyBvcgotICAgICAqCQlhIHNlY3VyaXR5IHZpb2xhdGlvbi4KKyAgICAgKiAgICAgICAgYSBzZWN1cml0eSB2aW9sYXRpb24uCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcnVuTWV0aG9kKE1ldGhvZCBtZXRob2QsIE9iamVjdCBvYmosIFZlY3RvciB2YWx1ZXMpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKLSAgICAJdHJ5IHsKLQkgICAgQ2xhc3NbXSBwYXJhbWV0ZXJzID0gbWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCk7Ci0JICAgIGlmICh2YWx1ZXMuc2l6ZSgpICE9IHBhcmFtZXRlcnMubGVuZ3RoKSB7Ci0JICAgICAgICByZXR1cm47Ci0JICAgIH0KLSAgICAJICAgIE9iamVjdFtdIGFjdHVhbFZhbHVlcyA9IG5ldyBPYmplY3RbcGFyYW1ldGVycy5sZW5ndGhdOwotICAgIAkgICAgZm9yIChpbnQgaSA9MDsgaTxwYXJhbWV0ZXJzLmxlbmd0aCA7IGkrKykgewotICAgIAkgICAgCVN0cmluZyB2YWwgPSAoU3RyaW5nKSB2YWx1ZXMuZ2V0KGkpOwotICAgIAkgICAgCWlmICh2YWwudHJpbSgpLmVxdWFscygiTlVMTCIpKSB7Ci0gICAgCSAgICAJICAgIGFjdHVhbFZhbHVlc1tpXSA9IG51bGw7Ci0gICAgCSAgICAJfSBlbHNlIHsKLSAgICAJICAgIAkgICAgYWN0dWFsVmFsdWVzW2ldID0gY29udmVydFR5cGUocGFyYW1ldGVyc1tpXSwgdmFsKTsKLSAgICAJICAgIAl9Ci0gICAgCSAgICB9Ci0gICAgCSAgICBtZXRob2QuaW52b2tlKG9iaiwgYWN0dWFsVmFsdWVzKTsKLSAgICAJfWNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGlhZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpYWUpOwotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOwotICAgIAl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWUpOwotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBcmd1bWVudHMgYXJlIHdyb25nIGZvciB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7ICAgIAkKLSAgICAJfSBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBpdGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaXRlKTsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsgICAgCQotICAgIAl9CisgICAgICAgIHRyeSB7CisgICAgICAgIENsYXNzW10gcGFyYW1ldGVycyA9IG1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpOworICAgICAgICBpZiAodmFsdWVzLnNpemUoKSAhPSBwYXJhbWV0ZXJzLmxlbmd0aCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICBPYmplY3RbXSBhY3R1YWxWYWx1ZXMgPSBuZXcgT2JqZWN0W3BhcmFtZXRlcnMubGVuZ3RoXTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPTA7IGk8cGFyYW1ldGVycy5sZW5ndGggOyBpKyspIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgdmFsID0gKFN0cmluZykgdmFsdWVzLmdldChpKTsKKyAgICAgICAgICAgICAgICBpZiAodmFsLnRyaW0oKS5lcXVhbHMoIk5VTEwiKSkgeworICAgICAgICAgICAgICAgICAgICBhY3R1YWxWYWx1ZXNbaV0gPSBudWxsOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGFjdHVhbFZhbHVlc1tpXSA9IGNvbnZlcnRUeXBlKHBhcmFtZXRlcnNbaV0sIHZhbCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgbWV0aG9kLmludm9rZShvYmosIGFjdHVhbFZhbHVlcyk7CisgICAgICAgIH1jYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBpYWUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWFlKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKKyAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGllKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGllKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQXJndW1lbnRzIGFyZSB3cm9uZyBmb3IgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOworICAgICAgICB9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGl0ZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpdGUpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOworICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29udmVydHMgdGhlIHR5cGUgZnJvbSBTdHJpbmcgdG8gdGhlIENsYXNzIHR5cGUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdHlwZQkJQ2xhc3MgbmFtZSB0byB3aGljaCB0aGUgY29udmVyc2lvbiBpcyByZXF1aXJlZC4KLSAgICAgKiBAcGFyYW0JcGFyYW1ldGVyCVN0cmluZyB2YWx1ZSB0byBiZSBjb252ZXJ0ZWQuCi0gICAgICogQHJldHVybglDb252ZXJ0ZWQgdmFsdWUuCisgICAgICogQHBhcmFtICAgIHR5cGUgICAgICAgIENsYXNzIG5hbWUgdG8gd2hpY2ggdGhlIGNvbnZlcnNpb24gaXMgcmVxdWlyZWQuCisgICAgICogQHBhcmFtICAgIHBhcmFtZXRlciAgICBTdHJpbmcgdmFsdWUgdG8gYmUgY29udmVydGVkLgorICAgICAqIEByZXR1cm4gICAgQ29udmVydGVkIHZhbHVlLgogICAgICAqIEB0aHJvd3MgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiwgaW4gY2FzZSBvZiB0aGUgbWlzbWF0Y2ggb2YgcGFyYW1ldGVyIHZhbHVlcyBvcgotICAgICAqCQlhIHNlY3VyaXR5IHZpb2xhdGlvbi4gICAgIAorICAgICAqICAgICAgICBhIHNlY3VyaXR5IHZpb2xhdGlvbi4KICAgICAgKi8KICAgICBwcml2YXRlIE9iamVjdCBjb252ZXJ0VHlwZShDbGFzcyB0eXBlLCBTdHJpbmcgcGFyYW1ldGVyKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb257Ci0gICAgCXRyeSB7Ci0gICAgCSAgICBTdHJpbmcgdHlwZU5hbWUgPSB0eXBlLmdldE5hbWUoKTsKLSAgICAJICAgIGlmICggdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuU3RyaW5nIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuT2JqZWN0IikpIHsKLSAgICAJICAgIAlyZXR1cm4gcGFyYW1ldGVyOwotICAgIAkgICAgfQotICAgIAkKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImludCIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkludGVnZXIiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgSW50ZWdlcihwYXJhbWV0ZXIpOwotICAgIAkgICAgfQotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJzaG9ydCIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLlNob3J0IikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IFNob3J0KHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgIAkgICAgCi0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImJ5dGUiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5CeXRlIikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IEJ5dGUocGFyYW1ldGVyKTsKLSAgICAJICAgIH0gICAgCSAgICAgICAgCSAgICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygibG9uZyIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkxvbmciKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgTG9uZyhwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgICAJICAgICAgICAJICAgICAgIAkgICAgCi0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImZsb2F0IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuRmxvYXQiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgRmxvYXQocGFyYW1ldGVyKTsKLSAgICAJICAgIH0gICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiZG91YmxlIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuRG91YmxlIikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IERvdWJsZShwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgICAJICAgICAgICAJICAgICAgIAkgICAgIAkgICAgICAgIAkgICAgICAgCSAgICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiamF2YS5tYXRoLkJpZ0RlY2ltYWwiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgamF2YS5tYXRoLkJpZ0RlY2ltYWwocGFyYW1ldGVyKTsKLSAgICAJICAgIH0gICAgCSAgICAgICAgCSAgICAgICAJICAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJqYXZhLm1hdGguQmlnSW50ZWdlciIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBqYXZhLm1hdGguQmlnSW50ZWdlcihwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgICAJICAgICAgICAJICAgICAgIAkgICAgICAgIAkgICAgCi0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImJvb2xlYW4iKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5Cb29sZWFuIikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IEJvb2xlYW4ocGFyYW1ldGVyKTsKLSAgICAgICAgICAgIH0JCQorICAgICAgICB0cnkgeworICAgICAgICAgICAgU3RyaW5nIHR5cGVOYW1lID0gdHlwZS5nZXROYW1lKCk7CisgICAgICAgICAgICBpZiAoIHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLlN0cmluZyIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLk9iamVjdCIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcmFtZXRlcjsKKyAgICAgICAgICAgIH0KIAotICAgIAkgICAgcmV0dXJuIHBhcmFtZXRlcjsKLSAgICAJfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19uZmUiLCBwYXJhbWV0ZXIpOwotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHBhcmFtZXRlcisiOiBOb3QgYSB2YWxpZCB2YWx1ZSBmb3IgdGhpcyBtZXRob2QgIik7Ci0gICAgCX0KKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImludCIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkludGVnZXIiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgSW50ZWdlcihwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJzaG9ydCIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLlNob3J0IikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNob3J0KHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImJ5dGUiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5CeXRlIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJ5dGUocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygibG9uZyIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkxvbmciKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTG9uZyhwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJmbG9hdCIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkZsb2F0IikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0KHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImRvdWJsZSIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkRvdWJsZSIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEb3VibGUocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiamF2YS5tYXRoLkJpZ0RlY2ltYWwiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgamF2YS5tYXRoLkJpZ0RlY2ltYWwocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiamF2YS5tYXRoLkJpZ0ludGVnZXIiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgamF2YS5tYXRoLkJpZ0ludGVnZXIocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiYm9vbGVhbiIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkJvb2xlYW4iKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQm9vbGVhbihwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gcGFyYW1ldGVyOworICAgICAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX25mZSIsIHBhcmFtZXRlcik7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24ocGFyYW1ldGVyKyI6IE5vdCBhIHZhbGlkIHZhbHVlIGZvciB0aGlzIG1ldGhvZCAiKTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9TZWN1cml0eVV0aWxzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9TZWN1cml0eVV0aWxzLmphdmEKaW5kZXggZmMxNDliZi4uZjAwOGU3ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvU2VjdXJpdHlVdGlscy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL1NlY3VyaXR5VXRpbHMuamF2YQpAQCAtMjksMzYgKzI5LDM2IEBACiAvKioKICAqIFNlY3VyaXR5VXRpbHMgZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8yMgotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMjIKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIHB1YmxpYyBjbGFzcyBTZWN1cml0eVV0aWxzIHsKIAogICAgIC8qKgotICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0LCBnaXZlbiAKLSAgICAgKiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiwgc3ViamVjdCBhbmQgdGhlIAotICAgICAqIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4uIEl0IGZpcnN0IGNoZWNrcyBpZiB0aGUgCi0gICAgICogPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBpcyBudWxsIG9yIG5vdC4gSWYgaXQgaXMgbm90IG51bGwsIAorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0LCBnaXZlbgorICAgICAqIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LCBzdWJqZWN0IGFuZCB0aGUKKyAgICAgKiA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+LiBJdCBmaXJzdCBjaGVja3MgaWYgdGhlCisgICAgICogPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBpcyBudWxsIG9yIG5vdC4gSWYgaXQgaXMgbm90IG51bGwsCiAgICAgICogaXQgY29uc3RydWN0cyBhIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0IHdpdGgKICAgICAgKiB0aGUgdXNlciBhbmQgcGFzc3dvcmQgZmllbGRzIGZyb20gdGhlIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gYW5kIHJldHVybnMgdGhpcwotICAgICAqIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0LiBJZiB0aGUgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiAKLSAgICAgKiBpcyBudWxsLCBpdCByZXRyaWV2ZXMgdGhlIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0cyBmcm9tIAorICAgICAqIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0LiBJZiB0aGUgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPgorICAgICAqIGlzIG51bGwsIGl0IHJldHJpZXZlcyB0aGUgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3RzIGZyb20KICAgICAgKiB0aGUgPGNvZGU+U3ViamVjdDwvY29kZT4gcGFyYW1ldGVyIGFuZCByZXR1cm5zIHRoZSBmaXJzdAotICAgICAqIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0IHdoaWNoIGNvbnRhaW5zIGEgCisgICAgICogPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3Qgd2hpY2ggY29udGFpbnMgYQogICAgICAqIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4sIGluc3RhbmNlIGVxdWl2YWxlbnQKICAgICAgKiB0byB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiwgcGFyYW1ldGVyLgogICAgICAqCi0gICAgICogQHBhcmFtCW1jZgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+Ci0gICAgICogQHBhcmFtCXN1YmplY3QJPGNvZGU+U3ViamVjdDwvY29kZT4KLSAgICAgKiBAcGFyYW0JaW5mbwk8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+Ci0gICAgICogQHJldHVybgk8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+Ci0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4JZ2VuZXJpYyBleGNlcHRpb24gaWYgb3BlcmF0aW9uIGZhaWxzCi0gICAgICogQHRocm93cwk8Y29kZT5TZWN1cml0eUV4Y2VwdGlvbjwvY29kZT4JaWYgYWNjZXNzIHRvIHRoZSA8Y29kZT5TdWJqZWN0PC9jb2RlPiBpbnN0YW5jZSBpcyBkZW5pZWQKKyAgICAgKiBAcGFyYW0gICAgbWNmICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgc3ViamVjdCAgICA8Y29kZT5TdWJqZWN0PC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBpbmZvICAgIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiAgICBnZW5lcmljIGV4Y2VwdGlvbiBpZiBvcGVyYXRpb24gZmFpbHMKKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlNlY3VyaXR5RXhjZXB0aW9uPC9jb2RlPiAgICBpZiBhY2Nlc3MgdG8gdGhlIDxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIGlzIGRlbmllZAogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgUGFzc3dvcmRDcmVkZW50aWFsIGdldFBhc3N3b3JkQ3JlZGVudGlhbChmaW5hbCBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmLAogICAgICAgICAgZmluYWwgU3ViamVjdCBzdWJqZWN0LCBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm8gaW5mbykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKIAotCWlmIChpbmZvID09IG51bGwpIHsKKyAgICBpZiAoaW5mbyA9PSBudWxsKSB7CiAgICAgICAgICAgICBpZiAoc3ViamVjdCA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtODksMTQgKzg5LDE0IEBACiAgICAgICAgICAgICByZXR1cm4gcGM7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRydWUgaWYgdHdvIHN0cmluZ3MgYXJlIGVxdWFsOyBmYWxzZSBvdGhlcndpc2UKLSAgICAgKiAKLSAgICAgKiBAcGFyYW0Jc3RyMQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHBhcmFtCXN0cjIJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEByZXR1cm4JdHJ1ZQlpZiB0aGUgdHdvIHN0cmluZ3MgYXJlIGVxdWFsCi0gICAgICogICAgICAgIAlmYWxzZQlvdGhlcndpc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzdHIxICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgc3RyMiAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHJldHVybiAgICB0cnVlICAgIGlmIHRoZSB0d28gc3RyaW5ncyBhcmUgZXF1YWwKKyAgICAgKiAgICAgICAgICAgIGZhbHNlICAgIG90aGVyd2lzZQogICAgICAqLwogICAgIHN0YXRpYyBwcml2YXRlIGJvb2xlYW4gaXNFcXVhbChTdHJpbmcgc3RyMSwgU3RyaW5nIHN0cjIpIHsKICAgICAgICAgaWYgKHN0cjEgPT0gbnVsbCkgewpAQCAtMTA5LDEwICsxMDksMTAgQEAKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRydWUgaWYgdHdvIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0cyBhcmUgZXF1YWw7IGZhbHNlIG90aGVyd2lzZQogICAgICAqCi0gICAgICogQHBhcmFtCXBDMQk8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+Ci0gICAgICogQHBhcmFtCXBDMgk8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+Ci0gICAgICogQHJldHVybgl0cnVlCWlmIHRoZSB0d28gUGFzc3dvcmRDcmVkZW50aWFscyBhcmUgZXF1YWwKLSAgICAgKiAgICAgICAgCWZhbHNlCW90aGVyd2lzZQorICAgICAqIEBwYXJhbSAgICBwQzEgICAgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBwQzIgICAgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgdHJ1ZSAgICBpZiB0aGUgdHdvIFBhc3N3b3JkQ3JlZGVudGlhbHMgYXJlIGVxdWFsCisgICAgICogICAgICAgICAgICBmYWxzZSAgICBvdGhlcndpc2UKICAgICAgKi8KICAgICBzdGF0aWMgcHVibGljIGJvb2xlYW4gaXNQYXNzd29yZENyZWRlbnRpYWxFcXVhbChQYXNzd29yZENyZWRlbnRpYWwgcEMxLCBQYXNzd29yZENyZWRlbnRpYWwgcEMyKSB7CiAgICAgICAgIGlmIChwQzEgPT0gcEMyKQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvYnVpbGQueG1sCmluZGV4IGE1NWJiZjAuLmYwNjBlN2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9idWlsZC54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPHByb2plY3QgbmFtZT0iamRiY19jb25uZWN0b3IiIGJhc2VkaXI9Ii4iIGRlZmF1bHQ9ImJ1aWxkIj4KICAgPHByb3BlcnR5IG5hbWU9InBrZy5kaXIiIHZhbHVlPSJjb20vc3VuL2dqYy91dGlsIi8+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iPgogICAgIDxhbnQgYW50ZmlsZT0iYnVpbGQueG1sIiBkaXI9IiR7Z2pjLmhvbWV9L2JpbiIgdGFyZ2V0PSJjbGVhbiIvPgogICA8L3RhcmdldD4KQEAgLTMzLDcgKzMzLDcgQEAKICAgICAgIDxqYXIgamFyZmlsZT0iJHtkaXN0LmRpcn0vJHtwa2cuZGlyfS91dGlsLmphciIgYmFzZWRpcj0iJHtjbGFzcy5kaXJ9IgogICAgICAgICBpbmNsdWRlcz0iJHtwa2cuZGlyfS8qKi8qIi8+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUxMyIgZGVwZW5kcz0iY29tcGlsZSIvPgogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUxNCIgZGVwZW5kcz0iY29tcGlsZSIvPgogCkBAIC00NCw1ICs0NCw1IEBACiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQxNCIgZGVwZW5kcz0iY29tcGlsZTE0LCBwYWNrYWdlMTQiLz4KIAogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJidWlsZDEzLCBidWlsZDE0Ii8+Ci0gIAorCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9zZXJ2bGV0L1NpbXBsZUJhbmtTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9zZXJ2bGV0L1NpbXBsZUJhbmtTZXJ2bGV0LmphdmEKaW5kZXggODI5NTAwNy4uMzViNmU1YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvc2VydmxldC9TaW1wbGVCYW5rU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3NlcnZsZXQvU2ltcGxlQmFua1NlcnZsZXQuamF2YQpAQCAtMTcsMTcgKzE3LDE3IEBACiBwYWNrYWdlIHNhbXBsZXMuZWpiLnN1YmNsYXNzaW5nLnNlcnZsZXQ7CiAKIGltcG9ydCBqYXZhLmlvLio7Ci1pbXBvcnQgamF2YS51dGlsLio7IAotaW1wb3J0IGpha2FydGEuc2VydmxldC4qOyAKLWltcG9ydCBqYXZheC5uYW1pbmcuKjsgCi1pbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuKjsgCitpbXBvcnQgamF2YS51dGlsLio7CitpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lio7CitpbXBvcnQgamF2YXgubmFtaW5nLio7CitpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuKjsKIGltcG9ydCBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3Q7Ci1pbXBvcnQgamFrYXJ0YS5lamIuKjsgCitpbXBvcnQgamFrYXJ0YS5lamIuKjsKIAotaW1wb3J0IHNhbXBsZXMuZWpiLnN1YmNsYXNzaW5nLmVqYi4qOyAKK2ltcG9ydCBzYW1wbGVzLmVqYi5zdWJjbGFzc2luZy5lamIuKjsKIGltcG9ydCBjb20uc3VuLmpkYmNyYS5zcGkuSmRiY1NldHVwQWRtaW47CiAKLXB1YmxpYyBjbGFzcyBTaW1wbGVCYW5rU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsgIAorcHVibGljIGNsYXNzIFNpbXBsZUJhbmtTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewogCiAKICAgSW5pdGlhbENvbnRleHQgaW5pdENvbnRleHQgPSBudWxsOwpAQCAtNDMsMTQgKzQzLDE0IEBACiAgIHsKICAgfQogCi0gIHB1YmxpYyB2b2lkIGRvR2V0IChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCxIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSAKLSAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgCisgIHB1YmxpYyB2b2lkIGRvR2V0IChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCxIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKQorICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7Ci0gIH0gIAorICB9CiAKLSAgLyoqIGhhbmRsZXMgdGhlIEhUVFAgUE9TVCBvcGVyYXRpb24gKiovIAotICBwdWJsaWMgdm9pZCBkb1Bvc3QgKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIAotICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAKKyAgLyoqIGhhbmRsZXMgdGhlIEhUVFAgUE9TVCBvcGVyYXRpb24gKiovCisgIHB1YmxpYyB2b2lkIGRvUG9zdCAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkKKyAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICBkb0xvb2t1cCgpOwogICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2ltcGxlQmFua1NlcnZsZXQgaXMgZXhlY3V0aW5nIik7CiAgICAgU3RyaW5nIFNTTiA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJTU04iKTsKQEAgLTY2LDE0ICs2NiwxNCBAQAogICAgIFN0cmluZyB6aXBDb2RlID0gIiI7CiAgICAgbG9uZyBjdXJyZW50U2F2aW5nc0JhbGFuY2UgPSAwOwogICAgIGxvbmcgY3VycmVudENoZWNraW5nQmFsYW5jZSA9IDA7Ci0gICAgIAorCiAgICAgU3RyaW5nIGFjdGlvbiA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJhY3Rpb24iKTsKICAgICBpZiAoYWN0aW9uLmVxdWFscygiQ3JlYXRlIikpCiAgICAgewogICAgICAgbWVzc2FnZSA9ICJBZGQgQ3VzdG9tZXIiOwogICAgICAganNwID0gIi9TaW1wbGVCYW5rQWRkLmpzcCI7CiAgICAgfQotICAgIGVsc2UgaWYgKGFjdGlvbi5lcXVhbHMoIkFkZCBDdXN0b21lciIpKSAKKyAgICBlbHNlIGlmIChhY3Rpb24uZXF1YWxzKCJBZGQgQ3VzdG9tZXIiKSkKICAgICB7CiAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFkZCBDdXN0b21lciBidXR0b24gcHJlc3NlZCIpOwogICAgICAgU1NOID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoIlNTTiIpOwpAQCAtOTAsNyArOTAsNyBAQAogICAgICAgICBjdXN0b21lclNhdmluZ3MgPSBjdXN0b21lclNhdmluZ3NIb21lLmNyZWF0ZShTU04sIGxhc3ROYW1lLCBmaXJzdE5hbWUsIGFkZHJlc3MxLCBhZGRyZXNzMiwgY2l0eSwgc3RhdGUsIHppcENvZGUpOwogICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb3VsZCBub3QgY3JlYXRlIHRoZSBjdXN0b21lciBzYXZpbmdzIHJlbW90ZSBiZWFuIDogIiArIGUudG9TdHJpbmcoKSk7Ci0JdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgLy9yZXR1cm47CiAgICAgICB9CiAgICAgICBtZXNzYWdlID0gIkN1c3RvbWVyIEFkZGVkLiI7CkBAIC0xMDMsNyArMTAzLDcgQEAKICAgICAgICAgY3VzdG9tZXJTYXZpbmdzID0gY3VzdG9tZXJTYXZpbmdzSG9tZS5maW5kQnlQcmltYXJ5S2V5KFNTTik7CiAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvdWxkIG5vdCBmaW5kIHRoZSBjdXN0b21lciByZW1vdGUgYmVhbiA6ICIgKyBlLnRvU3RyaW5nKCkpOwotCXRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIC8vcmV0dXJuOwogICAgICAgfQogICAgICAganNwID0gIi9TaW1wbGVCYW5rRWRpdC5qc3AiOwpAQCAtMTE1LDcgKzExNSw3IEBACiAgICAgICAgIGN1c3RvbWVyU2F2aW5ncyA9IGN1c3RvbWVyU2F2aW5nc0hvbWUuZmluZEJ5UHJpbWFyeUtleShTU04pOwogICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb3VsZCBub3QgZmluZCB0aGUgY3VzdG9tZXIgc2F2aW5ncyByZW1vdGUgYmVhbiA6ICIgKyBlLnRvU3RyaW5nKCkpOwotCXRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIC8vcmV0dXJuOwogICAgICAgfQogICAgICAgbWVzc2FnZSA9ICJEZWxldGUgQ3VzdG9tZXIiOwpAQCAtMTI3LDEyICsxMjcsMTIgQEAKICAgICAgICAgY3VzdG9tZXJTYXZpbmdzSG9tZS5maW5kQnlQcmltYXJ5S2V5KFNTTikucmVtb3ZlKCk7CiAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvdWxkIG5vdCBkZWxldGUgdGhlIGN1c3RvbWVyIHNhdmluZ3MgYmVhbiA6ICIgKyBlLnRvU3RyaW5nKCkpOwotCXRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIC8vcmV0dXJuOwogICAgICAgfQogICAgICAgbWVzc2FnZSA9ICJDdXN0b21lciBEZWxldGVkLiI7CiAgICAgICBqc3AgPSAiL1NpbXBsZUJhbmtNZXNzYWdlLmpzcCI7Ci0gICAgfSAgCisgICAgfQogCiAKICAgICBlbHNlIGlmIChhY3Rpb24uZXF1YWxzKCJVcGRhdGUiKSkKQEAgLTE0Miw3ICsxNDIsNyBAQAogICAgICAgICBjdXN0b21lclNhdmluZ3MgPSAoQ3VzdG9tZXJTYXZpbmdzKWN1c3RvbWVyU2F2aW5nc0hvbWUuZmluZEJ5UHJpbWFyeUtleShTU04pOwogICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb3VsZCBub3QgZmluZCB0aGUgY3VzdG9tZXIgc2F2aW5ncyByZW1vdGUgYmVhbiA6ICIgKyBlLnRvU3RyaW5nKCkpOwotCXRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIC8vcmV0dXJuOwogICAgICAgfQogCkBAIC0xNTEsNyArMTUxLDcgQEAKICAgICAgICAgY3VzdG9tZXJDaGVja2luZyA9IChDdXN0b21lckNoZWNraW5nKWN1c3RvbWVyQ2hlY2tpbmdIb21lLmZpbmRCeVByaW1hcnlLZXkoU1NOKTsKICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ291bGQgbm90IGZpbmQgdGhlIGN1c3RvbWVyIGNoZWNraW5nIHJlbW90ZSBiZWFuIDogIiArIGUudG9TdHJpbmcoKSk7Ci0JdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgLy9yZXR1cm47CiAgICAgICB9CiAKQEAgLTIxMSw5ICsyMTEsOSBAQAogICAgIFJlcXVlc3REaXNwYXRjaGVyIGRpc3BhdGNoZXIgPSBnZXRTZXJ2bGV0Q29udGV4dCgpLmdldFJlcXVlc3REaXNwYXRjaGVyKGpzcCk7CiAgICAgZGlzcGF0Y2hlci5pbmNsdWRlKHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICByZXR1cm47Ci0gIH0gCisgIH0KIAotICBwdWJsaWMgdm9pZCBkb0xvb2t1cCgpIAorICBwdWJsaWMgdm9pZCBkb0xvb2t1cCgpCiAgIHsKICAgICB0cnkgewogICAgICAgaW5pdENvbnRleHQgPSBuZXcgamF2YXgubmFtaW5nLkluaXRpYWxDb250ZXh0KCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9zcWwvZHJvcEJhbmtUYWJsZXMuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViLXJlc291cmNlc3htbC1kZWZhdWx0Y29ubnBvb2wvc3FsL2Ryb3BCYW5rVGFibGVzLnNxbAppbmRleCBkZjlkZjM0Li4zM2E3MDY5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWItcmVzb3VyY2VzeG1sLWRlZmF1bHRjb25ucG9vbC9zcWwvZHJvcEJhbmtUYWJsZXMuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi1yZXNvdXJjZXN4bWwtZGVmYXVsdGNvbm5wb29sL3NxbC9kcm9wQmFua1RhYmxlcy5zcWwKQEAgLTEgKzEgQEAKLWRyb3AgdGFibGUgY3VzdG9tZXIyOw0KK2Ryb3AgdGFibGUgY3VzdG9tZXIyOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvYnVpbGQucHJvcGVydGllcwppbmRleCBlMmNjNzVkLi5kYzE5YzliIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTYgKzE1LDE2IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXN1YmNsYXNzaW5nIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zdWJjbGFzc2luZyIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0ic3ViY2xhc3NpbmciLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvYnVpbGQueG1sCmluZGV4IDFkYmY4ZDYuLjM5YWUwNDIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL2J1aWxkLnhtbApAQCAtMzIsNyArMzIsNyBAQAogICAgICZjb21tb25CdWlsZDsKICAgICAmY29tbW9uUnVuOwogICAgICZ0ZXN0cHJvcGVydGllczsKLSAgICAKKwogPCEtLQogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCxzZXR1cCxkZXBsb3ktd2FyLCBydW4td2FyLCB1bmRlcGxveS13YXIsIGRlcGxveS1lYXIsIHJ1bi1lYXIsIHVuZGVwbG95LWVhciwgdW5zZXR1cCIvPgogCkBAIC00MSwxNSArNDEsMTUgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQsIGRlcGxveS1lYXIsIHNldHVwLCBydW4tZWFyLCB1bnNldHVwLCB1bmRlcGxveS1lYXIiLz4KIAogPCEtLQotCTxhbnRjYWxsIHRhcmdldD0iYnVpbGQiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InNldHVwIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJydW4td2FyIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXIiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1lYXIiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InJ1bi1lYXIiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWVhciIvPgotCTxhbnRjYWxsIHRhcmdldD0idW5zZXR1cCIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InNldHVwIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4td2FyIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXIiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1lYXIiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi1lYXIiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWVhciIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0idW5zZXR1cCIvPgogICAgIDwvdGFyZ2V0PgogLS0+CiAKQEAgLTU3LDcgKzU3LDcgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgICA8YW50IGRpcj0icmEiIHRhcmdldD0iY2xlYW4iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29ubmVjdG9yIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL3NpbXBsZUJhbmsuc3FsIi8+CkBAIC02NSw3ICs2NSw3IEBACiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtcG9vbCIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLXJlc291cmNlIi8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtYWRtaW4tb2JqZWN0Ii8+Ci0gICAgICAgIAorCiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtcG9vbCI+CiAgICAgICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtY29ubmVjdG9yLWNvbm5wb29sLWNvbW1vbiI+CkBAIC03NCw5ICs3NCw5IEBACiAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImNvbm5lY3Rvci5jb25wb29sLm5hbWUiIHZhbHVlPSJlbWJlZGRlZC1yYS1wb29sIi8+CiAgICAgICAgICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0LW9yYWNsZS1wcm9wcyI+Ci0JCTxwYXJhbSBuYW1lPSJwb29sLnR5cGUiIHZhbHVlPSJjb25uZWN0b3IiLz4KLQkJPHBhcmFtIG5hbWU9ImNvbnBvb2wubmFtZSIgdmFsdWU9ImVtYmVkZGVkLXJhLXBvb2wiLz4KLQkJPC9hbnRjYWxsPgorICAgICAgICA8cGFyYW0gbmFtZT0icG9vbC50eXBlIiB2YWx1ZT0iY29ubmVjdG9yIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJjb25wb29sLm5hbWUiIHZhbHVlPSJlbWJlZGRlZC1yYS1wb29sIi8+CisgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1yZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtY29ubmVjdG9yLXJlc291cmNlLWNvbW1vbiI+CkBAIC04OSwxNyArODksMTcgQEAKICAgICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtYWRtaW4tb2JqZWN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0iY3JlYXRlLWFkbWluLW9iamVjdCAtLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSAtLXJlc3R5cGUgY29tLnN1bi5qZGJjcmEuc3BpLkpkYmNTZXR1cEFkbWluIC0tcmFuYW1lICR7YXBwbmFtZX1BcHAjamRiY3JhIC0tcHJvcGVydHkgVGFibGVOYW1lPWN1c3RvbWVyMjpKbmRpTmFtZT1qZGJjL2VqYi1zdWJjbGFzc2luZzpTY2hlbWFOYW1lPWNvbm5lY3RvcjpOb09mUm93cz0xIi8+Ci0JICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iZWlzL2pkYmNBZG1pbiIvPgorICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9ImVpcy9qZGJjQWRtaW4iLz4KICAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgPC90YXJnZXQ+CiAKICAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtYWRtaW4tb2JqZWN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KLQkgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJkZWxldGUtYWRtaW4tb2JqZWN0Ii8+Ci0JICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0gZWlzL2pkYmNBZG1pbiIvPgotCSA8L2FudGNhbGw+Ci0JIDwvdGFyZ2V0PgotICAgIAorICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9ImRlbGV0ZS1hZG1pbi1vYmplY3QiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSBlaXMvamRiY0FkbWluIi8+CisgICAgIDwvYW50Y2FsbD4KKyAgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RhcnQiPgogICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXItaW5zdGFuY2UtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC0xMDcsMTYgKzEwNywxNiBAQAogICAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1yYS1jb25maWciIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJjcmVhdGUtcmVzb3VyY2UtYWRhcHRlci1jb25maWcgIC0tcHJvcGVydHkgUkFQcm9wZXJ0eT1WQUxJRCIvPgotCSAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7YXBwbmFtZX1BcHAjamRiY3JhIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHthcHBuYW1lfUFwcCNqZGJjcmEiLz4KICAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgPC90YXJnZXQ+CiAKICAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmEtY29uZmlnIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KLQkgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJkZWxldGUtcmVzb3VyY2UtYWRhcHRlci1jb25maWciLz4KLQkgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke2FwcG5hbWV9QXBwI2pkYmNyYSIvPgotCSA8L2FudGNhbGw+Ci0JIDwvdGFyZ2V0PgorICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9ImRlbGV0ZS1yZXNvdXJjZS1hZGFwdGVyLWNvbmZpZyIvPgorICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7YXBwbmFtZX1BcHAjamRiY3JhIi8+CisgICAgIDwvYW50Y2FsbD4KKyAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVuc2V0dXAiPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29ubmVjdG9yIj4KQEAgLTEyNyw3ICsxMjcsNyBAQAogICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLXBvb2wiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1hZG1pbi1vYmplY3QiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXBvb2wiPgogICAgICAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWNvbm5lY3Rvci1jb25ucG9vbC1jb21tb24iPgogICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJjb25uZWN0b3IuY29ucG9vbC5uYW1lIiB2YWx1ZT0iZW1iZWRkZWQtcmEtcG9vbCIvPgpAQCAtMTM3LDcgKzEzNyw3IEBACiAgICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlIj4KICAgICAgICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1jb25uZWN0b3ItcmVzb3VyY2UtY29tbW9uIj4KICAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iY29ubmVjdG9yLmpuZGkubmFtZSIgdmFsdWU9ImpkYmMvZWpiLXN1YmNsYXNzaW5nIi8+Ci0JCTwvYW50Y2FsbD4KKyAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CkBAIC0xNTMsOSArMTUzLDkgQEAKICAgICAgIDxlY2hvIG1lc3NhZ2U9ImNvbW1vbi54bWw6IENvbXBpbGluZyB0ZXN0IHNvdXJjZSBmaWxlcyIgbGV2ZWw9InZlcmJvc2UiLz4KICAgICAgIDxqYXZhYyBzcmNkaXI9InNlcnZsZXQiCiAgICAgICAgICBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKLQkgY2xhc3NwYXRoPSIke3MxYXN0ZXN0LmNsYXNzcGF0aH06cmEvcHVibGlzaC9pbnRlcm5hbC9jbGFzc2VzIgorICAgICBjbGFzc3BhdGg9IiR7czFhc3Rlc3QuY2xhc3NwYXRofTpyYS9wdWJsaXNoL2ludGVybmFsL2NsYXNzZXMiCiAgICAgICAgICBkZWJ1Zz0ib24iCi0JIGZhaWxvbmVycm9yPSJ0cnVlIi8+CisgICAgIGZhaWxvbmVycm9yPSJ0cnVlIi8+CiAgICAgIDwvdGFyZ2V0PgogCiAKQEAgLTE2NCwzNCArMTY0LDM0IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICA8YW50IGRpcj0icmEiIHRhcmdldD0iYXNzZW1ibGUiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICA8L2FudGNhbGw+Ci0gICAgICAgCisKICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVqYi1qYXItY29tbW9uIj4KICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgPC9hbnRjYWxsPgogCi0gICAgCisKICAgICA8ZGVsZXRlIGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LmVhciIvPgogICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgotICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+ICAgIAotICAgIDxlYXIgZWFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIiAKKyAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgorICAgIDxlYXIgZWFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIgogICAgICBhcHB4bWw9IiR7YXBwbGljYXRpb24ueG1sfSI+CiAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgogICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KICAgICAgIDxpbmNsdWRlIG5hbWU9Iioud2FyIi8+Ci0gICAgPC9maWxlc2V0PiAgCisgICAgPC9maWxlc2V0PgogICAgIDxmaWxlc2V0IGRpcj0icmEvcHVibGlzaC9saWIiPgogICAgICAgPGluY2x1ZGUgbmFtZT0iKi5yYXIiLz4KICAgICA8L2ZpbGVzZXQ+CiAgICAgPC9lYXI+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCi0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveS1lYXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtcmEtY29uZmlnIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgpAQCAtMjAwLDI3ICsyMDAsMjcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveS13YXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4td2FyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVud2ViY2xpZW50LWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9InRlc3RzdWl0ZS5pZCIgdmFsdWU9IndlYi10by1lamIgKHN0YW5kLWFsb25lIHdhciBiYXNlZCkiLz4KLQk8L2FudGNhbGw+CisgICAgPHBhcmFtIG5hbWU9InRlc3RzdWl0ZS5pZCIgdmFsdWU9IndlYi10by1lamIgKHN0YW5kLWFsb25lIHdhciBiYXNlZCkiLz4KKyAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi1lYXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW53ZWJjbGllbnQtY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0idGVzdHN1aXRlLmlkIiB2YWx1ZT0id2ViLXRvLWVqYiAoZWFyIGJhc2VkKSIvPgotCTwvYW50Y2FsbD4KKyAgICA8cGFyYW0gbmFtZT0idGVzdHN1aXRlLmlkIiB2YWx1ZT0id2ViLXRvLWVqYiAoZWFyIGJhc2VkKSIvPgorICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3ktZWFyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLXJhLWNvbmZpZyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95LXdhciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCmluZGV4IDFkMTIwMGQuLmRmNGJiOTMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKQEAgLTI5LDIwICsyOSwyMCBAQAogICAgICAgICA8cmVzLXJlZi1uYW1lPmpkYmMvU2ltcGxlQmFuazwvcmVzLXJlZi1uYW1lPgogICAgICAgICA8am5kaS1uYW1lPmpkYmMvZWpiLXN1YmNsYXNzaW5nPC9qbmRpLW5hbWU+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KLSAgICAgIDxpcy1yZWFkLW9ubHktYmVhbj5mYWxzZTwvaXMtcmVhZC1vbmx5LWJlYW4+IAotICAgICAgPGNvbW1pdC1vcHRpb24+QjwvY29tbWl0LW9wdGlvbj4gCi0gICAgIDxiZWFuLXBvb2w+IAotICAgICAgICAgPHN0ZWFkeS1wb29sLXNpemU+MDwvc3RlYWR5LXBvb2wtc2l6ZT4gCi0gICAgICAgICA8cmVzaXplLXF1YW50aXR5PjE8L3Jlc2l6ZS1xdWFudGl0eT4gCi0gICAgICAgICA8bWF4LXBvb2wtc2l6ZT4xMDwvbWF4LXBvb2wtc2l6ZT4gCi0gICAgICAgICA8cG9vbC1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4zNjAwPC9wb29sLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPiAKLSAgICAgIDwvYmVhbi1wb29sPiAKLSAgICAgIDxiZWFuLWNhY2hlPiAKLSAgICAgICAgICA8bWF4LWNhY2hlLXNpemU+MTAwPC9tYXgtY2FjaGUtc2l6ZT4gCi0gICAgICAgIDxjYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz42MDwvY2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+IAotICAgICAgICA8cmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+IAotICAgICAgICA8dmljdGltLXNlbGVjdGlvbi1wb2xpY3k+TFJVPC92aWN0aW0tc2VsZWN0aW9uLXBvbGljeT4gCi0gICAgICA8L2JlYW4tY2FjaGU+IAorICAgICAgPGlzLXJlYWQtb25seS1iZWFuPmZhbHNlPC9pcy1yZWFkLW9ubHktYmVhbj4KKyAgICAgIDxjb21taXQtb3B0aW9uPkI8L2NvbW1pdC1vcHRpb24+CisgICAgIDxiZWFuLXBvb2w+CisgICAgICAgICA8c3RlYWR5LXBvb2wtc2l6ZT4wPC9zdGVhZHktcG9vbC1zaXplPgorICAgICAgICAgPHJlc2l6ZS1xdWFudGl0eT4xPC9yZXNpemUtcXVhbnRpdHk+CisgICAgICAgICA8bWF4LXBvb2wtc2l6ZT4xMDwvbWF4LXBvb2wtc2l6ZT4KKyAgICAgICAgIDxwb29sLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjM2MDA8L3Bvb2wtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+CisgICAgICA8L2JlYW4tcG9vbD4KKyAgICAgIDxiZWFuLWNhY2hlPgorICAgICAgICAgIDxtYXgtY2FjaGUtc2l6ZT4xMDA8L21heC1jYWNoZS1zaXplPgorICAgICAgICA8Y2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+NjA8L2NhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPgorICAgICAgICA8cmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+CisgICAgICAgIDx2aWN0aW0tc2VsZWN0aW9uLXBvbGljeT5MUlU8L3ZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PgorICAgICAgPC9iZWFuLWNhY2hlPgogICAgIDwvZWpiPgogICAgIDxlamI+CiAgICAgICA8ZWpiLW5hbWU+Q3VzdG9tZXJDaGVja2luZ0VKQjwvZWpiLW5hbWU+CkBAIC01MSwyMCArNTEsMjAgQEAKICAgICAgICAgPHJlcy1yZWYtbmFtZT5qZGJjL1NpbXBsZUJhbms8L3Jlcy1yZWYtbmFtZT4KICAgICAgICAgPGpuZGktbmFtZT5qZGJjL2VqYi1zdWJjbGFzc2luZzwvam5kaS1uYW1lPgogICAgICAgPC9yZXNvdXJjZS1yZWY+Ci0gICAgICA8aXMtcmVhZC1vbmx5LWJlYW4+ZmFsc2U8L2lzLXJlYWQtb25seS1iZWFuPiAKLSAgICAgIDxjb21taXQtb3B0aW9uPkI8L2NvbW1pdC1vcHRpb24+IAotICAgICA8YmVhbi1wb29sPiAKLSAgICAgICAgIDxzdGVhZHktcG9vbC1zaXplPjA8L3N0ZWFkeS1wb29sLXNpemU+IAotICAgICAgICAgPHJlc2l6ZS1xdWFudGl0eT4xPC9yZXNpemUtcXVhbnRpdHk+IAotICAgICAgICAgPG1heC1wb29sLXNpemU+MTA8L21heC1wb29sLXNpemU+IAorICAgICAgPGlzLXJlYWQtb25seS1iZWFuPmZhbHNlPC9pcy1yZWFkLW9ubHktYmVhbj4KKyAgICAgIDxjb21taXQtb3B0aW9uPkI8L2NvbW1pdC1vcHRpb24+CisgICAgIDxiZWFuLXBvb2w+CisgICAgICAgICA8c3RlYWR5LXBvb2wtc2l6ZT4wPC9zdGVhZHktcG9vbC1zaXplPgorICAgICAgICAgPHJlc2l6ZS1xdWFudGl0eT4xPC9yZXNpemUtcXVhbnRpdHk+CisgICAgICAgICA8bWF4LXBvb2wtc2l6ZT4xMDwvbWF4LXBvb2wtc2l6ZT4KICAgICAgICAgPHBvb2wtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcG9vbC1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4KLSAgICAgIDwvYmVhbi1wb29sPiAKLSAgICAgIDxiZWFuLWNhY2hlPiAKKyAgICAgIDwvYmVhbi1wb29sPgorICAgICAgPGJlYW4tY2FjaGU+CiAgICAgICAgICAgPG1heC1jYWNoZS1zaXplPjEwMDwvbWF4LWNhY2hlLXNpemU+CiAgICAgICAgICAgPGNhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjYwPC9jYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4KICAgICAgICAgICA8cmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+CiAgICAgICAgICAgPHZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PkxSVTwvdmljdGltLXNlbGVjdGlvbi1wb2xpY3k+Ci0gICAgICA8L2JlYW4tY2FjaGU+IAorICAgICAgPC9iZWFuLWNhY2hlPgogICAgIDwvZWpiPgogICA8L2VudGVycHJpc2UtYmVhbnM+CiA8L3N1bi1lamItamFyPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL2VqYi9DdXN0b21lci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL2VqYi9DdXN0b21lci5qYXZhCmluZGV4IDU5MjJmMzEuLjM2MTVlMTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9lamIvQ3VzdG9tZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvZWpiL0N1c3RvbWVyLmphdmEKQEAgLTQ2LDQgKzQ2LDQgQEAKIAogfQogCi0gIAorCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvZWpiL0N1c3RvbWVyQ2hlY2tpbmcuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9lamIvQ3VzdG9tZXJDaGVja2luZy5qYXZhCmluZGV4IGZmMTVlN2UuLjg5ZGMzMjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9lamIvQ3VzdG9tZXJDaGVja2luZy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9lamIvQ3VzdG9tZXJDaGVja2luZy5qYXZhCkBAIC0yMiw0ICsyMiw0IEBACiB7CiB9CiAKLSAgCisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9lamIvQ3VzdG9tZXJDaGVja2luZ0VKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL2VqYi9DdXN0b21lckNoZWNraW5nRUpCLmphdmEKaW5kZXggZWUwZDE3Yy4uNGI1NDQ0NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL2VqYi9DdXN0b21lckNoZWNraW5nRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL2VqYi9DdXN0b21lckNoZWNraW5nRUpCLmphdmEKQEAgLTk0LDUgKzk0LDUgQEAKICAgfQogCiB9Ci0gICAgCi0gICAgCisKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL2VqYi9DdXN0b21lckVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL2VqYi9DdXN0b21lckVKQi5qYXZhCmluZGV4IDA1MjBiNjAuLjA3MjIwZGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9lamIvQ3VzdG9tZXJFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvZWpiL0N1c3RvbWVyRUpCLmphdmEKQEAgLTUzLDcgKzUzLDcgQEAKIAogICBwdWJsaWMgU3RyaW5nIGdldEFkZHJlc3MxKCkKICAgewotICAgIHJldHVybiBhZGRyZXNzMTsgCisgICAgcmV0dXJuIGFkZHJlc3MxOwogICB9CiAKICAgcHVibGljIFN0cmluZyBnZXRBZGRyZXNzMigpCkBAIC0xMzksNyArMTM5LDcgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTUUwgZXhjZXB0aW9uIG9jY3VyZWQgaW4gZWpiUmVtb3ZlIG1ldGhvZCIpOwogICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgfQotICAgIAorCiAgIH0KIAogICBwdWJsaWMgdm9pZCBlamJTdG9yZSgpCkBAIC0yMDYsMTIgKzIwNiwxMiBAQAogICAgIH0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CiAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNRTEV4Y2VwdGlvbiBvY2N1cnJlZCBpbiBlamJMb2FkKCkgbWV0aG9kIik7CiAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0gICAKKyAgICB9CiAgIH0KIAogICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHt9CiAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHt9CiB9Ci0gICAgICAKLSAgICAKLSAgICAKKworCisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9lamIvQ3VzdG9tZXJTYXZpbmdzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvZWpiL0N1c3RvbWVyU2F2aW5ncy5qYXZhCmluZGV4IDI3NDA2OTIuLmM0NWExYzUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9lamIvQ3VzdG9tZXJTYXZpbmdzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL2VqYi9DdXN0b21lclNhdmluZ3MuamF2YQpAQCAtMjIsNCArMjIsNCBAQAogewogfQogCi0gIAorCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvZWpiL0N1c3RvbWVyU2F2aW5nc0VKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL2VqYi9DdXN0b21lclNhdmluZ3NFSkIuamF2YQppbmRleCBmMzBiNTA2Li5iMGNlN2I1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvZWpiL0N1c3RvbWVyU2F2aW5nc0VKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9lamIvQ3VzdG9tZXJTYXZpbmdzRUpCLmphdmEKQEAgLTk1LDYgKzk1LDYgQEAKICAgfQogCiB9Ci0gICAgICAKLSAgICAKLSAgICAKKworCisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZWUyZWNhMC4uZmQyMWMzZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE0LDcgKzE0LDcgQEAKICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAjCiAKLSAgICAKKwogIyMjIENvbXBvbmVudCBQcm9wZXJ0aWVzICMjIwogc3JjLmRpcj1zcmMKIGNvbXBvbmVudC5wdWJsaXNoLmhvbWU9LgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9idWlsZC54bWwKaW5kZXggY2I2NmE0NS4uM2FjZWVmMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvYnVpbGQueG1sCkBAIC0yMyw2MiArMjMsNjIgQEAKIAogPHByb2plY3QgbmFtZT0iSkRCQ0Nvbm5lY3RvciB0b3AgbGV2ZWwiIGRlZmF1bHQ9ImJ1aWxkIj4KICAgICA8cHJvcGVydHkgbmFtZT0icGtnLmRpciIgdmFsdWU9ImNvbS9zdW4vamRiY3JhL3NwaSIvPgotICAgIAorCiAgICAgJmNvbW1vbjsKICAgICAmdGVzdGNvbW1vbjsKICAgICA8cHJvcGVydHkgZmlsZT0iLi9idWlsZC5wcm9wZXJ0aWVzIi8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlLGFzc2VtYmxlIiAvPgotICAgICAgICAgIAorCiAKICAgICA8IS0tIGluaXQuIEluaXRpYWxpemF0aW9uIGludm9sdmVzIGNyZWF0aW5nIHB1Ymxpc2hpbmcgZGlyZWN0b3JpZXMgYW5kCi0gICAgICAgICBPUyBzcGVjaWZpYyB0YXJnZXRzLiAtLT4gCisgICAgICAgICBPUyBzcGVjaWZpYyB0YXJnZXRzLiAtLT4KICAgICA8dGFyZ2V0IG5hbWU9ImluaXQiIGRlc2NyaXB0aW9uPSIke2NvbXBvbmVudC5uYW1lfSBpbml0aWFsaXphdGlvbiI+CiAgICAgICAgIDx0c3RhbXA+CiAgICAgICAgICAgICA8Zm9ybWF0IHByb3BlcnR5PSJzdGFydC50aW1lIiBwYXR0ZXJuPSJNTS9kZC95eXl5IGhoOm1tIGFhIi8+Ci0gICAgICAgIDwvdHN0YW1wPiAgICAKKyAgICAgICAgPC90c3RhbXA+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkJ1aWxkaW5nIGNvbXBvbmVudCAke2NvbXBvbmVudC5uYW1lfSIvPgogICAgICAgICA8bWtkaXIgZGlyPSIke2NvbXBvbmVudC5jbGFzc2VzLmRpcn0iLz4KLSAgICAgICAgPG1rZGlyIGRpcj0iJHtjb21wb25lbnQubGliLmhvbWV9Ii8+ICAgIAorICAgICAgICA8bWtkaXIgZGlyPSIke2NvbXBvbmVudC5saWIuaG9tZX0iLz4KICAgICA8L3RhcmdldD4KLSAgICA8IS0tIGNvbXBpbGUgLS0+IAorICAgIDwhLS0gY29tcGlsZSAtLT4KICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImluaXQiCi0gICAgICAgICAgICBkZXNjcmlwdGlvbj0iQ29tcGlsZSBjb20vc3VuLyogY29tL2lwbGFuZXQvKiBzb3VyY2VzIj4gIAorICAgICAgICAgICAgZGVzY3JpcHRpb249IkNvbXBpbGUgY29tL3N1bi8qIGNvbS9pcGxhbmV0Lyogc291cmNlcyI+CiAgICAgICAgIDwhLS08ZWNobyBtZXNzYWdlPSJDb25uZWN0b3IgYXBpIHJlc2lkZXMgaW4gJHtjb25uZWN0b3ItYXBpLmphcn0iLz4tLT4KLSAgICAgICAgPGphdmFjIHNyY2Rpcj0iJHtzcmMuZGlyfSIgCisgICAgICAgIDxqYXZhYyBzcmNkaXI9IiR7c3JjLmRpcn0iCiAgICAgICAgICAgICAgICBkZXN0ZGlyPSIke2NvbXBvbmVudC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSI+CiAgICAgICAgICAgICA8Y2xhc3NwYXRoPgotCQk8ZmlsZXNldCBkaXI9IiR7ZW52LlMxQVNfSE9NRX0vbW9kdWxlcyI+Ci0JCSAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLmphciIgLz4KLQkJPC9maWxlc2V0PgorICAgICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LlMxQVNfSE9NRX0vbW9kdWxlcyI+CisgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLmphciIgLz4KKyAgICAgICAgPC9maWxlc2V0PgogICAgICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJjb20vc3VuL2pkYmNyYS8qKiIvPgogICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iY29tL3N1bi9hcHBzZXJ2LyoqIi8+CiAgICAgICAgIDwvamF2YWM+CiAgICAgPC90YXJnZXQ+Ci0gICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkIi8+CiAKLSAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUiPiAgICAKLSAgICAJCi0JPGphciBqYXJmaWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vamRiYy5qYXIiIAotICAgICAgICAgICAgYmFzZWRpcj0iJHtjb21wb25lbnQuY2xhc3Nlcy5kaXJ9IiBpbmNsdWRlcz0iJHtwa2cuZGlyfS8qKi8qLCAKLSAgICAgICAgICAgIGNvbS9zdW4vYXBwc2Vydi8qKi8qLCBjb20vc3VuL2pkYmNyYS91dGlsLyoqLyosIGNvbS9zdW4vamRiY3JhL2NvbW1vbi8qKi8qIi8+IAotICAgCQotICAgICAgICA8Y29weSBmaWxlPSIke3NyYy5kaXJ9L2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvcmEtZHMueG1sIiAKLSAgICAgICAgICAgICAgICB0b2ZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4JCisgICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIj4KKworICAgIDxqYXIgamFyZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L2pkYmMuamFyIgorICAgICAgICAgICAgYmFzZWRpcj0iJHtjb21wb25lbnQuY2xhc3Nlcy5kaXJ9IiBpbmNsdWRlcz0iJHtwa2cuZGlyfS8qKi8qLAorICAgICAgICAgICAgY29tL3N1bi9hcHBzZXJ2LyoqLyosIGNvbS9zdW4vamRiY3JhL3V0aWwvKiovKiwgY29tL3N1bi9qZGJjcmEvY29tbW9uLyoqLyoiLz4KKworICAgICAgICA8Y29weSBmaWxlPSIke3NyYy5kaXJ9L2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvcmEtZHMueG1sIgorICAgICAgICAgICAgICAgIHRvZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgogICAgICAgICA8L2NvcHk+Ci0gICAJPGphciBqYXJmaWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vamRiY3JhLnJhciIgCi0JCWJhc2VkaXI9IiR7Y29tcG9uZW50LmxpYi5ob21lfSIgaW5jbHVkZXM9ImpkYmMuamFyIj4KKyAgICAgICA8amFyIGphcmZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9qZGJjcmEucmFyIgorICAgICAgICBiYXNlZGlyPSIke2NvbXBvbmVudC5saWIuaG9tZX0iIGluY2x1ZGVzPSJqZGJjLmphciI+CiAKLSAgIAkJPG1ldGFpbmYgZGlyPSIke2NvbXBvbmVudC5saWIuaG9tZX0iPgotICAgCQkJPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+Ci0gICAJCTwvbWV0YWluZj4KLSAgIAk8L2phcj4KKyAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2NvbXBvbmVudC5saWIuaG9tZX0iPgorICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+CisgICAgICAgICAgIDwvbWV0YWluZj4KKyAgICAgICA8L2phcj4KIAotICAgCTxkZWxldGUgZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L3JhLnhtbCIvPgotCQorICAgICAgIDxkZWxldGUgZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L3JhLnhtbCIvPgorCiAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVzY3JpcHRpb249IkNsZWFuIHRoZSBidWlsZCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vYXBwc2Vydi9qZGJjcmEvRGF0YVNvdXJjZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2FwcHNlcnYvamRiY3JhL0RhdGFTb3VyY2UuamF2YQppbmRleCA5ZjgzOTlhLi5iNmVmMzBiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vYXBwc2Vydi9qZGJjcmEvRGF0YVNvdXJjZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9hcHBzZXJ2L2pkYmNyYS9EYXRhU291cmNlLmphdmEKQEAgLTIwLDE1ICsyMCwxNSBAQAogaW1wb3J0IGphdmEuc3FsLlNRTEV4Y2VwdGlvbjsKIAogLyoqCi0gKiBUaGUgPGNvZGU+amF2YXguc3FsLkRhdGFTb3VyY2U8L2NvZGU+IGltcGxlbWVudGF0aW9uIG9mIFN1bk9ORSBhcHBsaWNhdGlvbiAKKyAqIFRoZSA8Y29kZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29kZT4gaW1wbGVtZW50YXRpb24gb2YgU3VuT05FIGFwcGxpY2F0aW9uCiAgKiBzZXJ2ZXIgd2lsbCBpbXBsZW1lbnQgdGhpcyBpbnRlcmZhY2UuIEFuIGFwcGxpY2F0aW9uIHByb2dyYW0gd291bGQgYmUgYWJsZQotICogdG8gdXNlIHRoaXMgaW50ZXJmYWNlIHRvIGRvIHRoZSBleHRlbmRlZCBmdW5jdGlvbmFsaXR5IGV4cG9zZWQgYnkgU3VuT05FIAorICogdG8gdXNlIHRoaXMgaW50ZXJmYWNlIHRvIGRvIHRoZSBleHRlbmRlZCBmdW5jdGlvbmFsaXR5IGV4cG9zZWQgYnkgU3VuT05FCiAgKiBhcHBsaWNhdGlvbiBzZXJ2ZXIuCi0gKiA8cD5BIHNhbXBsZSBjb2RlIGZvciBnZXR0aW5nIGRyaXZlcidzIGNvbm5lY3Rpb24gaW1wbGVtZW50YXRpb24gd291bGQgbGlrZSAKKyAqIDxwPkEgc2FtcGxlIGNvZGUgZm9yIGdldHRpbmcgZHJpdmVyJ3MgY29ubmVjdGlvbiBpbXBsZW1lbnRhdGlvbiB3b3VsZCBsaWtlCiAgKiB0aGUgZm9sbG93aW5nLgogICogPHByZT4KICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgY29tLnN1bi5hcHBzZXJ2LkRhdGFTb3VyY2UgZHMgPSAoY29tLnN1bi5hcHBzZXJ2LkRhdGFTT3VyY2UpIGljLmxvb2t1cCgiamRiYy9Qb2ludEJhc2UiKTsgCisgICAgIGNvbS5zdW4uYXBwc2Vydi5EYXRhU291cmNlIGRzID0gKGNvbS5zdW4uYXBwc2Vydi5EYXRhU091cmNlKSBpYy5sb29rdXAoImpkYmMvUG9pbnRCYXNlIik7CiAgICAgIENvbm5lY3Rpb24gY29uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwogICAgICBDb25uZWN0aW9uIGRyaXZlcmNvbiA9IGRzLmdldENvbm5lY3Rpb24oY29uKTsKIApAQCAtMzYsMTMgKzM2LDEzIEBACiAKICAgICAgY29uLmNsb3NlKCk7CiAgICA8L3ByZT4KLSAqIAorICoKICAqIEBhdXRob3IgQmlub2QgUC5HCiAgKi8KIHB1YmxpYyBpbnRlcmZhY2UgRGF0YVNvdXJjZSBleHRlbmRzIGphdmF4LnNxbC5EYXRhU291cmNlIHsKIAogICAgIC8qKgotICAgICAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIFNRTENvbm5lY3Rpb24gZnJvbSB0aGUgQ29ubmVjdGlvbiB3cmFwcGVyIAorICAgICAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIFNRTENvbm5lY3Rpb24gZnJvbSB0aGUgQ29ubmVjdGlvbiB3cmFwcGVyCiAgICAgICogaW1wbGVtZW50YXRpb24gb2YgU3VuT05FIGFwcGxpY2F0aW9uIHNlcnZlci4gSWYgYW4gYWN0dWFsIGNvbm5lY3Rpb24gaXMKICAgICAgKiBzdXBwbGllZCBhcyBhcmd1bWVudCwgdGhlbiBpdCB3aWxsIGJlIGp1c3QgcmV0dXJuZWQuCiAgICAgICoKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VPYmplY3RCdWlsZGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlT2JqZWN0QnVpbGRlci5qYXZhCmluZGV4IGMyODIyZTIuLjZhMzY2YjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VPYmplY3RCdWlsZGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIuamF2YQpAQCAtMjcsMjIgKzI3LDIyIEBACiBpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOwogaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOwogLyoqCi0gKiBVdGlsaXR5IGNsYXNzLCB3aGljaCB3b3VsZCBjcmVhdGUgbmVjZXNzYXJ5IERhdGFzb3VyY2Ugb2JqZWN0IGFjY29yZGluZyB0byB0aGUgCisgKiBVdGlsaXR5IGNsYXNzLCB3aGljaCB3b3VsZCBjcmVhdGUgbmVjZXNzYXJ5IERhdGFzb3VyY2Ugb2JqZWN0IGFjY29yZGluZyB0byB0aGUKICAqIHNwZWNpZmljYXRpb24uCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8yMwotICogQGF1dGhvcglCaW5vZCBQLkcKLSAqIEBzZWUJCWNvbS5zdW4uamRiY3JhLmNvbW1vbi5EYXRhU291cmNlU3BlYwotICogQHNlZQkJY29tLnN1bi5qZGJjcmEudXRpbC5NZXRob2RFeGNlY3V0b3IKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMjMKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCisgKiBAc2VlICAgICAgICBjb20uc3VuLmpkYmNyYS5jb21tb24uRGF0YVNvdXJjZVNwZWMKKyAqIEBzZWUgICAgICAgIGNvbS5zdW4uamRiY3JhLnV0aWwuTWV0aG9kRXhjZWN1dG9yCiAgKi8KIHB1YmxpYyBjbGFzcyBEYXRhU291cmNlT2JqZWN0QnVpbGRlciBpbXBsZW1lbnRzIGphdmEuaW8uU2VyaWFsaXphYmxlewogCiAgICAgcHJpdmF0ZSBEYXRhU291cmNlU3BlYyBzcGVjOwotICAgIAorCiAgICAgcHJpdmF0ZSBIYXNodGFibGUgZHJpdmVyUHJvcGVydGllcyA9IG51bGw7Ci0gICAgCi0gICAgcHJpdmF0ZSBNZXRob2RFeGVjdXRvciBleGVjdXRvciA9IG51bGw7ICAgIAotICAgIAorCisgICAgcHJpdmF0ZSBNZXRob2RFeGVjdXRvciBleGVjdXRvciA9IG51bGw7CisKICAgICBwcml2YXRlIHN0YXRpYyBMb2dnZXIgX2xvZ2dlcjsKICAgICBzdGF0aWMgewogICAgICAgICBfbG9nZ2VyID0gTG9nZ2VyLmdldEFub255bW91c0xvZ2dlcigpOwpAQCAtNTAsMTY3ICs1MCwxNjcgQEAKICAgICBwcml2YXRlIGJvb2xlYW4gZGVidWcgPSBmYWxzZTsKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3QgYSBEYXRhU291cmNlIE9iamVjdCBmcm9tIHRoZSBzcGVjLgotICAgICAqIAotICAgICAqIEBwYXJhbQlzcGVjCTxjb2RlPiBEYXRhU291cmNlU3BlYyA8L2NvZGU+IG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcGVjICAgIDxjb2RlPiBEYXRhU291cmNlU3BlYyA8L2NvZGU+IG9iamVjdC4KICAgICAgKi8KICAgICBwdWJsaWMgRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIoRGF0YVNvdXJjZVNwZWMgc3BlYykgewotICAgIAl0aGlzLnNwZWMgPSBzcGVjOwotICAgIAlleGVjdXRvciA9IG5ldyBNZXRob2RFeGVjdXRvcigpOworICAgICAgICB0aGlzLnNwZWMgPSBzcGVjOworICAgICAgICBleGVjdXRvciA9IG5ldyBNZXRob2RFeGVjdXRvcigpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdCB0aGUgRGF0YVNvdXJjZSBPYmplY3QgZnJvbSB0aGUgc3BlYy4KICAgICAgKgotICAgICAqIEByZXR1cm4JT2JqZWN0IGNvbnN0cnVjdGVkIHVzaW5nIHRoZSBEYXRhU291cmNlU3BlYy4KLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiBpZiB0aGUgY2xhc3MgaXMgbm90IGZvdW5kIG9yIHNvbWUgaXNzdWUgaW4gZXhlY3V0aW5nCi0gICAgICoJCXNvbWUgbWV0aG9kLgorICAgICAqIEByZXR1cm4gICAgT2JqZWN0IGNvbnN0cnVjdGVkIHVzaW5nIHRoZSBEYXRhU291cmNlU3BlYy4KKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiBpZiB0aGUgY2xhc3MgaXMgbm90IGZvdW5kIG9yIHNvbWUgaXNzdWUgaW4gZXhlY3V0aW5nCisgICAgICogICAgICAgIHNvbWUgbWV0aG9kLgogICAgICAqLwogICAgIHB1YmxpYyBPYmplY3QgY29uc3RydWN0RGF0YVNvdXJjZU9iamVjdCgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKLSAgICAJZHJpdmVyUHJvcGVydGllcyA9IHBhcnNlRHJpdmVyUHJvcGVydGllcyhzcGVjKTsKKyAgICAgICAgZHJpdmVyUHJvcGVydGllcyA9IHBhcnNlRHJpdmVyUHJvcGVydGllcyhzcGVjKTsKICAgICAgICAgT2JqZWN0IGRhdGFTb3VyY2VPYmplY3QgPSBnZXREYXRhU291cmNlT2JqZWN0KCk7CiAgICAgICAgIE1ldGhvZFtdIG1ldGhvZHMgPSBkYXRhU291cmNlT2JqZWN0LmdldENsYXNzKCkuZ2V0TWV0aG9kcygpOwogICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBtZXRob2RzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICBTdHJpbmcgbWV0aG9kTmFtZSA9IG1ldGhvZHNbaV0uZ2V0TmFtZSgpOwotCSAgICBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRVc2VyIikpewkgICAgCQotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVVNFUk5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFBhc3N3b3JkIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUEFTU1dPUkQpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldExvZ2luVGltZU91dCIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR0lOVElNRU9VVCksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TG9nV3JpdGVyIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HV1JJVEVSKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXREYXRhYmFzZU5hbWUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBQkFTRU5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldERhdGFTb3VyY2VOYW1lIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQVNPVVJDRU5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldERlc2NyaXB0aW9uIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVTQ1JJUFRJT04pLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXROZXR3b3JrUHJvdG9jb2wiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ORVRXT1JLUFJPVE9DT0wpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFBvcnROdW1iZXIiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QT1JUTlVNQkVSKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRSb2xlTmFtZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlJPTEVOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCQkgICAgCQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRTZXJ2ZXJOYW1lIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuU0VSVkVSTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNYXhTdGF0ZW1lbnRzIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUFYU1RBVEVNRU5UUyksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0SW5pdGlhbFBvb2xTaXplIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuSU5JVElBTFBPT0xTSVpFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNaW5Qb29sU2l6ZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1JTlBPT0xTSVpFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNYXhQb29sU2l6ZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1BWFBPT0xTSVpFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNYXhJZGxlVGltZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1BWElETEVUSU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRQcm9wZXJ0eUN5Y2xlIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUFJPUEVSVFlDWUNMRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAkKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKGRyaXZlclByb3BlcnRpZXMuY29udGFpbnNLZXkobWV0aG9kTmFtZS50b1VwcGVyQ2FzZSgpKSl7Ci0JICAgIAlWZWN0b3IgdmFsdWVzID0gKFZlY3RvcikgZHJpdmVyUHJvcGVydGllcy5nZXQobWV0aG9kTmFtZS50b1VwcGVyQ2FzZSgpKTsKLQkgICAgICAgIGV4ZWN1dG9yLnJ1bk1ldGhvZChtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QsIHZhbHVlcyk7Ci0JICAgIH0KKyAgICAgICAgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0VXNlciIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlVTRVJOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRQYXNzd29yZCIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBBU1NXT1JEKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRMb2dpblRpbWVPdXQiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dJTlRJTUVPVVQpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldExvZ1dyaXRlciIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR1dSSVRFUiksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0RGF0YWJhc2VOYW1lIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQUJBU0VOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXREYXRhU291cmNlTmFtZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXREZXNjcmlwdGlvbiIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFU0NSSVBUSU9OKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXROZXR3b3JrUHJvdG9jb2wiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ORVRXT1JLUFJPVE9DT0wpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFBvcnROdW1iZXIiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QT1JUTlVNQkVSKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRSb2xlTmFtZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlJPTEVOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRTZXJ2ZXJOYW1lIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuU0VSVkVSTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWF4U3RhdGVtZW50cyIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1BWFNUQVRFTUVOVFMpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldEluaXRpYWxQb29sU2l6ZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLklOSVRJQUxQT09MU0laRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWluUG9vbFNpemUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NSU5QT09MU0laRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWF4UG9vbFNpemUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NQVhQT09MU0laRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWF4SWRsZVRpbWUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NQVhJRExFVElNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0UHJvcGVydHlDeWNsZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBST1BFUlRZQ1lDTEUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChkcml2ZXJQcm9wZXJ0aWVzLmNvbnRhaW5zS2V5KG1ldGhvZE5hbWUudG9VcHBlckNhc2UoKSkpeworICAgICAgICAgICAgVmVjdG9yIHZhbHVlcyA9IChWZWN0b3IpIGRyaXZlclByb3BlcnRpZXMuZ2V0KG1ldGhvZE5hbWUudG9VcHBlckNhc2UoKSk7CisgICAgICAgICAgICBleGVjdXRvci5ydW5NZXRob2QobWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0LCB2YWx1ZXMpOworICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGRhdGFTb3VyY2VPYmplY3Q7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSBleHRyYSBkcml2ZXIgcHJvcGVydGllcyBmcm9tIHRoZSBEYXRhU291cmNlU3BlYyBvYmplY3QgYW5kCiAgICAgICogcGFyc2UgdGhlbSB0byBhIHNldCBvZiBtZXRob2ROYW1lIGFuZCBwYXJhbWV0ZXJzLiBQcmVwYXJlIGEgaGFzaHRhYmxlCiAgICAgICogY29udGFpbmluZyB0aGVzZSBkZXRhaWxzIGFuZCByZXR1cm4uCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3BlYwk8Y29kZT4gRGF0YVNvdXJjZVNwZWMgPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHJldHVybglIYXNodGFibGUgY29udGFpbmluZyBtZXRob2QgbmFtZXMgYW5kIHBhcmFtZXRlcnMsCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglJZiBkZWxpbWl0ZXIgaXMgbm90IHByb3ZpZGVkIGFuZCBwcm9wZXJ0eSBzdHJpbmcKLSAgICAgKgkJCQkJaXMgbm90IG51bGwuCisgICAgICogQHBhcmFtICAgIHNwZWMgICAgPGNvZGU+IERhdGFTb3VyY2VTcGVjIDwvY29kZT4gb2JqZWN0LgorICAgICAqIEByZXR1cm4gICAgSGFzaHRhYmxlIGNvbnRhaW5pbmcgbWV0aG9kIG5hbWVzIGFuZCBwYXJhbWV0ZXJzLAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgSWYgZGVsaW1pdGVyIGlzIG5vdCBwcm92aWRlZCBhbmQgcHJvcGVydHkgc3RyaW5nCisgICAgICogICAgICAgICAgICAgICAgICAgIGlzIG5vdCBudWxsLgogICAgICAqLwogICAgIHByaXZhdGUgSGFzaHRhYmxlIHBhcnNlRHJpdmVyUHJvcGVydGllcyhEYXRhU291cmNlU3BlYyBzcGVjKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb257Ci0gICAgCVN0cmluZyBkZWxpbSA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUik7CisgICAgICAgIFN0cmluZyBkZWxpbSA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUik7CiAKICAgICAgICAgU3RyaW5nIHByb3AgPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EUklWRVJQUk9QRVJUSUVTKTsKLQlpZiAoIHByb3AgPT0gbnVsbCB8fCBwcm9wLnRyaW0oKS5lcXVhbHMoIiIpKSB7Ci0JICAgIHJldHVybiBuZXcgSGFzaHRhYmxlKCk7Ci0JfSBlbHNlIGlmIChkZWxpbSA9PSBudWxsIHx8IGRlbGltLmVxdWFscygiIikpIHsKLQkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uICgiRGVsaW1pdGVyIGlzIG5vdCBwcm92aWRlZCBpbiB0aGUgY29uZmlndXJhdGlvbiIpOwotCX0KLQkKLQlIYXNodGFibGUgcHJvcGVydGllcyA9IG5ldyBIYXNodGFibGUoKTsKLQlkZWxpbSA9IGRlbGltLnRyaW0oKTsJCi0JU3RyaW5nIHNlcCA9IGRlbGltK2RlbGltOwotCWludCBzZXBMZW4gPSBzZXAubGVuZ3RoKCk7Ci0JU3RyaW5nIGNhY2hlID0gcHJvcDsKLQlWZWN0b3IgbWV0aG9kcyA9IG5ldyBWZWN0b3IoKTsKLQkKLQl3aGlsZSAoY2FjaGUuaW5kZXhPZihzZXApICE9IC0xKSB7Ci0JICAgIGludCBpbmRleCA9IGNhY2hlLmluZGV4T2Yoc2VwKTsKLQkgICAgU3RyaW5nIG5hbWUgPSBjYWNoZS5zdWJzdHJpbmcoMCxpbmRleCk7Ci0JICAgIGlmIChuYW1lLnRyaW0oKSAhPSAiIikgewotCSAgICAgICAgbWV0aG9kcy5hZGQobmFtZSk7Ci0JICAgIAljYWNoZSA9IGNhY2hlLnN1YnN0cmluZyhpbmRleCtzZXBMZW4pOwotCSAgICB9Ci0JfQotCQotICAgIAlFbnVtZXJhdGlvbiBhbGxNZXRob2RzID0gbWV0aG9kcy5lbGVtZW50cygpOwotICAgIAl3aGlsZSAoYWxsTWV0aG9kcy5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgIAkgICAgU3RyaW5nIG9uZU1ldGhvZCA9IChTdHJpbmcpIGFsbE1ldGhvZHMubmV4dEVsZW1lbnQoKTsgICAgCSAgICAKLSAgICAJICAgIGlmICghb25lTWV0aG9kLnRyaW0oKS5lcXVhbHMoIiIpKSB7Ci0gICAgCSAgICAJU3RyaW5nIG1ldGhvZE5hbWUgPSBudWxsOwotICAgIAkgICAgCVZlY3RvciBwYXJtcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAJICAgIAlTdHJpbmdUb2tlbml6ZXIgbWV0aG9kRGV0YWlscyA9IG5ldyBTdHJpbmdUb2tlbml6ZXIob25lTWV0aG9kLGRlbGltKTsKLQkJZm9yIChpbnQgaT0wOyBtZXRob2REZXRhaWxzLmhhc01vcmVUb2tlbnMoKTtpKysgKSB7Ci0JCSAgICBTdHJpbmcgdG9rZW4gPSAoU3RyaW5nKSBtZXRob2REZXRhaWxzLm5leHRUb2tlbigpOwotCQkgICAgaWYgKGk9PTApIHsKLQkJICAgIAltZXRob2ROYW1lID0gdG9rZW4udG9VcHBlckNhc2UoKTsKLQkJICAgIH0gZWxzZSB7Ci0JCSAgICAJcGFybXMuYWRkKHRva2VuKTsJCSAgICAJCi0JCSAgICB9Ci0JCX0KLQkJcHJvcGVydGllcy5wdXQobWV0aG9kTmFtZSxwYXJtcyk7Ci0gICAgCSAgICB9ICAgIAkgICAgCi0gICAgCX0KLSAgICAJcmV0dXJuIHByb3BlcnRpZXM7CisgICAgaWYgKCBwcm9wID09IG51bGwgfHwgcHJvcC50cmltKCkuZXF1YWxzKCIiKSkgeworICAgICAgICByZXR1cm4gbmV3IEhhc2h0YWJsZSgpOworICAgIH0gZWxzZSBpZiAoZGVsaW0gPT0gbnVsbCB8fCBkZWxpbS5lcXVhbHMoIiIpKSB7CisgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbiAoIkRlbGltaXRlciBpcyBub3QgcHJvdmlkZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24iKTsKICAgICB9Ci0gICAgCisKKyAgICBIYXNodGFibGUgcHJvcGVydGllcyA9IG5ldyBIYXNodGFibGUoKTsKKyAgICBkZWxpbSA9IGRlbGltLnRyaW0oKTsKKyAgICBTdHJpbmcgc2VwID0gZGVsaW0rZGVsaW07CisgICAgaW50IHNlcExlbiA9IHNlcC5sZW5ndGgoKTsKKyAgICBTdHJpbmcgY2FjaGUgPSBwcm9wOworICAgIFZlY3RvciBtZXRob2RzID0gbmV3IFZlY3RvcigpOworCisgICAgd2hpbGUgKGNhY2hlLmluZGV4T2Yoc2VwKSAhPSAtMSkgeworICAgICAgICBpbnQgaW5kZXggPSBjYWNoZS5pbmRleE9mKHNlcCk7CisgICAgICAgIFN0cmluZyBuYW1lID0gY2FjaGUuc3Vic3RyaW5nKDAsaW5kZXgpOworICAgICAgICBpZiAobmFtZS50cmltKCkgIT0gIiIpIHsKKyAgICAgICAgICAgIG1ldGhvZHMuYWRkKG5hbWUpOworICAgICAgICAgICAgY2FjaGUgPSBjYWNoZS5zdWJzdHJpbmcoaW5kZXgrc2VwTGVuKTsKKyAgICAgICAgfQorICAgIH0KKworICAgICAgICBFbnVtZXJhdGlvbiBhbGxNZXRob2RzID0gbWV0aG9kcy5lbGVtZW50cygpOworICAgICAgICB3aGlsZSAoYWxsTWV0aG9kcy5oYXNNb3JlRWxlbWVudHMoKSkgeworICAgICAgICAgICAgU3RyaW5nIG9uZU1ldGhvZCA9IChTdHJpbmcpIGFsbE1ldGhvZHMubmV4dEVsZW1lbnQoKTsKKyAgICAgICAgICAgIGlmICghb25lTWV0aG9kLnRyaW0oKS5lcXVhbHMoIiIpKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIG1ldGhvZE5hbWUgPSBudWxsOworICAgICAgICAgICAgICAgIFZlY3RvciBwYXJtcyA9IG5ldyBWZWN0b3IoKTsKKyAgICAgICAgICAgICAgICBTdHJpbmdUb2tlbml6ZXIgbWV0aG9kRGV0YWlscyA9IG5ldyBTdHJpbmdUb2tlbml6ZXIob25lTWV0aG9kLGRlbGltKTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBtZXRob2REZXRhaWxzLmhhc01vcmVUb2tlbnMoKTtpKysgKSB7CisgICAgICAgICAgICBTdHJpbmcgdG9rZW4gPSAoU3RyaW5nKSBtZXRob2REZXRhaWxzLm5leHRUb2tlbigpOworICAgICAgICAgICAgaWYgKGk9PTApIHsKKyAgICAgICAgICAgICAgICBtZXRob2ROYW1lID0gdG9rZW4udG9VcHBlckNhc2UoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcGFybXMuYWRkKHRva2VuKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBwcm9wZXJ0aWVzLnB1dChtZXRob2ROYW1lLHBhcm1zKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcHJvcGVydGllczsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgRGF0YXNvdXJjZSBvYmplY3QgYWNjb3JkaW5nIHRvIHRoZSBzcGVjLgogICAgICAqCi0gICAgICogQHJldHVybglJbml0aWFsIERhdGFTb3VyY2UgT2JqZWN0IGluc3RhbmNlLgotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+IElmIGNsYXNzIG5hbWUgaXMgd3Jvbmcgb3IgY2xhc3NwYXRoIGlzIG5vdCBzZXQKLSAgICAgKgkJcHJvcGVybHkuCisgICAgICogQHJldHVybiAgICBJbml0aWFsIERhdGFTb3VyY2UgT2JqZWN0IGluc3RhbmNlLgorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+IElmIGNsYXNzIG5hbWUgaXMgd3Jvbmcgb3IgY2xhc3NwYXRoIGlzIG5vdCBzZXQKKyAgICAgKiAgICAgICAgcHJvcGVybHkuCiAgICAgICovCiAgICAgcHJpdmF0ZSBPYmplY3QgZ2V0RGF0YVNvdXJjZU9iamVjdCgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKLSAgICAJU3RyaW5nIGNsYXNzTmFtZSA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNMQVNTTkFNRSk7Ci0gICAgICAgIHRyeSB7ICAgICAgICAgICAgCisgICAgICAgIFN0cmluZyBjbGFzc05hbWUgPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DTEFTU05BTUUpOworICAgICAgICB0cnkgewogICAgICAgICAgICAgQ2xhc3MgZGF0YVNvdXJjZUNsYXNzID0gQ2xhc3MuZm9yTmFtZShjbGFzc05hbWUpOwogICAgICAgICAgICAgT2JqZWN0IGRhdGFTb3VyY2VPYmplY3QgPSBkYXRhU291cmNlQ2xhc3MubmV3SW5zdGFuY2UoKTsKICAgICAgICAgICAgIHJldHVybiBkYXRhU291cmNlT2JqZWN0OwogICAgICAgICB9IGNhdGNoKENsYXNzTm90Rm91bmRFeGNlcHRpb24gY2ZuZSl7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2NuZmVfZHMiLCBjZm5lKTsKLQkKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfY25mZV9kcyIsIGNmbmUpOworCiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkNsYXNzIE5hbWUgaXMgd3Jvbmcgb3IgQ2xhc3MgcGF0aCBpcyBub3Qgc2V0IGZvciA6IiArIGNsYXNzTmFtZSk7CiAgICAgICAgIH0gY2F0Y2goSW5zdGFudGlhdGlvbkV4Y2VwdGlvbiBjZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19pbnN0IiwgY2xhc3NOYW1lKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfaW5zdCIsIGNsYXNzTmFtZSk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkVycm9yIGluIGluc3RhbnRpYXRpbmciICsgY2xhc3NOYW1lKTsKICAgICAgICAgfSBjYXRjaChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGNlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2FjY19pbnN0IiwgY2xhc3NOYW1lKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfYWNjX2luc3QiLCBjbGFzc05hbWUpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgRXJyb3IgaW4gaW5zdGFudGlhdGluZyIgKyBjbGFzc05hbWUpOwogICAgICAgICB9CiAgICAgfQotICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZVNwZWMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VTcGVjLmphdmEKaW5kZXggZWY2YzRjOS4uM2RjMTU0ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZVNwZWMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlU3BlYy5qYXZhCkBAIC0xOSw5MiArMTksOTIgQEAKIGltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwogCiAvKioKLSAqIEVuY2Fwc3VsYXRlIHRoZSBEYXRhU291cmNlIG9iamVjdCBkZXRhaWxzIG9idGFpbmVkIGZyb20gCisgKiBFbmNhcHN1bGF0ZSB0aGUgRGF0YVNvdXJjZSBvYmplY3QgZGV0YWlscyBvYnRhaW5lZCBmcm9tCiAgKiBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8yMwotICogQGF1dGhvcglCaW5vZCBQLkcKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMjMKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCiAgKi8KIHB1YmxpYyBjbGFzcyBEYXRhU291cmNlU3BlYyBpbXBsZW1lbnRzIGphdmEuaW8uU2VyaWFsaXphYmxlewogCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVVNFUk5BTUUJCQkJPSAxOyAgICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQQVNTV09SRAkJCQk9IDI7ICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVUkwJCQkJCT0gMzsgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExPR0lOVElNRU9VVAkJCT0gNDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMT0dXUklURVIJCQkJPSA1OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFCQVNFTkFNRQkJCT0gNjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQVRBU09VUkNFTkFNRQkJCT0gNzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERVNDUklQVElPTgkJCQk9IDg7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTkVUV09SS1BST1RPQ09MCQkJPSA5OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBPUlROVU1CRVIJCQkJPSAxMDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBST0xFTkFNRQkJCQk9IDExOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNFUlZFUk5BTUUJCQkJPSAxMjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhTVEFURU1FTlRTCQkJPSAxMzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTklUSUFMUE9PTFNJWkUJCQk9IDE0OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1JTlBPT0xTSVpFCQkJCT0gMTU7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYUE9PTFNJWkUJCQkJPSAxNjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhJRExFVElNRQkJCQk9IDE3OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBST1BFUlRZQ1lDTEUJCQk9IDE4OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERSSVZFUlBST1BFUlRJRVMJCQk9IDE5OyAgICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDTEFTU05BTUUJCQkJPSAyMDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERUxJTUlURVIJCQkJPSAyMTsKLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBYQURBVEFTT1VSQ0UJCQk9IDIyOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFTT1VSQ0UJCQkJPSAyMzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05ORUNUSU9OUE9PTERBVEFTT1VSQ0UJCT0gMjQ7Ci0gICAgICAKLSAgICAvL0dKQ0lOVCAgICAgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQJPSAyNTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWQUxJREFUSU9OTUVUSE9ECQkJPSAyNjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWQUxJREFUSU9OVEFCTEVOQU1FCQkJPSAyNzsKLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUUkFOU0FDVElPTklTT0xBVElPTgkJPSAyODsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHVUFSQU5URUVJU09MQVRJT05MRVZFTAkJPSAyOTsKLSAgICAgICAgICAgIAorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVTRVJOQU1FICAgICAgICAgICAgICAgID0gMTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQQVNTV09SRCAgICAgICAgICAgICAgICA9IDI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVVJMICAgICAgICAgICAgICAgICAgICA9IDM7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTE9HSU5USU1FT1VUICAgICAgICAgICAgPSA0OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExPR1dSSVRFUiAgICAgICAgICAgICAgICA9IDU7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREFUQUJBU0VOQU1FICAgICAgICAgICAgPSA2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFTT1VSQ0VOQU1FICAgICAgICAgICAgPSA3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFU0NSSVBUSU9OICAgICAgICAgICAgICAgID0gODsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBORVRXT1JLUFJPVE9DT0wgICAgICAgICAgICA9IDk7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUE9SVE5VTUJFUiAgICAgICAgICAgICAgICA9IDEwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJPTEVOQU1FICAgICAgICAgICAgICAgID0gMTE7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0VSVkVSTkFNRSAgICAgICAgICAgICAgICA9IDEyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWFNUQVRFTUVOVFMgICAgICAgICAgICA9IDEzOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOSVRJQUxQT09MU0laRSAgICAgICAgICAgID0gMTQ7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUlOUE9PTFNJWkUgICAgICAgICAgICAgICAgPSAxNTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhQT09MU0laRSAgICAgICAgICAgICAgICA9IDE2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWElETEVUSU1FICAgICAgICAgICAgICAgID0gMTc7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUFJPUEVSVFlDWUNMRSAgICAgICAgICAgID0gMTg7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRFJJVkVSUFJPUEVSVElFUyAgICAgICAgICAgID0gMTk7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0xBU1NOQU1FICAgICAgICAgICAgICAgID0gMjA7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVMSU1JVEVSICAgICAgICAgICAgICAgID0gMjE7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBYQURBVEFTT1VSQ0UgICAgICAgICAgICA9IDIyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFTT1VSQ0UgICAgICAgICAgICAgICAgPSAyMzsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05ORUNUSU9OUE9PTERBVEFTT1VSQ0UgICAgICAgID0gMjQ7CisKKyAgICAvL0dKQ0lOVAorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQgICAgPSAyNTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWQUxJREFUSU9OTUVUSE9EICAgICAgICAgICAgPSAyNjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWQUxJREFUSU9OVEFCTEVOQU1FICAgICAgICAgICAgPSAyNzsKKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRSQU5TQUNUSU9OSVNPTEFUSU9OICAgICAgICA9IDI4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdVQVJBTlRFRUlTT0xBVElPTkxFVkVMICAgICAgICA9IDI5OworCiAgICAgcHJpdmF0ZSBIYXNodGFibGUgZGV0YWlscyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgcHJvcGVydHkuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcHJvcGVydHkJUHJvcGVydHkgTmFtZSB0byBiZSBzZXQuCi0gICAgICogQHBhcmFtCXZhbHVlCQlWYWx1ZSBvZiBwcm9wZXJ0eSB0byBiZSBzZXQuCisgICAgICogQHBhcmFtICAgIHByb3BlcnR5ICAgIFByb3BlcnR5IE5hbWUgdG8gYmUgc2V0LgorICAgICAqIEBwYXJhbSAgICB2YWx1ZSAgICAgICAgVmFsdWUgb2YgcHJvcGVydHkgdG8gYmUgc2V0LgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERldGFpbChpbnQgcHJvcGVydHksIFN0cmluZyB2YWx1ZSkgewotICAgIAlkZXRhaWxzLnB1dChuZXcgSW50ZWdlcihwcm9wZXJ0eSksdmFsdWUpOworICAgICAgICBkZXRhaWxzLnB1dChuZXcgSW50ZWdlcihwcm9wZXJ0eSksdmFsdWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgdmFsdWUgb2YgcHJvcGVydHkKICAgICAgKgotICAgICAqIEByZXR1cm4JVmFsdWUgb2YgdGhlIHByb3BlcnR5LgorICAgICAqIEByZXR1cm4gICAgVmFsdWUgb2YgdGhlIHByb3BlcnR5LgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGV0YWlsKGludCBwcm9wZXJ0eSkgewotICAgIAlpZiAoZGV0YWlscy5jb250YWluc0tleShuZXcgSW50ZWdlcihwcm9wZXJ0eSkpKSB7Ci0gICAgCSAgICByZXR1cm4gKFN0cmluZykgZGV0YWlscy5nZXQobmV3IEludGVnZXIocHJvcGVydHkpKTsKLSAgICAJfSBlbHNlIHsKLSAgICAJICAgIHJldHVybiBudWxsOwotICAgIAl9ICAgIAkKKyAgICAgICAgaWYgKGRldGFpbHMuY29udGFpbnNLZXkobmV3IEludGVnZXIocHJvcGVydHkpKSkgeworICAgICAgICAgICAgcmV0dXJuIChTdHJpbmcpIGRldGFpbHMuZ2V0KG5ldyBJbnRlZ2VyKHByb3BlcnR5KSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENoZWNrcyB3aGV0aGVyIHR3byA8Y29kZT5EYXRhU291cmNlU3BlYzwvY29kZT4gb2JqZWN0cwogICAgICAqIGFyZSBlcXVhbCBvciBub3QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jb2JqCUluc3RhbmNlIG9mIDxjb2RlPkRhdGFTb3VyY2VTcGVjPC9jb2RlPiBvYmplY3QuCisgICAgICogQHBhcmFtICAgIG9iaiAgICBJbnN0YW5jZSBvZiA8Y29kZT5EYXRhU291cmNlU3BlYzwvY29kZT4gb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb2JqKSB7Ci0gICAgCWlmIChvYmogaW5zdGFuY2VvZiBEYXRhU291cmNlU3BlYykgewotICAgIAkgICAgcmV0dXJuIHRoaXMuZGV0YWlscy5lcXVhbHMoKChEYXRhU291cmNlU3BlYylvYmopLmRldGFpbHMpOwotICAgIAl9Ci0gICAgCXJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIERhdGFTb3VyY2VTcGVjKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5kZXRhaWxzLmVxdWFscygoKERhdGFTb3VyY2VTcGVjKW9iaikuZGV0YWlscyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgaGFzaENvZGUgb2YgdGhpcyA8Y29kZT5EYXRhU291cmNlU3BlYzwvY29kZT4gb2JqZWN0LgogICAgICAqCi0gICAgICogQHJldHVybgloYXNoQ29kZSBvZiB0aGlzIG9iamVjdC4KKyAgICAgKiBAcmV0dXJuICAgIGhhc2hDb2RlIG9mIHRoaXMgb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7Ci0gICAgCXJldHVybiB0aGlzLmRldGFpbHMuaGFzaENvZGUoKTsKLSAgICB9ICAgIAorICAgICAgICByZXR1cm4gdGhpcy5kZXRhaWxzLmhhc2hDb2RlKCk7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vYnVpbGQueG1sCmluZGV4IGVmNDM4ZmMuLjNiNGZhZWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9idWlsZC54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPHByb2plY3QgbmFtZT0iamRiY19jb25uZWN0b3IiIGJhc2VkaXI9Ii4iIGRlZmF1bHQ9ImJ1aWxkIj4KICAgPHByb3BlcnR5IG5hbWU9InBrZy5kaXIiIHZhbHVlPSJjb20vc3VuL2dqYy9jb21tb24iLz4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJjbGVhbiI+CiAgICAgPGFudCBhbnRmaWxlPSJidWlsZC54bWwiIGRpcj0iJHtnamMuaG9tZX0vYmluIiB0YXJnZXQ9ImNsZWFuIi8+CiAgIDwvdGFyZ2V0PgpAQCAtMzYsMTMgKzM2LDEzIEBACiAKICAgPHRhcmdldCBuYW1lPSJjb21waWxlMTMiIGRlcGVuZHM9ImNvbXBpbGUiLz4KICAgPHRhcmdldCBuYW1lPSJjb21waWxlMTQiIGRlcGVuZHM9ImNvbXBpbGUiLz4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlMTMiIGRlcGVuZHM9InBhY2thZ2UiLz4KICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlMTQiIGRlcGVuZHM9InBhY2thZ2UiLz4KIAogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkMTMiIGRlcGVuZHM9ImNvbXBpbGUxMywgcGFja2FnZTEzIi8+CiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQxNCIgZGVwZW5kcz0iY29tcGlsZTE0LCBwYWNrYWdlMTQiLz4KLSAgICAKKwogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJidWlsZDEzLCBidWlsZDE0Ii8+CiAKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9Db25uZWN0aW9uSG9sZGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvQ29ubmVjdGlvbkhvbGRlci5qYXZhCmluZGV4IDQ2MzJhZTEuLmI0ZmQxMjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9Db25uZWN0aW9uSG9sZGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L0Nvbm5lY3Rpb25Ib2xkZXIuamF2YQpAQCAtMjQsMjQgKzI0LDI0IEBACiBpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3I7CiAKIC8qKgotICogSG9sZHMgdGhlIGphdmEuc3FsLkNvbm5lY3Rpb24gb2JqZWN0LCB3aGljaCBpcyB0byBiZSAKKyAqIEhvbGRzIHRoZSBqYXZhLnNxbC5Db25uZWN0aW9uIG9iamVjdCwgd2hpY2ggaXMgdG8gYmUKICAqIHBhc3NlZCB0byB0aGUgYXBwbGljYXRpb24gcHJvZ3JhbS4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzIzCi0gKiBAYXV0aG9yCUJpbm9kIFAuRworICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8yMworICogQGF1dGhvciAgICBCaW5vZCBQLkcKICAqLwotcHVibGljIGNsYXNzIENvbm5lY3Rpb25Ib2xkZXIgaW1wbGVtZW50cyBDb25uZWN0aW9ueyAKK3B1YmxpYyBjbGFzcyBDb25uZWN0aW9uSG9sZGVyIGltcGxlbWVudHMgQ29ubmVjdGlvbnsKIAogICAgIHByaXZhdGUgQ29ubmVjdGlvbiBjb247Ci0gICAgCisKICAgICBwcml2YXRlIE1hbmFnZWRDb25uZWN0aW9uIG1jOwotICAgIAotICAgIHByaXZhdGUgYm9vbGVhbiB3cmFwcGVkQWxyZWFkeSA9IGZhbHNlOyAgICAKLSAgICAKKworICAgIHByaXZhdGUgYm9vbGVhbiB3cmFwcGVkQWxyZWFkeSA9IGZhbHNlOworCiAgICAgcHJpdmF0ZSBib29sZWFuIGlzQ2xvc2VkID0gZmFsc2U7Ci0gICAgCisKICAgICBwcml2YXRlIGJvb2xlYW4gdmFsaWQgPSB0cnVlOwotICAgIAorCiAgICAgcHJpdmF0ZSBib29sZWFuIGFjdGl2ZSA9IGZhbHNlOwogICAgIC8qKgogICAgICAqIFRoZSBhY3RpdmUgZmxhZyBpcyBmYWxzZSB3aGVuIHRoZSBjb25uZWN0aW9uIGhhbmRsZSBpcwpAQCAtNTMsNDA0ICs1Myw0MDQgQEAKICAgICAgKiBmdW5jdGlvbiwgdGhlIGFib3ZlIG1ldGhvZCBpbnZvY2F0aW9uIHN1Y2NlZWRzOyBvdGhlcndpc2UKICAgICAgKiBhbiBleGNlcHRpb24gaXMgdGhyb3duLgogICAgICAqLwotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0cyBhIENvbm5lY3Rpb24gaG9sZGVyLgotICAgICAqIAotICAgICAqIEBwYXJhbQljb24JPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgorICAgICAqCisgICAgICogQHBhcmFtICAgIGNvbiAgICA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIENvbm5lY3Rpb25Ib2xkZXIoQ29ubmVjdGlvbiBjb24sIE1hbmFnZWRDb25uZWN0aW9uIG1jKSB7CiAgICAgICAgIHRoaXMuY29uID0gY29uOwogICAgICAgICB0aGlzLm1jICA9IG1jOwogICAgIH0KLSAgICAgICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSBhY3R1YWwgY29ubmVjdGlvbiBpbiB0aGlzIGhvbGRlciBvYmplY3QuCi0gICAgICogCi0gICAgICogQHJldHVybglDb25uZWN0aW9uIG9iamVjdC4KKyAgICAgKgorICAgICAqIEByZXR1cm4gICAgQ29ubmVjdGlvbiBvYmplY3QuCiAgICAgICovCiAgICAgQ29ubmVjdGlvbiBnZXRDb25uZWN0aW9uKCkgewotICAgIAlyZXR1cm4gY29uOworICAgICAgICByZXR1cm4gY29uOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCwgdGhlIGNvbm5lY3Rpb24gaXMgd3JhcHBlZCBhbHJlYWR5IG9yIG5vdC4KICAgICAgKgotICAgICAqIEBwYXJhbQl3cmFwRmxhZwkKKyAgICAgKiBAcGFyYW0gICAgd3JhcEZsYWcKICAgICAgKi8KICAgICB2b2lkIHdyYXBwZWQoYm9vbGVhbiB3cmFwRmxhZyl7CiAgICAgICAgIHRoaXMud3JhcHBlZEFscmVhZHkgPSB3cmFwRmxhZzsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHdoZXRoZXIgaXQgaXMgd3JhcHBlZCBhbHJlYWR5IG9yIG5vdC4KICAgICAgKgotICAgICAqIEByZXR1cm4Jd3JhcHBlZCBmbGFnLgorICAgICAqIEByZXR1cm4gICAgd3JhcHBlZCBmbGFnLgogICAgICAqLwogICAgIGJvb2xlYW4gaXNXcmFwcGVkKCl7CiAgICAgICAgIHJldHVybiB3cmFwcGVkQWxyZWFkeTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UgcmVzcG9uc2libGUKICAgICAgKiBmb3IgdGhpcyBjb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCisgICAgICogQHJldHVybiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICovCiAgICAgTWFuYWdlZENvbm5lY3Rpb24gZ2V0TWFuYWdlZENvbm5lY3Rpb24oKSB7CiAgICAgICAgIHJldHVybiBtYzsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXBsYWNlIHRoZSBhY3R1YWwgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IHdpdGggdGhlIG9uZQotICAgICAqIHN1cHBsaWVkLiBBbHNvIHJlcGxhY2UgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGxpbmsuICAgICAKKyAgICAgKiBzdXBwbGllZC4gQWxzbyByZXBsYWNlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBsaW5rLgogICAgICAqCi0gICAgICogQHBhcmFtCWNvbiA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHBhcmFtCW1jICA8Y29kZT4gTWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgY29uIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgbWMgIDxjb2RlPiBNYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgogICAgICAqLwogICAgIHZvaWQgYXNzb2NpYXRlQ29ubmVjdGlvbihDb25uZWN0aW9uIGNvbiwgTWFuYWdlZENvbm5lY3Rpb24gbWMpIHsKLSAgICAJdGhpcy5tYyA9IG1jOwotICAgIAl0aGlzLmNvbiA9IGNvbjsKKyAgICAgICAgdGhpcy5tYyA9IG1jOworICAgICAgICB0aGlzLmNvbiA9IGNvbjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDbGVhcnMgYWxsIHdhcm5pbmdzIHJlcG9ydGVkIGZvciB0aGUgdW5kZXJseWluZyBjb25uZWN0aW9uICBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGNsZWFyV2FybmluZ3MoKSB0aHJvd3MgU1FMRXhjZXB0aW9ueyAgICAKLQljaGVja1ZhbGlkaXR5KCk7CisgICAgcHVibGljIHZvaWQgY2xlYXJXYXJuaW5ncygpIHRocm93cyBTUUxFeGNlcHRpb257CisgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICBjb24uY2xlYXJXYXJuaW5ncygpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIENsb3NlcyB0aGUgbG9naWNhbCBjb25uZWN0aW9uLiAgICAKKyAgICAgKiBDbG9zZXMgdGhlIGxvZ2ljYWwgY29ubmVjdGlvbi4KICAgICAgKgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNsb3NlKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKICAgICAgICAgaXNDbG9zZWQgPSB0cnVlOwotICAgICAgICBtYy5jb25uZWN0aW9uQ2xvc2VkKG51bGwsIHRoaXMpOyAgICAgICAgCisgICAgICAgIG1jLmNvbm5lY3Rpb25DbG9zZWQobnVsbCwgdGhpcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogSW52YWxpZGF0ZXMgdGhpcyBvYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgaW52YWxpZGF0ZSgpIHsKLSAgICAJdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgdmFsaWQgPSBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDbG9zZXMgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaW52b2x2ZWQgaW4gdGhpcy4KICAgICAgKgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCi0gICAgdm9pZCBhY3R1YWxDbG9zZSgpIHRocm93cyBTUUxFeGNlcHRpb257ICAgIAorICAgIHZvaWQgYWN0dWFsQ2xvc2UoKSB0aHJvd3MgU1FMRXhjZXB0aW9uewogICAgICAgICBjb24uY2xvc2UoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb21taXQgdGhlIGNoYW5nZXMgaW4gdGhlIHVuZGVybHlpbmcgQ29ubmVjdGlvbi4KICAgICAgKgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgY29tbWl0KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLmNvbW1pdCgpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLmNvbW1pdCgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBzdGF0ZW1lbnQgZnJvbSB0aGUgdW5kZXJseWluZyBDb25uZWN0aW9uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgU3RhdGVtZW50IGNyZWF0ZVN0YXRlbWVudCgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICByZXR1cm4gY29uLmNyZWF0ZVN0YXRlbWVudCgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBzdGF0ZW1lbnQgZnJvbSB0aGUgdW5kZXJseWluZyBDb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHBhcmFtCXJlc3VsdFNldFR5cGUJVHlwZSBvZiB0aGUgUmVzdWx0U2V0Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldENvbmN1cnJlbmN5CVJlc3VsdFNldCBDb25jdXJyZW5jeS4KLSAgICAgKiBAcmV0dXJuCTxjb2RlPlN0YXRlbWVudDwvY29kZT4gb2JqZWN0LiAgICAgCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRUeXBlICAgIFR5cGUgb2YgdGhlIFJlc3VsdFNldAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRDb25jdXJyZW5jeSAgICBSZXN1bHRTZXQgQ29uY3VycmVuY3kuCisgICAgICogQHJldHVybiAgICA8Y29kZT5TdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFN0YXRlbWVudCBjcmVhdGVTdGF0ZW1lbnQoaW50IHJlc3VsdFNldFR5cGUsIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIHJldHVybiBjb24uY3JlYXRlU3RhdGVtZW50KHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5KTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgc3RhdGVtZW50IGZyb20gdGhlIHVuZGVybHlpbmcgQ29ubmVjdGlvbi4KICAgICAgKgotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRUeXBlCVR5cGUgb2YgdGhlIFJlc3VsdFNldAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRDb25jdXJyZW5jeQlSZXN1bHRTZXQgQ29uY3VycmVuY3kuCi0gICAgICogQHBhcmFtCXJlc3VsdFNldEhvbGRhYmlsaXR5CVJlc3VsdFNldCBIb2xkYWJpbGl0eS4gICAgIAotICAgICAqIEByZXR1cm4JPGNvZGU+U3RhdGVtZW50PC9jb2RlPiBvYmplY3QuIAotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAgICAgCisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldFR5cGUgICAgVHlwZSBvZiB0aGUgUmVzdWx0U2V0CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldENvbmN1cnJlbmN5ICAgIFJlc3VsdFNldCBDb25jdXJyZW5jeS4KKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0SG9sZGFiaWxpdHkgICAgUmVzdWx0U2V0IEhvbGRhYmlsaXR5LgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+U3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwotICAgIHB1YmxpYyBTdGF0ZW1lbnQgY3JlYXRlU3RhdGVtZW50KGludCByZXN1bHRTZXRUeXBlLCBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3ksIAotICAgIAkJCQkgICAgIGludCByZXN1bHRTZXRIb2xkYWJpbHR5KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAkJCQkgICAgIAorICAgIHB1YmxpYyBTdGF0ZW1lbnQgY3JlYXRlU3RhdGVtZW50KGludCByZXN1bHRTZXRUeXBlLCBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3ksCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdFNldEhvbGRhYmlsdHkpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgcmV0dXJuIGNvbi5jcmVhdGVTdGF0ZW1lbnQocmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3ksCi0gICAgICAgIAkJCSAgIHJlc3VsdFNldEhvbGRhYmlsdHkpOworICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRTZXRIb2xkYWJpbHR5KTsKICAgICB9Ci0gCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgYXV0by1jb21taXQgbW9kZSBmb3IgdGhlIHVuZGVybHlpbmcgPGNvZGU+IENvbm5lY3Rpb248L2NvZGU+LgogICAgICAqCiAgICAgICogQHJldHVybiBUaGUgY3VycmVudCBzdGF0ZSBvZiBjb25uZWN0aW9uJ3MgYXV0by1jb21taXQgbW9kZS4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGdldEF1dG9Db21taXQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLmdldEF1dG9Db21taXQoKTsKLSAgICB9ICAgCi0gCisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLmdldEF1dG9Db21taXQoKTsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIHVuZGVybHlpbmcgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0J3MgY2F0YWxvZyBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglDYXRhbG9nIE5hbWUuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEByZXR1cm4gICAgQ2F0YWxvZyBOYW1lLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldENhdGFsb2coKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgcmV0dXJuIGNvbi5nZXRDYXRhbG9nKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBjdXJyZW50IGhvbGRhYmlsaXR5IG9mIDxjb2RlPlJlc3VsdFNldDwvY29kZT4gb2JqZWN0cyBjcmVhdGVkCiAgICAgICogdXNpbmcgdGhpcyBjb25uZWN0aW9uIG9iamVjdC4KICAgICAgKgotICAgICAqIEByZXR1cm4JaG9sZGFiaWxpdHkgdmFsdWUuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEByZXR1cm4gICAgaG9sZGFiaWxpdHkgdmFsdWUuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0SG9sZGFiaWxpdHkoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4JY29uLmdldEhvbGRhYmlsaXR5KCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gICAgY29uLmdldEhvbGRhYmlsaXR5KCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSA8Y29kZT5EYXRhYmFzZU1ldGFEYXRhPC9jb2RlPm9iamVjdCBmcm9tIHRoZSB1bmRlcmx5aW5nCiAgICAgICogPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QuCiAgICAgICoKICAgICAgKiBAcmV0dXJuIDxjb2RlPkRhdGFiYXNlTWV0YURhdGE8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBEYXRhYmFzZU1ldGFEYXRhIGdldE1ldGFEYXRhKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5nZXRNZXRhRGF0YSgpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5nZXRNZXRhRGF0YSgpOwogICAgIH0KLSAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGlzIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCdzIGN1cnJlbnQgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsLgogICAgICAqCiAgICAgICogQHJldHVybiBUcmFuc2FjdGlvbiBsZXZlbAotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8gICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCiAgICAgcHVibGljIGludCBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICByZXR1cm4gY29uLmdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogUmV0cmlldmVzIHRoZSA8Y29kZT5NYXA8L2NvZGU+IG9iamVjdCBhc3NvY2lhdGVkIHdpdGggCisgICAgICogUmV0cmlldmVzIHRoZSA8Y29kZT5NYXA8L2NvZGU+IG9iamVjdCBhc3NvY2lhdGVkIHdpdGgKICAgICAgKiA8Y29kZT4gQ29ubmVjdGlvbjwvY29kZT4gT2JqZWN0LgogICAgICAqCi0gICAgICogQHJldHVybglUeXBlTWFwIHNldCBpbiB0aGlzIG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHJldHVybiAgICBUeXBlTWFwIHNldCBpbiB0aGlzIG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIE1hcCBnZXRUeXBlTWFwKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5nZXRUeXBlTWFwKCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLmdldFR5cGVNYXAoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIHRoZSBmaXJzdCB3YXJuaW5nIHJlcG9ydGVkIGJ5IGNhbGxzIG9uIHRoZSB1bmRlcmx5aW5nCiAgICAgICogPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgogICAgICAqCiAgICAgICogQHJldHVybiBGaXJzdCA8Y29kZT4gU1FMV2FybmluZzwvY29kZT4gT2JqZWN0IG9yIG51bGwuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgU1FMV2FybmluZyBnZXRXYXJuaW5ncygpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uZ2V0V2FybmluZ3MoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uZ2V0V2FybmluZ3MoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgd2hldGhlciB1bmRlcmx5aW5nIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpcyBjbG9zZWQuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRydWUgaWYgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGlzIGNsb3NlZCwgZmFsc2UKLSAgICAgKiAJCWlmIGl0IGlzIGNsb3NlZC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHJldHVybiAgICB0cnVlIGlmIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpcyBjbG9zZWQsIGZhbHNlCisgICAgICogICAgICAgICBpZiBpdCBpcyBjbG9zZWQuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGlzQ2xvc2VkKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0gICAgCXJldHVybiBpc0Nsb3NlZDsKKyAgICAgICAgcmV0dXJuIGlzQ2xvc2VkOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB3aGV0aGVyIHRoaXMgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGlzIHJlYWQtb25seS4KICAgICAgKgotICAgICAqIEByZXR1cm4JdHJ1ZSBpZiA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IGlzIHJlYWQtb25seSwgZmFsc2Ugb3RoZXItd2lzZQotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcmV0dXJuICAgIHRydWUgaWYgPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBpcyByZWFkLW9ubHksIGZhbHNlIG90aGVyLXdpc2UKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gaXNSZWFkT25seSgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uaXNSZWFkT25seSgpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5pc1JlYWRPbmx5KCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29udmVydHMgdGhlIGdpdmVuIFNRTCBzdGF0ZW1lbnQgaW50byB0aGUgc3lzdGVtJ3MgbmF0aXZlIFNRTCBncmFtbWVyLgogICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgc3RhdGVtZW50ICwgdG8gYmUgY29udmVydGVkLgotICAgICAqIEByZXR1cm4JQ29udmVydGVkIFNRTCBzdHJpbmcuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIHN0YXRlbWVudCAsIHRvIGJlIGNvbnZlcnRlZC4KKyAgICAgKiBAcmV0dXJuICAgIENvbnZlcnRlZCBTUUwgc3RyaW5nLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIG5hdGl2ZVNRTChTdHJpbmcgc3FsKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLm5hdGl2ZVNRTChzcWwpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5uYXRpdmVTUUwoc3FsKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBjYWxsaW5nIGRhdGFiYXNlCiAgICAgICogc3RvcmVkIHByb2NlZHVyZXMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKICAgICAgKiBAcmV0dXJuIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIENhbGxhYmxlU3RhdGVtZW50IHByZXBhcmVDYWxsKFN0cmluZyBzcWwpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZUNhbGwoc3FsKTsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3IgY2FsbGluZyBkYXRhYmFzZQotICAgICAqIHN0b3JlZCBwcm9jZWR1cmVzLgotICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldFR5cGUJVHlwZSBvZiB0aGUgUmVzdWx0U2V0Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldENvbmN1cnJlbmN5CVJlc3VsdFNldCBDb25jdXJyZW5jeS4KLSAgICAgKiBAcmV0dXJuIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8KLSAgICBwdWJsaWMgQ2FsbGFibGVTdGF0ZW1lbnQgcHJlcGFyZUNhbGwoU3RyaW5nIHNxbCxpbnQgcmVzdWx0U2V0VHlwZSwgCi0gICAgCQkJCQlpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3kpIHRocm93cyBTUUxFeGNlcHRpb257Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAJCQkJCQotICAgIAlyZXR1cm4gY29uLnByZXBhcmVDYWxsKHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3kpOwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBjYWxsaW5nIGRhdGFiYXNlCi0gICAgICogc3RvcmVkIHByb2NlZHVyZXMuCi0gICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0VHlwZQlUeXBlIG9mIHRoZSBSZXN1bHRTZXQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0Q29uY3VycmVuY3kJUmVzdWx0U2V0IENvbmN1cnJlbmN5LgotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRIb2xkYWJpbGl0eQlSZXN1bHRTZXQgSG9sZGFiaWxpdHkuICAgICAgICAgIAotICAgICAqIEByZXR1cm4gPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLwotICAgIHB1YmxpYyBDYWxsYWJsZVN0YXRlbWVudCBwcmVwYXJlQ2FsbChTdHJpbmcgc3FsLCBpbnQgcmVzdWx0U2V0VHlwZSwgCi0gICAgCQkJCQkgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5LCAKLSAgICAJCQkJCSBpbnQgcmVzdWx0U2V0SG9sZGFiaWx0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAkJCQkJIAotICAgIAlyZXR1cm4gY29uLnByZXBhcmVDYWxsKHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3ksCi0gICAgCQkJICAgICAgIHJlc3VsdFNldEhvbGRhYmlsdHkpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlQ2FsbChzcWwpOwogICAgIH0KIAogICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcgCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3IgY2FsbGluZyBkYXRhYmFzZQorICAgICAqIHN0b3JlZCBwcm9jZWR1cmVzLgorICAgICAqCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldFR5cGUgICAgVHlwZSBvZiB0aGUgUmVzdWx0U2V0CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldENvbmN1cnJlbmN5ICAgIFJlc3VsdFNldCBDb25jdXJyZW5jeS4KKyAgICAgKiBAcmV0dXJuIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgQ2FsbGFibGVTdGF0ZW1lbnQgcHJlcGFyZUNhbGwoU3RyaW5nIHNxbCxpbnQgcmVzdWx0U2V0VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZUNhbGwoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3IgY2FsbGluZyBkYXRhYmFzZQorICAgICAqIHN0b3JlZCBwcm9jZWR1cmVzLgorICAgICAqCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldFR5cGUgICAgVHlwZSBvZiB0aGUgUmVzdWx0U2V0CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldENvbmN1cnJlbmN5ICAgIFJlc3VsdFNldCBDb25jdXJyZW5jeS4KKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0SG9sZGFiaWxpdHkgICAgUmVzdWx0U2V0IEhvbGRhYmlsaXR5LgorICAgICAqIEByZXR1cm4gPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBDYWxsYWJsZVN0YXRlbWVudCBwcmVwYXJlQ2FsbChTdHJpbmcgc3FsLCBpbnQgcmVzdWx0U2V0VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3ksCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdFNldEhvbGRhYmlsdHkpIHRocm93cyBTUUxFeGNlcHRpb257CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVDYWxsKHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3ksCisgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFNldEhvbGRhYmlsdHkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcKICAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKICAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAogICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwpOwogICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nIAotICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQotICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50Ci0gICAgICogQHBhcmFtCWF1dG9HZW5lcmF0ZWRLZXlzIGEgZmxhZyBpbmRpY2F0aW5nIEF1dG9HZW5lcmF0ZWRLZXlzIG5lZWQgdG8gYmUgcmV0dXJuZWQuCi0gICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovCi0gICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCwgaW50IGF1dG9HZW5lcmF0ZWRLZXlzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLGF1dG9HZW5lcmF0ZWRLZXlzKTsKLSAgICB9ICAgIAotICAgICAgCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZyAKLSAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKLSAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQljb2x1bW5JbmRleGVzIGFuIGFycmF5IG9mIGNvbHVtbiBpbmRleGVzIGluZGljYXRpbmcgdGhlIGNvbHVtbnMgdGhhdCBzaG91bGQgYmUKLSAgICAgKgkJcmV0dXJuZWQgZnJvbSB0aGUgaW5zZXJ0ZWQgcm93IG9yIHJvd3MuCi0gICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovCi0gICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCwgaW50W10gY29sdW1uSW5kZXhlcykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCxjb2x1bW5JbmRleGVzKTsKLSAgICB9ICAgICAgICAgIAotIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcgCi0gICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCi0gICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0VHlwZQlUeXBlIG9mIHRoZSBSZXN1bHRTZXQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0Q29uY3VycmVuY3kJUmVzdWx0U2V0IENvbmN1cnJlbmN5LgotICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLwotICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsaW50IHJlc3VsdFNldFR5cGUsIAotICAgIAkJCQkJaW50IHJlc3VsdFNldENvbmN1cnJlbmN5KSB0aHJvd3MgU1FMRXhjZXB0aW9uewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCQkJCQkKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3kpOwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nIAotICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQotICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldFR5cGUJVHlwZSBvZiB0aGUgUmVzdWx0U2V0Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldENvbmN1cnJlbmN5CVJlc3VsdFNldCBDb25jdXJyZW5jeS4KLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0SG9sZGFiaWxpdHkJUmVzdWx0U2V0IEhvbGRhYmlsaXR5LiAgICAgICAgICAKLSAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8KLSAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLCBpbnQgcmVzdWx0U2V0VHlwZSwgCi0gICAgCQkJCQkgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5LCAKLSAgICAJCQkJCSBpbnQgcmVzdWx0U2V0SG9sZGFiaWx0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAJCQkJCSAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3ksCi0gICAgCQkJCSAgICByZXN1bHRTZXRIb2xkYWJpbHR5KTsKLSAgICB9ICAgICAgICAgICAKIAogICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcgCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZwogICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQogICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50Ci0gICAgICogQHBhcmFtCWNvbHVtbk5hbWVzIE5hbWUgb2YgYm91bmQgY29sdW1ucy4KKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgYXV0b0dlbmVyYXRlZEtleXMgYSBmbGFnIGluZGljYXRpbmcgQXV0b0dlbmVyYXRlZEtleXMgbmVlZCB0byBiZSByZXR1cm5lZC4KICAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCisgICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCwgaW50IGF1dG9HZW5lcmF0ZWRLZXlzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsYXV0b0dlbmVyYXRlZEtleXMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcKKyAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICBjb2x1bW5JbmRleGVzIGFuIGFycmF5IG9mIGNvbHVtbiBpbmRleGVzIGluZGljYXRpbmcgdGhlIGNvbHVtbnMgdGhhdCBzaG91bGQgYmUKKyAgICAgKiAgICAgICAgcmV0dXJuZWQgZnJvbSB0aGUgaW5zZXJ0ZWQgcm93IG9yIHJvd3MuCisgICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCisgICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCwgaW50W10gY29sdW1uSW5kZXhlcykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLGNvbHVtbkluZGV4ZXMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcKKyAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRUeXBlICAgIFR5cGUgb2YgdGhlIFJlc3VsdFNldAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRDb25jdXJyZW5jeSAgICBSZXN1bHRTZXQgQ29uY3VycmVuY3kuCisgICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCisgICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCxpbnQgcmVzdWx0U2V0VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nCisgICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0VHlwZSAgICBUeXBlIG9mIHRoZSBSZXN1bHRTZXQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0Q29uY3VycmVuY3kgICAgUmVzdWx0U2V0IENvbmN1cnJlbmN5LgorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRIb2xkYWJpbGl0eSAgICBSZXN1bHRTZXQgSG9sZGFiaWxpdHkuCisgICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCisgICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCwgaW50IHJlc3VsdFNldFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRIb2xkYWJpbHR5KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0U2V0SG9sZGFiaWx0eSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZworICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIGNvbHVtbk5hbWVzIE5hbWUgb2YgYm91bmQgY29sdW1ucy4KKyAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLCBTdHJpbmdbXSBjb2x1bW5OYW1lcykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCxjb2x1bW5OYW1lcyk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLGNvbHVtbk5hbWVzKTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKQEAgLTUzNiwxNDEgKzUzNiwxNDEgQEAKICAgICAvKioKICAgICAgKiBSZW1vdmVzIHRoZSBnaXZlbiA8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdCBmcm9tIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLgogICAgICAqCi0gICAgICogQHBhcmFtCXNhdmVwb2ludAk8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdAotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgc2F2ZXBvaW50ICAgIDxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0CisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJlbGVhc2VTYXZlcG9pbnQoU2F2ZXBvaW50IHNhdmVwb2ludCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnJlbGVhc2VTYXZlcG9pbnQoc2F2ZXBvaW50KTsKLSAgICB9IAotICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnJlbGVhc2VTYXZlcG9pbnQoc2F2ZXBvaW50KTsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBSb2xscyBiYWNrIHRoZSBjaGFuZ2VzIG1hZGUgaW4gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24uCiAgICAgICoKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovICAgICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCiAgICAgcHVibGljIHZvaWQgcm9sbGJhY2soKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24ucm9sbGJhY2soKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5yb2xsYmFjaygpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJvbGxzIGJhY2sgdGhlIGNoYW5nZXMgbWFkZSBhZnRlciB0aGUgc2F2ZXBvaW50LgogICAgICAqCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLyAgICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJvbGxiYWNrKFNhdmVwb2ludCBzYXZlcG9pbnQpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5yb2xsYmFjayhzYXZlcG9pbnQpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnJvbGxiYWNrKHNhdmVwb2ludCk7CiAgICAgfQotICAgICAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGF1dG8tY29tbW1pdCBtb2RlIG9mIHRoZSA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JYXV0b0NvbW1pdCBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgdGhlIGF1dG8tY29tbWl0IG1vZGUuICAgICAKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIGF1dG9Db21taXQgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIHRoZSBhdXRvLWNvbW1pdCBtb2RlLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRBdXRvQ29tbWl0KGJvb2xlYW4gYXV0b0NvbW1pdCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnNldEF1dG9Db21taXQoYXV0b0NvbW1pdCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24uc2V0QXV0b0NvbW1pdChhdXRvQ29tbWl0KTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBjYXRhbG9nIG5hbWUgdG8gdGhlIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdAogICAgICAqCi0gICAgICogQHBhcmFtCWNhdGFsb2cJQ2F0YWxvZyBuYW1lLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgY2F0YWxvZyAgICBDYXRhbG9nIG5hbWUuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldENhdGFsb2coU3RyaW5nIGNhdGFsb2cpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5zZXRDYXRhbG9nKGNhdGFsb2cpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnNldENhdGFsb2coY2F0YWxvZyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogU2V0cyB0aGUgaG9sZGFiaWxpdHkgb2YgPGNvZGU+UmVzdWx0U2V0PC9jb2RlPiBvYmplY3RzIGNyZWF0ZWQgCisgICAgICogU2V0cyB0aGUgaG9sZGFiaWxpdHkgb2YgPGNvZGU+UmVzdWx0U2V0PC9jb2RlPiBvYmplY3RzIGNyZWF0ZWQKICAgICAgKiB1c2luZyB0aGlzIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KICAgICAgKgotICAgICAqIEBwYXJhbQlob2xkYWJpbGl0eQlBIDxjb2RlPlJlc3VsdFNldDwvY29kZT4gaG9sZGFiaWxpdHkgY29uc3RhbnQKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIGhvbGRhYmlsaXR5ICAgIEEgPGNvZGU+UmVzdWx0U2V0PC9jb2RlPiBob2xkYWJpbGl0eSBjb25zdGFudAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRIb2xkYWJpbGl0eShpbnQgaG9sZGFiaWxpdHkpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgIAljb24uc2V0SG9sZGFiaWxpdHkoaG9sZGFiaWxpdHkpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgIGNvbi5zZXRIb2xkYWJpbGl0eShob2xkYWJpbGl0eSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogUHV0cyB0aGUgY29ubmVjdGlvbiBpbiByZWFkLW9ubHkgbW9kZSBhcyBhIGhpbnQgdG8gdGhlIGRyaXZlciB0byAKKyAgICAgKiBQdXRzIHRoZSBjb25uZWN0aW9uIGluIHJlYWQtb25seSBtb2RlIGFzIGEgaGludCB0byB0aGUgZHJpdmVyIHRvCiAgICAgICogcGVyZm9ybSBkYXRhYmFzZSBvcHRpbWl6YXRpb25zLgogICAgICAqCi0gICAgICogQHBhcmFtCXJlYWRPbmx5ICB0cnVlIGVuYWJsZXMgcmVhZC1vbmx5IG1vZGUsIGZhbHNlIGRpc2FibGVzIGl0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgcmVhZE9ubHkgIHRydWUgZW5hYmxlcyByZWFkLW9ubHkgbW9kZSwgZmFsc2UgZGlzYWJsZXMgaXQuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFJlYWRPbmx5KGJvb2xlYW4gcmVhZE9ubHkpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5zZXRSZWFkT25seShyZWFkT25seSk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24uc2V0UmVhZE9ubHkocmVhZE9ubHkpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYW5kIHVubmFtZWQgc2F2ZXBvaW50IGFuZCByZXR1cm5zIGFuIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHRoYXQuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0LgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QuCiAgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTYXZlcG9pbnQgc2V0U2F2ZXBvaW50KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5zZXRTYXZlcG9pbnQoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uc2V0U2F2ZXBvaW50KCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIHNhdmVwb2ludCB3aXRoIHRoZSBuYW1lIGFuZCByZXR1cm5zIGFuIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHRoYXQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbmFtZQlOYW1lIG9mIHRoZSBzYXZlcG9pbnQuCi0gICAgICogQHJldHVybgk8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIG5hbWUgICAgTmFtZSBvZiB0aGUgc2F2ZXBvaW50LgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTYXZlcG9pbnQgc2V0U2F2ZXBvaW50KFN0cmluZyBuYW1lKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnNldFNhdmVwb2ludChuYW1lKTsKLSAgICB9ICAgIAotICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5zZXRTYXZlcG9pbnQobmFtZSk7CisgICAgfQorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsLgogICAgICAqCi0gICAgICogQHBhcmFtCWxldmVsIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIGxldmVsIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oaW50IGxldmVsKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24obGV2ZWwpOwotICAgIH0gICAgIAotICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKGxldmVsKTsKKyAgICB9CisKICAgICAvKioKLSAgICAgKiBJbnN0YWxscyB0aGUgZ2l2ZW4gPGNvZGU+TWFwPC9jb2RlPiBvYmplY3QgYXMgdGhlIHR5b2UgbWFwIGZvciB0aGlzIAorICAgICAqIEluc3RhbGxzIHRoZSBnaXZlbiA8Y29kZT5NYXA8L2NvZGU+IG9iamVjdCBhcyB0aGUgdHlvZSBtYXAgZm9yIHRoaXMKICAgICAgKiA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KICAgICAgKgotICAgICAqIEBwYXJhbQltYXAJPGNvZGU+TWFwPC9jb2RlPiBhIE1hcCBvYmplY3QgdG8gaW5zdGFsbC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIG1hcCAgICA8Y29kZT5NYXA8L2NvZGU+IGEgTWFwIG9iamVjdCB0byBpbnN0YWxsLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRUeXBlTWFwKE1hcCBtYXApIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsKLSAgICAJY29uLnNldFR5cGVNYXAobWFwKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5zZXRUeXBlTWFwKG1hcCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2hlY2tzIHRoZSB2YWxpZGl0eSBvZiB0aGlzIG9iamVjdAogICAgICAqLwogICAgIHByaXZhdGUgdm9pZCBjaGVja1ZhbGlkaXR5KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0gICAgCWlmIChpc0Nsb3NlZCkgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAoIkNvbm5lY3Rpb24gY2xvc2VkIik7Ci0gICAgCWlmICghdmFsaWQpIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKCJJbnZhbGlkIENvbm5lY3Rpb24iKTsKLSAgICAJaWYoYWN0aXZlID09IGZhbHNlKSB7Ci0gICAgCSAgICBtYy5jaGVja0lmQWN0aXZlKHRoaXMpOwotICAgIAl9CisgICAgICAgIGlmIChpc0Nsb3NlZCkgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAoIkNvbm5lY3Rpb24gY2xvc2VkIik7CisgICAgICAgIGlmICghdmFsaWQpIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKCJJbnZhbGlkIENvbm5lY3Rpb24iKTsKKyAgICAgICAgaWYoYWN0aXZlID09IGZhbHNlKSB7CisgICAgICAgICAgICBtYy5jaGVja0lmQWN0aXZlKHRoaXMpOworICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgYWN0aXZlIGZsYWcgdG8gdHJ1ZQogICAgICAqCi0gICAgICogQHBhcmFtCWFjdHYJYm9vbGVhbgorICAgICAqIEBwYXJhbSAgICBhY3R2ICAgIGJvb2xlYW4KICAgICAgKi8KICAgICB2b2lkIHNldEFjdGl2ZShib29sZWFuIGFjdHYpIHsKICAgICAgICAgYWN0aXZlID0gYWN0djsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQppbmRleCBhYzdlNzQ4Li5mMDY3NWE0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCkBAIC0zMywxOSArMzMsMTkgQEAKICAqIFRoaXMgY2xhc3MgaXMgZXh0ZW5kZWQgYnkgdGhlIERhdGFTb3VyY2Ugc3BlY2lmaWMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGZhY3RvcmllcwogICogYW5kIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGZvciB0aGUgPGNvZGU+RHJpdmVyTWFuYWdlcjwvY29kZT4uCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wOC8wMwotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDgvMDMKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIAotcHVibGljIGFic3RyYWN0IGNsYXNzIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSwgCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LAogICAgIGphdmEuaW8uU2VyaWFsaXphYmxlIHsKLSAgICAKKwogICAgIHByb3RlY3RlZCBEYXRhU291cmNlU3BlYyBzcGVjID0gbmV3IERhdGFTb3VyY2VTcGVjKCk7CiAgICAgcHJvdGVjdGVkIHRyYW5zaWVudCBEYXRhU291cmNlT2JqZWN0QnVpbGRlciBkc09iakJ1aWxkZXI7Ci0gICAgCisKICAgICBwcm90ZWN0ZWQgamF2YS5pby5QcmludFdyaXRlciBsb2dXcml0ZXIgPSBudWxsOwogICAgIHByb3RlY3RlZCBqYWthcnRhLnJlc291cmNlLnNwaS5SZXNvdXJjZUFkYXB0ZXIgcmEgPSBudWxsOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgTG9nZ2VyIF9sb2dnZXI7CiAgICAgc3RhdGljIHsKICAgICAgICAgX2xvZ2dlciA9IExvZ2dlci5nZXRBbm9ueW1vdXNMb2dnZXIoKTsKQEAgLTU0LDggKzU0LDggQEAKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgQ29ubmVjdGlvbiBGYWN0b3J5IGluc3RhbmNlLiBUaGUgPGNvZGU+Q29ubmVjdGlvbk1hbmFnZXI8L2NvZGU+IGltcGxlbWVudGF0aW9uCiAgICAgICogb2YgdGhlIHJlc291cmNlIGFkYXB0ZXIgaXMgdXNlZCBoZXJlLgotICAgICAqIAotICAgICAqIEByZXR1cm4JR2VuZXJpYyBKREJDIENvbm5lY3RvciBpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29kZT4KKyAgICAgKgorICAgICAqIEByZXR1cm4gICAgR2VuZXJpYyBKREJDIENvbm5lY3RvciBpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgT2JqZWN0IGNyZWF0ZUNvbm5lY3Rpb25GYWN0b3J5KCkgewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtNjMsMTYgKzYzLDE2IEBACiAgICAgICAgIH0KICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2UgY2YgPSBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2UoCiAgICAgICAgICAgICAoamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KXRoaXMsIG51bGwpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gY2Y7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIENvbm5lY3Rpb24gRmFjdG9yeSBpbnN0YW5jZS4gVGhlIDxjb2RlPkNvbm5lY3Rpb25NYW5hZ2VyPC9jb2RlPiBpbXBsZW1lbnRhdGlvbgogICAgICAqIG9mIHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIgaXMgdXNlZCBoZXJlLgotICAgICAqIAotICAgICAqIEBwYXJhbQljeE1hbmFnZXIJPGNvZGU+Q29ubmVjdGlvbk1hbmFnZXI8L2NvZGU+IHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICogQHJldHVybglHZW5lcmljIEpEQkMgQ29ubmVjdG9yIGltcGxlbWVudGF0aW9uIG9mIDxjb2RlPmphdmF4LnNxbC5EYXRhU291cmNlPC9jb2RlPgorICAgICAqCisgICAgICogQHBhcmFtICAgIGN4TWFuYWdlciAgICA8Y29kZT5Db25uZWN0aW9uTWFuYWdlcjwvY29kZT4gcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiBAcmV0dXJuICAgIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IgaW1wbGVtZW50YXRpb24gb2YgPGNvZGU+amF2YXguc3FsLkRhdGFTb3VyY2U8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIE9iamVjdCBjcmVhdGVDb25uZWN0aW9uRmFjdG9yeShqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uTWFuYWdlciBjeE1hbmFnZXIpIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTgwLDU1ICs4MCw1NSBAQAogICAgICAgICB9CiAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlIGNmID0gbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlKAogICAgICAgICAgICAgKGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSl0aGlzLCBjeE1hbmFnZXIpOwotICAgICAgICByZXR1cm4gY2Y7IAorICAgICAgICByZXR1cm4gY2Y7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIG5ldyBwaHlzaWNhbCBjb25uZWN0aW9uIHRvIHRoZSB1bmRlcmx5aW5nIEVJUyByZXNvdXJjZQogICAgICAqIG1hbmFnZXIuCi0gICAgICogCi0gICAgICogQHBhcmFtCXN1YmplY3QJPGNvZGU+U3ViamVjdDwvY29kZT4gaW5zdGFuY2UgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKiBAcGFyYW0JY3hSZXF1ZXN0SW5mbwk8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHdoaWNoIG1heSBiZSBjcmVhdGVkCi0gICAgICogICAgICAgCSAgICAgICAgICAgICAJYXMgYSByZXN1bHQgb2YgdGhlIGludm9jYXRpb24gPGNvZGU+Z2V0Q29ubmVjdGlvbih1c2VyLCBwYXNzd29yZCk8L2NvZGU+Ci0gICAgICogICAgICAgCSAgICAgICAgICAgICAJb24gdGhlIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdAotICAgICAqIEByZXR1cm4JPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBjcmVhdGVkCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBpbnN0YW50aWF0aW5nIHRoZQotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0IHVzZWQgZm9yIHRoZQotICAgICAqICAgICAgIAkJCQljcmVhdGlvbiBvZiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdAotICAgICAqIEB0aHJvd3MJU2VjdXJpdHlFeGNlcHRpb24JaWYgdGhlcmUgaW5vIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0Ci0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAlzYXRpc2Z5aW5nIHRoaXMgcmVxdWVzdCAKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZSAKLSAgICAgKgkJCQkJCXBoeXNpY2FsIGNvbm5lY3Rpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzdWJqZWN0ICAgIDxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogQHBhcmFtICAgIGN4UmVxdWVzdEluZm8gICAgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiB3aGljaCBtYXkgYmUgY3JlYXRlZAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIGEgcmVzdWx0IG9mIHRoZSBpbnZvY2F0aW9uIDxjb2RlPmdldENvbm5lY3Rpb24odXNlciwgcGFzc3dvcmQpPC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIHRoZSA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QgY3JlYXRlZAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gaW5zdGFudGlhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdCB1c2VkIGZvciB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRpb24gb2YgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QKKyAgICAgKiBAdGhyb3dzICAgIFNlY3VyaXR5RXhjZXB0aW9uICAgIGlmIHRoZXJlIGlubyA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F0aXNmeWluZyB0aGlzIHJlcXVlc3QKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgcGh5c2ljYWwgY29ubmVjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyBhYnN0cmFjdCBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBjcmVhdGVNYW5hZ2VkQ29ubmVjdGlvbihqYXZheC5zZWN1cml0eS5hdXRoLlN1YmplY3Qgc3ViamVjdCwKICAgICAgICAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxdWVzdEluZm8pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIC8qKgotICAgICAqIENoZWNrIGlmIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpcyBlcXVhbCB0byAKKyAgICAgKiBDaGVjayBpZiB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaXMgZXF1YWwgdG8KICAgICAgKiBhbm90aGVyIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4uCi0gICAgICogCi0gICAgICogQHBhcmFtCW90aGVyCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0IGZvciBjaGVja2luZyBlcXVhbGl0eSB3aXRoCi0gICAgICogQHJldHVybgl0cnVlCWlmIHRoZSBwcm9wZXJ0eSBzZXRzIG9mIGJvdGggdGhlIAotICAgICAqCQkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3RzIGFyZSB0aGUgc2FtZQotICAgICAqCQlmYWxzZQlvdGhlcndpc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBvdGhlciAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdCBmb3IgY2hlY2tpbmcgZXF1YWxpdHkgd2l0aAorICAgICAqIEByZXR1cm4gICAgdHJ1ZSAgICBpZiB0aGUgcHJvcGVydHkgc2V0cyBvZiBib3RoIHRoZQorICAgICAqICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3RzIGFyZSB0aGUgc2FtZQorICAgICAqICAgICAgICBmYWxzZSAgICBvdGhlcndpc2UKICAgICAgKi8KICAgICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG90aGVyKTsKLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgbG9nIHdyaXRlciBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEBzZWUJPGNvZGU+c2V0TG9nV3JpdGVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldExvZ1dyaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgamF2YS5pby5QcmludFdyaXRlciBnZXRMb2dXcml0ZXIoKSB7CiAgICAgICAgIHJldHVybiBsb2dXcml0ZXI7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSA8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEBzZWUJPGNvZGU+c2V0UmVzb3VyY2VBZGFwdGVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRSZXNvdXJjZUFkYXB0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIGpha2FydGEucmVzb3VyY2Uuc3BpLlJlc291cmNlQWRhcHRlciBnZXRSZXNvdXJjZUFkYXB0ZXIoKSB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC0xMzYsMTEgKzEzNiwxMSBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiByYTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSBoYXNoIGNvZGUgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPi4KICAgICAgKgotICAgICAqIEByZXR1cm4JaGFzaCBjb2RlIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGhhc2ggY29kZSBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIGludCBoYXNoQ29kZSgpewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtMTQ4LDQxICsxNDgsNDEgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gc3BlYy5oYXNoQ29kZSgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFJldHVybnMgYSBtYXRjaGVkIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBmcm9tIHRoZSBjYW5kaWRhdGUgCisgICAgICogUmV0dXJucyBhIG1hdGNoZWQgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGZyb20gdGhlIGNhbmRpZGF0ZQogICAgICAqIHNldCBvZiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0cy4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JY29ubmVjdGlvblNldAk8Y29kZT5TZXQ8L2NvZGU+IG9mICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KLSAgICAgKgkJCQlvYmplY3RzIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICogQHBhcmFtCXN1YmplY3QJIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICoJCQlmb3IgcmV0cmlldmluZyBpbmZvcm1hdGlvbiByZXF1aXJlZCBmb3IgbWF0Y2hpbmcKLSAgICAgKiBAcGFyYW0JY3hSZXF1ZXN0SW5mbwk8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICoJCQkJZm9yIHJldHJpZXZpbmcgaW5mb3JtYXRpb24gcmVxdWlyZWQgZm9yIG1hdGNoaW5nCi0gICAgICogQHJldHVybgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdGhhdCBpcyB0aGUgYmVzdCBtYXRjaCBzYXRpc2Z5aW5nIHRoaXMgcmVxdWVzdAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgYWNjZXNzaW5nIHRoZSA8Y29kZT5TdWJqZWN0PC9jb2RlPgotICAgICAqCQkJCQlwYXJhbWV0ZXIgb3IgdGhlIDxjb2RlPlNldDwvY29kZT4gb2YgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+Ci0gICAgICoJCQkJCW9iamVjdHMgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBjb25uZWN0aW9uU2V0ICAgIDxjb2RlPlNldDwvY29kZT4gb2YgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgIG9iamVjdHMgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiBAcGFyYW0gICAgc3ViamVjdCAgICAgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiAgICAgICAgICAgIGZvciByZXRyaWV2aW5nIGluZm9ybWF0aW9uIHJlcXVpcmVkIGZvciBtYXRjaGluZworICAgICAqIEBwYXJhbSAgICBjeFJlcXVlc3RJbmZvICAgIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiAgICAgICAgICAgICAgICBmb3IgcmV0cmlldmluZyBpbmZvcm1hdGlvbiByZXF1aXJlZCBmb3IgbWF0Y2hpbmcKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiB0aGF0IGlzIHRoZSBiZXN0IG1hdGNoIHNhdGlzZnlpbmcgdGhpcyByZXF1ZXN0CisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBhY2Nlc3NpbmcgdGhlIDxjb2RlPlN1YmplY3Q8L2NvZGU+CisgICAgICogICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlciBvciB0aGUgPGNvZGU+U2V0PC9jb2RlPiBvZiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgb2JqZWN0cyBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgogICAgICAqLwotICAgIHB1YmxpYyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYXRjaE1hbmFnZWRDb25uZWN0aW9ucyhqYXZhLnV0aWwuU2V0IGNvbm5lY3Rpb25TZXQsIAorICAgIHB1YmxpYyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYXRjaE1hbmFnZWRDb25uZWN0aW9ucyhqYXZhLnV0aWwuU2V0IGNvbm5lY3Rpb25TZXQsCiAgICAgICAgIGphdmF4LnNlY3VyaXR5LmF1dGguU3ViamVjdCBzdWJqZWN0LCBDb25uZWN0aW9uUmVxdWVzdEluZm8gY3hSZXF1ZXN0SW5mbykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBtYXRjaE1hbmFnZWRDb25uZWN0aW9ucyIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmKGNvbm5lY3Rpb25TZXQgPT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgUGFzc3dvcmRDcmVkZW50aWFsIHBjID0gU2VjdXJpdHlVdGlscy5nZXRQYXNzd29yZENyZWRlbnRpYWwodGhpcywgc3ViamVjdCwgY3hSZXF1ZXN0SW5mbyk7Ci0gICAgICAgIAorCiAgICAgICAgIGphdmEudXRpbC5JdGVyYXRvciBpdGVyID0gY29ubmVjdGlvblNldC5pdGVyYXRvcigpOwogICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWMgPSBudWxsOwogICAgICAgICB3aGlsZShpdGVyLmhhc05leHQoKSkgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBtYyA9IChjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24pIGl0ZXIubmV4dCgpOwogICAgICAgICAgICAgfSBjYXRjaChqYXZhLnV0aWwuTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiBuc2VlKSB7Ci0JICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19pdGVyIik7CisgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19pdGVyIik7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKG5zZWUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmKHBjID09IG51bGwgJiYgdGhpcy5lcXVhbHMobWMuZ2V0TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KCkpKSB7CkBAIC0xOTEsNyArMTkxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgaXNWYWxpZChtYyk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYzsKICAgICAgICAgICAgICAgICB9IGNhdGNoKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7Ci0JICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfcmUiLCByZSk7CisgICAgICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfcmUiLCByZSk7CiAgICAgICAgICAgICAgICAgICAgIG1jLmNvbm5lY3Rpb25FcnJvck9jY3VycmVkKHJlLCBudWxsKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgaWYoU2VjdXJpdHlVdGlscy5pc1Bhc3N3b3JkQ3JlZGVudGlhbEVxdWFsKHBjLCBtYy5nZXRQYXNzd29yZENyZWRlbnRpYWwoKSkgPT0gdHJ1ZSkgewpAQCAtMjAwLDQ1ICsyMDAsNDUgQEAKICAgICAgICAgICAgICAgICAgICAgaXNWYWxpZChtYyk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYzsKICAgICAgICAgICAgICAgICB9IGNhdGNoKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7Ci0JICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5yZSIpOworICAgICAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMucmUiKTsKICAgICAgICAgICAgICAgICAgICAgbWMuY29ubmVjdGlvbkVycm9yT2NjdXJyZWQocmUsIG51bGwpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICAvL0dKQ0lOVAogICAgIC8qKgogICAgICAqIENoZWNrcyBpZiBhIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpcyB0byBiZSB2YWxpZGF0ZWQgb3Igbm90CiAgICAgICogYW5kIHZhbGlkYXRlcyBpdCBvciByZXR1cm5zLgotICAgICAqIAotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgb3IKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAJCWlmIHZhbGlkYXRpb24gbWV0aG9kIGlzIG5vdCBwcm9wZXIKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBtYyAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgb3IKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHZhbGlkYXRpb24gbWV0aG9kIGlzIG5vdCBwcm9wZXIKICAgICAgKi8KICAgICB2b2lkIGlzVmFsaWQoY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1jKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogCiAgICAgICAgIGlmKG1jLmlzVHJhbnNhY3Rpb25JblByb2dyZXNzKCkpIHsKLQkgICAgcmV0dXJuOworICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAKLSAgICAgICAgYm9vbGVhbiBjb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkID0gCisKKyAgICAgICAgYm9vbGVhbiBjb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkID0KICAgICAgICAgICAgIChuZXcgQm9vbGVhbihzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVEKS50b0xvd2VyQ2FzZSgpKSkuYm9vbGVhblZhbHVlKCk7CiAgICAgICAgIGlmKCBjb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkID09IGZhbHNlIHx8IG1jID09IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgCisKKwogICAgICAgICBTdHJpbmcgdmFsaWRhdGlvbk1ldGhvZCA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05NRVRIT0QpLnRvTG93ZXJDYXNlKCk7Ci0gICAgICAgIAorCiAgICAgICAgIG1jLmNoZWNrSWZWYWxpZCgpOwogICAgICAgICAvKioKICAgICAgICAgICogVGhlIGFib3ZlIGNhbGwgY2hlY2tzIGlmIHRoZSBhY3R1YWwgcGh5c2ljYWwgY29ubmVjdGlvbgogICAgICAgICAgKiBpcyB1c2FibGUgb3Igbm90LgogICAgICAgICAgKi8KICAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBjb24gPSBtYy5nZXRBY3R1YWxDb25uZWN0aW9uKCk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKHZhbGlkYXRpb25NZXRob2QuZXF1YWxzKCJhdXRvLWNvbW1pdCIpID09IHRydWUpIHsKICAgICAgICAgICAgIGlzVmFsaWRCeUF1dG9Db21taXQoY29uKTsKICAgICAgICAgfSBlbHNlIGlmKHZhbGlkYXRpb25NZXRob2QuZXF1YWxzSWdub3JlQ2FzZSgibWV0YS1kYXRhIikgPT0gdHJ1ZSkgewpAQCAtMjQ5LDI4ICsyNDksMjggQEAKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIHZhbGlkYXRpb24gbWV0aG9kIGlzIG5vdCBwcm9wZXIiKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENoZWNrcyBpZiBhIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IGlzIHZhbGlkIG9yIG5vdAogICAgICAqIGJ5IGNoZWNraW5nIGl0cyBhdXRvIGNvbW1pdCBwcm9wZXJ0eS4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JY29uCTxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgY29uICAgIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCiAgICAgICovCiAgICAgcHJvdGVjdGVkIHZvaWQgaXNWYWxpZEJ5QXV0b0NvbW1pdChqYXZhLnNxbC5Db25uZWN0aW9uIGNvbikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYoY29uID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzICIKICAgICAgICAgICAgICAgICArICJ0aGUgY29ubmVjdGlvbiBpcyBudWxsIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgLy8gTm90aWNlIHRoYXQgdXNpbmcgc29tZXRoaW5nIGxpa2UgCisgICAgICAgICAgIC8vIE5vdGljZSB0aGF0IHVzaW5nIHNvbWV0aGluZyBsaWtlCiAgICAgICAgICAgIC8vIGRiQ29uLnNldEF1dG9Db21taXQoZGJDb24uZ2V0QXV0b0NvbW1pdCgpKSB3aWxsIGNhdXNlIHByb2JsZW1zIHdpdGgKICAgICAgICAgICAgLy8gc29tZSBkcml2ZXJzIGxpa2Ugc3liYXNlCi0gICAgICAgICAgIC8vIFdlIGRvIG5vdCB2YWxpZGF0ZSBjb25uZWN0aW9ucyB0aGF0IGFyZSBhbHJlYWR5IGVubGlzdGVkIAotCSAgIC8vaW4gYSB0cmFuc2FjdGlvbiAKLQkgICAvLyBXZSBjeWNsZSBhdXRvY29tbWl0IHRvIHRydWUgYW5kIGZhbHNlIHRvIGJ5LXBhc3MgZHJpdmVycyB0aGF0IAotCSAgIC8vIG1pZ2h0IGNhY2hlIHRoZSBjYWxsIHRvIHNldCBhdXRvY29taXR0CisgICAgICAgICAgIC8vIFdlIGRvIG5vdCB2YWxpZGF0ZSBjb25uZWN0aW9ucyB0aGF0IGFyZSBhbHJlYWR5IGVubGlzdGVkCisgICAgICAgLy9pbiBhIHRyYW5zYWN0aW9uCisgICAgICAgLy8gV2UgY3ljbGUgYXV0b2NvbW1pdCB0byB0cnVlIGFuZCBmYWxzZSB0byBieS1wYXNzIGRyaXZlcnMgdGhhdAorICAgICAgIC8vIG1pZ2h0IGNhY2hlIHRoZSBjYWxsIHRvIHNldCBhdXRvY29taXR0CiAgICAgICAgICAgIC8vIEFsc28gbm90aWNlIHRoYXQgc29tZSBYQSBkYXRhIHNvdXJjZXMgd2lsbCB0aHJvdyBhbmQgZXhjZXB0aW9uIGlmCiAgICAgICAgICAgIC8vIHlvdSB0cnkgdG8gY2FsbCBzZXRBdXRvQ29tbWl0LCBmb3IgdGhlbSB0aGlzIG1ldGhvZCBpcyBub3QgcmVjb21tZW5kZWQKIApAQCAtMjgxLDkwICsyODEsOTAgQEAKICAgICAgICAgICAgICAgICBjb24ucm9sbGJhY2soKTsgLy8gcHJldmVudHMgdW5jb21wbGV0ZWQgdHJhbnNhY3Rpb24gZXhjZXB0aW9ucwogICAgICAgICAgICAgICAgIGNvbi5zZXRBdXRvQ29tbWl0KHRydWUpOwogICAgICAgICAgICB9Ci0gICAgICAgIAotCSAgIGNvbi5zZXRBdXRvQ29tbWl0KGFjKTsKKworICAgICAgIGNvbi5zZXRBdXRvQ29tbWl0KGFjKTsKIAogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2F1dG9jb21taXQiKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfYXV0b2NvbW1pdCIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENoZWNrcyBpZiBhIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IGlzIHZhbGlkIG9yIG5vdAogICAgICAqIGJ5IGNoZWNraW5nIGl0cyBtZXRhIGRhdGEuCi0gICAgICogCi0gICAgICogQHBhcmFtCWNvbgk8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqCisgICAgICogQHBhcmFtICAgIGNvbiAgICA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqLwogICAgIHByb3RlY3RlZCB2b2lkIGlzVmFsaWRCeU1ldGFEYXRhKGphdmEuc3FsLkNvbm5lY3Rpb24gY29uKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihjb24gPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgIgogICAgICAgICAgICAgICAgICsgInRoZSBjb25uZWN0aW9uIGlzIG51bGwiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgamF2YS5zcWwuRGF0YWJhc2VNZXRhRGF0YSBkbWQgPSBjb24uZ2V0TWV0YURhdGEoKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19tZCIpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19tZCIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgIgogICAgICAgICAgICAgICAgICsgImdldHRpbmcgdGhlIG1ldGEgZGF0YSBmYWlsZWQ6ICIgKyBzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDaGVja3MgaWYgYSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBpcyB2YWxpZCBvciBub3QKICAgICAgKiBieSBxdWVyeWluZyBhIHRhYmxlLgotICAgICAqIAotICAgICAqIEBwYXJhbQljb24JPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCi0gICAgICogQHBhcmFtCXRhYmxlTmFtZQl0YWJsZSB3aGljaCBzaG91bGQgYmUgcXVlcmllZAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgY29uICAgIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAorICAgICAqIEBwYXJhbSAgICB0YWJsZU5hbWUgICAgdGFibGUgd2hpY2ggc2hvdWxkIGJlIHF1ZXJpZWQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqLwotICAgIHByb3RlY3RlZCB2b2lkIGlzVmFsaWRCeVRhYmxlUXVlcnkoamF2YS5zcWwuQ29ubmVjdGlvbiBjb24sIAorICAgIHByb3RlY3RlZCB2b2lkIGlzVmFsaWRCeVRhYmxlUXVlcnkoamF2YS5zcWwuQ29ubmVjdGlvbiBjb24sCiAgICAgICAgIFN0cmluZyB0YWJsZU5hbWUpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGNvbiA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyAiCiAgICAgICAgICAgICAgICAgKyAidGhlIGNvbm5lY3Rpb24gaXMgbnVsbCIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBqYXZhLnNxbC5TdGF0ZW1lbnQgc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKICAgICAgICAgICAgIGphdmEuc3FsLlJlc3VsdFNldCBycyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KCJTRUxFQ1QgKiBGUk9NICIgKyB0YWJsZU5hbWUpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2V4ZWN1dGUiKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZXhlY3V0ZSIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgIgogICAgICAgICAgICAgICAgICsgInF1ZXJ5aW5nIHRoZSB0YWJsZSAiICsgdGFibGVOYW1lICsgIiBmYWlsZWQ6ICIgKyBzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBpc29sYXRpb24gbGV2ZWwgc3BlY2lmaWVkIGluIHRoZSA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+CiAgICAgICogZm9yIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gcGFzc2VkLgogICAgICAqCi0gICAgICogQHBhcmFtCW1jCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIGlzb2xhdGlvbiBwcm9wZXJ0eSBpcyBpbnZhbGlkCi0gICAgICoJCQkJCW9yIGlmIHRoZSBpc29sYXRpb24gY2Fubm90IGJlIHNldCBvdmVyIHRoZSBjb25uZWN0aW9uCisgICAgICogQHBhcmFtICAgIG1jICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIGlzb2xhdGlvbiBwcm9wZXJ0eSBpcyBpbnZhbGlkCisgICAgICogICAgICAgICAgICAgICAgICAgIG9yIGlmIHRoZSBpc29sYXRpb24gY2Fubm90IGJlIHNldCBvdmVyIHRoZSBjb25uZWN0aW9uCiAgICAgICovCiAgICAgcHJvdGVjdGVkIHZvaWQgc2V0SXNvbGF0aW9uKGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKLSAgICAJCi0gICAgCWphdmEuc3FsLkNvbm5lY3Rpb24gY29uID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpOwotICAgIAlpZihjb24gPT0gbnVsbCkgewotICAgIAkgICAgcmV0dXJuOwotICAgIAl9Ci0gICAgCQotICAgIAlTdHJpbmcgdHJhbklzb2xhdGlvbiA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKLSAgICAJaWYodHJhbklzb2xhdGlvbiAhPSBudWxsICYmIHRyYW5Jc29sYXRpb24uZXF1YWxzKCIiKSA9PSBmYWxzZSkgewotICAgIAkgICAgaW50IHRyYW5Jc29sYXRpb25JbnQgPSBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbkludCh0cmFuSXNvbGF0aW9uKTsKLSAgICAJICAgIHRyeSB7Ci0gICAgCSAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sYXRpb25JbnQpOwotICAgIAkgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfdHhfbGV2ZWwiKTsKLSAgICAJICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gY291bGQgIgotICAgIAkgICAgICAgICAgICArICJub3QgYmUgc2V0OiAiICsgc3FsZS5nZXRNZXNzYWdlKCkpOwotICAgIAkgICAgfQotICAgIAl9CisKKyAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBjb24gPSBtYy5nZXRBY3R1YWxDb25uZWN0aW9uKCk7CisgICAgICAgIGlmKGNvbiA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBTdHJpbmcgdHJhbklzb2xhdGlvbiA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKKyAgICAgICAgaWYodHJhbklzb2xhdGlvbiAhPSBudWxsICYmIHRyYW5Jc29sYXRpb24uZXF1YWxzKCIiKSA9PSBmYWxzZSkgeworICAgICAgICAgICAgaW50IHRyYW5Jc29sYXRpb25JbnQgPSBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbkludCh0cmFuSXNvbGF0aW9uKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sYXRpb25JbnQpOworICAgICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgeworICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfdHhfbGV2ZWwiKTsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gY291bGQgIgorICAgICAgICAgICAgICAgICAgICArICJub3QgYmUgc2V0OiAiICsgc3FsZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmVzZXRzIHRoZSBpc29sYXRpb24gbGV2ZWwgZm9yIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gcGFzc2VkLgogICAgICAqIElmIHRoZSB0cmFuc2FjdGlvbiBsZXZlbCBpcyB0byBiZSBndWFyYW50ZWVkIHRvIGJlIHRoZSBzYW1lIGFzIHRoZSBvbmUKQEAgLTM3MywzODIgKzM3MywzODIgQEAKICAgICAgKiBpc29sYXRpb24gbGV2ZWwgZnJvbSB0aGUgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBwYXNzZWQuIEVsc2UsCiAgICAgICogaXQgc2V0cyBpdCB0byB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIHBhc3NlZC4KICAgICAgKgotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KLSAgICAgKiBAcGFyYW0JdHJhbklzb2wJaW50Ci0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgaXNvbGF0aW9uIHByb3BlcnR5IGlzIGludmFsaWQKLSAgICAgKgkJCQkJb3IgaWYgdGhlIGlzb2xhdGlvbiBjYW5ub3QgYmUgc2V0IG92ZXIgdGhlIGNvbm5lY3Rpb24KKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogQHBhcmFtICAgIHRyYW5Jc29sICAgIGludAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIGlzb2xhdGlvbiBwcm9wZXJ0eSBpcyBpbnZhbGlkCisgICAgICogICAgICAgICAgICAgICAgICAgIG9yIGlmIHRoZSBpc29sYXRpb24gY2Fubm90IGJlIHNldCBvdmVyIHRoZSBjb25uZWN0aW9uCiAgICAgICovCiAgICAgdm9pZCByZXNldElzb2xhdGlvbihjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWMsIGludCB0cmFuSXNvbCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKLSAgICAJCi0gICAgCWphdmEuc3FsLkNvbm5lY3Rpb24gY29uID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpOwotICAgIAlpZihjb24gPT0gbnVsbCkgewotICAgIAkgICAgcmV0dXJuOwotICAgIAl9Ci0gICAgCQotICAgIAlTdHJpbmcgdHJhbklzb2xhdGlvbiA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKLSAgICAJaWYodHJhbklzb2xhdGlvbiAhPSBudWxsICYmIHRyYW5Jc29sYXRpb24uZXF1YWxzKCIiKSA9PSBmYWxzZSkgewotICAgIAkgICAgU3RyaW5nIGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwpOwotICAgIAkgICAgCi0gICAgCSAgICBpZihndWFyYW50ZWVJc29sYXRpb25MZXZlbCAhPSBudWxsICYmIGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsLmVxdWFscygiIikgPT0gZmFsc2UpIHsKLSAgICAJICAgICAgICBib29sZWFuIGd1YXJhbnRlZSA9IChuZXcgQm9vbGVhbihndWFyYW50ZWVJc29sYXRpb25MZXZlbC50b0xvd2VyQ2FzZSgpKSkuYm9vbGVhblZhbHVlKCk7Ci0gICAgCSAgICAgICAgCi0gICAgCSAgICAgICAgaWYoZ3VhcmFudGVlKSB7Ci0gICAgCSAgICAgICAgICAgIGludCB0cmFuSXNvbGF0aW9uSW50ID0gZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb25JbnQodHJhbklzb2xhdGlvbik7Ci0gICAgCSAgICAgICAgICAgIHRyeSB7Ci0gICAgCSAgICAgICAgICAgICAgICBpZih0cmFuSXNvbGF0aW9uSW50ICE9IGNvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpKSB7Ci0gICAgCSAgICAgICAgICAgICAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sYXRpb25JbnQpOwotICAgIAkgICAgICAgICAgICAgICAgfQotICAgIAkgICAgICAgICAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgICAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3R4X2xldmVsIik7Ci0gICAgCSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBpc29sYXRpb24gbGV2ZWwgY291bGQgbm90IGJlIHNldDogIgotICAgIAkgICAgICAgICAgICAgICAgICAgICsgc3FsZS5nZXRNZXNzYWdlKCkpOwotICAgIAkgICAgICAgICAgICB9Ci0gICAgCSAgICAgICAgfSBlbHNlIHsKLSAgICAJICAgICAgICAgICAgdHJ5IHsKLSAgICAJICAgICAgICAgICAgICAgIGlmKHRyYW5Jc29sICE9IGNvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpKSB7Ci0gICAgCSAgICAgICAgICAgICAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sKTsKLSAgICAJICAgICAgICAgICAgICAgIH0KLSAgICAJICAgICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y190eF9sZXZlbCIpOwotICAgIAkgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgaXNvbGF0aW9uIGxldmVsIGNvdWxkIG5vdCBiZSBzZXQ6ICIKLSAgICAJICAgICAgICAgICAgICAgICAgICArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAJICAgICAgICAgICAgfQotICAgIAkgICAgICAgIH0KLSAgICAJICAgIH0KLSAgICAJfQorCisgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gY29uID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpOworICAgICAgICBpZihjb24gPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgU3RyaW5nIHRyYW5Jc29sYXRpb24gPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTik7CisgICAgICAgIGlmKHRyYW5Jc29sYXRpb24gIT0gbnVsbCAmJiB0cmFuSXNvbGF0aW9uLmVxdWFscygiIikgPT0gZmFsc2UpIHsKKyAgICAgICAgICAgIFN0cmluZyBndWFyYW50ZWVJc29sYXRpb25MZXZlbCA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkdVQVJBTlRFRUlTT0xBVElPTkxFVkVMKTsKKworICAgICAgICAgICAgaWYoZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwgIT0gbnVsbCAmJiBndWFyYW50ZWVJc29sYXRpb25MZXZlbC5lcXVhbHMoIiIpID09IGZhbHNlKSB7CisgICAgICAgICAgICAgICAgYm9vbGVhbiBndWFyYW50ZWUgPSAobmV3IEJvb2xlYW4oZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwudG9Mb3dlckNhc2UoKSkpLmJvb2xlYW5WYWx1ZSgpOworCisgICAgICAgICAgICAgICAgaWYoZ3VhcmFudGVlKSB7CisgICAgICAgICAgICAgICAgICAgIGludCB0cmFuSXNvbGF0aW9uSW50ID0gZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb25JbnQodHJhbklzb2xhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZih0cmFuSXNvbGF0aW9uSW50ICE9IGNvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sYXRpb25JbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7CisgICAgICAgICAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3R4X2xldmVsIik7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBpc29sYXRpb24gbGV2ZWwgY291bGQgbm90IGJlIHNldDogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgc3FsZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRyYW5Jc29sICE9IGNvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgeworICAgICAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y190eF9sZXZlbCIpOworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgaXNvbGF0aW9uIGxldmVsIGNvdWxkIG5vdCBiZSBzZXQ6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGludGVnZXIgZXF1aXZhbGVudCBvZiB0aGUgc3RyaW5nIHNwZWNpZnlpbmcKICAgICAgKiB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uLgogICAgICAqCi0gICAgICogQHBhcmFtCXRyYW5Jc29sYXRpb24Jc3RyaW5nIHNwZWNpZnlpbmcgdGhlIGlzb2xhdGlvbiBsZXZlbAotICAgICAqIEByZXR1cm4JdHJhbklzb2xhdGlvbkludAl0aGUgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gY29uc3RhbnQKLSAgICAgKgkJCQkJZm9yIHRoZSBzdHJpbmcgc3BlY2lmeWluZyB0aGUgaXNvbGF0aW9uLgorICAgICAqIEBwYXJhbSAgICB0cmFuSXNvbGF0aW9uICAgIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBpc29sYXRpb24gbGV2ZWwKKyAgICAgKiBAcmV0dXJuICAgIHRyYW5Jc29sYXRpb25JbnQgICAgdGhlIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IGNvbnN0YW50CisgICAgICogICAgICAgICAgICAgICAgICAgIGZvciB0aGUgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIGlzb2xhdGlvbi4KICAgICAgKi8KICAgICBwcml2YXRlIGludCBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbkludChTdHJpbmcgdHJhbklzb2xhdGlvbikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKLSAgICAJaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJyZWFkLXVuY29tbWl0dGVkIikpIHsKLSAgICAJICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1JFQURfVU5DT01NSVRURUQ7Ci0gICAgCX0gZWxzZSBpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInJlYWQtY29tbWl0dGVkIikpIHsKLSAgICAJICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1JFQURfQ09NTUlUVEVEOwotICAgIAl9IGVsc2UgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJyZXBlYXRhYmxlLXJlYWQiKSkgewotICAgIAkgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fUkVQRUFUQUJMRV9SRUFEOwotICAgIAl9IGVsc2UgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJzZXJpYWxpemFibGUiKSkgewotICAgIAkgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fU0VSSUFMSVpBQkxFOwotICAgIAl9IGVsc2UgewotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJJbnZhbGlkIHRyYW5zYWN0aW9uIGlzb2xhdGlvbjsgdGhlIHRyYW5zYWN0aW9uICIKLSAgICAJICAgICAgICArICJpc29sYXRpb24gbGV2ZWwgY2FuIGJlIGVtcHR5IG9yIGFueSBvZiB0aGUgZm9sbG93aW5nOiAiCi0gICAgCSAgICAgICAgICAgICsgInJlYWQtdW5jb21taXR0ZWQsIHJlYWQtY29tbWl0dGVkLCByZXBlYXRhYmxlLXJlYWQsIHNlcmlhbGl6YWJsZSIpOwotICAgIAl9CisgICAgICAgIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgicmVhZC11bmNvbW1pdHRlZCIpKSB7CisgICAgICAgICAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9SRUFEX1VOQ09NTUlUVEVEOworICAgICAgICB9IGVsc2UgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJyZWFkLWNvbW1pdHRlZCIpKSB7CisgICAgICAgICAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9SRUFEX0NPTU1JVFRFRDsKKyAgICAgICAgfSBlbHNlIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgicmVwZWF0YWJsZS1yZWFkIikpIHsKKyAgICAgICAgICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1JFUEVBVEFCTEVfUkVBRDsKKyAgICAgICAgfSBlbHNlIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgic2VyaWFsaXphYmxlIikpIHsKKyAgICAgICAgICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1NFUklBTElaQUJMRTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiSW52YWxpZCB0cmFuc2FjdGlvbiBpc29sYXRpb247IHRoZSB0cmFuc2FjdGlvbiAiCisgICAgICAgICAgICAgICAgKyAiaXNvbGF0aW9uIGxldmVsIGNhbiBiZSBlbXB0eSBvciBhbnkgb2YgdGhlIGZvbGxvd2luZzogIgorICAgICAgICAgICAgICAgICAgICArICJyZWFkLXVuY29tbWl0dGVkLCByZWFkLWNvbW1pdHRlZCwgcmVwZWF0YWJsZS1yZWFkLCBzZXJpYWxpemFibGUiKTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgbG9nIHdyaXRlciBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCW91dAk8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKiBAc2VlCTxjb2RlPmdldExvZ1dyaXRlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgb3V0ICAgIDxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0TG9nV3JpdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldExvZ1dyaXRlcihqYXZhLmlvLlByaW50V3JpdGVyIG91dCkgewogICAgICAgICBsb2dXcml0ZXIgPSBvdXQ7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0IHRoZSBhc3NvY2lhdGVkIDxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gSmF2YUJlYW4uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcmEJPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcyAKLSAgICAgKgkJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAc2VlCTxjb2RlPmdldFJlc291cmNlQWRhcHRlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcmEgICAgPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAqICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0UmVzb3VyY2VBZGFwdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFJlc291cmNlQWRhcHRlcihqYWthcnRhLnJlc291cmNlLnNwaS5SZXNvdXJjZUFkYXB0ZXIgcmEpIHsKLSAgICAgICAgdGhpcy5yYSA9IHJhOyAgIAorICAgICAgICB0aGlzLnJhID0gcmE7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdXNlciBuYW1lCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdXNlcgk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHVzZXIgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFVzZXIoU3RyaW5nIHVzZXIpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVVNFUk5BTUUsIHVzZXIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHVzZXIgbmFtZQogICAgICAqCi0gICAgICogQHJldHVybgl1c2VyCisgICAgICogQHJldHVybiAgICB1c2VyCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRVc2VyKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVVNFUk5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHVzZXIgbmFtZQogICAgICAqCi0gICAgICogQHBhcmFtCXVzZXIJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB1c2VyICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXR1c2VyKFN0cmluZyB1c2VyKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlVTRVJOQU1FLCB1c2VyKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSB1c2VyIG5hbWUKICAgICAgKgotICAgICAqIEByZXR1cm4JdXNlcgorICAgICAqIEByZXR1cm4gICAgdXNlcgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0dXNlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlVTRVJOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBwYXNzd29yZAogICAgICAqCi0gICAgICogQHBhcmFtCXBhc3N3ZAk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHBhc3N3ZCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0UGFzc3dvcmQoU3RyaW5nIHBhc3N3ZCkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5QQVNTV09SRCwgcGFzc3dkKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBwYXNzd29yZAogICAgICAqCi0gICAgICogQHJldHVybglwYXNzd2QKKyAgICAgKiBAcmV0dXJuICAgIHBhc3N3ZAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0UGFzc3dvcmQoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QQVNTV09SRCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgcGFzc3dvcmQKICAgICAgKgotICAgICAqIEBwYXJhbQlwYXNzd2QJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBwYXNzd2QgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHBhc3N3b3JkKFN0cmluZyBwYXNzd2QpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUEFTU1dPUkQsIHBhc3N3ZCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcGFzc3dvcmQKICAgICAgKgotICAgICAqIEByZXR1cm4JcGFzc3dkCisgICAgICogQHJldHVybiAgICBwYXNzd2QKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHBhc3N3b3JkKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUEFTU1dPUkQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGRhdGEgc291cmNlCiAgICAgICoKLSAgICAgKiBAcGFyYW0JY2xhc3NOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgY2xhc3NOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRDbGFzc05hbWUoU3RyaW5nIGNsYXNzTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5DTEFTU05BTUUsIGNsYXNzTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgZGF0YSBzb3VyY2UKICAgICAgKgotICAgICAqIEByZXR1cm4JY2xhc3NOYW1lCisgICAgICogQHJldHVybiAgICBjbGFzc05hbWUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldENsYXNzTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNMQVNTTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgZGF0YSBzb3VyY2UKICAgICAgKgotICAgICAqIEBwYXJhbQljbGFzc05hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBjbGFzc05hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGNsYXNzTmFtZShTdHJpbmcgY2xhc3NOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNMQVNTTkFNRSwgY2xhc3NOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBkYXRhIHNvdXJjZQogICAgICAqCi0gICAgICogQHJldHVybgljbGFzc05hbWUKKyAgICAgKiBAcmV0dXJuICAgIGNsYXNzTmFtZQogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Y2xhc3NOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ0xBU1NOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIGlmIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiBpcyByZXF1aXJlZCBvciBub3QKICAgICAgKgotICAgICAqIEBwYXJhbQljb25WbGRSZXEJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBjb25WbGRSZXEgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldENvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQoU3RyaW5nIGNvblZsZFJlcSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5DT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVELCBjb25WbGRSZXEpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgaWYgY29ubmVjdGlvbiB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkIG9yIG5vdAogICAgICAqCi0gICAgICogQHJldHVybgljb25uZWN0aW9uIHZhbGlkYXRpb24gcmVxdWlyZW1lbnQKKyAgICAgKiBAcmV0dXJuICAgIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiByZXF1aXJlbWVudAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgaWYgY29ubmVjdGlvbiB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkIG9yIG5vdAogICAgICAqCi0gICAgICogQHBhcmFtCWNvblZsZFJlcQk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGNvblZsZFJlcSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Y29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZChTdHJpbmcgY29uVmxkUmVxKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQsIGNvblZsZFJlcSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBpZiBjb25uZWN0aW9uIHZhbGlkYXRpb24gaXMgcmVxdWlyZWQgb3Igbm90CiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWNvbm5lY3Rpb24gdmFsaWRhdGlvbiByZXF1aXJlbWVudAorICAgICAqIEByZXR1cm4gICAgY29ubmVjdGlvbiB2YWxpZGF0aW9uIHJlcXVpcmVtZW50CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRjb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ09OTkVDVElPTlZBTElEQVRJT05SRVFVSVJFRCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdmFsaWRhdGlvbiBtZXRob2QgcmVxdWlyZWQKICAgICAgKgotICAgICAqIEBwYXJhbQl2YWxpZGF0aW9uTWV0aG9kCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdmFsaWRhdGlvbk1ldGhvZCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0VmFsaWRhdGlvbk1ldGhvZChTdHJpbmcgdmFsaWRhdGlvbk1ldGhvZCkgewogICAgICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTk1FVEhPRCwgdmFsaWRhdGlvbk1ldGhvZCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgY29ubmVjdGlvbiB2YWxpZGF0aW9uIG1ldGhvZCB0eXBlCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXZhbGlkYXRpb24gbWV0aG9kCisgICAgICogQHJldHVybiAgICB2YWxpZGF0aW9uIG1ldGhvZAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VmFsaWRhdGlvbk1ldGhvZCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05NRVRIT0QpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHZhbGlkYXRpb24gbWV0aG9kIHJlcXVpcmVkCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdmFsaWRhdGlvbk1ldGhvZAk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHZhbGlkYXRpb25NZXRob2QgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHZhbGlkYXRpb25NZXRob2QoU3RyaW5nIHZhbGlkYXRpb25NZXRob2QpIHsKICAgICAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05NRVRIT0QsIHZhbGlkYXRpb25NZXRob2QpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiBtZXRob2QgdHlwZQogICAgICAqCi0gICAgICogQHJldHVybgl2YWxpZGF0aW9uIG1ldGhvZAorICAgICAqIEByZXR1cm4gICAgdmFsaWRhdGlvbiBtZXRob2QKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHZhbGlkYXRpb25NZXRob2QoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OTUVUSE9EKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB0YWJsZSBjaGVja2VkIGZvciBkdXJpbmcgdmFsaWRhdGlvbgogICAgICAqCi0gICAgICogQHBhcmFtCXRhYmxlCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdGFibGUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFZhbGlkYXRpb25UYWJsZU5hbWUoU3RyaW5nIHRhYmxlKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05UQUJMRU5BTUUsIHRhYmxlKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSB0YWJsZSBjaGVja2VkIGZvciBkdXJpbmcgdmFsaWRhdGlvbgogICAgICAqCi0gICAgICogQHJldHVybgl0YWJsZQorICAgICAqIEByZXR1cm4gICAgdGFibGUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFZhbGlkYXRpb25UYWJsZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OVEFCTEVOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB0YWJsZSBjaGVja2VkIGZvciBkdXJpbmcgdmFsaWRhdGlvbgogICAgICAqCi0gICAgICogQHBhcmFtCXRhYmxlCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdGFibGUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHZhbGlkYXRpb25UYWJsZU5hbWUoU3RyaW5nIHRhYmxlKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05UQUJMRU5BTUUsIHRhYmxlKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSB0YWJsZSBjaGVja2VkIGZvciBkdXJpbmcgdmFsaWRhdGlvbgogICAgICAqCi0gICAgICogQHJldHVybgl0YWJsZQorICAgICAqIEByZXR1cm4gICAgdGFibGUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHZhbGlkYXRpb25UYWJsZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OVEFCTEVOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKgotICAgICAqIEBwYXJhbQl0cm5Jc29sYXRpb24JPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB0cm5Jc29sYXRpb24gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKFN0cmluZyB0cm5Jc29sYXRpb24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04sIHRybklzb2xhdGlvbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAorICAgICAqIEByZXR1cm4gICAgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKgotICAgICAqIEBwYXJhbQl0cm5Jc29sYXRpb24JPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB0cm5Jc29sYXRpb24gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHRyYW5zYWN0aW9uSXNvbGF0aW9uKFN0cmluZyB0cm5Jc29sYXRpb24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04sIHRybklzb2xhdGlvbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAorICAgICAqIEByZXR1cm4gICAgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXR0cmFuc2FjdGlvbklzb2xhdGlvbigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIGlmIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwgaXMgdG8gYmUgZ3VhcmFudGVlZAogICAgICAqCi0gICAgICogQHBhcmFtCWd1YXJhbnRlZUlzb2xhdGlvbgk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGd1YXJhbnRlZUlzb2xhdGlvbiAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0R3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwoU3RyaW5nIGd1YXJhbnRlZUlzb2xhdGlvbikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5HVUFSQU5URUVJU09MQVRJT05MRVZFTCwgZ3VhcmFudGVlSXNvbGF0aW9uKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKgotICAgICAqIEByZXR1cm4JaXNvbGF0aW9uIGxldmVsIGd1YXJhbnRlZQorICAgICAqIEByZXR1cm4gICAgaXNvbGF0aW9uIGxldmVsIGd1YXJhbnRlZQogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0R3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5HVUFSQU5URUVJU09MQVRJT05MRVZFTCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyBpZiB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsIGlzIHRvIGJlIGd1YXJhbnRlZWQKICAgICAgKgotICAgICAqIEBwYXJhbQlndWFyYW50ZWVJc29sYXRpb24JPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBndWFyYW50ZWVJc29sYXRpb24gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsKFN0cmluZyBndWFyYW50ZWVJc29sYXRpb24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwsIGd1YXJhbnRlZUlzb2xhdGlvbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWlzb2xhdGlvbiBsZXZlbCBndWFyYW50ZWUKKyAgICAgKiBAcmV0dXJuICAgIGlzb2xhdGlvbiBsZXZlbCBndWFyYW50ZWUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L1Jlc291cmNlQWRhcHRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L1Jlc291cmNlQWRhcHRlci5qYXZhCmluZGV4IDU1NWJlNzcuLmVhNTQwNzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9SZXNvdXJjZUFkYXB0ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvUmVzb3VyY2VBZGFwdGVyLmphdmEKQEAgLTI2LDggKzI2LDggQEAKIC8qKgogICogPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA4LzA1Ci0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wOC8wNQorICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogcHVibGljIGNsYXNzIFJlc291cmNlQWRhcHRlciBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLlJlc291cmNlQWRhcHRlciB7CiAKQEAgLTM3LDUyICszNyw1MiBAQAogICAgICAqIEVtcHR5IG1ldGhvZCBpbXBsZW1lbnRhdGlvbiBmb3IgZW5kcG9pbnRBY3RpdmF0aW9uCiAgICAgICogd2hpY2gganVzdCB0aHJvd3MgPGNvZGU+Tm90U3VwcG9ydGVkRXhjZXB0aW9uPC9jb2RlPgogICAgICAqCi0gICAgICogQHBhcmFtCW1lZgk8Y29kZT5NZXNzYWdlRW5kcG9pbnRGYWN0b3J5PC9jb2RlPgotICAgICAqIEBwYXJhbQlhcwk8Y29kZT5BY3RpdmF0aW9uU3BlYzwvY29kZT4KLSAgICAgKiBAdGhyb3dzCTxjb2RlPk5vdFN1cHBvcnRlZEV4Y2VwdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbWVmICAgIDxjb2RlPk1lc3NhZ2VFbmRwb2ludEZhY3Rvcnk8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGFzICAgIDxjb2RlPkFjdGl2YXRpb25TcGVjPC9jb2RlPgorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+Tm90U3VwcG9ydGVkRXhjZXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVuZHBvaW50QWN0aXZhdGlvbihNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IG1lZiwgQWN0aXZhdGlvblNwZWMgYXMpIHRocm93cyBOb3RTdXBwb3J0ZWRFeGNlcHRpb24gewogICAgICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJUaGlzIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIEpEQkMgY29ubmVjdG9yIik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogRW1wdHkgbWV0aG9kIGltcGxlbWVudGF0aW9uIGZvciBlbmRwb2ludERlYWN0aXZhdGlvbgogICAgICAqCi0gICAgICogQHBhcmFtCW1lZgk8Y29kZT5NZXNzYWdlRW5kcG9pbnRGYWN0b3J5PC9jb2RlPgotICAgICAqIEBwYXJhbQlhcwk8Y29kZT5BY3RpdmF0aW9uU3BlYzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbWVmICAgIDxjb2RlPk1lc3NhZ2VFbmRwb2ludEZhY3Rvcnk8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGFzICAgIDxjb2RlPkFjdGl2YXRpb25TcGVjPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVuZHBvaW50RGVhY3RpdmF0aW9uKE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgbWVmLCBBY3RpdmF0aW9uU3BlYyBhcykgewotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEVtcHR5IG1ldGhvZCBpbXBsZW1lbnRhdGlvbiBmb3IgZ2V0WEFSZXNvdXJjZXMKICAgICAgKiB3aGljaCBqdXN0IHRocm93cyA8Y29kZT5Ob3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+CiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3BlY3MJPGNvZGU+QWN0aXZhdGlvblNwZWM8L2NvZGU+IGFycmF5Ci0gICAgICogQHRocm93cwk8Y29kZT5Ob3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+CisgICAgICogQHBhcmFtICAgIHNwZWNzICAgIDxjb2RlPkFjdGl2YXRpb25TcGVjPC9jb2RlPiBhcnJheQorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+Tm90U3VwcG9ydGVkRXhjZXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBYQVJlc291cmNlW10gZ2V0WEFSZXNvdXJjZXMoQWN0aXZhdGlvblNwZWNbXSBzcGVjcykgdGhyb3dzIE5vdFN1cHBvcnRlZEV4Y2VwdGlvbiB7CiAgICAgICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIlRoaXMgbWV0aG9kIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgSkRCQyBjb25uZWN0b3IiKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBFbXB0eSBpbXBsZW1lbnRhdGlvbiBvZiBzdGFydCBtZXRob2QKICAgICAgKgotICAgICAqIEBwYXJhbQljdHgJPGNvZGU+Qm9vdHN0cmFwQ29udGV4dDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgY3R4ICAgIDxjb2RlPkJvb3RzdHJhcENvbnRleHQ8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc3RhcnQoQm9vdHN0cmFwQ29udGV4dCBjdHgpIHRocm93cyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzb3VyY2UgQWRhcHRlciBpcyBzdGFydGluZyB3aXRoIGNvbmZpZ3VyYXRpb24gOiIgKyByYVByb3ApOwogICAgICAgICBpZiAocmFQcm9wID09IG51bGwgfHwgIXJhUHJvcC5lcXVhbHMoIlZBTElEIikpIHsKLQkgICAgdGhyb3cgbmV3IFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uKCJSZXNvdXJjZSBhZGFwdGVyIGNhbm5vdCBzdGFydC4gSXQgaXMgY29uZmlndXJlZCBhcyA6ICIgKyByYVByb3ApOwotCX0gCisgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbigiUmVzb3VyY2UgYWRhcHRlciBjYW5ub3Qgc3RhcnQuIEl0IGlzIGNvbmZpZ3VyZWQgYXMgOiAiICsgcmFQcm9wKTsKICAgICB9Ci0gICAgCisgICAgfQorCiAgICAgLyoqCiAgICAgICogRW1wdHkgaW1wbGVtZW50YXRpb24gb2Ygc3RvcCBtZXRob2QKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzdG9wKCkgewotICAgIAorCiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0UkFQcm9wZXJ0eShTdHJpbmcgcykgewpAQCAtOTIsNSArOTIsNSBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0UkFQcm9wZXJ0eSgpIHsKICAgICAgICAgcmV0dXJuIHJhUHJvcDsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvYnVpbGQueG1sCmluZGV4IDVlMTRkNDQuLmZmMGYwMmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L2J1aWxkLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8cHJvamVjdCBuYW1lPSJqZGJjX2Nvbm5lY3RvciIgYmFzZWRpcj0iJHtnamMuaG9tZX0iIGRlZmF1bHQ9ImJ1aWxkIj4KICAgPHByb3BlcnR5IG5hbWU9InBrZy5kaXIiIHZhbHVlPSJjb20vc3VuL2dqYy9zcGkiLz4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJjbGVhbiI+CiAgICAgPGFudCBhbnRmaWxlPSJidWlsZC54bWwiIGRpcj0iJHtnamMuaG9tZX0vYmluIiB0YXJnZXQ9ImNsZWFuIi8+CiAgIDwvdGFyZ2V0PgpAQCAtMjksNTUgKzI5LDU1IEBACiAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0icGFja2FnZTE0Ij4KLSAgICAJCi0gICAgCTxta2RpciBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIvPgotICAgIAkKLQk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9qZGJjLmphciIgYmFzZWRpcj0iJHtjbGFzcy5kaXJ9IgorCisgICAgICAgIDxta2RpciBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIvPgorCisgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvamRiYy5qYXIiIGJhc2VkaXI9IiR7Y2xhc3MuZGlyfSIKICAgICAgICAgaW5jbHVkZXM9IiR7cGtnLmRpcn0vKiovKiwgY29tL3N1bi9namMvdXRpbC8qKi8qLCBjb20vc3VuL2dqYy9jb21tb24vKiovKiIgZXhjbHVkZXM9ImNvbS9zdW4vZ2pjL2NjaS8qKi8qLGNvbS9zdW4vZ2pjL3NwaS8xLjQvKiovKiIvPgotICAgICAgICAKKwogICAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2NwLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KLSAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEtY3AueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4JCisgICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLWNwLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CiAgICAgICAgIDwvY29weT4KLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2NwLnJhciIgdXBkYXRlPSJ5ZXMiPgotICAgCQk8bWV0YWluZiBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSI+Ci0gICAJCQk8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KLSAgIAkJPC9tZXRhaW5mPgotICAgCTwvamFyPgotICAgCQotICAgCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19feGEucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgotICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS14YS54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgkKKyAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2NwLnJhciIgdXBkYXRlPSJ5ZXMiPgorICAgICAgICAgICA8bWV0YWluZiBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSI+CisgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KKyAgICAgICAgICAgPC9tZXRhaW5mPgorICAgICAgIDwvamFyPgorCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX194YS5yYXIiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIgaW5jbHVkZXM9ImpkYmMuamFyIi8+CisgICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLXhhLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CiAgICAgICAgIDwvY29weT4KLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX3hhLnJhciIgdXBkYXRlPSJ5ZXMiPgotICAgCQk8bWV0YWluZiBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSI+Ci0gICAJCQk8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KLSAgIAkJPC9tZXRhaW5mPgotICAgCTwvamFyPgotICAgCQotICAgCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZG0ucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgotICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS1kbS54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgkKKyAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX3hhLnJhciIgdXBkYXRlPSJ5ZXMiPgorICAgICAgICAgICA8bWV0YWluZiBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSI+CisgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KKyAgICAgICAgICAgPC9tZXRhaW5mPgorICAgICAgIDwvamFyPgorCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kbS5yYXIiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIgaW5jbHVkZXM9ImpkYmMuamFyIi8+CisgICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLWRtLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CiAgICAgICAgIDwvY29weT4KLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RtLnJhciIgdXBkYXRlPSJ5ZXMiPgotICAgCQk8bWV0YWluZiBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSI+Ci0gICAJCQk8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KLSAgIAkJPC9tZXRhaW5mPgotICAgCTwvamFyPgotICAgCQotICAgCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZHMucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgotICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS1kcy54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgkKKyAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RtLnJhciIgdXBkYXRlPSJ5ZXMiPgorICAgICAgICAgICA8bWV0YWluZiBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSI+CisgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KKyAgICAgICAgICAgPC9tZXRhaW5mPgorICAgICAgIDwvamFyPgorCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kcy5yYXIiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIgaW5jbHVkZXM9ImpkYmMuamFyIi8+CisgICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLWRzLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CiAgICAgICAgIDwvY29weT4KLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RzLnJhciIgdXBkYXRlPSJ5ZXMiPgotICAgCQk8bWV0YWluZiBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSI+Ci0gICAJCQk8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KLSAgIAkJPC9tZXRhaW5mPgotICAgCTwvamFyPgotICAgCQotICAgCTxkZWxldGUgZGlyPSIke2dqYy5ob21lfS9kaXN0L2NvbSIvPgotICAgCTxkZWxldGUgZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L2pkYmMuamFyIi8+Ci0gICAJPGRlbGV0ZSBmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIi8+Ci0gICAJCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kcy5yYXIiIHVwZGF0ZT0ieWVzIj4KKyAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgorICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+CisgICAgICAgICAgIDwvbWV0YWluZj4KKyAgICAgICA8L2phcj4KKworICAgICAgIDxkZWxldGUgZGlyPSIke2dqYy5ob21lfS9kaXN0L2NvbSIvPgorICAgICAgIDxkZWxldGUgZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L2pkYmMuamFyIi8+CisgICAgICAgPGRlbGV0ZSBmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIi8+CisKICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJidWlsZDE0IiBkZXBlbmRzPSJjb21waWxlMTQsIHBhY2thZ2UxNCIvPgogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQxMyIvPgotCTx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImJ1aWxkMTQsIGJ1aWxkMTMiLz4KKyAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJidWlsZDE0LCBidWlsZDEzIi8+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvcmEtZHMueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L3JhLWRzLnhtbAppbmRleCA2MGUxZTRlLi42NWU4ZmI1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvcmEtZHMueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9yYS1kcy54bWwKQEAgLTIyLDY5ICsyMiw2OSBAQAogICAgICAgICAgICB2ZXJzaW9uPSIxLjUiPgogCiAgICAgPCEtLSBUaGVyZSBjYW4gYmUgYW55IG51bWJlciBvZiAiZGVzY3JpcHRpb24iIGVsZW1lbnRzIGluY2x1ZGluZyAwIC0tPgotICAgIDwhLS0gVGhpcyBmaWVsZCBjYW4gYmUgb3B0aW9uYWxseSB1c2VkIGJ5IHRoZSBkcml2ZXIgdmVuZG9yIHRvIHByb3ZpZGUgYSAKKyAgICA8IS0tIFRoaXMgZmllbGQgY2FuIGJlIG9wdGlvbmFsbHkgdXNlZCBieSB0aGUgZHJpdmVyIHZlbmRvciB0byBwcm92aWRlIGEKICAgICAgICAgIGRlc2NyaXB0aW9uIGZvciB0aGUgcmVzb3VyY2UgYWRhcHRlci4KICAgICAtLT4KICAgICA8ZGVzY3JpcHRpb24+UmVzb3VyY2UgYWRhcHRlciB3cmFwcGluZyBEYXRhc291cmNlIGltcGxlbWVudGF0aW9uIG9mIGRyaXZlcjwvZGVzY3JpcHRpb24+Ci0gICAgCisKICAgICA8IS0tIFRoZXJlIGNhbiBiZSBhbnkgbnVtYmVyIG9mICJkaXNwbGF5LW5hbWUiIGVsZW1lbnRzIGluY2x1ZGluZyAwIC0tPgotICAgIDwhLS0gVGhlIGZpZWxkIGNhbiBiZSBvcHRpb25hbGx5IHVzZWQgYnkgdGhlIGRyaXZlciB2ZW5kb3IgdG8gcHJvdmlkZSBhIG5hbWUgdGhhdCAKKyAgICA8IS0tIFRoZSBmaWVsZCBjYW4gYmUgb3B0aW9uYWxseSB1c2VkIGJ5IHRoZSBkcml2ZXIgdmVuZG9yIHRvIHByb3ZpZGUgYSBuYW1lIHRoYXQKICAgICAgICAgIGlzIGludGVuZGVkIHRvIGJlIGRpc3BsYXllZCBieSB0b29scy4KICAgICAtLT4KICAgICA8ZGlzcGxheS1uYW1lPkRhdGFTb3VyY2UgUmVzb3VyY2UgQWRhcHRlcjwvZGlzcGxheS1uYW1lPgotICAgIAorCiAgICAgPCEtLSBUaGVyZSBjYW4gYmUgYW55IG51bWJlciBvZiAiaWNvbiIgZWxlbWVudHMgaW5jbHVkaW5nIDAgLS0+CiAgICAgPCEtLSBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUuCiAgICAgICAgIDxpY29uPgotICAgICAgICAgICAgVGhpcyAic21hbGwtaWNvbiIgZWxlbWVudCBjYW4gb2NjdXIgYXRtb3N0IG9uY2UuIFRoaXMgc2hvdWxkIHNwZWNpZnkgdGhlIAotICAgICAgICAgICAgYWJzb2x1dGUgb3IgdGhlIHJlbGF0aXZlIHBhdGggbmFtZSBvZiBhIGZpbGUgY29udGFpbmluZyBhIHNtYWxsICgxNiB4IDE2KSAKKyAgICAgICAgICAgIFRoaXMgInNtYWxsLWljb24iIGVsZW1lbnQgY2FuIG9jY3VyIGF0bW9zdCBvbmNlLiBUaGlzIHNob3VsZCBzcGVjaWZ5IHRoZQorICAgICAgICAgICAgYWJzb2x1dGUgb3IgdGhlIHJlbGF0aXZlIHBhdGggbmFtZSBvZiBhIGZpbGUgY29udGFpbmluZyBhIHNtYWxsICgxNiB4IDE2KQogICAgICAgICAgICAgaWNvbiAtIEpQRUcgb3IgR0lGIGltYWdlLiBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUuCiAgICAgICAgICAgICA8c21hbGwtaWNvbj5zbWFsbGljb24uanBnPC9zbWFsbC1pY29uPgotICAgICAgICAKLSAgICAgICAgICAgIFRoaXMgImxhcmdlLWljb24iIGVsZW1lbnQgY2FuIG9jY3VyIGF0bW9zdCBvbmNlLiBUaGlzIHNob3VsZCBzcGVjaWZ5IHRoZSAKLSAgICAgICAgICAgIGFic29sdXRlIG9yIHRoZSByZWxhdGl2ZSBwYXRoIG5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcgYSBzbWFsbCAoMzIgeCAzMikgCisKKyAgICAgICAgICAgIFRoaXMgImxhcmdlLWljb24iIGVsZW1lbnQgY2FuIG9jY3VyIGF0bW9zdCBvbmNlLiBUaGlzIHNob3VsZCBzcGVjaWZ5IHRoZQorICAgICAgICAgICAgYWJzb2x1dGUgb3IgdGhlIHJlbGF0aXZlIHBhdGggbmFtZSBvZiBhIGZpbGUgY29udGFpbmluZyBhIHNtYWxsICgzMiB4IDMyKQogICAgICAgICAgICAgaWNvbiAtIEpQRUcgb3IgR0lGIGltYWdlLiBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUuCi0gICAgICAgICAgICA8bGFyZ2UtaWNvbj5sYXJnZWljb24uanBnPC9sYXJnZS1pY29uPiAgIAorICAgICAgICAgICAgPGxhcmdlLWljb24+bGFyZ2VpY29uLmpwZzwvbGFyZ2UtaWNvbj4KICAgICAgICAgPC9pY29uPgogICAgIC0tPgogICAgIDxpY29uPgogICAgICAgICA8c21hbGwtaWNvbj48L3NtYWxsLWljb24+Ci0gICAgICAgIDxsYXJnZS1pY29uPjwvbGFyZ2UtaWNvbj4gICAKKyAgICAgICAgPGxhcmdlLWljb24+PC9sYXJnZS1pY29uPgogICAgIDwvaWNvbj4KLSAgICAKKwogICAgIDwhLS0gVGhlICJ2ZW5kb3ItbmFtZSIgZWxlbWVudCBzaG91bGQgb2NjdXIgZXhhY3RseSBvbmNlLiAtLT4KICAgICA8IS0tIFRoaXMgc2hvdWxkIHNwZWNpZnkgdGhlIG5hbWUgb2YgdGhlIGRyaXZlciB2ZW5kb3IuIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZS4KICAgICAgICAgPHZlbmRvci1uYW1lPlhZWiBJTkMuPC92ZW5kb3ItbmFtZT4KICAgICAtLT4KICAgICA8dmVuZG9yLW5hbWU+U3VuIE1pY3Jvc3lzdGVtczwvdmVuZG9yLW5hbWU+Ci0gICAgCisKICAgICA8IS0tIFRoZSAiZWlzLXR5cGUiIGVsZW1lbnQgc2hvdWxkIG9jY3VyIGV4YWN0bHkgb25jZS4gLS0+Ci0gICAgPCEtLSBUaGlzIHNob3VsZCBzcGVjaWZ5IHRoZSBkYXRhYmFzZSwgZm9yIGV4YW1wbGUgdGhlIHByb2R1Y3QgbmFtZSBvZiAKKyAgICA8IS0tIFRoaXMgc2hvdWxkIHNwZWNpZnkgdGhlIGRhdGFiYXNlLCBmb3IgZXhhbXBsZSB0aGUgcHJvZHVjdCBuYW1lIG9mCiAgICAgICAgICB0aGUgZGF0YWJhc2UgaW5kZXBlbmRlbnQgb2YgYW55IHZlcnNpb24gaW5mb3JtYXRpb24uIFRoZSBmb2xsb3dpbmcKICAgICAgICAgIGlzIGFuIGV4YW1wbGUuCiAgICAgICAgIDxlaXMtdHlwZT5YWVo8L2Vpcy10eXBlPgogICAgIC0tPgogICAgIDxlaXMtdHlwZT5EYXRhYmFzZTwvZWlzLXR5cGU+Ci0gICAgCisKICAgICA8IS0tIFRoZSAicmVzb3VyY2VhZGFwdGVyLXZlcnNpb24iIGVsZW1lbnQgc2hvdWxkIG9jY3VyIGV4YWN0bHkgb25jZS4gLS0+Ci0gICAgPCEtLSBUaGlzIHNwZWNpZmllcyBhIHN0cmluZyBiYXNlZCB2ZXJzaW9uIG9mIHRoZSByZXNvdXJjZSBhZGFwdGVyIGZyb20gCisgICAgPCEtLSBUaGlzIHNwZWNpZmllcyBhIHN0cmluZyBiYXNlZCB2ZXJzaW9uIG9mIHRoZSByZXNvdXJjZSBhZGFwdGVyIGZyb20KICAgICAgICAgIHRoZSBkcml2ZXIgdmVuZG9yLiBUaGUgZGVmYXVsdCBpcyBiZWluZyBzZXQgYXMgMS4wLiBUaGUgZHJpdmVyCiAgICAgICAgICB2ZW5kb3IgY2FuIGNoYW5nZSBpdCBhcyByZXF1aXJlZC4KICAgICAtLT4KICAgICA8cmVzb3VyY2VhZGFwdGVyLXZlcnNpb24+MS4wPC9yZXNvdXJjZWFkYXB0ZXItdmVyc2lvbj4KLSAgICAKKwogICAgIDwhLS0gVGhpcyAibGljZW5zZSIgZWxlbWVudCBjYW4gb2NjdXIgYXRtb3N0IG9uY2UgLS0+CiAgICAgPCEtLSBUaGlzIHNwZWNpZmllcyBsaWNlbnNpbmcgcmVxdWlyZW1lbnRzIGZvciB0aGUgcmVzb3VyY2UgYWRhcHRlciBtb2R1bGUuCiAgICAgICAgICBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUuCiAgICAgICAgIDxsaWNlbnNlPgogICAgICAgICAgICAgVGhlcmUgY2FuIGJlIGFueSBudW1iZXIgb2YgImRlc2NyaXB0aW9uIiBlbGVtZW50cyBpbmNsdWRpbmcgMC4KICAgICAgICAgICAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICAgICAgICAgICBUaGlzIGZpZWxkIGNhbiBiZSBvcHRpb25hbGx5IHVzZWQgYnkgdGhlIGRyaXZlciB2ZW5kb3IgdG8gCi0gICAgICAgICAgICAgICAgcHJvdmlkZSBhIGRlc2NyaXB0aW9uIGZvciB0aGUgbGljZW5zaW5nIHJlcXVpcmVtZW50cyBvZiB0aGUgCi0gICAgICAgICAgICAgICAgcmVzb3VyY2UgYWRhcHRlciBsaWtlIGR1cmF0aW9uIG9mIGxpY2Vuc2UsIG51bWJlcm9mIGNvbm5lY3Rpb24gCisgICAgICAgICAgICAgICAgVGhpcyBmaWVsZCBjYW4gYmUgb3B0aW9uYWxseSB1c2VkIGJ5IHRoZSBkcml2ZXIgdmVuZG9yIHRvCisgICAgICAgICAgICAgICAgcHJvdmlkZSBhIGRlc2NyaXB0aW9uIGZvciB0aGUgbGljZW5zaW5nIHJlcXVpcmVtZW50cyBvZiB0aGUKKyAgICAgICAgICAgICAgICByZXNvdXJjZSBhZGFwdGVyIGxpa2UgZHVyYXRpb24gb2YgbGljZW5zZSwgbnVtYmVyb2YgY29ubmVjdGlvbgogICAgICAgICAgICAgICAgIHJlc3RyaWN0aW9ucy4KICAgICAgICAgICAgIDwvZGVzY3JpcHRpb24+Ci0gICAgICAgIAorCiAgICAgICAgICAgICBUaGlzIHNwZWNpZmllcyB3aGV0aGVyIGEgbGljZW5zZSBpcyByZXF1aXJlZCB0byBkZXBsb3kgYW5kIHVzZSB0aGUgcmVzb3VyY2UgYWRhcHRlci4KICAgICAgICAgICAgIERlZmF1bHQgaXMgZmFsc2UuCiAgICAgICAgICAgICA8bGljZW5zZS1yZXF1aXJlZD5mYWxzZTwvbGljZW5zZS1yZXF1aXJlZD4KQEAgLTkzLDI0ICs5MywyNCBAQAogICAgIDxsaWNlbnNlPgogICAgICAgICA8bGljZW5zZS1yZXF1aXJlZD5mYWxzZTwvbGljZW5zZS1yZXF1aXJlZD4KICAgICA8L2xpY2Vuc2U+Ci0gICAgCisKICAgICA8cmVzb3VyY2VhZGFwdGVyPgotICAgICAgICAKLSAgICAgICAgPCEtLSAKLSAgICAgICAgICAgIFRoZSAiY29uZmlnLXByb3BlcnR5IiBlbGVtZW50cyBjYW4gaGF2ZSB6ZXJvIG9yIG1vcmUgImRlc2NyaXB0aW9uIiAKKworICAgICAgICA8IS0tCisgICAgICAgICAgICBUaGUgImNvbmZpZy1wcm9wZXJ0eSIgZWxlbWVudHMgY2FuIGhhdmUgemVybyBvciBtb3JlICJkZXNjcmlwdGlvbiIKICAgICAgICAgICAgIGVsZW1lbnRzLiBUaGUgImRlc2NyaXB0aW9uIiBlbGVtZW50cyBhcmUgbm90IGJlaW5nIGluY2x1ZGVkCiAgICAgICAgICAgICBpbiB0aGUgImNvbmZpZy1wcm9wZXJ0eSIgZWxlbWVudHMgYmVsb3cuIFRoZSBkcml2ZXIgdmVuZG9yIGNhbgogICAgICAgICAgICAgYWRkIHRoZW0gYXMgcmVxdWlyZWQuCiAgICAgICAgIC0tPgotICAgICAgICAKKwogICAgICAgICA8cmVzb3VyY2VhZGFwdGVyLWNsYXNzPmNvbS5zdW4uamRiY3JhLnNwaS5SZXNvdXJjZUFkYXB0ZXI8L3Jlc291cmNlYWRhcHRlci1jbGFzcz4KLSAgICAgICAgCisKICAgICAgICAgPG91dGJvdW5kLXJlc291cmNlYWRhcHRlcj4KLSAgICAgICAgCisKICAgICAgICAgICAgIDxjb25uZWN0aW9uLWRlZmluaXRpb24+Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICA8bWFuYWdlZGNvbm5lY3Rpb25mYWN0b3J5LWNsYXNzPmNvbS5zdW4uamRiY3JhLnNwaS5EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvbWFuYWdlZGNvbm5lY3Rpb25mYWN0b3J5LWNsYXNzPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPCEtLSBUaGVyZSBjYW4gYmUgYW55IG51bWJlciBvZiB0aGVzZSBlbGVtZW50cyBpbmNsdWRpbmcgMCAtLT4KICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+U2VydmVyTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CkBAIC0xMjIsMTM2ICsxMjIsMTM2IEBACiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT45MDkyPC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4gICAgCisgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlVzZXI8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+REJVU0VSPC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4gICAgCisgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlBhc3N3b3JkPC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPkRCUEFTU1dPUkQ8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+RGF0YWJhc2VOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPmpkYmM6cG9pbnRiYXNlOnNlcnZlcjovL2xvY2FsaG9zdDo5MDkyL3NxZS1zYW1wbGVzLG5ldzwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5EYXRhU291cmNlTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+RGVzY3JpcHRpb248L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+T3JhY2xlIHRoaW4gZHJpdmVyIERhdGFzb3VyY2U8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4gICAgCisgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPk5ldHdvcmtQcm90b2NvbDwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+Um9sZU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4gICAgCisgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkxvZ2luVGltZU91dDwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT4wPC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4gICAgCisgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkRyaXZlclByb3BlcnRpZXM8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4gICAgCisgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkRlbGltaXRlcjwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT4jPC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4gICAgCisgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkNsYXNzTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT5jb20ucG9pbnRiYXNlLmpkYmMuamRiY0RhdGFTb3VyY2U8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgIAkJPGNvbmZpZy1wcm9wZXJ0eT4gICAgCi0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktbmFtZT5Db25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkPC9jb25maWctcHJvcGVydHktbmFtZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPmZhbHNlPC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0gICAgICAgIAk8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgCTxjb25maWctcHJvcGVydHk+ICAgIAotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VmFsaWRhdGlvbk1ldGhvZDwvY29uZmlnLXByb3BlcnR5LW5hbWU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLSAgICAgICAgCTwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAJPGNvbmZpZy1wcm9wZXJ0eT4gICAgCi0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktbmFtZT5WYWxpZGF0aW9uVGFibGVOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotICAgICAgICAJPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgIAk8Y29uZmlnLXByb3BlcnR5PiAgICAKLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlRyYW5zYWN0aW9uSXNvbGF0aW9uPC9jb25maWctcHJvcGVydHktbmFtZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotICAgICAgICAJPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgIAk8Y29uZmlnLXByb3BlcnR5PiAgICAKLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkd1YXJhbnRlZUlzb2xhdGlvbkxldmVsPC9jb25maWctcHJvcGVydHktbmFtZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotICAgICAgICAJPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5Db25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPmZhbHNlPC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5WYWxpZGF0aW9uTWV0aG9kPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VmFsaWRhdGlvblRhYmxlTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlRyYW5zYWN0aW9uSXNvbGF0aW9uPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+R3VhcmFudGVlSXNvbGF0aW9uTGV2ZWw8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKwogICAgICAgICAgICAgICAgIDxjb25uZWN0aW9uZmFjdG9yeS1pbnRlcmZhY2U+amF2YXguc3FsLkRhdGFTb3VyY2U8L2Nvbm5lY3Rpb25mYWN0b3J5LWludGVyZmFjZT4KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIDxjb25uZWN0aW9uZmFjdG9yeS1pbXBsLWNsYXNzPmNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlPC9jb25uZWN0aW9uZmFjdG9yeS1pbXBsLWNsYXNzPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPGNvbm5lY3Rpb24taW50ZXJmYWNlPmphdmEuc3FsLkNvbm5lY3Rpb248L2Nvbm5lY3Rpb24taW50ZXJmYWNlPgotICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIDxjb25uZWN0aW9uLWltcGwtY2xhc3M+Y29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25Ib2xkZXI8L2Nvbm5lY3Rpb24taW1wbC1jbGFzcz4KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgPC9jb25uZWN0aW9uLWRlZmluaXRpb24+Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgPHRyYW5zYWN0aW9uLXN1cHBvcnQ+TG9jYWxUcmFuc2FjdGlvbjwvdHJhbnNhY3Rpb24tc3VwcG9ydD4KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICA8YXV0aGVudGljYXRpb24tbWVjaGFuaXNtPgogICAgICAgICAgICAgICAgIDwhLS0gVGhlcmUgY2FuIGJlIGFueSBudW1iZXIgb2YgImRlc2NyaXB0aW9uIiBlbGVtZW50cyBpbmNsdWRpbmcgMCAtLT4KICAgICAgICAgICAgICAgICA8IS0tIE5vdCBpbmNsdWRpbmcgdGhlICJkZXNjcmlwdGlvbiIgZWxlbWVudCAtLT4KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIDxhdXRoZW50aWNhdGlvbi1tZWNoYW5pc20tdHlwZT5CYXNpY1Bhc3N3b3JkPC9hdXRoZW50aWNhdGlvbi1tZWNoYW5pc20tdHlwZT4KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIDxjcmVkZW50aWFsLWludGVyZmFjZT5qYXZheC5yZXNvdXJjZS5zcGkuc2VjdXJpdHkuUGFzc3dvcmRDcmVkZW50aWFsPC9jcmVkZW50aWFsLWludGVyZmFjZT4KICAgICAgICAgICAgIDwvYXV0aGVudGljYXRpb24tbWVjaGFuaXNtPgotICAgICAgICAgICAgCisKICAgICAgICAgICAgIDxyZWF1dGhlbnRpY2F0aW9uLXN1cHBvcnQ+ZmFsc2U8L3JlYXV0aGVudGljYXRpb24tc3VwcG9ydD4KLSAgICAgICAgICAgIAorCiAgICAgICAgIDwvb3V0Ym91bmQtcmVzb3VyY2VhZGFwdGVyPgotCTxhZG1pbm9iamVjdD4KLQkgICAgICAgPGFkbWlub2JqZWN0LWludGVyZmFjZT5jb20uc3VuLmpkYmNyYS5zcGkuSmRiY1NldHVwQWRtaW48L2FkbWlub2JqZWN0LWludGVyZmFjZT4KLQkgICAgICAgPGFkbWlub2JqZWN0LWNsYXNzPmNvbS5zdW4uamRiY3JhLnNwaS5KZGJjU2V0dXBBZG1pbkltcGw8L2FkbWlub2JqZWN0LWNsYXNzPgotCSAgICAgICA8Y29uZmlnLXByb3BlcnR5PgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlRhYmxlTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotCSAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLQkgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5TY2hlbWFOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0JICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotCSAgICAgICA8Y29uZmlnLXByb3BlcnR5PgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkpuZGlOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0JICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotCSAgICAgICA8Y29uZmlnLXByb3BlcnR5PgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPk5vT2ZSb3dzPC9jb25maWctcHJvcGVydHktbmFtZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuSW50ZWdlcjwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjA8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLQkgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgPGFkbWlub2JqZWN0PgorICAgICAgICAgICA8YWRtaW5vYmplY3QtaW50ZXJmYWNlPmNvbS5zdW4uamRiY3JhLnNwaS5KZGJjU2V0dXBBZG1pbjwvYWRtaW5vYmplY3QtaW50ZXJmYWNlPgorICAgICAgICAgICA8YWRtaW5vYmplY3QtY2xhc3M+Y29tLnN1bi5qZGJjcmEuc3BpLkpkYmNTZXR1cEFkbWluSW1wbDwvYWRtaW5vYmplY3QtY2xhc3M+CisgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VGFibGVOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlNjaGVtYU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+Sm5kaU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+Tm9PZlJvd3M8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5JbnRlZ2VyPC9jb25maWctcHJvcGVydHktdHlwZT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+MDwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgPC9hZG1pbm9iamVjdD4KLSAgICAgICAgCisKICAgICA8L3Jlc291cmNlYWRhcHRlcj4KLSAgICAKKwogPC9jb25uZWN0b3I+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uTWFuYWdlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvbk1hbmFnZXIuamF2YQppbmRleCBiMjE5Y2QyLi4xMjQ4MDljIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uTWFuYWdlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25NYW5hZ2VyLmphdmEKQEAgLTI0LDI2ICsyNCwyNiBAQAogLyoqCiAgKiBDb25uZWN0aW9uTWFuYWdlciBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzMxCi0gKiBAYXV0aG9yCUJpbm9kIFAuRworICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8zMQorICogQGF1dGhvciAgICBCaW5vZCBQLkcKICAqLwotcHVibGljIGNsYXNzIENvbm5lY3Rpb25NYW5hZ2VyIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvbk1hbmFnZXJ7IAorcHVibGljIGNsYXNzIENvbm5lY3Rpb25NYW5hZ2VyIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvbk1hbmFnZXJ7CiAKICAgICAvKioKICAgICAgKiBSZXR1cm5zIGEgPGNvZGU+Q29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdCB0byB0aGUgPGNvZGU+Q29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+CiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWNmCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0LgotICAgICAqIEBwYXJhbQlpbmZvCTxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gb2JqZWN0LgotICAgICAqIEByZXR1cm4JQSA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBPYmplY3QuCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbiBJbiBjYXNlIG9mIGFuIGVycm9yIGluIGdldHRpbmcgdGhlIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+LgorICAgICAqIEBwYXJhbSAgICBtY2YgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QuCisgICAgICogQHBhcmFtICAgIGluZm8gICAgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBvYmplY3QuCisgICAgICogQHJldHVybiAgICBBIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IE9iamVjdC4KKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uIEluIGNhc2Ugb2YgYW4gZXJyb3IgaW4gZ2V0dGluZyB0aGUgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4uCiAgICAgICovCiAgICAgcHVibGljIE9iamVjdCBhbGxvY2F0ZUNvbm5lY3Rpb24oTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG1jZiwKLSAgICAJCQkJICAgICBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW5mbykgCi0gICAgCQkJCSAgICAgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKLQlNYW5hZ2VkQ29ubmVjdGlvbiBtYyA9IG1jZi5jcmVhdGVNYW5hZ2VkQ29ubmVjdGlvbihudWxsLCBpbmZvKTsKLQlyZXR1cm4gbWMuZ2V0Q29ubmVjdGlvbihudWxsLCBpbmZvKTsgICAgCQkJCSAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGluZm8pCisgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKKyAgICBNYW5hZ2VkQ29ubmVjdGlvbiBtYyA9IG1jZi5jcmVhdGVNYW5hZ2VkQ29ubmVjdGlvbihudWxsLCBpbmZvKTsKKyAgICByZXR1cm4gbWMuZ2V0Q29ubmVjdGlvbihudWxsLCBpbmZvKTsKICAgICB9Ci0gICAgCisKICAgICAvKgogICAgICAqIFRoaXMgY2xhc3MgY291bGQgZWZmZWN0aXZlbHkgaW1wbGVtZW50IENvbm5lY3Rpb24gcG9vbGluZyBhbHNvLgogICAgICAqIENvdWxkIGJlIGRvbmUgZm9yIEZDUy4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25SZXF1ZXN0SW5mby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvblJlcXVlc3RJbmZvLmphdmEKaW5kZXggMzljNzg3Ni4uYzQ3N2ZjMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvblJlcXVlc3RJbmZvLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvblJlcXVlc3RJbmZvLmphdmEKQEAgLTE5LDEwICsxOSwxMCBAQAogLyoqCiAgKiBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW1wbGVtZW50YXRpb24gZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8zMQotICogQGF1dGhvcglCaW5vZCBQLkcKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMzEKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCiAgKi8KLXB1YmxpYyBjbGFzcyBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm97IAorcHVibGljIGNsYXNzIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mb3sKIAogICAgIHByaXZhdGUgU3RyaW5nIHVzZXI7CiAgICAgcHJpdmF0ZSBTdHJpbmcgcGFzc3dvcmQ7CkBAIC0zMCw4ICszMCw4IEBACiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0cyBhIG5ldyA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IG9iamVjdAogICAgICAqCi0gICAgICogQHBhcmFtCXVzZXIJVXNlciBOYW1lLgotICAgICAqIEBwYXJhbQlwYXNzd29yZAlQYXNzd29yZAorICAgICAqIEBwYXJhbSAgICB1c2VyICAgIFVzZXIgTmFtZS4KKyAgICAgKiBAcGFyYW0gICAgcGFzc3dvcmQgICAgUGFzc3dvcmQKICAgICAgKi8KICAgICBwdWJsaWMgQ29ubmVjdGlvblJlcXVlc3RJbmZvKFN0cmluZyB1c2VyLCBTdHJpbmcgcGFzc3dvcmQpIHsKICAgICAgICAgdGhpcy51c2VyID0gdXNlcjsKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXIgbmFtZSBvZiB0aGUgQ29ubmVjdGlvblJlcXVlc3RJbmZvLgogICAgICAqCi0gICAgICogQHJldHVybglVc2VyIG5hbWUgb2YgQ29ubmVjdGlvblJlcXVlc3RJbmZvLgorICAgICAqIEByZXR1cm4gICAgVXNlciBuYW1lIG9mIENvbm5lY3Rpb25SZXF1ZXN0SW5mby4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFVzZXIoKSB7CiAgICAgICAgIHJldHVybiB1c2VyOwpAQCAtNTAsNyArNTAsNyBAQAogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgcGFzc3dvcmQgb2YgdGhlIENvbm5lY3Rpb25SZXF1ZXN0SW5mby4KICAgICAgKgotICAgICAqIEByZXR1cm4JUGFzc3dvcmQgb2YgQ29ubmVjdGlvblJlcXVlc3RJbmZvLgorICAgICAqIEByZXR1cm4gICAgUGFzc3dvcmQgb2YgQ29ubmVjdGlvblJlcXVlc3RJbmZvLgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0UGFzc3dvcmQoKSB7CiAgICAgICAgIHJldHVybiBwYXNzd29yZDsKQEAgLTU5LDcgKzU5LDcgQEAKICAgICAvKioKICAgICAgKiBWZXJpZnkgd2hldGhlciB0d28gQ29ubmVjdGlvblJlcXVlc3RJbmZvcyBhcmUgZXF1YWwuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVRydWUsIGlmIHRoZXkgYXJlIGVxdWFsIGFuZCBmYWxzZSBvdGhlcndpc2UuCisgICAgICogQHJldHVybiAgICBUcnVlLCBpZiB0aGV5IGFyZSBlcXVhbCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb2JqKSB7CiAgICAgICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwpAQCAtNzUsMTggKzc1LDE4IEBACiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBoYXNoY29kZSBvZiB0aGUgb2JqZWN0LgogICAgICAqCi0gICAgICogQHJldHVybgloYXNoQ29kZS4KKyAgICAgKiBAcmV0dXJuICAgIGhhc2hDb2RlLgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7CiAgICAgICAgIFN0cmluZyByZXN1bHQgPSAiIiArIHVzZXIgKyBwYXNzd29yZDsKICAgICAgICAgcmV0dXJuIHJlc3VsdC5oYXNoQ29kZSgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbXBhcmVzIHR3byBvYmplY3RzLgogICAgICAqCi0gICAgICogQHBhcmFtCW8xCUZpcnN0IG9iamVjdC4KLSAgICAgKiBAcGFyYW0JbzIJU2Vjb25kIG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgbzEgICAgRmlyc3Qgb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBvMiAgICBTZWNvbmQgb2JqZWN0LgogICAgICAqLwogICAgIHByaXZhdGUgYm9vbGVhbiBpc0VxdWFsKE9iamVjdCBvMSwgT2JqZWN0IG8yKSB7CiAgICAgICAgIGlmIChvMSA9PSBudWxsKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQppbmRleCA0MTFiNzNmLi5kOTg3NGEwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKQEAgLTMxLDM2ICszMSwzNiBAQAogLyoqCiAgKiBEYXRhIFNvdXJjZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMzAKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzMwCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiAKIHB1YmxpYyBjbGFzcyBEU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBleHRlbmRzIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSB7Ci0gICAKKwogICAgIHByaXZhdGUgdHJhbnNpZW50IGphdmF4LnNxbC5EYXRhU291cmNlIGRhdGFTb3VyY2VPYmo7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBMb2dnZXIgX2xvZ2dlcjsKICAgICBzdGF0aWMgewogICAgICAgICBfbG9nZ2VyID0gTG9nZ2VyLmdldEFub255bW91c0xvZ2dlcigpOwogICAgIH0KICAgICBwcml2YXRlIGJvb2xlYW4gZGVidWcgPSBmYWxzZTsKLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBuZXcgcGh5c2ljYWwgY29ubmVjdGlvbiB0byB0aGUgdW5kZXJseWluZyBFSVMgcmVzb3VyY2UKICAgICAgKiBtYW5hZ2VyLgotICAgICAqIAotICAgICAqIEBwYXJhbQlzdWJqZWN0CTxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICogQHBhcmFtCWN4UmVxdWVzdEluZm8JPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiB3aGljaCBtYXkgYmUgY3JlYXRlZAotICAgICAqICAgICAgIAkgICAgICAgICAgICAgCWFzIGEgcmVzdWx0IG9mIHRoZSBpbnZvY2F0aW9uIDxjb2RlPmdldENvbm5lY3Rpb24odXNlciwgcGFzc3dvcmQpPC9jb2RlPgotICAgICAqICAgICAgIAkgICAgICAgICAgICAgCW9uIHRoZSA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QKLSAgICAgKiBAcmV0dXJuCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QgY3JlYXRlZAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gaW5zdGFudGlhdGluZyB0aGUKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCTxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdCB1c2VkIGZvciB0aGUKLSAgICAgKiAgICAgICAJCQkJY3JlYXRpb24gb2YgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QKLSAgICAgKiBAdGhyb3dzCVNlY3VyaXR5RXhjZXB0aW9uCWlmIHRoZXJlIGlubyA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdAotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJc2F0aXNmeWluZyB0aGlzIHJlcXVlc3QgCi0gICAgICogQHRocm93cwlSZXNvdXJjZUFsbG9jYXRpb25FeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUgCi0gICAgICoJCQkJCQlwaHlzaWNhbCBjb25uZWN0aW9uCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3ViamVjdCAgICA8Y29kZT5TdWJqZWN0PC9jb2RlPiBpbnN0YW5jZSBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqIEBwYXJhbSAgICBjeFJlcXVlc3RJbmZvICAgIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gd2hpY2ggbWF5IGJlIGNyZWF0ZWQKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyBhIHJlc3VsdCBvZiB0aGUgaW52b2NhdGlvbiA8Y29kZT5nZXRDb25uZWN0aW9uKHVzZXIsIHBhc3N3b3JkKTwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiB0aGUgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0CisgICAgICogQHJldHVybiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGNyZWF0ZWQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGluc3RhbnRpYXRpbmcgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QgdXNlZCBmb3IgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgIGNyZWF0aW9uIG9mIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0CisgICAgICogQHRocm93cyAgICBTZWN1cml0eUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpbm8gPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdGlzZnlpbmcgdGhpcyByZXF1ZXN0CisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUFsbG9jYXRpb25FeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHBoeXNpY2FsIGNvbm5lY3Rpb24KICAgICAgKi8KICAgICBwdWJsaWMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gY3JlYXRlTWFuYWdlZENvbm5lY3Rpb24oamF2YXguc2VjdXJpdHkuYXV0aC5TdWJqZWN0IHN1YmplY3QsCiAgICAgICAgIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBjeFJlcXVlc3RJbmZvKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewpAQCAtNjgsNTUgKzY4LDU1IEBACiAgICAgICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGNyZWF0ZU1hbmFnZWRDb25uZWN0aW9uIik7CiAgICAgICAgIH0KICAgICAgICAgUGFzc3dvcmRDcmVkZW50aWFsIHBjID0gU2VjdXJpdHlVdGlscy5nZXRQYXNzd29yZENyZWRlbnRpYWwodGhpcywgc3ViamVjdCwgY3hSZXF1ZXN0SW5mbyk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKGRhdGFTb3VyY2VPYmogPT0gbnVsbCkgewogICAgICAgICAgICAgaWYoZHNPYmpCdWlsZGVyID09IG51bGwpIHsKICAgICAgICAgICAgICAgICBkc09iakJ1aWxkZXIgPSBuZXcgRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIoc3BlYyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGRhdGFTb3VyY2VPYmogPSAoamF2YXguc3FsLkRhdGFTb3VyY2UpIGRzT2JqQnVpbGRlci5jb25zdHJ1Y3REYXRhU291cmNlT2JqZWN0KCk7CiAgICAgICAgICAgICB9IGNhdGNoKENsYXNzQ2FzdEV4Y2VwdGlvbiBjY2UpIHsKLQkgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2NjZSIsIGNjZSk7CisgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19jY2UiLCBjY2UpOwogICAgICAgICAgICAgICAgIHRocm93IG5ldyBqYWthcnRhLnJlc291cmNlLlJlc291cmNlRXhjZXB0aW9uKGNjZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gZHNDb25uID0gbnVsbDsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKLQkgICAgLyogRm9yIHRoZSBjYXNlIHdoZXJlIHRoZSB1c2VyL3Bhc3N3ZCBvZiB0aGUgY29ubmVjdGlvbiBwb29sIGlzCi0JICAgICAqIGVxdWFsIHRvIHRoZSBQYXNzd29yZENyZWRlbnRpYWwgZm9yIHRoZSBjb25uZWN0aW9uIHJlcXVlc3QKLQkgICAgICogZ2V0IGEgY29ubmVjdGlvbiBmcm9tIHRoaXMgcG9vbCBkaXJlY3RseS4KLQkgICAgICogZm9yIGFsbCBvdGhlciBjb25kaXRpb25zIGdvIGNyZWF0ZSBhIG5ldyBjb25uZWN0aW9uCi0JICAgICAqLwotCSAgICBpZiAoIGlzRXF1YWwoIHBjLCBnZXRVc2VyKCksIGdldFBhc3N3b3JkKCkgKSApIHsKLQkgICAgICAgIGRzQ29ubiA9IGRhdGFTb3VyY2VPYmouZ2V0Q29ubmVjdGlvbigpOwotCSAgICB9IGVsc2UgewotCSAgICAgICAgZHNDb25uID0gZGF0YVNvdXJjZU9iai5nZXRDb25uZWN0aW9uKHBjLmdldFVzZXJOYW1lKCksIAotCQkgICAgbmV3IFN0cmluZyhwYy5nZXRQYXNzd29yZCgpKSk7Ci0JICAgIH0KKyAgICAgICAgLyogRm9yIHRoZSBjYXNlIHdoZXJlIHRoZSB1c2VyL3Bhc3N3ZCBvZiB0aGUgY29ubmVjdGlvbiBwb29sIGlzCisgICAgICAgICAqIGVxdWFsIHRvIHRoZSBQYXNzd29yZENyZWRlbnRpYWwgZm9yIHRoZSBjb25uZWN0aW9uIHJlcXVlc3QKKyAgICAgICAgICogZ2V0IGEgY29ubmVjdGlvbiBmcm9tIHRoaXMgcG9vbCBkaXJlY3RseS4KKyAgICAgICAgICogZm9yIGFsbCBvdGhlciBjb25kaXRpb25zIGdvIGNyZWF0ZSBhIG5ldyBjb25uZWN0aW9uCisgICAgICAgICAqLworICAgICAgICBpZiAoIGlzRXF1YWwoIHBjLCBnZXRVc2VyKCksIGdldFBhc3N3b3JkKCkgKSApIHsKKyAgICAgICAgICAgIGRzQ29ubiA9IGRhdGFTb3VyY2VPYmouZ2V0Q29ubmVjdGlvbigpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZHNDb25uID0gZGF0YVNvdXJjZU9iai5nZXRDb25uZWN0aW9uKHBjLmdldFVzZXJOYW1lKCksCisgICAgICAgICAgICBuZXcgU3RyaW5nKHBjLmdldFBhc3N3b3JkKCkpKTsKKyAgICAgICAgfQogICAgICAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLmV4Y19jcmVhdGVfY29ubiIsIHNxbGUpOwotICAgICAgICAgICAgdGhyb3cgbmV3IGpha2FydGEucmVzb3VyY2Uuc3BpLlJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gY291bGQgbm90IGJlIGFsbG9jYXRlZDogIiArIAorICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5leGNfY3JlYXRlX2Nvbm4iLCBzcWxlKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBqYWthcnRhLnJlc291cmNlLnNwaS5SZXNvdXJjZUFsbG9jYXRpb25FeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGNvdWxkIG5vdCBiZSBhbGxvY2F0ZWQ6ICIgKwogICAgICAgICAgICAgICAgIHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWMgPSBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uKG51bGwsIGRzQ29ubiwgcGMsIHRoaXMpOwogICAgICAgICAvL0dKQ0lOVAogICAgICAgICBzZXRJc29sYXRpb24obWMpOwogICAgICAgICBpc1ZhbGlkKG1jKTsKICAgICAgICAgcmV0dXJuIG1jOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIENoZWNrIGlmIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpcyBlcXVhbCB0byAKKyAgICAgKiBDaGVjayBpZiB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaXMgZXF1YWwgdG8KICAgICAgKiBhbm90aGVyIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4uCi0gICAgICogCi0gICAgICogQHBhcmFtCW90aGVyCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0IGZvciBjaGVja2luZyBlcXVhbGl0eSB3aXRoCi0gICAgICogQHJldHVybgl0cnVlCWlmIHRoZSBwcm9wZXJ0eSBzZXRzIG9mIGJvdGggdGhlIAotICAgICAqCQkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3RzIGFyZSB0aGUgc2FtZQotICAgICAqCQlmYWxzZQlvdGhlcndpc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBvdGhlciAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdCBmb3IgY2hlY2tpbmcgZXF1YWxpdHkgd2l0aAorICAgICAqIEByZXR1cm4gICAgdHJ1ZSAgICBpZiB0aGUgcHJvcGVydHkgc2V0cyBvZiBib3RoIHRoZQorICAgICAqICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3RzIGFyZSB0aGUgc2FtZQorICAgICAqICAgICAgICBmYWxzZSAgICBvdGhlcndpc2UKICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG90aGVyKSB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC0xMjcsNDA5ICsxMjcsNDA5IEBACiAgICAgICAgICAqIGlmIGFuZCBvbmx5IGlmIHRoZWlyIHByb3BlcnRpZXMgYXJlIHRoZSBzYW1lLgogICAgICAgICAgKi8KICAgICAgICAgaWYob3RoZXIgaW5zdGFuY2VvZiBjb20uc3VuLmpkYmNyYS5zcGkuRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkpIHsKLSAgICAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBvdGhlck1DRiA9IAorICAgICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLkRTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG90aGVyTUNGID0KICAgICAgICAgICAgICAgICAoY29tLnN1bi5qZGJjcmEuc3BpLkRTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KSBvdGhlcjsKICAgICAgICAgICAgIHJldHVybiB0aGlzLnNwZWMuZXF1YWxzKG90aGVyTUNGLnNwZWMpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBzZXJ2ZXIgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlzZXJ2ZXJOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldFNlcnZlck5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHNlcnZlck5hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0U2VydmVyTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRzZXJ2ZXJOYW1lKFN0cmluZyBzZXJ2ZXJOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlNFUlZFUk5BTUUsIHNlcnZlck5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHNlcnZlciBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglzZXJ2ZXJOYW1lCi0gICAgICogQHNlZQk8Y29kZT5zZXRTZXJ2ZXJOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgc2VydmVyTmFtZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0U2VydmVyTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHNlcnZlck5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5TRVJWRVJOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBzZXJ2ZXIgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlzZXJ2ZXJOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldFNlcnZlck5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHNlcnZlck5hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0U2VydmVyTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJOYW1lKFN0cmluZyBzZXJ2ZXJOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlNFUlZFUk5BTUUsIHNlcnZlck5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHNlcnZlciBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglzZXJ2ZXJOYW1lCi0gICAgICogQHNlZQk8Y29kZT5zZXRTZXJ2ZXJOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgc2VydmVyTmFtZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0U2VydmVyTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFNlcnZlck5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5TRVJWRVJOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBwb3J0IG51bWJlci4KICAgICAgKgotICAgICAqIEBwYXJhbQlwb3J0TnVtYmVyCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldFBvcnROdW1iZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHBvcnROdW1iZXIgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0UG9ydE51bWJlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRwb3J0TnVtYmVyKFN0cmluZyBwb3J0TnVtYmVyKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIsIHBvcnROdW1iZXIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHBvcnQgbnVtYmVyLgogICAgICAqCi0gICAgICogQHJldHVybglwb3J0TnVtYmVyCi0gICAgICogQHNlZQk8Y29kZT5zZXRQb3J0TnVtYmVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgcG9ydE51bWJlcgorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0UG9ydE51bWJlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHBvcnROdW1iZXIoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QT1JUTlVNQkVSKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBwb3J0IG51bWJlci4KICAgICAgKgotICAgICAqIEBwYXJhbQlwb3J0TnVtYmVyCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldFBvcnROdW1iZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHBvcnROdW1iZXIgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0UG9ydE51bWJlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRQb3J0TnVtYmVyKFN0cmluZyBwb3J0TnVtYmVyKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIsIHBvcnROdW1iZXIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHBvcnQgbnVtYmVyLgogICAgICAqCi0gICAgICogQHJldHVybglwb3J0TnVtYmVyCi0gICAgICogQHNlZQk8Y29kZT5zZXRQb3J0TnVtYmVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgcG9ydE51bWJlcgorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0UG9ydE51bWJlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFBvcnROdW1iZXIoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QT1JUTlVNQkVSKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkYXRhYmFzZSBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCWRhdGFiYXNlTmFtZQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREYXRhYmFzZU5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRhdGFiYXNlTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREYXRhYmFzZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0ZGF0YWJhc2VOYW1lKFN0cmluZyBkYXRhYmFzZU5hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQUJBU0VOQU1FLCBkYXRhYmFzZU5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRhdGFiYXNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRhdGFiYXNlTmFtZQotICAgICAqIEBzZWUJPGNvZGU+c2V0RGF0YWJhc2VOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZGF0YWJhc2VOYW1lCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREYXRhYmFzZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRkYXRhYmFzZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBQkFTRU5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRhdGFiYXNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZGF0YWJhc2VOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERhdGFiYXNlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGF0YWJhc2VOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERhdGFiYXNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXREYXRhYmFzZU5hbWUoU3RyaW5nIGRhdGFiYXNlTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBQkFTRU5BTUUsIGRhdGFiYXNlTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGF0YWJhc2UgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGF0YWJhc2VOYW1lCi0gICAgICogQHNlZQk8Y29kZT5zZXREYXRhYmFzZU5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkYXRhYmFzZU5hbWUKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERhdGFiYXNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldERhdGFiYXNlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFCQVNFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGF0YSBzb3VyY2UgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlkc24gPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRzbiA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREYXRhU291cmNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRkYXRhU291cmNlTmFtZShTdHJpbmcgZHNuKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FLCBkc24pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRhdGEgc291cmNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRzbgotICAgICAqIEBzZWUJPGNvZGU+c2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkc24KKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERhdGFTb3VyY2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0ZGF0YVNvdXJjZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBU09VUkNFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGF0YSBzb3VyY2UgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlkc24gPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRzbiA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREYXRhU291cmNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXREYXRhU291cmNlTmFtZShTdHJpbmcgZHNuKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FLCBkc24pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRhdGEgc291cmNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRzbgotICAgICAqIEBzZWUJPGNvZGU+c2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkc24KKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERhdGFTb3VyY2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGF0YVNvdXJjZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBU09VUkNFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGVzY3JpcHRpb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZGVzYwk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREZXNjcmlwdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGVzYyAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREZXNjcmlwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRkZXNjcmlwdGlvbihTdHJpbmcgZGVzYykgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ERVNDUklQVElPTiwgZGVzYyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGVzY3JpcHRpb24uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRlc2MKLSAgICAgKiBAc2VlCTxjb2RlPnNldERlc2NyaXB0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZGVzYworICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGVzY3JpcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRkZXNjcmlwdGlvbigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFU0NSSVBUSU9OKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkZXNjcmlwdGlvbi4KICAgICAgKgotICAgICAqIEBwYXJhbQlkZXNjCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERlc2NyaXB0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkZXNjICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERlc2NyaXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERlc2NyaXB0aW9uKFN0cmluZyBkZXNjKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFU0NSSVBUSU9OLCBkZXNjKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkZXNjcmlwdGlvbi4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGVzYwotICAgICAqIEBzZWUJPGNvZGU+c2V0RGVzY3JpcHRpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBkZXNjCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREZXNjcmlwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVTQ1JJUFRJT04pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIG5ldHdvcmsgcHJvdG9jb2wuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbndQcm90b2NvbAk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CisgICAgICogQHBhcmFtICAgIG53UHJvdG9jb2wgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldG5ldHdvcmtQcm90b2NvbChTdHJpbmcgbndQcm90b2NvbCkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ORVRXT1JLUFJPVE9DT0wsIG53UHJvdG9jb2wpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIG5ldHdvcmsgcHJvdG9jb2wuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCW53UHJvdG9jb2wKLSAgICAgKiBAc2VlCTxjb2RlPnNldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIG53UHJvdG9jb2wKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldG5ldHdvcmtQcm90b2NvbCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk5FVFdPUktQUk9UT0NPTCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgbmV0d29yayBwcm90b2NvbC4KICAgICAgKgotICAgICAqIEBwYXJhbQlud1Byb3RvY29sCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbndQcm90b2NvbCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TmV0d29ya1Byb3RvY29sKFN0cmluZyBud1Byb3RvY29sKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk5FVFdPUktQUk9UT0NPTCwgbndQcm90b2NvbCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgbmV0d29yayBwcm90b2NvbC4KICAgICAgKgotICAgICAqIEByZXR1cm4JbndQcm90b2NvbAotICAgICAqIEBzZWUJPGNvZGU+c2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgbndQcm90b2NvbAorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmV0d29ya1Byb3RvY29sKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTkVUV09SS1BST1RPQ09MKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSByb2xlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jcm9sZU5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0Um9sZU5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHJvbGVOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldFJvbGVOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHJvbGVOYW1lKFN0cmluZyByb2xlTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ST0xFTkFNRSwgcm9sZU5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHJvbGUgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4Jcm9sZU5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldFJvbGVOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgcm9sZU5hbWUKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldFJvbGVOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0cm9sZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ST0xFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgcm9sZSBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCXJvbGVOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldFJvbGVOYW1lPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICByb2xlTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRSb2xlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRSb2xlTmFtZShTdHJpbmcgcm9sZU5hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUk9MRU5BTUUsIHJvbGVOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSByb2xlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXJvbGVOYW1lCi0gICAgICogQHNlZQk8Y29kZT5zZXRSb2xlTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHJvbGVOYW1lCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRSb2xlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFJvbGVOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUk9MRU5BTUUpOwogICAgIH0KIAotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgbG9naW4gdGltZW91dC4KICAgICAgKgotICAgICAqIEBwYXJhbQlsb2dpblRpbWVPdXQJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0TG9naW5UaW1lT3V0PC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBsb2dpblRpbWVPdXQgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0TG9naW5UaW1lT3V0PC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGxvZ2luVGltZU91dChTdHJpbmcgbG9naW5UaW1lT3V0KSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR0lOVElNRU9VVCwgbG9naW5UaW1lT3V0KTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBsb2dpbiB0aW1lb3V0LgogICAgICAqCi0gICAgICogQHJldHVybglsb2dpblRpbWVvdXQKLSAgICAgKiBAc2VlCTxjb2RlPnNldExvZ2luVGltZU91dDwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGxvZ2luVGltZW91dAorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0TG9naW5UaW1lT3V0PC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0bG9naW5UaW1lT3V0KCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HSU5USU1FT1VUKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBsb2dpbiB0aW1lb3V0LgogICAgICAqCi0gICAgICogQHBhcmFtCWxvZ2luVGltZU91dAk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXRMb2dpblRpbWVPdXQ8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGxvZ2luVGltZU91dCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRMb2dpblRpbWVPdXQ8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TG9naW5UaW1lT3V0KFN0cmluZyBsb2dpblRpbWVPdXQpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HSU5USU1FT1VULCBsb2dpblRpbWVPdXQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGxvZ2luIHRpbWVvdXQuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWxvZ2luVGltZW91dAotICAgICAqIEBzZWUJPGNvZGU+c2V0TG9naW5UaW1lT3V0PC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgbG9naW5UaW1lb3V0CisgICAgICogQHNlZSAgICA8Y29kZT5zZXRMb2dpblRpbWVPdXQ8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRMb2dpblRpbWVPdXQoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dJTlRJTUVPVVQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRlbGltaXRlci4KICAgICAgKgotICAgICAqIEBwYXJhbQlkZWxpbQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREZWxpbWl0ZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRlbGltICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERlbGltaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRkZWxpbWl0ZXIoU3RyaW5nIGRlbGltKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUiwgZGVsaW0pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRlbGltaXRlci4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGVsaW0KLSAgICAgKiBAc2VlCTxjb2RlPnNldERlbGltaXRlcjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRlbGltCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREZWxpbWl0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRkZWxpbWl0ZXIoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERUxJTUlURVIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRlbGltaXRlci4KICAgICAgKgotICAgICAqIEBwYXJhbQlkZWxpbQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREZWxpbWl0ZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRlbGltICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERlbGltaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXREZWxpbWl0ZXIoU3RyaW5nIGRlbGltKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUiwgZGVsaW0pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRlbGltaXRlci4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGVsaW0KLSAgICAgKiBAc2VlCTxjb2RlPnNldERlbGltaXRlcjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRlbGltCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREZWxpbWl0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXREZWxpbWl0ZXIoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERUxJTUlURVIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRyaXZlciBzcGVjaWZpYyBwcm9wZXJ0aWVzLgogICAgICAqCi0gICAgICogQHBhcmFtCWRyaXZlclByb3BzCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRyaXZlclByb3BzICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0ZHJpdmVyUHJvcGVydGllcyhTdHJpbmcgZHJpdmVyUHJvcHMpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuRFJJVkVSUFJPUEVSVElFUywgZHJpdmVyUHJvcHMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRyaXZlciBzcGVjaWZpYyBwcm9wZXJ0aWVzLgogICAgICAqCi0gICAgICogQHJldHVybglkcml2ZXJQcm9wcwotICAgICAqIEBzZWUJPGNvZGU+c2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRyaXZlclByb3BzCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0ZHJpdmVyUHJvcGVydGllcygpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRSSVZFUlBST1BFUlRJRVMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRyaXZlciBzcGVjaWZpYyBwcm9wZXJ0aWVzLgogICAgICAqCi0gICAgICogQHBhcmFtCWRyaXZlclByb3BzCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRyaXZlclByb3BzICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RHJpdmVyUHJvcGVydGllcyhTdHJpbmcgZHJpdmVyUHJvcHMpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuRFJJVkVSUFJPUEVSVElFUywgZHJpdmVyUHJvcHMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRyaXZlciBzcGVjaWZpYyBwcm9wZXJ0aWVzLgogICAgICAqCi0gICAgICogQHJldHVybglkcml2ZXJQcm9wcwotICAgICAqIEBzZWUJPGNvZGU+c2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRyaXZlclByb3BzCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RHJpdmVyUHJvcGVydGllcygpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRSSVZFUlBST1BFUlRJRVMpOwpAQCAtNTM5LDM1ICs1MzksMzUgQEAKICAgICAgKiBDaGVjayBpZiB0aGUgUGFzc3dvcmRDcmVkZW50aWFsIHBhc3NlZCBmb3IgdGhpcyBnZXQgY29ubmVjdGlvbgogICAgICAqIHJlcXVlc3QgaXMgZXF1YWwgdG8gdGhlIHVzZXIvcGFzc3dkIG9mIHRoaXMgY29ubmVjdGlvbiBwb29sLgogICAgICAqLwotICAgIHByaXZhdGUgYm9vbGVhbiBpc0VxdWFsKCBQYXNzd29yZENyZWRlbnRpYWwgcGMsIFN0cmluZyB1c2VyLCAKKyAgICBwcml2YXRlIGJvb2xlYW4gaXNFcXVhbCggUGFzc3dvcmRDcmVkZW50aWFsIHBjLCBTdHJpbmcgdXNlciwKICAgICAgICAgU3RyaW5nIHBhc3N3b3JkKSB7Ci0gICAgICAgIAotCS8vaWYgZXF1YWwgZ2V0IGRpcmVjdCBjb25uZWN0aW9uIGVsc2UgCi0JLy9nZXQgY29ubmVjdGlvbiB3aXRoIHVzZXIgYW5kIHBhc3N3b3JkLgotCQotCWlmICh1c2VyID09IG51bGwgJiYgcGMgPT0gbnVsbCkgewotCSAgICByZXR1cm4gdHJ1ZTsKLQl9Ci0JCi0JaWYgKCB1c2VyID09IG51bGwgJiYgcGMgIT0gbnVsbCApIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQl9CiAKLQlpZiggcGMgPT0gbnVsbCApIHsKLQkgICAgcmV0dXJuIHRydWU7Ci0JfQotCQotCWlmICggdXNlci5lcXVhbHMoIHBjLmdldFVzZXJOYW1lKCkgKSApIHsKLQkgICAgaWYgKCBwYXNzd29yZCA9PSBudWxsICYmIHBjLmdldFBhc3N3b3JkKCkgPT0gbnVsbCApIHsKLQkgICAgICAgIHJldHVybiB0cnVlOwotCSAgICB9Ci0JfQotCQotCWlmICggdXNlci5lcXVhbHMocGMuZ2V0VXNlck5hbWUoKSkgJiYgcGFzc3dvcmQuZXF1YWxzKHBjLmdldFBhc3N3b3JkKCkpICkgewotCSAgICByZXR1cm4gdHJ1ZTsKLQl9IAotCQotICAgICAgICAKLQlyZXR1cm4gZmFsc2U7CisgICAgLy9pZiBlcXVhbCBnZXQgZGlyZWN0IGNvbm5lY3Rpb24gZWxzZQorICAgIC8vZ2V0IGNvbm5lY3Rpb24gd2l0aCB1c2VyIGFuZCBwYXNzd29yZC4KKworICAgIGlmICh1c2VyID09IG51bGwgJiYgcGMgPT0gbnVsbCkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIHVzZXIgPT0gbnVsbCAmJiBwYyAhPSBudWxsICkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmKCBwYyA9PSBudWxsICkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIHVzZXIuZXF1YWxzKCBwYy5nZXRVc2VyTmFtZSgpICkgKSB7CisgICAgICAgIGlmICggcGFzc3dvcmQgPT0gbnVsbCAmJiBwYy5nZXRQYXNzd29yZCgpID09IG51bGwgKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICggdXNlci5lcXVhbHMocGMuZ2V0VXNlck5hbWUoKSkgJiYgcGFzc3dvcmQuZXF1YWxzKHBjLmdldFBhc3N3b3JkKCkpICkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKworICAgIHJldHVybiBmYWxzZTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EYXRhU291cmNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EYXRhU291cmNlLmphdmEKaW5kZXggMjE5YTM2NS4uNGJmOGI3YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRGF0YVNvdXJjZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RhdGFTb3VyY2UuamF2YQpAQCAtMjgsMjIgKzI4LDIyIEBACiBpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOwogaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOwogLyoqCi0gKiBIb2xkcyB0aGUgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LCB3aGljaCBpcyB0byBiZSAKKyAqIEhvbGRzIHRoZSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QsIHdoaWNoIGlzIHRvIGJlCiAgKiBwYXNzZWQgdG8gdGhlIGFwcGxpY2F0aW9uIHByb2dyYW0uCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8zMQotICogQGF1dGhvcglCaW5vZCBQLkcKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMzEKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCiAgKi8KIHB1YmxpYyBjbGFzcyBEYXRhU291cmNlIGltcGxlbWVudHMgamF2YXguc3FsLkRhdGFTb3VyY2UsIGphdmEuaW8uU2VyaWFsaXphYmxlLAotCQljb20uc3VuLmFwcHNlcnYuamRiY3JhLkRhdGFTb3VyY2UsIGpha2FydGEucmVzb3VyY2UuUmVmZXJlbmNlYWJsZXsgCi0JCQkJICAgCisgICAgICAgIGNvbS5zdW4uYXBwc2Vydi5qZGJjcmEuRGF0YVNvdXJjZSwgamFrYXJ0YS5yZXNvdXJjZS5SZWZlcmVuY2VhYmxleworCiAgICAgcHJpdmF0ZSBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmOwotICAgIHByaXZhdGUgQ29ubmVjdGlvbk1hbmFnZXIgY207CQkJCSAgIAkJCQkgICAKKyAgICBwcml2YXRlIENvbm5lY3Rpb25NYW5hZ2VyIGNtOwogICAgIHByaXZhdGUgaW50IGxvZ2luVGltZW91dDsKICAgICBwcml2YXRlIFByaW50V3JpdGVyIGxvZ1dyaXRlcjsKLSAgICBwcml2YXRlIFN0cmluZyBkZXNjcmlwdGlvbjsJCQkJICAgCisgICAgcHJpdmF0ZSBTdHJpbmcgZGVzY3JpcHRpb247CiAgICAgcHJpdmF0ZSBSZWZlcmVuY2UgcmVmZXJlbmNlOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgTG9nZ2VyIF9sb2dnZXI7CiAgICAgc3RhdGljIHsKICAgICAgICAgX2xvZ2dlciA9IExvZ2dlci5nZXRBbm9ueW1vdXNMb2dnZXIoKTsKQEAgLTUxLDU3ICs1MSw1NyBAQAogICAgIHByaXZhdGUgYm9vbGVhbiBkZWJ1ZyA9IGZhbHNlOwogCiAgICAgLyoqCi0gICAgICogQ29uc3RydWN0cyA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QuIFRoaXMgaXMgY3JlYXRlZCBieSB0aGUgCisgICAgICogQ29uc3RydWN0cyA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QuIFRoaXMgaXMgY3JlYXRlZCBieSB0aGUKICAgICAgKiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdC4KICAgICAgKgotICAgICAqIEBwYXJhbQltY2YJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QgCi0gICAgICoJCQljcmVhdGluZyB0aGlzIG9iamVjdC4KLSAgICAgKiBAcGFyYW0JY20JPGNvZGU+Q29ubmVjdGlvbk1hbmFnZXI8L2NvZGU+IG9iamVjdCBlaXRoZXIgYXNzb2NpYXRlZAotICAgICAqCQkJd2l0aCBBcHBsaWNhdGlvbiBzZXJ2ZXIgb3IgUmVzb3VyY2UgQWRhcHRlci4KKyAgICAgKiBAcGFyYW0gICAgbWNmICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0CisgICAgICogICAgICAgICAgICBjcmVhdGluZyB0aGlzIG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgY20gICAgPGNvZGU+Q29ubmVjdGlvbk1hbmFnZXI8L2NvZGU+IG9iamVjdCBlaXRoZXIgYXNzb2NpYXRlZAorICAgICAqICAgICAgICAgICAgd2l0aCBBcHBsaWNhdGlvbiBzZXJ2ZXIgb3IgUmVzb3VyY2UgQWRhcHRlci4KICAgICAgKi8KICAgICBwdWJsaWMgRGF0YVNvdXJjZSAoTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG1jZiwgQ29ubmVjdGlvbk1hbmFnZXIgY20pIHsKLSAgICAJdGhpcy5tY2YgPSBtY2Y7Ci0gICAgCWlmIChjbSA9PSBudWxsKSB7Ci0gICAgCSAgICB0aGlzLmNtID0gKENvbm5lY3Rpb25NYW5hZ2VyKSBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25NYW5hZ2VyKCk7Ci0gICAgCX0gZWxzZSB7Ci0gICAgCSAgICB0aGlzLmNtID0gY207Ci0gICAgCX0gICAgCQotICAgIH0gICAKLSAgICAKKyAgICAgICAgdGhpcy5tY2YgPSBtY2Y7CisgICAgICAgIGlmIChjbSA9PSBudWxsKSB7CisgICAgICAgICAgICB0aGlzLmNtID0gKENvbm5lY3Rpb25NYW5hZ2VyKSBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25NYW5hZ2VyKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aGlzLmNtID0gY207CisgICAgICAgIH0KKyAgICB9CisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgotICAgICAqIAotICAgICAqIEByZXR1cm4JPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhbiBlcnJvci4gICAgICAKKyAgICAgKgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhbiBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgQ29ubmVjdGlvbiBnZXRDb25uZWN0aW9uKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0gICAgCXRyeSB7Ci0gICAgCSAgICByZXR1cm4gKENvbm5lY3Rpb24pIGNtLmFsbG9jYXRlQ29ubmVjdGlvbihtY2YsbnVsbCk7ICAgIAkgICAgCi0gICAgCX0gY2F0Y2ggKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZXR1cm4gKENvbm5lY3Rpb24pIGNtLmFsbG9jYXRlQ29ubmVjdGlvbihtY2YsbnVsbCk7CisgICAgICAgIH0gY2F0Y2ggKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7CiAvLyBUaGlzIGlzIHRlbXBvcmFyeS4gVGhpcyBuZWVkcyB0byBiZSBjaGFuZ2VkIHRvIFNFVkVSRSBhZnRlciBUUAotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5leGNfZ2V0X2Nvbm4iLCByZS5nZXRNZXNzYWdlKCkpOwotICAgIAkgICAgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAocmUuZ2V0TWVzc2FnZSgpKTsKLSAgICAJfQorICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5leGNfZ2V0X2Nvbm4iLCByZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAocmUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QuCi0gICAgICogCi0gICAgICogQHBhcmFtCXVzZXIJVXNlciBuYW1lIGZvciB0aGUgQ29ubmVjdGlvbi4KLSAgICAgKiBAcGFyYW0JcHdkCVBhc3N3b3JkIGZvciB0aGUgQ29ubmVjdGlvbi4KLSAgICAgKiBAcmV0dXJuCTxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYW4gZXJyb3IuICAgICAgCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgdXNlciAgICBVc2VyIG5hbWUgZm9yIHRoZSBDb25uZWN0aW9uLgorICAgICAqIEBwYXJhbSAgICBwd2QgICAgUGFzc3dvcmQgZm9yIHRoZSBDb25uZWN0aW9uLgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhbiBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgQ29ubmVjdGlvbiBnZXRDb25uZWN0aW9uKFN0cmluZyB1c2VyLCBTdHJpbmcgcHdkKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLSAgICAJdHJ5IHsKLSAgICAJICAgIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbmZvID0gbmV3IENvbm5lY3Rpb25SZXF1ZXN0SW5mbyAodXNlciwgcHdkKTsKLSAgICAJICAgIHJldHVybiAoQ29ubmVjdGlvbikgY20uYWxsb2NhdGVDb25uZWN0aW9uKG1jZixpbmZvKTsKLSAgICAJfSBjYXRjaCAoUmVzb3VyY2VFeGNlcHRpb24gcmUpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbmZvID0gbmV3IENvbm5lY3Rpb25SZXF1ZXN0SW5mbyAodXNlciwgcHdkKTsKKyAgICAgICAgICAgIHJldHVybiAoQ29ubmVjdGlvbikgY20uYWxsb2NhdGVDb25uZWN0aW9uKG1jZixpbmZvKTsKKyAgICAgICAgfSBjYXRjaCAoUmVzb3VyY2VFeGNlcHRpb24gcmUpIHsKIC8vIFRoaXMgaXMgdGVtcG9yYXJ5LiBUaGlzIG5lZWRzIHRvIGJlIGNoYW5nZWQgdG8gU0VWRVJFIGFmdGVyIFRQCi0JICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLmV4Y19nZXRfY29ubiIsIHJlLmdldE1lc3NhZ2UoKSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uIChyZS5nZXRNZXNzYWdlKCkpOwotICAgIAl9Ci0gICAgfSAgICAKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMuZXhjX2dldF9jb25uIiwgcmUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKHJlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIH0KKyAgICB9CiAKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIGFjdHVhbCBTUUxDb25uZWN0aW9uIGZyb20gdGhlIENvbm5lY3Rpb24gd3JhcHBlcgpAQCAtMTE0LDIyICsxMTQsMjIgQEAKICAgICAgKi8KICAgICBwdWJsaWMgQ29ubmVjdGlvbiBnZXRDb25uZWN0aW9uKENvbm5lY3Rpb24gY29uKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKIAotICAgICAgICBDb25uZWN0aW9uIGRyaXZlckNvbiA9IGNvbjsgCisgICAgICAgIENvbm5lY3Rpb24gZHJpdmVyQ29uID0gY29uOwogICAgICAgICBpZiAoY29uIGluc3RhbmNlb2YgY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25Ib2xkZXIpIHsKLSAgICAgICAgICAgZHJpdmVyQ29uID0gKChjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbkhvbGRlcikgY29uKS5nZXRDb25uZWN0aW9uKCk7IAotICAgICAgICB9IAorICAgICAgICAgICBkcml2ZXJDb24gPSAoKGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uSG9sZGVyKSBjb24pLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBkcml2ZXJDb247CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSBsb2dpbiB0aW1lb3V0CiAgICAgICoKICAgICAgKiBAcmV0dXJuIGxvZ2luIHRpbWVvdXQuCi0gICAgICogQHRocm93cwlTUUxFeGNlcHRpb24JSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCiAgICAgICovCiAgICAgcHVibGljIGludCBnZXRMb2dpblRpbWVvdXQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uewotICAgIAlyZXR1cm4JbG9naW5UaW1lb3V0OworICAgICAgICByZXR1cm4gICAgbG9naW5UaW1lb3V0OwogICAgIH0KIAogICAgIEBPdmVycmlkZQpAQCAtMTQwLDY3ICsxNDAsNjcgQEAKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGxvZ2luIHRpbWVvdXQKICAgICAgKgotICAgICAqIEBwYXJhbQlsb2dpblRpbWVvdXQJTG9naW4gdGltZW91dC4KLSAgICAgKiBAdGhyb3dzCVNRTEV4Y2VwdGlvbglJZiBhIGRhdGFiYXNlIGVycm9yIG9jY3Vycy4KKyAgICAgKiBAcGFyYW0gICAgbG9naW5UaW1lb3V0ICAgIExvZ2luIHRpbWVvdXQuCisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TG9naW5UaW1lb3V0KGludCBsb2dpblRpbWVvdXQpIHRocm93cyBTUUxFeGNlcHRpb257Ci0gICAgCXRoaXMubG9naW5UaW1lb3V0ID0gbG9naW5UaW1lb3V0OworICAgICAgICB0aGlzLmxvZ2luVGltZW91dCA9IGxvZ2luVGltZW91dDsKICAgICB9Ci0gICAgCi0gICAgLyoqIAorCisgICAgLyoqCiAgICAgICogR2V0IHRoZSBsb2d3cml0ZXIgb2JqZWN0LgogICAgICAqCiAgICAgICogQHJldHVybiA8Y29kZT4gUHJpbnRXcml0ZXIgPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cwlTUUxFeGNlcHRpb24JSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCiAgICAgICovCiAgICAgcHVibGljIFByaW50V3JpdGVyIGdldExvZ1dyaXRlcigpIHRocm93cyBTUUxFeGNlcHRpb257Ci0gICAgCXJldHVybglsb2dXcml0ZXI7CisgICAgICAgIHJldHVybiAgICBsb2dXcml0ZXI7CiAgICAgfQotICAgICAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgbG9nd3JpdGVyIG9uIHRoaXMgb2JqZWN0LgogICAgICAqCiAgICAgICogQHBhcmFtIDxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cwlTUUxFeGNlcHRpb24JSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TG9nV3JpdGVyKFByaW50V3JpdGVyIGxvZ1dyaXRlcikgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKLSAgICAJdGhpcy5sb2dXcml0ZXIgPSBsb2dXcml0ZXI7Ci0gICAgfSAgICAgICAgCi0gICAgICAgIAorICAgICAgICB0aGlzLmxvZ1dyaXRlciA9IGxvZ1dyaXRlcjsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIGRlc2NyaXB0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybglEZXNjcmlwdGlvbiBhYm91dCB0aGUgRGF0YVNvdXJjZS4KKyAgICAgKiBAcmV0dXJuICAgIERlc2NyaXB0aW9uIGFib3V0IHRoZSBEYXRhU291cmNlLgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSB7Ci0gICAgCXJldHVybiBkZXNjcmlwdGlvbjsKKyAgICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgZGVzY3JpcHRpb24uCiAgICAgICoKICAgICAgKiBAcGFyYW0gZGVzY3JpcHRpb24gRGVzY3JpcHRpb24gYWJvdXQgdGhlIERhdGFTb3VyY2UuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RGVzY3JpcHRpb24oU3RyaW5nIGRlc2NyaXB0aW9uKSB7Ci0gICAgCXRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKLSAgICB9ICAgIAotICAgIAorICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247CisgICAgfQorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSByZWZlcmVuY2UuCiAgICAgICoKICAgICAgKiBAcmV0dXJuIDxjb2RlPlJlZmVyZW5jZTwvY29kZT5vYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIFJlZmVyZW5jZSBnZXRSZWZlcmVuY2UoKSB7Ci0gICAgCXJldHVybiByZWZlcmVuY2U7CisgICAgICAgIHJldHVybiByZWZlcmVuY2U7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSByZWZlcmVuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcmVmZXJlbmNlIDxjb2RlPlJlZmVyZW5jZTwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICByZWZlcmVuY2UgPGNvZGU+UmVmZXJlbmNlPC9jb2RlPiBvYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0UmVmZXJlbmNlKFJlZmVyZW5jZSByZWZlcmVuY2UpIHsKLSAgICAJdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7CisgICAgICAgIHRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluLmphdmEKaW5kZXggNTc0ZWQ2Ni4uYmVjMGQ2YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbi5qYXZhCkBAIC0xOCwxMyArMTgsMTMgQEAKIAogcHVibGljIGludGVyZmFjZSBKZGJjU2V0dXBBZG1pbiB7CiAKLSAgICBwdWJsaWMgdm9pZCBzZXRUYWJsZU5hbWUoU3RyaW5nIGRiKTsgCisgICAgcHVibGljIHZvaWQgc2V0VGFibGVOYW1lKFN0cmluZyBkYik7CiAKICAgICBwdWJsaWMgU3RyaW5nIGdldFRhYmxlTmFtZSgpOwogCi0gICAgcHVibGljIHZvaWQgc2V0Sm5kaU5hbWUoU3RyaW5nIG5hbWUpOyAKKyAgICBwdWJsaWMgdm9pZCBzZXRKbmRpTmFtZShTdHJpbmcgbmFtZSk7CiAKLSAgICBwdWJsaWMgU3RyaW5nIGdldEpuZGlOYW1lKCk7IAorICAgIHB1YmxpYyBTdHJpbmcgZ2V0Sm5kaU5hbWUoKTsKIAogICAgIHB1YmxpYyB2b2lkIHNldFNjaGVtYU5hbWUoU3RyaW5nIG5hbWUpOwogCkBAIC0zNCw2ICszNCw2IEBACiAKICAgICBwdWJsaWMgSW50ZWdlciBnZXROb09mUm93cygpOwogCi0gICAgcHVibGljIGJvb2xlYW4gY2hlY2tTZXR1cCgpOyAKKyAgICBwdWJsaWMgYm9vbGVhbiBjaGVja1NldHVwKCk7CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluSW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW5JbXBsLmphdmEKaW5kZXggM2JkN2NhZC4uZmVjNzQ0MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW5JbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW5JbXBsLmphdmEKQEAgLTY1LDExICs2NSwxMSBAQAogCiBwcml2YXRlIHZvaWQgcHJpbnRIaWVyYXJjaHkoQ2xhc3NMb2FkZXIgY2wsIGludCBjbnQpewogd2hpbGUoY2wgIT0gbnVsbCkgewotCWZvcihpbnQgaSA9MDsgaSA8IGNudDsgaSsrKSAKLQkJU3lzdGVtLm91dC5wcmludCgiICIgKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlBBUkVOVCA6IiArIGNsKTsKLQljbCA9IGNsLmdldFBhcmVudCgpOwotCWNudCArPSAzOworICAgIGZvcihpbnQgaSA9MDsgaSA8IGNudDsgaSsrKQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCIgIiApOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUEFSRU5UIDoiICsgY2wpOworICAgIGNsID0gY2wuZ2V0UGFyZW50KCk7CisgICAgY250ICs9IDM7CiB9CiB9CiAKQEAgLTc4LDEwICs3OCwxMCBAQAogICAgICAgICBmb3IoaW50IGkgPTA7IGkgPCBjbnQ7IGkrKykKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCIgIiApOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBBUkVOVCBvZiBDbGFzc0xvYWRlciAxIDoiICsgY2wxKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlBBUkVOVCBvZiBDbGFzc0xvYWRlciAyIDoiICsgY2wyKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkVRVUFMUyA6ICIgKyAoY2wxID09IGNsMikpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUEFSRU5UIG9mIENsYXNzTG9hZGVyIDIgOiIgKyBjbDIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRVFVQUxTIDogIiArIChjbDEgPT0gY2wyKSk7CiAgICAgICAgIGNsMSA9IGNsMS5nZXRQYXJlbnQoKTsKLQljbDIgPSBjbDIuZ2V0UGFyZW50KCk7CisgICAgY2wyID0gY2wyLmdldFBhcmVudCgpOwogICAgICAgICBjbnQgKz0gMzsKIH0KIH0KQEAgLTkwLDkzICs5MCw5MyBAQAogICAgIHB1YmxpYyBib29sZWFuIGNoZWNrU2V0dXAoKXsKIAogICAgICAgICBpZiAoam5kaU5hbWU9PSBudWxsIHx8IGpuZGlOYW1lLnRyaW0oKS5lcXVhbHMoIiIpKSB7Ci0JICAgcmV0dXJuIGZhbHNlOwotCX0KKyAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgICAgIGlmICh0YWJsZU5hbWU9PSBudWxsIHx8IHRhYmxlTmFtZS50cmltKCkuZXF1YWxzKCIiKSkgewotCSAgIHJldHVybiBmYWxzZTsKLQl9CisgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAogICAgICAgICBDb25uZWN0aW9uIGNvbiA9IG51bGw7Ci0JU3RhdGVtZW50IHMgPSBudWxsOwotCVJlc3VsdFNldCBycyA9IG51bGw7Ci0JYm9vbGVhbiBiID0gZmFsc2U7CisgICAgU3RhdGVtZW50IHMgPSBudWxsOworICAgIFJlc3VsdFNldCBycyA9IG51bGw7CisgICAgYm9vbGVhbiBiID0gZmFsc2U7CiAgICAgICAgIHRyeSB7Ci0JICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JLy9kZWJ1ZwotCUNsYXNzIGNseiA9IERhdGFTb3VyY2UuY2xhc3M7CisgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgLy9kZWJ1ZworICAgIENsYXNzIGNseiA9IERhdGFTb3VyY2UuY2xhc3M7CiAvKgotCWlmKGNsei5nZXRDbGFzc0xvYWRlcigpICE9IG51bGwpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJEYXRhU291cmNlJ3MgY2xhc3hzIDogIiArICBjbHouZ2V0TmFtZSgpICsgICIgY2xhc3Nsb2FkZXIgIiArIGNsei5nZXRDbGFzc0xvYWRlcigpKTsKLQkJcHJpbnRIaWVyYXJjaHkoY2x6LmdldENsYXNzTG9hZGVyKCkuZ2V0UGFyZW50KCksIDgpOwotCX0KLQlDbGFzcyBjbHMgPSBpYy5sb29rdXAoam5kaU5hbWUpLmdldENsYXNzKCk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJMb29rZWQgdXAgY2xhc3MncyA6ICIgKyBjbHMuZ2V0UGFja2FnZSgpICsgIjoiICsgY2xzLmdldE5hbWUoKSAgKyAiIGNsYXNzbG9hZGVyICIgICsgY2xzLmdldENsYXNzTG9hZGVyKCkpOwotCXByaW50SGllcmFyY2h5KGNscy5nZXRDbGFzc0xvYWRlcigpLmdldFBhcmVudCgpLCA4KTsKKyAgICBpZihjbHouZ2V0Q2xhc3NMb2FkZXIoKSAhPSBudWxsKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGF0YVNvdXJjZSdzIGNsYXN4cyA6ICIgKyAgY2x6LmdldE5hbWUoKSArICAiIGNsYXNzbG9hZGVyICIgKyBjbHouZ2V0Q2xhc3NMb2FkZXIoKSk7CisgICAgICAgIHByaW50SGllcmFyY2h5KGNsei5nZXRDbGFzc0xvYWRlcigpLmdldFBhcmVudCgpLCA4KTsKKyAgICB9CisgICAgQ2xhc3MgY2xzID0gaWMubG9va3VwKGpuZGlOYW1lKS5nZXRDbGFzcygpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2VkIHVwIGNsYXNzJ3MgOiAiICsgY2xzLmdldFBhY2thZ2UoKSArICI6IiArIGNscy5nZXROYW1lKCkgICsgIiBjbGFzc2xvYWRlciAiICArIGNscy5nZXRDbGFzc0xvYWRlcigpKTsKKyAgICBwcmludEhpZXJhcmNoeShjbHMuZ2V0Q2xhc3NMb2FkZXIoKS5nZXRQYXJlbnQoKSwgOCk7CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkNsYXNzbG9hZGVycyBlcXVhbCA/ICIgKyAgKGNsei5nZXRDbGFzc0xvYWRlcigpID09IGNscy5nZXRDbGFzc0xvYWRlcigpKSk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCImKiYqJiomKiBDb21wYXJpbmcgSGllcmFjaHkgRGF0YVNvdXJjZSB2cyBsb29rZWR1cCIpOwotCWlmKGNsei5nZXRDbGFzc0xvYWRlcigpICE9IG51bGwpIHsKLQkJY29tcGFyZUhpZXJhcmNoeShjbHouZ2V0Q2xhc3NMb2FkZXIoKSwgY2xzLmdldENsYXNzTG9hZGVyKCksIDgpOwotCX0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNsYXNzbG9hZGVycyBlcXVhbCA/ICIgKyAgKGNsei5nZXRDbGFzc0xvYWRlcigpID09IGNscy5nZXRDbGFzc0xvYWRlcigpKSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCImKiYqJiomKiBDb21wYXJpbmcgSGllcmFjaHkgRGF0YVNvdXJjZSB2cyBsb29rZWR1cCIpOworICAgIGlmKGNsei5nZXRDbGFzc0xvYWRlcigpICE9IG51bGwpIHsKKyAgICAgICAgY29tcGFyZUhpZXJhcmNoeShjbHouZ2V0Q2xhc3NMb2FkZXIoKSwgY2xzLmdldENsYXNzTG9hZGVyKCksIDgpOworICAgIH0KIAotCVN5c3RlbS5vdXQucHJpbnRsbigiQmVmb3JlIGxvb2t1cCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmVmb3JlIGxvb2t1cCIpOwogKi8KLQlPYmplY3QgbyA9IGljLmxvb2t1cChqbmRpTmFtZSk7Ci0vLwlTeXN0ZW0ub3V0LnByaW50bG4oImFmdGVyIGxvb2t1cCBsb29rdXAiKTsKKyAgICBPYmplY3QgbyA9IGljLmxvb2t1cChqbmRpTmFtZSk7CisvLyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImFmdGVyIGxvb2t1cCBsb29rdXAiKTsKIAotCSAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpbyA7CisgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSlvIDsKIC8qCi0JU3lzdGVtLm91dC5wcmludGxuKCJhZnRlciBjYXN0Iik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tIFRyeWluZyBvdXIgU3R1ZmYgISEhIik7Ci0JdHJ5IHsKLQkJQ2xhc3MgbzEgPSAoQ2xhc3MuZm9yTmFtZSgiY29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2UiKSk7Ci0JCUNsYXNzTG9hZGVyIGNsMSA9IG8xLmdldENsYXNzTG9hZGVyKCk7Ci0JCUNsYXNzTG9hZGVyIGNsMiA9IERhdGFTb3VyY2UuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJDbDEgPT0gQ2wyIiArIChjbDEgPT0gY2wyKSk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQ2xhc3NlcyBlcXVhbCIgKyAoRGF0YVNvdXJjZS5jbGFzcyA9PSBvMSkpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQlleC5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJhZnRlciBjYXN0Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tIFRyeWluZyBvdXIgU3R1ZmYgISEhIik7CisgICAgdHJ5IHsKKyAgICAgICAgQ2xhc3MgbzEgPSAoQ2xhc3MuZm9yTmFtZSgiY29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2UiKSk7CisgICAgICAgIENsYXNzTG9hZGVyIGNsMSA9IG8xLmdldENsYXNzTG9hZGVyKCk7CisgICAgICAgIENsYXNzTG9hZGVyIGNsMiA9IERhdGFTb3VyY2UuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDbDEgPT0gQ2wyIiArIChjbDEgPT0gY2wyKSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2xhc3NlcyBlcXVhbCIgKyAoRGF0YVNvdXJjZS5jbGFzcyA9PSBvMSkpOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CiAqLwogICAgICAgICAgICAgY29uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCSAgICBTdHJpbmcgZnVsbFRhYmxlTmFtZSA9IHRhYmxlTmFtZTsKLQkgICAgaWYgKHNjaGVtYU5hbWUgIT0gbnVsbCAmJiAoIShzY2hlbWFOYW1lLnRyaW0oKS5lcXVhbHMoIiIpKSkpIHsKLQkgICAgICAgIGZ1bGxUYWJsZU5hbWUgPSBzY2hlbWFOYW1lLnRyaW0oKSArICIuIiArIGZ1bGxUYWJsZU5hbWU7Ci0JICAgIH0KLQkgICAgU3RyaW5nIHFyeSA9ICJzZWxlY3QgKiBmcm9tICIgKyBmdWxsVGFibGVOYW1lOyAKKyAgICAgICAgU3RyaW5nIGZ1bGxUYWJsZU5hbWUgPSB0YWJsZU5hbWU7CisgICAgICAgIGlmIChzY2hlbWFOYW1lICE9IG51bGwgJiYgKCEoc2NoZW1hTmFtZS50cmltKCkuZXF1YWxzKCIiKSkpKSB7CisgICAgICAgICAgICBmdWxsVGFibGVOYW1lID0gc2NoZW1hTmFtZS50cmltKCkgKyAiLiIgKyBmdWxsVGFibGVOYW1lOworICAgICAgICB9CisgICAgICAgIFN0cmluZyBxcnkgPSAic2VsZWN0ICogZnJvbSAiICsgZnVsbFRhYmxlTmFtZTsKIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4ZWN1dGluZyBxdWVyeSA6IiArIHFyeSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhlY3V0aW5nIHF1ZXJ5IDoiICsgcXJ5KTsKIAotCSAgICBzID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOwotCSAgICBycyA9IHMuZXhlY3V0ZVF1ZXJ5KHFyeSk7IAorICAgICAgICBzID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICBycyA9IHMuZXhlY3V0ZVF1ZXJ5KHFyeSk7CiAKICAgICAgICAgICAgIGludCBpID0gMDsKLQkgICAgaWYgKHJzLm5leHQoKSkgewotCSAgICAgICAgaSsrOwotCSAgICB9CisgICAgICAgIGlmIChycy5uZXh0KCkpIHsKKyAgICAgICAgICAgIGkrKzsKKyAgICAgICAgfQogCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk5vIG9mIHJvd3MgZm91bmQ6IiArIGkpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJObyBvZiByb3dzIGV4cGVjdGVkOiIgKyBub09mUm93cyk7CiAKLQkgICAgaWYgKGkgPT0gbm9PZlJvd3MuaW50VmFsdWUoKSkgewotCSAgICAgICBiID0gdHJ1ZTsKLQkgICAgfSBlbHNlIHsKLQkgICAgICAgYiA9IGZhbHNlOwotCSAgICB9Ci0JfSBjYXRjaChFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICBiID0gZmFsc2U7Ci0JfSBmaW5hbGx5IHsKLQkgICAgdHJ5IHsKLQkgICAgICAgIGlmIChycyAhPSBudWxsKSBycy5jbG9zZSgpOwotCSAgICAgICAgaWYgKHMgIT0gbnVsbCkgcy5jbG9zZSgpOwotCSAgICAgICAgaWYgKGNvbiAhPSBudWxsKSBjb24uY2xvc2UoKTsKKyAgICAgICAgaWYgKGkgPT0gbm9PZlJvd3MuaW50VmFsdWUoKSkgeworICAgICAgICAgICBiID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgYiA9IGZhbHNlOworICAgICAgICB9CisgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICBiID0gZmFsc2U7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGlmIChycyAhPSBudWxsKSBycy5jbG9zZSgpOworICAgICAgICAgICAgaWYgKHMgIT0gbnVsbCkgcy5jbG9zZSgpOworICAgICAgICAgICAgaWYgKGNvbiAhPSBudWxsKSBjb24uY2xvc2UoKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIH0KLQl9Ci0JU3lzdGVtLm91dC5wcmludGxuKCJSZXR1cm5pbmcgc2V0dXAgOiIgK2IpOwotCXJldHVybiBiOworICAgICAgICB9CisgICAgfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmV0dXJuaW5nIHNldHVwIDoiICtiKTsKKyAgICByZXR1cm4gYjsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0xvY2FsVHJhbnNhY3Rpb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0xvY2FsVHJhbnNhY3Rpb24uamF2YQppbmRleCA4ZWJlMDU3Li5jNTRhMjE2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Mb2NhbFRyYW5zYWN0aW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTG9jYWxUcmFuc2FjdGlvbi5qYXZhCkBAIC0yMyw0NSArMjMsNDUgQEAKIC8qKgogICogPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gaW1wbGVtZW50YXRpb24gZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wOC8wMwotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDgvMDMKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIHB1YmxpYyBjbGFzcyBMb2NhbFRyYW5zYWN0aW9uIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTG9jYWxUcmFuc2FjdGlvbiB7Ci0gICAgCisKICAgICBwcml2YXRlIE1hbmFnZWRDb25uZWN0aW9uIG1jOwotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0b3IgZm9yIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+LgotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdGhhdCByZXR1cm5zCi0gICAgICoJCQl0aGlzIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IG9iamVjdCBhcwotICAgICAqCQkJYSByZXN1bHQgb2YgPGNvZGU+Z2V0TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHRoYXQgcmV0dXJucworICAgICAqICAgICAgICAgICAgdGhpcyA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBvYmplY3QgYXMKKyAgICAgKiAgICAgICAgICAgIGEgcmVzdWx0IG9mIDxjb2RlPmdldExvY2FsVHJhbnNhY3Rpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIExvY2FsVHJhbnNhY3Rpb24oTWFuYWdlZENvbm5lY3Rpb24gbWMpIHsKICAgICAgICAgdGhpcy5tYyA9IG1jOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEJlZ2luIGEgbG9jYWwgdHJhbnNhY3Rpb24uCiAgICAgICoKLSAgICAgKiBAdGhyb3dzCUxvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2hhbmdpbmcKLSAgICAgKgkJCQkJCXRoZSBhdXRvY29tbWl0IG1vZGUgb2YgdGhlIHBoeXNpY2FsCi0gICAgICoJCQkJCQljb25uZWN0aW9uCisgICAgICogQHRocm93cyAgICBMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNoYW5naW5nCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICB0aGUgYXV0b2NvbW1pdCBtb2RlIG9mIHRoZSBwaHlzaWNhbAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGJlZ2luKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgLy9HSkNJTlQKLQltYy50cmFuc2FjdGlvblN0YXJ0ZWQoKTsKKyAgICBtYy50cmFuc2FjdGlvblN0YXJ0ZWQoKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKS5zZXRBdXRvQ29tbWl0KGZhbHNlKTsKICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IExvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29tbWl0IGEgbG9jYWwgdHJhbnNhY3Rpb24uCi0gICAgICogQHRocm93cwlMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNoYW5naW5nCi0gICAgICoJCQkJCQl0aGUgYXV0b2NvbW1pdCBtb2RlIG9mIHRoZSBwaHlzaWNhbAotICAgICAqCQkJCQkJY29ubmVjdGlvbiBvciBjb21taXR0aW5nIHRoZSB0cmFuc2FjdGlvbgorICAgICAqIEB0aHJvd3MgICAgTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjaGFuZ2luZworICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGF1dG9jb21taXQgbW9kZSBvZiB0aGUgcGh5c2ljYWwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gb3IgY29tbWl0dGluZyB0aGUgdHJhbnNhY3Rpb24KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjb21taXQoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBFeGNlcHRpb24gZSA9IG51bGw7CkBAIC03MiwxNSArNzIsMTUgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgICAgICAvL0dKQ0lOVAotCW1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CisgICAgbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSb2xsYmFjayBhIGxvY2FsIHRyYW5zYWN0aW9uLgotICAgICAqIAotICAgICAqIEB0aHJvd3MJTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjaGFuZ2luZwotICAgICAqCQkJCQkJdGhlIGF1dG9jb21taXQgbW9kZSBvZiB0aGUgcGh5c2ljYWwKLSAgICAgKgkJCQkJCWNvbm5lY3Rpb24gb3Igcm9sbGluZyBiYWNrIHRoZSB0cmFuc2FjdGlvbgorICAgICAqCisgICAgICogQHRocm93cyAgICBMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNoYW5naW5nCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICB0aGUgYXV0b2NvbW1pdCBtb2RlIG9mIHRoZSBwaHlzaWNhbAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbiBvciByb2xsaW5nIGJhY2sgdGhlIHRyYW5zYWN0aW9uCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcm9sbGJhY2soKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICB0cnkgewpAQCAtOTAsNyArOTAsNyBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IExvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgICAgIC8vR0pDSU5UCi0JbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKKyAgICBtYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uLmphdmEKaW5kZXggMzBmNDYwYS4uMmRhZDU5YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbi5qYXZhCkBAIC00MSw4ICs0MSw4IEBACiAvKioKICAqIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzIyCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8yMgorICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogcHVibGljIGNsYXNzIE1hbmFnZWRDb25uZWN0aW9uIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gewogCkBAIC01Miw3ICs1Miw3IEBACiAKICAgICBwcml2YXRlIGJvb2xlYW4gaXNEZXN0cm95ZWQgPSBmYWxzZTsKICAgICBwcml2YXRlIGJvb2xlYW4gaXNVc2FibGUgPSB0cnVlOwotICAgIAorCiAgICAgcHJpdmF0ZSBpbnQgY29ubmVjdGlvblR5cGUgPSBJU05PVEFQT09MRURDT05ORUNUSU9OOwogICAgIHByaXZhdGUgUG9vbGVkQ29ubmVjdGlvbiBwYyA9IG51bGw7CiAgICAgcHJpdmF0ZSBqYXZhLnNxbC5Db25uZWN0aW9uIGFjdHVhbENvbm5lY3Rpb24gPSBudWxsOwpAQCAtNjIsNyArNjIsNyBAQAogICAgIHByaXZhdGUgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG1jZiA9IG51bGw7CiAgICAgcHJpdmF0ZSBYQVJlc291cmNlIHhhciA9IG51bGw7CiAgICAgcHVibGljIENvbm5lY3Rpb25Ib2xkZXIgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZTsKLSAgICAKKwogICAgIC8vR0pDSU5UCiAgICAgcHJpdmF0ZSBpbnQgaXNvbGF0aW9uTGV2ZWxXaGVuQ2xlYW5lZDsKICAgICBwcml2YXRlIGJvb2xlYW4gaXNDbGVhbiA9IGZhbHNlOwpAQCAtNzcsNzEgKzc3LDcxIEBACiAgICAgc3RhdGljIHsKICAgICAgICAgX2xvZ2dlciA9IExvZ2dlci5nZXRBbm9ueW1vdXNMb2dnZXIoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+LiBUaGUgcG9vbGVkQ29ubiBwYXJhbWV0ZXIgaXMgZXhwZWN0ZWQKLSAgICAgKiB0byBiZSBudWxsIGFuZCBzcWxDb25uIHBhcmFtZXRlciBpcyB0aGUgYWN0dWFsIGNvbm5lY3Rpb24gaW4gY2FzZSB3aGVyZSAKLSAgICAgKiB0aGUgYWN0dWFsIGNvbm5lY3Rpb24gaXMgZ290IGZyb20gYSBub24gcG9vbGVkIGRhdGFzb3VyY2Ugb2JqZWN0LiBUaGUgCisgICAgICogdG8gYmUgbnVsbCBhbmQgc3FsQ29ubiBwYXJhbWV0ZXIgaXMgdGhlIGFjdHVhbCBjb25uZWN0aW9uIGluIGNhc2Ugd2hlcmUKKyAgICAgKiB0aGUgYWN0dWFsIGNvbm5lY3Rpb24gaXMgZ290IGZyb20gYSBub24gcG9vbGVkIGRhdGFzb3VyY2Ugb2JqZWN0LiBUaGUKICAgICAgKiBwb29sZWRDb25uIHBhcmFtZXRlciBpcyBleHBlY3RlZCB0byBiZSBub24gbnVsbCBhbmQgc3FsQ29ubiBwYXJhbWV0ZXIKICAgICAgKiBpcyBleHBlY3RlZCB0byBiZSBudWxsIGluIHRoZSBjYXNlIHdoZXJlIHRoZSBkYXRhc291cmNlIG9iamVjdCBpcyBhCiAgICAgICogY29ubmVjdGlvbiBwb29sIGRhdGFzb3VyY2Ugb3IgYW4geGEgZGF0YXNvdXJjZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlwb29sZWRDb25uCTxjb2RlPlBvb2xlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpbiBjYXNlIHRoZSAKLSAgICAgKgkJCQlwaHlzaWNhbCBjb25uZWN0aW9uIGlzIHRvIGJlIG9idGFpbmVkIGZyb20gYSBwb29sZWQKLSAgICAgKgkJCQk8Y29kZT5EYXRhU291cmNlPC9jb2RlPjsgbnVsbCBvdGhlcndpc2UKLSAgICAgKiBAcGFyYW0Jc3FsQ29ubgk8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaW4gY2FzZSB0aGUgcGh5c2ljYWwKLSAgICAgKgkJCWNvbm5lY3Rpb24gaXMgdG8gYmUgb2J0YWluZWQgZnJvbSBhIG5vbiBwb29sZWQgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT47Ci0gICAgICoJCQludWxsIG90aGVyd2lzZQotICAgICAqIEBwYXJhbQlwYXNzd2RDcmVkCW9iamVjdCBjb25hdGluaW5nIHRoZQotICAgICAqCQkJCXVzZXIgYW5kIHBhc3N3b3JkIGZvciBhbGxvY2F0aW5nIHRoZSBjb25uZWN0aW9uCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QKLSAgICAgKgkJCQkJdGhhdCBjcmVhdGVkIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdAotICAgICAqCQkJCQlpcyBub3QgdGhlIHNhbWUgYXMgcmV0dXJuZWQgYnkgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgotICAgICAqCQkJCQlvYmplY3QgcGFzc2VkCisgICAgICogQHBhcmFtICAgIHBvb2xlZENvbm4gICAgPGNvZGU+UG9vbGVkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGluIGNhc2UgdGhlCisgICAgICogICAgICAgICAgICAgICAgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyB0byBiZSBvYnRhaW5lZCBmcm9tIGEgcG9vbGVkCisgICAgICogICAgICAgICAgICAgICAgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT47IG51bGwgb3RoZXJ3aXNlCisgICAgICogQHBhcmFtICAgIHNxbENvbm4gICAgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGluIGNhc2UgdGhlIHBoeXNpY2FsCisgICAgICogICAgICAgICAgICBjb25uZWN0aW9uIGlzIHRvIGJlIG9idGFpbmVkIGZyb20gYSBub24gcG9vbGVkIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+OworICAgICAqICAgICAgICAgICAgbnVsbCBvdGhlcndpc2UKKyAgICAgKiBAcGFyYW0gICAgcGFzc3dkQ3JlZCAgICBvYmplY3QgY29uYXRpbmluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICB1c2VyIGFuZCBwYXNzd29yZCBmb3IgYWxsb2NhdGluZyB0aGUgY29ubmVjdGlvbgorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0CisgICAgICogICAgICAgICAgICAgICAgICAgIHRoYXQgY3JlYXRlZCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgaXMgbm90IHRoZSBzYW1lIGFzIHJldHVybmVkIGJ5IDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgb2JqZWN0IHBhc3NlZAogICAgICAqLwotICAgIHB1YmxpYyBNYW5hZ2VkQ29ubmVjdGlvbihQb29sZWRDb25uZWN0aW9uIHBvb2xlZENvbm4sIGphdmEuc3FsLkNvbm5lY3Rpb24gc3FsQ29ubiwgCisgICAgcHVibGljIE1hbmFnZWRDb25uZWN0aW9uKFBvb2xlZENvbm5lY3Rpb24gcG9vbGVkQ29ubiwgamF2YS5zcWwuQ29ubmVjdGlvbiBzcWxDb25uLAogICAgICAgICBQYXNzd29yZENyZWRlbnRpYWwgcGFzc3dkQ3JlZCwgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG1jZikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYocG9vbGVkQ29ubiA9PSBudWxsICYmIHNxbENvbm4gPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJDb25uZWN0aW9uIG9iamVjdCBjYW5ub3QgYmUgbnVsbCIpOwogICAgICAgICB9CiAKLQlpZiAoY29ubmVjdGlvblR5cGUgPT0gSVNOT1RBUE9PTEVEQ09OTkVDVElPTiApIHsKLQkgICAgYWN0dWFsQ29ubmVjdGlvbiA9IHNxbENvbm47Ci0JfQorICAgIGlmIChjb25uZWN0aW9uVHlwZSA9PSBJU05PVEFQT09MRURDT05ORUNUSU9OICkgeworICAgICAgICBhY3R1YWxDb25uZWN0aW9uID0gc3FsQ29ubjsKKyAgICB9CiAKICAgICAgICAgcGMgPSBwb29sZWRDb25uOwogICAgICAgICBjb25uZWN0aW9uSGFuZGxlcyA9IG5ldyBIYXNodGFibGUoKTsKICAgICAgICAgcGFzc3dkQ3JlZGVudGlhbCA9IHBhc3N3ZENyZWQ7CiAgICAgICAgIHRoaXMubWNmID0gbWNmOwotICAgICAgICBpZihwYXNzd2RDcmVkZW50aWFsICE9IG51bGwgJiYgIAorICAgICAgICBpZihwYXNzd2RDcmVkZW50aWFsICE9IG51bGwgJiYKICAgICAgICAgICAgIHRoaXMubWNmLmVxdWFscyhwYXNzd2RDcmVkZW50aWFsLmdldE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSgpKSA9PSBmYWxzZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IHRoYXQgaGFzIGNyZWF0ZWQgdGhpcyAiICsgCisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgdGhhdCBoYXMgY3JlYXRlZCB0aGlzICIgKwogICAgICAgICAgICAgICAgICJNYW5hZ2VkQ29ubmVjdGlvbiBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSByZXR1cm5lZCBieSIgKwogICAgICAgICAgICAgICAgICAgICAiIHRoZSBQYXNzd29yZENyZWRlbnRpYWwgZm9yIHRoaXMgTWFuYWdlZENvbm5lY3Rpb24iKTsKICAgICAgICAgfQogICAgICAgICBsb2dXcml0ZXIgPSBtY2YuZ2V0TG9nV3JpdGVyKCk7CiAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOwotCWNlID0gbmV3IENvbm5lY3Rpb25FdmVudCh0aGlzLCBDb25uZWN0aW9uRXZlbnQuQ09OTkVDVElPTl9DTE9TRUQpOworICAgIGNlID0gbmV3IENvbm5lY3Rpb25FdmVudCh0aGlzLCBDb25uZWN0aW9uRXZlbnQuQ09OTkVDVElPTl9DTE9TRUQpOwogICAgIH0KIAogICAgIC8qKgogICAgICAqIEFkZHMgYSBjb25uZWN0aW9uIGV2ZW50IGxpc3RlbmVyIHRvIHRoZSBNYW5hZ2VkQ29ubmVjdGlvbiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlsaXN0ZW5lcgk8Y29kZT5Db25uZWN0aW9uRXZlbnRMaXN0ZW5lcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbGlzdGVuZXIgICAgPGNvZGU+Q29ubmVjdGlvbkV2ZW50TGlzdGVuZXI8L2NvZGU+CiAgICAgICogQHNlZSA8Y29kZT5yZW1vdmVDb25uZWN0aW9uRXZlbnRMaXN0ZW5lcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBhZGRDb25uZWN0aW9uRXZlbnRMaXN0ZW5lcihDb25uZWN0aW9uRXZlbnRMaXN0ZW5lciBsaXN0ZW5lcikgewotCXRoaXMubGlzdGVuZXIgPSBsaXN0ZW5lcjsKKyAgICB0aGlzLmxpc3RlbmVyID0gbGlzdGVuZXI7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogVXNlZCBieSB0aGUgY29udGFpbmVyIHRvIGNoYW5nZSB0aGUgYXNzb2NpYXRpb24gb2YgYW4gYXBwbGljYXRpb24tbGV2ZWwgCisgICAgICogVXNlZCBieSB0aGUgY29udGFpbmVyIHRvIGNoYW5nZSB0aGUgYXNzb2NpYXRpb24gb2YgYW4gYXBwbGljYXRpb24tbGV2ZWwKICAgICAgKiBjb25uZWN0aW9uIGhhbmRsZSB3aXRoIGEgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCWNvbm5lY3Rpb24JPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdG8gYmUgYXNzb2NpYXRlZCB3aXRoCi0gICAgICoJCQkJdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vIG1vcmUKLSAgICAgKgkJCQkJdmFsaWQgb3IgdGhlIGNvbm5lY3Rpb24gaGFuZGxlIHBhc3NlZCBpcyBudWxsCisgICAgICogQHBhcmFtICAgIGNvbm5lY3Rpb24gICAgPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdG8gYmUgYXNzb2NpYXRlZCB3aXRoCisgICAgICogICAgICAgICAgICAgICAgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vIG1vcmUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgdmFsaWQgb3IgdGhlIGNvbm5lY3Rpb24gaGFuZGxlIHBhc3NlZCBpcyBudWxsCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgYXNzb2NpYXRlQ29ubmVjdGlvbihPYmplY3QgY29ubmVjdGlvbikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTE1MiwxMSArMTUyLDExIEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkNvbm5lY3Rpb24gaGFuZGxlIGNhbm5vdCBiZSBudWxsIik7CiAgICAgICAgIH0KICAgICAgICAgQ29ubmVjdGlvbkhvbGRlciBjaCA9IChDb25uZWN0aW9uSG9sZGVyKSBjb25uZWN0aW9uOwotICAgICAgICAKKwogICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWMgPSAoY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uKWNoLmdldE1hbmFnZWRDb25uZWN0aW9uKCk7Ci0JbWMuYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7Ci0JaXNDbGVhbiA9IGZhbHNlOwotICAgICAgICAKKyAgICBtYy5hY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKKyAgICBpc0NsZWFuID0gZmFsc2U7CisKICAgICAgICAgY2guYXNzb2NpYXRlQ29ubmVjdGlvbihhY3R1YWxDb25uZWN0aW9uLCB0aGlzKTsKICAgICAgICAgLyoqCiAgICAgICAgICAqIFRoZSBleHBlY3RhdGlvbiBmcm9tIHRoZSBhYm92ZSBtZXRob2QgaXMgdGhhdCB0aGUgY29ubmVjdGlvbiBob2xkZXIKQEAgLTE2NSwzNCArMTY1LDM0IEBACiAgICAgICAgICAqIHRvIHRoZSBNYW5hZ2VkQ29ubmVjdGlvbiBpbnN0YW5jZSB3aXRoIHRoaXMgTWFuYWdlZENvbm5lY3Rpb24gaW5zdGFuY2UuCiAgICAgICAgICAqIEFueSBwcmV2aW91cyBzdGF0ZW1lbnRzIGFuZCByZXN1bHQgc2V0cyBhbHNvIG5lZWQgdG8gYmUgcmVtb3ZlZC4KICAgICAgICAgICovCi0gICAgICAgICAKKwogICAgICAgICAgaWYoYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSAhPSBudWxsKSB7CiAgICAgICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlLnNldEFjdGl2ZShmYWxzZSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgY2guc2V0QWN0aXZlKHRydWUpOwotICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gY2g7IAorICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gY2g7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogQXBwbGljYXRpb24gc2VydmVyIGNhbGxzIHRoaXMgbWV0aG9kIHRvIGZvcmNlIGFueSBjbGVhbnVwIG9uIHRoZSAKKyAgICAgKiBBcHBsaWNhdGlvbiBzZXJ2ZXIgY2FsbHMgdGhpcyBtZXRob2QgdG8gZm9yY2UgYW55IGNsZWFudXAgb24gdGhlCiAgICAgICogPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLiBUaGlzIG1ldGhvZCBjYWxscyB0aGUgaW52YWxpZGF0ZQogICAgICAqIG1ldGhvZCBvbiBhbGwgQ29ubmVjdGlvbkhhbmRsZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+LgotICAgICAqIAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm8gbW9yZSB2YWxpZAorICAgICAqCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBubyBtb3JlIHZhbGlkCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgY2xlYW51cCgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGNsZWFudXAiKTsKICAgICAgICAgfQogICAgICAgICBjaGVja0lmVmFsaWQoKTsKLSAgICAgICAgCisKICAgICAgICAgLyoqCiAgICAgICAgICAqIG1heSBuZWVkIHRvIHNldCB0aGUgYXV0b2NvbW1pdCB0byB0cnVlIGZvciB0aGUgbm9uLXBvb2xlZCBjYXNlLgogICAgICAgICAgKi8KICAgICAgICAgLy9HSkNJTlQKLQkvL2lmIChhY3R1YWxDb25uZWN0aW9uICE9IG51bGwpIHsKLQlpZiAoY29ubmVjdGlvblR5cGUgPT0gSVNOT1RBUE9PTEVEQ09OTkVDVElPTiApIHsKKyAgICAvL2lmIChhY3R1YWxDb25uZWN0aW9uICE9IG51bGwpIHsKKyAgICBpZiAoY29ubmVjdGlvblR5cGUgPT0gSVNOT1RBUE9PTEVEQ09OTkVDVElPTiApIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGlzb2xhdGlvbkxldmVsV2hlbkNsZWFuZWQgPSBhY3R1YWxDb25uZWN0aW9uLmdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCk7CiAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKQEAgLTIwMSwxNyArMjAxLDE3IEBACiAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpc0NsZWFuID0gdHJ1ZTsKLSAgICAgICAgCisKICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGhpcyBtZXRob2QgcmVtb3ZlcyBhbGwgdGhlIGNvbm5lY3Rpb24gaGFuZGxlcyBmcm9tIHRoZSB0YWJsZQogICAgICAqIG9mIGNvbm5lY3Rpb24gaGFuZGxlcyBhbmQgaW52YWxpZGF0ZXMgYWxsIG9mIHRoZW0gc28gdGhhdCBhbnkKICAgICAgKiBvcGVyYXRpb24gb24gdGhvc2UgY29ubmVjdGlvbiBoYW5kbGVzIHRocm93cyBhbiBleGNlcHRpb24uCiAgICAgICoKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGEgcHJvYmxlbSBpbiByZXRyaWV2aW5nCi0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAl0aGUgY29ubmVjdGlvbiBoYW5kbGVzCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhIHByb2JsZW0gaW4gcmV0cmlldmluZworICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNvbm5lY3Rpb24gaGFuZGxlcwogICAgICAqLwogICAgIHByaXZhdGUgdm9pZCBpbnZhbGlkYXRlQWxsQ29ubmVjdGlvbkhhbmRsZXMoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBTZXQgaGFuZGxlcyA9IGNvbm5lY3Rpb25IYW5kbGVzLmtleVNldCgpOwpAQCAtMjI2LDIyICsyMjYsMjIgQEAKICAgICAgICAgfQogICAgICAgICBjb25uZWN0aW9uSGFuZGxlcy5jbGVhcigpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIERlc3Ryb3lzIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIHRvIHRoZSB1bmRlcmx5aW5nIHJlc291cmNlIG1hbmFnZXIuCi0gICAgICogCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjbG9zaW5nIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uCisgICAgICoKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNsb3NpbmcgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGRlc3Ryb3kiKTsKICAgICAgICAgfQotCS8vR0pDSU5UCi0JaWYoaXNEZXN0cm95ZWQgPT0gdHJ1ZSkgewotCSAgICByZXR1cm47CQotCX0KKyAgICAvL0dKQ0lOVAorICAgIGlmKGlzRGVzdHJveWVkID09IHRydWUpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotCWFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOworICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgaWYoY29ubmVjdGlvblR5cGUgPT0gSVNYQUNPTk5FQ1RJT04gfHwgY29ubmVjdGlvblR5cGUgPT0gSVNQT09MRURDT05ORUNUSU9OKSB7CiAgICAgICAgICAgICAgICAgcGMuY2xvc2UoKTsKQEAgLTI1NSwyOCArMjU1LDI4IEBACiAgICAgICAgICAgICBpc0Rlc3Ryb3llZCA9IHRydWU7CiAgICAgICAgICAgICBwYXNzd2RDcmVkZW50aWFsID0gbnVsbDsKICAgICAgICAgICAgIGNvbm5lY3Rpb25IYW5kbGVzID0gbnVsbDsKLSAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGZvbGxvd2luZyBleGNlcHRpb24gaGFzIG9jY3VyZWQgZHVyaW5nIGRlc3Ryb3k6ICIgCisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBmb2xsb3dpbmcgZXhjZXB0aW9uIGhhcyBvY2N1cmVkIGR1cmluZyBkZXN0cm95OiAiCiAgICAgICAgICAgICAgICAgKyBzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICAgICAgaXNEZXN0cm95ZWQgPSB0cnVlOwogICAgICAgICBwYXNzd2RDcmVkZW50aWFsID0gbnVsbDsKICAgICAgICAgY29ubmVjdGlvbkhhbmRsZXMgPSBudWxsOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSBuZXcgY29ubmVjdGlvbiBoYW5kbGUgZm9yIHRoZSB1bmRlcmx5aW5nIHBoeXNpY2FsIAorICAgICAqIENyZWF0ZXMgYSBuZXcgY29ubmVjdGlvbiBoYW5kbGUgZm9yIHRoZSB1bmRlcmx5aW5nIHBoeXNpY2FsCiAgICAgICogY29ubmVjdGlvbiByZXByZXNlbnRlZCBieSB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCXN1YmplY3QJPGNvZGU+U3ViamVjdDwvY29kZT4gcGFyYW1ldGVyIG5lZWRlZCBmb3IgYXV0aGVudGljYXRpb24KLSAgICAgKiBAcGFyYW0JY3hSZXFJbmZvCTxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gY2FycmllcyB0aGUgdXNlciAKLSAgICAgKiAgICAgICAJICAgICAgICAgCWFuZCBwYXNzd29yZCByZXF1aXJlZCBmb3IgZ2V0dGluZyB0aGlzIGNvbm5lY3Rpb24uCi0gICAgICogQHJldHVybglDb25uZWN0aW9uCXRoZSBjb25uZWN0aW9uIGhhbmRsZSA8Y29kZT5PYmplY3Q8L2NvZGU+Ci0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZSAKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCXBoeXNpY2FsIGNvbm5lY3Rpb24gZnJvbSB0aGUgcG9vbGVkIGNvbm5lY3Rpb24gCi0gICAgICogQHRocm93cwlTZWN1cml0eUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhIG1pc21hdGNoIGJldHdlZW4gdGhlCi0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAlwYXNzd29yZCBjcmVkZW50aWFscyBvciByZWF1dGhlbnRpY2F0aW9uIGlzIHJlcXVlc3RlZAorICAgICAqIEBwYXJhbSAgICBzdWJqZWN0ICAgIDxjb2RlPlN1YmplY3Q8L2NvZGU+IHBhcmFtZXRlciBuZWVkZWQgZm9yIGF1dGhlbnRpY2F0aW9uCisgICAgICogQHBhcmFtICAgIGN4UmVxSW5mbyAgICA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IGNhcnJpZXMgdGhlIHVzZXIKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBwYXNzd29yZCByZXF1aXJlZCBmb3IgZ2V0dGluZyB0aGlzIGNvbm5lY3Rpb24uCisgICAgICogQHJldHVybiAgICBDb25uZWN0aW9uICAgIHRoZSBjb25uZWN0aW9uIGhhbmRsZSA8Y29kZT5PYmplY3Q8L2NvZGU+CisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGh5c2ljYWwgY29ubmVjdGlvbiBmcm9tIHRoZSBwb29sZWQgY29ubmVjdGlvbgorICAgICAqIEB0aHJvd3MgICAgU2VjdXJpdHlFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYSBtaXNtYXRjaCBiZXR3ZWVuIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQgY3JlZGVudGlhbHMgb3IgcmVhdXRoZW50aWNhdGlvbiBpcyByZXF1ZXN0ZWQKICAgICAgKi8KLSAgICBwdWJsaWMgT2JqZWN0IGdldENvbm5lY3Rpb24oU3ViamVjdCBzdWIsIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mbyBjeFJlcUluZm8pIAorICAgIHB1YmxpYyBPYmplY3QgZ2V0Q29ubmVjdGlvbihTdWJqZWN0IHN1YiwgamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxSW5mbykKICAgICAgICAgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBnZXRDb25uZWN0aW9uIik7CkBAIC0yODQsMTQgKzI4NCwxNCBAQAogICAgICAgICBjaGVja0lmVmFsaWQoKTsKICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mbyBjeFJlcXVlc3RJbmZvID0gKGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm8pIGN4UmVxSW5mbzsKICAgICAgICAgUGFzc3dvcmRDcmVkZW50aWFsIHBhc3N3ZENyZWQgPSBTZWN1cml0eVV0aWxzLmdldFBhc3N3b3JkQ3JlZGVudGlhbCh0aGlzLm1jZiwgc3ViLCBjeFJlcXVlc3RJbmZvKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIGlmKFNlY3VyaXR5VXRpbHMuaXNQYXNzd29yZENyZWRlbnRpYWxFcXVhbCh0aGlzLnBhc3N3ZENyZWRlbnRpYWwsIHBhc3N3ZENyZWQpID09IGZhbHNlKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgamFrYXJ0YS5yZXNvdXJjZS5zcGkuU2VjdXJpdHlFeGNlcHRpb24oIlJlLWF1dGhlbnRpY2F0aW9uIG5vdCBzdXBwb3J0ZWQiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAvL0dKQ0lOVAogICAgICAgICBnZXRBY3R1YWxDb25uZWN0aW9uKCk7Ci0gCisKICAgICAgICAgLyoqCiAgICAgICAgICAqIFRoZSBmb2xsb3dpbmcgY29kZSBpbiB0aGUgaWYgc3RhdGVtZW50IGZpcnN0IGNoZWNrcyBpZiB0aGlzIE1hbmFnZWRDb25uZWN0aW9uCiAgICAgICAgICAqIGlzIGNsZWFuIG9yIG5vdC4gSWYgaXQgaXMsIGl0IHJlc2V0cyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsIHRvIHdoYXQKQEAgLTMwMSwyOCArMzAxLDI4IEBACiAgICAgICAgIGlmKGlzQ2xlYW4pIHsKICAgICAgICAgICAgICgoY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSltY2YpLnJlc2V0SXNvbGF0aW9uKHRoaXMsIGlzb2xhdGlvbkxldmVsV2hlbkNsZWFuZWQpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAgCisKKwogICAgICAgICBDb25uZWN0aW9uSG9sZGVyIGNvbm5Ib2xkZXJPYmplY3QgPSBuZXcgQ29ubmVjdGlvbkhvbGRlcihhY3R1YWxDb25uZWN0aW9uLCB0aGlzKTsKLQlpc0NsZWFuPWZhbHNlOwotICAgICAgICAKKyAgICBpc0NsZWFuPWZhbHNlOworCiAgICAgICAgIGlmKGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgIT0gbnVsbCkgewogICAgICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZS5zZXRBY3RpdmUoZmFsc2UpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGNvbm5Ib2xkZXJPYmplY3Quc2V0QWN0aXZlKHRydWUpOwogICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gY29ubkhvbGRlck9iamVjdDsKLSAKKwogICAgICAgICByZXR1cm4gY29ubkhvbGRlck9iamVjdDsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIGFuIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IGluc3RhbmNlLiBUaGUgPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gaW50ZXJmYWNlCi0gICAgICogaXMgdXNlZCBieSB0aGUgY29udGFpbmVyIHRvIG1hbmFnZSBsb2NhbCB0cmFuc2FjdGlvbnMgZm9yIGEgUk0gaW5zdGFuY2UuIAorICAgICAqIGlzIHVzZWQgYnkgdGhlIGNvbnRhaW5lciB0byBtYW5hZ2UgbG9jYWwgdHJhbnNhY3Rpb25zIGZvciBhIFJNIGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICogQHJldHVybiAgICA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCiAgICAgICovCiAgICAgcHVibGljIGpha2FydGEucmVzb3VyY2Uuc3BpLkxvY2FsVHJhbnNhY3Rpb24gZ2V0TG9jYWxUcmFuc2FjdGlvbigpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC0zMzEsMTMgKzMzMSwxMyBAQAogICAgICAgICBjaGVja0lmVmFsaWQoKTsKICAgICAgICAgcmV0dXJuIG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuTG9jYWxUcmFuc2FjdGlvbih0aGlzKTsKICAgICB9Ci0gICAgIAorCiAgICAgLyoqCi0gICAgICogR2V0cyB0aGUgbG9nIHdyaXRlciBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuIAorICAgICAqIEdldHMgdGhlIGxvZyB3cml0ZXIgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgCi0gICAgICoJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICogQHJldHVybiAgICA8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyAgICAgKiAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKiBAc2VlIDxjb2RlPnNldExvZ1dyaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgUHJpbnRXcml0ZXIgZ2V0TG9nV3JpdGVyKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKQEAgLTM0NSw0NiArMzQ1LDQ2IEBACiAgICAgICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGdldExvZ1dyaXRlciIpOwogICAgICAgICB9CiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gbG9nV3JpdGVyOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIEdldHMgdGhlIG1ldGFkYXRhIGluZm9ybWF0aW9uIGZvciB0aGlzIGNvbm5lY3Rpb24ncyB1bmRlcmx5aW5nIEVJUyAKLSAgICAgKiByZXNvdXJjZSBtYW5hZ2VyIGluc3RhbmNlLiAKKyAgICAgKiBHZXRzIHRoZSBtZXRhZGF0YSBpbmZvcm1hdGlvbiBmb3IgdGhpcyBjb25uZWN0aW9uJ3MgdW5kZXJseWluZyBFSVMKKyAgICAgKiByZXNvdXJjZSBtYW5hZ2VyIGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICogQHJldHVybiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCiAgICAgICovCiAgICAgcHVibGljIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEgZ2V0TWV0YURhdGEoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBnZXRNZXRhRGF0YSIpOwogICAgICAgICB9CiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhKHRoaXMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFJldHVybnMgYW4gPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UuIAorICAgICAqIFJldHVybnMgYW4gPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgb3IKLSAgICAgKgkJCQkJdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUgCi0gICAgICoJCQkJCTxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlOb3RTdXBwb3J0ZWRFeGNlcHRpb24JaWYgdW5kZXJseWluZyBkYXRhc291cmNlIGlzIG5vdCBhbgotICAgICAqCQkJCQk8Y29kZT5YQURhdGFTb3VyY2U8L2NvZGU+CisgICAgICogQHJldHVybiAgICA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIG9yCisgICAgICogICAgICAgICAgICAgICAgICAgIHRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBOb3RTdXBwb3J0ZWRFeGNlcHRpb24gICAgaWYgdW5kZXJseWluZyBkYXRhc291cmNlIGlzIG5vdCBhbgorICAgICAqICAgICAgICAgICAgICAgICAgICA8Y29kZT5YQURhdGFTb3VyY2U8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFhBUmVzb3VyY2UgZ2V0WEFSZXNvdXJjZSgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGdldFhBUmVzb3VyY2UiKTsKICAgICAgICAgfQogICAgICAgICBjaGVja0lmVmFsaWQoKTsKLSAgICAgICAgCisKICAgICAgICAgaWYoY29ubmVjdGlvblR5cGUgPT0gSVNYQUNPTk5FQ1RJT04pIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgaWYoeGFyID09IG51bGwpIHsKLQkJICAgIC8qKgorICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgICAgICAqIFVzaW5nIHRoZSB3cmFwcGVyIFhBUmVzb3VyY2UuCiAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgICAgICB4YXIgPSBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLlhBUmVzb3VyY2VJbXBsKCgoWEFDb25uZWN0aW9uKXBjKS5nZXRYQVJlc291cmNlKCksIHRoaXMpOwpAQCAtMzk3LDE2ICszOTcsMTYgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkNhbm5vdCBnZXQgYW4gWEFSZXNvdXJjZSBmcm9tIGEgbm9uIFhBIGNvbm5lY3Rpb24iKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJlbW92ZXMgYW4gYWxyZWFkeSByZWdpc3RlcmVkIGNvbm5lY3Rpb24gZXZlbnQgbGlzdGVuZXIgZnJvbSB0aGUKICAgICAgKiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbGlzdGVuZXIJPGNvZGU+Q29ubmVjdGlvbkV2ZW50TGlzdGVuZXI8L2NvZGU+IHRvIGJlIHJlbW92ZWQKKyAgICAgKiBAcGFyYW0gICAgbGlzdGVuZXIgICAgPGNvZGU+Q29ubmVjdGlvbkV2ZW50TGlzdGVuZXI8L2NvZGU+IHRvIGJlIHJlbW92ZWQKICAgICAgKiBAc2VlIDxjb2RlPmFkZENvbm5lY3Rpb25FdmVudExpc3RlbmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJlbW92ZUNvbm5lY3Rpb25FdmVudExpc3RlbmVyKENvbm5lY3Rpb25FdmVudExpc3RlbmVyIGxpc3RlbmVyKSB7Ci0JbGlzdGVuZXIgPSBudWxsOworICAgIGxpc3RlbmVyID0gbnVsbDsKICAgICB9CiAKICAgICAvKioKQEAgLTQxNSw3ICs0MTUsNyBAQAogICAgICAqIExvY2FsVHJhbnNhY3Rpb24gb2JqZWN0IHdoZW4gaXRzIGJlZ2luKCkgbWV0aG9kIGlzIGNhbGxlZC4KICAgICAgKi8KICAgICB2b2lkIHRyYW5zYWN0aW9uU3RhcnRlZCgpIHsKLQl0cmFuc2FjdGlvbkluUHJvZ3Jlc3MgPSB0cnVlOwkKKyAgICB0cmFuc2FjdGlvbkluUHJvZ3Jlc3MgPSB0cnVlOwogICAgIH0KIAogICAgIC8qKgpAQCAtNDI0LDE2ICs0MjQsMTYgQEAKICAgICAgKiBMb2NhbFRyYW5zYWN0aW9uIG9iamVjdCB3aGVuIGl0cyBlbmQoKSBtZXRob2QgaXMgY2FsbGVkLgogICAgICAqLwogICAgIHZvaWQgdHJhbnNhY3Rpb25Db21wbGV0ZWQoKSB7Ci0JdHJhbnNhY3Rpb25JblByb2dyZXNzID0gZmFsc2U7Ci0JaWYoY29ubmVjdGlvblR5cGUgPT0gSVNQT09MRURDT05ORUNUSU9OIHx8IGNvbm5lY3Rpb25UeXBlID09IElTWEFDT05ORUNUSU9OKSB7CisgICAgdHJhbnNhY3Rpb25JblByb2dyZXNzID0gZmFsc2U7CisgICAgaWYoY29ubmVjdGlvblR5cGUgPT0gSVNQT09MRURDT05ORUNUSU9OIHx8IGNvbm5lY3Rpb25UeXBlID09IElTWEFDT05ORUNUSU9OKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGlzb2xhdGlvbkxldmVsV2hlbkNsZWFuZWQgPSBhY3R1YWxDb25uZWN0aW9uLmdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCk7CiAgICAgICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgICAgICAvL2NoZWNrIHdoYXQgdG8gZG8gaW4gdGhpcyBjYXNlISEKLQkJX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMubm90Z290X3R4X2lzb2x2bCIpOworICAgICAgICAgICAgLy9jaGVjayB3aGF0IHRvIGRvIGluIHRoaXMgY2FzZSEhCisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLm5vdGdvdF90eF9pc29sdmwiKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotCSAgICB0cnkgeworCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgYWN0dWFsQ29ubmVjdGlvbi5jbG9zZSgpOwogICAgICAgICAgICAgICAgIGFjdHVhbENvbm5lY3Rpb24gPSBudWxsOwogICAgICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewpAQCAtNDQxLDcgKzQ0MSw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotCSAgICAgICAgCisKICAgICAgICAgaXNDbGVhbiA9IHRydWU7CiAKICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7CkBAIC00NTMsMjggKzQ1MywyOCBAQAogICAgICAqIG9yIG5vdC4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc1RyYW5zYWN0aW9uSW5Qcm9ncmVzcygpIHsKLQlyZXR1cm4gdHJhbnNhY3Rpb25JblByb2dyZXNzOworICAgIHJldHVybiB0cmFuc2FjdGlvbkluUHJvZ3Jlc3M7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgbG9nIHdyaXRlciBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jb3V0CTxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhpcwotICAgICAqCQkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKiBAcGFyYW0gICAgb3V0ICAgIDxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAqICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKiBAc2VlIDxjb2RlPmdldExvZ1dyaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRMb2dXcml0ZXIoUHJpbnRXcml0ZXIgb3V0KSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBjaGVja0lmVmFsaWQoKTsKICAgICAgICAgbG9nV3JpdGVyID0gb3V0OwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFRoaXMgbWV0aG9kIGRldGVybWluZXMgdGhlIHR5cGUgb2YgdGhlIGNvbm5lY3Rpb24gYmVpbmcgaGVsZCAKKyAgICAgKiBUaGlzIG1ldGhvZCBkZXRlcm1pbmVzIHRoZSB0eXBlIG9mIHRoZSBjb25uZWN0aW9uIGJlaW5nIGhlbGQKICAgICAgKiBpbiB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPi4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JcG9vbGVkQ29ubgk8Y29kZT5Qb29sZWRDb25uZWN0aW9uPC9jb2RlPgotICAgICAqIEByZXR1cm4JY29ubmVjdGlvbiB0eXBlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgcG9vbGVkQ29ubiAgICA8Y29kZT5Qb29sZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgY29ubmVjdGlvbiB0eXBlCiAgICAgICovCiAgICAgcHJpdmF0ZSBpbnQgZ2V0Q29ubmVjdGlvblR5cGUoUG9vbGVkQ29ubmVjdGlvbiBwb29sZWRDb25uKSB7CiAgICAgICAgIGlmKHBvb2xlZENvbm4gPT0gbnVsbCkgewpAQCAtNDg1LDIyICs0ODUsMjIgQEAKICAgICAgICAgICAgIHJldHVybiBJU1BPT0xFRENPTk5FQ1RJT047CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlIHRoYXQgCisgICAgICogUmV0dXJucyB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZSB0aGF0CiAgICAgICogY3JlYXRlZCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZSB0aGF0IGNyZWF0ZWQgdGhpcwotICAgICAqCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UgdGhhdCBjcmVhdGVkIHRoaXMKKyAgICAgKiAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCiAgICAgICovCiAgICAgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IGdldE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSgpIHsKICAgICAgICAgcmV0dXJuIChjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KW1jZjsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBhY3R1YWwgc3FsIGNvbm5lY3Rpb24gZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+LiAKKyAgICAgKiBSZXR1cm5zIHRoZSBhY3R1YWwgc3FsIGNvbm5lY3Rpb24gZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+LgogICAgICAqCi0gICAgICogQHJldHVybgl0aGUgcGh5c2ljYWwgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHRoZSBwaHlzaWNhbCA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPgogICAgICAqLwogICAgIC8vR0pDSU5UCiAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBnZXRBY3R1YWxDb25uZWN0aW9uKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKQEAgLTUwOSw4ICs1MDksOCBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBpZihhY3R1YWxDb25uZWN0aW9uID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgYWN0dWFsQ29ubmVjdGlvbiA9IHBjLmdldENvbm5lY3Rpb24oKTsKLQkJfQotCQkKKyAgICAgICAgfQorCiAgICAgICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7CiAgICAgICAgICAgICAgICAgc3FsZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwpAQCAtNTE4LDgxICs1MTgsODEgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gYWN0dWFsQ29ubmVjdGlvbjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgCi0gICAgICoJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEByZXR1cm4gICAgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAqICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKICAgICAgKi8KICAgICBQYXNzd29yZENyZWRlbnRpYWwgZ2V0UGFzc3dvcmRDcmVkZW50aWFsKCkgewogICAgICAgICByZXR1cm4gcGFzc3dkQ3JlZGVudGlhbDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDaGVja3MgaWYgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaXMgdmFsaWQgb3Igbm90IGFuZCB0aHJvd3MgYW4KICAgICAgKiBleGNlcHRpb24gaWYgaXQgaXMgbm90IHZhbGlkLiBBIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpcyBub3QgdmFsaWQgaWYKICAgICAgKiBkZXN0cm95IGhhcyBub3QgYmVlbiBjYWxsZWQgYW5kIG5vIHBoeXNpY2FsIGNvbm5lY3Rpb24gZXJyb3IgaGFzCiAgICAgICogb2NjdXJyZWQgcmVuZGVyaW5nIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIHVudXNhYmxlLgogICAgICAqCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiA8Y29kZT5kZXN0cm95PC9jb2RlPiBoYXMgYmVlbiBjYWxsZWQgb24gdGhpcyAKLSAgICAgKgkJCQkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlIG9yIGlmIGEgCi0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAlwaHlzaWNhbCBjb25uZWN0aW9uIGVycm9yIG9jY3VycmVkIHJlbmRlcmluZyBpdCB1bnVzYWJsZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgPGNvZGU+ZGVzdHJveTwvY29kZT4gaGFzIGJlZW4gY2FsbGVkIG9uIHRoaXMKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlIG9yIGlmIGEKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoeXNpY2FsIGNvbm5lY3Rpb24gZXJyb3Igb2NjdXJyZWQgcmVuZGVyaW5nIGl0IHVudXNhYmxlCiAgICAgICovCiAgICAgLy9HSkNJTlQKICAgICB2b2lkIGNoZWNrSWZWYWxpZCgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGlzRGVzdHJveWVkID09IHRydWUgfHwgaXNVc2FibGUgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhpcyBNYW5hZ2VkQ29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgdGhlIHBoeXNpY2FsICIgKyAKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhpcyBNYW5hZ2VkQ29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgdGhlIHBoeXNpY2FsICIgKwogICAgICAgICAgICAgICAgICJjb25uZWN0aW9uIGlzIG5vdCB1c2FibGUuIik7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIDxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHdoZW4gaXRzIGNsb3NlIG1ldGhvZCBpcwogICAgICAqIGNhbGxlZC4gVGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UgIGludmFsaWRhdGVzIHRoZSBjb25uZWN0aW9uIGhhbmRsZQogICAgICAqIGFuZCBzZW5kcyBhIENPTk5FQ1RJT05fQ0xPU0VEIGV2ZW50IHRvIGFsbCB0aGUgcmVnaXN0ZXJlZCBldmVudCBsaXN0ZW5lcnMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZQlFeGNlcHRpb24gdGhhdCBtYXkgaGF2ZSBvY2N1cmVkIHdoaWxlIGNsb3NpbmcgdGhlIGNvbm5lY3Rpb24gaGFuZGxlCi0gICAgICogQHBhcmFtCWNvbm5Ib2xkZXJPYmplY3QJPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdGhhdCBoYXMgYmVlbiBjbG9zZWQKLSAgICAgKiBAdGhyb3dzCVNRTEV4Y2VwdGlvbglpbiBjYXNlIGNsb3NpbmcgdGhlIHNxbCBjb25uZWN0aW9uIGdvdCBvdXQgb2YKLSAgICAgKiAgICAgICAgIAkgICAgICAgICAgICAJPGNvZGU+Z2V0Q29ubmVjdGlvbjwvY29kZT4gb24gdGhlIHVuZGVybHlpbmcgCi0gICAgICoJCQkJPGNvZGU+UG9vbGVkQ29ubmVjdGlvbjwvY29kZT4gdGhyb3dzIGFuIGV4Y2VwdGlvbgorICAgICAqIEBwYXJhbSAgICBlICAgIEV4Y2VwdGlvbiB0aGF0IG1heSBoYXZlIG9jY3VyZWQgd2hpbGUgY2xvc2luZyB0aGUgY29ubmVjdGlvbiBoYW5kbGUKKyAgICAgKiBAcGFyYW0gICAgY29ubkhvbGRlck9iamVjdCAgICA8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0aGF0IGhhcyBiZWVuIGNsb3NlZAorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIGluIGNhc2UgY2xvc2luZyB0aGUgc3FsIGNvbm5lY3Rpb24gZ290IG91dCBvZgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZT5nZXRDb25uZWN0aW9uPC9jb2RlPiBvbiB0aGUgdW5kZXJseWluZworICAgICAqICAgICAgICAgICAgICAgIDxjb2RlPlBvb2xlZENvbm5lY3Rpb248L2NvZGU+IHRocm93cyBhbiBleGNlcHRpb24KICAgICAgKi8KICAgICB2b2lkIGNvbm5lY3Rpb25DbG9zZWQoRXhjZXB0aW9uIGUsIENvbm5lY3Rpb25Ib2xkZXIgY29ubkhvbGRlck9iamVjdCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICAgIGNvbm5Ib2xkZXJPYmplY3QuaW52YWxpZGF0ZSgpOwotICAgICAgICAKKwogICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKLSAgICAgICAgCisKICAgICAgICAgY2Uuc2V0Q29ubmVjdGlvbkhhbmRsZShjb25uSG9sZGVyT2JqZWN0KTsKICAgICAgICAgbGlzdGVuZXIuY29ubmVjdGlvbkNsb3NlZChjZSk7Ci0JCisKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIDxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHdoZW4gaXQgZGV0ZWN0cyBhIGNvbm5lY2lvbgogICAgICAqIHJlbGF0ZWQgZXJyb3IuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZQlFeGNlcHRpb24gdGhhdCBoYXMgb2NjdXJyZWQgZHVyaW5nIGFuIG9wZXJhdGlvbiBvbiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbgotICAgICAqIEBwYXJhbQljb25uSG9sZGVyT2JqZWN0CTxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRoYXQgZGV0ZWN0ZWQgdGhlIHBoeXNpY2FsCi0gICAgICoJCQkJCWNvbm5lY3Rpb24gZXJyb3IKKyAgICAgKiBAcGFyYW0gICAgZSAgICBFeGNlcHRpb24gdGhhdCBoYXMgb2NjdXJyZWQgZHVyaW5nIGFuIG9wZXJhdGlvbiBvbiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbgorICAgICAqIEBwYXJhbSAgICBjb25uSG9sZGVyT2JqZWN0ICAgIDxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRoYXQgZGV0ZWN0ZWQgdGhlIHBoeXNpY2FsCisgICAgICogICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gZXJyb3IKICAgICAgKi8KLSAgICB2b2lkIGNvbm5lY3Rpb25FcnJvck9jY3VycmVkKEV4Y2VwdGlvbiBlLCAKKyAgICB2b2lkIGNvbm5lY3Rpb25FcnJvck9jY3VycmVkKEV4Y2VwdGlvbiBlLAogICAgICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25Ib2xkZXIgY29ubkhvbGRlck9iamVjdCkgewotCSAgICAKKwogICAgICAgICAgQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXIgY2VsID0gdGhpcy5saXN0ZW5lcjsKICAgICAgICAgIENvbm5lY3Rpb25FdmVudCBjZSA9IG51bGw7CiAgICAgICAgICBjZSA9IGUgPT0gbnVsbCA/IG5ldyBDb25uZWN0aW9uRXZlbnQodGhpcywgQ29ubmVjdGlvbkV2ZW50LkNPTk5FQ1RJT05fRVJST1JfT0NDVVJSRUQpCiAgICAgICAgICAgICAgICAgICAgIDogbmV3IENvbm5lY3Rpb25FdmVudCh0aGlzLCBDb25uZWN0aW9uRXZlbnQuQ09OTkVDVElPTl9FUlJPUl9PQ0NVUlJFRCwgZSk7CiAgICAgICAgICBpZiAoY29ubkhvbGRlck9iamVjdCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgY2Uuc2V0Q29ubmVjdGlvbkhhbmRsZShjb25uSG9sZGVyT2JqZWN0KTsKLSAgICAgICAgIH0gICAgCisgICAgICAgICB9CiAKICAgICAgICAgIGNlbC5jb25uZWN0aW9uRXJyb3JPY2N1cnJlZChjZSk7CiAgICAgICAgICBpc1VzYWJsZSA9IGZhbHNlOwogICAgIH0KLSAgICAKLSAgICAKLSAgICAKKworCisKICAgICAvKioKICAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IG9iamVjdCB3aGVuIGl0cyBzdGFydCBtZXRob2QKICAgICAgKiBoYXMgYmVlbiBpbnZva2VkLgpAQCAtNjA2LDcgKzYwNiw3IEBACiAgICAgICAgICAgICBjb25uZWN0aW9uRXJyb3JPY2N1cnJlZChlLCBudWxsKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gb2JqZWN0IHdoZW4gaXRzIGVuZCBtZXRob2QKICAgICAgKiBoYXMgYmVlbiBpbnZva2VkLgpAQCAtNjIwLDcgKzYyMCw3IEBACiAgICAgICAgICAgICBjb25uZWN0aW9uRXJyb3JPY2N1cnJlZChlLCBudWxsKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSBhIENvbm5lY3Rpb24gSGFuZGxlIHRvIGNoZWNrIGlmIGl0IGlzCiAgICAgICogdGhlIGFjdGl2ZSBDb25uZWN0aW9uIEhhbmRsZS4gSWYgaXQgaXMgbm90IHRoZSBhY3RpdmUgQ29ubmVjdGlvbgpAQCAtNjI5LDI0ICs2MjksMjQgQEAKICAgICAgKiBDb25uZWN0aW9uIEhhbmRsZSBvYmplY3QgdG8gdGhpcyBvYmplY3QgaWYgdGhlIGFjdGl2ZSBDb25uZWN0aW9uCiAgICAgICogSGFuZGxlIGlzIG51bGwuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JY2gJPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdGhhdCByZXF1ZXN0cyB0aGlzCi0gICAgICoJCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2Ugd2hldGhlcgotICAgICAqCQkJaXQgY2FuIGJlIGFjdGl2ZSBvciBub3QKLSAgICAgKiBAdGhyb3dzCVNRTEV4Y2VwdGlvbglpbiBjYXNlIHRoZSBwaHlzaWNhbCBpcyBub3QgdmFsaWQgb3IKLSAgICAgKgkJCQl0aGVyZSBpcyBhbHJlYWR5IGFuIGFjdGl2ZSBjb25uZWN0aW9uIGhhbmRsZQorICAgICAqIEBwYXJhbSAgICBjaCAgICA8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0aGF0IHJlcXVlc3RzIHRoaXMKKyAgICAgKiAgICAgICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZSB3aGV0aGVyCisgICAgICogICAgICAgICAgICBpdCBjYW4gYmUgYWN0aXZlIG9yIG5vdAorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIGluIGNhc2UgdGhlIHBoeXNpY2FsIGlzIG5vdCB2YWxpZCBvcgorICAgICAqICAgICAgICAgICAgICAgIHRoZXJlIGlzIGFscmVhZHkgYW4gYWN0aXZlIGNvbm5lY3Rpb24gaGFuZGxlCiAgICAgICovCi0gICAgIAorCiAgICAgdm9pZCBjaGVja0lmQWN0aXZlKENvbm5lY3Rpb25Ib2xkZXIgY2gpIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgICBpZihpc0Rlc3Ryb3llZCA9PSB0cnVlIHx8IGlzVXNhYmxlID09IGZhbHNlKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uKCJUaGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdXNhYmxlIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYoYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9PSBudWxsKSB7CiAgICAgICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gY2g7CiAgICAgICAgICAgICBjaC5zZXRBY3RpdmUodHJ1ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYoYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSAhPSBjaCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gaGFuZGxlIGNhbm5vdCBiZSB1c2VkIGFzIGFub3RoZXIgY29ubmVjdGlvbiBpcyBjdXJyZW50bHkgYWN0aXZlIik7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEuamF2YQppbmRleCAyMGYwM2FhLi5mNjUwZDQxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YS5qYXZhCkBAIC0yNSw4ICsyNSw4IEBACiAvKioKICAqIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGE8L2NvZGU+IGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDgvMDMKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA4LzAzCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiBwdWJsaWMgY2xhc3MgTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YSBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEgewogCkBAIC00MSw4MSArNDEsODEgQEAKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YTwvY29kZT4KICAgICAgKgotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPglpZiBnZXR0aW5nIHRoZSBEYXRhYmFzZU1ldGFEYXRhIG9iamVjdCBmYWlscworICAgICAqIEBwYXJhbSAgICBtYyAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiAgICBpZiBnZXR0aW5nIHRoZSBEYXRhYmFzZU1ldGFEYXRhIG9iamVjdCBmYWlscwogICAgICAqLwogICAgIHB1YmxpYyBNYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhKE1hbmFnZWRDb25uZWN0aW9uIG1jKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICB0cnkgewogICAgICAgICAgICAgdGhpcy5tYyA9IG1jOwogICAgICAgICAgICAgZG1kID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpLmdldE1ldGFEYXRhKCk7CiAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfbWQiKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfbWQiKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHByb2R1Y3QgbmFtZSBvZiB0aGUgdW5kZXJseWluZyBFSVMgaW5zdGFuY2UgY29ubmVjdGVkCiAgICAgICogdGhyb3VnaCB0aGUgTWFuYWdlZENvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVByb2R1Y3QgbmFtZSBvZiB0aGUgRUlTIGluc3RhbmNlCi0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIFByb2R1Y3QgbmFtZSBvZiB0aGUgRUlTIGluc3RhbmNlCisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldEVJU1Byb2R1Y3ROYW1lKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJldHVybiBkbWQuZ2V0RGF0YWJhc2VQcm9kdWN0TmFtZSgpOwogICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2Vpc19wcm9kbmFtZSIsIHNxbGUpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19laXNfcHJvZG5hbWUiLCBzcWxlKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHByb2R1Y3QgdmVyc2lvbiBvZiB0aGUgdW5kZXJseWluZyBFSVMgaW5zdGFuY2UgY29ubmVjdGVkCiAgICAgICogdGhyb3VnaCB0aGUgTWFuYWdlZENvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVByb2R1Y3QgdmVyc2lvbiBvZiB0aGUgRUlTIGluc3RhbmNlCi0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIFByb2R1Y3QgdmVyc2lvbiBvZiB0aGUgRUlTIGluc3RhbmNlCisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldEVJU1Byb2R1Y3RWZXJzaW9uKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJldHVybiBkbWQuZ2V0RGF0YWJhc2VQcm9kdWN0VmVyc2lvbigpOwogICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2Vpc19wcm9kdmVycyIsIHNxbGUpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19laXNfcHJvZHZlcnMiLCBzcWxlKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSwgc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBtYXhpbXVtIGxpbWl0IG9uIG51bWJlciBvZiBhY3RpdmUgY29uY3VycmVudCBjb25uZWN0aW9ucwogICAgICAqIHRoYXQgYW4gRUlTIGluc3RhbmNlIGNhbiBzdXBwb3J0IGFjcm9zcyBjbGllbnQgcHJvY2Vzc2VzLgogICAgICAqCi0gICAgICogQHJldHVybglNYXhpbXVtIGxpbWl0IGZvciBudW1iZXIgb2YgYWN0aXZlIGNvbmN1cnJlbnQgY29ubmVjdGlvbnMKLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgTWF4aW11bSBsaW1pdCBmb3IgbnVtYmVyIG9mIGFjdGl2ZSBjb25jdXJyZW50IGNvbm5lY3Rpb25zCisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldE1heENvbm5lY3Rpb25zKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJldHVybiBkbWQuZ2V0TWF4Q29ubmVjdGlvbnMoKTsKICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19laXNfbWF4Y29ubiIpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19laXNfbWF4Y29ubiIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgbmFtZSBvZiB0aGUgdXNlciBhc3NvY2lhdGVkIHdpdGggdGhlIE1hbmFnZWRDb25uZWN0aW9uIGluc3RhbmNlLiBUaGUgbmFtZQogICAgICAqIGNvcnJlc3BvbmRzIHRvIHRoZSByZXNvdXJjZSBwcmluY2lwYWwgdW5kZXIgd2hvc2Ugd2hvc2Ugc2VjdXJpdHkgY29udGV4dCwgYSBjb25uZWN0aW9uCiAgICAgICogdG8gdGhlIEVJUyBpbnN0YW5jZSBoYXMgYmVlbiBlc3RhYmxpc2hlZC4KICAgICAgKgotICAgICAqIEByZXR1cm4JbmFtZSBvZiB0aGUgdXNlcgotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBuYW1lIG9mIHRoZSB1c2VyCisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFVzZXJOYW1lKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgamFrYXJ0YS5yZXNvdXJjZS5zcGkuc2VjdXJpdHkuUGFzc3dvcmRDcmVkZW50aWFsIHBjID0gbWMuZ2V0UGFzc3dvcmRDcmVkZW50aWFsKCk7CiAgICAgICAgIGlmKHBjICE9IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybiBwYy5nZXRVc2VyTmFtZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBtYy5nZXRNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkoKS5nZXRVc2VyKCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvWEFSZXNvdXJjZUltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL1hBUmVzb3VyY2VJbXBsLmphdmEKaW5kZXggZGFkMWQ3Ny4uNDgyZjMzMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvWEFSZXNvdXJjZUltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9YQVJlc291cmNlSW1wbC5qYXZhCkBAIC0yNCwxNDggKzI0LDE0OCBAQAogLyoqCiAgKiA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiB3cmFwcGVyIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDgvMjMKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA4LzIzCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiBwdWJsaWMgY2xhc3MgWEFSZXNvdXJjZUltcGwgaW1wbGVtZW50cyBYQVJlc291cmNlIHsKIAogICAgIFhBUmVzb3VyY2UgeGFyOwogICAgIE1hbmFnZWRDb25uZWN0aW9uIG1jOwotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0b3IgZm9yIFhBUmVzb3VyY2VJbXBsCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGFyCTxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+Ci0gICAgICogQHBhcmFtCW1jCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB4YXIgICAgPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFhBUmVzb3VyY2VJbXBsKFhBUmVzb3VyY2UgeGFyLCBNYW5hZ2VkQ29ubmVjdGlvbiBtYykgewogICAgICAgICB0aGlzLnhhciA9IHhhcjsKICAgICAgICAgdGhpcy5tYyA9IG1jOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbW1pdCB0aGUgZ2xvYmFsIHRyYW5zYWN0aW9uIHNwZWNpZmllZCBieSB4aWQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGlkCUEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKLSAgICAgKiBAcGFyYW0Jb25lUGhhc2UJSWYgdHJ1ZSwgdGhlIHJlc291cmNlIG1hbmFnZXIgc2hvdWxkIHVzZSBhIG9uZS1waGFzZSBjb21taXQgCi0gICAgICogICAgICAgCSAgICAgICAgCXByb3RvY29sIHRvIGNvbW1pdCB0aGUgd29yayBkb25lIG9uIGJlaGFsZiBvZiB4aWQuCisgICAgICogQHBhcmFtICAgIHhpZCAgICBBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCisgICAgICogQHBhcmFtICAgIG9uZVBoYXNlICAgIElmIHRydWUsIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHNob3VsZCB1c2UgYSBvbmUtcGhhc2UgY29tbWl0CisgICAgICogICAgICAgICAgICAgICAgICAgICAgIHByb3RvY29sIHRvIGNvbW1pdCB0aGUgd29yayBkb25lIG9uIGJlaGFsZiBvZiB4aWQuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgY29tbWl0KFhpZCB4aWQsIGJvb2xlYW4gb25lUGhhc2UpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIC8vdGhlIG1jLnRyYW5zYWN0aW9uQ29tcGxldGVkIGNhbGwgaGFzIGNvbWUgaGVyZSBiZWNhc3VlCi0JLy90aGUgdHJhbnNhY3Rpb24gKmFjdHVhbGx5KiBjb21wbGV0ZXMgYWZ0ZXIgdGhlIGZsb3cKLQkvL3JlYWNoZXMgaGVyZS4gdGhlIGVuZCgpIG1ldGhvZCBtaWdodCBub3QgcmVhbGx5IHNpZ25hbAotCS8vY29tcGxldGlvbiBvZiB0cmFuc2FjdGlvbiBpbiBjYXNlIHRoZSB0cmFuc2FjdGlvbiBpcwotCS8vc3VzcGVuZGVkLiBJbiBjYXNlIG9mIHRyYW5zYWN0aW9uIHN1c3BlbnNpb24sIHRoZSBlbmQKLQkvL21ldGhvZCBpcyBzdGlsbCBjYWxsZWQgYnkgdGhlIHRyYW5zYWN0aW9uIG1hbmFnZXIKLQltYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOworICAgIC8vdGhlIHRyYW5zYWN0aW9uICphY3R1YWxseSogY29tcGxldGVzIGFmdGVyIHRoZSBmbG93CisgICAgLy9yZWFjaGVzIGhlcmUuIHRoZSBlbmQoKSBtZXRob2QgbWlnaHQgbm90IHJlYWxseSBzaWduYWwKKyAgICAvL2NvbXBsZXRpb24gb2YgdHJhbnNhY3Rpb24gaW4gY2FzZSB0aGUgdHJhbnNhY3Rpb24gaXMKKyAgICAvL3N1c3BlbmRlZC4gSW4gY2FzZSBvZiB0cmFuc2FjdGlvbiBzdXNwZW5zaW9uLCB0aGUgZW5kCisgICAgLy9tZXRob2QgaXMgc3RpbGwgY2FsbGVkIGJ5IHRoZSB0cmFuc2FjdGlvbiBtYW5hZ2VyCisgICAgbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKICAgICAgICAgeGFyLmNvbW1pdCh4aWQsIG9uZVBoYXNlKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBFbmRzIHRoZSB3b3JrIHBlcmZvcm1lZCBvbiBiZWhhbGYgb2YgYSB0cmFuc2FjdGlvbiBicmFuY2guCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGlkCUEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIgdGhhdCBpcyB0aGUgc2FtZSBhcyB3aGF0IAotICAgICAqCQkJd2FzIHVzZWQgcHJldmlvdXNseSBpbiB0aGUgc3RhcnQgbWV0aG9kLgotICAgICAqIEBwYXJhbQlmbGFncwlPbmUgb2YgVE1TVUNDRVNTLCBUTUZBSUwsIG9yIFRNU1VTUEVORAorICAgICAqIEBwYXJhbSAgICB4aWQgICAgQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllciB0aGF0IGlzIHRoZSBzYW1lIGFzIHdoYXQKKyAgICAgKiAgICAgICAgICAgIHdhcyB1c2VkIHByZXZpb3VzbHkgaW4gdGhlIHN0YXJ0IG1ldGhvZC4KKyAgICAgKiBAcGFyYW0gICAgZmxhZ3MgICAgT25lIG9mIFRNU1VDQ0VTUywgVE1GQUlMLCBvciBUTVNVU1BFTkQKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlbmQoWGlkIHhpZCwgaW50IGZsYWdzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICB4YXIuZW5kKHhpZCwgZmxhZ3MpOwogICAgICAgICAvL0dKQ0lOVAotCS8vbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKKyAgICAvL21jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGVsbCB0aGUgcmVzb3VyY2UgbWFuYWdlciB0byBmb3JnZXQgYWJvdXQgYSBoZXVyaXN0aWNhbGx5IGNvbXBsZXRlZCB0cmFuc2FjdGlvbiBicmFuY2guCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGlkCUEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKKyAgICAgKiBAcGFyYW0gICAgeGlkICAgIEEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBmb3JnZXQoWGlkIHhpZCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgeGFyLmZvcmdldCh4aWQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIE9idGFpbiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIHNldCBmb3IgdGhpcyAKKyAgICAgKiBPYnRhaW4gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBzZXQgZm9yIHRoaXMKICAgICAgKiA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JdGhlIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaW4gc2Vjb25kcworICAgICAqIEByZXR1cm4gICAgdGhlIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaW4gc2Vjb25kcwogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0VHJhbnNhY3Rpb25UaW1lb3V0KCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIHhhci5nZXRUcmFuc2FjdGlvblRpbWVvdXQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSByZXNvdXJjZSBtYW5hZ2VyIGluc3RhbmNlIAotICAgICAqIHJlcHJlc2VudGVkIGJ5IHRoZSB0YXJnZXQgb2JqZWN0IGlzIHRoZSBzYW1lIGFzIHRoZSByZXNvdWNlIG1hbmFnZXIgCisgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIGRldGVybWluZSBpZiB0aGUgcmVzb3VyY2UgbWFuYWdlciBpbnN0YW5jZQorICAgICAqIHJlcHJlc2VudGVkIGJ5IHRoZSB0YXJnZXQgb2JqZWN0IGlzIHRoZSBzYW1lIGFzIHRoZSByZXNvdWNlIG1hbmFnZXIKICAgICAgKiBpbnN0YW5jZSByZXByZXNlbnRlZCBieSB0aGUgcGFyYW1ldGVyIHhhcmVzLgogICAgICAqCi0gICAgICogQHBhcmFtCXhhcmVzCUFuIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IG9iamVjdCB3aG9zZSByZXNvdXJjZSBtYW5hZ2VyIAotICAgICAqIAkJCWluc3RhbmNlIGlzIHRvIGJlIGNvbXBhcmVkIHdpdGggdGhlIHJlc291cmNlCi0gICAgICogQHJldHVybgl0cnVlIGlmIGl0J3MgdGhlIHNhbWUgUk0gaW5zdGFuY2U7IG90aGVyd2lzZSBmYWxzZS4KKyAgICAgKiBAcGFyYW0gICAgeGFyZXMgICAgQW4gPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gb2JqZWN0IHdob3NlIHJlc291cmNlIG1hbmFnZXIKKyAgICAgKiAgICAgICAgICAgICBpbnN0YW5jZSBpcyB0byBiZSBjb21wYXJlZCB3aXRoIHRoZSByZXNvdXJjZQorICAgICAqIEByZXR1cm4gICAgdHJ1ZSBpZiBpdCdzIHRoZSBzYW1lIFJNIGluc3RhbmNlOyBvdGhlcndpc2UgZmFsc2UuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gaXNTYW1lUk0oWEFSZXNvdXJjZSB4YXJlcykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIHhhci5pc1NhbWVSTSh4YXJlcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogQXNrIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHRvIHByZXBhcmUgZm9yIGEgdHJhbnNhY3Rpb24gY29tbWl0IAorICAgICAqIEFzayB0aGUgcmVzb3VyY2UgbWFuYWdlciB0byBwcmVwYXJlIGZvciBhIHRyYW5zYWN0aW9uIGNvbW1pdAogICAgICAqIG9mIHRoZSB0cmFuc2FjdGlvbiBzcGVjaWZpZWQgaW4geGlkLgogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCi0gICAgICogQHJldHVybglBIHZhbHVlIGluZGljYXRpbmcgdGhlIHJlc291cmNlIG1hbmFnZXIncyB2b3RlIG9uIHRoZSAKLSAgICAgKgkJb3V0Y29tZSBvZiB0aGUgdHJhbnNhY3Rpb24uIFRoZSBwb3NzaWJsZSB2YWx1ZXMKLSAgICAgKgkJYXJlOiBYQV9SRE9OTFkgb3IgWEFfT0suIElmIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHdhbnRzIAotICAgICAqCQl0byByb2xsIGJhY2sgdGhlIHRyYW5zYWN0aW9uLCBpdCBzaG91bGQgZG8gc28KLSAgICAgKgkJYnkgcmFpc2luZyBhbiBhcHByb3ByaWF0ZSA8Y29kZT5YQUV4Y2VwdGlvbjwvY29kZT4gaW4gdGhlIHByZXBhcmUgbWV0aG9kLgorICAgICAqIEBwYXJhbSAgICB4aWQgICAgQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgorICAgICAqIEByZXR1cm4gICAgQSB2YWx1ZSBpbmRpY2F0aW5nIHRoZSByZXNvdXJjZSBtYW5hZ2VyJ3Mgdm90ZSBvbiB0aGUKKyAgICAgKiAgICAgICAgb3V0Y29tZSBvZiB0aGUgdHJhbnNhY3Rpb24uIFRoZSBwb3NzaWJsZSB2YWx1ZXMKKyAgICAgKiAgICAgICAgYXJlOiBYQV9SRE9OTFkgb3IgWEFfT0suIElmIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHdhbnRzCisgICAgICogICAgICAgIHRvIHJvbGwgYmFjayB0aGUgdHJhbnNhY3Rpb24sIGl0IHNob3VsZCBkbyBzbworICAgICAqICAgICAgICBieSByYWlzaW5nIGFuIGFwcHJvcHJpYXRlIDxjb2RlPlhBRXhjZXB0aW9uPC9jb2RlPiBpbiB0aGUgcHJlcGFyZSBtZXRob2QuCiAgICAgICovCiAgICAgcHVibGljIGludCBwcmVwYXJlKFhpZCB4aWQpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiB4YXIucHJlcGFyZSh4aWQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIE9idGFpbiBhIGxpc3Qgb2YgcHJlcGFyZWQgdHJhbnNhY3Rpb24gYnJhbmNoZXMgZnJvbSBhIHJlc291cmNlIG1hbmFnZXIuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZmxhZwlPbmUgb2YgVE1TVEFSVFJTQ0FOLCBUTUVORFJTQ0FOLCBUTU5PRkxBR1MuIFRNTk9GTEFHUyAKLSAgICAgKgkJCW11c3QgYmUgdXNlZCB3aGVuIG5vIG90aGVyIGZsYWdzIGFyZSBzZXQgaW4gZmxhZ3MuCi0gICAgICogQHJldHVybglUaGUgcmVzb3VyY2UgbWFuYWdlciByZXR1cm5zIHplcm8gb3IgbW9yZSBYSURzIGZvciB0aGUgdHJhbnNhY3Rpb24gCi0gICAgICoJCWJyYW5jaGVzIHRoYXQgYXJlIGN1cnJlbnRseSBpbiBhIHByZXBhcmVkIG9yIGhldXJpc3RpY2FsbHkgCi0gICAgICoJCWNvbXBsZXRlZCBzdGF0ZS4gSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgb3BlcmF0aW9uLCB0aGUgcmVzb3VyY2UKLSAgICAgKgkJbWFuYWdlciBzaG91bGQgdGhyb3cgdGhlIGFwcHJvcHJpYXRlIDxjb2RlPlhBRXhjZXB0aW9uPC9jb2RlPi4KKyAgICAgKiBAcGFyYW0gICAgZmxhZyAgICBPbmUgb2YgVE1TVEFSVFJTQ0FOLCBUTUVORFJTQ0FOLCBUTU5PRkxBR1MuIFRNTk9GTEFHUworICAgICAqICAgICAgICAgICAgbXVzdCBiZSB1c2VkIHdoZW4gbm8gb3RoZXIgZmxhZ3MgYXJlIHNldCBpbiBmbGFncy4KKyAgICAgKiBAcmV0dXJuICAgIFRoZSByZXNvdXJjZSBtYW5hZ2VyIHJldHVybnMgemVybyBvciBtb3JlIFhJRHMgZm9yIHRoZSB0cmFuc2FjdGlvbgorICAgICAqICAgICAgICBicmFuY2hlcyB0aGF0IGFyZSBjdXJyZW50bHkgaW4gYSBwcmVwYXJlZCBvciBoZXVyaXN0aWNhbGx5CisgICAgICogICAgICAgIGNvbXBsZXRlZCBzdGF0ZS4gSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgb3BlcmF0aW9uLCB0aGUgcmVzb3VyY2UKKyAgICAgKiAgICAgICAgbWFuYWdlciBzaG91bGQgdGhyb3cgdGhlIGFwcHJvcHJpYXRlIDxjb2RlPlhBRXhjZXB0aW9uPC9jb2RlPi4KICAgICAgKi8KICAgICBwdWJsaWMgWGlkW10gcmVjb3ZlcihpbnQgZmxhZykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIHhhci5yZWNvdmVyKGZsYWcpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEluZm9ybSB0aGUgcmVzb3VyY2UgbWFuYWdlciB0byByb2xsIGJhY2sgd29yayBkb25lIG9uIGJlaGFsZiBvZiBhIHRyYW5zYWN0aW9uIGJyYW5jaAogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCisgICAgICogQHBhcmFtICAgIHhpZCAgICBBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcm9sbGJhY2soWGlkIHhpZCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgLy90aGUgbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQgY2FsbCBoYXMgY29tZSBoZXJlIGJlY2FzdWUKLQkvL3RoZSB0cmFuc2FjdGlvbiAqYWN0dWFsbHkqIGNvbXBsZXRlcyBhZnRlciB0aGUgZmxvdwotCS8vcmVhY2hlcyBoZXJlLiB0aGUgZW5kKCkgbWV0aG9kIG1pZ2h0IG5vdCByZWFsbHkgc2lnbmFsCi0JLy9jb21wbGV0aW9uIG9mIHRyYW5zYWN0aW9uIGluIGNhc2UgdGhlIHRyYW5zYWN0aW9uIGlzCi0JLy9zdXNwZW5kZWQuIEluIGNhc2Ugb2YgdHJhbnNhY3Rpb24gc3VzcGVuc2lvbiwgdGhlIGVuZAotCS8vbWV0aG9kIGlzIHN0aWxsIGNhbGxlZCBieSB0aGUgdHJhbnNhY3Rpb24gbWFuYWdlcgorICAgIC8vdGhlIHRyYW5zYWN0aW9uICphY3R1YWxseSogY29tcGxldGVzIGFmdGVyIHRoZSBmbG93CisgICAgLy9yZWFjaGVzIGhlcmUuIHRoZSBlbmQoKSBtZXRob2QgbWlnaHQgbm90IHJlYWxseSBzaWduYWwKKyAgICAvL2NvbXBsZXRpb24gb2YgdHJhbnNhY3Rpb24gaW4gY2FzZSB0aGUgdHJhbnNhY3Rpb24gaXMKKyAgICAvL3N1c3BlbmRlZC4gSW4gY2FzZSBvZiB0cmFuc2FjdGlvbiBzdXNwZW5zaW9uLCB0aGUgZW5kCisgICAgLy9tZXRob2QgaXMgc3RpbGwgY2FsbGVkIGJ5IHRoZSB0cmFuc2FjdGlvbiBtYW5hZ2VyCiAgICAgICAgIG1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiAgICAgICAgIHhhci5yb2xsYmFjayh4aWQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIGZvciB0aGlzIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCXNlY29uZHMJdGhlIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaW4gc2Vjb25kcy4KLSAgICAgKiBAcmV0dXJuCXRydWUgaWYgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBpcyBzZXQgc3VjY2Vzc2Z1bGx5OyBvdGhlcndpc2UgZmFsc2UuCisgICAgICogQHBhcmFtICAgIHNlY29uZHMgICAgdGhlIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaW4gc2Vjb25kcy4KKyAgICAgKiBAcmV0dXJuICAgIHRydWUgaWYgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBpcyBzZXQgc3VjY2Vzc2Z1bGx5OyBvdGhlcndpc2UgZmFsc2UuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gc2V0VHJhbnNhY3Rpb25UaW1lb3V0KGludCBzZWNvbmRzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICByZXR1cm4geGFyLnNldFRyYW5zYWN0aW9uVGltZW91dChzZWNvbmRzKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTdGFydCB3b3JrIG9uIGJlaGFsZiBvZiBhIHRyYW5zYWN0aW9uIGJyYW5jaCBzcGVjaWZpZWQgaW4geGlkLgogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVzb3VyY2UKLSAgICAgKiBAcmV0dXJuCWZsYWdzCU9uZSBvZiBUTU5PRkxBR1MsIFRNSk9JTiwgb3IgVE1SRVNVTUUKKyAgICAgKiBAcGFyYW0gICAgeGlkICAgIEEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXNvdXJjZQorICAgICAqIEByZXR1cm4gICAgZmxhZ3MgICAgT25lIG9mIFRNTk9GTEFHUywgVE1KT0lOLCBvciBUTVJFU1VNRQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHN0YXJ0KFhpZCB4aWQsIGludCBmbGFncykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgLy9HSkNJTlQKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL2J1aWxkLnhtbAppbmRleCA5Njc4NjhiLi42NDEwNTU3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvYnVpbGQueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxwcm9qZWN0IG5hbWU9ImpkYmNfY29ubmVjdG9yIiBiYXNlZGlyPSIke2dqYy5ob21lfSIgZGVmYXVsdD0iYnVpbGQiPgogICA8cHJvcGVydHkgbmFtZT0icGtnLmRpciIgdmFsdWU9ImNvbS9zdW4vZ2pjL3NwaSIvPgotIAorCiAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iPgogICAgIDxhbnQgYW50ZmlsZT0iYnVpbGQueG1sIiBkaXI9IiR7Z2pjLmhvbWV9L2JpbiIgdGFyZ2V0PSJjbGVhbiIvPgogICA8L3RhcmdldD4KQEAgLTM3LDUgKzM3LDUgQEAKIAogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkMTQiIGRlcGVuZHM9ImNvbXBpbGUxNCIvPgogCi0JPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iYnVpbGQxMywgYnVpbGQxNCIvPgorICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImJ1aWxkMTMsIGJ1aWxkMTQiLz4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9NZXRob2RFeGVjdXRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL01ldGhvZEV4ZWN1dG9yLmphdmEKaW5kZXggY2UzMjFhZi4uOWU3ZjI1MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL01ldGhvZEV4ZWN1dG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL01ldGhvZEV4ZWN1dG9yLmphdmEKQEAgLTI2LDggKzI2LDggQEAKIC8qKgogICogRXhlY3V0ZSB0aGUgbWV0aG9kcyBiYXNlZCBvbiB0aGUgcGFyYW1ldGVycy4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzIzCi0gKiBAYXV0aG9yCUJpbm9kIFAuRworICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8yMworICogQGF1dGhvciAgICBCaW5vZCBQLkcKICAqLwogcHVibGljIGNsYXNzIE1ldGhvZEV4ZWN1dG9yIGltcGxlbWVudHMgamF2YS5pby5TZXJpYWxpemFibGV7CiAKQEAgLTM5LDEzMCArMzksMTMwIEBACiAgICAgLyoqCiAgICAgICogRXhjZXV0ZSBhIHNpbXBsZSBzZXQgTWV0aG9kLgogICAgICAqCi0gICAgICogQHBhcmFtCXZhbHVlCVZhbHVlIHRvIGJlIHNldC4KLSAgICAgKiBAcGFyYW0JbWV0aG9kCTxjb2RlPk1ldGhvZDwvY29kZT4gb2JqZWN0LgotICAgICAqIEBwYXJhbQlvYmoJT2JqZWN0IG9uIHdoaWNoIHRoZSBtZXRob2QgdG8gYmUgZXhlY3V0ZWQuCisgICAgICogQHBhcmFtICAgIHZhbHVlICAgIFZhbHVlIHRvIGJlIHNldC4KKyAgICAgKiBAcGFyYW0gICAgbWV0aG9kICAgIDxjb2RlPk1ldGhvZDwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBvYmogICAgT2JqZWN0IG9uIHdoaWNoIHRoZSBtZXRob2QgdG8gYmUgZXhlY3V0ZWQuCiAgICAgICogQHRocm93cyAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+LCBpbiBjYXNlIG9mIHRoZSBtaXNtYXRjaCBvZiBwYXJhbWV0ZXIgdmFsdWVzIG9yCi0gICAgICoJCWEgc2VjdXJpdHkgdmlvbGF0aW9uLiAgICAgCisgICAgICogICAgICAgIGEgc2VjdXJpdHkgdmlvbGF0aW9uLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJ1bkphdmFCZWFuTWV0aG9kKFN0cmluZyB2YWx1ZSwgTWV0aG9kIG1ldGhvZCwgT2JqZWN0IG9iaikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewotICAgIAlpZiAodmFsdWU9PW51bGwgfHwgdmFsdWUudHJpbSgpLmVxdWFscygiIikpIHsKLSAgICAJICAgIHJldHVybjsKLSAgICAJfQotICAgIAl0cnkgewotICAgIAkgICAgQ2xhc3NbXSBwYXJhbWV0ZXJzID0gbWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCk7Ci0gICAgCSAgICBpZiAoIHBhcmFtZXRlcnMubGVuZ3RoID09IDEpIHsKLSAgICAJICAgICAgICBPYmplY3RbXSB2YWx1ZXMgPSBuZXcgT2JqZWN0WzFdOwotICAgIAkgICAgCXZhbHVlc1swXSA9IGNvbnZlcnRUeXBlKHBhcmFtZXRlcnNbMF0sIHZhbHVlKTsKLSAgICAJICAgIAltZXRob2QuaW52b2tlKG9iaiwgdmFsdWVzKTsKLSAgICAJICAgIH0KLSAgICAJfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBpYWUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWFlKTsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKLSAgICAJfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGllKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGllKTsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQXJndW1lbnRzIGFyZSB3cm9uZyBmb3IgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOyAgICAJCi0gICAgCX0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gaXRlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGl0ZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7ICAgIAkKLSAgICAJfQorICAgICAgICBpZiAodmFsdWU9PW51bGwgfHwgdmFsdWUudHJpbSgpLmVxdWFscygiIikpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0cnkgeworICAgICAgICAgICAgQ2xhc3NbXSBwYXJhbWV0ZXJzID0gbWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCk7CisgICAgICAgICAgICBpZiAoIHBhcmFtZXRlcnMubGVuZ3RoID09IDEpIHsKKyAgICAgICAgICAgICAgICBPYmplY3RbXSB2YWx1ZXMgPSBuZXcgT2JqZWN0WzFdOworICAgICAgICAgICAgICAgIHZhbHVlc1swXSA9IGNvbnZlcnRUeXBlKHBhcmFtZXRlcnNbMF0sIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBtZXRob2QuaW52b2tlKG9iaiwgdmFsdWVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBpYWUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWFlKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKKyAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGllKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGllKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQXJndW1lbnRzIGFyZSB3cm9uZyBmb3IgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOworICAgICAgICB9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGl0ZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpdGUpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOworICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogRXhlY3V0ZXMgdGhlIG1ldGhvZC4gICAgIAorICAgICAqIEV4ZWN1dGVzIHRoZSBtZXRob2QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWV0aG9kIDxjb2RlPk1ldGhvZDwvY29kZT4gb2JqZWN0LgotICAgICAqIEBwYXJhbQlvYmoJT2JqZWN0IG9uIHdoaWNoIHRoZSBtZXRob2QgdG8gYmUgZXhlY3V0ZWQuCi0gICAgICogQHBhcmFtCXZhbHVlcwlQYXJhbWV0ZXIgdmFsdWVzIGZvciBleGVjdXRpbmcgdGhlIG1ldGhvZC4KKyAgICAgKiBAcGFyYW0gICAgbWV0aG9kIDxjb2RlPk1ldGhvZDwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBvYmogICAgT2JqZWN0IG9uIHdoaWNoIHRoZSBtZXRob2QgdG8gYmUgZXhlY3V0ZWQuCisgICAgICogQHBhcmFtICAgIHZhbHVlcyAgICBQYXJhbWV0ZXIgdmFsdWVzIGZvciBleGVjdXRpbmcgdGhlIG1ldGhvZC4KICAgICAgKiBAdGhyb3dzICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4sIGluIGNhc2Ugb2YgdGhlIG1pc21hdGNoIG9mIHBhcmFtZXRlciB2YWx1ZXMgb3IKLSAgICAgKgkJYSBzZWN1cml0eSB2aW9sYXRpb24uCisgICAgICogICAgICAgIGEgc2VjdXJpdHkgdmlvbGF0aW9uLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJ1bk1ldGhvZChNZXRob2QgbWV0aG9kLCBPYmplY3Qgb2JqLCBWZWN0b3IgdmFsdWVzKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb257Ci0gICAgCXRyeSB7Ci0JICAgIENsYXNzW10gcGFyYW1ldGVycyA9IG1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpOwotCSAgICBpZiAodmFsdWVzLnNpemUoKSAhPSBwYXJhbWV0ZXJzLmxlbmd0aCkgewotCSAgICAgICAgcmV0dXJuOwotCSAgICB9Ci0gICAgCSAgICBPYmplY3RbXSBhY3R1YWxWYWx1ZXMgPSBuZXcgT2JqZWN0W3BhcmFtZXRlcnMubGVuZ3RoXTsKLSAgICAJICAgIGZvciAoaW50IGkgPTA7IGk8cGFyYW1ldGVycy5sZW5ndGggOyBpKyspIHsKLSAgICAJICAgIAlTdHJpbmcgdmFsID0gKFN0cmluZykgdmFsdWVzLmdldChpKTsKLSAgICAJICAgIAlpZiAodmFsLnRyaW0oKS5lcXVhbHMoIk5VTEwiKSkgewotICAgIAkgICAgCSAgICBhY3R1YWxWYWx1ZXNbaV0gPSBudWxsOwotICAgIAkgICAgCX0gZWxzZSB7Ci0gICAgCSAgICAJICAgIGFjdHVhbFZhbHVlc1tpXSA9IGNvbnZlcnRUeXBlKHBhcmFtZXRlcnNbaV0sIHZhbCk7Ci0gICAgCSAgICAJfQotICAgIAkgICAgfQotICAgIAkgICAgbWV0aG9kLmludm9rZShvYmosIGFjdHVhbFZhbHVlcyk7Ci0gICAgCX1jYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBpYWUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWFlKTsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKLSAgICAJfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGllKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGllKTsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQXJndW1lbnRzIGFyZSB3cm9uZyBmb3IgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOyAgICAJCi0gICAgCX0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gaXRlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGl0ZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7ICAgIAkKLSAgICAJfQorICAgICAgICB0cnkgeworICAgICAgICBDbGFzc1tdIHBhcmFtZXRlcnMgPSBtZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKTsKKyAgICAgICAgaWYgKHZhbHVlcy5zaXplKCkgIT0gcGFyYW1ldGVycy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgT2JqZWN0W10gYWN0dWFsVmFsdWVzID0gbmV3IE9iamVjdFtwYXJhbWV0ZXJzLmxlbmd0aF07CisgICAgICAgICAgICBmb3IgKGludCBpID0wOyBpPHBhcmFtZXRlcnMubGVuZ3RoIDsgaSsrKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIHZhbCA9IChTdHJpbmcpIHZhbHVlcy5nZXQoaSk7CisgICAgICAgICAgICAgICAgaWYgKHZhbC50cmltKCkuZXF1YWxzKCJOVUxMIikpIHsKKyAgICAgICAgICAgICAgICAgICAgYWN0dWFsVmFsdWVzW2ldID0gbnVsbDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBhY3R1YWxWYWx1ZXNbaV0gPSBjb252ZXJ0VHlwZShwYXJhbWV0ZXJzW2ldLCB2YWwpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1ldGhvZC5pbnZva2Uob2JqLCBhY3R1YWxWYWx1ZXMpOworICAgICAgICB9Y2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gaWFlKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGlhZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFyZ3VtZW50cyBhcmUgd3JvbmcgZm9yIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKKyAgICAgICAgfSBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBpdGUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaXRlKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnZlcnRzIHRoZSB0eXBlIGZyb20gU3RyaW5nIHRvIHRoZSBDbGFzcyB0eXBlLgogICAgICAqCi0gICAgICogQHBhcmFtCXR5cGUJCUNsYXNzIG5hbWUgdG8gd2hpY2ggdGhlIGNvbnZlcnNpb24gaXMgcmVxdWlyZWQuCi0gICAgICogQHBhcmFtCXBhcmFtZXRlcglTdHJpbmcgdmFsdWUgdG8gYmUgY29udmVydGVkLgotICAgICAqIEByZXR1cm4JQ29udmVydGVkIHZhbHVlLgorICAgICAqIEBwYXJhbSAgICB0eXBlICAgICAgICBDbGFzcyBuYW1lIHRvIHdoaWNoIHRoZSBjb252ZXJzaW9uIGlzIHJlcXVpcmVkLgorICAgICAqIEBwYXJhbSAgICBwYXJhbWV0ZXIgICAgU3RyaW5nIHZhbHVlIHRvIGJlIGNvbnZlcnRlZC4KKyAgICAgKiBAcmV0dXJuICAgIENvbnZlcnRlZCB2YWx1ZS4KICAgICAgKiBAdGhyb3dzICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4sIGluIGNhc2Ugb2YgdGhlIG1pc21hdGNoIG9mIHBhcmFtZXRlciB2YWx1ZXMgb3IKLSAgICAgKgkJYSBzZWN1cml0eSB2aW9sYXRpb24uICAgICAKKyAgICAgKiAgICAgICAgYSBzZWN1cml0eSB2aW9sYXRpb24uCiAgICAgICovCiAgICAgcHJpdmF0ZSBPYmplY3QgY29udmVydFR5cGUoQ2xhc3MgdHlwZSwgU3RyaW5nIHBhcmFtZXRlcikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewotICAgIAl0cnkgewotICAgIAkgICAgU3RyaW5nIHR5cGVOYW1lID0gdHlwZS5nZXROYW1lKCk7Ci0gICAgCSAgICBpZiAoIHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLlN0cmluZyIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLk9iamVjdCIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIHBhcmFtZXRlcjsKLSAgICAJICAgIH0KLSAgICAJCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJpbnQiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5JbnRlZ2VyIikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IEludGVnZXIocGFyYW1ldGVyKTsKLSAgICAJICAgIH0KLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygic2hvcnQiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5TaG9ydCIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBTaG9ydChwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgICAJICAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJieXRlIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuQnl0ZSIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBCeXRlKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgIAkgICAgICAgIAkgICAgCi0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImxvbmciKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5Mb25nIikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IExvbmcocGFyYW1ldGVyKTsKLSAgICAJICAgIH0gICAgCSAgICAgICAgCSAgICAgICAJICAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJmbG9hdCIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkZsb2F0IikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IEZsb2F0KHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgCi0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImRvdWJsZSIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkRvdWJsZSIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBEb3VibGUocGFyYW1ldGVyKTsKLSAgICAJICAgIH0gICAgCSAgICAgICAgCSAgICAgICAJICAgICAJICAgICAgICAJICAgICAgIAkgICAgCi0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImphdmEubWF0aC5CaWdEZWNpbWFsIikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IGphdmEubWF0aC5CaWdEZWNpbWFsKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgIAkgICAgICAgIAkgICAgICAgCSAgICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiamF2YS5tYXRoLkJpZ0ludGVnZXIiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgamF2YS5tYXRoLkJpZ0ludGVnZXIocGFyYW1ldGVyKTsKLSAgICAJICAgIH0gICAgCSAgICAgICAgCSAgICAgICAJICAgICAgICAJICAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJib29sZWFuIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuQm9vbGVhbiIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBCb29sZWFuKHBhcmFtZXRlcik7Ci0gICAgICAgICAgICB9CQkKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFN0cmluZyB0eXBlTmFtZSA9IHR5cGUuZ2V0TmFtZSgpOworICAgICAgICAgICAgaWYgKCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5TdHJpbmciKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5PYmplY3QiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBwYXJhbWV0ZXI7CisgICAgICAgICAgICB9CiAKLSAgICAJICAgIHJldHVybiBwYXJhbWV0ZXI7Ci0gICAgCX0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfbmZlIiwgcGFyYW1ldGVyKTsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihwYXJhbWV0ZXIrIjogTm90IGEgdmFsaWQgdmFsdWUgZm9yIHRoaXMgbWV0aG9kICIpOwotICAgIAl9CisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJpbnQiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5JbnRlZ2VyIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEludGVnZXIocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygic2hvcnQiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5TaG9ydCIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTaG9ydChwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJieXRlIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuQnl0ZSIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCeXRlKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImxvbmciKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5Mb25nIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IExvbmcocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiZmxvYXQiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5GbG9hdCIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdChwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJkb3VibGUiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5Eb3VibGUiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRG91YmxlKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImphdmEubWF0aC5CaWdEZWNpbWFsIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGphdmEubWF0aC5CaWdEZWNpbWFsKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImphdmEubWF0aC5CaWdJbnRlZ2VyIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGphdmEubWF0aC5CaWdJbnRlZ2VyKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImJvb2xlYW4iKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5Cb29sZWFuIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJvb2xlYW4ocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHBhcmFtZXRlcjsKKyAgICAgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19uZmUiLCBwYXJhbWV0ZXIpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHBhcmFtZXRlcisiOiBOb3QgYSB2YWxpZCB2YWx1ZSBmb3IgdGhpcyBtZXRob2QgIik7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL1NlY3VyaXR5VXRpbHMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9TZWN1cml0eVV0aWxzLmphdmEKaW5kZXggZmMxNDliZi4uZjAwOGU3ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL1NlY3VyaXR5VXRpbHMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvU2VjdXJpdHlVdGlscy5qYXZhCkBAIC0yOSwzNiArMjksMzYgQEAKIC8qKgogICogU2VjdXJpdHlVdGlscyBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzIyCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8yMgorICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogcHVibGljIGNsYXNzIFNlY3VyaXR5VXRpbHMgewogCiAgICAgLyoqCi0gICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QsIGdpdmVuIAotICAgICAqIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LCBzdWJqZWN0IGFuZCB0aGUgCi0gICAgICogPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPi4gSXQgZmlyc3QgY2hlY2tzIGlmIHRoZSAKLSAgICAgKiA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IGlzIG51bGwgb3Igbm90LiBJZiBpdCBpcyBub3QgbnVsbCwgCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QsIGdpdmVuCisgICAgICogdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4sIHN1YmplY3QgYW5kIHRoZQorICAgICAqIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4uIEl0IGZpcnN0IGNoZWNrcyBpZiB0aGUKKyAgICAgKiA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IGlzIG51bGwgb3Igbm90LiBJZiBpdCBpcyBub3QgbnVsbCwKICAgICAgKiBpdCBjb25zdHJ1Y3RzIGEgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3Qgd2l0aAogICAgICAqIHRoZSB1c2VyIGFuZCBwYXNzd29yZCBmaWVsZHMgZnJvbSB0aGUgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBhbmQgcmV0dXJucyB0aGlzCi0gICAgICogPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QuIElmIHRoZSA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IAotICAgICAqIGlzIG51bGwsIGl0IHJldHJpZXZlcyB0aGUgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3RzIGZyb20gCisgICAgICogPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QuIElmIHRoZSA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+CisgICAgICogaXMgbnVsbCwgaXQgcmV0cmlldmVzIHRoZSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdHMgZnJvbQogICAgICAqIHRoZSA8Y29kZT5TdWJqZWN0PC9jb2RlPiBwYXJhbWV0ZXIgYW5kIHJldHVybnMgdGhlIGZpcnN0Ci0gICAgICogPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3Qgd2hpY2ggY29udGFpbnMgYSAKKyAgICAgKiA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdCB3aGljaCBjb250YWlucyBhCiAgICAgICogPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiwgaW5zdGFuY2UgZXF1aXZhbGVudAogICAgICAqIHRvIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LCBwYXJhbWV0ZXIuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWNmCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4KLSAgICAgKiBAcGFyYW0Jc3ViamVjdAk8Y29kZT5TdWJqZWN0PC9jb2RlPgotICAgICAqIEBwYXJhbQlpbmZvCTxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4KLSAgICAgKiBAcmV0dXJuCTxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPglnZW5lcmljIGV4Y2VwdGlvbiBpZiBvcGVyYXRpb24gZmFpbHMKLSAgICAgKiBAdGhyb3dzCTxjb2RlPlNlY3VyaXR5RXhjZXB0aW9uPC9jb2RlPglpZiBhY2Nlc3MgdG8gdGhlIDxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIGlzIGRlbmllZAorICAgICAqIEBwYXJhbSAgICBtY2YgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBzdWJqZWN0ICAgIDxjb2RlPlN1YmplY3Q8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGluZm8gICAgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+ICAgIGdlbmVyaWMgZXhjZXB0aW9uIGlmIG9wZXJhdGlvbiBmYWlscworICAgICAqIEB0aHJvd3MgICAgPGNvZGU+U2VjdXJpdHlFeGNlcHRpb248L2NvZGU+ICAgIGlmIGFjY2VzcyB0byB0aGUgPGNvZGU+U3ViamVjdDwvY29kZT4gaW5zdGFuY2UgaXMgZGVuaWVkCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBQYXNzd29yZENyZWRlbnRpYWwgZ2V0UGFzc3dvcmRDcmVkZW50aWFsKGZpbmFsIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2YsCiAgICAgICAgICBmaW5hbCBTdWJqZWN0IHN1YmplY3QsIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbmZvKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogCi0JaWYgKGluZm8gPT0gbnVsbCkgeworICAgIGlmIChpbmZvID09IG51bGwpIHsKICAgICAgICAgICAgIGlmIChzdWJqZWN0ID09IG51bGwpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC04OSwxNCArODksMTQgQEAKICAgICAgICAgICAgIHJldHVybiBwYzsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0d28gc3RyaW5ncyBhcmUgZXF1YWw7IGZhbHNlIG90aGVyd2lzZQotICAgICAqIAotICAgICAqIEBwYXJhbQlzdHIxCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAcGFyYW0Jc3RyMgk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHJldHVybgl0cnVlCWlmIHRoZSB0d28gc3RyaW5ncyBhcmUgZXF1YWwKLSAgICAgKiAgICAgICAgCWZhbHNlCW90aGVyd2lzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIHN0cjEgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBzdHIyICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHRydWUgICAgaWYgdGhlIHR3byBzdHJpbmdzIGFyZSBlcXVhbAorICAgICAqICAgICAgICAgICAgZmFsc2UgICAgb3RoZXJ3aXNlCiAgICAgICovCiAgICAgc3RhdGljIHByaXZhdGUgYm9vbGVhbiBpc0VxdWFsKFN0cmluZyBzdHIxLCBTdHJpbmcgc3RyMikgewogICAgICAgICBpZiAoc3RyMSA9PSBudWxsKSB7CkBAIC0xMDksMTAgKzEwOSwxMCBAQAogICAgIC8qKgogICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0d28gPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3RzIGFyZSBlcXVhbDsgZmFsc2Ugb3RoZXJ3aXNlCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcEMxCTxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KLSAgICAgKiBAcGFyYW0JcEMyCTxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KLSAgICAgKiBAcmV0dXJuCXRydWUJaWYgdGhlIHR3byBQYXNzd29yZENyZWRlbnRpYWxzIGFyZSBlcXVhbAotICAgICAqICAgICAgICAJZmFsc2UJb3RoZXJ3aXNlCisgICAgICogQHBhcmFtICAgIHBDMSAgICA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHBDMiAgICA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+CisgICAgICogQHJldHVybiAgICB0cnVlICAgIGlmIHRoZSB0d28gUGFzc3dvcmRDcmVkZW50aWFscyBhcmUgZXF1YWwKKyAgICAgKiAgICAgICAgICAgIGZhbHNlICAgIG90aGVyd2lzZQogICAgICAqLwogICAgIHN0YXRpYyBwdWJsaWMgYm9vbGVhbiBpc1Bhc3N3b3JkQ3JlZGVudGlhbEVxdWFsKFBhc3N3b3JkQ3JlZGVudGlhbCBwQzEsIFBhc3N3b3JkQ3JlZGVudGlhbCBwQzIpIHsKICAgICAgICAgaWYgKHBDMSA9PSBwQzIpCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL2J1aWxkLnhtbAppbmRleCBhNTViYmYwLi5mMDYwZTdkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9idWlsZC54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPHByb2plY3QgbmFtZT0iamRiY19jb25uZWN0b3IiIGJhc2VkaXI9Ii4iIGRlZmF1bHQ9ImJ1aWxkIj4KICAgPHByb3BlcnR5IG5hbWU9InBrZy5kaXIiIHZhbHVlPSJjb20vc3VuL2dqYy91dGlsIi8+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iPgogICAgIDxhbnQgYW50ZmlsZT0iYnVpbGQueG1sIiBkaXI9IiR7Z2pjLmhvbWV9L2JpbiIgdGFyZ2V0PSJjbGVhbiIvPgogICA8L3RhcmdldD4KQEAgLTMzLDcgKzMzLDcgQEAKICAgICAgIDxqYXIgamFyZmlsZT0iJHtkaXN0LmRpcn0vJHtwa2cuZGlyfS91dGlsLmphciIgYmFzZWRpcj0iJHtjbGFzcy5kaXJ9IgogICAgICAgICBpbmNsdWRlcz0iJHtwa2cuZGlyfS8qKi8qIi8+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUxMyIgZGVwZW5kcz0iY29tcGlsZSIvPgogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUxNCIgZGVwZW5kcz0iY29tcGlsZSIvPgogCkBAIC00NCw1ICs0NCw1IEBACiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQxNCIgZGVwZW5kcz0iY29tcGlsZTE0LCBwYWNrYWdlMTQiLz4KIAogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJidWlsZDEzLCBidWlsZDE0Ii8+Ci0gIAorCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvc2VydmxldC9TaW1wbGVCYW5rU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3NlcnZsZXQvU2ltcGxlQmFua1NlcnZsZXQuamF2YQppbmRleCBmZjc2ZjAwLi44ODJhZGE0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvc2VydmxldC9TaW1wbGVCYW5rU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9zZXJ2bGV0L1NpbXBsZUJhbmtTZXJ2bGV0LmphdmEKQEAgLTE3LDE3ICsxNywxNyBAQAogcGFja2FnZSBzYW1wbGVzLmVqYi5zdWJjbGFzc2luZy5zZXJ2bGV0OwogCiBpbXBvcnQgamF2YS5pby4qOwotaW1wb3J0IGphdmEudXRpbC4qOyAKLWltcG9ydCBqYWthcnRhLnNlcnZsZXQuKjsgCi1pbXBvcnQgamF2YXgubmFtaW5nLio7IAotaW1wb3J0IGpha2FydGEuc2VydmxldC5odHRwLio7IAoraW1wb3J0IGphdmEudXRpbC4qOworaW1wb3J0IGpha2FydGEuc2VydmxldC4qOworaW1wb3J0IGphdmF4Lm5hbWluZy4qOworaW1wb3J0IGpha2FydGEuc2VydmxldC5odHRwLio7CiBpbXBvcnQgamF2YXgucm1pLlBvcnRhYmxlUmVtb3RlT2JqZWN0OwotaW1wb3J0IGpha2FydGEuZWpiLio7IAoraW1wb3J0IGpha2FydGEuZWpiLio7CiAKLWltcG9ydCBzYW1wbGVzLmVqYi5zdWJjbGFzc2luZy5lamIuKjsgCitpbXBvcnQgc2FtcGxlcy5lamIuc3ViY2xhc3NpbmcuZWpiLio7CiBpbXBvcnQgY29tLnN1bi5qZGJjcmEuc3BpLkpkYmNTZXR1cEFkbWluOwogCi1wdWJsaWMgY2xhc3MgU2ltcGxlQmFua1NlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7ICAKK3B1YmxpYyBjbGFzcyBTaW1wbGVCYW5rU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIAogCiAgIEluaXRpYWxDb250ZXh0IGluaXRDb250ZXh0ID0gbnVsbDsKQEAgLTQzLDE0ICs0MywxNCBAQAogICB7CiAgIH0KIAotICBwdWJsaWMgdm9pZCBkb0dldCAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgCi0gICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7IAorICBwdWJsaWMgdm9pZCBkb0dldCAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkKKyAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICBkb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOwotICB9ICAKKyAgfQogCi0gIC8qKiBoYW5kbGVzIHRoZSBIVFRQIFBPU1Qgb3BlcmF0aW9uICoqLyAKLSAgcHVibGljIHZvaWQgZG9Qb3N0IChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCxIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSAKLSAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgCisgIC8qKiBoYW5kbGVzIHRoZSBIVFRQIFBPU1Qgb3BlcmF0aW9uICoqLworICBwdWJsaWMgdm9pZCBkb1Bvc3QgKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCisgICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgZG9Mb29rdXAoKTsKICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNpbXBsZUJhbmtTZXJ2bGV0IGlzIGV4ZWN1dGluZyIpOwogICAgIFN0cmluZyBTU04gPSByZXF1ZXN0LmdldFBhcmFtZXRlcigiU1NOIik7CkBAIC02NiwxNCArNjYsMTQgQEAKICAgICBTdHJpbmcgemlwQ29kZSA9ICIiOwogICAgIGxvbmcgY3VycmVudFNhdmluZ3NCYWxhbmNlID0gMDsKICAgICBsb25nIGN1cnJlbnRDaGVja2luZ0JhbGFuY2UgPSAwOwotICAgICAKKwogICAgIFN0cmluZyBhY3Rpb24gPSByZXF1ZXN0LmdldFBhcmFtZXRlcigiYWN0aW9uIik7CiAgICAgaWYgKGFjdGlvbi5lcXVhbHMoIkNyZWF0ZSIpKQogICAgIHsKICAgICAgIG1lc3NhZ2UgPSAiQWRkIEN1c3RvbWVyIjsKICAgICAgIGpzcCA9ICIvU2ltcGxlQmFua0FkZC5qc3AiOwogICAgIH0KLSAgICBlbHNlIGlmIChhY3Rpb24uZXF1YWxzKCJBZGQgQ3VzdG9tZXIiKSkgCisgICAgZWxzZSBpZiAoYWN0aW9uLmVxdWFscygiQWRkIEN1c3RvbWVyIikpCiAgICAgewogICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBZGQgQ3VzdG9tZXIgYnV0dG9uIHByZXNzZWQiKTsKICAgICAgIFNTTiA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJTU04iKTsKQEAgLTkwLDcgKzkwLDcgQEAKICAgICAgICAgY3VzdG9tZXJTYXZpbmdzID0gY3VzdG9tZXJTYXZpbmdzSG9tZS5jcmVhdGUoU1NOLCBsYXN0TmFtZSwgZmlyc3ROYW1lLCBhZGRyZXNzMSwgYWRkcmVzczIsIGNpdHksIHN0YXRlLCB6aXBDb2RlKTsKICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ291bGQgbm90IGNyZWF0ZSB0aGUgY3VzdG9tZXIgc2F2aW5ncyByZW1vdGUgYmVhbiA6ICIgKyBlLnRvU3RyaW5nKCkpOwotCXRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIC8vcmV0dXJuOwogICAgICAgfQogICAgICAgbWVzc2FnZSA9ICJDdXN0b21lciBBZGRlZC4iOwpAQCAtMTAzLDcgKzEwMyw3IEBACiAgICAgICAgIGN1c3RvbWVyU2F2aW5ncyA9IGN1c3RvbWVyU2F2aW5nc0hvbWUuZmluZEJ5UHJpbWFyeUtleShTU04pOwogICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb3VsZCBub3QgZmluZCB0aGUgY3VzdG9tZXIgcmVtb3RlIGJlYW4gOiAiICsgZS50b1N0cmluZygpKTsKLQl0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CisgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAvL3JldHVybjsKICAgICAgIH0KICAgICAgIGpzcCA9ICIvU2ltcGxlQmFua0VkaXQuanNwIjsKQEAgLTExNSw3ICsxMTUsNyBAQAogICAgICAgICBjdXN0b21lclNhdmluZ3MgPSBjdXN0b21lclNhdmluZ3NIb21lLmZpbmRCeVByaW1hcnlLZXkoU1NOKTsKICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ291bGQgbm90IGZpbmQgdGhlIGN1c3RvbWVyIHNhdmluZ3MgcmVtb3RlIGJlYW4gOiAiICsgZS50b1N0cmluZygpKTsKLQl0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CisgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAvL3JldHVybjsKICAgICAgIH0KICAgICAgIG1lc3NhZ2UgPSAiRGVsZXRlIEN1c3RvbWVyIjsKQEAgLTEyNywxMiArMTI3LDEyIEBACiAgICAgICAgIGN1c3RvbWVyU2F2aW5nc0hvbWUuZmluZEJ5UHJpbWFyeUtleShTU04pLnJlbW92ZSgpOwogICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb3VsZCBub3QgZGVsZXRlIHRoZSBjdXN0b21lciBzYXZpbmdzIGJlYW4gOiAiICsgZS50b1N0cmluZygpKTsKLQl0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CisgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAvL3JldHVybjsKICAgICAgIH0KICAgICAgIG1lc3NhZ2UgPSAiQ3VzdG9tZXIgRGVsZXRlZC4iOwogICAgICAganNwID0gIi9TaW1wbGVCYW5rTWVzc2FnZS5qc3AiOwotICAgIH0gIAorICAgIH0KIAogCiAgICAgZWxzZSBpZiAoYWN0aW9uLmVxdWFscygiVXBkYXRlIikpCkBAIC0xNDIsNyArMTQyLDcgQEAKICAgICAgICAgY3VzdG9tZXJTYXZpbmdzID0gKEN1c3RvbWVyU2F2aW5ncyljdXN0b21lclNhdmluZ3NIb21lLmZpbmRCeVByaW1hcnlLZXkoU1NOKTsKICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ291bGQgbm90IGZpbmQgdGhlIGN1c3RvbWVyIHNhdmluZ3MgcmVtb3RlIGJlYW4gOiAiICsgZS50b1N0cmluZygpKTsKLQl0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CisgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAvL3JldHVybjsKICAgICAgIH0KIApAQCAtMTUxLDcgKzE1MSw3IEBACiAgICAgICAgIGN1c3RvbWVyQ2hlY2tpbmcgPSAoQ3VzdG9tZXJDaGVja2luZyljdXN0b21lckNoZWNraW5nSG9tZS5maW5kQnlQcmltYXJ5S2V5KFNTTik7CiAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvdWxkIG5vdCBmaW5kIHRoZSBjdXN0b21lciBjaGVja2luZyByZW1vdGUgYmVhbiA6ICIgKyBlLnRvU3RyaW5nKCkpOwotCXRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIC8vcmV0dXJuOwogICAgICAgfQogCkBAIC0yMTEsOSArMjExLDkgQEAKICAgICBSZXF1ZXN0RGlzcGF0Y2hlciBkaXNwYXRjaGVyID0gZ2V0U2VydmxldENvbnRleHQoKS5nZXRSZXF1ZXN0RGlzcGF0Y2hlcihqc3ApOwogICAgIGRpc3BhdGNoZXIuaW5jbHVkZShyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgcmV0dXJuOwotICB9IAorICB9CiAKLSAgcHVibGljIHZvaWQgZG9Mb29rdXAoKSAKKyAgcHVibGljIHZvaWQgZG9Mb29rdXAoKQogICB7CiAgICAgdHJ5IHsKICAgICAgIGluaXRDb250ZXh0ID0gbmV3IGphdmF4Lm5hbWluZy5Jbml0aWFsQ29udGV4dCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3NxbC9kcm9wQmFua1RhYmxlcy5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvc3FsL2Ryb3BCYW5rVGFibGVzLnNxbAppbmRleCBkZjlkZjM0Li4zM2E3MDY5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvc3FsL2Ryb3BCYW5rVGFibGVzLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvc3FsL2Ryb3BCYW5rVGFibGVzLnNxbApAQCAtMSArMSBAQAotZHJvcCB0YWJsZSBjdXN0b21lcjI7DQorZHJvcCB0YWJsZSBjdXN0b21lcjI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvc3FsL3NpbXBsZUJhbmsuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL2VtYmVkZGVkd2ViL3NxbC9zaW1wbGVCYW5rLnNxbAppbmRleCA2ZWY3NWMzLi5lMTdhZWY0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvZW1iZWRkZWR3ZWIvc3FsL3NpbXBsZUJhbmsuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9lbWJlZGRlZHdlYi9zcWwvc2ltcGxlQmFuay5zcWwKQEAgLTEsMTQgKzEsMTQgQEAKIGRyb3AgdGFibGUgY3VzdG9tZXIyOwogCiBjcmVhdGUgdGFibGUgY3VzdG9tZXIyICgKLSAgU1NOIHZhcmNoYXIyKDkpLCAKLSAgbGFzdE5BbWUgdmFyY2hhcjIoMjApLCAKLSAgZmlyc3RuYW1lIHZhcmNoYXIyKDIwKSwgCi0gIGFkZHJlc3MxIHZhcmNoYXIyICgyMCksIAotICBhZGRyZXNzMiB2YXJjaGFyMigyMCksIAotICBjaXR5IHZhcmNoYXIyKDEwKSwgCi0gIHN0YXRlIHZhcmNoYXIyKDEwKSwgCi0gIHppcGNvZGUgdmFyY2hhcjIoNSksIAorICBTU04gdmFyY2hhcjIoOSksCisgIGxhc3ROQW1lIHZhcmNoYXIyKDIwKSwKKyAgZmlyc3RuYW1lIHZhcmNoYXIyKDIwKSwKKyAgYWRkcmVzczEgdmFyY2hhcjIgKDIwKSwKKyAgYWRkcmVzczIgdmFyY2hhcjIoMjApLAorICBjaXR5IHZhcmNoYXIyKDEwKSwKKyAgc3RhdGUgdmFyY2hhcjIoMTApLAorICB6aXBjb2RlIHZhcmNoYXIyKDUpLAogICBzYXZpbmdzYmFsYW5jZSBudW1iZXIoMTApICwKICAgY2hlY2tpbmdiYWxhbmNlIG51bWJlcigxMCkgKTsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21hcmtjb25uZWN0aW9uYXNiYWQueGEucmVzb3VyY2VzLXhtbC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21hcmtjb25uZWN0aW9uYXNiYWQueGEucmVzb3VyY2VzLXhtbC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGFmMjRkYWYuLjIwYmM4NWQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tYXJrY29ubmVjdGlvbmFzYmFkLnhhLnJlc291cmNlcy14bWwvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbWFya2Nvbm5lY3Rpb25hc2JhZC54YS5yZXNvdXJjZXMteG1sL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE5ICsxNSwxOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iamRiYy1tYXJrY29ubmVjdGlvbmFzYmFkLnhhIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIxMiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21hcmtjb25uZWN0aW9uYXNiYWQueGEucmVzb3VyY2VzLXhtbC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbWFya2Nvbm5lY3Rpb25hc2JhZC54YS5yZXNvdXJjZXMteG1sL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBlOTVhN2QwLi4yOGRiZmI1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbWFya2Nvbm5lY3Rpb25hc2JhZC54YS5yZXNvdXJjZXMteG1sL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbWFya2Nvbm5lY3Rpb25hc2JhZC54YS5yZXNvdXJjZXMteG1sL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMTE3LDE0ICsxMTcsMTQgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCIgTWFyay1Db25uZWN0aW9uLUFzLUJhZCBbTG9jYWwtWEEgLVNoYXJlYWJsZS1TaGFyZWFibGUgLSBSZWFkLVdyaXRlXSA6ICIsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotICAgICAgICAgaWYgKHNpbXBsZUJNUC50ZXN0MTEoKSAmJiBnZXRNb25pdG9yYWJsZVByb3BlcnR5T2ZDb25uZWN0aW9uUG9vbCgiamF2YTphcHAvamRiYy1zaGFyZWFibGUtcG9vbCIpID09IDE1ICYmIAorICAgICAgICAgaWYgKHNpbXBsZUJNUC50ZXN0MTEoKSAmJiBnZXRNb25pdG9yYWJsZVByb3BlcnR5T2ZDb25uZWN0aW9uUG9vbCgiamF2YTphcHAvamRiYy1zaGFyZWFibGUtcG9vbCIpID09IDE1ICYmCiAgICAgICAgICAgICAgICAgIGdldE1vbml0b3JhYmxlUHJvcGVydHlPZkNvbm5lY3Rpb25Qb29sKCJqYXZhOmFwcC9qZGJjLWxvY2FsLXBvb2wiKSA9PSAzKSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiIE1hcmstQ29ubmVjdGlvbi1Bcy1CYWQgW0xvY2FsLVhBIC1TaGFyZWFibGUtU2hhcmVhYmxlIC0gUmVhZC1SZWFkXSA6ICIsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiIE1hcmstQ29ubmVjdGlvbi1Bcy1CYWQgW0xvY2FsLVhBIC1TaGFyZWFibGUtU2hhcmVhYmxlIC0gUmVhZC1SZWFkXSA6ICIsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotICAgICAgICAgaWYgKHNpbXBsZUJNUC50ZXN0MTIoKSAmJiBnZXRNb25pdG9yYWJsZVByb3BlcnR5T2ZDb25uZWN0aW9uUG9vbCgiamF2YTphcHAvamRiYy1zaGFyZWFibGUtcG9vbCIpID09IDE2ICYmIAorICAgICAgICAgaWYgKHNpbXBsZUJNUC50ZXN0MTIoKSAmJiBnZXRNb25pdG9yYWJsZVByb3BlcnR5T2ZDb25uZWN0aW9uUG9vbCgiamF2YTphcHAvamRiYy1zaGFyZWFibGUtcG9vbCIpID09IDE2ICYmCiAgICAgICAgICAgICAgICAgIGdldE1vbml0b3JhYmxlUHJvcGVydHlPZkNvbm5lY3Rpb25Qb29sKCJqYXZhOmFwcC9qZGJjLWxvY2FsLXBvb2wiKSA9PSA0KSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiIE1hcmstQ29ubmVjdGlvbi1Bcy1CYWQgW0xvY2FsLVhBIC1TaGFyZWFibGUtU2hhcmVhYmxlIC0gV3JpdGUtUmVhZF0gOiAiLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGVsc2UgewpAQCAtMTM5LDIwICsxMzksMjAgQEAKIAogICAgIHB1YmxpYyBpbnQgZ2V0TW9uaXRvcmFibGVQcm9wZXJ0eU9mQ29ubmVjdGlvblBvb2woU3RyaW5nIHBvb2xOYW1lKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAotCWZpbmFsIFN0cmluZyB1cmxTdHIgPSAic2VydmljZTpqbXg6cm1pOi8vL2puZGkvcm1pOi8vIiArIEhPU1RfTkFNRSArICI6IiArIEpNWF9QT1JUICsgIi9qbXhybWkiOyAgICAKKyAgICBmaW5hbCBTdHJpbmcgdXJsU3RyID0gInNlcnZpY2U6am14OnJtaTovLy9qbmRpL3JtaTovLyIgKyBIT1NUX05BTUUgKyAiOiIgKyBKTVhfUE9SVCArICIvam14cm1pIjsKICAgICAgICAgZmluYWwgSk1YU2VydmljZVVSTCB1cmwgPSBuZXcgSk1YU2VydmljZVVSTCh1cmxTdHIpOwogCi0JZmluYWwgSk1YQ29ubmVjdG9yIGpteENvbm4gPSBKTVhDb25uZWN0b3JGYWN0b3J5LmNvbm5lY3QodXJsKTsKLQlmaW5hbCBNQmVhblNlcnZlckNvbm5lY3Rpb24gY29ubmVjdGlvbiA9IGpteENvbm4uZ2V0TUJlYW5TZXJ2ZXJDb25uZWN0aW9uKCk7CisgICAgZmluYWwgSk1YQ29ubmVjdG9yIGpteENvbm4gPSBKTVhDb25uZWN0b3JGYWN0b3J5LmNvbm5lY3QodXJsKTsKKyAgICBmaW5hbCBNQmVhblNlcnZlckNvbm5lY3Rpb24gY29ubmVjdGlvbiA9IGpteENvbm4uZ2V0TUJlYW5TZXJ2ZXJDb25uZWN0aW9uKCk7CiAKICAgICAgICAgT2JqZWN0TmFtZSBvYmplY3ROYW1lID0KIC8vICAgICAgICAgICAgICAgIG5ldyBPYmplY3ROYW1lKCJhbXg6cHA9L21vbi9zZXJ2ZXItbW9uW3NlcnZlcl0sdHlwZT1qZGJjLWNvbm5lY3Rpb24tcG9vbC1tb24sbmFtZT1yZXNvdXJjZXMvIiArIHBvb2xOYW1lKTsKIC8vICAgICAgICAgICAgICAgIG5ldyBPYmplY3ROYW1lKCJhbXg6cHA9L21vbi9zZXJ2ZXItbW9uW3NlcnZlcl0sdHlwZT1qZGJjLWNvbm5lY3Rpb24tcG9vbC1tb24sbmFtZT1hcHBsaWNhdGlvbnMvamRiYy1tYXJrY29ubmVjdGlvbmFzYmFkLnhhQXBwL3Jlc291cmNlcy8iKyBwb29sTmFtZSk7CiAgICAgICAgICAgICAgICAgbmV3IE9iamVjdE5hbWUoImFteDpwcD0vbW9uL3NlcnZlci1tb25bc2VydmVyXSx0eXBlPWpkYmMtY29ubmVjdGlvbi1wb29sLW1vbixuYW1lPVwiYXBwbGljYXRpb25zL2pkYmMtbWFya2Nvbm5lY3Rpb25hc2JhZC54YUFwcC9yZXNvdXJjZXMvLyIrIHBvb2xOYW1lKyJcIiIpOwogCi0JamF2YXgubWFuYWdlbWVudC5vcGVubWJlYW4uQ29tcG9zaXRlRGF0YVN1cHBvcnQgcmV0dXJuVmFsdWUgPSAKLQkJKGphdmF4Lm1hbmFnZW1lbnQub3Blbm1iZWFuLkNvbXBvc2l0ZURhdGFTdXBwb3J0KSAKLQkJY29ubmVjdGlvbi5nZXRBdHRyaWJ1dGUob2JqZWN0TmFtZSwgTlVNX0NPTl9ERVNUUk9ZRURfQ09VTlQpOworICAgIGphdmF4Lm1hbmFnZW1lbnQub3Blbm1iZWFuLkNvbXBvc2l0ZURhdGFTdXBwb3J0IHJldHVyblZhbHVlID0KKyAgICAgICAgKGphdmF4Lm1hbmFnZW1lbnQub3Blbm1iZWFuLkNvbXBvc2l0ZURhdGFTdXBwb3J0KQorICAgICAgICBjb25uZWN0aW9uLmdldEF0dHJpYnV0ZShvYmplY3ROYW1lLCBOVU1fQ09OX0RFU1RST1lFRF9DT1VOVCk7CiAKICAgICAgICAgcmV0dXJuIG5ldyBJbnRlZ2VyKHJldHVyblZhbHVlLmdldCgiY291bnQiKS50b1N0cmluZygpKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbWFya2Nvbm5lY3Rpb25hc2JhZC54YS5yZXNvdXJjZXMteG1sL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tYXJrY29ubmVjdGlvbmFzYmFkLnhhLnJlc291cmNlcy14bWwvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IDQ2YmUzOWYuLjZkOWE3YzQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tYXJrY29ubmVjdGlvbmFzYmFkLnhhLnJlc291cmNlcy14bWwvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tYXJrY29ubmVjdGlvbmFzYmFkLnhhLnJlc291cmNlcy14bWwvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDggKzEsOCBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KLQ0KLUNSRUFURSBUQUJMRSBPX0N1c3RvbWVyIChpZCBpbnRlZ2VyICwgZGVzY3JpcHRpb24gY2hhcig1MCkpOw0KLQ0KLWRyb3AgdGFibGUgb3duZXI7DQotDQotY3JlYXRlIHRhYmxlIG93bmVyICggaWQgaW50ZWdlciwgZGVzY3JpcHRpb24gY2hhcig1MCkpOw0KLQ0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKKworQ1JFQVRFIFRBQkxFIE9fQ3VzdG9tZXIgKGlkIGludGVnZXIgLCBkZXNjcmlwdGlvbiBjaGFyKDUwKSk7CisKK2Ryb3AgdGFibGUgb3duZXI7CisKK2NyZWF0ZSB0YWJsZSBvd25lciAoIGlkIGludGVnZXIsIGRlc2NyaXB0aW9uIGNoYXIoNTApKTsKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21hcmtjb25uZWN0aW9uYXNiYWQueGEucmVzb3VyY2VzLXhtbC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21hcmtjb25uZWN0aW9uYXNiYWQueGEucmVzb3VyY2VzLXhtbC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IGE1ZWEyZjguLmQ4N2Q1ZGUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tYXJrY29ubmVjdGlvbmFzYmFkLnhhLnJlc291cmNlcy14bWwvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbWFya2Nvbm5lY3Rpb25hc2JhZC54YS5yZXNvdXJjZXMteG1sL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEsMiArMSwyIEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQotZHJvcCB0YWJsZSBvd25lcjsNCitEcm9wIHRhYmxlIE9fQ3VzdG9tZXI7Citkcm9wIHRhYmxlIG93bmVyOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9idWlsZC54bWwKaW5kZXggN2ZjNGI1Zi4uMzhkZGY3OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvYnVpbGQueG1sCkBAIC04NiwxNiArODYsMTYgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPiBVc2FnZToKLQkJYW50IGNtdCAoRXhlY3V0ZXMgdGhlIGNtdCB0ZXN0KQotCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIG1xIHRlc3RzKQotCQlhbnQgY2xlYW4gKGNsZWFucyBhbGwgdGhlIG1xIHRlc3RzKQotCQlhbnQgYnVpbGQgKGJ1aWxkcyBhbGwgdGhlIG1xIHRlc3RzKQotCQlhbnQgc2V0dXAgKHNldHMgdXAgYWxsIHJlc291cmNlcyBmb3IgbXEgdGVzdHMpCi0JCWFudCBkZXBsb3kgKGRlcGxveXMgYWxsIHRoZSBtcSBhcHBzKQotCQlhbnQgcnVuIChFeGVjdXRlcyBhbGwgdGhlIG1xIHRlc3RzKQotCQlhbnQgdW5kZXBsb3kgKHVuZGVwbG95cyBhbGwgdGhlICBtcSBhcHBzKQotCQlhbnQgdW5zZXR1cCAodW5zZXRzIGFsbCByZXNvdXJjZXMgZm9yIG1xIHRlc3RzKQotCTwvZWNobz4KKyAgICA8ZWNobz4gVXNhZ2U6CisgICAgICAgIGFudCBjbXQgKEV4ZWN1dGVzIHRoZSBjbXQgdGVzdCkKKyAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBtcSB0ZXN0cykKKyAgICAgICAgYW50IGNsZWFuIChjbGVhbnMgYWxsIHRoZSBtcSB0ZXN0cykKKyAgICAgICAgYW50IGJ1aWxkIChidWlsZHMgYWxsIHRoZSBtcSB0ZXN0cykKKyAgICAgICAgYW50IHNldHVwIChzZXRzIHVwIGFsbCByZXNvdXJjZXMgZm9yIG1xIHRlc3RzKQorICAgICAgICBhbnQgZGVwbG95IChkZXBsb3lzIGFsbCB0aGUgbXEgYXBwcykKKyAgICAgICAgYW50IHJ1biAoRXhlY3V0ZXMgYWxsIHRoZSBtcSB0ZXN0cykKKyAgICAgICAgYW50IHVuZGVwbG95ICh1bmRlcGxveXMgYWxsIHRoZSAgbXEgYXBwcykKKyAgICAgICAgYW50IHVuc2V0dXAgKHVuc2V0cyBhbGwgcmVzb3VyY2VzIGZvciBtcSB0ZXN0cykKKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvY210L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvY210L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggODcxNDBiOC4uOTg3Zjc2YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL2NtdC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9jbXQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJtcS1jbXQiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWV4Y3B0Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1leGNwdCIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJjb20uc3VuLnMxcGVxZS5tcS5jbXQuZXhjcHQuY2xpZW50LlNpbXBsZU1lc3NhZ2VDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iY29tLnN1bi5zMXBlcWUubXEuY210LmV4Y3B0LmNsaWVudC5TaW1wbGVNZXNzYWdlQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9jbXQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL2NtdC9idWlsZC54bWwKaW5kZXggN2UyZDQzMy4uZjE4ZDFjOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL2NtdC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL2NtdC9idWlsZC54bWwKQEAgLTQwLDcgKzQwLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTUyLDEyICs1MiwxMiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkJlYW4qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQqLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjb25maWd1cmUtY29udGFpbmVyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgPCEtLSBXb3JrYXJvdW5kIGZvciBpc3N1ZSAxODc4MyAtLT4KQEAgLTY3LDEyICs2NywxMiBAQAogICAgICAgICAgICAgICAgICAgIHZhbHVlPSJtZGItY29udGFpbmVyIi8+CiAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KLQkgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiLz4KLQkgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSJzZXJ2ZXIubWRiLWNvbnRhaW5lci5wcm9wZXJ0eS5jbXQtbWF4LXJ1bnRpbWUtZXhjZXB0aW9ucz00Ii8+Ci0JPC9hbnRjYWxsPgotCTxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXItaW5zdGFuY2UtY29tbW9uIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0ic2VydmVyLm1kYi1jb250YWluZXIucHJvcGVydHkuY210LW1heC1ydW50aW1lLWV4Y2VwdGlvbnM9NCIvPgorICAgIDwvYW50Y2FsbD4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQtc2VydmVyLWluc3RhbmNlLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qbXMtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC04MywyNyArODMsMjcgQEAKICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8cHJvcGVydHkgZmlsZT0iJHtlbnYuQVBTX0hPTUV9L2RldnRlc3RzL2Nvbm5lY3Rvci9jb25maWcvb3JhY2xlLnByb3BlcnRpZXMiLz4KICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVBQQ0xJRU5UfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICAgICAgICA8ZW52IGtleT0iQVBQQ1BBVEgiIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9saWIvZXh0L09yYW54by5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiLz4KICAgICAgICAgICA8YXJnIGxpbmU9Ii1jbGllbnQgJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHBDbGllbnQuamFyIi8+Ci0JICA8YXJnIGxpbmU9Ii1uYW1lICR7YXBwbmFtZX1DbGllbnQiLz4KLQkgIDxhcmcgbGluZT0iLXRleHRhdXRoIi8+Ci0JICA8YXJnIGxpbmU9Ii11c2VyIGoyZWUiLz4KLQkgIDxhcmcgbGluZT0iLXBhc3N3b3JkIGoyZWUiLz4KLQkgIDxhcmcgbGluZT0iICR7b3JhY2xlRm9yQ29ubmVjdG9yLmRyaXZlcn0gJHtvcmFjbGVGb3JDb25uZWN0b3IudXJsfSAke29yYWNsZUZvckNvbm5lY3Rvci51c2VyfSAke29yYWNsZUZvckNvbm5lY3Rvci5wd2R9ICIvPgotCSAgPGFyZyBsaW5lPSIteG1sICR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy8ke2FkbWluLmRvbWFpbn0vY29uZmlnL2dsYXNzZmlzaC1hY2MueG1sIi8+CisgICAgICA8YXJnIGxpbmU9Ii1uYW1lICR7YXBwbmFtZX1DbGllbnQiLz4KKyAgICAgIDxhcmcgbGluZT0iLXRleHRhdXRoIi8+CisgICAgICA8YXJnIGxpbmU9Ii11c2VyIGoyZWUiLz4KKyAgICAgIDxhcmcgbGluZT0iLXBhc3N3b3JkIGoyZWUiLz4KKyAgICAgIDxhcmcgbGluZT0iICR7b3JhY2xlRm9yQ29ubmVjdG9yLmRyaXZlcn0gJHtvcmFjbGVGb3JDb25uZWN0b3IudXJsfSAke29yYWNsZUZvckNvbm5lY3Rvci51c2VyfSAke29yYWNsZUZvckNvbm5lY3Rvci5wd2R9ICIvPgorICAgICAgPGFyZyBsaW5lPSIteG1sICR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy8ke2FkbWluLmRvbWFpbn0vY29uZmlnL2dsYXNzZmlzaC1hY2MueG1sIi8+CiAgICAgICAgPC9leGVjPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbm5lY3RvciI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idW5zZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWptcy1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9jbXQvY2xpZW50L1NpbXBsZU1lc3NhZ2VDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9jbXQvY2xpZW50L1NpbXBsZU1lc3NhZ2VDbGllbnQuamF2YQppbmRleCA3YzZhMDg0Li5jODM2NTM0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvY210L2NsaWVudC9TaW1wbGVNZXNzYWdlQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL2NtdC9jbGllbnQvU2ltcGxlTWVzc2FnZUNsaWVudC5qYXZhCkBAIC0yMyw3ICsyMyw3IEBACiAKIHB1YmxpYyBjbGFzcyBTaW1wbGVNZXNzYWdlQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgIFF1ZXVlU2VuZGVyICAgICAgICAgICAgIHF1ZXVlU2VuZGVyID0gbnVsbDsKICAgICAgICAgVGV4dE1lc3NhZ2UgICAgICAgICAgICAgbWVzc2FnZSA9IG51bGw7CiAgICAgICAgIGZpbmFsIGludCAgICAgICAgICAgICAgIE5VTV9NU0dTID0gMzsKLQlib29sZWFuICAgICAgICAgICAgICAgICBwYXNzZWQgPSB0cnVlOworICAgIGJvb2xlYW4gICAgICAgICAgICAgICAgIHBhc3NlZCA9IHRydWU7CiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGpuZGlDb250ZXh0ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CkBAIC03NywzMyArNzcsMzMgQEAKIAogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fTVNHUzsgaSsrKSB7CiAgICAgICAgICAgICAgICAgbWVzc2FnZS5zZXRUZXh0KCJUaGlzIGlzIG1lc3NhZ2UgIiArIChpICsgMSkpOwotCQltZXNzYWdlLnNldEludFByb3BlcnR5KCJJZCIsaSk7CisgICAgICAgIG1lc3NhZ2Uuc2V0SW50UHJvcGVydHkoIklkIixpKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlbmRpbmcgbWVzc2FnZTogIiArCiAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZ2V0VGV4dCgpKTsKICAgICAgICAgICAgICAgICBxdWV1ZVNlbmRlci5zZW5kKG1lc3NhZ2UpOwogICAgICAgICAgICAgfQotCSAgIAotCQlmb3IgKGludCBpPTA7IGk8IGFyZ3MubGVuZ3RoOyBpKyspCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNsaWVudDogIisgYXJnc1tpXSk7CisKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPCBhcmdzLmxlbmd0aDsgaSsrKQorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDbGllbnQ6ICIrIGFyZ3NbaV0pOwogCiAgICAgICAgICAgIFRocmVhZC5zbGVlcCgxMDAwMCk7Ci0JICAgIENsYXNzLmZvck5hbWUoYXJnc1swXSk7Ci0JICAgIFN0cmluZyB1cmwgPSBhcmdzWzFdOwotCSAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbih1cmwsYXJnc1syXSxhcmdzWzNdKTsKLQkgICAgUmVzdWx0U2V0IHJzID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpLmV4ZWN1dGVRdWVyeSgic2VsZWN0IGV4Q291bnQgZnJvbSBtcV9jbXRfZXhjcHQiKTsKLQkgICAgaW50IGNvdW50ID0gMDsKLQkgICAgd2hpbGUgKHJzLm5leHQoKSl7Ci0JICAgICAgICBjb3VudCA9IHJzLmdldEludCgxKTsKLQkgICAgfQorICAgICAgICBDbGFzcy5mb3JOYW1lKGFyZ3NbMF0pOworICAgICAgICBTdHJpbmcgdXJsID0gYXJnc1sxXTsKKyAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBjb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24odXJsLGFyZ3NbMl0sYXJnc1szXSk7CisgICAgICAgIFJlc3VsdFNldCBycyA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKS5leGVjdXRlUXVlcnkoInNlbGVjdCBleENvdW50IGZyb20gbXFfY210X2V4Y3B0Iik7CisgICAgICAgIGludCBjb3VudCA9IDA7CisgICAgICAgIHdoaWxlIChycy5uZXh0KCkpeworICAgICAgICAgICAgY291bnQgPSBycy5nZXRJbnQoMSk7CisgICAgICAgIH0KICAgICAgICAgICAgIHJzLmNsb3NlKCk7Ci0JICAgIGNvbi5jbG9zZSgpOwotCSAgICBpZiAoY291bnQgIT0gMTUpIHsKLQkgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigidGVzdCBmYWlsZWQgYmVjYXVzZSB0aGUgZXhjZXB0aW9uIGNvdW50IHdhcyAiICsgY291bnQpOwotCSAgICB9Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRWFjaCBtZXNzYWdlIGdvdCByZWRlbGl2ZXJlZCAiICsgKGNvdW50L05VTV9NU0dTIC0xKSArICIgdGltZXMgc3VjY2Vzc2Z1bGx5IGFuZCB0aGVuIHN0b3BwZWQgZGVsaXZlcnkiKTsKKyAgICAgICAgY29uLmNsb3NlKCk7CisgICAgICAgIGlmIChjb3VudCAhPSAxNSkgeworICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJ0ZXN0IGZhaWxlZCBiZWNhdXNlIHRoZSBleGNlcHRpb24gY291bnQgd2FzICIgKyBjb3VudCk7CisgICAgICAgIH0KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFYWNoIG1lc3NhZ2UgZ290IHJlZGVsaXZlcmVkICIgKyAoY291bnQvTlVNX01TR1MgLTEpICsgIiB0aW1lcyBzdWNjZXNzZnVsbHkgYW5kIHRoZW4gc3RvcHBlZCBkZWxpdmVyeSIpOwogICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgZSkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGNlcHRpb24gb2NjdXJyZWQ6ICIgKyBlLnRvU3RyaW5nKCkpOwotCSAgICBwYXNzZWQgPSBmYWxzZTsKKyAgICAgICAgcGFzc2VkID0gZmFsc2U7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygic2ltcGxlIG1kYiBtYWluIiwgc3RhdC5GQUlMKTsKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIGlmIChxdWV1ZUNvbm5lY3Rpb24gIT0gbnVsbCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL2NtdC9lamIvU2ltcGxlTWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9jbXQvZWpiL1NpbXBsZU1lc3NhZ2VCZWFuLmphdmEKaW5kZXggMDg0MDJhNS4uYWExOGE3YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL2NtdC9lamIvU2ltcGxlTWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvY210L2VqYi9TaW1wbGVNZXNzYWdlQmVhbi5qYXZhCkBAIC0zNywxOCArMzcsMTggQEAKICAgICBwdWJsaWMgdm9pZCBzZXRNZXNzYWdlRHJpdmVuQ29udGV4dChNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGMpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiAiCiAgICAgICAgICAgICArICJTaW1wbGVNZXNzYWdlQmVhbi5zZXRNZXNzYWdlRHJpdmVuQ29udGV4dCgpIik7Ci0JdGhpcy5tZGMgPSBtZGM7CisgICAgdGhpcy5tZGMgPSBtZGM7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2ltcGxlTWVzc2FnZUJlYW4uZWpiQ3JlYXRlKCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbXBsZU1lc3NhZ2VCZWFuLmVqYkNyZWF0ZSgpIik7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgb25NZXNzYWdlKE1lc3NhZ2UgaW5NZXNzYWdlKSB7CiAgICAgICAgIFRleHRNZXNzYWdlIG1zZyA9IG51bGw7CiAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNUS1DTVQgYWJvdXQgdG8gdXBkYXRlREIiKTsKLQl1cGRhdGVEQigpOworICAgIHVwZGF0ZURCKCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTVEtQ01UIGFmdGVyIHVwZGF0ZURCIik7CiAKICAgICAgICAgdHJ5IHsKQEAgLTY1LDMyICs2NSwzMiBAQAogICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdGUpIHsKICAgICAgICAgICAgIHRlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0JdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlRlc3QgZXhjZXB0aW9uIik7CisgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlRlc3QgZXhjZXB0aW9uIik7CiAgICAgfSAgLy8gb25NZXNzYWdlCiAKICAgICBwcml2YXRlIHZvaWQgdXBkYXRlREIoKSB7CiAgICAgICAgIHN5bmNocm9uaXplZChsb2NrKXsKICAgICAgICAgdHJ5IHsKLQkgICAgLy9DbGFzcy5mb3JOYW1lKCJjb20uaW5ldC5vcmEuT3JhRHJpdmVyIik7Ci0JICAgIENsYXNzLmZvck5hbWUoIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnREcml2ZXIiKTsKKyAgICAgICAgLy9DbGFzcy5mb3JOYW1lKCJjb20uaW5ldC5vcmEuT3JhRHJpdmVyIik7CisgICAgICAgIENsYXNzLmZvck5hbWUoIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnREcml2ZXIiKTsKICAgICAgICAgICAgIC8vU3RyaW5nIHVybCA9ICJqZGJjOmluZXRvcmE6OndyeC5pbmRpYS5zdW4uY29tOjE1MjE6ZGJzbXBsMSI7CiAgICAgICAgICAgICBTdHJpbmcgdXJsID0gImpkYmM6ZGVyYnk6Ly9sb2NhbGhvc3Q6MTUyNy90ZXN0ZGI7Y3JlYXRlPXRydWU7IjsKLQkgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBjb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24odXJsLCJkYnVzZXIiLCAiZGJwYXNzd29yZCIpOworICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbih1cmwsImRidXNlciIsICJkYnBhc3N3b3JkIik7CiAgICAgICAgICAgICBSZXN1bHRTZXQgcnMgPSBjb24uY3JlYXRlU3RhdGVtZW50KCkuZXhlY3V0ZVF1ZXJ5KCJzZWxlY3QgZXhDb3VudCBmcm9tIG1xX2NtdF9leGNwdCIpOwotCSAgICBpbnQgY291bnQgPSAwOwotCSAgICB3aGlsZSAocnMubmV4dCgpKXsKLQkgICAgICAgIGNvdW50ID0gcnMuZ2V0SW50KDEpOworICAgICAgICBpbnQgY291bnQgPSAwOworICAgICAgICB3aGlsZSAocnMubmV4dCgpKXsKKyAgICAgICAgICAgIGNvdW50ID0gcnMuZ2V0SW50KDEpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTVEtQ01UIHVwZGF0ZURCIDogIiArIGNvdW50KTsKLQkgICAgfQotCSAgICBycy5jbG9zZSgpOwotCSAgICBjb3VudCsrOwotCSAgICBTdHJpbmcgcXJ5ID0gInVwZGF0ZSBtcV9jbXRfZXhjcHQgc2V0IGV4Q291bnQ9IisgY291bnQgOworICAgICAgICB9CisgICAgICAgIHJzLmNsb3NlKCk7CisgICAgICAgIGNvdW50Kys7CisgICAgICAgIFN0cmluZyBxcnkgPSAidXBkYXRlIG1xX2NtdF9leGNwdCBzZXQgZXhDb3VudD0iKyBjb3VudCA7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk1RLUNNVCB1cGRhdGVEQiA6IHF1ZXJ5IDogIiArIHFyeSk7Ci0JICAgIGNvbi5jcmVhdGVTdGF0ZW1lbnQoKS5leGVjdXRlVXBkYXRlKHFyeSk7Ci0JICAgIGNvbi5jbG9zZSgpOwotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgY29uLmNyZWF0ZVN0YXRlbWVudCgpLmV4ZWN1dGVVcGRhdGUocXJ5KTsKKyAgICAgICAgY29uLmNsb3NlKCk7CisgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yOiIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0JfSAKKyAgICB9CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9lamIzMG1kYi1yZXNvdXJjZXMteG1sL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvZWpiMzBtZGItcmVzb3VyY2VzLXhtbC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDA4Nzg3NzcuLmE0MjgyZWQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9lamIzMG1kYi1yZXNvdXJjZXMteG1sL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL2VqYjMwbWRiLXJlc291cmNlcy14bWwvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamIzMC1oZWxsby1tZGIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgpAQCAtMjcsNiArMjcsNiBAQAogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL2VqYjMwbWRiLXJlc291cmNlcy14bWwvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL2VqYjMwbWRiLXJlc291cmNlcy14bWwvYnVpbGQueG1sCmluZGV4IGIxYTBhMzUuLjU1MmQyOGMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9lamIzMG1kYi1yZXNvdXJjZXMteG1sL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvZWpiMzBtZGItcmVzb3VyY2VzLXhtbC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDE1ICs0NiwxNSBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkJlYW4qLmNsYXNzLCoqLypIZWxsbyoiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudCouY2xhc3MiIC8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZ2xhc3NmaXNoLXJlc291cmNlcy1lYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbCIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTY0LDcgKzY0LDcgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iY3JlYXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC03NiwxNCArNzYsMTQgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSI1Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9lamIzMG1kYi1yZXNvdXJjZXMteG1sL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9lamIzMG1kYi1yZXNvdXJjZXMteG1sL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBhZGZhYTg0Li4yYTYyZWNmIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvZWpiMzBtZGItcmVzb3VyY2VzLXhtbC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL2VqYjMwbWRiLXJlc291cmNlcy14bWwvY2xpZW50L0NsaWVudC5qYXZhCkBAIC00MSw5ICs0MSw5IEBACiAgICAgICAgIFN5c3RlbS5leGl0KDApOwogICAgIH0KIAotICAgIEBSZXNvdXJjZShtYXBwZWROYW1lPSJqYXZhOmFwcC9qbXMvZWpiX2VqYjMwX2hlbGxvX21kYl9RQ0YiKSAKKyAgICBAUmVzb3VyY2UobWFwcGVkTmFtZT0iamF2YTphcHAvam1zL2VqYl9lamIzMF9oZWxsb19tZGJfUUNGIikKICAgICBwcml2YXRlIHN0YXRpYyBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHF1ZXVlQ29uRmFjdG9yeTsKLSAKKwogICAgIC8vVGFyZ2V0IFF1ZXVlCiAgICAgQFJlc291cmNlKG1hcHBlZE5hbWU9ImphdmE6YXBwL2ptcy9lamJfZWpiMzBfaGVsbG9fbWRiX0luUXVldWUiKQogICAgIHByaXZhdGUgc3RhdGljIGpha2FydGEuam1zLlF1ZXVlIG1zZ0JlYW5RdWV1ZTsKQEAgLTU3LDcgKzU3LDcgQEAKICAgICBwcml2YXRlIFF1ZXVlU2VuZGVyIHF1ZXVlU2VuZGVyOwogICAgIHByaXZhdGUgUXVldWVSZWNlaXZlciBxdWV1ZVJlY2VpdmVyOwogICAgIHByaXZhdGUgaW50IG51bU1lc3NhZ2VzID0gMjsKLSAgICAKKwogICAgIHB1YmxpYyBDbGllbnQoU3RyaW5nW10gYXJncykgewogICAgICAgICBpZiggYXJncy5sZW5ndGggPT0gMSApIHsKICAgICAgICAgICAgIG51bU1lc3NhZ2VzID0gbmV3IEludGVnZXIoYXJnc1swXSkuaW50VmFsdWUoKTsKQEAgLTgwLDEwICs4MCwxMCBAQAogICAgIHB1YmxpYyB2b2lkIHNldHVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIHF1ZXVlQ29uID0gcXVldWVDb25GYWN0b3J5LmNyZWF0ZVF1ZXVlQ29ubmVjdGlvbigpOwogICAgICAgICBxdWV1ZVNlc3Npb24gPSBxdWV1ZUNvbi5jcmVhdGVRdWV1ZVNlc3Npb24KLSAgICAgICAgICAgIChmYWxzZSwgU2Vzc2lvbi5BVVRPX0FDS05PV0xFREdFKTsgCisgICAgICAgICAgICAoZmFsc2UsIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSk7CiAKICAgICAgICAgLy8gRGVzdGluYXRpb24gd2lsbCBiZSBzcGVjaWZpZWQgd2hlbiBhY3R1YWwgbXNnIGlzIHNlbnQuCi0gICAgICAgIHF1ZXVlU2VuZGVyID0gcXVldWVTZXNzaW9uLmNyZWF0ZVNlbmRlcihudWxsKTsgICAgICAgIAorICAgICAgICBxdWV1ZVNlbmRlciA9IHF1ZXVlU2Vzc2lvbi5jcmVhdGVTZW5kZXIobnVsbCk7CiAgICAgICAgIHF1ZXVlUmVjZWl2ZXIgPSBxdWV1ZVNlc3Npb24uY3JlYXRlUmVjZWl2ZXIoY2xpZW50UXVldWUpOwogICAgICAgICBxdWV1ZUNvbi5zdGFydCgpOwogICAgIH0KQEAgLTk4LDI4ICs5OCwyOCBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgc2VuZE1zZ3MoamFrYXJ0YS5qbXMuUXVldWUgcXVldWUsIGludCBudW0pIAorICAgIHB1YmxpYyB2b2lkIHNlbmRNc2dzKGpha2FydGEuam1zLlF1ZXVlIHF1ZXVlLCBpbnQgbnVtKQogICAgICAgICB0aHJvd3MgSk1TRXhjZXB0aW9uIHsKICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bTsgaSsrKSB7CiAgICAgICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPSBxdWV1ZVNlc3Npb24uY3JlYXRlVGV4dE1lc3NhZ2UoImZvbyAjIiArIChpICsgMSkpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZW5kaW5nIG1lc3NhZ2UgIiArIGkgKyAiIHRvICIgKyBxdWV1ZSArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZW5kaW5nIG1lc3NhZ2UgIiArIGkgKyAiIHRvICIgKyBxdWV1ZSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBhdCB0aW1lICIgKyBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSk7CiAgICAgICAgICAgICBxdWV1ZVNlbmRlci5zZW5kKHF1ZXVlLCBtZXNzYWdlKTsKLQkgICAgCi0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlbnQgbWVzc2FnZSAiICsgaSArICIgdG8gIiArIHF1ZXVlICsgCisKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VudCBtZXNzYWdlICIgKyBpICsgIiB0byAiICsgcXVldWUgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgYXQgdGltZSAiICsgU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KGludCBudW0pIAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdChpbnQgbnVtKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgc2VuZE1zZ3MoKGpha2FydGEuam1zLlF1ZXVlKSBtc2dCZWFuUXVldWUsIG51bSk7Ci0gICAgICAgIAotCS8vTm93IGF0dGVtcHQgdG8gcmVjZWl2ZSByZXNwb25zZXMgdG8gb3VyIG1lc3NhZ2UKKworICAgIC8vTm93IGF0dGVtcHQgdG8gcmVjZWl2ZSByZXNwb25zZXMgdG8gb3VyIG1lc3NhZ2UKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXYWl0aW5nIGZvciBxdWV1ZSBtZXNzYWdlIik7CiAgICAgICAgIE1lc3NhZ2UgcmVjdmRtZXNzYWdlID0gcXVldWVSZWNlaXZlci5yZWNlaXZlKFRJTUVPVVQpOwogICAgICAgICBpZiggcmVjdmRtZXNzYWdlICE9IG51bGwgKSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlY2VpdmVkIG1lc3NhZ2UgOiAiICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlY2VpdmVkIG1lc3NhZ2UgOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUZXh0TWVzc2FnZSlyZWN2ZG1lc3NhZ2UpLmdldFRleHQoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRpbWVvdXQgYWZ0ZXIgIiArIFRJTUVPVVQgKyAiIHNlY29uZHMiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9lamIzMG1kYi1yZXNvdXJjZXMteG1sL2VqYi9NZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL2VqYjMwbWRiLXJlc291cmNlcy14bWwvZWpiL01lc3NhZ2VCZWFuLmphdmEKaW5kZXggMmIzYmQxOC4uYmM0MzZmYSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL2VqYjMwbWRiLXJlc291cmNlcy14bWwvZWpiL01lc3NhZ2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL2VqYjMwbWRiLXJlc291cmNlcy14bWwvZWpiL01lc3NhZ2VCZWFuLmphdmEKQEAgLTI0LDkgKzI0LDkgQEAKIEBNZXNzYWdlRHJpdmVuKG1hcHBlZE5hbWU9ImphdmE6YXBwL2ptcy9lamJfZWpiMzBfaGVsbG9fbWRiX0luUXVldWUiKQogIHB1YmxpYyBjbGFzcyBNZXNzYWdlQmVhbiBpbXBsZW1lbnRzIE1lc3NhZ2VMaXN0ZW5lciB7CiAKLSAgICBAUmVzb3VyY2UobWFwcGVkTmFtZT0iamF2YTphcHAvam1zL2VqYl9lamIzMF9oZWxsb19tZGJfUUNGIikgCisgICAgQFJlc291cmNlKG1hcHBlZE5hbWU9ImphdmE6YXBwL2ptcy9lamJfZWpiMzBfaGVsbG9fbWRiX1FDRiIpCiAgICAgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxY0ZhY3Rvcnk7Ci0gICAgCisKICAgICAvL0Rlc3RpbmF0aW9uIFF1ZXVlCiAgICAgQFJlc291cmNlKG1hcHBlZE5hbWU9ImphdmE6YXBwL2ptcy9lamJfZWpiMzBfaGVsbG9fbWRiX091dFF1ZXVlIikKICAgICBRdWV1ZSByZXBseVF1ZXVlOwpAQCAtMzUsMTQgKzM1LDE0IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTWVzc2FnZUJlYW46OiAgb25NZXNzYWdlIDo6IEdvdCBtZXNzYWdlISEhIiArIG1lc3NhZ2UpOwogCiAgICAgICAgIFF1ZXVlQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gbnVsbDsKLQlRdWV1ZVNlc3Npb24gc2Vzc2lvbiA9IG51bGw7CisgICAgUXVldWVTZXNzaW9uIHNlc3Npb24gPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgY29ubmVjdGlvbiA9IHFjRmFjdG9yeS5jcmVhdGVRdWV1ZUNvbm5lY3Rpb24oKTsKICAgICAgICAgICAgIHNlc3Npb24gPSBjb25uZWN0aW9uLmNyZWF0ZVF1ZXVlU2Vzc2lvbihmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2Vzc2lvbi5BVVRPX0FDS05PV0xFREdFKTsKICAgICAgICAgICAgIFF1ZXVlU2VuZGVyIHNlbmRlciA9IHNlc3Npb24uY3JlYXRlU2VuZGVyKHJlcGx5UXVldWUpOwogICAgICAgICAgICAgVGV4dE1lc3NhZ2UgdG1lc3NhZ2UgPSBzZXNzaW9uLmNyZWF0ZVRleHRNZXNzYWdlKCk7Ci0JICAgIFN0cmluZyBtc2dUZXh0ID0gICJSZXBseSBmb3IgIiArICgoVGV4dE1lc3NhZ2UpIG1lc3NhZ2UpLmdldFRleHQoKTsKKyAgICAgICAgU3RyaW5nIG1zZ1RleHQgPSAgIlJlcGx5IGZvciAiICsgKChUZXh0TWVzc2FnZSkgbWVzc2FnZSkuZ2V0VGV4dCgpOwogICAgICAgICAgICAgdG1lc3NhZ2Uuc2V0VGV4dChtc2dUZXh0KTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VuZGluZyAiICsgbXNnVGV4dCk7CiAgICAgICAgICAgICBzZW5kZXIuc2VuZCh0bWVzc2FnZSk7CkBAIC01MCw5ICs1MCw5IEBACiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgdHJ5IHsKLQkJaWYgKHNlc3Npb24gIT0gbnVsbCkgewotCQkgICAgc2Vzc2lvbi5jbG9zZSgpOwotCQl9CisgICAgICAgIGlmIChzZXNzaW9uICE9IG51bGwpIHsKKyAgICAgICAgICAgIHNlc3Npb24uY2xvc2UoKTsKKyAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmKGNvbm5lY3Rpb24gIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL2VqYjMwbWRiL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvZWpiMzBtZGIvYnVpbGQucHJvcGVydGllcwppbmRleCAwODc4Nzc3Li5hNDI4MmVkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvZWpiMzBtZGIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvZWpiMzBtZGIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamIzMC1oZWxsby1tZGIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgpAQCAtMjcsNiArMjcsNiBAQAogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL2VqYjMwbWRiL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9lamIzMG1kYi9idWlsZC54bWwKaW5kZXggZDQ1NDlmYS4uNGU2ZjBhOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL2VqYjMwbWRiL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvZWpiMzBtZGIvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NiwxNCArNDYsMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypCZWFuKi5jbGFzcywqKi8qSGVsbG8qIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQqLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYzLDcgKzYzLDcgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iY3JlYXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC03NSwxNCArNzUsMTQgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSI1Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9lamIzMG1kYi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvZWpiMzBtZGIvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDJjODcyMWUuLmYyNWUyYjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9lamIzMG1kYi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL2VqYjMwbWRiL2NsaWVudC9DbGllbnQuamF2YQpAQCAtNDEsOSArNDEsOSBAQAogICAgICAgICBTeXN0ZW0uZXhpdCgwKTsKICAgICB9CiAKLSAgICBAUmVzb3VyY2UobWFwcGVkTmFtZT0iam1zL2VqYl9lamIzMF9oZWxsb19tZGJfUUNGIikgCisgICAgQFJlc291cmNlKG1hcHBlZE5hbWU9Imptcy9lamJfZWpiMzBfaGVsbG9fbWRiX1FDRiIpCiAgICAgcHJpdmF0ZSBzdGF0aWMgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxdWV1ZUNvbkZhY3Rvcnk7Ci0gCisKICAgICAvL1RhcmdldCBRdWV1ZQogICAgIEBSZXNvdXJjZShtYXBwZWROYW1lPSJqbXMvZWpiX2VqYjMwX2hlbGxvX21kYl9JblF1ZXVlIikKICAgICBwcml2YXRlIHN0YXRpYyBqYWthcnRhLmptcy5RdWV1ZSBtc2dCZWFuUXVldWU7CkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgcHJpdmF0ZSBRdWV1ZVNlbmRlciBxdWV1ZVNlbmRlcjsKICAgICBwcml2YXRlIFF1ZXVlUmVjZWl2ZXIgcXVldWVSZWNlaXZlcjsKICAgICBwcml2YXRlIGludCBudW1NZXNzYWdlcyA9IDI7Ci0gICAgCisKICAgICBwdWJsaWMgQ2xpZW50KFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgaWYoIGFyZ3MubGVuZ3RoID09IDEgKSB7CiAgICAgICAgICAgICBudW1NZXNzYWdlcyA9IG5ldyBJbnRlZ2VyKGFyZ3NbMF0pLmludFZhbHVlKCk7CkBAIC04MCwxMCArODAsMTAgQEAKICAgICBwdWJsaWMgdm9pZCBzZXR1cCgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBxdWV1ZUNvbiA9IHF1ZXVlQ29uRmFjdG9yeS5jcmVhdGVRdWV1ZUNvbm5lY3Rpb24oKTsKICAgICAgICAgcXVldWVTZXNzaW9uID0gcXVldWVDb24uY3JlYXRlUXVldWVTZXNzaW9uCi0gICAgICAgICAgICAoZmFsc2UsIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSk7IAorICAgICAgICAgICAgKGZhbHNlLCBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UpOwogCiAgICAgICAgIC8vIERlc3RpbmF0aW9uIHdpbGwgYmUgc3BlY2lmaWVkIHdoZW4gYWN0dWFsIG1zZyBpcyBzZW50LgotICAgICAgICBxdWV1ZVNlbmRlciA9IHF1ZXVlU2Vzc2lvbi5jcmVhdGVTZW5kZXIobnVsbCk7ICAgICAgICAKKyAgICAgICAgcXVldWVTZW5kZXIgPSBxdWV1ZVNlc3Npb24uY3JlYXRlU2VuZGVyKG51bGwpOwogICAgICAgICBxdWV1ZVJlY2VpdmVyID0gcXVldWVTZXNzaW9uLmNyZWF0ZVJlY2VpdmVyKGNsaWVudFF1ZXVlKTsKICAgICAgICAgcXVldWVDb24uc3RhcnQoKTsKICAgICB9CkBAIC05OCwyOCArOTgsMjggQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHNlbmRNc2dzKGpha2FydGEuam1zLlF1ZXVlIHF1ZXVlLCBpbnQgbnVtKSAKKyAgICBwdWJsaWMgdm9pZCBzZW5kTXNncyhqYWthcnRhLmptcy5RdWV1ZSBxdWV1ZSwgaW50IG51bSkKICAgICAgICAgdGhyb3dzIEpNU0V4Y2VwdGlvbiB7CiAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW07IGkrKykgewogICAgICAgICAgICAgTWVzc2FnZSBtZXNzYWdlID0gcXVldWVTZXNzaW9uLmNyZWF0ZVRleHRNZXNzYWdlKCJmb28gIyIgKyAoaSArIDEpKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VuZGluZyBtZXNzYWdlICIgKyBpICsgIiB0byAiICsgcXVldWUgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VuZGluZyBtZXNzYWdlICIgKyBpICsgIiB0byAiICsgcXVldWUgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgYXQgdGltZSAiICsgU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkpOwogICAgICAgICAgICAgcXVldWVTZW5kZXIuc2VuZChxdWV1ZSwgbWVzc2FnZSk7Ci0JICAgIAotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZW50IG1lc3NhZ2UgIiArIGkgKyAiIHRvICIgKyBxdWV1ZSArIAorCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlbnQgbWVzc2FnZSAiICsgaSArICIgdG8gIiArIHF1ZXVlICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGF0IHRpbWUgIiArIFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdChpbnQgbnVtKSAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoaW50IG51bSkKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIHNlbmRNc2dzKChqYWthcnRhLmptcy5RdWV1ZSkgbXNnQmVhblF1ZXVlLCBudW0pOwotICAgICAgICAKLQkvL05vdyBhdHRlbXB0IHRvIHJlY2VpdmUgcmVzcG9uc2VzIHRvIG91ciBtZXNzYWdlCisKKyAgICAvL05vdyBhdHRlbXB0IHRvIHJlY2VpdmUgcmVzcG9uc2VzIHRvIG91ciBtZXNzYWdlCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2FpdGluZyBmb3IgcXVldWUgbWVzc2FnZSIpOwogICAgICAgICBNZXNzYWdlIHJlY3ZkbWVzc2FnZSA9IHF1ZXVlUmVjZWl2ZXIucmVjZWl2ZShUSU1FT1VUKTsKICAgICAgICAgaWYoIHJlY3ZkbWVzc2FnZSAhPSBudWxsICkgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZWNlaXZlZCBtZXNzYWdlIDogIiArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZWNlaXZlZCBtZXNzYWdlIDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVGV4dE1lc3NhZ2UpcmVjdmRtZXNzYWdlKS5nZXRUZXh0KCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0aW1lb3V0IGFmdGVyICIgKyBUSU1FT1VUICsgIiBzZWNvbmRzIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvZWpiMzBtZGIvZWpiL01lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvZWpiMzBtZGIvZWpiL01lc3NhZ2VCZWFuLmphdmEKaW5kZXggOTBhMTRhMi4uOWFlZmNhYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL2VqYjMwbWRiL2VqYi9NZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9lamIzMG1kYi9lamIvTWVzc2FnZUJlYW4uamF2YQpAQCAtMjQsOSArMjQsOSBAQAogQE1lc3NhZ2VEcml2ZW4obWFwcGVkTmFtZT0iam1zL2VqYl9lamIzMF9oZWxsb19tZGJfSW5RdWV1ZSIpCiAgcHVibGljIGNsYXNzIE1lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKIAotICAgIEBSZXNvdXJjZShtYXBwZWROYW1lPSJqbXMvZWpiX2VqYjMwX2hlbGxvX21kYl9RQ0YiKSAKKyAgICBAUmVzb3VyY2UobWFwcGVkTmFtZT0iam1zL2VqYl9lamIzMF9oZWxsb19tZGJfUUNGIikKICAgICBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHFjRmFjdG9yeTsKLSAgICAKKwogICAgIC8vRGVzdGluYXRpb24gUXVldWUKICAgICBAUmVzb3VyY2UobWFwcGVkTmFtZT0iam1zL2VqYl9lamIzMF9oZWxsb19tZGJfT3V0UXVldWUiKQogICAgIFF1ZXVlIHJlcGx5UXVldWU7CkBAIC0zNSwxNCArMzUsMTQgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNZXNzYWdlQmVhbjo6ICBvbk1lc3NhZ2UgOjogR290IG1lc3NhZ2UhISEiICsgbWVzc2FnZSk7CiAKICAgICAgICAgUXVldWVDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBudWxsOwotCVF1ZXVlU2Vzc2lvbiBzZXNzaW9uID0gbnVsbDsKKyAgICBRdWV1ZVNlc3Npb24gc2Vzc2lvbiA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBjb25uZWN0aW9uID0gcWNGYWN0b3J5LmNyZWF0ZVF1ZXVlQ29ubmVjdGlvbigpOwogICAgICAgICAgICAgc2Vzc2lvbiA9IGNvbm5lY3Rpb24uY3JlYXRlUXVldWVTZXNzaW9uKGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UpOwogICAgICAgICAgICAgUXVldWVTZW5kZXIgc2VuZGVyID0gc2Vzc2lvbi5jcmVhdGVTZW5kZXIocmVwbHlRdWV1ZSk7CiAgICAgICAgICAgICBUZXh0TWVzc2FnZSB0bWVzc2FnZSA9IHNlc3Npb24uY3JlYXRlVGV4dE1lc3NhZ2UoKTsKLQkgICAgU3RyaW5nIG1zZ1RleHQgPSAgIlJlcGx5IGZvciAiICsgKChUZXh0TWVzc2FnZSkgbWVzc2FnZSkuZ2V0VGV4dCgpOworICAgICAgICBTdHJpbmcgbXNnVGV4dCA9ICAiUmVwbHkgZm9yICIgKyAoKFRleHRNZXNzYWdlKSBtZXNzYWdlKS5nZXRUZXh0KCk7CiAgICAgICAgICAgICB0bWVzc2FnZS5zZXRUZXh0KG1zZ1RleHQpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZW5kaW5nICIgKyBtc2dUZXh0KTsKICAgICAgICAgICAgIHNlbmRlci5zZW5kKHRtZXNzYWdlKTsKQEAgLTUwLDkgKzUwLDkgQEAKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICB0cnkgewotCQlpZiAoc2Vzc2lvbiAhPSBudWxsKSB7Ci0JCSAgICBzZXNzaW9uLmNsb3NlKCk7Ci0JCX0KKyAgICAgICAgaWYgKHNlc3Npb24gIT0gbnVsbCkgeworICAgICAgICAgICAgc2Vzc2lvbi5jbG9zZSgpOworICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYoY29ubmVjdGlvbiAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uY2xvc2UoKTsKICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvbGlmZWN5Y2xlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvbGlmZWN5Y2xlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggODcxNDBiOC4uOTg3Zjc2YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL2xpZmVjeWNsZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9saWZlY3ljbGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJtcS1jbXQiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWV4Y3B0Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1leGNwdCIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJjb20uc3VuLnMxcGVxZS5tcS5jbXQuZXhjcHQuY2xpZW50LlNpbXBsZU1lc3NhZ2VDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iY29tLnN1bi5zMXBlcWUubXEuY210LmV4Y3B0LmNsaWVudC5TaW1wbGVNZXNzYWdlQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9saWZlY3ljbGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL2xpZmVjeWNsZS9idWlsZC54bWwKaW5kZXggODU5MWEwNS4uYjAzMzdiNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL2xpZmVjeWNsZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL2xpZmVjeWNsZS9idWlsZC54bWwKQEAgLTM4LDcgKzM4LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTUwLDE3ICs1MCwxNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkJlYW4qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQqLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0YXJ0LWFwcHNlcnZlciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCTxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXItaW5zdGFuY2UtY29tbW9uIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXNlcnZlci1pbnN0YW5jZS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktam1zLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjgsMTggKzY4LDE4IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPHByb3BlcnR5IGZpbGU9IiR7ZW52LkFQU19IT01FfS9kZXZ0ZXN0cy9jb25uZWN0b3IvY29uZmlnL29yYWNsZS5wcm9wZXJ0aWVzIi8+CiAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FQUENMSUVOVH0iIGZhaWxvbmVycm9yPSJ0cnVlIj4KICAgICAgICAgICA8ZW52IGtleT0iQVBQQ1BBVEgiIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9saWIvZXh0L09yYW54by5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiLz4KICAgICAgICAgICA8YXJnIGxpbmU9Ii1jbGllbnQgJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHBDbGllbnQuamFyIi8+Ci0JICA8YXJnIGxpbmU9Ii1uYW1lICR7YXBwbmFtZX1DbGllbnQiLz4KLQkgIDxhcmcgbGluZT0iLXRleHRhdXRoIi8+Ci0JICA8YXJnIGxpbmU9Ii11c2VyIGoyZWUiLz4KLQkgIDxhcmcgbGluZT0iLXBhc3N3b3JkIGoyZWUiLz4KKyAgICAgIDxhcmcgbGluZT0iLW5hbWUgJHthcHBuYW1lfUNsaWVudCIvPgorICAgICAgPGFyZyBsaW5lPSItdGV4dGF1dGgiLz4KKyAgICAgIDxhcmcgbGluZT0iLXVzZXIgajJlZSIvPgorICAgICAgPGFyZyBsaW5lPSItcGFzc3dvcmQgajJlZSIvPgogICAgICAgICAgIDxhcmcgbGluZT0iICR7b3JhY2xlRm9yQ29ubmVjdG9yLmRyaXZlcn0gJHtvcmFjbGVGb3JDb25uZWN0b3IudXJsfSAke29yYWNsZUZvckNvbm5lY3Rvci51c2VyfSAke29yYWNsZUZvckNvbm5lY3Rvci5wd2R9ICIvPgotCSAgPGFyZyBsaW5lPSIteG1sICR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy8ke2FkbWluLmRvbWFpbn0vY29uZmlnL2dsYXNzZmlzaC1hY2MueG1sIi8+CisgICAgICA8YXJnIGxpbmU9Ii14bWwgJHtlbnYuUzFBU19IT01FfS9kb21haW5zLyR7YWRtaW4uZG9tYWlufS9jb25maWcvZ2xhc3NmaXNoLWFjYy54bWwiLz4KICAgICAgICA8L2V4ZWM+CiAgICAgPC90YXJnZXQ+CiAKQEAgLTExMCwxMCArMTEwLDEwIEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1bnNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktam1zLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL2xpZmVjeWNsZS9jbGllbnQvU2ltcGxlTWVzc2FnZUNsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL2xpZmVjeWNsZS9jbGllbnQvU2ltcGxlTWVzc2FnZUNsaWVudC5qYXZhCmluZGV4IGIzYjdkMzAuLjkwYmQ0YTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9saWZlY3ljbGUvY2xpZW50L1NpbXBsZU1lc3NhZ2VDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvbGlmZWN5Y2xlL2NsaWVudC9TaW1wbGVNZXNzYWdlQ2xpZW50LmphdmEKQEAgLTIzLDcgKzIzLDcgQEAKIAogcHVibGljIGNsYXNzIFNpbXBsZU1lc3NhZ2VDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTMyLDIzICszMiwyMyBAQAogICAgICAgICBib29sZWFuIHBhc3NlZCA9IGZhbHNlOwogICAgICAgICB0cnkgewogCi0JICAgIENsYXNzLmZvck5hbWUoYXJnc1swXSk7Ci0JICAgIFN0cmluZyB1cmwgPSBhcmdzWzFdOwotCSAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbih1cmwsYXJnc1syXSxhcmdzWzNdKTsKLQkgICAgUmVzdWx0U2V0IHJzID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpLmV4ZWN1dGVRdWVyeSgic2VsZWN0IHN0YXR1cyBmcm9tIGxpZmVjeWNsZV90ZXN0MSIpOwotCSAgICBpbnQgY291bnQgPSAwOwotCSAgICB3aGlsZSAocnMubmV4dCgpKXsKLQkgICAgICAgIGNvdW50ID0gcnMuZ2V0SW50KDEpOwotCSAgICB9CisgICAgICAgIENsYXNzLmZvck5hbWUoYXJnc1swXSk7CisgICAgICAgIFN0cmluZyB1cmwgPSBhcmdzWzFdOworICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbih1cmwsYXJnc1syXSxhcmdzWzNdKTsKKyAgICAgICAgUmVzdWx0U2V0IHJzID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpLmV4ZWN1dGVRdWVyeSgic2VsZWN0IHN0YXR1cyBmcm9tIGxpZmVjeWNsZV90ZXN0MSIpOworICAgICAgICBpbnQgY291bnQgPSAwOworICAgICAgICB3aGlsZSAocnMubmV4dCgpKXsKKyAgICAgICAgICAgIGNvdW50ID0gcnMuZ2V0SW50KDEpOworICAgICAgICB9CiAgICAgICAgICAgICBycy5jbG9zZSgpOwotCSAgICBjb24uY2xvc2UoKTsKLQkgICAgaWYgKGNvdW50ID09IDApIHsKLQkgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigidGVzdCBmYWlsZWQgYmVjYXVzZSBzdGF0dXMgOiAiICsgMCk7Ci0JICAgIH0KKyAgICAgICAgY29uLmNsb3NlKCk7CisgICAgICAgIGlmIChjb3VudCA9PSAwKSB7CisgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oInRlc3QgZmFpbGVkIGJlY2F1c2Ugc3RhdHVzIDogIiArIDApOworICAgICAgICB9CiAgICAgICAgICAgICBwYXNzZWQgPSB0cnVlOwogICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgZSkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGNlcHRpb24gb2NjdXJyZWQ6ICIgKyBlLnRvU3RyaW5nKCkpOwotCSAgICBwYXNzZWQgPSBmYWxzZTsKKyAgICAgICAgcGFzc2VkID0gZmFsc2U7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygic2ltcGxlIGxpZmVjeWNsZSB0ZXN0MSIsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICBpZiAocGFzc2VkKSBzdGF0LmFkZFN0YXR1cygic2ltcGxlIGxpZmVjeWNsZSB0ZXN0MSIsIHN0YXQuUEFTUyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvbGlmZWN5Y2xlL2VqYi9TaW1wbGVNZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL2xpZmVjeWNsZS9lamIvU2ltcGxlTWVzc2FnZUJlYW4uamF2YQppbmRleCA2MGE3ZTVmLi41MjI1ODg0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvbGlmZWN5Y2xlL2VqYi9TaW1wbGVNZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9saWZlY3ljbGUvZWpiL1NpbXBsZU1lc3NhZ2VCZWFuLmphdmEKQEAgLTM4LDE3ICszOCwxNyBAQAogICAgIHB1YmxpYyB2b2lkIHNldE1lc3NhZ2VEcml2ZW5Db250ZXh0KE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYykgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluICIKICAgICAgICAgICAgICsgIlNpbXBsZU1lc3NhZ2VCZWFuLnNldE1lc3NhZ2VEcml2ZW5Db250ZXh0KCkiKTsKLQl0aGlzLm1kYyA9IG1kYzsKKyAgICB0aGlzLm1kYyA9IG1kYzsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW1wbGVNZXNzYWdlQmVhbi5lamJDcmVhdGUoKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2ltcGxlTWVzc2FnZUJlYW4uZWpiQ3JlYXRlKCkiKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBpbk1lc3NhZ2UpIHsKICAgICAgICAgVGV4dE1lc3NhZ2UgbXNnID0gbnVsbDsKIAotCXVwZGF0ZURCKCk7CisgICAgdXBkYXRlREIoKTsKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgaWYgKGluTWVzc2FnZSBpbnN0YW5jZW9mIFRleHRNZXNzYWdlKSB7CkBAIC02NCw3ICs2NCw3IEBACiAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0ZSkgewogICAgICAgICAgICAgdGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVGVzdCBleGNlcHRpb24iKTsKKyAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVGVzdCBleGNlcHRpb24iKTsKICAgICB9ICAvLyBvbk1lc3NhZ2UKIAogICAgIHByaXZhdGUgdm9pZCB1cGRhdGVEQigpIHsKQEAgLTc2LDE4ICs3NiwxOCBAQAogICAgICAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBjb24gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24odXJsLCJkYnVzZXIiLCAiZGJwYXNzd29yZCIpOwogICAgICAgICAgICAgLy9qYXZhLnNxbC5Db25uZWN0aW9uIGNvbiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbih1cmwsImNvbm5lY3RvciIsICJjb25uZWN0b3IiKTsKICAgICAgICAgICAgIFJlc3VsdFNldCBycyA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKS5leGVjdXRlUXVlcnkoInNlbGVjdCBleENvdW50IGZyb20gbXFfY210X2V4Y3B0Iik7Ci0JICAgIGludCBjb3VudCA9IDA7Ci0JICAgIHdoaWxlIChycy5uZXh0KCkpewotCSAgICAgICAgY291bnQgPSBycy5nZXRJbnQoMSk7Ci0JICAgIH0KLQkgICAgcnMuY2xvc2UoKTsKLQkgICAgY291bnQrKzsKLQkgICAgU3RyaW5nIHFyeSA9ICJ1cGRhdGUgbXFfY210X2V4Y3B0IHNldCBleENvdW50PSIrIGNvdW50IDsKLQkgICAgY29uLmNyZWF0ZVN0YXRlbWVudCgpLmV4ZWN1dGVVcGRhdGUocXJ5KTsKLQkgICAgY29uLmNsb3NlKCk7Ci0JfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICBpbnQgY291bnQgPSAwOworICAgICAgICB3aGlsZSAocnMubmV4dCgpKXsKKyAgICAgICAgICAgIGNvdW50ID0gcnMuZ2V0SW50KDEpOworICAgICAgICB9CisgICAgICAgIHJzLmNsb3NlKCk7CisgICAgICAgIGNvdW50Kys7CisgICAgICAgIFN0cmluZyBxcnkgPSAidXBkYXRlIG1xX2NtdF9leGNwdCBzZXQgZXhDb3VudD0iKyBjb3VudCA7CisgICAgICAgIGNvbi5jcmVhdGVTdGF0ZW1lbnQoKS5leGVjdXRlVXBkYXRlKHFyeSk7CisgICAgICAgIGNvbi5jbG9zZSgpOworICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFcnJvcjoiICsgZS5nZXRNZXNzYWdlKCkpOwotCX0gCisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9saWZlY3ljbGUvc3JjL0xpZmVjeWNsZUxpc3RlbmVySW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL2xpZmVjeWNsZS9zcmMvTGlmZWN5Y2xlTGlzdGVuZXJJbXBsLmphdmEKaW5kZXggYzA2NjhlYi4uOTkwYTI3OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL2xpZmVjeWNsZS9zcmMvTGlmZWN5Y2xlTGlzdGVuZXJJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL2xpZmVjeWNsZS9zcmMvTGlmZWN5Y2xlTGlzdGVuZXJJbXBsLmphdmEKQEAgLTM0LDggKzM0LDggQEAKICAqICAzLiBSRUFEWV9FVkVOVDogU2VydmVyIHN0YXJ0ZWQgdXAgYXBwbGljYXRpb25zIGFuZCBpcyByZWFkeSB0byBzZXJ2aWNlIHJlcXVlc3RzCiAgKiAgNC4gU0hVVERPV05fRVZFTlQ6IFNlcnZlciBpcyBzaHV0dGluZyBkb3duIGFwcGxpY2F0aW9ucwogICogIDUuIFRFUk1JTkFUSU9OX0VWRU5UOiBTZXJ2ZXIgaXMgdGVybWluYXRpbmcgdGhlIHN1YnN5c3RlbXMgYW5kIHRoZSBydW50aW1lIGVudmlyb25tZW50LgotICogCi0gKiAgSW4gdGhpcyBzYW1wbGUsIG9uIFNUQVJUVVBfRVZFTlQsIGEgdGhyZWFkIGlzIHN0YXJ0ZWQgd2hpY2ggc2VuZHMgYSBzaW1wbGUgSk1TIG1lc3NhZ2UgdG8gCisgKgorICogIEluIHRoaXMgc2FtcGxlLCBvbiBTVEFSVFVQX0VWRU5ULCBhIHRocmVhZCBpcyBzdGFydGVkIHdoaWNoIHNlbmRzIGEgc2ltcGxlIEpNUyBtZXNzYWdlIHRvCiAgKiAgc2FtcGxlVG9waWMgZXZlcnkgbWludXRlLiBPbiBTSFVURE9XTl9FVkVOVCwgdGhpcyB0aHJlYWQgaXMgc3RvcHBlZC4KICAqICA8L3A+CiAgKi8KQEAgLTQ3LDM3ICs0NywzNyBAQAogICAgICAqLwogICAgIExpZmVjeWNsZUV2ZW50Q29udGV4dCBjdHg7CiAKLSAgICAvKiogCi0gICAgICogIFJlY2VpdmVzIGEgc2VydmVyIGxpZmVjeWNsZSBldmVudCAKKyAgICAvKioKKyAgICAgKiAgUmVjZWl2ZXMgYSBzZXJ2ZXIgbGlmZWN5Y2xlIGV2ZW50CiAgICAgICogIEBwYXJhbSBldmVudCBhc3NvY2lhdGVkIGV2ZW50CiAgICAgICogIEB0aHJvd3MgPGNvZGU+U2VydmVyTGlmZWN5Y2xlRXhjZXB0aW9uPC9jb2RlPiBmb3IgZXhjZXB0aW9uYWwgY29uZGl0aW9uLgogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGhhbmRsZUV2ZW50KExpZmVjeWNsZUV2ZW50IGV2ZW50KSAKKyAgICBwdWJsaWMgdm9pZCBoYW5kbGVFdmVudChMaWZlY3ljbGVFdmVudCBldmVudCkKICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgU2VydmVyTGlmZWN5Y2xlRXhjZXB0aW9uIHsKIAogICAgICAgICBjdHggPSBldmVudC5nZXRMaWZlY3ljbGVFdmVudENvbnRleHQoKTsKIAotCXN3aXRjaChldmVudC5nZXRFdmVudFR5cGUoKSkgewotCSAgICBjYXNlIExpZmVjeWNsZUV2ZW50LklOSVRfRVZFTlQ6Ci0JCW9uSW5pdFRhc2soKTsKLQkgIAlicmVhazsKKyAgICBzd2l0Y2goZXZlbnQuZ2V0RXZlbnRUeXBlKCkpIHsKKyAgICAgICAgY2FzZSBMaWZlY3ljbGVFdmVudC5JTklUX0VWRU5UOgorICAgICAgICBvbkluaXRUYXNrKCk7CisgICAgICAgICAgYnJlYWs7CiAKLQkgICAgY2FzZSBMaWZlY3ljbGVFdmVudC5TVEFSVFVQX0VWRU5UOgotCQlvblN0YXJ0VGFzaygpOwotCSAgCWJyZWFrOworICAgICAgICBjYXNlIExpZmVjeWNsZUV2ZW50LlNUQVJUVVBfRVZFTlQ6CisgICAgICAgIG9uU3RhcnRUYXNrKCk7CisgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgTGlmZWN5Y2xlRXZlbnQuUkVBRFlfRVZFTlQ6CiAgICAgICAgICAgICAgICAgb25SZWFkeVRhc2soKTsKICAgICAgICAgICAgICAgICBicmVhazsKIAotCSAgICBjYXNlIExpZmVjeWNsZUV2ZW50LlNIVVRET1dOX0VWRU5UOgotCQlvblNodXRkb3duVGFzaygpOwotCSAgCWJyZWFrOworICAgICAgICBjYXNlIExpZmVjeWNsZUV2ZW50LlNIVVRET1dOX0VWRU5UOgorICAgICAgICBvblNodXRkb3duVGFzaygpOworICAgICAgICAgIGJyZWFrOwogCi0JICAgIGNhc2UgTGlmZWN5Y2xlRXZlbnQuVEVSTUlOQVRJT05fRVZFTlQ6Ci0JCW9uVGVybWluYXRpb25UYXNrKCk7Ci0JICAJYnJlYWs7Ci0JfQorICAgICAgICBjYXNlIExpZmVjeWNsZUV2ZW50LlRFUk1JTkFUSU9OX0VWRU5UOgorICAgICAgICBvblRlcm1pbmF0aW9uVGFzaygpOworICAgICAgICAgIGJyZWFrOworICAgIH0KIAogICAgIH0KIApAQCAtOTgsNDcgKzk4LDQ3IEBACiAgICAgICAgIC8vIG15IGNvZGUKICAgICAgICAgUXVldWVTZXNzaW9uIHFzZXNzaW9uW10gPSBuZXcgUXVldWVTZXNzaW9uWzEwXTsKICAgICAgICAgUXVldWUgcXVldWVbXSA9IG5ldyBRdWV1ZVsxMF07Ci0gICAgICAgIAorCiAgICAgICAgICAgICB0cnl7CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9MDsgaSA8IDEwOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgLy8gR2V0IGluaXRpYWwgY29udGV4dAogICAgICAgICAgICAgICAgICAgICBjdHgubG9nKCJHZXQgaW5pdGlhbCBjb250ZXh0Iik7CiAgICAgICAgICAgICAgICAgICAgIEluaXRpYWxDb250ZXh0IGluaXRpYWxDb250ZXh0ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy8gbG9vayB1cCB0aGUgY29ubmVjdGlvbiBmYWN0b3J5IGZyb20gdGhlIG9iamVjdCBzdG9yZQogICAgICAgICAgICAgICAgICAgICBjdHgubG9nKCJMb29raW5nIHVwIHRoZSBxdWV1ZSBjb25uZWN0aW9uIGZhY3RvcnkgZnJvbSBKTkRJIik7CiAgICAgICAgICAgICAgICAgICAgIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgZmFjdG9yeSA9IChRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5KSBpbml0aWFsQ29udGV4dC5sb29rdXAoImptcy9RQ0ZhY3RvcnkiKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvLyBsb29rIHVwIHF1ZXVlIGZyb20gdGhlIG9iamVjdCBzdG9yZQogICAgICAgICAgICAgICAgICAgICBjdHgubG9nKCJDcmVhdGUgcXVldWUgY29ubmVjdGlvbiIpOwogICAgICAgICAgICAgICAgICAgICBRdWV1ZUNvbm5lY3Rpb24gcWNvbm4gPSBmYWN0b3J5LmNyZWF0ZVF1ZXVlQ29ubmVjdGlvbigpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGN0eC5sb2coIkNyZWF0ZSBxdWV1ZSBzZXNzaW9uIik7CiAgICAgICAgICAgICAgICAgICAgIHFzZXNzaW9uW2ldID0gcWNvbm4uY3JlYXRlUXVldWVTZXNzaW9uKGZhbHNlLCBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGN0eC5sb2coIkxvb2tpbmcgdXAgdGhlIHF1ZXVlIGZyb20gSk5ESSIpOwogICAgICAgICAgICAgICAgICAgICBxdWV1ZVtpXSA9IChRdWV1ZSkgaW5pdGlhbENvbnRleHQubG9va3VwKCJqbXMvU2FtcGxlUXVldWUiKTsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICB1cGRhdGVEQigpOwotICAgICAgCisKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhdGNoKCBFeGNlcHRpb24gZSApewogICAgICAgICAgICAgICAgIGN0eC5sb2coICJFeGNlcHRpb24gY2F1Z2h0IGluIHRlc3QgY29kZSIgKTsKICAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgfQogCi0gICAgICAgCi0gICAgICAgIAotICAgICAgICAvLyBlbmQgbXkgY29kZSAgICAgICAgCi0gICAgICAgIAorCisKKyAgICAgICAgLy8gZW5kIG15IGNvZGUKKwogICAgICAgICAvLyBteSBjb2RlCiAgICAgICAgIC8vY3JlYXRlQWNjb3VudCgpOwotICAgICAgICAvLyBlbmQgbXkgY29kZSAgICAgICAgCisgICAgICAgIC8vIGVuZCBteSBjb2RlCiAgICAgfQogCiAgICAgLyoqCi0gICAgICogIFRhc2tzIHRvIGJlIGNhcnJpZWQgb3V0IGluIHRoZSBSRUFEWV9FVkVOVC4gCisgICAgICogIFRhc2tzIHRvIGJlIGNhcnJpZWQgb3V0IGluIHRoZSBSRUFEWV9FVkVOVC4KICAgICAgKiAgTG9ncyBhIG1lc3NhZ2UuCiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIG9uUmVhZHlUYXNrKCkgewpAQCAtMTQ2LDcgKzE0Niw3IEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogIFRhc2tzIHRvIGJlIGNhcnJpZWQgb3V0IGluIHRoZSBTSFVURE9XTl9FVkVOVC4gCisgICAgICogIFRhc2tzIHRvIGJlIGNhcnJpZWQgb3V0IGluIHRoZSBTSFVURE9XTl9FVkVOVC4KICAgICAgKiAgTG9ncyBhIG1lc3NhZ2UKICAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgb25TaHV0ZG93blRhc2soKSB7CkBAIC0xNzAsNyArMTcwLDcgQEAKIAogCiAgICAgLyoqCi0gICAgICogIFRhc2tzIHRvIGJlIGNhcnJpZWQgb3V0IGluIHRoZSBURVJNSU5BVElPTl9FVkVOVC4gCisgICAgICogIFRhc2tzIHRvIGJlIGNhcnJpZWQgb3V0IGluIHRoZSBURVJNSU5BVElPTl9FVkVOVC4KICAgICAgKiAgTG9nIGEgbWVzc2FnZS4KICAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgb25UZXJtaW5hdGlvblRhc2soKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvc2ltcGxlc3RyZXNzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvc2ltcGxlc3RyZXNzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNjFjZTNjMy4uZjk5NmIyMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL3NpbXBsZXN0cmVzcy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9zaW1wbGVzdHJlc3MvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjb25uZWN0b3ItbXEiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNpbXBsZXN0cmVzcyIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2ltcGxlc3RyZXNzIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9ImNvbS5zdW4uczFwZXFlLmNvbm5lY3Rvci5tcS5zaW1wbGVzdHJlc3MuY2xpZW50LlNpbXBsZU1lc3NhZ2VDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iY29tLnN1bi5zMXBlcWUuY29ubmVjdG9yLm1xLnNpbXBsZXN0cmVzcy5jbGllbnQuU2ltcGxlTWVzc2FnZUNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvc2ltcGxlc3RyZXNzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9zaW1wbGVzdHJlc3MvYnVpbGQueG1sCmluZGV4IDgyMzc4YjEuLjg3NDM2OWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9zaW1wbGVzdHJlc3MvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9zaW1wbGVzdHJlc3MvYnVpbGQueG1sCkBAIC0zNSw3ICszNSw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NywxMyArNDcsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypCZWFuKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktam1zLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iam1zLmZhY3RvcnkubmFtZSIKQEAgLTc2LDE0ICs3NiwxNCBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVuc2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtam1zLXJlc291cmNlLWNvbW1vbiI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvc2ltcGxlc3RyZXNzL2NsaWVudC9TaW1wbGVNZXNzYWdlQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvc2ltcGxlc3RyZXNzL2NsaWVudC9TaW1wbGVNZXNzYWdlQ2xpZW50LmphdmEKaW5kZXggMDU3Yzk5OC4uNTEwZDFmMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL3NpbXBsZXN0cmVzcy9jbGllbnQvU2ltcGxlTWVzc2FnZUNsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9zaW1wbGVzdHJlc3MvY2xpZW50L1NpbXBsZU1lc3NhZ2VDbGllbnQuamF2YQpAQCAtMjIsNyArMjIsNyBAQAogCiBwdWJsaWMgY2xhc3MgU2ltcGxlTWVzc2FnZUNsaWVudCBpbXBsZW1lbnRzIFJ1bm5hYmxlewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIGludCBpZCA9MDsKQEAgLTg0LDcgKzg0LDcgQEAKICAgICAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJzaW1wbGUgc3RyZXNzIHByb2dyYW0iKTsKICAgICAgICAgICAgIFN5c3RlbS5leGl0KDApOwogICAgICAgICB9Ci0gICAgICAgICAKKwogCiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvc2ltcGxlc3RyZXNzL2Rlc2NyaXB0b3IvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvc2ltcGxlc3RyZXNzL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggYTQ3YmM5MC4uN2I5MDY5OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL3NpbXBsZXN0cmVzcy9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9zaW1wbGVzdHJlc3MvZGVzY3JpcHRvci9lamItamFyLnhtbApAQCAtMzcsNyArMzcsNyBAQAogICAgICAgPC9yZXNvdXJjZS1yZWY+CiAgICAgICA8cmVzb3VyY2UtZW52LXJlZj4KICAgICAgICAgPHJlc291cmNlLWVudi1yZWYtbmFtZT5qbXMvY2xpZW50UXVldWU8L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KLQk8cmVzb3VyY2UtZW52LXJlZi10eXBlPmpha2FydGEuam1zLlF1ZXVlPC9yZXNvdXJjZS1lbnYtcmVmLXR5cGU+CisgICAgPHJlc291cmNlLWVudi1yZWYtdHlwZT5qYWthcnRhLmptcy5RdWV1ZTwvcmVzb3VyY2UtZW52LXJlZi10eXBlPgogICAgICAgPC9yZXNvdXJjZS1lbnYtcmVmPgogICAgIDwvbWVzc2FnZS1kcml2ZW4+CiAgIDwvZW50ZXJwcmlzZS1iZWFucz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9zaW1wbGVzdHJlc3MvZWpiL1NpbXBsZU1lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvc2ltcGxlc3RyZXNzL2VqYi9TaW1wbGVNZXNzYWdlQmVhbi5qYXZhCmluZGV4IDlkMjg0NWIuLjBiZDE5OTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9zaW1wbGVzdHJlc3MvZWpiL1NpbXBsZU1lc3NhZ2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL3NpbXBsZXN0cmVzcy9lamIvU2ltcGxlTWVzc2FnZUJlYW4uamF2YQpAQCAtNDIsMTEgKzQyLDExIEBACiAgICAgcHVibGljIHZvaWQgc2V0TWVzc2FnZURyaXZlbkNvbnRleHQoTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gIgogICAgICAgICAgICAgKyAiU2ltcGxlTWVzc2FnZUJlYW4uc2V0TWVzc2FnZURyaXZlbkNvbnRleHQoKSIpOwotCXRoaXMubWRjID0gbWRjOworICAgIHRoaXMubWRjID0gbWRjOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbXBsZU1lc3NhZ2VCZWFuLmVqYkNyZWF0ZSgpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW1wbGVNZXNzYWdlQmVhbi5lamJDcmVhdGUoKSIpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgam5kaUNvbnRleHQgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIGNvbm5lY3Rpb25GYWN0b3J5ID0gKENvbm5lY3Rpb25GYWN0b3J5KQpAQCAtNjcsMTggKzY3LDE4IEBACiAgICAgICAgICAgICAgICAgbXNnID0gKFRleHRNZXNzYWdlKSBpbk1lc3NhZ2U7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNRVNTQUdFIEJFQU46IE1lc3NhZ2UgcmVjZWl2ZWQ6ICIKICAgICAgICAgICAgICAgICAgICAgKyBtc2cuZ2V0VGV4dCgpKTsKLQkJY29ubmVjdGlvbiA9Ci0JICAgICAgICAgICAgY29ubmVjdGlvbkZhY3RvcnkuY3JlYXRlQ29ubmVjdGlvbigpOwotCQlzZXNzaW9uID0KLQkgICAgICAgICAgICBjb25uZWN0aW9uLmNyZWF0ZVNlc3Npb24oZmFsc2UsCi0JCSAgICBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UpOwotCQlNZXNzYWdlUHJvZHVjZXIgbXNnUHJvZHVjZXI9IHNlc3Npb24uY3JlYXRlUHJvZHVjZXIocXVldWUpOwotCQlUZXh0TWVzc2FnZSBtZXNzYWdlID0gc2Vzc2lvbi5jcmVhdGVUZXh0TWVzc2FnZSgpOworICAgICAgICBjb25uZWN0aW9uID0KKyAgICAgICAgICAgICAgICBjb25uZWN0aW9uRmFjdG9yeS5jcmVhdGVDb25uZWN0aW9uKCk7CisgICAgICAgIHNlc3Npb24gPQorICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uY3JlYXRlU2Vzc2lvbihmYWxzZSwKKyAgICAgICAgICAgIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSk7CisgICAgICAgIE1lc3NhZ2VQcm9kdWNlciBtc2dQcm9kdWNlcj0gc2Vzc2lvbi5jcmVhdGVQcm9kdWNlcihxdWV1ZSk7CisgICAgICAgIFRleHRNZXNzYWdlIG1lc3NhZ2UgPSBzZXNzaW9uLmNyZWF0ZVRleHRNZXNzYWdlKCk7CiAKLQkJbWVzc2FnZS5zZXRUZXh0KCJSZXBseSBmb3IgOiAiICsgbXNnLmdldFRleHQoKSk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiU2VuZGluZyBtZXNzYWdlOiAiICsKLQkJbWVzc2FnZS5nZXRUZXh0KCkpOwotCQltc2dQcm9kdWNlci5zZW5kKG1lc3NhZ2UpOworICAgICAgICBtZXNzYWdlLnNldFRleHQoIlJlcGx5IGZvciA6ICIgKyBtc2cuZ2V0VGV4dCgpKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZW5kaW5nIG1lc3NhZ2U6ICIgKworICAgICAgICBtZXNzYWdlLmdldFRleHQoKSk7CisgICAgICAgIG1zZ1Byb2R1Y2VyLnNlbmQobWVzc2FnZSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTWVzc2FnZSBvZiB3cm9uZyB0eXBlOiAiCiAgICAgICAgICAgICAgICAgICAgICsgaW5NZXNzYWdlLmdldENsYXNzKCkuZ2V0TmFtZSgpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9zdHJlc3MvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9zdHJlc3MvYnVpbGQucHJvcGVydGllcwppbmRleCA2MWNlM2MzLi5mOTk2YjIyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvc3RyZXNzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL3N0cmVzcy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMSArMTUsMjEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNvbm5lY3Rvci1tcSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2ltcGxlc3RyZXNzIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zaW1wbGVzdHJlc3MiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iY29tLnN1bi5zMXBlcWUuY29ubmVjdG9yLm1xLnNpbXBsZXN0cmVzcy5jbGllbnQuU2ltcGxlTWVzc2FnZUNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJjb20uc3VuLnMxcGVxZS5jb25uZWN0b3IubXEuc2ltcGxlc3RyZXNzLmNsaWVudC5TaW1wbGVNZXNzYWdlQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9zdHJlc3MvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL3N0cmVzcy9idWlsZC54bWwKaW5kZXggZmE3NmYxMC4uMmEzODE3MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL3N0cmVzcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL3N0cmVzcy9idWlsZC54bWwKQEAgLTM1LDcgKzM1LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ3LDEzICs0NywxMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkJlYW4qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQqLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qbXMtY29tbW9uIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWptcy1yZXNvdXJjZS1jb21tb24iPgpAQCAtNzEsMTQgKzcxLDE0IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idW5zZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWptcy1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9zdHJlc3MvY2xpZW50L1NpbXBsZU1lc3NhZ2VDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9zdHJlc3MvY2xpZW50L1NpbXBsZU1lc3NhZ2VDbGllbnQuamF2YQppbmRleCA5NDJhMGU5Li4wZDgzMGQ1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvc3RyZXNzL2NsaWVudC9TaW1wbGVNZXNzYWdlQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL3N0cmVzcy9jbGllbnQvU2ltcGxlTWVzc2FnZUNsaWVudC5qYXZhCkBAIC0yOSw3ICsyOSw3IEBACiAgICAgc3RhdGljIGxvbmcgTURCX1NMRUVQX1RJTUUgPSAyMDAwOwogICAgIHN0YXRpYyBib29sZWFuIGRlYnVnID0gZmFsc2U7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgaW50IGlkID0wOwpAQCAtNDAsMTMgKzQwLDEzIEBACiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIC8qKgotCSAqIFN0YXJ0IHRoZSB0aHJlYWRzIHRoYXQgd2lsbCBzZW5kIG1lc3NhZ2VzIHRvIE1EQgotCSAqLworICAgICAqIFN0YXJ0IHRoZSB0aHJlYWRzIHRoYXQgd2lsbCBzZW5kIG1lc3NhZ2VzIHRvIE1EQgorICAgICAqLwogICAgICAgICBBcnJheUxpc3QgYWwgPSBuZXcgQXJyYXlMaXN0KCk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBmb3IgKGludCBpID0wOyBpIDwgTlVNX0NMSUVOVFM7IGkrKykgewogICAgICAgICAgICAgICAgIFRocmVhZCBjbGllbnQgPSBuZXcgVGhyZWFkKG5ldyBTaW1wbGVNZXNzYWdlQ2xpZW50KGkpKTsKLQkJYWwuYWRkKGNsaWVudCk7CisgICAgICAgIGFsLmFkZChjbGllbnQpOwogICAgICAgICAgICAgICAgIGNsaWVudC5zdGFydCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdCkgewpAQCAtNzYsNjYgKzc2LDY2IEBACiAgICAgICAgICAgICBxdWV1ZUNvbm5lY3Rpb24uc3RhcnQoKTsKICAgICAgICAgICAgIHF1ZXVlUmVjZWl2ZXIgPSBxdWV1ZVNlc3Npb24uY3JlYXRlUmVjZWl2ZXIocXVldWUpOwogCi0JICAgIEhhc2hNYXAgbWFwID0gbmV3IEhhc2hNYXAoKTsKKyAgICAgICAgSGFzaE1hcCBtYXAgPSBuZXcgSGFzaE1hcCgpOwogCiAgICAgICAgICAgICBsb25nIHN0YXJ0VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwogICAgICAgICAgICAgYm9vbGVhbiBwYXNzID0gdHJ1ZTsKLQkgICAgLy8KLQkgICAgLy8gUmVjZWl2ZXMgYWxsIHRoZSBtZXNzYWdlcyBhbmQga2VlcCBpbiB0aGUgZGF0YSBzdHJ1Y3R1cmUKLQkgICAgLy8KKyAgICAgICAgLy8KKyAgICAgICAgLy8gUmVjZWl2ZXMgYWxsIHRoZSBtZXNzYWdlcyBhbmQga2VlcCBpbiB0aGUgZGF0YSBzdHJ1Y3R1cmUKKyAgICAgICAgLy8KICAgICAgICAgICAgIGZvciAoaW50IGkgPTA7IGkgPCBOVU1fQ0xJRU5UUyAqIE5VTV9DWUNMRVM7IGkrKykgewogICAgICAgICAgICAgICAgIFRleHRNZXNzYWdlIG1zZyA9IChUZXh0TWVzc2FnZSkgcXVldWVSZWNlaXZlci5yZWNlaXZlKFRJTUVfT1VUKTsKLQkJSW50ZWdlciBpZCA9IG5ldyBJbnRlZ2VyKG1zZy5nZXRJbnRQcm9wZXJ0eSgicmVwbHlpZCIpKTsKLQkJaWYgKG1hcC5jb250YWluc0tleShpZCkpIHsKLQkJICAgIHBhc3MgPSBmYWxzZTsKLQkJICAgIGRlYnVnKCJEdXBsaWNhdGUgOiIgKyBpZCk7Ci0JCX0KLQkJbWFwLnB1dChpZCwgbXNnLmdldFRleHQoKSk7CisgICAgICAgIEludGVnZXIgaWQgPSBuZXcgSW50ZWdlcihtc2cuZ2V0SW50UHJvcGVydHkoInJlcGx5aWQiKSk7CisgICAgICAgIGlmIChtYXAuY29udGFpbnNLZXkoaWQpKSB7CisgICAgICAgICAgICBwYXNzID0gZmFsc2U7CisgICAgICAgICAgICBkZWJ1ZygiRHVwbGljYXRlIDoiICsgaWQpOworICAgICAgICB9CisgICAgICAgIG1hcC5wdXQoaWQsIG1zZy5nZXRUZXh0KCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbG9uZyB0b3RhbFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIHN0YXJ0VGltZTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZWNlaXZlZCBhbGwgbWVzc2FnZXMgaW4gOiIgKyB0b3RhbFRpbWUgKyAiIG1pbGxpc2Vjb25kcyIpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlY2VpdmVkIGFsbCBtZXNzYWdlcyBpbiA6IiArIHRvdGFsVGltZSArICIgbWlsbGlzZWNvbmRzIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CiAKLSAgICAgICAgICAgIC8vIAotCSAgICAvLyBOb3cgZXhhbWluZSB0aGUgcmVjZWl2ZWQgZGF0YQotCSAgICAvLworICAgICAgICAgICAgLy8KKyAgICAgICAgLy8gTm93IGV4YW1pbmUgdGhlIHJlY2VpdmVkIGRhdGEKKyAgICAgICAgLy8KICAgICAgICAgICAgIGZvciAoaW50IGkgPTA7IGkgPCBOVU1fQ0xJRU5UUyAqIE5VTV9DWUNMRVM7IGkrKykgewotCSAgICAgICAgU3RyaW5nIHJlcGx5ID0gKFN0cmluZykgbWFwLmdldChuZXcgSW50ZWdlcihpKSk7Ci0JCWlmICghcmVwbHkuZXF1YWxzKCJSRVBMSUVEOkNMSUVOVCIpKSB7Ci0JCSAgIHBhc3MgPSBmYWxzZTsKLQkJfQotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlJlY2VlaXZlZCA6IiArIGkgKyAiOiIgKyByZXBseSk7Ci0JICAgIH0KLSAgICAgICAgICAgIAotCSAgICAvLyBUcnkgdG8gcmVjZWl2ZSBvbmUgbW9yZSBtZXNzYWdlIHRoYW4gZXhwZWN0ZWQuCisgICAgICAgICAgICBTdHJpbmcgcmVwbHkgPSAoU3RyaW5nKSBtYXAuZ2V0KG5ldyBJbnRlZ2VyKGkpKTsKKyAgICAgICAgaWYgKCFyZXBseS5lcXVhbHMoIlJFUExJRUQ6Q0xJRU5UIikpIHsKKyAgICAgICAgICAgcGFzcyA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVjZWVpdmVkIDoiICsgaSArICI6IiArIHJlcGx5KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRyeSB0byByZWNlaXZlIG9uZSBtb3JlIG1lc3NhZ2UgdGhhbiBleHBlY3RlZC4KICAgICAgICAgICAgIFRleHRNZXNzYWdlIG1zZyA9IChUZXh0TWVzc2FnZSkgcXVldWVSZWNlaXZlci5yZWNlaXZlKFRJTUVfT1VUKTsKIAotCSAgICBpZiAobXNnICE9IG51bGwpIHsKLQkgICAgICAgcGFzcyA9IGZhbHNlOwotCSAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlY2VpdmVkIG1vcmUgdGhhbiBleHBlY3RlZCBudW1iZXIgb2YgbWVzc2FnZXMgOiIgKyBtc2cuZ2V0VGV4dCgpKTsKLQkgICAgfQorICAgICAgICBpZiAobXNnICE9IG51bGwpIHsKKyAgICAgICAgICAgcGFzcyA9IGZhbHNlOworICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlY2VpdmVkIG1vcmUgdGhhbiBleHBlY3RlZCBudW1iZXIgb2YgbWVzc2FnZXMgOiIgKyBtc2cuZ2V0VGV4dCgpKTsKKyAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAocGFzcykgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJDb25jdXJyZW50IG1lc3NhZ2UgZGVsaXZlcnkgdGVzdCIsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJDb25jdXJyZW50IG1lc3NhZ2UgZGVsaXZlcnkgdGVzdCIsIHN0YXQuRkFJTCk7Ci0JICAgIH0KKyAgICAgICAgfQogICAgICAgICB9Y2F0Y2ggKFRocm93YWJsZSB0KSB7CiAgICAgICAgICAgICB0LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIkNvbmN1cnJlbnQgbWVzc2FnZSBkZWxpdmVyeSB0ZXN0Iiwgc3RhdC5GQUlMKTsKICAgICAgICAgfWZpbmFsbHkgewogICAgICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoIkNvbmN1cnJlbnQgbWVzc2FnZSBkZWxpdmVyeSB0ZXN0Iik7Ci0JICAgIGZvciAoaW50IGk9MDsgaSA8YWwuc2l6ZSgpOyBpKyspIHsKLQkgICAgICAgVGhyZWFkIGNsaWVudCA9IChUaHJlYWQpIGFsLmdldChpKTsKLQkgICAgICAgdHJ5IHsKLQkgICAgICAgICAgY2xpZW50LmpvaW4oKTsKLQkgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGUuZ2V0TWVzc2FnZSgpKTsKLQkgICAgICAgfQotCSAgICB9CisgICAgICAgIGZvciAoaW50IGk9MDsgaSA8YWwuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgVGhyZWFkIGNsaWVudCA9IChUaHJlYWQpIGFsLmdldChpKTsKKyAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgY2xpZW50LmpvaW4oKTsKKyAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgwKTsKICAgICAgICAgfQotICAgICAgICAgCisKIAogICAgIH0KIApAQCAtMTU2LDkgKzE1Niw5IEBACiAgICAgICAgICAgICAgICAgKCJqYXZhOmNvbXAvZW52L2ptcy9RQ0ZhY3RvcnkiKTsKICAgICAgICAgICAgIHF1ZXVlID0gKFF1ZXVlKSBqbmRpQ29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvam1zL1NhbXBsZVF1ZXVlIik7CiAKLQkgICAgaW50IHN0YXJ0SWQgPSBpZCAqIE5VTV9DWUNMRVM7Ci0JICAgIGludCBlbmRJZCA9IChpZCAqIE5VTV9DWUNMRVMpICsgTlVNX0NZQ0xFUzsKLQkgICAgZm9yIChpbnQgaT0gc3RhcnRJZDtpIDwgZW5kSWQ7IGkgKyspIHsKKyAgICAgICAgaW50IHN0YXJ0SWQgPSBpZCAqIE5VTV9DWUNMRVM7CisgICAgICAgIGludCBlbmRJZCA9IChpZCAqIE5VTV9DWUNMRVMpICsgTlVNX0NZQ0xFUzsKKyAgICAgICAgZm9yIChpbnQgaT0gc3RhcnRJZDtpIDwgZW5kSWQ7IGkgKyspIHsKICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICBxdWV1ZUNvbm5lY3Rpb24gPQogICAgICAgICAgICAgICAgICAgICBxdWV1ZUNvbm5lY3Rpb25GYWN0b3J5LmNyZWF0ZVF1ZXVlQ29ubmVjdGlvbigpOwpAQCAtMTY5LDEwICsxNjksMTAgQEAKICAgICAgICAgICAgICAgICAgICAgcXVldWVTZW5kZXIgPSBxdWV1ZVNlc3Npb24uY3JlYXRlU2VuZGVyKHF1ZXVlKTsKICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IHF1ZXVlU2Vzc2lvbi5jcmVhdGVUZXh0TWVzc2FnZSgpOwogICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnNldFRleHQoIkNMSUVOVCIpOwotCSAgICAgICAgICAgIG1lc3NhZ2Uuc2V0SW50UHJvcGVydHkoImlkIixpKTsKLQkgICAgICAgICAgICBtZXNzYWdlLnNldExvbmdQcm9wZXJ0eSgic2xlZXB0aW1lIixNREJfU0xFRVBfVElNRSk7CisgICAgICAgICAgICAgICAgbWVzc2FnZS5zZXRJbnRQcm9wZXJ0eSgiaWQiLGkpOworICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2V0TG9uZ1Byb3BlcnR5KCJzbGVlcHRpbWUiLE1EQl9TTEVFUF9USU1FKTsKICAgICAgICAgICAgICAgICAgICAgcXVldWVTZW5kZXIuc2VuZChtZXNzYWdlKTsKLQkJICAgIGRlYnVnKCJTZW5kIHRoZSBtZXNzYWdlIDoiICsgbWVzc2FnZS5nZXRJbnRQcm9wZXJ0eSgiaWQiKSArICI6IiArIG1lc3NhZ2UuZ2V0VGV4dCgpKTsKKyAgICAgICAgICAgIGRlYnVnKCJTZW5kIHRoZSBtZXNzYWdlIDoiICsgbWVzc2FnZS5nZXRJbnRQcm9wZXJ0eSgiaWQiKSArICI6IiArIG1lc3NhZ2UuZ2V0VGV4dCgpKTsKICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4Y2VwdGlvbiBvY2N1cnJlZDogIiArIGUudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKQEAgLTE5MCw4ICsxOTAsOCBAQAogCiAgICAgc3RhdGljIHZvaWQgZGVidWcoU3RyaW5nIG1zZykgewogICAgICAgICBpZiAoZGVidWcpIHsKLQkgICBTeXN0ZW0ub3V0LnByaW50bG4obXNnKTsKLQl9CisgICAgICAgU3lzdGVtLm91dC5wcmludGxuKG1zZyk7CisgICAgfQogICAgIH0KIH0gLy8gY2xhc3MKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL3N0cmVzcy9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL3N0cmVzcy9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IDM4MTFhMjkuLmRiYTIyMmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9zdHJlc3MvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvc3RyZXNzL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgIDwvcmVzb3VyY2UtcmVmPgogICAgICAgPHJlc291cmNlLWVudi1yZWY+CiAgICAgICAgIDxyZXNvdXJjZS1lbnYtcmVmLW5hbWU+am1zL2NsaWVudFF1ZXVlPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+Ci0JPHJlc291cmNlLWVudi1yZWYtdHlwZT5qYWthcnRhLmptcy5RdWV1ZTwvcmVzb3VyY2UtZW52LXJlZi10eXBlPgorICAgIDxyZXNvdXJjZS1lbnYtcmVmLXR5cGU+amFrYXJ0YS5qbXMuUXVldWU8L3Jlc291cmNlLWVudi1yZWYtdHlwZT4KICAgICAgIDwvcmVzb3VyY2UtZW52LXJlZj4KICAgICA8L21lc3NhZ2UtZHJpdmVuPgogICA8L2VudGVycHJpc2UtYmVhbnM+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvc3RyZXNzL2VqYi9TaW1wbGVNZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL3N0cmVzcy9lamIvU2ltcGxlTWVzc2FnZUJlYW4uamF2YQppbmRleCA1NjQ1YjkxLi5jMzNiNzUzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvc3RyZXNzL2VqYi9TaW1wbGVNZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS9zdHJlc3MvZWpiL1NpbXBsZU1lc3NhZ2VCZWFuLmphdmEKQEAgLTQyLDExICs0MiwxMSBAQAogICAgIHB1YmxpYyB2b2lkIHNldE1lc3NhZ2VEcml2ZW5Db250ZXh0KE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYykgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluICIKICAgICAgICAgICAgICsgIlNpbXBsZU1lc3NhZ2VCZWFuLnNldE1lc3NhZ2VEcml2ZW5Db250ZXh0KCkiKTsKLQl0aGlzLm1kYyA9IG1kYzsKKyAgICB0aGlzLm1kYyA9IG1kYzsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW1wbGVNZXNzYWdlQmVhbi5lamJDcmVhdGUoKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2ltcGxlTWVzc2FnZUJlYW4uZWpiQ3JlYXRlKCkiKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGpuZGlDb250ZXh0ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBxdWV1ZUNvbm5lY3Rpb25GYWN0b3J5ID0gKFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkpCkBAIC02NywyMiArNjcsMjIgQEAKICAgICAgICAgICAgICAgICBtc2cgPSAoVGV4dE1lc3NhZ2UpIGluTWVzc2FnZTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk1FU1NBR0UgQkVBTjogTWVzc2FnZSByZWNlaXZlZDogIgogICAgICAgICAgICAgICAgICAgICArIG1zZy5nZXRUZXh0KCkpOwotCQlsb25nIHNsZWVwVGltZSA9IG1zZy5nZXRMb25nUHJvcGVydHkoInNsZWVwdGltZSIpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlNsZWVwaW5nIGZvciA6ICIgKyBzbGVlcFRpbWUgKyAiIG1pbGxpIHNlY29uZHMgIik7Ci0JCVRocmVhZC5zbGVlcChzbGVlcFRpbWUpOwotCQlxdWV1ZUNvbm5lY3Rpb24gPQotCSAgICAgICAgICAgIHF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkuY3JlYXRlUXVldWVDb25uZWN0aW9uKCk7Ci0JCXF1ZXVlU2Vzc2lvbiA9Ci0JICAgICAgICAgICAgcXVldWVDb25uZWN0aW9uLmNyZWF0ZVF1ZXVlU2Vzc2lvbihmYWxzZSwKLQkJICAgIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSk7Ci0JCXF1ZXVlU2VuZGVyID0gcXVldWVTZXNzaW9uLmNyZWF0ZVNlbmRlcihxdWV1ZSk7Ci0JCVRleHRNZXNzYWdlIG1lc3NhZ2UgPSBxdWV1ZVNlc3Npb24uY3JlYXRlVGV4dE1lc3NhZ2UoKTsKKyAgICAgICAgbG9uZyBzbGVlcFRpbWUgPSBtc2cuZ2V0TG9uZ1Byb3BlcnR5KCJzbGVlcHRpbWUiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTbGVlcGluZyBmb3IgOiAiICsgc2xlZXBUaW1lICsgIiBtaWxsaSBzZWNvbmRzICIpOworICAgICAgICBUaHJlYWQuc2xlZXAoc2xlZXBUaW1lKTsKKyAgICAgICAgcXVldWVDb25uZWN0aW9uID0KKyAgICAgICAgICAgICAgICBxdWV1ZUNvbm5lY3Rpb25GYWN0b3J5LmNyZWF0ZVF1ZXVlQ29ubmVjdGlvbigpOworICAgICAgICBxdWV1ZVNlc3Npb24gPQorICAgICAgICAgICAgICAgIHF1ZXVlQ29ubmVjdGlvbi5jcmVhdGVRdWV1ZVNlc3Npb24oZmFsc2UsCisgICAgICAgICAgICBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UpOworICAgICAgICBxdWV1ZVNlbmRlciA9IHF1ZXVlU2Vzc2lvbi5jcmVhdGVTZW5kZXIocXVldWUpOworICAgICAgICBUZXh0TWVzc2FnZSBtZXNzYWdlID0gcXVldWVTZXNzaW9uLmNyZWF0ZVRleHRNZXNzYWdlKCk7CiAKLQkJbWVzc2FnZS5zZXRUZXh0KCJSRVBMSUVEOiIgKyBtc2cuZ2V0VGV4dCgpKTsKLQkJbWVzc2FnZS5zZXRJbnRQcm9wZXJ0eSgicmVwbHlpZCIsIG1zZy5nZXRJbnRQcm9wZXJ0eSgiaWQiKSApOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlNlbmRpbmcgbWVzc2FnZTogIiArCi0JCW1lc3NhZ2UuZ2V0VGV4dCgpKTsKLQkJcXVldWVTZW5kZXIuc2VuZChtZXNzYWdlKTsKKyAgICAgICAgbWVzc2FnZS5zZXRUZXh0KCJSRVBMSUVEOiIgKyBtc2cuZ2V0VGV4dCgpKTsKKyAgICAgICAgbWVzc2FnZS5zZXRJbnRQcm9wZXJ0eSgicmVwbHlpZCIsIG1zZy5nZXRJbnRQcm9wZXJ0eSgiaWQiKSApOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlbmRpbmcgbWVzc2FnZTogIiArCisgICAgICAgIG1lc3NhZ2UuZ2V0VGV4dCgpKTsKKyAgICAgICAgcXVldWVTZW5kZXIuc2VuZChtZXNzYWdlKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNZXNzYWdlIG9mIHdyb25nIHR5cGU6ICIKICAgICAgICAgICAgICAgICAgICAgKyBpbk1lc3NhZ2UuZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOwpAQCAtOTIsMTIgKzkyLDEyIEBACiAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0ZSkgewogICAgICAgICAgICAgdGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0gZmluYWxseSB7Ci0JICAgIHRyeSB7Ci0JICAgICAgICBxdWV1ZVNlc3Npb24uY2xvc2UoKTsKLQkJcXVldWVDb25uZWN0aW9uLmNsb3NlKCk7Ci0JICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIH0KLQl9CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBxdWV1ZVNlc3Npb24uY2xvc2UoKTsKKyAgICAgICAgcXVldWVDb25uZWN0aW9uLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIH0KKyAgICB9CiAgICAgfSAgLy8gb25NZXNzYWdlCiAKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvdmFyaG9tZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL3ZhcmhvbWUvYnVpbGQucHJvcGVydGllcwppbmRleCA2MWNlM2MzLi5mOTk2YjIyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvdmFyaG9tZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS92YXJob21lL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIxICsxNSwyMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY29ubmVjdG9yLW1xIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zaW1wbGVzdHJlc3MiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNpbXBsZXN0cmVzcyIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJjb20uc3VuLnMxcGVxZS5jb25uZWN0b3IubXEuc2ltcGxlc3RyZXNzLmNsaWVudC5TaW1wbGVNZXNzYWdlQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9ImNvbS5zdW4uczFwZXFlLmNvbm5lY3Rvci5tcS5zaW1wbGVzdHJlc3MuY2xpZW50LlNpbXBsZU1lc3NhZ2VDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL3ZhcmhvbWUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL3ZhcmhvbWUvYnVpbGQueG1sCmluZGV4IDhmZDRiNmYuLjQ3NmJhYTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS92YXJob21lL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvdmFyaG9tZS9idWlsZC54bWwKQEAgLTM3LDcgKzM3LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ5LDEzICs0OSwxMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkJlYW4qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQqLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qbXMtY29tbW9uIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWptcy1yZXNvdXJjZS1jb21tb24iPgpAQCAtNzMsMTYgKzczLDE2IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iID4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ0ZXN0LXNlbmQtcmVjZWl2ZS1tZXNzYWdlIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idGVzdC1zZW5kLXJlY3JlYXRlLWZhaWwiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ0ZXN0LXNlbmQtY3JlYXRlLW5ld2RvbWFpbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1bnNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktam1zLWNvbW1vbiIvPgpAQCAtMTAzLDY3ICsxMDMsNjcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ1c2VyUGFzc3dvcmQiIHZhbHVlPSJwYXNzd29yZDEiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqbXNTZXJ2ZXIiIHZhbHVlPSIiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ2YXJkaXIiIHZhbHVlPSIiLz4KLQk8L2FudGNhbGw+CisgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiAKLQkgICAgICAgICAgIHZhbHVlPSJUZXN0TmV3VXNlciBTRU5EUkVDRUlWRSBWRVJJRlkgdXNlcjEgcGFzc3dvcmQxIi8+Ci0JPC9hbnRjYWxsPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIgorICAgICAgICAgICAgICAgdmFsdWU9IlRlc3ROZXdVc2VyIFNFTkRSRUNFSVZFIFZFUklGWSB1c2VyMSBwYXNzd29yZDEiLz4KKyAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InRlc3Qtc2VuZC1yZWNyZWF0ZS1mYWlsIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgCi0JICAgICAgICAgICB2YWx1ZT0iU2V0dGluZ3VwTG9vc2VNZXNzYWdlT25SZWNyZWF0ZSBTRU5EIE5PVkVSSUZZIHVzZXIxIHBhc3N3b3JkMSIvPgotCTwvYW50Y2FsbD4KLQk8YW50Y2FsbCB0YXJnZXQ9InN0YXJ0LWNsZWFuLXNlcnZlciIvPgotCTxhbnRjYWxsIHRhcmdldD0ic2V0dXAiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIKKyAgICAgICAgICAgICAgIHZhbHVlPSJTZXR0aW5ndXBMb29zZU1lc3NhZ2VPblJlY3JlYXRlIFNFTkQgTk9WRVJJRlkgdXNlcjEgcGFzc3dvcmQxIi8+CisgICAgPC9hbnRjYWxsPgorICAgIDxhbnRjYWxsIHRhcmdldD0ic3RhcnQtY2xlYW4tc2VydmVyIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXR1cCIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qbXMtdXNlciI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0idXNlck5hbWUiIHZhbHVlPSJ1c2VyMSIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InVzZXJQYXNzd29yZCIgdmFsdWU9InBhc3N3b3JkMSIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imptc1NlcnZlciIgdmFsdWU9IiIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InZhcmRpciIgdmFsdWU9IiIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9IkZBSUxPTkVSUiIgdmFsdWU9InRydWUiLz4KLQk8L2FudGNhbGw+CisgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiAKLQkgICAgICAgICAgIHZhbHVlPSJUZXN0TG9vc2VNZXNzYWdlT25SZWNyZWF0ZSBSRUNFSVZFIE5PVkVSSUZZIHVzZXIxIHBhc3N3b3JkMSIvPgotCTwvYW50Y2FsbD4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIKKyAgICAgICAgICAgICAgIHZhbHVlPSJUZXN0TG9vc2VNZXNzYWdlT25SZWNyZWF0ZSBSRUNFSVZFIE5PVkVSSUZZIHVzZXIxIHBhc3N3b3JkMSIvPgorICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IG5hbWU9InRlc3Qtc2VuZC1jcmVhdGUtbmV3ZG9tYWluIj4KLQk8YW50Y2FsbCB0YXJnZXQ9InN0b3BEb21haW4iLz4KLQk8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1kb21haW4tY29tbW9uIj4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InN0b3BEb21haW4iLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1kb21haW4tY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5kb21haW4iIHZhbHVlPSJkb21haW4yIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaHR0cC5wb3J0IiB2YWx1ZT0iNDgwODAiLz4KLQkgICAgPHBhcmFtIG5hbWU9Im9yYi5wb3J0IiB2YWx1ZT0iNDM3MDAiLz4JCQkKLQk8L2FudGNhbGw+Ci0JPGFudGNhbGwgdGFyZ2V0PSJzdGFydERvbWFpbiI+CisgICAgICAgIDxwYXJhbSBuYW1lPSJvcmIucG9ydCIgdmFsdWU9IjQzNzAwIi8+CisgICAgPC9hbnRjYWxsPgorICAgIDxhbnRjYWxsIHRhcmdldD0ic3RhcnREb21haW4iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmRvbWFpbiIgdmFsdWU9ImRvbWFpbjIiLz4KLQk8L2FudGNhbGw+CisgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qbXMtdXNlciI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0idXNlck5hbWUiIHZhbHVlPSJ1c2VyMSIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InVzZXJQYXNzd29yZCIgdmFsdWU9InBhc3N3b3JkMSIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imptc1NlcnZlciIgdmFsdWU9IiIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InZhcmRpciIgdmFsdWU9Ii12YXJob21lICR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4yL2ltcSIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9IkZBSUxPTkVSUiIgdmFsdWU9InRydWUiLz4KLQk8L2FudGNhbGw+Ci0JPGFudGNhbGwgdGFyZ2V0PSJzZXR1cCIvPgorICAgIDwvYW50Y2FsbD4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InNldHVwIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIAotCSAgICAgICAgICAgdmFsdWU9IlNlbmRNZXNzYWdlVG9OZXdEb21haW5NUVN0b3JlIFNFTkQgTk9WRVJJRlkgdXNlcjEgcGFzc3dvcmQxIi8+Ci0JPC9hbnRjYWxsPgotCTxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIgorICAgICAgICAgICAgICAgdmFsdWU9IlNlbmRNZXNzYWdlVG9OZXdEb21haW5NUVN0b3JlIFNFTkQgTk9WRVJJRlkgdXNlcjEgcGFzc3dvcmQxIi8+CisgICAgPC9hbnRjYWxsPgorICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiAKLQkgICAgICAgICAgIHZhbHVlPSJUZXN0UmVjZWl2ZU5ld0RvbWFpbk1RU3RvcmUgUkVDRUlWRSBWRVJJRlkgdXNlcjEgcGFzc3dvcmQxIi8+Ci0JPC9hbnRjYWxsPgotCTxhbnRjYWxsIHRhcmdldD0ic3RvcERvbWFpbiI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiCisgICAgICAgICAgICAgICB2YWx1ZT0iVGVzdFJlY2VpdmVOZXdEb21haW5NUVN0b3JlIFJFQ0VJVkUgVkVSSUZZIHVzZXIxIHBhc3N3b3JkMSIvPgorICAgIDwvYW50Y2FsbD4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InN0b3BEb21haW4iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmRvbWFpbiIgdmFsdWU9ImRvbWFpbjIiLz4KLQk8L2FudGNhbGw+Ci0JPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtZG9tYWluLWNvbW1vbiI+CisgICAgPC9hbnRjYWxsPgorICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWRvbWFpbi1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmRvbWFpbiIgdmFsdWU9ImRvbWFpbjIiLz4KLQk8L2FudGNhbGw+Ci0JPGFudGNhbGwgdGFyZ2V0PSJzdGFydERvbWFpbiIvPgorICAgIDwvYW50Y2FsbD4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InN0YXJ0RG9tYWluIi8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1qbXMtdXNlciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL3ZhcmhvbWUvY2xpZW50L1NpbXBsZU1lc3NhZ2VDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS92YXJob21lL2NsaWVudC9TaW1wbGVNZXNzYWdlQ2xpZW50LmphdmEKaW5kZXggOTY3YzhkMy4uZDViMjMyMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL3ZhcmhvbWUvY2xpZW50L1NpbXBsZU1lc3NhZ2VDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvdmFyaG9tZS9jbGllbnQvU2ltcGxlTWVzc2FnZUNsaWVudC5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAgICAgc3RhdGljIFN0cmluZyB1c2VyID0gbnVsbDsKICAgICBzdGF0aWMgU3RyaW5nIHBhc3N3b3JkID0gbnVsbDsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBpbnQgaWQgPTA7CkBAIC00MCwzOCArNDAsMzggQEAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihhcmdzKTsKIAotCS8vaWYgKGFyZ3MubGVuZ3RoID4wKSByZXR1cm47Ci0JCi0JU3RyaW5nIHRlc3RJZCA9IGFyZ3NbMF07Ci0JU3RyaW5nIHRlc3RTdHJpbmcgPSBhcmdzWzFdOwotCVN0cmluZyB2ZXJpZnkgPSBhcmdzWzJdOwotCXVzZXIgPSBhcmdzWzNdOwotCXBhc3N3b3JkID0gYXJnc1s0XTsKKyAgICAvL2lmIChhcmdzLmxlbmd0aCA+MCkgcmV0dXJuOworCisgICAgU3RyaW5nIHRlc3RJZCA9IGFyZ3NbMF07CisgICAgU3RyaW5nIHRlc3RTdHJpbmcgPSBhcmdzWzFdOworICAgIFN0cmluZyB2ZXJpZnkgPSBhcmdzWzJdOworICAgIHVzZXIgPSBhcmdzWzNdOworICAgIHBhc3N3b3JkID0gYXJnc1s0XTsKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgYm9vbGVhbiBwYXNzID0gdHJ1ZTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJSdW5uaW5nIHRoZSB0ZXN0IDogIiArIHRlc3RJZCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUnVubmluZyB0aGUgdGVzdCA6ICIgKyB0ZXN0SWQpOwogCi0JICAgIGlmICh0ZXN0U3RyaW5nLnN0YXJ0c1dpdGgoIlNFTkQiKSkgeyAKLQkgICAgICAgIHNlbmRNZXNzYWdlKCk7Ci0JICAgIH0KLQkgICAgCi0JICAgIFN0cmluZyBvdXRwdXQgPSBudWxsOwotCSAgICBpZiAodGVzdFN0cmluZy5lbmRzV2l0aCgiUkVDRUlWRSIpKSB7Ci0JICAgICAgICBvdXRwdXQgPSByZWNlaXZlTWVzc2FnZSgpOwotCSAgICB9CisgICAgICAgIGlmICh0ZXN0U3RyaW5nLnN0YXJ0c1dpdGgoIlNFTkQiKSkgeworICAgICAgICAgICAgc2VuZE1lc3NhZ2UoKTsKKyAgICAgICAgfQogCi0JICAgIGlmICh2ZXJpZnkuZXF1YWxzKCJWRVJJRlkiKSkgewotCSAgICAgICAgcGFzcyA9IG91dHB1dC5lcXVhbHMoIlJFUExJRUQ6Q0xJRU5UIik7Ci0JICAgIH0gZWxzZSB7Ci0JICAgICAgICBwYXNzID0gKG91dHB1dCA9PSBudWxsKTsKLQkgICAgfQorICAgICAgICBTdHJpbmcgb3V0cHV0ID0gbnVsbDsKKyAgICAgICAgaWYgKHRlc3RTdHJpbmcuZW5kc1dpdGgoIlJFQ0VJVkUiKSkgeworICAgICAgICAgICAgb3V0cHV0ID0gcmVjZWl2ZU1lc3NhZ2UoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh2ZXJpZnkuZXF1YWxzKCJWRVJJRlkiKSkgeworICAgICAgICAgICAgcGFzcyA9IG91dHB1dC5lcXVhbHMoIlJFUExJRUQ6Q0xJRU5UIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwYXNzID0gKG91dHB1dCA9PSBudWxsKTsKKyAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAocGFzcykgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LkZBSUwpOwotCSAgICB9CisgICAgICAgIH0KICAgICAgICAgfWNhdGNoIChUaHJvd2FibGUgdCkgewogICAgICAgICAgICAgdC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5GQUlMKTsKQEAgLTc5LDcgKzc5LDcgQEAKICAgICAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KHRlc3RJZCk7CiAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgwKTsKICAgICAgICAgfQotICAgICAgICAgCisKICAgICB9CiAKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyByZWNlaXZlTWVzc2FnZSgpIHsKQEAgLTEwNiwxNiArMTA2LDE2IEBACiAgICAgICAgICAgICBxdWV1ZUNvbm5lY3Rpb24uc3RhcnQoKTsKICAgICAgICAgICAgIHF1ZXVlUmVjZWl2ZXIgPSBxdWV1ZVNlc3Npb24uY3JlYXRlUmVjZWl2ZXIocXVldWUpOwogCi0JICAgIEhhc2hNYXAgbWFwID0gbmV3IEhhc2hNYXAoKTsKKyAgICAgICAgSGFzaE1hcCBtYXAgPSBuZXcgSGFzaE1hcCgpOwogCiAgICAgICAgICAgICBsb25nIHN0YXJ0VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwogICAgICAgICAgICAgYm9vbGVhbiBwYXNzID0gdHJ1ZTsKICAgICAgICAgICAgIFRleHRNZXNzYWdlIG1zZyA9IChUZXh0TWVzc2FnZSkgcXVldWVSZWNlaXZlci5yZWNlaXZlKFRJTUVfT1VUKTsKLQkgICAgaWYgKG1zZyA9PSBudWxsKSB7Ci0JICAgICAgIHJldHVybiBudWxsOwotCSAgICB9Ci0JICAgIEludGVnZXIgaWQgPSBuZXcgSW50ZWdlcihtc2cuZ2V0SW50UHJvcGVydHkoInJlcGx5aWQiKSk7Ci0JICAgIHJldHVybiBtc2cuZ2V0VGV4dCgpOworICAgICAgICBpZiAobXNnID09IG51bGwpIHsKKyAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgSW50ZWdlciBpZCA9IG5ldyBJbnRlZ2VyKG1zZy5nZXRJbnRQcm9wZXJ0eSgicmVwbHlpZCIpKTsKKyAgICAgICAgcmV0dXJuIG1zZy5nZXRUZXh0KCk7CiAgICAgICAgIH1jYXRjaCAoVGhyb3dhYmxlIHQpIHsKICAgICAgICAgICAgIHQucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH1maW5hbGx5IHsKQEAgLTE1Myw5ICsxNTMsOSBAQAogICAgICAgICAgICAgcXVldWVTZW5kZXIgPSBxdWV1ZVNlc3Npb24uY3JlYXRlU2VuZGVyKHF1ZXVlKTsKICAgICAgICAgICAgIG1lc3NhZ2UgPSBxdWV1ZVNlc3Npb24uY3JlYXRlVGV4dE1lc3NhZ2UoKTsKICAgICAgICAgICAgIG1lc3NhZ2Uuc2V0VGV4dCgiQ0xJRU5UIik7Ci0JICAgIG1lc3NhZ2Uuc2V0SW50UHJvcGVydHkoImlkIiwxKTsKKyAgICAgICAgbWVzc2FnZS5zZXRJbnRQcm9wZXJ0eSgiaWQiLDEpOwogICAgICAgICAgICAgcXVldWVTZW5kZXIuc2VuZChtZXNzYWdlKTsKLQkgICAgZGVidWcoIlNlbmQgdGhlIG1lc3NhZ2UgOiIgKyBtZXNzYWdlLmdldEludFByb3BlcnR5KCJpZCIpICsgIjoiICsgbWVzc2FnZS5nZXRUZXh0KCkpOworICAgICAgICBkZWJ1ZygiU2VuZCB0aGUgbWVzc2FnZSA6IiArIG1lc3NhZ2UuZ2V0SW50UHJvcGVydHkoImlkIikgKyAiOiIgKyBtZXNzYWdlLmdldFRleHQoKSk7CiAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSBlKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4Y2VwdGlvbiBvY2N1cnJlZDogIiArIGUudG9TdHJpbmcoKSk7CiAgICAgICAgIH0gZmluYWxseSB7CkBAIC0xNjksOCArMTY5LDggQEAKIAogICAgIHN0YXRpYyB2b2lkIGRlYnVnKFN0cmluZyBtc2cpIHsKICAgICAgICAgaWYgKGRlYnVnKSB7Ci0JICAgU3lzdGVtLm91dC5wcmludGxuKG1zZyk7Ci0JfQorICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihtc2cpOworICAgIH0KICAgICB9CiB9IC8vIGNsYXNzCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS92YXJob21lL2Rlc2NyaXB0b3IvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvbXEvdmFyaG9tZS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IDM4MTFhMjkuLmRiYTIyMmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS92YXJob21lL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL3ZhcmhvbWUvZGVzY3JpcHRvci9lamItamFyLnhtbApAQCAtMzcsNyArMzcsNyBAQAogICAgICAgPC9yZXNvdXJjZS1yZWY+CiAgICAgICA8cmVzb3VyY2UtZW52LXJlZj4KICAgICAgICAgPHJlc291cmNlLWVudi1yZWYtbmFtZT5qbXMvY2xpZW50UXVldWU8L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KLQk8cmVzb3VyY2UtZW52LXJlZi10eXBlPmpha2FydGEuam1zLlF1ZXVlPC9yZXNvdXJjZS1lbnYtcmVmLXR5cGU+CisgICAgPHJlc291cmNlLWVudi1yZWYtdHlwZT5qYWthcnRhLmptcy5RdWV1ZTwvcmVzb3VyY2UtZW52LXJlZi10eXBlPgogICAgICAgPC9yZXNvdXJjZS1lbnYtcmVmPgogICAgIDwvbWVzc2FnZS1kcml2ZW4+CiAgIDwvZW50ZXJwcmlzZS1iZWFucz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9tcS92YXJob21lL2VqYi9TaW1wbGVNZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL3ZhcmhvbWUvZWpiL1NpbXBsZU1lc3NhZ2VCZWFuLmphdmEKaW5kZXggMDdiMzE4NC4uYTgzZWM1NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL3ZhcmhvbWUvZWpiL1NpbXBsZU1lc3NhZ2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL21xL3ZhcmhvbWUvZWpiL1NpbXBsZU1lc3NhZ2VCZWFuLmphdmEKQEAgLTQyLDExICs0MiwxMSBAQAogICAgIHB1YmxpYyB2b2lkIHNldE1lc3NhZ2VEcml2ZW5Db250ZXh0KE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYykgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluICIKICAgICAgICAgICAgICsgIlNpbXBsZU1lc3NhZ2VCZWFuLnNldE1lc3NhZ2VEcml2ZW5Db250ZXh0KCkiKTsKLQl0aGlzLm1kYyA9IG1kYzsKKyAgICB0aGlzLm1kYyA9IG1kYzsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW1wbGVNZXNzYWdlQmVhbi5lamJDcmVhdGUoKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2ltcGxlTWVzc2FnZUJlYW4uZWpiQ3JlYXRlKCkiKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGpuZGlDb250ZXh0ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBxdWV1ZUNvbm5lY3Rpb25GYWN0b3J5ID0gKFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkpCkBAIC02NywxOSArNjcsMTkgQEAKICAgICAgICAgICAgICAgICBtc2cgPSAoVGV4dE1lc3NhZ2UpIGluTWVzc2FnZTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk1FU1NBR0UgQkVBTjogTWVzc2FnZSByZWNlaXZlZDogIgogICAgICAgICAgICAgICAgICAgICArIG1zZy5nZXRUZXh0KCkpOwotCQlxdWV1ZUNvbm5lY3Rpb24gPQotCSAgICAgICAgICAgIHF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkuY3JlYXRlUXVldWVDb25uZWN0aW9uKCk7Ci0JCXF1ZXVlU2Vzc2lvbiA9Ci0JICAgICAgICAgICAgcXVldWVDb25uZWN0aW9uLmNyZWF0ZVF1ZXVlU2Vzc2lvbihmYWxzZSwKLQkJICAgIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSk7Ci0JCXF1ZXVlU2VuZGVyID0gcXVldWVTZXNzaW9uLmNyZWF0ZVNlbmRlcihxdWV1ZSk7Ci0JCVRleHRNZXNzYWdlIG1lc3NhZ2UgPSBxdWV1ZVNlc3Npb24uY3JlYXRlVGV4dE1lc3NhZ2UoKTsKKyAgICAgICAgcXVldWVDb25uZWN0aW9uID0KKyAgICAgICAgICAgICAgICBxdWV1ZUNvbm5lY3Rpb25GYWN0b3J5LmNyZWF0ZVF1ZXVlQ29ubmVjdGlvbigpOworICAgICAgICBxdWV1ZVNlc3Npb24gPQorICAgICAgICAgICAgICAgIHF1ZXVlQ29ubmVjdGlvbi5jcmVhdGVRdWV1ZVNlc3Npb24oZmFsc2UsCisgICAgICAgICAgICBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UpOworICAgICAgICBxdWV1ZVNlbmRlciA9IHF1ZXVlU2Vzc2lvbi5jcmVhdGVTZW5kZXIocXVldWUpOworICAgICAgICBUZXh0TWVzc2FnZSBtZXNzYWdlID0gcXVldWVTZXNzaW9uLmNyZWF0ZVRleHRNZXNzYWdlKCk7CiAKLQkJbWVzc2FnZS5zZXRUZXh0KCJSRVBMSUVEOiIgKyBtc2cuZ2V0VGV4dCgpKTsKLQkJbWVzc2FnZS5zZXRJbnRQcm9wZXJ0eSgicmVwbHlpZCIsIG1zZy5nZXRJbnRQcm9wZXJ0eSgiaWQiKSApOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlNlbmRpbmcgbWVzc2FnZTogIiArCi0JCW1lc3NhZ2UuZ2V0VGV4dCgpKTsKLQkJcXVldWVTZW5kZXIuc2VuZChtZXNzYWdlKTsKKyAgICAgICAgbWVzc2FnZS5zZXRUZXh0KCJSRVBMSUVEOiIgKyBtc2cuZ2V0VGV4dCgpKTsKKyAgICAgICAgbWVzc2FnZS5zZXRJbnRQcm9wZXJ0eSgicmVwbHlpZCIsIG1zZy5nZXRJbnRQcm9wZXJ0eSgiaWQiKSApOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlbmRpbmcgbWVzc2FnZTogIiArCisgICAgICAgIG1lc3NhZ2UuZ2V0VGV4dCgpKTsKKyAgICAgICAgcXVldWVTZW5kZXIuc2VuZChtZXNzYWdlKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNZXNzYWdlIG9mIHdyb25nIHR5cGU6ICIKICAgICAgICAgICAgICAgICAgICAgKyBpbk1lc3NhZ2UuZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOwpAQCAtODksMTIgKzg5LDEyIEBACiAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0ZSkgewogICAgICAgICAgICAgdGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0gZmluYWxseSB7Ci0JICAgIHRyeSB7Ci0JICAgICAgICBxdWV1ZVNlc3Npb24uY2xvc2UoKTsKLQkJcXVldWVDb25uZWN0aW9uLmNsb3NlKCk7Ci0JICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIH0KLQl9CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBxdWV1ZVNlc3Npb24uY2xvc2UoKTsKKyAgICAgICAgcXVldWVDb25uZWN0aW9uLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIH0KKyAgICB9CiAgICAgfSAgLy8gb25NZXNzYWdlCiAKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uYWNjL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uYWNjL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggY2U5ZTFiZi4uN2E5NjRkYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbmFjYy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25hY2MvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJub25hY2MiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNpbXBsZSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2ltcGxlIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9ImNvbS5zdW4uczFwZXFlLm5vbmFjYy5zaW1wbGUuY2xpZW50LlNpbXBsZU1lc3NhZ2VDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iY29tLnN1bi5zMXBlcWUubm9uYWNjLnNpbXBsZS5jbGllbnQuU2ltcGxlTWVzc2FnZUNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iam1zcmEuamFyIiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9saWIvaW5zdGFsbC9hcHBsaWNhdGlvbnMvam1zcmEvaW1xam1zcmEuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9Im9yYi5ob3N0IiB2YWx1ZT0ibG9jYWxob3N0Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uYWNjL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25hY2MvYnVpbGQueG1sCmluZGV4IDAyZjFkNGUuLmY4OGY4MjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25hY2MvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25hY2MvYnVpbGQueG1sCkBAIC0yMSw3ICsyMSw3IEBACiA8IUVOVElUWSB0ZXN0cHJvcGVydGllcyBTWVNURU0gIi4vYnVpbGQucHJvcGVydGllcyI+CiA8IUVOVElUWSBjb21tb24gU1lTVEVNICIuLi8uLi8uLi9jb25maWcvY29tbW9uLnhtbCI+CiA8IUVOVElUWSB0ZXN0Y29tbW9uIFNZU1RFTSAiLi4vLi4vLi4vY29uZmlnL3Byb3BlcnRpZXMueG1sIj4KLSAgIAorCiBdPgogCiA8cHJvamVjdCBuYW1lPSJzaW1wbGVBcHAiIGRlZmF1bHQ9InVzYWdlIiBiYXNlZGlyPSIuIj4KQEAgLTQwLDcgKzQwLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTUyLDE3ICs1MiwxNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZWpiLWphci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypCZWFuKi5jbGFzcyIgLz4KLQk8L2FudGNhbGw+Ci0JPGVjaG8gbWVzc2FnZT0iUHJlcGFyaW5nIEphciBmaWxlIHRvIGV4ZWN1dGUgaW4gdGhlIGNsaWVudCAke2J1aWxkLmNsYXNzZXMuZGlyfSIgIC8+Ci0gIAk8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgotICAgICAgCSAgIHVwZGF0ZT0idHJ1ZSIgaW5jbHVkZXMgPSIqKi8qQ2xpZW50Ki5jbGFzcyIKKyAgICA8L2FudGNhbGw+CisgICAgPGVjaG8gbWVzc2FnZT0iUHJlcGFyaW5nIEphciBmaWxlIHRvIGV4ZWN1dGUgaW4gdGhlIGNsaWVudCAke2J1aWxkLmNsYXNzZXMuZGlyfSIgIC8+CisgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgorICAgICAgICAgICAgIHVwZGF0ZT0idHJ1ZSIgaW5jbHVkZXMgPSIqKi8qQ2xpZW50Ki5jbGFzcyIKICAgICAgICAgICBtYW5pZmVzdD0iLi9jbGllbnQvTUFOSUZFU1QuTUYiIC8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZWFyLWNvbW1vbiI+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWptcy1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTcwLDI1ICs3MCwyNSBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSIke3Rlc3QuY2xpZW50fSIgZm9yaz0idHJ1ZSI+Ci0JICAgPGNsYXNzcGF0aD4KLQkgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+Ci08IS0tCSAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7am1zcmEuamFyfSIvPi0tPgotCSAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIi8+Ci0JICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtqYXZhLmhvbWV9L2xpYi9qc3NlLmphciIvPgotCSAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXIiLz4KLTwhLS0JICAgICAgIDxwYXRoZWxlbWVudCBwYXRoPSIke3MxYXN0ZXN0LmNsYXNzcGF0aH0iLz4tLT4KLQkgICA8L2NsYXNzcGF0aD4KLQkgICA8c3lzcHJvcGVydHkga2V5PSJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxIb3N0IiB2YWx1ZT0iJHtvcmIuaG9zdH0iLz4KLQkgICA8c3lzcHJvcGVydHkga2V5PSJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0IiB2YWx1ZT0iJHtvcmIucG9ydH0iLz4KLQk8L2phdmE+CisgICAgICAgPGNsYXNzcGF0aD4KKyAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+Cis8IS0tICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7am1zcmEuamFyfSIvPi0tPgorICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIi8+CisgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtqYXZhLmhvbWV9L2xpYi9qc3NlLmphciIvPgorICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXIiLz4KKzwhLS0gICAgICAgICAgIDxwYXRoZWxlbWVudCBwYXRoPSIke3MxYXN0ZXN0LmNsYXNzcGF0aH0iLz4tLT4KKyAgICAgICA8L2NsYXNzcGF0aD4KKyAgICAgICA8c3lzcHJvcGVydHkga2V5PSJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxIb3N0IiB2YWx1ZT0iJHtvcmIuaG9zdH0iLz4KKyAgICAgICA8c3lzcHJvcGVydHkga2V5PSJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0IiB2YWx1ZT0iJHtvcmIucG9ydH0iLz4KKyAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVuc2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qbXMtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uYWNjL2NsaWVudC9TaW1wbGVNZXNzYWdlQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uYWNjL2NsaWVudC9TaW1wbGVNZXNzYWdlQ2xpZW50LmphdmEKaW5kZXggYTZmNzY5NS4uOTM1NTQxNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbmFjYy9jbGllbnQvU2ltcGxlTWVzc2FnZUNsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25hY2MvY2xpZW50L1NpbXBsZU1lc3NhZ2VDbGllbnQuamF2YQpAQCAtMjIsNyArMjIsNyBAQAogCiBwdWJsaWMgY2xhc3MgU2ltcGxlTWVzc2FnZUNsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbmFjYy9lamIvU2ltcGxlTWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25hY2MvZWpiL1NpbXBsZU1lc3NhZ2VCZWFuLmphdmEKaW5kZXggYWJlODVkOC4uNmQzM2U2NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbmFjYy9lamIvU2ltcGxlTWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uYWNjL2VqYi9TaW1wbGVNZXNzYWdlQmVhbi5qYXZhCkBAIC0zNCwxMSArMzQsMTEgQEAKICAgICBwdWJsaWMgdm9pZCBzZXRNZXNzYWdlRHJpdmVuQ29udGV4dChNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGMpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiAiCiAgICAgICAgICAgICArICJTaW1wbGVNZXNzYWdlQmVhbi5zZXRNZXNzYWdlRHJpdmVuQ29udGV4dCgpIik7Ci0JdGhpcy5tZGMgPSBtZGM7CisgICAgdGhpcy5tZGMgPSBtZGM7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2ltcGxlTWVzc2FnZUJlYW4uZWpiQ3JlYXRlKCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbXBsZU1lc3NhZ2VCZWFuLmVqYkNyZWF0ZSgpIik7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgb25NZXNzYWdlKE1lc3NhZ2UgaW5NZXNzYWdlKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvYnVpbGQucHJvcGVydGllcwppbmRleCBlMmNjNzVkLi5kYzE5YzliIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE2ICsxNSwxNiBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zdWJjbGFzc2luZyIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc3ViY2xhc3NpbmciLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9InN1YmNsYXNzaW5nIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9idWlsZC54bWwKaW5kZXggN2ZjZWNhZS4uNDZlOWI3MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL2J1aWxkLnhtbApAQCAtMzEsNyArMzEsNyBAQAogICAgICZjb21tb25CdWlsZDsKICAgICAmY29tbW9uUnVuOwogICAgICZ0ZXN0cHJvcGVydGllczsKLSAgICAKKwogPCEtLQogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCxzZXR1cCxkZXBsb3ktd2FyLCBydW4td2FyLCB1bmRlcGxveS13YXIsIGRlcGxveS1lYXIsIHJ1bi1lYXIsIHVuZGVwbG95LWVhciwgdW5zZXR1cCIvPgogCkBAIC00MCwxNSArNDAsMTUgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQsIGRlcGxveS1lYXIsIHNldHVwLCBydW4tZWFyLCB1bnNldHVwLCB1bmRlcGxveS1lYXIiLz4KIAogPCEtLQotCTxhbnRjYWxsIHRhcmdldD0iYnVpbGQiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InNldHVwIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJydW4td2FyIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXIiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1lYXIiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InJ1bi1lYXIiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWVhciIvPgotCTxhbnRjYWxsIHRhcmdldD0idW5zZXR1cCIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InNldHVwIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4td2FyIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXIiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1lYXIiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi1lYXIiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWVhciIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0idW5zZXR1cCIvPgogICAgIDwvdGFyZ2V0PgogLS0+CiAKQEAgLTU2LDcgKzU2LDcgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgICA8YW50IGRpcj0icmEiIHRhcmdldD0iY2xlYW4iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbm5lY3RvciI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9zaW1wbGVCYW5rLnNxbCIvPgpAQCAtNjQsNyArNjQsNyBAQAogICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLXBvb2wiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1yZXNvdXJjZSIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWFkbWluLW9iamVjdCIvPgotICAgICAgICAKKwogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLXBvb2wiPgogICAgICAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWNvbm5lY3Rvci1jb25ucG9vbC1jb21tb24iPgpAQCAtODksMTcgKzg5LDE3IEBACiAgICAgICAgICA8cHJvcGVydHkgZmlsZT0iLi4vY29uZmlnL29yYWNsZS5wcm9wZXJ0aWVzIi8+CiAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0iY3JlYXRlLWFkbWluLW9iamVjdCAtLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSAtLXJlc3R5cGUgY29tLnN1bi5qZGJjcmEuc3BpLkpkYmNTZXR1cEFkbWluIC0tcmFuYW1lICR7YXBwbmFtZX1BcHAjamRiY3JhIC0tcHJvcGVydHkgVGFibGVOYW1lPWN1c3RvbWVyMjpKbmRpTmFtZT1qZGJjL2VqYi1zdWJjbGFzc2luZzpTY2hlbWFOYW1lPWNvbm5lY3RvcjpOb09mUm93cz0xIi8+Ci0JICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iZWlzL2pkYmNBZG1pbiIvPgorICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9ImVpcy9qZGJjQWRtaW4iLz4KICAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgPC90YXJnZXQ+CiAKICAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtYWRtaW4tb2JqZWN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KLQkgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJkZWxldGUtYWRtaW4tb2JqZWN0Ii8+Ci0JICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0gZWlzL2pkYmNBZG1pbiIvPgotCSA8L2FudGNhbGw+Ci0JIDwvdGFyZ2V0PgotICAgIAorICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9ImRlbGV0ZS1hZG1pbi1vYmplY3QiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSBlaXMvamRiY0FkbWluIi8+CisgICAgIDwvYW50Y2FsbD4KKyAgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RhcnQiPgogICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXItaW5zdGFuY2UtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC0xMDcsMTUgKzEwNywxNSBAQAogICAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1yYS1jb25maWciIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJjcmVhdGUtcmVzb3VyY2UtYWRhcHRlci1jb25maWcgIC0tcHJvcGVydHkgUkFQcm9wZXJ0eT1WQUxJRCIvPgotCSAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7YXBwbmFtZX1BcHAjamRiY3JhIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHthcHBuYW1lfUFwcCNqZGJjcmEiLz4KICAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgPC90YXJnZXQ+CiAKICAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmEtY29uZmlnIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KLQkgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJkZWxldGUtcmVzb3VyY2UtYWRhcHRlci1jb25maWciLz4KLQkgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke2FwcG5hbWV9QXBwI2pkYmNyYSIvPgotCSA8L2FudGNhbGw+CisgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0iZGVsZXRlLXJlc291cmNlLWFkYXB0ZXItY29uZmlnIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHthcHBuYW1lfUFwcCNqZGJjcmEiLz4KKyAgICAgPC9hbnRjYWxsPgogICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idW5zZXR1cCI+CkBAIC0xMjcsNyArMTI3LDcgQEAKICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1wb29sIi8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtYWRtaW4tb2JqZWN0Ii8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1wb29sIj4KICAgICAgICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1jb25uZWN0b3ItY29ubnBvb2wtY29tbW9uIj4KICAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iY29ubmVjdG9yLmNvbnBvb2wubmFtZSIgdmFsdWU9ImVtYmVkZGVkLXJhLXBvb2wiLz4KQEAgLTEzNyw3ICsxMzcsNyBAQAogICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtY29ubmVjdG9yLXJlc291cmNlLWNvbW1vbiI+CiAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImNvbm5lY3Rvci5qbmRpLm5hbWUiIHZhbHVlPSJqZGJjL2VqYi1zdWJjbGFzc2luZyIvPgotCQk8L2FudGNhbGw+CisgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgpAQCAtMTUzLDkgKzE1Myw5IEBACiAgICAgICA8ZWNobyBtZXNzYWdlPSJjb21tb24ueG1sOiBDb21waWxpbmcgdGVzdCBzb3VyY2UgZmlsZXMiIGxldmVsPSJ2ZXJib3NlIi8+CiAgICAgICA8amF2YWMgc3JjZGlyPSJzZXJ2bGV0IgogICAgICAgICAgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCi0JIGNsYXNzcGF0aD0iJHtzMWFzdGVzdC5jbGFzc3BhdGh9OnJhL3B1Ymxpc2gvaW50ZXJuYWwvY2xhc3NlcyIKKyAgICAgY2xhc3NwYXRoPSIke3MxYXN0ZXN0LmNsYXNzcGF0aH06cmEvcHVibGlzaC9pbnRlcm5hbC9jbGFzc2VzIgogICAgICAgICAgZGVidWc9Im9uIgotCSBmYWlsb25lcnJvcj0idHJ1ZSIvPgorICAgICBmYWlsb25lcnJvcj0idHJ1ZSIvPgogICAgICA8L3RhcmdldD4KIAogCkBAIC0xNjQsMzQgKzE2NCwzNCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgPGFudCBkaXI9InJhIiB0YXJnZXQ9ImFzc2VtYmxlIi8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgPC9hbnRjYWxsPgotICAgICAgIAorCiAgICAgPGFudGNhbGwgdGFyZ2V0PSJlamItamFyLWNvbW1vbiI+CiAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgIDwvYW50Y2FsbD4KIAotICAgIAorCiAgICAgPGRlbGV0ZSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS5lYXIiLz4KICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KLSAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPiAgICAKLSAgICA8ZWFyIGVhcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIgCisgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KKyAgICA8ZWFyIGVhcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIKICAgICAgYXBweG1sPSIke2FwcGxpY2F0aW9uLnhtbH0iPgogICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KICAgICAgIDxpbmNsdWRlIG5hbWU9IiouamFyIi8+CiAgICAgICA8aW5jbHVkZSBuYW1lPSIqLndhciIvPgotICAgIDwvZmlsZXNldD4gIAorICAgIDwvZmlsZXNldD4KICAgICA8ZmlsZXNldCBkaXI9InJhL3B1Ymxpc2gvbGliIj4KICAgICAgIDxpbmNsdWRlIG5hbWU9IioucmFyIi8+CiAgICAgPC9maWxlc2V0PgogICAgIDwvZWFyPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3ktZWFyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLXJhLWNvbmZpZyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KQEAgLTIwMCwyNyArMjAwLDI3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3ktd2FyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuLXdhciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bndlYmNsaWVudC1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJ3ZWItdG8tZWpiIChzdGFuZC1hbG9uZSB3YXIgYmFzZWQpIi8+Ci0JPC9hbnRjYWxsPgorICAgIDxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJ3ZWItdG8tZWpiIChzdGFuZC1hbG9uZSB3YXIgYmFzZWQpIi8+CisgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4tZWFyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVud2ViY2xpZW50LWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9InRlc3RzdWl0ZS5pZCIgdmFsdWU9IndlYi10by1lamIgKGVhciBiYXNlZCkiLz4KLQk8L2FudGNhbGw+CisgICAgPHBhcmFtIG5hbWU9InRlc3RzdWl0ZS5pZCIgdmFsdWU9IndlYi10by1lamIgKGVhciBiYXNlZCkiLz4KKyAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95LWVhciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1yYS1jb25maWciLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveS13YXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKaW5kZXggMWQxMjAwZC4uZGY0YmI5MyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKQEAgLTI5LDIwICsyOSwyMCBAQAogICAgICAgICA8cmVzLXJlZi1uYW1lPmpkYmMvU2ltcGxlQmFuazwvcmVzLXJlZi1uYW1lPgogICAgICAgICA8am5kaS1uYW1lPmpkYmMvZWpiLXN1YmNsYXNzaW5nPC9qbmRpLW5hbWU+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KLSAgICAgIDxpcy1yZWFkLW9ubHktYmVhbj5mYWxzZTwvaXMtcmVhZC1vbmx5LWJlYW4+IAotICAgICAgPGNvbW1pdC1vcHRpb24+QjwvY29tbWl0LW9wdGlvbj4gCi0gICAgIDxiZWFuLXBvb2w+IAotICAgICAgICAgPHN0ZWFkeS1wb29sLXNpemU+MDwvc3RlYWR5LXBvb2wtc2l6ZT4gCi0gICAgICAgICA8cmVzaXplLXF1YW50aXR5PjE8L3Jlc2l6ZS1xdWFudGl0eT4gCi0gICAgICAgICA8bWF4LXBvb2wtc2l6ZT4xMDwvbWF4LXBvb2wtc2l6ZT4gCi0gICAgICAgICA8cG9vbC1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4zNjAwPC9wb29sLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPiAKLSAgICAgIDwvYmVhbi1wb29sPiAKLSAgICAgIDxiZWFuLWNhY2hlPiAKLSAgICAgICAgICA8bWF4LWNhY2hlLXNpemU+MTAwPC9tYXgtY2FjaGUtc2l6ZT4gCi0gICAgICAgIDxjYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz42MDwvY2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+IAotICAgICAgICA8cmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+IAotICAgICAgICA8dmljdGltLXNlbGVjdGlvbi1wb2xpY3k+TFJVPC92aWN0aW0tc2VsZWN0aW9uLXBvbGljeT4gCi0gICAgICA8L2JlYW4tY2FjaGU+IAorICAgICAgPGlzLXJlYWQtb25seS1iZWFuPmZhbHNlPC9pcy1yZWFkLW9ubHktYmVhbj4KKyAgICAgIDxjb21taXQtb3B0aW9uPkI8L2NvbW1pdC1vcHRpb24+CisgICAgIDxiZWFuLXBvb2w+CisgICAgICAgICA8c3RlYWR5LXBvb2wtc2l6ZT4wPC9zdGVhZHktcG9vbC1zaXplPgorICAgICAgICAgPHJlc2l6ZS1xdWFudGl0eT4xPC9yZXNpemUtcXVhbnRpdHk+CisgICAgICAgICA8bWF4LXBvb2wtc2l6ZT4xMDwvbWF4LXBvb2wtc2l6ZT4KKyAgICAgICAgIDxwb29sLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjM2MDA8L3Bvb2wtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+CisgICAgICA8L2JlYW4tcG9vbD4KKyAgICAgIDxiZWFuLWNhY2hlPgorICAgICAgICAgIDxtYXgtY2FjaGUtc2l6ZT4xMDA8L21heC1jYWNoZS1zaXplPgorICAgICAgICA8Y2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+NjA8L2NhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPgorICAgICAgICA8cmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+CisgICAgICAgIDx2aWN0aW0tc2VsZWN0aW9uLXBvbGljeT5MUlU8L3ZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PgorICAgICAgPC9iZWFuLWNhY2hlPgogICAgIDwvZWpiPgogICAgIDxlamI+CiAgICAgICA8ZWpiLW5hbWU+Q3VzdG9tZXJDaGVja2luZ0VKQjwvZWpiLW5hbWU+CkBAIC01MSwyMCArNTEsMjAgQEAKICAgICAgICAgPHJlcy1yZWYtbmFtZT5qZGJjL1NpbXBsZUJhbms8L3Jlcy1yZWYtbmFtZT4KICAgICAgICAgPGpuZGktbmFtZT5qZGJjL2VqYi1zdWJjbGFzc2luZzwvam5kaS1uYW1lPgogICAgICAgPC9yZXNvdXJjZS1yZWY+Ci0gICAgICA8aXMtcmVhZC1vbmx5LWJlYW4+ZmFsc2U8L2lzLXJlYWQtb25seS1iZWFuPiAKLSAgICAgIDxjb21taXQtb3B0aW9uPkI8L2NvbW1pdC1vcHRpb24+IAotICAgICA8YmVhbi1wb29sPiAKLSAgICAgICAgIDxzdGVhZHktcG9vbC1zaXplPjA8L3N0ZWFkeS1wb29sLXNpemU+IAotICAgICAgICAgPHJlc2l6ZS1xdWFudGl0eT4xPC9yZXNpemUtcXVhbnRpdHk+IAotICAgICAgICAgPG1heC1wb29sLXNpemU+MTA8L21heC1wb29sLXNpemU+IAorICAgICAgPGlzLXJlYWQtb25seS1iZWFuPmZhbHNlPC9pcy1yZWFkLW9ubHktYmVhbj4KKyAgICAgIDxjb21taXQtb3B0aW9uPkI8L2NvbW1pdC1vcHRpb24+CisgICAgIDxiZWFuLXBvb2w+CisgICAgICAgICA8c3RlYWR5LXBvb2wtc2l6ZT4wPC9zdGVhZHktcG9vbC1zaXplPgorICAgICAgICAgPHJlc2l6ZS1xdWFudGl0eT4xPC9yZXNpemUtcXVhbnRpdHk+CisgICAgICAgICA8bWF4LXBvb2wtc2l6ZT4xMDwvbWF4LXBvb2wtc2l6ZT4KICAgICAgICAgPHBvb2wtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcG9vbC1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4KLSAgICAgIDwvYmVhbi1wb29sPiAKLSAgICAgIDxiZWFuLWNhY2hlPiAKKyAgICAgIDwvYmVhbi1wb29sPgorICAgICAgPGJlYW4tY2FjaGU+CiAgICAgICAgICAgPG1heC1jYWNoZS1zaXplPjEwMDwvbWF4LWNhY2hlLXNpemU+CiAgICAgICAgICAgPGNhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjYwPC9jYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4KICAgICAgICAgICA8cmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+CiAgICAgICAgICAgPHZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PkxSVTwvdmljdGltLXNlbGVjdGlvbi1wb2xpY3k+Ci0gICAgICA8L2JlYW4tY2FjaGU+IAorICAgICAgPC9iZWFuLWNhY2hlPgogICAgIDwvZWpiPgogICA8L2VudGVycHJpc2UtYmVhbnM+CiA8L3N1bi1lamItamFyPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvZWpiL0N1c3RvbWVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9lamIvQ3VzdG9tZXIuamF2YQppbmRleCA1OTIyZjMxLi4zNjE1ZTE2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9lamIvQ3VzdG9tZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9lamIvQ3VzdG9tZXIuamF2YQpAQCAtNDYsNCArNDYsNCBAQAogCiB9CiAKLSAgCisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL2VqYi9DdXN0b21lckNoZWNraW5nLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9lamIvQ3VzdG9tZXJDaGVja2luZy5qYXZhCmluZGV4IGZmMTVlN2UuLjg5ZGMzMjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL2VqYi9DdXN0b21lckNoZWNraW5nLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvZWpiL0N1c3RvbWVyQ2hlY2tpbmcuamF2YQpAQCAtMjIsNCArMjIsNCBAQAogewogfQogCi0gIAorCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9lamIvQ3VzdG9tZXJDaGVja2luZ0VKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvZWpiL0N1c3RvbWVyQ2hlY2tpbmdFSkIuamF2YQppbmRleCBlZTBkMTdjLi40YjU0NDQ0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9lamIvQ3VzdG9tZXJDaGVja2luZ0VKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL2VqYi9DdXN0b21lckNoZWNraW5nRUpCLmphdmEKQEAgLTk0LDUgKzk0LDUgQEAKICAgfQogCiB9Ci0gICAgCi0gICAgCisKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvZWpiL0N1c3RvbWVyRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9lamIvQ3VzdG9tZXJFSkIuamF2YQppbmRleCAwNTIwYjYwLi4wNzIyMGRiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9lamIvQ3VzdG9tZXJFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9lamIvQ3VzdG9tZXJFSkIuamF2YQpAQCAtNTMsNyArNTMsNyBAQAogCiAgIHB1YmxpYyBTdHJpbmcgZ2V0QWRkcmVzczEoKQogICB7Ci0gICAgcmV0dXJuIGFkZHJlc3MxOyAKKyAgICByZXR1cm4gYWRkcmVzczE7CiAgIH0KIAogICBwdWJsaWMgU3RyaW5nIGdldEFkZHJlc3MyKCkKQEAgLTEzOSw3ICsxMzksNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNRTCBleGNlcHRpb24gb2NjdXJlZCBpbiBlamJSZW1vdmUgbWV0aG9kIik7CiAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICB9Ci0gICAgCisKICAgfQogCiAgIHB1YmxpYyB2b2lkIGVqYlN0b3JlKCkKQEAgLTIwNiwxMiArMjA2LDEyIEBACiAgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU1FMRXhjZXB0aW9uIG9jY3VycmVkIGluIGVqYkxvYWQoKSBtZXRob2QiKTsKICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfSAgIAorICAgIH0KICAgfQogCiAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkge30KICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkge30KIH0KLSAgICAgIAotICAgIAotICAgIAorCisKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvZWpiL0N1c3RvbWVyU2F2aW5ncy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvZWpiL0N1c3RvbWVyU2F2aW5ncy5qYXZhCmluZGV4IDI3NDA2OTIuLmM0NWExYzUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL2VqYi9DdXN0b21lclNhdmluZ3MuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9lamIvQ3VzdG9tZXJTYXZpbmdzLmphdmEKQEAgLTIyLDQgKzIyLDQgQEAKIHsKIH0KIAotICAKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvZWpiL0N1c3RvbWVyU2F2aW5nc0VKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvZWpiL0N1c3RvbWVyU2F2aW5nc0VKQi5qYXZhCmluZGV4IGYzMGI1MDYuLmIwY2U3YjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL2VqYi9DdXN0b21lclNhdmluZ3NFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9lamIvQ3VzdG9tZXJTYXZpbmdzRUpCLmphdmEKQEAgLTk1LDYgKzk1LDYgQEAKICAgfQogCiB9Ci0gICAgICAKLSAgICAKLSAgICAKKworCisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGVlMmVjYTAuLmZkMjFjM2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvYnVpbGQucHJvcGVydGllcwpAQCAtMTQsNyArMTQsNyBAQAogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKICMKIAotICAgIAorCiAjIyMgQ29tcG9uZW50IFByb3BlcnRpZXMgIyMjCiBzcmMuZGlyPXNyYwogY29tcG9uZW50LnB1Ymxpc2guaG9tZT0uCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9idWlsZC54bWwKaW5kZXggY2I2NmE0NS4uM2FjZWVmMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL2J1aWxkLnhtbApAQCAtMjMsNjIgKzIzLDYyIEBACiAKIDxwcm9qZWN0IG5hbWU9IkpEQkNDb25uZWN0b3IgdG9wIGxldmVsIiBkZWZhdWx0PSJidWlsZCI+CiAgICAgPHByb3BlcnR5IG5hbWU9InBrZy5kaXIiIHZhbHVlPSJjb20vc3VuL2pkYmNyYS9zcGkiLz4KLSAgICAKKwogICAgICZjb21tb247CiAgICAgJnRlc3Rjb21tb247CiAgICAgPHByb3BlcnR5IGZpbGU9Ii4vYnVpbGQucHJvcGVydGllcyIvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSxhc3NlbWJsZSIgLz4KLSAgICAgICAgICAKKwogCiAgICAgPCEtLSBpbml0LiBJbml0aWFsaXphdGlvbiBpbnZvbHZlcyBjcmVhdGluZyBwdWJsaXNoaW5nIGRpcmVjdG9yaWVzIGFuZAotICAgICAgICAgT1Mgc3BlY2lmaWMgdGFyZ2V0cy4gLS0+IAorICAgICAgICAgT1Mgc3BlY2lmaWMgdGFyZ2V0cy4gLS0+CiAgICAgPHRhcmdldCBuYW1lPSJpbml0IiBkZXNjcmlwdGlvbj0iJHtjb21wb25lbnQubmFtZX0gaW5pdGlhbGl6YXRpb24iPgogICAgICAgICA8dHN0YW1wPgogICAgICAgICAgICAgPGZvcm1hdCBwcm9wZXJ0eT0ic3RhcnQudGltZSIgcGF0dGVybj0iTU0vZGQveXl5eSBoaDptbSBhYSIvPgotICAgICAgICA8L3RzdGFtcD4gICAgCisgICAgICAgIDwvdHN0YW1wPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJCdWlsZGluZyBjb21wb25lbnQgJHtjb21wb25lbnQubmFtZX0iLz4KICAgICAgICAgPG1rZGlyIGRpcj0iJHtjb21wb25lbnQuY2xhc3Nlcy5kaXJ9Ii8+Ci0gICAgICAgIDxta2RpciBkaXI9IiR7Y29tcG9uZW50LmxpYi5ob21lfSIvPiAgICAKKyAgICAgICAgPG1rZGlyIGRpcj0iJHtjb21wb25lbnQubGliLmhvbWV9Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgPCEtLSBjb21waWxlIC0tPiAKKyAgICA8IS0tIGNvbXBpbGUgLS0+CiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJpbml0IgotICAgICAgICAgICAgZGVzY3JpcHRpb249IkNvbXBpbGUgY29tL3N1bi8qIGNvbS9pcGxhbmV0Lyogc291cmNlcyI+ICAKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJDb21waWxlIGNvbS9zdW4vKiBjb20vaXBsYW5ldC8qIHNvdXJjZXMiPgogICAgICAgICA8IS0tPGVjaG8gbWVzc2FnZT0iQ29ubmVjdG9yIGFwaSByZXNpZGVzIGluICR7Y29ubmVjdG9yLWFwaS5qYXJ9Ii8+LS0+Ci0gICAgICAgIDxqYXZhYyBzcmNkaXI9IiR7c3JjLmRpcn0iIAorICAgICAgICA8amF2YWMgc3JjZGlyPSIke3NyYy5kaXJ9IgogICAgICAgICAgICAgICAgZGVzdGRpcj0iJHtjb21wb25lbnQuY2xhc3Nlcy5kaXJ9IgogICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiPgogICAgICAgICAgICAgPGNsYXNzcGF0aD4KLQkJPGZpbGVzZXQgZGlyPSIke2Vudi5TMUFTX0hPTUV9L21vZHVsZXMiPgotCQkgICAgPGluY2x1ZGUgbmFtZT0iKiovKi5qYXIiIC8+Ci0JCTwvZmlsZXNldD4KKyAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5TMUFTX0hPTUV9L21vZHVsZXMiPgorICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKiovKi5qYXIiIC8+CisgICAgICAgIDwvZmlsZXNldD4KICAgICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iY29tL3N1bi9qZGJjcmEvKioiLz4KICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9ImNvbS9zdW4vYXBwc2Vydi8qKiIvPgogICAgICAgICA8L2phdmFjPgogICAgIDwvdGFyZ2V0PgotICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCIvPgogCi0gICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIj4gICAgCi0gICAgCQotCTxqYXIgamFyZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L2pkYmMuamFyIiAKLSAgICAgICAgICAgIGJhc2VkaXI9IiR7Y29tcG9uZW50LmNsYXNzZXMuZGlyfSIgaW5jbHVkZXM9IiR7cGtnLmRpcn0vKiovKiwgCi0gICAgICAgICAgICBjb20vc3VuL2FwcHNlcnYvKiovKiwgY29tL3N1bi9qZGJjcmEvdXRpbC8qKi8qLCBjb20vc3VuL2pkYmNyYS9jb21tb24vKiovKiIvPiAKLSAgIAkKLSAgICAgICAgPGNvcHkgZmlsZT0iJHtzcmMuZGlyfS9jb20vc3VuL2pkYmNyYS9zcGkvMS40L3JhLWRzLnhtbCIgCi0gICAgICAgICAgICAgICAgdG9maWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CQorICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZSI+CisKKyAgICA8amFyIGphcmZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9qZGJjLmphciIKKyAgICAgICAgICAgIGJhc2VkaXI9IiR7Y29tcG9uZW50LmNsYXNzZXMuZGlyfSIgaW5jbHVkZXM9IiR7cGtnLmRpcn0vKiovKiwKKyAgICAgICAgICAgIGNvbS9zdW4vYXBwc2Vydi8qKi8qLCBjb20vc3VuL2pkYmNyYS91dGlsLyoqLyosIGNvbS9zdW4vamRiY3JhL2NvbW1vbi8qKi8qIi8+CisKKyAgICAgICAgPGNvcHkgZmlsZT0iJHtzcmMuZGlyfS9jb20vc3VuL2pkYmNyYS9zcGkvMS40L3JhLWRzLnhtbCIKKyAgICAgICAgICAgICAgICB0b2ZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4KICAgICAgICAgPC9jb3B5PgotICAgCTxqYXIgamFyZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L2pkYmNyYS5yYXIiIAotCQliYXNlZGlyPSIke2NvbXBvbmVudC5saWIuaG9tZX0iIGluY2x1ZGVzPSJqZGJjLmphciI+CisgICAgICAgPGphciBqYXJmaWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vamRiY3JhLnJhciIKKyAgICAgICAgYmFzZWRpcj0iJHtjb21wb25lbnQubGliLmhvbWV9IiBpbmNsdWRlcz0iamRiYy5qYXIiPgogCi0gICAJCTxtZXRhaW5mIGRpcj0iJHtjb21wb25lbnQubGliLmhvbWV9Ij4KLSAgIAkJCTxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgotICAgCQk8L21ldGFpbmY+Ci0gICAJPC9qYXI+CisgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iJHtjb21wb25lbnQubGliLmhvbWV9Ij4KKyAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgorICAgICAgICAgICA8L21ldGFpbmY+CisgICAgICAgPC9qYXI+CiAKLSAgIAk8ZGVsZXRlIGZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9yYS54bWwiLz4KLQkKKyAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9yYS54bWwiLz4KKwogICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlc2NyaXB0aW9uPSJDbGVhbiB0aGUgYnVpbGQiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vYXBwc2Vydi9qZGJjcmEvRGF0YVNvdXJjZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vYXBwc2Vydi9qZGJjcmEvRGF0YVNvdXJjZS5qYXZhCmluZGV4IDlmODM5OWEuLmI2ZWYzMGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2FwcHNlcnYvamRiY3JhL0RhdGFTb3VyY2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9hcHBzZXJ2L2pkYmNyYS9EYXRhU291cmNlLmphdmEKQEAgLTIwLDE1ICsyMCwxNSBAQAogaW1wb3J0IGphdmEuc3FsLlNRTEV4Y2VwdGlvbjsKIAogLyoqCi0gKiBUaGUgPGNvZGU+amF2YXguc3FsLkRhdGFTb3VyY2U8L2NvZGU+IGltcGxlbWVudGF0aW9uIG9mIFN1bk9ORSBhcHBsaWNhdGlvbiAKKyAqIFRoZSA8Y29kZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29kZT4gaW1wbGVtZW50YXRpb24gb2YgU3VuT05FIGFwcGxpY2F0aW9uCiAgKiBzZXJ2ZXIgd2lsbCBpbXBsZW1lbnQgdGhpcyBpbnRlcmZhY2UuIEFuIGFwcGxpY2F0aW9uIHByb2dyYW0gd291bGQgYmUgYWJsZQotICogdG8gdXNlIHRoaXMgaW50ZXJmYWNlIHRvIGRvIHRoZSBleHRlbmRlZCBmdW5jdGlvbmFsaXR5IGV4cG9zZWQgYnkgU3VuT05FIAorICogdG8gdXNlIHRoaXMgaW50ZXJmYWNlIHRvIGRvIHRoZSBleHRlbmRlZCBmdW5jdGlvbmFsaXR5IGV4cG9zZWQgYnkgU3VuT05FCiAgKiBhcHBsaWNhdGlvbiBzZXJ2ZXIuCi0gKiA8cD5BIHNhbXBsZSBjb2RlIGZvciBnZXR0aW5nIGRyaXZlcidzIGNvbm5lY3Rpb24gaW1wbGVtZW50YXRpb24gd291bGQgbGlrZSAKKyAqIDxwPkEgc2FtcGxlIGNvZGUgZm9yIGdldHRpbmcgZHJpdmVyJ3MgY29ubmVjdGlvbiBpbXBsZW1lbnRhdGlvbiB3b3VsZCBsaWtlCiAgKiB0aGUgZm9sbG93aW5nLgogICogPHByZT4KICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgY29tLnN1bi5hcHBzZXJ2LkRhdGFTb3VyY2UgZHMgPSAoY29tLnN1bi5hcHBzZXJ2LkRhdGFTT3VyY2UpIGljLmxvb2t1cCgiamRiYy9Qb2ludEJhc2UiKTsgCisgICAgIGNvbS5zdW4uYXBwc2Vydi5EYXRhU291cmNlIGRzID0gKGNvbS5zdW4uYXBwc2Vydi5EYXRhU091cmNlKSBpYy5sb29rdXAoImpkYmMvUG9pbnRCYXNlIik7CiAgICAgIENvbm5lY3Rpb24gY29uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwogICAgICBDb25uZWN0aW9uIGRyaXZlcmNvbiA9IGRzLmdldENvbm5lY3Rpb24oY29uKTsKIApAQCAtMzYsMTMgKzM2LDEzIEBACiAKICAgICAgY29uLmNsb3NlKCk7CiAgICA8L3ByZT4KLSAqIAorICoKICAqIEBhdXRob3IgQmlub2QgUC5HCiAgKi8KIHB1YmxpYyBpbnRlcmZhY2UgRGF0YVNvdXJjZSBleHRlbmRzIGphdmF4LnNxbC5EYXRhU291cmNlIHsKIAogICAgIC8qKgotICAgICAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIFNRTENvbm5lY3Rpb24gZnJvbSB0aGUgQ29ubmVjdGlvbiB3cmFwcGVyIAorICAgICAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIFNRTENvbm5lY3Rpb24gZnJvbSB0aGUgQ29ubmVjdGlvbiB3cmFwcGVyCiAgICAgICogaW1wbGVtZW50YXRpb24gb2YgU3VuT05FIGFwcGxpY2F0aW9uIHNlcnZlci4gSWYgYW4gYWN0dWFsIGNvbm5lY3Rpb24gaXMKICAgICAgKiBzdXBwbGllZCBhcyBhcmd1bWVudCwgdGhlbiBpdCB3aWxsIGJlIGp1c3QgcmV0dXJuZWQuCiAgICAgICoKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIuamF2YQppbmRleCBjMjgyMmUyLi42YTM2NmIwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VPYmplY3RCdWlsZGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlT2JqZWN0QnVpbGRlci5qYXZhCkBAIC0yNywyMiArMjcsMjIgQEAKIGltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7CiBpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7CiAvKioKLSAqIFV0aWxpdHkgY2xhc3MsIHdoaWNoIHdvdWxkIGNyZWF0ZSBuZWNlc3NhcnkgRGF0YXNvdXJjZSBvYmplY3QgYWNjb3JkaW5nIHRvIHRoZSAKKyAqIFV0aWxpdHkgY2xhc3MsIHdoaWNoIHdvdWxkIGNyZWF0ZSBuZWNlc3NhcnkgRGF0YXNvdXJjZSBvYmplY3QgYWNjb3JkaW5nIHRvIHRoZQogICogc3BlY2lmaWNhdGlvbi4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzIzCi0gKiBAYXV0aG9yCUJpbm9kIFAuRwotICogQHNlZQkJY29tLnN1bi5qZGJjcmEuY29tbW9uLkRhdGFTb3VyY2VTcGVjCi0gKiBAc2VlCQljb20uc3VuLmpkYmNyYS51dGlsLk1ldGhvZEV4Y2VjdXRvcgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8yMworICogQGF1dGhvciAgICBCaW5vZCBQLkcKKyAqIEBzZWUgICAgICAgIGNvbS5zdW4uamRiY3JhLmNvbW1vbi5EYXRhU291cmNlU3BlYworICogQHNlZSAgICAgICAgY29tLnN1bi5qZGJjcmEudXRpbC5NZXRob2RFeGNlY3V0b3IKICAqLwogcHVibGljIGNsYXNzIERhdGFTb3VyY2VPYmplY3RCdWlsZGVyIGltcGxlbWVudHMgamF2YS5pby5TZXJpYWxpemFibGV7CiAKICAgICBwcml2YXRlIERhdGFTb3VyY2VTcGVjIHNwZWM7Ci0gICAgCisKICAgICBwcml2YXRlIEhhc2h0YWJsZSBkcml2ZXJQcm9wZXJ0aWVzID0gbnVsbDsKLSAgICAKLSAgICBwcml2YXRlIE1ldGhvZEV4ZWN1dG9yIGV4ZWN1dG9yID0gbnVsbDsgICAgCi0gICAgCisKKyAgICBwcml2YXRlIE1ldGhvZEV4ZWN1dG9yIGV4ZWN1dG9yID0gbnVsbDsKKwogICAgIHByaXZhdGUgc3RhdGljIExvZ2dlciBfbG9nZ2VyOwogICAgIHN0YXRpYyB7CiAgICAgICAgIF9sb2dnZXIgPSBMb2dnZXIuZ2V0QW5vbnltb3VzTG9nZ2VyKCk7CkBAIC01MCwxNjcgKzUwLDE2NyBAQAogICAgIHByaXZhdGUgYm9vbGVhbiBkZWJ1ZyA9IGZhbHNlOwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdCBhIERhdGFTb3VyY2UgT2JqZWN0IGZyb20gdGhlIHNwZWMuCi0gICAgICogCi0gICAgICogQHBhcmFtCXNwZWMJPGNvZGU+IERhdGFTb3VyY2VTcGVjIDwvY29kZT4gb2JqZWN0LgorICAgICAqCisgICAgICogQHBhcmFtICAgIHNwZWMgICAgPGNvZGU+IERhdGFTb3VyY2VTcGVjIDwvY29kZT4gb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyBEYXRhU291cmNlT2JqZWN0QnVpbGRlcihEYXRhU291cmNlU3BlYyBzcGVjKSB7Ci0gICAgCXRoaXMuc3BlYyA9IHNwZWM7Ci0gICAgCWV4ZWN1dG9yID0gbmV3IE1ldGhvZEV4ZWN1dG9yKCk7CisgICAgICAgIHRoaXMuc3BlYyA9IHNwZWM7CisgICAgICAgIGV4ZWN1dG9yID0gbmV3IE1ldGhvZEV4ZWN1dG9yKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0IHRoZSBEYXRhU291cmNlIE9iamVjdCBmcm9tIHRoZSBzcGVjLgogICAgICAqCi0gICAgICogQHJldHVybglPYmplY3QgY29uc3RydWN0ZWQgdXNpbmcgdGhlIERhdGFTb3VyY2VTcGVjLgotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+IGlmIHRoZSBjbGFzcyBpcyBub3QgZm91bmQgb3Igc29tZSBpc3N1ZSBpbiBleGVjdXRpbmcKLSAgICAgKgkJc29tZSBtZXRob2QuCisgICAgICogQHJldHVybiAgICBPYmplY3QgY29uc3RydWN0ZWQgdXNpbmcgdGhlIERhdGFTb3VyY2VTcGVjLgorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+IGlmIHRoZSBjbGFzcyBpcyBub3QgZm91bmQgb3Igc29tZSBpc3N1ZSBpbiBleGVjdXRpbmcKKyAgICAgKiAgICAgICAgc29tZSBtZXRob2QuCiAgICAgICovCiAgICAgcHVibGljIE9iamVjdCBjb25zdHJ1Y3REYXRhU291cmNlT2JqZWN0KCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewotICAgIAlkcml2ZXJQcm9wZXJ0aWVzID0gcGFyc2VEcml2ZXJQcm9wZXJ0aWVzKHNwZWMpOworICAgICAgICBkcml2ZXJQcm9wZXJ0aWVzID0gcGFyc2VEcml2ZXJQcm9wZXJ0aWVzKHNwZWMpOwogICAgICAgICBPYmplY3QgZGF0YVNvdXJjZU9iamVjdCA9IGdldERhdGFTb3VyY2VPYmplY3QoKTsKICAgICAgICAgTWV0aG9kW10gbWV0aG9kcyA9IGRhdGFTb3VyY2VPYmplY3QuZ2V0Q2xhc3MoKS5nZXRNZXRob2RzKCk7CiAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IG1ldGhvZHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgIFN0cmluZyBtZXRob2ROYW1lID0gbWV0aG9kc1tpXS5nZXROYW1lKCk7Ci0JICAgIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFVzZXIiKSl7CSAgICAJCi0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5VU0VSTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0UGFzc3dvcmQiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QQVNTV09SRCksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TG9naW5UaW1lT3V0IikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HSU5USU1FT1VUKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRMb2dXcml0ZXIiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dXUklURVIpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldERhdGFiYXNlTmFtZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFCQVNFTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0RGF0YVNvdXJjZU5hbWUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBU09VUkNFTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAkKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0RGVzY3JpcHRpb24iKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERVNDUklQVElPTiksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE5ldHdvcmtQcm90b2NvbCIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk5FVFdPUktQUk9UT0NPTCksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0UG9ydE51bWJlciIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFJvbGVOYW1lIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUk9MRU5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAJCSAgICAJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFNlcnZlck5hbWUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5TRVJWRVJOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1heFN0YXRlbWVudHMiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NQVhTVEFURU1FTlRTKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRJbml0aWFsUG9vbFNpemUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5JTklUSUFMUE9PTFNJWkUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1pblBvb2xTaXplIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUlOUE9PTFNJWkUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1heFBvb2xTaXplIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUFYUE9PTFNJWkUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1heElkbGVUaW1lIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUFYSURMRVRJTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFByb3BlcnR5Q3ljbGUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QUk9QRVJUWUNZQ0xFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAoZHJpdmVyUHJvcGVydGllcy5jb250YWluc0tleShtZXRob2ROYW1lLnRvVXBwZXJDYXNlKCkpKXsKLQkgICAgCVZlY3RvciB2YWx1ZXMgPSAoVmVjdG9yKSBkcml2ZXJQcm9wZXJ0aWVzLmdldChtZXRob2ROYW1lLnRvVXBwZXJDYXNlKCkpOwotCSAgICAgICAgZXhlY3V0b3IucnVuTWV0aG9kKG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCwgdmFsdWVzKTsKLQkgICAgfQorICAgICAgICBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRVc2VyIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVVNFUk5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFBhc3N3b3JkIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUEFTU1dPUkQpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldExvZ2luVGltZU91dCIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR0lOVElNRU9VVCksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TG9nV3JpdGVyIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HV1JJVEVSKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXREYXRhYmFzZU5hbWUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBQkFTRU5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldERhdGFTb3VyY2VOYW1lIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQVNPVVJDRU5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldERlc2NyaXB0aW9uIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVTQ1JJUFRJT04pLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE5ldHdvcmtQcm90b2NvbCIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk5FVFdPUktQUk9UT0NPTCksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0UG9ydE51bWJlciIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFJvbGVOYW1lIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUk9MRU5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFNlcnZlck5hbWUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5TRVJWRVJOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNYXhTdGF0ZW1lbnRzIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUFYU1RBVEVNRU5UUyksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0SW5pdGlhbFBvb2xTaXplIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuSU5JVElBTFBPT0xTSVpFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNaW5Qb29sU2l6ZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1JTlBPT0xTSVpFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNYXhQb29sU2l6ZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1BWFBPT0xTSVpFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNYXhJZGxlVGltZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1BWElETEVUSU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRQcm9wZXJ0eUN5Y2xlIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUFJPUEVSVFlDWUNMRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKGRyaXZlclByb3BlcnRpZXMuY29udGFpbnNLZXkobWV0aG9kTmFtZS50b1VwcGVyQ2FzZSgpKSl7CisgICAgICAgICAgICBWZWN0b3IgdmFsdWVzID0gKFZlY3RvcikgZHJpdmVyUHJvcGVydGllcy5nZXQobWV0aG9kTmFtZS50b1VwcGVyQ2FzZSgpKTsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bk1ldGhvZChtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QsIHZhbHVlcyk7CisgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gZGF0YVNvdXJjZU9iamVjdDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXQgdGhlIGV4dHJhIGRyaXZlciBwcm9wZXJ0aWVzIGZyb20gdGhlIERhdGFTb3VyY2VTcGVjIG9iamVjdCBhbmQKICAgICAgKiBwYXJzZSB0aGVtIHRvIGEgc2V0IG9mIG1ldGhvZE5hbWUgYW5kIHBhcmFtZXRlcnMuIFByZXBhcmUgYSBoYXNodGFibGUKICAgICAgKiBjb250YWluaW5nIHRoZXNlIGRldGFpbHMgYW5kIHJldHVybi4KICAgICAgKgotICAgICAqIEBwYXJhbQlzcGVjCTxjb2RlPiBEYXRhU291cmNlU3BlYyA8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAcmV0dXJuCUhhc2h0YWJsZSBjb250YWluaW5nIG1ldGhvZCBuYW1lcyBhbmQgcGFyYW1ldGVycywKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCUlmIGRlbGltaXRlciBpcyBub3QgcHJvdmlkZWQgYW5kIHByb3BlcnR5IHN0cmluZwotICAgICAqCQkJCQlpcyBub3QgbnVsbC4KKyAgICAgKiBAcGFyYW0gICAgc3BlYyAgICA8Y29kZT4gRGF0YVNvdXJjZVNwZWMgPC9jb2RlPiBvYmplY3QuCisgICAgICogQHJldHVybiAgICBIYXNodGFibGUgY29udGFpbmluZyBtZXRob2QgbmFtZXMgYW5kIHBhcmFtZXRlcnMsCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBJZiBkZWxpbWl0ZXIgaXMgbm90IHByb3ZpZGVkIGFuZCBwcm9wZXJ0eSBzdHJpbmcKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgaXMgbm90IG51bGwuCiAgICAgICovCiAgICAgcHJpdmF0ZSBIYXNodGFibGUgcGFyc2VEcml2ZXJQcm9wZXJ0aWVzKERhdGFTb3VyY2VTcGVjIHNwZWMpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKLSAgICAJU3RyaW5nIGRlbGltID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVMSU1JVEVSKTsKKyAgICAgICAgU3RyaW5nIGRlbGltID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVMSU1JVEVSKTsKIAogICAgICAgICBTdHJpbmcgcHJvcCA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRSSVZFUlBST1BFUlRJRVMpOwotCWlmICggcHJvcCA9PSBudWxsIHx8IHByb3AudHJpbSgpLmVxdWFscygiIikpIHsKLQkgICAgcmV0dXJuIG5ldyBIYXNodGFibGUoKTsKLQl9IGVsc2UgaWYgKGRlbGltID09IG51bGwgfHwgZGVsaW0uZXF1YWxzKCIiKSkgewotCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24gKCJEZWxpbWl0ZXIgaXMgbm90IHByb3ZpZGVkIGluIHRoZSBjb25maWd1cmF0aW9uIik7Ci0JfQotCQotCUhhc2h0YWJsZSBwcm9wZXJ0aWVzID0gbmV3IEhhc2h0YWJsZSgpOwotCWRlbGltID0gZGVsaW0udHJpbSgpOwkKLQlTdHJpbmcgc2VwID0gZGVsaW0rZGVsaW07Ci0JaW50IHNlcExlbiA9IHNlcC5sZW5ndGgoKTsKLQlTdHJpbmcgY2FjaGUgPSBwcm9wOwotCVZlY3RvciBtZXRob2RzID0gbmV3IFZlY3RvcigpOwotCQotCXdoaWxlIChjYWNoZS5pbmRleE9mKHNlcCkgIT0gLTEpIHsKLQkgICAgaW50IGluZGV4ID0gY2FjaGUuaW5kZXhPZihzZXApOwotCSAgICBTdHJpbmcgbmFtZSA9IGNhY2hlLnN1YnN0cmluZygwLGluZGV4KTsKLQkgICAgaWYgKG5hbWUudHJpbSgpICE9ICIiKSB7Ci0JICAgICAgICBtZXRob2RzLmFkZChuYW1lKTsKLQkgICAgCWNhY2hlID0gY2FjaGUuc3Vic3RyaW5nKGluZGV4K3NlcExlbik7Ci0JICAgIH0KLQl9Ci0JCi0gICAgCUVudW1lcmF0aW9uIGFsbE1ldGhvZHMgPSBtZXRob2RzLmVsZW1lbnRzKCk7Ci0gICAgCXdoaWxlIChhbGxNZXRob2RzLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgCSAgICBTdHJpbmcgb25lTWV0aG9kID0gKFN0cmluZykgYWxsTWV0aG9kcy5uZXh0RWxlbWVudCgpOyAgICAJICAgIAotICAgIAkgICAgaWYgKCFvbmVNZXRob2QudHJpbSgpLmVxdWFscygiIikpIHsKLSAgICAJICAgIAlTdHJpbmcgbWV0aG9kTmFtZSA9IG51bGw7Ci0gICAgCSAgICAJVmVjdG9yIHBhcm1zID0gbmV3IFZlY3RvcigpOwotICAgIAkgICAgCVN0cmluZ1Rva2VuaXplciBtZXRob2REZXRhaWxzID0gbmV3IFN0cmluZ1Rva2VuaXplcihvbmVNZXRob2QsZGVsaW0pOwotCQlmb3IgKGludCBpPTA7IG1ldGhvZERldGFpbHMuaGFzTW9yZVRva2VucygpO2krKyApIHsKLQkJICAgIFN0cmluZyB0b2tlbiA9IChTdHJpbmcpIG1ldGhvZERldGFpbHMubmV4dFRva2VuKCk7Ci0JCSAgICBpZiAoaT09MCkgewotCQkgICAgCW1ldGhvZE5hbWUgPSB0b2tlbi50b1VwcGVyQ2FzZSgpOwotCQkgICAgfSBlbHNlIHsKLQkJICAgIAlwYXJtcy5hZGQodG9rZW4pOwkJICAgIAkKLQkJICAgIH0KLQkJfQotCQlwcm9wZXJ0aWVzLnB1dChtZXRob2ROYW1lLHBhcm1zKTsKLSAgICAJICAgIH0gICAgCSAgICAKLSAgICAJfQotICAgIAlyZXR1cm4gcHJvcGVydGllczsKKyAgICBpZiAoIHByb3AgPT0gbnVsbCB8fCBwcm9wLnRyaW0oKS5lcXVhbHMoIiIpKSB7CisgICAgICAgIHJldHVybiBuZXcgSGFzaHRhYmxlKCk7CisgICAgfSBlbHNlIGlmIChkZWxpbSA9PSBudWxsIHx8IGRlbGltLmVxdWFscygiIikpIHsKKyAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uICgiRGVsaW1pdGVyIGlzIG5vdCBwcm92aWRlZCBpbiB0aGUgY29uZmlndXJhdGlvbiIpOwogICAgIH0KLSAgICAKKworICAgIEhhc2h0YWJsZSBwcm9wZXJ0aWVzID0gbmV3IEhhc2h0YWJsZSgpOworICAgIGRlbGltID0gZGVsaW0udHJpbSgpOworICAgIFN0cmluZyBzZXAgPSBkZWxpbStkZWxpbTsKKyAgICBpbnQgc2VwTGVuID0gc2VwLmxlbmd0aCgpOworICAgIFN0cmluZyBjYWNoZSA9IHByb3A7CisgICAgVmVjdG9yIG1ldGhvZHMgPSBuZXcgVmVjdG9yKCk7CisKKyAgICB3aGlsZSAoY2FjaGUuaW5kZXhPZihzZXApICE9IC0xKSB7CisgICAgICAgIGludCBpbmRleCA9IGNhY2hlLmluZGV4T2Yoc2VwKTsKKyAgICAgICAgU3RyaW5nIG5hbWUgPSBjYWNoZS5zdWJzdHJpbmcoMCxpbmRleCk7CisgICAgICAgIGlmIChuYW1lLnRyaW0oKSAhPSAiIikgeworICAgICAgICAgICAgbWV0aG9kcy5hZGQobmFtZSk7CisgICAgICAgICAgICBjYWNoZSA9IGNhY2hlLnN1YnN0cmluZyhpbmRleCtzZXBMZW4pOworICAgICAgICB9CisgICAgfQorCisgICAgICAgIEVudW1lcmF0aW9uIGFsbE1ldGhvZHMgPSBtZXRob2RzLmVsZW1lbnRzKCk7CisgICAgICAgIHdoaWxlIChhbGxNZXRob2RzLmhhc01vcmVFbGVtZW50cygpKSB7CisgICAgICAgICAgICBTdHJpbmcgb25lTWV0aG9kID0gKFN0cmluZykgYWxsTWV0aG9kcy5uZXh0RWxlbWVudCgpOworICAgICAgICAgICAgaWYgKCFvbmVNZXRob2QudHJpbSgpLmVxdWFscygiIikpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgbWV0aG9kTmFtZSA9IG51bGw7CisgICAgICAgICAgICAgICAgVmVjdG9yIHBhcm1zID0gbmV3IFZlY3RvcigpOworICAgICAgICAgICAgICAgIFN0cmluZ1Rva2VuaXplciBtZXRob2REZXRhaWxzID0gbmV3IFN0cmluZ1Rva2VuaXplcihvbmVNZXRob2QsZGVsaW0pOworICAgICAgICBmb3IgKGludCBpPTA7IG1ldGhvZERldGFpbHMuaGFzTW9yZVRva2VucygpO2krKyApIHsKKyAgICAgICAgICAgIFN0cmluZyB0b2tlbiA9IChTdHJpbmcpIG1ldGhvZERldGFpbHMubmV4dFRva2VuKCk7CisgICAgICAgICAgICBpZiAoaT09MCkgeworICAgICAgICAgICAgICAgIG1ldGhvZE5hbWUgPSB0b2tlbi50b1VwcGVyQ2FzZSgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwYXJtcy5hZGQodG9rZW4pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHByb3BlcnRpZXMucHV0KG1ldGhvZE5hbWUscGFybXMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBwcm9wZXJ0aWVzOworICAgIH0KKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBEYXRhc291cmNlIG9iamVjdCBhY2NvcmRpbmcgdG8gdGhlIHNwZWMuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCUluaXRpYWwgRGF0YVNvdXJjZSBPYmplY3QgaW5zdGFuY2UuCi0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4gSWYgY2xhc3MgbmFtZSBpcyB3cm9uZyBvciBjbGFzc3BhdGggaXMgbm90IHNldAotICAgICAqCQlwcm9wZXJseS4KKyAgICAgKiBAcmV0dXJuICAgIEluaXRpYWwgRGF0YVNvdXJjZSBPYmplY3QgaW5zdGFuY2UuCisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4gSWYgY2xhc3MgbmFtZSBpcyB3cm9uZyBvciBjbGFzc3BhdGggaXMgbm90IHNldAorICAgICAqICAgICAgICBwcm9wZXJseS4KICAgICAgKi8KICAgICBwcml2YXRlIE9iamVjdCBnZXREYXRhU291cmNlT2JqZWN0KCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewotICAgIAlTdHJpbmcgY2xhc3NOYW1lID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ0xBU1NOQU1FKTsKLSAgICAgICAgdHJ5IHsgICAgICAgICAgICAKKyAgICAgICAgU3RyaW5nIGNsYXNzTmFtZSA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNMQVNTTkFNRSk7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDbGFzcyBkYXRhU291cmNlQ2xhc3MgPSBDbGFzcy5mb3JOYW1lKGNsYXNzTmFtZSk7CiAgICAgICAgICAgICBPYmplY3QgZGF0YVNvdXJjZU9iamVjdCA9IGRhdGFTb3VyY2VDbGFzcy5uZXdJbnN0YW5jZSgpOwogICAgICAgICAgICAgcmV0dXJuIGRhdGFTb3VyY2VPYmplY3Q7CiAgICAgICAgIH0gY2F0Y2goQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBjZm5lKXsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfY25mZV9kcyIsIGNmbmUpOwotCQorICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19jbmZlX2RzIiwgY2ZuZSk7CisKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQ2xhc3MgTmFtZSBpcyB3cm9uZyBvciBDbGFzcyBwYXRoIGlzIG5vdCBzZXQgZm9yIDoiICsgY2xhc3NOYW1lKTsKICAgICAgICAgfSBjYXRjaChJbnN0YW50aWF0aW9uRXhjZXB0aW9uIGNlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2luc3QiLCBjbGFzc05hbWUpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19pbnN0IiwgY2xhc3NOYW1lKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiRXJyb3IgaW4gaW5zdGFudGlhdGluZyIgKyBjbGFzc05hbWUpOwogICAgICAgICB9IGNhdGNoKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gY2UpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfYWNjX2luc3QiLCBjbGFzc05hbWUpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19hY2NfaW5zdCIsIGNsYXNzTmFtZSk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBFcnJvciBpbiBpbnN0YW50aWF0aW5nIiArIGNsYXNzTmFtZSk7CiAgICAgICAgIH0KICAgICB9Ci0gIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VTcGVjLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VTcGVjLmphdmEKaW5kZXggZWY2YzRjOS4uM2RjMTU0ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlU3BlYy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZVNwZWMuamF2YQpAQCAtMTksOTIgKzE5LDkyIEBACiBpbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKIAogLyoqCi0gKiBFbmNhcHN1bGF0ZSB0aGUgRGF0YVNvdXJjZSBvYmplY3QgZGV0YWlscyBvYnRhaW5lZCBmcm9tIAorICogRW5jYXBzdWxhdGUgdGhlIERhdGFTb3VyY2Ugb2JqZWN0IGRldGFpbHMgb2J0YWluZWQgZnJvbQogICogTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMjMKLSAqIEBhdXRob3IJQmlub2QgUC5HCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzIzCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRwogICovCiBwdWJsaWMgY2xhc3MgRGF0YVNvdXJjZVNwZWMgaW1wbGVtZW50cyBqYXZhLmlvLlNlcmlhbGl6YWJsZXsKIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVTRVJOQU1FCQkJCT0gMTsgICAgCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUEFTU1dPUkQJCQkJPSAyOyAgCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVVJMCQkJCQk9IDM7ICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMT0dJTlRJTUVPVVQJCQk9IDQ7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTE9HV1JJVEVSCQkJCT0gNTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQVRBQkFTRU5BTUUJCQk9IDY7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREFUQVNPVVJDRU5BTUUJCQk9IDc7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVTQ1JJUFRJT04JCQkJPSA4OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5FVFdPUktQUk9UT0NPTAkJCT0gOTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQT1JUTlVNQkVSCQkJCT0gMTA7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUk9MRU5BTUUJCQkJPSAxMTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTRVJWRVJOQU1FCQkJCT0gMTI7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYU1RBVEVNRU5UUwkJCT0gMTM7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5JVElBTFBPT0xTSVpFCQkJPSAxNDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNSU5QT09MU0laRQkJCQk9IDE1OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWFBPT0xTSVpFCQkJCT0gMTY7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYSURMRVRJTUUJCQkJPSAxNzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQUk9QRVJUWUNZQ0xFCQkJPSAxODsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEUklWRVJQUk9QRVJUSUVTCQkJPSAxOTsgICAgCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0xBU1NOQU1FCQkJCT0gMjA7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVMSU1JVEVSCQkJCT0gMjE7Ci0gICAgCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgWEFEQVRBU09VUkNFCQkJPSAyMjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQVRBU09VUkNFCQkJCT0gMjM7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OTkVDVElPTlBPT0xEQVRBU09VUkNFCQk9IDI0OwotICAgICAgCi0gICAgLy9HSkNJTlQgICAgICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVECT0gMjU7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVkFMSURBVElPTk1FVEhPRAkJCT0gMjY7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVkFMSURBVElPTlRBQkxFTkFNRQkJCT0gMjc7Ci0gICAgCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVFJBTlNBQ1RJT05JU09MQVRJT04JCT0gMjg7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwJCT0gMjk7Ci0gICAgICAgICAgICAKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVU0VSTkFNRSAgICAgICAgICAgICAgICA9IDE7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUEFTU1dPUkQgICAgICAgICAgICAgICAgPSAyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVSTCAgICAgICAgICAgICAgICAgICAgPSAzOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExPR0lOVElNRU9VVCAgICAgICAgICAgID0gNDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMT0dXUklURVIgICAgICAgICAgICAgICAgPSA1OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFCQVNFTkFNRSAgICAgICAgICAgID0gNjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQVRBU09VUkNFTkFNRSAgICAgICAgICAgID0gNzsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERVNDUklQVElPTiAgICAgICAgICAgICAgICA9IDg7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTkVUV09SS1BST1RPQ09MICAgICAgICAgICAgPSA5OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBPUlROVU1CRVIgICAgICAgICAgICAgICAgPSAxMDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBST0xFTkFNRSAgICAgICAgICAgICAgICA9IDExOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNFUlZFUk5BTUUgICAgICAgICAgICAgICAgPSAxMjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhTVEFURU1FTlRTICAgICAgICAgICAgPSAxMzsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTklUSUFMUE9PTFNJWkUgICAgICAgICAgICA9IDE0OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1JTlBPT0xTSVpFICAgICAgICAgICAgICAgID0gMTU7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYUE9PTFNJWkUgICAgICAgICAgICAgICAgPSAxNjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhJRExFVElNRSAgICAgICAgICAgICAgICA9IDE3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBST1BFUlRZQ1lDTEUgICAgICAgICAgICA9IDE4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERSSVZFUlBST1BFUlRJRVMgICAgICAgICAgICA9IDE5OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENMQVNTTkFNRSAgICAgICAgICAgICAgICA9IDIwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFTElNSVRFUiAgICAgICAgICAgICAgICA9IDIxOworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgWEFEQVRBU09VUkNFICAgICAgICAgICAgPSAyMjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQVRBU09VUkNFICAgICAgICAgICAgICAgID0gMjM7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OTkVDVElPTlBPT0xEQVRBU09VUkNFICAgICAgICA9IDI0OworCisgICAgLy9HSkNJTlQKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVEICAgID0gMjU7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVkFMSURBVElPTk1FVEhPRCAgICAgICAgICAgID0gMjY7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVkFMSURBVElPTlRBQkxFTkFNRSAgICAgICAgICAgID0gMjc7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUUkFOU0FDVElPTklTT0xBVElPTiAgICAgICAgPSAyODsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHVUFSQU5URUVJU09MQVRJT05MRVZFTCAgICAgICAgPSAyOTsKKwogICAgIHByaXZhdGUgSGFzaHRhYmxlIGRldGFpbHMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIHByb3BlcnR5LgogICAgICAqCi0gICAgICogQHBhcmFtCXByb3BlcnR5CVByb3BlcnR5IE5hbWUgdG8gYmUgc2V0LgotICAgICAqIEBwYXJhbQl2YWx1ZQkJVmFsdWUgb2YgcHJvcGVydHkgdG8gYmUgc2V0LgorICAgICAqIEBwYXJhbSAgICBwcm9wZXJ0eSAgICBQcm9wZXJ0eSBOYW1lIHRvIGJlIHNldC4KKyAgICAgKiBAcGFyYW0gICAgdmFsdWUgICAgICAgIFZhbHVlIG9mIHByb3BlcnR5IHRvIGJlIHNldC4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXREZXRhaWwoaW50IHByb3BlcnR5LCBTdHJpbmcgdmFsdWUpIHsKLSAgICAJZGV0YWlscy5wdXQobmV3IEludGVnZXIocHJvcGVydHkpLHZhbHVlKTsKKyAgICAgICAgZGV0YWlscy5wdXQobmV3IEludGVnZXIocHJvcGVydHkpLHZhbHVlKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXQgdGhlIHZhbHVlIG9mIHByb3BlcnR5CiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVZhbHVlIG9mIHRoZSBwcm9wZXJ0eS4KKyAgICAgKiBAcmV0dXJuICAgIFZhbHVlIG9mIHRoZSBwcm9wZXJ0eS4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldERldGFpbChpbnQgcHJvcGVydHkpIHsKLSAgICAJaWYgKGRldGFpbHMuY29udGFpbnNLZXkobmV3IEludGVnZXIocHJvcGVydHkpKSkgewotICAgIAkgICAgcmV0dXJuIChTdHJpbmcpIGRldGFpbHMuZ2V0KG5ldyBJbnRlZ2VyKHByb3BlcnR5KSk7Ci0gICAgCX0gZWxzZSB7Ci0gICAgCSAgICByZXR1cm4gbnVsbDsKLSAgICAJfSAgICAJCisgICAgICAgIGlmIChkZXRhaWxzLmNvbnRhaW5zS2V5KG5ldyBJbnRlZ2VyKHByb3BlcnR5KSkpIHsKKyAgICAgICAgICAgIHJldHVybiAoU3RyaW5nKSBkZXRhaWxzLmdldChuZXcgSW50ZWdlcihwcm9wZXJ0eSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDaGVja3Mgd2hldGhlciB0d28gPGNvZGU+RGF0YVNvdXJjZVNwZWM8L2NvZGU+IG9iamVjdHMKICAgICAgKiBhcmUgZXF1YWwgb3Igbm90LgogICAgICAqCi0gICAgICogQHBhcmFtCW9iaglJbnN0YW5jZSBvZiA8Y29kZT5EYXRhU291cmNlU3BlYzwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBvYmogICAgSW5zdGFuY2Ugb2YgPGNvZGU+RGF0YVNvdXJjZVNwZWM8L2NvZGU+IG9iamVjdC4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9iaikgewotICAgIAlpZiAob2JqIGluc3RhbmNlb2YgRGF0YVNvdXJjZVNwZWMpIHsKLSAgICAJICAgIHJldHVybiB0aGlzLmRldGFpbHMuZXF1YWxzKCgoRGF0YVNvdXJjZVNwZWMpb2JqKS5kZXRhaWxzKTsKLSAgICAJfQotICAgIAlyZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBEYXRhU291cmNlU3BlYykgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGV0YWlscy5lcXVhbHMoKChEYXRhU291cmNlU3BlYylvYmopLmRldGFpbHMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIGhhc2hDb2RlIG9mIHRoaXMgPGNvZGU+RGF0YVNvdXJjZVNwZWM8L2NvZGU+IG9iamVjdC4KICAgICAgKgotICAgICAqIEByZXR1cm4JaGFzaENvZGUgb2YgdGhpcyBvYmplY3QuCisgICAgICogQHJldHVybiAgICBoYXNoQ29kZSBvZiB0aGlzIG9iamVjdC4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewotICAgIAlyZXR1cm4gdGhpcy5kZXRhaWxzLmhhc2hDb2RlKCk7Ci0gICAgfSAgICAKKyAgICAgICAgcmV0dXJuIHRoaXMuZGV0YWlscy5oYXNoQ29kZSgpOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9idWlsZC54bWwKaW5kZXggZWY0MzhmYy4uM2I0ZmFlYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9idWlsZC54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPHByb2plY3QgbmFtZT0iamRiY19jb25uZWN0b3IiIGJhc2VkaXI9Ii4iIGRlZmF1bHQ9ImJ1aWxkIj4KICAgPHByb3BlcnR5IG5hbWU9InBrZy5kaXIiIHZhbHVlPSJjb20vc3VuL2dqYy9jb21tb24iLz4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJjbGVhbiI+CiAgICAgPGFudCBhbnRmaWxlPSJidWlsZC54bWwiIGRpcj0iJHtnamMuaG9tZX0vYmluIiB0YXJnZXQ9ImNsZWFuIi8+CiAgIDwvdGFyZ2V0PgpAQCAtMzYsMTMgKzM2LDEzIEBACiAKICAgPHRhcmdldCBuYW1lPSJjb21waWxlMTMiIGRlcGVuZHM9ImNvbXBpbGUiLz4KICAgPHRhcmdldCBuYW1lPSJjb21waWxlMTQiIGRlcGVuZHM9ImNvbXBpbGUiLz4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlMTMiIGRlcGVuZHM9InBhY2thZ2UiLz4KICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlMTQiIGRlcGVuZHM9InBhY2thZ2UiLz4KIAogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkMTMiIGRlcGVuZHM9ImNvbXBpbGUxMywgcGFja2FnZTEzIi8+CiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQxNCIgZGVwZW5kcz0iY29tcGlsZTE0LCBwYWNrYWdlMTQiLz4KLSAgICAKKwogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJidWlsZDEzLCBidWlsZDE0Ii8+CiAKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L0Nvbm5lY3Rpb25Ib2xkZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L0Nvbm5lY3Rpb25Ib2xkZXIuamF2YQppbmRleCA0NjMyYWUxLi5iNGZkMTI0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9Db25uZWN0aW9uSG9sZGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvQ29ubmVjdGlvbkhvbGRlci5qYXZhCkBAIC0yNCwyNCArMjQsMjQgQEAKIGltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcjsKIAogLyoqCi0gKiBIb2xkcyB0aGUgamF2YS5zcWwuQ29ubmVjdGlvbiBvYmplY3QsIHdoaWNoIGlzIHRvIGJlIAorICogSG9sZHMgdGhlIGphdmEuc3FsLkNvbm5lY3Rpb24gb2JqZWN0LCB3aGljaCBpcyB0byBiZQogICogcGFzc2VkIHRvIHRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMjMKLSAqIEBhdXRob3IJQmlub2QgUC5HCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzIzCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRwogICovCi1wdWJsaWMgY2xhc3MgQ29ubmVjdGlvbkhvbGRlciBpbXBsZW1lbnRzIENvbm5lY3Rpb257IAorcHVibGljIGNsYXNzIENvbm5lY3Rpb25Ib2xkZXIgaW1wbGVtZW50cyBDb25uZWN0aW9uewogCiAgICAgcHJpdmF0ZSBDb25uZWN0aW9uIGNvbjsKLSAgICAKKwogICAgIHByaXZhdGUgTWFuYWdlZENvbm5lY3Rpb24gbWM7Ci0gICAgCi0gICAgcHJpdmF0ZSBib29sZWFuIHdyYXBwZWRBbHJlYWR5ID0gZmFsc2U7ICAgIAotICAgIAorCisgICAgcHJpdmF0ZSBib29sZWFuIHdyYXBwZWRBbHJlYWR5ID0gZmFsc2U7CisKICAgICBwcml2YXRlIGJvb2xlYW4gaXNDbG9zZWQgPSBmYWxzZTsKLSAgICAKKwogICAgIHByaXZhdGUgYm9vbGVhbiB2YWxpZCA9IHRydWU7Ci0gICAgCisKICAgICBwcml2YXRlIGJvb2xlYW4gYWN0aXZlID0gZmFsc2U7CiAgICAgLyoqCiAgICAgICogVGhlIGFjdGl2ZSBmbGFnIGlzIGZhbHNlIHdoZW4gdGhlIGNvbm5lY3Rpb24gaGFuZGxlIGlzCkBAIC01Myw0MDQgKzUzLDQwNCBAQAogICAgICAqIGZ1bmN0aW9uLCB0aGUgYWJvdmUgbWV0aG9kIGludm9jYXRpb24gc3VjY2VlZHM7IG90aGVyd2lzZQogICAgICAqIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24uCiAgICAgICovCi0gICAgCisKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RzIGEgQ29ubmVjdGlvbiBob2xkZXIuCi0gICAgICogCi0gICAgICogQHBhcmFtCWNvbgk8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgY29uICAgIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KICAgICAgKi8KICAgICBwdWJsaWMgQ29ubmVjdGlvbkhvbGRlcihDb25uZWN0aW9uIGNvbiwgTWFuYWdlZENvbm5lY3Rpb24gbWMpIHsKICAgICAgICAgdGhpcy5jb24gPSBjb247CiAgICAgICAgIHRoaXMubWMgID0gbWM7CiAgICAgfQotICAgICAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIGFjdHVhbCBjb25uZWN0aW9uIGluIHRoaXMgaG9sZGVyIG9iamVjdC4KLSAgICAgKiAKLSAgICAgKiBAcmV0dXJuCUNvbm5lY3Rpb24gb2JqZWN0LgorICAgICAqCisgICAgICogQHJldHVybiAgICBDb25uZWN0aW9uIG9iamVjdC4KICAgICAgKi8KICAgICBDb25uZWN0aW9uIGdldENvbm5lY3Rpb24oKSB7Ci0gICAgCXJldHVybiBjb247CisgICAgICAgIHJldHVybiBjb247CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZmxhZyB0byBpbmRpY2F0ZSB0aGF0LCB0aGUgY29ubmVjdGlvbiBpcyB3cmFwcGVkIGFscmVhZHkgb3Igbm90LgogICAgICAqCi0gICAgICogQHBhcmFtCXdyYXBGbGFnCQorICAgICAqIEBwYXJhbSAgICB3cmFwRmxhZwogICAgICAqLwogICAgIHZvaWQgd3JhcHBlZChib29sZWFuIHdyYXBGbGFnKXsKICAgICAgICAgdGhpcy53cmFwcGVkQWxyZWFkeSA9IHdyYXBGbGFnOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgd2hldGhlciBpdCBpcyB3cmFwcGVkIGFscmVhZHkgb3Igbm90LgogICAgICAqCi0gICAgICogQHJldHVybgl3cmFwcGVkIGZsYWcuCisgICAgICogQHJldHVybiAgICB3cmFwcGVkIGZsYWcuCiAgICAgICovCiAgICAgYm9vbGVhbiBpc1dyYXBwZWQoKXsKICAgICAgICAgcmV0dXJuIHdyYXBwZWRBbHJlYWR5OwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZSByZXNwb25zaWJsZQogICAgICAqIGZvciB0aGlzIGNvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKi8KICAgICBNYW5hZ2VkQ29ubmVjdGlvbiBnZXRNYW5hZ2VkQ29ubmVjdGlvbigpIHsKICAgICAgICAgcmV0dXJuIG1jOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJlcGxhY2UgdGhlIGFjdHVhbCA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3Qgd2l0aCB0aGUgb25lCi0gICAgICogc3VwcGxpZWQuIEFsc28gcmVwbGFjZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gbGluay4gICAgIAorICAgICAqIHN1cHBsaWVkLiBBbHNvIHJlcGxhY2UgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGxpbmsuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JY29uIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAcGFyYW0JbWMgIDxjb2RlPiBNYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBjb24gPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBtYyAgPGNvZGU+IE1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCiAgICAgICovCiAgICAgdm9pZCBhc3NvY2lhdGVDb25uZWN0aW9uKENvbm5lY3Rpb24gY29uLCBNYW5hZ2VkQ29ubmVjdGlvbiBtYykgewotICAgIAl0aGlzLm1jID0gbWM7Ci0gICAgCXRoaXMuY29uID0gY29uOworICAgICAgICB0aGlzLm1jID0gbWM7CisgICAgICAgIHRoaXMuY29uID0gY29uOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENsZWFycyBhbGwgd2FybmluZ3MgcmVwb3J0ZWQgZm9yIHRoZSB1bmRlcmx5aW5nIGNvbm5lY3Rpb24gIG9iamVjdC4KICAgICAgKgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgY2xlYXJXYXJuaW5ncygpIHRocm93cyBTUUxFeGNlcHRpb257ICAgIAotCWNoZWNrVmFsaWRpdHkoKTsKKyAgICBwdWJsaWMgdm9pZCBjbGVhcldhcm5pbmdzKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIGNvbi5jbGVhcldhcm5pbmdzKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogQ2xvc2VzIHRoZSBsb2dpY2FsIGNvbm5lY3Rpb24uICAgIAorICAgICAqIENsb3NlcyB0aGUgbG9naWNhbCBjb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgY2xvc2UoKSB0aHJvd3MgU1FMRXhjZXB0aW9uewogICAgICAgICBpc0Nsb3NlZCA9IHRydWU7Ci0gICAgICAgIG1jLmNvbm5lY3Rpb25DbG9zZWQobnVsbCwgdGhpcyk7ICAgICAgICAKKyAgICAgICAgbWMuY29ubmVjdGlvbkNsb3NlZChudWxsLCB0aGlzKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBJbnZhbGlkYXRlcyB0aGlzIG9iamVjdC4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBpbnZhbGlkYXRlKCkgewotICAgIAl2YWxpZCA9IGZhbHNlOworICAgICAgICB2YWxpZCA9IGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENsb3NlcyB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpbnZvbHZlZCBpbiB0aGlzLgogICAgICAqCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KLSAgICB2b2lkIGFjdHVhbENsb3NlKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsgICAgCisgICAgdm9pZCBhY3R1YWxDbG9zZSgpIHRocm93cyBTUUxFeGNlcHRpb257CiAgICAgICAgIGNvbi5jbG9zZSgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbW1pdCB0aGUgY2hhbmdlcyBpbiB0aGUgdW5kZXJseWluZyBDb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjb21taXQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24uY29tbWl0KCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24uY29tbWl0KCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIHN0YXRlbWVudCBmcm9tIHRoZSB1bmRlcmx5aW5nIENvbm5lY3Rpb24KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+U3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEByZXR1cm4gICAgPGNvZGU+U3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTdGF0ZW1lbnQgY3JlYXRlU3RhdGVtZW50KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIHJldHVybiBjb24uY3JlYXRlU3RhdGVtZW50KCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIHN0YXRlbWVudCBmcm9tIHRoZSB1bmRlcmx5aW5nIENvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0VHlwZQlUeXBlIG9mIHRoZSBSZXN1bHRTZXQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0Q29uY3VycmVuY3kJUmVzdWx0U2V0IENvbmN1cnJlbmN5LgotICAgICAqIEByZXR1cm4JPGNvZGU+U3RhdGVtZW50PC9jb2RlPiBvYmplY3QuICAgICAKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldFR5cGUgICAgVHlwZSBvZiB0aGUgUmVzdWx0U2V0CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldENvbmN1cnJlbmN5ICAgIFJlc3VsdFNldCBDb25jdXJyZW5jeS4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgU3RhdGVtZW50IGNyZWF0ZVN0YXRlbWVudChpbnQgcmVzdWx0U2V0VHlwZSwgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgcmV0dXJuIGNvbi5jcmVhdGVTdGF0ZW1lbnQocmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3kpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBzdGF0ZW1lbnQgZnJvbSB0aGUgdW5kZXJseWluZyBDb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHBhcmFtCXJlc3VsdFNldFR5cGUJVHlwZSBvZiB0aGUgUmVzdWx0U2V0Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldENvbmN1cnJlbmN5CVJlc3VsdFNldCBDb25jdXJyZW5jeS4KLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0SG9sZGFiaWxpdHkJUmVzdWx0U2V0IEhvbGRhYmlsaXR5LiAgICAgCi0gICAgICogQHJldHVybgk8Y29kZT5TdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4gCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgICAgICAKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0VHlwZSAgICBUeXBlIG9mIHRoZSBSZXN1bHRTZXQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0Q29uY3VycmVuY3kgICAgUmVzdWx0U2V0IENvbmN1cnJlbmN5LgorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRIb2xkYWJpbGl0eSAgICBSZXN1bHRTZXQgSG9sZGFiaWxpdHkuCisgICAgICogQHJldHVybiAgICA8Y29kZT5TdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCi0gICAgcHVibGljIFN0YXRlbWVudCBjcmVhdGVTdGF0ZW1lbnQoaW50IHJlc3VsdFNldFR5cGUsIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwgCi0gICAgCQkJCSAgICAgaW50IHJlc3VsdFNldEhvbGRhYmlsdHkpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCQkJCSAgICAgCisgICAgcHVibGljIFN0YXRlbWVudCBjcmVhdGVTdGF0ZW1lbnQoaW50IHJlc3VsdFNldFR5cGUsIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0SG9sZGFiaWx0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICByZXR1cm4gY29uLmNyZWF0ZVN0YXRlbWVudChyZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSwKLSAgICAgICAgCQkJICAgcmVzdWx0U2V0SG9sZGFiaWx0eSk7CisgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFNldEhvbGRhYmlsdHkpOwogICAgIH0KLSAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgY3VycmVudCBhdXRvLWNvbW1pdCBtb2RlIGZvciB0aGUgdW5kZXJseWluZyA8Y29kZT4gQ29ubmVjdGlvbjwvY29kZT4uCiAgICAgICoKICAgICAgKiBAcmV0dXJuIFRoZSBjdXJyZW50IHN0YXRlIG9mIGNvbm5lY3Rpb24ncyBhdXRvLWNvbW1pdCBtb2RlLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gZ2V0QXV0b0NvbW1pdCgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uZ2V0QXV0b0NvbW1pdCgpOwotICAgIH0gICAKLSAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uZ2V0QXV0b0NvbW1pdCgpOworICAgIH0KKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgdW5kZXJseWluZyA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QncyBjYXRhbG9nIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCUNhdGFsb2cgTmFtZS4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHJldHVybiAgICBDYXRhbG9nIE5hbWUuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q2F0YWxvZygpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICByZXR1cm4gY29uLmdldENhdGFsb2coKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgaG9sZGFiaWxpdHkgb2YgPGNvZGU+UmVzdWx0U2V0PC9jb2RlPiBvYmplY3RzIGNyZWF0ZWQKICAgICAgKiB1c2luZyB0aGlzIGNvbm5lY3Rpb24gb2JqZWN0LgogICAgICAqCi0gICAgICogQHJldHVybglob2xkYWJpbGl0eSB2YWx1ZS4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHJldHVybiAgICBob2xkYWJpbGl0eSB2YWx1ZS4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIGludCBnZXRIb2xkYWJpbGl0eSgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybgljb24uZ2V0SG9sZGFiaWxpdHkoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiAgICBjb24uZ2V0SG9sZGFiaWxpdHkoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIDxjb2RlPkRhdGFiYXNlTWV0YURhdGE8L2NvZGU+b2JqZWN0IGZyb20gdGhlIHVuZGVybHlpbmcKICAgICAgKiA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KICAgICAgKgogICAgICAqIEByZXR1cm4gPGNvZGU+RGF0YWJhc2VNZXRhRGF0YTwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIERhdGFiYXNlTWV0YURhdGEgZ2V0TWV0YURhdGEoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLmdldE1ldGFEYXRhKCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLmdldE1ldGFEYXRhKCk7CiAgICAgfQotIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoaXMgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0J3MgY3VycmVudCB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwuCiAgICAgICoKICAgICAgKiBAcmV0dXJuIFRyYW5zYWN0aW9uIGxldmVsCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLyAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIHJldHVybiBjb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBSZXRyaWV2ZXMgdGhlIDxjb2RlPk1hcDwvY29kZT4gb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCAKKyAgICAgKiBSZXRyaWV2ZXMgdGhlIDxjb2RlPk1hcDwvY29kZT4gb2JqZWN0IGFzc29jaWF0ZWQgd2l0aAogICAgICAqIDxjb2RlPiBDb25uZWN0aW9uPC9jb2RlPiBPYmplY3QuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVR5cGVNYXAgc2V0IGluIHRoaXMgb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcmV0dXJuICAgIFR5cGVNYXAgc2V0IGluIHRoaXMgb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgTWFwIGdldFR5cGVNYXAoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLmdldFR5cGVNYXAoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uZ2V0VHlwZU1hcCgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgdGhlIGZpcnN0IHdhcm5pbmcgcmVwb3J0ZWQgYnkgY2FsbHMgb24gdGhlIHVuZGVybHlpbmcKICAgICAgKiA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCiAgICAgICoKICAgICAgKiBAcmV0dXJuIEZpcnN0IDxjb2RlPiBTUUxXYXJuaW5nPC9jb2RlPiBPYmplY3Qgb3IgbnVsbC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTUUxXYXJuaW5nIGdldFdhcm5pbmdzKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5nZXRXYXJuaW5ncygpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5nZXRXYXJuaW5ncygpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB3aGV0aGVyIHVuZGVybHlpbmcgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGlzIGNsb3NlZC4KICAgICAgKgotICAgICAqIEByZXR1cm4JdHJ1ZSBpZiA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaXMgY2xvc2VkLCBmYWxzZQotICAgICAqIAkJaWYgaXQgaXMgY2xvc2VkLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcmV0dXJuICAgIHRydWUgaWYgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGlzIGNsb3NlZCwgZmFsc2UKKyAgICAgKiAgICAgICAgIGlmIGl0IGlzIGNsb3NlZC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gaXNDbG9zZWQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLSAgICAJcmV0dXJuIGlzQ2xvc2VkOworICAgICAgICByZXR1cm4gaXNDbG9zZWQ7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHdoZXRoZXIgdGhpcyA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaXMgcmVhZC1vbmx5LgogICAgICAqCi0gICAgICogQHJldHVybgl0cnVlIGlmIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gaXMgcmVhZC1vbmx5LCBmYWxzZSBvdGhlci13aXNlCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEByZXR1cm4gICAgdHJ1ZSBpZiA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IGlzIHJlYWQtb25seSwgZmFsc2Ugb3RoZXItd2lzZQorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc1JlYWRPbmx5KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5pc1JlYWRPbmx5KCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLmlzUmVhZE9ubHkoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb252ZXJ0cyB0aGUgZ2l2ZW4gU1FMIHN0YXRlbWVudCBpbnRvIHRoZSBzeXN0ZW0ncyBuYXRpdmUgU1FMIGdyYW1tZXIuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBzdGF0ZW1lbnQgLCB0byBiZSBjb252ZXJ0ZWQuCi0gICAgICogQHJldHVybglDb252ZXJ0ZWQgU1FMIHN0cmluZy4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgc3RhdGVtZW50ICwgdG8gYmUgY29udmVydGVkLgorICAgICAqIEByZXR1cm4gICAgQ29udmVydGVkIFNRTCBzdHJpbmcuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgbmF0aXZlU1FMKFN0cmluZyBzcWwpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24ubmF0aXZlU1FMKHNxbCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLm5hdGl2ZVNRTChzcWwpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIGNhbGxpbmcgZGF0YWJhc2UKICAgICAgKiBzdG9yZWQgcHJvY2VkdXJlcy4KICAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAogICAgICAqIEByZXR1cm4gPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgQ2FsbGFibGVTdGF0ZW1lbnQgcHJlcGFyZUNhbGwoU3RyaW5nIHNxbCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlQ2FsbChzcWwpOwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBjYWxsaW5nIGRhdGFiYXNlCi0gICAgICogc3RvcmVkIHByb2NlZHVyZXMuCi0gICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0VHlwZQlUeXBlIG9mIHRoZSBSZXN1bHRTZXQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0Q29uY3VycmVuY3kJUmVzdWx0U2V0IENvbmN1cnJlbmN5LgotICAgICAqIEByZXR1cm4gPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLwotICAgIHB1YmxpYyBDYWxsYWJsZVN0YXRlbWVudCBwcmVwYXJlQ2FsbChTdHJpbmcgc3FsLGludCByZXN1bHRTZXRUeXBlLCAKLSAgICAJCQkJCWludCByZXN1bHRTZXRDb25jdXJyZW5jeSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAkJCQkJCi0gICAgCXJldHVybiBjb24ucHJlcGFyZUNhbGwoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSk7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIGNhbGxpbmcgZGF0YWJhc2UKLSAgICAgKiBzdG9yZWQgcHJvY2VkdXJlcy4KLSAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRUeXBlCVR5cGUgb2YgdGhlIFJlc3VsdFNldAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRDb25jdXJyZW5jeQlSZXN1bHRTZXQgQ29uY3VycmVuY3kuCi0gICAgICogQHBhcmFtCXJlc3VsdFNldEhvbGRhYmlsaXR5CVJlc3VsdFNldCBIb2xkYWJpbGl0eS4gICAgICAgICAgCi0gICAgICogQHJldHVybiA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovCi0gICAgcHVibGljIENhbGxhYmxlU3RhdGVtZW50IHByZXBhcmVDYWxsKFN0cmluZyBzcWwsIGludCByZXN1bHRTZXRUeXBlLCAKLSAgICAJCQkJCSBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3ksIAotICAgIAkJCQkJIGludCByZXN1bHRTZXRIb2xkYWJpbHR5KSB0aHJvd3MgU1FMRXhjZXB0aW9uewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCQkJCQkgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZUNhbGwoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSwKLSAgICAJCQkgICAgICAgcmVzdWx0U2V0SG9sZGFiaWx0eSk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVDYWxsKHNxbCk7CiAgICAgfQogCiAgICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZyAKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBjYWxsaW5nIGRhdGFiYXNlCisgICAgICogc3RvcmVkIHByb2NlZHVyZXMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0VHlwZSAgICBUeXBlIG9mIHRoZSBSZXN1bHRTZXQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0Q29uY3VycmVuY3kgICAgUmVzdWx0U2V0IENvbmN1cnJlbmN5LgorICAgICAqIEByZXR1cm4gPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBDYWxsYWJsZVN0YXRlbWVudCBwcmVwYXJlQ2FsbChTdHJpbmcgc3FsLGludCByZXN1bHRTZXRUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5KSB0aHJvd3MgU1FMRXhjZXB0aW9ueworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlQ2FsbChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBjYWxsaW5nIGRhdGFiYXNlCisgICAgICogc3RvcmVkIHByb2NlZHVyZXMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0VHlwZSAgICBUeXBlIG9mIHRoZSBSZXN1bHRTZXQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0Q29uY3VycmVuY3kgICAgUmVzdWx0U2V0IENvbmN1cnJlbmN5LgorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRIb2xkYWJpbGl0eSAgICBSZXN1bHRTZXQgSG9sZGFiaWxpdHkuCisgICAgICogQHJldHVybiA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCisgICAgcHVibGljIENhbGxhYmxlU3RhdGVtZW50IHByZXBhcmVDYWxsKFN0cmluZyBzcWwsIGludCByZXN1bHRTZXRUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0SG9sZGFiaWx0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZUNhbGwoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0U2V0SG9sZGFiaWx0eSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZwogICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQogICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CiAgICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCk7CiAgICAgfQotICAgIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcgCi0gICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCi0gICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JYXV0b0dlbmVyYXRlZEtleXMgYSBmbGFnIGluZGljYXRpbmcgQXV0b0dlbmVyYXRlZEtleXMgbmVlZCB0byBiZSByZXR1cm5lZC4KLSAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8KLSAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLCBpbnQgYXV0b0dlbmVyYXRlZEtleXMpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsYXV0b0dlbmVyYXRlZEtleXMpOwotICAgIH0gICAgCi0gICAgICAKLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nIAotICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQotICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50Ci0gICAgICogQHBhcmFtCWNvbHVtbkluZGV4ZXMgYW4gYXJyYXkgb2YgY29sdW1uIGluZGV4ZXMgaW5kaWNhdGluZyB0aGUgY29sdW1ucyB0aGF0IHNob3VsZCBiZQotICAgICAqCQlyZXR1cm5lZCBmcm9tIHRoZSBpbnNlcnRlZCByb3cgb3Igcm93cy4KLSAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8KLSAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLCBpbnRbXSBjb2x1bW5JbmRleGVzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLGNvbHVtbkluZGV4ZXMpOwotICAgIH0gICAgICAgICAgCi0gCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZyAKLSAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKLSAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRUeXBlCVR5cGUgb2YgdGhlIFJlc3VsdFNldAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRDb25jdXJyZW5jeQlSZXN1bHRTZXQgQ29uY3VycmVuY3kuCi0gICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovCi0gICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCxpbnQgcmVzdWx0U2V0VHlwZSwgCi0gICAgCQkJCQlpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3kpIHRocm93cyBTUUxFeGNlcHRpb257Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAJCQkJCQotICAgIAlyZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSk7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcgCi0gICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCi0gICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0VHlwZQlUeXBlIG9mIHRoZSBSZXN1bHRTZXQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0Q29uY3VycmVuY3kJUmVzdWx0U2V0IENvbmN1cnJlbmN5LgotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRIb2xkYWJpbGl0eQlSZXN1bHRTZXQgSG9sZGFiaWxpdHkuICAgICAgICAgIAotICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLwotICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludCByZXN1bHRTZXRUeXBlLCAKLSAgICAJCQkJCSBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3ksIAotICAgIAkJCQkJIGludCByZXN1bHRTZXRIb2xkYWJpbHR5KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAkJCQkJIAotICAgIAlyZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSwKLSAgICAJCQkJICAgIHJlc3VsdFNldEhvbGRhYmlsdHkpOwotICAgIH0gICAgICAgICAgIAogCiAgICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZyAKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nCiAgICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JY29sdW1uTmFtZXMgTmFtZSBvZiBib3VuZCBjb2x1bW5zLgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICBhdXRvR2VuZXJhdGVkS2V5cyBhIGZsYWcgaW5kaWNhdGluZyBBdXRvR2VuZXJhdGVkS2V5cyBuZWVkIHRvIGJlIHJldHVybmVkLgogICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLCBpbnQgYXV0b0dlbmVyYXRlZEtleXMpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCxhdXRvR2VuZXJhdGVkS2V5cyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZworICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIGNvbHVtbkluZGV4ZXMgYW4gYXJyYXkgb2YgY29sdW1uIGluZGV4ZXMgaW5kaWNhdGluZyB0aGUgY29sdW1ucyB0aGF0IHNob3VsZCBiZQorICAgICAqICAgICAgICByZXR1cm5lZCBmcm9tIHRoZSBpbnNlcnRlZCByb3cgb3Igcm93cy4KKyAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLCBpbnRbXSBjb2x1bW5JbmRleGVzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsY29sdW1uSW5kZXhlcyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZworICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldFR5cGUgICAgVHlwZSBvZiB0aGUgUmVzdWx0U2V0CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldENvbmN1cnJlbmN5ICAgIFJlc3VsdFNldCBDb25jdXJyZW5jeS4KKyAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLGludCByZXN1bHRTZXRUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5KSB0aHJvd3MgU1FMRXhjZXB0aW9ueworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3kpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcKKyAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRUeXBlICAgIFR5cGUgb2YgdGhlIFJlc3VsdFNldAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRDb25jdXJyZW5jeSAgICBSZXN1bHRTZXQgQ29uY3VycmVuY3kuCisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldEhvbGRhYmlsaXR5ICAgIFJlc3VsdFNldCBIb2xkYWJpbGl0eS4KKyAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLCBpbnQgcmVzdWx0U2V0VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3ksCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdFNldEhvbGRhYmlsdHkpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3ksCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRTZXRIb2xkYWJpbHR5KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nCisgICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgY29sdW1uTmFtZXMgTmFtZSBvZiBib3VuZCBjb2x1bW5zLgorICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIFN0cmluZ1tdIGNvbHVtbk5hbWVzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLGNvbHVtbk5hbWVzKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsY29sdW1uTmFtZXMpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpAQCAtNTM2LDE0MSArNTM2LDE0MSBAQAogICAgIC8qKgogICAgICAqIFJlbW92ZXMgdGhlIGdpdmVuIDxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0IGZyb20gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc2F2ZXBvaW50CTxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0Ci0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBzYXZlcG9pbnQgICAgPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcmVsZWFzZVNhdmVwb2ludChTYXZlcG9pbnQgc2F2ZXBvaW50KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24ucmVsZWFzZVNhdmVwb2ludChzYXZlcG9pbnQpOwotICAgIH0gCi0gICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24ucmVsZWFzZVNhdmVwb2ludChzYXZlcG9pbnQpOworICAgIH0KKwogICAgIC8qKgogICAgICAqIFJvbGxzIGJhY2sgdGhlIGNoYW5nZXMgbWFkZSBpbiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbi4KICAgICAgKgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8gICAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KICAgICBwdWJsaWMgdm9pZCByb2xsYmFjaygpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5yb2xsYmFjaygpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnJvbGxiYWNrKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUm9sbHMgYmFjayB0aGUgY2hhbmdlcyBtYWRlIGFmdGVyIHRoZSBzYXZlcG9pbnQuCiAgICAgICoKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovICAgICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCiAgICAgcHVibGljIHZvaWQgcm9sbGJhY2soU2F2ZXBvaW50IHNhdmVwb2ludCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnJvbGxiYWNrKHNhdmVwb2ludCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24ucm9sbGJhY2soc2F2ZXBvaW50KTsKICAgICB9Ci0gICAgICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgYXV0by1jb21tbWl0IG1vZGUgb2YgdGhlIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KICAgICAgKgotICAgICAqIEBwYXJhbQlhdXRvQ29tbWl0IGJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyB0aGUgYXV0by1jb21taXQgbW9kZS4gICAgIAotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgYXV0b0NvbW1pdCBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgdGhlIGF1dG8tY29tbWl0IG1vZGUuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldEF1dG9Db21taXQoYm9vbGVhbiBhdXRvQ29tbWl0KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24uc2V0QXV0b0NvbW1pdChhdXRvQ29tbWl0KTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5zZXRBdXRvQ29tbWl0KGF1dG9Db21taXQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGNhdGFsb2cgbmFtZSB0byB0aGUgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0CiAgICAgICoKLSAgICAgKiBAcGFyYW0JY2F0YWxvZwlDYXRhbG9nIG5hbWUuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBjYXRhbG9nICAgIENhdGFsb2cgbmFtZS4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Q2F0YWxvZyhTdHJpbmcgY2F0YWxvZykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnNldENhdGFsb2coY2F0YWxvZyk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24uc2V0Q2F0YWxvZyhjYXRhbG9nKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBTZXRzIHRoZSBob2xkYWJpbGl0eSBvZiA8Y29kZT5SZXN1bHRTZXQ8L2NvZGU+IG9iamVjdHMgY3JlYXRlZCAKKyAgICAgKiBTZXRzIHRoZSBob2xkYWJpbGl0eSBvZiA8Y29kZT5SZXN1bHRTZXQ8L2NvZGU+IG9iamVjdHMgY3JlYXRlZAogICAgICAqIHVzaW5nIHRoaXMgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgogICAgICAqCi0gICAgICogQHBhcmFtCWhvbGRhYmlsaXR5CUEgPGNvZGU+UmVzdWx0U2V0PC9jb2RlPiBob2xkYWJpbGl0eSBjb25zdGFudAotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgaG9sZGFiaWxpdHkgICAgQSA8Y29kZT5SZXN1bHRTZXQ8L2NvZGU+IGhvbGRhYmlsaXR5IGNvbnN0YW50CisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldEhvbGRhYmlsaXR5KGludCBob2xkYWJpbGl0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAgCWNvbi5zZXRIb2xkYWJpbGl0eShob2xkYWJpbGl0eSk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICAgY29uLnNldEhvbGRhYmlsaXR5KGhvbGRhYmlsaXR5KTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBQdXRzIHRoZSBjb25uZWN0aW9uIGluIHJlYWQtb25seSBtb2RlIGFzIGEgaGludCB0byB0aGUgZHJpdmVyIHRvIAorICAgICAqIFB1dHMgdGhlIGNvbm5lY3Rpb24gaW4gcmVhZC1vbmx5IG1vZGUgYXMgYSBoaW50IHRvIHRoZSBkcml2ZXIgdG8KICAgICAgKiBwZXJmb3JtIGRhdGFiYXNlIG9wdGltaXphdGlvbnMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcmVhZE9ubHkgIHRydWUgZW5hYmxlcyByZWFkLW9ubHkgbW9kZSwgZmFsc2UgZGlzYWJsZXMgaXQuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICByZWFkT25seSAgdHJ1ZSBlbmFibGVzIHJlYWQtb25seSBtb2RlLCBmYWxzZSBkaXNhYmxlcyBpdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0UmVhZE9ubHkoYm9vbGVhbiByZWFkT25seSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnNldFJlYWRPbmx5KHJlYWRPbmx5KTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5zZXRSZWFkT25seShyZWFkT25seSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhbmQgdW5uYW1lZCBzYXZlcG9pbnQgYW5kIHJldHVybnMgYW4gb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhhdC4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHJldHVybiAgICA8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdC4KICAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFNhdmVwb2ludCBzZXRTYXZlcG9pbnQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnNldFNhdmVwb2ludCgpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5zZXRTYXZlcG9pbnQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgc2F2ZXBvaW50IHdpdGggdGhlIG5hbWUgYW5kIHJldHVybnMgYW4gb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhhdC4KICAgICAgKgotICAgICAqIEBwYXJhbQluYW1lCU5hbWUgb2YgdGhlIHNhdmVwb2ludC4KLSAgICAgKiBAcmV0dXJuCTxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgbmFtZSAgICBOYW1lIG9mIHRoZSBzYXZlcG9pbnQuCisgICAgICogQHJldHVybiAgICA8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFNhdmVwb2ludCBzZXRTYXZlcG9pbnQoU3RyaW5nIG5hbWUpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uc2V0U2F2ZXBvaW50KG5hbWUpOwotICAgIH0gICAgCi0gICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnNldFNhdmVwb2ludChuYW1lKTsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbGV2ZWwgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgbGV2ZWwgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRUcmFuc2FjdGlvbklzb2xhdGlvbihpbnQgbGV2ZWwpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbihsZXZlbCk7Ci0gICAgfSAgICAgCi0gICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24obGV2ZWwpOworICAgIH0KKwogICAgIC8qKgotICAgICAqIEluc3RhbGxzIHRoZSBnaXZlbiA8Y29kZT5NYXA8L2NvZGU+IG9iamVjdCBhcyB0aGUgdHlvZSBtYXAgZm9yIHRoaXMgCisgICAgICogSW5zdGFsbHMgdGhlIGdpdmVuIDxjb2RlPk1hcDwvY29kZT4gb2JqZWN0IGFzIHRoZSB0eW9lIG1hcCBmb3IgdGhpcwogICAgICAqIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgogICAgICAqCi0gICAgICogQHBhcmFtCW1hcAk8Y29kZT5NYXA8L2NvZGU+IGEgTWFwIG9iamVjdCB0byBpbnN0YWxsLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgbWFwICAgIDxjb2RlPk1hcDwvY29kZT4gYSBNYXAgb2JqZWN0IHRvIGluc3RhbGwuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFR5cGVNYXAoTWFwIG1hcCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOwotICAgIAljb24uc2V0VHlwZU1hcChtYXApOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnNldFR5cGVNYXAobWFwKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDaGVja3MgdGhlIHZhbGlkaXR5IG9mIHRoaXMgb2JqZWN0CiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIGNoZWNrVmFsaWRpdHkoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLSAgICAJaWYgKGlzQ2xvc2VkKSB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uICgiQ29ubmVjdGlvbiBjbG9zZWQiKTsKLSAgICAJaWYgKCF2YWxpZCkgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAoIkludmFsaWQgQ29ubmVjdGlvbiIpOwotICAgIAlpZihhY3RpdmUgPT0gZmFsc2UpIHsKLSAgICAJICAgIG1jLmNoZWNrSWZBY3RpdmUodGhpcyk7Ci0gICAgCX0KKyAgICAgICAgaWYgKGlzQ2xvc2VkKSB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uICgiQ29ubmVjdGlvbiBjbG9zZWQiKTsKKyAgICAgICAgaWYgKCF2YWxpZCkgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAoIkludmFsaWQgQ29ubmVjdGlvbiIpOworICAgICAgICBpZihhY3RpdmUgPT0gZmFsc2UpIHsKKyAgICAgICAgICAgIG1jLmNoZWNrSWZBY3RpdmUodGhpcyk7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBhY3RpdmUgZmxhZyB0byB0cnVlCiAgICAgICoKLSAgICAgKiBAcGFyYW0JYWN0dglib29sZWFuCisgICAgICogQHBhcmFtICAgIGFjdHYgICAgYm9vbGVhbgogICAgICAqLwogICAgIHZvaWQgc2V0QWN0aXZlKGJvb2xlYW4gYWN0dikgewogICAgICAgICBhY3RpdmUgPSBhY3R2OwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQppbmRleCBhYzdlNzQ4Li5mMDY3NWE0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQpAQCAtMzMsMTkgKzMzLDE5IEBACiAgKiBUaGlzIGNsYXNzIGlzIGV4dGVuZGVkIGJ5IHRoZSBEYXRhU291cmNlIHNwZWNpZmljIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBmYWN0b3JpZXMKICAqIGFuZCB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBmb3IgdGhlIDxjb2RlPkRyaXZlck1hbmFnZXI8L2NvZGU+LgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDgvMDMKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA4LzAzCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiAKLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnksIAorcHVibGljIGFic3RyYWN0IGNsYXNzIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSwKICAgICBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7Ci0gICAgCisKICAgICBwcm90ZWN0ZWQgRGF0YVNvdXJjZVNwZWMgc3BlYyA9IG5ldyBEYXRhU291cmNlU3BlYygpOwogICAgIHByb3RlY3RlZCB0cmFuc2llbnQgRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIgZHNPYmpCdWlsZGVyOwotICAgIAorCiAgICAgcHJvdGVjdGVkIGphdmEuaW8uUHJpbnRXcml0ZXIgbG9nV3JpdGVyID0gbnVsbDsKICAgICBwcm90ZWN0ZWQgamFrYXJ0YS5yZXNvdXJjZS5zcGkuUmVzb3VyY2VBZGFwdGVyIHJhID0gbnVsbDsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIExvZ2dlciBfbG9nZ2VyOwogICAgIHN0YXRpYyB7CiAgICAgICAgIF9sb2dnZXIgPSBMb2dnZXIuZ2V0QW5vbnltb3VzTG9nZ2VyKCk7CkBAIC01NCw4ICs1NCw4IEBACiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIENvbm5lY3Rpb24gRmFjdG9yeSBpbnN0YW5jZS4gVGhlIDxjb2RlPkNvbm5lY3Rpb25NYW5hZ2VyPC9jb2RlPiBpbXBsZW1lbnRhdGlvbgogICAgICAqIG9mIHRoZSByZXNvdXJjZSBhZGFwdGVyIGlzIHVzZWQgaGVyZS4KLSAgICAgKiAKLSAgICAgKiBAcmV0dXJuCUdlbmVyaWMgSkRCQyBDb25uZWN0b3IgaW1wbGVtZW50YXRpb24gb2YgPGNvZGU+amF2YXguc3FsLkRhdGFTb3VyY2U8L2NvZGU+CisgICAgICoKKyAgICAgKiBAcmV0dXJuICAgIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IgaW1wbGVtZW50YXRpb24gb2YgPGNvZGU+amF2YXguc3FsLkRhdGFTb3VyY2U8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIE9iamVjdCBjcmVhdGVDb25uZWN0aW9uRmFjdG9yeSgpIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTYzLDE2ICs2MywxNiBAQAogICAgICAgICB9CiAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlIGNmID0gbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlKAogICAgICAgICAgICAgKGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSl0aGlzLCBudWxsKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGNmOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBDb25uZWN0aW9uIEZhY3RvcnkgaW5zdGFuY2UuIFRoZSA8Y29kZT5Db25uZWN0aW9uTWFuYWdlcjwvY29kZT4gaW1wbGVtZW50YXRpb24KICAgICAgKiBvZiB0aGUgYXBwbGljYXRpb24gc2VydmVyIGlzIHVzZWQgaGVyZS4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JY3hNYW5hZ2VyCTxjb2RlPkNvbm5lY3Rpb25NYW5hZ2VyPC9jb2RlPiBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgotICAgICAqIEByZXR1cm4JR2VuZXJpYyBKREJDIENvbm5lY3RvciBpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29kZT4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBjeE1hbmFnZXIgICAgPGNvZGU+Q29ubmVjdGlvbk1hbmFnZXI8L2NvZGU+IHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogQHJldHVybiAgICBHZW5lcmljIEpEQkMgQ29ubmVjdG9yIGltcGxlbWVudGF0aW9uIG9mIDxjb2RlPmphdmF4LnNxbC5EYXRhU291cmNlPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBPYmplY3QgY3JlYXRlQ29ubmVjdGlvbkZhY3RvcnkoamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvbk1hbmFnZXIgY3hNYW5hZ2VyKSB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC04MCw1NSArODAsNTUgQEAKICAgICAgICAgfQogICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuRGF0YVNvdXJjZSBjZiA9IG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuRGF0YVNvdXJjZSgKICAgICAgICAgICAgIChqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkpdGhpcywgY3hNYW5hZ2VyKTsKLSAgICAgICAgcmV0dXJuIGNmOyAKKyAgICAgICAgcmV0dXJuIGNmOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBuZXcgcGh5c2ljYWwgY29ubmVjdGlvbiB0byB0aGUgdW5kZXJseWluZyBFSVMgcmVzb3VyY2UKICAgICAgKiBtYW5hZ2VyLgotICAgICAqIAotICAgICAqIEBwYXJhbQlzdWJqZWN0CTxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICogQHBhcmFtCWN4UmVxdWVzdEluZm8JPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiB3aGljaCBtYXkgYmUgY3JlYXRlZAotICAgICAqICAgICAgIAkgICAgICAgICAgICAgCWFzIGEgcmVzdWx0IG9mIHRoZSBpbnZvY2F0aW9uIDxjb2RlPmdldENvbm5lY3Rpb24odXNlciwgcGFzc3dvcmQpPC9jb2RlPgotICAgICAqICAgICAgIAkgICAgICAgICAgICAgCW9uIHRoZSA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QKLSAgICAgKiBAcmV0dXJuCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QgY3JlYXRlZAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gaW5zdGFudGlhdGluZyB0aGUKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCTxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdCB1c2VkIGZvciB0aGUKLSAgICAgKiAgICAgICAJCQkJY3JlYXRpb24gb2YgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QKLSAgICAgKiBAdGhyb3dzCVNlY3VyaXR5RXhjZXB0aW9uCWlmIHRoZXJlIGlubyA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdAotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJc2F0aXNmeWluZyB0aGlzIHJlcXVlc3QgCi0gICAgICogQHRocm93cwlSZXNvdXJjZUFsbG9jYXRpb25FeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUgCi0gICAgICoJCQkJCQlwaHlzaWNhbCBjb25uZWN0aW9uCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3ViamVjdCAgICA8Y29kZT5TdWJqZWN0PC9jb2RlPiBpbnN0YW5jZSBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqIEBwYXJhbSAgICBjeFJlcXVlc3RJbmZvICAgIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gd2hpY2ggbWF5IGJlIGNyZWF0ZWQKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyBhIHJlc3VsdCBvZiB0aGUgaW52b2NhdGlvbiA8Y29kZT5nZXRDb25uZWN0aW9uKHVzZXIsIHBhc3N3b3JkKTwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiB0aGUgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0CisgICAgICogQHJldHVybiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGNyZWF0ZWQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGluc3RhbnRpYXRpbmcgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QgdXNlZCBmb3IgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgIGNyZWF0aW9uIG9mIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0CisgICAgICogQHRocm93cyAgICBTZWN1cml0eUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpbm8gPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdGlzZnlpbmcgdGhpcyByZXF1ZXN0CisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUFsbG9jYXRpb25FeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHBoeXNpY2FsIGNvbm5lY3Rpb24KICAgICAgKi8KICAgICBwdWJsaWMgYWJzdHJhY3QgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gY3JlYXRlTWFuYWdlZENvbm5lY3Rpb24oamF2YXguc2VjdXJpdHkuYXV0aC5TdWJqZWN0IHN1YmplY3QsCiAgICAgICAgIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBjeFJlcXVlc3RJbmZvKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb247Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBDaGVjayBpZiB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaXMgZXF1YWwgdG8gCisgICAgICogQ2hlY2sgaWYgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGlzIGVxdWFsIHRvCiAgICAgICogYW5vdGhlciA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LgotICAgICAqIAotICAgICAqIEBwYXJhbQlvdGhlcgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdCBmb3IgY2hlY2tpbmcgZXF1YWxpdHkgd2l0aAotICAgICAqIEByZXR1cm4JdHJ1ZQlpZiB0aGUgcHJvcGVydHkgc2V0cyBvZiBib3RoIHRoZSAKLSAgICAgKgkJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0cyBhcmUgdGhlIHNhbWUKLSAgICAgKgkJZmFsc2UJb3RoZXJ3aXNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgb3RoZXIgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QgZm9yIGNoZWNraW5nIGVxdWFsaXR5IHdpdGgKKyAgICAgKiBAcmV0dXJuICAgIHRydWUgICAgaWYgdGhlIHByb3BlcnR5IHNldHMgb2YgYm90aCB0aGUKKyAgICAgKiAgICAgICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0cyBhcmUgdGhlIHNhbWUKKyAgICAgKiAgICAgICAgZmFsc2UgICAgb3RoZXJ3aXNlCiAgICAgICovCiAgICAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvdGhlcik7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXQgdGhlIGxvZyB3cml0ZXIgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAc2VlCTxjb2RlPnNldExvZ1dyaXRlcjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRMb2dXcml0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIGphdmEuaW8uUHJpbnRXcml0ZXIgZ2V0TG9nV3JpdGVyKCkgewogICAgICAgICByZXR1cm4gbG9nV3JpdGVyOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAc2VlCTxjb2RlPnNldFJlc291cmNlQWRhcHRlcjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0UmVzb3VyY2VBZGFwdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBqYWthcnRhLnJlc291cmNlLnNwaS5SZXNvdXJjZUFkYXB0ZXIgZ2V0UmVzb3VyY2VBZGFwdGVyKCkgewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtMTM2LDExICsxMzYsMTEgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmE7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgaGFzaCBjb2RlIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWhhc2ggY29kZSBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+CisgICAgICogQHJldHVybiAgICBoYXNoIGNvZGUgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKXsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTE0OCw0MSArMTQ4LDQxIEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHNwZWMuaGFzaENvZGUoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgbWF0Y2hlZCA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gZnJvbSB0aGUgY2FuZGlkYXRlIAorICAgICAqIFJldHVybnMgYSBtYXRjaGVkIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBmcm9tIHRoZSBjYW5kaWRhdGUKICAgICAgKiBzZXQgb2YgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdHMuCi0gICAgICogCi0gICAgICogQHBhcmFtCWNvbm5lY3Rpb25TZXQJPGNvZGU+U2V0PC9jb2RlPiBvZiAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+Ci0gICAgICoJCQkJb2JqZWN0cyBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgotICAgICAqIEBwYXJhbQlzdWJqZWN0CSBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgotICAgICAqCQkJZm9yIHJldHJpZXZpbmcgaW5mb3JtYXRpb24gcmVxdWlyZWQgZm9yIG1hdGNoaW5nCi0gICAgICogQHBhcmFtCWN4UmVxdWVzdEluZm8JPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgotICAgICAqCQkJCWZvciByZXRyaWV2aW5nIGluZm9ybWF0aW9uIHJlcXVpcmVkIGZvciBtYXRjaGluZwotICAgICAqIEByZXR1cm4JPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHRoYXQgaXMgdGhlIGJlc3QgbWF0Y2ggc2F0aXNmeWluZyB0aGlzIHJlcXVlc3QKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGFjY2Vzc2luZyB0aGUgPGNvZGU+U3ViamVjdDwvY29kZT4KLSAgICAgKgkJCQkJcGFyYW1ldGVyIG9yIHRoZSA8Y29kZT5TZXQ8L2NvZGU+IG9mIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgotICAgICAqCQkJCQlvYmplY3RzIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgY29ubmVjdGlvblNldCAgICA8Y29kZT5TZXQ8L2NvZGU+IG9mICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgICBvYmplY3RzIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogQHBhcmFtICAgIHN1YmplY3QgICAgIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogICAgICAgICAgICBmb3IgcmV0cmlldmluZyBpbmZvcm1hdGlvbiByZXF1aXJlZCBmb3IgbWF0Y2hpbmcKKyAgICAgKiBAcGFyYW0gICAgY3hSZXF1ZXN0SW5mbyAgICA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogICAgICAgICAgICAgICAgZm9yIHJldHJpZXZpbmcgaW5mb3JtYXRpb24gcmVxdWlyZWQgZm9yIG1hdGNoaW5nCisgICAgICogQHJldHVybiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdGhhdCBpcyB0aGUgYmVzdCBtYXRjaCBzYXRpc2Z5aW5nIHRoaXMgcmVxdWVzdAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgYWNjZXNzaW5nIHRoZSA8Y29kZT5TdWJqZWN0PC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIgb3IgdGhlIDxjb2RlPlNldDwvY29kZT4gb2YgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogICAgICAgICAgICAgICAgICAgIG9iamVjdHMgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKICAgICAgKi8KLSAgICBwdWJsaWMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWF0Y2hNYW5hZ2VkQ29ubmVjdGlvbnMoamF2YS51dGlsLlNldCBjb25uZWN0aW9uU2V0LCAKKyAgICBwdWJsaWMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWF0Y2hNYW5hZ2VkQ29ubmVjdGlvbnMoamF2YS51dGlsLlNldCBjb25uZWN0aW9uU2V0LAogICAgICAgICBqYXZheC5zZWN1cml0eS5hdXRoLlN1YmplY3Qgc3ViamVjdCwgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxdWVzdEluZm8pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CiAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gbWF0Y2hNYW5hZ2VkQ29ubmVjdGlvbnMiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZihjb25uZWN0aW9uU2V0ID09IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIFBhc3N3b3JkQ3JlZGVudGlhbCBwYyA9IFNlY3VyaXR5VXRpbHMuZ2V0UGFzc3dvcmRDcmVkZW50aWFsKHRoaXMsIHN1YmplY3QsIGN4UmVxdWVzdEluZm8pOwotICAgICAgICAKKwogICAgICAgICBqYXZhLnV0aWwuSXRlcmF0b3IgaXRlciA9IGNvbm5lY3Rpb25TZXQuaXRlcmF0b3IoKTsKICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1jID0gbnVsbDsKICAgICAgICAgd2hpbGUoaXRlci5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgbWMgPSAoY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uKSBpdGVyLm5leHQoKTsKICAgICAgICAgICAgIH0gY2F0Y2goamF2YS51dGlsLk5vU3VjaEVsZW1lbnRFeGNlcHRpb24gbnNlZSkgewotCSAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfaXRlciIpOworICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfaXRlciIpOwogICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihuc2VlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZihwYyA9PSBudWxsICYmIHRoaXMuZXF1YWxzKG1jLmdldE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSgpKSkgewpAQCAtMTkxLDcgKzE5MSw3IEBACiAgICAgICAgICAgICAgICAgICAgIGlzVmFsaWQobWMpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWM7CiAgICAgICAgICAgICAgICAgfSBjYXRjaChSZXNvdXJjZUV4Y2VwdGlvbiByZSkgewotCSAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3JlIiwgcmUpOworICAgICAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3JlIiwgcmUpOwogICAgICAgICAgICAgICAgICAgICBtYy5jb25uZWN0aW9uRXJyb3JPY2N1cnJlZChyZSwgbnVsbCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIGlmKFNlY3VyaXR5VXRpbHMuaXNQYXNzd29yZENyZWRlbnRpYWxFcXVhbChwYywgbWMuZ2V0UGFzc3dvcmRDcmVkZW50aWFsKCkpID09IHRydWUpIHsKQEAgLTIwMCw0NSArMjAwLDQ1IEBACiAgICAgICAgICAgICAgICAgICAgIGlzVmFsaWQobWMpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWM7CiAgICAgICAgICAgICAgICAgfSBjYXRjaChSZXNvdXJjZUV4Y2VwdGlvbiByZSkgewotCSAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMucmUiKTsKKyAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLnJlIik7CiAgICAgICAgICAgICAgICAgICAgIG1jLmNvbm5lY3Rpb25FcnJvck9jY3VycmVkKHJlLCBudWxsKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotICAgIAorCiAgICAgLy9HSkNJTlQKICAgICAvKioKICAgICAgKiBDaGVja3MgaWYgYSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaXMgdG8gYmUgdmFsaWRhdGVkIG9yIG5vdAogICAgICAqIGFuZCB2YWxpZGF0ZXMgaXQgb3IgcmV0dXJucy4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JbWMJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIG9yCi0gICAgICogICAgICAgIAkgICAgICAgICAgCQlpZiB2YWxpZGF0aW9uIG1ldGhvZCBpcyBub3QgcHJvcGVyCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIG9yCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB2YWxpZGF0aW9uIG1ldGhvZCBpcyBub3QgcHJvcGVyCiAgICAgICovCiAgICAgdm9pZCBpc1ZhbGlkKGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKIAogICAgICAgICBpZihtYy5pc1RyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKSB7Ci0JICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgCi0gICAgICAgIGJvb2xlYW4gY29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZCA9IAorCisgICAgICAgIGJvb2xlYW4gY29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZCA9CiAgICAgICAgICAgICAobmV3IEJvb2xlYW4oc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ09OTkVDVElPTlZBTElEQVRJT05SRVFVSVJFRCkudG9Mb3dlckNhc2UoKSkpLmJvb2xlYW5WYWx1ZSgpOwogICAgICAgICBpZiggY29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZCA9PSBmYWxzZSB8fCBtYyA9PSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIAorCisKICAgICAgICAgU3RyaW5nIHZhbGlkYXRpb25NZXRob2QgPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OTUVUSE9EKS50b0xvd2VyQ2FzZSgpOwotICAgICAgICAKKwogICAgICAgICBtYy5jaGVja0lmVmFsaWQoKTsKICAgICAgICAgLyoqCiAgICAgICAgICAqIFRoZSBhYm92ZSBjYWxsIGNoZWNrcyBpZiB0aGUgYWN0dWFsIHBoeXNpY2FsIGNvbm5lY3Rpb24KICAgICAgICAgICogaXMgdXNhYmxlIG9yIG5vdC4KICAgICAgICAgICovCiAgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gY29uID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpOwotICAgICAgICAKKwogICAgICAgICBpZih2YWxpZGF0aW9uTWV0aG9kLmVxdWFscygiYXV0by1jb21taXQiKSA9PSB0cnVlKSB7CiAgICAgICAgICAgICBpc1ZhbGlkQnlBdXRvQ29tbWl0KGNvbik7CiAgICAgICAgIH0gZWxzZSBpZih2YWxpZGF0aW9uTWV0aG9kLmVxdWFsc0lnbm9yZUNhc2UoIm1ldGEtZGF0YSIpID09IHRydWUpIHsKQEAgLTI0OSwyOCArMjQ5LDI4IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSB2YWxpZGF0aW9uIG1ldGhvZCBpcyBub3QgcHJvcGVyIik7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDaGVja3MgaWYgYSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBpcyB2YWxpZCBvciBub3QKICAgICAgKiBieSBjaGVja2luZyBpdHMgYXV0byBjb21taXQgcHJvcGVydHkuCi0gICAgICogCi0gICAgICogQHBhcmFtCWNvbgk8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqCisgICAgICogQHBhcmFtICAgIGNvbiAgICA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqLwogICAgIHByb3RlY3RlZCB2b2lkIGlzVmFsaWRCeUF1dG9Db21taXQoamF2YS5zcWwuQ29ubmVjdGlvbiBjb24pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGNvbiA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyAiCiAgICAgICAgICAgICAgICAgKyAidGhlIGNvbm5lY3Rpb24gaXMgbnVsbCIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgIC8vIE5vdGljZSB0aGF0IHVzaW5nIHNvbWV0aGluZyBsaWtlIAorICAgICAgICAgICAvLyBOb3RpY2UgdGhhdCB1c2luZyBzb21ldGhpbmcgbGlrZQogICAgICAgICAgICAvLyBkYkNvbi5zZXRBdXRvQ29tbWl0KGRiQ29uLmdldEF1dG9Db21taXQoKSkgd2lsbCBjYXVzZSBwcm9ibGVtcyB3aXRoCiAgICAgICAgICAgIC8vIHNvbWUgZHJpdmVycyBsaWtlIHN5YmFzZQotICAgICAgICAgICAvLyBXZSBkbyBub3QgdmFsaWRhdGUgY29ubmVjdGlvbnMgdGhhdCBhcmUgYWxyZWFkeSBlbmxpc3RlZCAKLQkgICAvL2luIGEgdHJhbnNhY3Rpb24gCi0JICAgLy8gV2UgY3ljbGUgYXV0b2NvbW1pdCB0byB0cnVlIGFuZCBmYWxzZSB0byBieS1wYXNzIGRyaXZlcnMgdGhhdCAKLQkgICAvLyBtaWdodCBjYWNoZSB0aGUgY2FsbCB0byBzZXQgYXV0b2NvbWl0dAorICAgICAgICAgICAvLyBXZSBkbyBub3QgdmFsaWRhdGUgY29ubmVjdGlvbnMgdGhhdCBhcmUgYWxyZWFkeSBlbmxpc3RlZAorICAgICAgIC8vaW4gYSB0cmFuc2FjdGlvbgorICAgICAgIC8vIFdlIGN5Y2xlIGF1dG9jb21taXQgdG8gdHJ1ZSBhbmQgZmFsc2UgdG8gYnktcGFzcyBkcml2ZXJzIHRoYXQKKyAgICAgICAvLyBtaWdodCBjYWNoZSB0aGUgY2FsbCB0byBzZXQgYXV0b2NvbWl0dAogICAgICAgICAgICAvLyBBbHNvIG5vdGljZSB0aGF0IHNvbWUgWEEgZGF0YSBzb3VyY2VzIHdpbGwgdGhyb3cgYW5kIGV4Y2VwdGlvbiBpZgogICAgICAgICAgICAvLyB5b3UgdHJ5IHRvIGNhbGwgc2V0QXV0b0NvbW1pdCwgZm9yIHRoZW0gdGhpcyBtZXRob2QgaXMgbm90IHJlY29tbWVuZGVkCiAKQEAgLTI4MSw5MCArMjgxLDkwIEBACiAgICAgICAgICAgICAgICAgY29uLnJvbGxiYWNrKCk7IC8vIHByZXZlbnRzIHVuY29tcGxldGVkIHRyYW5zYWN0aW9uIGV4Y2VwdGlvbnMKICAgICAgICAgICAgICAgICBjb24uc2V0QXV0b0NvbW1pdCh0cnVlKTsKICAgICAgICAgICAgfQotICAgICAgICAKLQkgICBjb24uc2V0QXV0b0NvbW1pdChhYyk7CisKKyAgICAgICBjb24uc2V0QXV0b0NvbW1pdChhYyk7CiAKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19hdXRvY29tbWl0Iik7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2F1dG9jb21taXQiKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDaGVja3MgaWYgYSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBpcyB2YWxpZCBvciBub3QKICAgICAgKiBieSBjaGVja2luZyBpdHMgbWV0YSBkYXRhLgotICAgICAqIAotICAgICAqIEBwYXJhbQljb24JPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBjb24gICAgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKi8KICAgICBwcm90ZWN0ZWQgdm9pZCBpc1ZhbGlkQnlNZXRhRGF0YShqYXZhLnNxbC5Db25uZWN0aW9uIGNvbikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYoY29uID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzICIKICAgICAgICAgICAgICAgICArICJ0aGUgY29ubmVjdGlvbiBpcyBudWxsIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGphdmEuc3FsLkRhdGFiYXNlTWV0YURhdGEgZG1kID0gY29uLmdldE1ldGFEYXRhKCk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfbWQiKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfbWQiKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzICIKICAgICAgICAgICAgICAgICArICJnZXR0aW5nIHRoZSBtZXRhIGRhdGEgZmFpbGVkOiAiICsgc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2hlY2tzIGlmIGEgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gaXMgdmFsaWQgb3Igbm90CiAgICAgICogYnkgcXVlcnlpbmcgYSB0YWJsZS4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JY29uCTxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAotICAgICAqIEBwYXJhbQl0YWJsZU5hbWUJdGFibGUgd2hpY2ggc2hvdWxkIGJlIHF1ZXJpZWQKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqCisgICAgICogQHBhcmFtICAgIGNvbiAgICA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKKyAgICAgKiBAcGFyYW0gICAgdGFibGVOYW1lICAgIHRhYmxlIHdoaWNoIHNob3VsZCBiZSBxdWVyaWVkCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKi8KLSAgICBwcm90ZWN0ZWQgdm9pZCBpc1ZhbGlkQnlUYWJsZVF1ZXJ5KGphdmEuc3FsLkNvbm5lY3Rpb24gY29uLCAKKyAgICBwcm90ZWN0ZWQgdm9pZCBpc1ZhbGlkQnlUYWJsZVF1ZXJ5KGphdmEuc3FsLkNvbm5lY3Rpb24gY29uLAogICAgICAgICBTdHJpbmcgdGFibGVOYW1lKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihjb24gPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgIgogICAgICAgICAgICAgICAgICsgInRoZSBjb25uZWN0aW9uIGlzIG51bGwiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgamF2YS5zcWwuU3RhdGVtZW50IHN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CiAgICAgICAgICAgICBqYXZhLnNxbC5SZXN1bHRTZXQgcnMgPSBzdG10LmV4ZWN1dGVRdWVyeSgiU0VMRUNUICogRlJPTSAiICsgdGFibGVOYW1lKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19leGVjdXRlIik7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2V4ZWN1dGUiKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzICIKICAgICAgICAgICAgICAgICArICJxdWVyeWluZyB0aGUgdGFibGUgIiArIHRhYmxlTmFtZSArICIgZmFpbGVkOiAiICsgc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgaXNvbGF0aW9uIGxldmVsIHNwZWNpZmllZCBpbiB0aGUgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPgogICAgICAqIGZvciB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHBhc3NlZC4KICAgICAgKgotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBpc29sYXRpb24gcHJvcGVydHkgaXMgaW52YWxpZAotICAgICAqCQkJCQlvciBpZiB0aGUgaXNvbGF0aW9uIGNhbm5vdCBiZSBzZXQgb3ZlciB0aGUgY29ubmVjdGlvbgorICAgICAqIEBwYXJhbSAgICBtYyAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBpc29sYXRpb24gcHJvcGVydHkgaXMgaW52YWxpZAorICAgICAqICAgICAgICAgICAgICAgICAgICBvciBpZiB0aGUgaXNvbGF0aW9uIGNhbm5vdCBiZSBzZXQgb3ZlciB0aGUgY29ubmVjdGlvbgogICAgICAqLwogICAgIHByb3RlY3RlZCB2b2lkIHNldElzb2xhdGlvbihjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWMpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7Ci0gICAgCQotICAgIAlqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiA9IG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKTsKLSAgICAJaWYoY29uID09IG51bGwpIHsKLSAgICAJICAgIHJldHVybjsKLSAgICAJfQotICAgIAkKLSAgICAJU3RyaW5nIHRyYW5Jc29sYXRpb24gPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTik7Ci0gICAgCWlmKHRyYW5Jc29sYXRpb24gIT0gbnVsbCAmJiB0cmFuSXNvbGF0aW9uLmVxdWFscygiIikgPT0gZmFsc2UpIHsKLSAgICAJICAgIGludCB0cmFuSXNvbGF0aW9uSW50ID0gZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb25JbnQodHJhbklzb2xhdGlvbik7Ci0gICAgCSAgICB0cnkgewotICAgIAkgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbih0cmFuSXNvbGF0aW9uSW50KTsKLSAgICAJICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3R4X2xldmVsIik7Ci0gICAgCSAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGNvdWxkICIKLSAgICAJICAgICAgICAgICAgKyAibm90IGJlIHNldDogIiArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAJICAgIH0KLSAgICAJfQorCisgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gY29uID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpOworICAgICAgICBpZihjb24gPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgU3RyaW5nIHRyYW5Jc29sYXRpb24gPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTik7CisgICAgICAgIGlmKHRyYW5Jc29sYXRpb24gIT0gbnVsbCAmJiB0cmFuSXNvbGF0aW9uLmVxdWFscygiIikgPT0gZmFsc2UpIHsKKyAgICAgICAgICAgIGludCB0cmFuSXNvbGF0aW9uSW50ID0gZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb25JbnQodHJhbklzb2xhdGlvbik7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbih0cmFuSXNvbGF0aW9uSW50KTsKKyAgICAgICAgICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKKyAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3R4X2xldmVsIik7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGNvdWxkICIKKyAgICAgICAgICAgICAgICAgICAgKyAibm90IGJlIHNldDogIiArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJlc2V0cyB0aGUgaXNvbGF0aW9uIGxldmVsIGZvciB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHBhc3NlZC4KICAgICAgKiBJZiB0aGUgdHJhbnNhY3Rpb24gbGV2ZWwgaXMgdG8gYmUgZ3VhcmFudGVlZCB0byBiZSB0aGUgc2FtZSBhcyB0aGUgb25lCkBAIC0zNzMsMzgyICszNzMsMzgyIEBACiAgICAgICogaXNvbGF0aW9uIGxldmVsIGZyb20gdGhlIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gcGFzc2VkLiBFbHNlLAogICAgICAqIGl0IHNldHMgaXQgdG8gdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBwYXNzZWQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWMJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+Ci0gICAgICogQHBhcmFtCXRyYW5Jc29sCWludAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIGlzb2xhdGlvbiBwcm9wZXJ0eSBpcyBpbnZhbGlkCi0gICAgICoJCQkJCW9yIGlmIHRoZSBpc29sYXRpb24gY2Fubm90IGJlIHNldCBvdmVyIHRoZSBjb25uZWN0aW9uCisgICAgICogQHBhcmFtICAgIG1jICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB0cmFuSXNvbCAgICBpbnQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBpc29sYXRpb24gcHJvcGVydHkgaXMgaW52YWxpZAorICAgICAqICAgICAgICAgICAgICAgICAgICBvciBpZiB0aGUgaXNvbGF0aW9uIGNhbm5vdCBiZSBzZXQgb3ZlciB0aGUgY29ubmVjdGlvbgogICAgICAqLwogICAgIHZvaWQgcmVzZXRJc29sYXRpb24oY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1jLCBpbnQgdHJhbklzb2wpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7Ci0gICAgCQotICAgIAlqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiA9IG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKTsKLSAgICAJaWYoY29uID09IG51bGwpIHsKLSAgICAJICAgIHJldHVybjsKLSAgICAJfQotICAgIAkKLSAgICAJU3RyaW5nIHRyYW5Jc29sYXRpb24gPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTik7Ci0gICAgCWlmKHRyYW5Jc29sYXRpb24gIT0gbnVsbCAmJiB0cmFuSXNvbGF0aW9uLmVxdWFscygiIikgPT0gZmFsc2UpIHsKLSAgICAJICAgIFN0cmluZyBndWFyYW50ZWVJc29sYXRpb25MZXZlbCA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkdVQVJBTlRFRUlTT0xBVElPTkxFVkVMKTsKLSAgICAJICAgIAotICAgIAkgICAgaWYoZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwgIT0gbnVsbCAmJiBndWFyYW50ZWVJc29sYXRpb25MZXZlbC5lcXVhbHMoIiIpID09IGZhbHNlKSB7Ci0gICAgCSAgICAgICAgYm9vbGVhbiBndWFyYW50ZWUgPSAobmV3IEJvb2xlYW4oZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwudG9Mb3dlckNhc2UoKSkpLmJvb2xlYW5WYWx1ZSgpOwotICAgIAkgICAgICAgIAotICAgIAkgICAgICAgIGlmKGd1YXJhbnRlZSkgewotICAgIAkgICAgICAgICAgICBpbnQgdHJhbklzb2xhdGlvbkludCA9IGdldFRyYW5zYWN0aW9uSXNvbGF0aW9uSW50KHRyYW5Jc29sYXRpb24pOwotICAgIAkgICAgICAgICAgICB0cnkgewotICAgIAkgICAgICAgICAgICAgICAgaWYodHJhbklzb2xhdGlvbkludCAhPSBjb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKSkgewotICAgIAkgICAgICAgICAgICAgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbih0cmFuSXNvbGF0aW9uSW50KTsKLSAgICAJICAgICAgICAgICAgICAgIH0KLSAgICAJICAgICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y190eF9sZXZlbCIpOwotICAgIAkgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgaXNvbGF0aW9uIGxldmVsIGNvdWxkIG5vdCBiZSBzZXQ6ICIKLSAgICAJICAgICAgICAgICAgICAgICAgICArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAJICAgICAgICAgICAgfQotICAgIAkgICAgICAgIH0gZWxzZSB7Ci0gICAgCSAgICAgICAgICAgIHRyeSB7Ci0gICAgCSAgICAgICAgICAgICAgICBpZih0cmFuSXNvbCAhPSBjb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKSkgewotICAgIAkgICAgICAgICAgICAgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbih0cmFuSXNvbCk7Ci0gICAgCSAgICAgICAgICAgICAgICB9Ci0gICAgCSAgICAgICAgICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfdHhfbGV2ZWwiKTsKLSAgICAJICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGlzb2xhdGlvbiBsZXZlbCBjb3VsZCBub3QgYmUgc2V0OiAiCi0gICAgCSAgICAgICAgICAgICAgICAgICAgKyBzcWxlLmdldE1lc3NhZ2UoKSk7Ci0gICAgCSAgICAgICAgICAgIH0KLSAgICAJICAgICAgICB9Ci0gICAgCSAgICB9Ci0gICAgCX0KKworICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiA9IG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKTsKKyAgICAgICAgaWYoY29uID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFN0cmluZyB0cmFuSXNvbGF0aW9uID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04pOworICAgICAgICBpZih0cmFuSXNvbGF0aW9uICE9IG51bGwgJiYgdHJhbklzb2xhdGlvbi5lcXVhbHMoIiIpID09IGZhbHNlKSB7CisgICAgICAgICAgICBTdHJpbmcgZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwgPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5HVUFSQU5URUVJU09MQVRJT05MRVZFTCk7CisKKyAgICAgICAgICAgIGlmKGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsICE9IG51bGwgJiYgZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwuZXF1YWxzKCIiKSA9PSBmYWxzZSkgeworICAgICAgICAgICAgICAgIGJvb2xlYW4gZ3VhcmFudGVlID0gKG5ldyBCb29sZWFuKGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsLnRvTG93ZXJDYXNlKCkpKS5ib29sZWFuVmFsdWUoKTsKKworICAgICAgICAgICAgICAgIGlmKGd1YXJhbnRlZSkgeworICAgICAgICAgICAgICAgICAgICBpbnQgdHJhbklzb2xhdGlvbkludCA9IGdldFRyYW5zYWN0aW9uSXNvbGF0aW9uSW50KHRyYW5Jc29sYXRpb24pOworICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYodHJhbklzb2xhdGlvbkludCAhPSBjb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbih0cmFuSXNvbGF0aW9uSW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgeworICAgICAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y190eF9sZXZlbCIpOworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgaXNvbGF0aW9uIGxldmVsIGNvdWxkIG5vdCBiZSBzZXQ6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZih0cmFuSXNvbCAhPSBjb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbih0cmFuSXNvbCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKKyAgICAgICAgICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfdHhfbGV2ZWwiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGlzb2xhdGlvbiBsZXZlbCBjb3VsZCBub3QgYmUgc2V0OiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBzcWxlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBpbnRlZ2VyIGVxdWl2YWxlbnQgb2YgdGhlIHN0cmluZyBzcGVjaWZ5aW5nCiAgICAgICogdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbi4KICAgICAgKgotICAgICAqIEBwYXJhbQl0cmFuSXNvbGF0aW9uCXN0cmluZyBzcGVjaWZ5aW5nIHRoZSBpc29sYXRpb24gbGV2ZWwKLSAgICAgKiBAcmV0dXJuCXRyYW5Jc29sYXRpb25JbnQJdGhlIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IGNvbnN0YW50Ci0gICAgICoJCQkJCWZvciB0aGUgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIGlzb2xhdGlvbi4KKyAgICAgKiBAcGFyYW0gICAgdHJhbklzb2xhdGlvbiAgICBzdHJpbmcgc3BlY2lmeWluZyB0aGUgaXNvbGF0aW9uIGxldmVsCisgICAgICogQHJldHVybiAgICB0cmFuSXNvbGF0aW9uSW50ICAgIHRoZSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBjb25zdGFudAorICAgICAqICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBpc29sYXRpb24uCiAgICAgICovCiAgICAgcHJpdmF0ZSBpbnQgZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb25JbnQoU3RyaW5nIHRyYW5Jc29sYXRpb24pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7Ci0gICAgCWlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgicmVhZC11bmNvbW1pdHRlZCIpKSB7Ci0gICAgCSAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9SRUFEX1VOQ09NTUlUVEVEOwotICAgIAl9IGVsc2UgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJyZWFkLWNvbW1pdHRlZCIpKSB7Ci0gICAgCSAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9SRUFEX0NPTU1JVFRFRDsKLSAgICAJfSBlbHNlIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgicmVwZWF0YWJsZS1yZWFkIikpIHsKLSAgICAJICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1JFUEVBVEFCTEVfUkVBRDsKLSAgICAJfSBlbHNlIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgic2VyaWFsaXphYmxlIikpIHsKLSAgICAJICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1NFUklBTElaQUJMRTsKLSAgICAJfSBlbHNlIHsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiSW52YWxpZCB0cmFuc2FjdGlvbiBpc29sYXRpb247IHRoZSB0cmFuc2FjdGlvbiAiCi0gICAgCSAgICAgICAgKyAiaXNvbGF0aW9uIGxldmVsIGNhbiBiZSBlbXB0eSBvciBhbnkgb2YgdGhlIGZvbGxvd2luZzogIgotICAgIAkgICAgICAgICAgICArICJyZWFkLXVuY29tbWl0dGVkLCByZWFkLWNvbW1pdHRlZCwgcmVwZWF0YWJsZS1yZWFkLCBzZXJpYWxpemFibGUiKTsKLSAgICAJfQorICAgICAgICBpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInJlYWQtdW5jb21taXR0ZWQiKSkgeworICAgICAgICAgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fUkVBRF9VTkNPTU1JVFRFRDsKKyAgICAgICAgfSBlbHNlIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgicmVhZC1jb21taXR0ZWQiKSkgeworICAgICAgICAgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fUkVBRF9DT01NSVRURUQ7CisgICAgICAgIH0gZWxzZSBpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInJlcGVhdGFibGUtcmVhZCIpKSB7CisgICAgICAgICAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9SRVBFQVRBQkxFX1JFQUQ7CisgICAgICAgIH0gZWxzZSBpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInNlcmlhbGl6YWJsZSIpKSB7CisgICAgICAgICAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9TRVJJQUxJWkFCTEU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkludmFsaWQgdHJhbnNhY3Rpb24gaXNvbGF0aW9uOyB0aGUgdHJhbnNhY3Rpb24gIgorICAgICAgICAgICAgICAgICsgImlzb2xhdGlvbiBsZXZlbCBjYW4gYmUgZW1wdHkgb3IgYW55IG9mIHRoZSBmb2xsb3dpbmc6ICIKKyAgICAgICAgICAgICAgICAgICAgKyAicmVhZC11bmNvbW1pdHRlZCwgcmVhZC1jb21taXR0ZWQsIHJlcGVhdGFibGUtcmVhZCwgc2VyaWFsaXphYmxlIik7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGxvZyB3cml0ZXIgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlvdXQJPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICogQHNlZQk8Y29kZT5nZXRMb2dXcml0ZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIG91dCAgICA8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldExvZ1dyaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRMb2dXcml0ZXIoamF2YS5pby5QcmludFdyaXRlciBvdXQpIHsKICAgICAgICAgbG9nV3JpdGVyID0gb3V0OwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgYXNzb2NpYXRlZCA8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IEphdmFCZWFuLgogICAgICAqCi0gICAgICogQHBhcmFtCXJhCTxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgCi0gICAgICoJCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHNlZQk8Y29kZT5nZXRSZXNvdXJjZUFkYXB0ZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHJhICAgIDxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyAgICAgKiAgICAgICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldFJlc291cmNlQWRhcHRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRSZXNvdXJjZUFkYXB0ZXIoamFrYXJ0YS5yZXNvdXJjZS5zcGkuUmVzb3VyY2VBZGFwdGVyIHJhKSB7Ci0gICAgICAgIHRoaXMucmEgPSByYTsgICAKKyAgICAgICAgdGhpcy5yYSA9IHJhOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHVzZXIgbmFtZQogICAgICAqCi0gICAgICogQHBhcmFtCXVzZXIJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB1c2VyICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRVc2VyKFN0cmluZyB1c2VyKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlVTRVJOQU1FLCB1c2VyKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSB1c2VyIG5hbWUKICAgICAgKgotICAgICAqIEByZXR1cm4JdXNlcgorICAgICAqIEByZXR1cm4gICAgdXNlcgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VXNlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlVTRVJOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB1c2VyIG5hbWUKICAgICAgKgotICAgICAqIEBwYXJhbQl1c2VyCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdXNlciAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0dXNlcihTdHJpbmcgdXNlcikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5VU0VSTkFNRSwgdXNlcik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgdXNlciBuYW1lCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXVzZXIKKyAgICAgKiBAcmV0dXJuICAgIHVzZXIKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHVzZXIoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5VU0VSTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgcGFzc3dvcmQKICAgICAgKgotICAgICAqIEBwYXJhbQlwYXNzd2QJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBwYXNzd2QgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFBhc3N3b3JkKFN0cmluZyBwYXNzd2QpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUEFTU1dPUkQsIHBhc3N3ZCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcGFzc3dvcmQKICAgICAgKgotICAgICAqIEByZXR1cm4JcGFzc3dkCisgICAgICogQHJldHVybiAgICBwYXNzd2QKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFBhc3N3b3JkKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUEFTU1dPUkQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHBhc3N3b3JkCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcGFzc3dkCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcGFzc3dkICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRwYXNzd29yZChTdHJpbmcgcGFzc3dkKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBBU1NXT1JELCBwYXNzd2QpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHBhc3N3b3JkCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXBhc3N3ZAorICAgICAqIEByZXR1cm4gICAgcGFzc3dkCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRwYXNzd29yZCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBBU1NXT1JEKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBkYXRhIHNvdXJjZQogICAgICAqCi0gICAgICogQHBhcmFtCWNsYXNzTmFtZQk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGNsYXNzTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Q2xhc3NOYW1lKFN0cmluZyBjbGFzc05hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ0xBU1NOQU1FLCBjbGFzc05hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGRhdGEgc291cmNlCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWNsYXNzTmFtZQorICAgICAqIEByZXR1cm4gICAgY2xhc3NOYW1lCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRDbGFzc05hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DTEFTU05BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGRhdGEgc291cmNlCiAgICAgICoKLSAgICAgKiBAcGFyYW0JY2xhc3NOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgY2xhc3NOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRjbGFzc05hbWUoU3RyaW5nIGNsYXNzTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5DTEFTU05BTUUsIGNsYXNzTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgZGF0YSBzb3VyY2UKICAgICAgKgotICAgICAqIEByZXR1cm4JY2xhc3NOYW1lCisgICAgICogQHJldHVybiAgICBjbGFzc05hbWUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGNsYXNzTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNMQVNTTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyBpZiBjb25uZWN0aW9uIHZhbGlkYXRpb24gaXMgcmVxdWlyZWQgb3Igbm90CiAgICAgICoKLSAgICAgKiBAcGFyYW0JY29uVmxkUmVxCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgY29uVmxkUmVxICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRDb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkKFN0cmluZyBjb25WbGRSZXEpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ09OTkVDVElPTlZBTElEQVRJT05SRVFVSVJFRCwgY29uVmxkUmVxKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIGlmIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiBpcyByZXF1aXJlZCBvciBub3QKICAgICAgKgotICAgICAqIEByZXR1cm4JY29ubmVjdGlvbiB2YWxpZGF0aW9uIHJlcXVpcmVtZW50CisgICAgICogQHJldHVybiAgICBjb25uZWN0aW9uIHZhbGlkYXRpb24gcmVxdWlyZW1lbnQKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldENvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVEKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIGlmIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiBpcyByZXF1aXJlZCBvciBub3QKICAgICAgKgotICAgICAqIEBwYXJhbQljb25WbGRSZXEJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBjb25WbGRSZXEgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGNvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQoU3RyaW5nIGNvblZsZFJlcSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5DT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVELCBjb25WbGRSZXEpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgaWYgY29ubmVjdGlvbiB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkIG9yIG5vdAogICAgICAqCi0gICAgICogQHJldHVybgljb25uZWN0aW9uIHZhbGlkYXRpb24gcmVxdWlyZW1lbnQKKyAgICAgKiBAcmV0dXJuICAgIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiByZXF1aXJlbWVudAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Y29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHZhbGlkYXRpb24gbWV0aG9kIHJlcXVpcmVkCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdmFsaWRhdGlvbk1ldGhvZAk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHZhbGlkYXRpb25NZXRob2QgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFZhbGlkYXRpb25NZXRob2QoU3RyaW5nIHZhbGlkYXRpb25NZXRob2QpIHsKICAgICAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05NRVRIT0QsIHZhbGlkYXRpb25NZXRob2QpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiBtZXRob2QgdHlwZQogICAgICAqCi0gICAgICogQHJldHVybgl2YWxpZGF0aW9uIG1ldGhvZAorICAgICAqIEByZXR1cm4gICAgdmFsaWRhdGlvbiBtZXRob2QKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFZhbGlkYXRpb25NZXRob2QoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OTUVUSE9EKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB2YWxpZGF0aW9uIG1ldGhvZCByZXF1aXJlZAogICAgICAqCi0gICAgICogQHBhcmFtCXZhbGlkYXRpb25NZXRob2QJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB2YWxpZGF0aW9uTWV0aG9kICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXR2YWxpZGF0aW9uTWV0aG9kKFN0cmluZyB2YWxpZGF0aW9uTWV0aG9kKSB7CiAgICAgICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OTUVUSE9ELCB2YWxpZGF0aW9uTWV0aG9kKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSBjb25uZWN0aW9uIHZhbGlkYXRpb24gbWV0aG9kIHR5cGUKICAgICAgKgotICAgICAqIEByZXR1cm4JdmFsaWRhdGlvbiBtZXRob2QKKyAgICAgKiBAcmV0dXJuICAgIHZhbGlkYXRpb24gbWV0aG9kCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXR2YWxpZGF0aW9uTWV0aG9kKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTk1FVEhPRCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdGFibGUgY2hlY2tlZCBmb3IgZHVyaW5nIHZhbGlkYXRpb24KICAgICAgKgotICAgICAqIEBwYXJhbQl0YWJsZQk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHRhYmxlICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRWYWxpZGF0aW9uVGFibGVOYW1lKFN0cmluZyB0YWJsZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OVEFCTEVOQU1FLCB0YWJsZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdGFibGUgY2hlY2tlZCBmb3IgZHVyaW5nIHZhbGlkYXRpb24KICAgICAgKgotICAgICAqIEByZXR1cm4JdGFibGUKKyAgICAgKiBAcmV0dXJuICAgIHRhYmxlCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRWYWxpZGF0aW9uVGFibGVOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTlRBQkxFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdGFibGUgY2hlY2tlZCBmb3IgZHVyaW5nIHZhbGlkYXRpb24KICAgICAgKgotICAgICAqIEBwYXJhbQl0YWJsZQk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHRhYmxlICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXR2YWxpZGF0aW9uVGFibGVOYW1lKFN0cmluZyB0YWJsZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OVEFCTEVOQU1FLCB0YWJsZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdGFibGUgY2hlY2tlZCBmb3IgZHVyaW5nIHZhbGlkYXRpb24KICAgICAgKgotICAgICAqIEByZXR1cm4JdGFibGUKKyAgICAgKiBAcmV0dXJuICAgIHRhYmxlCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXR2YWxpZGF0aW9uVGFibGVOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTlRBQkxFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdHJuSXNvbGF0aW9uCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdHJuSXNvbGF0aW9uICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRUcmFuc2FjdGlvbklzb2xhdGlvbihTdHJpbmcgdHJuSXNvbGF0aW9uKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OLCB0cm5Jc29sYXRpb24pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqCi0gICAgICogQHJldHVybgl0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKKyAgICAgKiBAcmV0dXJuICAgIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdHJuSXNvbGF0aW9uCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdHJuSXNvbGF0aW9uICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXR0cmFuc2FjdGlvbklzb2xhdGlvbihTdHJpbmcgdHJuSXNvbGF0aW9uKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OLCB0cm5Jc29sYXRpb24pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqCi0gICAgICogQHJldHVybgl0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKKyAgICAgKiBAcmV0dXJuICAgIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0dHJhbnNhY3Rpb25Jc29sYXRpb24oKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyBpZiB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsIGlzIHRvIGJlIGd1YXJhbnRlZWQKICAgICAgKgotICAgICAqIEBwYXJhbQlndWFyYW50ZWVJc29sYXRpb24JPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBndWFyYW50ZWVJc29sYXRpb24gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldEd1YXJhbnRlZUlzb2xhdGlvbkxldmVsKFN0cmluZyBndWFyYW50ZWVJc29sYXRpb24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwsIGd1YXJhbnRlZUlzb2xhdGlvbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWlzb2xhdGlvbiBsZXZlbCBndWFyYW50ZWUKKyAgICAgKiBAcmV0dXJuICAgIGlzb2xhdGlvbiBsZXZlbCBndWFyYW50ZWUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldEd1YXJhbnRlZUlzb2xhdGlvbkxldmVsKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgaWYgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbCBpcyB0byBiZSBndWFyYW50ZWVkCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZ3VhcmFudGVlSXNvbGF0aW9uCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZ3VhcmFudGVlSXNvbGF0aW9uICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRndWFyYW50ZWVJc29sYXRpb25MZXZlbChTdHJpbmcgZ3VhcmFudGVlSXNvbGF0aW9uKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkdVQVJBTlRFRUlTT0xBVElPTkxFVkVMLCBndWFyYW50ZWVJc29sYXRpb24pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqCi0gICAgICogQHJldHVybglpc29sYXRpb24gbGV2ZWwgZ3VhcmFudGVlCisgICAgICogQHJldHVybiAgICBpc29sYXRpb24gbGV2ZWwgZ3VhcmFudGVlCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRndWFyYW50ZWVJc29sYXRpb25MZXZlbCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkdVQVJBTlRFRUlTT0xBVElPTkxFVkVMKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L1Jlc291cmNlQWRhcHRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvUmVzb3VyY2VBZGFwdGVyLmphdmEKaW5kZXggNTU1YmU3Ny4uZWE1NDA3NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvUmVzb3VyY2VBZGFwdGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvUmVzb3VyY2VBZGFwdGVyLmphdmEKQEAgLTI2LDggKzI2LDggQEAKIC8qKgogICogPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA4LzA1Ci0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wOC8wNQorICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogcHVibGljIGNsYXNzIFJlc291cmNlQWRhcHRlciBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLlJlc291cmNlQWRhcHRlciB7CiAKQEAgLTM3LDUyICszNyw1MiBAQAogICAgICAqIEVtcHR5IG1ldGhvZCBpbXBsZW1lbnRhdGlvbiBmb3IgZW5kcG9pbnRBY3RpdmF0aW9uCiAgICAgICogd2hpY2gganVzdCB0aHJvd3MgPGNvZGU+Tm90U3VwcG9ydGVkRXhjZXB0aW9uPC9jb2RlPgogICAgICAqCi0gICAgICogQHBhcmFtCW1lZgk8Y29kZT5NZXNzYWdlRW5kcG9pbnRGYWN0b3J5PC9jb2RlPgotICAgICAqIEBwYXJhbQlhcwk8Y29kZT5BY3RpdmF0aW9uU3BlYzwvY29kZT4KLSAgICAgKiBAdGhyb3dzCTxjb2RlPk5vdFN1cHBvcnRlZEV4Y2VwdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbWVmICAgIDxjb2RlPk1lc3NhZ2VFbmRwb2ludEZhY3Rvcnk8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGFzICAgIDxjb2RlPkFjdGl2YXRpb25TcGVjPC9jb2RlPgorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+Tm90U3VwcG9ydGVkRXhjZXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVuZHBvaW50QWN0aXZhdGlvbihNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IG1lZiwgQWN0aXZhdGlvblNwZWMgYXMpIHRocm93cyBOb3RTdXBwb3J0ZWRFeGNlcHRpb24gewogICAgICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJUaGlzIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIEpEQkMgY29ubmVjdG9yIik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogRW1wdHkgbWV0aG9kIGltcGxlbWVudGF0aW9uIGZvciBlbmRwb2ludERlYWN0aXZhdGlvbgogICAgICAqCi0gICAgICogQHBhcmFtCW1lZgk8Y29kZT5NZXNzYWdlRW5kcG9pbnRGYWN0b3J5PC9jb2RlPgotICAgICAqIEBwYXJhbQlhcwk8Y29kZT5BY3RpdmF0aW9uU3BlYzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbWVmICAgIDxjb2RlPk1lc3NhZ2VFbmRwb2ludEZhY3Rvcnk8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGFzICAgIDxjb2RlPkFjdGl2YXRpb25TcGVjPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVuZHBvaW50RGVhY3RpdmF0aW9uKE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgbWVmLCBBY3RpdmF0aW9uU3BlYyBhcykgewotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEVtcHR5IG1ldGhvZCBpbXBsZW1lbnRhdGlvbiBmb3IgZ2V0WEFSZXNvdXJjZXMKICAgICAgKiB3aGljaCBqdXN0IHRocm93cyA8Y29kZT5Ob3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+CiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3BlY3MJPGNvZGU+QWN0aXZhdGlvblNwZWM8L2NvZGU+IGFycmF5Ci0gICAgICogQHRocm93cwk8Y29kZT5Ob3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+CisgICAgICogQHBhcmFtICAgIHNwZWNzICAgIDxjb2RlPkFjdGl2YXRpb25TcGVjPC9jb2RlPiBhcnJheQorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+Tm90U3VwcG9ydGVkRXhjZXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBYQVJlc291cmNlW10gZ2V0WEFSZXNvdXJjZXMoQWN0aXZhdGlvblNwZWNbXSBzcGVjcykgdGhyb3dzIE5vdFN1cHBvcnRlZEV4Y2VwdGlvbiB7CiAgICAgICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIlRoaXMgbWV0aG9kIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgSkRCQyBjb25uZWN0b3IiKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBFbXB0eSBpbXBsZW1lbnRhdGlvbiBvZiBzdGFydCBtZXRob2QKICAgICAgKgotICAgICAqIEBwYXJhbQljdHgJPGNvZGU+Qm9vdHN0cmFwQ29udGV4dDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgY3R4ICAgIDxjb2RlPkJvb3RzdHJhcENvbnRleHQ8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc3RhcnQoQm9vdHN0cmFwQ29udGV4dCBjdHgpIHRocm93cyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzb3VyY2UgQWRhcHRlciBpcyBzdGFydGluZyB3aXRoIGNvbmZpZ3VyYXRpb24gOiIgKyByYVByb3ApOwogICAgICAgICBpZiAocmFQcm9wID09IG51bGwgfHwgIXJhUHJvcC5lcXVhbHMoIlZBTElEIikpIHsKLQkgICAgdGhyb3cgbmV3IFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uKCJSZXNvdXJjZSBhZGFwdGVyIGNhbm5vdCBzdGFydC4gSXQgaXMgY29uZmlndXJlZCBhcyA6ICIgKyByYVByb3ApOwotCX0gCisgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbigiUmVzb3VyY2UgYWRhcHRlciBjYW5ub3Qgc3RhcnQuIEl0IGlzIGNvbmZpZ3VyZWQgYXMgOiAiICsgcmFQcm9wKTsKICAgICB9Ci0gICAgCisgICAgfQorCiAgICAgLyoqCiAgICAgICogRW1wdHkgaW1wbGVtZW50YXRpb24gb2Ygc3RvcCBtZXRob2QKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzdG9wKCkgewotICAgIAorCiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0UkFQcm9wZXJ0eShTdHJpbmcgcykgewpAQCAtOTIsNSArOTIsNSBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0UkFQcm9wZXJ0eSgpIHsKICAgICAgICAgcmV0dXJuIHJhUHJvcDsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L2J1aWxkLnhtbAppbmRleCA1ZTE0ZDQ0Li5mZjBmMDJiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvYnVpbGQueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxwcm9qZWN0IG5hbWU9ImpkYmNfY29ubmVjdG9yIiBiYXNlZGlyPSIke2dqYy5ob21lfSIgZGVmYXVsdD0iYnVpbGQiPgogICA8cHJvcGVydHkgbmFtZT0icGtnLmRpciIgdmFsdWU9ImNvbS9zdW4vZ2pjL3NwaSIvPgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImNsZWFuIj4KICAgICA8YW50IGFudGZpbGU9ImJ1aWxkLnhtbCIgZGlyPSIke2dqYy5ob21lfS9iaW4iIHRhcmdldD0iY2xlYW4iLz4KICAgPC90YXJnZXQ+CkBAIC0yOSw1NSArMjksNTUgQEAKICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlMTQiPgotICAgIAkKLSAgICAJPG1rZGlyIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ii8+Ci0gICAgCQotCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L2pkYmMuamFyIiBiYXNlZGlyPSIke2NsYXNzLmRpcn0iCisKKyAgICAgICAgPG1rZGlyIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ii8+CisKKyAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9qZGJjLmphciIgYmFzZWRpcj0iJHtjbGFzcy5kaXJ9IgogICAgICAgICBpbmNsdWRlcz0iJHtwa2cuZGlyfS8qKi8qLCBjb20vc3VuL2dqYy91dGlsLyoqLyosIGNvbS9zdW4vZ2pjL2NvbW1vbi8qKi8qIiBleGNsdWRlcz0iY29tL3N1bi9namMvY2NpLyoqLyosY29tL3N1bi9namMvc3BpLzEuNC8qKi8qIi8+Ci0gICAgICAgIAorCiAgICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fY3AucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgotICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS1jcC54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgkKKyAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEtY3AueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4KICAgICAgICAgPC9jb3B5PgotICAgCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fY3AucmFyIiB1cGRhdGU9InllcyI+Ci0gICAJCTxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KLSAgIAkJCTxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgotICAgCQk8L21ldGFpbmY+Ci0gICAJPC9qYXI+Ci0gICAJCi0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX194YS5yYXIiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIgaW5jbHVkZXM9ImpkYmMuamFyIi8+Ci0gICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLXhhLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CQorICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fY3AucmFyIiB1cGRhdGU9InllcyI+CisgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KKyAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgorICAgICAgICAgICA8L21ldGFpbmY+CisgICAgICAgPC9qYXI+CisKKyAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX3hhLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KKyAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEteGEueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4KICAgICAgICAgPC9jb3B5PgotICAgCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19feGEucmFyIiB1cGRhdGU9InllcyI+Ci0gICAJCTxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KLSAgIAkJCTxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgotICAgCQk8L21ldGFpbmY+Ci0gICAJPC9qYXI+Ci0gICAJCi0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kbS5yYXIiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIgaW5jbHVkZXM9ImpkYmMuamFyIi8+Ci0gICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLWRtLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CQorICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19feGEucmFyIiB1cGRhdGU9InllcyI+CisgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KKyAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgorICAgICAgICAgICA8L21ldGFpbmY+CisgICAgICAgPC9qYXI+CisKKyAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RtLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KKyAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEtZG0ueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4KICAgICAgICAgPC9jb3B5PgotICAgCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZG0ucmFyIiB1cGRhdGU9InllcyI+Ci0gICAJCTxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KLSAgIAkJCTxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgotICAgCQk8L21ldGFpbmY+Ci0gICAJPC9qYXI+Ci0gICAJCi0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kcy5yYXIiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIgaW5jbHVkZXM9ImpkYmMuamFyIi8+Ci0gICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLWRzLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CQorICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZG0ucmFyIiB1cGRhdGU9InllcyI+CisgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KKyAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgorICAgICAgICAgICA8L21ldGFpbmY+CisgICAgICAgPC9qYXI+CisKKyAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RzLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KKyAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEtZHMueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4KICAgICAgICAgPC9jb3B5PgotICAgCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZHMucmFyIiB1cGRhdGU9InllcyI+Ci0gICAJCTxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KLSAgIAkJCTxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgotICAgCQk8L21ldGFpbmY+Ci0gICAJPC9qYXI+Ci0gICAJCi0gICAJPGRlbGV0ZSBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3QvY29tIi8+Ci0gICAJPGRlbGV0ZSBmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvamRiYy5qYXIiLz4KLSAgIAk8ZGVsZXRlIGZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiLz4KLSAgIAkKKyAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RzLnJhciIgdXBkYXRlPSJ5ZXMiPgorICAgICAgICAgICA8bWV0YWluZiBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSI+CisgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KKyAgICAgICAgICAgPC9tZXRhaW5mPgorICAgICAgIDwvamFyPgorCisgICAgICAgPGRlbGV0ZSBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3QvY29tIi8+CisgICAgICAgPGRlbGV0ZSBmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvamRiYy5qYXIiLz4KKyAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiLz4KKwogICA8L3RhcmdldD4KIAogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkMTQiIGRlcGVuZHM9ImNvbXBpbGUxNCwgcGFja2FnZTE0Ii8+CiAgICAgPHRhcmdldCBuYW1lPSJidWlsZDEzIi8+Ci0JPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iYnVpbGQxNCwgYnVpbGQxMyIvPgorICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImJ1aWxkMTQsIGJ1aWxkMTMiLz4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L3JhLWRzLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L3JhLWRzLnhtbAppbmRleCA3OWZiOTMzLi5hN2QzNWJlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9yYS1kcy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvcmEtZHMueG1sCkBAIC0yMiw2OSArMjIsNjkgQEAKICAgICAgICAgICAgdmVyc2lvbj0iMS41Ij4KIAogICAgIDwhLS0gVGhlcmUgY2FuIGJlIGFueSBudW1iZXIgb2YgImRlc2NyaXB0aW9uIiBlbGVtZW50cyBpbmNsdWRpbmcgMCAtLT4KLSAgICA8IS0tIFRoaXMgZmllbGQgY2FuIGJlIG9wdGlvbmFsbHkgdXNlZCBieSB0aGUgZHJpdmVyIHZlbmRvciB0byBwcm92aWRlIGEgCisgICAgPCEtLSBUaGlzIGZpZWxkIGNhbiBiZSBvcHRpb25hbGx5IHVzZWQgYnkgdGhlIGRyaXZlciB2ZW5kb3IgdG8gcHJvdmlkZSBhCiAgICAgICAgICBkZXNjcmlwdGlvbiBmb3IgdGhlIHJlc291cmNlIGFkYXB0ZXIuCiAgICAgLS0+CiAgICAgPGRlc2NyaXB0aW9uPlJlc291cmNlIGFkYXB0ZXIgd3JhcHBpbmcgRGF0YXNvdXJjZSBpbXBsZW1lbnRhdGlvbiBvZiBkcml2ZXI8L2Rlc2NyaXB0aW9uPgotICAgIAorCiAgICAgPCEtLSBUaGVyZSBjYW4gYmUgYW55IG51bWJlciBvZiAiZGlzcGxheS1uYW1lIiBlbGVtZW50cyBpbmNsdWRpbmcgMCAtLT4KLSAgICA8IS0tIFRoZSBmaWVsZCBjYW4gYmUgb3B0aW9uYWxseSB1c2VkIGJ5IHRoZSBkcml2ZXIgdmVuZG9yIHRvIHByb3ZpZGUgYSBuYW1lIHRoYXQgCisgICAgPCEtLSBUaGUgZmllbGQgY2FuIGJlIG9wdGlvbmFsbHkgdXNlZCBieSB0aGUgZHJpdmVyIHZlbmRvciB0byBwcm92aWRlIGEgbmFtZSB0aGF0CiAgICAgICAgICBpcyBpbnRlbmRlZCB0byBiZSBkaXNwbGF5ZWQgYnkgdG9vbHMuCiAgICAgLS0+CiAgICAgPGRpc3BsYXktbmFtZT5EYXRhU291cmNlIFJlc291cmNlIEFkYXB0ZXI8L2Rpc3BsYXktbmFtZT4KLSAgICAKKwogICAgIDwhLS0gVGhlcmUgY2FuIGJlIGFueSBudW1iZXIgb2YgImljb24iIGVsZW1lbnRzIGluY2x1ZGluZyAwIC0tPgogICAgIDwhLS0gVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlLgogICAgICAgICA8aWNvbj4KLSAgICAgICAgICAgIFRoaXMgInNtYWxsLWljb24iIGVsZW1lbnQgY2FuIG9jY3VyIGF0bW9zdCBvbmNlLiBUaGlzIHNob3VsZCBzcGVjaWZ5IHRoZSAKLSAgICAgICAgICAgIGFic29sdXRlIG9yIHRoZSByZWxhdGl2ZSBwYXRoIG5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcgYSBzbWFsbCAoMTYgeCAxNikgCisgICAgICAgICAgICBUaGlzICJzbWFsbC1pY29uIiBlbGVtZW50IGNhbiBvY2N1ciBhdG1vc3Qgb25jZS4gVGhpcyBzaG91bGQgc3BlY2lmeSB0aGUKKyAgICAgICAgICAgIGFic29sdXRlIG9yIHRoZSByZWxhdGl2ZSBwYXRoIG5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcgYSBzbWFsbCAoMTYgeCAxNikKICAgICAgICAgICAgIGljb24gLSBKUEVHIG9yIEdJRiBpbWFnZS4gVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlLgogICAgICAgICAgICAgPHNtYWxsLWljb24+c21hbGxpY29uLmpwZzwvc21hbGwtaWNvbj4KLSAgICAgICAgCi0gICAgICAgICAgICBUaGlzICJsYXJnZS1pY29uIiBlbGVtZW50IGNhbiBvY2N1ciBhdG1vc3Qgb25jZS4gVGhpcyBzaG91bGQgc3BlY2lmeSB0aGUgCi0gICAgICAgICAgICBhYnNvbHV0ZSBvciB0aGUgcmVsYXRpdmUgcGF0aCBuYW1lIG9mIGEgZmlsZSBjb250YWluaW5nIGEgc21hbGwgKDMyIHggMzIpIAorCisgICAgICAgICAgICBUaGlzICJsYXJnZS1pY29uIiBlbGVtZW50IGNhbiBvY2N1ciBhdG1vc3Qgb25jZS4gVGhpcyBzaG91bGQgc3BlY2lmeSB0aGUKKyAgICAgICAgICAgIGFic29sdXRlIG9yIHRoZSByZWxhdGl2ZSBwYXRoIG5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcgYSBzbWFsbCAoMzIgeCAzMikKICAgICAgICAgICAgIGljb24gLSBKUEVHIG9yIEdJRiBpbWFnZS4gVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlLgotICAgICAgICAgICAgPGxhcmdlLWljb24+bGFyZ2VpY29uLmpwZzwvbGFyZ2UtaWNvbj4gICAKKyAgICAgICAgICAgIDxsYXJnZS1pY29uPmxhcmdlaWNvbi5qcGc8L2xhcmdlLWljb24+CiAgICAgICAgIDwvaWNvbj4KICAgICAtLT4KICAgICA8aWNvbj4KICAgICAgICAgPHNtYWxsLWljb24+PC9zbWFsbC1pY29uPgotICAgICAgICA8bGFyZ2UtaWNvbj48L2xhcmdlLWljb24+ICAgCisgICAgICAgIDxsYXJnZS1pY29uPjwvbGFyZ2UtaWNvbj4KICAgICA8L2ljb24+Ci0gICAgCisKICAgICA8IS0tIFRoZSAidmVuZG9yLW5hbWUiIGVsZW1lbnQgc2hvdWxkIG9jY3VyIGV4YWN0bHkgb25jZS4gLS0+CiAgICAgPCEtLSBUaGlzIHNob3VsZCBzcGVjaWZ5IHRoZSBuYW1lIG9mIHRoZSBkcml2ZXIgdmVuZG9yLiBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUuCiAgICAgICAgIDx2ZW5kb3ItbmFtZT5YWVogSU5DLjwvdmVuZG9yLW5hbWU+CiAgICAgLS0+CiAgICAgPHZlbmRvci1uYW1lPlN1biBNaWNyb3N5c3RlbXM8L3ZlbmRvci1uYW1lPgotICAgIAorCiAgICAgPCEtLSBUaGUgImVpcy10eXBlIiBlbGVtZW50IHNob3VsZCBvY2N1ciBleGFjdGx5IG9uY2UuIC0tPgotICAgIDwhLS0gVGhpcyBzaG91bGQgc3BlY2lmeSB0aGUgZGF0YWJhc2UsIGZvciBleGFtcGxlIHRoZSBwcm9kdWN0IG5hbWUgb2YgCisgICAgPCEtLSBUaGlzIHNob3VsZCBzcGVjaWZ5IHRoZSBkYXRhYmFzZSwgZm9yIGV4YW1wbGUgdGhlIHByb2R1Y3QgbmFtZSBvZgogICAgICAgICAgdGhlIGRhdGFiYXNlIGluZGVwZW5kZW50IG9mIGFueSB2ZXJzaW9uIGluZm9ybWF0aW9uLiBUaGUgZm9sbG93aW5nCiAgICAgICAgICBpcyBhbiBleGFtcGxlLgogICAgICAgICA8ZWlzLXR5cGU+WFlaPC9laXMtdHlwZT4KICAgICAtLT4KICAgICA8ZWlzLXR5cGU+RGF0YWJhc2U8L2Vpcy10eXBlPgotICAgIAorCiAgICAgPCEtLSBUaGUgInJlc291cmNlYWRhcHRlci12ZXJzaW9uIiBlbGVtZW50IHNob3VsZCBvY2N1ciBleGFjdGx5IG9uY2UuIC0tPgotICAgIDwhLS0gVGhpcyBzcGVjaWZpZXMgYSBzdHJpbmcgYmFzZWQgdmVyc2lvbiBvZiB0aGUgcmVzb3VyY2UgYWRhcHRlciBmcm9tIAorICAgIDwhLS0gVGhpcyBzcGVjaWZpZXMgYSBzdHJpbmcgYmFzZWQgdmVyc2lvbiBvZiB0aGUgcmVzb3VyY2UgYWRhcHRlciBmcm9tCiAgICAgICAgICB0aGUgZHJpdmVyIHZlbmRvci4gVGhlIGRlZmF1bHQgaXMgYmVpbmcgc2V0IGFzIDEuMC4gVGhlIGRyaXZlcgogICAgICAgICAgdmVuZG9yIGNhbiBjaGFuZ2UgaXQgYXMgcmVxdWlyZWQuCiAgICAgLS0+CiAgICAgPHJlc291cmNlYWRhcHRlci12ZXJzaW9uPjEuMDwvcmVzb3VyY2VhZGFwdGVyLXZlcnNpb24+Ci0gICAgCisKICAgICA8IS0tIFRoaXMgImxpY2Vuc2UiIGVsZW1lbnQgY2FuIG9jY3VyIGF0bW9zdCBvbmNlIC0tPgogICAgIDwhLS0gVGhpcyBzcGVjaWZpZXMgbGljZW5zaW5nIHJlcXVpcmVtZW50cyBmb3IgdGhlIHJlc291cmNlIGFkYXB0ZXIgbW9kdWxlLgogICAgICAgICAgVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlLgogICAgICAgICA8bGljZW5zZT4KICAgICAgICAgICAgIFRoZXJlIGNhbiBiZSBhbnkgbnVtYmVyIG9mICJkZXNjcmlwdGlvbiIgZWxlbWVudHMgaW5jbHVkaW5nIDAuCiAgICAgICAgICAgICA8ZGVzY3JpcHRpb24+Ci0gICAgICAgICAgICAgICAgVGhpcyBmaWVsZCBjYW4gYmUgb3B0aW9uYWxseSB1c2VkIGJ5IHRoZSBkcml2ZXIgdmVuZG9yIHRvIAotICAgICAgICAgICAgICAgIHByb3ZpZGUgYSBkZXNjcmlwdGlvbiBmb3IgdGhlIGxpY2Vuc2luZyByZXF1aXJlbWVudHMgb2YgdGhlIAotICAgICAgICAgICAgICAgIHJlc291cmNlIGFkYXB0ZXIgbGlrZSBkdXJhdGlvbiBvZiBsaWNlbnNlLCBudW1iZXJvZiBjb25uZWN0aW9uIAorICAgICAgICAgICAgICAgIFRoaXMgZmllbGQgY2FuIGJlIG9wdGlvbmFsbHkgdXNlZCBieSB0aGUgZHJpdmVyIHZlbmRvciB0bworICAgICAgICAgICAgICAgIHByb3ZpZGUgYSBkZXNjcmlwdGlvbiBmb3IgdGhlIGxpY2Vuc2luZyByZXF1aXJlbWVudHMgb2YgdGhlCisgICAgICAgICAgICAgICAgcmVzb3VyY2UgYWRhcHRlciBsaWtlIGR1cmF0aW9uIG9mIGxpY2Vuc2UsIG51bWJlcm9mIGNvbm5lY3Rpb24KICAgICAgICAgICAgICAgICByZXN0cmljdGlvbnMuCiAgICAgICAgICAgICA8L2Rlc2NyaXB0aW9uPgotICAgICAgICAKKwogICAgICAgICAgICAgVGhpcyBzcGVjaWZpZXMgd2hldGhlciBhIGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gZGVwbG95IGFuZCB1c2UgdGhlIHJlc291cmNlIGFkYXB0ZXIuCiAgICAgICAgICAgICBEZWZhdWx0IGlzIGZhbHNlLgogICAgICAgICAgICAgPGxpY2Vuc2UtcmVxdWlyZWQ+ZmFsc2U8L2xpY2Vuc2UtcmVxdWlyZWQ+CkBAIC05MywyNCArOTMsMjQgQEAKICAgICA8bGljZW5zZT4KICAgICAgICAgPGxpY2Vuc2UtcmVxdWlyZWQ+ZmFsc2U8L2xpY2Vuc2UtcmVxdWlyZWQ+CiAgICAgPC9saWNlbnNlPgotICAgIAorCiAgICAgPHJlc291cmNlYWRhcHRlcj4KLSAgICAgICAgCi0gICAgICAgIDwhLS0gCi0gICAgICAgICAgICBUaGUgImNvbmZpZy1wcm9wZXJ0eSIgZWxlbWVudHMgY2FuIGhhdmUgemVybyBvciBtb3JlICJkZXNjcmlwdGlvbiIgCisKKyAgICAgICAgPCEtLQorICAgICAgICAgICAgVGhlICJjb25maWctcHJvcGVydHkiIGVsZW1lbnRzIGNhbiBoYXZlIHplcm8gb3IgbW9yZSAiZGVzY3JpcHRpb24iCiAgICAgICAgICAgICBlbGVtZW50cy4gVGhlICJkZXNjcmlwdGlvbiIgZWxlbWVudHMgYXJlIG5vdCBiZWluZyBpbmNsdWRlZAogICAgICAgICAgICAgaW4gdGhlICJjb25maWctcHJvcGVydHkiIGVsZW1lbnRzIGJlbG93LiBUaGUgZHJpdmVyIHZlbmRvciBjYW4KICAgICAgICAgICAgIGFkZCB0aGVtIGFzIHJlcXVpcmVkLgogICAgICAgICAtLT4KLSAgICAgICAgCisKICAgICAgICAgPHJlc291cmNlYWRhcHRlci1jbGFzcz5jb20uc3VuLmpkYmNyYS5zcGkuUmVzb3VyY2VBZGFwdGVyPC9yZXNvdXJjZWFkYXB0ZXItY2xhc3M+Ci0gICAgICAgIAorCiAgICAgICAgIDxvdXRib3VuZC1yZXNvdXJjZWFkYXB0ZXI+Ci0gICAgICAgIAorCiAgICAgICAgICAgICA8Y29ubmVjdGlvbi1kZWZpbml0aW9uPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPG1hbmFnZWRjb25uZWN0aW9uZmFjdG9yeS1jbGFzcz5jb20uc3VuLmpkYmNyYS5zcGkuRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L21hbmFnZWRjb25uZWN0aW9uZmFjdG9yeS1jbGFzcz4KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIDwhLS0gVGhlcmUgY2FuIGJlIGFueSBudW1iZXIgb2YgdGhlc2UgZWxlbWVudHMgaW5jbHVkaW5nIDAgLS0+CiAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlNlcnZlck5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgpAQCAtMTIyLDg2ICsxMjIsODYgQEAKICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjkwOTI8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VXNlcjwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT5EQlVTRVI8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+UGFzc3dvcmQ8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+REJQQVNTV09SRDwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5EYXRhYmFzZU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+amRiYzpwb2ludGJhc2U6c2VydmVyOi8vbG9jYWxob3N0OjkwOTIvc3FlLXNhbXBsZXMsbmV3PC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4gICAgCisgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkRhdGFTb3VyY2VOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5EZXNjcmlwdGlvbjwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT5PcmFjbGUgdGhpbiBkcml2ZXIgRGF0YXNvdXJjZTwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+TmV0d29ya1Byb3RvY29sPC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5Sb2xlTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+TG9naW5UaW1lT3V0PC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjA8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+RHJpdmVyUHJvcGVydGllczwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+RGVsaW1pdGVyPC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPiM8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+Q2xhc3NOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPmNvbS5wb2ludGJhc2UuamRiYy5qZGJjRGF0YVNvdXJjZTwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgCQk8Y29uZmlnLXByb3BlcnR5PiAgICAKLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkNvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQ8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+ZmFsc2U8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLSAgICAgICAgCTwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAJPGNvbmZpZy1wcm9wZXJ0eT4gICAgCi0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktbmFtZT5WYWxpZGF0aW9uTWV0aG9kPC9jb25maWctcHJvcGVydHktbmFtZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotICAgICAgICAJPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgIAk8Y29uZmlnLXByb3BlcnR5PiAgICAKLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlZhbGlkYXRpb25UYWJsZU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0gICAgICAgIAk8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgCTxjb25maWctcHJvcGVydHk+ICAgIAotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VHJhbnNhY3Rpb25Jc29sYXRpb248L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0gICAgICAgIAk8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgCTxjb25maWctcHJvcGVydHk+ICAgIAotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+R3VhcmFudGVlSXNvbGF0aW9uTGV2ZWw8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0gICAgICAgIAk8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkNvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQ8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+ZmFsc2U8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlZhbGlkYXRpb25NZXRob2Q8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5WYWxpZGF0aW9uVGFibGVOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VHJhbnNhY3Rpb25Jc29sYXRpb248L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5HdWFyYW50ZWVJc29sYXRpb25MZXZlbDwvY29uZmlnLXByb3BlcnR5LW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgogPCEtLSBwcm9wZXJ0aWVzIHRvIHRlc3Qgc2V0dGluZyBvZiBhIG5vbi1TdHJpbmcgdmFsdWUgd2l0aCBvdmVycmlkZGVuIHNldHRlcnMgLS0+CiAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPk5vblN0cmluZ1dpdGhOb092ZXJyaWRkZW5TZXR0ZXI8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgpAQCAtMjE1LDU0ICsyMTUsNTQgQEAKICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KIAogICAgICAgICAgICAgICAgIDxjb25uZWN0aW9uZmFjdG9yeS1pbnRlcmZhY2U+amF2YXguc3FsLkRhdGFTb3VyY2U8L2Nvbm5lY3Rpb25mYWN0b3J5LWludGVyZmFjZT4KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIDxjb25uZWN0aW9uZmFjdG9yeS1pbXBsLWNsYXNzPmNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlPC9jb25uZWN0aW9uZmFjdG9yeS1pbXBsLWNsYXNzPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPGNvbm5lY3Rpb24taW50ZXJmYWNlPmphdmEuc3FsLkNvbm5lY3Rpb248L2Nvbm5lY3Rpb24taW50ZXJmYWNlPgotICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIDxjb25uZWN0aW9uLWltcGwtY2xhc3M+Y29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25Ib2xkZXI8L2Nvbm5lY3Rpb24taW1wbC1jbGFzcz4KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgPC9jb25uZWN0aW9uLWRlZmluaXRpb24+Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgPHRyYW5zYWN0aW9uLXN1cHBvcnQ+TG9jYWxUcmFuc2FjdGlvbjwvdHJhbnNhY3Rpb24tc3VwcG9ydD4KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICA8YXV0aGVudGljYXRpb24tbWVjaGFuaXNtPgogICAgICAgICAgICAgICAgIDwhLS0gVGhlcmUgY2FuIGJlIGFueSBudW1iZXIgb2YgImRlc2NyaXB0aW9uIiBlbGVtZW50cyBpbmNsdWRpbmcgMCAtLT4KICAgICAgICAgICAgICAgICA8IS0tIE5vdCBpbmNsdWRpbmcgdGhlICJkZXNjcmlwdGlvbiIgZWxlbWVudCAtLT4KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIDxhdXRoZW50aWNhdGlvbi1tZWNoYW5pc20tdHlwZT5CYXNpY1Bhc3N3b3JkPC9hdXRoZW50aWNhdGlvbi1tZWNoYW5pc20tdHlwZT4KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIDxjcmVkZW50aWFsLWludGVyZmFjZT5qYXZheC5yZXNvdXJjZS5zcGkuc2VjdXJpdHkuUGFzc3dvcmRDcmVkZW50aWFsPC9jcmVkZW50aWFsLWludGVyZmFjZT4KICAgICAgICAgICAgIDwvYXV0aGVudGljYXRpb24tbWVjaGFuaXNtPgotICAgICAgICAgICAgCisKICAgICAgICAgICAgIDxyZWF1dGhlbnRpY2F0aW9uLXN1cHBvcnQ+ZmFsc2U8L3JlYXV0aGVudGljYXRpb24tc3VwcG9ydD4KLSAgICAgICAgICAgIAorCiAgICAgICAgIDwvb3V0Ym91bmQtcmVzb3VyY2VhZGFwdGVyPgotCTxhZG1pbm9iamVjdD4KLQkgICAgICAgPGFkbWlub2JqZWN0LWludGVyZmFjZT5jb20uc3VuLmpkYmNyYS5zcGkuSmRiY1NldHVwQWRtaW48L2FkbWlub2JqZWN0LWludGVyZmFjZT4KLQkgICAgICAgPGFkbWlub2JqZWN0LWNsYXNzPmNvbS5zdW4uamRiY3JhLnNwaS5KZGJjU2V0dXBBZG1pbkltcGw8L2FkbWlub2JqZWN0LWNsYXNzPgotCSAgICAgICA8Y29uZmlnLXByb3BlcnR5PgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlRhYmxlTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotCSAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLQkgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5TY2hlbWFOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0JICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotCSAgICAgICA8Y29uZmlnLXByb3BlcnR5PgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkpuZGlOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0JICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotCSAgICAgICA8Y29uZmlnLXByb3BlcnR5PgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPk5vT2ZSb3dzPC9jb25maWctcHJvcGVydHktbmFtZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuSW50ZWdlcjwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjA8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLQkgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgPGFkbWlub2JqZWN0PgorICAgICAgICAgICA8YWRtaW5vYmplY3QtaW50ZXJmYWNlPmNvbS5zdW4uamRiY3JhLnNwaS5KZGJjU2V0dXBBZG1pbjwvYWRtaW5vYmplY3QtaW50ZXJmYWNlPgorICAgICAgICAgICA8YWRtaW5vYmplY3QtY2xhc3M+Y29tLnN1bi5qZGJjcmEuc3BpLkpkYmNTZXR1cEFkbWluSW1wbDwvYWRtaW5vYmplY3QtY2xhc3M+CisgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VGFibGVOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlNjaGVtYU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+Sm5kaU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+Tm9PZlJvd3M8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5JbnRlZ2VyPC9jb25maWctcHJvcGVydHktdHlwZT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+MDwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgPC9hZG1pbm9iamVjdD4KLSAgICAgICAgCisKICAgICA8L3Jlc291cmNlYWRhcHRlcj4KLSAgICAKKwogPC9jb25uZWN0b3I+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25NYW5hZ2VyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25NYW5hZ2VyLmphdmEKaW5kZXggYjIxOWNkMi4uMTI0ODA5YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uTWFuYWdlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvbk1hbmFnZXIuamF2YQpAQCAtMjQsMjYgKzI0LDI2IEBACiAvKioKICAqIENvbm5lY3Rpb25NYW5hZ2VyIGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMzEKLSAqIEBhdXRob3IJQmlub2QgUC5HCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzMxCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRwogICovCi1wdWJsaWMgY2xhc3MgQ29ubmVjdGlvbk1hbmFnZXIgaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uTWFuYWdlcnsgCitwdWJsaWMgY2xhc3MgQ29ubmVjdGlvbk1hbmFnZXIgaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uTWFuYWdlcnsKIAogICAgIC8qKgogICAgICAqIFJldHVybnMgYSA8Y29kZT5Db25uZWN0aW9uIDwvY29kZT4gb2JqZWN0IHRvIHRoZSA8Y29kZT5Db25uZWN0aW9uRmFjdG9yeTwvY29kZT4KICAgICAgKgotICAgICAqIEBwYXJhbQltY2YJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHBhcmFtCWluZm8JPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHJldHVybglBIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IE9iamVjdC4KLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uIEluIGNhc2Ugb2YgYW4gZXJyb3IgaW4gZ2V0dGluZyB0aGUgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4uCisgICAgICogQHBhcmFtICAgIG1jZiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgaW5mbyAgICA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcmV0dXJuICAgIEEgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gT2JqZWN0LgorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gSW4gY2FzZSBvZiBhbiBlcnJvciBpbiBnZXR0aW5nIHRoZSA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPi4KICAgICAgKi8KICAgICBwdWJsaWMgT2JqZWN0IGFsbG9jYXRlQ29ubmVjdGlvbihNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmLAotICAgIAkJCQkgICAgIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbmZvKSAKLSAgICAJCQkJICAgICB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewotCU1hbmFnZWRDb25uZWN0aW9uIG1jID0gbWNmLmNyZWF0ZU1hbmFnZWRDb25uZWN0aW9uKG51bGwsIGluZm8pOwotCXJldHVybiBtYy5nZXRDb25uZWN0aW9uKG51bGwsIGluZm8pOyAgICAJCQkJICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW5mbykKKyAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24geworICAgIE1hbmFnZWRDb25uZWN0aW9uIG1jID0gbWNmLmNyZWF0ZU1hbmFnZWRDb25uZWN0aW9uKG51bGwsIGluZm8pOworICAgIHJldHVybiBtYy5nZXRDb25uZWN0aW9uKG51bGwsIGluZm8pOwogICAgIH0KLSAgICAKKwogICAgIC8qCiAgICAgICogVGhpcyBjbGFzcyBjb3VsZCBlZmZlY3RpdmVseSBpbXBsZW1lbnQgQ29ubmVjdGlvbiBwb29saW5nIGFsc28uCiAgICAgICogQ291bGQgYmUgZG9uZSBmb3IgRkNTLgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uUmVxdWVzdEluZm8uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvblJlcXVlc3RJbmZvLmphdmEKaW5kZXggMzljNzg3Ni4uYzQ3N2ZjMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uUmVxdWVzdEluZm8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25SZXF1ZXN0SW5mby5qYXZhCkBAIC0xOSwxMCArMTksMTAgQEAKIC8qKgogICogQ29ubmVjdGlvblJlcXVlc3RJbmZvIGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMzEKLSAqIEBhdXRob3IJQmlub2QgUC5HCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzMxCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRwogICovCi1wdWJsaWMgY2xhc3MgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZveyAKK3B1YmxpYyBjbGFzcyBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm97CiAKICAgICBwcml2YXRlIFN0cmluZyB1c2VyOwogICAgIHByaXZhdGUgU3RyaW5nIHBhc3N3b3JkOwpAQCAtMzAsOCArMzAsOCBAQAogICAgIC8qKgogICAgICAqIENvbnN0cnVjdHMgYSBuZXcgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBvYmplY3QKICAgICAgKgotICAgICAqIEBwYXJhbQl1c2VyCVVzZXIgTmFtZS4KLSAgICAgKiBAcGFyYW0JcGFzc3dvcmQJUGFzc3dvcmQKKyAgICAgKiBAcGFyYW0gICAgdXNlciAgICBVc2VyIE5hbWUuCisgICAgICogQHBhcmFtICAgIHBhc3N3b3JkICAgIFBhc3N3b3JkCiAgICAgICovCiAgICAgcHVibGljIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyhTdHJpbmcgdXNlciwgU3RyaW5nIHBhc3N3b3JkKSB7CiAgICAgICAgIHRoaXMudXNlciA9IHVzZXI7CkBAIC00MSw3ICs0MSw3IEBACiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSB1c2VyIG5hbWUgb2YgdGhlIENvbm5lY3Rpb25SZXF1ZXN0SW5mby4KICAgICAgKgotICAgICAqIEByZXR1cm4JVXNlciBuYW1lIG9mIENvbm5lY3Rpb25SZXF1ZXN0SW5mby4KKyAgICAgKiBAcmV0dXJuICAgIFVzZXIgbmFtZSBvZiBDb25uZWN0aW9uUmVxdWVzdEluZm8uCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRVc2VyKCkgewogICAgICAgICByZXR1cm4gdXNlcjsKQEAgLTUwLDcgKzUwLDcgQEAKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIHBhc3N3b3JkIG9mIHRoZSBDb25uZWN0aW9uUmVxdWVzdEluZm8uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVBhc3N3b3JkIG9mIENvbm5lY3Rpb25SZXF1ZXN0SW5mby4KKyAgICAgKiBAcmV0dXJuICAgIFBhc3N3b3JkIG9mIENvbm5lY3Rpb25SZXF1ZXN0SW5mby4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFBhc3N3b3JkKCkgewogICAgICAgICByZXR1cm4gcGFzc3dvcmQ7CkBAIC01OSw3ICs1OSw3IEBACiAgICAgLyoqCiAgICAgICogVmVyaWZ5IHdoZXRoZXIgdHdvIENvbm5lY3Rpb25SZXF1ZXN0SW5mb3MgYXJlIGVxdWFsLgogICAgICAqCi0gICAgICogQHJldHVybglUcnVlLCBpZiB0aGV5IGFyZSBlcXVhbCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLgorICAgICAqIEByZXR1cm4gICAgVHJ1ZSwgaWYgdGhleSBhcmUgZXF1YWwgYW5kIGZhbHNlIG90aGVyd2lzZS4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9iaikgewogICAgICAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBmYWxzZTsKQEAgLTc1LDE4ICs3NSwxOCBAQAogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgaGFzaGNvZGUgb2YgdGhlIG9iamVjdC4KICAgICAgKgotICAgICAqIEByZXR1cm4JaGFzaENvZGUuCisgICAgICogQHJldHVybiAgICBoYXNoQ29kZS4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewogICAgICAgICBTdHJpbmcgcmVzdWx0ID0gIiIgKyB1c2VyICsgcGFzc3dvcmQ7CiAgICAgICAgIHJldHVybiByZXN1bHQuaGFzaENvZGUoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb21wYXJlcyB0d28gb2JqZWN0cy4KICAgICAgKgotICAgICAqIEBwYXJhbQlvMQlGaXJzdCBvYmplY3QuCi0gICAgICogQHBhcmFtCW8yCVNlY29uZCBvYmplY3QuCisgICAgICogQHBhcmFtICAgIG8xICAgIEZpcnN0IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgbzIgICAgU2Vjb25kIG9iamVjdC4KICAgICAgKi8KICAgICBwcml2YXRlIGJvb2xlYW4gaXNFcXVhbChPYmplY3QgbzEsIE9iamVjdCBvMikgewogICAgICAgICBpZiAobzEgPT0gbnVsbCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCmluZGV4IDRiZjlmZWQuLjMyMzQwMzIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKQEAgLTMxLDE0ICszMSwxNCBAQAogLyoqCiAgKiBEYXRhIFNvdXJjZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMzAKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzMwCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiAKIHB1YmxpYyBjbGFzcyBEU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBleHRlbmRzIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSB7Ci0gICAKKwogICAgIHByaXZhdGUgdHJhbnNpZW50IGphdmF4LnNxbC5EYXRhU291cmNlIGRhdGFTb3VyY2VPYmo7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBMb2dnZXIgX2xvZ2dlcjsKICAgICBzdGF0aWMgewogICAgICAgICBfbG9nZ2VyID0gTG9nZ2VyLmdldEFub255bW91c0xvZ2dlcigpOwpAQCAtNDksMTkgKzQ5LDE5IEBACiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIG5ldyBwaHlzaWNhbCBjb25uZWN0aW9uIHRvIHRoZSB1bmRlcmx5aW5nIEVJUyByZXNvdXJjZQogICAgICAqIG1hbmFnZXIuCi0gICAgICogCi0gICAgICogQHBhcmFtCXN1YmplY3QJPGNvZGU+U3ViamVjdDwvY29kZT4gaW5zdGFuY2UgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKiBAcGFyYW0JY3hSZXF1ZXN0SW5mbwk8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHdoaWNoIG1heSBiZSBjcmVhdGVkCi0gICAgICogICAgICAgCSAgICAgICAgICAgICAJYXMgYSByZXN1bHQgb2YgdGhlIGludm9jYXRpb24gPGNvZGU+Z2V0Q29ubmVjdGlvbih1c2VyLCBwYXNzd29yZCk8L2NvZGU+Ci0gICAgICogICAgICAgCSAgICAgICAgICAgICAJb24gdGhlIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdAotICAgICAqIEByZXR1cm4JPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBjcmVhdGVkCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBpbnN0YW50aWF0aW5nIHRoZQotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0IHVzZWQgZm9yIHRoZQotICAgICAqICAgICAgIAkJCQljcmVhdGlvbiBvZiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdAotICAgICAqIEB0aHJvd3MJU2VjdXJpdHlFeGNlcHRpb24JaWYgdGhlcmUgaW5vIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0Ci0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAlzYXRpc2Z5aW5nIHRoaXMgcmVxdWVzdCAKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZSAKLSAgICAgKgkJCQkJCXBoeXNpY2FsIGNvbm5lY3Rpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzdWJqZWN0ICAgIDxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogQHBhcmFtICAgIGN4UmVxdWVzdEluZm8gICAgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiB3aGljaCBtYXkgYmUgY3JlYXRlZAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIGEgcmVzdWx0IG9mIHRoZSBpbnZvY2F0aW9uIDxjb2RlPmdldENvbm5lY3Rpb24odXNlciwgcGFzc3dvcmQpPC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIHRoZSA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QgY3JlYXRlZAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gaW5zdGFudGlhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdCB1c2VkIGZvciB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRpb24gb2YgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QKKyAgICAgKiBAdGhyb3dzICAgIFNlY3VyaXR5RXhjZXB0aW9uICAgIGlmIHRoZXJlIGlubyA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F0aXNmeWluZyB0aGlzIHJlcXVlc3QKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgcGh5c2ljYWwgY29ubmVjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBjcmVhdGVNYW5hZ2VkQ29ubmVjdGlvbihqYXZheC5zZWN1cml0eS5hdXRoLlN1YmplY3Qgc3ViamVjdCwKICAgICAgICAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxdWVzdEluZm8pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CkBAIC02OSw1NSArNjksNTUgQEAKICAgICAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gY3JlYXRlTWFuYWdlZENvbm5lY3Rpb24iKTsKICAgICAgICAgfQogICAgICAgICBQYXNzd29yZENyZWRlbnRpYWwgcGMgPSBTZWN1cml0eVV0aWxzLmdldFBhc3N3b3JkQ3JlZGVudGlhbCh0aGlzLCBzdWJqZWN0LCBjeFJlcXVlc3RJbmZvKTsKLSAgICAgICAgCisKICAgICAgICAgaWYoZGF0YVNvdXJjZU9iaiA9PSBudWxsKSB7CiAgICAgICAgICAgICBpZihkc09iakJ1aWxkZXIgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGRzT2JqQnVpbGRlciA9IG5ldyBEYXRhU291cmNlT2JqZWN0QnVpbGRlcihzcGVjKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZU9iaiA9IChqYXZheC5zcWwuRGF0YVNvdXJjZSkgZHNPYmpCdWlsZGVyLmNvbnN0cnVjdERhdGFTb3VyY2VPYmplY3QoKTsKICAgICAgICAgICAgIH0gY2F0Y2goQ2xhc3NDYXN0RXhjZXB0aW9uIGNjZSkgewotCSAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfY2NlIiwgY2NlKTsKKyAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2NjZSIsIGNjZSk7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGpha2FydGEucmVzb3VyY2UuUmVzb3VyY2VFeGNlcHRpb24oY2NlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBkc0Nvbm4gPSBudWxsOwotICAgICAgICAKKwogICAgICAgICB0cnkgewotCSAgICAvKiBGb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIHVzZXIvcGFzc3dkIG9mIHRoZSBjb25uZWN0aW9uIHBvb2wgaXMKLQkgICAgICogZXF1YWwgdG8gdGhlIFBhc3N3b3JkQ3JlZGVudGlhbCBmb3IgdGhlIGNvbm5lY3Rpb24gcmVxdWVzdAotCSAgICAgKiBnZXQgYSBjb25uZWN0aW9uIGZyb20gdGhpcyBwb29sIGRpcmVjdGx5LgotCSAgICAgKiBmb3IgYWxsIG90aGVyIGNvbmRpdGlvbnMgZ28gY3JlYXRlIGEgbmV3IGNvbm5lY3Rpb24KLQkgICAgICovCi0JICAgIGlmICggaXNFcXVhbCggcGMsIGdldFVzZXIoKSwgZ2V0UGFzc3dvcmQoKSApICkgewotCSAgICAgICAgZHNDb25uID0gZGF0YVNvdXJjZU9iai5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIH0gZWxzZSB7Ci0JICAgICAgICBkc0Nvbm4gPSBkYXRhU291cmNlT2JqLmdldENvbm5lY3Rpb24ocGMuZ2V0VXNlck5hbWUoKSwgCi0JCSAgICBuZXcgU3RyaW5nKHBjLmdldFBhc3N3b3JkKCkpKTsKLQkgICAgfQorICAgICAgICAvKiBGb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIHVzZXIvcGFzc3dkIG9mIHRoZSBjb25uZWN0aW9uIHBvb2wgaXMKKyAgICAgICAgICogZXF1YWwgdG8gdGhlIFBhc3N3b3JkQ3JlZGVudGlhbCBmb3IgdGhlIGNvbm5lY3Rpb24gcmVxdWVzdAorICAgICAgICAgKiBnZXQgYSBjb25uZWN0aW9uIGZyb20gdGhpcyBwb29sIGRpcmVjdGx5LgorICAgICAgICAgKiBmb3IgYWxsIG90aGVyIGNvbmRpdGlvbnMgZ28gY3JlYXRlIGEgbmV3IGNvbm5lY3Rpb24KKyAgICAgICAgICovCisgICAgICAgIGlmICggaXNFcXVhbCggcGMsIGdldFVzZXIoKSwgZ2V0UGFzc3dvcmQoKSApICkgeworICAgICAgICAgICAgZHNDb25uID0gZGF0YVNvdXJjZU9iai5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkc0Nvbm4gPSBkYXRhU291cmNlT2JqLmdldENvbm5lY3Rpb24ocGMuZ2V0VXNlck5hbWUoKSwKKyAgICAgICAgICAgIG5ldyBTdHJpbmcocGMuZ2V0UGFzc3dvcmQoKSkpOworICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMuZXhjX2NyZWF0ZV9jb25uIiwgc3FsZSk7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgamFrYXJ0YS5yZXNvdXJjZS5zcGkuUmVzb3VyY2VBbGxvY2F0aW9uRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBjb3VsZCBub3QgYmUgYWxsb2NhdGVkOiAiICsgCisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLmV4Y19jcmVhdGVfY29ubiIsIHNxbGUpOworICAgICAgICAgICAgdGhyb3cgbmV3IGpha2FydGEucmVzb3VyY2Uuc3BpLlJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gY291bGQgbm90IGJlIGFsbG9jYXRlZDogIiArCiAgICAgICAgICAgICAgICAgc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYyA9IG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24obnVsbCwgZHNDb25uLCBwYywgdGhpcyk7CiAgICAgICAgIC8vR0pDSU5UCiAgICAgICAgIHNldElzb2xhdGlvbihtYyk7CiAgICAgICAgIGlzVmFsaWQobWMpOwogICAgICAgICByZXR1cm4gbWM7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogQ2hlY2sgaWYgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGlzIGVxdWFsIHRvIAorICAgICAqIENoZWNrIGlmIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpcyBlcXVhbCB0bwogICAgICAqIGFub3RoZXIgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPi4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0Jb3RoZXIJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QgZm9yIGNoZWNraW5nIGVxdWFsaXR5IHdpdGgKLSAgICAgKiBAcmV0dXJuCXRydWUJaWYgdGhlIHByb3BlcnR5IHNldHMgb2YgYm90aCB0aGUgCi0gICAgICoJCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdHMgYXJlIHRoZSBzYW1lCi0gICAgICoJCWZhbHNlCW90aGVyd2lzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIG90aGVyICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0IGZvciBjaGVja2luZyBlcXVhbGl0eSB3aXRoCisgICAgICogQHJldHVybiAgICB0cnVlICAgIGlmIHRoZSBwcm9wZXJ0eSBzZXRzIG9mIGJvdGggdGhlCisgICAgICogICAgICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdHMgYXJlIHRoZSBzYW1lCisgICAgICogICAgICAgIGZhbHNlICAgIG90aGVyd2lzZQogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb3RoZXIpIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTEyOCw0MDkgKzEyOCw0MDkgQEAKICAgICAgICAgICogaWYgYW5kIG9ubHkgaWYgdGhlaXIgcHJvcGVydGllcyBhcmUgdGhlIHNhbWUuCiAgICAgICAgICAqLwogICAgICAgICBpZihvdGhlciBpbnN0YW5jZW9mIGNvbS5zdW4uamRiY3JhLnNwaS5EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSkgewotICAgICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLkRTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG90aGVyTUNGID0gCisgICAgICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnkgb3RoZXJNQ0YgPQogICAgICAgICAgICAgICAgIChjb20uc3VuLmpkYmNyYS5zcGkuRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkpIG90aGVyOwogICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3BlYy5lcXVhbHMob3RoZXJNQ0Yuc3BlYyk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHNlcnZlciBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCXNlcnZlck5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0U2VydmVyTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgc2VydmVyTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRTZXJ2ZXJOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHNlcnZlck5hbWUoU3RyaW5nIHNlcnZlck5hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuU0VSVkVSTkFNRSwgc2VydmVyTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgc2VydmVyIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXNlcnZlck5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldFNlcnZlck5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBzZXJ2ZXJOYW1lCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRTZXJ2ZXJOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0c2VydmVyTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlNFUlZFUk5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHNlcnZlciBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCXNlcnZlck5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0U2VydmVyTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgc2VydmVyTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRTZXJ2ZXJOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFNlcnZlck5hbWUoU3RyaW5nIHNlcnZlck5hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuU0VSVkVSTkFNRSwgc2VydmVyTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgc2VydmVyIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXNlcnZlck5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldFNlcnZlck5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBzZXJ2ZXJOYW1lCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRTZXJ2ZXJOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmVyTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlNFUlZFUk5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHBvcnQgbnVtYmVyLgogICAgICAqCi0gICAgICogQHBhcmFtCXBvcnROdW1iZXIJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0UG9ydE51bWJlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcG9ydE51bWJlciAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRQb3J0TnVtYmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHBvcnROdW1iZXIoU3RyaW5nIHBvcnROdW1iZXIpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUE9SVE5VTUJFUiwgcG9ydE51bWJlcik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcG9ydCBudW1iZXIuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXBvcnROdW1iZXIKLSAgICAgKiBAc2VlCTxjb2RlPnNldFBvcnROdW1iZXI8L2NvZGU+CisgICAgICogQHJldHVybiAgICBwb3J0TnVtYmVyCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRQb3J0TnVtYmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0cG9ydE51bWJlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHBvcnQgbnVtYmVyLgogICAgICAqCi0gICAgICogQHBhcmFtCXBvcnROdW1iZXIJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0UG9ydE51bWJlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcG9ydE51bWJlciAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRQb3J0TnVtYmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFBvcnROdW1iZXIoU3RyaW5nIHBvcnROdW1iZXIpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUE9SVE5VTUJFUiwgcG9ydE51bWJlcik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcG9ydCBudW1iZXIuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXBvcnROdW1iZXIKLSAgICAgKiBAc2VlCTxjb2RlPnNldFBvcnROdW1iZXI8L2NvZGU+CisgICAgICogQHJldHVybiAgICBwb3J0TnVtYmVyCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRQb3J0TnVtYmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0UG9ydE51bWJlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRhdGFiYXNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZGF0YWJhc2VOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERhdGFiYXNlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGF0YWJhc2VOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERhdGFiYXNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRkYXRhYmFzZU5hbWUoU3RyaW5nIGRhdGFiYXNlTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBQkFTRU5BTUUsIGRhdGFiYXNlTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGF0YWJhc2UgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGF0YWJhc2VOYW1lCi0gICAgICogQHNlZQk8Y29kZT5zZXREYXRhYmFzZU5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkYXRhYmFzZU5hbWUKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERhdGFiYXNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGRhdGFiYXNlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFCQVNFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGF0YWJhc2UgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlkYXRhYmFzZU5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGF0YWJhc2VOYW1lPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkYXRhYmFzZU5hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGF0YWJhc2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERhdGFiYXNlTmFtZShTdHJpbmcgZGF0YWJhc2VOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFCQVNFTkFNRSwgZGF0YWJhc2VOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkYXRhYmFzZSBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglkYXRhYmFzZU5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldERhdGFiYXNlTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRhdGFiYXNlTmFtZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGF0YWJhc2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGF0YWJhc2VOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQUJBU0VOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkYXRhIHNvdXJjZSBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCWRzbiA8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREYXRhU291cmNlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZHNuIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERhdGFTb3VyY2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGRhdGFTb3VyY2VOYW1lKFN0cmluZyBkc24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQVNPVVJDRU5BTUUsIGRzbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGF0YSBzb3VyY2UgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JZHNuCi0gICAgICogQHNlZQk8Y29kZT5zZXREYXRhU291cmNlTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRzbgorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRkYXRhU291cmNlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkYXRhIHNvdXJjZSBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCWRzbiA8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREYXRhU291cmNlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZHNuIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERhdGFTb3VyY2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERhdGFTb3VyY2VOYW1lKFN0cmluZyBkc24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQVNPVVJDRU5BTUUsIGRzbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGF0YSBzb3VyY2UgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JZHNuCi0gICAgICogQHNlZQk8Y29kZT5zZXREYXRhU291cmNlTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRzbgorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXREYXRhU291cmNlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkZXNjcmlwdGlvbi4KICAgICAgKgotICAgICAqIEBwYXJhbQlkZXNjCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERlc2NyaXB0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkZXNjICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERlc2NyaXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGRlc2NyaXB0aW9uKFN0cmluZyBkZXNjKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFU0NSSVBUSU9OLCBkZXNjKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkZXNjcmlwdGlvbi4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGVzYwotICAgICAqIEBzZWUJPGNvZGU+c2V0RGVzY3JpcHRpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBkZXNjCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREZXNjcmlwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGRlc2NyaXB0aW9uKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVTQ1JJUFRJT04pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRlc2NyaXB0aW9uLgogICAgICAqCi0gICAgICogQHBhcmFtCWRlc2MJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGVzY3JpcHRpb248L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRlc2MgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGVzY3JpcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RGVzY3JpcHRpb24oU3RyaW5nIGRlc2MpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVTQ1JJUFRJT04sIGRlc2MpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRlc2NyaXB0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybglkZXNjCi0gICAgICogQHNlZQk8Y29kZT5zZXREZXNjcmlwdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRlc2MKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERlc2NyaXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERVNDUklQVElPTik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgbmV0d29yayBwcm90b2NvbC4KICAgICAgKgotICAgICAqIEBwYXJhbQlud1Byb3RvY29sCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbndQcm90b2NvbCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0bmV0d29ya1Byb3RvY29sKFN0cmluZyBud1Byb3RvY29sKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk5FVFdPUktQUk9UT0NPTCwgbndQcm90b2NvbCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgbmV0d29yayBwcm90b2NvbC4KICAgICAgKgotICAgICAqIEByZXR1cm4JbndQcm90b2NvbAotICAgICAqIEBzZWUJPGNvZGU+c2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgbndQcm90b2NvbAorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0bmV0d29ya1Byb3RvY29sKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTkVUV09SS1BST1RPQ09MKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBuZXR3b3JrIHByb3RvY29sLgogICAgICAqCi0gICAgICogQHBhcmFtCW53UHJvdG9jb2wJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBud1Byb3RvY29sICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXROZXR3b3JrUHJvdG9jb2woU3RyaW5nIG53UHJvdG9jb2wpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTkVUV09SS1BST1RPQ09MLCBud1Byb3RvY29sKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBuZXR3b3JrIHByb3RvY29sLgogICAgICAqCi0gICAgICogQHJldHVybglud1Byb3RvY29sCi0gICAgICogQHNlZQk8Y29kZT5zZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CisgICAgICogQHJldHVybiAgICBud1Byb3RvY29sCisgICAgICogQHNlZSAgICA8Y29kZT5zZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXROZXR3b3JrUHJvdG9jb2woKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ORVRXT1JLUFJPVE9DT0wpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHJvbGUgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlyb2xlTmFtZQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXRSb2xlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcm9sZU5hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0Um9sZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0cm9sZU5hbWUoU3RyaW5nIHJvbGVOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlJPTEVOQU1FLCByb2xlTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcm9sZSBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglyb2xlTmFtZQotICAgICAqIEBzZWUJPGNvZGU+c2V0Um9sZU5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICByb2xlTmFtZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0Um9sZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRyb2xlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlJPTEVOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSByb2xlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jcm9sZU5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0Um9sZU5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHJvbGVOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldFJvbGVOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFJvbGVOYW1lKFN0cmluZyByb2xlTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ST0xFTkFNRSwgcm9sZU5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHJvbGUgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4Jcm9sZU5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldFJvbGVOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgcm9sZU5hbWUKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldFJvbGVOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Um9sZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ST0xFTkFNRSk7CiAgICAgfQogCi0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBsb2dpbiB0aW1lb3V0LgogICAgICAqCi0gICAgICogQHBhcmFtCWxvZ2luVGltZU91dAk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXRMb2dpblRpbWVPdXQ8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGxvZ2luVGltZU91dCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRMb2dpblRpbWVPdXQ8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0bG9naW5UaW1lT3V0KFN0cmluZyBsb2dpblRpbWVPdXQpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HSU5USU1FT1VULCBsb2dpblRpbWVPdXQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGxvZ2luIHRpbWVvdXQuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWxvZ2luVGltZW91dAotICAgICAqIEBzZWUJPGNvZGU+c2V0TG9naW5UaW1lT3V0PC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgbG9naW5UaW1lb3V0CisgICAgICogQHNlZSAgICA8Y29kZT5zZXRMb2dpblRpbWVPdXQ8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRsb2dpblRpbWVPdXQoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dJTlRJTUVPVVQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGxvZ2luIHRpbWVvdXQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbG9naW5UaW1lT3V0CTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldExvZ2luVGltZU91dDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbG9naW5UaW1lT3V0ICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldExvZ2luVGltZU91dDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRMb2dpblRpbWVPdXQoU3RyaW5nIGxvZ2luVGltZU91dCkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dJTlRJTUVPVVQsIGxvZ2luVGltZU91dCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgbG9naW4gdGltZW91dC4KICAgICAgKgotICAgICAqIEByZXR1cm4JbG9naW5UaW1lb3V0Ci0gICAgICogQHNlZQk8Y29kZT5zZXRMb2dpblRpbWVPdXQ8L2NvZGU+CisgICAgICogQHJldHVybiAgICBsb2dpblRpbWVvdXQKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldExvZ2luVGltZU91dDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldExvZ2luVGltZU91dCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR0lOVElNRU9VVCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGVsaW1pdGVyLgogICAgICAqCi0gICAgICogQHBhcmFtCWRlbGltCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERlbGltaXRlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGVsaW0gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGVsaW1pdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGRlbGltaXRlcihTdHJpbmcgZGVsaW0pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVMSU1JVEVSLCBkZWxpbSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGVsaW1pdGVyLgogICAgICAqCi0gICAgICogQHJldHVybglkZWxpbQotICAgICAqIEBzZWUJPGNvZGU+c2V0RGVsaW1pdGVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZGVsaW0KKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERlbGltaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGRlbGltaXRlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGVsaW1pdGVyLgogICAgICAqCi0gICAgICogQHBhcmFtCWRlbGltCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERlbGltaXRlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGVsaW0gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGVsaW1pdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERlbGltaXRlcihTdHJpbmcgZGVsaW0pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVMSU1JVEVSLCBkZWxpbSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGVsaW1pdGVyLgogICAgICAqCi0gICAgICogQHJldHVybglkZWxpbQotICAgICAqIEBzZWUJPGNvZGU+c2V0RGVsaW1pdGVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZGVsaW0KKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERlbGltaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldERlbGltaXRlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZHJpdmVyIHNwZWNpZmljIHByb3BlcnRpZXMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZHJpdmVyUHJvcHMJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZHJpdmVyUHJvcHMgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRkcml2ZXJQcm9wZXJ0aWVzKFN0cmluZyBkcml2ZXJQcm9wcykgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5EUklWRVJQUk9QRVJUSUVTLCBkcml2ZXJQcm9wcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZHJpdmVyIHNwZWNpZmljIHByb3BlcnRpZXMuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRyaXZlclByb3BzCi0gICAgICogQHNlZQk8Y29kZT5zZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZHJpdmVyUHJvcHMKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRkcml2ZXJQcm9wZXJ0aWVzKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuRFJJVkVSUFJPUEVSVElFUyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZHJpdmVyIHNwZWNpZmljIHByb3BlcnRpZXMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZHJpdmVyUHJvcHMJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZHJpdmVyUHJvcHMgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXREcml2ZXJQcm9wZXJ0aWVzKFN0cmluZyBkcml2ZXJQcm9wcykgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5EUklWRVJQUk9QRVJUSUVTLCBkcml2ZXJQcm9wcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZHJpdmVyIHNwZWNpZmljIHByb3BlcnRpZXMuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRyaXZlclByb3BzCi0gICAgICogQHNlZQk8Y29kZT5zZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZHJpdmVyUHJvcHMKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXREcml2ZXJQcm9wZXJ0aWVzKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuRFJJVkVSUFJPUEVSVElFUyk7CkBAIC01MzgsMTkgKzUzOCwxOSBAQAogCiAgICAgcHVibGljIERvdWJsZSBnZXROb25TdHJpbmdXaXRoTm9PdmVycmlkZGVuU2V0dGVyKCl7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgOiBnZXROb25TdHJpbmdXaXRoTm9PdmVycmlkZGVuU2V0dGVyKCkgY2FsbGVkIik7Ci0JcmV0dXJuIHRoaXMubm9uU3RyaW5nV2l0aE5vT3ZlcnJpZGRlblNldHRlcjsKKyAgICByZXR1cm4gdGhpcy5ub25TdHJpbmdXaXRoTm9PdmVycmlkZGVuU2V0dGVyOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldE5vblN0cmluZ1dpdGhOb092ZXJyaWRkZW5TZXR0ZXIoRG91YmxlIGRibCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IDogc2V0Tm9uU3RyaW5nV2l0aE5vT3ZlcnJpZGRlblNldHRlcigpIGNhbGxlZCIpOwotCXRoaXMubm9uU3RyaW5nV2l0aE5vT3ZlcnJpZGRlblNldHRlciA9IGRibDsKKyAgICB0aGlzLm5vblN0cmluZ1dpdGhOb092ZXJyaWRkZW5TZXR0ZXIgPSBkYmw7CiAgICAgfQogCiAgICAgcHVibGljIERvdWJsZSBnZXROb25TdHJpbmdXaXRoT3ZlcnJpZGRlblNldHRlcigpewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IDogZ2V0Tm9uU3RyaW5nV2l0aE92ZXJyaWRkZW5TZXR0ZXIoKSBjYWxsZWQiKTsKICAgICAgICAgcmV0dXJuIHRoaXMubm9uU3RyaW5nV2l0aE92ZXJyaWRkZW5TZXR0ZXI7CiAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldE5vblN0cmluZ1dpdGhPdmVycmlkZGVuU2V0dGVyKERvdWJsZSBkYmwpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSA6IHNldE5vblN0cmluZ1dpdGhPdmVycmlkZGVuU2V0dGVyKERvdWJsZSkgY2FsbGVkIik7CiAgICAgICAgIHRoaXMubm9uU3RyaW5nV2l0aE92ZXJyaWRkZW5TZXR0ZXIgPSBkYmw7CkBAIC01NjcsMzUgKzU2NywzNSBAQAogICAgICAqIENoZWNrIGlmIHRoZSBQYXNzd29yZENyZWRlbnRpYWwgcGFzc2VkIGZvciB0aGlzIGdldCBjb25uZWN0aW9uCiAgICAgICogcmVxdWVzdCBpcyBlcXVhbCB0byB0aGUgdXNlci9wYXNzd2Qgb2YgdGhpcyBjb25uZWN0aW9uIHBvb2wuCiAgICAgICovCi0gICAgcHJpdmF0ZSBib29sZWFuIGlzRXF1YWwoIFBhc3N3b3JkQ3JlZGVudGlhbCBwYywgU3RyaW5nIHVzZXIsIAorICAgIHByaXZhdGUgYm9vbGVhbiBpc0VxdWFsKCBQYXNzd29yZENyZWRlbnRpYWwgcGMsIFN0cmluZyB1c2VyLAogICAgICAgICBTdHJpbmcgcGFzc3dvcmQpIHsKLSAgICAgICAgCi0JLy9pZiBlcXVhbCBnZXQgZGlyZWN0IGNvbm5lY3Rpb24gZWxzZSAKLQkvL2dldCBjb25uZWN0aW9uIHdpdGggdXNlciBhbmQgcGFzc3dvcmQuCi0JCi0JaWYgKHVzZXIgPT0gbnVsbCAmJiBwYyA9PSBudWxsKSB7Ci0JICAgIHJldHVybiB0cnVlOwotCX0KLQkKLQlpZiAoIHVzZXIgPT0gbnVsbCAmJiBwYyAhPSBudWxsICkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCX0KIAotCWlmKCBwYyA9PSBudWxsICkgewotCSAgICByZXR1cm4gdHJ1ZTsKLQl9Ci0JCi0JaWYgKCB1c2VyLmVxdWFscyggcGMuZ2V0VXNlck5hbWUoKSApICkgewotCSAgICBpZiAoIHBhc3N3b3JkID09IG51bGwgJiYgcGMuZ2V0UGFzc3dvcmQoKSA9PSBudWxsICkgewotCSAgICAgICAgcmV0dXJuIHRydWU7Ci0JICAgIH0KLQl9Ci0JCi0JaWYgKCB1c2VyLmVxdWFscyhwYy5nZXRVc2VyTmFtZSgpKSAmJiBwYXNzd29yZC5lcXVhbHMocGMuZ2V0UGFzc3dvcmQoKSkgKSB7Ci0JICAgIHJldHVybiB0cnVlOwotCX0gCi0JCi0gICAgICAgIAotCXJldHVybiBmYWxzZTsKKyAgICAvL2lmIGVxdWFsIGdldCBkaXJlY3QgY29ubmVjdGlvbiBlbHNlCisgICAgLy9nZXQgY29ubmVjdGlvbiB3aXRoIHVzZXIgYW5kIHBhc3N3b3JkLgorCisgICAgaWYgKHVzZXIgPT0gbnVsbCAmJiBwYyA9PSBudWxsKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICggdXNlciA9PSBudWxsICYmIHBjICE9IG51bGwgKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYoIHBjID09IG51bGwgKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICggdXNlci5lcXVhbHMoIHBjLmdldFVzZXJOYW1lKCkgKSApIHsKKyAgICAgICAgaWYgKCBwYXNzd29yZCA9PSBudWxsICYmIHBjLmdldFBhc3N3b3JkKCkgPT0gbnVsbCApIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCB1c2VyLmVxdWFscyhwYy5nZXRVc2VyTmFtZSgpKSAmJiBwYXNzd29yZC5lcXVhbHMocGMuZ2V0UGFzc3dvcmQoKSkgKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworCisgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRGF0YVNvdXJjZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EYXRhU291cmNlLmphdmEKaW5kZXggMjE5YTM2NS4uNGJmOGI3YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EYXRhU291cmNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EYXRhU291cmNlLmphdmEKQEAgLTI4LDIyICsyOCwyMiBAQAogaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsKIGltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsKIC8qKgotICogSG9sZHMgdGhlIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCwgd2hpY2ggaXMgdG8gYmUgCisgKiBIb2xkcyB0aGUgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LCB3aGljaCBpcyB0byBiZQogICogcGFzc2VkIHRvIHRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMzEKLSAqIEBhdXRob3IJQmlub2QgUC5HCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzMxCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRwogICovCiBwdWJsaWMgY2xhc3MgRGF0YVNvdXJjZSBpbXBsZW1lbnRzIGphdmF4LnNxbC5EYXRhU291cmNlLCBqYXZhLmlvLlNlcmlhbGl6YWJsZSwKLQkJY29tLnN1bi5hcHBzZXJ2LmpkYmNyYS5EYXRhU291cmNlLCBqYWthcnRhLnJlc291cmNlLlJlZmVyZW5jZWFibGV7IAotCQkJCSAgIAorICAgICAgICBjb20uc3VuLmFwcHNlcnYuamRiY3JhLkRhdGFTb3VyY2UsIGpha2FydGEucmVzb3VyY2UuUmVmZXJlbmNlYWJsZXsKKwogICAgIHByaXZhdGUgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG1jZjsKLSAgICBwcml2YXRlIENvbm5lY3Rpb25NYW5hZ2VyIGNtOwkJCQkgICAJCQkJICAgCisgICAgcHJpdmF0ZSBDb25uZWN0aW9uTWFuYWdlciBjbTsKICAgICBwcml2YXRlIGludCBsb2dpblRpbWVvdXQ7CiAgICAgcHJpdmF0ZSBQcmludFdyaXRlciBsb2dXcml0ZXI7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgZGVzY3JpcHRpb247CQkJCSAgIAorICAgIHByaXZhdGUgU3RyaW5nIGRlc2NyaXB0aW9uOwogICAgIHByaXZhdGUgUmVmZXJlbmNlIHJlZmVyZW5jZTsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIExvZ2dlciBfbG9nZ2VyOwogICAgIHN0YXRpYyB7CiAgICAgICAgIF9sb2dnZXIgPSBMb2dnZXIuZ2V0QW5vbnltb3VzTG9nZ2VyKCk7CkBAIC01MSw1NyArNTEsNTcgQEAKICAgICBwcml2YXRlIGJvb2xlYW4gZGVidWcgPSBmYWxzZTsKIAogICAgIC8qKgotICAgICAqIENvbnN0cnVjdHMgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0LiBUaGlzIGlzIGNyZWF0ZWQgYnkgdGhlIAorICAgICAqIENvbnN0cnVjdHMgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0LiBUaGlzIGlzIGNyZWF0ZWQgYnkgdGhlCiAgICAgICogPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWNmCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0IAotICAgICAqCQkJY3JlYXRpbmcgdGhpcyBvYmplY3QuCi0gICAgICogQHBhcmFtCWNtCTxjb2RlPkNvbm5lY3Rpb25NYW5hZ2VyPC9jb2RlPiBvYmplY3QgZWl0aGVyIGFzc29jaWF0ZWQKLSAgICAgKgkJCXdpdGggQXBwbGljYXRpb24gc2VydmVyIG9yIFJlc291cmNlIEFkYXB0ZXIuCisgICAgICogQHBhcmFtICAgIG1jZiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdAorICAgICAqICAgICAgICAgICAgY3JlYXRpbmcgdGhpcyBvYmplY3QuCisgICAgICogQHBhcmFtICAgIGNtICAgIDxjb2RlPkNvbm5lY3Rpb25NYW5hZ2VyPC9jb2RlPiBvYmplY3QgZWl0aGVyIGFzc29jaWF0ZWQKKyAgICAgKiAgICAgICAgICAgIHdpdGggQXBwbGljYXRpb24gc2VydmVyIG9yIFJlc291cmNlIEFkYXB0ZXIuCiAgICAgICovCiAgICAgcHVibGljIERhdGFTb3VyY2UgKE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2YsIENvbm5lY3Rpb25NYW5hZ2VyIGNtKSB7Ci0gICAgCXRoaXMubWNmID0gbWNmOwotICAgIAlpZiAoY20gPT0gbnVsbCkgewotICAgIAkgICAgdGhpcy5jbSA9IChDb25uZWN0aW9uTWFuYWdlcikgbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uTWFuYWdlcigpOwotICAgIAl9IGVsc2UgewotICAgIAkgICAgdGhpcy5jbSA9IGNtOwotICAgIAl9ICAgIAkKLSAgICB9ICAgCi0gICAgCisgICAgICAgIHRoaXMubWNmID0gbWNmOworICAgICAgICBpZiAoY20gPT0gbnVsbCkgeworICAgICAgICAgICAgdGhpcy5jbSA9IChDb25uZWN0aW9uTWFuYWdlcikgbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uTWFuYWdlcigpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy5jbSA9IGNtOworICAgICAgICB9CisgICAgfQorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KLSAgICAgKiAKLSAgICAgKiBAcmV0dXJuCTxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYW4gZXJyb3IuICAgICAgCisgICAgICoKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYW4gZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIENvbm5lY3Rpb24gZ2V0Q29ubmVjdGlvbigpIHRocm93cyBTUUxFeGNlcHRpb24gewotICAgIAl0cnkgewotICAgIAkgICAgcmV0dXJuIChDb25uZWN0aW9uKSBjbS5hbGxvY2F0ZUNvbm5lY3Rpb24obWNmLG51bGwpOyAgICAJICAgIAotICAgIAl9IGNhdGNoIChSZXNvdXJjZUV4Y2VwdGlvbiByZSkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgcmV0dXJuIChDb25uZWN0aW9uKSBjbS5hbGxvY2F0ZUNvbm5lY3Rpb24obWNmLG51bGwpOworICAgICAgICB9IGNhdGNoIChSZXNvdXJjZUV4Y2VwdGlvbiByZSkgewogLy8gVGhpcyBpcyB0ZW1wb3JhcnkuIFRoaXMgbmVlZHMgdG8gYmUgY2hhbmdlZCB0byBTRVZFUkUgYWZ0ZXIgVFAKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMuZXhjX2dldF9jb25uIiwgcmUuZ2V0TWVzc2FnZSgpKTsKLSAgICAJICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKHJlLmdldE1lc3NhZ2UoKSk7Ci0gICAgCX0KKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMuZXhjX2dldF9jb25uIiwgcmUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKHJlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgotICAgICAqIAotICAgICAqIEBwYXJhbQl1c2VyCVVzZXIgbmFtZSBmb3IgdGhlIENvbm5lY3Rpb24uCi0gICAgICogQHBhcmFtCXB3ZAlQYXNzd29yZCBmb3IgdGhlIENvbm5lY3Rpb24uCi0gICAgICogQHJldHVybgk8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGFuIGVycm9yLiAgICAgIAorICAgICAqCisgICAgICogQHBhcmFtICAgIHVzZXIgICAgVXNlciBuYW1lIGZvciB0aGUgQ29ubmVjdGlvbi4KKyAgICAgKiBAcGFyYW0gICAgcHdkICAgIFBhc3N3b3JkIGZvciB0aGUgQ29ubmVjdGlvbi4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYW4gZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIENvbm5lY3Rpb24gZ2V0Q29ubmVjdGlvbihTdHJpbmcgdXNlciwgU3RyaW5nIHB3ZCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0gICAgCXRyeSB7Ci0gICAgCSAgICBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW5mbyA9IG5ldyBDb25uZWN0aW9uUmVxdWVzdEluZm8gKHVzZXIsIHB3ZCk7Ci0gICAgCSAgICByZXR1cm4gKENvbm5lY3Rpb24pIGNtLmFsbG9jYXRlQ29ubmVjdGlvbihtY2YsaW5mbyk7Ci0gICAgCX0gY2F0Y2ggKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW5mbyA9IG5ldyBDb25uZWN0aW9uUmVxdWVzdEluZm8gKHVzZXIsIHB3ZCk7CisgICAgICAgICAgICByZXR1cm4gKENvbm5lY3Rpb24pIGNtLmFsbG9jYXRlQ29ubmVjdGlvbihtY2YsaW5mbyk7CisgICAgICAgIH0gY2F0Y2ggKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7CiAvLyBUaGlzIGlzIHRlbXBvcmFyeS4gVGhpcyBuZWVkcyB0byBiZSBjaGFuZ2VkIHRvIFNFVkVSRSBhZnRlciBUUAotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5leGNfZ2V0X2Nvbm4iLCByZS5nZXRNZXNzYWdlKCkpOwotICAgIAkgICAgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAocmUuZ2V0TWVzc2FnZSgpKTsKLSAgICAJfQotICAgIH0gICAgCisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLmV4Y19nZXRfY29ubiIsIHJlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uIChyZS5nZXRNZXNzYWdlKCkpOworICAgICAgICB9CisgICAgfQogCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBhY3R1YWwgU1FMQ29ubmVjdGlvbiBmcm9tIHRoZSBDb25uZWN0aW9uIHdyYXBwZXIKQEAgLTExNCwyMiArMTE0LDIyIEBACiAgICAgICovCiAgICAgcHVibGljIENvbm5lY3Rpb24gZ2V0Q29ubmVjdGlvbihDb25uZWN0aW9uIGNvbikgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAKLSAgICAgICAgQ29ubmVjdGlvbiBkcml2ZXJDb24gPSBjb247IAorICAgICAgICBDb25uZWN0aW9uIGRyaXZlckNvbiA9IGNvbjsKICAgICAgICAgaWYgKGNvbiBpbnN0YW5jZW9mIGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uSG9sZGVyKSB7Ci0gICAgICAgICAgIGRyaXZlckNvbiA9ICgoY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25Ib2xkZXIpIGNvbikuZ2V0Q29ubmVjdGlvbigpOyAKLSAgICAgICAgfSAKKyAgICAgICAgICAgZHJpdmVyQ29uID0gKChjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbkhvbGRlcikgY29uKS5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gZHJpdmVyQ29uOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgbG9naW4gdGltZW91dAogICAgICAqCiAgICAgICogQHJldHVybiBsb2dpbiB0aW1lb3V0LgotICAgICAqIEB0aHJvd3MJU1FMRXhjZXB0aW9uCUlmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIElmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0TG9naW5UaW1lb3V0KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKLSAgICAJcmV0dXJuCWxvZ2luVGltZW91dDsKKyAgICAgICAgcmV0dXJuICAgIGxvZ2luVGltZW91dDsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKQEAgLTE0MCw2NyArMTQwLDY3IEBACiAgICAgLyoqCiAgICAgICogU2V0IHRoZSBsb2dpbiB0aW1lb3V0CiAgICAgICoKLSAgICAgKiBAcGFyYW0JbG9naW5UaW1lb3V0CUxvZ2luIHRpbWVvdXQuCi0gICAgICogQHRocm93cwlTUUxFeGNlcHRpb24JSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCisgICAgICogQHBhcmFtICAgIGxvZ2luVGltZW91dCAgICBMb2dpbiB0aW1lb3V0LgorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIElmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldExvZ2luVGltZW91dChpbnQgbG9naW5UaW1lb3V0KSB0aHJvd3MgU1FMRXhjZXB0aW9uewotICAgIAl0aGlzLmxvZ2luVGltZW91dCA9IGxvZ2luVGltZW91dDsKKyAgICAgICAgdGhpcy5sb2dpblRpbWVvdXQgPSBsb2dpblRpbWVvdXQ7CiAgICAgfQotICAgIAotICAgIC8qKiAKKworICAgIC8qKgogICAgICAqIEdldCB0aGUgbG9nd3JpdGVyIG9iamVjdC4KICAgICAgKgogICAgICAqIEByZXR1cm4gPGNvZGU+IFByaW50V3JpdGVyIDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MJU1FMRXhjZXB0aW9uCUlmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIElmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgogICAgICAqLwogICAgIHB1YmxpYyBQcmludFdyaXRlciBnZXRMb2dXcml0ZXIoKSB0aHJvd3MgU1FMRXhjZXB0aW9uewotICAgIAlyZXR1cm4JbG9nV3JpdGVyOworICAgICAgICByZXR1cm4gICAgbG9nV3JpdGVyOwogICAgIH0KLSAgICAgICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGxvZ3dyaXRlciBvbiB0aGlzIG9iamVjdC4KICAgICAgKgogICAgICAqIEBwYXJhbSA8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MJU1FMRXhjZXB0aW9uCUlmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIElmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldExvZ1dyaXRlcihQcmludFdyaXRlciBsb2dXcml0ZXIpIHRocm93cyBTUUxFeGNlcHRpb257Ci0gICAgCXRoaXMubG9nV3JpdGVyID0gbG9nV3JpdGVyOwotICAgIH0gICAgICAgIAotICAgICAgICAKKyAgICAgICAgdGhpcy5sb2dXcml0ZXIgPSBsb2dXcml0ZXI7CisgICAgfQorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBkZXNjcmlwdGlvbi4KICAgICAgKgotICAgICAqIEByZXR1cm4JRGVzY3JpcHRpb24gYWJvdXQgdGhlIERhdGFTb3VyY2UuCisgICAgICogQHJldHVybiAgICBEZXNjcmlwdGlvbiBhYm91dCB0aGUgRGF0YVNvdXJjZS4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgewotICAgIAlyZXR1cm4gZGVzY3JpcHRpb247CisgICAgICAgIHJldHVybiBkZXNjcmlwdGlvbjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGRlc2NyaXB0aW9uLgogICAgICAqCiAgICAgICogQHBhcmFtIGRlc2NyaXB0aW9uIERlc2NyaXB0aW9uIGFib3V0IHRoZSBEYXRhU291cmNlLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERlc2NyaXB0aW9uKFN0cmluZyBkZXNjcmlwdGlvbikgewotICAgIAl0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247Ci0gICAgfSAgICAKLSAgICAKKyAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOworICAgIH0KKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgcmVmZXJlbmNlLgogICAgICAqCiAgICAgICogQHJldHVybiA8Y29kZT5SZWZlcmVuY2U8L2NvZGU+b2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyBSZWZlcmVuY2UgZ2V0UmVmZXJlbmNlKCkgewotICAgIAlyZXR1cm4gcmVmZXJlbmNlOworICAgICAgICByZXR1cm4gcmVmZXJlbmNlOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgcmVmZXJlbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCXJlZmVyZW5jZSA8Y29kZT5SZWZlcmVuY2U8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgcmVmZXJlbmNlIDxjb2RlPlJlZmVyZW5jZTwvY29kZT4gb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFJlZmVyZW5jZShSZWZlcmVuY2UgcmVmZXJlbmNlKSB7Ci0gICAgCXRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlOworICAgICAgICB0aGlzLnJlZmVyZW5jZSA9IHJlZmVyZW5jZTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW4uamF2YQppbmRleCA1NzRlZDY2Li5iZWMwZDZiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbi5qYXZhCkBAIC0xOCwxMyArMTgsMTMgQEAKIAogcHVibGljIGludGVyZmFjZSBKZGJjU2V0dXBBZG1pbiB7CiAKLSAgICBwdWJsaWMgdm9pZCBzZXRUYWJsZU5hbWUoU3RyaW5nIGRiKTsgCisgICAgcHVibGljIHZvaWQgc2V0VGFibGVOYW1lKFN0cmluZyBkYik7CiAKICAgICBwdWJsaWMgU3RyaW5nIGdldFRhYmxlTmFtZSgpOwogCi0gICAgcHVibGljIHZvaWQgc2V0Sm5kaU5hbWUoU3RyaW5nIG5hbWUpOyAKKyAgICBwdWJsaWMgdm9pZCBzZXRKbmRpTmFtZShTdHJpbmcgbmFtZSk7CiAKLSAgICBwdWJsaWMgU3RyaW5nIGdldEpuZGlOYW1lKCk7IAorICAgIHB1YmxpYyBTdHJpbmcgZ2V0Sm5kaU5hbWUoKTsKIAogICAgIHB1YmxpYyB2b2lkIHNldFNjaGVtYU5hbWUoU3RyaW5nIG5hbWUpOwogCkBAIC0zNCw2ICszNCw2IEBACiAKICAgICBwdWJsaWMgSW50ZWdlciBnZXROb09mUm93cygpOwogCi0gICAgcHVibGljIGJvb2xlYW4gY2hlY2tTZXR1cCgpOyAKKyAgICBwdWJsaWMgYm9vbGVhbiBjaGVja1NldHVwKCk7CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW5JbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluSW1wbC5qYXZhCmluZGV4IDNiZDdjYWQuLmZlYzc0NDMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW5JbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbkltcGwuamF2YQpAQCAtNjUsMTEgKzY1LDExIEBACiAKIHByaXZhdGUgdm9pZCBwcmludEhpZXJhcmNoeShDbGFzc0xvYWRlciBjbCwgaW50IGNudCl7CiB3aGlsZShjbCAhPSBudWxsKSB7Ci0JZm9yKGludCBpID0wOyBpIDwgY250OyBpKyspIAotCQlTeXN0ZW0ub3V0LnByaW50KCIgIiApOwotCVN5c3RlbS5vdXQucHJpbnRsbigiUEFSRU5UIDoiICsgY2wpOwotCWNsID0gY2wuZ2V0UGFyZW50KCk7Ci0JY250ICs9IDM7CisgICAgZm9yKGludCBpID0wOyBpIDwgY250OyBpKyspCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIiAiICk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJQQVJFTlQgOiIgKyBjbCk7CisgICAgY2wgPSBjbC5nZXRQYXJlbnQoKTsKKyAgICBjbnQgKz0gMzsKIH0KIH0KIApAQCAtNzgsMTAgKzc4LDEwIEBACiAgICAgICAgIGZvcihpbnQgaSA9MDsgaSA8IGNudDsgaSsrKQogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIiAiICk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUEFSRU5UIG9mIENsYXNzTG9hZGVyIDEgOiIgKyBjbDEpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiUEFSRU5UIG9mIENsYXNzTG9hZGVyIDIgOiIgKyBjbDIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiRVFVQUxTIDogIiArIChjbDEgPT0gY2wyKSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJQQVJFTlQgb2YgQ2xhc3NMb2FkZXIgMiA6IiArIGNsMik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJFUVVBTFMgOiAiICsgKGNsMSA9PSBjbDIpKTsKICAgICAgICAgY2wxID0gY2wxLmdldFBhcmVudCgpOwotCWNsMiA9IGNsMi5nZXRQYXJlbnQoKTsKKyAgICBjbDIgPSBjbDIuZ2V0UGFyZW50KCk7CiAgICAgICAgIGNudCArPSAzOwogfQogfQpAQCAtOTAsOTMgKzkwLDkzIEBACiAgICAgcHVibGljIGJvb2xlYW4gY2hlY2tTZXR1cCgpewogCiAgICAgICAgIGlmIChqbmRpTmFtZT09IG51bGwgfHwgam5kaU5hbWUudHJpbSgpLmVxdWFscygiIikpIHsKLQkgICByZXR1cm4gZmFsc2U7Ci0JfQorICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAgICAgICAgaWYgKHRhYmxlTmFtZT09IG51bGwgfHwgdGFibGVOYW1lLnRyaW0oKS5lcXVhbHMoIiIpKSB7Ci0JICAgcmV0dXJuIGZhbHNlOwotCX0KKyAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgICAgIENvbm5lY3Rpb24gY29uID0gbnVsbDsKLQlTdGF0ZW1lbnQgcyA9IG51bGw7Ci0JUmVzdWx0U2V0IHJzID0gbnVsbDsKLQlib29sZWFuIGIgPSBmYWxzZTsKKyAgICBTdGF0ZW1lbnQgcyA9IG51bGw7CisgICAgUmVzdWx0U2V0IHJzID0gbnVsbDsKKyAgICBib29sZWFuIGIgPSBmYWxzZTsKICAgICAgICAgdHJ5IHsKLQkgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkvL2RlYnVnCi0JQ2xhc3MgY2x6ID0gRGF0YVNvdXJjZS5jbGFzczsKKyAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAvL2RlYnVnCisgICAgQ2xhc3MgY2x6ID0gRGF0YVNvdXJjZS5jbGFzczsKIC8qCi0JaWYoY2x6LmdldENsYXNzTG9hZGVyKCkgIT0gbnVsbCkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkRhdGFTb3VyY2UncyBjbGFzeHMgOiAiICsgIGNsei5nZXROYW1lKCkgKyAgIiBjbGFzc2xvYWRlciAiICsgY2x6LmdldENsYXNzTG9hZGVyKCkpOwotCQlwcmludEhpZXJhcmNoeShjbHouZ2V0Q2xhc3NMb2FkZXIoKS5nZXRQYXJlbnQoKSwgOCk7Ci0JfQotCUNsYXNzIGNscyA9IGljLmxvb2t1cChqbmRpTmFtZSkuZ2V0Q2xhc3MoKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tlZCB1cCBjbGFzcydzIDogIiArIGNscy5nZXRQYWNrYWdlKCkgKyAiOiIgKyBjbHMuZ2V0TmFtZSgpICArICIgY2xhc3Nsb2FkZXIgIiAgKyBjbHMuZ2V0Q2xhc3NMb2FkZXIoKSk7Ci0JcHJpbnRIaWVyYXJjaHkoY2xzLmdldENsYXNzTG9hZGVyKCkuZ2V0UGFyZW50KCksIDgpOworICAgIGlmKGNsei5nZXRDbGFzc0xvYWRlcigpICE9IG51bGwpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEYXRhU291cmNlJ3MgY2xhc3hzIDogIiArICBjbHouZ2V0TmFtZSgpICsgICIgY2xhc3Nsb2FkZXIgIiArIGNsei5nZXRDbGFzc0xvYWRlcigpKTsKKyAgICAgICAgcHJpbnRIaWVyYXJjaHkoY2x6LmdldENsYXNzTG9hZGVyKCkuZ2V0UGFyZW50KCksIDgpOworICAgIH0KKyAgICBDbGFzcyBjbHMgPSBpYy5sb29rdXAoam5kaU5hbWUpLmdldENsYXNzKCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29rZWQgdXAgY2xhc3MncyA6ICIgKyBjbHMuZ2V0UGFja2FnZSgpICsgIjoiICsgY2xzLmdldE5hbWUoKSAgKyAiIGNsYXNzbG9hZGVyICIgICsgY2xzLmdldENsYXNzTG9hZGVyKCkpOworICAgIHByaW50SGllcmFyY2h5KGNscy5nZXRDbGFzc0xvYWRlcigpLmdldFBhcmVudCgpLCA4KTsKIAotCVN5c3RlbS5vdXQucHJpbnRsbigiQ2xhc3Nsb2FkZXJzIGVxdWFsID8gIiArICAoY2x6LmdldENsYXNzTG9hZGVyKCkgPT0gY2xzLmdldENsYXNzTG9hZGVyKCkpKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIiYqJiomKiYqIENvbXBhcmluZyBIaWVyYWNoeSBEYXRhU291cmNlIHZzIGxvb2tlZHVwIik7Ci0JaWYoY2x6LmdldENsYXNzTG9hZGVyKCkgIT0gbnVsbCkgewotCQljb21wYXJlSGllcmFyY2h5KGNsei5nZXRDbGFzc0xvYWRlcigpLCBjbHMuZ2V0Q2xhc3NMb2FkZXIoKSwgOCk7Ci0JfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2xhc3Nsb2FkZXJzIGVxdWFsID8gIiArICAoY2x6LmdldENsYXNzTG9hZGVyKCkgPT0gY2xzLmdldENsYXNzTG9hZGVyKCkpKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiYqJiomKiYqIENvbXBhcmluZyBIaWVyYWNoeSBEYXRhU291cmNlIHZzIGxvb2tlZHVwIik7CisgICAgaWYoY2x6LmdldENsYXNzTG9hZGVyKCkgIT0gbnVsbCkgeworICAgICAgICBjb21wYXJlSGllcmFyY2h5KGNsei5nZXRDbGFzc0xvYWRlcigpLCBjbHMuZ2V0Q2xhc3NMb2FkZXIoKSwgOCk7CisgICAgfQogCi0JU3lzdGVtLm91dC5wcmludGxuKCJCZWZvcmUgbG9va3VwIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJCZWZvcmUgbG9va3VwIik7CiAqLwotCU9iamVjdCBvID0gaWMubG9va3VwKGpuZGlOYW1lKTsKLS8vCVN5c3RlbS5vdXQucHJpbnRsbigiYWZ0ZXIgbG9va3VwIGxvb2t1cCIpOworICAgIE9iamVjdCBvID0gaWMubG9va3VwKGpuZGlOYW1lKTsKKy8vICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYWZ0ZXIgbG9va3VwIGxvb2t1cCIpOwogCi0JICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSlvIDsKKyAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKW8gOwogLyoKLQlTeXN0ZW0ub3V0LnByaW50bG4oImFmdGVyIGNhc3QiKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0gVHJ5aW5nIG91ciBTdHVmZiAhISEiKTsKLQl0cnkgewotCQlDbGFzcyBvMSA9IChDbGFzcy5mb3JOYW1lKCJjb20uc3VuLmpkYmNyYS5zcGkuRGF0YVNvdXJjZSIpKTsKLQkJQ2xhc3NMb2FkZXIgY2wxID0gbzEuZ2V0Q2xhc3NMb2FkZXIoKTsKLQkJQ2xhc3NMb2FkZXIgY2wyID0gRGF0YVNvdXJjZS5jbGFzcy5nZXRDbGFzc0xvYWRlcigpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNsMSA9PSBDbDIiICsgKGNsMSA9PSBjbDIpKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJDbGFzc2VzIGVxdWFsIiArIChEYXRhU291cmNlLmNsYXNzID09IG8xKSk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCWV4LnByaW50U3RhY2tUcmFjZSgpOwotCX0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImFmdGVyIGNhc3QiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0gVHJ5aW5nIG91ciBTdHVmZiAhISEiKTsKKyAgICB0cnkgeworICAgICAgICBDbGFzcyBvMSA9IChDbGFzcy5mb3JOYW1lKCJjb20uc3VuLmpkYmNyYS5zcGkuRGF0YVNvdXJjZSIpKTsKKyAgICAgICAgQ2xhc3NMb2FkZXIgY2wxID0gbzEuZ2V0Q2xhc3NMb2FkZXIoKTsKKyAgICAgICAgQ2xhc3NMb2FkZXIgY2wyID0gRGF0YVNvdXJjZS5jbGFzcy5nZXRDbGFzc0xvYWRlcigpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNsMSA9PSBDbDIiICsgKGNsMSA9PSBjbDIpKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDbGFzc2VzIGVxdWFsIiArIChEYXRhU291cmNlLmNsYXNzID09IG8xKSk7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KICovCiAgICAgICAgICAgICBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIFN0cmluZyBmdWxsVGFibGVOYW1lID0gdGFibGVOYW1lOwotCSAgICBpZiAoc2NoZW1hTmFtZSAhPSBudWxsICYmICghKHNjaGVtYU5hbWUudHJpbSgpLmVxdWFscygiIikpKSkgewotCSAgICAgICAgZnVsbFRhYmxlTmFtZSA9IHNjaGVtYU5hbWUudHJpbSgpICsgIi4iICsgZnVsbFRhYmxlTmFtZTsKLQkgICAgfQotCSAgICBTdHJpbmcgcXJ5ID0gInNlbGVjdCAqIGZyb20gIiArIGZ1bGxUYWJsZU5hbWU7IAorICAgICAgICBTdHJpbmcgZnVsbFRhYmxlTmFtZSA9IHRhYmxlTmFtZTsKKyAgICAgICAgaWYgKHNjaGVtYU5hbWUgIT0gbnVsbCAmJiAoIShzY2hlbWFOYW1lLnRyaW0oKS5lcXVhbHMoIiIpKSkpIHsKKyAgICAgICAgICAgIGZ1bGxUYWJsZU5hbWUgPSBzY2hlbWFOYW1lLnRyaW0oKSArICIuIiArIGZ1bGxUYWJsZU5hbWU7CisgICAgICAgIH0KKyAgICAgICAgU3RyaW5nIHFyeSA9ICJzZWxlY3QgKiBmcm9tICIgKyBmdWxsVGFibGVOYW1lOwogCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhlY3V0aW5nIHF1ZXJ5IDoiICsgcXJ5KTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGVjdXRpbmcgcXVlcnkgOiIgKyBxcnkpOwogCi0JICAgIHMgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7Ci0JICAgIHJzID0gcy5leGVjdXRlUXVlcnkocXJ5KTsgCisgICAgICAgIHMgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgIHJzID0gcy5leGVjdXRlUXVlcnkocXJ5KTsKIAogICAgICAgICAgICAgaW50IGkgPSAwOwotCSAgICBpZiAocnMubmV4dCgpKSB7Ci0JICAgICAgICBpKys7Ci0JICAgIH0KKyAgICAgICAgaWYgKHJzLm5leHQoKSkgeworICAgICAgICAgICAgaSsrOworICAgICAgICB9CiAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTm8gb2Ygcm93cyBmb3VuZDoiICsgaSk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk5vIG9mIHJvd3MgZXhwZWN0ZWQ6IiArIG5vT2ZSb3dzKTsKIAotCSAgICBpZiAoaSA9PSBub09mUm93cy5pbnRWYWx1ZSgpKSB7Ci0JICAgICAgIGIgPSB0cnVlOwotCSAgICB9IGVsc2UgewotCSAgICAgICBiID0gZmFsc2U7Ci0JICAgIH0KLQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIGIgPSBmYWxzZTsKLQl9IGZpbmFsbHkgewotCSAgICB0cnkgewotCSAgICAgICAgaWYgKHJzICE9IG51bGwpIHJzLmNsb3NlKCk7Ci0JICAgICAgICBpZiAocyAhPSBudWxsKSBzLmNsb3NlKCk7Ci0JICAgICAgICBpZiAoY29uICE9IG51bGwpIGNvbi5jbG9zZSgpOworICAgICAgICBpZiAoaSA9PSBub09mUm93cy5pbnRWYWx1ZSgpKSB7CisgICAgICAgICAgIGIgPSB0cnVlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICBiID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIGIgPSBmYWxzZTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgaWYgKHJzICE9IG51bGwpIHJzLmNsb3NlKCk7CisgICAgICAgICAgICBpZiAocyAhPSBudWxsKSBzLmNsb3NlKCk7CisgICAgICAgICAgICBpZiAoY29uICE9IG51bGwpIGNvbi5jbG9zZSgpOwogICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgfQotCX0KLQlTeXN0ZW0ub3V0LnByaW50bG4oIlJldHVybmluZyBzZXR1cCA6IiArYik7Ci0JcmV0dXJuIGI7CisgICAgICAgIH0KKyAgICB9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXR1cm5pbmcgc2V0dXAgOiIgK2IpOworICAgIHJldHVybiBiOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Mb2NhbFRyYW5zYWN0aW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0xvY2FsVHJhbnNhY3Rpb24uamF2YQppbmRleCA4ZWJlMDU3Li5jNTRhMjE2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0xvY2FsVHJhbnNhY3Rpb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0xvY2FsVHJhbnNhY3Rpb24uamF2YQpAQCAtMjMsNDUgKzIzLDQ1IEBACiAvKioKICAqIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDgvMDMKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA4LzAzCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiBwdWJsaWMgY2xhc3MgTG9jYWxUcmFuc2FjdGlvbiBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLkxvY2FsVHJhbnNhY3Rpb24gewotICAgIAorCiAgICAgcHJpdmF0ZSBNYW5hZ2VkQ29ubmVjdGlvbiBtYzsKLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdG9yIGZvciA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPi4KLSAgICAgKiBAcGFyYW0JbWMJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHRoYXQgcmV0dXJucwotICAgICAqCQkJdGhpcyA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBvYmplY3QgYXMKLSAgICAgKgkJCWEgcmVzdWx0IG9mIDxjb2RlPmdldExvY2FsVHJhbnNhY3Rpb248L2NvZGU+CisgICAgICogQHBhcmFtICAgIG1jICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiB0aGF0IHJldHVybnMKKyAgICAgKiAgICAgICAgICAgIHRoaXMgPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gb2JqZWN0IGFzCisgICAgICogICAgICAgICAgICBhIHJlc3VsdCBvZiA8Y29kZT5nZXRMb2NhbFRyYW5zYWN0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBMb2NhbFRyYW5zYWN0aW9uKE1hbmFnZWRDb25uZWN0aW9uIG1jKSB7CiAgICAgICAgIHRoaXMubWMgPSBtYzsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBCZWdpbiBhIGxvY2FsIHRyYW5zYWN0aW9uLgogICAgICAqCi0gICAgICogQHRocm93cwlMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNoYW5naW5nCi0gICAgICoJCQkJCQl0aGUgYXV0b2NvbW1pdCBtb2RlIG9mIHRoZSBwaHlzaWNhbAotICAgICAqCQkJCQkJY29ubmVjdGlvbgorICAgICAqIEB0aHJvd3MgICAgTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjaGFuZ2luZworICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGF1dG9jb21taXQgbW9kZSBvZiB0aGUgcGh5c2ljYWwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBiZWdpbigpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIC8vR0pDSU5UCi0JbWMudHJhbnNhY3Rpb25TdGFydGVkKCk7CisgICAgbWMudHJhbnNhY3Rpb25TdGFydGVkKCk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBtYy5nZXRBY3R1YWxDb25uZWN0aW9uKCkuc2V0QXV0b0NvbW1pdChmYWxzZSk7CiAgICAgICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbW1pdCBhIGxvY2FsIHRyYW5zYWN0aW9uLgotICAgICAqIEB0aHJvd3MJTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjaGFuZ2luZwotICAgICAqCQkJCQkJdGhlIGF1dG9jb21taXQgbW9kZSBvZiB0aGUgcGh5c2ljYWwKLSAgICAgKgkJCQkJCWNvbm5lY3Rpb24gb3IgY29tbWl0dGluZyB0aGUgdHJhbnNhY3Rpb24KKyAgICAgKiBAdGhyb3dzICAgIExvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2hhbmdpbmcKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhdXRvY29tbWl0IG1vZGUgb2YgdGhlIHBoeXNpY2FsCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uIG9yIGNvbW1pdHRpbmcgdGhlIHRyYW5zYWN0aW9uCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgY29tbWl0KCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgRXhjZXB0aW9uIGUgPSBudWxsOwpAQCAtNzIsMTUgKzcyLDE1IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICAgICAgLy9HSkNJTlQKLQltYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOworICAgIG1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUm9sbGJhY2sgYSBsb2NhbCB0cmFuc2FjdGlvbi4KLSAgICAgKiAKLSAgICAgKiBAdGhyb3dzCUxvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2hhbmdpbmcKLSAgICAgKgkJCQkJCXRoZSBhdXRvY29tbWl0IG1vZGUgb2YgdGhlIHBoeXNpY2FsCi0gICAgICoJCQkJCQljb25uZWN0aW9uIG9yIHJvbGxpbmcgYmFjayB0aGUgdHJhbnNhY3Rpb24KKyAgICAgKgorICAgICAqIEB0aHJvd3MgICAgTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjaGFuZ2luZworICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGF1dG9jb21taXQgbW9kZSBvZiB0aGUgcGh5c2ljYWwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gb3Igcm9sbGluZyBiYWNrIHRoZSB0cmFuc2FjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJvbGxiYWNrKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKQEAgLTkwLDcgKzkwLDcgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgICAgICAvL0dKQ0lOVAotCW1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CisgICAgbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb24uamF2YQppbmRleCAzMGY0NjBhLi4yZGFkNTlhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbi5qYXZhCkBAIC00MSw4ICs0MSw4IEBACiAvKioKICAqIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzIyCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8yMgorICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogcHVibGljIGNsYXNzIE1hbmFnZWRDb25uZWN0aW9uIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gewogCkBAIC01Miw3ICs1Miw3IEBACiAKICAgICBwcml2YXRlIGJvb2xlYW4gaXNEZXN0cm95ZWQgPSBmYWxzZTsKICAgICBwcml2YXRlIGJvb2xlYW4gaXNVc2FibGUgPSB0cnVlOwotICAgIAorCiAgICAgcHJpdmF0ZSBpbnQgY29ubmVjdGlvblR5cGUgPSBJU05PVEFQT09MRURDT05ORUNUSU9OOwogICAgIHByaXZhdGUgUG9vbGVkQ29ubmVjdGlvbiBwYyA9IG51bGw7CiAgICAgcHJpdmF0ZSBqYXZhLnNxbC5Db25uZWN0aW9uIGFjdHVhbENvbm5lY3Rpb24gPSBudWxsOwpAQCAtNjIsNyArNjIsNyBAQAogICAgIHByaXZhdGUgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG1jZiA9IG51bGw7CiAgICAgcHJpdmF0ZSBYQVJlc291cmNlIHhhciA9IG51bGw7CiAgICAgcHVibGljIENvbm5lY3Rpb25Ib2xkZXIgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZTsKLSAgICAKKwogICAgIC8vR0pDSU5UCiAgICAgcHJpdmF0ZSBpbnQgaXNvbGF0aW9uTGV2ZWxXaGVuQ2xlYW5lZDsKICAgICBwcml2YXRlIGJvb2xlYW4gaXNDbGVhbiA9IGZhbHNlOwpAQCAtNzcsNzEgKzc3LDcxIEBACiAgICAgc3RhdGljIHsKICAgICAgICAgX2xvZ2dlciA9IExvZ2dlci5nZXRBbm9ueW1vdXNMb2dnZXIoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+LiBUaGUgcG9vbGVkQ29ubiBwYXJhbWV0ZXIgaXMgZXhwZWN0ZWQKLSAgICAgKiB0byBiZSBudWxsIGFuZCBzcWxDb25uIHBhcmFtZXRlciBpcyB0aGUgYWN0dWFsIGNvbm5lY3Rpb24gaW4gY2FzZSB3aGVyZSAKLSAgICAgKiB0aGUgYWN0dWFsIGNvbm5lY3Rpb24gaXMgZ290IGZyb20gYSBub24gcG9vbGVkIGRhdGFzb3VyY2Ugb2JqZWN0LiBUaGUgCisgICAgICogdG8gYmUgbnVsbCBhbmQgc3FsQ29ubiBwYXJhbWV0ZXIgaXMgdGhlIGFjdHVhbCBjb25uZWN0aW9uIGluIGNhc2Ugd2hlcmUKKyAgICAgKiB0aGUgYWN0dWFsIGNvbm5lY3Rpb24gaXMgZ290IGZyb20gYSBub24gcG9vbGVkIGRhdGFzb3VyY2Ugb2JqZWN0LiBUaGUKICAgICAgKiBwb29sZWRDb25uIHBhcmFtZXRlciBpcyBleHBlY3RlZCB0byBiZSBub24gbnVsbCBhbmQgc3FsQ29ubiBwYXJhbWV0ZXIKICAgICAgKiBpcyBleHBlY3RlZCB0byBiZSBudWxsIGluIHRoZSBjYXNlIHdoZXJlIHRoZSBkYXRhc291cmNlIG9iamVjdCBpcyBhCiAgICAgICogY29ubmVjdGlvbiBwb29sIGRhdGFzb3VyY2Ugb3IgYW4geGEgZGF0YXNvdXJjZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlwb29sZWRDb25uCTxjb2RlPlBvb2xlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpbiBjYXNlIHRoZSAKLSAgICAgKgkJCQlwaHlzaWNhbCBjb25uZWN0aW9uIGlzIHRvIGJlIG9idGFpbmVkIGZyb20gYSBwb29sZWQKLSAgICAgKgkJCQk8Y29kZT5EYXRhU291cmNlPC9jb2RlPjsgbnVsbCBvdGhlcndpc2UKLSAgICAgKiBAcGFyYW0Jc3FsQ29ubgk8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaW4gY2FzZSB0aGUgcGh5c2ljYWwKLSAgICAgKgkJCWNvbm5lY3Rpb24gaXMgdG8gYmUgb2J0YWluZWQgZnJvbSBhIG5vbiBwb29sZWQgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT47Ci0gICAgICoJCQludWxsIG90aGVyd2lzZQotICAgICAqIEBwYXJhbQlwYXNzd2RDcmVkCW9iamVjdCBjb25hdGluaW5nIHRoZQotICAgICAqCQkJCXVzZXIgYW5kIHBhc3N3b3JkIGZvciBhbGxvY2F0aW5nIHRoZSBjb25uZWN0aW9uCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QKLSAgICAgKgkJCQkJdGhhdCBjcmVhdGVkIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdAotICAgICAqCQkJCQlpcyBub3QgdGhlIHNhbWUgYXMgcmV0dXJuZWQgYnkgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgotICAgICAqCQkJCQlvYmplY3QgcGFzc2VkCisgICAgICogQHBhcmFtICAgIHBvb2xlZENvbm4gICAgPGNvZGU+UG9vbGVkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGluIGNhc2UgdGhlCisgICAgICogICAgICAgICAgICAgICAgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyB0byBiZSBvYnRhaW5lZCBmcm9tIGEgcG9vbGVkCisgICAgICogICAgICAgICAgICAgICAgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT47IG51bGwgb3RoZXJ3aXNlCisgICAgICogQHBhcmFtICAgIHNxbENvbm4gICAgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGluIGNhc2UgdGhlIHBoeXNpY2FsCisgICAgICogICAgICAgICAgICBjb25uZWN0aW9uIGlzIHRvIGJlIG9idGFpbmVkIGZyb20gYSBub24gcG9vbGVkIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+OworICAgICAqICAgICAgICAgICAgbnVsbCBvdGhlcndpc2UKKyAgICAgKiBAcGFyYW0gICAgcGFzc3dkQ3JlZCAgICBvYmplY3QgY29uYXRpbmluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICB1c2VyIGFuZCBwYXNzd29yZCBmb3IgYWxsb2NhdGluZyB0aGUgY29ubmVjdGlvbgorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0CisgICAgICogICAgICAgICAgICAgICAgICAgIHRoYXQgY3JlYXRlZCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgaXMgbm90IHRoZSBzYW1lIGFzIHJldHVybmVkIGJ5IDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgb2JqZWN0IHBhc3NlZAogICAgICAqLwotICAgIHB1YmxpYyBNYW5hZ2VkQ29ubmVjdGlvbihQb29sZWRDb25uZWN0aW9uIHBvb2xlZENvbm4sIGphdmEuc3FsLkNvbm5lY3Rpb24gc3FsQ29ubiwgCisgICAgcHVibGljIE1hbmFnZWRDb25uZWN0aW9uKFBvb2xlZENvbm5lY3Rpb24gcG9vbGVkQ29ubiwgamF2YS5zcWwuQ29ubmVjdGlvbiBzcWxDb25uLAogICAgICAgICBQYXNzd29yZENyZWRlbnRpYWwgcGFzc3dkQ3JlZCwgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG1jZikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYocG9vbGVkQ29ubiA9PSBudWxsICYmIHNxbENvbm4gPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJDb25uZWN0aW9uIG9iamVjdCBjYW5ub3QgYmUgbnVsbCIpOwogICAgICAgICB9CiAKLQlpZiAoY29ubmVjdGlvblR5cGUgPT0gSVNOT1RBUE9PTEVEQ09OTkVDVElPTiApIHsKLQkgICAgYWN0dWFsQ29ubmVjdGlvbiA9IHNxbENvbm47Ci0JfQorICAgIGlmIChjb25uZWN0aW9uVHlwZSA9PSBJU05PVEFQT09MRURDT05ORUNUSU9OICkgeworICAgICAgICBhY3R1YWxDb25uZWN0aW9uID0gc3FsQ29ubjsKKyAgICB9CiAKICAgICAgICAgcGMgPSBwb29sZWRDb25uOwogICAgICAgICBjb25uZWN0aW9uSGFuZGxlcyA9IG5ldyBIYXNodGFibGUoKTsKICAgICAgICAgcGFzc3dkQ3JlZGVudGlhbCA9IHBhc3N3ZENyZWQ7CiAgICAgICAgIHRoaXMubWNmID0gbWNmOwotICAgICAgICBpZihwYXNzd2RDcmVkZW50aWFsICE9IG51bGwgJiYgIAorICAgICAgICBpZihwYXNzd2RDcmVkZW50aWFsICE9IG51bGwgJiYKICAgICAgICAgICAgIHRoaXMubWNmLmVxdWFscyhwYXNzd2RDcmVkZW50aWFsLmdldE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSgpKSA9PSBmYWxzZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IHRoYXQgaGFzIGNyZWF0ZWQgdGhpcyAiICsgCisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgdGhhdCBoYXMgY3JlYXRlZCB0aGlzICIgKwogICAgICAgICAgICAgICAgICJNYW5hZ2VkQ29ubmVjdGlvbiBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSByZXR1cm5lZCBieSIgKwogICAgICAgICAgICAgICAgICAgICAiIHRoZSBQYXNzd29yZENyZWRlbnRpYWwgZm9yIHRoaXMgTWFuYWdlZENvbm5lY3Rpb24iKTsKICAgICAgICAgfQogICAgICAgICBsb2dXcml0ZXIgPSBtY2YuZ2V0TG9nV3JpdGVyKCk7CiAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOwotCWNlID0gbmV3IENvbm5lY3Rpb25FdmVudCh0aGlzLCBDb25uZWN0aW9uRXZlbnQuQ09OTkVDVElPTl9DTE9TRUQpOworICAgIGNlID0gbmV3IENvbm5lY3Rpb25FdmVudCh0aGlzLCBDb25uZWN0aW9uRXZlbnQuQ09OTkVDVElPTl9DTE9TRUQpOwogICAgIH0KIAogICAgIC8qKgogICAgICAqIEFkZHMgYSBjb25uZWN0aW9uIGV2ZW50IGxpc3RlbmVyIHRvIHRoZSBNYW5hZ2VkQ29ubmVjdGlvbiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlsaXN0ZW5lcgk8Y29kZT5Db25uZWN0aW9uRXZlbnRMaXN0ZW5lcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbGlzdGVuZXIgICAgPGNvZGU+Q29ubmVjdGlvbkV2ZW50TGlzdGVuZXI8L2NvZGU+CiAgICAgICogQHNlZSA8Y29kZT5yZW1vdmVDb25uZWN0aW9uRXZlbnRMaXN0ZW5lcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBhZGRDb25uZWN0aW9uRXZlbnRMaXN0ZW5lcihDb25uZWN0aW9uRXZlbnRMaXN0ZW5lciBsaXN0ZW5lcikgewotCXRoaXMubGlzdGVuZXIgPSBsaXN0ZW5lcjsKKyAgICB0aGlzLmxpc3RlbmVyID0gbGlzdGVuZXI7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogVXNlZCBieSB0aGUgY29udGFpbmVyIHRvIGNoYW5nZSB0aGUgYXNzb2NpYXRpb24gb2YgYW4gYXBwbGljYXRpb24tbGV2ZWwgCisgICAgICogVXNlZCBieSB0aGUgY29udGFpbmVyIHRvIGNoYW5nZSB0aGUgYXNzb2NpYXRpb24gb2YgYW4gYXBwbGljYXRpb24tbGV2ZWwKICAgICAgKiBjb25uZWN0aW9uIGhhbmRsZSB3aXRoIGEgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCWNvbm5lY3Rpb24JPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdG8gYmUgYXNzb2NpYXRlZCB3aXRoCi0gICAgICoJCQkJdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vIG1vcmUKLSAgICAgKgkJCQkJdmFsaWQgb3IgdGhlIGNvbm5lY3Rpb24gaGFuZGxlIHBhc3NlZCBpcyBudWxsCisgICAgICogQHBhcmFtICAgIGNvbm5lY3Rpb24gICAgPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdG8gYmUgYXNzb2NpYXRlZCB3aXRoCisgICAgICogICAgICAgICAgICAgICAgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vIG1vcmUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgdmFsaWQgb3IgdGhlIGNvbm5lY3Rpb24gaGFuZGxlIHBhc3NlZCBpcyBudWxsCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgYXNzb2NpYXRlQ29ubmVjdGlvbihPYmplY3QgY29ubmVjdGlvbikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTE1MiwxMSArMTUyLDExIEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkNvbm5lY3Rpb24gaGFuZGxlIGNhbm5vdCBiZSBudWxsIik7CiAgICAgICAgIH0KICAgICAgICAgQ29ubmVjdGlvbkhvbGRlciBjaCA9IChDb25uZWN0aW9uSG9sZGVyKSBjb25uZWN0aW9uOwotICAgICAgICAKKwogICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWMgPSAoY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uKWNoLmdldE1hbmFnZWRDb25uZWN0aW9uKCk7Ci0JbWMuYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7Ci0JaXNDbGVhbiA9IGZhbHNlOwotICAgICAgICAKKyAgICBtYy5hY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKKyAgICBpc0NsZWFuID0gZmFsc2U7CisKICAgICAgICAgY2guYXNzb2NpYXRlQ29ubmVjdGlvbihhY3R1YWxDb25uZWN0aW9uLCB0aGlzKTsKICAgICAgICAgLyoqCiAgICAgICAgICAqIFRoZSBleHBlY3RhdGlvbiBmcm9tIHRoZSBhYm92ZSBtZXRob2QgaXMgdGhhdCB0aGUgY29ubmVjdGlvbiBob2xkZXIKQEAgLTE2NSwzNCArMTY1LDM0IEBACiAgICAgICAgICAqIHRvIHRoZSBNYW5hZ2VkQ29ubmVjdGlvbiBpbnN0YW5jZSB3aXRoIHRoaXMgTWFuYWdlZENvbm5lY3Rpb24gaW5zdGFuY2UuCiAgICAgICAgICAqIEFueSBwcmV2aW91cyBzdGF0ZW1lbnRzIGFuZCByZXN1bHQgc2V0cyBhbHNvIG5lZWQgdG8gYmUgcmVtb3ZlZC4KICAgICAgICAgICovCi0gICAgICAgICAKKwogICAgICAgICAgaWYoYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSAhPSBudWxsKSB7CiAgICAgICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlLnNldEFjdGl2ZShmYWxzZSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgY2guc2V0QWN0aXZlKHRydWUpOwotICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gY2g7IAorICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gY2g7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogQXBwbGljYXRpb24gc2VydmVyIGNhbGxzIHRoaXMgbWV0aG9kIHRvIGZvcmNlIGFueSBjbGVhbnVwIG9uIHRoZSAKKyAgICAgKiBBcHBsaWNhdGlvbiBzZXJ2ZXIgY2FsbHMgdGhpcyBtZXRob2QgdG8gZm9yY2UgYW55IGNsZWFudXAgb24gdGhlCiAgICAgICogPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLiBUaGlzIG1ldGhvZCBjYWxscyB0aGUgaW52YWxpZGF0ZQogICAgICAqIG1ldGhvZCBvbiBhbGwgQ29ubmVjdGlvbkhhbmRsZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+LgotICAgICAqIAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm8gbW9yZSB2YWxpZAorICAgICAqCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBubyBtb3JlIHZhbGlkCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgY2xlYW51cCgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGNsZWFudXAiKTsKICAgICAgICAgfQogICAgICAgICBjaGVja0lmVmFsaWQoKTsKLSAgICAgICAgCisKICAgICAgICAgLyoqCiAgICAgICAgICAqIG1heSBuZWVkIHRvIHNldCB0aGUgYXV0b2NvbW1pdCB0byB0cnVlIGZvciB0aGUgbm9uLXBvb2xlZCBjYXNlLgogICAgICAgICAgKi8KICAgICAgICAgLy9HSkNJTlQKLQkvL2lmIChhY3R1YWxDb25uZWN0aW9uICE9IG51bGwpIHsKLQlpZiAoY29ubmVjdGlvblR5cGUgPT0gSVNOT1RBUE9PTEVEQ09OTkVDVElPTiApIHsKKyAgICAvL2lmIChhY3R1YWxDb25uZWN0aW9uICE9IG51bGwpIHsKKyAgICBpZiAoY29ubmVjdGlvblR5cGUgPT0gSVNOT1RBUE9PTEVEQ09OTkVDVElPTiApIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGlzb2xhdGlvbkxldmVsV2hlbkNsZWFuZWQgPSBhY3R1YWxDb25uZWN0aW9uLmdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCk7CiAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKQEAgLTIwMSwxNyArMjAxLDE3IEBACiAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpc0NsZWFuID0gdHJ1ZTsKLSAgICAgICAgCisKICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGhpcyBtZXRob2QgcmVtb3ZlcyBhbGwgdGhlIGNvbm5lY3Rpb24gaGFuZGxlcyBmcm9tIHRoZSB0YWJsZQogICAgICAqIG9mIGNvbm5lY3Rpb24gaGFuZGxlcyBhbmQgaW52YWxpZGF0ZXMgYWxsIG9mIHRoZW0gc28gdGhhdCBhbnkKICAgICAgKiBvcGVyYXRpb24gb24gdGhvc2UgY29ubmVjdGlvbiBoYW5kbGVzIHRocm93cyBhbiBleGNlcHRpb24uCiAgICAgICoKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGEgcHJvYmxlbSBpbiByZXRyaWV2aW5nCi0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAl0aGUgY29ubmVjdGlvbiBoYW5kbGVzCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhIHByb2JsZW0gaW4gcmV0cmlldmluZworICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNvbm5lY3Rpb24gaGFuZGxlcwogICAgICAqLwogICAgIHByaXZhdGUgdm9pZCBpbnZhbGlkYXRlQWxsQ29ubmVjdGlvbkhhbmRsZXMoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBTZXQgaGFuZGxlcyA9IGNvbm5lY3Rpb25IYW5kbGVzLmtleVNldCgpOwpAQCAtMjI2LDIyICsyMjYsMjIgQEAKICAgICAgICAgfQogICAgICAgICBjb25uZWN0aW9uSGFuZGxlcy5jbGVhcigpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIERlc3Ryb3lzIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIHRvIHRoZSB1bmRlcmx5aW5nIHJlc291cmNlIG1hbmFnZXIuCi0gICAgICogCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjbG9zaW5nIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uCisgICAgICoKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNsb3NpbmcgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGRlc3Ryb3kiKTsKICAgICAgICAgfQotCS8vR0pDSU5UCi0JaWYoaXNEZXN0cm95ZWQgPT0gdHJ1ZSkgewotCSAgICByZXR1cm47CQotCX0KKyAgICAvL0dKQ0lOVAorICAgIGlmKGlzRGVzdHJveWVkID09IHRydWUpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotCWFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOworICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgaWYoY29ubmVjdGlvblR5cGUgPT0gSVNYQUNPTk5FQ1RJT04gfHwgY29ubmVjdGlvblR5cGUgPT0gSVNQT09MRURDT05ORUNUSU9OKSB7CiAgICAgICAgICAgICAgICAgcGMuY2xvc2UoKTsKQEAgLTI1NSwyOCArMjU1LDI4IEBACiAgICAgICAgICAgICBpc0Rlc3Ryb3llZCA9IHRydWU7CiAgICAgICAgICAgICBwYXNzd2RDcmVkZW50aWFsID0gbnVsbDsKICAgICAgICAgICAgIGNvbm5lY3Rpb25IYW5kbGVzID0gbnVsbDsKLSAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGZvbGxvd2luZyBleGNlcHRpb24gaGFzIG9jY3VyZWQgZHVyaW5nIGRlc3Ryb3k6ICIgCisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBmb2xsb3dpbmcgZXhjZXB0aW9uIGhhcyBvY2N1cmVkIGR1cmluZyBkZXN0cm95OiAiCiAgICAgICAgICAgICAgICAgKyBzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICAgICAgaXNEZXN0cm95ZWQgPSB0cnVlOwogICAgICAgICBwYXNzd2RDcmVkZW50aWFsID0gbnVsbDsKICAgICAgICAgY29ubmVjdGlvbkhhbmRsZXMgPSBudWxsOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSBuZXcgY29ubmVjdGlvbiBoYW5kbGUgZm9yIHRoZSB1bmRlcmx5aW5nIHBoeXNpY2FsIAorICAgICAqIENyZWF0ZXMgYSBuZXcgY29ubmVjdGlvbiBoYW5kbGUgZm9yIHRoZSB1bmRlcmx5aW5nIHBoeXNpY2FsCiAgICAgICogY29ubmVjdGlvbiByZXByZXNlbnRlZCBieSB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCXN1YmplY3QJPGNvZGU+U3ViamVjdDwvY29kZT4gcGFyYW1ldGVyIG5lZWRlZCBmb3IgYXV0aGVudGljYXRpb24KLSAgICAgKiBAcGFyYW0JY3hSZXFJbmZvCTxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gY2FycmllcyB0aGUgdXNlciAKLSAgICAgKiAgICAgICAJICAgICAgICAgCWFuZCBwYXNzd29yZCByZXF1aXJlZCBmb3IgZ2V0dGluZyB0aGlzIGNvbm5lY3Rpb24uCi0gICAgICogQHJldHVybglDb25uZWN0aW9uCXRoZSBjb25uZWN0aW9uIGhhbmRsZSA8Y29kZT5PYmplY3Q8L2NvZGU+Ci0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZSAKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCXBoeXNpY2FsIGNvbm5lY3Rpb24gZnJvbSB0aGUgcG9vbGVkIGNvbm5lY3Rpb24gCi0gICAgICogQHRocm93cwlTZWN1cml0eUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhIG1pc21hdGNoIGJldHdlZW4gdGhlCi0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAlwYXNzd29yZCBjcmVkZW50aWFscyBvciByZWF1dGhlbnRpY2F0aW9uIGlzIHJlcXVlc3RlZAorICAgICAqIEBwYXJhbSAgICBzdWJqZWN0ICAgIDxjb2RlPlN1YmplY3Q8L2NvZGU+IHBhcmFtZXRlciBuZWVkZWQgZm9yIGF1dGhlbnRpY2F0aW9uCisgICAgICogQHBhcmFtICAgIGN4UmVxSW5mbyAgICA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IGNhcnJpZXMgdGhlIHVzZXIKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBwYXNzd29yZCByZXF1aXJlZCBmb3IgZ2V0dGluZyB0aGlzIGNvbm5lY3Rpb24uCisgICAgICogQHJldHVybiAgICBDb25uZWN0aW9uICAgIHRoZSBjb25uZWN0aW9uIGhhbmRsZSA8Y29kZT5PYmplY3Q8L2NvZGU+CisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGh5c2ljYWwgY29ubmVjdGlvbiBmcm9tIHRoZSBwb29sZWQgY29ubmVjdGlvbgorICAgICAqIEB0aHJvd3MgICAgU2VjdXJpdHlFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYSBtaXNtYXRjaCBiZXR3ZWVuIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQgY3JlZGVudGlhbHMgb3IgcmVhdXRoZW50aWNhdGlvbiBpcyByZXF1ZXN0ZWQKICAgICAgKi8KLSAgICBwdWJsaWMgT2JqZWN0IGdldENvbm5lY3Rpb24oU3ViamVjdCBzdWIsIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mbyBjeFJlcUluZm8pIAorICAgIHB1YmxpYyBPYmplY3QgZ2V0Q29ubmVjdGlvbihTdWJqZWN0IHN1YiwgamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxSW5mbykKICAgICAgICAgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBnZXRDb25uZWN0aW9uIik7CkBAIC0yODQsMTQgKzI4NCwxNCBAQAogICAgICAgICBjaGVja0lmVmFsaWQoKTsKICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mbyBjeFJlcXVlc3RJbmZvID0gKGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm8pIGN4UmVxSW5mbzsKICAgICAgICAgUGFzc3dvcmRDcmVkZW50aWFsIHBhc3N3ZENyZWQgPSBTZWN1cml0eVV0aWxzLmdldFBhc3N3b3JkQ3JlZGVudGlhbCh0aGlzLm1jZiwgc3ViLCBjeFJlcXVlc3RJbmZvKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIGlmKFNlY3VyaXR5VXRpbHMuaXNQYXNzd29yZENyZWRlbnRpYWxFcXVhbCh0aGlzLnBhc3N3ZENyZWRlbnRpYWwsIHBhc3N3ZENyZWQpID09IGZhbHNlKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgamFrYXJ0YS5yZXNvdXJjZS5zcGkuU2VjdXJpdHlFeGNlcHRpb24oIlJlLWF1dGhlbnRpY2F0aW9uIG5vdCBzdXBwb3J0ZWQiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAvL0dKQ0lOVAogICAgICAgICBnZXRBY3R1YWxDb25uZWN0aW9uKCk7Ci0gCisKICAgICAgICAgLyoqCiAgICAgICAgICAqIFRoZSBmb2xsb3dpbmcgY29kZSBpbiB0aGUgaWYgc3RhdGVtZW50IGZpcnN0IGNoZWNrcyBpZiB0aGlzIE1hbmFnZWRDb25uZWN0aW9uCiAgICAgICAgICAqIGlzIGNsZWFuIG9yIG5vdC4gSWYgaXQgaXMsIGl0IHJlc2V0cyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsIHRvIHdoYXQKQEAgLTMwMSwyOCArMzAxLDI4IEBACiAgICAgICAgIGlmKGlzQ2xlYW4pIHsKICAgICAgICAgICAgICgoY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSltY2YpLnJlc2V0SXNvbGF0aW9uKHRoaXMsIGlzb2xhdGlvbkxldmVsV2hlbkNsZWFuZWQpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAgCisKKwogICAgICAgICBDb25uZWN0aW9uSG9sZGVyIGNvbm5Ib2xkZXJPYmplY3QgPSBuZXcgQ29ubmVjdGlvbkhvbGRlcihhY3R1YWxDb25uZWN0aW9uLCB0aGlzKTsKLQlpc0NsZWFuPWZhbHNlOwotICAgICAgICAKKyAgICBpc0NsZWFuPWZhbHNlOworCiAgICAgICAgIGlmKGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgIT0gbnVsbCkgewogICAgICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZS5zZXRBY3RpdmUoZmFsc2UpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGNvbm5Ib2xkZXJPYmplY3Quc2V0QWN0aXZlKHRydWUpOwogICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gY29ubkhvbGRlck9iamVjdDsKLSAKKwogICAgICAgICByZXR1cm4gY29ubkhvbGRlck9iamVjdDsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIGFuIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IGluc3RhbmNlLiBUaGUgPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gaW50ZXJmYWNlCi0gICAgICogaXMgdXNlZCBieSB0aGUgY29udGFpbmVyIHRvIG1hbmFnZSBsb2NhbCB0cmFuc2FjdGlvbnMgZm9yIGEgUk0gaW5zdGFuY2UuIAorICAgICAqIGlzIHVzZWQgYnkgdGhlIGNvbnRhaW5lciB0byBtYW5hZ2UgbG9jYWwgdHJhbnNhY3Rpb25zIGZvciBhIFJNIGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICogQHJldHVybiAgICA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCiAgICAgICovCiAgICAgcHVibGljIGpha2FydGEucmVzb3VyY2Uuc3BpLkxvY2FsVHJhbnNhY3Rpb24gZ2V0TG9jYWxUcmFuc2FjdGlvbigpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC0zMzEsMTMgKzMzMSwxMyBAQAogICAgICAgICBjaGVja0lmVmFsaWQoKTsKICAgICAgICAgcmV0dXJuIG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuTG9jYWxUcmFuc2FjdGlvbih0aGlzKTsKICAgICB9Ci0gICAgIAorCiAgICAgLyoqCi0gICAgICogR2V0cyB0aGUgbG9nIHdyaXRlciBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuIAorICAgICAqIEdldHMgdGhlIGxvZyB3cml0ZXIgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgCi0gICAgICoJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICogQHJldHVybiAgICA8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyAgICAgKiAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKiBAc2VlIDxjb2RlPnNldExvZ1dyaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgUHJpbnRXcml0ZXIgZ2V0TG9nV3JpdGVyKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKQEAgLTM0NSw0NiArMzQ1LDQ2IEBACiAgICAgICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGdldExvZ1dyaXRlciIpOwogICAgICAgICB9CiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gbG9nV3JpdGVyOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIEdldHMgdGhlIG1ldGFkYXRhIGluZm9ybWF0aW9uIGZvciB0aGlzIGNvbm5lY3Rpb24ncyB1bmRlcmx5aW5nIEVJUyAKLSAgICAgKiByZXNvdXJjZSBtYW5hZ2VyIGluc3RhbmNlLiAKKyAgICAgKiBHZXRzIHRoZSBtZXRhZGF0YSBpbmZvcm1hdGlvbiBmb3IgdGhpcyBjb25uZWN0aW9uJ3MgdW5kZXJseWluZyBFSVMKKyAgICAgKiByZXNvdXJjZSBtYW5hZ2VyIGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICogQHJldHVybiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCiAgICAgICovCiAgICAgcHVibGljIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEgZ2V0TWV0YURhdGEoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBnZXRNZXRhRGF0YSIpOwogICAgICAgICB9CiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhKHRoaXMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFJldHVybnMgYW4gPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UuIAorICAgICAqIFJldHVybnMgYW4gPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgb3IKLSAgICAgKgkJCQkJdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUgCi0gICAgICoJCQkJCTxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlOb3RTdXBwb3J0ZWRFeGNlcHRpb24JaWYgdW5kZXJseWluZyBkYXRhc291cmNlIGlzIG5vdCBhbgotICAgICAqCQkJCQk8Y29kZT5YQURhdGFTb3VyY2U8L2NvZGU+CisgICAgICogQHJldHVybiAgICA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIG9yCisgICAgICogICAgICAgICAgICAgICAgICAgIHRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBOb3RTdXBwb3J0ZWRFeGNlcHRpb24gICAgaWYgdW5kZXJseWluZyBkYXRhc291cmNlIGlzIG5vdCBhbgorICAgICAqICAgICAgICAgICAgICAgICAgICA8Y29kZT5YQURhdGFTb3VyY2U8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFhBUmVzb3VyY2UgZ2V0WEFSZXNvdXJjZSgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGdldFhBUmVzb3VyY2UiKTsKICAgICAgICAgfQogICAgICAgICBjaGVja0lmVmFsaWQoKTsKLSAgICAgICAgCisKICAgICAgICAgaWYoY29ubmVjdGlvblR5cGUgPT0gSVNYQUNPTk5FQ1RJT04pIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgaWYoeGFyID09IG51bGwpIHsKLQkJICAgIC8qKgorICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgICAgICAqIFVzaW5nIHRoZSB3cmFwcGVyIFhBUmVzb3VyY2UuCiAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgICAgICB4YXIgPSBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLlhBUmVzb3VyY2VJbXBsKCgoWEFDb25uZWN0aW9uKXBjKS5nZXRYQVJlc291cmNlKCksIHRoaXMpOwpAQCAtMzk3LDE2ICszOTcsMTYgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkNhbm5vdCBnZXQgYW4gWEFSZXNvdXJjZSBmcm9tIGEgbm9uIFhBIGNvbm5lY3Rpb24iKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJlbW92ZXMgYW4gYWxyZWFkeSByZWdpc3RlcmVkIGNvbm5lY3Rpb24gZXZlbnQgbGlzdGVuZXIgZnJvbSB0aGUKICAgICAgKiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbGlzdGVuZXIJPGNvZGU+Q29ubmVjdGlvbkV2ZW50TGlzdGVuZXI8L2NvZGU+IHRvIGJlIHJlbW92ZWQKKyAgICAgKiBAcGFyYW0gICAgbGlzdGVuZXIgICAgPGNvZGU+Q29ubmVjdGlvbkV2ZW50TGlzdGVuZXI8L2NvZGU+IHRvIGJlIHJlbW92ZWQKICAgICAgKiBAc2VlIDxjb2RlPmFkZENvbm5lY3Rpb25FdmVudExpc3RlbmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJlbW92ZUNvbm5lY3Rpb25FdmVudExpc3RlbmVyKENvbm5lY3Rpb25FdmVudExpc3RlbmVyIGxpc3RlbmVyKSB7Ci0JbGlzdGVuZXIgPSBudWxsOworICAgIGxpc3RlbmVyID0gbnVsbDsKICAgICB9CiAKICAgICAvKioKQEAgLTQxNSw3ICs0MTUsNyBAQAogICAgICAqIExvY2FsVHJhbnNhY3Rpb24gb2JqZWN0IHdoZW4gaXRzIGJlZ2luKCkgbWV0aG9kIGlzIGNhbGxlZC4KICAgICAgKi8KICAgICB2b2lkIHRyYW5zYWN0aW9uU3RhcnRlZCgpIHsKLQl0cmFuc2FjdGlvbkluUHJvZ3Jlc3MgPSB0cnVlOwkKKyAgICB0cmFuc2FjdGlvbkluUHJvZ3Jlc3MgPSB0cnVlOwogICAgIH0KIAogICAgIC8qKgpAQCAtNDI0LDE2ICs0MjQsMTYgQEAKICAgICAgKiBMb2NhbFRyYW5zYWN0aW9uIG9iamVjdCB3aGVuIGl0cyBlbmQoKSBtZXRob2QgaXMgY2FsbGVkLgogICAgICAqLwogICAgIHZvaWQgdHJhbnNhY3Rpb25Db21wbGV0ZWQoKSB7Ci0JdHJhbnNhY3Rpb25JblByb2dyZXNzID0gZmFsc2U7Ci0JaWYoY29ubmVjdGlvblR5cGUgPT0gSVNQT09MRURDT05ORUNUSU9OIHx8IGNvbm5lY3Rpb25UeXBlID09IElTWEFDT05ORUNUSU9OKSB7CisgICAgdHJhbnNhY3Rpb25JblByb2dyZXNzID0gZmFsc2U7CisgICAgaWYoY29ubmVjdGlvblR5cGUgPT0gSVNQT09MRURDT05ORUNUSU9OIHx8IGNvbm5lY3Rpb25UeXBlID09IElTWEFDT05ORUNUSU9OKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGlzb2xhdGlvbkxldmVsV2hlbkNsZWFuZWQgPSBhY3R1YWxDb25uZWN0aW9uLmdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCk7CiAgICAgICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgICAgICAvL2NoZWNrIHdoYXQgdG8gZG8gaW4gdGhpcyBjYXNlISEKLQkJX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMubm90Z290X3R4X2lzb2x2bCIpOworICAgICAgICAgICAgLy9jaGVjayB3aGF0IHRvIGRvIGluIHRoaXMgY2FzZSEhCisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLm5vdGdvdF90eF9pc29sdmwiKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotCSAgICB0cnkgeworCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgYWN0dWFsQ29ubmVjdGlvbi5jbG9zZSgpOwogICAgICAgICAgICAgICAgIGFjdHVhbENvbm5lY3Rpb24gPSBudWxsOwogICAgICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewpAQCAtNDQxLDcgKzQ0MSw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotCSAgICAgICAgCisKICAgICAgICAgaXNDbGVhbiA9IHRydWU7CiAKICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7CkBAIC00NTMsMjggKzQ1MywyOCBAQAogICAgICAqIG9yIG5vdC4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc1RyYW5zYWN0aW9uSW5Qcm9ncmVzcygpIHsKLQlyZXR1cm4gdHJhbnNhY3Rpb25JblByb2dyZXNzOworICAgIHJldHVybiB0cmFuc2FjdGlvbkluUHJvZ3Jlc3M7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgbG9nIHdyaXRlciBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jb3V0CTxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhpcwotICAgICAqCQkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKiBAcGFyYW0gICAgb3V0ICAgIDxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAqICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKiBAc2VlIDxjb2RlPmdldExvZ1dyaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRMb2dXcml0ZXIoUHJpbnRXcml0ZXIgb3V0KSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBjaGVja0lmVmFsaWQoKTsKICAgICAgICAgbG9nV3JpdGVyID0gb3V0OwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFRoaXMgbWV0aG9kIGRldGVybWluZXMgdGhlIHR5cGUgb2YgdGhlIGNvbm5lY3Rpb24gYmVpbmcgaGVsZCAKKyAgICAgKiBUaGlzIG1ldGhvZCBkZXRlcm1pbmVzIHRoZSB0eXBlIG9mIHRoZSBjb25uZWN0aW9uIGJlaW5nIGhlbGQKICAgICAgKiBpbiB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPi4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JcG9vbGVkQ29ubgk8Y29kZT5Qb29sZWRDb25uZWN0aW9uPC9jb2RlPgotICAgICAqIEByZXR1cm4JY29ubmVjdGlvbiB0eXBlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgcG9vbGVkQ29ubiAgICA8Y29kZT5Qb29sZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgY29ubmVjdGlvbiB0eXBlCiAgICAgICovCiAgICAgcHJpdmF0ZSBpbnQgZ2V0Q29ubmVjdGlvblR5cGUoUG9vbGVkQ29ubmVjdGlvbiBwb29sZWRDb25uKSB7CiAgICAgICAgIGlmKHBvb2xlZENvbm4gPT0gbnVsbCkgewpAQCAtNDg1LDIyICs0ODUsMjIgQEAKICAgICAgICAgICAgIHJldHVybiBJU1BPT0xFRENPTk5FQ1RJT047CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlIHRoYXQgCisgICAgICogUmV0dXJucyB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZSB0aGF0CiAgICAgICogY3JlYXRlZCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZSB0aGF0IGNyZWF0ZWQgdGhpcwotICAgICAqCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UgdGhhdCBjcmVhdGVkIHRoaXMKKyAgICAgKiAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCiAgICAgICovCiAgICAgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IGdldE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSgpIHsKICAgICAgICAgcmV0dXJuIChjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KW1jZjsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBhY3R1YWwgc3FsIGNvbm5lY3Rpb24gZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+LiAKKyAgICAgKiBSZXR1cm5zIHRoZSBhY3R1YWwgc3FsIGNvbm5lY3Rpb24gZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+LgogICAgICAqCi0gICAgICogQHJldHVybgl0aGUgcGh5c2ljYWwgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHRoZSBwaHlzaWNhbCA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPgogICAgICAqLwogICAgIC8vR0pDSU5UCiAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBnZXRBY3R1YWxDb25uZWN0aW9uKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKQEAgLTUwOSw4ICs1MDksOCBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBpZihhY3R1YWxDb25uZWN0aW9uID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgYWN0dWFsQ29ubmVjdGlvbiA9IHBjLmdldENvbm5lY3Rpb24oKTsKLQkJfQotCQkKKyAgICAgICAgfQorCiAgICAgICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7CiAgICAgICAgICAgICAgICAgc3FsZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwpAQCAtNTE4LDgxICs1MTgsODEgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gYWN0dWFsQ29ubmVjdGlvbjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgCi0gICAgICoJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEByZXR1cm4gICAgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAqICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKICAgICAgKi8KICAgICBQYXNzd29yZENyZWRlbnRpYWwgZ2V0UGFzc3dvcmRDcmVkZW50aWFsKCkgewogICAgICAgICByZXR1cm4gcGFzc3dkQ3JlZGVudGlhbDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDaGVja3MgaWYgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaXMgdmFsaWQgb3Igbm90IGFuZCB0aHJvd3MgYW4KICAgICAgKiBleGNlcHRpb24gaWYgaXQgaXMgbm90IHZhbGlkLiBBIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpcyBub3QgdmFsaWQgaWYKICAgICAgKiBkZXN0cm95IGhhcyBub3QgYmVlbiBjYWxsZWQgYW5kIG5vIHBoeXNpY2FsIGNvbm5lY3Rpb24gZXJyb3IgaGFzCiAgICAgICogb2NjdXJyZWQgcmVuZGVyaW5nIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIHVudXNhYmxlLgogICAgICAqCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiA8Y29kZT5kZXN0cm95PC9jb2RlPiBoYXMgYmVlbiBjYWxsZWQgb24gdGhpcyAKLSAgICAgKgkJCQkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlIG9yIGlmIGEgCi0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAlwaHlzaWNhbCBjb25uZWN0aW9uIGVycm9yIG9jY3VycmVkIHJlbmRlcmluZyBpdCB1bnVzYWJsZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgPGNvZGU+ZGVzdHJveTwvY29kZT4gaGFzIGJlZW4gY2FsbGVkIG9uIHRoaXMKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlIG9yIGlmIGEKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoeXNpY2FsIGNvbm5lY3Rpb24gZXJyb3Igb2NjdXJyZWQgcmVuZGVyaW5nIGl0IHVudXNhYmxlCiAgICAgICovCiAgICAgLy9HSkNJTlQKICAgICB2b2lkIGNoZWNrSWZWYWxpZCgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGlzRGVzdHJveWVkID09IHRydWUgfHwgaXNVc2FibGUgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhpcyBNYW5hZ2VkQ29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgdGhlIHBoeXNpY2FsICIgKyAKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhpcyBNYW5hZ2VkQ29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgdGhlIHBoeXNpY2FsICIgKwogICAgICAgICAgICAgICAgICJjb25uZWN0aW9uIGlzIG5vdCB1c2FibGUuIik7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIDxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHdoZW4gaXRzIGNsb3NlIG1ldGhvZCBpcwogICAgICAqIGNhbGxlZC4gVGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UgIGludmFsaWRhdGVzIHRoZSBjb25uZWN0aW9uIGhhbmRsZQogICAgICAqIGFuZCBzZW5kcyBhIENPTk5FQ1RJT05fQ0xPU0VEIGV2ZW50IHRvIGFsbCB0aGUgcmVnaXN0ZXJlZCBldmVudCBsaXN0ZW5lcnMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZQlFeGNlcHRpb24gdGhhdCBtYXkgaGF2ZSBvY2N1cmVkIHdoaWxlIGNsb3NpbmcgdGhlIGNvbm5lY3Rpb24gaGFuZGxlCi0gICAgICogQHBhcmFtCWNvbm5Ib2xkZXJPYmplY3QJPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdGhhdCBoYXMgYmVlbiBjbG9zZWQKLSAgICAgKiBAdGhyb3dzCVNRTEV4Y2VwdGlvbglpbiBjYXNlIGNsb3NpbmcgdGhlIHNxbCBjb25uZWN0aW9uIGdvdCBvdXQgb2YKLSAgICAgKiAgICAgICAgIAkgICAgICAgICAgICAJPGNvZGU+Z2V0Q29ubmVjdGlvbjwvY29kZT4gb24gdGhlIHVuZGVybHlpbmcgCi0gICAgICoJCQkJPGNvZGU+UG9vbGVkQ29ubmVjdGlvbjwvY29kZT4gdGhyb3dzIGFuIGV4Y2VwdGlvbgorICAgICAqIEBwYXJhbSAgICBlICAgIEV4Y2VwdGlvbiB0aGF0IG1heSBoYXZlIG9jY3VyZWQgd2hpbGUgY2xvc2luZyB0aGUgY29ubmVjdGlvbiBoYW5kbGUKKyAgICAgKiBAcGFyYW0gICAgY29ubkhvbGRlck9iamVjdCAgICA8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0aGF0IGhhcyBiZWVuIGNsb3NlZAorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIGluIGNhc2UgY2xvc2luZyB0aGUgc3FsIGNvbm5lY3Rpb24gZ290IG91dCBvZgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZT5nZXRDb25uZWN0aW9uPC9jb2RlPiBvbiB0aGUgdW5kZXJseWluZworICAgICAqICAgICAgICAgICAgICAgIDxjb2RlPlBvb2xlZENvbm5lY3Rpb248L2NvZGU+IHRocm93cyBhbiBleGNlcHRpb24KICAgICAgKi8KICAgICB2b2lkIGNvbm5lY3Rpb25DbG9zZWQoRXhjZXB0aW9uIGUsIENvbm5lY3Rpb25Ib2xkZXIgY29ubkhvbGRlck9iamVjdCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICAgIGNvbm5Ib2xkZXJPYmplY3QuaW52YWxpZGF0ZSgpOwotICAgICAgICAKKwogICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKLSAgICAgICAgCisKICAgICAgICAgY2Uuc2V0Q29ubmVjdGlvbkhhbmRsZShjb25uSG9sZGVyT2JqZWN0KTsKICAgICAgICAgbGlzdGVuZXIuY29ubmVjdGlvbkNsb3NlZChjZSk7Ci0JCisKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIDxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHdoZW4gaXQgZGV0ZWN0cyBhIGNvbm5lY2lvbgogICAgICAqIHJlbGF0ZWQgZXJyb3IuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZQlFeGNlcHRpb24gdGhhdCBoYXMgb2NjdXJyZWQgZHVyaW5nIGFuIG9wZXJhdGlvbiBvbiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbgotICAgICAqIEBwYXJhbQljb25uSG9sZGVyT2JqZWN0CTxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRoYXQgZGV0ZWN0ZWQgdGhlIHBoeXNpY2FsCi0gICAgICoJCQkJCWNvbm5lY3Rpb24gZXJyb3IKKyAgICAgKiBAcGFyYW0gICAgZSAgICBFeGNlcHRpb24gdGhhdCBoYXMgb2NjdXJyZWQgZHVyaW5nIGFuIG9wZXJhdGlvbiBvbiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbgorICAgICAqIEBwYXJhbSAgICBjb25uSG9sZGVyT2JqZWN0ICAgIDxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRoYXQgZGV0ZWN0ZWQgdGhlIHBoeXNpY2FsCisgICAgICogICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gZXJyb3IKICAgICAgKi8KLSAgICB2b2lkIGNvbm5lY3Rpb25FcnJvck9jY3VycmVkKEV4Y2VwdGlvbiBlLCAKKyAgICB2b2lkIGNvbm5lY3Rpb25FcnJvck9jY3VycmVkKEV4Y2VwdGlvbiBlLAogICAgICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25Ib2xkZXIgY29ubkhvbGRlck9iamVjdCkgewotCSAgICAKKwogICAgICAgICAgQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXIgY2VsID0gdGhpcy5saXN0ZW5lcjsKICAgICAgICAgIENvbm5lY3Rpb25FdmVudCBjZSA9IG51bGw7CiAgICAgICAgICBjZSA9IGUgPT0gbnVsbCA/IG5ldyBDb25uZWN0aW9uRXZlbnQodGhpcywgQ29ubmVjdGlvbkV2ZW50LkNPTk5FQ1RJT05fRVJST1JfT0NDVVJSRUQpCiAgICAgICAgICAgICAgICAgICAgIDogbmV3IENvbm5lY3Rpb25FdmVudCh0aGlzLCBDb25uZWN0aW9uRXZlbnQuQ09OTkVDVElPTl9FUlJPUl9PQ0NVUlJFRCwgZSk7CiAgICAgICAgICBpZiAoY29ubkhvbGRlck9iamVjdCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgY2Uuc2V0Q29ubmVjdGlvbkhhbmRsZShjb25uSG9sZGVyT2JqZWN0KTsKLSAgICAgICAgIH0gICAgCisgICAgICAgICB9CiAKICAgICAgICAgIGNlbC5jb25uZWN0aW9uRXJyb3JPY2N1cnJlZChjZSk7CiAgICAgICAgICBpc1VzYWJsZSA9IGZhbHNlOwogICAgIH0KLSAgICAKLSAgICAKLSAgICAKKworCisKICAgICAvKioKICAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IG9iamVjdCB3aGVuIGl0cyBzdGFydCBtZXRob2QKICAgICAgKiBoYXMgYmVlbiBpbnZva2VkLgpAQCAtNjA2LDcgKzYwNiw3IEBACiAgICAgICAgICAgICBjb25uZWN0aW9uRXJyb3JPY2N1cnJlZChlLCBudWxsKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gb2JqZWN0IHdoZW4gaXRzIGVuZCBtZXRob2QKICAgICAgKiBoYXMgYmVlbiBpbnZva2VkLgpAQCAtNjIwLDcgKzYyMCw3IEBACiAgICAgICAgICAgICBjb25uZWN0aW9uRXJyb3JPY2N1cnJlZChlLCBudWxsKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSBhIENvbm5lY3Rpb24gSGFuZGxlIHRvIGNoZWNrIGlmIGl0IGlzCiAgICAgICogdGhlIGFjdGl2ZSBDb25uZWN0aW9uIEhhbmRsZS4gSWYgaXQgaXMgbm90IHRoZSBhY3RpdmUgQ29ubmVjdGlvbgpAQCAtNjI5LDI0ICs2MjksMjQgQEAKICAgICAgKiBDb25uZWN0aW9uIEhhbmRsZSBvYmplY3QgdG8gdGhpcyBvYmplY3QgaWYgdGhlIGFjdGl2ZSBDb25uZWN0aW9uCiAgICAgICogSGFuZGxlIGlzIG51bGwuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JY2gJPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdGhhdCByZXF1ZXN0cyB0aGlzCi0gICAgICoJCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2Ugd2hldGhlcgotICAgICAqCQkJaXQgY2FuIGJlIGFjdGl2ZSBvciBub3QKLSAgICAgKiBAdGhyb3dzCVNRTEV4Y2VwdGlvbglpbiBjYXNlIHRoZSBwaHlzaWNhbCBpcyBub3QgdmFsaWQgb3IKLSAgICAgKgkJCQl0aGVyZSBpcyBhbHJlYWR5IGFuIGFjdGl2ZSBjb25uZWN0aW9uIGhhbmRsZQorICAgICAqIEBwYXJhbSAgICBjaCAgICA8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0aGF0IHJlcXVlc3RzIHRoaXMKKyAgICAgKiAgICAgICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZSB3aGV0aGVyCisgICAgICogICAgICAgICAgICBpdCBjYW4gYmUgYWN0aXZlIG9yIG5vdAorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIGluIGNhc2UgdGhlIHBoeXNpY2FsIGlzIG5vdCB2YWxpZCBvcgorICAgICAqICAgICAgICAgICAgICAgIHRoZXJlIGlzIGFscmVhZHkgYW4gYWN0aXZlIGNvbm5lY3Rpb24gaGFuZGxlCiAgICAgICovCi0gICAgIAorCiAgICAgdm9pZCBjaGVja0lmQWN0aXZlKENvbm5lY3Rpb25Ib2xkZXIgY2gpIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgICBpZihpc0Rlc3Ryb3llZCA9PSB0cnVlIHx8IGlzVXNhYmxlID09IGZhbHNlKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uKCJUaGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdXNhYmxlIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYoYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9PSBudWxsKSB7CiAgICAgICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gY2g7CiAgICAgICAgICAgICBjaC5zZXRBY3RpdmUodHJ1ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYoYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSAhPSBjaCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gaGFuZGxlIGNhbm5vdCBiZSB1c2VkIGFzIGFub3RoZXIgY29ubmVjdGlvbiBpcyBjdXJyZW50bHkgYWN0aXZlIik7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhLmphdmEKaW5kZXggMjBmMDNhYS4uZjY1MGQ0MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhLmphdmEKQEAgLTI1LDggKzI1LDggQEAKIC8qKgogICogPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YTwvY29kZT4gaW1wbGVtZW50YXRpb24gZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wOC8wMwotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDgvMDMKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIHB1YmxpYyBjbGFzcyBNYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YSB7CiAKQEAgLTQxLDgxICs0MSw4MSBAQAogICAgIC8qKgogICAgICAqIENvbnN0cnVjdG9yIGZvciA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhPC9jb2RlPgogICAgICAqCi0gICAgICogQHBhcmFtCW1jCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CWlmIGdldHRpbmcgdGhlIERhdGFiYXNlTWV0YURhdGEgb2JqZWN0IGZhaWxzCisgICAgICogQHBhcmFtICAgIG1jICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+ICAgIGlmIGdldHRpbmcgdGhlIERhdGFiYXNlTWV0YURhdGEgb2JqZWN0IGZhaWxzCiAgICAgICovCiAgICAgcHVibGljIE1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEoTWFuYWdlZENvbm5lY3Rpb24gbWMpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICB0aGlzLm1jID0gbWM7CiAgICAgICAgICAgICBkbWQgPSBtYy5nZXRBY3R1YWxDb25uZWN0aW9uKCkuZ2V0TWV0YURhdGEoKTsKICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19tZCIpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19tZCIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgcHJvZHVjdCBuYW1lIG9mIHRoZSB1bmRlcmx5aW5nIEVJUyBpbnN0YW5jZSBjb25uZWN0ZWQKICAgICAgKiB0aHJvdWdoIHRoZSBNYW5hZ2VkQ29ubmVjdGlvbi4KICAgICAgKgotICAgICAqIEByZXR1cm4JUHJvZHVjdCBuYW1lIG9mIHRoZSBFSVMgaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgUHJvZHVjdCBuYW1lIG9mIHRoZSBFSVMgaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RUlTUHJvZHVjdE5hbWUoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmV0dXJuIGRtZC5nZXREYXRhYmFzZVByb2R1Y3ROYW1lKCk7CiAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZWlzX3Byb2RuYW1lIiwgc3FsZSk7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2Vpc19wcm9kbmFtZSIsIHNxbGUpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgcHJvZHVjdCB2ZXJzaW9uIG9mIHRoZSB1bmRlcmx5aW5nIEVJUyBpbnN0YW5jZSBjb25uZWN0ZWQKICAgICAgKiB0aHJvdWdoIHRoZSBNYW5hZ2VkQ29ubmVjdGlvbi4KICAgICAgKgotICAgICAqIEByZXR1cm4JUHJvZHVjdCB2ZXJzaW9uIG9mIHRoZSBFSVMgaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgUHJvZHVjdCB2ZXJzaW9uIG9mIHRoZSBFSVMgaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RUlTUHJvZHVjdFZlcnNpb24oKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmV0dXJuIGRtZC5nZXREYXRhYmFzZVByb2R1Y3RWZXJzaW9uKCk7CiAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZWlzX3Byb2R2ZXJzIiwgc3FsZSk7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2Vpc19wcm9kdmVycyIsIHNxbGUpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpLCBzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIG1heGltdW0gbGltaXQgb24gbnVtYmVyIG9mIGFjdGl2ZSBjb25jdXJyZW50IGNvbm5lY3Rpb25zCiAgICAgICogdGhhdCBhbiBFSVMgaW5zdGFuY2UgY2FuIHN1cHBvcnQgYWNyb3NzIGNsaWVudCBwcm9jZXNzZXMuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCU1heGltdW0gbGltaXQgZm9yIG51bWJlciBvZiBhY3RpdmUgY29uY3VycmVudCBjb25uZWN0aW9ucwotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBNYXhpbXVtIGxpbWl0IGZvciBudW1iZXIgb2YgYWN0aXZlIGNvbmN1cnJlbnQgY29ubmVjdGlvbnMKKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0TWF4Q29ubmVjdGlvbnMoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmV0dXJuIGRtZC5nZXRNYXhDb25uZWN0aW9ucygpOwogICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2Vpc19tYXhjb25uIik7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2Vpc19tYXhjb25uIik7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBuYW1lIG9mIHRoZSB1c2VyIGFzc29jaWF0ZWQgd2l0aCB0aGUgTWFuYWdlZENvbm5lY3Rpb24gaW5zdGFuY2UuIFRoZSBuYW1lCiAgICAgICogY29ycmVzcG9uZHMgdG8gdGhlIHJlc291cmNlIHByaW5jaXBhbCB1bmRlciB3aG9zZSB3aG9zZSBzZWN1cml0eSBjb250ZXh0LCBhIGNvbm5lY3Rpb24KICAgICAgKiB0byB0aGUgRUlTIGluc3RhbmNlIGhhcyBiZWVuIGVzdGFibGlzaGVkLgogICAgICAqCi0gICAgICogQHJldHVybgluYW1lIG9mIHRoZSB1c2VyCi0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIG5hbWUgb2YgdGhlIHVzZXIKKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VXNlck5hbWUoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBqYWthcnRhLnJlc291cmNlLnNwaS5zZWN1cml0eS5QYXNzd29yZENyZWRlbnRpYWwgcGMgPSBtYy5nZXRQYXNzd29yZENyZWRlbnRpYWwoKTsKICAgICAgICAgaWYocGMgIT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuIHBjLmdldFVzZXJOYW1lKCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIG1jLmdldE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSgpLmdldFVzZXIoKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL1hBUmVzb3VyY2VJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL1hBUmVzb3VyY2VJbXBsLmphdmEKaW5kZXggZGFkMWQ3Ny4uNDgyZjMzMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9YQVJlc291cmNlSW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvWEFSZXNvdXJjZUltcGwuamF2YQpAQCAtMjQsMTQ4ICsyNCwxNDggQEAKIC8qKgogICogPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gd3JhcHBlciBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA4LzIzCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wOC8yMworICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogcHVibGljIGNsYXNzIFhBUmVzb3VyY2VJbXBsIGltcGxlbWVudHMgWEFSZXNvdXJjZSB7CiAKICAgICBYQVJlc291cmNlIHhhcjsKICAgICBNYW5hZ2VkQ29ubmVjdGlvbiBtYzsKLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdG9yIGZvciBYQVJlc291cmNlSW1wbAogICAgICAqCi0gICAgICogQHBhcmFtCXhhcgk8Y29kZT5YQVJlc291cmNlPC9jb2RlPgotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgeGFyICAgIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+CisgICAgICogQHBhcmFtICAgIG1jICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBYQVJlc291cmNlSW1wbChYQVJlc291cmNlIHhhciwgTWFuYWdlZENvbm5lY3Rpb24gbWMpIHsKICAgICAgICAgdGhpcy54YXIgPSB4YXI7CiAgICAgICAgIHRoaXMubWMgPSBtYzsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb21taXQgdGhlIGdsb2JhbCB0cmFuc2FjdGlvbiBzcGVjaWZpZWQgYnkgeGlkLgogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCi0gICAgICogQHBhcmFtCW9uZVBoYXNlCUlmIHRydWUsIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHNob3VsZCB1c2UgYSBvbmUtcGhhc2UgY29tbWl0IAotICAgICAqICAgICAgIAkgICAgICAgIAlwcm90b2NvbCB0byBjb21taXQgdGhlIHdvcmsgZG9uZSBvbiBiZWhhbGYgb2YgeGlkLgorICAgICAqIEBwYXJhbSAgICB4aWQgICAgQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgorICAgICAqIEBwYXJhbSAgICBvbmVQaGFzZSAgICBJZiB0cnVlLCB0aGUgcmVzb3VyY2UgbWFuYWdlciBzaG91bGQgdXNlIGEgb25lLXBoYXNlIGNvbW1pdAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICBwcm90b2NvbCB0byBjb21taXQgdGhlIHdvcmsgZG9uZSBvbiBiZWhhbGYgb2YgeGlkLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNvbW1pdChYaWQgeGlkLCBib29sZWFuIG9uZVBoYXNlKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICAvL3RoZSBtYy50cmFuc2FjdGlvbkNvbXBsZXRlZCBjYWxsIGhhcyBjb21lIGhlcmUgYmVjYXN1ZQotCS8vdGhlIHRyYW5zYWN0aW9uICphY3R1YWxseSogY29tcGxldGVzIGFmdGVyIHRoZSBmbG93Ci0JLy9yZWFjaGVzIGhlcmUuIHRoZSBlbmQoKSBtZXRob2QgbWlnaHQgbm90IHJlYWxseSBzaWduYWwKLQkvL2NvbXBsZXRpb24gb2YgdHJhbnNhY3Rpb24gaW4gY2FzZSB0aGUgdHJhbnNhY3Rpb24gaXMKLQkvL3N1c3BlbmRlZC4gSW4gY2FzZSBvZiB0cmFuc2FjdGlvbiBzdXNwZW5zaW9uLCB0aGUgZW5kCi0JLy9tZXRob2QgaXMgc3RpbGwgY2FsbGVkIGJ5IHRoZSB0cmFuc2FjdGlvbiBtYW5hZ2VyCi0JbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKKyAgICAvL3RoZSB0cmFuc2FjdGlvbiAqYWN0dWFsbHkqIGNvbXBsZXRlcyBhZnRlciB0aGUgZmxvdworICAgIC8vcmVhY2hlcyBoZXJlLiB0aGUgZW5kKCkgbWV0aG9kIG1pZ2h0IG5vdCByZWFsbHkgc2lnbmFsCisgICAgLy9jb21wbGV0aW9uIG9mIHRyYW5zYWN0aW9uIGluIGNhc2UgdGhlIHRyYW5zYWN0aW9uIGlzCisgICAgLy9zdXNwZW5kZWQuIEluIGNhc2Ugb2YgdHJhbnNhY3Rpb24gc3VzcGVuc2lvbiwgdGhlIGVuZAorICAgIC8vbWV0aG9kIGlzIHN0aWxsIGNhbGxlZCBieSB0aGUgdHJhbnNhY3Rpb24gbWFuYWdlcgorICAgIG1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiAgICAgICAgIHhhci5jb21taXQoeGlkLCBvbmVQaGFzZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogRW5kcyB0aGUgd29yayBwZXJmb3JtZWQgb24gYmVoYWxmIG9mIGEgdHJhbnNhY3Rpb24gYnJhbmNoLgogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyIHRoYXQgaXMgdGhlIHNhbWUgYXMgd2hhdCAKLSAgICAgKgkJCXdhcyB1c2VkIHByZXZpb3VzbHkgaW4gdGhlIHN0YXJ0IG1ldGhvZC4KLSAgICAgKiBAcGFyYW0JZmxhZ3MJT25lIG9mIFRNU1VDQ0VTUywgVE1GQUlMLCBvciBUTVNVU1BFTkQKKyAgICAgKiBAcGFyYW0gICAgeGlkICAgIEEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIgdGhhdCBpcyB0aGUgc2FtZSBhcyB3aGF0CisgICAgICogICAgICAgICAgICB3YXMgdXNlZCBwcmV2aW91c2x5IGluIHRoZSBzdGFydCBtZXRob2QuCisgICAgICogQHBhcmFtICAgIGZsYWdzICAgIE9uZSBvZiBUTVNVQ0NFU1MsIFRNRkFJTCwgb3IgVE1TVVNQRU5ECiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZW5kKFhpZCB4aWQsIGludCBmbGFncykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgeGFyLmVuZCh4aWQsIGZsYWdzKTsKICAgICAgICAgLy9HSkNJTlQKLQkvL21jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CisgICAgLy9tYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRlbGwgdGhlIHJlc291cmNlIG1hbmFnZXIgdG8gZm9yZ2V0IGFib3V0IGEgaGV1cmlzdGljYWxseSBjb21wbGV0ZWQgdHJhbnNhY3Rpb24gYnJhbmNoLgogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCisgICAgICogQHBhcmFtICAgIHhpZCAgICBBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZm9yZ2V0KFhpZCB4aWQpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHhhci5mb3JnZXQoeGlkKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBPYnRhaW4gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBzZXQgZm9yIHRoaXMgCisgICAgICogT2J0YWluIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgc2V0IGZvciB0aGlzCiAgICAgICogPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRoZSB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIGluIHNlY29uZHMKKyAgICAgKiBAcmV0dXJuICAgIHRoZSB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIGluIHNlY29uZHMKICAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldFRyYW5zYWN0aW9uVGltZW91dCgpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiB4YXIuZ2V0VHJhbnNhY3Rpb25UaW1lb3V0KCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIGRldGVybWluZSBpZiB0aGUgcmVzb3VyY2UgbWFuYWdlciBpbnN0YW5jZSAKLSAgICAgKiByZXByZXNlbnRlZCBieSB0aGUgdGFyZ2V0IG9iamVjdCBpcyB0aGUgc2FtZSBhcyB0aGUgcmVzb3VjZSBtYW5hZ2VyIAorICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB0byBkZXRlcm1pbmUgaWYgdGhlIHJlc291cmNlIG1hbmFnZXIgaW5zdGFuY2UKKyAgICAgKiByZXByZXNlbnRlZCBieSB0aGUgdGFyZ2V0IG9iamVjdCBpcyB0aGUgc2FtZSBhcyB0aGUgcmVzb3VjZSBtYW5hZ2VyCiAgICAgICogaW5zdGFuY2UgcmVwcmVzZW50ZWQgYnkgdGhlIHBhcmFtZXRlciB4YXJlcy4KICAgICAgKgotICAgICAqIEBwYXJhbQl4YXJlcwlBbiA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBvYmplY3Qgd2hvc2UgcmVzb3VyY2UgbWFuYWdlciAKLSAgICAgKiAJCQlpbnN0YW5jZSBpcyB0byBiZSBjb21wYXJlZCB3aXRoIHRoZSByZXNvdXJjZQotICAgICAqIEByZXR1cm4JdHJ1ZSBpZiBpdCdzIHRoZSBzYW1lIFJNIGluc3RhbmNlOyBvdGhlcndpc2UgZmFsc2UuCisgICAgICogQHBhcmFtICAgIHhhcmVzICAgIEFuIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IG9iamVjdCB3aG9zZSByZXNvdXJjZSBtYW5hZ2VyCisgICAgICogICAgICAgICAgICAgaW5zdGFuY2UgaXMgdG8gYmUgY29tcGFyZWQgd2l0aCB0aGUgcmVzb3VyY2UKKyAgICAgKiBAcmV0dXJuICAgIHRydWUgaWYgaXQncyB0aGUgc2FtZSBSTSBpbnN0YW5jZTsgb3RoZXJ3aXNlIGZhbHNlLgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGlzU2FtZVJNKFhBUmVzb3VyY2UgeGFyZXMpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiB4YXIuaXNTYW1lUk0oeGFyZXMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIEFzayB0aGUgcmVzb3VyY2UgbWFuYWdlciB0byBwcmVwYXJlIGZvciBhIHRyYW5zYWN0aW9uIGNvbW1pdCAKKyAgICAgKiBBc2sgdGhlIHJlc291cmNlIG1hbmFnZXIgdG8gcHJlcGFyZSBmb3IgYSB0cmFuc2FjdGlvbiBjb21taXQKICAgICAgKiBvZiB0aGUgdHJhbnNhY3Rpb24gc3BlY2lmaWVkIGluIHhpZC4KICAgICAgKgotICAgICAqIEBwYXJhbQl4aWQJQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgotICAgICAqIEByZXR1cm4JQSB2YWx1ZSBpbmRpY2F0aW5nIHRoZSByZXNvdXJjZSBtYW5hZ2VyJ3Mgdm90ZSBvbiB0aGUgCi0gICAgICoJCW91dGNvbWUgb2YgdGhlIHRyYW5zYWN0aW9uLiBUaGUgcG9zc2libGUgdmFsdWVzCi0gICAgICoJCWFyZTogWEFfUkRPTkxZIG9yIFhBX09LLiBJZiB0aGUgcmVzb3VyY2UgbWFuYWdlciB3YW50cyAKLSAgICAgKgkJdG8gcm9sbCBiYWNrIHRoZSB0cmFuc2FjdGlvbiwgaXQgc2hvdWxkIGRvIHNvCi0gICAgICoJCWJ5IHJhaXNpbmcgYW4gYXBwcm9wcmlhdGUgPGNvZGU+WEFFeGNlcHRpb248L2NvZGU+IGluIHRoZSBwcmVwYXJlIG1ldGhvZC4KKyAgICAgKiBAcGFyYW0gICAgeGlkICAgIEEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKKyAgICAgKiBAcmV0dXJuICAgIEEgdmFsdWUgaW5kaWNhdGluZyB0aGUgcmVzb3VyY2UgbWFuYWdlcidzIHZvdGUgb24gdGhlCisgICAgICogICAgICAgIG91dGNvbWUgb2YgdGhlIHRyYW5zYWN0aW9uLiBUaGUgcG9zc2libGUgdmFsdWVzCisgICAgICogICAgICAgIGFyZTogWEFfUkRPTkxZIG9yIFhBX09LLiBJZiB0aGUgcmVzb3VyY2UgbWFuYWdlciB3YW50cworICAgICAqICAgICAgICB0byByb2xsIGJhY2sgdGhlIHRyYW5zYWN0aW9uLCBpdCBzaG91bGQgZG8gc28KKyAgICAgKiAgICAgICAgYnkgcmFpc2luZyBhbiBhcHByb3ByaWF0ZSA8Y29kZT5YQUV4Y2VwdGlvbjwvY29kZT4gaW4gdGhlIHByZXBhcmUgbWV0aG9kLgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgcHJlcGFyZShYaWQgeGlkKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICByZXR1cm4geGFyLnByZXBhcmUoeGlkKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBPYnRhaW4gYSBsaXN0IG9mIHByZXBhcmVkIHRyYW5zYWN0aW9uIGJyYW5jaGVzIGZyb20gYSByZXNvdXJjZSBtYW5hZ2VyLgogICAgICAqCi0gICAgICogQHBhcmFtCWZsYWcJT25lIG9mIFRNU1RBUlRSU0NBTiwgVE1FTkRSU0NBTiwgVE1OT0ZMQUdTLiBUTU5PRkxBR1MgCi0gICAgICoJCQltdXN0IGJlIHVzZWQgd2hlbiBubyBvdGhlciBmbGFncyBhcmUgc2V0IGluIGZsYWdzLgotICAgICAqIEByZXR1cm4JVGhlIHJlc291cmNlIG1hbmFnZXIgcmV0dXJucyB6ZXJvIG9yIG1vcmUgWElEcyBmb3IgdGhlIHRyYW5zYWN0aW9uIAotICAgICAqCQlicmFuY2hlcyB0aGF0IGFyZSBjdXJyZW50bHkgaW4gYSBwcmVwYXJlZCBvciBoZXVyaXN0aWNhbGx5IAotICAgICAqCQljb21wbGV0ZWQgc3RhdGUuIElmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIG9wZXJhdGlvbiwgdGhlIHJlc291cmNlCi0gICAgICoJCW1hbmFnZXIgc2hvdWxkIHRocm93IHRoZSBhcHByb3ByaWF0ZSA8Y29kZT5YQUV4Y2VwdGlvbjwvY29kZT4uCisgICAgICogQHBhcmFtICAgIGZsYWcgICAgT25lIG9mIFRNU1RBUlRSU0NBTiwgVE1FTkRSU0NBTiwgVE1OT0ZMQUdTLiBUTU5PRkxBR1MKKyAgICAgKiAgICAgICAgICAgIG11c3QgYmUgdXNlZCB3aGVuIG5vIG90aGVyIGZsYWdzIGFyZSBzZXQgaW4gZmxhZ3MuCisgICAgICogQHJldHVybiAgICBUaGUgcmVzb3VyY2UgbWFuYWdlciByZXR1cm5zIHplcm8gb3IgbW9yZSBYSURzIGZvciB0aGUgdHJhbnNhY3Rpb24KKyAgICAgKiAgICAgICAgYnJhbmNoZXMgdGhhdCBhcmUgY3VycmVudGx5IGluIGEgcHJlcGFyZWQgb3IgaGV1cmlzdGljYWxseQorICAgICAqICAgICAgICBjb21wbGV0ZWQgc3RhdGUuIElmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIG9wZXJhdGlvbiwgdGhlIHJlc291cmNlCisgICAgICogICAgICAgIG1hbmFnZXIgc2hvdWxkIHRocm93IHRoZSBhcHByb3ByaWF0ZSA8Y29kZT5YQUV4Y2VwdGlvbjwvY29kZT4uCiAgICAgICovCiAgICAgcHVibGljIFhpZFtdIHJlY292ZXIoaW50IGZsYWcpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiB4YXIucmVjb3ZlcihmbGFnKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBJbmZvcm0gdGhlIHJlc291cmNlIG1hbmFnZXIgdG8gcm9sbCBiYWNrIHdvcmsgZG9uZSBvbiBiZWhhbGYgb2YgYSB0cmFuc2FjdGlvbiBicmFuY2gKICAgICAgKgotICAgICAqIEBwYXJhbQl4aWQJQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgorICAgICAqIEBwYXJhbSAgICB4aWQgICAgQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJvbGxiYWNrKFhpZCB4aWQpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIC8vdGhlIG1jLnRyYW5zYWN0aW9uQ29tcGxldGVkIGNhbGwgaGFzIGNvbWUgaGVyZSBiZWNhc3VlCi0JLy90aGUgdHJhbnNhY3Rpb24gKmFjdHVhbGx5KiBjb21wbGV0ZXMgYWZ0ZXIgdGhlIGZsb3cKLQkvL3JlYWNoZXMgaGVyZS4gdGhlIGVuZCgpIG1ldGhvZCBtaWdodCBub3QgcmVhbGx5IHNpZ25hbAotCS8vY29tcGxldGlvbiBvZiB0cmFuc2FjdGlvbiBpbiBjYXNlIHRoZSB0cmFuc2FjdGlvbiBpcwotCS8vc3VzcGVuZGVkLiBJbiBjYXNlIG9mIHRyYW5zYWN0aW9uIHN1c3BlbnNpb24sIHRoZSBlbmQKLQkvL21ldGhvZCBpcyBzdGlsbCBjYWxsZWQgYnkgdGhlIHRyYW5zYWN0aW9uIG1hbmFnZXIKKyAgICAvL3RoZSB0cmFuc2FjdGlvbiAqYWN0dWFsbHkqIGNvbXBsZXRlcyBhZnRlciB0aGUgZmxvdworICAgIC8vcmVhY2hlcyBoZXJlLiB0aGUgZW5kKCkgbWV0aG9kIG1pZ2h0IG5vdCByZWFsbHkgc2lnbmFsCisgICAgLy9jb21wbGV0aW9uIG9mIHRyYW5zYWN0aW9uIGluIGNhc2UgdGhlIHRyYW5zYWN0aW9uIGlzCisgICAgLy9zdXNwZW5kZWQuIEluIGNhc2Ugb2YgdHJhbnNhY3Rpb24gc3VzcGVuc2lvbiwgdGhlIGVuZAorICAgIC8vbWV0aG9kIGlzIHN0aWxsIGNhbGxlZCBieSB0aGUgdHJhbnNhY3Rpb24gbWFuYWdlcgogICAgICAgICBtYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOwogICAgICAgICB4YXIucm9sbGJhY2soeGlkKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBmb3IgdGhpcyA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlzZWNvbmRzCXRoZSB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIGluIHNlY29uZHMuCi0gICAgICogQHJldHVybgl0cnVlIGlmIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaXMgc2V0IHN1Y2Nlc3NmdWxseTsgb3RoZXJ3aXNlIGZhbHNlLgorICAgICAqIEBwYXJhbSAgICBzZWNvbmRzICAgIHRoZSB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIGluIHNlY29uZHMuCisgICAgICogQHJldHVybiAgICB0cnVlIGlmIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaXMgc2V0IHN1Y2Nlc3NmdWxseTsgb3RoZXJ3aXNlIGZhbHNlLgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIHNldFRyYW5zYWN0aW9uVGltZW91dChpbnQgc2Vjb25kcykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIHhhci5zZXRUcmFuc2FjdGlvblRpbWVvdXQoc2Vjb25kcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU3RhcnQgd29yayBvbiBiZWhhbGYgb2YgYSB0cmFuc2FjdGlvbiBicmFuY2ggc3BlY2lmaWVkIGluIHhpZC4KICAgICAgKgotICAgICAqIEBwYXJhbQl4aWQJQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllciB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIHJlc291cmNlCi0gICAgICogQHJldHVybglmbGFncwlPbmUgb2YgVE1OT0ZMQUdTLCBUTUpPSU4sIG9yIFRNUkVTVU1FCisgICAgICogQHBhcmFtICAgIHhpZCAgICBBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVzb3VyY2UKKyAgICAgKiBAcmV0dXJuICAgIGZsYWdzICAgIE9uZSBvZiBUTU5PRkxBR1MsIFRNSk9JTiwgb3IgVE1SRVNVTUUKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzdGFydChYaWQgeGlkLCBpbnQgZmxhZ3MpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIC8vR0pDSU5UCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvYnVpbGQueG1sCmluZGV4IDk2Nzg2OGIuLjY0MTA1NTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvYnVpbGQueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxwcm9qZWN0IG5hbWU9ImpkYmNfY29ubmVjdG9yIiBiYXNlZGlyPSIke2dqYy5ob21lfSIgZGVmYXVsdD0iYnVpbGQiPgogICA8cHJvcGVydHkgbmFtZT0icGtnLmRpciIgdmFsdWU9ImNvbS9zdW4vZ2pjL3NwaSIvPgotIAorCiAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iPgogICAgIDxhbnQgYW50ZmlsZT0iYnVpbGQueG1sIiBkaXI9IiR7Z2pjLmhvbWV9L2JpbiIgdGFyZ2V0PSJjbGVhbiIvPgogICA8L3RhcmdldD4KQEAgLTM3LDUgKzM3LDUgQEAKIAogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkMTQiIGRlcGVuZHM9ImNvbXBpbGUxNCIvPgogCi0JPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iYnVpbGQxMywgYnVpbGQxNCIvPgorICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImJ1aWxkMTMsIGJ1aWxkMTQiLz4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL01ldGhvZEV4ZWN1dG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9NZXRob2RFeGVjdXRvci5qYXZhCmluZGV4IGNlMzIxYWYuLjllN2YyNTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL01ldGhvZEV4ZWN1dG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvTWV0aG9kRXhlY3V0b3IuamF2YQpAQCAtMjYsOCArMjYsOCBAQAogLyoqCiAgKiBFeGVjdXRlIHRoZSBtZXRob2RzIGJhc2VkIG9uIHRoZSBwYXJhbWV0ZXJzLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMjMKLSAqIEBhdXRob3IJQmlub2QgUC5HCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzIzCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRwogICovCiBwdWJsaWMgY2xhc3MgTWV0aG9kRXhlY3V0b3IgaW1wbGVtZW50cyBqYXZhLmlvLlNlcmlhbGl6YWJsZXsKIApAQCAtMzksMTMwICszOSwxMzAgQEAKICAgICAvKioKICAgICAgKiBFeGNldXRlIGEgc2ltcGxlIHNldCBNZXRob2QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdmFsdWUJVmFsdWUgdG8gYmUgc2V0LgotICAgICAqIEBwYXJhbQltZXRob2QJPGNvZGU+TWV0aG9kPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHBhcmFtCW9iaglPYmplY3Qgb24gd2hpY2ggdGhlIG1ldGhvZCB0byBiZSBleGVjdXRlZC4KKyAgICAgKiBAcGFyYW0gICAgdmFsdWUgICAgVmFsdWUgdG8gYmUgc2V0LgorICAgICAqIEBwYXJhbSAgICBtZXRob2QgICAgPGNvZGU+TWV0aG9kPC9jb2RlPiBvYmplY3QuCisgICAgICogQHBhcmFtICAgIG9iaiAgICBPYmplY3Qgb24gd2hpY2ggdGhlIG1ldGhvZCB0byBiZSBleGVjdXRlZC4KICAgICAgKiBAdGhyb3dzICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4sIGluIGNhc2Ugb2YgdGhlIG1pc21hdGNoIG9mIHBhcmFtZXRlciB2YWx1ZXMgb3IKLSAgICAgKgkJYSBzZWN1cml0eSB2aW9sYXRpb24uICAgICAKKyAgICAgKiAgICAgICAgYSBzZWN1cml0eSB2aW9sYXRpb24uCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcnVuSmF2YUJlYW5NZXRob2QoU3RyaW5nIHZhbHVlLCBNZXRob2QgbWV0aG9kLCBPYmplY3Qgb2JqKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb257Ci0gICAgCWlmICh2YWx1ZT09bnVsbCB8fCB2YWx1ZS50cmltKCkuZXF1YWxzKCIiKSkgewotICAgIAkgICAgcmV0dXJuOwotICAgIAl9Ci0gICAgCXRyeSB7Ci0gICAgCSAgICBDbGFzc1tdIHBhcmFtZXRlcnMgPSBtZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKTsKLSAgICAJICAgIGlmICggcGFyYW1ldGVycy5sZW5ndGggPT0gMSkgewotICAgIAkgICAgICAgIE9iamVjdFtdIHZhbHVlcyA9IG5ldyBPYmplY3RbMV07Ci0gICAgCSAgICAJdmFsdWVzWzBdID0gY29udmVydFR5cGUocGFyYW1ldGVyc1swXSwgdmFsdWUpOwotICAgIAkgICAgCW1ldGhvZC5pbnZva2Uob2JqLCB2YWx1ZXMpOwotICAgIAkgICAgfQotICAgIAl9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGlhZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpYWUpOwotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOwotICAgIAl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWUpOwotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBcmd1bWVudHMgYXJlIHdyb25nIGZvciB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7ICAgIAkKLSAgICAJfSBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBpdGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaXRlKTsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsgICAgCQotICAgIAl9CisgICAgICAgIGlmICh2YWx1ZT09bnVsbCB8fCB2YWx1ZS50cmltKCkuZXF1YWxzKCIiKSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBDbGFzc1tdIHBhcmFtZXRlcnMgPSBtZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKTsKKyAgICAgICAgICAgIGlmICggcGFyYW1ldGVycy5sZW5ndGggPT0gMSkgeworICAgICAgICAgICAgICAgIE9iamVjdFtdIHZhbHVlcyA9IG5ldyBPYmplY3RbMV07CisgICAgICAgICAgICAgICAgdmFsdWVzWzBdID0gY29udmVydFR5cGUocGFyYW1ldGVyc1swXSwgdmFsdWUpOworICAgICAgICAgICAgICAgIG1ldGhvZC5pbnZva2Uob2JqLCB2YWx1ZXMpOworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGlhZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpYWUpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOworICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWUpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBcmd1bWVudHMgYXJlIHdyb25nIGZvciB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7CisgICAgICAgIH0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gaXRlKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGl0ZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBFeGVjdXRlcyB0aGUgbWV0aG9kLiAgICAgCisgICAgICogRXhlY3V0ZXMgdGhlIG1ldGhvZC4KICAgICAgKgotICAgICAqIEBwYXJhbQltZXRob2QgPGNvZGU+TWV0aG9kPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHBhcmFtCW9iaglPYmplY3Qgb24gd2hpY2ggdGhlIG1ldGhvZCB0byBiZSBleGVjdXRlZC4KLSAgICAgKiBAcGFyYW0JdmFsdWVzCVBhcmFtZXRlciB2YWx1ZXMgZm9yIGV4ZWN1dGluZyB0aGUgbWV0aG9kLgorICAgICAqIEBwYXJhbSAgICBtZXRob2QgPGNvZGU+TWV0aG9kPC9jb2RlPiBvYmplY3QuCisgICAgICogQHBhcmFtICAgIG9iaiAgICBPYmplY3Qgb24gd2hpY2ggdGhlIG1ldGhvZCB0byBiZSBleGVjdXRlZC4KKyAgICAgKiBAcGFyYW0gICAgdmFsdWVzICAgIFBhcmFtZXRlciB2YWx1ZXMgZm9yIGV4ZWN1dGluZyB0aGUgbWV0aG9kLgogICAgICAqIEB0aHJvd3MgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiwgaW4gY2FzZSBvZiB0aGUgbWlzbWF0Y2ggb2YgcGFyYW1ldGVyIHZhbHVlcyBvcgotICAgICAqCQlhIHNlY3VyaXR5IHZpb2xhdGlvbi4KKyAgICAgKiAgICAgICAgYSBzZWN1cml0eSB2aW9sYXRpb24uCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcnVuTWV0aG9kKE1ldGhvZCBtZXRob2QsIE9iamVjdCBvYmosIFZlY3RvciB2YWx1ZXMpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKLSAgICAJdHJ5IHsKLQkgICAgQ2xhc3NbXSBwYXJhbWV0ZXJzID0gbWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCk7Ci0JICAgIGlmICh2YWx1ZXMuc2l6ZSgpICE9IHBhcmFtZXRlcnMubGVuZ3RoKSB7Ci0JICAgICAgICByZXR1cm47Ci0JICAgIH0KLSAgICAJICAgIE9iamVjdFtdIGFjdHVhbFZhbHVlcyA9IG5ldyBPYmplY3RbcGFyYW1ldGVycy5sZW5ndGhdOwotICAgIAkgICAgZm9yIChpbnQgaSA9MDsgaTxwYXJhbWV0ZXJzLmxlbmd0aCA7IGkrKykgewotICAgIAkgICAgCVN0cmluZyB2YWwgPSAoU3RyaW5nKSB2YWx1ZXMuZ2V0KGkpOwotICAgIAkgICAgCWlmICh2YWwudHJpbSgpLmVxdWFscygiTlVMTCIpKSB7Ci0gICAgCSAgICAJICAgIGFjdHVhbFZhbHVlc1tpXSA9IG51bGw7Ci0gICAgCSAgICAJfSBlbHNlIHsKLSAgICAJICAgIAkgICAgYWN0dWFsVmFsdWVzW2ldID0gY29udmVydFR5cGUocGFyYW1ldGVyc1tpXSwgdmFsKTsKLSAgICAJICAgIAl9Ci0gICAgCSAgICB9Ci0gICAgCSAgICBtZXRob2QuaW52b2tlKG9iaiwgYWN0dWFsVmFsdWVzKTsKLSAgICAJfWNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGlhZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpYWUpOwotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOwotICAgIAl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWUpOwotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBcmd1bWVudHMgYXJlIHdyb25nIGZvciB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7ICAgIAkKLSAgICAJfSBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBpdGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaXRlKTsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsgICAgCQotICAgIAl9CisgICAgICAgIHRyeSB7CisgICAgICAgIENsYXNzW10gcGFyYW1ldGVycyA9IG1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpOworICAgICAgICBpZiAodmFsdWVzLnNpemUoKSAhPSBwYXJhbWV0ZXJzLmxlbmd0aCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICBPYmplY3RbXSBhY3R1YWxWYWx1ZXMgPSBuZXcgT2JqZWN0W3BhcmFtZXRlcnMubGVuZ3RoXTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPTA7IGk8cGFyYW1ldGVycy5sZW5ndGggOyBpKyspIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgdmFsID0gKFN0cmluZykgdmFsdWVzLmdldChpKTsKKyAgICAgICAgICAgICAgICBpZiAodmFsLnRyaW0oKS5lcXVhbHMoIk5VTEwiKSkgeworICAgICAgICAgICAgICAgICAgICBhY3R1YWxWYWx1ZXNbaV0gPSBudWxsOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGFjdHVhbFZhbHVlc1tpXSA9IGNvbnZlcnRUeXBlKHBhcmFtZXRlcnNbaV0sIHZhbCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgbWV0aG9kLmludm9rZShvYmosIGFjdHVhbFZhbHVlcyk7CisgICAgICAgIH1jYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBpYWUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWFlKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKKyAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGllKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGllKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQXJndW1lbnRzIGFyZSB3cm9uZyBmb3IgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOworICAgICAgICB9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGl0ZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpdGUpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOworICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29udmVydHMgdGhlIHR5cGUgZnJvbSBTdHJpbmcgdG8gdGhlIENsYXNzIHR5cGUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdHlwZQkJQ2xhc3MgbmFtZSB0byB3aGljaCB0aGUgY29udmVyc2lvbiBpcyByZXF1aXJlZC4KLSAgICAgKiBAcGFyYW0JcGFyYW1ldGVyCVN0cmluZyB2YWx1ZSB0byBiZSBjb252ZXJ0ZWQuCi0gICAgICogQHJldHVybglDb252ZXJ0ZWQgdmFsdWUuCisgICAgICogQHBhcmFtICAgIHR5cGUgICAgICAgIENsYXNzIG5hbWUgdG8gd2hpY2ggdGhlIGNvbnZlcnNpb24gaXMgcmVxdWlyZWQuCisgICAgICogQHBhcmFtICAgIHBhcmFtZXRlciAgICBTdHJpbmcgdmFsdWUgdG8gYmUgY29udmVydGVkLgorICAgICAqIEByZXR1cm4gICAgQ29udmVydGVkIHZhbHVlLgogICAgICAqIEB0aHJvd3MgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiwgaW4gY2FzZSBvZiB0aGUgbWlzbWF0Y2ggb2YgcGFyYW1ldGVyIHZhbHVlcyBvcgotICAgICAqCQlhIHNlY3VyaXR5IHZpb2xhdGlvbi4gICAgIAorICAgICAqICAgICAgICBhIHNlY3VyaXR5IHZpb2xhdGlvbi4KICAgICAgKi8KICAgICBwcml2YXRlIE9iamVjdCBjb252ZXJ0VHlwZShDbGFzcyB0eXBlLCBTdHJpbmcgcGFyYW1ldGVyKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb257Ci0gICAgCXRyeSB7Ci0gICAgCSAgICBTdHJpbmcgdHlwZU5hbWUgPSB0eXBlLmdldE5hbWUoKTsKLSAgICAJICAgIGlmICggdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuU3RyaW5nIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuT2JqZWN0IikpIHsKLSAgICAJICAgIAlyZXR1cm4gcGFyYW1ldGVyOwotICAgIAkgICAgfQotICAgIAkKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImludCIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkludGVnZXIiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgSW50ZWdlcihwYXJhbWV0ZXIpOwotICAgIAkgICAgfQotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJzaG9ydCIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLlNob3J0IikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IFNob3J0KHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgIAkgICAgCi0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImJ5dGUiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5CeXRlIikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IEJ5dGUocGFyYW1ldGVyKTsKLSAgICAJICAgIH0gICAgCSAgICAgICAgCSAgICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygibG9uZyIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkxvbmciKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgTG9uZyhwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgICAJICAgICAgICAJICAgICAgIAkgICAgCi0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImZsb2F0IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuRmxvYXQiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgRmxvYXQocGFyYW1ldGVyKTsKLSAgICAJICAgIH0gICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiZG91YmxlIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuRG91YmxlIikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IERvdWJsZShwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgICAJICAgICAgICAJICAgICAgIAkgICAgIAkgICAgICAgIAkgICAgICAgCSAgICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiamF2YS5tYXRoLkJpZ0RlY2ltYWwiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgamF2YS5tYXRoLkJpZ0RlY2ltYWwocGFyYW1ldGVyKTsKLSAgICAJICAgIH0gICAgCSAgICAgICAgCSAgICAgICAJICAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJqYXZhLm1hdGguQmlnSW50ZWdlciIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBqYXZhLm1hdGguQmlnSW50ZWdlcihwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgICAJICAgICAgICAJICAgICAgIAkgICAgICAgIAkgICAgCi0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImJvb2xlYW4iKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5Cb29sZWFuIikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IEJvb2xlYW4ocGFyYW1ldGVyKTsKLSAgICAgICAgICAgIH0JCQorICAgICAgICB0cnkgeworICAgICAgICAgICAgU3RyaW5nIHR5cGVOYW1lID0gdHlwZS5nZXROYW1lKCk7CisgICAgICAgICAgICBpZiAoIHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLlN0cmluZyIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLk9iamVjdCIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcmFtZXRlcjsKKyAgICAgICAgICAgIH0KIAotICAgIAkgICAgcmV0dXJuIHBhcmFtZXRlcjsKLSAgICAJfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19uZmUiLCBwYXJhbWV0ZXIpOwotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHBhcmFtZXRlcisiOiBOb3QgYSB2YWxpZCB2YWx1ZSBmb3IgdGhpcyBtZXRob2QgIik7Ci0gICAgCX0KKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImludCIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkludGVnZXIiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgSW50ZWdlcihwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJzaG9ydCIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLlNob3J0IikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNob3J0KHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImJ5dGUiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5CeXRlIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJ5dGUocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygibG9uZyIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkxvbmciKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTG9uZyhwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJmbG9hdCIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkZsb2F0IikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0KHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImRvdWJsZSIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkRvdWJsZSIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEb3VibGUocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiamF2YS5tYXRoLkJpZ0RlY2ltYWwiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgamF2YS5tYXRoLkJpZ0RlY2ltYWwocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiamF2YS5tYXRoLkJpZ0ludGVnZXIiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgamF2YS5tYXRoLkJpZ0ludGVnZXIocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiYm9vbGVhbiIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkJvb2xlYW4iKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQm9vbGVhbihwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gcGFyYW1ldGVyOworICAgICAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX25mZSIsIHBhcmFtZXRlcik7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24ocGFyYW1ldGVyKyI6IE5vdCBhIHZhbGlkIHZhbHVlIGZvciB0aGlzIG1ldGhvZCAiKTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9TZWN1cml0eVV0aWxzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9TZWN1cml0eVV0aWxzLmphdmEKaW5kZXggZmMxNDliZi4uZjAwOGU3ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvU2VjdXJpdHlVdGlscy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL1NlY3VyaXR5VXRpbHMuamF2YQpAQCAtMjksMzYgKzI5LDM2IEBACiAvKioKICAqIFNlY3VyaXR5VXRpbHMgZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8yMgotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMjIKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIHB1YmxpYyBjbGFzcyBTZWN1cml0eVV0aWxzIHsKIAogICAgIC8qKgotICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0LCBnaXZlbiAKLSAgICAgKiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiwgc3ViamVjdCBhbmQgdGhlIAotICAgICAqIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4uIEl0IGZpcnN0IGNoZWNrcyBpZiB0aGUgCi0gICAgICogPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBpcyBudWxsIG9yIG5vdC4gSWYgaXQgaXMgbm90IG51bGwsIAorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0LCBnaXZlbgorICAgICAqIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LCBzdWJqZWN0IGFuZCB0aGUKKyAgICAgKiA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+LiBJdCBmaXJzdCBjaGVja3MgaWYgdGhlCisgICAgICogPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBpcyBudWxsIG9yIG5vdC4gSWYgaXQgaXMgbm90IG51bGwsCiAgICAgICogaXQgY29uc3RydWN0cyBhIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0IHdpdGgKICAgICAgKiB0aGUgdXNlciBhbmQgcGFzc3dvcmQgZmllbGRzIGZyb20gdGhlIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gYW5kIHJldHVybnMgdGhpcwotICAgICAqIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0LiBJZiB0aGUgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiAKLSAgICAgKiBpcyBudWxsLCBpdCByZXRyaWV2ZXMgdGhlIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0cyBmcm9tIAorICAgICAqIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0LiBJZiB0aGUgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPgorICAgICAqIGlzIG51bGwsIGl0IHJldHJpZXZlcyB0aGUgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3RzIGZyb20KICAgICAgKiB0aGUgPGNvZGU+U3ViamVjdDwvY29kZT4gcGFyYW1ldGVyIGFuZCByZXR1cm5zIHRoZSBmaXJzdAotICAgICAqIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0IHdoaWNoIGNvbnRhaW5zIGEgCisgICAgICogPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3Qgd2hpY2ggY29udGFpbnMgYQogICAgICAqIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4sIGluc3RhbmNlIGVxdWl2YWxlbnQKICAgICAgKiB0byB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiwgcGFyYW1ldGVyLgogICAgICAqCi0gICAgICogQHBhcmFtCW1jZgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+Ci0gICAgICogQHBhcmFtCXN1YmplY3QJPGNvZGU+U3ViamVjdDwvY29kZT4KLSAgICAgKiBAcGFyYW0JaW5mbwk8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+Ci0gICAgICogQHJldHVybgk8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+Ci0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4JZ2VuZXJpYyBleGNlcHRpb24gaWYgb3BlcmF0aW9uIGZhaWxzCi0gICAgICogQHRocm93cwk8Y29kZT5TZWN1cml0eUV4Y2VwdGlvbjwvY29kZT4JaWYgYWNjZXNzIHRvIHRoZSA8Y29kZT5TdWJqZWN0PC9jb2RlPiBpbnN0YW5jZSBpcyBkZW5pZWQKKyAgICAgKiBAcGFyYW0gICAgbWNmICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgc3ViamVjdCAgICA8Y29kZT5TdWJqZWN0PC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBpbmZvICAgIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiAgICBnZW5lcmljIGV4Y2VwdGlvbiBpZiBvcGVyYXRpb24gZmFpbHMKKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlNlY3VyaXR5RXhjZXB0aW9uPC9jb2RlPiAgICBpZiBhY2Nlc3MgdG8gdGhlIDxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIGlzIGRlbmllZAogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgUGFzc3dvcmRDcmVkZW50aWFsIGdldFBhc3N3b3JkQ3JlZGVudGlhbChmaW5hbCBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmLAogICAgICAgICAgZmluYWwgU3ViamVjdCBzdWJqZWN0LCBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm8gaW5mbykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKIAotCWlmIChpbmZvID09IG51bGwpIHsKKyAgICBpZiAoaW5mbyA9PSBudWxsKSB7CiAgICAgICAgICAgICBpZiAoc3ViamVjdCA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtODksMTQgKzg5LDE0IEBACiAgICAgICAgICAgICByZXR1cm4gcGM7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRydWUgaWYgdHdvIHN0cmluZ3MgYXJlIGVxdWFsOyBmYWxzZSBvdGhlcndpc2UKLSAgICAgKiAKLSAgICAgKiBAcGFyYW0Jc3RyMQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHBhcmFtCXN0cjIJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEByZXR1cm4JdHJ1ZQlpZiB0aGUgdHdvIHN0cmluZ3MgYXJlIGVxdWFsCi0gICAgICogICAgICAgIAlmYWxzZQlvdGhlcndpc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzdHIxICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgc3RyMiAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHJldHVybiAgICB0cnVlICAgIGlmIHRoZSB0d28gc3RyaW5ncyBhcmUgZXF1YWwKKyAgICAgKiAgICAgICAgICAgIGZhbHNlICAgIG90aGVyd2lzZQogICAgICAqLwogICAgIHN0YXRpYyBwcml2YXRlIGJvb2xlYW4gaXNFcXVhbChTdHJpbmcgc3RyMSwgU3RyaW5nIHN0cjIpIHsKICAgICAgICAgaWYgKHN0cjEgPT0gbnVsbCkgewpAQCAtMTA5LDEwICsxMDksMTAgQEAKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRydWUgaWYgdHdvIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0cyBhcmUgZXF1YWw7IGZhbHNlIG90aGVyd2lzZQogICAgICAqCi0gICAgICogQHBhcmFtCXBDMQk8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+Ci0gICAgICogQHBhcmFtCXBDMgk8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+Ci0gICAgICogQHJldHVybgl0cnVlCWlmIHRoZSB0d28gUGFzc3dvcmRDcmVkZW50aWFscyBhcmUgZXF1YWwKLSAgICAgKiAgICAgICAgCWZhbHNlCW90aGVyd2lzZQorICAgICAqIEBwYXJhbSAgICBwQzEgICAgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBwQzIgICAgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgdHJ1ZSAgICBpZiB0aGUgdHdvIFBhc3N3b3JkQ3JlZGVudGlhbHMgYXJlIGVxdWFsCisgICAgICogICAgICAgICAgICBmYWxzZSAgICBvdGhlcndpc2UKICAgICAgKi8KICAgICBzdGF0aWMgcHVibGljIGJvb2xlYW4gaXNQYXNzd29yZENyZWRlbnRpYWxFcXVhbChQYXNzd29yZENyZWRlbnRpYWwgcEMxLCBQYXNzd29yZENyZWRlbnRpYWwgcEMyKSB7CiAgICAgICAgIGlmIChwQzEgPT0gcEMyKQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvYnVpbGQueG1sCmluZGV4IGE1NWJiZjAuLmYwNjBlN2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9idWlsZC54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPHByb2plY3QgbmFtZT0iamRiY19jb25uZWN0b3IiIGJhc2VkaXI9Ii4iIGRlZmF1bHQ9ImJ1aWxkIj4KICAgPHByb3BlcnR5IG5hbWU9InBrZy5kaXIiIHZhbHVlPSJjb20vc3VuL2dqYy91dGlsIi8+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iPgogICAgIDxhbnQgYW50ZmlsZT0iYnVpbGQueG1sIiBkaXI9IiR7Z2pjLmhvbWV9L2JpbiIgdGFyZ2V0PSJjbGVhbiIvPgogICA8L3RhcmdldD4KQEAgLTMzLDcgKzMzLDcgQEAKICAgICAgIDxqYXIgamFyZmlsZT0iJHtkaXN0LmRpcn0vJHtwa2cuZGlyfS91dGlsLmphciIgYmFzZWRpcj0iJHtjbGFzcy5kaXJ9IgogICAgICAgICBpbmNsdWRlcz0iJHtwa2cuZGlyfS8qKi8qIi8+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUxMyIgZGVwZW5kcz0iY29tcGlsZSIvPgogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUxNCIgZGVwZW5kcz0iY29tcGlsZSIvPgogCkBAIC00NCw1ICs0NCw1IEBACiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQxNCIgZGVwZW5kcz0iY29tcGlsZTE0LCBwYWNrYWdlMTQiLz4KIAogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJidWlsZDEzLCBidWlsZDE0Ii8+Ci0gIAorCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9zZXJ2bGV0L1NpbXBsZUJhbmtTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9zZXJ2bGV0L1NpbXBsZUJhbmtTZXJ2bGV0LmphdmEKaW5kZXggZmY3NmYwMC4uODgyYWRhNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvc2VydmxldC9TaW1wbGVCYW5rU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3NlcnZsZXQvU2ltcGxlQmFua1NlcnZsZXQuamF2YQpAQCAtMTcsMTcgKzE3LDE3IEBACiBwYWNrYWdlIHNhbXBsZXMuZWpiLnN1YmNsYXNzaW5nLnNlcnZsZXQ7CiAKIGltcG9ydCBqYXZhLmlvLio7Ci1pbXBvcnQgamF2YS51dGlsLio7IAotaW1wb3J0IGpha2FydGEuc2VydmxldC4qOyAKLWltcG9ydCBqYXZheC5uYW1pbmcuKjsgCi1pbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuKjsgCitpbXBvcnQgamF2YS51dGlsLio7CitpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lio7CitpbXBvcnQgamF2YXgubmFtaW5nLio7CitpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuKjsKIGltcG9ydCBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3Q7Ci1pbXBvcnQgamFrYXJ0YS5lamIuKjsgCitpbXBvcnQgamFrYXJ0YS5lamIuKjsKIAotaW1wb3J0IHNhbXBsZXMuZWpiLnN1YmNsYXNzaW5nLmVqYi4qOyAKK2ltcG9ydCBzYW1wbGVzLmVqYi5zdWJjbGFzc2luZy5lamIuKjsKIGltcG9ydCBjb20uc3VuLmpkYmNyYS5zcGkuSmRiY1NldHVwQWRtaW47CiAKLXB1YmxpYyBjbGFzcyBTaW1wbGVCYW5rU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsgIAorcHVibGljIGNsYXNzIFNpbXBsZUJhbmtTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewogCiAKICAgSW5pdGlhbENvbnRleHQgaW5pdENvbnRleHQgPSBudWxsOwpAQCAtNDMsMTQgKzQzLDE0IEBACiAgIHsKICAgfQogCi0gIHB1YmxpYyB2b2lkIGRvR2V0IChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCxIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSAKLSAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgCisgIHB1YmxpYyB2b2lkIGRvR2V0IChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCxIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKQorICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7Ci0gIH0gIAorICB9CiAKLSAgLyoqIGhhbmRsZXMgdGhlIEhUVFAgUE9TVCBvcGVyYXRpb24gKiovIAotICBwdWJsaWMgdm9pZCBkb1Bvc3QgKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIAotICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAKKyAgLyoqIGhhbmRsZXMgdGhlIEhUVFAgUE9TVCBvcGVyYXRpb24gKiovCisgIHB1YmxpYyB2b2lkIGRvUG9zdCAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkKKyAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICBkb0xvb2t1cCgpOwogICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2ltcGxlQmFua1NlcnZsZXQgaXMgZXhlY3V0aW5nIik7CiAgICAgU3RyaW5nIFNTTiA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJTU04iKTsKQEAgLTY2LDE0ICs2NiwxNCBAQAogICAgIFN0cmluZyB6aXBDb2RlID0gIiI7CiAgICAgbG9uZyBjdXJyZW50U2F2aW5nc0JhbGFuY2UgPSAwOwogICAgIGxvbmcgY3VycmVudENoZWNraW5nQmFsYW5jZSA9IDA7Ci0gICAgIAorCiAgICAgU3RyaW5nIGFjdGlvbiA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJhY3Rpb24iKTsKICAgICBpZiAoYWN0aW9uLmVxdWFscygiQ3JlYXRlIikpCiAgICAgewogICAgICAgbWVzc2FnZSA9ICJBZGQgQ3VzdG9tZXIiOwogICAgICAganNwID0gIi9TaW1wbGVCYW5rQWRkLmpzcCI7CiAgICAgfQotICAgIGVsc2UgaWYgKGFjdGlvbi5lcXVhbHMoIkFkZCBDdXN0b21lciIpKSAKKyAgICBlbHNlIGlmIChhY3Rpb24uZXF1YWxzKCJBZGQgQ3VzdG9tZXIiKSkKICAgICB7CiAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFkZCBDdXN0b21lciBidXR0b24gcHJlc3NlZCIpOwogICAgICAgU1NOID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoIlNTTiIpOwpAQCAtOTAsNyArOTAsNyBAQAogICAgICAgICBjdXN0b21lclNhdmluZ3MgPSBjdXN0b21lclNhdmluZ3NIb21lLmNyZWF0ZShTU04sIGxhc3ROYW1lLCBmaXJzdE5hbWUsIGFkZHJlc3MxLCBhZGRyZXNzMiwgY2l0eSwgc3RhdGUsIHppcENvZGUpOwogICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb3VsZCBub3QgY3JlYXRlIHRoZSBjdXN0b21lciBzYXZpbmdzIHJlbW90ZSBiZWFuIDogIiArIGUudG9TdHJpbmcoKSk7Ci0JdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgLy9yZXR1cm47CiAgICAgICB9CiAgICAgICBtZXNzYWdlID0gIkN1c3RvbWVyIEFkZGVkLiI7CkBAIC0xMDMsNyArMTAzLDcgQEAKICAgICAgICAgY3VzdG9tZXJTYXZpbmdzID0gY3VzdG9tZXJTYXZpbmdzSG9tZS5maW5kQnlQcmltYXJ5S2V5KFNTTik7CiAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvdWxkIG5vdCBmaW5kIHRoZSBjdXN0b21lciByZW1vdGUgYmVhbiA6ICIgKyBlLnRvU3RyaW5nKCkpOwotCXRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIC8vcmV0dXJuOwogICAgICAgfQogICAgICAganNwID0gIi9TaW1wbGVCYW5rRWRpdC5qc3AiOwpAQCAtMTE1LDcgKzExNSw3IEBACiAgICAgICAgIGN1c3RvbWVyU2F2aW5ncyA9IGN1c3RvbWVyU2F2aW5nc0hvbWUuZmluZEJ5UHJpbWFyeUtleShTU04pOwogICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb3VsZCBub3QgZmluZCB0aGUgY3VzdG9tZXIgc2F2aW5ncyByZW1vdGUgYmVhbiA6ICIgKyBlLnRvU3RyaW5nKCkpOwotCXRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIC8vcmV0dXJuOwogICAgICAgfQogICAgICAgbWVzc2FnZSA9ICJEZWxldGUgQ3VzdG9tZXIiOwpAQCAtMTI3LDEyICsxMjcsMTIgQEAKICAgICAgICAgY3VzdG9tZXJTYXZpbmdzSG9tZS5maW5kQnlQcmltYXJ5S2V5KFNTTikucmVtb3ZlKCk7CiAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvdWxkIG5vdCBkZWxldGUgdGhlIGN1c3RvbWVyIHNhdmluZ3MgYmVhbiA6ICIgKyBlLnRvU3RyaW5nKCkpOwotCXRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIC8vcmV0dXJuOwogICAgICAgfQogICAgICAgbWVzc2FnZSA9ICJDdXN0b21lciBEZWxldGVkLiI7CiAgICAgICBqc3AgPSAiL1NpbXBsZUJhbmtNZXNzYWdlLmpzcCI7Ci0gICAgfSAgCisgICAgfQogCiAKICAgICBlbHNlIGlmIChhY3Rpb24uZXF1YWxzKCJVcGRhdGUiKSkKQEAgLTE0Miw3ICsxNDIsNyBAQAogICAgICAgICBjdXN0b21lclNhdmluZ3MgPSAoQ3VzdG9tZXJTYXZpbmdzKWN1c3RvbWVyU2F2aW5nc0hvbWUuZmluZEJ5UHJpbWFyeUtleShTU04pOwogICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb3VsZCBub3QgZmluZCB0aGUgY3VzdG9tZXIgc2F2aW5ncyByZW1vdGUgYmVhbiA6ICIgKyBlLnRvU3RyaW5nKCkpOwotCXRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIC8vcmV0dXJuOwogICAgICAgfQogCkBAIC0xNTEsNyArMTUxLDcgQEAKICAgICAgICAgY3VzdG9tZXJDaGVja2luZyA9IChDdXN0b21lckNoZWNraW5nKWN1c3RvbWVyQ2hlY2tpbmdIb21lLmZpbmRCeVByaW1hcnlLZXkoU1NOKTsKICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ291bGQgbm90IGZpbmQgdGhlIGN1c3RvbWVyIGNoZWNraW5nIHJlbW90ZSBiZWFuIDogIiArIGUudG9TdHJpbmcoKSk7Ci0JdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgLy9yZXR1cm47CiAgICAgICB9CiAKQEAgLTIxMSw5ICsyMTEsOSBAQAogICAgIFJlcXVlc3REaXNwYXRjaGVyIGRpc3BhdGNoZXIgPSBnZXRTZXJ2bGV0Q29udGV4dCgpLmdldFJlcXVlc3REaXNwYXRjaGVyKGpzcCk7CiAgICAgZGlzcGF0Y2hlci5pbmNsdWRlKHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICByZXR1cm47Ci0gIH0gCisgIH0KIAotICBwdWJsaWMgdm9pZCBkb0xvb2t1cCgpIAorICBwdWJsaWMgdm9pZCBkb0xvb2t1cCgpCiAgIHsKICAgICB0cnkgewogICAgICAgaW5pdENvbnRleHQgPSBuZXcgamF2YXgubmFtaW5nLkluaXRpYWxDb250ZXh0KCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9zcWwvZHJvcEJhbmtUYWJsZXMuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvc3FsL2Ryb3BCYW5rVGFibGVzLnNxbAppbmRleCBkZjlkZjM0Li4zM2E3MDY5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9zcWwvZHJvcEJhbmtUYWJsZXMuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3NxbC9kcm9wQmFua1RhYmxlcy5zcWwKQEAgLTEgKzEgQEAKLWRyb3AgdGFibGUgY3VzdG9tZXIyOw0KK2Ryb3AgdGFibGUgY3VzdG9tZXIyOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvc3FsL3NpbXBsZUJhbmsuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ21jZnByb3BlcnRpZXMvc3FsL3NpbXBsZUJhbmsuc3FsCmluZGV4IDZlZjc1YzMuLmUxN2FlZjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3NxbC9zaW1wbGVCYW5rLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5nbWNmcHJvcGVydGllcy9zcWwvc2ltcGxlQmFuay5zcWwKQEAgLTEsMTQgKzEsMTQgQEAKIGRyb3AgdGFibGUgY3VzdG9tZXIyOwogCiBjcmVhdGUgdGFibGUgY3VzdG9tZXIyICgKLSAgU1NOIHZhcmNoYXIyKDkpLCAKLSAgbGFzdE5BbWUgdmFyY2hhcjIoMjApLCAKLSAgZmlyc3RuYW1lIHZhcmNoYXIyKDIwKSwgCi0gIGFkZHJlc3MxIHZhcmNoYXIyICgyMCksIAotICBhZGRyZXNzMiB2YXJjaGFyMigyMCksIAotICBjaXR5IHZhcmNoYXIyKDEwKSwgCi0gIHN0YXRlIHZhcmNoYXIyKDEwKSwgCi0gIHppcGNvZGUgdmFyY2hhcjIoNSksIAorICBTU04gdmFyY2hhcjIoOSksCisgIGxhc3ROQW1lIHZhcmNoYXIyKDIwKSwKKyAgZmlyc3RuYW1lIHZhcmNoYXIyKDIwKSwKKyAgYWRkcmVzczEgdmFyY2hhcjIgKDIwKSwKKyAgYWRkcmVzczIgdmFyY2hhcjIoMjApLAorICBjaXR5IHZhcmNoYXIyKDEwKSwKKyAgc3RhdGUgdmFyY2hhcjIoMTApLAorICB6aXBjb2RlIHZhcmNoYXIyKDUpLAogICBzYXZpbmdzYmFsYW5jZSBudW1iZXIoMTApICwKICAgY2hlY2tpbmdiYWxhbmNlIG51bWJlcigxMCkgKTsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ3JhcHJvcGVydGllcy9yYS9NRVRBLUlORi9yYS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5ncmFwcm9wZXJ0aWVzL3JhL01FVEEtSU5GL3JhLnhtbAppbmRleCA4NjZlYmJjLi5lZDc0MDg1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5ncmFwcm9wZXJ0aWVzL3JhL01FVEEtSU5GL3JhLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5ncmFwcm9wZXJ0aWVzL3JhL01FVEEtSU5GL3JhLnhtbApAQCAtODMsNyArODMsNyBAQAogICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KIAogICAgICAgICA8aW5ib3VuZC1yZXNvdXJjZWFkYXB0ZXI+Ci0gICAgICAgICAgICA8bWVzc2FnZWFkYXB0ZXI+ICAgICAgICAgIAorICAgICAgICAgICAgPG1lc3NhZ2VhZGFwdGVyPgogICAgICAgICAgICAgICAgIDxtZXNzYWdlbGlzdGVuZXI+CiAgICAgICAgICAgICAgICAgICAgIDxtZXNzYWdlbGlzdGVuZXItdHlwZT4KICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rvci5NeU1lc3NhZ2VMaXN0ZW5lcgpAQCAtOTQsNyArOTQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgPC9hY3RpdmF0aW9uc3BlYy1jbGFzcz4KICAgICAgICAgICAgICAgICAgICAgPC9hY3RpdmF0aW9uc3BlYz4KICAgICAgICAgICAgICAgICA8L21lc3NhZ2VsaXN0ZW5lcj4KLSAgICAgICAgICAgIDwvbWVzc2FnZWFkYXB0ZXI+ICAgICAgICAgIAorICAgICAgICAgICAgPC9tZXNzYWdlYWRhcHRlcj4KICAgICAgICAgPC9pbmJvdW5kLXJlc291cmNlYWRhcHRlcj4KICAgICAgICAgPGFkbWlub2JqZWN0PgogICAgICAgICAgIDxhZG1pbm9iamVjdC1pbnRlcmZhY2U+Y29ubmVjdG9yLk15QWRtaW5PYmplY3Q8L2FkbWlub2JqZWN0LWludGVyZmFjZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdyYXByb3BlcnRpZXMvcmEvc3JjL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdyYXByb3BlcnRpZXMvcmEvc3JjL2J1aWxkLnhtbAppbmRleCAyYjc3NDg5Li43ODM5OTFkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5ncmFwcm9wZXJ0aWVzL3JhL3NyYy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ3JhcHJvcGVydGllcy9yYS9zcmMvYnVpbGQueG1sCkBAIC0zMCw4ICszMCw4IEBACiAKICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImluaXQtY29tbW9uIiA+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9ImJ1aWxkLmNsYXNzZXMuZGlyIiB2YWx1ZT0iY2xhc3NlcyIgLz4KLQk8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY29ubmVjdG9yIiAvPgorICAgIDxwYXJhbSBuYW1lPSJidWlsZC5jbGFzc2VzLmRpciIgdmFsdWU9ImNsYXNzZXMiIC8+CisgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNvbm5lY3RvciIgLz4KICAgICA8L2FudGNhbGw+CiAgICAgPGphciBqYXJmaWxlPSIuLi9nZW5lcmljLXJhLmphciIgYmFzZWRpcj0iY2xhc3NlcyIKICAgICAgICAgIGluY2x1ZGVzPSJjb25uZWN0b3IvKi5jbGFzcyIgLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdyYXByb3BlcnRpZXMvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ3JhcHJvcGVydGllcy9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEKaW5kZXggNTU1MzNkNC4uZjU5YjJiMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ3JhcHJvcGVydGllcy9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ3JhcHJvcGVydGllcy9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEKQEAgLTE4LDcgKzE4LDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBDb250cm9scyB7CiAgICAgcHVibGljIHN0YXRpYyBPYmplY3QgcmVhZHlMb2NrID0gbmV3IE9iamVjdCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ3JhcHJvcGVydGllcy9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ3JhcHJvcGVydGllcy9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhCmluZGV4IDY1ODIzM2UuLmQ3M2M4NjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdyYXByb3BlcnRpZXMvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5ncmFwcm9wZXJ0aWVzL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBEZWxpdmVyeVdvcmsgaW1wbGVtZW50cyBXb3JrIHsKIApAQCAtMzYsNyArMzYsNyBAQAogICAgIHByaXZhdGUgU3RyaW5nIG9wOwogICAgIHByaXZhdGUgYm9vbGVhbiBrZWVwQ291bnQ7CiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50ZXIgPSAwOwotICAgIAorCiAgICAgcHVibGljIERlbGl2ZXJ5V29yayhNZXNzYWdlRW5kcG9pbnQgZXAsIGludCBudW1PZk1lc3NhZ2VzLCBTdHJpbmcgb3ApIHsKICAgICAgICAgdGhpcy5lcCA9IGVwOwogICAgICAgICB0aGlzLm51bSA9IG51bU9mTWVzc2FnZXM7CkBAIC00NCw3ICs0NCw3IEBACiAgICAgICAgIHRoaXMua2VlcENvdW50ID0gZmFsc2U7CiAgICAgfQogCi0gICAgcHVibGljIERlbGl2ZXJ5V29yayhNZXNzYWdlRW5kcG9pbnQgZXAsIGludCBudW1PZk1lc3NhZ2VzLCAKKyAgICBwdWJsaWMgRGVsaXZlcnlXb3JrKE1lc3NhZ2VFbmRwb2ludCBlcCwgaW50IG51bU9mTWVzc2FnZXMsCiAgICAgICAgICAgICBTdHJpbmcgb3AsIGJvb2xlYW4ga2VlcENvdW50KSB7CiAgICAgICAgIHRoaXMuZXAgPSBlcDsKICAgICAgICAgdGhpcy5udW0gPSBudW1PZk1lc3NhZ2VzOwpAQCAtNTUsNyArNTUsNyBAQAogICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKIAogICAgICAgICBkZWJ1ZygiRU5URVIuLi4iKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIC8vTWV0aG9kIG9uTWVzc2FnZSA9IGdldE9uTWVzc2FnZU1ldGhvZCgpOwogICAgICAgICAgICAgLy9lcC5iZWZvcmVEZWxpdmVyeShvbk1lc3NhZ2UpOwpAQCAtNzgsMTEgKzc4LDExIEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vZXAuYWZ0ZXJEZWxpdmVyeSgpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiTEVBVkUuLi4iKTsKICAgICB9CiAKQEAgLTkzLDE0ICs5MywxNCBAQAogICAgIH0KIAogICAgIHByaXZhdGUgTWV0aG9kIGdldE9uTWVzc2FnZU1ldGhvZCgpIHsKLSAgICAgICAgCisKICAgICAgICAgTWV0aG9kIG9uTWVzc2FnZU1ldGhvZCA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDbGFzcyBtc2dMaXN0ZW5lckNsYXNzID0gY29ubmVjdG9yLk15TWVzc2FnZUxpc3RlbmVyLmNsYXNzOwogICAgICAgICAgICAgQ2xhc3NbXSBwYXJhbVR5cGVzID0geyBqYXZhLmxhbmcuU3RyaW5nLmNsYXNzIH07Ci0gICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPSAKKyAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9CiAgICAgICAgICAgICAgICAgbXNnTGlzdGVuZXJDbGFzcy5nZXRNZXRob2QoIm9uTWVzc2FnZSIsIHBhcmFtVHlwZXMpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ3JhcHJvcGVydGllcy9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5ncmFwcm9wZXJ0aWVzL3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YQppbmRleCAxMDBjYWNlLi5mYTkzZjYzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5ncmFwcm9wZXJ0aWVzL3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5ncmFwcm9wZXJ0aWVzL3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YQpAQCAtMzYsNyArMzYsNyBAQAogICAgICAgICAgICAgICBmbGFnVG9TdHJpbmcoZmxhZ3MpKTsKICAgICB9CiAKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGZvcmdldChYaWQgeGlkKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2UuZm9yZ2V0OiAiICsgeGlkVG9TdHJpbmcoeGlkKSk7CiAgICAgfQpAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2UucHJlcGFyZTogIiArIHhpZFRvU3RyaW5nKHhpZCkpOwogICAgICAgICByZXR1cm4gWEFSZXNvdXJjZS5YQV9PSzsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgWGlkW10gcmVjb3ZlcihpbnQgZmxhZykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLnJlY292ZXI6ICIgKyBmbGFnVG9TdHJpbmcoZmxhZykpOwogICAgICAgICByZXR1cm4gbnVsbDsKQEAgLTY2LDcgKzY2LDcgQEAKICAgICBwdWJsaWMgYm9vbGVhbiBzZXRUcmFuc2FjdGlvblRpbWVvdXQoaW50IHNlY29uZHMpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzdGFydChYaWQgeGlkLCBpbnQgZmxhZ3MpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5zdGFydDogIiArIHhpZFRvU3RyaW5nKHhpZCkgKyAiLCIgKwogICAgICAgICAgICAgICAgIGZsYWdUb1N0cmluZyhmbGFncykpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ3JhcHJvcGVydGllcy9yYS9zcmMvY29ubmVjdG9yL01lc3NhZ2VzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5ncmFwcm9wZXJ0aWVzL3JhL3NyYy9jb25uZWN0b3IvTWVzc2FnZXMuamF2YQppbmRleCBiNWIwZjAyLi40YzljMDEyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5ncmFwcm9wZXJ0aWVzL3JhL3NyYy9jb25uZWN0b3IvTWVzc2FnZXMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5ncmFwcm9wZXJ0aWVzL3JhL3NyYy9jb25uZWN0b3IvTWVzc2FnZXMuamF2YQpAQCAtMjEsNyArMjEsNyBAQAogLyoqCiAgKiBjb2xsZWN0aW9uIG9mIG1lc3NhZ2VzLgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgTWVzc2FnZXMgewogCkBAIC01NCw3ICs1NCw3IEBACiAgICAgICAgU3RyaW5nIGNvbW1hbmQgID0gYXJnc1swXTsKICAgICAgICBTdHJpbmcgZGVzdE5hbWUgPSBhcmdzWzFdOwogICAgICAgIFN0cmluZyBtZXNzYWdlICA9IGFyZ3NbMl07Ci0gICAKKwogICAgICAgIGlmICghImFkZCIuZXF1YWxzKGNvbW1hbmQpKSB7CiAgICAgICAgICAgIFN5c3RlbS5leGl0KDEpOwogICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdyYXByb3BlcnRpZXMvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5ncmFwcm9wZXJ0aWVzL3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdC5qYXZhCmluZGV4IDg2MmY5ZmYuLmQxOTlkMDEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdyYXByb3BlcnRpZXMvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ3JhcHJvcGVydGllcy9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YQpAQCAtMzgsMTEgKzM4LDExIEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgaW5pdGlhbGl6ZSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXppbmcgdGhlIENvbnRyb2xzIHRvIGZhbHNlOiIrcmVzZXRDb250cm9sKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXppbmcgdGhlIENvbnRyb2xzIHRvIGZhbHNlOiIrcmVzZXRDb250cm9sKTsKICAgICAgICAgaWYgKHJlc2V0Q29udHJvbC5lcXVhbHMoIkJFR0lOTklORyIpKSB7CiAgICAgICAgICAgIENvbnRyb2xzLmRvbmU9ZmFsc2U7Ci0JICAgU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6ZWQgdGhlIENvbnRyb2xzIHRvIGZhbHNlIik7Ci0JfQorICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW015QWRtaW5PYmplY3RdIEluaXRpYWxpemVkIHRoZSBDb250cm9scyB0byBmYWxzZSIpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiBkb25lKCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ3JhcHJvcGVydGllcy9yYS9zcmMvY29ubmVjdG9yL015V29yay5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ3JhcHJvcGVydGllcy9yYS9zcmMvY29ubmVjdG9yL015V29yay5qYXZhCmluZGV4IDJlY2VjNjMuLmE5YTg4ODEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdyYXByb3BlcnRpZXMvcmEvc3JjL2Nvbm5lY3Rvci9NeVdvcmsuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5ncmFwcm9wZXJ0aWVzL3JhL3NyYy9jb25uZWN0b3IvTXlXb3JrLmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBNeVdvcmsgaW1wbGVtZW50cyBXb3JrIHsKIApAQCAtMzUsNyArMzUsNyBAQAogICAgIHByaXZhdGUgYm9vbGVhbiBzdG9wID0gZmFsc2U7CiAgICAgcHJpdmF0ZSBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGZhY3Rvcnk7CiAgICAgcHJpdmF0ZSBXb3JrTWFuYWdlciB3bTsKLSAgICAKKwogICAgIHB1YmxpYyBNeVdvcmsoCiAgICAgICAgICAgICBTdHJpbmcgbmFtZSwgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBmYWN0b3J5LCBXb3JrTWFuYWdlciB3bSkgewogICAgICAgICB0aGlzLmZhY3RvcnkgPSBmYWN0b3J5OwpAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICAgICAgdHJ5IHsKIAogICAgICAgICAgICAgICAgIE1ldGhvZCBvbk1lc3NhZ2UgPSBnZXRPbk1lc3NhZ2VNZXRob2QoKTsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlzRGVsaXZlcnlUcmFuc2FjdGVkID0gIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaXNEZWxpdmVyeVRyYW5zYWN0ZWQgPSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yeS5pc0RlbGl2ZXJ5VHJhbnNhY3RlZChvbk1lc3NhZ2UpKTsKIAogICAgICAgICAgICAgICAgIC8qCkBAIC03MCw3ICs3MCw3IEBACiAgICAgICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIkxFQVZFLi4uIik7CiAgICAgfQogCkBAIC04NSwxNCArODUsMTQgQEAKICAgICB9CiAKICAgICBwdWJsaWMgTWV0aG9kIGdldE9uTWVzc2FnZU1ldGhvZCgpIHsKLSAgICAgICAgCisKICAgICAgICAgTWV0aG9kIG9uTWVzc2FnZU1ldGhvZCA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDbGFzcyBtc2dMaXN0ZW5lckNsYXNzID0gY29ubmVjdG9yLk15TWVzc2FnZUxpc3RlbmVyLmNsYXNzOwogICAgICAgICAgICAgQ2xhc3NbXSBwYXJhbVR5cGVzID0geyBqYXZhLmxhbmcuU3RyaW5nLmNsYXNzIH07Ci0gICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPSAKKyAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9CiAgICAgICAgICAgICAgICAgbXNnTGlzdGVuZXJDbGFzcy5nZXRNZXRob2QoIm9uTWVzc2FnZSIsIHBhcmFtVHlwZXMpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ3JhcHJvcGVydGllcy9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5ncmFwcm9wZXJ0aWVzL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YQppbmRleCA5NDZkOTg3Li5iYjc5MThlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5ncmFwcm9wZXJ0aWVzL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5ncmFwcm9wZXJ0aWVzL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YQpAQCAtMjQsOSArMjQsOSBAQAogICogc28gdGhhdCB0aGUgYXBwIHNlcnZlciBjYW4gaW5zdGFudGlhdGUgYW5kIGNvbmZpZ3VyZQogICogaXQgYXQgdGhlIHJ1bnRpbWUuCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KLXB1YmxpYyBjbGFzcyBTaW1wbGVBY3RpdmF0aW9uU3BlYyAKK3B1YmxpYyBjbGFzcyBTaW1wbGVBY3RpdmF0aW9uU3BlYwogICAgIGltcGxlbWVudHMgQWN0aXZhdGlvblNwZWMsIGphdmEuaW8uU2VyaWFsaXphYmxlIHsKIAogICAgIHByaXZhdGUgU3RyaW5nIGRlc3RpbmF0aW9uTmFtZTsKQEAgLTQyLDcgKzQyLDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldERlc3RpbmF0aW9uTmFtZSAoKSB7CiAgICAgICAgIHJldHVybiB0aGlzLmRlc3RpbmF0aW9uTmFtZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXREZXN0aW5hdGlvbk5hbWUgKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIGRlYnVnKCJzZXREZXN0aW5hdGlvbk5hbWUoKSBjYWxsZWQuLi4gbmFtZSA9ICIgKyBuYW1lKTsKICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbk5hbWUgPSBuYW1lOwpAQCAtNTEsNyArNTEsNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzdGluYXRpb25UeXBlKCkgewogICAgICAgICByZXR1cm4gdGhpcy5kZXN0aW5hdGlvblR5cGU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0RGVzdGluYXRpb25UeXBlIChTdHJpbmcgdHlwZSkgewogICAgICAgICBkZWJ1Zygic2V0RGVzdGluYXRpb25UeXBlICgpIGNhbGxlZC4uLiB0eXBlID0gIiArIHR5cGUpOwogICAgICAgICB0aGlzLmRlc3RpbmF0aW9uVHlwZT0gdHlwZTsKQEAgLTYwLDcgKzYwLDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldFRlc3RQcm9wKCkgewogICAgICAgICByZXR1cm4gdGhpcy50ZXN0UHJvcDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRUZXN0UHJvcCAoU3RyaW5nIHRlc3RQcm9wKSB7CiAgICAgICAgIGRlYnVnKCJzZXRUZXN0UHJvcCAoKSBjYWxsZWQuLi4gdGVzdFByb3AgPSAiICsgdGVzdFByb3ApOwogICAgICAgICB0aGlzLnRlc3RQcm9wID0gdGVzdFByb3A7CkBAIC03Niw3ICs3Niw3IEBACiAgICAgICAgIHRoaXMucmVzb3VyY2VhZGFwdGVyID0gcmE7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgdmFsaWRhdGUoKSB7fSAKKyAgICBwdWJsaWMgdm9pZCB2YWxpZGF0ZSgpIHt9CiAKICAgICBwcml2YXRlIHZvaWQgZGVidWcgKFN0cmluZyBtZXNzYWdlKQogICAgIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdyYXByb3BlcnRpZXMvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5ncmFwcm9wZXJ0aWVzL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbC5qYXZhCmluZGV4IDRjZDU5OWMuLmNlZjZhNTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdyYXByb3BlcnRpZXMvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ3JhcHJvcGVydGllcy9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YQpAQCAtNDAsMTUgKzQwLDE1IEBACiAvKioKICAqIFRoaXMgaXMgYSBzYW1wbGUgcmVzb3VyY2UgYWRhcHRlcgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCi1wdWJsaWMgY2xhc3MgU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbCAKK3B1YmxpYyBjbGFzcyBTaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsCiBpbXBsZW1lbnRzIFJlc291cmNlQWRhcHRlciwgamF2YS5pby5TZXJpYWxpemFibGUgewogCiAgICAgcHJpdmF0ZSBCb290c3RyYXBDb250ZXh0IGN0eDsKICAgICBwcml2YXRlIFdvcmtNYW5hZ2VyIHdtOwogICAgIHByaXZhdGUgU3RyaW5nIHRlc3ROYW1lOwotICAgIAorCiAgICAgcHJpdmF0ZSBEb3VibGUgbm9uU3RyaW5nUHJvcFdpdGhvdXRPdmVycmlkZWRTZXR0ZXIgPSBudWxsOwogICAgIHByaXZhdGUgRG91YmxlIG5vblN0cmluZ1Byb3BXaXRoT3ZlcnJpZGVkU2V0dGVyID0gbnVsbDsKICAgICBwcml2YXRlIFN0cmluZyBzdHJpbmdQcm9wV2l0aE92ZXJyaWRlZFNldHRlciA9IG51bGw7CkBAIC02Miw3ICs2Miw3IEBACiAKICAgICBwdWJsaWMgdm9pZAogICAgIHN0YXJ0KEJvb3RzdHJhcENvbnRleHQgY3R4KSB0aHJvd3MgUmVzb3VyY2VBZGFwdGVySW50ZXJuYWxFeGNlcHRpb257Ci0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCIwMDEuIFNpbXBsZSBSQSBzdGFydC4uLiIpOwogCiAgICAgICAgIHRoaXMuY3R4ID0gY3R4OwpAQCAtNzIsMjEgKzcyLDIxIEBACiAKICAgICAgICAgLy90ZXN0aW5nIGNyZWF0IHRpbWVyCiAgICAgICAgIFRpbWVyIHRpbWVyID0gbnVsbDsKLQkgIHRyeXsKLQkgICAgICB0aW1lciA9IGN0eC5jcmVhdGVUaW1lcigpOwotCSAgfSBjYXRjaChVbmF2YWlsYWJsZUV4Y2VwdGlvbiB1ZSkgewotCSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXJyb3IiKTsKLQkgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VBZGFwdGVySW50ZXJuYWxFeGNlcHRpb24oIkVycm9yIGZvcm0gYm9vdHN0cmFwIik7Ci0JICB9CisgICAgICB0cnl7CisgICAgICAgICAgdGltZXIgPSBjdHguY3JlYXRlVGltZXIoKTsKKyAgICAgIH0gY2F0Y2goVW5hdmFpbGFibGVFeGNlcHRpb24gdWUpIHsKKyAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIik7CisgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uKCJFcnJvciBmb3JtIGJvb3RzdHJhcCIpOworICAgICAgfQogICAgICAgICBkZWJ1ZygiMDA0LiBTaW1wbGUgUkEgc3RhcnQuLi4iKTsKIAogICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgCisKICAgICAgICAgICBYQVRlcm1pbmF0b3IgeGEgPSBjdHguZ2V0WEFUZXJtaW5hdG9yKCk7Ci0gICAgICAgICAgCisKICAgICAgICAgICBYaWQgeGlkMSA9IG5ldyBYSUQoKTsKICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBYSUQxID0gIiArIHhpZDEpOwotICAgICAgICAgIAorCiAgICAgICAgICAgRXhlY3V0aW9uQ29udGV4dCBlYyA9IG5ldyBFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgICAgICAgZWMuc2V0WGlkKHhpZDEpOwogICAgICAgICAgIGVjLnNldFRyYW5zYWN0aW9uVGltZW91dCg1KjEwMDApOyAvLzUgc2Vjb25kcwpAQCAtOTYsMTQgKzk2LDE0IEBACiAgICAgICAgICAgd20uZG9Xb3JrKG91dHcsIDEqMTAwMCwgZWMsIG51bGwpOwogICAgICAgICAgIHhhLmNvbW1pdCh4aWQxLCB0cnVlKTsKICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAKKwogICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIGV4ID0gIiArIGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgeGEucm9sbGJhY2soeGlkMSk7CiAgICAgICAgICAgfQotICAgICAgICAgIAorCiAgICAgICAgICAgWGlkIHhpZDIgPSBuZXcgWElEKCk7CiAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgWElEMiA9ICIgKyB4aWQyKTsKLSAgICAgICAgICAKKwogICAgICAgICAgIGVjID0gbmV3IEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICAgICAgICBlYy5zZXRYaWQoeGlkMik7CiAgICAgICAgICAgZWMuc2V0VHJhbnNhY3Rpb25UaW1lb3V0KDUqMTAwMCk7IC8vNSBzZWNvbmRzCkBAIC0xMjAsNyArMTIwLDcgQEAKICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICB9CiAKLSAgICAgICAgCisKICAgICAgICAgICBmb3IgKGludCBpID0gMCA7IGkgPCAzOyBpKyspIHsKICAgICAgICAgICBUZXN0V01Xb3JrIHcgPSBuZXcgVGVzdFdNV29yayhpLCBmYWxzZSk7CiAgICAgICAgICAgdHJ5IHsKQEAgLTEyOCw3ICsxMjgsNyBAQAogICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRkFJTDogQ0FVR0hUIGV4Y2VwdGlvbiA6IGkgPSAiICsgaSk7CiAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgfSAKKyAgICAgICAgICB9CiAgICAgICAgICAgfQogCiAgICAgICAgICAgZm9yIChpbnQgaSA9IDMgOyBpIDwgNjsgaSsrKSB7CkBAIC0xNzYsNyArMTc2LDcgQEAKICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICB9CiAgICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiMDA1LiBTaW1wbGUgUkEgc3RhcnQuLi4iKTsKICAgICB9CiAKQEAgLTIwOCwxMiArMjA4LDEyIEBACiAKICAgICBwdWJsaWMgdm9pZAogICAgIGVuZHBvaW50RGVhY3RpdmF0aW9uICgKLSAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZW5kcG9pbnRGYWN0b3J5LCAKKyAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZW5kcG9pbnRGYWN0b3J5LAogICAgICAgICAgICAgQWN0aXZhdGlvblNwZWMgc3BlYykgewogICAgICAgICBkZWJ1ZyAoImVuZHBvaW50RGVhY3RpdmF0aW9uIGNhbGxlZC4uLiIpOwogICAgICAgICAoKFdvcmtEaXNwYXRjaGVyKSB3b3JrKS5zdG9wKCk7CiAgICAgfQotICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGVzdE5hbWUoKSB7CiAgICAgICAgIHJldHVybiB0ZXN0TmFtZTsKICAgICB9CkBAIC0yMjcsMzQgKzIyNywzNCBAQAogICAgICAgICBkZWJ1ZyAoImdldE5vblN0cmluZ1Byb3BXaXRob3V0T3ZlcnJpZGVkU2V0dGVyIGNhbGxlZC4uLiIpOwogICAgICAgICByZXR1cm4gdGhpcy5ub25TdHJpbmdQcm9wV2l0aG91dE92ZXJyaWRlZFNldHRlcjsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXROb25TdHJpbmdQcm9wV2l0aG91dE92ZXJyaWRlZFNldHRlcihEb3VibGUgZCkgewogICAgICAgICBkZWJ1ZyAoInNldE5vblN0cmluZ1Byb3BXaXRob3V0T3ZlcnJpZGVkU2V0dGVyKERvdWJsZSkgY2FsbGVkLi4uIik7CiAgICAgICAgIHRoaXMubm9uU3RyaW5nUHJvcFdpdGhvdXRPdmVycmlkZWRTZXR0ZXIgPSBkOwogICAgIH0KLS8vICAgIAorLy8KICAgICBwdWJsaWMgRG91YmxlIGdldE5vblN0cmluZ1Byb3BXaXRoT3ZlcnJpZGVkU2V0dGVyKCl7CiAgICAgICAgIGRlYnVnICgiZ2V0Tm9uU3RyaW5nUHJvcFdpdGhPdmVycmlkZWRTZXR0ZXIgY2FsbGVkLi4uIik7CiAgICAgICAgIHJldHVybiB0aGlzLm5vblN0cmluZ1Byb3BXaXRoT3ZlcnJpZGVkU2V0dGVyOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldE5vblN0cmluZ1Byb3BXaXRoT3ZlcnJpZGVkU2V0dGVyKERvdWJsZSBkKSB7CiAgICAgICAgIGRlYnVnICgic2V0Tm9uU3RyaW5nUHJvcFdpdGhPdmVycmlkZWRTZXR0ZXIoRG91YmxlKSBjYWxsZWQuLi4iKTsKICAgICAgICAgdGhpcy5ub25TdHJpbmdQcm9wV2l0aE92ZXJyaWRlZFNldHRlciA9IGQ7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0Tm9uU3RyaW5nUHJvcFdpdGhPdmVycmlkZWRTZXR0ZXIoU3RyaW5nIHMpIHsKICAgICAgICAgZGVidWcgKCJzZXROb25TdHJpbmdQcm9wV2l0aE92ZXJyaWRlZFNldHRlcihTdHJpbmcpIGNhbGxlZC4uLiIgKwogICAgICAgICAgICAgICAgICAgICAgICAgInRocm93aW5nIHVuc3VwcG9ydGVkZXhjZXB0aW9uIik7CiAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwogCiAgICAgfQotLy8gICAgCisvLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0U3RyaW5nUHJvcFdpdGhPdmVycmlkZWRTZXR0ZXIoKXsKICAgICAgICAgZGVidWcgKCJnZXRTdHJpbmdQcm9wV2l0aE92ZXJyaWRlZFNldHRlciBjYWxsZWQuLi4iKTsKICAgICAgICAgcmV0dXJuIHRoaXMuc3RyaW5nUHJvcFdpdGhPdmVycmlkZWRTZXR0ZXI7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0U3RyaW5nUHJvcFdpdGhPdmVycmlkZWRTZXR0ZXIoU3RyaW5nIHMpewogICAgICAgICBkZWJ1ZyAoInNldFN0cmluZ1Byb3BXaXRoT3ZlcnJpZGVkU2V0dGVyKFN0cmluZykgY2FsbGVkLi4uIik7CiAgICAgICAgIHRoaXMuc3RyaW5nUHJvcFdpdGhPdmVycmlkZWRTZXR0ZXIgPSBzOwpAQCAtMjY1LDE0ICsyNjUsMTQgQEAKICAgICAgICAgICAgICAgICAidGhyb3dpbmcgdW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24iKTsKICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICBwdWJsaWMgdm9pZCBkZWJ1ZyAoU3RyaW5nIG1lc3NhZ2UpIHsKICAgICAgICAgaWYgKGRlYnVnKQogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbF0gPT0+ICIgKyBtZXNzYWdlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgWEFSZXNvdXJjZVtdIGdldFhBUmVzb3VyY2VzKEFjdGl2YXRpb25TcGVjW10gc3BlY3MpIAorICAgIHB1YmxpYyBYQVJlc291cmNlW10gZ2V0WEFSZXNvdXJjZXMoQWN0aXZhdGlvblNwZWNbXSBzcGVjcykKICAgICAgICAgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ3JhcHJvcGVydGllcy9yYS9zcmMvY29ubmVjdG9yL1Rlc3RXTVdvcmsuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdyYXByb3BlcnRpZXMvcmEvc3JjL2Nvbm5lY3Rvci9UZXN0V01Xb3JrLmphdmEKaW5kZXggN2U1ODVhMy4uOWNkMDY2MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ3JhcHJvcGVydGllcy9yYS9zcmMvY29ubmVjdG9yL1Rlc3RXTVdvcmsuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5ncmFwcm9wZXJ0aWVzL3JhL3NyYy9jb25uZWN0b3IvVGVzdFdNV29yay5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgVGVzdFdNV29yayBpbXBsZW1lbnRzIFdvcmsgewogCkBAIC00Miw4ICs0Miw4IEBACiAgICAgcHVibGljIFRlc3RXTVdvcmsoaW50IGlkLCBib29sZWFuIGlzUm9ndWUpIHsKICAgICAgICAgdGhpcyhpZCwgaXNSb2d1ZSwgZmFsc2UsIG51bGwpOwogICAgIH0KLSAgICAKLSAgICBwdWJsaWMgVGVzdFdNV29yayhpbnQgaWQsIGJvb2xlYW4gaXNSb2d1ZSwgCisKKyAgICBwdWJsaWMgVGVzdFdNV29yayhpbnQgaWQsIGJvb2xlYW4gaXNSb2d1ZSwKICAgICAgICAgICAgIGJvb2xlYW4gZG9OZXN0LCBFeGVjdXRpb25Db250ZXh0IGN0eCkgewogICAgICAgICB0aGlzLmlkID0gaWQ7CiAgICAgICAgIHRoaXMuaXNSb2d1ZSA9IGlzUm9ndWU7CkBAIC03NywxMCArNzcsMTAgQEAKICAgICAgICAgICAgIH0gY2F0Y2ggKFdvcmtFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgICAgICBpZiAoZXguZ2V0RXJyb3JDb2RlKCkuZXF1YWxzKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdvcmtFeGNlcHRpb24uVFhfQ09OQ1VSUkVOVF9XT1JLX0RJU0FMTE9XRUQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsgCisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUEFTUzogQ0FVR0hUIEVYUEVDVEVEID0gIiArIGV4LmdldEVycm9yQ29kZSgpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArIAorICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZBSUw6IENBVUdIVCBVTkVYUEVDVEVEID0gIiArIGV4LmdldEVycm9yQ29kZSgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC05Miw3ICs5Miw3IEBACiAgICAgICAgICAgICAgICAgZWMuc2V0VHJhbnNhY3Rpb25UaW1lb3V0KDUqMTAwMCk7IC8vNSBzZWNvbmRzCiAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKG5lc3RlZFdvcmssIDEqMTAwMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAiRkFJTDogQ0FVR0hUIFVORVhQRUNURUQgPSAiICsgZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ3JhcHJvcGVydGllcy9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5ncmFwcm9wZXJ0aWVzL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQppbmRleCAzNGE2MDRmLi5jZDk4YzQ1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5ncmFwcm9wZXJ0aWVzL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5ncmFwcm9wZXJ0aWVzL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQpAQCAtMzMsNyArMzMsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIFdvcmtEaXNwYXRjaGVyIGltcGxlbWVudHMgV29yayB7CiAKQEAgLTQ0LDExICs0NCwxMSBAQAogICAgIHByaXZhdGUgQWN0aXZhdGlvblNwZWMgc3BlYzsKICAgICBwcml2YXRlIFdvcmtNYW5hZ2VyIHdtOwogICAgIHByaXZhdGUgWEFUZXJtaW5hdG9yIHhhOwotICAgIAorCiAgICAgcHVibGljIFdvcmtEaXNwYXRjaGVyKAogICAgICAgICAgICAgU3RyaW5nIGlkLAogICAgICAgICAgICAgQm9vdHN0cmFwQ29udGV4dCBjdHgsCi0gICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGZhY3RvcnksIAorICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBmYWN0b3J5LAogICAgICAgICAgICAgQWN0aXZhdGlvblNwZWMgc3BlYykgewogICAgICAgICB0aGlzLmlkICAgICAgPSBpZDsKICAgICAgICAgdGhpcy5jdHggICAgID0gY3R4OwpAQCAtNjEsNyArNjEsNyBAQAogICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKIAogICAgICAgICBkZWJ1ZygiRU5URVIuLi4iKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHN5bmNocm9uaXplZCAoQ29udHJvbHMucmVhZHlMb2NrKSB7CiAgICAgICAgICAgICAgICAgZGVidWcoIldBSVQuLi4iKTsKQEAgLTgzLDI2ICs4MywyNiBAQAogICAgICAgICAgICAgdHJ5IHsKIAogICAgICAgICAgICAgICAgIE1ldGhvZCBvbk1lc3NhZ2UgPSBnZXRPbk1lc3NhZ2VNZXRob2QoKTsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlzRGVsaXZlcnlUcmFuc2FjdGVkID0gIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaXNEZWxpdmVyeVRyYW5zYWN0ZWQgPSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3RvcnkuaXNEZWxpdmVyeVRyYW5zYWN0ZWQob25NZXNzYWdlKSk7CiAKICAgICAgICAgICAgICAgICBpZiAoIWZhY3RvcnkuaXNEZWxpdmVyeVRyYW5zYWN0ZWQob25NZXNzYWdlKSkgewogICAgICAgICAgICAgICAgICAgICAvL01lc3NhZ2VFbmRwb2ludCBlcCA9IGZhY3RvcnkuY3JlYXRlRW5kcG9pbnQobnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIC8vRGVsaXZlcnlXb3JrIGQgPSBuZXcgRGVsaXZlcnlXb3JrKCJOT19UWCIsIGVwKTsgCisgICAgICAgICAgICAgICAgICAgIC8vRGVsaXZlcnlXb3JrIGQgPSBuZXcgRGVsaXZlcnlXb3JrKCJOT19UWCIsIGVwKTsKICAgICAgICAgICAgICAgICAgICAgLy93bS5kb1dvcmsoZCwgMCwgbnVsbCwgbnVsbCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy9NZXNzYWdlRW5kcG9pbnQgZXAgPSBmYWN0b3J5LmNyZWF0ZUVuZHBvaW50KG51bGwpOwogICAgICAgICAgICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnQgZXAgPSBmYWN0b3J5LmNyZWF0ZUVuZHBvaW50KG5ldyBGYWtlWEFSZXNvdXJjZSgpKTsKICAgICAgICAgICAgICAgICAgICAgaW50IG51bU9mTWVzc2FnZXMgPSA1OwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvL2ltcG9ydGluZyB0cmFuc2FjdGlvbgogCiAgICAgICAgICAgICAgICAgICAgIC8vd3JpdGUvY29tbWl0CiAgICAgICAgICAgICAgICAgICAgIEV4ZWN1dGlvbkNvbnRleHQgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7CiAKLSAgICAgICAgICAgICAgICAgICAgRGVsaXZlcnlXb3JrIHcgPSAKKyAgICAgICAgICAgICAgICAgICAgRGVsaXZlcnlXb3JrIHcgPQogICAgICAgICAgICAgICAgICAgICAgICAgbmV3IERlbGl2ZXJ5V29yayhlcCwgbnVtT2ZNZXNzYWdlcywgIldSSVRFIik7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgdHJ1ZSk7CkBAIC0xMTAsNyArMTEwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIkRPTkUgV1JJVEUgVE8gREIiKTsKICAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMuZXhwZWN0ZWRSZXN1bHRzID0gbnVtT2ZNZXNzYWdlczsKICAgICAgICAgICAgICAgICAgICAgbm90aWZ5QW5kV2FpdCgpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvL2RlbGV0ZS9yb2xsYmFjawogICAgICAgICAgICAgICAgICAgICBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKQEAgLTEyNiw3ICsxMjYsNyBAQAogICAgICAgICAgICAgICAgICAgICAvL2RlbGV0ZS9jb21taXQKICAgICAgICAgICAgICAgICAgICAgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIHcgPSBuZXcgRGVsaXZlcnlXb3JrKGVwLCBudW1PZk1lc3NhZ2VzLCAiREVMRVRFIik7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgdHJ1ZSk7CkBAIC0xNTAsNyArMTUwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgLy9kZWxldGUvY29tbWl0CiAgICAgICAgICAgICAgICAgICAgIGVjID0gc3RhcnRUeCgpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiU3RhcnQgVFggLSAiICsgZWMuZ2V0WGlkKCkpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICB3ID0gbmV3IERlbGl2ZXJ5V29yayhlcCwgbnVtT2ZNZXNzYWdlcywgIkRFTEVURSIpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIHRydWUpOwpAQCAtMTk1LDcgKzE5NSw3IEBACiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGlmIChYQVJlc291cmNlLlhBX09LID09IHhhLnByZXBhcmUoZWMuZ2V0WGlkKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJYQSBQUkVQQVJFL0NPTU1JVC4gRE9ORSBXUklURSBUTyBEQiAiKTsKQEAgLTIwNywxOSArMjA3LDE5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBDb250cm9scy5leHBlY3RlZFJlc3VsdHMgPSAzOwogICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZ5QW5kV2FpdCgpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vZGVsZXRlIGFsbC4KICAgICAgICAgICAgICAgICAgICAgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIHcgPSBuZXcgRGVsaXZlcnlXb3JrKGVwLCAxLCAiREVMRVRFX0FMTCIpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIHRydWUpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiRE9ORSBERUxFVEUgQUxMIEZST00gREIiKTsKICAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMuZXhwZWN0ZWRSZXN1bHRzID0gMDsKICAgICAgICAgICAgICAgICAgICAgbm90aWZ5QW5kV2FpdCgpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBkb25lKCk7CiAgICAgICAgICAgICAgICAgfQogCkBAIC0yNDMsNyArMjQzLDcgQEAKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiTEVBVkUuLi4iKTsKICAgICB9CiAKQEAgLTI1OCwxNCArMjU4LDE0IEBACiAgICAgfQogCiAgICAgcHVibGljIE1ldGhvZCBnZXRPbk1lc3NhZ2VNZXRob2QoKSB7Ci0gICAgICAgIAorCiAgICAgICAgIE1ldGhvZCBvbk1lc3NhZ2VNZXRob2QgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ2xhc3MgbXNnTGlzdGVuZXJDbGFzcyA9IGNvbm5lY3Rvci5NeU1lc3NhZ2VMaXN0ZW5lci5jbGFzczsKICAgICAgICAgICAgIENsYXNzW10gcGFyYW1UeXBlcyA9IHsgamF2YS5sYW5nLlN0cmluZy5jbGFzcyB9OwotICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0gCisgICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPQogICAgICAgICAgICAgICAgIG1zZ0xpc3RlbmVyQ2xhc3MuZ2V0TWV0aG9kKCJvbk1lc3NhZ2UiLCBwYXJhbVR5cGVzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KQEAgLTI4OCwxMyArMjg4LDEzIEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAvL1NsZWVwIGZvciA1IHNlY29uZHMKICAgICAgICAgICAgIC8vVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCg1KjEwMDApOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHN5bmNocm9uaXplZChDb250cm9scy5yZWFkeUxvY2spIHsKICAgICAgICAgICAgICAgICAvL05vdGlmeSB0aGUgY2xpZW50IHRvIGNoZWNrIHRoZSByZXN1bHRzCi0gICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLm5vdGlmeSgpOyAKLSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2subm90aWZ5KCk7CisKICAgICAgICAgICAgICAgICAvL1dhaXQgdW50aWwgcmVzdWx0cyBhcmUgdmVyaWZpZWQgYnkgdGhlIGNsaWVudAotICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay53YWl0KCk7IAorICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay53YWl0KCk7CiAKICAgICAgICAgICAgICAgICBpZiAoc3RvcCkgewogICAgICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0zMTAsNyArMzEwLDcgQEAKICAgICAgICAgICAgIENvbnRyb2xzLmRvbmUgPSB0cnVlOwogICAgICAgICAgICAgc3luY2hyb25pemVkKENvbnRyb2xzLnJlYWR5TG9jaykgewogICAgICAgICAgICAgICAgIC8vTm90aWZ5IHRoZSBjbGllbnQgdG8gY2hlY2sgdGhlIHJlc3VsdHMKLSAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2subm90aWZ5KCk7IAorICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay5ub3RpZnkoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdyYXByb3BlcnRpZXMvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci9ub25zdHJpbmdyYXByb3BlcnRpZXMvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YQppbmRleCA2YTZmODRmLi5mNWI5NzdjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivbm9uc3RyaW5ncmFwcm9wZXJ0aWVzL3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL25vbnN0cmluZ3JhcHJvcGVydGllcy9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhCkBAIC0zMSw4ICszMSw4IEBACiAgICAgcHVibGljIGludCBicmFuY2hRdWFsaWZpZXI7CiAgICAgcHVibGljIGludCBnbG9iYWxUeElEOwogCi0gICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEdUUklEU0laRT0gNjQ7IAotICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhCUVVBTFNJWkU9IDY0OyAKKyAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYR1RSSURTSVpFPSA2NDsKKyAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYQlFVQUxTSVpFPSA2NDsKIAogICAgIHB1YmxpYyBYSUQoKSB7CiAgICAgICAgIGludCBmb28gPSBJRCsrOwpAQCAtNTAsMTAgKzUwLDEwIEBACiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAgICAgICAgICAgICAgICAvLyBJdCBjYW4ndCBiZSBlcXVhbAogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIG90aGVyID0gKFhJRClvOyAgICAgICAgICAgICAgICAgICAvLyBUaGUgb3RoZXIgWElELCBub3cgcHJvcGVybHkgY2FzdAotICAgICAgICAKLSAgICAgICAgaWYgKHRoaXMuZm9ybWF0SUQgPT0gb3RoZXIuZm9ybWF0SUQgCisKKyAgICAgICAgaWYgKHRoaXMuZm9ybWF0SUQgPT0gb3RoZXIuZm9ybWF0SUQKICAgICAgICAgICAgICAgICAmJiB0aGlzLmJyYW5jaFF1YWxpZmllciA9PSBvdGhlci5icmFuY2hRdWFsaWZpZXIKICAgICAgICAgICAgICAgICAmJiB0aGlzLmdsb2JhbFR4SUQgPT0gb3RoZXIuZ2xvYmFsVHhJRCkgewogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC05Myw3ICs5Myw3IEBACiAgICAgICAgICAgICAgICAgImZvcm1hdElEKCIgICAgICsgZm9ybWF0SUQgICAgICsgIiksICIgKwogICAgICAgICAgICAgICAgICJicmFuY2hRdWFsaWZpZXIgKCIgKyBicmFuY2hRdWFsaWZpZXIgKyAiKSwgIiArCiAgICAgICAgICAgICAgICAgImdsb2JhbFR4SUQoIiArIGdsb2JhbFR4SUQgKyAiKX0iKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIHM7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdGhyZWFkcG9vbC9hcHAvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3RocmVhZHBvb2wvYXBwL2J1aWxkLnhtbAppbmRleCA2YzU4ZWZiLi5lZGVjYmFlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdGhyZWFkcG9vbC9hcHAvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90aHJlYWRwb29sL2FwcC9idWlsZC54bWwKQEAgLTM0LDggKzM0LDggQEAKICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImluaXQtY29tbW9uLCBjbGVhbi1jb21tb24iPgogICAgPGFudCBkaXI9InNyYyIgaW5oZXJpdEFsbD0iZmFsc2UiIHRhcmdldD0iYWxsIi8+CiAgICA8YW50Y2FsbCB0YXJnZXQ9ImVhci1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0id29ya3Rlc3QiLz4KLQk8cGFyYW0gbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIi8+CisgICAgPHBhcmFtIG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJ3b3JrdGVzdCIvPgorICAgIDxwYXJhbSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJNRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiLz4KICAgIDwvYW50Y2FsbD4KICAgPC90YXJnZXQ+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90aHJlYWRwb29sL2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdGhyZWFkcG9vbC9hcHAvc3JjL01FVEEtSU5GL2VqYi1qYXIueG1sCmluZGV4IDhjMTIxNDQuLjBjNjE5ZTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90aHJlYWRwb29sL2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3RocmVhZHBvb2wvYXBwL3NyYy9NRVRBLUlORi9lamItamFyLnhtbApAQCAtMzMsOCArMzMsOCBAQAogICAgICAgPHNlc3Npb24tdHlwZT5TdGF0ZWxlc3M8L3Nlc3Npb24tdHlwZT4KICAgICAgIDx0cmFuc2FjdGlvbi10eXBlPkNvbnRhaW5lcjwvdHJhbnNhY3Rpb24tdHlwZT4KICAgICAgIDxyZXNvdXJjZS1lbnYtcmVmPgotCTxyZXNvdXJjZS1lbnYtcmVmLW5hbWU+ZWlzL3Rlc3RBZG1pbjwvcmVzb3VyY2UtZW52LXJlZi1uYW1lPgotCTxyZXNvdXJjZS1lbnYtcmVmLXR5cGU+Y29ubmVjdG9yLk15QWRtaW5PYmplY3Q8L3Jlc291cmNlLWVudi1yZWYtdHlwZT4KKyAgICA8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmVpcy90ZXN0QWRtaW48L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KKyAgICA8cmVzb3VyY2UtZW52LXJlZi10eXBlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC9yZXNvdXJjZS1lbnYtcmVmLXR5cGU+CiAgICAgICA8L3Jlc291cmNlLWVudi1yZWY+CiAgICAgICA8c2VjdXJpdHktaWRlbnRpdHk+CiAgICAgICAgIDx1c2UtY2FsbGVyLWlkZW50aXR5Lz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90aHJlYWRwb29sL2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3RocmVhZHBvb2wvYXBwL3NyYy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwKaW5kZXggOWZjMmI2MC4uODBhMWRjMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3RocmVhZHBvb2wvYXBwL3NyYy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3RocmVhZHBvb2wvYXBwL3NyYy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwKQEAgLTQzLDcgKzQzLDcgQEAKICAgICAgIDwvaW9yLXNlY3VyaXR5LWNvbmZpZz4KICAgICAgIDxyZXNvdXJjZS1lbnYtcmVmPgogICAgICAgICA8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmVpcy90ZXN0QWRtaW48L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KLQk8am5kaS1uYW1lPmVpcy90ZXN0QWRtaW48L2puZGktbmFtZT4KKyAgICA8am5kaS1uYW1lPmVpcy90ZXN0QWRtaW48L2puZGktbmFtZT4KICAgICAgIDwvcmVzb3VyY2UtZW52LXJlZj4KICAgICAgIDxnZW4tY2xhc3Nlcy8+CiAgICAgPC9lamI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdGhyZWFkcG9vbC9hcHAvc3JjL2JlYW5zL1dvcmtUZXN0RUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdGhyZWFkcG9vbC9hcHAvc3JjL2JlYW5zL1dvcmtUZXN0RUpCLmphdmEKaW5kZXggMTk4N2VhZC4uZTU5MWNiNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3RocmVhZHBvb2wvYXBwL3NyYy9iZWFucy9Xb3JrVGVzdEVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90aHJlYWRwb29sL2FwcC9zcmMvYmVhbnMvV29ya1Rlc3RFSkIuamF2YQpAQCAtMzIsMTMgKzMyLDEzIEBACiAKICAgICBwdWJsaWMgV29ya1Rlc3RFSkIoKSB7fQogCi0gICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgCisgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkKICAgICAgICAgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYmVhbiByZW1vdmVkIik7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZXhlY3V0ZVRlc3QoKSB7Ci0JdHJ5IHsKKyAgICB0cnkgewogICAgICAgICAgICAgQ29udHJvbHMuc2V0dXAoKTsKICAgICAgICAgICAgIENvbnRyb2xzLnN1Ym1pdCgpOwogICAgICAgICAgICAgQ29udHJvbHMudHJpZ2dlcldvcmsoKTsKQEAgLTQ2LDEzICs0NiwxMyBAQAogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLm91dCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwotCX0KKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgY29udGV4dCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCSAgICBDb250cm9scyA9IChNeUFkbWluT2JqZWN0KSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWlzL3Rlc3RBZG1pbiIpOworICAgICAgICBDb250cm9scyA9IChNeUFkbWluT2JqZWN0KSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWlzL3Rlc3RBZG1pbiIpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdGhyZWFkcG9vbC9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdGhyZWFkcG9vbC9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZGFkMjA3Yi4uMGIzOGMxOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3RocmVhZHBvb2wvYXBwL3NyYy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90aHJlYWRwb29sL2FwcC9zcmMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiBlamItamFyLnhtbD1NRVRBLUlORi9lamItamFyLnhtbAogc3VuLWVqYi1qYXIueG1sPU1FVEEtSU5GL3N1bi1lamItamFyLnhtbApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3RocmVhZHBvb2wvYXBwL3NyYy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdGhyZWFkcG9vbC9hcHAvc3JjL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBiODFiY2VlLi5lZmE3NzUwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdGhyZWFkcG9vbC9hcHAvc3JjL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdGhyZWFkcG9vbC9hcHAvc3JjL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjgsMjIgKzI4LDIyIEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7Ci0gICAgCisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIC8vc3VwZXIoYXJncyk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZG9UZXN0KCkgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJUaGlzIGlzIHRvIHRlc3QgY29ubmVjdG9yIFRocmVhZFBvb2wgIisKLQkgICAgICAgICAgICAgImNvbnRyYWN0cy4iKTsKLSAgICAgICAgCisgICAgICAgICAgICAgICAgICJjb250cmFjdHMuIik7CisKICAgICAgICAgU3RyaW5nIHJlcyA9ICJOT1QgUlVOIjsKLQlkZWJ1ZygiU3RhcnRpbmcgdGhlIHRocmVhZCBwb29sIHRlc3Q9PiBQbGVhc2Ugd2FpdC4uLiIpOworICAgIGRlYnVnKCJTdGFydGluZyB0aGUgdGhyZWFkIHBvb2wgdGVzdD0+IFBsZWFzZSB3YWl0Li4uIik7CiAgICAgICAgIGJvb2xlYW4gcGFzcyA9IGZhbHNlOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmVzICA9ICIgVEVTVCBQQVNTRUQiOwpAQCAtNTgsMTQgKzU4LDE0IEBACiAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoIkNvbm5lY3Rvci1UaHJlYWRQb29sIik7CiAKLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIkVYSVRJTkcuLi4gU1RBVFVTID0gIiArIHJlcyk7CiAgICAgICAgIHJldHVybiByZXM7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgT2JqZWN0IG8gPSAobmV3IEluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiV29ya1Rlc3QiKTsKLSAgICAgICAgV29ya1Rlc3RIb21lICBob21lID0gKFdvcmtUZXN0SG9tZSkgCisgICAgICAgIFdvcmtUZXN0SG9tZSAgaG9tZSA9IChXb3JrVGVzdEhvbWUpCiAgICAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cobywgV29ya1Rlc3RIb21lLmNsYXNzKTsKICAgICAgICAgV29ya1Rlc3Qgd3QgPSBob21lLmNyZWF0ZSgpOwogICAgICAgICB3dC5leGVjdXRlVGVzdCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3RocmVhZHBvb2wvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3RocmVhZHBvb2wvYnVpbGQueG1sCmluZGV4IDc0MDcwMzkuLjUwNGNkNDEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90aHJlYWRwb29sL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdGhyZWFkcG9vbC9idWlsZC54bWwKQEAgLTYxLDcgKzYxLDcgQEAKIAogICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJ3b3JrdGVzdCIgLz4KKyAgICA8cGFyYW0gbmFtZT0iYXBwbmFtZSIgdmFsdWU9Indvcmt0ZXN0IiAvPgogICAgIDwvYW50Y2FsbD4KICAgPC90YXJnZXQ+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90aHJlYWRwb29sL3JhL3NyYy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdGhyZWFkcG9vbC9yYS9zcmMvYnVpbGQueG1sCmluZGV4IDMwYmZiODEuLjA5NTlkODQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90aHJlYWRwb29sL3JhL3NyYy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3RocmVhZHBvb2wvcmEvc3JjL2J1aWxkLnhtbApAQCAtMzAsOCArMzAsOCBAQAogCiAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJpbml0LWNvbW1vbiIgPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJidWlsZC5jbGFzc2VzLmRpciIgdmFsdWU9ImNsYXNzZXMiIC8+Ci0JPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNvbm5lY3RvciIgLz4KKyAgICA8cGFyYW0gbmFtZT0iYnVpbGQuY2xhc3Nlcy5kaXIiIHZhbHVlPSJjbGFzc2VzIiAvPgorICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjb25uZWN0b3IiIC8+CiAgICAgPC9hbnRjYWxsPgogICAgIDxqYXIgamFyZmlsZT0iLi4vdGhyZWFkcG9vbHRlc3QtcmEuamFyIiBiYXNlZGlyPSJjbGFzc2VzIgogICAgICAgICAgaW5jbHVkZXM9ImNvbm5lY3Rvci8qLmNsYXNzIiAvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3RocmVhZHBvb2wvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3RocmVhZHBvb2wvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhCmluZGV4IDJhZTNjMzIuLjc0ZmVlMDYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90aHJlYWRwb29sL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdGhyZWFkcG9vbC9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEKQEAgLTQyLDcgKzQyLDcgQEAKICAgICBwdWJsaWMgYm9vbGVhbiBlcnJvciA9IGZhbHNlOwogCiAgICAgcHJpdmF0ZSBXb3JrW10gc1dvcmtzID0gbmV3IFdvcmtbc2V0dXBXb3Jrc107Ci0gICAKKwogICAgIHByaXZhdGUgQ29udHJvbHMoV29ya01hbmFnZXIgd20pIHsKICAgICAgICAgdGhpcy53bSA9IHdtOwogICAgIH0KQEAgLTUyLDcgKzUyLDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgc3RhdGljIENvbnRyb2xzIGdldENvbnRyb2xzKCkgewotICAgICAgICByZXR1cm4gY29udHJvbDsgIAorICAgICAgICByZXR1cm4gY29udHJvbDsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXR1cEluaXRpYWxXb3JrcygpIHsKQEAgLTgwLDcgKzgwLDcgQEAKIAogICAgIHB1YmxpYyB2b2lkIHRyaWdnZXIoKSB7CiAgICAgICAgIGlmIChjb21wbGV0ZWRDb3VudCA+IDAgfHwgcmVqZWN0ZWRDb3VudCA+IDAgfHwgZXJyb3IpIHsKLSAgICAgICAgICAgIHJlbGVhc2VBbGwoKTsgCisgICAgICAgICAgICByZWxlYXNlQWxsKCk7CiAgICAgICAgICAgICBkZWJ1ZygiQ29tcGxldGVkIGNvdW50ID0+ICIgKyBjb21wbGV0ZWRDb3VudCArICIgUmVqZWN0ZWQgY291bnQ6IisgcmVqZWN0ZWRDb3VudCArICJlcnJvcjogIiArIGVycm9yKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJFcnJvciB3aGlsZSB0cmlnZ2VyaW5nIHRoZSBhY3R1YWwgdGVzdHMiKTsKICAgICAgICAgfQpAQCAtMTYxLDcgKzE2MSw3IEBACiAgICAgICAgICAgICAgICAgZXZlbnQuZ2V0RXhjZXB0aW9uKCkucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGVycm9yID0gdHJ1ZTsKLSAgICAgICAgICAgIH0gCisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTIxMSw3ICsyMTEsNyBAQAogICAgICAgICB9CiAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKICAgICAgICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7Ci0gICAgICAgICAgICAgICB0cnkgeyAKKyAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgd2FpdChUSU1FX09VVCtCVUZGRVIpOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3RocmVhZHBvb2wvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdGhyZWFkcG9vbC9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YQppbmRleCBlNjRkMDUzLi4xNzYwYmJhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdGhyZWFkcG9vbC9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdGhyZWFkcG9vbC9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YQpAQCAtMzksMTUgKzM5LDE1IEBACiAgICAgcHVibGljIHZvaWQgc2V0TnVtYmVyT2ZTZXR1cFdvcmtzKGludCBjb3VudCkgewogICAgICAgICBjb250cm9sLnNldE51bWJlck9mU2V0dXBXb3Jrcyhjb3VudCk7CiAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICBwdWJsaWMgaW50IGdldE51bWJlck9mU2V0dXBXb3JrcygpIHsKICAgICAgICAgcmV0dXJuIGNvbnRyb2wuZ2V0TnVtYmVyT2ZTZXR1cFdvcmtzKCk7CiAgICAgfQotICAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldE51bWJlck9mQWN0dWFsV29ya3MoaW50IG51bSkgewogICAgICAgICBjb250cm9sLnNldE51bWJlck9mQWN0dWFsV29ya3MobnVtKTsKICAgICB9Ci0gICAgIAorCiAgICAgcHVibGljIGludCBnZXROdW1iZXJPZkFjdHVhbFdvcmtzKCkgewogICAgICAgICByZXR1cm4gY29udHJvbC5nZXROdW1iZXJPZkFjdHVhbFdvcmtzKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3RocmVhZHBvb2wvcmEvc3JjL2Nvbm5lY3Rvci9UaHJlYWRQb29sVGVzdFJBLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdGhyZWFkcG9vbC9yYS9zcmMvY29ubmVjdG9yL1RocmVhZFBvb2xUZXN0UkEuamF2YQppbmRleCA2YmY3ZjJhLi5iNGI5YzMyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdGhyZWFkcG9vbC9yYS9zcmMvY29ubmVjdG9yL1RocmVhZFBvb2xUZXN0UkEuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdGhyZWFkcG9vbC9yYS9zcmMvY29ubmVjdG9yL1RocmVhZFBvb2xUZXN0UkEuamF2YQpAQCAtNzAsMTggKzcwLDE4IEBACiAKICAgICBwdWJsaWMgdm9pZAogICAgIGVuZHBvaW50RGVhY3RpdmF0aW9uICgKLSAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZW5kcG9pbnRGYWN0b3J5LCAKKyAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZW5kcG9pbnRGYWN0b3J5LAogICAgICAgICAgICAgQWN0aXZhdGlvblNwZWMgc3BlYykgewogICAgICAgICBkZWJ1ZyAoImVuZHBvaW50RGVhY3RpdmF0aW9uIGNhbGxlZC4uLiIpOwogICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKICAgICB9Ci0gIAorCiAgICAgdm9pZCBkZWJ1ZyAoU3RyaW5nIG1lc3NhZ2UpIHsKICAgICAgICAgaWYgKGRlYnVnKQogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbF0gPT0+ICIgKyBtZXNzYWdlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgWEFSZXNvdXJjZVtdIGdldFhBUmVzb3VyY2VzKEFjdGl2YXRpb25TcGVjW10gc3BlY3MpIAorICAgIHB1YmxpYyBYQVJlc291cmNlW10gZ2V0WEFSZXNvdXJjZXMoQWN0aXZhdGlvblNwZWNbXSBzcGVjcykKICAgICAgICAgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNDY4NjYxOC4uZGIxZDU3NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOSArMTUsMTkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNvbm5lY3Rvci10eGxldmVsc3dpdGNoLXRlc3QxIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0icmFyZmlsZSIgdmFsdWU9ImpkYmMtcmEteGEucmFyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9idWlsZC54bWwKaW5kZXggYjQ3NjAyMi4uYzQ4ODJiZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL2J1aWxkLnhtbApAQCAtMzgsOSArMzgsOSBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+Ci0JPGFudCBkaXI9InJhIiB0YXJnZXQ9ImNsZWFuIi8+CisgICAgPGFudCBkaXI9InJhIiB0YXJnZXQ9ImNsZWFuIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC01NCwyNSArNTQsMjUgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqLyouY2xhc3MiIC8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1yYSIvPgotCTxhbnQgZGlyPSJyYSIgdGFyZ2V0PSJhc3NlbWJsZSIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8YW50IGRpcj0icmEiIHRhcmdldD0iYXNzZW1ibGUiLz4KKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtcmEtY29uZmlnIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtcmEtY29uZmlnIi8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1yYXItY29tbW9uIj4KLQkJPHBhcmFtIG5hbWU9InJhcmZpbGUiIHZhbHVlPSJyYS9wdWJsaXNoL2xpYi9qZGJjLXJhLXhhLnJhciIvPgorICAgICAgICA8cGFyYW0gbmFtZT0icmFyZmlsZSIgdmFsdWU9InJhL3B1Ymxpc2gvbGliL2pkYmMtcmEteGEucmFyIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1jb25uZWN0b3ItY29ubnBvb2wtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InJhLm5hbWUiIHZhbHVlPSJqZGJjLXJhLXhhIi8+Ci0JPHBhcmFtIG5hbWU9ImNvbm5lY3Rpb24uZGVmbmFtZSIgdmFsdWU9ImphdmF4LnNxbC5YQURhdGFTb3VyY2UiLz4KLQk8cGFyYW0gbmFtZT0iZXh0cmEtcGFyYW1zIiB2YWx1ZT0iLS1tYXRjaGNvbm5lY3Rpb25zPWZhbHNlIi8+Ci0JPHBhcmFtIG5hbWU9ImNvbm5lY3Rvci5jb25wb29sLm5hbWUiIHZhbHVlPSJ0eGxldmVsc3dpdGNoLXBvb2wtMSIvPgorICAgIDxwYXJhbSBuYW1lPSJjb25uZWN0aW9uLmRlZm5hbWUiIHZhbHVlPSJqYXZheC5zcWwuWEFEYXRhU291cmNlIi8+CisgICAgPHBhcmFtIG5hbWU9ImV4dHJhLXBhcmFtcyIgdmFsdWU9Ii0tbWF0Y2hjb25uZWN0aW9ucz1mYWxzZSIvPgorICAgIDxwYXJhbSBuYW1lPSJjb25uZWN0b3IuY29ucG9vbC5uYW1lIiB2YWx1ZT0idHhsZXZlbHN3aXRjaC1wb29sLTEiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0LW9yYWNsZS1wcm9wcyI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJwb29sLnR5cGUiIHZhbHVlPSJjb25uZWN0b3IiLz4KQEAgLTgxLDkgKzgxLDkgQEAKIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtY29ubmVjdG9yLWNvbm5wb29sLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJyYS5uYW1lIiB2YWx1ZT0iamRiYy1yYS14YSIvPgotCTxwYXJhbSBuYW1lPSJjb25uZWN0aW9uLmRlZm5hbWUiIHZhbHVlPSJqYXZheC5zcWwuWEFEYXRhU291cmNlIi8+Ci0JPHBhcmFtIG5hbWU9ImV4dHJhLXBhcmFtcyIgdmFsdWU9Ii0tbWF0Y2hjb25uZWN0aW9ucz1mYWxzZSIvPgotCTxwYXJhbSBuYW1lPSJjb25uZWN0b3IuY29ucG9vbC5uYW1lIiB2YWx1ZT0idHhsZXZlbHN3aXRjaC1wb29sLTIiLz4KKyAgICA8cGFyYW0gbmFtZT0iY29ubmVjdGlvbi5kZWZuYW1lIiB2YWx1ZT0iamF2YXguc3FsLlhBRGF0YVNvdXJjZSIvPgorICAgIDxwYXJhbSBuYW1lPSJleHRyYS1wYXJhbXMiIHZhbHVlPSItLW1hdGNoY29ubmVjdGlvbnM9ZmFsc2UiLz4KKyAgICA8cGFyYW0gbmFtZT0iY29ubmVjdG9yLmNvbnBvb2wubmFtZSIgdmFsdWU9InR4bGV2ZWxzd2l0Y2gtcG9vbC0yIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InNldC1vcmFjbGUtcHJvcHMiPgogICAgICAgICA8cGFyYW0gbmFtZT0icG9vbC50eXBlIiB2YWx1ZT0iY29ubmVjdG9yIi8+CkBAIC05MiwyOCArOTIsMjggQEAKIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtY29ubmVjdG9yLXJlc291cmNlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJjb25uZWN0b3IuY29ucG9vbC5uYW1lIiB2YWx1ZT0idHhsZXZlbHN3aXRjaC1wb29sLTEiLz4KLQk8cGFyYW0gbmFtZT0iY29ubmVjdG9yLmpuZGkubmFtZSIgdmFsdWU9InRlc3QtcmVzLTEiLz4KKyAgICA8cGFyYW0gbmFtZT0iY29ubmVjdG9yLmpuZGkubmFtZSIgdmFsdWU9InRlc3QtcmVzLTEiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWNvbm5lY3Rvci1yZXNvdXJjZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iY29ubmVjdG9yLmNvbnBvb2wubmFtZSIgdmFsdWU9InR4bGV2ZWxzd2l0Y2gtcG9vbC0yIi8+Ci0JPHBhcmFtIG5hbWU9ImNvbm5lY3Rvci5qbmRpLm5hbWUiIHZhbHVlPSJ0ZXN0LXJlcy0yIi8+CisgICAgPHBhcmFtIG5hbWU9ImNvbm5lY3Rvci5qbmRpLm5hbWUiIHZhbHVlPSJ0ZXN0LXJlcy0yIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1yYS1jb25maWciIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJjcmVhdGUtcmVzb3VyY2UtYWRhcHRlci1jb25maWcgIC0tcHJvcGVydHkgUkFQcm9wZXJ0eT1WQUxJRCIvPgotCSAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9ImpkYmMtcmEteGEiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSJqZGJjLXJhLXhhIi8+CiAgICAgICAgICA8L2FudGNhbGw+CiAgICAgIDwvdGFyZ2V0PgogCiAgICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJhLWNvbmZpZyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+Ci0JICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0iZGVsZXRlLXJlc291cmNlLWFkYXB0ZXItY29uZmlnIi8+Ci0JICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iamRiYy1yYS14YSIvPgotCSA8L2FudGNhbGw+Ci0JIDwhLS08YW50Y2FsbCB0YXJnZXQ9InJlY29uZmlnLWNvbW1vbiIvPi0tPgorICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9ImRlbGV0ZS1yZXNvdXJjZS1hZGFwdGVyLWNvbmZpZyIvPgorICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9ImpkYmMtcmEteGEiLz4KKyAgICAgPC9hbnRjYWxsPgorICAgICA8IS0tPGFudGNhbGwgdGFyZ2V0PSJyZWNvbmZpZy1jb21tb24iLz4tLT4KICAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtMTI0LDcgKzEyNCw3IEBACiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi10ZXN0LTMiLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLXRlc3QtMiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb25uZWN0b3IiPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9wb2ludGJhc2Uuc3FsIi8+CkBAIC0xNDQsOCArMTQ0LDggQEAKICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXJhci1jb21tb24iLz4KLQk8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1yYS1jb25maWciLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1yYS1jb25maWciLz4KKyAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXJhIj4KICAgICAgICA8YW50IGRpcj0icmEiIHRhcmdldD0iYnVpbGQiLz4KICAgICA8L3RhcmdldD4KQEAgLTE1MywxNSArMTUzLDE1IEBACiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi10ZXN0LTEiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0LXBvb2wtdHgtc3VwcG9ydCI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJ0eC1zdXBwb3J0IiB2YWx1ZT0iWEFUcmFuc2FjdGlvbiIvPiAgCi0JPHBhcmFtIG5hbWU9InBvb2xOYW1lIiB2YWx1ZT0idHhsZXZlbHN3aXRjaC1wb29sLTEiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InR4LXN1cHBvcnQiIHZhbHVlPSJYQVRyYW5zYWN0aW9uIi8+CisgICAgPHBhcmFtIG5hbWU9InBvb2xOYW1lIiB2YWx1ZT0idHhsZXZlbHN3aXRjaC1wb29sLTEiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0LXBvb2wtdHgtc3VwcG9ydCI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJ0eC1zdXBwb3J0IiB2YWx1ZT0iWEFUcmFuc2FjdGlvbiIvPiAgCi0JPHBhcmFtIG5hbWU9InBvb2xOYW1lIiB2YWx1ZT0idHhsZXZlbHN3aXRjaC1wb29sLTIiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InR4LXN1cHBvcnQiIHZhbHVlPSJYQVRyYW5zYWN0aW9uIi8+CisgICAgPHBhcmFtIG5hbWU9InBvb2xOYW1lIiB2YWx1ZT0idHhsZXZlbHN3aXRjaC1wb29sLTIiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IjEiLz4KQEAgLTE3MCwxNiArMTcwLDE2IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi10ZXN0LTIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0LXBvb2wtdHgtc3VwcG9ydCI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJ0eC1zdXBwb3J0IiB2YWx1ZT0iTG9jYWxUcmFuc2FjdGlvbiIvPiAgCi0JPHBhcmFtIG5hbWU9InBvb2xOYW1lIiB2YWx1ZT0idHhsZXZlbHN3aXRjaC1wb29sLTEiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InR4LXN1cHBvcnQiIHZhbHVlPSJMb2NhbFRyYW5zYWN0aW9uIi8+CisgICAgPHBhcmFtIG5hbWU9InBvb2xOYW1lIiB2YWx1ZT0idHhsZXZlbHN3aXRjaC1wb29sLTEiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0LXBvb2wtdHgtc3VwcG9ydCI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJ0eC1zdXBwb3J0IiB2YWx1ZT0iTG9jYWxUcmFuc2FjdGlvbiIvPiAgCi0JPHBhcmFtIG5hbWU9InBvb2xOYW1lIiB2YWx1ZT0idHhsZXZlbHN3aXRjaC1wb29sLTIiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InR4LXN1cHBvcnQiIHZhbHVlPSJMb2NhbFRyYW5zYWN0aW9uIi8+CisgICAgPHBhcmFtIG5hbWU9InBvb2xOYW1lIiB2YWx1ZT0idHhsZXZlbHN3aXRjaC1wb29sLTIiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0LXBvb2wtdHgtc3VwcG9ydCI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJ0eC1zdXBwb3J0IiB2YWx1ZT0iTG9jYWxUcmFuc2FjdGlvbiIvPiAgCi0JPHBhcmFtIG5hbWU9InBvb2xOYW1lIiB2YWx1ZT0idHhsZXZlbHN3aXRjaC1wb29sLTEiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InR4LXN1cHBvcnQiIHZhbHVlPSJMb2NhbFRyYW5zYWN0aW9uIi8+CisgICAgPHBhcmFtIG5hbWU9InBvb2xOYW1lIiB2YWx1ZT0idHhsZXZlbHN3aXRjaC1wb29sLTEiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IjIiLz4KQEAgLTE4OCwxMiArMTg4LDEyIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi10ZXN0LTMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0LXBvb2wtdHgtc3VwcG9ydCI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJ0eC1zdXBwb3J0IiB2YWx1ZT0iTG9jYWxUcmFuc2FjdGlvbiIvPiAgCi0JPHBhcmFtIG5hbWU9InBvb2xOYW1lIiB2YWx1ZT0idHhsZXZlbHN3aXRjaC1wb29sLTEiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InR4LXN1cHBvcnQiIHZhbHVlPSJMb2NhbFRyYW5zYWN0aW9uIi8+CisgICAgPHBhcmFtIG5hbWU9InBvb2xOYW1lIiB2YWx1ZT0idHhsZXZlbHN3aXRjaC1wb29sLTEiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0LXBvb2wtdHgtc3VwcG9ydCI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJ0eC1zdXBwb3J0IiB2YWx1ZT0iWEFUcmFuc2FjdGlvbiIvPiAgCi0JPHBhcmFtIG5hbWU9InBvb2xOYW1lIiB2YWx1ZT0idHhsZXZlbHN3aXRjaC1wb29sLTIiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InR4LXN1cHBvcnQiIHZhbHVlPSJYQVRyYW5zYWN0aW9uIi8+CisgICAgPHBhcmFtIG5hbWU9InBvb2xOYW1lIiB2YWx1ZT0idHhsZXZlbHN3aXRjaC1wb29sLTIiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IjEiLz4KQEAgLTIxNCwxMyArMjE0LDEzIEBACiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1yYXItY29tbW9uIi8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1jb25uZWN0b3ItY29ubnBvb2wtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InJhLm5hbWUiIHZhbHVlPSJqZGJjLXJhLXhhIi8+Ci0JPHBhcmFtIG5hbWU9ImNvbm5lY3Rpb24uZGVmbmFtZSIgdmFsdWU9ImphdmF4LnNxbC5YQURhdGFTb3VyY2UiLz4KLQk8cGFyYW0gbmFtZT0iZXh0cmEtcGFyYW1zIiB2YWx1ZT0iLS1tYXRjaGNvbm5lY3Rpb25zPWZhbHNlIi8+Ci0JPHBhcmFtIG5hbWU9ImNvbm5lY3Rvci5jb25wb29sLm5hbWUiIHZhbHVlPSJ0eGxldmVsc3dpdGNoLXBvb2wtMyIvPgorICAgIDxwYXJhbSBuYW1lPSJjb25uZWN0aW9uLmRlZm5hbWUiIHZhbHVlPSJqYXZheC5zcWwuWEFEYXRhU291cmNlIi8+CisgICAgPHBhcmFtIG5hbWU9ImV4dHJhLXBhcmFtcyIgdmFsdWU9Ii0tbWF0Y2hjb25uZWN0aW9ucz1mYWxzZSIvPgorICAgIDxwYXJhbSBuYW1lPSJjb25uZWN0b3IuY29ucG9vbC5uYW1lIiB2YWx1ZT0idHhsZXZlbHN3aXRjaC1wb29sLTMiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWNvbm5lY3Rvci1yZXNvdXJjZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iY29ubmVjdG9yLmNvbnBvb2wubmFtZSIgdmFsdWU9InR4bGV2ZWxzd2l0Y2gtcG9vbC0zIi8+Ci0JPHBhcmFtIG5hbWU9ImNvbm5lY3Rvci5qbmRpLm5hbWUiIHZhbHVlPSJ0ZXN0LXJlcy0zIi8+CisgICAgPHBhcmFtIG5hbWU9ImNvbm5lY3Rvci5qbmRpLm5hbWUiIHZhbHVlPSJ0ZXN0LXJlcy0zIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8IS0tCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qbXMtY29tbW9uIj4KQEAgLTIyOSwyMCArMjI5LDIwIEBACiAgICAgICAtLT4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWNvbm5lY3Rvci1jb25ucG9vbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0icmEubmFtZSIgdmFsdWU9Imptc3JhIi8+Ci0JPHBhcmFtIG5hbWU9ImNvbm5lY3Rpb24uZGVmbmFtZSIgdmFsdWU9Impha2FydGEuam1zLlF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkiLz4KLQk8cGFyYW0gbmFtZT0iZXh0cmEtcGFyYW1zIiB2YWx1ZT0iLS1tYXRjaGNvbm5lY3Rpb25zPWZhbHNlIi8+Ci0JPHBhcmFtIG5hbWU9ImNvbm5lY3Rvci5jb25wb29sLm5hbWUiIHZhbHVlPSJqbXMtamRiYy1yZXMtMSIvPgotCTxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iLS10cmFuc2FjdGlvbnN1cHBvcnQgTG9jYWxUcmFuc2FjdGlvbiIvPgorICAgIDxwYXJhbSBuYW1lPSJjb25uZWN0aW9uLmRlZm5hbWUiIHZhbHVlPSJqYWthcnRhLmptcy5RdWV1ZUNvbm5lY3Rpb25GYWN0b3J5Ii8+CisgICAgPHBhcmFtIG5hbWU9ImV4dHJhLXBhcmFtcyIgdmFsdWU9Ii0tbWF0Y2hjb25uZWN0aW9ucz1mYWxzZSIvPgorICAgIDxwYXJhbSBuYW1lPSJjb25uZWN0b3IuY29ucG9vbC5uYW1lIiB2YWx1ZT0iam1zLWpkYmMtcmVzLTEiLz4KKyAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9Ii0tdHJhbnNhY3Rpb25zdXBwb3J0IExvY2FsVHJhbnNhY3Rpb24iLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWNvbm5lY3Rvci1yZXNvdXJjZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iY29ubmVjdG9yLmNvbnBvb2wubmFtZSIgdmFsdWU9Imptcy1qZGJjLXJlcy0xIi8+Ci0JPHBhcmFtIG5hbWU9ImNvbm5lY3Rvci5qbmRpLm5hbWUiIHZhbHVlPSJqbXMvam1zLWpkYmMtcmVzLTEiLz4KKyAgICA8cGFyYW0gbmFtZT0iY29ubmVjdG9yLmpuZGkubmFtZSIgdmFsdWU9Imptcy9qbXMtamRiYy1yZXMtMSIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICAgICAgPGFyZyBsaW5lPSJjcmVhdGUtYWRtaW4tb2JqZWN0Ii8+Ci0JPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgorICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KICAgICAgICAgPGFyZyBsaW5lPSItLXJlc3R5cGUgamFrYXJ0YS5qbXMuUXVldWUiLz4KLQk8YXJnIGxpbmU9Ii0tcmFuYW1lIGptc3JhIi8+CisgICAgPGFyZyBsaW5lPSItLXJhbmFtZSBqbXNyYSIvPgogICAgICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+CiAgICAgICAgIDxhcmcgbGluZT0iLS1wcm9wZXJ0eSBtYXhOdW1BY3RpdmVDb25zdW1lcnM9JHthY3RpdmVjb25zdW1lci5tYXhudW19Ii8+CiAgICAgICAgIDxhcmcgbGluZT0iam1zL1NhbXBsZVF1ZXVlIi8+CkBAIC0yNTAsNyArMjUwLDcgQEAKIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi1mb3Itam1zIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbm5lY3RvciI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgpAQCAtMjY0LDcgKzI2NCw3IEBACiAgICAgICA8IS0tIG5lZ2F0aXZlIHRlc3QgOiBKTVM9SkRCQz1ub24teGEgLS0+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi10ZXN0LTMtZm9yLWptcyIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveS1mb3Itam1zIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbm5lY3RvciI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX3BvaW50YmFzZS5zcWwiLz4KQEAgLTI4NSwyNSArMjg1LDI1IEBACiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgICAgICA8YXJnIGxpbmU9ImRlbGV0ZS1hZG1pbi1vYmplY3QiLz4KLQk8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CisgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICAgICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+CiAgICAgICAgIDxhcmcgbGluZT0iam1zL1NhbXBsZVF1ZXVlIi8+CiAgICAgICA8L2V4ZWM+Ci0gCisKICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXJhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogCiAgICAgPHRhcmdldCBuYW1lPSJydW4tdGVzdC0xLWZvci1qbXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDwhLS0KICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0LXBvb2wtdHgtc3VwcG9ydCI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJ0eC1zdXBwb3J0IiB2YWx1ZT0iTG9jYWxUcmFuc2FjdGlvbiIvPiAgCi0JPHBhcmFtIG5hbWU9InBvb2xOYW1lIiB2YWx1ZT0idHhsZXZlbHN3aXRjaC1wb29sLTMiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InR4LXN1cHBvcnQiIHZhbHVlPSJMb2NhbFRyYW5zYWN0aW9uIi8+CisgICAgPHBhcmFtIG5hbWU9InBvb2xOYW1lIiB2YWx1ZT0idHhsZXZlbHN3aXRjaC1wb29sLTMiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0LXBvb2wtdHgtc3VwcG9ydCI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJ0eC1zdXBwb3J0IiB2YWx1ZT0iWEFUcmFuc2FjdGlvbiIvPiAgCi0JPHBhcmFtIG5hbWU9InBvb2xOYW1lIiB2YWx1ZT0iam1zLWpkYmMtcmVzLTEiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InR4LXN1cHBvcnQiIHZhbHVlPSJYQVRyYW5zYWN0aW9uIi8+CisgICAgPHBhcmFtIG5hbWU9InBvb2xOYW1lIiB2YWx1ZT0iam1zLWpkYmMtcmVzLTEiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIC0tPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KQEAgLTMxMywxMiArMzEzLDEyIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi10ZXN0LTItZm9yLWptcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXQtcG9vbC10eC1zdXBwb3J0Ij4KLSAgICAgICAgPHBhcmFtIG5hbWU9InR4LXN1cHBvcnQiIHZhbHVlPSJYQVRyYW5zYWN0aW9uIi8+ICAKLQk8cGFyYW0gbmFtZT0icG9vbE5hbWUiIHZhbHVlPSJ0eGxldmVsc3dpdGNoLXBvb2wtMyIvPgorICAgICAgICA8cGFyYW0gbmFtZT0idHgtc3VwcG9ydCIgdmFsdWU9IlhBVHJhbnNhY3Rpb24iLz4KKyAgICA8cGFyYW0gbmFtZT0icG9vbE5hbWUiIHZhbHVlPSJ0eGxldmVsc3dpdGNoLXBvb2wtMyIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXQtcG9vbC10eC1zdXBwb3J0Ij4KLSAgICAgICAgPHBhcmFtIG5hbWU9InR4LXN1cHBvcnQiIHZhbHVlPSJMb2NhbFRyYW5zYWN0aW9uIi8+ICAKLQk8cGFyYW0gbmFtZT0icG9vbE5hbWUiIHZhbHVlPSJqbXMtamRiYy1yZXMtMSIvPgorICAgICAgICA8cGFyYW0gbmFtZT0idHgtc3VwcG9ydCIgdmFsdWU9IkxvY2FsVHJhbnNhY3Rpb24iLz4KKyAgICA8cGFyYW0gbmFtZT0icG9vbE5hbWUiIHZhbHVlPSJqbXMtamRiYy1yZXMtMSIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iam1zLWpkYmMtMiIvPgpAQCAtMzI3LDEyICszMjcsMTIgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0icnVuLXRlc3QtMy1mb3Itam1zIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InNldC1wb29sLXR4LXN1cHBvcnQiPgotICAgICAgICA8cGFyYW0gbmFtZT0idHgtc3VwcG9ydCIgdmFsdWU9IkxvY2FsVHJhbnNhY3Rpb24iLz4gIAotCTxwYXJhbSBuYW1lPSJwb29sTmFtZSIgdmFsdWU9InR4bGV2ZWxzd2l0Y2gtcG9vbC0zIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJ0eC1zdXBwb3J0IiB2YWx1ZT0iTG9jYWxUcmFuc2FjdGlvbiIvPgorICAgIDxwYXJhbSBuYW1lPSJwb29sTmFtZSIgdmFsdWU9InR4bGV2ZWxzd2l0Y2gtcG9vbC0zIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InNldC1wb29sLXR4LXN1cHBvcnQiPgotICAgICAgICA8cGFyYW0gbmFtZT0idHgtc3VwcG9ydCIgdmFsdWU9IkxvY2FsVHJhbnNhY3Rpb24iLz4gIAotCTxwYXJhbSBuYW1lPSJwb29sTmFtZSIgdmFsdWU9Imptcy1qZGJjLXJlcy0xIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJ0eC1zdXBwb3J0IiB2YWx1ZT0iTG9jYWxUcmFuc2FjdGlvbiIvPgorICAgIDxwYXJhbSBuYW1lPSJwb29sTmFtZSIgdmFsdWU9Imptcy1qZGJjLXJlcy0xIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSJqbXMtamRiYy0zIi8+CkBAIC0zNDQsOCArMzQ0LDggQEAKICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRyb3Atc3FsIj4KLSAgICAgIAorCiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggZjU3N2Y1Ny4uMmI0ZWE2MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjYsMTMyICsyNiwxMzIgQEAKIGltcG9ydCBqYWthcnRhLmptcy4qOwogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogCi0JU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCk7Ci0JU3RyaW5nIHRlc3RTdWl0ZSA9ICJ0eGxldmVsc3dpdGNoLXRlc3QxICI7CisgICAgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCk7CisgICAgU3RyaW5nIHRlc3RTdWl0ZSA9ICJ0eGxldmVsc3dpdGNoLXRlc3QxICI7CiAKICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgT2JqZWN0IG9ialJlZiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlU2Vzc2lvbkhvbWUiKTsKLQlTaW1wbGVTZXNzaW9uSG9tZSBzaW1wbGVTZXNzaW9uSG9tZSA9IChTaW1wbGVTZXNzaW9uSG9tZSkKKyAgICBTaW1wbGVTZXNzaW9uSG9tZSBzaW1wbGVTZXNzaW9uSG9tZSA9IChTaW1wbGVTZXNzaW9uSG9tZSkKICAgICAgICAgamF2YXgucm1pLlBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpSZWYsIFNpbXBsZVNlc3Npb25Ib21lLmNsYXNzKTsKLSAgICAgICAgCi0Jc3RhdC5hZGREZXNjcmlwdGlvbigiUnVubmluZyB0eGxldmVsc3dpdGNoIHRlc3RTdWl0ZTEgIik7CisKKyAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJSdW5uaW5nIHR4bGV2ZWxzd2l0Y2ggdGVzdFN1aXRlMSAiKTsKICAgICAgICAgU2ltcGxlU2Vzc2lvbiBzaW1wbGVTZXNzaW9uID0gc2ltcGxlU2Vzc2lvbkhvbWUuY3JlYXRlKCk7Ci0JaWYgKCAiMiIuZXF1YWxzKGFyZ3NbMF0pICkgewotCSAgICAvL0hlcmUgd2UgYXJlIHVzaW5nIDIgbm9uLVhBIGRhdGFzb3VyY2VzCi0JICAgIHRyeSB7CisgICAgaWYgKCAiMiIuZXF1YWxzKGFyZ3NbMF0pICkgeworICAgICAgICAvL0hlcmUgd2UgYXJlIHVzaW5nIDIgbm9uLVhBIGRhdGFzb3VyY2VzCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgaWYgKHNpbXBsZVNlc3Npb24udGVzdDIoKSApIHsKLQkgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0MiA6ICIgLCBzdGF0LlBBU1MgKTsKLQkgICAgICAgIH0gZWxzZSB7Ci0JICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDIgOiAiICwgc3RhdC5GQUlMICk7Ci0JICAgICAgICB9Ci0JICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlKSB7Ci0JICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImFwcCB0aHJldyBleGNlcHRpb24qKioqKioqKiIpOwotCSAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiB0ZXN0MiA6ICIsIHN0YXQuUEFTUyk7Ci0JICAgIH0KLQl9IGVsc2UgaWYgKCAiMSIuZXF1YWxzKGFyZ3NbMF0pIHx8ICIzIi5lcXVhbHMoYXJnc1swXSkpIHsKLQkgICAgLy9IZXJlIHdlIGFyZSB1c2luZyAyIFhBIGRhdGFzb3VyY2VzCisgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDIgOiAiICwgc3RhdC5QQVNTICk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3QyIDogIiAsIHN0YXQuRkFJTCApOworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJhcHAgdGhyZXcgZXhjZXB0aW9uKioqKioqKioiKTsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgdGVzdDIgOiAiLCBzdGF0LlBBU1MpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmICggIjEiLmVxdWFscyhhcmdzWzBdKSB8fCAiMyIuZXF1YWxzKGFyZ3NbMF0pKSB7CisgICAgICAgIC8vSGVyZSB3ZSBhcmUgdXNpbmcgMiBYQSBkYXRhc291cmNlcwogICAgICAgICAgICAgaWYgKHNpbXBsZVNlc3Npb24udGVzdDEoKSApIHsKLQkgICAgICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3QxIDogIiAsIHN0YXQuUEFTUyApOwotCSAgICB9IGVsc2UgewotCSAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDEgOiAiICwgc3RhdC5GQUlMICk7Ci0JICAgIH0KLSAgICAKLQl9IGVsc2UgaWYgKCJqbXMtamRiYy0xIi5lcXVhbHMoYXJnc1swXSkgKSB7Ci0JICAgICBpZiAoc2ltcGxlU2Vzc2lvbi5qbXNKZGJjVGVzdDEoKSApIHsKLQkgICAgICAgIAotCSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgTm93IHdhaXRpbmcgZm9yIG1lc3NhZ2UgaW4gY2xpZW50ICIpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIiBCZWZvcmUgTG9va3VwIG9mIFFDRiIpOwotCQlRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHFjZiA9IChRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5KQotCQkgICAgLy9pYy5sb29rdXAoImphdmE6Y29tcC9lbnYvam1zL2ptcy1qZGJjLXJlcy0xIik7Ci0JCSAgICBpYy5sb29rdXAoImptcy9qbXMtamRiYy1yZXMtMSIpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIiBBZnRlciBMb29rdXAgb2YgUUNGIik7Ci0JICAgICAgICAKLQkJU3lzdGVtLm91dC5wcmludGxuKCIgQmVmb3JlIGxvb2t1cCBvZiBRIik7Ci0JCWpha2FydGEuam1zLlF1ZXVlIHF1ZXVlID0gKGpha2FydGEuam1zLlF1ZXVlKSBpYy5sb29rdXAoImptcy9TYW1wbGVRdWV1ZSIpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIiBBZnRlciBsb29rdXAgb2YgUSIpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIiBCZWZvcmUgY3JlYXRlUXVldWVDb25uZWN0aW9uIik7Ci0JCVF1ZXVlQ29ubmVjdGlvbiBxQ29ubiA9IHFjZi5jcmVhdGVRdWV1ZUNvbm5lY3Rpb24oImd1ZXN0IiwgImd1ZXN0Iik7Ci0JCXFDb25uLnN0YXJ0KCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiIEFmdGVyIGNyZWF0ZVF1ZXVlQ29ubmVjdGlvbiIpOwotCQkKLQkJU3lzdGVtLm91dC5wcmludGxuKCIgQmVmb3JlIGNyZWF0ZVF1ZXVlU2Vzc2lvbiIpOwotCQlRdWV1ZVNlc3Npb24gcVNlc3MgPSBxQ29ubi5jcmVhdGVRdWV1ZVNlc3Npb24oZmFsc2UsCi0JCSAgICBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIiBBZnRlciBjcmVhdGVRdWV1ZVNlc3Npb24iKTsKLQkJUXVldWVSZWNlaXZlciBxUmVjdiA9IHFTZXNzLmNyZWF0ZVJlY2VpdmVyKHF1ZXVlKTsKLQkJVGV4dE1lc3NhZ2UgdGV4dE1zZyA9IChUZXh0TWVzc2FnZSkgcVJlY3YucmVjZWl2ZSggMjAwMDAgKTsKLQkJLy9pZiAoIHRleHRNc2cgIT0gbnVsbCAmJiAiSGVsbG8gV29ybGQiLmVxdWFscyggdGV4dE1zZy5nZXRUZXh0KCkgKSApIHsKLQkJaWYgKCB0ZXh0TXNnICE9IG51bGwgKSB7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBUZXh0IG1lc3NhZ2UgaXMgOiAiICsgdGV4dE1zZy5nZXRUZXh0KCkgKTsKLQkJICAgIAotCSAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIGptcy1qZGJjLXRlc3QxIDogIiAsIHN0YXQuUEFTUyApOwotCQl9IGVsc2UgewotCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCIgVGV4dE1Fc3NhZ2UgaXMgbnVsbCIpOwotCQkgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgam1zLWpkYmMtdGVzdDEgOiAiLCBzdGF0LkZBSUwgKTsKLQkJfQotCQlxU2Vzcy5jbG9zZSgpOwotCQlxQ29ubi5jbG9zZSgpOwotCQkKLQkgICAgICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIGptcy1qZGJjLXRlc3QxIDogIiAsIHN0YXQuUEFTUyApOwotCSAgICB9IGVsc2UgewotCSAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgam1zLWpkYmMtdGVzdDEgOiAiICwgc3RhdC5GQUlMICk7Ci0JICAgIH0KKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3QxIDogIiAsIHN0YXQuUEFTUyApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDEgOiAiICwgc3RhdC5GQUlMICk7CisgICAgICAgIH0KIAotCX0gZWxzZSBpZiAoImptcy1qZGJjLTIiLmVxdWFscyhhcmdzWzBdKSApIHsKLQkgICAgaWYgKCBzaW1wbGVTZXNzaW9uLmptc0pkYmNUZXN0MigpICkgewotCSAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgam1zLWpkYmMtdGVzdDIgOiAiICwgc3RhdC5QQVNTICk7Ci0gICAgICAgICAgICAgICAgCi0JICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBOb3cgd2FpdGluZyBmb3IgbWVzc2FnZSBpbiBjbGllbnQgIik7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiIEJlZm9yZSBMb29rdXAgb2YgUUNGIik7Ci0JCVF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcWNmID0gKFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkpCi0JCSAgICAvL2ljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9qbXMvam1zLWpkYmMtcmVzLTEiKTsKLQkJICAgIGljLmxvb2t1cCgiam1zL2ptcy1qZGJjLXJlcy0xIik7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiIEFmdGVyIExvb2t1cCBvZiBRQ0YiKTsKLQkgICAgICAgIAotCQlTeXN0ZW0ub3V0LnByaW50bG4oIiBCZWZvcmUgbG9va3VwIG9mIFEiKTsKLQkJamFrYXJ0YS5qbXMuUXVldWUgcXVldWUgPSAoamFrYXJ0YS5qbXMuUXVldWUpIGljLmxvb2t1cCgiam1zL1NhbXBsZVF1ZXVlIik7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiIEFmdGVyIGxvb2t1cCBvZiBRIik7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiIEJlZm9yZSBjcmVhdGVRdWV1ZUNvbm5lY3Rpb24iKTsKLQkJUXVldWVDb25uZWN0aW9uIHFDb25uID0gcWNmLmNyZWF0ZVF1ZXVlQ29ubmVjdGlvbigiZ3Vlc3QiLCAiZ3Vlc3QiKTsKLQkJcUNvbm4uc3RhcnQoKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCIgQWZ0ZXIgY3JlYXRlUXVldWVDb25uZWN0aW9uIik7Ci0JCQotCQlTeXN0ZW0ub3V0LnByaW50bG4oIiBCZWZvcmUgY3JlYXRlUXVldWVTZXNzaW9uIik7Ci0JCVF1ZXVlU2Vzc2lvbiBxU2VzcyA9IHFDb25uLmNyZWF0ZVF1ZXVlU2Vzc2lvbihmYWxzZSwKLQkJICAgIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiIEFmdGVyIGNyZWF0ZVF1ZXVlU2Vzc2lvbiIpOwotCQlRdWV1ZVJlY2VpdmVyIHFSZWN2ID0gcVNlc3MuY3JlYXRlUmVjZWl2ZXIocXVldWUpOwotCQlUZXh0TWVzc2FnZSB0ZXh0TXNnID0gKFRleHRNZXNzYWdlKSBxUmVjdi5yZWNlaXZlKCAyMDAwMCApOwotCQkvL2lmICggdGV4dE1zZyAhPSBudWxsICYmICJIZWxsbyBXb3JsZCIuZXF1YWxzKCB0ZXh0TXNnLmdldFRleHQoKSApICkgewotCQlpZiAoIHRleHRNc2cgIT0gbnVsbCApIHsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFRleHQgbWVzc2FnZSBpcyA6ICIgKyB0ZXh0TXNnLmdldFRleHQoKSApOwotCQkgICAgCi0JICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgam1zLWpkYmMtdGVzdDIgOiAiICwgc3RhdC5QQVNTICk7Ci0JCX0gZWxzZSB7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBUZXh0TWVzc2FnZSBpcyBudWxsIik7Ci0JCSAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiBqbXMtamRiYy10ZXN0MiA6ICIsIHN0YXQuRkFJTCApOwotCQl9Ci0JCXFTZXNzLmNsb3NlKCk7Ci0JCXFDb25uLmNsb3NlKCk7CisgICAgfSBlbHNlIGlmICgiam1zLWpkYmMtMSIuZXF1YWxzKGFyZ3NbMF0pICkgeworICAgICAgICAgaWYgKHNpbXBsZVNlc3Npb24uam1zSmRiY1Rlc3QxKCkgKSB7CisKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIE5vdyB3YWl0aW5nIGZvciBtZXNzYWdlIGluIGNsaWVudCAiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgQmVmb3JlIExvb2t1cCBvZiBRQ0YiKTsKKyAgICAgICAgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxY2YgPSAoUXVldWVDb25uZWN0aW9uRmFjdG9yeSkKKyAgICAgICAgICAgIC8vaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2ptcy9qbXMtamRiYy1yZXMtMSIpOworICAgICAgICAgICAgaWMubG9va3VwKCJqbXMvam1zLWpkYmMtcmVzLTEiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgQWZ0ZXIgTG9va3VwIG9mIFFDRiIpOworCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIEJlZm9yZSBsb29rdXAgb2YgUSIpOworICAgICAgICBqYWthcnRhLmptcy5RdWV1ZSBxdWV1ZSA9IChqYWthcnRhLmptcy5RdWV1ZSkgaWMubG9va3VwKCJqbXMvU2FtcGxlUXVldWUiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgQWZ0ZXIgbG9va3VwIG9mIFEiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgQmVmb3JlIGNyZWF0ZVF1ZXVlQ29ubmVjdGlvbiIpOworICAgICAgICBRdWV1ZUNvbm5lY3Rpb24gcUNvbm4gPSBxY2YuY3JlYXRlUXVldWVDb25uZWN0aW9uKCJndWVzdCIsICJndWVzdCIpOworICAgICAgICBxQ29ubi5zdGFydCgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBBZnRlciBjcmVhdGVRdWV1ZUNvbm5lY3Rpb24iKTsKKworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBCZWZvcmUgY3JlYXRlUXVldWVTZXNzaW9uIik7CisgICAgICAgIFF1ZXVlU2Vzc2lvbiBxU2VzcyA9IHFDb25uLmNyZWF0ZVF1ZXVlU2Vzc2lvbihmYWxzZSwKKyAgICAgICAgICAgIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIEFmdGVyIGNyZWF0ZVF1ZXVlU2Vzc2lvbiIpOworICAgICAgICBRdWV1ZVJlY2VpdmVyIHFSZWN2ID0gcVNlc3MuY3JlYXRlUmVjZWl2ZXIocXVldWUpOworICAgICAgICBUZXh0TWVzc2FnZSB0ZXh0TXNnID0gKFRleHRNZXNzYWdlKSBxUmVjdi5yZWNlaXZlKCAyMDAwMCApOworICAgICAgICAvL2lmICggdGV4dE1zZyAhPSBudWxsICYmICJIZWxsbyBXb3JsZCIuZXF1YWxzKCB0ZXh0TXNnLmdldFRleHQoKSApICkgeworICAgICAgICBpZiAoIHRleHRNc2cgIT0gbnVsbCApIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFRleHQgbWVzc2FnZSBpcyA6ICIgKyB0ZXh0TXNnLmdldFRleHQoKSApOworCisgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgam1zLWpkYmMtdGVzdDEgOiAiICwgc3RhdC5QQVNTICk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBUZXh0TUVzc2FnZSBpcyBudWxsIik7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiBqbXMtamRiYy10ZXN0MSA6ICIsIHN0YXQuRkFJTCApOworICAgICAgICB9CisgICAgICAgIHFTZXNzLmNsb3NlKCk7CisgICAgICAgIHFDb25uLmNsb3NlKCk7CisKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIGptcy1qZGJjLXRlc3QxIDogIiAsIHN0YXQuUEFTUyApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgam1zLWpkYmMtdGVzdDEgOiAiICwgc3RhdC5GQUlMICk7CisgICAgICAgIH0KKworICAgIH0gZWxzZSBpZiAoImptcy1qZGJjLTIiLmVxdWFscyhhcmdzWzBdKSApIHsKKyAgICAgICAgaWYgKCBzaW1wbGVTZXNzaW9uLmptc0pkYmNUZXN0MigpICkgeworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgam1zLWpkYmMtdGVzdDIgOiAiICwgc3RhdC5QQVNTICk7CisKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIE5vdyB3YWl0aW5nIGZvciBtZXNzYWdlIGluIGNsaWVudCAiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgQmVmb3JlIExvb2t1cCBvZiBRQ0YiKTsKKyAgICAgICAgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxY2YgPSAoUXVldWVDb25uZWN0aW9uRmFjdG9yeSkKKyAgICAgICAgICAgIC8vaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2ptcy9qbXMtamRiYy1yZXMtMSIpOworICAgICAgICAgICAgaWMubG9va3VwKCJqbXMvam1zLWpkYmMtcmVzLTEiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgQWZ0ZXIgTG9va3VwIG9mIFFDRiIpOworCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIEJlZm9yZSBsb29rdXAgb2YgUSIpOworICAgICAgICBqYWthcnRhLmptcy5RdWV1ZSBxdWV1ZSA9IChqYWthcnRhLmptcy5RdWV1ZSkgaWMubG9va3VwKCJqbXMvU2FtcGxlUXVldWUiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgQWZ0ZXIgbG9va3VwIG9mIFEiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgQmVmb3JlIGNyZWF0ZVF1ZXVlQ29ubmVjdGlvbiIpOworICAgICAgICBRdWV1ZUNvbm5lY3Rpb24gcUNvbm4gPSBxY2YuY3JlYXRlUXVldWVDb25uZWN0aW9uKCJndWVzdCIsICJndWVzdCIpOworICAgICAgICBxQ29ubi5zdGFydCgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBBZnRlciBjcmVhdGVRdWV1ZUNvbm5lY3Rpb24iKTsKKworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBCZWZvcmUgY3JlYXRlUXVldWVTZXNzaW9uIik7CisgICAgICAgIFF1ZXVlU2Vzc2lvbiBxU2VzcyA9IHFDb25uLmNyZWF0ZVF1ZXVlU2Vzc2lvbihmYWxzZSwKKyAgICAgICAgICAgIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIEFmdGVyIGNyZWF0ZVF1ZXVlU2Vzc2lvbiIpOworICAgICAgICBRdWV1ZVJlY2VpdmVyIHFSZWN2ID0gcVNlc3MuY3JlYXRlUmVjZWl2ZXIocXVldWUpOworICAgICAgICBUZXh0TWVzc2FnZSB0ZXh0TXNnID0gKFRleHRNZXNzYWdlKSBxUmVjdi5yZWNlaXZlKCAyMDAwMCApOworICAgICAgICAvL2lmICggdGV4dE1zZyAhPSBudWxsICYmICJIZWxsbyBXb3JsZCIuZXF1YWxzKCB0ZXh0TXNnLmdldFRleHQoKSApICkgeworICAgICAgICBpZiAoIHRleHRNc2cgIT0gbnVsbCApIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFRleHQgbWVzc2FnZSBpcyA6ICIgKyB0ZXh0TXNnLmdldFRleHQoKSApOworCisgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgam1zLWpkYmMtdGVzdDIgOiAiICwgc3RhdC5QQVNTICk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBUZXh0TWVzc2FnZSBpcyBudWxsIik7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiBqbXMtamRiYy10ZXN0MiA6ICIsIHN0YXQuRkFJTCApOworICAgICAgICB9CisgICAgICAgIHFTZXNzLmNsb3NlKCk7CisgICAgICAgIHFDb25uLmNsb3NlKCk7CiAKIAotCSAgICB9IGVsc2UgewotCSAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgam1zLWpkYmMtdGVzdDIgOiAiICwgc3RhdC5GQUlMICk7Ci0JICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIGptcy1qZGJjLXRlc3QyIDogIiAsIHN0YXQuRkFJTCApOworICAgICAgICB9CiAKLQl9IGVsc2UgaWYgKCAiam1zLWpkYmMtMyIuZXF1YWxzKGFyZ3NbMF0pICkgeworICAgIH0gZWxzZSBpZiAoICJqbXMtamRiYy0zIi5lcXVhbHMoYXJnc1swXSkgKSB7CiAgICAgICAgICAgICBpZiAoIHNpbXBsZVNlc3Npb24uam1zSmRiY1Rlc3QzKCkpIHsKLQkgICAgICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIGptcy1qZGJjLXRlc3QzIDogIiAsIHN0YXQuUEFTUyApOwotCSAgICB9IGVsc2UgewotCSAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgam1zLWpkYmMtdGVzdDMgOiAiICwgc3RhdC5GQUlMICk7Ci0JICAgIH0KLQl9CQorICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgam1zLWpkYmMtdGVzdDMgOiAiICwgc3RhdC5QQVNTICk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiBqbXMtamRiYy10ZXN0MyA6ICIgLCBzdGF0LkZBSUwgKTsKKyAgICAgICAgfQorICAgIH0KIAotCQotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL2Rlc2NyaXB0b3IvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IGY5MTUwMTEuLjAxZWJlZmMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvZGVzY3JpcHRvci9lamItamFyLnhtbApAQCAtNzUsNiArNzUsNiBAQAogICAgICAgPHRyYW5zLWF0dHJpYnV0ZT5SZXF1aXJlZDwvdHJhbnMtYXR0cmlidXRlPgogICAgIDwvY29udGFpbmVyLXRyYW5zYWN0aW9uPgogICA8L2Fzc2VtYmx5LWRlc2NyaXB0b3I+Ci0gICAgICAKKwogPC9lamItamFyPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCmluZGV4IDAyNDA2ODkuLjNlNzc2NDAgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCkBAIC0zNCwxNSArMzQsMTUgQEAKICAgICAgIDwvcmVzb3VyY2UtcmVmPgogICAgICAgPHJlc291cmNlLXJlZj4KICAgICAgICAgPHJlcy1yZWYtbmFtZT5qbXMvU2FtcGxlUXVldWU8L3Jlcy1yZWYtbmFtZT4KLQk8am5kaS1uYW1lPmptcy9TYW1wbGVRdWV1ZTwvam5kaS1uYW1lPgorICAgIDxqbmRpLW5hbWU+am1zL1NhbXBsZVF1ZXVlPC9qbmRpLW5hbWU+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KICAgICAgIDxyZXNvdXJjZS1yZWY+CiAgICAgICAgIDxyZXMtcmVmLW5hbWU+am1zL2ptcy1qZGJjLXJlcy0xPC9yZXMtcmVmLW5hbWU+Ci0JPGpuZGktbmFtZT5qbXMvam1zLWpkYmMtcmVzLTE8L2puZGktbmFtZT4KKyAgICA8am5kaS1uYW1lPmptcy9qbXMtamRiYy1yZXMtMTwvam5kaS1uYW1lPgogICAgICAgPC9yZXNvdXJjZS1yZWY+CiAgICAgICA8cmVzb3VyY2UtcmVmPgogICAgICAgICA8cmVzLXJlZi1uYW1lPnRlc3QtcmVzLTM8L3Jlcy1yZWYtbmFtZT4KLQk8am5kaS1uYW1lPnRlc3QtcmVzLTM8L2puZGktbmFtZT4KKyAgICA8am5kaS1uYW1lPnRlc3QtcmVzLTM8L2puZGktbmFtZT4KICAgICAgIDwvcmVzb3VyY2UtcmVmPgogICA8L2VqYj4KICAgPC9lbnRlcnByaXNlLWJlYW5zPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvZWpiL1NpbXBsZVNlc3Npb25CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9lamIvU2ltcGxlU2Vzc2lvbkJlYW4uamF2YQppbmRleCA3NmZjMzhjLi44YWQ4YThmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9lamIvU2ltcGxlU2Vzc2lvbkJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9lamIvU2ltcGxlU2Vzc2lvbkJlYW4uamF2YQpAQCAtNDksNjkgKzQ5LDY5IEBACiAgICAgICogVGhpcyBzaG91bGQgd29yayBzaW5jZSBmb3IgdGhpcyB0ZXN0IGJvdGggb3VyIHBvb2xzIGFyZSBYQQogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIHRlc3QxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqSU4gVEVTVCAxKioqKioqKioqKioqKiIpOyAgICAKLQlJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCURhdGFTb3VyY2UgZHMxID0gKERhdGFTb3VyY2UpaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UxIik7Ci0JRGF0YVNvdXJjZSBkczIgPSAoRGF0YVNvdXJjZSlpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZTIiKTsKLQlDb25uZWN0aW9uIGNvbm4xID0gbnVsbDsKLQlDb25uZWN0aW9uIGNvbm4yID0gbnVsbDsKLQlTdGF0ZW1lbnQgc3RtdDEgPSBudWxsOwotCVN0YXRlbWVudCBzdG10MiA9IG51bGw7Ci0JUmVzdWx0U2V0IHJzMSA9IG51bGw7Ci0JUmVzdWx0U2V0IHJzMiA9IG51bGw7Ci0JYm9vbGVhbiBwYXNzZWQgPSB0cnVlOwotCXRyeSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJlZm9yZSBnZXRDb25uZWN0aW9uIDEiKTsJCi0JICAgIGNvbm4xID0gZHMxLmdldENvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWZ0ZXIgZ2V0Q29ubmVjdGlvbiAxIik7CQotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCZWZvcmUgZ2V0Q29ubmVjdGlvbiAyIik7CQotCSAgICBjb25uMiA9IGRzMi5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFmdGVyIGdldENvbm5lY3Rpb24gMiIpOwkKLQkgICAgCi0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJlZm9yZSBjcmVhdGVTdGF0ZW1lbnQgMSIpOwkKLQkgICAgc3RtdDEgPSBjb25uMS5jcmVhdGVTdGF0ZW1lbnQoKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWZ0ZXIgY3JlYXRlU3RhdGVtZW50IDEiKTsJCi0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJlZm9yZSBjcmVhdGVTdGF0ZW1lbnQgMiIpOwkKLQkgICAgc3RtdDIgPSBjb25uMi5jcmVhdGVTdGF0ZW1lbnQoKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWZ0ZXIgY3JlYXRlU3RhdGVtZW50IDIiKTsJCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqSU4gVEVTVCAxKioqKioqKioqKioqKiIpOworICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgRGF0YVNvdXJjZSBkczEgPSAoRGF0YVNvdXJjZSlpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZTEiKTsKKyAgICBEYXRhU291cmNlIGRzMiA9IChEYXRhU291cmNlKWljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlMiIpOworICAgIENvbm5lY3Rpb24gY29ubjEgPSBudWxsOworICAgIENvbm5lY3Rpb24gY29ubjIgPSBudWxsOworICAgIFN0YXRlbWVudCBzdG10MSA9IG51bGw7CisgICAgU3RhdGVtZW50IHN0bXQyID0gbnVsbDsKKyAgICBSZXN1bHRTZXQgcnMxID0gbnVsbDsKKyAgICBSZXN1bHRTZXQgcnMyID0gbnVsbDsKKyAgICBib29sZWFuIHBhc3NlZCA9IHRydWU7CisgICAgdHJ5IHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmVmb3JlIGdldENvbm5lY3Rpb24gMSIpOworICAgICAgICBjb25uMSA9IGRzMS5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFmdGVyIGdldENvbm5lY3Rpb24gMSIpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCZWZvcmUgZ2V0Q29ubmVjdGlvbiAyIik7CisgICAgICAgIGNvbm4yID0gZHMyLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWZ0ZXIgZ2V0Q29ubmVjdGlvbiAyIik7CiAKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZXhlY3V0aW5nIHN0YXRlbWVudCAxIik7IAotCSAgICByczEgPSBzdG10MS5leGVjdXRlUXVlcnkoIlNFTEVDVCAqIEZST00gVFhMRVZFTFNXSVRDSCIpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCZWZvcmUgY3JlYXRlU3RhdGVtZW50IDEiKTsKKyAgICAgICAgc3RtdDEgPSBjb25uMS5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWZ0ZXIgY3JlYXRlU3RhdGVtZW50IDEiKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmVmb3JlIGNyZWF0ZVN0YXRlbWVudCAyIik7CisgICAgICAgIHN0bXQyID0gY29ubjIuY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFmdGVyIGNyZWF0ZVN0YXRlbWVudCAyIik7CiAKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZXhlY3V0aW5nIHN0YXRlbWVudCAyIik7IAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJleGVjdXRpbmcgc3RhdGVtZW50IDEiKTsKKyAgICAgICAgcnMxID0gc3RtdDEuZXhlY3V0ZVF1ZXJ5KCJTRUxFQ1QgKiBGUk9NIFRYTEVWRUxTV0lUQ0giKTsKKworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJleGVjdXRpbmcgc3RhdGVtZW50IDIiKTsKICAgICAgICAgICAgIHJzMiA9IHN0bXQyLmV4ZWN1dGVRdWVyeSgiU0VMRUNUICogRlJPTSBUWExFVkVMU1dJVENIMiIpOwogCi0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZpbmlzaGVkIGV4ZWN1dGluZyBzdGF0ZW1lbnRzIik7IAotCSAgICBwYXNzZWQgPSByczEubmV4dCgpICYgcnMyLm5leHQoKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICBwYXNzZWQgPSBmYWxzZTsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9IGZpbmFsbHkgewotCSAgICBpZiAocnMxICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgeyByczEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KLQkgICAgfQorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJmaW5pc2hlZCBleGVjdXRpbmcgc3RhdGVtZW50cyIpOworICAgICAgICBwYXNzZWQgPSByczEubmV4dCgpICYgcnMyLm5leHQoKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICBwYXNzZWQgPSBmYWxzZTsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBpZiAocnMxICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeyByczEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KKyAgICAgICAgfQogCi0JICAgIGlmIChyczIgIT0gbnVsbCApIHsKLQkgICAgICAgIHRyeSB7IHJzMi5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQotCSAgICB9CisgICAgICAgIGlmIChyczIgIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7IHJzMi5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQorICAgICAgICB9CiAKLQkgICAgaWYgKCBzdG10MSAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsgc3RtdDEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fSAgICAKLQkgICAgfQotCSAgICBpZiAoIHN0bXQyICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgeyBzdG10Mi5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9ICAgIAotCSAgICB9Ci0JICAgIGlmICggY29ubjEgIT0gbnVsbCApIHsKLQkgICAgICAgIHRyeSB7IGNvbm4xLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30gICAgCi0JICAgIH0KLQkgICAgaWYgKCBjb25uMiAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsgY29ubjIuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fSAgICAKLQkgICAgfQotCX0KLQotCXJldHVybiBwYXNzZWQ7CisgICAgICAgIGlmICggc3RtdDEgIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7IHN0bXQxLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQorICAgICAgICBpZiAoIHN0bXQyICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeyBzdG10Mi5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBjb25uMSAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQorICAgICAgICB9CisgICAgICAgIGlmICggY29ubjIgIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7IGNvbm4yLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQogICAgIH0KLSAgICAKKworICAgIHJldHVybiBwYXNzZWQ7CisgICAgfQorCiAgICAgLyoqCiAgICAgICogR2V0IGNvbm5lY3Rpb24gd2l0aCB0d28gbm9uLXhhIGRhdGFzb3VyY2VzLgogICAgICAqIERvIHNvbWUgd29yayB1c2luZyBib3RoLiBTaG91bGQgdGhyb3cgYW4KQEAgLTEyMiwxNTAgKzEyMiwxNTAgQEAKICAgICAgKiBjaGFuZ2VvdmVyIGlzIGluZGVlZCBzdWNjZXNzZnVsCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioqKipJTiBURVNUIDIqKioqKioqKioqKioqIik7ICAgIAotCUluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JRGF0YVNvdXJjZSBkczEgPSAoRGF0YVNvdXJjZSlpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZTEiKTsKLQlEYXRhU291cmNlIGRzMiA9IChEYXRhU291cmNlKWljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlMiIpOwotCUNvbm5lY3Rpb24gY29ubjEgPSBudWxsOwotCUNvbm5lY3Rpb24gY29ubjIgPSBudWxsOwotCVN0YXRlbWVudCBzdG10MSA9IG51bGw7Ci0JU3RhdGVtZW50IHN0bXQyID0gbnVsbDsKLQlSZXN1bHRTZXQgcnMxID0gbnVsbDsKLQlSZXN1bHRTZXQgcnMyID0gbnVsbDsKLQlib29sZWFuIHBhc3NlZCA9IHRydWU7Ci0JdHJ5IHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmVmb3JlIGdldENvbm5lY3Rpb24gMSIpOwkKLQkgICAgY29ubjEgPSBkczEuZ2V0Q29ubmVjdGlvbigpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBZnRlciBnZXRDb25uZWN0aW9uIDEiKTsJCi0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJlZm9yZSBnZXRDb25uZWN0aW9uIDIiKTsJCi0JICAgIGNvbm4yID0gZHMyLmdldENvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWZ0ZXIgZ2V0Q29ubmVjdGlvbiAyIik7CQotCSAgICAKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmVmb3JlIGNyZWF0ZVN0YXRlbWVudCAxIik7CQotCSAgICBzdG10MSA9IGNvbm4xLmNyZWF0ZVN0YXRlbWVudCgpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBZnRlciBjcmVhdGVTdGF0ZW1lbnQgMSIpOwkKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmVmb3JlIGNyZWF0ZVN0YXRlbWVudCAyIik7CQotCSAgICBzdG10MiA9IGNvbm4yLmNyZWF0ZVN0YXRlbWVudCgpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBZnRlciBjcmVhdGVTdGF0ZW1lbnQgMiIpOwkKLSAgICAgICAgICAgIAotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJleGVjdXRpbmcgc3RhdGVtZW50IDEiKTsgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqSU4gVEVTVCAyKioqKioqKioqKioqKiIpOworICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgRGF0YVNvdXJjZSBkczEgPSAoRGF0YVNvdXJjZSlpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZTEiKTsKKyAgICBEYXRhU291cmNlIGRzMiA9IChEYXRhU291cmNlKWljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlMiIpOworICAgIENvbm5lY3Rpb24gY29ubjEgPSBudWxsOworICAgIENvbm5lY3Rpb24gY29ubjIgPSBudWxsOworICAgIFN0YXRlbWVudCBzdG10MSA9IG51bGw7CisgICAgU3RhdGVtZW50IHN0bXQyID0gbnVsbDsKKyAgICBSZXN1bHRTZXQgcnMxID0gbnVsbDsKKyAgICBSZXN1bHRTZXQgcnMyID0gbnVsbDsKKyAgICBib29sZWFuIHBhc3NlZCA9IHRydWU7CisgICAgdHJ5IHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmVmb3JlIGdldENvbm5lY3Rpb24gMSIpOworICAgICAgICBjb25uMSA9IGRzMS5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFmdGVyIGdldENvbm5lY3Rpb24gMSIpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCZWZvcmUgZ2V0Q29ubmVjdGlvbiAyIik7CisgICAgICAgIGNvbm4yID0gZHMyLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWZ0ZXIgZ2V0Q29ubmVjdGlvbiAyIik7CiAKLQkgICAgdHJ5IHsKLQkgICAgICAgIHJzMSA9IHN0bXQxLmV4ZWN1dGVRdWVyeSgiU0VMRUNUICogRlJPTSBUWExFVkVMU1dJVENIIik7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJlZm9yZSBjcmVhdGVTdGF0ZW1lbnQgMSIpOworICAgICAgICBzdG10MSA9IGNvbm4xLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBZnRlciBjcmVhdGVTdGF0ZW1lbnQgMSIpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCZWZvcmUgY3JlYXRlU3RhdGVtZW50IDIiKTsKKyAgICAgICAgc3RtdDIgPSBjb25uMi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWZ0ZXIgY3JlYXRlU3RhdGVtZW50IDIiKTsKKworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJleGVjdXRpbmcgc3RhdGVtZW50IDEiKTsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgcnMxID0gc3RtdDEuZXhlY3V0ZVF1ZXJ5KCJTRUxFQ1QgKiBGUk9NIFRYTEVWRUxTV0lUQ0giKTsKICAgICAgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlMiApIHsKLQkgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhjZXB0aW9uIGZvciBmaXJzdCBxdWVyeSA6IiArIGUyLmdldE1lc3NhZ2UoKSApOwotCSAgICB9IGZpbmFsbHkgewotCSAgICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4Y2VwdGlvbiBmb3IgZmlyc3QgcXVlcnkgOiIgKyBlMi5nZXRNZXNzYWdlKCkgKTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIHBhc3NlZCA9IGZhbHNlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZXhlY3V0aW5nIHN0YXRlbWVudCAyIik7IAotCSAgICB0cnkgewotCSAgICAgICAgcnMyID0gc3RtdDIuZXhlY3V0ZVF1ZXJ5KCJTRUxFQ1QgKiBGUk9NIFRYTEVWRUxTV0lUQ0gyIik7Ci0JICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlMikgewotCSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGNlcHRpb24gZm9yIHNlY29uZCBxdWVyeSA6IiArIGUyLmdldE1lc3NhZ2UoKSApOwotCSAgICB9IGZpbmFsbHkgewotCSAgICAgICAgcGFzc2VkID0gZmFsc2U7Ci0JICAgIH0gCiAKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZmluaXNoZWQgZXhlY3V0aW5nIHN0YXRlbWVudHMiKTsgCi0JICAgIHBhc3NlZCA9ICEocnMxLm5leHQoKSAmIHJzMi5uZXh0KCkpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIHBhc3NlZCA9IHRydWU7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZmluYWwgZXhjZXB0aW9uIDogIiArIGUuZ2V0TWVzc2FnZSgpICk7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKHJzMSAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsgcnMxLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9Ci0JICAgIH0KKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZXhlY3V0aW5nIHN0YXRlbWVudCAyIik7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByczIgPSBzdG10Mi5leGVjdXRlUXVlcnkoIlNFTEVDVCAqIEZST00gVFhMRVZFTFNXSVRDSDIiKTsKKyAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUyKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4Y2VwdGlvbiBmb3Igc2Vjb25kIHF1ZXJ5IDoiICsgZTIuZ2V0TWVzc2FnZSgpICk7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBwYXNzZWQgPSBmYWxzZTsKKyAgICAgICAgfQogCi0JICAgIGlmIChyczIgIT0gbnVsbCApIHsKLQkgICAgICAgIHRyeSB7IHJzMi5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQotCSAgICB9CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZpbmlzaGVkIGV4ZWN1dGluZyBzdGF0ZW1lbnRzIik7CisgICAgICAgIHBhc3NlZCA9ICEocnMxLm5leHQoKSAmIHJzMi5uZXh0KCkpOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHBhc3NlZCA9IHRydWU7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZmluYWwgZXhjZXB0aW9uIDogIiArIGUuZ2V0TWVzc2FnZSgpICk7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKHJzMSAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsgcnMxLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9CisgICAgICAgIH0KIAotCSAgICBpZiAoIHN0bXQxICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgeyBzdG10MS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9ICAgIAotCSAgICB9Ci0JICAgIGlmICggc3RtdDIgIT0gbnVsbCApIHsKLQkgICAgICAgIHRyeSB7IHN0bXQyLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30gICAgCi0JICAgIH0KLQkgICAgaWYgKCBjb25uMSAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fSAgICAKLQkgICAgfQotCSAgICBpZiAoIGNvbm4yICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgeyBjb25uMi5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9ICAgIAotCSAgICB9Ci0JfQotCXJldHVybiBwYXNzZWQ7CisgICAgICAgIGlmIChyczIgIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7IHJzMi5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCBzdG10MSAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsgc3RtdDEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQorICAgICAgICB9CisgICAgICAgIGlmICggc3RtdDIgIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7IHN0bXQyLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQorICAgICAgICBpZiAoIGNvbm4xICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBjb25uMiAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsgY29ubjIuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBwYXNzZWQ7CiAgICAgfQogCiAgICAgLyoqCiAgICAgICogR2V0IGNvbm5lY3Rpb24gd2l0aCBvbmUgbm9uLVhBIGRhdGFzb3VyY2UgYW5kIHRoZW4gZ2V0Q29ubmVjdGlvbgotICAgICAqIHdpdGggYSBKTVMgcmVzb3VyY2UgCisgICAgICogd2l0aCBhIEpNUyByZXNvdXJjZQogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGptc0pkYmNUZXN0MSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqKioqKklOIGptc0pkYmNUZXN0IDEqKioqKioqKioqKioqIik7ICAgIAotCUluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JRGF0YVNvdXJjZSBkczEgPSAoRGF0YVNvdXJjZSlpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvdGVzdC1yZXMtMyIpOwotCVF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcWNmID0gKFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkpCi0JICAgIGljLmxvb2t1cCgiam1zL2ptcy1qZGJjLXJlcy0xIik7Ci0JUXVldWUgcSA9IChRdWV1ZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2ptcy9TYW1wbGVRdWV1ZSIpOyAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioqKipJTiBqbXNKZGJjVGVzdCAxKioqKioqKioqKioqKiIpOworICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgRGF0YVNvdXJjZSBkczEgPSAoRGF0YVNvdXJjZSlpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvdGVzdC1yZXMtMyIpOworICAgIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcWNmID0gKFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkpCisgICAgICAgIGljLmxvb2t1cCgiam1zL2ptcy1qZGJjLXJlcy0xIik7CisgICAgUXVldWUgcSA9IChRdWV1ZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2ptcy9TYW1wbGVRdWV1ZSIpOwogCi0JQ29ubmVjdGlvbiBjb25uMSA9IG51bGw7Ci0JU3RhdGVtZW50IHN0bXQxID0gbnVsbDsKLQlSZXN1bHRTZXQgcnMxID0gbnVsbDsKKyAgICBDb25uZWN0aW9uIGNvbm4xID0gbnVsbDsKKyAgICBTdGF0ZW1lbnQgc3RtdDEgPSBudWxsOworICAgIFJlc3VsdFNldCByczEgPSBudWxsOwogCi0JUXVldWVTZXNzaW9uIHFTZXNzID0gbnVsbDsKLQlRdWV1ZUNvbm5lY3Rpb24gcUNvbm4gPSBudWxsOwotCVF1ZXVlU2VuZGVyIHFTZW5kZXIgPSBudWxsOwotCVRleHRNZXNzYWdlIG1lc3NhZ2UgPSBudWxsOwotCQotCWJvb2xlYW4gcGFzc2VkID0gZmFsc2U7Ci0JdHJ5IHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmVmb3JlIGdldENvbm5lY3Rpb24gMSIpOwkKLQkgICAgY29ubjEgPSBkczEuZ2V0Q29ubmVjdGlvbigpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBZnRlciBnZXRDb25uZWN0aW9uIDEiKTsJCisgICAgUXVldWVTZXNzaW9uIHFTZXNzID0gbnVsbDsKKyAgICBRdWV1ZUNvbm5lY3Rpb24gcUNvbm4gPSBudWxsOworICAgIFF1ZXVlU2VuZGVyIHFTZW5kZXIgPSBudWxsOworICAgIFRleHRNZXNzYWdlIG1lc3NhZ2UgPSBudWxsOworCisgICAgYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKKyAgICB0cnkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCZWZvcmUgZ2V0Q29ubmVjdGlvbiAxIik7CisgICAgICAgIGNvbm4xID0gZHMxLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWZ0ZXIgZ2V0Q29ubmVjdGlvbiAxIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBCZWZvcmUgY3JlYXRlU3RhdGVudCIpOwotCSAgICBzdG10MSA9IGNvbm4xLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICBzdG10MSA9IGNvbm4xLmNyZWF0ZVN0YXRlbWVudCgpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgQWZ0ZXIgY3JlYXRlU3RhdGVudCIpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBCZWZvcmUgZXhlY3V0ZVF1ZXJ5Iik7Ci0JICAgIHJzMSA9IHN0bXQxLmV4ZWN1dGVRdWVyeSgiU0VMRUNUICogRlJPTSBUWExFVkVMU1dJVENIIik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIEFmdGVyIGV4ZWN1dGVRdWVyeSIpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCZWZvcmUgY3JlYXRlUXVldWVDb25uZWN0aW9uIik7CQotCSAgICBxQ29ubiA9IHFjZi5jcmVhdGVRdWV1ZUNvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWZ0ZXIgY3JlYXRlUXVldWVDb25uZWN0aW9uIik7CQotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJlZm9yZSBjcmVhdGVRdWV1ZVNlc3Npb24iKTsgCi0JICAgIHFTZXNzID0gcUNvbm4uY3JlYXRlUXVldWVTZXNzaW9uKCBmYWxzZSwgU2Vzc2lvbi5BVVRPX0FDS05PV0xFREdFICk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWZ0ZXIgY3JlYXRlUXVldWVTZXNzaW9uIik7IAotCSAgICBxU2VuZGVyID0gcVNlc3MuY3JlYXRlU2VuZGVyKCBxICk7Ci0JICAgIG1lc3NhZ2UgPSBxU2Vzcy5jcmVhdGVUZXh0TWVzc2FnZSgpOwotCSAgICBtZXNzYWdlLnNldFRleHQoICJIZWxsbyBXb3JsZCIpOwotCSAgICBxU2VuZGVyLnNlbmQoIG1lc3NhZ2UgKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCIgU2VudCBNZXNzYWdlIik7Ci0JICAgIHBhc3NlZCA9IHRydWU7Ci0JICAgIAotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIHBhc3NlZCA9IGZhbHNlOwotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCX0gZmluYWxseSB7Ci0JICAgIGlmICggcnMxICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgeyByczEuY2xvc2UoKTt9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9Ci0JICAgIH0KLQkgICAgaWYgKCBzdG10MSAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsgc3RtdDEuY2xvc2UoKTt9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9Ci0JICAgIH0KLQkgICAgaWYgKCBjb25uMSAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fSAgICAKLQkgICAgfQotCSAgICBpZiAoIHFTZXNzICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgeyBxU2Vzcy5jbG9zZSgpO30gY2F0Y2goRXhjZXB0aW9uIGUxKSB7fQotCSAgICB9Ci0JICAgIAotCSAgICBpZiAoIHFDb25uICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgeyBxQ29ubi5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9ICAgIAotCSAgICB9Ci0JfQotICAgICAgICAKLQlyZXR1cm4gcGFzc2VkOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBCZWZvcmUgZXhlY3V0ZVF1ZXJ5Iik7CisgICAgICAgIHJzMSA9IHN0bXQxLmV4ZWN1dGVRdWVyeSgiU0VMRUNUICogRlJPTSBUWExFVkVMU1dJVENIIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIEFmdGVyIGV4ZWN1dGVRdWVyeSIpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCZWZvcmUgY3JlYXRlUXVldWVDb25uZWN0aW9uIik7CisgICAgICAgIHFDb25uID0gcWNmLmNyZWF0ZVF1ZXVlQ29ubmVjdGlvbigpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBZnRlciBjcmVhdGVRdWV1ZUNvbm5lY3Rpb24iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCZWZvcmUgY3JlYXRlUXVldWVTZXNzaW9uIik7CisgICAgICAgIHFTZXNzID0gcUNvbm4uY3JlYXRlUXVldWVTZXNzaW9uKCBmYWxzZSwgU2Vzc2lvbi5BVVRPX0FDS05PV0xFREdFICk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWZ0ZXIgY3JlYXRlUXVldWVTZXNzaW9uIik7CisgICAgICAgIHFTZW5kZXIgPSBxU2Vzcy5jcmVhdGVTZW5kZXIoIHEgKTsKKyAgICAgICAgbWVzc2FnZSA9IHFTZXNzLmNyZWF0ZVRleHRNZXNzYWdlKCk7CisgICAgICAgIG1lc3NhZ2Uuc2V0VGV4dCggIkhlbGxvIFdvcmxkIik7CisgICAgICAgIHFTZW5kZXIuc2VuZCggbWVzc2FnZSApOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBTZW50IE1lc3NhZ2UiKTsKKyAgICAgICAgcGFzc2VkID0gdHJ1ZTsKKworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmICggcnMxICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeyByczEuY2xvc2UoKTt9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBzdG10MSAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsgc3RtdDEuY2xvc2UoKTt9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBjb25uMSAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQorICAgICAgICB9CisgICAgICAgIGlmICggcVNlc3MgIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7IHFTZXNzLmNsb3NlKCk7fSBjYXRjaChFeGNlcHRpb24gZTEpIHt9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIHFDb25uICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeyBxQ29ubi5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcGFzc2VkOwogICAgIH0KIAogICAgIC8qKgpAQCAtMjczLDY5ICsyNzMsNjkgQEAKICAgICAgKiB3aXRoIGEgSk1TIHJlc291cmNlIGFzIG5vbi14YQogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGptc0pkYmNUZXN0MigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqKioqKklOIGptc0pkYmNUZXN0IDIqKioqKioqKioqKioqIik7ICAgIAotCUluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JRGF0YVNvdXJjZSBkczEgPSAoRGF0YVNvdXJjZSlpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvdGVzdC1yZXMtMyIpOwotCVF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcWNmID0gKFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkpCi0JICAgIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9qbXMvam1zLWpkYmMtcmVzLTEiKTsKLQlRdWV1ZSBxID0gKFF1ZXVlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvam1zL1NhbXBsZVF1ZXVlIik7ICAgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqKioqKklOIGptc0pkYmNUZXN0IDIqKioqKioqKioqKioqIik7CisgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICBEYXRhU291cmNlIGRzMSA9IChEYXRhU291cmNlKWljLmxvb2t1cCgiamF2YTpjb21wL2Vudi90ZXN0LXJlcy0zIik7CisgICAgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxY2YgPSAoUXVldWVDb25uZWN0aW9uRmFjdG9yeSkKKyAgICAgICAgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2ptcy9qbXMtamRiYy1yZXMtMSIpOworICAgIFF1ZXVlIHEgPSAoUXVldWUpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9qbXMvU2FtcGxlUXVldWUiKTsKIAotCUNvbm5lY3Rpb24gY29ubjEgPSBudWxsOwotCVN0YXRlbWVudCBzdG10MSA9IG51bGw7Ci0JUmVzdWx0U2V0IHJzMSA9IG51bGw7CisgICAgQ29ubmVjdGlvbiBjb25uMSA9IG51bGw7CisgICAgU3RhdGVtZW50IHN0bXQxID0gbnVsbDsKKyAgICBSZXN1bHRTZXQgcnMxID0gbnVsbDsKIAotCVF1ZXVlU2Vzc2lvbiBxU2VzcyA9IG51bGw7Ci0JUXVldWVDb25uZWN0aW9uIHFDb25uID0gbnVsbDsKLQlRdWV1ZVNlbmRlciBxU2VuZGVyID0gbnVsbDsKLQlUZXh0TWVzc2FnZSBtZXNzYWdlID0gbnVsbDsKLQkKLQlib29sZWFuIHBhc3NlZCA9IHRydWU7Ci0JdHJ5IHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmVmb3JlIGdldENvbm5lY3Rpb24gMSIpOwkKLQkgICAgY29ubjEgPSBkczEuZ2V0Q29ubmVjdGlvbigpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBZnRlciBnZXRDb25uZWN0aW9uIDEiKTsJCisgICAgUXVldWVTZXNzaW9uIHFTZXNzID0gbnVsbDsKKyAgICBRdWV1ZUNvbm5lY3Rpb24gcUNvbm4gPSBudWxsOworICAgIFF1ZXVlU2VuZGVyIHFTZW5kZXIgPSBudWxsOworICAgIFRleHRNZXNzYWdlIG1lc3NhZ2UgPSBudWxsOworCisgICAgYm9vbGVhbiBwYXNzZWQgPSB0cnVlOworICAgIHRyeSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJlZm9yZSBnZXRDb25uZWN0aW9uIDEiKTsKKyAgICAgICAgY29ubjEgPSBkczEuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBZnRlciBnZXRDb25uZWN0aW9uIDEiKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIEJlZm9yZSBjcmVhdGVTdGF0ZW50Iik7Ci0JICAgIHN0bXQxID0gY29ubjEuY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgIHN0bXQxID0gY29ubjEuY3JlYXRlU3RhdGVtZW50KCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBBZnRlciBjcmVhdGVTdGF0ZW50Iik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIEJlZm9yZSBleGVjdXRlUXVlcnkiKTsKLQkgICAgcnMxID0gc3RtdDEuZXhlY3V0ZVF1ZXJ5KCJTRUxFQ1QgKiBGUk9NIFRYTEVWRUxTV0lUQ0giKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCIgQWZ0ZXIgZXhlY3V0ZVF1ZXJ5Iik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIEJlZm9yZSBleGVjdXRlUXVlcnkiKTsKKyAgICAgICAgcnMxID0gc3RtdDEuZXhlY3V0ZVF1ZXJ5KCJTRUxFQ1QgKiBGUk9NIFRYTEVWRUxTV0lUQ0giKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgQWZ0ZXIgZXhlY3V0ZVF1ZXJ5Iik7CiAKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmVmb3JlIGNyZWF0ZVF1ZXVlQ29ubmVjdGlvbiIpOwkKLQkgICAgcUNvbm4gPSBxY2YuY3JlYXRlUXVldWVDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFmdGVyIGNyZWF0ZVF1ZXVlQ29ubmVjdGlvbiIpOwkKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJCZWZvcmUgY3JlYXRlUXVldWVTZXNzaW9uIik7IAotCSAgICBxU2VzcyA9IHFDb25uLmNyZWF0ZVF1ZXVlU2Vzc2lvbiggZmFsc2UsIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSApOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFmdGVyIGNyZWF0ZVF1ZXVlU2Vzc2lvbiIpOyAKLQkgICAgcVNlbmRlciA9IHFTZXNzLmNyZWF0ZVNlbmRlciggcSApOwotCSAgICBtZXNzYWdlID0gcVNlc3MuY3JlYXRlVGV4dE1lc3NhZ2UoKTsKLQkgICAgbWVzc2FnZS5zZXRUZXh0KCAiSGVsbG8gV29ybGQiKTsKLQkgICAgcVNlbmRlci5zZW5kKCBtZXNzYWdlICk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFNlbnQgbWVzc2FnZSIpOwotCSAgICAKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICBwYXNzZWQgPSBmYWxzZTsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9IGZpbmFsbHkgewotCSAgICBpZiAoIHJzMSAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsgcnMxLmNsb3NlKCk7fSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQotCSAgICB9Ci0JICAgIGlmICggc3RtdDEgIT0gbnVsbCApIHsKLQkgICAgICAgIHRyeSB7IHN0bXQxLmNsb3NlKCk7fSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQotCSAgICB9Ci0JICAgIGlmICggY29ubjEgIT0gbnVsbCApIHsKLQkgICAgICAgIHRyeSB7IGNvbm4xLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30gICAgCi0JICAgIH0KLQkgICAgaWYgKCBxU2VzcyAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsgcVNlc3MuY2xvc2UoKTt9IGNhdGNoKEV4Y2VwdGlvbiBlMSkge30KLQkgICAgfQotCSAgICAKLQkgICAgaWYgKCBxQ29ubiAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsgcUNvbm4uY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fSAgICAKLQkgICAgfQotCX0KKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmVmb3JlIGNyZWF0ZVF1ZXVlQ29ubmVjdGlvbiIpOworICAgICAgICBxQ29ubiA9IHFjZi5jcmVhdGVRdWV1ZUNvbm5lY3Rpb24oKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWZ0ZXIgY3JlYXRlUXVldWVDb25uZWN0aW9uIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmVmb3JlIGNyZWF0ZVF1ZXVlU2Vzc2lvbiIpOworICAgICAgICBxU2VzcyA9IHFDb25uLmNyZWF0ZVF1ZXVlU2Vzc2lvbiggZmFsc2UsIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSApOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFmdGVyIGNyZWF0ZVF1ZXVlU2Vzc2lvbiIpOworICAgICAgICBxU2VuZGVyID0gcVNlc3MuY3JlYXRlU2VuZGVyKCBxICk7CisgICAgICAgIG1lc3NhZ2UgPSBxU2Vzcy5jcmVhdGVUZXh0TWVzc2FnZSgpOworICAgICAgICBtZXNzYWdlLnNldFRleHQoICJIZWxsbyBXb3JsZCIpOworICAgICAgICBxU2VuZGVyLnNlbmQoIG1lc3NhZ2UgKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgU2VudCBtZXNzYWdlIik7CiAKLQlyZXR1cm4gcGFzc2VkOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmICggcnMxICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeyByczEuY2xvc2UoKTt9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBzdG10MSAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsgc3RtdDEuY2xvc2UoKTt9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBjb25uMSAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQorICAgICAgICB9CisgICAgICAgIGlmICggcVNlc3MgIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7IHFTZXNzLmNsb3NlKCk7fSBjYXRjaChFeGNlcHRpb24gZTEpIHt9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIHFDb25uICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeyBxQ29ubi5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcGFzc2VkOwogICAgIH0KIAogICAgIC8qKgpAQCAtMzQzLDY5ICszNDMsNjkgQEAKICAgICAgKiB3aXRoIGEgSk1TIHJlc291cmNlIGFzIG5vbi14YQogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGptc0pkYmNUZXN0MygpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqKioqKklOIGptc0pkYmNUZXN0IDMqKioqKioqKioqKioqIik7ICAgIAotCUluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JRGF0YVNvdXJjZSBkczEgPSAoRGF0YVNvdXJjZSlpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvdGVzdC1yZXMtMyIpOwotCVF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcWNmID0gKFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkpCi0JICAgIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9qbXMvam1zLWpkYmMtcmVzLTEiKTsKLQlRdWV1ZSBxID0gKFF1ZXVlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvam1zL1NhbXBsZVF1ZXVlIik7ICAgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqKioqKklOIGptc0pkYmNUZXN0IDMqKioqKioqKioqKioqIik7CisgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICBEYXRhU291cmNlIGRzMSA9IChEYXRhU291cmNlKWljLmxvb2t1cCgiamF2YTpjb21wL2Vudi90ZXN0LXJlcy0zIik7CisgICAgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxY2YgPSAoUXVldWVDb25uZWN0aW9uRmFjdG9yeSkKKyAgICAgICAgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2ptcy9qbXMtamRiYy1yZXMtMSIpOworICAgIFF1ZXVlIHEgPSAoUXVldWUpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9qbXMvU2FtcGxlUXVldWUiKTsKIAotCUNvbm5lY3Rpb24gY29ubjEgPSBudWxsOwotCVN0YXRlbWVudCBzdG10MSA9IG51bGw7Ci0JUmVzdWx0U2V0IHJzMSA9IG51bGw7CisgICAgQ29ubmVjdGlvbiBjb25uMSA9IG51bGw7CisgICAgU3RhdGVtZW50IHN0bXQxID0gbnVsbDsKKyAgICBSZXN1bHRTZXQgcnMxID0gbnVsbDsKIAotCVF1ZXVlU2Vzc2lvbiBxU2VzcyA9IG51bGw7Ci0JUXVldWVDb25uZWN0aW9uIHFDb25uID0gbnVsbDsKLQlRdWV1ZVNlbmRlciBxU2VuZGVyID0gbnVsbDsKLQlUZXh0TWVzc2FnZSBtZXNzYWdlID0gbnVsbDsKLQkKLQlib29sZWFuIHBhc3NlZCA9IGZhbHNlOwotCXRyeSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJlZm9yZSBnZXRDb25uZWN0aW9uIDEiKTsJCi0JICAgIGNvbm4xID0gZHMxLmdldENvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWZ0ZXIgZ2V0Q29ubmVjdGlvbiAxIik7CQorICAgIFF1ZXVlU2Vzc2lvbiBxU2VzcyA9IG51bGw7CisgICAgUXVldWVDb25uZWN0aW9uIHFDb25uID0gbnVsbDsKKyAgICBRdWV1ZVNlbmRlciBxU2VuZGVyID0gbnVsbDsKKyAgICBUZXh0TWVzc2FnZSBtZXNzYWdlID0gbnVsbDsKKworICAgIGJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CisgICAgdHJ5IHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmVmb3JlIGdldENvbm5lY3Rpb24gMSIpOworICAgICAgICBjb25uMSA9IGRzMS5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFmdGVyIGdldENvbm5lY3Rpb24gMSIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgQmVmb3JlIGNyZWF0ZVN0YXRlbnQiKTsKLQkgICAgc3RtdDEgPSBjb25uMS5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgc3RtdDEgPSBjb25uMS5jcmVhdGVTdGF0ZW1lbnQoKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIEFmdGVyIGNyZWF0ZVN0YXRlbnQiKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCIgQmVmb3JlIGV4ZWN1dGVRdWVyeSIpOwotCSAgICByczEgPSBzdG10MS5leGVjdXRlUXVlcnkoIlNFTEVDVCAqIEZST00gREJVU0VSLlRYTEVWRUxTV0lUQ0giKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCIgQWZ0ZXIgZXhlY3V0ZVF1ZXJ5Iik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIEJlZm9yZSBleGVjdXRlUXVlcnkiKTsKKyAgICAgICAgcnMxID0gc3RtdDEuZXhlY3V0ZVF1ZXJ5KCJTRUxFQ1QgKiBGUk9NIERCVVNFUi5UWExFVkVMU1dJVENIIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIEFmdGVyIGV4ZWN1dGVRdWVyeSIpOwogCi0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJlZm9yZSBjcmVhdGVRdWV1ZUNvbm5lY3Rpb24iKTsJCi0JICAgIHFDb25uID0gcWNmLmNyZWF0ZVF1ZXVlQ29ubmVjdGlvbigpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBZnRlciBjcmVhdGVRdWV1ZUNvbm5lY3Rpb24iKTsJCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmVmb3JlIGNyZWF0ZVF1ZXVlU2Vzc2lvbiIpOyAKLQkgICAgcVNlc3MgPSBxQ29ubi5jcmVhdGVRdWV1ZVNlc3Npb24oIGZhbHNlLCBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UgKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJBZnRlciBjcmVhdGVRdWV1ZVNlc3Npb24iKTsgCi0JICAgIHFTZW5kZXIgPSBxU2Vzcy5jcmVhdGVTZW5kZXIoIHEgKTsKLQkgICAgbWVzc2FnZSA9IHFTZXNzLmNyZWF0ZVRleHRNZXNzYWdlKCk7Ci0JICAgIG1lc3NhZ2Uuc2V0VGV4dCggIkhlbGxvIFdvcmxkIik7Ci0JICAgIHFTZW5kZXIuc2VuZCggbWVzc2FnZSApOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBTZW50IG1lc3NhZ2UiKTsKLQkgICAgCi0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgcGFzc2VkID0gdHJ1ZTsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9IGZpbmFsbHkgewotCSAgICBpZiAoIHJzMSAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsgcnMxLmNsb3NlKCk7fSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQotCSAgICB9Ci0JICAgIGlmICggc3RtdDEgIT0gbnVsbCApIHsKLQkgICAgICAgIHRyeSB7IHN0bXQxLmNsb3NlKCk7fSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQotCSAgICB9Ci0JICAgIGlmICggY29ubjEgIT0gbnVsbCApIHsKLQkgICAgICAgIHRyeSB7IGNvbm4xLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30gICAgCi0JICAgIH0KLQkgICAgaWYgKCBxU2VzcyAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsgcVNlc3MuY2xvc2UoKTt9IGNhdGNoKEV4Y2VwdGlvbiBlMSkge30KLQkgICAgfQotCSAgICAKLQkgICAgaWYgKCBxQ29ubiAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsgcUNvbm4uY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fSAgICAKLQkgICAgfQotCX0KKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmVmb3JlIGNyZWF0ZVF1ZXVlQ29ubmVjdGlvbiIpOworICAgICAgICBxQ29ubiA9IHFjZi5jcmVhdGVRdWV1ZUNvbm5lY3Rpb24oKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWZ0ZXIgY3JlYXRlUXVldWVDb25uZWN0aW9uIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmVmb3JlIGNyZWF0ZVF1ZXVlU2Vzc2lvbiIpOworICAgICAgICBxU2VzcyA9IHFDb25uLmNyZWF0ZVF1ZXVlU2Vzc2lvbiggZmFsc2UsIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSApOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFmdGVyIGNyZWF0ZVF1ZXVlU2Vzc2lvbiIpOworICAgICAgICBxU2VuZGVyID0gcVNlc3MuY3JlYXRlU2VuZGVyKCBxICk7CisgICAgICAgIG1lc3NhZ2UgPSBxU2Vzcy5jcmVhdGVUZXh0TWVzc2FnZSgpOworICAgICAgICBtZXNzYWdlLnNldFRleHQoICJIZWxsbyBXb3JsZCIpOworICAgICAgICBxU2VuZGVyLnNlbmQoIG1lc3NhZ2UgKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgU2VudCBtZXNzYWdlIik7CiAKLQlyZXR1cm4gcGFzc2VkOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHBhc3NlZCA9IHRydWU7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKCByczEgIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7IHJzMS5jbG9zZSgpO30gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQorICAgICAgICBpZiAoIHN0bXQxICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeyBzdG10MS5jbG9zZSgpO30gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQorICAgICAgICBpZiAoIGNvbm4xICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBxU2VzcyAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsgcVNlc3MuY2xvc2UoKTt9IGNhdGNoKEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQorCisgICAgICAgIGlmICggcUNvbm4gIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7IHFDb25uLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBwYXNzZWQ7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHt9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvYnVpbGQucHJvcGVydGllcwppbmRleCBlZTJlY2EwLi5mZDIxYzNkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE0LDcgKzE0LDcgQEAKICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAjCiAKLSAgICAKKwogIyMjIENvbXBvbmVudCBQcm9wZXJ0aWVzICMjIwogc3JjLmRpcj1zcmMKIGNvbXBvbmVudC5wdWJsaXNoLmhvbWU9LgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvYnVpbGQueG1sCmluZGV4IDI1MTNkYWQuLjExMDgyZTEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9idWlsZC54bWwKQEAgLTIzLDI5ICsyMywyOSBAQAogCiA8cHJvamVjdCBuYW1lPSJKREJDQ29ubmVjdG9yIHRvcCBsZXZlbCIgZGVmYXVsdD0iYnVpbGQiPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJwa2cuZGlyIiB2YWx1ZT0iY29tL3N1bi9qZGJjcmEvc3BpIi8+Ci0gICAgCisKICAgICAmY29tbW9uOwogICAgICZ0ZXN0Y29tbW9uOwogICAgIDxwcm9wZXJ0eSBmaWxlPSIuL2J1aWxkLnByb3BlcnRpZXMiLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUsYXNzZW1ibGUiIC8+Ci0gICAgICAgICAgCisKIAogICAgIDwhLS0gaW5pdC4gSW5pdGlhbGl6YXRpb24gaW52b2x2ZXMgY3JlYXRpbmcgcHVibGlzaGluZyBkaXJlY3RvcmllcyBhbmQKLSAgICAgICAgIE9TIHNwZWNpZmljIHRhcmdldHMuIC0tPiAKKyAgICAgICAgIE9TIHNwZWNpZmljIHRhcmdldHMuIC0tPgogICAgIDx0YXJnZXQgbmFtZT0iaW5pdCIgZGVzY3JpcHRpb249IiR7Y29tcG9uZW50Lm5hbWV9IGluaXRpYWxpemF0aW9uIj4KICAgICAgICAgPHRzdGFtcD4KICAgICAgICAgICAgIDxmb3JtYXQgcHJvcGVydHk9InN0YXJ0LnRpbWUiIHBhdHRlcm49Ik1NL2RkL3l5eXkgaGg6bW0gYWEiLz4KLSAgICAgICAgPC90c3RhbXA+ICAgIAorICAgICAgICA8L3RzdGFtcD4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iQnVpbGRpbmcgY29tcG9uZW50ICR7Y29tcG9uZW50Lm5hbWV9Ii8+CiAgICAgICAgIDxta2RpciBkaXI9IiR7Y29tcG9uZW50LmNsYXNzZXMuZGlyfSIvPgotICAgICAgICA8bWtkaXIgZGlyPSIke2NvbXBvbmVudC5saWIuaG9tZX0iLz4gICAgCisgICAgICAgIDxta2RpciBkaXI9IiR7Y29tcG9uZW50LmxpYi5ob21lfSIvPgogICAgIDwvdGFyZ2V0PgotICAgIDwhLS0gY29tcGlsZSAtLT4gCisgICAgPCEtLSBjb21waWxlIC0tPgogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iaW5pdCIKLSAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJDb21waWxlIGNvbS9zdW4vKiBjb20vaXBsYW5ldC8qIHNvdXJjZXMiPiAgCisgICAgICAgICAgICBkZXNjcmlwdGlvbj0iQ29tcGlsZSBjb20vc3VuLyogY29tL2lwbGFuZXQvKiBzb3VyY2VzIj4KICAgICAgICAgPCEtLTxlY2hvIG1lc3NhZ2U9IkNvbm5lY3RvciBhcGkgcmVzaWRlcyBpbiAke2Nvbm5lY3Rvci1hcGkuamFyfSIvPi0tPgotICAgICAgICA8amF2YWMgc3JjZGlyPSIke3NyYy5kaXJ9IiAKKyAgICAgICAgPGphdmFjIHNyY2Rpcj0iJHtzcmMuZGlyfSIKICAgICAgICAgICAgICAgIGRlc3RkaXI9IiR7Y29tcG9uZW50LmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIj4KICAgICAgICAgICAgIDxjbGFzc3BhdGg+CkBAIC01NywyOCArNTcsMjggQEAKICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9ImNvbS9zdW4vYXBwc2Vydi8qKiIvPgogICAgICAgICA8L2phdmFjPgogICAgIDwvdGFyZ2V0PgotICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCIvPgogCi0gICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIj4gICAgCi0gICAgCQotCTxqYXIgamFyZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L2pkYmMuamFyIiAKLSAgICAgICAgICAgIGJhc2VkaXI9IiR7Y29tcG9uZW50LmNsYXNzZXMuZGlyfSIgaW5jbHVkZXM9IiR7cGtnLmRpcn0vKiovKiwgCi0gICAgICAgICAgICBjb20vc3VuL2FwcHNlcnYvKiovKiwgY29tL3N1bi9qZGJjcmEvdXRpbC8qKi8qLCBjb20vc3VuL2pkYmNyYS9jb21tb24vKiovKiIvPiAKLSAgIAkKLSAgICAgICAgPGNvcHkgZmlsZT0iJHtzcmMuZGlyfS9jb20vc3VuL2pkYmNyYS9zcGkvMS40L3JhLXhhLnhtbCIgCi0gICAgICAgICAgICAgICAgdG9maWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CQorICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZSI+CisKKyAgICA8amFyIGphcmZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9qZGJjLmphciIKKyAgICAgICAgICAgIGJhc2VkaXI9IiR7Y29tcG9uZW50LmNsYXNzZXMuZGlyfSIgaW5jbHVkZXM9IiR7cGtnLmRpcn0vKiovKiwKKyAgICAgICAgICAgIGNvbS9zdW4vYXBwc2Vydi8qKi8qLCBjb20vc3VuL2pkYmNyYS91dGlsLyoqLyosIGNvbS9zdW4vamRiY3JhL2NvbW1vbi8qKi8qIi8+CisKKyAgICAgICAgPGNvcHkgZmlsZT0iJHtzcmMuZGlyfS9jb20vc3VuL2pkYmNyYS9zcGkvMS40L3JhLXhhLnhtbCIKKyAgICAgICAgICAgICAgICB0b2ZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4KICAgICAgICAgPC9jb3B5PgotICAgCTxqYXIgamFyZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L2pkYmMtcmEteGEucmFyIiAKLQkJYmFzZWRpcj0iJHtjb21wb25lbnQubGliLmhvbWV9IiBpbmNsdWRlcz0iamRiYy5qYXIiPgorICAgICAgIDxqYXIgamFyZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L2pkYmMtcmEteGEucmFyIgorICAgICAgICBiYXNlZGlyPSIke2NvbXBvbmVudC5saWIuaG9tZX0iIGluY2x1ZGVzPSJqZGJjLmphciI+CiAKLSAgIAkJPG1ldGFpbmYgZGlyPSIke2NvbXBvbmVudC5saWIuaG9tZX0iPgotICAgCQkJPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+Ci0gICAJCTwvbWV0YWluZj4KLSAgIAk8L2phcj4KKyAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2NvbXBvbmVudC5saWIuaG9tZX0iPgorICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+CisgICAgICAgICAgIDwvbWV0YWluZj4KKyAgICAgICA8L2phcj4KIAotICAgCTxkZWxldGUgZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L3JhLnhtbCIvPgotCQorICAgICAgIDxkZWxldGUgZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L3JhLnhtbCIvPgorCiAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVzY3JpcHRpb249IkNsZWFuIHRoZSBidWlsZCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9hcHBzZXJ2L2pkYmNyYS9EYXRhU291cmNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9hcHBzZXJ2L2pkYmNyYS9EYXRhU291cmNlLmphdmEKaW5kZXggOWY4Mzk5YS4uYjZlZjMwYiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vYXBwc2Vydi9qZGJjcmEvRGF0YVNvdXJjZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2FwcHNlcnYvamRiY3JhL0RhdGFTb3VyY2UuamF2YQpAQCAtMjAsMTUgKzIwLDE1IEBACiBpbXBvcnQgamF2YS5zcWwuU1FMRXhjZXB0aW9uOwogCiAvKioKLSAqIFRoZSA8Y29kZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29kZT4gaW1wbGVtZW50YXRpb24gb2YgU3VuT05FIGFwcGxpY2F0aW9uIAorICogVGhlIDxjb2RlPmphdmF4LnNxbC5EYXRhU291cmNlPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBvZiBTdW5PTkUgYXBwbGljYXRpb24KICAqIHNlcnZlciB3aWxsIGltcGxlbWVudCB0aGlzIGludGVyZmFjZS4gQW4gYXBwbGljYXRpb24gcHJvZ3JhbSB3b3VsZCBiZSBhYmxlCi0gKiB0byB1c2UgdGhpcyBpbnRlcmZhY2UgdG8gZG8gdGhlIGV4dGVuZGVkIGZ1bmN0aW9uYWxpdHkgZXhwb3NlZCBieSBTdW5PTkUgCisgKiB0byB1c2UgdGhpcyBpbnRlcmZhY2UgdG8gZG8gdGhlIGV4dGVuZGVkIGZ1bmN0aW9uYWxpdHkgZXhwb3NlZCBieSBTdW5PTkUKICAqIGFwcGxpY2F0aW9uIHNlcnZlci4KLSAqIDxwPkEgc2FtcGxlIGNvZGUgZm9yIGdldHRpbmcgZHJpdmVyJ3MgY29ubmVjdGlvbiBpbXBsZW1lbnRhdGlvbiB3b3VsZCBsaWtlIAorICogPHA+QSBzYW1wbGUgY29kZSBmb3IgZ2V0dGluZyBkcml2ZXIncyBjb25uZWN0aW9uIGltcGxlbWVudGF0aW9uIHdvdWxkIGxpa2UKICAqIHRoZSBmb2xsb3dpbmcuCiAgKiA8cHJlPgogICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICBjb20uc3VuLmFwcHNlcnYuRGF0YVNvdXJjZSBkcyA9IChjb20uc3VuLmFwcHNlcnYuRGF0YVNPdXJjZSkgaWMubG9va3VwKCJqZGJjL1BvaW50QmFzZSIpOyAKKyAgICAgY29tLnN1bi5hcHBzZXJ2LkRhdGFTb3VyY2UgZHMgPSAoY29tLnN1bi5hcHBzZXJ2LkRhdGFTT3VyY2UpIGljLmxvb2t1cCgiamRiYy9Qb2ludEJhc2UiKTsKICAgICAgQ29ubmVjdGlvbiBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7CiAgICAgIENvbm5lY3Rpb24gZHJpdmVyY29uID0gZHMuZ2V0Q29ubmVjdGlvbihjb24pOwogCkBAIC0zNiwxMyArMzYsMTMgQEAKIAogICAgICBjb24uY2xvc2UoKTsKICAgIDwvcHJlPgotICogCisgKgogICogQGF1dGhvciBCaW5vZCBQLkcKICAqLwogcHVibGljIGludGVyZmFjZSBEYXRhU291cmNlIGV4dGVuZHMgamF2YXguc3FsLkRhdGFTb3VyY2UgewogCiAgICAgLyoqCi0gICAgICogUmV0cmlldmVzIHRoZSBhY3R1YWwgU1FMQ29ubmVjdGlvbiBmcm9tIHRoZSBDb25uZWN0aW9uIHdyYXBwZXIgCisgICAgICogUmV0cmlldmVzIHRoZSBhY3R1YWwgU1FMQ29ubmVjdGlvbiBmcm9tIHRoZSBDb25uZWN0aW9uIHdyYXBwZXIKICAgICAgKiBpbXBsZW1lbnRhdGlvbiBvZiBTdW5PTkUgYXBwbGljYXRpb24gc2VydmVyLiBJZiBhbiBhY3R1YWwgY29ubmVjdGlvbiBpcwogICAgICAqIHN1cHBsaWVkIGFzIGFyZ3VtZW50LCB0aGVuIGl0IHdpbGwgYmUganVzdCByZXR1cm5lZC4KICAgICAgKgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlT2JqZWN0QnVpbGRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlT2JqZWN0QnVpbGRlci5qYXZhCmluZGV4IGMyODIyZTIuLjZhMzY2YjAgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VPYmplY3RCdWlsZGVyLmphdmEKQEAgLTI3LDIyICsyNywyMiBAQAogaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsKIGltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsKIC8qKgotICogVXRpbGl0eSBjbGFzcywgd2hpY2ggd291bGQgY3JlYXRlIG5lY2Vzc2FyeSBEYXRhc291cmNlIG9iamVjdCBhY2NvcmRpbmcgdG8gdGhlIAorICogVXRpbGl0eSBjbGFzcywgd2hpY2ggd291bGQgY3JlYXRlIG5lY2Vzc2FyeSBEYXRhc291cmNlIG9iamVjdCBhY2NvcmRpbmcgdG8gdGhlCiAgKiBzcGVjaWZpY2F0aW9uLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMjMKLSAqIEBhdXRob3IJQmlub2QgUC5HCi0gKiBAc2VlCQljb20uc3VuLmpkYmNyYS5jb21tb24uRGF0YVNvdXJjZVNwZWMKLSAqIEBzZWUJCWNvbS5zdW4uamRiY3JhLnV0aWwuTWV0aG9kRXhjZWN1dG9yCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzIzCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRworICogQHNlZSAgICAgICAgY29tLnN1bi5qZGJjcmEuY29tbW9uLkRhdGFTb3VyY2VTcGVjCisgKiBAc2VlICAgICAgICBjb20uc3VuLmpkYmNyYS51dGlsLk1ldGhvZEV4Y2VjdXRvcgogICovCiBwdWJsaWMgY2xhc3MgRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIgaW1wbGVtZW50cyBqYXZhLmlvLlNlcmlhbGl6YWJsZXsKIAogICAgIHByaXZhdGUgRGF0YVNvdXJjZVNwZWMgc3BlYzsKLSAgICAKKwogICAgIHByaXZhdGUgSGFzaHRhYmxlIGRyaXZlclByb3BlcnRpZXMgPSBudWxsOwotICAgIAotICAgIHByaXZhdGUgTWV0aG9kRXhlY3V0b3IgZXhlY3V0b3IgPSBudWxsOyAgICAKLSAgICAKKworICAgIHByaXZhdGUgTWV0aG9kRXhlY3V0b3IgZXhlY3V0b3IgPSBudWxsOworCiAgICAgcHJpdmF0ZSBzdGF0aWMgTG9nZ2VyIF9sb2dnZXI7CiAgICAgc3RhdGljIHsKICAgICAgICAgX2xvZ2dlciA9IExvZ2dlci5nZXRBbm9ueW1vdXNMb2dnZXIoKTsKQEAgLTUwLDE2NyArNTAsMTY3IEBACiAgICAgcHJpdmF0ZSBib29sZWFuIGRlYnVnID0gZmFsc2U7CiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0IGEgRGF0YVNvdXJjZSBPYmplY3QgZnJvbSB0aGUgc3BlYy4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0Jc3BlYwk8Y29kZT4gRGF0YVNvdXJjZVNwZWMgPC9jb2RlPiBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3BlYyAgICA8Y29kZT4gRGF0YVNvdXJjZVNwZWMgPC9jb2RlPiBvYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIERhdGFTb3VyY2VPYmplY3RCdWlsZGVyKERhdGFTb3VyY2VTcGVjIHNwZWMpIHsKLSAgICAJdGhpcy5zcGVjID0gc3BlYzsKLSAgICAJZXhlY3V0b3IgPSBuZXcgTWV0aG9kRXhlY3V0b3IoKTsKKyAgICAgICAgdGhpcy5zcGVjID0gc3BlYzsKKyAgICAgICAgZXhlY3V0b3IgPSBuZXcgTWV0aG9kRXhlY3V0b3IoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3QgdGhlIERhdGFTb3VyY2UgT2JqZWN0IGZyb20gdGhlIHNwZWMuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCU9iamVjdCBjb25zdHJ1Y3RlZCB1c2luZyB0aGUgRGF0YVNvdXJjZVNwZWMuCi0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4gaWYgdGhlIGNsYXNzIGlzIG5vdCBmb3VuZCBvciBzb21lIGlzc3VlIGluIGV4ZWN1dGluZwotICAgICAqCQlzb21lIG1ldGhvZC4KKyAgICAgKiBAcmV0dXJuICAgIE9iamVjdCBjb25zdHJ1Y3RlZCB1c2luZyB0aGUgRGF0YVNvdXJjZVNwZWMuCisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4gaWYgdGhlIGNsYXNzIGlzIG5vdCBmb3VuZCBvciBzb21lIGlzc3VlIGluIGV4ZWN1dGluZworICAgICAqICAgICAgICBzb21lIG1ldGhvZC4KICAgICAgKi8KICAgICBwdWJsaWMgT2JqZWN0IGNvbnN0cnVjdERhdGFTb3VyY2VPYmplY3QoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb257Ci0gICAgCWRyaXZlclByb3BlcnRpZXMgPSBwYXJzZURyaXZlclByb3BlcnRpZXMoc3BlYyk7CisgICAgICAgIGRyaXZlclByb3BlcnRpZXMgPSBwYXJzZURyaXZlclByb3BlcnRpZXMoc3BlYyk7CiAgICAgICAgIE9iamVjdCBkYXRhU291cmNlT2JqZWN0ID0gZ2V0RGF0YVNvdXJjZU9iamVjdCgpOwogICAgICAgICBNZXRob2RbXSBtZXRob2RzID0gZGF0YVNvdXJjZU9iamVjdC5nZXRDbGFzcygpLmdldE1ldGhvZHMoKTsKICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgbWV0aG9kcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgU3RyaW5nIG1ldGhvZE5hbWUgPSBtZXRob2RzW2ldLmdldE5hbWUoKTsKLQkgICAgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0VXNlciIpKXsJICAgIAkKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlVTRVJOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRQYXNzd29yZCIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBBU1NXT1JEKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRMb2dpblRpbWVPdXQiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dJTlRJTUVPVVQpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldExvZ1dyaXRlciIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR1dSSVRFUiksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0RGF0YWJhc2VOYW1lIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQUJBU0VOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXREYXRhU291cmNlTmFtZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXREZXNjcmlwdGlvbiIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFU0NSSVBUSU9OKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TmV0d29ya1Byb3RvY29sIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTkVUV09SS1BST1RPQ09MKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRQb3J0TnVtYmVyIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUE9SVE5VTUJFUiksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0Um9sZU5hbWUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ST0xFTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAkJICAgIAkKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0U2VydmVyTmFtZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlNFUlZFUk5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWF4U3RhdGVtZW50cyIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1BWFNUQVRFTUVOVFMpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldEluaXRpYWxQb29sU2l6ZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLklOSVRJQUxQT09MU0laRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAkKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWluUG9vbFNpemUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NSU5QT09MU0laRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWF4UG9vbFNpemUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NQVhQT09MU0laRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAkKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWF4SWRsZVRpbWUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NQVhJRExFVElNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAkKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0UHJvcGVydHlDeWNsZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBST1BFUlRZQ1lDTEUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChkcml2ZXJQcm9wZXJ0aWVzLmNvbnRhaW5zS2V5KG1ldGhvZE5hbWUudG9VcHBlckNhc2UoKSkpewotCSAgICAJVmVjdG9yIHZhbHVlcyA9IChWZWN0b3IpIGRyaXZlclByb3BlcnRpZXMuZ2V0KG1ldGhvZE5hbWUudG9VcHBlckNhc2UoKSk7Ci0JICAgICAgICBleGVjdXRvci5ydW5NZXRob2QobWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0LCB2YWx1ZXMpOwotCSAgICB9CisgICAgICAgIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFVzZXIiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5VU0VSTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0UGFzc3dvcmQiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QQVNTV09SRCksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TG9naW5UaW1lT3V0IikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HSU5USU1FT1VUKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRMb2dXcml0ZXIiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dXUklURVIpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldERhdGFiYXNlTmFtZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFCQVNFTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0RGF0YVNvdXJjZU5hbWUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBU09VUkNFTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0RGVzY3JpcHRpb24iKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERVNDUklQVElPTiksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TmV0d29ya1Byb3RvY29sIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTkVUV09SS1BST1RPQ09MKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRQb3J0TnVtYmVyIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUE9SVE5VTUJFUiksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0Um9sZU5hbWUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ST0xFTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0U2VydmVyTmFtZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlNFUlZFUk5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1heFN0YXRlbWVudHMiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NQVhTVEFURU1FTlRTKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRJbml0aWFsUG9vbFNpemUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5JTklUSUFMUE9PTFNJWkUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1pblBvb2xTaXplIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUlOUE9PTFNJWkUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1heFBvb2xTaXplIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUFYUE9PTFNJWkUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1heElkbGVUaW1lIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUFYSURMRVRJTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFByb3BlcnR5Q3ljbGUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QUk9QRVJUWUNZQ0xFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAoZHJpdmVyUHJvcGVydGllcy5jb250YWluc0tleShtZXRob2ROYW1lLnRvVXBwZXJDYXNlKCkpKXsKKyAgICAgICAgICAgIFZlY3RvciB2YWx1ZXMgPSAoVmVjdG9yKSBkcml2ZXJQcm9wZXJ0aWVzLmdldChtZXRob2ROYW1lLnRvVXBwZXJDYXNlKCkpOworICAgICAgICAgICAgZXhlY3V0b3IucnVuTWV0aG9kKG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCwgdmFsdWVzKTsKKyAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBkYXRhU291cmNlT2JqZWN0OwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgZXh0cmEgZHJpdmVyIHByb3BlcnRpZXMgZnJvbSB0aGUgRGF0YVNvdXJjZVNwZWMgb2JqZWN0IGFuZAogICAgICAqIHBhcnNlIHRoZW0gdG8gYSBzZXQgb2YgbWV0aG9kTmFtZSBhbmQgcGFyYW1ldGVycy4gUHJlcGFyZSBhIGhhc2h0YWJsZQogICAgICAqIGNvbnRhaW5pbmcgdGhlc2UgZGV0YWlscyBhbmQgcmV0dXJuLgogICAgICAqCi0gICAgICogQHBhcmFtCXNwZWMJPGNvZGU+IERhdGFTb3VyY2VTcGVjIDwvY29kZT4gb2JqZWN0LgotICAgICAqIEByZXR1cm4JSGFzaHRhYmxlIGNvbnRhaW5pbmcgbWV0aG9kIG5hbWVzIGFuZCBwYXJhbWV0ZXJzLAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JSWYgZGVsaW1pdGVyIGlzIG5vdCBwcm92aWRlZCBhbmQgcHJvcGVydHkgc3RyaW5nCi0gICAgICoJCQkJCWlzIG5vdCBudWxsLgorICAgICAqIEBwYXJhbSAgICBzcGVjICAgIDxjb2RlPiBEYXRhU291cmNlU3BlYyA8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcmV0dXJuICAgIEhhc2h0YWJsZSBjb250YWluaW5nIG1ldGhvZCBuYW1lcyBhbmQgcGFyYW1ldGVycywKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIElmIGRlbGltaXRlciBpcyBub3QgcHJvdmlkZWQgYW5kIHByb3BlcnR5IHN0cmluZworICAgICAqICAgICAgICAgICAgICAgICAgICBpcyBub3QgbnVsbC4KICAgICAgKi8KICAgICBwcml2YXRlIEhhc2h0YWJsZSBwYXJzZURyaXZlclByb3BlcnRpZXMoRGF0YVNvdXJjZVNwZWMgc3BlYykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewotICAgIAlTdHJpbmcgZGVsaW0gPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERUxJTUlURVIpOworICAgICAgICBTdHJpbmcgZGVsaW0gPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERUxJTUlURVIpOwogCiAgICAgICAgIFN0cmluZyBwcm9wID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuRFJJVkVSUFJPUEVSVElFUyk7Ci0JaWYgKCBwcm9wID09IG51bGwgfHwgcHJvcC50cmltKCkuZXF1YWxzKCIiKSkgewotCSAgICByZXR1cm4gbmV3IEhhc2h0YWJsZSgpOwotCX0gZWxzZSBpZiAoZGVsaW0gPT0gbnVsbCB8fCBkZWxpbS5lcXVhbHMoIiIpKSB7Ci0JICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbiAoIkRlbGltaXRlciBpcyBub3QgcHJvdmlkZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24iKTsKLQl9Ci0JCi0JSGFzaHRhYmxlIHByb3BlcnRpZXMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0JZGVsaW0gPSBkZWxpbS50cmltKCk7CQotCVN0cmluZyBzZXAgPSBkZWxpbStkZWxpbTsKLQlpbnQgc2VwTGVuID0gc2VwLmxlbmd0aCgpOwotCVN0cmluZyBjYWNoZSA9IHByb3A7Ci0JVmVjdG9yIG1ldGhvZHMgPSBuZXcgVmVjdG9yKCk7Ci0JCi0Jd2hpbGUgKGNhY2hlLmluZGV4T2Yoc2VwKSAhPSAtMSkgewotCSAgICBpbnQgaW5kZXggPSBjYWNoZS5pbmRleE9mKHNlcCk7Ci0JICAgIFN0cmluZyBuYW1lID0gY2FjaGUuc3Vic3RyaW5nKDAsaW5kZXgpOwotCSAgICBpZiAobmFtZS50cmltKCkgIT0gIiIpIHsKLQkgICAgICAgIG1ldGhvZHMuYWRkKG5hbWUpOwotCSAgICAJY2FjaGUgPSBjYWNoZS5zdWJzdHJpbmcoaW5kZXgrc2VwTGVuKTsKLQkgICAgfQotCX0KLQkKLSAgICAJRW51bWVyYXRpb24gYWxsTWV0aG9kcyA9IG1ldGhvZHMuZWxlbWVudHMoKTsKLSAgICAJd2hpbGUgKGFsbE1ldGhvZHMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAJICAgIFN0cmluZyBvbmVNZXRob2QgPSAoU3RyaW5nKSBhbGxNZXRob2RzLm5leHRFbGVtZW50KCk7ICAgIAkgICAgCi0gICAgCSAgICBpZiAoIW9uZU1ldGhvZC50cmltKCkuZXF1YWxzKCIiKSkgewotICAgIAkgICAgCVN0cmluZyBtZXRob2ROYW1lID0gbnVsbDsKLSAgICAJICAgIAlWZWN0b3IgcGFybXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgCSAgICAJU3RyaW5nVG9rZW5pemVyIG1ldGhvZERldGFpbHMgPSBuZXcgU3RyaW5nVG9rZW5pemVyKG9uZU1ldGhvZCxkZWxpbSk7Ci0JCWZvciAoaW50IGk9MDsgbWV0aG9kRGV0YWlscy5oYXNNb3JlVG9rZW5zKCk7aSsrICkgewotCQkgICAgU3RyaW5nIHRva2VuID0gKFN0cmluZykgbWV0aG9kRGV0YWlscy5uZXh0VG9rZW4oKTsKLQkJICAgIGlmIChpPT0wKSB7Ci0JCSAgICAJbWV0aG9kTmFtZSA9IHRva2VuLnRvVXBwZXJDYXNlKCk7Ci0JCSAgICB9IGVsc2UgewotCQkgICAgCXBhcm1zLmFkZCh0b2tlbik7CQkgICAgCQotCQkgICAgfQotCQl9Ci0JCXByb3BlcnRpZXMucHV0KG1ldGhvZE5hbWUscGFybXMpOwotICAgIAkgICAgfSAgICAJICAgIAotICAgIAl9Ci0gICAgCXJldHVybiBwcm9wZXJ0aWVzOworICAgIGlmICggcHJvcCA9PSBudWxsIHx8IHByb3AudHJpbSgpLmVxdWFscygiIikpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBIYXNodGFibGUoKTsKKyAgICB9IGVsc2UgaWYgKGRlbGltID09IG51bGwgfHwgZGVsaW0uZXF1YWxzKCIiKSkgeworICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24gKCJEZWxpbWl0ZXIgaXMgbm90IHByb3ZpZGVkIGluIHRoZSBjb25maWd1cmF0aW9uIik7CiAgICAgfQotICAgIAorCisgICAgSGFzaHRhYmxlIHByb3BlcnRpZXMgPSBuZXcgSGFzaHRhYmxlKCk7CisgICAgZGVsaW0gPSBkZWxpbS50cmltKCk7CisgICAgU3RyaW5nIHNlcCA9IGRlbGltK2RlbGltOworICAgIGludCBzZXBMZW4gPSBzZXAubGVuZ3RoKCk7CisgICAgU3RyaW5nIGNhY2hlID0gcHJvcDsKKyAgICBWZWN0b3IgbWV0aG9kcyA9IG5ldyBWZWN0b3IoKTsKKworICAgIHdoaWxlIChjYWNoZS5pbmRleE9mKHNlcCkgIT0gLTEpIHsKKyAgICAgICAgaW50IGluZGV4ID0gY2FjaGUuaW5kZXhPZihzZXApOworICAgICAgICBTdHJpbmcgbmFtZSA9IGNhY2hlLnN1YnN0cmluZygwLGluZGV4KTsKKyAgICAgICAgaWYgKG5hbWUudHJpbSgpICE9ICIiKSB7CisgICAgICAgICAgICBtZXRob2RzLmFkZChuYW1lKTsKKyAgICAgICAgICAgIGNhY2hlID0gY2FjaGUuc3Vic3RyaW5nKGluZGV4K3NlcExlbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAgICAgRW51bWVyYXRpb24gYWxsTWV0aG9kcyA9IG1ldGhvZHMuZWxlbWVudHMoKTsKKyAgICAgICAgd2hpbGUgKGFsbE1ldGhvZHMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKKyAgICAgICAgICAgIFN0cmluZyBvbmVNZXRob2QgPSAoU3RyaW5nKSBhbGxNZXRob2RzLm5leHRFbGVtZW50KCk7CisgICAgICAgICAgICBpZiAoIW9uZU1ldGhvZC50cmltKCkuZXF1YWxzKCIiKSkgeworICAgICAgICAgICAgICAgIFN0cmluZyBtZXRob2ROYW1lID0gbnVsbDsKKyAgICAgICAgICAgICAgICBWZWN0b3IgcGFybXMgPSBuZXcgVmVjdG9yKCk7CisgICAgICAgICAgICAgICAgU3RyaW5nVG9rZW5pemVyIG1ldGhvZERldGFpbHMgPSBuZXcgU3RyaW5nVG9rZW5pemVyKG9uZU1ldGhvZCxkZWxpbSk7CisgICAgICAgIGZvciAoaW50IGk9MDsgbWV0aG9kRGV0YWlscy5oYXNNb3JlVG9rZW5zKCk7aSsrICkgeworICAgICAgICAgICAgU3RyaW5nIHRva2VuID0gKFN0cmluZykgbWV0aG9kRGV0YWlscy5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAgIGlmIChpPT0wKSB7CisgICAgICAgICAgICAgICAgbWV0aG9kTmFtZSA9IHRva2VuLnRvVXBwZXJDYXNlKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHBhcm1zLmFkZCh0b2tlbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcHJvcGVydGllcy5wdXQobWV0aG9kTmFtZSxwYXJtcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHByb3BlcnRpZXM7CisgICAgfQorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIERhdGFzb3VyY2Ugb2JqZWN0IGFjY29yZGluZyB0byB0aGUgc3BlYy4KICAgICAgKgotICAgICAqIEByZXR1cm4JSW5pdGlhbCBEYXRhU291cmNlIE9iamVjdCBpbnN0YW5jZS4KLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiBJZiBjbGFzcyBuYW1lIGlzIHdyb25nIG9yIGNsYXNzcGF0aCBpcyBub3Qgc2V0Ci0gICAgICoJCXByb3Blcmx5LgorICAgICAqIEByZXR1cm4gICAgSW5pdGlhbCBEYXRhU291cmNlIE9iamVjdCBpbnN0YW5jZS4KKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiBJZiBjbGFzcyBuYW1lIGlzIHdyb25nIG9yIGNsYXNzcGF0aCBpcyBub3Qgc2V0CisgICAgICogICAgICAgIHByb3Blcmx5LgogICAgICAqLwogICAgIHByaXZhdGUgT2JqZWN0IGdldERhdGFTb3VyY2VPYmplY3QoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb257Ci0gICAgCVN0cmluZyBjbGFzc05hbWUgPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DTEFTU05BTUUpOwotICAgICAgICB0cnkgeyAgICAgICAgICAgIAorICAgICAgICBTdHJpbmcgY2xhc3NOYW1lID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ0xBU1NOQU1FKTsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENsYXNzIGRhdGFTb3VyY2VDbGFzcyA9IENsYXNzLmZvck5hbWUoY2xhc3NOYW1lKTsKICAgICAgICAgICAgIE9iamVjdCBkYXRhU291cmNlT2JqZWN0ID0gZGF0YVNvdXJjZUNsYXNzLm5ld0luc3RhbmNlKCk7CiAgICAgICAgICAgICByZXR1cm4gZGF0YVNvdXJjZU9iamVjdDsKICAgICAgICAgfSBjYXRjaChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGNmbmUpewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19jbmZlX2RzIiwgY2ZuZSk7Ci0JCisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2NuZmVfZHMiLCBjZm5lKTsKKwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJDbGFzcyBOYW1lIGlzIHdyb25nIG9yIENsYXNzIHBhdGggaXMgbm90IHNldCBmb3IgOiIgKyBjbGFzc05hbWUpOwogICAgICAgICB9IGNhdGNoKEluc3RhbnRpYXRpb25FeGNlcHRpb24gY2UpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfaW5zdCIsIGNsYXNzTmFtZSk7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2luc3QiLCBjbGFzc05hbWUpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJFcnJvciBpbiBpbnN0YW50aWF0aW5nIiArIGNsYXNzTmFtZSk7CiAgICAgICAgIH0gY2F0Y2goSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBjZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19hY2NfaW5zdCIsIGNsYXNzTmFtZSk7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2FjY19pbnN0IiwgY2xhc3NOYW1lKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIEVycm9yIGluIGluc3RhbnRpYXRpbmciICsgY2xhc3NOYW1lKTsKICAgICAgICAgfQogICAgIH0KLSAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZVNwZWMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZVNwZWMuamF2YQppbmRleCBlZjZjNGM5Li4zZGMxNTRkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VTcGVjLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlU3BlYy5qYXZhCkBAIC0xOSw5MiArMTksOTIgQEAKIGltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwogCiAvKioKLSAqIEVuY2Fwc3VsYXRlIHRoZSBEYXRhU291cmNlIG9iamVjdCBkZXRhaWxzIG9idGFpbmVkIGZyb20gCisgKiBFbmNhcHN1bGF0ZSB0aGUgRGF0YVNvdXJjZSBvYmplY3QgZGV0YWlscyBvYnRhaW5lZCBmcm9tCiAgKiBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8yMwotICogQGF1dGhvcglCaW5vZCBQLkcKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMjMKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCiAgKi8KIHB1YmxpYyBjbGFzcyBEYXRhU291cmNlU3BlYyBpbXBsZW1lbnRzIGphdmEuaW8uU2VyaWFsaXphYmxlewogCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVVNFUk5BTUUJCQkJPSAxOyAgICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQQVNTV09SRAkJCQk9IDI7ICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVUkwJCQkJCT0gMzsgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExPR0lOVElNRU9VVAkJCT0gNDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMT0dXUklURVIJCQkJPSA1OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFCQVNFTkFNRQkJCT0gNjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQVRBU09VUkNFTkFNRQkJCT0gNzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERVNDUklQVElPTgkJCQk9IDg7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTkVUV09SS1BST1RPQ09MCQkJPSA5OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBPUlROVU1CRVIJCQkJPSAxMDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBST0xFTkFNRQkJCQk9IDExOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNFUlZFUk5BTUUJCQkJPSAxMjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhTVEFURU1FTlRTCQkJPSAxMzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTklUSUFMUE9PTFNJWkUJCQk9IDE0OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1JTlBPT0xTSVpFCQkJCT0gMTU7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYUE9PTFNJWkUJCQkJPSAxNjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhJRExFVElNRQkJCQk9IDE3OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBST1BFUlRZQ1lDTEUJCQk9IDE4OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERSSVZFUlBST1BFUlRJRVMJCQk9IDE5OyAgICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDTEFTU05BTUUJCQkJPSAyMDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERUxJTUlURVIJCQkJPSAyMTsKLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBYQURBVEFTT1VSQ0UJCQk9IDIyOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFTT1VSQ0UJCQkJPSAyMzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05ORUNUSU9OUE9PTERBVEFTT1VSQ0UJCT0gMjQ7Ci0gICAgICAKLSAgICAvL0dKQ0lOVCAgICAgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQJPSAyNTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWQUxJREFUSU9OTUVUSE9ECQkJPSAyNjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWQUxJREFUSU9OVEFCTEVOQU1FCQkJPSAyNzsKLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUUkFOU0FDVElPTklTT0xBVElPTgkJPSAyODsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHVUFSQU5URUVJU09MQVRJT05MRVZFTAkJPSAyOTsKLSAgICAgICAgICAgIAorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVTRVJOQU1FICAgICAgICAgICAgICAgID0gMTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQQVNTV09SRCAgICAgICAgICAgICAgICA9IDI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVVJMICAgICAgICAgICAgICAgICAgICA9IDM7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTE9HSU5USU1FT1VUICAgICAgICAgICAgPSA0OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExPR1dSSVRFUiAgICAgICAgICAgICAgICA9IDU7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREFUQUJBU0VOQU1FICAgICAgICAgICAgPSA2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFTT1VSQ0VOQU1FICAgICAgICAgICAgPSA3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFU0NSSVBUSU9OICAgICAgICAgICAgICAgID0gODsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBORVRXT1JLUFJPVE9DT0wgICAgICAgICAgICA9IDk7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUE9SVE5VTUJFUiAgICAgICAgICAgICAgICA9IDEwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJPTEVOQU1FICAgICAgICAgICAgICAgID0gMTE7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0VSVkVSTkFNRSAgICAgICAgICAgICAgICA9IDEyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWFNUQVRFTUVOVFMgICAgICAgICAgICA9IDEzOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOSVRJQUxQT09MU0laRSAgICAgICAgICAgID0gMTQ7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUlOUE9PTFNJWkUgICAgICAgICAgICAgICAgPSAxNTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhQT09MU0laRSAgICAgICAgICAgICAgICA9IDE2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWElETEVUSU1FICAgICAgICAgICAgICAgID0gMTc7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUFJPUEVSVFlDWUNMRSAgICAgICAgICAgID0gMTg7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRFJJVkVSUFJPUEVSVElFUyAgICAgICAgICAgID0gMTk7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0xBU1NOQU1FICAgICAgICAgICAgICAgID0gMjA7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVMSU1JVEVSICAgICAgICAgICAgICAgID0gMjE7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBYQURBVEFTT1VSQ0UgICAgICAgICAgICA9IDIyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFTT1VSQ0UgICAgICAgICAgICAgICAgPSAyMzsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05ORUNUSU9OUE9PTERBVEFTT1VSQ0UgICAgICAgID0gMjQ7CisKKyAgICAvL0dKQ0lOVAorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQgICAgPSAyNTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWQUxJREFUSU9OTUVUSE9EICAgICAgICAgICAgPSAyNjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWQUxJREFUSU9OVEFCTEVOQU1FICAgICAgICAgICAgPSAyNzsKKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRSQU5TQUNUSU9OSVNPTEFUSU9OICAgICAgICA9IDI4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdVQVJBTlRFRUlTT0xBVElPTkxFVkVMICAgICAgICA9IDI5OworCiAgICAgcHJpdmF0ZSBIYXNodGFibGUgZGV0YWlscyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgcHJvcGVydHkuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcHJvcGVydHkJUHJvcGVydHkgTmFtZSB0byBiZSBzZXQuCi0gICAgICogQHBhcmFtCXZhbHVlCQlWYWx1ZSBvZiBwcm9wZXJ0eSB0byBiZSBzZXQuCisgICAgICogQHBhcmFtICAgIHByb3BlcnR5ICAgIFByb3BlcnR5IE5hbWUgdG8gYmUgc2V0LgorICAgICAqIEBwYXJhbSAgICB2YWx1ZSAgICAgICAgVmFsdWUgb2YgcHJvcGVydHkgdG8gYmUgc2V0LgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERldGFpbChpbnQgcHJvcGVydHksIFN0cmluZyB2YWx1ZSkgewotICAgIAlkZXRhaWxzLnB1dChuZXcgSW50ZWdlcihwcm9wZXJ0eSksdmFsdWUpOworICAgICAgICBkZXRhaWxzLnB1dChuZXcgSW50ZWdlcihwcm9wZXJ0eSksdmFsdWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgdmFsdWUgb2YgcHJvcGVydHkKICAgICAgKgotICAgICAqIEByZXR1cm4JVmFsdWUgb2YgdGhlIHByb3BlcnR5LgorICAgICAqIEByZXR1cm4gICAgVmFsdWUgb2YgdGhlIHByb3BlcnR5LgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGV0YWlsKGludCBwcm9wZXJ0eSkgewotICAgIAlpZiAoZGV0YWlscy5jb250YWluc0tleShuZXcgSW50ZWdlcihwcm9wZXJ0eSkpKSB7Ci0gICAgCSAgICByZXR1cm4gKFN0cmluZykgZGV0YWlscy5nZXQobmV3IEludGVnZXIocHJvcGVydHkpKTsKLSAgICAJfSBlbHNlIHsKLSAgICAJICAgIHJldHVybiBudWxsOwotICAgIAl9ICAgIAkKKyAgICAgICAgaWYgKGRldGFpbHMuY29udGFpbnNLZXkobmV3IEludGVnZXIocHJvcGVydHkpKSkgeworICAgICAgICAgICAgcmV0dXJuIChTdHJpbmcpIGRldGFpbHMuZ2V0KG5ldyBJbnRlZ2VyKHByb3BlcnR5KSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENoZWNrcyB3aGV0aGVyIHR3byA8Y29kZT5EYXRhU291cmNlU3BlYzwvY29kZT4gb2JqZWN0cwogICAgICAqIGFyZSBlcXVhbCBvciBub3QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jb2JqCUluc3RhbmNlIG9mIDxjb2RlPkRhdGFTb3VyY2VTcGVjPC9jb2RlPiBvYmplY3QuCisgICAgICogQHBhcmFtICAgIG9iaiAgICBJbnN0YW5jZSBvZiA8Y29kZT5EYXRhU291cmNlU3BlYzwvY29kZT4gb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb2JqKSB7Ci0gICAgCWlmIChvYmogaW5zdGFuY2VvZiBEYXRhU291cmNlU3BlYykgewotICAgIAkgICAgcmV0dXJuIHRoaXMuZGV0YWlscy5lcXVhbHMoKChEYXRhU291cmNlU3BlYylvYmopLmRldGFpbHMpOwotICAgIAl9Ci0gICAgCXJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIERhdGFTb3VyY2VTcGVjKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5kZXRhaWxzLmVxdWFscygoKERhdGFTb3VyY2VTcGVjKW9iaikuZGV0YWlscyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgaGFzaENvZGUgb2YgdGhpcyA8Y29kZT5EYXRhU291cmNlU3BlYzwvY29kZT4gb2JqZWN0LgogICAgICAqCi0gICAgICogQHJldHVybgloYXNoQ29kZSBvZiB0aGlzIG9iamVjdC4KKyAgICAgKiBAcmV0dXJuICAgIGhhc2hDb2RlIG9mIHRoaXMgb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7Ci0gICAgCXJldHVybiB0aGlzLmRldGFpbHMuaGFzaENvZGUoKTsKLSAgICB9ICAgIAorICAgICAgICByZXR1cm4gdGhpcy5kZXRhaWxzLmhhc2hDb2RlKCk7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL2J1aWxkLnhtbAppbmRleCBlZjQzOGZjLi4zYjRmYWViIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL2J1aWxkLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8cHJvamVjdCBuYW1lPSJqZGJjX2Nvbm5lY3RvciIgYmFzZWRpcj0iLiIgZGVmYXVsdD0iYnVpbGQiPgogICA8cHJvcGVydHkgbmFtZT0icGtnLmRpciIgdmFsdWU9ImNvbS9zdW4vZ2pjL2NvbW1vbiIvPgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImNsZWFuIj4KICAgICA8YW50IGFudGZpbGU9ImJ1aWxkLnhtbCIgZGlyPSIke2dqYy5ob21lfS9iaW4iIHRhcmdldD0iY2xlYW4iLz4KICAgPC90YXJnZXQ+CkBAIC0zNiwxMyArMzYsMTMgQEAKIAogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUxMyIgZGVwZW5kcz0iY29tcGlsZSIvPgogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUxNCIgZGVwZW5kcz0iY29tcGlsZSIvPgotICAKKwogICA8dGFyZ2V0IG5hbWU9InBhY2thZ2UxMyIgZGVwZW5kcz0icGFja2FnZSIvPgogICA8dGFyZ2V0IG5hbWU9InBhY2thZ2UxNCIgZGVwZW5kcz0icGFja2FnZSIvPgogCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQxMyIgZGVwZW5kcz0iY29tcGlsZTEzLCBwYWNrYWdlMTMiLz4KICAgPHRhcmdldCBuYW1lPSJidWlsZDE0IiBkZXBlbmRzPSJjb21waWxlMTQsIHBhY2thZ2UxNCIvPgotICAgIAorCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImJ1aWxkMTMsIGJ1aWxkMTQiLz4KIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvQ29ubmVjdGlvbkhvbGRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvQ29ubmVjdGlvbkhvbGRlci5qYXZhCmluZGV4IGE4NTRkMjQuLjk5OGYzZjYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L0Nvbm5lY3Rpb25Ib2xkZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9Db25uZWN0aW9uSG9sZGVyLmphdmEKQEAgLTI0LDI0ICsyNCwyNCBAQAogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9yOwogCiAvKioKLSAqIEhvbGRzIHRoZSBqYXZhLnNxbC5Db25uZWN0aW9uIG9iamVjdCwgd2hpY2ggaXMgdG8gYmUgCisgKiBIb2xkcyB0aGUgamF2YS5zcWwuQ29ubmVjdGlvbiBvYmplY3QsIHdoaWNoIGlzIHRvIGJlCiAgKiBwYXNzZWQgdG8gdGhlIGFwcGxpY2F0aW9uIHByb2dyYW0uCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8yMwotICogQGF1dGhvcglCaW5vZCBQLkcKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMjMKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCiAgKi8KLXB1YmxpYyBjbGFzcyBDb25uZWN0aW9uSG9sZGVyIGltcGxlbWVudHMgQ29ubmVjdGlvbnsgCitwdWJsaWMgY2xhc3MgQ29ubmVjdGlvbkhvbGRlciBpbXBsZW1lbnRzIENvbm5lY3Rpb257CiAKICAgICBwcml2YXRlIENvbm5lY3Rpb24gY29uOwotICAgIAorCiAgICAgcHJpdmF0ZSBNYW5hZ2VkQ29ubmVjdGlvbiBtYzsKLSAgICAKLSAgICBwcml2YXRlIGJvb2xlYW4gd3JhcHBlZEFscmVhZHkgPSBmYWxzZTsgICAgCi0gICAgCisKKyAgICBwcml2YXRlIGJvb2xlYW4gd3JhcHBlZEFscmVhZHkgPSBmYWxzZTsKKwogICAgIHByaXZhdGUgYm9vbGVhbiBpc0Nsb3NlZCA9IGZhbHNlOwotICAgIAorCiAgICAgcHJpdmF0ZSBib29sZWFuIHZhbGlkID0gdHJ1ZTsKLSAgICAKKwogICAgIHByaXZhdGUgYm9vbGVhbiBhY3RpdmUgPSBmYWxzZTsKICAgICAvKioKICAgICAgKiBUaGUgYWN0aXZlIGZsYWcgaXMgZmFsc2Ugd2hlbiB0aGUgY29ubmVjdGlvbiBoYW5kbGUgaXMKQEAgLTUzLDIxOSArNTMsMjE5IEBACiAgICAgICogZnVuY3Rpb24sIHRoZSBhYm92ZSBtZXRob2QgaW52b2NhdGlvbiBzdWNjZWVkczsgb3RoZXJ3aXNlCiAgICAgICogYW4gZXhjZXB0aW9uIGlzIHRocm93bi4KICAgICAgKi8KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdHMgYSBDb25uZWN0aW9uIGhvbGRlci4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JY29uCTxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBjb24gICAgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyBDb25uZWN0aW9uSG9sZGVyKENvbm5lY3Rpb24gY29uLCBNYW5hZ2VkQ29ubmVjdGlvbiBtYykgewogICAgICAgICB0aGlzLmNvbiA9IGNvbjsKICAgICAgICAgdGhpcy5tYyAgPSBtYzsKICAgICB9Ci0gICAgICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgYWN0dWFsIGNvbm5lY3Rpb24gaW4gdGhpcyBob2xkZXIgb2JqZWN0LgotICAgICAqIAotICAgICAqIEByZXR1cm4JQ29ubmVjdGlvbiBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcmV0dXJuICAgIENvbm5lY3Rpb24gb2JqZWN0LgogICAgICAqLwogICAgIENvbm5lY3Rpb24gZ2V0Q29ubmVjdGlvbigpIHsKLSAgICAJcmV0dXJuIGNvbjsKKyAgICAgICAgcmV0dXJuIGNvbjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBmbGFnIHRvIGluZGljYXRlIHRoYXQsIHRoZSBjb25uZWN0aW9uIGlzIHdyYXBwZWQgYWxyZWFkeSBvciBub3QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jd3JhcEZsYWcJCisgICAgICogQHBhcmFtICAgIHdyYXBGbGFnCiAgICAgICovCiAgICAgdm9pZCB3cmFwcGVkKGJvb2xlYW4gd3JhcEZsYWcpewogICAgICAgICB0aGlzLndyYXBwZWRBbHJlYWR5ID0gd3JhcEZsYWc7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB3aGV0aGVyIGl0IGlzIHdyYXBwZWQgYWxyZWFkeSBvciBub3QuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXdyYXBwZWQgZmxhZy4KKyAgICAgKiBAcmV0dXJuICAgIHdyYXBwZWQgZmxhZy4KICAgICAgKi8KICAgICBib29sZWFuIGlzV3JhcHBlZCgpewogICAgICAgICByZXR1cm4gd3JhcHBlZEFscmVhZHk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlIHJlc3BvbnNpYmxlCiAgICAgICogZm9yIHRoaXMgY29ubmVjdGlvbi4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqLwogICAgIE1hbmFnZWRDb25uZWN0aW9uIGdldE1hbmFnZWRDb25uZWN0aW9uKCkgewogICAgICAgICByZXR1cm4gbWM7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmVwbGFjZSB0aGUgYWN0dWFsIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCB3aXRoIHRoZSBvbmUKLSAgICAgKiBzdXBwbGllZC4gQWxzbyByZXBsYWNlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBsaW5rLiAgICAgCisgICAgICogc3VwcGxpZWQuIEFsc28gcmVwbGFjZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gbGluay4KICAgICAgKgotICAgICAqIEBwYXJhbQljb24gPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgotICAgICAqIEBwYXJhbQltYyAgPGNvZGU+IE1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCisgICAgICogQHBhcmFtICAgIGNvbiA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCisgICAgICogQHBhcmFtICAgIG1jICA8Y29kZT4gTWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KICAgICAgKi8KICAgICB2b2lkIGFzc29jaWF0ZUNvbm5lY3Rpb24oQ29ubmVjdGlvbiBjb24sIE1hbmFnZWRDb25uZWN0aW9uIG1jKSB7Ci0gICAgCXRoaXMubWMgPSBtYzsKLSAgICAJdGhpcy5jb24gPSBjb247CisgICAgICAgIHRoaXMubWMgPSBtYzsKKyAgICAgICAgdGhpcy5jb24gPSBjb247CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2xlYXJzIGFsbCB3YXJuaW5ncyByZXBvcnRlZCBmb3IgdGhlIHVuZGVybHlpbmcgY29ubmVjdGlvbiAgb2JqZWN0LgogICAgICAqCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBjbGVhcldhcm5pbmdzKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsgICAgCi0JY2hlY2tWYWxpZGl0eSgpOworICAgIHB1YmxpYyB2b2lkIGNsZWFyV2FybmluZ3MoKSB0aHJvd3MgU1FMRXhjZXB0aW9ueworICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgY29uLmNsZWFyV2FybmluZ3MoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBDbG9zZXMgdGhlIGxvZ2ljYWwgY29ubmVjdGlvbi4gICAgCisgICAgICogQ2xvc2VzIHRoZSBsb2dpY2FsIGNvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjbG9zZSgpIHRocm93cyBTUUxFeGNlcHRpb257CiAgICAgICAgIGlzQ2xvc2VkID0gdHJ1ZTsKLSAgICAgICAgbWMuY29ubmVjdGlvbkNsb3NlZChudWxsLCB0aGlzKTsgICAgICAgIAorICAgICAgICBtYy5jb25uZWN0aW9uQ2xvc2VkKG51bGwsIHRoaXMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEludmFsaWRhdGVzIHRoaXMgb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGludmFsaWRhdGUoKSB7Ci0gICAgCXZhbGlkID0gZmFsc2U7CisgICAgICAgIHZhbGlkID0gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2xvc2VzIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGludm9sdmVkIGluIHRoaXMuCiAgICAgICoKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwotICAgIHZvaWQgYWN0dWFsQ2xvc2UoKSB0aHJvd3MgU1FMRXhjZXB0aW9ueyAgICAKKyAgICB2b2lkIGFjdHVhbENsb3NlKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKICAgICAgICAgY29uLmNsb3NlKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29tbWl0IHRoZSBjaGFuZ2VzIGluIHRoZSB1bmRlcmx5aW5nIENvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNvbW1pdCgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5jb21taXQoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5jb21taXQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgc3RhdGVtZW50IGZyb20gdGhlIHVuZGVybHlpbmcgQ29ubmVjdGlvbgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5TdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHJldHVybiAgICA8Y29kZT5TdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFN0YXRlbWVudCBjcmVhdGVTdGF0ZW1lbnQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgcmV0dXJuIGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgc3RhdGVtZW50IGZyb20gdGhlIHVuZGVybHlpbmcgQ29ubmVjdGlvbi4KICAgICAgKgotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRUeXBlCVR5cGUgb2YgdGhlIFJlc3VsdFNldAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRDb25jdXJyZW5jeQlSZXN1bHRTZXQgQ29uY3VycmVuY3kuCi0gICAgICogQHJldHVybgk8Y29kZT5TdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4gICAgIAotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0VHlwZSAgICBUeXBlIG9mIHRoZSBSZXN1bHRTZXQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0Q29uY3VycmVuY3kgICAgUmVzdWx0U2V0IENvbmN1cnJlbmN5LgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+U3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTdGF0ZW1lbnQgY3JlYXRlU3RhdGVtZW50KGludCByZXN1bHRTZXRUeXBlLCBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3kpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICByZXR1cm4gY29uLmNyZWF0ZVN0YXRlbWVudChyZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIHN0YXRlbWVudCBmcm9tIHRoZSB1bmRlcmx5aW5nIENvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0VHlwZQlUeXBlIG9mIHRoZSBSZXN1bHRTZXQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0Q29uY3VycmVuY3kJUmVzdWx0U2V0IENvbmN1cnJlbmN5LgotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRIb2xkYWJpbGl0eQlSZXN1bHRTZXQgSG9sZGFiaWxpdHkuICAgICAKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlN0YXRlbWVudDwvY29kZT4gb2JqZWN0LiAKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgICAgIAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRUeXBlICAgIFR5cGUgb2YgdGhlIFJlc3VsdFNldAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRDb25jdXJyZW5jeSAgICBSZXN1bHRTZXQgQ29uY3VycmVuY3kuCisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldEhvbGRhYmlsaXR5ICAgIFJlc3VsdFNldCBIb2xkYWJpbGl0eS4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KLSAgICBwdWJsaWMgU3RhdGVtZW50IGNyZWF0ZVN0YXRlbWVudChpbnQgcmVzdWx0U2V0VHlwZSwgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5LCAKLSAgICAJCQkJICAgICBpbnQgcmVzdWx0U2V0SG9sZGFiaWx0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAJCQkJICAgICAKKyAgICBwdWJsaWMgU3RhdGVtZW50IGNyZWF0ZVN0YXRlbWVudChpbnQgcmVzdWx0U2V0VHlwZSwgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRIb2xkYWJpbHR5KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIHJldHVybiBjb24uY3JlYXRlU3RhdGVtZW50KHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5LAotICAgICAgICAJCQkgICByZXN1bHRTZXRIb2xkYWJpbHR5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0U2V0SG9sZGFiaWx0eSk7CiAgICAgfQotIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBjdXJyZW50IGF1dG8tY29tbWl0IG1vZGUgZm9yIHRoZSB1bmRlcmx5aW5nIDxjb2RlPiBDb25uZWN0aW9uPC9jb2RlPi4KICAgICAgKgogICAgICAqIEByZXR1cm4gVGhlIGN1cnJlbnQgc3RhdGUgb2YgY29ubmVjdGlvbidzIGF1dG8tY29tbWl0IG1vZGUuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBnZXRBdXRvQ29tbWl0KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5nZXRBdXRvQ29tbWl0KCk7Ci0gICAgfSAgIAotIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5nZXRBdXRvQ29tbWl0KCk7CisgICAgfQorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSB1bmRlcmx5aW5nIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCdzIGNhdGFsb2cgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JQ2F0YWxvZyBOYW1lLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcmV0dXJuICAgIENhdGFsb2cgTmFtZS4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRDYXRhbG9nKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIHJldHVybiBjb24uZ2V0Q2F0YWxvZygpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgY3VycmVudCBob2xkYWJpbGl0eSBvZiA8Y29kZT5SZXN1bHRTZXQ8L2NvZGU+IG9iamVjdHMgY3JlYXRlZAogICAgICAqIHVzaW5nIHRoaXMgY29ubmVjdGlvbiBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWhvbGRhYmlsaXR5IHZhbHVlLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcmV0dXJuICAgIGhvbGRhYmlsaXR5IHZhbHVlLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldEhvbGRhYmlsaXR5KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuCWNvbi5nZXRIb2xkYWJpbGl0eSgpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuICAgIGNvbi5nZXRIb2xkYWJpbGl0eSgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgPGNvZGU+RGF0YWJhc2VNZXRhRGF0YTwvY29kZT5vYmplY3QgZnJvbSB0aGUgdW5kZXJseWluZwogICAgICAqIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgogICAgICAqCiAgICAgICogQHJldHVybiA8Y29kZT5EYXRhYmFzZU1ldGFEYXRhPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgRGF0YWJhc2VNZXRhRGF0YSBnZXRNZXRhRGF0YSgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uZ2V0TWV0YURhdGEoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uZ2V0TWV0YURhdGEoKTsKICAgICB9Ci0gCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhpcyA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QncyBjdXJyZW50IHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbC4KICAgICAgKgogICAgICAqIEByZXR1cm4gVHJhbnNhY3Rpb24gbGV2ZWwKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgcmV0dXJuIGNvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFJldHJpZXZlcyB0aGUgPGNvZGU+TWFwPC9jb2RlPiBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIAorICAgICAqIFJldHJpZXZlcyB0aGUgPGNvZGU+TWFwPC9jb2RlPiBvYmplY3QgYXNzb2NpYXRlZCB3aXRoCiAgICAgICogPGNvZGU+IENvbm5lY3Rpb248L2NvZGU+IE9iamVjdC4KICAgICAgKgotICAgICAqIEByZXR1cm4JVHlwZU1hcCBzZXQgaW4gdGhpcyBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEByZXR1cm4gICAgVHlwZU1hcCBzZXQgaW4gdGhpcyBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBNYXAgZ2V0VHlwZU1hcCgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uZ2V0VHlwZU1hcCgpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5nZXRUeXBlTWFwKCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0VHlwZU1hcChNYXA8U3RyaW5nLCBDbGFzczw/Pj4gbWFwKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKQEAgLTI3NywxODQgKzI3NywxODQgQEAKICAgICAgKiA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCiAgICAgICoKICAgICAgKiBAcmV0dXJuIEZpcnN0IDxjb2RlPiBTUUxXYXJuaW5nPC9jb2RlPiBPYmplY3Qgb3IgbnVsbC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTUUxXYXJuaW5nIGdldFdhcm5pbmdzKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5nZXRXYXJuaW5ncygpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5nZXRXYXJuaW5ncygpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB3aGV0aGVyIHVuZGVybHlpbmcgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGlzIGNsb3NlZC4KICAgICAgKgotICAgICAqIEByZXR1cm4JdHJ1ZSBpZiA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaXMgY2xvc2VkLCBmYWxzZQotICAgICAqIAkJaWYgaXQgaXMgY2xvc2VkLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcmV0dXJuICAgIHRydWUgaWYgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGlzIGNsb3NlZCwgZmFsc2UKKyAgICAgKiAgICAgICAgIGlmIGl0IGlzIGNsb3NlZC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gaXNDbG9zZWQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLSAgICAJcmV0dXJuIGlzQ2xvc2VkOworICAgICAgICByZXR1cm4gaXNDbG9zZWQ7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHdoZXRoZXIgdGhpcyA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaXMgcmVhZC1vbmx5LgogICAgICAqCi0gICAgICogQHJldHVybgl0cnVlIGlmIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gaXMgcmVhZC1vbmx5LCBmYWxzZSBvdGhlci13aXNlCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEByZXR1cm4gICAgdHJ1ZSBpZiA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IGlzIHJlYWQtb25seSwgZmFsc2Ugb3RoZXItd2lzZQorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc1JlYWRPbmx5KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5pc1JlYWRPbmx5KCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLmlzUmVhZE9ubHkoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb252ZXJ0cyB0aGUgZ2l2ZW4gU1FMIHN0YXRlbWVudCBpbnRvIHRoZSBzeXN0ZW0ncyBuYXRpdmUgU1FMIGdyYW1tZXIuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBzdGF0ZW1lbnQgLCB0byBiZSBjb252ZXJ0ZWQuCi0gICAgICogQHJldHVybglDb252ZXJ0ZWQgU1FMIHN0cmluZy4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgc3RhdGVtZW50ICwgdG8gYmUgY29udmVydGVkLgorICAgICAqIEByZXR1cm4gICAgQ29udmVydGVkIFNRTCBzdHJpbmcuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgbmF0aXZlU1FMKFN0cmluZyBzcWwpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24ubmF0aXZlU1FMKHNxbCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLm5hdGl2ZVNRTChzcWwpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIGNhbGxpbmcgZGF0YWJhc2UKICAgICAgKiBzdG9yZWQgcHJvY2VkdXJlcy4KICAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAogICAgICAqIEByZXR1cm4gPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgQ2FsbGFibGVTdGF0ZW1lbnQgcHJlcGFyZUNhbGwoU3RyaW5nIHNxbCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlQ2FsbChzcWwpOwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBjYWxsaW5nIGRhdGFiYXNlCi0gICAgICogc3RvcmVkIHByb2NlZHVyZXMuCi0gICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0VHlwZQlUeXBlIG9mIHRoZSBSZXN1bHRTZXQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0Q29uY3VycmVuY3kJUmVzdWx0U2V0IENvbmN1cnJlbmN5LgotICAgICAqIEByZXR1cm4gPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLwotICAgIHB1YmxpYyBDYWxsYWJsZVN0YXRlbWVudCBwcmVwYXJlQ2FsbChTdHJpbmcgc3FsLGludCByZXN1bHRTZXRUeXBlLCAKLSAgICAJCQkJCWludCByZXN1bHRTZXRDb25jdXJyZW5jeSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAkJCQkJCi0gICAgCXJldHVybiBjb24ucHJlcGFyZUNhbGwoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSk7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIGNhbGxpbmcgZGF0YWJhc2UKLSAgICAgKiBzdG9yZWQgcHJvY2VkdXJlcy4KLSAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRUeXBlCVR5cGUgb2YgdGhlIFJlc3VsdFNldAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRDb25jdXJyZW5jeQlSZXN1bHRTZXQgQ29uY3VycmVuY3kuCi0gICAgICogQHBhcmFtCXJlc3VsdFNldEhvbGRhYmlsaXR5CVJlc3VsdFNldCBIb2xkYWJpbGl0eS4gICAgICAgICAgCi0gICAgICogQHJldHVybiA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovCi0gICAgcHVibGljIENhbGxhYmxlU3RhdGVtZW50IHByZXBhcmVDYWxsKFN0cmluZyBzcWwsIGludCByZXN1bHRTZXRUeXBlLCAKLSAgICAJCQkJCSBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3ksIAotICAgIAkJCQkJIGludCByZXN1bHRTZXRIb2xkYWJpbHR5KSB0aHJvd3MgU1FMRXhjZXB0aW9uewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCQkJCQkgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZUNhbGwoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSwKLSAgICAJCQkgICAgICAgcmVzdWx0U2V0SG9sZGFiaWx0eSk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVDYWxsKHNxbCk7CiAgICAgfQogCiAgICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZyAKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBjYWxsaW5nIGRhdGFiYXNlCisgICAgICogc3RvcmVkIHByb2NlZHVyZXMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0VHlwZSAgICBUeXBlIG9mIHRoZSBSZXN1bHRTZXQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0Q29uY3VycmVuY3kgICAgUmVzdWx0U2V0IENvbmN1cnJlbmN5LgorICAgICAqIEByZXR1cm4gPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBDYWxsYWJsZVN0YXRlbWVudCBwcmVwYXJlQ2FsbChTdHJpbmcgc3FsLGludCByZXN1bHRTZXRUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5KSB0aHJvd3MgU1FMRXhjZXB0aW9ueworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlQ2FsbChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBjYWxsaW5nIGRhdGFiYXNlCisgICAgICogc3RvcmVkIHByb2NlZHVyZXMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0VHlwZSAgICBUeXBlIG9mIHRoZSBSZXN1bHRTZXQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0Q29uY3VycmVuY3kgICAgUmVzdWx0U2V0IENvbmN1cnJlbmN5LgorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRIb2xkYWJpbGl0eSAgICBSZXN1bHRTZXQgSG9sZGFiaWxpdHkuCisgICAgICogQHJldHVybiA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCisgICAgcHVibGljIENhbGxhYmxlU3RhdGVtZW50IHByZXBhcmVDYWxsKFN0cmluZyBzcWwsIGludCByZXN1bHRTZXRUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0SG9sZGFiaWx0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZUNhbGwoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0U2V0SG9sZGFiaWx0eSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZwogICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQogICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CiAgICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCk7CiAgICAgfQotICAgIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcgCi0gICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCi0gICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JYXV0b0dlbmVyYXRlZEtleXMgYSBmbGFnIGluZGljYXRpbmcgQXV0b0dlbmVyYXRlZEtleXMgbmVlZCB0byBiZSByZXR1cm5lZC4KLSAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8KLSAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLCBpbnQgYXV0b0dlbmVyYXRlZEtleXMpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsYXV0b0dlbmVyYXRlZEtleXMpOwotICAgIH0gICAgCi0gICAgICAKLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nIAotICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQotICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50Ci0gICAgICogQHBhcmFtCWNvbHVtbkluZGV4ZXMgYW4gYXJyYXkgb2YgY29sdW1uIGluZGV4ZXMgaW5kaWNhdGluZyB0aGUgY29sdW1ucyB0aGF0IHNob3VsZCBiZQotICAgICAqCQlyZXR1cm5lZCBmcm9tIHRoZSBpbnNlcnRlZCByb3cgb3Igcm93cy4KLSAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8KLSAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLCBpbnRbXSBjb2x1bW5JbmRleGVzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLGNvbHVtbkluZGV4ZXMpOwotICAgIH0gICAgICAgICAgCi0gCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZyAKLSAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKLSAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRUeXBlCVR5cGUgb2YgdGhlIFJlc3VsdFNldAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRDb25jdXJyZW5jeQlSZXN1bHRTZXQgQ29uY3VycmVuY3kuCi0gICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovCi0gICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCxpbnQgcmVzdWx0U2V0VHlwZSwgCi0gICAgCQkJCQlpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3kpIHRocm93cyBTUUxFeGNlcHRpb257Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAJCQkJCQotICAgIAlyZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSk7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcgCi0gICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCi0gICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0VHlwZQlUeXBlIG9mIHRoZSBSZXN1bHRTZXQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0Q29uY3VycmVuY3kJUmVzdWx0U2V0IENvbmN1cnJlbmN5LgotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRIb2xkYWJpbGl0eQlSZXN1bHRTZXQgSG9sZGFiaWxpdHkuICAgICAgICAgIAotICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLwotICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludCByZXN1bHRTZXRUeXBlLCAKLSAgICAJCQkJCSBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3ksIAotICAgIAkJCQkJIGludCByZXN1bHRTZXRIb2xkYWJpbHR5KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAkJCQkJIAotICAgIAlyZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSwKLSAgICAJCQkJICAgIHJlc3VsdFNldEhvbGRhYmlsdHkpOwotICAgIH0gICAgICAgICAgIAogCiAgICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZyAKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nCiAgICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JY29sdW1uTmFtZXMgTmFtZSBvZiBib3VuZCBjb2x1bW5zLgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICBhdXRvR2VuZXJhdGVkS2V5cyBhIGZsYWcgaW5kaWNhdGluZyBBdXRvR2VuZXJhdGVkS2V5cyBuZWVkIHRvIGJlIHJldHVybmVkLgogICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLCBpbnQgYXV0b0dlbmVyYXRlZEtleXMpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCxhdXRvR2VuZXJhdGVkS2V5cyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZworICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIGNvbHVtbkluZGV4ZXMgYW4gYXJyYXkgb2YgY29sdW1uIGluZGV4ZXMgaW5kaWNhdGluZyB0aGUgY29sdW1ucyB0aGF0IHNob3VsZCBiZQorICAgICAqICAgICAgICByZXR1cm5lZCBmcm9tIHRoZSBpbnNlcnRlZCByb3cgb3Igcm93cy4KKyAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLCBpbnRbXSBjb2x1bW5JbmRleGVzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsY29sdW1uSW5kZXhlcyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZworICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldFR5cGUgICAgVHlwZSBvZiB0aGUgUmVzdWx0U2V0CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldENvbmN1cnJlbmN5ICAgIFJlc3VsdFNldCBDb25jdXJyZW5jeS4KKyAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLGludCByZXN1bHRTZXRUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5KSB0aHJvd3MgU1FMRXhjZXB0aW9ueworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3kpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcKKyAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRUeXBlICAgIFR5cGUgb2YgdGhlIFJlc3VsdFNldAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRDb25jdXJyZW5jeSAgICBSZXN1bHRTZXQgQ29uY3VycmVuY3kuCisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldEhvbGRhYmlsaXR5ICAgIFJlc3VsdFNldCBIb2xkYWJpbGl0eS4KKyAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLCBpbnQgcmVzdWx0U2V0VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3ksCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdFNldEhvbGRhYmlsdHkpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3ksCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRTZXRIb2xkYWJpbHR5KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nCisgICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgY29sdW1uTmFtZXMgTmFtZSBvZiBib3VuZCBjb2x1bW5zLgorICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIFN0cmluZ1tdIGNvbHVtbk5hbWVzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLGNvbHVtbk5hbWVzKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsY29sdW1uTmFtZXMpOwogICAgIH0KIAogICAgIHB1YmxpYyBDbG9iIGNyZWF0ZUNsb2IoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKQEAgLTUwNCwxNTEgKzUwNCwxNTEgQEAKICAgICAvKioKICAgICAgKiBSZW1vdmVzIHRoZSBnaXZlbiA8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdCBmcm9tIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLgogICAgICAqCi0gICAgICogQHBhcmFtCXNhdmVwb2ludAk8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdAotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgc2F2ZXBvaW50ICAgIDxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0CisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJlbGVhc2VTYXZlcG9pbnQoU2F2ZXBvaW50IHNhdmVwb2ludCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnJlbGVhc2VTYXZlcG9pbnQoc2F2ZXBvaW50KTsKLSAgICB9IAotICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnJlbGVhc2VTYXZlcG9pbnQoc2F2ZXBvaW50KTsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBSb2xscyBiYWNrIHRoZSBjaGFuZ2VzIG1hZGUgaW4gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24uCiAgICAgICoKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovICAgICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCiAgICAgcHVibGljIHZvaWQgcm9sbGJhY2soKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24ucm9sbGJhY2soKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5yb2xsYmFjaygpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJvbGxzIGJhY2sgdGhlIGNoYW5nZXMgbWFkZSBhZnRlciB0aGUgc2F2ZXBvaW50LgogICAgICAqCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLyAgICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJvbGxiYWNrKFNhdmVwb2ludCBzYXZlcG9pbnQpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5yb2xsYmFjayhzYXZlcG9pbnQpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnJvbGxiYWNrKHNhdmVwb2ludCk7CiAgICAgfQotICAgICAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGF1dG8tY29tbW1pdCBtb2RlIG9mIHRoZSA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JYXV0b0NvbW1pdCBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgdGhlIGF1dG8tY29tbWl0IG1vZGUuICAgICAKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIGF1dG9Db21taXQgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIHRoZSBhdXRvLWNvbW1pdCBtb2RlLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRBdXRvQ29tbWl0KGJvb2xlYW4gYXV0b0NvbW1pdCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnNldEF1dG9Db21taXQoYXV0b0NvbW1pdCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24uc2V0QXV0b0NvbW1pdChhdXRvQ29tbWl0KTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBjYXRhbG9nIG5hbWUgdG8gdGhlIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdAogICAgICAqCi0gICAgICogQHBhcmFtCWNhdGFsb2cJQ2F0YWxvZyBuYW1lLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgY2F0YWxvZyAgICBDYXRhbG9nIG5hbWUuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldENhdGFsb2coU3RyaW5nIGNhdGFsb2cpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5zZXRDYXRhbG9nKGNhdGFsb2cpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnNldENhdGFsb2coY2F0YWxvZyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogU2V0cyB0aGUgaG9sZGFiaWxpdHkgb2YgPGNvZGU+UmVzdWx0U2V0PC9jb2RlPiBvYmplY3RzIGNyZWF0ZWQgCisgICAgICogU2V0cyB0aGUgaG9sZGFiaWxpdHkgb2YgPGNvZGU+UmVzdWx0U2V0PC9jb2RlPiBvYmplY3RzIGNyZWF0ZWQKICAgICAgKiB1c2luZyB0aGlzIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KICAgICAgKgotICAgICAqIEBwYXJhbQlob2xkYWJpbGl0eQlBIDxjb2RlPlJlc3VsdFNldDwvY29kZT4gaG9sZGFiaWxpdHkgY29uc3RhbnQKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIGhvbGRhYmlsaXR5ICAgIEEgPGNvZGU+UmVzdWx0U2V0PC9jb2RlPiBob2xkYWJpbGl0eSBjb25zdGFudAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRIb2xkYWJpbGl0eShpbnQgaG9sZGFiaWxpdHkpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgIAljb24uc2V0SG9sZGFiaWxpdHkoaG9sZGFiaWxpdHkpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgIGNvbi5zZXRIb2xkYWJpbGl0eShob2xkYWJpbGl0eSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogUHV0cyB0aGUgY29ubmVjdGlvbiBpbiByZWFkLW9ubHkgbW9kZSBhcyBhIGhpbnQgdG8gdGhlIGRyaXZlciB0byAKKyAgICAgKiBQdXRzIHRoZSBjb25uZWN0aW9uIGluIHJlYWQtb25seSBtb2RlIGFzIGEgaGludCB0byB0aGUgZHJpdmVyIHRvCiAgICAgICogcGVyZm9ybSBkYXRhYmFzZSBvcHRpbWl6YXRpb25zLgogICAgICAqCi0gICAgICogQHBhcmFtCXJlYWRPbmx5ICB0cnVlIGVuYWJsZXMgcmVhZC1vbmx5IG1vZGUsIGZhbHNlIGRpc2FibGVzIGl0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgcmVhZE9ubHkgIHRydWUgZW5hYmxlcyByZWFkLW9ubHkgbW9kZSwgZmFsc2UgZGlzYWJsZXMgaXQuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFJlYWRPbmx5KGJvb2xlYW4gcmVhZE9ubHkpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5zZXRSZWFkT25seShyZWFkT25seSk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24uc2V0UmVhZE9ubHkocmVhZE9ubHkpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYW5kIHVubmFtZWQgc2F2ZXBvaW50IGFuZCByZXR1cm5zIGFuIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHRoYXQuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0LgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QuCiAgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTYXZlcG9pbnQgc2V0U2F2ZXBvaW50KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5zZXRTYXZlcG9pbnQoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uc2V0U2F2ZXBvaW50KCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIHNhdmVwb2ludCB3aXRoIHRoZSBuYW1lIGFuZCByZXR1cm5zIGFuIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHRoYXQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbmFtZQlOYW1lIG9mIHRoZSBzYXZlcG9pbnQuCi0gICAgICogQHJldHVybgk8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIG5hbWUgICAgTmFtZSBvZiB0aGUgc2F2ZXBvaW50LgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTYXZlcG9pbnQgc2V0U2F2ZXBvaW50KFN0cmluZyBuYW1lKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnNldFNhdmVwb2ludChuYW1lKTsKLSAgICB9ICAgIAotICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5zZXRTYXZlcG9pbnQobmFtZSk7CisgICAgfQorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsLgogICAgICAqCi0gICAgICogQHBhcmFtCWxldmVsIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIGxldmVsIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oaW50IGxldmVsKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24obGV2ZWwpOwotICAgIH0gICAgIAotICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKGxldmVsKTsKKyAgICB9CisKIAogICAgIHB1YmxpYyBpbnQgZ2V0TmV0d29ya1RpbWVvdXQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgbmV3IGZlYXR1cmUuIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0TmV0d29ya1RpbWVvdXQoRXhlY3V0b3IgZXhlY3V0b3IsIGludCBtaWxsaXNlY29uZHMpIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBuZXcgZmVhdHVyZS4iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBhYm9ydChFeGVjdXRvciBleGVjdXRvcikgIHRocm93cyBTUUxFeGNlcHRpb257CiAgICAgICB0aHJvdyBuZXcgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiRG8gbm90IHN1cHBvcnQgSmF2YSA3IG5ldyBmZWF0dXJlLiIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2NoZW1hKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgbmV3IGZlYXR1cmUuIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0U2NoZW1hKFN0cmluZyBzY2hlbWEpIHRocm93cyBTUUxFeGNlcHRpb257CiAgICAgICB0aHJvdyBuZXcgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiRG8gbm90IHN1cHBvcnQgSmF2YSA3IG5ldyBmZWF0dXJlLiIpOwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQ2hlY2tzIHRoZSB2YWxpZGl0eSBvZiB0aGlzIG9iamVjdAogICAgICAqLwogICAgIHByaXZhdGUgdm9pZCBjaGVja1ZhbGlkaXR5KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0gICAgCWlmIChpc0Nsb3NlZCkgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAoIkNvbm5lY3Rpb24gY2xvc2VkIik7Ci0gICAgCWlmICghdmFsaWQpIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKCJJbnZhbGlkIENvbm5lY3Rpb24iKTsKLSAgICAJaWYoYWN0aXZlID09IGZhbHNlKSB7Ci0gICAgCSAgICBtYy5jaGVja0lmQWN0aXZlKHRoaXMpOwotICAgIAl9CisgICAgICAgIGlmIChpc0Nsb3NlZCkgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAoIkNvbm5lY3Rpb24gY2xvc2VkIik7CisgICAgICAgIGlmICghdmFsaWQpIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKCJJbnZhbGlkIENvbm5lY3Rpb24iKTsKKyAgICAgICAgaWYoYWN0aXZlID09IGZhbHNlKSB7CisgICAgICAgICAgICBtYy5jaGVja0lmQWN0aXZlKHRoaXMpOworICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgYWN0aXZlIGZsYWcgdG8gdHJ1ZQogICAgICAqCi0gICAgICogQHBhcmFtCWFjdHYJYm9vbGVhbgorICAgICAqIEBwYXJhbSAgICBhY3R2ICAgIGJvb2xlYW4KICAgICAgKi8KICAgICB2b2lkIHNldEFjdGl2ZShib29sZWFuIGFjdHYpIHsKICAgICAgICAgYWN0aXZlID0gYWN0djsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKaW5kZXggYWM3ZTc0OC4uZjA2NzVhNCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKQEAgLTMzLDE5ICszMywxOSBAQAogICogVGhpcyBjbGFzcyBpcyBleHRlbmRlZCBieSB0aGUgRGF0YVNvdXJjZSBzcGVjaWZpYyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gZmFjdG9yaWVzCiAgKiBhbmQgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gZm9yIHRoZSA8Y29kZT5Ecml2ZXJNYW5hZ2VyPC9jb2RlPi4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA4LzAzCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wOC8wMworICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LCAKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnksCiAgICAgamF2YS5pby5TZXJpYWxpemFibGUgewotICAgIAorCiAgICAgcHJvdGVjdGVkIERhdGFTb3VyY2VTcGVjIHNwZWMgPSBuZXcgRGF0YVNvdXJjZVNwZWMoKTsKICAgICBwcm90ZWN0ZWQgdHJhbnNpZW50IERhdGFTb3VyY2VPYmplY3RCdWlsZGVyIGRzT2JqQnVpbGRlcjsKLSAgICAKKwogICAgIHByb3RlY3RlZCBqYXZhLmlvLlByaW50V3JpdGVyIGxvZ1dyaXRlciA9IG51bGw7CiAgICAgcHJvdGVjdGVkIGpha2FydGEucmVzb3VyY2Uuc3BpLlJlc291cmNlQWRhcHRlciByYSA9IG51bGw7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBMb2dnZXIgX2xvZ2dlcjsKICAgICBzdGF0aWMgewogICAgICAgICBfbG9nZ2VyID0gTG9nZ2VyLmdldEFub255bW91c0xvZ2dlcigpOwpAQCAtNTQsOCArNTQsOCBAQAogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBDb25uZWN0aW9uIEZhY3RvcnkgaW5zdGFuY2UuIFRoZSA8Y29kZT5Db25uZWN0aW9uTWFuYWdlcjwvY29kZT4gaW1wbGVtZW50YXRpb24KICAgICAgKiBvZiB0aGUgcmVzb3VyY2UgYWRhcHRlciBpcyB1c2VkIGhlcmUuCi0gICAgICogCi0gICAgICogQHJldHVybglHZW5lcmljIEpEQkMgQ29ubmVjdG9yIGltcGxlbWVudGF0aW9uIG9mIDxjb2RlPmphdmF4LnNxbC5EYXRhU291cmNlPC9jb2RlPgorICAgICAqCisgICAgICogQHJldHVybiAgICBHZW5lcmljIEpEQkMgQ29ubmVjdG9yIGltcGxlbWVudGF0aW9uIG9mIDxjb2RlPmphdmF4LnNxbC5EYXRhU291cmNlPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBPYmplY3QgY3JlYXRlQ29ubmVjdGlvbkZhY3RvcnkoKSB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC02MywxNiArNjMsMTYgQEAKICAgICAgICAgfQogICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuRGF0YVNvdXJjZSBjZiA9IG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuRGF0YVNvdXJjZSgKICAgICAgICAgICAgIChqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkpdGhpcywgbnVsbCk7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBjZjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgQ29ubmVjdGlvbiBGYWN0b3J5IGluc3RhbmNlLiBUaGUgPGNvZGU+Q29ubmVjdGlvbk1hbmFnZXI8L2NvZGU+IGltcGxlbWVudGF0aW9uCiAgICAgICogb2YgdGhlIGFwcGxpY2F0aW9uIHNlcnZlciBpcyB1c2VkIGhlcmUuCi0gICAgICogCi0gICAgICogQHBhcmFtCWN4TWFuYWdlcgk8Y29kZT5Db25uZWN0aW9uTWFuYWdlcjwvY29kZT4gcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKiBAcmV0dXJuCUdlbmVyaWMgSkRCQyBDb25uZWN0b3IgaW1wbGVtZW50YXRpb24gb2YgPGNvZGU+amF2YXguc3FsLkRhdGFTb3VyY2U8L2NvZGU+CisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgY3hNYW5hZ2VyICAgIDxjb2RlPkNvbm5lY3Rpb25NYW5hZ2VyPC9jb2RlPiBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqIEByZXR1cm4gICAgR2VuZXJpYyBKREJDIENvbm5lY3RvciBpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgT2JqZWN0IGNyZWF0ZUNvbm5lY3Rpb25GYWN0b3J5KGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25NYW5hZ2VyIGN4TWFuYWdlcikgewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtODAsNTUgKzgwLDU1IEBACiAgICAgICAgIH0KICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2UgY2YgPSBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2UoCiAgICAgICAgICAgICAoamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KXRoaXMsIGN4TWFuYWdlcik7Ci0gICAgICAgIHJldHVybiBjZjsgCisgICAgICAgIHJldHVybiBjZjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgbmV3IHBoeXNpY2FsIGNvbm5lY3Rpb24gdG8gdGhlIHVuZGVybHlpbmcgRUlTIHJlc291cmNlCiAgICAgICogbWFuYWdlci4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0Jc3ViamVjdAk8Y29kZT5TdWJqZWN0PC9jb2RlPiBpbnN0YW5jZSBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgotICAgICAqIEBwYXJhbQljeFJlcXVlc3RJbmZvCTxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gd2hpY2ggbWF5IGJlIGNyZWF0ZWQKLSAgICAgKiAgICAgICAJICAgICAgICAgICAgIAlhcyBhIHJlc3VsdCBvZiB0aGUgaW52b2NhdGlvbiA8Y29kZT5nZXRDb25uZWN0aW9uKHVzZXIsIHBhc3N3b3JkKTwvY29kZT4KLSAgICAgKiAgICAgICAJICAgICAgICAgICAgIAlvbiB0aGUgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0Ci0gICAgICogQHJldHVybgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGNyZWF0ZWQKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGluc3RhbnRpYXRpbmcgdGhlCi0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAk8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QgdXNlZCBmb3IgdGhlCi0gICAgICogICAgICAgCQkJCWNyZWF0aW9uIG9mIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0Ci0gICAgICogQHRocm93cwlTZWN1cml0eUV4Y2VwdGlvbglpZiB0aGVyZSBpbm8gPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCXNhdGlzZnlpbmcgdGhpcyByZXF1ZXN0IAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VBbGxvY2F0aW9uRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlIAotICAgICAqCQkJCQkJcGh5c2ljYWwgY29ubmVjdGlvbgorICAgICAqCisgICAgICogQHBhcmFtICAgIHN1YmplY3QgICAgPGNvZGU+U3ViamVjdDwvY29kZT4gaW5zdGFuY2UgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiBAcGFyYW0gICAgY3hSZXF1ZXN0SW5mbyAgICA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHdoaWNoIG1heSBiZSBjcmVhdGVkCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgYSByZXN1bHQgb2YgdGhlIGludm9jYXRpb24gPGNvZGU+Z2V0Q29ubmVjdGlvbih1c2VyLCBwYXNzd29yZCk8L2NvZGU+CisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gdGhlIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdAorICAgICAqIEByZXR1cm4gICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBjcmVhdGVkCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBpbnN0YW50aWF0aW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0IHVzZWQgZm9yIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGlvbiBvZiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdAorICAgICAqIEB0aHJvd3MgICAgU2VjdXJpdHlFeGNlcHRpb24gICAgaWYgdGhlcmUgaW5vIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0CisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXRpc2Z5aW5nIHRoaXMgcmVxdWVzdAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VBbGxvY2F0aW9uRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICBwaHlzaWNhbCBjb25uZWN0aW9uCiAgICAgICovCiAgICAgcHVibGljIGFic3RyYWN0IGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uIGNyZWF0ZU1hbmFnZWRDb25uZWN0aW9uKGphdmF4LnNlY3VyaXR5LmF1dGguU3ViamVjdCBzdWJqZWN0LAogICAgICAgICBDb25uZWN0aW9uUmVxdWVzdEluZm8gY3hSZXF1ZXN0SW5mbykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uOwotICAgIAorCiAgICAgLyoqCi0gICAgICogQ2hlY2sgaWYgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGlzIGVxdWFsIHRvIAorICAgICAqIENoZWNrIGlmIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpcyBlcXVhbCB0bwogICAgICAqIGFub3RoZXIgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPi4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0Jb3RoZXIJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QgZm9yIGNoZWNraW5nIGVxdWFsaXR5IHdpdGgKLSAgICAgKiBAcmV0dXJuCXRydWUJaWYgdGhlIHByb3BlcnR5IHNldHMgb2YgYm90aCB0aGUgCi0gICAgICoJCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdHMgYXJlIHRoZSBzYW1lCi0gICAgICoJCWZhbHNlCW90aGVyd2lzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIG90aGVyICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0IGZvciBjaGVja2luZyBlcXVhbGl0eSB3aXRoCisgICAgICogQHJldHVybiAgICB0cnVlICAgIGlmIHRoZSBwcm9wZXJ0eSBzZXRzIG9mIGJvdGggdGhlCisgICAgICogICAgICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdHMgYXJlIHRoZSBzYW1lCisgICAgICogICAgICAgIGZhbHNlICAgIG90aGVyd2lzZQogICAgICAqLwogICAgIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGVxdWFscyhPYmplY3Qgb3RoZXIpOwotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSBsb2cgd3JpdGVyIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHNlZQk8Y29kZT5zZXRMb2dXcml0ZXI8L2NvZGU+CisgICAgICogQHJldHVybiAgICA8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0TG9nV3JpdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBqYXZhLmlvLlByaW50V3JpdGVyIGdldExvZ1dyaXRlcigpIHsKICAgICAgICAgcmV0dXJuIGxvZ1dyaXRlcjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXQgdGhlIDxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHNlZQk8Y29kZT5zZXRSZXNvdXJjZUFkYXB0ZXI8L2NvZGU+CisgICAgICogQHJldHVybiAgICA8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldFJlc291cmNlQWRhcHRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuUmVzb3VyY2VBZGFwdGVyIGdldFJlc291cmNlQWRhcHRlcigpIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTEzNiwxMSArMTM2LDExIEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJhOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIGhhc2ggY29kZSBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LgogICAgICAqCi0gICAgICogQHJldHVybgloYXNoIGNvZGUgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgaGFzaCBjb2RlIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCl7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC0xNDgsNDEgKzE0OCw0MSBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBzcGVjLmhhc2hDb2RlKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogUmV0dXJucyBhIG1hdGNoZWQgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGZyb20gdGhlIGNhbmRpZGF0ZSAKKyAgICAgKiBSZXR1cm5zIGEgbWF0Y2hlZCA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gZnJvbSB0aGUgY2FuZGlkYXRlCiAgICAgICogc2V0IG9mIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3RzLgotICAgICAqIAotICAgICAqIEBwYXJhbQljb25uZWN0aW9uU2V0CTxjb2RlPlNldDwvY29kZT4gb2YgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgotICAgICAqCQkJCW9iamVjdHMgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKiBAcGFyYW0Jc3ViamVjdAkgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKgkJCWZvciByZXRyaWV2aW5nIGluZm9ybWF0aW9uIHJlcXVpcmVkIGZvciBtYXRjaGluZwotICAgICAqIEBwYXJhbQljeFJlcXVlc3RJbmZvCTxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKgkJCQlmb3IgcmV0cmlldmluZyBpbmZvcm1hdGlvbiByZXF1aXJlZCBmb3IgbWF0Y2hpbmcKLSAgICAgKiBAcmV0dXJuCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiB0aGF0IGlzIHRoZSBiZXN0IG1hdGNoIHNhdGlzZnlpbmcgdGhpcyByZXF1ZXN0Ci0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBhY2Nlc3NpbmcgdGhlIDxjb2RlPlN1YmplY3Q8L2NvZGU+Ci0gICAgICoJCQkJCXBhcmFtZXRlciBvciB0aGUgPGNvZGU+U2V0PC9jb2RlPiBvZiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KLSAgICAgKgkJCQkJb2JqZWN0cyBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqCisgICAgICogQHBhcmFtICAgIGNvbm5lY3Rpb25TZXQgICAgPGNvZGU+U2V0PC9jb2RlPiBvZiAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogICAgICAgICAgICAgICAgb2JqZWN0cyBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqIEBwYXJhbSAgICBzdWJqZWN0ICAgICBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqICAgICAgICAgICAgZm9yIHJldHJpZXZpbmcgaW5mb3JtYXRpb24gcmVxdWlyZWQgZm9yIG1hdGNoaW5nCisgICAgICogQHBhcmFtICAgIGN4UmVxdWVzdEluZm8gICAgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqICAgICAgICAgICAgICAgIGZvciByZXRyaWV2aW5nIGluZm9ybWF0aW9uIHJlcXVpcmVkIGZvciBtYXRjaGluZworICAgICAqIEByZXR1cm4gICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHRoYXQgaXMgdGhlIGJlc3QgbWF0Y2ggc2F0aXNmeWluZyB0aGlzIHJlcXVlc3QKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGFjY2Vzc2luZyB0aGUgPGNvZGU+U3ViamVjdDwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyIG9yIHRoZSA8Y29kZT5TZXQ8L2NvZGU+IG9mIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgICAgICBvYmplY3RzIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCiAgICAgICovCi0gICAgcHVibGljIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1hdGNoTWFuYWdlZENvbm5lY3Rpb25zKGphdmEudXRpbC5TZXQgY29ubmVjdGlvblNldCwgCisgICAgcHVibGljIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1hdGNoTWFuYWdlZENvbm5lY3Rpb25zKGphdmEudXRpbC5TZXQgY29ubmVjdGlvblNldCwKICAgICAgICAgamF2YXguc2VjdXJpdHkuYXV0aC5TdWJqZWN0IHN1YmplY3QsIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBjeFJlcXVlc3RJbmZvKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIG1hdGNoTWFuYWdlZENvbm5lY3Rpb25zIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYoY29ubmVjdGlvblNldCA9PSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBQYXNzd29yZENyZWRlbnRpYWwgcGMgPSBTZWN1cml0eVV0aWxzLmdldFBhc3N3b3JkQ3JlZGVudGlhbCh0aGlzLCBzdWJqZWN0LCBjeFJlcXVlc3RJbmZvKTsKLSAgICAgICAgCisKICAgICAgICAgamF2YS51dGlsLkl0ZXJhdG9yIGl0ZXIgPSBjb25uZWN0aW9uU2V0Lml0ZXJhdG9yKCk7CiAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYyA9IG51bGw7CiAgICAgICAgIHdoaWxlKGl0ZXIuaGFzTmV4dCgpKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIG1jID0gKGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbikgaXRlci5uZXh0KCk7CiAgICAgICAgICAgICB9IGNhdGNoKGphdmEudXRpbC5Ob1N1Y2hFbGVtZW50RXhjZXB0aW9uIG5zZWUpIHsKLQkgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2l0ZXIiKTsKKyAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2l0ZXIiKTsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24obnNlZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYocGMgPT0gbnVsbCAmJiB0aGlzLmVxdWFscyhtYy5nZXRNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkoKSkpIHsKQEAgLTE5MSw3ICsxOTEsNyBAQAogICAgICAgICAgICAgICAgICAgICBpc1ZhbGlkKG1jKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1jOwogICAgICAgICAgICAgICAgIH0gY2F0Y2goUmVzb3VyY2VFeGNlcHRpb24gcmUpIHsKLQkgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19yZSIsIHJlKTsKKyAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19yZSIsIHJlKTsKICAgICAgICAgICAgICAgICAgICAgbWMuY29ubmVjdGlvbkVycm9yT2NjdXJyZWQocmUsIG51bGwpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSBpZihTZWN1cml0eVV0aWxzLmlzUGFzc3dvcmRDcmVkZW50aWFsRXF1YWwocGMsIG1jLmdldFBhc3N3b3JkQ3JlZGVudGlhbCgpKSA9PSB0cnVlKSB7CkBAIC0yMDAsNDUgKzIwMCw0NSBAQAogICAgICAgICAgICAgICAgICAgICBpc1ZhbGlkKG1jKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1jOwogICAgICAgICAgICAgICAgIH0gY2F0Y2goUmVzb3VyY2VFeGNlcHRpb24gcmUpIHsKLQkgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLnJlIik7CisgICAgICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5yZSIpOwogICAgICAgICAgICAgICAgICAgICBtYy5jb25uZWN0aW9uRXJyb3JPY2N1cnJlZChyZSwgbnVsbCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KLSAgICAKKwogICAgIC8vR0pDSU5UCiAgICAgLyoqCiAgICAgICogQ2hlY2tzIGlmIGEgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGlzIHRvIGJlIHZhbGlkYXRlZCBvciBub3QKICAgICAgKiBhbmQgdmFsaWRhdGVzIGl0IG9yIHJldHVybnMuCi0gICAgICogCi0gICAgICogQHBhcmFtCW1jCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBvcgotICAgICAqICAgICAgICAJICAgICAgICAgIAkJaWYgdmFsaWRhdGlvbiBtZXRob2QgaXMgbm90IHByb3BlcgorICAgICAqCisgICAgICogQHBhcmFtICAgIG1jICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBvcgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdmFsaWRhdGlvbiBtZXRob2QgaXMgbm90IHByb3BlcgogICAgICAqLwogICAgIHZvaWQgaXNWYWxpZChjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWMpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAKICAgICAgICAgaWYobWMuaXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSkgewotCSAgICByZXR1cm47CisgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgIAotICAgICAgICBib29sZWFuIGNvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQgPSAKKworICAgICAgICBib29sZWFuIGNvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQgPQogICAgICAgICAgICAgKG5ldyBCb29sZWFuKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQpLnRvTG93ZXJDYXNlKCkpKS5ib29sZWFuVmFsdWUoKTsKICAgICAgICAgaWYoIGNvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQgPT0gZmFsc2UgfHwgbWMgPT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAKKworCiAgICAgICAgIFN0cmluZyB2YWxpZGF0aW9uTWV0aG9kID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTk1FVEhPRCkudG9Mb3dlckNhc2UoKTsKLSAgICAgICAgCisKICAgICAgICAgbWMuY2hlY2tJZlZhbGlkKCk7CiAgICAgICAgIC8qKgogICAgICAgICAgKiBUaGUgYWJvdmUgY2FsbCBjaGVja3MgaWYgdGhlIGFjdHVhbCBwaHlzaWNhbCBjb25uZWN0aW9uCiAgICAgICAgICAqIGlzIHVzYWJsZSBvciBub3QuCiAgICAgICAgICAqLwogICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiA9IG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKTsKLSAgICAgICAgCisKICAgICAgICAgaWYodmFsaWRhdGlvbk1ldGhvZC5lcXVhbHMoImF1dG8tY29tbWl0IikgPT0gdHJ1ZSkgewogICAgICAgICAgICAgaXNWYWxpZEJ5QXV0b0NvbW1pdChjb24pOwogICAgICAgICB9IGVsc2UgaWYodmFsaWRhdGlvbk1ldGhvZC5lcXVhbHNJZ25vcmVDYXNlKCJtZXRhLWRhdGEiKSA9PSB0cnVlKSB7CkBAIC0yNDksMjggKzI0OSwyOCBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgdmFsaWRhdGlvbiBtZXRob2QgaXMgbm90IHByb3BlciIpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2hlY2tzIGlmIGEgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gaXMgdmFsaWQgb3Igbm90CiAgICAgICogYnkgY2hlY2tpbmcgaXRzIGF1dG8gY29tbWl0IHByb3BlcnR5LgotICAgICAqIAotICAgICAqIEBwYXJhbQljb24JPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBjb24gICAgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKi8KICAgICBwcm90ZWN0ZWQgdm9pZCBpc1ZhbGlkQnlBdXRvQ29tbWl0KGphdmEuc3FsLkNvbm5lY3Rpb24gY29uKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihjb24gPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgIgogICAgICAgICAgICAgICAgICsgInRoZSBjb25uZWN0aW9uIGlzIG51bGwiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICB0cnkgewotICAgICAgICAgICAvLyBOb3RpY2UgdGhhdCB1c2luZyBzb21ldGhpbmcgbGlrZSAKKyAgICAgICAgICAgLy8gTm90aWNlIHRoYXQgdXNpbmcgc29tZXRoaW5nIGxpa2UKICAgICAgICAgICAgLy8gZGJDb24uc2V0QXV0b0NvbW1pdChkYkNvbi5nZXRBdXRvQ29tbWl0KCkpIHdpbGwgY2F1c2UgcHJvYmxlbXMgd2l0aAogICAgICAgICAgICAvLyBzb21lIGRyaXZlcnMgbGlrZSBzeWJhc2UKLSAgICAgICAgICAgLy8gV2UgZG8gbm90IHZhbGlkYXRlIGNvbm5lY3Rpb25zIHRoYXQgYXJlIGFscmVhZHkgZW5saXN0ZWQgCi0JICAgLy9pbiBhIHRyYW5zYWN0aW9uIAotCSAgIC8vIFdlIGN5Y2xlIGF1dG9jb21taXQgdG8gdHJ1ZSBhbmQgZmFsc2UgdG8gYnktcGFzcyBkcml2ZXJzIHRoYXQgCi0JICAgLy8gbWlnaHQgY2FjaGUgdGhlIGNhbGwgdG8gc2V0IGF1dG9jb21pdHQKKyAgICAgICAgICAgLy8gV2UgZG8gbm90IHZhbGlkYXRlIGNvbm5lY3Rpb25zIHRoYXQgYXJlIGFscmVhZHkgZW5saXN0ZWQKKyAgICAgICAvL2luIGEgdHJhbnNhY3Rpb24KKyAgICAgICAvLyBXZSBjeWNsZSBhdXRvY29tbWl0IHRvIHRydWUgYW5kIGZhbHNlIHRvIGJ5LXBhc3MgZHJpdmVycyB0aGF0CisgICAgICAgLy8gbWlnaHQgY2FjaGUgdGhlIGNhbGwgdG8gc2V0IGF1dG9jb21pdHQKICAgICAgICAgICAgLy8gQWxzbyBub3RpY2UgdGhhdCBzb21lIFhBIGRhdGEgc291cmNlcyB3aWxsIHRocm93IGFuZCBleGNlcHRpb24gaWYKICAgICAgICAgICAgLy8geW91IHRyeSB0byBjYWxsIHNldEF1dG9Db21taXQsIGZvciB0aGVtIHRoaXMgbWV0aG9kIGlzIG5vdCByZWNvbW1lbmRlZAogCkBAIC0yODEsOTAgKzI4MSw5MCBAQAogICAgICAgICAgICAgICAgIGNvbi5yb2xsYmFjaygpOyAvLyBwcmV2ZW50cyB1bmNvbXBsZXRlZCB0cmFuc2FjdGlvbiBleGNlcHRpb25zCiAgICAgICAgICAgICAgICAgY29uLnNldEF1dG9Db21taXQodHJ1ZSk7CiAgICAgICAgICAgIH0KLSAgICAgICAgCi0JICAgY29uLnNldEF1dG9Db21taXQoYWMpOworCisgICAgICAgY29uLnNldEF1dG9Db21taXQoYWMpOwogCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfYXV0b2NvbW1pdCIpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19hdXRvY29tbWl0Iik7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2hlY2tzIGlmIGEgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gaXMgdmFsaWQgb3Igbm90CiAgICAgICogYnkgY2hlY2tpbmcgaXRzIG1ldGEgZGF0YS4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JY29uCTxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgY29uICAgIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCiAgICAgICovCiAgICAgcHJvdGVjdGVkIHZvaWQgaXNWYWxpZEJ5TWV0YURhdGEoamF2YS5zcWwuQ29ubmVjdGlvbiBjb24pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGNvbiA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyAiCiAgICAgICAgICAgICAgICAgKyAidGhlIGNvbm5lY3Rpb24gaXMgbnVsbCIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBqYXZhLnNxbC5EYXRhYmFzZU1ldGFEYXRhIGRtZCA9IGNvbi5nZXRNZXRhRGF0YSgpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX21kIik7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX21kIik7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyAiCiAgICAgICAgICAgICAgICAgKyAiZ2V0dGluZyB0aGUgbWV0YSBkYXRhIGZhaWxlZDogIiArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENoZWNrcyBpZiBhIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IGlzIHZhbGlkIG9yIG5vdAogICAgICAqIGJ5IHF1ZXJ5aW5nIGEgdGFibGUuCi0gICAgICogCi0gICAgICogQHBhcmFtCWNvbgk8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKLSAgICAgKiBAcGFyYW0JdGFibGVOYW1lCXRhYmxlIHdoaWNoIHNob3VsZCBiZSBxdWVyaWVkCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBjb24gICAgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCisgICAgICogQHBhcmFtICAgIHRhYmxlTmFtZSAgICB0YWJsZSB3aGljaCBzaG91bGQgYmUgcXVlcmllZAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCiAgICAgICovCi0gICAgcHJvdGVjdGVkIHZvaWQgaXNWYWxpZEJ5VGFibGVRdWVyeShqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiwgCisgICAgcHJvdGVjdGVkIHZvaWQgaXNWYWxpZEJ5VGFibGVRdWVyeShqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiwKICAgICAgICAgU3RyaW5nIHRhYmxlTmFtZSkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYoY29uID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzICIKICAgICAgICAgICAgICAgICArICJ0aGUgY29ubmVjdGlvbiBpcyBudWxsIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGphdmEuc3FsLlN0YXRlbWVudCBzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOwogICAgICAgICAgICAgamF2YS5zcWwuUmVzdWx0U2V0IHJzID0gc3RtdC5leGVjdXRlUXVlcnkoIlNFTEVDVCAqIEZST00gIiArIHRhYmxlTmFtZSk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZXhlY3V0ZSIpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19leGVjdXRlIik7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyAiCiAgICAgICAgICAgICAgICAgKyAicXVlcnlpbmcgdGhlIHRhYmxlICIgKyB0YWJsZU5hbWUgKyAiIGZhaWxlZDogIiArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGlzb2xhdGlvbiBsZXZlbCBzcGVjaWZpZWQgaW4gdGhlIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4KICAgICAgKiBmb3IgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBwYXNzZWQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWMJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+Ci0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgaXNvbGF0aW9uIHByb3BlcnR5IGlzIGludmFsaWQKLSAgICAgKgkJCQkJb3IgaWYgdGhlIGlzb2xhdGlvbiBjYW5ub3QgYmUgc2V0IG92ZXIgdGhlIGNvbm5lY3Rpb24KKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgaXNvbGF0aW9uIHByb3BlcnR5IGlzIGludmFsaWQKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgb3IgaWYgdGhlIGlzb2xhdGlvbiBjYW5ub3QgYmUgc2V0IG92ZXIgdGhlIGNvbm5lY3Rpb24KICAgICAgKi8KICAgICBwcm90ZWN0ZWQgdm9pZCBzZXRJc29sYXRpb24oY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1jKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewotICAgIAkKLSAgICAJamF2YS5zcWwuQ29ubmVjdGlvbiBjb24gPSBtYy5nZXRBY3R1YWxDb25uZWN0aW9uKCk7Ci0gICAgCWlmKGNvbiA9PSBudWxsKSB7Ci0gICAgCSAgICByZXR1cm47Ci0gICAgCX0KLSAgICAJCi0gICAgCVN0cmluZyB0cmFuSXNvbGF0aW9uID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04pOwotICAgIAlpZih0cmFuSXNvbGF0aW9uICE9IG51bGwgJiYgdHJhbklzb2xhdGlvbi5lcXVhbHMoIiIpID09IGZhbHNlKSB7Ci0gICAgCSAgICBpbnQgdHJhbklzb2xhdGlvbkludCA9IGdldFRyYW5zYWN0aW9uSXNvbGF0aW9uSW50KHRyYW5Jc29sYXRpb24pOwotICAgIAkgICAgdHJ5IHsKLSAgICAJICAgICAgICBjb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24odHJhbklzb2xhdGlvbkludCk7Ci0gICAgCSAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y190eF9sZXZlbCIpOwotICAgIAkgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBjb3VsZCAiCi0gICAgCSAgICAgICAgICAgICsgIm5vdCBiZSBzZXQ6ICIgKyBzcWxlLmdldE1lc3NhZ2UoKSk7Ci0gICAgCSAgICB9Ci0gICAgCX0KKworICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiA9IG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKTsKKyAgICAgICAgaWYoY29uID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFN0cmluZyB0cmFuSXNvbGF0aW9uID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04pOworICAgICAgICBpZih0cmFuSXNvbGF0aW9uICE9IG51bGwgJiYgdHJhbklzb2xhdGlvbi5lcXVhbHMoIiIpID09IGZhbHNlKSB7CisgICAgICAgICAgICBpbnQgdHJhbklzb2xhdGlvbkludCA9IGdldFRyYW5zYWN0aW9uSXNvbGF0aW9uSW50KHRyYW5Jc29sYXRpb24pOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24odHJhbklzb2xhdGlvbkludCk7CisgICAgICAgICAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7CisgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y190eF9sZXZlbCIpOworICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBjb3VsZCAiCisgICAgICAgICAgICAgICAgICAgICsgIm5vdCBiZSBzZXQ6ICIgKyBzcWxlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXNldHMgdGhlIGlzb2xhdGlvbiBsZXZlbCBmb3IgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBwYXNzZWQuCiAgICAgICogSWYgdGhlIHRyYW5zYWN0aW9uIGxldmVsIGlzIHRvIGJlIGd1YXJhbnRlZWQgdG8gYmUgdGhlIHNhbWUgYXMgdGhlIG9uZQpAQCAtMzczLDM4MiArMzczLDM4MiBAQAogICAgICAqIGlzb2xhdGlvbiBsZXZlbCBmcm9tIHRoZSA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHBhc3NlZC4gRWxzZSwKICAgICAgKiBpdCBzZXRzIGl0IHRvIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gcGFzc2VkLgogICAgICAqCi0gICAgICogQHBhcmFtCW1jCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgotICAgICAqIEBwYXJhbQl0cmFuSXNvbAlpbnQKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBpc29sYXRpb24gcHJvcGVydHkgaXMgaW52YWxpZAotICAgICAqCQkJCQlvciBpZiB0aGUgaXNvbGF0aW9uIGNhbm5vdCBiZSBzZXQgb3ZlciB0aGUgY29ubmVjdGlvbgorICAgICAqIEBwYXJhbSAgICBtYyAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdHJhbklzb2wgICAgaW50CisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgaXNvbGF0aW9uIHByb3BlcnR5IGlzIGludmFsaWQKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgb3IgaWYgdGhlIGlzb2xhdGlvbiBjYW5ub3QgYmUgc2V0IG92ZXIgdGhlIGNvbm5lY3Rpb24KICAgICAgKi8KICAgICB2b2lkIHJlc2V0SXNvbGF0aW9uKGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYywgaW50IHRyYW5Jc29sKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewotICAgIAkKLSAgICAJamF2YS5zcWwuQ29ubmVjdGlvbiBjb24gPSBtYy5nZXRBY3R1YWxDb25uZWN0aW9uKCk7Ci0gICAgCWlmKGNvbiA9PSBudWxsKSB7Ci0gICAgCSAgICByZXR1cm47Ci0gICAgCX0KLSAgICAJCi0gICAgCVN0cmluZyB0cmFuSXNvbGF0aW9uID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04pOwotICAgIAlpZih0cmFuSXNvbGF0aW9uICE9IG51bGwgJiYgdHJhbklzb2xhdGlvbi5lcXVhbHMoIiIpID09IGZhbHNlKSB7Ci0gICAgCSAgICBTdHJpbmcgZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwgPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5HVUFSQU5URUVJU09MQVRJT05MRVZFTCk7Ci0gICAgCSAgICAKLSAgICAJICAgIGlmKGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsICE9IG51bGwgJiYgZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwuZXF1YWxzKCIiKSA9PSBmYWxzZSkgewotICAgIAkgICAgICAgIGJvb2xlYW4gZ3VhcmFudGVlID0gKG5ldyBCb29sZWFuKGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsLnRvTG93ZXJDYXNlKCkpKS5ib29sZWFuVmFsdWUoKTsKLSAgICAJICAgICAgICAKLSAgICAJICAgICAgICBpZihndWFyYW50ZWUpIHsKLSAgICAJICAgICAgICAgICAgaW50IHRyYW5Jc29sYXRpb25JbnQgPSBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbkludCh0cmFuSXNvbGF0aW9uKTsKLSAgICAJICAgICAgICAgICAgdHJ5IHsKLSAgICAJICAgICAgICAgICAgICAgIGlmKHRyYW5Jc29sYXRpb25JbnQgIT0gY29uLmdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCkpIHsKLSAgICAJICAgICAgICAgICAgICAgICAgICBjb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24odHJhbklzb2xhdGlvbkludCk7Ci0gICAgCSAgICAgICAgICAgICAgICB9Ci0gICAgCSAgICAgICAgICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfdHhfbGV2ZWwiKTsKLSAgICAJICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGlzb2xhdGlvbiBsZXZlbCBjb3VsZCBub3QgYmUgc2V0OiAiCi0gICAgCSAgICAgICAgICAgICAgICAgICAgKyBzcWxlLmdldE1lc3NhZ2UoKSk7Ci0gICAgCSAgICAgICAgICAgIH0KLSAgICAJICAgICAgICB9IGVsc2UgewotICAgIAkgICAgICAgICAgICB0cnkgewotICAgIAkgICAgICAgICAgICAgICAgaWYodHJhbklzb2wgIT0gY29uLmdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCkpIHsKLSAgICAJICAgICAgICAgICAgICAgICAgICBjb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24odHJhbklzb2wpOwotICAgIAkgICAgICAgICAgICAgICAgfQotICAgIAkgICAgICAgICAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgICAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3R4X2xldmVsIik7Ci0gICAgCSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBpc29sYXRpb24gbGV2ZWwgY291bGQgbm90IGJlIHNldDogIgotICAgIAkgICAgICAgICAgICAgICAgICAgICsgc3FsZS5nZXRNZXNzYWdlKCkpOwotICAgIAkgICAgICAgICAgICB9Ci0gICAgCSAgICAgICAgfQotICAgIAkgICAgfQotICAgIAl9CisKKyAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBjb24gPSBtYy5nZXRBY3R1YWxDb25uZWN0aW9uKCk7CisgICAgICAgIGlmKGNvbiA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBTdHJpbmcgdHJhbklzb2xhdGlvbiA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKKyAgICAgICAgaWYodHJhbklzb2xhdGlvbiAhPSBudWxsICYmIHRyYW5Jc29sYXRpb24uZXF1YWxzKCIiKSA9PSBmYWxzZSkgeworICAgICAgICAgICAgU3RyaW5nIGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwpOworCisgICAgICAgICAgICBpZihndWFyYW50ZWVJc29sYXRpb25MZXZlbCAhPSBudWxsICYmIGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsLmVxdWFscygiIikgPT0gZmFsc2UpIHsKKyAgICAgICAgICAgICAgICBib29sZWFuIGd1YXJhbnRlZSA9IChuZXcgQm9vbGVhbihndWFyYW50ZWVJc29sYXRpb25MZXZlbC50b0xvd2VyQ2FzZSgpKSkuYm9vbGVhblZhbHVlKCk7CisKKyAgICAgICAgICAgICAgICBpZihndWFyYW50ZWUpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHRyYW5Jc29sYXRpb25JbnQgPSBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbkludCh0cmFuSXNvbGF0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRyYW5Jc29sYXRpb25JbnQgIT0gY29uLmdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24odHJhbklzb2xhdGlvbkludCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKKyAgICAgICAgICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfdHhfbGV2ZWwiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGlzb2xhdGlvbiBsZXZlbCBjb3VsZCBub3QgYmUgc2V0OiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBzcWxlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYodHJhbklzb2wgIT0gY29uLmdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24odHJhbklzb2wpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7CisgICAgICAgICAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3R4X2xldmVsIik7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBpc29sYXRpb24gbGV2ZWwgY291bGQgbm90IGJlIHNldDogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgc3FsZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgaW50ZWdlciBlcXVpdmFsZW50IG9mIHRoZSBzdHJpbmcgc3BlY2lmeWluZwogICAgICAqIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdHJhbklzb2xhdGlvbglzdHJpbmcgc3BlY2lmeWluZyB0aGUgaXNvbGF0aW9uIGxldmVsCi0gICAgICogQHJldHVybgl0cmFuSXNvbGF0aW9uSW50CXRoZSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBjb25zdGFudAotICAgICAqCQkJCQlmb3IgdGhlIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBpc29sYXRpb24uCisgICAgICogQHBhcmFtICAgIHRyYW5Jc29sYXRpb24gICAgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIGlzb2xhdGlvbiBsZXZlbAorICAgICAqIEByZXR1cm4gICAgdHJhbklzb2xhdGlvbkludCAgICB0aGUgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gY29uc3RhbnQKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBzdHJpbmcgc3BlY2lmeWluZyB0aGUgaXNvbGF0aW9uLgogICAgICAqLwogICAgIHByaXZhdGUgaW50IGdldFRyYW5zYWN0aW9uSXNvbGF0aW9uSW50KFN0cmluZyB0cmFuSXNvbGF0aW9uKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewotICAgIAlpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInJlYWQtdW5jb21taXR0ZWQiKSkgewotICAgIAkgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fUkVBRF9VTkNPTU1JVFRFRDsKLSAgICAJfSBlbHNlIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgicmVhZC1jb21taXR0ZWQiKSkgewotICAgIAkgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fUkVBRF9DT01NSVRURUQ7Ci0gICAgCX0gZWxzZSBpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInJlcGVhdGFibGUtcmVhZCIpKSB7Ci0gICAgCSAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9SRVBFQVRBQkxFX1JFQUQ7Ci0gICAgCX0gZWxzZSBpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInNlcmlhbGl6YWJsZSIpKSB7Ci0gICAgCSAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9TRVJJQUxJWkFCTEU7Ci0gICAgCX0gZWxzZSB7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkludmFsaWQgdHJhbnNhY3Rpb24gaXNvbGF0aW9uOyB0aGUgdHJhbnNhY3Rpb24gIgotICAgIAkgICAgICAgICsgImlzb2xhdGlvbiBsZXZlbCBjYW4gYmUgZW1wdHkgb3IgYW55IG9mIHRoZSBmb2xsb3dpbmc6ICIKLSAgICAJICAgICAgICAgICAgKyAicmVhZC11bmNvbW1pdHRlZCwgcmVhZC1jb21taXR0ZWQsIHJlcGVhdGFibGUtcmVhZCwgc2VyaWFsaXphYmxlIik7Ci0gICAgCX0KKyAgICAgICAgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJyZWFkLXVuY29tbWl0dGVkIikpIHsKKyAgICAgICAgICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1JFQURfVU5DT01NSVRURUQ7CisgICAgICAgIH0gZWxzZSBpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInJlYWQtY29tbWl0dGVkIikpIHsKKyAgICAgICAgICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1JFQURfQ09NTUlUVEVEOworICAgICAgICB9IGVsc2UgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJyZXBlYXRhYmxlLXJlYWQiKSkgeworICAgICAgICAgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fUkVQRUFUQUJMRV9SRUFEOworICAgICAgICB9IGVsc2UgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJzZXJpYWxpemFibGUiKSkgeworICAgICAgICAgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fU0VSSUFMSVpBQkxFOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJJbnZhbGlkIHRyYW5zYWN0aW9uIGlzb2xhdGlvbjsgdGhlIHRyYW5zYWN0aW9uICIKKyAgICAgICAgICAgICAgICArICJpc29sYXRpb24gbGV2ZWwgY2FuIGJlIGVtcHR5IG9yIGFueSBvZiB0aGUgZm9sbG93aW5nOiAiCisgICAgICAgICAgICAgICAgICAgICsgInJlYWQtdW5jb21taXR0ZWQsIHJlYWQtY29tbWl0dGVkLCByZXBlYXRhYmxlLXJlYWQsIHNlcmlhbGl6YWJsZSIpOworICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0IHRoZSBsb2cgd3JpdGVyIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jb3V0CTxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgotICAgICAqIEBzZWUJPGNvZGU+Z2V0TG9nV3JpdGVyPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBvdXQgICAgPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogQHNlZSAgICA8Y29kZT5nZXRMb2dXcml0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TG9nV3JpdGVyKGphdmEuaW8uUHJpbnRXcml0ZXIgb3V0KSB7CiAgICAgICAgIGxvZ1dyaXRlciA9IG91dDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGFzc29jaWF0ZWQgPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBKYXZhQmVhbi4KICAgICAgKgotICAgICAqIEBwYXJhbQlyYQk8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzIAotICAgICAqCQkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEBzZWUJPGNvZGU+Z2V0UmVzb3VyY2VBZGFwdGVyPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICByYSAgICA8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzCisgICAgICogICAgICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlCisgICAgICogQHNlZSAgICA8Y29kZT5nZXRSZXNvdXJjZUFkYXB0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0UmVzb3VyY2VBZGFwdGVyKGpha2FydGEucmVzb3VyY2Uuc3BpLlJlc291cmNlQWRhcHRlciByYSkgewotICAgICAgICB0aGlzLnJhID0gcmE7ICAgCisgICAgICAgIHRoaXMucmEgPSByYTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB1c2VyIG5hbWUKICAgICAgKgotICAgICAqIEBwYXJhbQl1c2VyCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdXNlciAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0VXNlcihTdHJpbmcgdXNlcikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5VU0VSTkFNRSwgdXNlcik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgdXNlciBuYW1lCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXVzZXIKKyAgICAgKiBAcmV0dXJuICAgIHVzZXIKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFVzZXIoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5VU0VSTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdXNlciBuYW1lCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdXNlcgk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHVzZXIgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHVzZXIoU3RyaW5nIHVzZXIpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVVNFUk5BTUUsIHVzZXIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHVzZXIgbmFtZQogICAgICAqCi0gICAgICogQHJldHVybgl1c2VyCisgICAgICogQHJldHVybiAgICB1c2VyCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXR1c2VyKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVVNFUk5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHBhc3N3b3JkCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcGFzc3dkCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcGFzc3dkICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRQYXNzd29yZChTdHJpbmcgcGFzc3dkKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBBU1NXT1JELCBwYXNzd2QpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHBhc3N3b3JkCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXBhc3N3ZAorICAgICAqIEByZXR1cm4gICAgcGFzc3dkCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRQYXNzd29yZCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBBU1NXT1JEKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBwYXNzd29yZAogICAgICAqCi0gICAgICogQHBhcmFtCXBhc3N3ZAk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHBhc3N3ZCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0cGFzc3dvcmQoU3RyaW5nIHBhc3N3ZCkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5QQVNTV09SRCwgcGFzc3dkKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBwYXNzd29yZAogICAgICAqCi0gICAgICogQHJldHVybglwYXNzd2QKKyAgICAgKiBAcmV0dXJuICAgIHBhc3N3ZAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0cGFzc3dvcmQoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QQVNTV09SRCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgZGF0YSBzb3VyY2UKICAgICAgKgotICAgICAqIEBwYXJhbQljbGFzc05hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBjbGFzc05hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldENsYXNzTmFtZShTdHJpbmcgY2xhc3NOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNMQVNTTkFNRSwgY2xhc3NOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBkYXRhIHNvdXJjZQogICAgICAqCi0gICAgICogQHJldHVybgljbGFzc05hbWUKKyAgICAgKiBAcmV0dXJuICAgIGNsYXNzTmFtZQogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q2xhc3NOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ0xBU1NOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBkYXRhIHNvdXJjZQogICAgICAqCi0gICAgICogQHBhcmFtCWNsYXNzTmFtZQk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGNsYXNzTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Y2xhc3NOYW1lKFN0cmluZyBjbGFzc05hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ0xBU1NOQU1FLCBjbGFzc05hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGRhdGEgc291cmNlCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWNsYXNzTmFtZQorICAgICAqIEByZXR1cm4gICAgY2xhc3NOYW1lCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRjbGFzc05hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DTEFTU05BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgaWYgY29ubmVjdGlvbiB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkIG9yIG5vdAogICAgICAqCi0gICAgICogQHBhcmFtCWNvblZsZFJlcQk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGNvblZsZFJlcSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Q29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZChTdHJpbmcgY29uVmxkUmVxKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQsIGNvblZsZFJlcSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBpZiBjb25uZWN0aW9uIHZhbGlkYXRpb24gaXMgcmVxdWlyZWQgb3Igbm90CiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWNvbm5lY3Rpb24gdmFsaWRhdGlvbiByZXF1aXJlbWVudAorICAgICAqIEByZXR1cm4gICAgY29ubmVjdGlvbiB2YWxpZGF0aW9uIHJlcXVpcmVtZW50CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRDb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ09OTkVDVElPTlZBTElEQVRJT05SRVFVSVJFRCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyBpZiBjb25uZWN0aW9uIHZhbGlkYXRpb24gaXMgcmVxdWlyZWQgb3Igbm90CiAgICAgICoKLSAgICAgKiBAcGFyYW0JY29uVmxkUmVxCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgY29uVmxkUmVxICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRjb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkKFN0cmluZyBjb25WbGRSZXEpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ09OTkVDVElPTlZBTElEQVRJT05SRVFVSVJFRCwgY29uVmxkUmVxKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIGlmIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiBpcyByZXF1aXJlZCBvciBub3QKICAgICAgKgotICAgICAqIEByZXR1cm4JY29ubmVjdGlvbiB2YWxpZGF0aW9uIHJlcXVpcmVtZW50CisgICAgICogQHJldHVybiAgICBjb25uZWN0aW9uIHZhbGlkYXRpb24gcmVxdWlyZW1lbnQKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGNvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVEKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB2YWxpZGF0aW9uIG1ldGhvZCByZXF1aXJlZAogICAgICAqCi0gICAgICogQHBhcmFtCXZhbGlkYXRpb25NZXRob2QJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB2YWxpZGF0aW9uTWV0aG9kICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRWYWxpZGF0aW9uTWV0aG9kKFN0cmluZyB2YWxpZGF0aW9uTWV0aG9kKSB7CiAgICAgICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OTUVUSE9ELCB2YWxpZGF0aW9uTWV0aG9kKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSBjb25uZWN0aW9uIHZhbGlkYXRpb24gbWV0aG9kIHR5cGUKICAgICAgKgotICAgICAqIEByZXR1cm4JdmFsaWRhdGlvbiBtZXRob2QKKyAgICAgKiBAcmV0dXJuICAgIHZhbGlkYXRpb24gbWV0aG9kCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRWYWxpZGF0aW9uTWV0aG9kKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTk1FVEhPRCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdmFsaWRhdGlvbiBtZXRob2QgcmVxdWlyZWQKICAgICAgKgotICAgICAqIEBwYXJhbQl2YWxpZGF0aW9uTWV0aG9kCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdmFsaWRhdGlvbk1ldGhvZCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0dmFsaWRhdGlvbk1ldGhvZChTdHJpbmcgdmFsaWRhdGlvbk1ldGhvZCkgewogICAgICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTk1FVEhPRCwgdmFsaWRhdGlvbk1ldGhvZCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgY29ubmVjdGlvbiB2YWxpZGF0aW9uIG1ldGhvZCB0eXBlCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXZhbGlkYXRpb24gbWV0aG9kCisgICAgICogQHJldHVybiAgICB2YWxpZGF0aW9uIG1ldGhvZAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0dmFsaWRhdGlvbk1ldGhvZCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05NRVRIT0QpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHRhYmxlIGNoZWNrZWQgZm9yIGR1cmluZyB2YWxpZGF0aW9uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdGFibGUJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB0YWJsZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0VmFsaWRhdGlvblRhYmxlTmFtZShTdHJpbmcgdGFibGUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTlRBQkxFTkFNRSwgdGFibGUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIHRhYmxlIGNoZWNrZWQgZm9yIGR1cmluZyB2YWxpZGF0aW9uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRhYmxlCisgICAgICogQHJldHVybiAgICB0YWJsZQogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VmFsaWRhdGlvblRhYmxlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05UQUJMRU5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHRhYmxlIGNoZWNrZWQgZm9yIGR1cmluZyB2YWxpZGF0aW9uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdGFibGUJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB0YWJsZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0dmFsaWRhdGlvblRhYmxlTmFtZShTdHJpbmcgdGFibGUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTlRBQkxFTkFNRSwgdGFibGUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIHRhYmxlIGNoZWNrZWQgZm9yIGR1cmluZyB2YWxpZGF0aW9uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRhYmxlCisgICAgICogQHJldHVybiAgICB0YWJsZQogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0dmFsaWRhdGlvblRhYmxlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05UQUJMRU5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqCi0gICAgICogQHBhcmFtCXRybklzb2xhdGlvbgk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHRybklzb2xhdGlvbiAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oU3RyaW5nIHRybklzb2xhdGlvbikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTiwgdHJuSXNvbGF0aW9uKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKgotICAgICAqIEByZXR1cm4JdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCisgICAgICogQHJldHVybiAgICB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqCi0gICAgICogQHBhcmFtCXRybklzb2xhdGlvbgk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHRybklzb2xhdGlvbiAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0dHJhbnNhY3Rpb25Jc29sYXRpb24oU3RyaW5nIHRybklzb2xhdGlvbikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTiwgdHJuSXNvbGF0aW9uKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKgotICAgICAqIEByZXR1cm4JdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCisgICAgICogQHJldHVybiAgICB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHRyYW5zYWN0aW9uSXNvbGF0aW9uKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgaWYgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbCBpcyB0byBiZSBndWFyYW50ZWVkCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZ3VhcmFudGVlSXNvbGF0aW9uCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZ3VhcmFudGVlSXNvbGF0aW9uICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRHdWFyYW50ZWVJc29sYXRpb25MZXZlbChTdHJpbmcgZ3VhcmFudGVlSXNvbGF0aW9uKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkdVQVJBTlRFRUlTT0xBVElPTkxFVkVMLCBndWFyYW50ZWVJc29sYXRpb24pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqCi0gICAgICogQHJldHVybglpc29sYXRpb24gbGV2ZWwgZ3VhcmFudGVlCisgICAgICogQHJldHVybiAgICBpc29sYXRpb24gbGV2ZWwgZ3VhcmFudGVlCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRHdWFyYW50ZWVJc29sYXRpb25MZXZlbCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkdVQVJBTlRFRUlTT0xBVElPTkxFVkVMKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIGlmIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwgaXMgdG8gYmUgZ3VhcmFudGVlZAogICAgICAqCi0gICAgICogQHBhcmFtCWd1YXJhbnRlZUlzb2xhdGlvbgk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGd1YXJhbnRlZUlzb2xhdGlvbiAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Z3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwoU3RyaW5nIGd1YXJhbnRlZUlzb2xhdGlvbikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5HVUFSQU5URUVJU09MQVRJT05MRVZFTCwgZ3VhcmFudGVlSXNvbGF0aW9uKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKgotICAgICAqIEByZXR1cm4JaXNvbGF0aW9uIGxldmVsIGd1YXJhbnRlZQorICAgICAqIEByZXR1cm4gICAgaXNvbGF0aW9uIGxldmVsIGd1YXJhbnRlZQogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Z3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5HVUFSQU5URUVJU09MQVRJT05MRVZFTCk7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9SZXNvdXJjZUFkYXB0ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L1Jlc291cmNlQWRhcHRlci5qYXZhCmluZGV4IDU1NWJlNzcuLmVhNTQwNzYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L1Jlc291cmNlQWRhcHRlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L1Jlc291cmNlQWRhcHRlci5qYXZhCkBAIC0yNiw4ICsyNiw4IEBACiAvKioKICAqIDxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gaW1wbGVtZW50YXRpb24gZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wOC8wNQotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDgvMDUKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIHB1YmxpYyBjbGFzcyBSZXNvdXJjZUFkYXB0ZXIgaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5SZXNvdXJjZUFkYXB0ZXIgewogCkBAIC0zNyw1MiArMzcsNTIgQEAKICAgICAgKiBFbXB0eSBtZXRob2QgaW1wbGVtZW50YXRpb24gZm9yIGVuZHBvaW50QWN0aXZhdGlvbgogICAgICAqIHdoaWNoIGp1c3QgdGhyb3dzIDxjb2RlPk5vdFN1cHBvcnRlZEV4Y2VwdGlvbjwvY29kZT4KICAgICAgKgotICAgICAqIEBwYXJhbQltZWYJPGNvZGU+TWVzc2FnZUVuZHBvaW50RmFjdG9yeTwvY29kZT4KLSAgICAgKiBAcGFyYW0JYXMJPGNvZGU+QWN0aXZhdGlvblNwZWM8L2NvZGU+Ci0gICAgICogQHRocm93cwk8Y29kZT5Ob3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+CisgICAgICogQHBhcmFtICAgIG1lZiAgICA8Y29kZT5NZXNzYWdlRW5kcG9pbnRGYWN0b3J5PC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBhcyAgICA8Y29kZT5BY3RpdmF0aW9uU3BlYzwvY29kZT4KKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPk5vdFN1cHBvcnRlZEV4Y2VwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlbmRwb2ludEFjdGl2YXRpb24oTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBtZWYsIEFjdGl2YXRpb25TcGVjIGFzKSB0aHJvd3MgTm90U3VwcG9ydGVkRXhjZXB0aW9uIHsKICAgICAgICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiVGhpcyBtZXRob2QgaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBKREJDIGNvbm5lY3RvciIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEVtcHR5IG1ldGhvZCBpbXBsZW1lbnRhdGlvbiBmb3IgZW5kcG9pbnREZWFjdGl2YXRpb24KICAgICAgKgotICAgICAqIEBwYXJhbQltZWYJPGNvZGU+TWVzc2FnZUVuZHBvaW50RmFjdG9yeTwvY29kZT4KLSAgICAgKiBAcGFyYW0JYXMJPGNvZGU+QWN0aXZhdGlvblNwZWM8L2NvZGU+CisgICAgICogQHBhcmFtICAgIG1lZiAgICA8Y29kZT5NZXNzYWdlRW5kcG9pbnRGYWN0b3J5PC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBhcyAgICA8Y29kZT5BY3RpdmF0aW9uU3BlYzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlbmRwb2ludERlYWN0aXZhdGlvbihNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IG1lZiwgQWN0aXZhdGlvblNwZWMgYXMpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBFbXB0eSBtZXRob2QgaW1wbGVtZW50YXRpb24gZm9yIGdldFhBUmVzb3VyY2VzCiAgICAgICogd2hpY2gganVzdCB0aHJvd3MgPGNvZGU+Tm90U3VwcG9ydGVkRXhjZXB0aW9uPC9jb2RlPgogICAgICAqCi0gICAgICogQHBhcmFtCXNwZWNzCTxjb2RlPkFjdGl2YXRpb25TcGVjPC9jb2RlPiBhcnJheQotICAgICAqIEB0aHJvd3MJPGNvZGU+Tm90U3VwcG9ydGVkRXhjZXB0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBzcGVjcyAgICA8Y29kZT5BY3RpdmF0aW9uU3BlYzwvY29kZT4gYXJyYXkKKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPk5vdFN1cHBvcnRlZEV4Y2VwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgWEFSZXNvdXJjZVtdIGdldFhBUmVzb3VyY2VzKEFjdGl2YXRpb25TcGVjW10gc3BlY3MpIHRocm93cyBOb3RTdXBwb3J0ZWRFeGNlcHRpb24gewogICAgICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJUaGlzIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIEpEQkMgY29ubmVjdG9yIik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogRW1wdHkgaW1wbGVtZW50YXRpb24gb2Ygc3RhcnQgbWV0aG9kCiAgICAgICoKLSAgICAgKiBAcGFyYW0JY3R4CTxjb2RlPkJvb3RzdHJhcENvbnRleHQ8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGN0eCAgICA8Y29kZT5Cb290c3RyYXBDb250ZXh0PC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHN0YXJ0KEJvb3RzdHJhcENvbnRleHQgY3R4KSB0aHJvd3MgUmVzb3VyY2VBZGFwdGVySW50ZXJuYWxFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc291cmNlIEFkYXB0ZXIgaXMgc3RhcnRpbmcgd2l0aCBjb25maWd1cmF0aW9uIDoiICsgcmFQcm9wKTsKICAgICAgICAgaWYgKHJhUHJvcCA9PSBudWxsIHx8ICFyYVByb3AuZXF1YWxzKCJWQUxJRCIpKSB7Ci0JICAgIHRocm93IG5ldyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbigiUmVzb3VyY2UgYWRhcHRlciBjYW5ub3Qgc3RhcnQuIEl0IGlzIGNvbmZpZ3VyZWQgYXMgOiAiICsgcmFQcm9wKTsKLQl9IAorICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VBZGFwdGVySW50ZXJuYWxFeGNlcHRpb24oIlJlc291cmNlIGFkYXB0ZXIgY2Fubm90IHN0YXJ0LiBJdCBpcyBjb25maWd1cmVkIGFzIDogIiArIHJhUHJvcCk7CiAgICAgfQotICAgIAorICAgIH0KKwogICAgIC8qKgogICAgICAqIEVtcHR5IGltcGxlbWVudGF0aW9uIG9mIHN0b3AgbWV0aG9kCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc3RvcCgpIHsKLSAgICAKKwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldFJBUHJvcGVydHkoU3RyaW5nIHMpIHsKQEAgLTkyLDUgKzkyLDUgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldFJBUHJvcGVydHkoKSB7CiAgICAgICAgIHJldHVybiByYVByb3A7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9idWlsZC54bWwKaW5kZXggNjU5MGE4NC4uNmM1MDc2YiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L2J1aWxkLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8cHJvamVjdCBuYW1lPSJqZGJjX2Nvbm5lY3RvciIgYmFzZWRpcj0iJHtnamMuaG9tZX0iIGRlZmF1bHQ9ImJ1aWxkIj4KICAgPHByb3BlcnR5IG5hbWU9InBrZy5kaXIiIHZhbHVlPSJjb20vc3VuL2dqYy9zcGkiLz4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJjbGVhbiI+CiAgICAgPGFudCBhbnRmaWxlPSJidWlsZC54bWwiIGRpcj0iJHtnamMuaG9tZX0vYmluIiB0YXJnZXQ9ImNsZWFuIi8+CiAgIDwvdGFyZ2V0PgpAQCAtMjksNTUgKzI5LDU1IEBACiAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0icGFja2FnZTE0Ij4KLSAgICAJCi0gICAgCTxta2RpciBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIvPgotICAgIAkKLQk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9qZGJjLmphciIgYmFzZWRpcj0iJHtjbGFzcy5kaXJ9IgorCisgICAgICAgIDxta2RpciBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIvPgorCisgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvamRiYy5qYXIiIGJhc2VkaXI9IiR7Y2xhc3MuZGlyfSIKICAgICAgICAgaW5jbHVkZXM9IiR7cGtnLmRpcn0vKiovKiwgY29tL3N1bi9namMvdXRpbC8qKi8qLCBjb20vc3VuL2dqYy9jb21tb24vKiovKiIgZXhjbHVkZXM9ImNvbS9zdW4vZ2pjL2NjaS8qKi8qLGNvbS9zdW4vZ2pjL3NwaS8xLjQvKiovKiIvPgotICAgICAgICAKKwogICAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2NwLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KLSAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEtY3AueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4JCisgICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLWNwLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CiAgICAgICAgIDwvY29weT4KLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2NwLnJhciIgdXBkYXRlPSJ5ZXMiPgotICAgCQk8bWV0YWluZiBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSI+Ci0gICAJCQk8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KLSAgIAkJPC9tZXRhaW5mPgotICAgCTwvamFyPgotICAgCQotICAgCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19feGEucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgotICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS14YS54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgkKKyAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2NwLnJhciIgdXBkYXRlPSJ5ZXMiPgorICAgICAgICAgICA8bWV0YWluZiBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSI+CisgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KKyAgICAgICAgICAgPC9tZXRhaW5mPgorICAgICAgIDwvamFyPgorCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX194YS5yYXIiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIgaW5jbHVkZXM9ImpkYmMuamFyIi8+CisgICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLXhhLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CiAgICAgICAgIDwvY29weT4KLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX3hhLnJhciIgdXBkYXRlPSJ5ZXMiPgotICAgCQk8bWV0YWluZiBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSI+Ci0gICAJCQk8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KLSAgIAkJPC9tZXRhaW5mPgotICAgCTwvamFyPgotICAgCQotICAgCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZG0ucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgotICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS1kbS54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgkKKyAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX3hhLnJhciIgdXBkYXRlPSJ5ZXMiPgorICAgICAgICAgICA8bWV0YWluZiBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSI+CisgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KKyAgICAgICAgICAgPC9tZXRhaW5mPgorICAgICAgIDwvamFyPgorCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kbS5yYXIiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIgaW5jbHVkZXM9ImpkYmMuamFyIi8+CisgICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLWRtLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CiAgICAgICAgIDwvY29weT4KLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RtLnJhciIgdXBkYXRlPSJ5ZXMiPgotICAgCQk8bWV0YWluZiBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSI+Ci0gICAJCQk8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KLSAgIAkJPC9tZXRhaW5mPgotICAgCTwvamFyPgotICAgCQotICAgCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZHMucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgotICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS14YS54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgkKKyAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RtLnJhciIgdXBkYXRlPSJ5ZXMiPgorICAgICAgICAgICA8bWV0YWluZiBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSI+CisgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KKyAgICAgICAgICAgPC9tZXRhaW5mPgorICAgICAgIDwvamFyPgorCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kcy5yYXIiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIgaW5jbHVkZXM9ImpkYmMuamFyIi8+CisgICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLXhhLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CiAgICAgICAgIDwvY29weT4KLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RzLnJhciIgdXBkYXRlPSJ5ZXMiPgotICAgCQk8bWV0YWluZiBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSI+Ci0gICAJCQk8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KLSAgIAkJPC9tZXRhaW5mPgotICAgCTwvamFyPgotICAgCQotICAgCTxkZWxldGUgZGlyPSIke2dqYy5ob21lfS9kaXN0L2NvbSIvPgotICAgCTxkZWxldGUgZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L2pkYmMuamFyIi8+Ci0gICAJPGRlbGV0ZSBmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIi8+Ci0gICAJCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kcy5yYXIiIHVwZGF0ZT0ieWVzIj4KKyAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgorICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+CisgICAgICAgICAgIDwvbWV0YWluZj4KKyAgICAgICA8L2phcj4KKworICAgICAgIDxkZWxldGUgZGlyPSIke2dqYy5ob21lfS9kaXN0L2NvbSIvPgorICAgICAgIDxkZWxldGUgZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L2pkYmMuamFyIi8+CisgICAgICAgPGRlbGV0ZSBmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIi8+CisKICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJidWlsZDE0IiBkZXBlbmRzPSJjb21waWxlMTQsIHBhY2thZ2UxNCIvPgogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQxMyIvPgotCTx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImJ1aWxkMTQsIGJ1aWxkMTMiLz4KKyAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJidWlsZDE0LCBidWlsZDEzIi8+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9yYS14YS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9yYS14YS54bWwKaW5kZXggYTFhNzBmNi4uYWU5ZjhmZSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvcmEteGEueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L3JhLXhhLnhtbApAQCAtMjIsNjkgKzIyLDY5IEBACiAgICAgICAgICAgIHZlcnNpb249IjEuNSI+CiAKICAgICA8IS0tIFRoZXJlIGNhbiBiZSBhbnkgbnVtYmVyIG9mICJkZXNjcmlwdGlvbiIgZWxlbWVudHMgaW5jbHVkaW5nIDAgLS0+Ci0gICAgPCEtLSBUaGlzIGZpZWxkIGNhbiBiZSBvcHRpb25hbGx5IHVzZWQgYnkgdGhlIGRyaXZlciB2ZW5kb3IgdG8gcHJvdmlkZSBhIAorICAgIDwhLS0gVGhpcyBmaWVsZCBjYW4gYmUgb3B0aW9uYWxseSB1c2VkIGJ5IHRoZSBkcml2ZXIgdmVuZG9yIHRvIHByb3ZpZGUgYQogICAgICAgICAgZGVzY3JpcHRpb24gZm9yIHRoZSByZXNvdXJjZSBhZGFwdGVyLgogICAgIC0tPgogICAgIDxkZXNjcmlwdGlvbj5SZXNvdXJjZSBhZGFwdGVyIHdyYXBwaW5nIERhdGFzb3VyY2UgaW1wbGVtZW50YXRpb24gb2YgZHJpdmVyPC9kZXNjcmlwdGlvbj4KLSAgICAKKwogICAgIDwhLS0gVGhlcmUgY2FuIGJlIGFueSBudW1iZXIgb2YgImRpc3BsYXktbmFtZSIgZWxlbWVudHMgaW5jbHVkaW5nIDAgLS0+Ci0gICAgPCEtLSBUaGUgZmllbGQgY2FuIGJlIG9wdGlvbmFsbHkgdXNlZCBieSB0aGUgZHJpdmVyIHZlbmRvciB0byBwcm92aWRlIGEgbmFtZSB0aGF0IAorICAgIDwhLS0gVGhlIGZpZWxkIGNhbiBiZSBvcHRpb25hbGx5IHVzZWQgYnkgdGhlIGRyaXZlciB2ZW5kb3IgdG8gcHJvdmlkZSBhIG5hbWUgdGhhdAogICAgICAgICAgaXMgaW50ZW5kZWQgdG8gYmUgZGlzcGxheWVkIGJ5IHRvb2xzLgogICAgIC0tPgogICAgIDxkaXNwbGF5LW5hbWU+RGF0YVNvdXJjZSBSZXNvdXJjZSBBZGFwdGVyPC9kaXNwbGF5LW5hbWU+Ci0gICAgCisKICAgICA8IS0tIFRoZXJlIGNhbiBiZSBhbnkgbnVtYmVyIG9mICJpY29uIiBlbGVtZW50cyBpbmNsdWRpbmcgMCAtLT4KICAgICA8IS0tIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZS4KICAgICAgICAgPGljb24+Ci0gICAgICAgICAgICBUaGlzICJzbWFsbC1pY29uIiBlbGVtZW50IGNhbiBvY2N1ciBhdG1vc3Qgb25jZS4gVGhpcyBzaG91bGQgc3BlY2lmeSB0aGUgCi0gICAgICAgICAgICBhYnNvbHV0ZSBvciB0aGUgcmVsYXRpdmUgcGF0aCBuYW1lIG9mIGEgZmlsZSBjb250YWluaW5nIGEgc21hbGwgKDE2IHggMTYpIAorICAgICAgICAgICAgVGhpcyAic21hbGwtaWNvbiIgZWxlbWVudCBjYW4gb2NjdXIgYXRtb3N0IG9uY2UuIFRoaXMgc2hvdWxkIHNwZWNpZnkgdGhlCisgICAgICAgICAgICBhYnNvbHV0ZSBvciB0aGUgcmVsYXRpdmUgcGF0aCBuYW1lIG9mIGEgZmlsZSBjb250YWluaW5nIGEgc21hbGwgKDE2IHggMTYpCiAgICAgICAgICAgICBpY29uIC0gSlBFRyBvciBHSUYgaW1hZ2UuIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZS4KICAgICAgICAgICAgIDxzbWFsbC1pY29uPnNtYWxsaWNvbi5qcGc8L3NtYWxsLWljb24+Ci0gICAgICAgIAotICAgICAgICAgICAgVGhpcyAibGFyZ2UtaWNvbiIgZWxlbWVudCBjYW4gb2NjdXIgYXRtb3N0IG9uY2UuIFRoaXMgc2hvdWxkIHNwZWNpZnkgdGhlIAotICAgICAgICAgICAgYWJzb2x1dGUgb3IgdGhlIHJlbGF0aXZlIHBhdGggbmFtZSBvZiBhIGZpbGUgY29udGFpbmluZyBhIHNtYWxsICgzMiB4IDMyKSAKKworICAgICAgICAgICAgVGhpcyAibGFyZ2UtaWNvbiIgZWxlbWVudCBjYW4gb2NjdXIgYXRtb3N0IG9uY2UuIFRoaXMgc2hvdWxkIHNwZWNpZnkgdGhlCisgICAgICAgICAgICBhYnNvbHV0ZSBvciB0aGUgcmVsYXRpdmUgcGF0aCBuYW1lIG9mIGEgZmlsZSBjb250YWluaW5nIGEgc21hbGwgKDMyIHggMzIpCiAgICAgICAgICAgICBpY29uIC0gSlBFRyBvciBHSUYgaW1hZ2UuIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZS4KLSAgICAgICAgICAgIDxsYXJnZS1pY29uPmxhcmdlaWNvbi5qcGc8L2xhcmdlLWljb24+ICAgCisgICAgICAgICAgICA8bGFyZ2UtaWNvbj5sYXJnZWljb24uanBnPC9sYXJnZS1pY29uPgogICAgICAgICA8L2ljb24+CiAgICAgLS0+CiAgICAgPGljb24+CiAgICAgICAgIDxzbWFsbC1pY29uPjwvc21hbGwtaWNvbj4KLSAgICAgICAgPGxhcmdlLWljb24+PC9sYXJnZS1pY29uPiAgIAorICAgICAgICA8bGFyZ2UtaWNvbj48L2xhcmdlLWljb24+CiAgICAgPC9pY29uPgotICAgIAorCiAgICAgPCEtLSBUaGUgInZlbmRvci1uYW1lIiBlbGVtZW50IHNob3VsZCBvY2N1ciBleGFjdGx5IG9uY2UuIC0tPgogICAgIDwhLS0gVGhpcyBzaG91bGQgc3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUgZHJpdmVyIHZlbmRvci4gVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlLgogICAgICAgICA8dmVuZG9yLW5hbWU+WFlaIElOQy48L3ZlbmRvci1uYW1lPgogICAgIC0tPgogICAgIDx2ZW5kb3ItbmFtZT5TdW4gTWljcm9zeXN0ZW1zPC92ZW5kb3ItbmFtZT4KLSAgICAKKwogICAgIDwhLS0gVGhlICJlaXMtdHlwZSIgZWxlbWVudCBzaG91bGQgb2NjdXIgZXhhY3RseSBvbmNlLiAtLT4KLSAgICA8IS0tIFRoaXMgc2hvdWxkIHNwZWNpZnkgdGhlIGRhdGFiYXNlLCBmb3IgZXhhbXBsZSB0aGUgcHJvZHVjdCBuYW1lIG9mIAorICAgIDwhLS0gVGhpcyBzaG91bGQgc3BlY2lmeSB0aGUgZGF0YWJhc2UsIGZvciBleGFtcGxlIHRoZSBwcm9kdWN0IG5hbWUgb2YKICAgICAgICAgIHRoZSBkYXRhYmFzZSBpbmRlcGVuZGVudCBvZiBhbnkgdmVyc2lvbiBpbmZvcm1hdGlvbi4gVGhlIGZvbGxvd2luZwogICAgICAgICAgaXMgYW4gZXhhbXBsZS4KICAgICAgICAgPGVpcy10eXBlPlhZWjwvZWlzLXR5cGU+CiAgICAgLS0+CiAgICAgPGVpcy10eXBlPkRhdGFiYXNlPC9laXMtdHlwZT4KLSAgICAKKwogICAgIDwhLS0gVGhlICJyZXNvdXJjZWFkYXB0ZXItdmVyc2lvbiIgZWxlbWVudCBzaG91bGQgb2NjdXIgZXhhY3RseSBvbmNlLiAtLT4KLSAgICA8IS0tIFRoaXMgc3BlY2lmaWVzIGEgc3RyaW5nIGJhc2VkIHZlcnNpb24gb2YgdGhlIHJlc291cmNlIGFkYXB0ZXIgZnJvbSAKKyAgICA8IS0tIFRoaXMgc3BlY2lmaWVzIGEgc3RyaW5nIGJhc2VkIHZlcnNpb24gb2YgdGhlIHJlc291cmNlIGFkYXB0ZXIgZnJvbQogICAgICAgICAgdGhlIGRyaXZlciB2ZW5kb3IuIFRoZSBkZWZhdWx0IGlzIGJlaW5nIHNldCBhcyAxLjAuIFRoZSBkcml2ZXIKICAgICAgICAgIHZlbmRvciBjYW4gY2hhbmdlIGl0IGFzIHJlcXVpcmVkLgogICAgIC0tPgogICAgIDxyZXNvdXJjZWFkYXB0ZXItdmVyc2lvbj4xLjA8L3Jlc291cmNlYWRhcHRlci12ZXJzaW9uPgotICAgIAorCiAgICAgPCEtLSBUaGlzICJsaWNlbnNlIiBlbGVtZW50IGNhbiBvY2N1ciBhdG1vc3Qgb25jZSAtLT4KICAgICA8IS0tIFRoaXMgc3BlY2lmaWVzIGxpY2Vuc2luZyByZXF1aXJlbWVudHMgZm9yIHRoZSByZXNvdXJjZSBhZGFwdGVyIG1vZHVsZS4KICAgICAgICAgIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZS4KICAgICAgICAgPGxpY2Vuc2U+CiAgICAgICAgICAgICBUaGVyZSBjYW4gYmUgYW55IG51bWJlciBvZiAiZGVzY3JpcHRpb24iIGVsZW1lbnRzIGluY2x1ZGluZyAwLgogICAgICAgICAgICAgPGRlc2NyaXB0aW9uPgotICAgICAgICAgICAgICAgIFRoaXMgZmllbGQgY2FuIGJlIG9wdGlvbmFsbHkgdXNlZCBieSB0aGUgZHJpdmVyIHZlbmRvciB0byAKLSAgICAgICAgICAgICAgICBwcm92aWRlIGEgZGVzY3JpcHRpb24gZm9yIHRoZSBsaWNlbnNpbmcgcmVxdWlyZW1lbnRzIG9mIHRoZSAKLSAgICAgICAgICAgICAgICByZXNvdXJjZSBhZGFwdGVyIGxpa2UgZHVyYXRpb24gb2YgbGljZW5zZSwgbnVtYmVyb2YgY29ubmVjdGlvbiAKKyAgICAgICAgICAgICAgICBUaGlzIGZpZWxkIGNhbiBiZSBvcHRpb25hbGx5IHVzZWQgYnkgdGhlIGRyaXZlciB2ZW5kb3IgdG8KKyAgICAgICAgICAgICAgICBwcm92aWRlIGEgZGVzY3JpcHRpb24gZm9yIHRoZSBsaWNlbnNpbmcgcmVxdWlyZW1lbnRzIG9mIHRoZQorICAgICAgICAgICAgICAgIHJlc291cmNlIGFkYXB0ZXIgbGlrZSBkdXJhdGlvbiBvZiBsaWNlbnNlLCBudW1iZXJvZiBjb25uZWN0aW9uCiAgICAgICAgICAgICAgICAgcmVzdHJpY3Rpb25zLgogICAgICAgICAgICAgPC9kZXNjcmlwdGlvbj4KLSAgICAgICAgCisKICAgICAgICAgICAgIFRoaXMgc3BlY2lmaWVzIHdoZXRoZXIgYSBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGRlcGxveSBhbmQgdXNlIHRoZSByZXNvdXJjZSBhZGFwdGVyLgogICAgICAgICAgICAgRGVmYXVsdCBpcyBmYWxzZS4KICAgICAgICAgICAgIDxsaWNlbnNlLXJlcXVpcmVkPmZhbHNlPC9saWNlbnNlLXJlcXVpcmVkPgpAQCAtOTMsMjQgKzkzLDI0IEBACiAgICAgPGxpY2Vuc2U+CiAgICAgICAgIDxsaWNlbnNlLXJlcXVpcmVkPmZhbHNlPC9saWNlbnNlLXJlcXVpcmVkPgogICAgIDwvbGljZW5zZT4KLSAgICAKKwogICAgIDxyZXNvdXJjZWFkYXB0ZXI+Ci0gICAgICAgIAotICAgICAgICA8IS0tIAotICAgICAgICAgICAgVGhlICJjb25maWctcHJvcGVydHkiIGVsZW1lbnRzIGNhbiBoYXZlIHplcm8gb3IgbW9yZSAiZGVzY3JpcHRpb24iIAorCisgICAgICAgIDwhLS0KKyAgICAgICAgICAgIFRoZSAiY29uZmlnLXByb3BlcnR5IiBlbGVtZW50cyBjYW4gaGF2ZSB6ZXJvIG9yIG1vcmUgImRlc2NyaXB0aW9uIgogICAgICAgICAgICAgZWxlbWVudHMuIFRoZSAiZGVzY3JpcHRpb24iIGVsZW1lbnRzIGFyZSBub3QgYmVpbmcgaW5jbHVkZWQKICAgICAgICAgICAgIGluIHRoZSAiY29uZmlnLXByb3BlcnR5IiBlbGVtZW50cyBiZWxvdy4gVGhlIGRyaXZlciB2ZW5kb3IgY2FuCiAgICAgICAgICAgICBhZGQgdGhlbSBhcyByZXF1aXJlZC4KICAgICAgICAgLS0+Ci0gICAgICAgIAorCiAgICAgICAgIDxyZXNvdXJjZWFkYXB0ZXItY2xhc3M+Y29tLnN1bi5qZGJjcmEuc3BpLlJlc291cmNlQWRhcHRlcjwvcmVzb3VyY2VhZGFwdGVyLWNsYXNzPgotICAgICAgICAKKwogICAgICAgICA8b3V0Ym91bmQtcmVzb3VyY2VhZGFwdGVyPgotICAgICAgICAKKwogICAgICAgICAgICAgPGNvbm5lY3Rpb24tZGVmaW5pdGlvbj4KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIDxtYW5hZ2VkY29ubmVjdGlvbmZhY3RvcnktY2xhc3M+Y29tLnN1bi5qZGJjcmEuc3BpLlhBTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9tYW5hZ2VkY29ubmVjdGlvbmZhY3RvcnktY2xhc3M+Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICA8IS0tIFRoZXJlIGNhbiBiZSBhbnkgbnVtYmVyIG9mIHRoZXNlIGVsZW1lbnRzIGluY2x1ZGluZyAwIC0tPgogICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5TZXJ2ZXJOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KQEAgLTEyOCw3ICsxMjgsNyBAQAogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPnRlc3RkYjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgogCi0gICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4gICAgCisgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlVzZXI8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+ZGJ1c2VyPC9jb25maWctcHJvcGVydHktdmFsdWU+CkBAIC0xMzksMTIgKzEzOSwxMiBAQAogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPmRidXNlcjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgogCi0gICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4gICAgCisgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlBhc3N3b3JkPC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPmRicGFzc3dvcmQ8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VVJMPC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPmpkYmM6ZGVyYnk6Ly9sb2NhbGhvc3Q6MTUyNy90ZXN0ZGI7Y3JlYXRlPXRydWU8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KQEAgLTE1NCw3ICsxNTQsNyBAQAogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+LS0+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4gICAgCisgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkRlc2NyaXB0aW9uPC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPk9yYWNsZSB0aGluIGRyaXZlciBEYXRhc291cmNlPC9jb25maWctcHJvcGVydHktdmFsdWU+CkBAIC0xNjUsMTcgKzE2NSwxNyBAQAogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4gICAgCisgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlJvbGVOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5Mb2dpblRpbWVPdXQ8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+MDwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5Ecml2ZXJQcm9wZXJ0aWVzPC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgpAQCAtMTg2LDcgKzE4Niw3IEBACiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT4jPC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4gICAgCisgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkNsYXNzTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT5vcmcuYXBhY2hlLmRlcmJ5LmpkYmMuQ2xpZW50WEFEYXRhU291cmNlNDA8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KQEAgLTE5OCw4MiArMTk4LDgyIEBACiAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgogCiA8IS0tCi0gICAgICAJCTxjb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktbmFtZT5Db25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkPC9jb25maWctcHJvcGVydHktbmFtZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPmZhbHNlPC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0gICAgICAgIAk8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgCTxjb25maWctcHJvcGVydHk+ICAgIAotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VmFsaWRhdGlvbk1ldGhvZDwvY29uZmlnLXByb3BlcnR5LW5hbWU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLSAgICAgICAgCTwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAJPGNvbmZpZy1wcm9wZXJ0eT4gICAgCi0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktbmFtZT5WYWxpZGF0aW9uVGFibGVOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotICAgICAgICAJPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgIAk8Y29uZmlnLXByb3BlcnR5PiAgICAKLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlRyYW5zYWN0aW9uSXNvbGF0aW9uPC9jb25maWctcHJvcGVydHktbmFtZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotICAgICAgICAJPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgIAk8Y29uZmlnLXByb3BlcnR5PiAgICAKLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkd1YXJhbnRlZUlzb2xhdGlvbkxldmVsPC9jb25maWctcHJvcGVydHktbmFtZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotICAgICAgICAJPC9jb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5Db25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPmZhbHNlPC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5WYWxpZGF0aW9uTWV0aG9kPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VmFsaWRhdGlvblRhYmxlTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlRyYW5zYWN0aW9uSXNvbGF0aW9uPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+R3VhcmFudGVlSXNvbGF0aW9uTGV2ZWw8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KIC0tPgogCiAgICAgICAgICAgICAgICAgPGNvbm5lY3Rpb25mYWN0b3J5LWludGVyZmFjZT5qYXZheC5zcWwuWEFEYXRhU291cmNlPC9jb25uZWN0aW9uZmFjdG9yeS1pbnRlcmZhY2U+Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICA8Y29ubmVjdGlvbmZhY3RvcnktaW1wbC1jbGFzcz5jb20uc3VuLmpkYmNyYS5zcGkuRGF0YVNvdXJjZTwvY29ubmVjdGlvbmZhY3RvcnktaW1wbC1jbGFzcz4KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIDxjb25uZWN0aW9uLWludGVyZmFjZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb25uZWN0aW9uLWludGVyZmFjZT4KLSAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICA8Y29ubmVjdGlvbi1pbXBsLWNsYXNzPmNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uSG9sZGVyPC9jb25uZWN0aW9uLWltcGwtY2xhc3M+Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIDwvY29ubmVjdGlvbi1kZWZpbml0aW9uPgotICAgICAgICAgICAgCisKICAgICAgICAgICAgIDx0cmFuc2FjdGlvbi1zdXBwb3J0PlhBVHJhbnNhY3Rpb248L3RyYW5zYWN0aW9uLXN1cHBvcnQ+Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgPGF1dGhlbnRpY2F0aW9uLW1lY2hhbmlzbT4KICAgICAgICAgICAgICAgICA8IS0tIFRoZXJlIGNhbiBiZSBhbnkgbnVtYmVyIG9mICJkZXNjcmlwdGlvbiIgZWxlbWVudHMgaW5jbHVkaW5nIDAgLS0+CiAgICAgICAgICAgICAgICAgPCEtLSBOb3QgaW5jbHVkaW5nIHRoZSAiZGVzY3JpcHRpb24iIGVsZW1lbnQgLS0+Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICA8YXV0aGVudGljYXRpb24tbWVjaGFuaXNtLXR5cGU+QmFzaWNQYXNzd29yZDwvYXV0aGVudGljYXRpb24tbWVjaGFuaXNtLXR5cGU+Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICA8Y3JlZGVudGlhbC1pbnRlcmZhY2U+amF2YXgucmVzb3VyY2Uuc3BpLnNlY3VyaXR5LlBhc3N3b3JkQ3JlZGVudGlhbDwvY3JlZGVudGlhbC1pbnRlcmZhY2U+CiAgICAgICAgICAgICA8L2F1dGhlbnRpY2F0aW9uLW1lY2hhbmlzbT4KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICA8cmVhdXRoZW50aWNhdGlvbi1zdXBwb3J0PmZhbHNlPC9yZWF1dGhlbnRpY2F0aW9uLXN1cHBvcnQ+Ci0gICAgICAgICAgICAKKwogICAgICAgICA8L291dGJvdW5kLXJlc291cmNlYWRhcHRlcj4KLQk8YWRtaW5vYmplY3Q+Ci0JICAgICAgIDxhZG1pbm9iamVjdC1pbnRlcmZhY2U+Y29tLnN1bi5qZGJjcmEuc3BpLkpkYmNTZXR1cEFkbWluPC9hZG1pbm9iamVjdC1pbnRlcmZhY2U+Ci0JICAgICAgIDxhZG1pbm9iamVjdC1jbGFzcz5jb20uc3VuLmpkYmNyYS5zcGkuSmRiY1NldHVwQWRtaW5JbXBsPC9hZG1pbm9iamVjdC1jbGFzcz4KLQkgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5UYWJsZU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLQkgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0JICAgICAgIDxjb25maWctcHJvcGVydHk+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+U2NoZW1hTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotCSAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLQkgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5KbmRpTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotCSAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLQkgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5Ob09mUm93czwvY29uZmlnLXByb3BlcnR5LW5hbWU+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLkludGVnZXI8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT4wPC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0JICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgorICAgIDxhZG1pbm9iamVjdD4KKyAgICAgICAgICAgPGFkbWlub2JqZWN0LWludGVyZmFjZT5jb20uc3VuLmpkYmNyYS5zcGkuSmRiY1NldHVwQWRtaW48L2FkbWlub2JqZWN0LWludGVyZmFjZT4KKyAgICAgICAgICAgPGFkbWlub2JqZWN0LWNsYXNzPmNvbS5zdW4uamRiY3JhLnNwaS5KZGJjU2V0dXBBZG1pbkltcGw8L2FkbWlub2JqZWN0LWNsYXNzPgorICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlRhYmxlTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5TY2hlbWFOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkpuZGlOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPk5vT2ZSb3dzPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuSW50ZWdlcjwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjA8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CiAgICAgICAgIDwvYWRtaW5vYmplY3Q+Ci0gICAgICAgIAorCiAgICAgPC9yZXNvdXJjZWFkYXB0ZXI+Ci0gICAgCisKIDwvY29ubmVjdG9yPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uTWFuYWdlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uTWFuYWdlci5qYXZhCmluZGV4IGIyMTljZDIuLjEyNDgwOWMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvbk1hbmFnZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25NYW5hZ2VyLmphdmEKQEAgLTI0LDI2ICsyNCwyNiBAQAogLyoqCiAgKiBDb25uZWN0aW9uTWFuYWdlciBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzMxCi0gKiBAYXV0aG9yCUJpbm9kIFAuRworICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8zMQorICogQGF1dGhvciAgICBCaW5vZCBQLkcKICAqLwotcHVibGljIGNsYXNzIENvbm5lY3Rpb25NYW5hZ2VyIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvbk1hbmFnZXJ7IAorcHVibGljIGNsYXNzIENvbm5lY3Rpb25NYW5hZ2VyIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvbk1hbmFnZXJ7CiAKICAgICAvKioKICAgICAgKiBSZXR1cm5zIGEgPGNvZGU+Q29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdCB0byB0aGUgPGNvZGU+Q29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+CiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWNmCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0LgotICAgICAqIEBwYXJhbQlpbmZvCTxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gb2JqZWN0LgotICAgICAqIEByZXR1cm4JQSA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBPYmplY3QuCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbiBJbiBjYXNlIG9mIGFuIGVycm9yIGluIGdldHRpbmcgdGhlIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+LgorICAgICAqIEBwYXJhbSAgICBtY2YgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QuCisgICAgICogQHBhcmFtICAgIGluZm8gICAgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBvYmplY3QuCisgICAgICogQHJldHVybiAgICBBIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IE9iamVjdC4KKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uIEluIGNhc2Ugb2YgYW4gZXJyb3IgaW4gZ2V0dGluZyB0aGUgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4uCiAgICAgICovCiAgICAgcHVibGljIE9iamVjdCBhbGxvY2F0ZUNvbm5lY3Rpb24oTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG1jZiwKLSAgICAJCQkJICAgICBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW5mbykgCi0gICAgCQkJCSAgICAgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKLQlNYW5hZ2VkQ29ubmVjdGlvbiBtYyA9IG1jZi5jcmVhdGVNYW5hZ2VkQ29ubmVjdGlvbihudWxsLCBpbmZvKTsKLQlyZXR1cm4gbWMuZ2V0Q29ubmVjdGlvbihudWxsLCBpbmZvKTsgICAgCQkJCSAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGluZm8pCisgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKKyAgICBNYW5hZ2VkQ29ubmVjdGlvbiBtYyA9IG1jZi5jcmVhdGVNYW5hZ2VkQ29ubmVjdGlvbihudWxsLCBpbmZvKTsKKyAgICByZXR1cm4gbWMuZ2V0Q29ubmVjdGlvbihudWxsLCBpbmZvKTsKICAgICB9Ci0gICAgCisKICAgICAvKgogICAgICAqIFRoaXMgY2xhc3MgY291bGQgZWZmZWN0aXZlbHkgaW1wbGVtZW50IENvbm5lY3Rpb24gcG9vbGluZyBhbHNvLgogICAgICAqIENvdWxkIGJlIGRvbmUgZm9yIEZDUy4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvblJlcXVlc3RJbmZvLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25SZXF1ZXN0SW5mby5qYXZhCmluZGV4IDM5Yzc4NzYuLmM0NzdmYzIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvblJlcXVlc3RJbmZvLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uUmVxdWVzdEluZm8uamF2YQpAQCAtMTksMTAgKzE5LDEwIEBACiAvKioKICAqIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzMxCi0gKiBAYXV0aG9yCUJpbm9kIFAuRworICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8zMQorICogQGF1dGhvciAgICBCaW5vZCBQLkcKICAqLwotcHVibGljIGNsYXNzIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mb3sgCitwdWJsaWMgY2xhc3MgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZvewogCiAgICAgcHJpdmF0ZSBTdHJpbmcgdXNlcjsKICAgICBwcml2YXRlIFN0cmluZyBwYXNzd29yZDsKQEAgLTMwLDggKzMwLDggQEAKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gb2JqZWN0CiAgICAgICoKLSAgICAgKiBAcGFyYW0JdXNlcglVc2VyIE5hbWUuCi0gICAgICogQHBhcmFtCXBhc3N3b3JkCVBhc3N3b3JkCisgICAgICogQHBhcmFtICAgIHVzZXIgICAgVXNlciBOYW1lLgorICAgICAqIEBwYXJhbSAgICBwYXNzd29yZCAgICBQYXNzd29yZAogICAgICAqLwogICAgIHB1YmxpYyBDb25uZWN0aW9uUmVxdWVzdEluZm8oU3RyaW5nIHVzZXIsIFN0cmluZyBwYXNzd29yZCkgewogICAgICAgICB0aGlzLnVzZXIgPSB1c2VyOwpAQCAtNDEsNyArNDEsNyBAQAogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgdXNlciBuYW1lIG9mIHRoZSBDb25uZWN0aW9uUmVxdWVzdEluZm8uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVVzZXIgbmFtZSBvZiBDb25uZWN0aW9uUmVxdWVzdEluZm8uCisgICAgICogQHJldHVybiAgICBVc2VyIG5hbWUgb2YgQ29ubmVjdGlvblJlcXVlc3RJbmZvLgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VXNlcigpIHsKICAgICAgICAgcmV0dXJuIHVzZXI7CkBAIC01MCw3ICs1MCw3IEBACiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBwYXNzd29yZCBvZiB0aGUgQ29ubmVjdGlvblJlcXVlc3RJbmZvLgogICAgICAqCi0gICAgICogQHJldHVybglQYXNzd29yZCBvZiBDb25uZWN0aW9uUmVxdWVzdEluZm8uCisgICAgICogQHJldHVybiAgICBQYXNzd29yZCBvZiBDb25uZWN0aW9uUmVxdWVzdEluZm8uCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRQYXNzd29yZCgpIHsKICAgICAgICAgcmV0dXJuIHBhc3N3b3JkOwpAQCAtNTksNyArNTksNyBAQAogICAgIC8qKgogICAgICAqIFZlcmlmeSB3aGV0aGVyIHR3byBDb25uZWN0aW9uUmVxdWVzdEluZm9zIGFyZSBlcXVhbC4KICAgICAgKgotICAgICAqIEByZXR1cm4JVHJ1ZSwgaWYgdGhleSBhcmUgZXF1YWwgYW5kIGZhbHNlIG90aGVyd2lzZS4KKyAgICAgKiBAcmV0dXJuICAgIFRydWUsIGlmIHRoZXkgYXJlIGVxdWFsIGFuZCBmYWxzZSBvdGhlcndpc2UuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmopIHsKICAgICAgICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gZmFsc2U7CkBAIC03NSwxOCArNzUsMTggQEAKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIGhhc2hjb2RlIG9mIHRoZSBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWhhc2hDb2RlLgorICAgICAqIEByZXR1cm4gICAgaGFzaENvZGUuCiAgICAgICovCiAgICAgcHVibGljIGludCBoYXNoQ29kZSgpIHsKICAgICAgICAgU3RyaW5nIHJlc3VsdCA9ICIiICsgdXNlciArIHBhc3N3b3JkOwogICAgICAgICByZXR1cm4gcmVzdWx0Lmhhc2hDb2RlKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29tcGFyZXMgdHdvIG9iamVjdHMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbzEJRmlyc3Qgb2JqZWN0LgotICAgICAqIEBwYXJhbQlvMglTZWNvbmQgb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBvMSAgICBGaXJzdCBvYmplY3QuCisgICAgICogQHBhcmFtICAgIG8yICAgIFNlY29uZCBvYmplY3QuCiAgICAgICovCiAgICAgcHJpdmF0ZSBib29sZWFuIGlzRXF1YWwoT2JqZWN0IG8xLCBPYmplY3QgbzIpIHsKICAgICAgICAgaWYgKG8xID09IG51bGwpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRGF0YVNvdXJjZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EYXRhU291cmNlLmphdmEKaW5kZXggMzBkYTFmZS4uMjk1YzNmYiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EYXRhU291cmNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EYXRhU291cmNlLmphdmEKQEAgLTI4LDIyICsyOCwyMiBAQAogaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsKIGltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsKIC8qKgotICogSG9sZHMgdGhlIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCwgd2hpY2ggaXMgdG8gYmUgCisgKiBIb2xkcyB0aGUgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LCB3aGljaCBpcyB0byBiZQogICogcGFzc2VkIHRvIHRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMzEKLSAqIEBhdXRob3IJQmlub2QgUC5HCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzMxCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRwogICovCiBwdWJsaWMgY2xhc3MgRGF0YVNvdXJjZSBpbXBsZW1lbnRzIGphdmF4LnNxbC5EYXRhU291cmNlLCBqYXZhLmlvLlNlcmlhbGl6YWJsZSwKLQkJY29tLnN1bi5hcHBzZXJ2LmpkYmNyYS5EYXRhU291cmNlLCBqYWthcnRhLnJlc291cmNlLlJlZmVyZW5jZWFibGV7IAotCQkJCSAgIAorICAgICAgICBjb20uc3VuLmFwcHNlcnYuamRiY3JhLkRhdGFTb3VyY2UsIGpha2FydGEucmVzb3VyY2UuUmVmZXJlbmNlYWJsZXsKKwogICAgIHByaXZhdGUgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG1jZjsKLSAgICBwcml2YXRlIENvbm5lY3Rpb25NYW5hZ2VyIGNtOwkJCQkgICAJCQkJICAgCisgICAgcHJpdmF0ZSBDb25uZWN0aW9uTWFuYWdlciBjbTsKICAgICBwcml2YXRlIGludCBsb2dpblRpbWVvdXQ7CiAgICAgcHJpdmF0ZSBQcmludFdyaXRlciBsb2dXcml0ZXI7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgZGVzY3JpcHRpb247CQkJCSAgIAorICAgIHByaXZhdGUgU3RyaW5nIGRlc2NyaXB0aW9uOwogICAgIHByaXZhdGUgUmVmZXJlbmNlIHJlZmVyZW5jZTsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIExvZ2dlciBfbG9nZ2VyOwogICAgIHN0YXRpYyB7CiAgICAgICAgIF9sb2dnZXIgPSBMb2dnZXIuZ2V0QW5vbnltb3VzTG9nZ2VyKCk7CkBAIC01MSw1NyArNTEsNTcgQEAKICAgICBwcml2YXRlIGJvb2xlYW4gZGVidWcgPSBmYWxzZTsKIAogICAgIC8qKgotICAgICAqIENvbnN0cnVjdHMgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0LiBUaGlzIGlzIGNyZWF0ZWQgYnkgdGhlIAorICAgICAqIENvbnN0cnVjdHMgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0LiBUaGlzIGlzIGNyZWF0ZWQgYnkgdGhlCiAgICAgICogPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWNmCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0IAotICAgICAqCQkJY3JlYXRpbmcgdGhpcyBvYmplY3QuCi0gICAgICogQHBhcmFtCWNtCTxjb2RlPkNvbm5lY3Rpb25NYW5hZ2VyPC9jb2RlPiBvYmplY3QgZWl0aGVyIGFzc29jaWF0ZWQKLSAgICAgKgkJCXdpdGggQXBwbGljYXRpb24gc2VydmVyIG9yIFJlc291cmNlIEFkYXB0ZXIuCisgICAgICogQHBhcmFtICAgIG1jZiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdAorICAgICAqICAgICAgICAgICAgY3JlYXRpbmcgdGhpcyBvYmplY3QuCisgICAgICogQHBhcmFtICAgIGNtICAgIDxjb2RlPkNvbm5lY3Rpb25NYW5hZ2VyPC9jb2RlPiBvYmplY3QgZWl0aGVyIGFzc29jaWF0ZWQKKyAgICAgKiAgICAgICAgICAgIHdpdGggQXBwbGljYXRpb24gc2VydmVyIG9yIFJlc291cmNlIEFkYXB0ZXIuCiAgICAgICovCiAgICAgcHVibGljIERhdGFTb3VyY2UgKE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2YsIENvbm5lY3Rpb25NYW5hZ2VyIGNtKSB7Ci0gICAgCXRoaXMubWNmID0gbWNmOwotICAgIAlpZiAoY20gPT0gbnVsbCkgewotICAgIAkgICAgdGhpcy5jbSA9IChDb25uZWN0aW9uTWFuYWdlcikgbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uTWFuYWdlcigpOwotICAgIAl9IGVsc2UgewotICAgIAkgICAgdGhpcy5jbSA9IGNtOwotICAgIAl9ICAgIAkKLSAgICB9ICAgCi0gICAgCisgICAgICAgIHRoaXMubWNmID0gbWNmOworICAgICAgICBpZiAoY20gPT0gbnVsbCkgeworICAgICAgICAgICAgdGhpcy5jbSA9IChDb25uZWN0aW9uTWFuYWdlcikgbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uTWFuYWdlcigpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy5jbSA9IGNtOworICAgICAgICB9CisgICAgfQorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KLSAgICAgKiAKLSAgICAgKiBAcmV0dXJuCTxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYW4gZXJyb3IuICAgICAgCisgICAgICoKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYW4gZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIENvbm5lY3Rpb24gZ2V0Q29ubmVjdGlvbigpIHRocm93cyBTUUxFeGNlcHRpb24gewotICAgIAl0cnkgewotICAgIAkgICAgcmV0dXJuIChDb25uZWN0aW9uKSBjbS5hbGxvY2F0ZUNvbm5lY3Rpb24obWNmLG51bGwpOyAgICAJICAgIAotICAgIAl9IGNhdGNoIChSZXNvdXJjZUV4Y2VwdGlvbiByZSkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgcmV0dXJuIChDb25uZWN0aW9uKSBjbS5hbGxvY2F0ZUNvbm5lY3Rpb24obWNmLG51bGwpOworICAgICAgICB9IGNhdGNoIChSZXNvdXJjZUV4Y2VwdGlvbiByZSkgewogLy8gVGhpcyBpcyB0ZW1wb3JhcnkuIFRoaXMgbmVlZHMgdG8gYmUgY2hhbmdlZCB0byBTRVZFUkUgYWZ0ZXIgVFAKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMuZXhjX2dldF9jb25uIiwgcmUuZ2V0TWVzc2FnZSgpKTsKLSAgICAJICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKHJlKTsKLSAgICAJfQorICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5leGNfZ2V0X2Nvbm4iLCByZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAocmUpOworICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JdXNlcglVc2VyIG5hbWUgZm9yIHRoZSBDb25uZWN0aW9uLgotICAgICAqIEBwYXJhbQlwd2QJUGFzc3dvcmQgZm9yIHRoZSBDb25uZWN0aW9uLgotICAgICAqIEByZXR1cm4JPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhbiBlcnJvci4gICAgICAKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICB1c2VyICAgIFVzZXIgbmFtZSBmb3IgdGhlIENvbm5lY3Rpb24uCisgICAgICogQHBhcmFtICAgIHB3ZCAgICBQYXNzd29yZCBmb3IgdGhlIENvbm5lY3Rpb24uCisgICAgICogQHJldHVybiAgICA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGFuIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBDb25uZWN0aW9uIGdldENvbm5lY3Rpb24oU3RyaW5nIHVzZXIsIFN0cmluZyBwd2QpIHRocm93cyBTUUxFeGNlcHRpb24gewotICAgIAl0cnkgewotICAgIAkgICAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGluZm8gPSBuZXcgQ29ubmVjdGlvblJlcXVlc3RJbmZvICh1c2VyLCBwd2QpOwotICAgIAkgICAgcmV0dXJuIChDb25uZWN0aW9uKSBjbS5hbGxvY2F0ZUNvbm5lY3Rpb24obWNmLGluZm8pOwotICAgIAl9IGNhdGNoIChSZXNvdXJjZUV4Y2VwdGlvbiByZSkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGluZm8gPSBuZXcgQ29ubmVjdGlvblJlcXVlc3RJbmZvICh1c2VyLCBwd2QpOworICAgICAgICAgICAgcmV0dXJuIChDb25uZWN0aW9uKSBjbS5hbGxvY2F0ZUNvbm5lY3Rpb24obWNmLGluZm8pOworICAgICAgICB9IGNhdGNoIChSZXNvdXJjZUV4Y2VwdGlvbiByZSkgewogLy8gVGhpcyBpcyB0ZW1wb3JhcnkuIFRoaXMgbmVlZHMgdG8gYmUgY2hhbmdlZCB0byBTRVZFUkUgYWZ0ZXIgVFAKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMuZXhjX2dldF9jb25uIiwgcmUuZ2V0TWVzc2FnZSgpKTsKLSAgICAJICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKHJlKTsKLSAgICAJfQotICAgIH0gICAgCisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLmV4Y19nZXRfY29ubiIsIHJlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uIChyZSk7CisgICAgICAgIH0KKyAgICB9CiAKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIGFjdHVhbCBTUUxDb25uZWN0aW9uIGZyb20gdGhlIENvbm5lY3Rpb24gd3JhcHBlcgpAQCAtMTE0LDkxICsxMTQsOTEgQEAKICAgICAgKi8KICAgICBwdWJsaWMgQ29ubmVjdGlvbiBnZXRDb25uZWN0aW9uKENvbm5lY3Rpb24gY29uKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKIAotICAgICAgICBDb25uZWN0aW9uIGRyaXZlckNvbiA9IGNvbjsgCisgICAgICAgIENvbm5lY3Rpb24gZHJpdmVyQ29uID0gY29uOwogICAgICAgICBpZiAoY29uIGluc3RhbmNlb2YgY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25Ib2xkZXIpIHsKLSAgICAgICAgICAgZHJpdmVyQ29uID0gKChjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbkhvbGRlcikgY29uKS5nZXRDb25uZWN0aW9uKCk7IAotICAgICAgICB9IAorICAgICAgICAgICBkcml2ZXJDb24gPSAoKGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uSG9sZGVyKSBjb24pLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBkcml2ZXJDb247CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSBsb2dpbiB0aW1lb3V0CiAgICAgICoKICAgICAgKiBAcmV0dXJuIGxvZ2luIHRpbWVvdXQuCi0gICAgICogQHRocm93cwlTUUxFeGNlcHRpb24JSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCiAgICAgICovCiAgICAgcHVibGljIGludCBnZXRMb2dpblRpbWVvdXQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uewotICAgIAlyZXR1cm4JbG9naW5UaW1lb3V0OworICAgICAgICByZXR1cm4gICAgbG9naW5UaW1lb3V0OwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgbG9naW4gdGltZW91dAogICAgICAqCi0gICAgICogQHBhcmFtCWxvZ2luVGltZW91dAlMb2dpbiB0aW1lb3V0LgotICAgICAqIEB0aHJvd3MJU1FMRXhjZXB0aW9uCUlmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgorICAgICAqIEBwYXJhbSAgICBsb2dpblRpbWVvdXQgICAgTG9naW4gdGltZW91dC4KKyAgICAgKiBAdGhyb3dzICAgIFNRTEV4Y2VwdGlvbiAgICBJZiBhIGRhdGFiYXNlIGVycm9yIG9jY3Vycy4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRMb2dpblRpbWVvdXQoaW50IGxvZ2luVGltZW91dCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKLSAgICAJdGhpcy5sb2dpblRpbWVvdXQgPSBsb2dpblRpbWVvdXQ7CisgICAgICAgIHRoaXMubG9naW5UaW1lb3V0ID0gbG9naW5UaW1lb3V0OwogICAgIH0KLSAgICAKLSAgICAvKiogCisKKyAgICAvKioKICAgICAgKiBHZXQgdGhlIGxvZ3dyaXRlciBvYmplY3QuCiAgICAgICoKICAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmludFdyaXRlciA8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzCVNRTEV4Y2VwdGlvbglJZiBhIGRhdGFiYXNlIGVycm9yIG9jY3Vycy4KKyAgICAgKiBAdGhyb3dzICAgIFNRTEV4Y2VwdGlvbiAgICBJZiBhIGRhdGFiYXNlIGVycm9yIG9jY3Vycy4KICAgICAgKi8KICAgICBwdWJsaWMgUHJpbnRXcml0ZXIgZ2V0TG9nV3JpdGVyKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKLSAgICAJcmV0dXJuCWxvZ1dyaXRlcjsKKyAgICAgICAgcmV0dXJuICAgIGxvZ1dyaXRlcjsKICAgICB9Ci0gICAgICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0IHRoZSBsb2d3cml0ZXIgb24gdGhpcyBvYmplY3QuCiAgICAgICoKICAgICAgKiBAcGFyYW0gPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzCVNRTEV4Y2VwdGlvbglJZiBhIGRhdGFiYXNlIGVycm9yIG9jY3Vycy4KKyAgICAgKiBAdGhyb3dzICAgIFNRTEV4Y2VwdGlvbiAgICBJZiBhIGRhdGFiYXNlIGVycm9yIG9jY3Vycy4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRMb2dXcml0ZXIoUHJpbnRXcml0ZXIgbG9nV3JpdGVyKSB0aHJvd3MgU1FMRXhjZXB0aW9uewotICAgIAl0aGlzLmxvZ1dyaXRlciA9IGxvZ1dyaXRlcjsKLSAgICB9ICAgICAgICAKLSAgICAgICAgCisgICAgICAgIHRoaXMubG9nV3JpdGVyID0gbG9nV3JpdGVyOworICAgIH0KKwogICAgIHB1YmxpYyBMb2dnZXIgZ2V0UGFyZW50TG9nZ2VyKCkgdGhyb3dzIFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb257CiAgICAgICB0aHJvdyBuZXcgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiRG8gbm90IHN1cHBvcnQgSmF2YSA3IGZlYXR1cmUuIik7CiAgICAgfQogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgZGVzY3JpcHRpb24uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCURlc2NyaXB0aW9uIGFib3V0IHRoZSBEYXRhU291cmNlLgorICAgICAqIEByZXR1cm4gICAgRGVzY3JpcHRpb24gYWJvdXQgdGhlIERhdGFTb3VyY2UuCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbigpIHsKLSAgICAJcmV0dXJuIGRlc2NyaXB0aW9uOworICAgICAgICByZXR1cm4gZGVzY3JpcHRpb247CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0IHRoZSBkZXNjcmlwdGlvbi4KICAgICAgKgogICAgICAqIEBwYXJhbSBkZXNjcmlwdGlvbiBEZXNjcmlwdGlvbiBhYm91dCB0aGUgRGF0YVNvdXJjZS4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXREZXNjcmlwdGlvbihTdHJpbmcgZGVzY3JpcHRpb24pIHsKLSAgICAJdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOwotICAgIH0gICAgCi0gICAgCisgICAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBHZXQgdGhlIHJlZmVyZW5jZS4KICAgICAgKgogICAgICAqIEByZXR1cm4gPGNvZGU+UmVmZXJlbmNlPC9jb2RlPm9iamVjdC4KICAgICAgKi8KICAgICBwdWJsaWMgUmVmZXJlbmNlIGdldFJlZmVyZW5jZSgpIHsKLSAgICAJcmV0dXJuIHJlZmVyZW5jZTsKKyAgICAgICAgcmV0dXJuIHJlZmVyZW5jZTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXQgdGhlIHJlZmVyZW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlyZWZlcmVuY2UgPGNvZGU+UmVmZXJlbmNlPC9jb2RlPiBvYmplY3QuCisgICAgICogQHBhcmFtICAgIHJlZmVyZW5jZSA8Y29kZT5SZWZlcmVuY2U8L2NvZGU+IG9iamVjdC4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRSZWZlcmVuY2UoUmVmZXJlbmNlIHJlZmVyZW5jZSkgewotICAgIAl0aGlzLnJlZmVyZW5jZSA9IHJlZmVyZW5jZTsKKyAgICAgICAgdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7CiAgICAgfQogCiAgICAgcHVibGljIDxUPiBUIHVud3JhcChDbGFzczxUPiBpZmFjZSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CkBAIC0yMDYsNiArMjA2LDYgQEAKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiBpc1dyYXBwZXJGb3IoQ2xhc3M8Pz4gaWZhY2UpIHRocm93cyBTUUxFeGNlcHRpb24gewotICAgICAgICByZXR1cm4gZmFsc2U7IAorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbi5qYXZhCmluZGV4IDU3NGVkNjYuLmJlYzBkNmIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluLmphdmEKQEAgLTE4LDEzICsxOCwxMyBAQAogCiBwdWJsaWMgaW50ZXJmYWNlIEpkYmNTZXR1cEFkbWluIHsKIAotICAgIHB1YmxpYyB2b2lkIHNldFRhYmxlTmFtZShTdHJpbmcgZGIpOyAKKyAgICBwdWJsaWMgdm9pZCBzZXRUYWJsZU5hbWUoU3RyaW5nIGRiKTsKIAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGFibGVOYW1lKCk7CiAKLSAgICBwdWJsaWMgdm9pZCBzZXRKbmRpTmFtZShTdHJpbmcgbmFtZSk7IAorICAgIHB1YmxpYyB2b2lkIHNldEpuZGlOYW1lKFN0cmluZyBuYW1lKTsKIAotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Sm5kaU5hbWUoKTsgCisgICAgcHVibGljIFN0cmluZyBnZXRKbmRpTmFtZSgpOwogCiAgICAgcHVibGljIHZvaWQgc2V0U2NoZW1hTmFtZShTdHJpbmcgbmFtZSk7CiAKQEAgLTM0LDYgKzM0LDYgQEAKIAogICAgIHB1YmxpYyBJbnRlZ2VyIGdldE5vT2ZSb3dzKCk7CiAKLSAgICBwdWJsaWMgYm9vbGVhbiBjaGVja1NldHVwKCk7IAorICAgIHB1YmxpYyBib29sZWFuIGNoZWNrU2V0dXAoKTsKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbkltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW5JbXBsLmphdmEKaW5kZXggM2JkN2NhZC4uZmVjNzQ0MyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbkltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluSW1wbC5qYXZhCkBAIC02NSwxMSArNjUsMTEgQEAKIAogcHJpdmF0ZSB2b2lkIHByaW50SGllcmFyY2h5KENsYXNzTG9hZGVyIGNsLCBpbnQgY250KXsKIHdoaWxlKGNsICE9IG51bGwpIHsKLQlmb3IoaW50IGkgPTA7IGkgPCBjbnQ7IGkrKykgCi0JCVN5c3RlbS5vdXQucHJpbnQoIiAiICk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJQQVJFTlQgOiIgKyBjbCk7Ci0JY2wgPSBjbC5nZXRQYXJlbnQoKTsKLQljbnQgKz0gMzsKKyAgICBmb3IoaW50IGkgPTA7IGkgPCBjbnQ7IGkrKykKKyAgICAgICAgU3lzdGVtLm91dC5wcmludCgiICIgKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBBUkVOVCA6IiArIGNsKTsKKyAgICBjbCA9IGNsLmdldFBhcmVudCgpOworICAgIGNudCArPSAzOwogfQogfQogCkBAIC03OCwxMCArNzgsMTAgQEAKICAgICAgICAgZm9yKGludCBpID0wOyBpIDwgY250OyBpKyspCiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiICIgKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQQVJFTlQgb2YgQ2xhc3NMb2FkZXIgMSA6IiArIGNsMSk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJQQVJFTlQgb2YgQ2xhc3NMb2FkZXIgMiA6IiArIGNsMik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJFUVVBTFMgOiAiICsgKGNsMSA9PSBjbDIpKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBBUkVOVCBvZiBDbGFzc0xvYWRlciAyIDoiICsgY2wyKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVRVUFMUyA6ICIgKyAoY2wxID09IGNsMikpOwogICAgICAgICBjbDEgPSBjbDEuZ2V0UGFyZW50KCk7Ci0JY2wyID0gY2wyLmdldFBhcmVudCgpOworICAgIGNsMiA9IGNsMi5nZXRQYXJlbnQoKTsKICAgICAgICAgY250ICs9IDM7CiB9CiB9CkBAIC05MCw5MyArOTAsOTMgQEAKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja1NldHVwKCl7CiAKICAgICAgICAgaWYgKGpuZGlOYW1lPT0gbnVsbCB8fCBqbmRpTmFtZS50cmltKCkuZXF1YWxzKCIiKSkgewotCSAgIHJldHVybiBmYWxzZTsKLQl9CisgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAogICAgICAgICBpZiAodGFibGVOYW1lPT0gbnVsbCB8fCB0YWJsZU5hbWUudHJpbSgpLmVxdWFscygiIikpIHsKLQkgICByZXR1cm4gZmFsc2U7Ci0JfQorICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAgICAgICAgQ29ubmVjdGlvbiBjb24gPSBudWxsOwotCVN0YXRlbWVudCBzID0gbnVsbDsKLQlSZXN1bHRTZXQgcnMgPSBudWxsOwotCWJvb2xlYW4gYiA9IGZhbHNlOworICAgIFN0YXRlbWVudCBzID0gbnVsbDsKKyAgICBSZXN1bHRTZXQgcnMgPSBudWxsOworICAgIGJvb2xlYW4gYiA9IGZhbHNlOwogICAgICAgICB0cnkgewotCSAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCS8vZGVidWcKLQlDbGFzcyBjbHogPSBEYXRhU291cmNlLmNsYXNzOworICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgIC8vZGVidWcKKyAgICBDbGFzcyBjbHogPSBEYXRhU291cmNlLmNsYXNzOwogLyoKLQlpZihjbHouZ2V0Q2xhc3NMb2FkZXIoKSAhPSBudWxsKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiRGF0YVNvdXJjZSdzIGNsYXN4cyA6ICIgKyAgY2x6LmdldE5hbWUoKSArICAiIGNsYXNzbG9hZGVyICIgKyBjbHouZ2V0Q2xhc3NMb2FkZXIoKSk7Ci0JCXByaW50SGllcmFyY2h5KGNsei5nZXRDbGFzc0xvYWRlcigpLmdldFBhcmVudCgpLCA4KTsKLQl9Ci0JQ2xhc3MgY2xzID0gaWMubG9va3VwKGpuZGlOYW1lKS5nZXRDbGFzcygpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiTG9va2VkIHVwIGNsYXNzJ3MgOiAiICsgY2xzLmdldFBhY2thZ2UoKSArICI6IiArIGNscy5nZXROYW1lKCkgICsgIiBjbGFzc2xvYWRlciAiICArIGNscy5nZXRDbGFzc0xvYWRlcigpKTsKLQlwcmludEhpZXJhcmNoeShjbHMuZ2V0Q2xhc3NMb2FkZXIoKS5nZXRQYXJlbnQoKSwgOCk7CisgICAgaWYoY2x6LmdldENsYXNzTG9hZGVyKCkgIT0gbnVsbCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRhdGFTb3VyY2UncyBjbGFzeHMgOiAiICsgIGNsei5nZXROYW1lKCkgKyAgIiBjbGFzc2xvYWRlciAiICsgY2x6LmdldENsYXNzTG9hZGVyKCkpOworICAgICAgICBwcmludEhpZXJhcmNoeShjbHouZ2V0Q2xhc3NMb2FkZXIoKS5nZXRQYXJlbnQoKSwgOCk7CisgICAgfQorICAgIENsYXNzIGNscyA9IGljLmxvb2t1cChqbmRpTmFtZSkuZ2V0Q2xhc3MoKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tlZCB1cCBjbGFzcydzIDogIiArIGNscy5nZXRQYWNrYWdlKCkgKyAiOiIgKyBjbHMuZ2V0TmFtZSgpICArICIgY2xhc3Nsb2FkZXIgIiAgKyBjbHMuZ2V0Q2xhc3NMb2FkZXIoKSk7CisgICAgcHJpbnRIaWVyYXJjaHkoY2xzLmdldENsYXNzTG9hZGVyKCkuZ2V0UGFyZW50KCksIDgpOwogCi0JU3lzdGVtLm91dC5wcmludGxuKCJDbGFzc2xvYWRlcnMgZXF1YWwgPyAiICsgIChjbHouZ2V0Q2xhc3NMb2FkZXIoKSA9PSBjbHMuZ2V0Q2xhc3NMb2FkZXIoKSkpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiJiomKiYqJiogQ29tcGFyaW5nIEhpZXJhY2h5IERhdGFTb3VyY2UgdnMgbG9va2VkdXAiKTsKLQlpZihjbHouZ2V0Q2xhc3NMb2FkZXIoKSAhPSBudWxsKSB7Ci0JCWNvbXBhcmVIaWVyYXJjaHkoY2x6LmdldENsYXNzTG9hZGVyKCksIGNscy5nZXRDbGFzc0xvYWRlcigpLCA4KTsKLQl9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJDbGFzc2xvYWRlcnMgZXF1YWwgPyAiICsgIChjbHouZ2V0Q2xhc3NMb2FkZXIoKSA9PSBjbHMuZ2V0Q2xhc3NMb2FkZXIoKSkpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiJiomKiYqJiogQ29tcGFyaW5nIEhpZXJhY2h5IERhdGFTb3VyY2UgdnMgbG9va2VkdXAiKTsKKyAgICBpZihjbHouZ2V0Q2xhc3NMb2FkZXIoKSAhPSBudWxsKSB7CisgICAgICAgIGNvbXBhcmVIaWVyYXJjaHkoY2x6LmdldENsYXNzTG9hZGVyKCksIGNscy5nZXRDbGFzc0xvYWRlcigpLCA4KTsKKyAgICB9CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkJlZm9yZSBsb29rdXAiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJlZm9yZSBsb29rdXAiKTsKICovCi0JT2JqZWN0IG8gPSBpYy5sb29rdXAoam5kaU5hbWUpOwotLy8JU3lzdGVtLm91dC5wcmludGxuKCJhZnRlciBsb29rdXAgbG9va3VwIik7CisgICAgT2JqZWN0IG8gPSBpYy5sb29rdXAoam5kaU5hbWUpOworLy8gICAgU3lzdGVtLm91dC5wcmludGxuKCJhZnRlciBsb29rdXAgbG9va3VwIik7CiAKLQkgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKW8gOworICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpbyA7CiAvKgotCVN5c3RlbS5vdXQucHJpbnRsbigiYWZ0ZXIgY2FzdCIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLSBUcnlpbmcgb3VyIFN0dWZmICEhISIpOwotCXRyeSB7Ci0JCUNsYXNzIG8xID0gKENsYXNzLmZvck5hbWUoImNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlIikpOwotCQlDbGFzc0xvYWRlciBjbDEgPSBvMS5nZXRDbGFzc0xvYWRlcigpOwotCQlDbGFzc0xvYWRlciBjbDIgPSBEYXRhU291cmNlLmNsYXNzLmdldENsYXNzTG9hZGVyKCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQ2wxID09IENsMiIgKyAoY2wxID09IGNsMikpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNsYXNzZXMgZXF1YWwiICsgKERhdGFTb3VyY2UuY2xhc3MgPT0gbzEpKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYWZ0ZXIgY2FzdCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLSBUcnlpbmcgb3VyIFN0dWZmICEhISIpOworICAgIHRyeSB7CisgICAgICAgIENsYXNzIG8xID0gKENsYXNzLmZvck5hbWUoImNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlIikpOworICAgICAgICBDbGFzc0xvYWRlciBjbDEgPSBvMS5nZXRDbGFzc0xvYWRlcigpOworICAgICAgICBDbGFzc0xvYWRlciBjbDIgPSBEYXRhU291cmNlLmNsYXNzLmdldENsYXNzTG9hZGVyKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2wxID09IENsMiIgKyAoY2wxID09IGNsMikpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNsYXNzZXMgZXF1YWwiICsgKERhdGFTb3VyY2UuY2xhc3MgPT0gbzEpKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQogKi8KICAgICAgICAgICAgIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQkgICAgU3RyaW5nIGZ1bGxUYWJsZU5hbWUgPSB0YWJsZU5hbWU7Ci0JICAgIGlmIChzY2hlbWFOYW1lICE9IG51bGwgJiYgKCEoc2NoZW1hTmFtZS50cmltKCkuZXF1YWxzKCIiKSkpKSB7Ci0JICAgICAgICBmdWxsVGFibGVOYW1lID0gc2NoZW1hTmFtZS50cmltKCkgKyAiLiIgKyBmdWxsVGFibGVOYW1lOwotCSAgICB9Ci0JICAgIFN0cmluZyBxcnkgPSAic2VsZWN0ICogZnJvbSAiICsgZnVsbFRhYmxlTmFtZTsgCisgICAgICAgIFN0cmluZyBmdWxsVGFibGVOYW1lID0gdGFibGVOYW1lOworICAgICAgICBpZiAoc2NoZW1hTmFtZSAhPSBudWxsICYmICghKHNjaGVtYU5hbWUudHJpbSgpLmVxdWFscygiIikpKSkgeworICAgICAgICAgICAgZnVsbFRhYmxlTmFtZSA9IHNjaGVtYU5hbWUudHJpbSgpICsgIi4iICsgZnVsbFRhYmxlTmFtZTsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmcgcXJ5ID0gInNlbGVjdCAqIGZyb20gIiArIGZ1bGxUYWJsZU5hbWU7CiAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGVjdXRpbmcgcXVlcnkgOiIgKyBxcnkpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4ZWN1dGluZyBxdWVyeSA6IiArIHFyeSk7CiAKLQkgICAgcyA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKLQkgICAgcnMgPSBzLmV4ZWN1dGVRdWVyeShxcnkpOyAKKyAgICAgICAgcyA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgcnMgPSBzLmV4ZWN1dGVRdWVyeShxcnkpOwogCiAgICAgICAgICAgICBpbnQgaSA9IDA7Ci0JICAgIGlmIChycy5uZXh0KCkpIHsKLQkgICAgICAgIGkrKzsKLQkgICAgfQorICAgICAgICBpZiAocnMubmV4dCgpKSB7CisgICAgICAgICAgICBpKys7CisgICAgICAgIH0KIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJObyBvZiByb3dzIGZvdW5kOiIgKyBpKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTm8gb2Ygcm93cyBleHBlY3RlZDoiICsgbm9PZlJvd3MpOwogCi0JICAgIGlmIChpID09IG5vT2ZSb3dzLmludFZhbHVlKCkpIHsKLQkgICAgICAgYiA9IHRydWU7Ci0JICAgIH0gZWxzZSB7Ci0JICAgICAgIGIgPSBmYWxzZTsKLQkgICAgfQotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgYiA9IGZhbHNlOwotCX0gZmluYWxseSB7Ci0JICAgIHRyeSB7Ci0JICAgICAgICBpZiAocnMgIT0gbnVsbCkgcnMuY2xvc2UoKTsKLQkgICAgICAgIGlmIChzICE9IG51bGwpIHMuY2xvc2UoKTsKLQkgICAgICAgIGlmIChjb24gIT0gbnVsbCkgY29uLmNsb3NlKCk7CisgICAgICAgIGlmIChpID09IG5vT2ZSb3dzLmludFZhbHVlKCkpIHsKKyAgICAgICAgICAgYiA9IHRydWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgIGIgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgYiA9IGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpZiAocnMgIT0gbnVsbCkgcnMuY2xvc2UoKTsKKyAgICAgICAgICAgIGlmIChzICE9IG51bGwpIHMuY2xvc2UoKTsKKyAgICAgICAgICAgIGlmIChjb24gIT0gbnVsbCkgY29uLmNsb3NlKCk7CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICB9Ci0JfQotCVN5c3RlbS5vdXQucHJpbnRsbigiUmV0dXJuaW5nIHNldHVwIDoiICtiKTsKLQlyZXR1cm4gYjsKKyAgICAgICAgfQorICAgIH0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJldHVybmluZyBzZXR1cCA6IiArYik7CisgICAgcmV0dXJuIGI7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0xvY2FsVHJhbnNhY3Rpb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTG9jYWxUcmFuc2FjdGlvbi5qYXZhCmluZGV4IDhlYmUwNTcuLmM1NGEyMTYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTG9jYWxUcmFuc2FjdGlvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTG9jYWxUcmFuc2FjdGlvbi5qYXZhCkBAIC0yMyw0NSArMjMsNDUgQEAKIC8qKgogICogPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gaW1wbGVtZW50YXRpb24gZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wOC8wMwotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDgvMDMKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIHB1YmxpYyBjbGFzcyBMb2NhbFRyYW5zYWN0aW9uIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTG9jYWxUcmFuc2FjdGlvbiB7Ci0gICAgCisKICAgICBwcml2YXRlIE1hbmFnZWRDb25uZWN0aW9uIG1jOwotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0b3IgZm9yIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+LgotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdGhhdCByZXR1cm5zCi0gICAgICoJCQl0aGlzIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IG9iamVjdCBhcwotICAgICAqCQkJYSByZXN1bHQgb2YgPGNvZGU+Z2V0TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHRoYXQgcmV0dXJucworICAgICAqICAgICAgICAgICAgdGhpcyA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBvYmplY3QgYXMKKyAgICAgKiAgICAgICAgICAgIGEgcmVzdWx0IG9mIDxjb2RlPmdldExvY2FsVHJhbnNhY3Rpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIExvY2FsVHJhbnNhY3Rpb24oTWFuYWdlZENvbm5lY3Rpb24gbWMpIHsKICAgICAgICAgdGhpcy5tYyA9IG1jOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEJlZ2luIGEgbG9jYWwgdHJhbnNhY3Rpb24uCiAgICAgICoKLSAgICAgKiBAdGhyb3dzCUxvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2hhbmdpbmcKLSAgICAgKgkJCQkJCXRoZSBhdXRvY29tbWl0IG1vZGUgb2YgdGhlIHBoeXNpY2FsCi0gICAgICoJCQkJCQljb25uZWN0aW9uCisgICAgICogQHRocm93cyAgICBMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNoYW5naW5nCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICB0aGUgYXV0b2NvbW1pdCBtb2RlIG9mIHRoZSBwaHlzaWNhbAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGJlZ2luKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgLy9HSkNJTlQKLQltYy50cmFuc2FjdGlvblN0YXJ0ZWQoKTsKKyAgICBtYy50cmFuc2FjdGlvblN0YXJ0ZWQoKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKS5zZXRBdXRvQ29tbWl0KGZhbHNlKTsKICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IExvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29tbWl0IGEgbG9jYWwgdHJhbnNhY3Rpb24uCi0gICAgICogQHRocm93cwlMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNoYW5naW5nCi0gICAgICoJCQkJCQl0aGUgYXV0b2NvbW1pdCBtb2RlIG9mIHRoZSBwaHlzaWNhbAotICAgICAqCQkJCQkJY29ubmVjdGlvbiBvciBjb21taXR0aW5nIHRoZSB0cmFuc2FjdGlvbgorICAgICAqIEB0aHJvd3MgICAgTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjaGFuZ2luZworICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGF1dG9jb21taXQgbW9kZSBvZiB0aGUgcGh5c2ljYWwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gb3IgY29tbWl0dGluZyB0aGUgdHJhbnNhY3Rpb24KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjb21taXQoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBFeGNlcHRpb24gZSA9IG51bGw7CkBAIC03MiwxNSArNzIsMTUgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgICAgICAvL0dKQ0lOVAotCW1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CisgICAgbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSb2xsYmFjayBhIGxvY2FsIHRyYW5zYWN0aW9uLgotICAgICAqIAotICAgICAqIEB0aHJvd3MJTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjaGFuZ2luZwotICAgICAqCQkJCQkJdGhlIGF1dG9jb21taXQgbW9kZSBvZiB0aGUgcGh5c2ljYWwKLSAgICAgKgkJCQkJCWNvbm5lY3Rpb24gb3Igcm9sbGluZyBiYWNrIHRoZSB0cmFuc2FjdGlvbgorICAgICAqCisgICAgICogQHRocm93cyAgICBMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNoYW5naW5nCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICB0aGUgYXV0b2NvbW1pdCBtb2RlIG9mIHRoZSBwaHlzaWNhbAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbiBvciByb2xsaW5nIGJhY2sgdGhlIHRyYW5zYWN0aW9uCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcm9sbGJhY2soKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICB0cnkgewpAQCAtOTAsNyArOTAsNyBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IExvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgICAgIC8vR0pDSU5UCi0JbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKKyAgICBtYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbi5qYXZhCmluZGV4IDMwZjQ2MGEuLjJkYWQ1OWEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uLmphdmEKQEAgLTQxLDggKzQxLDggQEAKIC8qKgogICogPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMjIKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzIyCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiBwdWJsaWMgY2xhc3MgTWFuYWdlZENvbm5lY3Rpb24gaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiB7CiAKQEAgLTUyLDcgKzUyLDcgQEAKIAogICAgIHByaXZhdGUgYm9vbGVhbiBpc0Rlc3Ryb3llZCA9IGZhbHNlOwogICAgIHByaXZhdGUgYm9vbGVhbiBpc1VzYWJsZSA9IHRydWU7Ci0gICAgCisKICAgICBwcml2YXRlIGludCBjb25uZWN0aW9uVHlwZSA9IElTTk9UQVBPT0xFRENPTk5FQ1RJT047CiAgICAgcHJpdmF0ZSBQb29sZWRDb25uZWN0aW9uIHBjID0gbnVsbDsKICAgICBwcml2YXRlIGphdmEuc3FsLkNvbm5lY3Rpb24gYWN0dWFsQ29ubmVjdGlvbiA9IG51bGw7CkBAIC02Miw3ICs2Miw3IEBACiAgICAgcHJpdmF0ZSBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmID0gbnVsbDsKICAgICBwcml2YXRlIFhBUmVzb3VyY2UgeGFyID0gbnVsbDsKICAgICBwdWJsaWMgQ29ubmVjdGlvbkhvbGRlciBhY3RpdmVDb25uZWN0aW9uSGFuZGxlOwotICAgIAorCiAgICAgLy9HSkNJTlQKICAgICBwcml2YXRlIGludCBpc29sYXRpb25MZXZlbFdoZW5DbGVhbmVkOwogICAgIHByaXZhdGUgYm9vbGVhbiBpc0NsZWFuID0gZmFsc2U7CkBAIC03Nyw3MSArNzcsNzEgQEAKICAgICBzdGF0aWMgewogICAgICAgICBfbG9nZ2VyID0gTG9nZ2VyLmdldEFub255bW91c0xvZ2dlcigpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdG9yIGZvciA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4uIFRoZSBwb29sZWRDb25uIHBhcmFtZXRlciBpcyBleHBlY3RlZAotICAgICAqIHRvIGJlIG51bGwgYW5kIHNxbENvbm4gcGFyYW1ldGVyIGlzIHRoZSBhY3R1YWwgY29ubmVjdGlvbiBpbiBjYXNlIHdoZXJlIAotICAgICAqIHRoZSBhY3R1YWwgY29ubmVjdGlvbiBpcyBnb3QgZnJvbSBhIG5vbiBwb29sZWQgZGF0YXNvdXJjZSBvYmplY3QuIFRoZSAKKyAgICAgKiB0byBiZSBudWxsIGFuZCBzcWxDb25uIHBhcmFtZXRlciBpcyB0aGUgYWN0dWFsIGNvbm5lY3Rpb24gaW4gY2FzZSB3aGVyZQorICAgICAqIHRoZSBhY3R1YWwgY29ubmVjdGlvbiBpcyBnb3QgZnJvbSBhIG5vbiBwb29sZWQgZGF0YXNvdXJjZSBvYmplY3QuIFRoZQogICAgICAqIHBvb2xlZENvbm4gcGFyYW1ldGVyIGlzIGV4cGVjdGVkIHRvIGJlIG5vbiBudWxsIGFuZCBzcWxDb25uIHBhcmFtZXRlcgogICAgICAqIGlzIGV4cGVjdGVkIHRvIGJlIG51bGwgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlIGRhdGFzb3VyY2Ugb2JqZWN0IGlzIGEKICAgICAgKiBjb25uZWN0aW9uIHBvb2wgZGF0YXNvdXJjZSBvciBhbiB4YSBkYXRhc291cmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCXBvb2xlZENvbm4JPGNvZGU+UG9vbGVkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGluIGNhc2UgdGhlIAotICAgICAqCQkJCXBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgdG8gYmUgb2J0YWluZWQgZnJvbSBhIHBvb2xlZAotICAgICAqCQkJCTxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+OyBudWxsIG90aGVyd2lzZQotICAgICAqIEBwYXJhbQlzcWxDb25uCTxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpbiBjYXNlIHRoZSBwaHlzaWNhbAotICAgICAqCQkJY29ubmVjdGlvbiBpcyB0byBiZSBvYnRhaW5lZCBmcm9tIGEgbm9uIHBvb2xlZCA8Y29kZT5EYXRhU291cmNlPC9jb2RlPjsKLSAgICAgKgkJCW51bGwgb3RoZXJ3aXNlCi0gICAgICogQHBhcmFtCXBhc3N3ZENyZWQJb2JqZWN0IGNvbmF0aW5pbmcgdGhlCi0gICAgICoJCQkJdXNlciBhbmQgcGFzc3dvcmQgZm9yIGFsbG9jYXRpbmcgdGhlIGNvbm5lY3Rpb24KLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdAotICAgICAqCQkJCQl0aGF0IGNyZWF0ZWQgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0Ci0gICAgICoJCQkJCWlzIG5vdCB0aGUgc2FtZSBhcyByZXR1cm5lZCBieSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+Ci0gICAgICoJCQkJCW9iamVjdCBwYXNzZWQKKyAgICAgKiBAcGFyYW0gICAgcG9vbGVkQ29ubiAgICA8Y29kZT5Qb29sZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaW4gY2FzZSB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIHRvIGJlIG9idGFpbmVkIGZyb20gYSBwb29sZWQKKyAgICAgKiAgICAgICAgICAgICAgICA8Y29kZT5EYXRhU291cmNlPC9jb2RlPjsgbnVsbCBvdGhlcndpc2UKKyAgICAgKiBAcGFyYW0gICAgc3FsQ29ubiAgICA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaW4gY2FzZSB0aGUgcGh5c2ljYWwKKyAgICAgKiAgICAgICAgICAgIGNvbm5lY3Rpb24gaXMgdG8gYmUgb2J0YWluZWQgZnJvbSBhIG5vbiBwb29sZWQgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT47CisgICAgICogICAgICAgICAgICBudWxsIG90aGVyd2lzZQorICAgICAqIEBwYXJhbSAgICBwYXNzd2RDcmVkICAgIG9iamVjdCBjb25hdGluaW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgIHVzZXIgYW5kIHBhc3N3b3JkIGZvciBhbGxvY2F0aW5nIHRoZSBjb25uZWN0aW9uCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgdGhhdCBjcmVhdGVkIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdAorICAgICAqICAgICAgICAgICAgICAgICAgICBpcyBub3QgdGhlIHNhbWUgYXMgcmV0dXJuZWQgYnkgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgICAgICBvYmplY3QgcGFzc2VkCiAgICAgICovCi0gICAgcHVibGljIE1hbmFnZWRDb25uZWN0aW9uKFBvb2xlZENvbm5lY3Rpb24gcG9vbGVkQ29ubiwgamF2YS5zcWwuQ29ubmVjdGlvbiBzcWxDb25uLCAKKyAgICBwdWJsaWMgTWFuYWdlZENvbm5lY3Rpb24oUG9vbGVkQ29ubmVjdGlvbiBwb29sZWRDb25uLCBqYXZhLnNxbC5Db25uZWN0aW9uIHNxbENvbm4sCiAgICAgICAgIFBhc3N3b3JkQ3JlZGVudGlhbCBwYXNzd2RDcmVkLCBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihwb29sZWRDb25uID09IG51bGwgJiYgc3FsQ29ubiA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkNvbm5lY3Rpb24gb2JqZWN0IGNhbm5vdCBiZSBudWxsIik7CiAgICAgICAgIH0KIAotCWlmIChjb25uZWN0aW9uVHlwZSA9PSBJU05PVEFQT09MRURDT05ORUNUSU9OICkgewotCSAgICBhY3R1YWxDb25uZWN0aW9uID0gc3FsQ29ubjsKLQl9CisgICAgaWYgKGNvbm5lY3Rpb25UeXBlID09IElTTk9UQVBPT0xFRENPTk5FQ1RJT04gKSB7CisgICAgICAgIGFjdHVhbENvbm5lY3Rpb24gPSBzcWxDb25uOworICAgIH0KIAogICAgICAgICBwYyA9IHBvb2xlZENvbm47CiAgICAgICAgIGNvbm5lY3Rpb25IYW5kbGVzID0gbmV3IEhhc2h0YWJsZSgpOwogICAgICAgICBwYXNzd2RDcmVkZW50aWFsID0gcGFzc3dkQ3JlZDsKICAgICAgICAgdGhpcy5tY2YgPSBtY2Y7Ci0gICAgICAgIGlmKHBhc3N3ZENyZWRlbnRpYWwgIT0gbnVsbCAmJiAgCisgICAgICAgIGlmKHBhc3N3ZENyZWRlbnRpYWwgIT0gbnVsbCAmJgogICAgICAgICAgICAgdGhpcy5tY2YuZXF1YWxzKHBhc3N3ZENyZWRlbnRpYWwuZ2V0TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KCkpID09IGZhbHNlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgdGhhdCBoYXMgY3JlYXRlZCB0aGlzICIgKyAKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSB0aGF0IGhhcyBjcmVhdGVkIHRoaXMgIiArCiAgICAgICAgICAgICAgICAgIk1hbmFnZWRDb25uZWN0aW9uIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IHJldHVybmVkIGJ5IiArCiAgICAgICAgICAgICAgICAgICAgICIgdGhlIFBhc3N3b3JkQ3JlZGVudGlhbCBmb3IgdGhpcyBNYW5hZ2VkQ29ubmVjdGlvbiIpOwogICAgICAgICB9CiAgICAgICAgIGxvZ1dyaXRlciA9IG1jZi5nZXRMb2dXcml0ZXIoKTsKICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7Ci0JY2UgPSBuZXcgQ29ubmVjdGlvbkV2ZW50KHRoaXMsIENvbm5lY3Rpb25FdmVudC5DT05ORUNUSU9OX0NMT1NFRCk7CisgICAgY2UgPSBuZXcgQ29ubmVjdGlvbkV2ZW50KHRoaXMsIENvbm5lY3Rpb25FdmVudC5DT05ORUNUSU9OX0NMT1NFRCk7CiAgICAgfQogCiAgICAgLyoqCiAgICAgICogQWRkcyBhIGNvbm5lY3Rpb24gZXZlbnQgbGlzdGVuZXIgdG8gdGhlIE1hbmFnZWRDb25uZWN0aW9uIGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCWxpc3RlbmVyCTxjb2RlPkNvbm5lY3Rpb25FdmVudExpc3RlbmVyPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBsaXN0ZW5lciAgICA8Y29kZT5Db25uZWN0aW9uRXZlbnRMaXN0ZW5lcjwvY29kZT4KICAgICAgKiBAc2VlIDxjb2RlPnJlbW92ZUNvbm5lY3Rpb25FdmVudExpc3RlbmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGFkZENvbm5lY3Rpb25FdmVudExpc3RlbmVyKENvbm5lY3Rpb25FdmVudExpc3RlbmVyIGxpc3RlbmVyKSB7Ci0JdGhpcy5saXN0ZW5lciA9IGxpc3RlbmVyOworICAgIHRoaXMubGlzdGVuZXIgPSBsaXN0ZW5lcjsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBVc2VkIGJ5IHRoZSBjb250YWluZXIgdG8gY2hhbmdlIHRoZSBhc3NvY2lhdGlvbiBvZiBhbiBhcHBsaWNhdGlvbi1sZXZlbCAKKyAgICAgKiBVc2VkIGJ5IHRoZSBjb250YWluZXIgdG8gY2hhbmdlIHRoZSBhc3NvY2lhdGlvbiBvZiBhbiBhcHBsaWNhdGlvbi1sZXZlbAogICAgICAqIGNvbm5lY3Rpb24gaGFuZGxlIHdpdGggYSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JY29ubmVjdGlvbgk8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0byBiZSBhc3NvY2lhdGVkIHdpdGgKLSAgICAgKgkJCQl0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm8gbW9yZQotICAgICAqCQkJCQl2YWxpZCBvciB0aGUgY29ubmVjdGlvbiBoYW5kbGUgcGFzc2VkIGlzIG51bGwKKyAgICAgKiBAcGFyYW0gICAgY29ubmVjdGlvbiAgICA8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0byBiZSBhc3NvY2lhdGVkIHdpdGgKKyAgICAgKiAgICAgICAgICAgICAgICB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm8gbW9yZQorICAgICAqICAgICAgICAgICAgICAgICAgICB2YWxpZCBvciB0aGUgY29ubmVjdGlvbiBoYW5kbGUgcGFzc2VkIGlzIG51bGwKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBhc3NvY2lhdGVDb25uZWN0aW9uKE9iamVjdCBjb25uZWN0aW9uKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtMTUyLDExICsxNTIsMTEgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQ29ubmVjdGlvbiBoYW5kbGUgY2Fubm90IGJlIG51bGwiKTsKICAgICAgICAgfQogICAgICAgICBDb25uZWN0aW9uSG9sZGVyIGNoID0gKENvbm5lY3Rpb25Ib2xkZXIpIGNvbm5lY3Rpb247Ci0gICAgICAgIAorCiAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYyA9IChjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24pY2guZ2V0TWFuYWdlZENvbm5lY3Rpb24oKTsKLQltYy5hY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKLQlpc0NsZWFuID0gZmFsc2U7Ci0gICAgICAgIAorICAgIG1jLmFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOworICAgIGlzQ2xlYW4gPSBmYWxzZTsKKwogICAgICAgICBjaC5hc3NvY2lhdGVDb25uZWN0aW9uKGFjdHVhbENvbm5lY3Rpb24sIHRoaXMpOwogICAgICAgICAvKioKICAgICAgICAgICogVGhlIGV4cGVjdGF0aW9uIGZyb20gdGhlIGFib3ZlIG1ldGhvZCBpcyB0aGF0IHRoZSBjb25uZWN0aW9uIGhvbGRlcgpAQCAtMTY1LDM0ICsxNjUsMzQgQEAKICAgICAgICAgICogdG8gdGhlIE1hbmFnZWRDb25uZWN0aW9uIGluc3RhbmNlIHdpdGggdGhpcyBNYW5hZ2VkQ29ubmVjdGlvbiBpbnN0YW5jZS4KICAgICAgICAgICogQW55IHByZXZpb3VzIHN0YXRlbWVudHMgYW5kIHJlc3VsdCBzZXRzIGFsc28gbmVlZCB0byBiZSByZW1vdmVkLgogICAgICAgICAgKi8KLSAgICAgICAgIAorCiAgICAgICAgICBpZihhY3RpdmVDb25uZWN0aW9uSGFuZGxlICE9IG51bGwpIHsKICAgICAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUuc2V0QWN0aXZlKGZhbHNlKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBjaC5zZXRBY3RpdmUodHJ1ZSk7Ci0gICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBjaDsgCisgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBjaDsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBBcHBsaWNhdGlvbiBzZXJ2ZXIgY2FsbHMgdGhpcyBtZXRob2QgdG8gZm9yY2UgYW55IGNsZWFudXAgb24gdGhlIAorICAgICAqIEFwcGxpY2F0aW9uIHNlcnZlciBjYWxscyB0aGlzIG1ldGhvZCB0byBmb3JjZSBhbnkgY2xlYW51cCBvbiB0aGUKICAgICAgKiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuIFRoaXMgbWV0aG9kIGNhbGxzIHRoZSBpbnZhbGlkYXRlCiAgICAgICogbWV0aG9kIG9uIGFsbCBDb25uZWN0aW9uSGFuZGxlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4uCi0gICAgICogCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBubyBtb3JlIHZhbGlkCisgICAgICoKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vIG1vcmUgdmFsaWQKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjbGVhbnVwKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gY2xlYW51cCIpOwogICAgICAgICB9CiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwotICAgICAgICAKKwogICAgICAgICAvKioKICAgICAgICAgICogbWF5IG5lZWQgdG8gc2V0IHRoZSBhdXRvY29tbWl0IHRvIHRydWUgZm9yIHRoZSBub24tcG9vbGVkIGNhc2UuCiAgICAgICAgICAqLwogICAgICAgICAvL0dKQ0lOVAotCS8vaWYgKGFjdHVhbENvbm5lY3Rpb24gIT0gbnVsbCkgewotCWlmIChjb25uZWN0aW9uVHlwZSA9PSBJU05PVEFQT09MRURDT05ORUNUSU9OICkgeworICAgIC8vaWYgKGFjdHVhbENvbm5lY3Rpb24gIT0gbnVsbCkgeworICAgIGlmIChjb25uZWN0aW9uVHlwZSA9PSBJU05PVEFQT09MRURDT05ORUNUSU9OICkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgaXNvbGF0aW9uTGV2ZWxXaGVuQ2xlYW5lZCA9IGFjdHVhbENvbm5lY3Rpb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKTsKICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewpAQCAtMjAxLDE3ICsyMDEsMTcgQEAKICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGlzQ2xlYW4gPSB0cnVlOwotICAgICAgICAKKwogICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUaGlzIG1ldGhvZCByZW1vdmVzIGFsbCB0aGUgY29ubmVjdGlvbiBoYW5kbGVzIGZyb20gdGhlIHRhYmxlCiAgICAgICogb2YgY29ubmVjdGlvbiBoYW5kbGVzIGFuZCBpbnZhbGlkYXRlcyBhbGwgb2YgdGhlbSBzbyB0aGF0IGFueQogICAgICAqIG9wZXJhdGlvbiBvbiB0aG9zZSBjb25uZWN0aW9uIGhhbmRsZXMgdGhyb3dzIGFuIGV4Y2VwdGlvbi4KICAgICAgKgotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlcmUgaXMgYSBwcm9ibGVtIGluIHJldHJpZXZpbmcKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCXRoZSBjb25uZWN0aW9uIGhhbmRsZXMKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSBpbiByZXRyaWV2aW5nCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY29ubmVjdGlvbiBoYW5kbGVzCiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIGludmFsaWRhdGVBbGxDb25uZWN0aW9uSGFuZGxlcygpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIFNldCBoYW5kbGVzID0gY29ubmVjdGlvbkhhbmRsZXMua2V5U2V0KCk7CkBAIC0yMjYsMjIgKzIyNiwyMiBAQAogICAgICAgICB9CiAgICAgICAgIGNvbm5lY3Rpb25IYW5kbGVzLmNsZWFyKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogRGVzdHJveXMgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gdG8gdGhlIHVuZGVybHlpbmcgcmVzb3VyY2UgbWFuYWdlci4KLSAgICAgKiAKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNsb3NpbmcgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24KKyAgICAgKgorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2xvc2luZyB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb257CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CiAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gZGVzdHJveSIpOwogICAgICAgICB9Ci0JLy9HSkNJTlQKLQlpZihpc0Rlc3Ryb3llZCA9PSB0cnVlKSB7Ci0JICAgIHJldHVybjsJCi0JfQorICAgIC8vR0pDSU5UCisgICAgaWYoaXNEZXN0cm95ZWQgPT0gdHJ1ZSkgeworICAgICAgICByZXR1cm47CisgICAgfQogCi0JYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7CisgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpZihjb25uZWN0aW9uVHlwZSA9PSBJU1hBQ09OTkVDVElPTiB8fCBjb25uZWN0aW9uVHlwZSA9PSBJU1BPT0xFRENPTk5FQ1RJT04pIHsKICAgICAgICAgICAgICAgICBwYy5jbG9zZSgpOwpAQCAtMjU1LDI4ICsyNTUsMjggQEAKICAgICAgICAgICAgIGlzRGVzdHJveWVkID0gdHJ1ZTsKICAgICAgICAgICAgIHBhc3N3ZENyZWRlbnRpYWwgPSBudWxsOwogICAgICAgICAgICAgY29ubmVjdGlvbkhhbmRsZXMgPSBudWxsOwotICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgZm9sbG93aW5nIGV4Y2VwdGlvbiBoYXMgb2NjdXJlZCBkdXJpbmcgZGVzdHJveTogIiAKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGZvbGxvd2luZyBleGNlcHRpb24gaGFzIG9jY3VyZWQgZHVyaW5nIGRlc3Ryb3k6ICIKICAgICAgICAgICAgICAgICArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgICAgICBpc0Rlc3Ryb3llZCA9IHRydWU7CiAgICAgICAgIHBhc3N3ZENyZWRlbnRpYWwgPSBudWxsOwogICAgICAgICBjb25uZWN0aW9uSGFuZGxlcyA9IG51bGw7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIG5ldyBjb25uZWN0aW9uIGhhbmRsZSBmb3IgdGhlIHVuZGVybHlpbmcgcGh5c2ljYWwgCisgICAgICogQ3JlYXRlcyBhIG5ldyBjb25uZWN0aW9uIGhhbmRsZSBmb3IgdGhlIHVuZGVybHlpbmcgcGh5c2ljYWwKICAgICAgKiBjb25uZWN0aW9uIHJlcHJlc2VudGVkIGJ5IHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3ViamVjdAk8Y29kZT5TdWJqZWN0PC9jb2RlPiBwYXJhbWV0ZXIgbmVlZGVkIGZvciBhdXRoZW50aWNhdGlvbgotICAgICAqIEBwYXJhbQljeFJlcUluZm8JPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBjYXJyaWVzIHRoZSB1c2VyIAotICAgICAqICAgICAgIAkgICAgICAgICAJYW5kIHBhc3N3b3JkIHJlcXVpcmVkIGZvciBnZXR0aW5nIHRoaXMgY29ubmVjdGlvbi4KLSAgICAgKiBAcmV0dXJuCUNvbm5lY3Rpb24JdGhlIGNvbm5lY3Rpb24gaGFuZGxlIDxjb2RlPk9iamVjdDwvY29kZT4KLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlIAotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJcGh5c2ljYWwgY29ubmVjdGlvbiBmcm9tIHRoZSBwb29sZWQgY29ubmVjdGlvbiAKLSAgICAgKiBAdGhyb3dzCVNlY3VyaXR5RXhjZXB0aW9uCWlmIHRoZXJlIGlzIGEgbWlzbWF0Y2ggYmV0d2VlbiB0aGUKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCXBhc3N3b3JkIGNyZWRlbnRpYWxzIG9yIHJlYXV0aGVudGljYXRpb24gaXMgcmVxdWVzdGVkCisgICAgICogQHBhcmFtICAgIHN1YmplY3QgICAgPGNvZGU+U3ViamVjdDwvY29kZT4gcGFyYW1ldGVyIG5lZWRlZCBmb3IgYXV0aGVudGljYXRpb24KKyAgICAgKiBAcGFyYW0gICAgY3hSZXFJbmZvICAgIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gY2FycmllcyB0aGUgdXNlcgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHBhc3N3b3JkIHJlcXVpcmVkIGZvciBnZXR0aW5nIHRoaXMgY29ubmVjdGlvbi4KKyAgICAgKiBAcmV0dXJuICAgIENvbm5lY3Rpb24gICAgdGhlIGNvbm5lY3Rpb24gaGFuZGxlIDxjb2RlPk9iamVjdDwvY29kZT4KKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaHlzaWNhbCBjb25uZWN0aW9uIGZyb20gdGhlIHBvb2xlZCBjb25uZWN0aW9uCisgICAgICogQHRocm93cyAgICBTZWN1cml0eUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhIG1pc21hdGNoIGJldHdlZW4gdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzd29yZCBjcmVkZW50aWFscyBvciByZWF1dGhlbnRpY2F0aW9uIGlzIHJlcXVlc3RlZAogICAgICAqLwotICAgIHB1YmxpYyBPYmplY3QgZ2V0Q29ubmVjdGlvbihTdWJqZWN0IHN1YiwgamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxSW5mbykgCisgICAgcHVibGljIE9iamVjdCBnZXRDb25uZWN0aW9uKFN1YmplY3Qgc3ViLCBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm8gY3hSZXFJbmZvKQogICAgICAgICB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGdldENvbm5lY3Rpb24iKTsKQEAgLTI4NCwxNCArMjg0LDE0IEBACiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwogICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxdWVzdEluZm8gPSAoY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mbykgY3hSZXFJbmZvOwogICAgICAgICBQYXNzd29yZENyZWRlbnRpYWwgcGFzc3dkQ3JlZCA9IFNlY3VyaXR5VXRpbHMuZ2V0UGFzc3dvcmRDcmVkZW50aWFsKHRoaXMubWNmLCBzdWIsIGN4UmVxdWVzdEluZm8pOwotICAgICAgICAgICAgCisKICAgICAgICAgaWYoU2VjdXJpdHlVdGlscy5pc1Bhc3N3b3JkQ3JlZGVudGlhbEVxdWFsKHRoaXMucGFzc3dkQ3JlZGVudGlhbCwgcGFzc3dkQ3JlZCkgPT0gZmFsc2UpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBqYWthcnRhLnJlc291cmNlLnNwaS5TZWN1cml0eUV4Y2VwdGlvbigiUmUtYXV0aGVudGljYXRpb24gbm90IHN1cHBvcnRlZCIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIC8vR0pDSU5UCiAgICAgICAgIGdldEFjdHVhbENvbm5lY3Rpb24oKTsKLSAKKwogICAgICAgICAvKioKICAgICAgICAgICogVGhlIGZvbGxvd2luZyBjb2RlIGluIHRoZSBpZiBzdGF0ZW1lbnQgZmlyc3QgY2hlY2tzIGlmIHRoaXMgTWFuYWdlZENvbm5lY3Rpb24KICAgICAgICAgICogaXMgY2xlYW4gb3Igbm90LiBJZiBpdCBpcywgaXQgcmVzZXRzIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwgdG8gd2hhdApAQCAtMzAxLDI4ICszMDEsMjggQEAKICAgICAgICAgaWYoaXNDbGVhbikgewogICAgICAgICAgICAgKChjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KW1jZikucmVzZXRJc29sYXRpb24odGhpcywgaXNvbGF0aW9uTGV2ZWxXaGVuQ2xlYW5lZCk7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgICAKKworCiAgICAgICAgIENvbm5lY3Rpb25Ib2xkZXIgY29ubkhvbGRlck9iamVjdCA9IG5ldyBDb25uZWN0aW9uSG9sZGVyKGFjdHVhbENvbm5lY3Rpb24sIHRoaXMpOwotCWlzQ2xlYW49ZmFsc2U7Ci0gICAgICAgIAorICAgIGlzQ2xlYW49ZmFsc2U7CisKICAgICAgICAgaWYoYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSAhPSBudWxsKSB7CiAgICAgICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlLnNldEFjdGl2ZShmYWxzZSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgY29ubkhvbGRlck9iamVjdC5zZXRBY3RpdmUodHJ1ZSk7CiAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBjb25uSG9sZGVyT2JqZWN0OwotIAorCiAgICAgICAgIHJldHVybiBjb25uSG9sZGVyT2JqZWN0OwotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgYW4gPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gaW5zdGFuY2UuIFRoZSA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBpbnRlcmZhY2UKLSAgICAgKiBpcyB1c2VkIGJ5IHRoZSBjb250YWluZXIgdG8gbWFuYWdlIGxvY2FsIHRyYW5zYWN0aW9ucyBmb3IgYSBSTSBpbnN0YW5jZS4gCisgICAgICogaXMgdXNlZCBieSB0aGUgY29udGFpbmVyIHRvIG1hbmFnZSBsb2NhbCB0cmFuc2FjdGlvbnMgZm9yIGEgUk0gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKi8KICAgICBwdWJsaWMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTG9jYWxUcmFuc2FjdGlvbiBnZXRMb2NhbFRyYW5zYWN0aW9uKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTMzMSwxMyArMzMxLDEzIEBACiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwogICAgICAgICByZXR1cm4gbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5Mb2NhbFRyYW5zYWN0aW9uKHRoaXMpOwogICAgIH0KLSAgICAgCisKICAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBsb2cgd3JpdGVyIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4gCisgICAgICogR2V0cyB0aGUgbG9nIHdyaXRlciBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggdGhpcyAKLSAgICAgKgkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAqICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqIEBzZWUgPGNvZGU+c2V0TG9nV3JpdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBQcmludFdyaXRlciBnZXRMb2dXcml0ZXIoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewpAQCAtMzQ1LDQ2ICszNDUsNDYgQEAKICAgICAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gZ2V0TG9nV3JpdGVyIik7CiAgICAgICAgIH0KICAgICAgICAgY2hlY2tJZlZhbGlkKCk7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBsb2dXcml0ZXI7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogR2V0cyB0aGUgbWV0YWRhdGEgaW5mb3JtYXRpb24gZm9yIHRoaXMgY29ubmVjdGlvbidzIHVuZGVybHlpbmcgRUlTIAotICAgICAqIHJlc291cmNlIG1hbmFnZXIgaW5zdGFuY2UuIAorICAgICAqIEdldHMgdGhlIG1ldGFkYXRhIGluZm9ybWF0aW9uIGZvciB0aGlzIGNvbm5lY3Rpb24ncyB1bmRlcmx5aW5nIEVJUworICAgICAqIHJlc291cmNlIG1hbmFnZXIgaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGE8L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGE8L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKi8KICAgICBwdWJsaWMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YSBnZXRNZXRhRGF0YSgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGdldE1ldGFEYXRhIik7CiAgICAgICAgIH0KICAgICAgICAgY2hlY2tJZlZhbGlkKCk7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEodGhpcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogUmV0dXJucyBhbiA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZS4gCisgICAgICogUmV0dXJucyBhbiA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBvcgotICAgICAqCQkJCQl0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZSAKLSAgICAgKgkJCQkJPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCU5vdFN1cHBvcnRlZEV4Y2VwdGlvbglpZiB1bmRlcmx5aW5nIGRhdGFzb3VyY2UgaXMgbm90IGFuCi0gICAgICoJCQkJCTxjb2RlPlhBRGF0YVNvdXJjZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgb3IKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIE5vdFN1cHBvcnRlZEV4Y2VwdGlvbiAgICBpZiB1bmRlcmx5aW5nIGRhdGFzb3VyY2UgaXMgbm90IGFuCisgICAgICogICAgICAgICAgICAgICAgICAgIDxjb2RlPlhBRGF0YVNvdXJjZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgWEFSZXNvdXJjZSBnZXRYQVJlc291cmNlKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gZ2V0WEFSZXNvdXJjZSIpOwogICAgICAgICB9CiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwotICAgICAgICAKKwogICAgICAgICBpZihjb25uZWN0aW9uVHlwZSA9PSBJU1hBQ09OTkVDVElPTikgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBpZih4YXIgPT0gbnVsbCkgewotCQkgICAgLyoqCisgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgICogVXNpbmcgdGhlIHdyYXBwZXIgWEFSZXNvdXJjZS4KICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgICAgIHhhciA9IG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuWEFSZXNvdXJjZUltcGwoKChYQUNvbm5lY3Rpb24pcGMpLmdldFhBUmVzb3VyY2UoKSwgdGhpcyk7CkBAIC0zOTcsMTYgKzM5NywxNiBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiQ2Fubm90IGdldCBhbiBYQVJlc291cmNlIGZyb20gYSBub24gWEEgY29ubmVjdGlvbiIpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmVtb3ZlcyBhbiBhbHJlYWR5IHJlZ2lzdGVyZWQgY29ubmVjdGlvbiBldmVudCBsaXN0ZW5lciBmcm9tIHRoZQogICAgICAqIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlsaXN0ZW5lcgk8Y29kZT5Db25uZWN0aW9uRXZlbnRMaXN0ZW5lcjwvY29kZT4gdG8gYmUgcmVtb3ZlZAorICAgICAqIEBwYXJhbSAgICBsaXN0ZW5lciAgICA8Y29kZT5Db25uZWN0aW9uRXZlbnRMaXN0ZW5lcjwvY29kZT4gdG8gYmUgcmVtb3ZlZAogICAgICAqIEBzZWUgPGNvZGU+YWRkQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcmVtb3ZlQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXIoQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXIgbGlzdGVuZXIpIHsKLQlsaXN0ZW5lciA9IG51bGw7CisgICAgbGlzdGVuZXIgPSBudWxsOwogICAgIH0KIAogICAgIC8qKgpAQCAtNDE1LDcgKzQxNSw3IEBACiAgICAgICogTG9jYWxUcmFuc2FjdGlvbiBvYmplY3Qgd2hlbiBpdHMgYmVnaW4oKSBtZXRob2QgaXMgY2FsbGVkLgogICAgICAqLwogICAgIHZvaWQgdHJhbnNhY3Rpb25TdGFydGVkKCkgewotCXRyYW5zYWN0aW9uSW5Qcm9ncmVzcyA9IHRydWU7CQorICAgIHRyYW5zYWN0aW9uSW5Qcm9ncmVzcyA9IHRydWU7CiAgICAgfQogCiAgICAgLyoqCkBAIC00MjQsMTYgKzQyNCwxNiBAQAogICAgICAqIExvY2FsVHJhbnNhY3Rpb24gb2JqZWN0IHdoZW4gaXRzIGVuZCgpIG1ldGhvZCBpcyBjYWxsZWQuCiAgICAgICovCiAgICAgdm9pZCB0cmFuc2FjdGlvbkNvbXBsZXRlZCgpIHsKLQl0cmFuc2FjdGlvbkluUHJvZ3Jlc3MgPSBmYWxzZTsKLQlpZihjb25uZWN0aW9uVHlwZSA9PSBJU1BPT0xFRENPTk5FQ1RJT04gfHwgY29ubmVjdGlvblR5cGUgPT0gSVNYQUNPTk5FQ1RJT04pIHsKKyAgICB0cmFuc2FjdGlvbkluUHJvZ3Jlc3MgPSBmYWxzZTsKKyAgICBpZihjb25uZWN0aW9uVHlwZSA9PSBJU1BPT0xFRENPTk5FQ1RJT04gfHwgY29ubmVjdGlvblR5cGUgPT0gSVNYQUNPTk5FQ1RJT04pIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgaXNvbGF0aW9uTGV2ZWxXaGVuQ2xlYW5lZCA9IGFjdHVhbENvbm5lY3Rpb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKTsKICAgICAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgICAgIC8vY2hlY2sgd2hhdCB0byBkbyBpbiB0aGlzIGNhc2UhIQotCQlfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5ub3Rnb3RfdHhfaXNvbHZsIik7CisgICAgICAgICAgICAvL2NoZWNrIHdoYXQgdG8gZG8gaW4gdGhpcyBjYXNlISEKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMubm90Z290X3R4X2lzb2x2bCIpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0JICAgIHRyeSB7CisKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBhY3R1YWxDb25uZWN0aW9uLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgYWN0dWFsQ29ubmVjdGlvbiA9IG51bGw7CiAgICAgICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7CkBAIC00NDEsNyArNDQxLDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0JICAgICAgICAKKwogICAgICAgICBpc0NsZWFuID0gdHJ1ZTsKIAogICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKQEAgLTQ1MywyOCArNDUzLDI4IEBACiAgICAgICogb3Igbm90LgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGlzVHJhbnNhY3Rpb25JblByb2dyZXNzKCkgewotCXJldHVybiB0cmFuc2FjdGlvbkluUHJvZ3Jlc3M7CisgICAgcmV0dXJuIHRyYW5zYWN0aW9uSW5Qcm9ncmVzczsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBsb2cgd3JpdGVyIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlvdXQJPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzCi0gICAgICoJCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqIEBwYXJhbSAgICBvdXQgICAgPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzCisgICAgICogICAgICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqIEBzZWUgPGNvZGU+Z2V0TG9nV3JpdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldExvZ1dyaXRlcihQcmludFdyaXRlciBvdXQpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwogICAgICAgICBsb2dXcml0ZXIgPSBvdXQ7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogVGhpcyBtZXRob2QgZGV0ZXJtaW5lcyB0aGUgdHlwZSBvZiB0aGUgY29ubmVjdGlvbiBiZWluZyBoZWxkIAorICAgICAqIFRoaXMgbWV0aG9kIGRldGVybWluZXMgdGhlIHR5cGUgb2YgdGhlIGNvbm5lY3Rpb24gYmVpbmcgaGVsZAogICAgICAqIGluIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+LgotICAgICAqIAotICAgICAqIEBwYXJhbQlwb29sZWRDb25uCTxjb2RlPlBvb2xlZENvbm5lY3Rpb248L2NvZGU+Ci0gICAgICogQHJldHVybgljb25uZWN0aW9uIHR5cGUKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBwb29sZWRDb25uICAgIDxjb2RlPlBvb2xlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBjb25uZWN0aW9uIHR5cGUKICAgICAgKi8KICAgICBwcml2YXRlIGludCBnZXRDb25uZWN0aW9uVHlwZShQb29sZWRDb25uZWN0aW9uIHBvb2xlZENvbm4pIHsKICAgICAgICAgaWYocG9vbGVkQ29ubiA9PSBudWxsKSB7CkBAIC00ODUsMjIgKzQ4NSwyMiBAQAogICAgICAgICAgICAgcmV0dXJuIElTUE9PTEVEQ09OTkVDVElPTjsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UgdGhhdCAKKyAgICAgKiBSZXR1cm5zIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlIHRoYXQKICAgICAgKiBjcmVhdGVkIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlIHRoYXQgY3JlYXRlZCB0aGlzCi0gICAgICoJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEByZXR1cm4gICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZSB0aGF0IGNyZWF0ZWQgdGhpcworICAgICAqICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKICAgICAgKi8KICAgICBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgZ2V0TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KCkgewogICAgICAgICByZXR1cm4gKGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkpbWNmOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGFjdHVhbCBzcWwgY29ubmVjdGlvbiBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4uIAorICAgICAqIFJldHVybnMgdGhlIGFjdHVhbCBzcWwgY29ubmVjdGlvbiBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRoZSBwaHlzaWNhbCA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgdGhlIHBoeXNpY2FsIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+CiAgICAgICovCiAgICAgLy9HSkNJTlQKICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGdldEFjdHVhbENvbm5lY3Rpb24oKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewpAQCAtNTA5LDggKzUwOSw4IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGlmKGFjdHVhbENvbm5lY3Rpb24gPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICBhY3R1YWxDb25uZWN0aW9uID0gcGMuZ2V0Q29ubmVjdGlvbigpOwotCQl9Ci0JCQorICAgICAgICB9CisKICAgICAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKICAgICAgICAgICAgICAgICBzcWxlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CkBAIC01MTgsODEgKzUxOCw4MSBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBhY3R1YWxDb25uZWN0aW9uOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPi4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcyAKLSAgICAgKgkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCisgICAgICogQHJldHVybiAgICA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzCisgICAgICogICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQogICAgICAqLwogICAgIFBhc3N3b3JkQ3JlZGVudGlhbCBnZXRQYXNzd29yZENyZWRlbnRpYWwoKSB7CiAgICAgICAgIHJldHVybiBwYXNzd2RDcmVkZW50aWFsOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENoZWNrcyBpZiB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpcyB2YWxpZCBvciBub3QgYW5kIHRocm93cyBhbgogICAgICAqIGV4Y2VwdGlvbiBpZiBpdCBpcyBub3QgdmFsaWQuIEEgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGlzIG5vdCB2YWxpZCBpZgogICAgICAqIGRlc3Ryb3kgaGFzIG5vdCBiZWVuIGNhbGxlZCBhbmQgbm8gcGh5c2ljYWwgY29ubmVjdGlvbiBlcnJvciBoYXMKICAgICAgKiBvY2N1cnJlZCByZW5kZXJpbmcgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gdW51c2FibGUuCiAgICAgICoKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIDxjb2RlPmRlc3Ryb3k8L2NvZGU+IGhhcyBiZWVuIGNhbGxlZCBvbiB0aGlzIAotICAgICAqCQkJCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2Ugb3IgaWYgYSAKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCXBoeXNpY2FsIGNvbm5lY3Rpb24gZXJyb3Igb2NjdXJyZWQgcmVuZGVyaW5nIGl0IHVudXNhYmxlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiA8Y29kZT5kZXN0cm95PC9jb2RlPiBoYXMgYmVlbiBjYWxsZWQgb24gdGhpcworICAgICAqICAgICAgICAgICAgICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2Ugb3IgaWYgYQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGh5c2ljYWwgY29ubmVjdGlvbiBlcnJvciBvY2N1cnJlZCByZW5kZXJpbmcgaXQgdW51c2FibGUKICAgICAgKi8KICAgICAvL0dKQ0lOVAogICAgIHZvaWQgY2hlY2tJZlZhbGlkKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYoaXNEZXN0cm95ZWQgPT0gdHJ1ZSB8fCBpc1VzYWJsZSA9PSBmYWxzZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGlzIE1hbmFnZWRDb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyB0aGUgcGh5c2ljYWwgIiArIAorICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGlzIE1hbmFnZWRDb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyB0aGUgcGh5c2ljYWwgIiArCiAgICAgICAgICAgICAgICAgImNvbm5lY3Rpb24gaXMgbm90IHVzYWJsZS4iKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gd2hlbiBpdHMgY2xvc2UgbWV0aG9kIGlzCiAgICAgICogY2FsbGVkLiBUaGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZSAgaW52YWxpZGF0ZXMgdGhlIGNvbm5lY3Rpb24gaGFuZGxlCiAgICAgICogYW5kIHNlbmRzIGEgQ09OTkVDVElPTl9DTE9TRUQgZXZlbnQgdG8gYWxsIHRoZSByZWdpc3RlcmVkIGV2ZW50IGxpc3RlbmVycy4KICAgICAgKgotICAgICAqIEBwYXJhbQllCUV4Y2VwdGlvbiB0aGF0IG1heSBoYXZlIG9jY3VyZWQgd2hpbGUgY2xvc2luZyB0aGUgY29ubmVjdGlvbiBoYW5kbGUKLSAgICAgKiBAcGFyYW0JY29ubkhvbGRlck9iamVjdAk8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0aGF0IGhhcyBiZWVuIGNsb3NlZAotICAgICAqIEB0aHJvd3MJU1FMRXhjZXB0aW9uCWluIGNhc2UgY2xvc2luZyB0aGUgc3FsIGNvbm5lY3Rpb24gZ290IG91dCBvZgotICAgICAqICAgICAgICAgCSAgICAgICAgICAgIAk8Y29kZT5nZXRDb25uZWN0aW9uPC9jb2RlPiBvbiB0aGUgdW5kZXJseWluZyAKLSAgICAgKgkJCQk8Y29kZT5Qb29sZWRDb25uZWN0aW9uPC9jb2RlPiB0aHJvd3MgYW4gZXhjZXB0aW9uCisgICAgICogQHBhcmFtICAgIGUgICAgRXhjZXB0aW9uIHRoYXQgbWF5IGhhdmUgb2NjdXJlZCB3aGlsZSBjbG9zaW5nIHRoZSBjb25uZWN0aW9uIGhhbmRsZQorICAgICAqIEBwYXJhbSAgICBjb25uSG9sZGVyT2JqZWN0ICAgIDxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRoYXQgaGFzIGJlZW4gY2xvc2VkCisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgaW4gY2FzZSBjbG9zaW5nIHRoZSBzcWwgY29ubmVjdGlvbiBnb3Qgb3V0IG9mCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPmdldENvbm5lY3Rpb248L2NvZGU+IG9uIHRoZSB1bmRlcmx5aW5nCisgICAgICogICAgICAgICAgICAgICAgPGNvZGU+UG9vbGVkQ29ubmVjdGlvbjwvY29kZT4gdGhyb3dzIGFuIGV4Y2VwdGlvbgogICAgICAqLwogICAgIHZvaWQgY29ubmVjdGlvbkNsb3NlZChFeGNlcHRpb24gZSwgQ29ubmVjdGlvbkhvbGRlciBjb25uSG9sZGVyT2JqZWN0KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgICAgY29ubkhvbGRlck9iamVjdC5pbnZhbGlkYXRlKCk7Ci0gICAgICAgIAorCiAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOwotICAgICAgICAKKwogICAgICAgICBjZS5zZXRDb25uZWN0aW9uSGFuZGxlKGNvbm5Ib2xkZXJPYmplY3QpOwogICAgICAgICBsaXN0ZW5lci5jb25uZWN0aW9uQ2xvc2VkKGNlKTsKLQkKKwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gd2hlbiBpdCBkZXRlY3RzIGEgY29ubmVjaW9uCiAgICAgICogcmVsYXRlZCBlcnJvci4KICAgICAgKgotICAgICAqIEBwYXJhbQllCUV4Y2VwdGlvbiB0aGF0IGhhcyBvY2N1cnJlZCBkdXJpbmcgYW4gb3BlcmF0aW9uIG9uIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uCi0gICAgICogQHBhcmFtCWNvbm5Ib2xkZXJPYmplY3QJPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdGhhdCBkZXRlY3RlZCB0aGUgcGh5c2ljYWwKLSAgICAgKgkJCQkJY29ubmVjdGlvbiBlcnJvcgorICAgICAqIEBwYXJhbSAgICBlICAgIEV4Y2VwdGlvbiB0aGF0IGhhcyBvY2N1cnJlZCBkdXJpbmcgYW4gb3BlcmF0aW9uIG9uIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uCisgICAgICogQHBhcmFtICAgIGNvbm5Ib2xkZXJPYmplY3QgICAgPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdGhhdCBkZXRlY3RlZCB0aGUgcGh5c2ljYWwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbiBlcnJvcgogICAgICAqLwotICAgIHZvaWQgY29ubmVjdGlvbkVycm9yT2NjdXJyZWQoRXhjZXB0aW9uIGUsIAorICAgIHZvaWQgY29ubmVjdGlvbkVycm9yT2NjdXJyZWQoRXhjZXB0aW9uIGUsCiAgICAgICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbkhvbGRlciBjb25uSG9sZGVyT2JqZWN0KSB7Ci0JICAgIAorCiAgICAgICAgICBDb25uZWN0aW9uRXZlbnRMaXN0ZW5lciBjZWwgPSB0aGlzLmxpc3RlbmVyOwogICAgICAgICAgQ29ubmVjdGlvbkV2ZW50IGNlID0gbnVsbDsKICAgICAgICAgIGNlID0gZSA9PSBudWxsID8gbmV3IENvbm5lY3Rpb25FdmVudCh0aGlzLCBDb25uZWN0aW9uRXZlbnQuQ09OTkVDVElPTl9FUlJPUl9PQ0NVUlJFRCkKICAgICAgICAgICAgICAgICAgICAgOiBuZXcgQ29ubmVjdGlvbkV2ZW50KHRoaXMsIENvbm5lY3Rpb25FdmVudC5DT05ORUNUSU9OX0VSUk9SX09DQ1VSUkVELCBlKTsKICAgICAgICAgIGlmIChjb25uSG9sZGVyT2JqZWN0ICE9IG51bGwpIHsKICAgICAgICAgICAgICBjZS5zZXRDb25uZWN0aW9uSGFuZGxlKGNvbm5Ib2xkZXJPYmplY3QpOwotICAgICAgICAgfSAgICAKKyAgICAgICAgIH0KIAogICAgICAgICAgY2VsLmNvbm5lY3Rpb25FcnJvck9jY3VycmVkKGNlKTsKICAgICAgICAgIGlzVXNhYmxlID0gZmFsc2U7CiAgICAgfQotICAgIAotICAgIAotICAgIAorCisKKwogICAgIC8qKgogICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gb2JqZWN0IHdoZW4gaXRzIHN0YXJ0IG1ldGhvZAogICAgICAqIGhhcyBiZWVuIGludm9rZWQuCkBAIC02MDYsNyArNjA2LDcgQEAKICAgICAgICAgICAgIGNvbm5lY3Rpb25FcnJvck9jY3VycmVkKGUsIG51bGwpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBvYmplY3Qgd2hlbiBpdHMgZW5kIG1ldGhvZAogICAgICAqIGhhcyBiZWVuIGludm9rZWQuCkBAIC02MjAsNyArNjIwLDcgQEAKICAgICAgICAgICAgIGNvbm5lY3Rpb25FcnJvck9jY3VycmVkKGUsIG51bGwpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IGEgQ29ubmVjdGlvbiBIYW5kbGUgdG8gY2hlY2sgaWYgaXQgaXMKICAgICAgKiB0aGUgYWN0aXZlIENvbm5lY3Rpb24gSGFuZGxlLiBJZiBpdCBpcyBub3QgdGhlIGFjdGl2ZSBDb25uZWN0aW9uCkBAIC02MjksMjQgKzYyOSwyNCBAQAogICAgICAqIENvbm5lY3Rpb24gSGFuZGxlIG9iamVjdCB0byB0aGlzIG9iamVjdCBpZiB0aGUgYWN0aXZlIENvbm5lY3Rpb24KICAgICAgKiBIYW5kbGUgaXMgbnVsbC4KICAgICAgKgotICAgICAqIEBwYXJhbQljaAk8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0aGF0IHJlcXVlc3RzIHRoaXMKLSAgICAgKgkJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZSB3aGV0aGVyCi0gICAgICoJCQlpdCBjYW4gYmUgYWN0aXZlIG9yIG5vdAotICAgICAqIEB0aHJvd3MJU1FMRXhjZXB0aW9uCWluIGNhc2UgdGhlIHBoeXNpY2FsIGlzIG5vdCB2YWxpZCBvcgotICAgICAqCQkJCXRoZXJlIGlzIGFscmVhZHkgYW4gYWN0aXZlIGNvbm5lY3Rpb24gaGFuZGxlCisgICAgICogQHBhcmFtICAgIGNoICAgIDxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRoYXQgcmVxdWVzdHMgdGhpcworICAgICAqICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlIHdoZXRoZXIKKyAgICAgKiAgICAgICAgICAgIGl0IGNhbiBiZSBhY3RpdmUgb3Igbm90CisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgaW4gY2FzZSB0aGUgcGh5c2ljYWwgaXMgbm90IHZhbGlkIG9yCisgICAgICogICAgICAgICAgICAgICAgdGhlcmUgaXMgYWxyZWFkeSBhbiBhY3RpdmUgY29ubmVjdGlvbiBoYW5kbGUKICAgICAgKi8KLSAgICAgCisKICAgICB2b2lkIGNoZWNrSWZBY3RpdmUoQ29ubmVjdGlvbkhvbGRlciBjaCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGlzRGVzdHJveWVkID09IHRydWUgfHwgaXNVc2FibGUgPT0gZmFsc2UpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24oIlRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB1c2FibGUiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZihhY3RpdmVDb25uZWN0aW9uSGFuZGxlID09IG51bGwpIHsKICAgICAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBjaDsKICAgICAgICAgICAgIGNoLnNldEFjdGl2ZSh0cnVlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZihhY3RpdmVDb25uZWN0aW9uSGFuZGxlICE9IGNoKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBoYW5kbGUgY2Fubm90IGJlIHVzZWQgYXMgYW5vdGhlciBjb25uZWN0aW9uIGlzIGN1cnJlbnRseSBhY3RpdmUiKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEuamF2YQppbmRleCAyMGYwM2FhLi5mNjUwZDQxIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEuamF2YQpAQCAtMjUsOCArMjUsOCBAQAogLyoqCiAgKiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA4LzAzCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wOC8wMworICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogcHVibGljIGNsYXNzIE1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEgaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhIHsKIApAQCAtNDEsODEgKzQxLDgxIEBACiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0b3IgZm9yIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGE8L2NvZGU+CiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWMJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+Ci0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4JaWYgZ2V0dGluZyB0aGUgRGF0YWJhc2VNZXRhRGF0YSBvYmplY3QgZmFpbHMKKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4gICAgaWYgZ2V0dGluZyB0aGUgRGF0YWJhc2VNZXRhRGF0YSBvYmplY3QgZmFpbHMKICAgICAgKi8KICAgICBwdWJsaWMgTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YShNYW5hZ2VkQ29ubmVjdGlvbiBtYykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHRoaXMubWMgPSBtYzsKICAgICAgICAgICAgIGRtZCA9IG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKS5nZXRNZXRhRGF0YSgpOwogICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX21kIik7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX21kIik7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBwcm9kdWN0IG5hbWUgb2YgdGhlIHVuZGVybHlpbmcgRUlTIGluc3RhbmNlIGNvbm5lY3RlZAogICAgICAqIHRocm91Z2ggdGhlIE1hbmFnZWRDb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybglQcm9kdWN0IG5hbWUgb2YgdGhlIEVJUyBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBQcm9kdWN0IG5hbWUgb2YgdGhlIEVJUyBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRFSVNQcm9kdWN0TmFtZSgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXR1cm4gZG1kLmdldERhdGFiYXNlUHJvZHVjdE5hbWUoKTsKICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19laXNfcHJvZG5hbWUiLCBzcWxlKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZWlzX3Byb2RuYW1lIiwgc3FsZSk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBwcm9kdWN0IHZlcnNpb24gb2YgdGhlIHVuZGVybHlpbmcgRUlTIGluc3RhbmNlIGNvbm5lY3RlZAogICAgICAqIHRocm91Z2ggdGhlIE1hbmFnZWRDb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybglQcm9kdWN0IHZlcnNpb24gb2YgdGhlIEVJUyBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBQcm9kdWN0IHZlcnNpb24gb2YgdGhlIEVJUyBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRFSVNQcm9kdWN0VmVyc2lvbigpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXR1cm4gZG1kLmdldERhdGFiYXNlUHJvZHVjdFZlcnNpb24oKTsKICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19laXNfcHJvZHZlcnMiLCBzcWxlKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZWlzX3Byb2R2ZXJzIiwgc3FsZSk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCksIHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgbWF4aW11bSBsaW1pdCBvbiBudW1iZXIgb2YgYWN0aXZlIGNvbmN1cnJlbnQgY29ubmVjdGlvbnMKICAgICAgKiB0aGF0IGFuIEVJUyBpbnN0YW5jZSBjYW4gc3VwcG9ydCBhY3Jvc3MgY2xpZW50IHByb2Nlc3Nlcy4KICAgICAgKgotICAgICAqIEByZXR1cm4JTWF4aW11bSBsaW1pdCBmb3IgbnVtYmVyIG9mIGFjdGl2ZSBjb25jdXJyZW50IGNvbm5lY3Rpb25zCi0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIE1heGltdW0gbGltaXQgZm9yIG51bWJlciBvZiBhY3RpdmUgY29uY3VycmVudCBjb25uZWN0aW9ucworICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIGludCBnZXRNYXhDb25uZWN0aW9ucygpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXR1cm4gZG1kLmdldE1heENvbm5lY3Rpb25zKCk7CiAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZWlzX21heGNvbm4iKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZWlzX21heGNvbm4iKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIG5hbWUgb2YgdGhlIHVzZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBNYW5hZ2VkQ29ubmVjdGlvbiBpbnN0YW5jZS4gVGhlIG5hbWUKICAgICAgKiBjb3JyZXNwb25kcyB0byB0aGUgcmVzb3VyY2UgcHJpbmNpcGFsIHVuZGVyIHdob3NlIHdob3NlIHNlY3VyaXR5IGNvbnRleHQsIGEgY29ubmVjdGlvbgogICAgICAqIHRvIHRoZSBFSVMgaW5zdGFuY2UgaGFzIGJlZW4gZXN0YWJsaXNoZWQuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCW5hbWUgb2YgdGhlIHVzZXIKLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgbmFtZSBvZiB0aGUgdXNlcgorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRVc2VyTmFtZSgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGpha2FydGEucmVzb3VyY2Uuc3BpLnNlY3VyaXR5LlBhc3N3b3JkQ3JlZGVudGlhbCBwYyA9IG1jLmdldFBhc3N3b3JkQ3JlZGVudGlhbCgpOwogICAgICAgICBpZihwYyAhPSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm4gcGMuZ2V0VXNlck5hbWUoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXR1cm4gbWMuZ2V0TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KCkuZ2V0VXNlcigpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvWEFNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvWEFNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQppbmRleCA0MjI2NThkLi40YzI2MDA5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL1hBTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9YQU1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCkBAIC0zMiwzNiArMzIsMzYgQEAKIC8qKgogICogRGF0YSBTb3VyY2UgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzMwCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8zMAorICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogCiBwdWJsaWMgY2xhc3MgWEFNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgZXh0ZW5kcyBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgewotICAgCisKICAgICBwcml2YXRlIHRyYW5zaWVudCBqYXZheC5zcWwuWEFEYXRhU291cmNlIGRhdGFTb3VyY2VPYmo7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBMb2dnZXIgX2xvZ2dlcjsKICAgICBzdGF0aWMgewogICAgICAgICBfbG9nZ2VyID0gTG9nZ2VyLmdldEFub255bW91c0xvZ2dlcigpOwogICAgIH0KICAgICBwcml2YXRlIGJvb2xlYW4gZGVidWcgPSBmYWxzZTsKLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBuZXcgcGh5c2ljYWwgY29ubmVjdGlvbiB0byB0aGUgdW5kZXJseWluZyBFSVMgcmVzb3VyY2UKICAgICAgKiBtYW5hZ2VyLgotICAgICAqIAotICAgICAqIEBwYXJhbQlzdWJqZWN0CTxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICogQHBhcmFtCWN4UmVxdWVzdEluZm8JPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiB3aGljaCBtYXkgYmUgY3JlYXRlZAotICAgICAqICAgICAgIAkgICAgICAgICAgICAgCWFzIGEgcmVzdWx0IG9mIHRoZSBpbnZvY2F0aW9uIDxjb2RlPmdldENvbm5lY3Rpb24odXNlciwgcGFzc3dvcmQpPC9jb2RlPgotICAgICAqICAgICAgIAkgICAgICAgICAgICAgCW9uIHRoZSA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QKLSAgICAgKiBAcmV0dXJuCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QgY3JlYXRlZAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gaW5zdGFudGlhdGluZyB0aGUKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCTxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdCB1c2VkIGZvciB0aGUKLSAgICAgKiAgICAgICAJCQkJY3JlYXRpb24gb2YgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QKLSAgICAgKiBAdGhyb3dzCVNlY3VyaXR5RXhjZXB0aW9uCWlmIHRoZXJlIGlubyA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdAotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJc2F0aXNmeWluZyB0aGlzIHJlcXVlc3QgCi0gICAgICogQHRocm93cwlSZXNvdXJjZUFsbG9jYXRpb25FeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUgCi0gICAgICoJCQkJCQlwaHlzaWNhbCBjb25uZWN0aW9uCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3ViamVjdCAgICA8Y29kZT5TdWJqZWN0PC9jb2RlPiBpbnN0YW5jZSBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqIEBwYXJhbSAgICBjeFJlcXVlc3RJbmZvICAgIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gd2hpY2ggbWF5IGJlIGNyZWF0ZWQKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyBhIHJlc3VsdCBvZiB0aGUgaW52b2NhdGlvbiA8Y29kZT5nZXRDb25uZWN0aW9uKHVzZXIsIHBhc3N3b3JkKTwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiB0aGUgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0CisgICAgICogQHJldHVybiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGNyZWF0ZWQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGluc3RhbnRpYXRpbmcgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QgdXNlZCBmb3IgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgIGNyZWF0aW9uIG9mIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0CisgICAgICogQHRocm93cyAgICBTZWN1cml0eUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpbm8gPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdGlzZnlpbmcgdGhpcyByZXF1ZXN0CisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUFsbG9jYXRpb25FeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHBoeXNpY2FsIGNvbm5lY3Rpb24KICAgICAgKi8KICAgICBwdWJsaWMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gY3JlYXRlTWFuYWdlZENvbm5lY3Rpb24oamF2YXguc2VjdXJpdHkuYXV0aC5TdWJqZWN0IHN1YmplY3QsCiAgICAgICAgIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBjeFJlcXVlc3RJbmZvKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewpAQCAtNjksMjAgKzY5LDIwIEBACiAgICAgICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGNyZWF0ZU1hbmFnZWRDb25uZWN0aW9uIik7CiAgICAgICAgIH0KICAgICAgICAgUGFzc3dvcmRDcmVkZW50aWFsIHBjID0gU2VjdXJpdHlVdGlscy5nZXRQYXNzd29yZENyZWRlbnRpYWwodGhpcywgc3ViamVjdCwgY3hSZXF1ZXN0SW5mbyk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKGRhdGFTb3VyY2VPYmogPT0gbnVsbCkgewogICAgICAgICAgICAgaWYoZHNPYmpCdWlsZGVyID09IG51bGwpIHsKICAgICAgICAgICAgICAgICBkc09iakJ1aWxkZXIgPSBuZXcgRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIoc3BlYyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGRhdGFTb3VyY2VPYmogPSAoamF2YXguc3FsLlhBRGF0YVNvdXJjZSkgZHNPYmpCdWlsZGVyLmNvbnN0cnVjdERhdGFTb3VyY2VPYmplY3QoKTsKICAgICAgICAgICAgIH0gY2F0Y2goQ2xhc3NDYXN0RXhjZXB0aW9uIGNjZSkgewotCSAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfY2NlIiwgY2NlKTsKKyAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2NjZSIsIGNjZSk7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGpha2FydGEucmVzb3VyY2UuUmVzb3VyY2VFeGNlcHRpb24oY2NlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgamF2YXguc3FsLlhBQ29ubmVjdGlvbiB4YUNvbm4gPSBudWxsOwogCiAgICAgICAgIHRyeSB7CkBAIC0xMDQsNyArMTA0LDcgQEAKICAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLkZJTkUsICJqZGJjLmV4Y19jcmVhdGVfeGFfY29ubiIsIHNxbGUpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbigiY2Fubm90IGFsbG9jYXRlIGNvbm5lY3Rpb24iLCBzcWxlKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWMgPSBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uKHhhQ29ubiwgbnVsbCwgcGMsIHRoaXMpOwogCiAgICAgICAgIG1jLmluaXRpYWxpemVDb25uZWN0aW9uVHlwZShNYW5hZ2VkQ29ubmVjdGlvbi5JU1hBQ09OTkVDVElPTik7CkBAIC0xMTIsMTUgKzExMiwxNSBAQAogLy8gICAgICAgIHZhbGlkYXRlQW5kU2V0SXNvbGF0aW9uKG1jKTsKICAgICAgICAgcmV0dXJuIG1jOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIENoZWNrIGlmIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpcyBlcXVhbCB0byAKKyAgICAgKiBDaGVjayBpZiB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaXMgZXF1YWwgdG8KICAgICAgKiBhbm90aGVyIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4uCi0gICAgICogCi0gICAgICogQHBhcmFtCW90aGVyCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0IGZvciBjaGVja2luZyBlcXVhbGl0eSB3aXRoCi0gICAgICogQHJldHVybgl0cnVlCWlmIHRoZSBwcm9wZXJ0eSBzZXRzIG9mIGJvdGggdGhlIAotICAgICAqCQkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3RzIGFyZSB0aGUgc2FtZQotICAgICAqCQlmYWxzZQlvdGhlcndpc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBvdGhlciAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdCBmb3IgY2hlY2tpbmcgZXF1YWxpdHkgd2l0aAorICAgICAqIEByZXR1cm4gICAgdHJ1ZSAgICBpZiB0aGUgcHJvcGVydHkgc2V0cyBvZiBib3RoIHRoZQorICAgICAqICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3RzIGFyZSB0aGUgc2FtZQorICAgICAqICAgICAgICBmYWxzZSAgICBvdGhlcndpc2UKICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG90aGVyKSB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC0xMzEsNDA5ICsxMzEsNDA5IEBACiAgICAgICAgICAqIGlmIGFuZCBvbmx5IGlmIHRoZWlyIHByb3BlcnRpZXMgYXJlIHRoZSBzYW1lLgogICAgICAgICAgKi8KICAgICAgICAgaWYob3RoZXIgaW5zdGFuY2VvZiBjb20uc3VuLmpkYmNyYS5zcGkuWEFNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkpIHsKLSAgICAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5YQU1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBvdGhlck1DRiA9IAorICAgICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLlhBTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG90aGVyTUNGID0KICAgICAgICAgICAgICAgICAoY29tLnN1bi5qZGJjcmEuc3BpLlhBTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KSBvdGhlcjsKICAgICAgICAgICAgIHJldHVybiB0aGlzLnNwZWMuZXF1YWxzKG90aGVyTUNGLnNwZWMpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBzZXJ2ZXIgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlzZXJ2ZXJOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldFNlcnZlck5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHNlcnZlck5hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0U2VydmVyTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRzZXJ2ZXJOYW1lKFN0cmluZyBzZXJ2ZXJOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlNFUlZFUk5BTUUsIHNlcnZlck5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHNlcnZlciBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglzZXJ2ZXJOYW1lCi0gICAgICogQHNlZQk8Y29kZT5zZXRTZXJ2ZXJOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgc2VydmVyTmFtZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0U2VydmVyTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHNlcnZlck5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5TRVJWRVJOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBzZXJ2ZXIgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlzZXJ2ZXJOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldFNlcnZlck5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHNlcnZlck5hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0U2VydmVyTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJOYW1lKFN0cmluZyBzZXJ2ZXJOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlNFUlZFUk5BTUUsIHNlcnZlck5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHNlcnZlciBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglzZXJ2ZXJOYW1lCi0gICAgICogQHNlZQk8Y29kZT5zZXRTZXJ2ZXJOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgc2VydmVyTmFtZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0U2VydmVyTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFNlcnZlck5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5TRVJWRVJOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBwb3J0IG51bWJlci4KICAgICAgKgotICAgICAqIEBwYXJhbQlwb3J0TnVtYmVyCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldFBvcnROdW1iZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHBvcnROdW1iZXIgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0UG9ydE51bWJlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRwb3J0TnVtYmVyKFN0cmluZyBwb3J0TnVtYmVyKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIsIHBvcnROdW1iZXIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHBvcnQgbnVtYmVyLgogICAgICAqCi0gICAgICogQHJldHVybglwb3J0TnVtYmVyCi0gICAgICogQHNlZQk8Y29kZT5zZXRQb3J0TnVtYmVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgcG9ydE51bWJlcgorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0UG9ydE51bWJlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHBvcnROdW1iZXIoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QT1JUTlVNQkVSKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBwb3J0IG51bWJlci4KICAgICAgKgotICAgICAqIEBwYXJhbQlwb3J0TnVtYmVyCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldFBvcnROdW1iZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHBvcnROdW1iZXIgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0UG9ydE51bWJlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRQb3J0TnVtYmVyKFN0cmluZyBwb3J0TnVtYmVyKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIsIHBvcnROdW1iZXIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHBvcnQgbnVtYmVyLgogICAgICAqCi0gICAgICogQHJldHVybglwb3J0TnVtYmVyCi0gICAgICogQHNlZQk8Y29kZT5zZXRQb3J0TnVtYmVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgcG9ydE51bWJlcgorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0UG9ydE51bWJlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFBvcnROdW1iZXIoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QT1JUTlVNQkVSKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkYXRhYmFzZSBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCWRhdGFiYXNlTmFtZQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREYXRhYmFzZU5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRhdGFiYXNlTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREYXRhYmFzZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0ZGF0YWJhc2VOYW1lKFN0cmluZyBkYXRhYmFzZU5hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQUJBU0VOQU1FLCBkYXRhYmFzZU5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRhdGFiYXNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRhdGFiYXNlTmFtZQotICAgICAqIEBzZWUJPGNvZGU+c2V0RGF0YWJhc2VOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZGF0YWJhc2VOYW1lCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREYXRhYmFzZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRkYXRhYmFzZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBQkFTRU5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRhdGFiYXNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZGF0YWJhc2VOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERhdGFiYXNlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGF0YWJhc2VOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERhdGFiYXNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXREYXRhYmFzZU5hbWUoU3RyaW5nIGRhdGFiYXNlTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBQkFTRU5BTUUsIGRhdGFiYXNlTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGF0YWJhc2UgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGF0YWJhc2VOYW1lCi0gICAgICogQHNlZQk8Y29kZT5zZXREYXRhYmFzZU5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkYXRhYmFzZU5hbWUKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERhdGFiYXNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldERhdGFiYXNlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFCQVNFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGF0YSBzb3VyY2UgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlkc24gPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRzbiA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREYXRhU291cmNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRkYXRhU291cmNlTmFtZShTdHJpbmcgZHNuKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FLCBkc24pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRhdGEgc291cmNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRzbgotICAgICAqIEBzZWUJPGNvZGU+c2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkc24KKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERhdGFTb3VyY2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0ZGF0YVNvdXJjZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBU09VUkNFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGF0YSBzb3VyY2UgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlkc24gPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRzbiA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREYXRhU291cmNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXREYXRhU291cmNlTmFtZShTdHJpbmcgZHNuKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FLCBkc24pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRhdGEgc291cmNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRzbgotICAgICAqIEBzZWUJPGNvZGU+c2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkc24KKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERhdGFTb3VyY2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGF0YVNvdXJjZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBU09VUkNFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGVzY3JpcHRpb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZGVzYwk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREZXNjcmlwdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGVzYyAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREZXNjcmlwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRkZXNjcmlwdGlvbihTdHJpbmcgZGVzYykgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ERVNDUklQVElPTiwgZGVzYyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGVzY3JpcHRpb24uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRlc2MKLSAgICAgKiBAc2VlCTxjb2RlPnNldERlc2NyaXB0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZGVzYworICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGVzY3JpcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRkZXNjcmlwdGlvbigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFU0NSSVBUSU9OKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkZXNjcmlwdGlvbi4KICAgICAgKgotICAgICAqIEBwYXJhbQlkZXNjCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERlc2NyaXB0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkZXNjICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERlc2NyaXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERlc2NyaXB0aW9uKFN0cmluZyBkZXNjKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFU0NSSVBUSU9OLCBkZXNjKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkZXNjcmlwdGlvbi4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGVzYwotICAgICAqIEBzZWUJPGNvZGU+c2V0RGVzY3JpcHRpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBkZXNjCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREZXNjcmlwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVTQ1JJUFRJT04pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIG5ldHdvcmsgcHJvdG9jb2wuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbndQcm90b2NvbAk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CisgICAgICogQHBhcmFtICAgIG53UHJvdG9jb2wgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldG5ldHdvcmtQcm90b2NvbChTdHJpbmcgbndQcm90b2NvbCkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ORVRXT1JLUFJPVE9DT0wsIG53UHJvdG9jb2wpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIG5ldHdvcmsgcHJvdG9jb2wuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCW53UHJvdG9jb2wKLSAgICAgKiBAc2VlCTxjb2RlPnNldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIG53UHJvdG9jb2wKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldG5ldHdvcmtQcm90b2NvbCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk5FVFdPUktQUk9UT0NPTCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgbmV0d29yayBwcm90b2NvbC4KICAgICAgKgotICAgICAqIEBwYXJhbQlud1Byb3RvY29sCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbndQcm90b2NvbCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TmV0d29ya1Byb3RvY29sKFN0cmluZyBud1Byb3RvY29sKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk5FVFdPUktQUk9UT0NPTCwgbndQcm90b2NvbCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgbmV0d29yayBwcm90b2NvbC4KICAgICAgKgotICAgICAqIEByZXR1cm4JbndQcm90b2NvbAotICAgICAqIEBzZWUJPGNvZGU+c2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgbndQcm90b2NvbAorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmV0d29ya1Byb3RvY29sKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTkVUV09SS1BST1RPQ09MKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSByb2xlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jcm9sZU5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0Um9sZU5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHJvbGVOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldFJvbGVOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHJvbGVOYW1lKFN0cmluZyByb2xlTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ST0xFTkFNRSwgcm9sZU5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHJvbGUgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4Jcm9sZU5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldFJvbGVOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgcm9sZU5hbWUKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldFJvbGVOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0cm9sZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ST0xFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgcm9sZSBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCXJvbGVOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldFJvbGVOYW1lPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICByb2xlTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRSb2xlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRSb2xlTmFtZShTdHJpbmcgcm9sZU5hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUk9MRU5BTUUsIHJvbGVOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSByb2xlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXJvbGVOYW1lCi0gICAgICogQHNlZQk8Y29kZT5zZXRSb2xlTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHJvbGVOYW1lCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRSb2xlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFJvbGVOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUk9MRU5BTUUpOwogICAgIH0KIAotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgbG9naW4gdGltZW91dC4KICAgICAgKgotICAgICAqIEBwYXJhbQlsb2dpblRpbWVPdXQJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0TG9naW5UaW1lT3V0PC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBsb2dpblRpbWVPdXQgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0TG9naW5UaW1lT3V0PC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGxvZ2luVGltZU91dChTdHJpbmcgbG9naW5UaW1lT3V0KSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR0lOVElNRU9VVCwgbG9naW5UaW1lT3V0KTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBsb2dpbiB0aW1lb3V0LgogICAgICAqCi0gICAgICogQHJldHVybglsb2dpblRpbWVvdXQKLSAgICAgKiBAc2VlCTxjb2RlPnNldExvZ2luVGltZU91dDwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGxvZ2luVGltZW91dAorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0TG9naW5UaW1lT3V0PC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0bG9naW5UaW1lT3V0KCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HSU5USU1FT1VUKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBsb2dpbiB0aW1lb3V0LgogICAgICAqCi0gICAgICogQHBhcmFtCWxvZ2luVGltZU91dAk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXRMb2dpblRpbWVPdXQ8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGxvZ2luVGltZU91dCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRMb2dpblRpbWVPdXQ8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TG9naW5UaW1lT3V0KFN0cmluZyBsb2dpblRpbWVPdXQpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HSU5USU1FT1VULCBsb2dpblRpbWVPdXQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGxvZ2luIHRpbWVvdXQuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWxvZ2luVGltZW91dAotICAgICAqIEBzZWUJPGNvZGU+c2V0TG9naW5UaW1lT3V0PC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgbG9naW5UaW1lb3V0CisgICAgICogQHNlZSAgICA8Y29kZT5zZXRMb2dpblRpbWVPdXQ8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRMb2dpblRpbWVPdXQoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dJTlRJTUVPVVQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRlbGltaXRlci4KICAgICAgKgotICAgICAqIEBwYXJhbQlkZWxpbQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREZWxpbWl0ZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRlbGltICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERlbGltaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRkZWxpbWl0ZXIoU3RyaW5nIGRlbGltKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUiwgZGVsaW0pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRlbGltaXRlci4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGVsaW0KLSAgICAgKiBAc2VlCTxjb2RlPnNldERlbGltaXRlcjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRlbGltCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREZWxpbWl0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRkZWxpbWl0ZXIoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERUxJTUlURVIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRlbGltaXRlci4KICAgICAgKgotICAgICAqIEBwYXJhbQlkZWxpbQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREZWxpbWl0ZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRlbGltICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERlbGltaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXREZWxpbWl0ZXIoU3RyaW5nIGRlbGltKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUiwgZGVsaW0pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRlbGltaXRlci4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGVsaW0KLSAgICAgKiBAc2VlCTxjb2RlPnNldERlbGltaXRlcjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRlbGltCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREZWxpbWl0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXREZWxpbWl0ZXIoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERUxJTUlURVIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRyaXZlciBzcGVjaWZpYyBwcm9wZXJ0aWVzLgogICAgICAqCi0gICAgICogQHBhcmFtCWRyaXZlclByb3BzCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRyaXZlclByb3BzICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0ZHJpdmVyUHJvcGVydGllcyhTdHJpbmcgZHJpdmVyUHJvcHMpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuRFJJVkVSUFJPUEVSVElFUywgZHJpdmVyUHJvcHMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRyaXZlciBzcGVjaWZpYyBwcm9wZXJ0aWVzLgogICAgICAqCi0gICAgICogQHJldHVybglkcml2ZXJQcm9wcwotICAgICAqIEBzZWUJPGNvZGU+c2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRyaXZlclByb3BzCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0ZHJpdmVyUHJvcGVydGllcygpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRSSVZFUlBST1BFUlRJRVMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRyaXZlciBzcGVjaWZpYyBwcm9wZXJ0aWVzLgogICAgICAqCi0gICAgICogQHBhcmFtCWRyaXZlclByb3BzCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRyaXZlclByb3BzICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RHJpdmVyUHJvcGVydGllcyhTdHJpbmcgZHJpdmVyUHJvcHMpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuRFJJVkVSUFJPUEVSVElFUywgZHJpdmVyUHJvcHMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRyaXZlciBzcGVjaWZpYyBwcm9wZXJ0aWVzLgogICAgICAqCi0gICAgICogQHJldHVybglkcml2ZXJQcm9wcwotICAgICAqIEBzZWUJPGNvZGU+c2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRyaXZlclByb3BzCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RHJpdmVyUHJvcGVydGllcygpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRSSVZFUlBST1BFUlRJRVMpOwpAQCAtNTQzLDM1ICs1NDMsMzUgQEAKICAgICAgKiBDaGVjayBpZiB0aGUgUGFzc3dvcmRDcmVkZW50aWFsIHBhc3NlZCBmb3IgdGhpcyBnZXQgY29ubmVjdGlvbgogICAgICAqIHJlcXVlc3QgaXMgZXF1YWwgdG8gdGhlIHVzZXIvcGFzc3dkIG9mIHRoaXMgY29ubmVjdGlvbiBwb29sLgogICAgICAqLwotICAgIHByaXZhdGUgYm9vbGVhbiBpc0VxdWFsKCBQYXNzd29yZENyZWRlbnRpYWwgcGMsIFN0cmluZyB1c2VyLCAKKyAgICBwcml2YXRlIGJvb2xlYW4gaXNFcXVhbCggUGFzc3dvcmRDcmVkZW50aWFsIHBjLCBTdHJpbmcgdXNlciwKICAgICAgICAgU3RyaW5nIHBhc3N3b3JkKSB7Ci0gICAgICAgIAotCS8vaWYgZXF1YWwgZ2V0IGRpcmVjdCBjb25uZWN0aW9uIGVsc2UgCi0JLy9nZXQgY29ubmVjdGlvbiB3aXRoIHVzZXIgYW5kIHBhc3N3b3JkLgotCQotCWlmICh1c2VyID09IG51bGwgJiYgcGMgPT0gbnVsbCkgewotCSAgICByZXR1cm4gdHJ1ZTsKLQl9Ci0JCi0JaWYgKCB1c2VyID09IG51bGwgJiYgcGMgIT0gbnVsbCApIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQl9CiAKLQlpZiggcGMgPT0gbnVsbCApIHsKLQkgICAgcmV0dXJuIHRydWU7Ci0JfQotCQotCWlmICggdXNlci5lcXVhbHMoIHBjLmdldFVzZXJOYW1lKCkgKSApIHsKLQkgICAgaWYgKCBwYXNzd29yZCA9PSBudWxsICYmIHBjLmdldFBhc3N3b3JkKCkgPT0gbnVsbCApIHsKLQkgICAgICAgIHJldHVybiB0cnVlOwotCSAgICB9Ci0JfQotCQotCWlmICggdXNlci5lcXVhbHMocGMuZ2V0VXNlck5hbWUoKSkgJiYgcGFzc3dvcmQuZXF1YWxzKHBjLmdldFBhc3N3b3JkKCkpICkgewotCSAgICByZXR1cm4gdHJ1ZTsKLQl9IAotCQotICAgICAgICAKLQlyZXR1cm4gZmFsc2U7CisgICAgLy9pZiBlcXVhbCBnZXQgZGlyZWN0IGNvbm5lY3Rpb24gZWxzZQorICAgIC8vZ2V0IGNvbm5lY3Rpb24gd2l0aCB1c2VyIGFuZCBwYXNzd29yZC4KKworICAgIGlmICh1c2VyID09IG51bGwgJiYgcGMgPT0gbnVsbCkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIHVzZXIgPT0gbnVsbCAmJiBwYyAhPSBudWxsICkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmKCBwYyA9PSBudWxsICkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIHVzZXIuZXF1YWxzKCBwYy5nZXRVc2VyTmFtZSgpICkgKSB7CisgICAgICAgIGlmICggcGFzc3dvcmQgPT0gbnVsbCAmJiBwYy5nZXRQYXNzd29yZCgpID09IG51bGwgKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICggdXNlci5lcXVhbHMocGMuZ2V0VXNlck5hbWUoKSkgJiYgcGFzc3dvcmQuZXF1YWxzKHBjLmdldFBhc3N3b3JkKCkpICkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKworICAgIHJldHVybiBmYWxzZTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL1hBUmVzb3VyY2VJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL1hBUmVzb3VyY2VJbXBsLmphdmEKaW5kZXggZGFkMWQ3Ny4uNDgyZjMzMiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9YQVJlc291cmNlSW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvWEFSZXNvdXJjZUltcGwuamF2YQpAQCAtMjQsMTQ4ICsyNCwxNDggQEAKIC8qKgogICogPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gd3JhcHBlciBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA4LzIzCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wOC8yMworICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogcHVibGljIGNsYXNzIFhBUmVzb3VyY2VJbXBsIGltcGxlbWVudHMgWEFSZXNvdXJjZSB7CiAKICAgICBYQVJlc291cmNlIHhhcjsKICAgICBNYW5hZ2VkQ29ubmVjdGlvbiBtYzsKLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdG9yIGZvciBYQVJlc291cmNlSW1wbAogICAgICAqCi0gICAgICogQHBhcmFtCXhhcgk8Y29kZT5YQVJlc291cmNlPC9jb2RlPgotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgeGFyICAgIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+CisgICAgICogQHBhcmFtICAgIG1jICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBYQVJlc291cmNlSW1wbChYQVJlc291cmNlIHhhciwgTWFuYWdlZENvbm5lY3Rpb24gbWMpIHsKICAgICAgICAgdGhpcy54YXIgPSB4YXI7CiAgICAgICAgIHRoaXMubWMgPSBtYzsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb21taXQgdGhlIGdsb2JhbCB0cmFuc2FjdGlvbiBzcGVjaWZpZWQgYnkgeGlkLgogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCi0gICAgICogQHBhcmFtCW9uZVBoYXNlCUlmIHRydWUsIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHNob3VsZCB1c2UgYSBvbmUtcGhhc2UgY29tbWl0IAotICAgICAqICAgICAgIAkgICAgICAgIAlwcm90b2NvbCB0byBjb21taXQgdGhlIHdvcmsgZG9uZSBvbiBiZWhhbGYgb2YgeGlkLgorICAgICAqIEBwYXJhbSAgICB4aWQgICAgQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgorICAgICAqIEBwYXJhbSAgICBvbmVQaGFzZSAgICBJZiB0cnVlLCB0aGUgcmVzb3VyY2UgbWFuYWdlciBzaG91bGQgdXNlIGEgb25lLXBoYXNlIGNvbW1pdAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICBwcm90b2NvbCB0byBjb21taXQgdGhlIHdvcmsgZG9uZSBvbiBiZWhhbGYgb2YgeGlkLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNvbW1pdChYaWQgeGlkLCBib29sZWFuIG9uZVBoYXNlKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICAvL3RoZSBtYy50cmFuc2FjdGlvbkNvbXBsZXRlZCBjYWxsIGhhcyBjb21lIGhlcmUgYmVjYXN1ZQotCS8vdGhlIHRyYW5zYWN0aW9uICphY3R1YWxseSogY29tcGxldGVzIGFmdGVyIHRoZSBmbG93Ci0JLy9yZWFjaGVzIGhlcmUuIHRoZSBlbmQoKSBtZXRob2QgbWlnaHQgbm90IHJlYWxseSBzaWduYWwKLQkvL2NvbXBsZXRpb24gb2YgdHJhbnNhY3Rpb24gaW4gY2FzZSB0aGUgdHJhbnNhY3Rpb24gaXMKLQkvL3N1c3BlbmRlZC4gSW4gY2FzZSBvZiB0cmFuc2FjdGlvbiBzdXNwZW5zaW9uLCB0aGUgZW5kCi0JLy9tZXRob2QgaXMgc3RpbGwgY2FsbGVkIGJ5IHRoZSB0cmFuc2FjdGlvbiBtYW5hZ2VyCi0JbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKKyAgICAvL3RoZSB0cmFuc2FjdGlvbiAqYWN0dWFsbHkqIGNvbXBsZXRlcyBhZnRlciB0aGUgZmxvdworICAgIC8vcmVhY2hlcyBoZXJlLiB0aGUgZW5kKCkgbWV0aG9kIG1pZ2h0IG5vdCByZWFsbHkgc2lnbmFsCisgICAgLy9jb21wbGV0aW9uIG9mIHRyYW5zYWN0aW9uIGluIGNhc2UgdGhlIHRyYW5zYWN0aW9uIGlzCisgICAgLy9zdXNwZW5kZWQuIEluIGNhc2Ugb2YgdHJhbnNhY3Rpb24gc3VzcGVuc2lvbiwgdGhlIGVuZAorICAgIC8vbWV0aG9kIGlzIHN0aWxsIGNhbGxlZCBieSB0aGUgdHJhbnNhY3Rpb24gbWFuYWdlcgorICAgIG1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiAgICAgICAgIHhhci5jb21taXQoeGlkLCBvbmVQaGFzZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogRW5kcyB0aGUgd29yayBwZXJmb3JtZWQgb24gYmVoYWxmIG9mIGEgdHJhbnNhY3Rpb24gYnJhbmNoLgogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyIHRoYXQgaXMgdGhlIHNhbWUgYXMgd2hhdCAKLSAgICAgKgkJCXdhcyB1c2VkIHByZXZpb3VzbHkgaW4gdGhlIHN0YXJ0IG1ldGhvZC4KLSAgICAgKiBAcGFyYW0JZmxhZ3MJT25lIG9mIFRNU1VDQ0VTUywgVE1GQUlMLCBvciBUTVNVU1BFTkQKKyAgICAgKiBAcGFyYW0gICAgeGlkICAgIEEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIgdGhhdCBpcyB0aGUgc2FtZSBhcyB3aGF0CisgICAgICogICAgICAgICAgICB3YXMgdXNlZCBwcmV2aW91c2x5IGluIHRoZSBzdGFydCBtZXRob2QuCisgICAgICogQHBhcmFtICAgIGZsYWdzICAgIE9uZSBvZiBUTVNVQ0NFU1MsIFRNRkFJTCwgb3IgVE1TVVNQRU5ECiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZW5kKFhpZCB4aWQsIGludCBmbGFncykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgeGFyLmVuZCh4aWQsIGZsYWdzKTsKICAgICAgICAgLy9HSkNJTlQKLQkvL21jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CisgICAgLy9tYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRlbGwgdGhlIHJlc291cmNlIG1hbmFnZXIgdG8gZm9yZ2V0IGFib3V0IGEgaGV1cmlzdGljYWxseSBjb21wbGV0ZWQgdHJhbnNhY3Rpb24gYnJhbmNoLgogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCisgICAgICogQHBhcmFtICAgIHhpZCAgICBBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZm9yZ2V0KFhpZCB4aWQpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHhhci5mb3JnZXQoeGlkKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBPYnRhaW4gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBzZXQgZm9yIHRoaXMgCisgICAgICogT2J0YWluIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgc2V0IGZvciB0aGlzCiAgICAgICogPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRoZSB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIGluIHNlY29uZHMKKyAgICAgKiBAcmV0dXJuICAgIHRoZSB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIGluIHNlY29uZHMKICAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldFRyYW5zYWN0aW9uVGltZW91dCgpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiB4YXIuZ2V0VHJhbnNhY3Rpb25UaW1lb3V0KCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIGRldGVybWluZSBpZiB0aGUgcmVzb3VyY2UgbWFuYWdlciBpbnN0YW5jZSAKLSAgICAgKiByZXByZXNlbnRlZCBieSB0aGUgdGFyZ2V0IG9iamVjdCBpcyB0aGUgc2FtZSBhcyB0aGUgcmVzb3VjZSBtYW5hZ2VyIAorICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB0byBkZXRlcm1pbmUgaWYgdGhlIHJlc291cmNlIG1hbmFnZXIgaW5zdGFuY2UKKyAgICAgKiByZXByZXNlbnRlZCBieSB0aGUgdGFyZ2V0IG9iamVjdCBpcyB0aGUgc2FtZSBhcyB0aGUgcmVzb3VjZSBtYW5hZ2VyCiAgICAgICogaW5zdGFuY2UgcmVwcmVzZW50ZWQgYnkgdGhlIHBhcmFtZXRlciB4YXJlcy4KICAgICAgKgotICAgICAqIEBwYXJhbQl4YXJlcwlBbiA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBvYmplY3Qgd2hvc2UgcmVzb3VyY2UgbWFuYWdlciAKLSAgICAgKiAJCQlpbnN0YW5jZSBpcyB0byBiZSBjb21wYXJlZCB3aXRoIHRoZSByZXNvdXJjZQotICAgICAqIEByZXR1cm4JdHJ1ZSBpZiBpdCdzIHRoZSBzYW1lIFJNIGluc3RhbmNlOyBvdGhlcndpc2UgZmFsc2UuCisgICAgICogQHBhcmFtICAgIHhhcmVzICAgIEFuIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IG9iamVjdCB3aG9zZSByZXNvdXJjZSBtYW5hZ2VyCisgICAgICogICAgICAgICAgICAgaW5zdGFuY2UgaXMgdG8gYmUgY29tcGFyZWQgd2l0aCB0aGUgcmVzb3VyY2UKKyAgICAgKiBAcmV0dXJuICAgIHRydWUgaWYgaXQncyB0aGUgc2FtZSBSTSBpbnN0YW5jZTsgb3RoZXJ3aXNlIGZhbHNlLgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGlzU2FtZVJNKFhBUmVzb3VyY2UgeGFyZXMpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiB4YXIuaXNTYW1lUk0oeGFyZXMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIEFzayB0aGUgcmVzb3VyY2UgbWFuYWdlciB0byBwcmVwYXJlIGZvciBhIHRyYW5zYWN0aW9uIGNvbW1pdCAKKyAgICAgKiBBc2sgdGhlIHJlc291cmNlIG1hbmFnZXIgdG8gcHJlcGFyZSBmb3IgYSB0cmFuc2FjdGlvbiBjb21taXQKICAgICAgKiBvZiB0aGUgdHJhbnNhY3Rpb24gc3BlY2lmaWVkIGluIHhpZC4KICAgICAgKgotICAgICAqIEBwYXJhbQl4aWQJQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgotICAgICAqIEByZXR1cm4JQSB2YWx1ZSBpbmRpY2F0aW5nIHRoZSByZXNvdXJjZSBtYW5hZ2VyJ3Mgdm90ZSBvbiB0aGUgCi0gICAgICoJCW91dGNvbWUgb2YgdGhlIHRyYW5zYWN0aW9uLiBUaGUgcG9zc2libGUgdmFsdWVzCi0gICAgICoJCWFyZTogWEFfUkRPTkxZIG9yIFhBX09LLiBJZiB0aGUgcmVzb3VyY2UgbWFuYWdlciB3YW50cyAKLSAgICAgKgkJdG8gcm9sbCBiYWNrIHRoZSB0cmFuc2FjdGlvbiwgaXQgc2hvdWxkIGRvIHNvCi0gICAgICoJCWJ5IHJhaXNpbmcgYW4gYXBwcm9wcmlhdGUgPGNvZGU+WEFFeGNlcHRpb248L2NvZGU+IGluIHRoZSBwcmVwYXJlIG1ldGhvZC4KKyAgICAgKiBAcGFyYW0gICAgeGlkICAgIEEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKKyAgICAgKiBAcmV0dXJuICAgIEEgdmFsdWUgaW5kaWNhdGluZyB0aGUgcmVzb3VyY2UgbWFuYWdlcidzIHZvdGUgb24gdGhlCisgICAgICogICAgICAgIG91dGNvbWUgb2YgdGhlIHRyYW5zYWN0aW9uLiBUaGUgcG9zc2libGUgdmFsdWVzCisgICAgICogICAgICAgIGFyZTogWEFfUkRPTkxZIG9yIFhBX09LLiBJZiB0aGUgcmVzb3VyY2UgbWFuYWdlciB3YW50cworICAgICAqICAgICAgICB0byByb2xsIGJhY2sgdGhlIHRyYW5zYWN0aW9uLCBpdCBzaG91bGQgZG8gc28KKyAgICAgKiAgICAgICAgYnkgcmFpc2luZyBhbiBhcHByb3ByaWF0ZSA8Y29kZT5YQUV4Y2VwdGlvbjwvY29kZT4gaW4gdGhlIHByZXBhcmUgbWV0aG9kLgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgcHJlcGFyZShYaWQgeGlkKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICByZXR1cm4geGFyLnByZXBhcmUoeGlkKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBPYnRhaW4gYSBsaXN0IG9mIHByZXBhcmVkIHRyYW5zYWN0aW9uIGJyYW5jaGVzIGZyb20gYSByZXNvdXJjZSBtYW5hZ2VyLgogICAgICAqCi0gICAgICogQHBhcmFtCWZsYWcJT25lIG9mIFRNU1RBUlRSU0NBTiwgVE1FTkRSU0NBTiwgVE1OT0ZMQUdTLiBUTU5PRkxBR1MgCi0gICAgICoJCQltdXN0IGJlIHVzZWQgd2hlbiBubyBvdGhlciBmbGFncyBhcmUgc2V0IGluIGZsYWdzLgotICAgICAqIEByZXR1cm4JVGhlIHJlc291cmNlIG1hbmFnZXIgcmV0dXJucyB6ZXJvIG9yIG1vcmUgWElEcyBmb3IgdGhlIHRyYW5zYWN0aW9uIAotICAgICAqCQlicmFuY2hlcyB0aGF0IGFyZSBjdXJyZW50bHkgaW4gYSBwcmVwYXJlZCBvciBoZXVyaXN0aWNhbGx5IAotICAgICAqCQljb21wbGV0ZWQgc3RhdGUuIElmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIG9wZXJhdGlvbiwgdGhlIHJlc291cmNlCi0gICAgICoJCW1hbmFnZXIgc2hvdWxkIHRocm93IHRoZSBhcHByb3ByaWF0ZSA8Y29kZT5YQUV4Y2VwdGlvbjwvY29kZT4uCisgICAgICogQHBhcmFtICAgIGZsYWcgICAgT25lIG9mIFRNU1RBUlRSU0NBTiwgVE1FTkRSU0NBTiwgVE1OT0ZMQUdTLiBUTU5PRkxBR1MKKyAgICAgKiAgICAgICAgICAgIG11c3QgYmUgdXNlZCB3aGVuIG5vIG90aGVyIGZsYWdzIGFyZSBzZXQgaW4gZmxhZ3MuCisgICAgICogQHJldHVybiAgICBUaGUgcmVzb3VyY2UgbWFuYWdlciByZXR1cm5zIHplcm8gb3IgbW9yZSBYSURzIGZvciB0aGUgdHJhbnNhY3Rpb24KKyAgICAgKiAgICAgICAgYnJhbmNoZXMgdGhhdCBhcmUgY3VycmVudGx5IGluIGEgcHJlcGFyZWQgb3IgaGV1cmlzdGljYWxseQorICAgICAqICAgICAgICBjb21wbGV0ZWQgc3RhdGUuIElmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIG9wZXJhdGlvbiwgdGhlIHJlc291cmNlCisgICAgICogICAgICAgIG1hbmFnZXIgc2hvdWxkIHRocm93IHRoZSBhcHByb3ByaWF0ZSA8Y29kZT5YQUV4Y2VwdGlvbjwvY29kZT4uCiAgICAgICovCiAgICAgcHVibGljIFhpZFtdIHJlY292ZXIoaW50IGZsYWcpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiB4YXIucmVjb3ZlcihmbGFnKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBJbmZvcm0gdGhlIHJlc291cmNlIG1hbmFnZXIgdG8gcm9sbCBiYWNrIHdvcmsgZG9uZSBvbiBiZWhhbGYgb2YgYSB0cmFuc2FjdGlvbiBicmFuY2gKICAgICAgKgotICAgICAqIEBwYXJhbQl4aWQJQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgorICAgICAqIEBwYXJhbSAgICB4aWQgICAgQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJvbGxiYWNrKFhpZCB4aWQpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIC8vdGhlIG1jLnRyYW5zYWN0aW9uQ29tcGxldGVkIGNhbGwgaGFzIGNvbWUgaGVyZSBiZWNhc3VlCi0JLy90aGUgdHJhbnNhY3Rpb24gKmFjdHVhbGx5KiBjb21wbGV0ZXMgYWZ0ZXIgdGhlIGZsb3cKLQkvL3JlYWNoZXMgaGVyZS4gdGhlIGVuZCgpIG1ldGhvZCBtaWdodCBub3QgcmVhbGx5IHNpZ25hbAotCS8vY29tcGxldGlvbiBvZiB0cmFuc2FjdGlvbiBpbiBjYXNlIHRoZSB0cmFuc2FjdGlvbiBpcwotCS8vc3VzcGVuZGVkLiBJbiBjYXNlIG9mIHRyYW5zYWN0aW9uIHN1c3BlbnNpb24sIHRoZSBlbmQKLQkvL21ldGhvZCBpcyBzdGlsbCBjYWxsZWQgYnkgdGhlIHRyYW5zYWN0aW9uIG1hbmFnZXIKKyAgICAvL3RoZSB0cmFuc2FjdGlvbiAqYWN0dWFsbHkqIGNvbXBsZXRlcyBhZnRlciB0aGUgZmxvdworICAgIC8vcmVhY2hlcyBoZXJlLiB0aGUgZW5kKCkgbWV0aG9kIG1pZ2h0IG5vdCByZWFsbHkgc2lnbmFsCisgICAgLy9jb21wbGV0aW9uIG9mIHRyYW5zYWN0aW9uIGluIGNhc2UgdGhlIHRyYW5zYWN0aW9uIGlzCisgICAgLy9zdXNwZW5kZWQuIEluIGNhc2Ugb2YgdHJhbnNhY3Rpb24gc3VzcGVuc2lvbiwgdGhlIGVuZAorICAgIC8vbWV0aG9kIGlzIHN0aWxsIGNhbGxlZCBieSB0aGUgdHJhbnNhY3Rpb24gbWFuYWdlcgogICAgICAgICBtYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOwogICAgICAgICB4YXIucm9sbGJhY2soeGlkKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBmb3IgdGhpcyA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlzZWNvbmRzCXRoZSB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIGluIHNlY29uZHMuCi0gICAgICogQHJldHVybgl0cnVlIGlmIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaXMgc2V0IHN1Y2Nlc3NmdWxseTsgb3RoZXJ3aXNlIGZhbHNlLgorICAgICAqIEBwYXJhbSAgICBzZWNvbmRzICAgIHRoZSB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIGluIHNlY29uZHMuCisgICAgICogQHJldHVybiAgICB0cnVlIGlmIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaXMgc2V0IHN1Y2Nlc3NmdWxseTsgb3RoZXJ3aXNlIGZhbHNlLgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIHNldFRyYW5zYWN0aW9uVGltZW91dChpbnQgc2Vjb25kcykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIHhhci5zZXRUcmFuc2FjdGlvblRpbWVvdXQoc2Vjb25kcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU3RhcnQgd29yayBvbiBiZWhhbGYgb2YgYSB0cmFuc2FjdGlvbiBicmFuY2ggc3BlY2lmaWVkIGluIHhpZC4KICAgICAgKgotICAgICAqIEBwYXJhbQl4aWQJQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllciB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIHJlc291cmNlCi0gICAgICogQHJldHVybglmbGFncwlPbmUgb2YgVE1OT0ZMQUdTLCBUTUpPSU4sIG9yIFRNUkVTVU1FCisgICAgICogQHBhcmFtICAgIHhpZCAgICBBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVzb3VyY2UKKyAgICAgKiBAcmV0dXJuICAgIGZsYWdzICAgIE9uZSBvZiBUTU5PRkxBR1MsIFRNSk9JTiwgb3IgVE1SRVNVTUUKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzdGFydChYaWQgeGlkLCBpbnQgZmxhZ3MpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIC8vR0pDSU5UCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9NZXRob2RFeGVjdXRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvTWV0aG9kRXhlY3V0b3IuamF2YQppbmRleCBjZTMyMWFmLi45ZTdmMjUzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9NZXRob2RFeGVjdXRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL01ldGhvZEV4ZWN1dG9yLmphdmEKQEAgLTI2LDggKzI2LDggQEAKIC8qKgogICogRXhlY3V0ZSB0aGUgbWV0aG9kcyBiYXNlZCBvbiB0aGUgcGFyYW1ldGVycy4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzIzCi0gKiBAYXV0aG9yCUJpbm9kIFAuRworICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8yMworICogQGF1dGhvciAgICBCaW5vZCBQLkcKICAqLwogcHVibGljIGNsYXNzIE1ldGhvZEV4ZWN1dG9yIGltcGxlbWVudHMgamF2YS5pby5TZXJpYWxpemFibGV7CiAKQEAgLTM5LDEzMCArMzksMTMwIEBACiAgICAgLyoqCiAgICAgICogRXhjZXV0ZSBhIHNpbXBsZSBzZXQgTWV0aG9kLgogICAgICAqCi0gICAgICogQHBhcmFtCXZhbHVlCVZhbHVlIHRvIGJlIHNldC4KLSAgICAgKiBAcGFyYW0JbWV0aG9kCTxjb2RlPk1ldGhvZDwvY29kZT4gb2JqZWN0LgotICAgICAqIEBwYXJhbQlvYmoJT2JqZWN0IG9uIHdoaWNoIHRoZSBtZXRob2QgdG8gYmUgZXhlY3V0ZWQuCisgICAgICogQHBhcmFtICAgIHZhbHVlICAgIFZhbHVlIHRvIGJlIHNldC4KKyAgICAgKiBAcGFyYW0gICAgbWV0aG9kICAgIDxjb2RlPk1ldGhvZDwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBvYmogICAgT2JqZWN0IG9uIHdoaWNoIHRoZSBtZXRob2QgdG8gYmUgZXhlY3V0ZWQuCiAgICAgICogQHRocm93cyAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+LCBpbiBjYXNlIG9mIHRoZSBtaXNtYXRjaCBvZiBwYXJhbWV0ZXIgdmFsdWVzIG9yCi0gICAgICoJCWEgc2VjdXJpdHkgdmlvbGF0aW9uLiAgICAgCisgICAgICogICAgICAgIGEgc2VjdXJpdHkgdmlvbGF0aW9uLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJ1bkphdmFCZWFuTWV0aG9kKFN0cmluZyB2YWx1ZSwgTWV0aG9kIG1ldGhvZCwgT2JqZWN0IG9iaikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewotICAgIAlpZiAodmFsdWU9PW51bGwgfHwgdmFsdWUudHJpbSgpLmVxdWFscygiIikpIHsKLSAgICAJICAgIHJldHVybjsKLSAgICAJfQotICAgIAl0cnkgewotICAgIAkgICAgQ2xhc3NbXSBwYXJhbWV0ZXJzID0gbWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCk7Ci0gICAgCSAgICBpZiAoIHBhcmFtZXRlcnMubGVuZ3RoID09IDEpIHsKLSAgICAJICAgICAgICBPYmplY3RbXSB2YWx1ZXMgPSBuZXcgT2JqZWN0WzFdOwotICAgIAkgICAgCXZhbHVlc1swXSA9IGNvbnZlcnRUeXBlKHBhcmFtZXRlcnNbMF0sIHZhbHVlKTsKLSAgICAJICAgIAltZXRob2QuaW52b2tlKG9iaiwgdmFsdWVzKTsKLSAgICAJICAgIH0KLSAgICAJfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBpYWUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWFlKTsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKLSAgICAJfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGllKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGllKTsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQXJndW1lbnRzIGFyZSB3cm9uZyBmb3IgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOyAgICAJCi0gICAgCX0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gaXRlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGl0ZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7ICAgIAkKLSAgICAJfQorICAgICAgICBpZiAodmFsdWU9PW51bGwgfHwgdmFsdWUudHJpbSgpLmVxdWFscygiIikpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0cnkgeworICAgICAgICAgICAgQ2xhc3NbXSBwYXJhbWV0ZXJzID0gbWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCk7CisgICAgICAgICAgICBpZiAoIHBhcmFtZXRlcnMubGVuZ3RoID09IDEpIHsKKyAgICAgICAgICAgICAgICBPYmplY3RbXSB2YWx1ZXMgPSBuZXcgT2JqZWN0WzFdOworICAgICAgICAgICAgICAgIHZhbHVlc1swXSA9IGNvbnZlcnRUeXBlKHBhcmFtZXRlcnNbMF0sIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBtZXRob2QuaW52b2tlKG9iaiwgdmFsdWVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBpYWUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWFlKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKKyAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGllKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGllKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQXJndW1lbnRzIGFyZSB3cm9uZyBmb3IgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOworICAgICAgICB9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGl0ZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpdGUpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOworICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogRXhlY3V0ZXMgdGhlIG1ldGhvZC4gICAgIAorICAgICAqIEV4ZWN1dGVzIHRoZSBtZXRob2QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWV0aG9kIDxjb2RlPk1ldGhvZDwvY29kZT4gb2JqZWN0LgotICAgICAqIEBwYXJhbQlvYmoJT2JqZWN0IG9uIHdoaWNoIHRoZSBtZXRob2QgdG8gYmUgZXhlY3V0ZWQuCi0gICAgICogQHBhcmFtCXZhbHVlcwlQYXJhbWV0ZXIgdmFsdWVzIGZvciBleGVjdXRpbmcgdGhlIG1ldGhvZC4KKyAgICAgKiBAcGFyYW0gICAgbWV0aG9kIDxjb2RlPk1ldGhvZDwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBvYmogICAgT2JqZWN0IG9uIHdoaWNoIHRoZSBtZXRob2QgdG8gYmUgZXhlY3V0ZWQuCisgICAgICogQHBhcmFtICAgIHZhbHVlcyAgICBQYXJhbWV0ZXIgdmFsdWVzIGZvciBleGVjdXRpbmcgdGhlIG1ldGhvZC4KICAgICAgKiBAdGhyb3dzICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4sIGluIGNhc2Ugb2YgdGhlIG1pc21hdGNoIG9mIHBhcmFtZXRlciB2YWx1ZXMgb3IKLSAgICAgKgkJYSBzZWN1cml0eSB2aW9sYXRpb24uCisgICAgICogICAgICAgIGEgc2VjdXJpdHkgdmlvbGF0aW9uLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJ1bk1ldGhvZChNZXRob2QgbWV0aG9kLCBPYmplY3Qgb2JqLCBWZWN0b3IgdmFsdWVzKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb257Ci0gICAgCXRyeSB7Ci0JICAgIENsYXNzW10gcGFyYW1ldGVycyA9IG1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpOwotCSAgICBpZiAodmFsdWVzLnNpemUoKSAhPSBwYXJhbWV0ZXJzLmxlbmd0aCkgewotCSAgICAgICAgcmV0dXJuOwotCSAgICB9Ci0gICAgCSAgICBPYmplY3RbXSBhY3R1YWxWYWx1ZXMgPSBuZXcgT2JqZWN0W3BhcmFtZXRlcnMubGVuZ3RoXTsKLSAgICAJICAgIGZvciAoaW50IGkgPTA7IGk8cGFyYW1ldGVycy5sZW5ndGggOyBpKyspIHsKLSAgICAJICAgIAlTdHJpbmcgdmFsID0gKFN0cmluZykgdmFsdWVzLmdldChpKTsKLSAgICAJICAgIAlpZiAodmFsLnRyaW0oKS5lcXVhbHMoIk5VTEwiKSkgewotICAgIAkgICAgCSAgICBhY3R1YWxWYWx1ZXNbaV0gPSBudWxsOwotICAgIAkgICAgCX0gZWxzZSB7Ci0gICAgCSAgICAJICAgIGFjdHVhbFZhbHVlc1tpXSA9IGNvbnZlcnRUeXBlKHBhcmFtZXRlcnNbaV0sIHZhbCk7Ci0gICAgCSAgICAJfQotICAgIAkgICAgfQotICAgIAkgICAgbWV0aG9kLmludm9rZShvYmosIGFjdHVhbFZhbHVlcyk7Ci0gICAgCX1jYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBpYWUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWFlKTsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKLSAgICAJfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGllKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGllKTsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQXJndW1lbnRzIGFyZSB3cm9uZyBmb3IgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOyAgICAJCi0gICAgCX0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gaXRlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGl0ZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7ICAgIAkKLSAgICAJfQorICAgICAgICB0cnkgeworICAgICAgICBDbGFzc1tdIHBhcmFtZXRlcnMgPSBtZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKTsKKyAgICAgICAgaWYgKHZhbHVlcy5zaXplKCkgIT0gcGFyYW1ldGVycy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgT2JqZWN0W10gYWN0dWFsVmFsdWVzID0gbmV3IE9iamVjdFtwYXJhbWV0ZXJzLmxlbmd0aF07CisgICAgICAgICAgICBmb3IgKGludCBpID0wOyBpPHBhcmFtZXRlcnMubGVuZ3RoIDsgaSsrKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIHZhbCA9IChTdHJpbmcpIHZhbHVlcy5nZXQoaSk7CisgICAgICAgICAgICAgICAgaWYgKHZhbC50cmltKCkuZXF1YWxzKCJOVUxMIikpIHsKKyAgICAgICAgICAgICAgICAgICAgYWN0dWFsVmFsdWVzW2ldID0gbnVsbDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBhY3R1YWxWYWx1ZXNbaV0gPSBjb252ZXJ0VHlwZShwYXJhbWV0ZXJzW2ldLCB2YWwpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1ldGhvZC5pbnZva2Uob2JqLCBhY3R1YWxWYWx1ZXMpOworICAgICAgICB9Y2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gaWFlKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGlhZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFyZ3VtZW50cyBhcmUgd3JvbmcgZm9yIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKKyAgICAgICAgfSBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBpdGUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaXRlKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnZlcnRzIHRoZSB0eXBlIGZyb20gU3RyaW5nIHRvIHRoZSBDbGFzcyB0eXBlLgogICAgICAqCi0gICAgICogQHBhcmFtCXR5cGUJCUNsYXNzIG5hbWUgdG8gd2hpY2ggdGhlIGNvbnZlcnNpb24gaXMgcmVxdWlyZWQuCi0gICAgICogQHBhcmFtCXBhcmFtZXRlcglTdHJpbmcgdmFsdWUgdG8gYmUgY29udmVydGVkLgotICAgICAqIEByZXR1cm4JQ29udmVydGVkIHZhbHVlLgorICAgICAqIEBwYXJhbSAgICB0eXBlICAgICAgICBDbGFzcyBuYW1lIHRvIHdoaWNoIHRoZSBjb252ZXJzaW9uIGlzIHJlcXVpcmVkLgorICAgICAqIEBwYXJhbSAgICBwYXJhbWV0ZXIgICAgU3RyaW5nIHZhbHVlIHRvIGJlIGNvbnZlcnRlZC4KKyAgICAgKiBAcmV0dXJuICAgIENvbnZlcnRlZCB2YWx1ZS4KICAgICAgKiBAdGhyb3dzICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4sIGluIGNhc2Ugb2YgdGhlIG1pc21hdGNoIG9mIHBhcmFtZXRlciB2YWx1ZXMgb3IKLSAgICAgKgkJYSBzZWN1cml0eSB2aW9sYXRpb24uICAgICAKKyAgICAgKiAgICAgICAgYSBzZWN1cml0eSB2aW9sYXRpb24uCiAgICAgICovCiAgICAgcHJpdmF0ZSBPYmplY3QgY29udmVydFR5cGUoQ2xhc3MgdHlwZSwgU3RyaW5nIHBhcmFtZXRlcikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewotICAgIAl0cnkgewotICAgIAkgICAgU3RyaW5nIHR5cGVOYW1lID0gdHlwZS5nZXROYW1lKCk7Ci0gICAgCSAgICBpZiAoIHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLlN0cmluZyIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLk9iamVjdCIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIHBhcmFtZXRlcjsKLSAgICAJICAgIH0KLSAgICAJCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJpbnQiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5JbnRlZ2VyIikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IEludGVnZXIocGFyYW1ldGVyKTsKLSAgICAJICAgIH0KLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygic2hvcnQiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5TaG9ydCIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBTaG9ydChwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgICAJICAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJieXRlIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuQnl0ZSIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBCeXRlKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgIAkgICAgICAgIAkgICAgCi0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImxvbmciKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5Mb25nIikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IExvbmcocGFyYW1ldGVyKTsKLSAgICAJICAgIH0gICAgCSAgICAgICAgCSAgICAgICAJICAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJmbG9hdCIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkZsb2F0IikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IEZsb2F0KHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgCi0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImRvdWJsZSIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkRvdWJsZSIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBEb3VibGUocGFyYW1ldGVyKTsKLSAgICAJICAgIH0gICAgCSAgICAgICAgCSAgICAgICAJICAgICAJICAgICAgICAJICAgICAgIAkgICAgCi0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImphdmEubWF0aC5CaWdEZWNpbWFsIikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IGphdmEubWF0aC5CaWdEZWNpbWFsKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgIAkgICAgICAgIAkgICAgICAgCSAgICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiamF2YS5tYXRoLkJpZ0ludGVnZXIiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgamF2YS5tYXRoLkJpZ0ludGVnZXIocGFyYW1ldGVyKTsKLSAgICAJICAgIH0gICAgCSAgICAgICAgCSAgICAgICAJICAgICAgICAJICAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJib29sZWFuIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuQm9vbGVhbiIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBCb29sZWFuKHBhcmFtZXRlcik7Ci0gICAgICAgICAgICB9CQkKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFN0cmluZyB0eXBlTmFtZSA9IHR5cGUuZ2V0TmFtZSgpOworICAgICAgICAgICAgaWYgKCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5TdHJpbmciKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5PYmplY3QiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBwYXJhbWV0ZXI7CisgICAgICAgICAgICB9CiAKLSAgICAJICAgIHJldHVybiBwYXJhbWV0ZXI7Ci0gICAgCX0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfbmZlIiwgcGFyYW1ldGVyKTsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihwYXJhbWV0ZXIrIjogTm90IGEgdmFsaWQgdmFsdWUgZm9yIHRoaXMgbWV0aG9kICIpOwotICAgIAl9CisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJpbnQiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5JbnRlZ2VyIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEludGVnZXIocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygic2hvcnQiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5TaG9ydCIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTaG9ydChwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJieXRlIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuQnl0ZSIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCeXRlKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImxvbmciKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5Mb25nIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IExvbmcocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiZmxvYXQiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5GbG9hdCIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdChwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJkb3VibGUiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5Eb3VibGUiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRG91YmxlKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImphdmEubWF0aC5CaWdEZWNpbWFsIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGphdmEubWF0aC5CaWdEZWNpbWFsKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImphdmEubWF0aC5CaWdJbnRlZ2VyIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGphdmEubWF0aC5CaWdJbnRlZ2VyKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImJvb2xlYW4iKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5Cb29sZWFuIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJvb2xlYW4ocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHBhcmFtZXRlcjsKKyAgICAgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19uZmUiLCBwYXJhbWV0ZXIpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHBhcmFtZXRlcisiOiBOb3QgYSB2YWxpZCB2YWx1ZSBmb3IgdGhpcyBtZXRob2QgIik7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvU2VjdXJpdHlVdGlscy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvU2VjdXJpdHlVdGlscy5qYXZhCmluZGV4IGZjMTQ5YmYuLmYwMDhlN2YgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL1NlY3VyaXR5VXRpbHMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9TZWN1cml0eVV0aWxzLmphdmEKQEAgLTI5LDM2ICsyOSwzNiBAQAogLyoqCiAgKiBTZWN1cml0eVV0aWxzIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMjIKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzIyCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiBwdWJsaWMgY2xhc3MgU2VjdXJpdHlVdGlscyB7CiAKICAgICAvKioKLSAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdCwgZ2l2ZW4gCi0gICAgICogdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4sIHN1YmplY3QgYW5kIHRoZSAKLSAgICAgKiA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+LiBJdCBmaXJzdCBjaGVja3MgaWYgdGhlIAotICAgICAqIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gaXMgbnVsbCBvciBub3QuIElmIGl0IGlzIG5vdCBudWxsLCAKKyAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdCwgZ2l2ZW4KKyAgICAgKiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiwgc3ViamVjdCBhbmQgdGhlCisgICAgICogPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPi4gSXQgZmlyc3QgY2hlY2tzIGlmIHRoZQorICAgICAqIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gaXMgbnVsbCBvciBub3QuIElmIGl0IGlzIG5vdCBudWxsLAogICAgICAqIGl0IGNvbnN0cnVjdHMgYSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdCB3aXRoCiAgICAgICogdGhlIHVzZXIgYW5kIHBhc3N3b3JkIGZpZWxkcyBmcm9tIHRoZSA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IGFuZCByZXR1cm5zIHRoaXMKLSAgICAgKiA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdC4gSWYgdGhlIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gCi0gICAgICogaXMgbnVsbCwgaXQgcmV0cmlldmVzIHRoZSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdHMgZnJvbSAKKyAgICAgKiA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdC4gSWYgdGhlIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4KKyAgICAgKiBpcyBudWxsLCBpdCByZXRyaWV2ZXMgdGhlIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0cyBmcm9tCiAgICAgICogdGhlIDxjb2RlPlN1YmplY3Q8L2NvZGU+IHBhcmFtZXRlciBhbmQgcmV0dXJucyB0aGUgZmlyc3QKLSAgICAgKiA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdCB3aGljaCBjb250YWlucyBhIAorICAgICAqIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0IHdoaWNoIGNvbnRhaW5zIGEKICAgICAgKiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LCBpbnN0YW5jZSBlcXVpdmFsZW50CiAgICAgICogdG8gdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4sIHBhcmFtZXRlci4KICAgICAgKgotICAgICAqIEBwYXJhbQltY2YJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPgotICAgICAqIEBwYXJhbQlzdWJqZWN0CTxjb2RlPlN1YmplY3Q8L2NvZGU+Ci0gICAgICogQHBhcmFtCWluZm8JPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPgotICAgICAqIEByZXR1cm4JPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CWdlbmVyaWMgZXhjZXB0aW9uIGlmIG9wZXJhdGlvbiBmYWlscwotICAgICAqIEB0aHJvd3MJPGNvZGU+U2VjdXJpdHlFeGNlcHRpb248L2NvZGU+CWlmIGFjY2VzcyB0byB0aGUgPGNvZGU+U3ViamVjdDwvY29kZT4gaW5zdGFuY2UgaXMgZGVuaWVkCisgICAgICogQHBhcmFtICAgIG1jZiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHN1YmplY3QgICAgPGNvZGU+U3ViamVjdDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgaW5mbyAgICA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+CisgICAgICogQHJldHVybiAgICA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+CisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4gICAgZ2VuZXJpYyBleGNlcHRpb24gaWYgb3BlcmF0aW9uIGZhaWxzCisgICAgICogQHRocm93cyAgICA8Y29kZT5TZWN1cml0eUV4Y2VwdGlvbjwvY29kZT4gICAgaWYgYWNjZXNzIHRvIHRoZSA8Y29kZT5TdWJqZWN0PC9jb2RlPiBpbnN0YW5jZSBpcyBkZW5pZWQKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIFBhc3N3b3JkQ3JlZGVudGlhbCBnZXRQYXNzd29yZENyZWRlbnRpYWwoZmluYWwgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG1jZiwKICAgICAgICAgIGZpbmFsIFN1YmplY3Qgc3ViamVjdCwgamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZvIGluZm8pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAKLQlpZiAoaW5mbyA9PSBudWxsKSB7CisgICAgaWYgKGluZm8gPT0gbnVsbCkgewogICAgICAgICAgICAgaWYgKHN1YmplY3QgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTg5LDE0ICs4OSwxNCBAQAogICAgICAgICAgICAgcmV0dXJuIHBjOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0cnVlIGlmIHR3byBzdHJpbmdzIGFyZSBlcXVhbDsgZmFsc2Ugb3RoZXJ3aXNlCi0gICAgICogCi0gICAgICogQHBhcmFtCXN0cjEJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBwYXJhbQlzdHIyCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAcmV0dXJuCXRydWUJaWYgdGhlIHR3byBzdHJpbmdzIGFyZSBlcXVhbAotICAgICAqICAgICAgICAJZmFsc2UJb3RoZXJ3aXNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3RyMSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHN0cjIgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgdHJ1ZSAgICBpZiB0aGUgdHdvIHN0cmluZ3MgYXJlIGVxdWFsCisgICAgICogICAgICAgICAgICBmYWxzZSAgICBvdGhlcndpc2UKICAgICAgKi8KICAgICBzdGF0aWMgcHJpdmF0ZSBib29sZWFuIGlzRXF1YWwoU3RyaW5nIHN0cjEsIFN0cmluZyBzdHIyKSB7CiAgICAgICAgIGlmIChzdHIxID09IG51bGwpIHsKQEAgLTEwOSwxMCArMTA5LDEwIEBACiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0cnVlIGlmIHR3byA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdHMgYXJlIGVxdWFsOyBmYWxzZSBvdGhlcndpc2UKICAgICAgKgotICAgICAqIEBwYXJhbQlwQzEJPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgotICAgICAqIEBwYXJhbQlwQzIJPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgotICAgICAqIEByZXR1cm4JdHJ1ZQlpZiB0aGUgdHdvIFBhc3N3b3JkQ3JlZGVudGlhbHMgYXJlIGVxdWFsCi0gICAgICogICAgICAgIAlmYWxzZQlvdGhlcndpc2UKKyAgICAgKiBAcGFyYW0gICAgcEMxICAgIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcEMyICAgIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHRydWUgICAgaWYgdGhlIHR3byBQYXNzd29yZENyZWRlbnRpYWxzIGFyZSBlcXVhbAorICAgICAqICAgICAgICAgICAgZmFsc2UgICAgb3RoZXJ3aXNlCiAgICAgICovCiAgICAgc3RhdGljIHB1YmxpYyBib29sZWFuIGlzUGFzc3dvcmRDcmVkZW50aWFsRXF1YWwoUGFzc3dvcmRDcmVkZW50aWFsIHBDMSwgUGFzc3dvcmRDcmVkZW50aWFsIHBDMikgewogICAgICAgICBpZiAocEMxID09IHBDMikKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL2J1aWxkLnhtbAppbmRleCBhNTViYmYwLi5mMDYwZTdkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvYnVpbGQueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxwcm9qZWN0IG5hbWU9ImpkYmNfY29ubmVjdG9yIiBiYXNlZGlyPSIuIiBkZWZhdWx0PSJidWlsZCI+CiAgIDxwcm9wZXJ0eSBuYW1lPSJwa2cuZGlyIiB2YWx1ZT0iY29tL3N1bi9namMvdXRpbCIvPgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImNsZWFuIj4KICAgICA8YW50IGFudGZpbGU9ImJ1aWxkLnhtbCIgZGlyPSIke2dqYy5ob21lfS9iaW4iIHRhcmdldD0iY2xlYW4iLz4KICAgPC90YXJnZXQ+CkBAIC0zMyw3ICszMyw3IEBACiAgICAgICA8amFyIGphcmZpbGU9IiR7ZGlzdC5kaXJ9LyR7cGtnLmRpcn0vdXRpbC5qYXIiIGJhc2VkaXI9IiR7Y2xhc3MuZGlyfSIKICAgICAgICAgaW5jbHVkZXM9IiR7cGtnLmRpcn0vKiovKiIvPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJjb21waWxlMTMiIGRlcGVuZHM9ImNvbXBpbGUiLz4KICAgPHRhcmdldCBuYW1lPSJjb21waWxlMTQiIGRlcGVuZHM9ImNvbXBpbGUiLz4KIApAQCAtNDQsNSArNDQsNSBAQAogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkMTQiIGRlcGVuZHM9ImNvbXBpbGUxNCwgcGFja2FnZTE0Ii8+CiAKICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iYnVpbGQxMywgYnVpbGQxNCIvPgotICAKKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IDQyMzQxMTUuLmVkNmRiYWIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsMjAgKzEsMjAgQEAKLURyb3AgdGFibGUgVFhMRVZFTFNXSVRDSDsNCi0NCi1DUkVBVEUgVEFCTEUgVFhMRVZFTFNXSVRDSCAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikNCi0pOw0KLQ0KLUlOU0VSVCBJTlRPIFRYTEVWRUxTV0lUQ0ggVkFMVUVTKDEwLCAnYWJjZCcpOw0KLUlOU0VSVCBJTlRPIFRYTEVWRUxTV0lUQ0ggVkFMVUVTKDExLCAncHFycycpOw0KLQ0KLURyb3AgdGFibGUgVFhMRVZFTFNXSVRDSDI7DQotDQotQ1JFQVRFIFRBQkxFIFRYTEVWRUxTV0lUQ0gyICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQotSU5TRVJUIElOVE8gVFhMRVZFTFNXSVRDSDIgVkFMVUVTKDEsICdhYmNkJyk7DQotSU5TRVJUIElOVE8gVFhMRVZFTFNXSVRDSDIgVkFMVUVTKDIsICdwcXJzJyk7DQotDQorRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIOworCitDUkVBVEUgVEFCTEUgVFhMRVZFTFNXSVRDSCAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCitJTlNFUlQgSU5UTyBUWExFVkVMU1dJVENIIFZBTFVFUygxMCwgJ2FiY2QnKTsKK0lOU0VSVCBJTlRPIFRYTEVWRUxTV0lUQ0ggVkFMVUVTKDExLCAncHFycycpOworCitEcm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0gyOworCitDUkVBVEUgVEFCTEUgVFhMRVZFTFNXSVRDSDIgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQorKTsKKworSU5TRVJUIElOVE8gVFhMRVZFTFNXSVRDSDIgVkFMVUVTKDEsICdhYmNkJyk7CitJTlNFUlQgSU5UTyBUWExFVkVMU1dJVENIMiBWQUxVRVMoMiwgJ3BxcnMnKTsKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci90eGxldmVsc3dpdGNoL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggMGMxMjQyZi4uZDExYTExNSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3R4bGV2ZWxzd2l0Y2gvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdHhsZXZlbHN3aXRjaC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xLDIgKzEsMiBAQAotRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIOw0KLURyb3AgdGFibGUgVFhMRVZFTFNXSVRDSDI7DQorRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIOworRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIMjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9TdW5SYVhtbC9jY2ktZW1iZWRkZWQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9TdW5SYVhtbC9jY2ktZW1iZWRkZWQvYnVpbGQucHJvcGVydGllcwppbmRleCA1YWQwYjEyLi4wNWRmMTI4IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvU3VuUmFYbWwvY2NpLWVtYmVkZGVkL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL1N1blJhWG1sL2NjaS1lbWJlZGRlZC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMiArMTUsMTIgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNvbm5lY3RvciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJjY2libGFja2JveC5wYXRoIiB2YWx1ZT0iLi4vbGliL2NjaWJsYWNrYm94LXR4LmphciIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZW1iZWRkZWQtY2NpIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1lbWJlZGRlZC1jY2kiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZGIudHlwZSIgdmFsdWU9InBvaW50YmFzZSIvPgpAQCAtMjksNyArMjksNyBAQAogPHByb3BlcnR5IG5hbWU9InN1bi1jbXAtZGJzY2hlbWEiIHZhbHVlPSJkZXNjcmlwdG9yL3NlY19iYW5rYWRtaW5fc2NoZW1hLmRic2NoZW1hIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InJhcm5hbWUiIHZhbHVlPSJjY2libGFja2JveC10eCIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9InJhcm5hbWUiIHZhbHVlPSJjY2libGFja2JveC10eCIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iamRiYy5kcml2ZXJzIiB2YWx1ZT0iY29tLnBvaW50YmFzZS5qZGJjLmpkYmNVbml2ZXJzYWxEcml2ZXIiLz4KIAogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iL2NjaS1lbWJlZGRlZC9zZXJ2bGV0Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvU3VuUmFYbWwvY2NpLWVtYmVkZGVkL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9TdW5SYVhtbC9jY2ktZW1iZWRkZWQvYnVpbGQueG1sCmluZGV4IDI5Y2FjNTAuLjE3YmI1YWYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9TdW5SYVhtbC9jY2ktZW1iZWRkZWQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9TdW5SYVhtbC9jY2ktZW1iZWRkZWQvYnVpbGQueG1sCkBAIC05Myw3ICs5Myw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8IS0tCi0JQ3VzdG9tIHRhcmdldCBmb3IgY29tcGlsYXRpb24gd2l0aCBsb2NhbCBsaWJyYXJpZXMgZm9yIGNvbm5lY3RvcgorICAgIEN1c3RvbSB0YXJnZXQgZm9yIGNvbXBpbGF0aW9uIHdpdGggbG9jYWwgbGlicmFyaWVzIGZvciBjb25uZWN0b3IKICAgICAtLT4KICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUtY2NpIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvU3VuUmFYbWwvY2NpLWVtYmVkZGVkL2NsaWVudC9Db2ZmZWVDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9TdW5SYVhtbC9jY2ktZW1iZWRkZWQvY2xpZW50L0NvZmZlZUNsaWVudC5qYXZhCmluZGV4IDA1Y2EwMzguLjc3MTQ4NzAgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9TdW5SYVhtbC9jY2ktZW1iZWRkZWQvY2xpZW50L0NvZmZlZUNsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9TdW5SYVhtbC9jY2ktZW1iZWRkZWQvY2xpZW50L0NvZmZlZUNsaWVudC5qYXZhCkBAIC03Myw0ICs3Myw0IEBACiAgICAgfQogCiAKLX0gCit9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvU3VuUmFYbWwvY2NpLWVtYmVkZGVkL2VqYi9Db2ZmZWVCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvU3VuUmFYbWwvY2NpLWVtYmVkZGVkL2VqYi9Db2ZmZWVCZWFuLmphdmEKaW5kZXggNTYzZWUzYS4uMDcwOWIxNSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL1N1blJhWG1sL2NjaS1lbWJlZGRlZC9lamIvQ29mZmVlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9TdW5SYVhtbC9jY2ktZW1iZWRkZWQvZWpiL0NvZmZlZUJlYW4uamF2YQpAQCAtMTI4LDQgKzEyOCw0IEBACiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkgewogICAgIH0KIAotfSAKK30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9TdW5SYVhtbC9jY2kvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9TdW5SYVhtbC9jY2kvYnVpbGQucHJvcGVydGllcwppbmRleCBhMmUzZjY0Li5kMDZiOTc3IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvU3VuUmFYbWwvY2NpL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL1N1blJhWG1sL2NjaS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMiArMTUsMTIgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNvbm5lY3RvciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJjY2libGFja2JveC5wYXRoIiB2YWx1ZT0iLi4vbGliL2NjaWJsYWNrYm94LXR4LmphciIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJjb25uZWN0b3ItY2NpIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9ImNvbm5lY3Rvci1jY2kiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZGIudHlwZSIgdmFsdWU9InBvaW50YmFzZSIvPgpAQCAtMjksNyArMjksNyBAQAogPHByb3BlcnR5IG5hbWU9InN1bi1jbXAtZGJzY2hlbWEiIHZhbHVlPSJkZXNjcmlwdG9yL3NlY19iYW5rYWRtaW5fc2NoZW1hLmRic2NoZW1hIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InJhcm5hbWUiIHZhbHVlPSJjY2libGFja2JveC10eCIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9InJhcm5hbWUiIHZhbHVlPSJjY2libGFja2JveC10eCIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iamRiYy5kcml2ZXJzIiB2YWx1ZT0iY29tLnBvaW50YmFzZS5qZGJjLmpkYmNVbml2ZXJzYWxEcml2ZXIiLz4KIAogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iL2Nvbm5lY3Rvci1jY2kvc2VydmxldCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL1N1blJhWG1sL2NjaS9jbGllbnQvQ29mZmVlQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvU3VuUmFYbWwvY2NpL2NsaWVudC9Db2ZmZWVDbGllbnQuamF2YQppbmRleCA2OWQzYmM1Li5lMDU2Y2IwIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvU3VuUmFYbWwvY2NpL2NsaWVudC9Db2ZmZWVDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvU3VuUmFYbWwvY2NpL2NsaWVudC9Db2ZmZWVDbGllbnQuamF2YQpAQCAtNzMsNCArNzMsNCBAQAogICAgIH0KIAogCi19IAorfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL1N1blJhWG1sL2NjaS9lamIvQ29mZmVlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL1N1blJhWG1sL2NjaS9lamIvQ29mZmVlQmVhbi5qYXZhCmluZGV4IDM3ODgyYzQuLmM0NWRkNzAgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9TdW5SYVhtbC9jY2kvZWpiL0NvZmZlZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvU3VuUmFYbWwvY2NpL2VqYi9Db2ZmZWVCZWFuLmphdmEKQEAgLTEyOCw0ICsxMjgsNCBAQAogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHsKICAgICB9CiAKLX0gCit9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvU3VuUmFYbWwvY2NpL3NxbC9jY2ktcGIuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL1N1blJhWG1sL2NjaS9zcWwvY2NpLXBiLnNxbAppbmRleCA2Y2Q2ZDRhLi5kZmFmOTUyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvU3VuUmFYbWwvY2NpL3NxbC9jY2ktcGIuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9TdW5SYVhtbC9jY2kvc3FsL2NjaS1wYi5zcWwKQEAgLTE2LDUgKzE2LDUgQEAKIExBTkdVQUdFIEpBVkEKIE1PRElGSUVTIFNRTCBEQVRBCiBFWFRFUk5BTCBOQU1FICdTYW1wbGVFeHRlcm5hbE1ldGhvZHMuaW5zZXJ0Q29mZmVlJzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDYyOTBhNDEuLmMyM2E5NWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMyArMTUsMjMgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImFkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9idWlsZC54bWwKaW5kZXggYTlhMTA5MS4uMmNhMzI4OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvYnVpbGQueG1sCkBAIC0zNywxMCArMzcsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iaW5mbyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgIAk8ZWNobyBtZXNzYWdlPSJidWlsZC5jbGFzc2VzLmRpciBpcyAke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgotICAgIAk8ZWNobyBtZXNzYWdlPSJzMWFzdGVzdC5jbGFzc3BhdGggaXMgJHtzMWFzdGVzdC5jbGFzc3BhdGh9Ii8+CisgICAgICAgIDxlY2hvIG1lc3NhZ2U9ImJ1aWxkLmNsYXNzZXMuZGlyIGlzICR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CisgICAgICAgIDxlY2hvIG1lc3NhZ2U9InMxYXN0ZXN0LmNsYXNzcGF0aCBpcyAke3MxYXN0ZXN0LmNsYXNzcGF0aH0iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00OCw3ICs0OCw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAJICA8ZWNobyBtZXNzYWdlPSJhc3NlbWJsZS5kaXIgPSAke2Fzc2VtYmxlLmRpcn0iLz4KKyAgICAgICAgICA8ZWNobyBtZXNzYWdlPSJhc3NlbWJsZS5kaXIgPSAke2Fzc2VtYmxlLmRpcn0iLz4KICAgICAgICAgPCEtLWJ1aWxkIGFuZCBwYWNrYWdlIC53YXIgZmlyc3Qgc28gaXQgZG9lc24ndCBjb250YWluIGVqYiBiZWFuICEtLT4KICAgICAgICAgPCEtLWNsYXNzZXMgdGhhdCBoYXZlIEBTdGF0ZWxlc3MvQFN0YXRldWwgIS0tPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KQEAgLTcxLDIzICs3MSwyMyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICAgICAgIHZhbHVlPSIqKi9IZWxsbyoqLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICAgICAgCisKICAgICAgICAgPGFudCBkaXI9InJhIiB0YXJnZXQ9ImFsbCIvPgogCiAgICAgICAgIDxkZWxldGUgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0uZWFyIi8+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgotICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPiAgICAKKyAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KIAogICAgICAgICA8ZWFyIGVhcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIgYXBweG1sPSIke2FwcGxpY2F0aW9uLnhtbH0iPgogICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLmphciIvPgogICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Iioud2FyIi8+Ci0gICAgICAgICAgPC9maWxlc2V0PiAgCisgICAgICAgICAgPC9maWxlc2V0PgogICAgICAgICAgIDxmaWxlc2V0IGRpcj0icmEvIj4KICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioucmFyIi8+CiAgICAgICAgICAgPC9maWxlc2V0PgogICAgICAgICA8L2Vhcj4KLSAgICAgICAgCisKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGE2ODQ4MzcuLjEyODdmY2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL2NsaWVudC9DbGllbnQuamF2YQpAQCAtNTgsNyArNTgsNyBAQAogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0Y05hbWUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICB9Y2F0Y2goRXhjZXB0aW9uIGUpewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGNOYW1lLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgdGhyb3cgZTsKQEAgLTc5LDcgKzc5LDcgQEAKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBjMS5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKICAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOwotICAgICAgICAKKwogICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKQogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGxpbmUpOwogICAgICAgICBpZiAoY29kZSAhPSAyMDApIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbAppbmRleCBhZWJkM2ExLi4zZDcxNjIxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPG1vZHVsZT4KICAgICAgIDxjb25uZWN0b3I+YW9kLXJhLnJhcjwvY29ubmVjdG9yPgogICAgIDwvbW9kdWxlPgotICAgIAorCiAgICAgPGFkbWluaXN0ZXJlZC1vYmplY3Q+CiAgICAgICAgPGRlc2NyaXB0aW9uPmdsb2JhbC1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGluIGFwcGxpY2F0aW9uIEREPC9kZXNjcmlwdGlvbj4KICAgICAgICA8bmFtZT5qYXZhOmdsb2JhbC9lbnYvRUFSX0FkbWluT2JqZWN0PC9uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL2Rlc2NyaXB0b3IvY29ubmVjdG9yLXJlc291cmNlLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9kZXNjcmlwdG9yL2Nvbm5lY3Rvci1yZXNvdXJjZS54bWwKaW5kZXggZmE2ZGY3Mi4uMTMxYWMwMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL2Rlc2NyaXB0b3IvY29ubmVjdG9yLXJlc291cmNlLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvZGVzY3JpcHRvci9jb25uZWN0b3ItcmVzb3VyY2UueG1sCkBAIC0yMCwxMiArMjAsMTIgQEAKIDxjb25uZWN0b3ItcmVzb3VyY2UgeG1sbnM9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICAgICAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlIGh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUvamF2YWVlXzcueHNkPgotCTxkZXNjcmlwdGlvbj5nbG9iYWwtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBpbiBhcHBsaWNhdGlvbiBERDwvZGVzY3JpcHRpb24+Ci0JPG5hbWU+amF2YTpnbG9iYWwvZW52L0FwcGxpY2F0aW9uX0xldmVsX0Nvbm5lY3Rpb25GYWN0b3J5PC9uYW1lPgotCTxjbGFzcy1uYW1lPmpha2FydGEucmVzb3VyY2UuY2NpLkNvbm5lY3Rpb25GYWN0b3J5PC9jbGFzcy1uYW1lPgotCTxyZXNvdXJjZS1hZGFwdGVyPiNjcmQtcmE8L3Jlc291cmNlLWFkYXB0ZXI+Ci0JPHByb3BlcnR5PgotCQk8bmFtZT50cmFuc2FjdGlvblN1cHBvcnQ8L25hbWU+Ci0JCTx2YWx1ZT5Mb2NhbFRyYW5zYWN0aW9uPC92YWx1ZT4KLQk8L3Byb3BlcnR5PgorICAgIDxkZXNjcmlwdGlvbj5nbG9iYWwtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBpbiBhcHBsaWNhdGlvbiBERDwvZGVzY3JpcHRpb24+CisgICAgPG5hbWU+amF2YTpnbG9iYWwvZW52L0FwcGxpY2F0aW9uX0xldmVsX0Nvbm5lY3Rpb25GYWN0b3J5PC9uYW1lPgorICAgIDxjbGFzcy1uYW1lPmpha2FydGEucmVzb3VyY2UuY2NpLkNvbm5lY3Rpb25GYWN0b3J5PC9jbGFzcy1uYW1lPgorICAgIDxyZXNvdXJjZS1hZGFwdGVyPiNjcmQtcmE8L3Jlc291cmNlLWFkYXB0ZXI+CisgICAgPHByb3BlcnR5PgorICAgICAgICA8bmFtZT50cmFuc2FjdGlvblN1cHBvcnQ8L25hbWU+CisgICAgICAgIDx2YWx1ZT5Mb2NhbFRyYW5zYWN0aW9uPC92YWx1ZT4KKyAgICA8L3Byb3BlcnR5PgogPC9jb25uZWN0b3ItcmVzb3VyY2U+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IGU1NzRjZDEuLjMwZTUwMDAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC0xOCw5ICsxOCw5IEBACiAtLT4KIAogPGVqYi1qYXIgeG1sbnM9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUiCi0gICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKLSAgICAgICAgIG1ldGFkYXRhLWNvbXBsZXRlPSJmYWxzZSIgCi0gICAgICAgICB2ZXJzaW9uPSIzLjIiIAorICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgICAgIG1ldGFkYXRhLWNvbXBsZXRlPSJmYWxzZSIKKyAgICAgICAgIHZlcnNpb249IjMuMiIKICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSBodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL2VqYi1qYXJfM18yLnhzZCI+CiAgIDxtb2R1bGUtbmFtZT5hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZWpiPC9tb2R1bGUtbmFtZT4KICAgPGVudGVycHJpc2UtYmVhbnM+CkBAIC0yOSw3ICsyOSw3IEBACiAgICAgICA8ZWpiLW5hbWU+SGVsbG9TdGF0ZWZ1bEVKQjwvZWpiLW5hbWU+CiAgICAgICA8YnVzaW5lc3MtbG9jYWw+Y29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5oZWxsby5zZXNzaW9uMy5IZWxsb1N0YXRlZnVsPC9idXNpbmVzcy1sb2NhbD4KICAgICAgIDxlamItY2xhc3M+Y29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5oZWxsby5zZXNzaW9uMy5IZWxsb1N0YXRlZnVsRUpCPC9lamItY2xhc3M+Ci0gICAgICAKKwogICAgICAgPGFkbWluaXN0ZXJlZC1vYmplY3Q+CiAgICAgICAgIDxkZXNjcmlwdGlvbj5nbG9iYWwtc2NvcGUgcmVzb3VyY2UgdG8gYmUgbW9kaWZpZWQgYnkgREQ8L2Rlc2NyaXB0aW9uPgogICAgICAgICA8bmFtZT5qYXZhOmdsb2JhbC9lbnYvSGVsbG9TdGF0ZWZ1bEVKQl9Nb2RCeUREX0FkbWluT2JqZWN0PC9uYW1lPgpAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICAgIDx2YWx1ZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvdmFsdWU+CiAgICAgICAgIDwvcHJvcGVydHk+CiAgICAgICA8L2FkbWluaXN0ZXJlZC1vYmplY3Q+Ci0gICAgICAKKwogICAgICAgPGFkbWluaXN0ZXJlZC1vYmplY3Q+CiAgICAgICAgIDxkZXNjcmlwdGlvbj5tb2R1bGUtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBpbiBFSkIgREQ8L2Rlc2NyaXB0aW9uPgogICAgICAgICA8bmFtZT5qYXZhOm1vZHVsZS9lbnYvSGVsbG9TdGF0ZWZ1bEVKQl9ERF9BZG1pbk9iamVjdDwvbmFtZT4KQEAgLTY1LDcgKzY1LDcgQEAKICAgICAgICAgICA8dmFsdWU+Y29ubmVjdG9yLk15QWRtaW5PYmplY3Q8L3ZhbHVlPgogICAgICAgICA8L3Byb3BlcnR5PgogICAgICAgPC9hZG1pbmlzdGVyZWQtb2JqZWN0PgotICAgICAgCisKICAgICAgIDxhZG1pbmlzdGVyZWQtb2JqZWN0PgogICAgICAgICA8ZGVzY3JpcHRpb24+YXBwbGljYXRpb24tc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBpbiBFSkIgREQ8L2Rlc2NyaXB0aW9uPgogICAgICAgICA8bmFtZT5qYXZhOmFwcC9lbnYvSGVsbG9TdGF0ZWZ1bEVKQl9ERF9BZG1pbk9iamVjdDwvbmFtZT4KQEAgLTc3LDcgKzc3LDcgQEAKICAgICAgICAgICA8dmFsdWU+Y29ubmVjdG9yLk15QWRtaW5PYmplY3Q8L3ZhbHVlPgogICAgICAgICA8L3Byb3BlcnR5PgogICAgICAgPC9hZG1pbmlzdGVyZWQtb2JqZWN0PgotICAgICAgCisKICAgICAgIDxhZG1pbmlzdGVyZWQtb2JqZWN0PgogICAgICAgICA8ZGVzY3JpcHRpb24+Y29tcG9uZW50LXNjb3BlIHJlc291cmNlIGRlZmluZWQgaW4gRUpCIEREPC9kZXNjcmlwdGlvbj4KICAgICAgICAgPG5hbWU+amF2YTpjb21wL2Vudi9IZWxsb1N0YXRlZnVsRUpCX0REX0FkbWluT2JqZWN0PC9uYW1lPgpAQCAtODksNyArODksNyBAQAogICAgICAgICAgIDx2YWx1ZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvdmFsdWU+CiAgICAgICAgIDwvcHJvcGVydHk+CiAgICAgICA8L2FkbWluaXN0ZXJlZC1vYmplY3Q+Ci0gICAgICAKKwogICAgIDwvc2Vzc2lvbj4KICAgICA8c2Vzc2lvbj4KICAgICAgIDxkaXNwbGF5LW5hbWU+SGVsbG9FSkI8L2Rpc3BsYXktbmFtZT4KQEAgLTEyMCw3ICsxMjAsNyBAQAogICAgICAgICAgIDx2YWx1ZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvdmFsdWU+CiAgICAgICAgIDwvcHJvcGVydHk+CiAgICAgICA8L2FkbWluaXN0ZXJlZC1vYmplY3Q+Ci0gICAgICAKKwogICAgICAgPGFkbWluaXN0ZXJlZC1vYmplY3Q+CiAgICAgICAgIDxkZXNjcmlwdGlvbj5hcHBsaWNhdGlvbi1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGluIEVKQiBERDwvZGVzY3JpcHRpb24+CiAgICAgICAgIDxuYW1lPmphdmE6YXBwL2Vudi9IZWxsb0VKQl9ERF9BZG1pbk9iamVjdDwvbmFtZT4KQEAgLTE1Niw4ICsxNTYsOCBAQAogICAgICAgICAgIDx2YWx1ZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvdmFsdWU+CiAgICAgICAgIDwvcHJvcGVydHk+CiAgICAgICA8L2FkbWluaXN0ZXJlZC1vYmplY3Q+Ci0gICAgICAKKwogICAgIDwvc2Vzc2lvbj4KICAgPC9lbnRlcnByaXNlLWJlYW5zPgotICAKKwogPC9lamItamFyPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggNGQ0YzkzYS4uMDM2ZTQ3ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0xOCw4ICsxOCw4IEBACiAtLT4KIAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUiCi0gICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAgICAKLSAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSB3ZWItYXBwXzNfMS54c2QiICAgCisgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlIHdlYi1hcHBfM18xLnhzZCIKICAgICAgICAgIHZlcnNpb249IjMuMSIKICAgICAgICAgIG1ldGFkYXRhLWNvbXBsZXRlPSJmYWxzZSI+CiAKQEAgLTcwLDcgKzcwLDcgQEAKICAgICAgICAgIDx2YWx1ZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvdmFsdWU+CiAgICAgICAgPC9wcm9wZXJ0eT4KICAgICAgPC9hZG1pbmlzdGVyZWQtb2JqZWN0PgotICAgIAorCiAgICAgIDxhZG1pbmlzdGVyZWQtb2JqZWN0PgogICAgICAgIDxkZXNjcmlwdGlvbj5tb2R1bGUtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBpbiBXZWIgREQ8L2Rlc2NyaXB0aW9uPgogICAgICAgIDxuYW1lPmphdmE6bW9kdWxlL2Vudi9XZWJfRERfQWRtaW5PYmplY3Q8L25hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvZWpiL0hlbGxvRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvZWpiL0hlbGxvRUpCLmphdmEKaW5kZXggYmRhNTk2MS4uM2JiMTgzMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL2VqYi9IZWxsb0VKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9lamIvSGVsbG9FSkIuamF2YQpAQCAtMzMsMzUgKzMzLDM1IEBACiAgICAgICAgICAgICAgICAgcHJvcGVydGllcyA9IHsib3JnLmdsYXNzZmlzaC5hZG1pbi1vYmplY3QucmVzVHlwZT1jb25uZWN0b3IuTXlBZG1pbk9iamVjdCJ9CiAgICAgICAgICAgKSwKICAgICAgICAgICBAQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbigKLSAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gImdsb2JhbC1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGJ5IEBBZG1pbmlzdGVyZWRPYmplY3REZWZpbml0aW9uIiwgCi0gICAgICAgICAgICAgICBuYW1lID0gImphdmE6Z2xvYmFsL2Vudi9IZWxsb0VKQl9Bbm5vdGF0aW9uX0FkbWluT2JqZWN0IiwgCisgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICJnbG9iYWwtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBieSBAQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbiIsCisgICAgICAgICAgICAgICBuYW1lID0gImphdmE6Z2xvYmFsL2Vudi9IZWxsb0VKQl9Bbm5vdGF0aW9uX0FkbWluT2JqZWN0IiwKICAgICAgICAgICAgICAgIGludGVyZmFjZU5hbWUgPSAiamFrYXJ0YS5qbXMuRGVzdGluYXRpb24iLAogICAgICAgICAgICAgICAgY2xhc3NOYW1lID0gImNvbm5lY3Rvci5NeUFkbWluT2JqZWN0IiwKICAgICAgICAgICAgICAgIHJlc291cmNlQWRhcHRlcj0iI2FvZC1yYSIsCiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzID0geyJvcmcuZ2xhc3NmaXNoLmFkbWluLW9iamVjdC5yZXNUeXBlPWNvbm5lY3Rvci5NeUFkbWluT2JqZWN0In0KICAgICAgICAgICApLAotICAgICAgICAgIAorCiAgICAgICAgICAgQEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb24oCi0gICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICJhcHBsaWNhdGlvbi1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGJ5IEBBZG1pbmlzdGVyZWRPYmplY3REZWZpbml0aW9uIiwgCi0gICAgICAgICAgICAgICBuYW1lID0gImphdmE6YXBwL2Vudi9IZWxsb0VKQl9Bbm5vdGF0aW9uX0FkbWluT2JqZWN0IiwgCisgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICJhcHBsaWNhdGlvbi1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGJ5IEBBZG1pbmlzdGVyZWRPYmplY3REZWZpbml0aW9uIiwKKyAgICAgICAgICAgICAgIG5hbWUgPSAiamF2YTphcHAvZW52L0hlbGxvRUpCX0Fubm90YXRpb25fQWRtaW5PYmplY3QiLAogICAgICAgICAgICAgICAgaW50ZXJmYWNlTmFtZSA9ICJqYWthcnRhLmptcy5EZXN0aW5hdGlvbiIsCiAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSAiY29ubmVjdG9yLk15QWRtaW5PYmplY3QiLAogICAgICAgICAgICAgICAgcmVzb3VyY2VBZGFwdGVyPSIjYW9kLXJhIiwKICAgICAgICAgICAgICAgIHByb3BlcnRpZXMgPSB7Im9yZy5nbGFzc2Zpc2guYWRtaW4tb2JqZWN0LnJlc1R5cGU9Y29ubmVjdG9yLk15QWRtaW5PYmplY3QifQogICAgICAgICAgICksCi0gICAgICAgICAgCisKICAgICAgICAgICBAQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbigKLSAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gIm1vZHVsZS1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGJ5IEBBZG1pbmlzdGVyZWRPYmplY3REZWZpbml0aW9uIiwgCi0gICAgICAgICAgICAgICBuYW1lID0gImphdmE6bW9kdWxlL2Vudi9IZWxsb0VKQl9Bbm5vdGF0aW9uX0FkbWluT2JqZWN0IiwgCisgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICJtb2R1bGUtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBieSBAQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbiIsCisgICAgICAgICAgICAgICBuYW1lID0gImphdmE6bW9kdWxlL2Vudi9IZWxsb0VKQl9Bbm5vdGF0aW9uX0FkbWluT2JqZWN0IiwKICAgICAgICAgICAgICAgIGludGVyZmFjZU5hbWUgPSAiamFrYXJ0YS5qbXMuRGVzdGluYXRpb24iLAogICAgICAgICAgICAgICAgY2xhc3NOYW1lID0gImNvbm5lY3Rvci5NeUFkbWluT2JqZWN0IiwKICAgICAgICAgICAgICAgIHJlc291cmNlQWRhcHRlcj0iI2FvZC1yYSIsCiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzID0geyJvcmcuZ2xhc3NmaXNoLmFkbWluLW9iamVjdC5yZXNUeXBlPWNvbm5lY3Rvci5NeUFkbWluT2JqZWN0In0KICAgICAgICAgICApLAotICAgICAgICAgIAorCiAgICAgICAgICAgQEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb24oCi0gICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICJjb21wb25lbnQtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBieSBAQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbiIsIAotICAgICAgICAgICAgICAgbmFtZSA9ICJqYXZhOmNvbXAvZW52L0hlbGxvRUpCX0Fubm90YXRpb25fQWRtaW5PYmplY3QiLCAKKyAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gImNvbXBvbmVudC1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGJ5IEBBZG1pbmlzdGVyZWRPYmplY3REZWZpbml0aW9uIiwKKyAgICAgICAgICAgICAgIG5hbWUgPSAiamF2YTpjb21wL2Vudi9IZWxsb0VKQl9Bbm5vdGF0aW9uX0FkbWluT2JqZWN0IiwKICAgICAgICAgICAgICAgIGludGVyZmFjZU5hbWUgPSAiamFrYXJ0YS5qbXMuRGVzdGluYXRpb24iLAogICAgICAgICAgICAgICAgY2xhc3NOYW1lID0gImNvbm5lY3Rvci5NeUFkbWluT2JqZWN0IiwKICAgICAgICAgICAgICAgIHJlc291cmNlQWRhcHRlcj0iI2FvZC1yYSIsCkBAIC0xMDksNyArMTA5LDcgQEAKICAgICAgICAgbG9va3VwQWRtaW5PYmplY3QoImphdmE6YXBwL2Vudi9IZWxsb0VKQl9ERF9BZG1pbk9iamVjdCIsIHRydWUpOwogICAgICAgICBsb29rdXBBZG1pbk9iamVjdCgiamF2YTptb2R1bGUvZW52L0hlbGxvRUpCX0REX0FkbWluT2JqZWN0IiwgdHJ1ZSk7CiAgICAgICAgIGxvb2t1cEFkbWluT2JqZWN0KCJqYXZhOmNvbXAvZW52L0hlbGxvRUpCX0REX0FkbWluT2JqZWN0IiwgdHJ1ZSk7Ci0gICAgICAgIAorCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9FSkI6OmhlbGxvKCkiKTsKICAgICB9CiAKQEAgLTEyNyw2ICsxMjcsNiBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIAorCiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9lamIvSGVsbG9TdGF0ZWZ1bEVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL2VqYi9IZWxsb1N0YXRlZnVsRUpCLmphdmEKaW5kZXggNDU4ODhmYS4uYzljNDEwYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL2VqYi9IZWxsb1N0YXRlZnVsRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL2VqYi9IZWxsb1N0YXRlZnVsRUpCLmphdmEKQEAgLTExNSw3ICsxMTUsNyBAQAogICAgICAgICBsb29rdXBBZG1pbk9iamVjdCgiamF2YTphcHAvZW52L0hlbGxvRUpCX0REX0FkbWluT2JqZWN0IiwgdHJ1ZSk7CiAgICAgICAgIGxvb2t1cEFkbWluT2JqZWN0KCJqYXZhOm1vZHVsZS9lbnYvSGVsbG9FSkJfRERfQWRtaW5PYmplY3QiLCB0cnVlKTsKICAgICAgICAgbG9va3VwQWRtaW5PYmplY3QoImphdmE6Y29tcC9lbnYvSGVsbG9FSkJfRERfQWRtaW5PYmplY3QiLCBmYWxzZSk7Ci0gICAgICAgIAorCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVmdWxFSkIgZGF0YXNvdXJjZS1kZWZpbml0aW9ucyBTdWNjZXNzIik7CiAKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9BYnN0cmFjdFJlc291cmNlQWRhcHRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvQWJzdHJhY3RSZXNvdXJjZUFkYXB0ZXIuamF2YQppbmRleCAwN2I5ZDc4Li4wZWZjYzVmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9BYnN0cmFjdFJlc291cmNlQWRhcHRlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL0Fic3RyYWN0UmVzb3VyY2VBZGFwdGVyLmphdmEKQEAgLTIzLDcgKzIzLDcgQEAKICAgICBwcml2YXRlIFN0cmluZyB0ZXN0TmFtZTsKICAgICBwcm90ZWN0ZWQgYm9vbGVhbiBkZWJ1ZyA9IHRydWU7CiAKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGVzdE5hbWUoKSB7CiAgICAgICAgIHJldHVybiB0ZXN0TmFtZTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YQppbmRleCA1NTUzM2Q0Li5mNTliMmIzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEKQEAgLTE4LDcgKzE4LDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBDb250cm9scyB7CiAgICAgcHVibGljIHN0YXRpYyBPYmplY3QgcmVhZHlMb2NrID0gbmV3IE9iamVjdCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQppbmRleCA3ZTM2MzVmLi4yYmU2NWY5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQpAQCAtMjIsNyArMjIsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIERlbGl2ZXJ5V29yayBpbXBsZW1lbnRzIFdvcmsgewogCkBAIC0zMSw3ICszMSw3IEBACiAgICAgcHJpdmF0ZSBTdHJpbmcgb3A7CiAgICAgcHJpdmF0ZSBib29sZWFuIGtlZXBDb3VudDsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnRlciA9IDA7Ci0gICAgCisKICAgICBwdWJsaWMgRGVsaXZlcnlXb3JrKE1lc3NhZ2VFbmRwb2ludCBlcCwgaW50IG51bU9mTWVzc2FnZXMsIFN0cmluZyBvcCkgewogICAgICAgICB0aGlzLmVwID0gZXA7CiAgICAgICAgIHRoaXMubnVtID0gbnVtT2ZNZXNzYWdlczsKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgdGhpcy5rZWVwQ291bnQgPSBmYWxzZTsKICAgICB9CiAKLSAgICBwdWJsaWMgRGVsaXZlcnlXb3JrKE1lc3NhZ2VFbmRwb2ludCBlcCwgaW50IG51bU9mTWVzc2FnZXMsIAorICAgIHB1YmxpYyBEZWxpdmVyeVdvcmsoTWVzc2FnZUVuZHBvaW50IGVwLCBpbnQgbnVtT2ZNZXNzYWdlcywKICAgICAgICAgICAgIFN0cmluZyBvcCwgYm9vbGVhbiBrZWVwQ291bnQpIHsKICAgICAgICAgdGhpcy5lcCA9IGVwOwogICAgICAgICB0aGlzLm51bSA9IG51bU9mTWVzc2FnZXM7CkBAIC01MCw3ICs1MCw3IEBACiAgICAgcHVibGljIHZvaWQgcnVuKCkgewogCiAgICAgICAgIGRlYnVnKCJFTlRFUi4uLiIpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgLy9NZXRob2Qgb25NZXNzYWdlID0gZ2V0T25NZXNzYWdlTWV0aG9kKCk7CiAgICAgICAgICAgICAvL2VwLmJlZm9yZURlbGl2ZXJ5KG9uTWVzc2FnZSk7CkBAIC03MywxMSArNzMsMTEgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy9lcC5hZnRlckRlbGl2ZXJ5KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCJMRUFWRS4uLiIpOwogICAgIH0KIApAQCAtODgsMTQgKzg4LDE0IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSBNZXRob2QgZ2V0T25NZXNzYWdlTWV0aG9kKCkgewotICAgICAgICAKKwogICAgICAgICBNZXRob2Qgb25NZXNzYWdlTWV0aG9kID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENsYXNzIG1zZ0xpc3RlbmVyQ2xhc3MgPSBjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIuY2xhc3M7CiAgICAgICAgICAgICBDbGFzc1tdIHBhcmFtVHlwZXMgPSB7IGphdmEubGFuZy5TdHJpbmcuY2xhc3MgfTsKLSAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9IAorICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0KICAgICAgICAgICAgICAgICBtc2dMaXN0ZW5lckNsYXNzLmdldE1ldGhvZCgib25NZXNzYWdlIiwgcGFyYW1UeXBlcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YQppbmRleCAxMDBjYWNlLi5mYTkzZjYzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgICAgICAgICAgZmxhZ1RvU3RyaW5nKGZsYWdzKSk7CiAgICAgfQogCi0gICAgCisKICAgICBwdWJsaWMgdm9pZCBmb3JnZXQoWGlkIHhpZCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLmZvcmdldDogIiArIHhpZFRvU3RyaW5nKHhpZCkpOwogICAgIH0KQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLnByZXBhcmU6ICIgKyB4aWRUb1N0cmluZyh4aWQpKTsKICAgICAgICAgcmV0dXJuIFhBUmVzb3VyY2UuWEFfT0s7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFhpZFtdIHJlY292ZXIoaW50IGZsYWcpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5yZWNvdmVyOiAiICsgZmxhZ1RvU3RyaW5nKGZsYWcpKTsKICAgICAgICAgcmV0dXJuIG51bGw7CkBAIC02Niw3ICs2Niw3IEBACiAgICAgcHVibGljIGJvb2xlYW4gc2V0VHJhbnNhY3Rpb25UaW1lb3V0KGludCBzZWNvbmRzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc3RhcnQoWGlkIHhpZCwgaW50IGZsYWdzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2Uuc3RhcnQ6ICIgKyB4aWRUb1N0cmluZyh4aWQpICsgIiwiICsKICAgICAgICAgICAgICAgICBmbGFnVG9TdHJpbmcoZmxhZ3MpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL01lc3NhZ2VzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhCmluZGV4IGI1YjBmMDIuLjRjOWMwMTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL01lc3NhZ2VzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvTWVzc2FnZXMuamF2YQpAQCAtMjEsNyArMjEsNyBAQAogLyoqCiAgKiBjb2xsZWN0aW9uIG9mIG1lc3NhZ2VzLgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgTWVzc2FnZXMgewogCkBAIC01NCw3ICs1NCw3IEBACiAgICAgICAgU3RyaW5nIGNvbW1hbmQgID0gYXJnc1swXTsKICAgICAgICBTdHJpbmcgZGVzdE5hbWUgPSBhcmdzWzFdOwogICAgICAgIFN0cmluZyBtZXNzYWdlICA9IGFyZ3NbMl07Ci0gICAKKwogICAgICAgIGlmICghImFkZCIuZXF1YWxzKGNvbW1hbmQpKSB7CiAgICAgICAgICAgIFN5c3RlbS5leGl0KDEpOwogICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL015Q29ubmVjdGlvbkZhY3RvcnkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL015Q29ubmVjdGlvbkZhY3RvcnkuamF2YQppbmRleCA5ZjI0NjQ4Li45MjJlNzFkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9NeUNvbm5lY3Rpb25GYWN0b3J5LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvTXlDb25uZWN0aW9uRmFjdG9yeS5qYXZhCkBAIC0zMiw3ICszMiw3IEBACiAgICAgcHJpdmF0ZSBDb25uZWN0aW9uTWFuYWdlciBjbTsKICAgICBwcml2YXRlIE15TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG1jZjsKICAgICBwcml2YXRlIFJlZmVyZW5jZSByZWY7Ci0gICAgCisKICAgICBwdWJsaWMgTXlDb25uZWN0aW9uRmFjdG9yeShNeU1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2YsIENvbm5lY3Rpb25NYW5hZ2VyIGNtKSB7CiAgICAgICAgIHN1cGVyKCk7CiAgICAgICAgIHRoaXMubWNmID0gbWNmOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvTXlNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL015TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKaW5kZXggMDViMzExOC4uYTU2MTc2MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvTXlNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9NeU1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCkBAIC00NCw3ICs0NCw3IEBACiAgICAgcHJpdmF0ZSBDb25uZWN0aW9uTWFuYWdlciBjbTsKICAgICBwcml2YXRlIFByaW50V3JpdGVyIHdyaXRlcjsKICAgICBwcml2YXRlIFRyYW5zYWN0aW9uU3VwcG9ydExldmVsIHRyYW5zYWN0aW9uU3VwcG9ydCA9IFRyYW5zYWN0aW9uU3VwcG9ydExldmVsLkxvY2FsVHJhbnNhY3Rpb247OwotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBnZXRUZXN0TmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHRlc3ROYW1lOwogICAgIH0KQEAgLTY5LDcgKzY5LDcgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgTWFuYWdlZENvbm5lY3Rpb24gY3JlYXRlTWFuYWdlZENvbm5lY3Rpb24oU3ViamVjdCBzdWJqZWN0LCAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIHJlcUluZm8pIAorICAgIHB1YmxpYyBNYW5hZ2VkQ29ubmVjdGlvbiBjcmVhdGVNYW5hZ2VkQ29ubmVjdGlvbihTdWJqZWN0IHN1YmplY3QsICBDb25uZWN0aW9uUmVxdWVzdEluZm8gcmVxSW5mbykKICAgICAgICAgICAgIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KQEAgLTgwLDcgKzgwLDcgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgTWFuYWdlZENvbm5lY3Rpb24gbWF0Y2hNYW5hZ2VkQ29ubmVjdGlvbnMoU2V0IGNhbmRpZGF0ZXMsIFN1YmplY3Qgc3ViLCAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIHJlcUluZm8pIAorICAgIHB1YmxpYyBNYW5hZ2VkQ29ubmVjdGlvbiBtYXRjaE1hbmFnZWRDb25uZWN0aW9ucyhTZXQgY2FuZGlkYXRlcywgU3ViamVjdCBzdWIsICBDb25uZWN0aW9uUmVxdWVzdEluZm8gcmVxSW5mbykKICAgICAgICAgICAgIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL015V29yay5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvTXlXb3JrLmphdmEKaW5kZXggNjE0MzgxZS4uNDQ4OTlhMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvTXlXb3JrLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvTXlXb3JrLmphdmEKQEAgLTIzLDcgKzIzLDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBNeVdvcmsgaW1wbGVtZW50cyBXb3JrIHsKIApAQCAtMzEsNyArMzEsNyBAQAogICAgIHByaXZhdGUgYm9vbGVhbiBzdG9wID0gZmFsc2U7CiAgICAgcHJpdmF0ZSBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGZhY3Rvcnk7CiAgICAgcHJpdmF0ZSBXb3JrTWFuYWdlciB3bTsKLSAgICAKKwogICAgIHB1YmxpYyBNeVdvcmsoCiAgICAgICAgICAgICBTdHJpbmcgbmFtZSwgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBmYWN0b3J5LCBXb3JrTWFuYWdlciB3bSkgewogICAgICAgICB0aGlzLmZhY3RvcnkgPSBmYWN0b3J5OwpAQCAtNDksNyArNDksNyBAQAogICAgICAgICAgICAgdHJ5IHsKIAogICAgICAgICAgICAgICAgIE1ldGhvZCBvbk1lc3NhZ2UgPSBnZXRPbk1lc3NhZ2VNZXRob2QoKTsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlzRGVsaXZlcnlUcmFuc2FjdGVkID0gIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaXNEZWxpdmVyeVRyYW5zYWN0ZWQgPSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yeS5pc0RlbGl2ZXJ5VHJhbnNhY3RlZChvbk1lc3NhZ2UpKTsKIAogICAgICAgICAgICAgICAgIC8qCkBAIC02Niw3ICs2Niw3IEBACiAgICAgICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIkxFQVZFLi4uIik7CiAgICAgfQogCkBAIC04MSwxNCArODEsMTQgQEAKICAgICB9CiAKICAgICBwdWJsaWMgTWV0aG9kIGdldE9uTWVzc2FnZU1ldGhvZCgpIHsKLSAgICAgICAgCisKICAgICAgICAgTWV0aG9kIG9uTWVzc2FnZU1ldGhvZCA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDbGFzcyBtc2dMaXN0ZW5lckNsYXNzID0gY29ubmVjdG9yLk15TWVzc2FnZUxpc3RlbmVyLmNsYXNzOwogICAgICAgICAgICAgQ2xhc3NbXSBwYXJhbVR5cGVzID0geyBqYXZhLmxhbmcuU3RyaW5nLmNsYXNzIH07Ci0gICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPSAKKyAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9CiAgICAgICAgICAgICAgICAgbXNnTGlzdGVuZXJDbGFzcy5nZXRNZXRob2QoIm9uTWVzc2FnZSIsIHBhcmFtVHlwZXMpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEKaW5kZXggNTEyZTVjNi4uNGI1ZTVmMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhCkBAIC0yNSwxMiArMjUsMTIgQEAKICAqIHNvIHRoYXQgdGhlIGFwcCBzZXJ2ZXIgY2FuIGluc3RhbnRpYXRlIGFuZCBjb25maWd1cmUKICAqIGl0IGF0IHRoZSBydW50aW1lLgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBAQWN0aXZhdGlvbigKICAgICAgICAgbWVzc2FnZUxpc3RlbmVycyA9IHtjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIuY2xhc3N9CiApCi1wdWJsaWMgY2xhc3MgU2ltcGxlQWN0aXZhdGlvblNwZWMgCitwdWJsaWMgY2xhc3MgU2ltcGxlQWN0aXZhdGlvblNwZWMKICAgICBpbXBsZW1lbnRzIEFjdGl2YXRpb25TcGVjLCBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7CiAKICAgICBwcml2YXRlIFN0cmluZyBkZXN0aW5hdGlvbk5hbWU7CkBAIC00Nyw3ICs0Nyw3IEBACiAgICAgcHVibGljIFN0cmluZyBnZXREZXN0aW5hdGlvbk5hbWUgKCkgewogICAgICAgICByZXR1cm4gdGhpcy5kZXN0aW5hdGlvbk5hbWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0RGVzdGluYXRpb25OYW1lIChTdHJpbmcgbmFtZSkgewogICAgICAgICBkZWJ1Zygic2V0RGVzdGluYXRpb25OYW1lKCkgY2FsbGVkLi4uIG5hbWUgPSAiICsgbmFtZSk7CiAgICAgICAgIHRoaXMuZGVzdGluYXRpb25OYW1lID0gbmFtZTsKQEAgLTU2LDcgKzU2LDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldERlc3RpbmF0aW9uVHlwZSgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZGVzdGluYXRpb25UeXBlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldERlc3RpbmF0aW9uVHlwZSAoU3RyaW5nIHR5cGUpIHsKICAgICAgICAgZGVidWcoInNldERlc3RpbmF0aW9uVHlwZSAoKSBjYWxsZWQuLi4gdHlwZSA9ICIgKyB0eXBlKTsKICAgICAgICAgdGhpcy5kZXN0aW5hdGlvblR5cGU9IHR5cGU7CkBAIC02NSw3ICs2NSw3IEBACiAgICAgcHVibGljIFN0cmluZyBnZXRUZXN0UHJvcCgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMudGVzdFByb3A7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0VGVzdFByb3AgKFN0cmluZyB0ZXN0UHJvcCkgewogICAgICAgICBkZWJ1Zygic2V0VGVzdFByb3AgKCkgY2FsbGVkLi4uIHRlc3RQcm9wID0gIiArIHRlc3RQcm9wKTsKICAgICAgICAgdGhpcy50ZXN0UHJvcCA9IHRlc3RQcm9wOwpAQCAtNzQsNyArNzQsNyBAQAogICAgIHB1YmxpYyBJbnRlZ2VyIGdldFRlc3RJbnRlZ2VyUHJvcCgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMudGVzdEludGVnZXJQcm9wOwogICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFRlc3RJbnRlZ2VyUHJvcCAoSW50ZWdlciB0ZXN0UHJvcDEpIHsKICAgICAgICAgZGVidWcoInNldFRlc3RJbnRlZ2VyUHJvcCAoKSBjYWxsZWQuLi4gdGVzdEludGVnZXJQcm9wID0gIiArIHRlc3RQcm9wMSk7CiAgICAgICAgIHRoaXMudGVzdEludGVnZXJQcm9wID0gdGVzdFByb3AxOwpAQCAtOTgsNyArOTgsNyBAQAogCiAgICAgICB9CiAKLSAgIH0gCisgICB9CiAKICAgICBwcml2YXRlIHZvaWQgZGVidWcgKFN0cmluZyBtZXNzYWdlKQogICAgIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YQppbmRleCAyOGQ5ZTI5Li5kMWMyNmJiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbC5qYXZhCkBAIC0yOSwxNCArMjksMTQgQEAKIAogLyoqCiAgKiBUaGlzIGlzIGEgc2FtcGxlIHJlc291cmNlIGFkYXB0ZXIKLSAqIAorICoKICAqIEBhdXRob3IgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIEBDb25uZWN0b3IoCiAvKiBtb2R1bGVOYW1lPSJNeSBTaW1wbGUgUkFSIiwgKi8KLSAgICBkaXNwbGF5TmFtZSA9ICJTaW1wbGUgUmVzb3VyY2UgQWRhcHRlciIsIAotICAgIHZlbmRvck5hbWUgPSAiSmF2YSBTb2Z0d2FyZSIsIAotICAgIGVpc1R5cGUgPSAiR2VuZXJpYyBUeXBlIiwgCisgICAgZGlzcGxheU5hbWUgPSAiU2ltcGxlIFJlc291cmNlIEFkYXB0ZXIiLAorICAgIHZlbmRvck5hbWUgPSAiSmF2YSBTb2Z0d2FyZSIsCisgICAgZWlzVHlwZSA9ICJHZW5lcmljIFR5cGUiLAogICAgIHZlcnNpb24gPSAiMS4wQWxwaGEiLAogICAgIHRyYW5zYWN0aW9uU3VwcG9ydD1UcmFuc2FjdGlvblN1cHBvcnRMZXZlbC5YQVRyYW5zYWN0aW9uKQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9UZXN0V01Xb3JrLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9UZXN0V01Xb3JrLmphdmEKaW5kZXggZWUwZmFlOS4uZTI0ODUwNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvVGVzdFdNV29yay5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL1Rlc3RXTVdvcmsuamF2YQpAQCAtMjMsNyArMjMsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIFRlc3RXTVdvcmsgaW1wbGVtZW50cyBXb3JrIHsKIApAQCAtMzcsOCArMzcsOCBAQAogICAgIHB1YmxpYyBUZXN0V01Xb3JrKGludCBpZCwgYm9vbGVhbiBpc1JvZ3VlKSB7CiAgICAgICAgIHRoaXMoaWQsIGlzUm9ndWUsIGZhbHNlLCBudWxsKTsKICAgICB9Ci0gICAgCi0gICAgcHVibGljIFRlc3RXTVdvcmsoaW50IGlkLCBib29sZWFuIGlzUm9ndWUsIAorCisgICAgcHVibGljIFRlc3RXTVdvcmsoaW50IGlkLCBib29sZWFuIGlzUm9ndWUsCiAgICAgICAgICAgICBib29sZWFuIGRvTmVzdCwgRXhlY3V0aW9uQ29udGV4dCBjdHgpIHsKICAgICAgICAgdGhpcy5pZCA9IGlkOwogICAgICAgICB0aGlzLmlzUm9ndWUgPSBpc1JvZ3VlOwpAQCAtNzIsMTAgKzcyLDEwIEBACiAgICAgICAgICAgICB9IGNhdGNoIChXb3JrRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICAgICAgaWYgKGV4LmdldEVycm9yQ29kZSgpLmVxdWFscygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXb3JrRXhjZXB0aW9uLlRYX0NPTkNVUlJFTlRfV09SS19ESVNBTExPV0VEKSkgewotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArIAorICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBBU1M6IENBVUdIVCBFWFBFQ1RFRCA9ICIgKyBleC5nZXRFcnJvckNvZGUoKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKyAKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGQUlMOiBDQVVHSFQgVU5FWFBFQ1RFRCA9ICIgKyBleC5nZXRFcnJvckNvZGUoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtODcsNyArODcsNyBAQAogICAgICAgICAgICAgICAgIGVjLnNldFRyYW5zYWN0aW9uVGltZW91dCg1KjEwMDApOyAvLzUgc2Vjb25kcwogICAgICAgICAgICAgICAgIHdtLmRvV29yayhuZXN0ZWRXb3JrLCAxKjEwMDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgIkZBSUw6IENBVUdIVCBVTkVYUEVDVEVEID0gIiArIGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL1YzV29ya0Rpc3BhdGNoZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL1YzV29ya0Rpc3BhdGNoZXIuamF2YQppbmRleCA4YWRmM2NjLi40YjQzNzgzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9WM1dvcmtEaXNwYXRjaGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvVjNXb3JrRGlzcGF0Y2hlci5qYXZhCkBAIC00Myw3ICs0Myw3IEBACiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludCBlcCA9IGZhY3RvcnkuY3JlYXRlRW5kcG9pbnQobmV3IEZha2VYQVJlc291cmNlKCkpOwogICAgICAgICAgICAgaW50IG51bU9mTWVzc2FnZXMgPSAxOwpAQCAtNzIsNyArNzIsNyBAQAogICAgICAgICAgICAgZGVidWcoIlYzV29ya0Rpc3BhdGNoZXIgY2FsbGluZyBET05FKCkiKTsKICAgICAgICAgICAgIGRvbmUoKTsKICAgICAgICAgICAgIGRlYnVnKCJWM1dvcmtEaXNwYXRjaGVyIGZpbmlzaGVkIGNhbGxpbmcgRE9ORSgpIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEKaW5kZXggNDIyNDlkYy4uYTE0NDQzYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhCkBAIC0zMiw3ICszMiw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgV29ya0Rpc3BhdGNoZXIgaW1wbGVtZW50cyBXb3JrIHsKIApAQCAtNDMsMTEgKzQzLDExIEBACiAgICAgcHJvdGVjdGVkIEFjdGl2YXRpb25TcGVjIHNwZWM7CiAgICAgcHJvdGVjdGVkIFdvcmtNYW5hZ2VyIHdtOwogICAgIHByb3RlY3RlZCBYQVRlcm1pbmF0b3IgeGE7Ci0gICAgCisKICAgICBwdWJsaWMgV29ya0Rpc3BhdGNoZXIoCiAgICAgICAgICAgICBTdHJpbmcgaWQsCiAgICAgICAgICAgICBCb290c3RyYXBDb250ZXh0IGN0eCwKLSAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZmFjdG9yeSwgCisgICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGZhY3RvcnksCiAgICAgICAgICAgICBBY3RpdmF0aW9uU3BlYyBzcGVjKSB7CiAgICAgICAgIHRoaXMuaWQgICAgICA9IGlkOwogICAgICAgICB0aGlzLmN0eCAgICAgPSBjdHg7CkBAIC02MCw3ICs2MCw3IEBACiAgICAgcHVibGljIHZvaWQgcnVuKCkgewogCiAgICAgICAgIGRlYnVnKCJFTlRFUi4uLiIpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgc3luY2hyb25pemVkIChDb250cm9scy5yZWFkeUxvY2spIHsKICAgICAgICAgICAgICAgICBkZWJ1ZygiV0FJVC4uLiIpOwpAQCAtODIsMjYgKzgyLDI2IEBACiAgICAgICAgICAgICB0cnkgewogCiAgICAgICAgICAgICAgICAgTWV0aG9kIG9uTWVzc2FnZSA9IGdldE9uTWVzc2FnZU1ldGhvZCgpOwotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaXNEZWxpdmVyeVRyYW5zYWN0ZWQgPSAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpc0RlbGl2ZXJ5VHJhbnNhY3RlZCA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yeS5pc0RlbGl2ZXJ5VHJhbnNhY3RlZChvbk1lc3NhZ2UpKTsKIAogICAgICAgICAgICAgICAgIGlmICghZmFjdG9yeS5pc0RlbGl2ZXJ5VHJhbnNhY3RlZChvbk1lc3NhZ2UpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vTWVzc2FnZUVuZHBvaW50IGVwID0gZmFjdG9yeS5jcmVhdGVFbmRwb2ludChudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgLy9EZWxpdmVyeVdvcmsgZCA9IG5ldyBEZWxpdmVyeVdvcmsoIk5PX1RYIiwgZXApOyAKKyAgICAgICAgICAgICAgICAgICAgLy9EZWxpdmVyeVdvcmsgZCA9IG5ldyBEZWxpdmVyeVdvcmsoIk5PX1RYIiwgZXApOwogICAgICAgICAgICAgICAgICAgICAvL3dtLmRvV29yayhkLCAwLCBudWxsLCBudWxsKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvL01lc3NhZ2VFbmRwb2ludCBlcCA9IGZhY3RvcnkuY3JlYXRlRW5kcG9pbnQobnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludCBlcCA9IGZhY3RvcnkuY3JlYXRlRW5kcG9pbnQobmV3IEZha2VYQVJlc291cmNlKCkpOwogICAgICAgICAgICAgICAgICAgICBpbnQgbnVtT2ZNZXNzYWdlcyA9IDU7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vaW1wb3J0aW5nIHRyYW5zYWN0aW9uCiAKICAgICAgICAgICAgICAgICAgICAgLy93cml0ZS9jb21taXQKICAgICAgICAgICAgICAgICAgICAgRXhlY3V0aW9uQ29udGV4dCBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKIAotICAgICAgICAgICAgICAgICAgICBEZWxpdmVyeVdvcmsgdyA9IAorICAgICAgICAgICAgICAgICAgICBEZWxpdmVyeVdvcmsgdyA9CiAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRGVsaXZlcnlXb3JrKGVwLCBudW1PZk1lc3NhZ2VzLCAiV1JJVEUiKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgeGEuY29tbWl0KGVjLmdldFhpZCgpLCB0cnVlKTsKQEAgLTEwOSw3ICsxMDksNyBAQAogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiRE9ORSBXUklURSBUTyBEQiIpOwogICAgICAgICAgICAgICAgICAgICBDb250cm9scy5leHBlY3RlZFJlc3VsdHMgPSBudW1PZk1lc3NhZ2VzOwogICAgICAgICAgICAgICAgICAgICBub3RpZnlBbmRXYWl0KCk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vZGVsZXRlL3JvbGxiYWNrCiAgICAgICAgICAgICAgICAgICAgIGVjID0gc3RhcnRUeCgpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiU3RhcnQgVFggLSAiICsgZWMuZ2V0WGlkKCkpOwpAQCAtMTI1LDcgKzEyNSw3IEBACiAgICAgICAgICAgICAgICAgICAgIC8vZGVsZXRlL2NvbW1pdAogICAgICAgICAgICAgICAgICAgICBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgdyA9IG5ldyBEZWxpdmVyeVdvcmsoZXAsIG51bU9mTWVzc2FnZXMsICJERUxFVEUiKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgeGEuY29tbWl0KGVjLmdldFhpZCgpLCB0cnVlKTsKQEAgLTE0OSw3ICsxNDksNyBAQAogICAgICAgICAgICAgICAgICAgICAvL2RlbGV0ZS9jb21taXQKICAgICAgICAgICAgICAgICAgICAgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIHcgPSBuZXcgRGVsaXZlcnlXb3JrKGVwLCBudW1PZk1lc3NhZ2VzLCAiREVMRVRFIik7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgdHJ1ZSk7CkBAIC0xOTQsNyArMTk0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgaWYgKFhBUmVzb3VyY2UuWEFfT0sgPT0geGEucHJlcGFyZShlYy5nZXRYaWQoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgZmFsc2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlhBIFBSRVBBUkUvQ09NTUlULiBET05FIFdSSVRFIFRPIERCICIpOwpAQCAtMjA2LDE5ICsyMDYsMTkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xzLmV4cGVjdGVkUmVzdWx0cyA9IDM7CiAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZnlBbmRXYWl0KCk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy9kZWxldGUgYWxsLgogICAgICAgICAgICAgICAgICAgICBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgdyA9IG5ldyBEZWxpdmVyeVdvcmsoZXAsIDEsICJERUxFVEVfQUxMIik7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJET05FIERFTEVURSBBTEwgRlJPTSBEQiIpOwogICAgICAgICAgICAgICAgICAgICBDb250cm9scy5leHBlY3RlZFJlc3VsdHMgPSAwOwogICAgICAgICAgICAgICAgICAgICBub3RpZnlBbmRXYWl0KCk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTsKICAgICAgICAgICAgICAgICB9CiAKQEAgLTI0NSw3ICsyNDUsNyBAQAogICAgICAgICAgICAgICAgIGRvbmUoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiTEVBVkUuLi4iKTsKICAgICB9CiAKQEAgLTI2MCwxNCArMjYwLDE0IEBACiAgICAgfQogCiAgICAgcHVibGljIE1ldGhvZCBnZXRPbk1lc3NhZ2VNZXRob2QoKSB7Ci0gICAgICAgIAorCiAgICAgICAgIE1ldGhvZCBvbk1lc3NhZ2VNZXRob2QgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ2xhc3MgbXNnTGlzdGVuZXJDbGFzcyA9IGNvbm5lY3Rvci5NeU1lc3NhZ2VMaXN0ZW5lci5jbGFzczsKICAgICAgICAgICAgIENsYXNzW10gcGFyYW1UeXBlcyA9IHsgamF2YS5sYW5nLlN0cmluZy5jbGFzcyB9OwotICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0gCisgICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPQogICAgICAgICAgICAgICAgIG1zZ0xpc3RlbmVyQ2xhc3MuZ2V0TWV0aG9kKCJvbk1lc3NhZ2UiLCBwYXJhbVR5cGVzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KQEAgLTI5MCwxMyArMjkwLDEzIEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAvL1NsZWVwIGZvciA1IHNlY29uZHMKICAgICAgICAgICAgIC8vVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCg1KjEwMDApOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHN5bmNocm9uaXplZChDb250cm9scy5yZWFkeUxvY2spIHsKICAgICAgICAgICAgICAgICAvL05vdGlmeSB0aGUgY2xpZW50IHRvIGNoZWNrIHRoZSByZXN1bHRzCi0gICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLm5vdGlmeUFsbCgpOyAKKyAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2subm90aWZ5QWxsKCk7CiAKICAgICAgICAgICAgICAgICAvL1dhaXQgdW50aWwgcmVzdWx0cyBhcmUgdmVyaWZpZWQgYnkgdGhlIGNsaWVudAotICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay53YWl0KCk7IAorICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay53YWl0KCk7CiAKICAgICAgICAgICAgICAgICBpZiAoc3RvcCkgewogICAgICAgICAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhCmluZGV4IDc3ZGJmMzQuLjZiZDllNTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhCkBAIC0zNiw4ICszNiw4IEBACiAgICAgcHVibGljIGludCBicmFuY2hRdWFsaWZpZXI7CiAgICAgcHVibGljIGludCBnbG9iYWxUeElEOwogCi0gICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEdUUklEU0laRT0gNjQ7IAotICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhCUVVBTFNJWkU9IDY0OyAKKyAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYR1RSSURTSVpFPSA2NDsKKyAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYQlFVQUxTSVpFPSA2NDsKIAogICAgIHB1YmxpYyBYSUQoKSB7CiAgICAgICAgIGludCBmb28gPSBJRCsrOwpAQCAtNTUsMTAgKzU1LDEwIEBACiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAgICAgICAgICAgICAgICAvLyBJdCBjYW4ndCBiZSBlcXVhbAogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIG90aGVyID0gKFhJRClvOyAgICAgICAgICAgICAgICAgICAvLyBUaGUgb3RoZXIgWElELCBub3cgcHJvcGVybHkgY2FzdAotICAgICAgICAKLSAgICAgICAgaWYgKHRoaXMuZm9ybWF0SUQgPT0gb3RoZXIuZm9ybWF0SUQgCisKKyAgICAgICAgaWYgKHRoaXMuZm9ybWF0SUQgPT0gb3RoZXIuZm9ybWF0SUQKICAgICAgICAgICAgICAgICAmJiB0aGlzLmJyYW5jaFF1YWxpZmllciA9PSBvdGhlci5icmFuY2hRdWFsaWZpZXIKICAgICAgICAgICAgICAgICAmJiB0aGlzLmdsb2JhbFR4SUQgPT0gb3RoZXIuZ2xvYmFsVHhJRCkgewogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC05OCw3ICs5OCw3IEBACiAgICAgICAgICAgICAgICAgImZvcm1hdElEKCIgICAgICsgZm9ybWF0SUQgICAgICsgIiksICIgKwogICAgICAgICAgICAgICAgICJicmFuY2hRdWFsaWZpZXIgKCIgKyBicmFuY2hRdWFsaWZpZXIgKyAiKSwgIiArCiAgICAgICAgICAgICAgICAgImdsb2JhbFR4SUQoIiArIGdsb2JhbFR4SUQgKyAiKX0iKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIHM7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvc2VydmxldC9TZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEvc2VydmxldC9TZXJ2bGV0LmphdmEKaW5kZXggZjM2NWM3Zi4uZWEzNTEwYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lbWJlZHJhL3NlcnZsZXQvU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYS9zZXJ2bGV0L1NlcnZsZXQuamF2YQpAQCAtNjQsNyArNjQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VBZGFwdGVyPSIjYW9kLXJhIiwKICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMgPSB7Im9yZy5nbGFzc2Zpc2guYWRtaW4tb2JqZWN0LnJlc1R5cGU9Y29ubmVjdG9yLk15QWRtaW5PYmplY3QifQogICAgICAgICAgICAgICAgICksCi0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBAQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJtb2R1bGUtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBieSBAQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gImphdmE6bW9kdWxlL2Vudi9TZXJ2bGV0X0FkbWluT2JqZWN0IiwKQEAgLTczLDcgKzczLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlQWRhcHRlcj0iI2FvZC1yYSIsCiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzID0geyJvcmcuZ2xhc3NmaXNoLmFkbWluLW9iamVjdC5yZXNUeXBlPWNvbm5lY3Rvci5NeUFkbWluT2JqZWN0In0KICAgICAgICAgICAgICAgICApLAotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgQEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0iY29tcG9uZW50LXNjb3BlIHJlc291cmNlIGRlZmluZWQgYnkgQEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9ICJqYXZhOmNvbXAvZW52L1NlcnZsZXRfQWRtaW5PYmplY3QiLApAQCAtOTEsNyArOTEsNyBAQAogCiAgICAgQEVKQgogICAgIHByaXZhdGUgIEhlbGxvIGhlbGxvU3RhdGVsZXNzOwotICAgIAorCiAgICAgQEVKQihiZWFuTmFtZSA9ICJIZWxsb1N0YXRlZnVsRUpCIikKICAgICBwcml2YXRlICBIZWxsb1N0YXRlZnVsIGhlbGxvU3RhdGVmdWw7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vYnVpbGQucHJvcGVydGllcwppbmRleCA3MzlkNGY1Li5kY2YwMmQ4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMyArMTUsMjMgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImFkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9idWlsZC54bWwKaW5kZXggNWIzYmVjZC4uYzViNzc5OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9idWlsZC54bWwKQEAgLTM3LDI1ICszNywyNSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJpbmZvIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgCTxlY2hvIG1lc3NhZ2U9ImJ1aWxkLmNsYXNzZXMuZGlyIGlzICR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+Ci0gICAgCTxlY2hvIG1lc3NhZ2U9InMxYXN0ZXN0LmNsYXNzcGF0aCBpcyAke3MxYXN0ZXN0LmNsYXNzcGF0aH0iLz4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iYnVpbGQuY2xhc3Nlcy5kaXIgaXMgJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iczFhc3Rlc3QuY2xhc3NwYXRoIGlzICR7czFhc3Rlc3QuY2xhc3NwYXRofSIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlLXV0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgogICAgICAgPGphdmFjIHNyY2Rpcj0idXQiIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgotICAgICAgCSAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvanVuaXQuamFyOiR7czFhc3Rlc3QuY2xhc3NwYXRofSIKLSAgICAgIAkgICAgZGVidWc9Im9uIgorICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvanVuaXQuamFyOiR7czFhc3Rlc3QuY2xhc3NwYXRofSIKKyAgICAgICAgICAgICAgZGVidWc9Im9uIgogICAgICAgICAgICAgaW5jbHVkZWFudHJ1bnRpbWU9ImZhbHNlIgotICAgICAgCSAgICBmYWlsb25lcnJvcj0idHJ1ZSIvPgorICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIvPgogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtdXQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDwhLS0gYnVpbGQgYSBzcGVjaWFsIGVhciB3aGljaCBvbmx5IGluY2x1ZGVzIGRlcGxveW1lbnQgZGVzY3JpcHRvcnMtLT4KICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgogICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9L3RlbXAiLz4KLSAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+ICAgCi0gICAgICA8Y29weSBmaWxlPSIke2Jhc2VkaXJ9L2Rlc2NyaXB0b3IvdXQtYXBwbGljYXRpb24ueG1sIiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIgIGZhaWxvbmVycm9yPSJmYWxzZSIvPiAKLSAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAtVVQuZWFyIj4gCisgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgorICAgICAgPGNvcHkgZmlsZT0iJHtiYXNlZGlyfS9kZXNjcmlwdG9yL3V0LWFwcGxpY2F0aW9uLnhtbCIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KKyAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAtVVQuZWFyIj4KICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgogICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLmphciIvPgogICAgICAgICA8L2ZpbGVzZXQ+CkBAIC03MSw3ICs3MSw3IEBACiAgICAgICA8dW5qYXIgc3JjPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC1VVC5lYXIiIGRlc3Q9IiR7YXNzZW1ibGUuZGlyfS90ZW1wLyR7YXBwbmFtZX1BcHAtVVQiLz4KIAogICAgIDwvdGFyZ2V0PgotICAgIAkKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuLXV0IiBkZXBlbmRzPSJjb21waWxlLXV0Ij4KICAgICAgIDxqdW5pdCBwcmludHN1bW1hcnk9InllcyIgaGFsdG9uZXJyb3I9Im5vIiBoYWx0b25mYWlsdXJlPSJubyIgZm9yaz0idHJ1ZSI+CiAgICAgICAgIDxmb3JtYXR0ZXIgdHlwZT0icGxhaW4iIHVzZWZpbGU9ImZhbHNlIi8+CkBAIC05NSw3ICs5NSw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAJICA8ZWNobyBtZXNzYWdlPSJhc3NlbWJsZS5kaXIgPSAke2Fzc2VtYmxlLmRpcn0iLz4KKyAgICAgICAgICA8ZWNobyBtZXNzYWdlPSJhc3NlbWJsZS5kaXIgPSAke2Fzc2VtYmxlLmRpcn0iLz4KICAgICAgICAgPCEtLWJ1aWxkIGFuZCBwYWNrYWdlIC53YXIgZmlyc3Qgc28gaXQgZG9lc24ndCBjb250YWluIGVqYiBiZWFuICEtLT4KICAgICAgICAgPCEtLWNsYXNzZXMgdGhhdCBoYXZlIEBTdGF0ZWxlc3MvQFN0YXRldWwgIS0tPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KQEAgLTExOCwxMSArMTE4LDExIEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9IioqL0hlbGxvKiouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgICAgICAKKwogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVhci1jb21tb24iLz4KIAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLXV0Ii8+Ci0gICAgICAgIAorCiAgICAgICAgIDxhbnQgZGlyPSJyYSIgdGFyZ2V0PSJhbGwiLz4KICAgICA8L3RhcmdldD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBkN2UzMDA5Li45MmY2MGViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL2NsaWVudC9DbGllbnQuamF2YQpAQCAtNTgsNyArNTgsNyBAQAogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0Y05hbWUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICB9Y2F0Y2goRXhjZXB0aW9uIGUpewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGNOYW1lLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgdGhyb3cgZTsKQEAgLTc5LDcgKzc5LDcgQEAKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBjMS5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKICAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOwotICAgICAgICAKKwogICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKQogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGxpbmUpOwogICAgICAgICBpZiAoY29kZSAhPSAyMDApIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vZGVzY3JpcHRvci9jb25uZWN0b3ItcmVzb3VyY2UueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9kZXNjcmlwdG9yL2Nvbm5lY3Rvci1yZXNvdXJjZS54bWwKaW5kZXggNWM1NDRjMS4uYTNiOTQ1NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9kZXNjcmlwdG9yL2Nvbm5lY3Rvci1yZXNvdXJjZS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9kZXNjcmlwdG9yL2Nvbm5lY3Rvci1yZXNvdXJjZS54bWwKQEAgLTIwLDEyICsyMCwxMiBAQAogPGNvbm5lY3Rvci1yZXNvdXJjZSB4bWxucz0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSIKICAgICAgICAgICAgICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUgaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS9qYXZhZWVfNy54c2Q+Ci0JPGRlc2NyaXB0aW9uPmdsb2JhbC1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGluIGFwcGxpY2F0aW9uIEREPC9kZXNjcmlwdGlvbj4KLQk8bmFtZT5qYXZhOmdsb2JhbC9lbnYvQXBwbGljYXRpb25fTGV2ZWxfQ29ubmVjdGlvbkZhY3Rvcnk8L25hbWU+Ci0JPGNsYXNzLW5hbWU+amFrYXJ0YS5yZXNvdXJjZS5jY2kuQ29ubmVjdGlvbkZhY3Rvcnk8L2NsYXNzLW5hbWU+Ci0JPHJlc291cmNlLWFkYXB0ZXI+Y3JkLXJhPC9yZXNvdXJjZS1hZGFwdGVyPgotCTxwcm9wZXJ0eT4KLQkJPG5hbWU+dHJhbnNhY3Rpb25TdXBwb3J0PC9uYW1lPgotCQk8dmFsdWU+TG9jYWxUcmFuc2FjdGlvbjwvdmFsdWU+Ci0JPC9wcm9wZXJ0eT4KKyAgICA8ZGVzY3JpcHRpb24+Z2xvYmFsLXNjb3BlIHJlc291cmNlIGRlZmluZWQgaW4gYXBwbGljYXRpb24gREQ8L2Rlc2NyaXB0aW9uPgorICAgIDxuYW1lPmphdmE6Z2xvYmFsL2Vudi9BcHBsaWNhdGlvbl9MZXZlbF9Db25uZWN0aW9uRmFjdG9yeTwvbmFtZT4KKyAgICA8Y2xhc3MtbmFtZT5qYWthcnRhLnJlc291cmNlLmNjaS5Db25uZWN0aW9uRmFjdG9yeTwvY2xhc3MtbmFtZT4KKyAgICA8cmVzb3VyY2UtYWRhcHRlcj5jcmQtcmE8L3Jlc291cmNlLWFkYXB0ZXI+CisgICAgPHByb3BlcnR5PgorICAgICAgICA8bmFtZT50cmFuc2FjdGlvblN1cHBvcnQ8L25hbWU+CisgICAgICAgIDx2YWx1ZT5Mb2NhbFRyYW5zYWN0aW9uPC92YWx1ZT4KKyAgICA8L3Byb3BlcnR5PgogPC9jb25uZWN0b3ItcmVzb3VyY2U+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL2Rlc2NyaXB0b3IvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggOGIyYjVjZi4uYWQ5Y2YyZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vZGVzY3JpcHRvci9lamItamFyLnhtbApAQCAtMTgsOSArMTgsOSBAQAogLS0+CiAKIDxlamItamFyIHhtbG5zPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlIgotICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCi0gICAgICAgICBtZXRhZGF0YS1jb21wbGV0ZT0iZmFsc2UiIAotICAgICAgICAgdmVyc2lvbj0iMy4yIiAKKyAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgICAgICBtZXRhZGF0YS1jb21wbGV0ZT0iZmFsc2UiCisgICAgICAgICB2ZXJzaW9uPSIzLjIiCiAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUgaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS9lamItamFyXzNfMi54c2QiPgogICA8bW9kdWxlLW5hbWU+YWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVqYjwvbW9kdWxlLW5hbWU+CiAgIDxlbnRlcnByaXNlLWJlYW5zPgpAQCAtMjksNyArMjksNyBAQAogICAgICAgPGVqYi1uYW1lPkhlbGxvU3RhdGVmdWxFSkI8L2VqYi1uYW1lPgogICAgICAgPGJ1c2luZXNzLWxvY2FsPmNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaGVsbG8uc2Vzc2lvbjMuSGVsbG9TdGF0ZWZ1bDwvYnVzaW5lc3MtbG9jYWw+CiAgICAgICA8ZWpiLWNsYXNzPmNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaGVsbG8uc2Vzc2lvbjMuSGVsbG9TdGF0ZWZ1bEVKQjwvZWpiLWNsYXNzPgotICAgICAgCisKICAgICAgIDxhZG1pbmlzdGVyZWQtb2JqZWN0PgogICAgICAgICA8ZGVzY3JpcHRpb24+Z2xvYmFsLXNjb3BlIHJlc291cmNlIHRvIGJlIG1vZGlmaWVkIGJ5IEREPC9kZXNjcmlwdGlvbj4KICAgICAgICAgPG5hbWU+amF2YTpnbG9iYWwvZW52L0hlbGxvU3RhdGVmdWxFSkJfTW9kQnlERF9BZG1pbk9iamVjdDwvbmFtZT4KQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgICA8dmFsdWU+Y29ubmVjdG9yLk15QWRtaW5PYmplY3Q8L3ZhbHVlPgogICAgICAgICA8L3Byb3BlcnR5PgogICAgICAgPC9hZG1pbmlzdGVyZWQtb2JqZWN0PgotICAgICAgCisKICAgICAgIDxhZG1pbmlzdGVyZWQtb2JqZWN0PgogICAgICAgICA8ZGVzY3JpcHRpb24+bW9kdWxlLXNjb3BlIHJlc291cmNlIGRlZmluZWQgaW4gRUpCIEREPC9kZXNjcmlwdGlvbj4KICAgICAgICAgPG5hbWU+amF2YTptb2R1bGUvZW52L0hlbGxvU3RhdGVmdWxFSkJfRERfQWRtaW5PYmplY3Q8L25hbWU+CkBAIC02NSw3ICs2NSw3IEBACiAgICAgICAgICAgPHZhbHVlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC92YWx1ZT4KICAgICAgICAgPC9wcm9wZXJ0eT4KICAgICAgIDwvYWRtaW5pc3RlcmVkLW9iamVjdD4KLSAgICAgIAorCiAgICAgICA8YWRtaW5pc3RlcmVkLW9iamVjdD4KICAgICAgICAgPGRlc2NyaXB0aW9uPmFwcGxpY2F0aW9uLXNjb3BlIHJlc291cmNlIGRlZmluZWQgaW4gRUpCIEREPC9kZXNjcmlwdGlvbj4KICAgICAgICAgPG5hbWU+amF2YTphcHAvZW52L0hlbGxvU3RhdGVmdWxFSkJfRERfQWRtaW5PYmplY3Q8L25hbWU+CkBAIC03Nyw3ICs3Nyw3IEBACiAgICAgICAgICAgPHZhbHVlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC92YWx1ZT4KICAgICAgICAgPC9wcm9wZXJ0eT4KICAgICAgIDwvYWRtaW5pc3RlcmVkLW9iamVjdD4KLSAgICAgIAorCiAgICAgICA8YWRtaW5pc3RlcmVkLW9iamVjdD4KICAgICAgICAgPGRlc2NyaXB0aW9uPmNvbXBvbmVudC1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGluIEVKQiBERDwvZGVzY3JpcHRpb24+CiAgICAgICAgIDxuYW1lPmphdmE6Y29tcC9lbnYvSGVsbG9TdGF0ZWZ1bEVKQl9ERF9BZG1pbk9iamVjdDwvbmFtZT4KQEAgLTg5LDcgKzg5LDcgQEAKICAgICAgICAgICA8dmFsdWU+Y29ubmVjdG9yLk15QWRtaW5PYmplY3Q8L3ZhbHVlPgogICAgICAgICA8L3Byb3BlcnR5PgogICAgICAgPC9hZG1pbmlzdGVyZWQtb2JqZWN0PgotICAgICAgCisKICAgICA8L3Nlc3Npb24+CiAgICAgPHNlc3Npb24+CiAgICAgICA8ZGlzcGxheS1uYW1lPkhlbGxvRUpCPC9kaXNwbGF5LW5hbWU+CkBAIC0xMjAsNyArMTIwLDcgQEAKICAgICAgICAgICA8dmFsdWU+Y29ubmVjdG9yLk15QWRtaW5PYmplY3Q8L3ZhbHVlPgogICAgICAgICA8L3Byb3BlcnR5PgogICAgICAgPC9hZG1pbmlzdGVyZWQtb2JqZWN0PgotICAgICAgCisKICAgICAgIDxhZG1pbmlzdGVyZWQtb2JqZWN0PgogICAgICAgICA8ZGVzY3JpcHRpb24+YXBwbGljYXRpb24tc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBpbiBFSkIgREQ8L2Rlc2NyaXB0aW9uPgogICAgICAgICA8bmFtZT5qYXZhOmFwcC9lbnYvSGVsbG9FSkJfRERfQWRtaW5PYmplY3Q8L25hbWU+CkBAIC0xNTYsOCArMTU2LDggQEAKICAgICAgICAgICA8dmFsdWU+Y29ubmVjdG9yLk15QWRtaW5PYmplY3Q8L3ZhbHVlPgogICAgICAgICA8L3Byb3BlcnR5PgogICAgICAgPC9hZG1pbmlzdGVyZWQtb2JqZWN0PgotICAgICAgCisKICAgICA8L3Nlc3Npb24+CiAgIDwvZW50ZXJwcmlzZS1iZWFucz4KLSAgCisKIDwvZWpiLWphcj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vZGVzY3JpcHRvci91dC1hcHBsaWNhdGlvbi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL2Rlc2NyaXB0b3IvdXQtYXBwbGljYXRpb24ueG1sCmluZGV4IGRkM2ZiZWMuLjYzYTlhOGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vZGVzY3JpcHRvci91dC1hcHBsaWNhdGlvbi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9kZXNjcmlwdG9yL3V0LWFwcGxpY2F0aW9uLnhtbApAQCAtMjAsNyArMjAsNyBAQAogPGFwcGxpY2F0aW9uIHhtbG5zPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSI3IgogICAgICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSBodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL2FwcGxpY2F0aW9uXzcueHNkIj4KICAgICA8ZGlzcGxheS1uYW1lPmFkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbkFwcDwvZGlzcGxheS1uYW1lPgotICAgIAorCiAgICAgPG1vZHVsZT4KICAgICAgICAgPGphdmE+YWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWNsaWVudC5qYXI8L2phdmE+CiAgICAgPC9tb2R1bGU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL2Rlc2NyaXB0b3IvdXQtZW50aXR5LWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9kZXNjcmlwdG9yL3V0LWVudGl0eS1lamItamFyLnhtbAppbmRleCA2NmFhN2JhLi43YWIyYTkzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL2Rlc2NyaXB0b3IvdXQtZW50aXR5LWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vZGVzY3JpcHRvci91dC1lbnRpdHktZWpiLWphci54bWwKQEAgLTE4LDExICsxOCwxMSBAQAogLS0+CiAKIDxlamItamFyIHhtbG5zPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlIgotICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCi0gICAgICAgICBtZXRhZGF0YS1jb21wbGV0ZT0iZmFsc2UiIHZlcnNpb249IjMuMiIgCisgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgICAgICAgbWV0YWRhdGEtY29tcGxldGU9ImZhbHNlIiB2ZXJzaW9uPSIzLjIiCiAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUgaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS9lamItamFyXzNfMi54c2QiPgogICA8bW9kdWxlLW5hbWU+YWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVqYjwvbW9kdWxlLW5hbWU+Ci0gIAorCiAgIDxlbnRlcnByaXNlLWJlYW5zPgogICAgIDxlbnRpdHk+CiAgICAgICA8ZWpiLW5hbWU+SGVsbG9FbnRpdHk8L2VqYi1uYW1lPgpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICAgIDx2YWx1ZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvdmFsdWU+CiAgICAgICAgIDwvcHJvcGVydHk+CiAgICAgICA8L2FkbWluaXN0ZXJlZC1vYmplY3Q+Ci0gICAgICAKKwogICAgICAgPGFkbWluaXN0ZXJlZC1vYmplY3Q+CiAgICAgICAgIDxkZXNjcmlwdGlvbj5tb2R1bGUtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBpbiBFSkIgREQ8L2Rlc2NyaXB0aW9uPgogICAgICAgICA8bmFtZT5qYXZhOm1vZHVsZS9lbnYvRW50aXR5X0FkbWluT2JqZWN0PC9uYW1lPgpAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICAgIDx2YWx1ZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvdmFsdWU+CiAgICAgICAgIDwvcHJvcGVydHk+CiAgICAgICA8L2FkbWluaXN0ZXJlZC1vYmplY3Q+Ci0gICAgICAKKwogICAgICAgPGFkbWluaXN0ZXJlZC1vYmplY3Q+CiAgICAgICAgIDxkZXNjcmlwdGlvbj5jb21wb25lbnQtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBpbiBFSkIgREQ8L2Rlc2NyaXB0aW9uPgogICAgICAgICA8bmFtZT5qYXZhOmNvbXAvZW52L0VudGl0eV9BZG1pbk9iamVjdDwvbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vZGVzY3JpcHRvci91dC1pbnRlcmNlcHRvci1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vZGVzY3JpcHRvci91dC1pbnRlcmNlcHRvci1lamItamFyLnhtbAppbmRleCAyNDhiODYxLi5jOGU5YzkxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL2Rlc2NyaXB0b3IvdXQtaW50ZXJjZXB0b3ItZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9kZXNjcmlwdG9yL3V0LWludGVyY2VwdG9yLWVqYi1qYXIueG1sCkBAIC0xOCw4ICsxOCw4IEBACiAtLT4KIAogPGVqYi1qYXIgeG1sbnM9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUiCi0gICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKLSAgICAgICAgIG1ldGFkYXRhLWNvbXBsZXRlPSJmYWxzZSIgdmVyc2lvbj0iMy4yIiAKKyAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgICAgICBtZXRhZGF0YS1jb21wbGV0ZT0iZmFsc2UiIHZlcnNpb249IjMuMiIKICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSBodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL2VqYi1qYXJfM18yLnhzZCI+CiAgIDxtb2R1bGUtbmFtZT5hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZWpiPC9tb2R1bGUtbmFtZT4KICAgPGludGVyY2VwdG9ycz4KQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgICAgICA8dmFsdWU+Y29ubmVjdG9yLk15QWRtaW5PYmplY3Q8L3ZhbHVlPgogICAgICAgICA8L3Byb3BlcnR5PgogICAgICAgPC9hZG1pbmlzdGVyZWQtb2JqZWN0PgotICAgICAgCisKICAgICAgIDxhZG1pbmlzdGVyZWQtb2JqZWN0PgogICAgICAgICA8ZGVzY3JpcHRpb24+bW9kdWxlLXNjb3BlIHJlc291cmNlIGRlZmluZWQgaW4gRUpCIEREPC9kZXNjcmlwdGlvbj4KICAgICAgICAgPG5hbWU+amF2YTptb2R1bGUvZW52L0ludGVyY2VwdG9yX0FkbWluT2JqZWN0PC9uYW1lPgpAQCAtNDksNyArNDksNyBAQAogICAgICAgICAgIDx2YWx1ZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvdmFsdWU+CiAgICAgICAgIDwvcHJvcGVydHk+CiAgICAgICA8L2FkbWluaXN0ZXJlZC1vYmplY3Q+Ci0gICAgICAKKwogICAgICAgPGFkbWluaXN0ZXJlZC1vYmplY3Q+CiAgICAgICAgIDxkZXNjcmlwdGlvbj5jb21wb25lbnQtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBpbiBFSkIgREQ8L2Rlc2NyaXB0aW9uPgogICAgICAgICA8bmFtZT5qYXZhOmNvbXAvZW52L0ludGVyY2VwdG9yX0FkbWluT2JqZWN0PC9uYW1lPgpAQCAtNjMsNSArNjMsNSBAQAogICAgICAgPC9hZG1pbmlzdGVyZWQtb2JqZWN0PgogICAgIDwvaW50ZXJjZXB0b3I+CiAgIDwvaW50ZXJjZXB0b3JzPgotICAKKwogPC9lamItamFyPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9kZXNjcmlwdG9yL3V0LW1kYi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vZGVzY3JpcHRvci91dC1tZGItZWpiLWphci54bWwKaW5kZXggZWZkODlmNC4uNzRlY2FkOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9kZXNjcmlwdG9yL3V0LW1kYi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL2Rlc2NyaXB0b3IvdXQtbWRiLWVqYi1qYXIueG1sCkBAIC0xOCw4ICsxOCw4IEBACiAtLT4KIAogPGVqYi1qYXIgeG1sbnM9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUiCi0gICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKLSAgICAgICAgIG1ldGFkYXRhLWNvbXBsZXRlPSJmYWxzZSIgdmVyc2lvbj0iMy4yIiAKKyAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgICAgICBtZXRhZGF0YS1jb21wbGV0ZT0iZmFsc2UiIHZlcnNpb249IjMuMiIKICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSBodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL2VqYi1qYXJfM18yLnhzZCI+CiAgIDxtb2R1bGUtbmFtZT5hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZWpiPC9tb2R1bGUtbmFtZT4KICAgPGVudGVycHJpc2UtYmVhbnM+CkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgICAgPHZhbHVlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC92YWx1ZT4KICAgICAgICAgPC9wcm9wZXJ0eT4KICAgICAgIDwvYWRtaW5pc3RlcmVkLW9iamVjdD4KLSAgICAgIAorCiAgICAgICA8YWRtaW5pc3RlcmVkLW9iamVjdD4KICAgICAgICAgPGRlc2NyaXB0aW9uPm1vZHVsZS1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGluIEVKQiBERDwvZGVzY3JpcHRpb24+CiAgICAgICAgIDxuYW1lPmphdmE6bW9kdWxlL2Vudi9NREJfQWRtaW5PYmplY3Q8L25hbWU+CkBAIC01Miw3ICs1Miw3IEBACiAgICAgICAgICAgPHZhbHVlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC92YWx1ZT4KICAgICAgICAgPC9wcm9wZXJ0eT4KICAgICAgIDwvYWRtaW5pc3RlcmVkLW9iamVjdD4KLSAgICAgIAorCiAgICAgICA8YWRtaW5pc3RlcmVkLW9iamVjdD4KICAgICAgICAgPGRlc2NyaXB0aW9uPmNvbXBvbmVudC1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGluIEVKQiBERDwvZGVzY3JpcHRpb24+CiAgICAgICAgIDxuYW1lPmphdmE6Y29tcC9lbnYvTURCX0FkbWluT2JqZWN0PC9uYW1lPgpAQCAtNjQsOCArNjQsOCBAQAogICAgICAgICAgIDx2YWx1ZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvdmFsdWU+CiAgICAgICAgIDwvcHJvcGVydHk+CiAgICAgICA8L2FkbWluaXN0ZXJlZC1vYmplY3Q+Ci0gICAgICAKKwogICAgIDwvbWVzc2FnZS1kcml2ZW4+CiAgIDwvZW50ZXJwcmlzZS1iZWFucz4KLSAgCisKIDwvZWpiLWphcj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vZGVzY3JpcHRvci91dC1zZXNzaW9uLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9kZXNjcmlwdG9yL3V0LXNlc3Npb24tZWpiLWphci54bWwKaW5kZXggYzcyMjI5NS4uMzdlMDAzYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9kZXNjcmlwdG9yL3V0LXNlc3Npb24tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9kZXNjcmlwdG9yL3V0LXNlc3Npb24tZWpiLWphci54bWwKQEAgLTE4LDggKzE4LDggQEAKIC0tPgogCiA8ZWpiLWphciB4bWxucz0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSIKLSAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAotICAgICAgICAgbWV0YWRhdGEtY29tcGxldGU9ImZhbHNlIiB2ZXJzaW9uPSIzLjIiIAorICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgICAgIG1ldGFkYXRhLWNvbXBsZXRlPSJmYWxzZSIgdmVyc2lvbj0iMy4yIgogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlIGh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUvZWpiLWphcl8zXzIueHNkIj4KICAgPG1vZHVsZS1uYW1lPmFkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1lamI8L21vZHVsZS1uYW1lPgogICA8ZW50ZXJwcmlzZS1iZWFucz4KQEAgLTI4LDcgKzI4LDcgQEAKICAgICAgIDxlamItbmFtZT5IZWxsb1N0YXRlZnVsRUpCPC9lamItbmFtZT4KICAgICAgIDxidXNpbmVzcy1sb2NhbD5jb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmhlbGxvLnNlc3Npb24zLkhlbGxvU3RhdGVmdWw8L2J1c2luZXNzLWxvY2FsPgogICAgICAgPGVqYi1jbGFzcz5jb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmhlbGxvLnNlc3Npb24zLkhlbGxvU3RhdGVmdWxFSkI8L2VqYi1jbGFzcz4KLSAgICAgIAorCiAgICAgICA8YWRtaW5pc3RlcmVkLW9iamVjdD4KICAgICAgICAgPGRlc2NyaXB0aW9uPmdsb2JhbC1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGluIEVKQiBERDwvZGVzY3JpcHRpb24+CiAgICAgICAgIDxuYW1lPmphdmE6Z2xvYmFsL2Vudi9TdGF0ZWZ1bEVKQl9BZG1pbk9iamVjdDwvbmFtZT4KQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgICA8dmFsdWU+Y29ubmVjdG9yLk15QWRtaW5PYmplY3Q8L3ZhbHVlPgogICAgICAgICA8L3Byb3BlcnR5PgogICAgICAgPC9hZG1pbmlzdGVyZWQtb2JqZWN0PgotICAgICAgCisKICAgICAgIDxhZG1pbmlzdGVyZWQtb2JqZWN0PgogICAgICAgICA8ZGVzY3JpcHRpb24+bW9kdWxlLXNjb3BlIHJlc291cmNlIGRlZmluZWQgaW4gRUpCIEREPC9kZXNjcmlwdGlvbj4KICAgICAgICAgPG5hbWU+amF2YTptb2R1bGUvZW52L1N0YXRlZnVsRUpCX0FkbWluT2JqZWN0PC9uYW1lPgpAQCAtNTIsNyArNTIsNyBAQAogICAgICAgICAgIDx2YWx1ZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvdmFsdWU+CiAgICAgICAgIDwvcHJvcGVydHk+CiAgICAgICA8L2FkbWluaXN0ZXJlZC1vYmplY3Q+Ci0gICAgICAKKwogICAgICAgPGFkbWluaXN0ZXJlZC1vYmplY3Q+CiAgICAgICAgIDxkZXNjcmlwdGlvbj5jb21wb25lbnQtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBpbiBFSkIgREQ8L2Rlc2NyaXB0aW9uPgogICAgICAgICA8bmFtZT5qYXZhOmNvbXAvZW52L1N0YXRlZnVsRUpCX0FkbWluT2JqZWN0PC9uYW1lPgpAQCAtNjQsNyArNjQsNyBAQAogICAgICAgICAgIDx2YWx1ZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvdmFsdWU+CiAgICAgICAgIDwvcHJvcGVydHk+CiAgICAgICA8L2FkbWluaXN0ZXJlZC1vYmplY3Q+Ci0gICAgICAKKwogICAgIDwvc2Vzc2lvbj4KICAgICA8c2Vzc2lvbj4KICAgICAgIDxkaXNwbGF5LW5hbWU+SGVsbG9FSkI8L2Rpc3BsYXktbmFtZT4KQEAgLTgzLDcgKzgzLDcgQEAKICAgICAgICAgICA8dmFsdWU+Y29ubmVjdG9yLk15QWRtaW5PYmplY3Q8L3ZhbHVlPgogICAgICAgICA8L3Byb3BlcnR5PgogICAgICAgPC9hZG1pbmlzdGVyZWQtb2JqZWN0PgotICAgICAgCisKICAgICAgIDxhZG1pbmlzdGVyZWQtb2JqZWN0PgogICAgICAgICA8ZGVzY3JpcHRpb24+bW9kdWxlLXNjb3BlIHJlc291cmNlIGRlZmluZWQgaW4gRUpCIEREPC9kZXNjcmlwdGlvbj4KICAgICAgICAgPG5hbWU+amF2YTptb2R1bGUvZW52L0hlbGxvRUpCX0FkbWluT2JqZWN0PC9uYW1lPgpAQCAtOTUsNyArOTUsNyBAQAogICAgICAgICAgIDx2YWx1ZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvdmFsdWU+CiAgICAgICAgIDwvcHJvcGVydHk+CiAgICAgICA8L2FkbWluaXN0ZXJlZC1vYmplY3Q+Ci0gICAgICAKKwogICAgICAgPGFkbWluaXN0ZXJlZC1vYmplY3Q+CiAgICAgICAgIDxkZXNjcmlwdGlvbj5jb21wb25lbnQtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBpbiBFSkIgREQ8L2Rlc2NyaXB0aW9uPgogICAgICAgICA8bmFtZT5qYXZhOmNvbXAvZW52L0hlbGxvRUpCX0FkbWluT2JqZWN0PC9uYW1lPgpAQCAtMTA3LDggKzEwNyw4IEBACiAgICAgICAgICAgPHZhbHVlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC92YWx1ZT4KICAgICAgICAgPC9wcm9wZXJ0eT4KICAgICAgIDwvYWRtaW5pc3RlcmVkLW9iamVjdD4KLSAgICAgIAorCiAgICAgPC9zZXNzaW9uPgogICA8L2VudGVycHJpc2UtYmVhbnM+Ci0gIAorCiA8L2VqYi1qYXI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL2Rlc2NyaXB0b3IvdXQtd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vZGVzY3JpcHRvci91dC13ZWIueG1sCmluZGV4IDdmZTMxN2UuLjY2NDM2MDEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vZGVzY3JpcHRvci91dC13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vZGVzY3JpcHRvci91dC13ZWIueG1sCkBAIC0xOCw4ICsxOCw4IEBACiAtLT4KIAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUiCi0gICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAgICAKLSAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSB3ZWItYXBwXzNfMS54c2QiICAgIAorICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSB3ZWItYXBwXzNfMS54c2QiCiAgICAgICAgICB2ZXJzaW9uPSIzLjEiPgogCiAgICAgPGRpc3BsYXktbmFtZT5hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb248L2Rpc3BsYXktbmFtZT4KQEAgLTU2LDcgKzU2LDcgQEAKICAgICAgICAgIDx2YWx1ZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvdmFsdWU+CiAgICAgICAgPC9wcm9wZXJ0eT4KICAgICAgPC9hZG1pbmlzdGVyZWQtb2JqZWN0PgotICAgIAorCiAgICAgIDxhZG1pbmlzdGVyZWQtb2JqZWN0PgogICAgICAgIDxkZXNjcmlwdGlvbj5tb2R1bGUtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBpbiBXZWIgREQ8L2Rlc2NyaXB0aW9uPgogICAgICAgIDxuYW1lPmphdmE6bW9kdWxlL2Vudi9BZG1pbk9iamVjdDwvbmFtZT4KQEAgLTY4LDYgKzY4LDYgQEAKICAgICAgICAgIDx2YWx1ZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvdmFsdWU+CiAgICAgICAgPC9wcm9wZXJ0eT4KICAgICAgPC9hZG1pbmlzdGVyZWQtb2JqZWN0PgotICAgIAorCiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggOTQ3NmUzNC4uZTAyZWRiNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTE4LDggKzE4LDggQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSIKLSAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiICAgIAotICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlIHdlYi1hcHBfM18xLnhzZCIgICAKKyAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUgd2ViLWFwcF8zXzEueHNkIgogICAgICAgICAgdmVyc2lvbj0iMy4xIgogICAgICAgICAgbWV0YWRhdGEtY29tcGxldGU9ImZhbHNlIj4KIApAQCAtNzAsNyArNzAsNyBAQAogICAgICAgICAgPHZhbHVlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC92YWx1ZT4KICAgICAgICA8L3Byb3BlcnR5PgogICAgICA8L2FkbWluaXN0ZXJlZC1vYmplY3Q+Ci0gICAgCisKICAgICAgPGFkbWluaXN0ZXJlZC1vYmplY3Q+CiAgICAgICAgPGRlc2NyaXB0aW9uPm1vZHVsZS1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGluIFdlYiBERDwvZGVzY3JpcHRpb24+CiAgICAgICAgPG5hbWU+amF2YTptb2R1bGUvZW52L1dlYl9ERF9BZG1pbk9iamVjdDwvbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vZWpiL0hlbGxvRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL2VqYi9IZWxsb0VKQi5qYXZhCmluZGV4IGYyNDNjNTQuLmZjY2Y5MGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vZWpiL0hlbGxvRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9lamIvSGVsbG9FSkIuamF2YQpAQCAtMzMsMzUgKzMzLDM1IEBACiAgICAgICAgICAgICAgICAgcHJvcGVydGllcyA9IHsib3JnLmdsYXNzZmlzaC5hZG1pbi1vYmplY3QucmVzVHlwZT1jb25uZWN0b3IuTXlBZG1pbk9iamVjdCJ9CiAgICAgICAgICAgKSwKICAgICAgICAgICBAQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbigKLSAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gImdsb2JhbC1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGJ5IEBBZG1pbmlzdGVyZWRPYmplY3REZWZpbml0aW9uIiwgCi0gICAgICAgICAgICAgICBuYW1lID0gImphdmE6Z2xvYmFsL2Vudi9IZWxsb0VKQl9Bbm5vdGF0aW9uX0FkbWluT2JqZWN0IiwgCisgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICJnbG9iYWwtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBieSBAQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbiIsCisgICAgICAgICAgICAgICBuYW1lID0gImphdmE6Z2xvYmFsL2Vudi9IZWxsb0VKQl9Bbm5vdGF0aW9uX0FkbWluT2JqZWN0IiwKICAgICAgICAgICAgICAgIGludGVyZmFjZU5hbWUgPSAiamFrYXJ0YS5qbXMuRGVzdGluYXRpb24iLAogICAgICAgICAgICAgICAgY2xhc3NOYW1lID0gImNvbm5lY3Rvci5NeUFkbWluT2JqZWN0IiwKICAgICAgICAgICAgICAgIHJlc291cmNlQWRhcHRlcj0iYW9kLXJhIiwKICAgICAgICAgICAgICAgIHByb3BlcnRpZXMgPSB7Im9yZy5nbGFzc2Zpc2guYWRtaW4tb2JqZWN0LnJlc1R5cGU9Y29ubmVjdG9yLk15QWRtaW5PYmplY3QifQogICAgICAgICAgICksCi0gICAgICAgICAgCisKICAgICAgICAgICBAQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbigKLSAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gImFwcGxpY2F0aW9uLXNjb3BlIHJlc291cmNlIGRlZmluZWQgYnkgQEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb24iLCAKLSAgICAgICAgICAgICAgIG5hbWUgPSAiamF2YTphcHAvZW52L0hlbGxvRUpCX0Fubm90YXRpb25fQWRtaW5PYmplY3QiLCAKKyAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gImFwcGxpY2F0aW9uLXNjb3BlIHJlc291cmNlIGRlZmluZWQgYnkgQEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb24iLAorICAgICAgICAgICAgICAgbmFtZSA9ICJqYXZhOmFwcC9lbnYvSGVsbG9FSkJfQW5ub3RhdGlvbl9BZG1pbk9iamVjdCIsCiAgICAgICAgICAgICAgICBpbnRlcmZhY2VOYW1lID0gImpha2FydGEuam1zLkRlc3RpbmF0aW9uIiwKICAgICAgICAgICAgICAgIGNsYXNzTmFtZSA9ICJjb25uZWN0b3IuTXlBZG1pbk9iamVjdCIsCiAgICAgICAgICAgICAgICByZXNvdXJjZUFkYXB0ZXI9ImFvZC1yYSIsCiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzID0geyJvcmcuZ2xhc3NmaXNoLmFkbWluLW9iamVjdC5yZXNUeXBlPWNvbm5lY3Rvci5NeUFkbWluT2JqZWN0In0KICAgICAgICAgICApLAotICAgICAgICAgIAorCiAgICAgICAgICAgQEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb24oCi0gICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICJtb2R1bGUtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBieSBAQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbiIsIAotICAgICAgICAgICAgICAgbmFtZSA9ICJqYXZhOm1vZHVsZS9lbnYvSGVsbG9FSkJfQW5ub3RhdGlvbl9BZG1pbk9iamVjdCIsIAorICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAibW9kdWxlLXNjb3BlIHJlc291cmNlIGRlZmluZWQgYnkgQEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb24iLAorICAgICAgICAgICAgICAgbmFtZSA9ICJqYXZhOm1vZHVsZS9lbnYvSGVsbG9FSkJfQW5ub3RhdGlvbl9BZG1pbk9iamVjdCIsCiAgICAgICAgICAgICAgICBpbnRlcmZhY2VOYW1lID0gImpha2FydGEuam1zLkRlc3RpbmF0aW9uIiwKICAgICAgICAgICAgICAgIGNsYXNzTmFtZSA9ICJjb25uZWN0b3IuTXlBZG1pbk9iamVjdCIsCiAgICAgICAgICAgICAgICByZXNvdXJjZUFkYXB0ZXI9ImFvZC1yYSIsCiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzID0geyJvcmcuZ2xhc3NmaXNoLmFkbWluLW9iamVjdC5yZXNUeXBlPWNvbm5lY3Rvci5NeUFkbWluT2JqZWN0In0KICAgICAgICAgICApLAotICAgICAgICAgIAorCiAgICAgICAgICAgQEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb24oCi0gICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICJjb21wb25lbnQtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBieSBAQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbiIsIAotICAgICAgICAgICAgICAgbmFtZSA9ICJqYXZhOmNvbXAvZW52L0hlbGxvRUpCX0Fubm90YXRpb25fQWRtaW5PYmplY3QiLCAKKyAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gImNvbXBvbmVudC1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGJ5IEBBZG1pbmlzdGVyZWRPYmplY3REZWZpbml0aW9uIiwKKyAgICAgICAgICAgICAgIG5hbWUgPSAiamF2YTpjb21wL2Vudi9IZWxsb0VKQl9Bbm5vdGF0aW9uX0FkbWluT2JqZWN0IiwKICAgICAgICAgICAgICAgIGludGVyZmFjZU5hbWUgPSAiamFrYXJ0YS5qbXMuRGVzdGluYXRpb24iLAogICAgICAgICAgICAgICAgY2xhc3NOYW1lID0gImNvbm5lY3Rvci5NeUFkbWluT2JqZWN0IiwKICAgICAgICAgICAgICAgIHJlc291cmNlQWRhcHRlcj0iYW9kLXJhIiwKQEAgLTEwOSw3ICsxMDksNyBAQAogICAgICAgICBsb29rdXBBZG1pbk9iamVjdCgiamF2YTphcHAvZW52L0hlbGxvRUpCX0REX0FkbWluT2JqZWN0IiwgdHJ1ZSk7CiAgICAgICAgIGxvb2t1cEFkbWluT2JqZWN0KCJqYXZhOm1vZHVsZS9lbnYvSGVsbG9FSkJfRERfQWRtaW5PYmplY3QiLCB0cnVlKTsKICAgICAgICAgbG9va3VwQWRtaW5PYmplY3QoImphdmE6Y29tcC9lbnYvSGVsbG9FSkJfRERfQWRtaW5PYmplY3QiLCB0cnVlKTsKLSAgICAgICAgCisKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb0VKQjo6aGVsbG8oKSIpOwogICAgIH0KIApAQCAtMTI3LDYgKzEyNyw2IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9lamIvSGVsbG9TdGF0ZWZ1bEVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9lamIvSGVsbG9TdGF0ZWZ1bEVKQi5qYXZhCmluZGV4IGYzMTBiNDUuLjFjYmNlZTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vZWpiL0hlbGxvU3RhdGVmdWxFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL2VqYi9IZWxsb1N0YXRlZnVsRUpCLmphdmEKQEAgLTExNSw3ICsxMTUsNyBAQAogICAgICAgICBsb29rdXBBZG1pbk9iamVjdCgiamF2YTphcHAvZW52L0hlbGxvRUpCX0REX0FkbWluT2JqZWN0IiwgdHJ1ZSk7CiAgICAgICAgIGxvb2t1cEFkbWluT2JqZWN0KCJqYXZhOm1vZHVsZS9lbnYvSGVsbG9FSkJfRERfQWRtaW5PYmplY3QiLCB0cnVlKTsKICAgICAgICAgbG9va3VwQWRtaW5PYmplY3QoImphdmE6Y29tcC9lbnYvSGVsbG9FSkJfRERfQWRtaW5PYmplY3QiLCBmYWxzZSk7Ci0gICAgICAgIAorCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVmdWxFSkIgZGF0YXNvdXJjZS1kZWZpbml0aW9ucyBTdWNjZXNzIik7CiAKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvQWJzdHJhY3RSZXNvdXJjZUFkYXB0ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9BYnN0cmFjdFJlc291cmNlQWRhcHRlci5qYXZhCmluZGV4IDA3YjlkNzguLjBlZmNjNWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9BYnN0cmFjdFJlc291cmNlQWRhcHRlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9BYnN0cmFjdFJlc291cmNlQWRhcHRlci5qYXZhCkBAIC0yMyw3ICsyMyw3IEBACiAgICAgcHJpdmF0ZSBTdHJpbmcgdGVzdE5hbWU7CiAgICAgcHJvdGVjdGVkIGJvb2xlYW4gZGVidWcgPSB0cnVlOwogCi0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldFRlc3ROYW1lKCkgewogICAgICAgICByZXR1cm4gdGVzdE5hbWU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YQppbmRleCA1NTUzM2Q0Li5mNTliMmIzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YQpAQCAtMTgsNyArMTgsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIENvbnRyb2xzIHsKICAgICBwdWJsaWMgc3RhdGljIE9iamVjdCByZWFkeUxvY2sgPSBuZXcgT2JqZWN0KCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEKaW5kZXggN2UzNjM1Zi4uMmJlNjVmOSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQpAQCAtMjIsNyArMjIsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIERlbGl2ZXJ5V29yayBpbXBsZW1lbnRzIFdvcmsgewogCkBAIC0zMSw3ICszMSw3IEBACiAgICAgcHJpdmF0ZSBTdHJpbmcgb3A7CiAgICAgcHJpdmF0ZSBib29sZWFuIGtlZXBDb3VudDsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnRlciA9IDA7Ci0gICAgCisKICAgICBwdWJsaWMgRGVsaXZlcnlXb3JrKE1lc3NhZ2VFbmRwb2ludCBlcCwgaW50IG51bU9mTWVzc2FnZXMsIFN0cmluZyBvcCkgewogICAgICAgICB0aGlzLmVwID0gZXA7CiAgICAgICAgIHRoaXMubnVtID0gbnVtT2ZNZXNzYWdlczsKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgdGhpcy5rZWVwQ291bnQgPSBmYWxzZTsKICAgICB9CiAKLSAgICBwdWJsaWMgRGVsaXZlcnlXb3JrKE1lc3NhZ2VFbmRwb2ludCBlcCwgaW50IG51bU9mTWVzc2FnZXMsIAorICAgIHB1YmxpYyBEZWxpdmVyeVdvcmsoTWVzc2FnZUVuZHBvaW50IGVwLCBpbnQgbnVtT2ZNZXNzYWdlcywKICAgICAgICAgICAgIFN0cmluZyBvcCwgYm9vbGVhbiBrZWVwQ291bnQpIHsKICAgICAgICAgdGhpcy5lcCA9IGVwOwogICAgICAgICB0aGlzLm51bSA9IG51bU9mTWVzc2FnZXM7CkBAIC01MCw3ICs1MCw3IEBACiAgICAgcHVibGljIHZvaWQgcnVuKCkgewogCiAgICAgICAgIGRlYnVnKCJFTlRFUi4uLiIpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgLy9NZXRob2Qgb25NZXNzYWdlID0gZ2V0T25NZXNzYWdlTWV0aG9kKCk7CiAgICAgICAgICAgICAvL2VwLmJlZm9yZURlbGl2ZXJ5KG9uTWVzc2FnZSk7CkBAIC03MywxMSArNzMsMTEgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy9lcC5hZnRlckRlbGl2ZXJ5KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCJMRUFWRS4uLiIpOwogICAgIH0KIApAQCAtODgsMTQgKzg4LDE0IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSBNZXRob2QgZ2V0T25NZXNzYWdlTWV0aG9kKCkgewotICAgICAgICAKKwogICAgICAgICBNZXRob2Qgb25NZXNzYWdlTWV0aG9kID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENsYXNzIG1zZ0xpc3RlbmVyQ2xhc3MgPSBjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIuY2xhc3M7CiAgICAgICAgICAgICBDbGFzc1tdIHBhcmFtVHlwZXMgPSB7IGphdmEubGFuZy5TdHJpbmcuY2xhc3MgfTsKLSAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9IAorICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0KICAgICAgICAgICAgICAgICBtc2dMaXN0ZW5lckNsYXNzLmdldE1ldGhvZCgib25NZXNzYWdlIiwgcGFyYW1UeXBlcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhCmluZGV4IDEwMGNhY2UuLmZhOTNmNjMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhCkBAIC0zNiw3ICszNiw3IEBACiAgICAgICAgICAgICAgIGZsYWdUb1N0cmluZyhmbGFncykpOwogICAgIH0KIAotICAgIAorCiAgICAgcHVibGljIHZvaWQgZm9yZ2V0KFhpZCB4aWQpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5mb3JnZXQ6ICIgKyB4aWRUb1N0cmluZyh4aWQpKTsKICAgICB9CkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5wcmVwYXJlOiAiICsgeGlkVG9TdHJpbmcoeGlkKSk7CiAgICAgICAgIHJldHVybiBYQVJlc291cmNlLlhBX09LOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBYaWRbXSByZWNvdmVyKGludCBmbGFnKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2UucmVjb3ZlcjogIiArIGZsYWdUb1N0cmluZyhmbGFnKSk7CiAgICAgICAgIHJldHVybiBudWxsOwpAQCAtNjYsNyArNjYsNyBAQAogICAgIHB1YmxpYyBib29sZWFuIHNldFRyYW5zYWN0aW9uVGltZW91dChpbnQgc2Vjb25kcykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHN0YXJ0KFhpZCB4aWQsIGludCBmbGFncykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLnN0YXJ0OiAiICsgeGlkVG9TdHJpbmcoeGlkKSArICIsIiArCiAgICAgICAgICAgICAgICAgZmxhZ1RvU3RyaW5nKGZsYWdzKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvTWVzc2FnZXMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhCmluZGV4IGI1YjBmMDIuLjRjOWMwMTIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhCkBAIC0yMSw3ICsyMSw3IEBACiAvKioKICAqIGNvbGxlY3Rpb24gb2YgbWVzc2FnZXMuCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBNZXNzYWdlcyB7CiAKQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICBTdHJpbmcgY29tbWFuZCAgPSBhcmdzWzBdOwogICAgICAgIFN0cmluZyBkZXN0TmFtZSA9IGFyZ3NbMV07CiAgICAgICAgU3RyaW5nIG1lc3NhZ2UgID0gYXJnc1syXTsKLSAgIAorCiAgICAgICAgaWYgKCEiYWRkIi5lcXVhbHMoY29tbWFuZCkpIHsKICAgICAgICAgICAgU3lzdGVtLmV4aXQoMSk7CiAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL015Q29ubmVjdGlvbkZhY3RvcnkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9NeUNvbm5lY3Rpb25GYWN0b3J5LmphdmEKaW5kZXggOWYyNDY0OC4uOTIyZTcxZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL015Q29ubmVjdGlvbkZhY3RvcnkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvTXlDb25uZWN0aW9uRmFjdG9yeS5qYXZhCkBAIC0zMiw3ICszMiw3IEBACiAgICAgcHJpdmF0ZSBDb25uZWN0aW9uTWFuYWdlciBjbTsKICAgICBwcml2YXRlIE15TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG1jZjsKICAgICBwcml2YXRlIFJlZmVyZW5jZSByZWY7Ci0gICAgCisKICAgICBwdWJsaWMgTXlDb25uZWN0aW9uRmFjdG9yeShNeU1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2YsIENvbm5lY3Rpb25NYW5hZ2VyIGNtKSB7CiAgICAgICAgIHN1cGVyKCk7CiAgICAgICAgIHRoaXMubWNmID0gbWNmOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL015TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvTXlNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQppbmRleCAwNWIzMTE4Li5hNTYxNzYzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvTXlNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvTXlNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQpAQCAtNDQsNyArNDQsNyBAQAogICAgIHByaXZhdGUgQ29ubmVjdGlvbk1hbmFnZXIgY207CiAgICAgcHJpdmF0ZSBQcmludFdyaXRlciB3cml0ZXI7CiAgICAgcHJpdmF0ZSBUcmFuc2FjdGlvblN1cHBvcnRMZXZlbCB0cmFuc2FjdGlvblN1cHBvcnQgPSBUcmFuc2FjdGlvblN1cHBvcnRMZXZlbC5Mb2NhbFRyYW5zYWN0aW9uOzsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGVzdE5hbWUoKSB7CiAgICAgICAgIHJldHVybiB0ZXN0TmFtZTsKICAgICB9CkBAIC02OSw3ICs2OSw3IEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE1hbmFnZWRDb25uZWN0aW9uIGNyZWF0ZU1hbmFnZWRDb25uZWN0aW9uKFN1YmplY3Qgc3ViamVjdCwgIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyByZXFJbmZvKSAKKyAgICBwdWJsaWMgTWFuYWdlZENvbm5lY3Rpb24gY3JlYXRlTWFuYWdlZENvbm5lY3Rpb24oU3ViamVjdCBzdWJqZWN0LCAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIHJlcUluZm8pCiAgICAgICAgICAgICB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9CkBAIC04MCw3ICs4MCw3IEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE1hbmFnZWRDb25uZWN0aW9uIG1hdGNoTWFuYWdlZENvbm5lY3Rpb25zKFNldCBjYW5kaWRhdGVzLCBTdWJqZWN0IHN1YiwgIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyByZXFJbmZvKSAKKyAgICBwdWJsaWMgTWFuYWdlZENvbm5lY3Rpb24gbWF0Y2hNYW5hZ2VkQ29ubmVjdGlvbnMoU2V0IGNhbmRpZGF0ZXMsIFN1YmplY3Qgc3ViLCAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIHJlcUluZm8pCiAgICAgICAgICAgICB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvTXlXb3JrLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvTXlXb3JrLmphdmEKaW5kZXggNjE0MzgxZS4uNDQ4OTlhMCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL015V29yay5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9NeVdvcmsuamF2YQpAQCAtMjMsNyArMjMsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIE15V29yayBpbXBsZW1lbnRzIFdvcmsgewogCkBAIC0zMSw3ICszMSw3IEBACiAgICAgcHJpdmF0ZSBib29sZWFuIHN0b3AgPSBmYWxzZTsKICAgICBwcml2YXRlIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZmFjdG9yeTsKICAgICBwcml2YXRlIFdvcmtNYW5hZ2VyIHdtOwotICAgIAorCiAgICAgcHVibGljIE15V29yaygKICAgICAgICAgICAgIFN0cmluZyBuYW1lLCBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGZhY3RvcnksIFdvcmtNYW5hZ2VyIHdtKSB7CiAgICAgICAgIHRoaXMuZmFjdG9yeSA9IGZhY3Rvcnk7CkBAIC00OSw3ICs0OSw3IEBACiAgICAgICAgICAgICB0cnkgewogCiAgICAgICAgICAgICAgICAgTWV0aG9kIG9uTWVzc2FnZSA9IGdldE9uTWVzc2FnZU1ldGhvZCgpOwotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaXNEZWxpdmVyeVRyYW5zYWN0ZWQgPSAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpc0RlbGl2ZXJ5VHJhbnNhY3RlZCA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3J5LmlzRGVsaXZlcnlUcmFuc2FjdGVkKG9uTWVzc2FnZSkpOwogCiAgICAgICAgICAgICAgICAgLyoKQEAgLTY2LDcgKzY2LDcgQEAKICAgICAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiTEVBVkUuLi4iKTsKICAgICB9CiAKQEAgLTgxLDE0ICs4MSwxNCBAQAogICAgIH0KIAogICAgIHB1YmxpYyBNZXRob2QgZ2V0T25NZXNzYWdlTWV0aG9kKCkgewotICAgICAgICAKKwogICAgICAgICBNZXRob2Qgb25NZXNzYWdlTWV0aG9kID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENsYXNzIG1zZ0xpc3RlbmVyQ2xhc3MgPSBjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIuY2xhc3M7CiAgICAgICAgICAgICBDbGFzc1tdIHBhcmFtVHlwZXMgPSB7IGphdmEubGFuZy5TdHJpbmcuY2xhc3MgfTsKLSAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9IAorICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0KICAgICAgICAgICAgICAgICBtc2dMaXN0ZW5lckNsYXNzLmdldE1ldGhvZCgib25NZXNzYWdlIiwgcGFyYW1UeXBlcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhCmluZGV4IDUxMmU1YzYuLjRiNWU1ZjEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhCkBAIC0yNSwxMiArMjUsMTIgQEAKICAqIHNvIHRoYXQgdGhlIGFwcCBzZXJ2ZXIgY2FuIGluc3RhbnRpYXRlIGFuZCBjb25maWd1cmUKICAqIGl0IGF0IHRoZSBydW50aW1lLgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBAQWN0aXZhdGlvbigKICAgICAgICAgbWVzc2FnZUxpc3RlbmVycyA9IHtjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIuY2xhc3N9CiApCi1wdWJsaWMgY2xhc3MgU2ltcGxlQWN0aXZhdGlvblNwZWMgCitwdWJsaWMgY2xhc3MgU2ltcGxlQWN0aXZhdGlvblNwZWMKICAgICBpbXBsZW1lbnRzIEFjdGl2YXRpb25TcGVjLCBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7CiAKICAgICBwcml2YXRlIFN0cmluZyBkZXN0aW5hdGlvbk5hbWU7CkBAIC00Nyw3ICs0Nyw3IEBACiAgICAgcHVibGljIFN0cmluZyBnZXREZXN0aW5hdGlvbk5hbWUgKCkgewogICAgICAgICByZXR1cm4gdGhpcy5kZXN0aW5hdGlvbk5hbWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0RGVzdGluYXRpb25OYW1lIChTdHJpbmcgbmFtZSkgewogICAgICAgICBkZWJ1Zygic2V0RGVzdGluYXRpb25OYW1lKCkgY2FsbGVkLi4uIG5hbWUgPSAiICsgbmFtZSk7CiAgICAgICAgIHRoaXMuZGVzdGluYXRpb25OYW1lID0gbmFtZTsKQEAgLTU2LDcgKzU2LDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldERlc3RpbmF0aW9uVHlwZSgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZGVzdGluYXRpb25UeXBlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldERlc3RpbmF0aW9uVHlwZSAoU3RyaW5nIHR5cGUpIHsKICAgICAgICAgZGVidWcoInNldERlc3RpbmF0aW9uVHlwZSAoKSBjYWxsZWQuLi4gdHlwZSA9ICIgKyB0eXBlKTsKICAgICAgICAgdGhpcy5kZXN0aW5hdGlvblR5cGU9IHR5cGU7CkBAIC02NSw3ICs2NSw3IEBACiAgICAgcHVibGljIFN0cmluZyBnZXRUZXN0UHJvcCgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMudGVzdFByb3A7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0VGVzdFByb3AgKFN0cmluZyB0ZXN0UHJvcCkgewogICAgICAgICBkZWJ1Zygic2V0VGVzdFByb3AgKCkgY2FsbGVkLi4uIHRlc3RQcm9wID0gIiArIHRlc3RQcm9wKTsKICAgICAgICAgdGhpcy50ZXN0UHJvcCA9IHRlc3RQcm9wOwpAQCAtNzQsNyArNzQsNyBAQAogICAgIHB1YmxpYyBJbnRlZ2VyIGdldFRlc3RJbnRlZ2VyUHJvcCgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMudGVzdEludGVnZXJQcm9wOwogICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFRlc3RJbnRlZ2VyUHJvcCAoSW50ZWdlciB0ZXN0UHJvcDEpIHsKICAgICAgICAgZGVidWcoInNldFRlc3RJbnRlZ2VyUHJvcCAoKSBjYWxsZWQuLi4gdGVzdEludGVnZXJQcm9wID0gIiArIHRlc3RQcm9wMSk7CiAgICAgICAgIHRoaXMudGVzdEludGVnZXJQcm9wID0gdGVzdFByb3AxOwpAQCAtOTgsNyArOTgsNyBAQAogCiAgICAgICB9CiAKLSAgIH0gCisgICB9CiAKICAgICBwcml2YXRlIHZvaWQgZGVidWcgKFN0cmluZyBtZXNzYWdlKQogICAgIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbC5qYXZhCmluZGV4IDI4ZDllMjkuLmQxYzI2YmIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YQpAQCAtMjksMTQgKzI5LDE0IEBACiAKIC8qKgogICogVGhpcyBpcyBhIHNhbXBsZSByZXNvdXJjZSBhZGFwdGVyCi0gKiAKKyAqCiAgKiBAYXV0aG9yIFFpbmdxaW5nIE91eWFuZwogICovCiBAQ29ubmVjdG9yKAogLyogbW9kdWxlTmFtZT0iTXkgU2ltcGxlIFJBUiIsICovCi0gICAgZGlzcGxheU5hbWUgPSAiU2ltcGxlIFJlc291cmNlIEFkYXB0ZXIiLCAKLSAgICB2ZW5kb3JOYW1lID0gIkphdmEgU29mdHdhcmUiLCAKLSAgICBlaXNUeXBlID0gIkdlbmVyaWMgVHlwZSIsIAorICAgIGRpc3BsYXlOYW1lID0gIlNpbXBsZSBSZXNvdXJjZSBBZGFwdGVyIiwKKyAgICB2ZW5kb3JOYW1lID0gIkphdmEgU29mdHdhcmUiLAorICAgIGVpc1R5cGUgPSAiR2VuZXJpYyBUeXBlIiwKICAgICB2ZXJzaW9uID0gIjEuMEFscGhhIiwKICAgICB0cmFuc2FjdGlvblN1cHBvcnQ9VHJhbnNhY3Rpb25TdXBwb3J0TGV2ZWwuWEFUcmFuc2FjdGlvbikKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL1Rlc3RXTVdvcmsuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9UZXN0V01Xb3JrLmphdmEKaW5kZXggZWUwZmFlOS4uZTI0ODUwNiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL1Rlc3RXTVdvcmsuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvVGVzdFdNV29yay5qYXZhCkBAIC0yMyw3ICsyMyw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgVGVzdFdNV29yayBpbXBsZW1lbnRzIFdvcmsgewogCkBAIC0zNyw4ICszNyw4IEBACiAgICAgcHVibGljIFRlc3RXTVdvcmsoaW50IGlkLCBib29sZWFuIGlzUm9ndWUpIHsKICAgICAgICAgdGhpcyhpZCwgaXNSb2d1ZSwgZmFsc2UsIG51bGwpOwogICAgIH0KLSAgICAKLSAgICBwdWJsaWMgVGVzdFdNV29yayhpbnQgaWQsIGJvb2xlYW4gaXNSb2d1ZSwgCisKKyAgICBwdWJsaWMgVGVzdFdNV29yayhpbnQgaWQsIGJvb2xlYW4gaXNSb2d1ZSwKICAgICAgICAgICAgIGJvb2xlYW4gZG9OZXN0LCBFeGVjdXRpb25Db250ZXh0IGN0eCkgewogICAgICAgICB0aGlzLmlkID0gaWQ7CiAgICAgICAgIHRoaXMuaXNSb2d1ZSA9IGlzUm9ndWU7CkBAIC03MiwxMCArNzIsMTAgQEAKICAgICAgICAgICAgIH0gY2F0Y2ggKFdvcmtFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgICAgICBpZiAoZXguZ2V0RXJyb3JDb2RlKCkuZXF1YWxzKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdvcmtFeGNlcHRpb24uVFhfQ09OQ1VSUkVOVF9XT1JLX0RJU0FMTE9XRUQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsgCisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUEFTUzogQ0FVR0hUIEVYUEVDVEVEID0gIiArIGV4LmdldEVycm9yQ29kZSgpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArIAorICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZBSUw6IENBVUdIVCBVTkVYUEVDVEVEID0gIiArIGV4LmdldEVycm9yQ29kZSgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC04Nyw3ICs4Nyw3IEBACiAgICAgICAgICAgICAgICAgZWMuc2V0VHJhbnNhY3Rpb25UaW1lb3V0KDUqMTAwMCk7IC8vNSBzZWNvbmRzCiAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKG5lc3RlZFdvcmssIDEqMTAwMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAiRkFJTDogQ0FVR0hUIFVORVhQRUNURUQgPSAiICsgZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL1YzV29ya0Rpc3BhdGNoZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9WM1dvcmtEaXNwYXRjaGVyLmphdmEKaW5kZXggOGFkZjNjYy4uNGI0Mzc4MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL1YzV29ya0Rpc3BhdGNoZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvVjNXb3JrRGlzcGF0Y2hlci5qYXZhCkBAIC00Myw3ICs0Myw3IEBACiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludCBlcCA9IGZhY3RvcnkuY3JlYXRlRW5kcG9pbnQobmV3IEZha2VYQVJlc291cmNlKCkpOwogICAgICAgICAgICAgaW50IG51bU9mTWVzc2FnZXMgPSAxOwpAQCAtNzIsNyArNzIsNyBAQAogICAgICAgICAgICAgZGVidWcoIlYzV29ya0Rpc3BhdGNoZXIgY2FsbGluZyBET05FKCkiKTsKICAgICAgICAgICAgIGRvbmUoKTsKICAgICAgICAgICAgIGRlYnVnKCJWM1dvcmtEaXNwYXRjaGVyIGZpbmlzaGVkIGNhbGxpbmcgRE9ORSgpIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQppbmRleCA0MjI0OWRjLi5hMTQ0NDNhIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQpAQCAtMzIsNyArMzIsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIFdvcmtEaXNwYXRjaGVyIGltcGxlbWVudHMgV29yayB7CiAKQEAgLTQzLDExICs0MywxMSBAQAogICAgIHByb3RlY3RlZCBBY3RpdmF0aW9uU3BlYyBzcGVjOwogICAgIHByb3RlY3RlZCBXb3JrTWFuYWdlciB3bTsKICAgICBwcm90ZWN0ZWQgWEFUZXJtaW5hdG9yIHhhOwotICAgIAorCiAgICAgcHVibGljIFdvcmtEaXNwYXRjaGVyKAogICAgICAgICAgICAgU3RyaW5nIGlkLAogICAgICAgICAgICAgQm9vdHN0cmFwQ29udGV4dCBjdHgsCi0gICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGZhY3RvcnksIAorICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBmYWN0b3J5LAogICAgICAgICAgICAgQWN0aXZhdGlvblNwZWMgc3BlYykgewogICAgICAgICB0aGlzLmlkICAgICAgPSBpZDsKICAgICAgICAgdGhpcy5jdHggICAgID0gY3R4OwpAQCAtNjAsNyArNjAsNyBAQAogICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKIAogICAgICAgICBkZWJ1ZygiRU5URVIuLi4iKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHN5bmNocm9uaXplZCAoQ29udHJvbHMucmVhZHlMb2NrKSB7CiAgICAgICAgICAgICAgICAgZGVidWcoIldBSVQuLi4iKTsKQEAgLTgyLDI2ICs4MiwyNiBAQAogICAgICAgICAgICAgdHJ5IHsKIAogICAgICAgICAgICAgICAgIE1ldGhvZCBvbk1lc3NhZ2UgPSBnZXRPbk1lc3NhZ2VNZXRob2QoKTsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlzRGVsaXZlcnlUcmFuc2FjdGVkID0gIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaXNEZWxpdmVyeVRyYW5zYWN0ZWQgPSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3RvcnkuaXNEZWxpdmVyeVRyYW5zYWN0ZWQob25NZXNzYWdlKSk7CiAKICAgICAgICAgICAgICAgICBpZiAoIWZhY3RvcnkuaXNEZWxpdmVyeVRyYW5zYWN0ZWQob25NZXNzYWdlKSkgewogICAgICAgICAgICAgICAgICAgICAvL01lc3NhZ2VFbmRwb2ludCBlcCA9IGZhY3RvcnkuY3JlYXRlRW5kcG9pbnQobnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIC8vRGVsaXZlcnlXb3JrIGQgPSBuZXcgRGVsaXZlcnlXb3JrKCJOT19UWCIsIGVwKTsgCisgICAgICAgICAgICAgICAgICAgIC8vRGVsaXZlcnlXb3JrIGQgPSBuZXcgRGVsaXZlcnlXb3JrKCJOT19UWCIsIGVwKTsKICAgICAgICAgICAgICAgICAgICAgLy93bS5kb1dvcmsoZCwgMCwgbnVsbCwgbnVsbCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy9NZXNzYWdlRW5kcG9pbnQgZXAgPSBmYWN0b3J5LmNyZWF0ZUVuZHBvaW50KG51bGwpOwogICAgICAgICAgICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnQgZXAgPSBmYWN0b3J5LmNyZWF0ZUVuZHBvaW50KG5ldyBGYWtlWEFSZXNvdXJjZSgpKTsKICAgICAgICAgICAgICAgICAgICAgaW50IG51bU9mTWVzc2FnZXMgPSA1OwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvL2ltcG9ydGluZyB0cmFuc2FjdGlvbgogCiAgICAgICAgICAgICAgICAgICAgIC8vd3JpdGUvY29tbWl0CiAgICAgICAgICAgICAgICAgICAgIEV4ZWN1dGlvbkNvbnRleHQgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7CiAKLSAgICAgICAgICAgICAgICAgICAgRGVsaXZlcnlXb3JrIHcgPSAKKyAgICAgICAgICAgICAgICAgICAgRGVsaXZlcnlXb3JrIHcgPQogICAgICAgICAgICAgICAgICAgICAgICAgbmV3IERlbGl2ZXJ5V29yayhlcCwgbnVtT2ZNZXNzYWdlcywgIldSSVRFIik7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgdHJ1ZSk7CkBAIC0xMDksNyArMTA5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIkRPTkUgV1JJVEUgVE8gREIiKTsKICAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMuZXhwZWN0ZWRSZXN1bHRzID0gbnVtT2ZNZXNzYWdlczsKICAgICAgICAgICAgICAgICAgICAgbm90aWZ5QW5kV2FpdCgpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvL2RlbGV0ZS9yb2xsYmFjawogICAgICAgICAgICAgICAgICAgICBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKQEAgLTEyNSw3ICsxMjUsNyBAQAogICAgICAgICAgICAgICAgICAgICAvL2RlbGV0ZS9jb21taXQKICAgICAgICAgICAgICAgICAgICAgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIHcgPSBuZXcgRGVsaXZlcnlXb3JrKGVwLCBudW1PZk1lc3NhZ2VzLCAiREVMRVRFIik7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgdHJ1ZSk7CkBAIC0xNDksNyArMTQ5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgLy9kZWxldGUvY29tbWl0CiAgICAgICAgICAgICAgICAgICAgIGVjID0gc3RhcnRUeCgpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiU3RhcnQgVFggLSAiICsgZWMuZ2V0WGlkKCkpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICB3ID0gbmV3IERlbGl2ZXJ5V29yayhlcCwgbnVtT2ZNZXNzYWdlcywgIkRFTEVURSIpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIHRydWUpOwpAQCAtMTk0LDcgKzE5NCw3IEBACiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGlmIChYQVJlc291cmNlLlhBX09LID09IHhhLnByZXBhcmUoZWMuZ2V0WGlkKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJYQSBQUkVQQVJFL0NPTU1JVC4gRE9ORSBXUklURSBUTyBEQiAiKTsKQEAgLTIwNiwxOSArMjA2LDE5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBDb250cm9scy5leHBlY3RlZFJlc3VsdHMgPSAzOwogICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZ5QW5kV2FpdCgpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vZGVsZXRlIGFsbC4KICAgICAgICAgICAgICAgICAgICAgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIHcgPSBuZXcgRGVsaXZlcnlXb3JrKGVwLCAxLCAiREVMRVRFX0FMTCIpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIHRydWUpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiRE9ORSBERUxFVEUgQUxMIEZST00gREIiKTsKICAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMuZXhwZWN0ZWRSZXN1bHRzID0gMDsKICAgICAgICAgICAgICAgICAgICAgbm90aWZ5QW5kV2FpdCgpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBkb25lKCk7CiAgICAgICAgICAgICAgICAgfQogCkBAIC0yNDUsNyArMjQ1LDcgQEAKICAgICAgICAgICAgICAgICBkb25lKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIkxFQVZFLi4uIik7CiAgICAgfQogCkBAIC0yNjAsMTQgKzI2MCwxNCBAQAogICAgIH0KIAogICAgIHB1YmxpYyBNZXRob2QgZ2V0T25NZXNzYWdlTWV0aG9kKCkgewotICAgICAgICAKKwogICAgICAgICBNZXRob2Qgb25NZXNzYWdlTWV0aG9kID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENsYXNzIG1zZ0xpc3RlbmVyQ2xhc3MgPSBjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIuY2xhc3M7CiAgICAgICAgICAgICBDbGFzc1tdIHBhcmFtVHlwZXMgPSB7IGphdmEubGFuZy5TdHJpbmcuY2xhc3MgfTsKLSAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9IAorICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0KICAgICAgICAgICAgICAgICBtc2dMaXN0ZW5lckNsYXNzLmdldE1ldGhvZCgib25NZXNzYWdlIiwgcGFyYW1UeXBlcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CkBAIC0yOTAsMTMgKzI5MCwxMyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgLy9TbGVlcCBmb3IgNSBzZWNvbmRzCiAgICAgICAgICAgICAvL1RocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoNSoxMDAwKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQoQ29udHJvbHMucmVhZHlMb2NrKSB7CiAgICAgICAgICAgICAgICAgLy9Ob3RpZnkgdGhlIGNsaWVudCB0byBjaGVjayB0aGUgcmVzdWx0cwotICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay5ub3RpZnlBbGwoKTsgCisgICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLm5vdGlmeUFsbCgpOwogCiAgICAgICAgICAgICAgICAgLy9XYWl0IHVudGlsIHJlc3VsdHMgYXJlIHZlcmlmaWVkIGJ5IHRoZSBjbGllbnQKLSAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2sud2FpdCgpOyAKKyAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2sud2FpdCgpOwogCiAgICAgICAgICAgICAgICAgaWYgKHN0b3ApIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhCmluZGV4IDc3ZGJmMzQuLjZiZDllNTcgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEKQEAgLTM2LDggKzM2LDggQEAKICAgICBwdWJsaWMgaW50IGJyYW5jaFF1YWxpZmllcjsKICAgICBwdWJsaWMgaW50IGdsb2JhbFR4SUQ7CiAKLSAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYR1RSSURTSVpFPSA2NDsgCi0gICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEJRVUFMU0laRT0gNjQ7IAorICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhHVFJJRFNJWkU9IDY0OworICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhCUVVBTFNJWkU9IDY0OwogCiAgICAgcHVibGljIFhJRCgpIHsKICAgICAgICAgaW50IGZvbyA9IElEKys7CkBAIC01NSwxMCArNTUsMTAgQEAKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgICAgICAgICAgICAgICAgIC8vIEl0IGNhbid0IGJlIGVxdWFsCiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgb3RoZXIgPSAoWElEKW87ICAgICAgICAgICAgICAgICAgIC8vIFRoZSBvdGhlciBYSUQsIG5vdyBwcm9wZXJseSBjYXN0Ci0gICAgICAgIAotICAgICAgICBpZiAodGhpcy5mb3JtYXRJRCA9PSBvdGhlci5mb3JtYXRJRCAKKworICAgICAgICBpZiAodGhpcy5mb3JtYXRJRCA9PSBvdGhlci5mb3JtYXRJRAogICAgICAgICAgICAgICAgICYmIHRoaXMuYnJhbmNoUXVhbGlmaWVyID09IG90aGVyLmJyYW5jaFF1YWxpZmllcgogICAgICAgICAgICAgICAgICYmIHRoaXMuZ2xvYmFsVHhJRCA9PSBvdGhlci5nbG9iYWxUeElEKSB7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTk4LDcgKzk4LDcgQEAKICAgICAgICAgICAgICAgICAiZm9ybWF0SUQoIiAgICAgKyBmb3JtYXRJRCAgICAgKyAiKSwgIiArCiAgICAgICAgICAgICAgICAgImJyYW5jaFF1YWxpZmllciAoIiArIGJyYW5jaFF1YWxpZmllciArICIpLCAiICsKICAgICAgICAgICAgICAgICAiZ2xvYmFsVHhJRCgiICsgZ2xvYmFsVHhJRCArICIpfSIpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gczsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vc2VydmxldC9TZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL3NlcnZsZXQvU2VydmxldC5qYXZhCmluZGV4IDFiMWVmYTEuLjVkMzUzY2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vc2VydmxldC9TZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi9zZXJ2bGV0L1NlcnZsZXQuamF2YQpAQCAtNjQsNyArNjQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VBZGFwdGVyPSJhb2QtcmEiLAogICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcyA9IHsib3JnLmdsYXNzZmlzaC5hZG1pbi1vYmplY3QucmVzVHlwZT1jb25uZWN0b3IuTXlBZG1pbk9iamVjdCJ9CiAgICAgICAgICAgICAgICAgKSwKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIEBBZG1pbmlzdGVyZWRPYmplY3REZWZpbml0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249Im1vZHVsZS1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGJ5IEBBZG1pbmlzdGVyZWRPYmplY3REZWZpbml0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSAiamF2YTptb2R1bGUvZW52L1NlcnZsZXRfQWRtaW5PYmplY3QiLApAQCAtNzMsNyArNzMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VBZGFwdGVyPSJhb2QtcmEiLAogICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcyA9IHsib3JnLmdsYXNzZmlzaC5hZG1pbi1vYmplY3QucmVzVHlwZT1jb25uZWN0b3IuTXlBZG1pbk9iamVjdCJ9CiAgICAgICAgICAgICAgICAgKSwKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIEBBZG1pbmlzdGVyZWRPYmplY3REZWZpbml0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249ImNvbXBvbmVudC1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGJ5IEBBZG1pbmlzdGVyZWRPYmplY3REZWZpbml0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSAiamF2YTpjb21wL2Vudi9TZXJ2bGV0X0FkbWluT2JqZWN0IiwKQEAgLTkxLDcgKzkxLDcgQEAKIAogICAgIEBFSkIKICAgICBwcml2YXRlICBIZWxsbyBoZWxsb1N0YXRlbGVzczsKLSAgICAKKwogICAgIEBFSkIoYmVhbk5hbWUgPSAiSGVsbG9TdGF0ZWZ1bEVKQiIpCiAgICAgcHJpdmF0ZSAgSGVsbG9TdGF0ZWZ1bCBoZWxsb1N0YXRlZnVsOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL3V0L0FyY2hpdmVUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL3V0L0FyY2hpdmVUZXN0LmphdmEKaW5kZXggNzEwNWIyZi4uYTIxMzhhOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi91dC9BcmNoaXZlVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vdXQvQXJjaGl2ZVRlc3QuamF2YQpAQCAtNzAsNyArNzAsNyBAQAogICAgICAgICBBU1VSTENsYXNzTG9hZGVyIGNsYXNzTG9hZGVyID0gbmV3IEFTVVJMQ2xhc3NMb2FkZXIodGhpcy5nZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkpOwogICAgICAgICBjbGFzc0xvYWRlci5hZGRVUkwoYXJjaGl2ZS50b1VSTCgpKTsKICAgICAgICAgcmVhZGVyLnNldENsYXNzTG9hZGVyKGNsYXNzTG9hZGVyKTsKLSAgICAgICAgCisKICAgICAgICAgQXBwbGljYXRpb24gYXBwbGljYXRpb25EZXNjID0gcmVhZGVyLm9wZW4oYXJjaGl2ZSk7CiAvLyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLUFkbWluaXN0ZXJlZCBvYmplY3QgaW4gYXBwbGljYXRpb24ueG1sLS0tLS0tLS0tLSIpOwogLy8gICAgICAgIGZvciggQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbkRlc2NyaXB0b3IgYW9kZDogYXBwbGljYXRpb25EZXNjLmdldEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb25EZXNjcmlwdG9ycygpKXsKQEAgLTc4LDggKzc4LDggQEAKIC8vICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGFvZGQuZ2V0TmFtZSgpKTsKIC8vICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIiKTsKIC8vICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBNYXA8U3RyaW5nLEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb25EZXNjcmlwdG9yPiBleHBlY3RlZEFPRERzID0gCisKKyAgICAgICAgTWFwPFN0cmluZyxBZG1pbmlzdGVyZWRPYmplY3REZWZpbml0aW9uRGVzY3JpcHRvcj4gZXhwZWN0ZWRBT0REcyA9CiAgICAgICAgICAgICAgICAgbmV3IEhhc2hNYXA8U3RyaW5nLEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb25EZXNjcmlwdG9yPigpOwogICAgICAgICBBZG1pbmlzdGVyZWRPYmplY3REZWZpbml0aW9uRGVzY3JpcHRvciBkZXNjOwogCkBAIC0xMjksNyArMTI5LDcgQEAKICAgICAgICAgcmVhZGVyLnNldEFubm90YXRpb25Qcm9jZXNzaW5nUmVxdWVzdGVkKHRydWUpOwogICAgICAgICByZWFkZXIuc2V0Q2xhc3NMb2FkZXIoY2xhc3NMb2FkZXIpOwogICAgICAgICBhc3NlcnRUcnVlKCJBcmNoaXZpc3Qgc2hvdWxkIGhhbmRsZSBhbm5vdGF0aW9ucy4iLCByZWFkZXIuaXNBbm5vdGF0aW9uUHJvY2Vzc2luZ1JlcXVlc3RlZCgpKTsKLSAgICAgICAgCisKICAgICAgICAgV2ViQnVuZGxlRGVzY3JpcHRvciB3ZWJEZXNjID0gcmVhZGVyLm9wZW4oYXJjaGl2ZSk7CiAvLyAgICAgICAgZm9yKEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb25EZXNjcmlwdG9yIGFvZGQgOiB3ZWJEZXNjLmdldEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb25EZXNjcmlwdG9ycygpKXsKIC8vICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZXNjcmlwdGlvbiA9ICIrYW9kZC5nZXREZXNjcmlwdGlvbigpKTsKQEAgLTEzOCw3ICsxMzgsNyBAQAogLy8gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKIC8vICAgICAgICB9CiAKLSAgICAgICAgTWFwPFN0cmluZyxBZG1pbmlzdGVyZWRPYmplY3REZWZpbml0aW9uRGVzY3JpcHRvcj4gZXhwZWN0ZWRBT0REcyA9IAorICAgICAgICBNYXA8U3RyaW5nLEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb25EZXNjcmlwdG9yPiBleHBlY3RlZEFPRERzID0KICAgICAgICAgICAgICAgICBuZXcgSGFzaE1hcDxTdHJpbmcsQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbkRlc2NyaXB0b3I+KCk7CiAgICAgICAgIEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb25EZXNjcmlwdG9yIGRlc2M7CiAKQEAgLTE1OSw3ICsxNTksNyBAQAogICAgICAgICBkZXNjLnNldFJlc291cmNlQWRhcHRlcigiYW9kLXJhIik7CiAgICAgICAgIGRlc2MuYWRkUHJvcGVydHkoIm9yZy5nbGFzc2Zpc2guYWRtaW4tb2JqZWN0LnJlc1R5cGUiLCAiY29ubmVjdG9yLk15QWRtaW5PYmplY3QiKTsKICAgICAgICAgZXhwZWN0ZWRBT0REcy5wdXQoZGVzYy5nZXROYW1lKCksIGRlc2MpOwotICAgICAgICAKKwogICAgICAgICBkZXNjID0gbmV3IEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb25EZXNjcmlwdG9yKCk7CiAgICAgICAgIGRlc2Muc2V0RGVzY3JpcHRpb24oImFwcGxpY2F0aW9uLXNjb3BlIHJlc291cmNlIGRlZmluZWQgYnkgQEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb24iKTsKICAgICAgICAgZGVzYy5zZXROYW1lKCJqYXZhOmFwcC9lbnYvU2VydmxldF9BZG1pbk9iamVjdCIpOwpAQCAtMTY4LDcgKzE2OCw3IEBACiAgICAgICAgIGRlc2Muc2V0UmVzb3VyY2VBZGFwdGVyKCJhb2QtcmEiKTsKICAgICAgICAgZGVzYy5hZGRQcm9wZXJ0eSgib3JnLmdsYXNzZmlzaC5hZG1pbi1vYmplY3QucmVzVHlwZSIsICJjb25uZWN0b3IuTXlBZG1pbk9iamVjdCIpOwogICAgICAgICBleHBlY3RlZEFPRERzLnB1dChkZXNjLmdldE5hbWUoKSwgZGVzYyk7Ci0gICAgICAgIAorCiAgICAgICAgIGRlc2MgPSBuZXcgQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbkRlc2NyaXB0b3IoKTsKICAgICAgICAgZGVzYy5zZXREZXNjcmlwdGlvbigibW9kdWxlLXNjb3BlIHJlc291cmNlIGRlZmluZWQgYnkgQEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb24iKTsKICAgICAgICAgZGVzYy5zZXROYW1lKCJqYXZhOm1vZHVsZS9lbnYvU2VydmxldF9BZG1pbk9iamVjdCIpOwpAQCAtMTc3LDcgKzE3Nyw3IEBACiAgICAgICAgIGRlc2Muc2V0UmVzb3VyY2VBZGFwdGVyKCJhb2QtcmEiKTsKICAgICAgICAgZGVzYy5hZGRQcm9wZXJ0eSgib3JnLmdsYXNzZmlzaC5hZG1pbi1vYmplY3QucmVzVHlwZSIsICJjb25uZWN0b3IuTXlBZG1pbk9iamVjdCIpOwogICAgICAgICBleHBlY3RlZEFPRERzLnB1dChkZXNjLmdldE5hbWUoKSwgZGVzYyk7Ci0gICAgICAgIAorCiAgICAgICAgIGRlc2MgPSBuZXcgQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbkRlc2NyaXB0b3IoKTsKICAgICAgICAgZGVzYy5zZXREZXNjcmlwdGlvbigiY29tcG9uZW50LXNjb3BlIHJlc291cmNlIGRlZmluZWQgYnkgQEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb24iKTsKICAgICAgICAgZGVzYy5zZXROYW1lKCJqYXZhOmNvbXAvZW52L1NlcnZsZXRfQWRtaW5PYmplY3QiKTsKQEAgLTE4Niw3ICsxODYsNyBAQAogICAgICAgICBkZXNjLnNldFJlc291cmNlQWRhcHRlcigiYW9kLXJhIik7CiAgICAgICAgIGRlc2MuYWRkUHJvcGVydHkoIm9yZy5nbGFzc2Zpc2guYWRtaW4tb2JqZWN0LnJlc1R5cGUiLCAiY29ubmVjdG9yLk15QWRtaW5PYmplY3QiKTsKICAgICAgICAgZXhwZWN0ZWRBT0REcy5wdXQoZGVzYy5nZXROYW1lKCksIGRlc2MpOwotICAgICAgICAKKwogICAgICAgICBkZXNjID0gbmV3IEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb25EZXNjcmlwdG9yKCk7CiAgICAgICAgIGRlc2Muc2V0RGVzY3JpcHRpb24oImdsb2JhbC1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGluIFdlYiBERCIpOwogICAgICAgICBkZXNjLnNldE5hbWUoImphdmE6Z2xvYmFsL2Vudi9XZWJfRERfQWRtaW5PYmplY3QiKTsKQEAgLTE5NSw3ICsxOTUsNyBAQAogICAgICAgICBkZXNjLnNldFJlc291cmNlQWRhcHRlcigiYW9kLXJhIik7CiAgICAgICAgIGRlc2MuYWRkUHJvcGVydHkoIm9yZy5nbGFzc2Zpc2guYWRtaW4tb2JqZWN0LnJlc1R5cGUiLCAiY29ubmVjdG9yLk15QWRtaW5PYmplY3QiKTsKICAgICAgICAgZXhwZWN0ZWRBT0REcy5wdXQoZGVzYy5nZXROYW1lKCksIGRlc2MpOwotICAgICAgICAKKwogICAgICAgICBkZXNjID0gbmV3IEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb25EZXNjcmlwdG9yKCk7CiAgICAgICAgIGRlc2Muc2V0RGVzY3JpcHRpb24oImFwcGxpY2F0aW9uLXNjb3BlIHJlc291cmNlIGRlZmluZWQgaW4gV2ViIEREIik7CiAgICAgICAgIGRlc2Muc2V0TmFtZSgiamF2YTphcHAvZW52L1dlYl9ERF9BZG1pbk9iamVjdCIpOwpAQCAtMjA0LDcgKzIwNCw3IEBACiAgICAgICAgIGRlc2Muc2V0UmVzb3VyY2VBZGFwdGVyKCJhb2QtcmEiKTsKICAgICAgICAgZGVzYy5hZGRQcm9wZXJ0eSgib3JnLmdsYXNzZmlzaC5hZG1pbi1vYmplY3QucmVzVHlwZSIsICJjb25uZWN0b3IuTXlBZG1pbk9iamVjdCIpOwogICAgICAgICBleHBlY3RlZEFPRERzLnB1dChkZXNjLmdldE5hbWUoKSwgZGVzYyk7Ci0gICAgICAgIAorCiAgICAgICAgIGRlc2MgPSBuZXcgQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbkRlc2NyaXB0b3IoKTsKICAgICAgICAgZGVzYy5zZXREZXNjcmlwdGlvbigibW9kdWxlLXNjb3BlIHJlc291cmNlIGRlZmluZWQgaW4gV2ViIEREIik7CiAgICAgICAgIGRlc2Muc2V0TmFtZSgiamF2YTptb2R1bGUvZW52L1dlYl9ERF9BZG1pbk9iamVjdCIpOwpAQCAtMjM1LDcgKzIzNSw3IEBACiAKICAgICAgICAgQVNVUkxDbGFzc0xvYWRlciBjbGFzc0xvYWRlciA9IG5ldyBBU1VSTENsYXNzTG9hZGVyKHRoaXMuZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpKTsKICAgICAgICAgY2xhc3NMb2FkZXIuYWRkVVJMKGFyY2hpdmUudG9VUkwoKSk7Ci0gICAgICAgICAgICAgICAKKwogICAgICAgICBFamJBcmNoaXZpc3QgcmVhZGVyID0gKEVqYkFyY2hpdmlzdCkgVGVzdFV0aWwuZ2V0QnlUeXBlKEVqYkFyY2hpdmlzdC5jbGFzcyk7CiAgICAgICAgIHJlYWRlci5zZXRDbGFzc0xvYWRlcihjbGFzc0xvYWRlcik7CiAgICAgICAgIHJlYWRlci5zZXRBbm5vdGF0aW9uUHJvY2Vzc2luZ1JlcXVlc3RlZCh0cnVlKTsKQEAgLTI1MSw4ICsyNTEsOCBAQAogLy8gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0iKTsKIC8vICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBNYXA8U3RyaW5nLEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb25EZXNjcmlwdG9yPiBleHBlY3RlZEFPRERzID0gCisKKyAgICAgICAgTWFwPFN0cmluZyxBZG1pbmlzdGVyZWRPYmplY3REZWZpbml0aW9uRGVzY3JpcHRvcj4gZXhwZWN0ZWRBT0REcyA9CiAgICAgICAgICAgICAgICAgbmV3IEhhc2hNYXA8U3RyaW5nLEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb25EZXNjcmlwdG9yPigpOwogICAgICAgICBBZG1pbmlzdGVyZWRPYmplY3REZWZpbml0aW9uRGVzY3JpcHRvciBkZXNjOwogCkBAIC0zNDksNyArMzQ5LDcgQEAKICAgICAgICAgICAgIGRlc2MuYWRkUHJvcGVydHkoIm9yZy5nbGFzc2Zpc2guYWRtaW4tb2JqZWN0LnJlc1R5cGUiLCAiY29ubmVjdG9yLk15QWRtaW5PYmplY3QiKTsKICAgICAgICAgICAgIGV4cGVjdGVkQU9ERHMucHV0KGRlc2MuZ2V0TmFtZSgpLCBkZXNjKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAvLyBhZG1pbmlzdGVyZWQtb2JqZWN0IGluIGFubm90YXRpb24gZm9yIHN0YXRlZnVsIEVKQgogICAgICAgICB7CiAgICAgICAgICAgICBkZXNjID0gbmV3IEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb25EZXNjcmlwdG9yKCk7CkBAIC0zNjAsNyArMzYwLDcgQEAKICAgICAgICAgICAgIGRlc2Muc2V0UmVzb3VyY2VBZGFwdGVyKCJhb2QtcmEiKTsKICAgICAgICAgICAgIGRlc2MuYWRkUHJvcGVydHkoIm9yZy5nbGFzc2Zpc2guYWRtaW4tb2JqZWN0LnJlc1R5cGUiLCAiY29ubmVjdG9yLk15QWRtaW5PYmplY3QiKTsKICAgICAgICAgICAgIGV4cGVjdGVkQU9ERHMucHV0KGRlc2MuZ2V0TmFtZSgpLCBkZXNjKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBkZXNjID0gbmV3IEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb25EZXNjcmlwdG9yKCk7CiAgICAgICAgICAgICBkZXNjLnNldERlc2NyaXB0aW9uKCJhcHBsaWNhdGlvbi1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGJ5IEBBZG1pbmlzdGVyZWRPYmplY3REZWZpbml0aW9uIik7CiAgICAgICAgICAgICBkZXNjLnNldE5hbWUoImphdmE6YXBwL2Vudi9IZWxsb1N0YXRlZnVsRUpCX0Fubm90YXRpb25fQWRtaW5PYmplY3QiKTsKQEAgLTM5OSw3ICszOTksNyBAQAogICAgICAgICAgICAgZGVzYy5zZXRSZXNvdXJjZUFkYXB0ZXIoImFvZC1yYSIpOwogICAgICAgICAgICAgZGVzYy5hZGRQcm9wZXJ0eSgib3JnLmdsYXNzZmlzaC5hZG1pbi1vYmplY3QucmVzVHlwZSIsICJjb25uZWN0b3IuTXlBZG1pbk9iamVjdCIpOwogICAgICAgICAgICAgZXhwZWN0ZWRBT0REcy5wdXQoZGVzYy5nZXROYW1lKCksIGRlc2MpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGRlc2MgPSBuZXcgQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbkRlc2NyaXB0b3IoKTsKICAgICAgICAgICAgIGRlc2Muc2V0RGVzY3JpcHRpb24oImFwcGxpY2F0aW9uLXNjb3BlIHJlc291cmNlIGRlZmluZWQgYnkgQEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb24iKTsKICAgICAgICAgICAgIGRlc2Muc2V0TmFtZSgiamF2YTphcHAvZW52L0hlbGxvRUpCX0Fubm90YXRpb25fQWRtaW5PYmplY3QiKTsKQEAgLTQwOCw3ICs0MDgsNyBAQAogICAgICAgICAgICAgZGVzYy5zZXRSZXNvdXJjZUFkYXB0ZXIoImFvZC1yYSIpOwogICAgICAgICAgICAgZGVzYy5hZGRQcm9wZXJ0eSgib3JnLmdsYXNzZmlzaC5hZG1pbi1vYmplY3QucmVzVHlwZSIsICJjb25uZWN0b3IuTXlBZG1pbk9iamVjdCIpOwogICAgICAgICAgICAgZXhwZWN0ZWRBT0REcy5wdXQoZGVzYy5nZXROYW1lKCksIGRlc2MpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGRlc2MgPSBuZXcgQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbkRlc2NyaXB0b3IoKTsKICAgICAgICAgICAgIGRlc2Muc2V0RGVzY3JpcHRpb24oIm1vZHVsZS1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGJ5IEBBZG1pbmlzdGVyZWRPYmplY3REZWZpbml0aW9uIik7CiAgICAgICAgICAgICBkZXNjLnNldE5hbWUoImphdmE6bW9kdWxlL2Vudi9IZWxsb0VKQl9Bbm5vdGF0aW9uX0FkbWluT2JqZWN0Iik7CkBAIC00MTcsNyArNDE3LDcgQEAKICAgICAgICAgICAgIGRlc2Muc2V0UmVzb3VyY2VBZGFwdGVyKCJhb2QtcmEiKTsKICAgICAgICAgICAgIGRlc2MuYWRkUHJvcGVydHkoIm9yZy5nbGFzc2Zpc2guYWRtaW4tb2JqZWN0LnJlc1R5cGUiLCAiY29ubmVjdG9yLk15QWRtaW5PYmplY3QiKTsKICAgICAgICAgICAgIGV4cGVjdGVkQU9ERHMucHV0KGRlc2MuZ2V0TmFtZSgpLCBkZXNjKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBkZXNjID0gbmV3IEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb25EZXNjcmlwdG9yKCk7CiAgICAgICAgICAgICBkZXNjLnNldERlc2NyaXB0aW9uKCJjb21wb25lbnQtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBieSBAQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbiIpOwogICAgICAgICAgICAgZGVzYy5zZXROYW1lKCJqYXZhOmNvbXAvZW52L0hlbGxvRUpCX0Fubm90YXRpb25fQWRtaW5PYmplY3QiKTsKQEAgLTQyNyw4ICs0MjcsOCBAQAogICAgICAgICAgICAgZGVzYy5hZGRQcm9wZXJ0eSgib3JnLmdsYXNzZmlzaC5hZG1pbi1vYmplY3QucmVzVHlwZSIsICJjb25uZWN0b3IuTXlBZG1pbk9iamVjdCIpOwogICAgICAgICAgICAgZXhwZWN0ZWRBT0REcy5wdXQoZGVzYy5nZXROYW1lKCksIGRlc2MpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIFRlc3RVdGlsLmNvbXBhcmVBT0REKGV4cGVjdGVkQU9ERHMsIGFjdHVyYWxBT0REcyk7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL3V0L0REVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi91dC9ERFRlc3QuamF2YQppbmRleCBmNDExYzllLi44MjkwMzkxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL3V0L0REVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vdXQvRERUZXN0LmphdmEKQEAgLTQ2LDIzICs0NiwyMyBAQAogICAgIHByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLnRlYXJEb3duKCk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgdGVzdEFwcGxpY2F0aW9uREQoKSB0aHJvd3MgRXhjZXB0aW9uewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgdGNOYW1lID0gImFkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1hcHBsaWNhdGlvbi1ERC10ZXN0IjsKICAgICAgICAgSW5wdXRTdHJlYW0gZGRJUz1udWxsOwogICAgICAgICB0cnl7CiAgICAgICAgICAgICBTdHJpbmcgZGRGaWxlTmFtZSA9ICJ1dC1hcHBsaWNhdGlvbi54bWwiOwogICAgICAgICAgICAgRmlsZSBkZEZpbGUgPSBuZXcgRmlsZShkZXNjcmlwdG9yRGlyLCBkZEZpbGVOYW1lKTsKICAgICAgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCJUaGUgYXBwbGljYXRpb24ueG1sIG5vdCBmb3VuZDogIitkZEZpbGUsZGRGaWxlLmV4aXN0cygpKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBkZElTID0gbmV3IEZpbGVJbnB1dFN0cmVhbShkZEZpbGUpOwogICAgICAgICAgICAgQXBwbGljYXRpb25EZXBsb3ltZW50RGVzY3JpcHRvckZpbGUgZGRSZWFkZXIgPSBuZXcgQXBwbGljYXRpb25EZXBsb3ltZW50RGVzY3JpcHRvckZpbGUoKTsKICAgICAgICAgICAgIEFwcGxpY2F0aW9uIGFwcGxpY2F0aW9uID0gKEFwcGxpY2F0aW9uKSBkZFJlYWRlci5yZWFkKCBkZElTKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTZXQ8UmVzb3VyY2VEZXNjcmlwdG9yPiBhY3R1YWxBT0REcyA9IGFwcGxpY2F0aW9uLmdldFJlc291cmNlRGVzY3JpcHRvcnMoSmF2YUVFUmVzb3VyY2VUeXBlLkFPREQpOwogCi0gICAgICAgICAgICBNYXA8U3RyaW5nLEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb25EZXNjcmlwdG9yPiBleHBlY3RlZEFPRERzID0gCisgICAgICAgICAgICBNYXA8U3RyaW5nLEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb25EZXNjcmlwdG9yPiBleHBlY3RlZEFPRERzID0KICAgICAgICAgICAgICAgICAgICAgbmV3IEhhc2hNYXA8U3RyaW5nLEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb25EZXNjcmlwdG9yPigpOwogICAgICAgICAgICAgQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbkRlc2NyaXB0b3IgZGVzYzsKIApAQCAtNzQsNyArNzQsNyBAQAogICAgICAgICAgICAgZGVzYy5zZXRSZXNvdXJjZUFkYXB0ZXIoImFvZC1yYSIpOwogICAgICAgICAgICAgZGVzYy5hZGRQcm9wZXJ0eSgib3JnLmdsYXNzZmlzaC5hZG1pbi1vYmplY3QucmVzVHlwZSIsICJjb25uZWN0b3IuTXlBZG1pbk9iamVjdCIpOwogICAgICAgICAgICAgZXhwZWN0ZWRBT0REcy5wdXQoZGVzYy5nZXROYW1lKCksIGRlc2MpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGRlc2MgPSBuZXcgQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbkRlc2NyaXB0b3IoKTsKICAgICAgICAgICAgIGRlc2Muc2V0TmFtZSgiamF2YTphcHAvZW52L0FkbWluT2JqZWN0Iik7CiAgICAgICAgICAgICBkZXNjLnNldEludGVyZmFjZU5hbWUoImpha2FydGEuam1zLkRlc3RpbmF0aW9uIik7CkBAIC04Niw3ICs4Niw3IEBACiAKICAgICAgICAgICAgIFRlc3RVdGlsLmNvbXBhcmVBT0REKGV4cGVjdGVkQU9ERHMsIGFjdHVhbEFPRERzKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRjTmFtZSwgc3RhdC5QQVNTKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH1jYXRjaChFeGNlcHRpb24gZSl7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0Y05hbWUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB0aHJvdyBlOwpAQCAtMTAwLDE4ICsxMDAsMTggQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB0ZXN0U2Vzc2lvbkVKQkREKCkgdGhyb3dzIEV4Y2VwdGlvbnsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHRjTmFtZSA9ICJhZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tU2Vzc2lvbi1FSkItREQtdGVzdCI7CiAgICAgICAgIElucHV0U3RyZWFtIGRkSVM9bnVsbDsKICAgICAgICAgdHJ5ewogICAgICAgICAgICAgU3RyaW5nIGRkRmlsZU5hbWUgPSAidXQtc2Vzc2lvbi1lamItamFyLnhtbCI7CiAgICAgICAgICAgICBGaWxlIGRkRmlsZSA9IG5ldyBGaWxlKGRlc2NyaXB0b3JEaXIsIGRkRmlsZU5hbWUpOwogICAgICAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIlRoZSB1dC1zZXNzaW9uLWVqYi1qYXIueG1sIG5vdCBmb3VuZDogIitkZEZpbGUsIGRkRmlsZS5leGlzdHMoKSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgZGRJUyA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oZGRGaWxlKTsKICAgICAgICAgICAgIEVqYkRlcGxveW1lbnREZXNjcmlwdG9yRmlsZSBkZFJlYWRlciA9IG5ldyBFamJEZXBsb3ltZW50RGVzY3JpcHRvckZpbGUoKTsKICAgICAgICAgICAgIEVqYkJ1bmRsZURlc2NyaXB0b3IgZWpiQnVuZGxlID0gKEVqYkJ1bmRsZURlc2NyaXB0b3IpIGRkUmVhZGVyLnJlYWQoIGRkSVMpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGZvcihFamJEZXNjcmlwdG9yIGVqYkRlc2NyaXB0b3IgOiBlamJCdW5kbGUuZ2V0RWpicygpKXsKICAgICAgICAgICAgICAgICBlamJEZXNjcmlwdG9yLmdldFJlc291cmNlRGVzY3JpcHRvcnMoSmF2YUVFUmVzb3VyY2VUeXBlLkFPREQpOwogICAgICAgICAgICAgICAgIGlmKGVqYkRlc2NyaXB0b3IuZ2V0TmFtZSgpLmVxdWFscygiSGVsbG9TdGF0ZWZ1bEVKQiIpKXsKQEAgLTEyMiw5ICsxMjIsOSBAQAogICAgICAgICAgICAgICAgICAgICBmYWlsKCJVbmtub3duIEVKQiBkZXNjcmlwdG9yOiAiK2VqYkRlc2NyaXB0b3IuZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGNOYW1lLCBzdGF0LlBBU1MpOwotICAgICAgICAgICAgCisKICAgICAgICAgfWNhdGNoKEV4Y2VwdGlvbiBlKXsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRjTmFtZSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIHRocm93IGU7CkBAIC0xMzYsNyArMTM2LDcgQEAKIAogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHRlc3RTdGF0ZWZ1bFNlc3Npb25FSkJERChFamJEZXNjcmlwdG9yIGVqYikgdGhyb3dzIEV4Y2VwdGlvbnsKICAgICAgICAgQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbkRlc2NyaXB0b3IgZGVzYzsKICAgICAgICAgTWFwPFN0cmluZyxBZG1pbmlzdGVyZWRPYmplY3REZWZpbml0aW9uRGVzY3JpcHRvcj4gZXhwZWN0ZWRBT0REcyA9IG5ldyBIYXNoTWFwPFN0cmluZyxBZG1pbmlzdGVyZWRPYmplY3REZWZpbml0aW9uRGVzY3JpcHRvcj4oKTsKQEAgLTE0OSw3ICsxNDksNyBAQAogICAgICAgICBkZXNjLnNldFJlc291cmNlQWRhcHRlcigiYW9kLXJhIik7CiAgICAgICAgIGRlc2MuYWRkUHJvcGVydHkoIm9yZy5nbGFzc2Zpc2guYWRtaW4tb2JqZWN0LnJlc1R5cGUiLCAiY29ubmVjdG9yLk15QWRtaW5PYmplY3QiKTsKICAgICAgICAgZXhwZWN0ZWRBT0REcy5wdXQoZGVzYy5nZXROYW1lKCksIGRlc2MpOwotICAgICAgICAKKwogICAgICAgICBkZXNjID0gbmV3IEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb25EZXNjcmlwdG9yKCk7CiAgICAgICAgIGRlc2Muc2V0RGVzY3JpcHRpb24oIm1vZHVsZS1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGluIEVKQiBERCIpOwogICAgICAgICBkZXNjLnNldE5hbWUoImphdmE6bW9kdWxlL2Vudi9TdGF0ZWZ1bEVKQl9BZG1pbk9iamVjdCIpOwpAQCAtMTY5LDkgKzE2OSw5IEBACiAgICAgICAgIGV4cGVjdGVkQU9ERHMucHV0KGRlc2MuZ2V0TmFtZSgpLCBkZXNjKTsKIAogICAgICAgICBUZXN0VXRpbC5jb21wYXJlQU9ERChleHBlY3RlZEFPRERzLCBlamIuZ2V0UmVzb3VyY2VEZXNjcmlwdG9ycyhKYXZhRUVSZXNvdXJjZVR5cGUuQU9ERCkpOwotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCB0ZXN0U3RhdGVsZXNzU2Vzc2lvbkVKQkREKEVqYkRlc2NyaXB0b3IgZWpiKSB0aHJvd3MgRXhjZXB0aW9uewogICAgICAgICBBZG1pbmlzdGVyZWRPYmplY3REZWZpbml0aW9uRGVzY3JpcHRvciBkZXNjOwogICAgICAgICBNYXA8U3RyaW5nLEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb25EZXNjcmlwdG9yPiBleHBlY3RlZEFPRERzID0gbmV3IEhhc2hNYXA8U3RyaW5nLEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb25EZXNjcmlwdG9yPigpOwpAQCAtMTg0LDcgKzE4NCw3IEBACiAgICAgICAgIGRlc2Muc2V0UmVzb3VyY2VBZGFwdGVyKCJhb2QtcmEiKTsKICAgICAgICAgZGVzYy5hZGRQcm9wZXJ0eSgib3JnLmdsYXNzZmlzaC5hZG1pbi1vYmplY3QucmVzVHlwZSIsICJjb25uZWN0b3IuTXlBZG1pbk9iamVjdCIpOwogICAgICAgICBleHBlY3RlZEFPRERzLnB1dChkZXNjLmdldE5hbWUoKSwgZGVzYyk7Ci0gICAgICAgIAorCiAgICAgICAgIGRlc2MgPSBuZXcgQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbkRlc2NyaXB0b3IoKTsKICAgICAgICAgZGVzYy5zZXREZXNjcmlwdGlvbigibW9kdWxlLXNjb3BlIHJlc291cmNlIGRlZmluZWQgaW4gRUpCIEREIik7CiAgICAgICAgIGRlc2Muc2V0TmFtZSgiamF2YTptb2R1bGUvZW52L0hlbGxvRUpCX0FkbWluT2JqZWN0Iik7CkBAIC0yMDQsMTggKzIwNCwxOCBAQAogICAgICAgICBleHBlY3RlZEFPRERzLnB1dChkZXNjLmdldE5hbWUoKSwgZGVzYyk7CiAKICAgICAgICAgVGVzdFV0aWwuY29tcGFyZUFPREQoZXhwZWN0ZWRBT0REcywgZWpiLmdldFJlc291cmNlRGVzY3JpcHRvcnMoSmF2YUVFUmVzb3VyY2VUeXBlLkFPREQpKTsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCB0ZXN0RW50aXR5RUpCREQoKSB0aHJvd3MgRXhjZXB0aW9uewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgdGNOYW1lID0gImFkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi1FbnRpdHktRUpCLURELXRlc3QiOwogICAgICAgICBJbnB1dFN0cmVhbSBkZElTPW51bGw7CiAgICAgICAgIHRyeXsKICAgICAgICAgICAgIFN0cmluZyBkZEZpbGVOYW1lID0gInV0LWVudGl0eS1lamItamFyLnhtbCI7CiAgICAgICAgICAgICBGaWxlIGRkRmlsZSA9IG5ldyBGaWxlKGRlc2NyaXB0b3JEaXIsIGRkRmlsZU5hbWUpOwogICAgICAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIlRoZSB1dC1lbnRpdHktZWpiLWphci54bWwgbm90IGZvdW5kOiAiK2RkRmlsZSwgZGRGaWxlLmV4aXN0cygpKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBkZElTID0gbmV3IEZpbGVJbnB1dFN0cmVhbShkZEZpbGUpOwogICAgICAgICAgICAgRWpiRGVwbG95bWVudERlc2NyaXB0b3JGaWxlIGRkUmVhZGVyID0gbmV3IEVqYkRlcGxveW1lbnREZXNjcmlwdG9yRmlsZSgpOwogICAgICAgICAgICAgRWpiQnVuZGxlRGVzY3JpcHRvciBlamJCdW5kbGUgPSAoRWpiQnVuZGxlRGVzY3JpcHRvcikgZGRSZWFkZXIucmVhZCggZGRJUyk7CkBAIC0yMzIsNyArMjMyLDcgQEAKICAgICAgICAgICAgICAgICBkZXNjLnNldFJlc291cmNlQWRhcHRlcigiYW9kLXJhIik7CiAgICAgICAgICAgICAgICAgZGVzYy5hZGRQcm9wZXJ0eSgib3JnLmdsYXNzZmlzaC5hZG1pbi1vYmplY3QucmVzVHlwZSIsICJjb25uZWN0b3IuTXlBZG1pbk9iamVjdCIpOwogICAgICAgICAgICAgICAgIGV4cGVjdGVkQU9ERHMucHV0KGRlc2MuZ2V0TmFtZSgpLCBkZXNjKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGRlc2MgPSBuZXcgQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbkRlc2NyaXB0b3IoKTsKICAgICAgICAgICAgICAgICBkZXNjLnNldERlc2NyaXB0aW9uKCJtb2R1bGUtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBpbiBFSkIgREQiKTsKICAgICAgICAgICAgICAgICBkZXNjLnNldE5hbWUoImphdmE6bW9kdWxlL2Vudi9FbnRpdHlfQWRtaW5PYmplY3QiKTsKQEAgLTI1NSw3ICsyNTUsNyBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0Y05hbWUsIHN0YXQuUEFTUyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9Y2F0Y2goRXhjZXB0aW9uIGUpewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGNOYW1lLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgdGhyb3cgZTsKQEAgLTI2OSwxNCArMjY5LDE0IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgdGVzdE1EQkVKQkREKCkgdGhyb3dzIEV4Y2VwdGlvbnsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHRjTmFtZSA9ICJhZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tTURCLUVKQi1ERC10ZXN0IjsKICAgICAgICAgSW5wdXRTdHJlYW0gZGRJUz1udWxsOwogICAgICAgICB0cnl7CiAgICAgICAgICAgICBTdHJpbmcgZGRGaWxlTmFtZSA9ICJ1dC1tZGItZWpiLWphci54bWwiOwogICAgICAgICAgICAgRmlsZSBkZEZpbGUgPSBuZXcgRmlsZShkZXNjcmlwdG9yRGlyLCBkZEZpbGVOYW1lKTsKICAgICAgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCJUaGUgdXQtbWRiLWVqYi1qYXIueG1sIG5vdCBmb3VuZDogIitkZEZpbGUsIGRkRmlsZS5leGlzdHMoKSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgZGRJUyA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oZGRGaWxlKTsKICAgICAgICAgICAgIEVqYkRlcGxveW1lbnREZXNjcmlwdG9yRmlsZSBkZFJlYWRlciA9IG5ldyBFamJEZXBsb3ltZW50RGVzY3JpcHRvckZpbGUoKTsKICAgICAgICAgICAgIEVqYkJ1bmRsZURlc2NyaXB0b3IgZWpiQnVuZGxlID0gKEVqYkJ1bmRsZURlc2NyaXB0b3IpIGRkUmVhZGVyLnJlYWQoIGRkSVMpOwpAQCAtMjkzLDcgKzI5Myw3IEBACiAgICAgICAgICAgICAgICAgZGVzYy5zZXRSZXNvdXJjZUFkYXB0ZXIoImFvZC1yYSIpOwogICAgICAgICAgICAgICAgIGRlc2MuYWRkUHJvcGVydHkoIm9yZy5nbGFzc2Zpc2guYWRtaW4tb2JqZWN0LnJlc1R5cGUiLCAiY29ubmVjdG9yLk15QWRtaW5PYmplY3QiKTsKICAgICAgICAgICAgICAgICBleHBlY3RlZEFPRERzLnB1dChkZXNjLmdldE5hbWUoKSwgZGVzYyk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZXNjID0gbmV3IEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb25EZXNjcmlwdG9yKCk7CiAgICAgICAgICAgICAgICAgZGVzYy5zZXREZXNjcmlwdGlvbigibW9kdWxlLXNjb3BlIHJlc291cmNlIGRlZmluZWQgaW4gRUpCIEREIik7CiAgICAgICAgICAgICAgICAgZGVzYy5zZXROYW1lKCJqYXZhOm1vZHVsZS9lbnYvTURCX0FkbWluT2JqZWN0Iik7CkBAIC0zMTYsNyArMzE2LDcgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGNOYW1lLCBzdGF0LlBBU1MpOwotICAgICAgICAgICAgCisKICAgICAgICAgfWNhdGNoKEV4Y2VwdGlvbiBlKXsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRjTmFtZSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIHRocm93IGU7CkBAIC0zMzAsMTQgKzMzMCwxNCBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHRlc3RJbnRlcmNlcHRvckVKQkREKCkgdGhyb3dzIEV4Y2VwdGlvbnsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHRjTmFtZSA9ICJhZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tSW50ZXJjZXB0b3ItRUpCLURELXRlc3QiOwogICAgICAgICBJbnB1dFN0cmVhbSBkZElTPW51bGw7CiAgICAgICAgIHRyeXsKICAgICAgICAgICAgIFN0cmluZyBkZEZpbGVOYW1lID0gInV0LWludGVyY2VwdG9yLWVqYi1qYXIueG1sIjsKICAgICAgICAgICAgIEZpbGUgZGRGaWxlID0gbmV3IEZpbGUoZGVzY3JpcHRvckRpciwgZGRGaWxlTmFtZSk7CiAgICAgICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgiVGhlIHV0LWludGVyY2VwdG9yLWVqYi1qYXIueG1sIG5vdCBmb3VuZDogIitkZEZpbGUsIGRkRmlsZS5leGlzdHMoKSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgZGRJUyA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oZGRGaWxlKTsKICAgICAgICAgICAgIEVqYkRlcGxveW1lbnREZXNjcmlwdG9yRmlsZSBkZFJlYWRlciA9IG5ldyBFamJEZXBsb3ltZW50RGVzY3JpcHRvckZpbGUoKTsKICAgICAgICAgICAgIEVqYkJ1bmRsZURlc2NyaXB0b3IgZWpiQnVuZGxlID0gKEVqYkJ1bmRsZURlc2NyaXB0b3IpIGRkUmVhZGVyLnJlYWQoIGRkSVMpOwpAQCAtMzU0LDcgKzM1NCw3IEBACiAgICAgICAgICAgICAgICAgZGVzYy5zZXRSZXNvdXJjZUFkYXB0ZXIoImFvZC1yYSIpOwogICAgICAgICAgICAgICAgIGRlc2MuYWRkUHJvcGVydHkoIm9yZy5nbGFzc2Zpc2guYWRtaW4tb2JqZWN0LnJlc1R5cGUiLCAiY29ubmVjdG9yLk15QWRtaW5PYmplY3QiKTsKICAgICAgICAgICAgICAgICBleHBlY3RlZEFPRERzLnB1dChkZXNjLmdldE5hbWUoKSwgZGVzYyk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZXNjID0gbmV3IEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb25EZXNjcmlwdG9yKCk7CiAgICAgICAgICAgICAgICAgZGVzYy5zZXREZXNjcmlwdGlvbigibW9kdWxlLXNjb3BlIHJlc291cmNlIGRlZmluZWQgaW4gRUpCIEREIik7CiAgICAgICAgICAgICAgICAgZGVzYy5zZXROYW1lKCJqYXZhOm1vZHVsZS9lbnYvSW50ZXJjZXB0b3JfQWRtaW5PYmplY3QiKTsKQEAgLTM3Nyw3ICszNzcsNyBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0Y05hbWUsIHN0YXQuUEFTUyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9Y2F0Y2goRXhjZXB0aW9uIGUpewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGNOYW1lLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgdGhyb3cgZTsKQEAgLTM5MSwxOCArMzkxLDE4IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgdGVzdFdlYkREKCkgdGhyb3dzIEV4Y2VwdGlvbnsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHRjTmFtZSA9ICJhZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tV2ViLURELXRlc3QiOwogICAgICAgICBJbnB1dFN0cmVhbSBkZElTPW51bGw7CiAgICAgICAgIHRyeXsKICAgICAgICAgICAgIFN0cmluZyBkZEZpbGVOYW1lID0gInV0LXdlYi54bWwiOwogICAgICAgICAgICAgRmlsZSBkZEZpbGUgPSBuZXcgRmlsZShkZXNjcmlwdG9yRGlyLCBkZEZpbGVOYW1lKTsKICAgICAgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCJUaGUgdXQtd2ViLnhtbCBub3QgZm91bmQ6ICIrZGRGaWxlLCBkZEZpbGUuZXhpc3RzKCkpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGRkSVMgPSBuZXcgRmlsZUlucHV0U3RyZWFtKGRkRmlsZSk7CiAgICAgICAgICAgICBXZWJEZXBsb3ltZW50RGVzY3JpcHRvckZpbGUgZGRSZWFkZXIgPSBuZXcgV2ViRGVwbG95bWVudERlc2NyaXB0b3JGaWxlKCk7CiAgICAgICAgICAgICBXZWJCdW5kbGVEZXNjcmlwdG9yIHdlYkJ1bmRsZSA9ICBkZFJlYWRlci5yZWFkKCBkZElTKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBBZG1pbmlzdGVyZWRPYmplY3REZWZpbml0aW9uRGVzY3JpcHRvciBkZXNjOwogICAgICAgICAgICAgTWFwPFN0cmluZyxBZG1pbmlzdGVyZWRPYmplY3REZWZpbml0aW9uRGVzY3JpcHRvcj4gZXhwZWN0ZWRBT0REcyA9IG5ldyBIYXNoTWFwPFN0cmluZyxBZG1pbmlzdGVyZWRPYmplY3REZWZpbml0aW9uRGVzY3JpcHRvcj4oKTsKIApAQCAtNDE0LDcgKzQxNCw3IEBACiAgICAgICAgICAgICBkZXNjLnNldFJlc291cmNlQWRhcHRlcigiYW9kLXJhIik7CiAgICAgICAgICAgICBkZXNjLmFkZFByb3BlcnR5KCJvcmcuZ2xhc3NmaXNoLmFkbWluLW9iamVjdC5yZXNUeXBlIiwgImNvbm5lY3Rvci5NeUFkbWluT2JqZWN0Iik7CiAgICAgICAgICAgICBleHBlY3RlZEFPRERzLnB1dChkZXNjLmdldE5hbWUoKSwgZGVzYyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgZGVzYyA9IG5ldyBBZG1pbmlzdGVyZWRPYmplY3REZWZpbml0aW9uRGVzY3JpcHRvcigpOwogICAgICAgICAgICAgZGVzYy5zZXREZXNjcmlwdGlvbigiYXBwbGljYXRpb24tc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBpbiBXZWIgREQiKTsKICAgICAgICAgICAgIGRlc2Muc2V0TmFtZSgiamF2YTphcHAvZW52L0FkbWluT2JqZWN0Iik7CkBAIC00MzYsNyArNDM2LDcgQEAKICAgICAgICAgICAgIFRlc3RVdGlsLmNvbXBhcmVBT0REKGV4cGVjdGVkQU9ERHMsIHdlYkJ1bmRsZS5nZXRSZXNvdXJjZURlc2NyaXB0b3JzKEphdmFFRVJlc291cmNlVHlwZS5BT0REKSk7CiAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRjTmFtZSwgc3RhdC5QQVNTKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH1jYXRjaChFeGNlcHRpb24gZSl7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0Y05hbWUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB0aHJvdyBlOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi91dC9UZXN0VXRpbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbi91dC9UZXN0VXRpbC5qYXZhCmluZGV4IDViMjBmNTguLjFmNWFjZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24vdXQvVGVzdFV0aWwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uL3V0L1Rlc3RVdGlsLmphdmEKQEAgLTI4LDM5ICsyOCwzOSBAQAogCiBwdWJsaWMgY2xhc3MgVGVzdFV0aWwgewogCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIGNvbXBhcmVBT0REKE1hcDxTdHJpbmcsQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbkRlc2NyaXB0b3I+IGV4cGVjdGVkQU9ERHMsIAorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBjb21wYXJlQU9ERChNYXA8U3RyaW5nLEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb25EZXNjcmlwdG9yPiBleHBlY3RlZEFPRERzLAogICAgICAgICAgICAgU2V0PFJlc291cmNlRGVzY3JpcHRvcj4gYWN0dWFsQU9ERHMpIHRocm93cyBFeGNlcHRpb257Ci0gICAgICAgIAorCiAgICAgICAgIGZvcihSZXNvdXJjZURlc2NyaXB0b3IgZGVzY3JpcHRvciA6IGFjdHVhbEFPRERzKXsKICAgICAgICAgICAgIEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb25EZXNjcmlwdG9yIGFjdHVhbERlc2MgPSAoQWRtaW5pc3RlcmVkT2JqZWN0RGVmaW5pdGlvbkRlc2NyaXB0b3IpZGVzY3JpcHRvcjsKICAgICAgICAgICAgIGFzc2VydE5vdE51bGwoInRoZSBuYW1lIG9mIGFkbWluaXN0ZXJlZCBvYmplY3QgY2Fubm90IGJlIG51bGwuIiwgYWN0dWFsRGVzYy5nZXROYW1lKCkpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIEFkbWluaXN0ZXJlZE9iamVjdERlZmluaXRpb25EZXNjcmlwdG9yIGV4cGVjdGVkRGVzYyA9IGV4cGVjdGVkQU9ERHMuZ2V0KGFjdHVhbERlc2MuZ2V0TmFtZSgpKTsKICAgICAgICAgICAgIGFzc2VydE5vdE51bGwoIlRoZSBBT0Qgb2YgdGhlIG5hbWUgWyIrYWN0dWFsRGVzYy5nZXROYW1lKCkrIl0gaXMgbm90IGV4cGVjdGVkLiIsIGV4cGVjdGVkRGVzYyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJGYWlsIHRvIHZlcmlmeSBpbnRlcmZhY2UtdHlwZSBvZiB0aGUgQU9ERDoiK2FjdHVhbERlc2MuZ2V0TmFtZSgpLAogICAgICAgICAgICAgICAgICAgICBleHBlY3RlZERlc2MuZ2V0SW50ZXJmYWNlTmFtZSgpLCBhY3R1YWxEZXNjLmdldEludGVyZmFjZU5hbWUoKSk7CiAKICAgICAgICAgICAgIGFzc2VydEVxdWFscygiRmFpbCB0byB2ZXJpZnkgY2xhc3MtbmFtZSBvZiB0aGUgQU9ERDoiK2FjdHVhbERlc2MuZ2V0TmFtZSgpLAogICAgICAgICAgICAgICAgICAgICBleHBlY3RlZERlc2MuZ2V0Q2xhc3NOYW1lKCksIGFjdHVhbERlc2MuZ2V0Q2xhc3NOYW1lKCkpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGFzc2VydEVxdWFscygiRmFpbCB0byB2ZXJpZnkgZGVzY3JpcHRpb24gb2YgdGhlIEFPREQ6IithY3R1YWxEZXNjLmdldE5hbWUoKSwKICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWREZXNjLmdldERlc2NyaXB0aW9uKCksIGFjdHVhbERlc2MuZ2V0RGVzY3JpcHRpb24oKSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJGYWlsIHRvIHZlcmlmeSByZXNvdXJjZUFkYXB0ZXIgb2YgdGhlIEFPREQ6IithY3R1YWxEZXNjLmdldE5hbWUoKSwKICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWREZXNjLmdldFJlc291cmNlQWRhcHRlcigpLCBhY3R1YWxEZXNjLmdldFJlc291cmNlQWRhcHRlcigpKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBQcm9wZXJ0aWVzIGV4cGVjdGVkUHJvcHMgPSBleHBlY3RlZERlc2MuZ2V0UHJvcGVydGllcygpOwogICAgICAgICAgICAgUHJvcGVydGllcyBhY3R1YWxQcm9wcyA9IGFjdHVhbERlc2MuZ2V0UHJvcGVydGllcygpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGZvcihPYmplY3QgbmFtZSA6IGFjdHVhbFByb3BzLmtleVNldCgpKXsKICAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIkZhaWwgdG8gdmVyaWZ5IHByb3BlcnR5ICgiK25hbWUrIikgb2YgdGhlIEFPREQ6IithY3R1YWxEZXNjLmdldE5hbWUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkUHJvcHMuZ2V0KG5hbWUpLCBhY3R1YWxQcm9wcy5nZXQobmFtZSkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGFzc2VydEVxdWFscygiRmFpbCB0byB2ZXJpZnkgc2l6ZSBvZiBwcm9wZXJ0aWVzIG9mIHRoZSBBT0REOiIrYWN0dWFsRGVzYy5nZXROYW1lKCksCiAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkUHJvcHMuc2l6ZSgpLCBhY3R1YWxQcm9wcy5zaXplKCkpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGV4cGVjdGVkQU9ERHMucmVtb3ZlKGFjdHVhbERlc2MuZ2V0TmFtZSgpKTsKICAgICAgICAgfQogICAgICAgICBpZihleHBlY3RlZEFPRERzLnNpemUoKT4wKXsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvYXBwL3NyYy9NRVRBLUlORi9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvYXBwL3NyYy9NRVRBLUlORi9lamItamFyLnhtbAppbmRleCAzOGFmMThjLi4yOTA1OTMyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9hcHAvc3JjL01FVEEtSU5GL2VqYi1qYXIueG1sCkBAIC05MSw4ICs5MSw4IEBACiAgICAgICAgIDxyZXMtc2hhcmluZy1zY29wZT5TaGFyZWFibGU8L3Jlcy1zaGFyaW5nLXNjb3BlPgogICAgICAgPC9yZXNvdXJjZS1yZWY+CiAgICAgICA8cmVzb3VyY2UtZW52LXJlZj4KLQk8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmVpcy90ZXN0QWRtaW48L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KLQk8cmVzb3VyY2UtZW52LXJlZi10eXBlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC9yZXNvdXJjZS1lbnYtcmVmLXR5cGU+CisgICAgPHJlc291cmNlLWVudi1yZWYtbmFtZT5laXMvdGVzdEFkbWluPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+CisgICAgPHJlc291cmNlLWVudi1yZWYtdHlwZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvcmVzb3VyY2UtZW52LXJlZi10eXBlPgogICAgICAgPC9yZXNvdXJjZS1lbnYtcmVmPgogICAgICAgPHNlY3VyaXR5LWlkZW50aXR5PgogICAgICAgICA8dXNlLWNhbGxlci1pZGVudGl0eS8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9hcHAvc3JjL01FVEEtSU5GL3N1bi1lamItamFyLnhtbAppbmRleCAxMTQ2YTVhLi4wYTdlMGRhIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvYXBwL3NyYy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwKQEAgLTMzLDcgKzMzLDcgQEAKICAgICAgICAgICAgIFRlc3RJbnRlZ2VyUHJvcAogICAgICAgICAgIDwvYWN0aXZhdGlvbi1jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICA8YWN0aXZhdGlvbi1jb25maWctcHJvcGVydHktdmFsdWU+Ci0gICAgICAgICAgICAyIAorICAgICAgICAgICAgMgogICAgICAgICAgIDwvYWN0aXZhdGlvbi1jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgIDwvYWN0aXZhdGlvbi1jb25maWctcHJvcGVydHk+CiAgICAgICAgIDwvYWN0aXZhdGlvbi1jb25maWc+CkBAIC04NSw3ICs4NSw3IEBACiAgICAgICA8L3Jlc291cmNlLXJlZj4KICAgICAgIDxyZXNvdXJjZS1lbnYtcmVmPgogICAgICAgICA8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmVpcy90ZXN0QWRtaW48L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KLQk8am5kaS1uYW1lPmVpcy90ZXN0QWRtaW48L2puZGktbmFtZT4KKyAgICA8am5kaS1uYW1lPmVpcy90ZXN0QWRtaW48L2puZGktbmFtZT4KICAgICAgIDwvcmVzb3VyY2UtZW52LXJlZj4KICAgICAgIDxnZW4tY2xhc3Nlcy8+CiAgICAgPC9lamI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL2FwcC9zcmMvYmVhbnMvTWVzc2FnZUNoZWNrZXJFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvYXBwL3NyYy9iZWFucy9NZXNzYWdlQ2hlY2tlckVKQi5qYXZhCmluZGV4IDc1ZWJkZTAuLmEwMzQ1MGQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvYXBwL3NyYy9iZWFucy9NZXNzYWdlQ2hlY2tlckVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvYXBwL3NyYy9iZWFucy9NZXNzYWdlQ2hlY2tlckVKQi5qYXZhCkBAIC00MCw3ICs0MCw3IEBACiAKICAgICBwdWJsaWMgTWVzc2FnZUNoZWNrZXJFSkIoKSB7fQogCi0gICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgCisgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkKICAgICAgICAgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYmVhbiBjcmVhdGVkIik7CiAgICAgICAgIGhlbGRDb24gPSBudWxsOwpAQCAtNTgsMTEgKzU4LDExIEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKENvbnRyb2xzLmdldExvY2tPYmplY3QoKSkgewogICAgICAgICAgICAgICAgIC8vVGVsbCB0aGUgcmVzb3VyY2UgYWRhcHRlciB0aGUgY2xpZW50IGlzIHJlYWR5IHRvIHJ1bgotICAgICAgICAgICAgICAgIENvbnRyb2xzLmdldExvY2tPYmplY3QoKS5ub3RpZnlBbGwoKTsgCi0gICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLm5vdGlmeUFsbCgpOworCiAgICAgICAgICAgICAgICAgZGVidWcoIk5PVElGSUVELi4uIFNUQVJUIFdBSVRJTkciKTsKICAgICAgICAgICAgICAgICAvL1dhaXQgdW50aWwgYmVpbmcgdG9sZCB0byByZWFkIGZyb20gdGhlIGRhdGFiYXNlCi0gICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLndhaXQoKTsgCisgICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLndhaXQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTcwLDcgKzcwLDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgaW50IGdldE1lc3NhZ2VDb3VudCgpIHsKLQl0cnkgeworICAgIHRyeSB7CiAgICAgICAgICAgICBDb25uZWN0aW9uIGNvbiA9IGdldEZyZXNoQ29ubmVjdGlvbigpOwogICAgICAgICAgICAgaW50IGNvdW50MSA9IGdldENvdW50KGNvbik7CiAgICAgICAgICAgICBjb24uY2xvc2UoKTsKQEAgLTc5LDcgKzc5LDcgQEAKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5vdXQpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlKTsKLQl9CisgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgaW50IGdldENvdW50KENvbm5lY3Rpb24gY29uKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKQEAgLTEwNSw3ICsxMDUsNyBAQAogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgdXNlciA9IChTdHJpbmcpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi91c2VyIik7CiAgICAgICAgICAgICBwYXNzd29yZCA9IChTdHJpbmcpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9wYXNzd29yZCIpOwotICAgICAgICAgICAgeyAKKyAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgLy90ZXN0IHdoZXRoZXIgdGhlIGFwcHJvcHJpYXRlIGFkbWluLW9iamVjdC1yZXNvdXJjZXMgYXJlIGNyZWF0ZWQKICAgICAgICAgICAgICAgICAgaWMubG9va3VwKCJlaXMvYW9yXzEiKTsKICAgICAgICAgICAgICAgICAgaWMubG9va3VwKCJlaXMvYW9yXzFfMiIpOwpAQCAtMTE0LDEwICsxMTQsMTAgQEAKICAgICAgICAgICAgICAgICAgaWMubG9va3VwKCJlaXMvYW9yXzJfNCIpOwogICAgICAgICAgICAgICAgICBpYy5sb29rdXAoImVpcy9hb3JfM181Iik7CiAgICAgICAgICAgICB9Ci0JICAgIENvbnRyb2xzID0gKE15QWRtaW5PYmplY3QpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9laXMvdGVzdEFkbWluIik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ0FMTElORyBJTklUSUxJWkUgIik7Ci0JICAgIENvbnRyb2xzLmluaXRpYWxpemUoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDQUxMRUQgSU5JVElMSVpFICIgKyBDb250cm9scyk7CisgICAgICAgIENvbnRyb2xzID0gKE15QWRtaW5PYmplY3QpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9laXMvdGVzdEFkbWluIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ0FMTElORyBJTklUSUxJWkUgIik7CisgICAgICAgIENvbnRyb2xzLmluaXRpYWxpemUoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDQUxMRUQgSU5JVElMSVpFICIgKyBDb250cm9scyk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KQEAgLTE1Miw3ICsxNTIsNyBAQAogICAgICAgICAgICAgZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKICAgICAgICAgICAgIGRlYnVnKCJHZXQgSkRCQyBjb25uZWN0aW9uLCBhdXRvIHNpZ24gb24iKTsKICAgICAgICAgICAgIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoY29uICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gY29uOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTE2Miw3ICsxNjIsNyBAQAogICAgICAgICAgICAgdGhyb3cgZXgxOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIGNsb3NlQ29ubmVjdGlvbihDb25uZWN0aW9uIGNvbikgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICAgIGlmIChoZWxkQ29uICE9IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvYXBwL3NyYy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZGFkMjA3Yi4uMGIzOGMxOSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogZWpiLWphci54bWw9TUVUQS1JTkYvZWpiLWphci54bWwKIHN1bi1lamItamFyLnhtbD1NRVRBLUlORi9zdW4tZWpiLWphci54bWwKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvYXBwL3NyYy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL2FwcC9zcmMvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDg4MDY2NGYuLjM4OWQ1OTQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvYXBwL3NyYy9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9hcHAvc3JjL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjgsNDUgKzI4LDQ1IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7Ci0gICAgCisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIC8vc3VwZXIoYXJncyk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZG9UZXN0KCkgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJUaGlzIGlzIHRvIHRlc3QgY29ubmVjdG9yIDEuNSAiKwotCSAgICAgICAgICAgICAiY29udHJhY3RzLiIpOwotICAgICAgICAKKyAgICAgICAgICAgICAgICAgImNvbnRyYWN0cy4iKTsKKwogICAgICAgICBTdHJpbmcgcmVzID0gIk5PVCBSVU4iOwotCWRlYnVnKCJkb1Rlc3QoKSBFTlRFUi4uLiIpOworICAgIGRlYnVnKCJkb1Rlc3QoKSBFTlRFUi4uLiIpOwogICAgICAgICBib29sZWFuIHBhc3MgPSBmYWxzZTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJlcyAgPSAiQUxMIFRFU1RTIFBBU1NFRCI7Ci0JICAgIGludCB0ZXN0Q291bnQgPSAxOworICAgICAgICBpbnQgdGVzdENvdW50ID0gMTsKICAgICAgICAgICAgIHdoaWxlICghZG9uZSgpKSB7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBub3RpZnlBbmRXYWl0KCk7CiAgICAgICAgICAgICAgICAgaWYgKCFkb25lKCkpIHsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlJ1bm5pbmcuLi4iKTsKICAgICAgICAgICAgICAgICAgICAgcGFzcyA9IGNoZWNrUmVzdWx0cyhleHBlY3RlZFJlc3VsdHMoKSk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJHb3QgZXhwZWN0ZWQgcmVzdWx0cyA9ICIgKyBwYXNzKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy9kbyBub3QgY29udGludWUgaWYgb25lIHRlc3QgZmFpbGVkCiAgICAgICAgICAgICAgICAgICAgIGlmICghcGFzcykgewogICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gIlNPTUUgVEVTVFMgRkFJTEVEIjsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJJRCBDb25uZWN0b3IgMS41IHRlc3QgLSAiICsgdGVzdENvdW50LCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIklEIENvbm5lY3RvciAxLjUgdGVzdCAtICIgKyB0ZXN0Q291bnQsIHN0YXQuUEFTUyk7Ci0JCSAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotCQl0ZXN0Q291bnQgKys7CisgICAgICAgIHRlc3RDb3VudCArKzsKICAgICAgICAgICAgIH0KIAogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTc2LDE0ICs3NiwxNCBAQAogICAgICAgICB9CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJhbm5vdGF0aW9uLWNvbm5lY3RvcjE2LW1peGVkLW1vZGVJRCIpOwogCi0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCJFWElUSU5HLi4uIFNUQVRVUyA9ICIgKyByZXMpOwogICAgICAgICByZXR1cm4gcmVzOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgYm9vbGVhbiBjaGVja1Jlc3VsdHMoaW50IG51bSkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIE9iamVjdCBvID0gKG5ldyBJbml0aWFsQ29udGV4dCgpKS5sb29rdXAoIk15TWVzc2FnZUNoZWNrZXIiKTsKLSAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkgCisgICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpCiAgICAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cobywgTWVzc2FnZUNoZWNrZXJIb21lLmNsYXNzKTsKICAgICAgICAgTWVzc2FnZUNoZWNrZXIgY2hlY2tlciA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgIGludCByZXN1bHQgPSBjaGVja2VyLmdldE1lc3NhZ2VDb3VudCgpOwpAQCAtOTIsNyArOTIsNyBAQAogCiAgICAgcHJpdmF0ZSBib29sZWFuIGRvbmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgT2JqZWN0IG8gPSAobmV3IEluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiTXlNZXNzYWdlQ2hlY2tlciIpOwotICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKSAKKyAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkKICAgICAgICAgICAgIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvLCBNZXNzYWdlQ2hlY2tlckhvbWUuY2xhc3MpOwogICAgICAgICBNZXNzYWdlQ2hlY2tlciBjaGVja2VyID0gaG9tZS5jcmVhdGUoKTsKICAgICAgICAgcmV0dXJuIGNoZWNrZXIuZG9uZSgpOwpAQCAtMTAwLDcgKzEwMCw3IEBACiAKICAgICBwcml2YXRlIGludCBleHBlY3RlZFJlc3VsdHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgT2JqZWN0IG8gPSAobmV3IEluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiTXlNZXNzYWdlQ2hlY2tlciIpOwotICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKSAKKyAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkKICAgICAgICAgICAgIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvLCBNZXNzYWdlQ2hlY2tlckhvbWUuY2xhc3MpOwogICAgICAgICBNZXNzYWdlQ2hlY2tlciBjaGVja2VyID0gaG9tZS5jcmVhdGUoKTsKICAgICAgICAgcmV0dXJuIGNoZWNrZXIuZXhwZWN0ZWRSZXN1bHRzKCk7CkBAIC0xMDgsNyArMTA4LDcgQEAKIAogICAgIHByaXZhdGUgdm9pZCBub3RpZnlBbmRXYWl0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIE9iamVjdCBvID0gKG5ldyBJbml0aWFsQ29udGV4dCgpKS5sb29rdXAoIk15TWVzc2FnZUNoZWNrZXIiKTsKLSAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkgCisgICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpCiAgICAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cobywgTWVzc2FnZUNoZWNrZXJIb21lLmNsYXNzKTsKICAgICAgICAgTWVzc2FnZUNoZWNrZXIgY2hlY2tlciA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgIGNoZWNrZXIubm90aWZ5QW5kV2FpdCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9hcHAvc3JjL21kYi9NeU1lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL2FwcC9zcmMvbWRiL015TWVzc2FnZUJlYW4uamF2YQppbmRleCBlNGE1NzM1Li4zZmFjYmZlIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL2FwcC9zcmMvbWRiL015TWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL2FwcC9zcmMvbWRiL015TWVzc2FnZUJlYW4uamF2YQpAQCAtMjksNDEgKzI5LDQxIEBACiAKIC8qKgogICovCi1wdWJsaWMgY2xhc3MgTXlNZXNzYWdlQmVhbiBpbXBsZW1lbnRzIE1lc3NhZ2VEcml2ZW5CZWFuLCAKK3B1YmxpYyBjbGFzcyBNeU1lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZURyaXZlbkJlYW4sCiAgICAgICAgIE15TWVzc2FnZUxpc3RlbmVyIHsKIAogICAgIHByaXZhdGUgdHJhbnNpZW50IE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYyA9IG51bGw7CiAgICAgcHJpdmF0ZSBDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3Rvciwgd2hpY2ggaXMgcHVibGljIGFuZCB0YWtlcyBubyBhcmd1bWVudHMuCiAgICAgICovCiAgICAgcHVibGljIE15TWVzc2FnZUJlYW4oKSB7fQogCiAgICAgLyoqCi0gICAgICogc2V0TWVzc2FnZURyaXZlbkNvbnRleHQgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCAKLSAgICAgKiBub3QgZmluYWwgb3Igc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCAKKyAgICAgKiBzZXRNZXNzYWdlRHJpdmVuQ29udGV4dCBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0CisgICAgICogbm90IGZpbmFsIG9yIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQKICAgICAgKiB3aXRoIG9uZSBhcmd1bWVudCBvZiB0eXBlIGpha2FydGEuZWpiLk1lc3NhZ2VEcml2ZW5Db250ZXh0LgogICAgICAqCiAgICAgICogQHBhcmFtIG1kYyAgICB0aGUgY29udGV4dCB0byBzZXQKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRNZXNzYWdlRHJpdmVuQ29udGV4dChNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGMpIHsKLQl0aGlzLm1kYyA9IG1kYzsKKyAgICB0aGlzLm1kYyA9IG1kYzsKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBlamJDcmVhdGUgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IgCi0gICAgICogc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCB3aXRoIG5vIAorICAgICAqIGVqYkNyZWF0ZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvcgorICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBubwogICAgICAqIGFyZ3VtZW50cy4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB7IH0KIAogICAgIC8qKgotICAgICAqIG9uTWVzc2FnZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvciAKKyAgICAgKiBvbk1lc3NhZ2UgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IKICAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggb25lIGFyZ3VtZW50CiAgICAgICogb2YgdHlwZSBqYWthcnRhLmptcy5NZXNzYWdlLgogICAgICAqCi0gICAgICogQ2FzdHMgdGhlIGluY29taW5nIE1lc3NhZ2UgdG8gYSBUZXh0TWVzc2FnZSBhbmQgZGlzcGxheXMgCisgICAgICogQ2FzdHMgdGhlIGluY29taW5nIE1lc3NhZ2UgdG8gYSBUZXh0TWVzc2FnZSBhbmQgZGlzcGxheXMKICAgICAgKiB0aGUgdGV4dC4KICAgICAgKgogICAgICAqIEBwYXJhbSBpbk1lc3NhZ2UgICAgdGhlIGluY29taW5nIG1lc3NhZ2UKQEAgLTc0LDcgKzc0LDcgQEAKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgaWYgKGluTWVzc2FnZS5lbmRzV2l0aCgiV1JJVEUiKSkgewotICAgICAgICAgICAgICAgIGRvRGJTdHVmZigiV1JJVEUiLCAKKyAgICAgICAgICAgICAgICBkb0RiU3R1ZmYoIldSSVRFIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGluTWVzc2FnZS5zdWJzdHJpbmcoMCwgaW5NZXNzYWdlLmxhc3RJbmRleE9mKCI6IikpKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5NZXNzYWdlLmVuZHNXaXRoKCJERUxFVEUiKSkgewogICAgICAgICAgICAgICAgIGRvRGJTdHVmZigiREVMRVRFIiwKQEAgLTkwLDEwICs5MCwxMCBAQAogICAgICAgICB9CiAKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBlamJSZW1vdmUgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IgCi0gICAgICogc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCB3aXRoIG5vIAorICAgICAqIGVqYlJlbW92ZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvcgorICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBubwogICAgICAqIGFyZ3VtZW50cy4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7fQpAQCAtMTAzLDYyICsxMDMsNjIgQEAKIAogICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbiA9IG51bGw7CiAgICAgICAgIFN0cmluZyBpZCAgICA9IG1lc3NhZ2Uuc3Vic3RyaW5nKDAsIG1lc3NhZ2UuaW5kZXhPZigiOiIpKTsKLSAgICAgICAgU3RyaW5nIGJvZHkgID0gbWVzc2FnZS5zdWJzdHJpbmcobWVzc2FnZS5pbmRleE9mKCI6IikrMSk7IAorICAgICAgICBTdHJpbmcgYm9keSAgPSBtZXNzYWdlLnN1YnN0cmluZyhtZXNzYWdlLmluZGV4T2YoIjoiKSsxKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoIlJFQUQiLmVxdWFscyhvcCkpIHsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGRlYnVnKCJSZWFkaW5nIHJvdyBmcm9tIGRhdGFiYXNlLi4uIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBDcmVhdGluZyBhIGRhdGFiYXNlIGNvbm5lY3Rpb24KIAogICAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvTXlEQiIpOwogICAgICAgICAgICAgICAgICAgZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKICAgICAgICAgICAgICAgICAgIGRlYnVnKCJHZXQgSkRCQyBjb25uZWN0aW9uLCBhdXRvIHNpZ24gb24iKTsKICAgICAgICAgICAgICAgICAgIGRiQ29ubmVjdGlvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICBTdGF0ZW1lbnQgc3RtdCA9IGRiQ29ubmVjdGlvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgIFN0cmluZyBxdWVyeSA9IAorICAgICAgICAgICAgICAgICAgU3RyaW5nIHF1ZXJ5ID0KICAgICAgICAgICAgICAgICAgICJTRUxFQ1QgaWQgZnJvbSBtZXNzYWdlcyB3aGVyZSBpZCA9ICdRUSciOwogICAgICAgICAgICAgICAgICAgUmVzdWx0U2V0IHJlc3VsdHMgPSBzdG10LmV4ZWN1dGVRdWVyeShxdWVyeSk7CiAgICAgICAgICAgICAgICAgICByZXN1bHRzLm5leHQoKTsKLSAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUVEgaGFzIGJhbGFuY2UgIiArIAorICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJRUSBoYXMgYmFsYW5jZSAiICsKICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuZ2V0SW50KCJiYWxhbmNlIikgKyAiIGRvbGxhcnMiKTsKICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuY2xvc2UoKTsKICAgICAgICAgICAgICAgICAgIHN0bXQuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlYWQgb25lIGFjY291bnRcbiIpOwogCiAgICAgICAgICAgICB9IGVsc2UgaWYgKCJXUklURSIuZXF1YWxzKG9wKSkgewogCiAgICAgICAgICAgICAgICAgZGVidWcoIkluc2VydGluZyBvbmUgbWVzc2FnZSBpbiB0aGUgZGF0YWJhc2VcbiIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBDcmVhdGluZyBhIGRhdGFiYXNlIGNvbm5lY3Rpb24KICAgICAgICAgICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9NeURCIik7CiAgICAgICAgICAgICAgICAgLy9kZWJ1ZygiTG9va2VkIHVwIERhdGFzb3VyY2VcbiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkdldCBKREJDIGNvbm5lY3Rpb24sIGF1dG8gc2lnbiBvbiIpOwogICAgICAgICAgICAgICAgIGRiQ29ubmVjdGlvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGNyZWF0ZVJvdyhpZCwgYm9keSwgZGJDb25uZWN0aW9uKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0ZWQgb25lIG1lc3NhZ2VcbiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICB9IGVsc2UgaWYgKCJERUxFVEUiLmVxdWFscyhvcCkpIHsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGRlYnVnKCJEZWxldGluZyBvbmUgbWVzc2FnZSBmcm9tIHRoZSBkYXRhYmFzZVxuIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBDcmVhdGluZyBhIGRhdGFiYXNlIGNvbm5lY3Rpb24KICAgICAgICAgICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9NeURCIik7CiAgICAgICAgICAgICAgICAgLy9kZWJ1ZygiTG9va2VkIHVwIERhdGFzb3VyY2VcbiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkdldCBKREJDIGNvbm5lY3Rpb24sIGF1dG8gc2lnbiBvbiIpOwogICAgICAgICAgICAgICAgIGRiQ29ubmVjdGlvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGRlbGV0ZVJvdyhpZCwgZGJDb25uZWN0aW9uKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRlbGV0ZWQgb25lIG1lc3NhZ2VcbiIpOwogICAgICAgICAgICAgfSBlbHNlIGlmICgiREVMRVRFX0FMTCIuZXF1YWxzKG9wKSkgewotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgZGVidWcoIkRlbGV0aW5nIGFsbCBtZXNzYWdlcyBmcm9tIHRoZSBkYXRhYmFzZVxuIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBDcmVhdGluZyBhIGRhdGFiYXNlIGNvbm5lY3Rpb24KICAgICAgICAgICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9NeURCIik7CiAgICAgICAgICAgICAgICAgLy9kZWJ1ZygiTG9va2VkIHVwIERhdGFzb3VyY2VcbiIpOwpAQCAtMTcxLDcgKzE3MSw3IEBACiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vdW5zdXBwb3J0ZWQgb3AKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgIH1maW5hbGx5ewogICAgICAgICAgICAgdHJ5ewogICAgICAgICAgICAgICAgIGRiQ29ubmVjdGlvbi5jbG9zZSgpOwpAQCAtMTgwLDkgKzE4MCw5IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSB2b2lkIGNyZWF0ZVJvdyhTdHJpbmcgaWQsIFN0cmluZyBib2R5LCAKLSAgICAgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKSAKKworICAgIHByaXZhdGUgdm9pZCBjcmVhdGVSb3coU3RyaW5nIGlkLCBTdHJpbmcgYm9keSwKKyAgICAgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKIAogICAgICAgICAvLyBDcmVhdGUgcm93IGZvciB0aGlzIG1lc3NhZ2UKQEAgLTE5OCw5ICsxOTgsOSBAQAogICAgICAgICBzdG10LmNsb3NlKCk7CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIGRlbGV0ZVJvdyhTdHJpbmcgaWQsIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKSAKKyAgICBwcml2YXRlIHZvaWQgZGVsZXRlUm93KFN0cmluZyBpZCwgamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICAvLyBEZWxldGUgcm93IGZvciB0aGlzIG1lc3NhZ2UKICAgICAgICAgZGVidWcoIkRlbGV0ZVJvdyB3aXRoIElEID0gIiArIGlkKTsKICAgICAgICAgU3RhdGVtZW50IHN0bXQgPSBkYkNvbm5lY3Rpb24uY3JlYXRlU3RhdGVtZW50KCk7CkBAIC0yMTMsOSArMjEzLDkgQEAKICAgICAgICAgc3RtdC5jbG9zZSgpOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBkZWxldGVBbGwoamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pIAorICAgIHByaXZhdGUgdm9pZCBkZWxldGVBbGwoamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICAvLyBEZWxldGUgcm93IGZvciB0aGlzIG1lc3NhZ2UKICAgICAgICAgU3RhdGVtZW50IHN0bXQgPSBkYkNvbm5lY3Rpb24uY3JlYXRlU3RhdGVtZW50KCk7CiAgICAgICAgIFN0cmluZyBxdWVyeSA9ICJERUxFVEUgRlJPTSBtZXNzYWdlcyI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL2FwcC9zcmMvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL2FwcC9zcmMvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEKaW5kZXggMjQzYmFmNC4uZWU3MTYyOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9hcHAvc3JjL3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvYXBwL3NyYy9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YQpAQCAtNDQsMTcgKzQ0LDE3IEBACiAKICAgICBwdWJsaWMgU3RyaW5nIGRvVGVzdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIElPRXhjZXB0aW9uewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoaXMgaXMgdG8gdGVzdCBjb25uZWN0b3IgMS41ICIrCi0JICAgICAgICAgICAgICJjb250cmFjdHMuIik7CisgICAgICAgICAgICAgICAgICJjb250cmFjdHMuIik7CiAKICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKIAogICAgICAgICBTdHJpbmcgcmVzID0gIk5PVCBSVU4iOwotICAgIAlkZWJ1ZygiZG9UZXN0KCkgRU5URVIuLi4iKTsKKyAgICAgICAgZGVidWcoImRvVGVzdCgpIEVOVEVSLi4uIik7CiAgICAgICAgIGJvb2xlYW4gcGFzcyA9IGZhbHNlOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmVzICA9ICJBTEwgVEVTVFMgUEFTU0VEIjsKLQkgICAgaW50IHRlc3RDb3VudCA9IDE7CisgICAgICAgIGludCB0ZXN0Q291bnQgPSAxOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIlN0YXJ0aW5nIHRoZSB0ZXN0Iik7CiAgICAgICAgICAgICBvdXQuZmx1c2goKTsKICAgICAgICAgICAgIHdoaWxlICghZG9uZShvdXQpKSB7CkBAIC03MCwxOCArNzAsMTggQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHJlcyA9ICJTT01FIFRFU1RTIEZBSUxFRCI7CiAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIklEIENvbm5lY3RvciAxLjUgdGVzdCAtICIgKyB0ZXN0Q291bnQgKyAiIEZBSUwiKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJURVNUOkZBSUwiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIklEIENvbm5lY3RvciAxLjUgdGVzdCAtICIgKyB0ZXN0Q291bnQgKyAiIFBBU1MiKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJURVNUOlBBU1MiKTsKLQkJICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIkVORF9PRl9FWEVDVVRJT04iKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgb3V0LnByaW50bG4oIkVORF9PRl9FWEVDVVRJT04iKTsKLSAgICAgICAgICAgIAorCiAKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkltcG9ydGluZyB0cmFuc2FjdGlvbiB0ZXN0IGZhaWxlZC4iKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvYnVpbGQucHJvcGVydGllcwppbmRleCBmZTc3MzUzLi41YTVmMGEzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii9hbm5vdGF0aW9uLWNvbm5lY3RvcjE2LW1peGVkLW1vZGUvc2VydmxldCIvPgogPHByb3BlcnR5IG5hbWU9Imh0dHA6aG9zdCIgdmFsdWU9ImxvY2FsaG9zdCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL2J1aWxkLnhtbAppbmRleCAzMDgwZDljLi5lYmVkODExIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL2J1aWxkLnhtbApAQCAtODEsMTUgKzgxLDE1IEBACiA8IS0tCiAgICAgPHRhcmdldCBuYW1lPSJydW50ZXN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVud2ViY2xpZW50LWNvbW1vbiI+Ci0JICAgIDxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJjb25uZWN0b3IxLjUgKGVhciBiYXNlZCkiLz4KLQkgICAgPC9hbnRjYWxsPgorICAgICAgICA8cGFyYW0gbmFtZT0idGVzdHN1aXRlLmlkIiB2YWx1ZT0iY29ubmVjdG9yMS41IChlYXIgYmFzZWQpIi8+CisgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIC0tPgogCiA8IS0tCiAgIDx0YXJnZXQgbmFtZT0icnVudGVzdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJhbm5vdGF0aW9uLWNvbm5lY3RvcjE2LW1peGVkLW1vZGUiIC8+CisgICAgPHBhcmFtIG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJhbm5vdGF0aW9uLWNvbm5lY3RvcjE2LW1peGVkLW1vZGUiIC8+CiAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KIC0tPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9yYS9NRVRBLUlORi9yYS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL3JhL01FVEEtSU5GL3JhLnhtbAppbmRleCAxMWEwZTA0Li5mODk2OWIzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL3JhL01FVEEtSU5GL3JhLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL3JhL01FVEEtSU5GL3JhLnhtbApAQCAtNDUsNyArNDUsNyBAQAogICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgogICAgICAgICA8aW5ib3VuZC1yZXNvdXJjZWFkYXB0ZXI+Ci0gICAgICAgICAgICA8bWVzc2FnZWFkYXB0ZXI+ICAgICAgICAgIAorICAgICAgICAgICAgPG1lc3NhZ2VhZGFwdGVyPgogICAgICAgICAgICAgICAgIDxtZXNzYWdlbGlzdGVuZXI+CiAgICAgICAgICAgICAgICAgICAgIDxtZXNzYWdlbGlzdGVuZXItdHlwZT4KICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rvci5NeU1lc3NhZ2VMaXN0ZW5lcgpAQCAtNTYsNyArNTYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgPC9hY3RpdmF0aW9uc3BlYy1jbGFzcz4KICAgICAgICAgICAgICAgICAgICAgPC9hY3RpdmF0aW9uc3BlYz4KICAgICAgICAgICAgICAgICA8L21lc3NhZ2VsaXN0ZW5lcj4KLSAgICAgICAgICAgIDwvbWVzc2FnZWFkYXB0ZXI+ICAgICAgICAgIAorICAgICAgICAgICAgPC9tZXNzYWdlYWRhcHRlcj4KICAgICAgICAgPC9pbmJvdW5kLXJlc291cmNlYWRhcHRlcj4KICAgICAgICAgPGFkbWlub2JqZWN0PgogICAgICAgICAgIDxhZG1pbm9iamVjdC1pbnRlcmZhY2U+Y29ubmVjdG9yLk15QWRtaW5PYmplY3Q8L2FkbWlub2JqZWN0LWludGVyZmFjZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvcmEvc3JjL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvcmEvc3JjL2J1aWxkLnhtbAppbmRleCBmZjliNzM2Li5hMGMzZjkxIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL3JhL3NyYy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9yYS9zcmMvYnVpbGQueG1sCkBAIC0zMCw4ICszMCw4IEBACiAKICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImluaXQtY29tbW9uIiA+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9ImJ1aWxkLmNsYXNzZXMuZGlyIiB2YWx1ZT0iY2xhc3NlcyIgLz4KLQk8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY29ubmVjdG9yIiAvPgorICAgIDxwYXJhbSBuYW1lPSJidWlsZC5jbGFzc2VzLmRpciIgdmFsdWU9ImNsYXNzZXMiIC8+CisgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNvbm5lY3RvciIgLz4KICAgICA8L2FudGNhbGw+CiAgICAgPGphciBqYXJmaWxlPSIuLi9nZW5lcmljLXJhLmphciIgYmFzZWRpcj0iY2xhc3NlcyIKICAgICAgICAgIGluY2x1ZGVzPSJjb25uZWN0b3IvKi5jbGFzcyIgLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEKaW5kZXggNTU1MzNkNC4uZjU5YjJiMyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEKQEAgLTE4LDcgKzE4LDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBDb250cm9scyB7CiAgICAgcHVibGljIHN0YXRpYyBPYmplY3QgcmVhZHlMb2NrID0gbmV3IE9iamVjdCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhCmluZGV4IDY1ODIzM2UuLmQ3M2M4NjIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBEZWxpdmVyeVdvcmsgaW1wbGVtZW50cyBXb3JrIHsKIApAQCAtMzYsNyArMzYsNyBAQAogICAgIHByaXZhdGUgU3RyaW5nIG9wOwogICAgIHByaXZhdGUgYm9vbGVhbiBrZWVwQ291bnQ7CiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50ZXIgPSAwOwotICAgIAorCiAgICAgcHVibGljIERlbGl2ZXJ5V29yayhNZXNzYWdlRW5kcG9pbnQgZXAsIGludCBudW1PZk1lc3NhZ2VzLCBTdHJpbmcgb3ApIHsKICAgICAgICAgdGhpcy5lcCA9IGVwOwogICAgICAgICB0aGlzLm51bSA9IG51bU9mTWVzc2FnZXM7CkBAIC00NCw3ICs0NCw3IEBACiAgICAgICAgIHRoaXMua2VlcENvdW50ID0gZmFsc2U7CiAgICAgfQogCi0gICAgcHVibGljIERlbGl2ZXJ5V29yayhNZXNzYWdlRW5kcG9pbnQgZXAsIGludCBudW1PZk1lc3NhZ2VzLCAKKyAgICBwdWJsaWMgRGVsaXZlcnlXb3JrKE1lc3NhZ2VFbmRwb2ludCBlcCwgaW50IG51bU9mTWVzc2FnZXMsCiAgICAgICAgICAgICBTdHJpbmcgb3AsIGJvb2xlYW4ga2VlcENvdW50KSB7CiAgICAgICAgIHRoaXMuZXAgPSBlcDsKICAgICAgICAgdGhpcy5udW0gPSBudW1PZk1lc3NhZ2VzOwpAQCAtNTUsNyArNTUsNyBAQAogICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKIAogICAgICAgICBkZWJ1ZygiRU5URVIuLi4iKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIC8vTWV0aG9kIG9uTWVzc2FnZSA9IGdldE9uTWVzc2FnZU1ldGhvZCgpOwogICAgICAgICAgICAgLy9lcC5iZWZvcmVEZWxpdmVyeShvbk1lc3NhZ2UpOwpAQCAtNzgsMTEgKzc4LDExIEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vZXAuYWZ0ZXJEZWxpdmVyeSgpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiTEVBVkUuLi4iKTsKICAgICB9CiAKQEAgLTkzLDE0ICs5MywxNCBAQAogICAgIH0KIAogICAgIHByaXZhdGUgTWV0aG9kIGdldE9uTWVzc2FnZU1ldGhvZCgpIHsKLSAgICAgICAgCisKICAgICAgICAgTWV0aG9kIG9uTWVzc2FnZU1ldGhvZCA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDbGFzcyBtc2dMaXN0ZW5lckNsYXNzID0gY29ubmVjdG9yLk15TWVzc2FnZUxpc3RlbmVyLmNsYXNzOwogICAgICAgICAgICAgQ2xhc3NbXSBwYXJhbVR5cGVzID0geyBqYXZhLmxhbmcuU3RyaW5nLmNsYXNzIH07Ci0gICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPSAKKyAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9CiAgICAgICAgICAgICAgICAgbXNnTGlzdGVuZXJDbGFzcy5nZXRNZXRob2QoIm9uTWVzc2FnZSIsIHBhcmFtVHlwZXMpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YQppbmRleCAxMDBjYWNlLi5mYTkzZjYzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YQpAQCAtMzYsNyArMzYsNyBAQAogICAgICAgICAgICAgICBmbGFnVG9TdHJpbmcoZmxhZ3MpKTsKICAgICB9CiAKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGZvcmdldChYaWQgeGlkKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2UuZm9yZ2V0OiAiICsgeGlkVG9TdHJpbmcoeGlkKSk7CiAgICAgfQpAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2UucHJlcGFyZTogIiArIHhpZFRvU3RyaW5nKHhpZCkpOwogICAgICAgICByZXR1cm4gWEFSZXNvdXJjZS5YQV9PSzsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgWGlkW10gcmVjb3ZlcihpbnQgZmxhZykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLnJlY292ZXI6ICIgKyBmbGFnVG9TdHJpbmcoZmxhZykpOwogICAgICAgICByZXR1cm4gbnVsbDsKQEAgLTY2LDcgKzY2LDcgQEAKICAgICBwdWJsaWMgYm9vbGVhbiBzZXRUcmFuc2FjdGlvblRpbWVvdXQoaW50IHNlY29uZHMpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzdGFydChYaWQgeGlkLCBpbnQgZmxhZ3MpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5zdGFydDogIiArIHhpZFRvU3RyaW5nKHhpZCkgKyAiLCIgKwogICAgICAgICAgICAgICAgIGZsYWdUb1N0cmluZyhmbGFncykpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9yYS9zcmMvY29ubmVjdG9yL01lc3NhZ2VzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL3JhL3NyYy9jb25uZWN0b3IvTWVzc2FnZXMuamF2YQppbmRleCBiNWIwZjAyLi40YzljMDEyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL3JhL3NyYy9jb25uZWN0b3IvTWVzc2FnZXMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL3JhL3NyYy9jb25uZWN0b3IvTWVzc2FnZXMuamF2YQpAQCAtMjEsNyArMjEsNyBAQAogLyoqCiAgKiBjb2xsZWN0aW9uIG9mIG1lc3NhZ2VzLgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgTWVzc2FnZXMgewogCkBAIC01NCw3ICs1NCw3IEBACiAgICAgICAgU3RyaW5nIGNvbW1hbmQgID0gYXJnc1swXTsKICAgICAgICBTdHJpbmcgZGVzdE5hbWUgPSBhcmdzWzFdOwogICAgICAgIFN0cmluZyBtZXNzYWdlICA9IGFyZ3NbMl07Ci0gICAKKwogICAgICAgIGlmICghImFkZCIuZXF1YWxzKGNvbW1hbmQpKSB7CiAgICAgICAgICAgIFN5c3RlbS5leGl0KDEpOwogICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvcmEvc3JjL2Nvbm5lY3Rvci9NeUFjdGl2YXRpb25TcGVjXzEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvcmEvc3JjL2Nvbm5lY3Rvci9NeUFjdGl2YXRpb25TcGVjXzEuamF2YQppbmRleCAwYTVkNjU1Li5jOWU1ZjI3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL3JhL3NyYy9jb25uZWN0b3IvTXlBY3RpdmF0aW9uU3BlY18xLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9yYS9zcmMvY29ubmVjdG9yL015QWN0aXZhdGlvblNwZWNfMS5qYXZhCkBAIC0yNSw3ICsyNSw3IEBACiAgKiBzbyB0aGF0IHRoZSBhcHAgc2VydmVyIGNhbiBpbnN0YW50aWF0ZSBhbmQgY29uZmlndXJlCiAgKiBpdCBhdCB0aGUgcnVudGltZS4KICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogQEFjdGl2YXRpb24oCiAgICAgICAgIG1lc3NhZ2VMaXN0ZW5lcnMgPSB7Y29ubmVjdG9yLk15TWVzc2FnZUxpc3RlbmVyXzEuY2xhc3MsIGNvbm5lY3Rvci5NeU1lc3NhZ2VMaXN0ZW5lci5jbGFzc30KQEAgLTM4LDcgKzM4LDcgQEAKICAgICBwcml2YXRlIFN0cmluZyB0ZXN0UHJvcDsKICAgICBwcml2YXRlIEludGVnZXIgdGVzdEludGVnZXJQcm9wOwogICAgIHByaXZhdGUgUmVzb3VyY2VBZGFwdGVyIHJlc291cmNlYWRhcHRlcjsKLSAgICAgCisKIAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzdGluYXRpb25OYW1lICgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZGVzdGluYXRpb25OYW1lOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEKaW5kZXggOGNmMzlhNS4uNzQyMzU2OSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdC5qYXZhCkBAIC01MiwxMyArNTIsMTMgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBpbml0aWFsaXplKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiW015QWRtaW5PYmplY3RdIEluaXRpYWxpemluZyB0aGUgQ29udHJvbHMgdG8gZmFsc2U6IityZXNldENvbnRyb2wpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW015QWRtaW5PYmplY3RdIEluaXRpYWxpemluZyB0aGUgQ29udHJvbHMgdG8gZmFsc2U6IityZXNldENvbnRyb2wpOwogICAgICAgICBpZiAocmVzZXRDb250cm9sLmVxdWFscygiQkVHSU5OSU5HIikpIHsKICAgICAgICAgICAgIHN5bmNocm9uaXplZCAoQ29udHJvbHMucmVhZHlMb2NrKXsKICAgICAgICAgICAgICAgICBDb250cm9scy5kb25lPWZhbHNlOwogICAgICAgICAgICAgfQotCSAgIFN5c3RlbS5vdXQucHJpbnRsbigiW015QWRtaW5PYmplY3RdIEluaXRpYWxpemVkIHRoZSBDb250cm9scyB0byBmYWxzZSIpOwotCX0KKyAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXplZCB0aGUgQ29udHJvbHMgdG8gZmFsc2UiKTsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gZG9uZSgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0X0ludGVyZmFjZV8yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdF9JbnRlcmZhY2VfMi5qYXZhCmluZGV4IDc5ZTI5M2IuLjQzOWU2MTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0X0ludGVyZmFjZV8yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3RfSW50ZXJmYWNlXzIuamF2YQpAQCAtMTcsNyArMTcsNyBAQAogcGFja2FnZSBjb25uZWN0b3I7CiAKIHB1YmxpYyBpbnRlcmZhY2UgTXlBZG1pbk9iamVjdF9JbnRlcmZhY2VfMiB7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRFeHBlY3RlZFJlc3VsdHMgKEludGVnZXIgdmFsdWUpOwogCiAgICAgcHVibGljIEludGVnZXIgZ2V0RXhwZWN0ZWRSZXN1bHRzICgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3RfSW50ZXJmYWNlXzMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0X0ludGVyZmFjZV8zLmphdmEKaW5kZXggNDk2ZDZkZC4uMGQ3YzU2ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3RfSW50ZXJmYWNlXzMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdF9JbnRlcmZhY2VfMy5qYXZhCkBAIC0xNyw3ICsxNyw3IEBACiBwYWNrYWdlIGNvbm5lY3RvcjsKIAogcHVibGljIGludGVyZmFjZSBNeUFkbWluT2JqZWN0X0ludGVyZmFjZV8zIHsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldEV4cGVjdGVkUmVzdWx0cyAoSW50ZWdlciB2YWx1ZSk7CiAKICAgICBwdWJsaWMgSW50ZWdlciBnZXRFeHBlY3RlZFJlc3VsdHMgKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhCmluZGV4IDRhOTYzZGMuLjE4OTI2OWIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhCkBAIC0yNiw5ICsyNiw5IEBACiAgKiBzbyB0aGF0IHRoZSBhcHAgc2VydmVyIGNhbiBpbnN0YW50aWF0ZSBhbmQgY29uZmlndXJlCiAgKiBpdCBhdCB0aGUgcnVudGltZS4KICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwotcHVibGljIGNsYXNzIFNpbXBsZUFjdGl2YXRpb25TcGVjIAorcHVibGljIGNsYXNzIFNpbXBsZUFjdGl2YXRpb25TcGVjCiAgICAgaW1wbGVtZW50cyBBY3RpdmF0aW9uU3BlYywgamF2YS5pby5TZXJpYWxpemFibGUgewogCiAgICAgcHJpdmF0ZSBTdHJpbmcgZGVzdGluYXRpb25OYW1lOwpAQCAtNjYsNyArNjYsNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGVzdFByb3AoKSB7CiAgICAgICAgIHJldHVybiB0aGlzLnRlc3RQcm9wOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFRlc3RQcm9wIChTdHJpbmcgdGVzdFByb3ApIHsKICAgICAgICAgZGVidWcoInNldFRlc3RQcm9wICgpIGNhbGxlZC4uLiB0ZXN0UHJvcCA9ICIgKyB0ZXN0UHJvcCk7CiAgICAgICAgIHRoaXMudGVzdFByb3AgPSB0ZXN0UHJvcDsKQEAgLTc1LDcgKzc1LDcgQEAKICAgICBwdWJsaWMgSW50ZWdlciBnZXRUZXN0SW50ZWdlclByb3AoKSB7CiAgICAgICAgIHJldHVybiB0aGlzLnRlc3RJbnRlZ2VyUHJvcDsKICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRUZXN0SW50ZWdlclByb3AgKEludGVnZXIgdGVzdFByb3AxKSB7CiAgICAgICAgIGRlYnVnKCJzZXRUZXN0SW50ZWdlclByb3AgKCkgY2FsbGVkLi4uIHRlc3RJbnRlZ2VyUHJvcCA9ICIgKyB0ZXN0UHJvcDEpOwogICAgICAgICB0aGlzLnRlc3RJbnRlZ2VyUHJvcCA9IHRlc3RQcm9wMTsKQEAgLTk5LDcgKzk5LDcgQEAKIAogICAgICAgfQogCi0gICB9IAorICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGRlYnVnIChTdHJpbmcgbWVzc2FnZSkKICAgICB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUkEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSQS5qYXZhCmluZGV4IDBmYmQ0ZTIuLmMyMGI3MzkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSQS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSQS5qYXZhCkBAIC0zOSw3ICszOSw3IEBACiAvKioKICAqIFRoaXMgaXMgYSBzYW1wbGUgcmVzb3VyY2UgYWRhcHRlcgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBAQ29ubmVjdG9yKAogICAgZGlzcGxheU5hbWUgPSAiU2ltcGxlIFJBIiwKQEAgLTc3LDEyICs3NywxMiBAQAogCiAgICAgICAgIC8vdGVzdGluZyBjcmVhdCB0aW1lcgogICAgICAgICBUaW1lciB0aW1lciA9IG51bGw7Ci0JICB0cnl7Ci0JICAgICAgdGltZXIgPSBjdHguY3JlYXRlVGltZXIoKTsKLQkgIH0gY2F0Y2goVW5hdmFpbGFibGVFeGNlcHRpb24gdWUpIHsKLQkgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIik7Ci0JICAgICAgdGhyb3cgbmV3IFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uKCJFcnJvciBmb3JtIGJvb3RzdHJhcCIpOwotCSAgfQorICAgICAgdHJ5eworICAgICAgICAgIHRpbWVyID0gY3R4LmNyZWF0ZVRpbWVyKCk7CisgICAgICB9IGNhdGNoKFVuYXZhaWxhYmxlRXhjZXB0aW9uIHVlKSB7CisgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFcnJvciIpOworICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbigiRXJyb3IgZm9ybSBib290c3RyYXAiKTsKKyAgICAgIH0KICAgICAgICAgZGVidWcoIjAwNC4gU2ltcGxlIFJBIHN0YXJ0Li4uIik7CiAgICAgICAgIGRlYnVnKCIwMDUuIFNpbXBsZSBSQSBzdGFydC4uLiIpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbC5qYXZhCmluZGV4IDQ3OTI0MzIuLmZmZmZmOTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YQpAQCAtMzUsNyArMzUsNyBAQAogLyoqCiAgKiBUaGlzIGlzIGEgc2FtcGxlIHJlc291cmNlIGFkYXB0ZXIKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogQENvbm5lY3RvcigKICAgIC8qbW9kdWxlTmFtZT0idGVzdCByYSIsKi8KQEAgLTc0LDEyICs3NCwxMiBAQAogCiAgICAgICAgIC8vdGVzdGluZyBjcmVhdCB0aW1lcgogICAgICAgICBUaW1lciB0aW1lciA9IG51bGw7Ci0JICB0cnl7Ci0JICAgICAgdGltZXIgPSBjdHguY3JlYXRlVGltZXIoKTsKLQkgIH0gY2F0Y2goVW5hdmFpbGFibGVFeGNlcHRpb24gdWUpIHsKLQkgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIik7Ci0JICAgICAgdGhyb3cgbmV3IFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uKCJFcnJvciBmb3JtIGJvb3RzdHJhcCIpOwotCSAgfQorICAgICAgdHJ5eworICAgICAgICAgIHRpbWVyID0gY3R4LmNyZWF0ZVRpbWVyKCk7CisgICAgICB9IGNhdGNoKFVuYXZhaWxhYmxlRXhjZXB0aW9uIHVlKSB7CisgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFcnJvciIpOworICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbigiRXJyb3IgZm9ybSBib290c3RyYXAiKTsKKyAgICAgIH0KICAgICAgICAgZGVidWcoIjAwNC4gU2ltcGxlIFJBIHN0YXJ0Li4uIik7CiAgICAgICAgIGRlYnVnKCIwMDUuIFNpbXBsZSBSQSBzdGFydC4uLiIpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsXzEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsXzEuamF2YQppbmRleCBkNGI4NWI4Li5kY2M1YjA5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbF8xLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGxfMS5qYXZhCkBAIC00MCw3ICs0MCw3IEBACiAvKioKICAqIFRoaXMgaXMgYSBzYW1wbGUgcmVzb3VyY2UgYWRhcHRlcgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBAQ29ubmVjdG9yKAogICAgZGlzcGxheU5hbWUgPSAiU2ltcGxlIFJlc291cmNlIEFkYXB0ZXIiLApAQCAtNDgsNyArNDgsNyBAQAogICAgZWlzVHlwZSA9ICJHZW5lcmljIFR5cGUiLAogICAgdmVyc2lvbiA9ICIxLjBBbHBoYSIKICkKLXB1YmxpYyBjbGFzcyBTaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsXzEgCitwdWJsaWMgY2xhc3MgU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbF8xCiBpbXBsZW1lbnRzIFJlc291cmNlQWRhcHRlciwgamF2YS5pby5TZXJpYWxpemFibGUgewogCiAgICAgcHJpdmF0ZSBCb290c3RyYXBDb250ZXh0IGN0eDsKQEAgLTg0LDExICs4NCwxMSBAQAogCiAgICAgcHVibGljIHZvaWQKICAgICBlbmRwb2ludERlYWN0aXZhdGlvbiAoCi0gICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGVuZHBvaW50RmFjdG9yeSwgCisgICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGVuZHBvaW50RmFjdG9yeSwKICAgICAgICAgICAgIEFjdGl2YXRpb25TcGVjIHNwZWMpIHsKLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiVGhpcyByZXNvdXJjZS1hZGFwdGVyIHNob3VsZCBub3QgaGF2ZSBiZWVuIGluaXRpYWxpemVkIik7ICAKKyAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiVGhpcyByZXNvdXJjZS1hZGFwdGVyIHNob3VsZCBub3QgaGF2ZSBiZWVuIGluaXRpYWxpemVkIik7CiAgICAgfQotICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGVzdE5hbWUoKSB7CiAgICAgICAgIHJldHVybiB0ZXN0TmFtZTsKICAgICB9CkBAIC0xMjAsNyArMTIwLDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NpbXBsZVJlc291cmNlQWRhcHRlckltcGxdID09PiAiICsgbWVzc2FnZSk7CiAgICAgfQogCi0gICAgcHVibGljIFhBUmVzb3VyY2VbXSBnZXRYQVJlc291cmNlcyhBY3RpdmF0aW9uU3BlY1tdIHNwZWNzKSAKKyAgICBwdWJsaWMgWEFSZXNvdXJjZVtdIGdldFhBUmVzb3VyY2VzKEFjdGl2YXRpb25TcGVjW10gc3BlY3MpCiAgICAgICAgIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsXzIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsXzIuamF2YQppbmRleCBkYTVhZTE5Li5hNDRmMWM1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbF8yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGxfMi5qYXZhCkBAIC00MCw3ICs0MCw3IEBACiAvKioKICAqIFRoaXMgaXMgYSBzYW1wbGUgcmVzb3VyY2UgYWRhcHRlcgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBAQ29ubmVjdG9yKAogICAgZGlzcGxheU5hbWUgPSAiU2ltcGxlIFJlc291cmNlIEFkYXB0ZXIiLApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQppbmRleCA2NGI3MWM0Li43NjJlMDNlIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQpAQCAtMzMsNyArMzMsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIFdvcmtEaXNwYXRjaGVyIGltcGxlbWVudHMgV29yayB7CiAKQEAgLTQ0LDExICs0NCwxMSBAQAogICAgIHByb3RlY3RlZCBBY3RpdmF0aW9uU3BlYyBzcGVjOwogICAgIHByb3RlY3RlZCBXb3JrTWFuYWdlciB3bTsKICAgICBwcm90ZWN0ZWQgWEFUZXJtaW5hdG9yIHhhOwotICAgIAorCiAgICAgcHVibGljIFdvcmtEaXNwYXRjaGVyKAogICAgICAgICAgICAgU3RyaW5nIGlkLAogICAgICAgICAgICAgQm9vdHN0cmFwQ29udGV4dCBjdHgsCi0gICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGZhY3RvcnksIAorICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBmYWN0b3J5LAogICAgICAgICAgICAgQWN0aXZhdGlvblNwZWMgc3BlYykgewogICAgICAgICB0aGlzLmlkICAgICAgPSBpZDsKICAgICAgICAgdGhpcy5jdHggICAgID0gY3R4OwpAQCAtNjEsNyArNjEsNyBAQAogICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKIAogICAgICAgICBkZWJ1ZygiRU5URVIuLi4iKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHN5bmNocm9uaXplZCAoQ29udHJvbHMucmVhZHlMb2NrKSB7CiAgICAgICAgICAgICAgICAgZGVidWcoIldBSVQuLi4iKTsKQEAgLTgzLDI2ICs4MywyNiBAQAogICAgICAgICAgICAgdHJ5IHsKIAogICAgICAgICAgICAgICAgIE1ldGhvZCBvbk1lc3NhZ2UgPSBnZXRPbk1lc3NhZ2VNZXRob2QoKTsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlzRGVsaXZlcnlUcmFuc2FjdGVkID0gIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaXNEZWxpdmVyeVRyYW5zYWN0ZWQgPSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3RvcnkuaXNEZWxpdmVyeVRyYW5zYWN0ZWQob25NZXNzYWdlKSk7CiAKICAgICAgICAgICAgICAgICBpZiAoIWZhY3RvcnkuaXNEZWxpdmVyeVRyYW5zYWN0ZWQob25NZXNzYWdlKSkgewogICAgICAgICAgICAgICAgICAgICAvL01lc3NhZ2VFbmRwb2ludCBlcCA9IGZhY3RvcnkuY3JlYXRlRW5kcG9pbnQobnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIC8vRGVsaXZlcnlXb3JrIGQgPSBuZXcgRGVsaXZlcnlXb3JrKCJOT19UWCIsIGVwKTsgCisgICAgICAgICAgICAgICAgICAgIC8vRGVsaXZlcnlXb3JrIGQgPSBuZXcgRGVsaXZlcnlXb3JrKCJOT19UWCIsIGVwKTsKICAgICAgICAgICAgICAgICAgICAgLy93bS5kb1dvcmsoZCwgMCwgbnVsbCwgbnVsbCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy9NZXNzYWdlRW5kcG9pbnQgZXAgPSBmYWN0b3J5LmNyZWF0ZUVuZHBvaW50KG51bGwpOwogICAgICAgICAgICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnQgZXAgPSBmYWN0b3J5LmNyZWF0ZUVuZHBvaW50KG5ldyBGYWtlWEFSZXNvdXJjZSgpKTsKICAgICAgICAgICAgICAgICAgICAgaW50IG51bU9mTWVzc2FnZXMgPSA1OwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvL2ltcG9ydGluZyB0cmFuc2FjdGlvbgogCiAgICAgICAgICAgICAgICAgICAgIC8vd3JpdGUvY29tbWl0CiAgICAgICAgICAgICAgICAgICAgIEV4ZWN1dGlvbkNvbnRleHQgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7CiAKLSAgICAgICAgICAgICAgICAgICAgRGVsaXZlcnlXb3JrIHcgPSAKKyAgICAgICAgICAgICAgICAgICAgRGVsaXZlcnlXb3JrIHcgPQogICAgICAgICAgICAgICAgICAgICAgICAgbmV3IERlbGl2ZXJ5V29yayhlcCwgbnVtT2ZNZXNzYWdlcywgIldSSVRFIik7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgdHJ1ZSk7CkBAIC0xMTAsNyArMTEwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIkRPTkUgV1JJVEUgVE8gREIiKTsKICAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMuZXhwZWN0ZWRSZXN1bHRzID0gbnVtT2ZNZXNzYWdlczsKICAgICAgICAgICAgICAgICAgICAgbm90aWZ5QW5kV2FpdCgpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvL2RlbGV0ZS9yb2xsYmFjawogICAgICAgICAgICAgICAgICAgICBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKQEAgLTEyNiw3ICsxMjYsNyBAQAogICAgICAgICAgICAgICAgICAgICAvL2RlbGV0ZS9jb21taXQKICAgICAgICAgICAgICAgICAgICAgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIHcgPSBuZXcgRGVsaXZlcnlXb3JrKGVwLCBudW1PZk1lc3NhZ2VzLCAiREVMRVRFIik7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgdHJ1ZSk7CkBAIC0xNTAsNyArMTUwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgLy9kZWxldGUvY29tbWl0CiAgICAgICAgICAgICAgICAgICAgIGVjID0gc3RhcnRUeCgpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiU3RhcnQgVFggLSAiICsgZWMuZ2V0WGlkKCkpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICB3ID0gbmV3IERlbGl2ZXJ5V29yayhlcCwgbnVtT2ZNZXNzYWdlcywgIkRFTEVURSIpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIHRydWUpOwpAQCAtMTk1LDcgKzE5NSw3IEBACiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGlmIChYQVJlc291cmNlLlhBX09LID09IHhhLnByZXBhcmUoZWMuZ2V0WGlkKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJYQSBQUkVQQVJFL0NPTU1JVC4gRE9ORSBXUklURSBUTyBEQiAiKTsKQEAgLTIwNywxOSArMjA3LDE5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBDb250cm9scy5leHBlY3RlZFJlc3VsdHMgPSAzOwogICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZ5QW5kV2FpdCgpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vZGVsZXRlIGFsbC4KICAgICAgICAgICAgICAgICAgICAgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIHcgPSBuZXcgRGVsaXZlcnlXb3JrKGVwLCAxLCAiREVMRVRFX0FMTCIpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIHRydWUpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiRE9ORSBERUxFVEUgQUxMIEZST00gREIiKTsKICAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMuZXhwZWN0ZWRSZXN1bHRzID0gMDsKICAgICAgICAgICAgICAgICAgICAgbm90aWZ5QW5kV2FpdCgpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBkb25lKCk7CiAgICAgICAgICAgICAgICAgfQogCkBAIC0yNDYsNyArMjQ2LDcgQEAKICAgICAgICAgICAgICAgICBkb25lKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIkxFQVZFLi4uIik7CiAgICAgfQogCkBAIC0yNjEsMTQgKzI2MSwxNCBAQAogICAgIH0KIAogICAgIHB1YmxpYyBNZXRob2QgZ2V0T25NZXNzYWdlTWV0aG9kKCkgewotICAgICAgICAKKwogICAgICAgICBNZXRob2Qgb25NZXNzYWdlTWV0aG9kID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENsYXNzIG1zZ0xpc3RlbmVyQ2xhc3MgPSBjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIuY2xhc3M7CiAgICAgICAgICAgICBDbGFzc1tdIHBhcmFtVHlwZXMgPSB7IGphdmEubGFuZy5TdHJpbmcuY2xhc3MgfTsKLSAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9IAorICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0KICAgICAgICAgICAgICAgICBtc2dMaXN0ZW5lckNsYXNzLmdldE1ldGhvZCgib25NZXNzYWdlIiwgcGFyYW1UeXBlcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CkBAIC0yOTEsMTMgKzI5MSwxMyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgLy9TbGVlcCBmb3IgNSBzZWNvbmRzCiAgICAgICAgICAgICAvL1RocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoNSoxMDAwKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQoQ29udHJvbHMucmVhZHlMb2NrKSB7CiAgICAgICAgICAgICAgICAgLy9Ob3RpZnkgdGhlIGNsaWVudCB0byBjaGVjayB0aGUgcmVzdWx0cwotICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay5ub3RpZnlBbGwoKTsgCisgICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLm5vdGlmeUFsbCgpOwogCiAgICAgICAgICAgICAgICAgLy9XYWl0IHVudGlsIHJlc3VsdHMgYXJlIHZlcmlmaWVkIGJ5IHRoZSBjbGllbnQKLSAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2sud2FpdCgpOyAKKyAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2sud2FpdCgpOwogCiAgICAgICAgICAgICAgICAgaWYgKHN0b3ApIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yLW1peGVkbW9kZS9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhCmluZGV4IDc3ZGJmMzQuLjZiZDllNTcgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3Rvci1taXhlZG1vZGUvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3ItbWl4ZWRtb2RlL3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEKQEAgLTM2LDggKzM2LDggQEAKICAgICBwdWJsaWMgaW50IGJyYW5jaFF1YWxpZmllcjsKICAgICBwdWJsaWMgaW50IGdsb2JhbFR4SUQ7CiAKLSAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYR1RSSURTSVpFPSA2NDsgCi0gICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEJRVUFMU0laRT0gNjQ7IAorICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhHVFJJRFNJWkU9IDY0OworICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhCUVVBTFNJWkU9IDY0OwogCiAgICAgcHVibGljIFhJRCgpIHsKICAgICAgICAgaW50IGZvbyA9IElEKys7CkBAIC01NSwxMCArNTUsMTAgQEAKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgICAgICAgICAgICAgICAgIC8vIEl0IGNhbid0IGJlIGVxdWFsCiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgb3RoZXIgPSAoWElEKW87ICAgICAgICAgICAgICAgICAgIC8vIFRoZSBvdGhlciBYSUQsIG5vdyBwcm9wZXJseSBjYXN0Ci0gICAgICAgIAotICAgICAgICBpZiAodGhpcy5mb3JtYXRJRCA9PSBvdGhlci5mb3JtYXRJRCAKKworICAgICAgICBpZiAodGhpcy5mb3JtYXRJRCA9PSBvdGhlci5mb3JtYXRJRAogICAgICAgICAgICAgICAgICYmIHRoaXMuYnJhbmNoUXVhbGlmaWVyID09IG90aGVyLmJyYW5jaFF1YWxpZmllcgogICAgICAgICAgICAgICAgICYmIHRoaXMuZ2xvYmFsVHhJRCA9PSBvdGhlci5nbG9iYWxUeElEKSB7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTk4LDcgKzk4LDcgQEAKICAgICAgICAgICAgICAgICAiZm9ybWF0SUQoIiAgICAgKyBmb3JtYXRJRCAgICAgKyAiKSwgIiArCiAgICAgICAgICAgICAgICAgImJyYW5jaFF1YWxpZmllciAoIiArIGJyYW5jaFF1YWxpZmllciArICIpLCAiICsKICAgICAgICAgICAgICAgICAiZ2xvYmFsVHhJRCgiICsgZ2xvYmFsVHhJRCArICIpfSIpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gczsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9hcHAvc3JjL01FVEEtSU5GL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwKaW5kZXggMzhhZjE4Yy4uMjkwNTkzMiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwKQEAgLTkxLDggKzkxLDggQEAKICAgICAgICAgPHJlcy1zaGFyaW5nLXNjb3BlPlNoYXJlYWJsZTwvcmVzLXNoYXJpbmctc2NvcGU+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KICAgICAgIDxyZXNvdXJjZS1lbnYtcmVmPgotCTxyZXNvdXJjZS1lbnYtcmVmLW5hbWU+ZWlzL3Rlc3RBZG1pbjwvcmVzb3VyY2UtZW52LXJlZi1uYW1lPgotCTxyZXNvdXJjZS1lbnYtcmVmLXR5cGU+Y29ubmVjdG9yLk15QWRtaW5PYmplY3Q8L3Jlc291cmNlLWVudi1yZWYtdHlwZT4KKyAgICA8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmVpcy90ZXN0QWRtaW48L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KKyAgICA8cmVzb3VyY2UtZW52LXJlZi10eXBlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC9yZXNvdXJjZS1lbnYtcmVmLXR5cGU+CiAgICAgICA8L3Jlc291cmNlLWVudi1yZWY+CiAgICAgICA8c2VjdXJpdHktaWRlbnRpdHk+CiAgICAgICAgIDx1c2UtY2FsbGVyLWlkZW50aXR5Lz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9hcHAvc3JjL01FVEEtSU5GL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9hcHAvc3JjL01FVEEtSU5GL3N1bi1lamItamFyLnhtbAppbmRleCAxMTQ2YTVhLi4wYTdlMGRhIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvYXBwL3NyYy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCkBAIC0zMyw3ICszMyw3IEBACiAgICAgICAgICAgICBUZXN0SW50ZWdlclByb3AKICAgICAgICAgICA8L2FjdGl2YXRpb24tY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgPGFjdGl2YXRpb24tY29uZmlnLXByb3BlcnR5LXZhbHVlPgotICAgICAgICAgICAgMiAKKyAgICAgICAgICAgIDIKICAgICAgICAgICA8L2FjdGl2YXRpb24tY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICA8L2FjdGl2YXRpb24tY29uZmlnLXByb3BlcnR5PgogICAgICAgICA8L2FjdGl2YXRpb24tY29uZmlnPgpAQCAtODUsNyArODUsNyBAQAogICAgICAgPC9yZXNvdXJjZS1yZWY+CiAgICAgICA8cmVzb3VyY2UtZW52LXJlZj4KICAgICAgICAgPHJlc291cmNlLWVudi1yZWYtbmFtZT5laXMvdGVzdEFkbWluPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+Ci0JPGpuZGktbmFtZT5laXMvdGVzdEFkbWluPC9qbmRpLW5hbWU+CisgICAgPGpuZGktbmFtZT5laXMvdGVzdEFkbWluPC9qbmRpLW5hbWU+CiAgICAgICA8L3Jlc291cmNlLWVudi1yZWY+CiAgICAgICA8Z2VuLWNsYXNzZXMvPgogICAgIDwvZWpiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L2FwcC9zcmMvYmVhbnMvTWVzc2FnZUNoZWNrZXJFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9hcHAvc3JjL2JlYW5zL01lc3NhZ2VDaGVja2VyRUpCLmphdmEKaW5kZXggZTIyZmExMC4uNDA3NmU0OSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L2FwcC9zcmMvYmVhbnMvTWVzc2FnZUNoZWNrZXJFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvYXBwL3NyYy9iZWFucy9NZXNzYWdlQ2hlY2tlckVKQi5qYXZhCkBAIC00MCw3ICs0MCw3IEBACiAKICAgICBwdWJsaWMgTWVzc2FnZUNoZWNrZXJFSkIoKSB7fQogCi0gICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgCisgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkKICAgICAgICAgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYmVhbiBjcmVhdGVkIik7CiAgICAgICAgIGhlbGRDb24gPSBudWxsOwpAQCAtNzAsMTEgKzcwLDExIEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKENvbnRyb2xzLmdldExvY2tPYmplY3QoKSkgewogICAgICAgICAgICAgICAgIC8vVGVsbCB0aGUgcmVzb3VyY2UgYWRhcHRlciB0aGUgY2xpZW50IGlzIHJlYWR5IHRvIHJ1bgotICAgICAgICAgICAgICAgIENvbnRyb2xzLmdldExvY2tPYmplY3QoKS5ub3RpZnlBbGwoKTsgCi0gICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLm5vdGlmeUFsbCgpOworCiAgICAgICAgICAgICAgICAgZGVidWcoIk5PVElGSUVELi4uIFNUQVJUIFdBSVRJTkciKTsKICAgICAgICAgICAgICAgICAvL1dhaXQgdW50aWwgYmVpbmcgdG9sZCB0byByZWFkIGZyb20gdGhlIGRhdGFiYXNlCi0gICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLndhaXQoKTsgCisgICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLndhaXQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTkzLDIyICs5MywyMiBAQAogICAgIH0KIAogICAgIHB1YmxpYyBpbnQgZ2V0TWVzc2FnZUNvdW50KCkgewotCXRyeSB7CisgICAgdHJ5IHsKICAgICAgICAgICAgIENvbm5lY3Rpb24gY29uID0gZ2V0RnJlc2hDb25uZWN0aW9uKCk7CiAgICAgICAgICAgICBpbnQgY291bnQxID0gZ2V0Q291bnQoY29uKTsKICAgICAgICAgICAgIGNvbi5jbG9zZSgpOwotICAgICAgICAgICAgCi0JICAgIC8qCisKKyAgICAgICAgLyoKICAgICAgICAgICAgIHN5bmNocm9uaXplZChDb250cm9scy5nZXRMb2NrT2JqZWN0KCkpIHsKICAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkubm90aWZ5KCk7CiAgICAgICAgICAgICB9Ci0JICAgICovCi0gICAgICAgICAgICAgICAgCisgICAgICAgICovCisKICAgICAgICAgICAgIHJldHVybiBjb3VudDE7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZShTeXN0ZW0ub3V0KTsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7Ci0JfQorICAgIH0KICAgICB9CiAKICAgICBwcml2YXRlIGludCBnZXRDb3VudChDb25uZWN0aW9uIGNvbikgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CkBAIC0xMzQsMTAgKzEzNCwxMCBAQAogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgdXNlciA9IChTdHJpbmcpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi91c2VyIik7CiAgICAgICAgICAgICBwYXNzd29yZCA9IChTdHJpbmcpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9wYXNzd29yZCIpOwotCSAgICBDb250cm9scyA9IChNeUFkbWluT2JqZWN0KSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWlzL3Rlc3RBZG1pbiIpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNBTExJTkcgSU5JVElMSVpFIF1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dIik7Ci0JICAgIENvbnRyb2xzLmluaXRpYWxpemUoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDQUxMRUQgSU5JVElMSVpFIF1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dIiArIENvbnRyb2xzKTsKKyAgICAgICAgQ29udHJvbHMgPSAoTXlBZG1pbk9iamVjdCkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2Vpcy90ZXN0QWRtaW4iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDQUxMSU5HIElOSVRJTElaRSBdXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXSIpOworICAgICAgICBDb250cm9scy5pbml0aWFsaXplKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ0FMTEVEIElOSVRJTElaRSBdXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXSIgKyBDb250cm9scyk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KQEAgLTE3Miw3ICsxNzIsNyBAQAogICAgICAgICAgICAgZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKICAgICAgICAgICAgIGRlYnVnKCJHZXQgSkRCQyBjb25uZWN0aW9uLCBhdXRvIHNpZ24gb24iKTsKICAgICAgICAgICAgIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoY29uICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gY29uOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTE4Myw3ICsxODMsNyBAQAogICAgICAgICAgICAgdGhyb3cgZXgxOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIGNsb3NlQ29ubmVjdGlvbihDb25uZWN0aW9uIGNvbikgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICAgIGlmIChoZWxkQ29uICE9IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvYXBwL3NyYy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGRhZDIwN2IuLjBiMzhjMTkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L2FwcC9zcmMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiBlamItamFyLnhtbD1NRVRBLUlORi9lamItamFyLnhtbAogc3VuLWVqYi1qYXIueG1sPU1FVEEtSU5GL3N1bi1lamItamFyLnhtbApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L2FwcC9zcmMvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L2FwcC9zcmMvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGI4NWVmZGEuLjc0NDMwMzIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9hcHAvc3JjL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvYXBwL3NyYy9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI4LDQ1ICsyOCw0NSBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwotICAgIAorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgICAgICAvL3N1cGVyKGFyZ3MpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGRvVGVzdCgpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVGhpcyBpcyB0byB0ZXN0IGNvbm5lY3RvciAxLjUgIisKLQkgICAgICAgICAgICAgImNvbnRyYWN0cy4iKTsKLSAgICAgICAgCisgICAgICAgICAgICAgICAgICJjb250cmFjdHMuIik7CisKICAgICAgICAgU3RyaW5nIHJlcyA9ICJOT1QgUlVOIjsKLQlkZWJ1ZygiZG9UZXN0KCkgRU5URVIuLi4iKTsKKyAgICBkZWJ1ZygiZG9UZXN0KCkgRU5URVIuLi4iKTsKICAgICAgICAgYm9vbGVhbiBwYXNzID0gZmFsc2U7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXMgID0gIkFMTCBURVNUUyBQQVNTRUQiOwotCSAgICBpbnQgdGVzdENvdW50ID0gMTsKKyAgICAgICAgaW50IHRlc3RDb3VudCA9IDE7CiAgICAgICAgICAgICB3aGlsZSAoIWRvbmUoKSkgewotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgbm90aWZ5QW5kV2FpdCgpOwogICAgICAgICAgICAgICAgIGlmICghZG9uZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJSdW5uaW5nLi4uIik7CiAgICAgICAgICAgICAgICAgICAgIHBhc3MgPSBjaGVja1Jlc3VsdHMoZXhwZWN0ZWRSZXN1bHRzKCkpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiR290IGV4cGVjdGVkIHJlc3VsdHMgPSAiICsgcGFzcyk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vZG8gbm90IGNvbnRpbnVlIGlmIG9uZSB0ZXN0IGZhaWxlZAogICAgICAgICAgICAgICAgICAgICBpZiAoIXBhc3MpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlcyA9ICJTT01FIFRFU1RTIEZBSUxFRCI7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiSUQgQ29ubmVjdG9yIDEuNSB0ZXN0IC0gIiArIHRlc3RDb3VudCwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJJRCBDb25uZWN0b3IgMS41IHRlc3QgLSAiICsgdGVzdENvdW50LCBzdGF0LlBBU1MpOwotCQkgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLQkJdGVzdENvdW50ICsrOworICAgICAgICB0ZXN0Q291bnQgKys7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CkBAIC03NiwxNCArNzYsMTQgQEAKICAgICAgICAgfQogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiYW5ub3RhdGlvbi1jb25uZWN0b3IxNUlEIik7CiAKLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIkVYSVRJTkcuLi4gU1RBVFVTID0gIiArIHJlcyk7CiAgICAgICAgIHJldHVybiByZXM7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBib29sZWFuIGNoZWNrUmVzdWx0cyhpbnQgbnVtKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgT2JqZWN0IG8gPSAobmV3IEluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiTXlNZXNzYWdlQ2hlY2tlciIpOwotICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKSAKKyAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkKICAgICAgICAgICAgIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvLCBNZXNzYWdlQ2hlY2tlckhvbWUuY2xhc3MpOwogICAgICAgICBNZXNzYWdlQ2hlY2tlciBjaGVja2VyID0gaG9tZS5jcmVhdGUoKTsKICAgICAgICAgaW50IHJlc3VsdCA9IGNoZWNrZXIuZ2V0TWVzc2FnZUNvdW50KCk7CkBAIC05Miw3ICs5Miw3IEBACiAKICAgICBwcml2YXRlIGJvb2xlYW4gZG9uZSgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBPYmplY3QgbyA9IChuZXcgSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJNeU1lc3NhZ2VDaGVja2VyIik7Ci0gICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpIAorICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKQogICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG8sIE1lc3NhZ2VDaGVja2VySG9tZS5jbGFzcyk7CiAgICAgICAgIE1lc3NhZ2VDaGVja2VyIGNoZWNrZXIgPSBob21lLmNyZWF0ZSgpOwogICAgICAgICByZXR1cm4gY2hlY2tlci5kb25lKCk7CkBAIC0xMDAsNyArMTAwLDcgQEAKIAogICAgIHByaXZhdGUgaW50IGV4cGVjdGVkUmVzdWx0cygpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBPYmplY3QgbyA9IChuZXcgSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJNeU1lc3NhZ2VDaGVja2VyIik7Ci0gICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpIAorICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKQogICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG8sIE1lc3NhZ2VDaGVja2VySG9tZS5jbGFzcyk7CiAgICAgICAgIE1lc3NhZ2VDaGVja2VyIGNoZWNrZXIgPSBob21lLmNyZWF0ZSgpOwogICAgICAgICByZXR1cm4gY2hlY2tlci5leHBlY3RlZFJlc3VsdHMoKTsKQEAgLTEwOCw3ICsxMDgsNyBAQAogCiAgICAgcHJpdmF0ZSB2b2lkIG5vdGlmeUFuZFdhaXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgT2JqZWN0IG8gPSAobmV3IEluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiTXlNZXNzYWdlQ2hlY2tlciIpOwotICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKSAKKyAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkKICAgICAgICAgICAgIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvLCBNZXNzYWdlQ2hlY2tlckhvbWUuY2xhc3MpOwogICAgICAgICBNZXNzYWdlQ2hlY2tlciBjaGVja2VyID0gaG9tZS5jcmVhdGUoKTsKICAgICAgICAgY2hlY2tlci5ub3RpZnlBbmRXYWl0KCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L2FwcC9zcmMvbWRiL015TWVzc2FnZUJlYW4uamF2YQppbmRleCA0N2Q3NzZmLi5jN2I5OWU4IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9hcHAvc3JjL21kYi9NeU1lc3NhZ2VCZWFuLmphdmEKQEAgLTMxLDQxICszMSw0MSBAQAogCiAvKioKICAqLwotcHVibGljIGNsYXNzIE15TWVzc2FnZUJlYW4gaW1wbGVtZW50cyBNZXNzYWdlRHJpdmVuQmVhbiwgCitwdWJsaWMgY2xhc3MgTXlNZXNzYWdlQmVhbiBpbXBsZW1lbnRzIE1lc3NhZ2VEcml2ZW5CZWFuLAogICAgICAgICBNeU1lc3NhZ2VMaXN0ZW5lciB7CiAKICAgICBwcml2YXRlIHRyYW5zaWVudCBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGMgPSBudWxsOwogICAgIHByaXZhdGUgQ29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0b3IsIHdoaWNoIGlzIHB1YmxpYyBhbmQgdGFrZXMgbm8gYXJndW1lbnRzLgogICAgICAqLwogICAgIHB1YmxpYyBNeU1lc3NhZ2VCZWFuKCkge30KIAogICAgIC8qKgotICAgICAqIHNldE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgCi0gICAgICogbm90IGZpbmFsIG9yIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgCisgICAgICogc2V0TWVzc2FnZURyaXZlbkNvbnRleHQgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dAorICAgICAqIG5vdCBmaW5hbCBvciBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kCiAgICAgICogd2l0aCBvbmUgYXJndW1lbnQgb2YgdHlwZSBqYWthcnRhLmVqYi5NZXNzYWdlRHJpdmVuQ29udGV4dC4KICAgICAgKgogICAgICAqIEBwYXJhbSBtZGMgICAgdGhlIGNvbnRleHQgdG8gc2V0CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TWVzc2FnZURyaXZlbkNvbnRleHQoTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjKSB7Ci0JdGhpcy5tZGMgPSBtZGM7CisgICAgdGhpcy5tZGMgPSBtZGM7CiAgICAgfQogCiAgICAgLyoqCi0gICAgICogZWpiQ3JlYXRlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yIAotICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBubyAKKyAgICAgKiBlamJDcmVhdGUgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IKKyAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggbm8KICAgICAgKiBhcmd1bWVudHMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgeyB9CiAKICAgICAvKioKLSAgICAgKiBvbk1lc3NhZ2UgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IgCisgICAgICogb25NZXNzYWdlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yCiAgICAgICogc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCB3aXRoIG9uZSBhcmd1bWVudAogICAgICAqIG9mIHR5cGUgamFrYXJ0YS5qbXMuTWVzc2FnZS4KICAgICAgKgotICAgICAqIENhc3RzIHRoZSBpbmNvbWluZyBNZXNzYWdlIHRvIGEgVGV4dE1lc3NhZ2UgYW5kIGRpc3BsYXlzIAorICAgICAqIENhc3RzIHRoZSBpbmNvbWluZyBNZXNzYWdlIHRvIGEgVGV4dE1lc3NhZ2UgYW5kIGRpc3BsYXlzCiAgICAgICogdGhlIHRleHQuCiAgICAgICoKICAgICAgKiBAcGFyYW0gaW5NZXNzYWdlICAgIHRoZSBpbmNvbWluZyBtZXNzYWdlCkBAIC03Niw3ICs3Niw3IEBACiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGlmIChpbk1lc3NhZ2UuZW5kc1dpdGgoIldSSVRFIikpIHsKLSAgICAgICAgICAgICAgICBkb0RiU3R1ZmYoIldSSVRFIiwgCisgICAgICAgICAgICAgICAgZG9EYlN0dWZmKCJXUklURSIsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbk1lc3NhZ2Uuc3Vic3RyaW5nKDAsIGluTWVzc2FnZS5sYXN0SW5kZXhPZigiOiIpKSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGluTWVzc2FnZS5lbmRzV2l0aCgiREVMRVRFIikpIHsKICAgICAgICAgICAgICAgICBkb0RiU3R1ZmYoIkRFTEVURSIsCkBAIC05MiwxMCArOTIsMTAgQEAKICAgICAgICAgfQogCiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogZWpiUmVtb3ZlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yIAotICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBubyAKKyAgICAgKiBlamJSZW1vdmUgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IKKyAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggbm8KICAgICAgKiBhcmd1bWVudHMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkge30KQEAgLTEwNSw2MiArMTA1LDYyIEBACiAKICAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24gPSBudWxsOwogICAgICAgICBTdHJpbmcgaWQgICAgPSBtZXNzYWdlLnN1YnN0cmluZygwLCBtZXNzYWdlLmluZGV4T2YoIjoiKSk7Ci0gICAgICAgIFN0cmluZyBib2R5ICA9IG1lc3NhZ2Uuc3Vic3RyaW5nKG1lc3NhZ2UuaW5kZXhPZigiOiIpKzEpOyAKKyAgICAgICAgU3RyaW5nIGJvZHkgID0gbWVzc2FnZS5zdWJzdHJpbmcobWVzc2FnZS5pbmRleE9mKCI6IikrMSk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKCJSRUFEIi5lcXVhbHMob3ApKSB7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZWJ1ZygiUmVhZGluZyByb3cgZnJvbSBkYXRhYmFzZS4uLiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAKICAgICAgICAgICAgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L015REIiKTsKICAgICAgICAgICAgICAgICAgIGRlYnVnKCJMb29rZWQgdXAgRGF0YXNvdXJjZVxuIik7CiAgICAgICAgICAgICAgICAgICBkZWJ1ZygiR2V0IEpEQkMgY29ubmVjdGlvbiwgYXV0byBzaWduIG9uIik7CiAgICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgU3RhdGVtZW50IHN0bXQgPSBkYkNvbm5lY3Rpb24uY3JlYXRlU3RhdGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICBTdHJpbmcgcXVlcnkgPSAKKyAgICAgICAgICAgICAgICAgIFN0cmluZyBxdWVyeSA9CiAgICAgICAgICAgICAgICAgICAiU0VMRUNUIGlkIGZyb20gbWVzc2FnZXMgd2hlcmUgaWQgPSAnUVEnIjsKICAgICAgICAgICAgICAgICAgIFJlc3VsdFNldCByZXN1bHRzID0gc3RtdC5leGVjdXRlUXVlcnkocXVlcnkpOwogICAgICAgICAgICAgICAgICAgcmVzdWx0cy5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlFRIGhhcyBiYWxhbmNlICIgKyAKKyAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUVEgaGFzIGJhbGFuY2UgIiArCiAgICAgICAgICAgICAgICAgICByZXN1bHRzLmdldEludCgiYmFsYW5jZSIpICsgIiBkb2xsYXJzIik7CiAgICAgICAgICAgICAgICAgICByZXN1bHRzLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgICBzdG10LmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZWFkIG9uZSBhY2NvdW50XG4iKTsKIAogICAgICAgICAgICAgfSBlbHNlIGlmICgiV1JJVEUiLmVxdWFscyhvcCkpIHsKIAogICAgICAgICAgICAgICAgIGRlYnVnKCJJbnNlcnRpbmcgb25lIG1lc3NhZ2UgaW4gdGhlIGRhdGFiYXNlXG4iKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvTXlEQiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKICAgICAgICAgICAgICAgICAvL2RlYnVnKCJHZXQgSkRCQyBjb25uZWN0aW9uLCBhdXRvIHNpZ24gb24iKTsKICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBjcmVhdGVSb3coaWQsIGJvZHksIGRiQ29ubmVjdGlvbik7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGVkIG9uZSBtZXNzYWdlXG4iKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgfSBlbHNlIGlmICgiREVMRVRFIi5lcXVhbHMob3ApKSB7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZWJ1ZygiRGVsZXRpbmcgb25lIG1lc3NhZ2UgZnJvbSB0aGUgZGF0YWJhc2VcbiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvTXlEQiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKICAgICAgICAgICAgICAgICAvL2RlYnVnKCJHZXQgSkRCQyBjb25uZWN0aW9uLCBhdXRvIHNpZ24gb24iKTsKICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZWxldGVSb3coaWQsIGRiQ29ubmVjdGlvbik7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZWxldGVkIG9uZSBtZXNzYWdlXG4iKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoIkRFTEVURV9BTEwiLmVxdWFscyhvcCkpIHsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGRlYnVnKCJEZWxldGluZyBhbGwgbWVzc2FnZXMgZnJvbSB0aGUgZGF0YWJhc2VcbiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvTXlEQiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKQEAgLTE3MSw3ICsxNzEsNyBAQAogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvL3Vuc3VwcG9ydGVkIG9wCiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICB9ZmluYWxseXsKICAgICAgICAgICAgIHRyeXsKICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24uY2xvc2UoKTsKQEAgLTE4MCw5ICsxODAsOSBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIAotICAgIHByaXZhdGUgdm9pZCBjcmVhdGVSb3coU3RyaW5nIGlkLCBTdHJpbmcgYm9keSwgCi0gICAgICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikgCisKKyAgICBwcml2YXRlIHZvaWQgY3JlYXRlUm93KFN0cmluZyBpZCwgU3RyaW5nIGJvZHksCisgICAgICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgLy8gQ3JlYXRlIHJvdyBmb3IgdGhpcyBtZXNzYWdlCkBAIC0xOTgsOSArMTk4LDkgQEAKICAgICAgICAgc3RtdC5jbG9zZSgpOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBkZWxldGVSb3coU3RyaW5nIGlkLCBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikgCisgICAgcHJpdmF0ZSB2b2lkIGRlbGV0ZVJvdyhTdHJpbmcgaWQsIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgLy8gRGVsZXRlIHJvdyBmb3IgdGhpcyBtZXNzYWdlCiAgICAgICAgIGRlYnVnKCJEZWxldGVSb3cgd2l0aCBJRCA9ICIgKyBpZCk7CiAgICAgICAgIFN0YXRlbWVudCBzdG10ID0gZGJDb25uZWN0aW9uLmNyZWF0ZVN0YXRlbWVudCgpOwpAQCAtMjEzLDkgKzIxMyw5IEBACiAgICAgICAgIHN0bXQuY2xvc2UoKTsKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgZGVsZXRlQWxsKGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKSAKKyAgICBwcml2YXRlIHZvaWQgZGVsZXRlQWxsKGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgLy8gRGVsZXRlIHJvdyBmb3IgdGhpcyBtZXNzYWdlCiAgICAgICAgIFN0YXRlbWVudCBzdG10ID0gZGJDb25uZWN0aW9uLmNyZWF0ZVN0YXRlbWVudCgpOwogICAgICAgICBTdHJpbmcgcXVlcnkgPSAiREVMRVRFIEZST00gbWVzc2FnZXMiOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L2FwcC9zcmMvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvYXBwL3NyYy9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YQppbmRleCA5ZTBkNjFlLi5hYTJjNTRhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvYXBwL3NyYy9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvYXBwL3NyYy9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YQpAQCAtNDQsMTcgKzQ0LDE3IEBACiAKICAgICBwdWJsaWMgU3RyaW5nIGRvVGVzdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIElPRXhjZXB0aW9uewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoaXMgaXMgdG8gdGVzdCBjb25uZWN0b3IgMS41ICIrCi0JICAgICAgICAgICAgICJjb250cmFjdHMuIik7CisgICAgICAgICAgICAgICAgICJjb250cmFjdHMuIik7CiAKICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKIAogICAgICAgICBTdHJpbmcgcmVzID0gIk5PVCBSVU4iOwotCWRlYnVnKCJkb1Rlc3QoKSBFTlRFUi4uLiIpOworICAgIGRlYnVnKCJkb1Rlc3QoKSBFTlRFUi4uLiIpOwogICAgICAgICBib29sZWFuIHBhc3MgPSBmYWxzZTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJlcyAgPSAiQUxMIFRFU1RTIFBBU1NFRCI7Ci0JICAgIGludCB0ZXN0Q291bnQgPSAxOworICAgICAgICBpbnQgdGVzdENvdW50ID0gMTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCJTdGFydGluZyB0aGUgdGVzdCIpOwogICAgICAgICAgICAgb3V0LmZsdXNoKCk7CiAgICAgICAgICAgICB3aGlsZSAoIWRvbmUob3V0KSkgewpAQCAtNzAsMTggKzcwLDE4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICByZXMgPSAiU09NRSBURVNUUyBGQUlMRUQiOwogICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJRCBDb25uZWN0b3IgMS41IHRlc3QgLSAiICsgdGVzdENvdW50ICsgIiBGQUlMIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiVEVTVDpGQUlMIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJRCBDb25uZWN0b3IgMS41IHRlc3QgLSAiICsgdGVzdENvdW50ICsgIiBQQVNTIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiVEVTVDpQQVNTIik7Ci0JCSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJFTkRfT0ZfRVhFQ1VUSU9OIik7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG91dC5wcmludGxuKCJFTkRfT0ZfRVhFQ1VUSU9OIik7Ci0gICAgICAgICAgICAKKwogCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbXBvcnRpbmcgdHJhbnNhY3Rpb24gdGVzdCBmYWlsZWQuIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDFmZTEzNmEuLjAyMjQ5MWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii9hbm5vdGF0aW9uLWNvbm5lY3RvcjE1L3NlcnZsZXQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJodHRwOmhvc3QiIHZhbHVlPSJsb2NhbGhvc3QiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvYnVpbGQueG1sCmluZGV4IGM4MmMxYjQuLjJjN2E3YzYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L2J1aWxkLnhtbApAQCAtODAsMTUgKzgwLDE1IEBACiA8IS0tCiAgICAgPHRhcmdldCBuYW1lPSJydW50ZXN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVud2ViY2xpZW50LWNvbW1vbiI+Ci0JICAgIDxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJjb25uZWN0b3IxLjUgKGVhciBiYXNlZCkiLz4KLQkgICAgPC9hbnRjYWxsPgorICAgICAgICA8cGFyYW0gbmFtZT0idGVzdHN1aXRlLmlkIiB2YWx1ZT0iY29ubmVjdG9yMS41IChlYXIgYmFzZWQpIi8+CisgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIC0tPgogCiA8IS0tCiAgIDx0YXJnZXQgbmFtZT0icnVudGVzdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJhbm5vdGF0aW9uLWNvbm5lY3RvcjE1IiAvPgorICAgIDxwYXJhbSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iYW5ub3RhdGlvbi1jb25uZWN0b3IxNSIgLz4KICAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgogLS0+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvcmEvc3JjL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9yYS9zcmMvYnVpbGQueG1sCmluZGV4IGZmOGJjYzIuLjg0OTZmNjAgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9yYS9zcmMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9yYS9zcmMvYnVpbGQueG1sCkBAIC0zMCw4ICszMCw4IEBACiAKICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImluaXQtY29tbW9uIiA+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9ImJ1aWxkLmNsYXNzZXMuZGlyIiB2YWx1ZT0iY2xhc3NlcyIgLz4KLQk8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY29ubmVjdG9yIiAvPgorICAgIDxwYXJhbSBuYW1lPSJidWlsZC5jbGFzc2VzLmRpciIgdmFsdWU9ImNsYXNzZXMiIC8+CisgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNvbm5lY3RvciIgLz4KICAgICA8L2FudGNhbGw+CiAgICAgPGphciBqYXJmaWxlPSIuLi9nZW5lcmljLXJhLmphciIgYmFzZWRpcj0iY2xhc3NlcyIKICAgICAgICAgIGluY2x1ZGVzPSJjb25uZWN0b3IvKi5jbGFzcyIgLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL0Fic3RyYWN0UmVzb3VyY2VBZGFwdGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9BYnN0cmFjdFJlc291cmNlQWRhcHRlci5qYXZhCmluZGV4IGM0ODkyYjEuLjFkMWY2ZTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL0Fic3RyYWN0UmVzb3VyY2VBZGFwdGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvQWJzdHJhY3RSZXNvdXJjZUFkYXB0ZXIuamF2YQpAQCAtMjMsNyArMjMsNyBAQAogICAgIHByaXZhdGUgU3RyaW5nIHRlc3ROYW1lOwogICAgIHByb3RlY3RlZCBib29sZWFuIGRlYnVnID0gdHJ1ZTsKIAotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBnZXRUZXN0TmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHRlc3ROYW1lOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhCmluZGV4IDU1NTMzZDQuLmY1OWIyYjMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YQpAQCAtMTgsNyArMTgsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIENvbnRyb2xzIHsKICAgICBwdWJsaWMgc3RhdGljIE9iamVjdCByZWFkeUxvY2sgPSBuZXcgT2JqZWN0KCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhCmluZGV4IDY1ODIzM2UuLmQ3M2M4NjIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgRGVsaXZlcnlXb3JrIGltcGxlbWVudHMgV29yayB7CiAKQEAgLTM2LDcgKzM2LDcgQEAKICAgICBwcml2YXRlIFN0cmluZyBvcDsKICAgICBwcml2YXRlIGJvb2xlYW4ga2VlcENvdW50OwogICAgIHByaXZhdGUgc3RhdGljIGludCBjb3VudGVyID0gMDsKLSAgICAKKwogICAgIHB1YmxpYyBEZWxpdmVyeVdvcmsoTWVzc2FnZUVuZHBvaW50IGVwLCBpbnQgbnVtT2ZNZXNzYWdlcywgU3RyaW5nIG9wKSB7CiAgICAgICAgIHRoaXMuZXAgPSBlcDsKICAgICAgICAgdGhpcy5udW0gPSBudW1PZk1lc3NhZ2VzOwpAQCAtNDQsNyArNDQsNyBAQAogICAgICAgICB0aGlzLmtlZXBDb3VudCA9IGZhbHNlOwogICAgIH0KIAotICAgIHB1YmxpYyBEZWxpdmVyeVdvcmsoTWVzc2FnZUVuZHBvaW50IGVwLCBpbnQgbnVtT2ZNZXNzYWdlcywgCisgICAgcHVibGljIERlbGl2ZXJ5V29yayhNZXNzYWdlRW5kcG9pbnQgZXAsIGludCBudW1PZk1lc3NhZ2VzLAogICAgICAgICAgICAgU3RyaW5nIG9wLCBib29sZWFuIGtlZXBDb3VudCkgewogICAgICAgICB0aGlzLmVwID0gZXA7CiAgICAgICAgIHRoaXMubnVtID0gbnVtT2ZNZXNzYWdlczsKQEAgLTU1LDcgKzU1LDcgQEAKICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CiAKICAgICAgICAgZGVidWcoIkVOVEVSLi4uIik7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAvL01ldGhvZCBvbk1lc3NhZ2UgPSBnZXRPbk1lc3NhZ2VNZXRob2QoKTsKICAgICAgICAgICAgIC8vZXAuYmVmb3JlRGVsaXZlcnkob25NZXNzYWdlKTsKQEAgLTc4LDExICs3OCwxMSBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvL2VwLmFmdGVyRGVsaXZlcnkoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIkxFQVZFLi4uIik7CiAgICAgfQogCkBAIC05MywxNCArOTMsMTQgQEAKICAgICB9CiAKICAgICBwcml2YXRlIE1ldGhvZCBnZXRPbk1lc3NhZ2VNZXRob2QoKSB7Ci0gICAgICAgIAorCiAgICAgICAgIE1ldGhvZCBvbk1lc3NhZ2VNZXRob2QgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ2xhc3MgbXNnTGlzdGVuZXJDbGFzcyA9IGNvbm5lY3Rvci5NeU1lc3NhZ2VMaXN0ZW5lci5jbGFzczsKICAgICAgICAgICAgIENsYXNzW10gcGFyYW1UeXBlcyA9IHsgamF2YS5sYW5nLlN0cmluZy5jbGFzcyB9OwotICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0gCisgICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPQogICAgICAgICAgICAgICAgIG1zZ0xpc3RlbmVyQ2xhc3MuZ2V0TWV0aG9kKCJvbk1lc3NhZ2UiLCBwYXJhbVR5cGVzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhCmluZGV4IDEwMGNhY2UuLmZhOTNmNjMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YQpAQCAtMzYsNyArMzYsNyBAQAogICAgICAgICAgICAgICBmbGFnVG9TdHJpbmcoZmxhZ3MpKTsKICAgICB9CiAKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGZvcmdldChYaWQgeGlkKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2UuZm9yZ2V0OiAiICsgeGlkVG9TdHJpbmcoeGlkKSk7CiAgICAgfQpAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2UucHJlcGFyZTogIiArIHhpZFRvU3RyaW5nKHhpZCkpOwogICAgICAgICByZXR1cm4gWEFSZXNvdXJjZS5YQV9PSzsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgWGlkW10gcmVjb3ZlcihpbnQgZmxhZykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLnJlY292ZXI6ICIgKyBmbGFnVG9TdHJpbmcoZmxhZykpOwogICAgICAgICByZXR1cm4gbnVsbDsKQEAgLTY2LDcgKzY2LDcgQEAKICAgICBwdWJsaWMgYm9vbGVhbiBzZXRUcmFuc2FjdGlvblRpbWVvdXQoaW50IHNlY29uZHMpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzdGFydChYaWQgeGlkLCBpbnQgZmxhZ3MpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5zdGFydDogIiArIHhpZFRvU3RyaW5nKHhpZCkgKyAiLCIgKwogICAgICAgICAgICAgICAgIGZsYWdUb1N0cmluZyhmbGFncykpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvTWVzc2FnZXMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL01lc3NhZ2VzLmphdmEKaW5kZXggYjViMGYwMi4uNGM5YzAxMiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvTWVzc2FnZXMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhCkBAIC0yMSw3ICsyMSw3IEBACiAvKioKICAqIGNvbGxlY3Rpb24gb2YgbWVzc2FnZXMuCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBNZXNzYWdlcyB7CiAKQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICBTdHJpbmcgY29tbWFuZCAgPSBhcmdzWzBdOwogICAgICAgIFN0cmluZyBkZXN0TmFtZSA9IGFyZ3NbMV07CiAgICAgICAgU3RyaW5nIG1lc3NhZ2UgID0gYXJnc1syXTsKLSAgIAorCiAgICAgICAgaWYgKCEiYWRkIi5lcXVhbHMoY29tbWFuZCkpIHsKICAgICAgICAgICAgU3lzdGVtLmV4aXQoMSk7CiAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdC5qYXZhCmluZGV4IDJlNGNmYTguLjIwODYzYTkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEKQEAgLTM5LDEzICszOSwxMyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGluaXRpYWxpemUoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6aW5nIHRoZSBDb250cm9scyB0byBmYWxzZToiK2dldFJlc2V0Q29udHJvbCgpKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXppbmcgdGhlIENvbnRyb2xzIHRvIGZhbHNlOiIrZ2V0UmVzZXRDb250cm9sKCkpOwogICAgICAgICBpZiAoZ2V0UmVzZXRDb250cm9sKCkuZXF1YWxzKCJCRUdJTk5JTkciKSkgewogICAgICAgICAgICAgc3luY2hyb25pemVkIChDb250cm9scy5yZWFkeUxvY2spewogICAgICAgICAgICAgICAgIENvbnRyb2xzLmRvbmU9ZmFsc2U7CiAgICAgICAgICAgICB9Ci0JICAgU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6ZWQgdGhlIENvbnRyb2xzIHRvIGZhbHNlIik7Ci0JfQorICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW015QWRtaW5PYmplY3RdIEluaXRpYWxpemVkIHRoZSBDb250cm9scyB0byBmYWxzZSIpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiBkb25lKCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvTXlXb3JrLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9NeVdvcmsuamF2YQppbmRleCAyZWNlYzYzLi5hOWE4ODgxIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9NeVdvcmsuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9NeVdvcmsuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIE15V29yayBpbXBsZW1lbnRzIFdvcmsgewogCkBAIC0zNSw3ICszNSw3IEBACiAgICAgcHJpdmF0ZSBib29sZWFuIHN0b3AgPSBmYWxzZTsKICAgICBwcml2YXRlIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZmFjdG9yeTsKICAgICBwcml2YXRlIFdvcmtNYW5hZ2VyIHdtOwotICAgIAorCiAgICAgcHVibGljIE15V29yaygKICAgICAgICAgICAgIFN0cmluZyBuYW1lLCBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGZhY3RvcnksIFdvcmtNYW5hZ2VyIHdtKSB7CiAgICAgICAgIHRoaXMuZmFjdG9yeSA9IGZhY3Rvcnk7CkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgICAgICB0cnkgewogCiAgICAgICAgICAgICAgICAgTWV0aG9kIG9uTWVzc2FnZSA9IGdldE9uTWVzc2FnZU1ldGhvZCgpOwotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaXNEZWxpdmVyeVRyYW5zYWN0ZWQgPSAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpc0RlbGl2ZXJ5VHJhbnNhY3RlZCA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3J5LmlzRGVsaXZlcnlUcmFuc2FjdGVkKG9uTWVzc2FnZSkpOwogCiAgICAgICAgICAgICAgICAgLyoKQEAgLTcwLDcgKzcwLDcgQEAKICAgICAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiTEVBVkUuLi4iKTsKICAgICB9CiAKQEAgLTg1LDE0ICs4NSwxNCBAQAogICAgIH0KIAogICAgIHB1YmxpYyBNZXRob2QgZ2V0T25NZXNzYWdlTWV0aG9kKCkgewotICAgICAgICAKKwogICAgICAgICBNZXRob2Qgb25NZXNzYWdlTWV0aG9kID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENsYXNzIG1zZ0xpc3RlbmVyQ2xhc3MgPSBjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIuY2xhc3M7CiAgICAgICAgICAgICBDbGFzc1tdIHBhcmFtVHlwZXMgPSB7IGphdmEubGFuZy5TdHJpbmcuY2xhc3MgfTsKLSAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9IAorICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0KICAgICAgICAgICAgICAgICBtc2dMaXN0ZW5lckNsYXNzLmdldE1ldGhvZCgib25NZXNzYWdlIiwgcGFyYW1UeXBlcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YQppbmRleCA1MTJlNWM2Li40YjVlNWYxIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEKQEAgLTI1LDEyICsyNSwxMiBAQAogICogc28gdGhhdCB0aGUgYXBwIHNlcnZlciBjYW4gaW5zdGFudGlhdGUgYW5kIGNvbmZpZ3VyZQogICogaXQgYXQgdGhlIHJ1bnRpbWUuCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIEBBY3RpdmF0aW9uKAogICAgICAgICBtZXNzYWdlTGlzdGVuZXJzID0ge2Nvbm5lY3Rvci5NeU1lc3NhZ2VMaXN0ZW5lci5jbGFzc30KICkKLXB1YmxpYyBjbGFzcyBTaW1wbGVBY3RpdmF0aW9uU3BlYyAKK3B1YmxpYyBjbGFzcyBTaW1wbGVBY3RpdmF0aW9uU3BlYwogICAgIGltcGxlbWVudHMgQWN0aXZhdGlvblNwZWMsIGphdmEuaW8uU2VyaWFsaXphYmxlIHsKIAogICAgIHByaXZhdGUgU3RyaW5nIGRlc3RpbmF0aW9uTmFtZTsKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldERlc3RpbmF0aW9uTmFtZSAoKSB7CiAgICAgICAgIHJldHVybiB0aGlzLmRlc3RpbmF0aW9uTmFtZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXREZXN0aW5hdGlvbk5hbWUgKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIGRlYnVnKCJzZXREZXN0aW5hdGlvbk5hbWUoKSBjYWxsZWQuLi4gbmFtZSA9ICIgKyBuYW1lKTsKICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbk5hbWUgPSBuYW1lOwpAQCAtNTYsNyArNTYsNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzdGluYXRpb25UeXBlKCkgewogICAgICAgICByZXR1cm4gdGhpcy5kZXN0aW5hdGlvblR5cGU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0RGVzdGluYXRpb25UeXBlIChTdHJpbmcgdHlwZSkgewogICAgICAgICBkZWJ1Zygic2V0RGVzdGluYXRpb25UeXBlICgpIGNhbGxlZC4uLiB0eXBlID0gIiArIHR5cGUpOwogICAgICAgICB0aGlzLmRlc3RpbmF0aW9uVHlwZT0gdHlwZTsKQEAgLTY1LDcgKzY1LDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldFRlc3RQcm9wKCkgewogICAgICAgICByZXR1cm4gdGhpcy50ZXN0UHJvcDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRUZXN0UHJvcCAoU3RyaW5nIHRlc3RQcm9wKSB7CiAgICAgICAgIGRlYnVnKCJzZXRUZXN0UHJvcCAoKSBjYWxsZWQuLi4gdGVzdFByb3AgPSAiICsgdGVzdFByb3ApOwogICAgICAgICB0aGlzLnRlc3RQcm9wID0gdGVzdFByb3A7CkBAIC03NCw3ICs3NCw3IEBACiAgICAgcHVibGljIEludGVnZXIgZ2V0VGVzdEludGVnZXJQcm9wKCkgewogICAgICAgICByZXR1cm4gdGhpcy50ZXN0SW50ZWdlclByb3A7CiAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0VGVzdEludGVnZXJQcm9wIChJbnRlZ2VyIHRlc3RQcm9wMSkgewogICAgICAgICBkZWJ1Zygic2V0VGVzdEludGVnZXJQcm9wICgpIGNhbGxlZC4uLiB0ZXN0SW50ZWdlclByb3AgPSAiICsgdGVzdFByb3AxKTsKICAgICAgICAgdGhpcy50ZXN0SW50ZWdlclByb3AgPSB0ZXN0UHJvcDE7CkBAIC05OCw3ICs5OCw3IEBACiAKICAgICAgIH0KIAotICAgfSAKKyAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBkZWJ1ZyAoU3RyaW5nIG1lc3NhZ2UpCiAgICAgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbC5qYXZhCmluZGV4IDE5YTVlNGQuLjEzMzRiN2QgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEKQEAgLTM1LDcgKzM1LDcgQEAKIC8qKgogICogVGhpcyBpcyBhIHNhbXBsZSByZXNvdXJjZSBhZGFwdGVyCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIEBDb25uZWN0b3IoCiAgICAvKm1vZHVsZU5hbWU9Ik15IFNpbXBsZSBSQVIiLCovCkBAIC00NCw3ICs0NCw3IEBACiAgICBlaXNUeXBlID0gIkdlbmVyaWMgVHlwZSIsCiAgICB2ZXJzaW9uID0gIjEuMEFscGhhIgogKQotcHVibGljIGNsYXNzIFNpbXBsZVJlc291cmNlQWRhcHRlckltcGwgZXh0ZW5kcyBBYnN0cmFjdFJlc291cmNlQWRhcHRlciAKK3B1YmxpYyBjbGFzcyBTaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsIGV4dGVuZHMgQWJzdHJhY3RSZXNvdXJjZUFkYXB0ZXIKIGltcGxlbWVudHMgUmVzb3VyY2VBZGFwdGVyLCBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7CiAKICAgICBwcml2YXRlIEJvb3RzdHJhcENvbnRleHQgY3R4OwpAQCAtNTgsNyArNTgsNyBAQAogCiAgICAgcHVibGljIHZvaWQKICAgICBzdGFydChCb290c3RyYXBDb250ZXh0IGN0eCkgdGhyb3dzIFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uewotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiMDAxLiBTaW1wbGUgUkEgc3RhcnQuLi4iKTsKIAogICAgICAgICB0aGlzLmN0eCA9IGN0eDsKQEAgLTY4LDEyICs2OCwxMiBAQAogCiAgICAgICAgIC8vdGVzdGluZyBjcmVhdCB0aW1lcgogICAgICAgICBUaW1lciB0aW1lciA9IG51bGw7Ci0JICB0cnl7Ci0JICAgICAgdGltZXIgPSBjdHguY3JlYXRlVGltZXIoKTsKLQkgIH0gY2F0Y2goVW5hdmFpbGFibGVFeGNlcHRpb24gdWUpIHsKLQkgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIik7Ci0JICAgICAgdGhyb3cgbmV3IFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uKCJFcnJvciBmb3JtIGJvb3RzdHJhcCIpOwotCSAgfQorICAgICAgdHJ5eworICAgICAgICAgIHRpbWVyID0gY3R4LmNyZWF0ZVRpbWVyKCk7CisgICAgICB9IGNhdGNoKFVuYXZhaWxhYmxlRXhjZXB0aW9uIHVlKSB7CisgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFcnJvciIpOworICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbigiRXJyb3IgZm9ybSBib290c3RyYXAiKTsKKyAgICAgIH0KICAgICAgICAgZGVidWcoIjAwNC4gU2ltcGxlIFJBIHN0YXJ0Li4uIik7CiAgICAgICAgIGRlYnVnKCIwMDUuIFNpbXBsZSBSQSBzdGFydC4uLiIpOwogICAgIH0KQEAgLTEwOCwxNSArMTA4LDE1IEBACiAKICAgICBwdWJsaWMgdm9pZAogICAgIGVuZHBvaW50RGVhY3RpdmF0aW9uICgKLSAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZW5kcG9pbnRGYWN0b3J5LCAKKyAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZW5kcG9pbnRGYWN0b3J5LAogICAgICAgICAgICAgQWN0aXZhdGlvblNwZWMgc3BlYykgewogICAgICAgICBkZWJ1ZyAoImVuZHBvaW50RGVhY3RpdmF0aW9uIGNhbGxlZC4uLiIpOwotICAgICAgICAKKwogICAgICAgICAoKFdvcmtEaXNwYXRjaGVyKSB3b3JrKS5zdG9wKCk7CiAgICAgfQotICAKIAotICAgIHB1YmxpYyBYQVJlc291cmNlW10gZ2V0WEFSZXNvdXJjZXMoQWN0aXZhdGlvblNwZWNbXSBzcGVjcykgCisKKyAgICBwdWJsaWMgWEFSZXNvdXJjZVtdIGdldFhBUmVzb3VyY2VzKEFjdGl2YXRpb25TcGVjW10gc3BlY3MpCiAgICAgICAgIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1Rlc3RXTVdvcmsuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1Rlc3RXTVdvcmsuamF2YQppbmRleCBiYjA1NTM0Li5kZTkzYmMxIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9UZXN0V01Xb3JrLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvVGVzdFdNV29yay5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgVGVzdFdNV29yayBpbXBsZW1lbnRzIFdvcmsgewogCkBAIC00Miw4ICs0Miw4IEBACiAgICAgcHVibGljIFRlc3RXTVdvcmsoaW50IGlkLCBib29sZWFuIGlzUm9ndWUpIHsKICAgICAgICAgdGhpcyhpZCwgaXNSb2d1ZSwgZmFsc2UsIG51bGwpOwogICAgIH0KLSAgICAKLSAgICBwdWJsaWMgVGVzdFdNV29yayhpbnQgaWQsIGJvb2xlYW4gaXNSb2d1ZSwgCisKKyAgICBwdWJsaWMgVGVzdFdNV29yayhpbnQgaWQsIGJvb2xlYW4gaXNSb2d1ZSwKICAgICAgICAgICAgIGJvb2xlYW4gZG9OZXN0LCBFeGVjdXRpb25Db250ZXh0IGN0eCkgewogICAgICAgICB0aGlzLmlkID0gaWQ7CiAgICAgICAgIHRoaXMuaXNSb2d1ZSA9IGlzUm9ndWU7CkBAIC03NywxMCArNzcsMTAgQEAKICAgICAgICAgICAgIH0gY2F0Y2ggKFdvcmtFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgICAgICBpZiAoZXguZ2V0RXJyb3JDb2RlKCkuZXF1YWxzKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdvcmtFeGNlcHRpb24uVFhfQ09OQ1VSUkVOVF9XT1JLX0RJU0FMTE9XRUQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsgCisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUEFTUzogQ0FVR0hUIEVYUEVDVEVEID0gIiArIGV4LmdldEVycm9yQ29kZSgpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArIAorICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZBSUw6IENBVUdIVCBVTkVYUEVDVEVEID0gIiArIGV4LmdldEVycm9yQ29kZSgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC05Miw3ICs5Miw3IEBACiAgICAgICAgICAgICAgICAgZWMuc2V0VHJhbnNhY3Rpb25UaW1lb3V0KDUqMTAwMCk7IC8vNSBzZWNvbmRzCiAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKG5lc3RlZFdvcmssIDEqMTAwMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAiRkFJTDogQ0FVR0hUIFVORVhQRUNURUQgPSAiICsgZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvVjNXb3JrRGlzcGF0Y2hlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvVjNXb3JrRGlzcGF0Y2hlci5qYXZhCmluZGV4IDhhZGYzY2MuLjRiNDM3ODMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1YzV29ya0Rpc3BhdGNoZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9WM1dvcmtEaXNwYXRjaGVyLmphdmEKQEAgLTQzLDcgKzQzLDcgQEAKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50IGVwID0gZmFjdG9yeS5jcmVhdGVFbmRwb2ludChuZXcgRmFrZVhBUmVzb3VyY2UoKSk7CiAgICAgICAgICAgICBpbnQgbnVtT2ZNZXNzYWdlcyA9IDE7CkBAIC03Miw3ICs3Miw3IEBACiAgICAgICAgICAgICBkZWJ1ZygiVjNXb3JrRGlzcGF0Y2hlciBjYWxsaW5nIERPTkUoKSIpOwogICAgICAgICAgICAgZG9uZSgpOwogICAgICAgICAgICAgZGVidWcoIlYzV29ya0Rpc3BhdGNoZXIgZmluaXNoZWQgY2FsbGluZyBET05FKCkiKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQppbmRleCA2NGI3MWM0Li43NjJlMDNlIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEKQEAgLTMzLDcgKzMzLDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBXb3JrRGlzcGF0Y2hlciBpbXBsZW1lbnRzIFdvcmsgewogCkBAIC00NCwxMSArNDQsMTEgQEAKICAgICBwcm90ZWN0ZWQgQWN0aXZhdGlvblNwZWMgc3BlYzsKICAgICBwcm90ZWN0ZWQgV29ya01hbmFnZXIgd207CiAgICAgcHJvdGVjdGVkIFhBVGVybWluYXRvciB4YTsKLSAgICAKKwogICAgIHB1YmxpYyBXb3JrRGlzcGF0Y2hlcigKICAgICAgICAgICAgIFN0cmluZyBpZCwKICAgICAgICAgICAgIEJvb3RzdHJhcENvbnRleHQgY3R4LAotICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBmYWN0b3J5LCAKKyAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZmFjdG9yeSwKICAgICAgICAgICAgIEFjdGl2YXRpb25TcGVjIHNwZWMpIHsKICAgICAgICAgdGhpcy5pZCAgICAgID0gaWQ7CiAgICAgICAgIHRoaXMuY3R4ICAgICA9IGN0eDsKQEAgLTYxLDcgKzYxLDcgQEAKICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CiAKICAgICAgICAgZGVidWcoIkVOVEVSLi4uIik7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKENvbnRyb2xzLnJlYWR5TG9jaykgewogICAgICAgICAgICAgICAgIGRlYnVnKCJXQUlULi4uIik7CkBAIC04MywyNiArODMsMjYgQEAKICAgICAgICAgICAgIHRyeSB7CiAKICAgICAgICAgICAgICAgICBNZXRob2Qgb25NZXNzYWdlID0gZ2V0T25NZXNzYWdlTWV0aG9kKCk7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpc0RlbGl2ZXJ5VHJhbnNhY3RlZCA9ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlzRGVsaXZlcnlUcmFuc2FjdGVkID0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3J5LmlzRGVsaXZlcnlUcmFuc2FjdGVkKG9uTWVzc2FnZSkpOwogCiAgICAgICAgICAgICAgICAgaWYgKCFmYWN0b3J5LmlzRGVsaXZlcnlUcmFuc2FjdGVkKG9uTWVzc2FnZSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy9NZXNzYWdlRW5kcG9pbnQgZXAgPSBmYWN0b3J5LmNyZWF0ZUVuZHBvaW50KG51bGwpOwotICAgICAgICAgICAgICAgICAgICAvL0RlbGl2ZXJ5V29yayBkID0gbmV3IERlbGl2ZXJ5V29yaygiTk9fVFgiLCBlcCk7IAorICAgICAgICAgICAgICAgICAgICAvL0RlbGl2ZXJ5V29yayBkID0gbmV3IERlbGl2ZXJ5V29yaygiTk9fVFgiLCBlcCk7CiAgICAgICAgICAgICAgICAgICAgIC8vd20uZG9Xb3JrKGQsIDAsIG51bGwsIG51bGwpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vTWVzc2FnZUVuZHBvaW50IGVwID0gZmFjdG9yeS5jcmVhdGVFbmRwb2ludChudWxsKTsKICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50IGVwID0gZmFjdG9yeS5jcmVhdGVFbmRwb2ludChuZXcgRmFrZVhBUmVzb3VyY2UoKSk7CiAgICAgICAgICAgICAgICAgICAgIGludCBudW1PZk1lc3NhZ2VzID0gNTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy9pbXBvcnRpbmcgdHJhbnNhY3Rpb24KIAogICAgICAgICAgICAgICAgICAgICAvL3dyaXRlL2NvbW1pdAogICAgICAgICAgICAgICAgICAgICBFeGVjdXRpb25Db250ZXh0IGVjID0gc3RhcnRUeCgpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiU3RhcnQgVFggLSAiICsgZWMuZ2V0WGlkKCkpOwogCi0gICAgICAgICAgICAgICAgICAgIERlbGl2ZXJ5V29yayB3ID0gCisgICAgICAgICAgICAgICAgICAgIERlbGl2ZXJ5V29yayB3ID0KICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEZWxpdmVyeVdvcmsoZXAsIG51bU9mTWVzc2FnZXMsICJXUklURSIpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIHRydWUpOwpAQCAtMTEwLDcgKzExMCw3IEBACiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJET05FIFdSSVRFIFRPIERCIik7CiAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xzLmV4cGVjdGVkUmVzdWx0cyA9IG51bU9mTWVzc2FnZXM7CiAgICAgICAgICAgICAgICAgICAgIG5vdGlmeUFuZFdhaXQoKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy9kZWxldGUvcm9sbGJhY2sKICAgICAgICAgICAgICAgICAgICAgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7CkBAIC0xMjYsNyArMTI2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgLy9kZWxldGUvY29tbWl0CiAgICAgICAgICAgICAgICAgICAgIGVjID0gc3RhcnRUeCgpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiU3RhcnQgVFggLSAiICsgZWMuZ2V0WGlkKCkpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICB3ID0gbmV3IERlbGl2ZXJ5V29yayhlcCwgbnVtT2ZNZXNzYWdlcywgIkRFTEVURSIpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIHRydWUpOwpAQCAtMTUwLDcgKzE1MCw3IEBACiAgICAgICAgICAgICAgICAgICAgIC8vZGVsZXRlL2NvbW1pdAogICAgICAgICAgICAgICAgICAgICBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgdyA9IG5ldyBEZWxpdmVyeVdvcmsoZXAsIG51bU9mTWVzc2FnZXMsICJERUxFVEUiKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgeGEuY29tbWl0KGVjLmdldFhpZCgpLCB0cnVlKTsKQEAgLTE5NSw3ICsxOTUsNyBAQAogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBpZiAoWEFSZXNvdXJjZS5YQV9PSyA9PSB4YS5wcmVwYXJlKGVjLmdldFhpZCgpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgeGEuY29tbWl0KGVjLmdldFhpZCgpLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiWEEgUFJFUEFSRS9DT01NSVQuIERPTkUgV1JJVEUgVE8gREIgIik7CkBAIC0yMDcsMTkgKzIwNywxOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMuZXhwZWN0ZWRSZXN1bHRzID0gMzsKICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeUFuZFdhaXQoKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvL2RlbGV0ZSBhbGwuCiAgICAgICAgICAgICAgICAgICAgIGVjID0gc3RhcnRUeCgpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiU3RhcnQgVFggLSAiICsgZWMuZ2V0WGlkKCkpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICB3ID0gbmV3IERlbGl2ZXJ5V29yayhlcCwgMSwgIkRFTEVURV9BTEwiKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgeGEuY29tbWl0KGVjLmdldFhpZCgpLCB0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIkRPTkUgREVMRVRFIEFMTCBGUk9NIERCIik7CiAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xzLmV4cGVjdGVkUmVzdWx0cyA9IDA7CiAgICAgICAgICAgICAgICAgICAgIG5vdGlmeUFuZFdhaXQoKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgZG9uZSgpOwogICAgICAgICAgICAgICAgIH0KIApAQCAtMjQ2LDcgKzI0Niw3IEBACiAgICAgICAgICAgICAgICAgZG9uZSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCJMRUFWRS4uLiIpOwogICAgIH0KIApAQCAtMjYxLDE0ICsyNjEsMTQgQEAKICAgICB9CiAKICAgICBwdWJsaWMgTWV0aG9kIGdldE9uTWVzc2FnZU1ldGhvZCgpIHsKLSAgICAgICAgCisKICAgICAgICAgTWV0aG9kIG9uTWVzc2FnZU1ldGhvZCA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDbGFzcyBtc2dMaXN0ZW5lckNsYXNzID0gY29ubmVjdG9yLk15TWVzc2FnZUxpc3RlbmVyLmNsYXNzOwogICAgICAgICAgICAgQ2xhc3NbXSBwYXJhbVR5cGVzID0geyBqYXZhLmxhbmcuU3RyaW5nLmNsYXNzIH07Ci0gICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPSAKKyAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9CiAgICAgICAgICAgICAgICAgbXNnTGlzdGVuZXJDbGFzcy5nZXRNZXRob2QoIm9uTWVzc2FnZSIsIHBhcmFtVHlwZXMpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQpAQCAtMjkxLDEzICsyOTEsMTMgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIC8vU2xlZXAgZm9yIDUgc2Vjb25kcwogICAgICAgICAgICAgLy9UaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDUqMTAwMCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgc3luY2hyb25pemVkKENvbnRyb2xzLnJlYWR5TG9jaykgewogICAgICAgICAgICAgICAgIC8vTm90aWZ5IHRoZSBjbGllbnQgdG8gY2hlY2sgdGhlIHJlc3VsdHMKLSAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2subm90aWZ5QWxsKCk7IAorICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay5ub3RpZnlBbGwoKTsKIAogICAgICAgICAgICAgICAgIC8vV2FpdCB1bnRpbCByZXN1bHRzIGFyZSB2ZXJpZmllZCBieSB0aGUgY2xpZW50Ci0gICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLndhaXQoKTsgCisgICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLndhaXQoKTsKIAogICAgICAgICAgICAgICAgIGlmIChzdG9wKSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWNvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEKaW5kZXggNzdkYmYzNC4uNmJkOWU1NyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEKQEAgLTM2LDggKzM2LDggQEAKICAgICBwdWJsaWMgaW50IGJyYW5jaFF1YWxpZmllcjsKICAgICBwdWJsaWMgaW50IGdsb2JhbFR4SUQ7CiAKLSAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYR1RSSURTSVpFPSA2NDsgCi0gICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEJRVUFMU0laRT0gNjQ7IAorICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhHVFJJRFNJWkU9IDY0OworICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhCUVVBTFNJWkU9IDY0OwogCiAgICAgcHVibGljIFhJRCgpIHsKICAgICAgICAgaW50IGZvbyA9IElEKys7CkBAIC01NSwxMCArNTUsMTAgQEAKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgICAgICAgICAgICAgICAgIC8vIEl0IGNhbid0IGJlIGVxdWFsCiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgb3RoZXIgPSAoWElEKW87ICAgICAgICAgICAgICAgICAgIC8vIFRoZSBvdGhlciBYSUQsIG5vdyBwcm9wZXJseSBjYXN0Ci0gICAgICAgIAotICAgICAgICBpZiAodGhpcy5mb3JtYXRJRCA9PSBvdGhlci5mb3JtYXRJRCAKKworICAgICAgICBpZiAodGhpcy5mb3JtYXRJRCA9PSBvdGhlci5mb3JtYXRJRAogICAgICAgICAgICAgICAgICYmIHRoaXMuYnJhbmNoUXVhbGlmaWVyID09IG90aGVyLmJyYW5jaFF1YWxpZmllcgogICAgICAgICAgICAgICAgICYmIHRoaXMuZ2xvYmFsVHhJRCA9PSBvdGhlci5nbG9iYWxUeElEKSB7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTk4LDcgKzk4LDcgQEAKICAgICAgICAgICAgICAgICAiZm9ybWF0SUQoIiAgICAgKyBmb3JtYXRJRCAgICAgKyAiKSwgIiArCiAgICAgICAgICAgICAgICAgImJyYW5jaFF1YWxpZmllciAoIiArIGJyYW5jaFF1YWxpZmllciArICIpLCAiICsKICAgICAgICAgICAgICAgICAiZ2xvYmFsVHhJRCgiICsgZ2xvYmFsVHhJRCArICIpfSIpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gczsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGE0MDQzMTkuLjI0ODZhMmQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1hbm5vdGF0aW9uLXN1YmNsYXNzaW5nIi8+CkBAIC0yNCw3ICsyNCw3IEBACiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9ImFubm90YXRpb24tc3ViY2xhc3NpbmciLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL2J1aWxkLnhtbAppbmRleCA5ZDNlZTM3Li5mYTRjYWZlIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvYnVpbGQueG1sCkBAIC0zMiw3ICszMiw3IEBACiAgICAgJmNvbW1vbkJ1aWxkOwogICAgICZjb21tb25SdW47CiAgICAgJnRlc3Rwcm9wZXJ0aWVzOwotICAgIAorCiA8IS0tCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLHNldHVwLGRlcGxveS13YXIsIHJ1bi13YXIsIHVuZGVwbG95LXdhciwgZGVwbG95LWVhciwgcnVuLWVhciwgdW5kZXBsb3ktZWFyLCB1bnNldHVwIi8+CiAKQEAgLTQxLDE1ICs0MSwxNSBAQAogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCwgZGlzYWJsZS1yZXNvdXJjZS12YWxpZGF0aW9uLCBkZXBsb3ktZWFyLCBzZXR1cCwgcnVuLWVhciwgdW5zZXR1cCwgdW5kZXBsb3ktZWFyLCBlbmFibGUtcmVzb3VyY2UtdmFsaWRhdGlvbiIvPgogCiA8IS0tCi0JPGFudGNhbGwgdGFyZ2V0PSJidWlsZCIvPgotCTxhbnRjYWxsIHRhcmdldD0ic2V0dXAiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXIiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InJ1bi13YXIiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhciIvPgotCTxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWVhciIvPgotCTxhbnRjYWxsIHRhcmdldD0icnVuLWVhciIvPgotCTxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktZWFyIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJ1bnNldHVwIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZCIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0dXAiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXIiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi13YXIiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhciIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWVhciIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLWVhciIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktZWFyIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bnNldHVwIi8+CiAgICAgPC90YXJnZXQ+CiAtLT4KIApAQCAtNTcsNyArNTcsNyBAQAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICAgIDxhbnQgZGlyPSJyYSIgdGFyZ2V0PSJjbGVhbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb25uZWN0b3IiPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvc2ltcGxlQmFuay5zcWwiLz4KQEAgLTY1LDM2ICs2NSwzNiBAQAogICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLXBvb2wiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1yZXNvdXJjZSIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWFkbWluLW9iamVjdCIvPgotICAgICAgICAKKwogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLXBvb2wiPgogICAgICAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWNvbm5lY3Rvci1jb25ucG9vbC1jb21tb24iPgogICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJyYS5uYW1lIiB2YWx1ZT0iJHthcHBuYW1lfUFwcCNqZGJjcmEiLz4KICAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iY29ubmVjdGlvbi5kZWZuYW1lIiB2YWx1ZT0iamF2YXguc3FsLkRhdGFTb3VyY2UiLz4KLQkJICAgIDxwYXJhbSBuYW1lPSJleHRyYS1wYXJhbXMiIHZhbHVlPSItLW1hdGNoY29ubmVjdGlvbnM9ZmFsc2UiLz4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJleHRyYS1wYXJhbXMiIHZhbHVlPSItLW1hdGNoY29ubmVjdGlvbnM9ZmFsc2UiLz4KICAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iY29ubmVjdG9yLmNvbnBvb2wubmFtZSIgdmFsdWU9ImVtYmVkZGVkLXJhLXBvb2wiLz4KICAgICAgICAgICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXQtb3JhY2xlLXByb3BzIj4KLQkJPHBhcmFtIG5hbWU9InBvb2wudHlwZSIgdmFsdWU9ImNvbm5lY3RvciIvPgotCQk8cGFyYW0gbmFtZT0iY29ucG9vbC5uYW1lIiB2YWx1ZT0iZW1iZWRkZWQtcmEtcG9vbCIvPgotCQk8L2FudGNhbGw+CisgICAgICAgIDxwYXJhbSBuYW1lPSJwb29sLnR5cGUiIHZhbHVlPSJjb25uZWN0b3IiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImNvbnBvb2wubmFtZSIgdmFsdWU9ImVtYmVkZGVkLXJhLXBvb2wiLz4KKyAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJkaXNhYmxlLXJlc291cmNlLXZhbGlkYXRpb24iPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qdm0tb3B0aW9ucyI+Ci0JCTxwYXJhbSBuYW1lPSJvcHRpb24iIHZhbHVlPSItRGRlcGxveW1lbnQucmVzb3VyY2UudmFsaWRhdGlvbj1mYWxzZSIvPgotCQk8L2FudGNhbGw+Ci0JCTxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXIiLz4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9ImRpc2FibGUtcmVzb3VyY2UtdmFsaWRhdGlvbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWp2bS1vcHRpb25zIj4KKyAgICAgICAgPHBhcmFtIG5hbWU9Im9wdGlvbiIgdmFsdWU9Ii1EZGVwbG95bWVudC5yZXNvdXJjZS52YWxpZGF0aW9uPWZhbHNlIi8+CisgICAgICAgIDwvYW50Y2FsbD4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXNlcnZlciIvPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJlbmFibGUtcmVzb3VyY2UtdmFsaWRhdGlvbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWp2bS1vcHRpb25zIj4KLQkJPHBhcmFtIG5hbWU9Im9wdGlvbiIgdmFsdWU9Ii1EZGVwbG95bWVudC5yZXNvdXJjZS52YWxpZGF0aW9uPWZhbHNlIi8+Ci0JCTwvYW50Y2FsbD4KLQkJPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXNlcnZlciIvPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0iZW5hYmxlLXJlc291cmNlLXZhbGlkYXRpb24iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qdm0tb3B0aW9ucyI+CisgICAgICAgIDxwYXJhbSBuYW1lPSJvcHRpb24iIHZhbHVlPSItRGRlcGxveW1lbnQucmVzb3VyY2UudmFsaWRhdGlvbj1mYWxzZSIvPgorICAgICAgICA8L2FudGNhbGw+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXIiLz4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iY3JlYXRlLXJlc291cmNlIj4KKyAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1yZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtY29ubmVjdG9yLXJlc291cmNlLWNvbW1vbiI+CiAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImNvbm5lY3Rvci5jb25wb29sLm5hbWUiIHZhbHVlPSJlbWJlZGRlZC1yYS1wb29sIi8+CiAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImNvbm5lY3Rvci5qbmRpLm5hbWUiIHZhbHVlPSJqZGJjL2VqYi1hbm5vdGF0aW9uLXN1YmNsYXNzaW5nIi8+CkBAIC0xMDUsMTggKzEwNSwxOCBAQAogICAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1hZG1pbi1vYmplY3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJjcmVhdGUtYWRtaW4tb2JqZWN0IC0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9IC0tcmVzdHlwZSBjb20uc3VuLmpkYmNyYS5zcGkuSmRiY1NldHVwQWRtaW4gLS1yYW5hbWUgJHthcHBuYW1lfUFwcCNqZGJjcmEgLS1wcm9wZXJ0eSBUYWJsZU5hbWU9Y3VzdG9tZXIyOkpuZGlOYW1lPWpkYmMvZWpiLWFubm90YXRpb24tc3ViY2xhc3Npbmc6U2NoZW1hTmFtZT1EQlVTRVI6Tm9PZlJvd3M9MSIvPgotCSAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9ImVpcy9qZGJjQWRtaW4iLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSJlaXMvamRiY0FkbWluIi8+CiAgICAgICAgICA8L2FudGNhbGw+CiAgICAgIDwvdGFyZ2V0PgogCiAgICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLWFkbWluLW9iamVjdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+Ci0JICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0iZGVsZXRlLWFkbWluLW9iamVjdCIvPgotCSAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9IGVpcy9qZGJjQWRtaW4iLz4KLQkgPC9hbnRjYWxsPgotCSA8IS0tPGFudGNhbGwgdGFyZ2V0PSJyZWNvbmZpZy1jb21tb24iLz4tLT4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJkZWxldGUtYWRtaW4tb2JqZWN0Ii8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0gZWlzL2pkYmNBZG1pbiIvPgorICAgICA8L2FudGNhbGw+CisgICAgIDwhLS08YW50Y2FsbCB0YXJnZXQ9InJlY29uZmlnLWNvbW1vbiIvPi0tPgogICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmVzdGFydCI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXNlcnZlci1pbnN0YW5jZS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTEyNCwxNiArMTI0LDE2IEBACiAgICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLXJhLWNvbmZpZyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9ImNyZWF0ZS1yZXNvdXJjZS1hZGFwdGVyLWNvbmZpZyAgLS1wcm9wZXJ0eSBSQVByb3BlcnR5PVZBTElEIi8+Ci0JICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHthcHBuYW1lfUFwcCNqZGJjcmEiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke2FwcG5hbWV9QXBwI2pkYmNyYSIvPgogICAgICAgICAgPC9hbnRjYWxsPgogICAgICA8L3RhcmdldD4KIAogICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yYS1jb25maWciIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgotCSAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9ImRlbGV0ZS1yZXNvdXJjZS1hZGFwdGVyLWNvbmZpZyIvPgotCSAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7YXBwbmFtZX1BcHAjamRiY3JhIi8+Ci0JIDwvYW50Y2FsbD4KLQkgPCEtLTxhbnRjYWxsIHRhcmdldD0icmVjb25maWctY29tbW9uIi8+LS0+CisgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0iZGVsZXRlLXJlc291cmNlLWFkYXB0ZXItY29uZmlnIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHthcHBuYW1lfUFwcCNqZGJjcmEiLz4KKyAgICAgPC9hbnRjYWxsPgorICAgICA8IS0tPGFudGNhbGwgdGFyZ2V0PSJyZWNvbmZpZy1jb21tb24iLz4tLT4KICAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVuc2V0dXAiPgpAQCAtMTQ1LDcgKzE0NSw3IEBACiAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtcG9vbCIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWFkbWluLW9iamVjdCIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcG9vbCI+CiAgICAgICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtY29ubmVjdG9yLWNvbm5wb29sLWNvbW1vbiI+CiAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImNvbm5lY3Rvci5jb25wb29sLm5hbWUiIHZhbHVlPSJlbWJlZGRlZC1yYS1wb29sIi8+CkBAIC0xNTUsNyArMTU1LDcgQEAKICAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2UiPgogICAgICAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWNvbm5lY3Rvci1yZXNvdXJjZS1jb21tb24iPgogICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJjb25uZWN0b3Iuam5kaS5uYW1lIiB2YWx1ZT0iamRiYy9lamItYW5ub3RhdGlvbi1zdWJjbGFzc2luZyIvPgotCQk8L2FudGNhbGw+CisgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgpAQCAtMTcxLDkgKzE3MSw5IEBACiAgICAgICA8ZWNobyBtZXNzYWdlPSJjb21tb24ueG1sOiBDb21waWxpbmcgdGVzdCBzb3VyY2UgZmlsZXMiIGxldmVsPSJ2ZXJib3NlIi8+CiAgICAgICA8amF2YWMgc3JjZGlyPSJzZXJ2bGV0IgogICAgICAgICAgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCi0JIGNsYXNzcGF0aD0iJHtzMWFzdGVzdC5jbGFzc3BhdGh9OnJhL3B1Ymxpc2gvaW50ZXJuYWwvY2xhc3NlcyIKKyAgICAgY2xhc3NwYXRoPSIke3MxYXN0ZXN0LmNsYXNzcGF0aH06cmEvcHVibGlzaC9pbnRlcm5hbC9jbGFzc2VzIgogICAgICAgICAgZGVidWc9Im9uIgotCSBmYWlsb25lcnJvcj0idHJ1ZSIvPgorICAgICBmYWlsb25lcnJvcj0idHJ1ZSIvPgogICAgICA8L3RhcmdldD4KIAogCkBAIC0xODIsMzcgKzE4MiwzNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSwgYnVpbGQtcmEiPgotICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgIDxhbnQgZGlyPSJyYSIgdGFyZ2V0PSJhc3NlbWJsZSIvPgogCiAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgPC9hbnRjYWxsPgotICAgICAgIAorCiAgICAgPGFudGNhbGwgdGFyZ2V0PSJlamItamFyLWNvbW1vbiI+CiAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgIDwvYW50Y2FsbD4KIAotICAgIAorCiAgICAgPGRlbGV0ZSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS5lYXIiLz4KICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KLSAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPiAgICAKLSAgICA8ZWFyIGVhcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIgCisgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KKyAgICA8ZWFyIGVhcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIKICAgICAgYXBweG1sPSIke2FwcGxpY2F0aW9uLnhtbH0iPgogICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KICAgICAgIDxpbmNsdWRlIG5hbWU9IiouamFyIi8+CiAgICAgICA8aW5jbHVkZSBuYW1lPSIqLndhciIvPgotICAgIDwvZmlsZXNldD4gIAorICAgIDwvZmlsZXNldD4KICAgICA8ZmlsZXNldCBkaXI9InJhL3B1Ymxpc2gvbGliIj4KICAgICAgIDxpbmNsdWRlIG5hbWU9IioucmFyIi8+CiAgICAgPC9maWxlc2V0PgogICAgIDwvZWFyPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3ktZWFyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLXBhc3N3b3JkLWFsaWFzIj4gCisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLXBhc3N3b3JkLWFsaWFzIj4KICAgICAgICAgIDxwYXJhbSBuYW1lPSJwYXNzd29yZC5hbGlhcy5uYW1lIiB2YWx1ZT0iQUxJQVNfVEVTVF9QUk9QRVJUWSIvPgogICAgICAgICAgPHBhcmFtIG5hbWU9InBhc3N3b3JkLmFsaWFzLmZpbGUiIHZhbHVlPSJhbGlhc3Bhc3N3b3JkLnR4dCIvPgogICAgICAgICA8L2FudGNhbGw+CkBAIC0yMjMsMzAgKzIyMywzMCBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95LXdhciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi13YXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW53ZWJjbGllbnQtY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0idGVzdHN1aXRlLmlkIiB2YWx1ZT0iYW5ub3RhdGlvbi1lbWJlZGRlZHdlYiAoc3RhbmQtYWxvbmUgd2FyIGJhc2VkKSIvPgotCTwvYW50Y2FsbD4KKyAgICA8cGFyYW0gbmFtZT0idGVzdHN1aXRlLmlkIiB2YWx1ZT0iYW5ub3RhdGlvbi1lbWJlZGRlZHdlYiAoc3RhbmQtYWxvbmUgd2FyIGJhc2VkKSIvPgorICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuLWVhciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bndlYmNsaWVudC1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJhbm5vdGF0aW9uLWVtYmVkZGVkd2ViIChlYXIgYmFzZWQpIi8+Ci0JPC9hbnRjYWxsPgorICAgIDxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJhbm5vdGF0aW9uLWVtYmVkZGVkd2ViIChlYXIgYmFzZWQpIi8+CisgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveS1lYXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtcmEtY29uZmlnIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLXBhc3N3b3JkLWFsaWFzIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0icGFzc3dvcmQuYWxpYXMubmFtZSIgdmFsdWU9IkFMSUFTX1RFU1RfUFJPUEVSVFkiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95LXdhciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAppbmRleCA4OGYxYzAyLi40ZTAxMDRlIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbApAQCAtMjksMjAgKzI5LDIwIEBACiAgICAgICAgIDxyZXMtcmVmLW5hbWU+amRiYy9TaW1wbGVCYW5rPC9yZXMtcmVmLW5hbWU+CiAgICAgICAgIDxqbmRpLW5hbWU+amRiYy9lamItYW5ub3RhdGlvbi1zdWJjbGFzc2luZzwvam5kaS1uYW1lPgogICAgICAgPC9yZXNvdXJjZS1yZWY+Ci0gICAgICA8aXMtcmVhZC1vbmx5LWJlYW4+ZmFsc2U8L2lzLXJlYWQtb25seS1iZWFuPiAKLSAgICAgIDxjb21taXQtb3B0aW9uPkI8L2NvbW1pdC1vcHRpb24+IAotICAgICA8YmVhbi1wb29sPiAKLSAgICAgICAgIDxzdGVhZHktcG9vbC1zaXplPjA8L3N0ZWFkeS1wb29sLXNpemU+IAotICAgICAgICAgPHJlc2l6ZS1xdWFudGl0eT4xPC9yZXNpemUtcXVhbnRpdHk+IAotICAgICAgICAgPG1heC1wb29sLXNpemU+MTA8L21heC1wb29sLXNpemU+IAotICAgICAgICAgPHBvb2wtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcG9vbC1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4gCi0gICAgICA8L2JlYW4tcG9vbD4gCi0gICAgICA8YmVhbi1jYWNoZT4gCi0gICAgICAgICAgPG1heC1jYWNoZS1zaXplPjEwMDwvbWF4LWNhY2hlLXNpemU+IAotICAgICAgICA8Y2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+NjA8L2NhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPiAKLSAgICAgICAgPHJlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPjM2MDA8L3JlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPiAKLSAgICAgICAgPHZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PkxSVTwvdmljdGltLXNlbGVjdGlvbi1wb2xpY3k+IAotICAgICAgPC9iZWFuLWNhY2hlPiAKKyAgICAgIDxpcy1yZWFkLW9ubHktYmVhbj5mYWxzZTwvaXMtcmVhZC1vbmx5LWJlYW4+CisgICAgICA8Y29tbWl0LW9wdGlvbj5CPC9jb21taXQtb3B0aW9uPgorICAgICA8YmVhbi1wb29sPgorICAgICAgICAgPHN0ZWFkeS1wb29sLXNpemU+MDwvc3RlYWR5LXBvb2wtc2l6ZT4KKyAgICAgICAgIDxyZXNpemUtcXVhbnRpdHk+MTwvcmVzaXplLXF1YW50aXR5PgorICAgICAgICAgPG1heC1wb29sLXNpemU+MTA8L21heC1wb29sLXNpemU+CisgICAgICAgICA8cG9vbC1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4zNjAwPC9wb29sLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPgorICAgICAgPC9iZWFuLXBvb2w+CisgICAgICA8YmVhbi1jYWNoZT4KKyAgICAgICAgICA8bWF4LWNhY2hlLXNpemU+MTAwPC9tYXgtY2FjaGUtc2l6ZT4KKyAgICAgICAgPGNhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjYwPC9jYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4KKyAgICAgICAgPHJlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPjM2MDA8L3JlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPgorICAgICAgICA8dmljdGltLXNlbGVjdGlvbi1wb2xpY3k+TFJVPC92aWN0aW0tc2VsZWN0aW9uLXBvbGljeT4KKyAgICAgIDwvYmVhbi1jYWNoZT4KICAgICA8L2VqYj4KICAgICA8ZWpiPgogICAgICAgPGVqYi1uYW1lPkN1c3RvbWVyQ2hlY2tpbmdFSkI8L2VqYi1uYW1lPgpAQCAtNTEsMjAgKzUxLDIwIEBACiAgICAgICAgIDxyZXMtcmVmLW5hbWU+amRiYy9TaW1wbGVCYW5rPC9yZXMtcmVmLW5hbWU+CiAgICAgICAgIDxqbmRpLW5hbWU+amRiYy9lamItYW5ub3RhdGlvbi1zdWJjbGFzc2luZzwvam5kaS1uYW1lPgogICAgICAgPC9yZXNvdXJjZS1yZWY+Ci0gICAgICA8aXMtcmVhZC1vbmx5LWJlYW4+ZmFsc2U8L2lzLXJlYWQtb25seS1iZWFuPiAKLSAgICAgIDxjb21taXQtb3B0aW9uPkI8L2NvbW1pdC1vcHRpb24+IAotICAgICA8YmVhbi1wb29sPiAKLSAgICAgICAgIDxzdGVhZHktcG9vbC1zaXplPjA8L3N0ZWFkeS1wb29sLXNpemU+IAotICAgICAgICAgPHJlc2l6ZS1xdWFudGl0eT4xPC9yZXNpemUtcXVhbnRpdHk+IAotICAgICAgICAgPG1heC1wb29sLXNpemU+MTA8L21heC1wb29sLXNpemU+IAorICAgICAgPGlzLXJlYWQtb25seS1iZWFuPmZhbHNlPC9pcy1yZWFkLW9ubHktYmVhbj4KKyAgICAgIDxjb21taXQtb3B0aW9uPkI8L2NvbW1pdC1vcHRpb24+CisgICAgIDxiZWFuLXBvb2w+CisgICAgICAgICA8c3RlYWR5LXBvb2wtc2l6ZT4wPC9zdGVhZHktcG9vbC1zaXplPgorICAgICAgICAgPHJlc2l6ZS1xdWFudGl0eT4xPC9yZXNpemUtcXVhbnRpdHk+CisgICAgICAgICA8bWF4LXBvb2wtc2l6ZT4xMDwvbWF4LXBvb2wtc2l6ZT4KICAgICAgICAgPHBvb2wtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcG9vbC1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4KLSAgICAgIDwvYmVhbi1wb29sPiAKLSAgICAgIDxiZWFuLWNhY2hlPiAKKyAgICAgIDwvYmVhbi1wb29sPgorICAgICAgPGJlYW4tY2FjaGU+CiAgICAgICAgICAgPG1heC1jYWNoZS1zaXplPjEwMDwvbWF4LWNhY2hlLXNpemU+CiAgICAgICAgICAgPGNhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjYwPC9jYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4KICAgICAgICAgICA8cmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+CiAgICAgICAgICAgPHZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PkxSVTwvdmljdGltLXNlbGVjdGlvbi1wb2xpY3k+Ci0gICAgICA8L2JlYW4tY2FjaGU+IAorICAgICAgPC9iZWFuLWNhY2hlPgogICAgIDwvZWpiPgogICA8L2VudGVycHJpc2UtYmVhbnM+CiA8L3N1bi1lamItamFyPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvZWpiL0N1c3RvbWVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9lamIvQ3VzdG9tZXIuamF2YQppbmRleCA4YTliMTA1Li4xNjBlYWI5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9lamIvQ3VzdG9tZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9lamIvQ3VzdG9tZXIuamF2YQpAQCAtNDQsNCArNDQsNCBAQAogCiB9CiAKLSAgCisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL2VqYi9DdXN0b21lckNoZWNraW5nLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9lamIvQ3VzdG9tZXJDaGVja2luZy5qYXZhCmluZGV4IDYxZGUyOTEuLmIzNDFjMzQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL2VqYi9DdXN0b21lckNoZWNraW5nLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvZWpiL0N1c3RvbWVyQ2hlY2tpbmcuamF2YQpAQCAtMjAsNCArMjAsNCBAQAogewogfQogCi0gIAorCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9lamIvQ3VzdG9tZXJDaGVja2luZ0VKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvZWpiL0N1c3RvbWVyQ2hlY2tpbmdFSkIuamF2YQppbmRleCBlZTBkMTdjLi40YjU0NDQ0IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9lamIvQ3VzdG9tZXJDaGVja2luZ0VKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL2VqYi9DdXN0b21lckNoZWNraW5nRUpCLmphdmEKQEAgLTk0LDUgKzk0LDUgQEAKICAgfQogCiB9Ci0gICAgCi0gICAgCisKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvZWpiL0N1c3RvbWVyRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9lamIvQ3VzdG9tZXJFSkIuamF2YQppbmRleCBmMGRiYWQyLi45MjlkMTVjIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9lamIvQ3VzdG9tZXJFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9lamIvQ3VzdG9tZXJFSkIuamF2YQpAQCAtNTMsNyArNTMsNyBAQAogCiAgIHB1YmxpYyBTdHJpbmcgZ2V0QWRkcmVzczEoKQogICB7Ci0gICAgcmV0dXJuIGFkZHJlc3MxOyAKKyAgICByZXR1cm4gYWRkcmVzczE7CiAgIH0KIAogICBwdWJsaWMgU3RyaW5nIGdldEFkZHJlc3MyKCkKQEAgLTE0Nyw3ICsxNDcsNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNRTCBleGNlcHRpb24gb2NjdXJlZCBpbiBlamJSZW1vdmUgbWV0aG9kIik7CiAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICB9Ci0gICAgCisKICAgfQogCiAgIHB1YmxpYyB2b2lkIGVqYlN0b3JlKCkKQEAgLTIxNCwxMiArMjE0LDEyIEBACiAgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU1FMRXhjZXB0aW9uIG9jY3VycmVkIGluIGVqYkxvYWQoKSBtZXRob2QiKTsKICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfSAgIAorICAgIH0KICAgfQogCiAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkge30KICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkge30KIH0KLSAgICAgIAotICAgIAotICAgIAorCisKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvZWpiL0N1c3RvbWVyU2F2aW5ncy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvZWpiL0N1c3RvbWVyU2F2aW5ncy5qYXZhCmluZGV4IDMzOGM5MjEuLjg4M2UwNGEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL2VqYi9DdXN0b21lclNhdmluZ3MuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9lamIvQ3VzdG9tZXJTYXZpbmdzLmphdmEKQEAgLTIwLDQgKzIwLDQgQEAKIHsKIH0KIAotICAKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvZWpiL0N1c3RvbWVyU2F2aW5nc0VKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvZWpiL0N1c3RvbWVyU2F2aW5nc0VKQi5qYXZhCmluZGV4IGYzMGI1MDYuLmIwY2U3YjUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL2VqYi9DdXN0b21lclNhdmluZ3NFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9lamIvQ3VzdG9tZXJTYXZpbmdzRUpCLmphdmEKQEAgLTk1LDYgKzk1LDYgQEAKICAgfQogCiB9Ci0gICAgICAKLSAgICAKLSAgICAKKworCisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGVlMmVjYTAuLmZkMjFjM2QgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvYnVpbGQucHJvcGVydGllcwpAQCAtMTQsNyArMTQsNyBAQAogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKICMKIAotICAgIAorCiAjIyMgQ29tcG9uZW50IFByb3BlcnRpZXMgIyMjCiBzcmMuZGlyPXNyYwogY29tcG9uZW50LnB1Ymxpc2guaG9tZT0uCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9idWlsZC54bWwKaW5kZXggNWM2NWZkNS4uZTk1MDAwMiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL2J1aWxkLnhtbApAQCAtMjMsNjIgKzIzLDYyIEBACiAKIDxwcm9qZWN0IG5hbWU9IkpEQkNDb25uZWN0b3IgdG9wIGxldmVsIiBkZWZhdWx0PSJidWlsZCI+CiAgICAgPHByb3BlcnR5IG5hbWU9InBrZy5kaXIiIHZhbHVlPSJjb20vc3VuL2pkYmNyYS9zcGkiLz4KLSAgICAKKwogICAgICZjb21tb247CiAgICAgJnRlc3Rjb21tb247CiAgICAgPHByb3BlcnR5IGZpbGU9Ii4vYnVpbGQucHJvcGVydGllcyIvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSxhc3NlbWJsZSIgLz4KLSAgICAgICAgICAKKwogCiAgICAgPCEtLSBpbml0LiBJbml0aWFsaXphdGlvbiBpbnZvbHZlcyBjcmVhdGluZyBwdWJsaXNoaW5nIGRpcmVjdG9yaWVzIGFuZAotICAgICAgICAgT1Mgc3BlY2lmaWMgdGFyZ2V0cy4gLS0+IAorICAgICAgICAgT1Mgc3BlY2lmaWMgdGFyZ2V0cy4gLS0+CiAgICAgPHRhcmdldCBuYW1lPSJpbml0IiBkZXNjcmlwdGlvbj0iJHtjb21wb25lbnQubmFtZX0gaW5pdGlhbGl6YXRpb24iPgogICAgICAgICA8dHN0YW1wPgogICAgICAgICAgICAgPGZvcm1hdCBwcm9wZXJ0eT0ic3RhcnQudGltZSIgcGF0dGVybj0iTU0vZGQveXl5eSBoaDptbSBhYSIvPgotICAgICAgICA8L3RzdGFtcD4gICAgCisgICAgICAgIDwvdHN0YW1wPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJCdWlsZGluZyBjb21wb25lbnQgJHtjb21wb25lbnQubmFtZX0iLz4KICAgICAgICAgPG1rZGlyIGRpcj0iJHtjb21wb25lbnQuY2xhc3Nlcy5kaXJ9Ii8+Ci0gICAgICAgIDxta2RpciBkaXI9IiR7Y29tcG9uZW50LmxpYi5ob21lfSIvPiAgICAKKyAgICAgICAgPG1rZGlyIGRpcj0iJHtjb21wb25lbnQubGliLmhvbWV9Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgPCEtLSBjb21waWxlIC0tPiAKKyAgICA8IS0tIGNvbXBpbGUgLS0+CiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJpbml0IgotICAgICAgICAgICAgZGVzY3JpcHRpb249IkNvbXBpbGUgY29tL3N1bi8qIGNvbS9pcGxhbmV0Lyogc291cmNlcyI+ICAKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJDb21waWxlIGNvbS9zdW4vKiBjb20vaXBsYW5ldC8qIHNvdXJjZXMiPgogICAgICAgICA8IS0tPGVjaG8gbWVzc2FnZT0iQ29ubmVjdG9yIGFwaSByZXNpZGVzIGluICR7Y29ubmVjdG9yLWFwaS5qYXJ9Ii8+LS0+Ci0gICAgICAgIDxqYXZhYyBzcmNkaXI9IiR7c3JjLmRpcn0iIAorICAgICAgICA8amF2YWMgc3JjZGlyPSIke3NyYy5kaXJ9IgogICAgICAgICAgICAgICAgZGVzdGRpcj0iJHtjb21wb25lbnQuY2xhc3Nlcy5kaXJ9IgotCSAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSI+Ci0JICAgICAgIDxjbGFzc3BhdGg+Ci0JICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuUzFBU19IT01FfS9tb2R1bGVzIj4KLQkgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLmphciIgLz4KLQkgICAgICAgICAgPC9maWxlc2V0PgotCSAgICAgICA8L2NsYXNzcGF0aD4KKyAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiPgorICAgICAgICAgICA8Y2xhc3NwYXRoPgorICAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LlMxQVNfSE9NRX0vbW9kdWxlcyI+CisgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKiovKi5qYXIiIC8+CisgICAgICAgICAgICAgIDwvZmlsZXNldD4KKyAgICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJjb20vc3VuL2pkYmNyYS8qKiIvPgogICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iY29tL3N1bi9hcHBzZXJ2LyoqIi8+CiAgICAgICAgIDwvamF2YWM+CiAgICAgPC90YXJnZXQ+Ci0gICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkIi8+CiAKLSAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUiPiAgICAKLSAgICAJCi0JPGphciBqYXJmaWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vamRiYy5qYXIiIAotICAgICAgICAgICAgYmFzZWRpcj0iJHtjb21wb25lbnQuY2xhc3Nlcy5kaXJ9IiBpbmNsdWRlcz0iJHtwa2cuZGlyfS8qKi8qLCAKLSAgICAgICAgICAgIGNvbS9zdW4vYXBwc2Vydi8qKi8qLCBjb20vc3VuL2pkYmNyYS91dGlsLyoqLyosIGNvbS9zdW4vamRiY3JhL2NvbW1vbi8qKi8qIi8+IAotICAgCQotICAgICAgICA8Y29weSBmaWxlPSIke3NyYy5kaXJ9L2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvcmEtZHMueG1sIiAKLSAgICAgICAgICAgICAgICB0b2ZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4JCisgICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIj4KKworICAgIDxqYXIgamFyZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L2pkYmMuamFyIgorICAgICAgICAgICAgYmFzZWRpcj0iJHtjb21wb25lbnQuY2xhc3Nlcy5kaXJ9IiBpbmNsdWRlcz0iJHtwa2cuZGlyfS8qKi8qLAorICAgICAgICAgICAgY29tL3N1bi9hcHBzZXJ2LyoqLyosIGNvbS9zdW4vamRiY3JhL3V0aWwvKiovKiwgY29tL3N1bi9qZGJjcmEvY29tbW9uLyoqLyoiLz4KKworICAgICAgICA8Y29weSBmaWxlPSIke3NyYy5kaXJ9L2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvcmEtZHMueG1sIgorICAgICAgICAgICAgICAgIHRvZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgogICAgICAgICA8L2NvcHk+Ci0gICAJPGphciBqYXJmaWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vamRiY3JhLnJhciIgCi0JCWJhc2VkaXI9IiR7Y29tcG9uZW50LmxpYi5ob21lfSIgaW5jbHVkZXM9ImpkYmMuamFyIj4KKyAgICAgICA8amFyIGphcmZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9qZGJjcmEucmFyIgorICAgICAgICBiYXNlZGlyPSIke2NvbXBvbmVudC5saWIuaG9tZX0iIGluY2x1ZGVzPSJqZGJjLmphciI+CiAKLSAgIAkJPG1ldGFpbmYgZGlyPSIke2NvbXBvbmVudC5saWIuaG9tZX0iPgotICAgCQkJPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+Ci0gICAJCTwvbWV0YWluZj4KLSAgIAk8L2phcj4KKyAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2NvbXBvbmVudC5saWIuaG9tZX0iPgorICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+CisgICAgICAgICAgIDwvbWV0YWluZj4KKyAgICAgICA8L2phcj4KIAotICAgCTxkZWxldGUgZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L3JhLnhtbCIvPgotCQorICAgICAgIDxkZWxldGUgZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L3JhLnhtbCIvPgorCiAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVzY3JpcHRpb249IkNsZWFuIHRoZSBidWlsZCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9hcHBzZXJ2L2pkYmNyYS9EYXRhU291cmNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9hcHBzZXJ2L2pkYmNyYS9EYXRhU291cmNlLmphdmEKaW5kZXggOWY4Mzk5YS4uYjZlZjMwYiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vYXBwc2Vydi9qZGJjcmEvRGF0YVNvdXJjZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2FwcHNlcnYvamRiY3JhL0RhdGFTb3VyY2UuamF2YQpAQCAtMjAsMTUgKzIwLDE1IEBACiBpbXBvcnQgamF2YS5zcWwuU1FMRXhjZXB0aW9uOwogCiAvKioKLSAqIFRoZSA8Y29kZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29kZT4gaW1wbGVtZW50YXRpb24gb2YgU3VuT05FIGFwcGxpY2F0aW9uIAorICogVGhlIDxjb2RlPmphdmF4LnNxbC5EYXRhU291cmNlPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBvZiBTdW5PTkUgYXBwbGljYXRpb24KICAqIHNlcnZlciB3aWxsIGltcGxlbWVudCB0aGlzIGludGVyZmFjZS4gQW4gYXBwbGljYXRpb24gcHJvZ3JhbSB3b3VsZCBiZSBhYmxlCi0gKiB0byB1c2UgdGhpcyBpbnRlcmZhY2UgdG8gZG8gdGhlIGV4dGVuZGVkIGZ1bmN0aW9uYWxpdHkgZXhwb3NlZCBieSBTdW5PTkUgCisgKiB0byB1c2UgdGhpcyBpbnRlcmZhY2UgdG8gZG8gdGhlIGV4dGVuZGVkIGZ1bmN0aW9uYWxpdHkgZXhwb3NlZCBieSBTdW5PTkUKICAqIGFwcGxpY2F0aW9uIHNlcnZlci4KLSAqIDxwPkEgc2FtcGxlIGNvZGUgZm9yIGdldHRpbmcgZHJpdmVyJ3MgY29ubmVjdGlvbiBpbXBsZW1lbnRhdGlvbiB3b3VsZCBsaWtlIAorICogPHA+QSBzYW1wbGUgY29kZSBmb3IgZ2V0dGluZyBkcml2ZXIncyBjb25uZWN0aW9uIGltcGxlbWVudGF0aW9uIHdvdWxkIGxpa2UKICAqIHRoZSBmb2xsb3dpbmcuCiAgKiA8cHJlPgogICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICBjb20uc3VuLmFwcHNlcnYuRGF0YVNvdXJjZSBkcyA9IChjb20uc3VuLmFwcHNlcnYuRGF0YVNPdXJjZSkgaWMubG9va3VwKCJqZGJjL1BvaW50QmFzZSIpOyAKKyAgICAgY29tLnN1bi5hcHBzZXJ2LkRhdGFTb3VyY2UgZHMgPSAoY29tLnN1bi5hcHBzZXJ2LkRhdGFTT3VyY2UpIGljLmxvb2t1cCgiamRiYy9Qb2ludEJhc2UiKTsKICAgICAgQ29ubmVjdGlvbiBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7CiAgICAgIENvbm5lY3Rpb24gZHJpdmVyY29uID0gZHMuZ2V0Q29ubmVjdGlvbihjb24pOwogCkBAIC0zNiwxMyArMzYsMTMgQEAKIAogICAgICBjb24uY2xvc2UoKTsKICAgIDwvcHJlPgotICogCisgKgogICogQGF1dGhvciBCaW5vZCBQLkcKICAqLwogcHVibGljIGludGVyZmFjZSBEYXRhU291cmNlIGV4dGVuZHMgamF2YXguc3FsLkRhdGFTb3VyY2UgewogCiAgICAgLyoqCi0gICAgICogUmV0cmlldmVzIHRoZSBhY3R1YWwgU1FMQ29ubmVjdGlvbiBmcm9tIHRoZSBDb25uZWN0aW9uIHdyYXBwZXIgCisgICAgICogUmV0cmlldmVzIHRoZSBhY3R1YWwgU1FMQ29ubmVjdGlvbiBmcm9tIHRoZSBDb25uZWN0aW9uIHdyYXBwZXIKICAgICAgKiBpbXBsZW1lbnRhdGlvbiBvZiBTdW5PTkUgYXBwbGljYXRpb24gc2VydmVyLiBJZiBhbiBhY3R1YWwgY29ubmVjdGlvbiBpcwogICAgICAqIHN1cHBsaWVkIGFzIGFyZ3VtZW50LCB0aGVuIGl0IHdpbGwgYmUganVzdCByZXR1cm5lZC4KICAgICAgKgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlT2JqZWN0QnVpbGRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlT2JqZWN0QnVpbGRlci5qYXZhCmluZGV4IDcwMDI5ZjEuLmU5NjZmOTggMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VPYmplY3RCdWlsZGVyLmphdmEKQEAgLTI3LDIyICsyNywyMiBAQAogaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsKIGltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsKIC8qKgotICogVXRpbGl0eSBjbGFzcywgd2hpY2ggd291bGQgY3JlYXRlIG5lY2Vzc2FyeSBEYXRhc291cmNlIG9iamVjdCBhY2NvcmRpbmcgdG8gdGhlIAorICogVXRpbGl0eSBjbGFzcywgd2hpY2ggd291bGQgY3JlYXRlIG5lY2Vzc2FyeSBEYXRhc291cmNlIG9iamVjdCBhY2NvcmRpbmcgdG8gdGhlCiAgKiBzcGVjaWZpY2F0aW9uLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMjMKLSAqIEBhdXRob3IJQmlub2QgUC5HCi0gKiBAc2VlCQljb20uc3VuLmpkYmNyYS5jb21tb24uRGF0YVNvdXJjZVNwZWMKLSAqIEBzZWUJCWNvbS5zdW4uamRiY3JhLnV0aWwuTWV0aG9kRXhjZWN1dG9yCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzIzCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRworICogQHNlZSAgICAgICAgY29tLnN1bi5qZGJjcmEuY29tbW9uLkRhdGFTb3VyY2VTcGVjCisgKiBAc2VlICAgICAgICBjb20uc3VuLmpkYmNyYS51dGlsLk1ldGhvZEV4Y2VjdXRvcgogICovCiBwdWJsaWMgY2xhc3MgRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIgaW1wbGVtZW50cyBqYXZhLmlvLlNlcmlhbGl6YWJsZXsKIAogICAgIHByaXZhdGUgRGF0YVNvdXJjZVNwZWMgc3BlYzsKLSAgICAKKwogICAgIHByaXZhdGUgSGFzaHRhYmxlIGRyaXZlclByb3BlcnRpZXMgPSBudWxsOwotICAgIAotICAgIHByaXZhdGUgTWV0aG9kRXhlY3V0b3IgZXhlY3V0b3IgPSBudWxsOyAgICAKLSAgICAKKworICAgIHByaXZhdGUgTWV0aG9kRXhlY3V0b3IgZXhlY3V0b3IgPSBudWxsOworCiAgICAgcHJpdmF0ZSBzdGF0aWMgTG9nZ2VyIF9sb2dnZXI7CiAgICAgc3RhdGljIHsKICAgICAgICAgX2xvZ2dlciA9IExvZ2dlci5nZXRBbm9ueW1vdXNMb2dnZXIoKTsKQEAgLTUwLDE2OSArNTAsMTY5IEBACiAgICAgcHJpdmF0ZSBib29sZWFuIGRlYnVnID0gZmFsc2U7CiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0IGEgRGF0YVNvdXJjZSBPYmplY3QgZnJvbSB0aGUgc3BlYy4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0Jc3BlYwk8Y29kZT4gRGF0YVNvdXJjZVNwZWMgPC9jb2RlPiBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3BlYyAgICA8Y29kZT4gRGF0YVNvdXJjZVNwZWMgPC9jb2RlPiBvYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIERhdGFTb3VyY2VPYmplY3RCdWlsZGVyKERhdGFTb3VyY2VTcGVjIHNwZWMpIHsKLSAgICAJdGhpcy5zcGVjID0gc3BlYzsKLSAgICAJZXhlY3V0b3IgPSBuZXcgTWV0aG9kRXhlY3V0b3IoKTsKKyAgICAgICAgdGhpcy5zcGVjID0gc3BlYzsKKyAgICAgICAgZXhlY3V0b3IgPSBuZXcgTWV0aG9kRXhlY3V0b3IoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3QgdGhlIERhdGFTb3VyY2UgT2JqZWN0IGZyb20gdGhlIHNwZWMuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCU9iamVjdCBjb25zdHJ1Y3RlZCB1c2luZyB0aGUgRGF0YVNvdXJjZVNwZWMuCi0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4gaWYgdGhlIGNsYXNzIGlzIG5vdCBmb3VuZCBvciBzb21lIGlzc3VlIGluIGV4ZWN1dGluZwotICAgICAqCQlzb21lIG1ldGhvZC4KKyAgICAgKiBAcmV0dXJuICAgIE9iamVjdCBjb25zdHJ1Y3RlZCB1c2luZyB0aGUgRGF0YVNvdXJjZVNwZWMuCisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4gaWYgdGhlIGNsYXNzIGlzIG5vdCBmb3VuZCBvciBzb21lIGlzc3VlIGluIGV4ZWN1dGluZworICAgICAqICAgICAgICBzb21lIG1ldGhvZC4KICAgICAgKi8KICAgICBwdWJsaWMgT2JqZWN0IGNvbnN0cnVjdERhdGFTb3VyY2VPYmplY3QoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb257Ci0gICAgCWRyaXZlclByb3BlcnRpZXMgPSBwYXJzZURyaXZlclByb3BlcnRpZXMoc3BlYyk7CisgICAgICAgIGRyaXZlclByb3BlcnRpZXMgPSBwYXJzZURyaXZlclByb3BlcnRpZXMoc3BlYyk7CiAgICAgICAgIE9iamVjdCBkYXRhU291cmNlT2JqZWN0ID0gZ2V0RGF0YVNvdXJjZU9iamVjdCgpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlYzLVRFU1QgOiAiICArIGRhdGFTb3VyY2VPYmplY3QpOwogICAgICAgICBNZXRob2RbXSBtZXRob2RzID0gZGF0YVNvdXJjZU9iamVjdC5nZXRDbGFzcygpLmdldE1ldGhvZHMoKTsKICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgbWV0aG9kcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgU3RyaW5nIG1ldGhvZE5hbWUgPSBtZXRob2RzW2ldLmdldE5hbWUoKTsKLQkgICAgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0VXNlciIpKXsJICAgIAkKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlVTRVJOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRQYXNzd29yZCIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBBU1NXT1JEKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRMb2dpblRpbWVPdXQiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dJTlRJTUVPVVQpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldExvZ1dyaXRlciIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR1dSSVRFUiksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0RGF0YWJhc2VOYW1lIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQUJBU0VOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXREYXRhU291cmNlTmFtZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXREZXNjcmlwdGlvbiIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFU0NSSVBUSU9OKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TmV0d29ya1Byb3RvY29sIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTkVUV09SS1BST1RPQ09MKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRQb3J0TnVtYmVyIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUE9SVE5VTUJFUiksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0Um9sZU5hbWUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ST0xFTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAkJICAgIAkKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0U2VydmVyTmFtZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlNFUlZFUk5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWF4U3RhdGVtZW50cyIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1BWFNUQVRFTUVOVFMpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldEluaXRpYWxQb29sU2l6ZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLklOSVRJQUxQT09MU0laRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAkKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWluUG9vbFNpemUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NSU5QT09MU0laRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWF4UG9vbFNpemUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NQVhQT09MU0laRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAkKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWF4SWRsZVRpbWUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NQVhJRExFVElNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAkKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0UHJvcGVydHlDeWNsZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBST1BFUlRZQ1lDTEUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChkcml2ZXJQcm9wZXJ0aWVzLmNvbnRhaW5zS2V5KG1ldGhvZE5hbWUudG9VcHBlckNhc2UoKSkpewotCSAgICAJVmVjdG9yIHZhbHVlcyA9IChWZWN0b3IpIGRyaXZlclByb3BlcnRpZXMuZ2V0KG1ldGhvZE5hbWUudG9VcHBlckNhc2UoKSk7Ci0JICAgICAgICBleGVjdXRvci5ydW5NZXRob2QobWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0LCB2YWx1ZXMpOwotCSAgICB9CisgICAgICAgIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFVzZXIiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5VU0VSTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0UGFzc3dvcmQiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QQVNTV09SRCksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TG9naW5UaW1lT3V0IikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HSU5USU1FT1VUKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRMb2dXcml0ZXIiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dXUklURVIpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldERhdGFiYXNlTmFtZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFCQVNFTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0RGF0YVNvdXJjZU5hbWUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBU09VUkNFTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0RGVzY3JpcHRpb24iKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERVNDUklQVElPTiksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TmV0d29ya1Byb3RvY29sIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTkVUV09SS1BST1RPQ09MKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRQb3J0TnVtYmVyIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUE9SVE5VTUJFUiksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0Um9sZU5hbWUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ST0xFTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0U2VydmVyTmFtZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlNFUlZFUk5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1heFN0YXRlbWVudHMiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NQVhTVEFURU1FTlRTKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRJbml0aWFsUG9vbFNpemUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5JTklUSUFMUE9PTFNJWkUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1pblBvb2xTaXplIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUlOUE9PTFNJWkUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1heFBvb2xTaXplIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUFYUE9PTFNJWkUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1heElkbGVUaW1lIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUFYSURMRVRJTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFByb3BlcnR5Q3ljbGUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QUk9QRVJUWUNZQ0xFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAoZHJpdmVyUHJvcGVydGllcy5jb250YWluc0tleShtZXRob2ROYW1lLnRvVXBwZXJDYXNlKCkpKXsKKyAgICAgICAgICAgIFZlY3RvciB2YWx1ZXMgPSAoVmVjdG9yKSBkcml2ZXJQcm9wZXJ0aWVzLmdldChtZXRob2ROYW1lLnRvVXBwZXJDYXNlKCkpOworICAgICAgICAgICAgZXhlY3V0b3IucnVuTWV0aG9kKG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCwgdmFsdWVzKTsKKyAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBkYXRhU291cmNlT2JqZWN0OwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgZXh0cmEgZHJpdmVyIHByb3BlcnRpZXMgZnJvbSB0aGUgRGF0YVNvdXJjZVNwZWMgb2JqZWN0IGFuZAogICAgICAqIHBhcnNlIHRoZW0gdG8gYSBzZXQgb2YgbWV0aG9kTmFtZSBhbmQgcGFyYW1ldGVycy4gUHJlcGFyZSBhIGhhc2h0YWJsZQogICAgICAqIGNvbnRhaW5pbmcgdGhlc2UgZGV0YWlscyBhbmQgcmV0dXJuLgogICAgICAqCi0gICAgICogQHBhcmFtCXNwZWMJPGNvZGU+IERhdGFTb3VyY2VTcGVjIDwvY29kZT4gb2JqZWN0LgotICAgICAqIEByZXR1cm4JSGFzaHRhYmxlIGNvbnRhaW5pbmcgbWV0aG9kIG5hbWVzIGFuZCBwYXJhbWV0ZXJzLAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JSWYgZGVsaW1pdGVyIGlzIG5vdCBwcm92aWRlZCBhbmQgcHJvcGVydHkgc3RyaW5nCi0gICAgICoJCQkJCWlzIG5vdCBudWxsLgorICAgICAqIEBwYXJhbSAgICBzcGVjICAgIDxjb2RlPiBEYXRhU291cmNlU3BlYyA8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcmV0dXJuICAgIEhhc2h0YWJsZSBjb250YWluaW5nIG1ldGhvZCBuYW1lcyBhbmQgcGFyYW1ldGVycywKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIElmIGRlbGltaXRlciBpcyBub3QgcHJvdmlkZWQgYW5kIHByb3BlcnR5IHN0cmluZworICAgICAqICAgICAgICAgICAgICAgICAgICBpcyBub3QgbnVsbC4KICAgICAgKi8KICAgICBwcml2YXRlIEhhc2h0YWJsZSBwYXJzZURyaXZlclByb3BlcnRpZXMoRGF0YVNvdXJjZVNwZWMgc3BlYykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewotICAgIAlTdHJpbmcgZGVsaW0gPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERUxJTUlURVIpOworICAgICAgICBTdHJpbmcgZGVsaW0gPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERUxJTUlURVIpOwogCiAgICAgICAgIFN0cmluZyBwcm9wID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuRFJJVkVSUFJPUEVSVElFUyk7Ci0JaWYgKCBwcm9wID09IG51bGwgfHwgcHJvcC50cmltKCkuZXF1YWxzKCIiKSkgewotCSAgICByZXR1cm4gbmV3IEhhc2h0YWJsZSgpOwotCX0gZWxzZSBpZiAoZGVsaW0gPT0gbnVsbCB8fCBkZWxpbS5lcXVhbHMoIiIpKSB7Ci0JICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbiAoIkRlbGltaXRlciBpcyBub3QgcHJvdmlkZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24iKTsKLQl9Ci0JCi0JSGFzaHRhYmxlIHByb3BlcnRpZXMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0JZGVsaW0gPSBkZWxpbS50cmltKCk7CQotCVN0cmluZyBzZXAgPSBkZWxpbStkZWxpbTsKLQlpbnQgc2VwTGVuID0gc2VwLmxlbmd0aCgpOwotCVN0cmluZyBjYWNoZSA9IHByb3A7Ci0JVmVjdG9yIG1ldGhvZHMgPSBuZXcgVmVjdG9yKCk7Ci0JCi0Jd2hpbGUgKGNhY2hlLmluZGV4T2Yoc2VwKSAhPSAtMSkgewotCSAgICBpbnQgaW5kZXggPSBjYWNoZS5pbmRleE9mKHNlcCk7Ci0JICAgIFN0cmluZyBuYW1lID0gY2FjaGUuc3Vic3RyaW5nKDAsaW5kZXgpOwotCSAgICBpZiAobmFtZS50cmltKCkgIT0gIiIpIHsKLQkgICAgICAgIG1ldGhvZHMuYWRkKG5hbWUpOwotCSAgICAJY2FjaGUgPSBjYWNoZS5zdWJzdHJpbmcoaW5kZXgrc2VwTGVuKTsKLQkgICAgfQotCX0KLQkKLSAgICAJRW51bWVyYXRpb24gYWxsTWV0aG9kcyA9IG1ldGhvZHMuZWxlbWVudHMoKTsKLSAgICAJd2hpbGUgKGFsbE1ldGhvZHMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAJICAgIFN0cmluZyBvbmVNZXRob2QgPSAoU3RyaW5nKSBhbGxNZXRob2RzLm5leHRFbGVtZW50KCk7ICAgIAkgICAgCi0gICAgCSAgICBpZiAoIW9uZU1ldGhvZC50cmltKCkuZXF1YWxzKCIiKSkgewotICAgIAkgICAgCVN0cmluZyBtZXRob2ROYW1lID0gbnVsbDsKLSAgICAJICAgIAlWZWN0b3IgcGFybXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgCSAgICAJU3RyaW5nVG9rZW5pemVyIG1ldGhvZERldGFpbHMgPSBuZXcgU3RyaW5nVG9rZW5pemVyKG9uZU1ldGhvZCxkZWxpbSk7Ci0JCWZvciAoaW50IGk9MDsgbWV0aG9kRGV0YWlscy5oYXNNb3JlVG9rZW5zKCk7aSsrICkgewotCQkgICAgU3RyaW5nIHRva2VuID0gKFN0cmluZykgbWV0aG9kRGV0YWlscy5uZXh0VG9rZW4oKTsKLQkJICAgIGlmIChpPT0wKSB7Ci0JCSAgICAJbWV0aG9kTmFtZSA9IHRva2VuLnRvVXBwZXJDYXNlKCk7Ci0JCSAgICB9IGVsc2UgewotCQkgICAgCXBhcm1zLmFkZCh0b2tlbik7CQkgICAgCQotCQkgICAgfQotCQl9Ci0JCXByb3BlcnRpZXMucHV0KG1ldGhvZE5hbWUscGFybXMpOwotICAgIAkgICAgfSAgICAJICAgIAotICAgIAl9Ci0gICAgCXJldHVybiBwcm9wZXJ0aWVzOworICAgIGlmICggcHJvcCA9PSBudWxsIHx8IHByb3AudHJpbSgpLmVxdWFscygiIikpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBIYXNodGFibGUoKTsKKyAgICB9IGVsc2UgaWYgKGRlbGltID09IG51bGwgfHwgZGVsaW0uZXF1YWxzKCIiKSkgeworICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24gKCJEZWxpbWl0ZXIgaXMgbm90IHByb3ZpZGVkIGluIHRoZSBjb25maWd1cmF0aW9uIik7CiAgICAgfQotICAgIAorCisgICAgSGFzaHRhYmxlIHByb3BlcnRpZXMgPSBuZXcgSGFzaHRhYmxlKCk7CisgICAgZGVsaW0gPSBkZWxpbS50cmltKCk7CisgICAgU3RyaW5nIHNlcCA9IGRlbGltK2RlbGltOworICAgIGludCBzZXBMZW4gPSBzZXAubGVuZ3RoKCk7CisgICAgU3RyaW5nIGNhY2hlID0gcHJvcDsKKyAgICBWZWN0b3IgbWV0aG9kcyA9IG5ldyBWZWN0b3IoKTsKKworICAgIHdoaWxlIChjYWNoZS5pbmRleE9mKHNlcCkgIT0gLTEpIHsKKyAgICAgICAgaW50IGluZGV4ID0gY2FjaGUuaW5kZXhPZihzZXApOworICAgICAgICBTdHJpbmcgbmFtZSA9IGNhY2hlLnN1YnN0cmluZygwLGluZGV4KTsKKyAgICAgICAgaWYgKG5hbWUudHJpbSgpICE9ICIiKSB7CisgICAgICAgICAgICBtZXRob2RzLmFkZChuYW1lKTsKKyAgICAgICAgICAgIGNhY2hlID0gY2FjaGUuc3Vic3RyaW5nKGluZGV4K3NlcExlbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAgICAgRW51bWVyYXRpb24gYWxsTWV0aG9kcyA9IG1ldGhvZHMuZWxlbWVudHMoKTsKKyAgICAgICAgd2hpbGUgKGFsbE1ldGhvZHMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKKyAgICAgICAgICAgIFN0cmluZyBvbmVNZXRob2QgPSAoU3RyaW5nKSBhbGxNZXRob2RzLm5leHRFbGVtZW50KCk7CisgICAgICAgICAgICBpZiAoIW9uZU1ldGhvZC50cmltKCkuZXF1YWxzKCIiKSkgeworICAgICAgICAgICAgICAgIFN0cmluZyBtZXRob2ROYW1lID0gbnVsbDsKKyAgICAgICAgICAgICAgICBWZWN0b3IgcGFybXMgPSBuZXcgVmVjdG9yKCk7CisgICAgICAgICAgICAgICAgU3RyaW5nVG9rZW5pemVyIG1ldGhvZERldGFpbHMgPSBuZXcgU3RyaW5nVG9rZW5pemVyKG9uZU1ldGhvZCxkZWxpbSk7CisgICAgICAgIGZvciAoaW50IGk9MDsgbWV0aG9kRGV0YWlscy5oYXNNb3JlVG9rZW5zKCk7aSsrICkgeworICAgICAgICAgICAgU3RyaW5nIHRva2VuID0gKFN0cmluZykgbWV0aG9kRGV0YWlscy5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAgIGlmIChpPT0wKSB7CisgICAgICAgICAgICAgICAgbWV0aG9kTmFtZSA9IHRva2VuLnRvVXBwZXJDYXNlKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHBhcm1zLmFkZCh0b2tlbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcHJvcGVydGllcy5wdXQobWV0aG9kTmFtZSxwYXJtcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHByb3BlcnRpZXM7CisgICAgfQorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIERhdGFzb3VyY2Ugb2JqZWN0IGFjY29yZGluZyB0byB0aGUgc3BlYy4KICAgICAgKgotICAgICAqIEByZXR1cm4JSW5pdGlhbCBEYXRhU291cmNlIE9iamVjdCBpbnN0YW5jZS4KLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiBJZiBjbGFzcyBuYW1lIGlzIHdyb25nIG9yIGNsYXNzcGF0aCBpcyBub3Qgc2V0Ci0gICAgICoJCXByb3Blcmx5LgorICAgICAqIEByZXR1cm4gICAgSW5pdGlhbCBEYXRhU291cmNlIE9iamVjdCBpbnN0YW5jZS4KKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiBJZiBjbGFzcyBuYW1lIGlzIHdyb25nIG9yIGNsYXNzcGF0aCBpcyBub3Qgc2V0CisgICAgICogICAgICAgIHByb3Blcmx5LgogICAgICAqLwogICAgIHByaXZhdGUgT2JqZWN0IGdldERhdGFTb3VyY2VPYmplY3QoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb257Ci0gICAgCVN0cmluZyBjbGFzc05hbWUgPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DTEFTU05BTUUpOwotICAgICAgICB0cnkgeyAgICAgICAgICAgIAorICAgICAgICBTdHJpbmcgY2xhc3NOYW1lID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ0xBU1NOQU1FKTsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENsYXNzIGRhdGFTb3VyY2VDbGFzcyA9IENsYXNzLmZvck5hbWUoY2xhc3NOYW1lKTsKICAgICAgICAgICAgIE9iamVjdCBkYXRhU291cmNlT2JqZWN0ID0gZGF0YVNvdXJjZUNsYXNzLm5ld0luc3RhbmNlKCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlYzLVRFU1QgOiAiICArIGRhdGFTb3VyY2VPYmplY3QpOwogICAgICAgICAgICAgcmV0dXJuIGRhdGFTb3VyY2VPYmplY3Q7CiAgICAgICAgIH0gY2F0Y2goQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBjZm5lKXsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfY25mZV9kcyIsIGNmbmUpOwotCQorICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19jbmZlX2RzIiwgY2ZuZSk7CisKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQ2xhc3MgTmFtZSBpcyB3cm9uZyBvciBDbGFzcyBwYXRoIGlzIG5vdCBzZXQgZm9yIDoiICsgY2xhc3NOYW1lKTsKICAgICAgICAgfSBjYXRjaChJbnN0YW50aWF0aW9uRXhjZXB0aW9uIGNlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2luc3QiLCBjbGFzc05hbWUpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19pbnN0IiwgY2xhc3NOYW1lKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiRXJyb3IgaW4gaW5zdGFudGlhdGluZyIgKyBjbGFzc05hbWUpOwogICAgICAgICB9IGNhdGNoKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gY2UpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfYWNjX2luc3QiLCBjbGFzc05hbWUpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19hY2NfaW5zdCIsIGNsYXNzTmFtZSk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBFcnJvciBpbiBpbnN0YW50aWF0aW5nIiArIGNsYXNzTmFtZSk7CiAgICAgICAgIH0KICAgICB9Ci0gIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VTcGVjLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VTcGVjLmphdmEKaW5kZXggZWY2YzRjOS4uM2RjMTU0ZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlU3BlYy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZVNwZWMuamF2YQpAQCAtMTksOTIgKzE5LDkyIEBACiBpbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKIAogLyoqCi0gKiBFbmNhcHN1bGF0ZSB0aGUgRGF0YVNvdXJjZSBvYmplY3QgZGV0YWlscyBvYnRhaW5lZCBmcm9tIAorICogRW5jYXBzdWxhdGUgdGhlIERhdGFTb3VyY2Ugb2JqZWN0IGRldGFpbHMgb2J0YWluZWQgZnJvbQogICogTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMjMKLSAqIEBhdXRob3IJQmlub2QgUC5HCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzIzCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRwogICovCiBwdWJsaWMgY2xhc3MgRGF0YVNvdXJjZVNwZWMgaW1wbGVtZW50cyBqYXZhLmlvLlNlcmlhbGl6YWJsZXsKIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVTRVJOQU1FCQkJCT0gMTsgICAgCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUEFTU1dPUkQJCQkJPSAyOyAgCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVVJMCQkJCQk9IDM7ICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMT0dJTlRJTUVPVVQJCQk9IDQ7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTE9HV1JJVEVSCQkJCT0gNTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQVRBQkFTRU5BTUUJCQk9IDY7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREFUQVNPVVJDRU5BTUUJCQk9IDc7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVTQ1JJUFRJT04JCQkJPSA4OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5FVFdPUktQUk9UT0NPTAkJCT0gOTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQT1JUTlVNQkVSCQkJCT0gMTA7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUk9MRU5BTUUJCQkJPSAxMTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTRVJWRVJOQU1FCQkJCT0gMTI7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYU1RBVEVNRU5UUwkJCT0gMTM7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5JVElBTFBPT0xTSVpFCQkJPSAxNDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNSU5QT09MU0laRQkJCQk9IDE1OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWFBPT0xTSVpFCQkJCT0gMTY7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYSURMRVRJTUUJCQkJPSAxNzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQUk9QRVJUWUNZQ0xFCQkJPSAxODsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEUklWRVJQUk9QRVJUSUVTCQkJPSAxOTsgICAgCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0xBU1NOQU1FCQkJCT0gMjA7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVMSU1JVEVSCQkJCT0gMjE7Ci0gICAgCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgWEFEQVRBU09VUkNFCQkJPSAyMjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQVRBU09VUkNFCQkJCT0gMjM7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OTkVDVElPTlBPT0xEQVRBU09VUkNFCQk9IDI0OwotICAgICAgCi0gICAgLy9HSkNJTlQgICAgICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVECT0gMjU7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVkFMSURBVElPTk1FVEhPRAkJCT0gMjY7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVkFMSURBVElPTlRBQkxFTkFNRQkJCT0gMjc7Ci0gICAgCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVFJBTlNBQ1RJT05JU09MQVRJT04JCT0gMjg7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwJCT0gMjk7Ci0gICAgICAgICAgICAKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVU0VSTkFNRSAgICAgICAgICAgICAgICA9IDE7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUEFTU1dPUkQgICAgICAgICAgICAgICAgPSAyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVSTCAgICAgICAgICAgICAgICAgICAgPSAzOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExPR0lOVElNRU9VVCAgICAgICAgICAgID0gNDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMT0dXUklURVIgICAgICAgICAgICAgICAgPSA1OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFCQVNFTkFNRSAgICAgICAgICAgID0gNjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQVRBU09VUkNFTkFNRSAgICAgICAgICAgID0gNzsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERVNDUklQVElPTiAgICAgICAgICAgICAgICA9IDg7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTkVUV09SS1BST1RPQ09MICAgICAgICAgICAgPSA5OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBPUlROVU1CRVIgICAgICAgICAgICAgICAgPSAxMDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBST0xFTkFNRSAgICAgICAgICAgICAgICA9IDExOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNFUlZFUk5BTUUgICAgICAgICAgICAgICAgPSAxMjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhTVEFURU1FTlRTICAgICAgICAgICAgPSAxMzsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTklUSUFMUE9PTFNJWkUgICAgICAgICAgICA9IDE0OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1JTlBPT0xTSVpFICAgICAgICAgICAgICAgID0gMTU7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYUE9PTFNJWkUgICAgICAgICAgICAgICAgPSAxNjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhJRExFVElNRSAgICAgICAgICAgICAgICA9IDE3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBST1BFUlRZQ1lDTEUgICAgICAgICAgICA9IDE4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERSSVZFUlBST1BFUlRJRVMgICAgICAgICAgICA9IDE5OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENMQVNTTkFNRSAgICAgICAgICAgICAgICA9IDIwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFTElNSVRFUiAgICAgICAgICAgICAgICA9IDIxOworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgWEFEQVRBU09VUkNFICAgICAgICAgICAgPSAyMjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQVRBU09VUkNFICAgICAgICAgICAgICAgID0gMjM7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OTkVDVElPTlBPT0xEQVRBU09VUkNFICAgICAgICA9IDI0OworCisgICAgLy9HSkNJTlQKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVEICAgID0gMjU7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVkFMSURBVElPTk1FVEhPRCAgICAgICAgICAgID0gMjY7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVkFMSURBVElPTlRBQkxFTkFNRSAgICAgICAgICAgID0gMjc7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUUkFOU0FDVElPTklTT0xBVElPTiAgICAgICAgPSAyODsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHVUFSQU5URUVJU09MQVRJT05MRVZFTCAgICAgICAgPSAyOTsKKwogICAgIHByaXZhdGUgSGFzaHRhYmxlIGRldGFpbHMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIHByb3BlcnR5LgogICAgICAqCi0gICAgICogQHBhcmFtCXByb3BlcnR5CVByb3BlcnR5IE5hbWUgdG8gYmUgc2V0LgotICAgICAqIEBwYXJhbQl2YWx1ZQkJVmFsdWUgb2YgcHJvcGVydHkgdG8gYmUgc2V0LgorICAgICAqIEBwYXJhbSAgICBwcm9wZXJ0eSAgICBQcm9wZXJ0eSBOYW1lIHRvIGJlIHNldC4KKyAgICAgKiBAcGFyYW0gICAgdmFsdWUgICAgICAgIFZhbHVlIG9mIHByb3BlcnR5IHRvIGJlIHNldC4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXREZXRhaWwoaW50IHByb3BlcnR5LCBTdHJpbmcgdmFsdWUpIHsKLSAgICAJZGV0YWlscy5wdXQobmV3IEludGVnZXIocHJvcGVydHkpLHZhbHVlKTsKKyAgICAgICAgZGV0YWlscy5wdXQobmV3IEludGVnZXIocHJvcGVydHkpLHZhbHVlKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXQgdGhlIHZhbHVlIG9mIHByb3BlcnR5CiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVZhbHVlIG9mIHRoZSBwcm9wZXJ0eS4KKyAgICAgKiBAcmV0dXJuICAgIFZhbHVlIG9mIHRoZSBwcm9wZXJ0eS4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldERldGFpbChpbnQgcHJvcGVydHkpIHsKLSAgICAJaWYgKGRldGFpbHMuY29udGFpbnNLZXkobmV3IEludGVnZXIocHJvcGVydHkpKSkgewotICAgIAkgICAgcmV0dXJuIChTdHJpbmcpIGRldGFpbHMuZ2V0KG5ldyBJbnRlZ2VyKHByb3BlcnR5KSk7Ci0gICAgCX0gZWxzZSB7Ci0gICAgCSAgICByZXR1cm4gbnVsbDsKLSAgICAJfSAgICAJCisgICAgICAgIGlmIChkZXRhaWxzLmNvbnRhaW5zS2V5KG5ldyBJbnRlZ2VyKHByb3BlcnR5KSkpIHsKKyAgICAgICAgICAgIHJldHVybiAoU3RyaW5nKSBkZXRhaWxzLmdldChuZXcgSW50ZWdlcihwcm9wZXJ0eSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDaGVja3Mgd2hldGhlciB0d28gPGNvZGU+RGF0YVNvdXJjZVNwZWM8L2NvZGU+IG9iamVjdHMKICAgICAgKiBhcmUgZXF1YWwgb3Igbm90LgogICAgICAqCi0gICAgICogQHBhcmFtCW9iaglJbnN0YW5jZSBvZiA8Y29kZT5EYXRhU291cmNlU3BlYzwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBvYmogICAgSW5zdGFuY2Ugb2YgPGNvZGU+RGF0YVNvdXJjZVNwZWM8L2NvZGU+IG9iamVjdC4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9iaikgewotICAgIAlpZiAob2JqIGluc3RhbmNlb2YgRGF0YVNvdXJjZVNwZWMpIHsKLSAgICAJICAgIHJldHVybiB0aGlzLmRldGFpbHMuZXF1YWxzKCgoRGF0YVNvdXJjZVNwZWMpb2JqKS5kZXRhaWxzKTsKLSAgICAJfQotICAgIAlyZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBEYXRhU291cmNlU3BlYykgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGV0YWlscy5lcXVhbHMoKChEYXRhU291cmNlU3BlYylvYmopLmRldGFpbHMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIGhhc2hDb2RlIG9mIHRoaXMgPGNvZGU+RGF0YVNvdXJjZVNwZWM8L2NvZGU+IG9iamVjdC4KICAgICAgKgotICAgICAqIEByZXR1cm4JaGFzaENvZGUgb2YgdGhpcyBvYmplY3QuCisgICAgICogQHJldHVybiAgICBoYXNoQ29kZSBvZiB0aGlzIG9iamVjdC4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewotICAgIAlyZXR1cm4gdGhpcy5kZXRhaWxzLmhhc2hDb2RlKCk7Ci0gICAgfSAgICAKKyAgICAgICAgcmV0dXJuIHRoaXMuZGV0YWlscy5oYXNoQ29kZSgpOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9idWlsZC54bWwKaW5kZXggZWY0MzhmYy4uM2I0ZmFlYiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9idWlsZC54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPHByb2plY3QgbmFtZT0iamRiY19jb25uZWN0b3IiIGJhc2VkaXI9Ii4iIGRlZmF1bHQ9ImJ1aWxkIj4KICAgPHByb3BlcnR5IG5hbWU9InBrZy5kaXIiIHZhbHVlPSJjb20vc3VuL2dqYy9jb21tb24iLz4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJjbGVhbiI+CiAgICAgPGFudCBhbnRmaWxlPSJidWlsZC54bWwiIGRpcj0iJHtnamMuaG9tZX0vYmluIiB0YXJnZXQ9ImNsZWFuIi8+CiAgIDwvdGFyZ2V0PgpAQCAtMzYsMTMgKzM2LDEzIEBACiAKICAgPHRhcmdldCBuYW1lPSJjb21waWxlMTMiIGRlcGVuZHM9ImNvbXBpbGUiLz4KICAgPHRhcmdldCBuYW1lPSJjb21waWxlMTQiIGRlcGVuZHM9ImNvbXBpbGUiLz4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlMTMiIGRlcGVuZHM9InBhY2thZ2UiLz4KICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlMTQiIGRlcGVuZHM9InBhY2thZ2UiLz4KIAogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkMTMiIGRlcGVuZHM9ImNvbXBpbGUxMywgcGFja2FnZTEzIi8+CiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQxNCIgZGVwZW5kcz0iY29tcGlsZTE0LCBwYWNrYWdlMTQiLz4KLSAgICAKKwogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJidWlsZDEzLCBidWlsZDE0Ii8+CiAKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L0Nvbm5lY3Rpb25Ib2xkZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L0Nvbm5lY3Rpb25Ib2xkZXIuamF2YQppbmRleCBhOTU2ZDk3Li4xMWFkNzQ2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9Db25uZWN0aW9uSG9sZGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvQ29ubmVjdGlvbkhvbGRlci5qYXZhCkBAIC0yNCwyNCArMjQsMjQgQEAKIGltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcjsKIAogLyoqCi0gKiBIb2xkcyB0aGUgamF2YS5zcWwuQ29ubmVjdGlvbiBvYmplY3QsIHdoaWNoIGlzIHRvIGJlIAorICogSG9sZHMgdGhlIGphdmEuc3FsLkNvbm5lY3Rpb24gb2JqZWN0LCB3aGljaCBpcyB0byBiZQogICogcGFzc2VkIHRvIHRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMjMKLSAqIEBhdXRob3IJQmlub2QgUC5HCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzIzCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRwogICovCi1wdWJsaWMgY2xhc3MgQ29ubmVjdGlvbkhvbGRlciBpbXBsZW1lbnRzIENvbm5lY3Rpb257IAorcHVibGljIGNsYXNzIENvbm5lY3Rpb25Ib2xkZXIgaW1wbGVtZW50cyBDb25uZWN0aW9uewogCiAgICAgcHJpdmF0ZSBDb25uZWN0aW9uIGNvbjsKLSAgICAKKwogICAgIHByaXZhdGUgTWFuYWdlZENvbm5lY3Rpb24gbWM7Ci0gICAgCi0gICAgcHJpdmF0ZSBib29sZWFuIHdyYXBwZWRBbHJlYWR5ID0gZmFsc2U7ICAgIAotICAgIAorCisgICAgcHJpdmF0ZSBib29sZWFuIHdyYXBwZWRBbHJlYWR5ID0gZmFsc2U7CisKICAgICBwcml2YXRlIGJvb2xlYW4gaXNDbG9zZWQgPSBmYWxzZTsKLSAgICAKKwogICAgIHByaXZhdGUgYm9vbGVhbiB2YWxpZCA9IHRydWU7Ci0gICAgCisKICAgICBwcml2YXRlIGJvb2xlYW4gYWN0aXZlID0gZmFsc2U7CiAgICAgLyoqCiAgICAgICogVGhlIGFjdGl2ZSBmbGFnIGlzIGZhbHNlIHdoZW4gdGhlIGNvbm5lY3Rpb24gaGFuZGxlIGlzCkBAIC01MywyMTkgKzUzLDIxOSBAQAogICAgICAqIGZ1bmN0aW9uLCB0aGUgYWJvdmUgbWV0aG9kIGludm9jYXRpb24gc3VjY2VlZHM7IG90aGVyd2lzZQogICAgICAqIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24uCiAgICAgICovCi0gICAgCisKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RzIGEgQ29ubmVjdGlvbiBob2xkZXIuCi0gICAgICogCi0gICAgICogQHBhcmFtCWNvbgk8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgY29uICAgIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KICAgICAgKi8KICAgICBwdWJsaWMgQ29ubmVjdGlvbkhvbGRlcihDb25uZWN0aW9uIGNvbiwgTWFuYWdlZENvbm5lY3Rpb24gbWMpIHsKICAgICAgICAgdGhpcy5jb24gPSBjb247CiAgICAgICAgIHRoaXMubWMgID0gbWM7CiAgICAgfQotICAgICAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIGFjdHVhbCBjb25uZWN0aW9uIGluIHRoaXMgaG9sZGVyIG9iamVjdC4KLSAgICAgKiAKLSAgICAgKiBAcmV0dXJuCUNvbm5lY3Rpb24gb2JqZWN0LgorICAgICAqCisgICAgICogQHJldHVybiAgICBDb25uZWN0aW9uIG9iamVjdC4KICAgICAgKi8KICAgICBDb25uZWN0aW9uIGdldENvbm5lY3Rpb24oKSB7Ci0gICAgCXJldHVybiBjb247CisgICAgICAgIHJldHVybiBjb247CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZmxhZyB0byBpbmRpY2F0ZSB0aGF0LCB0aGUgY29ubmVjdGlvbiBpcyB3cmFwcGVkIGFscmVhZHkgb3Igbm90LgogICAgICAqCi0gICAgICogQHBhcmFtCXdyYXBGbGFnCQorICAgICAqIEBwYXJhbSAgICB3cmFwRmxhZwogICAgICAqLwogICAgIHZvaWQgd3JhcHBlZChib29sZWFuIHdyYXBGbGFnKXsKICAgICAgICAgdGhpcy53cmFwcGVkQWxyZWFkeSA9IHdyYXBGbGFnOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgd2hldGhlciBpdCBpcyB3cmFwcGVkIGFscmVhZHkgb3Igbm90LgogICAgICAqCi0gICAgICogQHJldHVybgl3cmFwcGVkIGZsYWcuCisgICAgICogQHJldHVybiAgICB3cmFwcGVkIGZsYWcuCiAgICAgICovCiAgICAgYm9vbGVhbiBpc1dyYXBwZWQoKXsKICAgICAgICAgcmV0dXJuIHdyYXBwZWRBbHJlYWR5OwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZSByZXNwb25zaWJsZQogICAgICAqIGZvciB0aGlzIGNvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKi8KICAgICBNYW5hZ2VkQ29ubmVjdGlvbiBnZXRNYW5hZ2VkQ29ubmVjdGlvbigpIHsKICAgICAgICAgcmV0dXJuIG1jOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJlcGxhY2UgdGhlIGFjdHVhbCA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3Qgd2l0aCB0aGUgb25lCi0gICAgICogc3VwcGxpZWQuIEFsc28gcmVwbGFjZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gbGluay4gICAgIAorICAgICAqIHN1cHBsaWVkLiBBbHNvIHJlcGxhY2UgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGxpbmsuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JY29uIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAcGFyYW0JbWMgIDxjb2RlPiBNYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBjb24gPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBtYyAgPGNvZGU+IE1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCiAgICAgICovCiAgICAgdm9pZCBhc3NvY2lhdGVDb25uZWN0aW9uKENvbm5lY3Rpb24gY29uLCBNYW5hZ2VkQ29ubmVjdGlvbiBtYykgewotICAgIAl0aGlzLm1jID0gbWM7Ci0gICAgCXRoaXMuY29uID0gY29uOworICAgICAgICB0aGlzLm1jID0gbWM7CisgICAgICAgIHRoaXMuY29uID0gY29uOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENsZWFycyBhbGwgd2FybmluZ3MgcmVwb3J0ZWQgZm9yIHRoZSB1bmRlcmx5aW5nIGNvbm5lY3Rpb24gIG9iamVjdC4KICAgICAgKgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgY2xlYXJXYXJuaW5ncygpIHRocm93cyBTUUxFeGNlcHRpb257ICAgIAotCWNoZWNrVmFsaWRpdHkoKTsKKyAgICBwdWJsaWMgdm9pZCBjbGVhcldhcm5pbmdzKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIGNvbi5jbGVhcldhcm5pbmdzKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogQ2xvc2VzIHRoZSBsb2dpY2FsIGNvbm5lY3Rpb24uICAgIAorICAgICAqIENsb3NlcyB0aGUgbG9naWNhbCBjb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgY2xvc2UoKSB0aHJvd3MgU1FMRXhjZXB0aW9uewogICAgICAgICBpc0Nsb3NlZCA9IHRydWU7Ci0gICAgICAgIG1jLmNvbm5lY3Rpb25DbG9zZWQobnVsbCwgdGhpcyk7ICAgICAgICAKKyAgICAgICAgbWMuY29ubmVjdGlvbkNsb3NlZChudWxsLCB0aGlzKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBJbnZhbGlkYXRlcyB0aGlzIG9iamVjdC4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBpbnZhbGlkYXRlKCkgewotICAgIAl2YWxpZCA9IGZhbHNlOworICAgICAgICB2YWxpZCA9IGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENsb3NlcyB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpbnZvbHZlZCBpbiB0aGlzLgogICAgICAqCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KLSAgICB2b2lkIGFjdHVhbENsb3NlKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsgICAgCisgICAgdm9pZCBhY3R1YWxDbG9zZSgpIHRocm93cyBTUUxFeGNlcHRpb257CiAgICAgICAgIGNvbi5jbG9zZSgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbW1pdCB0aGUgY2hhbmdlcyBpbiB0aGUgdW5kZXJseWluZyBDb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjb21taXQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24uY29tbWl0KCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24uY29tbWl0KCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIHN0YXRlbWVudCBmcm9tIHRoZSB1bmRlcmx5aW5nIENvbm5lY3Rpb24KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+U3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEByZXR1cm4gICAgPGNvZGU+U3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTdGF0ZW1lbnQgY3JlYXRlU3RhdGVtZW50KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIHJldHVybiBjb24uY3JlYXRlU3RhdGVtZW50KCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIHN0YXRlbWVudCBmcm9tIHRoZSB1bmRlcmx5aW5nIENvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0VHlwZQlUeXBlIG9mIHRoZSBSZXN1bHRTZXQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0Q29uY3VycmVuY3kJUmVzdWx0U2V0IENvbmN1cnJlbmN5LgotICAgICAqIEByZXR1cm4JPGNvZGU+U3RhdGVtZW50PC9jb2RlPiBvYmplY3QuICAgICAKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldFR5cGUgICAgVHlwZSBvZiB0aGUgUmVzdWx0U2V0CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldENvbmN1cnJlbmN5ICAgIFJlc3VsdFNldCBDb25jdXJyZW5jeS4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgU3RhdGVtZW50IGNyZWF0ZVN0YXRlbWVudChpbnQgcmVzdWx0U2V0VHlwZSwgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgcmV0dXJuIGNvbi5jcmVhdGVTdGF0ZW1lbnQocmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3kpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBzdGF0ZW1lbnQgZnJvbSB0aGUgdW5kZXJseWluZyBDb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHBhcmFtCXJlc3VsdFNldFR5cGUJVHlwZSBvZiB0aGUgUmVzdWx0U2V0Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldENvbmN1cnJlbmN5CVJlc3VsdFNldCBDb25jdXJyZW5jeS4KLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0SG9sZGFiaWxpdHkJUmVzdWx0U2V0IEhvbGRhYmlsaXR5LiAgICAgCi0gICAgICogQHJldHVybgk8Y29kZT5TdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4gCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgICAgICAKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0VHlwZSAgICBUeXBlIG9mIHRoZSBSZXN1bHRTZXQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0Q29uY3VycmVuY3kgICAgUmVzdWx0U2V0IENvbmN1cnJlbmN5LgorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRIb2xkYWJpbGl0eSAgICBSZXN1bHRTZXQgSG9sZGFiaWxpdHkuCisgICAgICogQHJldHVybiAgICA8Y29kZT5TdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCi0gICAgcHVibGljIFN0YXRlbWVudCBjcmVhdGVTdGF0ZW1lbnQoaW50IHJlc3VsdFNldFR5cGUsIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwgCi0gICAgCQkJCSAgICAgaW50IHJlc3VsdFNldEhvbGRhYmlsdHkpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCQkJCSAgICAgCisgICAgcHVibGljIFN0YXRlbWVudCBjcmVhdGVTdGF0ZW1lbnQoaW50IHJlc3VsdFNldFR5cGUsIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0SG9sZGFiaWx0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICByZXR1cm4gY29uLmNyZWF0ZVN0YXRlbWVudChyZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSwKLSAgICAgICAgCQkJICAgcmVzdWx0U2V0SG9sZGFiaWx0eSk7CisgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFNldEhvbGRhYmlsdHkpOwogICAgIH0KLSAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgY3VycmVudCBhdXRvLWNvbW1pdCBtb2RlIGZvciB0aGUgdW5kZXJseWluZyA8Y29kZT4gQ29ubmVjdGlvbjwvY29kZT4uCiAgICAgICoKICAgICAgKiBAcmV0dXJuIFRoZSBjdXJyZW50IHN0YXRlIG9mIGNvbm5lY3Rpb24ncyBhdXRvLWNvbW1pdCBtb2RlLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gZ2V0QXV0b0NvbW1pdCgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uZ2V0QXV0b0NvbW1pdCgpOwotICAgIH0gICAKLSAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uZ2V0QXV0b0NvbW1pdCgpOworICAgIH0KKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgdW5kZXJseWluZyA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QncyBjYXRhbG9nIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCUNhdGFsb2cgTmFtZS4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHJldHVybiAgICBDYXRhbG9nIE5hbWUuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q2F0YWxvZygpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICByZXR1cm4gY29uLmdldENhdGFsb2coKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgaG9sZGFiaWxpdHkgb2YgPGNvZGU+UmVzdWx0U2V0PC9jb2RlPiBvYmplY3RzIGNyZWF0ZWQKICAgICAgKiB1c2luZyB0aGlzIGNvbm5lY3Rpb24gb2JqZWN0LgogICAgICAqCi0gICAgICogQHJldHVybglob2xkYWJpbGl0eSB2YWx1ZS4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHJldHVybiAgICBob2xkYWJpbGl0eSB2YWx1ZS4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIGludCBnZXRIb2xkYWJpbGl0eSgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybgljb24uZ2V0SG9sZGFiaWxpdHkoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiAgICBjb24uZ2V0SG9sZGFiaWxpdHkoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIDxjb2RlPkRhdGFiYXNlTWV0YURhdGE8L2NvZGU+b2JqZWN0IGZyb20gdGhlIHVuZGVybHlpbmcKICAgICAgKiA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KICAgICAgKgogICAgICAqIEByZXR1cm4gPGNvZGU+RGF0YWJhc2VNZXRhRGF0YTwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIERhdGFiYXNlTWV0YURhdGEgZ2V0TWV0YURhdGEoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLmdldE1ldGFEYXRhKCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLmdldE1ldGFEYXRhKCk7CiAgICAgfQotIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoaXMgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0J3MgY3VycmVudCB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwuCiAgICAgICoKICAgICAgKiBAcmV0dXJuIFRyYW5zYWN0aW9uIGxldmVsCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLyAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIHJldHVybiBjb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBSZXRyaWV2ZXMgdGhlIDxjb2RlPk1hcDwvY29kZT4gb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCAKKyAgICAgKiBSZXRyaWV2ZXMgdGhlIDxjb2RlPk1hcDwvY29kZT4gb2JqZWN0IGFzc29jaWF0ZWQgd2l0aAogICAgICAqIDxjb2RlPiBDb25uZWN0aW9uPC9jb2RlPiBPYmplY3QuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVR5cGVNYXAgc2V0IGluIHRoaXMgb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcmV0dXJuICAgIFR5cGVNYXAgc2V0IGluIHRoaXMgb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgTWFwIGdldFR5cGVNYXAoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLmdldFR5cGVNYXAoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uZ2V0VHlwZU1hcCgpOwogICAgIH0KIAogLyoKQEAgLTI3OSwxODQgKzI3OSwxODQgQEAKICAgICAgKiA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCiAgICAgICoKICAgICAgKiBAcmV0dXJuIEZpcnN0IDxjb2RlPiBTUUxXYXJuaW5nPC9jb2RlPiBPYmplY3Qgb3IgbnVsbC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTUUxXYXJuaW5nIGdldFdhcm5pbmdzKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5nZXRXYXJuaW5ncygpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5nZXRXYXJuaW5ncygpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB3aGV0aGVyIHVuZGVybHlpbmcgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGlzIGNsb3NlZC4KICAgICAgKgotICAgICAqIEByZXR1cm4JdHJ1ZSBpZiA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaXMgY2xvc2VkLCBmYWxzZQotICAgICAqIAkJaWYgaXQgaXMgY2xvc2VkLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcmV0dXJuICAgIHRydWUgaWYgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGlzIGNsb3NlZCwgZmFsc2UKKyAgICAgKiAgICAgICAgIGlmIGl0IGlzIGNsb3NlZC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gaXNDbG9zZWQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLSAgICAJcmV0dXJuIGlzQ2xvc2VkOworICAgICAgICByZXR1cm4gaXNDbG9zZWQ7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHdoZXRoZXIgdGhpcyA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaXMgcmVhZC1vbmx5LgogICAgICAqCi0gICAgICogQHJldHVybgl0cnVlIGlmIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gaXMgcmVhZC1vbmx5LCBmYWxzZSBvdGhlci13aXNlCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEByZXR1cm4gICAgdHJ1ZSBpZiA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IGlzIHJlYWQtb25seSwgZmFsc2Ugb3RoZXItd2lzZQorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc1JlYWRPbmx5KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5pc1JlYWRPbmx5KCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLmlzUmVhZE9ubHkoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb252ZXJ0cyB0aGUgZ2l2ZW4gU1FMIHN0YXRlbWVudCBpbnRvIHRoZSBzeXN0ZW0ncyBuYXRpdmUgU1FMIGdyYW1tZXIuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBzdGF0ZW1lbnQgLCB0byBiZSBjb252ZXJ0ZWQuCi0gICAgICogQHJldHVybglDb252ZXJ0ZWQgU1FMIHN0cmluZy4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgc3RhdGVtZW50ICwgdG8gYmUgY29udmVydGVkLgorICAgICAqIEByZXR1cm4gICAgQ29udmVydGVkIFNRTCBzdHJpbmcuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgbmF0aXZlU1FMKFN0cmluZyBzcWwpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24ubmF0aXZlU1FMKHNxbCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLm5hdGl2ZVNRTChzcWwpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIGNhbGxpbmcgZGF0YWJhc2UKICAgICAgKiBzdG9yZWQgcHJvY2VkdXJlcy4KICAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAogICAgICAqIEByZXR1cm4gPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgQ2FsbGFibGVTdGF0ZW1lbnQgcHJlcGFyZUNhbGwoU3RyaW5nIHNxbCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlQ2FsbChzcWwpOwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBjYWxsaW5nIGRhdGFiYXNlCi0gICAgICogc3RvcmVkIHByb2NlZHVyZXMuCi0gICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0VHlwZQlUeXBlIG9mIHRoZSBSZXN1bHRTZXQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0Q29uY3VycmVuY3kJUmVzdWx0U2V0IENvbmN1cnJlbmN5LgotICAgICAqIEByZXR1cm4gPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLwotICAgIHB1YmxpYyBDYWxsYWJsZVN0YXRlbWVudCBwcmVwYXJlQ2FsbChTdHJpbmcgc3FsLGludCByZXN1bHRTZXRUeXBlLCAKLSAgICAJCQkJCWludCByZXN1bHRTZXRDb25jdXJyZW5jeSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAkJCQkJCi0gICAgCXJldHVybiBjb24ucHJlcGFyZUNhbGwoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSk7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIGNhbGxpbmcgZGF0YWJhc2UKLSAgICAgKiBzdG9yZWQgcHJvY2VkdXJlcy4KLSAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRUeXBlCVR5cGUgb2YgdGhlIFJlc3VsdFNldAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRDb25jdXJyZW5jeQlSZXN1bHRTZXQgQ29uY3VycmVuY3kuCi0gICAgICogQHBhcmFtCXJlc3VsdFNldEhvbGRhYmlsaXR5CVJlc3VsdFNldCBIb2xkYWJpbGl0eS4gICAgICAgICAgCi0gICAgICogQHJldHVybiA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovCi0gICAgcHVibGljIENhbGxhYmxlU3RhdGVtZW50IHByZXBhcmVDYWxsKFN0cmluZyBzcWwsIGludCByZXN1bHRTZXRUeXBlLCAKLSAgICAJCQkJCSBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3ksIAotICAgIAkJCQkJIGludCByZXN1bHRTZXRIb2xkYWJpbHR5KSB0aHJvd3MgU1FMRXhjZXB0aW9uewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCQkJCQkgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZUNhbGwoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSwKLSAgICAJCQkgICAgICAgcmVzdWx0U2V0SG9sZGFiaWx0eSk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVDYWxsKHNxbCk7CiAgICAgfQogCiAgICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZyAKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBjYWxsaW5nIGRhdGFiYXNlCisgICAgICogc3RvcmVkIHByb2NlZHVyZXMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0VHlwZSAgICBUeXBlIG9mIHRoZSBSZXN1bHRTZXQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0Q29uY3VycmVuY3kgICAgUmVzdWx0U2V0IENvbmN1cnJlbmN5LgorICAgICAqIEByZXR1cm4gPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBDYWxsYWJsZVN0YXRlbWVudCBwcmVwYXJlQ2FsbChTdHJpbmcgc3FsLGludCByZXN1bHRTZXRUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5KSB0aHJvd3MgU1FMRXhjZXB0aW9ueworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlQ2FsbChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBjYWxsaW5nIGRhdGFiYXNlCisgICAgICogc3RvcmVkIHByb2NlZHVyZXMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0VHlwZSAgICBUeXBlIG9mIHRoZSBSZXN1bHRTZXQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0Q29uY3VycmVuY3kgICAgUmVzdWx0U2V0IENvbmN1cnJlbmN5LgorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRIb2xkYWJpbGl0eSAgICBSZXN1bHRTZXQgSG9sZGFiaWxpdHkuCisgICAgICogQHJldHVybiA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCisgICAgcHVibGljIENhbGxhYmxlU3RhdGVtZW50IHByZXBhcmVDYWxsKFN0cmluZyBzcWwsIGludCByZXN1bHRTZXRUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0SG9sZGFiaWx0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZUNhbGwoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0U2V0SG9sZGFiaWx0eSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZwogICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQogICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CiAgICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCk7CiAgICAgfQotICAgIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcgCi0gICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCi0gICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JYXV0b0dlbmVyYXRlZEtleXMgYSBmbGFnIGluZGljYXRpbmcgQXV0b0dlbmVyYXRlZEtleXMgbmVlZCB0byBiZSByZXR1cm5lZC4KLSAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8KLSAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLCBpbnQgYXV0b0dlbmVyYXRlZEtleXMpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsYXV0b0dlbmVyYXRlZEtleXMpOwotICAgIH0gICAgCi0gICAgICAKLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nIAotICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQotICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50Ci0gICAgICogQHBhcmFtCWNvbHVtbkluZGV4ZXMgYW4gYXJyYXkgb2YgY29sdW1uIGluZGV4ZXMgaW5kaWNhdGluZyB0aGUgY29sdW1ucyB0aGF0IHNob3VsZCBiZQotICAgICAqCQlyZXR1cm5lZCBmcm9tIHRoZSBpbnNlcnRlZCByb3cgb3Igcm93cy4KLSAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8KLSAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLCBpbnRbXSBjb2x1bW5JbmRleGVzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLGNvbHVtbkluZGV4ZXMpOwotICAgIH0gICAgICAgICAgCi0gCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZyAKLSAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKLSAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRUeXBlCVR5cGUgb2YgdGhlIFJlc3VsdFNldAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRDb25jdXJyZW5jeQlSZXN1bHRTZXQgQ29uY3VycmVuY3kuCi0gICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovCi0gICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCxpbnQgcmVzdWx0U2V0VHlwZSwgCi0gICAgCQkJCQlpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3kpIHRocm93cyBTUUxFeGNlcHRpb257Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAJCQkJCQotICAgIAlyZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSk7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcgCi0gICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCi0gICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0VHlwZQlUeXBlIG9mIHRoZSBSZXN1bHRTZXQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0Q29uY3VycmVuY3kJUmVzdWx0U2V0IENvbmN1cnJlbmN5LgotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRIb2xkYWJpbGl0eQlSZXN1bHRTZXQgSG9sZGFiaWxpdHkuICAgICAgICAgIAotICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLwotICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludCByZXN1bHRTZXRUeXBlLCAKLSAgICAJCQkJCSBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3ksIAotICAgIAkJCQkJIGludCByZXN1bHRTZXRIb2xkYWJpbHR5KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAkJCQkJIAotICAgIAlyZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSwKLSAgICAJCQkJICAgIHJlc3VsdFNldEhvbGRhYmlsdHkpOwotICAgIH0gICAgICAgICAgIAogCiAgICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZyAKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nCiAgICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JY29sdW1uTmFtZXMgTmFtZSBvZiBib3VuZCBjb2x1bW5zLgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICBhdXRvR2VuZXJhdGVkS2V5cyBhIGZsYWcgaW5kaWNhdGluZyBBdXRvR2VuZXJhdGVkS2V5cyBuZWVkIHRvIGJlIHJldHVybmVkLgogICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLCBpbnQgYXV0b0dlbmVyYXRlZEtleXMpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCxhdXRvR2VuZXJhdGVkS2V5cyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZworICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIGNvbHVtbkluZGV4ZXMgYW4gYXJyYXkgb2YgY29sdW1uIGluZGV4ZXMgaW5kaWNhdGluZyB0aGUgY29sdW1ucyB0aGF0IHNob3VsZCBiZQorICAgICAqICAgICAgICByZXR1cm5lZCBmcm9tIHRoZSBpbnNlcnRlZCByb3cgb3Igcm93cy4KKyAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLCBpbnRbXSBjb2x1bW5JbmRleGVzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsY29sdW1uSW5kZXhlcyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZworICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldFR5cGUgICAgVHlwZSBvZiB0aGUgUmVzdWx0U2V0CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldENvbmN1cnJlbmN5ICAgIFJlc3VsdFNldCBDb25jdXJyZW5jeS4KKyAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLGludCByZXN1bHRTZXRUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5KSB0aHJvd3MgU1FMRXhjZXB0aW9ueworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3kpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcKKyAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRUeXBlICAgIFR5cGUgb2YgdGhlIFJlc3VsdFNldAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRDb25jdXJyZW5jeSAgICBSZXN1bHRTZXQgQ29uY3VycmVuY3kuCisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldEhvbGRhYmlsaXR5ICAgIFJlc3VsdFNldCBIb2xkYWJpbGl0eS4KKyAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLCBpbnQgcmVzdWx0U2V0VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3ksCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdFNldEhvbGRhYmlsdHkpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3ksCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRTZXRIb2xkYWJpbHR5KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nCisgICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgY29sdW1uTmFtZXMgTmFtZSBvZiBib3VuZCBjb2x1bW5zLgorICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIFN0cmluZ1tdIGNvbHVtbk5hbWVzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLGNvbHVtbk5hbWVzKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsY29sdW1uTmFtZXMpOwogICAgIH0KIAogICAgIHB1YmxpYyBDbG9iIGNyZWF0ZUNsb2IoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKQEAgLTUwNiwxNjIgKzUwNiwxNjIgQEAKICAgICAvKioKICAgICAgKiBSZW1vdmVzIHRoZSBnaXZlbiA8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdCBmcm9tIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLgogICAgICAqCi0gICAgICogQHBhcmFtCXNhdmVwb2ludAk8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdAotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgc2F2ZXBvaW50ICAgIDxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0CisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJlbGVhc2VTYXZlcG9pbnQoU2F2ZXBvaW50IHNhdmVwb2ludCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnJlbGVhc2VTYXZlcG9pbnQoc2F2ZXBvaW50KTsKLSAgICB9IAotICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnJlbGVhc2VTYXZlcG9pbnQoc2F2ZXBvaW50KTsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBSb2xscyBiYWNrIHRoZSBjaGFuZ2VzIG1hZGUgaW4gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24uCiAgICAgICoKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovICAgICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCiAgICAgcHVibGljIHZvaWQgcm9sbGJhY2soKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24ucm9sbGJhY2soKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5yb2xsYmFjaygpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJvbGxzIGJhY2sgdGhlIGNoYW5nZXMgbWFkZSBhZnRlciB0aGUgc2F2ZXBvaW50LgogICAgICAqCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLyAgICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJvbGxiYWNrKFNhdmVwb2ludCBzYXZlcG9pbnQpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5yb2xsYmFjayhzYXZlcG9pbnQpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnJvbGxiYWNrKHNhdmVwb2ludCk7CiAgICAgfQotICAgICAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGF1dG8tY29tbW1pdCBtb2RlIG9mIHRoZSA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JYXV0b0NvbW1pdCBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgdGhlIGF1dG8tY29tbWl0IG1vZGUuICAgICAKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIGF1dG9Db21taXQgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIHRoZSBhdXRvLWNvbW1pdCBtb2RlLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRBdXRvQ29tbWl0KGJvb2xlYW4gYXV0b0NvbW1pdCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnNldEF1dG9Db21taXQoYXV0b0NvbW1pdCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24uc2V0QXV0b0NvbW1pdChhdXRvQ29tbWl0KTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBjYXRhbG9nIG5hbWUgdG8gdGhlIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdAogICAgICAqCi0gICAgICogQHBhcmFtCWNhdGFsb2cJQ2F0YWxvZyBuYW1lLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgY2F0YWxvZyAgICBDYXRhbG9nIG5hbWUuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldENhdGFsb2coU3RyaW5nIGNhdGFsb2cpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5zZXRDYXRhbG9nKGNhdGFsb2cpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnNldENhdGFsb2coY2F0YWxvZyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogU2V0cyB0aGUgaG9sZGFiaWxpdHkgb2YgPGNvZGU+UmVzdWx0U2V0PC9jb2RlPiBvYmplY3RzIGNyZWF0ZWQgCisgICAgICogU2V0cyB0aGUgaG9sZGFiaWxpdHkgb2YgPGNvZGU+UmVzdWx0U2V0PC9jb2RlPiBvYmplY3RzIGNyZWF0ZWQKICAgICAgKiB1c2luZyB0aGlzIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KICAgICAgKgotICAgICAqIEBwYXJhbQlob2xkYWJpbGl0eQlBIDxjb2RlPlJlc3VsdFNldDwvY29kZT4gaG9sZGFiaWxpdHkgY29uc3RhbnQKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIGhvbGRhYmlsaXR5ICAgIEEgPGNvZGU+UmVzdWx0U2V0PC9jb2RlPiBob2xkYWJpbGl0eSBjb25zdGFudAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRIb2xkYWJpbGl0eShpbnQgaG9sZGFiaWxpdHkpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgIAljb24uc2V0SG9sZGFiaWxpdHkoaG9sZGFiaWxpdHkpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgIGNvbi5zZXRIb2xkYWJpbGl0eShob2xkYWJpbGl0eSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogUHV0cyB0aGUgY29ubmVjdGlvbiBpbiByZWFkLW9ubHkgbW9kZSBhcyBhIGhpbnQgdG8gdGhlIGRyaXZlciB0byAKKyAgICAgKiBQdXRzIHRoZSBjb25uZWN0aW9uIGluIHJlYWQtb25seSBtb2RlIGFzIGEgaGludCB0byB0aGUgZHJpdmVyIHRvCiAgICAgICogcGVyZm9ybSBkYXRhYmFzZSBvcHRpbWl6YXRpb25zLgogICAgICAqCi0gICAgICogQHBhcmFtCXJlYWRPbmx5ICB0cnVlIGVuYWJsZXMgcmVhZC1vbmx5IG1vZGUsIGZhbHNlIGRpc2FibGVzIGl0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgcmVhZE9ubHkgIHRydWUgZW5hYmxlcyByZWFkLW9ubHkgbW9kZSwgZmFsc2UgZGlzYWJsZXMgaXQuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFJlYWRPbmx5KGJvb2xlYW4gcmVhZE9ubHkpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5zZXRSZWFkT25seShyZWFkT25seSk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24uc2V0UmVhZE9ubHkocmVhZE9ubHkpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYW5kIHVubmFtZWQgc2F2ZXBvaW50IGFuZCByZXR1cm5zIGFuIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHRoYXQuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0LgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QuCiAgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTYXZlcG9pbnQgc2V0U2F2ZXBvaW50KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5zZXRTYXZlcG9pbnQoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uc2V0U2F2ZXBvaW50KCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIHNhdmVwb2ludCB3aXRoIHRoZSBuYW1lIGFuZCByZXR1cm5zIGFuIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHRoYXQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbmFtZQlOYW1lIG9mIHRoZSBzYXZlcG9pbnQuCi0gICAgICogQHJldHVybgk8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIG5hbWUgICAgTmFtZSBvZiB0aGUgc2F2ZXBvaW50LgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTYXZlcG9pbnQgc2V0U2F2ZXBvaW50KFN0cmluZyBuYW1lKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnNldFNhdmVwb2ludChuYW1lKTsKLSAgICB9ICAgIAotICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5zZXRTYXZlcG9pbnQobmFtZSk7CisgICAgfQorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsLgogICAgICAqCi0gICAgICogQHBhcmFtCWxldmVsIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIGxldmVsIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oaW50IGxldmVsKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24obGV2ZWwpOwotICAgIH0gICAgIAotICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKGxldmVsKTsKKyAgICB9CisKICAgICAvKioKLSAgICAgKiBJbnN0YWxscyB0aGUgZ2l2ZW4gPGNvZGU+TWFwPC9jb2RlPiBvYmplY3QgYXMgdGhlIHR5b2UgbWFwIGZvciB0aGlzIAorICAgICAqIEluc3RhbGxzIHRoZSBnaXZlbiA8Y29kZT5NYXA8L2NvZGU+IG9iamVjdCBhcyB0aGUgdHlvZSBtYXAgZm9yIHRoaXMKICAgICAgKiA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KICAgICAgKgotICAgICAqIEBwYXJhbQltYXAJPGNvZGU+TWFwPC9jb2RlPiBhIE1hcCBvYmplY3QgdG8gaW5zdGFsbC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIG1hcCAgICA8Y29kZT5NYXA8L2NvZGU+IGEgTWFwIG9iamVjdCB0byBpbnN0YWxsLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRUeXBlTWFwKE1hcCBtYXApIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsKLSAgICAJY29uLnNldFR5cGVNYXAobWFwKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5zZXRUeXBlTWFwKG1hcCk7CiAgICAgfQogCiAgICAgcHVibGljIGludCBnZXROZXR3b3JrVGltZW91dCgpIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBuZXcgZmVhdHVyZS4iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXROZXR3b3JrVGltZW91dChFeGVjdXRvciBleGVjdXRvciwgaW50IG1pbGxpc2Vjb25kcykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICB0aHJvdyBuZXcgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiRG8gbm90IHN1cHBvcnQgSmF2YSA3IG5ldyBmZWF0dXJlLiIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGFib3J0KEV4ZWN1dG9yIGV4ZWN1dG9yKSAgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgbmV3IGZlYXR1cmUuIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBnZXRTY2hlbWEoKSB0aHJvd3MgU1FMRXhjZXB0aW9uewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBuZXcgZmVhdHVyZS4iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRTY2hlbWEoU3RyaW5nIHNjaGVtYSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgbmV3IGZlYXR1cmUuIik7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBDaGVja3MgdGhlIHZhbGlkaXR5IG9mIHRoaXMgb2JqZWN0CiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIGNoZWNrVmFsaWRpdHkoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLSAgICAJaWYgKGlzQ2xvc2VkKSB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uICgiQ29ubmVjdGlvbiBjbG9zZWQiKTsKLSAgICAJaWYgKCF2YWxpZCkgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAoIkludmFsaWQgQ29ubmVjdGlvbiIpOwotICAgIAlpZihhY3RpdmUgPT0gZmFsc2UpIHsKLSAgICAJICAgIG1jLmNoZWNrSWZBY3RpdmUodGhpcyk7Ci0gICAgCX0KKyAgICAgICAgaWYgKGlzQ2xvc2VkKSB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uICgiQ29ubmVjdGlvbiBjbG9zZWQiKTsKKyAgICAgICAgaWYgKCF2YWxpZCkgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAoIkludmFsaWQgQ29ubmVjdGlvbiIpOworICAgICAgICBpZihhY3RpdmUgPT0gZmFsc2UpIHsKKyAgICAgICAgICAgIG1jLmNoZWNrSWZBY3RpdmUodGhpcyk7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBhY3RpdmUgZmxhZyB0byB0cnVlCiAgICAgICoKLSAgICAgKiBAcGFyYW0JYWN0dglib29sZWFuCisgICAgICogQHBhcmFtICAgIGFjdHYgICAgYm9vbGVhbgogICAgICAqLwogICAgIHZvaWQgc2V0QWN0aXZlKGJvb2xlYW4gYWN0dikgewogICAgICAgICBhY3RpdmUgPSBhY3R2OwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQppbmRleCBhYzdlNzQ4Li5mMDY3NWE0IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQpAQCAtMzMsMTkgKzMzLDE5IEBACiAgKiBUaGlzIGNsYXNzIGlzIGV4dGVuZGVkIGJ5IHRoZSBEYXRhU291cmNlIHNwZWNpZmljIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBmYWN0b3JpZXMKICAqIGFuZCB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBmb3IgdGhlIDxjb2RlPkRyaXZlck1hbmFnZXI8L2NvZGU+LgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDgvMDMKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA4LzAzCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiAKLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnksIAorcHVibGljIGFic3RyYWN0IGNsYXNzIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSwKICAgICBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7Ci0gICAgCisKICAgICBwcm90ZWN0ZWQgRGF0YVNvdXJjZVNwZWMgc3BlYyA9IG5ldyBEYXRhU291cmNlU3BlYygpOwogICAgIHByb3RlY3RlZCB0cmFuc2llbnQgRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIgZHNPYmpCdWlsZGVyOwotICAgIAorCiAgICAgcHJvdGVjdGVkIGphdmEuaW8uUHJpbnRXcml0ZXIgbG9nV3JpdGVyID0gbnVsbDsKICAgICBwcm90ZWN0ZWQgamFrYXJ0YS5yZXNvdXJjZS5zcGkuUmVzb3VyY2VBZGFwdGVyIHJhID0gbnVsbDsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIExvZ2dlciBfbG9nZ2VyOwogICAgIHN0YXRpYyB7CiAgICAgICAgIF9sb2dnZXIgPSBMb2dnZXIuZ2V0QW5vbnltb3VzTG9nZ2VyKCk7CkBAIC01NCw4ICs1NCw4IEBACiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIENvbm5lY3Rpb24gRmFjdG9yeSBpbnN0YW5jZS4gVGhlIDxjb2RlPkNvbm5lY3Rpb25NYW5hZ2VyPC9jb2RlPiBpbXBsZW1lbnRhdGlvbgogICAgICAqIG9mIHRoZSByZXNvdXJjZSBhZGFwdGVyIGlzIHVzZWQgaGVyZS4KLSAgICAgKiAKLSAgICAgKiBAcmV0dXJuCUdlbmVyaWMgSkRCQyBDb25uZWN0b3IgaW1wbGVtZW50YXRpb24gb2YgPGNvZGU+amF2YXguc3FsLkRhdGFTb3VyY2U8L2NvZGU+CisgICAgICoKKyAgICAgKiBAcmV0dXJuICAgIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IgaW1wbGVtZW50YXRpb24gb2YgPGNvZGU+amF2YXguc3FsLkRhdGFTb3VyY2U8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIE9iamVjdCBjcmVhdGVDb25uZWN0aW9uRmFjdG9yeSgpIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTYzLDE2ICs2MywxNiBAQAogICAgICAgICB9CiAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlIGNmID0gbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlKAogICAgICAgICAgICAgKGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSl0aGlzLCBudWxsKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGNmOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBDb25uZWN0aW9uIEZhY3RvcnkgaW5zdGFuY2UuIFRoZSA8Y29kZT5Db25uZWN0aW9uTWFuYWdlcjwvY29kZT4gaW1wbGVtZW50YXRpb24KICAgICAgKiBvZiB0aGUgYXBwbGljYXRpb24gc2VydmVyIGlzIHVzZWQgaGVyZS4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JY3hNYW5hZ2VyCTxjb2RlPkNvbm5lY3Rpb25NYW5hZ2VyPC9jb2RlPiBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgotICAgICAqIEByZXR1cm4JR2VuZXJpYyBKREJDIENvbm5lY3RvciBpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29kZT4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBjeE1hbmFnZXIgICAgPGNvZGU+Q29ubmVjdGlvbk1hbmFnZXI8L2NvZGU+IHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogQHJldHVybiAgICBHZW5lcmljIEpEQkMgQ29ubmVjdG9yIGltcGxlbWVudGF0aW9uIG9mIDxjb2RlPmphdmF4LnNxbC5EYXRhU291cmNlPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBPYmplY3QgY3JlYXRlQ29ubmVjdGlvbkZhY3RvcnkoamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvbk1hbmFnZXIgY3hNYW5hZ2VyKSB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC04MCw1NSArODAsNTUgQEAKICAgICAgICAgfQogICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuRGF0YVNvdXJjZSBjZiA9IG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuRGF0YVNvdXJjZSgKICAgICAgICAgICAgIChqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkpdGhpcywgY3hNYW5hZ2VyKTsKLSAgICAgICAgcmV0dXJuIGNmOyAKKyAgICAgICAgcmV0dXJuIGNmOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBuZXcgcGh5c2ljYWwgY29ubmVjdGlvbiB0byB0aGUgdW5kZXJseWluZyBFSVMgcmVzb3VyY2UKICAgICAgKiBtYW5hZ2VyLgotICAgICAqIAotICAgICAqIEBwYXJhbQlzdWJqZWN0CTxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICogQHBhcmFtCWN4UmVxdWVzdEluZm8JPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiB3aGljaCBtYXkgYmUgY3JlYXRlZAotICAgICAqICAgICAgIAkgICAgICAgICAgICAgCWFzIGEgcmVzdWx0IG9mIHRoZSBpbnZvY2F0aW9uIDxjb2RlPmdldENvbm5lY3Rpb24odXNlciwgcGFzc3dvcmQpPC9jb2RlPgotICAgICAqICAgICAgIAkgICAgICAgICAgICAgCW9uIHRoZSA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QKLSAgICAgKiBAcmV0dXJuCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QgY3JlYXRlZAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gaW5zdGFudGlhdGluZyB0aGUKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCTxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdCB1c2VkIGZvciB0aGUKLSAgICAgKiAgICAgICAJCQkJY3JlYXRpb24gb2YgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QKLSAgICAgKiBAdGhyb3dzCVNlY3VyaXR5RXhjZXB0aW9uCWlmIHRoZXJlIGlubyA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdAotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJc2F0aXNmeWluZyB0aGlzIHJlcXVlc3QgCi0gICAgICogQHRocm93cwlSZXNvdXJjZUFsbG9jYXRpb25FeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUgCi0gICAgICoJCQkJCQlwaHlzaWNhbCBjb25uZWN0aW9uCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3ViamVjdCAgICA8Y29kZT5TdWJqZWN0PC9jb2RlPiBpbnN0YW5jZSBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqIEBwYXJhbSAgICBjeFJlcXVlc3RJbmZvICAgIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gd2hpY2ggbWF5IGJlIGNyZWF0ZWQKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyBhIHJlc3VsdCBvZiB0aGUgaW52b2NhdGlvbiA8Y29kZT5nZXRDb25uZWN0aW9uKHVzZXIsIHBhc3N3b3JkKTwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiB0aGUgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0CisgICAgICogQHJldHVybiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGNyZWF0ZWQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGluc3RhbnRpYXRpbmcgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QgdXNlZCBmb3IgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgIGNyZWF0aW9uIG9mIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0CisgICAgICogQHRocm93cyAgICBTZWN1cml0eUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpbm8gPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdGlzZnlpbmcgdGhpcyByZXF1ZXN0CisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUFsbG9jYXRpb25FeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHBoeXNpY2FsIGNvbm5lY3Rpb24KICAgICAgKi8KICAgICBwdWJsaWMgYWJzdHJhY3QgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gY3JlYXRlTWFuYWdlZENvbm5lY3Rpb24oamF2YXguc2VjdXJpdHkuYXV0aC5TdWJqZWN0IHN1YmplY3QsCiAgICAgICAgIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBjeFJlcXVlc3RJbmZvKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb247Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBDaGVjayBpZiB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaXMgZXF1YWwgdG8gCisgICAgICogQ2hlY2sgaWYgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGlzIGVxdWFsIHRvCiAgICAgICogYW5vdGhlciA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LgotICAgICAqIAotICAgICAqIEBwYXJhbQlvdGhlcgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdCBmb3IgY2hlY2tpbmcgZXF1YWxpdHkgd2l0aAotICAgICAqIEByZXR1cm4JdHJ1ZQlpZiB0aGUgcHJvcGVydHkgc2V0cyBvZiBib3RoIHRoZSAKLSAgICAgKgkJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0cyBhcmUgdGhlIHNhbWUKLSAgICAgKgkJZmFsc2UJb3RoZXJ3aXNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgb3RoZXIgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QgZm9yIGNoZWNraW5nIGVxdWFsaXR5IHdpdGgKKyAgICAgKiBAcmV0dXJuICAgIHRydWUgICAgaWYgdGhlIHByb3BlcnR5IHNldHMgb2YgYm90aCB0aGUKKyAgICAgKiAgICAgICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0cyBhcmUgdGhlIHNhbWUKKyAgICAgKiAgICAgICAgZmFsc2UgICAgb3RoZXJ3aXNlCiAgICAgICovCiAgICAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvdGhlcik7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXQgdGhlIGxvZyB3cml0ZXIgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAc2VlCTxjb2RlPnNldExvZ1dyaXRlcjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRMb2dXcml0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIGphdmEuaW8uUHJpbnRXcml0ZXIgZ2V0TG9nV3JpdGVyKCkgewogICAgICAgICByZXR1cm4gbG9nV3JpdGVyOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAc2VlCTxjb2RlPnNldFJlc291cmNlQWRhcHRlcjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0UmVzb3VyY2VBZGFwdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBqYWthcnRhLnJlc291cmNlLnNwaS5SZXNvdXJjZUFkYXB0ZXIgZ2V0UmVzb3VyY2VBZGFwdGVyKCkgewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtMTM2LDExICsxMzYsMTEgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmE7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgaGFzaCBjb2RlIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWhhc2ggY29kZSBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+CisgICAgICogQHJldHVybiAgICBoYXNoIGNvZGUgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKXsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTE0OCw0MSArMTQ4LDQxIEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHNwZWMuaGFzaENvZGUoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgbWF0Y2hlZCA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gZnJvbSB0aGUgY2FuZGlkYXRlIAorICAgICAqIFJldHVybnMgYSBtYXRjaGVkIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBmcm9tIHRoZSBjYW5kaWRhdGUKICAgICAgKiBzZXQgb2YgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdHMuCi0gICAgICogCi0gICAgICogQHBhcmFtCWNvbm5lY3Rpb25TZXQJPGNvZGU+U2V0PC9jb2RlPiBvZiAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+Ci0gICAgICoJCQkJb2JqZWN0cyBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgotICAgICAqIEBwYXJhbQlzdWJqZWN0CSBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgotICAgICAqCQkJZm9yIHJldHJpZXZpbmcgaW5mb3JtYXRpb24gcmVxdWlyZWQgZm9yIG1hdGNoaW5nCi0gICAgICogQHBhcmFtCWN4UmVxdWVzdEluZm8JPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgotICAgICAqCQkJCWZvciByZXRyaWV2aW5nIGluZm9ybWF0aW9uIHJlcXVpcmVkIGZvciBtYXRjaGluZwotICAgICAqIEByZXR1cm4JPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHRoYXQgaXMgdGhlIGJlc3QgbWF0Y2ggc2F0aXNmeWluZyB0aGlzIHJlcXVlc3QKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGFjY2Vzc2luZyB0aGUgPGNvZGU+U3ViamVjdDwvY29kZT4KLSAgICAgKgkJCQkJcGFyYW1ldGVyIG9yIHRoZSA8Y29kZT5TZXQ8L2NvZGU+IG9mIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgotICAgICAqCQkJCQlvYmplY3RzIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgY29ubmVjdGlvblNldCAgICA8Y29kZT5TZXQ8L2NvZGU+IG9mICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgICBvYmplY3RzIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogQHBhcmFtICAgIHN1YmplY3QgICAgIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogICAgICAgICAgICBmb3IgcmV0cmlldmluZyBpbmZvcm1hdGlvbiByZXF1aXJlZCBmb3IgbWF0Y2hpbmcKKyAgICAgKiBAcGFyYW0gICAgY3hSZXF1ZXN0SW5mbyAgICA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogICAgICAgICAgICAgICAgZm9yIHJldHJpZXZpbmcgaW5mb3JtYXRpb24gcmVxdWlyZWQgZm9yIG1hdGNoaW5nCisgICAgICogQHJldHVybiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdGhhdCBpcyB0aGUgYmVzdCBtYXRjaCBzYXRpc2Z5aW5nIHRoaXMgcmVxdWVzdAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgYWNjZXNzaW5nIHRoZSA8Y29kZT5TdWJqZWN0PC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIgb3IgdGhlIDxjb2RlPlNldDwvY29kZT4gb2YgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogICAgICAgICAgICAgICAgICAgIG9iamVjdHMgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKICAgICAgKi8KLSAgICBwdWJsaWMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWF0Y2hNYW5hZ2VkQ29ubmVjdGlvbnMoamF2YS51dGlsLlNldCBjb25uZWN0aW9uU2V0LCAKKyAgICBwdWJsaWMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWF0Y2hNYW5hZ2VkQ29ubmVjdGlvbnMoamF2YS51dGlsLlNldCBjb25uZWN0aW9uU2V0LAogICAgICAgICBqYXZheC5zZWN1cml0eS5hdXRoLlN1YmplY3Qgc3ViamVjdCwgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxdWVzdEluZm8pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CiAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gbWF0Y2hNYW5hZ2VkQ29ubmVjdGlvbnMiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZihjb25uZWN0aW9uU2V0ID09IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIFBhc3N3b3JkQ3JlZGVudGlhbCBwYyA9IFNlY3VyaXR5VXRpbHMuZ2V0UGFzc3dvcmRDcmVkZW50aWFsKHRoaXMsIHN1YmplY3QsIGN4UmVxdWVzdEluZm8pOwotICAgICAgICAKKwogICAgICAgICBqYXZhLnV0aWwuSXRlcmF0b3IgaXRlciA9IGNvbm5lY3Rpb25TZXQuaXRlcmF0b3IoKTsKICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1jID0gbnVsbDsKICAgICAgICAgd2hpbGUoaXRlci5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgbWMgPSAoY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uKSBpdGVyLm5leHQoKTsKICAgICAgICAgICAgIH0gY2F0Y2goamF2YS51dGlsLk5vU3VjaEVsZW1lbnRFeGNlcHRpb24gbnNlZSkgewotCSAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfaXRlciIpOworICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfaXRlciIpOwogICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihuc2VlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZihwYyA9PSBudWxsICYmIHRoaXMuZXF1YWxzKG1jLmdldE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSgpKSkgewpAQCAtMTkxLDcgKzE5MSw3IEBACiAgICAgICAgICAgICAgICAgICAgIGlzVmFsaWQobWMpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWM7CiAgICAgICAgICAgICAgICAgfSBjYXRjaChSZXNvdXJjZUV4Y2VwdGlvbiByZSkgewotCSAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3JlIiwgcmUpOworICAgICAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3JlIiwgcmUpOwogICAgICAgICAgICAgICAgICAgICBtYy5jb25uZWN0aW9uRXJyb3JPY2N1cnJlZChyZSwgbnVsbCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIGlmKFNlY3VyaXR5VXRpbHMuaXNQYXNzd29yZENyZWRlbnRpYWxFcXVhbChwYywgbWMuZ2V0UGFzc3dvcmRDcmVkZW50aWFsKCkpID09IHRydWUpIHsKQEAgLTIwMCw0NSArMjAwLDQ1IEBACiAgICAgICAgICAgICAgICAgICAgIGlzVmFsaWQobWMpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWM7CiAgICAgICAgICAgICAgICAgfSBjYXRjaChSZXNvdXJjZUV4Y2VwdGlvbiByZSkgewotCSAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMucmUiKTsKKyAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLnJlIik7CiAgICAgICAgICAgICAgICAgICAgIG1jLmNvbm5lY3Rpb25FcnJvck9jY3VycmVkKHJlLCBudWxsKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotICAgIAorCiAgICAgLy9HSkNJTlQKICAgICAvKioKICAgICAgKiBDaGVja3MgaWYgYSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaXMgdG8gYmUgdmFsaWRhdGVkIG9yIG5vdAogICAgICAqIGFuZCB2YWxpZGF0ZXMgaXQgb3IgcmV0dXJucy4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JbWMJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIG9yCi0gICAgICogICAgICAgIAkgICAgICAgICAgCQlpZiB2YWxpZGF0aW9uIG1ldGhvZCBpcyBub3QgcHJvcGVyCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIG9yCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB2YWxpZGF0aW9uIG1ldGhvZCBpcyBub3QgcHJvcGVyCiAgICAgICovCiAgICAgdm9pZCBpc1ZhbGlkKGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKIAogICAgICAgICBpZihtYy5pc1RyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKSB7Ci0JICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgCi0gICAgICAgIGJvb2xlYW4gY29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZCA9IAorCisgICAgICAgIGJvb2xlYW4gY29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZCA9CiAgICAgICAgICAgICAobmV3IEJvb2xlYW4oc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ09OTkVDVElPTlZBTElEQVRJT05SRVFVSVJFRCkudG9Mb3dlckNhc2UoKSkpLmJvb2xlYW5WYWx1ZSgpOwogICAgICAgICBpZiggY29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZCA9PSBmYWxzZSB8fCBtYyA9PSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIAorCisKICAgICAgICAgU3RyaW5nIHZhbGlkYXRpb25NZXRob2QgPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OTUVUSE9EKS50b0xvd2VyQ2FzZSgpOwotICAgICAgICAKKwogICAgICAgICBtYy5jaGVja0lmVmFsaWQoKTsKICAgICAgICAgLyoqCiAgICAgICAgICAqIFRoZSBhYm92ZSBjYWxsIGNoZWNrcyBpZiB0aGUgYWN0dWFsIHBoeXNpY2FsIGNvbm5lY3Rpb24KICAgICAgICAgICogaXMgdXNhYmxlIG9yIG5vdC4KICAgICAgICAgICovCiAgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gY29uID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpOwotICAgICAgICAKKwogICAgICAgICBpZih2YWxpZGF0aW9uTWV0aG9kLmVxdWFscygiYXV0by1jb21taXQiKSA9PSB0cnVlKSB7CiAgICAgICAgICAgICBpc1ZhbGlkQnlBdXRvQ29tbWl0KGNvbik7CiAgICAgICAgIH0gZWxzZSBpZih2YWxpZGF0aW9uTWV0aG9kLmVxdWFsc0lnbm9yZUNhc2UoIm1ldGEtZGF0YSIpID09IHRydWUpIHsKQEAgLTI0OSwyOCArMjQ5LDI4IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSB2YWxpZGF0aW9uIG1ldGhvZCBpcyBub3QgcHJvcGVyIik7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDaGVja3MgaWYgYSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBpcyB2YWxpZCBvciBub3QKICAgICAgKiBieSBjaGVja2luZyBpdHMgYXV0byBjb21taXQgcHJvcGVydHkuCi0gICAgICogCi0gICAgICogQHBhcmFtCWNvbgk8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqCisgICAgICogQHBhcmFtICAgIGNvbiAgICA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqLwogICAgIHByb3RlY3RlZCB2b2lkIGlzVmFsaWRCeUF1dG9Db21taXQoamF2YS5zcWwuQ29ubmVjdGlvbiBjb24pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGNvbiA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyAiCiAgICAgICAgICAgICAgICAgKyAidGhlIGNvbm5lY3Rpb24gaXMgbnVsbCIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgIC8vIE5vdGljZSB0aGF0IHVzaW5nIHNvbWV0aGluZyBsaWtlIAorICAgICAgICAgICAvLyBOb3RpY2UgdGhhdCB1c2luZyBzb21ldGhpbmcgbGlrZQogICAgICAgICAgICAvLyBkYkNvbi5zZXRBdXRvQ29tbWl0KGRiQ29uLmdldEF1dG9Db21taXQoKSkgd2lsbCBjYXVzZSBwcm9ibGVtcyB3aXRoCiAgICAgICAgICAgIC8vIHNvbWUgZHJpdmVycyBsaWtlIHN5YmFzZQotICAgICAgICAgICAvLyBXZSBkbyBub3QgdmFsaWRhdGUgY29ubmVjdGlvbnMgdGhhdCBhcmUgYWxyZWFkeSBlbmxpc3RlZCAKLQkgICAvL2luIGEgdHJhbnNhY3Rpb24gCi0JICAgLy8gV2UgY3ljbGUgYXV0b2NvbW1pdCB0byB0cnVlIGFuZCBmYWxzZSB0byBieS1wYXNzIGRyaXZlcnMgdGhhdCAKLQkgICAvLyBtaWdodCBjYWNoZSB0aGUgY2FsbCB0byBzZXQgYXV0b2NvbWl0dAorICAgICAgICAgICAvLyBXZSBkbyBub3QgdmFsaWRhdGUgY29ubmVjdGlvbnMgdGhhdCBhcmUgYWxyZWFkeSBlbmxpc3RlZAorICAgICAgIC8vaW4gYSB0cmFuc2FjdGlvbgorICAgICAgIC8vIFdlIGN5Y2xlIGF1dG9jb21taXQgdG8gdHJ1ZSBhbmQgZmFsc2UgdG8gYnktcGFzcyBkcml2ZXJzIHRoYXQKKyAgICAgICAvLyBtaWdodCBjYWNoZSB0aGUgY2FsbCB0byBzZXQgYXV0b2NvbWl0dAogICAgICAgICAgICAvLyBBbHNvIG5vdGljZSB0aGF0IHNvbWUgWEEgZGF0YSBzb3VyY2VzIHdpbGwgdGhyb3cgYW5kIGV4Y2VwdGlvbiBpZgogICAgICAgICAgICAvLyB5b3UgdHJ5IHRvIGNhbGwgc2V0QXV0b0NvbW1pdCwgZm9yIHRoZW0gdGhpcyBtZXRob2QgaXMgbm90IHJlY29tbWVuZGVkCiAKQEAgLTI4MSw5MCArMjgxLDkwIEBACiAgICAgICAgICAgICAgICAgY29uLnJvbGxiYWNrKCk7IC8vIHByZXZlbnRzIHVuY29tcGxldGVkIHRyYW5zYWN0aW9uIGV4Y2VwdGlvbnMKICAgICAgICAgICAgICAgICBjb24uc2V0QXV0b0NvbW1pdCh0cnVlKTsKICAgICAgICAgICAgfQotICAgICAgICAKLQkgICBjb24uc2V0QXV0b0NvbW1pdChhYyk7CisKKyAgICAgICBjb24uc2V0QXV0b0NvbW1pdChhYyk7CiAKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19hdXRvY29tbWl0Iik7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2F1dG9jb21taXQiKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDaGVja3MgaWYgYSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBpcyB2YWxpZCBvciBub3QKICAgICAgKiBieSBjaGVja2luZyBpdHMgbWV0YSBkYXRhLgotICAgICAqIAotICAgICAqIEBwYXJhbQljb24JPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBjb24gICAgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKi8KICAgICBwcm90ZWN0ZWQgdm9pZCBpc1ZhbGlkQnlNZXRhRGF0YShqYXZhLnNxbC5Db25uZWN0aW9uIGNvbikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYoY29uID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzICIKICAgICAgICAgICAgICAgICArICJ0aGUgY29ubmVjdGlvbiBpcyBudWxsIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGphdmEuc3FsLkRhdGFiYXNlTWV0YURhdGEgZG1kID0gY29uLmdldE1ldGFEYXRhKCk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfbWQiKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfbWQiKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzICIKICAgICAgICAgICAgICAgICArICJnZXR0aW5nIHRoZSBtZXRhIGRhdGEgZmFpbGVkOiAiICsgc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2hlY2tzIGlmIGEgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gaXMgdmFsaWQgb3Igbm90CiAgICAgICogYnkgcXVlcnlpbmcgYSB0YWJsZS4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JY29uCTxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAotICAgICAqIEBwYXJhbQl0YWJsZU5hbWUJdGFibGUgd2hpY2ggc2hvdWxkIGJlIHF1ZXJpZWQKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqCisgICAgICogQHBhcmFtICAgIGNvbiAgICA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKKyAgICAgKiBAcGFyYW0gICAgdGFibGVOYW1lICAgIHRhYmxlIHdoaWNoIHNob3VsZCBiZSBxdWVyaWVkCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKi8KLSAgICBwcm90ZWN0ZWQgdm9pZCBpc1ZhbGlkQnlUYWJsZVF1ZXJ5KGphdmEuc3FsLkNvbm5lY3Rpb24gY29uLCAKKyAgICBwcm90ZWN0ZWQgdm9pZCBpc1ZhbGlkQnlUYWJsZVF1ZXJ5KGphdmEuc3FsLkNvbm5lY3Rpb24gY29uLAogICAgICAgICBTdHJpbmcgdGFibGVOYW1lKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihjb24gPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgIgogICAgICAgICAgICAgICAgICsgInRoZSBjb25uZWN0aW9uIGlzIG51bGwiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgamF2YS5zcWwuU3RhdGVtZW50IHN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CiAgICAgICAgICAgICBqYXZhLnNxbC5SZXN1bHRTZXQgcnMgPSBzdG10LmV4ZWN1dGVRdWVyeSgiU0VMRUNUICogRlJPTSAiICsgdGFibGVOYW1lKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19leGVjdXRlIik7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2V4ZWN1dGUiKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzICIKICAgICAgICAgICAgICAgICArICJxdWVyeWluZyB0aGUgdGFibGUgIiArIHRhYmxlTmFtZSArICIgZmFpbGVkOiAiICsgc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgaXNvbGF0aW9uIGxldmVsIHNwZWNpZmllZCBpbiB0aGUgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPgogICAgICAqIGZvciB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHBhc3NlZC4KICAgICAgKgotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBpc29sYXRpb24gcHJvcGVydHkgaXMgaW52YWxpZAotICAgICAqCQkJCQlvciBpZiB0aGUgaXNvbGF0aW9uIGNhbm5vdCBiZSBzZXQgb3ZlciB0aGUgY29ubmVjdGlvbgorICAgICAqIEBwYXJhbSAgICBtYyAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBpc29sYXRpb24gcHJvcGVydHkgaXMgaW52YWxpZAorICAgICAqICAgICAgICAgICAgICAgICAgICBvciBpZiB0aGUgaXNvbGF0aW9uIGNhbm5vdCBiZSBzZXQgb3ZlciB0aGUgY29ubmVjdGlvbgogICAgICAqLwogICAgIHByb3RlY3RlZCB2b2lkIHNldElzb2xhdGlvbihjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWMpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7Ci0gICAgCQotICAgIAlqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiA9IG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKTsKLSAgICAJaWYoY29uID09IG51bGwpIHsKLSAgICAJICAgIHJldHVybjsKLSAgICAJfQotICAgIAkKLSAgICAJU3RyaW5nIHRyYW5Jc29sYXRpb24gPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTik7Ci0gICAgCWlmKHRyYW5Jc29sYXRpb24gIT0gbnVsbCAmJiB0cmFuSXNvbGF0aW9uLmVxdWFscygiIikgPT0gZmFsc2UpIHsKLSAgICAJICAgIGludCB0cmFuSXNvbGF0aW9uSW50ID0gZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb25JbnQodHJhbklzb2xhdGlvbik7Ci0gICAgCSAgICB0cnkgewotICAgIAkgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbih0cmFuSXNvbGF0aW9uSW50KTsKLSAgICAJICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3R4X2xldmVsIik7Ci0gICAgCSAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGNvdWxkICIKLSAgICAJICAgICAgICAgICAgKyAibm90IGJlIHNldDogIiArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAJICAgIH0KLSAgICAJfQorCisgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gY29uID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpOworICAgICAgICBpZihjb24gPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgU3RyaW5nIHRyYW5Jc29sYXRpb24gPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTik7CisgICAgICAgIGlmKHRyYW5Jc29sYXRpb24gIT0gbnVsbCAmJiB0cmFuSXNvbGF0aW9uLmVxdWFscygiIikgPT0gZmFsc2UpIHsKKyAgICAgICAgICAgIGludCB0cmFuSXNvbGF0aW9uSW50ID0gZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb25JbnQodHJhbklzb2xhdGlvbik7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbih0cmFuSXNvbGF0aW9uSW50KTsKKyAgICAgICAgICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKKyAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3R4X2xldmVsIik7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGNvdWxkICIKKyAgICAgICAgICAgICAgICAgICAgKyAibm90IGJlIHNldDogIiArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJlc2V0cyB0aGUgaXNvbGF0aW9uIGxldmVsIGZvciB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHBhc3NlZC4KICAgICAgKiBJZiB0aGUgdHJhbnNhY3Rpb24gbGV2ZWwgaXMgdG8gYmUgZ3VhcmFudGVlZCB0byBiZSB0aGUgc2FtZSBhcyB0aGUgb25lCkBAIC0zNzMsMzgyICszNzMsMzgyIEBACiAgICAgICogaXNvbGF0aW9uIGxldmVsIGZyb20gdGhlIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gcGFzc2VkLiBFbHNlLAogICAgICAqIGl0IHNldHMgaXQgdG8gdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBwYXNzZWQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWMJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+Ci0gICAgICogQHBhcmFtCXRyYW5Jc29sCWludAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIGlzb2xhdGlvbiBwcm9wZXJ0eSBpcyBpbnZhbGlkCi0gICAgICoJCQkJCW9yIGlmIHRoZSBpc29sYXRpb24gY2Fubm90IGJlIHNldCBvdmVyIHRoZSBjb25uZWN0aW9uCisgICAgICogQHBhcmFtICAgIG1jICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB0cmFuSXNvbCAgICBpbnQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBpc29sYXRpb24gcHJvcGVydHkgaXMgaW52YWxpZAorICAgICAqICAgICAgICAgICAgICAgICAgICBvciBpZiB0aGUgaXNvbGF0aW9uIGNhbm5vdCBiZSBzZXQgb3ZlciB0aGUgY29ubmVjdGlvbgogICAgICAqLwogICAgIHZvaWQgcmVzZXRJc29sYXRpb24oY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1jLCBpbnQgdHJhbklzb2wpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7Ci0gICAgCQotICAgIAlqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiA9IG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKTsKLSAgICAJaWYoY29uID09IG51bGwpIHsKLSAgICAJICAgIHJldHVybjsKLSAgICAJfQotICAgIAkKLSAgICAJU3RyaW5nIHRyYW5Jc29sYXRpb24gPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTik7Ci0gICAgCWlmKHRyYW5Jc29sYXRpb24gIT0gbnVsbCAmJiB0cmFuSXNvbGF0aW9uLmVxdWFscygiIikgPT0gZmFsc2UpIHsKLSAgICAJICAgIFN0cmluZyBndWFyYW50ZWVJc29sYXRpb25MZXZlbCA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkdVQVJBTlRFRUlTT0xBVElPTkxFVkVMKTsKLSAgICAJICAgIAotICAgIAkgICAgaWYoZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwgIT0gbnVsbCAmJiBndWFyYW50ZWVJc29sYXRpb25MZXZlbC5lcXVhbHMoIiIpID09IGZhbHNlKSB7Ci0gICAgCSAgICAgICAgYm9vbGVhbiBndWFyYW50ZWUgPSAobmV3IEJvb2xlYW4oZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwudG9Mb3dlckNhc2UoKSkpLmJvb2xlYW5WYWx1ZSgpOwotICAgIAkgICAgICAgIAotICAgIAkgICAgICAgIGlmKGd1YXJhbnRlZSkgewotICAgIAkgICAgICAgICAgICBpbnQgdHJhbklzb2xhdGlvbkludCA9IGdldFRyYW5zYWN0aW9uSXNvbGF0aW9uSW50KHRyYW5Jc29sYXRpb24pOwotICAgIAkgICAgICAgICAgICB0cnkgewotICAgIAkgICAgICAgICAgICAgICAgaWYodHJhbklzb2xhdGlvbkludCAhPSBjb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKSkgewotICAgIAkgICAgICAgICAgICAgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbih0cmFuSXNvbGF0aW9uSW50KTsKLSAgICAJICAgICAgICAgICAgICAgIH0KLSAgICAJICAgICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y190eF9sZXZlbCIpOwotICAgIAkgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgaXNvbGF0aW9uIGxldmVsIGNvdWxkIG5vdCBiZSBzZXQ6ICIKLSAgICAJICAgICAgICAgICAgICAgICAgICArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAJICAgICAgICAgICAgfQotICAgIAkgICAgICAgIH0gZWxzZSB7Ci0gICAgCSAgICAgICAgICAgIHRyeSB7Ci0gICAgCSAgICAgICAgICAgICAgICBpZih0cmFuSXNvbCAhPSBjb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKSkgewotICAgIAkgICAgICAgICAgICAgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbih0cmFuSXNvbCk7Ci0gICAgCSAgICAgICAgICAgICAgICB9Ci0gICAgCSAgICAgICAgICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfdHhfbGV2ZWwiKTsKLSAgICAJICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGlzb2xhdGlvbiBsZXZlbCBjb3VsZCBub3QgYmUgc2V0OiAiCi0gICAgCSAgICAgICAgICAgICAgICAgICAgKyBzcWxlLmdldE1lc3NhZ2UoKSk7Ci0gICAgCSAgICAgICAgICAgIH0KLSAgICAJICAgICAgICB9Ci0gICAgCSAgICB9Ci0gICAgCX0KKworICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiA9IG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKTsKKyAgICAgICAgaWYoY29uID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFN0cmluZyB0cmFuSXNvbGF0aW9uID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04pOworICAgICAgICBpZih0cmFuSXNvbGF0aW9uICE9IG51bGwgJiYgdHJhbklzb2xhdGlvbi5lcXVhbHMoIiIpID09IGZhbHNlKSB7CisgICAgICAgICAgICBTdHJpbmcgZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwgPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5HVUFSQU5URUVJU09MQVRJT05MRVZFTCk7CisKKyAgICAgICAgICAgIGlmKGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsICE9IG51bGwgJiYgZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwuZXF1YWxzKCIiKSA9PSBmYWxzZSkgeworICAgICAgICAgICAgICAgIGJvb2xlYW4gZ3VhcmFudGVlID0gKG5ldyBCb29sZWFuKGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsLnRvTG93ZXJDYXNlKCkpKS5ib29sZWFuVmFsdWUoKTsKKworICAgICAgICAgICAgICAgIGlmKGd1YXJhbnRlZSkgeworICAgICAgICAgICAgICAgICAgICBpbnQgdHJhbklzb2xhdGlvbkludCA9IGdldFRyYW5zYWN0aW9uSXNvbGF0aW9uSW50KHRyYW5Jc29sYXRpb24pOworICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYodHJhbklzb2xhdGlvbkludCAhPSBjb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbih0cmFuSXNvbGF0aW9uSW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgeworICAgICAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y190eF9sZXZlbCIpOworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgaXNvbGF0aW9uIGxldmVsIGNvdWxkIG5vdCBiZSBzZXQ6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZih0cmFuSXNvbCAhPSBjb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbih0cmFuSXNvbCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKKyAgICAgICAgICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfdHhfbGV2ZWwiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGlzb2xhdGlvbiBsZXZlbCBjb3VsZCBub3QgYmUgc2V0OiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBzcWxlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBpbnRlZ2VyIGVxdWl2YWxlbnQgb2YgdGhlIHN0cmluZyBzcGVjaWZ5aW5nCiAgICAgICogdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbi4KICAgICAgKgotICAgICAqIEBwYXJhbQl0cmFuSXNvbGF0aW9uCXN0cmluZyBzcGVjaWZ5aW5nIHRoZSBpc29sYXRpb24gbGV2ZWwKLSAgICAgKiBAcmV0dXJuCXRyYW5Jc29sYXRpb25JbnQJdGhlIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IGNvbnN0YW50Ci0gICAgICoJCQkJCWZvciB0aGUgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIGlzb2xhdGlvbi4KKyAgICAgKiBAcGFyYW0gICAgdHJhbklzb2xhdGlvbiAgICBzdHJpbmcgc3BlY2lmeWluZyB0aGUgaXNvbGF0aW9uIGxldmVsCisgICAgICogQHJldHVybiAgICB0cmFuSXNvbGF0aW9uSW50ICAgIHRoZSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBjb25zdGFudAorICAgICAqICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBpc29sYXRpb24uCiAgICAgICovCiAgICAgcHJpdmF0ZSBpbnQgZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb25JbnQoU3RyaW5nIHRyYW5Jc29sYXRpb24pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7Ci0gICAgCWlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgicmVhZC11bmNvbW1pdHRlZCIpKSB7Ci0gICAgCSAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9SRUFEX1VOQ09NTUlUVEVEOwotICAgIAl9IGVsc2UgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJyZWFkLWNvbW1pdHRlZCIpKSB7Ci0gICAgCSAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9SRUFEX0NPTU1JVFRFRDsKLSAgICAJfSBlbHNlIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgicmVwZWF0YWJsZS1yZWFkIikpIHsKLSAgICAJICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1JFUEVBVEFCTEVfUkVBRDsKLSAgICAJfSBlbHNlIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgic2VyaWFsaXphYmxlIikpIHsKLSAgICAJICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1NFUklBTElaQUJMRTsKLSAgICAJfSBlbHNlIHsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiSW52YWxpZCB0cmFuc2FjdGlvbiBpc29sYXRpb247IHRoZSB0cmFuc2FjdGlvbiAiCi0gICAgCSAgICAgICAgKyAiaXNvbGF0aW9uIGxldmVsIGNhbiBiZSBlbXB0eSBvciBhbnkgb2YgdGhlIGZvbGxvd2luZzogIgotICAgIAkgICAgICAgICAgICArICJyZWFkLXVuY29tbWl0dGVkLCByZWFkLWNvbW1pdHRlZCwgcmVwZWF0YWJsZS1yZWFkLCBzZXJpYWxpemFibGUiKTsKLSAgICAJfQorICAgICAgICBpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInJlYWQtdW5jb21taXR0ZWQiKSkgeworICAgICAgICAgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fUkVBRF9VTkNPTU1JVFRFRDsKKyAgICAgICAgfSBlbHNlIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgicmVhZC1jb21taXR0ZWQiKSkgeworICAgICAgICAgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fUkVBRF9DT01NSVRURUQ7CisgICAgICAgIH0gZWxzZSBpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInJlcGVhdGFibGUtcmVhZCIpKSB7CisgICAgICAgICAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9SRVBFQVRBQkxFX1JFQUQ7CisgICAgICAgIH0gZWxzZSBpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInNlcmlhbGl6YWJsZSIpKSB7CisgICAgICAgICAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9TRVJJQUxJWkFCTEU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkludmFsaWQgdHJhbnNhY3Rpb24gaXNvbGF0aW9uOyB0aGUgdHJhbnNhY3Rpb24gIgorICAgICAgICAgICAgICAgICsgImlzb2xhdGlvbiBsZXZlbCBjYW4gYmUgZW1wdHkgb3IgYW55IG9mIHRoZSBmb2xsb3dpbmc6ICIKKyAgICAgICAgICAgICAgICAgICAgKyAicmVhZC11bmNvbW1pdHRlZCwgcmVhZC1jb21taXR0ZWQsIHJlcGVhdGFibGUtcmVhZCwgc2VyaWFsaXphYmxlIik7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGxvZyB3cml0ZXIgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlvdXQJPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICogQHNlZQk8Y29kZT5nZXRMb2dXcml0ZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIG91dCAgICA8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldExvZ1dyaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRMb2dXcml0ZXIoamF2YS5pby5QcmludFdyaXRlciBvdXQpIHsKICAgICAgICAgbG9nV3JpdGVyID0gb3V0OwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgYXNzb2NpYXRlZCA8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IEphdmFCZWFuLgogICAgICAqCi0gICAgICogQHBhcmFtCXJhCTxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgCi0gICAgICoJCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHNlZQk8Y29kZT5nZXRSZXNvdXJjZUFkYXB0ZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHJhICAgIDxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyAgICAgKiAgICAgICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldFJlc291cmNlQWRhcHRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRSZXNvdXJjZUFkYXB0ZXIoamFrYXJ0YS5yZXNvdXJjZS5zcGkuUmVzb3VyY2VBZGFwdGVyIHJhKSB7Ci0gICAgICAgIHRoaXMucmEgPSByYTsgICAKKyAgICAgICAgdGhpcy5yYSA9IHJhOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHVzZXIgbmFtZQogICAgICAqCi0gICAgICogQHBhcmFtCXVzZXIJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB1c2VyICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRVc2VyKFN0cmluZyB1c2VyKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlVTRVJOQU1FLCB1c2VyKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSB1c2VyIG5hbWUKICAgICAgKgotICAgICAqIEByZXR1cm4JdXNlcgorICAgICAqIEByZXR1cm4gICAgdXNlcgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VXNlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlVTRVJOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB1c2VyIG5hbWUKICAgICAgKgotICAgICAqIEBwYXJhbQl1c2VyCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdXNlciAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0dXNlcihTdHJpbmcgdXNlcikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5VU0VSTkFNRSwgdXNlcik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgdXNlciBuYW1lCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXVzZXIKKyAgICAgKiBAcmV0dXJuICAgIHVzZXIKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHVzZXIoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5VU0VSTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgcGFzc3dvcmQKICAgICAgKgotICAgICAqIEBwYXJhbQlwYXNzd2QJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBwYXNzd2QgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFBhc3N3b3JkKFN0cmluZyBwYXNzd2QpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUEFTU1dPUkQsIHBhc3N3ZCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcGFzc3dvcmQKICAgICAgKgotICAgICAqIEByZXR1cm4JcGFzc3dkCisgICAgICogQHJldHVybiAgICBwYXNzd2QKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFBhc3N3b3JkKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUEFTU1dPUkQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHBhc3N3b3JkCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcGFzc3dkCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcGFzc3dkICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRwYXNzd29yZChTdHJpbmcgcGFzc3dkKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBBU1NXT1JELCBwYXNzd2QpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHBhc3N3b3JkCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXBhc3N3ZAorICAgICAqIEByZXR1cm4gICAgcGFzc3dkCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRwYXNzd29yZCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBBU1NXT1JEKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBkYXRhIHNvdXJjZQogICAgICAqCi0gICAgICogQHBhcmFtCWNsYXNzTmFtZQk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGNsYXNzTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Q2xhc3NOYW1lKFN0cmluZyBjbGFzc05hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ0xBU1NOQU1FLCBjbGFzc05hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGRhdGEgc291cmNlCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWNsYXNzTmFtZQorICAgICAqIEByZXR1cm4gICAgY2xhc3NOYW1lCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRDbGFzc05hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DTEFTU05BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGRhdGEgc291cmNlCiAgICAgICoKLSAgICAgKiBAcGFyYW0JY2xhc3NOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgY2xhc3NOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRjbGFzc05hbWUoU3RyaW5nIGNsYXNzTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5DTEFTU05BTUUsIGNsYXNzTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgZGF0YSBzb3VyY2UKICAgICAgKgotICAgICAqIEByZXR1cm4JY2xhc3NOYW1lCisgICAgICogQHJldHVybiAgICBjbGFzc05hbWUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGNsYXNzTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNMQVNTTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyBpZiBjb25uZWN0aW9uIHZhbGlkYXRpb24gaXMgcmVxdWlyZWQgb3Igbm90CiAgICAgICoKLSAgICAgKiBAcGFyYW0JY29uVmxkUmVxCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgY29uVmxkUmVxICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRDb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkKFN0cmluZyBjb25WbGRSZXEpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ09OTkVDVElPTlZBTElEQVRJT05SRVFVSVJFRCwgY29uVmxkUmVxKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIGlmIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiBpcyByZXF1aXJlZCBvciBub3QKICAgICAgKgotICAgICAqIEByZXR1cm4JY29ubmVjdGlvbiB2YWxpZGF0aW9uIHJlcXVpcmVtZW50CisgICAgICogQHJldHVybiAgICBjb25uZWN0aW9uIHZhbGlkYXRpb24gcmVxdWlyZW1lbnQKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldENvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVEKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIGlmIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiBpcyByZXF1aXJlZCBvciBub3QKICAgICAgKgotICAgICAqIEBwYXJhbQljb25WbGRSZXEJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBjb25WbGRSZXEgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGNvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQoU3RyaW5nIGNvblZsZFJlcSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5DT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVELCBjb25WbGRSZXEpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgaWYgY29ubmVjdGlvbiB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkIG9yIG5vdAogICAgICAqCi0gICAgICogQHJldHVybgljb25uZWN0aW9uIHZhbGlkYXRpb24gcmVxdWlyZW1lbnQKKyAgICAgKiBAcmV0dXJuICAgIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiByZXF1aXJlbWVudAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Y29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHZhbGlkYXRpb24gbWV0aG9kIHJlcXVpcmVkCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdmFsaWRhdGlvbk1ldGhvZAk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHZhbGlkYXRpb25NZXRob2QgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFZhbGlkYXRpb25NZXRob2QoU3RyaW5nIHZhbGlkYXRpb25NZXRob2QpIHsKICAgICAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05NRVRIT0QsIHZhbGlkYXRpb25NZXRob2QpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiBtZXRob2QgdHlwZQogICAgICAqCi0gICAgICogQHJldHVybgl2YWxpZGF0aW9uIG1ldGhvZAorICAgICAqIEByZXR1cm4gICAgdmFsaWRhdGlvbiBtZXRob2QKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFZhbGlkYXRpb25NZXRob2QoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OTUVUSE9EKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB2YWxpZGF0aW9uIG1ldGhvZCByZXF1aXJlZAogICAgICAqCi0gICAgICogQHBhcmFtCXZhbGlkYXRpb25NZXRob2QJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB2YWxpZGF0aW9uTWV0aG9kICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXR2YWxpZGF0aW9uTWV0aG9kKFN0cmluZyB2YWxpZGF0aW9uTWV0aG9kKSB7CiAgICAgICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OTUVUSE9ELCB2YWxpZGF0aW9uTWV0aG9kKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSBjb25uZWN0aW9uIHZhbGlkYXRpb24gbWV0aG9kIHR5cGUKICAgICAgKgotICAgICAqIEByZXR1cm4JdmFsaWRhdGlvbiBtZXRob2QKKyAgICAgKiBAcmV0dXJuICAgIHZhbGlkYXRpb24gbWV0aG9kCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXR2YWxpZGF0aW9uTWV0aG9kKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTk1FVEhPRCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdGFibGUgY2hlY2tlZCBmb3IgZHVyaW5nIHZhbGlkYXRpb24KICAgICAgKgotICAgICAqIEBwYXJhbQl0YWJsZQk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHRhYmxlICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRWYWxpZGF0aW9uVGFibGVOYW1lKFN0cmluZyB0YWJsZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OVEFCTEVOQU1FLCB0YWJsZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdGFibGUgY2hlY2tlZCBmb3IgZHVyaW5nIHZhbGlkYXRpb24KICAgICAgKgotICAgICAqIEByZXR1cm4JdGFibGUKKyAgICAgKiBAcmV0dXJuICAgIHRhYmxlCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRWYWxpZGF0aW9uVGFibGVOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTlRBQkxFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdGFibGUgY2hlY2tlZCBmb3IgZHVyaW5nIHZhbGlkYXRpb24KICAgICAgKgotICAgICAqIEBwYXJhbQl0YWJsZQk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHRhYmxlICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXR2YWxpZGF0aW9uVGFibGVOYW1lKFN0cmluZyB0YWJsZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OVEFCTEVOQU1FLCB0YWJsZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdGFibGUgY2hlY2tlZCBmb3IgZHVyaW5nIHZhbGlkYXRpb24KICAgICAgKgotICAgICAqIEByZXR1cm4JdGFibGUKKyAgICAgKiBAcmV0dXJuICAgIHRhYmxlCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXR2YWxpZGF0aW9uVGFibGVOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTlRBQkxFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdHJuSXNvbGF0aW9uCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdHJuSXNvbGF0aW9uICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRUcmFuc2FjdGlvbklzb2xhdGlvbihTdHJpbmcgdHJuSXNvbGF0aW9uKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OLCB0cm5Jc29sYXRpb24pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqCi0gICAgICogQHJldHVybgl0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKKyAgICAgKiBAcmV0dXJuICAgIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdHJuSXNvbGF0aW9uCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdHJuSXNvbGF0aW9uICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXR0cmFuc2FjdGlvbklzb2xhdGlvbihTdHJpbmcgdHJuSXNvbGF0aW9uKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OLCB0cm5Jc29sYXRpb24pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqCi0gICAgICogQHJldHVybgl0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKKyAgICAgKiBAcmV0dXJuICAgIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0dHJhbnNhY3Rpb25Jc29sYXRpb24oKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyBpZiB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsIGlzIHRvIGJlIGd1YXJhbnRlZWQKICAgICAgKgotICAgICAqIEBwYXJhbQlndWFyYW50ZWVJc29sYXRpb24JPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBndWFyYW50ZWVJc29sYXRpb24gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldEd1YXJhbnRlZUlzb2xhdGlvbkxldmVsKFN0cmluZyBndWFyYW50ZWVJc29sYXRpb24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwsIGd1YXJhbnRlZUlzb2xhdGlvbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWlzb2xhdGlvbiBsZXZlbCBndWFyYW50ZWUKKyAgICAgKiBAcmV0dXJuICAgIGlzb2xhdGlvbiBsZXZlbCBndWFyYW50ZWUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldEd1YXJhbnRlZUlzb2xhdGlvbkxldmVsKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgaWYgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbCBpcyB0byBiZSBndWFyYW50ZWVkCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZ3VhcmFudGVlSXNvbGF0aW9uCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZ3VhcmFudGVlSXNvbGF0aW9uICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRndWFyYW50ZWVJc29sYXRpb25MZXZlbChTdHJpbmcgZ3VhcmFudGVlSXNvbGF0aW9uKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkdVQVJBTlRFRUlTT0xBVElPTkxFVkVMLCBndWFyYW50ZWVJc29sYXRpb24pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqCi0gICAgICogQHJldHVybglpc29sYXRpb24gbGV2ZWwgZ3VhcmFudGVlCisgICAgICogQHJldHVybiAgICBpc29sYXRpb24gbGV2ZWwgZ3VhcmFudGVlCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRndWFyYW50ZWVJc29sYXRpb25MZXZlbCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkdVQVJBTlRFRUlTT0xBVElPTkxFVkVMKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L1Jlc291cmNlQWRhcHRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvUmVzb3VyY2VBZGFwdGVyLmphdmEKaW5kZXggMDFkY2ZmMC4uYmIxMmI0OCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvUmVzb3VyY2VBZGFwdGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvUmVzb3VyY2VBZGFwdGVyLmphdmEKQEAgLTI0LDggKzI0LDggQEAKIC8qKgogICogPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA4LzA1Ci0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wOC8wNQorICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogQENvbm5lY3RvcigKICAgICAgICAgZGVzY3JpcHRpb24gPSAiUmVzb3VyY2UgYWRhcHRlciB3cmFwcGluZyBEYXRhc291cmNlIGltcGxlbWVudGF0aW9uIG9mIGRyaXZlciIsCkBAIC00OSw1MiArNDksNTIgQEAKICAgICAgKiBFbXB0eSBtZXRob2QgaW1wbGVtZW50YXRpb24gZm9yIGVuZHBvaW50QWN0aXZhdGlvbgogICAgICAqIHdoaWNoIGp1c3QgdGhyb3dzIDxjb2RlPk5vdFN1cHBvcnRlZEV4Y2VwdGlvbjwvY29kZT4KICAgICAgKgotICAgICAqIEBwYXJhbQltZWYJPGNvZGU+TWVzc2FnZUVuZHBvaW50RmFjdG9yeTwvY29kZT4KLSAgICAgKiBAcGFyYW0JYXMJPGNvZGU+QWN0aXZhdGlvblNwZWM8L2NvZGU+Ci0gICAgICogQHRocm93cwk8Y29kZT5Ob3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+CisgICAgICogQHBhcmFtICAgIG1lZiAgICA8Y29kZT5NZXNzYWdlRW5kcG9pbnRGYWN0b3J5PC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBhcyAgICA8Y29kZT5BY3RpdmF0aW9uU3BlYzwvY29kZT4KKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPk5vdFN1cHBvcnRlZEV4Y2VwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlbmRwb2ludEFjdGl2YXRpb24oTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBtZWYsIEFjdGl2YXRpb25TcGVjIGFzKSB0aHJvd3MgTm90U3VwcG9ydGVkRXhjZXB0aW9uIHsKICAgICAgICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiVGhpcyBtZXRob2QgaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBKREJDIGNvbm5lY3RvciIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEVtcHR5IG1ldGhvZCBpbXBsZW1lbnRhdGlvbiBmb3IgZW5kcG9pbnREZWFjdGl2YXRpb24KICAgICAgKgotICAgICAqIEBwYXJhbQltZWYJPGNvZGU+TWVzc2FnZUVuZHBvaW50RmFjdG9yeTwvY29kZT4KLSAgICAgKiBAcGFyYW0JYXMJPGNvZGU+QWN0aXZhdGlvblNwZWM8L2NvZGU+CisgICAgICogQHBhcmFtICAgIG1lZiAgICA8Y29kZT5NZXNzYWdlRW5kcG9pbnRGYWN0b3J5PC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBhcyAgICA8Y29kZT5BY3RpdmF0aW9uU3BlYzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlbmRwb2ludERlYWN0aXZhdGlvbihNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IG1lZiwgQWN0aXZhdGlvblNwZWMgYXMpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBFbXB0eSBtZXRob2QgaW1wbGVtZW50YXRpb24gZm9yIGdldFhBUmVzb3VyY2VzCiAgICAgICogd2hpY2gganVzdCB0aHJvd3MgPGNvZGU+Tm90U3VwcG9ydGVkRXhjZXB0aW9uPC9jb2RlPgogICAgICAqCi0gICAgICogQHBhcmFtCXNwZWNzCTxjb2RlPkFjdGl2YXRpb25TcGVjPC9jb2RlPiBhcnJheQotICAgICAqIEB0aHJvd3MJPGNvZGU+Tm90U3VwcG9ydGVkRXhjZXB0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBzcGVjcyAgICA8Y29kZT5BY3RpdmF0aW9uU3BlYzwvY29kZT4gYXJyYXkKKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPk5vdFN1cHBvcnRlZEV4Y2VwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgWEFSZXNvdXJjZVtdIGdldFhBUmVzb3VyY2VzKEFjdGl2YXRpb25TcGVjW10gc3BlY3MpIHRocm93cyBOb3RTdXBwb3J0ZWRFeGNlcHRpb24gewogICAgICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJUaGlzIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIEpEQkMgY29ubmVjdG9yIik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogRW1wdHkgaW1wbGVtZW50YXRpb24gb2Ygc3RhcnQgbWV0aG9kCiAgICAgICoKLSAgICAgKiBAcGFyYW0JY3R4CTxjb2RlPkJvb3RzdHJhcENvbnRleHQ8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGN0eCAgICA8Y29kZT5Cb290c3RyYXBDb250ZXh0PC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHN0YXJ0KEJvb3RzdHJhcENvbnRleHQgY3R4KSB0aHJvd3MgUmVzb3VyY2VBZGFwdGVySW50ZXJuYWxFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc291cmNlIEFkYXB0ZXIgaXMgc3RhcnRpbmcgd2l0aCBjb25maWd1cmF0aW9uIDoiICsgcmFQcm9wKTsKICAgICAgICAgaWYgKHJhUHJvcCA9PSBudWxsIHx8ICFyYVByb3AuZXF1YWxzKCJWQUxJRCIpKSB7Ci0JICAgIHRocm93IG5ldyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbigiUmVzb3VyY2UgYWRhcHRlciBjYW5ub3Qgc3RhcnQuIEl0IGlzIGNvbmZpZ3VyZWQgYXMgOiAiICsgcmFQcm9wKTsKLQl9IAorICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VBZGFwdGVySW50ZXJuYWxFeGNlcHRpb24oIlJlc291cmNlIGFkYXB0ZXIgY2Fubm90IHN0YXJ0LiBJdCBpcyBjb25maWd1cmVkIGFzIDogIiArIHJhUHJvcCk7CiAgICAgfQotICAgIAorICAgIH0KKwogICAgIC8qKgogICAgICAqIEVtcHR5IGltcGxlbWVudGF0aW9uIG9mIHN0b3AgbWV0aG9kCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc3RvcCgpIHsKLSAgICAKKwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldFJBUHJvcGVydHkoU3RyaW5nIHMpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L2J1aWxkLnhtbAppbmRleCA1ZTE0ZDQ0Li5mZjBmMDJiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvYnVpbGQueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxwcm9qZWN0IG5hbWU9ImpkYmNfY29ubmVjdG9yIiBiYXNlZGlyPSIke2dqYy5ob21lfSIgZGVmYXVsdD0iYnVpbGQiPgogICA8cHJvcGVydHkgbmFtZT0icGtnLmRpciIgdmFsdWU9ImNvbS9zdW4vZ2pjL3NwaSIvPgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImNsZWFuIj4KICAgICA8YW50IGFudGZpbGU9ImJ1aWxkLnhtbCIgZGlyPSIke2dqYy5ob21lfS9iaW4iIHRhcmdldD0iY2xlYW4iLz4KICAgPC90YXJnZXQ+CkBAIC0yOSw1NSArMjksNTUgQEAKICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlMTQiPgotICAgIAkKLSAgICAJPG1rZGlyIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ii8+Ci0gICAgCQotCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L2pkYmMuamFyIiBiYXNlZGlyPSIke2NsYXNzLmRpcn0iCisKKyAgICAgICAgPG1rZGlyIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ii8+CisKKyAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9qZGJjLmphciIgYmFzZWRpcj0iJHtjbGFzcy5kaXJ9IgogICAgICAgICBpbmNsdWRlcz0iJHtwa2cuZGlyfS8qKi8qLCBjb20vc3VuL2dqYy91dGlsLyoqLyosIGNvbS9zdW4vZ2pjL2NvbW1vbi8qKi8qIiBleGNsdWRlcz0iY29tL3N1bi9namMvY2NpLyoqLyosY29tL3N1bi9namMvc3BpLzEuNC8qKi8qIi8+Ci0gICAgICAgIAorCiAgICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fY3AucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgotICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS1jcC54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgkKKyAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEtY3AueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4KICAgICAgICAgPC9jb3B5PgotICAgCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fY3AucmFyIiB1cGRhdGU9InllcyI+Ci0gICAJCTxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KLSAgIAkJCTxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgotICAgCQk8L21ldGFpbmY+Ci0gICAJPC9qYXI+Ci0gICAJCi0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX194YS5yYXIiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIgaW5jbHVkZXM9ImpkYmMuamFyIi8+Ci0gICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLXhhLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CQorICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fY3AucmFyIiB1cGRhdGU9InllcyI+CisgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KKyAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgorICAgICAgICAgICA8L21ldGFpbmY+CisgICAgICAgPC9qYXI+CisKKyAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX3hhLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KKyAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEteGEueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4KICAgICAgICAgPC9jb3B5PgotICAgCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19feGEucmFyIiB1cGRhdGU9InllcyI+Ci0gICAJCTxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KLSAgIAkJCTxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgotICAgCQk8L21ldGFpbmY+Ci0gICAJPC9qYXI+Ci0gICAJCi0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kbS5yYXIiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIgaW5jbHVkZXM9ImpkYmMuamFyIi8+Ci0gICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLWRtLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CQorICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19feGEucmFyIiB1cGRhdGU9InllcyI+CisgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KKyAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgorICAgICAgICAgICA8L21ldGFpbmY+CisgICAgICAgPC9qYXI+CisKKyAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RtLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KKyAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEtZG0ueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4KICAgICAgICAgPC9jb3B5PgotICAgCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZG0ucmFyIiB1cGRhdGU9InllcyI+Ci0gICAJCTxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KLSAgIAkJCTxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgotICAgCQk8L21ldGFpbmY+Ci0gICAJPC9qYXI+Ci0gICAJCi0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kcy5yYXIiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIgaW5jbHVkZXM9ImpkYmMuamFyIi8+Ci0gICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLWRzLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CQorICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZG0ucmFyIiB1cGRhdGU9InllcyI+CisgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KKyAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgorICAgICAgICAgICA8L21ldGFpbmY+CisgICAgICAgPC9qYXI+CisKKyAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RzLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KKyAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEtZHMueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4KICAgICAgICAgPC9jb3B5PgotICAgCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZHMucmFyIiB1cGRhdGU9InllcyI+Ci0gICAJCTxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KLSAgIAkJCTxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgotICAgCQk8L21ldGFpbmY+Ci0gICAJPC9qYXI+Ci0gICAJCi0gICAJPGRlbGV0ZSBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3QvY29tIi8+Ci0gICAJPGRlbGV0ZSBmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvamRiYy5qYXIiLz4KLSAgIAk8ZGVsZXRlIGZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiLz4KLSAgIAkKKyAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RzLnJhciIgdXBkYXRlPSJ5ZXMiPgorICAgICAgICAgICA8bWV0YWluZiBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSI+CisgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KKyAgICAgICAgICAgPC9tZXRhaW5mPgorICAgICAgIDwvamFyPgorCisgICAgICAgPGRlbGV0ZSBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3QvY29tIi8+CisgICAgICAgPGRlbGV0ZSBmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvamRiYy5qYXIiLz4KKyAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiLz4KKwogICA8L3RhcmdldD4KIAogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkMTQiIGRlcGVuZHM9ImNvbXBpbGUxNCwgcGFja2FnZTE0Ii8+CiAgICAgPHRhcmdldCBuYW1lPSJidWlsZDEzIi8+Ci0JPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iYnVpbGQxNCwgYnVpbGQxMyIvPgorICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImJ1aWxkMTQsIGJ1aWxkMTMiLz4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L3JhLWRzLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L3JhLWRzLnhtbAppbmRleCAzOWE1MzI1Li5kMTI2ZmFiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9yYS1kcy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvcmEtZHMueG1sCkBAIC0yOCw3ICsyOCw3IEBACiAgICAgICAgIDxvdXRib3VuZC1yZXNvdXJjZWFkYXB0ZXI+CiAgICAgICAgICAgICA8Y29ubmVjdGlvbi1kZWZpbml0aW9uPgogICAgICAgICAgICAgICAgIDxtYW5hZ2VkY29ubmVjdGlvbmZhY3RvcnktY2xhc3M+Y29tLnN1bi5qZGJjcmEuc3BpLkRTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9tYW5hZ2VkY29ubmVjdGlvbmZhY3RvcnktY2xhc3M+Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICA8IS0tIFRoZXJlIGNhbiBiZSBhbnkgbnVtYmVyIG9mIHRoZXNlIGVsZW1lbnRzIGluY2x1ZGluZyAwIC0tPgogICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5Vc2VyPC9jb25maWctcHJvcGVydHktbmFtZT4KQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPmRicGFzc3dvcmQ8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VVJMPC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPmpkYmM6ZGVyYnk6Ly9sb2NhbGhvc3Q6MTUyNy90ZXN0ZGI7Y3JlYXRlPXRydWU8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KQEAgLTU1LDcgKzU1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPk9yYWNsZSB0aGluIGRyaXZlciBEYXRhc291cmNlPC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5DbGFzc05hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+b3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudERhdGFTb3VyY2U0MDwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgpAQCAtNzIsNyArNzIsNyBAQAogICAgICAgICAgICAgICAgIDxjb25uZWN0aW9uLWludGVyZmFjZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb25uZWN0aW9uLWludGVyZmFjZT4KIAogICAgICAgICAgICAgICAgIDxjb25uZWN0aW9uLWltcGwtY2xhc3M+Y29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25Ib2xkZXI8L2Nvbm5lY3Rpb24taW1wbC1jbGFzcz4KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgPC9jb25uZWN0aW9uLWRlZmluaXRpb24+CiAKICAgICAgICAgICAgIDx0cmFuc2FjdGlvbi1zdXBwb3J0PkxvY2FsVHJhbnNhY3Rpb248L3RyYW5zYWN0aW9uLXN1cHBvcnQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25NYW5hZ2VyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25NYW5hZ2VyLmphdmEKaW5kZXggYjIxOWNkMi4uMTI0ODA5YyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uTWFuYWdlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvbk1hbmFnZXIuamF2YQpAQCAtMjQsMjYgKzI0LDI2IEBACiAvKioKICAqIENvbm5lY3Rpb25NYW5hZ2VyIGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMzEKLSAqIEBhdXRob3IJQmlub2QgUC5HCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzMxCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRwogICovCi1wdWJsaWMgY2xhc3MgQ29ubmVjdGlvbk1hbmFnZXIgaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uTWFuYWdlcnsgCitwdWJsaWMgY2xhc3MgQ29ubmVjdGlvbk1hbmFnZXIgaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uTWFuYWdlcnsKIAogICAgIC8qKgogICAgICAqIFJldHVybnMgYSA8Y29kZT5Db25uZWN0aW9uIDwvY29kZT4gb2JqZWN0IHRvIHRoZSA8Y29kZT5Db25uZWN0aW9uRmFjdG9yeTwvY29kZT4KICAgICAgKgotICAgICAqIEBwYXJhbQltY2YJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHBhcmFtCWluZm8JPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHJldHVybglBIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IE9iamVjdC4KLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uIEluIGNhc2Ugb2YgYW4gZXJyb3IgaW4gZ2V0dGluZyB0aGUgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4uCisgICAgICogQHBhcmFtICAgIG1jZiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgaW5mbyAgICA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcmV0dXJuICAgIEEgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gT2JqZWN0LgorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gSW4gY2FzZSBvZiBhbiBlcnJvciBpbiBnZXR0aW5nIHRoZSA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPi4KICAgICAgKi8KICAgICBwdWJsaWMgT2JqZWN0IGFsbG9jYXRlQ29ubmVjdGlvbihNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmLAotICAgIAkJCQkgICAgIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbmZvKSAKLSAgICAJCQkJICAgICB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewotCU1hbmFnZWRDb25uZWN0aW9uIG1jID0gbWNmLmNyZWF0ZU1hbmFnZWRDb25uZWN0aW9uKG51bGwsIGluZm8pOwotCXJldHVybiBtYy5nZXRDb25uZWN0aW9uKG51bGwsIGluZm8pOyAgICAJCQkJICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW5mbykKKyAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24geworICAgIE1hbmFnZWRDb25uZWN0aW9uIG1jID0gbWNmLmNyZWF0ZU1hbmFnZWRDb25uZWN0aW9uKG51bGwsIGluZm8pOworICAgIHJldHVybiBtYy5nZXRDb25uZWN0aW9uKG51bGwsIGluZm8pOwogICAgIH0KLSAgICAKKwogICAgIC8qCiAgICAgICogVGhpcyBjbGFzcyBjb3VsZCBlZmZlY3RpdmVseSBpbXBsZW1lbnQgQ29ubmVjdGlvbiBwb29saW5nIGFsc28uCiAgICAgICogQ291bGQgYmUgZG9uZSBmb3IgRkNTLgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uUmVxdWVzdEluZm8uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvblJlcXVlc3RJbmZvLmphdmEKaW5kZXggMzljNzg3Ni4uYzQ3N2ZjMiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uUmVxdWVzdEluZm8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25SZXF1ZXN0SW5mby5qYXZhCkBAIC0xOSwxMCArMTksMTAgQEAKIC8qKgogICogQ29ubmVjdGlvblJlcXVlc3RJbmZvIGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMzEKLSAqIEBhdXRob3IJQmlub2QgUC5HCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzMxCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRwogICovCi1wdWJsaWMgY2xhc3MgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZveyAKK3B1YmxpYyBjbGFzcyBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm97CiAKICAgICBwcml2YXRlIFN0cmluZyB1c2VyOwogICAgIHByaXZhdGUgU3RyaW5nIHBhc3N3b3JkOwpAQCAtMzAsOCArMzAsOCBAQAogICAgIC8qKgogICAgICAqIENvbnN0cnVjdHMgYSBuZXcgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBvYmplY3QKICAgICAgKgotICAgICAqIEBwYXJhbQl1c2VyCVVzZXIgTmFtZS4KLSAgICAgKiBAcGFyYW0JcGFzc3dvcmQJUGFzc3dvcmQKKyAgICAgKiBAcGFyYW0gICAgdXNlciAgICBVc2VyIE5hbWUuCisgICAgICogQHBhcmFtICAgIHBhc3N3b3JkICAgIFBhc3N3b3JkCiAgICAgICovCiAgICAgcHVibGljIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyhTdHJpbmcgdXNlciwgU3RyaW5nIHBhc3N3b3JkKSB7CiAgICAgICAgIHRoaXMudXNlciA9IHVzZXI7CkBAIC00MSw3ICs0MSw3IEBACiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSB1c2VyIG5hbWUgb2YgdGhlIENvbm5lY3Rpb25SZXF1ZXN0SW5mby4KICAgICAgKgotICAgICAqIEByZXR1cm4JVXNlciBuYW1lIG9mIENvbm5lY3Rpb25SZXF1ZXN0SW5mby4KKyAgICAgKiBAcmV0dXJuICAgIFVzZXIgbmFtZSBvZiBDb25uZWN0aW9uUmVxdWVzdEluZm8uCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRVc2VyKCkgewogICAgICAgICByZXR1cm4gdXNlcjsKQEAgLTUwLDcgKzUwLDcgQEAKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIHBhc3N3b3JkIG9mIHRoZSBDb25uZWN0aW9uUmVxdWVzdEluZm8uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVBhc3N3b3JkIG9mIENvbm5lY3Rpb25SZXF1ZXN0SW5mby4KKyAgICAgKiBAcmV0dXJuICAgIFBhc3N3b3JkIG9mIENvbm5lY3Rpb25SZXF1ZXN0SW5mby4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFBhc3N3b3JkKCkgewogICAgICAgICByZXR1cm4gcGFzc3dvcmQ7CkBAIC01OSw3ICs1OSw3IEBACiAgICAgLyoqCiAgICAgICogVmVyaWZ5IHdoZXRoZXIgdHdvIENvbm5lY3Rpb25SZXF1ZXN0SW5mb3MgYXJlIGVxdWFsLgogICAgICAqCi0gICAgICogQHJldHVybglUcnVlLCBpZiB0aGV5IGFyZSBlcXVhbCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLgorICAgICAqIEByZXR1cm4gICAgVHJ1ZSwgaWYgdGhleSBhcmUgZXF1YWwgYW5kIGZhbHNlIG90aGVyd2lzZS4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9iaikgewogICAgICAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBmYWxzZTsKQEAgLTc1LDE4ICs3NSwxOCBAQAogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgaGFzaGNvZGUgb2YgdGhlIG9iamVjdC4KICAgICAgKgotICAgICAqIEByZXR1cm4JaGFzaENvZGUuCisgICAgICogQHJldHVybiAgICBoYXNoQ29kZS4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewogICAgICAgICBTdHJpbmcgcmVzdWx0ID0gIiIgKyB1c2VyICsgcGFzc3dvcmQ7CiAgICAgICAgIHJldHVybiByZXN1bHQuaGFzaENvZGUoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb21wYXJlcyB0d28gb2JqZWN0cy4KICAgICAgKgotICAgICAqIEBwYXJhbQlvMQlGaXJzdCBvYmplY3QuCi0gICAgICogQHBhcmFtCW8yCVNlY29uZCBvYmplY3QuCisgICAgICogQHBhcmFtICAgIG8xICAgIEZpcnN0IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgbzIgICAgU2Vjb25kIG9iamVjdC4KICAgICAgKi8KICAgICBwcml2YXRlIGJvb2xlYW4gaXNFcXVhbChPYmplY3QgbzEsIE9iamVjdCBvMikgewogICAgICAgICBpZiAobzEgPT0gbnVsbCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCmluZGV4IGI0YTYzMTYuLmM4YWFmNzcgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKQEAgLTMxLDggKzMxLDggQEAKIC8qKgogICogRGF0YSBTb3VyY2UgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzMwCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8zMAorICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogCiBAQ29ubmVjdGlvbkRlZmluaXRpb24oCkBAIC00MiwzMSArNDIsMzEgQEAKICAgICAgICAgY29ubmVjdGlvbkZhY3RvcnlJbXBsID0gY29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2UuY2xhc3MKICkKIHB1YmxpYyBjbGFzcyBEU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBleHRlbmRzIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSB7Ci0gICAKKwogICAgIHByaXZhdGUgdHJhbnNpZW50IGphdmF4LnNxbC5EYXRhU291cmNlIGRhdGFTb3VyY2VPYmo7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBMb2dnZXIgX2xvZ2dlcjsKICAgICBzdGF0aWMgewogICAgICAgICBfbG9nZ2VyID0gTG9nZ2VyLmdldEFub255bW91c0xvZ2dlcigpOwogICAgIH0KICAgICBwcml2YXRlIGJvb2xlYW4gZGVidWcgPSBmYWxzZTsKLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBuZXcgcGh5c2ljYWwgY29ubmVjdGlvbiB0byB0aGUgdW5kZXJseWluZyBFSVMgcmVzb3VyY2UKICAgICAgKiBtYW5hZ2VyLgotICAgICAqIAotICAgICAqIEBwYXJhbQlzdWJqZWN0CTxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICogQHBhcmFtCWN4UmVxdWVzdEluZm8JPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiB3aGljaCBtYXkgYmUgY3JlYXRlZAotICAgICAqICAgICAgIAkgICAgICAgICAgICAgCWFzIGEgcmVzdWx0IG9mIHRoZSBpbnZvY2F0aW9uIDxjb2RlPmdldENvbm5lY3Rpb24odXNlciwgcGFzc3dvcmQpPC9jb2RlPgotICAgICAqICAgICAgIAkgICAgICAgICAgICAgCW9uIHRoZSA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QKLSAgICAgKiBAcmV0dXJuCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QgY3JlYXRlZAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gaW5zdGFudGlhdGluZyB0aGUKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCTxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdCB1c2VkIGZvciB0aGUKLSAgICAgKiAgICAgICAJCQkJY3JlYXRpb24gb2YgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QKLSAgICAgKiBAdGhyb3dzCVNlY3VyaXR5RXhjZXB0aW9uCWlmIHRoZXJlIGlubyA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdAotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJc2F0aXNmeWluZyB0aGlzIHJlcXVlc3QgCi0gICAgICogQHRocm93cwlSZXNvdXJjZUFsbG9jYXRpb25FeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUgCi0gICAgICoJCQkJCQlwaHlzaWNhbCBjb25uZWN0aW9uCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3ViamVjdCAgICA8Y29kZT5TdWJqZWN0PC9jb2RlPiBpbnN0YW5jZSBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqIEBwYXJhbSAgICBjeFJlcXVlc3RJbmZvICAgIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gd2hpY2ggbWF5IGJlIGNyZWF0ZWQKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyBhIHJlc3VsdCBvZiB0aGUgaW52b2NhdGlvbiA8Y29kZT5nZXRDb25uZWN0aW9uKHVzZXIsIHBhc3N3b3JkKTwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiB0aGUgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0CisgICAgICogQHJldHVybiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGNyZWF0ZWQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGluc3RhbnRpYXRpbmcgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QgdXNlZCBmb3IgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgIGNyZWF0aW9uIG9mIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0CisgICAgICogQHRocm93cyAgICBTZWN1cml0eUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpbm8gPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdGlzZnlpbmcgdGhpcyByZXF1ZXN0CisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUFsbG9jYXRpb25FeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHBoeXNpY2FsIGNvbm5lY3Rpb24KICAgICAgKi8KICAgICBwdWJsaWMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gY3JlYXRlTWFuYWdlZENvbm5lY3Rpb24oamF2YXguc2VjdXJpdHkuYXV0aC5TdWJqZWN0IHN1YmplY3QsCiAgICAgICAgIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBjeFJlcXVlc3RJbmZvKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewpAQCAtNzQsNyArNzQsNyBAQAogICAgICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBjcmVhdGVNYW5hZ2VkQ29ubmVjdGlvbiIpOwogICAgICAgICB9CiAgICAgICAgIFBhc3N3b3JkQ3JlZGVudGlhbCBwYyA9IFNlY3VyaXR5VXRpbHMuZ2V0UGFzc3dvcmRDcmVkZW50aWFsKHRoaXMsIHN1YmplY3QsIGN4UmVxdWVzdEluZm8pOwotICAgICAgICAKKwogICAgICAgICBpZihkYXRhU291cmNlT2JqID09IG51bGwpIHsKICAgICAgICAgICAgIGlmKGRzT2JqQnVpbGRlciA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgZHNPYmpCdWlsZGVyID0gbmV3IERhdGFTb3VyY2VPYmplY3RCdWlsZGVyKHNwZWMpOwpAQCAtODQsMzYgKzg0LDM2IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGRhdGFTb3VyY2VPYmogPSAoamF2YXguc3FsLkRhdGFTb3VyY2UpIGRzT2JqQnVpbGRlci5jb25zdHJ1Y3REYXRhU291cmNlT2JqZWN0KCk7CiAgICAgICAgICAgICB9IGNhdGNoKENsYXNzQ2FzdEV4Y2VwdGlvbiBjY2UpIHsKLQkgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2NjZSIsIGNjZSk7CisgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19jY2UiLCBjY2UpOwogICAgICAgICAgICAgICAgIHRocm93IG5ldyBqYWthcnRhLnJlc291cmNlLlJlc291cmNlRXhjZXB0aW9uKGNjZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gZHNDb25uID0gbnVsbDsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKLQkgICAgLyogRm9yIHRoZSBjYXNlIHdoZXJlIHRoZSB1c2VyL3Bhc3N3ZCBvZiB0aGUgY29ubmVjdGlvbiBwb29sIGlzCi0JICAgICAqIGVxdWFsIHRvIHRoZSBQYXNzd29yZENyZWRlbnRpYWwgZm9yIHRoZSBjb25uZWN0aW9uIHJlcXVlc3QKLQkgICAgICogZ2V0IGEgY29ubmVjdGlvbiBmcm9tIHRoaXMgcG9vbCBkaXJlY3RseS4KLQkgICAgICogZm9yIGFsbCBvdGhlciBjb25kaXRpb25zIGdvIGNyZWF0ZSBhIG5ldyBjb25uZWN0aW9uCi0JICAgICAqLwotCSAgICBpZiAoIGlzRXF1YWwoIHBjLCBnZXRVc2VyKCksIGdldFBhc3N3b3JkKCkgKSApIHsKLQkgICAgICAgIGRzQ29ubiA9IGRhdGFTb3VyY2VPYmouZ2V0Q29ubmVjdGlvbigpOwotCSAgICB9IGVsc2UgewotCSAgICAgICAgZHNDb25uID0gZGF0YVNvdXJjZU9iai5nZXRDb25uZWN0aW9uKHBjLmdldFVzZXJOYW1lKCksIAotCQkgICAgbmV3IFN0cmluZyhwYy5nZXRQYXNzd29yZCgpKSk7Ci0JICAgIH0KKyAgICAgICAgLyogRm9yIHRoZSBjYXNlIHdoZXJlIHRoZSB1c2VyL3Bhc3N3ZCBvZiB0aGUgY29ubmVjdGlvbiBwb29sIGlzCisgICAgICAgICAqIGVxdWFsIHRvIHRoZSBQYXNzd29yZENyZWRlbnRpYWwgZm9yIHRoZSBjb25uZWN0aW9uIHJlcXVlc3QKKyAgICAgICAgICogZ2V0IGEgY29ubmVjdGlvbiBmcm9tIHRoaXMgcG9vbCBkaXJlY3RseS4KKyAgICAgICAgICogZm9yIGFsbCBvdGhlciBjb25kaXRpb25zIGdvIGNyZWF0ZSBhIG5ldyBjb25uZWN0aW9uCisgICAgICAgICAqLworICAgICAgICBpZiAoIGlzRXF1YWwoIHBjLCBnZXRVc2VyKCksIGdldFBhc3N3b3JkKCkgKSApIHsKKyAgICAgICAgICAgIGRzQ29ubiA9IGRhdGFTb3VyY2VPYmouZ2V0Q29ubmVjdGlvbigpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZHNDb25uID0gZGF0YVNvdXJjZU9iai5nZXRDb25uZWN0aW9uKHBjLmdldFVzZXJOYW1lKCksCisgICAgICAgICAgICBuZXcgU3RyaW5nKHBjLmdldFBhc3N3b3JkKCkpKTsKKyAgICAgICAgfQogICAgICAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7CiAgICAgICAgICAgICBzcWxlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5leGNfY3JlYXRlX2Nvbm4iLCBzcWxlKTsKLSAgICAgICAgICAgIHRocm93IG5ldyBqYWthcnRhLnJlc291cmNlLnNwaS5SZXNvdXJjZUFsbG9jYXRpb25FeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGNvdWxkIG5vdCBiZSBhbGxvY2F0ZWQ6ICIgKyAKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMuZXhjX2NyZWF0ZV9jb25uIiwgc3FsZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgamFrYXJ0YS5yZXNvdXJjZS5zcGkuUmVzb3VyY2VBbGxvY2F0aW9uRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBjb3VsZCBub3QgYmUgYWxsb2NhdGVkOiAiICsKICAgICAgICAgICAgICAgICBzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJWMy1URVNUIDogdW5hYmxlIHRvIGdldCBjb25uZWN0aW9uIik7Ci0gICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOyAgIAorICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlYzLVRFU1QgOiBnb3QgY29ubmVjdGlvbiIpOwotICAgICAgICAKKwogICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWMgPSBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uKG51bGwsIGRzQ29ubiwgcGMsIHRoaXMpOwogICAgICAgICAvL0dKQ0lOVAogLyoKQEAgLTEyMywxNSArMTIzLDE1IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVjMtVEVTVCA6IHJldHVybmluZyBjb25uZWN0aW9uIik7CiAgICAgICAgIHJldHVybiBtYzsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBDaGVjayBpZiB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaXMgZXF1YWwgdG8gCisgICAgICogQ2hlY2sgaWYgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGlzIGVxdWFsIHRvCiAgICAgICogYW5vdGhlciA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LgotICAgICAqIAotICAgICAqIEBwYXJhbQlvdGhlcgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdCBmb3IgY2hlY2tpbmcgZXF1YWxpdHkgd2l0aAotICAgICAqIEByZXR1cm4JdHJ1ZQlpZiB0aGUgcHJvcGVydHkgc2V0cyBvZiBib3RoIHRoZSAKLSAgICAgKgkJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0cyBhcmUgdGhlIHNhbWUKLSAgICAgKgkJZmFsc2UJb3RoZXJ3aXNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgb3RoZXIgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QgZm9yIGNoZWNraW5nIGVxdWFsaXR5IHdpdGgKKyAgICAgKiBAcmV0dXJuICAgIHRydWUgICAgaWYgdGhlIHByb3BlcnR5IHNldHMgb2YgYm90aCB0aGUKKyAgICAgKiAgICAgICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0cyBhcmUgdGhlIHNhbWUKKyAgICAgKiAgICAgICAgZmFsc2UgICAgb3RoZXJ3aXNlCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvdGhlcikgewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtMTQyLDI4ICsxNDIsMjggQEAKICAgICAgICAgICogaWYgYW5kIG9ubHkgaWYgdGhlaXIgcHJvcGVydGllcyBhcmUgdGhlIHNhbWUuCiAgICAgICAgICAqLwogICAgICAgICBpZihvdGhlciBpbnN0YW5jZW9mIGNvbS5zdW4uamRiY3JhLnNwaS5EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSkgewotICAgICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLkRTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG90aGVyTUNGID0gCisgICAgICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnkgb3RoZXJNQ0YgPQogICAgICAgICAgICAgICAgIChjb20uc3VuLmpkYmNyYS5zcGkuRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkpIG90aGVyOwogICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3BlYy5lcXVhbHMob3RoZXJNQ0Yuc3BlYyk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHNlcnZlciBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCXNlcnZlck5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0U2VydmVyTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgc2VydmVyTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRTZXJ2ZXJOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHNlcnZlck5hbWUoU3RyaW5nIHNlcnZlck5hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuU0VSVkVSTkFNRSwgc2VydmVyTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgc2VydmVyIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXNlcnZlck5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldFNlcnZlck5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBzZXJ2ZXJOYW1lCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRTZXJ2ZXJOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0c2VydmVyTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlNFUlZFUk5BTUUpOwpAQCAtMTc4LDEyICsxNzgsMTIgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgc2VydmVyIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc2VydmVyTmFtZQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXRTZXJ2ZXJOYW1lPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBzZXJ2ZXJOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldFNlcnZlck5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgQENvbmZpZ1Byb3BlcnR5KAogICAgICAgICAgICAgZGVmYXVsdFZhbHVlID0gImxvY2FsaG9zdCIsCkBAIC0xOTIsMTIgKzE5MiwxMiBAQAogICAgIHB1YmxpYyB2b2lkIHNldFNlcnZlck5hbWUoU3RyaW5nIHNlcnZlck5hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuU0VSVkVSTkFNRSwgc2VydmVyTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgc2VydmVyIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXNlcnZlck5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldFNlcnZlck5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBzZXJ2ZXJOYW1lCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRTZXJ2ZXJOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmVyTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlNFUlZFUk5BTUUpOwpAQCAtMjE5LDMyICsyMTksMzIgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldEFsaWFzVGVzdCAoKSB7CiAgICAgICAgIHJldHVybiBhbGlhc1Rlc3Q7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgcG9ydCBudW1iZXIuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcG9ydE51bWJlcgk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXRQb3J0TnVtYmVyPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBwb3J0TnVtYmVyICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldFBvcnROdW1iZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0cG9ydE51bWJlcihTdHJpbmcgcG9ydE51bWJlcikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5QT1JUTlVNQkVSLCBwb3J0TnVtYmVyKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBwb3J0IG51bWJlci4KICAgICAgKgotICAgICAqIEByZXR1cm4JcG9ydE51bWJlcgotICAgICAqIEBzZWUJPGNvZGU+c2V0UG9ydE51bWJlcjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHBvcnROdW1iZXIKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldFBvcnROdW1iZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRwb3J0TnVtYmVyKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUE9SVE5VTUJFUik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgcG9ydCBudW1iZXIuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcG9ydE51bWJlcgk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXRQb3J0TnVtYmVyPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBwb3J0TnVtYmVyICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldFBvcnROdW1iZXI8L2NvZGU+CiAgICAgICovCiAgICAgQENvbmZpZ1Byb3BlcnR5KAogICAgICAgICAgICAgZGVmYXVsdFZhbHVlID0gIjE1MjciLApAQCAtMjUzLDQyICsyNTMsNDIgQEAKICAgICBwdWJsaWMgdm9pZCBzZXRQb3J0TnVtYmVyKFN0cmluZyBwb3J0TnVtYmVyKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIsIHBvcnROdW1iZXIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHBvcnQgbnVtYmVyLgogICAgICAqCi0gICAgICogQHJldHVybglwb3J0TnVtYmVyCi0gICAgICogQHNlZQk8Y29kZT5zZXRQb3J0TnVtYmVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgcG9ydE51bWJlcgorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0UG9ydE51bWJlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFBvcnROdW1iZXIoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QT1JUTlVNQkVSKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkYXRhYmFzZSBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCWRhdGFiYXNlTmFtZQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREYXRhYmFzZU5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRhdGFiYXNlTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREYXRhYmFzZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0ZGF0YWJhc2VOYW1lKFN0cmluZyBkYXRhYmFzZU5hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQUJBU0VOQU1FLCBkYXRhYmFzZU5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRhdGFiYXNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRhdGFiYXNlTmFtZQotICAgICAqIEBzZWUJPGNvZGU+c2V0RGF0YWJhc2VOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZGF0YWJhc2VOYW1lCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREYXRhYmFzZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRkYXRhYmFzZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBQkFTRU5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRhdGFiYXNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZGF0YWJhc2VOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERhdGFiYXNlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGF0YWJhc2VOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERhdGFiYXNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBAQ29uZmlnUHJvcGVydHkoCiAgICAgICAgICAgICBkZWZhdWx0VmFsdWU9InRlc3RkYiIsCkBAIC0yOTcsNDIgKzI5Nyw0MiBAQAogICAgIHB1YmxpYyB2b2lkIHNldERhdGFiYXNlTmFtZShTdHJpbmcgZGF0YWJhc2VOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFCQVNFTkFNRSwgZGF0YWJhc2VOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkYXRhYmFzZSBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglkYXRhYmFzZU5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldERhdGFiYXNlTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRhdGFiYXNlTmFtZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGF0YWJhc2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGF0YWJhc2VOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQUJBU0VOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkYXRhIHNvdXJjZSBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCWRzbiA8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREYXRhU291cmNlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZHNuIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERhdGFTb3VyY2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGRhdGFTb3VyY2VOYW1lKFN0cmluZyBkc24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQVNPVVJDRU5BTUUsIGRzbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGF0YSBzb3VyY2UgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JZHNuCi0gICAgICogQHNlZQk8Y29kZT5zZXREYXRhU291cmNlTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRzbgorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRkYXRhU291cmNlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkYXRhIHNvdXJjZSBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCWRzbiA8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREYXRhU291cmNlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZHNuIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERhdGFTb3VyY2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIEBDb25maWdQcm9wZXJ0eSgKICAgICAgICAgICAgIHR5cGU9amF2YS5sYW5nLlN0cmluZy5jbGFzcwpAQCAtMzQwLDIwMyArMzQwLDIwMyBAQAogICAgIHB1YmxpYyB2b2lkIHNldERhdGFTb3VyY2VOYW1lKFN0cmluZyBkc24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQVNPVVJDRU5BTUUsIGRzbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGF0YSBzb3VyY2UgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JZHNuCi0gICAgICogQHNlZQk8Y29kZT5zZXREYXRhU291cmNlTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRzbgorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXREYXRhU291cmNlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkZXNjcmlwdGlvbi4KICAgICAgKgotICAgICAqIEBwYXJhbQlkZXNjCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERlc2NyaXB0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkZXNjICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERlc2NyaXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGRlc2NyaXB0aW9uKFN0cmluZyBkZXNjKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFU0NSSVBUSU9OLCBkZXNjKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkZXNjcmlwdGlvbi4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGVzYwotICAgICAqIEBzZWUJPGNvZGU+c2V0RGVzY3JpcHRpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBkZXNjCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREZXNjcmlwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGRlc2NyaXB0aW9uKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVTQ1JJUFRJT04pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRlc2NyaXB0aW9uLgogICAgICAqCi0gICAgICogQHBhcmFtCWRlc2MJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGVzY3JpcHRpb248L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRlc2MgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGVzY3JpcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RGVzY3JpcHRpb24oU3RyaW5nIGRlc2MpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVTQ1JJUFRJT04sIGRlc2MpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRlc2NyaXB0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybglkZXNjCi0gICAgICogQHNlZQk8Y29kZT5zZXREZXNjcmlwdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRlc2MKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERlc2NyaXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERVNDUklQVElPTik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgbmV0d29yayBwcm90b2NvbC4KICAgICAgKgotICAgICAqIEBwYXJhbQlud1Byb3RvY29sCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbndQcm90b2NvbCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0bmV0d29ya1Byb3RvY29sKFN0cmluZyBud1Byb3RvY29sKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk5FVFdPUktQUk9UT0NPTCwgbndQcm90b2NvbCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgbmV0d29yayBwcm90b2NvbC4KICAgICAgKgotICAgICAqIEByZXR1cm4JbndQcm90b2NvbAotICAgICAqIEBzZWUJPGNvZGU+c2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgbndQcm90b2NvbAorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0bmV0d29ya1Byb3RvY29sKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTkVUV09SS1BST1RPQ09MKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBuZXR3b3JrIHByb3RvY29sLgogICAgICAqCi0gICAgICogQHBhcmFtCW53UHJvdG9jb2wJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBud1Byb3RvY29sICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXROZXR3b3JrUHJvdG9jb2woU3RyaW5nIG53UHJvdG9jb2wpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTkVUV09SS1BST1RPQ09MLCBud1Byb3RvY29sKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBuZXR3b3JrIHByb3RvY29sLgogICAgICAqCi0gICAgICogQHJldHVybglud1Byb3RvY29sCi0gICAgICogQHNlZQk8Y29kZT5zZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CisgICAgICogQHJldHVybiAgICBud1Byb3RvY29sCisgICAgICogQHNlZSAgICA8Y29kZT5zZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXROZXR3b3JrUHJvdG9jb2woKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ORVRXT1JLUFJPVE9DT0wpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHJvbGUgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlyb2xlTmFtZQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXRSb2xlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcm9sZU5hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0Um9sZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0cm9sZU5hbWUoU3RyaW5nIHJvbGVOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlJPTEVOQU1FLCByb2xlTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcm9sZSBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglyb2xlTmFtZQotICAgICAqIEBzZWUJPGNvZGU+c2V0Um9sZU5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICByb2xlTmFtZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0Um9sZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRyb2xlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlJPTEVOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSByb2xlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jcm9sZU5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0Um9sZU5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHJvbGVOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldFJvbGVOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFJvbGVOYW1lKFN0cmluZyByb2xlTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ST0xFTkFNRSwgcm9sZU5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHJvbGUgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4Jcm9sZU5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldFJvbGVOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgcm9sZU5hbWUKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldFJvbGVOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Um9sZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ST0xFTkFNRSk7CiAgICAgfQogCi0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBsb2dpbiB0aW1lb3V0LgogICAgICAqCi0gICAgICogQHBhcmFtCWxvZ2luVGltZU91dAk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXRMb2dpblRpbWVPdXQ8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGxvZ2luVGltZU91dCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRMb2dpblRpbWVPdXQ8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0bG9naW5UaW1lT3V0KFN0cmluZyBsb2dpblRpbWVPdXQpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HSU5USU1FT1VULCBsb2dpblRpbWVPdXQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGxvZ2luIHRpbWVvdXQuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWxvZ2luVGltZW91dAotICAgICAqIEBzZWUJPGNvZGU+c2V0TG9naW5UaW1lT3V0PC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgbG9naW5UaW1lb3V0CisgICAgICogQHNlZSAgICA8Y29kZT5zZXRMb2dpblRpbWVPdXQ8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRsb2dpblRpbWVPdXQoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dJTlRJTUVPVVQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGxvZ2luIHRpbWVvdXQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbG9naW5UaW1lT3V0CTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldExvZ2luVGltZU91dDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbG9naW5UaW1lT3V0ICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldExvZ2luVGltZU91dDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRMb2dpblRpbWVPdXQoU3RyaW5nIGxvZ2luVGltZU91dCkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dJTlRJTUVPVVQsIGxvZ2luVGltZU91dCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgbG9naW4gdGltZW91dC4KICAgICAgKgotICAgICAqIEByZXR1cm4JbG9naW5UaW1lb3V0Ci0gICAgICogQHNlZQk8Y29kZT5zZXRMb2dpblRpbWVPdXQ8L2NvZGU+CisgICAgICogQHJldHVybiAgICBsb2dpblRpbWVvdXQKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldExvZ2luVGltZU91dDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldExvZ2luVGltZU91dCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR0lOVElNRU9VVCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGVsaW1pdGVyLgogICAgICAqCi0gICAgICogQHBhcmFtCWRlbGltCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERlbGltaXRlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGVsaW0gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGVsaW1pdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGRlbGltaXRlcihTdHJpbmcgZGVsaW0pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVMSU1JVEVSLCBkZWxpbSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGVsaW1pdGVyLgogICAgICAqCi0gICAgICogQHJldHVybglkZWxpbQotICAgICAqIEBzZWUJPGNvZGU+c2V0RGVsaW1pdGVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZGVsaW0KKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERlbGltaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGRlbGltaXRlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGVsaW1pdGVyLgogICAgICAqCi0gICAgICogQHBhcmFtCWRlbGltCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERlbGltaXRlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGVsaW0gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGVsaW1pdGVyPC9jb2RlPgogICAgICAqLwogICAgIEBDb25maWdQcm9wZXJ0eSgKICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9ICIjIiwKQEAgLTU0NSw1MiArNTQ1LDUyIEBACiAgICAgcHVibGljIHZvaWQgc2V0RGVsaW1pdGVyKFN0cmluZyBkZWxpbSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ERUxJTUlURVIsIGRlbGltKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkZWxpbWl0ZXIuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRlbGltCi0gICAgICogQHNlZQk8Y29kZT5zZXREZWxpbWl0ZXI8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkZWxpbQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGVsaW1pdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVsaW1pdGVyKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVMSU1JVEVSKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkcml2ZXIgc3BlY2lmaWMgcHJvcGVydGllcy4KICAgICAgKgotICAgICAqIEBwYXJhbQlkcml2ZXJQcm9wcwk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkcml2ZXJQcm9wcyAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGRyaXZlclByb3BlcnRpZXMoU3RyaW5nIGRyaXZlclByb3BzKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRSSVZFUlBST1BFUlRJRVMsIGRyaXZlclByb3BzKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkcml2ZXIgc3BlY2lmaWMgcHJvcGVydGllcy4KICAgICAgKgotICAgICAqIEByZXR1cm4JZHJpdmVyUHJvcHMKLSAgICAgKiBAc2VlCTxjb2RlPnNldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkcml2ZXJQcm9wcworICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGRyaXZlclByb3BlcnRpZXMoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EUklWRVJQUk9QRVJUSUVTKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkcml2ZXIgc3BlY2lmaWMgcHJvcGVydGllcy4KICAgICAgKgotICAgICAqIEBwYXJhbQlkcml2ZXJQcm9wcwk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkcml2ZXJQcm9wcyAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERyaXZlclByb3BlcnRpZXMoU3RyaW5nIGRyaXZlclByb3BzKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRSSVZFUlBST1BFUlRJRVMsIGRyaXZlclByb3BzKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkcml2ZXIgc3BlY2lmaWMgcHJvcGVydGllcy4KICAgICAgKgotICAgICAqIEByZXR1cm4JZHJpdmVyUHJvcHMKLSAgICAgKiBAc2VlCTxjb2RlPnNldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkcml2ZXJQcm9wcworICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldERyaXZlclByb3BlcnRpZXMoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EUklWRVJQUk9QRVJUSUVTKTsKQEAgLTYwMCwzNSArNjAwLDM1IEBACiAgICAgICogQ2hlY2sgaWYgdGhlIFBhc3N3b3JkQ3JlZGVudGlhbCBwYXNzZWQgZm9yIHRoaXMgZ2V0IGNvbm5lY3Rpb24KICAgICAgKiByZXF1ZXN0IGlzIGVxdWFsIHRvIHRoZSB1c2VyL3Bhc3N3ZCBvZiB0aGlzIGNvbm5lY3Rpb24gcG9vbC4KICAgICAgKi8KLSAgICBwcml2YXRlIGJvb2xlYW4gaXNFcXVhbCggUGFzc3dvcmRDcmVkZW50aWFsIHBjLCBTdHJpbmcgdXNlciwgCisgICAgcHJpdmF0ZSBib29sZWFuIGlzRXF1YWwoIFBhc3N3b3JkQ3JlZGVudGlhbCBwYywgU3RyaW5nIHVzZXIsCiAgICAgICAgIFN0cmluZyBwYXNzd29yZCkgewotICAgICAgICAKLQkvL2lmIGVxdWFsIGdldCBkaXJlY3QgY29ubmVjdGlvbiBlbHNlIAotCS8vZ2V0IGNvbm5lY3Rpb24gd2l0aCB1c2VyIGFuZCBwYXNzd29yZC4KLQkKLQlpZiAodXNlciA9PSBudWxsICYmIHBjID09IG51bGwpIHsKLQkgICAgcmV0dXJuIHRydWU7Ci0JfQotCQotCWlmICggdXNlciA9PSBudWxsICYmIHBjICE9IG51bGwgKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0JfQogCi0JaWYoIHBjID09IG51bGwgKSB7Ci0JICAgIHJldHVybiB0cnVlOwotCX0KLQkKLQlpZiAoIHVzZXIuZXF1YWxzKCBwYy5nZXRVc2VyTmFtZSgpICkgKSB7Ci0JICAgIGlmICggcGFzc3dvcmQgPT0gbnVsbCAmJiBwYy5nZXRQYXNzd29yZCgpID09IG51bGwgKSB7Ci0JICAgICAgICByZXR1cm4gdHJ1ZTsKLQkgICAgfQotCX0KLQkKLQlpZiAoIHVzZXIuZXF1YWxzKHBjLmdldFVzZXJOYW1lKCkpICYmIHBhc3N3b3JkLmVxdWFscyhwYy5nZXRQYXNzd29yZCgpKSApIHsKLQkgICAgcmV0dXJuIHRydWU7Ci0JfSAKLQkKLSAgICAgICAgCi0JcmV0dXJuIGZhbHNlOworICAgIC8vaWYgZXF1YWwgZ2V0IGRpcmVjdCBjb25uZWN0aW9uIGVsc2UKKyAgICAvL2dldCBjb25uZWN0aW9uIHdpdGggdXNlciBhbmQgcGFzc3dvcmQuCisKKyAgICBpZiAodXNlciA9PSBudWxsICYmIHBjID09IG51bGwpIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKCB1c2VyID09IG51bGwgJiYgcGMgIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiggcGMgPT0gbnVsbCApIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKCB1c2VyLmVxdWFscyggcGMuZ2V0VXNlck5hbWUoKSApICkgeworICAgICAgICBpZiAoIHBhc3N3b3JkID09IG51bGwgJiYgcGMuZ2V0UGFzc3dvcmQoKSA9PSBudWxsICkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIHVzZXIuZXF1YWxzKHBjLmdldFVzZXJOYW1lKCkpICYmIHBhc3N3b3JkLmVxdWFscyhwYy5nZXRQYXNzd29yZCgpKSApIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisKKyAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EYXRhU291cmNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RhdGFTb3VyY2UuamF2YQppbmRleCBkOTAwODVkLi41MWYxNzczIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RhdGFTb3VyY2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RhdGFTb3VyY2UuamF2YQpAQCAtMjgsMjIgKzI4LDIyIEBACiBpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOwogaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOwogLyoqCi0gKiBIb2xkcyB0aGUgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LCB3aGljaCBpcyB0byBiZSAKKyAqIEhvbGRzIHRoZSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QsIHdoaWNoIGlzIHRvIGJlCiAgKiBwYXNzZWQgdG8gdGhlIGFwcGxpY2F0aW9uIHByb2dyYW0uCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8zMQotICogQGF1dGhvcglCaW5vZCBQLkcKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMzEKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCiAgKi8KIHB1YmxpYyBjbGFzcyBEYXRhU291cmNlIGltcGxlbWVudHMgamF2YXguc3FsLkRhdGFTb3VyY2UsIGphdmEuaW8uU2VyaWFsaXphYmxlLAotCQljb20uc3VuLmFwcHNlcnYuamRiY3JhLkRhdGFTb3VyY2UsIGpha2FydGEucmVzb3VyY2UuUmVmZXJlbmNlYWJsZXsgCi0JCQkJICAgCisgICAgICAgIGNvbS5zdW4uYXBwc2Vydi5qZGJjcmEuRGF0YVNvdXJjZSwgamFrYXJ0YS5yZXNvdXJjZS5SZWZlcmVuY2VhYmxleworCiAgICAgcHJpdmF0ZSBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmOwotICAgIHByaXZhdGUgQ29ubmVjdGlvbk1hbmFnZXIgY207CQkJCSAgIAkJCQkgICAKKyAgICBwcml2YXRlIENvbm5lY3Rpb25NYW5hZ2VyIGNtOwogICAgIHByaXZhdGUgaW50IGxvZ2luVGltZW91dDsKICAgICBwcml2YXRlIFByaW50V3JpdGVyIGxvZ1dyaXRlcjsKLSAgICBwcml2YXRlIFN0cmluZyBkZXNjcmlwdGlvbjsJCQkJICAgCisgICAgcHJpdmF0ZSBTdHJpbmcgZGVzY3JpcHRpb247CiAgICAgcHJpdmF0ZSBSZWZlcmVuY2UgcmVmZXJlbmNlOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgTG9nZ2VyIF9sb2dnZXI7CiAgICAgc3RhdGljIHsKICAgICAgICAgX2xvZ2dlciA9IExvZ2dlci5nZXRBbm9ueW1vdXNMb2dnZXIoKTsKQEAgLTUxLDU4ICs1MSw1OCBAQAogICAgIHByaXZhdGUgYm9vbGVhbiBkZWJ1ZyA9IGZhbHNlOwogCiAgICAgLyoqCi0gICAgICogQ29uc3RydWN0cyA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QuIFRoaXMgaXMgY3JlYXRlZCBieSB0aGUgCisgICAgICogQ29uc3RydWN0cyA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QuIFRoaXMgaXMgY3JlYXRlZCBieSB0aGUKICAgICAgKiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdC4KICAgICAgKgotICAgICAqIEBwYXJhbQltY2YJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QgCi0gICAgICoJCQljcmVhdGluZyB0aGlzIG9iamVjdC4KLSAgICAgKiBAcGFyYW0JY20JPGNvZGU+Q29ubmVjdGlvbk1hbmFnZXI8L2NvZGU+IG9iamVjdCBlaXRoZXIgYXNzb2NpYXRlZAotICAgICAqCQkJd2l0aCBBcHBsaWNhdGlvbiBzZXJ2ZXIgb3IgUmVzb3VyY2UgQWRhcHRlci4KKyAgICAgKiBAcGFyYW0gICAgbWNmICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0CisgICAgICogICAgICAgICAgICBjcmVhdGluZyB0aGlzIG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgY20gICAgPGNvZGU+Q29ubmVjdGlvbk1hbmFnZXI8L2NvZGU+IG9iamVjdCBlaXRoZXIgYXNzb2NpYXRlZAorICAgICAqICAgICAgICAgICAgd2l0aCBBcHBsaWNhdGlvbiBzZXJ2ZXIgb3IgUmVzb3VyY2UgQWRhcHRlci4KICAgICAgKi8KICAgICBwdWJsaWMgRGF0YVNvdXJjZSAoTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG1jZiwgQ29ubmVjdGlvbk1hbmFnZXIgY20pIHsKLSAgICAJdGhpcy5tY2YgPSBtY2Y7Ci0gICAgCWlmIChjbSA9PSBudWxsKSB7Ci0gICAgCSAgICB0aGlzLmNtID0gKENvbm5lY3Rpb25NYW5hZ2VyKSBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25NYW5hZ2VyKCk7Ci0gICAgCX0gZWxzZSB7Ci0gICAgCSAgICB0aGlzLmNtID0gY207Ci0gICAgCX0gICAgCQotICAgIH0gICAKLSAgICAKKyAgICAgICAgdGhpcy5tY2YgPSBtY2Y7CisgICAgICAgIGlmIChjbSA9PSBudWxsKSB7CisgICAgICAgICAgICB0aGlzLmNtID0gKENvbm5lY3Rpb25NYW5hZ2VyKSBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25NYW5hZ2VyKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aGlzLmNtID0gY207CisgICAgICAgIH0KKyAgICB9CisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgotICAgICAqIAotICAgICAqIEByZXR1cm4JPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhbiBlcnJvci4gICAgICAKKyAgICAgKgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhbiBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgQ29ubmVjdGlvbiBnZXRDb25uZWN0aW9uKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0gICAgCXRyeSB7Ci0gICAgCSAgICByZXR1cm4gKENvbm5lY3Rpb24pIGNtLmFsbG9jYXRlQ29ubmVjdGlvbihtY2YsbnVsbCk7ICAgIAkgICAgCi0gICAgCX0gY2F0Y2ggKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZXR1cm4gKENvbm5lY3Rpb24pIGNtLmFsbG9jYXRlQ29ubmVjdGlvbihtY2YsbnVsbCk7CisgICAgICAgIH0gY2F0Y2ggKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7CiAvLyBUaGlzIGlzIHRlbXBvcmFyeS4gVGhpcyBuZWVkcyB0byBiZSBjaGFuZ2VkIHRvIFNFVkVSRSBhZnRlciBUUAotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5leGNfZ2V0X2Nvbm4iLCByZS5nZXRNZXNzYWdlKCkpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5leGNfZ2V0X2Nvbm4iLCByZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgcmUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgCSAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uIChyZS5nZXRNZXNzYWdlKCkpOwotICAgIAl9CisgICAgICAgICAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uIChyZS5nZXRNZXNzYWdlKCkpOworICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JdXNlcglVc2VyIG5hbWUgZm9yIHRoZSBDb25uZWN0aW9uLgotICAgICAqIEBwYXJhbQlwd2QJUGFzc3dvcmQgZm9yIHRoZSBDb25uZWN0aW9uLgotICAgICAqIEByZXR1cm4JPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhbiBlcnJvci4gICAgICAKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICB1c2VyICAgIFVzZXIgbmFtZSBmb3IgdGhlIENvbm5lY3Rpb24uCisgICAgICogQHBhcmFtICAgIHB3ZCAgICBQYXNzd29yZCBmb3IgdGhlIENvbm5lY3Rpb24uCisgICAgICogQHJldHVybiAgICA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGFuIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBDb25uZWN0aW9uIGdldENvbm5lY3Rpb24oU3RyaW5nIHVzZXIsIFN0cmluZyBwd2QpIHRocm93cyBTUUxFeGNlcHRpb24gewotICAgIAl0cnkgewotICAgIAkgICAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGluZm8gPSBuZXcgQ29ubmVjdGlvblJlcXVlc3RJbmZvICh1c2VyLCBwd2QpOwotICAgIAkgICAgcmV0dXJuIChDb25uZWN0aW9uKSBjbS5hbGxvY2F0ZUNvbm5lY3Rpb24obWNmLGluZm8pOwotICAgIAl9IGNhdGNoIChSZXNvdXJjZUV4Y2VwdGlvbiByZSkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGluZm8gPSBuZXcgQ29ubmVjdGlvblJlcXVlc3RJbmZvICh1c2VyLCBwd2QpOworICAgICAgICAgICAgcmV0dXJuIChDb25uZWN0aW9uKSBjbS5hbGxvY2F0ZUNvbm5lY3Rpb24obWNmLGluZm8pOworICAgICAgICB9IGNhdGNoIChSZXNvdXJjZUV4Y2VwdGlvbiByZSkgewogLy8gVGhpcyBpcyB0ZW1wb3JhcnkuIFRoaXMgbmVlZHMgdG8gYmUgY2hhbmdlZCB0byBTRVZFUkUgYWZ0ZXIgVFAKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMuZXhjX2dldF9jb25uIiwgcmUuZ2V0TWVzc2FnZSgpKTsKLSAgICAJICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKHJlLmdldE1lc3NhZ2UoKSk7Ci0gICAgCX0KLSAgICB9ICAgIAorICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5leGNfZ2V0X2Nvbm4iLCByZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAocmUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgfQorICAgIH0KIAogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIFNRTENvbm5lY3Rpb24gZnJvbSB0aGUgQ29ubmVjdGlvbiB3cmFwcGVyCkBAIC0xMTUsOTEgKzExNSw5MSBAQAogICAgICAqLwogICAgIHB1YmxpYyBDb25uZWN0aW9uIGdldENvbm5lY3Rpb24oQ29ubmVjdGlvbiBjb24pIHRocm93cyBTUUxFeGNlcHRpb24gewogCi0gICAgICAgIENvbm5lY3Rpb24gZHJpdmVyQ29uID0gY29uOyAKKyAgICAgICAgQ29ubmVjdGlvbiBkcml2ZXJDb24gPSBjb247CiAgICAgICAgIGlmIChjb24gaW5zdGFuY2VvZiBjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbkhvbGRlcikgewotICAgICAgICAgICBkcml2ZXJDb24gPSAoKGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uSG9sZGVyKSBjb24pLmdldENvbm5lY3Rpb24oKTsgCi0gICAgICAgIH0gCisgICAgICAgICAgIGRyaXZlckNvbiA9ICgoY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25Ib2xkZXIpIGNvbikuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIGRyaXZlckNvbjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXQgdGhlIGxvZ2luIHRpbWVvdXQKICAgICAgKgogICAgICAqIEByZXR1cm4gbG9naW4gdGltZW91dC4KLSAgICAgKiBAdGhyb3dzCVNRTEV4Y2VwdGlvbglJZiBhIGRhdGFiYXNlIGVycm9yIG9jY3Vycy4KKyAgICAgKiBAdGhyb3dzICAgIFNRTEV4Y2VwdGlvbiAgICBJZiBhIGRhdGFiYXNlIGVycm9yIG9jY3Vycy4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldExvZ2luVGltZW91dCgpIHRocm93cyBTUUxFeGNlcHRpb257Ci0gICAgCXJldHVybglsb2dpblRpbWVvdXQ7CisgICAgICAgIHJldHVybiAgICBsb2dpblRpbWVvdXQ7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0IHRoZSBsb2dpbiB0aW1lb3V0CiAgICAgICoKLSAgICAgKiBAcGFyYW0JbG9naW5UaW1lb3V0CUxvZ2luIHRpbWVvdXQuCi0gICAgICogQHRocm93cwlTUUxFeGNlcHRpb24JSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCisgICAgICogQHBhcmFtICAgIGxvZ2luVGltZW91dCAgICBMb2dpbiB0aW1lb3V0LgorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIElmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldExvZ2luVGltZW91dChpbnQgbG9naW5UaW1lb3V0KSB0aHJvd3MgU1FMRXhjZXB0aW9uewotICAgIAl0aGlzLmxvZ2luVGltZW91dCA9IGxvZ2luVGltZW91dDsKKyAgICAgICAgdGhpcy5sb2dpblRpbWVvdXQgPSBsb2dpblRpbWVvdXQ7CiAgICAgfQotICAgIAotICAgIC8qKiAKKworICAgIC8qKgogICAgICAqIEdldCB0aGUgbG9nd3JpdGVyIG9iamVjdC4KICAgICAgKgogICAgICAqIEByZXR1cm4gPGNvZGU+IFByaW50V3JpdGVyIDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MJU1FMRXhjZXB0aW9uCUlmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIElmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgogICAgICAqLwogICAgIHB1YmxpYyBQcmludFdyaXRlciBnZXRMb2dXcml0ZXIoKSB0aHJvd3MgU1FMRXhjZXB0aW9uewotICAgIAlyZXR1cm4JbG9nV3JpdGVyOworICAgICAgICByZXR1cm4gICAgbG9nV3JpdGVyOwogICAgIH0KLSAgICAgICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGxvZ3dyaXRlciBvbiB0aGlzIG9iamVjdC4KICAgICAgKgogICAgICAqIEBwYXJhbSA8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MJU1FMRXhjZXB0aW9uCUlmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIElmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldExvZ1dyaXRlcihQcmludFdyaXRlciBsb2dXcml0ZXIpIHRocm93cyBTUUxFeGNlcHRpb257Ci0gICAgCXRoaXMubG9nV3JpdGVyID0gbG9nV3JpdGVyOwotICAgIH0gICAgICAgIAotICAgICAgICAKKyAgICAgICAgdGhpcy5sb2dXcml0ZXIgPSBsb2dXcml0ZXI7CisgICAgfQorCiAgICAgcHVibGljIExvZ2dlciBnZXRQYXJlbnRMb2dnZXIoKSB0aHJvd3MgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbnsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgZmVhdHVyZS4iKTsKICAgICB9CiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBkZXNjcmlwdGlvbi4KICAgICAgKgotICAgICAqIEByZXR1cm4JRGVzY3JpcHRpb24gYWJvdXQgdGhlIERhdGFTb3VyY2UuCisgICAgICogQHJldHVybiAgICBEZXNjcmlwdGlvbiBhYm91dCB0aGUgRGF0YVNvdXJjZS4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgewotICAgIAlyZXR1cm4gZGVzY3JpcHRpb247CisgICAgICAgIHJldHVybiBkZXNjcmlwdGlvbjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGRlc2NyaXB0aW9uLgogICAgICAqCiAgICAgICogQHBhcmFtIGRlc2NyaXB0aW9uIERlc2NyaXB0aW9uIGFib3V0IHRoZSBEYXRhU291cmNlLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERlc2NyaXB0aW9uKFN0cmluZyBkZXNjcmlwdGlvbikgewotICAgIAl0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247Ci0gICAgfSAgICAKLSAgICAKKyAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOworICAgIH0KKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgcmVmZXJlbmNlLgogICAgICAqCiAgICAgICogQHJldHVybiA8Y29kZT5SZWZlcmVuY2U8L2NvZGU+b2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyBSZWZlcmVuY2UgZ2V0UmVmZXJlbmNlKCkgewotICAgIAlyZXR1cm4gcmVmZXJlbmNlOworICAgICAgICByZXR1cm4gcmVmZXJlbmNlOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgcmVmZXJlbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCXJlZmVyZW5jZSA8Y29kZT5SZWZlcmVuY2U8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgcmVmZXJlbmNlIDxjb2RlPlJlZmVyZW5jZTwvY29kZT4gb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFJlZmVyZW5jZShSZWZlcmVuY2UgcmVmZXJlbmNlKSB7Ci0gICAgCXRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlOworICAgICAgICB0aGlzLnJlZmVyZW5jZSA9IHJlZmVyZW5jZTsKICAgICB9CiAKICAgICBwdWJsaWMgPFQ+IFQgdW53cmFwKENsYXNzPFQ+IGlmYWNlKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW4uamF2YQppbmRleCA1NzRlZDY2Li5iZWMwZDZiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbi5qYXZhCkBAIC0xOCwxMyArMTgsMTMgQEAKIAogcHVibGljIGludGVyZmFjZSBKZGJjU2V0dXBBZG1pbiB7CiAKLSAgICBwdWJsaWMgdm9pZCBzZXRUYWJsZU5hbWUoU3RyaW5nIGRiKTsgCisgICAgcHVibGljIHZvaWQgc2V0VGFibGVOYW1lKFN0cmluZyBkYik7CiAKICAgICBwdWJsaWMgU3RyaW5nIGdldFRhYmxlTmFtZSgpOwogCi0gICAgcHVibGljIHZvaWQgc2V0Sm5kaU5hbWUoU3RyaW5nIG5hbWUpOyAKKyAgICBwdWJsaWMgdm9pZCBzZXRKbmRpTmFtZShTdHJpbmcgbmFtZSk7CiAKLSAgICBwdWJsaWMgU3RyaW5nIGdldEpuZGlOYW1lKCk7IAorICAgIHB1YmxpYyBTdHJpbmcgZ2V0Sm5kaU5hbWUoKTsKIAogICAgIHB1YmxpYyB2b2lkIHNldFNjaGVtYU5hbWUoU3RyaW5nIG5hbWUpOwogCkBAIC0zNCw2ICszNCw2IEBACiAKICAgICBwdWJsaWMgSW50ZWdlciBnZXROb09mUm93cygpOwogCi0gICAgcHVibGljIGJvb2xlYW4gY2hlY2tTZXR1cCgpOyAKKyAgICBwdWJsaWMgYm9vbGVhbiBjaGVja1NldHVwKCk7CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW5JbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluSW1wbC5qYXZhCmluZGV4IGY4OWJlNTcuLmZjM2E5NTcgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW5JbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbkltcGwuamF2YQpAQCAtODQsMTEgKzg0LDExIEBACiAKIHByaXZhdGUgdm9pZCBwcmludEhpZXJhcmNoeShDbGFzc0xvYWRlciBjbCwgaW50IGNudCl7CiB3aGlsZShjbCAhPSBudWxsKSB7Ci0JZm9yKGludCBpID0wOyBpIDwgY250OyBpKyspIAotCQlTeXN0ZW0ub3V0LnByaW50KCIgIiApOwotCVN5c3RlbS5vdXQucHJpbnRsbigiUEFSRU5UIDoiICsgY2wpOwotCWNsID0gY2wuZ2V0UGFyZW50KCk7Ci0JY250ICs9IDM7CisgICAgZm9yKGludCBpID0wOyBpIDwgY250OyBpKyspCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIiAiICk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJQQVJFTlQgOiIgKyBjbCk7CisgICAgY2wgPSBjbC5nZXRQYXJlbnQoKTsKKyAgICBjbnQgKz0gMzsKIH0KIH0KIApAQCAtOTcsMTAgKzk3LDEwIEBACiAgICAgICAgIGZvcihpbnQgaSA9MDsgaSA8IGNudDsgaSsrKQogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIiAiICk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUEFSRU5UIG9mIENsYXNzTG9hZGVyIDEgOiIgKyBjbDEpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiUEFSRU5UIG9mIENsYXNzTG9hZGVyIDIgOiIgKyBjbDIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiRVFVQUxTIDogIiArIChjbDEgPT0gY2wyKSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJQQVJFTlQgb2YgQ2xhc3NMb2FkZXIgMiA6IiArIGNsMik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJFUVVBTFMgOiAiICsgKGNsMSA9PSBjbDIpKTsKICAgICAgICAgY2wxID0gY2wxLmdldFBhcmVudCgpOwotCWNsMiA9IGNsMi5nZXRQYXJlbnQoKTsKKyAgICBjbDIgPSBjbDIuZ2V0UGFyZW50KCk7CiAgICAgICAgIGNudCArPSAzOwogfQogfQpAQCAtMTA5LDkzICsxMDksOTMgQEAKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja1NldHVwKCl7CiAKICAgICAgICAgaWYgKGpuZGlOYW1lPT0gbnVsbCB8fCBqbmRpTmFtZS50cmltKCkuZXF1YWxzKCIiKSkgewotCSAgIHJldHVybiBmYWxzZTsKLQl9CisgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAogICAgICAgICBpZiAodGFibGVOYW1lPT0gbnVsbCB8fCB0YWJsZU5hbWUudHJpbSgpLmVxdWFscygiIikpIHsKLQkgICByZXR1cm4gZmFsc2U7Ci0JfQorICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAgICAgICAgQ29ubmVjdGlvbiBjb24gPSBudWxsOwotCVN0YXRlbWVudCBzID0gbnVsbDsKLQlSZXN1bHRTZXQgcnMgPSBudWxsOwotCWJvb2xlYW4gYiA9IGZhbHNlOworICAgIFN0YXRlbWVudCBzID0gbnVsbDsKKyAgICBSZXN1bHRTZXQgcnMgPSBudWxsOworICAgIGJvb2xlYW4gYiA9IGZhbHNlOwogICAgICAgICB0cnkgewotCSAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCS8vZGVidWcKLQlDbGFzcyBjbHogPSBEYXRhU291cmNlLmNsYXNzOworICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgIC8vZGVidWcKKyAgICBDbGFzcyBjbHogPSBEYXRhU291cmNlLmNsYXNzOwogLyoKLQlpZihjbHouZ2V0Q2xhc3NMb2FkZXIoKSAhPSBudWxsKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiRGF0YVNvdXJjZSdzIGNsYXN4cyA6ICIgKyAgY2x6LmdldE5hbWUoKSArICAiIGNsYXNzbG9hZGVyICIgKyBjbHouZ2V0Q2xhc3NMb2FkZXIoKSk7Ci0JCXByaW50SGllcmFyY2h5KGNsei5nZXRDbGFzc0xvYWRlcigpLmdldFBhcmVudCgpLCA4KTsKLQl9Ci0JQ2xhc3MgY2xzID0gaWMubG9va3VwKGpuZGlOYW1lKS5nZXRDbGFzcygpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiTG9va2VkIHVwIGNsYXNzJ3MgOiAiICsgY2xzLmdldFBhY2thZ2UoKSArICI6IiArIGNscy5nZXROYW1lKCkgICsgIiBjbGFzc2xvYWRlciAiICArIGNscy5nZXRDbGFzc0xvYWRlcigpKTsKLQlwcmludEhpZXJhcmNoeShjbHMuZ2V0Q2xhc3NMb2FkZXIoKS5nZXRQYXJlbnQoKSwgOCk7CisgICAgaWYoY2x6LmdldENsYXNzTG9hZGVyKCkgIT0gbnVsbCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRhdGFTb3VyY2UncyBjbGFzeHMgOiAiICsgIGNsei5nZXROYW1lKCkgKyAgIiBjbGFzc2xvYWRlciAiICsgY2x6LmdldENsYXNzTG9hZGVyKCkpOworICAgICAgICBwcmludEhpZXJhcmNoeShjbHouZ2V0Q2xhc3NMb2FkZXIoKS5nZXRQYXJlbnQoKSwgOCk7CisgICAgfQorICAgIENsYXNzIGNscyA9IGljLmxvb2t1cChqbmRpTmFtZSkuZ2V0Q2xhc3MoKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tlZCB1cCBjbGFzcydzIDogIiArIGNscy5nZXRQYWNrYWdlKCkgKyAiOiIgKyBjbHMuZ2V0TmFtZSgpICArICIgY2xhc3Nsb2FkZXIgIiAgKyBjbHMuZ2V0Q2xhc3NMb2FkZXIoKSk7CisgICAgcHJpbnRIaWVyYXJjaHkoY2xzLmdldENsYXNzTG9hZGVyKCkuZ2V0UGFyZW50KCksIDgpOwogCi0JU3lzdGVtLm91dC5wcmludGxuKCJDbGFzc2xvYWRlcnMgZXF1YWwgPyAiICsgIChjbHouZ2V0Q2xhc3NMb2FkZXIoKSA9PSBjbHMuZ2V0Q2xhc3NMb2FkZXIoKSkpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiJiomKiYqJiogQ29tcGFyaW5nIEhpZXJhY2h5IERhdGFTb3VyY2UgdnMgbG9va2VkdXAiKTsKLQlpZihjbHouZ2V0Q2xhc3NMb2FkZXIoKSAhPSBudWxsKSB7Ci0JCWNvbXBhcmVIaWVyYXJjaHkoY2x6LmdldENsYXNzTG9hZGVyKCksIGNscy5nZXRDbGFzc0xvYWRlcigpLCA4KTsKLQl9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJDbGFzc2xvYWRlcnMgZXF1YWwgPyAiICsgIChjbHouZ2V0Q2xhc3NMb2FkZXIoKSA9PSBjbHMuZ2V0Q2xhc3NMb2FkZXIoKSkpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiJiomKiYqJiogQ29tcGFyaW5nIEhpZXJhY2h5IERhdGFTb3VyY2UgdnMgbG9va2VkdXAiKTsKKyAgICBpZihjbHouZ2V0Q2xhc3NMb2FkZXIoKSAhPSBudWxsKSB7CisgICAgICAgIGNvbXBhcmVIaWVyYXJjaHkoY2x6LmdldENsYXNzTG9hZGVyKCksIGNscy5nZXRDbGFzc0xvYWRlcigpLCA4KTsKKyAgICB9CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkJlZm9yZSBsb29rdXAiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJlZm9yZSBsb29rdXAiKTsKICovCi0JT2JqZWN0IG8gPSBpYy5sb29rdXAoam5kaU5hbWUpOwotLy8JU3lzdGVtLm91dC5wcmludGxuKCJhZnRlciBsb29rdXAgbG9va3VwIik7CisgICAgT2JqZWN0IG8gPSBpYy5sb29rdXAoam5kaU5hbWUpOworLy8gICAgU3lzdGVtLm91dC5wcmludGxuKCJhZnRlciBsb29rdXAgbG9va3VwIik7CiAKLQkgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKW8gOworICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpbyA7CiAvKgotCVN5c3RlbS5vdXQucHJpbnRsbigiYWZ0ZXIgY2FzdCIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLSBUcnlpbmcgb3VyIFN0dWZmICEhISIpOwotCXRyeSB7Ci0JCUNsYXNzIG8xID0gKENsYXNzLmZvck5hbWUoImNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlIikpOwotCQlDbGFzc0xvYWRlciBjbDEgPSBvMS5nZXRDbGFzc0xvYWRlcigpOwotCQlDbGFzc0xvYWRlciBjbDIgPSBEYXRhU291cmNlLmNsYXNzLmdldENsYXNzTG9hZGVyKCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQ2wxID09IENsMiIgKyAoY2wxID09IGNsMikpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNsYXNzZXMgZXF1YWwiICsgKERhdGFTb3VyY2UuY2xhc3MgPT0gbzEpKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYWZ0ZXIgY2FzdCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLSBUcnlpbmcgb3VyIFN0dWZmICEhISIpOworICAgIHRyeSB7CisgICAgICAgIENsYXNzIG8xID0gKENsYXNzLmZvck5hbWUoImNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlIikpOworICAgICAgICBDbGFzc0xvYWRlciBjbDEgPSBvMS5nZXRDbGFzc0xvYWRlcigpOworICAgICAgICBDbGFzc0xvYWRlciBjbDIgPSBEYXRhU291cmNlLmNsYXNzLmdldENsYXNzTG9hZGVyKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2wxID09IENsMiIgKyAoY2wxID09IGNsMikpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNsYXNzZXMgZXF1YWwiICsgKERhdGFTb3VyY2UuY2xhc3MgPT0gbzEpKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQogKi8KICAgICAgICAgICAgIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQkgICAgU3RyaW5nIGZ1bGxUYWJsZU5hbWUgPSB0YWJsZU5hbWU7Ci0JICAgIGlmIChzY2hlbWFOYW1lICE9IG51bGwgJiYgKCEoc2NoZW1hTmFtZS50cmltKCkuZXF1YWxzKCIiKSkpKSB7Ci0JICAgICAgICBmdWxsVGFibGVOYW1lID0gc2NoZW1hTmFtZS50cmltKCkgKyAiLiIgKyBmdWxsVGFibGVOYW1lOwotCSAgICB9Ci0JICAgIFN0cmluZyBxcnkgPSAic2VsZWN0ICogZnJvbSAiICsgZnVsbFRhYmxlTmFtZTsgCisgICAgICAgIFN0cmluZyBmdWxsVGFibGVOYW1lID0gdGFibGVOYW1lOworICAgICAgICBpZiAoc2NoZW1hTmFtZSAhPSBudWxsICYmICghKHNjaGVtYU5hbWUudHJpbSgpLmVxdWFscygiIikpKSkgeworICAgICAgICAgICAgZnVsbFRhYmxlTmFtZSA9IHNjaGVtYU5hbWUudHJpbSgpICsgIi4iICsgZnVsbFRhYmxlTmFtZTsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmcgcXJ5ID0gInNlbGVjdCAqIGZyb20gIiArIGZ1bGxUYWJsZU5hbWU7CiAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGVjdXRpbmcgcXVlcnkgOiIgKyBxcnkpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4ZWN1dGluZyBxdWVyeSA6IiArIHFyeSk7CiAKLQkgICAgcyA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKLQkgICAgcnMgPSBzLmV4ZWN1dGVRdWVyeShxcnkpOyAKKyAgICAgICAgcyA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgcnMgPSBzLmV4ZWN1dGVRdWVyeShxcnkpOwogCiAgICAgICAgICAgICBpbnQgaSA9IDA7Ci0JICAgIGlmIChycy5uZXh0KCkpIHsKLQkgICAgICAgIGkrKzsKLQkgICAgfQorICAgICAgICBpZiAocnMubmV4dCgpKSB7CisgICAgICAgICAgICBpKys7CisgICAgICAgIH0KIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJObyBvZiByb3dzIGZvdW5kOiIgKyBpKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTm8gb2Ygcm93cyBleHBlY3RlZDoiICsgbm9PZlJvd3MpOwogCi0JICAgIGlmIChpID09IG5vT2ZSb3dzLmludFZhbHVlKCkpIHsKLQkgICAgICAgYiA9IHRydWU7Ci0JICAgIH0gZWxzZSB7Ci0JICAgICAgIGIgPSBmYWxzZTsKLQkgICAgfQotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgYiA9IGZhbHNlOwotCX0gZmluYWxseSB7Ci0JICAgIHRyeSB7Ci0JICAgICAgICBpZiAocnMgIT0gbnVsbCkgcnMuY2xvc2UoKTsKLQkgICAgICAgIGlmIChzICE9IG51bGwpIHMuY2xvc2UoKTsKLQkgICAgICAgIGlmIChjb24gIT0gbnVsbCkgY29uLmNsb3NlKCk7CisgICAgICAgIGlmIChpID09IG5vT2ZSb3dzLmludFZhbHVlKCkpIHsKKyAgICAgICAgICAgYiA9IHRydWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgIGIgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgYiA9IGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpZiAocnMgIT0gbnVsbCkgcnMuY2xvc2UoKTsKKyAgICAgICAgICAgIGlmIChzICE9IG51bGwpIHMuY2xvc2UoKTsKKyAgICAgICAgICAgIGlmIChjb24gIT0gbnVsbCkgY29uLmNsb3NlKCk7CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICB9Ci0JfQotCVN5c3RlbS5vdXQucHJpbnRsbigiUmV0dXJuaW5nIHNldHVwIDoiICtiKTsKLQlyZXR1cm4gYjsKKyAgICAgICAgfQorICAgIH0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJldHVybmluZyBzZXR1cCA6IiArYik7CisgICAgcmV0dXJuIGI7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0xvY2FsVHJhbnNhY3Rpb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTG9jYWxUcmFuc2FjdGlvbi5qYXZhCmluZGV4IDhlYmUwNTcuLmM1NGEyMTYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTG9jYWxUcmFuc2FjdGlvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTG9jYWxUcmFuc2FjdGlvbi5qYXZhCkBAIC0yMyw0NSArMjMsNDUgQEAKIC8qKgogICogPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gaW1wbGVtZW50YXRpb24gZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wOC8wMwotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDgvMDMKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIHB1YmxpYyBjbGFzcyBMb2NhbFRyYW5zYWN0aW9uIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTG9jYWxUcmFuc2FjdGlvbiB7Ci0gICAgCisKICAgICBwcml2YXRlIE1hbmFnZWRDb25uZWN0aW9uIG1jOwotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0b3IgZm9yIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+LgotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdGhhdCByZXR1cm5zCi0gICAgICoJCQl0aGlzIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IG9iamVjdCBhcwotICAgICAqCQkJYSByZXN1bHQgb2YgPGNvZGU+Z2V0TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHRoYXQgcmV0dXJucworICAgICAqICAgICAgICAgICAgdGhpcyA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBvYmplY3QgYXMKKyAgICAgKiAgICAgICAgICAgIGEgcmVzdWx0IG9mIDxjb2RlPmdldExvY2FsVHJhbnNhY3Rpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIExvY2FsVHJhbnNhY3Rpb24oTWFuYWdlZENvbm5lY3Rpb24gbWMpIHsKICAgICAgICAgdGhpcy5tYyA9IG1jOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEJlZ2luIGEgbG9jYWwgdHJhbnNhY3Rpb24uCiAgICAgICoKLSAgICAgKiBAdGhyb3dzCUxvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2hhbmdpbmcKLSAgICAgKgkJCQkJCXRoZSBhdXRvY29tbWl0IG1vZGUgb2YgdGhlIHBoeXNpY2FsCi0gICAgICoJCQkJCQljb25uZWN0aW9uCisgICAgICogQHRocm93cyAgICBMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNoYW5naW5nCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICB0aGUgYXV0b2NvbW1pdCBtb2RlIG9mIHRoZSBwaHlzaWNhbAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGJlZ2luKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgLy9HSkNJTlQKLQltYy50cmFuc2FjdGlvblN0YXJ0ZWQoKTsKKyAgICBtYy50cmFuc2FjdGlvblN0YXJ0ZWQoKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKS5zZXRBdXRvQ29tbWl0KGZhbHNlKTsKICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IExvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29tbWl0IGEgbG9jYWwgdHJhbnNhY3Rpb24uCi0gICAgICogQHRocm93cwlMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNoYW5naW5nCi0gICAgICoJCQkJCQl0aGUgYXV0b2NvbW1pdCBtb2RlIG9mIHRoZSBwaHlzaWNhbAotICAgICAqCQkJCQkJY29ubmVjdGlvbiBvciBjb21taXR0aW5nIHRoZSB0cmFuc2FjdGlvbgorICAgICAqIEB0aHJvd3MgICAgTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjaGFuZ2luZworICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGF1dG9jb21taXQgbW9kZSBvZiB0aGUgcGh5c2ljYWwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gb3IgY29tbWl0dGluZyB0aGUgdHJhbnNhY3Rpb24KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjb21taXQoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBFeGNlcHRpb24gZSA9IG51bGw7CkBAIC03MiwxNSArNzIsMTUgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgICAgICAvL0dKQ0lOVAotCW1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CisgICAgbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSb2xsYmFjayBhIGxvY2FsIHRyYW5zYWN0aW9uLgotICAgICAqIAotICAgICAqIEB0aHJvd3MJTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjaGFuZ2luZwotICAgICAqCQkJCQkJdGhlIGF1dG9jb21taXQgbW9kZSBvZiB0aGUgcGh5c2ljYWwKLSAgICAgKgkJCQkJCWNvbm5lY3Rpb24gb3Igcm9sbGluZyBiYWNrIHRoZSB0cmFuc2FjdGlvbgorICAgICAqCisgICAgICogQHRocm93cyAgICBMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNoYW5naW5nCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICB0aGUgYXV0b2NvbW1pdCBtb2RlIG9mIHRoZSBwaHlzaWNhbAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbiBvciByb2xsaW5nIGJhY2sgdGhlIHRyYW5zYWN0aW9uCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcm9sbGJhY2soKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICB0cnkgewpAQCAtOTAsNyArOTAsNyBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IExvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgICAgIC8vR0pDSU5UCi0JbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKKyAgICBtYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbi5qYXZhCmluZGV4IDMwZjQ2MGEuLjJkYWQ1OWEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uLmphdmEKQEAgLTQxLDggKzQxLDggQEAKIC8qKgogICogPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMjIKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzIyCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiBwdWJsaWMgY2xhc3MgTWFuYWdlZENvbm5lY3Rpb24gaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiB7CiAKQEAgLTUyLDcgKzUyLDcgQEAKIAogICAgIHByaXZhdGUgYm9vbGVhbiBpc0Rlc3Ryb3llZCA9IGZhbHNlOwogICAgIHByaXZhdGUgYm9vbGVhbiBpc1VzYWJsZSA9IHRydWU7Ci0gICAgCisKICAgICBwcml2YXRlIGludCBjb25uZWN0aW9uVHlwZSA9IElTTk9UQVBPT0xFRENPTk5FQ1RJT047CiAgICAgcHJpdmF0ZSBQb29sZWRDb25uZWN0aW9uIHBjID0gbnVsbDsKICAgICBwcml2YXRlIGphdmEuc3FsLkNvbm5lY3Rpb24gYWN0dWFsQ29ubmVjdGlvbiA9IG51bGw7CkBAIC02Miw3ICs2Miw3IEBACiAgICAgcHJpdmF0ZSBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmID0gbnVsbDsKICAgICBwcml2YXRlIFhBUmVzb3VyY2UgeGFyID0gbnVsbDsKICAgICBwdWJsaWMgQ29ubmVjdGlvbkhvbGRlciBhY3RpdmVDb25uZWN0aW9uSGFuZGxlOwotICAgIAorCiAgICAgLy9HSkNJTlQKICAgICBwcml2YXRlIGludCBpc29sYXRpb25MZXZlbFdoZW5DbGVhbmVkOwogICAgIHByaXZhdGUgYm9vbGVhbiBpc0NsZWFuID0gZmFsc2U7CkBAIC03Nyw3MSArNzcsNzEgQEAKICAgICBzdGF0aWMgewogICAgICAgICBfbG9nZ2VyID0gTG9nZ2VyLmdldEFub255bW91c0xvZ2dlcigpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdG9yIGZvciA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4uIFRoZSBwb29sZWRDb25uIHBhcmFtZXRlciBpcyBleHBlY3RlZAotICAgICAqIHRvIGJlIG51bGwgYW5kIHNxbENvbm4gcGFyYW1ldGVyIGlzIHRoZSBhY3R1YWwgY29ubmVjdGlvbiBpbiBjYXNlIHdoZXJlIAotICAgICAqIHRoZSBhY3R1YWwgY29ubmVjdGlvbiBpcyBnb3QgZnJvbSBhIG5vbiBwb29sZWQgZGF0YXNvdXJjZSBvYmplY3QuIFRoZSAKKyAgICAgKiB0byBiZSBudWxsIGFuZCBzcWxDb25uIHBhcmFtZXRlciBpcyB0aGUgYWN0dWFsIGNvbm5lY3Rpb24gaW4gY2FzZSB3aGVyZQorICAgICAqIHRoZSBhY3R1YWwgY29ubmVjdGlvbiBpcyBnb3QgZnJvbSBhIG5vbiBwb29sZWQgZGF0YXNvdXJjZSBvYmplY3QuIFRoZQogICAgICAqIHBvb2xlZENvbm4gcGFyYW1ldGVyIGlzIGV4cGVjdGVkIHRvIGJlIG5vbiBudWxsIGFuZCBzcWxDb25uIHBhcmFtZXRlcgogICAgICAqIGlzIGV4cGVjdGVkIHRvIGJlIG51bGwgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlIGRhdGFzb3VyY2Ugb2JqZWN0IGlzIGEKICAgICAgKiBjb25uZWN0aW9uIHBvb2wgZGF0YXNvdXJjZSBvciBhbiB4YSBkYXRhc291cmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCXBvb2xlZENvbm4JPGNvZGU+UG9vbGVkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGluIGNhc2UgdGhlIAotICAgICAqCQkJCXBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgdG8gYmUgb2J0YWluZWQgZnJvbSBhIHBvb2xlZAotICAgICAqCQkJCTxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+OyBudWxsIG90aGVyd2lzZQotICAgICAqIEBwYXJhbQlzcWxDb25uCTxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpbiBjYXNlIHRoZSBwaHlzaWNhbAotICAgICAqCQkJY29ubmVjdGlvbiBpcyB0byBiZSBvYnRhaW5lZCBmcm9tIGEgbm9uIHBvb2xlZCA8Y29kZT5EYXRhU291cmNlPC9jb2RlPjsKLSAgICAgKgkJCW51bGwgb3RoZXJ3aXNlCi0gICAgICogQHBhcmFtCXBhc3N3ZENyZWQJb2JqZWN0IGNvbmF0aW5pbmcgdGhlCi0gICAgICoJCQkJdXNlciBhbmQgcGFzc3dvcmQgZm9yIGFsbG9jYXRpbmcgdGhlIGNvbm5lY3Rpb24KLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdAotICAgICAqCQkJCQl0aGF0IGNyZWF0ZWQgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0Ci0gICAgICoJCQkJCWlzIG5vdCB0aGUgc2FtZSBhcyByZXR1cm5lZCBieSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+Ci0gICAgICoJCQkJCW9iamVjdCBwYXNzZWQKKyAgICAgKiBAcGFyYW0gICAgcG9vbGVkQ29ubiAgICA8Y29kZT5Qb29sZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaW4gY2FzZSB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIHRvIGJlIG9idGFpbmVkIGZyb20gYSBwb29sZWQKKyAgICAgKiAgICAgICAgICAgICAgICA8Y29kZT5EYXRhU291cmNlPC9jb2RlPjsgbnVsbCBvdGhlcndpc2UKKyAgICAgKiBAcGFyYW0gICAgc3FsQ29ubiAgICA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaW4gY2FzZSB0aGUgcGh5c2ljYWwKKyAgICAgKiAgICAgICAgICAgIGNvbm5lY3Rpb24gaXMgdG8gYmUgb2J0YWluZWQgZnJvbSBhIG5vbiBwb29sZWQgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT47CisgICAgICogICAgICAgICAgICBudWxsIG90aGVyd2lzZQorICAgICAqIEBwYXJhbSAgICBwYXNzd2RDcmVkICAgIG9iamVjdCBjb25hdGluaW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgIHVzZXIgYW5kIHBhc3N3b3JkIGZvciBhbGxvY2F0aW5nIHRoZSBjb25uZWN0aW9uCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgdGhhdCBjcmVhdGVkIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdAorICAgICAqICAgICAgICAgICAgICAgICAgICBpcyBub3QgdGhlIHNhbWUgYXMgcmV0dXJuZWQgYnkgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgICAgICBvYmplY3QgcGFzc2VkCiAgICAgICovCi0gICAgcHVibGljIE1hbmFnZWRDb25uZWN0aW9uKFBvb2xlZENvbm5lY3Rpb24gcG9vbGVkQ29ubiwgamF2YS5zcWwuQ29ubmVjdGlvbiBzcWxDb25uLCAKKyAgICBwdWJsaWMgTWFuYWdlZENvbm5lY3Rpb24oUG9vbGVkQ29ubmVjdGlvbiBwb29sZWRDb25uLCBqYXZhLnNxbC5Db25uZWN0aW9uIHNxbENvbm4sCiAgICAgICAgIFBhc3N3b3JkQ3JlZGVudGlhbCBwYXNzd2RDcmVkLCBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihwb29sZWRDb25uID09IG51bGwgJiYgc3FsQ29ubiA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkNvbm5lY3Rpb24gb2JqZWN0IGNhbm5vdCBiZSBudWxsIik7CiAgICAgICAgIH0KIAotCWlmIChjb25uZWN0aW9uVHlwZSA9PSBJU05PVEFQT09MRURDT05ORUNUSU9OICkgewotCSAgICBhY3R1YWxDb25uZWN0aW9uID0gc3FsQ29ubjsKLQl9CisgICAgaWYgKGNvbm5lY3Rpb25UeXBlID09IElTTk9UQVBPT0xFRENPTk5FQ1RJT04gKSB7CisgICAgICAgIGFjdHVhbENvbm5lY3Rpb24gPSBzcWxDb25uOworICAgIH0KIAogICAgICAgICBwYyA9IHBvb2xlZENvbm47CiAgICAgICAgIGNvbm5lY3Rpb25IYW5kbGVzID0gbmV3IEhhc2h0YWJsZSgpOwogICAgICAgICBwYXNzd2RDcmVkZW50aWFsID0gcGFzc3dkQ3JlZDsKICAgICAgICAgdGhpcy5tY2YgPSBtY2Y7Ci0gICAgICAgIGlmKHBhc3N3ZENyZWRlbnRpYWwgIT0gbnVsbCAmJiAgCisgICAgICAgIGlmKHBhc3N3ZENyZWRlbnRpYWwgIT0gbnVsbCAmJgogICAgICAgICAgICAgdGhpcy5tY2YuZXF1YWxzKHBhc3N3ZENyZWRlbnRpYWwuZ2V0TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KCkpID09IGZhbHNlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgdGhhdCBoYXMgY3JlYXRlZCB0aGlzICIgKyAKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSB0aGF0IGhhcyBjcmVhdGVkIHRoaXMgIiArCiAgICAgICAgICAgICAgICAgIk1hbmFnZWRDb25uZWN0aW9uIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IHJldHVybmVkIGJ5IiArCiAgICAgICAgICAgICAgICAgICAgICIgdGhlIFBhc3N3b3JkQ3JlZGVudGlhbCBmb3IgdGhpcyBNYW5hZ2VkQ29ubmVjdGlvbiIpOwogICAgICAgICB9CiAgICAgICAgIGxvZ1dyaXRlciA9IG1jZi5nZXRMb2dXcml0ZXIoKTsKICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7Ci0JY2UgPSBuZXcgQ29ubmVjdGlvbkV2ZW50KHRoaXMsIENvbm5lY3Rpb25FdmVudC5DT05ORUNUSU9OX0NMT1NFRCk7CisgICAgY2UgPSBuZXcgQ29ubmVjdGlvbkV2ZW50KHRoaXMsIENvbm5lY3Rpb25FdmVudC5DT05ORUNUSU9OX0NMT1NFRCk7CiAgICAgfQogCiAgICAgLyoqCiAgICAgICogQWRkcyBhIGNvbm5lY3Rpb24gZXZlbnQgbGlzdGVuZXIgdG8gdGhlIE1hbmFnZWRDb25uZWN0aW9uIGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCWxpc3RlbmVyCTxjb2RlPkNvbm5lY3Rpb25FdmVudExpc3RlbmVyPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBsaXN0ZW5lciAgICA8Y29kZT5Db25uZWN0aW9uRXZlbnRMaXN0ZW5lcjwvY29kZT4KICAgICAgKiBAc2VlIDxjb2RlPnJlbW92ZUNvbm5lY3Rpb25FdmVudExpc3RlbmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGFkZENvbm5lY3Rpb25FdmVudExpc3RlbmVyKENvbm5lY3Rpb25FdmVudExpc3RlbmVyIGxpc3RlbmVyKSB7Ci0JdGhpcy5saXN0ZW5lciA9IGxpc3RlbmVyOworICAgIHRoaXMubGlzdGVuZXIgPSBsaXN0ZW5lcjsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBVc2VkIGJ5IHRoZSBjb250YWluZXIgdG8gY2hhbmdlIHRoZSBhc3NvY2lhdGlvbiBvZiBhbiBhcHBsaWNhdGlvbi1sZXZlbCAKKyAgICAgKiBVc2VkIGJ5IHRoZSBjb250YWluZXIgdG8gY2hhbmdlIHRoZSBhc3NvY2lhdGlvbiBvZiBhbiBhcHBsaWNhdGlvbi1sZXZlbAogICAgICAqIGNvbm5lY3Rpb24gaGFuZGxlIHdpdGggYSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JY29ubmVjdGlvbgk8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0byBiZSBhc3NvY2lhdGVkIHdpdGgKLSAgICAgKgkJCQl0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm8gbW9yZQotICAgICAqCQkJCQl2YWxpZCBvciB0aGUgY29ubmVjdGlvbiBoYW5kbGUgcGFzc2VkIGlzIG51bGwKKyAgICAgKiBAcGFyYW0gICAgY29ubmVjdGlvbiAgICA8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0byBiZSBhc3NvY2lhdGVkIHdpdGgKKyAgICAgKiAgICAgICAgICAgICAgICB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm8gbW9yZQorICAgICAqICAgICAgICAgICAgICAgICAgICB2YWxpZCBvciB0aGUgY29ubmVjdGlvbiBoYW5kbGUgcGFzc2VkIGlzIG51bGwKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBhc3NvY2lhdGVDb25uZWN0aW9uKE9iamVjdCBjb25uZWN0aW9uKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtMTUyLDExICsxNTIsMTEgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQ29ubmVjdGlvbiBoYW5kbGUgY2Fubm90IGJlIG51bGwiKTsKICAgICAgICAgfQogICAgICAgICBDb25uZWN0aW9uSG9sZGVyIGNoID0gKENvbm5lY3Rpb25Ib2xkZXIpIGNvbm5lY3Rpb247Ci0gICAgICAgIAorCiAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYyA9IChjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24pY2guZ2V0TWFuYWdlZENvbm5lY3Rpb24oKTsKLQltYy5hY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKLQlpc0NsZWFuID0gZmFsc2U7Ci0gICAgICAgIAorICAgIG1jLmFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOworICAgIGlzQ2xlYW4gPSBmYWxzZTsKKwogICAgICAgICBjaC5hc3NvY2lhdGVDb25uZWN0aW9uKGFjdHVhbENvbm5lY3Rpb24sIHRoaXMpOwogICAgICAgICAvKioKICAgICAgICAgICogVGhlIGV4cGVjdGF0aW9uIGZyb20gdGhlIGFib3ZlIG1ldGhvZCBpcyB0aGF0IHRoZSBjb25uZWN0aW9uIGhvbGRlcgpAQCAtMTY1LDM0ICsxNjUsMzQgQEAKICAgICAgICAgICogdG8gdGhlIE1hbmFnZWRDb25uZWN0aW9uIGluc3RhbmNlIHdpdGggdGhpcyBNYW5hZ2VkQ29ubmVjdGlvbiBpbnN0YW5jZS4KICAgICAgICAgICogQW55IHByZXZpb3VzIHN0YXRlbWVudHMgYW5kIHJlc3VsdCBzZXRzIGFsc28gbmVlZCB0byBiZSByZW1vdmVkLgogICAgICAgICAgKi8KLSAgICAgICAgIAorCiAgICAgICAgICBpZihhY3RpdmVDb25uZWN0aW9uSGFuZGxlICE9IG51bGwpIHsKICAgICAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUuc2V0QWN0aXZlKGZhbHNlKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBjaC5zZXRBY3RpdmUodHJ1ZSk7Ci0gICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBjaDsgCisgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBjaDsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBBcHBsaWNhdGlvbiBzZXJ2ZXIgY2FsbHMgdGhpcyBtZXRob2QgdG8gZm9yY2UgYW55IGNsZWFudXAgb24gdGhlIAorICAgICAqIEFwcGxpY2F0aW9uIHNlcnZlciBjYWxscyB0aGlzIG1ldGhvZCB0byBmb3JjZSBhbnkgY2xlYW51cCBvbiB0aGUKICAgICAgKiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuIFRoaXMgbWV0aG9kIGNhbGxzIHRoZSBpbnZhbGlkYXRlCiAgICAgICogbWV0aG9kIG9uIGFsbCBDb25uZWN0aW9uSGFuZGxlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4uCi0gICAgICogCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBubyBtb3JlIHZhbGlkCisgICAgICoKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vIG1vcmUgdmFsaWQKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjbGVhbnVwKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gY2xlYW51cCIpOwogICAgICAgICB9CiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwotICAgICAgICAKKwogICAgICAgICAvKioKICAgICAgICAgICogbWF5IG5lZWQgdG8gc2V0IHRoZSBhdXRvY29tbWl0IHRvIHRydWUgZm9yIHRoZSBub24tcG9vbGVkIGNhc2UuCiAgICAgICAgICAqLwogICAgICAgICAvL0dKQ0lOVAotCS8vaWYgKGFjdHVhbENvbm5lY3Rpb24gIT0gbnVsbCkgewotCWlmIChjb25uZWN0aW9uVHlwZSA9PSBJU05PVEFQT09MRURDT05ORUNUSU9OICkgeworICAgIC8vaWYgKGFjdHVhbENvbm5lY3Rpb24gIT0gbnVsbCkgeworICAgIGlmIChjb25uZWN0aW9uVHlwZSA9PSBJU05PVEFQT09MRURDT05ORUNUSU9OICkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgaXNvbGF0aW9uTGV2ZWxXaGVuQ2xlYW5lZCA9IGFjdHVhbENvbm5lY3Rpb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKTsKICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewpAQCAtMjAxLDE3ICsyMDEsMTcgQEAKICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGlzQ2xlYW4gPSB0cnVlOwotICAgICAgICAKKwogICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUaGlzIG1ldGhvZCByZW1vdmVzIGFsbCB0aGUgY29ubmVjdGlvbiBoYW5kbGVzIGZyb20gdGhlIHRhYmxlCiAgICAgICogb2YgY29ubmVjdGlvbiBoYW5kbGVzIGFuZCBpbnZhbGlkYXRlcyBhbGwgb2YgdGhlbSBzbyB0aGF0IGFueQogICAgICAqIG9wZXJhdGlvbiBvbiB0aG9zZSBjb25uZWN0aW9uIGhhbmRsZXMgdGhyb3dzIGFuIGV4Y2VwdGlvbi4KICAgICAgKgotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlcmUgaXMgYSBwcm9ibGVtIGluIHJldHJpZXZpbmcKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCXRoZSBjb25uZWN0aW9uIGhhbmRsZXMKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSBpbiByZXRyaWV2aW5nCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY29ubmVjdGlvbiBoYW5kbGVzCiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIGludmFsaWRhdGVBbGxDb25uZWN0aW9uSGFuZGxlcygpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIFNldCBoYW5kbGVzID0gY29ubmVjdGlvbkhhbmRsZXMua2V5U2V0KCk7CkBAIC0yMjYsMjIgKzIyNiwyMiBAQAogICAgICAgICB9CiAgICAgICAgIGNvbm5lY3Rpb25IYW5kbGVzLmNsZWFyKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogRGVzdHJveXMgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gdG8gdGhlIHVuZGVybHlpbmcgcmVzb3VyY2UgbWFuYWdlci4KLSAgICAgKiAKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNsb3NpbmcgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24KKyAgICAgKgorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2xvc2luZyB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb257CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CiAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gZGVzdHJveSIpOwogICAgICAgICB9Ci0JLy9HSkNJTlQKLQlpZihpc0Rlc3Ryb3llZCA9PSB0cnVlKSB7Ci0JICAgIHJldHVybjsJCi0JfQorICAgIC8vR0pDSU5UCisgICAgaWYoaXNEZXN0cm95ZWQgPT0gdHJ1ZSkgeworICAgICAgICByZXR1cm47CisgICAgfQogCi0JYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7CisgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpZihjb25uZWN0aW9uVHlwZSA9PSBJU1hBQ09OTkVDVElPTiB8fCBjb25uZWN0aW9uVHlwZSA9PSBJU1BPT0xFRENPTk5FQ1RJT04pIHsKICAgICAgICAgICAgICAgICBwYy5jbG9zZSgpOwpAQCAtMjU1LDI4ICsyNTUsMjggQEAKICAgICAgICAgICAgIGlzRGVzdHJveWVkID0gdHJ1ZTsKICAgICAgICAgICAgIHBhc3N3ZENyZWRlbnRpYWwgPSBudWxsOwogICAgICAgICAgICAgY29ubmVjdGlvbkhhbmRsZXMgPSBudWxsOwotICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgZm9sbG93aW5nIGV4Y2VwdGlvbiBoYXMgb2NjdXJlZCBkdXJpbmcgZGVzdHJveTogIiAKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGZvbGxvd2luZyBleGNlcHRpb24gaGFzIG9jY3VyZWQgZHVyaW5nIGRlc3Ryb3k6ICIKICAgICAgICAgICAgICAgICArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgICAgICBpc0Rlc3Ryb3llZCA9IHRydWU7CiAgICAgICAgIHBhc3N3ZENyZWRlbnRpYWwgPSBudWxsOwogICAgICAgICBjb25uZWN0aW9uSGFuZGxlcyA9IG51bGw7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIG5ldyBjb25uZWN0aW9uIGhhbmRsZSBmb3IgdGhlIHVuZGVybHlpbmcgcGh5c2ljYWwgCisgICAgICogQ3JlYXRlcyBhIG5ldyBjb25uZWN0aW9uIGhhbmRsZSBmb3IgdGhlIHVuZGVybHlpbmcgcGh5c2ljYWwKICAgICAgKiBjb25uZWN0aW9uIHJlcHJlc2VudGVkIGJ5IHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3ViamVjdAk8Y29kZT5TdWJqZWN0PC9jb2RlPiBwYXJhbWV0ZXIgbmVlZGVkIGZvciBhdXRoZW50aWNhdGlvbgotICAgICAqIEBwYXJhbQljeFJlcUluZm8JPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBjYXJyaWVzIHRoZSB1c2VyIAotICAgICAqICAgICAgIAkgICAgICAgICAJYW5kIHBhc3N3b3JkIHJlcXVpcmVkIGZvciBnZXR0aW5nIHRoaXMgY29ubmVjdGlvbi4KLSAgICAgKiBAcmV0dXJuCUNvbm5lY3Rpb24JdGhlIGNvbm5lY3Rpb24gaGFuZGxlIDxjb2RlPk9iamVjdDwvY29kZT4KLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlIAotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJcGh5c2ljYWwgY29ubmVjdGlvbiBmcm9tIHRoZSBwb29sZWQgY29ubmVjdGlvbiAKLSAgICAgKiBAdGhyb3dzCVNlY3VyaXR5RXhjZXB0aW9uCWlmIHRoZXJlIGlzIGEgbWlzbWF0Y2ggYmV0d2VlbiB0aGUKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCXBhc3N3b3JkIGNyZWRlbnRpYWxzIG9yIHJlYXV0aGVudGljYXRpb24gaXMgcmVxdWVzdGVkCisgICAgICogQHBhcmFtICAgIHN1YmplY3QgICAgPGNvZGU+U3ViamVjdDwvY29kZT4gcGFyYW1ldGVyIG5lZWRlZCBmb3IgYXV0aGVudGljYXRpb24KKyAgICAgKiBAcGFyYW0gICAgY3hSZXFJbmZvICAgIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gY2FycmllcyB0aGUgdXNlcgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHBhc3N3b3JkIHJlcXVpcmVkIGZvciBnZXR0aW5nIHRoaXMgY29ubmVjdGlvbi4KKyAgICAgKiBAcmV0dXJuICAgIENvbm5lY3Rpb24gICAgdGhlIGNvbm5lY3Rpb24gaGFuZGxlIDxjb2RlPk9iamVjdDwvY29kZT4KKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaHlzaWNhbCBjb25uZWN0aW9uIGZyb20gdGhlIHBvb2xlZCBjb25uZWN0aW9uCisgICAgICogQHRocm93cyAgICBTZWN1cml0eUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhIG1pc21hdGNoIGJldHdlZW4gdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzd29yZCBjcmVkZW50aWFscyBvciByZWF1dGhlbnRpY2F0aW9uIGlzIHJlcXVlc3RlZAogICAgICAqLwotICAgIHB1YmxpYyBPYmplY3QgZ2V0Q29ubmVjdGlvbihTdWJqZWN0IHN1YiwgamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxSW5mbykgCisgICAgcHVibGljIE9iamVjdCBnZXRDb25uZWN0aW9uKFN1YmplY3Qgc3ViLCBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm8gY3hSZXFJbmZvKQogICAgICAgICB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGdldENvbm5lY3Rpb24iKTsKQEAgLTI4NCwxNCArMjg0LDE0IEBACiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwogICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxdWVzdEluZm8gPSAoY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mbykgY3hSZXFJbmZvOwogICAgICAgICBQYXNzd29yZENyZWRlbnRpYWwgcGFzc3dkQ3JlZCA9IFNlY3VyaXR5VXRpbHMuZ2V0UGFzc3dvcmRDcmVkZW50aWFsKHRoaXMubWNmLCBzdWIsIGN4UmVxdWVzdEluZm8pOwotICAgICAgICAgICAgCisKICAgICAgICAgaWYoU2VjdXJpdHlVdGlscy5pc1Bhc3N3b3JkQ3JlZGVudGlhbEVxdWFsKHRoaXMucGFzc3dkQ3JlZGVudGlhbCwgcGFzc3dkQ3JlZCkgPT0gZmFsc2UpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBqYWthcnRhLnJlc291cmNlLnNwaS5TZWN1cml0eUV4Y2VwdGlvbigiUmUtYXV0aGVudGljYXRpb24gbm90IHN1cHBvcnRlZCIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIC8vR0pDSU5UCiAgICAgICAgIGdldEFjdHVhbENvbm5lY3Rpb24oKTsKLSAKKwogICAgICAgICAvKioKICAgICAgICAgICogVGhlIGZvbGxvd2luZyBjb2RlIGluIHRoZSBpZiBzdGF0ZW1lbnQgZmlyc3QgY2hlY2tzIGlmIHRoaXMgTWFuYWdlZENvbm5lY3Rpb24KICAgICAgICAgICogaXMgY2xlYW4gb3Igbm90LiBJZiBpdCBpcywgaXQgcmVzZXRzIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwgdG8gd2hhdApAQCAtMzAxLDI4ICszMDEsMjggQEAKICAgICAgICAgaWYoaXNDbGVhbikgewogICAgICAgICAgICAgKChjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KW1jZikucmVzZXRJc29sYXRpb24odGhpcywgaXNvbGF0aW9uTGV2ZWxXaGVuQ2xlYW5lZCk7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgICAKKworCiAgICAgICAgIENvbm5lY3Rpb25Ib2xkZXIgY29ubkhvbGRlck9iamVjdCA9IG5ldyBDb25uZWN0aW9uSG9sZGVyKGFjdHVhbENvbm5lY3Rpb24sIHRoaXMpOwotCWlzQ2xlYW49ZmFsc2U7Ci0gICAgICAgIAorICAgIGlzQ2xlYW49ZmFsc2U7CisKICAgICAgICAgaWYoYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSAhPSBudWxsKSB7CiAgICAgICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlLnNldEFjdGl2ZShmYWxzZSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgY29ubkhvbGRlck9iamVjdC5zZXRBY3RpdmUodHJ1ZSk7CiAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBjb25uSG9sZGVyT2JqZWN0OwotIAorCiAgICAgICAgIHJldHVybiBjb25uSG9sZGVyT2JqZWN0OwotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgYW4gPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gaW5zdGFuY2UuIFRoZSA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBpbnRlcmZhY2UKLSAgICAgKiBpcyB1c2VkIGJ5IHRoZSBjb250YWluZXIgdG8gbWFuYWdlIGxvY2FsIHRyYW5zYWN0aW9ucyBmb3IgYSBSTSBpbnN0YW5jZS4gCisgICAgICogaXMgdXNlZCBieSB0aGUgY29udGFpbmVyIHRvIG1hbmFnZSBsb2NhbCB0cmFuc2FjdGlvbnMgZm9yIGEgUk0gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKi8KICAgICBwdWJsaWMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTG9jYWxUcmFuc2FjdGlvbiBnZXRMb2NhbFRyYW5zYWN0aW9uKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTMzMSwxMyArMzMxLDEzIEBACiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwogICAgICAgICByZXR1cm4gbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5Mb2NhbFRyYW5zYWN0aW9uKHRoaXMpOwogICAgIH0KLSAgICAgCisKICAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBsb2cgd3JpdGVyIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4gCisgICAgICogR2V0cyB0aGUgbG9nIHdyaXRlciBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggdGhpcyAKLSAgICAgKgkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAqICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqIEBzZWUgPGNvZGU+c2V0TG9nV3JpdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBQcmludFdyaXRlciBnZXRMb2dXcml0ZXIoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewpAQCAtMzQ1LDQ2ICszNDUsNDYgQEAKICAgICAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gZ2V0TG9nV3JpdGVyIik7CiAgICAgICAgIH0KICAgICAgICAgY2hlY2tJZlZhbGlkKCk7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBsb2dXcml0ZXI7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogR2V0cyB0aGUgbWV0YWRhdGEgaW5mb3JtYXRpb24gZm9yIHRoaXMgY29ubmVjdGlvbidzIHVuZGVybHlpbmcgRUlTIAotICAgICAqIHJlc291cmNlIG1hbmFnZXIgaW5zdGFuY2UuIAorICAgICAqIEdldHMgdGhlIG1ldGFkYXRhIGluZm9ybWF0aW9uIGZvciB0aGlzIGNvbm5lY3Rpb24ncyB1bmRlcmx5aW5nIEVJUworICAgICAqIHJlc291cmNlIG1hbmFnZXIgaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGE8L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGE8L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKi8KICAgICBwdWJsaWMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YSBnZXRNZXRhRGF0YSgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGdldE1ldGFEYXRhIik7CiAgICAgICAgIH0KICAgICAgICAgY2hlY2tJZlZhbGlkKCk7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEodGhpcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogUmV0dXJucyBhbiA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZS4gCisgICAgICogUmV0dXJucyBhbiA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBvcgotICAgICAqCQkJCQl0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZSAKLSAgICAgKgkJCQkJPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCU5vdFN1cHBvcnRlZEV4Y2VwdGlvbglpZiB1bmRlcmx5aW5nIGRhdGFzb3VyY2UgaXMgbm90IGFuCi0gICAgICoJCQkJCTxjb2RlPlhBRGF0YVNvdXJjZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgb3IKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIE5vdFN1cHBvcnRlZEV4Y2VwdGlvbiAgICBpZiB1bmRlcmx5aW5nIGRhdGFzb3VyY2UgaXMgbm90IGFuCisgICAgICogICAgICAgICAgICAgICAgICAgIDxjb2RlPlhBRGF0YVNvdXJjZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgWEFSZXNvdXJjZSBnZXRYQVJlc291cmNlKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gZ2V0WEFSZXNvdXJjZSIpOwogICAgICAgICB9CiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwotICAgICAgICAKKwogICAgICAgICBpZihjb25uZWN0aW9uVHlwZSA9PSBJU1hBQ09OTkVDVElPTikgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBpZih4YXIgPT0gbnVsbCkgewotCQkgICAgLyoqCisgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgICogVXNpbmcgdGhlIHdyYXBwZXIgWEFSZXNvdXJjZS4KICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgICAgIHhhciA9IG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuWEFSZXNvdXJjZUltcGwoKChYQUNvbm5lY3Rpb24pcGMpLmdldFhBUmVzb3VyY2UoKSwgdGhpcyk7CkBAIC0zOTcsMTYgKzM5NywxNiBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiQ2Fubm90IGdldCBhbiBYQVJlc291cmNlIGZyb20gYSBub24gWEEgY29ubmVjdGlvbiIpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmVtb3ZlcyBhbiBhbHJlYWR5IHJlZ2lzdGVyZWQgY29ubmVjdGlvbiBldmVudCBsaXN0ZW5lciBmcm9tIHRoZQogICAgICAqIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlsaXN0ZW5lcgk8Y29kZT5Db25uZWN0aW9uRXZlbnRMaXN0ZW5lcjwvY29kZT4gdG8gYmUgcmVtb3ZlZAorICAgICAqIEBwYXJhbSAgICBsaXN0ZW5lciAgICA8Y29kZT5Db25uZWN0aW9uRXZlbnRMaXN0ZW5lcjwvY29kZT4gdG8gYmUgcmVtb3ZlZAogICAgICAqIEBzZWUgPGNvZGU+YWRkQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcmVtb3ZlQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXIoQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXIgbGlzdGVuZXIpIHsKLQlsaXN0ZW5lciA9IG51bGw7CisgICAgbGlzdGVuZXIgPSBudWxsOwogICAgIH0KIAogICAgIC8qKgpAQCAtNDE1LDcgKzQxNSw3IEBACiAgICAgICogTG9jYWxUcmFuc2FjdGlvbiBvYmplY3Qgd2hlbiBpdHMgYmVnaW4oKSBtZXRob2QgaXMgY2FsbGVkLgogICAgICAqLwogICAgIHZvaWQgdHJhbnNhY3Rpb25TdGFydGVkKCkgewotCXRyYW5zYWN0aW9uSW5Qcm9ncmVzcyA9IHRydWU7CQorICAgIHRyYW5zYWN0aW9uSW5Qcm9ncmVzcyA9IHRydWU7CiAgICAgfQogCiAgICAgLyoqCkBAIC00MjQsMTYgKzQyNCwxNiBAQAogICAgICAqIExvY2FsVHJhbnNhY3Rpb24gb2JqZWN0IHdoZW4gaXRzIGVuZCgpIG1ldGhvZCBpcyBjYWxsZWQuCiAgICAgICovCiAgICAgdm9pZCB0cmFuc2FjdGlvbkNvbXBsZXRlZCgpIHsKLQl0cmFuc2FjdGlvbkluUHJvZ3Jlc3MgPSBmYWxzZTsKLQlpZihjb25uZWN0aW9uVHlwZSA9PSBJU1BPT0xFRENPTk5FQ1RJT04gfHwgY29ubmVjdGlvblR5cGUgPT0gSVNYQUNPTk5FQ1RJT04pIHsKKyAgICB0cmFuc2FjdGlvbkluUHJvZ3Jlc3MgPSBmYWxzZTsKKyAgICBpZihjb25uZWN0aW9uVHlwZSA9PSBJU1BPT0xFRENPTk5FQ1RJT04gfHwgY29ubmVjdGlvblR5cGUgPT0gSVNYQUNPTk5FQ1RJT04pIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgaXNvbGF0aW9uTGV2ZWxXaGVuQ2xlYW5lZCA9IGFjdHVhbENvbm5lY3Rpb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKTsKICAgICAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgICAgIC8vY2hlY2sgd2hhdCB0byBkbyBpbiB0aGlzIGNhc2UhIQotCQlfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5ub3Rnb3RfdHhfaXNvbHZsIik7CisgICAgICAgICAgICAvL2NoZWNrIHdoYXQgdG8gZG8gaW4gdGhpcyBjYXNlISEKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMubm90Z290X3R4X2lzb2x2bCIpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0JICAgIHRyeSB7CisKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBhY3R1YWxDb25uZWN0aW9uLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgYWN0dWFsQ29ubmVjdGlvbiA9IG51bGw7CiAgICAgICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7CkBAIC00NDEsNyArNDQxLDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0JICAgICAgICAKKwogICAgICAgICBpc0NsZWFuID0gdHJ1ZTsKIAogICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKQEAgLTQ1MywyOCArNDUzLDI4IEBACiAgICAgICogb3Igbm90LgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGlzVHJhbnNhY3Rpb25JblByb2dyZXNzKCkgewotCXJldHVybiB0cmFuc2FjdGlvbkluUHJvZ3Jlc3M7CisgICAgcmV0dXJuIHRyYW5zYWN0aW9uSW5Qcm9ncmVzczsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBsb2cgd3JpdGVyIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlvdXQJPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzCi0gICAgICoJCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqIEBwYXJhbSAgICBvdXQgICAgPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzCisgICAgICogICAgICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqIEBzZWUgPGNvZGU+Z2V0TG9nV3JpdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldExvZ1dyaXRlcihQcmludFdyaXRlciBvdXQpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwogICAgICAgICBsb2dXcml0ZXIgPSBvdXQ7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogVGhpcyBtZXRob2QgZGV0ZXJtaW5lcyB0aGUgdHlwZSBvZiB0aGUgY29ubmVjdGlvbiBiZWluZyBoZWxkIAorICAgICAqIFRoaXMgbWV0aG9kIGRldGVybWluZXMgdGhlIHR5cGUgb2YgdGhlIGNvbm5lY3Rpb24gYmVpbmcgaGVsZAogICAgICAqIGluIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+LgotICAgICAqIAotICAgICAqIEBwYXJhbQlwb29sZWRDb25uCTxjb2RlPlBvb2xlZENvbm5lY3Rpb248L2NvZGU+Ci0gICAgICogQHJldHVybgljb25uZWN0aW9uIHR5cGUKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBwb29sZWRDb25uICAgIDxjb2RlPlBvb2xlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBjb25uZWN0aW9uIHR5cGUKICAgICAgKi8KICAgICBwcml2YXRlIGludCBnZXRDb25uZWN0aW9uVHlwZShQb29sZWRDb25uZWN0aW9uIHBvb2xlZENvbm4pIHsKICAgICAgICAgaWYocG9vbGVkQ29ubiA9PSBudWxsKSB7CkBAIC00ODUsMjIgKzQ4NSwyMiBAQAogICAgICAgICAgICAgcmV0dXJuIElTUE9PTEVEQ09OTkVDVElPTjsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UgdGhhdCAKKyAgICAgKiBSZXR1cm5zIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlIHRoYXQKICAgICAgKiBjcmVhdGVkIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlIHRoYXQgY3JlYXRlZCB0aGlzCi0gICAgICoJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEByZXR1cm4gICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZSB0aGF0IGNyZWF0ZWQgdGhpcworICAgICAqICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKICAgICAgKi8KICAgICBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgZ2V0TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KCkgewogICAgICAgICByZXR1cm4gKGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkpbWNmOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGFjdHVhbCBzcWwgY29ubmVjdGlvbiBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4uIAorICAgICAqIFJldHVybnMgdGhlIGFjdHVhbCBzcWwgY29ubmVjdGlvbiBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRoZSBwaHlzaWNhbCA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgdGhlIHBoeXNpY2FsIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+CiAgICAgICovCiAgICAgLy9HSkNJTlQKICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGdldEFjdHVhbENvbm5lY3Rpb24oKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewpAQCAtNTA5LDggKzUwOSw4IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGlmKGFjdHVhbENvbm5lY3Rpb24gPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICBhY3R1YWxDb25uZWN0aW9uID0gcGMuZ2V0Q29ubmVjdGlvbigpOwotCQl9Ci0JCQorICAgICAgICB9CisKICAgICAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKICAgICAgICAgICAgICAgICBzcWxlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CkBAIC01MTgsODEgKzUxOCw4MSBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBhY3R1YWxDb25uZWN0aW9uOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPi4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcyAKLSAgICAgKgkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCisgICAgICogQHJldHVybiAgICA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzCisgICAgICogICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQogICAgICAqLwogICAgIFBhc3N3b3JkQ3JlZGVudGlhbCBnZXRQYXNzd29yZENyZWRlbnRpYWwoKSB7CiAgICAgICAgIHJldHVybiBwYXNzd2RDcmVkZW50aWFsOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENoZWNrcyBpZiB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpcyB2YWxpZCBvciBub3QgYW5kIHRocm93cyBhbgogICAgICAqIGV4Y2VwdGlvbiBpZiBpdCBpcyBub3QgdmFsaWQuIEEgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGlzIG5vdCB2YWxpZCBpZgogICAgICAqIGRlc3Ryb3kgaGFzIG5vdCBiZWVuIGNhbGxlZCBhbmQgbm8gcGh5c2ljYWwgY29ubmVjdGlvbiBlcnJvciBoYXMKICAgICAgKiBvY2N1cnJlZCByZW5kZXJpbmcgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gdW51c2FibGUuCiAgICAgICoKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIDxjb2RlPmRlc3Ryb3k8L2NvZGU+IGhhcyBiZWVuIGNhbGxlZCBvbiB0aGlzIAotICAgICAqCQkJCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2Ugb3IgaWYgYSAKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCXBoeXNpY2FsIGNvbm5lY3Rpb24gZXJyb3Igb2NjdXJyZWQgcmVuZGVyaW5nIGl0IHVudXNhYmxlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiA8Y29kZT5kZXN0cm95PC9jb2RlPiBoYXMgYmVlbiBjYWxsZWQgb24gdGhpcworICAgICAqICAgICAgICAgICAgICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2Ugb3IgaWYgYQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGh5c2ljYWwgY29ubmVjdGlvbiBlcnJvciBvY2N1cnJlZCByZW5kZXJpbmcgaXQgdW51c2FibGUKICAgICAgKi8KICAgICAvL0dKQ0lOVAogICAgIHZvaWQgY2hlY2tJZlZhbGlkKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYoaXNEZXN0cm95ZWQgPT0gdHJ1ZSB8fCBpc1VzYWJsZSA9PSBmYWxzZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGlzIE1hbmFnZWRDb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyB0aGUgcGh5c2ljYWwgIiArIAorICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGlzIE1hbmFnZWRDb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyB0aGUgcGh5c2ljYWwgIiArCiAgICAgICAgICAgICAgICAgImNvbm5lY3Rpb24gaXMgbm90IHVzYWJsZS4iKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gd2hlbiBpdHMgY2xvc2UgbWV0aG9kIGlzCiAgICAgICogY2FsbGVkLiBUaGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZSAgaW52YWxpZGF0ZXMgdGhlIGNvbm5lY3Rpb24gaGFuZGxlCiAgICAgICogYW5kIHNlbmRzIGEgQ09OTkVDVElPTl9DTE9TRUQgZXZlbnQgdG8gYWxsIHRoZSByZWdpc3RlcmVkIGV2ZW50IGxpc3RlbmVycy4KICAgICAgKgotICAgICAqIEBwYXJhbQllCUV4Y2VwdGlvbiB0aGF0IG1heSBoYXZlIG9jY3VyZWQgd2hpbGUgY2xvc2luZyB0aGUgY29ubmVjdGlvbiBoYW5kbGUKLSAgICAgKiBAcGFyYW0JY29ubkhvbGRlck9iamVjdAk8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0aGF0IGhhcyBiZWVuIGNsb3NlZAotICAgICAqIEB0aHJvd3MJU1FMRXhjZXB0aW9uCWluIGNhc2UgY2xvc2luZyB0aGUgc3FsIGNvbm5lY3Rpb24gZ290IG91dCBvZgotICAgICAqICAgICAgICAgCSAgICAgICAgICAgIAk8Y29kZT5nZXRDb25uZWN0aW9uPC9jb2RlPiBvbiB0aGUgdW5kZXJseWluZyAKLSAgICAgKgkJCQk8Y29kZT5Qb29sZWRDb25uZWN0aW9uPC9jb2RlPiB0aHJvd3MgYW4gZXhjZXB0aW9uCisgICAgICogQHBhcmFtICAgIGUgICAgRXhjZXB0aW9uIHRoYXQgbWF5IGhhdmUgb2NjdXJlZCB3aGlsZSBjbG9zaW5nIHRoZSBjb25uZWN0aW9uIGhhbmRsZQorICAgICAqIEBwYXJhbSAgICBjb25uSG9sZGVyT2JqZWN0ICAgIDxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRoYXQgaGFzIGJlZW4gY2xvc2VkCisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgaW4gY2FzZSBjbG9zaW5nIHRoZSBzcWwgY29ubmVjdGlvbiBnb3Qgb3V0IG9mCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPmdldENvbm5lY3Rpb248L2NvZGU+IG9uIHRoZSB1bmRlcmx5aW5nCisgICAgICogICAgICAgICAgICAgICAgPGNvZGU+UG9vbGVkQ29ubmVjdGlvbjwvY29kZT4gdGhyb3dzIGFuIGV4Y2VwdGlvbgogICAgICAqLwogICAgIHZvaWQgY29ubmVjdGlvbkNsb3NlZChFeGNlcHRpb24gZSwgQ29ubmVjdGlvbkhvbGRlciBjb25uSG9sZGVyT2JqZWN0KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgICAgY29ubkhvbGRlck9iamVjdC5pbnZhbGlkYXRlKCk7Ci0gICAgICAgIAorCiAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOwotICAgICAgICAKKwogICAgICAgICBjZS5zZXRDb25uZWN0aW9uSGFuZGxlKGNvbm5Ib2xkZXJPYmplY3QpOwogICAgICAgICBsaXN0ZW5lci5jb25uZWN0aW9uQ2xvc2VkKGNlKTsKLQkKKwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gd2hlbiBpdCBkZXRlY3RzIGEgY29ubmVjaW9uCiAgICAgICogcmVsYXRlZCBlcnJvci4KICAgICAgKgotICAgICAqIEBwYXJhbQllCUV4Y2VwdGlvbiB0aGF0IGhhcyBvY2N1cnJlZCBkdXJpbmcgYW4gb3BlcmF0aW9uIG9uIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uCi0gICAgICogQHBhcmFtCWNvbm5Ib2xkZXJPYmplY3QJPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdGhhdCBkZXRlY3RlZCB0aGUgcGh5c2ljYWwKLSAgICAgKgkJCQkJY29ubmVjdGlvbiBlcnJvcgorICAgICAqIEBwYXJhbSAgICBlICAgIEV4Y2VwdGlvbiB0aGF0IGhhcyBvY2N1cnJlZCBkdXJpbmcgYW4gb3BlcmF0aW9uIG9uIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uCisgICAgICogQHBhcmFtICAgIGNvbm5Ib2xkZXJPYmplY3QgICAgPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdGhhdCBkZXRlY3RlZCB0aGUgcGh5c2ljYWwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbiBlcnJvcgogICAgICAqLwotICAgIHZvaWQgY29ubmVjdGlvbkVycm9yT2NjdXJyZWQoRXhjZXB0aW9uIGUsIAorICAgIHZvaWQgY29ubmVjdGlvbkVycm9yT2NjdXJyZWQoRXhjZXB0aW9uIGUsCiAgICAgICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbkhvbGRlciBjb25uSG9sZGVyT2JqZWN0KSB7Ci0JICAgIAorCiAgICAgICAgICBDb25uZWN0aW9uRXZlbnRMaXN0ZW5lciBjZWwgPSB0aGlzLmxpc3RlbmVyOwogICAgICAgICAgQ29ubmVjdGlvbkV2ZW50IGNlID0gbnVsbDsKICAgICAgICAgIGNlID0gZSA9PSBudWxsID8gbmV3IENvbm5lY3Rpb25FdmVudCh0aGlzLCBDb25uZWN0aW9uRXZlbnQuQ09OTkVDVElPTl9FUlJPUl9PQ0NVUlJFRCkKICAgICAgICAgICAgICAgICAgICAgOiBuZXcgQ29ubmVjdGlvbkV2ZW50KHRoaXMsIENvbm5lY3Rpb25FdmVudC5DT05ORUNUSU9OX0VSUk9SX09DQ1VSUkVELCBlKTsKICAgICAgICAgIGlmIChjb25uSG9sZGVyT2JqZWN0ICE9IG51bGwpIHsKICAgICAgICAgICAgICBjZS5zZXRDb25uZWN0aW9uSGFuZGxlKGNvbm5Ib2xkZXJPYmplY3QpOwotICAgICAgICAgfSAgICAKKyAgICAgICAgIH0KIAogICAgICAgICAgY2VsLmNvbm5lY3Rpb25FcnJvck9jY3VycmVkKGNlKTsKICAgICAgICAgIGlzVXNhYmxlID0gZmFsc2U7CiAgICAgfQotICAgIAotICAgIAotICAgIAorCisKKwogICAgIC8qKgogICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gb2JqZWN0IHdoZW4gaXRzIHN0YXJ0IG1ldGhvZAogICAgICAqIGhhcyBiZWVuIGludm9rZWQuCkBAIC02MDYsNyArNjA2LDcgQEAKICAgICAgICAgICAgIGNvbm5lY3Rpb25FcnJvck9jY3VycmVkKGUsIG51bGwpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBvYmplY3Qgd2hlbiBpdHMgZW5kIG1ldGhvZAogICAgICAqIGhhcyBiZWVuIGludm9rZWQuCkBAIC02MjAsNyArNjIwLDcgQEAKICAgICAgICAgICAgIGNvbm5lY3Rpb25FcnJvck9jY3VycmVkKGUsIG51bGwpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IGEgQ29ubmVjdGlvbiBIYW5kbGUgdG8gY2hlY2sgaWYgaXQgaXMKICAgICAgKiB0aGUgYWN0aXZlIENvbm5lY3Rpb24gSGFuZGxlLiBJZiBpdCBpcyBub3QgdGhlIGFjdGl2ZSBDb25uZWN0aW9uCkBAIC02MjksMjQgKzYyOSwyNCBAQAogICAgICAqIENvbm5lY3Rpb24gSGFuZGxlIG9iamVjdCB0byB0aGlzIG9iamVjdCBpZiB0aGUgYWN0aXZlIENvbm5lY3Rpb24KICAgICAgKiBIYW5kbGUgaXMgbnVsbC4KICAgICAgKgotICAgICAqIEBwYXJhbQljaAk8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0aGF0IHJlcXVlc3RzIHRoaXMKLSAgICAgKgkJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZSB3aGV0aGVyCi0gICAgICoJCQlpdCBjYW4gYmUgYWN0aXZlIG9yIG5vdAotICAgICAqIEB0aHJvd3MJU1FMRXhjZXB0aW9uCWluIGNhc2UgdGhlIHBoeXNpY2FsIGlzIG5vdCB2YWxpZCBvcgotICAgICAqCQkJCXRoZXJlIGlzIGFscmVhZHkgYW4gYWN0aXZlIGNvbm5lY3Rpb24gaGFuZGxlCisgICAgICogQHBhcmFtICAgIGNoICAgIDxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRoYXQgcmVxdWVzdHMgdGhpcworICAgICAqICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlIHdoZXRoZXIKKyAgICAgKiAgICAgICAgICAgIGl0IGNhbiBiZSBhY3RpdmUgb3Igbm90CisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgaW4gY2FzZSB0aGUgcGh5c2ljYWwgaXMgbm90IHZhbGlkIG9yCisgICAgICogICAgICAgICAgICAgICAgdGhlcmUgaXMgYWxyZWFkeSBhbiBhY3RpdmUgY29ubmVjdGlvbiBoYW5kbGUKICAgICAgKi8KLSAgICAgCisKICAgICB2b2lkIGNoZWNrSWZBY3RpdmUoQ29ubmVjdGlvbkhvbGRlciBjaCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGlzRGVzdHJveWVkID09IHRydWUgfHwgaXNVc2FibGUgPT0gZmFsc2UpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24oIlRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB1c2FibGUiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZihhY3RpdmVDb25uZWN0aW9uSGFuZGxlID09IG51bGwpIHsKICAgICAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBjaDsKICAgICAgICAgICAgIGNoLnNldEFjdGl2ZSh0cnVlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZihhY3RpdmVDb25uZWN0aW9uSGFuZGxlICE9IGNoKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBoYW5kbGUgY2Fubm90IGJlIHVzZWQgYXMgYW5vdGhlciBjb25uZWN0aW9uIGlzIGN1cnJlbnRseSBhY3RpdmUiKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEuamF2YQppbmRleCAyMGYwM2FhLi5mNjUwZDQxIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEuamF2YQpAQCAtMjUsOCArMjUsOCBAQAogLyoqCiAgKiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA4LzAzCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wOC8wMworICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogcHVibGljIGNsYXNzIE1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEgaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhIHsKIApAQCAtNDEsODEgKzQxLDgxIEBACiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0b3IgZm9yIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGE8L2NvZGU+CiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWMJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+Ci0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4JaWYgZ2V0dGluZyB0aGUgRGF0YWJhc2VNZXRhRGF0YSBvYmplY3QgZmFpbHMKKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4gICAgaWYgZ2V0dGluZyB0aGUgRGF0YWJhc2VNZXRhRGF0YSBvYmplY3QgZmFpbHMKICAgICAgKi8KICAgICBwdWJsaWMgTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YShNYW5hZ2VkQ29ubmVjdGlvbiBtYykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHRoaXMubWMgPSBtYzsKICAgICAgICAgICAgIGRtZCA9IG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKS5nZXRNZXRhRGF0YSgpOwogICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX21kIik7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX21kIik7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBwcm9kdWN0IG5hbWUgb2YgdGhlIHVuZGVybHlpbmcgRUlTIGluc3RhbmNlIGNvbm5lY3RlZAogICAgICAqIHRocm91Z2ggdGhlIE1hbmFnZWRDb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybglQcm9kdWN0IG5hbWUgb2YgdGhlIEVJUyBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBQcm9kdWN0IG5hbWUgb2YgdGhlIEVJUyBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRFSVNQcm9kdWN0TmFtZSgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXR1cm4gZG1kLmdldERhdGFiYXNlUHJvZHVjdE5hbWUoKTsKICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19laXNfcHJvZG5hbWUiLCBzcWxlKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZWlzX3Byb2RuYW1lIiwgc3FsZSk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBwcm9kdWN0IHZlcnNpb24gb2YgdGhlIHVuZGVybHlpbmcgRUlTIGluc3RhbmNlIGNvbm5lY3RlZAogICAgICAqIHRocm91Z2ggdGhlIE1hbmFnZWRDb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybglQcm9kdWN0IHZlcnNpb24gb2YgdGhlIEVJUyBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBQcm9kdWN0IHZlcnNpb24gb2YgdGhlIEVJUyBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRFSVNQcm9kdWN0VmVyc2lvbigpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXR1cm4gZG1kLmdldERhdGFiYXNlUHJvZHVjdFZlcnNpb24oKTsKICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19laXNfcHJvZHZlcnMiLCBzcWxlKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZWlzX3Byb2R2ZXJzIiwgc3FsZSk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCksIHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgbWF4aW11bSBsaW1pdCBvbiBudW1iZXIgb2YgYWN0aXZlIGNvbmN1cnJlbnQgY29ubmVjdGlvbnMKICAgICAgKiB0aGF0IGFuIEVJUyBpbnN0YW5jZSBjYW4gc3VwcG9ydCBhY3Jvc3MgY2xpZW50IHByb2Nlc3Nlcy4KICAgICAgKgotICAgICAqIEByZXR1cm4JTWF4aW11bSBsaW1pdCBmb3IgbnVtYmVyIG9mIGFjdGl2ZSBjb25jdXJyZW50IGNvbm5lY3Rpb25zCi0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIE1heGltdW0gbGltaXQgZm9yIG51bWJlciBvZiBhY3RpdmUgY29uY3VycmVudCBjb25uZWN0aW9ucworICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIGludCBnZXRNYXhDb25uZWN0aW9ucygpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXR1cm4gZG1kLmdldE1heENvbm5lY3Rpb25zKCk7CiAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZWlzX21heGNvbm4iKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZWlzX21heGNvbm4iKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIG5hbWUgb2YgdGhlIHVzZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBNYW5hZ2VkQ29ubmVjdGlvbiBpbnN0YW5jZS4gVGhlIG5hbWUKICAgICAgKiBjb3JyZXNwb25kcyB0byB0aGUgcmVzb3VyY2UgcHJpbmNpcGFsIHVuZGVyIHdob3NlIHdob3NlIHNlY3VyaXR5IGNvbnRleHQsIGEgY29ubmVjdGlvbgogICAgICAqIHRvIHRoZSBFSVMgaW5zdGFuY2UgaGFzIGJlZW4gZXN0YWJsaXNoZWQuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCW5hbWUgb2YgdGhlIHVzZXIKLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgbmFtZSBvZiB0aGUgdXNlcgorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRVc2VyTmFtZSgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGpha2FydGEucmVzb3VyY2Uuc3BpLnNlY3VyaXR5LlBhc3N3b3JkQ3JlZGVudGlhbCBwYyA9IG1jLmdldFBhc3N3b3JkQ3JlZGVudGlhbCgpOwogICAgICAgICBpZihwYyAhPSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm4gcGMuZ2V0VXNlck5hbWUoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXR1cm4gbWMuZ2V0TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KCkuZ2V0VXNlcigpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvWEFSZXNvdXJjZUltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvWEFSZXNvdXJjZUltcGwuamF2YQppbmRleCBkYWQxZDc3Li40ODJmMzMyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL1hBUmVzb3VyY2VJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9YQVJlc291cmNlSW1wbC5qYXZhCkBAIC0yNCwxNDggKzI0LDE0OCBAQAogLyoqCiAgKiA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiB3cmFwcGVyIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDgvMjMKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA4LzIzCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiBwdWJsaWMgY2xhc3MgWEFSZXNvdXJjZUltcGwgaW1wbGVtZW50cyBYQVJlc291cmNlIHsKIAogICAgIFhBUmVzb3VyY2UgeGFyOwogICAgIE1hbmFnZWRDb25uZWN0aW9uIG1jOwotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0b3IgZm9yIFhBUmVzb3VyY2VJbXBsCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGFyCTxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+Ci0gICAgICogQHBhcmFtCW1jCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB4YXIgICAgPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFhBUmVzb3VyY2VJbXBsKFhBUmVzb3VyY2UgeGFyLCBNYW5hZ2VkQ29ubmVjdGlvbiBtYykgewogICAgICAgICB0aGlzLnhhciA9IHhhcjsKICAgICAgICAgdGhpcy5tYyA9IG1jOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbW1pdCB0aGUgZ2xvYmFsIHRyYW5zYWN0aW9uIHNwZWNpZmllZCBieSB4aWQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGlkCUEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKLSAgICAgKiBAcGFyYW0Jb25lUGhhc2UJSWYgdHJ1ZSwgdGhlIHJlc291cmNlIG1hbmFnZXIgc2hvdWxkIHVzZSBhIG9uZS1waGFzZSBjb21taXQgCi0gICAgICogICAgICAgCSAgICAgICAgCXByb3RvY29sIHRvIGNvbW1pdCB0aGUgd29yayBkb25lIG9uIGJlaGFsZiBvZiB4aWQuCisgICAgICogQHBhcmFtICAgIHhpZCAgICBBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCisgICAgICogQHBhcmFtICAgIG9uZVBoYXNlICAgIElmIHRydWUsIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHNob3VsZCB1c2UgYSBvbmUtcGhhc2UgY29tbWl0CisgICAgICogICAgICAgICAgICAgICAgICAgICAgIHByb3RvY29sIHRvIGNvbW1pdCB0aGUgd29yayBkb25lIG9uIGJlaGFsZiBvZiB4aWQuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgY29tbWl0KFhpZCB4aWQsIGJvb2xlYW4gb25lUGhhc2UpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIC8vdGhlIG1jLnRyYW5zYWN0aW9uQ29tcGxldGVkIGNhbGwgaGFzIGNvbWUgaGVyZSBiZWNhc3VlCi0JLy90aGUgdHJhbnNhY3Rpb24gKmFjdHVhbGx5KiBjb21wbGV0ZXMgYWZ0ZXIgdGhlIGZsb3cKLQkvL3JlYWNoZXMgaGVyZS4gdGhlIGVuZCgpIG1ldGhvZCBtaWdodCBub3QgcmVhbGx5IHNpZ25hbAotCS8vY29tcGxldGlvbiBvZiB0cmFuc2FjdGlvbiBpbiBjYXNlIHRoZSB0cmFuc2FjdGlvbiBpcwotCS8vc3VzcGVuZGVkLiBJbiBjYXNlIG9mIHRyYW5zYWN0aW9uIHN1c3BlbnNpb24sIHRoZSBlbmQKLQkvL21ldGhvZCBpcyBzdGlsbCBjYWxsZWQgYnkgdGhlIHRyYW5zYWN0aW9uIG1hbmFnZXIKLQltYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOworICAgIC8vdGhlIHRyYW5zYWN0aW9uICphY3R1YWxseSogY29tcGxldGVzIGFmdGVyIHRoZSBmbG93CisgICAgLy9yZWFjaGVzIGhlcmUuIHRoZSBlbmQoKSBtZXRob2QgbWlnaHQgbm90IHJlYWxseSBzaWduYWwKKyAgICAvL2NvbXBsZXRpb24gb2YgdHJhbnNhY3Rpb24gaW4gY2FzZSB0aGUgdHJhbnNhY3Rpb24gaXMKKyAgICAvL3N1c3BlbmRlZC4gSW4gY2FzZSBvZiB0cmFuc2FjdGlvbiBzdXNwZW5zaW9uLCB0aGUgZW5kCisgICAgLy9tZXRob2QgaXMgc3RpbGwgY2FsbGVkIGJ5IHRoZSB0cmFuc2FjdGlvbiBtYW5hZ2VyCisgICAgbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKICAgICAgICAgeGFyLmNvbW1pdCh4aWQsIG9uZVBoYXNlKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBFbmRzIHRoZSB3b3JrIHBlcmZvcm1lZCBvbiBiZWhhbGYgb2YgYSB0cmFuc2FjdGlvbiBicmFuY2guCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGlkCUEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIgdGhhdCBpcyB0aGUgc2FtZSBhcyB3aGF0IAotICAgICAqCQkJd2FzIHVzZWQgcHJldmlvdXNseSBpbiB0aGUgc3RhcnQgbWV0aG9kLgotICAgICAqIEBwYXJhbQlmbGFncwlPbmUgb2YgVE1TVUNDRVNTLCBUTUZBSUwsIG9yIFRNU1VTUEVORAorICAgICAqIEBwYXJhbSAgICB4aWQgICAgQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllciB0aGF0IGlzIHRoZSBzYW1lIGFzIHdoYXQKKyAgICAgKiAgICAgICAgICAgIHdhcyB1c2VkIHByZXZpb3VzbHkgaW4gdGhlIHN0YXJ0IG1ldGhvZC4KKyAgICAgKiBAcGFyYW0gICAgZmxhZ3MgICAgT25lIG9mIFRNU1VDQ0VTUywgVE1GQUlMLCBvciBUTVNVU1BFTkQKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlbmQoWGlkIHhpZCwgaW50IGZsYWdzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICB4YXIuZW5kKHhpZCwgZmxhZ3MpOwogICAgICAgICAvL0dKQ0lOVAotCS8vbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKKyAgICAvL21jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGVsbCB0aGUgcmVzb3VyY2UgbWFuYWdlciB0byBmb3JnZXQgYWJvdXQgYSBoZXVyaXN0aWNhbGx5IGNvbXBsZXRlZCB0cmFuc2FjdGlvbiBicmFuY2guCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGlkCUEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKKyAgICAgKiBAcGFyYW0gICAgeGlkICAgIEEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBmb3JnZXQoWGlkIHhpZCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgeGFyLmZvcmdldCh4aWQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIE9idGFpbiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIHNldCBmb3IgdGhpcyAKKyAgICAgKiBPYnRhaW4gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBzZXQgZm9yIHRoaXMKICAgICAgKiA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JdGhlIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaW4gc2Vjb25kcworICAgICAqIEByZXR1cm4gICAgdGhlIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaW4gc2Vjb25kcwogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0VHJhbnNhY3Rpb25UaW1lb3V0KCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIHhhci5nZXRUcmFuc2FjdGlvblRpbWVvdXQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSByZXNvdXJjZSBtYW5hZ2VyIGluc3RhbmNlIAotICAgICAqIHJlcHJlc2VudGVkIGJ5IHRoZSB0YXJnZXQgb2JqZWN0IGlzIHRoZSBzYW1lIGFzIHRoZSByZXNvdWNlIG1hbmFnZXIgCisgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIGRldGVybWluZSBpZiB0aGUgcmVzb3VyY2UgbWFuYWdlciBpbnN0YW5jZQorICAgICAqIHJlcHJlc2VudGVkIGJ5IHRoZSB0YXJnZXQgb2JqZWN0IGlzIHRoZSBzYW1lIGFzIHRoZSByZXNvdWNlIG1hbmFnZXIKICAgICAgKiBpbnN0YW5jZSByZXByZXNlbnRlZCBieSB0aGUgcGFyYW1ldGVyIHhhcmVzLgogICAgICAqCi0gICAgICogQHBhcmFtCXhhcmVzCUFuIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IG9iamVjdCB3aG9zZSByZXNvdXJjZSBtYW5hZ2VyIAotICAgICAqIAkJCWluc3RhbmNlIGlzIHRvIGJlIGNvbXBhcmVkIHdpdGggdGhlIHJlc291cmNlCi0gICAgICogQHJldHVybgl0cnVlIGlmIGl0J3MgdGhlIHNhbWUgUk0gaW5zdGFuY2U7IG90aGVyd2lzZSBmYWxzZS4KKyAgICAgKiBAcGFyYW0gICAgeGFyZXMgICAgQW4gPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gb2JqZWN0IHdob3NlIHJlc291cmNlIG1hbmFnZXIKKyAgICAgKiAgICAgICAgICAgICBpbnN0YW5jZSBpcyB0byBiZSBjb21wYXJlZCB3aXRoIHRoZSByZXNvdXJjZQorICAgICAqIEByZXR1cm4gICAgdHJ1ZSBpZiBpdCdzIHRoZSBzYW1lIFJNIGluc3RhbmNlOyBvdGhlcndpc2UgZmFsc2UuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gaXNTYW1lUk0oWEFSZXNvdXJjZSB4YXJlcykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIHhhci5pc1NhbWVSTSh4YXJlcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogQXNrIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHRvIHByZXBhcmUgZm9yIGEgdHJhbnNhY3Rpb24gY29tbWl0IAorICAgICAqIEFzayB0aGUgcmVzb3VyY2UgbWFuYWdlciB0byBwcmVwYXJlIGZvciBhIHRyYW5zYWN0aW9uIGNvbW1pdAogICAgICAqIG9mIHRoZSB0cmFuc2FjdGlvbiBzcGVjaWZpZWQgaW4geGlkLgogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCi0gICAgICogQHJldHVybglBIHZhbHVlIGluZGljYXRpbmcgdGhlIHJlc291cmNlIG1hbmFnZXIncyB2b3RlIG9uIHRoZSAKLSAgICAgKgkJb3V0Y29tZSBvZiB0aGUgdHJhbnNhY3Rpb24uIFRoZSBwb3NzaWJsZSB2YWx1ZXMKLSAgICAgKgkJYXJlOiBYQV9SRE9OTFkgb3IgWEFfT0suIElmIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHdhbnRzIAotICAgICAqCQl0byByb2xsIGJhY2sgdGhlIHRyYW5zYWN0aW9uLCBpdCBzaG91bGQgZG8gc28KLSAgICAgKgkJYnkgcmFpc2luZyBhbiBhcHByb3ByaWF0ZSA8Y29kZT5YQUV4Y2VwdGlvbjwvY29kZT4gaW4gdGhlIHByZXBhcmUgbWV0aG9kLgorICAgICAqIEBwYXJhbSAgICB4aWQgICAgQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgorICAgICAqIEByZXR1cm4gICAgQSB2YWx1ZSBpbmRpY2F0aW5nIHRoZSByZXNvdXJjZSBtYW5hZ2VyJ3Mgdm90ZSBvbiB0aGUKKyAgICAgKiAgICAgICAgb3V0Y29tZSBvZiB0aGUgdHJhbnNhY3Rpb24uIFRoZSBwb3NzaWJsZSB2YWx1ZXMKKyAgICAgKiAgICAgICAgYXJlOiBYQV9SRE9OTFkgb3IgWEFfT0suIElmIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHdhbnRzCisgICAgICogICAgICAgIHRvIHJvbGwgYmFjayB0aGUgdHJhbnNhY3Rpb24sIGl0IHNob3VsZCBkbyBzbworICAgICAqICAgICAgICBieSByYWlzaW5nIGFuIGFwcHJvcHJpYXRlIDxjb2RlPlhBRXhjZXB0aW9uPC9jb2RlPiBpbiB0aGUgcHJlcGFyZSBtZXRob2QuCiAgICAgICovCiAgICAgcHVibGljIGludCBwcmVwYXJlKFhpZCB4aWQpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiB4YXIucHJlcGFyZSh4aWQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIE9idGFpbiBhIGxpc3Qgb2YgcHJlcGFyZWQgdHJhbnNhY3Rpb24gYnJhbmNoZXMgZnJvbSBhIHJlc291cmNlIG1hbmFnZXIuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZmxhZwlPbmUgb2YgVE1TVEFSVFJTQ0FOLCBUTUVORFJTQ0FOLCBUTU5PRkxBR1MuIFRNTk9GTEFHUyAKLSAgICAgKgkJCW11c3QgYmUgdXNlZCB3aGVuIG5vIG90aGVyIGZsYWdzIGFyZSBzZXQgaW4gZmxhZ3MuCi0gICAgICogQHJldHVybglUaGUgcmVzb3VyY2UgbWFuYWdlciByZXR1cm5zIHplcm8gb3IgbW9yZSBYSURzIGZvciB0aGUgdHJhbnNhY3Rpb24gCi0gICAgICoJCWJyYW5jaGVzIHRoYXQgYXJlIGN1cnJlbnRseSBpbiBhIHByZXBhcmVkIG9yIGhldXJpc3RpY2FsbHkgCi0gICAgICoJCWNvbXBsZXRlZCBzdGF0ZS4gSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgb3BlcmF0aW9uLCB0aGUgcmVzb3VyY2UKLSAgICAgKgkJbWFuYWdlciBzaG91bGQgdGhyb3cgdGhlIGFwcHJvcHJpYXRlIDxjb2RlPlhBRXhjZXB0aW9uPC9jb2RlPi4KKyAgICAgKiBAcGFyYW0gICAgZmxhZyAgICBPbmUgb2YgVE1TVEFSVFJTQ0FOLCBUTUVORFJTQ0FOLCBUTU5PRkxBR1MuIFRNTk9GTEFHUworICAgICAqICAgICAgICAgICAgbXVzdCBiZSB1c2VkIHdoZW4gbm8gb3RoZXIgZmxhZ3MgYXJlIHNldCBpbiBmbGFncy4KKyAgICAgKiBAcmV0dXJuICAgIFRoZSByZXNvdXJjZSBtYW5hZ2VyIHJldHVybnMgemVybyBvciBtb3JlIFhJRHMgZm9yIHRoZSB0cmFuc2FjdGlvbgorICAgICAqICAgICAgICBicmFuY2hlcyB0aGF0IGFyZSBjdXJyZW50bHkgaW4gYSBwcmVwYXJlZCBvciBoZXVyaXN0aWNhbGx5CisgICAgICogICAgICAgIGNvbXBsZXRlZCBzdGF0ZS4gSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgb3BlcmF0aW9uLCB0aGUgcmVzb3VyY2UKKyAgICAgKiAgICAgICAgbWFuYWdlciBzaG91bGQgdGhyb3cgdGhlIGFwcHJvcHJpYXRlIDxjb2RlPlhBRXhjZXB0aW9uPC9jb2RlPi4KICAgICAgKi8KICAgICBwdWJsaWMgWGlkW10gcmVjb3ZlcihpbnQgZmxhZykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIHhhci5yZWNvdmVyKGZsYWcpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEluZm9ybSB0aGUgcmVzb3VyY2UgbWFuYWdlciB0byByb2xsIGJhY2sgd29yayBkb25lIG9uIGJlaGFsZiBvZiBhIHRyYW5zYWN0aW9uIGJyYW5jaAogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCisgICAgICogQHBhcmFtICAgIHhpZCAgICBBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcm9sbGJhY2soWGlkIHhpZCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgLy90aGUgbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQgY2FsbCBoYXMgY29tZSBoZXJlIGJlY2FzdWUKLQkvL3RoZSB0cmFuc2FjdGlvbiAqYWN0dWFsbHkqIGNvbXBsZXRlcyBhZnRlciB0aGUgZmxvdwotCS8vcmVhY2hlcyBoZXJlLiB0aGUgZW5kKCkgbWV0aG9kIG1pZ2h0IG5vdCByZWFsbHkgc2lnbmFsCi0JLy9jb21wbGV0aW9uIG9mIHRyYW5zYWN0aW9uIGluIGNhc2UgdGhlIHRyYW5zYWN0aW9uIGlzCi0JLy9zdXNwZW5kZWQuIEluIGNhc2Ugb2YgdHJhbnNhY3Rpb24gc3VzcGVuc2lvbiwgdGhlIGVuZAotCS8vbWV0aG9kIGlzIHN0aWxsIGNhbGxlZCBieSB0aGUgdHJhbnNhY3Rpb24gbWFuYWdlcgorICAgIC8vdGhlIHRyYW5zYWN0aW9uICphY3R1YWxseSogY29tcGxldGVzIGFmdGVyIHRoZSBmbG93CisgICAgLy9yZWFjaGVzIGhlcmUuIHRoZSBlbmQoKSBtZXRob2QgbWlnaHQgbm90IHJlYWxseSBzaWduYWwKKyAgICAvL2NvbXBsZXRpb24gb2YgdHJhbnNhY3Rpb24gaW4gY2FzZSB0aGUgdHJhbnNhY3Rpb24gaXMKKyAgICAvL3N1c3BlbmRlZC4gSW4gY2FzZSBvZiB0cmFuc2FjdGlvbiBzdXNwZW5zaW9uLCB0aGUgZW5kCisgICAgLy9tZXRob2QgaXMgc3RpbGwgY2FsbGVkIGJ5IHRoZSB0cmFuc2FjdGlvbiBtYW5hZ2VyCiAgICAgICAgIG1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiAgICAgICAgIHhhci5yb2xsYmFjayh4aWQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIGZvciB0aGlzIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCXNlY29uZHMJdGhlIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaW4gc2Vjb25kcy4KLSAgICAgKiBAcmV0dXJuCXRydWUgaWYgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBpcyBzZXQgc3VjY2Vzc2Z1bGx5OyBvdGhlcndpc2UgZmFsc2UuCisgICAgICogQHBhcmFtICAgIHNlY29uZHMgICAgdGhlIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaW4gc2Vjb25kcy4KKyAgICAgKiBAcmV0dXJuICAgIHRydWUgaWYgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBpcyBzZXQgc3VjY2Vzc2Z1bGx5OyBvdGhlcndpc2UgZmFsc2UuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gc2V0VHJhbnNhY3Rpb25UaW1lb3V0KGludCBzZWNvbmRzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICByZXR1cm4geGFyLnNldFRyYW5zYWN0aW9uVGltZW91dChzZWNvbmRzKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTdGFydCB3b3JrIG9uIGJlaGFsZiBvZiBhIHRyYW5zYWN0aW9uIGJyYW5jaCBzcGVjaWZpZWQgaW4geGlkLgogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVzb3VyY2UKLSAgICAgKiBAcmV0dXJuCWZsYWdzCU9uZSBvZiBUTU5PRkxBR1MsIFRNSk9JTiwgb3IgVE1SRVNVTUUKKyAgICAgKiBAcGFyYW0gICAgeGlkICAgIEEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXNvdXJjZQorICAgICAqIEByZXR1cm4gICAgZmxhZ3MgICAgT25lIG9mIFRNTk9GTEFHUywgVE1KT0lOLCBvciBUTVJFU1VNRQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHN0YXJ0KFhpZCB4aWQsIGludCBmbGFncykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgLy9HSkNJTlQKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9idWlsZC54bWwKaW5kZXggOTY3ODY4Yi4uNjQxMDU1NyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9idWlsZC54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPHByb2plY3QgbmFtZT0iamRiY19jb25uZWN0b3IiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9IiBkZWZhdWx0PSJidWlsZCI+CiAgIDxwcm9wZXJ0eSBuYW1lPSJwa2cuZGlyIiB2YWx1ZT0iY29tL3N1bi9namMvc3BpIi8+Ci0gCisKICAgPHRhcmdldCBuYW1lPSJjbGVhbiI+CiAgICAgPGFudCBhbnRmaWxlPSJidWlsZC54bWwiIGRpcj0iJHtnamMuaG9tZX0vYmluIiB0YXJnZXQ9ImNsZWFuIi8+CiAgIDwvdGFyZ2V0PgpAQCAtMzcsNSArMzcsNSBAQAogCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQxNCIgZGVwZW5kcz0iY29tcGlsZTE0Ii8+CiAKLQk8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJidWlsZDEzLCBidWlsZDE0Ii8+CisgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iYnVpbGQxMywgYnVpbGQxNCIvPgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvTWV0aG9kRXhlY3V0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL01ldGhvZEV4ZWN1dG9yLmphdmEKaW5kZXggY2UzMjFhZi4uOWU3ZjI1MyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvTWV0aG9kRXhlY3V0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9NZXRob2RFeGVjdXRvci5qYXZhCkBAIC0yNiw4ICsyNiw4IEBACiAvKioKICAqIEV4ZWN1dGUgdGhlIG1ldGhvZHMgYmFzZWQgb24gdGhlIHBhcmFtZXRlcnMuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8yMwotICogQGF1dGhvcglCaW5vZCBQLkcKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMjMKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCiAgKi8KIHB1YmxpYyBjbGFzcyBNZXRob2RFeGVjdXRvciBpbXBsZW1lbnRzIGphdmEuaW8uU2VyaWFsaXphYmxlewogCkBAIC0zOSwxMzAgKzM5LDEzMCBAQAogICAgIC8qKgogICAgICAqIEV4Y2V1dGUgYSBzaW1wbGUgc2V0IE1ldGhvZC4KICAgICAgKgotICAgICAqIEBwYXJhbQl2YWx1ZQlWYWx1ZSB0byBiZSBzZXQuCi0gICAgICogQHBhcmFtCW1ldGhvZAk8Y29kZT5NZXRob2Q8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAcGFyYW0Jb2JqCU9iamVjdCBvbiB3aGljaCB0aGUgbWV0aG9kIHRvIGJlIGV4ZWN1dGVkLgorICAgICAqIEBwYXJhbSAgICB2YWx1ZSAgICBWYWx1ZSB0byBiZSBzZXQuCisgICAgICogQHBhcmFtICAgIG1ldGhvZCAgICA8Y29kZT5NZXRob2Q8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgb2JqICAgIE9iamVjdCBvbiB3aGljaCB0aGUgbWV0aG9kIHRvIGJlIGV4ZWN1dGVkLgogICAgICAqIEB0aHJvd3MgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiwgaW4gY2FzZSBvZiB0aGUgbWlzbWF0Y2ggb2YgcGFyYW1ldGVyIHZhbHVlcyBvcgotICAgICAqCQlhIHNlY3VyaXR5IHZpb2xhdGlvbi4gICAgIAorICAgICAqICAgICAgICBhIHNlY3VyaXR5IHZpb2xhdGlvbi4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBydW5KYXZhQmVhbk1ldGhvZChTdHJpbmcgdmFsdWUsIE1ldGhvZCBtZXRob2QsIE9iamVjdCBvYmopIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKLSAgICAJaWYgKHZhbHVlPT1udWxsIHx8IHZhbHVlLnRyaW0oKS5lcXVhbHMoIiIpKSB7Ci0gICAgCSAgICByZXR1cm47Ci0gICAgCX0KLSAgICAJdHJ5IHsKLSAgICAJICAgIENsYXNzW10gcGFyYW1ldGVycyA9IG1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpOwotICAgIAkgICAgaWYgKCBwYXJhbWV0ZXJzLmxlbmd0aCA9PSAxKSB7Ci0gICAgCSAgICAgICAgT2JqZWN0W10gdmFsdWVzID0gbmV3IE9iamVjdFsxXTsKLSAgICAJICAgIAl2YWx1ZXNbMF0gPSBjb252ZXJ0VHlwZShwYXJhbWV0ZXJzWzBdLCB2YWx1ZSk7Ci0gICAgCSAgICAJbWV0aG9kLmludm9rZShvYmosIHZhbHVlcyk7Ci0gICAgCSAgICB9Ci0gICAgCX0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gaWFlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGlhZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7Ci0gICAgCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFyZ3VtZW50cyBhcmUgd3JvbmcgZm9yIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsgICAgCQotICAgIAl9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGl0ZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpdGUpOwotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOyAgICAJCi0gICAgCX0KKyAgICAgICAgaWYgKHZhbHVlPT1udWxsIHx8IHZhbHVlLnRyaW0oKS5lcXVhbHMoIiIpKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIENsYXNzW10gcGFyYW1ldGVycyA9IG1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpOworICAgICAgICAgICAgaWYgKCBwYXJhbWV0ZXJzLmxlbmd0aCA9PSAxKSB7CisgICAgICAgICAgICAgICAgT2JqZWN0W10gdmFsdWVzID0gbmV3IE9iamVjdFsxXTsKKyAgICAgICAgICAgICAgICB2YWx1ZXNbMF0gPSBjb252ZXJ0VHlwZShwYXJhbWV0ZXJzWzBdLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgbWV0aG9kLmludm9rZShvYmosIHZhbHVlcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gaWFlKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGlhZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFyZ3VtZW50cyBhcmUgd3JvbmcgZm9yIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKKyAgICAgICAgfSBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBpdGUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaXRlKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIEV4ZWN1dGVzIHRoZSBtZXRob2QuICAgICAKKyAgICAgKiBFeGVjdXRlcyB0aGUgbWV0aG9kLgogICAgICAqCi0gICAgICogQHBhcmFtCW1ldGhvZCA8Y29kZT5NZXRob2Q8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAcGFyYW0Jb2JqCU9iamVjdCBvbiB3aGljaCB0aGUgbWV0aG9kIHRvIGJlIGV4ZWN1dGVkLgotICAgICAqIEBwYXJhbQl2YWx1ZXMJUGFyYW1ldGVyIHZhbHVlcyBmb3IgZXhlY3V0aW5nIHRoZSBtZXRob2QuCisgICAgICogQHBhcmFtICAgIG1ldGhvZCA8Y29kZT5NZXRob2Q8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgb2JqICAgIE9iamVjdCBvbiB3aGljaCB0aGUgbWV0aG9kIHRvIGJlIGV4ZWN1dGVkLgorICAgICAqIEBwYXJhbSAgICB2YWx1ZXMgICAgUGFyYW1ldGVyIHZhbHVlcyBmb3IgZXhlY3V0aW5nIHRoZSBtZXRob2QuCiAgICAgICogQHRocm93cyAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+LCBpbiBjYXNlIG9mIHRoZSBtaXNtYXRjaCBvZiBwYXJhbWV0ZXIgdmFsdWVzIG9yCi0gICAgICoJCWEgc2VjdXJpdHkgdmlvbGF0aW9uLgorICAgICAqICAgICAgICBhIHNlY3VyaXR5IHZpb2xhdGlvbi4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBydW5NZXRob2QoTWV0aG9kIG1ldGhvZCwgT2JqZWN0IG9iaiwgVmVjdG9yIHZhbHVlcykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewotICAgIAl0cnkgewotCSAgICBDbGFzc1tdIHBhcmFtZXRlcnMgPSBtZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKTsKLQkgICAgaWYgKHZhbHVlcy5zaXplKCkgIT0gcGFyYW1ldGVycy5sZW5ndGgpIHsKLQkgICAgICAgIHJldHVybjsKLQkgICAgfQotICAgIAkgICAgT2JqZWN0W10gYWN0dWFsVmFsdWVzID0gbmV3IE9iamVjdFtwYXJhbWV0ZXJzLmxlbmd0aF07Ci0gICAgCSAgICBmb3IgKGludCBpID0wOyBpPHBhcmFtZXRlcnMubGVuZ3RoIDsgaSsrKSB7Ci0gICAgCSAgICAJU3RyaW5nIHZhbCA9IChTdHJpbmcpIHZhbHVlcy5nZXQoaSk7Ci0gICAgCSAgICAJaWYgKHZhbC50cmltKCkuZXF1YWxzKCJOVUxMIikpIHsKLSAgICAJICAgIAkgICAgYWN0dWFsVmFsdWVzW2ldID0gbnVsbDsKLSAgICAJICAgIAl9IGVsc2UgewotICAgIAkgICAgCSAgICBhY3R1YWxWYWx1ZXNbaV0gPSBjb252ZXJ0VHlwZShwYXJhbWV0ZXJzW2ldLCB2YWwpOwotICAgIAkgICAgCX0KLSAgICAJICAgIH0KLSAgICAJICAgIG1ldGhvZC5pbnZva2Uob2JqLCBhY3R1YWxWYWx1ZXMpOwotICAgIAl9Y2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gaWFlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGlhZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7Ci0gICAgCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFyZ3VtZW50cyBhcmUgd3JvbmcgZm9yIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsgICAgCQotICAgIAl9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGl0ZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpdGUpOwotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOyAgICAJCi0gICAgCX0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgQ2xhc3NbXSBwYXJhbWV0ZXJzID0gbWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCk7CisgICAgICAgIGlmICh2YWx1ZXMuc2l6ZSgpICE9IHBhcmFtZXRlcnMubGVuZ3RoKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIE9iamVjdFtdIGFjdHVhbFZhbHVlcyA9IG5ldyBPYmplY3RbcGFyYW1ldGVycy5sZW5ndGhdOworICAgICAgICAgICAgZm9yIChpbnQgaSA9MDsgaTxwYXJhbWV0ZXJzLmxlbmd0aCA7IGkrKykgeworICAgICAgICAgICAgICAgIFN0cmluZyB2YWwgPSAoU3RyaW5nKSB2YWx1ZXMuZ2V0KGkpOworICAgICAgICAgICAgICAgIGlmICh2YWwudHJpbSgpLmVxdWFscygiTlVMTCIpKSB7CisgICAgICAgICAgICAgICAgICAgIGFjdHVhbFZhbHVlc1tpXSA9IG51bGw7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYWN0dWFsVmFsdWVzW2ldID0gY29udmVydFR5cGUocGFyYW1ldGVyc1tpXSwgdmFsKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtZXRob2QuaW52b2tlKG9iaiwgYWN0dWFsVmFsdWVzKTsKKyAgICAgICAgfWNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGlhZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpYWUpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOworICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWUpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBcmd1bWVudHMgYXJlIHdyb25nIGZvciB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7CisgICAgICAgIH0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gaXRlKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGl0ZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb252ZXJ0cyB0aGUgdHlwZSBmcm9tIFN0cmluZyB0byB0aGUgQ2xhc3MgdHlwZS4KICAgICAgKgotICAgICAqIEBwYXJhbQl0eXBlCQlDbGFzcyBuYW1lIHRvIHdoaWNoIHRoZSBjb252ZXJzaW9uIGlzIHJlcXVpcmVkLgotICAgICAqIEBwYXJhbQlwYXJhbWV0ZXIJU3RyaW5nIHZhbHVlIHRvIGJlIGNvbnZlcnRlZC4KLSAgICAgKiBAcmV0dXJuCUNvbnZlcnRlZCB2YWx1ZS4KKyAgICAgKiBAcGFyYW0gICAgdHlwZSAgICAgICAgQ2xhc3MgbmFtZSB0byB3aGljaCB0aGUgY29udmVyc2lvbiBpcyByZXF1aXJlZC4KKyAgICAgKiBAcGFyYW0gICAgcGFyYW1ldGVyICAgIFN0cmluZyB2YWx1ZSB0byBiZSBjb252ZXJ0ZWQuCisgICAgICogQHJldHVybiAgICBDb252ZXJ0ZWQgdmFsdWUuCiAgICAgICogQHRocm93cyAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+LCBpbiBjYXNlIG9mIHRoZSBtaXNtYXRjaCBvZiBwYXJhbWV0ZXIgdmFsdWVzIG9yCi0gICAgICoJCWEgc2VjdXJpdHkgdmlvbGF0aW9uLiAgICAgCisgICAgICogICAgICAgIGEgc2VjdXJpdHkgdmlvbGF0aW9uLgogICAgICAqLwogICAgIHByaXZhdGUgT2JqZWN0IGNvbnZlcnRUeXBlKENsYXNzIHR5cGUsIFN0cmluZyBwYXJhbWV0ZXIpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKLSAgICAJdHJ5IHsKLSAgICAJICAgIFN0cmluZyB0eXBlTmFtZSA9IHR5cGUuZ2V0TmFtZSgpOwotICAgIAkgICAgaWYgKCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5TdHJpbmciKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5PYmplY3QiKSkgewotICAgIAkgICAgCXJldHVybiBwYXJhbWV0ZXI7Ci0gICAgCSAgICB9Ci0gICAgCQotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiaW50IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuSW50ZWdlciIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBJbnRlZ2VyKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9Ci0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoInNob3J0IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuU2hvcnQiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgU2hvcnQocGFyYW1ldGVyKTsKLSAgICAJICAgIH0gICAgCSAgICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiYnl0ZSIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkJ5dGUiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgQnl0ZShwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgICAJICAgICAgICAJICAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJsb25nIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuTG9uZyIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBMb25nKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgIAkgICAgICAgIAkgICAgICAgCSAgICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiZmxvYXQiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5GbG9hdCIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBGbG9hdChwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJkb3VibGUiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5Eb3VibGUiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgRG91YmxlKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgIAkgICAgICAgIAkgICAgICAgCSAgICAgCSAgICAgICAgCSAgICAgICAJICAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJqYXZhLm1hdGguQmlnRGVjaW1hbCIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBqYXZhLm1hdGguQmlnRGVjaW1hbChwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgICAJICAgICAgICAJICAgICAgIAkgICAgCi0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImphdmEubWF0aC5CaWdJbnRlZ2VyIikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IGphdmEubWF0aC5CaWdJbnRlZ2VyKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgIAkgICAgICAgIAkgICAgICAgCSAgICAgICAgCSAgICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiYm9vbGVhbiIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkJvb2xlYW4iKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgQm9vbGVhbihwYXJhbWV0ZXIpOwotICAgICAgICAgICAgfQkJCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBTdHJpbmcgdHlwZU5hbWUgPSB0eXBlLmdldE5hbWUoKTsKKyAgICAgICAgICAgIGlmICggdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuU3RyaW5nIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuT2JqZWN0IikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyYW1ldGVyOworICAgICAgICAgICAgfQogCi0gICAgCSAgICByZXR1cm4gcGFyYW1ldGVyOwotICAgIAl9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX25mZSIsIHBhcmFtZXRlcik7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24ocGFyYW1ldGVyKyI6IE5vdCBhIHZhbGlkIHZhbHVlIGZvciB0aGlzIG1ldGhvZCAiKTsKLSAgICAJfQorICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiaW50IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuSW50ZWdlciIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnRlZ2VyKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoInNob3J0IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuU2hvcnQiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2hvcnQocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiYnl0ZSIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkJ5dGUiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQnl0ZShwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJsb25nIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuTG9uZyIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBMb25nKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImZsb2F0IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuRmxvYXQiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRmxvYXQocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiZG91YmxlIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuRG91YmxlIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERvdWJsZShwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJqYXZhLm1hdGguQmlnRGVjaW1hbCIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBqYXZhLm1hdGguQmlnRGVjaW1hbChwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJqYXZhLm1hdGguQmlnSW50ZWdlciIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBqYXZhLm1hdGguQmlnSW50ZWdlcihwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJib29sZWFuIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuQm9vbGVhbiIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCb29sZWFuKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBwYXJhbWV0ZXI7CisgICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfbmZlIiwgcGFyYW1ldGVyKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihwYXJhbWV0ZXIrIjogTm90IGEgdmFsaWQgdmFsdWUgZm9yIHRoaXMgbWV0aG9kICIpOworICAgICAgICB9CiAgICAgfQotICAgIAorCiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL1NlY3VyaXR5VXRpbHMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL1NlY3VyaXR5VXRpbHMuamF2YQppbmRleCBmYzE0OWJmLi5mMDA4ZTdmIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9TZWN1cml0eVV0aWxzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvU2VjdXJpdHlVdGlscy5qYXZhCkBAIC0yOSwzNiArMjksMzYgQEAKIC8qKgogICogU2VjdXJpdHlVdGlscyBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzIyCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8yMgorICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogcHVibGljIGNsYXNzIFNlY3VyaXR5VXRpbHMgewogCiAgICAgLyoqCi0gICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QsIGdpdmVuIAotICAgICAqIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LCBzdWJqZWN0IGFuZCB0aGUgCi0gICAgICogPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPi4gSXQgZmlyc3QgY2hlY2tzIGlmIHRoZSAKLSAgICAgKiA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IGlzIG51bGwgb3Igbm90LiBJZiBpdCBpcyBub3QgbnVsbCwgCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QsIGdpdmVuCisgICAgICogdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4sIHN1YmplY3QgYW5kIHRoZQorICAgICAqIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4uIEl0IGZpcnN0IGNoZWNrcyBpZiB0aGUKKyAgICAgKiA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IGlzIG51bGwgb3Igbm90LiBJZiBpdCBpcyBub3QgbnVsbCwKICAgICAgKiBpdCBjb25zdHJ1Y3RzIGEgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3Qgd2l0aAogICAgICAqIHRoZSB1c2VyIGFuZCBwYXNzd29yZCBmaWVsZHMgZnJvbSB0aGUgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBhbmQgcmV0dXJucyB0aGlzCi0gICAgICogPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QuIElmIHRoZSA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IAotICAgICAqIGlzIG51bGwsIGl0IHJldHJpZXZlcyB0aGUgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3RzIGZyb20gCisgICAgICogPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QuIElmIHRoZSA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+CisgICAgICogaXMgbnVsbCwgaXQgcmV0cmlldmVzIHRoZSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdHMgZnJvbQogICAgICAqIHRoZSA8Y29kZT5TdWJqZWN0PC9jb2RlPiBwYXJhbWV0ZXIgYW5kIHJldHVybnMgdGhlIGZpcnN0Ci0gICAgICogPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3Qgd2hpY2ggY29udGFpbnMgYSAKKyAgICAgKiA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdCB3aGljaCBjb250YWlucyBhCiAgICAgICogPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiwgaW5zdGFuY2UgZXF1aXZhbGVudAogICAgICAqIHRvIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LCBwYXJhbWV0ZXIuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWNmCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4KLSAgICAgKiBAcGFyYW0Jc3ViamVjdAk8Y29kZT5TdWJqZWN0PC9jb2RlPgotICAgICAqIEBwYXJhbQlpbmZvCTxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4KLSAgICAgKiBAcmV0dXJuCTxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPglnZW5lcmljIGV4Y2VwdGlvbiBpZiBvcGVyYXRpb24gZmFpbHMKLSAgICAgKiBAdGhyb3dzCTxjb2RlPlNlY3VyaXR5RXhjZXB0aW9uPC9jb2RlPglpZiBhY2Nlc3MgdG8gdGhlIDxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIGlzIGRlbmllZAorICAgICAqIEBwYXJhbSAgICBtY2YgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBzdWJqZWN0ICAgIDxjb2RlPlN1YmplY3Q8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGluZm8gICAgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+ICAgIGdlbmVyaWMgZXhjZXB0aW9uIGlmIG9wZXJhdGlvbiBmYWlscworICAgICAqIEB0aHJvd3MgICAgPGNvZGU+U2VjdXJpdHlFeGNlcHRpb248L2NvZGU+ICAgIGlmIGFjY2VzcyB0byB0aGUgPGNvZGU+U3ViamVjdDwvY29kZT4gaW5zdGFuY2UgaXMgZGVuaWVkCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBQYXNzd29yZENyZWRlbnRpYWwgZ2V0UGFzc3dvcmRDcmVkZW50aWFsKGZpbmFsIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2YsCiAgICAgICAgICBmaW5hbCBTdWJqZWN0IHN1YmplY3QsIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbmZvKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogCi0JaWYgKGluZm8gPT0gbnVsbCkgeworICAgIGlmIChpbmZvID09IG51bGwpIHsKICAgICAgICAgICAgIGlmIChzdWJqZWN0ID09IG51bGwpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC04OSwxNCArODksMTQgQEAKICAgICAgICAgICAgIHJldHVybiBwYzsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0d28gc3RyaW5ncyBhcmUgZXF1YWw7IGZhbHNlIG90aGVyd2lzZQotICAgICAqIAotICAgICAqIEBwYXJhbQlzdHIxCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAcGFyYW0Jc3RyMgk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHJldHVybgl0cnVlCWlmIHRoZSB0d28gc3RyaW5ncyBhcmUgZXF1YWwKLSAgICAgKiAgICAgICAgCWZhbHNlCW90aGVyd2lzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIHN0cjEgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBzdHIyICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHRydWUgICAgaWYgdGhlIHR3byBzdHJpbmdzIGFyZSBlcXVhbAorICAgICAqICAgICAgICAgICAgZmFsc2UgICAgb3RoZXJ3aXNlCiAgICAgICovCiAgICAgc3RhdGljIHByaXZhdGUgYm9vbGVhbiBpc0VxdWFsKFN0cmluZyBzdHIxLCBTdHJpbmcgc3RyMikgewogICAgICAgICBpZiAoc3RyMSA9PSBudWxsKSB7CkBAIC0xMDksMTAgKzEwOSwxMCBAQAogICAgIC8qKgogICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0d28gPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3RzIGFyZSBlcXVhbDsgZmFsc2Ugb3RoZXJ3aXNlCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcEMxCTxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KLSAgICAgKiBAcGFyYW0JcEMyCTxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KLSAgICAgKiBAcmV0dXJuCXRydWUJaWYgdGhlIHR3byBQYXNzd29yZENyZWRlbnRpYWxzIGFyZSBlcXVhbAotICAgICAqICAgICAgICAJZmFsc2UJb3RoZXJ3aXNlCisgICAgICogQHBhcmFtICAgIHBDMSAgICA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHBDMiAgICA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+CisgICAgICogQHJldHVybiAgICB0cnVlICAgIGlmIHRoZSB0d28gUGFzc3dvcmRDcmVkZW50aWFscyBhcmUgZXF1YWwKKyAgICAgKiAgICAgICAgICAgIGZhbHNlICAgIG90aGVyd2lzZQogICAgICAqLwogICAgIHN0YXRpYyBwdWJsaWMgYm9vbGVhbiBpc1Bhc3N3b3JkQ3JlZGVudGlhbEVxdWFsKFBhc3N3b3JkQ3JlZGVudGlhbCBwQzEsIFBhc3N3b3JkQ3JlZGVudGlhbCBwQzIpIHsKICAgICAgICAgaWYgKHBDMSA9PSBwQzIpCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9idWlsZC54bWwKaW5kZXggYTU1YmJmMC4uZjA2MGU3ZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL2J1aWxkLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8cHJvamVjdCBuYW1lPSJqZGJjX2Nvbm5lY3RvciIgYmFzZWRpcj0iLiIgZGVmYXVsdD0iYnVpbGQiPgogICA8cHJvcGVydHkgbmFtZT0icGtnLmRpciIgdmFsdWU9ImNvbS9zdW4vZ2pjL3V0aWwiLz4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJjbGVhbiI+CiAgICAgPGFudCBhbnRmaWxlPSJidWlsZC54bWwiIGRpcj0iJHtnamMuaG9tZX0vYmluIiB0YXJnZXQ9ImNsZWFuIi8+CiAgIDwvdGFyZ2V0PgpAQCAtMzMsNyArMzMsNyBAQAogICAgICAgPGphciBqYXJmaWxlPSIke2Rpc3QuZGlyfS8ke3BrZy5kaXJ9L3V0aWwuamFyIiBiYXNlZGlyPSIke2NsYXNzLmRpcn0iCiAgICAgICAgIGluY2x1ZGVzPSIke3BrZy5kaXJ9LyoqLyoiLz4KICAgPC90YXJnZXQ+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZTEzIiBkZXBlbmRzPSJjb21waWxlIi8+CiAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZTE0IiBkZXBlbmRzPSJjb21waWxlIi8+CiAKQEAgLTQ0LDUgKzQ0LDUgQEAKICAgPHRhcmdldCBuYW1lPSJidWlsZDE0IiBkZXBlbmRzPSJjb21waWxlMTQsIHBhY2thZ2UxNCIvPgogCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImJ1aWxkMTMsIGJ1aWxkMTQiLz4KLSAgCisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3NlcnZsZXQvU2ltcGxlQmFua1NlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3NlcnZsZXQvU2ltcGxlQmFua1NlcnZsZXQuamF2YQppbmRleCBiYzdiNTVkLi45ODkyZmY2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9zZXJ2bGV0L1NpbXBsZUJhbmtTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvc2VydmxldC9TaW1wbGVCYW5rU2VydmxldC5qYXZhCkBAIC0xNywxNiArMTcsMTYgQEAKIHBhY2thZ2Ugc2FtcGxlcy5lamIuc3ViY2xhc3Npbmcuc2VydmxldDsKIAogaW1wb3J0IGphdmEuaW8uKjsKLWltcG9ydCBqYXZhLnV0aWwuKjsgCi1pbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lio7IAotaW1wb3J0IGphdmF4Lm5hbWluZy4qOyAKLWltcG9ydCBqYWthcnRhLnNlcnZsZXQuaHR0cC4qOyAKLWltcG9ydCBqYWthcnRhLmVqYi4qOyAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2ltcG9ydCBqYWthcnRhLnNlcnZsZXQuKjsKK2ltcG9ydCBqYXZheC5uYW1pbmcuKjsKK2ltcG9ydCBqYWthcnRhLnNlcnZsZXQuaHR0cC4qOworaW1wb3J0IGpha2FydGEuZWpiLio7CiAKLWltcG9ydCBzYW1wbGVzLmVqYi5zdWJjbGFzc2luZy5lamIuKjsgCitpbXBvcnQgc2FtcGxlcy5lamIuc3ViY2xhc3NpbmcuZWpiLio7CiBpbXBvcnQgY29tLnN1bi5qZGJjcmEuc3BpLkpkYmNTZXR1cEFkbWluOwogCi1wdWJsaWMgY2xhc3MgU2ltcGxlQmFua1NlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7ICAKK3B1YmxpYyBjbGFzcyBTaW1wbGVCYW5rU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIAogCiAgIEluaXRpYWxDb250ZXh0IGluaXRDb250ZXh0ID0gbnVsbDsKQEAgLTQyLDE0ICs0MiwxNCBAQAogICB7CiAgIH0KIAotICBwdWJsaWMgdm9pZCBkb0dldCAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgCi0gICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7IAorICBwdWJsaWMgdm9pZCBkb0dldCAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkKKyAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICBkb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOwotICB9ICAKKyAgfQogCi0gIC8qKiBoYW5kbGVzIHRoZSBIVFRQIFBPU1Qgb3BlcmF0aW9uICoqLyAKLSAgcHVibGljIHZvaWQgZG9Qb3N0IChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCxIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSAKLSAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgCisgIC8qKiBoYW5kbGVzIHRoZSBIVFRQIFBPU1Qgb3BlcmF0aW9uICoqLworICBwdWJsaWMgdm9pZCBkb1Bvc3QgKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCisgICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgZG9Mb29rdXAoKTsKICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNpbXBsZUJhbmtTZXJ2bGV0IGlzIGV4ZWN1dGluZyIpOwogICAgIFN0cmluZyBTU04gPSByZXF1ZXN0LmdldFBhcmFtZXRlcigiU1NOIik7CkBAIC02NSwxNCArNjUsMTQgQEAKICAgICBTdHJpbmcgemlwQ29kZSA9ICIiOwogICAgIGxvbmcgY3VycmVudFNhdmluZ3NCYWxhbmNlID0gMDsKICAgICBsb25nIGN1cnJlbnRDaGVja2luZ0JhbGFuY2UgPSAwOwotICAgICAKKwogICAgIFN0cmluZyBhY3Rpb24gPSByZXF1ZXN0LmdldFBhcmFtZXRlcigiYWN0aW9uIik7CiAgICAgaWYgKGFjdGlvbi5lcXVhbHMoIkNyZWF0ZSIpKQogICAgIHsKICAgICAgIG1lc3NhZ2UgPSAiQWRkIEN1c3RvbWVyIjsKICAgICAgIGpzcCA9ICIvU2ltcGxlQmFua0FkZC5qc3AiOwogICAgIH0KLSAgICBlbHNlIGlmIChhY3Rpb24uZXF1YWxzKCJBZGQgQ3VzdG9tZXIiKSkgCisgICAgZWxzZSBpZiAoYWN0aW9uLmVxdWFscygiQWRkIEN1c3RvbWVyIikpCiAgICAgewogICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBZGQgQ3VzdG9tZXIgYnV0dG9uIHByZXNzZWQiKTsKICAgICAgIFNTTiA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJTU04iKTsKQEAgLTg5LDcgKzg5LDcgQEAKICAgICAgICAgY3VzdG9tZXJTYXZpbmdzID0gY3VzdG9tZXJTYXZpbmdzTG9jYWxIb21lLmNyZWF0ZShTU04sIGxhc3ROYW1lLCBmaXJzdE5hbWUsIGFkZHJlc3MxLCBhZGRyZXNzMiwgY2l0eSwgc3RhdGUsIHppcENvZGUpOwogICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb3VsZCBub3QgY3JlYXRlIHRoZSBjdXN0b21lciBzYXZpbmdzIHJlbW90ZSBiZWFuIDogIiArIGUudG9TdHJpbmcoKSk7Ci0JdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgLy9yZXR1cm47CiAgICAgICB9CiAgICAgICBtZXNzYWdlID0gIkN1c3RvbWVyIEFkZGVkLiI7CkBAIC0xMDIsNyArMTAyLDcgQEAKICAgICAgICAgY3VzdG9tZXJTYXZpbmdzID0gY3VzdG9tZXJTYXZpbmdzTG9jYWxIb21lLmZpbmRCeVByaW1hcnlLZXkoU1NOKTsKICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ291bGQgbm90IGZpbmQgdGhlIGN1c3RvbWVyIHJlbW90ZSBiZWFuIDogIiArIGUudG9TdHJpbmcoKSk7Ci0JdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgLy9yZXR1cm47CiAgICAgICB9CiAgICAgICBqc3AgPSAiL1NpbXBsZUJhbmtFZGl0LmpzcCI7CkBAIC0xMTQsNyArMTE0LDcgQEAKICAgICAgICAgY3VzdG9tZXJTYXZpbmdzID0gY3VzdG9tZXJTYXZpbmdzTG9jYWxIb21lLmZpbmRCeVByaW1hcnlLZXkoU1NOKTsKICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ291bGQgbm90IGZpbmQgdGhlIGN1c3RvbWVyIHNhdmluZ3MgcmVtb3RlIGJlYW4gOiAiICsgZS50b1N0cmluZygpKTsKLQl0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CisgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAvL3JldHVybjsKICAgICAgIH0KICAgICAgIG1lc3NhZ2UgPSAiRGVsZXRlIEN1c3RvbWVyIjsKQEAgLTEyNiwxMiArMTI2LDEyIEBACiAgICAgICAgIGN1c3RvbWVyU2F2aW5nc0xvY2FsSG9tZS5maW5kQnlQcmltYXJ5S2V5KFNTTikucmVtb3ZlKCk7CiAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvdWxkIG5vdCBkZWxldGUgdGhlIGN1c3RvbWVyIHNhdmluZ3MgYmVhbiA6ICIgKyBlLnRvU3RyaW5nKCkpOwotCXRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIC8vcmV0dXJuOwogICAgICAgfQogICAgICAgbWVzc2FnZSA9ICJDdXN0b21lciBEZWxldGVkLiI7CiAgICAgICBqc3AgPSAiL1NpbXBsZUJhbmtNZXNzYWdlLmpzcCI7Ci0gICAgfSAgCisgICAgfQogCiAKICAgICBlbHNlIGlmIChhY3Rpb24uZXF1YWxzKCJVcGRhdGUiKSkKQEAgLTE0MSw3ICsxNDEsNyBAQAogICAgICAgICBjdXN0b21lclNhdmluZ3MgPSAoQ3VzdG9tZXJTYXZpbmdzKWN1c3RvbWVyU2F2aW5nc0xvY2FsSG9tZS5maW5kQnlQcmltYXJ5S2V5KFNTTik7CiAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvdWxkIG5vdCBmaW5kIHRoZSBjdXN0b21lciBzYXZpbmdzIHJlbW90ZSBiZWFuIDogIiArIGUudG9TdHJpbmcoKSk7Ci0JdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgLy9yZXR1cm47CiAgICAgICB9CiAKQEAgLTE1MCw3ICsxNTAsNyBAQAogICAgICAgICBjdXN0b21lckNoZWNraW5nID0gKEN1c3RvbWVyQ2hlY2tpbmcpY3VzdG9tZXJDaGVja2luZ0xvY2FsSG9tZS5maW5kQnlQcmltYXJ5S2V5KFNTTik7CiAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvdWxkIG5vdCBmaW5kIHRoZSBjdXN0b21lciBjaGVja2luZyByZW1vdGUgYmVhbiA6ICIgKyBlLnRvU3RyaW5nKCkpOwotCXRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIC8vcmV0dXJuOwogICAgICAgfQogCkBAIC0yMTAsOSArMjEwLDkgQEAKICAgICBSZXF1ZXN0RGlzcGF0Y2hlciBkaXNwYXRjaGVyID0gZ2V0U2VydmxldENvbnRleHQoKS5nZXRSZXF1ZXN0RGlzcGF0Y2hlcihqc3ApOwogICAgIGRpc3BhdGNoZXIuaW5jbHVkZShyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgcmV0dXJuOwotICB9IAorICB9CiAKLSAgcHVibGljIHZvaWQgZG9Mb29rdXAoKSAKKyAgcHVibGljIHZvaWQgZG9Mb29rdXAoKQogICB7CiAgICAgdHJ5IHsKICAgICAgIGluaXRDb250ZXh0ID0gbmV3IGphdmF4Lm5hbWluZy5Jbml0aWFsQ29udGV4dCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvc3FsL2Ryb3BCYW5rVGFibGVzLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hbm5vdGF0aW9uLWVtYmVkZGVkd2ViL3NxbC9kcm9wQmFua1RhYmxlcy5zcWwKaW5kZXggZGY5ZGYzNC4uMzNhNzA2OSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Fubm90YXRpb24tZW1iZWRkZWR3ZWIvc3FsL2Ryb3BCYW5rVGFibGVzLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYW5ub3RhdGlvbi1lbWJlZGRlZHdlYi9zcWwvZHJvcEJhbmtUYWJsZXMuc3FsCkBAIC0xICsxIEBACi1kcm9wIHRhYmxlIGN1c3RvbWVyMjsNCitkcm9wIHRhYmxlIGN1c3RvbWVyMjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9hcHAvTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vYXBwL01FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sCmluZGV4IDIxYmUwNjIuLmI3NDFmZWQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9hcHAvTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL2FwcC9NRVRBLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbApAQCAtNzIsNCArNzIsNCBAQAogICAgICAgPHByb3BlcnR5IG5hbWU9IlJlc2V0Q29udHJvbCIgdmFsdWU9IkJFR0lOTklORyIvPgogICAgIDwvYWRtaW4tb2JqZWN0LXJlc291cmNlPi0tPgogCi08L3Jlc291cmNlcz4gCis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9hcHAvc3JjL01FVEEtSU5GL2VqYi1nZi1yZXNvdXJjZXMueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL2FwcC9zcmMvTUVUQS1JTkYvZWpiLWdmLXJlc291cmNlcy54bWwKaW5kZXggMDQ1YmYxNS4uNzk1NDliYiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL2FwcC9zcmMvTUVUQS1JTkYvZWpiLWdmLXJlc291cmNlcy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL2FwcC9zcmMvTUVUQS1JTkYvZWpiLWdmLXJlc291cmNlcy54bWwKQEAgLTcyLDQgKzcyLDQgQEAKIAogCiAgICAgPGpkYmMtcmVzb3VyY2UgZW5hYmxlZD0idHJ1ZSIgam5kaS1uYW1lPSJqYXZhOm1vZHVsZS9qZGJjL21vbml0b3JpbmctZHMiIG9iamVjdC10eXBlPSJ1c2VyIiBwb29sLW5hbWU9ImphdmE6bW9kdWxlL2pkYmMvbW9uaXRvcmluZy1wb29sIi8+Ci08L3Jlc291cmNlcz4gCis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9hcHAvc3JjL01FVEEtSU5GL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwKaW5kZXggNTgyYjc4MS4uMTJmYjZkMyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwKQEAgLTExNCw4ICsxMTQsOCBAQAogICAgICAgICA8cmVzLXNoYXJpbmctc2NvcGU+U2hhcmVhYmxlPC9yZXMtc2hhcmluZy1zY29wZT4KICAgICAgIDwvcmVzb3VyY2UtcmVmPgogICAgICAgPHJlc291cmNlLWVudi1yZWY+Ci0JPHJlc291cmNlLWVudi1yZWYtbmFtZT5laXMvdGVzdEFkbWluPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+Ci0JPHJlc291cmNlLWVudi1yZWYtdHlwZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvcmVzb3VyY2UtZW52LXJlZi10eXBlPgorICAgIDxyZXNvdXJjZS1lbnYtcmVmLW5hbWU+ZWlzL3Rlc3RBZG1pbjwvcmVzb3VyY2UtZW52LXJlZi1uYW1lPgorICAgIDxyZXNvdXJjZS1lbnYtcmVmLXR5cGU+Y29ubmVjdG9yLk15QWRtaW5PYmplY3Q8L3Jlc291cmNlLWVudi1yZWYtdHlwZT4KICAgICAgIDwvcmVzb3VyY2UtZW52LXJlZj4KICAgICAgIDxzZWN1cml0eS1pZGVudGl0eT4KICAgICAgICAgPHVzZS1jYWxsZXItaWRlbnRpdHkvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCmluZGV4IGI4OGE4NjguLjY5YjAxNDkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9hcHAvc3JjL01FVEEtSU5GL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vYXBwL3NyYy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwKQEAgLTMyLDcgKzMyLDcgQEAKICAgICAgICAgICAgIFRlc3RJbnRlZ2VyUHJvcAogICAgICAgICAgIDwvYWN0aXZhdGlvbi1jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICA8YWN0aXZhdGlvbi1jb25maWctcHJvcGVydHktdmFsdWU+Ci0gICAgICAgICAgICAyIAorICAgICAgICAgICAgMgogICAgICAgICAgIDwvYWN0aXZhdGlvbi1jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgIDwvYWN0aXZhdGlvbi1jb25maWctcHJvcGVydHk+CiAgICAgICAgIDwvYWN0aXZhdGlvbi1jb25maWc+CkBAIC04NCw3ICs4NCw3IEBACiAgICAgICA8L3Jlc291cmNlLXJlZj4KICAgICAgIDxyZXNvdXJjZS1lbnYtcmVmPgogICAgICAgICA8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmVpcy90ZXN0QWRtaW48L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KLQk8am5kaS1uYW1lPmphdmE6bW9kdWxlL2Vpcy90ZXN0QWRtaW48L2puZGktbmFtZT4KKyAgICA8am5kaS1uYW1lPmphdmE6bW9kdWxlL2Vpcy90ZXN0QWRtaW48L2puZGktbmFtZT4KICAgICAgIDwvcmVzb3VyY2UtZW52LXJlZj4KICAgICAgIDxnZW4tY2xhc3Nlcy8+CiAgICAgPC9lamI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vYXBwL3NyYy9NRVRBLUlORi93ZWItZ2YtcmVzb3VyY2VzLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9hcHAvc3JjL01FVEEtSU5GL3dlYi1nZi1yZXNvdXJjZXMueG1sCmluZGV4IDgxMDVhMTUuLjYyZGYxNjUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9hcHAvc3JjL01FVEEtSU5GL3dlYi1nZi1yZXNvdXJjZXMueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9hcHAvc3JjL01FVEEtSU5GL3dlYi1nZi1yZXNvdXJjZXMueG1sCkBAIC02Nyw0ICs2Nyw0IEBACiAKICAgICA8amRiYy1yZXNvdXJjZSBlbmFibGVkPSJ0cnVlIiBqbmRpLW5hbWU9ImphdmE6bW9kdWxlL2pkYmMvbW9uaXRvcmluZy1kcyIgb2JqZWN0LXR5cGU9InVzZXIiIHBvb2wtbmFtZT0iamF2YTptb2R1bGUvamRiYy9tb25pdG9yaW5nLXBvb2wiLz4KICAgICA8amRiYy1yZXNvdXJjZSBlbmFibGVkPSJ0cnVlIiBqbmRpLW5hbWU9ImphdmE6bW9kdWxlL2pkYmMvd2ViLWxldmVsLWRzIiBvYmplY3QtdHlwZT0idXNlciIgcG9vbC1uYW1lPSJqYXZhOm1vZHVsZS9qZGJjL3dlYi1sZXZlbC1wb29sIi8+Ci08L3Jlc291cmNlcz4gCis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9hcHAvc3JjL2JlYW5zL01lc3NhZ2VDaGVja2VyRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vYXBwL3NyYy9iZWFucy9NZXNzYWdlQ2hlY2tlckVKQi5qYXZhCmluZGV4IDk5YmYyNWQuLmNiMzc4OGEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9hcHAvc3JjL2JlYW5zL01lc3NhZ2VDaGVja2VyRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL2FwcC9zcmMvYmVhbnMvTWVzc2FnZUNoZWNrZXJFSkIuamF2YQpAQCAtNDAsNyArNDAsNyBAQAogCiAgICAgcHVibGljIE1lc3NhZ2VDaGVja2VyRUpCKCkge30KIAotICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIAorICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpCiAgICAgICAgIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImJlYW4gY3JlYXRlZCIpOwogICAgICAgICBoZWxkQ29uID0gbnVsbDsKQEAgLTEyNiwxMSArMTI2LDExIEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKENvbnRyb2xzLmdldExvY2tPYmplY3QoKSkgewogICAgICAgICAgICAgICAgIC8vVGVsbCB0aGUgcmVzb3VyY2UgYWRhcHRlciB0aGUgY2xpZW50IGlzIHJlYWR5IHRvIHJ1bgotICAgICAgICAgICAgICAgIENvbnRyb2xzLmdldExvY2tPYmplY3QoKS5ub3RpZnlBbGwoKTsgCi0gICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLm5vdGlmeUFsbCgpOworCiAgICAgICAgICAgICAgICAgZGVidWcoIk5PVElGSUVELi4uIFNUQVJUIFdBSVRJTkciKTsKICAgICAgICAgICAgICAgICAvL1dhaXQgdW50aWwgYmVpbmcgdG9sZCB0byByZWFkIGZyb20gdGhlIGRhdGFiYXNlCi0gICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLndhaXQoKTsgCisgICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLndhaXQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTE0OSwyMiArMTQ5LDIyIEBACiAgICAgfQogCiAgICAgcHVibGljIGludCBnZXRNZXNzYWdlQ291bnQoKSB7Ci0JdHJ5IHsKKyAgICB0cnkgewogICAgICAgICAgICAgQ29ubmVjdGlvbiBjb24gPSBnZXRGcmVzaENvbm5lY3Rpb24oKTsKICAgICAgICAgICAgIGludCBjb3VudDEgPSBnZXRDb3VudChjb24pOwogICAgICAgICAgICAgY29uLmNsb3NlKCk7Ci0gICAgICAgICAgICAKLQkgICAgLyoKKworICAgICAgICAvKgogICAgICAgICAgICAgc3luY2hyb25pemVkKENvbnRyb2xzLmdldExvY2tPYmplY3QoKSkgewogICAgICAgICAgICAgICAgIENvbnRyb2xzLmdldExvY2tPYmplY3QoKS5ub3RpZnkoKTsKICAgICAgICAgICAgIH0KLQkgICAgKi8KLSAgICAgICAgICAgICAgICAKKyAgICAgICAgKi8KKwogICAgICAgICAgICAgcmV0dXJuIGNvdW50MTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5vdXQpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlKTsKLQl9CisgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgaW50IGdldENvdW50KENvbm5lY3Rpb24gY29uKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKQEAgLTE5MCwxMCArMTkwLDEwIEBACiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICB1c2VyID0gKFN0cmluZykgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3VzZXIiKTsKICAgICAgICAgICAgIHBhc3N3b3JkID0gKFN0cmluZykgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3Bhc3N3b3JkIik7Ci0JICAgIENvbnRyb2xzID0gKE15QWRtaW5PYmplY3QpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9laXMvdGVzdEFkbWluIik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ0FMTElORyBJTklUSUxJWkUgXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV0iKTsKLQkgICAgQ29udHJvbHMuaW5pdGlhbGl6ZSgpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNBTExFRCBJTklUSUxJWkUgXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV0iICsgQ29udHJvbHMpOworICAgICAgICBDb250cm9scyA9IChNeUFkbWluT2JqZWN0KSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWlzL3Rlc3RBZG1pbiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNBTExJTkcgSU5JVElMSVpFIF1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dIik7CisgICAgICAgIENvbnRyb2xzLmluaXRpYWxpemUoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDQUxMRUQgSU5JVElMSVpFIF1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dIiArIENvbnRyb2xzKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQpAQCAtMjI4LDcgKzIyOCw3IEBACiAgICAgICAgICAgICBkZWJ1ZygiTG9va2VkIHVwIERhdGFzb3VyY2VcbiIpOwogICAgICAgICAgICAgZGVidWcoIkdldCBKREJDIGNvbm5lY3Rpb24sIGF1dG8gc2lnbiBvbiIpOwogICAgICAgICAgICAgY29uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmIChjb24gIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIHJldHVybiBjb247CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMjM5LDcgKzIzOSw3IEBACiAgICAgICAgICAgICB0aHJvdyBleDE7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgY2xvc2VDb25uZWN0aW9uKENvbm5lY3Rpb24gY29uKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgICAgaWYgKGhlbGRDb24gIT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL2FwcC9zcmMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZGFkMjA3Yi4uMGIzOGMxOSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL2FwcC9zcmMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vYXBwL3NyYy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIGVqYi1qYXIueG1sPU1FVEEtSU5GL2VqYi1qYXIueG1sCiBzdW4tZWpiLWphci54bWw9TUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vYXBwL3NyYy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vYXBwL3NyYy9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggN2UwMzBiNi4uOGVmNWNkNSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL2FwcC9zcmMvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9hcHAvc3JjL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjgsNDUgKzI4LDQ1IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7Ci0gICAgCisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIC8vc3VwZXIoYXJncyk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZG9UZXN0KCkgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJUaGlzIGlzIHRvIHRlc3QgYXBwLXNjb3BlZC1yZXNvdXJjZXMgIisKLQkgICAgICAgICAgICAgImNvbnRyYWN0cy4iKTsKLSAgICAgICAgCisgICAgICAgICAgICAgICAgICJjb250cmFjdHMuIik7CisKICAgICAgICAgU3RyaW5nIHJlcyA9ICJOT1QgUlVOIjsKLQlkZWJ1ZygiZG9UZXN0KCkgRU5URVIuLi4iKTsKKyAgICBkZWJ1ZygiZG9UZXN0KCkgRU5URVIuLi4iKTsKICAgICAgICAgYm9vbGVhbiBwYXNzID0gZmFsc2U7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXMgID0gIkFMTCBURVNUUyBQQVNTRUQiOwotCSAgICBpbnQgdGVzdENvdW50ID0gMTsKKyAgICAgICAgaW50IHRlc3RDb3VudCA9IDE7CiAgICAgICAgICAgICB3aGlsZSAoIWRvbmUoKSkgewotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgbm90aWZ5QW5kV2FpdCgpOwogICAgICAgICAgICAgICAgIGlmICghZG9uZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJSdW5uaW5nLi4uIik7CiAgICAgICAgICAgICAgICAgICAgIHBhc3MgPSBjaGVja1Jlc3VsdHMoZXhwZWN0ZWRSZXN1bHRzKCkpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiR290IGV4cGVjdGVkIHJlc3VsdHMgPSAiICsgcGFzcyk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vZG8gbm90IGNvbnRpbnVlIGlmIG9uZSB0ZXN0IGZhaWxlZAogICAgICAgICAgICAgICAgICAgICBpZiAoIXBhc3MpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlcyA9ICJTT01FIFRFU1RTIEZBSUxFRCI7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiSUQgYXBwLXNjb3BlZC1yZXNvdXJjZXMgdGVzdCAtICIgKyB0ZXN0Q291bnQsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiSUQgYXBwLXNjb3BlZC1yZXNvdXJjZXMgdGVzdCAtICIgKyB0ZXN0Q291bnQsIHN0YXQuUEFTUyk7Ci0JCSAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotCQl0ZXN0Q291bnQgKys7CisgICAgICAgIHRlc3RDb3VudCArKzsKICAgICAgICAgICAgIH0KIAogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTc2LDE0ICs3NiwxNCBAQAogICAgICAgICB9CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJhcHAtc2NvcGVkLXJlc291cmNlc0lEIik7CiAKLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIkVYSVRJTkcuLi4gU1RBVFVTID0gIiArIHJlcyk7CiAgICAgICAgIHJldHVybiByZXM7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBib29sZWFuIGNoZWNrUmVzdWx0cyhpbnQgbnVtKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgT2JqZWN0IG8gPSAobmV3IEluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiTXlNZXNzYWdlQ2hlY2tlciIpOwotICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKSAKKyAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkKICAgICAgICAgICAgIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvLCBNZXNzYWdlQ2hlY2tlckhvbWUuY2xhc3MpOwogICAgICAgICBNZXNzYWdlQ2hlY2tlciBjaGVja2VyID0gaG9tZS5jcmVhdGUoKTsKICAgICAgICAgaW50IHJlc3VsdCA9IGNoZWNrZXIuZ2V0TWVzc2FnZUNvdW50KCk7CkBAIC05Miw3ICs5Miw3IEBACiAKICAgICBwcml2YXRlIGJvb2xlYW4gZG9uZSgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBPYmplY3QgbyA9IChuZXcgSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJNeU1lc3NhZ2VDaGVja2VyIik7Ci0gICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpIAorICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKQogICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG8sIE1lc3NhZ2VDaGVja2VySG9tZS5jbGFzcyk7CiAgICAgICAgIE1lc3NhZ2VDaGVja2VyIGNoZWNrZXIgPSBob21lLmNyZWF0ZSgpOwogICAgICAgICByZXR1cm4gY2hlY2tlci5kb25lKCk7CkBAIC0xMDAsNyArMTAwLDcgQEAKIAogICAgIHByaXZhdGUgaW50IGV4cGVjdGVkUmVzdWx0cygpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBPYmplY3QgbyA9IChuZXcgSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJNeU1lc3NhZ2VDaGVja2VyIik7Ci0gICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpIAorICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKQogICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG8sIE1lc3NhZ2VDaGVja2VySG9tZS5jbGFzcyk7CiAgICAgICAgIE1lc3NhZ2VDaGVja2VyIGNoZWNrZXIgPSBob21lLmNyZWF0ZSgpOwogICAgICAgICByZXR1cm4gY2hlY2tlci5leHBlY3RlZFJlc3VsdHMoKTsKQEAgLTEwOCw3ICsxMDgsNyBAQAogCiAgICAgcHJpdmF0ZSB2b2lkIG5vdGlmeUFuZFdhaXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgT2JqZWN0IG8gPSAobmV3IEluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiTXlNZXNzYWdlQ2hlY2tlciIpOwotICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKSAKKyAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkKICAgICAgICAgICAgIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvLCBNZXNzYWdlQ2hlY2tlckhvbWUuY2xhc3MpOwogICAgICAgICBNZXNzYWdlQ2hlY2tlciBjaGVja2VyID0gaG9tZS5jcmVhdGUoKTsKICAgICAgICAgY2hlY2tlci5ub3RpZnlBbmRXYWl0KCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL2FwcC9zcmMvbWRiL015TWVzc2FnZUJlYW4uamF2YQppbmRleCBiNzQyN2FhLi42MmM0MmFkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9hcHAvc3JjL21kYi9NeU1lc3NhZ2VCZWFuLmphdmEKQEAgLTI5LDQxICsyOSw0MSBAQAogCiAvKioKICAqLwotcHVibGljIGNsYXNzIE15TWVzc2FnZUJlYW4gaW1wbGVtZW50cyBNZXNzYWdlRHJpdmVuQmVhbiwgCitwdWJsaWMgY2xhc3MgTXlNZXNzYWdlQmVhbiBpbXBsZW1lbnRzIE1lc3NhZ2VEcml2ZW5CZWFuLAogICAgICAgICBNeU1lc3NhZ2VMaXN0ZW5lciB7CiAKICAgICBwcml2YXRlIHRyYW5zaWVudCBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGMgPSBudWxsOwogICAgIHByaXZhdGUgQ29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0b3IsIHdoaWNoIGlzIHB1YmxpYyBhbmQgdGFrZXMgbm8gYXJndW1lbnRzLgogICAgICAqLwogICAgIHB1YmxpYyBNeU1lc3NhZ2VCZWFuKCkge30KIAogICAgIC8qKgotICAgICAqIHNldE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgCi0gICAgICogbm90IGZpbmFsIG9yIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgCisgICAgICogc2V0TWVzc2FnZURyaXZlbkNvbnRleHQgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dAorICAgICAqIG5vdCBmaW5hbCBvciBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kCiAgICAgICogd2l0aCBvbmUgYXJndW1lbnQgb2YgdHlwZSBqYWthcnRhLmVqYi5NZXNzYWdlRHJpdmVuQ29udGV4dC4KICAgICAgKgogICAgICAqIEBwYXJhbSBtZGMgICAgdGhlIGNvbnRleHQgdG8gc2V0CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TWVzc2FnZURyaXZlbkNvbnRleHQoTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjKSB7Ci0JdGhpcy5tZGMgPSBtZGM7CisgICAgdGhpcy5tZGMgPSBtZGM7CiAgICAgfQogCiAgICAgLyoqCi0gICAgICogZWpiQ3JlYXRlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yIAotICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBubyAKKyAgICAgKiBlamJDcmVhdGUgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IKKyAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggbm8KICAgICAgKiBhcmd1bWVudHMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgeyB9CiAKICAgICAvKioKLSAgICAgKiBvbk1lc3NhZ2UgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IgCisgICAgICogb25NZXNzYWdlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yCiAgICAgICogc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCB3aXRoIG9uZSBhcmd1bWVudAogICAgICAqIG9mIHR5cGUgamFrYXJ0YS5qbXMuTWVzc2FnZS4KICAgICAgKgotICAgICAqIENhc3RzIHRoZSBpbmNvbWluZyBNZXNzYWdlIHRvIGEgVGV4dE1lc3NhZ2UgYW5kIGRpc3BsYXlzIAorICAgICAqIENhc3RzIHRoZSBpbmNvbWluZyBNZXNzYWdlIHRvIGEgVGV4dE1lc3NhZ2UgYW5kIGRpc3BsYXlzCiAgICAgICogdGhlIHRleHQuCiAgICAgICoKICAgICAgKiBAcGFyYW0gaW5NZXNzYWdlICAgIHRoZSBpbmNvbWluZyBtZXNzYWdlCkBAIC03NCw3ICs3NCw3IEBACiAgICAgICAgIC8vbG9nKCJvbk1lc3NhZ2U6OiBnZXRDYWxsZXJQcmluY2lwYWwgOiAiICsgbWRjLmdldENhbGxlclByaW5jaXBhbCgpKTsKICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIm9uTWVzc2FnZSA6IFRocmVhZElEIDogIiArIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0TmFtZSgpKTsKICAgICAgICAgaWYobWRjLmdldENhbGxlclByaW5jaXBhbCgpICE9IG51bGwpewotICAgICAgICAJbG9nKCJvbk1lc3NhZ2U6OiBnZXRDYWxsZXJQcmluY2lwYWwgTmFtZSA6ICIgKyBtZGMuZ2V0Q2FsbGVyUHJpbmNpcGFsKCkuZ2V0TmFtZSgpKTsKKyAgICAgICAgICAgIGxvZygib25NZXNzYWdlOjogZ2V0Q2FsbGVyUHJpbmNpcGFsIE5hbWUgOiAiICsgbWRjLmdldENhbGxlclByaW5jaXBhbCgpLmdldE5hbWUoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBsb2coIm9uTWVzc2FnZSA6IGlzQ2FsbGVySW5Sb2xlKCdqYWdhZGlzaCcpIDogIiArIG1kYy5pc0NhbGxlckluUm9sZSgiamFnYWRpc2giKSk7CkBAIC04Myw3ICs4Myw3IEBACiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGlmIChpbk1lc3NhZ2UuZW5kc1dpdGgoIldSSVRFIikpIHsKLSAgICAgICAgICAgICAgICBkb0RiU3R1ZmYoIldSSVRFIiwgCisgICAgICAgICAgICAgICAgZG9EYlN0dWZmKCJXUklURSIsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbk1lc3NhZ2Uuc3Vic3RyaW5nKDAsIGluTWVzc2FnZS5sYXN0SW5kZXhPZigiOiIpKSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGluTWVzc2FnZS5lbmRzV2l0aCgiREVMRVRFIikpIHsKICAgICAgICAgICAgICAgICBkb0RiU3R1ZmYoIkRFTEVURSIsCkBAIC05NywxMCArOTcsMTAgQEAKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogZWpiUmVtb3ZlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yIAotICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBubyAKKyAgICAgKiBlamJSZW1vdmUgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IKKyAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggbm8KICAgICAgKiBhcmd1bWVudHMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkge30KQEAgLTExMCw2MiArMTEwLDYyIEBACiAKICAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24gPSBudWxsOwogICAgICAgICBTdHJpbmcgaWQgICAgPSBtZXNzYWdlLnN1YnN0cmluZygwLCBtZXNzYWdlLmluZGV4T2YoIjoiKSk7Ci0gICAgICAgIFN0cmluZyBib2R5ICA9IG1lc3NhZ2Uuc3Vic3RyaW5nKG1lc3NhZ2UuaW5kZXhPZigiOiIpKzEpOyAKKyAgICAgICAgU3RyaW5nIGJvZHkgID0gbWVzc2FnZS5zdWJzdHJpbmcobWVzc2FnZS5pbmRleE9mKCI6IikrMSk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKCJSRUFEIi5lcXVhbHMob3ApKSB7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZWJ1ZygiUmVhZGluZyByb3cgZnJvbSBkYXRhYmFzZS4uLiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAKICAgICAgICAgICAgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L015REIiKTsKICAgICAgICAgICAgICAgICAgIGRlYnVnKCJMb29rZWQgdXAgRGF0YXNvdXJjZVxuIik7CiAgICAgICAgICAgICAgICAgICBkZWJ1ZygiR2V0IEpEQkMgY29ubmVjdGlvbiwgYXV0byBzaWduIG9uIik7CiAgICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgU3RhdGVtZW50IHN0bXQgPSBkYkNvbm5lY3Rpb24uY3JlYXRlU3RhdGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICBTdHJpbmcgcXVlcnkgPSAKKyAgICAgICAgICAgICAgICAgIFN0cmluZyBxdWVyeSA9CiAgICAgICAgICAgICAgICAgICAiU0VMRUNUIGlkIGZyb20gbWVzc2FnZXMgd2hlcmUgaWQgPSAnUVEnIjsKICAgICAgICAgICAgICAgICAgIFJlc3VsdFNldCByZXN1bHRzID0gc3RtdC5leGVjdXRlUXVlcnkocXVlcnkpOwogICAgICAgICAgICAgICAgICAgcmVzdWx0cy5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlFRIGhhcyBiYWxhbmNlICIgKyAKKyAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUVEgaGFzIGJhbGFuY2UgIiArCiAgICAgICAgICAgICAgICAgICByZXN1bHRzLmdldEludCgiYmFsYW5jZSIpICsgIiBkb2xsYXJzIik7CiAgICAgICAgICAgICAgICAgICByZXN1bHRzLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgICBzdG10LmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZWFkIG9uZSBhY2NvdW50XG4iKTsKIAogICAgICAgICAgICAgfSBlbHNlIGlmICgiV1JJVEUiLmVxdWFscyhvcCkpIHsKIAogICAgICAgICAgICAgICAgIGRlYnVnKCJJbnNlcnRpbmcgb25lIG1lc3NhZ2UgaW4gdGhlIGRhdGFiYXNlXG4iKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvTXlEQiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKICAgICAgICAgICAgICAgICAvL2RlYnVnKCJHZXQgSkRCQyBjb25uZWN0aW9uLCBhdXRvIHNpZ24gb24iKTsKICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBjcmVhdGVSb3coaWQsIGJvZHksIGRiQ29ubmVjdGlvbik7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGVkIG9uZSBtZXNzYWdlXG4iKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgfSBlbHNlIGlmICgiREVMRVRFIi5lcXVhbHMob3ApKSB7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZWJ1ZygiRGVsZXRpbmcgb25lIG1lc3NhZ2UgZnJvbSB0aGUgZGF0YWJhc2VcbiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvTXlEQiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKICAgICAgICAgICAgICAgICAvL2RlYnVnKCJHZXQgSkRCQyBjb25uZWN0aW9uLCBhdXRvIHNpZ24gb24iKTsKICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZWxldGVSb3coaWQsIGRiQ29ubmVjdGlvbik7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZWxldGVkIG9uZSBtZXNzYWdlXG4iKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoIkRFTEVURV9BTEwiLmVxdWFscyhvcCkpIHsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGRlYnVnKCJEZWxldGluZyBhbGwgbWVzc2FnZXMgZnJvbSB0aGUgZGF0YWJhc2VcbiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvTXlEQiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKQEAgLTE3Niw3ICsxNzYsNyBAQAogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvL3Vuc3VwcG9ydGVkIG9wCiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICB9ZmluYWxseXsKICAgICAgICAgICAgIHRyeXsKICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24uY2xvc2UoKTsKQEAgLTE4NSw5ICsxODUsOSBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIAotICAgIHByaXZhdGUgdm9pZCBjcmVhdGVSb3coU3RyaW5nIGlkLCBTdHJpbmcgYm9keSwgCi0gICAgICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikgCisKKyAgICBwcml2YXRlIHZvaWQgY3JlYXRlUm93KFN0cmluZyBpZCwgU3RyaW5nIGJvZHksCisgICAgICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgLy8gQ3JlYXRlIHJvdyBmb3IgdGhpcyBtZXNzYWdlCkBAIC0yMDMsOSArMjAzLDkgQEAKICAgICAgICAgc3RtdC5jbG9zZSgpOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBkZWxldGVSb3coU3RyaW5nIGlkLCBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikgCisgICAgcHJpdmF0ZSB2b2lkIGRlbGV0ZVJvdyhTdHJpbmcgaWQsIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgLy8gRGVsZXRlIHJvdyBmb3IgdGhpcyBtZXNzYWdlCiAgICAgICAgIGRlYnVnKCJEZWxldGVSb3cgd2l0aCBJRCA9ICIgKyBpZCk7CiAgICAgICAgIFN0YXRlbWVudCBzdG10ID0gZGJDb25uZWN0aW9uLmNyZWF0ZVN0YXRlbWVudCgpOwpAQCAtMjE4LDkgKzIxOCw5IEBACiAgICAgICAgIHN0bXQuY2xvc2UoKTsKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgZGVsZXRlQWxsKGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKSAKKyAgICBwcml2YXRlIHZvaWQgZGVsZXRlQWxsKGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgLy8gRGVsZXRlIHJvdyBmb3IgdGhpcyBtZXNzYWdlCiAgICAgICAgIFN0YXRlbWVudCBzdG10ID0gZGJDb25uZWN0aW9uLmNyZWF0ZVN0YXRlbWVudCgpOwogICAgICAgICBTdHJpbmcgcXVlcnkgPSAiREVMRVRFIEZST00gbWVzc2FnZXMiOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL2FwcC9zcmMvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vYXBwL3NyYy9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YQppbmRleCAxZWUwZDE0Li45M2FhOWFlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vYXBwL3NyYy9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vYXBwL3NyYy9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YQpAQCAtNDUsNyArNDUsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgZG9UZXN0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoaXMgaXMgdG8gdGVzdCBhcHBsaWNhdGlvbi1zY29wZWQtcmVzb3VyY2VzIik7IAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoaXMgaXMgdG8gdGVzdCBhcHBsaWNhdGlvbi1zY29wZWQtcmVzb3VyY2VzIik7CiAKICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYzFkYmJlOC4uMzQzZDdhNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iL2FwcC1zY29wZWQtcmVzb3VyY2VzL3NlcnZsZXQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJodHRwOmhvc3QiIHZhbHVlPSJsb2NhbGhvc3QiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vYnVpbGQueG1sCmluZGV4IDc1YzNhMGEuLjkzMjcyNWQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL2J1aWxkLnhtbApAQCAtNDUsNyArNDUsNyBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuc2V0Ii8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGlzYWJsZS1tb25pdG9yaW5nIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnQgZGlyPSJyYSIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9ImFwcCIgdGFyZ2V0PSJhbGwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9yYS9NRVRBLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9yYS9NRVRBLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbAppbmRleCBhOTM0OWZjLi4wZmNhYmRkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vcmEvTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL3JhL01FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sCkBAIC00OCw0ICs0OCw0IEBACiAgICAgICA8cHJpbmNpcGFsLW1hcCBlaXMtcHJpbmNpcGFsPSJlaXMtcHJhc2F0aCIgbWFwcGVkLXByaW5jaXBhbD0icHJhc2F0aCIgLz4KICAgICAgIDxwcmluY2lwYWwtbWFwIGVpcy1wcmluY2lwYWw9ImVpcy1qYWdhZGlzaCIgbWFwcGVkLXByaW5jaXBhbD0iamFnYWRpc2giIC8+CiAgICAgPC93b3JrLXNlY3VyaXR5LW1hcD4KLTwvcmVzb3VyY2VzPiAKKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL3JhL01FVEEtSU5GL3JhLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9yYS9NRVRBLUlORi9yYS54bWwKaW5kZXggOTc4MWUxNi4uM2NjZjI5NiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL3JhL01FVEEtSU5GL3JhLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vcmEvTUVUQS1JTkYvcmEueG1sCkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eS1jb25maWRlbnRpYWw+CiAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgogICAgICAgICA8aW5ib3VuZC1yZXNvdXJjZWFkYXB0ZXI+Ci0gICAgICAgICAgICA8bWVzc2FnZWFkYXB0ZXI+ICAgICAgICAgIAorICAgICAgICAgICAgPG1lc3NhZ2VhZGFwdGVyPgogICAgICAgICAgICAgICAgIDxtZXNzYWdlbGlzdGVuZXI+CiAgICAgICAgICAgICAgICAgICAgIDxtZXNzYWdlbGlzdGVuZXItdHlwZT4KICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rvci5NeU1lc3NhZ2VMaXN0ZW5lcgpAQCAtNjIsNyArNjIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgPC9hY3RpdmF0aW9uc3BlYy1jbGFzcz4KICAgICAgICAgICAgICAgICAgICAgPC9hY3RpdmF0aW9uc3BlYz4KICAgICAgICAgICAgICAgICA8L21lc3NhZ2VsaXN0ZW5lcj4KLSAgICAgICAgICAgIDwvbWVzc2FnZWFkYXB0ZXI+ICAgICAgICAgIAorICAgICAgICAgICAgPC9tZXNzYWdlYWRhcHRlcj4KICAgICAgICAgPC9pbmJvdW5kLXJlc291cmNlYWRhcHRlcj4KICAgICAgICAgPGFkbWlub2JqZWN0PgogICAgICAgICAgIDxhZG1pbm9iamVjdC1pbnRlcmZhY2U+Y29ubmVjdG9yLk15QWRtaW5PYmplY3Q8L2FkbWlub2JqZWN0LWludGVyZmFjZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9yYS9zcmMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL3JhL3NyYy9idWlsZC54bWwKaW5kZXggNGZmZDY5OC4uNjc5YmJkYiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL3JhL3NyYy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL3JhL3NyYy9idWlsZC54bWwKQEAgLTMwLDggKzMwLDggQEAKIAogICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iaW5pdC1jb21tb24iID4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0iYnVpbGQuY2xhc3Nlcy5kaXIiIHZhbHVlPSJjbGFzc2VzIiAvPgotCTxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjb25uZWN0b3IiIC8+CisgICAgPHBhcmFtIG5hbWU9ImJ1aWxkLmNsYXNzZXMuZGlyIiB2YWx1ZT0iY2xhc3NlcyIgLz4KKyAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY29ubmVjdG9yIiAvPgogICAgIDwvYW50Y2FsbD4KICAgICA8amFyIGphcmZpbGU9Ii4uL2dlbmVyaWMtcmEuamFyIiBiYXNlZGlyPSJjbGFzc2VzIgogICAgICAgICAgaW5jbHVkZXM9ImNvbm5lY3Rvci8qLmNsYXNzIiAvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEKaW5kZXggNTU1MzNkNC4uZjU5YjJiMyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgQ29udHJvbHMgewogICAgIHB1YmxpYyBzdGF0aWMgT2JqZWN0IHJlYWR5TG9jayA9IG5ldyBPYmplY3QoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEKaW5kZXggNjU4MjMzZS4uZDczYzg2MiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBEZWxpdmVyeVdvcmsgaW1wbGVtZW50cyBXb3JrIHsKIApAQCAtMzYsNyArMzYsNyBAQAogICAgIHByaXZhdGUgU3RyaW5nIG9wOwogICAgIHByaXZhdGUgYm9vbGVhbiBrZWVwQ291bnQ7CiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50ZXIgPSAwOwotICAgIAorCiAgICAgcHVibGljIERlbGl2ZXJ5V29yayhNZXNzYWdlRW5kcG9pbnQgZXAsIGludCBudW1PZk1lc3NhZ2VzLCBTdHJpbmcgb3ApIHsKICAgICAgICAgdGhpcy5lcCA9IGVwOwogICAgICAgICB0aGlzLm51bSA9IG51bU9mTWVzc2FnZXM7CkBAIC00NCw3ICs0NCw3IEBACiAgICAgICAgIHRoaXMua2VlcENvdW50ID0gZmFsc2U7CiAgICAgfQogCi0gICAgcHVibGljIERlbGl2ZXJ5V29yayhNZXNzYWdlRW5kcG9pbnQgZXAsIGludCBudW1PZk1lc3NhZ2VzLCAKKyAgICBwdWJsaWMgRGVsaXZlcnlXb3JrKE1lc3NhZ2VFbmRwb2ludCBlcCwgaW50IG51bU9mTWVzc2FnZXMsCiAgICAgICAgICAgICBTdHJpbmcgb3AsIGJvb2xlYW4ga2VlcENvdW50KSB7CiAgICAgICAgIHRoaXMuZXAgPSBlcDsKICAgICAgICAgdGhpcy5udW0gPSBudW1PZk1lc3NhZ2VzOwpAQCAtNTUsNyArNTUsNyBAQAogICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKIAogICAgICAgICBkZWJ1ZygiRU5URVIuLi4iKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIC8vTWV0aG9kIG9uTWVzc2FnZSA9IGdldE9uTWVzc2FnZU1ldGhvZCgpOwogICAgICAgICAgICAgLy9lcC5iZWZvcmVEZWxpdmVyeShvbk1lc3NhZ2UpOwpAQCAtNzgsMTEgKzc4LDExIEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vZXAuYWZ0ZXJEZWxpdmVyeSgpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiTEVBVkUuLi4iKTsKICAgICB9CiAKQEAgLTkzLDE0ICs5MywxNCBAQAogICAgIH0KIAogICAgIHByaXZhdGUgTWV0aG9kIGdldE9uTWVzc2FnZU1ldGhvZCgpIHsKLSAgICAgICAgCisKICAgICAgICAgTWV0aG9kIG9uTWVzc2FnZU1ldGhvZCA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDbGFzcyBtc2dMaXN0ZW5lckNsYXNzID0gY29ubmVjdG9yLk15TWVzc2FnZUxpc3RlbmVyLmNsYXNzOwogICAgICAgICAgICAgQ2xhc3NbXSBwYXJhbVR5cGVzID0geyBqYXZhLmxhbmcuU3RyaW5nLmNsYXNzIH07Ci0gICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPSAKKyAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9CiAgICAgICAgICAgICAgICAgbXNnTGlzdGVuZXJDbGFzcy5nZXRNZXRob2QoIm9uTWVzc2FnZSIsIHBhcmFtVHlwZXMpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEKaW5kZXggMTAwY2FjZS4uZmE5M2Y2MyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhCkBAIC0zNiw3ICszNiw3IEBACiAgICAgICAgICAgICAgIGZsYWdUb1N0cmluZyhmbGFncykpOwogICAgIH0KIAotICAgIAorCiAgICAgcHVibGljIHZvaWQgZm9yZ2V0KFhpZCB4aWQpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5mb3JnZXQ6ICIgKyB4aWRUb1N0cmluZyh4aWQpKTsKICAgICB9CkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5wcmVwYXJlOiAiICsgeGlkVG9TdHJpbmcoeGlkKSk7CiAgICAgICAgIHJldHVybiBYQVJlc291cmNlLlhBX09LOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBYaWRbXSByZWNvdmVyKGludCBmbGFnKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2UucmVjb3ZlcjogIiArIGZsYWdUb1N0cmluZyhmbGFnKSk7CiAgICAgICAgIHJldHVybiBudWxsOwpAQCAtNjYsNyArNjYsNyBAQAogICAgIHB1YmxpYyBib29sZWFuIHNldFRyYW5zYWN0aW9uVGltZW91dChpbnQgc2Vjb25kcykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHN0YXJ0KFhpZCB4aWQsIGludCBmbGFncykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLnN0YXJ0OiAiICsgeGlkVG9TdHJpbmcoeGlkKSArICIsIiArCiAgICAgICAgICAgICAgICAgZmxhZ1RvU3RyaW5nKGZsYWdzKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vcmEvc3JjL2Nvbm5lY3Rvci9KU1IzMjJXb3JrLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vcmEvc3JjL2Nvbm5lY3Rvci9KU1IzMjJXb3JrLmphdmEKaW5kZXggNTEwN2FjMS4uMDIwM2Y0YSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL3JhL3NyYy9jb25uZWN0b3IvSlNSMzIyV29yay5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9yYS9zcmMvY29ubmVjdG9yL0pTUjMyMldvcmsuamF2YQpAQCAtNDgsNiArNDgsNiBAQAogCiAgICAgcHVibGljIHZvaWQgcnVuKCl7CiAgICAgICAgIHN1cGVyLnJ1bigpOwotICAgICAgICAKKwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YQppbmRleCBhNjhhNWI3Li45YzI4ODEyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdC5qYXZhCkBAIC01MSwxMSArNTEsMTEgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBpbml0aWFsaXplKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiW015QWRtaW5PYmplY3RdIEluaXRpYWxpemluZyB0aGUgQ29udHJvbHMgdG8gZmFsc2U6IityZXNldENvbnRyb2wpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW015QWRtaW5PYmplY3RdIEluaXRpYWxpemluZyB0aGUgQ29udHJvbHMgdG8gZmFsc2U6IityZXNldENvbnRyb2wpOwogICAgICAgICBpZiAocmVzZXRDb250cm9sLmVxdWFscygiQkVHSU5OSU5HIikpIHsKICAgICAgICAgICAgQ29udHJvbHMuZG9uZT1mYWxzZTsKLQkgICBTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXplZCB0aGUgQ29udHJvbHMgdG8gZmFsc2UiKTsKLQl9CisgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6ZWQgdGhlIENvbnRyb2xzIHRvIGZhbHNlIik7CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIGRvbmUoKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vcmEvc3JjL2Nvbm5lY3Rvci9NeVNlY3VyaXR5Q29udGV4dC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL3JhL3NyYy9jb25uZWN0b3IvTXlTZWN1cml0eUNvbnRleHQuamF2YQppbmRleCAzMTc4YzFjLi5lMTkwNTFlIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vcmEvc3JjL2Nvbm5lY3Rvci9NeVNlY3VyaXR5Q29udGV4dC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9yYS9zcmMvY29ubmVjdG9yL015U2VjdXJpdHlDb250ZXh0LmphdmEKQEAgLTYyLDcgKzYyLDcgQEAKICAgICAgICAgQ2FsbGVyUHJpbmNpcGFsQ2FsbGJhY2sgY3BjID0gbmV3IENhbGxlclByaW5jaXBhbENhbGxiYWNrKGV4ZWNTdWJqZWN0LCBuZXcgUHJpbmNpcGFsSW1wbChwcmluY2lwYWxOYW1lKSk7CiAgICAgICAgIGRlYnVnKCJzZXR0aW5nIGNhbGxlciBwcmluY2lwYWwgY2FsbGJhY2sgd2l0aCBwcmluY2lwYWwgOiAiICsgcHJpbmNpcGFsTmFtZSk7CiAgICAgICAgIGNhbGxiYWNrcy5hZGQoY3BjKTsKLSAgICAgICAgCisKIC8qCiAgICAgICAgIEdyb3VwUHJpbmNpcGFsQ2FsbGJhY2sgZ3BjID0gbmV3IEdyb3VwUHJpbmNpcGFsQ2FsbGJhY2soZXhlY1N1YmplY3QsIG51bGwpOwogICAgICAgICBjYWxsYmFja3MuYWRkKGdwYyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YQppbmRleCA4MTgyZWY1Li4zZmNlNTQ0IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEKQEAgLTI0LDkgKzI0LDkgQEAKICAqIHNvIHRoYXQgdGhlIGFwcCBzZXJ2ZXIgY2FuIGluc3RhbnRpYXRlIGFuZCBjb25maWd1cmUKICAqIGl0IGF0IHRoZSBydW50aW1lLgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCi1wdWJsaWMgY2xhc3MgU2ltcGxlQWN0aXZhdGlvblNwZWMgCitwdWJsaWMgY2xhc3MgU2ltcGxlQWN0aXZhdGlvblNwZWMKICAgICBpbXBsZW1lbnRzIEFjdGl2YXRpb25TcGVjLCBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7CiAKICAgICBwcml2YXRlIFN0cmluZyBkZXN0aW5hdGlvbk5hbWU7CkBAIC00Myw3ICs0Myw3IEBACiAgICAgcHVibGljIFN0cmluZyBnZXREZXN0aW5hdGlvbk5hbWUgKCkgewogICAgICAgICByZXR1cm4gdGhpcy5kZXN0aW5hdGlvbk5hbWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0RGVzdGluYXRpb25OYW1lIChTdHJpbmcgbmFtZSkgewogICAgICAgICBkZWJ1Zygic2V0RGVzdGluYXRpb25OYW1lKCkgY2FsbGVkLi4uIG5hbWUgPSAiICsgbmFtZSk7CiAgICAgICAgIHRoaXMuZGVzdGluYXRpb25OYW1lID0gbmFtZTsKQEAgLTUyLDcgKzUyLDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldERlc3RpbmF0aW9uVHlwZSgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZGVzdGluYXRpb25UeXBlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldERlc3RpbmF0aW9uVHlwZSAoU3RyaW5nIHR5cGUpIHsKICAgICAgICAgZGVidWcoInNldERlc3RpbmF0aW9uVHlwZSAoKSBjYWxsZWQuLi4gdHlwZSA9ICIgKyB0eXBlKTsKICAgICAgICAgdGhpcy5kZXN0aW5hdGlvblR5cGU9IHR5cGU7CkBAIC02MSw3ICs2MSw3IEBACiAgICAgcHVibGljIFN0cmluZyBnZXRUZXN0UHJvcCgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMudGVzdFByb3A7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0VGVzdFByb3AgKFN0cmluZyB0ZXN0UHJvcCkgewogICAgICAgICBkZWJ1Zygic2V0VGVzdFByb3AgKCkgY2FsbGVkLi4uIHRlc3RQcm9wID0gIiArIHRlc3RQcm9wKTsKICAgICAgICAgdGhpcy50ZXN0UHJvcCA9IHRlc3RQcm9wOwpAQCAtNzAsNyArNzAsNyBAQAogICAgIHB1YmxpYyBJbnRlZ2VyIGdldFRlc3RJbnRlZ2VyUHJvcCgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMudGVzdEludGVnZXJQcm9wOwogICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFRlc3RJbnRlZ2VyUHJvcCAoSW50ZWdlciB0ZXN0UHJvcDEpIHsKICAgICAgICAgZGVidWcoInNldFRlc3RJbnRlZ2VyUHJvcCAoKSBjYWxsZWQuLi4gdGVzdEludGVnZXJQcm9wID0gIiArIHRlc3RQcm9wMSk7CiAgICAgICAgIHRoaXMudGVzdEludGVnZXJQcm9wID0gdGVzdFByb3AxOwpAQCAtOTQsNyArOTQsNyBAQAogCiAgICAgICB9CiAKLSAgIH0gCisgICB9CiAKICAgICBwcml2YXRlIHZvaWQgZGVidWcgKFN0cmluZyBtZXNzYWdlKQogICAgIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYXBwLXNjb3BlZC1yZXNvdXJjZXMtbXM0LWRlbW8vcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhCmluZGV4IGQ4MDBmNjEuLjdkYTBkNzMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQpAQCAtODYsNyArODYsNyBAQAogCiAgICAgICAgICAgICAgICAgaWYgKCFmYWN0b3J5LmlzRGVsaXZlcnlUcmFuc2FjdGVkKG9uTWVzc2FnZSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy9NZXNzYWdlRW5kcG9pbnQgZXAgPSBmYWN0b3J5LmNyZWF0ZUVuZHBvaW50KG51bGwpOwotICAgICAgICAgICAgICAgICAgICAvL0RlbGl2ZXJ5V29yayBkID0gbmV3IERlbGl2ZXJ5V29yaygiTk9fVFgiLCBlcCk7IAorICAgICAgICAgICAgICAgICAgICAvL0RlbGl2ZXJ5V29yayBkID0gbmV3IERlbGl2ZXJ5V29yaygiTk9fVFgiLCBlcCk7CiAgICAgICAgICAgICAgICAgICAgIC8vd20uZG9Xb3JrKGQsIDAsIG51bGwsIG51bGwpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9hcHAtc2NvcGVkLXJlc291cmNlcy1tczQtZGVtby9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEKaW5kZXggMThhOTcwZC4uYjJhOTA2YyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2FwcC1zY29wZWQtcmVzb3VyY2VzLW1zNC1kZW1vL3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEKQEAgLTM1LDggKzM1LDggQEAKICAgICBwdWJsaWMgaW50IGJyYW5jaFF1YWxpZmllcjsKICAgICBwdWJsaWMgaW50IGdsb2JhbFR4SUQ7CiAKLSAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYR1RSSURTSVpFPSA2NDsgCi0gICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEJRVUFMU0laRT0gNjQ7IAorICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhHVFJJRFNJWkU9IDY0OworICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhCUVVBTFNJWkU9IDY0OwogCiAgICAgcHVibGljIFhJRCgpIHsKICAgICAgICAgaW50IGZvbyA9IElEKys7CkBAIC01NCwxMCArNTQsMTAgQEAKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgICAgICAgICAgICAgICAgIC8vIEl0IGNhbid0IGJlIGVxdWFsCiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgb3RoZXIgPSAoWElEKW87ICAgICAgICAgICAgICAgICAgIC8vIFRoZSBvdGhlciBYSUQsIG5vdyBwcm9wZXJseSBjYXN0Ci0gICAgICAgIAotICAgICAgICBpZiAodGhpcy5mb3JtYXRJRCA9PSBvdGhlci5mb3JtYXRJRCAKKworICAgICAgICBpZiAodGhpcy5mb3JtYXRJRCA9PSBvdGhlci5mb3JtYXRJRAogICAgICAgICAgICAgICAgICYmIHRoaXMuYnJhbmNoUXVhbGlmaWVyID09IG90aGVyLmJyYW5jaFF1YWxpZmllcgogICAgICAgICAgICAgICAgICYmIHRoaXMuZ2xvYmFsVHhJRCA9PSBvdGhlci5nbG9iYWxUeElEKSB7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTk3LDcgKzk3LDcgQEAKICAgICAgICAgICAgICAgICAiZm9ybWF0SUQoIiAgICAgKyBmb3JtYXRJRCAgICAgKyAiKSwgIiArCiAgICAgICAgICAgICAgICAgImJyYW5jaFF1YWxpZmllciAoIiArIGJyYW5jaFF1YWxpZmllciArICIpLCAiICsKICAgICAgICAgICAgICAgICAiZ2xvYmFsVHhJRCgiICsgZ2xvYmFsVHhJRCArICIpfSIpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gczsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9hcHAvTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvYXBwL01FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sCmluZGV4IDk1NTRiMzcuLjIwNjg4NTUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9hcHAvTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL2FwcC9NRVRBLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbApAQCAtODUsMTEgKzg1LDExIEBACiAgICAgPHByb3BlcnR5IG5hbWU9ImludFZhbHVlMSIgdmFsdWU9IjQwIi8+CiAgIDwvYWRtaW4tb2JqZWN0LXJlc291cmNlPgogCi08Y3VzdG9tLXJlc291cmNlIHJlcy10eXBlPSJqYXZhLmxhbmcuU3RyaW5nIiBqbmRpLW5hbWU9ImphdmE6YXBwL2N1c3RvbS9wcmltaXRpdmUtcmVzb3VyY2UiIAorPGN1c3RvbS1yZXNvdXJjZSByZXMtdHlwZT0iamF2YS5sYW5nLlN0cmluZyIgam5kaS1uYW1lPSJqYXZhOmFwcC9jdXN0b20vcHJpbWl0aXZlLXJlc291cmNlIgogICAgICBmYWN0b3J5LWNsYXNzPSJvcmcuZ2xhc3NmaXNoLnJlc291cmNlcy5jdXN0b20uZmFjdG9yeS5QcmltaXRpdmVzQW5kU3RyaW5nRmFjdG9yeSI+CiAgICAgICA8cHJvcGVydHkgbmFtZT0idmFsdWUiIHZhbHVlPSJURVNUIiAvPgogICAgIDwvY3VzdG9tLXJlc291cmNlPgogPGpkYmMtcmVzb3VyY2UgcG9vbC1uYW1lPSJqYXZhOmFwcC9zciIgam5kaS1uYW1lPSJqYXZhOmFwcC9qZGJjL3NyIiAgLz4KIDxqZGJjLXJlc291cmNlIHBvb2wtbmFtZT0iamF2YTphcHAvY29ubmVjdG9yLWJlYW4tdmFsaWRhdGlvbi1wb29sIiBqbmRpLW5hbWU9ImphdmE6YXBwL2pkYmMvY29ubmVjdG9yLWJlYW4tdmFsaWRhdGlvbi1yZXNvdXJjZSIgIC8+CiAKLTwvcmVzb3VyY2VzPiAKKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvYXBwL3NyYy9NRVRBLUlORi9lamItamFyLnhtbAppbmRleCBjOTRhMzY1Li5mNDYwOGJmIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvYXBwL3NyYy9NRVRBLUlORi9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvYXBwL3NyYy9NRVRBLUlORi9lamItamFyLnhtbApAQCAtOTEsOCArOTEsOCBAQAogICAgICAgICA8cmVzLXNoYXJpbmctc2NvcGU+U2hhcmVhYmxlPC9yZXMtc2hhcmluZy1zY29wZT4KICAgICAgIDwvcmVzb3VyY2UtcmVmPgogICAgICAgPHJlc291cmNlLWVudi1yZWY+Ci0JPHJlc291cmNlLWVudi1yZWYtbmFtZT5laXMvdGVzdEFkbWluPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+Ci0JPHJlc291cmNlLWVudi1yZWYtdHlwZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvcmVzb3VyY2UtZW52LXJlZi10eXBlPgorICAgIDxyZXNvdXJjZS1lbnYtcmVmLW5hbWU+ZWlzL3Rlc3RBZG1pbjwvcmVzb3VyY2UtZW52LXJlZi1uYW1lPgorICAgIDxyZXNvdXJjZS1lbnYtcmVmLXR5cGU+Y29ubmVjdG9yLk15QWRtaW5PYmplY3Q8L3Jlc291cmNlLWVudi1yZWYtdHlwZT4KICAgICAgIDwvcmVzb3VyY2UtZW52LXJlZj4KICAgICAgICA8cmVzb3VyY2UtZW52LXJlZj4KICAgICAgICAgPHJlc291cmNlLWVudi1yZWYtbmFtZT5qYXZhOmNvbXAvZW52L1ZhbGlkYXRvcjwvcmVzb3VyY2UtZW52LXJlZi1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCmluZGV4IDBmNTYzMjQuLmViZTk2NDkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9hcHAvc3JjL01FVEEtSU5GL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvYXBwL3NyYy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwKQEAgLTg4LDEzICs4OCwxMyBAQAogICAgICAgPC9yZXNvdXJjZS1yZWY+CiAgICAgICA8cmVzb3VyY2UtZW52LXJlZj4KICAgICAgICAgPHJlc291cmNlLWVudi1yZWYtbmFtZT5laXMvdGVzdEFkbWluPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+Ci0JPGpuZGktbmFtZT5qYXZhOmFwcC9laXMvdGVzdEFkbWluPC9qbmRpLW5hbWU+CisgICAgPGpuZGktbmFtZT5qYXZhOmFwcC9laXMvdGVzdEFkbWluPC9qbmRpLW5hbWU+CiAgICAgICA8L3Jlc291cmNlLWVudi1yZWY+CiAgIDxyZXNvdXJjZS1lbnYtcmVmPgogICAgIDxyZXNvdXJjZS1lbnYtcmVmLW5hbWU+amF2YTpjb21wL2Vudi9WYWxpZGF0b3I8L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KICAgICA8cmVzb3VyY2UtZW52LXJlZi10eXBlPmpha2FydGEudmFsaWRhdGlvbi5WYWxpZGF0b3I8L3Jlc291cmNlLWVudi1yZWYtdHlwZT4KICAgPC9yZXNvdXJjZS1lbnYtcmVmPgotICAKKwogICA8cmVzb3VyY2UtZW52LXJlZj4KICAgICA8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmphdmE6Y29tcC9lbnYvVmFsaWRhdG9yRmFjdG9yeTwvcmVzb3VyY2UtZW52LXJlZi1uYW1lPgogICAgIDxyZXNvdXJjZS1lbnYtcmVmLXR5cGU+amFrYXJ0YS52YWxpZGF0aW9uLlZhbGlkYXRvckZhY3Rvcnk8L3Jlc291cmNlLWVudi1yZWYtdHlwZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9hcHAvc3JjL2JlYW5zL01lc3NhZ2VDaGVja2VyRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvYXBwL3NyYy9iZWFucy9NZXNzYWdlQ2hlY2tlckVKQi5qYXZhCmluZGV4IDRhNDZlM2MuLjI1YjNhZTggMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9hcHAvc3JjL2JlYW5zL01lc3NhZ2VDaGVja2VyRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL2FwcC9zcmMvYmVhbnMvTWVzc2FnZUNoZWNrZXJFSkIuamF2YQpAQCAtODYsNyArODYsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgCisgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkKICAgICAgICAgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYmVhbiBjcmVhdGVkIik7CiAgICAgICAgIGhlbGRDb24gPSBudWxsOwpAQCAtMTI5LDExICsxMjksMTEgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHN5bmNocm9uaXplZCAoQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpKSB7CiAgICAgICAgICAgICAgICAgLy9UZWxsIHRoZSByZXNvdXJjZSBhZGFwdGVyIHRoZSBjbGllbnQgaXMgcmVhZHkgdG8gcnVuCi0gICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLm5vdGlmeUFsbCgpOyAKLSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkubm90aWZ5QWxsKCk7CisKICAgICAgICAgICAgICAgICBkZWJ1ZygiTk9USUZJRUQuLi4gU1RBUlQgV0FJVElORyIpOwogICAgICAgICAgICAgICAgIC8vV2FpdCB1bnRpbCBiZWluZyB0b2xkIHRvIHJlYWQgZnJvbSB0aGUgZGF0YWJhc2UKLSAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkud2FpdCgpOyAKKyAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkud2FpdCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwpAQCAtMTQxLDIyICsxNDEsMjIgQEAKICAgICB9CiAKICAgICBwdWJsaWMgaW50IGdldE1lc3NhZ2VDb3VudCgpIHsKLQl0cnkgeworICAgIHRyeSB7CiAgICAgICAgICAgICBDb25uZWN0aW9uIGNvbiA9IGdldEZyZXNoQ29ubmVjdGlvbigpOwogICAgICAgICAgICAgaW50IGNvdW50MSA9IGdldENvdW50KGNvbik7CiAgICAgICAgICAgICBjb24uY2xvc2UoKTsKLSAgICAgICAgICAgIAotCSAgICAvKgorCisgICAgICAgIC8qCiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQoQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpKSB7CiAgICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLm5vdGlmeSgpOwogICAgICAgICAgICAgfQotCSAgICAqLwotICAgICAgICAgICAgICAgIAorICAgICAgICAqLworCiAgICAgICAgICAgICByZXR1cm4gY291bnQxOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLm91dCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwotCX0KKyAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSBpbnQgZ2V0Q291bnQoQ29ubmVjdGlvbiBjb24pIHRocm93cyBTUUxFeGNlcHRpb24gewpAQCAtMTgyLDggKzE4Miw4IEBACiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICB1c2VyID0gKFN0cmluZykgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3VzZXIiKTsKICAgICAgICAgICAgIHBhc3N3b3JkID0gKFN0cmluZykgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3Bhc3N3b3JkIik7Ci0JICAgIENvbnRyb2xzID0gKE15QWRtaW5PYmplY3QpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9laXMvdGVzdEFkbWluIik7Ci0JICAgIENvbnRyb2xzLmluaXRpYWxpemUoKTsKKyAgICAgICAgQ29udHJvbHMgPSAoTXlBZG1pbk9iamVjdCkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2Vpcy90ZXN0QWRtaW4iKTsKKyAgICAgICAgQ29udHJvbHMuaW5pdGlhbGl6ZSgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CkBAIC0xOTMsMTIgKzE5MywxMiBAQAogICAgIHByaXZhdGUgYm9vbGVhbiBpc0NvbnN0cmFpbnRWaW9sYXRpb25FeGNlcHRpb24oVGhyb3dhYmxlIHQsIFN0cmluZyBqbmRpTmFtZSl7CiAgICAgICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKICAgICAgICAgICAgIGlmKHQgIT0gbnVsbCl7Ci0gICAgICAgICAgICAJaWYodCBpbnN0YW5jZW9mIGpha2FydGEudmFsaWRhdGlvbi5Db25zdHJhaW50VmlvbGF0aW9uRXhjZXB0aW9uKXsKKyAgICAgICAgICAgICAgICBpZih0IGluc3RhbmNlb2YgamFrYXJ0YS52YWxpZGF0aW9uLkNvbnN0cmFpbnRWaW9sYXRpb25FeGNlcHRpb24pewogICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGb3VuZCBDb25zdHJhaW50IFZpb2xhdGlvbiBmb3IgcmVzb3VyY2UgWyIram5kaU5hbWUrIl0iICsgdC5nZXRNZXNzYWdlKCkpOwotICAgICAgICAgICAgICAgICAJcmVzdWx0ID0gdHJ1ZTsKLSAgICAgICAgICAgIAl9ZWxzZXsKLSAgICAgICAgICAgICAgICAgCXJlc3VsdCA9IGlzQ29uc3RyYWludFZpb2xhdGlvbkV4Y2VwdGlvbih0LmdldENhdXNlKCksIGpuZGlOYW1lKTsKLSAgICAgICAgICAgIAl9CisgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlOworICAgICAgICAgICAgICAgIH1lbHNleworICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gaXNDb25zdHJhaW50VmlvbGF0aW9uRXhjZXB0aW9uKHQuZ2V0Q2F1c2UoKSwgam5kaU5hbWUpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtMjMyLDcgKzIzMiw3IEBACiAgICAgICAgICAgICBkZWJ1ZygiTG9va2VkIHVwIERhdGFzb3VyY2VcbiIpOwogICAgICAgICAgICAgZGVidWcoIkdldCBKREJDIGNvbm5lY3Rpb24sIGF1dG8gc2lnbiBvbiIpOwogICAgICAgICAgICAgY29uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmIChjb24gIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIHJldHVybiBjb247CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMjQzLDcgKzI0Myw3IEBACiAgICAgICAgICAgICB0aHJvdyBleDE7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgY2xvc2VDb25uZWN0aW9uKENvbm5lY3Rpb24gY29uKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgICAgaWYgKGhlbGRDb24gIT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL2FwcC9zcmMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZGFkMjA3Yi4uMGIzOGMxOSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL2FwcC9zcmMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvYXBwL3NyYy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIGVqYi1qYXIueG1sPU1FVEEtSU5GL2VqYi1qYXIueG1sCiBzdW4tZWpiLWphci54bWw9TUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvYXBwL3NyYy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvYXBwL3NyYy9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggOTVhMTMzOC4uYmYzMjgxMCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL2FwcC9zcmMvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9hcHAvc3JjL2NsaWVudC9DbGllbnQuamF2YQpAQCAtNzEsNyArNzEsNyBAQAogICAgICAgICAgICAgLy8gICAgU3lzdGVtLm91dC5wcmludGxuKCJ0ZXN0IGNvdW50IDogIiArIHRlc3RDb3VudCk7CiAgICAgICAgICAgICAgICAgdGVzdENvdW50Kys7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidGVzdCBjb3VudCA6ICIgKyB0ZXN0Q291bnQpOwogICAgICAgICAgICAgcnVuQWRtaW5PYmplY3RUZXN0KHJlcywgdGVzdENvdW50KyssICJqYXZhOmFwcC9laXMvdGVzdEFkbWluIiwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0ZXN0IGNvdW50IDogIiArIHRlc3RDb3VudCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL2FwcC9zcmMvbWRiL015TWVzc2FnZUJlYW4uamF2YQppbmRleCBhNDhhYWIxLi5iMzczMDUwIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9hcHAvc3JjL21kYi9NeU1lc3NhZ2VCZWFuLmphdmEKQEAgLTI5LDQxICsyOSw0MSBAQAogCiAvKioKICAqLwotcHVibGljIGNsYXNzIE15TWVzc2FnZUJlYW4gaW1wbGVtZW50cyBNZXNzYWdlRHJpdmVuQmVhbiwgCitwdWJsaWMgY2xhc3MgTXlNZXNzYWdlQmVhbiBpbXBsZW1lbnRzIE1lc3NhZ2VEcml2ZW5CZWFuLAogICAgICAgICBNeU1lc3NhZ2VMaXN0ZW5lciB7CiAKICAgICBwcml2YXRlIHRyYW5zaWVudCBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGMgPSBudWxsOwogICAgIHByaXZhdGUgQ29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0b3IsIHdoaWNoIGlzIHB1YmxpYyBhbmQgdGFrZXMgbm8gYXJndW1lbnRzLgogICAgICAqLwogICAgIHB1YmxpYyBNeU1lc3NhZ2VCZWFuKCkge30KIAogICAgIC8qKgotICAgICAqIHNldE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgCi0gICAgICogbm90IGZpbmFsIG9yIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgCisgICAgICogc2V0TWVzc2FnZURyaXZlbkNvbnRleHQgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dAorICAgICAqIG5vdCBmaW5hbCBvciBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kCiAgICAgICogd2l0aCBvbmUgYXJndW1lbnQgb2YgdHlwZSBqYWthcnRhLmVqYi5NZXNzYWdlRHJpdmVuQ29udGV4dC4KICAgICAgKgogICAgICAqIEBwYXJhbSBtZGMgICAgdGhlIGNvbnRleHQgdG8gc2V0CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TWVzc2FnZURyaXZlbkNvbnRleHQoTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjKSB7Ci0JdGhpcy5tZGMgPSBtZGM7CisgICAgdGhpcy5tZGMgPSBtZGM7CiAgICAgfQogCiAgICAgLyoqCi0gICAgICogZWpiQ3JlYXRlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yIAotICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBubyAKKyAgICAgKiBlamJDcmVhdGUgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IKKyAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggbm8KICAgICAgKiBhcmd1bWVudHMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgeyB9CiAKICAgICAvKioKLSAgICAgKiBvbk1lc3NhZ2UgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IgCisgICAgICogb25NZXNzYWdlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yCiAgICAgICogc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCB3aXRoIG9uZSBhcmd1bWVudAogICAgICAqIG9mIHR5cGUgamFrYXJ0YS5qbXMuTWVzc2FnZS4KICAgICAgKgotICAgICAqIENhc3RzIHRoZSBpbmNvbWluZyBNZXNzYWdlIHRvIGEgVGV4dE1lc3NhZ2UgYW5kIGRpc3BsYXlzIAorICAgICAqIENhc3RzIHRoZSBpbmNvbWluZyBNZXNzYWdlIHRvIGEgVGV4dE1lc3NhZ2UgYW5kIGRpc3BsYXlzCiAgICAgICogdGhlIHRleHQuCiAgICAgICoKICAgICAgKiBAcGFyYW0gaW5NZXNzYWdlICAgIHRoZSBpbmNvbWluZyBtZXNzYWdlCkBAIC03NCw3ICs3NCw3IEBACiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGlmIChpbk1lc3NhZ2UuZW5kc1dpdGgoIldSSVRFIikpIHsKLSAgICAgICAgICAgICAgICBkb0RiU3R1ZmYoIldSSVRFIiwgCisgICAgICAgICAgICAgICAgZG9EYlN0dWZmKCJXUklURSIsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbk1lc3NhZ2Uuc3Vic3RyaW5nKDAsIGluTWVzc2FnZS5sYXN0SW5kZXhPZigiOiIpKSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGluTWVzc2FnZS5lbmRzV2l0aCgiREVMRVRFIikpIHsKICAgICAgICAgICAgICAgICBkb0RiU3R1ZmYoIkRFTEVURSIsCkBAIC05MCwxMCArOTAsMTAgQEAKICAgICAgICAgfQogCiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogZWpiUmVtb3ZlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yIAotICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBubyAKKyAgICAgKiBlamJSZW1vdmUgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IKKyAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggbm8KICAgICAgKiBhcmd1bWVudHMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkge30KQEAgLTEwMyw2MiArMTAzLDYyIEBACiAKICAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24gPSBudWxsOwogICAgICAgICBTdHJpbmcgaWQgICAgPSBtZXNzYWdlLnN1YnN0cmluZygwLCBtZXNzYWdlLmluZGV4T2YoIjoiKSk7Ci0gICAgICAgIFN0cmluZyBib2R5ICA9IG1lc3NhZ2Uuc3Vic3RyaW5nKG1lc3NhZ2UuaW5kZXhPZigiOiIpKzEpOyAKKyAgICAgICAgU3RyaW5nIGJvZHkgID0gbWVzc2FnZS5zdWJzdHJpbmcobWVzc2FnZS5pbmRleE9mKCI6IikrMSk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKCJSRUFEIi5lcXVhbHMob3ApKSB7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZWJ1ZygiUmVhZGluZyByb3cgZnJvbSBkYXRhYmFzZS4uLiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAKICAgICAgICAgICAgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L015REIiKTsKICAgICAgICAgICAgICAgICAgIGRlYnVnKCJMb29rZWQgdXAgRGF0YXNvdXJjZVxuIik7CiAgICAgICAgICAgICAgICAgICBkZWJ1ZygiR2V0IEpEQkMgY29ubmVjdGlvbiwgYXV0byBzaWduIG9uIik7CiAgICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgU3RhdGVtZW50IHN0bXQgPSBkYkNvbm5lY3Rpb24uY3JlYXRlU3RhdGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICBTdHJpbmcgcXVlcnkgPSAKKyAgICAgICAgICAgICAgICAgIFN0cmluZyBxdWVyeSA9CiAgICAgICAgICAgICAgICAgICAiU0VMRUNUIGlkIGZyb20gbWVzc2FnZXMgd2hlcmUgaWQgPSAnUVEnIjsKICAgICAgICAgICAgICAgICAgIFJlc3VsdFNldCByZXN1bHRzID0gc3RtdC5leGVjdXRlUXVlcnkocXVlcnkpOwogICAgICAgICAgICAgICAgICAgcmVzdWx0cy5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlFRIGhhcyBiYWxhbmNlICIgKyAKKyAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUVEgaGFzIGJhbGFuY2UgIiArCiAgICAgICAgICAgICAgICAgICByZXN1bHRzLmdldEludCgiYmFsYW5jZSIpICsgIiBkb2xsYXJzIik7CiAgICAgICAgICAgICAgICAgICByZXN1bHRzLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgICBzdG10LmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZWFkIG9uZSBhY2NvdW50XG4iKTsKIAogICAgICAgICAgICAgfSBlbHNlIGlmICgiV1JJVEUiLmVxdWFscyhvcCkpIHsKIAogICAgICAgICAgICAgICAgIGRlYnVnKCJJbnNlcnRpbmcgb25lIG1lc3NhZ2UgaW4gdGhlIGRhdGFiYXNlXG4iKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvTXlEQiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKICAgICAgICAgICAgICAgICAvL2RlYnVnKCJHZXQgSkRCQyBjb25uZWN0aW9uLCBhdXRvIHNpZ24gb24iKTsKICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBjcmVhdGVSb3coaWQsIGJvZHksIGRiQ29ubmVjdGlvbik7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGVkIG9uZSBtZXNzYWdlXG4iKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgfSBlbHNlIGlmICgiREVMRVRFIi5lcXVhbHMob3ApKSB7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZWJ1ZygiRGVsZXRpbmcgb25lIG1lc3NhZ2UgZnJvbSB0aGUgZGF0YWJhc2VcbiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvTXlEQiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKICAgICAgICAgICAgICAgICAvL2RlYnVnKCJHZXQgSkRCQyBjb25uZWN0aW9uLCBhdXRvIHNpZ24gb24iKTsKICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZWxldGVSb3coaWQsIGRiQ29ubmVjdGlvbik7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZWxldGVkIG9uZSBtZXNzYWdlXG4iKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoIkRFTEVURV9BTEwiLmVxdWFscyhvcCkpIHsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGRlYnVnKCJEZWxldGluZyBhbGwgbWVzc2FnZXMgZnJvbSB0aGUgZGF0YWJhc2VcbiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvTXlEQiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKQEAgLTE2OSw3ICsxNjksNyBAQAogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvL3Vuc3VwcG9ydGVkIG9wCiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICB9ZmluYWxseXsKICAgICAgICAgICAgIHRyeXsKICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24uY2xvc2UoKTsKQEAgLTE3OCw5ICsxNzgsOSBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIAotICAgIHByaXZhdGUgdm9pZCBjcmVhdGVSb3coU3RyaW5nIGlkLCBTdHJpbmcgYm9keSwgCi0gICAgICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikgCisKKyAgICBwcml2YXRlIHZvaWQgY3JlYXRlUm93KFN0cmluZyBpZCwgU3RyaW5nIGJvZHksCisgICAgICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgLy8gQ3JlYXRlIHJvdyBmb3IgdGhpcyBtZXNzYWdlCkBAIC0xOTYsOSArMTk2LDkgQEAKICAgICAgICAgc3RtdC5jbG9zZSgpOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBkZWxldGVSb3coU3RyaW5nIGlkLCBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikgCisgICAgcHJpdmF0ZSB2b2lkIGRlbGV0ZVJvdyhTdHJpbmcgaWQsIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgLy8gRGVsZXRlIHJvdyBmb3IgdGhpcyBtZXNzYWdlCiAgICAgICAgIGRlYnVnKCJEZWxldGVSb3cgd2l0aCBJRCA9ICIgKyBpZCk7CiAgICAgICAgIFN0YXRlbWVudCBzdG10ID0gZGJDb25uZWN0aW9uLmNyZWF0ZVN0YXRlbWVudCgpOwpAQCAtMjExLDkgKzIxMSw5IEBACiAgICAgICAgIHN0bXQuY2xvc2UoKTsKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgZGVsZXRlQWxsKGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKSAKKyAgICBwcml2YXRlIHZvaWQgZGVsZXRlQWxsKGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgLy8gRGVsZXRlIHJvdyBmb3IgdGhpcyBtZXNzYWdlCiAgICAgICAgIFN0YXRlbWVudCBzdG10ID0gZGJDb25uZWN0aW9uLmNyZWF0ZVN0YXRlbWVudCgpOwogICAgICAgICBTdHJpbmcgcXVlcnkgPSAiREVMRVRFIEZST00gbWVzc2FnZXMiOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvYnVpbGQucHJvcGVydGllcwppbmRleCA1YWEzOGIzLi4xMmRlNDZiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvc2ltcGxlLWNvbm5lY3Rvci1iZWFuLXZhbGlkYXRpb24vc2VydmxldCIvPgogPHByb3BlcnR5IG5hbWU9Imh0dHA6aG9zdCIgdmFsdWU9ImxvY2FsaG9zdCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9idWlsZC54bWwKaW5kZXggYTQ3NDMyZS4uNDUzOWVhMSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvYnVpbGQueG1sCkBAIC05MywxNCArOTMsMTQgQEAKIDwhLS0KICAgICA8dGFyZ2V0IG5hbWU9InJ1bnRlc3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW53ZWJjbGllbnQtY29tbW9uIj4KLQkgICAgPHBhcmFtIG5hbWU9InRlc3RzdWl0ZS5pZCIgdmFsdWU9ImNvbm5lY3RvcjEuNSAoZWFyIGJhc2VkKSIvPgotCSAgICA8L2FudGNhbGw+CisgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJjb25uZWN0b3IxLjUgKGVhciBiYXNlZCkiLz4KKyAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogLS0+CiAKICAgPHRhcmdldCBuYW1lPSJydW50ZXN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0iYXBwbmFtZSIgdmFsdWU9InNpbXBsZS1jb25uZWN0b3ItYmVhbi12YWxpZGF0aW9uIiAvPgorICAgIDxwYXJhbSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0ic2ltcGxlLWNvbm5lY3Rvci1iZWFuLXZhbGlkYXRpb24iIC8+CiAgICAgICAgIDxwYXJhbSAgbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSJTdGFuZGFsb25lLSIvPgogICAgIDwvYW50Y2FsbD4KICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvcmEvTUVUQS1JTkYvcmEueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL3JhL01FVEEtSU5GL3JhLnhtbAppbmRleCA4MjYzNmQ1Li41Yzc0NjMwIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvcmEvTUVUQS1JTkYvcmEueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9yYS9NRVRBLUlORi9yYS54bWwKQEAgLTQyLDcgKzQyLDcgQEAKICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgPGluYm91bmQtcmVzb3VyY2VhZGFwdGVyPgotICAgICAgICAgICAgPG1lc3NhZ2VhZGFwdGVyPiAgICAgICAgICAKKyAgICAgICAgICAgIDxtZXNzYWdlYWRhcHRlcj4KICAgICAgICAgICAgICAgICA8bWVzc2FnZWxpc3RlbmVyPgogICAgICAgICAgICAgICAgICAgICA8bWVzc2FnZWxpc3RlbmVyLXR5cGU+CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIKQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIDwvYWN0aXZhdGlvbnNwZWMtY2xhc3M+CiAgICAgICAgICAgICAgICAgICAgIDwvYWN0aXZhdGlvbnNwZWM+CiAgICAgICAgICAgICAgICAgPC9tZXNzYWdlbGlzdGVuZXI+Ci0gICAgICAgICAgICA8L21lc3NhZ2VhZGFwdGVyPiAgICAgICAgICAKKyAgICAgICAgICAgIDwvbWVzc2FnZWFkYXB0ZXI+CiAgICAgICAgIDwvaW5ib3VuZC1yZXNvdXJjZWFkYXB0ZXI+CiAgICAgICAgIDxhZG1pbm9iamVjdD4KICAgICAgICAgICA8YWRtaW5vYmplY3QtaW50ZXJmYWNlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC9hZG1pbm9iamVjdC1pbnRlcmZhY2U+CkBAIC03MCw3ICs3MCw3IEBACiAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CiAgICAgICAgIDwvYWRtaW5vYmplY3Q+CiAKLQk8YWRtaW5vYmplY3Q+CisgICAgPGFkbWlub2JqZWN0PgogICAgICAgICAgIDxhZG1pbm9iamVjdC1pbnRlcmZhY2U+Y29ubmVjdG9yLk15QWRtaW5PYmplY3QxPC9hZG1pbm9iamVjdC1pbnRlcmZhY2U+CiAgICAgICAgICAgPGFkbWlub2JqZWN0LWNsYXNzPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0MTwvYWRtaW5vYmplY3QtY2xhc3M+CiAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9yYS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvcmEvYnVpbGQueG1sCmluZGV4IGExYmJlOTcuLmMwNTMwZDEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9yYS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL3JhL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDxhbnQgZGlyPSJzcmMiIGluaGVyaXRBbGw9ImZhbHNlIiB0YXJnZXQ9ImFsbCIvPgogCiAgICAgPGphciBqYXJmaWxlPSJnZW5lcmljLXJhLnJhciIgYmFzZWRpcj0iLiIKLSAgICAgICAgIGluY2x1ZGVzPSJnZW5lcmljLXJhLmphciwgTUVUQS1JTkYvKi54bWwsIE1FVEEtSU5GL3NlcnZpY2VzLyoiIC8+IAorICAgICAgICAgaW5jbHVkZXM9ImdlbmVyaWMtcmEuamFyLCBNRVRBLUlORi8qLnhtbCwgTUVUQS1JTkYvc2VydmljZXMvKiIgLz4KICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9yYS9zcmMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL3JhL3NyYy9idWlsZC54bWwKaW5kZXggZmY4YmNjMi4uODQ5NmY2MCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL3JhL3NyYy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL3JhL3NyYy9idWlsZC54bWwKQEAgLTMwLDggKzMwLDggQEAKIAogICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iaW5pdC1jb21tb24iID4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0iYnVpbGQuY2xhc3Nlcy5kaXIiIHZhbHVlPSJjbGFzc2VzIiAvPgotCTxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjb25uZWN0b3IiIC8+CisgICAgPHBhcmFtIG5hbWU9ImJ1aWxkLmNsYXNzZXMuZGlyIiB2YWx1ZT0iY2xhc3NlcyIgLz4KKyAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY29ubmVjdG9yIiAvPgogICAgIDwvYW50Y2FsbD4KICAgICA8amFyIGphcmZpbGU9Ii4uL2dlbmVyaWMtcmEuamFyIiBiYXNlZGlyPSJjbGFzc2VzIgogICAgICAgICAgaW5jbHVkZXM9ImNvbm5lY3Rvci8qLmNsYXNzIiAvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEKaW5kZXggNTU1MzNkNC4uZjU5YjJiMyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgQ29udHJvbHMgewogICAgIHB1YmxpYyBzdGF0aWMgT2JqZWN0IHJlYWR5TG9jayA9IG5ldyBPYmplY3QoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEKaW5kZXggNjU4MjMzZS4uZDczYzg2MiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBEZWxpdmVyeVdvcmsgaW1wbGVtZW50cyBXb3JrIHsKIApAQCAtMzYsNyArMzYsNyBAQAogICAgIHByaXZhdGUgU3RyaW5nIG9wOwogICAgIHByaXZhdGUgYm9vbGVhbiBrZWVwQ291bnQ7CiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50ZXIgPSAwOwotICAgIAorCiAgICAgcHVibGljIERlbGl2ZXJ5V29yayhNZXNzYWdlRW5kcG9pbnQgZXAsIGludCBudW1PZk1lc3NhZ2VzLCBTdHJpbmcgb3ApIHsKICAgICAgICAgdGhpcy5lcCA9IGVwOwogICAgICAgICB0aGlzLm51bSA9IG51bU9mTWVzc2FnZXM7CkBAIC00NCw3ICs0NCw3IEBACiAgICAgICAgIHRoaXMua2VlcENvdW50ID0gZmFsc2U7CiAgICAgfQogCi0gICAgcHVibGljIERlbGl2ZXJ5V29yayhNZXNzYWdlRW5kcG9pbnQgZXAsIGludCBudW1PZk1lc3NhZ2VzLCAKKyAgICBwdWJsaWMgRGVsaXZlcnlXb3JrKE1lc3NhZ2VFbmRwb2ludCBlcCwgaW50IG51bU9mTWVzc2FnZXMsCiAgICAgICAgICAgICBTdHJpbmcgb3AsIGJvb2xlYW4ga2VlcENvdW50KSB7CiAgICAgICAgIHRoaXMuZXAgPSBlcDsKICAgICAgICAgdGhpcy5udW0gPSBudW1PZk1lc3NhZ2VzOwpAQCAtNTUsNyArNTUsNyBAQAogICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKIAogICAgICAgICBkZWJ1ZygiRU5URVIuLi4iKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIC8vTWV0aG9kIG9uTWVzc2FnZSA9IGdldE9uTWVzc2FnZU1ldGhvZCgpOwogICAgICAgICAgICAgLy9lcC5iZWZvcmVEZWxpdmVyeShvbk1lc3NhZ2UpOwpAQCAtNzgsMTEgKzc4LDExIEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vZXAuYWZ0ZXJEZWxpdmVyeSgpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiTEVBVkUuLi4iKTsKICAgICB9CiAKQEAgLTkzLDE0ICs5MywxNCBAQAogICAgIH0KIAogICAgIHByaXZhdGUgTWV0aG9kIGdldE9uTWVzc2FnZU1ldGhvZCgpIHsKLSAgICAgICAgCisKICAgICAgICAgTWV0aG9kIG9uTWVzc2FnZU1ldGhvZCA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDbGFzcyBtc2dMaXN0ZW5lckNsYXNzID0gY29ubmVjdG9yLk15TWVzc2FnZUxpc3RlbmVyLmNsYXNzOwogICAgICAgICAgICAgQ2xhc3NbXSBwYXJhbVR5cGVzID0geyBqYXZhLmxhbmcuU3RyaW5nLmNsYXNzIH07Ci0gICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPSAKKyAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9CiAgICAgICAgICAgICAgICAgbXNnTGlzdGVuZXJDbGFzcy5nZXRNZXRob2QoIm9uTWVzc2FnZSIsIHBhcmFtVHlwZXMpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEKaW5kZXggMTAwY2FjZS4uZmE5M2Y2MyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhCkBAIC0zNiw3ICszNiw3IEBACiAgICAgICAgICAgICAgIGZsYWdUb1N0cmluZyhmbGFncykpOwogICAgIH0KIAotICAgIAorCiAgICAgcHVibGljIHZvaWQgZm9yZ2V0KFhpZCB4aWQpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5mb3JnZXQ6ICIgKyB4aWRUb1N0cmluZyh4aWQpKTsKICAgICB9CkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5wcmVwYXJlOiAiICsgeGlkVG9TdHJpbmcoeGlkKSk7CiAgICAgICAgIHJldHVybiBYQVJlc291cmNlLlhBX09LOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBYaWRbXSByZWNvdmVyKGludCBmbGFnKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2UucmVjb3ZlcjogIiArIGZsYWdUb1N0cmluZyhmbGFnKSk7CiAgICAgICAgIHJldHVybiBudWxsOwpAQCAtNjYsNyArNjYsNyBAQAogICAgIHB1YmxpYyBib29sZWFuIHNldFRyYW5zYWN0aW9uVGltZW91dChpbnQgc2Vjb25kcykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHN0YXJ0KFhpZCB4aWQsIGludCBmbGFncykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLnN0YXJ0OiAiICsgeGlkVG9TdHJpbmcoeGlkKSArICIsIiArCiAgICAgICAgICAgICAgICAgZmxhZ1RvU3RyaW5nKGZsYWdzKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb25uZWN0b3IvTWVzc2FnZXMuamF2YQppbmRleCBiNWIwZjAyLi40YzljMDEyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29ubmVjdG9yL01lc3NhZ2VzLmphdmEKQEAgLTIxLDcgKzIxLDcgQEAKIC8qKgogICogY29sbGVjdGlvbiBvZiBtZXNzYWdlcy4KICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIE1lc3NhZ2VzIHsKIApAQCAtNTQsNyArNTQsNyBAQAogICAgICAgIFN0cmluZyBjb21tYW5kICA9IGFyZ3NbMF07CiAgICAgICAgU3RyaW5nIGRlc3ROYW1lID0gYXJnc1sxXTsKICAgICAgICBTdHJpbmcgbWVzc2FnZSAgPSBhcmdzWzJdOwotICAgCisKICAgICAgICBpZiAoISJhZGQiLmVxdWFscyhjb21tYW5kKSkgewogICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEKaW5kZXggYjc4NWQyMi4uYmFjYzY4ZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YQpAQCAtNDcsNyArNDcsNyBAQAogICAgIHB1YmxpYyBpbnQgZ2V0SW50VmFsdWUoKXsKICAgICAgIHJldHVybiBpbnRWYWx1ZTsKICAgICB9Ci0gCisKICAgICBAQ29uZmlnUHJvcGVydHkoZGVmYXVsdFZhbHVlPSIxIiwgdHlwZT1qYXZhLmxhbmcuSW50ZWdlci5jbGFzcykKICAgICBwdWJsaWMgdm9pZCBzZXRJbnRWYWx1ZShpbnQgaW50VmFsdWUpewogICAgICAgdGhpcy5pbnRWYWx1ZSA9IGludFZhbHVlOwpAQCAtNzEsMTMgKzcxLDEzIEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgaW5pdGlhbGl6ZSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXppbmcgdGhlIENvbnRyb2xzIHRvIGZhbHNlOiIrcmVzZXRDb250cm9sKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXppbmcgdGhlIENvbnRyb2xzIHRvIGZhbHNlOiIrcmVzZXRDb250cm9sKTsKICAgICAgICAgaWYgKHJlc2V0Q29udHJvbC5lcXVhbHMoIkJFR0lOTklORyIpKSB7CiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKENvbnRyb2xzLnJlYWR5TG9jayl7CiAgICAgICAgICAgICAgICAgQ29udHJvbHMuZG9uZT1mYWxzZTsKICAgICAgICAgICAgIH0KLQkgICBTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXplZCB0aGUgQ29udHJvbHMgdG8gZmFsc2UiKTsKLQl9CisgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6ZWQgdGhlIENvbnRyb2xzIHRvIGZhbHNlIik7CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIGRvbmUoKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0MS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdDEuamF2YQppbmRleCA5MmNhZTgxLi5hMzJmN2Y5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0MS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QxLmphdmEKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICBwdWJsaWMgaW50IGdldEludFZhbHVlKCl7CiAgICAgICByZXR1cm4gaW50VmFsdWU7CiAgICAgfQotIAorCiAgICAgQENvbmZpZ1Byb3BlcnR5KHR5cGU9amF2YS5sYW5nLkludGVnZXIuY2xhc3MpCiAgICAgcHVibGljIHZvaWQgc2V0SW50VmFsdWUoaW50IGludFZhbHVlKXsKICAgICAgIHRoaXMuaW50VmFsdWUgPSBpbnRWYWx1ZTsKQEAgLTg4LDEzICs4OCwxMyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGluaXRpYWxpemUoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6aW5nIHRoZSBDb250cm9scyB0byBmYWxzZToiK3Jlc2V0Q29udHJvbCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6aW5nIHRoZSBDb250cm9scyB0byBmYWxzZToiK3Jlc2V0Q29udHJvbCk7CiAgICAgICAgIGlmIChyZXNldENvbnRyb2wuZXF1YWxzKCJCRUdJTk5JTkciKSkgewogICAgICAgICAgICAgc3luY2hyb25pemVkIChDb250cm9scy5yZWFkeUxvY2spewogICAgICAgICAgICAgICAgIENvbnRyb2xzLmRvbmU9ZmFsc2U7CiAgICAgICAgICAgICB9Ci0JICAgU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6ZWQgdGhlIENvbnRyb2xzIHRvIGZhbHNlIik7Ci0JfQorICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW015QWRtaW5PYmplY3RdIEluaXRpYWxpemVkIHRoZSBDb250cm9scyB0byBmYWxzZSIpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiBkb25lKCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEKaW5kZXggOGYyZGYyZi4uNDYwNDcxNyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhCkBAIC0yNSw5ICsyNSw5IEBACiAgKiBzbyB0aGF0IHRoZSBhcHAgc2VydmVyIGNhbiBpbnN0YW50aWF0ZSBhbmQgY29uZmlndXJlCiAgKiBpdCBhdCB0aGUgcnVudGltZS4KICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwotcHVibGljIGNsYXNzIFNpbXBsZUFjdGl2YXRpb25TcGVjIAorcHVibGljIGNsYXNzIFNpbXBsZUFjdGl2YXRpb25TcGVjCiAgICAgaW1wbGVtZW50cyBBY3RpdmF0aW9uU3BlYywgamF2YS5pby5TZXJpYWxpemFibGUgewogCiAgICAgcHJpdmF0ZSBTdHJpbmcgZGVzdGluYXRpb25OYW1lOwpAQCAtNDQsNyArNDQsNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzdGluYXRpb25OYW1lICgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZGVzdGluYXRpb25OYW1lOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldERlc3RpbmF0aW9uTmFtZSAoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgZGVidWcoInNldERlc3RpbmF0aW9uTmFtZSgpIGNhbGxlZC4uLiBuYW1lID0gIiArIG5hbWUpOwogICAgICAgICB0aGlzLmRlc3RpbmF0aW9uTmFtZSA9IG5hbWU7CkBAIC01MywxNyArNTMsMTcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldERlc3RpbmF0aW9uVHlwZSgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZGVzdGluYXRpb25UeXBlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldERlc3RpbmF0aW9uVHlwZSAoU3RyaW5nIHR5cGUpIHsKICAgICAgICAgZGVidWcoInNldERlc3RpbmF0aW9uVHlwZSAoKSBjYWxsZWQuLi4gdHlwZSA9ICIgKyB0eXBlKTsKICAgICAgICAgdGhpcy5kZXN0aW5hdGlvblR5cGU9IHR5cGU7CiAgICAgfQogCi0gICAgQE5vdE51bGwgCisgICAgQE5vdE51bGwKICAgICBwdWJsaWMgU3RyaW5nIGdldFRlc3RQcm9wKCkgewogICAgICAgICByZXR1cm4gdGhpcy50ZXN0UHJvcDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRUZXN0UHJvcCAoU3RyaW5nIHRlc3RQcm9wKSB7CiAgICAgICAgIGRlYnVnKCJzZXRUZXN0UHJvcCAoKSBjYWxsZWQuLi4gdGVzdFByb3AgPSAiICsgdGVzdFByb3ApOwogICAgICAgICB0aGlzLnRlc3RQcm9wID0gdGVzdFByb3A7CkBAIC03NCw3ICs3NCw3IEBACiAgICAgcHVibGljIEludGVnZXIgZ2V0VGVzdEludGVnZXJQcm9wKCkgewogICAgICAgICByZXR1cm4gdGhpcy50ZXN0SW50ZWdlclByb3A7CiAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0VGVzdEludGVnZXJQcm9wIChJbnRlZ2VyIHRlc3RQcm9wMSkgewogICAgICAgICBkZWJ1Zygic2V0VGVzdEludGVnZXJQcm9wICgpIGNhbGxlZC4uLiB0ZXN0SW50ZWdlclByb3AgPSAiICsgdGVzdFByb3AxKTsKICAgICAgICAgdGhpcy50ZXN0SW50ZWdlclByb3AgPSB0ZXN0UHJvcDE7CkBAIC0xMDAsNyArMTAwLDcgQEAKIAogICAgICAgfQogCi0gICB9IAorICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGRlYnVnIChTdHJpbmcgbWVzc2FnZSkKICAgICB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEKaW5kZXggMDNmNTgyOC4uMjZhMmRhZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YQpAQCAtNDUsMTQgKzQ1LDE0IEBACiAvKioKICAqIFRoaXMgaXMgYSBzYW1wbGUgcmVzb3VyY2UgYWRhcHRlcgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCi1wdWJsaWMgY2xhc3MgU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbCAKK3B1YmxpYyBjbGFzcyBTaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsCiBpbXBsZW1lbnRzIFJlc291cmNlQWRhcHRlciwgamF2YS5pby5TZXJpYWxpemFibGUgewogCiAgICAgcHJpdmF0ZSBCb290c3RyYXBDb250ZXh0IGN0eDsKICAgICBwcml2YXRlIFdvcmtNYW5hZ2VyIHdtOwotICAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgdGVzdE5hbWU7CiAKICAgICBwcml2YXRlIGJvb2xlYW4gZGVidWcgPSB0cnVlOwpAQCAtNjQsNyArNjQsNyBAQAogCiAgICAgcHVibGljIHZvaWQKICAgICBzdGFydChCb290c3RyYXBDb250ZXh0IGN0eCkgdGhyb3dzIFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uewotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiMDAxLiBTaW1wbGUgUkEgc3RhcnQuLi4iKTsKIAogICAgICAgICB0aGlzLmN0eCA9IGN0eDsKQEAgLTc1LDEyICs3NSwxMiBAQAogCiAgICAgICAgIC8vdGVzdGluZyBjcmVhdCB0aW1lcgogICAgICAgICBUaW1lciB0aW1lciA9IG51bGw7Ci0JICB0cnl7Ci0JICAgICAgdGltZXIgPSBjdHguY3JlYXRlVGltZXIoKTsKLQkgIH0gY2F0Y2goVW5hdmFpbGFibGVFeGNlcHRpb24gdWUpIHsKLQkgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIik7Ci0JICAgICAgdGhyb3cgbmV3IFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uKCJFcnJvciBmb3JtIGJvb3RzdHJhcCIpOwotCSAgfQorICAgICAgdHJ5eworICAgICAgICAgIHRpbWVyID0gY3R4LmNyZWF0ZVRpbWVyKCk7CisgICAgICB9IGNhdGNoKFVuYXZhaWxhYmxlRXhjZXB0aW9uIHVlKSB7CisgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFcnJvciIpOworICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbigiRXJyb3IgZm9ybSBib290c3RyYXAiKTsKKyAgICAgIH0KICAgICAgICAgZGVidWcoIjAwNC4gU2ltcGxlIFJBIHN0YXJ0Li4uIik7CiAKICAgICAgICAgZGVidWcoIjAwNS4gU2ltcGxlIFJBIHN0YXJ0Li4uIik7CkBAIC0xMjAsMTMgKzEyMCwxMyBAQAogCiAgICAgcHVibGljIHZvaWQKICAgICBlbmRwb2ludERlYWN0aXZhdGlvbiAoCi0gICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGVuZHBvaW50RmFjdG9yeSwgCisgICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGVuZHBvaW50RmFjdG9yeSwKICAgICAgICAgICAgIEFjdGl2YXRpb25TcGVjIHNwZWMpIHsKICAgICAgICAgZGVidWcgKCJlbmRwb2ludERlYWN0aXZhdGlvbiBjYWxsZWQuLi4iKTsKLSAgICAgICAgCisKICAgICAgICAgKChXb3JrRGlzcGF0Y2hlcikgd29yaykuc3RvcCgpOwogICAgIH0KLSAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGVzdE5hbWUoKSB7CiAgICAgICAgIHJldHVybiB0ZXN0TmFtZTsKICAgICB9CkBAIC0xMzYsOCArMTM2LDggQEAKICAgICBwdWJsaWMgSW50ZWdlciBnZXRJbnRWYWx1ZSgpewogICAgICAgcmV0dXJuIGludFZhbHVlOwogICAgIH0KLSAgIAotICAgIEBDb25maWdQcm9wZXJ0eSh0eXBlPUludGVnZXIuY2xhc3MsIGRlZmF1bHRWYWx1ZT0iMTAiKSAKKworICAgIEBDb25maWdQcm9wZXJ0eSh0eXBlPUludGVnZXIuY2xhc3MsIGRlZmF1bHRWYWx1ZT0iMTAiKQogICAgIHB1YmxpYyB2b2lkIHNldEludFZhbHVlKEludGVnZXIgaW50VmFsdWUpewogICAgICAgdGhpcy5pbnRWYWx1ZSA9IGludFZhbHVlOwogICAgIH0KQEAgLTE1Myw3ICsxNTMsNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbF0gPT0+ICIgKyBtZXNzYWdlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgWEFSZXNvdXJjZVtdIGdldFhBUmVzb3VyY2VzKEFjdGl2YXRpb25TcGVjW10gc3BlY3MpIAorICAgIHB1YmxpYyBYQVJlc291cmNlW10gZ2V0WEFSZXNvdXJjZXMoQWN0aXZhdGlvblNwZWNbXSBzcGVjcykKICAgICAgICAgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEKaW5kZXggNmUwNWI1My4uZTc3NmVhYSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhCkBAIC0zMyw3ICszMyw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgV29ya0Rpc3BhdGNoZXIgaW1wbGVtZW50cyBXb3JrIHsKIApAQCAtNDQsMTEgKzQ0LDExIEBACiAgICAgcHJvdGVjdGVkIEFjdGl2YXRpb25TcGVjIHNwZWM7CiAgICAgcHJvdGVjdGVkIFdvcmtNYW5hZ2VyIHdtOwogICAgIHByb3RlY3RlZCBYQVRlcm1pbmF0b3IgeGE7Ci0gICAgCisKICAgICBwdWJsaWMgV29ya0Rpc3BhdGNoZXIoCiAgICAgICAgICAgICBTdHJpbmcgaWQsCiAgICAgICAgICAgICBCb290c3RyYXBDb250ZXh0IGN0eCwKLSAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZmFjdG9yeSwgCisgICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGZhY3RvcnksCiAgICAgICAgICAgICBBY3RpdmF0aW9uU3BlYyBzcGVjKSB7CiAgICAgICAgIHRoaXMuaWQgICAgICA9IGlkOwogICAgICAgICB0aGlzLmN0eCAgICAgPSBjdHg7CkBAIC02MSw3ICs2MSw3IEBACiAgICAgcHVibGljIHZvaWQgcnVuKCkgewogCiAgICAgICAgIGRlYnVnKCJFTlRFUi4uLiIpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgc3luY2hyb25pemVkIChDb250cm9scy5yZWFkeUxvY2spIHsKICAgICAgICAgICAgICAgICBkZWJ1ZygiV0FJVC4uLiIpOwpAQCAtMTExLDE1ICsxMTEsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgLy9kZWxldGUgYWxsLgogICAgICAgICAgICAgICAgICAgICBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgdyA9IG5ldyBEZWxpdmVyeVdvcmsoZXAsIDEsICJERUxFVEVfQUxMIik7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJET05FIERFTEVURSBBTEwgRlJPTSBEQiIpOwogICAgICAgICAgICAgICAgICAgICBDb250cm9scy5leHBlY3RlZFJlc3VsdHMgPSAwOwogICAgICAgICAgICAgICAgICAgICBub3RpZnlBbmRXYWl0KCk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTsKICAgICAgICAgICAgICAgICB9CiAKQEAgLTE1NywxNCArMTU3LDE0IEBACiAgICAgfQogCiAgICAgcHVibGljIE1ldGhvZCBnZXRPbk1lc3NhZ2VNZXRob2QoKSB7Ci0gICAgICAgIAorCiAgICAgICAgIE1ldGhvZCBvbk1lc3NhZ2VNZXRob2QgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ2xhc3MgbXNnTGlzdGVuZXJDbGFzcyA9IGNvbm5lY3Rvci5NeU1lc3NhZ2VMaXN0ZW5lci5jbGFzczsKICAgICAgICAgICAgIENsYXNzW10gcGFyYW1UeXBlcyA9IHsgamF2YS5sYW5nLlN0cmluZy5jbGFzcyB9OwotICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0gCisgICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPQogICAgICAgICAgICAgICAgIG1zZ0xpc3RlbmVyQ2xhc3MuZ2V0TWV0aG9kKCJvbk1lc3NhZ2UiLCBwYXJhbVR5cGVzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KQEAgLTE4NywxMyArMTg3LDEzIEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAvL1NsZWVwIGZvciA1IHNlY29uZHMKICAgICAgICAgICAgIC8vVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCg1KjEwMDApOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHN5bmNocm9uaXplZChDb250cm9scy5yZWFkeUxvY2spIHsKICAgICAgICAgICAgICAgICAvL05vdGlmeSB0aGUgY2xpZW50IHRvIGNoZWNrIHRoZSByZXN1bHRzCi0gICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLm5vdGlmeUFsbCgpOyAKKyAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2subm90aWZ5QWxsKCk7CiAKICAgICAgICAgICAgICAgICAvL1dhaXQgdW50aWwgcmVzdWx0cyBhcmUgdmVyaWZpZWQgYnkgdGhlIGNsaWVudAotICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay53YWl0KCk7IAorICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay53YWl0KCk7CiAKICAgICAgICAgICAgICAgICBpZiAoc3RvcCkgewogICAgICAgICAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlLXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhCmluZGV4IDc3ODM3ZjcuLjFkNTAyNGIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUtcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhCkBAIC0zNSw4ICszNSw4IEBACiAgICAgcHVibGljIGludCBicmFuY2hRdWFsaWZpZXI7CiAgICAgcHVibGljIGludCBnbG9iYWxUeElEOwogCi0gICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEdUUklEU0laRT0gNjQ7IAotICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhCUVVBTFNJWkU9IDY0OyAKKyAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYR1RSSURTSVpFPSA2NDsKKyAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYQlFVQUxTSVpFPSA2NDsKIAogICAgIHB1YmxpYyBYSUQoKSB7CiAgICAgICAgIGludCBmb28gPSBJRCsrOwpAQCAtNTQsMTAgKzU0LDEwIEBACiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAgICAgICAgICAgICAgICAvLyBJdCBjYW4ndCBiZSBlcXVhbAogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIG90aGVyID0gKFhJRClvOyAgICAgICAgICAgICAgICAgICAvLyBUaGUgb3RoZXIgWElELCBub3cgcHJvcGVybHkgY2FzdAotICAgICAgICAKLSAgICAgICAgaWYgKHRoaXMuZm9ybWF0SUQgPT0gb3RoZXIuZm9ybWF0SUQgCisKKyAgICAgICAgaWYgKHRoaXMuZm9ybWF0SUQgPT0gb3RoZXIuZm9ybWF0SUQKICAgICAgICAgICAgICAgICAmJiB0aGlzLmJyYW5jaFF1YWxpZmllciA9PSBvdGhlci5icmFuY2hRdWFsaWZpZXIKICAgICAgICAgICAgICAgICAmJiB0aGlzLmdsb2JhbFR4SUQgPT0gb3RoZXIuZ2xvYmFsVHhJRCkgewogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC05Nyw3ICs5Nyw3IEBACiAgICAgICAgICAgICAgICAgImZvcm1hdElEKCIgICAgICsgZm9ybWF0SUQgICAgICsgIiksICIgKwogICAgICAgICAgICAgICAgICJicmFuY2hRdWFsaWZpZXIgKCIgKyBicmFuY2hRdWFsaWZpZXIgKyAiKSwgIiArCiAgICAgICAgICAgICAgICAgImdsb2JhbFR4SUQoIiArIGdsb2JhbFR4SUQgKyAiKX0iKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIHM7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlL2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlL2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwKaW5kZXggYzk0YTM2NS4uZjQ2MDhiZiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9hcHAvc3JjL01FVEEtSU5GL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvYXBwL3NyYy9NRVRBLUlORi9lamItamFyLnhtbApAQCAtOTEsOCArOTEsOCBAQAogICAgICAgICA8cmVzLXNoYXJpbmctc2NvcGU+U2hhcmVhYmxlPC9yZXMtc2hhcmluZy1zY29wZT4KICAgICAgIDwvcmVzb3VyY2UtcmVmPgogICAgICAgPHJlc291cmNlLWVudi1yZWY+Ci0JPHJlc291cmNlLWVudi1yZWYtbmFtZT5laXMvdGVzdEFkbWluPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+Ci0JPHJlc291cmNlLWVudi1yZWYtdHlwZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvcmVzb3VyY2UtZW52LXJlZi10eXBlPgorICAgIDxyZXNvdXJjZS1lbnYtcmVmLW5hbWU+ZWlzL3Rlc3RBZG1pbjwvcmVzb3VyY2UtZW52LXJlZi1uYW1lPgorICAgIDxyZXNvdXJjZS1lbnYtcmVmLXR5cGU+Y29ubmVjdG9yLk15QWRtaW5PYmplY3Q8L3Jlc291cmNlLWVudi1yZWYtdHlwZT4KICAgICAgIDwvcmVzb3VyY2UtZW52LXJlZj4KICAgICAgICA8cmVzb3VyY2UtZW52LXJlZj4KICAgICAgICAgPHJlc291cmNlLWVudi1yZWYtbmFtZT5qYXZhOmNvbXAvZW52L1ZhbGlkYXRvcjwvcmVzb3VyY2UtZW52LXJlZi1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9hcHAvc3JjL01FVEEtSU5GL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvYXBwL3NyYy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwKaW5kZXggYTI2YzlkYi4uYzNhOTAxYSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9hcHAvc3JjL01FVEEtSU5GL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlL2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCkBAIC04OCwxMyArODgsMTMgQEAKICAgICAgIDwvcmVzb3VyY2UtcmVmPgogICAgICAgPHJlc291cmNlLWVudi1yZWY+CiAgICAgICAgIDxyZXNvdXJjZS1lbnYtcmVmLW5hbWU+ZWlzL3Rlc3RBZG1pbjwvcmVzb3VyY2UtZW52LXJlZi1uYW1lPgotCTxqbmRpLW5hbWU+ZWlzL3Rlc3RBZG1pbjwvam5kaS1uYW1lPgorICAgIDxqbmRpLW5hbWU+ZWlzL3Rlc3RBZG1pbjwvam5kaS1uYW1lPgogICAgICAgPC9yZXNvdXJjZS1lbnYtcmVmPgogICA8cmVzb3VyY2UtZW52LXJlZj4KICAgICA8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmphdmE6Y29tcC9lbnYvVmFsaWRhdG9yPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+CiAgICAgPHJlc291cmNlLWVudi1yZWYtdHlwZT5qYWthcnRhLnZhbGlkYXRpb24uVmFsaWRhdG9yPC9yZXNvdXJjZS1lbnYtcmVmLXR5cGU+CiAgIDwvcmVzb3VyY2UtZW52LXJlZj4KLSAgCisKICAgPHJlc291cmNlLWVudi1yZWY+CiAgICAgPHJlc291cmNlLWVudi1yZWYtbmFtZT5qYXZhOmNvbXAvZW52L1ZhbGlkYXRvckZhY3Rvcnk8L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KICAgICA8cmVzb3VyY2UtZW52LXJlZi10eXBlPmpha2FydGEudmFsaWRhdGlvbi5WYWxpZGF0b3JGYWN0b3J5PC9yZXNvdXJjZS1lbnYtcmVmLXR5cGU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlL2FwcC9zcmMvYmVhbnMvTWVzc2FnZUNoZWNrZXJFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvYXBwL3NyYy9iZWFucy9NZXNzYWdlQ2hlY2tlckVKQi5qYXZhCmluZGV4IDUyMzFkOWIuLmM4MDZmMDIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvYXBwL3NyYy9iZWFucy9NZXNzYWdlQ2hlY2tlckVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvYXBwL3NyYy9iZWFucy9NZXNzYWdlQ2hlY2tlckVKQi5qYXZhCkBAIC03MSw3ICs3MSw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSAKKyAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKQogICAgICAgICB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJiZWFuIGNyZWF0ZWQiKTsKICAgICAgICAgaGVsZENvbiA9IG51bGw7CkBAIC0xMTMsMTEgKzExMywxMSBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgc3luY2hyb25pemVkIChDb250cm9scy5nZXRMb2NrT2JqZWN0KCkpIHsKICAgICAgICAgICAgICAgICAvL1RlbGwgdGhlIHJlc291cmNlIGFkYXB0ZXIgdGhlIGNsaWVudCBpcyByZWFkeSB0byBydW4KLSAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkubm90aWZ5QWxsKCk7IAotICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIENvbnRyb2xzLmdldExvY2tPYmplY3QoKS5ub3RpZnlBbGwoKTsKKwogICAgICAgICAgICAgICAgIGRlYnVnKCJOT1RJRklFRC4uLiBTVEFSVCBXQUlUSU5HIik7CiAgICAgICAgICAgICAgICAgLy9XYWl0IHVudGlsIGJlaW5nIHRvbGQgdG8gcmVhZCBmcm9tIHRoZSBkYXRhYmFzZQotICAgICAgICAgICAgICAgIENvbnRyb2xzLmdldExvY2tPYmplY3QoKS53YWl0KCk7IAorICAgICAgICAgICAgICAgIENvbnRyb2xzLmdldExvY2tPYmplY3QoKS53YWl0KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CkBAIC0xMjUsMjIgKzEyNSwyMiBAQAogICAgIH0KIAogICAgIHB1YmxpYyBpbnQgZ2V0TWVzc2FnZUNvdW50KCkgewotCXRyeSB7CisgICAgdHJ5IHsKICAgICAgICAgICAgIENvbm5lY3Rpb24gY29uID0gZ2V0RnJlc2hDb25uZWN0aW9uKCk7CiAgICAgICAgICAgICBpbnQgY291bnQxID0gZ2V0Q291bnQoY29uKTsKICAgICAgICAgICAgIGNvbi5jbG9zZSgpOwotICAgICAgICAgICAgCi0JICAgIC8qCisKKyAgICAgICAgLyoKICAgICAgICAgICAgIHN5bmNocm9uaXplZChDb250cm9scy5nZXRMb2NrT2JqZWN0KCkpIHsKICAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkubm90aWZ5KCk7CiAgICAgICAgICAgICB9Ci0JICAgICovCi0gICAgICAgICAgICAgICAgCisgICAgICAgICovCisKICAgICAgICAgICAgIHJldHVybiBjb3VudDE7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZShTeXN0ZW0ub3V0KTsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7Ci0JfQorICAgIH0KICAgICB9CiAKICAgICBwcml2YXRlIGludCBnZXRDb3VudChDb25uZWN0aW9uIGNvbikgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CkBAIC0xNjYsOCArMTY2LDggQEAKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIHVzZXIgPSAoU3RyaW5nKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvdXNlciIpOwogICAgICAgICAgICAgcGFzc3dvcmQgPSAoU3RyaW5nKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvcGFzc3dvcmQiKTsKLQkgICAgQ29udHJvbHMgPSAoTXlBZG1pbk9iamVjdCkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2Vpcy90ZXN0QWRtaW4iKTsKLQkgICAgQ29udHJvbHMuaW5pdGlhbGl6ZSgpOworICAgICAgICBDb250cm9scyA9IChNeUFkbWluT2JqZWN0KSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWlzL3Rlc3RBZG1pbiIpOworICAgICAgICBDb250cm9scy5pbml0aWFsaXplKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KQEAgLTE3NywxMiArMTc3LDEyIEBACiAgICAgcHJpdmF0ZSBib29sZWFuIGlzQ29uc3RyYWludFZpb2xhdGlvbkV4Y2VwdGlvbihUaHJvd2FibGUgdCwgU3RyaW5nIGpuZGlOYW1lKXsKICAgICAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwogICAgICAgICAgICAgaWYodCAhPSBudWxsKXsKLSAgICAgICAgICAgIAlpZih0IGluc3RhbmNlb2YgamFrYXJ0YS52YWxpZGF0aW9uLkNvbnN0cmFpbnRWaW9sYXRpb25FeGNlcHRpb24peworICAgICAgICAgICAgICAgIGlmKHQgaW5zdGFuY2VvZiBqYWthcnRhLnZhbGlkYXRpb24uQ29uc3RyYWludFZpb2xhdGlvbkV4Y2VwdGlvbil7CiAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZvdW5kIENvbnN0cmFpbnQgVmlvbGF0aW9uIGZvciByZXNvdXJjZSBbIitqbmRpTmFtZSsiXSIgKyB0LmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAgICAgICAgIAlyZXN1bHQgPSB0cnVlOwotICAgICAgICAgICAgCX1lbHNlewotICAgICAgICAgICAgICAgICAJcmVzdWx0ID0gaXNDb25zdHJhaW50VmlvbGF0aW9uRXhjZXB0aW9uKHQuZ2V0Q2F1c2UoKSwgam5kaU5hbWUpOwotICAgICAgICAgICAgCX0KKyAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CisgICAgICAgICAgICAgICAgfWVsc2V7CisgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBpc0NvbnN0cmFpbnRWaW9sYXRpb25FeGNlcHRpb24odC5nZXRDYXVzZSgpLCBqbmRpTmFtZSk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC0yMTYsNyArMjE2LDcgQEAKICAgICAgICAgICAgIGRlYnVnKCJMb29rZWQgdXAgRGF0YXNvdXJjZVxuIik7CiAgICAgICAgICAgICBkZWJ1ZygiR2V0IEpEQkMgY29ubmVjdGlvbiwgYXV0byBzaWduIG9uIik7CiAgICAgICAgICAgICBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKGNvbiAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbjsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0yMjcsNyArMjI3LDcgQEAKICAgICAgICAgICAgIHRocm93IGV4MTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBjbG9zZUNvbm5lY3Rpb24oQ29ubmVjdGlvbiBjb24pIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgICBpZiAoaGVsZENvbiAhPSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlL2FwcC9zcmMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvYXBwL3NyYy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGRhZDIwN2IuLjBiMzhjMTkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvYXBwL3NyYy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvYXBwL3NyYy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIGVqYi1qYXIueG1sPU1FVEEtSU5GL2VqYi1qYXIueG1sCiBzdW4tZWpiLWphci54bWw9TUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlL2FwcC9zcmMvbWRiL015TWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhCmluZGV4IGE0OGFhYjEuLmIzNzMwNTAgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhCkBAIC0yOSw0MSArMjksNDEgQEAKIAogLyoqCiAgKi8KLXB1YmxpYyBjbGFzcyBNeU1lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZURyaXZlbkJlYW4sIAorcHVibGljIGNsYXNzIE15TWVzc2FnZUJlYW4gaW1wbGVtZW50cyBNZXNzYWdlRHJpdmVuQmVhbiwKICAgICAgICAgTXlNZXNzYWdlTGlzdGVuZXIgewogCiAgICAgcHJpdmF0ZSB0cmFuc2llbnQgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjID0gbnVsbDsKICAgICBwcml2YXRlIENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdG9yLCB3aGljaCBpcyBwdWJsaWMgYW5kIHRha2VzIG5vIGFyZ3VtZW50cy4KICAgICAgKi8KICAgICBwdWJsaWMgTXlNZXNzYWdlQmVhbigpIHt9CiAKICAgICAvKioKLSAgICAgKiBzZXRNZXNzYWdlRHJpdmVuQ29udGV4dCBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IAotICAgICAqIG5vdCBmaW5hbCBvciBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIAorICAgICAqIHNldE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQKKyAgICAgKiBub3QgZmluYWwgb3Igc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZAogICAgICAqIHdpdGggb25lIGFyZ3VtZW50IG9mIHR5cGUgamFrYXJ0YS5lamIuTWVzc2FnZURyaXZlbkNvbnRleHQuCiAgICAgICoKICAgICAgKiBAcGFyYW0gbWRjICAgIHRoZSBjb250ZXh0IHRvIHNldAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldE1lc3NhZ2VEcml2ZW5Db250ZXh0KE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYykgewotCXRoaXMubWRjID0gbWRjOworICAgIHRoaXMubWRjID0gbWRjOwogICAgIH0KIAogICAgIC8qKgotICAgICAqIGVqYkNyZWF0ZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvciAKLSAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggbm8gCisgICAgICogZWpiQ3JlYXRlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yCisgICAgICogc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCB3aXRoIG5vCiAgICAgICogYXJndW1lbnRzLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHsgfQogCiAgICAgLyoqCi0gICAgICogb25NZXNzYWdlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yIAorICAgICAqIG9uTWVzc2FnZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvcgogICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBvbmUgYXJndW1lbnQKICAgICAgKiBvZiB0eXBlIGpha2FydGEuam1zLk1lc3NhZ2UuCiAgICAgICoKLSAgICAgKiBDYXN0cyB0aGUgaW5jb21pbmcgTWVzc2FnZSB0byBhIFRleHRNZXNzYWdlIGFuZCBkaXNwbGF5cyAKKyAgICAgKiBDYXN0cyB0aGUgaW5jb21pbmcgTWVzc2FnZSB0byBhIFRleHRNZXNzYWdlIGFuZCBkaXNwbGF5cwogICAgICAqIHRoZSB0ZXh0LgogICAgICAqCiAgICAgICogQHBhcmFtIGluTWVzc2FnZSAgICB0aGUgaW5jb21pbmcgbWVzc2FnZQpAQCAtNzQsNyArNzQsNyBAQAogCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpZiAoaW5NZXNzYWdlLmVuZHNXaXRoKCJXUklURSIpKSB7Ci0gICAgICAgICAgICAgICAgZG9EYlN0dWZmKCJXUklURSIsIAorICAgICAgICAgICAgICAgIGRvRGJTdHVmZigiV1JJVEUiLAogICAgICAgICAgICAgICAgICAgICAgICAgaW5NZXNzYWdlLnN1YnN0cmluZygwLCBpbk1lc3NhZ2UubGFzdEluZGV4T2YoIjoiKSkpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChpbk1lc3NhZ2UuZW5kc1dpdGgoIkRFTEVURSIpKSB7CiAgICAgICAgICAgICAgICAgZG9EYlN0dWZmKCJERUxFVEUiLApAQCAtOTAsMTAgKzkwLDEwIEBACiAgICAgICAgIH0KIAogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIGVqYlJlbW92ZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvciAKLSAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggbm8gCisgICAgICogZWpiUmVtb3ZlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yCisgICAgICogc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCB3aXRoIG5vCiAgICAgICogYXJndW1lbnRzLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHt9CkBAIC0xMDMsNjIgKzEwMyw2MiBAQAogCiAgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uID0gbnVsbDsKICAgICAgICAgU3RyaW5nIGlkICAgID0gbWVzc2FnZS5zdWJzdHJpbmcoMCwgbWVzc2FnZS5pbmRleE9mKCI6IikpOwotICAgICAgICBTdHJpbmcgYm9keSAgPSBtZXNzYWdlLnN1YnN0cmluZyhtZXNzYWdlLmluZGV4T2YoIjoiKSsxKTsgCisgICAgICAgIFN0cmluZyBib2R5ICA9IG1lc3NhZ2Uuc3Vic3RyaW5nKG1lc3NhZ2UuaW5kZXhPZigiOiIpKzEpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmICgiUkVBRCIuZXF1YWxzKG9wKSkgewotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgZGVidWcoIlJlYWRpbmcgcm93IGZyb20gZGF0YWJhc2UuLi4iKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIC8vIENyZWF0aW5nIGEgZGF0YWJhc2UgY29ubmVjdGlvbgogCiAgICAgICAgICAgICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9NeURCIik7CiAgICAgICAgICAgICAgICAgICBkZWJ1ZygiTG9va2VkIHVwIERhdGFzb3VyY2VcbiIpOwogICAgICAgICAgICAgICAgICAgZGVidWcoIkdldCBKREJDIGNvbm5lY3Rpb24sIGF1dG8gc2lnbiBvbiIpOwogICAgICAgICAgICAgICAgICAgZGJDb25uZWN0aW9uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgIFN0YXRlbWVudCBzdG10ID0gZGJDb25uZWN0aW9uLmNyZWF0ZVN0YXRlbWVudCgpOwotICAgICAgICAgICAgICAgICAgU3RyaW5nIHF1ZXJ5ID0gCisgICAgICAgICAgICAgICAgICBTdHJpbmcgcXVlcnkgPQogICAgICAgICAgICAgICAgICAgIlNFTEVDVCBpZCBmcm9tIG1lc3NhZ2VzIHdoZXJlIGlkID0gJ1FRJyI7CiAgICAgICAgICAgICAgICAgICBSZXN1bHRTZXQgcmVzdWx0cyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHF1ZXJ5KTsKICAgICAgICAgICAgICAgICAgIHJlc3VsdHMubmV4dCgpOwotICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJRUSBoYXMgYmFsYW5jZSAiICsgCisgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlFRIGhhcyBiYWxhbmNlICIgKwogICAgICAgICAgICAgICAgICAgcmVzdWx0cy5nZXRJbnQoImJhbGFuY2UiKSArICIgZG9sbGFycyIpOwogICAgICAgICAgICAgICAgICAgcmVzdWx0cy5jbG9zZSgpOwogICAgICAgICAgICAgICAgICAgc3RtdC5jbG9zZSgpOwotICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVhZCBvbmUgYWNjb3VudFxuIik7CiAKICAgICAgICAgICAgIH0gZWxzZSBpZiAoIldSSVRFIi5lcXVhbHMob3ApKSB7CiAKICAgICAgICAgICAgICAgICBkZWJ1ZygiSW5zZXJ0aW5nIG9uZSBtZXNzYWdlIGluIHRoZSBkYXRhYmFzZVxuIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIC8vIENyZWF0aW5nIGEgZGF0YWJhc2UgY29ubmVjdGlvbgogICAgICAgICAgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L015REIiKTsKICAgICAgICAgICAgICAgICAvL2RlYnVnKCJMb29rZWQgdXAgRGF0YXNvdXJjZVxuIik7CiAgICAgICAgICAgICAgICAgLy9kZWJ1ZygiR2V0IEpEQkMgY29ubmVjdGlvbiwgYXV0byBzaWduIG9uIik7CiAgICAgICAgICAgICAgICAgZGJDb25uZWN0aW9uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgY3JlYXRlUm93KGlkLCBib2R5LCBkYkNvbm5lY3Rpb24pOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRlZCBvbmUgbWVzc2FnZVxuIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIH0gZWxzZSBpZiAoIkRFTEVURSIuZXF1YWxzKG9wKSkgewotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgZGVidWcoIkRlbGV0aW5nIG9uZSBtZXNzYWdlIGZyb20gdGhlIGRhdGFiYXNlXG4iKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIC8vIENyZWF0aW5nIGEgZGF0YWJhc2UgY29ubmVjdGlvbgogICAgICAgICAgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L015REIiKTsKICAgICAgICAgICAgICAgICAvL2RlYnVnKCJMb29rZWQgdXAgRGF0YXNvdXJjZVxuIik7CiAgICAgICAgICAgICAgICAgLy9kZWJ1ZygiR2V0IEpEQkMgY29ubmVjdGlvbiwgYXV0byBzaWduIG9uIik7CiAgICAgICAgICAgICAgICAgZGJDb25uZWN0aW9uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgZGVsZXRlUm93KGlkLCBkYkNvbm5lY3Rpb24pOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGVsZXRlZCBvbmUgbWVzc2FnZVxuIik7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKCJERUxFVEVfQUxMIi5lcXVhbHMob3ApKSB7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZWJ1ZygiRGVsZXRpbmcgYWxsIG1lc3NhZ2VzIGZyb20gdGhlIGRhdGFiYXNlXG4iKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIC8vIENyZWF0aW5nIGEgZGF0YWJhc2UgY29ubmVjdGlvbgogICAgICAgICAgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L015REIiKTsKICAgICAgICAgICAgICAgICAvL2RlYnVnKCJMb29rZWQgdXAgRGF0YXNvdXJjZVxuIik7CkBAIC0xNjksNyArMTY5LDcgQEAKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy91bnN1cHBvcnRlZCBvcAogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgfWZpbmFsbHl7CiAgICAgICAgICAgICB0cnl7CiAgICAgICAgICAgICAgICAgZGJDb25uZWN0aW9uLmNsb3NlKCk7CkBAIC0xNzgsOSArMTc4LDkgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICBwcml2YXRlIHZvaWQgY3JlYXRlUm93KFN0cmluZyBpZCwgU3RyaW5nIGJvZHksIAotICAgICAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pIAorCisgICAgcHJpdmF0ZSB2b2lkIGNyZWF0ZVJvdyhTdHJpbmcgaWQsIFN0cmluZyBib2R5LAorICAgICAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogCiAgICAgICAgIC8vIENyZWF0ZSByb3cgZm9yIHRoaXMgbWVzc2FnZQpAQCAtMTk2LDkgKzE5Niw5IEBACiAgICAgICAgIHN0bXQuY2xvc2UoKTsKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgZGVsZXRlUm93KFN0cmluZyBpZCwgamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pIAorICAgIHByaXZhdGUgdm9pZCBkZWxldGVSb3coU3RyaW5nIGlkLCBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIERlbGV0ZSByb3cgZm9yIHRoaXMgbWVzc2FnZQogICAgICAgICBkZWJ1ZygiRGVsZXRlUm93IHdpdGggSUQgPSAiICsgaWQpOwogICAgICAgICBTdGF0ZW1lbnQgc3RtdCA9IGRiQ29ubmVjdGlvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKQEAgLTIxMSw5ICsyMTEsOSBAQAogICAgICAgICBzdG10LmNsb3NlKCk7CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIGRlbGV0ZUFsbChqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikgCisgICAgcHJpdmF0ZSB2b2lkIGRlbGV0ZUFsbChqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIERlbGV0ZSByb3cgZm9yIHRoaXMgbWVzc2FnZQogICAgICAgICBTdGF0ZW1lbnQgc3RtdCA9IGRiQ29ubmVjdGlvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKICAgICAgICAgU3RyaW5nIHF1ZXJ5ID0gIkRFTEVURSBGUk9NIG1lc3NhZ2VzIjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvYnVpbGQucHJvcGVydGllcwppbmRleCA1YWEzOGIzLi4xMmRlNDZiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii9zaW1wbGUtY29ubmVjdG9yLWJlYW4tdmFsaWRhdGlvbi9zZXJ2bGV0Ii8+CiA8cHJvcGVydHkgbmFtZT0iaHR0cDpob3N0IiB2YWx1ZT0ibG9jYWxob3N0Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvYnVpbGQueG1sCmluZGV4IGJjN2JkZmQuLmUxMWY0OTQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvYnVpbGQueG1sCkBAIC05MywxNCArOTMsMTQgQEAKIDwhLS0KICAgICA8dGFyZ2V0IG5hbWU9InJ1bnRlc3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW53ZWJjbGllbnQtY29tbW9uIj4KLQkgICAgPHBhcmFtIG5hbWU9InRlc3RzdWl0ZS5pZCIgdmFsdWU9ImNvbm5lY3RvcjEuNSAoZWFyIGJhc2VkKSIvPgotCSAgICA8L2FudGNhbGw+CisgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJjb25uZWN0b3IxLjUgKGVhciBiYXNlZCkiLz4KKyAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogLS0+CiAKICAgPHRhcmdldCBuYW1lPSJydW50ZXN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0iYXBwbmFtZSIgdmFsdWU9InNpbXBsZS1jb25uZWN0b3ItYmVhbi12YWxpZGF0aW9uIiAvPgorICAgIDxwYXJhbSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0ic2ltcGxlLWNvbm5lY3Rvci1iZWFuLXZhbGlkYXRpb24iIC8+CiAgICAgICAgIDxwYXJhbSAgbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSJTdGFuZGFsb25lLSIvPgogICAgIDwvYW50Y2FsbD4KICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlL3JhL01FVEEtSU5GL3JhLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvcmEvTUVUQS1JTkYvcmEueG1sCmluZGV4IDgyNjM2ZDUuLjVjNzQ2MzAgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvcmEvTUVUQS1JTkYvcmEueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvcmEvTUVUQS1JTkYvcmEueG1sCkBAIC00Miw3ICs0Miw3IEBACiAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CiAgICAgICAgIDxpbmJvdW5kLXJlc291cmNlYWRhcHRlcj4KLSAgICAgICAgICAgIDxtZXNzYWdlYWRhcHRlcj4gICAgICAgICAgCisgICAgICAgICAgICA8bWVzc2FnZWFkYXB0ZXI+CiAgICAgICAgICAgICAgICAgPG1lc3NhZ2VsaXN0ZW5lcj4KICAgICAgICAgICAgICAgICAgICAgPG1lc3NhZ2VsaXN0ZW5lci10eXBlPgogICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdG9yLk15TWVzc2FnZUxpc3RlbmVyCkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICA8L2FjdGl2YXRpb25zcGVjLWNsYXNzPgogICAgICAgICAgICAgICAgICAgICA8L2FjdGl2YXRpb25zcGVjPgogICAgICAgICAgICAgICAgIDwvbWVzc2FnZWxpc3RlbmVyPgotICAgICAgICAgICAgPC9tZXNzYWdlYWRhcHRlcj4gICAgICAgICAgCisgICAgICAgICAgICA8L21lc3NhZ2VhZGFwdGVyPgogICAgICAgICA8L2luYm91bmQtcmVzb3VyY2VhZGFwdGVyPgogICAgICAgICA8YWRtaW5vYmplY3Q+CiAgICAgICAgICAgPGFkbWlub2JqZWN0LWludGVyZmFjZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvYWRtaW5vYmplY3QtaW50ZXJmYWNlPgpAQCAtNzAsNyArNzAsNyBAQAogICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgogICAgICAgICA8L2FkbWlub2JqZWN0PgogCi0JPGFkbWlub2JqZWN0PgorICAgIDxhZG1pbm9iamVjdD4KICAgICAgICAgICA8YWRtaW5vYmplY3QtaW50ZXJmYWNlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0MTwvYWRtaW5vYmplY3QtaW50ZXJmYWNlPgogICAgICAgICAgIDxhZG1pbm9iamVjdC1jbGFzcz5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDE8L2FkbWlub2JqZWN0LWNsYXNzPgogICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlL3JhL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvcmEvYnVpbGQueG1sCmluZGV4IGExYmJlOTcuLmMwNTMwZDEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvcmEvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvcmEvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPGFudCBkaXI9InNyYyIgaW5oZXJpdEFsbD0iZmFsc2UiIHRhcmdldD0iYWxsIi8+CiAKICAgICA8amFyIGphcmZpbGU9ImdlbmVyaWMtcmEucmFyIiBiYXNlZGlyPSIuIgotICAgICAgICAgaW5jbHVkZXM9ImdlbmVyaWMtcmEuamFyLCBNRVRBLUlORi8qLnhtbCwgTUVUQS1JTkYvc2VydmljZXMvKiIgLz4gCisgICAgICAgICBpbmNsdWRlcz0iZ2VuZXJpYy1yYS5qYXIsIE1FVEEtSU5GLyoueG1sLCBNRVRBLUlORi9zZXJ2aWNlcy8qIiAvPgogICA8L3RhcmdldD4KIAogICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9yYS9zcmMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9yYS9zcmMvYnVpbGQueG1sCmluZGV4IGZmOGJjYzIuLjg0OTZmNjAgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvcmEvc3JjL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlL3JhL3NyYy9idWlsZC54bWwKQEAgLTMwLDggKzMwLDggQEAKIAogICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iaW5pdC1jb21tb24iID4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0iYnVpbGQuY2xhc3Nlcy5kaXIiIHZhbHVlPSJjbGFzc2VzIiAvPgotCTxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjb25uZWN0b3IiIC8+CisgICAgPHBhcmFtIG5hbWU9ImJ1aWxkLmNsYXNzZXMuZGlyIiB2YWx1ZT0iY2xhc3NlcyIgLz4KKyAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY29ubmVjdG9yIiAvPgogICAgIDwvYW50Y2FsbD4KICAgICA8amFyIGphcmZpbGU9Ii4uL2dlbmVyaWMtcmEuamFyIiBiYXNlZGlyPSJjbGFzc2VzIgogICAgICAgICAgaW5jbHVkZXM9ImNvbm5lY3Rvci8qLmNsYXNzIiAvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YQppbmRleCA1NTUzM2Q0Li5mNTliMmIzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YQpAQCAtMTgsNyArMTgsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIENvbnRyb2xzIHsKICAgICBwdWJsaWMgc3RhdGljIE9iamVjdCByZWFkeUxvY2sgPSBuZXcgT2JqZWN0KCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEKaW5kZXggNjU4MjMzZS4uZDczYzg2MiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIERlbGl2ZXJ5V29yayBpbXBsZW1lbnRzIFdvcmsgewogCkBAIC0zNiw3ICszNiw3IEBACiAgICAgcHJpdmF0ZSBTdHJpbmcgb3A7CiAgICAgcHJpdmF0ZSBib29sZWFuIGtlZXBDb3VudDsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnRlciA9IDA7Ci0gICAgCisKICAgICBwdWJsaWMgRGVsaXZlcnlXb3JrKE1lc3NhZ2VFbmRwb2ludCBlcCwgaW50IG51bU9mTWVzc2FnZXMsIFN0cmluZyBvcCkgewogICAgICAgICB0aGlzLmVwID0gZXA7CiAgICAgICAgIHRoaXMubnVtID0gbnVtT2ZNZXNzYWdlczsKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICAgICAgdGhpcy5rZWVwQ291bnQgPSBmYWxzZTsKICAgICB9CiAKLSAgICBwdWJsaWMgRGVsaXZlcnlXb3JrKE1lc3NhZ2VFbmRwb2ludCBlcCwgaW50IG51bU9mTWVzc2FnZXMsIAorICAgIHB1YmxpYyBEZWxpdmVyeVdvcmsoTWVzc2FnZUVuZHBvaW50IGVwLCBpbnQgbnVtT2ZNZXNzYWdlcywKICAgICAgICAgICAgIFN0cmluZyBvcCwgYm9vbGVhbiBrZWVwQ291bnQpIHsKICAgICAgICAgdGhpcy5lcCA9IGVwOwogICAgICAgICB0aGlzLm51bSA9IG51bU9mTWVzc2FnZXM7CkBAIC01NSw3ICs1NSw3IEBACiAgICAgcHVibGljIHZvaWQgcnVuKCkgewogCiAgICAgICAgIGRlYnVnKCJFTlRFUi4uLiIpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgLy9NZXRob2Qgb25NZXNzYWdlID0gZ2V0T25NZXNzYWdlTWV0aG9kKCk7CiAgICAgICAgICAgICAvL2VwLmJlZm9yZURlbGl2ZXJ5KG9uTWVzc2FnZSk7CkBAIC03OCwxMSArNzgsMTEgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy9lcC5hZnRlckRlbGl2ZXJ5KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCJMRUFWRS4uLiIpOwogICAgIH0KIApAQCAtOTMsMTQgKzkzLDE0IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSBNZXRob2QgZ2V0T25NZXNzYWdlTWV0aG9kKCkgewotICAgICAgICAKKwogICAgICAgICBNZXRob2Qgb25NZXNzYWdlTWV0aG9kID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENsYXNzIG1zZ0xpc3RlbmVyQ2xhc3MgPSBjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIuY2xhc3M7CiAgICAgICAgICAgICBDbGFzc1tdIHBhcmFtVHlwZXMgPSB7IGphdmEubGFuZy5TdHJpbmcuY2xhc3MgfTsKLSAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9IAorICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0KICAgICAgICAgICAgICAgICBtc2dMaXN0ZW5lckNsYXNzLmdldE1ldGhvZCgib25NZXNzYWdlIiwgcGFyYW1UeXBlcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlL3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhCmluZGV4IDEwMGNhY2UuLmZhOTNmNjMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhCkBAIC0zNiw3ICszNiw3IEBACiAgICAgICAgICAgICAgIGZsYWdUb1N0cmluZyhmbGFncykpOwogICAgIH0KIAotICAgIAorCiAgICAgcHVibGljIHZvaWQgZm9yZ2V0KFhpZCB4aWQpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5mb3JnZXQ6ICIgKyB4aWRUb1N0cmluZyh4aWQpKTsKICAgICB9CkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5wcmVwYXJlOiAiICsgeGlkVG9TdHJpbmcoeGlkKSk7CiAgICAgICAgIHJldHVybiBYQVJlc291cmNlLlhBX09LOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBYaWRbXSByZWNvdmVyKGludCBmbGFnKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2UucmVjb3ZlcjogIiArIGZsYWdUb1N0cmluZyhmbGFnKSk7CiAgICAgICAgIHJldHVybiBudWxsOwpAQCAtNjYsNyArNjYsNyBAQAogICAgIHB1YmxpYyBib29sZWFuIHNldFRyYW5zYWN0aW9uVGltZW91dChpbnQgc2Vjb25kcykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHN0YXJ0KFhpZCB4aWQsIGludCBmbGFncykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLnN0YXJ0OiAiICsgeGlkVG9TdHJpbmcoeGlkKSArICIsIiArCiAgICAgICAgICAgICAgICAgZmxhZ1RvU3RyaW5nKGZsYWdzKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlL3JhL3NyYy9jb25uZWN0b3IvTWVzc2FnZXMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhCmluZGV4IGI1YjBmMDIuLjRjOWMwMTIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhCkBAIC0yMSw3ICsyMSw3IEBACiAvKioKICAqIGNvbGxlY3Rpb24gb2YgbWVzc2FnZXMuCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBNZXNzYWdlcyB7CiAKQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICBTdHJpbmcgY29tbWFuZCAgPSBhcmdzWzBdOwogICAgICAgIFN0cmluZyBkZXN0TmFtZSA9IGFyZ3NbMV07CiAgICAgICAgU3RyaW5nIG1lc3NhZ2UgID0gYXJnc1syXTsKLSAgIAorCiAgICAgICAgaWYgKCEiYWRkIi5lcXVhbHMoY29tbWFuZCkpIHsKICAgICAgICAgICAgU3lzdGVtLmV4aXQoMSk7CiAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEKaW5kZXggYjc4NWQyMi4uYmFjYzY4ZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlL3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdC5qYXZhCkBAIC00Nyw3ICs0Nyw3IEBACiAgICAgcHVibGljIGludCBnZXRJbnRWYWx1ZSgpewogICAgICAgcmV0dXJuIGludFZhbHVlOwogICAgIH0KLSAKKwogICAgIEBDb25maWdQcm9wZXJ0eShkZWZhdWx0VmFsdWU9IjEiLCB0eXBlPWphdmEubGFuZy5JbnRlZ2VyLmNsYXNzKQogICAgIHB1YmxpYyB2b2lkIHNldEludFZhbHVlKGludCBpbnRWYWx1ZSl7CiAgICAgICB0aGlzLmludFZhbHVlID0gaW50VmFsdWU7CkBAIC03MSwxMyArNzEsMTMgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBpbml0aWFsaXplKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiW015QWRtaW5PYmplY3RdIEluaXRpYWxpemluZyB0aGUgQ29udHJvbHMgdG8gZmFsc2U6IityZXNldENvbnRyb2wpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW015QWRtaW5PYmplY3RdIEluaXRpYWxpemluZyB0aGUgQ29udHJvbHMgdG8gZmFsc2U6IityZXNldENvbnRyb2wpOwogICAgICAgICBpZiAocmVzZXRDb250cm9sLmVxdWFscygiQkVHSU5OSU5HIikpIHsKICAgICAgICAgICAgIHN5bmNocm9uaXplZCAoQ29udHJvbHMucmVhZHlMb2NrKXsKICAgICAgICAgICAgICAgICBDb250cm9scy5kb25lPWZhbHNlOwogICAgICAgICAgICAgfQotCSAgIFN5c3RlbS5vdXQucHJpbnRsbigiW015QWRtaW5PYmplY3RdIEluaXRpYWxpemVkIHRoZSBDb250cm9scyB0byBmYWxzZSIpOwotCX0KKyAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXplZCB0aGUgQ29udHJvbHMgdG8gZmFsc2UiKTsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gZG9uZSgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0MS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QxLmphdmEKaW5kZXggOTJjYWU4MS4uYTMyZjdmOSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QxLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QxLmphdmEKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICBwdWJsaWMgaW50IGdldEludFZhbHVlKCl7CiAgICAgICByZXR1cm4gaW50VmFsdWU7CiAgICAgfQotIAorCiAgICAgQENvbmZpZ1Byb3BlcnR5KHR5cGU9amF2YS5sYW5nLkludGVnZXIuY2xhc3MpCiAgICAgcHVibGljIHZvaWQgc2V0SW50VmFsdWUoaW50IGludFZhbHVlKXsKICAgICAgIHRoaXMuaW50VmFsdWUgPSBpbnRWYWx1ZTsKQEAgLTg4LDEzICs4OCwxMyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGluaXRpYWxpemUoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6aW5nIHRoZSBDb250cm9scyB0byBmYWxzZToiK3Jlc2V0Q29udHJvbCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6aW5nIHRoZSBDb250cm9scyB0byBmYWxzZToiK3Jlc2V0Q29udHJvbCk7CiAgICAgICAgIGlmIChyZXNldENvbnRyb2wuZXF1YWxzKCJCRUdJTk5JTkciKSkgewogICAgICAgICAgICAgc3luY2hyb25pemVkIChDb250cm9scy5yZWFkeUxvY2spewogICAgICAgICAgICAgICAgIENvbnRyb2xzLmRvbmU9ZmFsc2U7CiAgICAgICAgICAgICB9Ci0JICAgU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6ZWQgdGhlIENvbnRyb2xzIHRvIGZhbHNlIik7Ci0JfQorICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW015QWRtaW5PYmplY3RdIEluaXRpYWxpemVkIHRoZSBDb250cm9scyB0byBmYWxzZSIpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiBkb25lKCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YQppbmRleCA4ZjJkZjJmLi40NjA0NzE3IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YQpAQCAtMjUsOSArMjUsOSBAQAogICogc28gdGhhdCB0aGUgYXBwIHNlcnZlciBjYW4gaW5zdGFudGlhdGUgYW5kIGNvbmZpZ3VyZQogICogaXQgYXQgdGhlIHJ1bnRpbWUuCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KLXB1YmxpYyBjbGFzcyBTaW1wbGVBY3RpdmF0aW9uU3BlYyAKK3B1YmxpYyBjbGFzcyBTaW1wbGVBY3RpdmF0aW9uU3BlYwogICAgIGltcGxlbWVudHMgQWN0aXZhdGlvblNwZWMsIGphdmEuaW8uU2VyaWFsaXphYmxlIHsKIAogICAgIHByaXZhdGUgU3RyaW5nIGRlc3RpbmF0aW9uTmFtZTsKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldERlc3RpbmF0aW9uTmFtZSAoKSB7CiAgICAgICAgIHJldHVybiB0aGlzLmRlc3RpbmF0aW9uTmFtZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXREZXN0aW5hdGlvbk5hbWUgKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIGRlYnVnKCJzZXREZXN0aW5hdGlvbk5hbWUoKSBjYWxsZWQuLi4gbmFtZSA9ICIgKyBuYW1lKTsKICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbk5hbWUgPSBuYW1lOwpAQCAtNTMsMTcgKzUzLDE3IEBACiAgICAgcHVibGljIFN0cmluZyBnZXREZXN0aW5hdGlvblR5cGUoKSB7CiAgICAgICAgIHJldHVybiB0aGlzLmRlc3RpbmF0aW9uVHlwZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXREZXN0aW5hdGlvblR5cGUgKFN0cmluZyB0eXBlKSB7CiAgICAgICAgIGRlYnVnKCJzZXREZXN0aW5hdGlvblR5cGUgKCkgY2FsbGVkLi4uIHR5cGUgPSAiICsgdHlwZSk7CiAgICAgICAgIHRoaXMuZGVzdGluYXRpb25UeXBlPSB0eXBlOwogICAgIH0KIAotICAgIEBOb3ROdWxsIAorICAgIEBOb3ROdWxsCiAgICAgcHVibGljIFN0cmluZyBnZXRUZXN0UHJvcCgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMudGVzdFByb3A7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0VGVzdFByb3AgKFN0cmluZyB0ZXN0UHJvcCkgewogICAgICAgICBkZWJ1Zygic2V0VGVzdFByb3AgKCkgY2FsbGVkLi4uIHRlc3RQcm9wID0gIiArIHRlc3RQcm9wKTsKICAgICAgICAgdGhpcy50ZXN0UHJvcCA9IHRlc3RQcm9wOwpAQCAtNzQsNyArNzQsNyBAQAogICAgIHB1YmxpYyBJbnRlZ2VyIGdldFRlc3RJbnRlZ2VyUHJvcCgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMudGVzdEludGVnZXJQcm9wOwogICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFRlc3RJbnRlZ2VyUHJvcCAoSW50ZWdlciB0ZXN0UHJvcDEpIHsKICAgICAgICAgZGVidWcoInNldFRlc3RJbnRlZ2VyUHJvcCAoKSBjYWxsZWQuLi4gdGVzdEludGVnZXJQcm9wID0gIiArIHRlc3RQcm9wMSk7CiAgICAgICAgIHRoaXMudGVzdEludGVnZXJQcm9wID0gdGVzdFByb3AxOwpAQCAtMTAwLDcgKzEwMCw3IEBACiAKICAgICAgIH0KIAotICAgfSAKKyAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBkZWJ1ZyAoU3RyaW5nIG1lc3NhZ2UpCiAgICAgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEKaW5kZXggMDNmNTgyOC4uMjZhMmRhZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbC5qYXZhCkBAIC00NSwxNCArNDUsMTQgQEAKIC8qKgogICogVGhpcyBpcyBhIHNhbXBsZSByZXNvdXJjZSBhZGFwdGVyCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KLXB1YmxpYyBjbGFzcyBTaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsIAorcHVibGljIGNsYXNzIFNpbXBsZVJlc291cmNlQWRhcHRlckltcGwKIGltcGxlbWVudHMgUmVzb3VyY2VBZGFwdGVyLCBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7CiAKICAgICBwcml2YXRlIEJvb3RzdHJhcENvbnRleHQgY3R4OwogICAgIHByaXZhdGUgV29ya01hbmFnZXIgd207Ci0gICAgCisKICAgICBwcml2YXRlIFN0cmluZyB0ZXN0TmFtZTsKIAogICAgIHByaXZhdGUgYm9vbGVhbiBkZWJ1ZyA9IHRydWU7CkBAIC02NCw3ICs2NCw3IEBACiAKICAgICBwdWJsaWMgdm9pZAogICAgIHN0YXJ0KEJvb3RzdHJhcENvbnRleHQgY3R4KSB0aHJvd3MgUmVzb3VyY2VBZGFwdGVySW50ZXJuYWxFeGNlcHRpb257Ci0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCIwMDEuIFNpbXBsZSBSQSBzdGFydC4uLiIpOwogCiAgICAgICAgIHRoaXMuY3R4ID0gY3R4OwpAQCAtNzUsMTIgKzc1LDEyIEBACiAKICAgICAgICAgLy90ZXN0aW5nIGNyZWF0IHRpbWVyCiAgICAgICAgIFRpbWVyIHRpbWVyID0gbnVsbDsKLQkgIHRyeXsKLQkgICAgICB0aW1lciA9IGN0eC5jcmVhdGVUaW1lcigpOwotCSAgfSBjYXRjaChVbmF2YWlsYWJsZUV4Y2VwdGlvbiB1ZSkgewotCSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXJyb3IiKTsKLQkgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VBZGFwdGVySW50ZXJuYWxFeGNlcHRpb24oIkVycm9yIGZvcm0gYm9vdHN0cmFwIik7Ci0JICB9CisgICAgICB0cnl7CisgICAgICAgICAgdGltZXIgPSBjdHguY3JlYXRlVGltZXIoKTsKKyAgICAgIH0gY2F0Y2goVW5hdmFpbGFibGVFeGNlcHRpb24gdWUpIHsKKyAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIik7CisgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uKCJFcnJvciBmb3JtIGJvb3RzdHJhcCIpOworICAgICAgfQogICAgICAgICBkZWJ1ZygiMDA0LiBTaW1wbGUgUkEgc3RhcnQuLi4iKTsKIAogICAgICAgICBkZWJ1ZygiMDA1LiBTaW1wbGUgUkEgc3RhcnQuLi4iKTsKQEAgLTEyMCwxMyArMTIwLDEzIEBACiAKICAgICBwdWJsaWMgdm9pZAogICAgIGVuZHBvaW50RGVhY3RpdmF0aW9uICgKLSAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZW5kcG9pbnRGYWN0b3J5LCAKKyAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZW5kcG9pbnRGYWN0b3J5LAogICAgICAgICAgICAgQWN0aXZhdGlvblNwZWMgc3BlYykgewogICAgICAgICBkZWJ1ZyAoImVuZHBvaW50RGVhY3RpdmF0aW9uIGNhbGxlZC4uLiIpOwotICAgICAgICAKKwogICAgICAgICAoKFdvcmtEaXNwYXRjaGVyKSB3b3JrKS5zdG9wKCk7CiAgICAgfQotIAorCiAgICAgcHVibGljIFN0cmluZyBnZXRUZXN0TmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHRlc3ROYW1lOwogICAgIH0KQEAgLTEzNiw4ICsxMzYsOCBAQAogICAgIHB1YmxpYyBJbnRlZ2VyIGdldEludFZhbHVlKCl7CiAgICAgICByZXR1cm4gaW50VmFsdWU7CiAgICAgfQotICAgCi0gICAgQENvbmZpZ1Byb3BlcnR5KHR5cGU9SW50ZWdlci5jbGFzcywgZGVmYXVsdFZhbHVlPSIxMCIpIAorCisgICAgQENvbmZpZ1Byb3BlcnR5KHR5cGU9SW50ZWdlci5jbGFzcywgZGVmYXVsdFZhbHVlPSIxMCIpCiAgICAgcHVibGljIHZvaWQgc2V0SW50VmFsdWUoSW50ZWdlciBpbnRWYWx1ZSl7CiAgICAgICB0aGlzLmludFZhbHVlID0gaW50VmFsdWU7CiAgICAgfQpAQCAtMTUzLDcgKzE1Myw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsXSA9PT4gIiArIG1lc3NhZ2UpOwogICAgIH0KIAotICAgIHB1YmxpYyBYQVJlc291cmNlW10gZ2V0WEFSZXNvdXJjZXMoQWN0aXZhdGlvblNwZWNbXSBzcGVjcykgCisgICAgcHVibGljIFhBUmVzb3VyY2VbXSBnZXRYQVJlc291cmNlcyhBY3RpdmF0aW9uU3BlY1tdIHNwZWNzKQogICAgICAgICB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhCmluZGV4IDZlMDViNTMuLmU3NzZlYWEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhCkBAIC0zMyw3ICszMyw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgV29ya0Rpc3BhdGNoZXIgaW1wbGVtZW50cyBXb3JrIHsKIApAQCAtNDQsMTEgKzQ0LDExIEBACiAgICAgcHJvdGVjdGVkIEFjdGl2YXRpb25TcGVjIHNwZWM7CiAgICAgcHJvdGVjdGVkIFdvcmtNYW5hZ2VyIHdtOwogICAgIHByb3RlY3RlZCBYQVRlcm1pbmF0b3IgeGE7Ci0gICAgCisKICAgICBwdWJsaWMgV29ya0Rpc3BhdGNoZXIoCiAgICAgICAgICAgICBTdHJpbmcgaWQsCiAgICAgICAgICAgICBCb290c3RyYXBDb250ZXh0IGN0eCwKLSAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZmFjdG9yeSwgCisgICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGZhY3RvcnksCiAgICAgICAgICAgICBBY3RpdmF0aW9uU3BlYyBzcGVjKSB7CiAgICAgICAgIHRoaXMuaWQgICAgICA9IGlkOwogICAgICAgICB0aGlzLmN0eCAgICAgPSBjdHg7CkBAIC02MSw3ICs2MSw3IEBACiAgICAgcHVibGljIHZvaWQgcnVuKCkgewogCiAgICAgICAgIGRlYnVnKCJFTlRFUi4uLiIpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgc3luY2hyb25pemVkIChDb250cm9scy5yZWFkeUxvY2spIHsKICAgICAgICAgICAgICAgICBkZWJ1ZygiV0FJVC4uLiIpOwpAQCAtMTExLDE1ICsxMTEsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgLy9kZWxldGUgYWxsLgogICAgICAgICAgICAgICAgICAgICBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgdyA9IG5ldyBEZWxpdmVyeVdvcmsoZXAsIDEsICJERUxFVEVfQUxMIik7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJET05FIERFTEVURSBBTEwgRlJPTSBEQiIpOwogICAgICAgICAgICAgICAgICAgICBDb250cm9scy5leHBlY3RlZFJlc3VsdHMgPSAwOwogICAgICAgICAgICAgICAgICAgICBub3RpZnlBbmRXYWl0KCk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTsKICAgICAgICAgICAgICAgICB9CiAKQEAgLTE1NywxNCArMTU3LDE0IEBACiAgICAgfQogCiAgICAgcHVibGljIE1ldGhvZCBnZXRPbk1lc3NhZ2VNZXRob2QoKSB7Ci0gICAgICAgIAorCiAgICAgICAgIE1ldGhvZCBvbk1lc3NhZ2VNZXRob2QgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ2xhc3MgbXNnTGlzdGVuZXJDbGFzcyA9IGNvbm5lY3Rvci5NeU1lc3NhZ2VMaXN0ZW5lci5jbGFzczsKICAgICAgICAgICAgIENsYXNzW10gcGFyYW1UeXBlcyA9IHsgamF2YS5sYW5nLlN0cmluZy5jbGFzcyB9OwotICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0gCisgICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPQogICAgICAgICAgICAgICAgIG1zZ0xpc3RlbmVyQ2xhc3MuZ2V0TWV0aG9kKCJvbk1lc3NhZ2UiLCBwYXJhbVR5cGVzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KQEAgLTE4NywxMyArMTg3LDEzIEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAvL1NsZWVwIGZvciA1IHNlY29uZHMKICAgICAgICAgICAgIC8vVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCg1KjEwMDApOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHN5bmNocm9uaXplZChDb250cm9scy5yZWFkeUxvY2spIHsKICAgICAgICAgICAgICAgICAvL05vdGlmeSB0aGUgY2xpZW50IHRvIGNoZWNrIHRoZSByZXN1bHRzCi0gICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLm5vdGlmeUFsbCgpOyAKKyAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2subm90aWZ5QWxsKCk7CiAKICAgICAgICAgICAgICAgICAvL1dhaXQgdW50aWwgcmVzdWx0cyBhcmUgdmVyaWZpZWQgYnkgdGhlIGNsaWVudAotICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay53YWl0KCk7IAorICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay53YWl0KCk7CiAKICAgICAgICAgICAgICAgICBpZiAoc3RvcCkgewogICAgICAgICAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlL3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYmVhbnZhbGlkYXRpb24tc2ltcGxlL3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEKaW5kZXggNzc4MzdmNy4uMWQ1MDI0YiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2JlYW52YWxpZGF0aW9uLXNpbXBsZS9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9iZWFudmFsaWRhdGlvbi1zaW1wbGUvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YQpAQCAtMzUsOCArMzUsOCBAQAogICAgIHB1YmxpYyBpbnQgYnJhbmNoUXVhbGlmaWVyOwogICAgIHB1YmxpYyBpbnQgZ2xvYmFsVHhJRDsKIAotICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhHVFJJRFNJWkU9IDY0OyAKLSAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYQlFVQUxTSVpFPSA2NDsgCisgICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEdUUklEU0laRT0gNjQ7CisgICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEJRVUFMU0laRT0gNjQ7CiAKICAgICBwdWJsaWMgWElEKCkgewogICAgICAgICBpbnQgZm9vID0gSUQrKzsKQEAgLTU0LDEwICs1NCwxMCBAQAogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgICAgICAgICAgICAgICAgLy8gSXQgY2FuJ3QgYmUgZXF1YWwKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBvdGhlciA9IChYSUQpbzsgICAgICAgICAgICAgICAgICAgLy8gVGhlIG90aGVyIFhJRCwgbm93IHByb3Blcmx5IGNhc3QKLSAgICAgICAgCi0gICAgICAgIGlmICh0aGlzLmZvcm1hdElEID09IG90aGVyLmZvcm1hdElEIAorCisgICAgICAgIGlmICh0aGlzLmZvcm1hdElEID09IG90aGVyLmZvcm1hdElECiAgICAgICAgICAgICAgICAgJiYgdGhpcy5icmFuY2hRdWFsaWZpZXIgPT0gb3RoZXIuYnJhbmNoUXVhbGlmaWVyCiAgICAgICAgICAgICAgICAgJiYgdGhpcy5nbG9iYWxUeElEID09IG90aGVyLmdsb2JhbFR4SUQpIHsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtOTcsNyArOTcsNyBAQAogICAgICAgICAgICAgICAgICJmb3JtYXRJRCgiICAgICArIGZvcm1hdElEICAgICArICIpLCAiICsKICAgICAgICAgICAgICAgICAiYnJhbmNoUXVhbGlmaWVyICgiICsgYnJhbmNoUXVhbGlmaWVyICsgIiksICIgKwogICAgICAgICAgICAgICAgICJnbG9iYWxUeElEKCIgKyBnbG9iYWxUeElEICsgIil9Iik7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBzOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9idWlsZC54bWwKaW5kZXggNzZkZGYzZi4uYjIwOWU5MSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYnVpbGQueG1sCkBAIC0xMzMsNyArMTMzLDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJjb25uZWN0b3ItdGFyZ2V0IiB2YWx1ZT0iYWxsIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iYWxsLXdpdGgtc2VjdXJpdHktbWFuYWdlciI+CiAgICAgICA8ZGVsZXRlPgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5BUFNfSE9NRX0iIGluY2x1ZGVzPSJ0ZXN0X3Jlc3VsdHMqIi8+CkBAIC0yMTMsMzIgKzIxMywzMiBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjb25uZWN0b3JfZ3JvdXBfMSI+Ci0JICAgIDxlY2hvIG1lc3NhZ2U9IioqKioqKioqKioqKiAgU3RhcnRpbmcgY29ubmVjdG9yX2dyb3VwXzEgICoqKioqKioqKioqKiIvPiAgICAKKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iKioqKioqKioqKioqICBTdGFydGluZyBjb25uZWN0b3JfZ3JvdXBfMSAgKioqKioqKioqKioqIi8+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkBAIyMgY29ubmVjdG9yMS41ICMjQEAiLz4KICAgICAgICAgPGFudCBkaXI9ImNvbm5lY3RvcjEuNSIgdGFyZ2V0PSIke2Nvbm5lY3Rvci10YXJnZXR9Ii8+CiAKICAgICAgICAgPGVjaG8gbWVzc2FnZT0iQEAjIyBlbWJlZGRlZENvbm5lY3RvcjEuNSAjI0BAIi8+CiAgICAgICAgIDxhbnQgZGlyPSIuLi9lbWJlZGRlZENvbm5lY3RvcjEuNSIgdGFyZ2V0PSIke2Nvbm5lY3Rvci10YXJnZXR9Ii8+CiAKLQkJPGVjaG8gbWVzc2FnZT0iQEAjIyBlbWJlZGRlZHdlYiAjI0BAIi8+CisgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkBAIyMgZW1iZWRkZWR3ZWIgIyNAQCIvPgogICAgICAgICA8YW50IGRpcj0iZW1iZWRkZWR3ZWIiIHRhcmdldD0iJHtjb25uZWN0b3ItdGFyZ2V0fSIvPgogCi0JCTxlY2hvIG1lc3NhZ2U9IkBAIyMgbXEgIyNAQCIvPgotCQk8YW50IGRpcj0iLi4vbXEiIHRhcmdldD0iJHtjb25uZWN0b3ItdGFyZ2V0fSIvPgorICAgICAgICA8ZWNobyBtZXNzYWdlPSJAQCMjIG1xICMjQEAiLz4KKyAgICAgICAgPGFudCBkaXI9Ii4uL21xIiB0YXJnZXQ9IiR7Y29ubmVjdG9yLXRhcmdldH0iLz4KIAotCQk8ZWNobyBtZXNzYWdlPSJAQCMjIG5vbmFjYyAjI0BAIi8+CisgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkBAIyMgbm9uYWNjICMjQEAiLz4KICAgICAgICAgPGFudCBkaXI9Ii4uL25vbmFjYyIgdGFyZ2V0PSIke2Nvbm5lY3Rvci10YXJnZXR9Ii8+CiAKLQkJPGVjaG8gbWVzc2FnZT0iQEAjIyB3ZWIyY29ubmVjdG9yICMjQEAiLz4KLQkJPGFudCBkaXI9Ii4uL3dlYjJjb25uZWN0b3IiIHRhcmdldD0iJHtjb25uZWN0b3ItdGFyZ2V0fSIgLz4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iQEAjIyB3ZWIyY29ubmVjdG9yICMjQEAiLz4KKyAgICAgICAgPGFudCBkaXI9Ii4uL3dlYjJjb25uZWN0b3IiIHRhcmdldD0iJHtjb25uZWN0b3ItdGFyZ2V0fSIgLz4KIAotCQk8ZWNobyBtZXNzYWdlPSJAQCMjIHdlYjJjb25uZWN0b3IgKHNlY29uZCB0aW1lKSAjI0BAIi8+Ci0JCTxhbnQgZGlyPSIuLi93ZWIyY29ubmVjdG9yIiB0YXJnZXQ9IiR7Y29ubmVjdG9yLXRhcmdldH0iIC8+CisgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkBAIyMgd2ViMmNvbm5lY3RvciAoc2Vjb25kIHRpbWUpICMjQEAiLz4KKyAgICAgICAgPGFudCBkaXI9Ii4uL3dlYjJjb25uZWN0b3IiIHRhcmdldD0iJHtjb25uZWN0b3ItdGFyZ2V0fSIgLz4KIAotCQk8ZWNobyBtZXNzYWdlPSJAQCMjIG5vbnN0cmluZ21jZnByb3BlcnRpZXMgIyNAQCIvPgotCQk8YW50IGRpcj0ibm9uc3RyaW5nbWNmcHJvcGVydGllcyIgdGFyZ2V0PSIke2Nvbm5lY3Rvci10YXJnZXR9Ii8+CisgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkBAIyMgbm9uc3RyaW5nbWNmcHJvcGVydGllcyAjI0BAIi8+CisgICAgICAgIDxhbnQgZGlyPSJub25zdHJpbmdtY2Zwcm9wZXJ0aWVzIiB0YXJnZXQ9IiR7Y29ubmVjdG9yLXRhcmdldH0iLz4KIAotCQk8ZWNobyBtZXNzYWdlPSJAQCMjIG5vbnN0cmluZ3JhcHJvcGVydGllcyAjI0BAIi8+CisgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkBAIyMgbm9uc3RyaW5ncmFwcm9wZXJ0aWVzICMjQEAiLz4KICAgICAgICAgPGFudCBkaXI9Ii4uL25vbnN0cmluZ3JhcHJvcGVydGllcyIgdGFyZ2V0PSIke2Nvbm5lY3Rvci10YXJnZXR9IiAvPgogCiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkBAIyMgdHhsZXZlbHN3aXRjaCAjI0BAIi8+CkBAIC0yNTAsOCArMjUwLDggQEAKICAgICAgICAgPGVjaG8gbWVzc2FnZT0iQEAjIyBlamIgMy4yIGNvbm5lY3RvciAxLjcgbWRiIHRlc3QjI0BAIi8+CiAgICAgICAgIDxhbnQgZGlyPSJlamIzMi1tZGIiIHRhcmdldD0iJHtjb25uZWN0b3ItdGFyZ2V0fSIvPgogCi0JCTxlY2hvIG1lc3NhZ2U9IkBAIyMgU3VuUmFYbWwgIyNAQCIvPgotCQk8YW50IGRpcj0iU3VuUmFYbWwiIHRhcmdldD0iJHtjb25uZWN0b3ItdGFyZ2V0fSIvPgorICAgICAgICA8ZWNobyBtZXNzYWdlPSJAQCMjIFN1blJhWG1sICMjQEAiLz4KKyAgICAgICAgPGFudCBkaXI9IlN1blJhWG1sIiB0YXJnZXQ9IiR7Y29ubmVjdG9yLXRhcmdldH0iLz4KIAogICAgICAgICA8ZWNobyBtZXNzYWdlPSJAQCMjIHNlcmlhbGl6YWJsZXRlc3QgIyNAQCIvPgogICAgICAgICA8YW50IGRpcj0ic2VyaWFsaXphYmxldGVzdCIgdGFyZ2V0PSIke2Nvbm5lY3Rvci10YXJnZXR9Ii8+CkBAIC0yNjUsMjIgKzI2NSwyMiBAQAogICAgICAgICA8ZWNobyBtZXNzYWdlPSJAQCMjIHJlZGVwbG95UmFyICMjQEAiLz4KICAgICAgICAgPGFudCBkaXI9InJlZGVwbG95UmFyIiB0YXJnZXQ9IiR7Y29ubmVjdG9yLXRhcmdldH0iLz4KIAotCQk8ZWNobyBtZXNzYWdlPSJAQCMjIGFubm90YXRpb24tZW1iZWRkZWR3ZWIgIyNAQCIvPgorICAgICAgICA8ZWNobyBtZXNzYWdlPSJAQCMjIGFubm90YXRpb24tZW1iZWRkZWR3ZWIgIyNAQCIvPgogICAgICAgICA8YW50IGRpcj0iYW5ub3RhdGlvbi1lbWJlZGRlZHdlYiIgdGFyZ2V0PSIke2Nvbm5lY3Rvci10YXJnZXR9Ii8+CiAKLQkJPGVjaG8gbWVzc2FnZT0iQEAjIyBpbnN0YWxsZWQgbGlicmFyaWVzIGVtYmVkZGVkIHJhciBFWFRFTlNJT05fTElTVCAjI0BAIi8+Ci0JCTxhbnQgZGlyPSJpbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkIiB0YXJnZXQ9ImFsbC1leHQiLz4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iQEAjIyBpbnN0YWxsZWQgbGlicmFyaWVzIGVtYmVkZGVkIHJhciBFWFRFTlNJT05fTElTVCAjI0BAIi8+CisgICAgICAgIDxhbnQgZGlyPSJpbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkIiB0YXJnZXQ9ImFsbC1leHQiLz4KIAotCQk8ZWNobyBtZXNzYWdlPSJAQCMjIGRlZmF1bHRDb25uZWN0b3JSZXNvdXJjZSAjI0BAIi8+CisgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkBAIyMgZGVmYXVsdENvbm5lY3RvclJlc291cmNlICMjQEAiLz4KICAgICAgICAgPGFudCBkaXI9ImRlZmF1bHRDb25uZWN0b3JSZXNvdXJjZSIgdGFyZ2V0PSIke2Nvbm5lY3Rvci10YXJnZXR9Ii8+Ci0JPC90YXJnZXQ+CisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNvbm5lY3Rvcl9ncm91cF8yIj4KLQk8ZWNobyBtZXNzYWdlPSIqKioqKioqKioqKiogIFN0YXJ0aW5nIGNvbm5lY3Rvcl9ncm91cF8yICAqKioqKioqKioqKioiLz4KKyAgICA8ZWNobyBtZXNzYWdlPSIqKioqKioqKioqKiogIFN0YXJ0aW5nIGNvbm5lY3Rvcl9ncm91cF8yICAqKioqKioqKioqKioiLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iQEAjIyBmb3JjZS1kZXBsb3ktcmFyICMjQEAiLz4KICAgICAgICAgPGFudCBkaXI9ImZvcmNlLWRlcGxveS1yYXIiIHRhcmdldD0iJHtjb25uZWN0b3ItdGFyZ2V0fSIvPgogCi0JCTxlY2hvIG1lc3NhZ2U9IkBAIyMgYnVpbHQtaW4tY3VzdG9tLXJlc291cmNlcyAjI0BAIi8+CisgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkBAIyMgYnVpbHQtaW4tY3VzdG9tLXJlc291cmNlcyAjI0BAIi8+CiAgICAgICAgIDxhbnQgZGlyPSJidWlsdC1pbi1jdXN0b20tcmVzb3VyY2VzIiB0YXJnZXQ9IiR7Y29ubmVjdG9yLXRhcmdldH0iLz4KIAogICAgICAgICA8ZWNobyBtZXNzYWdlPSJAQCMjIGRhdGFzb3VyY2UtZGVmaW5pdGlvbiMjQEAiLz4KQEAgLTI5MiwzMiArMjkyLDMyIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNvbm5lY3Rvcl9ncm91cF8zIj4KLQk8ZWNobyBtZXNzYWdlPSIqKioqKioqKioqKiogIFN0YXJ0aW5nIGNvbm5lY3Rvcl9ncm91cF8zICAqKioqKioqKioqKioiLz4KLQkJPGVjaG8gbWVzc2FnZT0iQEAjIyBjb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhIyNAQCIvPgotCQk8YW50IGRpcj0iY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYSIgdGFyZ2V0PSIke2Nvbm5lY3Rvci10YXJnZXR9Ii8+CisgICAgPGVjaG8gbWVzc2FnZT0iKioqKioqKioqKioqICBTdGFydGluZyBjb25uZWN0b3JfZ3JvdXBfMyAgKioqKioqKioqKioqIi8+CisgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkBAIyMgY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYSMjQEAiLz4KKyAgICAgICAgPGFudCBkaXI9ImNvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEiIHRhcmdldD0iJHtjb25uZWN0b3ItdGFyZ2V0fSIvPgogCi0JCTxlY2hvIG1lc3NhZ2U9IkBAIyMgYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEjI0BAIi8+Ci0JCTxhbnQgZGlyPSJhZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYSIgdGFyZ2V0PSIke2Nvbm5lY3Rvci10YXJnZXR9Ii8+CisgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkBAIyMgYWRtaW5pc3RlcmVkLW9iamVjdC1kZWZpbml0aW9uLWVtYmVkcmEjI0BAIi8+CisgICAgICAgIDxhbnQgZGlyPSJhZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24tZW1iZWRyYSIgdGFyZ2V0PSIke2Nvbm5lY3Rvci10YXJnZXR9Ii8+CiAKLQkJPGVjaG8gbWVzc2FnZT0iQEAjIyBhZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24jI0BAIi8+Ci0JCTxhbnQgZGlyPSJhZG1pbmlzdGVyZWQtb2JqZWN0LWRlZmluaXRpb24iIHRhcmdldD0iJHtjb25uZWN0b3ItdGFyZ2V0fSIvPgorICAgICAgICA8ZWNobyBtZXNzYWdlPSJAQCMjIGFkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbiMjQEAiLz4KKyAgICAgICAgPGFudCBkaXI9ImFkbWluaXN0ZXJlZC1vYmplY3QtZGVmaW5pdGlvbiIgdGFyZ2V0PSIke2Nvbm5lY3Rvci10YXJnZXR9Ii8+CiAKLQkJPGVjaG8gbWVzc2FnZT0iQEAjIyBqbXMtY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24jI0BAIi8+Ci0JCTxhbnQgZGlyPSJqbXMtY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24iIHRhcmdldD0iJHtjb25uZWN0b3ItdGFyZ2V0fSIvPgorICAgICAgICA8ZWNobyBtZXNzYWdlPSJAQCMjIGptcy1jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbiMjQEAiLz4KKyAgICAgICAgPGFudCBkaXI9Imptcy1jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbiIgdGFyZ2V0PSIke2Nvbm5lY3Rvci10YXJnZXR9Ii8+CiAgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImNvbm5lY3Rvcl9ncm91cF80Ij4KLQkJPGVjaG8gbWVzc2FnZT0iKioqKioqKioqKioqICBTdGFydGluZyBjb25uZWN0b3JfZ3JvdXBfNCAgKioqKioqKioqKioqIi8+Ci0JCTxlY2hvIG1lc3NhZ2U9IkBAIyMgam1zLWRlc3RpbmF0aW9uLWRlZmluaXRpb24jI0BAIi8+Ci0JCTxhbnQgZGlyPSJqbXMtZGVzdGluYXRpb24tZGVmaW5pdGlvbiIgdGFyZ2V0PSIke2Nvbm5lY3Rvci10YXJnZXR9Ii8+CisgICAgPHRhcmdldCBuYW1lPSJjb25uZWN0b3JfZ3JvdXBfNCI+CisgICAgICAgIDxlY2hvIG1lc3NhZ2U9IioqKioqKioqKioqKiAgU3RhcnRpbmcgY29ubmVjdG9yX2dyb3VwXzQgICoqKioqKioqKioqKiIvPgorICAgICAgICA8ZWNobyBtZXNzYWdlPSJAQCMjIGptcy1kZXN0aW5hdGlvbi1kZWZpbml0aW9uIyNAQCIvPgorICAgICAgICA8YW50IGRpcj0iam1zLWRlc3RpbmF0aW9uLWRlZmluaXRpb24iIHRhcmdldD0iJHtjb25uZWN0b3ItdGFyZ2V0fSIvPgogCi0JCTxlY2hvIG1lc3NhZ2U9IkBAIyMgaW5zdGFsbGVkIGxpYnJhcmllcyBFWFRFTlNJT05fTElTVCAjI0BAIi8+Ci0JCTxhbnQgZGlyPSJpbnN0YWxsZWQtbGlicmFyaWVzIiB0YXJnZXQ9ImFsbC1leHQiLz4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iQEAjIyBpbnN0YWxsZWQgbGlicmFyaWVzIEVYVEVOU0lPTl9MSVNUICMjQEAiLz4KKyAgICAgICAgPGFudCBkaXI9Imluc3RhbGxlZC1saWJyYXJpZXMiIHRhcmdldD0iYWxsLWV4dCIvPgogCi0JCTxlY2hvIG1lc3NhZ2U9IkBAIyMgaW5zdGFsbGVkIGxpYnJhcmllcyAoLS1saWJyYXJpZXMpICMjQEAiLz4KLQkJPGFudCBkaXI9Imluc3RhbGxlZC1saWJyYXJpZXMiIHRhcmdldD0iYWxsLS1saWJyYXJpZXMiLz4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iQEAjIyBpbnN0YWxsZWQgbGlicmFyaWVzICgtLWxpYnJhcmllcykgIyNAQCIvPgorICAgICAgICA8YW50IGRpcj0iaW5zdGFsbGVkLWxpYnJhcmllcyIgdGFyZ2V0PSJhbGwtLWxpYnJhcmllcyIvPgogCi0JCTxlY2hvIG1lc3NhZ2U9IkBAIyMgc2VjdXJpdHktbWFwLXdlYiNAQCIvPgorICAgICAgICA8ZWNobyBtZXNzYWdlPSJAQCMjIHNlY3VyaXR5LW1hcC13ZWIjQEAiLz4KICAgICAgICAgPGFudCBkaXI9InNlY3VyaXR5bWFwd2ViIiB0YXJnZXQ9ImFsbCIvPgogCiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkBAIyMgcmFyLWFjY2Vzc2liaWxpdHkgIyNAQCIvPgpAQCAtMzI5LDMxICszMjksMzEgQEAKICAgICAgICAgPGVjaG8gbWVzc2FnZT0iQEAjIyBvc2dpLXJlc291cmNlcy10ZXN0ICMjQEAiLz4KICAgICAgICAgPGFudCBkaXI9Im9zZ2ktcmVzb3VyY2VzLXRlc3QiIHRhcmdldD0iYWxsIi8+CiAKLSAgICAJPGVjaG8gbWVzc2FnZT0iQEAjIyBiZWFudmFsaWRhdGlvbi1zaW1wbGUgIyNAQCIvPgorICAgICAgICA8ZWNobyBtZXNzYWdlPSJAQCMjIGJlYW52YWxpZGF0aW9uLXNpbXBsZSAjI0BAIi8+CiAgICAgICAgIDxhbnQgZGlyPSJiZWFudmFsaWRhdGlvbi1zaW1wbGUiIHRhcmdldD0iYWxsIi8+CiAKICAgICAgICAgPGVjaG8gbWVzc2FnZT0iQEAjIyBiZWFudmFsaWRhdGlvbi1zaW1wbGUgIyNAQCIvPgogICAgICAgICA8YW50IGRpcj0iYmVhbnZhbGlkYXRpb24tc2ltcGxlIiB0YXJnZXQ9ImVtYmVkZGVkLWFsbCIvPgogCi0JCTwhLS1lY2hvIG1lc3NhZ2U9IkBAIyMgZGVmYXVsdENvbm5lY3RvclJlc291cmNlLXN0YW5kYWxvbmUtcmFyICMjQEAiLz4KKyAgICAgICAgPCEtLWVjaG8gbWVzc2FnZT0iQEAjIyBkZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIgIyNAQCIvPgogICAgICAgICA8YW50IGRpcj0iZGVmYXVsdENvbm5lY3RvclJlc291cmNlLXN0YW5kYWxvbmUtcmFyIiB0YXJnZXQ9IiR7Y29ubmVjdG9yLXRhcmdldH0iLy0tPgogCi0JCTwhLS1lY2hvIG1lc3NhZ2U9IkBAIyMgY29ubmVjdG9yMS42ICMjQEAiLz4KKyAgICAgICAgPCEtLWVjaG8gbWVzc2FnZT0iQEAjIyBjb25uZWN0b3IxLjYgIyNAQCIvPgogICAgICAgICA8YW50IGRpcj0iY29ubmVjdG9yMS42IiB0YXJnZXQ9IiR7Y29ubmVjdG9yLXRhcmdldH0iLy0tPgogCi0JCTwhLS1lY2hvIG1lc3NhZ2U9IkBAIyMgQW5ub3RhdGVkIENvbm5lY3RvcjEuNSAjI0BAIi8+CisgICAgICAgIDwhLS1lY2hvIG1lc3NhZ2U9IkBAIyMgQW5ub3RhdGVkIENvbm5lY3RvcjEuNSAjI0BAIi8+CiAgICAgICAgIDxhbnQgZGlyPSJhbm5vdGF0aW9uLWNvbm5lY3RvcjEuNSIgdGFyZ2V0PSIke2Nvbm5lY3Rvci10YXJnZXR9Ii8tLT4KICAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0ic3RhcnQtcmVjb3JkIj4KLQkJPHJlY29yZCBuYW1lPSJjb25uZWN0b3Iub3V0cHV0IiBhY3Rpb249InN0YXJ0Ii8+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJzdGFydC1yZWNvcmQiPgorICAgICAgICA8cmVjb3JkIG5hbWU9ImNvbm5lY3Rvci5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiLz4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0ic3RvcC1yZWNvcmQiPgotCQk8cmVjb3JkIG5hbWU9ImNvbm5lY3Rvci5vdXRwdXQiIGFjdGlvbj0ic3RvcCIvPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0ic3RvcC1yZWNvcmQiPgorICAgICAgICA8cmVjb3JkIG5hbWU9ImNvbm5lY3Rvci5vdXRwdXQiIGFjdGlvbj0ic3RvcCIvPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJjb25uZWN0b3IiPgorICAgIDx0YXJnZXQgbmFtZT0iY29ubmVjdG9yIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb25uZWN0b3JfZ3JvdXBfMSIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbm5lY3Rvcl9ncm91cF8yIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29ubmVjdG9yX2dyb3VwXzMiLz4KQEAgLTUwMSw3ICs1MDEsNyBAQAogCiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkBAIyMgY29ubmVjdG9yMS41LXJlc291cmNlc3htbCAjI0BAIi8+CiAgICAgICAgIDxhbnQgZGlyPSIuLi9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sIiB0YXJnZXQ9ImFsbCIvPgotICAgICAgICAKKwogICAgICAgICA8ZWNobyBtZXNzYWdlPSJAQCMjIGVtYmVkZGVkQ29ubmVjdG9yMS41LXJlc291cmNlc3htbCAjI0BAIi8+CiAgICAgICAgIDxhbnQgZGlyPSIuLi9lbWJlZGRlZENvbm5lY3RvcjEuNS1yZXNvdXJjZXN4bWwiIHRhcmdldD0iYWxsIi8+CiAKQEAgLTUxOSw3ICs1MTksNyBAQAogCiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkBAIyMgaW5zdGFsbGVkLWxpYnJhcmllcy1yZXNvdXJjZXMteG1sICMjQEAiLz4KICAgICAgICAgPGFudCBkaXI9Imluc3RhbGxlZC1saWJyYXJpZXMtcmVzb3VyY2VzIiB0YXJnZXQ9ImFsbC0tbGlicmFyaWVzIi8+Ci0gICAgICAgIAorCiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkBAIyMgY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwgIyNAQCIvPgogICAgICAgICA8YW50IGRpcj0iY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwiIHRhcmdldD0iYWxsLXdpdGgtbWFwcGluZ3MiLz4KIApAQCAtNTM3LDcgKzUzNyw3IEBACiAKICAgICAgICAgPGVjaG8gbWVzc2FnZT0iQEAjIyBjb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sLW1vZHVsZS1zY29wZSAjI0BAIi8+CiAgICAgICAgIDxhbnQgZGlyPSIuLi9jb25uZWN0b3IxLjUtcmVzb3VyY2VzeG1sLW1vZHVsZS1zY29wZSIgdGFyZ2V0PSJhbGwiLz4KLSAgICAgICAgCisKICAgICAgICAgPGVjaG8gbWVzc2FnZT0ianBhLXR4X3Byb3BhZ2F0aW9uLXJlc291cmNlcy14bWwjI0BAIi8+CiAgICAgICAgIDxhbnQgZGlyPSJqcGEtdHgtcHJvcGFnYXRpb24tZ2YtcmVzb3VyY2VzLXhtbCIgdGFyZ2V0PSJhbGwiLz4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2J1aWx0LWluLWN1c3RvbS1yZXNvdXJjZXMtcmVzb3VyY2VzLXhtbC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2J1aWx0LWluLWN1c3RvbS1yZXNvdXJjZXMtcmVzb3VyY2VzLXhtbC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDc2ZWQyMmUuLjVhZDI0NzYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9idWlsdC1pbi1jdXN0b20tcmVzb3VyY2VzLXJlc291cmNlcy14bWwvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYnVpbHQtaW4tY3VzdG9tLXJlc291cmNlcy1yZXNvdXJjZXMteG1sL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE5ICsxNSwxOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWJtcC1DdXN0b21SZXNvdXJjZUZhY3RvcmllcyIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iMTIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9idWlsdC1pbi1jdXN0b20tcmVzb3VyY2VzLXJlc291cmNlcy14bWwvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2J1aWx0LWluLWN1c3RvbS1yZXNvdXJjZXMtcmVzb3VyY2VzLXhtbC9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKaW5kZXggZDRhMmNmZi4uYWU3ZTVlNyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2J1aWx0LWluLWN1c3RvbS1yZXNvdXJjZXMtcmVzb3VyY2VzLXhtbC9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2J1aWx0LWluLWN1c3RvbS1yZXNvdXJjZXMtcmVzb3VyY2VzLXhtbC9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKQEAgLTMwLDE5ICszMCwxOSBAQAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogCi0gCVNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOworICAgICBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKIAotCXN0YXQuYWRkRGVzY3JpcHRpb24odGVzdFN1aXRlKTsKKyAgICBzdGF0LmFkZERlc2NyaXB0aW9uKHRlc3RTdWl0ZSk7CiAKICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgIE9iamVjdCBvYmpSZWYgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZUJNUEhvbWUiKTsKLQlTaW1wbGVCTVBIb21lIHNpbXBsZUJNUEhvbWUgPSAoU2ltcGxlQk1QSG9tZSkKKyAgICBTaW1wbGVCTVBIb21lIHNpbXBsZUJNUEhvbWUgPSAoU2ltcGxlQk1QSG9tZSkKICAgICBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ialJlZiwgU2ltcGxlQk1QSG9tZS5jbGFzcyk7CiAKICAgICAgICB0cnl7CiAgICAgLy8gICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQXBwY2xpZW50IGxvb2t1cCAgOiAiICsgIGljLmxvb2t1cCgiamF2YTphcHAvY3VzdG9tL215LXByb3BlcnRpZXMteG1sLWZpbGUiKSk7Ci0gICAgICAgfWNhdGNoKEV4Y2VwdGlvbiBlKXsgCisgICAgICAgfWNhdGNoKEV4Y2VwdGlvbiBlKXsKICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9idWlsdC1pbi1jdXN0b20tcmVzb3VyY2VzLXJlc291cmNlcy14bWwvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9idWlsdC1pbi1jdXN0b20tcmVzb3VyY2VzLXJlc291cmNlcy14bWwvZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCA0YTk2MzMwLi45M2Y4NzYyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYnVpbHQtaW4tY3VzdG9tLXJlc291cmNlcy1yZXNvdXJjZXMteG1sL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2J1aWx0LWluLWN1c3RvbS1yZXNvdXJjZXMtcmVzb3VyY2VzLXhtbC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC03MCw2ICs3MCw2IEBACiAgICAgICA8dHJhbnMtYXR0cmlidXRlPlJlcXVpcmVkPC90cmFucy1hdHRyaWJ1dGU+CiAgICAgPC9jb250YWluZXItdHJhbnNhY3Rpb24+CiAgIDwvYXNzZW1ibHktZGVzY3JpcHRvcj4KLSAgICAgIAorCiA8L2VqYi1qYXI+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9idWlsdC1pbi1jdXN0b20tcmVzb3VyY2VzLXJlc291cmNlcy14bWwvZGVzY3JpcHRvci9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9idWlsdC1pbi1jdXN0b20tcmVzb3VyY2VzLXJlc291cmNlcy14bWwvZGVzY3JpcHRvci9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbAppbmRleCA0ZDMzMGRkLi4zZmEyNDUwIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYnVpbHQtaW4tY3VzdG9tLXJlc291cmNlcy1yZXNvdXJjZXMteG1sL2Rlc2NyaXB0b3IvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2J1aWx0LWluLWN1c3RvbS1yZXNvdXJjZXMtcmVzb3VyY2VzLXhtbC9kZXNjcmlwdG9yL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sCkBAIC01NSw0ICs1NSw0IEBACiAgICAgICA8cHJvcGVydHkgbmFtZT0iaG9zdCIgdmFsdWU9ImphdmEuc3VuLmNvbSIgLz4KICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwcm90b2NvbCIgdmFsdWU9Imh0dHAiIC8+CiAgICAgPC9jdXN0b20tcmVzb3VyY2U+Ci08L3Jlc291cmNlcz4gCis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9idWlsdC1pbi1jdXN0b20tcmVzb3VyY2VzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYnVpbHQtaW4tY3VzdG9tLXJlc291cmNlcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDc2ZWQyMmUuLjVhZDI0NzYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9idWlsdC1pbi1jdXN0b20tcmVzb3VyY2VzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2J1aWx0LWluLWN1c3RvbS1yZXNvdXJjZXMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTkgKzE1LDE5IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItYm1wLUN1c3RvbVJlc291cmNlRmFjdG9yaWVzIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIxMiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2J1aWx0LWluLWN1c3RvbS1yZXNvdXJjZXMvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2J1aWx0LWluLWN1c3RvbS1yZXNvdXJjZXMvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhCmluZGV4IDIzNGMxYTQuLmQ5NzFlZjcgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9idWlsdC1pbi1jdXN0b20tcmVzb3VyY2VzL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYnVpbHQtaW4tY3VzdG9tLXJlc291cmNlcy9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKQEAgLTMwLDEzICszMCwxMyBAQAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogCi0gCVNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOworICAgICBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKIAotCXN0YXQuYWRkRGVzY3JpcHRpb24odGVzdFN1aXRlKTsKKyAgICBzdGF0LmFkZERlc2NyaXB0aW9uKHRlc3RTdWl0ZSk7CiAKICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgIE9iamVjdCBvYmpSZWYgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZUJNUEhvbWUiKTsKLQlTaW1wbGVCTVBIb21lIHNpbXBsZUJNUEhvbWUgPSAoU2ltcGxlQk1QSG9tZSkKKyAgICBTaW1wbGVCTVBIb21lIHNpbXBsZUJNUEhvbWUgPSAoU2ltcGxlQk1QSG9tZSkKICAgICBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ialJlZiwgU2ltcGxlQk1QSG9tZS5jbGFzcyk7CiAKICAgICBTaW1wbGVCTVAgc2ltcGxlQk1QID0gc2ltcGxlQk1QSG9tZS5jcmVhdGUoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9idWlsdC1pbi1jdXN0b20tcmVzb3VyY2VzL2Rlc2NyaXB0b3IvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvYnVpbHQtaW4tY3VzdG9tLXJlc291cmNlcy9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IGRlYjA3YWIuLjg5MjUyNDggMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9idWlsdC1pbi1jdXN0b20tcmVzb3VyY2VzL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2J1aWx0LWluLWN1c3RvbS1yZXNvdXJjZXMvZGVzY3JpcHRvci9lamItamFyLnhtbApAQCAtNjIsNiArNjIsNiBAQAogICAgICAgPHRyYW5zLWF0dHJpYnV0ZT5SZXF1aXJlZDwvdHJhbnMtYXR0cmlidXRlPgogICAgIDwvY29udGFpbmVyLXRyYW5zYWN0aW9uPgogICA8L2Fzc2VtYmx5LWRlc2NyaXB0b3I+Ci0gICAgICAKKwogPC9lamItamFyPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29uZmlnLXByb3BlcnR5LWFjY2Vzc29yLXRlc3QvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25maWctcHJvcGVydHktYWNjZXNzb3ItdGVzdC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDg5ZWEwZDUuLjdmYzU0MDUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25maWctcHJvcGVydHktYWNjZXNzb3ItdGVzdC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25maWctcHJvcGVydHktYWNjZXNzb3ItdGVzdC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMSArMTUsMjEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNvbmZpZy1wcm9wZXJ0eS1hY2Nlc3Nvci10ZXN0Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9InJhcmZpbGUiIHZhbHVlPSJyYXIvYmxhY2tib3gtdHgucmFyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29uZmlnLXByb3BlcnR5LWFjY2Vzc29yLXRlc3QvcmFyL3NyYy9jb20vc3VuL2Nvbm5lY3Rvci9ibGFja2JveC9KZGJjQ29ubmVjdGlvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2NvbmZpZy1wcm9wZXJ0eS1hY2Nlc3Nvci10ZXN0L3Jhci9zcmMvY29tL3N1bi9jb25uZWN0b3IvYmxhY2tib3gvSmRiY0Nvbm5lY3Rpb24uamF2YQppbmRleCBmYTY0OTU5Li5iYjM2NTZhIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29uZmlnLXByb3BlcnR5LWFjY2Vzc29yLXRlc3QvcmFyL3NyYy9jb20vc3VuL2Nvbm5lY3Rvci9ibGFja2JveC9KZGJjQ29ubmVjdGlvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25maWctcHJvcGVydHktYWNjZXNzb3ItdGVzdC9yYXIvc3JjL2NvbS9zdW4vY29ubmVjdG9yL2JsYWNrYm94L0pkYmNDb25uZWN0aW9uLmphdmEKQEAgLTE4Myw3ICsxODMsNyBAQAogICAgIH0KIAogICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotICAgIC8vIFRIRSBGT0xMT1dJTkcgQVBJUyBBUkUgTkVXIEZST00gSkRLIDEuNCAvLyAgICAgICAgCisgICAgLy8gVEhFIEZPTExPV0lORyBBUElTIEFSRSBORVcgRlJPTSBKREsgMS40IC8vCiAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKICAgICAvLy8vLy8vLy8vLy8vICBCRUdJTiAgSkRLIDEuNCAgLy8vLy8vLy8vLy8vLy8KQEAgLTMyOSwyNyArMzI5LDI3IEBACiAgICAgfQogCiAgICAgLy8vLy8vLy8vLy8vLyAgRU5EICBKREsgMS40ICAvLy8vLy8vLy8vLy8vLwotICAgIAorCiAgICAgcHVibGljIGludCBnZXROZXR3b3JrVGltZW91dCgpIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBuZXcgZmVhdHVyZS4iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXROZXR3b3JrVGltZW91dChFeGVjdXRvciBleGVjdXRvciwgaW50IG1pbGxpc2Vjb25kcykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICB0aHJvdyBuZXcgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiRG8gbm90IHN1cHBvcnQgSmF2YSA3IG5ldyBmZWF0dXJlLiIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGFib3J0KEV4ZWN1dG9yIGV4ZWN1dG9yKSAgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgbmV3IGZlYXR1cmUuIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBnZXRTY2hlbWEoKSB0aHJvd3MgU1FMRXhjZXB0aW9uewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBuZXcgZmVhdHVyZS4iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRTY2hlbWEoU3RyaW5nIHNjaGVtYSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgbmV3IGZlYXR1cmUuIik7CiAgICAgfQotICAgIAorCiAKICAgICB2b2lkIGFzc29jaWF0ZUNvbm5lY3Rpb24oSmRiY01hbmFnZWRDb25uZWN0aW9uIG5ld01jKQogICAgICAgICAgICAgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25maWctcHJvcGVydHktYWNjZXNzb3ItdGVzdC9yYXIvc3JjL2NvbS9zdW4vY29ubmVjdG9yL2JsYWNrYm94L0xvY2FsVHhNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25maWctcHJvcGVydHktYWNjZXNzb3ItdGVzdC9yYXIvc3JjL2NvbS9zdW4vY29ubmVjdG9yL2JsYWNrYm94L0xvY2FsVHhNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQppbmRleCAwZTQ3ZGRjLi5hOTY4NjAxIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29uZmlnLXByb3BlcnR5LWFjY2Vzc29yLXRlc3QvcmFyL3NyYy9jb20vc3VuL2Nvbm5lY3Rvci9ibGFja2JveC9Mb2NhbFR4TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2NvbmZpZy1wcm9wZXJ0eS1hY2Nlc3Nvci10ZXN0L3Jhci9zcmMvY29tL3N1bi9jb25uZWN0b3IvYmxhY2tib3gvTG9jYWxUeE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCkBAIC0xMDksNyArMTA5LDcgQEAKICAgICAgICAgaWYgKCFnZXRCb29sZWFuV2l0aEdldEJvb2xlYW5BY2Nlc3NvcigpKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkJsYWNrYm94IFJBUiA6IEdldCBCb29sZWFuIEFjY2Vzc29yIGlzIGZhbHNlIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKCFpc0Jvb2xlYW5XaXRoSXNCb29sZWFuQWNjZXNzb3IoKSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJCbGFja2JveCBSQVIgOiBJcyBCb29sZWFuIEFjY2Vzc29yIGlzIGZhbHNlIik7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25maWctcHJvcGVydHktYWNjZXNzb3ItdGVzdC9yYXIvc3JjL2NvbS9zdW4vY29ubmVjdG9yL2JsYWNrYm94L1Jlc291cmNlQWRhcHRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2NvbmZpZy1wcm9wZXJ0eS1hY2Nlc3Nvci10ZXN0L3Jhci9zcmMvY29tL3N1bi9jb25uZWN0b3IvYmxhY2tib3gvUmVzb3VyY2VBZGFwdGVyLmphdmEKaW5kZXggOGYyZjM1NC4uNzkyNTA5OCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2NvbmZpZy1wcm9wZXJ0eS1hY2Nlc3Nvci10ZXN0L3Jhci9zcmMvY29tL3N1bi9jb25uZWN0b3IvYmxhY2tib3gvUmVzb3VyY2VBZGFwdGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2NvbmZpZy1wcm9wZXJ0eS1hY2Nlc3Nvci10ZXN0L3Jhci9zcmMvY29tL3N1bi9jb25uZWN0b3IvYmxhY2tib3gvUmVzb3VyY2VBZGFwdGVyLmphdmEKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgWEFSZXNvdXJjZVtdIGdldFhBUmVzb3VyY2VzKEFjdGl2YXRpb25TcGVjW10gYWN0aXZhdGlvblNwZWNzKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewotICAgICAgICByZXR1cm4gbnVsbDsgIAorICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9CiAKICAgICBwdWJsaWMgQm9vdHN0cmFwQ29udGV4dCBnZXRCb290c3RyYXBDb250ZXh0KCl7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29uZmlnLXByb3BlcnR5LWFjY2Vzc29yLXRlc3Qvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29uZmlnLXByb3BlcnR5LWFjY2Vzc29yLXRlc3Qvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEKaW5kZXggYmUzNzk1My4uNTVjNjVmOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2NvbmZpZy1wcm9wZXJ0eS1hY2Nlc3Nvci10ZXN0L3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25maWctcHJvcGVydHktYWNjZXNzb3ItdGVzdC9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YQpAQCAtNzQsNyArNzQsNyBAQAogICAgICAgICB9Y2F0Y2goTmFtaW5nRXhjZXB0aW9uIG5lKXsKICAgICAgICAgICAgIG5lLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9IGNhdGNoIChDcmVhdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsgIAorICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfWZpbmFsbHl7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiRU5EX09GX1RFU1QiKTsKICAgICAgICAgICAgIG91dC5mbHVzaCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2NvbmZpZy1wcm9wZXJ0eS1hY2Nlc3Nvci10ZXN0L3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25maWctcHJvcGVydHktYWNjZXNzb3ItdGVzdC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggNDIzNDExNS4uZWQ2ZGJhYiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2NvbmZpZy1wcm9wZXJ0eS1hY2Nlc3Nvci10ZXN0L3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29uZmlnLXByb3BlcnR5LWFjY2Vzc29yLXRlc3Qvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDIwICsxLDIwIEBACi1Ecm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0g7DQotDQotQ1JFQVRFIFRBQkxFIFRYTEVWRUxTV0lUQ0ggKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCi1JTlNFUlQgSU5UTyBUWExFVkVMU1dJVENIIFZBTFVFUygxMCwgJ2FiY2QnKTsNCi1JTlNFUlQgSU5UTyBUWExFVkVMU1dJVENIIFZBTFVFUygxMSwgJ3BxcnMnKTsNCi0NCi1Ecm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0gyOw0KLQ0KLUNSRUFURSBUQUJMRSBUWExFVkVMU1dJVENIMiAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikNCi0pOw0KLQ0KLUlOU0VSVCBJTlRPIFRYTEVWRUxTV0lUQ0gyIFZBTFVFUygxLCAnYWJjZCcpOw0KLUlOU0VSVCBJTlRPIFRYTEVWRUxTV0lUQ0gyIFZBTFVFUygyLCAncHFycycpOw0KLQ0KK0Ryb3AgdGFibGUgVFhMRVZFTFNXSVRDSDsKKworQ1JFQVRFIFRBQkxFIFRYTEVWRUxTV0lUQ0ggKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQorKTsKKworSU5TRVJUIElOVE8gVFhMRVZFTFNXSVRDSCBWQUxVRVMoMTAsICdhYmNkJyk7CitJTlNFUlQgSU5UTyBUWExFVkVMU1dJVENIIFZBTFVFUygxMSwgJ3BxcnMnKTsKKworRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIMjsKKworQ1JFQVRFIFRBQkxFIFRYTEVWRUxTV0lUQ0gyICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikKKyk7CisKK0lOU0VSVCBJTlRPIFRYTEVWRUxTV0lUQ0gyIFZBTFVFUygxLCAnYWJjZCcpOworSU5TRVJUIElOVE8gVFhMRVZFTFNXSVRDSDIgVkFMVUVTKDIsICdwcXJzJyk7CisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25maWctcHJvcGVydHktYWNjZXNzb3ItdGVzdC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2NvbmZpZy1wcm9wZXJ0eS1hY2Nlc3Nvci10ZXN0L3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggMGMxMjQyZi4uZDExYTExNSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2NvbmZpZy1wcm9wZXJ0eS1hY2Nlc3Nvci10ZXN0L3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2NvbmZpZy1wcm9wZXJ0eS1hY2Nlc3Nvci10ZXN0L3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEsMiArMSwyIEBACi1Ecm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0g7DQotRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIMjsNCitEcm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0g7CitEcm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0gyOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNjMwMmQ4Ni4uOTI2ZTUyMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMyArMTUsMjMgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9idWlsZC54bWwKaW5kZXggYTMxMWVlYi4uYmQ2OTA3OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL2J1aWxkLnhtbApAQCAtMzcsMTAgKzM3LDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImluZm8iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAJPGVjaG8gbWVzc2FnZT0iYnVpbGQuY2xhc3Nlcy5kaXIgaXMgJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KLSAgICAJPGVjaG8gbWVzc2FnZT0iczFhc3Rlc3QuY2xhc3NwYXRoIGlzICR7czFhc3Rlc3QuY2xhc3NwYXRofSIvPgorICAgICAgICA8ZWNobyBtZXNzYWdlPSJidWlsZC5jbGFzc2VzLmRpciBpcyAke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgorICAgICAgICA8ZWNobyBtZXNzYWdlPSJzMWFzdGVzdC5jbGFzc3BhdGggaXMgJHtzMWFzdGVzdC5jbGFzc3BhdGh9Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDgsNyArNDgsNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgCSAgPGVjaG8gbWVzc2FnZT0iYXNzZW1ibGUuZGlyID0gJHthc3NlbWJsZS5kaXJ9Ii8+CisgICAgICAgICAgPGVjaG8gbWVzc2FnZT0iYXNzZW1ibGUuZGlyID0gJHthc3NlbWJsZS5kaXJ9Ii8+CiAgICAgICAgIDwhLS1idWlsZCBhbmQgcGFja2FnZSAud2FyIGZpcnN0IHNvIGl0IGRvZXNuJ3QgY29udGFpbiBlamIgYmVhbiAhLS0+CiAgICAgICAgIDwhLS1jbGFzc2VzIHRoYXQgaGF2ZSBAU3RhdGVsZXNzL0BTdGF0ZXVsICEtLT4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CkBAIC03MSwyMyArNzEsMjMgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iKiovSGVsbG8qKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgICAgIAorCiAgICAgICAgIDxhbnQgZGlyPSJyYSIgdGFyZ2V0PSJhbGwiLz4KIAogICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LmVhciIvPgogICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KLSAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4gICAgCisgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CiAKICAgICAgICAgPGVhciBlYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiIGFwcHhtbD0iJHthcHBsaWNhdGlvbi54bWx9Ij4KICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSI+CiAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLndhciIvPgotICAgICAgICAgIDwvZmlsZXNldD4gIAorICAgICAgICAgIDwvZmlsZXNldD4KICAgICAgICAgICA8ZmlsZXNldCBkaXI9InJhLyI+CiAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLnJhciIvPgogICAgICAgICAgIDwvZmlsZXNldD4KICAgICAgICAgPC9lYXI+Ci0gICAgICAgIAorCiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMTczMDFiOS4uOTRiZTM1MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL2NsaWVudC9DbGllbnQuamF2YQpAQCAtNTgsNyArNTgsNyBAQAogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0Y05hbWUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICB9Y2F0Y2goRXhjZXB0aW9uIGUpewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGNOYW1lLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgdGhyb3cgZTsKQEAgLTc5LDcgKzc5LDcgQEAKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBjMS5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKICAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOwotICAgICAgICAKKwogICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKQogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGxpbmUpOwogICAgICAgICBpZiAoY29kZSAhPSAyMDApIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwKaW5kZXggOThmZmQ2OC4uOWE2OGRjNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwKQEAgLTM1LDcgKzM1LDcgQEAKICAgICA8bW9kdWxlPgogICAgICAgPGNvbm5lY3Rvcj5jZmQtcmEucmFyPC9jb25uZWN0b3I+CiAgICAgPC9tb2R1bGU+Ci0gICAgCisKIAogICAgIDxjb25uZWN0aW9uLWZhY3Rvcnk+CiAgICAgICAgPGRlc2NyaXB0aW9uPmdsb2JhbC1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGluIGFwcGxpY2F0aW9uIEREPC9kZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL2Rlc2NyaXB0b3IvY29ubmVjdG9yLXJlc291cmNlLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL2Rlc2NyaXB0b3IvY29ubmVjdG9yLXJlc291cmNlLnhtbAppbmRleCAxNDRhYmQ4Li4zMTlkNmFhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9kZXNjcmlwdG9yL2Nvbm5lY3Rvci1yZXNvdXJjZS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvZGVzY3JpcHRvci9jb25uZWN0b3ItcmVzb3VyY2UueG1sCkBAIC0yMCwxMiArMjAsMTIgQEAKIDxjb25uZWN0aW9uLWZhY3RvcnkgeG1sbnM9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICAgICAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlIGh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUvamF2YWVlXzcueHNkPgotCTxkZXNjcmlwdGlvbj5nbG9iYWwtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBpbiBhcHBsaWNhdGlvbiBERDwvZGVzY3JpcHRpb24+Ci0JPG5hbWU+amF2YTpnbG9iYWwvZW52L0FwcGxpY2F0aW9uX0xldmVsX0Nvbm5lY3Rpb25GYWN0b3J5PC9uYW1lPgotCTxpbnRlcmZhY2UtbmFtZT5qYWthcnRhLnJlc291cmNlLmNjaS5Db25uZWN0aW9uRmFjdG9yeTwvaW50ZXJmYWNlLW5hbWU+Ci0JPHJlc291cmNlLWFkYXB0ZXI+Y2ZkLXJhPC9yZXNvdXJjZS1hZGFwdGVyPgotCTxwcm9wZXJ0eT4KLQkJPG5hbWU+dHJhbnNhY3Rpb25TdXBwb3J0PC9uYW1lPgotCQk8dmFsdWU+TG9jYWxUcmFuc2FjdGlvbjwvdmFsdWU+Ci0JPC9wcm9wZXJ0eT4KKyAgICA8ZGVzY3JpcHRpb24+Z2xvYmFsLXNjb3BlIHJlc291cmNlIGRlZmluZWQgaW4gYXBwbGljYXRpb24gREQ8L2Rlc2NyaXB0aW9uPgorICAgIDxuYW1lPmphdmE6Z2xvYmFsL2Vudi9BcHBsaWNhdGlvbl9MZXZlbF9Db25uZWN0aW9uRmFjdG9yeTwvbmFtZT4KKyAgICA8aW50ZXJmYWNlLW5hbWU+amFrYXJ0YS5yZXNvdXJjZS5jY2kuQ29ubmVjdGlvbkZhY3Rvcnk8L2ludGVyZmFjZS1uYW1lPgorICAgIDxyZXNvdXJjZS1hZGFwdGVyPmNmZC1yYTwvcmVzb3VyY2UtYWRhcHRlcj4KKyAgICA8cHJvcGVydHk+CisgICAgICAgIDxuYW1lPnRyYW5zYWN0aW9uU3VwcG9ydDwvbmFtZT4KKyAgICAgICAgPHZhbHVlPkxvY2FsVHJhbnNhY3Rpb248L3ZhbHVlPgorICAgIDwvcHJvcGVydHk+CiA8L2Nvbm5lY3Rpb24tZmFjdG9yeT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL2Rlc2NyaXB0b3IvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IGM5MTQ2YmMuLjhmMjE2MWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvZGVzY3JpcHRvci9lamItamFyLnhtbApAQCAtMTgsOSArMTgsOSBAQAogLS0+CiAKIDxlamItamFyIHhtbG5zPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlIgotICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCi0gICAgICAgICBtZXRhZGF0YS1jb21wbGV0ZT0iZmFsc2UiIAotICAgICAgICAgdmVyc2lvbj0iMy4yIiAKKyAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgICAgICBtZXRhZGF0YS1jb21wbGV0ZT0iZmFsc2UiCisgICAgICAgICB2ZXJzaW9uPSIzLjIiCiAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUgaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS9lamItamFyXzNfMi54c2QiPgogICA8bW9kdWxlLW5hbWU+Y29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS1lamI8L21vZHVsZS1uYW1lPgogICA8ZW50ZXJwcmlzZS1iZWFucz4KQEAgLTI5LDcgKzI5LDcgQEAKICAgICAgIDxlamItbmFtZT5IZWxsb1N0YXRlZnVsRUpCPC9lamItbmFtZT4KICAgICAgIDxidXNpbmVzcy1sb2NhbD5jb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmhlbGxvLnNlc3Npb24zLkhlbGxvU3RhdGVmdWw8L2J1c2luZXNzLWxvY2FsPgogICAgICAgPGVqYi1jbGFzcz5jb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmhlbGxvLnNlc3Npb24zLkhlbGxvU3RhdGVmdWxFSkI8L2VqYi1jbGFzcz4KLSAgICAgIAorCiAgICAgICA8Y29ubmVjdGlvbi1mYWN0b3J5PgogICAgICAgICA8ZGVzY3JpcHRpb24+Z2xvYmFsLXNjb3BlIHJlc291cmNlIHRvIGJlIG1vZGlmaWVkIGJ5IEREPC9kZXNjcmlwdGlvbj4KICAgICAgICAgPG5hbWU+amF2YTpnbG9iYWwvZW52L0hlbGxvU3RhdGVmdWxFSkJfTW9kQnlERF9Db25uZWN0aW9uRmFjdG9yeTwvbmFtZT4KQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICAgICA8dmFsdWU+Zm9vPC92YWx1ZT4KICAgICAgICAgPC9wcm9wZXJ0eT4KICAgICAgIDwvY29ubmVjdGlvbi1mYWN0b3J5PgotICAgICAgCisKICAgICAgIDxjb25uZWN0aW9uLWZhY3Rvcnk+CiAgICAgICAgIDxkZXNjcmlwdGlvbj5tb2R1bGUtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBpbiBFSkIgREQ8L2Rlc2NyaXB0aW9uPgogICAgICAgICA8bmFtZT5qYXZhOm1vZHVsZS9lbnYvSGVsbG9TdGF0ZWZ1bEVKQl9ERF9Db25uZWN0aW9uRmFjdG9yeTwvbmFtZT4KQEAgLTY1LDcgKzY1LDcgQEAKICAgICAgICAgICA8dmFsdWU+Zm9vPC92YWx1ZT4KICAgICAgICAgPC9wcm9wZXJ0eT4KICAgICAgIDwvY29ubmVjdGlvbi1mYWN0b3J5PgotICAgICAgCisKICAgICAgIDxjb25uZWN0aW9uLWZhY3Rvcnk+CiAgICAgICAgIDxkZXNjcmlwdGlvbj5hcHBsaWNhdGlvbi1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGluIEVKQiBERDwvZGVzY3JpcHRpb24+CiAgICAgICAgIDxuYW1lPmphdmE6YXBwL2Vudi9IZWxsb1N0YXRlZnVsRUpCX0REX0Nvbm5lY3Rpb25GYWN0b3J5PC9uYW1lPgpAQCAtNzksNyArNzksNyBAQAogICAgICAgICAgIDx2YWx1ZT5mb288L3ZhbHVlPgogICAgICAgICA8L3Byb3BlcnR5PgogICAgICAgPC9jb25uZWN0aW9uLWZhY3Rvcnk+Ci0gICAgICAKKwogICAgICAgPGNvbm5lY3Rpb24tZmFjdG9yeT4KICAgICAgICAgPGRlc2NyaXB0aW9uPmNvbXBvbmVudC1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGluIEVKQiBERDwvZGVzY3JpcHRpb24+CiAgICAgICAgIDxuYW1lPmphdmE6Y29tcC9lbnYvSGVsbG9TdGF0ZWZ1bEVKQl9ERF9Db25uZWN0aW9uRmFjdG9yeTwvbmFtZT4KQEAgLTkwLDcgKzkwLDcgQEAKICAgICAgICAgICA8dmFsdWU+Zm9vPC92YWx1ZT4KICAgICAgICAgPC9wcm9wZXJ0eT4KICAgICAgIDwvY29ubmVjdGlvbi1mYWN0b3J5PgotICAgICAgCisKICAgICA8L3Nlc3Npb24+CiAgICAgPHNlc3Npb24+CiAgICAgICA8ZGlzcGxheS1uYW1lPkhlbGxvRUpCPC9kaXNwbGF5LW5hbWU+CkBAIC0xMjIsNyArMTIyLDcgQEAKICAgICAgICAgICA8dmFsdWU+Zm9vPC92YWx1ZT4KICAgICAgICAgPC9wcm9wZXJ0eT4KICAgICAgIDwvY29ubmVjdGlvbi1mYWN0b3J5PgotICAgICAgCisKICAgICAgIDxjb25uZWN0aW9uLWZhY3Rvcnk+CiAgICAgICAgIDxkZXNjcmlwdGlvbj5hcHBsaWNhdGlvbi1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGluIEVKQiBERDwvZGVzY3JpcHRpb24+CiAgICAgICAgIDxuYW1lPmphdmE6YXBwL2Vudi9IZWxsb0VKQl9ERF9Db25uZWN0aW9uRmFjdG9yeTwvbmFtZT4KQEAgLTE1OCw4ICsxNTgsOCBAQAogICAgICAgICAgIDx2YWx1ZT5mb288L3ZhbHVlPgogICAgICAgICA8L3Byb3BlcnR5PgogICAgICAgPC9jb25uZWN0aW9uLWZhY3Rvcnk+Ci0gICAgICAKKwogICAgIDwvc2Vzc2lvbj4KICAgPC9lbnRlcnByaXNlLWJlYW5zPgotICAKKwogPC9lamItamFyPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDQyNTFjZjAuLmZjOGE2NWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTE4LDggKzE4LDggQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSIKLSAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiICAgIAotICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlIHdlYi1hcHBfM18xLnhzZCIgICAKKyAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUgd2ViLWFwcF8zXzEueHNkIgogICAgICAgICAgdmVyc2lvbj0iMy4xIgogICAgICAgICAgbWV0YWRhdGEtY29tcGxldGU9ImZhbHNlIj4KIApAQCAtNzMsNyArNzMsNyBAQAogICAgICAgICAgPHZhbHVlPmZvbzwvdmFsdWU+CiAgICAgICAgPC9wcm9wZXJ0eT4KICAgICAgPC9jb25uZWN0aW9uLWZhY3Rvcnk+Ci0gICAgCisKICAgICAgPGNvbm5lY3Rpb24tZmFjdG9yeT4KICAgICAgICA8ZGVzY3JpcHRpb24+bW9kdWxlLXNjb3BlIHJlc291cmNlIGRlZmluZWQgaW4gV2ViIEREPC9kZXNjcmlwdGlvbj4KICAgICAgICA8bmFtZT5qYXZhOm1vZHVsZS9lbnYvV2ViX0REX0Nvbm5lY3Rpb25GYWN0b3J5PC9uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvZWpiL0hlbGxvRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9lamIvSGVsbG9FSkIuamF2YQppbmRleCBkYTkzMTdmLi43MWEwZjYwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9lamIvSGVsbG9FSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9lamIvSGVsbG9FSkIuamF2YQpAQCAtMzYsMzkgKzM2LDM5IEBACiAgICAgICAgICAgICAgICAgcHJvcGVydGllcyA9IHsidGVzdE5hbWU9Zm9vIn0KICAgICAgICAgICApLAogICAgICAgICAgIEBDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb24oCi0gICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICJnbG9iYWwtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBieSBAQ29ubmVjdGlvbkZhY3RvcnlEZWZpbml0aW9uIiwgCi0gICAgICAgICAgICAgICBuYW1lID0gImphdmE6Z2xvYmFsL2Vudi9IZWxsb0VKQl9Bbm5vdGF0aW9uX0Nvbm5lY3Rpb25GYWN0b3J5IiwgCi0gICAgICAgICAgICAgICBpbnRlcmZhY2VOYW1lID0gImpha2FydGEucmVzb3VyY2UuY2NpLkNvbm5lY3Rpb25GYWN0b3J5IiwgCisgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICJnbG9iYWwtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBieSBAQ29ubmVjdGlvbkZhY3RvcnlEZWZpbml0aW9uIiwKKyAgICAgICAgICAgICAgIG5hbWUgPSAiamF2YTpnbG9iYWwvZW52L0hlbGxvRUpCX0Fubm90YXRpb25fQ29ubmVjdGlvbkZhY3RvcnkiLAorICAgICAgICAgICAgICAgaW50ZXJmYWNlTmFtZSA9ICJqYWthcnRhLnJlc291cmNlLmNjaS5Db25uZWN0aW9uRmFjdG9yeSIsCiAgICAgICAgICAgICAgICByZXNvdXJjZUFkYXB0ZXIgPSAiI2NmZC1yYSIsCiAgICAgICAgICAgICAgICB0cmFuc2FjdGlvblN1cHBvcnQgPSBUcmFuc2FjdGlvblN1cHBvcnRMZXZlbC5Mb2NhbFRyYW5zYWN0aW9uLAogICAgICAgICAgICAgICAgbWF4UG9vbFNpemUgPSAxNiwKICAgICAgICAgICAgICAgIG1pblBvb2xTaXplID0gNCwKICAgICAgICAgICAgICAgIHByb3BlcnRpZXMgPSB7InRlc3ROYW1lPWZvbyJ9CiAgICAgICAgICAgKSwKLSAgICAgICAgICAKKwogICAgICAgICAgIEBDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb24oCi0gICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICJhcHBsaWNhdGlvbi1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGJ5IEBDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb24iLCAKLSAgICAgICAgICAgICAgIG5hbWUgPSAiamF2YTphcHAvZW52L0hlbGxvRUpCX0Fubm90YXRpb25fQ29ubmVjdGlvbkZhY3RvcnkiLCAKLSAgICAgICAgICAgICAgIGludGVyZmFjZU5hbWUgPSAiamFrYXJ0YS5yZXNvdXJjZS5jY2kuQ29ubmVjdGlvbkZhY3RvcnkiLCAKKyAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gImFwcGxpY2F0aW9uLXNjb3BlIHJlc291cmNlIGRlZmluZWQgYnkgQENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbiIsCisgICAgICAgICAgICAgICBuYW1lID0gImphdmE6YXBwL2Vudi9IZWxsb0VKQl9Bbm5vdGF0aW9uX0Nvbm5lY3Rpb25GYWN0b3J5IiwKKyAgICAgICAgICAgICAgIGludGVyZmFjZU5hbWUgPSAiamFrYXJ0YS5yZXNvdXJjZS5jY2kuQ29ubmVjdGlvbkZhY3RvcnkiLAogICAgICAgICAgICAgICAgdHJhbnNhY3Rpb25TdXBwb3J0ID0gVHJhbnNhY3Rpb25TdXBwb3J0TGV2ZWwuWEFUcmFuc2FjdGlvbiwKICAgICAgICAgICAgICAgIG1heFBvb2xTaXplID0gMTYsCiAgICAgICAgICAgICAgICBtaW5Qb29sU2l6ZSA9IDQsCiAgICAgICAgICAgICAgICByZXNvdXJjZUFkYXB0ZXIgPSAiI2NmZC1yYSIsCiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzID0geyJ0ZXN0TmFtZT1mb28ifQogICAgICAgICAgICksCi0gICAgICAgICAgCisKICAgICAgICAgICBAQ29ubmVjdGlvbkZhY3RvcnlEZWZpbml0aW9uKAotICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAibW9kdWxlLXNjb3BlIHJlc291cmNlIGRlZmluZWQgYnkgQENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbiIsIAotICAgICAgICAgICAgICAgbmFtZSA9ICJqYXZhOm1vZHVsZS9lbnYvSGVsbG9FSkJfQW5ub3RhdGlvbl9Db25uZWN0aW9uRmFjdG9yeSIsIAotICAgICAgICAgICAgICAgaW50ZXJmYWNlTmFtZSA9ICJqYWthcnRhLnJlc291cmNlLmNjaS5Db25uZWN0aW9uRmFjdG9yeSIsIAorICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAibW9kdWxlLXNjb3BlIHJlc291cmNlIGRlZmluZWQgYnkgQENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbiIsCisgICAgICAgICAgICAgICBuYW1lID0gImphdmE6bW9kdWxlL2Vudi9IZWxsb0VKQl9Bbm5vdGF0aW9uX0Nvbm5lY3Rpb25GYWN0b3J5IiwKKyAgICAgICAgICAgICAgIGludGVyZmFjZU5hbWUgPSAiamFrYXJ0YS5yZXNvdXJjZS5jY2kuQ29ubmVjdGlvbkZhY3RvcnkiLAogICAgICAgICAgICAgICAgcmVzb3VyY2VBZGFwdGVyID0gIiNjZmQtcmEiLAogICAgICAgICAgICAgICAgcHJvcGVydGllcyA9IHsidGVzdE5hbWU9Zm9vIn0KICAgICAgICAgICApLAotICAgICAgICAgIAorCiAgICAgICAgICAgQENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbigKLSAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gImNvbXBvbmVudC1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGJ5IEBDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb24iLCAKLSAgICAgICAgICAgICAgIG5hbWUgPSAiamF2YTpjb21wL2Vudi9IZWxsb0VKQl9Bbm5vdGF0aW9uX0Nvbm5lY3Rpb25GYWN0b3J5IiwgCi0gICAgICAgICAgICAgICBpbnRlcmZhY2VOYW1lID0gImpha2FydGEucmVzb3VyY2UuY2NpLkNvbm5lY3Rpb25GYWN0b3J5IiwgCisgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICJjb21wb25lbnQtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBieSBAQ29ubmVjdGlvbkZhY3RvcnlEZWZpbml0aW9uIiwKKyAgICAgICAgICAgICAgIG5hbWUgPSAiamF2YTpjb21wL2Vudi9IZWxsb0VKQl9Bbm5vdGF0aW9uX0Nvbm5lY3Rpb25GYWN0b3J5IiwKKyAgICAgICAgICAgICAgIGludGVyZmFjZU5hbWUgPSAiamFrYXJ0YS5yZXNvdXJjZS5jY2kuQ29ubmVjdGlvbkZhY3RvcnkiLAogICAgICAgICAgICAgICAgcmVzb3VyY2VBZGFwdGVyID0gIiNjZmQtcmEiLAogICAgICAgICAgICAgICAgcHJvcGVydGllcyA9IHsidGVzdE5hbWU9Zm9vIn0KICAgICAgICAgICApCkBAIC04MCw3ICs4MCw3IEBACiAKICAgICBAamFrYXJ0YS5hbm5vdGF0aW9uLlJlc291cmNlKG5hbWU9ImphdmE6Y29tcC9lbnYvSGVsbG9FSkJfQW5ub3RhdGlvbl9Db25uZWN0aW9uRmFjdG9yeSIpCiAgICAgQ29ubmVjdGlvbkZhY3RvcnkgY2Y7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBoZWxsbygpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbm5lY3Rpb24gYyA9IGNmLmdldENvbm5lY3Rpb24oKTsKQEAgLTEyMyw3ICsxMjMsNyBAQAogICAgICAgICBsb29rdXBDb25uZWN0aW9uRmFjdG9yeSgiamF2YTphcHAvZW52L0hlbGxvRUpCX0REX0Nvbm5lY3Rpb25GYWN0b3J5IiwgdHJ1ZSk7CiAgICAgICAgIGxvb2t1cENvbm5lY3Rpb25GYWN0b3J5KCJqYXZhOm1vZHVsZS9lbnYvSGVsbG9FSkJfRERfQ29ubmVjdGlvbkZhY3RvcnkiLCB0cnVlKTsKICAgICAgICAgbG9va3VwQ29ubmVjdGlvbkZhY3RvcnkoImphdmE6Y29tcC9lbnYvSGVsbG9FSkJfRERfQ29ubmVjdGlvbkZhY3RvcnkiLCB0cnVlKTsKLSAgICAgICAgCisKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb0VKQjo6aGVsbG8oKSIpOwogICAgIH0KIApAQCAtMTUwLDYgKzE1MCw2IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvZWpiL0hlbGxvU3RhdGVmdWxFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL2VqYi9IZWxsb1N0YXRlZnVsRUpCLmphdmEKaW5kZXggZjJlNzQwMC4uMzlmYTc0MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvZWpiL0hlbGxvU3RhdGVmdWxFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9lamIvSGVsbG9TdGF0ZWZ1bEVKQi5qYXZhCkBAIC0xMjAsNyArMTIwLDcgQEAKICAgICAgICAgbG9va3VwQ29ubmVjdGlvbkZhY3RvcnkoImphdmE6YXBwL2Vudi9IZWxsb0VKQl9ERF9Db25uZWN0aW9uRmFjdG9yeSIsIHRydWUpOwogICAgICAgICBsb29rdXBDb25uZWN0aW9uRmFjdG9yeSgiamF2YTptb2R1bGUvZW52L0hlbGxvRUpCX0REX0Nvbm5lY3Rpb25GYWN0b3J5IiwgdHJ1ZSk7CiAgICAgICAgIGxvb2t1cENvbm5lY3Rpb25GYWN0b3J5KCJqYXZhOmNvbXAvZW52L0hlbGxvRUpCX0REX0Nvbm5lY3Rpb25GYWN0b3J5IiwgZmFsc2UpOwotICAgICAgICAKKwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlZnVsRUpCIGRhdGFzb3VyY2UtZGVmaW5pdGlvbnMgU3VjY2VzcyIpOwogCiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9BYnN0cmFjdFJlc291cmNlQWRhcHRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9BYnN0cmFjdFJlc291cmNlQWRhcHRlci5qYXZhCmluZGV4IDA3YjlkNzguLjBlZmNjNWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvQWJzdHJhY3RSZXNvdXJjZUFkYXB0ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL0Fic3RyYWN0UmVzb3VyY2VBZGFwdGVyLmphdmEKQEAgLTIzLDcgKzIzLDcgQEAKICAgICBwcml2YXRlIFN0cmluZyB0ZXN0TmFtZTsKICAgICBwcm90ZWN0ZWQgYm9vbGVhbiBkZWJ1ZyA9IHRydWU7CiAKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGVzdE5hbWUoKSB7CiAgICAgICAgIHJldHVybiB0ZXN0TmFtZTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEKaW5kZXggNTU1MzNkNC4uZjU5YjJiMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YQpAQCAtMTgsNyArMTgsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIENvbnRyb2xzIHsKICAgICBwdWJsaWMgc3RhdGljIE9iamVjdCByZWFkeUxvY2sgPSBuZXcgT2JqZWN0KCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQppbmRleCAwMDM0NDY1Li5kY2EzNzlhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEKQEAgLTIxLDcgKzIxLDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBEZWxpdmVyeVdvcmsgaW1wbGVtZW50cyBXb3JrIHsKIApAQCAtMzAsNyArMzAsNyBAQAogICAgIHByaXZhdGUgU3RyaW5nIG9wOwogICAgIHByaXZhdGUgYm9vbGVhbiBrZWVwQ291bnQ7CiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50ZXIgPSAwOwotICAgIAorCiAgICAgcHVibGljIERlbGl2ZXJ5V29yayhNZXNzYWdlRW5kcG9pbnQgZXAsIGludCBudW1PZk1lc3NhZ2VzLCBTdHJpbmcgb3ApIHsKICAgICAgICAgdGhpcy5lcCA9IGVwOwogICAgICAgICB0aGlzLm51bSA9IG51bU9mTWVzc2FnZXM7CkBAIC0zOCw3ICszOCw3IEBACiAgICAgICAgIHRoaXMua2VlcENvdW50ID0gZmFsc2U7CiAgICAgfQogCi0gICAgcHVibGljIERlbGl2ZXJ5V29yayhNZXNzYWdlRW5kcG9pbnQgZXAsIGludCBudW1PZk1lc3NhZ2VzLCAKKyAgICBwdWJsaWMgRGVsaXZlcnlXb3JrKE1lc3NhZ2VFbmRwb2ludCBlcCwgaW50IG51bU9mTWVzc2FnZXMsCiAgICAgICAgICAgICBTdHJpbmcgb3AsIGJvb2xlYW4ga2VlcENvdW50KSB7CiAgICAgICAgIHRoaXMuZXAgPSBlcDsKICAgICAgICAgdGhpcy5udW0gPSBudW1PZk1lc3NhZ2VzOwpAQCAtNDksNyArNDksNyBAQAogICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKIAogICAgICAgICBkZWJ1ZygiRU5URVIuLi4iKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIC8vTWV0aG9kIG9uTWVzc2FnZSA9IGdldE9uTWVzc2FnZU1ldGhvZCgpOwogICAgICAgICAgICAgLy9lcC5iZWZvcmVEZWxpdmVyeShvbk1lc3NhZ2UpOwpAQCAtNzIsMTEgKzcyLDExIEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vZXAuYWZ0ZXJEZWxpdmVyeSgpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiTEVBVkUuLi4iKTsKICAgICB9CiAKQEAgLTg3LDE0ICs4NywxNCBAQAogICAgIH0KIAogLy8gICAgcHJpdmF0ZSBNZXRob2QgZ2V0T25NZXNzYWdlTWV0aG9kKCkgewotLy8gICAgICAgIAorLy8KIC8vICAgICAgICBNZXRob2Qgb25NZXNzYWdlTWV0aG9kID0gbnVsbDsKIC8vICAgICAgICB0cnkgewogLy8gICAgICAgICAgICBDbGFzcyBtc2dMaXN0ZW5lckNsYXNzID0gY29ubmVjdG9yLk15TWVzc2FnZUxpc3RlbmVyLmNsYXNzOwogLy8gICAgICAgICAgICBDbGFzc1tdIHBhcmFtVHlwZXMgPSB7IGphdmEubGFuZy5TdHJpbmcuY2xhc3MgfTsKLS8vICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0gCisvLyAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9CiAvLyAgICAgICAgICAgICAgICBtc2dMaXN0ZW5lckNsYXNzLmdldE1ldGhvZCgib25NZXNzYWdlIiwgcGFyYW1UeXBlcyk7Ci0vLyAgICAgICAgICAgIAorLy8KIC8vICAgICAgICB9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZXgpIHsKIC8vICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAvLyAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhCmluZGV4IDEwMGNhY2UuLmZhOTNmNjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgICAgICAgICAgZmxhZ1RvU3RyaW5nKGZsYWdzKSk7CiAgICAgfQogCi0gICAgCisKICAgICBwdWJsaWMgdm9pZCBmb3JnZXQoWGlkIHhpZCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLmZvcmdldDogIiArIHhpZFRvU3RyaW5nKHhpZCkpOwogICAgIH0KQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLnByZXBhcmU6ICIgKyB4aWRUb1N0cmluZyh4aWQpKTsKICAgICAgICAgcmV0dXJuIFhBUmVzb3VyY2UuWEFfT0s7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFhpZFtdIHJlY292ZXIoaW50IGZsYWcpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5yZWNvdmVyOiAiICsgZmxhZ1RvU3RyaW5nKGZsYWcpKTsKICAgICAgICAgcmV0dXJuIG51bGw7CkBAIC02Niw3ICs2Niw3IEBACiAgICAgcHVibGljIGJvb2xlYW4gc2V0VHJhbnNhY3Rpb25UaW1lb3V0KGludCBzZWNvbmRzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc3RhcnQoWGlkIHhpZCwgaW50IGZsYWdzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2Uuc3RhcnQ6ICIgKyB4aWRUb1N0cmluZyh4aWQpICsgIiwiICsKICAgICAgICAgICAgICAgICBmbGFnVG9TdHJpbmcoZmxhZ3MpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvTWVzc2FnZXMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvTWVzc2FnZXMuamF2YQppbmRleCBiNWIwZjAyLi40YzljMDEyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL01lc3NhZ2VzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhCkBAIC0yMSw3ICsyMSw3IEBACiAvKioKICAqIGNvbGxlY3Rpb24gb2YgbWVzc2FnZXMuCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBNZXNzYWdlcyB7CiAKQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICBTdHJpbmcgY29tbWFuZCAgPSBhcmdzWzBdOwogICAgICAgIFN0cmluZyBkZXN0TmFtZSA9IGFyZ3NbMV07CiAgICAgICAgU3RyaW5nIG1lc3NhZ2UgID0gYXJnc1syXTsKLSAgIAorCiAgICAgICAgaWYgKCEiYWRkIi5lcXVhbHMoY29tbWFuZCkpIHsKICAgICAgICAgICAgU3lzdGVtLmV4aXQoMSk7CiAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9NeUNvbm5lY3Rpb25GYWN0b3J5LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL015Q29ubmVjdGlvbkZhY3RvcnkuamF2YQppbmRleCA5ZjI0NjQ4Li45MjJlNzFkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL015Q29ubmVjdGlvbkZhY3RvcnkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL015Q29ubmVjdGlvbkZhY3RvcnkuamF2YQpAQCAtMzIsNyArMzIsNyBAQAogICAgIHByaXZhdGUgQ29ubmVjdGlvbk1hbmFnZXIgY207CiAgICAgcHJpdmF0ZSBNeU1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2Y7CiAgICAgcHJpdmF0ZSBSZWZlcmVuY2UgcmVmOwotICAgIAorCiAgICAgcHVibGljIE15Q29ubmVjdGlvbkZhY3RvcnkoTXlNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmLCBDb25uZWN0aW9uTWFuYWdlciBjbSkgewogICAgICAgICBzdXBlcigpOwogICAgICAgICB0aGlzLm1jZiA9IG1jZjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvTXlNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvTXlNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQppbmRleCBmMzRlODNiLi4yNDUwNmE0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL015TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9NeU1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCkBAIC00Myw3ICs0Myw3IEBACiAgICAgcHJpdmF0ZSBDb25uZWN0aW9uTWFuYWdlciBjbTsKICAgICBwcml2YXRlIFByaW50V3JpdGVyIHdyaXRlcjsKICAgICBwcml2YXRlIFRyYW5zYWN0aW9uU3VwcG9ydExldmVsIHRyYW5zYWN0aW9uU3VwcG9ydCA9IFRyYW5zYWN0aW9uU3VwcG9ydExldmVsLkxvY2FsVHJhbnNhY3Rpb247OwotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBnZXRUZXN0TmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHRlc3ROYW1lOwogICAgIH0KQEAgLTY4LDcgKzY4LDcgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgTWFuYWdlZENvbm5lY3Rpb24gY3JlYXRlTWFuYWdlZENvbm5lY3Rpb24oU3ViamVjdCBzdWJqZWN0LCAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIHJlcUluZm8pIAorICAgIHB1YmxpYyBNYW5hZ2VkQ29ubmVjdGlvbiBjcmVhdGVNYW5hZ2VkQ29ubmVjdGlvbihTdWJqZWN0IHN1YmplY3QsICBDb25uZWN0aW9uUmVxdWVzdEluZm8gcmVxSW5mbykKICAgICAgICAgICAgIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KQEAgLTc5LDcgKzc5LDcgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgTWFuYWdlZENvbm5lY3Rpb24gbWF0Y2hNYW5hZ2VkQ29ubmVjdGlvbnMoU2V0IGNhbmRpZGF0ZXMsIFN1YmplY3Qgc3ViLCAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIHJlcUluZm8pIAorICAgIHB1YmxpYyBNYW5hZ2VkQ29ubmVjdGlvbiBtYXRjaE1hbmFnZWRDb25uZWN0aW9ucyhTZXQgY2FuZGlkYXRlcywgU3ViamVjdCBzdWIsICBDb25uZWN0aW9uUmVxdWVzdEluZm8gcmVxSW5mbykKICAgICAgICAgICAgIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvTXlXb3JrLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL015V29yay5qYXZhCmluZGV4IDYxNDM4MWUuLjQ0ODk5YTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvTXlXb3JrLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9NeVdvcmsuamF2YQpAQCAtMjMsNyArMjMsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIE15V29yayBpbXBsZW1lbnRzIFdvcmsgewogCkBAIC0zMSw3ICszMSw3IEBACiAgICAgcHJpdmF0ZSBib29sZWFuIHN0b3AgPSBmYWxzZTsKICAgICBwcml2YXRlIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZmFjdG9yeTsKICAgICBwcml2YXRlIFdvcmtNYW5hZ2VyIHdtOwotICAgIAorCiAgICAgcHVibGljIE15V29yaygKICAgICAgICAgICAgIFN0cmluZyBuYW1lLCBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGZhY3RvcnksIFdvcmtNYW5hZ2VyIHdtKSB7CiAgICAgICAgIHRoaXMuZmFjdG9yeSA9IGZhY3Rvcnk7CkBAIC00OSw3ICs0OSw3IEBACiAgICAgICAgICAgICB0cnkgewogCiAgICAgICAgICAgICAgICAgTWV0aG9kIG9uTWVzc2FnZSA9IGdldE9uTWVzc2FnZU1ldGhvZCgpOwotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaXNEZWxpdmVyeVRyYW5zYWN0ZWQgPSAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpc0RlbGl2ZXJ5VHJhbnNhY3RlZCA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3J5LmlzRGVsaXZlcnlUcmFuc2FjdGVkKG9uTWVzc2FnZSkpOwogCiAgICAgICAgICAgICAgICAgLyoKQEAgLTY2LDcgKzY2LDcgQEAKICAgICAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiTEVBVkUuLi4iKTsKICAgICB9CiAKQEAgLTgxLDE0ICs4MSwxNCBAQAogICAgIH0KIAogICAgIHB1YmxpYyBNZXRob2QgZ2V0T25NZXNzYWdlTWV0aG9kKCkgewotICAgICAgICAKKwogICAgICAgICBNZXRob2Qgb25NZXNzYWdlTWV0aG9kID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENsYXNzIG1zZ0xpc3RlbmVyQ2xhc3MgPSBjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIuY2xhc3M7CiAgICAgICAgICAgICBDbGFzc1tdIHBhcmFtVHlwZXMgPSB7IGphdmEubGFuZy5TdHJpbmcuY2xhc3MgfTsKLSAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9IAorICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0KICAgICAgICAgICAgICAgICBtc2dMaXN0ZW5lckNsYXNzLmdldE1ldGhvZCgib25NZXNzYWdlIiwgcGFyYW1UeXBlcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEKaW5kZXggNTEyZTVjNi4uNGI1ZTVmMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YQpAQCAtMjUsMTIgKzI1LDEyIEBACiAgKiBzbyB0aGF0IHRoZSBhcHAgc2VydmVyIGNhbiBpbnN0YW50aWF0ZSBhbmQgY29uZmlndXJlCiAgKiBpdCBhdCB0aGUgcnVudGltZS4KICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogQEFjdGl2YXRpb24oCiAgICAgICAgIG1lc3NhZ2VMaXN0ZW5lcnMgPSB7Y29ubmVjdG9yLk15TWVzc2FnZUxpc3RlbmVyLmNsYXNzfQogKQotcHVibGljIGNsYXNzIFNpbXBsZUFjdGl2YXRpb25TcGVjIAorcHVibGljIGNsYXNzIFNpbXBsZUFjdGl2YXRpb25TcGVjCiAgICAgaW1wbGVtZW50cyBBY3RpdmF0aW9uU3BlYywgamF2YS5pby5TZXJpYWxpemFibGUgewogCiAgICAgcHJpdmF0ZSBTdHJpbmcgZGVzdGluYXRpb25OYW1lOwpAQCAtNDcsNyArNDcsNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzdGluYXRpb25OYW1lICgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZGVzdGluYXRpb25OYW1lOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldERlc3RpbmF0aW9uTmFtZSAoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgZGVidWcoInNldERlc3RpbmF0aW9uTmFtZSgpIGNhbGxlZC4uLiBuYW1lID0gIiArIG5hbWUpOwogICAgICAgICB0aGlzLmRlc3RpbmF0aW9uTmFtZSA9IG5hbWU7CkBAIC01Niw3ICs1Niw3IEBACiAgICAgcHVibGljIFN0cmluZyBnZXREZXN0aW5hdGlvblR5cGUoKSB7CiAgICAgICAgIHJldHVybiB0aGlzLmRlc3RpbmF0aW9uVHlwZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXREZXN0aW5hdGlvblR5cGUgKFN0cmluZyB0eXBlKSB7CiAgICAgICAgIGRlYnVnKCJzZXREZXN0aW5hdGlvblR5cGUgKCkgY2FsbGVkLi4uIHR5cGUgPSAiICsgdHlwZSk7CiAgICAgICAgIHRoaXMuZGVzdGluYXRpb25UeXBlPSB0eXBlOwpAQCAtNjUsNyArNjUsNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGVzdFByb3AoKSB7CiAgICAgICAgIHJldHVybiB0aGlzLnRlc3RQcm9wOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFRlc3RQcm9wIChTdHJpbmcgdGVzdFByb3ApIHsKICAgICAgICAgZGVidWcoInNldFRlc3RQcm9wICgpIGNhbGxlZC4uLiB0ZXN0UHJvcCA9ICIgKyB0ZXN0UHJvcCk7CiAgICAgICAgIHRoaXMudGVzdFByb3AgPSB0ZXN0UHJvcDsKQEAgLTc0LDcgKzc0LDcgQEAKICAgICBwdWJsaWMgSW50ZWdlciBnZXRUZXN0SW50ZWdlclByb3AoKSB7CiAgICAgICAgIHJldHVybiB0aGlzLnRlc3RJbnRlZ2VyUHJvcDsKICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRUZXN0SW50ZWdlclByb3AgKEludGVnZXIgdGVzdFByb3AxKSB7CiAgICAgICAgIGRlYnVnKCJzZXRUZXN0SW50ZWdlclByb3AgKCkgY2FsbGVkLi4uIHRlc3RJbnRlZ2VyUHJvcCA9ICIgKyB0ZXN0UHJvcDEpOwogICAgICAgICB0aGlzLnRlc3RJbnRlZ2VyUHJvcCA9IHRlc3RQcm9wMTsKQEAgLTk4LDcgKzk4LDcgQEAKIAogICAgICAgfQogCi0gICB9IAorICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGRlYnVnIChTdHJpbmcgbWVzc2FnZSkKICAgICB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbC5qYXZhCmluZGV4IDI1NjExZWQuLjNmZDlkZWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbC5qYXZhCkBAIC0yOSwxNCArMjksMTQgQEAKIAogLyoqCiAgKiBUaGlzIGlzIGEgc2FtcGxlIHJlc291cmNlIGFkYXB0ZXIKLSAqIAorICoKICAqIEBhdXRob3IgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIEBDb25uZWN0b3IoCiAvKiBtb2R1bGVOYW1lPSJNeSBTaW1wbGUgUkFSIiwgKi8KLSAgICBkaXNwbGF5TmFtZSA9ICJTaW1wbGUgUmVzb3VyY2UgQWRhcHRlciIsIAotICAgIHZlbmRvck5hbWUgPSAiSmF2YSBTb2Z0d2FyZSIsIAotICAgIGVpc1R5cGUgPSAiR2VuZXJpYyBUeXBlIiwgCisgICAgZGlzcGxheU5hbWUgPSAiU2ltcGxlIFJlc291cmNlIEFkYXB0ZXIiLAorICAgIHZlbmRvck5hbWUgPSAiSmF2YSBTb2Z0d2FyZSIsCisgICAgZWlzVHlwZSA9ICJHZW5lcmljIFR5cGUiLAogICAgIHZlcnNpb24gPSAiMS4wQWxwaGEiLAogICAgIHRyYW5zYWN0aW9uU3VwcG9ydD1UcmFuc2FjdGlvblN1cHBvcnRMZXZlbC5YQVRyYW5zYWN0aW9uKQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL1Rlc3RXTVdvcmsuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvVGVzdFdNV29yay5qYXZhCmluZGV4IGVlMGZhZTkuLmUyNDg1MDYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvVGVzdFdNV29yay5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvVGVzdFdNV29yay5qYXZhCkBAIC0yMyw3ICsyMyw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgVGVzdFdNV29yayBpbXBsZW1lbnRzIFdvcmsgewogCkBAIC0zNyw4ICszNyw4IEBACiAgICAgcHVibGljIFRlc3RXTVdvcmsoaW50IGlkLCBib29sZWFuIGlzUm9ndWUpIHsKICAgICAgICAgdGhpcyhpZCwgaXNSb2d1ZSwgZmFsc2UsIG51bGwpOwogICAgIH0KLSAgICAKLSAgICBwdWJsaWMgVGVzdFdNV29yayhpbnQgaWQsIGJvb2xlYW4gaXNSb2d1ZSwgCisKKyAgICBwdWJsaWMgVGVzdFdNV29yayhpbnQgaWQsIGJvb2xlYW4gaXNSb2d1ZSwKICAgICAgICAgICAgIGJvb2xlYW4gZG9OZXN0LCBFeGVjdXRpb25Db250ZXh0IGN0eCkgewogICAgICAgICB0aGlzLmlkID0gaWQ7CiAgICAgICAgIHRoaXMuaXNSb2d1ZSA9IGlzUm9ndWU7CkBAIC03MiwxMCArNzIsMTAgQEAKICAgICAgICAgICAgIH0gY2F0Y2ggKFdvcmtFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgICAgICBpZiAoZXguZ2V0RXJyb3JDb2RlKCkuZXF1YWxzKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdvcmtFeGNlcHRpb24uVFhfQ09OQ1VSUkVOVF9XT1JLX0RJU0FMTE9XRUQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsgCisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUEFTUzogQ0FVR0hUIEVYUEVDVEVEID0gIiArIGV4LmdldEVycm9yQ29kZSgpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArIAorICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZBSUw6IENBVUdIVCBVTkVYUEVDVEVEID0gIiArIGV4LmdldEVycm9yQ29kZSgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC04Nyw3ICs4Nyw3IEBACiAgICAgICAgICAgICAgICAgZWMuc2V0VHJhbnNhY3Rpb25UaW1lb3V0KDUqMTAwMCk7IC8vNSBzZWNvbmRzCiAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKG5lc3RlZFdvcmssIDEqMTAwMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAiRkFJTDogQ0FVR0hUIFVORVhQRUNURUQgPSAiICsgZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9WM1dvcmtEaXNwYXRjaGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL1YzV29ya0Rpc3BhdGNoZXIuamF2YQppbmRleCA4YWRmM2NjLi40YjQzNzgzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL1YzV29ya0Rpc3BhdGNoZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL1YzV29ya0Rpc3BhdGNoZXIuamF2YQpAQCAtNDMsNyArNDMsNyBAQAogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnQgZXAgPSBmYWN0b3J5LmNyZWF0ZUVuZHBvaW50KG5ldyBGYWtlWEFSZXNvdXJjZSgpKTsKICAgICAgICAgICAgIGludCBudW1PZk1lc3NhZ2VzID0gMTsKQEAgLTcyLDcgKzcyLDcgQEAKICAgICAgICAgICAgIGRlYnVnKCJWM1dvcmtEaXNwYXRjaGVyIGNhbGxpbmcgRE9ORSgpIik7CiAgICAgICAgICAgICBkb25lKCk7CiAgICAgICAgICAgICBkZWJ1ZygiVjNXb3JrRGlzcGF0Y2hlciBmaW5pc2hlZCBjYWxsaW5nIERPTkUoKSIpOwotICAgICAgICAgICAgCisKICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQppbmRleCA0MjI0OWRjLi5hMTQ0NDNhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhCkBAIC0zMiw3ICszMiw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgV29ya0Rpc3BhdGNoZXIgaW1wbGVtZW50cyBXb3JrIHsKIApAQCAtNDMsMTEgKzQzLDExIEBACiAgICAgcHJvdGVjdGVkIEFjdGl2YXRpb25TcGVjIHNwZWM7CiAgICAgcHJvdGVjdGVkIFdvcmtNYW5hZ2VyIHdtOwogICAgIHByb3RlY3RlZCBYQVRlcm1pbmF0b3IgeGE7Ci0gICAgCisKICAgICBwdWJsaWMgV29ya0Rpc3BhdGNoZXIoCiAgICAgICAgICAgICBTdHJpbmcgaWQsCiAgICAgICAgICAgICBCb290c3RyYXBDb250ZXh0IGN0eCwKLSAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZmFjdG9yeSwgCisgICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGZhY3RvcnksCiAgICAgICAgICAgICBBY3RpdmF0aW9uU3BlYyBzcGVjKSB7CiAgICAgICAgIHRoaXMuaWQgICAgICA9IGlkOwogICAgICAgICB0aGlzLmN0eCAgICAgPSBjdHg7CkBAIC02MCw3ICs2MCw3IEBACiAgICAgcHVibGljIHZvaWQgcnVuKCkgewogCiAgICAgICAgIGRlYnVnKCJFTlRFUi4uLiIpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgc3luY2hyb25pemVkIChDb250cm9scy5yZWFkeUxvY2spIHsKICAgICAgICAgICAgICAgICBkZWJ1ZygiV0FJVC4uLiIpOwpAQCAtODIsMjYgKzgyLDI2IEBACiAgICAgICAgICAgICB0cnkgewogCiAgICAgICAgICAgICAgICAgTWV0aG9kIG9uTWVzc2FnZSA9IGdldE9uTWVzc2FnZU1ldGhvZCgpOwotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaXNEZWxpdmVyeVRyYW5zYWN0ZWQgPSAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpc0RlbGl2ZXJ5VHJhbnNhY3RlZCA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yeS5pc0RlbGl2ZXJ5VHJhbnNhY3RlZChvbk1lc3NhZ2UpKTsKIAogICAgICAgICAgICAgICAgIGlmICghZmFjdG9yeS5pc0RlbGl2ZXJ5VHJhbnNhY3RlZChvbk1lc3NhZ2UpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vTWVzc2FnZUVuZHBvaW50IGVwID0gZmFjdG9yeS5jcmVhdGVFbmRwb2ludChudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgLy9EZWxpdmVyeVdvcmsgZCA9IG5ldyBEZWxpdmVyeVdvcmsoIk5PX1RYIiwgZXApOyAKKyAgICAgICAgICAgICAgICAgICAgLy9EZWxpdmVyeVdvcmsgZCA9IG5ldyBEZWxpdmVyeVdvcmsoIk5PX1RYIiwgZXApOwogICAgICAgICAgICAgICAgICAgICAvL3dtLmRvV29yayhkLCAwLCBudWxsLCBudWxsKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvL01lc3NhZ2VFbmRwb2ludCBlcCA9IGZhY3RvcnkuY3JlYXRlRW5kcG9pbnQobnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludCBlcCA9IGZhY3RvcnkuY3JlYXRlRW5kcG9pbnQobmV3IEZha2VYQVJlc291cmNlKCkpOwogICAgICAgICAgICAgICAgICAgICBpbnQgbnVtT2ZNZXNzYWdlcyA9IDU7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vaW1wb3J0aW5nIHRyYW5zYWN0aW9uCiAKICAgICAgICAgICAgICAgICAgICAgLy93cml0ZS9jb21taXQKICAgICAgICAgICAgICAgICAgICAgRXhlY3V0aW9uQ29udGV4dCBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKIAotICAgICAgICAgICAgICAgICAgICBEZWxpdmVyeVdvcmsgdyA9IAorICAgICAgICAgICAgICAgICAgICBEZWxpdmVyeVdvcmsgdyA9CiAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRGVsaXZlcnlXb3JrKGVwLCBudW1PZk1lc3NhZ2VzLCAiV1JJVEUiKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgeGEuY29tbWl0KGVjLmdldFhpZCgpLCB0cnVlKTsKQEAgLTEwOSw3ICsxMDksNyBAQAogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiRE9ORSBXUklURSBUTyBEQiIpOwogICAgICAgICAgICAgICAgICAgICBDb250cm9scy5leHBlY3RlZFJlc3VsdHMgPSBudW1PZk1lc3NhZ2VzOwogICAgICAgICAgICAgICAgICAgICBub3RpZnlBbmRXYWl0KCk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vZGVsZXRlL3JvbGxiYWNrCiAgICAgICAgICAgICAgICAgICAgIGVjID0gc3RhcnRUeCgpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiU3RhcnQgVFggLSAiICsgZWMuZ2V0WGlkKCkpOwpAQCAtMTI1LDcgKzEyNSw3IEBACiAgICAgICAgICAgICAgICAgICAgIC8vZGVsZXRlL2NvbW1pdAogICAgICAgICAgICAgICAgICAgICBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgdyA9IG5ldyBEZWxpdmVyeVdvcmsoZXAsIG51bU9mTWVzc2FnZXMsICJERUxFVEUiKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgeGEuY29tbWl0KGVjLmdldFhpZCgpLCB0cnVlKTsKQEAgLTE0OSw3ICsxNDksNyBAQAogICAgICAgICAgICAgICAgICAgICAvL2RlbGV0ZS9jb21taXQKICAgICAgICAgICAgICAgICAgICAgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIHcgPSBuZXcgRGVsaXZlcnlXb3JrKGVwLCBudW1PZk1lc3NhZ2VzLCAiREVMRVRFIik7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgdHJ1ZSk7CkBAIC0xOTQsNyArMTk0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgaWYgKFhBUmVzb3VyY2UuWEFfT0sgPT0geGEucHJlcGFyZShlYy5nZXRYaWQoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgZmFsc2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlhBIFBSRVBBUkUvQ09NTUlULiBET05FIFdSSVRFIFRPIERCICIpOwpAQCAtMjA2LDE5ICsyMDYsMTkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xzLmV4cGVjdGVkUmVzdWx0cyA9IDM7CiAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZnlBbmRXYWl0KCk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy9kZWxldGUgYWxsLgogICAgICAgICAgICAgICAgICAgICBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgdyA9IG5ldyBEZWxpdmVyeVdvcmsoZXAsIDEsICJERUxFVEVfQUxMIik7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJET05FIERFTEVURSBBTEwgRlJPTSBEQiIpOwogICAgICAgICAgICAgICAgICAgICBDb250cm9scy5leHBlY3RlZFJlc3VsdHMgPSAwOwogICAgICAgICAgICAgICAgICAgICBub3RpZnlBbmRXYWl0KCk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTsKICAgICAgICAgICAgICAgICB9CiAKQEAgLTI0NSw3ICsyNDUsNyBAQAogICAgICAgICAgICAgICAgIGRvbmUoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiTEVBVkUuLi4iKTsKICAgICB9CiAKQEAgLTI2MCwxNCArMjYwLDE0IEBACiAgICAgfQogCiAgICAgcHVibGljIE1ldGhvZCBnZXRPbk1lc3NhZ2VNZXRob2QoKSB7Ci0gICAgICAgIAorCiAgICAgICAgIE1ldGhvZCBvbk1lc3NhZ2VNZXRob2QgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ2xhc3MgbXNnTGlzdGVuZXJDbGFzcyA9IGNvbm5lY3Rvci5NeU1lc3NhZ2VMaXN0ZW5lci5jbGFzczsKICAgICAgICAgICAgIENsYXNzW10gcGFyYW1UeXBlcyA9IHsgamF2YS5sYW5nLlN0cmluZy5jbGFzcyB9OwotICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0gCisgICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPQogICAgICAgICAgICAgICAgIG1zZ0xpc3RlbmVyQ2xhc3MuZ2V0TWV0aG9kKCJvbk1lc3NhZ2UiLCBwYXJhbVR5cGVzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KQEAgLTI5MCwxMyArMjkwLDEzIEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAvL1NsZWVwIGZvciA1IHNlY29uZHMKICAgICAgICAgICAgIC8vVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCg1KjEwMDApOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHN5bmNocm9uaXplZChDb250cm9scy5yZWFkeUxvY2spIHsKICAgICAgICAgICAgICAgICAvL05vdGlmeSB0aGUgY2xpZW50IHRvIGNoZWNrIHRoZSByZXN1bHRzCi0gICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLm5vdGlmeUFsbCgpOyAKKyAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2subm90aWZ5QWxsKCk7CiAKICAgICAgICAgICAgICAgICAvL1dhaXQgdW50aWwgcmVzdWx0cyBhcmUgdmVyaWZpZWQgYnkgdGhlIGNsaWVudAotICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay53YWl0KCk7IAorICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay53YWl0KCk7CiAKICAgICAgICAgICAgICAgICBpZiAoc3RvcCkgewogICAgICAgICAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YQppbmRleCA3N2RiZjM0Li42YmQ5ZTU3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZW1iZWRyYS9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEKQEAgLTM2LDggKzM2LDggQEAKICAgICBwdWJsaWMgaW50IGJyYW5jaFF1YWxpZmllcjsKICAgICBwdWJsaWMgaW50IGdsb2JhbFR4SUQ7CiAKLSAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYR1RSSURTSVpFPSA2NDsgCi0gICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEJRVUFMU0laRT0gNjQ7IAorICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhHVFJJRFNJWkU9IDY0OworICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhCUVVBTFNJWkU9IDY0OwogCiAgICAgcHVibGljIFhJRCgpIHsKICAgICAgICAgaW50IGZvbyA9IElEKys7CkBAIC01NSwxMCArNTUsMTAgQEAKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgICAgICAgICAgICAgICAgIC8vIEl0IGNhbid0IGJlIGVxdWFsCiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgb3RoZXIgPSAoWElEKW87ICAgICAgICAgICAgICAgICAgIC8vIFRoZSBvdGhlciBYSUQsIG5vdyBwcm9wZXJseSBjYXN0Ci0gICAgICAgIAotICAgICAgICBpZiAodGhpcy5mb3JtYXRJRCA9PSBvdGhlci5mb3JtYXRJRCAKKworICAgICAgICBpZiAodGhpcy5mb3JtYXRJRCA9PSBvdGhlci5mb3JtYXRJRAogICAgICAgICAgICAgICAgICYmIHRoaXMuYnJhbmNoUXVhbGlmaWVyID09IG90aGVyLmJyYW5jaFF1YWxpZmllcgogICAgICAgICAgICAgICAgICYmIHRoaXMuZ2xvYmFsVHhJRCA9PSBvdGhlci5nbG9iYWxUeElEKSB7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTk4LDcgKzk4LDcgQEAKICAgICAgICAgICAgICAgICAiZm9ybWF0SUQoIiAgICAgKyBmb3JtYXRJRCAgICAgKyAiKSwgIiArCiAgICAgICAgICAgICAgICAgImJyYW5jaFF1YWxpZmllciAoIiArIGJyYW5jaFF1YWxpZmllciArICIpLCAiICsKICAgICAgICAgICAgICAgICAiZ2xvYmFsVHhJRCgiICsgZ2xvYmFsVHhJRCArICIpfSIpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gczsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lbWJlZHJhL3NlcnZsZXQvU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvc2VydmxldC9TZXJ2bGV0LmphdmEKaW5kZXggYWQ2ODJjMi4uNTI5ZDcxNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvc2VydmxldC9TZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVtYmVkcmEvc2VydmxldC9TZXJ2bGV0LmphdmEKQEAgLTcwLDcgKzcwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIG1pblBvb2xTaXplID0gNCwKICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMgPSB7InRlc3ROYW1lPWZvbyJ9CiAgICAgICAgICAgICAgICAgKSwKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIEBDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0ibW9kdWxlLXNjb3BlIHJlc291cmNlIGRlZmluZWQgYnkgQENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gImphdmE6bW9kdWxlL2Vudi9TZXJ2bGV0X0Nvbm5lY3Rpb25GYWN0b3J5IiwKQEAgLTc4LDcgKzc4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlQWRhcHRlciA9ICIjY2ZkLXJhIiwKICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMgPSB7InRlc3ROYW1lPWZvbyJ9CiAgICAgICAgICAgICAgICAgKSwKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIEBDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0iY29tcG9uZW50LXNjb3BlIHJlc291cmNlIGRlZmluZWQgYnkgQENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gImphdmE6Y29tcC9lbnYvU2VydmxldF9Db25uZWN0aW9uRmFjdG9yeSIsCkBAIC05Myw3ICs5Myw3IEBACiAKICAgICBARUpCCiAgICAgcHJpdmF0ZSAgSGVsbG8gaGVsbG9TdGF0ZWxlc3M7Ci0gICAgCisKICAgICBARUpCKGJlYW5OYW1lID0gIkhlbGxvU3RhdGVmdWxFSkIiKQogICAgIHByaXZhdGUgIEhlbGxvU3RhdGVmdWwgaGVsbG9TdGF0ZWZ1bDsKIApAQCAtMTA5LDcgKzEwOSw3IEBACiAKICAgICAgICAgcmVzcC5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3AuZ2V0V3JpdGVyKCk7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAKICAgICAgICAgICAgIC8vIENvbm5lY3Rpb24tRmFjdG9yeS1EZWZpbml0aW9uIHRocm91Z2ggQW5ub3RhdGlvbgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vYnVpbGQucHJvcGVydGllcwppbmRleCBmZmZhYmMwLi4xYzg2YTlhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjMgKzE1LDIzIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vYnVpbGQueG1sCmluZGV4IGRmNGQyNDQuLjY4OTc2MjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL2J1aWxkLnhtbApAQCAtMzcsMjUgKzM3LDI1IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImluZm8iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAJPGVjaG8gbWVzc2FnZT0iYnVpbGQuY2xhc3Nlcy5kaXIgaXMgJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KLSAgICAJPGVjaG8gbWVzc2FnZT0iczFhc3Rlc3QuY2xhc3NwYXRoIGlzICR7czFhc3Rlc3QuY2xhc3NwYXRofSIvPgorICAgICAgICA8ZWNobyBtZXNzYWdlPSJidWlsZC5jbGFzc2VzLmRpciBpcyAke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgorICAgICAgICA8ZWNobyBtZXNzYWdlPSJzMWFzdGVzdC5jbGFzc3BhdGggaXMgJHtzMWFzdGVzdC5jbGFzc3BhdGh9Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUtdXQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CiAgICAgICA8amF2YWMgc3JjZGlyPSJ1dCIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCi0gICAgICAJICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9qdW5pdC5qYXI6JHtzMWFzdGVzdC5jbGFzc3BhdGh9IgotICAgICAgCSAgICBkZWJ1Zz0ib24iCisgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9qdW5pdC5qYXI6JHtzMWFzdGVzdC5jbGFzc3BhdGh9IgorICAgICAgICAgICAgICBkZWJ1Zz0ib24iCiAgICAgICAgICAgICBpbmNsdWRlYW50cnVudGltZT0iZmFsc2UiCi0gICAgICAJICAgIGZhaWxvbmVycm9yPSJ0cnVlIi8+CisgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIi8+CiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC11dCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPCEtLSBidWlsZCBhIHNwZWNpYWwgZWFyIHdoaWNoIG9ubHkgaW5jbHVkZXMgZGVwbG95bWVudCBkZXNjcmlwdG9ycy0tPgogICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+CiAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0vdGVtcCIvPgotICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4gICAKLSAgICAgIDxjb3B5IGZpbGU9IiR7YmFzZWRpcn0vZGVzY3JpcHRvci91dC1hcHBsaWNhdGlvbi54bWwiIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIiAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+IAotICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC1VVC5lYXIiPiAKKyAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CisgICAgICA8Y29weSBmaWxlPSIke2Jhc2VkaXJ9L2Rlc2NyaXB0b3IvdXQtYXBwbGljYXRpb24ueG1sIiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC1VVC5lYXIiPgogICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSI+CiAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IiouamFyIi8+CiAgICAgICAgIDwvZmlsZXNldD4KQEAgLTcxLDcgKzcxLDcgQEAKICAgICAgIDx1bmphciBzcmM9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLVVULmVhciIgZGVzdD0iJHthc3NlbWJsZS5kaXJ9L3RlbXAvJHthcHBuYW1lfUFwcC1VVCIvPgogCiAgICAgPC90YXJnZXQ+Ci0gICAgCQorCiAgICAgPHRhcmdldCBuYW1lPSJydW4tdXQiIGRlcGVuZHM9ImNvbXBpbGUtdXQiPgogICAgICAgPGp1bml0IHByaW50c3VtbWFyeT0ieWVzIiBoYWx0b25lcnJvcj0ibm8iIGhhbHRvbmZhaWx1cmU9Im5vIiBmb3JrPSJ0cnVlIj4KICAgICAgICAgPGZvcm1hdHRlciB0eXBlPSJwbGFpbiIgdXNlZmlsZT0iZmFsc2UiLz4KQEAgLTk1LDcgKzk1LDcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgIAkgIDxlY2hvIG1lc3NhZ2U9ImFzc2VtYmxlLmRpciA9ICR7YXNzZW1ibGUuZGlyfSIvPgorICAgICAgICAgIDxlY2hvIG1lc3NhZ2U9ImFzc2VtYmxlLmRpciA9ICR7YXNzZW1ibGUuZGlyfSIvPgogICAgICAgICA8IS0tYnVpbGQgYW5kIHBhY2thZ2UgLndhciBmaXJzdCBzbyBpdCBkb2Vzbid0IGNvbnRhaW4gZWpiIGJlYW4gIS0tPgogICAgICAgICA8IS0tY2xhc3NlcyB0aGF0IGhhdmUgQFN0YXRlbGVzcy9AU3RhdGV1bCAhLS0+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgpAQCAtMTE4LDExICsxMTgsMTEgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iKiovSGVsbG8qKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgICAgIAorCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZWFyLWNvbW1vbiIvPgogCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtdXQiLz4KLSAgICAgICAgCisKICAgICAgICAgPGFudCBkaXI9InJhIiB0YXJnZXQ9ImFsbCIvPgogICAgIDwvdGFyZ2V0PgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBhODMxYjRjLi42Nzg4Y2NjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTU4LDcgKzU4LDcgQEAKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGNOYW1lLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgfWNhdGNoKEV4Y2VwdGlvbiBlKXsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRjTmFtZSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIHRocm93IGU7CkBAIC03OSw3ICs3OSw3IEBACiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gYzEuZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgaW5wdXQgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKLSAgICAgICAgCisKICAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihsaW5lKTsKICAgICAgICAgaWYgKGNvZGUgIT0gMjAwKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vZGVzY3JpcHRvci9jb25uZWN0b3ItcmVzb3VyY2UueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL2Rlc2NyaXB0b3IvY29ubmVjdG9yLXJlc291cmNlLnhtbAppbmRleCAxNDRhYmQ4Li4zMTlkNmFhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vZGVzY3JpcHRvci9jb25uZWN0b3ItcmVzb3VyY2UueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9kZXNjcmlwdG9yL2Nvbm5lY3Rvci1yZXNvdXJjZS54bWwKQEAgLTIwLDEyICsyMCwxMiBAQAogPGNvbm5lY3Rpb24tZmFjdG9yeSB4bWxucz0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSIKICAgICAgICAgICAgICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUgaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS9qYXZhZWVfNy54c2Q+Ci0JPGRlc2NyaXB0aW9uPmdsb2JhbC1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGluIGFwcGxpY2F0aW9uIEREPC9kZXNjcmlwdGlvbj4KLQk8bmFtZT5qYXZhOmdsb2JhbC9lbnYvQXBwbGljYXRpb25fTGV2ZWxfQ29ubmVjdGlvbkZhY3Rvcnk8L25hbWU+Ci0JPGludGVyZmFjZS1uYW1lPmpha2FydGEucmVzb3VyY2UuY2NpLkNvbm5lY3Rpb25GYWN0b3J5PC9pbnRlcmZhY2UtbmFtZT4KLQk8cmVzb3VyY2UtYWRhcHRlcj5jZmQtcmE8L3Jlc291cmNlLWFkYXB0ZXI+Ci0JPHByb3BlcnR5PgotCQk8bmFtZT50cmFuc2FjdGlvblN1cHBvcnQ8L25hbWU+Ci0JCTx2YWx1ZT5Mb2NhbFRyYW5zYWN0aW9uPC92YWx1ZT4KLQk8L3Byb3BlcnR5PgorICAgIDxkZXNjcmlwdGlvbj5nbG9iYWwtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBpbiBhcHBsaWNhdGlvbiBERDwvZGVzY3JpcHRpb24+CisgICAgPG5hbWU+amF2YTpnbG9iYWwvZW52L0FwcGxpY2F0aW9uX0xldmVsX0Nvbm5lY3Rpb25GYWN0b3J5PC9uYW1lPgorICAgIDxpbnRlcmZhY2UtbmFtZT5qYWthcnRhLnJlc291cmNlLmNjaS5Db25uZWN0aW9uRmFjdG9yeTwvaW50ZXJmYWNlLW5hbWU+CisgICAgPHJlc291cmNlLWFkYXB0ZXI+Y2ZkLXJhPC9yZXNvdXJjZS1hZGFwdGVyPgorICAgIDxwcm9wZXJ0eT4KKyAgICAgICAgPG5hbWU+dHJhbnNhY3Rpb25TdXBwb3J0PC9uYW1lPgorICAgICAgICA8dmFsdWU+TG9jYWxUcmFuc2FjdGlvbjwvdmFsdWU+CisgICAgPC9wcm9wZXJ0eT4KIDwvY29ubmVjdGlvbi1mYWN0b3J5PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL2Rlc2NyaXB0b3IvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCA4NTkzZGU2Li42YzJmZTI2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vZGVzY3JpcHRvci9lamItamFyLnhtbApAQCAtMTgsOSArMTgsOSBAQAogLS0+CiAKIDxlamItamFyIHhtbG5zPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlIgotICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCi0gICAgICAgICBtZXRhZGF0YS1jb21wbGV0ZT0iZmFsc2UiIAotICAgICAgICAgdmVyc2lvbj0iMy4yIiAKKyAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgICAgICBtZXRhZGF0YS1jb21wbGV0ZT0iZmFsc2UiCisgICAgICAgICB2ZXJzaW9uPSIzLjIiCiAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUgaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS9lamItamFyXzNfMi54c2QiPgogICA8bW9kdWxlLW5hbWU+Y29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZWpiPC9tb2R1bGUtbmFtZT4KICAgPGVudGVycHJpc2UtYmVhbnM+CkBAIC0yOSw3ICsyOSw3IEBACiAgICAgICA8ZWpiLW5hbWU+SGVsbG9TdGF0ZWZ1bEVKQjwvZWpiLW5hbWU+CiAgICAgICA8YnVzaW5lc3MtbG9jYWw+Y29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5oZWxsby5zZXNzaW9uMy5IZWxsb1N0YXRlZnVsPC9idXNpbmVzcy1sb2NhbD4KICAgICAgIDxlamItY2xhc3M+Y29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5oZWxsby5zZXNzaW9uMy5IZWxsb1N0YXRlZnVsRUpCPC9lamItY2xhc3M+Ci0gICAgICAKKwogICAgICAgPGNvbm5lY3Rpb24tZmFjdG9yeT4KICAgICAgICAgPGRlc2NyaXB0aW9uPmdsb2JhbC1zY29wZSByZXNvdXJjZSB0byBiZSBtb2RpZmllZCBieSBERDwvZGVzY3JpcHRpb24+CiAgICAgICAgIDxuYW1lPmphdmE6Z2xvYmFsL2Vudi9IZWxsb1N0YXRlZnVsRUpCX01vZEJ5RERfQ29ubmVjdGlvbkZhY3Rvcnk8L25hbWU+CkBAIC01NCw3ICs1NCw3IEBACiAgICAgICAgICAgPHZhbHVlPmZvbzwvdmFsdWU+CiAgICAgICAgIDwvcHJvcGVydHk+CiAgICAgICA8L2Nvbm5lY3Rpb24tZmFjdG9yeT4KLSAgICAgIAorCiAgICAgICA8Y29ubmVjdGlvbi1mYWN0b3J5PgogICAgICAgICA8ZGVzY3JpcHRpb24+bW9kdWxlLXNjb3BlIHJlc291cmNlIGRlZmluZWQgaW4gRUpCIEREPC9kZXNjcmlwdGlvbj4KICAgICAgICAgPG5hbWU+amF2YTptb2R1bGUvZW52L0hlbGxvU3RhdGVmdWxFSkJfRERfQ29ubmVjdGlvbkZhY3Rvcnk8L25hbWU+CkBAIC02NSw3ICs2NSw3IEBACiAgICAgICAgICAgPHZhbHVlPmZvbzwvdmFsdWU+CiAgICAgICAgIDwvcHJvcGVydHk+CiAgICAgICA8L2Nvbm5lY3Rpb24tZmFjdG9yeT4KLSAgICAgIAorCiAgICAgICA8Y29ubmVjdGlvbi1mYWN0b3J5PgogICAgICAgICA8ZGVzY3JpcHRpb24+YXBwbGljYXRpb24tc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBpbiBFSkIgREQ8L2Rlc2NyaXB0aW9uPgogICAgICAgICA8bmFtZT5qYXZhOmFwcC9lbnYvSGVsbG9TdGF0ZWZ1bEVKQl9ERF9Db25uZWN0aW9uRmFjdG9yeTwvbmFtZT4KQEAgLTc5LDcgKzc5LDcgQEAKICAgICAgICAgICA8dmFsdWU+Zm9vPC92YWx1ZT4KICAgICAgICAgPC9wcm9wZXJ0eT4KICAgICAgIDwvY29ubmVjdGlvbi1mYWN0b3J5PgotICAgICAgCisKICAgICAgIDxjb25uZWN0aW9uLWZhY3Rvcnk+CiAgICAgICAgIDxkZXNjcmlwdGlvbj5jb21wb25lbnQtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBpbiBFSkIgREQ8L2Rlc2NyaXB0aW9uPgogICAgICAgICA8bmFtZT5qYXZhOmNvbXAvZW52L0hlbGxvU3RhdGVmdWxFSkJfRERfQ29ubmVjdGlvbkZhY3Rvcnk8L25hbWU+CkBAIC05MCw3ICs5MCw3IEBACiAgICAgICAgICAgPHZhbHVlPmZvbzwvdmFsdWU+CiAgICAgICAgIDwvcHJvcGVydHk+CiAgICAgICA8L2Nvbm5lY3Rpb24tZmFjdG9yeT4KLSAgICAgIAorCiAgICAgPC9zZXNzaW9uPgogICAgIDxzZXNzaW9uPgogICAgICAgPGRpc3BsYXktbmFtZT5IZWxsb0VKQjwvZGlzcGxheS1uYW1lPgpAQCAtMTIyLDcgKzEyMiw3IEBACiAgICAgICAgICAgPHZhbHVlPmZvbzwvdmFsdWU+CiAgICAgICAgIDwvcHJvcGVydHk+CiAgICAgICA8L2Nvbm5lY3Rpb24tZmFjdG9yeT4KLSAgICAgIAorCiAgICAgICA8Y29ubmVjdGlvbi1mYWN0b3J5PgogICAgICAgICA8ZGVzY3JpcHRpb24+YXBwbGljYXRpb24tc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBpbiBFSkIgREQ8L2Rlc2NyaXB0aW9uPgogICAgICAgICA8bmFtZT5qYXZhOmFwcC9lbnYvSGVsbG9FSkJfRERfQ29ubmVjdGlvbkZhY3Rvcnk8L25hbWU+CkBAIC0xNTgsOCArMTU4LDggQEAKICAgICAgICAgICA8dmFsdWU+Zm9vPC92YWx1ZT4KICAgICAgICAgPC9wcm9wZXJ0eT4KICAgICAgIDwvY29ubmVjdGlvbi1mYWN0b3J5PgotICAgICAgCisKICAgICA8L3Nlc3Npb24+CiAgIDwvZW50ZXJwcmlzZS1iZWFucz4KLSAgCisKIDwvZWpiLWphcj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9kZXNjcmlwdG9yL3V0LWFwcGxpY2F0aW9uLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9kZXNjcmlwdG9yL3V0LWFwcGxpY2F0aW9uLnhtbAppbmRleCBkNmU4MTE1Li5lMTViY2E1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vZGVzY3JpcHRvci91dC1hcHBsaWNhdGlvbi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL2Rlc2NyaXB0b3IvdXQtYXBwbGljYXRpb24ueG1sCkBAIC0yMCw3ICsyMCw3IEBACiA8YXBwbGljYXRpb24geG1sbnM9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjciCiAgICAgICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlIGh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUvYXBwbGljYXRpb25fNy54c2QiPgogICAgIDxkaXNwbGF5LW5hbWU+Y29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb25BcHA8L2Rpc3BsYXktbmFtZT4KLSAgICAKKwogICAgIDxtb2R1bGU+CiAgICAgICAgIDxqYXZhPmNvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWNsaWVudC5qYXI8L2phdmE+CiAgICAgPC9tb2R1bGU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vZGVzY3JpcHRvci91dC1lbnRpdHktZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vZGVzY3JpcHRvci91dC1lbnRpdHktZWpiLWphci54bWwKaW5kZXggYmM2MGVkNy4uNjEwMDYyOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL2Rlc2NyaXB0b3IvdXQtZW50aXR5LWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9kZXNjcmlwdG9yL3V0LWVudGl0eS1lamItamFyLnhtbApAQCAtMTgsMTEgKzE4LDExIEBACiAtLT4KIAogPGVqYi1qYXIgeG1sbnM9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUiCi0gICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKLSAgICAgICAgIG1ldGFkYXRhLWNvbXBsZXRlPSJmYWxzZSIgdmVyc2lvbj0iMy4yIiAKKyAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgICAgICBtZXRhZGF0YS1jb21wbGV0ZT0iZmFsc2UiIHZlcnNpb249IjMuMiIKICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSBodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL2VqYi1qYXJfM18yLnhzZCI+CiAgIDxtb2R1bGUtbmFtZT5jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lamI8L21vZHVsZS1uYW1lPgotICAKKwogICA8ZW50ZXJwcmlzZS1iZWFucz4KICAgICA8ZW50aXR5PgogICAgICAgPGVqYi1uYW1lPkhlbGxvRW50aXR5PC9lamItbmFtZT4KQEAgLTQzLDcgKzQzLDcgQEAKICAgICAgICAgICA8dmFsdWU+Zm9vPC92YWx1ZT4KICAgICAgICAgPC9wcm9wZXJ0eT4KICAgICAgIDwvY29ubmVjdGlvbi1mYWN0b3J5PgotICAgICAgCisKICAgICAgIDxjb25uZWN0aW9uLWZhY3Rvcnk+CiAgICAgICAgIDxkZXNjcmlwdGlvbj5tb2R1bGUtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBpbiBFSkIgREQ8L2Rlc2NyaXB0aW9uPgogICAgICAgICA8bmFtZT5qYXZhOm1vZHVsZS9lbnYvRW50aXR5X0Nvbm5lY3Rpb25GYWN0b3J5PC9uYW1lPgpAQCAtNTcsNyArNTcsNyBAQAogICAgICAgICAgIDx2YWx1ZT5mb288L3ZhbHVlPgogICAgICAgICA8L3Byb3BlcnR5PgogICAgICAgPC9jb25uZWN0aW9uLWZhY3Rvcnk+Ci0gICAgICAKKwogICAgICAgPGNvbm5lY3Rpb24tZmFjdG9yeT4KICAgICAgICAgPGRlc2NyaXB0aW9uPmNvbXBvbmVudC1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGluIEVKQiBERDwvZGVzY3JpcHRpb24+CiAgICAgICAgIDxuYW1lPmphdmE6Y29tcC9lbnYvRW50aXR5X0Nvbm5lY3Rpb25GYWN0b3J5PC9uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL2Rlc2NyaXB0b3IvdXQtaW50ZXJjZXB0b3ItZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vZGVzY3JpcHRvci91dC1pbnRlcmNlcHRvci1lamItamFyLnhtbAppbmRleCBiMTJiM2U0Li5hNTc0ZmI2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vZGVzY3JpcHRvci91dC1pbnRlcmNlcHRvci1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vZGVzY3JpcHRvci91dC1pbnRlcmNlcHRvci1lamItamFyLnhtbApAQCAtMTgsOCArMTgsOCBAQAogLS0+CiAKIDxlamItamFyIHhtbG5zPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlIgotICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCi0gICAgICAgICBtZXRhZGF0YS1jb21wbGV0ZT0iZmFsc2UiIHZlcnNpb249IjMuMiIgCisgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgICAgICAgbWV0YWRhdGEtY29tcGxldGU9ImZhbHNlIiB2ZXJzaW9uPSIzLjIiCiAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUgaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS9lamItamFyXzNfMi54c2QiPgogICA8bW9kdWxlLW5hbWU+Y29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tZWpiPC9tb2R1bGUtbmFtZT4KICAgPGludGVyY2VwdG9ycz4KQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgICA8dmFsdWU+Zm9vPC92YWx1ZT4KICAgICAgICAgPC9wcm9wZXJ0eT4KICAgICAgIDwvY29ubmVjdGlvbi1mYWN0b3J5PgotICAgICAgCisKICAgICAgIDxjb25uZWN0aW9uLWZhY3Rvcnk+CiAgICAgICAgIDxkZXNjcmlwdGlvbj5tb2R1bGUtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBpbiBFSkIgREQ8L2Rlc2NyaXB0aW9uPgogICAgICAgICA8bmFtZT5qYXZhOm1vZHVsZS9lbnYvSW50ZXJjZXB0b3JfQ29ubmVjdGlvbkZhY3Rvcnk8L25hbWU+CkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgICAgPHZhbHVlPmZvbzwvdmFsdWU+CiAgICAgICAgIDwvcHJvcGVydHk+CiAgICAgICA8L2Nvbm5lY3Rpb24tZmFjdG9yeT4KLSAgICAgIAorCiAgICAgICA8Y29ubmVjdGlvbi1mYWN0b3J5PgogICAgICAgICA8ZGVzY3JpcHRpb24+Y29tcG9uZW50LXNjb3BlIHJlc291cmNlIGRlZmluZWQgaW4gRUpCIEREPC9kZXNjcmlwdGlvbj4KICAgICAgICAgPG5hbWU+amF2YTpjb21wL2Vudi9JbnRlcmNlcHRvcl9Db25uZWN0aW9uRmFjdG9yeTwvbmFtZT4KQEAgLTY2LDUgKzY2LDUgQEAKICAgICAgIDwvY29ubmVjdGlvbi1mYWN0b3J5PgogICAgIDwvaW50ZXJjZXB0b3I+CiAgIDwvaW50ZXJjZXB0b3JzPgotICAKKwogPC9lamItamFyPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL2Rlc2NyaXB0b3IvdXQtbWRiLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL2Rlc2NyaXB0b3IvdXQtbWRiLWVqYi1qYXIueG1sCmluZGV4IGNjNjY4NTEuLjVlOTk3ZGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9kZXNjcmlwdG9yL3V0LW1kYi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vZGVzY3JpcHRvci91dC1tZGItZWpiLWphci54bWwKQEAgLTE4LDggKzE4LDggQEAKIC0tPgogCiA8ZWpiLWphciB4bWxucz0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSIKLSAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAotICAgICAgICAgbWV0YWRhdGEtY29tcGxldGU9ImZhbHNlIiB2ZXJzaW9uPSIzLjIiIAorICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgICAgIG1ldGFkYXRhLWNvbXBsZXRlPSJmYWxzZSIgdmVyc2lvbj0iMy4yIgogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlIGh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUvZWpiLWphcl8zXzIueHNkIj4KICAgPG1vZHVsZS1uYW1lPmNvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLWVqYjwvbW9kdWxlLW5hbWU+CiAgIDxlbnRlcnByaXNlLWJlYW5zPgpAQCAtNDIsNyArNDIsNyBAQAogICAgICAgICAgIDx2YWx1ZT5mb288L3ZhbHVlPgogICAgICAgICA8L3Byb3BlcnR5PgogICAgICAgPC9jb25uZWN0aW9uLWZhY3Rvcnk+Ci0gICAgICAKKwogICAgICAgPGNvbm5lY3Rpb24tZmFjdG9yeT4KICAgICAgICAgPGRlc2NyaXB0aW9uPm1vZHVsZS1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGluIEVKQiBERDwvZGVzY3JpcHRpb24+CiAgICAgICAgIDxuYW1lPmphdmE6bW9kdWxlL2Vudi9NREJfQ29ubmVjdGlvbkZhY3Rvcnk8L25hbWU+CkBAIC01Niw3ICs1Niw3IEBACiAgICAgICAgICAgPHZhbHVlPmZvbzwvdmFsdWU+CiAgICAgICAgIDwvcHJvcGVydHk+CiAgICAgICA8L2Nvbm5lY3Rpb24tZmFjdG9yeT4KLSAgICAgIAorCiAgICAgICA8Y29ubmVjdGlvbi1mYWN0b3J5PgogICAgICAgICA8ZGVzY3JpcHRpb24+Y29tcG9uZW50LXNjb3BlIHJlc291cmNlIGRlZmluZWQgaW4gRUpCIEREPC9kZXNjcmlwdGlvbj4KICAgICAgICAgPG5hbWU+amF2YTpjb21wL2Vudi9NREJfQ29ubmVjdGlvbkZhY3Rvcnk8L25hbWU+CkBAIC02Nyw4ICs2Nyw4IEBACiAgICAgICAgICAgPHZhbHVlPmZvbzwvdmFsdWU+CiAgICAgICAgIDwvcHJvcGVydHk+CiAgICAgICA8L2Nvbm5lY3Rpb24tZmFjdG9yeT4KLSAgICAgIAorCiAgICAgPC9tZXNzYWdlLWRyaXZlbj4KICAgPC9lbnRlcnByaXNlLWJlYW5zPgotICAKKwogPC9lamItamFyPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL2Rlc2NyaXB0b3IvdXQtc2Vzc2lvbi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9kZXNjcmlwdG9yL3V0LXNlc3Npb24tZWpiLWphci54bWwKaW5kZXggODY1ZWYzYS4uMGM4MDRmMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL2Rlc2NyaXB0b3IvdXQtc2Vzc2lvbi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vZGVzY3JpcHRvci91dC1zZXNzaW9uLWVqYi1qYXIueG1sCkBAIC0xOCw4ICsxOCw4IEBACiAtLT4KIAogPGVqYi1qYXIgeG1sbnM9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUiCi0gICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKLSAgICAgICAgIG1ldGFkYXRhLWNvbXBsZXRlPSJmYWxzZSIgdmVyc2lvbj0iMy4yIiAKKyAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgICAgICBtZXRhZGF0YS1jb21wbGV0ZT0iZmFsc2UiIHZlcnNpb249IjMuMiIKICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSBodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL2VqYi1qYXJfM18yLnhzZCI+CiAgIDxtb2R1bGUtbmFtZT5jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1lamI8L21vZHVsZS1uYW1lPgogICA8ZW50ZXJwcmlzZS1iZWFucz4KQEAgLTI4LDcgKzI4LDcgQEAKICAgICAgIDxlamItbmFtZT5IZWxsb1N0YXRlZnVsRUpCPC9lamItbmFtZT4KICAgICAgIDxidXNpbmVzcy1sb2NhbD5jb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmhlbGxvLnNlc3Npb24zLkhlbGxvU3RhdGVmdWw8L2J1c2luZXNzLWxvY2FsPgogICAgICAgPGVqYi1jbGFzcz5jb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmhlbGxvLnNlc3Npb24zLkhlbGxvU3RhdGVmdWxFSkI8L2VqYi1jbGFzcz4KLSAgICAgIAorCiAgICAgICA8Y29ubmVjdGlvbi1mYWN0b3J5PgogICAgICAgICA8ZGVzY3JpcHRpb24+Z2xvYmFsLXNjb3BlIHJlc291cmNlIGRlZmluZWQgaW4gRUpCIEREPC9kZXNjcmlwdGlvbj4KICAgICAgICAgPG5hbWU+amF2YTpnbG9iYWwvZW52L1N0YXRlZnVsRUpCX0Nvbm5lY3Rpb25GYWN0b3J5PC9uYW1lPgpAQCAtNDIsNyArNDIsNyBAQAogICAgICAgICAgIDx2YWx1ZT5mb288L3ZhbHVlPgogICAgICAgICA8L3Byb3BlcnR5PgogICAgICAgPC9jb25uZWN0aW9uLWZhY3Rvcnk+Ci0gICAgICAKKwogICAgICAgPGNvbm5lY3Rpb24tZmFjdG9yeT4KICAgICAgICAgPGRlc2NyaXB0aW9uPm1vZHVsZS1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGluIEVKQiBERDwvZGVzY3JpcHRpb24+CiAgICAgICAgIDxuYW1lPmphdmE6bW9kdWxlL2Vudi9TdGF0ZWZ1bEVKQl9Db25uZWN0aW9uRmFjdG9yeTwvbmFtZT4KQEAgLTU2LDcgKzU2LDcgQEAKICAgICAgICAgICA8dmFsdWU+Zm9vPC92YWx1ZT4KICAgICAgICAgPC9wcm9wZXJ0eT4KICAgICAgIDwvY29ubmVjdGlvbi1mYWN0b3J5PgotICAgICAgCisKICAgICAgIDxjb25uZWN0aW9uLWZhY3Rvcnk+CiAgICAgICAgIDxkZXNjcmlwdGlvbj5jb21wb25lbnQtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBpbiBFSkIgREQ8L2Rlc2NyaXB0aW9uPgogICAgICAgICA8bmFtZT5qYXZhOmNvbXAvZW52L1N0YXRlZnVsRUpCX0Nvbm5lY3Rpb25GYWN0b3J5PC9uYW1lPgpAQCAtNjcsNyArNjcsNyBAQAogICAgICAgICAgIDx2YWx1ZT5mb288L3ZhbHVlPgogICAgICAgICA8L3Byb3BlcnR5PgogICAgICAgPC9jb25uZWN0aW9uLWZhY3Rvcnk+Ci0gICAgICAKKwogICAgIDwvc2Vzc2lvbj4KICAgICA8c2Vzc2lvbj4KICAgICAgIDxkaXNwbGF5LW5hbWU+SGVsbG9FSkI8L2Rpc3BsYXktbmFtZT4KQEAgLTg4LDcgKzg4LDcgQEAKICAgICAgICAgICA8dmFsdWU+Zm9vPC92YWx1ZT4KICAgICAgICAgPC9wcm9wZXJ0eT4KICAgICAgIDwvY29ubmVjdGlvbi1mYWN0b3J5PgotICAgICAgCisKICAgICAgIDxjb25uZWN0aW9uLWZhY3Rvcnk+CiAgICAgICAgIDxkZXNjcmlwdGlvbj5tb2R1bGUtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBpbiBFSkIgREQ8L2Rlc2NyaXB0aW9uPgogICAgICAgICA8bmFtZT5qYXZhOm1vZHVsZS9lbnYvSGVsbG9FSkJfQ29ubmVjdGlvbkZhY3Rvcnk8L25hbWU+CkBAIC0xMDIsNyArMTAyLDcgQEAKICAgICAgICAgICA8dmFsdWU+Zm9vPC92YWx1ZT4KICAgICAgICAgPC9wcm9wZXJ0eT4KICAgICAgIDwvY29ubmVjdGlvbi1mYWN0b3J5PgotICAgICAgCisKICAgICAgIDxjb25uZWN0aW9uLWZhY3Rvcnk+CiAgICAgICAgIDxkZXNjcmlwdGlvbj5jb21wb25lbnQtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBpbiBFSkIgREQ8L2Rlc2NyaXB0aW9uPgogICAgICAgICA8bmFtZT5qYXZhOmNvbXAvZW52L0hlbGxvRUpCX0Nvbm5lY3Rpb25GYWN0b3J5PC9uYW1lPgpAQCAtMTEzLDggKzExMyw4IEBACiAgICAgICAgICAgPHZhbHVlPmZvbzwvdmFsdWU+CiAgICAgICAgIDwvcHJvcGVydHk+CiAgICAgICA8L2Nvbm5lY3Rpb24tZmFjdG9yeT4KLSAgICAgIAorCiAgICAgPC9zZXNzaW9uPgogICA8L2VudGVycHJpc2UtYmVhbnM+Ci0gIAorCiA8L2VqYi1qYXI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vZGVzY3JpcHRvci91dC13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL2Rlc2NyaXB0b3IvdXQtd2ViLnhtbAppbmRleCA2OTI0NTE3Li4wMWMxMTQ5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vZGVzY3JpcHRvci91dC13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9kZXNjcmlwdG9yL3V0LXdlYi54bWwKQEAgLTE4LDggKzE4LDggQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSIKLSAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiICAgIAotICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlIHdlYi1hcHBfM18xLnhzZCIgICAgCisgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlIHdlYi1hcHBfM18xLnhzZCIKICAgICAgICAgIHZlcnNpb249IjMuMSI+CiAKICAgICA8ZGlzcGxheS1uYW1lPmNvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uPC9kaXNwbGF5LW5hbWU+CkBAIC02MSw3ICs2MSw3IEBACiAgICAgICAgICA8dmFsdWU+Zm9vPC92YWx1ZT4KICAgICAgICA8L3Byb3BlcnR5PgogICAgICA8L2Nvbm5lY3Rpb24tZmFjdG9yeT4KLSAgICAKKwogICAgICA8Y29ubmVjdGlvbi1mYWN0b3J5PgogICAgICAgIDxkZXNjcmlwdGlvbj5tb2R1bGUtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBpbiBXZWIgREQ8L2Rlc2NyaXB0aW9uPgogICAgICAgIDxuYW1lPmphdmE6bW9kdWxlL2Vudi9Db25uZWN0aW9uRmFjdG9yeTwvbmFtZT4KQEAgLTcyLDYgKzcyLDYgQEAKICAgICAgICAgIDx2YWx1ZT5mb288L3ZhbHVlPgogICAgICAgIDwvcHJvcGVydHk+CiAgICAgIDwvY29ubmVjdGlvbi1mYWN0b3J5PgotICAgIAorCiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDA5ODJhMzUuLmQwZjYxOWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMTgsOCArMTgsOCBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlIgotICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgICAgCi0gICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUgd2ViLWFwcF8zXzEueHNkIiAgIAorICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSB3ZWItYXBwXzNfMS54c2QiCiAgICAgICAgICB2ZXJzaW9uPSIzLjEiCiAgICAgICAgICBtZXRhZGF0YS1jb21wbGV0ZT0iZmFsc2UiPgogCkBAIC03Myw3ICs3Myw3IEBACiAgICAgICAgICA8dmFsdWU+Zm9vPC92YWx1ZT4KICAgICAgICA8L3Byb3BlcnR5PgogICAgICA8L2Nvbm5lY3Rpb24tZmFjdG9yeT4KLSAgICAKKwogICAgICA8Y29ubmVjdGlvbi1mYWN0b3J5PgogICAgICAgIDxkZXNjcmlwdGlvbj5tb2R1bGUtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBpbiBXZWIgREQ8L2Rlc2NyaXB0aW9uPgogICAgICAgIDxuYW1lPmphdmE6bW9kdWxlL2Vudi9XZWJfRERfQ29ubmVjdGlvbkZhY3Rvcnk8L25hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vZWpiL0hlbGxvRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vZWpiL0hlbGxvRUpCLmphdmEKaW5kZXggNDdlZDkyYy4uZTUwZWJlZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL2VqYi9IZWxsb0VKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9lamIvSGVsbG9FSkIuamF2YQpAQCAtMzYsMzkgKzM2LDM5IEBACiAgICAgICAgICAgICAgICAgcHJvcGVydGllcyA9IHsidGVzdE5hbWU9Zm9vIn0KICAgICAgICAgICApLAogICAgICAgICAgIEBDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb24oCi0gICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICJnbG9iYWwtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBieSBAQ29ubmVjdGlvbkZhY3RvcnlEZWZpbml0aW9uIiwgCi0gICAgICAgICAgICAgICBuYW1lID0gImphdmE6Z2xvYmFsL2Vudi9IZWxsb0VKQl9Bbm5vdGF0aW9uX0Nvbm5lY3Rpb25GYWN0b3J5IiwgCi0gICAgICAgICAgICAgICBpbnRlcmZhY2VOYW1lID0gImpha2FydGEucmVzb3VyY2UuY2NpLkNvbm5lY3Rpb25GYWN0b3J5IiwgCisgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICJnbG9iYWwtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBieSBAQ29ubmVjdGlvbkZhY3RvcnlEZWZpbml0aW9uIiwKKyAgICAgICAgICAgICAgIG5hbWUgPSAiamF2YTpnbG9iYWwvZW52L0hlbGxvRUpCX0Fubm90YXRpb25fQ29ubmVjdGlvbkZhY3RvcnkiLAorICAgICAgICAgICAgICAgaW50ZXJmYWNlTmFtZSA9ICJqYWthcnRhLnJlc291cmNlLmNjaS5Db25uZWN0aW9uRmFjdG9yeSIsCiAgICAgICAgICAgICAgICByZXNvdXJjZUFkYXB0ZXIgPSAiY2ZkLXJhIiwKICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uU3VwcG9ydCA9IFRyYW5zYWN0aW9uU3VwcG9ydExldmVsLkxvY2FsVHJhbnNhY3Rpb24sCiAgICAgICAgICAgICAgICBtYXhQb29sU2l6ZSA9IDE2LAogICAgICAgICAgICAgICAgbWluUG9vbFNpemUgPSA0LAogICAgICAgICAgICAgICAgcHJvcGVydGllcyA9IHsidGVzdE5hbWU9Zm9vIn0KICAgICAgICAgICApLAotICAgICAgICAgIAorCiAgICAgICAgICAgQENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbigKLSAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gImFwcGxpY2F0aW9uLXNjb3BlIHJlc291cmNlIGRlZmluZWQgYnkgQENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbiIsIAotICAgICAgICAgICAgICAgbmFtZSA9ICJqYXZhOmFwcC9lbnYvSGVsbG9FSkJfQW5ub3RhdGlvbl9Db25uZWN0aW9uRmFjdG9yeSIsIAotICAgICAgICAgICAgICAgaW50ZXJmYWNlTmFtZSA9ICJqYWthcnRhLnJlc291cmNlLmNjaS5Db25uZWN0aW9uRmFjdG9yeSIsIAorICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAiYXBwbGljYXRpb24tc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBieSBAQ29ubmVjdGlvbkZhY3RvcnlEZWZpbml0aW9uIiwKKyAgICAgICAgICAgICAgIG5hbWUgPSAiamF2YTphcHAvZW52L0hlbGxvRUpCX0Fubm90YXRpb25fQ29ubmVjdGlvbkZhY3RvcnkiLAorICAgICAgICAgICAgICAgaW50ZXJmYWNlTmFtZSA9ICJqYWthcnRhLnJlc291cmNlLmNjaS5Db25uZWN0aW9uRmFjdG9yeSIsCiAgICAgICAgICAgICAgICB0cmFuc2FjdGlvblN1cHBvcnQgPSBUcmFuc2FjdGlvblN1cHBvcnRMZXZlbC5YQVRyYW5zYWN0aW9uLAogICAgICAgICAgICAgICAgbWF4UG9vbFNpemUgPSAxNiwKICAgICAgICAgICAgICAgIG1pblBvb2xTaXplID0gNCwKICAgICAgICAgICAgICAgIHJlc291cmNlQWRhcHRlciA9ICJjZmQtcmEiLAogICAgICAgICAgICAgICAgcHJvcGVydGllcyA9IHsidGVzdE5hbWU9Zm9vIn0KICAgICAgICAgICApLAotICAgICAgICAgIAorCiAgICAgICAgICAgQENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbigKLSAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gIm1vZHVsZS1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGJ5IEBDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb24iLCAKLSAgICAgICAgICAgICAgIG5hbWUgPSAiamF2YTptb2R1bGUvZW52L0hlbGxvRUpCX0Fubm90YXRpb25fQ29ubmVjdGlvbkZhY3RvcnkiLCAKLSAgICAgICAgICAgICAgIGludGVyZmFjZU5hbWUgPSAiamFrYXJ0YS5yZXNvdXJjZS5jY2kuQ29ubmVjdGlvbkZhY3RvcnkiLCAKKyAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gIm1vZHVsZS1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGJ5IEBDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb24iLAorICAgICAgICAgICAgICAgbmFtZSA9ICJqYXZhOm1vZHVsZS9lbnYvSGVsbG9FSkJfQW5ub3RhdGlvbl9Db25uZWN0aW9uRmFjdG9yeSIsCisgICAgICAgICAgICAgICBpbnRlcmZhY2VOYW1lID0gImpha2FydGEucmVzb3VyY2UuY2NpLkNvbm5lY3Rpb25GYWN0b3J5IiwKICAgICAgICAgICAgICAgIHJlc291cmNlQWRhcHRlciA9ICJjZmQtcmEiLAogICAgICAgICAgICAgICAgcHJvcGVydGllcyA9IHsidGVzdE5hbWU9Zm9vIn0KICAgICAgICAgICApLAotICAgICAgICAgIAorCiAgICAgICAgICAgQENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbigKLSAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gImNvbXBvbmVudC1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGJ5IEBDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb24iLCAKLSAgICAgICAgICAgICAgIG5hbWUgPSAiamF2YTpjb21wL2Vudi9IZWxsb0VKQl9Bbm5vdGF0aW9uX0Nvbm5lY3Rpb25GYWN0b3J5IiwgCi0gICAgICAgICAgICAgICBpbnRlcmZhY2VOYW1lID0gImpha2FydGEucmVzb3VyY2UuY2NpLkNvbm5lY3Rpb25GYWN0b3J5IiwgCisgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICJjb21wb25lbnQtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBieSBAQ29ubmVjdGlvbkZhY3RvcnlEZWZpbml0aW9uIiwKKyAgICAgICAgICAgICAgIG5hbWUgPSAiamF2YTpjb21wL2Vudi9IZWxsb0VKQl9Bbm5vdGF0aW9uX0Nvbm5lY3Rpb25GYWN0b3J5IiwKKyAgICAgICAgICAgICAgIGludGVyZmFjZU5hbWUgPSAiamFrYXJ0YS5yZXNvdXJjZS5jY2kuQ29ubmVjdGlvbkZhY3RvcnkiLAogICAgICAgICAgICAgICAgcmVzb3VyY2VBZGFwdGVyID0gImNmZC1yYSIsCiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzID0geyJ0ZXN0TmFtZT1mb28ifQogICAgICAgICAgICkKQEAgLTgwLDcgKzgwLDcgQEAKIAogICAgIEBqYWthcnRhLmFubm90YXRpb24uUmVzb3VyY2UobmFtZT0iamF2YTpjb21wL2Vudi9IZWxsb0VKQl9Bbm5vdGF0aW9uX0Nvbm5lY3Rpb25GYWN0b3J5IikKICAgICBDb25uZWN0aW9uRmFjdG9yeSBjZjsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGhlbGxvKCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ29ubmVjdGlvbiBjID0gY2YuZ2V0Q29ubmVjdGlvbigpOwpAQCAtMTIzLDcgKzEyMyw3IEBACiAgICAgICAgIGxvb2t1cENvbm5lY3Rpb25GYWN0b3J5KCJqYXZhOmFwcC9lbnYvSGVsbG9FSkJfRERfQ29ubmVjdGlvbkZhY3RvcnkiLCB0cnVlKTsKICAgICAgICAgbG9va3VwQ29ubmVjdGlvbkZhY3RvcnkoImphdmE6bW9kdWxlL2Vudi9IZWxsb0VKQl9ERF9Db25uZWN0aW9uRmFjdG9yeSIsIHRydWUpOwogICAgICAgICBsb29rdXBDb25uZWN0aW9uRmFjdG9yeSgiamF2YTpjb21wL2Vudi9IZWxsb0VKQl9ERF9Db25uZWN0aW9uRmFjdG9yeSIsIHRydWUpOwotICAgICAgICAKKwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvRUpCOjpoZWxsbygpIik7CiAgICAgfQogCkBAIC0xNTAsNiArMTUwLDYgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAKKwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vZWpiL0hlbGxvU3RhdGVmdWxFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9lamIvSGVsbG9TdGF0ZWZ1bEVKQi5qYXZhCmluZGV4IGRkNTczYjcuLjMzNDUwZWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9lamIvSGVsbG9TdGF0ZWZ1bEVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9lamIvSGVsbG9TdGF0ZWZ1bEVKQi5qYXZhCkBAIC0xMjAsNyArMTIwLDcgQEAKICAgICAgICAgbG9va3VwQ29ubmVjdGlvbkZhY3RvcnkoImphdmE6YXBwL2Vudi9IZWxsb0VKQl9ERF9Db25uZWN0aW9uRmFjdG9yeSIsIHRydWUpOwogICAgICAgICBsb29rdXBDb25uZWN0aW9uRmFjdG9yeSgiamF2YTptb2R1bGUvZW52L0hlbGxvRUpCX0REX0Nvbm5lY3Rpb25GYWN0b3J5IiwgdHJ1ZSk7CiAgICAgICAgIGxvb2t1cENvbm5lY3Rpb25GYWN0b3J5KCJqYXZhOmNvbXAvZW52L0hlbGxvRUpCX0REX0Nvbm5lY3Rpb25GYWN0b3J5IiwgZmFsc2UpOwotICAgICAgICAKKwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlZnVsRUpCIGRhdGFzb3VyY2UtZGVmaW5pdGlvbnMgU3VjY2VzcyIpOwogCiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvQWJzdHJhY3RSZXNvdXJjZUFkYXB0ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL0Fic3RyYWN0UmVzb3VyY2VBZGFwdGVyLmphdmEKaW5kZXggMDdiOWQ3OC4uMGVmY2M1ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvQWJzdHJhY3RSZXNvdXJjZUFkYXB0ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9BYnN0cmFjdFJlc291cmNlQWRhcHRlci5qYXZhCkBAIC0yMyw3ICsyMyw3IEBACiAgICAgcHJpdmF0ZSBTdHJpbmcgdGVzdE5hbWU7CiAgICAgcHJvdGVjdGVkIGJvb2xlYW4gZGVidWcgPSB0cnVlOwogCi0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldFRlc3ROYW1lKCkgewogICAgICAgICByZXR1cm4gdGVzdE5hbWU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEKaW5kZXggNTU1MzNkNC4uZjU5YjJiMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgQ29udHJvbHMgewogICAgIHB1YmxpYyBzdGF0aWMgT2JqZWN0IHJlYWR5TG9jayA9IG5ldyBPYmplY3QoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEKaW5kZXggMDAzNDQ2NS4uZGNhMzc5YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEKQEAgLTIxLDcgKzIxLDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBEZWxpdmVyeVdvcmsgaW1wbGVtZW50cyBXb3JrIHsKIApAQCAtMzAsNyArMzAsNyBAQAogICAgIHByaXZhdGUgU3RyaW5nIG9wOwogICAgIHByaXZhdGUgYm9vbGVhbiBrZWVwQ291bnQ7CiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50ZXIgPSAwOwotICAgIAorCiAgICAgcHVibGljIERlbGl2ZXJ5V29yayhNZXNzYWdlRW5kcG9pbnQgZXAsIGludCBudW1PZk1lc3NhZ2VzLCBTdHJpbmcgb3ApIHsKICAgICAgICAgdGhpcy5lcCA9IGVwOwogICAgICAgICB0aGlzLm51bSA9IG51bU9mTWVzc2FnZXM7CkBAIC0zOCw3ICszOCw3IEBACiAgICAgICAgIHRoaXMua2VlcENvdW50ID0gZmFsc2U7CiAgICAgfQogCi0gICAgcHVibGljIERlbGl2ZXJ5V29yayhNZXNzYWdlRW5kcG9pbnQgZXAsIGludCBudW1PZk1lc3NhZ2VzLCAKKyAgICBwdWJsaWMgRGVsaXZlcnlXb3JrKE1lc3NhZ2VFbmRwb2ludCBlcCwgaW50IG51bU9mTWVzc2FnZXMsCiAgICAgICAgICAgICBTdHJpbmcgb3AsIGJvb2xlYW4ga2VlcENvdW50KSB7CiAgICAgICAgIHRoaXMuZXAgPSBlcDsKICAgICAgICAgdGhpcy5udW0gPSBudW1PZk1lc3NhZ2VzOwpAQCAtNDksNyArNDksNyBAQAogICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKIAogICAgICAgICBkZWJ1ZygiRU5URVIuLi4iKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIC8vTWV0aG9kIG9uTWVzc2FnZSA9IGdldE9uTWVzc2FnZU1ldGhvZCgpOwogICAgICAgICAgICAgLy9lcC5iZWZvcmVEZWxpdmVyeShvbk1lc3NhZ2UpOwpAQCAtNzIsMTEgKzcyLDExIEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vZXAuYWZ0ZXJEZWxpdmVyeSgpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiTEVBVkUuLi4iKTsKICAgICB9CiAKQEAgLTg3LDE0ICs4NywxNCBAQAogICAgIH0KIAogLy8gICAgcHJpdmF0ZSBNZXRob2QgZ2V0T25NZXNzYWdlTWV0aG9kKCkgewotLy8gICAgICAgIAorLy8KIC8vICAgICAgICBNZXRob2Qgb25NZXNzYWdlTWV0aG9kID0gbnVsbDsKIC8vICAgICAgICB0cnkgewogLy8gICAgICAgICAgICBDbGFzcyBtc2dMaXN0ZW5lckNsYXNzID0gY29ubmVjdG9yLk15TWVzc2FnZUxpc3RlbmVyLmNsYXNzOwogLy8gICAgICAgICAgICBDbGFzc1tdIHBhcmFtVHlwZXMgPSB7IGphdmEubGFuZy5TdHJpbmcuY2xhc3MgfTsKLS8vICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0gCisvLyAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9CiAvLyAgICAgICAgICAgICAgICBtc2dMaXN0ZW5lckNsYXNzLmdldE1ldGhvZCgib25NZXNzYWdlIiwgcGFyYW1UeXBlcyk7Ci0vLyAgICAgICAgICAgIAorLy8KIC8vICAgICAgICB9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZXgpIHsKIC8vICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAvLyAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEKaW5kZXggMTAwY2FjZS4uZmE5M2Y2MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhCkBAIC0zNiw3ICszNiw3IEBACiAgICAgICAgICAgICAgIGZsYWdUb1N0cmluZyhmbGFncykpOwogICAgIH0KIAotICAgIAorCiAgICAgcHVibGljIHZvaWQgZm9yZ2V0KFhpZCB4aWQpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5mb3JnZXQ6ICIgKyB4aWRUb1N0cmluZyh4aWQpKTsKICAgICB9CkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5wcmVwYXJlOiAiICsgeGlkVG9TdHJpbmcoeGlkKSk7CiAgICAgICAgIHJldHVybiBYQVJlc291cmNlLlhBX09LOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBYaWRbXSByZWNvdmVyKGludCBmbGFnKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2UucmVjb3ZlcjogIiArIGZsYWdUb1N0cmluZyhmbGFnKSk7CiAgICAgICAgIHJldHVybiBudWxsOwpAQCAtNjYsNyArNjYsNyBAQAogICAgIHB1YmxpYyBib29sZWFuIHNldFRyYW5zYWN0aW9uVGltZW91dChpbnQgc2Vjb25kcykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHN0YXJ0KFhpZCB4aWQsIGludCBmbGFncykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLnN0YXJ0OiAiICsgeGlkVG9TdHJpbmcoeGlkKSArICIsIiArCiAgICAgICAgICAgICAgICAgZmxhZ1RvU3RyaW5nKGZsYWdzKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvTWVzc2FnZXMuamF2YQppbmRleCBiNWIwZjAyLi40YzljMDEyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL01lc3NhZ2VzLmphdmEKQEAgLTIxLDcgKzIxLDcgQEAKIC8qKgogICogY29sbGVjdGlvbiBvZiBtZXNzYWdlcy4KICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIE1lc3NhZ2VzIHsKIApAQCAtNTQsNyArNTQsNyBAQAogICAgICAgIFN0cmluZyBjb21tYW5kICA9IGFyZ3NbMF07CiAgICAgICAgU3RyaW5nIGRlc3ROYW1lID0gYXJnc1sxXTsKICAgICAgICBTdHJpbmcgbWVzc2FnZSAgPSBhcmdzWzJdOwotICAgCisKICAgICAgICBpZiAoISJhZGQiLmVxdWFscyhjb21tYW5kKSkgewogICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9NeUNvbm5lY3Rpb25GYWN0b3J5LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9NeUNvbm5lY3Rpb25GYWN0b3J5LmphdmEKaW5kZXggOWYyNDY0OC4uOTIyZTcxZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvTXlDb25uZWN0aW9uRmFjdG9yeS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL015Q29ubmVjdGlvbkZhY3RvcnkuamF2YQpAQCAtMzIsNyArMzIsNyBAQAogICAgIHByaXZhdGUgQ29ubmVjdGlvbk1hbmFnZXIgY207CiAgICAgcHJpdmF0ZSBNeU1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2Y7CiAgICAgcHJpdmF0ZSBSZWZlcmVuY2UgcmVmOwotICAgIAorCiAgICAgcHVibGljIE15Q29ubmVjdGlvbkZhY3RvcnkoTXlNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmLCBDb25uZWN0aW9uTWFuYWdlciBjbSkgewogICAgICAgICBzdXBlcigpOwogICAgICAgICB0aGlzLm1jZiA9IG1jZjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL015TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9NeU1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCmluZGV4IGYzNGU4M2IuLjI0NTA2YTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL015TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvTXlNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQpAQCAtNDMsNyArNDMsNyBAQAogICAgIHByaXZhdGUgQ29ubmVjdGlvbk1hbmFnZXIgY207CiAgICAgcHJpdmF0ZSBQcmludFdyaXRlciB3cml0ZXI7CiAgICAgcHJpdmF0ZSBUcmFuc2FjdGlvblN1cHBvcnRMZXZlbCB0cmFuc2FjdGlvblN1cHBvcnQgPSBUcmFuc2FjdGlvblN1cHBvcnRMZXZlbC5Mb2NhbFRyYW5zYWN0aW9uOzsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGVzdE5hbWUoKSB7CiAgICAgICAgIHJldHVybiB0ZXN0TmFtZTsKICAgICB9CkBAIC02OCw3ICs2OCw3IEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE1hbmFnZWRDb25uZWN0aW9uIGNyZWF0ZU1hbmFnZWRDb25uZWN0aW9uKFN1YmplY3Qgc3ViamVjdCwgIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyByZXFJbmZvKSAKKyAgICBwdWJsaWMgTWFuYWdlZENvbm5lY3Rpb24gY3JlYXRlTWFuYWdlZENvbm5lY3Rpb24oU3ViamVjdCBzdWJqZWN0LCAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIHJlcUluZm8pCiAgICAgICAgICAgICB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9CkBAIC03OSw3ICs3OSw3IEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE1hbmFnZWRDb25uZWN0aW9uIG1hdGNoTWFuYWdlZENvbm5lY3Rpb25zKFNldCBjYW5kaWRhdGVzLCBTdWJqZWN0IHN1YiwgIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyByZXFJbmZvKSAKKyAgICBwdWJsaWMgTWFuYWdlZENvbm5lY3Rpb24gbWF0Y2hNYW5hZ2VkQ29ubmVjdGlvbnMoU2V0IGNhbmRpZGF0ZXMsIFN1YmplY3Qgc3ViLCAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIHJlcUluZm8pCiAgICAgICAgICAgICB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9NeVdvcmsuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL015V29yay5qYXZhCmluZGV4IDYxNDM4MWUuLjQ0ODk5YTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL015V29yay5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL015V29yay5qYXZhCkBAIC0yMyw3ICsyMyw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgTXlXb3JrIGltcGxlbWVudHMgV29yayB7CiAKQEAgLTMxLDcgKzMxLDcgQEAKICAgICBwcml2YXRlIGJvb2xlYW4gc3RvcCA9IGZhbHNlOwogICAgIHByaXZhdGUgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBmYWN0b3J5OwogICAgIHByaXZhdGUgV29ya01hbmFnZXIgd207Ci0gICAgCisKICAgICBwdWJsaWMgTXlXb3JrKAogICAgICAgICAgICAgU3RyaW5nIG5hbWUsIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZmFjdG9yeSwgV29ya01hbmFnZXIgd20pIHsKICAgICAgICAgdGhpcy5mYWN0b3J5ID0gZmFjdG9yeTsKQEAgLTQ5LDcgKzQ5LDcgQEAKICAgICAgICAgICAgIHRyeSB7CiAKICAgICAgICAgICAgICAgICBNZXRob2Qgb25NZXNzYWdlID0gZ2V0T25NZXNzYWdlTWV0aG9kKCk7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpc0RlbGl2ZXJ5VHJhbnNhY3RlZCA9ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlzRGVsaXZlcnlUcmFuc2FjdGVkID0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3RvcnkuaXNEZWxpdmVyeVRyYW5zYWN0ZWQob25NZXNzYWdlKSk7CiAKICAgICAgICAgICAgICAgICAvKgpAQCAtNjYsNyArNjYsNyBAQAogICAgICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCJMRUFWRS4uLiIpOwogICAgIH0KIApAQCAtODEsMTQgKzgxLDE0IEBACiAgICAgfQogCiAgICAgcHVibGljIE1ldGhvZCBnZXRPbk1lc3NhZ2VNZXRob2QoKSB7Ci0gICAgICAgIAorCiAgICAgICAgIE1ldGhvZCBvbk1lc3NhZ2VNZXRob2QgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ2xhc3MgbXNnTGlzdGVuZXJDbGFzcyA9IGNvbm5lY3Rvci5NeU1lc3NhZ2VMaXN0ZW5lci5jbGFzczsKICAgICAgICAgICAgIENsYXNzW10gcGFyYW1UeXBlcyA9IHsgamF2YS5sYW5nLlN0cmluZy5jbGFzcyB9OwotICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0gCisgICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPQogICAgICAgICAgICAgICAgIG1zZ0xpc3RlbmVyQ2xhc3MuZ2V0TWV0aG9kKCJvbk1lc3NhZ2UiLCBwYXJhbVR5cGVzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhCmluZGV4IDUxMmU1YzYuLjRiNWU1ZjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YQpAQCAtMjUsMTIgKzI1LDEyIEBACiAgKiBzbyB0aGF0IHRoZSBhcHAgc2VydmVyIGNhbiBpbnN0YW50aWF0ZSBhbmQgY29uZmlndXJlCiAgKiBpdCBhdCB0aGUgcnVudGltZS4KICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogQEFjdGl2YXRpb24oCiAgICAgICAgIG1lc3NhZ2VMaXN0ZW5lcnMgPSB7Y29ubmVjdG9yLk15TWVzc2FnZUxpc3RlbmVyLmNsYXNzfQogKQotcHVibGljIGNsYXNzIFNpbXBsZUFjdGl2YXRpb25TcGVjIAorcHVibGljIGNsYXNzIFNpbXBsZUFjdGl2YXRpb25TcGVjCiAgICAgaW1wbGVtZW50cyBBY3RpdmF0aW9uU3BlYywgamF2YS5pby5TZXJpYWxpemFibGUgewogCiAgICAgcHJpdmF0ZSBTdHJpbmcgZGVzdGluYXRpb25OYW1lOwpAQCAtNDcsNyArNDcsNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzdGluYXRpb25OYW1lICgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZGVzdGluYXRpb25OYW1lOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldERlc3RpbmF0aW9uTmFtZSAoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgZGVidWcoInNldERlc3RpbmF0aW9uTmFtZSgpIGNhbGxlZC4uLiBuYW1lID0gIiArIG5hbWUpOwogICAgICAgICB0aGlzLmRlc3RpbmF0aW9uTmFtZSA9IG5hbWU7CkBAIC01Niw3ICs1Niw3IEBACiAgICAgcHVibGljIFN0cmluZyBnZXREZXN0aW5hdGlvblR5cGUoKSB7CiAgICAgICAgIHJldHVybiB0aGlzLmRlc3RpbmF0aW9uVHlwZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXREZXN0aW5hdGlvblR5cGUgKFN0cmluZyB0eXBlKSB7CiAgICAgICAgIGRlYnVnKCJzZXREZXN0aW5hdGlvblR5cGUgKCkgY2FsbGVkLi4uIHR5cGUgPSAiICsgdHlwZSk7CiAgICAgICAgIHRoaXMuZGVzdGluYXRpb25UeXBlPSB0eXBlOwpAQCAtNjUsNyArNjUsNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGVzdFByb3AoKSB7CiAgICAgICAgIHJldHVybiB0aGlzLnRlc3RQcm9wOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFRlc3RQcm9wIChTdHJpbmcgdGVzdFByb3ApIHsKICAgICAgICAgZGVidWcoInNldFRlc3RQcm9wICgpIGNhbGxlZC4uLiB0ZXN0UHJvcCA9ICIgKyB0ZXN0UHJvcCk7CiAgICAgICAgIHRoaXMudGVzdFByb3AgPSB0ZXN0UHJvcDsKQEAgLTc0LDcgKzc0LDcgQEAKICAgICBwdWJsaWMgSW50ZWdlciBnZXRUZXN0SW50ZWdlclByb3AoKSB7CiAgICAgICAgIHJldHVybiB0aGlzLnRlc3RJbnRlZ2VyUHJvcDsKICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRUZXN0SW50ZWdlclByb3AgKEludGVnZXIgdGVzdFByb3AxKSB7CiAgICAgICAgIGRlYnVnKCJzZXRUZXN0SW50ZWdlclByb3AgKCkgY2FsbGVkLi4uIHRlc3RJbnRlZ2VyUHJvcCA9ICIgKyB0ZXN0UHJvcDEpOwogICAgICAgICB0aGlzLnRlc3RJbnRlZ2VyUHJvcCA9IHRlc3RQcm9wMTsKQEAgLTk4LDcgKzk4LDcgQEAKIAogICAgICAgfQogCi0gICB9IAorICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGRlYnVnIChTdHJpbmcgbWVzc2FnZSkKICAgICB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEKaW5kZXggMjU2MTFlZC4uM2ZkOWRlZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YQpAQCAtMjksMTQgKzI5LDE0IEBACiAKIC8qKgogICogVGhpcyBpcyBhIHNhbXBsZSByZXNvdXJjZSBhZGFwdGVyCi0gKiAKKyAqCiAgKiBAYXV0aG9yIFFpbmdxaW5nIE91eWFuZwogICovCiBAQ29ubmVjdG9yKAogLyogbW9kdWxlTmFtZT0iTXkgU2ltcGxlIFJBUiIsICovCi0gICAgZGlzcGxheU5hbWUgPSAiU2ltcGxlIFJlc291cmNlIEFkYXB0ZXIiLCAKLSAgICB2ZW5kb3JOYW1lID0gIkphdmEgU29mdHdhcmUiLCAKLSAgICBlaXNUeXBlID0gIkdlbmVyaWMgVHlwZSIsIAorICAgIGRpc3BsYXlOYW1lID0gIlNpbXBsZSBSZXNvdXJjZSBBZGFwdGVyIiwKKyAgICB2ZW5kb3JOYW1lID0gIkphdmEgU29mdHdhcmUiLAorICAgIGVpc1R5cGUgPSAiR2VuZXJpYyBUeXBlIiwKICAgICB2ZXJzaW9uID0gIjEuMEFscGhhIiwKICAgICB0cmFuc2FjdGlvblN1cHBvcnQ9VHJhbnNhY3Rpb25TdXBwb3J0TGV2ZWwuWEFUcmFuc2FjdGlvbikKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvVGVzdFdNV29yay5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvVGVzdFdNV29yay5qYXZhCmluZGV4IGVlMGZhZTkuLmUyNDg1MDYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL1Rlc3RXTVdvcmsuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9UZXN0V01Xb3JrLmphdmEKQEAgLTIzLDcgKzIzLDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBUZXN0V01Xb3JrIGltcGxlbWVudHMgV29yayB7CiAKQEAgLTM3LDggKzM3LDggQEAKICAgICBwdWJsaWMgVGVzdFdNV29yayhpbnQgaWQsIGJvb2xlYW4gaXNSb2d1ZSkgewogICAgICAgICB0aGlzKGlkLCBpc1JvZ3VlLCBmYWxzZSwgbnVsbCk7CiAgICAgfQotICAgIAotICAgIHB1YmxpYyBUZXN0V01Xb3JrKGludCBpZCwgYm9vbGVhbiBpc1JvZ3VlLCAKKworICAgIHB1YmxpYyBUZXN0V01Xb3JrKGludCBpZCwgYm9vbGVhbiBpc1JvZ3VlLAogICAgICAgICAgICAgYm9vbGVhbiBkb05lc3QsIEV4ZWN1dGlvbkNvbnRleHQgY3R4KSB7CiAgICAgICAgIHRoaXMuaWQgPSBpZDsKICAgICAgICAgdGhpcy5pc1JvZ3VlID0gaXNSb2d1ZTsKQEAgLTcyLDEwICs3MiwxMCBAQAogICAgICAgICAgICAgfSBjYXRjaCAoV29ya0V4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgICAgIGlmIChleC5nZXRFcnJvckNvZGUoKS5lcXVhbHMoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV29ya0V4Y2VwdGlvbi5UWF9DT05DVVJSRU5UX1dPUktfRElTQUxMT1dFRCkpIHsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKyAKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQQVNTOiBDQVVHSFQgRVhQRUNURUQgPSAiICsgZXguZ2V0RXJyb3JDb2RlKCkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsgCisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRkFJTDogQ0FVR0hUIFVORVhQRUNURUQgPSAiICsgZXguZ2V0RXJyb3JDb2RlKCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTg3LDcgKzg3LDcgQEAKICAgICAgICAgICAgICAgICBlYy5zZXRUcmFuc2FjdGlvblRpbWVvdXQoNSoxMDAwKTsgLy81IHNlY29uZHMKICAgICAgICAgICAgICAgICB3bS5kb1dvcmsobmVzdGVkV29yaywgMSoxMDAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICJGQUlMOiBDQVVHSFQgVU5FWFBFQ1RFRCA9ICIgKyBleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9WM1dvcmtEaXNwYXRjaGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9WM1dvcmtEaXNwYXRjaGVyLmphdmEKaW5kZXggOGFkZjNjYy4uNGI0Mzc4MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvVjNXb3JrRGlzcGF0Y2hlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL1YzV29ya0Rpc3BhdGNoZXIuamF2YQpAQCAtNDMsNyArNDMsNyBAQAogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnQgZXAgPSBmYWN0b3J5LmNyZWF0ZUVuZHBvaW50KG5ldyBGYWtlWEFSZXNvdXJjZSgpKTsKICAgICAgICAgICAgIGludCBudW1PZk1lc3NhZ2VzID0gMTsKQEAgLTcyLDcgKzcyLDcgQEAKICAgICAgICAgICAgIGRlYnVnKCJWM1dvcmtEaXNwYXRjaGVyIGNhbGxpbmcgRE9ORSgpIik7CiAgICAgICAgICAgICBkb25lKCk7CiAgICAgICAgICAgICBkZWJ1ZygiVjNXb3JrRGlzcGF0Y2hlciBmaW5pc2hlZCBjYWxsaW5nIERPTkUoKSIpOwotICAgICAgICAgICAgCisKICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhCmluZGV4IDQyMjQ5ZGMuLmExNDQ0M2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQpAQCAtMzIsNyArMzIsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIFdvcmtEaXNwYXRjaGVyIGltcGxlbWVudHMgV29yayB7CiAKQEAgLTQzLDExICs0MywxMSBAQAogICAgIHByb3RlY3RlZCBBY3RpdmF0aW9uU3BlYyBzcGVjOwogICAgIHByb3RlY3RlZCBXb3JrTWFuYWdlciB3bTsKICAgICBwcm90ZWN0ZWQgWEFUZXJtaW5hdG9yIHhhOwotICAgIAorCiAgICAgcHVibGljIFdvcmtEaXNwYXRjaGVyKAogICAgICAgICAgICAgU3RyaW5nIGlkLAogICAgICAgICAgICAgQm9vdHN0cmFwQ29udGV4dCBjdHgsCi0gICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGZhY3RvcnksIAorICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBmYWN0b3J5LAogICAgICAgICAgICAgQWN0aXZhdGlvblNwZWMgc3BlYykgewogICAgICAgICB0aGlzLmlkICAgICAgPSBpZDsKICAgICAgICAgdGhpcy5jdHggICAgID0gY3R4OwpAQCAtNjAsNyArNjAsNyBAQAogICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKIAogICAgICAgICBkZWJ1ZygiRU5URVIuLi4iKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHN5bmNocm9uaXplZCAoQ29udHJvbHMucmVhZHlMb2NrKSB7CiAgICAgICAgICAgICAgICAgZGVidWcoIldBSVQuLi4iKTsKQEAgLTgyLDI2ICs4MiwyNiBAQAogICAgICAgICAgICAgdHJ5IHsKIAogICAgICAgICAgICAgICAgIE1ldGhvZCBvbk1lc3NhZ2UgPSBnZXRPbk1lc3NhZ2VNZXRob2QoKTsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlzRGVsaXZlcnlUcmFuc2FjdGVkID0gIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaXNEZWxpdmVyeVRyYW5zYWN0ZWQgPSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3RvcnkuaXNEZWxpdmVyeVRyYW5zYWN0ZWQob25NZXNzYWdlKSk7CiAKICAgICAgICAgICAgICAgICBpZiAoIWZhY3RvcnkuaXNEZWxpdmVyeVRyYW5zYWN0ZWQob25NZXNzYWdlKSkgewogICAgICAgICAgICAgICAgICAgICAvL01lc3NhZ2VFbmRwb2ludCBlcCA9IGZhY3RvcnkuY3JlYXRlRW5kcG9pbnQobnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIC8vRGVsaXZlcnlXb3JrIGQgPSBuZXcgRGVsaXZlcnlXb3JrKCJOT19UWCIsIGVwKTsgCisgICAgICAgICAgICAgICAgICAgIC8vRGVsaXZlcnlXb3JrIGQgPSBuZXcgRGVsaXZlcnlXb3JrKCJOT19UWCIsIGVwKTsKICAgICAgICAgICAgICAgICAgICAgLy93bS5kb1dvcmsoZCwgMCwgbnVsbCwgbnVsbCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy9NZXNzYWdlRW5kcG9pbnQgZXAgPSBmYWN0b3J5LmNyZWF0ZUVuZHBvaW50KG51bGwpOwogICAgICAgICAgICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnQgZXAgPSBmYWN0b3J5LmNyZWF0ZUVuZHBvaW50KG5ldyBGYWtlWEFSZXNvdXJjZSgpKTsKICAgICAgICAgICAgICAgICAgICAgaW50IG51bU9mTWVzc2FnZXMgPSA1OwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvL2ltcG9ydGluZyB0cmFuc2FjdGlvbgogCiAgICAgICAgICAgICAgICAgICAgIC8vd3JpdGUvY29tbWl0CiAgICAgICAgICAgICAgICAgICAgIEV4ZWN1dGlvbkNvbnRleHQgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7CiAKLSAgICAgICAgICAgICAgICAgICAgRGVsaXZlcnlXb3JrIHcgPSAKKyAgICAgICAgICAgICAgICAgICAgRGVsaXZlcnlXb3JrIHcgPQogICAgICAgICAgICAgICAgICAgICAgICAgbmV3IERlbGl2ZXJ5V29yayhlcCwgbnVtT2ZNZXNzYWdlcywgIldSSVRFIik7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgdHJ1ZSk7CkBAIC0xMDksNyArMTA5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIkRPTkUgV1JJVEUgVE8gREIiKTsKICAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMuZXhwZWN0ZWRSZXN1bHRzID0gbnVtT2ZNZXNzYWdlczsKICAgICAgICAgICAgICAgICAgICAgbm90aWZ5QW5kV2FpdCgpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvL2RlbGV0ZS9yb2xsYmFjawogICAgICAgICAgICAgICAgICAgICBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKQEAgLTEyNSw3ICsxMjUsNyBAQAogICAgICAgICAgICAgICAgICAgICAvL2RlbGV0ZS9jb21taXQKICAgICAgICAgICAgICAgICAgICAgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIHcgPSBuZXcgRGVsaXZlcnlXb3JrKGVwLCBudW1PZk1lc3NhZ2VzLCAiREVMRVRFIik7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgdHJ1ZSk7CkBAIC0xNDksNyArMTQ5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgLy9kZWxldGUvY29tbWl0CiAgICAgICAgICAgICAgICAgICAgIGVjID0gc3RhcnRUeCgpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiU3RhcnQgVFggLSAiICsgZWMuZ2V0WGlkKCkpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICB3ID0gbmV3IERlbGl2ZXJ5V29yayhlcCwgbnVtT2ZNZXNzYWdlcywgIkRFTEVURSIpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIHRydWUpOwpAQCAtMTk0LDcgKzE5NCw3IEBACiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGlmIChYQVJlc291cmNlLlhBX09LID09IHhhLnByZXBhcmUoZWMuZ2V0WGlkKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJYQSBQUkVQQVJFL0NPTU1JVC4gRE9ORSBXUklURSBUTyBEQiAiKTsKQEAgLTIwNiwxOSArMjA2LDE5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBDb250cm9scy5leHBlY3RlZFJlc3VsdHMgPSAzOwogICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZ5QW5kV2FpdCgpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vZGVsZXRlIGFsbC4KICAgICAgICAgICAgICAgICAgICAgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIHcgPSBuZXcgRGVsaXZlcnlXb3JrKGVwLCAxLCAiREVMRVRFX0FMTCIpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIHRydWUpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiRE9ORSBERUxFVEUgQUxMIEZST00gREIiKTsKICAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMuZXhwZWN0ZWRSZXN1bHRzID0gMDsKICAgICAgICAgICAgICAgICAgICAgbm90aWZ5QW5kV2FpdCgpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBkb25lKCk7CiAgICAgICAgICAgICAgICAgfQogCkBAIC0yNDUsNyArMjQ1LDcgQEAKICAgICAgICAgICAgICAgICBkb25lKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIkxFQVZFLi4uIik7CiAgICAgfQogCkBAIC0yNjAsMTQgKzI2MCwxNCBAQAogICAgIH0KIAogICAgIHB1YmxpYyBNZXRob2QgZ2V0T25NZXNzYWdlTWV0aG9kKCkgewotICAgICAgICAKKwogICAgICAgICBNZXRob2Qgb25NZXNzYWdlTWV0aG9kID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENsYXNzIG1zZ0xpc3RlbmVyQ2xhc3MgPSBjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIuY2xhc3M7CiAgICAgICAgICAgICBDbGFzc1tdIHBhcmFtVHlwZXMgPSB7IGphdmEubGFuZy5TdHJpbmcuY2xhc3MgfTsKLSAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9IAorICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0KICAgICAgICAgICAgICAgICBtc2dMaXN0ZW5lckNsYXNzLmdldE1ldGhvZCgib25NZXNzYWdlIiwgcGFyYW1UeXBlcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CkBAIC0yOTAsMTMgKzI5MCwxMyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgLy9TbGVlcCBmb3IgNSBzZWNvbmRzCiAgICAgICAgICAgICAvL1RocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoNSoxMDAwKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQoQ29udHJvbHMucmVhZHlMb2NrKSB7CiAgICAgICAgICAgICAgICAgLy9Ob3RpZnkgdGhlIGNsaWVudCB0byBjaGVjayB0aGUgcmVzdWx0cwotICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay5ub3RpZnlBbGwoKTsgCisgICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLm5vdGlmeUFsbCgpOwogCiAgICAgICAgICAgICAgICAgLy9XYWl0IHVudGlsIHJlc3VsdHMgYXJlIHZlcmlmaWVkIGJ5IHRoZSBjbGllbnQKLSAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2sud2FpdCgpOyAKKyAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2sud2FpdCgpOwogCiAgICAgICAgICAgICAgICAgaWYgKHN0b3ApIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YQppbmRleCA3N2RiZjM0Li42YmQ5ZTU3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YQpAQCAtMzYsOCArMzYsOCBAQAogICAgIHB1YmxpYyBpbnQgYnJhbmNoUXVhbGlmaWVyOwogICAgIHB1YmxpYyBpbnQgZ2xvYmFsVHhJRDsKIAotICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhHVFJJRFNJWkU9IDY0OyAKLSAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYQlFVQUxTSVpFPSA2NDsgCisgICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEdUUklEU0laRT0gNjQ7CisgICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEJRVUFMU0laRT0gNjQ7CiAKICAgICBwdWJsaWMgWElEKCkgewogICAgICAgICBpbnQgZm9vID0gSUQrKzsKQEAgLTU1LDEwICs1NSwxMCBAQAogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgICAgICAgICAgICAgICAgLy8gSXQgY2FuJ3QgYmUgZXF1YWwKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBvdGhlciA9IChYSUQpbzsgICAgICAgICAgICAgICAgICAgLy8gVGhlIG90aGVyIFhJRCwgbm93IHByb3Blcmx5IGNhc3QKLSAgICAgICAgCi0gICAgICAgIGlmICh0aGlzLmZvcm1hdElEID09IG90aGVyLmZvcm1hdElEIAorCisgICAgICAgIGlmICh0aGlzLmZvcm1hdElEID09IG90aGVyLmZvcm1hdElECiAgICAgICAgICAgICAgICAgJiYgdGhpcy5icmFuY2hRdWFsaWZpZXIgPT0gb3RoZXIuYnJhbmNoUXVhbGlmaWVyCiAgICAgICAgICAgICAgICAgJiYgdGhpcy5nbG9iYWxUeElEID09IG90aGVyLmdsb2JhbFR4SUQpIHsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtOTgsNyArOTgsNyBAQAogICAgICAgICAgICAgICAgICJmb3JtYXRJRCgiICAgICArIGZvcm1hdElEICAgICArICIpLCAiICsKICAgICAgICAgICAgICAgICAiYnJhbmNoUXVhbGlmaWVyICgiICsgYnJhbmNoUXVhbGlmaWVyICsgIiksICIgKwogICAgICAgICAgICAgICAgICJnbG9iYWxUeElEKCIgKyBnbG9iYWxUeElEICsgIil9Iik7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBzOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL3NlcnZsZXQvU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL3NlcnZsZXQvU2VydmxldC5qYXZhCmluZGV4IDZhNTA0N2YuLjIyYmU0YjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9zZXJ2bGV0L1NlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vc2VydmxldC9TZXJ2bGV0LmphdmEKQEAgLTcwLDcgKzcwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIG1pblBvb2xTaXplID0gNCwKICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMgPSB7InRlc3ROYW1lPWZvbyJ9CiAgICAgICAgICAgICAgICAgKSwKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIEBDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0ibW9kdWxlLXNjb3BlIHJlc291cmNlIGRlZmluZWQgYnkgQENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gImphdmE6bW9kdWxlL2Vudi9TZXJ2bGV0X0Nvbm5lY3Rpb25GYWN0b3J5IiwKQEAgLTc4LDcgKzc4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlQWRhcHRlciA9ICJjZmQtcmEiLAogICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcyA9IHsidGVzdE5hbWU9Zm9vIn0KICAgICAgICAgICAgICAgICApLAotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgQENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJjb21wb25lbnQtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBieSBAQ29ubmVjdGlvbkZhY3RvcnlEZWZpbml0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSAiamF2YTpjb21wL2Vudi9TZXJ2bGV0X0Nvbm5lY3Rpb25GYWN0b3J5IiwKQEAgLTkzLDcgKzkzLDcgQEAKIAogICAgIEBFSkIKICAgICBwcml2YXRlICBIZWxsbyBoZWxsb1N0YXRlbGVzczsKLSAgICAKKwogICAgIEBFSkIoYmVhbk5hbWUgPSAiSGVsbG9TdGF0ZWZ1bEVKQiIpCiAgICAgcHJpdmF0ZSAgSGVsbG9TdGF0ZWZ1bCBoZWxsb1N0YXRlZnVsOwogCkBAIC0xMDksNyArMTA5LDcgQEAKIAogICAgICAgICByZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcC5nZXRXcml0ZXIoKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKIAogICAgICAgICAgICAgLy8gQ29ubmVjdGlvbi1GYWN0b3J5LURlZmluaXRpb24gdGhyb3VnaCBBbm5vdGF0aW9uCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vdXQvQXJjaGl2ZVRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi91dC9BcmNoaXZlVGVzdC5qYXZhCmluZGV4IGJkYzQ5YmUuLjU1MTcxZDEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi91dC9BcmNoaXZlVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi91dC9BcmNoaXZlVGVzdC5qYXZhCkBAIC03MSw3ICs3MSw3IEBACiAgICAgICAgIEFTVVJMQ2xhc3NMb2FkZXIgY2xhc3NMb2FkZXIgPSBuZXcgQVNVUkxDbGFzc0xvYWRlcih0aGlzLmdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKSk7CiAgICAgICAgIGNsYXNzTG9hZGVyLmFkZFVSTChhcmNoaXZlLnRvVVJMKCkpOwogICAgICAgICByZWFkZXIuc2V0Q2xhc3NMb2FkZXIoY2xhc3NMb2FkZXIpOwotICAgICAgICAKKwogICAgICAgICBBcHBsaWNhdGlvbiBhcHBsaWNhdGlvbkRlc2MgPSByZWFkZXIub3BlbihhcmNoaXZlKTsKIC8vICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tQ29ubmVjdG9yIHJlc29ydWNlIGluIGFwcGxpY2F0aW9uLnhtbC0tLS0tLS0tLS0iKTsKIC8vICAgICAgICBmb3IoIENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbkRlc2NyaXB0b3IgY2ZkZDogYXBwbGljYXRpb25EZXNjLmdldENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbkRlc2NyaXB0b3JzKCkpewpAQCAtODIsOCArODIsOCBAQAogLy8gICAgICAgICAgICB9CiAvLyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIik7CiAvLyAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgTWFwPFN0cmluZyxDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb25EZXNjcmlwdG9yPiBleHBlY3RlZENGRERzID0gCisKKyAgICAgICAgTWFwPFN0cmluZyxDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb25EZXNjcmlwdG9yPiBleHBlY3RlZENGRERzID0KICAgICAgICAgICAgICAgICBuZXcgSGFzaE1hcDxTdHJpbmcsQ29ubmVjdGlvbkZhY3RvcnlEZWZpbml0aW9uRGVzY3JpcHRvcj4oKTsKICAgICAgICAgQ29ubmVjdGlvbkZhY3RvcnlEZWZpbml0aW9uRGVzY3JpcHRvciBkZXNjOwogCkBAIC0xMzQsMTAgKzEzNCwxMCBAQAogICAgICAgICByZWFkZXIuc2V0QW5ub3RhdGlvblByb2Nlc3NpbmdSZXF1ZXN0ZWQodHJ1ZSk7CiAgICAgICAgIHJlYWRlci5zZXRDbGFzc0xvYWRlcihjbGFzc0xvYWRlcik7CiAgICAgICAgIGFzc2VydFRydWUoIkFyY2hpdmlzdCBzaG91bGQgaGFuZGxlIGFubm90YXRpb25zLiIsIHJlYWRlci5pc0Fubm90YXRpb25Qcm9jZXNzaW5nUmVxdWVzdGVkKCkpOwotICAgICAgICAKKwogICAgICAgICBXZWJCdW5kbGVEZXNjcmlwdG9yIHdlYkRlc2MgPSByZWFkZXIub3BlbihhcmNoaXZlKTsKIAotICAgICAgICBNYXA8U3RyaW5nLENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbkRlc2NyaXB0b3I+IGV4cGVjdGVkQ0ZERHMgPSAKKyAgICAgICAgTWFwPFN0cmluZyxDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb25EZXNjcmlwdG9yPiBleHBlY3RlZENGRERzID0KICAgICAgICAgICAgICAgICBuZXcgSGFzaE1hcDxTdHJpbmcsQ29ubmVjdGlvbkZhY3RvcnlEZWZpbml0aW9uRGVzY3JpcHRvcj4oKTsKICAgICAgICAgQ29ubmVjdGlvbkZhY3RvcnlEZWZpbml0aW9uRGVzY3JpcHRvciBkZXNjOwogCkBAIC0xNTksNyArMTU5LDcgQEAKICAgICAgICAgZGVzYy5zZXRNaW5Qb29sU2l6ZSg0KTsKICAgICAgICAgZGVzYy5hZGRQcm9wZXJ0eSgidGVzdE5hbWUiLCAiZm9vIik7CiAgICAgICAgIGV4cGVjdGVkQ0ZERHMucHV0KGRlc2MuZ2V0TmFtZSgpLCBkZXNjKTsKLSAgICAgICAgCisKICAgICAgICAgZGVzYyA9IG5ldyBDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb25EZXNjcmlwdG9yKCk7CiAgICAgICAgIGRlc2Muc2V0RGVzY3JpcHRpb24oImFwcGxpY2F0aW9uLXNjb3BlIHJlc291cmNlIGRlZmluZWQgYnkgQENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbiIpOwogICAgICAgICBkZXNjLnNldE5hbWUoImphdmE6YXBwL2Vudi9TZXJ2bGV0X0Nvbm5lY3Rpb25GYWN0b3J5Iik7CkBAIC0xNzAsNyArMTcwLDcgQEAKICAgICAgICAgZGVzYy5zZXRNaW5Qb29sU2l6ZSg0KTsKICAgICAgICAgZGVzYy5hZGRQcm9wZXJ0eSgidGVzdE5hbWUiLCAiZm9vIik7CiAgICAgICAgIGV4cGVjdGVkQ0ZERHMucHV0KGRlc2MuZ2V0TmFtZSgpLCBkZXNjKTsKLSAgICAgICAgCisKICAgICAgICAgZGVzYyA9IG5ldyBDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb25EZXNjcmlwdG9yKCk7CiAgICAgICAgIGRlc2Muc2V0RGVzY3JpcHRpb24oIm1vZHVsZS1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGJ5IEBDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb24iKTsKICAgICAgICAgZGVzYy5zZXROYW1lKCJqYXZhOm1vZHVsZS9lbnYvU2VydmxldF9Db25uZWN0aW9uRmFjdG9yeSIpOwpAQCAtMTc4LDcgKzE3OCw3IEBACiAgICAgICAgIGRlc2Muc2V0UmVzb3VyY2VBZGFwdGVyKCJjZmQtcmEiKTsKICAgICAgICAgZGVzYy5hZGRQcm9wZXJ0eSgidGVzdE5hbWUiLCAiZm9vIik7CiAgICAgICAgIGV4cGVjdGVkQ0ZERHMucHV0KGRlc2MuZ2V0TmFtZSgpLCBkZXNjKTsKLSAgICAgICAgCisKICAgICAgICAgZGVzYyA9IG5ldyBDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb25EZXNjcmlwdG9yKCk7CiAgICAgICAgIGRlc2Muc2V0RGVzY3JpcHRpb24oImNvbXBvbmVudC1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGJ5IEBDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb24iKTsKICAgICAgICAgZGVzYy5zZXROYW1lKCJqYXZhOmNvbXAvZW52L1NlcnZsZXRfQ29ubmVjdGlvbkZhY3RvcnkiKTsKQEAgLTE4Niw3ICsxODYsNyBAQAogICAgICAgICBkZXNjLnNldFJlc291cmNlQWRhcHRlcigiY2ZkLXJhIik7CiAgICAgICAgIGRlc2MuYWRkUHJvcGVydHkoInRlc3ROYW1lIiwgImZvbyIpOwogICAgICAgICBleHBlY3RlZENGRERzLnB1dChkZXNjLmdldE5hbWUoKSwgZGVzYyk7Ci0gICAgICAgIAorCiAgICAgICAgIGRlc2MgPSBuZXcgQ29ubmVjdGlvbkZhY3RvcnlEZWZpbml0aW9uRGVzY3JpcHRvcigpOwogICAgICAgICBkZXNjLnNldERlc2NyaXB0aW9uKCJnbG9iYWwtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBpbiBXZWIgREQiKTsKICAgICAgICAgZGVzYy5zZXROYW1lKCJqYXZhOmdsb2JhbC9lbnYvV2ViX0REX0Nvbm5lY3Rpb25GYWN0b3J5Iik7CkBAIC0xOTcsNyArMTk3LDcgQEAKICAgICAgICAgZGVzYy5zZXRNaW5Qb29sU2l6ZSg0KTsKICAgICAgICAgZGVzYy5hZGRQcm9wZXJ0eSgidGVzdE5hbWUiLCAiZm9vIik7CiAgICAgICAgIGV4cGVjdGVkQ0ZERHMucHV0KGRlc2MuZ2V0TmFtZSgpLCBkZXNjKTsKLSAgICAgICAgCisKICAgICAgICAgZGVzYyA9IG5ldyBDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb25EZXNjcmlwdG9yKCk7CiAgICAgICAgIGRlc2Muc2V0RGVzY3JpcHRpb24oImFwcGxpY2F0aW9uLXNjb3BlIHJlc291cmNlIGRlZmluZWQgaW4gV2ViIEREIik7CiAgICAgICAgIGRlc2Muc2V0TmFtZSgiamF2YTphcHAvZW52L1dlYl9ERF9Db25uZWN0aW9uRmFjdG9yeSIpOwpAQCAtMjA4LDcgKzIwOCw3IEBACiAgICAgICAgIGRlc2Muc2V0TWluUG9vbFNpemUoNCk7CiAgICAgICAgIGRlc2MuYWRkUHJvcGVydHkoInRlc3ROYW1lIiwgImZvbyIpOwogICAgICAgICBleHBlY3RlZENGRERzLnB1dChkZXNjLmdldE5hbWUoKSwgZGVzYyk7Ci0gICAgICAgIAorCiAgICAgICAgIGRlc2MgPSBuZXcgQ29ubmVjdGlvbkZhY3RvcnlEZWZpbml0aW9uRGVzY3JpcHRvcigpOwogICAgICAgICBkZXNjLnNldERlc2NyaXB0aW9uKCJtb2R1bGUtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBpbiBXZWIgREQiKTsKICAgICAgICAgZGVzYy5zZXROYW1lKCJqYXZhOm1vZHVsZS9lbnYvV2ViX0REX0Nvbm5lY3Rpb25GYWN0b3J5Iik7CkBAIC0yMzgsNyArMjM4LDcgQEAKIAogICAgICAgICBBU1VSTENsYXNzTG9hZGVyIGNsYXNzTG9hZGVyID0gbmV3IEFTVVJMQ2xhc3NMb2FkZXIodGhpcy5nZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkpOwogICAgICAgICBjbGFzc0xvYWRlci5hZGRVUkwoYXJjaGl2ZS50b1VSTCgpKTsKLSAgICAgICAgICAgICAgIAorCiAgICAgICAgIEVqYkFyY2hpdmlzdCByZWFkZXIgPSAoRWpiQXJjaGl2aXN0KSBUZXN0VXRpbC5nZXRCeVR5cGUoRWpiQXJjaGl2aXN0LmNsYXNzKTsKICAgICAgICAgcmVhZGVyLnNldENsYXNzTG9hZGVyKGNsYXNzTG9hZGVyKTsKICAgICAgICAgcmVhZGVyLnNldEFubm90YXRpb25Qcm9jZXNzaW5nUmVxdWVzdGVkKHRydWUpOwpAQCAtMjQ5LDggKzI0OSw4IEBACiAgICAgICAgIGZvciggRWpiRGVzY3JpcHRvciBlamJEZXNjOiBlamJCdW5kbGVEZXNjLmdldEVqYnMoKSl7CiAgICAgICAgICAgICBhY3R1cmFsQ0ZERHMuYWRkQWxsKGVqYkRlc2MuZ2V0UmVzb3VyY2VEZXNjcmlwdG9ycyhKYXZhRUVSZXNvdXJjZVR5cGUuQ0ZEKSk7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIE1hcDxTdHJpbmcsQ29ubmVjdGlvbkZhY3RvcnlEZWZpbml0aW9uRGVzY3JpcHRvcj4gZXhwZWN0ZWRDRkREcyA9IAorCisgICAgICAgIE1hcDxTdHJpbmcsQ29ubmVjdGlvbkZhY3RvcnlEZWZpbml0aW9uRGVzY3JpcHRvcj4gZXhwZWN0ZWRDRkREcyA9CiAgICAgICAgICAgICAgICAgbmV3IEhhc2hNYXA8U3RyaW5nLENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbkRlc2NyaXB0b3I+KCk7CiAgICAgICAgIENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbkRlc2NyaXB0b3IgZGVzYzsKIApAQCAtMzUwLDcgKzM1MCw3IEBACiAgICAgICAgICAgICBkZXNjLmFkZFByb3BlcnR5KCJ0ZXN0TmFtZSIsICJmb28iKTsKICAgICAgICAgICAgIGV4cGVjdGVkQ0ZERHMucHV0KGRlc2MuZ2V0TmFtZSgpLCBkZXNjKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAvLyBjb25uZWN0aW9uLWZhY3RvcnkgaW4gYW5ub3RhdGlvbiBmb3Igc3RhdGVmdWwgRUpCCiAgICAgICAgIHsKICAgICAgICAgICAgIGRlc2MgPSBuZXcgQ29ubmVjdGlvbkZhY3RvcnlEZWZpbml0aW9uRGVzY3JpcHRvcigpOwpAQCAtMzYzLDcgKzM2Myw3IEBACiAgICAgICAgICAgICBkZXNjLnNldE1pblBvb2xTaXplKDQpOwogICAgICAgICAgICAgZGVzYy5hZGRQcm9wZXJ0eSgidGVzdE5hbWUiLCAiZm9vIik7CiAgICAgICAgICAgICBleHBlY3RlZENGRERzLnB1dChkZXNjLmdldE5hbWUoKSwgZGVzYyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgZGVzYyA9IG5ldyBDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb25EZXNjcmlwdG9yKCk7CiAgICAgICAgICAgICBkZXNjLnNldERlc2NyaXB0aW9uKCJhcHBsaWNhdGlvbi1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGJ5IEBDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb24iKTsKICAgICAgICAgICAgIGRlc2Muc2V0TmFtZSgiamF2YTphcHAvZW52L0hlbGxvU3RhdGVmdWxFSkJfQW5ub3RhdGlvbl9Db25uZWN0aW9uRmFjdG9yeSIpOwpAQCAtNDA0LDcgKzQwNCw3IEBACiAgICAgICAgICAgICBkZXNjLnNldE1pblBvb2xTaXplKDQpOwogICAgICAgICAgICAgZGVzYy5hZGRQcm9wZXJ0eSgidGVzdE5hbWUiLCAiZm9vIik7CiAgICAgICAgICAgICBleHBlY3RlZENGRERzLnB1dChkZXNjLmdldE5hbWUoKSwgZGVzYyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgZGVzYyA9IG5ldyBDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb25EZXNjcmlwdG9yKCk7CiAgICAgICAgICAgICBkZXNjLnNldERlc2NyaXB0aW9uKCJhcHBsaWNhdGlvbi1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGJ5IEBDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb24iKTsKICAgICAgICAgICAgIGRlc2Muc2V0TmFtZSgiamF2YTphcHAvZW52L0hlbGxvRUpCX0Fubm90YXRpb25fQ29ubmVjdGlvbkZhY3RvcnkiKTsKQEAgLTQxNSw3ICs0MTUsNyBAQAogICAgICAgICAgICAgZGVzYy5zZXRNaW5Qb29sU2l6ZSg0KTsKICAgICAgICAgICAgIGRlc2MuYWRkUHJvcGVydHkoInRlc3ROYW1lIiwgImZvbyIpOwogICAgICAgICAgICAgZXhwZWN0ZWRDRkREcy5wdXQoZGVzYy5nZXROYW1lKCksIGRlc2MpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGRlc2MgPSBuZXcgQ29ubmVjdGlvbkZhY3RvcnlEZWZpbml0aW9uRGVzY3JpcHRvcigpOwogICAgICAgICAgICAgZGVzYy5zZXREZXNjcmlwdGlvbigibW9kdWxlLXNjb3BlIHJlc291cmNlIGRlZmluZWQgYnkgQENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbiIpOwogICAgICAgICAgICAgZGVzYy5zZXROYW1lKCJqYXZhOm1vZHVsZS9lbnYvSGVsbG9FSkJfQW5ub3RhdGlvbl9Db25uZWN0aW9uRmFjdG9yeSIpOwpAQCAtNDIzLDcgKzQyMyw3IEBACiAgICAgICAgICAgICBkZXNjLnNldFJlc291cmNlQWRhcHRlcigiY2ZkLXJhIik7CiAgICAgICAgICAgICBkZXNjLmFkZFByb3BlcnR5KCJ0ZXN0TmFtZSIsICJmb28iKTsKICAgICAgICAgICAgIGV4cGVjdGVkQ0ZERHMucHV0KGRlc2MuZ2V0TmFtZSgpLCBkZXNjKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBkZXNjID0gbmV3IENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbkRlc2NyaXB0b3IoKTsKICAgICAgICAgICAgIGRlc2Muc2V0RGVzY3JpcHRpb24oImNvbXBvbmVudC1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGJ5IEBDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb24iKTsKICAgICAgICAgICAgIGRlc2Muc2V0TmFtZSgiamF2YTpjb21wL2Vudi9IZWxsb0VKQl9Bbm5vdGF0aW9uX0Nvbm5lY3Rpb25GYWN0b3J5Iik7CkBAIC00MzIsOSArNDMyLDkgQEAKICAgICAgICAgICAgIGRlc2MuYWRkUHJvcGVydHkoInRlc3ROYW1lIiwgImZvbyIpOwogICAgICAgICAgICAgZXhwZWN0ZWRDRkREcy5wdXQoZGVzYy5nZXROYW1lKCksIGRlc2MpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIFRlc3RVdGlsLmNvbXBhcmVDRkREKGV4cGVjdGVkQ0ZERHMsIGFjdHVyYWxDRkREcyk7CiAKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi91dC9ERFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi91dC9ERFRlc3QuamF2YQppbmRleCA5ZTVmOGY1Li42OTBhZWU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vdXQvRERUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL3V0L0REVGVzdC5qYXZhCkBAIC00NywyMyArNDcsMjMgQEAKICAgICBwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBzdXBlci50ZWFyRG93bigpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHRlc3RBcHBsaWNhdGlvbkREKCkgdGhyb3dzIEV4Y2VwdGlvbnsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHRjTmFtZSA9ICJjb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1hcHBsaWNhdGlvbi1ERC10ZXN0IjsKICAgICAgICAgSW5wdXRTdHJlYW0gZGRJUz1udWxsOwogICAgICAgICB0cnl7CiAgICAgICAgICAgICBTdHJpbmcgZGRGaWxlTmFtZSA9ICJ1dC1hcHBsaWNhdGlvbi54bWwiOwogICAgICAgICAgICAgRmlsZSBkZEZpbGUgPSBuZXcgRmlsZShkZXNjcmlwdG9yRGlyLCBkZEZpbGVOYW1lKTsKICAgICAgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCJUaGUgYXBwbGljYXRpb24ueG1sIG5vdCBmb3VuZDogIitkZEZpbGUsZGRGaWxlLmV4aXN0cygpKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBkZElTID0gbmV3IEZpbGVJbnB1dFN0cmVhbShkZEZpbGUpOwogICAgICAgICAgICAgQXBwbGljYXRpb25EZXBsb3ltZW50RGVzY3JpcHRvckZpbGUgZGRSZWFkZXIgPSBuZXcgQXBwbGljYXRpb25EZXBsb3ltZW50RGVzY3JpcHRvckZpbGUoKTsKICAgICAgICAgICAgIEFwcGxpY2F0aW9uIGFwcGxpY2F0aW9uID0gKEFwcGxpY2F0aW9uKSBkZFJlYWRlci5yZWFkKCBkZElTKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTZXQ8UmVzb3VyY2VEZXNjcmlwdG9yPiBhY3R1YWxDRkREcyA9IGFwcGxpY2F0aW9uLmdldFJlc291cmNlRGVzY3JpcHRvcnMoSmF2YUVFUmVzb3VyY2VUeXBlLkNGRCk7CiAKLSAgICAgICAgICAgIE1hcDxTdHJpbmcsQ29ubmVjdGlvbkZhY3RvcnlEZWZpbml0aW9uRGVzY3JpcHRvcj4gZXhwZWN0ZWRDRkREcyA9IAorICAgICAgICAgICAgTWFwPFN0cmluZyxDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb25EZXNjcmlwdG9yPiBleHBlY3RlZENGRERzID0KICAgICAgICAgICAgICAgICAgICAgbmV3IEhhc2hNYXA8U3RyaW5nLENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbkRlc2NyaXB0b3I+KCk7CiAgICAgICAgICAgICBDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb25EZXNjcmlwdG9yIGRlc2M7CiAKQEAgLTc3LDcgKzc3LDcgQEAKICAgICAgICAgICAgIGRlc2Muc2V0TWluUG9vbFNpemUoNCk7CiAgICAgICAgICAgICBkZXNjLmFkZFByb3BlcnR5KCJ0ZXN0TmFtZSIsICJmb28iKTsKICAgICAgICAgICAgIGV4cGVjdGVkQ0ZERHMucHV0KGRlc2MuZ2V0TmFtZSgpLCBkZXNjKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBkZXNjID0gbmV3IENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbkRlc2NyaXB0b3IoKTsKICAgICAgICAgICAgIGRlc2Muc2V0TmFtZSgiamF2YTphcHAvZW52L0Nvbm5lY3Rpb25GYWN0b3J5Iik7CiAgICAgICAgICAgICBkZXNjLnNldEludGVyZmFjZU5hbWUoImpha2FydGEucmVzb3VyY2UuY2NpLkNvbm5lY3Rpb25GYWN0b3J5Iik7CkBAIC04OSw3ICs4OSw3IEBACiAKICAgICAgICAgICAgIFRlc3RVdGlsLmNvbXBhcmVDRkREKGV4cGVjdGVkQ0ZERHMsIGFjdHVhbENGRERzKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRjTmFtZSwgc3RhdC5QQVNTKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH1jYXRjaChFeGNlcHRpb24gZSl7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0Y05hbWUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB0aHJvdyBlOwpAQCAtMTAzLDE4ICsxMDMsMTggQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB0ZXN0U2Vzc2lvbkVKQkREKCkgdGhyb3dzIEV4Y2VwdGlvbnsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHRjTmFtZSA9ICJjb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1TZXNzaW9uLUVKQi1ERC10ZXN0IjsKICAgICAgICAgSW5wdXRTdHJlYW0gZGRJUz1udWxsOwogICAgICAgICB0cnl7CiAgICAgICAgICAgICBTdHJpbmcgZGRGaWxlTmFtZSA9ICJ1dC1zZXNzaW9uLWVqYi1qYXIueG1sIjsKICAgICAgICAgICAgIEZpbGUgZGRGaWxlID0gbmV3IEZpbGUoZGVzY3JpcHRvckRpciwgZGRGaWxlTmFtZSk7CiAgICAgICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgiVGhlIHV0LXNlc3Npb24tZWpiLWphci54bWwgbm90IGZvdW5kOiAiK2RkRmlsZSwgZGRGaWxlLmV4aXN0cygpKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBkZElTID0gbmV3IEZpbGVJbnB1dFN0cmVhbShkZEZpbGUpOwogICAgICAgICAgICAgRWpiRGVwbG95bWVudERlc2NyaXB0b3JGaWxlIGRkUmVhZGVyID0gbmV3IEVqYkRlcGxveW1lbnREZXNjcmlwdG9yRmlsZSgpOwogICAgICAgICAgICAgRWpiQnVuZGxlRGVzY3JpcHRvciBlamJCdW5kbGUgPSAoRWpiQnVuZGxlRGVzY3JpcHRvcikgZGRSZWFkZXIucmVhZCggZGRJUyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgZm9yKEVqYkRlc2NyaXB0b3IgZWpiRGVzY3JpcHRvciA6IGVqYkJ1bmRsZS5nZXRFamJzKCkpewogICAgICAgICAgICAgICAgIGVqYkRlc2NyaXB0b3IuZ2V0UmVzb3VyY2VEZXNjcmlwdG9ycyhKYXZhRUVSZXNvdXJjZVR5cGUuQ0ZEKTsKICAgICAgICAgICAgICAgICBpZihlamJEZXNjcmlwdG9yLmdldE5hbWUoKS5lcXVhbHMoIkhlbGxvU3RhdGVmdWxFSkIiKSl7CkBAIC0xMjUsOSArMTI1LDkgQEAKICAgICAgICAgICAgICAgICAgICAgZmFpbCgiVW5rbm93biBFSkIgZGVzY3JpcHRvcjogIitlamJEZXNjcmlwdG9yLmdldE5hbWUoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRjTmFtZSwgc3RhdC5QQVNTKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH1jYXRjaChFeGNlcHRpb24gZSl7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0Y05hbWUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB0aHJvdyBlOwpAQCAtMTM5LDcgKzEzOSw3IEBACiAKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCB0ZXN0U3RhdGVmdWxTZXNzaW9uRUpCREQoRWpiRGVzY3JpcHRvciBlamIpIHRocm93cyBFeGNlcHRpb257CiAgICAgICAgIENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbkRlc2NyaXB0b3IgZGVzYzsKICAgICAgICAgTWFwPFN0cmluZyxDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb25EZXNjcmlwdG9yPiBleHBlY3RlZENGRERzID0gbmV3IEhhc2hNYXA8U3RyaW5nLENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbkRlc2NyaXB0b3I+KCk7CkBAIC0xNTQsNyArMTU0LDcgQEAKICAgICAgICAgZGVzYy5zZXRNaW5Qb29sU2l6ZSg0KTsKICAgICAgICAgZGVzYy5hZGRQcm9wZXJ0eSgidGVzdE5hbWUiLCAiZm9vIik7CiAgICAgICAgIGV4cGVjdGVkQ0ZERHMucHV0KGRlc2MuZ2V0TmFtZSgpLCBkZXNjKTsKLSAgICAgICAgCisKICAgICAgICAgZGVzYyA9IG5ldyBDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb25EZXNjcmlwdG9yKCk7CiAgICAgICAgIGRlc2Muc2V0RGVzY3JpcHRpb24oIm1vZHVsZS1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGluIEVKQiBERCIpOwogICAgICAgICBkZXNjLnNldE5hbWUoImphdmE6bW9kdWxlL2Vudi9TdGF0ZWZ1bEVKQl9Db25uZWN0aW9uRmFjdG9yeSIpOwpAQCAtMTc1LDkgKzE3NSw5IEBACiAgICAgICAgIGV4cGVjdGVkQ0ZERHMucHV0KGRlc2MuZ2V0TmFtZSgpLCBkZXNjKTsKIAogICAgICAgICBUZXN0VXRpbC5jb21wYXJlQ0ZERChleHBlY3RlZENGRERzLCBlamIuZ2V0UmVzb3VyY2VEZXNjcmlwdG9ycyhKYXZhRUVSZXNvdXJjZVR5cGUuQ0ZEKSk7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHRlc3RTdGF0ZWxlc3NTZXNzaW9uRUpCREQoRWpiRGVzY3JpcHRvciBlamIpIHRocm93cyBFeGNlcHRpb257CiAgICAgICAgIENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbkRlc2NyaXB0b3IgZGVzYzsKICAgICAgICAgTWFwPFN0cmluZyxDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb25EZXNjcmlwdG9yPiBleHBlY3RlZENGRERzID0gbmV3IEhhc2hNYXA8U3RyaW5nLENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbkRlc2NyaXB0b3I+KCk7CkBAIC0xOTIsNyArMTkyLDcgQEAKICAgICAgICAgZGVzYy5zZXRNaW5Qb29sU2l6ZSg0KTsKICAgICAgICAgZGVzYy5hZGRQcm9wZXJ0eSgidGVzdE5hbWUiLCAiZm9vIik7CiAgICAgICAgIGV4cGVjdGVkQ0ZERHMucHV0KGRlc2MuZ2V0TmFtZSgpLCBkZXNjKTsKLSAgICAgICAgCisKICAgICAgICAgZGVzYyA9IG5ldyBDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb25EZXNjcmlwdG9yKCk7CiAgICAgICAgIGRlc2Muc2V0RGVzY3JpcHRpb24oIm1vZHVsZS1zY29wZSByZXNvdXJjZSBkZWZpbmVkIGluIEVKQiBERCIpOwogICAgICAgICBkZXNjLnNldE5hbWUoImphdmE6bW9kdWxlL2Vudi9IZWxsb0VKQl9Db25uZWN0aW9uRmFjdG9yeSIpOwpAQCAtMjEzLDE4ICsyMTMsMTggQEAKICAgICAgICAgZXhwZWN0ZWRDRkREcy5wdXQoZGVzYy5nZXROYW1lKCksIGRlc2MpOwogCiAgICAgICAgIFRlc3RVdGlsLmNvbXBhcmVDRkREKGV4cGVjdGVkQ0ZERHMsIGVqYi5nZXRSZXNvdXJjZURlc2NyaXB0b3JzKEphdmFFRVJlc291cmNlVHlwZS5DRkQpKTsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCB0ZXN0RW50aXR5RUpCREQoKSB0aHJvd3MgRXhjZXB0aW9uewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgdGNOYW1lID0gImNvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLUVudGl0eS1FSkItREQtdGVzdCI7CiAgICAgICAgIElucHV0U3RyZWFtIGRkSVM9bnVsbDsKICAgICAgICAgdHJ5ewogICAgICAgICAgICAgU3RyaW5nIGRkRmlsZU5hbWUgPSAidXQtZW50aXR5LWVqYi1qYXIueG1sIjsKICAgICAgICAgICAgIEZpbGUgZGRGaWxlID0gbmV3IEZpbGUoZGVzY3JpcHRvckRpciwgZGRGaWxlTmFtZSk7CiAgICAgICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgiVGhlIHV0LWVudGl0eS1lamItamFyLnhtbCBub3QgZm91bmQ6ICIrZGRGaWxlLCBkZEZpbGUuZXhpc3RzKCkpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGRkSVMgPSBuZXcgRmlsZUlucHV0U3RyZWFtKGRkRmlsZSk7CiAgICAgICAgICAgICBFamJEZXBsb3ltZW50RGVzY3JpcHRvckZpbGUgZGRSZWFkZXIgPSBuZXcgRWpiRGVwbG95bWVudERlc2NyaXB0b3JGaWxlKCk7CiAgICAgICAgICAgICBFamJCdW5kbGVEZXNjcmlwdG9yIGVqYkJ1bmRsZSA9IChFamJCdW5kbGVEZXNjcmlwdG9yKSBkZFJlYWRlci5yZWFkKCBkZElTKTsKQEAgLTI0Myw3ICsyNDMsNyBAQAogICAgICAgICAgICAgICAgIGRlc2Muc2V0TWluUG9vbFNpemUoNCk7CiAgICAgICAgICAgICAgICAgZGVzYy5hZGRQcm9wZXJ0eSgidGVzdE5hbWUiLCAiZm9vIik7CiAgICAgICAgICAgICAgICAgZXhwZWN0ZWRDRkREcy5wdXQoZGVzYy5nZXROYW1lKCksIGRlc2MpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgZGVzYyA9IG5ldyBDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb25EZXNjcmlwdG9yKCk7CiAgICAgICAgICAgICAgICAgZGVzYy5zZXREZXNjcmlwdGlvbigibW9kdWxlLXNjb3BlIHJlc291cmNlIGRlZmluZWQgaW4gRUpCIEREIik7CiAgICAgICAgICAgICAgICAgZGVzYy5zZXROYW1lKCJqYXZhOm1vZHVsZS9lbnYvRW50aXR5X0Nvbm5lY3Rpb25GYWN0b3J5Iik7CkBAIC0yNjcsNyArMjY3LDcgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGNOYW1lLCBzdGF0LlBBU1MpOwotICAgICAgICAgICAgCisKICAgICAgICAgfWNhdGNoKEV4Y2VwdGlvbiBlKXsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRjTmFtZSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIHRocm93IGU7CkBAIC0yODEsMTQgKzI4MSwxNCBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHRlc3RNREJFSkJERCgpIHRocm93cyBFeGNlcHRpb257Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB0Y05hbWUgPSAiY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24tTURCLUVKQi1ERC10ZXN0IjsKICAgICAgICAgSW5wdXRTdHJlYW0gZGRJUz1udWxsOwogICAgICAgICB0cnl7CiAgICAgICAgICAgICBTdHJpbmcgZGRGaWxlTmFtZSA9ICJ1dC1tZGItZWpiLWphci54bWwiOwogICAgICAgICAgICAgRmlsZSBkZEZpbGUgPSBuZXcgRmlsZShkZXNjcmlwdG9yRGlyLCBkZEZpbGVOYW1lKTsKICAgICAgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCJUaGUgdXQtbWRiLWVqYi1qYXIueG1sIG5vdCBmb3VuZDogIitkZEZpbGUsIGRkRmlsZS5leGlzdHMoKSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgZGRJUyA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oZGRGaWxlKTsKICAgICAgICAgICAgIEVqYkRlcGxveW1lbnREZXNjcmlwdG9yRmlsZSBkZFJlYWRlciA9IG5ldyBFamJEZXBsb3ltZW50RGVzY3JpcHRvckZpbGUoKTsKICAgICAgICAgICAgIEVqYkJ1bmRsZURlc2NyaXB0b3IgZWpiQnVuZGxlID0gKEVqYkJ1bmRsZURlc2NyaXB0b3IpIGRkUmVhZGVyLnJlYWQoIGRkSVMpOwpAQCAtMzA3LDcgKzMwNyw3IEBACiAgICAgICAgICAgICAgICAgZGVzYy5zZXRNaW5Qb29sU2l6ZSg0KTsKICAgICAgICAgICAgICAgICBkZXNjLmFkZFByb3BlcnR5KCJ0ZXN0TmFtZSIsICJmb28iKTsKICAgICAgICAgICAgICAgICBleHBlY3RlZENGRERzLnB1dChkZXNjLmdldE5hbWUoKSwgZGVzYyk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZXNjID0gbmV3IENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbkRlc2NyaXB0b3IoKTsKICAgICAgICAgICAgICAgICBkZXNjLnNldERlc2NyaXB0aW9uKCJtb2R1bGUtc2NvcGUgcmVzb3VyY2UgZGVmaW5lZCBpbiBFSkIgREQiKTsKICAgICAgICAgICAgICAgICBkZXNjLnNldE5hbWUoImphdmE6bW9kdWxlL2Vudi9NREJfQ29ubmVjdGlvbkZhY3RvcnkiKTsKQEAgLTMzMSw3ICszMzEsNyBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0Y05hbWUsIHN0YXQuUEFTUyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9Y2F0Y2goRXhjZXB0aW9uIGUpewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGNOYW1lLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgdGhyb3cgZTsKQEAgLTM0NSwxNCArMzQ1LDE0IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgdGVzdEludGVyY2VwdG9yRUpCREQoKSB0aHJvd3MgRXhjZXB0aW9uewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgdGNOYW1lID0gImNvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uLUludGVyY2VwdG9yLUVKQi1ERC10ZXN0IjsKICAgICAgICAgSW5wdXRTdHJlYW0gZGRJUz1udWxsOwogICAgICAgICB0cnl7CiAgICAgICAgICAgICBTdHJpbmcgZGRGaWxlTmFtZSA9ICJ1dC1pbnRlcmNlcHRvci1lamItamFyLnhtbCI7CiAgICAgICAgICAgICBGaWxlIGRkRmlsZSA9IG5ldyBGaWxlKGRlc2NyaXB0b3JEaXIsIGRkRmlsZU5hbWUpOwogICAgICAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIlRoZSB1dC1pbnRlcmNlcHRvci1lamItamFyLnhtbCBub3QgZm91bmQ6ICIrZGRGaWxlLCBkZEZpbGUuZXhpc3RzKCkpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGRkSVMgPSBuZXcgRmlsZUlucHV0U3RyZWFtKGRkRmlsZSk7CiAgICAgICAgICAgICBFamJEZXBsb3ltZW50RGVzY3JpcHRvckZpbGUgZGRSZWFkZXIgPSBuZXcgRWpiRGVwbG95bWVudERlc2NyaXB0b3JGaWxlKCk7CiAgICAgICAgICAgICBFamJCdW5kbGVEZXNjcmlwdG9yIGVqYkJ1bmRsZSA9IChFamJCdW5kbGVEZXNjcmlwdG9yKSBkZFJlYWRlci5yZWFkKCBkZElTKTsKQEAgLTM3MSw3ICszNzEsNyBAQAogICAgICAgICAgICAgICAgIGRlc2Muc2V0TWluUG9vbFNpemUoNCk7CiAgICAgICAgICAgICAgICAgZGVzYy5hZGRQcm9wZXJ0eSgidGVzdE5hbWUiLCAiZm9vIik7CiAgICAgICAgICAgICAgICAgZXhwZWN0ZWRDRkREcy5wdXQoZGVzYy5nZXROYW1lKCksIGRlc2MpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgZGVzYyA9IG5ldyBDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb25EZXNjcmlwdG9yKCk7CiAgICAgICAgICAgICAgICAgZGVzYy5zZXREZXNjcmlwdGlvbigibW9kdWxlLXNjb3BlIHJlc291cmNlIGRlZmluZWQgaW4gRUpCIEREIik7CiAgICAgICAgICAgICAgICAgZGVzYy5zZXROYW1lKCJqYXZhOm1vZHVsZS9lbnYvSW50ZXJjZXB0b3JfQ29ubmVjdGlvbkZhY3RvcnkiKTsKQEAgLTM5NSw3ICszOTUsNyBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0Y05hbWUsIHN0YXQuUEFTUyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9Y2F0Y2goRXhjZXB0aW9uIGUpewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGNOYW1lLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgdGhyb3cgZTsKQEAgLTQwOSwxOCArNDA5LDE4IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgdGVzdFdlYkREKCkgdGhyb3dzIEV4Y2VwdGlvbnsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHRjTmFtZSA9ICJjb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi1XZWItREQtdGVzdCI7CiAgICAgICAgIElucHV0U3RyZWFtIGRkSVM9bnVsbDsKICAgICAgICAgdHJ5ewogICAgICAgICAgICAgU3RyaW5nIGRkRmlsZU5hbWUgPSAidXQtd2ViLnhtbCI7CiAgICAgICAgICAgICBGaWxlIGRkRmlsZSA9IG5ldyBGaWxlKGRlc2NyaXB0b3JEaXIsIGRkRmlsZU5hbWUpOwogICAgICAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIlRoZSB1dC13ZWIueG1sIG5vdCBmb3VuZDogIitkZEZpbGUsIGRkRmlsZS5leGlzdHMoKSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgZGRJUyA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oZGRGaWxlKTsKICAgICAgICAgICAgIFdlYkRlcGxveW1lbnREZXNjcmlwdG9yRmlsZSBkZFJlYWRlciA9IG5ldyBXZWJEZXBsb3ltZW50RGVzY3JpcHRvckZpbGUoKTsKICAgICAgICAgICAgIFdlYkJ1bmRsZURlc2NyaXB0b3Igd2ViQnVuZGxlID0gIGRkUmVhZGVyLnJlYWQoIGRkSVMpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbkRlc2NyaXB0b3IgZGVzYzsKICAgICAgICAgICAgIE1hcDxTdHJpbmcsQ29ubmVjdGlvbkZhY3RvcnlEZWZpbml0aW9uRGVzY3JpcHRvcj4gZXhwZWN0ZWRDRkREcyA9IG5ldyBIYXNoTWFwPFN0cmluZyxDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb25EZXNjcmlwdG9yPigpOwogCkBAIC00MzQsNyArNDM0LDcgQEAKICAgICAgICAgICAgIGRlc2Muc2V0TWluUG9vbFNpemUoNCk7CiAgICAgICAgICAgICBkZXNjLmFkZFByb3BlcnR5KCJ0ZXN0TmFtZSIsICJmb28iKTsKICAgICAgICAgICAgIGV4cGVjdGVkQ0ZERHMucHV0KGRlc2MuZ2V0TmFtZSgpLCBkZXNjKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBkZXNjID0gbmV3IENvbm5lY3Rpb25GYWN0b3J5RGVmaW5pdGlvbkRlc2NyaXB0b3IoKTsKICAgICAgICAgICAgIGRlc2Muc2V0RGVzY3JpcHRpb24oImFwcGxpY2F0aW9uLXNjb3BlIHJlc291cmNlIGRlZmluZWQgaW4gV2ViIEREIik7CiAgICAgICAgICAgICBkZXNjLnNldE5hbWUoImphdmE6YXBwL2Vudi9Db25uZWN0aW9uRmFjdG9yeSIpOwpAQCAtNDU3LDcgKzQ1Nyw3IEBACiAgICAgICAgICAgICBUZXN0VXRpbC5jb21wYXJlQ0ZERChleHBlY3RlZENGRERzLCB3ZWJCdW5kbGUuZ2V0UmVzb3VyY2VEZXNjcmlwdG9ycyhKYXZhRUVSZXNvdXJjZVR5cGUuQ0ZEKSk7CiAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRjTmFtZSwgc3RhdC5QQVNTKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH1jYXRjaChFeGNlcHRpb24gZSl7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0Y05hbWUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB0aHJvdyBlOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL3V0L1Rlc3RVdGlsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vdXQvVGVzdFV0aWwuamF2YQppbmRleCAyNDE3OGNkLi43ZGFkZDdmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vdXQvVGVzdFV0aWwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vdXQvVGVzdFV0aWwuamF2YQpAQCAtMjksNDUgKzI5LDQ1IEBACiAKIHB1YmxpYyBjbGFzcyBUZXN0VXRpbCB7CiAKLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgY29tcGFyZUNGREQoTWFwPFN0cmluZyxDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb25EZXNjcmlwdG9yPiBleHBlY3RlZENGRERzLCAKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgY29tcGFyZUNGREQoTWFwPFN0cmluZyxDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb25EZXNjcmlwdG9yPiBleHBlY3RlZENGRERzLAogICAgICAgICAgICAgU2V0PFJlc291cmNlRGVzY3JpcHRvcj4gYWN0dWFsQ0ZERHMpIHRocm93cyBFeGNlcHRpb257Ci0gICAgICAgIAorCiAgICAgICAgIGZvcihEZXNjcmlwdG9yIGRlc2NyaXB0b3IgOiBhY3R1YWxDRkREcyl7CiAgICAgICAgICAgICBDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb25EZXNjcmlwdG9yIGFjdHVhbERlc2MgPSAoQ29ubmVjdGlvbkZhY3RvcnlEZWZpbml0aW9uRGVzY3JpcHRvcilkZXNjcmlwdG9yOwogICAgICAgICAgICAgYXNzZXJ0Tm90TnVsbCgidGhlIG5hbWUgb2YgY29ubmVjdG9yIHJlc291cmNlIGNhbm5vdCBiZSBudWxsLiIsIGFjdHVhbERlc2MuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBDb25uZWN0aW9uRmFjdG9yeURlZmluaXRpb25EZXNjcmlwdG9yIGV4cGVjdGVkRGVzYyA9IGV4cGVjdGVkQ0ZERHMuZ2V0KGFjdHVhbERlc2MuZ2V0TmFtZSgpKTsKICAgICAgICAgICAgIGFzc2VydE5vdE51bGwoIlRoZSBDRkQgb2YgdGhlIG5hbWUgWyIrYWN0dWFsRGVzYy5nZXROYW1lKCkrIl0gaXMgbm90IGV4cGVjdGVkLiIsIGV4cGVjdGVkRGVzYyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJGYWlsIHRvIHZlcmlmeSBjbGFzcy1uYW1lIG9mIHRoZSBDRkREOiIrYWN0dWFsRGVzYy5nZXROYW1lKCksCiAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkRGVzYy5nZXRJbnRlcmZhY2VOYW1lKCksIGFjdHVhbERlc2MuZ2V0SW50ZXJmYWNlTmFtZSgpKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIkZhaWwgdG8gdmVyaWZ5IHJlc291cmNlLWFkYXB0ZXIgb2YgdGhlIENGREQ6IithY3R1YWxEZXNjLmdldE5hbWUoKSwKICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWREZXNjLmdldFJlc291cmNlQWRhcHRlcigpLCBhY3R1YWxEZXNjLmdldFJlc291cmNlQWRhcHRlcigpKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIkZhaWwgdG8gdmVyaWZ5IHRyYW5zYWN0aW9uLXN1cHBvcnQgb2YgdGhlIENGREQ6IithY3R1YWxEZXNjLmdldE5hbWUoKSwKICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWREZXNjLmdldFRyYW5zYWN0aW9uU3VwcG9ydCgpLCBhY3R1YWxEZXNjLmdldFRyYW5zYWN0aW9uU3VwcG9ydCgpKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIkZhaWwgdG8gdmVyaWZ5IG1heC1wb29sLXNpemUgb2YgdGhlIENGREQ6IithY3R1YWxEZXNjLmdldE5hbWUoKSwKICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWREZXNjLmdldE1heFBvb2xTaXplKCksIGFjdHVhbERlc2MuZ2V0TWF4UG9vbFNpemUoKSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJGYWlsIHRvIHZlcmlmeSBtaW4tcG9vbC1zaXplIG9mIHRoZSBDRkREOiIrYWN0dWFsRGVzYy5nZXROYW1lKCksCiAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkRGVzYy5nZXRNaW5Qb29sU2l6ZSgpLCBhY3R1YWxEZXNjLmdldE1pblBvb2xTaXplKCkpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGFzc2VydEVxdWFscygiRmFpbCB0byB2ZXJpZnkgZGVzY3JpcHRpb24gb2YgdGhlIENGREQ6IithY3R1YWxEZXNjLmdldE5hbWUoKSwKICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWREZXNjLmdldERlc2NyaXB0aW9uKCksIGFjdHVhbERlc2MuZ2V0RGVzY3JpcHRpb24oKSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgUHJvcGVydGllcyBleHBlY3RlZFByb3BzID0gZXhwZWN0ZWREZXNjLmdldFByb3BlcnRpZXMoKTsKICAgICAgICAgICAgIFByb3BlcnRpZXMgYWN0dWFsUHJvcHMgPSBhY3R1YWxEZXNjLmdldFByb3BlcnRpZXMoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBmb3IoT2JqZWN0IG5hbWUgOiBhY3R1YWxQcm9wcy5rZXlTZXQoKSl7CiAgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJGYWlsIHRvIHZlcmlmeSBwcm9wZXJ0eSAoIituYW1lKyIpIG9mIHRoZSBDRkREOiIrYWN0dWFsRGVzYy5nZXROYW1lKCksCiAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZFByb3BzLmdldChuYW1lKSwgYWN0dWFsUHJvcHMuZ2V0KG5hbWUpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIkZhaWwgdG8gdmVyaWZ5IHNpemUgb2YgcHJvcGVydGllcyBvZiB0aGUgQ0ZERDoiK2FjdHVhbERlc2MuZ2V0TmFtZSgpLAogICAgICAgICAgICAgICAgICAgICBleHBlY3RlZFByb3BzLnNpemUoKSwgYWN0dWFsUHJvcHMuc2l6ZSgpKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBleHBlY3RlZENGRERzLnJlbW92ZShhY3R1YWxEZXNjLmdldE5hbWUoKSk7CiAgICAgICAgIH0KICAgICAgICAgaWYoZXhwZWN0ZWRDRkREcy5zaXplKCk+MCl7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwKaW5kZXggMzhhZjE4Yy4uMjkwNTkzMiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9hcHAvc3JjL01FVEEtSU5GL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvYXBwL3NyYy9NRVRBLUlORi9lamItamFyLnhtbApAQCAtOTEsOCArOTEsOCBAQAogICAgICAgICA8cmVzLXNoYXJpbmctc2NvcGU+U2hhcmVhYmxlPC9yZXMtc2hhcmluZy1zY29wZT4KICAgICAgIDwvcmVzb3VyY2UtcmVmPgogICAgICAgPHJlc291cmNlLWVudi1yZWY+Ci0JPHJlc291cmNlLWVudi1yZWYtbmFtZT5laXMvdGVzdEFkbWluPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+Ci0JPHJlc291cmNlLWVudi1yZWYtdHlwZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvcmVzb3VyY2UtZW52LXJlZi10eXBlPgorICAgIDxyZXNvdXJjZS1lbnYtcmVmLW5hbWU+ZWlzL3Rlc3RBZG1pbjwvcmVzb3VyY2UtZW52LXJlZi1uYW1lPgorICAgIDxyZXNvdXJjZS1lbnYtcmVmLXR5cGU+Y29ubmVjdG9yLk15QWRtaW5PYmplY3Q8L3Jlc291cmNlLWVudi1yZWYtdHlwZT4KICAgICAgIDwvcmVzb3VyY2UtZW52LXJlZj4KICAgICAgIDxzZWN1cml0eS1pZGVudGl0eT4KICAgICAgICAgPHVzZS1jYWxsZXItaWRlbnRpdHkvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9hcHAvc3JjL01FVEEtSU5GL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvYXBwL3NyYy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwKaW5kZXggMTE0NmE1YS4uMGE3ZTBkYSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9hcHAvc3JjL01FVEEtSU5GL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCkBAIC0zMyw3ICszMyw3IEBACiAgICAgICAgICAgICBUZXN0SW50ZWdlclByb3AKICAgICAgICAgICA8L2FjdGl2YXRpb24tY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgPGFjdGl2YXRpb24tY29uZmlnLXByb3BlcnR5LXZhbHVlPgotICAgICAgICAgICAgMiAKKyAgICAgICAgICAgIDIKICAgICAgICAgICA8L2FjdGl2YXRpb24tY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICA8L2FjdGl2YXRpb24tY29uZmlnLXByb3BlcnR5PgogICAgICAgICA8L2FjdGl2YXRpb24tY29uZmlnPgpAQCAtODUsNyArODUsNyBAQAogICAgICAgPC9yZXNvdXJjZS1yZWY+CiAgICAgICA8cmVzb3VyY2UtZW52LXJlZj4KICAgICAgICAgPHJlc291cmNlLWVudi1yZWYtbmFtZT5laXMvdGVzdEFkbWluPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+Ci0JPGpuZGktbmFtZT5laXMvdGVzdEFkbWluPC9qbmRpLW5hbWU+CisgICAgPGpuZGktbmFtZT5laXMvdGVzdEFkbWluPC9qbmRpLW5hbWU+CiAgICAgICA8L3Jlc291cmNlLWVudi1yZWY+CiAgICAgICA8Z2VuLWNsYXNzZXMvPgogICAgIDwvZWpiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9hcHAvc3JjL2JlYW5zL01lc3NhZ2VDaGVja2VyRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L2FwcC9zcmMvYmVhbnMvTWVzc2FnZUNoZWNrZXJFSkIuamF2YQppbmRleCBlMjJmYTEwLi40MDc2ZTQ5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L2FwcC9zcmMvYmVhbnMvTWVzc2FnZUNoZWNrZXJFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L2FwcC9zcmMvYmVhbnMvTWVzc2FnZUNoZWNrZXJFSkIuamF2YQpAQCAtNDAsNyArNDAsNyBAQAogCiAgICAgcHVibGljIE1lc3NhZ2VDaGVja2VyRUpCKCkge30KIAotICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIAorICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpCiAgICAgICAgIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImJlYW4gY3JlYXRlZCIpOwogICAgICAgICBoZWxkQ29uID0gbnVsbDsKQEAgLTcwLDExICs3MCwxMSBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgc3luY2hyb25pemVkIChDb250cm9scy5nZXRMb2NrT2JqZWN0KCkpIHsKICAgICAgICAgICAgICAgICAvL1RlbGwgdGhlIHJlc291cmNlIGFkYXB0ZXIgdGhlIGNsaWVudCBpcyByZWFkeSB0byBydW4KLSAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkubm90aWZ5QWxsKCk7IAotICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIENvbnRyb2xzLmdldExvY2tPYmplY3QoKS5ub3RpZnlBbGwoKTsKKwogICAgICAgICAgICAgICAgIGRlYnVnKCJOT1RJRklFRC4uLiBTVEFSVCBXQUlUSU5HIik7CiAgICAgICAgICAgICAgICAgLy9XYWl0IHVudGlsIGJlaW5nIHRvbGQgdG8gcmVhZCBmcm9tIHRoZSBkYXRhYmFzZQotICAgICAgICAgICAgICAgIENvbnRyb2xzLmdldExvY2tPYmplY3QoKS53YWl0KCk7IAorICAgICAgICAgICAgICAgIENvbnRyb2xzLmdldExvY2tPYmplY3QoKS53YWl0KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CkBAIC05MywyMiArOTMsMjIgQEAKICAgICB9CiAKICAgICBwdWJsaWMgaW50IGdldE1lc3NhZ2VDb3VudCgpIHsKLQl0cnkgeworICAgIHRyeSB7CiAgICAgICAgICAgICBDb25uZWN0aW9uIGNvbiA9IGdldEZyZXNoQ29ubmVjdGlvbigpOwogICAgICAgICAgICAgaW50IGNvdW50MSA9IGdldENvdW50KGNvbik7CiAgICAgICAgICAgICBjb24uY2xvc2UoKTsKLSAgICAgICAgICAgIAotCSAgICAvKgorCisgICAgICAgIC8qCiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQoQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpKSB7CiAgICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLm5vdGlmeSgpOwogICAgICAgICAgICAgfQotCSAgICAqLwotICAgICAgICAgICAgICAgIAorICAgICAgICAqLworCiAgICAgICAgICAgICByZXR1cm4gY291bnQxOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLm91dCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwotCX0KKyAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSBpbnQgZ2V0Q291bnQoQ29ubmVjdGlvbiBjb24pIHRocm93cyBTUUxFeGNlcHRpb24gewpAQCAtMTM0LDEwICsxMzQsMTAgQEAKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIHVzZXIgPSAoU3RyaW5nKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvdXNlciIpOwogICAgICAgICAgICAgcGFzc3dvcmQgPSAoU3RyaW5nKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvcGFzc3dvcmQiKTsKLQkgICAgQ29udHJvbHMgPSAoTXlBZG1pbk9iamVjdCkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2Vpcy90ZXN0QWRtaW4iKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDQUxMSU5HIElOSVRJTElaRSBdXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXSIpOwotCSAgICBDb250cm9scy5pbml0aWFsaXplKCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ0FMTEVEIElOSVRJTElaRSBdXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXSIgKyBDb250cm9scyk7CisgICAgICAgIENvbnRyb2xzID0gKE15QWRtaW5PYmplY3QpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9laXMvdGVzdEFkbWluIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ0FMTElORyBJTklUSUxJWkUgXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV0iKTsKKyAgICAgICAgQ29udHJvbHMuaW5pdGlhbGl6ZSgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNBTExFRCBJTklUSUxJWkUgXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV0iICsgQ29udHJvbHMpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CkBAIC0xNzIsNyArMTcyLDcgQEAKICAgICAgICAgICAgIGRlYnVnKCJMb29rZWQgdXAgRGF0YXNvdXJjZVxuIik7CiAgICAgICAgICAgICBkZWJ1ZygiR2V0IEpEQkMgY29ubmVjdGlvbiwgYXV0byBzaWduIG9uIik7CiAgICAgICAgICAgICBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKGNvbiAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbjsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0xODMsNyArMTgzLDcgQEAKICAgICAgICAgICAgIHRocm93IGV4MTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBjbG9zZUNvbm5lY3Rpb24oQ29ubmVjdGlvbiBjb24pIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgICBpZiAoaGVsZENvbiAhPSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L2FwcC9zcmMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvYXBwL3NyYy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGRhZDIwN2IuLjBiMzhjMTkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvYXBwL3NyYy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvYXBwL3NyYy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIGVqYi1qYXIueG1sPU1FVEEtSU5GL2VqYi1qYXIueG1sCiBzdW4tZWpiLWphci54bWw9TUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L2FwcC9zcmMvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9hcHAvc3JjL2NsaWVudC9DbGllbnQuamF2YQppbmRleCAxYWVlNDRiLi5mODAyMTQxIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L2FwcC9zcmMvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvYXBwL3NyYy9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI4LDQ1ICsyOCw0NSBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwotICAgIAorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgICAgICAvL3N1cGVyKGFyZ3MpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGRvVGVzdCgpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVGhpcyBpcyB0byB0ZXN0IGNvbm5lY3RvciAxLjUgIisKLQkgICAgICAgICAgICAgImNvbnRyYWN0cy4iKTsKLSAgICAgICAgCisgICAgICAgICAgICAgICAgICJjb250cmFjdHMuIik7CisKICAgICAgICAgU3RyaW5nIHJlcyA9ICJOT1QgUlVOIjsKLQlkZWJ1ZygiZG9UZXN0KCkgRU5URVIuLi4iKTsKKyAgICBkZWJ1ZygiZG9UZXN0KCkgRU5URVIuLi4iKTsKICAgICAgICAgYm9vbGVhbiBwYXNzID0gZmFsc2U7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXMgID0gIkFMTCBURVNUUyBQQVNTRUQiOwotCSAgICBpbnQgdGVzdENvdW50ID0gMTsKKyAgICAgICAgaW50IHRlc3RDb3VudCA9IDE7CiAgICAgICAgICAgICB3aGlsZSAoIWRvbmUoKSkgewotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgbm90aWZ5QW5kV2FpdCgpOwogICAgICAgICAgICAgICAgIGlmICghZG9uZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJSdW5uaW5nLi4uIik7CiAgICAgICAgICAgICAgICAgICAgIHBhc3MgPSBjaGVja1Jlc3VsdHMoZXhwZWN0ZWRSZXN1bHRzKCkpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiR290IGV4cGVjdGVkIHJlc3VsdHMgPSAiICsgcGFzcyk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vZG8gbm90IGNvbnRpbnVlIGlmIG9uZSB0ZXN0IGZhaWxlZAogICAgICAgICAgICAgICAgICAgICBpZiAoIXBhc3MpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlcyA9ICJTT01FIFRFU1RTIEZBSUxFRCI7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiIENvbm5lY3RvciAxLjUgdGVzdCAtICIgKyB0ZXN0Q291bnQsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiIENvbm5lY3RvciAxLjUgdGVzdCAtICIgKyB0ZXN0Q291bnQsIHN0YXQuUEFTUyk7Ci0JCSAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotCQl0ZXN0Q291bnQgKys7CisgICAgICAgIHRlc3RDb3VudCArKzsKICAgICAgICAgICAgIH0KIAogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTc2LDE0ICs3NiwxNCBAQAogICAgICAgICB9CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJjb25uZWN0b3IxNSIpOwogCi0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCJFWElUSU5HLi4uIFNUQVRVUyA9ICIgKyByZXMpOwogICAgICAgICByZXR1cm4gcmVzOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgYm9vbGVhbiBjaGVja1Jlc3VsdHMoaW50IG51bSkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIE9iamVjdCBvID0gKG5ldyBJbml0aWFsQ29udGV4dCgpKS5sb29rdXAoIk15TWVzc2FnZUNoZWNrZXIiKTsKLSAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkgCisgICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpCiAgICAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cobywgTWVzc2FnZUNoZWNrZXJIb21lLmNsYXNzKTsKICAgICAgICAgTWVzc2FnZUNoZWNrZXIgY2hlY2tlciA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgIGludCByZXN1bHQgPSBjaGVja2VyLmdldE1lc3NhZ2VDb3VudCgpOwpAQCAtOTIsNyArOTIsNyBAQAogCiAgICAgcHJpdmF0ZSBib29sZWFuIGRvbmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgT2JqZWN0IG8gPSAobmV3IEluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiTXlNZXNzYWdlQ2hlY2tlciIpOwotICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKSAKKyAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkKICAgICAgICAgICAgIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvLCBNZXNzYWdlQ2hlY2tlckhvbWUuY2xhc3MpOwogICAgICAgICBNZXNzYWdlQ2hlY2tlciBjaGVja2VyID0gaG9tZS5jcmVhdGUoKTsKICAgICAgICAgcmV0dXJuIGNoZWNrZXIuZG9uZSgpOwpAQCAtMTAwLDcgKzEwMCw3IEBACiAKICAgICBwcml2YXRlIGludCBleHBlY3RlZFJlc3VsdHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgT2JqZWN0IG8gPSAobmV3IEluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiTXlNZXNzYWdlQ2hlY2tlciIpOwotICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKSAKKyAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkKICAgICAgICAgICAgIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvLCBNZXNzYWdlQ2hlY2tlckhvbWUuY2xhc3MpOwogICAgICAgICBNZXNzYWdlQ2hlY2tlciBjaGVja2VyID0gaG9tZS5jcmVhdGUoKTsKICAgICAgICAgcmV0dXJuIGNoZWNrZXIuZXhwZWN0ZWRSZXN1bHRzKCk7CkBAIC0xMDgsNyArMTA4LDcgQEAKIAogICAgIHByaXZhdGUgdm9pZCBub3RpZnlBbmRXYWl0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIE9iamVjdCBvID0gKG5ldyBJbml0aWFsQ29udGV4dCgpKS5sb29rdXAoIk15TWVzc2FnZUNoZWNrZXIiKTsKLSAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkgCisgICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpCiAgICAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cobywgTWVzc2FnZUNoZWNrZXJIb21lLmNsYXNzKTsKICAgICAgICAgTWVzc2FnZUNoZWNrZXIgY2hlY2tlciA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgIGNoZWNrZXIubm90aWZ5QW5kV2FpdCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9hcHAvc3JjL21kYi9NeU1lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L2FwcC9zcmMvbWRiL015TWVzc2FnZUJlYW4uamF2YQppbmRleCBhNDhhYWIxLi5iMzczMDUwIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L2FwcC9zcmMvbWRiL015TWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L2FwcC9zcmMvbWRiL015TWVzc2FnZUJlYW4uamF2YQpAQCAtMjksNDEgKzI5LDQxIEBACiAKIC8qKgogICovCi1wdWJsaWMgY2xhc3MgTXlNZXNzYWdlQmVhbiBpbXBsZW1lbnRzIE1lc3NhZ2VEcml2ZW5CZWFuLCAKK3B1YmxpYyBjbGFzcyBNeU1lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZURyaXZlbkJlYW4sCiAgICAgICAgIE15TWVzc2FnZUxpc3RlbmVyIHsKIAogICAgIHByaXZhdGUgdHJhbnNpZW50IE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYyA9IG51bGw7CiAgICAgcHJpdmF0ZSBDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3Rvciwgd2hpY2ggaXMgcHVibGljIGFuZCB0YWtlcyBubyBhcmd1bWVudHMuCiAgICAgICovCiAgICAgcHVibGljIE15TWVzc2FnZUJlYW4oKSB7fQogCiAgICAgLyoqCi0gICAgICogc2V0TWVzc2FnZURyaXZlbkNvbnRleHQgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCAKLSAgICAgKiBub3QgZmluYWwgb3Igc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCAKKyAgICAgKiBzZXRNZXNzYWdlRHJpdmVuQ29udGV4dCBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0CisgICAgICogbm90IGZpbmFsIG9yIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQKICAgICAgKiB3aXRoIG9uZSBhcmd1bWVudCBvZiB0eXBlIGpha2FydGEuZWpiLk1lc3NhZ2VEcml2ZW5Db250ZXh0LgogICAgICAqCiAgICAgICogQHBhcmFtIG1kYyAgICB0aGUgY29udGV4dCB0byBzZXQKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRNZXNzYWdlRHJpdmVuQ29udGV4dChNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGMpIHsKLQl0aGlzLm1kYyA9IG1kYzsKKyAgICB0aGlzLm1kYyA9IG1kYzsKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBlamJDcmVhdGUgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IgCi0gICAgICogc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCB3aXRoIG5vIAorICAgICAqIGVqYkNyZWF0ZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvcgorICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBubwogICAgICAqIGFyZ3VtZW50cy4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB7IH0KIAogICAgIC8qKgotICAgICAqIG9uTWVzc2FnZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvciAKKyAgICAgKiBvbk1lc3NhZ2UgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IKICAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggb25lIGFyZ3VtZW50CiAgICAgICogb2YgdHlwZSBqYWthcnRhLmptcy5NZXNzYWdlLgogICAgICAqCi0gICAgICogQ2FzdHMgdGhlIGluY29taW5nIE1lc3NhZ2UgdG8gYSBUZXh0TWVzc2FnZSBhbmQgZGlzcGxheXMgCisgICAgICogQ2FzdHMgdGhlIGluY29taW5nIE1lc3NhZ2UgdG8gYSBUZXh0TWVzc2FnZSBhbmQgZGlzcGxheXMKICAgICAgKiB0aGUgdGV4dC4KICAgICAgKgogICAgICAqIEBwYXJhbSBpbk1lc3NhZ2UgICAgdGhlIGluY29taW5nIG1lc3NhZ2UKQEAgLTc0LDcgKzc0LDcgQEAKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgaWYgKGluTWVzc2FnZS5lbmRzV2l0aCgiV1JJVEUiKSkgewotICAgICAgICAgICAgICAgIGRvRGJTdHVmZigiV1JJVEUiLCAKKyAgICAgICAgICAgICAgICBkb0RiU3R1ZmYoIldSSVRFIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGluTWVzc2FnZS5zdWJzdHJpbmcoMCwgaW5NZXNzYWdlLmxhc3RJbmRleE9mKCI6IikpKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5NZXNzYWdlLmVuZHNXaXRoKCJERUxFVEUiKSkgewogICAgICAgICAgICAgICAgIGRvRGJTdHVmZigiREVMRVRFIiwKQEAgLTkwLDEwICs5MCwxMCBAQAogICAgICAgICB9CiAKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBlamJSZW1vdmUgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IgCi0gICAgICogc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCB3aXRoIG5vIAorICAgICAqIGVqYlJlbW92ZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvcgorICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBubwogICAgICAqIGFyZ3VtZW50cy4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7fQpAQCAtMTAzLDYyICsxMDMsNjIgQEAKIAogICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbiA9IG51bGw7CiAgICAgICAgIFN0cmluZyBpZCAgICA9IG1lc3NhZ2Uuc3Vic3RyaW5nKDAsIG1lc3NhZ2UuaW5kZXhPZigiOiIpKTsKLSAgICAgICAgU3RyaW5nIGJvZHkgID0gbWVzc2FnZS5zdWJzdHJpbmcobWVzc2FnZS5pbmRleE9mKCI6IikrMSk7IAorICAgICAgICBTdHJpbmcgYm9keSAgPSBtZXNzYWdlLnN1YnN0cmluZyhtZXNzYWdlLmluZGV4T2YoIjoiKSsxKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoIlJFQUQiLmVxdWFscyhvcCkpIHsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGRlYnVnKCJSZWFkaW5nIHJvdyBmcm9tIGRhdGFiYXNlLi4uIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBDcmVhdGluZyBhIGRhdGFiYXNlIGNvbm5lY3Rpb24KIAogICAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvTXlEQiIpOwogICAgICAgICAgICAgICAgICAgZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKICAgICAgICAgICAgICAgICAgIGRlYnVnKCJHZXQgSkRCQyBjb25uZWN0aW9uLCBhdXRvIHNpZ24gb24iKTsKICAgICAgICAgICAgICAgICAgIGRiQ29ubmVjdGlvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICBTdGF0ZW1lbnQgc3RtdCA9IGRiQ29ubmVjdGlvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgIFN0cmluZyBxdWVyeSA9IAorICAgICAgICAgICAgICAgICAgU3RyaW5nIHF1ZXJ5ID0KICAgICAgICAgICAgICAgICAgICJTRUxFQ1QgaWQgZnJvbSBtZXNzYWdlcyB3aGVyZSBpZCA9ICdRUSciOwogICAgICAgICAgICAgICAgICAgUmVzdWx0U2V0IHJlc3VsdHMgPSBzdG10LmV4ZWN1dGVRdWVyeShxdWVyeSk7CiAgICAgICAgICAgICAgICAgICByZXN1bHRzLm5leHQoKTsKLSAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUVEgaGFzIGJhbGFuY2UgIiArIAorICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJRUSBoYXMgYmFsYW5jZSAiICsKICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuZ2V0SW50KCJiYWxhbmNlIikgKyAiIGRvbGxhcnMiKTsKICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuY2xvc2UoKTsKICAgICAgICAgICAgICAgICAgIHN0bXQuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlYWQgb25lIGFjY291bnRcbiIpOwogCiAgICAgICAgICAgICB9IGVsc2UgaWYgKCJXUklURSIuZXF1YWxzKG9wKSkgewogCiAgICAgICAgICAgICAgICAgZGVidWcoIkluc2VydGluZyBvbmUgbWVzc2FnZSBpbiB0aGUgZGF0YWJhc2VcbiIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBDcmVhdGluZyBhIGRhdGFiYXNlIGNvbm5lY3Rpb24KICAgICAgICAgICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9NeURCIik7CiAgICAgICAgICAgICAgICAgLy9kZWJ1ZygiTG9va2VkIHVwIERhdGFzb3VyY2VcbiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkdldCBKREJDIGNvbm5lY3Rpb24sIGF1dG8gc2lnbiBvbiIpOwogICAgICAgICAgICAgICAgIGRiQ29ubmVjdGlvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGNyZWF0ZVJvdyhpZCwgYm9keSwgZGJDb25uZWN0aW9uKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0ZWQgb25lIG1lc3NhZ2VcbiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICB9IGVsc2UgaWYgKCJERUxFVEUiLmVxdWFscyhvcCkpIHsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGRlYnVnKCJEZWxldGluZyBvbmUgbWVzc2FnZSBmcm9tIHRoZSBkYXRhYmFzZVxuIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBDcmVhdGluZyBhIGRhdGFiYXNlIGNvbm5lY3Rpb24KICAgICAgICAgICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9NeURCIik7CiAgICAgICAgICAgICAgICAgLy9kZWJ1ZygiTG9va2VkIHVwIERhdGFzb3VyY2VcbiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkdldCBKREJDIGNvbm5lY3Rpb24sIGF1dG8gc2lnbiBvbiIpOwogICAgICAgICAgICAgICAgIGRiQ29ubmVjdGlvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGRlbGV0ZVJvdyhpZCwgZGJDb25uZWN0aW9uKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRlbGV0ZWQgb25lIG1lc3NhZ2VcbiIpOwogICAgICAgICAgICAgfSBlbHNlIGlmICgiREVMRVRFX0FMTCIuZXF1YWxzKG9wKSkgewotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgZGVidWcoIkRlbGV0aW5nIGFsbCBtZXNzYWdlcyBmcm9tIHRoZSBkYXRhYmFzZVxuIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBDcmVhdGluZyBhIGRhdGFiYXNlIGNvbm5lY3Rpb24KICAgICAgICAgICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9NeURCIik7CiAgICAgICAgICAgICAgICAgLy9kZWJ1ZygiTG9va2VkIHVwIERhdGFzb3VyY2VcbiIpOwpAQCAtMTY5LDcgKzE2OSw3IEBACiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vdW5zdXBwb3J0ZWQgb3AKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgIH1maW5hbGx5ewogICAgICAgICAgICAgdHJ5ewogICAgICAgICAgICAgICAgIGRiQ29ubmVjdGlvbi5jbG9zZSgpOwpAQCAtMTc4LDkgKzE3OCw5IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSB2b2lkIGNyZWF0ZVJvdyhTdHJpbmcgaWQsIFN0cmluZyBib2R5LCAKLSAgICAgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKSAKKworICAgIHByaXZhdGUgdm9pZCBjcmVhdGVSb3coU3RyaW5nIGlkLCBTdHJpbmcgYm9keSwKKyAgICAgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKIAogICAgICAgICAvLyBDcmVhdGUgcm93IGZvciB0aGlzIG1lc3NhZ2UKQEAgLTE5Niw5ICsxOTYsOSBAQAogICAgICAgICBzdG10LmNsb3NlKCk7CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIGRlbGV0ZVJvdyhTdHJpbmcgaWQsIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKSAKKyAgICBwcml2YXRlIHZvaWQgZGVsZXRlUm93KFN0cmluZyBpZCwgamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICAvLyBEZWxldGUgcm93IGZvciB0aGlzIG1lc3NhZ2UKICAgICAgICAgZGVidWcoIkRlbGV0ZVJvdyB3aXRoIElEID0gIiArIGlkKTsKICAgICAgICAgU3RhdGVtZW50IHN0bXQgPSBkYkNvbm5lY3Rpb24uY3JlYXRlU3RhdGVtZW50KCk7CkBAIC0yMTEsOSArMjExLDkgQEAKICAgICAgICAgc3RtdC5jbG9zZSgpOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBkZWxldGVBbGwoamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pIAorICAgIHByaXZhdGUgdm9pZCBkZWxldGVBbGwoamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICAvLyBEZWxldGUgcm93IGZvciB0aGlzIG1lc3NhZ2UKICAgICAgICAgU3RhdGVtZW50IHN0bXQgPSBkYkNvbm5lY3Rpb24uY3JlYXRlU3RhdGVtZW50KCk7CiAgICAgICAgIFN0cmluZyBxdWVyeSA9ICJERUxFVEUgRlJPTSBtZXNzYWdlcyI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L2FwcC9zcmMvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L2FwcC9zcmMvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEKaW5kZXggNDU0Njc1NC4uMDVlNTI2OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9hcHAvc3JjL3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvYXBwL3NyYy9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YQpAQCAtNDQsMTcgKzQ0LDE3IEBACiAKICAgICBwdWJsaWMgU3RyaW5nIGRvVGVzdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIElPRXhjZXB0aW9uewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoaXMgaXMgdG8gdGVzdCBjb25uZWN0b3IgMS41ICIrCi0JICAgICAgICAgICAgICJjb250cmFjdHMuIik7CisgICAgICAgICAgICAgICAgICJjb250cmFjdHMuIik7CiAKICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKIAogICAgICAgICBTdHJpbmcgcmVzID0gIk5PVCBSVU4iOwotCWRlYnVnKCJkb1Rlc3QoKSBFTlRFUi4uLiIpOworICAgIGRlYnVnKCJkb1Rlc3QoKSBFTlRFUi4uLiIpOwogICAgICAgICBib29sZWFuIHBhc3MgPSBmYWxzZTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJlcyAgPSAiQUxMIFRFU1RTIFBBU1NFRCI7Ci0JICAgIGludCB0ZXN0Q291bnQgPSAxOworICAgICAgICBpbnQgdGVzdENvdW50ID0gMTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCJTdGFydGluZyB0aGUgdGVzdCIpOwogICAgICAgICAgICAgb3V0LmZsdXNoKCk7CiAgICAgICAgICAgICB3aGlsZSAoIWRvbmUob3V0KSkgewpAQCAtNzAsMTggKzcwLDE4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICByZXMgPSAiU09NRSBURVNUUyBGQUlMRUQiOwogICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJRCBDb25uZWN0b3IgMS41IHRlc3QgLSAiICsgdGVzdENvdW50ICsgIiBGQUlMIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiVEVTVDpGQUlMIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJRCBDb25uZWN0b3IgMS41IHRlc3QgLSAiICsgdGVzdENvdW50ICsgIiBQQVNTIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiVEVTVDpQQVNTIik7Ci0JCSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJFTkRfT0ZfRVhFQ1VUSU9OIik7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG91dC5wcmludGxuKCJFTkRfT0ZfRVhFQ1VUSU9OIik7Ci0gICAgICAgICAgICAKKwogCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbXBvcnRpbmcgdHJhbnNhY3Rpb24gdGVzdCBmYWlsZWQuIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMTdiMjNjOS4uM2M5NDJjNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvY29ubmVjdG9yMTUvc2VydmxldCIvPgogPHByb3BlcnR5IG5hbWU9Imh0dHA6aG9zdCIgdmFsdWU9ImxvY2FsaG9zdCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L2J1aWxkLnhtbAppbmRleCA0ZmYxNTU4Li43MDUyNjY0IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L2J1aWxkLnhtbApAQCAtODEsMTUgKzgxLDE1IEBACiA8IS0tCiAgICAgPHRhcmdldCBuYW1lPSJydW50ZXN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVud2ViY2xpZW50LWNvbW1vbiI+Ci0JICAgIDxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJjb25uZWN0b3IxLjUgKGVhciBiYXNlZCkiLz4KLQkgICAgPC9hbnRjYWxsPgorICAgICAgICA8cGFyYW0gbmFtZT0idGVzdHN1aXRlLmlkIiB2YWx1ZT0iY29ubmVjdG9yMS41IChlYXIgYmFzZWQpIi8+CisgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIC0tPgogCiA8IS0tCiAgIDx0YXJnZXQgbmFtZT0icnVudGVzdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJjb25uZWN0b3IxNSIgLz4KKyAgICA8cGFyYW0gbmFtZT0iYXBwbmFtZSIgdmFsdWU9ImNvbm5lY3RvcjE1IiAvPgogICAgIDwvYW50Y2FsbD4KICAgPC90YXJnZXQ+CiAtLT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvcmEvTUVUQS1JTkYvcmEueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9yYS9NRVRBLUlORi9yYS54bWwKaW5kZXggYjYwMDZlZi4uMzJiNDZlMyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9yYS9NRVRBLUlORi9yYS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9yYS9NRVRBLUlORi9yYS54bWwKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgPGluYm91bmQtcmVzb3VyY2VhZGFwdGVyPgotICAgICAgICAgICAgPG1lc3NhZ2VhZGFwdGVyPiAgICAgICAgICAKKyAgICAgICAgICAgIDxtZXNzYWdlYWRhcHRlcj4KICAgICAgICAgICAgICAgICA8bWVzc2FnZWxpc3RlbmVyPgogICAgICAgICAgICAgICAgICAgICA8bWVzc2FnZWxpc3RlbmVyLXR5cGU+CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIKQEAgLTU2LDcgKzU2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIDwvYWN0aXZhdGlvbnNwZWMtY2xhc3M+CiAgICAgICAgICAgICAgICAgICAgIDwvYWN0aXZhdGlvbnNwZWM+CiAgICAgICAgICAgICAgICAgPC9tZXNzYWdlbGlzdGVuZXI+Ci0gICAgICAgICAgICA8L21lc3NhZ2VhZGFwdGVyPiAgICAgICAgICAKKyAgICAgICAgICAgIDwvbWVzc2FnZWFkYXB0ZXI+CiAgICAgICAgIDwvaW5ib3VuZC1yZXNvdXJjZWFkYXB0ZXI+CiAgICAgICAgIDxhZG1pbm9iamVjdD4KICAgICAgICAgICA8YWRtaW5vYmplY3QtaW50ZXJmYWNlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC9hZG1pbm9iamVjdC1pbnRlcmZhY2U+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L3JhL3NyYy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L3JhL3NyYy9idWlsZC54bWwKaW5kZXggZmY4YmNjMi4uODQ5NmY2MCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9yYS9zcmMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvcmEvc3JjL2J1aWxkLnhtbApAQCAtMzAsOCArMzAsOCBAQAogCiAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJpbml0LWNvbW1vbiIgPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJidWlsZC5jbGFzc2VzLmRpciIgdmFsdWU9ImNsYXNzZXMiIC8+Ci0JPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNvbm5lY3RvciIgLz4KKyAgICA8cGFyYW0gbmFtZT0iYnVpbGQuY2xhc3Nlcy5kaXIiIHZhbHVlPSJjbGFzc2VzIiAvPgorICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjb25uZWN0b3IiIC8+CiAgICAgPC9hbnRjYWxsPgogICAgIDxqYXIgamFyZmlsZT0iLi4vZ2VuZXJpYy1yYS5qYXIiIGJhc2VkaXI9ImNsYXNzZXMiCiAgICAgICAgICBpbmNsdWRlcz0iY29ubmVjdG9yLyouY2xhc3MiIC8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhCmluZGV4IDU1NTMzZDQuLmY1OWIyYjMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgQ29udHJvbHMgewogICAgIHB1YmxpYyBzdGF0aWMgT2JqZWN0IHJlYWR5TG9jayA9IG5ldyBPYmplY3QoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQppbmRleCBjYmVkMzQ5Li41NzE5ZjI3IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhCkBAIC0yOSw3ICsyOSw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgRGVsaXZlcnlXb3JrIGltcGxlbWVudHMgV29yaywgUmVzb3VyY2VBZGFwdGVyQXNzb2NpYXRpb24gewogCkBAIC0zOSw3ICszOSw3IEBACiAgICAgcHJpdmF0ZSBib29sZWFuIGtlZXBDb3VudDsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnRlciA9IDA7CiAgICAgcHJvdGVjdGVkIFJlc291cmNlQWRhcHRlciByYUJlYW47Ci0gICAgCisKICAgICBwdWJsaWMgRGVsaXZlcnlXb3JrKE1lc3NhZ2VFbmRwb2ludCBlcCwgaW50IG51bU9mTWVzc2FnZXMsIFN0cmluZyBvcCkgewogICAgICAgICB0aGlzLmVwID0gZXA7CiAgICAgICAgIHRoaXMubnVtID0gbnVtT2ZNZXNzYWdlczsKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICAgICAgdGhpcy5rZWVwQ291bnQgPSBmYWxzZTsKICAgICB9CiAKLSAgICBwdWJsaWMgRGVsaXZlcnlXb3JrKE1lc3NhZ2VFbmRwb2ludCBlcCwgaW50IG51bU9mTWVzc2FnZXMsIAorICAgIHB1YmxpYyBEZWxpdmVyeVdvcmsoTWVzc2FnZUVuZHBvaW50IGVwLCBpbnQgbnVtT2ZNZXNzYWdlcywKICAgICAgICAgICAgIFN0cmluZyBvcCwgYm9vbGVhbiBrZWVwQ291bnQpIHsKICAgICAgICAgdGhpcy5lcCA9IGVwOwogICAgICAgICB0aGlzLm51bSA9IG51bU9mTWVzc2FnZXM7CkBAIC05NCwxMSArOTQsMTEgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy9lcC5hZnRlckRlbGl2ZXJ5KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCJMRUFWRS4uLiIpOwogICAgIH0KIApAQCAtMTA5LDE0ICsxMDksMTQgQEAKICAgICB9CiAKICAgICBwcml2YXRlIE1ldGhvZCBnZXRPbk1lc3NhZ2VNZXRob2QoKSB7Ci0gICAgICAgIAorCiAgICAgICAgIE1ldGhvZCBvbk1lc3NhZ2VNZXRob2QgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ2xhc3MgbXNnTGlzdGVuZXJDbGFzcyA9IGNvbm5lY3Rvci5NeU1lc3NhZ2VMaXN0ZW5lci5jbGFzczsKICAgICAgICAgICAgIENsYXNzW10gcGFyYW1UeXBlcyA9IHsgamF2YS5sYW5nLlN0cmluZy5jbGFzcyB9OwotICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0gCisgICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPQogICAgICAgICAgICAgICAgIG1zZ0xpc3RlbmVyQ2xhc3MuZ2V0TWV0aG9kKCJvbk1lc3NhZ2UiLCBwYXJhbVR5cGVzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEKaW5kZXggMTAwY2FjZS4uZmE5M2Y2MyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgICAgICAgICAgZmxhZ1RvU3RyaW5nKGZsYWdzKSk7CiAgICAgfQogCi0gICAgCisKICAgICBwdWJsaWMgdm9pZCBmb3JnZXQoWGlkIHhpZCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLmZvcmdldDogIiArIHhpZFRvU3RyaW5nKHhpZCkpOwogICAgIH0KQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLnByZXBhcmU6ICIgKyB4aWRUb1N0cmluZyh4aWQpKTsKICAgICAgICAgcmV0dXJuIFhBUmVzb3VyY2UuWEFfT0s7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFhpZFtdIHJlY292ZXIoaW50IGZsYWcpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5yZWNvdmVyOiAiICsgZmxhZ1RvU3RyaW5nKGZsYWcpKTsKICAgICAgICAgcmV0dXJuIG51bGw7CkBAIC02Niw3ICs2Niw3IEBACiAgICAgcHVibGljIGJvb2xlYW4gc2V0VHJhbnNhY3Rpb25UaW1lb3V0KGludCBzZWNvbmRzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc3RhcnQoWGlkIHhpZCwgaW50IGZsYWdzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2Uuc3RhcnQ6ICIgKyB4aWRUb1N0cmluZyh4aWQpICsgIiwiICsKICAgICAgICAgICAgICAgICBmbGFnVG9TdHJpbmcoZmxhZ3MpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL01lc3NhZ2VzLmphdmEKaW5kZXggYjViMGYwMi4uNGM5YzAxMiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL01lc3NhZ2VzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL01lc3NhZ2VzLmphdmEKQEAgLTIxLDcgKzIxLDcgQEAKIC8qKgogICogY29sbGVjdGlvbiBvZiBtZXNzYWdlcy4KICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIE1lc3NhZ2VzIHsKIApAQCAtNTQsNyArNTQsNyBAQAogICAgICAgIFN0cmluZyBjb21tYW5kICA9IGFyZ3NbMF07CiAgICAgICAgU3RyaW5nIGRlc3ROYW1lID0gYXJnc1sxXTsKICAgICAgICBTdHJpbmcgbWVzc2FnZSAgPSBhcmdzWzJdOwotICAgCisKICAgICAgICBpZiAoISJhZGQiLmVxdWFscyhjb21tYW5kKSkgewogICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YQppbmRleCAxMDQ4M2VkLi4xZDAyYzYyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEKQEAgLTM4LDEzICszOCwxMyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGluaXRpYWxpemUoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6aW5nIHRoZSBDb250cm9scyB0byBmYWxzZToiK3Jlc2V0Q29udHJvbCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6aW5nIHRoZSBDb250cm9scyB0byBmYWxzZToiK3Jlc2V0Q29udHJvbCk7CiAgICAgICAgIGlmIChyZXNldENvbnRyb2wuZXF1YWxzKCJCRUdJTk5JTkciKSkgewogICAgICAgICAgICAgc3luY2hyb25pemVkIChDb250cm9scy5yZWFkeUxvY2spewogICAgICAgICAgICAgICAgIENvbnRyb2xzLmRvbmU9ZmFsc2U7CiAgICAgICAgICAgICB9Ci0JICAgU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6ZWQgdGhlIENvbnRyb2xzIHRvIGZhbHNlIik7Ci0JfQorICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW015QWRtaW5PYmplY3RdIEluaXRpYWxpemVkIHRoZSBDb250cm9scyB0byBmYWxzZSIpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiBkb25lKCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL015V29yay5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL015V29yay5qYXZhCmluZGV4IDNiZGVkYWYuLjllMGViOTIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9NeVdvcmsuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvTXlXb3JrLmphdmEKQEAgLTMwLDcgKzMwLDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBNeVdvcmsgaW1wbGVtZW50cyBXb3JrLCBSZXNvdXJjZUFkYXB0ZXJBc3NvY2lhdGlvbiB7CiAKQEAgLTM5LDcgKzM5LDcgQEAKICAgICBwcml2YXRlIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZmFjdG9yeTsKICAgICBwcml2YXRlIFdvcmtNYW5hZ2VyIHdtOwogICAgIHByb3RlY3RlZCBSZXNvdXJjZUFkYXB0ZXIgcmFCZWFuOwotICAgIAorCiAgICAgcHVibGljIE15V29yaygKICAgICAgICAgICAgIFN0cmluZyBuYW1lLCBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGZhY3RvcnksIFdvcmtNYW5hZ2VyIHdtKSB7CiAgICAgICAgIHRoaXMuZmFjdG9yeSA9IGZhY3Rvcnk7CkBAIC02Niw3ICs2Niw3IEBACiAgICAgICAgICAgICB0cnkgewogCiAgICAgICAgICAgICAgICAgTWV0aG9kIG9uTWVzc2FnZSA9IGdldE9uTWVzc2FnZU1ldGhvZCgpOwotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaXNEZWxpdmVyeVRyYW5zYWN0ZWQgPSAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpc0RlbGl2ZXJ5VHJhbnNhY3RlZCA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3J5LmlzRGVsaXZlcnlUcmFuc2FjdGVkKG9uTWVzc2FnZSkpOwogCiAgICAgICAgICAgICAgICAgLyoKQEAgLTgzLDcgKzgzLDcgQEAKICAgICAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiTEVBVkUuLi4iKTsKICAgICB9CiAKQEAgLTk4LDE0ICs5OCwxNCBAQAogICAgIH0KIAogICAgIHB1YmxpYyBNZXRob2QgZ2V0T25NZXNzYWdlTWV0aG9kKCkgewotICAgICAgICAKKwogICAgICAgICBNZXRob2Qgb25NZXNzYWdlTWV0aG9kID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENsYXNzIG1zZ0xpc3RlbmVyQ2xhc3MgPSBjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIuY2xhc3M7CiAgICAgICAgICAgICBDbGFzc1tdIHBhcmFtVHlwZXMgPSB7IGphdmEubGFuZy5TdHJpbmcuY2xhc3MgfTsKLSAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9IAorICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0KICAgICAgICAgICAgICAgICBtc2dMaXN0ZW5lckNsYXNzLmdldE1ldGhvZCgib25NZXNzYWdlIiwgcGFyYW1UeXBlcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhCmluZGV4IDgxODJlZjUuLjNmY2U1NDQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhCkBAIC0yNCw5ICsyNCw5IEBACiAgKiBzbyB0aGF0IHRoZSBhcHAgc2VydmVyIGNhbiBpbnN0YW50aWF0ZSBhbmQgY29uZmlndXJlCiAgKiBpdCBhdCB0aGUgcnVudGltZS4KICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwotcHVibGljIGNsYXNzIFNpbXBsZUFjdGl2YXRpb25TcGVjIAorcHVibGljIGNsYXNzIFNpbXBsZUFjdGl2YXRpb25TcGVjCiAgICAgaW1wbGVtZW50cyBBY3RpdmF0aW9uU3BlYywgamF2YS5pby5TZXJpYWxpemFibGUgewogCiAgICAgcHJpdmF0ZSBTdHJpbmcgZGVzdGluYXRpb25OYW1lOwpAQCAtNDMsNyArNDMsNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzdGluYXRpb25OYW1lICgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZGVzdGluYXRpb25OYW1lOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldERlc3RpbmF0aW9uTmFtZSAoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgZGVidWcoInNldERlc3RpbmF0aW9uTmFtZSgpIGNhbGxlZC4uLiBuYW1lID0gIiArIG5hbWUpOwogICAgICAgICB0aGlzLmRlc3RpbmF0aW9uTmFtZSA9IG5hbWU7CkBAIC01Miw3ICs1Miw3IEBACiAgICAgcHVibGljIFN0cmluZyBnZXREZXN0aW5hdGlvblR5cGUoKSB7CiAgICAgICAgIHJldHVybiB0aGlzLmRlc3RpbmF0aW9uVHlwZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXREZXN0aW5hdGlvblR5cGUgKFN0cmluZyB0eXBlKSB7CiAgICAgICAgIGRlYnVnKCJzZXREZXN0aW5hdGlvblR5cGUgKCkgY2FsbGVkLi4uIHR5cGUgPSAiICsgdHlwZSk7CiAgICAgICAgIHRoaXMuZGVzdGluYXRpb25UeXBlPSB0eXBlOwpAQCAtNjEsNyArNjEsNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGVzdFByb3AoKSB7CiAgICAgICAgIHJldHVybiB0aGlzLnRlc3RQcm9wOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFRlc3RQcm9wIChTdHJpbmcgdGVzdFByb3ApIHsKICAgICAgICAgZGVidWcoInNldFRlc3RQcm9wICgpIGNhbGxlZC4uLiB0ZXN0UHJvcCA9ICIgKyB0ZXN0UHJvcCk7CiAgICAgICAgIHRoaXMudGVzdFByb3AgPSB0ZXN0UHJvcDsKQEAgLTcwLDcgKzcwLDcgQEAKICAgICBwdWJsaWMgSW50ZWdlciBnZXRUZXN0SW50ZWdlclByb3AoKSB7CiAgICAgICAgIHJldHVybiB0aGlzLnRlc3RJbnRlZ2VyUHJvcDsKICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRUZXN0SW50ZWdlclByb3AgKEludGVnZXIgdGVzdFByb3AxKSB7CiAgICAgICAgIGRlYnVnKCJzZXRUZXN0SW50ZWdlclByb3AgKCkgY2FsbGVkLi4uIHRlc3RJbnRlZ2VyUHJvcCA9ICIgKyB0ZXN0UHJvcDEpOwogICAgICAgICB0aGlzLnRlc3RJbnRlZ2VyUHJvcCA9IHRlc3RQcm9wMTsKQEAgLTk0LDcgKzk0LDcgQEAKIAogICAgICAgfQogCi0gICB9IAorICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGRlYnVnIChTdHJpbmcgbWVzc2FnZSkKICAgICB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YQppbmRleCA3YzI3ZTk2Li43YjBiYmJiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEKQEAgLTQwLDkgKzQwLDkgQEAKIC8qKgogICogVGhpcyBpcyBhIHNhbXBsZSByZXNvdXJjZSBhZGFwdGVyCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KLXB1YmxpYyBjbGFzcyBTaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsIAorcHVibGljIGNsYXNzIFNpbXBsZVJlc291cmNlQWRhcHRlckltcGwKIGltcGxlbWVudHMgUmVzb3VyY2VBZGFwdGVyLCBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7CiAKICAgICBwcml2YXRlIEJvb3RzdHJhcENvbnRleHQgY3R4OwpAQCAtNTgsNyArNTgsNyBAQAogCiAgICAgcHVibGljIHZvaWQKICAgICBzdGFydChCb290c3RyYXBDb250ZXh0IGN0eCkgdGhyb3dzIFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uewotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiMDAxLiBTaW1wbGUgUkEgc3RhcnQuLi4iKTsKIAogICAgICAgICB0aGlzLmN0eCA9IGN0eDsKQEAgLTY4LDEyICs2OCwxMiBAQAogCiAgICAgICAgIC8vdGVzdGluZyBjcmVhdCB0aW1lcgogICAgICAgICBUaW1lciB0aW1lciA9IG51bGw7Ci0JICB0cnl7Ci0JICAgICAgdGltZXIgPSBjdHguY3JlYXRlVGltZXIoKTsKLQkgIH0gY2F0Y2goVW5hdmFpbGFibGVFeGNlcHRpb24gdWUpIHsKLQkgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIik7Ci0JICAgICAgdGhyb3cgbmV3IFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uKCJFcnJvciBmb3JtIGJvb3RzdHJhcCIpOwotCSAgfQorICAgICAgdHJ5eworICAgICAgICAgIHRpbWVyID0gY3R4LmNyZWF0ZVRpbWVyKCk7CisgICAgICB9IGNhdGNoKFVuYXZhaWxhYmxlRXhjZXB0aW9uIHVlKSB7CisgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFcnJvciIpOworICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbigiRXJyb3IgZm9ybSBib290c3RyYXAiKTsKKyAgICAgIH0KICAgICAgICAgZGVidWcoIjAwNC4gU2ltcGxlIFJBIHN0YXJ0Li4uIik7CiAKIC8qCkBAIC05MCwxNiArOTAsMTYgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgZXggPSAiICsgZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgLy94YS5yb2xsYmFjayh4aWQxKTsKICAgICAgICAgfQotICAgICAgICAKKwogKi8KIC8qCiAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAKKwogICAgICAgICAgIFhBVGVybWluYXRvciB4YSA9IGN0eC5nZXRYQVRlcm1pbmF0b3IoKTsKLSAgICAgICAgICAKKwogICAgICAgICAgIFhpZCB4aWQxID0gbmV3IFhJRCgpOwogICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFhJRDEgPSAiICsgeGlkMSk7Ci0gICAgICAgICAgCisKICAgICAgICAgICBFeGVjdXRpb25Db250ZXh0IGVjID0gbmV3IEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICAgICAgICBlYy5zZXRYaWQoeGlkMSk7CiAgICAgICAgICAgZWMuc2V0VHJhbnNhY3Rpb25UaW1lb3V0KDUqMTAwMCk7IC8vNSBzZWNvbmRzCkBAIC0xMDksMTQgKzEwOSwxNCBAQAogICAgICAgICAgIHdtLmRvV29yayhvdXR3LCAxKjEwMDAsIGVjLCBudWxsKTsKICAgICAgICAgICB4YS5jb21taXQoeGlkMSwgdHJ1ZSk7CiAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgCisKICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBleCA9ICIgKyBleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgIHhhLnJvbGxiYWNrKHhpZDEpOwogICAgICAgICAgIH0KLSAgICAgICAgICAKKwogICAgICAgICAgIFhpZCB4aWQyID0gbmV3IFhJRCgpOwogICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFhJRDIgPSAiICsgeGlkMik7Ci0gICAgICAgICAgCisKICAgICAgICAgICBlYyA9IG5ldyBFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgICAgICAgZWMuc2V0WGlkKHhpZDIpOwogICAgICAgICAgIGVjLnNldFRyYW5zYWN0aW9uVGltZW91dCg1KjEwMDApOyAvLzUgc2Vjb25kcwpAQCAtMTMzLDcgKzEzMyw3IEBACiAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgfQogCi0gICAgICAgIAorCiAgICAgICAgICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgMzsgaSsrKSB7CiAgICAgICAgICAgVGVzdFdNV29yayB3ID0gbmV3IFRlc3RXTVdvcmsoaSwgZmFsc2UpOwogICAgICAgICAgIHRyeSB7CkBAIC0xNDEsNyArMTQxLDcgQEAKICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZBSUw6IENBVUdIVCBleGNlcHRpb24gOiBpID0gIiArIGkpOwogICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAgIH0gCisgICAgICAgICAgfQogICAgICAgICAgIH0KIAogICAgICAgICAgIGZvciAoaW50IGkgPSAzIDsgaSA8IDY7IGkrKykgewpAQCAtMjI0LDEzICsyMjQsMTMgQEAKIAogICAgIHB1YmxpYyB2b2lkCiAgICAgZW5kcG9pbnREZWFjdGl2YXRpb24gKAotICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBlbmRwb2ludEZhY3RvcnksIAorICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBlbmRwb2ludEZhY3RvcnksCiAgICAgICAgICAgICBBY3RpdmF0aW9uU3BlYyBzcGVjKSB7CiAgICAgICAgIGRlYnVnICgiZW5kcG9pbnREZWFjdGl2YXRpb24gY2FsbGVkLi4uIik7Ci0gICAgICAgIAorCiAgICAgICAgICgoV29ya0Rpc3BhdGNoZXIpIHdvcmspLnN0b3AoKTsKICAgICB9Ci0gIAorCiAgICAgcHVibGljIFN0cmluZyBnZXRUZXN0TmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHRlc3ROYW1lOwogICAgIH0KQEAgLTI0Niw3ICsyNDYsNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbF0gPT0+ICIgKyBtZXNzYWdlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgWEFSZXNvdXJjZVtdIGdldFhBUmVzb3VyY2VzKEFjdGl2YXRpb25TcGVjW10gc3BlY3MpIAorICAgIHB1YmxpYyBYQVJlc291cmNlW10gZ2V0WEFSZXNvdXJjZXMoQWN0aXZhdGlvblNwZWNbXSBzcGVjcykKICAgICAgICAgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1Rlc3RXTVdvcmsuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9UZXN0V01Xb3JrLmphdmEKaW5kZXggYmIwNTUzNC4uZGU5M2JjMSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1Rlc3RXTVdvcmsuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvVGVzdFdNV29yay5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgVGVzdFdNV29yayBpbXBsZW1lbnRzIFdvcmsgewogCkBAIC00Miw4ICs0Miw4IEBACiAgICAgcHVibGljIFRlc3RXTVdvcmsoaW50IGlkLCBib29sZWFuIGlzUm9ndWUpIHsKICAgICAgICAgdGhpcyhpZCwgaXNSb2d1ZSwgZmFsc2UsIG51bGwpOwogICAgIH0KLSAgICAKLSAgICBwdWJsaWMgVGVzdFdNV29yayhpbnQgaWQsIGJvb2xlYW4gaXNSb2d1ZSwgCisKKyAgICBwdWJsaWMgVGVzdFdNV29yayhpbnQgaWQsIGJvb2xlYW4gaXNSb2d1ZSwKICAgICAgICAgICAgIGJvb2xlYW4gZG9OZXN0LCBFeGVjdXRpb25Db250ZXh0IGN0eCkgewogICAgICAgICB0aGlzLmlkID0gaWQ7CiAgICAgICAgIHRoaXMuaXNSb2d1ZSA9IGlzUm9ndWU7CkBAIC03NywxMCArNzcsMTAgQEAKICAgICAgICAgICAgIH0gY2F0Y2ggKFdvcmtFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgICAgICBpZiAoZXguZ2V0RXJyb3JDb2RlKCkuZXF1YWxzKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdvcmtFeGNlcHRpb24uVFhfQ09OQ1VSUkVOVF9XT1JLX0RJU0FMTE9XRUQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsgCisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUEFTUzogQ0FVR0hUIEVYUEVDVEVEID0gIiArIGV4LmdldEVycm9yQ29kZSgpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArIAorICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZBSUw6IENBVUdIVCBVTkVYUEVDVEVEID0gIiArIGV4LmdldEVycm9yQ29kZSgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC05Miw3ICs5Miw3IEBACiAgICAgICAgICAgICAgICAgZWMuc2V0VHJhbnNhY3Rpb25UaW1lb3V0KDUqMTAwMCk7IC8vNSBzZWNvbmRzCiAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKG5lc3RlZFdvcmssIDEqMTAwMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAiRkFJTDogQ0FVR0hUIFVORVhQRUNURUQgPSAiICsgZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1YzV29ya0Rpc3BhdGNoZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9WM1dvcmtEaXNwYXRjaGVyLmphdmEKaW5kZXggOGFkZjNjYy4uNGI0Mzc4MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1YzV29ya0Rpc3BhdGNoZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvVjNXb3JrRGlzcGF0Y2hlci5qYXZhCkBAIC00Myw3ICs0Myw3IEBACiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludCBlcCA9IGZhY3RvcnkuY3JlYXRlRW5kcG9pbnQobmV3IEZha2VYQVJlc291cmNlKCkpOwogICAgICAgICAgICAgaW50IG51bU9mTWVzc2FnZXMgPSAxOwpAQCAtNzIsNyArNzIsNyBAQAogICAgICAgICAgICAgZGVidWcoIlYzV29ya0Rpc3BhdGNoZXIgY2FsbGluZyBET05FKCkiKTsKICAgICAgICAgICAgIGRvbmUoKTsKICAgICAgICAgICAgIGRlYnVnKCJWM1dvcmtEaXNwYXRjaGVyIGZpbmlzaGVkIGNhbGxpbmcgRE9ORSgpIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQppbmRleCA2NGI3MWM0Li43NjJlMDNlIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQpAQCAtMzMsNyArMzMsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIFdvcmtEaXNwYXRjaGVyIGltcGxlbWVudHMgV29yayB7CiAKQEAgLTQ0LDExICs0NCwxMSBAQAogICAgIHByb3RlY3RlZCBBY3RpdmF0aW9uU3BlYyBzcGVjOwogICAgIHByb3RlY3RlZCBXb3JrTWFuYWdlciB3bTsKICAgICBwcm90ZWN0ZWQgWEFUZXJtaW5hdG9yIHhhOwotICAgIAorCiAgICAgcHVibGljIFdvcmtEaXNwYXRjaGVyKAogICAgICAgICAgICAgU3RyaW5nIGlkLAogICAgICAgICAgICAgQm9vdHN0cmFwQ29udGV4dCBjdHgsCi0gICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGZhY3RvcnksIAorICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBmYWN0b3J5LAogICAgICAgICAgICAgQWN0aXZhdGlvblNwZWMgc3BlYykgewogICAgICAgICB0aGlzLmlkICAgICAgPSBpZDsKICAgICAgICAgdGhpcy5jdHggICAgID0gY3R4OwpAQCAtNjEsNyArNjEsNyBAQAogICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKIAogICAgICAgICBkZWJ1ZygiRU5URVIuLi4iKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHN5bmNocm9uaXplZCAoQ29udHJvbHMucmVhZHlMb2NrKSB7CiAgICAgICAgICAgICAgICAgZGVidWcoIldBSVQuLi4iKTsKQEAgLTgzLDI2ICs4MywyNiBAQAogICAgICAgICAgICAgdHJ5IHsKIAogICAgICAgICAgICAgICAgIE1ldGhvZCBvbk1lc3NhZ2UgPSBnZXRPbk1lc3NhZ2VNZXRob2QoKTsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlzRGVsaXZlcnlUcmFuc2FjdGVkID0gIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaXNEZWxpdmVyeVRyYW5zYWN0ZWQgPSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3RvcnkuaXNEZWxpdmVyeVRyYW5zYWN0ZWQob25NZXNzYWdlKSk7CiAKICAgICAgICAgICAgICAgICBpZiAoIWZhY3RvcnkuaXNEZWxpdmVyeVRyYW5zYWN0ZWQob25NZXNzYWdlKSkgewogICAgICAgICAgICAgICAgICAgICAvL01lc3NhZ2VFbmRwb2ludCBlcCA9IGZhY3RvcnkuY3JlYXRlRW5kcG9pbnQobnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIC8vRGVsaXZlcnlXb3JrIGQgPSBuZXcgRGVsaXZlcnlXb3JrKCJOT19UWCIsIGVwKTsgCisgICAgICAgICAgICAgICAgICAgIC8vRGVsaXZlcnlXb3JrIGQgPSBuZXcgRGVsaXZlcnlXb3JrKCJOT19UWCIsIGVwKTsKICAgICAgICAgICAgICAgICAgICAgLy93bS5kb1dvcmsoZCwgMCwgbnVsbCwgbnVsbCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy9NZXNzYWdlRW5kcG9pbnQgZXAgPSBmYWN0b3J5LmNyZWF0ZUVuZHBvaW50KG51bGwpOwogICAgICAgICAgICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnQgZXAgPSBmYWN0b3J5LmNyZWF0ZUVuZHBvaW50KG5ldyBGYWtlWEFSZXNvdXJjZSgpKTsKICAgICAgICAgICAgICAgICAgICAgaW50IG51bU9mTWVzc2FnZXMgPSA1OwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvL2ltcG9ydGluZyB0cmFuc2FjdGlvbgogCiAgICAgICAgICAgICAgICAgICAgIC8vd3JpdGUvY29tbWl0CiAgICAgICAgICAgICAgICAgICAgIEV4ZWN1dGlvbkNvbnRleHQgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7CiAKLSAgICAgICAgICAgICAgICAgICAgRGVsaXZlcnlXb3JrIHcgPSAKKyAgICAgICAgICAgICAgICAgICAgRGVsaXZlcnlXb3JrIHcgPQogICAgICAgICAgICAgICAgICAgICAgICAgbmV3IERlbGl2ZXJ5V29yayhlcCwgbnVtT2ZNZXNzYWdlcywgIldSSVRFIik7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgdHJ1ZSk7CkBAIC0xMTAsNyArMTEwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIkRPTkUgV1JJVEUgVE8gREIiKTsKICAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMuZXhwZWN0ZWRSZXN1bHRzID0gbnVtT2ZNZXNzYWdlczsKICAgICAgICAgICAgICAgICAgICAgbm90aWZ5QW5kV2FpdCgpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvL2RlbGV0ZS9yb2xsYmFjawogICAgICAgICAgICAgICAgICAgICBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKQEAgLTEyNiw3ICsxMjYsNyBAQAogICAgICAgICAgICAgICAgICAgICAvL2RlbGV0ZS9jb21taXQKICAgICAgICAgICAgICAgICAgICAgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIHcgPSBuZXcgRGVsaXZlcnlXb3JrKGVwLCBudW1PZk1lc3NhZ2VzLCAiREVMRVRFIik7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgdHJ1ZSk7CkBAIC0xNTAsNyArMTUwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgLy9kZWxldGUvY29tbWl0CiAgICAgICAgICAgICAgICAgICAgIGVjID0gc3RhcnRUeCgpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiU3RhcnQgVFggLSAiICsgZWMuZ2V0WGlkKCkpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICB3ID0gbmV3IERlbGl2ZXJ5V29yayhlcCwgbnVtT2ZNZXNzYWdlcywgIkRFTEVURSIpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIHRydWUpOwpAQCAtMTk1LDcgKzE5NSw3IEBACiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGlmIChYQVJlc291cmNlLlhBX09LID09IHhhLnByZXBhcmUoZWMuZ2V0WGlkKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJYQSBQUkVQQVJFL0NPTU1JVC4gRE9ORSBXUklURSBUTyBEQiAiKTsKQEAgLTIwNywxOSArMjA3LDE5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBDb250cm9scy5leHBlY3RlZFJlc3VsdHMgPSAzOwogICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZ5QW5kV2FpdCgpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vZGVsZXRlIGFsbC4KICAgICAgICAgICAgICAgICAgICAgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIHcgPSBuZXcgRGVsaXZlcnlXb3JrKGVwLCAxLCAiREVMRVRFX0FMTCIpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIHRydWUpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiRE9ORSBERUxFVEUgQUxMIEZST00gREIiKTsKICAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMuZXhwZWN0ZWRSZXN1bHRzID0gMDsKICAgICAgICAgICAgICAgICAgICAgbm90aWZ5QW5kV2FpdCgpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBkb25lKCk7CiAgICAgICAgICAgICAgICAgfQogCkBAIC0yNDYsNyArMjQ2LDcgQEAKICAgICAgICAgICAgICAgICBkb25lKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIkxFQVZFLi4uIik7CiAgICAgfQogCkBAIC0yNjEsMTQgKzI2MSwxNCBAQAogICAgIH0KIAogICAgIHB1YmxpYyBNZXRob2QgZ2V0T25NZXNzYWdlTWV0aG9kKCkgewotICAgICAgICAKKwogICAgICAgICBNZXRob2Qgb25NZXNzYWdlTWV0aG9kID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENsYXNzIG1zZ0xpc3RlbmVyQ2xhc3MgPSBjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIuY2xhc3M7CiAgICAgICAgICAgICBDbGFzc1tdIHBhcmFtVHlwZXMgPSB7IGphdmEubGFuZy5TdHJpbmcuY2xhc3MgfTsKLSAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9IAorICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0KICAgICAgICAgICAgICAgICBtc2dMaXN0ZW5lckNsYXNzLmdldE1ldGhvZCgib25NZXNzYWdlIiwgcGFyYW1UeXBlcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CkBAIC0yOTEsMTMgKzI5MSwxMyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgLy9TbGVlcCBmb3IgNSBzZWNvbmRzCiAgICAgICAgICAgICAvL1RocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoNSoxMDAwKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQoQ29udHJvbHMucmVhZHlMb2NrKSB7CiAgICAgICAgICAgICAgICAgLy9Ob3RpZnkgdGhlIGNsaWVudCB0byBjaGVjayB0aGUgcmVzdWx0cwotICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay5ub3RpZnlBbGwoKTsgCisgICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLm5vdGlmeUFsbCgpOwogCiAgICAgICAgICAgICAgICAgLy9XYWl0IHVudGlsIHJlc3VsdHMgYXJlIHZlcmlmaWVkIGJ5IHRoZSBjbGllbnQKLSAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2sud2FpdCgpOyAKKyAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2sud2FpdCgpOwogCiAgICAgICAgICAgICAgICAgaWYgKHN0b3ApIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNS9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhCmluZGV4IDc3ZGJmMzQuLjZiZDllNTcgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjUvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS41L3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEKQEAgLTM2LDggKzM2LDggQEAKICAgICBwdWJsaWMgaW50IGJyYW5jaFF1YWxpZmllcjsKICAgICBwdWJsaWMgaW50IGdsb2JhbFR4SUQ7CiAKLSAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYR1RSSURTSVpFPSA2NDsgCi0gICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEJRVUFMU0laRT0gNjQ7IAorICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhHVFJJRFNJWkU9IDY0OworICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhCUVVBTFNJWkU9IDY0OwogCiAgICAgcHVibGljIFhJRCgpIHsKICAgICAgICAgaW50IGZvbyA9IElEKys7CkBAIC01NSwxMCArNTUsMTAgQEAKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgICAgICAgICAgICAgICAgIC8vIEl0IGNhbid0IGJlIGVxdWFsCiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgb3RoZXIgPSAoWElEKW87ICAgICAgICAgICAgICAgICAgIC8vIFRoZSBvdGhlciBYSUQsIG5vdyBwcm9wZXJseSBjYXN0Ci0gICAgICAgIAotICAgICAgICBpZiAodGhpcy5mb3JtYXRJRCA9PSBvdGhlci5mb3JtYXRJRCAKKworICAgICAgICBpZiAodGhpcy5mb3JtYXRJRCA9PSBvdGhlci5mb3JtYXRJRAogICAgICAgICAgICAgICAgICYmIHRoaXMuYnJhbmNoUXVhbGlmaWVyID09IG90aGVyLmJyYW5jaFF1YWxpZmllcgogICAgICAgICAgICAgICAgICYmIHRoaXMuZ2xvYmFsVHhJRCA9PSBvdGhlci5nbG9iYWxUeElEKSB7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTk4LDcgKzk4LDcgQEAKICAgICAgICAgICAgICAgICAiZm9ybWF0SUQoIiAgICAgKyBmb3JtYXRJRCAgICAgKyAiKSwgIiArCiAgICAgICAgICAgICAgICAgImJyYW5jaFF1YWxpZmllciAoIiArIGJyYW5jaFF1YWxpZmllciArICIpLCAiICsKICAgICAgICAgICAgICAgICAiZ2xvYmFsVHhJRCgiICsgZ2xvYmFsVHhJRCArICIpfSIpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gczsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9hcHAvTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvYXBwL01FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sCmluZGV4IDA1YTA2ODcuLmIzYjMxOWEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9hcHAvTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi1yZXNvdXJjZXMteG1sL2FwcC9NRVRBLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbApAQCAtNzMsNCArNzMsNCBAQAogICAgIDxqZGJjLXJlc291cmNlIGVuYWJsZWQ9InRydWUiIGpuZGktbmFtZT0iamF2YTphcHAvamRiYy9YQVBvaW50YmFzZSIgb2JqZWN0LXR5cGU9InVzZXIiIHBvb2wtbmFtZT0iamF2YTphcHAvamRiYy1wb2ludGJhc2UtcG9vbDEiLz4KIAogCi08L3Jlc291cmNlcz4gCis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9hcHAvc3JjL01FVEEtSU5GL2VqYi1nZi1yZXNvdXJjZXMueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi1yZXNvdXJjZXMteG1sL2FwcC9zcmMvTUVUQS1JTkYvZWpiLWdmLXJlc291cmNlcy54bWwKaW5kZXggMWIzZjk1ZS4uZGRjZTc0ZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi1yZXNvdXJjZXMteG1sL2FwcC9zcmMvTUVUQS1JTkYvZWpiLWdmLXJlc291cmNlcy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi1yZXNvdXJjZXMteG1sL2FwcC9zcmMvTUVUQS1JTkYvZWpiLWdmLXJlc291cmNlcy54bWwKQEAgLTUzLDQgKzUzLDQgQEAKICAgICA8L2pkYmMtY29ubmVjdGlvbi1wb29sPgogCiAgICAgPGpkYmMtcmVzb3VyY2UgZW5hYmxlZD0idHJ1ZSIgam5kaS1uYW1lPSJqYXZhOm1vZHVsZS9qZGJjL2VqYi1sZXZlbC1kcyIgb2JqZWN0LXR5cGU9InVzZXIiIHBvb2wtbmFtZT0iamF2YTptb2R1bGUvamRiYy9lamItbGV2ZWwtcG9vbCIvPgotPC9yZXNvdXJjZXM+IAorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvYXBwL3NyYy9NRVRBLUlORi9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9hcHAvc3JjL01FVEEtSU5GL2VqYi1qYXIueG1sCmluZGV4IDU4MmI3ODEuLjEyZmI2ZDMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9hcHAvc3JjL01FVEEtSU5GL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9hcHAvc3JjL01FVEEtSU5GL2VqYi1qYXIueG1sCkBAIC0xMTQsOCArMTE0LDggQEAKICAgICAgICAgPHJlcy1zaGFyaW5nLXNjb3BlPlNoYXJlYWJsZTwvcmVzLXNoYXJpbmctc2NvcGU+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KICAgICAgIDxyZXNvdXJjZS1lbnYtcmVmPgotCTxyZXNvdXJjZS1lbnYtcmVmLW5hbWU+ZWlzL3Rlc3RBZG1pbjwvcmVzb3VyY2UtZW52LXJlZi1uYW1lPgotCTxyZXNvdXJjZS1lbnYtcmVmLXR5cGU+Y29ubmVjdG9yLk15QWRtaW5PYmplY3Q8L3Jlc291cmNlLWVudi1yZWYtdHlwZT4KKyAgICA8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmVpcy90ZXN0QWRtaW48L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KKyAgICA8cmVzb3VyY2UtZW52LXJlZi10eXBlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC9yZXNvdXJjZS1lbnYtcmVmLXR5cGU+CiAgICAgICA8L3Jlc291cmNlLWVudi1yZWY+CiAgICAgICA8c2VjdXJpdHktaWRlbnRpdHk+CiAgICAgICAgIDx1c2UtY2FsbGVyLWlkZW50aXR5Lz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9hcHAvc3JjL01FVEEtSU5GL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9hcHAvc3JjL01FVEEtSU5GL3N1bi1lamItamFyLnhtbAppbmRleCBlNDY1NzdmLi5jYjhjZDIzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvYXBwL3NyYy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi1yZXNvdXJjZXMteG1sL2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCkBAIC0zMyw3ICszMyw3IEBACiAgICAgICAgICAgICBUZXN0SW50ZWdlclByb3AKICAgICAgICAgICA8L2FjdGl2YXRpb24tY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgPGFjdGl2YXRpb24tY29uZmlnLXByb3BlcnR5LXZhbHVlPgotICAgICAgICAgICAgMiAKKyAgICAgICAgICAgIDIKICAgICAgICAgICA8L2FjdGl2YXRpb24tY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICA8L2FjdGl2YXRpb24tY29uZmlnLXByb3BlcnR5PgogICAgICAgICA8L2FjdGl2YXRpb24tY29uZmlnPgpAQCAtODUsNyArODUsNyBAQAogICAgICAgPC9yZXNvdXJjZS1yZWY+CiAgICAgICA8cmVzb3VyY2UtZW52LXJlZj4KICAgICAgICAgPHJlc291cmNlLWVudi1yZWYtbmFtZT5laXMvdGVzdEFkbWluPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+Ci0JPGpuZGktbmFtZT5qYXZhOmFwcC9laXMvdGVzdEFkbWluPC9qbmRpLW5hbWU+CisgICAgPGpuZGktbmFtZT5qYXZhOmFwcC9laXMvdGVzdEFkbWluPC9qbmRpLW5hbWU+CiAgICAgICA8L3Jlc291cmNlLWVudi1yZWY+CiAgICAgICA8Z2VuLWNsYXNzZXMvPgogICAgIDwvZWpiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi1yZXNvdXJjZXMteG1sL2FwcC9zcmMvTUVUQS1JTkYvd2ViLWdmLXJlc291cmNlcy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvYXBwL3NyYy9NRVRBLUlORi93ZWItZ2YtcmVzb3VyY2VzLnhtbAppbmRleCA4MTZkNWE5Li5jNjU4YTA3IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvYXBwL3NyYy9NRVRBLUlORi93ZWItZ2YtcmVzb3VyY2VzLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvYXBwL3NyYy9NRVRBLUlORi93ZWItZ2YtcmVzb3VyY2VzLnhtbApAQCAtNTMsNCArNTMsNCBAQAogICAgIDwvamRiYy1jb25uZWN0aW9uLXBvb2w+CiAKICAgICA8amRiYy1yZXNvdXJjZSBlbmFibGVkPSJ0cnVlIiBqbmRpLW5hbWU9ImphdmE6bW9kdWxlL2pkYmMvd2ViLWxldmVsLWRzIiBvYmplY3QtdHlwZT0idXNlciIgcG9vbC1uYW1lPSJqYXZhOm1vZHVsZS9qZGJjL3dlYi1sZXZlbC1wb29sIi8+Ci08L3Jlc291cmNlcz4gCis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9hcHAvc3JjL2JlYW5zL01lc3NhZ2VDaGVja2VyRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvYXBwL3NyYy9iZWFucy9NZXNzYWdlQ2hlY2tlckVKQi5qYXZhCmluZGV4IGE4M2M5MjQuLmU4ZWVkYjAgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9hcHAvc3JjL2JlYW5zL01lc3NhZ2VDaGVja2VyRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi1yZXNvdXJjZXMteG1sL2FwcC9zcmMvYmVhbnMvTWVzc2FnZUNoZWNrZXJFSkIuamF2YQpAQCAtNDAsNyArNDAsNyBAQAogCiAgICAgcHVibGljIE1lc3NhZ2VDaGVja2VyRUpCKCkge30KIAotICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIAorICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpCiAgICAgICAgIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImJlYW4gY3JlYXRlZCIpOwogICAgICAgICBoZWxkQ29uID0gbnVsbDsKQEAgLTczLDcgKzczLDcgQEAKICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibWFvLmdldFJBKCkgaXMgbnVsbCIpOwogICAgICAgIH0KICAgICB9Y2F0Y2goRXhjZXB0aW9uIGUpewotCWUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICB9CiAgICAgICByZXR1cm4gcGFzczsKICAgICB9CkBAIC04NiwxMSArODYsMTEgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHN5bmNocm9uaXplZCAoQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpKSB7CiAgICAgICAgICAgICAgICAgLy9UZWxsIHRoZSByZXNvdXJjZSBhZGFwdGVyIHRoZSBjbGllbnQgaXMgcmVhZHkgdG8gcnVuCi0gICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLm5vdGlmeUFsbCgpOyAKLSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkubm90aWZ5QWxsKCk7CisKICAgICAgICAgICAgICAgICBkZWJ1ZygiTk9USUZJRUQuLi4gU1RBUlQgV0FJVElORyIpOwogICAgICAgICAgICAgICAgIC8vV2FpdCB1bnRpbCBiZWluZyB0b2xkIHRvIHJlYWQgZnJvbSB0aGUgZGF0YWJhc2UKLSAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkud2FpdCgpOyAKKyAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkud2FpdCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwpAQCAtMTA5LDIyICsxMDksMjIgQEAKICAgICB9CiAKICAgICBwdWJsaWMgaW50IGdldE1lc3NhZ2VDb3VudCgpIHsKLQl0cnkgeworICAgIHRyeSB7CiAgICAgICAgICAgICBDb25uZWN0aW9uIGNvbiA9IGdldEZyZXNoQ29ubmVjdGlvbigpOwogICAgICAgICAgICAgaW50IGNvdW50MSA9IGdldENvdW50KGNvbik7CiAgICAgICAgICAgICBjb24uY2xvc2UoKTsKLSAgICAgICAgICAgIAotCSAgICAvKgorCisgICAgICAgIC8qCiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQoQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpKSB7CiAgICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLm5vdGlmeSgpOwogICAgICAgICAgICAgfQotCSAgICAqLwotICAgICAgICAgICAgICAgIAorICAgICAgICAqLworCiAgICAgICAgICAgICByZXR1cm4gY291bnQxOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLm91dCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwotCX0KKyAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSBpbnQgZ2V0Q291bnQoQ29ubmVjdGlvbiBjb24pIHRocm93cyBTUUxFeGNlcHRpb24gewpAQCAtMTUwLDEwICsxNTAsMTAgQEAKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIHVzZXIgPSAoU3RyaW5nKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvdXNlciIpOwogICAgICAgICAgICAgcGFzc3dvcmQgPSAoU3RyaW5nKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvcGFzc3dvcmQiKTsKLQkgICAgQ29udHJvbHMgPSAoTXlBZG1pbk9iamVjdCkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2Vpcy90ZXN0QWRtaW4iKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDQUxMSU5HIElOSVRJTElaRSBdXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXSIpOwotCSAgICBDb250cm9scy5pbml0aWFsaXplKCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ0FMTEVEIElOSVRJTElaRSBdXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXSIgKyBDb250cm9scyk7CisgICAgICAgIENvbnRyb2xzID0gKE15QWRtaW5PYmplY3QpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9laXMvdGVzdEFkbWluIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ0FMTElORyBJTklUSUxJWkUgXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV0iKTsKKyAgICAgICAgQ29udHJvbHMuaW5pdGlhbGl6ZSgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNBTExFRCBJTklUSUxJWkUgXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV0iICsgQ29udHJvbHMpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CkBAIC0xODgsNyArMTg4LDcgQEAKICAgICAgICAgICAgIGRlYnVnKCJMb29rZWQgdXAgRGF0YXNvdXJjZVxuIik7CiAgICAgICAgICAgICBkZWJ1ZygiR2V0IEpEQkMgY29ubmVjdGlvbiwgYXV0byBzaWduIG9uIik7CiAgICAgICAgICAgICBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKGNvbiAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbjsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0xOTksNyArMTk5LDcgQEAKICAgICAgICAgICAgIHRocm93IGV4MTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBjbG9zZUNvbm5lY3Rpb24oQ29ubmVjdGlvbiBjb24pIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgICBpZiAoaGVsZENvbiAhPSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvYXBwL3NyYy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi1yZXNvdXJjZXMteG1sL2FwcC9zcmMvYnVpbGQucHJvcGVydGllcwppbmRleCBkYWQyMDdiLi4wYjM4YzE5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvYXBwL3NyYy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogZWpiLWphci54bWw9TUVUQS1JTkYvZWpiLWphci54bWwKIHN1bi1lamItamFyLnhtbD1NRVRBLUlORi9zdW4tZWpiLWphci54bWwKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9hcHAvc3JjL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9hcHAvc3JjL2NsaWVudC9DbGllbnQuamF2YQppbmRleCAyMWQ0NDg4Li5jNzQzMGQ2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvYXBwL3NyYy9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi1yZXNvdXJjZXMteG1sL2FwcC9zcmMvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yOCwyMiArMjgsMjIgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLSAgICAKKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgLy9zdXBlcihhcmdzKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBkb1Rlc3QoKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlRoaXMgaXMgdG8gdGVzdCBjb25uZWN0b3IgMS41ICIrCi0JICAgICAgICAgICAgICJjb250cmFjdHMuIik7Ci0gICAgICAgIAorICAgICAgICAgICAgICAgICAiY29udHJhY3RzLiIpOworCiAgICAgICAgIFN0cmluZyByZXMgPSAiTk9UIFJVTiI7Ci0JZGVidWcoImRvVGVzdCgpIEVOVEVSLi4uIik7CisgICAgZGVidWcoImRvVGVzdCgpIEVOVEVSLi4uIik7CiAgICAgICAgIGJvb2xlYW4gcGFzcyA9IGZhbHNlOwogICAgICAgICB0cnkgewogCkBAIC01NCwyNiArNTQsMjYgQEAKICAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmVzICA9ICJBTEwgVEVTVFMgUEFTU0VEIjsKLQkgICAgaW50IHRlc3RDb3VudCA9IDE7CisgICAgICAgIGludCB0ZXN0Q291bnQgPSAxOwogICAgICAgICAgICAgd2hpbGUgKCFkb25lKCkpIHsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIG5vdGlmeUFuZFdhaXQoKTsKICAgICAgICAgICAgICAgICBpZiAoIWRvbmUoKSkgewogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiUnVubmluZy4uLiIpOwogICAgICAgICAgICAgICAgICAgICBwYXNzID0gY2hlY2tSZXN1bHRzKGV4cGVjdGVkUmVzdWx0cygpKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIkdvdCBleHBlY3RlZCByZXN1bHRzID0gIiArIHBhc3MpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvL2RvIG5vdCBjb250aW51ZSBpZiBvbmUgdGVzdCBmYWlsZWQKICAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXNzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXMgPSAiU09NRSBURVNUUyBGQUlMRUQiOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIklEIENvbm5lY3RvciAxLjYgdGVzdCAtICIgKyB0ZXN0Q291bnQsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiSUQgQ29ubmVjdG9yIDEuNiB0ZXN0IC0gIiArIHRlc3RDb3VudCwgc3RhdC5QQVNTKTsKLQkJICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0JCXRlc3RDb3VudCArKzsKKyAgICAgICAgdGVzdENvdW50ICsrOwogICAgICAgICAgICAgfQogCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpAQCAtODMsMTQgKzgzLDE0IEBACiAgICAgICAgIH0KICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImNvbm5lY3RvcjEuNklEIik7CiAKLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIkVYSVRJTkcuLi4gU1RBVFVTID0gIiArIHJlcyk7CiAgICAgICAgIHJldHVybiByZXM7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBib29sZWFuIGNoZWNrUmVzdWx0cyhpbnQgbnVtKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgT2JqZWN0IG8gPSAobmV3IEluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiTXlNZXNzYWdlQ2hlY2tlciIpOwotICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKSAKKyAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkKICAgICAgICAgICAgIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvLCBNZXNzYWdlQ2hlY2tlckhvbWUuY2xhc3MpOwogICAgICAgICBNZXNzYWdlQ2hlY2tlciBjaGVja2VyID0gaG9tZS5jcmVhdGUoKTsKICAgICAgICAgaW50IHJlc3VsdCA9IGNoZWNrZXIuZ2V0TWVzc2FnZUNvdW50KCk7CkBAIC05OSw3ICs5OSw3IEBACiAKICAgICBwcml2YXRlIGJvb2xlYW4gZG9uZSgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBPYmplY3QgbyA9IChuZXcgSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJNeU1lc3NhZ2VDaGVja2VyIik7Ci0gICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpIAorICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKQogICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG8sIE1lc3NhZ2VDaGVja2VySG9tZS5jbGFzcyk7CiAgICAgICAgIE1lc3NhZ2VDaGVja2VyIGNoZWNrZXIgPSBob21lLmNyZWF0ZSgpOwogICAgICAgICByZXR1cm4gY2hlY2tlci5kb25lKCk7CkBAIC0xMDcsNyArMTA3LDcgQEAKIAogICAgIHByaXZhdGUgaW50IGV4cGVjdGVkUmVzdWx0cygpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBPYmplY3QgbyA9IChuZXcgSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJNeU1lc3NhZ2VDaGVja2VyIik7Ci0gICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpIAorICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKQogICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG8sIE1lc3NhZ2VDaGVja2VySG9tZS5jbGFzcyk7CiAgICAgICAgIE1lc3NhZ2VDaGVja2VyIGNoZWNrZXIgPSBob21lLmNyZWF0ZSgpOwogICAgICAgICByZXR1cm4gY2hlY2tlci5leHBlY3RlZFJlc3VsdHMoKTsKQEAgLTExNSw3ICsxMTUsNyBAQAogCiAgICAgcHJpdmF0ZSB2b2lkIG5vdGlmeUFuZFdhaXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgT2JqZWN0IG8gPSAobmV3IEluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiTXlNZXNzYWdlQ2hlY2tlciIpOwotICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKSAKKyAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkKICAgICAgICAgICAgIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvLCBNZXNzYWdlQ2hlY2tlckhvbWUuY2xhc3MpOwogICAgICAgICBNZXNzYWdlQ2hlY2tlciBjaGVja2VyID0gaG9tZS5jcmVhdGUoKTsKICAgICAgICAgY2hlY2tlci5ub3RpZnlBbmRXYWl0KCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi1yZXNvdXJjZXMteG1sL2FwcC9zcmMvbWRiL015TWVzc2FnZUJlYW4uamF2YQppbmRleCAxOWJmZGI0Li4yOGE1NzRjIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9hcHAvc3JjL21kYi9NeU1lc3NhZ2VCZWFuLmphdmEKQEAgLTMxLDQxICszMSw0MSBAQAogCiAvKioKICAqLwotcHVibGljIGNsYXNzIE15TWVzc2FnZUJlYW4gaW1wbGVtZW50cyBNZXNzYWdlRHJpdmVuQmVhbiwgCitwdWJsaWMgY2xhc3MgTXlNZXNzYWdlQmVhbiBpbXBsZW1lbnRzIE1lc3NhZ2VEcml2ZW5CZWFuLAogICAgICAgICBNeU1lc3NhZ2VMaXN0ZW5lciB7CiAKICAgICBwcml2YXRlIHRyYW5zaWVudCBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGMgPSBudWxsOwogICAgIHByaXZhdGUgQ29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0b3IsIHdoaWNoIGlzIHB1YmxpYyBhbmQgdGFrZXMgbm8gYXJndW1lbnRzLgogICAgICAqLwogICAgIHB1YmxpYyBNeU1lc3NhZ2VCZWFuKCkge30KIAogICAgIC8qKgotICAgICAqIHNldE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgCi0gICAgICogbm90IGZpbmFsIG9yIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgCisgICAgICogc2V0TWVzc2FnZURyaXZlbkNvbnRleHQgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dAorICAgICAqIG5vdCBmaW5hbCBvciBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kCiAgICAgICogd2l0aCBvbmUgYXJndW1lbnQgb2YgdHlwZSBqYWthcnRhLmVqYi5NZXNzYWdlRHJpdmVuQ29udGV4dC4KICAgICAgKgogICAgICAqIEBwYXJhbSBtZGMgICAgdGhlIGNvbnRleHQgdG8gc2V0CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TWVzc2FnZURyaXZlbkNvbnRleHQoTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjKSB7Ci0JdGhpcy5tZGMgPSBtZGM7CisgICAgdGhpcy5tZGMgPSBtZGM7CiAgICAgfQogCiAgICAgLyoqCi0gICAgICogZWpiQ3JlYXRlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yIAotICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBubyAKKyAgICAgKiBlamJDcmVhdGUgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IKKyAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggbm8KICAgICAgKiBhcmd1bWVudHMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgeyB9CiAKICAgICAvKioKLSAgICAgKiBvbk1lc3NhZ2UgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IgCisgICAgICogb25NZXNzYWdlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yCiAgICAgICogc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCB3aXRoIG9uZSBhcmd1bWVudAogICAgICAqIG9mIHR5cGUgamFrYXJ0YS5qbXMuTWVzc2FnZS4KICAgICAgKgotICAgICAqIENhc3RzIHRoZSBpbmNvbWluZyBNZXNzYWdlIHRvIGEgVGV4dE1lc3NhZ2UgYW5kIGRpc3BsYXlzIAorICAgICAqIENhc3RzIHRoZSBpbmNvbWluZyBNZXNzYWdlIHRvIGEgVGV4dE1lc3NhZ2UgYW5kIGRpc3BsYXlzCiAgICAgICogdGhlIHRleHQuCiAgICAgICoKICAgICAgKiBAcGFyYW0gaW5NZXNzYWdlICAgIHRoZSBpbmNvbWluZyBtZXNzYWdlCkBAIC03Niw3ICs3Niw3IEBACiAgICAgICAgIC8vbG9nKCJvbk1lc3NhZ2U6OiBnZXRDYWxsZXJQcmluY2lwYWwgOiAiICsgbWRjLmdldENhbGxlclByaW5jaXBhbCgpKTsKICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIm9uTWVzc2FnZSA6IFRocmVhZElEIDogIiArIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0TmFtZSgpKTsKICAgICAgICAgaWYobWRjLmdldENhbGxlclByaW5jaXBhbCgpICE9IG51bGwpewotICAgICAgICAJbG9nKCJvbk1lc3NhZ2U6OiBnZXRDYWxsZXJQcmluY2lwYWwgTmFtZSA6ICIgKyBtZGMuZ2V0Q2FsbGVyUHJpbmNpcGFsKCkuZ2V0TmFtZSgpKTsKKyAgICAgICAgICAgIGxvZygib25NZXNzYWdlOjogZ2V0Q2FsbGVyUHJpbmNpcGFsIE5hbWUgOiAiICsgbWRjLmdldENhbGxlclByaW5jaXBhbCgpLmdldE5hbWUoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBsb2coIm9uTWVzc2FnZSA6IGlzQ2FsbGVySW5Sb2xlKCdqYWdhZGlzaCcpIDogIiArIG1kYy5pc0NhbGxlckluUm9sZSgiamFnYWRpc2giKSk7CkBAIC04NSw3ICs4NSw3IEBACiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGlmIChpbk1lc3NhZ2UuZW5kc1dpdGgoIldSSVRFIikpIHsKLSAgICAgICAgICAgICAgICBkb0RiU3R1ZmYoIldSSVRFIiwgCisgICAgICAgICAgICAgICAgZG9EYlN0dWZmKCJXUklURSIsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbk1lc3NhZ2Uuc3Vic3RyaW5nKDAsIGluTWVzc2FnZS5sYXN0SW5kZXhPZigiOiIpKSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGluTWVzc2FnZS5lbmRzV2l0aCgiREVMRVRFIikpIHsKICAgICAgICAgICAgICAgICBkb0RiU3R1ZmYoIkRFTEVURSIsCkBAIC05OSwxMCArOTksMTAgQEAKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogZWpiUmVtb3ZlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yIAotICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBubyAKKyAgICAgKiBlamJSZW1vdmUgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IKKyAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggbm8KICAgICAgKiBhcmd1bWVudHMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkge30KQEAgLTExMiw2MiArMTEyLDYyIEBACiAKICAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24gPSBudWxsOwogICAgICAgICBTdHJpbmcgaWQgICAgPSBtZXNzYWdlLnN1YnN0cmluZygwLCBtZXNzYWdlLmluZGV4T2YoIjoiKSk7Ci0gICAgICAgIFN0cmluZyBib2R5ICA9IG1lc3NhZ2Uuc3Vic3RyaW5nKG1lc3NhZ2UuaW5kZXhPZigiOiIpKzEpOyAKKyAgICAgICAgU3RyaW5nIGJvZHkgID0gbWVzc2FnZS5zdWJzdHJpbmcobWVzc2FnZS5pbmRleE9mKCI6IikrMSk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKCJSRUFEIi5lcXVhbHMob3ApKSB7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZWJ1ZygiUmVhZGluZyByb3cgZnJvbSBkYXRhYmFzZS4uLiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAKICAgICAgICAgICAgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L015REIiKTsKICAgICAgICAgICAgICAgICAgIGRlYnVnKCJMb29rZWQgdXAgRGF0YXNvdXJjZVxuIik7CiAgICAgICAgICAgICAgICAgICBkZWJ1ZygiR2V0IEpEQkMgY29ubmVjdGlvbiwgYXV0byBzaWduIG9uIik7CiAgICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgU3RhdGVtZW50IHN0bXQgPSBkYkNvbm5lY3Rpb24uY3JlYXRlU3RhdGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICBTdHJpbmcgcXVlcnkgPSAKKyAgICAgICAgICAgICAgICAgIFN0cmluZyBxdWVyeSA9CiAgICAgICAgICAgICAgICAgICAiU0VMRUNUIGlkIGZyb20gbWVzc2FnZXMgd2hlcmUgaWQgPSAnUVEnIjsKICAgICAgICAgICAgICAgICAgIFJlc3VsdFNldCByZXN1bHRzID0gc3RtdC5leGVjdXRlUXVlcnkocXVlcnkpOwogICAgICAgICAgICAgICAgICAgcmVzdWx0cy5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlFRIGhhcyBiYWxhbmNlICIgKyAKKyAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUVEgaGFzIGJhbGFuY2UgIiArCiAgICAgICAgICAgICAgICAgICByZXN1bHRzLmdldEludCgiYmFsYW5jZSIpICsgIiBkb2xsYXJzIik7CiAgICAgICAgICAgICAgICAgICByZXN1bHRzLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgICBzdG10LmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZWFkIG9uZSBhY2NvdW50XG4iKTsKIAogICAgICAgICAgICAgfSBlbHNlIGlmICgiV1JJVEUiLmVxdWFscyhvcCkpIHsKIAogICAgICAgICAgICAgICAgIGRlYnVnKCJJbnNlcnRpbmcgb25lIG1lc3NhZ2UgaW4gdGhlIGRhdGFiYXNlXG4iKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvTXlEQiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKICAgICAgICAgICAgICAgICAvL2RlYnVnKCJHZXQgSkRCQyBjb25uZWN0aW9uLCBhdXRvIHNpZ24gb24iKTsKICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBjcmVhdGVSb3coaWQsIGJvZHksIGRiQ29ubmVjdGlvbik7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGVkIG9uZSBtZXNzYWdlXG4iKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgfSBlbHNlIGlmICgiREVMRVRFIi5lcXVhbHMob3ApKSB7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZWJ1ZygiRGVsZXRpbmcgb25lIG1lc3NhZ2UgZnJvbSB0aGUgZGF0YWJhc2VcbiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvTXlEQiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKICAgICAgICAgICAgICAgICAvL2RlYnVnKCJHZXQgSkRCQyBjb25uZWN0aW9uLCBhdXRvIHNpZ24gb24iKTsKICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZWxldGVSb3coaWQsIGRiQ29ubmVjdGlvbik7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZWxldGVkIG9uZSBtZXNzYWdlXG4iKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoIkRFTEVURV9BTEwiLmVxdWFscyhvcCkpIHsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGRlYnVnKCJEZWxldGluZyBhbGwgbWVzc2FnZXMgZnJvbSB0aGUgZGF0YWJhc2VcbiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvTXlEQiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKQEAgLTE3OCw3ICsxNzgsNyBAQAogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvL3Vuc3VwcG9ydGVkIG9wCiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICB9ZmluYWxseXsKICAgICAgICAgICAgIHRyeXsKICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24uY2xvc2UoKTsKQEAgLTE4Nyw5ICsxODcsOSBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIAotICAgIHByaXZhdGUgdm9pZCBjcmVhdGVSb3coU3RyaW5nIGlkLCBTdHJpbmcgYm9keSwgCi0gICAgICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikgCisKKyAgICBwcml2YXRlIHZvaWQgY3JlYXRlUm93KFN0cmluZyBpZCwgU3RyaW5nIGJvZHksCisgICAgICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgLy8gQ3JlYXRlIHJvdyBmb3IgdGhpcyBtZXNzYWdlCkBAIC0yMDUsOSArMjA1LDkgQEAKICAgICAgICAgc3RtdC5jbG9zZSgpOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBkZWxldGVSb3coU3RyaW5nIGlkLCBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikgCisgICAgcHJpdmF0ZSB2b2lkIGRlbGV0ZVJvdyhTdHJpbmcgaWQsIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgLy8gRGVsZXRlIHJvdyBmb3IgdGhpcyBtZXNzYWdlCiAgICAgICAgIGRlYnVnKCJEZWxldGVSb3cgd2l0aCBJRCA9ICIgKyBpZCk7CiAgICAgICAgIFN0YXRlbWVudCBzdG10ID0gZGJDb25uZWN0aW9uLmNyZWF0ZVN0YXRlbWVudCgpOwpAQCAtMjIwLDkgKzIyMCw5IEBACiAgICAgICAgIHN0bXQuY2xvc2UoKTsKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgZGVsZXRlQWxsKGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKSAKKyAgICBwcml2YXRlIHZvaWQgZGVsZXRlQWxsKGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgLy8gRGVsZXRlIHJvdyBmb3IgdGhpcyBtZXNzYWdlCiAgICAgICAgIFN0YXRlbWVudCBzdG10ID0gZGJDb25uZWN0aW9uLmNyZWF0ZVN0YXRlbWVudCgpOwogICAgICAgICBTdHJpbmcgcXVlcnkgPSAiREVMRVRFIEZST00gbWVzc2FnZXMiOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi1yZXNvdXJjZXMteG1sL2FwcC9zcmMvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvYXBwL3NyYy9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YQppbmRleCBiZTM3YTRhLi5hMWM2MmY3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvYXBwL3NyYy9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvYXBwL3NyYy9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YQpAQCAtNDQsMTcgKzQ0LDE3IEBACiAKICAgICBwdWJsaWMgU3RyaW5nIGRvVGVzdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIElPRXhjZXB0aW9uewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoaXMgaXMgdG8gdGVzdCBjb25uZWN0b3IgMS42ICIrCi0JICAgICAgICAgICAgICJjb250cmFjdHMuIik7CisgICAgICAgICAgICAgICAgICJjb250cmFjdHMuIik7CiAKICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKIAogICAgICAgICBTdHJpbmcgcmVzID0gIk5PVCBSVU4iOwotCWRlYnVnKCJkb1Rlc3QoKSBFTlRFUi4uLiIpOworICAgIGRlYnVnKCJkb1Rlc3QoKSBFTlRFUi4uLiIpOwogICAgICAgICBib29sZWFuIHBhc3MgPSBmYWxzZTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJlcyAgPSAiQUxMIFRFU1RTIFBBU1NFRCI7Ci0JICAgIGludCB0ZXN0Q291bnQgPSAxOworICAgICAgICBpbnQgdGVzdENvdW50ID0gMTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCJTdGFydGluZyB0aGUgdGVzdCIpOwogICAgICAgICAgICAgb3V0LmZsdXNoKCk7CiAKQEAgLTgxLDE4ICs4MSwxOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gIlNPTUUgVEVTVFMgRkFJTEVEIjsKICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSUQgQ29ubmVjdG9yIDEuNiB0ZXN0IC0gIiArIHRlc3RDb3VudCArICIgRkFJTCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIlRFU1Q6RkFJTCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSUQgQ29ubmVjdG9yIDEuNiB0ZXN0IC0gIiArIHRlc3RDb3VudCArICIgUEFTUyIpOwogICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIlRFU1Q6UEFTUyIpOwotCQkgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiRU5EX09GX0VYRUNVVElPTiIpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiRU5EX09GX0VYRUNVVElPTiIpOwotICAgICAgICAgICAgCisKIAogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW1wb3J0aW5nIHRyYW5zYWN0aW9uIHRlc3QgZmFpbGVkLiIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi1yZXNvdXJjZXMteG1sL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvYnVpbGQucHJvcGVydGllcwppbmRleCAyMDdhNDg2Li4wODNiMjYyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvY29ubmVjdG9yMTYvc2VydmxldCIvPgogPHByb3BlcnR5IG5hbWU9Imh0dHA6aG9zdCIgdmFsdWU9ImxvY2FsaG9zdCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi1yZXNvdXJjZXMteG1sL3JhL01FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi1yZXNvdXJjZXMteG1sL3JhL01FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sCmluZGV4IGE5MzQ5ZmMuLjBmY2FiZGQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9yYS9NRVRBLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvcmEvTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwKQEAgLTQ4LDQgKzQ4LDQgQEAKICAgICAgIDxwcmluY2lwYWwtbWFwIGVpcy1wcmluY2lwYWw9ImVpcy1wcmFzYXRoIiBtYXBwZWQtcHJpbmNpcGFsPSJwcmFzYXRoIiAvPgogICAgICAgPHByaW5jaXBhbC1tYXAgZWlzLXByaW5jaXBhbD0iZWlzLWphZ2FkaXNoIiBtYXBwZWQtcHJpbmNpcGFsPSJqYWdhZGlzaCIgLz4KICAgICA8L3dvcmstc2VjdXJpdHktbWFwPgotPC9yZXNvdXJjZXM+IAorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvcmEvTUVUQS1JTkYvcmEueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi1yZXNvdXJjZXMteG1sL3JhL01FVEEtSU5GL3JhLnhtbAppbmRleCA5NzgxZTE2Li4zY2NmMjk2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvcmEvTUVUQS1JTkYvcmEueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9yYS9NRVRBLUlORi9yYS54bWwKQEAgLTUxLDcgKzUxLDcgQEAKICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5LWNvbmZpZGVudGlhbD4KICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CiAgICAgICAgIDxpbmJvdW5kLXJlc291cmNlYWRhcHRlcj4KLSAgICAgICAgICAgIDxtZXNzYWdlYWRhcHRlcj4gICAgICAgICAgCisgICAgICAgICAgICA8bWVzc2FnZWFkYXB0ZXI+CiAgICAgICAgICAgICAgICAgPG1lc3NhZ2VsaXN0ZW5lcj4KICAgICAgICAgICAgICAgICAgICAgPG1lc3NhZ2VsaXN0ZW5lci10eXBlPgogICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdG9yLk15TWVzc2FnZUxpc3RlbmVyCkBAIC02Miw3ICs2Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICA8L2FjdGl2YXRpb25zcGVjLWNsYXNzPgogICAgICAgICAgICAgICAgICAgICA8L2FjdGl2YXRpb25zcGVjPgogICAgICAgICAgICAgICAgIDwvbWVzc2FnZWxpc3RlbmVyPgotICAgICAgICAgICAgPC9tZXNzYWdlYWRhcHRlcj4gICAgICAgICAgCisgICAgICAgICAgICA8L21lc3NhZ2VhZGFwdGVyPgogICAgICAgICA8L2luYm91bmQtcmVzb3VyY2VhZGFwdGVyPgogICAgICAgICA8YWRtaW5vYmplY3Q+CiAgICAgICAgICAgPGFkbWlub2JqZWN0LWludGVyZmFjZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvYWRtaW5vYmplY3QtaW50ZXJmYWNlPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi1yZXNvdXJjZXMteG1sL3JhL3NyYy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvcmEvc3JjL2J1aWxkLnhtbAppbmRleCBlZDI5ODg5Li44NTI4ODE4IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvcmEvc3JjL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvcmEvc3JjL2J1aWxkLnhtbApAQCAtMzAsOCArMzAsOCBAQAogCiAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJpbml0LWNvbW1vbiIgPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJidWlsZC5jbGFzc2VzLmRpciIgdmFsdWU9ImNsYXNzZXMiIC8+Ci0JPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNvbm5lY3RvciIgLz4KKyAgICA8cGFyYW0gbmFtZT0iYnVpbGQuY2xhc3Nlcy5kaXIiIHZhbHVlPSJjbGFzc2VzIiAvPgorICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjb25uZWN0b3IiIC8+CiAgICAgPC9hbnRjYWxsPgogICAgIDxqYXIgamFyZmlsZT0iLi4vZ2VuZXJpYy1yYS5qYXIiIGJhc2VkaXI9ImNsYXNzZXMiCiAgICAgICAgICBpbmNsdWRlcz0iY29ubmVjdG9yLyouY2xhc3MiIC8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YQppbmRleCA1NTUzM2Q0Li5mNTliMmIzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEKQEAgLTE4LDcgKzE4LDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBDb250cm9scyB7CiAgICAgcHVibGljIHN0YXRpYyBPYmplY3QgcmVhZHlMb2NrID0gbmV3IE9iamVjdCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQppbmRleCA2NTgyMzNlLi5kNzNjODYyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIERlbGl2ZXJ5V29yayBpbXBsZW1lbnRzIFdvcmsgewogCkBAIC0zNiw3ICszNiw3IEBACiAgICAgcHJpdmF0ZSBTdHJpbmcgb3A7CiAgICAgcHJpdmF0ZSBib29sZWFuIGtlZXBDb3VudDsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnRlciA9IDA7Ci0gICAgCisKICAgICBwdWJsaWMgRGVsaXZlcnlXb3JrKE1lc3NhZ2VFbmRwb2ludCBlcCwgaW50IG51bU9mTWVzc2FnZXMsIFN0cmluZyBvcCkgewogICAgICAgICB0aGlzLmVwID0gZXA7CiAgICAgICAgIHRoaXMubnVtID0gbnVtT2ZNZXNzYWdlczsKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICAgICAgdGhpcy5rZWVwQ291bnQgPSBmYWxzZTsKICAgICB9CiAKLSAgICBwdWJsaWMgRGVsaXZlcnlXb3JrKE1lc3NhZ2VFbmRwb2ludCBlcCwgaW50IG51bU9mTWVzc2FnZXMsIAorICAgIHB1YmxpYyBEZWxpdmVyeVdvcmsoTWVzc2FnZUVuZHBvaW50IGVwLCBpbnQgbnVtT2ZNZXNzYWdlcywKICAgICAgICAgICAgIFN0cmluZyBvcCwgYm9vbGVhbiBrZWVwQ291bnQpIHsKICAgICAgICAgdGhpcy5lcCA9IGVwOwogICAgICAgICB0aGlzLm51bSA9IG51bU9mTWVzc2FnZXM7CkBAIC01NSw3ICs1NSw3IEBACiAgICAgcHVibGljIHZvaWQgcnVuKCkgewogCiAgICAgICAgIGRlYnVnKCJFTlRFUi4uLiIpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgLy9NZXRob2Qgb25NZXNzYWdlID0gZ2V0T25NZXNzYWdlTWV0aG9kKCk7CiAgICAgICAgICAgICAvL2VwLmJlZm9yZURlbGl2ZXJ5KG9uTWVzc2FnZSk7CkBAIC03OCwxMSArNzgsMTEgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy9lcC5hZnRlckRlbGl2ZXJ5KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCJMRUFWRS4uLiIpOwogICAgIH0KIApAQCAtOTMsMTQgKzkzLDE0IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSBNZXRob2QgZ2V0T25NZXNzYWdlTWV0aG9kKCkgewotICAgICAgICAKKwogICAgICAgICBNZXRob2Qgb25NZXNzYWdlTWV0aG9kID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENsYXNzIG1zZ0xpc3RlbmVyQ2xhc3MgPSBjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIuY2xhc3M7CiAgICAgICAgICAgICBDbGFzc1tdIHBhcmFtVHlwZXMgPSB7IGphdmEubGFuZy5TdHJpbmcuY2xhc3MgfTsKLSAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9IAorICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0KICAgICAgICAgICAgICAgICBtc2dMaXN0ZW5lckNsYXNzLmdldE1ldGhvZCgib25NZXNzYWdlIiwgcGFyYW1UeXBlcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YQppbmRleCAxMDBjYWNlLi5mYTkzZjYzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgICAgICAgICAgZmxhZ1RvU3RyaW5nKGZsYWdzKSk7CiAgICAgfQogCi0gICAgCisKICAgICBwdWJsaWMgdm9pZCBmb3JnZXQoWGlkIHhpZCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLmZvcmdldDogIiArIHhpZFRvU3RyaW5nKHhpZCkpOwogICAgIH0KQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLnByZXBhcmU6ICIgKyB4aWRUb1N0cmluZyh4aWQpKTsKICAgICAgICAgcmV0dXJuIFhBUmVzb3VyY2UuWEFfT0s7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFhpZFtdIHJlY292ZXIoaW50IGZsYWcpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5yZWNvdmVyOiAiICsgZmxhZ1RvU3RyaW5nKGZsYWcpKTsKICAgICAgICAgcmV0dXJuIG51bGw7CkBAIC02Niw3ICs2Niw3IEBACiAgICAgcHVibGljIGJvb2xlYW4gc2V0VHJhbnNhY3Rpb25UaW1lb3V0KGludCBzZWNvbmRzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc3RhcnQoWGlkIHhpZCwgaW50IGZsYWdzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2Uuc3RhcnQ6ICIgKyB4aWRUb1N0cmluZyh4aWQpICsgIiwiICsKICAgICAgICAgICAgICAgICBmbGFnVG9TdHJpbmcoZmxhZ3MpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29ubmVjdG9yL0pTUjMyMldvcmsuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29ubmVjdG9yL0pTUjMyMldvcmsuamF2YQppbmRleCA1MTA3YWMxLi4wMjAzZjRhIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9KU1IzMjJXb3JrLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb25uZWN0b3IvSlNSMzIyV29yay5qYXZhCkBAIC00OCw2ICs0OCw2IEBACiAKICAgICBwdWJsaWMgdm9pZCBydW4oKXsKICAgICAgICAgc3VwZXIucnVuKCk7Ci0gICAgICAgIAorCiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdC5qYXZhCmluZGV4IGE2OGE1YjcuLjljMjg4MTIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEKQEAgLTUxLDExICs1MSwxMSBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGluaXRpYWxpemUoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6aW5nIHRoZSBDb250cm9scyB0byBmYWxzZToiK3Jlc2V0Q29udHJvbCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6aW5nIHRoZSBDb250cm9scyB0byBmYWxzZToiK3Jlc2V0Q29udHJvbCk7CiAgICAgICAgIGlmIChyZXNldENvbnRyb2wuZXF1YWxzKCJCRUdJTk5JTkciKSkgewogICAgICAgICAgICBDb250cm9scy5kb25lPWZhbHNlOwotCSAgIFN5c3RlbS5vdXQucHJpbnRsbigiW015QWRtaW5PYmplY3RdIEluaXRpYWxpemVkIHRoZSBDb250cm9scyB0byBmYWxzZSIpOwotCX0KKyAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXplZCB0aGUgQ29udHJvbHMgdG8gZmFsc2UiKTsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gZG9uZSgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29ubmVjdG9yL015U2VjdXJpdHlDb250ZXh0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9NeVNlY3VyaXR5Q29udGV4dC5qYXZhCmluZGV4IDMxNzhjMWMuLmUxOTA1MWUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29ubmVjdG9yL015U2VjdXJpdHlDb250ZXh0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb25uZWN0b3IvTXlTZWN1cml0eUNvbnRleHQuamF2YQpAQCAtNjIsNyArNjIsNyBAQAogICAgICAgICBDYWxsZXJQcmluY2lwYWxDYWxsYmFjayBjcGMgPSBuZXcgQ2FsbGVyUHJpbmNpcGFsQ2FsbGJhY2soZXhlY1N1YmplY3QsIG5ldyBQcmluY2lwYWxJbXBsKHByaW5jaXBhbE5hbWUpKTsKICAgICAgICAgZGVidWcoInNldHRpbmcgY2FsbGVyIHByaW5jaXBhbCBjYWxsYmFjayB3aXRoIHByaW5jaXBhbCA6ICIgKyBwcmluY2lwYWxOYW1lKTsKICAgICAgICAgY2FsbGJhY2tzLmFkZChjcGMpOwotICAgICAgICAKKwogLyoKICAgICAgICAgR3JvdXBQcmluY2lwYWxDYWxsYmFjayBncGMgPSBuZXcgR3JvdXBQcmluY2lwYWxDYWxsYmFjayhleGVjU3ViamVjdCwgbnVsbCk7CiAgICAgICAgIGNhbGxiYWNrcy5hZGQoZ3BjKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhCmluZGV4IDgxODJlZjUuLjNmY2U1NDQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YQpAQCAtMjQsOSArMjQsOSBAQAogICogc28gdGhhdCB0aGUgYXBwIHNlcnZlciBjYW4gaW5zdGFudGlhdGUgYW5kIGNvbmZpZ3VyZQogICogaXQgYXQgdGhlIHJ1bnRpbWUuCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KLXB1YmxpYyBjbGFzcyBTaW1wbGVBY3RpdmF0aW9uU3BlYyAKK3B1YmxpYyBjbGFzcyBTaW1wbGVBY3RpdmF0aW9uU3BlYwogICAgIGltcGxlbWVudHMgQWN0aXZhdGlvblNwZWMsIGphdmEuaW8uU2VyaWFsaXphYmxlIHsKIAogICAgIHByaXZhdGUgU3RyaW5nIGRlc3RpbmF0aW9uTmFtZTsKQEAgLTQzLDcgKzQzLDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldERlc3RpbmF0aW9uTmFtZSAoKSB7CiAgICAgICAgIHJldHVybiB0aGlzLmRlc3RpbmF0aW9uTmFtZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXREZXN0aW5hdGlvbk5hbWUgKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIGRlYnVnKCJzZXREZXN0aW5hdGlvbk5hbWUoKSBjYWxsZWQuLi4gbmFtZSA9ICIgKyBuYW1lKTsKICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbk5hbWUgPSBuYW1lOwpAQCAtNTIsNyArNTIsNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzdGluYXRpb25UeXBlKCkgewogICAgICAgICByZXR1cm4gdGhpcy5kZXN0aW5hdGlvblR5cGU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0RGVzdGluYXRpb25UeXBlIChTdHJpbmcgdHlwZSkgewogICAgICAgICBkZWJ1Zygic2V0RGVzdGluYXRpb25UeXBlICgpIGNhbGxlZC4uLiB0eXBlID0gIiArIHR5cGUpOwogICAgICAgICB0aGlzLmRlc3RpbmF0aW9uVHlwZT0gdHlwZTsKQEAgLTYxLDcgKzYxLDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldFRlc3RQcm9wKCkgewogICAgICAgICByZXR1cm4gdGhpcy50ZXN0UHJvcDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRUZXN0UHJvcCAoU3RyaW5nIHRlc3RQcm9wKSB7CiAgICAgICAgIGRlYnVnKCJzZXRUZXN0UHJvcCAoKSBjYWxsZWQuLi4gdGVzdFByb3AgPSAiICsgdGVzdFByb3ApOwogICAgICAgICB0aGlzLnRlc3RQcm9wID0gdGVzdFByb3A7CkBAIC03MCw3ICs3MCw3IEBACiAgICAgcHVibGljIEludGVnZXIgZ2V0VGVzdEludGVnZXJQcm9wKCkgewogICAgICAgICByZXR1cm4gdGhpcy50ZXN0SW50ZWdlclByb3A7CiAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0VGVzdEludGVnZXJQcm9wIChJbnRlZ2VyIHRlc3RQcm9wMSkgewogICAgICAgICBkZWJ1Zygic2V0VGVzdEludGVnZXJQcm9wICgpIGNhbGxlZC4uLiB0ZXN0SW50ZWdlclByb3AgPSAiICsgdGVzdFByb3AxKTsKICAgICAgICAgdGhpcy50ZXN0SW50ZWdlclByb3AgPSB0ZXN0UHJvcDE7CkBAIC05NCw3ICs5NCw3IEBACiAKICAgICAgIH0KIAotICAgfSAKKyAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBkZWJ1ZyAoU3RyaW5nIG1lc3NhZ2UpCiAgICAgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYtcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEKaW5kZXggYzAxYzMxZS4uNjlhNzIxYiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhCkBAIC04Niw3ICs4Niw3IEBACiAKICAgICAgICAgICAgICAgICBpZiAoIWZhY3RvcnkuaXNEZWxpdmVyeVRyYW5zYWN0ZWQob25NZXNzYWdlKSkgewogICAgICAgICAgICAgICAgICAgICAvL01lc3NhZ2VFbmRwb2ludCBlcCA9IGZhY3RvcnkuY3JlYXRlRW5kcG9pbnQobnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIC8vRGVsaXZlcnlXb3JrIGQgPSBuZXcgRGVsaXZlcnlXb3JrKCJOT19UWCIsIGVwKTsgCisgICAgICAgICAgICAgICAgICAgIC8vRGVsaXZlcnlXb3JrIGQgPSBuZXcgRGVsaXZlcnlXb3JrKCJOT19UWCIsIGVwKTsKICAgICAgICAgICAgICAgICAgICAgLy93bS5kb1dvcmsoZCwgMCwgbnVsbCwgbnVsbCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YQppbmRleCAxOGE5NzBkLi5iMmE5MDZjIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42LXJlc291cmNlcy14bWwvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YQpAQCAtMzUsOCArMzUsOCBAQAogICAgIHB1YmxpYyBpbnQgYnJhbmNoUXVhbGlmaWVyOwogICAgIHB1YmxpYyBpbnQgZ2xvYmFsVHhJRDsKIAotICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhHVFJJRFNJWkU9IDY0OyAKLSAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYQlFVQUxTSVpFPSA2NDsgCisgICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEdUUklEU0laRT0gNjQ7CisgICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEJRVUFMU0laRT0gNjQ7CiAKICAgICBwdWJsaWMgWElEKCkgewogICAgICAgICBpbnQgZm9vID0gSUQrKzsKQEAgLTU0LDEwICs1NCwxMCBAQAogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgICAgICAgICAgICAgICAgLy8gSXQgY2FuJ3QgYmUgZXF1YWwKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBvdGhlciA9IChYSUQpbzsgICAgICAgICAgICAgICAgICAgLy8gVGhlIG90aGVyIFhJRCwgbm93IHByb3Blcmx5IGNhc3QKLSAgICAgICAgCi0gICAgICAgIGlmICh0aGlzLmZvcm1hdElEID09IG90aGVyLmZvcm1hdElEIAorCisgICAgICAgIGlmICh0aGlzLmZvcm1hdElEID09IG90aGVyLmZvcm1hdElECiAgICAgICAgICAgICAgICAgJiYgdGhpcy5icmFuY2hRdWFsaWZpZXIgPT0gb3RoZXIuYnJhbmNoUXVhbGlmaWVyCiAgICAgICAgICAgICAgICAgJiYgdGhpcy5nbG9iYWxUeElEID09IG90aGVyLmdsb2JhbFR4SUQpIHsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtOTcsNyArOTcsNyBAQAogICAgICAgICAgICAgICAgICJmb3JtYXRJRCgiICAgICArIGZvcm1hdElEICAgICArICIpLCAiICsKICAgICAgICAgICAgICAgICAiYnJhbmNoUXVhbGlmaWVyICgiICsgYnJhbmNoUXVhbGlmaWVyICsgIiksICIgKwogICAgICAgICAgICAgICAgICJnbG9iYWxUeElEKCIgKyBnbG9iYWxUeElEICsgIil9Iik7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBzOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9hcHAvc3JjL01FVEEtSU5GL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9hcHAvc3JjL01FVEEtSU5GL2VqYi1qYXIueG1sCmluZGV4IDU4MmI3ODEuLjEyZmI2ZDMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvYXBwL3NyYy9NRVRBLUlORi9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwKQEAgLTExNCw4ICsxMTQsOCBAQAogICAgICAgICA8cmVzLXNoYXJpbmctc2NvcGU+U2hhcmVhYmxlPC9yZXMtc2hhcmluZy1zY29wZT4KICAgICAgIDwvcmVzb3VyY2UtcmVmPgogICAgICAgPHJlc291cmNlLWVudi1yZWY+Ci0JPHJlc291cmNlLWVudi1yZWYtbmFtZT5laXMvdGVzdEFkbWluPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+Ci0JPHJlc291cmNlLWVudi1yZWYtdHlwZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvcmVzb3VyY2UtZW52LXJlZi10eXBlPgorICAgIDxyZXNvdXJjZS1lbnYtcmVmLW5hbWU+ZWlzL3Rlc3RBZG1pbjwvcmVzb3VyY2UtZW52LXJlZi1uYW1lPgorICAgIDxyZXNvdXJjZS1lbnYtcmVmLXR5cGU+Y29ubmVjdG9yLk15QWRtaW5PYmplY3Q8L3Jlc291cmNlLWVudi1yZWYtdHlwZT4KICAgICAgIDwvcmVzb3VyY2UtZW52LXJlZj4KICAgICAgIDxzZWN1cml0eS1pZGVudGl0eT4KICAgICAgICAgPHVzZS1jYWxsZXItaWRlbnRpdHkvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9hcHAvc3JjL01FVEEtSU5GL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvYXBwL3NyYy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwKaW5kZXggNDllOGMwNy4uYmUwOTdiNyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9hcHAvc3JjL01FVEEtSU5GL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCkBAIC0zMiw3ICszMiw3IEBACiAgICAgICAgICAgICBUZXN0SW50ZWdlclByb3AKICAgICAgICAgICA8L2FjdGl2YXRpb24tY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgPGFjdGl2YXRpb24tY29uZmlnLXByb3BlcnR5LXZhbHVlPgotICAgICAgICAgICAgMiAKKyAgICAgICAgICAgIDIKICAgICAgICAgICA8L2FjdGl2YXRpb24tY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICA8L2FjdGl2YXRpb24tY29uZmlnLXByb3BlcnR5PgogICAgICAgICA8L2FjdGl2YXRpb24tY29uZmlnPgpAQCAtODQsNyArODQsNyBAQAogICAgICAgPC9yZXNvdXJjZS1yZWY+CiAgICAgICA8cmVzb3VyY2UtZW52LXJlZj4KICAgICAgICAgPHJlc291cmNlLWVudi1yZWYtbmFtZT5laXMvdGVzdEFkbWluPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+Ci0JPGpuZGktbmFtZT5laXMvdGVzdEFkbWluPC9qbmRpLW5hbWU+CisgICAgPGpuZGktbmFtZT5laXMvdGVzdEFkbWluPC9qbmRpLW5hbWU+CiAgICAgICA8L3Jlc291cmNlLWVudi1yZWY+CiAgICAgICA8Z2VuLWNsYXNzZXMvPgogICAgIDwvZWpiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9hcHAvc3JjL2JlYW5zL01lc3NhZ2VDaGVja2VyRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L2FwcC9zcmMvYmVhbnMvTWVzc2FnZUNoZWNrZXJFSkIuamF2YQppbmRleCBhODNjOTI0Li5lOGVlZGIwIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L2FwcC9zcmMvYmVhbnMvTWVzc2FnZUNoZWNrZXJFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L2FwcC9zcmMvYmVhbnMvTWVzc2FnZUNoZWNrZXJFSkIuamF2YQpAQCAtNDAsNyArNDAsNyBAQAogCiAgICAgcHVibGljIE1lc3NhZ2VDaGVja2VyRUpCKCkge30KIAotICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIAorICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpCiAgICAgICAgIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImJlYW4gY3JlYXRlZCIpOwogICAgICAgICBoZWxkQ29uID0gbnVsbDsKQEAgLTczLDcgKzczLDcgQEAKICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibWFvLmdldFJBKCkgaXMgbnVsbCIpOwogICAgICAgIH0KICAgICB9Y2F0Y2goRXhjZXB0aW9uIGUpewotCWUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICB9CiAgICAgICByZXR1cm4gcGFzczsKICAgICB9CkBAIC04NiwxMSArODYsMTEgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHN5bmNocm9uaXplZCAoQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpKSB7CiAgICAgICAgICAgICAgICAgLy9UZWxsIHRoZSByZXNvdXJjZSBhZGFwdGVyIHRoZSBjbGllbnQgaXMgcmVhZHkgdG8gcnVuCi0gICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLm5vdGlmeUFsbCgpOyAKLSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkubm90aWZ5QWxsKCk7CisKICAgICAgICAgICAgICAgICBkZWJ1ZygiTk9USUZJRUQuLi4gU1RBUlQgV0FJVElORyIpOwogICAgICAgICAgICAgICAgIC8vV2FpdCB1bnRpbCBiZWluZyB0b2xkIHRvIHJlYWQgZnJvbSB0aGUgZGF0YWJhc2UKLSAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkud2FpdCgpOyAKKyAgICAgICAgICAgICAgICBDb250cm9scy5nZXRMb2NrT2JqZWN0KCkud2FpdCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwpAQCAtMTA5LDIyICsxMDksMjIgQEAKICAgICB9CiAKICAgICBwdWJsaWMgaW50IGdldE1lc3NhZ2VDb3VudCgpIHsKLQl0cnkgeworICAgIHRyeSB7CiAgICAgICAgICAgICBDb25uZWN0aW9uIGNvbiA9IGdldEZyZXNoQ29ubmVjdGlvbigpOwogICAgICAgICAgICAgaW50IGNvdW50MSA9IGdldENvdW50KGNvbik7CiAgICAgICAgICAgICBjb24uY2xvc2UoKTsKLSAgICAgICAgICAgIAotCSAgICAvKgorCisgICAgICAgIC8qCiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQoQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpKSB7CiAgICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLm5vdGlmeSgpOwogICAgICAgICAgICAgfQotCSAgICAqLwotICAgICAgICAgICAgICAgIAorICAgICAgICAqLworCiAgICAgICAgICAgICByZXR1cm4gY291bnQxOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLm91dCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwotCX0KKyAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSBpbnQgZ2V0Q291bnQoQ29ubmVjdGlvbiBjb24pIHRocm93cyBTUUxFeGNlcHRpb24gewpAQCAtMTUwLDEwICsxNTAsMTAgQEAKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIHVzZXIgPSAoU3RyaW5nKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvdXNlciIpOwogICAgICAgICAgICAgcGFzc3dvcmQgPSAoU3RyaW5nKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvcGFzc3dvcmQiKTsKLQkgICAgQ29udHJvbHMgPSAoTXlBZG1pbk9iamVjdCkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2Vpcy90ZXN0QWRtaW4iKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDQUxMSU5HIElOSVRJTElaRSBdXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXSIpOwotCSAgICBDb250cm9scy5pbml0aWFsaXplKCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ0FMTEVEIElOSVRJTElaRSBdXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXSIgKyBDb250cm9scyk7CisgICAgICAgIENvbnRyb2xzID0gKE15QWRtaW5PYmplY3QpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9laXMvdGVzdEFkbWluIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ0FMTElORyBJTklUSUxJWkUgXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV0iKTsKKyAgICAgICAgQ29udHJvbHMuaW5pdGlhbGl6ZSgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNBTExFRCBJTklUSUxJWkUgXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV0iICsgQ29udHJvbHMpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CkBAIC0xODgsNyArMTg4LDcgQEAKICAgICAgICAgICAgIGRlYnVnKCJMb29rZWQgdXAgRGF0YXNvdXJjZVxuIik7CiAgICAgICAgICAgICBkZWJ1ZygiR2V0IEpEQkMgY29ubmVjdGlvbiwgYXV0byBzaWduIG9uIik7CiAgICAgICAgICAgICBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKGNvbiAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbjsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0xOTksNyArMTk5LDcgQEAKICAgICAgICAgICAgIHRocm93IGV4MTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBjbG9zZUNvbm5lY3Rpb24oQ29ubmVjdGlvbiBjb24pIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgICBpZiAoaGVsZENvbiAhPSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L2FwcC9zcmMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvYXBwL3NyYy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGRhZDIwN2IuLjBiMzhjMTkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvYXBwL3NyYy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvYXBwL3NyYy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIGVqYi1qYXIueG1sPU1FVEEtSU5GL2VqYi1qYXIueG1sCiBzdW4tZWpiLWphci54bWw9TUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L2FwcC9zcmMvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9hcHAvc3JjL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA5MzQzNTA2Li4zOTM5MjU3IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L2FwcC9zcmMvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvYXBwL3NyYy9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI4LDQ1ICsyOCw0NSBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwotICAgIAorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgICAgICAvL3N1cGVyKGFyZ3MpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGRvVGVzdCgpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVGhpcyBpcyB0byB0ZXN0IGNvbm5lY3RvciAxLjUgIisKLQkgICAgICAgICAgICAgImNvbnRyYWN0cy4iKTsKLSAgICAgICAgCisgICAgICAgICAgICAgICAgICJjb250cmFjdHMuIik7CisKICAgICAgICAgU3RyaW5nIHJlcyA9ICJOT1QgUlVOIjsKLQlkZWJ1ZygiZG9UZXN0KCkgRU5URVIuLi4iKTsKKyAgICBkZWJ1ZygiZG9UZXN0KCkgRU5URVIuLi4iKTsKICAgICAgICAgYm9vbGVhbiBwYXNzID0gZmFsc2U7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXMgID0gIkFMTCBURVNUUyBQQVNTRUQiOwotCSAgICBpbnQgdGVzdENvdW50ID0gMTsKKyAgICAgICAgaW50IHRlc3RDb3VudCA9IDE7CiAgICAgICAgICAgICB3aGlsZSAoIWRvbmUoKSkgewotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgbm90aWZ5QW5kV2FpdCgpOwogICAgICAgICAgICAgICAgIGlmICghZG9uZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJSdW5uaW5nLi4uIik7CiAgICAgICAgICAgICAgICAgICAgIHBhc3MgPSBjaGVja1Jlc3VsdHMoZXhwZWN0ZWRSZXN1bHRzKCkpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiR290IGV4cGVjdGVkIHJlc3VsdHMgPSAiICsgcGFzcyk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vZG8gbm90IGNvbnRpbnVlIGlmIG9uZSB0ZXN0IGZhaWxlZAogICAgICAgICAgICAgICAgICAgICBpZiAoIXBhc3MpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlcyA9ICJTT01FIFRFU1RTIEZBSUxFRCI7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiSUQgQ29ubmVjdG9yIDEuNiB0ZXN0IC0gIiArIHRlc3RDb3VudCwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJJRCBDb25uZWN0b3IgMS42IHRlc3QgLSAiICsgdGVzdENvdW50LCBzdGF0LlBBU1MpOwotCQkgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLQkJdGVzdENvdW50ICsrOworICAgICAgICB0ZXN0Q291bnQgKys7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CkBAIC03NiwxNCArNzYsMTQgQEAKICAgICAgICAgfQogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiY29ubmVjdG9yMS42SUQiKTsKIAotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiRVhJVElORy4uLiBTVEFUVVMgPSAiICsgcmVzKTsKICAgICAgICAgcmV0dXJuIHJlczsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIGJvb2xlYW4gY2hlY2tSZXN1bHRzKGludCBudW0pIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBPYmplY3QgbyA9IChuZXcgSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJNeU1lc3NhZ2VDaGVja2VyIik7Ci0gICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpIAorICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKQogICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG8sIE1lc3NhZ2VDaGVja2VySG9tZS5jbGFzcyk7CiAgICAgICAgIE1lc3NhZ2VDaGVja2VyIGNoZWNrZXIgPSBob21lLmNyZWF0ZSgpOwogICAgICAgICBpbnQgcmVzdWx0ID0gY2hlY2tlci5nZXRNZXNzYWdlQ291bnQoKTsKQEAgLTkyLDcgKzkyLDcgQEAKIAogICAgIHByaXZhdGUgYm9vbGVhbiBkb25lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIE9iamVjdCBvID0gKG5ldyBJbml0aWFsQ29udGV4dCgpKS5sb29rdXAoIk15TWVzc2FnZUNoZWNrZXIiKTsKLSAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkgCisgICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpCiAgICAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cobywgTWVzc2FnZUNoZWNrZXJIb21lLmNsYXNzKTsKICAgICAgICAgTWVzc2FnZUNoZWNrZXIgY2hlY2tlciA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgIHJldHVybiBjaGVja2VyLmRvbmUoKTsKQEAgLTEwMCw3ICsxMDAsNyBAQAogCiAgICAgcHJpdmF0ZSBpbnQgZXhwZWN0ZWRSZXN1bHRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIE9iamVjdCBvID0gKG5ldyBJbml0aWFsQ29udGV4dCgpKS5sb29rdXAoIk15TWVzc2FnZUNoZWNrZXIiKTsKLSAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkgCisgICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpCiAgICAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cobywgTWVzc2FnZUNoZWNrZXJIb21lLmNsYXNzKTsKICAgICAgICAgTWVzc2FnZUNoZWNrZXIgY2hlY2tlciA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgIHJldHVybiBjaGVja2VyLmV4cGVjdGVkUmVzdWx0cygpOwpAQCAtMTA4LDcgKzEwOCw3IEBACiAKICAgICBwcml2YXRlIHZvaWQgbm90aWZ5QW5kV2FpdCgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBPYmplY3QgbyA9IChuZXcgSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJNeU1lc3NhZ2VDaGVja2VyIik7Ci0gICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpIAorICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKQogICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG8sIE1lc3NhZ2VDaGVja2VySG9tZS5jbGFzcyk7CiAgICAgICAgIE1lc3NhZ2VDaGVja2VyIGNoZWNrZXIgPSBob21lLmNyZWF0ZSgpOwogICAgICAgICBjaGVja2VyLm5vdGlmeUFuZFdhaXQoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9hcHAvc3JjL21kYi9NeU1lc3NhZ2VCZWFuLmphdmEKaW5kZXggMTliZmRiNC4uMjhhNTc0YyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9hcHAvc3JjL21kYi9NeU1lc3NhZ2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9hcHAvc3JjL21kYi9NeU1lc3NhZ2VCZWFuLmphdmEKQEAgLTMxLDQxICszMSw0MSBAQAogCiAvKioKICAqLwotcHVibGljIGNsYXNzIE15TWVzc2FnZUJlYW4gaW1wbGVtZW50cyBNZXNzYWdlRHJpdmVuQmVhbiwgCitwdWJsaWMgY2xhc3MgTXlNZXNzYWdlQmVhbiBpbXBsZW1lbnRzIE1lc3NhZ2VEcml2ZW5CZWFuLAogICAgICAgICBNeU1lc3NhZ2VMaXN0ZW5lciB7CiAKICAgICBwcml2YXRlIHRyYW5zaWVudCBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGMgPSBudWxsOwogICAgIHByaXZhdGUgQ29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0b3IsIHdoaWNoIGlzIHB1YmxpYyBhbmQgdGFrZXMgbm8gYXJndW1lbnRzLgogICAgICAqLwogICAgIHB1YmxpYyBNeU1lc3NhZ2VCZWFuKCkge30KIAogICAgIC8qKgotICAgICAqIHNldE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgCi0gICAgICogbm90IGZpbmFsIG9yIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgCisgICAgICogc2V0TWVzc2FnZURyaXZlbkNvbnRleHQgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dAorICAgICAqIG5vdCBmaW5hbCBvciBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kCiAgICAgICogd2l0aCBvbmUgYXJndW1lbnQgb2YgdHlwZSBqYWthcnRhLmVqYi5NZXNzYWdlRHJpdmVuQ29udGV4dC4KICAgICAgKgogICAgICAqIEBwYXJhbSBtZGMgICAgdGhlIGNvbnRleHQgdG8gc2V0CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TWVzc2FnZURyaXZlbkNvbnRleHQoTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjKSB7Ci0JdGhpcy5tZGMgPSBtZGM7CisgICAgdGhpcy5tZGMgPSBtZGM7CiAgICAgfQogCiAgICAgLyoqCi0gICAgICogZWpiQ3JlYXRlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yIAotICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBubyAKKyAgICAgKiBlamJDcmVhdGUgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IKKyAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggbm8KICAgICAgKiBhcmd1bWVudHMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgeyB9CiAKICAgICAvKioKLSAgICAgKiBvbk1lc3NhZ2UgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IgCisgICAgICogb25NZXNzYWdlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yCiAgICAgICogc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCB3aXRoIG9uZSBhcmd1bWVudAogICAgICAqIG9mIHR5cGUgamFrYXJ0YS5qbXMuTWVzc2FnZS4KICAgICAgKgotICAgICAqIENhc3RzIHRoZSBpbmNvbWluZyBNZXNzYWdlIHRvIGEgVGV4dE1lc3NhZ2UgYW5kIGRpc3BsYXlzIAorICAgICAqIENhc3RzIHRoZSBpbmNvbWluZyBNZXNzYWdlIHRvIGEgVGV4dE1lc3NhZ2UgYW5kIGRpc3BsYXlzCiAgICAgICogdGhlIHRleHQuCiAgICAgICoKICAgICAgKiBAcGFyYW0gaW5NZXNzYWdlICAgIHRoZSBpbmNvbWluZyBtZXNzYWdlCkBAIC03Niw3ICs3Niw3IEBACiAgICAgICAgIC8vbG9nKCJvbk1lc3NhZ2U6OiBnZXRDYWxsZXJQcmluY2lwYWwgOiAiICsgbWRjLmdldENhbGxlclByaW5jaXBhbCgpKTsKICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIm9uTWVzc2FnZSA6IFRocmVhZElEIDogIiArIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0TmFtZSgpKTsKICAgICAgICAgaWYobWRjLmdldENhbGxlclByaW5jaXBhbCgpICE9IG51bGwpewotICAgICAgICAJbG9nKCJvbk1lc3NhZ2U6OiBnZXRDYWxsZXJQcmluY2lwYWwgTmFtZSA6ICIgKyBtZGMuZ2V0Q2FsbGVyUHJpbmNpcGFsKCkuZ2V0TmFtZSgpKTsKKyAgICAgICAgICAgIGxvZygib25NZXNzYWdlOjogZ2V0Q2FsbGVyUHJpbmNpcGFsIE5hbWUgOiAiICsgbWRjLmdldENhbGxlclByaW5jaXBhbCgpLmdldE5hbWUoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBsb2coIm9uTWVzc2FnZSA6IGlzQ2FsbGVySW5Sb2xlKCdqYWdhZGlzaCcpIDogIiArIG1kYy5pc0NhbGxlckluUm9sZSgiamFnYWRpc2giKSk7CkBAIC04NSw3ICs4NSw3IEBACiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGlmIChpbk1lc3NhZ2UuZW5kc1dpdGgoIldSSVRFIikpIHsKLSAgICAgICAgICAgICAgICBkb0RiU3R1ZmYoIldSSVRFIiwgCisgICAgICAgICAgICAgICAgZG9EYlN0dWZmKCJXUklURSIsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbk1lc3NhZ2Uuc3Vic3RyaW5nKDAsIGluTWVzc2FnZS5sYXN0SW5kZXhPZigiOiIpKSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGluTWVzc2FnZS5lbmRzV2l0aCgiREVMRVRFIikpIHsKICAgICAgICAgICAgICAgICBkb0RiU3R1ZmYoIkRFTEVURSIsCkBAIC05OSwxMCArOTksMTAgQEAKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogZWpiUmVtb3ZlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yIAotICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBubyAKKyAgICAgKiBlamJSZW1vdmUgbWV0aG9kLCBkZWNsYXJlZCBhcyBwdWJsaWMgKGJ1dCBub3QgZmluYWwgb3IKKyAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggbm8KICAgICAgKiBhcmd1bWVudHMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkge30KQEAgLTExMiw2MiArMTEyLDYyIEBACiAKICAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24gPSBudWxsOwogICAgICAgICBTdHJpbmcgaWQgICAgPSBtZXNzYWdlLnN1YnN0cmluZygwLCBtZXNzYWdlLmluZGV4T2YoIjoiKSk7Ci0gICAgICAgIFN0cmluZyBib2R5ICA9IG1lc3NhZ2Uuc3Vic3RyaW5nKG1lc3NhZ2UuaW5kZXhPZigiOiIpKzEpOyAKKyAgICAgICAgU3RyaW5nIGJvZHkgID0gbWVzc2FnZS5zdWJzdHJpbmcobWVzc2FnZS5pbmRleE9mKCI6IikrMSk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKCJSRUFEIi5lcXVhbHMob3ApKSB7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZWJ1ZygiUmVhZGluZyByb3cgZnJvbSBkYXRhYmFzZS4uLiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAKICAgICAgICAgICAgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L015REIiKTsKICAgICAgICAgICAgICAgICAgIGRlYnVnKCJMb29rZWQgdXAgRGF0YXNvdXJjZVxuIik7CiAgICAgICAgICAgICAgICAgICBkZWJ1ZygiR2V0IEpEQkMgY29ubmVjdGlvbiwgYXV0byBzaWduIG9uIik7CiAgICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgU3RhdGVtZW50IHN0bXQgPSBkYkNvbm5lY3Rpb24uY3JlYXRlU3RhdGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICBTdHJpbmcgcXVlcnkgPSAKKyAgICAgICAgICAgICAgICAgIFN0cmluZyBxdWVyeSA9CiAgICAgICAgICAgICAgICAgICAiU0VMRUNUIGlkIGZyb20gbWVzc2FnZXMgd2hlcmUgaWQgPSAnUVEnIjsKICAgICAgICAgICAgICAgICAgIFJlc3VsdFNldCByZXN1bHRzID0gc3RtdC5leGVjdXRlUXVlcnkocXVlcnkpOwogICAgICAgICAgICAgICAgICAgcmVzdWx0cy5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlFRIGhhcyBiYWxhbmNlICIgKyAKKyAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUVEgaGFzIGJhbGFuY2UgIiArCiAgICAgICAgICAgICAgICAgICByZXN1bHRzLmdldEludCgiYmFsYW5jZSIpICsgIiBkb2xsYXJzIik7CiAgICAgICAgICAgICAgICAgICByZXN1bHRzLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgICBzdG10LmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZWFkIG9uZSBhY2NvdW50XG4iKTsKIAogICAgICAgICAgICAgfSBlbHNlIGlmICgiV1JJVEUiLmVxdWFscyhvcCkpIHsKIAogICAgICAgICAgICAgICAgIGRlYnVnKCJJbnNlcnRpbmcgb25lIG1lc3NhZ2UgaW4gdGhlIGRhdGFiYXNlXG4iKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvTXlEQiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKICAgICAgICAgICAgICAgICAvL2RlYnVnKCJHZXQgSkRCQyBjb25uZWN0aW9uLCBhdXRvIHNpZ24gb24iKTsKICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBjcmVhdGVSb3coaWQsIGJvZHksIGRiQ29ubmVjdGlvbik7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGVkIG9uZSBtZXNzYWdlXG4iKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgfSBlbHNlIGlmICgiREVMRVRFIi5lcXVhbHMob3ApKSB7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZWJ1ZygiRGVsZXRpbmcgb25lIG1lc3NhZ2UgZnJvbSB0aGUgZGF0YWJhc2VcbiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvTXlEQiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKICAgICAgICAgICAgICAgICAvL2RlYnVnKCJHZXQgSkRCQyBjb25uZWN0aW9uLCBhdXRvIHNpZ24gb24iKTsKICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZWxldGVSb3coaWQsIGRiQ29ubmVjdGlvbik7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZWxldGVkIG9uZSBtZXNzYWdlXG4iKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoIkRFTEVURV9BTEwiLmVxdWFscyhvcCkpIHsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGRlYnVnKCJEZWxldGluZyBhbGwgbWVzc2FnZXMgZnJvbSB0aGUgZGF0YWJhc2VcbiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAgICAgICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvTXlEQiIpOwogICAgICAgICAgICAgICAgIC8vZGVidWcoIkxvb2tlZCB1cCBEYXRhc291cmNlXG4iKTsKQEAgLTE3OCw3ICsxNzgsNyBAQAogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvL3Vuc3VwcG9ydGVkIG9wCiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICB9ZmluYWxseXsKICAgICAgICAgICAgIHRyeXsKICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24uY2xvc2UoKTsKQEAgLTE4Nyw5ICsxODcsOSBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIAotICAgIHByaXZhdGUgdm9pZCBjcmVhdGVSb3coU3RyaW5nIGlkLCBTdHJpbmcgYm9keSwgCi0gICAgICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikgCisKKyAgICBwcml2YXRlIHZvaWQgY3JlYXRlUm93KFN0cmluZyBpZCwgU3RyaW5nIGJvZHksCisgICAgICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgLy8gQ3JlYXRlIHJvdyBmb3IgdGhpcyBtZXNzYWdlCkBAIC0yMDUsOSArMjA1LDkgQEAKICAgICAgICAgc3RtdC5jbG9zZSgpOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBkZWxldGVSb3coU3RyaW5nIGlkLCBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikgCisgICAgcHJpdmF0ZSB2b2lkIGRlbGV0ZVJvdyhTdHJpbmcgaWQsIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgLy8gRGVsZXRlIHJvdyBmb3IgdGhpcyBtZXNzYWdlCiAgICAgICAgIGRlYnVnKCJEZWxldGVSb3cgd2l0aCBJRCA9ICIgKyBpZCk7CiAgICAgICAgIFN0YXRlbWVudCBzdG10ID0gZGJDb25uZWN0aW9uLmNyZWF0ZVN0YXRlbWVudCgpOwpAQCAtMjIwLDkgKzIyMCw5IEBACiAgICAgICAgIHN0bXQuY2xvc2UoKTsKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgZGVsZXRlQWxsKGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKSAKKyAgICBwcml2YXRlIHZvaWQgZGVsZXRlQWxsKGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgLy8gRGVsZXRlIHJvdyBmb3IgdGhpcyBtZXNzYWdlCiAgICAgICAgIFN0YXRlbWVudCBzdG10ID0gZGJDb25uZWN0aW9uLmNyZWF0ZVN0YXRlbWVudCgpOwogICAgICAgICBTdHJpbmcgcXVlcnkgPSAiREVMRVRFIEZST00gbWVzc2FnZXMiOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9hcHAvc3JjL3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9hcHAvc3JjL3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhCmluZGV4IGJlMzdhNGEuLmExYzYyZjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvYXBwL3NyYy9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L2FwcC9zcmMvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEKQEAgLTQ0LDE3ICs0NCwxNyBAQAogCiAgICAgcHVibGljIFN0cmluZyBkb1Rlc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBJT0V4Y2VwdGlvbnsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGlzIGlzIHRvIHRlc3QgY29ubmVjdG9yIDEuNiAiKwotCSAgICAgICAgICAgICAiY29udHJhY3RzLiIpOworICAgICAgICAgICAgICAgICAiY29udHJhY3RzLiIpOwogCiAgICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7CiAKICAgICAgICAgU3RyaW5nIHJlcyA9ICJOT1QgUlVOIjsKLQlkZWJ1ZygiZG9UZXN0KCkgRU5URVIuLi4iKTsKKyAgICBkZWJ1ZygiZG9UZXN0KCkgRU5URVIuLi4iKTsKICAgICAgICAgYm9vbGVhbiBwYXNzID0gZmFsc2U7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXMgID0gIkFMTCBURVNUUyBQQVNTRUQiOwotCSAgICBpbnQgdGVzdENvdW50ID0gMTsKKyAgICAgICAgaW50IHRlc3RDb3VudCA9IDE7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiU3RhcnRpbmcgdGhlIHRlc3QiKTsKICAgICAgICAgICAgIG91dC5mbHVzaCgpOwogCkBAIC04MSwxOCArODEsMTggQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHJlcyA9ICJTT01FIFRFU1RTIEZBSUxFRCI7CiAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIklEIENvbm5lY3RvciAxLjYgdGVzdCAtICIgKyB0ZXN0Q291bnQgKyAiIEZBSUwiKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJURVNUOkZBSUwiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIklEIENvbm5lY3RvciAxLjYgdGVzdCAtICIgKyB0ZXN0Q291bnQgKyAiIFBBU1MiKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJURVNUOlBBU1MiKTsKLQkJICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIkVORF9PRl9FWEVDVVRJT04iKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgb3V0LnByaW50bG4oIkVORF9PRl9FWEVDVVRJT04iKTsKLSAgICAgICAgICAgIAorCiAKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkltcG9ydGluZyB0cmFuc2FjdGlvbiB0ZXN0IGZhaWxlZC4iKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvYnVpbGQucHJvcGVydGllcwppbmRleCAyMDdhNDg2Li4wODNiMjYyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii9jb25uZWN0b3IxNi9zZXJ2bGV0Ii8+CiA8cHJvcGVydHkgbmFtZT0iaHR0cDpob3N0IiB2YWx1ZT0ibG9jYWxob3N0Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvYnVpbGQueG1sCmluZGV4IGNjMWRlYzAuLmYwNDcwMTEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvYnVpbGQueG1sCkBAIC0xMzQsNyArMTM0LDcgQEAKICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdG9yZS1kZWZhdWx0LXNlY3VyaXR5LXBlcm1pc3Npb24iLz4KLSAKKwogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1wYXNzd29yZC1hbGlhcyI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0icGFzc3dvcmQuYWxpYXMubmFtZSIgdmFsdWU9IkFMSUFTX1RFU1RfUFJPUEVSVFkiLz4KICAgICAgICAgPC9hbnRjYWxsPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9yYS9NRVRBLUlORi9yYS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L3JhL01FVEEtSU5GL3JhLnhtbAppbmRleCBmMjJjYTNjLi5hZDk1MGM3IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L3JhL01FVEEtSU5GL3JhLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L3JhL01FVEEtSU5GL3JhLnhtbApAQCAtNTEsNyArNTEsNyBAQAogICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHktY29uZmlkZW50aWFsPgogICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgPGluYm91bmQtcmVzb3VyY2VhZGFwdGVyPgotICAgICAgICAgICAgPG1lc3NhZ2VhZGFwdGVyPiAgICAgICAgICAKKyAgICAgICAgICAgIDxtZXNzYWdlYWRhcHRlcj4KICAgICAgICAgICAgICAgICA8bWVzc2FnZWxpc3RlbmVyPgogICAgICAgICAgICAgICAgICAgICA8bWVzc2FnZWxpc3RlbmVyLXR5cGU+CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIKQEAgLTYyLDcgKzYyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIDwvYWN0aXZhdGlvbnNwZWMtY2xhc3M+CiAgICAgICAgICAgICAgICAgICAgIDwvYWN0aXZhdGlvbnNwZWM+CiAgICAgICAgICAgICAgICAgPC9tZXNzYWdlbGlzdGVuZXI+Ci0gICAgICAgICAgICA8L21lc3NhZ2VhZGFwdGVyPiAgICAgICAgICAKKyAgICAgICAgICAgIDwvbWVzc2FnZWFkYXB0ZXI+CiAgICAgICAgIDwvaW5ib3VuZC1yZXNvdXJjZWFkYXB0ZXI+CiAgICAgICAgIDxhZG1pbm9iamVjdD4KICAgICAgICAgICA8YWRtaW5vYmplY3QtaW50ZXJmYWNlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC9hZG1pbm9iamVjdC1pbnRlcmZhY2U+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L3JhL3NyYy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L3JhL3NyYy9idWlsZC54bWwKaW5kZXggZWQyOTg4OS4uODUyODgxOCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9yYS9zcmMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvcmEvc3JjL2J1aWxkLnhtbApAQCAtMzAsOCArMzAsOCBAQAogCiAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJpbml0LWNvbW1vbiIgPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJidWlsZC5jbGFzc2VzLmRpciIgdmFsdWU9ImNsYXNzZXMiIC8+Ci0JPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNvbm5lY3RvciIgLz4KKyAgICA8cGFyYW0gbmFtZT0iYnVpbGQuY2xhc3Nlcy5kaXIiIHZhbHVlPSJjbGFzc2VzIiAvPgorICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjb25uZWN0b3IiIC8+CiAgICAgPC9hbnRjYWxsPgogICAgIDxqYXIgamFyZmlsZT0iLi4vZ2VuZXJpYy1yYS5qYXIiIGJhc2VkaXI9ImNsYXNzZXMiCiAgICAgICAgICBpbmNsdWRlcz0iY29ubmVjdG9yLyouY2xhc3MiIC8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhCmluZGV4IDU1NTMzZDQuLmY1OWIyYjMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgQ29udHJvbHMgewogICAgIHB1YmxpYyBzdGF0aWMgT2JqZWN0IHJlYWR5TG9jayA9IG5ldyBPYmplY3QoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQppbmRleCA2NTgyMzNlLi5kNzNjODYyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgRGVsaXZlcnlXb3JrIGltcGxlbWVudHMgV29yayB7CiAKQEAgLTM2LDcgKzM2LDcgQEAKICAgICBwcml2YXRlIFN0cmluZyBvcDsKICAgICBwcml2YXRlIGJvb2xlYW4ga2VlcENvdW50OwogICAgIHByaXZhdGUgc3RhdGljIGludCBjb3VudGVyID0gMDsKLSAgICAKKwogICAgIHB1YmxpYyBEZWxpdmVyeVdvcmsoTWVzc2FnZUVuZHBvaW50IGVwLCBpbnQgbnVtT2ZNZXNzYWdlcywgU3RyaW5nIG9wKSB7CiAgICAgICAgIHRoaXMuZXAgPSBlcDsKICAgICAgICAgdGhpcy5udW0gPSBudW1PZk1lc3NhZ2VzOwpAQCAtNDQsNyArNDQsNyBAQAogICAgICAgICB0aGlzLmtlZXBDb3VudCA9IGZhbHNlOwogICAgIH0KIAotICAgIHB1YmxpYyBEZWxpdmVyeVdvcmsoTWVzc2FnZUVuZHBvaW50IGVwLCBpbnQgbnVtT2ZNZXNzYWdlcywgCisgICAgcHVibGljIERlbGl2ZXJ5V29yayhNZXNzYWdlRW5kcG9pbnQgZXAsIGludCBudW1PZk1lc3NhZ2VzLAogICAgICAgICAgICAgU3RyaW5nIG9wLCBib29sZWFuIGtlZXBDb3VudCkgewogICAgICAgICB0aGlzLmVwID0gZXA7CiAgICAgICAgIHRoaXMubnVtID0gbnVtT2ZNZXNzYWdlczsKQEAgLTU1LDcgKzU1LDcgQEAKICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CiAKICAgICAgICAgZGVidWcoIkVOVEVSLi4uIik7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAvL01ldGhvZCBvbk1lc3NhZ2UgPSBnZXRPbk1lc3NhZ2VNZXRob2QoKTsKICAgICAgICAgICAgIC8vZXAuYmVmb3JlRGVsaXZlcnkob25NZXNzYWdlKTsKQEAgLTc4LDExICs3OCwxMSBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvL2VwLmFmdGVyRGVsaXZlcnkoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIkxFQVZFLi4uIik7CiAgICAgfQogCkBAIC05MywxNCArOTMsMTQgQEAKICAgICB9CiAKICAgICBwcml2YXRlIE1ldGhvZCBnZXRPbk1lc3NhZ2VNZXRob2QoKSB7Ci0gICAgICAgIAorCiAgICAgICAgIE1ldGhvZCBvbk1lc3NhZ2VNZXRob2QgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ2xhc3MgbXNnTGlzdGVuZXJDbGFzcyA9IGNvbm5lY3Rvci5NeU1lc3NhZ2VMaXN0ZW5lci5jbGFzczsKICAgICAgICAgICAgIENsYXNzW10gcGFyYW1UeXBlcyA9IHsgamF2YS5sYW5nLlN0cmluZy5jbGFzcyB9OwotICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0gCisgICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPQogICAgICAgICAgICAgICAgIG1zZ0xpc3RlbmVyQ2xhc3MuZ2V0TWV0aG9kKCJvbk1lc3NhZ2UiLCBwYXJhbVR5cGVzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEKaW5kZXggMTAwY2FjZS4uZmE5M2Y2MyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgICAgICAgICAgZmxhZ1RvU3RyaW5nKGZsYWdzKSk7CiAgICAgfQogCi0gICAgCisKICAgICBwdWJsaWMgdm9pZCBmb3JnZXQoWGlkIHhpZCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLmZvcmdldDogIiArIHhpZFRvU3RyaW5nKHhpZCkpOwogICAgIH0KQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLnByZXBhcmU6ICIgKyB4aWRUb1N0cmluZyh4aWQpKTsKICAgICAgICAgcmV0dXJuIFhBUmVzb3VyY2UuWEFfT0s7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFhpZFtdIHJlY292ZXIoaW50IGZsYWcpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5yZWNvdmVyOiAiICsgZmxhZ1RvU3RyaW5nKGZsYWcpKTsKICAgICAgICAgcmV0dXJuIG51bGw7CkBAIC02Niw3ICs2Niw3IEBACiAgICAgcHVibGljIGJvb2xlYW4gc2V0VHJhbnNhY3Rpb25UaW1lb3V0KGludCBzZWNvbmRzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc3RhcnQoWGlkIHhpZCwgaW50IGZsYWdzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2Uuc3RhcnQ6ICIgKyB4aWRUb1N0cmluZyh4aWQpICsgIiwiICsKICAgICAgICAgICAgICAgICBmbGFnVG9TdHJpbmcoZmxhZ3MpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvcmEvc3JjL2Nvbm5lY3Rvci9KU1IzMjJXb3JrLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L3JhL3NyYy9jb25uZWN0b3IvSlNSMzIyV29yay5qYXZhCmluZGV4IDUxMDdhYzEuLjAyMDNmNGEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvcmEvc3JjL2Nvbm5lY3Rvci9KU1IzMjJXb3JrLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9yYS9zcmMvY29ubmVjdG9yL0pTUjMyMldvcmsuamF2YQpAQCAtNDgsNiArNDgsNiBAQAogCiAgICAgcHVibGljIHZvaWQgcnVuKCl7CiAgICAgICAgIHN1cGVyLnJ1bigpOwotICAgICAgICAKKwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdC5qYXZhCmluZGV4IDJiMjhkNjIuLjhlN2JhYzIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YQpAQCAtNzMsMTEgKzczLDExIEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgaW5pdGlhbGl6ZSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXppbmcgdGhlIENvbnRyb2xzIHRvIGZhbHNlOiIrcmVzZXRDb250cm9sKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXppbmcgdGhlIENvbnRyb2xzIHRvIGZhbHNlOiIrcmVzZXRDb250cm9sKTsKICAgICAgICAgaWYgKHJlc2V0Q29udHJvbC5lcXVhbHMoIkJFR0lOTklORyIpKSB7CiAgICAgICAgICAgIENvbnRyb2xzLmRvbmU9ZmFsc2U7Ci0JICAgU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6ZWQgdGhlIENvbnRyb2xzIHRvIGZhbHNlIik7Ci0JfQorICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW015QWRtaW5PYmplY3RdIEluaXRpYWxpemVkIHRoZSBDb250cm9scyB0byBmYWxzZSIpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiBkb25lKCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9yYS9zcmMvY29ubmVjdG9yL015U2VjdXJpdHlDb250ZXh0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L3JhL3NyYy9jb25uZWN0b3IvTXlTZWN1cml0eUNvbnRleHQuamF2YQppbmRleCAzMTc4YzFjLi5lMTkwNTFlIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L3JhL3NyYy9jb25uZWN0b3IvTXlTZWN1cml0eUNvbnRleHQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L3JhL3NyYy9jb25uZWN0b3IvTXlTZWN1cml0eUNvbnRleHQuamF2YQpAQCAtNjIsNyArNjIsNyBAQAogICAgICAgICBDYWxsZXJQcmluY2lwYWxDYWxsYmFjayBjcGMgPSBuZXcgQ2FsbGVyUHJpbmNpcGFsQ2FsbGJhY2soZXhlY1N1YmplY3QsIG5ldyBQcmluY2lwYWxJbXBsKHByaW5jaXBhbE5hbWUpKTsKICAgICAgICAgZGVidWcoInNldHRpbmcgY2FsbGVyIHByaW5jaXBhbCBjYWxsYmFjayB3aXRoIHByaW5jaXBhbCA6ICIgKyBwcmluY2lwYWxOYW1lKTsKICAgICAgICAgY2FsbGJhY2tzLmFkZChjcGMpOwotICAgICAgICAKKwogLyoKICAgICAgICAgR3JvdXBQcmluY2lwYWxDYWxsYmFjayBncGMgPSBuZXcgR3JvdXBQcmluY2lwYWxDYWxsYmFjayhleGVjU3ViamVjdCwgbnVsbCk7CiAgICAgICAgIGNhbGxiYWNrcy5hZGQoZ3BjKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEKaW5kZXggODE4MmVmNS4uM2ZjZTU0NCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEKQEAgLTI0LDkgKzI0LDkgQEAKICAqIHNvIHRoYXQgdGhlIGFwcCBzZXJ2ZXIgY2FuIGluc3RhbnRpYXRlIGFuZCBjb25maWd1cmUKICAqIGl0IGF0IHRoZSBydW50aW1lLgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCi1wdWJsaWMgY2xhc3MgU2ltcGxlQWN0aXZhdGlvblNwZWMgCitwdWJsaWMgY2xhc3MgU2ltcGxlQWN0aXZhdGlvblNwZWMKICAgICBpbXBsZW1lbnRzIEFjdGl2YXRpb25TcGVjLCBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7CiAKICAgICBwcml2YXRlIFN0cmluZyBkZXN0aW5hdGlvbk5hbWU7CkBAIC00Myw3ICs0Myw3IEBACiAgICAgcHVibGljIFN0cmluZyBnZXREZXN0aW5hdGlvbk5hbWUgKCkgewogICAgICAgICByZXR1cm4gdGhpcy5kZXN0aW5hdGlvbk5hbWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0RGVzdGluYXRpb25OYW1lIChTdHJpbmcgbmFtZSkgewogICAgICAgICBkZWJ1Zygic2V0RGVzdGluYXRpb25OYW1lKCkgY2FsbGVkLi4uIG5hbWUgPSAiICsgbmFtZSk7CiAgICAgICAgIHRoaXMuZGVzdGluYXRpb25OYW1lID0gbmFtZTsKQEAgLTUyLDcgKzUyLDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldERlc3RpbmF0aW9uVHlwZSgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZGVzdGluYXRpb25UeXBlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldERlc3RpbmF0aW9uVHlwZSAoU3RyaW5nIHR5cGUpIHsKICAgICAgICAgZGVidWcoInNldERlc3RpbmF0aW9uVHlwZSAoKSBjYWxsZWQuLi4gdHlwZSA9ICIgKyB0eXBlKTsKICAgICAgICAgdGhpcy5kZXN0aW5hdGlvblR5cGU9IHR5cGU7CkBAIC02MSw3ICs2MSw3IEBACiAgICAgcHVibGljIFN0cmluZyBnZXRUZXN0UHJvcCgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMudGVzdFByb3A7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0VGVzdFByb3AgKFN0cmluZyB0ZXN0UHJvcCkgewogICAgICAgICBkZWJ1Zygic2V0VGVzdFByb3AgKCkgY2FsbGVkLi4uIHRlc3RQcm9wID0gIiArIHRlc3RQcm9wKTsKICAgICAgICAgdGhpcy50ZXN0UHJvcCA9IHRlc3RQcm9wOwpAQCAtNzAsNyArNzAsNyBAQAogICAgIHB1YmxpYyBJbnRlZ2VyIGdldFRlc3RJbnRlZ2VyUHJvcCgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMudGVzdEludGVnZXJQcm9wOwogICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFRlc3RJbnRlZ2VyUHJvcCAoSW50ZWdlciB0ZXN0UHJvcDEpIHsKICAgICAgICAgZGVidWcoInNldFRlc3RJbnRlZ2VyUHJvcCAoKSBjYWxsZWQuLi4gdGVzdEludGVnZXJQcm9wID0gIiArIHRlc3RQcm9wMSk7CiAgICAgICAgIHRoaXMudGVzdEludGVnZXJQcm9wID0gdGVzdFByb3AxOwpAQCAtOTQsNyArOTQsNyBAQAogCiAgICAgICB9CiAKLSAgIH0gCisgICB9CiAKICAgICBwcml2YXRlIHZvaWQgZGVidWcgKFN0cmluZyBtZXNzYWdlKQogICAgIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbC5qYXZhCmluZGV4IGQwN2M0ZTkuLjA4Njc4NjIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YQpAQCAtODQsMTEgKzg0LDExIEBACiAgICAgICAgICAgICBzcGVjLnZhbGlkYXRlKCk7CiAgICAgICAgICAgICB3b3JrID0gbmV3IFdvcmtEaXNwYXRjaGVyKCJESVNQQVRDSEVSIiwgY3R4LCBmYWN0b3J5LCBzcGVjKTsKICAgICAgICAgICAgIHdtLnNjaGVkdWxlV29yayh3b3JrLCAzMCAqIDEwMDAsIG51bGwsIG51bGwpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8vVGVzdCBpZiBhIHJlc291cmNlIGRlZmluZWQgaW4gdGhlIGNvbXAncyBuYW1lc3BhY2UgaXMgYXZhaWxhYmxlCiAgICAgICAgICAgICBPYmplY3QgbyA9IChuZXcgSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJqYXZhOmNvbXAvZW52L015REIiKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKiBsb29rZWR1cCBpbiBSQSBlbmRwb2ludEFjdGl2YXRpb246IiArIG8pOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGRlYnVnKCJCLjAwMS4gU2NoZWR1bGVkIERpc3BhdGNoZXIiKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTEwNiw3ICsxMDYsNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJsb29rZWR1cCBpbiBSQSBlbmRwb2ludERlYWN0aXZhdGlvbjoiICsgbyk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCl7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKiogRXJyb3Igd2hpbGUgbG9va2luZyB1cCBpbiBjb21wb25lbnQgY29udGV4dCAiICsKLSAgICAgICAgICAgIAkJImluIGVuZHBvaW50RGVhY3RpdmF0aW9uIik7CisgICAgICAgICAgICAgICAgICAgICJpbiBlbmRwb2ludERlYWN0aXZhdGlvbiIpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihleCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEKaW5kZXggNTBhZjE4Ni4uN2ZkY2FmZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEKQEAgLTg2LDcgKzg2LDcgQEAKIAogICAgICAgICAgICAgICAgIGlmICghZmFjdG9yeS5pc0RlbGl2ZXJ5VHJhbnNhY3RlZChvbk1lc3NhZ2UpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vTWVzc2FnZUVuZHBvaW50IGVwID0gZmFjdG9yeS5jcmVhdGVFbmRwb2ludChudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgLy9EZWxpdmVyeVdvcmsgZCA9IG5ldyBEZWxpdmVyeVdvcmsoIk5PX1RYIiwgZXApOyAKKyAgICAgICAgICAgICAgICAgICAgLy9EZWxpdmVyeVdvcmsgZCA9IG5ldyBEZWxpdmVyeVdvcmsoIk5PX1RYIiwgZXApOwogICAgICAgICAgICAgICAgICAgICAvL3dtLmRvV29yayhkLCAwLCBudWxsLCBudWxsKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY29ubmVjdG9yMS42L3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEKaW5kZXggMThhOTcwZC4uYjJhOTA2YyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2Nvbm5lY3RvcjEuNi9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jb25uZWN0b3IxLjYvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YQpAQCAtMzUsOCArMzUsOCBAQAogICAgIHB1YmxpYyBpbnQgYnJhbmNoUXVhbGlmaWVyOwogICAgIHB1YmxpYyBpbnQgZ2xvYmFsVHhJRDsKIAotICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhHVFJJRFNJWkU9IDY0OyAKLSAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYQlFVQUxTSVpFPSA2NDsgCisgICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEdUUklEU0laRT0gNjQ7CisgICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEJRVUFMU0laRT0gNjQ7CiAKICAgICBwdWJsaWMgWElEKCkgewogICAgICAgICBpbnQgZm9vID0gSUQrKzsKQEAgLTU0LDEwICs1NCwxMCBAQAogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgICAgICAgICAgICAgICAgLy8gSXQgY2FuJ3QgYmUgZXF1YWwKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBvdGhlciA9IChYSUQpbzsgICAgICAgICAgICAgICAgICAgLy8gVGhlIG90aGVyIFhJRCwgbm93IHByb3Blcmx5IGNhc3QKLSAgICAgICAgCi0gICAgICAgIGlmICh0aGlzLmZvcm1hdElEID09IG90aGVyLmZvcm1hdElEIAorCisgICAgICAgIGlmICh0aGlzLmZvcm1hdElEID09IG90aGVyLmZvcm1hdElECiAgICAgICAgICAgICAgICAgJiYgdGhpcy5icmFuY2hRdWFsaWZpZXIgPT0gb3RoZXIuYnJhbmNoUXVhbGlmaWVyCiAgICAgICAgICAgICAgICAgJiYgdGhpcy5nbG9iYWxUeElEID09IG90aGVyLmdsb2JhbFR4SUQpIHsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtOTcsNyArOTcsNyBAQAogICAgICAgICAgICAgICAgICJmb3JtYXRJRCgiICAgICArIGZvcm1hdElEICAgICArICIpLCAiICsKICAgICAgICAgICAgICAgICAiYnJhbmNoUXVhbGlmaWVyICgiICsgYnJhbmNoUXVhbGlmaWVyICsgIiksICIgKwogICAgICAgICAgICAgICAgICJnbG9iYWxUeElEKCIgKyBnbG9iYWxUeElEICsgIil9Iik7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBzOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2N1c3RvbS1yZXNvdXJjZXMtZ2YtcmVzb3VyY2VzLW1vZHVsZS1zY29wZWQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jdXN0b20tcmVzb3VyY2VzLWdmLXJlc291cmNlcy1tb2R1bGUtc2NvcGVkL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNzZlZDIyZS4uNWFkMjQ3NiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2N1c3RvbS1yZXNvdXJjZXMtZ2YtcmVzb3VyY2VzLW1vZHVsZS1zY29wZWQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY3VzdG9tLXJlc291cmNlcy1nZi1yZXNvdXJjZXMtbW9kdWxlLXNjb3BlZC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOSArMTUsMTkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1ibXAtQ3VzdG9tUmVzb3VyY2VGYWN0b3JpZXMiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IjEyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY3VzdG9tLXJlc291cmNlcy1nZi1yZXNvdXJjZXMtbW9kdWxlLXNjb3BlZC9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY3VzdG9tLXJlc291cmNlcy1nZi1yZXNvdXJjZXMtbW9kdWxlLXNjb3BlZC9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKaW5kZXggOGYyZjY4NS4uNDM3MDRlNCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2N1c3RvbS1yZXNvdXJjZXMtZ2YtcmVzb3VyY2VzLW1vZHVsZS1zY29wZWQvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jdXN0b20tcmVzb3VyY2VzLWdmLXJlc291cmNlcy1tb2R1bGUtc2NvcGVkL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQpAQCAtMzAsMTMgKzMwLDEzIEBACiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKLSAJU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCk7CisgICAgIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOwogCi0Jc3RhdC5hZGREZXNjcmlwdGlvbih0ZXN0U3VpdGUpOworICAgIHN0YXQuYWRkRGVzY3JpcHRpb24odGVzdFN1aXRlKTsKIAogICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgT2JqZWN0IG9ialJlZiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlQk1QSG9tZSIpOwotCVNpbXBsZUJNUEhvbWUgc2ltcGxlQk1QSG9tZSA9IChTaW1wbGVCTVBIb21lKQorICAgIFNpbXBsZUJNUEhvbWUgc2ltcGxlQk1QSG9tZSA9IChTaW1wbGVCTVBIb21lKQogICAgIGphdmF4LnJtaS5Qb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqUmVmLCBTaW1wbGVCTVBIb21lLmNsYXNzKTsKIAogICAgIFNpbXBsZUJNUCBzaW1wbGVCTVAgPSBzaW1wbGVCTVBIb21lLmNyZWF0ZSgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2N1c3RvbS1yZXNvdXJjZXMtZ2YtcmVzb3VyY2VzLW1vZHVsZS1zY29wZWQvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jdXN0b20tcmVzb3VyY2VzLWdmLXJlc291cmNlcy1tb2R1bGUtc2NvcGVkL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggNGE5NjMzMC4uOTNmODc2MiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2N1c3RvbS1yZXNvdXJjZXMtZ2YtcmVzb3VyY2VzLW1vZHVsZS1zY29wZWQvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY3VzdG9tLXJlc291cmNlcy1nZi1yZXNvdXJjZXMtbW9kdWxlLXNjb3BlZC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC03MCw2ICs3MCw2IEBACiAgICAgICA8dHJhbnMtYXR0cmlidXRlPlJlcXVpcmVkPC90cmFucy1hdHRyaWJ1dGU+CiAgICAgPC9jb250YWluZXItdHJhbnNhY3Rpb24+CiAgIDwvYXNzZW1ibHktZGVzY3JpcHRvcj4KLSAgICAgIAorCiA8L2VqYi1qYXI+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jdXN0b20tcmVzb3VyY2VzLWdmLXJlc291cmNlcy1tb2R1bGUtc2NvcGVkL2Rlc2NyaXB0b3IvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvY3VzdG9tLXJlc291cmNlcy1nZi1yZXNvdXJjZXMtbW9kdWxlLXNjb3BlZC9kZXNjcmlwdG9yL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sCmluZGV4IDg4ZGMwYTcuLjMxMzQ3OTUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9jdXN0b20tcmVzb3VyY2VzLWdmLXJlc291cmNlcy1tb2R1bGUtc2NvcGVkL2Rlc2NyaXB0b3IvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2N1c3RvbS1yZXNvdXJjZXMtZ2YtcmVzb3VyY2VzLW1vZHVsZS1zY29wZWQvZGVzY3JpcHRvci9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbApAQCAtNTUsNCArNTUsNCBAQAogICAgICAgPHByb3BlcnR5IG5hbWU9Imhvc3QiIHZhbHVlPSJqYXZhLnN1bi5jb20iIC8+CiAgICAgICA8cHJvcGVydHkgbmFtZT0icHJvdG9jb2wiIHZhbHVlPSJodHRwIiAvPgogICAgIDwvY3VzdG9tLXJlc291cmNlPgotPC9yZXNvdXJjZXM+IAorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGF0YXNvdXJjZS1kZWZpbml0aW9uL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGF0YXNvdXJjZS1kZWZpbml0aW9uL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMWMwZTNjZC4uZjZjYmZhNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RhdGFzb3VyY2UtZGVmaW5pdGlvbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kYXRhc291cmNlLWRlZmluaXRpb24vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjMgKzE1LDIzIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJkYXRhc291cmNlLWRlZmluaXRpb24iLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGF0YXNvdXJjZS1kZWZpbml0aW9uL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kYXRhc291cmNlLWRlZmluaXRpb24vY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGRiMmJiOTcuLjQ3NjZhYzEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kYXRhc291cmNlLWRlZmluaXRpb24vY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kYXRhc291cmNlLWRlZmluaXRpb24vY2xpZW50L0NsaWVudC5qYXZhCkBAIC03Nyw3ICs3Nyw3IEBACiAgICAgICAgICAgICAgICAgLy9UaGUgb25seSB3YXkgdG8gY29uZmlybSB0aGUgZml4IGZvciBJVCA5MjkyIGlzIHRoYXQgYXBwY2xpZW50IGNvbnNvbGUKICAgICAgICAgICAgICAgICAvL3Nob3VsZCBub3QgaGF2ZSAiaW52YWxpZERlc2NyaXB0b3JGYWlsdXJlRXhjZXB0aW9uIiBwcmludGVkCiAgICAgICAgICAgICAgICAgLy9ubyBpc29sYXRpb24gbGV2ZWwgc3BlY2lmaWVkCi0JCUBEYXRhU291cmNlRGVmaW5pdGlvbihuYW1lID0gImphdmE6Y29tcC9lbnYvQXBwY2xpZW50X0RhdGFTb3VyY2UyIiwKKyAgICAgICAgQERhdGFTb3VyY2VEZWZpbml0aW9uKG5hbWUgPSAiamF2YTpjb21wL2Vudi9BcHBjbGllbnRfRGF0YVNvdXJjZTIiLAogICAgICAgICAgICAgICAgICAgICAgICAgbWluUG9vbFNpemUgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFBvb2xTaXplID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZSA9ICJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuQ2xpZW50WEFEYXRhU291cmNlIiwKQEAgLTIxMCw3ICsyMTAsNyBAQAogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBpZihleHBlY3RTdWNjZXNzKXsKLSAgICAgICAgICAgIAllLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0gZmluYWxseSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGF0YXNvdXJjZS1kZWZpbml0aW9uL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kYXRhc291cmNlLWRlZmluaXRpb24vZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sCmluZGV4IGU2ZjkwZjUuLmFiMDljYzIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kYXRhc291cmNlLWRlZmluaXRpb24vZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kYXRhc291cmNlLWRlZmluaXRpb24vZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sCkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgIDx2YWx1ZT47Y3JlYXRlPXRydWU8L3ZhbHVlPgogICAgIDwvcHJvcGVydHk+CiAgICAgPGxvZ2luLXRpbWVvdXQ+MDwvbG9naW4tdGltZW91dD4KLSAgICA8dHJhbnNhY3Rpb25hbD50cnVlPC90cmFuc2FjdGlvbmFsPiAgICAgICAgCisgICAgPHRyYW5zYWN0aW9uYWw+dHJ1ZTwvdHJhbnNhY3Rpb25hbD4KICAgICA8aXNvbGF0aW9uLWxldmVsPlRSQU5TQUNUSU9OX1JFUEVBVEFCTEVfUkVBRDwvaXNvbGF0aW9uLWxldmVsPgogICAgIDxpbml0aWFsLXBvb2wtc2l6ZT4tMTwvaW5pdGlhbC1wb29sLXNpemU+CiAgICAgPG1heC1wb29sLXNpemU+LTE8L21heC1wb29sLXNpemU+CkBAIC02Nyw3ICs2Nyw3IEBACiAgICAgICAgIDx2YWx1ZT47Y3JlYXRlPXRydWU8L3ZhbHVlPgogICAgIDwvcHJvcGVydHk+CiAgICAgPGxvZ2luLXRpbWVvdXQ+MDwvbG9naW4tdGltZW91dD4KLSAgICA8dHJhbnNhY3Rpb25hbD50cnVlPC90cmFuc2FjdGlvbmFsPiAgICAgICAgCisgICAgPHRyYW5zYWN0aW9uYWw+dHJ1ZTwvdHJhbnNhY3Rpb25hbD4KICAgICA8aXNvbGF0aW9uLWxldmVsPlRSQU5TQUNUSU9OX1JFUEVBVEFCTEVfUkVBRDwvaXNvbGF0aW9uLWxldmVsPgogICAgIDxpbml0aWFsLXBvb2wtc2l6ZT4tMTwvaW5pdGlhbC1wb29sLXNpemU+CiAgICAgPG1heC1wb29sLXNpemU+LTE8L21heC1wb29sLXNpemU+CkBAIC04OCw3ICs4OCw3IEBACiAgICAgICAgIDx2YWx1ZT47Y3JlYXRlPXRydWU8L3ZhbHVlPgogICAgIDwvcHJvcGVydHk+CiAgICAgPGxvZ2luLXRpbWVvdXQ+MDwvbG9naW4tdGltZW91dD4KLSAgICA8dHJhbnNhY3Rpb25hbD50cnVlPC90cmFuc2FjdGlvbmFsPiAgICAgICAgCisgICAgPHRyYW5zYWN0aW9uYWw+dHJ1ZTwvdHJhbnNhY3Rpb25hbD4KICAgICA8aXNvbGF0aW9uLWxldmVsPlRSQU5TQUNUSU9OX1JFUEVBVEFCTEVfUkVBRDwvaXNvbGF0aW9uLWxldmVsPgogICAgIDxpbml0aWFsLXBvb2wtc2l6ZT4tMTwvaW5pdGlhbC1wb29sLXNpemU+CiAgICAgPG1heC1wb29sLXNpemU+LTE8L21heC1wb29sLXNpemU+CkBAIC0xMTAsNyArMTEwLDcgQEAKICAgICAgICAgPHZhbHVlPjtjcmVhdGU9dHJ1ZTwvdmFsdWU+CiAgICAgPC9wcm9wZXJ0eT4KICAgICA8bG9naW4tdGltZW91dD4zMDA8L2xvZ2luLXRpbWVvdXQ+Ci0gICAgPHRyYW5zYWN0aW9uYWw+ZmFsc2U8L3RyYW5zYWN0aW9uYWw+ICAgIAorICAgIDx0cmFuc2FjdGlvbmFsPmZhbHNlPC90cmFuc2FjdGlvbmFsPgogICAgIDxpc29sYXRpb24tbGV2ZWw+VFJBTlNBQ1RJT05fUkVQRUFUQUJMRV9SRUFEPC9pc29sYXRpb24tbGV2ZWw+CiAgICAgPGluaXRpYWwtcG9vbC1zaXplPjE8L2luaXRpYWwtcG9vbC1zaXplPgogICAgIDxtYXgtcG9vbC1zaXplPjI8L21heC1wb29sLXNpemU+CkBAIC0xMzEsNyArMTMxLDcgQEAKICAgICAgICAgPHZhbHVlPjtjcmVhdGU9dHJ1ZTwvdmFsdWU+CiAgICAgPC9wcm9wZXJ0eT4KICAgICA8bG9naW4tdGltZW91dD4wPC9sb2dpbi10aW1lb3V0PgotICAgIDx0cmFuc2FjdGlvbmFsPnRydWU8L3RyYW5zYWN0aW9uYWw+ICAgIAorICAgIDx0cmFuc2FjdGlvbmFsPnRydWU8L3RyYW5zYWN0aW9uYWw+CiAgICAgPGlzb2xhdGlvbi1sZXZlbD5UUkFOU0FDVElPTl9SRVBFQVRBQkxFX1JFQUQ8L2lzb2xhdGlvbi1sZXZlbD4KICAgICA8aW5pdGlhbC1wb29sLXNpemU+LTE8L2luaXRpYWwtcG9vbC1zaXplPgogICAgIDxtYXgtcG9vbC1zaXplPi0xPC9tYXgtcG9vbC1zaXplPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RhdGFzb3VyY2UtZGVmaW5pdGlvbi9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGF0YXNvdXJjZS1kZWZpbml0aW9uL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCA2MjA2M2M1Li4xYzQ1MzViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGF0YXNvdXJjZS1kZWZpbml0aW9uL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGF0YXNvdXJjZS1kZWZpbml0aW9uL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtNDMsNyArNDMsNyBAQAogICAgICAgICAgPHZhbHVlPjtjcmVhdGU9dHJ1ZTwvdmFsdWU+CiAgICAgICAgPC9wcm9wZXJ0eT4KICAgICAgPC9kYXRhLXNvdXJjZT4KLSAgICAgCisKICAgICAgPGRhdGEtc291cmNlPgogICAgICAgIDxuYW1lPmphdmE6Y29tcC9lbnYvU2VydmxldF9ERF9EYXRhU291cmNlPC9uYW1lPgogICAgICAgIDxjbGFzcy1uYW1lPm9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnREYXRhU291cmNlPC9jbGFzcy1uYW1lPgpAQCAtNTgsNiArNTgsNiBAQAogICAgICAgIDwvcHJvcGVydHk+CiAgICAgIDwvZGF0YS1zb3VyY2U+CiAKLSAgICAKKwogPC93ZWItYXBwPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGF0YXNvdXJjZS1kZWZpbml0aW9uL2VqYi9IZWxsb0VKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RhdGFzb3VyY2UtZGVmaW5pdGlvbi9lamIvSGVsbG9FSkIuamF2YQppbmRleCA5YWRiOWEyLi45Yzc1M2Y5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGF0YXNvdXJjZS1kZWZpbml0aW9uL2VqYi9IZWxsb0VKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kYXRhc291cmNlLWRlZmluaXRpb24vZWpiL0hlbGxvRUpCLmphdmEKQEAgLTM0LDEzICszNCwxMyBAQAogICAgICAgICB2YWx1ZSA9IHsKICAgICAgICAgICAgICAgICAvL3B1cmUgYW5ub3RhdGlvbiB0aGF0IGhhcyB1cmwgYW5kIG5vIHN0YW5kYXJkIHByb3BlcnRpZXMKICAgICAgICAgICAgICAgICAvL3Rlc3QtY2FzZSBmb3IgaXNzdWUtMTQ5MTgKLQkJQERhdGFTb3VyY2VEZWZpbml0aW9uKG5hbWU9ImphdmE6YXBwL2pkYmMvYXBwZHNfZHJpdmVyIiwKLSAgICAgICAJIAkJY2xhc3NOYW1lPSJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuQ2xpZW50RHJpdmVyIiwKLSAgICAgICAgCQl1c2VyPSJkYnVzZXIiLAotICAgICAgICAJCXBhc3N3b3JkPSJkYnBhc3N3b3JkIiwKLSAgICAgICAgCQl0cmFuc2FjdGlvbmFsPWZhbHNlLAotICAgICAgICAJCXVybD0iamRiYzpkZXJieTovL2xvY2FsaG9zdDoxNTI3L3Rlc3RkYjtjcmVhdGU9dHJ1ZSIKLQkJKSwKKyAgICAgICAgQERhdGFTb3VyY2VEZWZpbml0aW9uKG5hbWU9ImphdmE6YXBwL2pkYmMvYXBwZHNfZHJpdmVyIiwKKyAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPSJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuQ2xpZW50RHJpdmVyIiwKKyAgICAgICAgICAgICAgICB1c2VyPSJkYnVzZXIiLAorICAgICAgICAgICAgICAgIHBhc3N3b3JkPSJkYnBhc3N3b3JkIiwKKyAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbmFsPWZhbHNlLAorICAgICAgICAgICAgICAgIHVybD0iamRiYzpkZXJieTovL2xvY2FsaG9zdDoxNTI3L3Rlc3RkYjtjcmVhdGU9dHJ1ZSIKKyAgICAgICAgKSwKIAogICAgICAgICAgICAgICAgIEBEYXRhU291cmNlRGVmaW5pdGlvbihuYW1lID0gImphdmE6Z2xvYmFsL2Vudi9IZWxsb0VKQl9EYXRhU291cmNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZSA9ICJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuRW1iZWRkZWRYQURhdGFTb3VyY2UiLApAQCAtNzMsMTMgKzczLDEzIEBACiAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAvLyBhbm5vdGF0aW9uICsgREQgd2hlcmUgVVJMIHNwZWNpZmllZCBpbiBhbm5vdGF0aW9uIHdpbnMKICAgICAgICAgICAgICAgICAvL3Rlc3QtY2FzZSBmb3IgaXNzdWUtMTQ5MTgKLQkJQERhdGFTb3VyY2VEZWZpbml0aW9uKG5hbWU9ImphdmE6bW9kdWxlL2Vudi9IZWxsb0VKQl9EYXRhU291cmNlX2RyaXZlciIsCi0gICAgICAgIAkJY2xhc3NOYW1lPSJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuQ2xpZW50RHJpdmVyIiwKLSAgICAgICAgCQl1c2VyPSJkYnVzZXIiLAotICAgICAgICAJCXBhc3N3b3JkPSJkYnBhc3N3b3JkIiwKLSAgICAgICAgCQl0cmFuc2FjdGlvbmFsPWZhbHNlLAotICAgICAgICAJCXVybD0iamRiYzpkZXJieTovL2xvY2FsaG9zdDoxNTI3L3Rlc3RkYjtjcmVhdGU9dHJ1ZSIKLQkJKQorICAgICAgICBARGF0YVNvdXJjZURlZmluaXRpb24obmFtZT0iamF2YTptb2R1bGUvZW52L0hlbGxvRUpCX0RhdGFTb3VyY2VfZHJpdmVyIiwKKyAgICAgICAgICAgICAgICBjbGFzc05hbWU9Im9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnREcml2ZXIiLAorICAgICAgICAgICAgICAgIHVzZXI9ImRidXNlciIsCisgICAgICAgICAgICAgICAgcGFzc3dvcmQ9ImRicGFzc3dvcmQiLAorICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uYWw9ZmFsc2UsCisgICAgICAgICAgICAgICAgdXJsPSJqZGJjOmRlcmJ5Oi8vbG9jYWxob3N0OjE1MjcvdGVzdGRiO2NyZWF0ZT10cnVlIgorICAgICAgICApCiAgICAgICAgIH0KICkKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RhdGFzb3VyY2UtZGVmaW5pdGlvbi9lamIvSGVsbG9TdGF0ZWZ1bEVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RhdGFzb3VyY2UtZGVmaW5pdGlvbi9lamIvSGVsbG9TdGF0ZWZ1bEVKQi5qYXZhCmluZGV4IGRiMzBkMTIuLjA2OGFlNWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kYXRhc291cmNlLWRlZmluaXRpb24vZWpiL0hlbGxvU3RhdGVmdWxFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGF0YXNvdXJjZS1kZWZpbml0aW9uL2VqYi9IZWxsb1N0YXRlZnVsRUpCLmphdmEKQEAgLTYyLDcgKzYyLDcgQEAKICAgICAgICAgICAgICAgICApLAogCiAgICAgICAgICAgICAgICAgLy8gb25seSB1c2VyIHNob3VsZCBiZSBjb25zaWRlcmVkLgotICAgICAgICAgICAgICAgIC8vIGluY29ycmVjdCB2YWx1ZXMgZm9yIDogY2xhc3NOYW1lLCBwb3J0TnVtYmVyLCB1cmwsIHByb3BlcnRpZXMgd2hpY2ggc2hvdWxkIGJlIGlnbm9yZWQgCisgICAgICAgICAgICAgICAgLy8gaW5jb3JyZWN0IHZhbHVlcyBmb3IgOiBjbGFzc05hbWUsIHBvcnROdW1iZXIsIHVybCwgcHJvcGVydGllcyB3aGljaCBzaG91bGQgYmUgaWdub3JlZAogICAgICAgICAgICAgICAgIEBEYXRhU291cmNlRGVmaW5pdGlvbihuYW1lID0gImphdmE6Z2xvYmFsL2Vudi9IZWxsb1N0YXRlZnVsRUpCX0REX0RhdGFTb3VyY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgbWluUG9vbFNpemUgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFBvb2xTaXplID0gMCwKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvYXBwL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvYXBwL2J1aWxkLnhtbAppbmRleCAxMjQ5ZTA5Li41MjBiZjUxIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlLXN0YW5kYWxvbmUtcmFyL2FwcC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS1zdGFuZGFsb25lLXJhci9hcHAvYnVpbGQueG1sCkBAIC0zNiw4ICszNiw4IEBACiAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhciIvPgogIDwhLS0KICAgIDxhbnRjYWxsIHRhcmdldD0iZWFyLWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJnZW5lcmljLWVtYmVkZGVkIi8+Ci0JPHBhcmFtIG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9Ik1FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIvPgorICAgIDxwYXJhbSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iZ2VuZXJpYy1lbWJlZGRlZCIvPgorICAgIDxwYXJhbSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJNRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiLz4KICAgIDwvYW50Y2FsbD4KICAtLT4KICAgPC90YXJnZXQ+CkBAIC01NSw4ICs1NSw4IEBACiAgICAgICAgPC9maWxlc2V0PgogICAgICAgIDxmaWxlc2V0IGRpcj0iLi4vcmEiPgogICAgICAgICAgICA8IS0tICA8aW5jbHVkZSBuYW1lPSIqLnJhciIvPiAtLT4KLQkgICA8IS0tPGluY2x1ZGUgbmFtZT0ic2l2YWpkYmNyYS5yYXIiLz4tLT4KLQkgICA8aW5jbHVkZSBuYW1lPSJnZW5lcmljLXJhLnJhciIvPgorICAgICAgIDwhLS08aW5jbHVkZSBuYW1lPSJzaXZhamRiY3JhLnJhciIvPi0tPgorICAgICAgIDxpbmNsdWRlIG5hbWU9ImdlbmVyaWMtcmEucmFyIi8+CiAgICAgICAgPC9maWxlc2V0PgogICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuQVBTX0hPTUV9L2xpYiI+CiAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InJlcG9ydGVyLmphciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS1zdGFuZGFsb25lLXJhci9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlLXN0YW5kYWxvbmUtcmFyL2FwcC9zcmMvYnVpbGQucHJvcGVydGllcwppbmRleCBjY2YyNDMzLi4xNTA1MTUwIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlLXN0YW5kYWxvbmUtcmFyL2FwcC9zcmMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlLXN0YW5kYWxvbmUtcmFyL2FwcC9zcmMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiBlamItamFyLnhtbD1NRVRBLUlORi9lamItamFyLnhtbAogc3VuLWVqYi1qYXIueG1sPU1FVEEtSU5GL3N1bi1lamItamFyLnhtbApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS1zdGFuZGFsb25lLXJhci9hcHAvc3JjL21kYi9NeU1lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlLXN0YW5kYWxvbmUtcmFyL2FwcC9zcmMvbWRiL015TWVzc2FnZUJlYW4uamF2YQppbmRleCAwZmM1N2Q2Li5jYzJiMzcwIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlLXN0YW5kYWxvbmUtcmFyL2FwcC9zcmMvbWRiL015TWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlLXN0YW5kYWxvbmUtcmFyL2FwcC9zcmMvbWRiL015TWVzc2FnZUJlYW4uamF2YQpAQCAtMTIxLDE3ICsxMjEsMTcgQEAKICAgICAgICAgICAgICAgICAgIGRlYnVnKCJMb29rZWQgdXAgRGF0YXNvdXJjZVxuIik7CiAgICAgICAgICAgICAgICAgICBkZWJ1ZygiR2V0IEpEQkMgY29ubmVjdGlvbiwgYXV0byBzaWduIG9uIik7CiAgICAgICAgICAgICAgICAgICBkYkNvbm5lY3Rpb24gPSBkcy5nZXRDb25uZWN0aW9uKCJkYnVzZXIiLCJkYnBhc3N3b3JkIik7Ci0gICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgU3RhdGVtZW50IHN0bXQgPSBkYkNvbm5lY3Rpb24uY3JlYXRlU3RhdGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICBTdHJpbmcgcXVlcnkgPSAKKyAgICAgICAgICAgICAgICAgIFN0cmluZyBxdWVyeSA9CiAgICAgICAgICAgICAgICAgICAiU0VMRUNUIGlkIGZyb20gbWVzc2FnZXMgd2hlcmUgaWQgPSAnUVEnIjsKICAgICAgICAgICAgICAgICAgIFJlc3VsdFNldCByZXN1bHRzID0gc3RtdC5leGVjdXRlUXVlcnkocXVlcnkpOwogICAgICAgICAgICAgICAgICAgcmVzdWx0cy5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlFRIGhhcyBiYWxhbmNlICIgKyAKKyAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUVEgaGFzIGJhbGFuY2UgIiArCiAgICAgICAgICAgICAgICAgICByZXN1bHRzLmdldEludCgiYmFsYW5jZSIpICsgIiBkb2xsYXJzIik7CiAgICAgICAgICAgICAgICAgICByZXN1bHRzLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgICBzdG10LmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZWFkIG9uZSBhY2NvdW50XG4iKTsKICAgICAgICAgICAgICAgICAqLwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlLXN0YW5kYWxvbmUtcmFyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlLXN0YW5kYWxvbmUtcmFyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOTQ1MGQwZC4uNTYzNTQzOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS1zdGFuZGFsb25lLXJhci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvZGVmYXVsdFJlc291cmNlL3NlcnZsZXQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJodHRwOmhvc3QiIHZhbHVlPSJsb2NhbGhvc3QiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS1zdGFuZGFsb25lLXJhci9idWlsZC54bWwKaW5kZXggNWIwZDNkZC4uYzRiYTJkNiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS1zdGFuZGFsb25lLXJhci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS1zdGFuZGFsb25lLXJhci9idWlsZC54bWwKQEAgLTUyLDcgKzUyLDcgQEAKIDwhLS0KICAgPHRhcmdldCBuYW1lPSJydW50ZXN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0iYXBwbmFtZSIgdmFsdWU9ImdlbmVyaWMtZW1iZWRkZWQiIC8+CisgICAgPHBhcmFtIG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJnZW5lcmljLWVtYmVkZGVkIiAvPgogICAgIDwvYW50Y2FsbD4KICAgPC90YXJnZXQ+CiAtLT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvcmEvTUVUQS1JTkYvcmEueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS1zdGFuZGFsb25lLXJhci9yYS9NRVRBLUlORi9yYS54bWwKaW5kZXggMmNhMmViYy4uMjFkZWI5MyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS1zdGFuZGFsb25lLXJhci9yYS9NRVRBLUlORi9yYS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS1zdGFuZGFsb25lLXJhci9yYS9NRVRBLUlORi9yYS54bWwKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgPGluYm91bmQtcmVzb3VyY2VhZGFwdGVyPgotICAgICAgICAgICAgPG1lc3NhZ2VhZGFwdGVyPiAgICAgICAgICAKKyAgICAgICAgICAgIDxtZXNzYWdlYWRhcHRlcj4KICAgICAgICAgICAgICAgICA8bWVzc2FnZWxpc3RlbmVyPgogICAgICAgICAgICAgICAgICAgICA8bWVzc2FnZWxpc3RlbmVyLXR5cGU+CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIKQEAgLTU2LDcgKzU2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIDwvYWN0aXZhdGlvbnNwZWMtY2xhc3M+CiAgICAgICAgICAgICAgICAgICAgIDwvYWN0aXZhdGlvbnNwZWM+CiAgICAgICAgICAgICAgICAgPC9tZXNzYWdlbGlzdGVuZXI+Ci0gICAgICAgICAgICA8L21lc3NhZ2VhZGFwdGVyPiAgICAgICAgICAKKyAgICAgICAgICAgIDwvbWVzc2FnZWFkYXB0ZXI+CiAgICAgICAgIDwvaW5ib3VuZC1yZXNvdXJjZWFkYXB0ZXI+CiAgICAgICAgIDxhZG1pbm9iamVjdD4KICAgICAgICAgICA8YWRtaW5vYmplY3QtaW50ZXJmYWNlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC9hZG1pbm9iamVjdC1pbnRlcmZhY2U+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlLXN0YW5kYWxvbmUtcmFyL3JhL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvcmEvYnVpbGQueG1sCmluZGV4IDk2MTQ2ZmYuLjQ2ZWM3YzQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvcmEvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvcmEvYnVpbGQueG1sCkBAIC0zNSw3ICszNSw3IEBACiAKICAgICA8amFyIGphcmZpbGU9ImdlbmVyaWMtcmEucmFyIiBiYXNlZGlyPSIuIgogICAgICAgICAgaW5jbHVkZXM9ImdlbmVyaWMtcmEuamFyLCBNRVRBLUlORi9yYS54bWwiIC8+Ci0JIDxlY2hvIG1lc3NhZ2U9Imluc2lkZSBhbGwgb2YgcmEgYnVpbGQueG1sIj48L2VjaG8+CisgICAgIDxlY2hvIG1lc3NhZ2U9Imluc2lkZSBhbGwgb2YgcmEgYnVpbGQueG1sIj48L2VjaG8+CiAgIDwvdGFyZ2V0PgogPCEtLSBAU2l2YSBUaGlzIGRlcGxveS91bmRlcGxveSB0YXJnZXQgaXMgbmV2ZXIgY2FsbGVkIGFzIGl0IGlzIGFuIGVtYmVkZGVkIFJBIC0tPgogICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS1zdGFuZGFsb25lLXJhci9yYS9zcmMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS1zdGFuZGFsb25lLXJhci9yYS9zcmMvYnVpbGQueG1sCmluZGV4IGZmOGJjYzIuLjg0OTZmNjAgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvcmEvc3JjL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlLXN0YW5kYWxvbmUtcmFyL3JhL3NyYy9idWlsZC54bWwKQEAgLTMwLDggKzMwLDggQEAKIAogICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iaW5pdC1jb21tb24iID4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0iYnVpbGQuY2xhc3Nlcy5kaXIiIHZhbHVlPSJjbGFzc2VzIiAvPgotCTxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjb25uZWN0b3IiIC8+CisgICAgPHBhcmFtIG5hbWU9ImJ1aWxkLmNsYXNzZXMuZGlyIiB2YWx1ZT0iY2xhc3NlcyIgLz4KKyAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY29ubmVjdG9yIiAvPgogICAgIDwvYW50Y2FsbD4KICAgICA8amFyIGphcmZpbGU9Ii4uL2dlbmVyaWMtcmEuamFyIiBiYXNlZGlyPSJjbGFzc2VzIgogICAgICAgICAgaW5jbHVkZXM9ImNvbm5lY3Rvci8qLmNsYXNzIiAvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS1zdGFuZGFsb25lLXJhci9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlLXN0YW5kYWxvbmUtcmFyL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YQppbmRleCA1NTUzM2Q0Li5mNTliMmIzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlLXN0YW5kYWxvbmUtcmFyL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlLXN0YW5kYWxvbmUtcmFyL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YQpAQCAtMTgsNyArMTgsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIENvbnRyb2xzIHsKICAgICBwdWJsaWMgc3RhdGljIE9iamVjdCByZWFkeUxvY2sgPSBuZXcgT2JqZWN0KCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlLXN0YW5kYWxvbmUtcmFyL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlLXN0YW5kYWxvbmUtcmFyL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEKaW5kZXggNjU4MjMzZS4uZDczYzg2MiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS1zdGFuZGFsb25lLXJhci9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIERlbGl2ZXJ5V29yayBpbXBsZW1lbnRzIFdvcmsgewogCkBAIC0zNiw3ICszNiw3IEBACiAgICAgcHJpdmF0ZSBTdHJpbmcgb3A7CiAgICAgcHJpdmF0ZSBib29sZWFuIGtlZXBDb3VudDsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnRlciA9IDA7Ci0gICAgCisKICAgICBwdWJsaWMgRGVsaXZlcnlXb3JrKE1lc3NhZ2VFbmRwb2ludCBlcCwgaW50IG51bU9mTWVzc2FnZXMsIFN0cmluZyBvcCkgewogICAgICAgICB0aGlzLmVwID0gZXA7CiAgICAgICAgIHRoaXMubnVtID0gbnVtT2ZNZXNzYWdlczsKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICAgICAgdGhpcy5rZWVwQ291bnQgPSBmYWxzZTsKICAgICB9CiAKLSAgICBwdWJsaWMgRGVsaXZlcnlXb3JrKE1lc3NhZ2VFbmRwb2ludCBlcCwgaW50IG51bU9mTWVzc2FnZXMsIAorICAgIHB1YmxpYyBEZWxpdmVyeVdvcmsoTWVzc2FnZUVuZHBvaW50IGVwLCBpbnQgbnVtT2ZNZXNzYWdlcywKICAgICAgICAgICAgIFN0cmluZyBvcCwgYm9vbGVhbiBrZWVwQ291bnQpIHsKICAgICAgICAgdGhpcy5lcCA9IGVwOwogICAgICAgICB0aGlzLm51bSA9IG51bU9mTWVzc2FnZXM7CkBAIC01NSw3ICs1NSw3IEBACiAgICAgcHVibGljIHZvaWQgcnVuKCkgewogCiAgICAgICAgIGRlYnVnKCJFTlRFUi4uLiIpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgLy9NZXRob2Qgb25NZXNzYWdlID0gZ2V0T25NZXNzYWdlTWV0aG9kKCk7CiAgICAgICAgICAgICAvL2VwLmJlZm9yZURlbGl2ZXJ5KG9uTWVzc2FnZSk7CkBAIC03OCwxMSArNzgsMTEgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy9lcC5hZnRlckRlbGl2ZXJ5KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCJMRUFWRS4uLiIpOwogICAgIH0KIApAQCAtOTMsMTQgKzkzLDE0IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSBNZXRob2QgZ2V0T25NZXNzYWdlTWV0aG9kKCkgewotICAgICAgICAKKwogICAgICAgICBNZXRob2Qgb25NZXNzYWdlTWV0aG9kID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENsYXNzIG1zZ0xpc3RlbmVyQ2xhc3MgPSBjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIuY2xhc3M7CiAgICAgICAgICAgICBDbGFzc1tdIHBhcmFtVHlwZXMgPSB7IGphdmEubGFuZy5TdHJpbmcuY2xhc3MgfTsKLSAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9IAorICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0KICAgICAgICAgICAgICAgICBtc2dMaXN0ZW5lckNsYXNzLmdldE1ldGhvZCgib25NZXNzYWdlIiwgcGFyYW1UeXBlcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlLXN0YW5kYWxvbmUtcmFyL3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhCmluZGV4IDEwMGNhY2UuLmZhOTNmNjMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhCkBAIC0zNiw3ICszNiw3IEBACiAgICAgICAgICAgICAgIGZsYWdUb1N0cmluZyhmbGFncykpOwogICAgIH0KIAotICAgIAorCiAgICAgcHVibGljIHZvaWQgZm9yZ2V0KFhpZCB4aWQpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5mb3JnZXQ6ICIgKyB4aWRUb1N0cmluZyh4aWQpKTsKICAgICB9CkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5wcmVwYXJlOiAiICsgeGlkVG9TdHJpbmcoeGlkKSk7CiAgICAgICAgIHJldHVybiBYQVJlc291cmNlLlhBX09LOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBYaWRbXSByZWNvdmVyKGludCBmbGFnKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2UucmVjb3ZlcjogIiArIGZsYWdUb1N0cmluZyhmbGFnKSk7CiAgICAgICAgIHJldHVybiBudWxsOwpAQCAtNjYsNyArNjYsNyBAQAogICAgIHB1YmxpYyBib29sZWFuIHNldFRyYW5zYWN0aW9uVGltZW91dChpbnQgc2Vjb25kcykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHN0YXJ0KFhpZCB4aWQsIGludCBmbGFncykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLnN0YXJ0OiAiICsgeGlkVG9TdHJpbmcoeGlkKSArICIsIiArCiAgICAgICAgICAgICAgICAgZmxhZ1RvU3RyaW5nKGZsYWdzKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlLXN0YW5kYWxvbmUtcmFyL3JhL3NyYy9jb25uZWN0b3IvTWVzc2FnZXMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhCmluZGV4IGI1YjBmMDIuLjRjOWMwMTIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvcmEvc3JjL2Nvbm5lY3Rvci9NZXNzYWdlcy5qYXZhCkBAIC0yMSw3ICsyMSw3IEBACiAvKioKICAqIGNvbGxlY3Rpb24gb2YgbWVzc2FnZXMuCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBNZXNzYWdlcyB7CiAKQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICBTdHJpbmcgY29tbWFuZCAgPSBhcmdzWzBdOwogICAgICAgIFN0cmluZyBkZXN0TmFtZSA9IGFyZ3NbMV07CiAgICAgICAgU3RyaW5nIG1lc3NhZ2UgID0gYXJnc1syXTsKLSAgIAorCiAgICAgICAgaWYgKCEiYWRkIi5lcXVhbHMoY29tbWFuZCkpIHsKICAgICAgICAgICAgU3lzdGVtLmV4aXQoMSk7CiAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS1zdGFuZGFsb25lLXJhci9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEKaW5kZXggODYyZjlmZi4uZDE5OWQwMSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS1zdGFuZGFsb25lLXJhci9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlLXN0YW5kYWxvbmUtcmFyL3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdC5qYXZhCkBAIC0zOCwxMSArMzgsMTEgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBpbml0aWFsaXplKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiW015QWRtaW5PYmplY3RdIEluaXRpYWxpemluZyB0aGUgQ29udHJvbHMgdG8gZmFsc2U6IityZXNldENvbnRyb2wpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW015QWRtaW5PYmplY3RdIEluaXRpYWxpemluZyB0aGUgQ29udHJvbHMgdG8gZmFsc2U6IityZXNldENvbnRyb2wpOwogICAgICAgICBpZiAocmVzZXRDb250cm9sLmVxdWFscygiQkVHSU5OSU5HIikpIHsKICAgICAgICAgICAgQ29udHJvbHMuZG9uZT1mYWxzZTsKLQkgICBTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXplZCB0aGUgQ29udHJvbHMgdG8gZmFsc2UiKTsKLQl9CisgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6ZWQgdGhlIENvbnRyb2xzIHRvIGZhbHNlIik7CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIGRvbmUoKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlLXN0YW5kYWxvbmUtcmFyL3JhL3NyYy9jb25uZWN0b3IvTXlXb3JrLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlLXN0YW5kYWxvbmUtcmFyL3JhL3NyYy9jb25uZWN0b3IvTXlXb3JrLmphdmEKaW5kZXggMmVjZWM2My4uYTlhODg4MSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS1zdGFuZGFsb25lLXJhci9yYS9zcmMvY29ubmVjdG9yL015V29yay5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvcmEvc3JjL2Nvbm5lY3Rvci9NeVdvcmsuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIE15V29yayBpbXBsZW1lbnRzIFdvcmsgewogCkBAIC0zNSw3ICszNSw3IEBACiAgICAgcHJpdmF0ZSBib29sZWFuIHN0b3AgPSBmYWxzZTsKICAgICBwcml2YXRlIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZmFjdG9yeTsKICAgICBwcml2YXRlIFdvcmtNYW5hZ2VyIHdtOwotICAgIAorCiAgICAgcHVibGljIE15V29yaygKICAgICAgICAgICAgIFN0cmluZyBuYW1lLCBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGZhY3RvcnksIFdvcmtNYW5hZ2VyIHdtKSB7CiAgICAgICAgIHRoaXMuZmFjdG9yeSA9IGZhY3Rvcnk7CkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgICAgICB0cnkgewogCiAgICAgICAgICAgICAgICAgTWV0aG9kIG9uTWVzc2FnZSA9IGdldE9uTWVzc2FnZU1ldGhvZCgpOwotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaXNEZWxpdmVyeVRyYW5zYWN0ZWQgPSAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpc0RlbGl2ZXJ5VHJhbnNhY3RlZCA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3J5LmlzRGVsaXZlcnlUcmFuc2FjdGVkKG9uTWVzc2FnZSkpOwogCiAgICAgICAgICAgICAgICAgLyoKQEAgLTcwLDcgKzcwLDcgQEAKICAgICAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiTEVBVkUuLi4iKTsKICAgICB9CiAKQEAgLTg1LDE0ICs4NSwxNCBAQAogICAgIH0KIAogICAgIHB1YmxpYyBNZXRob2QgZ2V0T25NZXNzYWdlTWV0aG9kKCkgewotICAgICAgICAKKwogICAgICAgICBNZXRob2Qgb25NZXNzYWdlTWV0aG9kID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENsYXNzIG1zZ0xpc3RlbmVyQ2xhc3MgPSBjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIuY2xhc3M7CiAgICAgICAgICAgICBDbGFzc1tdIHBhcmFtVHlwZXMgPSB7IGphdmEubGFuZy5TdHJpbmcuY2xhc3MgfTsKLSAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9IAorICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0KICAgICAgICAgICAgICAgICBtc2dMaXN0ZW5lckNsYXNzLmdldE1ldGhvZCgib25NZXNzYWdlIiwgcGFyYW1UeXBlcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlLXN0YW5kYWxvbmUtcmFyL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhCmluZGV4IDk0NmQ5ODcuLmJiNzkxOGUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhCkBAIC0yNCw5ICsyNCw5IEBACiAgKiBzbyB0aGF0IHRoZSBhcHAgc2VydmVyIGNhbiBpbnN0YW50aWF0ZSBhbmQgY29uZmlndXJlCiAgKiBpdCBhdCB0aGUgcnVudGltZS4KICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwotcHVibGljIGNsYXNzIFNpbXBsZUFjdGl2YXRpb25TcGVjIAorcHVibGljIGNsYXNzIFNpbXBsZUFjdGl2YXRpb25TcGVjCiAgICAgaW1wbGVtZW50cyBBY3RpdmF0aW9uU3BlYywgamF2YS5pby5TZXJpYWxpemFibGUgewogCiAgICAgcHJpdmF0ZSBTdHJpbmcgZGVzdGluYXRpb25OYW1lOwpAQCAtNDIsNyArNDIsNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzdGluYXRpb25OYW1lICgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZGVzdGluYXRpb25OYW1lOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldERlc3RpbmF0aW9uTmFtZSAoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgZGVidWcoInNldERlc3RpbmF0aW9uTmFtZSgpIGNhbGxlZC4uLiBuYW1lID0gIiArIG5hbWUpOwogICAgICAgICB0aGlzLmRlc3RpbmF0aW9uTmFtZSA9IG5hbWU7CkBAIC01MSw3ICs1MSw3IEBACiAgICAgcHVibGljIFN0cmluZyBnZXREZXN0aW5hdGlvblR5cGUoKSB7CiAgICAgICAgIHJldHVybiB0aGlzLmRlc3RpbmF0aW9uVHlwZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXREZXN0aW5hdGlvblR5cGUgKFN0cmluZyB0eXBlKSB7CiAgICAgICAgIGRlYnVnKCJzZXREZXN0aW5hdGlvblR5cGUgKCkgY2FsbGVkLi4uIHR5cGUgPSAiICsgdHlwZSk7CiAgICAgICAgIHRoaXMuZGVzdGluYXRpb25UeXBlPSB0eXBlOwpAQCAtNjAsNyArNjAsNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGVzdFByb3AoKSB7CiAgICAgICAgIHJldHVybiB0aGlzLnRlc3RQcm9wOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFRlc3RQcm9wIChTdHJpbmcgdGVzdFByb3ApIHsKICAgICAgICAgZGVidWcoInNldFRlc3RQcm9wICgpIGNhbGxlZC4uLiB0ZXN0UHJvcCA9ICIgKyB0ZXN0UHJvcCk7CiAgICAgICAgIHRoaXMudGVzdFByb3AgPSB0ZXN0UHJvcDsKQEAgLTc2LDcgKzc2LDcgQEAKICAgICAgICAgdGhpcy5yZXNvdXJjZWFkYXB0ZXIgPSByYTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCB2YWxpZGF0ZSgpIHt9IAorICAgIHB1YmxpYyB2b2lkIHZhbGlkYXRlKCkge30KIAogICAgIHByaXZhdGUgdm9pZCBkZWJ1ZyAoU3RyaW5nIG1lc3NhZ2UpCiAgICAgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS1zdGFuZGFsb25lLXJhci9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEKaW5kZXggNTg4MTNiMy4uNGM1ZDk4ZiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS1zdGFuZGFsb25lLXJhci9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlLXN0YW5kYWxvbmUtcmFyL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbC5qYXZhCkBAIC00MCw5ICs0MCw5IEBACiAvKioKICAqIFRoaXMgaXMgYSBzYW1wbGUgcmVzb3VyY2UgYWRhcHRlcgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCi1wdWJsaWMgY2xhc3MgU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbCAKK3B1YmxpYyBjbGFzcyBTaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsCiBpbXBsZW1lbnRzIFJlc291cmNlQWRhcHRlciwgamF2YS5pby5TZXJpYWxpemFibGUgewogCiAgICAgcHJpdmF0ZSBCb290c3RyYXBDb250ZXh0IGN0eDsKQEAgLTU4LDcgKzU4LDcgQEAKIAogICAgIHB1YmxpYyB2b2lkCiAgICAgc3RhcnQoQm9vdHN0cmFwQ29udGV4dCBjdHgpIHRocm93cyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbnsKLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIjAwMS4gU2ltcGxlIFJBIHN0YXJ0Li4uIik7CiAKICAgICAgICAgdGhpcy5jdHggPSBjdHg7CkBAIC02OCwyMiArNjgsMjIgQEAKIAogICAgICAgICAvL3Rlc3RpbmcgY3JlYXQgdGltZXIKICAgICAgICAgVGltZXIgdGltZXIgPSBudWxsOwotCSAgdHJ5ewotCSAgICAgIHRpbWVyID0gY3R4LmNyZWF0ZVRpbWVyKCk7Ci0JICB9IGNhdGNoKFVuYXZhaWxhYmxlRXhjZXB0aW9uIHVlKSB7Ci0JICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFcnJvciIpOwotCSAgICAgIHRocm93IG5ldyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbigiRXJyb3IgZm9ybSBib290c3RyYXAiKTsKLQkgIH0KKyAgICAgIHRyeXsKKyAgICAgICAgICB0aW1lciA9IGN0eC5jcmVhdGVUaW1lcigpOworICAgICAgfSBjYXRjaChVbmF2YWlsYWJsZUV4Y2VwdGlvbiB1ZSkgeworICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXJyb3IiKTsKKyAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VBZGFwdGVySW50ZXJuYWxFeGNlcHRpb24oIkVycm9yIGZvcm0gYm9vdHN0cmFwIik7CisgICAgICB9CiAgICAgICAgIGRlYnVnKCIwMDQuIFNpbXBsZSBSQSBzdGFydC4uLiIpOwogCiAvKgogICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgCisKICAgICAgICAgICBYQVRlcm1pbmF0b3IgeGEgPSBjdHguZ2V0WEFUZXJtaW5hdG9yKCk7Ci0gICAgICAgICAgCisKICAgICAgICAgICBYaWQgeGlkMSA9IG5ldyBYSUQoKTsKICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBYSUQxID0gIiArIHhpZDEpOwotICAgICAgICAgIAorCiAgICAgICAgICAgRXhlY3V0aW9uQ29udGV4dCBlYyA9IG5ldyBFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgICAgICAgZWMuc2V0WGlkKHhpZDEpOwogICAgICAgICAgIGVjLnNldFRyYW5zYWN0aW9uVGltZW91dCg1KjEwMDApOyAvLzUgc2Vjb25kcwpAQCAtOTMsMTQgKzkzLDE0IEBACiAgICAgICAgICAgd20uZG9Xb3JrKG91dHcsIDEqMTAwMCwgZWMsIG51bGwpOwogICAgICAgICAgIHhhLmNvbW1pdCh4aWQxLCB0cnVlKTsKICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAKKwogICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIGV4ID0gIiArIGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgeGEucm9sbGJhY2soeGlkMSk7CiAgICAgICAgICAgfQotICAgICAgICAgIAorCiAgICAgICAgICAgWGlkIHhpZDIgPSBuZXcgWElEKCk7CiAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgWElEMiA9ICIgKyB4aWQyKTsKLSAgICAgICAgICAKKwogICAgICAgICAgIGVjID0gbmV3IEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICAgICAgICBlYy5zZXRYaWQoeGlkMik7CiAgICAgICAgICAgZWMuc2V0VHJhbnNhY3Rpb25UaW1lb3V0KDUqMTAwMCk7IC8vNSBzZWNvbmRzCkBAIC0xMTcsNyArMTE3LDcgQEAKICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICB9CiAKLSAgICAgICAgCisKICAgICAgICAgICBmb3IgKGludCBpID0gMCA7IGkgPCAzOyBpKyspIHsKICAgICAgICAgICBUZXN0V01Xb3JrIHcgPSBuZXcgVGVzdFdNV29yayhpLCBmYWxzZSk7CiAgICAgICAgICAgdHJ5IHsKQEAgLTEyNSw3ICsxMjUsNyBAQAogICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRkFJTDogQ0FVR0hUIGV4Y2VwdGlvbiA6IGkgPSAiICsgaSk7CiAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgfSAKKyAgICAgICAgICB9CiAgICAgICAgICAgfQogCiAgICAgICAgICAgZm9yIChpbnQgaSA9IDMgOyBpIDwgNjsgaSsrKSB7CkBAIC0yMDYsMTIgKzIwNiwxMiBAQAogCiAgICAgcHVibGljIHZvaWQKICAgICBlbmRwb2ludERlYWN0aXZhdGlvbiAoCi0gICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGVuZHBvaW50RmFjdG9yeSwgCisgICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGVuZHBvaW50RmFjdG9yeSwKICAgICAgICAgICAgIEFjdGl2YXRpb25TcGVjIHNwZWMpIHsKICAgICAgICAgZGVidWcgKCJlbmRwb2ludERlYWN0aXZhdGlvbiBjYWxsZWQuLi4iKTsKICAgICAgICAgKChXb3JrRGlzcGF0Y2hlcikgd29yaykuc3RvcCgpOwogICAgIH0KLSAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldFRlc3ROYW1lKCkgewogICAgICAgICByZXR1cm4gdGVzdE5hbWU7CiAgICAgfQpAQCAtMjI3LDcgKzIyNyw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsXSA9PT4gIiArIG1lc3NhZ2UpOwogICAgIH0KIAotICAgIHB1YmxpYyBYQVJlc291cmNlW10gZ2V0WEFSZXNvdXJjZXMoQWN0aXZhdGlvblNwZWNbXSBzcGVjcykgCisgICAgcHVibGljIFhBUmVzb3VyY2VbXSBnZXRYQVJlc291cmNlcyhBY3RpdmF0aW9uU3BlY1tdIHNwZWNzKQogICAgICAgICB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlLXN0YW5kYWxvbmUtcmFyL3JhL3NyYy9jb25uZWN0b3IvVGVzdFdNV29yay5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS1zdGFuZGFsb25lLXJhci9yYS9zcmMvY29ubmVjdG9yL1Rlc3RXTVdvcmsuamF2YQppbmRleCA3ZTU4NWEzLi45Y2QwNjYzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlLXN0YW5kYWxvbmUtcmFyL3JhL3NyYy9jb25uZWN0b3IvVGVzdFdNV29yay5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvcmEvc3JjL2Nvbm5lY3Rvci9UZXN0V01Xb3JrLmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBUZXN0V01Xb3JrIGltcGxlbWVudHMgV29yayB7CiAKQEAgLTQyLDggKzQyLDggQEAKICAgICBwdWJsaWMgVGVzdFdNV29yayhpbnQgaWQsIGJvb2xlYW4gaXNSb2d1ZSkgewogICAgICAgICB0aGlzKGlkLCBpc1JvZ3VlLCBmYWxzZSwgbnVsbCk7CiAgICAgfQotICAgIAotICAgIHB1YmxpYyBUZXN0V01Xb3JrKGludCBpZCwgYm9vbGVhbiBpc1JvZ3VlLCAKKworICAgIHB1YmxpYyBUZXN0V01Xb3JrKGludCBpZCwgYm9vbGVhbiBpc1JvZ3VlLAogICAgICAgICAgICAgYm9vbGVhbiBkb05lc3QsIEV4ZWN1dGlvbkNvbnRleHQgY3R4KSB7CiAgICAgICAgIHRoaXMuaWQgPSBpZDsKICAgICAgICAgdGhpcy5pc1JvZ3VlID0gaXNSb2d1ZTsKQEAgLTc3LDEwICs3NywxMCBAQAogICAgICAgICAgICAgfSBjYXRjaCAoV29ya0V4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgICAgIGlmIChleC5nZXRFcnJvckNvZGUoKS5lcXVhbHMoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV29ya0V4Y2VwdGlvbi5UWF9DT05DVVJSRU5UX1dPUktfRElTQUxMT1dFRCkpIHsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKyAKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQQVNTOiBDQVVHSFQgRVhQRUNURUQgPSAiICsgZXguZ2V0RXJyb3JDb2RlKCkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsgCisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRkFJTDogQ0FVR0hUIFVORVhQRUNURUQgPSAiICsgZXguZ2V0RXJyb3JDb2RlKCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTkyLDcgKzkyLDcgQEAKICAgICAgICAgICAgICAgICBlYy5zZXRUcmFuc2FjdGlvblRpbWVvdXQoNSoxMDAwKTsgLy81IHNlY29uZHMKICAgICAgICAgICAgICAgICB3bS5kb1dvcmsobmVzdGVkV29yaywgMSoxMDAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICJGQUlMOiBDQVVHSFQgVU5FWFBFQ1RFRCA9ICIgKyBleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlLXN0YW5kYWxvbmUtcmFyL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhCmluZGV4IDM0YTYwNGYuLmNkOThjNDUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhCkBAIC0zMyw3ICszMyw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgV29ya0Rpc3BhdGNoZXIgaW1wbGVtZW50cyBXb3JrIHsKIApAQCAtNDQsMTEgKzQ0LDExIEBACiAgICAgcHJpdmF0ZSBBY3RpdmF0aW9uU3BlYyBzcGVjOwogICAgIHByaXZhdGUgV29ya01hbmFnZXIgd207CiAgICAgcHJpdmF0ZSBYQVRlcm1pbmF0b3IgeGE7Ci0gICAgCisKICAgICBwdWJsaWMgV29ya0Rpc3BhdGNoZXIoCiAgICAgICAgICAgICBTdHJpbmcgaWQsCiAgICAgICAgICAgICBCb290c3RyYXBDb250ZXh0IGN0eCwKLSAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgZmFjdG9yeSwgCisgICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGZhY3RvcnksCiAgICAgICAgICAgICBBY3RpdmF0aW9uU3BlYyBzcGVjKSB7CiAgICAgICAgIHRoaXMuaWQgICAgICA9IGlkOwogICAgICAgICB0aGlzLmN0eCAgICAgPSBjdHg7CkBAIC02MSw3ICs2MSw3IEBACiAgICAgcHVibGljIHZvaWQgcnVuKCkgewogCiAgICAgICAgIGRlYnVnKCJFTlRFUi4uLiIpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgc3luY2hyb25pemVkIChDb250cm9scy5yZWFkeUxvY2spIHsKICAgICAgICAgICAgICAgICBkZWJ1ZygiV0FJVC4uLiIpOwpAQCAtODMsMjYgKzgzLDI2IEBACiAgICAgICAgICAgICB0cnkgewogCiAgICAgICAgICAgICAgICAgTWV0aG9kIG9uTWVzc2FnZSA9IGdldE9uTWVzc2FnZU1ldGhvZCgpOwotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaXNEZWxpdmVyeVRyYW5zYWN0ZWQgPSAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpc0RlbGl2ZXJ5VHJhbnNhY3RlZCA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yeS5pc0RlbGl2ZXJ5VHJhbnNhY3RlZChvbk1lc3NhZ2UpKTsKIAogICAgICAgICAgICAgICAgIGlmICghZmFjdG9yeS5pc0RlbGl2ZXJ5VHJhbnNhY3RlZChvbk1lc3NhZ2UpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vTWVzc2FnZUVuZHBvaW50IGVwID0gZmFjdG9yeS5jcmVhdGVFbmRwb2ludChudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgLy9EZWxpdmVyeVdvcmsgZCA9IG5ldyBEZWxpdmVyeVdvcmsoIk5PX1RYIiwgZXApOyAKKyAgICAgICAgICAgICAgICAgICAgLy9EZWxpdmVyeVdvcmsgZCA9IG5ldyBEZWxpdmVyeVdvcmsoIk5PX1RYIiwgZXApOwogICAgICAgICAgICAgICAgICAgICAvL3dtLmRvV29yayhkLCAwLCBudWxsLCBudWxsKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvL01lc3NhZ2VFbmRwb2ludCBlcCA9IGZhY3RvcnkuY3JlYXRlRW5kcG9pbnQobnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VFbmRwb2ludCBlcCA9IGZhY3RvcnkuY3JlYXRlRW5kcG9pbnQobmV3IEZha2VYQVJlc291cmNlKCkpOwogICAgICAgICAgICAgICAgICAgICBpbnQgbnVtT2ZNZXNzYWdlcyA9IDU7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vaW1wb3J0aW5nIHRyYW5zYWN0aW9uCiAKICAgICAgICAgICAgICAgICAgICAgLy93cml0ZS9jb21taXQKICAgICAgICAgICAgICAgICAgICAgRXhlY3V0aW9uQ29udGV4dCBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKIAotICAgICAgICAgICAgICAgICAgICBEZWxpdmVyeVdvcmsgdyA9IAorICAgICAgICAgICAgICAgICAgICBEZWxpdmVyeVdvcmsgdyA9CiAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRGVsaXZlcnlXb3JrKGVwLCBudW1PZk1lc3NhZ2VzLCAiV1JJVEUiKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgeGEuY29tbWl0KGVjLmdldFhpZCgpLCB0cnVlKTsKQEAgLTExMCw3ICsxMTAsNyBAQAogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiRE9ORSBXUklURSBUTyBEQiIpOwogICAgICAgICAgICAgICAgICAgICBDb250cm9scy5leHBlY3RlZFJlc3VsdHMgPSBudW1PZk1lc3NhZ2VzOwogICAgICAgICAgICAgICAgICAgICBub3RpZnlBbmRXYWl0KCk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vZGVsZXRlL3JvbGxiYWNrCiAgICAgICAgICAgICAgICAgICAgIGVjID0gc3RhcnRUeCgpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiU3RhcnQgVFggLSAiICsgZWMuZ2V0WGlkKCkpOwpAQCAtMTI2LDcgKzEyNiw3IEBACiAgICAgICAgICAgICAgICAgICAgIC8vZGVsZXRlL2NvbW1pdAogICAgICAgICAgICAgICAgICAgICBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgdyA9IG5ldyBEZWxpdmVyeVdvcmsoZXAsIG51bU9mTWVzc2FnZXMsICJERUxFVEUiKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgeGEuY29tbWl0KGVjLmdldFhpZCgpLCB0cnVlKTsKQEAgLTE1MCw3ICsxNTAsNyBAQAogICAgICAgICAgICAgICAgICAgICAvL2RlbGV0ZS9jb21taXQKICAgICAgICAgICAgICAgICAgICAgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIHcgPSBuZXcgRGVsaXZlcnlXb3JrKGVwLCBudW1PZk1lc3NhZ2VzLCAiREVMRVRFIik7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgdHJ1ZSk7CkBAIC0xOTUsNyArMTk1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKHcsIDAsIGVjLCBudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgaWYgKFhBUmVzb3VyY2UuWEFfT0sgPT0geGEucHJlcGFyZShlYy5nZXRYaWQoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgZmFsc2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlhBIFBSRVBBUkUvQ09NTUlULiBET05FIFdSSVRFIFRPIERCICIpOwpAQCAtMjA3LDE5ICsyMDcsMTkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xzLmV4cGVjdGVkUmVzdWx0cyA9IDM7CiAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZnlBbmRXYWl0KCk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy9kZWxldGUgYWxsLgogICAgICAgICAgICAgICAgICAgICBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgdyA9IG5ldyBEZWxpdmVyeVdvcmsoZXAsIDEsICJERUxFVEVfQUxMIik7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJET05FIERFTEVURSBBTEwgRlJPTSBEQiIpOwogICAgICAgICAgICAgICAgICAgICBDb250cm9scy5leHBlY3RlZFJlc3VsdHMgPSAwOwogICAgICAgICAgICAgICAgICAgICBub3RpZnlBbmRXYWl0KCk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTsKICAgICAgICAgICAgICAgICB9CiAKQEAgLTI0Myw3ICsyNDMsNyBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCJMRUFWRS4uLiIpOwogICAgIH0KIApAQCAtMjU4LDE0ICsyNTgsMTQgQEAKICAgICB9CiAKICAgICBwdWJsaWMgTWV0aG9kIGdldE9uTWVzc2FnZU1ldGhvZCgpIHsKLSAgICAgICAgCisKICAgICAgICAgTWV0aG9kIG9uTWVzc2FnZU1ldGhvZCA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDbGFzcyBtc2dMaXN0ZW5lckNsYXNzID0gY29ubmVjdG9yLk15TWVzc2FnZUxpc3RlbmVyLmNsYXNzOwogICAgICAgICAgICAgQ2xhc3NbXSBwYXJhbVR5cGVzID0geyBqYXZhLmxhbmcuU3RyaW5nLmNsYXNzIH07Ci0gICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPSAKKyAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9CiAgICAgICAgICAgICAgICAgbXNnTGlzdGVuZXJDbGFzcy5nZXRNZXRob2QoIm9uTWVzc2FnZSIsIHBhcmFtVHlwZXMpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQpAQCAtMjg4LDEzICsyODgsMTMgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIC8vU2xlZXAgZm9yIDUgc2Vjb25kcwogICAgICAgICAgICAgLy9UaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDUqMTAwMCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgc3luY2hyb25pemVkKENvbnRyb2xzLnJlYWR5TG9jaykgewogICAgICAgICAgICAgICAgIC8vTm90aWZ5IHRoZSBjbGllbnQgdG8gY2hlY2sgdGhlIHJlc3VsdHMKLSAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2subm90aWZ5KCk7IAotICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay5ub3RpZnkoKTsKKwogICAgICAgICAgICAgICAgIC8vV2FpdCB1bnRpbCByZXN1bHRzIGFyZSB2ZXJpZmllZCBieSB0aGUgY2xpZW50Ci0gICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLndhaXQoKTsgCisgICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLndhaXQoKTsKIAogICAgICAgICAgICAgICAgIGlmIChzdG9wKSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTMxMCw3ICszMTAsNyBAQAogICAgICAgICAgICAgQ29udHJvbHMuZG9uZSA9IHRydWU7CiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQoQ29udHJvbHMucmVhZHlMb2NrKSB7CiAgICAgICAgICAgICAgICAgLy9Ob3RpZnkgdGhlIGNsaWVudCB0byBjaGVjayB0aGUgcmVzdWx0cwotICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay5ub3RpZnkoKTsgCisgICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLm5vdGlmeSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS1zdGFuZGFsb25lLXJhci9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS1zdGFuZGFsb25lLXJhci9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhCmluZGV4IDc3ZGJmMzQuLjZiZDllNTcgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2Utc3RhbmRhbG9uZS1yYXIvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlLXN0YW5kYWxvbmUtcmFyL3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEKQEAgLTM2LDggKzM2LDggQEAKICAgICBwdWJsaWMgaW50IGJyYW5jaFF1YWxpZmllcjsKICAgICBwdWJsaWMgaW50IGdsb2JhbFR4SUQ7CiAKLSAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYR1RSSURTSVpFPSA2NDsgCi0gICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEJRVUFMU0laRT0gNjQ7IAorICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhHVFJJRFNJWkU9IDY0OworICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhCUVVBTFNJWkU9IDY0OwogCiAgICAgcHVibGljIFhJRCgpIHsKICAgICAgICAgaW50IGZvbyA9IElEKys7CkBAIC01NSwxMCArNTUsMTAgQEAKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgICAgICAgICAgICAgICAgIC8vIEl0IGNhbid0IGJlIGVxdWFsCiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgb3RoZXIgPSAoWElEKW87ICAgICAgICAgICAgICAgICAgIC8vIFRoZSBvdGhlciBYSUQsIG5vdyBwcm9wZXJseSBjYXN0Ci0gICAgICAgIAotICAgICAgICBpZiAodGhpcy5mb3JtYXRJRCA9PSBvdGhlci5mb3JtYXRJRCAKKworICAgICAgICBpZiAodGhpcy5mb3JtYXRJRCA9PSBvdGhlci5mb3JtYXRJRAogICAgICAgICAgICAgICAgICYmIHRoaXMuYnJhbmNoUXVhbGlmaWVyID09IG90aGVyLmJyYW5jaFF1YWxpZmllcgogICAgICAgICAgICAgICAgICYmIHRoaXMuZ2xvYmFsVHhJRCA9PSBvdGhlci5nbG9iYWxUeElEKSB7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTk4LDcgKzk4LDcgQEAKICAgICAgICAgICAgICAgICAiZm9ybWF0SUQoIiAgICAgKyBmb3JtYXRJRCAgICAgKyAiKSwgIiArCiAgICAgICAgICAgICAgICAgImJyYW5jaFF1YWxpZmllciAoIiArIGJyYW5jaFF1YWxpZmllciArICIpLCAiICsKICAgICAgICAgICAgICAgICAiZ2xvYmFsVHhJRCgiICsgZ2xvYmFsVHhJRCArICIpfSIpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gczsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2UvYXBwL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2UvYXBwL2J1aWxkLnhtbAppbmRleCBjNjBlNjA5Li4yYmQ2OWY1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlL2FwcC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS9hcHAvYnVpbGQueG1sCkBAIC0zNiw4ICszNiw4IEBACiAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhciIvPgogIDwhLS0KICAgIDxhbnRjYWxsIHRhcmdldD0iZWFyLWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJnZW5lcmljLWVtYmVkZGVkIi8+Ci0JPHBhcmFtIG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9Ik1FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIvPgorICAgIDxwYXJhbSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iZ2VuZXJpYy1lbWJlZGRlZCIvPgorICAgIDxwYXJhbSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJNRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiLz4KICAgIDwvYW50Y2FsbD4KICAtLT4KICAgPC90YXJnZXQ+CkBAIC01NSw4ICs1NSw4IEBACiAgICAgICAgPC9maWxlc2V0PgogICAgICAgIDxmaWxlc2V0IGRpcj0iLi4vcmEiPgogICAgICAgICAgICA8IS0tICA8aW5jbHVkZSBuYW1lPSIqLnJhciIvPiAtLT4KLQkgICA8aW5jbHVkZSBuYW1lPSJzaXZhamRiY3JhLnJhciIvPgotCSAgIDxpbmNsdWRlIG5hbWU9ImdlbmVyaWMtcmEucmFyIi8+CisgICAgICAgPGluY2x1ZGUgbmFtZT0ic2l2YWpkYmNyYS5yYXIiLz4KKyAgICAgICA8aW5jbHVkZSBuYW1lPSJnZW5lcmljLXJhLnJhciIvPgogICAgICAgIDwvZmlsZXNldD4KICAgICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LkFQU19IT01FfS9saWIiPgogICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJyZXBvcnRlci5qYXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2UvYXBwL3NyYy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggY2NmMjQzMy4uMTUwNTE1MCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogZWpiLWphci54bWw9TUVUQS1JTkYvZWpiLWphci54bWwKIHN1bi1lamItamFyLnhtbD1NRVRBLUlORi9zdW4tZWpiLWphci54bWwKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2UvYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS9hcHAvc3JjL21kYi9NeU1lc3NhZ2VCZWFuLmphdmEKaW5kZXggOTBiYTA1NS4uYjg0MjBmMyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS9hcHAvc3JjL21kYi9NeU1lc3NhZ2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS9hcHAvc3JjL21kYi9NeU1lc3NhZ2VCZWFuLmphdmEKQEAgLTEyMywxNyArMTIzLDE3IEBACiAgICAgICAgICAgICAgICAgICBkZWJ1ZygiTG9va2VkIHVwIERhdGFzb3VyY2VcbiIpOwogICAgICAgICAgICAgICAgICAgZGVidWcoIkdldCBKREJDIGNvbm5lY3Rpb24sIGF1dG8gc2lnbiBvbiIpOwogICAgICAgICAgICAgICAgICAgZGJDb25uZWN0aW9uID0gZHMuZ2V0Q29ubmVjdGlvbigiZGJ1c2VyIiwiZGJwYXNzd29yZCIpOwotICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgIFN0YXRlbWVudCBzdG10ID0gZGJDb25uZWN0aW9uLmNyZWF0ZVN0YXRlbWVudCgpOwotICAgICAgICAgICAgICAgICAgU3RyaW5nIHF1ZXJ5ID0gCisgICAgICAgICAgICAgICAgICBTdHJpbmcgcXVlcnkgPQogICAgICAgICAgICAgICAgICAgIlNFTEVDVCBpZCBmcm9tIG1lc3NhZ2VzIHdoZXJlIGlkID0gJ1FRJyI7CiAgICAgICAgICAgICAgICAgICBSZXN1bHRTZXQgcmVzdWx0cyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHF1ZXJ5KTsKICAgICAgICAgICAgICAgICAgIHJlc3VsdHMubmV4dCgpOwotICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJRUSBoYXMgYmFsYW5jZSAiICsgCisgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlFRIGhhcyBiYWxhbmNlICIgKwogICAgICAgICAgICAgICAgICAgcmVzdWx0cy5nZXRJbnQoImJhbGFuY2UiKSArICIgZG9sbGFycyIpOwogICAgICAgICAgICAgICAgICAgcmVzdWx0cy5jbG9zZSgpOwogICAgICAgICAgICAgICAgICAgc3RtdC5jbG9zZSgpOwotICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVhZCBvbmUgYWNjb3VudFxuIik7CiAgICAgICAgICAgICAgICAgKi8KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDk0NTBkMGQuLjU2MzU0MzkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2UvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iL2RlZmF1bHRSZXNvdXJjZS9zZXJ2bGV0Ii8+CiA8cHJvcGVydHkgbmFtZT0iaHR0cDpob3N0IiB2YWx1ZT0ibG9jYWxob3N0Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlL3JhL01FVEEtSU5GL3JhLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2UvcmEvTUVUQS1JTkYvcmEueG1sCmluZGV4IDJjYTJlYmMuLjIxZGViOTMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2UvcmEvTUVUQS1JTkYvcmEueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2UvcmEvTUVUQS1JTkYvcmEueG1sCkBAIC00NSw3ICs0NSw3IEBACiAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CiAgICAgICAgIDxpbmJvdW5kLXJlc291cmNlYWRhcHRlcj4KLSAgICAgICAgICAgIDxtZXNzYWdlYWRhcHRlcj4gICAgICAgICAgCisgICAgICAgICAgICA8bWVzc2FnZWFkYXB0ZXI+CiAgICAgICAgICAgICAgICAgPG1lc3NhZ2VsaXN0ZW5lcj4KICAgICAgICAgICAgICAgICAgICAgPG1lc3NhZ2VsaXN0ZW5lci10eXBlPgogICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdG9yLk15TWVzc2FnZUxpc3RlbmVyCkBAIC01Niw3ICs1Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICA8L2FjdGl2YXRpb25zcGVjLWNsYXNzPgogICAgICAgICAgICAgICAgICAgICA8L2FjdGl2YXRpb25zcGVjPgogICAgICAgICAgICAgICAgIDwvbWVzc2FnZWxpc3RlbmVyPgotICAgICAgICAgICAgPC9tZXNzYWdlYWRhcHRlcj4gICAgICAgICAgCisgICAgICAgICAgICA8L21lc3NhZ2VhZGFwdGVyPgogICAgICAgICA8L2luYm91bmQtcmVzb3VyY2VhZGFwdGVyPgogICAgICAgICA8YWRtaW5vYmplY3Q+CiAgICAgICAgICAgPGFkbWlub2JqZWN0LWludGVyZmFjZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvYWRtaW5vYmplY3QtaW50ZXJmYWNlPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS9yYS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlL3JhL2J1aWxkLnhtbAppbmRleCA5NjE0NmZmLi40NmVjN2M0IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlL3JhL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlL3JhL2J1aWxkLnhtbApAQCAtMzUsNyArMzUsNyBAQAogCiAgICAgPGphciBqYXJmaWxlPSJnZW5lcmljLXJhLnJhciIgYmFzZWRpcj0iLiIKICAgICAgICAgIGluY2x1ZGVzPSJnZW5lcmljLXJhLmphciwgTUVUQS1JTkYvcmEueG1sIiAvPgotCSA8ZWNobyBtZXNzYWdlPSJpbnNpZGUgYWxsIG9mIHJhIGJ1aWxkLnhtbCI+PC9lY2hvPgorICAgICA8ZWNobyBtZXNzYWdlPSJpbnNpZGUgYWxsIG9mIHJhIGJ1aWxkLnhtbCI+PC9lY2hvPgogICA8L3RhcmdldD4KIDwhLS0gQFNpdmEgVGhpcyBkZXBsb3kvdW5kZXBsb3kgdGFyZ2V0IGlzIG5ldmVyIGNhbGxlZCBhcyBpdCBpcyBhbiBlbWJlZGRlZCBSQSAtLT4KICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2UvcmEvc3JjL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2UvcmEvc3JjL2J1aWxkLnhtbAppbmRleCBmZjhiY2MyLi44NDk2ZjYwIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlL3JhL3NyYy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS9yYS9zcmMvYnVpbGQueG1sCkBAIC0zMCw4ICszMCw4IEBACiAKICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImluaXQtY29tbW9uIiA+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9ImJ1aWxkLmNsYXNzZXMuZGlyIiB2YWx1ZT0iY2xhc3NlcyIgLz4KLQk8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY29ubmVjdG9yIiAvPgorICAgIDxwYXJhbSBuYW1lPSJidWlsZC5jbGFzc2VzLmRpciIgdmFsdWU9ImNsYXNzZXMiIC8+CisgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNvbm5lY3RvciIgLz4KICAgICA8L2FudGNhbGw+CiAgICAgPGphciBqYXJmaWxlPSIuLi9nZW5lcmljLXJhLmphciIgYmFzZWRpcj0iY2xhc3NlcyIKICAgICAgICAgIGluY2x1ZGVzPSJjb25uZWN0b3IvKi5jbGFzcyIgLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2UvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEKaW5kZXggNTU1MzNkNC4uZjU5YjJiMyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEKQEAgLTE4LDcgKzE4LDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBDb250cm9scyB7CiAgICAgcHVibGljIHN0YXRpYyBPYmplY3QgcmVhZHlMb2NrID0gbmV3IE9iamVjdCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhCmluZGV4IDY1ODIzM2UuLmQ3M2M4NjIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2UvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBEZWxpdmVyeVdvcmsgaW1wbGVtZW50cyBXb3JrIHsKIApAQCAtMzYsNyArMzYsNyBAQAogICAgIHByaXZhdGUgU3RyaW5nIG9wOwogICAgIHByaXZhdGUgYm9vbGVhbiBrZWVwQ291bnQ7CiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50ZXIgPSAwOwotICAgIAorCiAgICAgcHVibGljIERlbGl2ZXJ5V29yayhNZXNzYWdlRW5kcG9pbnQgZXAsIGludCBudW1PZk1lc3NhZ2VzLCBTdHJpbmcgb3ApIHsKICAgICAgICAgdGhpcy5lcCA9IGVwOwogICAgICAgICB0aGlzLm51bSA9IG51bU9mTWVzc2FnZXM7CkBAIC00NCw3ICs0NCw3IEBACiAgICAgICAgIHRoaXMua2VlcENvdW50ID0gZmFsc2U7CiAgICAgfQogCi0gICAgcHVibGljIERlbGl2ZXJ5V29yayhNZXNzYWdlRW5kcG9pbnQgZXAsIGludCBudW1PZk1lc3NhZ2VzLCAKKyAgICBwdWJsaWMgRGVsaXZlcnlXb3JrKE1lc3NhZ2VFbmRwb2ludCBlcCwgaW50IG51bU9mTWVzc2FnZXMsCiAgICAgICAgICAgICBTdHJpbmcgb3AsIGJvb2xlYW4ga2VlcENvdW50KSB7CiAgICAgICAgIHRoaXMuZXAgPSBlcDsKICAgICAgICAgdGhpcy5udW0gPSBudW1PZk1lc3NhZ2VzOwpAQCAtNTUsNyArNTUsNyBAQAogICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKIAogICAgICAgICBkZWJ1ZygiRU5URVIuLi4iKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIC8vTWV0aG9kIG9uTWVzc2FnZSA9IGdldE9uTWVzc2FnZU1ldGhvZCgpOwogICAgICAgICAgICAgLy9lcC5iZWZvcmVEZWxpdmVyeShvbk1lc3NhZ2UpOwpAQCAtNzgsMTEgKzc4LDExIEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vZXAuYWZ0ZXJEZWxpdmVyeSgpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiTEVBVkUuLi4iKTsKICAgICB9CiAKQEAgLTkzLDE0ICs5MywxNCBAQAogICAgIH0KIAogICAgIHByaXZhdGUgTWV0aG9kIGdldE9uTWVzc2FnZU1ldGhvZCgpIHsKLSAgICAgICAgCisKICAgICAgICAgTWV0aG9kIG9uTWVzc2FnZU1ldGhvZCA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDbGFzcyBtc2dMaXN0ZW5lckNsYXNzID0gY29ubmVjdG9yLk15TWVzc2FnZUxpc3RlbmVyLmNsYXNzOwogICAgICAgICAgICAgQ2xhc3NbXSBwYXJhbVR5cGVzID0geyBqYXZhLmxhbmcuU3RyaW5nLmNsYXNzIH07Ci0gICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPSAKKyAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9CiAgICAgICAgICAgICAgICAgbXNnTGlzdGVuZXJDbGFzcy5nZXRNZXRob2QoIm9uTWVzc2FnZSIsIHBhcmFtVHlwZXMpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlL3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YQppbmRleCAxMDBjYWNlLi5mYTkzZjYzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlL3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlL3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YQpAQCAtMzYsNyArMzYsNyBAQAogICAgICAgICAgICAgICBmbGFnVG9TdHJpbmcoZmxhZ3MpKTsKICAgICB9CiAKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGZvcmdldChYaWQgeGlkKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2UuZm9yZ2V0OiAiICsgeGlkVG9TdHJpbmcoeGlkKSk7CiAgICAgfQpAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2UucHJlcGFyZTogIiArIHhpZFRvU3RyaW5nKHhpZCkpOwogICAgICAgICByZXR1cm4gWEFSZXNvdXJjZS5YQV9PSzsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgWGlkW10gcmVjb3ZlcihpbnQgZmxhZykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLnJlY292ZXI6ICIgKyBmbGFnVG9TdHJpbmcoZmxhZykpOwogICAgICAgICByZXR1cm4gbnVsbDsKQEAgLTY2LDcgKzY2LDcgQEAKICAgICBwdWJsaWMgYm9vbGVhbiBzZXRUcmFuc2FjdGlvblRpbWVvdXQoaW50IHNlY29uZHMpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzdGFydChYaWQgeGlkLCBpbnQgZmxhZ3MpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5zdGFydDogIiArIHhpZFRvU3RyaW5nKHhpZCkgKyAiLCIgKwogICAgICAgICAgICAgICAgIGZsYWdUb1N0cmluZyhmbGFncykpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS9yYS9zcmMvY29ubmVjdG9yL01lc3NhZ2VzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlL3JhL3NyYy9jb25uZWN0b3IvTWVzc2FnZXMuamF2YQppbmRleCBiNWIwZjAyLi40YzljMDEyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlL3JhL3NyYy9jb25uZWN0b3IvTWVzc2FnZXMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlL3JhL3NyYy9jb25uZWN0b3IvTWVzc2FnZXMuamF2YQpAQCAtMjEsNyArMjEsNyBAQAogLyoqCiAgKiBjb2xsZWN0aW9uIG9mIG1lc3NhZ2VzLgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgTWVzc2FnZXMgewogCkBAIC01NCw3ICs1NCw3IEBACiAgICAgICAgU3RyaW5nIGNvbW1hbmQgID0gYXJnc1swXTsKICAgICAgICBTdHJpbmcgZGVzdE5hbWUgPSBhcmdzWzFdOwogICAgICAgIFN0cmluZyBtZXNzYWdlICA9IGFyZ3NbMl07Ci0gICAKKwogICAgICAgIGlmICghImFkZCIuZXF1YWxzKGNvbW1hbmQpKSB7CiAgICAgICAgICAgIFN5c3RlbS5leGl0KDEpOwogICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2UvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlL3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdC5qYXZhCmluZGV4IDg2MmY5ZmYuLmQxOTlkMDEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2UvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YQpAQCAtMzgsMTEgKzM4LDExIEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgaW5pdGlhbGl6ZSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXppbmcgdGhlIENvbnRyb2xzIHRvIGZhbHNlOiIrcmVzZXRDb250cm9sKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXppbmcgdGhlIENvbnRyb2xzIHRvIGZhbHNlOiIrcmVzZXRDb250cm9sKTsKICAgICAgICAgaWYgKHJlc2V0Q29udHJvbC5lcXVhbHMoIkJFR0lOTklORyIpKSB7CiAgICAgICAgICAgIENvbnRyb2xzLmRvbmU9ZmFsc2U7Ci0JICAgU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6ZWQgdGhlIENvbnRyb2xzIHRvIGZhbHNlIik7Ci0JfQorICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW015QWRtaW5PYmplY3RdIEluaXRpYWxpemVkIHRoZSBDb250cm9scyB0byBmYWxzZSIpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiBkb25lKCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS9yYS9zcmMvY29ubmVjdG9yL015V29yay5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS9yYS9zcmMvY29ubmVjdG9yL015V29yay5qYXZhCmluZGV4IDJlY2VjNjMuLmE5YTg4ODEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2UvcmEvc3JjL2Nvbm5lY3Rvci9NeVdvcmsuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlL3JhL3NyYy9jb25uZWN0b3IvTXlXb3JrLmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKIAogLyoqCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KIHB1YmxpYyBjbGFzcyBNeVdvcmsgaW1wbGVtZW50cyBXb3JrIHsKIApAQCAtMzUsNyArMzUsNyBAQAogICAgIHByaXZhdGUgYm9vbGVhbiBzdG9wID0gZmFsc2U7CiAgICAgcHJpdmF0ZSBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGZhY3Rvcnk7CiAgICAgcHJpdmF0ZSBXb3JrTWFuYWdlciB3bTsKLSAgICAKKwogICAgIHB1YmxpYyBNeVdvcmsoCiAgICAgICAgICAgICBTdHJpbmcgbmFtZSwgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBmYWN0b3J5LCBXb3JrTWFuYWdlciB3bSkgewogICAgICAgICB0aGlzLmZhY3RvcnkgPSBmYWN0b3J5OwpAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICAgICAgdHJ5IHsKIAogICAgICAgICAgICAgICAgIE1ldGhvZCBvbk1lc3NhZ2UgPSBnZXRPbk1lc3NhZ2VNZXRob2QoKTsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlzRGVsaXZlcnlUcmFuc2FjdGVkID0gIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaXNEZWxpdmVyeVRyYW5zYWN0ZWQgPSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yeS5pc0RlbGl2ZXJ5VHJhbnNhY3RlZChvbk1lc3NhZ2UpKTsKIAogICAgICAgICAgICAgICAgIC8qCkBAIC03MCw3ICs3MCw3IEBACiAgICAgICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIkxFQVZFLi4uIik7CiAgICAgfQogCkBAIC04NSwxNCArODUsMTQgQEAKICAgICB9CiAKICAgICBwdWJsaWMgTWV0aG9kIGdldE9uTWVzc2FnZU1ldGhvZCgpIHsKLSAgICAgICAgCisKICAgICAgICAgTWV0aG9kIG9uTWVzc2FnZU1ldGhvZCA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDbGFzcyBtc2dMaXN0ZW5lckNsYXNzID0gY29ubmVjdG9yLk15TWVzc2FnZUxpc3RlbmVyLmNsYXNzOwogICAgICAgICAgICAgQ2xhc3NbXSBwYXJhbVR5cGVzID0geyBqYXZhLmxhbmcuU3RyaW5nLmNsYXNzIH07Ci0gICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPSAKKyAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9CiAgICAgICAgICAgICAgICAgbXNnTGlzdGVuZXJDbGFzcy5nZXRNZXRob2QoIm9uTWVzc2FnZSIsIHBhcmFtVHlwZXMpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YQppbmRleCA5NDZkOTg3Li5iYjc5MThlIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YQpAQCAtMjQsOSArMjQsOSBAQAogICogc28gdGhhdCB0aGUgYXBwIHNlcnZlciBjYW4gaW5zdGFudGlhdGUgYW5kIGNvbmZpZ3VyZQogICogaXQgYXQgdGhlIHJ1bnRpbWUuCiAgKgotICogQGF1dGhvcglRaW5ncWluZyBPdXlhbmcKKyAqIEBhdXRob3IgICAgUWluZ3FpbmcgT3V5YW5nCiAgKi8KLXB1YmxpYyBjbGFzcyBTaW1wbGVBY3RpdmF0aW9uU3BlYyAKK3B1YmxpYyBjbGFzcyBTaW1wbGVBY3RpdmF0aW9uU3BlYwogICAgIGltcGxlbWVudHMgQWN0aXZhdGlvblNwZWMsIGphdmEuaW8uU2VyaWFsaXphYmxlIHsKIAogICAgIHByaXZhdGUgU3RyaW5nIGRlc3RpbmF0aW9uTmFtZTsKQEAgLTQyLDcgKzQyLDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldERlc3RpbmF0aW9uTmFtZSAoKSB7CiAgICAgICAgIHJldHVybiB0aGlzLmRlc3RpbmF0aW9uTmFtZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXREZXN0aW5hdGlvbk5hbWUgKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIGRlYnVnKCJzZXREZXN0aW5hdGlvbk5hbWUoKSBjYWxsZWQuLi4gbmFtZSA9ICIgKyBuYW1lKTsKICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbk5hbWUgPSBuYW1lOwpAQCAtNTEsNyArNTEsNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzdGluYXRpb25UeXBlKCkgewogICAgICAgICByZXR1cm4gdGhpcy5kZXN0aW5hdGlvblR5cGU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0RGVzdGluYXRpb25UeXBlIChTdHJpbmcgdHlwZSkgewogICAgICAgICBkZWJ1Zygic2V0RGVzdGluYXRpb25UeXBlICgpIGNhbGxlZC4uLiB0eXBlID0gIiArIHR5cGUpOwogICAgICAgICB0aGlzLmRlc3RpbmF0aW9uVHlwZT0gdHlwZTsKQEAgLTYwLDcgKzYwLDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldFRlc3RQcm9wKCkgewogICAgICAgICByZXR1cm4gdGhpcy50ZXN0UHJvcDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRUZXN0UHJvcCAoU3RyaW5nIHRlc3RQcm9wKSB7CiAgICAgICAgIGRlYnVnKCJzZXRUZXN0UHJvcCAoKSBjYWxsZWQuLi4gdGVzdFByb3AgPSAiICsgdGVzdFByb3ApOwogICAgICAgICB0aGlzLnRlc3RQcm9wID0gdGVzdFByb3A7CkBAIC03Niw3ICs3Niw3IEBACiAgICAgICAgIHRoaXMucmVzb3VyY2VhZGFwdGVyID0gcmE7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgdmFsaWRhdGUoKSB7fSAKKyAgICBwdWJsaWMgdm9pZCB2YWxpZGF0ZSgpIHt9CiAKICAgICBwcml2YXRlIHZvaWQgZGVidWcgKFN0cmluZyBtZXNzYWdlKQogICAgIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2UvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbC5qYXZhCmluZGV4IDU4ODEzYjMuLjRjNWQ5OGYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2UvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVSZXNvdXJjZUFkYXB0ZXJJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZVJlc291cmNlQWRhcHRlckltcGwuamF2YQpAQCAtNDAsOSArNDAsOSBAQAogLyoqCiAgKiBUaGlzIGlzIGEgc2FtcGxlIHJlc291cmNlIGFkYXB0ZXIKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwotcHVibGljIGNsYXNzIFNpbXBsZVJlc291cmNlQWRhcHRlckltcGwgCitwdWJsaWMgY2xhc3MgU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbAogaW1wbGVtZW50cyBSZXNvdXJjZUFkYXB0ZXIsIGphdmEuaW8uU2VyaWFsaXphYmxlIHsKIAogICAgIHByaXZhdGUgQm9vdHN0cmFwQ29udGV4dCBjdHg7CkBAIC01OCw3ICs1OCw3IEBACiAKICAgICBwdWJsaWMgdm9pZAogICAgIHN0YXJ0KEJvb3RzdHJhcENvbnRleHQgY3R4KSB0aHJvd3MgUmVzb3VyY2VBZGFwdGVySW50ZXJuYWxFeGNlcHRpb257Ci0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCIwMDEuIFNpbXBsZSBSQSBzdGFydC4uLiIpOwogCiAgICAgICAgIHRoaXMuY3R4ID0gY3R4OwpAQCAtNjgsMjIgKzY4LDIyIEBACiAKICAgICAgICAgLy90ZXN0aW5nIGNyZWF0IHRpbWVyCiAgICAgICAgIFRpbWVyIHRpbWVyID0gbnVsbDsKLQkgIHRyeXsKLQkgICAgICB0aW1lciA9IGN0eC5jcmVhdGVUaW1lcigpOwotCSAgfSBjYXRjaChVbmF2YWlsYWJsZUV4Y2VwdGlvbiB1ZSkgewotCSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXJyb3IiKTsKLQkgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VBZGFwdGVySW50ZXJuYWxFeGNlcHRpb24oIkVycm9yIGZvcm0gYm9vdHN0cmFwIik7Ci0JICB9CisgICAgICB0cnl7CisgICAgICAgICAgdGltZXIgPSBjdHguY3JlYXRlVGltZXIoKTsKKyAgICAgIH0gY2F0Y2goVW5hdmFpbGFibGVFeGNlcHRpb24gdWUpIHsKKyAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIik7CisgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uKCJFcnJvciBmb3JtIGJvb3RzdHJhcCIpOworICAgICAgfQogICAgICAgICBkZWJ1ZygiMDA0LiBTaW1wbGUgUkEgc3RhcnQuLi4iKTsKIAogLyoKICAgICAgICAgICB0cnkgewotICAgICAgICAgIAorCiAgICAgICAgICAgWEFUZXJtaW5hdG9yIHhhID0gY3R4LmdldFhBVGVybWluYXRvcigpOwotICAgICAgICAgIAorCiAgICAgICAgICAgWGlkIHhpZDEgPSBuZXcgWElEKCk7CiAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgWElEMSA9ICIgKyB4aWQxKTsKLSAgICAgICAgICAKKwogICAgICAgICAgIEV4ZWN1dGlvbkNvbnRleHQgZWMgPSBuZXcgRXhlY3V0aW9uQ29udGV4dCgpOwogICAgICAgICAgIGVjLnNldFhpZCh4aWQxKTsKICAgICAgICAgICBlYy5zZXRUcmFuc2FjdGlvblRpbWVvdXQoNSoxMDAwKTsgLy81IHNlY29uZHMKQEAgLTkzLDE0ICs5MywxNCBAQAogICAgICAgICAgIHdtLmRvV29yayhvdXR3LCAxKjEwMDAsIGVjLCBudWxsKTsKICAgICAgICAgICB4YS5jb21taXQoeGlkMSwgdHJ1ZSk7CiAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgCisKICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBleCA9ICIgKyBleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgIHhhLnJvbGxiYWNrKHhpZDEpOwogICAgICAgICAgIH0KLSAgICAgICAgICAKKwogICAgICAgICAgIFhpZCB4aWQyID0gbmV3IFhJRCgpOwogICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFhJRDIgPSAiICsgeGlkMik7Ci0gICAgICAgICAgCisKICAgICAgICAgICBlYyA9IG5ldyBFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgICAgICAgZWMuc2V0WGlkKHhpZDIpOwogICAgICAgICAgIGVjLnNldFRyYW5zYWN0aW9uVGltZW91dCg1KjEwMDApOyAvLzUgc2Vjb25kcwpAQCAtMTE3LDcgKzExNyw3IEBACiAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgfQogCi0gICAgICAgIAorCiAgICAgICAgICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgMzsgaSsrKSB7CiAgICAgICAgICAgVGVzdFdNV29yayB3ID0gbmV3IFRlc3RXTVdvcmsoaSwgZmFsc2UpOwogICAgICAgICAgIHRyeSB7CkBAIC0xMjUsNyArMTI1LDcgQEAKICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZBSUw6IENBVUdIVCBleGNlcHRpb24gOiBpID0gIiArIGkpOwogICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAgIH0gCisgICAgICAgICAgfQogICAgICAgICAgIH0KIAogICAgICAgICAgIGZvciAoaW50IGkgPSAzIDsgaSA8IDY7IGkrKykgewpAQCAtMjA2LDEyICsyMDYsMTIgQEAKIAogICAgIHB1YmxpYyB2b2lkCiAgICAgZW5kcG9pbnREZWFjdGl2YXRpb24gKAotICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBlbmRwb2ludEZhY3RvcnksIAorICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBlbmRwb2ludEZhY3RvcnksCiAgICAgICAgICAgICBBY3RpdmF0aW9uU3BlYyBzcGVjKSB7CiAgICAgICAgIGRlYnVnICgiZW5kcG9pbnREZWFjdGl2YXRpb24gY2FsbGVkLi4uIik7CiAgICAgICAgICgoV29ya0Rpc3BhdGNoZXIpIHdvcmspLnN0b3AoKTsKICAgICB9Ci0gIAorCiAgICAgcHVibGljIFN0cmluZyBnZXRUZXN0TmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHRlc3ROYW1lOwogICAgIH0KQEAgLTIyNyw3ICsyMjcsNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2ltcGxlUmVzb3VyY2VBZGFwdGVySW1wbF0gPT0+ICIgKyBtZXNzYWdlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgWEFSZXNvdXJjZVtdIGdldFhBUmVzb3VyY2VzKEFjdGl2YXRpb25TcGVjW10gc3BlY3MpIAorICAgIHB1YmxpYyBYQVJlc291cmNlW10gZ2V0WEFSZXNvdXJjZXMoQWN0aXZhdGlvblNwZWNbXSBzcGVjcykKICAgICAgICAgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS9yYS9zcmMvY29ubmVjdG9yL1Rlc3RXTVdvcmsuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2UvcmEvc3JjL2Nvbm5lY3Rvci9UZXN0V01Xb3JrLmphdmEKaW5kZXggN2U1ODVhMy4uOWNkMDY2MyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS9yYS9zcmMvY29ubmVjdG9yL1Rlc3RXTVdvcmsuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlL3JhL3NyYy9jb25uZWN0b3IvVGVzdFdNV29yay5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgVGVzdFdNV29yayBpbXBsZW1lbnRzIFdvcmsgewogCkBAIC00Miw4ICs0Miw4IEBACiAgICAgcHVibGljIFRlc3RXTVdvcmsoaW50IGlkLCBib29sZWFuIGlzUm9ndWUpIHsKICAgICAgICAgdGhpcyhpZCwgaXNSb2d1ZSwgZmFsc2UsIG51bGwpOwogICAgIH0KLSAgICAKLSAgICBwdWJsaWMgVGVzdFdNV29yayhpbnQgaWQsIGJvb2xlYW4gaXNSb2d1ZSwgCisKKyAgICBwdWJsaWMgVGVzdFdNV29yayhpbnQgaWQsIGJvb2xlYW4gaXNSb2d1ZSwKICAgICAgICAgICAgIGJvb2xlYW4gZG9OZXN0LCBFeGVjdXRpb25Db250ZXh0IGN0eCkgewogICAgICAgICB0aGlzLmlkID0gaWQ7CiAgICAgICAgIHRoaXMuaXNSb2d1ZSA9IGlzUm9ndWU7CkBAIC03NywxMCArNzcsMTAgQEAKICAgICAgICAgICAgIH0gY2F0Y2ggKFdvcmtFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgICAgICBpZiAoZXguZ2V0RXJyb3JDb2RlKCkuZXF1YWxzKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdvcmtFeGNlcHRpb24uVFhfQ09OQ1VSUkVOVF9XT1JLX0RJU0FMTE9XRUQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsgCisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFdNV29ya1siICsgaWQgKyAiXSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUEFTUzogQ0FVR0hUIEVYUEVDVEVEID0gIiArIGV4LmdldEVycm9yQ29kZSgpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArIAorICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZBSUw6IENBVUdIVCBVTkVYUEVDVEVEID0gIiArIGV4LmdldEVycm9yQ29kZSgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC05Miw3ICs5Miw3IEBACiAgICAgICAgICAgICAgICAgZWMuc2V0VHJhbnNhY3Rpb25UaW1lb3V0KDUqMTAwMCk7IC8vNSBzZWNvbmRzCiAgICAgICAgICAgICAgICAgd20uZG9Xb3JrKG5lc3RlZFdvcmssIDEqMTAwMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0V01Xb3JrWyIgKyBpZCArICJdICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RXTVdvcmtbIiArIGlkICsgIl0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAiRkFJTDogQ0FVR0hUIFVORVhQRUNURUQgPSAiICsgZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQppbmRleCAzNGE2MDRmLi5jZDk4YzQ1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQpAQCAtMzMsNyArMzMsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIFdvcmtEaXNwYXRjaGVyIGltcGxlbWVudHMgV29yayB7CiAKQEAgLTQ0LDExICs0NCwxMSBAQAogICAgIHByaXZhdGUgQWN0aXZhdGlvblNwZWMgc3BlYzsKICAgICBwcml2YXRlIFdvcmtNYW5hZ2VyIHdtOwogICAgIHByaXZhdGUgWEFUZXJtaW5hdG9yIHhhOwotICAgIAorCiAgICAgcHVibGljIFdvcmtEaXNwYXRjaGVyKAogICAgICAgICAgICAgU3RyaW5nIGlkLAogICAgICAgICAgICAgQm9vdHN0cmFwQ29udGV4dCBjdHgsCi0gICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IGZhY3RvcnksIAorICAgICAgICAgICAgTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBmYWN0b3J5LAogICAgICAgICAgICAgQWN0aXZhdGlvblNwZWMgc3BlYykgewogICAgICAgICB0aGlzLmlkICAgICAgPSBpZDsKICAgICAgICAgdGhpcy5jdHggICAgID0gY3R4OwpAQCAtNjEsNyArNjEsNyBAQAogICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKIAogICAgICAgICBkZWJ1ZygiRU5URVIuLi4iKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHN5bmNocm9uaXplZCAoQ29udHJvbHMucmVhZHlMb2NrKSB7CiAgICAgICAgICAgICAgICAgZGVidWcoIldBSVQuLi4iKTsKQEAgLTgzLDI2ICs4MywyNiBAQAogICAgICAgICAgICAgdHJ5IHsKIAogICAgICAgICAgICAgICAgIE1ldGhvZCBvbk1lc3NhZ2UgPSBnZXRPbk1lc3NhZ2VNZXRob2QoKTsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlzRGVsaXZlcnlUcmFuc2FjdGVkID0gIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaXNEZWxpdmVyeVRyYW5zYWN0ZWQgPSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3RvcnkuaXNEZWxpdmVyeVRyYW5zYWN0ZWQob25NZXNzYWdlKSk7CiAKICAgICAgICAgICAgICAgICBpZiAoIWZhY3RvcnkuaXNEZWxpdmVyeVRyYW5zYWN0ZWQob25NZXNzYWdlKSkgewogICAgICAgICAgICAgICAgICAgICAvL01lc3NhZ2VFbmRwb2ludCBlcCA9IGZhY3RvcnkuY3JlYXRlRW5kcG9pbnQobnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIC8vRGVsaXZlcnlXb3JrIGQgPSBuZXcgRGVsaXZlcnlXb3JrKCJOT19UWCIsIGVwKTsgCisgICAgICAgICAgICAgICAgICAgIC8vRGVsaXZlcnlXb3JrIGQgPSBuZXcgRGVsaXZlcnlXb3JrKCJOT19UWCIsIGVwKTsKICAgICAgICAgICAgICAgICAgICAgLy93bS5kb1dvcmsoZCwgMCwgbnVsbCwgbnVsbCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy9NZXNzYWdlRW5kcG9pbnQgZXAgPSBmYWN0b3J5LmNyZWF0ZUVuZHBvaW50KG51bGwpOwogICAgICAgICAgICAgICAgICAgICBNZXNzYWdlRW5kcG9pbnQgZXAgPSBmYWN0b3J5LmNyZWF0ZUVuZHBvaW50KG5ldyBGYWtlWEFSZXNvdXJjZSgpKTsKICAgICAgICAgICAgICAgICAgICAgaW50IG51bU9mTWVzc2FnZXMgPSA1OwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvL2ltcG9ydGluZyB0cmFuc2FjdGlvbgogCiAgICAgICAgICAgICAgICAgICAgIC8vd3JpdGUvY29tbWl0CiAgICAgICAgICAgICAgICAgICAgIEV4ZWN1dGlvbkNvbnRleHQgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7CiAKLSAgICAgICAgICAgICAgICAgICAgRGVsaXZlcnlXb3JrIHcgPSAKKyAgICAgICAgICAgICAgICAgICAgRGVsaXZlcnlXb3JrIHcgPQogICAgICAgICAgICAgICAgICAgICAgICAgbmV3IERlbGl2ZXJ5V29yayhlcCwgbnVtT2ZNZXNzYWdlcywgIldSSVRFIik7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgdHJ1ZSk7CkBAIC0xMTAsNyArMTEwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIkRPTkUgV1JJVEUgVE8gREIiKTsKICAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMuZXhwZWN0ZWRSZXN1bHRzID0gbnVtT2ZNZXNzYWdlczsKICAgICAgICAgICAgICAgICAgICAgbm90aWZ5QW5kV2FpdCgpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvL2RlbGV0ZS9yb2xsYmFjawogICAgICAgICAgICAgICAgICAgICBlYyA9IHN0YXJ0VHgoKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIlN0YXJ0IFRYIC0gIiArIGVjLmdldFhpZCgpKTsKQEAgLTEyNiw3ICsxMjYsNyBAQAogICAgICAgICAgICAgICAgICAgICAvL2RlbGV0ZS9jb21taXQKICAgICAgICAgICAgICAgICAgICAgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIHcgPSBuZXcgRGVsaXZlcnlXb3JrKGVwLCBudW1PZk1lc3NhZ2VzLCAiREVMRVRFIik7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHhhLmNvbW1pdChlYy5nZXRYaWQoKSwgdHJ1ZSk7CkBAIC0xNTAsNyArMTUwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgLy9kZWxldGUvY29tbWl0CiAgICAgICAgICAgICAgICAgICAgIGVjID0gc3RhcnRUeCgpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiU3RhcnQgVFggLSAiICsgZWMuZ2V0WGlkKCkpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICB3ID0gbmV3IERlbGl2ZXJ5V29yayhlcCwgbnVtT2ZNZXNzYWdlcywgIkRFTEVURSIpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIHRydWUpOwpAQCAtMTk1LDcgKzE5NSw3IEBACiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIHdtLmRvV29yayh3LCAwLCBlYywgbnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGlmIChYQVJlc291cmNlLlhBX09LID09IHhhLnByZXBhcmUoZWMuZ2V0WGlkKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJYQSBQUkVQQVJFL0NPTU1JVC4gRE9ORSBXUklURSBUTyBEQiAiKTsKQEAgLTIwNywxOSArMjA3LDE5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBDb250cm9scy5leHBlY3RlZFJlc3VsdHMgPSAzOwogICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZ5QW5kV2FpdCgpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vZGVsZXRlIGFsbC4KICAgICAgICAgICAgICAgICAgICAgZWMgPSBzdGFydFR4KCk7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJTdGFydCBUWCAtICIgKyBlYy5nZXRYaWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIHcgPSBuZXcgRGVsaXZlcnlXb3JrKGVwLCAxLCAiREVMRVRFX0FMTCIpOwogICAgICAgICAgICAgICAgICAgICB3bS5kb1dvcmsodywgMCwgZWMsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB4YS5jb21taXQoZWMuZ2V0WGlkKCksIHRydWUpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiRE9ORSBERUxFVEUgQUxMIEZST00gREIiKTsKICAgICAgICAgICAgICAgICAgICAgQ29udHJvbHMuZXhwZWN0ZWRSZXN1bHRzID0gMDsKICAgICAgICAgICAgICAgICAgICAgbm90aWZ5QW5kV2FpdCgpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBkb25lKCk7CiAgICAgICAgICAgICAgICAgfQogCkBAIC0yNDMsNyArMjQzLDcgQEAKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiTEVBVkUuLi4iKTsKICAgICB9CiAKQEAgLTI1OCwxNCArMjU4LDE0IEBACiAgICAgfQogCiAgICAgcHVibGljIE1ldGhvZCBnZXRPbk1lc3NhZ2VNZXRob2QoKSB7Ci0gICAgICAgIAorCiAgICAgICAgIE1ldGhvZCBvbk1lc3NhZ2VNZXRob2QgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ2xhc3MgbXNnTGlzdGVuZXJDbGFzcyA9IGNvbm5lY3Rvci5NeU1lc3NhZ2VMaXN0ZW5lci5jbGFzczsKICAgICAgICAgICAgIENsYXNzW10gcGFyYW1UeXBlcyA9IHsgamF2YS5sYW5nLlN0cmluZy5jbGFzcyB9OwotICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0gCisgICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPQogICAgICAgICAgICAgICAgIG1zZ0xpc3RlbmVyQ2xhc3MuZ2V0TWV0aG9kKCJvbk1lc3NhZ2UiLCBwYXJhbVR5cGVzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KQEAgLTI4OCwxMyArMjg4LDEzIEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAvL1NsZWVwIGZvciA1IHNlY29uZHMKICAgICAgICAgICAgIC8vVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCg1KjEwMDApOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHN5bmNocm9uaXplZChDb250cm9scy5yZWFkeUxvY2spIHsKICAgICAgICAgICAgICAgICAvL05vdGlmeSB0aGUgY2xpZW50IHRvIGNoZWNrIHRoZSByZXN1bHRzCi0gICAgICAgICAgICAgICAgQ29udHJvbHMucmVhZHlMb2NrLm5vdGlmeSgpOyAKLSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2subm90aWZ5KCk7CisKICAgICAgICAgICAgICAgICAvL1dhaXQgdW50aWwgcmVzdWx0cyBhcmUgdmVyaWZpZWQgYnkgdGhlIGNsaWVudAotICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay53YWl0KCk7IAorICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay53YWl0KCk7CiAKICAgICAgICAgICAgICAgICBpZiAoc3RvcCkgewogICAgICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0zMTAsNyArMzEwLDcgQEAKICAgICAgICAgICAgIENvbnRyb2xzLmRvbmUgPSB0cnVlOwogICAgICAgICAgICAgc3luY2hyb25pemVkKENvbnRyb2xzLnJlYWR5TG9jaykgewogICAgICAgICAgICAgICAgIC8vTm90aWZ5IHRoZSBjbGllbnQgdG8gY2hlY2sgdGhlIHJlc3VsdHMKLSAgICAgICAgICAgICAgICBDb250cm9scy5yZWFkeUxvY2subm90aWZ5KCk7IAorICAgICAgICAgICAgICAgIENvbnRyb2xzLnJlYWR5TG9jay5ub3RpZnkoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2UvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9kZWZhdWx0Q29ubmVjdG9yUmVzb3VyY2UvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YQppbmRleCA3N2RiZjM0Li42YmQ5ZTU3IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZGVmYXVsdENvbm5lY3RvclJlc291cmNlL3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2RlZmF1bHRDb25uZWN0b3JSZXNvdXJjZS9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhCkBAIC0zNiw4ICszNiw4IEBACiAgICAgcHVibGljIGludCBicmFuY2hRdWFsaWZpZXI7CiAgICAgcHVibGljIGludCBnbG9iYWxUeElEOwogCi0gICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEdUUklEU0laRT0gNjQ7IAotICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhCUVVBTFNJWkU9IDY0OyAKKyAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYR1RSSURTSVpFPSA2NDsKKyAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYQlFVQUxTSVpFPSA2NDsKIAogICAgIHB1YmxpYyBYSUQoKSB7CiAgICAgICAgIGludCBmb28gPSBJRCsrOwpAQCAtNTUsMTAgKzU1LDEwIEBACiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAgICAgICAgICAgICAgICAvLyBJdCBjYW4ndCBiZSBlcXVhbAogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIG90aGVyID0gKFhJRClvOyAgICAgICAgICAgICAgICAgICAvLyBUaGUgb3RoZXIgWElELCBub3cgcHJvcGVybHkgY2FzdAotICAgICAgICAKLSAgICAgICAgaWYgKHRoaXMuZm9ybWF0SUQgPT0gb3RoZXIuZm9ybWF0SUQgCisKKyAgICAgICAgaWYgKHRoaXMuZm9ybWF0SUQgPT0gb3RoZXIuZm9ybWF0SUQKICAgICAgICAgICAgICAgICAmJiB0aGlzLmJyYW5jaFF1YWxpZmllciA9PSBvdGhlci5icmFuY2hRdWFsaWZpZXIKICAgICAgICAgICAgICAgICAmJiB0aGlzLmdsb2JhbFR4SUQgPT0gb3RoZXIuZ2xvYmFsVHhJRCkgewogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC05OCw3ICs5OCw3IEBACiAgICAgICAgICAgICAgICAgImZvcm1hdElEKCIgICAgICsgZm9ybWF0SUQgICAgICsgIiksICIgKwogICAgICAgICAgICAgICAgICJicmFuY2hRdWFsaWZpZXIgKCIgKyBicmFuY2hRdWFsaWZpZXIgKyAiKSwgIiArCiAgICAgICAgICAgICAgICAgImdsb2JhbFR4SUQoIiArIGdsb2JhbFR4SUQgKyAiKX0iKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIHM7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvYnVpbGQucHJvcGVydGllcwppbmRleCBlMmNjNzVkLi5kYzE5YzliIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE2ICsxNSwxNiBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zdWJjbGFzc2luZyIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc3ViY2xhc3NpbmciLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9InN1YmNsYXNzaW5nIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9idWlsZC54bWwKaW5kZXggY2YyMWUxZC4uZTFiNWYyMCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL2J1aWxkLnhtbApAQCAtMzIsMTQgKzMyLDE0IEBACiAgICAgJmNvbW1vbkJ1aWxkOwogICAgICZjb21tb25SdW47CiAgICAgJnRlc3Rwcm9wZXJ0aWVzOwotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLCBkZXBsb3ktZWFyLCBzZXR1cCwgcnVuLWVhciwgdW5zZXR1cCwgdW5kZXBsb3ktZWFyIi8+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgICAgPGFudCBkaXI9InJhIiB0YXJnZXQ9ImNsZWFuIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbm5lY3RvciI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9zaW1wbGVCYW5rLnNxbCIvPgpAQCAtNTEsNyArNTEsNyBAQAogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcEJhbmtUYWJsZXMuc3FsIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudCBkaXI9InJhIiB0YXJnZXQ9ImNvbXBpbGUiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CkBAIC02NSw5ICs2NSw5IEBACiAgICAgICA8ZWNobyBtZXNzYWdlPSJjb21tb24ueG1sOiBDb21waWxpbmcgdGVzdCBzb3VyY2UgZmlsZXMiIGxldmVsPSJ2ZXJib3NlIi8+CiAgICAgICA8amF2YWMgc3JjZGlyPSJzZXJ2bGV0IgogICAgICAgICAgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCi0JIGNsYXNzcGF0aD0iJHtzMWFzdGVzdC5jbGFzc3BhdGh9OnJhL3B1Ymxpc2gvaW50ZXJuYWwvY2xhc3NlcyIKKyAgICAgY2xhc3NwYXRoPSIke3MxYXN0ZXN0LmNsYXNzcGF0aH06cmEvcHVibGlzaC9pbnRlcm5hbC9jbGFzc2VzIgogICAgICAgICAgZGVidWc9Im9uIgotCSBmYWlsb25lcnJvcj0idHJ1ZSIvPgorICAgICBmYWlsb25lcnJvcj0idHJ1ZSIvPgogICAgICA8L3RhcmdldD4KIAogCkBAIC03Niw0MSArNzYsNDEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgIDxhbnQgZGlyPSJyYSIgdGFyZ2V0PSJhc3NlbWJsZSIvPgogCiAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgPC9hbnRjYWxsPgotICAgICAgIAorCiAgICAgPGFudGNhbGwgdGFyZ2V0PSJlamItamFyLWNvbW1vbiI+CiAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgIDwvYW50Y2FsbD4KIAotICAgIAorCiAgICAgPGRlbGV0ZSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS5lYXIiLz4KICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KLSAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPiAgICAKLSAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0vTUVUQS1JTkYiLz4gICAgCisgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KKyAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0vTUVUQS1JTkYiLz4KICAgICAgICAgICA8Y29weSBmaWxlPSJkZXNjcmlwdG9yL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sIiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sIiBmYWlsb25lcnJvcj0idHJ1ZSIgIGZpbHRlcmluZz0idHJ1ZSI+CiAgICAgICAgICAgPC9jb3B5PgogICAgICAgICAgIDxjb3B5IGZpbGU9ImRlc2NyaXB0b3IvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwiIHRvZmlsZT0iJHthc3NlbWJsZS5kaXJ9L01FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sIiBmYWlsb25lcnJvcj0idHJ1ZSIgIGZpbHRlcmluZz0idHJ1ZSI+CiAgICAgICAgICAgPC9jb3B5PgotICAgIDxlYXIgZWFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIiAKKyAgICA8ZWFyIGVhcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIKICAgICAgYXBweG1sPSIke2FwcGxpY2F0aW9uLnhtbH0iPgogICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KICAgICAgIDxpbmNsdWRlIG5hbWU9IiouamFyIi8+CiAgICAgICA8aW5jbHVkZSBuYW1lPSIqLndhciIvPgogICAgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvKi54bWwiLz4KLSAgICA8L2ZpbGVzZXQ+ICAKKyAgICA8L2ZpbGVzZXQ+CiAgICAgPGZpbGVzZXQgZGlyPSJyYS9wdWJsaXNoL2xpYiI+CiAgICAgICA8aW5jbHVkZSBuYW1lPSIqLnJhciIvPgogICAgIDwvZmlsZXNldD4KICAgICA8L2Vhcj4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95LWVhciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTExOCwyOCArMTE4LDI4IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3ktd2FyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuLXdhciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bndlYmNsaWVudC1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJlbWJlZGRlZHdlYiAoc3RhbmQtYWxvbmUgd2FyIGJhc2VkKSIvPgotCTwvYW50Y2FsbD4KKyAgICA8cGFyYW0gbmFtZT0idGVzdHN1aXRlLmlkIiB2YWx1ZT0iZW1iZWRkZWR3ZWIgKHN0YW5kLWFsb25lIHdhciBiYXNlZCkiLz4KKyAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi1lYXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW53ZWJjbGllbnQtY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0idGVzdHN1aXRlLmlkIiB2YWx1ZT0iZW1iZWRkZWR3ZWIgKGVhciBiYXNlZCkiLz4KLQk8L2FudGNhbGw+CisgICAgPHBhcmFtIG5hbWU9InRlc3RzdWl0ZS5pZCIgdmFsdWU9ImVtYmVkZGVkd2ViIChlYXIgYmFzZWQpIi8+CisgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveS1lYXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImV4dHJhLXBhcmFtcyIgdmFsdWU9Ii0tY2FzY2FkZT10cnVlIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveS13YXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL2Rlc2NyaXB0b3IvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9kZXNjcmlwdG9yL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sCmluZGV4IGRiMTI5ODAuLjk1N2I4ODQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL2Rlc2NyaXB0b3IvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvZGVzY3JpcHRvci9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbApAQCAtNTgsNCArNTgsNCBAQAogIDxyZXNvdXJjZS1hZGFwdGVyLWNvbmZpZyByZXNvdXJjZS1hZGFwdGVyLW5hbWU9IndlYi1zdWJjbGFzc2luZ0FwcCNqZGJjcmEiPgogICAgICAgPHByb3BlcnR5IG5hbWU9IlJBUHJvcGVydHkiIHZhbHVlPSJWQUxJRCI+PC9wcm9wZXJ0eT4KICAgICA8L3Jlc291cmNlLWFkYXB0ZXItY29uZmlnPgotPC9yZXNvdXJjZXM+IAorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCmluZGV4IDc5OTVjZTMuLjUxZjNiZWMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCkBAIC0yOSwyMCArMjksMjAgQEAKICAgICAgICAgPHJlcy1yZWYtbmFtZT5qZGJjL1NpbXBsZUJhbms8L3Jlcy1yZWYtbmFtZT4KICAgICAgICAgPGpuZGktbmFtZT5qYXZhOmFwcC9qZGJjL2VqYi1zdWJjbGFzc2luZzwvam5kaS1uYW1lPgogICAgICAgPC9yZXNvdXJjZS1yZWY+Ci0gICAgICA8aXMtcmVhZC1vbmx5LWJlYW4+ZmFsc2U8L2lzLXJlYWQtb25seS1iZWFuPiAKLSAgICAgIDxjb21taXQtb3B0aW9uPkI8L2NvbW1pdC1vcHRpb24+IAotICAgICA8YmVhbi1wb29sPiAKLSAgICAgICAgIDxzdGVhZHktcG9vbC1zaXplPjA8L3N0ZWFkeS1wb29sLXNpemU+IAotICAgICAgICAgPHJlc2l6ZS1xdWFudGl0eT4xPC9yZXNpemUtcXVhbnRpdHk+IAotICAgICAgICAgPG1heC1wb29sLXNpemU+MTA8L21heC1wb29sLXNpemU+IAotICAgICAgICAgPHBvb2wtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcG9vbC1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4gCi0gICAgICA8L2JlYW4tcG9vbD4gCi0gICAgICA8YmVhbi1jYWNoZT4gCi0gICAgICAgICAgPG1heC1jYWNoZS1zaXplPjEwMDwvbWF4LWNhY2hlLXNpemU+IAotICAgICAgICA8Y2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+NjA8L2NhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPiAKLSAgICAgICAgPHJlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPjM2MDA8L3JlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPiAKLSAgICAgICAgPHZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PkxSVTwvdmljdGltLXNlbGVjdGlvbi1wb2xpY3k+IAotICAgICAgPC9iZWFuLWNhY2hlPiAKKyAgICAgIDxpcy1yZWFkLW9ubHktYmVhbj5mYWxzZTwvaXMtcmVhZC1vbmx5LWJlYW4+CisgICAgICA8Y29tbWl0LW9wdGlvbj5CPC9jb21taXQtb3B0aW9uPgorICAgICA8YmVhbi1wb29sPgorICAgICAgICAgPHN0ZWFkeS1wb29sLXNpemU+MDwvc3RlYWR5LXBvb2wtc2l6ZT4KKyAgICAgICAgIDxyZXNpemUtcXVhbnRpdHk+MTwvcmVzaXplLXF1YW50aXR5PgorICAgICAgICAgPG1heC1wb29sLXNpemU+MTA8L21heC1wb29sLXNpemU+CisgICAgICAgICA8cG9vbC1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4zNjAwPC9wb29sLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPgorICAgICAgPC9iZWFuLXBvb2w+CisgICAgICA8YmVhbi1jYWNoZT4KKyAgICAgICAgICA8bWF4LWNhY2hlLXNpemU+MTAwPC9tYXgtY2FjaGUtc2l6ZT4KKyAgICAgICAgPGNhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjYwPC9jYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4KKyAgICAgICAgPHJlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPjM2MDA8L3JlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPgorICAgICAgICA8dmljdGltLXNlbGVjdGlvbi1wb2xpY3k+TFJVPC92aWN0aW0tc2VsZWN0aW9uLXBvbGljeT4KKyAgICAgIDwvYmVhbi1jYWNoZT4KICAgICA8L2VqYj4KICAgICA8ZWpiPgogICAgICAgPGVqYi1uYW1lPkN1c3RvbWVyQ2hlY2tpbmdFSkI8L2VqYi1uYW1lPgpAQCAtNTEsMjAgKzUxLDIwIEBACiAgICAgICAgIDxyZXMtcmVmLW5hbWU+amRiYy9TaW1wbGVCYW5rPC9yZXMtcmVmLW5hbWU+CiAgICAgICAgIDxqbmRpLW5hbWU+amF2YTphcHAvamRiYy9lamItc3ViY2xhc3Npbmc8L2puZGktbmFtZT4KICAgICAgIDwvcmVzb3VyY2UtcmVmPgotICAgICAgPGlzLXJlYWQtb25seS1iZWFuPmZhbHNlPC9pcy1yZWFkLW9ubHktYmVhbj4gCi0gICAgICA8Y29tbWl0LW9wdGlvbj5CPC9jb21taXQtb3B0aW9uPiAKLSAgICAgPGJlYW4tcG9vbD4gCi0gICAgICAgICA8c3RlYWR5LXBvb2wtc2l6ZT4wPC9zdGVhZHktcG9vbC1zaXplPiAKLSAgICAgICAgIDxyZXNpemUtcXVhbnRpdHk+MTwvcmVzaXplLXF1YW50aXR5PiAKLSAgICAgICAgIDxtYXgtcG9vbC1zaXplPjEwPC9tYXgtcG9vbC1zaXplPiAKKyAgICAgIDxpcy1yZWFkLW9ubHktYmVhbj5mYWxzZTwvaXMtcmVhZC1vbmx5LWJlYW4+CisgICAgICA8Y29tbWl0LW9wdGlvbj5CPC9jb21taXQtb3B0aW9uPgorICAgICA8YmVhbi1wb29sPgorICAgICAgICAgPHN0ZWFkeS1wb29sLXNpemU+MDwvc3RlYWR5LXBvb2wtc2l6ZT4KKyAgICAgICAgIDxyZXNpemUtcXVhbnRpdHk+MTwvcmVzaXplLXF1YW50aXR5PgorICAgICAgICAgPG1heC1wb29sLXNpemU+MTA8L21heC1wb29sLXNpemU+CiAgICAgICAgIDxwb29sLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjM2MDA8L3Bvb2wtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+Ci0gICAgICA8L2JlYW4tcG9vbD4gCi0gICAgICA8YmVhbi1jYWNoZT4gCisgICAgICA8L2JlYW4tcG9vbD4KKyAgICAgIDxiZWFuLWNhY2hlPgogICAgICAgICAgIDxtYXgtY2FjaGUtc2l6ZT4xMDA8L21heC1jYWNoZS1zaXplPgogICAgICAgICAgIDxjYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz42MDwvY2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+CiAgICAgICAgICAgPHJlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPjM2MDA8L3JlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPgogICAgICAgICAgIDx2aWN0aW0tc2VsZWN0aW9uLXBvbGljeT5MUlU8L3ZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PgotICAgICAgPC9iZWFuLWNhY2hlPiAKKyAgICAgIDwvYmVhbi1jYWNoZT4KICAgICA8L2VqYj4KICAgPC9lbnRlcnByaXNlLWJlYW5zPgogPC9zdW4tZWpiLWphcj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL2VqYi9DdXN0b21lci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvZWpiL0N1c3RvbWVyLmphdmEKaW5kZXggOGE5YjEwNS4uMTYwZWFiOSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvZWpiL0N1c3RvbWVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvZWpiL0N1c3RvbWVyLmphdmEKQEAgLTQ0LDQgKzQ0LDQgQEAKIAogfQogCi0gIAorCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9lamIvQ3VzdG9tZXJDaGVja2luZy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvZWpiL0N1c3RvbWVyQ2hlY2tpbmcuamF2YQppbmRleCA2MWRlMjkxLi5iMzQxYzM0IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9lamIvQ3VzdG9tZXJDaGVja2luZy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL2VqYi9DdXN0b21lckNoZWNraW5nLmphdmEKQEAgLTIwLDQgKzIwLDQgQEAKIHsKIH0KIAotICAKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvZWpiL0N1c3RvbWVyQ2hlY2tpbmdFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL2VqYi9DdXN0b21lckNoZWNraW5nRUpCLmphdmEKaW5kZXggZWUwZDE3Yy4uNGI1NDQ0NCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvZWpiL0N1c3RvbWVyQ2hlY2tpbmdFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9lamIvQ3VzdG9tZXJDaGVja2luZ0VKQi5qYXZhCkBAIC05NCw1ICs5NCw1IEBACiAgIH0KIAogfQotICAgIAotICAgIAorCisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL2VqYi9DdXN0b21lckVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvZWpiL0N1c3RvbWVyRUpCLmphdmEKaW5kZXggMDUyMGI2MC4uMDcyMjBkYiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvZWpiL0N1c3RvbWVyRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvZWpiL0N1c3RvbWVyRUpCLmphdmEKQEAgLTUzLDcgKzUzLDcgQEAKIAogICBwdWJsaWMgU3RyaW5nIGdldEFkZHJlc3MxKCkKICAgewotICAgIHJldHVybiBhZGRyZXNzMTsgCisgICAgcmV0dXJuIGFkZHJlc3MxOwogICB9CiAKICAgcHVibGljIFN0cmluZyBnZXRBZGRyZXNzMigpCkBAIC0xMzksNyArMTM5LDcgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTUUwgZXhjZXB0aW9uIG9jY3VyZWQgaW4gZWpiUmVtb3ZlIG1ldGhvZCIpOwogICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgfQotICAgIAorCiAgIH0KIAogICBwdWJsaWMgdm9pZCBlamJTdG9yZSgpCkBAIC0yMDYsMTIgKzIwNiwxMiBAQAogICAgIH0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CiAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNRTEV4Y2VwdGlvbiBvY2N1cnJlZCBpbiBlamJMb2FkKCkgbWV0aG9kIik7CiAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0gICAKKyAgICB9CiAgIH0KIAogICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHt9CiAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHt9CiB9Ci0gICAgICAKLSAgICAKLSAgICAKKworCisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL2VqYi9DdXN0b21lclNhdmluZ3MuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL2VqYi9DdXN0b21lclNhdmluZ3MuamF2YQppbmRleCAzMzhjOTIxLi44ODNlMDRhIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9lamIvQ3VzdG9tZXJTYXZpbmdzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvZWpiL0N1c3RvbWVyU2F2aW5ncy5qYXZhCkBAIC0yMCw0ICsyMCw0IEBACiB7CiB9CiAKLSAgCisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL2VqYi9DdXN0b21lclNhdmluZ3NFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL2VqYi9DdXN0b21lclNhdmluZ3NFSkIuamF2YQppbmRleCBmMzBiNTA2Li5iMGNlN2I1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9lamIvQ3VzdG9tZXJTYXZpbmdzRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvZWpiL0N1c3RvbWVyU2F2aW5nc0VKQi5qYXZhCkBAIC05NSw2ICs5NSw2IEBACiAgIH0KIAogfQotICAgICAgCi0gICAgCi0gICAgCisKKworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvYnVpbGQucHJvcGVydGllcwppbmRleCBlZTJlY2EwLi5mZDIxYzNkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE0LDcgKzE0LDcgQEAKICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAjCiAKLSAgICAKKwogIyMjIENvbXBvbmVudCBQcm9wZXJ0aWVzICMjIwogc3JjLmRpcj1zcmMKIGNvbXBvbmVudC5wdWJsaXNoLmhvbWU9LgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvYnVpbGQueG1sCmluZGV4IGViZWE4N2IuLjM0ZjYzNjYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9idWlsZC54bWwKQEAgLTIzLDYyICsyMyw2MiBAQAogCiA8cHJvamVjdCBuYW1lPSJKREJDQ29ubmVjdG9yIHRvcCBsZXZlbCIgZGVmYXVsdD0iYnVpbGQiPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJwa2cuZGlyIiB2YWx1ZT0iY29tL3N1bi9qZGJjcmEvc3BpIi8+Ci0gICAgCisKICAgICAmY29tbW9uOwogICAgICZ0ZXN0Y29tbW9uOwogICAgIDxwcm9wZXJ0eSBmaWxlPSIuL2J1aWxkLnByb3BlcnRpZXMiLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUsYXNzZW1ibGUiIC8+Ci0gICAgICAgICAgCisKIAogICAgIDwhLS0gaW5pdC4gSW5pdGlhbGl6YXRpb24gaW52b2x2ZXMgY3JlYXRpbmcgcHVibGlzaGluZyBkaXJlY3RvcmllcyBhbmQKLSAgICAgICAgIE9TIHNwZWNpZmljIHRhcmdldHMuIC0tPiAKKyAgICAgICAgIE9TIHNwZWNpZmljIHRhcmdldHMuIC0tPgogICAgIDx0YXJnZXQgbmFtZT0iaW5pdCIgZGVzY3JpcHRpb249IiR7Y29tcG9uZW50Lm5hbWV9IGluaXRpYWxpemF0aW9uIj4KICAgICAgICAgPHRzdGFtcD4KICAgICAgICAgICAgIDxmb3JtYXQgcHJvcGVydHk9InN0YXJ0LnRpbWUiIHBhdHRlcm49Ik1NL2RkL3l5eXkgaGg6bW0gYWEiLz4KLSAgICAgICAgPC90c3RhbXA+ICAgIAorICAgICAgICA8L3RzdGFtcD4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iQnVpbGRpbmcgY29tcG9uZW50ICR7Y29tcG9uZW50Lm5hbWV9Ii8+CiAgICAgICAgIDxta2RpciBkaXI9IiR7Y29tcG9uZW50LmNsYXNzZXMuZGlyfSIvPgotICAgICAgICA8bWtkaXIgZGlyPSIke2NvbXBvbmVudC5saWIuaG9tZX0iLz4gICAgCisgICAgICAgIDxta2RpciBkaXI9IiR7Y29tcG9uZW50LmxpYi5ob21lfSIvPgogICAgIDwvdGFyZ2V0PgotICAgIDwhLS0gY29tcGlsZSAtLT4gCisgICAgPCEtLSBjb21waWxlIC0tPgogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iaW5pdCIKLSAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJDb21waWxlIGNvbS9zdW4vKiBjb20vaXBsYW5ldC8qIHNvdXJjZXMiPiAgCisgICAgICAgICAgICBkZXNjcmlwdGlvbj0iQ29tcGlsZSBjb20vc3VuLyogY29tL2lwbGFuZXQvKiBzb3VyY2VzIj4KICAgICAgICAgPCEtLTxlY2hvIG1lc3NhZ2U9IkNvbm5lY3RvciBhcGkgcmVzaWRlcyBpbiAke2Nvbm5lY3Rvci1hcGkuamFyfSIvPi0tPgotICAgICAgICA8amF2YWMgc3JjZGlyPSIke3NyYy5kaXJ9IiAKKyAgICAgICAgPGphdmFjIHNyY2Rpcj0iJHtzcmMuZGlyfSIKICAgICAgICAgICAgICAgIGRlc3RkaXI9IiR7Y29tcG9uZW50LmNsYXNzZXMuZGlyfSIKLQkgICAgICAgZmFpbG9uZXJyb3I9InRydWUiPgotCSAgICAgICA8Y2xhc3NwYXRoPgotCSAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LlMxQVNfSE9NRX0vbW9kdWxlcyI+Ci0JICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqLyouamFyIiAvPgotCSAgICAgICAgICA8L2ZpbGVzZXQ+Ci0JICAgICAgIDwvY2xhc3NwYXRoPgorICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSI+CisgICAgICAgICAgIDxjbGFzc3BhdGg+CisgICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuUzFBU19IT01FfS9tb2R1bGVzIj4KKyAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKiovKi5qYXIiIC8+CisgICAgICAgICAgICAgIDwvZmlsZXNldD4KKyAgICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJjb20vc3VuL2pkYmNyYS8qKiIvPgogICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iY29tL3N1bi9hcHBzZXJ2LyoqIi8+CiAgICAgICAgIDwvamF2YWM+CiAgICAgPC90YXJnZXQ+Ci0gICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkIi8+CiAKLSAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUiPiAgICAKLSAgICAJCi0JPGphciBqYXJmaWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vamRiYy5qYXIiIAotICAgICAgICAgICAgYmFzZWRpcj0iJHtjb21wb25lbnQuY2xhc3Nlcy5kaXJ9IiBpbmNsdWRlcz0iJHtwa2cuZGlyfS8qKi8qLCAKLSAgICAgICAgICAgIGNvbS9zdW4vYXBwc2Vydi8qKi8qLCBjb20vc3VuL2pkYmNyYS91dGlsLyoqLyosIGNvbS9zdW4vamRiY3JhL2NvbW1vbi8qKi8qIi8+IAotICAgCQotICAgICAgICA8Y29weSBmaWxlPSIke3NyYy5kaXJ9L2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvcmEtZHMueG1sIiAKLSAgICAgICAgICAgICAgICB0b2ZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4JCisgICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIj4KKworICAgIDxqYXIgamFyZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L2pkYmMuamFyIgorICAgICAgICAgICAgYmFzZWRpcj0iJHtjb21wb25lbnQuY2xhc3Nlcy5kaXJ9IiBpbmNsdWRlcz0iJHtwa2cuZGlyfS8qKi8qLAorICAgICAgICAgICAgY29tL3N1bi9hcHBzZXJ2LyoqLyosIGNvbS9zdW4vamRiY3JhL3V0aWwvKiovKiwgY29tL3N1bi9qZGJjcmEvY29tbW9uLyoqLyoiLz4KKworICAgICAgICA8Y29weSBmaWxlPSIke3NyYy5kaXJ9L2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvcmEtZHMueG1sIgorICAgICAgICAgICAgICAgIHRvZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgogICAgICAgICA8L2NvcHk+Ci0gICAJPGphciBqYXJmaWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vamRiY3JhLnJhciIgCi0JCWJhc2VkaXI9IiR7Y29tcG9uZW50LmxpYi5ob21lfSIgaW5jbHVkZXM9ImpkYmMuamFyIj4KKyAgICAgICA8amFyIGphcmZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9qZGJjcmEucmFyIgorICAgICAgICBiYXNlZGlyPSIke2NvbXBvbmVudC5saWIuaG9tZX0iIGluY2x1ZGVzPSJqZGJjLmphciI+CiAKLSAgIAkJPG1ldGFpbmYgZGlyPSIke2NvbXBvbmVudC5saWIuaG9tZX0iPgotICAgCQkJPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+Ci0gICAJCTwvbWV0YWluZj4KLSAgIAk8L2phcj4KKyAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2NvbXBvbmVudC5saWIuaG9tZX0iPgorICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+CisgICAgICAgICAgIDwvbWV0YWluZj4KKyAgICAgICA8L2phcj4KIAotICAgCTxkZWxldGUgZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L3JhLnhtbCIvPgotCQorICAgICAgIDxkZWxldGUgZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L3JhLnhtbCIvPgorCiAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVzY3JpcHRpb249IkNsZWFuIHRoZSBidWlsZCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9hcHBzZXJ2L2pkYmNyYS9EYXRhU291cmNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9hcHBzZXJ2L2pkYmNyYS9EYXRhU291cmNlLmphdmEKaW5kZXggOWY4Mzk5YS4uYjZlZjMwYiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vYXBwc2Vydi9qZGJjcmEvRGF0YVNvdXJjZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2FwcHNlcnYvamRiY3JhL0RhdGFTb3VyY2UuamF2YQpAQCAtMjAsMTUgKzIwLDE1IEBACiBpbXBvcnQgamF2YS5zcWwuU1FMRXhjZXB0aW9uOwogCiAvKioKLSAqIFRoZSA8Y29kZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29kZT4gaW1wbGVtZW50YXRpb24gb2YgU3VuT05FIGFwcGxpY2F0aW9uIAorICogVGhlIDxjb2RlPmphdmF4LnNxbC5EYXRhU291cmNlPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBvZiBTdW5PTkUgYXBwbGljYXRpb24KICAqIHNlcnZlciB3aWxsIGltcGxlbWVudCB0aGlzIGludGVyZmFjZS4gQW4gYXBwbGljYXRpb24gcHJvZ3JhbSB3b3VsZCBiZSBhYmxlCi0gKiB0byB1c2UgdGhpcyBpbnRlcmZhY2UgdG8gZG8gdGhlIGV4dGVuZGVkIGZ1bmN0aW9uYWxpdHkgZXhwb3NlZCBieSBTdW5PTkUgCisgKiB0byB1c2UgdGhpcyBpbnRlcmZhY2UgdG8gZG8gdGhlIGV4dGVuZGVkIGZ1bmN0aW9uYWxpdHkgZXhwb3NlZCBieSBTdW5PTkUKICAqIGFwcGxpY2F0aW9uIHNlcnZlci4KLSAqIDxwPkEgc2FtcGxlIGNvZGUgZm9yIGdldHRpbmcgZHJpdmVyJ3MgY29ubmVjdGlvbiBpbXBsZW1lbnRhdGlvbiB3b3VsZCBsaWtlIAorICogPHA+QSBzYW1wbGUgY29kZSBmb3IgZ2V0dGluZyBkcml2ZXIncyBjb25uZWN0aW9uIGltcGxlbWVudGF0aW9uIHdvdWxkIGxpa2UKICAqIHRoZSBmb2xsb3dpbmcuCiAgKiA8cHJlPgogICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICBjb20uc3VuLmFwcHNlcnYuRGF0YVNvdXJjZSBkcyA9IChjb20uc3VuLmFwcHNlcnYuRGF0YVNPdXJjZSkgaWMubG9va3VwKCJqZGJjL1BvaW50QmFzZSIpOyAKKyAgICAgY29tLnN1bi5hcHBzZXJ2LkRhdGFTb3VyY2UgZHMgPSAoY29tLnN1bi5hcHBzZXJ2LkRhdGFTT3VyY2UpIGljLmxvb2t1cCgiamRiYy9Qb2ludEJhc2UiKTsKICAgICAgQ29ubmVjdGlvbiBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7CiAgICAgIENvbm5lY3Rpb24gZHJpdmVyY29uID0gZHMuZ2V0Q29ubmVjdGlvbihjb24pOwogCkBAIC0zNiwxMyArMzYsMTMgQEAKIAogICAgICBjb24uY2xvc2UoKTsKICAgIDwvcHJlPgotICogCisgKgogICogQGF1dGhvciBCaW5vZCBQLkcKICAqLwogcHVibGljIGludGVyZmFjZSBEYXRhU291cmNlIGV4dGVuZHMgamF2YXguc3FsLkRhdGFTb3VyY2UgewogCiAgICAgLyoqCi0gICAgICogUmV0cmlldmVzIHRoZSBhY3R1YWwgU1FMQ29ubmVjdGlvbiBmcm9tIHRoZSBDb25uZWN0aW9uIHdyYXBwZXIgCisgICAgICogUmV0cmlldmVzIHRoZSBhY3R1YWwgU1FMQ29ubmVjdGlvbiBmcm9tIHRoZSBDb25uZWN0aW9uIHdyYXBwZXIKICAgICAgKiBpbXBsZW1lbnRhdGlvbiBvZiBTdW5PTkUgYXBwbGljYXRpb24gc2VydmVyLiBJZiBhbiBhY3R1YWwgY29ubmVjdGlvbiBpcwogICAgICAqIHN1cHBsaWVkIGFzIGFyZ3VtZW50LCB0aGVuIGl0IHdpbGwgYmUganVzdCByZXR1cm5lZC4KICAgICAgKgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlT2JqZWN0QnVpbGRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlT2JqZWN0QnVpbGRlci5qYXZhCmluZGV4IDcwMDI5ZjEuLmU5NjZmOTggMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VPYmplY3RCdWlsZGVyLmphdmEKQEAgLTI3LDIyICsyNywyMiBAQAogaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsKIGltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsKIC8qKgotICogVXRpbGl0eSBjbGFzcywgd2hpY2ggd291bGQgY3JlYXRlIG5lY2Vzc2FyeSBEYXRhc291cmNlIG9iamVjdCBhY2NvcmRpbmcgdG8gdGhlIAorICogVXRpbGl0eSBjbGFzcywgd2hpY2ggd291bGQgY3JlYXRlIG5lY2Vzc2FyeSBEYXRhc291cmNlIG9iamVjdCBhY2NvcmRpbmcgdG8gdGhlCiAgKiBzcGVjaWZpY2F0aW9uLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMjMKLSAqIEBhdXRob3IJQmlub2QgUC5HCi0gKiBAc2VlCQljb20uc3VuLmpkYmNyYS5jb21tb24uRGF0YVNvdXJjZVNwZWMKLSAqIEBzZWUJCWNvbS5zdW4uamRiY3JhLnV0aWwuTWV0aG9kRXhjZWN1dG9yCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzIzCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRworICogQHNlZSAgICAgICAgY29tLnN1bi5qZGJjcmEuY29tbW9uLkRhdGFTb3VyY2VTcGVjCisgKiBAc2VlICAgICAgICBjb20uc3VuLmpkYmNyYS51dGlsLk1ldGhvZEV4Y2VjdXRvcgogICovCiBwdWJsaWMgY2xhc3MgRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIgaW1wbGVtZW50cyBqYXZhLmlvLlNlcmlhbGl6YWJsZXsKIAogICAgIHByaXZhdGUgRGF0YVNvdXJjZVNwZWMgc3BlYzsKLSAgICAKKwogICAgIHByaXZhdGUgSGFzaHRhYmxlIGRyaXZlclByb3BlcnRpZXMgPSBudWxsOwotICAgIAotICAgIHByaXZhdGUgTWV0aG9kRXhlY3V0b3IgZXhlY3V0b3IgPSBudWxsOyAgICAKLSAgICAKKworICAgIHByaXZhdGUgTWV0aG9kRXhlY3V0b3IgZXhlY3V0b3IgPSBudWxsOworCiAgICAgcHJpdmF0ZSBzdGF0aWMgTG9nZ2VyIF9sb2dnZXI7CiAgICAgc3RhdGljIHsKICAgICAgICAgX2xvZ2dlciA9IExvZ2dlci5nZXRBbm9ueW1vdXNMb2dnZXIoKTsKQEAgLTUwLDE2OSArNTAsMTY5IEBACiAgICAgcHJpdmF0ZSBib29sZWFuIGRlYnVnID0gZmFsc2U7CiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0IGEgRGF0YVNvdXJjZSBPYmplY3QgZnJvbSB0aGUgc3BlYy4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0Jc3BlYwk8Y29kZT4gRGF0YVNvdXJjZVNwZWMgPC9jb2RlPiBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3BlYyAgICA8Y29kZT4gRGF0YVNvdXJjZVNwZWMgPC9jb2RlPiBvYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIERhdGFTb3VyY2VPYmplY3RCdWlsZGVyKERhdGFTb3VyY2VTcGVjIHNwZWMpIHsKLSAgICAJdGhpcy5zcGVjID0gc3BlYzsKLSAgICAJZXhlY3V0b3IgPSBuZXcgTWV0aG9kRXhlY3V0b3IoKTsKKyAgICAgICAgdGhpcy5zcGVjID0gc3BlYzsKKyAgICAgICAgZXhlY3V0b3IgPSBuZXcgTWV0aG9kRXhlY3V0b3IoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3QgdGhlIERhdGFTb3VyY2UgT2JqZWN0IGZyb20gdGhlIHNwZWMuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCU9iamVjdCBjb25zdHJ1Y3RlZCB1c2luZyB0aGUgRGF0YVNvdXJjZVNwZWMuCi0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4gaWYgdGhlIGNsYXNzIGlzIG5vdCBmb3VuZCBvciBzb21lIGlzc3VlIGluIGV4ZWN1dGluZwotICAgICAqCQlzb21lIG1ldGhvZC4KKyAgICAgKiBAcmV0dXJuICAgIE9iamVjdCBjb25zdHJ1Y3RlZCB1c2luZyB0aGUgRGF0YVNvdXJjZVNwZWMuCisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4gaWYgdGhlIGNsYXNzIGlzIG5vdCBmb3VuZCBvciBzb21lIGlzc3VlIGluIGV4ZWN1dGluZworICAgICAqICAgICAgICBzb21lIG1ldGhvZC4KICAgICAgKi8KICAgICBwdWJsaWMgT2JqZWN0IGNvbnN0cnVjdERhdGFTb3VyY2VPYmplY3QoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb257Ci0gICAgCWRyaXZlclByb3BlcnRpZXMgPSBwYXJzZURyaXZlclByb3BlcnRpZXMoc3BlYyk7CisgICAgICAgIGRyaXZlclByb3BlcnRpZXMgPSBwYXJzZURyaXZlclByb3BlcnRpZXMoc3BlYyk7CiAgICAgICAgIE9iamVjdCBkYXRhU291cmNlT2JqZWN0ID0gZ2V0RGF0YVNvdXJjZU9iamVjdCgpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlYzLVRFU1QgOiAiICArIGRhdGFTb3VyY2VPYmplY3QpOwogICAgICAgICBNZXRob2RbXSBtZXRob2RzID0gZGF0YVNvdXJjZU9iamVjdC5nZXRDbGFzcygpLmdldE1ldGhvZHMoKTsKICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgbWV0aG9kcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgU3RyaW5nIG1ldGhvZE5hbWUgPSBtZXRob2RzW2ldLmdldE5hbWUoKTsKLQkgICAgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0VXNlciIpKXsJICAgIAkKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlVTRVJOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRQYXNzd29yZCIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBBU1NXT1JEKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRMb2dpblRpbWVPdXQiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dJTlRJTUVPVVQpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldExvZ1dyaXRlciIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR1dSSVRFUiksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0RGF0YWJhc2VOYW1lIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQUJBU0VOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXREYXRhU291cmNlTmFtZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXREZXNjcmlwdGlvbiIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFU0NSSVBUSU9OKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TmV0d29ya1Byb3RvY29sIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTkVUV09SS1BST1RPQ09MKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRQb3J0TnVtYmVyIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUE9SVE5VTUJFUiksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0Um9sZU5hbWUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ST0xFTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAkJICAgIAkKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0U2VydmVyTmFtZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlNFUlZFUk5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWF4U3RhdGVtZW50cyIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1BWFNUQVRFTUVOVFMpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldEluaXRpYWxQb29sU2l6ZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLklOSVRJQUxQT09MU0laRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAkKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWluUG9vbFNpemUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NSU5QT09MU0laRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWF4UG9vbFNpemUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NQVhQT09MU0laRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAkKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWF4SWRsZVRpbWUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NQVhJRExFVElNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAkKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0UHJvcGVydHlDeWNsZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBST1BFUlRZQ1lDTEUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChkcml2ZXJQcm9wZXJ0aWVzLmNvbnRhaW5zS2V5KG1ldGhvZE5hbWUudG9VcHBlckNhc2UoKSkpewotCSAgICAJVmVjdG9yIHZhbHVlcyA9IChWZWN0b3IpIGRyaXZlclByb3BlcnRpZXMuZ2V0KG1ldGhvZE5hbWUudG9VcHBlckNhc2UoKSk7Ci0JICAgICAgICBleGVjdXRvci5ydW5NZXRob2QobWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0LCB2YWx1ZXMpOwotCSAgICB9CisgICAgICAgIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFVzZXIiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5VU0VSTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0UGFzc3dvcmQiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QQVNTV09SRCksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TG9naW5UaW1lT3V0IikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HSU5USU1FT1VUKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRMb2dXcml0ZXIiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dXUklURVIpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldERhdGFiYXNlTmFtZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFCQVNFTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0RGF0YVNvdXJjZU5hbWUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBU09VUkNFTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0RGVzY3JpcHRpb24iKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERVNDUklQVElPTiksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TmV0d29ya1Byb3RvY29sIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTkVUV09SS1BST1RPQ09MKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRQb3J0TnVtYmVyIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUE9SVE5VTUJFUiksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0Um9sZU5hbWUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ST0xFTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0U2VydmVyTmFtZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlNFUlZFUk5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1heFN0YXRlbWVudHMiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NQVhTVEFURU1FTlRTKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRJbml0aWFsUG9vbFNpemUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5JTklUSUFMUE9PTFNJWkUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1pblBvb2xTaXplIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUlOUE9PTFNJWkUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1heFBvb2xTaXplIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUFYUE9PTFNJWkUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1heElkbGVUaW1lIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUFYSURMRVRJTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFByb3BlcnR5Q3ljbGUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QUk9QRVJUWUNZQ0xFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAoZHJpdmVyUHJvcGVydGllcy5jb250YWluc0tleShtZXRob2ROYW1lLnRvVXBwZXJDYXNlKCkpKXsKKyAgICAgICAgICAgIFZlY3RvciB2YWx1ZXMgPSAoVmVjdG9yKSBkcml2ZXJQcm9wZXJ0aWVzLmdldChtZXRob2ROYW1lLnRvVXBwZXJDYXNlKCkpOworICAgICAgICAgICAgZXhlY3V0b3IucnVuTWV0aG9kKG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCwgdmFsdWVzKTsKKyAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBkYXRhU291cmNlT2JqZWN0OwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgZXh0cmEgZHJpdmVyIHByb3BlcnRpZXMgZnJvbSB0aGUgRGF0YVNvdXJjZVNwZWMgb2JqZWN0IGFuZAogICAgICAqIHBhcnNlIHRoZW0gdG8gYSBzZXQgb2YgbWV0aG9kTmFtZSBhbmQgcGFyYW1ldGVycy4gUHJlcGFyZSBhIGhhc2h0YWJsZQogICAgICAqIGNvbnRhaW5pbmcgdGhlc2UgZGV0YWlscyBhbmQgcmV0dXJuLgogICAgICAqCi0gICAgICogQHBhcmFtCXNwZWMJPGNvZGU+IERhdGFTb3VyY2VTcGVjIDwvY29kZT4gb2JqZWN0LgotICAgICAqIEByZXR1cm4JSGFzaHRhYmxlIGNvbnRhaW5pbmcgbWV0aG9kIG5hbWVzIGFuZCBwYXJhbWV0ZXJzLAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JSWYgZGVsaW1pdGVyIGlzIG5vdCBwcm92aWRlZCBhbmQgcHJvcGVydHkgc3RyaW5nCi0gICAgICoJCQkJCWlzIG5vdCBudWxsLgorICAgICAqIEBwYXJhbSAgICBzcGVjICAgIDxjb2RlPiBEYXRhU291cmNlU3BlYyA8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcmV0dXJuICAgIEhhc2h0YWJsZSBjb250YWluaW5nIG1ldGhvZCBuYW1lcyBhbmQgcGFyYW1ldGVycywKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIElmIGRlbGltaXRlciBpcyBub3QgcHJvdmlkZWQgYW5kIHByb3BlcnR5IHN0cmluZworICAgICAqICAgICAgICAgICAgICAgICAgICBpcyBub3QgbnVsbC4KICAgICAgKi8KICAgICBwcml2YXRlIEhhc2h0YWJsZSBwYXJzZURyaXZlclByb3BlcnRpZXMoRGF0YVNvdXJjZVNwZWMgc3BlYykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewotICAgIAlTdHJpbmcgZGVsaW0gPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERUxJTUlURVIpOworICAgICAgICBTdHJpbmcgZGVsaW0gPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERUxJTUlURVIpOwogCiAgICAgICAgIFN0cmluZyBwcm9wID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuRFJJVkVSUFJPUEVSVElFUyk7Ci0JaWYgKCBwcm9wID09IG51bGwgfHwgcHJvcC50cmltKCkuZXF1YWxzKCIiKSkgewotCSAgICByZXR1cm4gbmV3IEhhc2h0YWJsZSgpOwotCX0gZWxzZSBpZiAoZGVsaW0gPT0gbnVsbCB8fCBkZWxpbS5lcXVhbHMoIiIpKSB7Ci0JICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbiAoIkRlbGltaXRlciBpcyBub3QgcHJvdmlkZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24iKTsKLQl9Ci0JCi0JSGFzaHRhYmxlIHByb3BlcnRpZXMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0JZGVsaW0gPSBkZWxpbS50cmltKCk7CQotCVN0cmluZyBzZXAgPSBkZWxpbStkZWxpbTsKLQlpbnQgc2VwTGVuID0gc2VwLmxlbmd0aCgpOwotCVN0cmluZyBjYWNoZSA9IHByb3A7Ci0JVmVjdG9yIG1ldGhvZHMgPSBuZXcgVmVjdG9yKCk7Ci0JCi0Jd2hpbGUgKGNhY2hlLmluZGV4T2Yoc2VwKSAhPSAtMSkgewotCSAgICBpbnQgaW5kZXggPSBjYWNoZS5pbmRleE9mKHNlcCk7Ci0JICAgIFN0cmluZyBuYW1lID0gY2FjaGUuc3Vic3RyaW5nKDAsaW5kZXgpOwotCSAgICBpZiAobmFtZS50cmltKCkgIT0gIiIpIHsKLQkgICAgICAgIG1ldGhvZHMuYWRkKG5hbWUpOwotCSAgICAJY2FjaGUgPSBjYWNoZS5zdWJzdHJpbmcoaW5kZXgrc2VwTGVuKTsKLQkgICAgfQotCX0KLQkKLSAgICAJRW51bWVyYXRpb24gYWxsTWV0aG9kcyA9IG1ldGhvZHMuZWxlbWVudHMoKTsKLSAgICAJd2hpbGUgKGFsbE1ldGhvZHMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAJICAgIFN0cmluZyBvbmVNZXRob2QgPSAoU3RyaW5nKSBhbGxNZXRob2RzLm5leHRFbGVtZW50KCk7ICAgIAkgICAgCi0gICAgCSAgICBpZiAoIW9uZU1ldGhvZC50cmltKCkuZXF1YWxzKCIiKSkgewotICAgIAkgICAgCVN0cmluZyBtZXRob2ROYW1lID0gbnVsbDsKLSAgICAJICAgIAlWZWN0b3IgcGFybXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgCSAgICAJU3RyaW5nVG9rZW5pemVyIG1ldGhvZERldGFpbHMgPSBuZXcgU3RyaW5nVG9rZW5pemVyKG9uZU1ldGhvZCxkZWxpbSk7Ci0JCWZvciAoaW50IGk9MDsgbWV0aG9kRGV0YWlscy5oYXNNb3JlVG9rZW5zKCk7aSsrICkgewotCQkgICAgU3RyaW5nIHRva2VuID0gKFN0cmluZykgbWV0aG9kRGV0YWlscy5uZXh0VG9rZW4oKTsKLQkJICAgIGlmIChpPT0wKSB7Ci0JCSAgICAJbWV0aG9kTmFtZSA9IHRva2VuLnRvVXBwZXJDYXNlKCk7Ci0JCSAgICB9IGVsc2UgewotCQkgICAgCXBhcm1zLmFkZCh0b2tlbik7CQkgICAgCQotCQkgICAgfQotCQl9Ci0JCXByb3BlcnRpZXMucHV0KG1ldGhvZE5hbWUscGFybXMpOwotICAgIAkgICAgfSAgICAJICAgIAotICAgIAl9Ci0gICAgCXJldHVybiBwcm9wZXJ0aWVzOworICAgIGlmICggcHJvcCA9PSBudWxsIHx8IHByb3AudHJpbSgpLmVxdWFscygiIikpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBIYXNodGFibGUoKTsKKyAgICB9IGVsc2UgaWYgKGRlbGltID09IG51bGwgfHwgZGVsaW0uZXF1YWxzKCIiKSkgeworICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24gKCJEZWxpbWl0ZXIgaXMgbm90IHByb3ZpZGVkIGluIHRoZSBjb25maWd1cmF0aW9uIik7CiAgICAgfQotICAgIAorCisgICAgSGFzaHRhYmxlIHByb3BlcnRpZXMgPSBuZXcgSGFzaHRhYmxlKCk7CisgICAgZGVsaW0gPSBkZWxpbS50cmltKCk7CisgICAgU3RyaW5nIHNlcCA9IGRlbGltK2RlbGltOworICAgIGludCBzZXBMZW4gPSBzZXAubGVuZ3RoKCk7CisgICAgU3RyaW5nIGNhY2hlID0gcHJvcDsKKyAgICBWZWN0b3IgbWV0aG9kcyA9IG5ldyBWZWN0b3IoKTsKKworICAgIHdoaWxlIChjYWNoZS5pbmRleE9mKHNlcCkgIT0gLTEpIHsKKyAgICAgICAgaW50IGluZGV4ID0gY2FjaGUuaW5kZXhPZihzZXApOworICAgICAgICBTdHJpbmcgbmFtZSA9IGNhY2hlLnN1YnN0cmluZygwLGluZGV4KTsKKyAgICAgICAgaWYgKG5hbWUudHJpbSgpICE9ICIiKSB7CisgICAgICAgICAgICBtZXRob2RzLmFkZChuYW1lKTsKKyAgICAgICAgICAgIGNhY2hlID0gY2FjaGUuc3Vic3RyaW5nKGluZGV4K3NlcExlbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAgICAgRW51bWVyYXRpb24gYWxsTWV0aG9kcyA9IG1ldGhvZHMuZWxlbWVudHMoKTsKKyAgICAgICAgd2hpbGUgKGFsbE1ldGhvZHMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKKyAgICAgICAgICAgIFN0cmluZyBvbmVNZXRob2QgPSAoU3RyaW5nKSBhbGxNZXRob2RzLm5leHRFbGVtZW50KCk7CisgICAgICAgICAgICBpZiAoIW9uZU1ldGhvZC50cmltKCkuZXF1YWxzKCIiKSkgeworICAgICAgICAgICAgICAgIFN0cmluZyBtZXRob2ROYW1lID0gbnVsbDsKKyAgICAgICAgICAgICAgICBWZWN0b3IgcGFybXMgPSBuZXcgVmVjdG9yKCk7CisgICAgICAgICAgICAgICAgU3RyaW5nVG9rZW5pemVyIG1ldGhvZERldGFpbHMgPSBuZXcgU3RyaW5nVG9rZW5pemVyKG9uZU1ldGhvZCxkZWxpbSk7CisgICAgICAgIGZvciAoaW50IGk9MDsgbWV0aG9kRGV0YWlscy5oYXNNb3JlVG9rZW5zKCk7aSsrICkgeworICAgICAgICAgICAgU3RyaW5nIHRva2VuID0gKFN0cmluZykgbWV0aG9kRGV0YWlscy5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAgIGlmIChpPT0wKSB7CisgICAgICAgICAgICAgICAgbWV0aG9kTmFtZSA9IHRva2VuLnRvVXBwZXJDYXNlKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHBhcm1zLmFkZCh0b2tlbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcHJvcGVydGllcy5wdXQobWV0aG9kTmFtZSxwYXJtcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHByb3BlcnRpZXM7CisgICAgfQorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIERhdGFzb3VyY2Ugb2JqZWN0IGFjY29yZGluZyB0byB0aGUgc3BlYy4KICAgICAgKgotICAgICAqIEByZXR1cm4JSW5pdGlhbCBEYXRhU291cmNlIE9iamVjdCBpbnN0YW5jZS4KLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiBJZiBjbGFzcyBuYW1lIGlzIHdyb25nIG9yIGNsYXNzcGF0aCBpcyBub3Qgc2V0Ci0gICAgICoJCXByb3Blcmx5LgorICAgICAqIEByZXR1cm4gICAgSW5pdGlhbCBEYXRhU291cmNlIE9iamVjdCBpbnN0YW5jZS4KKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiBJZiBjbGFzcyBuYW1lIGlzIHdyb25nIG9yIGNsYXNzcGF0aCBpcyBub3Qgc2V0CisgICAgICogICAgICAgIHByb3Blcmx5LgogICAgICAqLwogICAgIHByaXZhdGUgT2JqZWN0IGdldERhdGFTb3VyY2VPYmplY3QoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb257Ci0gICAgCVN0cmluZyBjbGFzc05hbWUgPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DTEFTU05BTUUpOwotICAgICAgICB0cnkgeyAgICAgICAgICAgIAorICAgICAgICBTdHJpbmcgY2xhc3NOYW1lID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ0xBU1NOQU1FKTsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENsYXNzIGRhdGFTb3VyY2VDbGFzcyA9IENsYXNzLmZvck5hbWUoY2xhc3NOYW1lKTsKICAgICAgICAgICAgIE9iamVjdCBkYXRhU291cmNlT2JqZWN0ID0gZGF0YVNvdXJjZUNsYXNzLm5ld0luc3RhbmNlKCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlYzLVRFU1QgOiAiICArIGRhdGFTb3VyY2VPYmplY3QpOwogICAgICAgICAgICAgcmV0dXJuIGRhdGFTb3VyY2VPYmplY3Q7CiAgICAgICAgIH0gY2F0Y2goQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBjZm5lKXsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfY25mZV9kcyIsIGNmbmUpOwotCQorICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19jbmZlX2RzIiwgY2ZuZSk7CisKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQ2xhc3MgTmFtZSBpcyB3cm9uZyBvciBDbGFzcyBwYXRoIGlzIG5vdCBzZXQgZm9yIDoiICsgY2xhc3NOYW1lKTsKICAgICAgICAgfSBjYXRjaChJbnN0YW50aWF0aW9uRXhjZXB0aW9uIGNlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2luc3QiLCBjbGFzc05hbWUpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19pbnN0IiwgY2xhc3NOYW1lKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiRXJyb3IgaW4gaW5zdGFudGlhdGluZyIgKyBjbGFzc05hbWUpOwogICAgICAgICB9IGNhdGNoKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gY2UpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfYWNjX2luc3QiLCBjbGFzc05hbWUpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19hY2NfaW5zdCIsIGNsYXNzTmFtZSk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBFcnJvciBpbiBpbnN0YW50aWF0aW5nIiArIGNsYXNzTmFtZSk7CiAgICAgICAgIH0KICAgICB9Ci0gIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VTcGVjLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VTcGVjLmphdmEKaW5kZXggZWY2YzRjOS4uM2RjMTU0ZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlU3BlYy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZVNwZWMuamF2YQpAQCAtMTksOTIgKzE5LDkyIEBACiBpbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKIAogLyoqCi0gKiBFbmNhcHN1bGF0ZSB0aGUgRGF0YVNvdXJjZSBvYmplY3QgZGV0YWlscyBvYnRhaW5lZCBmcm9tIAorICogRW5jYXBzdWxhdGUgdGhlIERhdGFTb3VyY2Ugb2JqZWN0IGRldGFpbHMgb2J0YWluZWQgZnJvbQogICogTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMjMKLSAqIEBhdXRob3IJQmlub2QgUC5HCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzIzCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRwogICovCiBwdWJsaWMgY2xhc3MgRGF0YVNvdXJjZVNwZWMgaW1wbGVtZW50cyBqYXZhLmlvLlNlcmlhbGl6YWJsZXsKIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVTRVJOQU1FCQkJCT0gMTsgICAgCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUEFTU1dPUkQJCQkJPSAyOyAgCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVVJMCQkJCQk9IDM7ICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMT0dJTlRJTUVPVVQJCQk9IDQ7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTE9HV1JJVEVSCQkJCT0gNTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQVRBQkFTRU5BTUUJCQk9IDY7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREFUQVNPVVJDRU5BTUUJCQk9IDc7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVTQ1JJUFRJT04JCQkJPSA4OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5FVFdPUktQUk9UT0NPTAkJCT0gOTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQT1JUTlVNQkVSCQkJCT0gMTA7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUk9MRU5BTUUJCQkJPSAxMTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTRVJWRVJOQU1FCQkJCT0gMTI7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYU1RBVEVNRU5UUwkJCT0gMTM7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5JVElBTFBPT0xTSVpFCQkJPSAxNDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNSU5QT09MU0laRQkJCQk9IDE1OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWFBPT0xTSVpFCQkJCT0gMTY7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYSURMRVRJTUUJCQkJPSAxNzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQUk9QRVJUWUNZQ0xFCQkJPSAxODsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEUklWRVJQUk9QRVJUSUVTCQkJPSAxOTsgICAgCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0xBU1NOQU1FCQkJCT0gMjA7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVMSU1JVEVSCQkJCT0gMjE7Ci0gICAgCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgWEFEQVRBU09VUkNFCQkJPSAyMjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQVRBU09VUkNFCQkJCT0gMjM7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OTkVDVElPTlBPT0xEQVRBU09VUkNFCQk9IDI0OwotICAgICAgCi0gICAgLy9HSkNJTlQgICAgICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVECT0gMjU7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVkFMSURBVElPTk1FVEhPRAkJCT0gMjY7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVkFMSURBVElPTlRBQkxFTkFNRQkJCT0gMjc7Ci0gICAgCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVFJBTlNBQ1RJT05JU09MQVRJT04JCT0gMjg7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwJCT0gMjk7Ci0gICAgICAgICAgICAKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVU0VSTkFNRSAgICAgICAgICAgICAgICA9IDE7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUEFTU1dPUkQgICAgICAgICAgICAgICAgPSAyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVSTCAgICAgICAgICAgICAgICAgICAgPSAzOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExPR0lOVElNRU9VVCAgICAgICAgICAgID0gNDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMT0dXUklURVIgICAgICAgICAgICAgICAgPSA1OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFCQVNFTkFNRSAgICAgICAgICAgID0gNjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQVRBU09VUkNFTkFNRSAgICAgICAgICAgID0gNzsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERVNDUklQVElPTiAgICAgICAgICAgICAgICA9IDg7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTkVUV09SS1BST1RPQ09MICAgICAgICAgICAgPSA5OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBPUlROVU1CRVIgICAgICAgICAgICAgICAgPSAxMDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBST0xFTkFNRSAgICAgICAgICAgICAgICA9IDExOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNFUlZFUk5BTUUgICAgICAgICAgICAgICAgPSAxMjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhTVEFURU1FTlRTICAgICAgICAgICAgPSAxMzsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTklUSUFMUE9PTFNJWkUgICAgICAgICAgICA9IDE0OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1JTlBPT0xTSVpFICAgICAgICAgICAgICAgID0gMTU7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYUE9PTFNJWkUgICAgICAgICAgICAgICAgPSAxNjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhJRExFVElNRSAgICAgICAgICAgICAgICA9IDE3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBST1BFUlRZQ1lDTEUgICAgICAgICAgICA9IDE4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERSSVZFUlBST1BFUlRJRVMgICAgICAgICAgICA9IDE5OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENMQVNTTkFNRSAgICAgICAgICAgICAgICA9IDIwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFTElNSVRFUiAgICAgICAgICAgICAgICA9IDIxOworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgWEFEQVRBU09VUkNFICAgICAgICAgICAgPSAyMjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQVRBU09VUkNFICAgICAgICAgICAgICAgID0gMjM7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OTkVDVElPTlBPT0xEQVRBU09VUkNFICAgICAgICA9IDI0OworCisgICAgLy9HSkNJTlQKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVEICAgID0gMjU7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVkFMSURBVElPTk1FVEhPRCAgICAgICAgICAgID0gMjY7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVkFMSURBVElPTlRBQkxFTkFNRSAgICAgICAgICAgID0gMjc7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUUkFOU0FDVElPTklTT0xBVElPTiAgICAgICAgPSAyODsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHVUFSQU5URUVJU09MQVRJT05MRVZFTCAgICAgICAgPSAyOTsKKwogICAgIHByaXZhdGUgSGFzaHRhYmxlIGRldGFpbHMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIHByb3BlcnR5LgogICAgICAqCi0gICAgICogQHBhcmFtCXByb3BlcnR5CVByb3BlcnR5IE5hbWUgdG8gYmUgc2V0LgotICAgICAqIEBwYXJhbQl2YWx1ZQkJVmFsdWUgb2YgcHJvcGVydHkgdG8gYmUgc2V0LgorICAgICAqIEBwYXJhbSAgICBwcm9wZXJ0eSAgICBQcm9wZXJ0eSBOYW1lIHRvIGJlIHNldC4KKyAgICAgKiBAcGFyYW0gICAgdmFsdWUgICAgICAgIFZhbHVlIG9mIHByb3BlcnR5IHRvIGJlIHNldC4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXREZXRhaWwoaW50IHByb3BlcnR5LCBTdHJpbmcgdmFsdWUpIHsKLSAgICAJZGV0YWlscy5wdXQobmV3IEludGVnZXIocHJvcGVydHkpLHZhbHVlKTsKKyAgICAgICAgZGV0YWlscy5wdXQobmV3IEludGVnZXIocHJvcGVydHkpLHZhbHVlKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXQgdGhlIHZhbHVlIG9mIHByb3BlcnR5CiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVZhbHVlIG9mIHRoZSBwcm9wZXJ0eS4KKyAgICAgKiBAcmV0dXJuICAgIFZhbHVlIG9mIHRoZSBwcm9wZXJ0eS4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldERldGFpbChpbnQgcHJvcGVydHkpIHsKLSAgICAJaWYgKGRldGFpbHMuY29udGFpbnNLZXkobmV3IEludGVnZXIocHJvcGVydHkpKSkgewotICAgIAkgICAgcmV0dXJuIChTdHJpbmcpIGRldGFpbHMuZ2V0KG5ldyBJbnRlZ2VyKHByb3BlcnR5KSk7Ci0gICAgCX0gZWxzZSB7Ci0gICAgCSAgICByZXR1cm4gbnVsbDsKLSAgICAJfSAgICAJCisgICAgICAgIGlmIChkZXRhaWxzLmNvbnRhaW5zS2V5KG5ldyBJbnRlZ2VyKHByb3BlcnR5KSkpIHsKKyAgICAgICAgICAgIHJldHVybiAoU3RyaW5nKSBkZXRhaWxzLmdldChuZXcgSW50ZWdlcihwcm9wZXJ0eSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDaGVja3Mgd2hldGhlciB0d28gPGNvZGU+RGF0YVNvdXJjZVNwZWM8L2NvZGU+IG9iamVjdHMKICAgICAgKiBhcmUgZXF1YWwgb3Igbm90LgogICAgICAqCi0gICAgICogQHBhcmFtCW9iaglJbnN0YW5jZSBvZiA8Y29kZT5EYXRhU291cmNlU3BlYzwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBvYmogICAgSW5zdGFuY2Ugb2YgPGNvZGU+RGF0YVNvdXJjZVNwZWM8L2NvZGU+IG9iamVjdC4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9iaikgewotICAgIAlpZiAob2JqIGluc3RhbmNlb2YgRGF0YVNvdXJjZVNwZWMpIHsKLSAgICAJICAgIHJldHVybiB0aGlzLmRldGFpbHMuZXF1YWxzKCgoRGF0YVNvdXJjZVNwZWMpb2JqKS5kZXRhaWxzKTsKLSAgICAJfQotICAgIAlyZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBEYXRhU291cmNlU3BlYykgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGV0YWlscy5lcXVhbHMoKChEYXRhU291cmNlU3BlYylvYmopLmRldGFpbHMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIGhhc2hDb2RlIG9mIHRoaXMgPGNvZGU+RGF0YVNvdXJjZVNwZWM8L2NvZGU+IG9iamVjdC4KICAgICAgKgotICAgICAqIEByZXR1cm4JaGFzaENvZGUgb2YgdGhpcyBvYmplY3QuCisgICAgICogQHJldHVybiAgICBoYXNoQ29kZSBvZiB0aGlzIG9iamVjdC4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewotICAgIAlyZXR1cm4gdGhpcy5kZXRhaWxzLmhhc2hDb2RlKCk7Ci0gICAgfSAgICAKKyAgICAgICAgcmV0dXJuIHRoaXMuZGV0YWlscy5oYXNoQ29kZSgpOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9idWlsZC54bWwKaW5kZXggZWY0MzhmYy4uM2I0ZmFlYiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9idWlsZC54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPHByb2plY3QgbmFtZT0iamRiY19jb25uZWN0b3IiIGJhc2VkaXI9Ii4iIGRlZmF1bHQ9ImJ1aWxkIj4KICAgPHByb3BlcnR5IG5hbWU9InBrZy5kaXIiIHZhbHVlPSJjb20vc3VuL2dqYy9jb21tb24iLz4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJjbGVhbiI+CiAgICAgPGFudCBhbnRmaWxlPSJidWlsZC54bWwiIGRpcj0iJHtnamMuaG9tZX0vYmluIiB0YXJnZXQ9ImNsZWFuIi8+CiAgIDwvdGFyZ2V0PgpAQCAtMzYsMTMgKzM2LDEzIEBACiAKICAgPHRhcmdldCBuYW1lPSJjb21waWxlMTMiIGRlcGVuZHM9ImNvbXBpbGUiLz4KICAgPHRhcmdldCBuYW1lPSJjb21waWxlMTQiIGRlcGVuZHM9ImNvbXBpbGUiLz4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlMTMiIGRlcGVuZHM9InBhY2thZ2UiLz4KICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlMTQiIGRlcGVuZHM9InBhY2thZ2UiLz4KIAogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkMTMiIGRlcGVuZHM9ImNvbXBpbGUxMywgcGFja2FnZTEzIi8+CiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQxNCIgZGVwZW5kcz0iY29tcGlsZTE0LCBwYWNrYWdlMTQiLz4KLSAgICAKKwogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJidWlsZDEzLCBidWlsZDE0Ii8+CiAKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L0Nvbm5lY3Rpb25Ib2xkZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L0Nvbm5lY3Rpb25Ib2xkZXIuamF2YQppbmRleCBhOTU2ZDk3Li4xMWFkNzQ2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9Db25uZWN0aW9uSG9sZGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvQ29ubmVjdGlvbkhvbGRlci5qYXZhCkBAIC0yNCwyNCArMjQsMjQgQEAKIGltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcjsKIAogLyoqCi0gKiBIb2xkcyB0aGUgamF2YS5zcWwuQ29ubmVjdGlvbiBvYmplY3QsIHdoaWNoIGlzIHRvIGJlIAorICogSG9sZHMgdGhlIGphdmEuc3FsLkNvbm5lY3Rpb24gb2JqZWN0LCB3aGljaCBpcyB0byBiZQogICogcGFzc2VkIHRvIHRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMjMKLSAqIEBhdXRob3IJQmlub2QgUC5HCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzIzCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRwogICovCi1wdWJsaWMgY2xhc3MgQ29ubmVjdGlvbkhvbGRlciBpbXBsZW1lbnRzIENvbm5lY3Rpb257IAorcHVibGljIGNsYXNzIENvbm5lY3Rpb25Ib2xkZXIgaW1wbGVtZW50cyBDb25uZWN0aW9uewogCiAgICAgcHJpdmF0ZSBDb25uZWN0aW9uIGNvbjsKLSAgICAKKwogICAgIHByaXZhdGUgTWFuYWdlZENvbm5lY3Rpb24gbWM7Ci0gICAgCi0gICAgcHJpdmF0ZSBib29sZWFuIHdyYXBwZWRBbHJlYWR5ID0gZmFsc2U7ICAgIAotICAgIAorCisgICAgcHJpdmF0ZSBib29sZWFuIHdyYXBwZWRBbHJlYWR5ID0gZmFsc2U7CisKICAgICBwcml2YXRlIGJvb2xlYW4gaXNDbG9zZWQgPSBmYWxzZTsKLSAgICAKKwogICAgIHByaXZhdGUgYm9vbGVhbiB2YWxpZCA9IHRydWU7Ci0gICAgCisKICAgICBwcml2YXRlIGJvb2xlYW4gYWN0aXZlID0gZmFsc2U7CiAgICAgLyoqCiAgICAgICogVGhlIGFjdGl2ZSBmbGFnIGlzIGZhbHNlIHdoZW4gdGhlIGNvbm5lY3Rpb24gaGFuZGxlIGlzCkBAIC01MywyMTkgKzUzLDIxOSBAQAogICAgICAqIGZ1bmN0aW9uLCB0aGUgYWJvdmUgbWV0aG9kIGludm9jYXRpb24gc3VjY2VlZHM7IG90aGVyd2lzZQogICAgICAqIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24uCiAgICAgICovCi0gICAgCisKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RzIGEgQ29ubmVjdGlvbiBob2xkZXIuCi0gICAgICogCi0gICAgICogQHBhcmFtCWNvbgk8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgY29uICAgIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KICAgICAgKi8KICAgICBwdWJsaWMgQ29ubmVjdGlvbkhvbGRlcihDb25uZWN0aW9uIGNvbiwgTWFuYWdlZENvbm5lY3Rpb24gbWMpIHsKICAgICAgICAgdGhpcy5jb24gPSBjb247CiAgICAgICAgIHRoaXMubWMgID0gbWM7CiAgICAgfQotICAgICAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIGFjdHVhbCBjb25uZWN0aW9uIGluIHRoaXMgaG9sZGVyIG9iamVjdC4KLSAgICAgKiAKLSAgICAgKiBAcmV0dXJuCUNvbm5lY3Rpb24gb2JqZWN0LgorICAgICAqCisgICAgICogQHJldHVybiAgICBDb25uZWN0aW9uIG9iamVjdC4KICAgICAgKi8KICAgICBDb25uZWN0aW9uIGdldENvbm5lY3Rpb24oKSB7Ci0gICAgCXJldHVybiBjb247CisgICAgICAgIHJldHVybiBjb247CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZmxhZyB0byBpbmRpY2F0ZSB0aGF0LCB0aGUgY29ubmVjdGlvbiBpcyB3cmFwcGVkIGFscmVhZHkgb3Igbm90LgogICAgICAqCi0gICAgICogQHBhcmFtCXdyYXBGbGFnCQorICAgICAqIEBwYXJhbSAgICB3cmFwRmxhZwogICAgICAqLwogICAgIHZvaWQgd3JhcHBlZChib29sZWFuIHdyYXBGbGFnKXsKICAgICAgICAgdGhpcy53cmFwcGVkQWxyZWFkeSA9IHdyYXBGbGFnOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgd2hldGhlciBpdCBpcyB3cmFwcGVkIGFscmVhZHkgb3Igbm90LgogICAgICAqCi0gICAgICogQHJldHVybgl3cmFwcGVkIGZsYWcuCisgICAgICogQHJldHVybiAgICB3cmFwcGVkIGZsYWcuCiAgICAgICovCiAgICAgYm9vbGVhbiBpc1dyYXBwZWQoKXsKICAgICAgICAgcmV0dXJuIHdyYXBwZWRBbHJlYWR5OwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZSByZXNwb25zaWJsZQogICAgICAqIGZvciB0aGlzIGNvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKi8KICAgICBNYW5hZ2VkQ29ubmVjdGlvbiBnZXRNYW5hZ2VkQ29ubmVjdGlvbigpIHsKICAgICAgICAgcmV0dXJuIG1jOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJlcGxhY2UgdGhlIGFjdHVhbCA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3Qgd2l0aCB0aGUgb25lCi0gICAgICogc3VwcGxpZWQuIEFsc28gcmVwbGFjZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gbGluay4gICAgIAorICAgICAqIHN1cHBsaWVkLiBBbHNvIHJlcGxhY2UgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGxpbmsuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JY29uIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAcGFyYW0JbWMgIDxjb2RlPiBNYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBjb24gPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBtYyAgPGNvZGU+IE1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCiAgICAgICovCiAgICAgdm9pZCBhc3NvY2lhdGVDb25uZWN0aW9uKENvbm5lY3Rpb24gY29uLCBNYW5hZ2VkQ29ubmVjdGlvbiBtYykgewotICAgIAl0aGlzLm1jID0gbWM7Ci0gICAgCXRoaXMuY29uID0gY29uOworICAgICAgICB0aGlzLm1jID0gbWM7CisgICAgICAgIHRoaXMuY29uID0gY29uOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENsZWFycyBhbGwgd2FybmluZ3MgcmVwb3J0ZWQgZm9yIHRoZSB1bmRlcmx5aW5nIGNvbm5lY3Rpb24gIG9iamVjdC4KICAgICAgKgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgY2xlYXJXYXJuaW5ncygpIHRocm93cyBTUUxFeGNlcHRpb257ICAgIAotCWNoZWNrVmFsaWRpdHkoKTsKKyAgICBwdWJsaWMgdm9pZCBjbGVhcldhcm5pbmdzKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIGNvbi5jbGVhcldhcm5pbmdzKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogQ2xvc2VzIHRoZSBsb2dpY2FsIGNvbm5lY3Rpb24uICAgIAorICAgICAqIENsb3NlcyB0aGUgbG9naWNhbCBjb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgY2xvc2UoKSB0aHJvd3MgU1FMRXhjZXB0aW9uewogICAgICAgICBpc0Nsb3NlZCA9IHRydWU7Ci0gICAgICAgIG1jLmNvbm5lY3Rpb25DbG9zZWQobnVsbCwgdGhpcyk7ICAgICAgICAKKyAgICAgICAgbWMuY29ubmVjdGlvbkNsb3NlZChudWxsLCB0aGlzKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBJbnZhbGlkYXRlcyB0aGlzIG9iamVjdC4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBpbnZhbGlkYXRlKCkgewotICAgIAl2YWxpZCA9IGZhbHNlOworICAgICAgICB2YWxpZCA9IGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENsb3NlcyB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpbnZvbHZlZCBpbiB0aGlzLgogICAgICAqCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KLSAgICB2b2lkIGFjdHVhbENsb3NlKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsgICAgCisgICAgdm9pZCBhY3R1YWxDbG9zZSgpIHRocm93cyBTUUxFeGNlcHRpb257CiAgICAgICAgIGNvbi5jbG9zZSgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbW1pdCB0aGUgY2hhbmdlcyBpbiB0aGUgdW5kZXJseWluZyBDb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjb21taXQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24uY29tbWl0KCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24uY29tbWl0KCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIHN0YXRlbWVudCBmcm9tIHRoZSB1bmRlcmx5aW5nIENvbm5lY3Rpb24KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+U3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEByZXR1cm4gICAgPGNvZGU+U3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTdGF0ZW1lbnQgY3JlYXRlU3RhdGVtZW50KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIHJldHVybiBjb24uY3JlYXRlU3RhdGVtZW50KCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIHN0YXRlbWVudCBmcm9tIHRoZSB1bmRlcmx5aW5nIENvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0VHlwZQlUeXBlIG9mIHRoZSBSZXN1bHRTZXQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0Q29uY3VycmVuY3kJUmVzdWx0U2V0IENvbmN1cnJlbmN5LgotICAgICAqIEByZXR1cm4JPGNvZGU+U3RhdGVtZW50PC9jb2RlPiBvYmplY3QuICAgICAKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldFR5cGUgICAgVHlwZSBvZiB0aGUgUmVzdWx0U2V0CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldENvbmN1cnJlbmN5ICAgIFJlc3VsdFNldCBDb25jdXJyZW5jeS4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgU3RhdGVtZW50IGNyZWF0ZVN0YXRlbWVudChpbnQgcmVzdWx0U2V0VHlwZSwgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgcmV0dXJuIGNvbi5jcmVhdGVTdGF0ZW1lbnQocmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3kpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBzdGF0ZW1lbnQgZnJvbSB0aGUgdW5kZXJseWluZyBDb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHBhcmFtCXJlc3VsdFNldFR5cGUJVHlwZSBvZiB0aGUgUmVzdWx0U2V0Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldENvbmN1cnJlbmN5CVJlc3VsdFNldCBDb25jdXJyZW5jeS4KLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0SG9sZGFiaWxpdHkJUmVzdWx0U2V0IEhvbGRhYmlsaXR5LiAgICAgCi0gICAgICogQHJldHVybgk8Y29kZT5TdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4gCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgICAgICAKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0VHlwZSAgICBUeXBlIG9mIHRoZSBSZXN1bHRTZXQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0Q29uY3VycmVuY3kgICAgUmVzdWx0U2V0IENvbmN1cnJlbmN5LgorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRIb2xkYWJpbGl0eSAgICBSZXN1bHRTZXQgSG9sZGFiaWxpdHkuCisgICAgICogQHJldHVybiAgICA8Y29kZT5TdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCi0gICAgcHVibGljIFN0YXRlbWVudCBjcmVhdGVTdGF0ZW1lbnQoaW50IHJlc3VsdFNldFR5cGUsIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwgCi0gICAgCQkJCSAgICAgaW50IHJlc3VsdFNldEhvbGRhYmlsdHkpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCQkJCSAgICAgCisgICAgcHVibGljIFN0YXRlbWVudCBjcmVhdGVTdGF0ZW1lbnQoaW50IHJlc3VsdFNldFR5cGUsIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0SG9sZGFiaWx0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICByZXR1cm4gY29uLmNyZWF0ZVN0YXRlbWVudChyZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSwKLSAgICAgICAgCQkJICAgcmVzdWx0U2V0SG9sZGFiaWx0eSk7CisgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFNldEhvbGRhYmlsdHkpOwogICAgIH0KLSAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgY3VycmVudCBhdXRvLWNvbW1pdCBtb2RlIGZvciB0aGUgdW5kZXJseWluZyA8Y29kZT4gQ29ubmVjdGlvbjwvY29kZT4uCiAgICAgICoKICAgICAgKiBAcmV0dXJuIFRoZSBjdXJyZW50IHN0YXRlIG9mIGNvbm5lY3Rpb24ncyBhdXRvLWNvbW1pdCBtb2RlLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gZ2V0QXV0b0NvbW1pdCgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uZ2V0QXV0b0NvbW1pdCgpOwotICAgIH0gICAKLSAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uZ2V0QXV0b0NvbW1pdCgpOworICAgIH0KKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgdW5kZXJseWluZyA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QncyBjYXRhbG9nIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCUNhdGFsb2cgTmFtZS4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHJldHVybiAgICBDYXRhbG9nIE5hbWUuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q2F0YWxvZygpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICByZXR1cm4gY29uLmdldENhdGFsb2coKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgaG9sZGFiaWxpdHkgb2YgPGNvZGU+UmVzdWx0U2V0PC9jb2RlPiBvYmplY3RzIGNyZWF0ZWQKICAgICAgKiB1c2luZyB0aGlzIGNvbm5lY3Rpb24gb2JqZWN0LgogICAgICAqCi0gICAgICogQHJldHVybglob2xkYWJpbGl0eSB2YWx1ZS4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHJldHVybiAgICBob2xkYWJpbGl0eSB2YWx1ZS4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIGludCBnZXRIb2xkYWJpbGl0eSgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybgljb24uZ2V0SG9sZGFiaWxpdHkoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiAgICBjb24uZ2V0SG9sZGFiaWxpdHkoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIDxjb2RlPkRhdGFiYXNlTWV0YURhdGE8L2NvZGU+b2JqZWN0IGZyb20gdGhlIHVuZGVybHlpbmcKICAgICAgKiA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KICAgICAgKgogICAgICAqIEByZXR1cm4gPGNvZGU+RGF0YWJhc2VNZXRhRGF0YTwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIERhdGFiYXNlTWV0YURhdGEgZ2V0TWV0YURhdGEoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLmdldE1ldGFEYXRhKCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLmdldE1ldGFEYXRhKCk7CiAgICAgfQotIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoaXMgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0J3MgY3VycmVudCB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwuCiAgICAgICoKICAgICAgKiBAcmV0dXJuIFRyYW5zYWN0aW9uIGxldmVsCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLyAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIHJldHVybiBjb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBSZXRyaWV2ZXMgdGhlIDxjb2RlPk1hcDwvY29kZT4gb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCAKKyAgICAgKiBSZXRyaWV2ZXMgdGhlIDxjb2RlPk1hcDwvY29kZT4gb2JqZWN0IGFzc29jaWF0ZWQgd2l0aAogICAgICAqIDxjb2RlPiBDb25uZWN0aW9uPC9jb2RlPiBPYmplY3QuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVR5cGVNYXAgc2V0IGluIHRoaXMgb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcmV0dXJuICAgIFR5cGVNYXAgc2V0IGluIHRoaXMgb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgTWFwIGdldFR5cGVNYXAoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLmdldFR5cGVNYXAoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uZ2V0VHlwZU1hcCgpOwogICAgIH0KIAogLyoKQEAgLTI3OSwxODQgKzI3OSwxODQgQEAKICAgICAgKiA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCiAgICAgICoKICAgICAgKiBAcmV0dXJuIEZpcnN0IDxjb2RlPiBTUUxXYXJuaW5nPC9jb2RlPiBPYmplY3Qgb3IgbnVsbC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTUUxXYXJuaW5nIGdldFdhcm5pbmdzKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5nZXRXYXJuaW5ncygpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5nZXRXYXJuaW5ncygpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB3aGV0aGVyIHVuZGVybHlpbmcgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGlzIGNsb3NlZC4KICAgICAgKgotICAgICAqIEByZXR1cm4JdHJ1ZSBpZiA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaXMgY2xvc2VkLCBmYWxzZQotICAgICAqIAkJaWYgaXQgaXMgY2xvc2VkLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcmV0dXJuICAgIHRydWUgaWYgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGlzIGNsb3NlZCwgZmFsc2UKKyAgICAgKiAgICAgICAgIGlmIGl0IGlzIGNsb3NlZC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gaXNDbG9zZWQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLSAgICAJcmV0dXJuIGlzQ2xvc2VkOworICAgICAgICByZXR1cm4gaXNDbG9zZWQ7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHdoZXRoZXIgdGhpcyA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaXMgcmVhZC1vbmx5LgogICAgICAqCi0gICAgICogQHJldHVybgl0cnVlIGlmIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gaXMgcmVhZC1vbmx5LCBmYWxzZSBvdGhlci13aXNlCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEByZXR1cm4gICAgdHJ1ZSBpZiA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IGlzIHJlYWQtb25seSwgZmFsc2Ugb3RoZXItd2lzZQorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc1JlYWRPbmx5KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5pc1JlYWRPbmx5KCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLmlzUmVhZE9ubHkoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb252ZXJ0cyB0aGUgZ2l2ZW4gU1FMIHN0YXRlbWVudCBpbnRvIHRoZSBzeXN0ZW0ncyBuYXRpdmUgU1FMIGdyYW1tZXIuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBzdGF0ZW1lbnQgLCB0byBiZSBjb252ZXJ0ZWQuCi0gICAgICogQHJldHVybglDb252ZXJ0ZWQgU1FMIHN0cmluZy4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgc3RhdGVtZW50ICwgdG8gYmUgY29udmVydGVkLgorICAgICAqIEByZXR1cm4gICAgQ29udmVydGVkIFNRTCBzdHJpbmcuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgbmF0aXZlU1FMKFN0cmluZyBzcWwpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24ubmF0aXZlU1FMKHNxbCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLm5hdGl2ZVNRTChzcWwpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIGNhbGxpbmcgZGF0YWJhc2UKICAgICAgKiBzdG9yZWQgcHJvY2VkdXJlcy4KICAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAogICAgICAqIEByZXR1cm4gPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgQ2FsbGFibGVTdGF0ZW1lbnQgcHJlcGFyZUNhbGwoU3RyaW5nIHNxbCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlQ2FsbChzcWwpOwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBjYWxsaW5nIGRhdGFiYXNlCi0gICAgICogc3RvcmVkIHByb2NlZHVyZXMuCi0gICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0VHlwZQlUeXBlIG9mIHRoZSBSZXN1bHRTZXQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0Q29uY3VycmVuY3kJUmVzdWx0U2V0IENvbmN1cnJlbmN5LgotICAgICAqIEByZXR1cm4gPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLwotICAgIHB1YmxpYyBDYWxsYWJsZVN0YXRlbWVudCBwcmVwYXJlQ2FsbChTdHJpbmcgc3FsLGludCByZXN1bHRTZXRUeXBlLCAKLSAgICAJCQkJCWludCByZXN1bHRTZXRDb25jdXJyZW5jeSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAkJCQkJCi0gICAgCXJldHVybiBjb24ucHJlcGFyZUNhbGwoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSk7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIGNhbGxpbmcgZGF0YWJhc2UKLSAgICAgKiBzdG9yZWQgcHJvY2VkdXJlcy4KLSAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRUeXBlCVR5cGUgb2YgdGhlIFJlc3VsdFNldAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRDb25jdXJyZW5jeQlSZXN1bHRTZXQgQ29uY3VycmVuY3kuCi0gICAgICogQHBhcmFtCXJlc3VsdFNldEhvbGRhYmlsaXR5CVJlc3VsdFNldCBIb2xkYWJpbGl0eS4gICAgICAgICAgCi0gICAgICogQHJldHVybiA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovCi0gICAgcHVibGljIENhbGxhYmxlU3RhdGVtZW50IHByZXBhcmVDYWxsKFN0cmluZyBzcWwsIGludCByZXN1bHRTZXRUeXBlLCAKLSAgICAJCQkJCSBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3ksIAotICAgIAkJCQkJIGludCByZXN1bHRTZXRIb2xkYWJpbHR5KSB0aHJvd3MgU1FMRXhjZXB0aW9uewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCQkJCQkgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZUNhbGwoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSwKLSAgICAJCQkgICAgICAgcmVzdWx0U2V0SG9sZGFiaWx0eSk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVDYWxsKHNxbCk7CiAgICAgfQogCiAgICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZyAKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBjYWxsaW5nIGRhdGFiYXNlCisgICAgICogc3RvcmVkIHByb2NlZHVyZXMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0VHlwZSAgICBUeXBlIG9mIHRoZSBSZXN1bHRTZXQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0Q29uY3VycmVuY3kgICAgUmVzdWx0U2V0IENvbmN1cnJlbmN5LgorICAgICAqIEByZXR1cm4gPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBDYWxsYWJsZVN0YXRlbWVudCBwcmVwYXJlQ2FsbChTdHJpbmcgc3FsLGludCByZXN1bHRTZXRUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5KSB0aHJvd3MgU1FMRXhjZXB0aW9ueworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlQ2FsbChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBjYWxsaW5nIGRhdGFiYXNlCisgICAgICogc3RvcmVkIHByb2NlZHVyZXMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0VHlwZSAgICBUeXBlIG9mIHRoZSBSZXN1bHRTZXQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0Q29uY3VycmVuY3kgICAgUmVzdWx0U2V0IENvbmN1cnJlbmN5LgorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRIb2xkYWJpbGl0eSAgICBSZXN1bHRTZXQgSG9sZGFiaWxpdHkuCisgICAgICogQHJldHVybiA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCisgICAgcHVibGljIENhbGxhYmxlU3RhdGVtZW50IHByZXBhcmVDYWxsKFN0cmluZyBzcWwsIGludCByZXN1bHRTZXRUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0SG9sZGFiaWx0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZUNhbGwoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0U2V0SG9sZGFiaWx0eSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZwogICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQogICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CiAgICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCk7CiAgICAgfQotICAgIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcgCi0gICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCi0gICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JYXV0b0dlbmVyYXRlZEtleXMgYSBmbGFnIGluZGljYXRpbmcgQXV0b0dlbmVyYXRlZEtleXMgbmVlZCB0byBiZSByZXR1cm5lZC4KLSAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8KLSAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLCBpbnQgYXV0b0dlbmVyYXRlZEtleXMpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsYXV0b0dlbmVyYXRlZEtleXMpOwotICAgIH0gICAgCi0gICAgICAKLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nIAotICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQotICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50Ci0gICAgICogQHBhcmFtCWNvbHVtbkluZGV4ZXMgYW4gYXJyYXkgb2YgY29sdW1uIGluZGV4ZXMgaW5kaWNhdGluZyB0aGUgY29sdW1ucyB0aGF0IHNob3VsZCBiZQotICAgICAqCQlyZXR1cm5lZCBmcm9tIHRoZSBpbnNlcnRlZCByb3cgb3Igcm93cy4KLSAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8KLSAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLCBpbnRbXSBjb2x1bW5JbmRleGVzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLGNvbHVtbkluZGV4ZXMpOwotICAgIH0gICAgICAgICAgCi0gCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZyAKLSAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKLSAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRUeXBlCVR5cGUgb2YgdGhlIFJlc3VsdFNldAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRDb25jdXJyZW5jeQlSZXN1bHRTZXQgQ29uY3VycmVuY3kuCi0gICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovCi0gICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCxpbnQgcmVzdWx0U2V0VHlwZSwgCi0gICAgCQkJCQlpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3kpIHRocm93cyBTUUxFeGNlcHRpb257Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAJCQkJCQotICAgIAlyZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSk7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcgCi0gICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCi0gICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0VHlwZQlUeXBlIG9mIHRoZSBSZXN1bHRTZXQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0Q29uY3VycmVuY3kJUmVzdWx0U2V0IENvbmN1cnJlbmN5LgotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRIb2xkYWJpbGl0eQlSZXN1bHRTZXQgSG9sZGFiaWxpdHkuICAgICAgICAgIAotICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLwotICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludCByZXN1bHRTZXRUeXBlLCAKLSAgICAJCQkJCSBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3ksIAotICAgIAkJCQkJIGludCByZXN1bHRTZXRIb2xkYWJpbHR5KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAkJCQkJIAotICAgIAlyZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSwKLSAgICAJCQkJICAgIHJlc3VsdFNldEhvbGRhYmlsdHkpOwotICAgIH0gICAgICAgICAgIAogCiAgICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZyAKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nCiAgICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JY29sdW1uTmFtZXMgTmFtZSBvZiBib3VuZCBjb2x1bW5zLgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICBhdXRvR2VuZXJhdGVkS2V5cyBhIGZsYWcgaW5kaWNhdGluZyBBdXRvR2VuZXJhdGVkS2V5cyBuZWVkIHRvIGJlIHJldHVybmVkLgogICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLCBpbnQgYXV0b0dlbmVyYXRlZEtleXMpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCxhdXRvR2VuZXJhdGVkS2V5cyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZworICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIGNvbHVtbkluZGV4ZXMgYW4gYXJyYXkgb2YgY29sdW1uIGluZGV4ZXMgaW5kaWNhdGluZyB0aGUgY29sdW1ucyB0aGF0IHNob3VsZCBiZQorICAgICAqICAgICAgICByZXR1cm5lZCBmcm9tIHRoZSBpbnNlcnRlZCByb3cgb3Igcm93cy4KKyAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLCBpbnRbXSBjb2x1bW5JbmRleGVzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsY29sdW1uSW5kZXhlcyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZworICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldFR5cGUgICAgVHlwZSBvZiB0aGUgUmVzdWx0U2V0CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldENvbmN1cnJlbmN5ICAgIFJlc3VsdFNldCBDb25jdXJyZW5jeS4KKyAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLGludCByZXN1bHRTZXRUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5KSB0aHJvd3MgU1FMRXhjZXB0aW9ueworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3kpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcKKyAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRUeXBlICAgIFR5cGUgb2YgdGhlIFJlc3VsdFNldAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRDb25jdXJyZW5jeSAgICBSZXN1bHRTZXQgQ29uY3VycmVuY3kuCisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldEhvbGRhYmlsaXR5ICAgIFJlc3VsdFNldCBIb2xkYWJpbGl0eS4KKyAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLCBpbnQgcmVzdWx0U2V0VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3ksCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdFNldEhvbGRhYmlsdHkpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3ksCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRTZXRIb2xkYWJpbHR5KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nCisgICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgY29sdW1uTmFtZXMgTmFtZSBvZiBib3VuZCBjb2x1bW5zLgorICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIFN0cmluZ1tdIGNvbHVtbk5hbWVzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLGNvbHVtbk5hbWVzKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsY29sdW1uTmFtZXMpOwogICAgIH0KIAogICAgIHB1YmxpYyBDbG9iIGNyZWF0ZUNsb2IoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKQEAgLTUwNiwxNjIgKzUwNiwxNjIgQEAKICAgICAvKioKICAgICAgKiBSZW1vdmVzIHRoZSBnaXZlbiA8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdCBmcm9tIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLgogICAgICAqCi0gICAgICogQHBhcmFtCXNhdmVwb2ludAk8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdAotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgc2F2ZXBvaW50ICAgIDxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0CisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJlbGVhc2VTYXZlcG9pbnQoU2F2ZXBvaW50IHNhdmVwb2ludCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnJlbGVhc2VTYXZlcG9pbnQoc2F2ZXBvaW50KTsKLSAgICB9IAotICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnJlbGVhc2VTYXZlcG9pbnQoc2F2ZXBvaW50KTsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBSb2xscyBiYWNrIHRoZSBjaGFuZ2VzIG1hZGUgaW4gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24uCiAgICAgICoKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovICAgICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCiAgICAgcHVibGljIHZvaWQgcm9sbGJhY2soKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24ucm9sbGJhY2soKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5yb2xsYmFjaygpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJvbGxzIGJhY2sgdGhlIGNoYW5nZXMgbWFkZSBhZnRlciB0aGUgc2F2ZXBvaW50LgogICAgICAqCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLyAgICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJvbGxiYWNrKFNhdmVwb2ludCBzYXZlcG9pbnQpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5yb2xsYmFjayhzYXZlcG9pbnQpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnJvbGxiYWNrKHNhdmVwb2ludCk7CiAgICAgfQotICAgICAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGF1dG8tY29tbW1pdCBtb2RlIG9mIHRoZSA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JYXV0b0NvbW1pdCBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgdGhlIGF1dG8tY29tbWl0IG1vZGUuICAgICAKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIGF1dG9Db21taXQgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIHRoZSBhdXRvLWNvbW1pdCBtb2RlLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRBdXRvQ29tbWl0KGJvb2xlYW4gYXV0b0NvbW1pdCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnNldEF1dG9Db21taXQoYXV0b0NvbW1pdCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24uc2V0QXV0b0NvbW1pdChhdXRvQ29tbWl0KTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBjYXRhbG9nIG5hbWUgdG8gdGhlIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdAogICAgICAqCi0gICAgICogQHBhcmFtCWNhdGFsb2cJQ2F0YWxvZyBuYW1lLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgY2F0YWxvZyAgICBDYXRhbG9nIG5hbWUuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldENhdGFsb2coU3RyaW5nIGNhdGFsb2cpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5zZXRDYXRhbG9nKGNhdGFsb2cpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnNldENhdGFsb2coY2F0YWxvZyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogU2V0cyB0aGUgaG9sZGFiaWxpdHkgb2YgPGNvZGU+UmVzdWx0U2V0PC9jb2RlPiBvYmplY3RzIGNyZWF0ZWQgCisgICAgICogU2V0cyB0aGUgaG9sZGFiaWxpdHkgb2YgPGNvZGU+UmVzdWx0U2V0PC9jb2RlPiBvYmplY3RzIGNyZWF0ZWQKICAgICAgKiB1c2luZyB0aGlzIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KICAgICAgKgotICAgICAqIEBwYXJhbQlob2xkYWJpbGl0eQlBIDxjb2RlPlJlc3VsdFNldDwvY29kZT4gaG9sZGFiaWxpdHkgY29uc3RhbnQKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIGhvbGRhYmlsaXR5ICAgIEEgPGNvZGU+UmVzdWx0U2V0PC9jb2RlPiBob2xkYWJpbGl0eSBjb25zdGFudAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRIb2xkYWJpbGl0eShpbnQgaG9sZGFiaWxpdHkpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgIAljb24uc2V0SG9sZGFiaWxpdHkoaG9sZGFiaWxpdHkpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgIGNvbi5zZXRIb2xkYWJpbGl0eShob2xkYWJpbGl0eSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogUHV0cyB0aGUgY29ubmVjdGlvbiBpbiByZWFkLW9ubHkgbW9kZSBhcyBhIGhpbnQgdG8gdGhlIGRyaXZlciB0byAKKyAgICAgKiBQdXRzIHRoZSBjb25uZWN0aW9uIGluIHJlYWQtb25seSBtb2RlIGFzIGEgaGludCB0byB0aGUgZHJpdmVyIHRvCiAgICAgICogcGVyZm9ybSBkYXRhYmFzZSBvcHRpbWl6YXRpb25zLgogICAgICAqCi0gICAgICogQHBhcmFtCXJlYWRPbmx5ICB0cnVlIGVuYWJsZXMgcmVhZC1vbmx5IG1vZGUsIGZhbHNlIGRpc2FibGVzIGl0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgcmVhZE9ubHkgIHRydWUgZW5hYmxlcyByZWFkLW9ubHkgbW9kZSwgZmFsc2UgZGlzYWJsZXMgaXQuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFJlYWRPbmx5KGJvb2xlYW4gcmVhZE9ubHkpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5zZXRSZWFkT25seShyZWFkT25seSk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24uc2V0UmVhZE9ubHkocmVhZE9ubHkpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYW5kIHVubmFtZWQgc2F2ZXBvaW50IGFuZCByZXR1cm5zIGFuIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHRoYXQuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0LgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QuCiAgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTYXZlcG9pbnQgc2V0U2F2ZXBvaW50KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5zZXRTYXZlcG9pbnQoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uc2V0U2F2ZXBvaW50KCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIHNhdmVwb2ludCB3aXRoIHRoZSBuYW1lIGFuZCByZXR1cm5zIGFuIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHRoYXQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbmFtZQlOYW1lIG9mIHRoZSBzYXZlcG9pbnQuCi0gICAgICogQHJldHVybgk8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIG5hbWUgICAgTmFtZSBvZiB0aGUgc2F2ZXBvaW50LgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTYXZlcG9pbnQgc2V0U2F2ZXBvaW50KFN0cmluZyBuYW1lKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnNldFNhdmVwb2ludChuYW1lKTsKLSAgICB9ICAgIAotICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5zZXRTYXZlcG9pbnQobmFtZSk7CisgICAgfQorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsLgogICAgICAqCi0gICAgICogQHBhcmFtCWxldmVsIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIGxldmVsIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oaW50IGxldmVsKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24obGV2ZWwpOwotICAgIH0gICAgIAotICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKGxldmVsKTsKKyAgICB9CisKICAgICAvKioKLSAgICAgKiBJbnN0YWxscyB0aGUgZ2l2ZW4gPGNvZGU+TWFwPC9jb2RlPiBvYmplY3QgYXMgdGhlIHR5b2UgbWFwIGZvciB0aGlzIAorICAgICAqIEluc3RhbGxzIHRoZSBnaXZlbiA8Y29kZT5NYXA8L2NvZGU+IG9iamVjdCBhcyB0aGUgdHlvZSBtYXAgZm9yIHRoaXMKICAgICAgKiA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KICAgICAgKgotICAgICAqIEBwYXJhbQltYXAJPGNvZGU+TWFwPC9jb2RlPiBhIE1hcCBvYmplY3QgdG8gaW5zdGFsbC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIG1hcCAgICA8Y29kZT5NYXA8L2NvZGU+IGEgTWFwIG9iamVjdCB0byBpbnN0YWxsLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRUeXBlTWFwKE1hcCBtYXApIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsKLSAgICAJY29uLnNldFR5cGVNYXAobWFwKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5zZXRUeXBlTWFwKG1hcCk7CiAgICAgfQogCiAgICAgcHVibGljIGludCBnZXROZXR3b3JrVGltZW91dCgpIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBuZXcgZmVhdHVyZS4iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXROZXR3b3JrVGltZW91dChFeGVjdXRvciBleGVjdXRvciwgaW50IG1pbGxpc2Vjb25kcykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICB0aHJvdyBuZXcgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiRG8gbm90IHN1cHBvcnQgSmF2YSA3IG5ldyBmZWF0dXJlLiIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGFib3J0KEV4ZWN1dG9yIGV4ZWN1dG9yKSAgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgbmV3IGZlYXR1cmUuIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBnZXRTY2hlbWEoKSB0aHJvd3MgU1FMRXhjZXB0aW9uewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBuZXcgZmVhdHVyZS4iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRTY2hlbWEoU3RyaW5nIHNjaGVtYSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgbmV3IGZlYXR1cmUuIik7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBDaGVja3MgdGhlIHZhbGlkaXR5IG9mIHRoaXMgb2JqZWN0CiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIGNoZWNrVmFsaWRpdHkoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLSAgICAJaWYgKGlzQ2xvc2VkKSB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uICgiQ29ubmVjdGlvbiBjbG9zZWQiKTsKLSAgICAJaWYgKCF2YWxpZCkgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAoIkludmFsaWQgQ29ubmVjdGlvbiIpOwotICAgIAlpZihhY3RpdmUgPT0gZmFsc2UpIHsKLSAgICAJICAgIG1jLmNoZWNrSWZBY3RpdmUodGhpcyk7Ci0gICAgCX0KKyAgICAgICAgaWYgKGlzQ2xvc2VkKSB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uICgiQ29ubmVjdGlvbiBjbG9zZWQiKTsKKyAgICAgICAgaWYgKCF2YWxpZCkgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAoIkludmFsaWQgQ29ubmVjdGlvbiIpOworICAgICAgICBpZihhY3RpdmUgPT0gZmFsc2UpIHsKKyAgICAgICAgICAgIG1jLmNoZWNrSWZBY3RpdmUodGhpcyk7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBhY3RpdmUgZmxhZyB0byB0cnVlCiAgICAgICoKLSAgICAgKiBAcGFyYW0JYWN0dglib29sZWFuCisgICAgICogQHBhcmFtICAgIGFjdHYgICAgYm9vbGVhbgogICAgICAqLwogICAgIHZvaWQgc2V0QWN0aXZlKGJvb2xlYW4gYWN0dikgewogICAgICAgICBhY3RpdmUgPSBhY3R2OwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQppbmRleCBhYzdlNzQ4Li5mMDY3NWE0IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQpAQCAtMzMsMTkgKzMzLDE5IEBACiAgKiBUaGlzIGNsYXNzIGlzIGV4dGVuZGVkIGJ5IHRoZSBEYXRhU291cmNlIHNwZWNpZmljIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBmYWN0b3JpZXMKICAqIGFuZCB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBmb3IgdGhlIDxjb2RlPkRyaXZlck1hbmFnZXI8L2NvZGU+LgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDgvMDMKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA4LzAzCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiAKLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnksIAorcHVibGljIGFic3RyYWN0IGNsYXNzIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSwKICAgICBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7Ci0gICAgCisKICAgICBwcm90ZWN0ZWQgRGF0YVNvdXJjZVNwZWMgc3BlYyA9IG5ldyBEYXRhU291cmNlU3BlYygpOwogICAgIHByb3RlY3RlZCB0cmFuc2llbnQgRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIgZHNPYmpCdWlsZGVyOwotICAgIAorCiAgICAgcHJvdGVjdGVkIGphdmEuaW8uUHJpbnRXcml0ZXIgbG9nV3JpdGVyID0gbnVsbDsKICAgICBwcm90ZWN0ZWQgamFrYXJ0YS5yZXNvdXJjZS5zcGkuUmVzb3VyY2VBZGFwdGVyIHJhID0gbnVsbDsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIExvZ2dlciBfbG9nZ2VyOwogICAgIHN0YXRpYyB7CiAgICAgICAgIF9sb2dnZXIgPSBMb2dnZXIuZ2V0QW5vbnltb3VzTG9nZ2VyKCk7CkBAIC01NCw4ICs1NCw4IEBACiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIENvbm5lY3Rpb24gRmFjdG9yeSBpbnN0YW5jZS4gVGhlIDxjb2RlPkNvbm5lY3Rpb25NYW5hZ2VyPC9jb2RlPiBpbXBsZW1lbnRhdGlvbgogICAgICAqIG9mIHRoZSByZXNvdXJjZSBhZGFwdGVyIGlzIHVzZWQgaGVyZS4KLSAgICAgKiAKLSAgICAgKiBAcmV0dXJuCUdlbmVyaWMgSkRCQyBDb25uZWN0b3IgaW1wbGVtZW50YXRpb24gb2YgPGNvZGU+amF2YXguc3FsLkRhdGFTb3VyY2U8L2NvZGU+CisgICAgICoKKyAgICAgKiBAcmV0dXJuICAgIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IgaW1wbGVtZW50YXRpb24gb2YgPGNvZGU+amF2YXguc3FsLkRhdGFTb3VyY2U8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIE9iamVjdCBjcmVhdGVDb25uZWN0aW9uRmFjdG9yeSgpIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTYzLDE2ICs2MywxNiBAQAogICAgICAgICB9CiAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlIGNmID0gbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlKAogICAgICAgICAgICAgKGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSl0aGlzLCBudWxsKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGNmOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBDb25uZWN0aW9uIEZhY3RvcnkgaW5zdGFuY2UuIFRoZSA8Y29kZT5Db25uZWN0aW9uTWFuYWdlcjwvY29kZT4gaW1wbGVtZW50YXRpb24KICAgICAgKiBvZiB0aGUgYXBwbGljYXRpb24gc2VydmVyIGlzIHVzZWQgaGVyZS4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JY3hNYW5hZ2VyCTxjb2RlPkNvbm5lY3Rpb25NYW5hZ2VyPC9jb2RlPiBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgotICAgICAqIEByZXR1cm4JR2VuZXJpYyBKREJDIENvbm5lY3RvciBpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29kZT4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBjeE1hbmFnZXIgICAgPGNvZGU+Q29ubmVjdGlvbk1hbmFnZXI8L2NvZGU+IHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogQHJldHVybiAgICBHZW5lcmljIEpEQkMgQ29ubmVjdG9yIGltcGxlbWVudGF0aW9uIG9mIDxjb2RlPmphdmF4LnNxbC5EYXRhU291cmNlPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBPYmplY3QgY3JlYXRlQ29ubmVjdGlvbkZhY3RvcnkoamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvbk1hbmFnZXIgY3hNYW5hZ2VyKSB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC04MCw1NSArODAsNTUgQEAKICAgICAgICAgfQogICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuRGF0YVNvdXJjZSBjZiA9IG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuRGF0YVNvdXJjZSgKICAgICAgICAgICAgIChqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkpdGhpcywgY3hNYW5hZ2VyKTsKLSAgICAgICAgcmV0dXJuIGNmOyAKKyAgICAgICAgcmV0dXJuIGNmOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBuZXcgcGh5c2ljYWwgY29ubmVjdGlvbiB0byB0aGUgdW5kZXJseWluZyBFSVMgcmVzb3VyY2UKICAgICAgKiBtYW5hZ2VyLgotICAgICAqIAotICAgICAqIEBwYXJhbQlzdWJqZWN0CTxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICogQHBhcmFtCWN4UmVxdWVzdEluZm8JPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiB3aGljaCBtYXkgYmUgY3JlYXRlZAotICAgICAqICAgICAgIAkgICAgICAgICAgICAgCWFzIGEgcmVzdWx0IG9mIHRoZSBpbnZvY2F0aW9uIDxjb2RlPmdldENvbm5lY3Rpb24odXNlciwgcGFzc3dvcmQpPC9jb2RlPgotICAgICAqICAgICAgIAkgICAgICAgICAgICAgCW9uIHRoZSA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QKLSAgICAgKiBAcmV0dXJuCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QgY3JlYXRlZAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gaW5zdGFudGlhdGluZyB0aGUKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCTxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdCB1c2VkIGZvciB0aGUKLSAgICAgKiAgICAgICAJCQkJY3JlYXRpb24gb2YgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QKLSAgICAgKiBAdGhyb3dzCVNlY3VyaXR5RXhjZXB0aW9uCWlmIHRoZXJlIGlubyA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdAotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJc2F0aXNmeWluZyB0aGlzIHJlcXVlc3QgCi0gICAgICogQHRocm93cwlSZXNvdXJjZUFsbG9jYXRpb25FeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUgCi0gICAgICoJCQkJCQlwaHlzaWNhbCBjb25uZWN0aW9uCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3ViamVjdCAgICA8Y29kZT5TdWJqZWN0PC9jb2RlPiBpbnN0YW5jZSBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqIEBwYXJhbSAgICBjeFJlcXVlc3RJbmZvICAgIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gd2hpY2ggbWF5IGJlIGNyZWF0ZWQKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyBhIHJlc3VsdCBvZiB0aGUgaW52b2NhdGlvbiA8Y29kZT5nZXRDb25uZWN0aW9uKHVzZXIsIHBhc3N3b3JkKTwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiB0aGUgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0CisgICAgICogQHJldHVybiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGNyZWF0ZWQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGluc3RhbnRpYXRpbmcgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QgdXNlZCBmb3IgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgIGNyZWF0aW9uIG9mIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0CisgICAgICogQHRocm93cyAgICBTZWN1cml0eUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpbm8gPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdGlzZnlpbmcgdGhpcyByZXF1ZXN0CisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUFsbG9jYXRpb25FeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHBoeXNpY2FsIGNvbm5lY3Rpb24KICAgICAgKi8KICAgICBwdWJsaWMgYWJzdHJhY3QgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gY3JlYXRlTWFuYWdlZENvbm5lY3Rpb24oamF2YXguc2VjdXJpdHkuYXV0aC5TdWJqZWN0IHN1YmplY3QsCiAgICAgICAgIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBjeFJlcXVlc3RJbmZvKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb247Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBDaGVjayBpZiB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaXMgZXF1YWwgdG8gCisgICAgICogQ2hlY2sgaWYgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGlzIGVxdWFsIHRvCiAgICAgICogYW5vdGhlciA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LgotICAgICAqIAotICAgICAqIEBwYXJhbQlvdGhlcgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdCBmb3IgY2hlY2tpbmcgZXF1YWxpdHkgd2l0aAotICAgICAqIEByZXR1cm4JdHJ1ZQlpZiB0aGUgcHJvcGVydHkgc2V0cyBvZiBib3RoIHRoZSAKLSAgICAgKgkJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0cyBhcmUgdGhlIHNhbWUKLSAgICAgKgkJZmFsc2UJb3RoZXJ3aXNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgb3RoZXIgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QgZm9yIGNoZWNraW5nIGVxdWFsaXR5IHdpdGgKKyAgICAgKiBAcmV0dXJuICAgIHRydWUgICAgaWYgdGhlIHByb3BlcnR5IHNldHMgb2YgYm90aCB0aGUKKyAgICAgKiAgICAgICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0cyBhcmUgdGhlIHNhbWUKKyAgICAgKiAgICAgICAgZmFsc2UgICAgb3RoZXJ3aXNlCiAgICAgICovCiAgICAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvdGhlcik7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXQgdGhlIGxvZyB3cml0ZXIgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAc2VlCTxjb2RlPnNldExvZ1dyaXRlcjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRMb2dXcml0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIGphdmEuaW8uUHJpbnRXcml0ZXIgZ2V0TG9nV3JpdGVyKCkgewogICAgICAgICByZXR1cm4gbG9nV3JpdGVyOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAc2VlCTxjb2RlPnNldFJlc291cmNlQWRhcHRlcjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0UmVzb3VyY2VBZGFwdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBqYWthcnRhLnJlc291cmNlLnNwaS5SZXNvdXJjZUFkYXB0ZXIgZ2V0UmVzb3VyY2VBZGFwdGVyKCkgewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtMTM2LDExICsxMzYsMTEgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmE7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgaGFzaCBjb2RlIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWhhc2ggY29kZSBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+CisgICAgICogQHJldHVybiAgICBoYXNoIGNvZGUgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKXsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTE0OCw0MSArMTQ4LDQxIEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHNwZWMuaGFzaENvZGUoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgbWF0Y2hlZCA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gZnJvbSB0aGUgY2FuZGlkYXRlIAorICAgICAqIFJldHVybnMgYSBtYXRjaGVkIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBmcm9tIHRoZSBjYW5kaWRhdGUKICAgICAgKiBzZXQgb2YgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdHMuCi0gICAgICogCi0gICAgICogQHBhcmFtCWNvbm5lY3Rpb25TZXQJPGNvZGU+U2V0PC9jb2RlPiBvZiAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+Ci0gICAgICoJCQkJb2JqZWN0cyBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgotICAgICAqIEBwYXJhbQlzdWJqZWN0CSBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgotICAgICAqCQkJZm9yIHJldHJpZXZpbmcgaW5mb3JtYXRpb24gcmVxdWlyZWQgZm9yIG1hdGNoaW5nCi0gICAgICogQHBhcmFtCWN4UmVxdWVzdEluZm8JPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgotICAgICAqCQkJCWZvciByZXRyaWV2aW5nIGluZm9ybWF0aW9uIHJlcXVpcmVkIGZvciBtYXRjaGluZwotICAgICAqIEByZXR1cm4JPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHRoYXQgaXMgdGhlIGJlc3QgbWF0Y2ggc2F0aXNmeWluZyB0aGlzIHJlcXVlc3QKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGFjY2Vzc2luZyB0aGUgPGNvZGU+U3ViamVjdDwvY29kZT4KLSAgICAgKgkJCQkJcGFyYW1ldGVyIG9yIHRoZSA8Y29kZT5TZXQ8L2NvZGU+IG9mIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgotICAgICAqCQkJCQlvYmplY3RzIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgY29ubmVjdGlvblNldCAgICA8Y29kZT5TZXQ8L2NvZGU+IG9mICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgICBvYmplY3RzIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogQHBhcmFtICAgIHN1YmplY3QgICAgIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogICAgICAgICAgICBmb3IgcmV0cmlldmluZyBpbmZvcm1hdGlvbiByZXF1aXJlZCBmb3IgbWF0Y2hpbmcKKyAgICAgKiBAcGFyYW0gICAgY3hSZXF1ZXN0SW5mbyAgICA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogICAgICAgICAgICAgICAgZm9yIHJldHJpZXZpbmcgaW5mb3JtYXRpb24gcmVxdWlyZWQgZm9yIG1hdGNoaW5nCisgICAgICogQHJldHVybiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdGhhdCBpcyB0aGUgYmVzdCBtYXRjaCBzYXRpc2Z5aW5nIHRoaXMgcmVxdWVzdAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgYWNjZXNzaW5nIHRoZSA8Y29kZT5TdWJqZWN0PC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIgb3IgdGhlIDxjb2RlPlNldDwvY29kZT4gb2YgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogICAgICAgICAgICAgICAgICAgIG9iamVjdHMgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKICAgICAgKi8KLSAgICBwdWJsaWMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWF0Y2hNYW5hZ2VkQ29ubmVjdGlvbnMoamF2YS51dGlsLlNldCBjb25uZWN0aW9uU2V0LCAKKyAgICBwdWJsaWMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWF0Y2hNYW5hZ2VkQ29ubmVjdGlvbnMoamF2YS51dGlsLlNldCBjb25uZWN0aW9uU2V0LAogICAgICAgICBqYXZheC5zZWN1cml0eS5hdXRoLlN1YmplY3Qgc3ViamVjdCwgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxdWVzdEluZm8pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CiAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gbWF0Y2hNYW5hZ2VkQ29ubmVjdGlvbnMiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZihjb25uZWN0aW9uU2V0ID09IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIFBhc3N3b3JkQ3JlZGVudGlhbCBwYyA9IFNlY3VyaXR5VXRpbHMuZ2V0UGFzc3dvcmRDcmVkZW50aWFsKHRoaXMsIHN1YmplY3QsIGN4UmVxdWVzdEluZm8pOwotICAgICAgICAKKwogICAgICAgICBqYXZhLnV0aWwuSXRlcmF0b3IgaXRlciA9IGNvbm5lY3Rpb25TZXQuaXRlcmF0b3IoKTsKICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1jID0gbnVsbDsKICAgICAgICAgd2hpbGUoaXRlci5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgbWMgPSAoY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uKSBpdGVyLm5leHQoKTsKICAgICAgICAgICAgIH0gY2F0Y2goamF2YS51dGlsLk5vU3VjaEVsZW1lbnRFeGNlcHRpb24gbnNlZSkgewotCSAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfaXRlciIpOworICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfaXRlciIpOwogICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihuc2VlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZihwYyA9PSBudWxsICYmIHRoaXMuZXF1YWxzKG1jLmdldE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSgpKSkgewpAQCAtMTkxLDcgKzE5MSw3IEBACiAgICAgICAgICAgICAgICAgICAgIGlzVmFsaWQobWMpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWM7CiAgICAgICAgICAgICAgICAgfSBjYXRjaChSZXNvdXJjZUV4Y2VwdGlvbiByZSkgewotCSAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3JlIiwgcmUpOworICAgICAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3JlIiwgcmUpOwogICAgICAgICAgICAgICAgICAgICBtYy5jb25uZWN0aW9uRXJyb3JPY2N1cnJlZChyZSwgbnVsbCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIGlmKFNlY3VyaXR5VXRpbHMuaXNQYXNzd29yZENyZWRlbnRpYWxFcXVhbChwYywgbWMuZ2V0UGFzc3dvcmRDcmVkZW50aWFsKCkpID09IHRydWUpIHsKQEAgLTIwMCw0NSArMjAwLDQ1IEBACiAgICAgICAgICAgICAgICAgICAgIGlzVmFsaWQobWMpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWM7CiAgICAgICAgICAgICAgICAgfSBjYXRjaChSZXNvdXJjZUV4Y2VwdGlvbiByZSkgewotCSAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMucmUiKTsKKyAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLnJlIik7CiAgICAgICAgICAgICAgICAgICAgIG1jLmNvbm5lY3Rpb25FcnJvck9jY3VycmVkKHJlLCBudWxsKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotICAgIAorCiAgICAgLy9HSkNJTlQKICAgICAvKioKICAgICAgKiBDaGVja3MgaWYgYSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaXMgdG8gYmUgdmFsaWRhdGVkIG9yIG5vdAogICAgICAqIGFuZCB2YWxpZGF0ZXMgaXQgb3IgcmV0dXJucy4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JbWMJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIG9yCi0gICAgICogICAgICAgIAkgICAgICAgICAgCQlpZiB2YWxpZGF0aW9uIG1ldGhvZCBpcyBub3QgcHJvcGVyCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIG9yCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB2YWxpZGF0aW9uIG1ldGhvZCBpcyBub3QgcHJvcGVyCiAgICAgICovCiAgICAgdm9pZCBpc1ZhbGlkKGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKIAogICAgICAgICBpZihtYy5pc1RyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKSB7Ci0JICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgCi0gICAgICAgIGJvb2xlYW4gY29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZCA9IAorCisgICAgICAgIGJvb2xlYW4gY29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZCA9CiAgICAgICAgICAgICAobmV3IEJvb2xlYW4oc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ09OTkVDVElPTlZBTElEQVRJT05SRVFVSVJFRCkudG9Mb3dlckNhc2UoKSkpLmJvb2xlYW5WYWx1ZSgpOwogICAgICAgICBpZiggY29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZCA9PSBmYWxzZSB8fCBtYyA9PSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIAorCisKICAgICAgICAgU3RyaW5nIHZhbGlkYXRpb25NZXRob2QgPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OTUVUSE9EKS50b0xvd2VyQ2FzZSgpOwotICAgICAgICAKKwogICAgICAgICBtYy5jaGVja0lmVmFsaWQoKTsKICAgICAgICAgLyoqCiAgICAgICAgICAqIFRoZSBhYm92ZSBjYWxsIGNoZWNrcyBpZiB0aGUgYWN0dWFsIHBoeXNpY2FsIGNvbm5lY3Rpb24KICAgICAgICAgICogaXMgdXNhYmxlIG9yIG5vdC4KICAgICAgICAgICovCiAgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gY29uID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpOwotICAgICAgICAKKwogICAgICAgICBpZih2YWxpZGF0aW9uTWV0aG9kLmVxdWFscygiYXV0by1jb21taXQiKSA9PSB0cnVlKSB7CiAgICAgICAgICAgICBpc1ZhbGlkQnlBdXRvQ29tbWl0KGNvbik7CiAgICAgICAgIH0gZWxzZSBpZih2YWxpZGF0aW9uTWV0aG9kLmVxdWFsc0lnbm9yZUNhc2UoIm1ldGEtZGF0YSIpID09IHRydWUpIHsKQEAgLTI0OSwyOCArMjQ5LDI4IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSB2YWxpZGF0aW9uIG1ldGhvZCBpcyBub3QgcHJvcGVyIik7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDaGVja3MgaWYgYSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBpcyB2YWxpZCBvciBub3QKICAgICAgKiBieSBjaGVja2luZyBpdHMgYXV0byBjb21taXQgcHJvcGVydHkuCi0gICAgICogCi0gICAgICogQHBhcmFtCWNvbgk8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqCisgICAgICogQHBhcmFtICAgIGNvbiAgICA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqLwogICAgIHByb3RlY3RlZCB2b2lkIGlzVmFsaWRCeUF1dG9Db21taXQoamF2YS5zcWwuQ29ubmVjdGlvbiBjb24pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGNvbiA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyAiCiAgICAgICAgICAgICAgICAgKyAidGhlIGNvbm5lY3Rpb24gaXMgbnVsbCIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgIC8vIE5vdGljZSB0aGF0IHVzaW5nIHNvbWV0aGluZyBsaWtlIAorICAgICAgICAgICAvLyBOb3RpY2UgdGhhdCB1c2luZyBzb21ldGhpbmcgbGlrZQogICAgICAgICAgICAvLyBkYkNvbi5zZXRBdXRvQ29tbWl0KGRiQ29uLmdldEF1dG9Db21taXQoKSkgd2lsbCBjYXVzZSBwcm9ibGVtcyB3aXRoCiAgICAgICAgICAgIC8vIHNvbWUgZHJpdmVycyBsaWtlIHN5YmFzZQotICAgICAgICAgICAvLyBXZSBkbyBub3QgdmFsaWRhdGUgY29ubmVjdGlvbnMgdGhhdCBhcmUgYWxyZWFkeSBlbmxpc3RlZCAKLQkgICAvL2luIGEgdHJhbnNhY3Rpb24gCi0JICAgLy8gV2UgY3ljbGUgYXV0b2NvbW1pdCB0byB0cnVlIGFuZCBmYWxzZSB0byBieS1wYXNzIGRyaXZlcnMgdGhhdCAKLQkgICAvLyBtaWdodCBjYWNoZSB0aGUgY2FsbCB0byBzZXQgYXV0b2NvbWl0dAorICAgICAgICAgICAvLyBXZSBkbyBub3QgdmFsaWRhdGUgY29ubmVjdGlvbnMgdGhhdCBhcmUgYWxyZWFkeSBlbmxpc3RlZAorICAgICAgIC8vaW4gYSB0cmFuc2FjdGlvbgorICAgICAgIC8vIFdlIGN5Y2xlIGF1dG9jb21taXQgdG8gdHJ1ZSBhbmQgZmFsc2UgdG8gYnktcGFzcyBkcml2ZXJzIHRoYXQKKyAgICAgICAvLyBtaWdodCBjYWNoZSB0aGUgY2FsbCB0byBzZXQgYXV0b2NvbWl0dAogICAgICAgICAgICAvLyBBbHNvIG5vdGljZSB0aGF0IHNvbWUgWEEgZGF0YSBzb3VyY2VzIHdpbGwgdGhyb3cgYW5kIGV4Y2VwdGlvbiBpZgogICAgICAgICAgICAvLyB5b3UgdHJ5IHRvIGNhbGwgc2V0QXV0b0NvbW1pdCwgZm9yIHRoZW0gdGhpcyBtZXRob2QgaXMgbm90IHJlY29tbWVuZGVkCiAKQEAgLTI4MSw5MCArMjgxLDkwIEBACiAgICAgICAgICAgICAgICAgY29uLnJvbGxiYWNrKCk7IC8vIHByZXZlbnRzIHVuY29tcGxldGVkIHRyYW5zYWN0aW9uIGV4Y2VwdGlvbnMKICAgICAgICAgICAgICAgICBjb24uc2V0QXV0b0NvbW1pdCh0cnVlKTsKICAgICAgICAgICAgfQotICAgICAgICAKLQkgICBjb24uc2V0QXV0b0NvbW1pdChhYyk7CisKKyAgICAgICBjb24uc2V0QXV0b0NvbW1pdChhYyk7CiAKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19hdXRvY29tbWl0Iik7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2F1dG9jb21taXQiKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDaGVja3MgaWYgYSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBpcyB2YWxpZCBvciBub3QKICAgICAgKiBieSBjaGVja2luZyBpdHMgbWV0YSBkYXRhLgotICAgICAqIAotICAgICAqIEBwYXJhbQljb24JPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBjb24gICAgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKi8KICAgICBwcm90ZWN0ZWQgdm9pZCBpc1ZhbGlkQnlNZXRhRGF0YShqYXZhLnNxbC5Db25uZWN0aW9uIGNvbikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYoY29uID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzICIKICAgICAgICAgICAgICAgICArICJ0aGUgY29ubmVjdGlvbiBpcyBudWxsIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGphdmEuc3FsLkRhdGFiYXNlTWV0YURhdGEgZG1kID0gY29uLmdldE1ldGFEYXRhKCk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfbWQiKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfbWQiKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzICIKICAgICAgICAgICAgICAgICArICJnZXR0aW5nIHRoZSBtZXRhIGRhdGEgZmFpbGVkOiAiICsgc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2hlY2tzIGlmIGEgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gaXMgdmFsaWQgb3Igbm90CiAgICAgICogYnkgcXVlcnlpbmcgYSB0YWJsZS4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JY29uCTxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAotICAgICAqIEBwYXJhbQl0YWJsZU5hbWUJdGFibGUgd2hpY2ggc2hvdWxkIGJlIHF1ZXJpZWQKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqCisgICAgICogQHBhcmFtICAgIGNvbiAgICA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKKyAgICAgKiBAcGFyYW0gICAgdGFibGVOYW1lICAgIHRhYmxlIHdoaWNoIHNob3VsZCBiZSBxdWVyaWVkCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKi8KLSAgICBwcm90ZWN0ZWQgdm9pZCBpc1ZhbGlkQnlUYWJsZVF1ZXJ5KGphdmEuc3FsLkNvbm5lY3Rpb24gY29uLCAKKyAgICBwcm90ZWN0ZWQgdm9pZCBpc1ZhbGlkQnlUYWJsZVF1ZXJ5KGphdmEuc3FsLkNvbm5lY3Rpb24gY29uLAogICAgICAgICBTdHJpbmcgdGFibGVOYW1lKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihjb24gPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgIgogICAgICAgICAgICAgICAgICsgInRoZSBjb25uZWN0aW9uIGlzIG51bGwiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgamF2YS5zcWwuU3RhdGVtZW50IHN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CiAgICAgICAgICAgICBqYXZhLnNxbC5SZXN1bHRTZXQgcnMgPSBzdG10LmV4ZWN1dGVRdWVyeSgiU0VMRUNUICogRlJPTSAiICsgdGFibGVOYW1lKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19leGVjdXRlIik7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2V4ZWN1dGUiKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzICIKICAgICAgICAgICAgICAgICArICJxdWVyeWluZyB0aGUgdGFibGUgIiArIHRhYmxlTmFtZSArICIgZmFpbGVkOiAiICsgc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgaXNvbGF0aW9uIGxldmVsIHNwZWNpZmllZCBpbiB0aGUgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPgogICAgICAqIGZvciB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHBhc3NlZC4KICAgICAgKgotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBpc29sYXRpb24gcHJvcGVydHkgaXMgaW52YWxpZAotICAgICAqCQkJCQlvciBpZiB0aGUgaXNvbGF0aW9uIGNhbm5vdCBiZSBzZXQgb3ZlciB0aGUgY29ubmVjdGlvbgorICAgICAqIEBwYXJhbSAgICBtYyAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBpc29sYXRpb24gcHJvcGVydHkgaXMgaW52YWxpZAorICAgICAqICAgICAgICAgICAgICAgICAgICBvciBpZiB0aGUgaXNvbGF0aW9uIGNhbm5vdCBiZSBzZXQgb3ZlciB0aGUgY29ubmVjdGlvbgogICAgICAqLwogICAgIHByb3RlY3RlZCB2b2lkIHNldElzb2xhdGlvbihjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWMpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7Ci0gICAgCQotICAgIAlqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiA9IG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKTsKLSAgICAJaWYoY29uID09IG51bGwpIHsKLSAgICAJICAgIHJldHVybjsKLSAgICAJfQotICAgIAkKLSAgICAJU3RyaW5nIHRyYW5Jc29sYXRpb24gPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTik7Ci0gICAgCWlmKHRyYW5Jc29sYXRpb24gIT0gbnVsbCAmJiB0cmFuSXNvbGF0aW9uLmVxdWFscygiIikgPT0gZmFsc2UpIHsKLSAgICAJICAgIGludCB0cmFuSXNvbGF0aW9uSW50ID0gZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb25JbnQodHJhbklzb2xhdGlvbik7Ci0gICAgCSAgICB0cnkgewotICAgIAkgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbih0cmFuSXNvbGF0aW9uSW50KTsKLSAgICAJICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3R4X2xldmVsIik7Ci0gICAgCSAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGNvdWxkICIKLSAgICAJICAgICAgICAgICAgKyAibm90IGJlIHNldDogIiArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAJICAgIH0KLSAgICAJfQorCisgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gY29uID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpOworICAgICAgICBpZihjb24gPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgU3RyaW5nIHRyYW5Jc29sYXRpb24gPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTik7CisgICAgICAgIGlmKHRyYW5Jc29sYXRpb24gIT0gbnVsbCAmJiB0cmFuSXNvbGF0aW9uLmVxdWFscygiIikgPT0gZmFsc2UpIHsKKyAgICAgICAgICAgIGludCB0cmFuSXNvbGF0aW9uSW50ID0gZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb25JbnQodHJhbklzb2xhdGlvbik7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbih0cmFuSXNvbGF0aW9uSW50KTsKKyAgICAgICAgICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKKyAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3R4X2xldmVsIik7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGNvdWxkICIKKyAgICAgICAgICAgICAgICAgICAgKyAibm90IGJlIHNldDogIiArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJlc2V0cyB0aGUgaXNvbGF0aW9uIGxldmVsIGZvciB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHBhc3NlZC4KICAgICAgKiBJZiB0aGUgdHJhbnNhY3Rpb24gbGV2ZWwgaXMgdG8gYmUgZ3VhcmFudGVlZCB0byBiZSB0aGUgc2FtZSBhcyB0aGUgb25lCkBAIC0zNzMsMzgyICszNzMsMzgyIEBACiAgICAgICogaXNvbGF0aW9uIGxldmVsIGZyb20gdGhlIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gcGFzc2VkLiBFbHNlLAogICAgICAqIGl0IHNldHMgaXQgdG8gdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBwYXNzZWQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWMJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+Ci0gICAgICogQHBhcmFtCXRyYW5Jc29sCWludAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIGlzb2xhdGlvbiBwcm9wZXJ0eSBpcyBpbnZhbGlkCi0gICAgICoJCQkJCW9yIGlmIHRoZSBpc29sYXRpb24gY2Fubm90IGJlIHNldCBvdmVyIHRoZSBjb25uZWN0aW9uCisgICAgICogQHBhcmFtICAgIG1jICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB0cmFuSXNvbCAgICBpbnQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBpc29sYXRpb24gcHJvcGVydHkgaXMgaW52YWxpZAorICAgICAqICAgICAgICAgICAgICAgICAgICBvciBpZiB0aGUgaXNvbGF0aW9uIGNhbm5vdCBiZSBzZXQgb3ZlciB0aGUgY29ubmVjdGlvbgogICAgICAqLwogICAgIHZvaWQgcmVzZXRJc29sYXRpb24oY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1jLCBpbnQgdHJhbklzb2wpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7Ci0gICAgCQotICAgIAlqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiA9IG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKTsKLSAgICAJaWYoY29uID09IG51bGwpIHsKLSAgICAJICAgIHJldHVybjsKLSAgICAJfQotICAgIAkKLSAgICAJU3RyaW5nIHRyYW5Jc29sYXRpb24gPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTik7Ci0gICAgCWlmKHRyYW5Jc29sYXRpb24gIT0gbnVsbCAmJiB0cmFuSXNvbGF0aW9uLmVxdWFscygiIikgPT0gZmFsc2UpIHsKLSAgICAJICAgIFN0cmluZyBndWFyYW50ZWVJc29sYXRpb25MZXZlbCA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkdVQVJBTlRFRUlTT0xBVElPTkxFVkVMKTsKLSAgICAJICAgIAotICAgIAkgICAgaWYoZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwgIT0gbnVsbCAmJiBndWFyYW50ZWVJc29sYXRpb25MZXZlbC5lcXVhbHMoIiIpID09IGZhbHNlKSB7Ci0gICAgCSAgICAgICAgYm9vbGVhbiBndWFyYW50ZWUgPSAobmV3IEJvb2xlYW4oZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwudG9Mb3dlckNhc2UoKSkpLmJvb2xlYW5WYWx1ZSgpOwotICAgIAkgICAgICAgIAotICAgIAkgICAgICAgIGlmKGd1YXJhbnRlZSkgewotICAgIAkgICAgICAgICAgICBpbnQgdHJhbklzb2xhdGlvbkludCA9IGdldFRyYW5zYWN0aW9uSXNvbGF0aW9uSW50KHRyYW5Jc29sYXRpb24pOwotICAgIAkgICAgICAgICAgICB0cnkgewotICAgIAkgICAgICAgICAgICAgICAgaWYodHJhbklzb2xhdGlvbkludCAhPSBjb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKSkgewotICAgIAkgICAgICAgICAgICAgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbih0cmFuSXNvbGF0aW9uSW50KTsKLSAgICAJICAgICAgICAgICAgICAgIH0KLSAgICAJICAgICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y190eF9sZXZlbCIpOwotICAgIAkgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgaXNvbGF0aW9uIGxldmVsIGNvdWxkIG5vdCBiZSBzZXQ6ICIKLSAgICAJICAgICAgICAgICAgICAgICAgICArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAJICAgICAgICAgICAgfQotICAgIAkgICAgICAgIH0gZWxzZSB7Ci0gICAgCSAgICAgICAgICAgIHRyeSB7Ci0gICAgCSAgICAgICAgICAgICAgICBpZih0cmFuSXNvbCAhPSBjb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKSkgewotICAgIAkgICAgICAgICAgICAgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbih0cmFuSXNvbCk7Ci0gICAgCSAgICAgICAgICAgICAgICB9Ci0gICAgCSAgICAgICAgICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfdHhfbGV2ZWwiKTsKLSAgICAJICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGlzb2xhdGlvbiBsZXZlbCBjb3VsZCBub3QgYmUgc2V0OiAiCi0gICAgCSAgICAgICAgICAgICAgICAgICAgKyBzcWxlLmdldE1lc3NhZ2UoKSk7Ci0gICAgCSAgICAgICAgICAgIH0KLSAgICAJICAgICAgICB9Ci0gICAgCSAgICB9Ci0gICAgCX0KKworICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiA9IG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKTsKKyAgICAgICAgaWYoY29uID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFN0cmluZyB0cmFuSXNvbGF0aW9uID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04pOworICAgICAgICBpZih0cmFuSXNvbGF0aW9uICE9IG51bGwgJiYgdHJhbklzb2xhdGlvbi5lcXVhbHMoIiIpID09IGZhbHNlKSB7CisgICAgICAgICAgICBTdHJpbmcgZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwgPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5HVUFSQU5URUVJU09MQVRJT05MRVZFTCk7CisKKyAgICAgICAgICAgIGlmKGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsICE9IG51bGwgJiYgZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwuZXF1YWxzKCIiKSA9PSBmYWxzZSkgeworICAgICAgICAgICAgICAgIGJvb2xlYW4gZ3VhcmFudGVlID0gKG5ldyBCb29sZWFuKGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsLnRvTG93ZXJDYXNlKCkpKS5ib29sZWFuVmFsdWUoKTsKKworICAgICAgICAgICAgICAgIGlmKGd1YXJhbnRlZSkgeworICAgICAgICAgICAgICAgICAgICBpbnQgdHJhbklzb2xhdGlvbkludCA9IGdldFRyYW5zYWN0aW9uSXNvbGF0aW9uSW50KHRyYW5Jc29sYXRpb24pOworICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYodHJhbklzb2xhdGlvbkludCAhPSBjb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbih0cmFuSXNvbGF0aW9uSW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgeworICAgICAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y190eF9sZXZlbCIpOworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgaXNvbGF0aW9uIGxldmVsIGNvdWxkIG5vdCBiZSBzZXQ6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZih0cmFuSXNvbCAhPSBjb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbih0cmFuSXNvbCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKKyAgICAgICAgICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfdHhfbGV2ZWwiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGlzb2xhdGlvbiBsZXZlbCBjb3VsZCBub3QgYmUgc2V0OiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBzcWxlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBpbnRlZ2VyIGVxdWl2YWxlbnQgb2YgdGhlIHN0cmluZyBzcGVjaWZ5aW5nCiAgICAgICogdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbi4KICAgICAgKgotICAgICAqIEBwYXJhbQl0cmFuSXNvbGF0aW9uCXN0cmluZyBzcGVjaWZ5aW5nIHRoZSBpc29sYXRpb24gbGV2ZWwKLSAgICAgKiBAcmV0dXJuCXRyYW5Jc29sYXRpb25JbnQJdGhlIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IGNvbnN0YW50Ci0gICAgICoJCQkJCWZvciB0aGUgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIGlzb2xhdGlvbi4KKyAgICAgKiBAcGFyYW0gICAgdHJhbklzb2xhdGlvbiAgICBzdHJpbmcgc3BlY2lmeWluZyB0aGUgaXNvbGF0aW9uIGxldmVsCisgICAgICogQHJldHVybiAgICB0cmFuSXNvbGF0aW9uSW50ICAgIHRoZSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBjb25zdGFudAorICAgICAqICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBpc29sYXRpb24uCiAgICAgICovCiAgICAgcHJpdmF0ZSBpbnQgZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb25JbnQoU3RyaW5nIHRyYW5Jc29sYXRpb24pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7Ci0gICAgCWlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgicmVhZC11bmNvbW1pdHRlZCIpKSB7Ci0gICAgCSAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9SRUFEX1VOQ09NTUlUVEVEOwotICAgIAl9IGVsc2UgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJyZWFkLWNvbW1pdHRlZCIpKSB7Ci0gICAgCSAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9SRUFEX0NPTU1JVFRFRDsKLSAgICAJfSBlbHNlIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgicmVwZWF0YWJsZS1yZWFkIikpIHsKLSAgICAJICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1JFUEVBVEFCTEVfUkVBRDsKLSAgICAJfSBlbHNlIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgic2VyaWFsaXphYmxlIikpIHsKLSAgICAJICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1NFUklBTElaQUJMRTsKLSAgICAJfSBlbHNlIHsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiSW52YWxpZCB0cmFuc2FjdGlvbiBpc29sYXRpb247IHRoZSB0cmFuc2FjdGlvbiAiCi0gICAgCSAgICAgICAgKyAiaXNvbGF0aW9uIGxldmVsIGNhbiBiZSBlbXB0eSBvciBhbnkgb2YgdGhlIGZvbGxvd2luZzogIgotICAgIAkgICAgICAgICAgICArICJyZWFkLXVuY29tbWl0dGVkLCByZWFkLWNvbW1pdHRlZCwgcmVwZWF0YWJsZS1yZWFkLCBzZXJpYWxpemFibGUiKTsKLSAgICAJfQorICAgICAgICBpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInJlYWQtdW5jb21taXR0ZWQiKSkgeworICAgICAgICAgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fUkVBRF9VTkNPTU1JVFRFRDsKKyAgICAgICAgfSBlbHNlIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgicmVhZC1jb21taXR0ZWQiKSkgeworICAgICAgICAgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fUkVBRF9DT01NSVRURUQ7CisgICAgICAgIH0gZWxzZSBpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInJlcGVhdGFibGUtcmVhZCIpKSB7CisgICAgICAgICAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9SRVBFQVRBQkxFX1JFQUQ7CisgICAgICAgIH0gZWxzZSBpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInNlcmlhbGl6YWJsZSIpKSB7CisgICAgICAgICAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9TRVJJQUxJWkFCTEU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkludmFsaWQgdHJhbnNhY3Rpb24gaXNvbGF0aW9uOyB0aGUgdHJhbnNhY3Rpb24gIgorICAgICAgICAgICAgICAgICsgImlzb2xhdGlvbiBsZXZlbCBjYW4gYmUgZW1wdHkgb3IgYW55IG9mIHRoZSBmb2xsb3dpbmc6ICIKKyAgICAgICAgICAgICAgICAgICAgKyAicmVhZC11bmNvbW1pdHRlZCwgcmVhZC1jb21taXR0ZWQsIHJlcGVhdGFibGUtcmVhZCwgc2VyaWFsaXphYmxlIik7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGxvZyB3cml0ZXIgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlvdXQJPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICogQHNlZQk8Y29kZT5nZXRMb2dXcml0ZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIG91dCAgICA8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldExvZ1dyaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRMb2dXcml0ZXIoamF2YS5pby5QcmludFdyaXRlciBvdXQpIHsKICAgICAgICAgbG9nV3JpdGVyID0gb3V0OwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgYXNzb2NpYXRlZCA8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IEphdmFCZWFuLgogICAgICAqCi0gICAgICogQHBhcmFtCXJhCTxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgCi0gICAgICoJCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHNlZQk8Y29kZT5nZXRSZXNvdXJjZUFkYXB0ZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHJhICAgIDxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyAgICAgKiAgICAgICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldFJlc291cmNlQWRhcHRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRSZXNvdXJjZUFkYXB0ZXIoamFrYXJ0YS5yZXNvdXJjZS5zcGkuUmVzb3VyY2VBZGFwdGVyIHJhKSB7Ci0gICAgICAgIHRoaXMucmEgPSByYTsgICAKKyAgICAgICAgdGhpcy5yYSA9IHJhOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHVzZXIgbmFtZQogICAgICAqCi0gICAgICogQHBhcmFtCXVzZXIJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB1c2VyICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRVc2VyKFN0cmluZyB1c2VyKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlVTRVJOQU1FLCB1c2VyKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSB1c2VyIG5hbWUKICAgICAgKgotICAgICAqIEByZXR1cm4JdXNlcgorICAgICAqIEByZXR1cm4gICAgdXNlcgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VXNlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlVTRVJOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB1c2VyIG5hbWUKICAgICAgKgotICAgICAqIEBwYXJhbQl1c2VyCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdXNlciAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0dXNlcihTdHJpbmcgdXNlcikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5VU0VSTkFNRSwgdXNlcik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgdXNlciBuYW1lCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXVzZXIKKyAgICAgKiBAcmV0dXJuICAgIHVzZXIKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHVzZXIoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5VU0VSTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgcGFzc3dvcmQKICAgICAgKgotICAgICAqIEBwYXJhbQlwYXNzd2QJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBwYXNzd2QgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFBhc3N3b3JkKFN0cmluZyBwYXNzd2QpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUEFTU1dPUkQsIHBhc3N3ZCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcGFzc3dvcmQKICAgICAgKgotICAgICAqIEByZXR1cm4JcGFzc3dkCisgICAgICogQHJldHVybiAgICBwYXNzd2QKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFBhc3N3b3JkKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUEFTU1dPUkQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHBhc3N3b3JkCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcGFzc3dkCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcGFzc3dkICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRwYXNzd29yZChTdHJpbmcgcGFzc3dkKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBBU1NXT1JELCBwYXNzd2QpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHBhc3N3b3JkCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXBhc3N3ZAorICAgICAqIEByZXR1cm4gICAgcGFzc3dkCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRwYXNzd29yZCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBBU1NXT1JEKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBkYXRhIHNvdXJjZQogICAgICAqCi0gICAgICogQHBhcmFtCWNsYXNzTmFtZQk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGNsYXNzTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Q2xhc3NOYW1lKFN0cmluZyBjbGFzc05hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ0xBU1NOQU1FLCBjbGFzc05hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGRhdGEgc291cmNlCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWNsYXNzTmFtZQorICAgICAqIEByZXR1cm4gICAgY2xhc3NOYW1lCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRDbGFzc05hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DTEFTU05BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGRhdGEgc291cmNlCiAgICAgICoKLSAgICAgKiBAcGFyYW0JY2xhc3NOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgY2xhc3NOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRjbGFzc05hbWUoU3RyaW5nIGNsYXNzTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5DTEFTU05BTUUsIGNsYXNzTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgZGF0YSBzb3VyY2UKICAgICAgKgotICAgICAqIEByZXR1cm4JY2xhc3NOYW1lCisgICAgICogQHJldHVybiAgICBjbGFzc05hbWUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGNsYXNzTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNMQVNTTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyBpZiBjb25uZWN0aW9uIHZhbGlkYXRpb24gaXMgcmVxdWlyZWQgb3Igbm90CiAgICAgICoKLSAgICAgKiBAcGFyYW0JY29uVmxkUmVxCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgY29uVmxkUmVxICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRDb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkKFN0cmluZyBjb25WbGRSZXEpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ09OTkVDVElPTlZBTElEQVRJT05SRVFVSVJFRCwgY29uVmxkUmVxKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIGlmIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiBpcyByZXF1aXJlZCBvciBub3QKICAgICAgKgotICAgICAqIEByZXR1cm4JY29ubmVjdGlvbiB2YWxpZGF0aW9uIHJlcXVpcmVtZW50CisgICAgICogQHJldHVybiAgICBjb25uZWN0aW9uIHZhbGlkYXRpb24gcmVxdWlyZW1lbnQKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldENvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVEKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIGlmIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiBpcyByZXF1aXJlZCBvciBub3QKICAgICAgKgotICAgICAqIEBwYXJhbQljb25WbGRSZXEJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBjb25WbGRSZXEgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGNvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQoU3RyaW5nIGNvblZsZFJlcSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5DT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVELCBjb25WbGRSZXEpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgaWYgY29ubmVjdGlvbiB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkIG9yIG5vdAogICAgICAqCi0gICAgICogQHJldHVybgljb25uZWN0aW9uIHZhbGlkYXRpb24gcmVxdWlyZW1lbnQKKyAgICAgKiBAcmV0dXJuICAgIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiByZXF1aXJlbWVudAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Y29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHZhbGlkYXRpb24gbWV0aG9kIHJlcXVpcmVkCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdmFsaWRhdGlvbk1ldGhvZAk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHZhbGlkYXRpb25NZXRob2QgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFZhbGlkYXRpb25NZXRob2QoU3RyaW5nIHZhbGlkYXRpb25NZXRob2QpIHsKICAgICAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05NRVRIT0QsIHZhbGlkYXRpb25NZXRob2QpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiBtZXRob2QgdHlwZQogICAgICAqCi0gICAgICogQHJldHVybgl2YWxpZGF0aW9uIG1ldGhvZAorICAgICAqIEByZXR1cm4gICAgdmFsaWRhdGlvbiBtZXRob2QKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFZhbGlkYXRpb25NZXRob2QoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OTUVUSE9EKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB2YWxpZGF0aW9uIG1ldGhvZCByZXF1aXJlZAogICAgICAqCi0gICAgICogQHBhcmFtCXZhbGlkYXRpb25NZXRob2QJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB2YWxpZGF0aW9uTWV0aG9kICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXR2YWxpZGF0aW9uTWV0aG9kKFN0cmluZyB2YWxpZGF0aW9uTWV0aG9kKSB7CiAgICAgICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OTUVUSE9ELCB2YWxpZGF0aW9uTWV0aG9kKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSBjb25uZWN0aW9uIHZhbGlkYXRpb24gbWV0aG9kIHR5cGUKICAgICAgKgotICAgICAqIEByZXR1cm4JdmFsaWRhdGlvbiBtZXRob2QKKyAgICAgKiBAcmV0dXJuICAgIHZhbGlkYXRpb24gbWV0aG9kCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXR2YWxpZGF0aW9uTWV0aG9kKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTk1FVEhPRCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdGFibGUgY2hlY2tlZCBmb3IgZHVyaW5nIHZhbGlkYXRpb24KICAgICAgKgotICAgICAqIEBwYXJhbQl0YWJsZQk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHRhYmxlICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRWYWxpZGF0aW9uVGFibGVOYW1lKFN0cmluZyB0YWJsZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OVEFCTEVOQU1FLCB0YWJsZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdGFibGUgY2hlY2tlZCBmb3IgZHVyaW5nIHZhbGlkYXRpb24KICAgICAgKgotICAgICAqIEByZXR1cm4JdGFibGUKKyAgICAgKiBAcmV0dXJuICAgIHRhYmxlCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRWYWxpZGF0aW9uVGFibGVOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTlRBQkxFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdGFibGUgY2hlY2tlZCBmb3IgZHVyaW5nIHZhbGlkYXRpb24KICAgICAgKgotICAgICAqIEBwYXJhbQl0YWJsZQk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHRhYmxlICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXR2YWxpZGF0aW9uVGFibGVOYW1lKFN0cmluZyB0YWJsZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OVEFCTEVOQU1FLCB0YWJsZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdGFibGUgY2hlY2tlZCBmb3IgZHVyaW5nIHZhbGlkYXRpb24KICAgICAgKgotICAgICAqIEByZXR1cm4JdGFibGUKKyAgICAgKiBAcmV0dXJuICAgIHRhYmxlCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXR2YWxpZGF0aW9uVGFibGVOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTlRBQkxFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdHJuSXNvbGF0aW9uCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdHJuSXNvbGF0aW9uICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRUcmFuc2FjdGlvbklzb2xhdGlvbihTdHJpbmcgdHJuSXNvbGF0aW9uKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OLCB0cm5Jc29sYXRpb24pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqCi0gICAgICogQHJldHVybgl0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKKyAgICAgKiBAcmV0dXJuICAgIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdHJuSXNvbGF0aW9uCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdHJuSXNvbGF0aW9uICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXR0cmFuc2FjdGlvbklzb2xhdGlvbihTdHJpbmcgdHJuSXNvbGF0aW9uKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OLCB0cm5Jc29sYXRpb24pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqCi0gICAgICogQHJldHVybgl0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKKyAgICAgKiBAcmV0dXJuICAgIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0dHJhbnNhY3Rpb25Jc29sYXRpb24oKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyBpZiB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsIGlzIHRvIGJlIGd1YXJhbnRlZWQKICAgICAgKgotICAgICAqIEBwYXJhbQlndWFyYW50ZWVJc29sYXRpb24JPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBndWFyYW50ZWVJc29sYXRpb24gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldEd1YXJhbnRlZUlzb2xhdGlvbkxldmVsKFN0cmluZyBndWFyYW50ZWVJc29sYXRpb24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwsIGd1YXJhbnRlZUlzb2xhdGlvbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWlzb2xhdGlvbiBsZXZlbCBndWFyYW50ZWUKKyAgICAgKiBAcmV0dXJuICAgIGlzb2xhdGlvbiBsZXZlbCBndWFyYW50ZWUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldEd1YXJhbnRlZUlzb2xhdGlvbkxldmVsKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgaWYgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbCBpcyB0byBiZSBndWFyYW50ZWVkCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZ3VhcmFudGVlSXNvbGF0aW9uCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZ3VhcmFudGVlSXNvbGF0aW9uICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRndWFyYW50ZWVJc29sYXRpb25MZXZlbChTdHJpbmcgZ3VhcmFudGVlSXNvbGF0aW9uKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkdVQVJBTlRFRUlTT0xBVElPTkxFVkVMLCBndWFyYW50ZWVJc29sYXRpb24pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqCi0gICAgICogQHJldHVybglpc29sYXRpb24gbGV2ZWwgZ3VhcmFudGVlCisgICAgICogQHJldHVybiAgICBpc29sYXRpb24gbGV2ZWwgZ3VhcmFudGVlCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRndWFyYW50ZWVJc29sYXRpb25MZXZlbCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkdVQVJBTlRFRUlTT0xBVElPTkxFVkVMKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L1Jlc291cmNlQWRhcHRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvUmVzb3VyY2VBZGFwdGVyLmphdmEKaW5kZXggNTU1YmU3Ny4uZWE1NDA3NiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvUmVzb3VyY2VBZGFwdGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvUmVzb3VyY2VBZGFwdGVyLmphdmEKQEAgLTI2LDggKzI2LDggQEAKIC8qKgogICogPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA4LzA1Ci0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wOC8wNQorICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogcHVibGljIGNsYXNzIFJlc291cmNlQWRhcHRlciBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLlJlc291cmNlQWRhcHRlciB7CiAKQEAgLTM3LDUyICszNyw1MiBAQAogICAgICAqIEVtcHR5IG1ldGhvZCBpbXBsZW1lbnRhdGlvbiBmb3IgZW5kcG9pbnRBY3RpdmF0aW9uCiAgICAgICogd2hpY2gganVzdCB0aHJvd3MgPGNvZGU+Tm90U3VwcG9ydGVkRXhjZXB0aW9uPC9jb2RlPgogICAgICAqCi0gICAgICogQHBhcmFtCW1lZgk8Y29kZT5NZXNzYWdlRW5kcG9pbnRGYWN0b3J5PC9jb2RlPgotICAgICAqIEBwYXJhbQlhcwk8Y29kZT5BY3RpdmF0aW9uU3BlYzwvY29kZT4KLSAgICAgKiBAdGhyb3dzCTxjb2RlPk5vdFN1cHBvcnRlZEV4Y2VwdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbWVmICAgIDxjb2RlPk1lc3NhZ2VFbmRwb2ludEZhY3Rvcnk8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGFzICAgIDxjb2RlPkFjdGl2YXRpb25TcGVjPC9jb2RlPgorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+Tm90U3VwcG9ydGVkRXhjZXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVuZHBvaW50QWN0aXZhdGlvbihNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IG1lZiwgQWN0aXZhdGlvblNwZWMgYXMpIHRocm93cyBOb3RTdXBwb3J0ZWRFeGNlcHRpb24gewogICAgICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJUaGlzIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIEpEQkMgY29ubmVjdG9yIik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogRW1wdHkgbWV0aG9kIGltcGxlbWVudGF0aW9uIGZvciBlbmRwb2ludERlYWN0aXZhdGlvbgogICAgICAqCi0gICAgICogQHBhcmFtCW1lZgk8Y29kZT5NZXNzYWdlRW5kcG9pbnRGYWN0b3J5PC9jb2RlPgotICAgICAqIEBwYXJhbQlhcwk8Y29kZT5BY3RpdmF0aW9uU3BlYzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbWVmICAgIDxjb2RlPk1lc3NhZ2VFbmRwb2ludEZhY3Rvcnk8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGFzICAgIDxjb2RlPkFjdGl2YXRpb25TcGVjPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVuZHBvaW50RGVhY3RpdmF0aW9uKE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgbWVmLCBBY3RpdmF0aW9uU3BlYyBhcykgewotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEVtcHR5IG1ldGhvZCBpbXBsZW1lbnRhdGlvbiBmb3IgZ2V0WEFSZXNvdXJjZXMKICAgICAgKiB3aGljaCBqdXN0IHRocm93cyA8Y29kZT5Ob3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+CiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3BlY3MJPGNvZGU+QWN0aXZhdGlvblNwZWM8L2NvZGU+IGFycmF5Ci0gICAgICogQHRocm93cwk8Y29kZT5Ob3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+CisgICAgICogQHBhcmFtICAgIHNwZWNzICAgIDxjb2RlPkFjdGl2YXRpb25TcGVjPC9jb2RlPiBhcnJheQorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+Tm90U3VwcG9ydGVkRXhjZXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBYQVJlc291cmNlW10gZ2V0WEFSZXNvdXJjZXMoQWN0aXZhdGlvblNwZWNbXSBzcGVjcykgdGhyb3dzIE5vdFN1cHBvcnRlZEV4Y2VwdGlvbiB7CiAgICAgICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIlRoaXMgbWV0aG9kIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgSkRCQyBjb25uZWN0b3IiKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBFbXB0eSBpbXBsZW1lbnRhdGlvbiBvZiBzdGFydCBtZXRob2QKICAgICAgKgotICAgICAqIEBwYXJhbQljdHgJPGNvZGU+Qm9vdHN0cmFwQ29udGV4dDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgY3R4ICAgIDxjb2RlPkJvb3RzdHJhcENvbnRleHQ8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc3RhcnQoQm9vdHN0cmFwQ29udGV4dCBjdHgpIHRocm93cyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzb3VyY2UgQWRhcHRlciBpcyBzdGFydGluZyB3aXRoIGNvbmZpZ3VyYXRpb24gOiIgKyByYVByb3ApOwogICAgICAgICBpZiAocmFQcm9wID09IG51bGwgfHwgIXJhUHJvcC5lcXVhbHMoIlZBTElEIikpIHsKLQkgICAgdGhyb3cgbmV3IFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uKCJSZXNvdXJjZSBhZGFwdGVyIGNhbm5vdCBzdGFydC4gSXQgaXMgY29uZmlndXJlZCBhcyA6ICIgKyByYVByb3ApOwotCX0gCisgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbigiUmVzb3VyY2UgYWRhcHRlciBjYW5ub3Qgc3RhcnQuIEl0IGlzIGNvbmZpZ3VyZWQgYXMgOiAiICsgcmFQcm9wKTsKICAgICB9Ci0gICAgCisgICAgfQorCiAgICAgLyoqCiAgICAgICogRW1wdHkgaW1wbGVtZW50YXRpb24gb2Ygc3RvcCBtZXRob2QKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzdG9wKCkgewotICAgIAorCiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0UkFQcm9wZXJ0eShTdHJpbmcgcykgewpAQCAtOTIsNSArOTIsNSBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0UkFQcm9wZXJ0eSgpIHsKICAgICAgICAgcmV0dXJuIHJhUHJvcDsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L2J1aWxkLnhtbAppbmRleCA1ZTE0ZDQ0Li5mZjBmMDJiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvYnVpbGQueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxwcm9qZWN0IG5hbWU9ImpkYmNfY29ubmVjdG9yIiBiYXNlZGlyPSIke2dqYy5ob21lfSIgZGVmYXVsdD0iYnVpbGQiPgogICA8cHJvcGVydHkgbmFtZT0icGtnLmRpciIgdmFsdWU9ImNvbS9zdW4vZ2pjL3NwaSIvPgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImNsZWFuIj4KICAgICA8YW50IGFudGZpbGU9ImJ1aWxkLnhtbCIgZGlyPSIke2dqYy5ob21lfS9iaW4iIHRhcmdldD0iY2xlYW4iLz4KICAgPC90YXJnZXQ+CkBAIC0yOSw1NSArMjksNTUgQEAKICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlMTQiPgotICAgIAkKLSAgICAJPG1rZGlyIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ii8+Ci0gICAgCQotCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L2pkYmMuamFyIiBiYXNlZGlyPSIke2NsYXNzLmRpcn0iCisKKyAgICAgICAgPG1rZGlyIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ii8+CisKKyAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9qZGJjLmphciIgYmFzZWRpcj0iJHtjbGFzcy5kaXJ9IgogICAgICAgICBpbmNsdWRlcz0iJHtwa2cuZGlyfS8qKi8qLCBjb20vc3VuL2dqYy91dGlsLyoqLyosIGNvbS9zdW4vZ2pjL2NvbW1vbi8qKi8qIiBleGNsdWRlcz0iY29tL3N1bi9namMvY2NpLyoqLyosY29tL3N1bi9namMvc3BpLzEuNC8qKi8qIi8+Ci0gICAgICAgIAorCiAgICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fY3AucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgotICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS1jcC54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgkKKyAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEtY3AueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4KICAgICAgICAgPC9jb3B5PgotICAgCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fY3AucmFyIiB1cGRhdGU9InllcyI+Ci0gICAJCTxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KLSAgIAkJCTxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgotICAgCQk8L21ldGFpbmY+Ci0gICAJPC9qYXI+Ci0gICAJCi0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX194YS5yYXIiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIgaW5jbHVkZXM9ImpkYmMuamFyIi8+Ci0gICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLXhhLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CQorICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fY3AucmFyIiB1cGRhdGU9InllcyI+CisgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KKyAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgorICAgICAgICAgICA8L21ldGFpbmY+CisgICAgICAgPC9qYXI+CisKKyAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX3hhLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KKyAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEteGEueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4KICAgICAgICAgPC9jb3B5PgotICAgCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19feGEucmFyIiB1cGRhdGU9InllcyI+Ci0gICAJCTxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KLSAgIAkJCTxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgotICAgCQk8L21ldGFpbmY+Ci0gICAJPC9qYXI+Ci0gICAJCi0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kbS5yYXIiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIgaW5jbHVkZXM9ImpkYmMuamFyIi8+Ci0gICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLWRtLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CQorICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19feGEucmFyIiB1cGRhdGU9InllcyI+CisgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KKyAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgorICAgICAgICAgICA8L21ldGFpbmY+CisgICAgICAgPC9qYXI+CisKKyAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RtLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KKyAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEtZG0ueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4KICAgICAgICAgPC9jb3B5PgotICAgCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZG0ucmFyIiB1cGRhdGU9InllcyI+Ci0gICAJCTxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KLSAgIAkJCTxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgotICAgCQk8L21ldGFpbmY+Ci0gICAJPC9qYXI+Ci0gICAJCi0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kcy5yYXIiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIgaW5jbHVkZXM9ImpkYmMuamFyIi8+Ci0gICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLWRzLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CQorICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZG0ucmFyIiB1cGRhdGU9InllcyI+CisgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KKyAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgorICAgICAgICAgICA8L21ldGFpbmY+CisgICAgICAgPC9qYXI+CisKKyAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RzLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KKyAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEtZHMueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4KICAgICAgICAgPC9jb3B5PgotICAgCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZHMucmFyIiB1cGRhdGU9InllcyI+Ci0gICAJCTxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KLSAgIAkJCTxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgotICAgCQk8L21ldGFpbmY+Ci0gICAJPC9qYXI+Ci0gICAJCi0gICAJPGRlbGV0ZSBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3QvY29tIi8+Ci0gICAJPGRlbGV0ZSBmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvamRiYy5qYXIiLz4KLSAgIAk8ZGVsZXRlIGZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiLz4KLSAgIAkKKyAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RzLnJhciIgdXBkYXRlPSJ5ZXMiPgorICAgICAgICAgICA8bWV0YWluZiBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSI+CisgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KKyAgICAgICAgICAgPC9tZXRhaW5mPgorICAgICAgIDwvamFyPgorCisgICAgICAgPGRlbGV0ZSBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3QvY29tIi8+CisgICAgICAgPGRlbGV0ZSBmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvamRiYy5qYXIiLz4KKyAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiLz4KKwogICA8L3RhcmdldD4KIAogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkMTQiIGRlcGVuZHM9ImNvbXBpbGUxNCwgcGFja2FnZTE0Ii8+CiAgICAgPHRhcmdldCBuYW1lPSJidWlsZDEzIi8+Ci0JPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iYnVpbGQxNCwgYnVpbGQxMyIvPgorICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImJ1aWxkMTQsIGJ1aWxkMTMiLz4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L3JhLWRzLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L3JhLWRzLnhtbAppbmRleCAyNzdlZmJhLi5mN2VhODJiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9yYS1kcy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvcmEtZHMueG1sCkBAIC0yMiw2OSArMjIsNjkgQEAKICAgICAgICAgICAgdmVyc2lvbj0iMS41Ij4KIAogICAgIDwhLS0gVGhlcmUgY2FuIGJlIGFueSBudW1iZXIgb2YgImRlc2NyaXB0aW9uIiBlbGVtZW50cyBpbmNsdWRpbmcgMCAtLT4KLSAgICA8IS0tIFRoaXMgZmllbGQgY2FuIGJlIG9wdGlvbmFsbHkgdXNlZCBieSB0aGUgZHJpdmVyIHZlbmRvciB0byBwcm92aWRlIGEgCisgICAgPCEtLSBUaGlzIGZpZWxkIGNhbiBiZSBvcHRpb25hbGx5IHVzZWQgYnkgdGhlIGRyaXZlciB2ZW5kb3IgdG8gcHJvdmlkZSBhCiAgICAgICAgICBkZXNjcmlwdGlvbiBmb3IgdGhlIHJlc291cmNlIGFkYXB0ZXIuCiAgICAgLS0+CiAgICAgPGRlc2NyaXB0aW9uPlJlc291cmNlIGFkYXB0ZXIgd3JhcHBpbmcgRGF0YXNvdXJjZSBpbXBsZW1lbnRhdGlvbiBvZiBkcml2ZXI8L2Rlc2NyaXB0aW9uPgotICAgIAorCiAgICAgPCEtLSBUaGVyZSBjYW4gYmUgYW55IG51bWJlciBvZiAiZGlzcGxheS1uYW1lIiBlbGVtZW50cyBpbmNsdWRpbmcgMCAtLT4KLSAgICA8IS0tIFRoZSBmaWVsZCBjYW4gYmUgb3B0aW9uYWxseSB1c2VkIGJ5IHRoZSBkcml2ZXIgdmVuZG9yIHRvIHByb3ZpZGUgYSBuYW1lIHRoYXQgCisgICAgPCEtLSBUaGUgZmllbGQgY2FuIGJlIG9wdGlvbmFsbHkgdXNlZCBieSB0aGUgZHJpdmVyIHZlbmRvciB0byBwcm92aWRlIGEgbmFtZSB0aGF0CiAgICAgICAgICBpcyBpbnRlbmRlZCB0byBiZSBkaXNwbGF5ZWQgYnkgdG9vbHMuCiAgICAgLS0+CiAgICAgPGRpc3BsYXktbmFtZT5EYXRhU291cmNlIFJlc291cmNlIEFkYXB0ZXI8L2Rpc3BsYXktbmFtZT4KLSAgICAKKwogICAgIDwhLS0gVGhlcmUgY2FuIGJlIGFueSBudW1iZXIgb2YgImljb24iIGVsZW1lbnRzIGluY2x1ZGluZyAwIC0tPgogICAgIDwhLS0gVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlLgogICAgICAgICA8aWNvbj4KLSAgICAgICAgICAgIFRoaXMgInNtYWxsLWljb24iIGVsZW1lbnQgY2FuIG9jY3VyIGF0bW9zdCBvbmNlLiBUaGlzIHNob3VsZCBzcGVjaWZ5IHRoZSAKLSAgICAgICAgICAgIGFic29sdXRlIG9yIHRoZSByZWxhdGl2ZSBwYXRoIG5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcgYSBzbWFsbCAoMTYgeCAxNikgCisgICAgICAgICAgICBUaGlzICJzbWFsbC1pY29uIiBlbGVtZW50IGNhbiBvY2N1ciBhdG1vc3Qgb25jZS4gVGhpcyBzaG91bGQgc3BlY2lmeSB0aGUKKyAgICAgICAgICAgIGFic29sdXRlIG9yIHRoZSByZWxhdGl2ZSBwYXRoIG5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcgYSBzbWFsbCAoMTYgeCAxNikKICAgICAgICAgICAgIGljb24gLSBKUEVHIG9yIEdJRiBpbWFnZS4gVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlLgogICAgICAgICAgICAgPHNtYWxsLWljb24+c21hbGxpY29uLmpwZzwvc21hbGwtaWNvbj4KLSAgICAgICAgCi0gICAgICAgICAgICBUaGlzICJsYXJnZS1pY29uIiBlbGVtZW50IGNhbiBvY2N1ciBhdG1vc3Qgb25jZS4gVGhpcyBzaG91bGQgc3BlY2lmeSB0aGUgCi0gICAgICAgICAgICBhYnNvbHV0ZSBvciB0aGUgcmVsYXRpdmUgcGF0aCBuYW1lIG9mIGEgZmlsZSBjb250YWluaW5nIGEgc21hbGwgKDMyIHggMzIpIAorCisgICAgICAgICAgICBUaGlzICJsYXJnZS1pY29uIiBlbGVtZW50IGNhbiBvY2N1ciBhdG1vc3Qgb25jZS4gVGhpcyBzaG91bGQgc3BlY2lmeSB0aGUKKyAgICAgICAgICAgIGFic29sdXRlIG9yIHRoZSByZWxhdGl2ZSBwYXRoIG5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcgYSBzbWFsbCAoMzIgeCAzMikKICAgICAgICAgICAgIGljb24gLSBKUEVHIG9yIEdJRiBpbWFnZS4gVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlLgotICAgICAgICAgICAgPGxhcmdlLWljb24+bGFyZ2VpY29uLmpwZzwvbGFyZ2UtaWNvbj4gICAKKyAgICAgICAgICAgIDxsYXJnZS1pY29uPmxhcmdlaWNvbi5qcGc8L2xhcmdlLWljb24+CiAgICAgICAgIDwvaWNvbj4KICAgICAtLT4KICAgICA8aWNvbj4KICAgICAgICAgPHNtYWxsLWljb24+PC9zbWFsbC1pY29uPgotICAgICAgICA8bGFyZ2UtaWNvbj48L2xhcmdlLWljb24+ICAgCisgICAgICAgIDxsYXJnZS1pY29uPjwvbGFyZ2UtaWNvbj4KICAgICA8L2ljb24+Ci0gICAgCisKICAgICA8IS0tIFRoZSAidmVuZG9yLW5hbWUiIGVsZW1lbnQgc2hvdWxkIG9jY3VyIGV4YWN0bHkgb25jZS4gLS0+CiAgICAgPCEtLSBUaGlzIHNob3VsZCBzcGVjaWZ5IHRoZSBuYW1lIG9mIHRoZSBkcml2ZXIgdmVuZG9yLiBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUuCiAgICAgICAgIDx2ZW5kb3ItbmFtZT5YWVogSU5DLjwvdmVuZG9yLW5hbWU+CiAgICAgLS0+CiAgICAgPHZlbmRvci1uYW1lPlN1biBNaWNyb3N5c3RlbXM8L3ZlbmRvci1uYW1lPgotICAgIAorCiAgICAgPCEtLSBUaGUgImVpcy10eXBlIiBlbGVtZW50IHNob3VsZCBvY2N1ciBleGFjdGx5IG9uY2UuIC0tPgotICAgIDwhLS0gVGhpcyBzaG91bGQgc3BlY2lmeSB0aGUgZGF0YWJhc2UsIGZvciBleGFtcGxlIHRoZSBwcm9kdWN0IG5hbWUgb2YgCisgICAgPCEtLSBUaGlzIHNob3VsZCBzcGVjaWZ5IHRoZSBkYXRhYmFzZSwgZm9yIGV4YW1wbGUgdGhlIHByb2R1Y3QgbmFtZSBvZgogICAgICAgICAgdGhlIGRhdGFiYXNlIGluZGVwZW5kZW50IG9mIGFueSB2ZXJzaW9uIGluZm9ybWF0aW9uLiBUaGUgZm9sbG93aW5nCiAgICAgICAgICBpcyBhbiBleGFtcGxlLgogICAgICAgICA8ZWlzLXR5cGU+WFlaPC9laXMtdHlwZT4KICAgICAtLT4KICAgICA8ZWlzLXR5cGU+RGF0YWJhc2U8L2Vpcy10eXBlPgotICAgIAorCiAgICAgPCEtLSBUaGUgInJlc291cmNlYWRhcHRlci12ZXJzaW9uIiBlbGVtZW50IHNob3VsZCBvY2N1ciBleGFjdGx5IG9uY2UuIC0tPgotICAgIDwhLS0gVGhpcyBzcGVjaWZpZXMgYSBzdHJpbmcgYmFzZWQgdmVyc2lvbiBvZiB0aGUgcmVzb3VyY2UgYWRhcHRlciBmcm9tIAorICAgIDwhLS0gVGhpcyBzcGVjaWZpZXMgYSBzdHJpbmcgYmFzZWQgdmVyc2lvbiBvZiB0aGUgcmVzb3VyY2UgYWRhcHRlciBmcm9tCiAgICAgICAgICB0aGUgZHJpdmVyIHZlbmRvci4gVGhlIGRlZmF1bHQgaXMgYmVpbmcgc2V0IGFzIDEuMC4gVGhlIGRyaXZlcgogICAgICAgICAgdmVuZG9yIGNhbiBjaGFuZ2UgaXQgYXMgcmVxdWlyZWQuCiAgICAgLS0+CiAgICAgPHJlc291cmNlYWRhcHRlci12ZXJzaW9uPjEuMDwvcmVzb3VyY2VhZGFwdGVyLXZlcnNpb24+Ci0gICAgCisKICAgICA8IS0tIFRoaXMgImxpY2Vuc2UiIGVsZW1lbnQgY2FuIG9jY3VyIGF0bW9zdCBvbmNlIC0tPgogICAgIDwhLS0gVGhpcyBzcGVjaWZpZXMgbGljZW5zaW5nIHJlcXVpcmVtZW50cyBmb3IgdGhlIHJlc291cmNlIGFkYXB0ZXIgbW9kdWxlLgogICAgICAgICAgVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlLgogICAgICAgICA8bGljZW5zZT4KICAgICAgICAgICAgIFRoZXJlIGNhbiBiZSBhbnkgbnVtYmVyIG9mICJkZXNjcmlwdGlvbiIgZWxlbWVudHMgaW5jbHVkaW5nIDAuCiAgICAgICAgICAgICA8ZGVzY3JpcHRpb24+Ci0gICAgICAgICAgICAgICAgVGhpcyBmaWVsZCBjYW4gYmUgb3B0aW9uYWxseSB1c2VkIGJ5IHRoZSBkcml2ZXIgdmVuZG9yIHRvIAotICAgICAgICAgICAgICAgIHByb3ZpZGUgYSBkZXNjcmlwdGlvbiBmb3IgdGhlIGxpY2Vuc2luZyByZXF1aXJlbWVudHMgb2YgdGhlIAotICAgICAgICAgICAgICAgIHJlc291cmNlIGFkYXB0ZXIgbGlrZSBkdXJhdGlvbiBvZiBsaWNlbnNlLCBudW1iZXJvZiBjb25uZWN0aW9uIAorICAgICAgICAgICAgICAgIFRoaXMgZmllbGQgY2FuIGJlIG9wdGlvbmFsbHkgdXNlZCBieSB0aGUgZHJpdmVyIHZlbmRvciB0bworICAgICAgICAgICAgICAgIHByb3ZpZGUgYSBkZXNjcmlwdGlvbiBmb3IgdGhlIGxpY2Vuc2luZyByZXF1aXJlbWVudHMgb2YgdGhlCisgICAgICAgICAgICAgICAgcmVzb3VyY2UgYWRhcHRlciBsaWtlIGR1cmF0aW9uIG9mIGxpY2Vuc2UsIG51bWJlcm9mIGNvbm5lY3Rpb24KICAgICAgICAgICAgICAgICByZXN0cmljdGlvbnMuCiAgICAgICAgICAgICA8L2Rlc2NyaXB0aW9uPgotICAgICAgICAKKwogICAgICAgICAgICAgVGhpcyBzcGVjaWZpZXMgd2hldGhlciBhIGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gZGVwbG95IGFuZCB1c2UgdGhlIHJlc291cmNlIGFkYXB0ZXIuCiAgICAgICAgICAgICBEZWZhdWx0IGlzIGZhbHNlLgogICAgICAgICAgICAgPGxpY2Vuc2UtcmVxdWlyZWQ+ZmFsc2U8L2xpY2Vuc2UtcmVxdWlyZWQ+CkBAIC05MywyNCArOTMsMjQgQEAKICAgICA8bGljZW5zZT4KICAgICAgICAgPGxpY2Vuc2UtcmVxdWlyZWQ+ZmFsc2U8L2xpY2Vuc2UtcmVxdWlyZWQ+CiAgICAgPC9saWNlbnNlPgotICAgIAorCiAgICAgPHJlc291cmNlYWRhcHRlcj4KLSAgICAgICAgCi0gICAgICAgIDwhLS0gCi0gICAgICAgICAgICBUaGUgImNvbmZpZy1wcm9wZXJ0eSIgZWxlbWVudHMgY2FuIGhhdmUgemVybyBvciBtb3JlICJkZXNjcmlwdGlvbiIgCisKKyAgICAgICAgPCEtLQorICAgICAgICAgICAgVGhlICJjb25maWctcHJvcGVydHkiIGVsZW1lbnRzIGNhbiBoYXZlIHplcm8gb3IgbW9yZSAiZGVzY3JpcHRpb24iCiAgICAgICAgICAgICBlbGVtZW50cy4gVGhlICJkZXNjcmlwdGlvbiIgZWxlbWVudHMgYXJlIG5vdCBiZWluZyBpbmNsdWRlZAogICAgICAgICAgICAgaW4gdGhlICJjb25maWctcHJvcGVydHkiIGVsZW1lbnRzIGJlbG93LiBUaGUgZHJpdmVyIHZlbmRvciBjYW4KICAgICAgICAgICAgIGFkZCB0aGVtIGFzIHJlcXVpcmVkLgogICAgICAgICAtLT4KLSAgICAgICAgCisKICAgICAgICAgPHJlc291cmNlYWRhcHRlci1jbGFzcz5jb20uc3VuLmpkYmNyYS5zcGkuUmVzb3VyY2VBZGFwdGVyPC9yZXNvdXJjZWFkYXB0ZXItY2xhc3M+Ci0gICAgICAgIAorCiAgICAgICAgIDxvdXRib3VuZC1yZXNvdXJjZWFkYXB0ZXI+Ci0gICAgICAgIAorCiAgICAgICAgICAgICA8Y29ubmVjdGlvbi1kZWZpbml0aW9uPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPG1hbmFnZWRjb25uZWN0aW9uZmFjdG9yeS1jbGFzcz5jb20uc3VuLmpkYmNyYS5zcGkuRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L21hbmFnZWRjb25uZWN0aW9uZmFjdG9yeS1jbGFzcz4KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIDwhLS0gVGhlcmUgY2FuIGJlIGFueSBudW1iZXIgb2YgdGhlc2UgZWxlbWVudHMgaW5jbHVkaW5nIDAgLS0+CiAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlNlcnZlck5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgpAQCAtMTI4LDcgKzEyOCw3IEBACiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+dGVzdGRiPC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CiAKLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VXNlcjwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT5kYnVzZXI8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KQEAgLTEzOSwxMiArMTM5LDEyIEBACiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+ZGJ1c2VyPC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CiAKLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+UGFzc3dvcmQ8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+ZGJwYXNzd29yZDwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5VUkw8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+amRiYzpkZXJieTovL2xvY2FsaG9zdDoxNTI3L3Rlc3RkYjtjcmVhdGU9dHJ1ZTwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgpAQCAtMTU0LDcgKzE1NCw3IEBACiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4tLT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+RGVzY3JpcHRpb248L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+T3JhY2xlIHRoaW4gZHJpdmVyIERhdGFzb3VyY2U8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KQEAgLTE2NSwxNyArMTY1LDE3IEBACiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+Um9sZU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4gICAgCisgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkxvZ2luVGltZU91dDwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT4wPC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4gICAgCisgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkRyaXZlclByb3BlcnRpZXM8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CkBAIC0xODYsNyArMTg2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPiM8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+Q2xhc3NOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPm9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnREYXRhU291cmNlNDA8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KQEAgLTE5OCw4MiArMTk4LDgyIEBACiAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgogCiA8IS0tCi0gICAgICAJCTxjb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktbmFtZT5Db25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkPC9jb25maWctcHJvcGVydHktbmFtZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPmZhbHNlPC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0gICAgICAgIAk8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgCTxjb25maWctcHJvcGVydHk+ICAgIAotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VmFsaWRhdGlvbk1ldGhvZDwvY29uZmlnLXByb3BlcnR5LW5hbWU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLSAgICAgICAgCTwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAJPGNvbmZpZy1wcm9wZXJ0eT4gICAgCi0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktbmFtZT5WYWxpZGF0aW9uVGFibGVOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotICAgICAgICAJPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgIAk8Y29uZmlnLXByb3BlcnR5PiAgICAKLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlRyYW5zYWN0aW9uSXNvbGF0aW9uPC9jb25maWctcHJvcGVydHktbmFtZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotICAgICAgICAJPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgIAk8Y29uZmlnLXByb3BlcnR5PiAgICAKLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkd1YXJhbnRlZUlzb2xhdGlvbkxldmVsPC9jb25maWctcHJvcGVydHktbmFtZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotICAgICAgICAJPC9jb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5Db25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPmZhbHNlPC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5WYWxpZGF0aW9uTWV0aG9kPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VmFsaWRhdGlvblRhYmxlTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlRyYW5zYWN0aW9uSXNvbGF0aW9uPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+R3VhcmFudGVlSXNvbGF0aW9uTGV2ZWw8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KIC0tPgogCiAgICAgICAgICAgICAgICAgPGNvbm5lY3Rpb25mYWN0b3J5LWludGVyZmFjZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29ubmVjdGlvbmZhY3RvcnktaW50ZXJmYWNlPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPGNvbm5lY3Rpb25mYWN0b3J5LWltcGwtY2xhc3M+Y29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2U8L2Nvbm5lY3Rpb25mYWN0b3J5LWltcGwtY2xhc3M+Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICA8Y29ubmVjdGlvbi1pbnRlcmZhY2U+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29ubmVjdGlvbi1pbnRlcmZhY2U+Ci0gICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPGNvbm5lY3Rpb24taW1wbC1jbGFzcz5jb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbkhvbGRlcjwvY29ubmVjdGlvbi1pbXBsLWNsYXNzPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICA8L2Nvbm5lY3Rpb24tZGVmaW5pdGlvbj4KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICA8dHJhbnNhY3Rpb24tc3VwcG9ydD5Mb2NhbFRyYW5zYWN0aW9uPC90cmFuc2FjdGlvbi1zdXBwb3J0PgotICAgICAgICAgICAgCisKICAgICAgICAgICAgIDxhdXRoZW50aWNhdGlvbi1tZWNoYW5pc20+CiAgICAgICAgICAgICAgICAgPCEtLSBUaGVyZSBjYW4gYmUgYW55IG51bWJlciBvZiAiZGVzY3JpcHRpb24iIGVsZW1lbnRzIGluY2x1ZGluZyAwIC0tPgogICAgICAgICAgICAgICAgIDwhLS0gTm90IGluY2x1ZGluZyB0aGUgImRlc2NyaXB0aW9uIiBlbGVtZW50IC0tPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPGF1dGhlbnRpY2F0aW9uLW1lY2hhbmlzbS10eXBlPkJhc2ljUGFzc3dvcmQ8L2F1dGhlbnRpY2F0aW9uLW1lY2hhbmlzbS10eXBlPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPGNyZWRlbnRpYWwtaW50ZXJmYWNlPmphdmF4LnJlc291cmNlLnNwaS5zZWN1cml0eS5QYXNzd29yZENyZWRlbnRpYWw8L2NyZWRlbnRpYWwtaW50ZXJmYWNlPgogICAgICAgICAgICAgPC9hdXRoZW50aWNhdGlvbi1tZWNoYW5pc20+Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgPHJlYXV0aGVudGljYXRpb24tc3VwcG9ydD5mYWxzZTwvcmVhdXRoZW50aWNhdGlvbi1zdXBwb3J0PgotICAgICAgICAgICAgCisKICAgICAgICAgPC9vdXRib3VuZC1yZXNvdXJjZWFkYXB0ZXI+Ci0JPGFkbWlub2JqZWN0PgotCSAgICAgICA8YWRtaW5vYmplY3QtaW50ZXJmYWNlPmNvbS5zdW4uamRiY3JhLnNwaS5KZGJjU2V0dXBBZG1pbjwvYWRtaW5vYmplY3QtaW50ZXJmYWNlPgotCSAgICAgICA8YWRtaW5vYmplY3QtY2xhc3M+Y29tLnN1bi5qZGJjcmEuc3BpLkpkYmNTZXR1cEFkbWluSW1wbDwvYWRtaW5vYmplY3QtY2xhc3M+Ci0JICAgICAgIDxjb25maWctcHJvcGVydHk+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VGFibGVOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0JICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotCSAgICAgICA8Y29uZmlnLXByb3BlcnR5PgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlNjaGVtYU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLQkgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0JICAgICAgIDxjb25maWctcHJvcGVydHk+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+Sm5kaU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLQkgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0JICAgICAgIDxjb25maWctcHJvcGVydHk+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+Tm9PZlJvd3M8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5JbnRlZ2VyPC9jb25maWctcHJvcGVydHktdHlwZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+MDwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotCSAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICA8YWRtaW5vYmplY3Q+CisgICAgICAgICAgIDxhZG1pbm9iamVjdC1pbnRlcmZhY2U+Y29tLnN1bi5qZGJjcmEuc3BpLkpkYmNTZXR1cEFkbWluPC9hZG1pbm9iamVjdC1pbnRlcmZhY2U+CisgICAgICAgICAgIDxhZG1pbm9iamVjdC1jbGFzcz5jb20uc3VuLmpkYmNyYS5zcGkuSmRiY1NldHVwQWRtaW5JbXBsPC9hZG1pbm9iamVjdC1jbGFzcz4KKyAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5UYWJsZU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+U2NoZW1hTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5KbmRpTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5Ob09mUm93czwvY29uZmlnLXByb3BlcnR5LW5hbWU+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLkludGVnZXI8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT4wPC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgogICAgICAgICA8L2FkbWlub2JqZWN0PgotICAgICAgICAKKwogICAgIDwvcmVzb3VyY2VhZGFwdGVyPgotICAgIAorCiA8L2Nvbm5lY3Rvcj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvbk1hbmFnZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvbk1hbmFnZXIuamF2YQppbmRleCBiMjE5Y2QyLi4xMjQ4MDljIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25NYW5hZ2VyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uTWFuYWdlci5qYXZhCkBAIC0yNCwyNiArMjQsMjYgQEAKIC8qKgogICogQ29ubmVjdGlvbk1hbmFnZXIgaW1wbGVtZW50YXRpb24gZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8zMQotICogQGF1dGhvcglCaW5vZCBQLkcKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMzEKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCiAgKi8KLXB1YmxpYyBjbGFzcyBDb25uZWN0aW9uTWFuYWdlciBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25NYW5hZ2VyeyAKK3B1YmxpYyBjbGFzcyBDb25uZWN0aW9uTWFuYWdlciBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25NYW5hZ2VyewogCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBhIDxjb2RlPkNvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QgdG8gdGhlIDxjb2RlPkNvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPgogICAgICAqCi0gICAgICogQHBhcmFtCW1jZgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAcGFyYW0JaW5mbwk8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAcmV0dXJuCUEgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gT2JqZWN0LgotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24gSW4gY2FzZSBvZiBhbiBlcnJvciBpbiBnZXR0aW5nIHRoZSA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPi4KKyAgICAgKiBAcGFyYW0gICAgbWNmICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBpbmZvICAgIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gb2JqZWN0LgorICAgICAqIEByZXR1cm4gICAgQSA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBPYmplY3QuCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiBJbiBjYXNlIG9mIGFuIGVycm9yIGluIGdldHRpbmcgdGhlIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+LgogICAgICAqLwogICAgIHB1YmxpYyBPYmplY3QgYWxsb2NhdGVDb25uZWN0aW9uKE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2YsCi0gICAgCQkJCSAgICAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGluZm8pIAotICAgIAkJCQkgICAgIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7Ci0JTWFuYWdlZENvbm5lY3Rpb24gbWMgPSBtY2YuY3JlYXRlTWFuYWdlZENvbm5lY3Rpb24obnVsbCwgaW5mbyk7Ci0JcmV0dXJuIG1jLmdldENvbm5lY3Rpb24obnVsbCwgaW5mbyk7ICAgIAkJCQkgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbmZvKQorICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CisgICAgTWFuYWdlZENvbm5lY3Rpb24gbWMgPSBtY2YuY3JlYXRlTWFuYWdlZENvbm5lY3Rpb24obnVsbCwgaW5mbyk7CisgICAgcmV0dXJuIG1jLmdldENvbm5lY3Rpb24obnVsbCwgaW5mbyk7CiAgICAgfQotICAgIAorCiAgICAgLyoKICAgICAgKiBUaGlzIGNsYXNzIGNvdWxkIGVmZmVjdGl2ZWx5IGltcGxlbWVudCBDb25uZWN0aW9uIHBvb2xpbmcgYWxzby4KICAgICAgKiBDb3VsZCBiZSBkb25lIGZvciBGQ1MuCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25SZXF1ZXN0SW5mby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uUmVxdWVzdEluZm8uamF2YQppbmRleCAzOWM3ODc2Li5jNDc3ZmMyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25SZXF1ZXN0SW5mby5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvblJlcXVlc3RJbmZvLmphdmEKQEAgLTE5LDEwICsxOSwxMCBAQAogLyoqCiAgKiBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW1wbGVtZW50YXRpb24gZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8zMQotICogQGF1dGhvcglCaW5vZCBQLkcKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMzEKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCiAgKi8KLXB1YmxpYyBjbGFzcyBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm97IAorcHVibGljIGNsYXNzIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mb3sKIAogICAgIHByaXZhdGUgU3RyaW5nIHVzZXI7CiAgICAgcHJpdmF0ZSBTdHJpbmcgcGFzc3dvcmQ7CkBAIC0zMCw4ICszMCw4IEBACiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0cyBhIG5ldyA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IG9iamVjdAogICAgICAqCi0gICAgICogQHBhcmFtCXVzZXIJVXNlciBOYW1lLgotICAgICAqIEBwYXJhbQlwYXNzd29yZAlQYXNzd29yZAorICAgICAqIEBwYXJhbSAgICB1c2VyICAgIFVzZXIgTmFtZS4KKyAgICAgKiBAcGFyYW0gICAgcGFzc3dvcmQgICAgUGFzc3dvcmQKICAgICAgKi8KICAgICBwdWJsaWMgQ29ubmVjdGlvblJlcXVlc3RJbmZvKFN0cmluZyB1c2VyLCBTdHJpbmcgcGFzc3dvcmQpIHsKICAgICAgICAgdGhpcy51c2VyID0gdXNlcjsKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXIgbmFtZSBvZiB0aGUgQ29ubmVjdGlvblJlcXVlc3RJbmZvLgogICAgICAqCi0gICAgICogQHJldHVybglVc2VyIG5hbWUgb2YgQ29ubmVjdGlvblJlcXVlc3RJbmZvLgorICAgICAqIEByZXR1cm4gICAgVXNlciBuYW1lIG9mIENvbm5lY3Rpb25SZXF1ZXN0SW5mby4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFVzZXIoKSB7CiAgICAgICAgIHJldHVybiB1c2VyOwpAQCAtNTAsNyArNTAsNyBAQAogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgcGFzc3dvcmQgb2YgdGhlIENvbm5lY3Rpb25SZXF1ZXN0SW5mby4KICAgICAgKgotICAgICAqIEByZXR1cm4JUGFzc3dvcmQgb2YgQ29ubmVjdGlvblJlcXVlc3RJbmZvLgorICAgICAqIEByZXR1cm4gICAgUGFzc3dvcmQgb2YgQ29ubmVjdGlvblJlcXVlc3RJbmZvLgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0UGFzc3dvcmQoKSB7CiAgICAgICAgIHJldHVybiBwYXNzd29yZDsKQEAgLTU5LDcgKzU5LDcgQEAKICAgICAvKioKICAgICAgKiBWZXJpZnkgd2hldGhlciB0d28gQ29ubmVjdGlvblJlcXVlc3RJbmZvcyBhcmUgZXF1YWwuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVRydWUsIGlmIHRoZXkgYXJlIGVxdWFsIGFuZCBmYWxzZSBvdGhlcndpc2UuCisgICAgICogQHJldHVybiAgICBUcnVlLCBpZiB0aGV5IGFyZSBlcXVhbCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb2JqKSB7CiAgICAgICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwpAQCAtNzUsMTggKzc1LDE4IEBACiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBoYXNoY29kZSBvZiB0aGUgb2JqZWN0LgogICAgICAqCi0gICAgICogQHJldHVybgloYXNoQ29kZS4KKyAgICAgKiBAcmV0dXJuICAgIGhhc2hDb2RlLgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7CiAgICAgICAgIFN0cmluZyByZXN1bHQgPSAiIiArIHVzZXIgKyBwYXNzd29yZDsKICAgICAgICAgcmV0dXJuIHJlc3VsdC5oYXNoQ29kZSgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbXBhcmVzIHR3byBvYmplY3RzLgogICAgICAqCi0gICAgICogQHBhcmFtCW8xCUZpcnN0IG9iamVjdC4KLSAgICAgKiBAcGFyYW0JbzIJU2Vjb25kIG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgbzEgICAgRmlyc3Qgb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBvMiAgICBTZWNvbmQgb2JqZWN0LgogICAgICAqLwogICAgIHByaXZhdGUgYm9vbGVhbiBpc0VxdWFsKE9iamVjdCBvMSwgT2JqZWN0IG8yKSB7CiAgICAgICAgIGlmIChvMSA9PSBudWxsKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKaW5kZXggYTlmYTVmMS4uYjFmYzBlNSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQpAQCAtMzEsMzYgKzMxLDM2IEBACiAvKioKICAqIERhdGEgU291cmNlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW1wbGVtZW50YXRpb24gZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8zMAotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMzAKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIAogcHVibGljIGNsYXNzIERTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IGV4dGVuZHMgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IHsKLSAgIAorCiAgICAgcHJpdmF0ZSB0cmFuc2llbnQgamF2YXguc3FsLkRhdGFTb3VyY2UgZGF0YVNvdXJjZU9iajsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIExvZ2dlciBfbG9nZ2VyOwogICAgIHN0YXRpYyB7CiAgICAgICAgIF9sb2dnZXIgPSBMb2dnZXIuZ2V0QW5vbnltb3VzTG9nZ2VyKCk7CiAgICAgfQogICAgIHByaXZhdGUgYm9vbGVhbiBkZWJ1ZyA9IGZhbHNlOwotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIG5ldyBwaHlzaWNhbCBjb25uZWN0aW9uIHRvIHRoZSB1bmRlcmx5aW5nIEVJUyByZXNvdXJjZQogICAgICAqIG1hbmFnZXIuCi0gICAgICogCi0gICAgICogQHBhcmFtCXN1YmplY3QJPGNvZGU+U3ViamVjdDwvY29kZT4gaW5zdGFuY2UgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKiBAcGFyYW0JY3hSZXF1ZXN0SW5mbwk8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHdoaWNoIG1heSBiZSBjcmVhdGVkCi0gICAgICogICAgICAgCSAgICAgICAgICAgICAJYXMgYSByZXN1bHQgb2YgdGhlIGludm9jYXRpb24gPGNvZGU+Z2V0Q29ubmVjdGlvbih1c2VyLCBwYXNzd29yZCk8L2NvZGU+Ci0gICAgICogICAgICAgCSAgICAgICAgICAgICAJb24gdGhlIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdAotICAgICAqIEByZXR1cm4JPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBjcmVhdGVkCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBpbnN0YW50aWF0aW5nIHRoZQotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0IHVzZWQgZm9yIHRoZQotICAgICAqICAgICAgIAkJCQljcmVhdGlvbiBvZiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdAotICAgICAqIEB0aHJvd3MJU2VjdXJpdHlFeGNlcHRpb24JaWYgdGhlcmUgaW5vIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0Ci0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAlzYXRpc2Z5aW5nIHRoaXMgcmVxdWVzdCAKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZSAKLSAgICAgKgkJCQkJCXBoeXNpY2FsIGNvbm5lY3Rpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzdWJqZWN0ICAgIDxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogQHBhcmFtICAgIGN4UmVxdWVzdEluZm8gICAgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiB3aGljaCBtYXkgYmUgY3JlYXRlZAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIGEgcmVzdWx0IG9mIHRoZSBpbnZvY2F0aW9uIDxjb2RlPmdldENvbm5lY3Rpb24odXNlciwgcGFzc3dvcmQpPC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIHRoZSA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QgY3JlYXRlZAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gaW5zdGFudGlhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdCB1c2VkIGZvciB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRpb24gb2YgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QKKyAgICAgKiBAdGhyb3dzICAgIFNlY3VyaXR5RXhjZXB0aW9uICAgIGlmIHRoZXJlIGlubyA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F0aXNmeWluZyB0aGlzIHJlcXVlc3QKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgcGh5c2ljYWwgY29ubmVjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBjcmVhdGVNYW5hZ2VkQ29ubmVjdGlvbihqYXZheC5zZWN1cml0eS5hdXRoLlN1YmplY3Qgc3ViamVjdCwKICAgICAgICAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxdWVzdEluZm8pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CkBAIC02OCw3ICs2OCw3IEBACiAgICAgICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGNyZWF0ZU1hbmFnZWRDb25uZWN0aW9uIik7CiAgICAgICAgIH0KICAgICAgICAgUGFzc3dvcmRDcmVkZW50aWFsIHBjID0gU2VjdXJpdHlVdGlscy5nZXRQYXNzd29yZENyZWRlbnRpYWwodGhpcywgc3ViamVjdCwgY3hSZXF1ZXN0SW5mbyk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKGRhdGFTb3VyY2VPYmogPT0gbnVsbCkgewogICAgICAgICAgICAgaWYoZHNPYmpCdWlsZGVyID09IG51bGwpIHsKICAgICAgICAgICAgICAgICBkc09iakJ1aWxkZXIgPSBuZXcgRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIoc3BlYyk7CkBAIC03OCwzNiArNzgsMzYgQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZU9iaiA9IChqYXZheC5zcWwuRGF0YVNvdXJjZSkgZHNPYmpCdWlsZGVyLmNvbnN0cnVjdERhdGFTb3VyY2VPYmplY3QoKTsKICAgICAgICAgICAgIH0gY2F0Y2goQ2xhc3NDYXN0RXhjZXB0aW9uIGNjZSkgewotCSAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfY2NlIiwgY2NlKTsKKyAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2NjZSIsIGNjZSk7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGpha2FydGEucmVzb3VyY2UuUmVzb3VyY2VFeGNlcHRpb24oY2NlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBkc0Nvbm4gPSBudWxsOwotICAgICAgICAKKwogICAgICAgICB0cnkgewotCSAgICAvKiBGb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIHVzZXIvcGFzc3dkIG9mIHRoZSBjb25uZWN0aW9uIHBvb2wgaXMKLQkgICAgICogZXF1YWwgdG8gdGhlIFBhc3N3b3JkQ3JlZGVudGlhbCBmb3IgdGhlIGNvbm5lY3Rpb24gcmVxdWVzdAotCSAgICAgKiBnZXQgYSBjb25uZWN0aW9uIGZyb20gdGhpcyBwb29sIGRpcmVjdGx5LgotCSAgICAgKiBmb3IgYWxsIG90aGVyIGNvbmRpdGlvbnMgZ28gY3JlYXRlIGEgbmV3IGNvbm5lY3Rpb24KLQkgICAgICovCi0JICAgIGlmICggaXNFcXVhbCggcGMsIGdldFVzZXIoKSwgZ2V0UGFzc3dvcmQoKSApICkgewotCSAgICAgICAgZHNDb25uID0gZGF0YVNvdXJjZU9iai5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIH0gZWxzZSB7Ci0JICAgICAgICBkc0Nvbm4gPSBkYXRhU291cmNlT2JqLmdldENvbm5lY3Rpb24ocGMuZ2V0VXNlck5hbWUoKSwgCi0JCSAgICBuZXcgU3RyaW5nKHBjLmdldFBhc3N3b3JkKCkpKTsKLQkgICAgfQorICAgICAgICAvKiBGb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIHVzZXIvcGFzc3dkIG9mIHRoZSBjb25uZWN0aW9uIHBvb2wgaXMKKyAgICAgICAgICogZXF1YWwgdG8gdGhlIFBhc3N3b3JkQ3JlZGVudGlhbCBmb3IgdGhlIGNvbm5lY3Rpb24gcmVxdWVzdAorICAgICAgICAgKiBnZXQgYSBjb25uZWN0aW9uIGZyb20gdGhpcyBwb29sIGRpcmVjdGx5LgorICAgICAgICAgKiBmb3IgYWxsIG90aGVyIGNvbmRpdGlvbnMgZ28gY3JlYXRlIGEgbmV3IGNvbm5lY3Rpb24KKyAgICAgICAgICovCisgICAgICAgIGlmICggaXNFcXVhbCggcGMsIGdldFVzZXIoKSwgZ2V0UGFzc3dvcmQoKSApICkgeworICAgICAgICAgICAgZHNDb25uID0gZGF0YVNvdXJjZU9iai5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkc0Nvbm4gPSBkYXRhU291cmNlT2JqLmdldENvbm5lY3Rpb24ocGMuZ2V0VXNlck5hbWUoKSwKKyAgICAgICAgICAgIG5ldyBTdHJpbmcocGMuZ2V0UGFzc3dvcmQoKSkpOworICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKICAgICAgICAgICAgIHNxbGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLmV4Y19jcmVhdGVfY29ubiIsIHNxbGUpOwotICAgICAgICAgICAgdGhyb3cgbmV3IGpha2FydGEucmVzb3VyY2Uuc3BpLlJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gY291bGQgbm90IGJlIGFsbG9jYXRlZDogIiArIAorICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5leGNfY3JlYXRlX2Nvbm4iLCBzcWxlKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBqYWthcnRhLnJlc291cmNlLnNwaS5SZXNvdXJjZUFsbG9jYXRpb25FeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGNvdWxkIG5vdCBiZSBhbGxvY2F0ZWQ6ICIgKwogICAgICAgICAgICAgICAgIHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSl7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlYzLVRFU1QgOiB1bmFibGUgdG8gZ2V0IGNvbm5lY3Rpb24iKTsKLSAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7ICAgCisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVjMtVEVTVCA6IGdvdCBjb25uZWN0aW9uIik7Ci0gICAgICAgIAorCiAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYyA9IG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24obnVsbCwgZHNDb25uLCBwYywgdGhpcyk7CiAgICAgICAgIC8vR0pDSU5UCiAvKgpAQCAtMTE3LDE1ICsxMTcsMTUgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJWMy1URVNUIDogcmV0dXJuaW5nIGNvbm5lY3Rpb24iKTsKICAgICAgICAgcmV0dXJuIG1jOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIENoZWNrIGlmIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpcyBlcXVhbCB0byAKKyAgICAgKiBDaGVjayBpZiB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaXMgZXF1YWwgdG8KICAgICAgKiBhbm90aGVyIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4uCi0gICAgICogCi0gICAgICogQHBhcmFtCW90aGVyCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0IGZvciBjaGVja2luZyBlcXVhbGl0eSB3aXRoCi0gICAgICogQHJldHVybgl0cnVlCWlmIHRoZSBwcm9wZXJ0eSBzZXRzIG9mIGJvdGggdGhlIAotICAgICAqCQkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3RzIGFyZSB0aGUgc2FtZQotICAgICAqCQlmYWxzZQlvdGhlcndpc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBvdGhlciAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdCBmb3IgY2hlY2tpbmcgZXF1YWxpdHkgd2l0aAorICAgICAqIEByZXR1cm4gICAgdHJ1ZSAgICBpZiB0aGUgcHJvcGVydHkgc2V0cyBvZiBib3RoIHRoZQorICAgICAqICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3RzIGFyZSB0aGUgc2FtZQorICAgICAqICAgICAgICBmYWxzZSAgICBvdGhlcndpc2UKICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG90aGVyKSB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC0xMzYsNDA5ICsxMzYsNDA5IEBACiAgICAgICAgICAqIGlmIGFuZCBvbmx5IGlmIHRoZWlyIHByb3BlcnRpZXMgYXJlIHRoZSBzYW1lLgogICAgICAgICAgKi8KICAgICAgICAgaWYob3RoZXIgaW5zdGFuY2VvZiBjb20uc3VuLmpkYmNyYS5zcGkuRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkpIHsKLSAgICAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBvdGhlck1DRiA9IAorICAgICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLkRTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG90aGVyTUNGID0KICAgICAgICAgICAgICAgICAoY29tLnN1bi5qZGJjcmEuc3BpLkRTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KSBvdGhlcjsKICAgICAgICAgICAgIHJldHVybiB0aGlzLnNwZWMuZXF1YWxzKG90aGVyTUNGLnNwZWMpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBzZXJ2ZXIgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlzZXJ2ZXJOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldFNlcnZlck5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHNlcnZlck5hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0U2VydmVyTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRzZXJ2ZXJOYW1lKFN0cmluZyBzZXJ2ZXJOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlNFUlZFUk5BTUUsIHNlcnZlck5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHNlcnZlciBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglzZXJ2ZXJOYW1lCi0gICAgICogQHNlZQk8Y29kZT5zZXRTZXJ2ZXJOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgc2VydmVyTmFtZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0U2VydmVyTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHNlcnZlck5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5TRVJWRVJOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBzZXJ2ZXIgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlzZXJ2ZXJOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldFNlcnZlck5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHNlcnZlck5hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0U2VydmVyTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJOYW1lKFN0cmluZyBzZXJ2ZXJOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlNFUlZFUk5BTUUsIHNlcnZlck5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHNlcnZlciBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglzZXJ2ZXJOYW1lCi0gICAgICogQHNlZQk8Y29kZT5zZXRTZXJ2ZXJOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgc2VydmVyTmFtZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0U2VydmVyTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFNlcnZlck5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5TRVJWRVJOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBwb3J0IG51bWJlci4KICAgICAgKgotICAgICAqIEBwYXJhbQlwb3J0TnVtYmVyCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldFBvcnROdW1iZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHBvcnROdW1iZXIgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0UG9ydE51bWJlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRwb3J0TnVtYmVyKFN0cmluZyBwb3J0TnVtYmVyKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIsIHBvcnROdW1iZXIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHBvcnQgbnVtYmVyLgogICAgICAqCi0gICAgICogQHJldHVybglwb3J0TnVtYmVyCi0gICAgICogQHNlZQk8Y29kZT5zZXRQb3J0TnVtYmVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgcG9ydE51bWJlcgorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0UG9ydE51bWJlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHBvcnROdW1iZXIoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QT1JUTlVNQkVSKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBwb3J0IG51bWJlci4KICAgICAgKgotICAgICAqIEBwYXJhbQlwb3J0TnVtYmVyCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldFBvcnROdW1iZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHBvcnROdW1iZXIgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0UG9ydE51bWJlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRQb3J0TnVtYmVyKFN0cmluZyBwb3J0TnVtYmVyKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIsIHBvcnROdW1iZXIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHBvcnQgbnVtYmVyLgogICAgICAqCi0gICAgICogQHJldHVybglwb3J0TnVtYmVyCi0gICAgICogQHNlZQk8Y29kZT5zZXRQb3J0TnVtYmVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgcG9ydE51bWJlcgorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0UG9ydE51bWJlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFBvcnROdW1iZXIoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QT1JUTlVNQkVSKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkYXRhYmFzZSBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCWRhdGFiYXNlTmFtZQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREYXRhYmFzZU5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRhdGFiYXNlTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREYXRhYmFzZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0ZGF0YWJhc2VOYW1lKFN0cmluZyBkYXRhYmFzZU5hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQUJBU0VOQU1FLCBkYXRhYmFzZU5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRhdGFiYXNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRhdGFiYXNlTmFtZQotICAgICAqIEBzZWUJPGNvZGU+c2V0RGF0YWJhc2VOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZGF0YWJhc2VOYW1lCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREYXRhYmFzZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRkYXRhYmFzZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBQkFTRU5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRhdGFiYXNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZGF0YWJhc2VOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERhdGFiYXNlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGF0YWJhc2VOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERhdGFiYXNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXREYXRhYmFzZU5hbWUoU3RyaW5nIGRhdGFiYXNlTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBQkFTRU5BTUUsIGRhdGFiYXNlTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGF0YWJhc2UgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGF0YWJhc2VOYW1lCi0gICAgICogQHNlZQk8Y29kZT5zZXREYXRhYmFzZU5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkYXRhYmFzZU5hbWUKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERhdGFiYXNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldERhdGFiYXNlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFCQVNFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGF0YSBzb3VyY2UgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlkc24gPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRzbiA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREYXRhU291cmNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRkYXRhU291cmNlTmFtZShTdHJpbmcgZHNuKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FLCBkc24pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRhdGEgc291cmNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRzbgotICAgICAqIEBzZWUJPGNvZGU+c2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkc24KKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERhdGFTb3VyY2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0ZGF0YVNvdXJjZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBU09VUkNFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGF0YSBzb3VyY2UgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlkc24gPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRzbiA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREYXRhU291cmNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXREYXRhU291cmNlTmFtZShTdHJpbmcgZHNuKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FLCBkc24pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRhdGEgc291cmNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRzbgotICAgICAqIEBzZWUJPGNvZGU+c2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkc24KKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERhdGFTb3VyY2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGF0YVNvdXJjZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBU09VUkNFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGVzY3JpcHRpb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZGVzYwk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREZXNjcmlwdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGVzYyAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREZXNjcmlwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRkZXNjcmlwdGlvbihTdHJpbmcgZGVzYykgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ERVNDUklQVElPTiwgZGVzYyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGVzY3JpcHRpb24uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRlc2MKLSAgICAgKiBAc2VlCTxjb2RlPnNldERlc2NyaXB0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZGVzYworICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGVzY3JpcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRkZXNjcmlwdGlvbigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFU0NSSVBUSU9OKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkZXNjcmlwdGlvbi4KICAgICAgKgotICAgICAqIEBwYXJhbQlkZXNjCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERlc2NyaXB0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkZXNjICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERlc2NyaXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERlc2NyaXB0aW9uKFN0cmluZyBkZXNjKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFU0NSSVBUSU9OLCBkZXNjKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkZXNjcmlwdGlvbi4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGVzYwotICAgICAqIEBzZWUJPGNvZGU+c2V0RGVzY3JpcHRpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBkZXNjCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREZXNjcmlwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVTQ1JJUFRJT04pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIG5ldHdvcmsgcHJvdG9jb2wuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbndQcm90b2NvbAk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CisgICAgICogQHBhcmFtICAgIG53UHJvdG9jb2wgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldG5ldHdvcmtQcm90b2NvbChTdHJpbmcgbndQcm90b2NvbCkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ORVRXT1JLUFJPVE9DT0wsIG53UHJvdG9jb2wpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIG5ldHdvcmsgcHJvdG9jb2wuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCW53UHJvdG9jb2wKLSAgICAgKiBAc2VlCTxjb2RlPnNldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIG53UHJvdG9jb2wKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldG5ldHdvcmtQcm90b2NvbCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk5FVFdPUktQUk9UT0NPTCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgbmV0d29yayBwcm90b2NvbC4KICAgICAgKgotICAgICAqIEBwYXJhbQlud1Byb3RvY29sCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbndQcm90b2NvbCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TmV0d29ya1Byb3RvY29sKFN0cmluZyBud1Byb3RvY29sKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk5FVFdPUktQUk9UT0NPTCwgbndQcm90b2NvbCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgbmV0d29yayBwcm90b2NvbC4KICAgICAgKgotICAgICAqIEByZXR1cm4JbndQcm90b2NvbAotICAgICAqIEBzZWUJPGNvZGU+c2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgbndQcm90b2NvbAorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmV0d29ya1Byb3RvY29sKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTkVUV09SS1BST1RPQ09MKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSByb2xlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jcm9sZU5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0Um9sZU5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHJvbGVOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldFJvbGVOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHJvbGVOYW1lKFN0cmluZyByb2xlTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ST0xFTkFNRSwgcm9sZU5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHJvbGUgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4Jcm9sZU5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldFJvbGVOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgcm9sZU5hbWUKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldFJvbGVOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0cm9sZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ST0xFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgcm9sZSBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCXJvbGVOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldFJvbGVOYW1lPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICByb2xlTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRSb2xlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRSb2xlTmFtZShTdHJpbmcgcm9sZU5hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUk9MRU5BTUUsIHJvbGVOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSByb2xlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXJvbGVOYW1lCi0gICAgICogQHNlZQk8Y29kZT5zZXRSb2xlTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHJvbGVOYW1lCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRSb2xlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFJvbGVOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUk9MRU5BTUUpOwogICAgIH0KIAotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgbG9naW4gdGltZW91dC4KICAgICAgKgotICAgICAqIEBwYXJhbQlsb2dpblRpbWVPdXQJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0TG9naW5UaW1lT3V0PC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBsb2dpblRpbWVPdXQgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0TG9naW5UaW1lT3V0PC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGxvZ2luVGltZU91dChTdHJpbmcgbG9naW5UaW1lT3V0KSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR0lOVElNRU9VVCwgbG9naW5UaW1lT3V0KTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBsb2dpbiB0aW1lb3V0LgogICAgICAqCi0gICAgICogQHJldHVybglsb2dpblRpbWVvdXQKLSAgICAgKiBAc2VlCTxjb2RlPnNldExvZ2luVGltZU91dDwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGxvZ2luVGltZW91dAorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0TG9naW5UaW1lT3V0PC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0bG9naW5UaW1lT3V0KCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HSU5USU1FT1VUKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBsb2dpbiB0aW1lb3V0LgogICAgICAqCi0gICAgICogQHBhcmFtCWxvZ2luVGltZU91dAk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXRMb2dpblRpbWVPdXQ8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGxvZ2luVGltZU91dCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRMb2dpblRpbWVPdXQ8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TG9naW5UaW1lT3V0KFN0cmluZyBsb2dpblRpbWVPdXQpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HSU5USU1FT1VULCBsb2dpblRpbWVPdXQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGxvZ2luIHRpbWVvdXQuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWxvZ2luVGltZW91dAotICAgICAqIEBzZWUJPGNvZGU+c2V0TG9naW5UaW1lT3V0PC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgbG9naW5UaW1lb3V0CisgICAgICogQHNlZSAgICA8Y29kZT5zZXRMb2dpblRpbWVPdXQ8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRMb2dpblRpbWVPdXQoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dJTlRJTUVPVVQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRlbGltaXRlci4KICAgICAgKgotICAgICAqIEBwYXJhbQlkZWxpbQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREZWxpbWl0ZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRlbGltICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERlbGltaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRkZWxpbWl0ZXIoU3RyaW5nIGRlbGltKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUiwgZGVsaW0pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRlbGltaXRlci4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGVsaW0KLSAgICAgKiBAc2VlCTxjb2RlPnNldERlbGltaXRlcjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRlbGltCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREZWxpbWl0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRkZWxpbWl0ZXIoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERUxJTUlURVIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRlbGltaXRlci4KICAgICAgKgotICAgICAqIEBwYXJhbQlkZWxpbQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREZWxpbWl0ZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRlbGltICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERlbGltaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXREZWxpbWl0ZXIoU3RyaW5nIGRlbGltKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUiwgZGVsaW0pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRlbGltaXRlci4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGVsaW0KLSAgICAgKiBAc2VlCTxjb2RlPnNldERlbGltaXRlcjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRlbGltCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREZWxpbWl0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXREZWxpbWl0ZXIoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERUxJTUlURVIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRyaXZlciBzcGVjaWZpYyBwcm9wZXJ0aWVzLgogICAgICAqCi0gICAgICogQHBhcmFtCWRyaXZlclByb3BzCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRyaXZlclByb3BzICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0ZHJpdmVyUHJvcGVydGllcyhTdHJpbmcgZHJpdmVyUHJvcHMpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuRFJJVkVSUFJPUEVSVElFUywgZHJpdmVyUHJvcHMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRyaXZlciBzcGVjaWZpYyBwcm9wZXJ0aWVzLgogICAgICAqCi0gICAgICogQHJldHVybglkcml2ZXJQcm9wcwotICAgICAqIEBzZWUJPGNvZGU+c2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRyaXZlclByb3BzCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0ZHJpdmVyUHJvcGVydGllcygpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRSSVZFUlBST1BFUlRJRVMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRyaXZlciBzcGVjaWZpYyBwcm9wZXJ0aWVzLgogICAgICAqCi0gICAgICogQHBhcmFtCWRyaXZlclByb3BzCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRyaXZlclByb3BzICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RHJpdmVyUHJvcGVydGllcyhTdHJpbmcgZHJpdmVyUHJvcHMpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuRFJJVkVSUFJPUEVSVElFUywgZHJpdmVyUHJvcHMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRyaXZlciBzcGVjaWZpYyBwcm9wZXJ0aWVzLgogICAgICAqCi0gICAgICogQHJldHVybglkcml2ZXJQcm9wcwotICAgICAqIEBzZWUJPGNvZGU+c2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRyaXZlclByb3BzCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RHJpdmVyUHJvcGVydGllcygpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRSSVZFUlBST1BFUlRJRVMpOwpAQCAtNTQ4LDM1ICs1NDgsMzUgQEAKICAgICAgKiBDaGVjayBpZiB0aGUgUGFzc3dvcmRDcmVkZW50aWFsIHBhc3NlZCBmb3IgdGhpcyBnZXQgY29ubmVjdGlvbgogICAgICAqIHJlcXVlc3QgaXMgZXF1YWwgdG8gdGhlIHVzZXIvcGFzc3dkIG9mIHRoaXMgY29ubmVjdGlvbiBwb29sLgogICAgICAqLwotICAgIHByaXZhdGUgYm9vbGVhbiBpc0VxdWFsKCBQYXNzd29yZENyZWRlbnRpYWwgcGMsIFN0cmluZyB1c2VyLCAKKyAgICBwcml2YXRlIGJvb2xlYW4gaXNFcXVhbCggUGFzc3dvcmRDcmVkZW50aWFsIHBjLCBTdHJpbmcgdXNlciwKICAgICAgICAgU3RyaW5nIHBhc3N3b3JkKSB7Ci0gICAgICAgIAotCS8vaWYgZXF1YWwgZ2V0IGRpcmVjdCBjb25uZWN0aW9uIGVsc2UgCi0JLy9nZXQgY29ubmVjdGlvbiB3aXRoIHVzZXIgYW5kIHBhc3N3b3JkLgotCQotCWlmICh1c2VyID09IG51bGwgJiYgcGMgPT0gbnVsbCkgewotCSAgICByZXR1cm4gdHJ1ZTsKLQl9Ci0JCi0JaWYgKCB1c2VyID09IG51bGwgJiYgcGMgIT0gbnVsbCApIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQl9CiAKLQlpZiggcGMgPT0gbnVsbCApIHsKLQkgICAgcmV0dXJuIHRydWU7Ci0JfQotCQotCWlmICggdXNlci5lcXVhbHMoIHBjLmdldFVzZXJOYW1lKCkgKSApIHsKLQkgICAgaWYgKCBwYXNzd29yZCA9PSBudWxsICYmIHBjLmdldFBhc3N3b3JkKCkgPT0gbnVsbCApIHsKLQkgICAgICAgIHJldHVybiB0cnVlOwotCSAgICB9Ci0JfQotCQotCWlmICggdXNlci5lcXVhbHMocGMuZ2V0VXNlck5hbWUoKSkgJiYgcGFzc3dvcmQuZXF1YWxzKHBjLmdldFBhc3N3b3JkKCkpICkgewotCSAgICByZXR1cm4gdHJ1ZTsKLQl9IAotCQotICAgICAgICAKLQlyZXR1cm4gZmFsc2U7CisgICAgLy9pZiBlcXVhbCBnZXQgZGlyZWN0IGNvbm5lY3Rpb24gZWxzZQorICAgIC8vZ2V0IGNvbm5lY3Rpb24gd2l0aCB1c2VyIGFuZCBwYXNzd29yZC4KKworICAgIGlmICh1c2VyID09IG51bGwgJiYgcGMgPT0gbnVsbCkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIHVzZXIgPT0gbnVsbCAmJiBwYyAhPSBudWxsICkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmKCBwYyA9PSBudWxsICkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIHVzZXIuZXF1YWxzKCBwYy5nZXRVc2VyTmFtZSgpICkgKSB7CisgICAgICAgIGlmICggcGFzc3dvcmQgPT0gbnVsbCAmJiBwYy5nZXRQYXNzd29yZCgpID09IG51bGwgKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICggdXNlci5lcXVhbHMocGMuZ2V0VXNlck5hbWUoKSkgJiYgcGFzc3dvcmQuZXF1YWxzKHBjLmdldFBhc3N3b3JkKCkpICkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKworICAgIHJldHVybiBmYWxzZTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RhdGFTb3VyY2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRGF0YVNvdXJjZS5qYXZhCmluZGV4IGQ5MDA4NWQuLjUxZjE3NzMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRGF0YVNvdXJjZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRGF0YVNvdXJjZS5qYXZhCkBAIC0yOCwyMiArMjgsMjIgQEAKIGltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7CiBpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7CiAvKioKLSAqIEhvbGRzIHRoZSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QsIHdoaWNoIGlzIHRvIGJlIAorICogSG9sZHMgdGhlIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCwgd2hpY2ggaXMgdG8gYmUKICAqIHBhc3NlZCB0byB0aGUgYXBwbGljYXRpb24gcHJvZ3JhbS4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzMxCi0gKiBAYXV0aG9yCUJpbm9kIFAuRworICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8zMQorICogQGF1dGhvciAgICBCaW5vZCBQLkcKICAqLwogcHVibGljIGNsYXNzIERhdGFTb3VyY2UgaW1wbGVtZW50cyBqYXZheC5zcWwuRGF0YVNvdXJjZSwgamF2YS5pby5TZXJpYWxpemFibGUsCi0JCWNvbS5zdW4uYXBwc2Vydi5qZGJjcmEuRGF0YVNvdXJjZSwgamFrYXJ0YS5yZXNvdXJjZS5SZWZlcmVuY2VhYmxleyAKLQkJCQkgICAKKyAgICAgICAgY29tLnN1bi5hcHBzZXJ2LmpkYmNyYS5EYXRhU291cmNlLCBqYWthcnRhLnJlc291cmNlLlJlZmVyZW5jZWFibGV7CisKICAgICBwcml2YXRlIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2Y7Ci0gICAgcHJpdmF0ZSBDb25uZWN0aW9uTWFuYWdlciBjbTsJCQkJICAgCQkJCSAgIAorICAgIHByaXZhdGUgQ29ubmVjdGlvbk1hbmFnZXIgY207CiAgICAgcHJpdmF0ZSBpbnQgbG9naW5UaW1lb3V0OwogICAgIHByaXZhdGUgUHJpbnRXcml0ZXIgbG9nV3JpdGVyOwotICAgIHByaXZhdGUgU3RyaW5nIGRlc2NyaXB0aW9uOwkJCQkgICAKKyAgICBwcml2YXRlIFN0cmluZyBkZXNjcmlwdGlvbjsKICAgICBwcml2YXRlIFJlZmVyZW5jZSByZWZlcmVuY2U7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBMb2dnZXIgX2xvZ2dlcjsKICAgICBzdGF0aWMgewogICAgICAgICBfbG9nZ2VyID0gTG9nZ2VyLmdldEFub255bW91c0xvZ2dlcigpOwpAQCAtNTEsNTggKzUxLDU4IEBACiAgICAgcHJpdmF0ZSBib29sZWFuIGRlYnVnID0gZmFsc2U7CiAKICAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdC4gVGhpcyBpcyBjcmVhdGVkIGJ5IHRoZSAKKyAgICAgKiBDb25zdHJ1Y3RzIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdC4gVGhpcyBpcyBjcmVhdGVkIGJ5IHRoZQogICAgICAqIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0LgogICAgICAqCi0gICAgICogQHBhcmFtCW1jZgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdCAKLSAgICAgKgkJCWNyZWF0aW5nIHRoaXMgb2JqZWN0LgotICAgICAqIEBwYXJhbQljbQk8Y29kZT5Db25uZWN0aW9uTWFuYWdlcjwvY29kZT4gb2JqZWN0IGVpdGhlciBhc3NvY2lhdGVkCi0gICAgICoJCQl3aXRoIEFwcGxpY2F0aW9uIHNlcnZlciBvciBSZXNvdXJjZSBBZGFwdGVyLgorICAgICAqIEBwYXJhbSAgICBtY2YgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QKKyAgICAgKiAgICAgICAgICAgIGNyZWF0aW5nIHRoaXMgb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBjbSAgICA8Y29kZT5Db25uZWN0aW9uTWFuYWdlcjwvY29kZT4gb2JqZWN0IGVpdGhlciBhc3NvY2lhdGVkCisgICAgICogICAgICAgICAgICB3aXRoIEFwcGxpY2F0aW9uIHNlcnZlciBvciBSZXNvdXJjZSBBZGFwdGVyLgogICAgICAqLwogICAgIHB1YmxpYyBEYXRhU291cmNlIChNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmLCBDb25uZWN0aW9uTWFuYWdlciBjbSkgewotICAgIAl0aGlzLm1jZiA9IG1jZjsKLSAgICAJaWYgKGNtID09IG51bGwpIHsKLSAgICAJICAgIHRoaXMuY20gPSAoQ29ubmVjdGlvbk1hbmFnZXIpIG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbk1hbmFnZXIoKTsKLSAgICAJfSBlbHNlIHsKLSAgICAJICAgIHRoaXMuY20gPSBjbTsKLSAgICAJfSAgICAJCi0gICAgfSAgIAotICAgIAorICAgICAgICB0aGlzLm1jZiA9IG1jZjsKKyAgICAgICAgaWYgKGNtID09IG51bGwpIHsKKyAgICAgICAgICAgIHRoaXMuY20gPSAoQ29ubmVjdGlvbk1hbmFnZXIpIG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbk1hbmFnZXIoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuY20gPSBjbTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QuCi0gICAgICogCi0gICAgICogQHJldHVybgk8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGFuIGVycm9yLiAgICAgIAorICAgICAqCisgICAgICogQHJldHVybiAgICA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGFuIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBDb25uZWN0aW9uIGdldENvbm5lY3Rpb24oKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLSAgICAJdHJ5IHsKLSAgICAJICAgIHJldHVybiAoQ29ubmVjdGlvbikgY20uYWxsb2NhdGVDb25uZWN0aW9uKG1jZixudWxsKTsgICAgCSAgICAKLSAgICAJfSBjYXRjaCAoUmVzb3VyY2VFeGNlcHRpb24gcmUpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJldHVybiAoQ29ubmVjdGlvbikgY20uYWxsb2NhdGVDb25uZWN0aW9uKG1jZixudWxsKTsKKyAgICAgICAgfSBjYXRjaCAoUmVzb3VyY2VFeGNlcHRpb24gcmUpIHsKIC8vIFRoaXMgaXMgdGVtcG9yYXJ5LiBUaGlzIG5lZWRzIHRvIGJlIGNoYW5nZWQgdG8gU0VWRVJFIGFmdGVyIFRQCi0JICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLmV4Y19nZXRfY29ubiIsIHJlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLmV4Y19nZXRfY29ubiIsIHJlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICByZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAJICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKHJlLmdldE1lc3NhZ2UoKSk7Ci0gICAgCX0KKyAgICAgICAgICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKHJlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgotICAgICAqIAotICAgICAqIEBwYXJhbQl1c2VyCVVzZXIgbmFtZSBmb3IgdGhlIENvbm5lY3Rpb24uCi0gICAgICogQHBhcmFtCXB3ZAlQYXNzd29yZCBmb3IgdGhlIENvbm5lY3Rpb24uCi0gICAgICogQHJldHVybgk8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGFuIGVycm9yLiAgICAgIAorICAgICAqCisgICAgICogQHBhcmFtICAgIHVzZXIgICAgVXNlciBuYW1lIGZvciB0aGUgQ29ubmVjdGlvbi4KKyAgICAgKiBAcGFyYW0gICAgcHdkICAgIFBhc3N3b3JkIGZvciB0aGUgQ29ubmVjdGlvbi4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYW4gZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIENvbm5lY3Rpb24gZ2V0Q29ubmVjdGlvbihTdHJpbmcgdXNlciwgU3RyaW5nIHB3ZCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0gICAgCXRyeSB7Ci0gICAgCSAgICBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW5mbyA9IG5ldyBDb25uZWN0aW9uUmVxdWVzdEluZm8gKHVzZXIsIHB3ZCk7Ci0gICAgCSAgICByZXR1cm4gKENvbm5lY3Rpb24pIGNtLmFsbG9jYXRlQ29ubmVjdGlvbihtY2YsaW5mbyk7Ci0gICAgCX0gY2F0Y2ggKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW5mbyA9IG5ldyBDb25uZWN0aW9uUmVxdWVzdEluZm8gKHVzZXIsIHB3ZCk7CisgICAgICAgICAgICByZXR1cm4gKENvbm5lY3Rpb24pIGNtLmFsbG9jYXRlQ29ubmVjdGlvbihtY2YsaW5mbyk7CisgICAgICAgIH0gY2F0Y2ggKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7CiAvLyBUaGlzIGlzIHRlbXBvcmFyeS4gVGhpcyBuZWVkcyB0byBiZSBjaGFuZ2VkIHRvIFNFVkVSRSBhZnRlciBUUAotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5leGNfZ2V0X2Nvbm4iLCByZS5nZXRNZXNzYWdlKCkpOwotICAgIAkgICAgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAocmUuZ2V0TWVzc2FnZSgpKTsKLSAgICAJfQotICAgIH0gICAgCisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLmV4Y19nZXRfY29ubiIsIHJlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uIChyZS5nZXRNZXNzYWdlKCkpOworICAgICAgICB9CisgICAgfQogCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBhY3R1YWwgU1FMQ29ubmVjdGlvbiBmcm9tIHRoZSBDb25uZWN0aW9uIHdyYXBwZXIKQEAgLTExNSw5MSArMTE1LDkxIEBACiAgICAgICovCiAgICAgcHVibGljIENvbm5lY3Rpb24gZ2V0Q29ubmVjdGlvbihDb25uZWN0aW9uIGNvbikgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAKLSAgICAgICAgQ29ubmVjdGlvbiBkcml2ZXJDb24gPSBjb247IAorICAgICAgICBDb25uZWN0aW9uIGRyaXZlckNvbiA9IGNvbjsKICAgICAgICAgaWYgKGNvbiBpbnN0YW5jZW9mIGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uSG9sZGVyKSB7Ci0gICAgICAgICAgIGRyaXZlckNvbiA9ICgoY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25Ib2xkZXIpIGNvbikuZ2V0Q29ubmVjdGlvbigpOyAKLSAgICAgICAgfSAKKyAgICAgICAgICAgZHJpdmVyQ29uID0gKChjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbkhvbGRlcikgY29uKS5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gZHJpdmVyQ29uOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgbG9naW4gdGltZW91dAogICAgICAqCiAgICAgICogQHJldHVybiBsb2dpbiB0aW1lb3V0LgotICAgICAqIEB0aHJvd3MJU1FMRXhjZXB0aW9uCUlmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIElmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0TG9naW5UaW1lb3V0KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKLSAgICAJcmV0dXJuCWxvZ2luVGltZW91dDsKKyAgICAgICAgcmV0dXJuICAgIGxvZ2luVGltZW91dDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGxvZ2luIHRpbWVvdXQKICAgICAgKgotICAgICAqIEBwYXJhbQlsb2dpblRpbWVvdXQJTG9naW4gdGltZW91dC4KLSAgICAgKiBAdGhyb3dzCVNRTEV4Y2VwdGlvbglJZiBhIGRhdGFiYXNlIGVycm9yIG9jY3Vycy4KKyAgICAgKiBAcGFyYW0gICAgbG9naW5UaW1lb3V0ICAgIExvZ2luIHRpbWVvdXQuCisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TG9naW5UaW1lb3V0KGludCBsb2dpblRpbWVvdXQpIHRocm93cyBTUUxFeGNlcHRpb257Ci0gICAgCXRoaXMubG9naW5UaW1lb3V0ID0gbG9naW5UaW1lb3V0OworICAgICAgICB0aGlzLmxvZ2luVGltZW91dCA9IGxvZ2luVGltZW91dDsKICAgICB9Ci0gICAgCi0gICAgLyoqIAorCisgICAgLyoqCiAgICAgICogR2V0IHRoZSBsb2d3cml0ZXIgb2JqZWN0LgogICAgICAqCiAgICAgICogQHJldHVybiA8Y29kZT4gUHJpbnRXcml0ZXIgPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cwlTUUxFeGNlcHRpb24JSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCiAgICAgICovCiAgICAgcHVibGljIFByaW50V3JpdGVyIGdldExvZ1dyaXRlcigpIHRocm93cyBTUUxFeGNlcHRpb257Ci0gICAgCXJldHVybglsb2dXcml0ZXI7CisgICAgICAgIHJldHVybiAgICBsb2dXcml0ZXI7CiAgICAgfQotICAgICAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgbG9nd3JpdGVyIG9uIHRoaXMgb2JqZWN0LgogICAgICAqCiAgICAgICogQHBhcmFtIDxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cwlTUUxFeGNlcHRpb24JSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TG9nV3JpdGVyKFByaW50V3JpdGVyIGxvZ1dyaXRlcikgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKLSAgICAJdGhpcy5sb2dXcml0ZXIgPSBsb2dXcml0ZXI7Ci0gICAgfSAgICAgICAgCi0gICAgICAgIAorICAgICAgICB0aGlzLmxvZ1dyaXRlciA9IGxvZ1dyaXRlcjsKKyAgICB9CisKICAgICBwdWJsaWMgTG9nZ2VyIGdldFBhcmVudExvZ2dlcigpIHRocm93cyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBmZWF0dXJlLiIpOwogICAgIH0KICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIGRlc2NyaXB0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybglEZXNjcmlwdGlvbiBhYm91dCB0aGUgRGF0YVNvdXJjZS4KKyAgICAgKiBAcmV0dXJuICAgIERlc2NyaXB0aW9uIGFib3V0IHRoZSBEYXRhU291cmNlLgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSB7Ci0gICAgCXJldHVybiBkZXNjcmlwdGlvbjsKKyAgICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgZGVzY3JpcHRpb24uCiAgICAgICoKICAgICAgKiBAcGFyYW0gZGVzY3JpcHRpb24gRGVzY3JpcHRpb24gYWJvdXQgdGhlIERhdGFTb3VyY2UuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RGVzY3JpcHRpb24oU3RyaW5nIGRlc2NyaXB0aW9uKSB7Ci0gICAgCXRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKLSAgICB9ICAgIAotICAgIAorICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247CisgICAgfQorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSByZWZlcmVuY2UuCiAgICAgICoKICAgICAgKiBAcmV0dXJuIDxjb2RlPlJlZmVyZW5jZTwvY29kZT5vYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIFJlZmVyZW5jZSBnZXRSZWZlcmVuY2UoKSB7Ci0gICAgCXJldHVybiByZWZlcmVuY2U7CisgICAgICAgIHJldHVybiByZWZlcmVuY2U7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSByZWZlcmVuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcmVmZXJlbmNlIDxjb2RlPlJlZmVyZW5jZTwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICByZWZlcmVuY2UgPGNvZGU+UmVmZXJlbmNlPC9jb2RlPiBvYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0UmVmZXJlbmNlKFJlZmVyZW5jZSByZWZlcmVuY2UpIHsKLSAgICAJdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7CisgICAgICAgIHRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlOwogICAgIH0KIAogICAgIHB1YmxpYyA8VD4gVCB1bndyYXAoQ2xhc3M8VD4gaWZhY2UpIHRocm93cyBTUUxFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbi5qYXZhCmluZGV4IDU3NGVkNjYuLmJlYzBkNmIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluLmphdmEKQEAgLTE4LDEzICsxOCwxMyBAQAogCiBwdWJsaWMgaW50ZXJmYWNlIEpkYmNTZXR1cEFkbWluIHsKIAotICAgIHB1YmxpYyB2b2lkIHNldFRhYmxlTmFtZShTdHJpbmcgZGIpOyAKKyAgICBwdWJsaWMgdm9pZCBzZXRUYWJsZU5hbWUoU3RyaW5nIGRiKTsKIAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGFibGVOYW1lKCk7CiAKLSAgICBwdWJsaWMgdm9pZCBzZXRKbmRpTmFtZShTdHJpbmcgbmFtZSk7IAorICAgIHB1YmxpYyB2b2lkIHNldEpuZGlOYW1lKFN0cmluZyBuYW1lKTsKIAotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Sm5kaU5hbWUoKTsgCisgICAgcHVibGljIFN0cmluZyBnZXRKbmRpTmFtZSgpOwogCiAgICAgcHVibGljIHZvaWQgc2V0U2NoZW1hTmFtZShTdHJpbmcgbmFtZSk7CiAKQEAgLTM0LDYgKzM0LDYgQEAKIAogICAgIHB1YmxpYyBJbnRlZ2VyIGdldE5vT2ZSb3dzKCk7CiAKLSAgICBwdWJsaWMgYm9vbGVhbiBjaGVja1NldHVwKCk7IAorICAgIHB1YmxpYyBib29sZWFuIGNoZWNrU2V0dXAoKTsKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbkltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW5JbXBsLmphdmEKaW5kZXggM2JkN2NhZC4uZmVjNzQ0MyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbkltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluSW1wbC5qYXZhCkBAIC02NSwxMSArNjUsMTEgQEAKIAogcHJpdmF0ZSB2b2lkIHByaW50SGllcmFyY2h5KENsYXNzTG9hZGVyIGNsLCBpbnQgY250KXsKIHdoaWxlKGNsICE9IG51bGwpIHsKLQlmb3IoaW50IGkgPTA7IGkgPCBjbnQ7IGkrKykgCi0JCVN5c3RlbS5vdXQucHJpbnQoIiAiICk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJQQVJFTlQgOiIgKyBjbCk7Ci0JY2wgPSBjbC5nZXRQYXJlbnQoKTsKLQljbnQgKz0gMzsKKyAgICBmb3IoaW50IGkgPTA7IGkgPCBjbnQ7IGkrKykKKyAgICAgICAgU3lzdGVtLm91dC5wcmludCgiICIgKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBBUkVOVCA6IiArIGNsKTsKKyAgICBjbCA9IGNsLmdldFBhcmVudCgpOworICAgIGNudCArPSAzOwogfQogfQogCkBAIC03OCwxMCArNzgsMTAgQEAKICAgICAgICAgZm9yKGludCBpID0wOyBpIDwgY250OyBpKyspCiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiICIgKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQQVJFTlQgb2YgQ2xhc3NMb2FkZXIgMSA6IiArIGNsMSk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJQQVJFTlQgb2YgQ2xhc3NMb2FkZXIgMiA6IiArIGNsMik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJFUVVBTFMgOiAiICsgKGNsMSA9PSBjbDIpKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBBUkVOVCBvZiBDbGFzc0xvYWRlciAyIDoiICsgY2wyKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVRVUFMUyA6ICIgKyAoY2wxID09IGNsMikpOwogICAgICAgICBjbDEgPSBjbDEuZ2V0UGFyZW50KCk7Ci0JY2wyID0gY2wyLmdldFBhcmVudCgpOworICAgIGNsMiA9IGNsMi5nZXRQYXJlbnQoKTsKICAgICAgICAgY250ICs9IDM7CiB9CiB9CkBAIC05MCw5MyArOTAsOTMgQEAKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja1NldHVwKCl7CiAKICAgICAgICAgaWYgKGpuZGlOYW1lPT0gbnVsbCB8fCBqbmRpTmFtZS50cmltKCkuZXF1YWxzKCIiKSkgewotCSAgIHJldHVybiBmYWxzZTsKLQl9CisgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAogICAgICAgICBpZiAodGFibGVOYW1lPT0gbnVsbCB8fCB0YWJsZU5hbWUudHJpbSgpLmVxdWFscygiIikpIHsKLQkgICByZXR1cm4gZmFsc2U7Ci0JfQorICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAgICAgICAgQ29ubmVjdGlvbiBjb24gPSBudWxsOwotCVN0YXRlbWVudCBzID0gbnVsbDsKLQlSZXN1bHRTZXQgcnMgPSBudWxsOwotCWJvb2xlYW4gYiA9IGZhbHNlOworICAgIFN0YXRlbWVudCBzID0gbnVsbDsKKyAgICBSZXN1bHRTZXQgcnMgPSBudWxsOworICAgIGJvb2xlYW4gYiA9IGZhbHNlOwogICAgICAgICB0cnkgewotCSAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCS8vZGVidWcKLQlDbGFzcyBjbHogPSBEYXRhU291cmNlLmNsYXNzOworICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgIC8vZGVidWcKKyAgICBDbGFzcyBjbHogPSBEYXRhU291cmNlLmNsYXNzOwogLyoKLQlpZihjbHouZ2V0Q2xhc3NMb2FkZXIoKSAhPSBudWxsKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiRGF0YVNvdXJjZSdzIGNsYXN4cyA6ICIgKyAgY2x6LmdldE5hbWUoKSArICAiIGNsYXNzbG9hZGVyICIgKyBjbHouZ2V0Q2xhc3NMb2FkZXIoKSk7Ci0JCXByaW50SGllcmFyY2h5KGNsei5nZXRDbGFzc0xvYWRlcigpLmdldFBhcmVudCgpLCA4KTsKLQl9Ci0JQ2xhc3MgY2xzID0gaWMubG9va3VwKGpuZGlOYW1lKS5nZXRDbGFzcygpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiTG9va2VkIHVwIGNsYXNzJ3MgOiAiICsgY2xzLmdldFBhY2thZ2UoKSArICI6IiArIGNscy5nZXROYW1lKCkgICsgIiBjbGFzc2xvYWRlciAiICArIGNscy5nZXRDbGFzc0xvYWRlcigpKTsKLQlwcmludEhpZXJhcmNoeShjbHMuZ2V0Q2xhc3NMb2FkZXIoKS5nZXRQYXJlbnQoKSwgOCk7CisgICAgaWYoY2x6LmdldENsYXNzTG9hZGVyKCkgIT0gbnVsbCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRhdGFTb3VyY2UncyBjbGFzeHMgOiAiICsgIGNsei5nZXROYW1lKCkgKyAgIiBjbGFzc2xvYWRlciAiICsgY2x6LmdldENsYXNzTG9hZGVyKCkpOworICAgICAgICBwcmludEhpZXJhcmNoeShjbHouZ2V0Q2xhc3NMb2FkZXIoKS5nZXRQYXJlbnQoKSwgOCk7CisgICAgfQorICAgIENsYXNzIGNscyA9IGljLmxvb2t1cChqbmRpTmFtZSkuZ2V0Q2xhc3MoKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tlZCB1cCBjbGFzcydzIDogIiArIGNscy5nZXRQYWNrYWdlKCkgKyAiOiIgKyBjbHMuZ2V0TmFtZSgpICArICIgY2xhc3Nsb2FkZXIgIiAgKyBjbHMuZ2V0Q2xhc3NMb2FkZXIoKSk7CisgICAgcHJpbnRIaWVyYXJjaHkoY2xzLmdldENsYXNzTG9hZGVyKCkuZ2V0UGFyZW50KCksIDgpOwogCi0JU3lzdGVtLm91dC5wcmludGxuKCJDbGFzc2xvYWRlcnMgZXF1YWwgPyAiICsgIChjbHouZ2V0Q2xhc3NMb2FkZXIoKSA9PSBjbHMuZ2V0Q2xhc3NMb2FkZXIoKSkpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiJiomKiYqJiogQ29tcGFyaW5nIEhpZXJhY2h5IERhdGFTb3VyY2UgdnMgbG9va2VkdXAiKTsKLQlpZihjbHouZ2V0Q2xhc3NMb2FkZXIoKSAhPSBudWxsKSB7Ci0JCWNvbXBhcmVIaWVyYXJjaHkoY2x6LmdldENsYXNzTG9hZGVyKCksIGNscy5nZXRDbGFzc0xvYWRlcigpLCA4KTsKLQl9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJDbGFzc2xvYWRlcnMgZXF1YWwgPyAiICsgIChjbHouZ2V0Q2xhc3NMb2FkZXIoKSA9PSBjbHMuZ2V0Q2xhc3NMb2FkZXIoKSkpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiJiomKiYqJiogQ29tcGFyaW5nIEhpZXJhY2h5IERhdGFTb3VyY2UgdnMgbG9va2VkdXAiKTsKKyAgICBpZihjbHouZ2V0Q2xhc3NMb2FkZXIoKSAhPSBudWxsKSB7CisgICAgICAgIGNvbXBhcmVIaWVyYXJjaHkoY2x6LmdldENsYXNzTG9hZGVyKCksIGNscy5nZXRDbGFzc0xvYWRlcigpLCA4KTsKKyAgICB9CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkJlZm9yZSBsb29rdXAiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJlZm9yZSBsb29rdXAiKTsKICovCi0JT2JqZWN0IG8gPSBpYy5sb29rdXAoam5kaU5hbWUpOwotLy8JU3lzdGVtLm91dC5wcmludGxuKCJhZnRlciBsb29rdXAgbG9va3VwIik7CisgICAgT2JqZWN0IG8gPSBpYy5sb29rdXAoam5kaU5hbWUpOworLy8gICAgU3lzdGVtLm91dC5wcmludGxuKCJhZnRlciBsb29rdXAgbG9va3VwIik7CiAKLQkgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKW8gOworICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpbyA7CiAvKgotCVN5c3RlbS5vdXQucHJpbnRsbigiYWZ0ZXIgY2FzdCIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLSBUcnlpbmcgb3VyIFN0dWZmICEhISIpOwotCXRyeSB7Ci0JCUNsYXNzIG8xID0gKENsYXNzLmZvck5hbWUoImNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlIikpOwotCQlDbGFzc0xvYWRlciBjbDEgPSBvMS5nZXRDbGFzc0xvYWRlcigpOwotCQlDbGFzc0xvYWRlciBjbDIgPSBEYXRhU291cmNlLmNsYXNzLmdldENsYXNzTG9hZGVyKCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQ2wxID09IENsMiIgKyAoY2wxID09IGNsMikpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNsYXNzZXMgZXF1YWwiICsgKERhdGFTb3VyY2UuY2xhc3MgPT0gbzEpKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYWZ0ZXIgY2FzdCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLSBUcnlpbmcgb3VyIFN0dWZmICEhISIpOworICAgIHRyeSB7CisgICAgICAgIENsYXNzIG8xID0gKENsYXNzLmZvck5hbWUoImNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlIikpOworICAgICAgICBDbGFzc0xvYWRlciBjbDEgPSBvMS5nZXRDbGFzc0xvYWRlcigpOworICAgICAgICBDbGFzc0xvYWRlciBjbDIgPSBEYXRhU291cmNlLmNsYXNzLmdldENsYXNzTG9hZGVyKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2wxID09IENsMiIgKyAoY2wxID09IGNsMikpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNsYXNzZXMgZXF1YWwiICsgKERhdGFTb3VyY2UuY2xhc3MgPT0gbzEpKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQogKi8KICAgICAgICAgICAgIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQkgICAgU3RyaW5nIGZ1bGxUYWJsZU5hbWUgPSB0YWJsZU5hbWU7Ci0JICAgIGlmIChzY2hlbWFOYW1lICE9IG51bGwgJiYgKCEoc2NoZW1hTmFtZS50cmltKCkuZXF1YWxzKCIiKSkpKSB7Ci0JICAgICAgICBmdWxsVGFibGVOYW1lID0gc2NoZW1hTmFtZS50cmltKCkgKyAiLiIgKyBmdWxsVGFibGVOYW1lOwotCSAgICB9Ci0JICAgIFN0cmluZyBxcnkgPSAic2VsZWN0ICogZnJvbSAiICsgZnVsbFRhYmxlTmFtZTsgCisgICAgICAgIFN0cmluZyBmdWxsVGFibGVOYW1lID0gdGFibGVOYW1lOworICAgICAgICBpZiAoc2NoZW1hTmFtZSAhPSBudWxsICYmICghKHNjaGVtYU5hbWUudHJpbSgpLmVxdWFscygiIikpKSkgeworICAgICAgICAgICAgZnVsbFRhYmxlTmFtZSA9IHNjaGVtYU5hbWUudHJpbSgpICsgIi4iICsgZnVsbFRhYmxlTmFtZTsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmcgcXJ5ID0gInNlbGVjdCAqIGZyb20gIiArIGZ1bGxUYWJsZU5hbWU7CiAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGVjdXRpbmcgcXVlcnkgOiIgKyBxcnkpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4ZWN1dGluZyBxdWVyeSA6IiArIHFyeSk7CiAKLQkgICAgcyA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKLQkgICAgcnMgPSBzLmV4ZWN1dGVRdWVyeShxcnkpOyAKKyAgICAgICAgcyA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgcnMgPSBzLmV4ZWN1dGVRdWVyeShxcnkpOwogCiAgICAgICAgICAgICBpbnQgaSA9IDA7Ci0JICAgIGlmIChycy5uZXh0KCkpIHsKLQkgICAgICAgIGkrKzsKLQkgICAgfQorICAgICAgICBpZiAocnMubmV4dCgpKSB7CisgICAgICAgICAgICBpKys7CisgICAgICAgIH0KIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJObyBvZiByb3dzIGZvdW5kOiIgKyBpKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTm8gb2Ygcm93cyBleHBlY3RlZDoiICsgbm9PZlJvd3MpOwogCi0JICAgIGlmIChpID09IG5vT2ZSb3dzLmludFZhbHVlKCkpIHsKLQkgICAgICAgYiA9IHRydWU7Ci0JICAgIH0gZWxzZSB7Ci0JICAgICAgIGIgPSBmYWxzZTsKLQkgICAgfQotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgYiA9IGZhbHNlOwotCX0gZmluYWxseSB7Ci0JICAgIHRyeSB7Ci0JICAgICAgICBpZiAocnMgIT0gbnVsbCkgcnMuY2xvc2UoKTsKLQkgICAgICAgIGlmIChzICE9IG51bGwpIHMuY2xvc2UoKTsKLQkgICAgICAgIGlmIChjb24gIT0gbnVsbCkgY29uLmNsb3NlKCk7CisgICAgICAgIGlmIChpID09IG5vT2ZSb3dzLmludFZhbHVlKCkpIHsKKyAgICAgICAgICAgYiA9IHRydWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgIGIgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgYiA9IGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpZiAocnMgIT0gbnVsbCkgcnMuY2xvc2UoKTsKKyAgICAgICAgICAgIGlmIChzICE9IG51bGwpIHMuY2xvc2UoKTsKKyAgICAgICAgICAgIGlmIChjb24gIT0gbnVsbCkgY29uLmNsb3NlKCk7CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICB9Ci0JfQotCVN5c3RlbS5vdXQucHJpbnRsbigiUmV0dXJuaW5nIHNldHVwIDoiICtiKTsKLQlyZXR1cm4gYjsKKyAgICAgICAgfQorICAgIH0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJldHVybmluZyBzZXR1cCA6IiArYik7CisgICAgcmV0dXJuIGI7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0xvY2FsVHJhbnNhY3Rpb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTG9jYWxUcmFuc2FjdGlvbi5qYXZhCmluZGV4IDhlYmUwNTcuLmM1NGEyMTYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTG9jYWxUcmFuc2FjdGlvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTG9jYWxUcmFuc2FjdGlvbi5qYXZhCkBAIC0yMyw0NSArMjMsNDUgQEAKIC8qKgogICogPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gaW1wbGVtZW50YXRpb24gZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wOC8wMwotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDgvMDMKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIHB1YmxpYyBjbGFzcyBMb2NhbFRyYW5zYWN0aW9uIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTG9jYWxUcmFuc2FjdGlvbiB7Ci0gICAgCisKICAgICBwcml2YXRlIE1hbmFnZWRDb25uZWN0aW9uIG1jOwotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0b3IgZm9yIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+LgotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdGhhdCByZXR1cm5zCi0gICAgICoJCQl0aGlzIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IG9iamVjdCBhcwotICAgICAqCQkJYSByZXN1bHQgb2YgPGNvZGU+Z2V0TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHRoYXQgcmV0dXJucworICAgICAqICAgICAgICAgICAgdGhpcyA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBvYmplY3QgYXMKKyAgICAgKiAgICAgICAgICAgIGEgcmVzdWx0IG9mIDxjb2RlPmdldExvY2FsVHJhbnNhY3Rpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIExvY2FsVHJhbnNhY3Rpb24oTWFuYWdlZENvbm5lY3Rpb24gbWMpIHsKICAgICAgICAgdGhpcy5tYyA9IG1jOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEJlZ2luIGEgbG9jYWwgdHJhbnNhY3Rpb24uCiAgICAgICoKLSAgICAgKiBAdGhyb3dzCUxvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2hhbmdpbmcKLSAgICAgKgkJCQkJCXRoZSBhdXRvY29tbWl0IG1vZGUgb2YgdGhlIHBoeXNpY2FsCi0gICAgICoJCQkJCQljb25uZWN0aW9uCisgICAgICogQHRocm93cyAgICBMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNoYW5naW5nCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICB0aGUgYXV0b2NvbW1pdCBtb2RlIG9mIHRoZSBwaHlzaWNhbAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGJlZ2luKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgLy9HSkNJTlQKLQltYy50cmFuc2FjdGlvblN0YXJ0ZWQoKTsKKyAgICBtYy50cmFuc2FjdGlvblN0YXJ0ZWQoKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKS5zZXRBdXRvQ29tbWl0KGZhbHNlKTsKICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IExvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29tbWl0IGEgbG9jYWwgdHJhbnNhY3Rpb24uCi0gICAgICogQHRocm93cwlMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNoYW5naW5nCi0gICAgICoJCQkJCQl0aGUgYXV0b2NvbW1pdCBtb2RlIG9mIHRoZSBwaHlzaWNhbAotICAgICAqCQkJCQkJY29ubmVjdGlvbiBvciBjb21taXR0aW5nIHRoZSB0cmFuc2FjdGlvbgorICAgICAqIEB0aHJvd3MgICAgTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjaGFuZ2luZworICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGF1dG9jb21taXQgbW9kZSBvZiB0aGUgcGh5c2ljYWwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gb3IgY29tbWl0dGluZyB0aGUgdHJhbnNhY3Rpb24KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjb21taXQoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBFeGNlcHRpb24gZSA9IG51bGw7CkBAIC03MiwxNSArNzIsMTUgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgICAgICAvL0dKQ0lOVAotCW1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CisgICAgbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSb2xsYmFjayBhIGxvY2FsIHRyYW5zYWN0aW9uLgotICAgICAqIAotICAgICAqIEB0aHJvd3MJTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjaGFuZ2luZwotICAgICAqCQkJCQkJdGhlIGF1dG9jb21taXQgbW9kZSBvZiB0aGUgcGh5c2ljYWwKLSAgICAgKgkJCQkJCWNvbm5lY3Rpb24gb3Igcm9sbGluZyBiYWNrIHRoZSB0cmFuc2FjdGlvbgorICAgICAqCisgICAgICogQHRocm93cyAgICBMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNoYW5naW5nCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICB0aGUgYXV0b2NvbW1pdCBtb2RlIG9mIHRoZSBwaHlzaWNhbAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbiBvciByb2xsaW5nIGJhY2sgdGhlIHRyYW5zYWN0aW9uCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcm9sbGJhY2soKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICB0cnkgewpAQCAtOTAsNyArOTAsNyBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IExvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgICAgIC8vR0pDSU5UCi0JbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKKyAgICBtYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbi5qYXZhCmluZGV4IDMwZjQ2MGEuLjJkYWQ1OWEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uLmphdmEKQEAgLTQxLDggKzQxLDggQEAKIC8qKgogICogPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMjIKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzIyCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiBwdWJsaWMgY2xhc3MgTWFuYWdlZENvbm5lY3Rpb24gaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiB7CiAKQEAgLTUyLDcgKzUyLDcgQEAKIAogICAgIHByaXZhdGUgYm9vbGVhbiBpc0Rlc3Ryb3llZCA9IGZhbHNlOwogICAgIHByaXZhdGUgYm9vbGVhbiBpc1VzYWJsZSA9IHRydWU7Ci0gICAgCisKICAgICBwcml2YXRlIGludCBjb25uZWN0aW9uVHlwZSA9IElTTk9UQVBPT0xFRENPTk5FQ1RJT047CiAgICAgcHJpdmF0ZSBQb29sZWRDb25uZWN0aW9uIHBjID0gbnVsbDsKICAgICBwcml2YXRlIGphdmEuc3FsLkNvbm5lY3Rpb24gYWN0dWFsQ29ubmVjdGlvbiA9IG51bGw7CkBAIC02Miw3ICs2Miw3IEBACiAgICAgcHJpdmF0ZSBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmID0gbnVsbDsKICAgICBwcml2YXRlIFhBUmVzb3VyY2UgeGFyID0gbnVsbDsKICAgICBwdWJsaWMgQ29ubmVjdGlvbkhvbGRlciBhY3RpdmVDb25uZWN0aW9uSGFuZGxlOwotICAgIAorCiAgICAgLy9HSkNJTlQKICAgICBwcml2YXRlIGludCBpc29sYXRpb25MZXZlbFdoZW5DbGVhbmVkOwogICAgIHByaXZhdGUgYm9vbGVhbiBpc0NsZWFuID0gZmFsc2U7CkBAIC03Nyw3MSArNzcsNzEgQEAKICAgICBzdGF0aWMgewogICAgICAgICBfbG9nZ2VyID0gTG9nZ2VyLmdldEFub255bW91c0xvZ2dlcigpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdG9yIGZvciA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4uIFRoZSBwb29sZWRDb25uIHBhcmFtZXRlciBpcyBleHBlY3RlZAotICAgICAqIHRvIGJlIG51bGwgYW5kIHNxbENvbm4gcGFyYW1ldGVyIGlzIHRoZSBhY3R1YWwgY29ubmVjdGlvbiBpbiBjYXNlIHdoZXJlIAotICAgICAqIHRoZSBhY3R1YWwgY29ubmVjdGlvbiBpcyBnb3QgZnJvbSBhIG5vbiBwb29sZWQgZGF0YXNvdXJjZSBvYmplY3QuIFRoZSAKKyAgICAgKiB0byBiZSBudWxsIGFuZCBzcWxDb25uIHBhcmFtZXRlciBpcyB0aGUgYWN0dWFsIGNvbm5lY3Rpb24gaW4gY2FzZSB3aGVyZQorICAgICAqIHRoZSBhY3R1YWwgY29ubmVjdGlvbiBpcyBnb3QgZnJvbSBhIG5vbiBwb29sZWQgZGF0YXNvdXJjZSBvYmplY3QuIFRoZQogICAgICAqIHBvb2xlZENvbm4gcGFyYW1ldGVyIGlzIGV4cGVjdGVkIHRvIGJlIG5vbiBudWxsIGFuZCBzcWxDb25uIHBhcmFtZXRlcgogICAgICAqIGlzIGV4cGVjdGVkIHRvIGJlIG51bGwgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlIGRhdGFzb3VyY2Ugb2JqZWN0IGlzIGEKICAgICAgKiBjb25uZWN0aW9uIHBvb2wgZGF0YXNvdXJjZSBvciBhbiB4YSBkYXRhc291cmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCXBvb2xlZENvbm4JPGNvZGU+UG9vbGVkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGluIGNhc2UgdGhlIAotICAgICAqCQkJCXBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgdG8gYmUgb2J0YWluZWQgZnJvbSBhIHBvb2xlZAotICAgICAqCQkJCTxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+OyBudWxsIG90aGVyd2lzZQotICAgICAqIEBwYXJhbQlzcWxDb25uCTxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpbiBjYXNlIHRoZSBwaHlzaWNhbAotICAgICAqCQkJY29ubmVjdGlvbiBpcyB0byBiZSBvYnRhaW5lZCBmcm9tIGEgbm9uIHBvb2xlZCA8Y29kZT5EYXRhU291cmNlPC9jb2RlPjsKLSAgICAgKgkJCW51bGwgb3RoZXJ3aXNlCi0gICAgICogQHBhcmFtCXBhc3N3ZENyZWQJb2JqZWN0IGNvbmF0aW5pbmcgdGhlCi0gICAgICoJCQkJdXNlciBhbmQgcGFzc3dvcmQgZm9yIGFsbG9jYXRpbmcgdGhlIGNvbm5lY3Rpb24KLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdAotICAgICAqCQkJCQl0aGF0IGNyZWF0ZWQgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0Ci0gICAgICoJCQkJCWlzIG5vdCB0aGUgc2FtZSBhcyByZXR1cm5lZCBieSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+Ci0gICAgICoJCQkJCW9iamVjdCBwYXNzZWQKKyAgICAgKiBAcGFyYW0gICAgcG9vbGVkQ29ubiAgICA8Y29kZT5Qb29sZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaW4gY2FzZSB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIHRvIGJlIG9idGFpbmVkIGZyb20gYSBwb29sZWQKKyAgICAgKiAgICAgICAgICAgICAgICA8Y29kZT5EYXRhU291cmNlPC9jb2RlPjsgbnVsbCBvdGhlcndpc2UKKyAgICAgKiBAcGFyYW0gICAgc3FsQ29ubiAgICA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaW4gY2FzZSB0aGUgcGh5c2ljYWwKKyAgICAgKiAgICAgICAgICAgIGNvbm5lY3Rpb24gaXMgdG8gYmUgb2J0YWluZWQgZnJvbSBhIG5vbiBwb29sZWQgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT47CisgICAgICogICAgICAgICAgICBudWxsIG90aGVyd2lzZQorICAgICAqIEBwYXJhbSAgICBwYXNzd2RDcmVkICAgIG9iamVjdCBjb25hdGluaW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgIHVzZXIgYW5kIHBhc3N3b3JkIGZvciBhbGxvY2F0aW5nIHRoZSBjb25uZWN0aW9uCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgdGhhdCBjcmVhdGVkIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdAorICAgICAqICAgICAgICAgICAgICAgICAgICBpcyBub3QgdGhlIHNhbWUgYXMgcmV0dXJuZWQgYnkgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgICAgICBvYmplY3QgcGFzc2VkCiAgICAgICovCi0gICAgcHVibGljIE1hbmFnZWRDb25uZWN0aW9uKFBvb2xlZENvbm5lY3Rpb24gcG9vbGVkQ29ubiwgamF2YS5zcWwuQ29ubmVjdGlvbiBzcWxDb25uLCAKKyAgICBwdWJsaWMgTWFuYWdlZENvbm5lY3Rpb24oUG9vbGVkQ29ubmVjdGlvbiBwb29sZWRDb25uLCBqYXZhLnNxbC5Db25uZWN0aW9uIHNxbENvbm4sCiAgICAgICAgIFBhc3N3b3JkQ3JlZGVudGlhbCBwYXNzd2RDcmVkLCBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihwb29sZWRDb25uID09IG51bGwgJiYgc3FsQ29ubiA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkNvbm5lY3Rpb24gb2JqZWN0IGNhbm5vdCBiZSBudWxsIik7CiAgICAgICAgIH0KIAotCWlmIChjb25uZWN0aW9uVHlwZSA9PSBJU05PVEFQT09MRURDT05ORUNUSU9OICkgewotCSAgICBhY3R1YWxDb25uZWN0aW9uID0gc3FsQ29ubjsKLQl9CisgICAgaWYgKGNvbm5lY3Rpb25UeXBlID09IElTTk9UQVBPT0xFRENPTk5FQ1RJT04gKSB7CisgICAgICAgIGFjdHVhbENvbm5lY3Rpb24gPSBzcWxDb25uOworICAgIH0KIAogICAgICAgICBwYyA9IHBvb2xlZENvbm47CiAgICAgICAgIGNvbm5lY3Rpb25IYW5kbGVzID0gbmV3IEhhc2h0YWJsZSgpOwogICAgICAgICBwYXNzd2RDcmVkZW50aWFsID0gcGFzc3dkQ3JlZDsKICAgICAgICAgdGhpcy5tY2YgPSBtY2Y7Ci0gICAgICAgIGlmKHBhc3N3ZENyZWRlbnRpYWwgIT0gbnVsbCAmJiAgCisgICAgICAgIGlmKHBhc3N3ZENyZWRlbnRpYWwgIT0gbnVsbCAmJgogICAgICAgICAgICAgdGhpcy5tY2YuZXF1YWxzKHBhc3N3ZENyZWRlbnRpYWwuZ2V0TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KCkpID09IGZhbHNlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgdGhhdCBoYXMgY3JlYXRlZCB0aGlzICIgKyAKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSB0aGF0IGhhcyBjcmVhdGVkIHRoaXMgIiArCiAgICAgICAgICAgICAgICAgIk1hbmFnZWRDb25uZWN0aW9uIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IHJldHVybmVkIGJ5IiArCiAgICAgICAgICAgICAgICAgICAgICIgdGhlIFBhc3N3b3JkQ3JlZGVudGlhbCBmb3IgdGhpcyBNYW5hZ2VkQ29ubmVjdGlvbiIpOwogICAgICAgICB9CiAgICAgICAgIGxvZ1dyaXRlciA9IG1jZi5nZXRMb2dXcml0ZXIoKTsKICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7Ci0JY2UgPSBuZXcgQ29ubmVjdGlvbkV2ZW50KHRoaXMsIENvbm5lY3Rpb25FdmVudC5DT05ORUNUSU9OX0NMT1NFRCk7CisgICAgY2UgPSBuZXcgQ29ubmVjdGlvbkV2ZW50KHRoaXMsIENvbm5lY3Rpb25FdmVudC5DT05ORUNUSU9OX0NMT1NFRCk7CiAgICAgfQogCiAgICAgLyoqCiAgICAgICogQWRkcyBhIGNvbm5lY3Rpb24gZXZlbnQgbGlzdGVuZXIgdG8gdGhlIE1hbmFnZWRDb25uZWN0aW9uIGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCWxpc3RlbmVyCTxjb2RlPkNvbm5lY3Rpb25FdmVudExpc3RlbmVyPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBsaXN0ZW5lciAgICA8Y29kZT5Db25uZWN0aW9uRXZlbnRMaXN0ZW5lcjwvY29kZT4KICAgICAgKiBAc2VlIDxjb2RlPnJlbW92ZUNvbm5lY3Rpb25FdmVudExpc3RlbmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGFkZENvbm5lY3Rpb25FdmVudExpc3RlbmVyKENvbm5lY3Rpb25FdmVudExpc3RlbmVyIGxpc3RlbmVyKSB7Ci0JdGhpcy5saXN0ZW5lciA9IGxpc3RlbmVyOworICAgIHRoaXMubGlzdGVuZXIgPSBsaXN0ZW5lcjsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBVc2VkIGJ5IHRoZSBjb250YWluZXIgdG8gY2hhbmdlIHRoZSBhc3NvY2lhdGlvbiBvZiBhbiBhcHBsaWNhdGlvbi1sZXZlbCAKKyAgICAgKiBVc2VkIGJ5IHRoZSBjb250YWluZXIgdG8gY2hhbmdlIHRoZSBhc3NvY2lhdGlvbiBvZiBhbiBhcHBsaWNhdGlvbi1sZXZlbAogICAgICAqIGNvbm5lY3Rpb24gaGFuZGxlIHdpdGggYSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JY29ubmVjdGlvbgk8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0byBiZSBhc3NvY2lhdGVkIHdpdGgKLSAgICAgKgkJCQl0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm8gbW9yZQotICAgICAqCQkJCQl2YWxpZCBvciB0aGUgY29ubmVjdGlvbiBoYW5kbGUgcGFzc2VkIGlzIG51bGwKKyAgICAgKiBAcGFyYW0gICAgY29ubmVjdGlvbiAgICA8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0byBiZSBhc3NvY2lhdGVkIHdpdGgKKyAgICAgKiAgICAgICAgICAgICAgICB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm8gbW9yZQorICAgICAqICAgICAgICAgICAgICAgICAgICB2YWxpZCBvciB0aGUgY29ubmVjdGlvbiBoYW5kbGUgcGFzc2VkIGlzIG51bGwKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBhc3NvY2lhdGVDb25uZWN0aW9uKE9iamVjdCBjb25uZWN0aW9uKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtMTUyLDExICsxNTIsMTEgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQ29ubmVjdGlvbiBoYW5kbGUgY2Fubm90IGJlIG51bGwiKTsKICAgICAgICAgfQogICAgICAgICBDb25uZWN0aW9uSG9sZGVyIGNoID0gKENvbm5lY3Rpb25Ib2xkZXIpIGNvbm5lY3Rpb247Ci0gICAgICAgIAorCiAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYyA9IChjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24pY2guZ2V0TWFuYWdlZENvbm5lY3Rpb24oKTsKLQltYy5hY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKLQlpc0NsZWFuID0gZmFsc2U7Ci0gICAgICAgIAorICAgIG1jLmFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOworICAgIGlzQ2xlYW4gPSBmYWxzZTsKKwogICAgICAgICBjaC5hc3NvY2lhdGVDb25uZWN0aW9uKGFjdHVhbENvbm5lY3Rpb24sIHRoaXMpOwogICAgICAgICAvKioKICAgICAgICAgICogVGhlIGV4cGVjdGF0aW9uIGZyb20gdGhlIGFib3ZlIG1ldGhvZCBpcyB0aGF0IHRoZSBjb25uZWN0aW9uIGhvbGRlcgpAQCAtMTY1LDM0ICsxNjUsMzQgQEAKICAgICAgICAgICogdG8gdGhlIE1hbmFnZWRDb25uZWN0aW9uIGluc3RhbmNlIHdpdGggdGhpcyBNYW5hZ2VkQ29ubmVjdGlvbiBpbnN0YW5jZS4KICAgICAgICAgICogQW55IHByZXZpb3VzIHN0YXRlbWVudHMgYW5kIHJlc3VsdCBzZXRzIGFsc28gbmVlZCB0byBiZSByZW1vdmVkLgogICAgICAgICAgKi8KLSAgICAgICAgIAorCiAgICAgICAgICBpZihhY3RpdmVDb25uZWN0aW9uSGFuZGxlICE9IG51bGwpIHsKICAgICAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUuc2V0QWN0aXZlKGZhbHNlKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBjaC5zZXRBY3RpdmUodHJ1ZSk7Ci0gICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBjaDsgCisgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBjaDsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBBcHBsaWNhdGlvbiBzZXJ2ZXIgY2FsbHMgdGhpcyBtZXRob2QgdG8gZm9yY2UgYW55IGNsZWFudXAgb24gdGhlIAorICAgICAqIEFwcGxpY2F0aW9uIHNlcnZlciBjYWxscyB0aGlzIG1ldGhvZCB0byBmb3JjZSBhbnkgY2xlYW51cCBvbiB0aGUKICAgICAgKiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuIFRoaXMgbWV0aG9kIGNhbGxzIHRoZSBpbnZhbGlkYXRlCiAgICAgICogbWV0aG9kIG9uIGFsbCBDb25uZWN0aW9uSGFuZGxlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4uCi0gICAgICogCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBubyBtb3JlIHZhbGlkCisgICAgICoKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vIG1vcmUgdmFsaWQKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjbGVhbnVwKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gY2xlYW51cCIpOwogICAgICAgICB9CiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwotICAgICAgICAKKwogICAgICAgICAvKioKICAgICAgICAgICogbWF5IG5lZWQgdG8gc2V0IHRoZSBhdXRvY29tbWl0IHRvIHRydWUgZm9yIHRoZSBub24tcG9vbGVkIGNhc2UuCiAgICAgICAgICAqLwogICAgICAgICAvL0dKQ0lOVAotCS8vaWYgKGFjdHVhbENvbm5lY3Rpb24gIT0gbnVsbCkgewotCWlmIChjb25uZWN0aW9uVHlwZSA9PSBJU05PVEFQT09MRURDT05ORUNUSU9OICkgeworICAgIC8vaWYgKGFjdHVhbENvbm5lY3Rpb24gIT0gbnVsbCkgeworICAgIGlmIChjb25uZWN0aW9uVHlwZSA9PSBJU05PVEFQT09MRURDT05ORUNUSU9OICkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgaXNvbGF0aW9uTGV2ZWxXaGVuQ2xlYW5lZCA9IGFjdHVhbENvbm5lY3Rpb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKTsKICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewpAQCAtMjAxLDE3ICsyMDEsMTcgQEAKICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGlzQ2xlYW4gPSB0cnVlOwotICAgICAgICAKKwogICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUaGlzIG1ldGhvZCByZW1vdmVzIGFsbCB0aGUgY29ubmVjdGlvbiBoYW5kbGVzIGZyb20gdGhlIHRhYmxlCiAgICAgICogb2YgY29ubmVjdGlvbiBoYW5kbGVzIGFuZCBpbnZhbGlkYXRlcyBhbGwgb2YgdGhlbSBzbyB0aGF0IGFueQogICAgICAqIG9wZXJhdGlvbiBvbiB0aG9zZSBjb25uZWN0aW9uIGhhbmRsZXMgdGhyb3dzIGFuIGV4Y2VwdGlvbi4KICAgICAgKgotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlcmUgaXMgYSBwcm9ibGVtIGluIHJldHJpZXZpbmcKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCXRoZSBjb25uZWN0aW9uIGhhbmRsZXMKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSBpbiByZXRyaWV2aW5nCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY29ubmVjdGlvbiBoYW5kbGVzCiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIGludmFsaWRhdGVBbGxDb25uZWN0aW9uSGFuZGxlcygpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIFNldCBoYW5kbGVzID0gY29ubmVjdGlvbkhhbmRsZXMua2V5U2V0KCk7CkBAIC0yMjYsMjIgKzIyNiwyMiBAQAogICAgICAgICB9CiAgICAgICAgIGNvbm5lY3Rpb25IYW5kbGVzLmNsZWFyKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogRGVzdHJveXMgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gdG8gdGhlIHVuZGVybHlpbmcgcmVzb3VyY2UgbWFuYWdlci4KLSAgICAgKiAKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNsb3NpbmcgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24KKyAgICAgKgorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2xvc2luZyB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb257CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CiAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gZGVzdHJveSIpOwogICAgICAgICB9Ci0JLy9HSkNJTlQKLQlpZihpc0Rlc3Ryb3llZCA9PSB0cnVlKSB7Ci0JICAgIHJldHVybjsJCi0JfQorICAgIC8vR0pDSU5UCisgICAgaWYoaXNEZXN0cm95ZWQgPT0gdHJ1ZSkgeworICAgICAgICByZXR1cm47CisgICAgfQogCi0JYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7CisgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpZihjb25uZWN0aW9uVHlwZSA9PSBJU1hBQ09OTkVDVElPTiB8fCBjb25uZWN0aW9uVHlwZSA9PSBJU1BPT0xFRENPTk5FQ1RJT04pIHsKICAgICAgICAgICAgICAgICBwYy5jbG9zZSgpOwpAQCAtMjU1LDI4ICsyNTUsMjggQEAKICAgICAgICAgICAgIGlzRGVzdHJveWVkID0gdHJ1ZTsKICAgICAgICAgICAgIHBhc3N3ZENyZWRlbnRpYWwgPSBudWxsOwogICAgICAgICAgICAgY29ubmVjdGlvbkhhbmRsZXMgPSBudWxsOwotICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgZm9sbG93aW5nIGV4Y2VwdGlvbiBoYXMgb2NjdXJlZCBkdXJpbmcgZGVzdHJveTogIiAKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGZvbGxvd2luZyBleGNlcHRpb24gaGFzIG9jY3VyZWQgZHVyaW5nIGRlc3Ryb3k6ICIKICAgICAgICAgICAgICAgICArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgICAgICBpc0Rlc3Ryb3llZCA9IHRydWU7CiAgICAgICAgIHBhc3N3ZENyZWRlbnRpYWwgPSBudWxsOwogICAgICAgICBjb25uZWN0aW9uSGFuZGxlcyA9IG51bGw7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIG5ldyBjb25uZWN0aW9uIGhhbmRsZSBmb3IgdGhlIHVuZGVybHlpbmcgcGh5c2ljYWwgCisgICAgICogQ3JlYXRlcyBhIG5ldyBjb25uZWN0aW9uIGhhbmRsZSBmb3IgdGhlIHVuZGVybHlpbmcgcGh5c2ljYWwKICAgICAgKiBjb25uZWN0aW9uIHJlcHJlc2VudGVkIGJ5IHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3ViamVjdAk8Y29kZT5TdWJqZWN0PC9jb2RlPiBwYXJhbWV0ZXIgbmVlZGVkIGZvciBhdXRoZW50aWNhdGlvbgotICAgICAqIEBwYXJhbQljeFJlcUluZm8JPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBjYXJyaWVzIHRoZSB1c2VyIAotICAgICAqICAgICAgIAkgICAgICAgICAJYW5kIHBhc3N3b3JkIHJlcXVpcmVkIGZvciBnZXR0aW5nIHRoaXMgY29ubmVjdGlvbi4KLSAgICAgKiBAcmV0dXJuCUNvbm5lY3Rpb24JdGhlIGNvbm5lY3Rpb24gaGFuZGxlIDxjb2RlPk9iamVjdDwvY29kZT4KLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlIAotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJcGh5c2ljYWwgY29ubmVjdGlvbiBmcm9tIHRoZSBwb29sZWQgY29ubmVjdGlvbiAKLSAgICAgKiBAdGhyb3dzCVNlY3VyaXR5RXhjZXB0aW9uCWlmIHRoZXJlIGlzIGEgbWlzbWF0Y2ggYmV0d2VlbiB0aGUKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCXBhc3N3b3JkIGNyZWRlbnRpYWxzIG9yIHJlYXV0aGVudGljYXRpb24gaXMgcmVxdWVzdGVkCisgICAgICogQHBhcmFtICAgIHN1YmplY3QgICAgPGNvZGU+U3ViamVjdDwvY29kZT4gcGFyYW1ldGVyIG5lZWRlZCBmb3IgYXV0aGVudGljYXRpb24KKyAgICAgKiBAcGFyYW0gICAgY3hSZXFJbmZvICAgIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gY2FycmllcyB0aGUgdXNlcgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHBhc3N3b3JkIHJlcXVpcmVkIGZvciBnZXR0aW5nIHRoaXMgY29ubmVjdGlvbi4KKyAgICAgKiBAcmV0dXJuICAgIENvbm5lY3Rpb24gICAgdGhlIGNvbm5lY3Rpb24gaGFuZGxlIDxjb2RlPk9iamVjdDwvY29kZT4KKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaHlzaWNhbCBjb25uZWN0aW9uIGZyb20gdGhlIHBvb2xlZCBjb25uZWN0aW9uCisgICAgICogQHRocm93cyAgICBTZWN1cml0eUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhIG1pc21hdGNoIGJldHdlZW4gdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzd29yZCBjcmVkZW50aWFscyBvciByZWF1dGhlbnRpY2F0aW9uIGlzIHJlcXVlc3RlZAogICAgICAqLwotICAgIHB1YmxpYyBPYmplY3QgZ2V0Q29ubmVjdGlvbihTdWJqZWN0IHN1YiwgamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxSW5mbykgCisgICAgcHVibGljIE9iamVjdCBnZXRDb25uZWN0aW9uKFN1YmplY3Qgc3ViLCBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm8gY3hSZXFJbmZvKQogICAgICAgICB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGdldENvbm5lY3Rpb24iKTsKQEAgLTI4NCwxNCArMjg0LDE0IEBACiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwogICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxdWVzdEluZm8gPSAoY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mbykgY3hSZXFJbmZvOwogICAgICAgICBQYXNzd29yZENyZWRlbnRpYWwgcGFzc3dkQ3JlZCA9IFNlY3VyaXR5VXRpbHMuZ2V0UGFzc3dvcmRDcmVkZW50aWFsKHRoaXMubWNmLCBzdWIsIGN4UmVxdWVzdEluZm8pOwotICAgICAgICAgICAgCisKICAgICAgICAgaWYoU2VjdXJpdHlVdGlscy5pc1Bhc3N3b3JkQ3JlZGVudGlhbEVxdWFsKHRoaXMucGFzc3dkQ3JlZGVudGlhbCwgcGFzc3dkQ3JlZCkgPT0gZmFsc2UpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBqYWthcnRhLnJlc291cmNlLnNwaS5TZWN1cml0eUV4Y2VwdGlvbigiUmUtYXV0aGVudGljYXRpb24gbm90IHN1cHBvcnRlZCIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIC8vR0pDSU5UCiAgICAgICAgIGdldEFjdHVhbENvbm5lY3Rpb24oKTsKLSAKKwogICAgICAgICAvKioKICAgICAgICAgICogVGhlIGZvbGxvd2luZyBjb2RlIGluIHRoZSBpZiBzdGF0ZW1lbnQgZmlyc3QgY2hlY2tzIGlmIHRoaXMgTWFuYWdlZENvbm5lY3Rpb24KICAgICAgICAgICogaXMgY2xlYW4gb3Igbm90LiBJZiBpdCBpcywgaXQgcmVzZXRzIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwgdG8gd2hhdApAQCAtMzAxLDI4ICszMDEsMjggQEAKICAgICAgICAgaWYoaXNDbGVhbikgewogICAgICAgICAgICAgKChjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KW1jZikucmVzZXRJc29sYXRpb24odGhpcywgaXNvbGF0aW9uTGV2ZWxXaGVuQ2xlYW5lZCk7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgICAKKworCiAgICAgICAgIENvbm5lY3Rpb25Ib2xkZXIgY29ubkhvbGRlck9iamVjdCA9IG5ldyBDb25uZWN0aW9uSG9sZGVyKGFjdHVhbENvbm5lY3Rpb24sIHRoaXMpOwotCWlzQ2xlYW49ZmFsc2U7Ci0gICAgICAgIAorICAgIGlzQ2xlYW49ZmFsc2U7CisKICAgICAgICAgaWYoYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSAhPSBudWxsKSB7CiAgICAgICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlLnNldEFjdGl2ZShmYWxzZSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgY29ubkhvbGRlck9iamVjdC5zZXRBY3RpdmUodHJ1ZSk7CiAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBjb25uSG9sZGVyT2JqZWN0OwotIAorCiAgICAgICAgIHJldHVybiBjb25uSG9sZGVyT2JqZWN0OwotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgYW4gPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gaW5zdGFuY2UuIFRoZSA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBpbnRlcmZhY2UKLSAgICAgKiBpcyB1c2VkIGJ5IHRoZSBjb250YWluZXIgdG8gbWFuYWdlIGxvY2FsIHRyYW5zYWN0aW9ucyBmb3IgYSBSTSBpbnN0YW5jZS4gCisgICAgICogaXMgdXNlZCBieSB0aGUgY29udGFpbmVyIHRvIG1hbmFnZSBsb2NhbCB0cmFuc2FjdGlvbnMgZm9yIGEgUk0gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKi8KICAgICBwdWJsaWMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTG9jYWxUcmFuc2FjdGlvbiBnZXRMb2NhbFRyYW5zYWN0aW9uKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTMzMSwxMyArMzMxLDEzIEBACiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwogICAgICAgICByZXR1cm4gbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5Mb2NhbFRyYW5zYWN0aW9uKHRoaXMpOwogICAgIH0KLSAgICAgCisKICAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBsb2cgd3JpdGVyIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4gCisgICAgICogR2V0cyB0aGUgbG9nIHdyaXRlciBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggdGhpcyAKLSAgICAgKgkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAqICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqIEBzZWUgPGNvZGU+c2V0TG9nV3JpdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBQcmludFdyaXRlciBnZXRMb2dXcml0ZXIoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewpAQCAtMzQ1LDQ2ICszNDUsNDYgQEAKICAgICAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gZ2V0TG9nV3JpdGVyIik7CiAgICAgICAgIH0KICAgICAgICAgY2hlY2tJZlZhbGlkKCk7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBsb2dXcml0ZXI7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogR2V0cyB0aGUgbWV0YWRhdGEgaW5mb3JtYXRpb24gZm9yIHRoaXMgY29ubmVjdGlvbidzIHVuZGVybHlpbmcgRUlTIAotICAgICAqIHJlc291cmNlIG1hbmFnZXIgaW5zdGFuY2UuIAorICAgICAqIEdldHMgdGhlIG1ldGFkYXRhIGluZm9ybWF0aW9uIGZvciB0aGlzIGNvbm5lY3Rpb24ncyB1bmRlcmx5aW5nIEVJUworICAgICAqIHJlc291cmNlIG1hbmFnZXIgaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGE8L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGE8L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKi8KICAgICBwdWJsaWMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YSBnZXRNZXRhRGF0YSgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGdldE1ldGFEYXRhIik7CiAgICAgICAgIH0KICAgICAgICAgY2hlY2tJZlZhbGlkKCk7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEodGhpcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogUmV0dXJucyBhbiA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZS4gCisgICAgICogUmV0dXJucyBhbiA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBvcgotICAgICAqCQkJCQl0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZSAKLSAgICAgKgkJCQkJPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCU5vdFN1cHBvcnRlZEV4Y2VwdGlvbglpZiB1bmRlcmx5aW5nIGRhdGFzb3VyY2UgaXMgbm90IGFuCi0gICAgICoJCQkJCTxjb2RlPlhBRGF0YVNvdXJjZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgb3IKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIE5vdFN1cHBvcnRlZEV4Y2VwdGlvbiAgICBpZiB1bmRlcmx5aW5nIGRhdGFzb3VyY2UgaXMgbm90IGFuCisgICAgICogICAgICAgICAgICAgICAgICAgIDxjb2RlPlhBRGF0YVNvdXJjZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgWEFSZXNvdXJjZSBnZXRYQVJlc291cmNlKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gZ2V0WEFSZXNvdXJjZSIpOwogICAgICAgICB9CiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwotICAgICAgICAKKwogICAgICAgICBpZihjb25uZWN0aW9uVHlwZSA9PSBJU1hBQ09OTkVDVElPTikgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBpZih4YXIgPT0gbnVsbCkgewotCQkgICAgLyoqCisgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgICogVXNpbmcgdGhlIHdyYXBwZXIgWEFSZXNvdXJjZS4KICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgICAgIHhhciA9IG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuWEFSZXNvdXJjZUltcGwoKChYQUNvbm5lY3Rpb24pcGMpLmdldFhBUmVzb3VyY2UoKSwgdGhpcyk7CkBAIC0zOTcsMTYgKzM5NywxNiBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiQ2Fubm90IGdldCBhbiBYQVJlc291cmNlIGZyb20gYSBub24gWEEgY29ubmVjdGlvbiIpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmVtb3ZlcyBhbiBhbHJlYWR5IHJlZ2lzdGVyZWQgY29ubmVjdGlvbiBldmVudCBsaXN0ZW5lciBmcm9tIHRoZQogICAgICAqIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlsaXN0ZW5lcgk8Y29kZT5Db25uZWN0aW9uRXZlbnRMaXN0ZW5lcjwvY29kZT4gdG8gYmUgcmVtb3ZlZAorICAgICAqIEBwYXJhbSAgICBsaXN0ZW5lciAgICA8Y29kZT5Db25uZWN0aW9uRXZlbnRMaXN0ZW5lcjwvY29kZT4gdG8gYmUgcmVtb3ZlZAogICAgICAqIEBzZWUgPGNvZGU+YWRkQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcmVtb3ZlQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXIoQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXIgbGlzdGVuZXIpIHsKLQlsaXN0ZW5lciA9IG51bGw7CisgICAgbGlzdGVuZXIgPSBudWxsOwogICAgIH0KIAogICAgIC8qKgpAQCAtNDE1LDcgKzQxNSw3IEBACiAgICAgICogTG9jYWxUcmFuc2FjdGlvbiBvYmplY3Qgd2hlbiBpdHMgYmVnaW4oKSBtZXRob2QgaXMgY2FsbGVkLgogICAgICAqLwogICAgIHZvaWQgdHJhbnNhY3Rpb25TdGFydGVkKCkgewotCXRyYW5zYWN0aW9uSW5Qcm9ncmVzcyA9IHRydWU7CQorICAgIHRyYW5zYWN0aW9uSW5Qcm9ncmVzcyA9IHRydWU7CiAgICAgfQogCiAgICAgLyoqCkBAIC00MjQsMTYgKzQyNCwxNiBAQAogICAgICAqIExvY2FsVHJhbnNhY3Rpb24gb2JqZWN0IHdoZW4gaXRzIGVuZCgpIG1ldGhvZCBpcyBjYWxsZWQuCiAgICAgICovCiAgICAgdm9pZCB0cmFuc2FjdGlvbkNvbXBsZXRlZCgpIHsKLQl0cmFuc2FjdGlvbkluUHJvZ3Jlc3MgPSBmYWxzZTsKLQlpZihjb25uZWN0aW9uVHlwZSA9PSBJU1BPT0xFRENPTk5FQ1RJT04gfHwgY29ubmVjdGlvblR5cGUgPT0gSVNYQUNPTk5FQ1RJT04pIHsKKyAgICB0cmFuc2FjdGlvbkluUHJvZ3Jlc3MgPSBmYWxzZTsKKyAgICBpZihjb25uZWN0aW9uVHlwZSA9PSBJU1BPT0xFRENPTk5FQ1RJT04gfHwgY29ubmVjdGlvblR5cGUgPT0gSVNYQUNPTk5FQ1RJT04pIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgaXNvbGF0aW9uTGV2ZWxXaGVuQ2xlYW5lZCA9IGFjdHVhbENvbm5lY3Rpb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKTsKICAgICAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgICAgIC8vY2hlY2sgd2hhdCB0byBkbyBpbiB0aGlzIGNhc2UhIQotCQlfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5ub3Rnb3RfdHhfaXNvbHZsIik7CisgICAgICAgICAgICAvL2NoZWNrIHdoYXQgdG8gZG8gaW4gdGhpcyBjYXNlISEKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMubm90Z290X3R4X2lzb2x2bCIpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0JICAgIHRyeSB7CisKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBhY3R1YWxDb25uZWN0aW9uLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgYWN0dWFsQ29ubmVjdGlvbiA9IG51bGw7CiAgICAgICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7CkBAIC00NDEsNyArNDQxLDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0JICAgICAgICAKKwogICAgICAgICBpc0NsZWFuID0gdHJ1ZTsKIAogICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKQEAgLTQ1MywyOCArNDUzLDI4IEBACiAgICAgICogb3Igbm90LgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGlzVHJhbnNhY3Rpb25JblByb2dyZXNzKCkgewotCXJldHVybiB0cmFuc2FjdGlvbkluUHJvZ3Jlc3M7CisgICAgcmV0dXJuIHRyYW5zYWN0aW9uSW5Qcm9ncmVzczsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBsb2cgd3JpdGVyIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlvdXQJPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzCi0gICAgICoJCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqIEBwYXJhbSAgICBvdXQgICAgPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzCisgICAgICogICAgICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqIEBzZWUgPGNvZGU+Z2V0TG9nV3JpdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldExvZ1dyaXRlcihQcmludFdyaXRlciBvdXQpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwogICAgICAgICBsb2dXcml0ZXIgPSBvdXQ7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogVGhpcyBtZXRob2QgZGV0ZXJtaW5lcyB0aGUgdHlwZSBvZiB0aGUgY29ubmVjdGlvbiBiZWluZyBoZWxkIAorICAgICAqIFRoaXMgbWV0aG9kIGRldGVybWluZXMgdGhlIHR5cGUgb2YgdGhlIGNvbm5lY3Rpb24gYmVpbmcgaGVsZAogICAgICAqIGluIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+LgotICAgICAqIAotICAgICAqIEBwYXJhbQlwb29sZWRDb25uCTxjb2RlPlBvb2xlZENvbm5lY3Rpb248L2NvZGU+Ci0gICAgICogQHJldHVybgljb25uZWN0aW9uIHR5cGUKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBwb29sZWRDb25uICAgIDxjb2RlPlBvb2xlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBjb25uZWN0aW9uIHR5cGUKICAgICAgKi8KICAgICBwcml2YXRlIGludCBnZXRDb25uZWN0aW9uVHlwZShQb29sZWRDb25uZWN0aW9uIHBvb2xlZENvbm4pIHsKICAgICAgICAgaWYocG9vbGVkQ29ubiA9PSBudWxsKSB7CkBAIC00ODUsMjIgKzQ4NSwyMiBAQAogICAgICAgICAgICAgcmV0dXJuIElTUE9PTEVEQ09OTkVDVElPTjsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UgdGhhdCAKKyAgICAgKiBSZXR1cm5zIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlIHRoYXQKICAgICAgKiBjcmVhdGVkIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlIHRoYXQgY3JlYXRlZCB0aGlzCi0gICAgICoJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEByZXR1cm4gICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZSB0aGF0IGNyZWF0ZWQgdGhpcworICAgICAqICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKICAgICAgKi8KICAgICBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgZ2V0TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KCkgewogICAgICAgICByZXR1cm4gKGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkpbWNmOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGFjdHVhbCBzcWwgY29ubmVjdGlvbiBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4uIAorICAgICAqIFJldHVybnMgdGhlIGFjdHVhbCBzcWwgY29ubmVjdGlvbiBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRoZSBwaHlzaWNhbCA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgdGhlIHBoeXNpY2FsIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+CiAgICAgICovCiAgICAgLy9HSkNJTlQKICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGdldEFjdHVhbENvbm5lY3Rpb24oKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewpAQCAtNTA5LDggKzUwOSw4IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGlmKGFjdHVhbENvbm5lY3Rpb24gPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICBhY3R1YWxDb25uZWN0aW9uID0gcGMuZ2V0Q29ubmVjdGlvbigpOwotCQl9Ci0JCQorICAgICAgICB9CisKICAgICAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKICAgICAgICAgICAgICAgICBzcWxlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CkBAIC01MTgsODEgKzUxOCw4MSBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBhY3R1YWxDb25uZWN0aW9uOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPi4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcyAKLSAgICAgKgkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCisgICAgICogQHJldHVybiAgICA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzCisgICAgICogICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQogICAgICAqLwogICAgIFBhc3N3b3JkQ3JlZGVudGlhbCBnZXRQYXNzd29yZENyZWRlbnRpYWwoKSB7CiAgICAgICAgIHJldHVybiBwYXNzd2RDcmVkZW50aWFsOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENoZWNrcyBpZiB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpcyB2YWxpZCBvciBub3QgYW5kIHRocm93cyBhbgogICAgICAqIGV4Y2VwdGlvbiBpZiBpdCBpcyBub3QgdmFsaWQuIEEgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGlzIG5vdCB2YWxpZCBpZgogICAgICAqIGRlc3Ryb3kgaGFzIG5vdCBiZWVuIGNhbGxlZCBhbmQgbm8gcGh5c2ljYWwgY29ubmVjdGlvbiBlcnJvciBoYXMKICAgICAgKiBvY2N1cnJlZCByZW5kZXJpbmcgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gdW51c2FibGUuCiAgICAgICoKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIDxjb2RlPmRlc3Ryb3k8L2NvZGU+IGhhcyBiZWVuIGNhbGxlZCBvbiB0aGlzIAotICAgICAqCQkJCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2Ugb3IgaWYgYSAKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCXBoeXNpY2FsIGNvbm5lY3Rpb24gZXJyb3Igb2NjdXJyZWQgcmVuZGVyaW5nIGl0IHVudXNhYmxlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiA8Y29kZT5kZXN0cm95PC9jb2RlPiBoYXMgYmVlbiBjYWxsZWQgb24gdGhpcworICAgICAqICAgICAgICAgICAgICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2Ugb3IgaWYgYQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGh5c2ljYWwgY29ubmVjdGlvbiBlcnJvciBvY2N1cnJlZCByZW5kZXJpbmcgaXQgdW51c2FibGUKICAgICAgKi8KICAgICAvL0dKQ0lOVAogICAgIHZvaWQgY2hlY2tJZlZhbGlkKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYoaXNEZXN0cm95ZWQgPT0gdHJ1ZSB8fCBpc1VzYWJsZSA9PSBmYWxzZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGlzIE1hbmFnZWRDb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyB0aGUgcGh5c2ljYWwgIiArIAorICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGlzIE1hbmFnZWRDb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyB0aGUgcGh5c2ljYWwgIiArCiAgICAgICAgICAgICAgICAgImNvbm5lY3Rpb24gaXMgbm90IHVzYWJsZS4iKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gd2hlbiBpdHMgY2xvc2UgbWV0aG9kIGlzCiAgICAgICogY2FsbGVkLiBUaGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZSAgaW52YWxpZGF0ZXMgdGhlIGNvbm5lY3Rpb24gaGFuZGxlCiAgICAgICogYW5kIHNlbmRzIGEgQ09OTkVDVElPTl9DTE9TRUQgZXZlbnQgdG8gYWxsIHRoZSByZWdpc3RlcmVkIGV2ZW50IGxpc3RlbmVycy4KICAgICAgKgotICAgICAqIEBwYXJhbQllCUV4Y2VwdGlvbiB0aGF0IG1heSBoYXZlIG9jY3VyZWQgd2hpbGUgY2xvc2luZyB0aGUgY29ubmVjdGlvbiBoYW5kbGUKLSAgICAgKiBAcGFyYW0JY29ubkhvbGRlck9iamVjdAk8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0aGF0IGhhcyBiZWVuIGNsb3NlZAotICAgICAqIEB0aHJvd3MJU1FMRXhjZXB0aW9uCWluIGNhc2UgY2xvc2luZyB0aGUgc3FsIGNvbm5lY3Rpb24gZ290IG91dCBvZgotICAgICAqICAgICAgICAgCSAgICAgICAgICAgIAk8Y29kZT5nZXRDb25uZWN0aW9uPC9jb2RlPiBvbiB0aGUgdW5kZXJseWluZyAKLSAgICAgKgkJCQk8Y29kZT5Qb29sZWRDb25uZWN0aW9uPC9jb2RlPiB0aHJvd3MgYW4gZXhjZXB0aW9uCisgICAgICogQHBhcmFtICAgIGUgICAgRXhjZXB0aW9uIHRoYXQgbWF5IGhhdmUgb2NjdXJlZCB3aGlsZSBjbG9zaW5nIHRoZSBjb25uZWN0aW9uIGhhbmRsZQorICAgICAqIEBwYXJhbSAgICBjb25uSG9sZGVyT2JqZWN0ICAgIDxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRoYXQgaGFzIGJlZW4gY2xvc2VkCisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgaW4gY2FzZSBjbG9zaW5nIHRoZSBzcWwgY29ubmVjdGlvbiBnb3Qgb3V0IG9mCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPmdldENvbm5lY3Rpb248L2NvZGU+IG9uIHRoZSB1bmRlcmx5aW5nCisgICAgICogICAgICAgICAgICAgICAgPGNvZGU+UG9vbGVkQ29ubmVjdGlvbjwvY29kZT4gdGhyb3dzIGFuIGV4Y2VwdGlvbgogICAgICAqLwogICAgIHZvaWQgY29ubmVjdGlvbkNsb3NlZChFeGNlcHRpb24gZSwgQ29ubmVjdGlvbkhvbGRlciBjb25uSG9sZGVyT2JqZWN0KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgICAgY29ubkhvbGRlck9iamVjdC5pbnZhbGlkYXRlKCk7Ci0gICAgICAgIAorCiAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOwotICAgICAgICAKKwogICAgICAgICBjZS5zZXRDb25uZWN0aW9uSGFuZGxlKGNvbm5Ib2xkZXJPYmplY3QpOwogICAgICAgICBsaXN0ZW5lci5jb25uZWN0aW9uQ2xvc2VkKGNlKTsKLQkKKwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gd2hlbiBpdCBkZXRlY3RzIGEgY29ubmVjaW9uCiAgICAgICogcmVsYXRlZCBlcnJvci4KICAgICAgKgotICAgICAqIEBwYXJhbQllCUV4Y2VwdGlvbiB0aGF0IGhhcyBvY2N1cnJlZCBkdXJpbmcgYW4gb3BlcmF0aW9uIG9uIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uCi0gICAgICogQHBhcmFtCWNvbm5Ib2xkZXJPYmplY3QJPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdGhhdCBkZXRlY3RlZCB0aGUgcGh5c2ljYWwKLSAgICAgKgkJCQkJY29ubmVjdGlvbiBlcnJvcgorICAgICAqIEBwYXJhbSAgICBlICAgIEV4Y2VwdGlvbiB0aGF0IGhhcyBvY2N1cnJlZCBkdXJpbmcgYW4gb3BlcmF0aW9uIG9uIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uCisgICAgICogQHBhcmFtICAgIGNvbm5Ib2xkZXJPYmplY3QgICAgPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdGhhdCBkZXRlY3RlZCB0aGUgcGh5c2ljYWwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbiBlcnJvcgogICAgICAqLwotICAgIHZvaWQgY29ubmVjdGlvbkVycm9yT2NjdXJyZWQoRXhjZXB0aW9uIGUsIAorICAgIHZvaWQgY29ubmVjdGlvbkVycm9yT2NjdXJyZWQoRXhjZXB0aW9uIGUsCiAgICAgICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbkhvbGRlciBjb25uSG9sZGVyT2JqZWN0KSB7Ci0JICAgIAorCiAgICAgICAgICBDb25uZWN0aW9uRXZlbnRMaXN0ZW5lciBjZWwgPSB0aGlzLmxpc3RlbmVyOwogICAgICAgICAgQ29ubmVjdGlvbkV2ZW50IGNlID0gbnVsbDsKICAgICAgICAgIGNlID0gZSA9PSBudWxsID8gbmV3IENvbm5lY3Rpb25FdmVudCh0aGlzLCBDb25uZWN0aW9uRXZlbnQuQ09OTkVDVElPTl9FUlJPUl9PQ0NVUlJFRCkKICAgICAgICAgICAgICAgICAgICAgOiBuZXcgQ29ubmVjdGlvbkV2ZW50KHRoaXMsIENvbm5lY3Rpb25FdmVudC5DT05ORUNUSU9OX0VSUk9SX09DQ1VSUkVELCBlKTsKICAgICAgICAgIGlmIChjb25uSG9sZGVyT2JqZWN0ICE9IG51bGwpIHsKICAgICAgICAgICAgICBjZS5zZXRDb25uZWN0aW9uSGFuZGxlKGNvbm5Ib2xkZXJPYmplY3QpOwotICAgICAgICAgfSAgICAKKyAgICAgICAgIH0KIAogICAgICAgICAgY2VsLmNvbm5lY3Rpb25FcnJvck9jY3VycmVkKGNlKTsKICAgICAgICAgIGlzVXNhYmxlID0gZmFsc2U7CiAgICAgfQotICAgIAotICAgIAotICAgIAorCisKKwogICAgIC8qKgogICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gb2JqZWN0IHdoZW4gaXRzIHN0YXJ0IG1ldGhvZAogICAgICAqIGhhcyBiZWVuIGludm9rZWQuCkBAIC02MDYsNyArNjA2LDcgQEAKICAgICAgICAgICAgIGNvbm5lY3Rpb25FcnJvck9jY3VycmVkKGUsIG51bGwpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBvYmplY3Qgd2hlbiBpdHMgZW5kIG1ldGhvZAogICAgICAqIGhhcyBiZWVuIGludm9rZWQuCkBAIC02MjAsNyArNjIwLDcgQEAKICAgICAgICAgICAgIGNvbm5lY3Rpb25FcnJvck9jY3VycmVkKGUsIG51bGwpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IGEgQ29ubmVjdGlvbiBIYW5kbGUgdG8gY2hlY2sgaWYgaXQgaXMKICAgICAgKiB0aGUgYWN0aXZlIENvbm5lY3Rpb24gSGFuZGxlLiBJZiBpdCBpcyBub3QgdGhlIGFjdGl2ZSBDb25uZWN0aW9uCkBAIC02MjksMjQgKzYyOSwyNCBAQAogICAgICAqIENvbm5lY3Rpb24gSGFuZGxlIG9iamVjdCB0byB0aGlzIG9iamVjdCBpZiB0aGUgYWN0aXZlIENvbm5lY3Rpb24KICAgICAgKiBIYW5kbGUgaXMgbnVsbC4KICAgICAgKgotICAgICAqIEBwYXJhbQljaAk8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0aGF0IHJlcXVlc3RzIHRoaXMKLSAgICAgKgkJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZSB3aGV0aGVyCi0gICAgICoJCQlpdCBjYW4gYmUgYWN0aXZlIG9yIG5vdAotICAgICAqIEB0aHJvd3MJU1FMRXhjZXB0aW9uCWluIGNhc2UgdGhlIHBoeXNpY2FsIGlzIG5vdCB2YWxpZCBvcgotICAgICAqCQkJCXRoZXJlIGlzIGFscmVhZHkgYW4gYWN0aXZlIGNvbm5lY3Rpb24gaGFuZGxlCisgICAgICogQHBhcmFtICAgIGNoICAgIDxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRoYXQgcmVxdWVzdHMgdGhpcworICAgICAqICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlIHdoZXRoZXIKKyAgICAgKiAgICAgICAgICAgIGl0IGNhbiBiZSBhY3RpdmUgb3Igbm90CisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgaW4gY2FzZSB0aGUgcGh5c2ljYWwgaXMgbm90IHZhbGlkIG9yCisgICAgICogICAgICAgICAgICAgICAgdGhlcmUgaXMgYWxyZWFkeSBhbiBhY3RpdmUgY29ubmVjdGlvbiBoYW5kbGUKICAgICAgKi8KLSAgICAgCisKICAgICB2b2lkIGNoZWNrSWZBY3RpdmUoQ29ubmVjdGlvbkhvbGRlciBjaCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGlzRGVzdHJveWVkID09IHRydWUgfHwgaXNVc2FibGUgPT0gZmFsc2UpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24oIlRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB1c2FibGUiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZihhY3RpdmVDb25uZWN0aW9uSGFuZGxlID09IG51bGwpIHsKICAgICAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBjaDsKICAgICAgICAgICAgIGNoLnNldEFjdGl2ZSh0cnVlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZihhY3RpdmVDb25uZWN0aW9uSGFuZGxlICE9IGNoKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBoYW5kbGUgY2Fubm90IGJlIHVzZWQgYXMgYW5vdGhlciBjb25uZWN0aW9uIGlzIGN1cnJlbnRseSBhY3RpdmUiKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEuamF2YQppbmRleCAyMGYwM2FhLi5mNjUwZDQxIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEuamF2YQpAQCAtMjUsOCArMjUsOCBAQAogLyoqCiAgKiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA4LzAzCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wOC8wMworICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogcHVibGljIGNsYXNzIE1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEgaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhIHsKIApAQCAtNDEsODEgKzQxLDgxIEBACiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0b3IgZm9yIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGE8L2NvZGU+CiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWMJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+Ci0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4JaWYgZ2V0dGluZyB0aGUgRGF0YWJhc2VNZXRhRGF0YSBvYmplY3QgZmFpbHMKKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4gICAgaWYgZ2V0dGluZyB0aGUgRGF0YWJhc2VNZXRhRGF0YSBvYmplY3QgZmFpbHMKICAgICAgKi8KICAgICBwdWJsaWMgTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YShNYW5hZ2VkQ29ubmVjdGlvbiBtYykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHRoaXMubWMgPSBtYzsKICAgICAgICAgICAgIGRtZCA9IG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKS5nZXRNZXRhRGF0YSgpOwogICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX21kIik7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX21kIik7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBwcm9kdWN0IG5hbWUgb2YgdGhlIHVuZGVybHlpbmcgRUlTIGluc3RhbmNlIGNvbm5lY3RlZAogICAgICAqIHRocm91Z2ggdGhlIE1hbmFnZWRDb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybglQcm9kdWN0IG5hbWUgb2YgdGhlIEVJUyBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBQcm9kdWN0IG5hbWUgb2YgdGhlIEVJUyBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRFSVNQcm9kdWN0TmFtZSgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXR1cm4gZG1kLmdldERhdGFiYXNlUHJvZHVjdE5hbWUoKTsKICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19laXNfcHJvZG5hbWUiLCBzcWxlKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZWlzX3Byb2RuYW1lIiwgc3FsZSk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBwcm9kdWN0IHZlcnNpb24gb2YgdGhlIHVuZGVybHlpbmcgRUlTIGluc3RhbmNlIGNvbm5lY3RlZAogICAgICAqIHRocm91Z2ggdGhlIE1hbmFnZWRDb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybglQcm9kdWN0IHZlcnNpb24gb2YgdGhlIEVJUyBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBQcm9kdWN0IHZlcnNpb24gb2YgdGhlIEVJUyBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRFSVNQcm9kdWN0VmVyc2lvbigpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXR1cm4gZG1kLmdldERhdGFiYXNlUHJvZHVjdFZlcnNpb24oKTsKICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19laXNfcHJvZHZlcnMiLCBzcWxlKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZWlzX3Byb2R2ZXJzIiwgc3FsZSk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCksIHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgbWF4aW11bSBsaW1pdCBvbiBudW1iZXIgb2YgYWN0aXZlIGNvbmN1cnJlbnQgY29ubmVjdGlvbnMKICAgICAgKiB0aGF0IGFuIEVJUyBpbnN0YW5jZSBjYW4gc3VwcG9ydCBhY3Jvc3MgY2xpZW50IHByb2Nlc3Nlcy4KICAgICAgKgotICAgICAqIEByZXR1cm4JTWF4aW11bSBsaW1pdCBmb3IgbnVtYmVyIG9mIGFjdGl2ZSBjb25jdXJyZW50IGNvbm5lY3Rpb25zCi0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIE1heGltdW0gbGltaXQgZm9yIG51bWJlciBvZiBhY3RpdmUgY29uY3VycmVudCBjb25uZWN0aW9ucworICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIGludCBnZXRNYXhDb25uZWN0aW9ucygpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXR1cm4gZG1kLmdldE1heENvbm5lY3Rpb25zKCk7CiAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZWlzX21heGNvbm4iKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZWlzX21heGNvbm4iKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIG5hbWUgb2YgdGhlIHVzZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBNYW5hZ2VkQ29ubmVjdGlvbiBpbnN0YW5jZS4gVGhlIG5hbWUKICAgICAgKiBjb3JyZXNwb25kcyB0byB0aGUgcmVzb3VyY2UgcHJpbmNpcGFsIHVuZGVyIHdob3NlIHdob3NlIHNlY3VyaXR5IGNvbnRleHQsIGEgY29ubmVjdGlvbgogICAgICAqIHRvIHRoZSBFSVMgaW5zdGFuY2UgaGFzIGJlZW4gZXN0YWJsaXNoZWQuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCW5hbWUgb2YgdGhlIHVzZXIKLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgbmFtZSBvZiB0aGUgdXNlcgorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRVc2VyTmFtZSgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGpha2FydGEucmVzb3VyY2Uuc3BpLnNlY3VyaXR5LlBhc3N3b3JkQ3JlZGVudGlhbCBwYyA9IG1jLmdldFBhc3N3b3JkQ3JlZGVudGlhbCgpOwogICAgICAgICBpZihwYyAhPSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm4gcGMuZ2V0VXNlck5hbWUoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXR1cm4gbWMuZ2V0TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KCkuZ2V0VXNlcigpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvWEFSZXNvdXJjZUltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvWEFSZXNvdXJjZUltcGwuamF2YQppbmRleCBkYWQxZDc3Li40ODJmMzMyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL1hBUmVzb3VyY2VJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9YQVJlc291cmNlSW1wbC5qYXZhCkBAIC0yNCwxNDggKzI0LDE0OCBAQAogLyoqCiAgKiA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiB3cmFwcGVyIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDgvMjMKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA4LzIzCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiBwdWJsaWMgY2xhc3MgWEFSZXNvdXJjZUltcGwgaW1wbGVtZW50cyBYQVJlc291cmNlIHsKIAogICAgIFhBUmVzb3VyY2UgeGFyOwogICAgIE1hbmFnZWRDb25uZWN0aW9uIG1jOwotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0b3IgZm9yIFhBUmVzb3VyY2VJbXBsCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGFyCTxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+Ci0gICAgICogQHBhcmFtCW1jCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB4YXIgICAgPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFhBUmVzb3VyY2VJbXBsKFhBUmVzb3VyY2UgeGFyLCBNYW5hZ2VkQ29ubmVjdGlvbiBtYykgewogICAgICAgICB0aGlzLnhhciA9IHhhcjsKICAgICAgICAgdGhpcy5tYyA9IG1jOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbW1pdCB0aGUgZ2xvYmFsIHRyYW5zYWN0aW9uIHNwZWNpZmllZCBieSB4aWQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGlkCUEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKLSAgICAgKiBAcGFyYW0Jb25lUGhhc2UJSWYgdHJ1ZSwgdGhlIHJlc291cmNlIG1hbmFnZXIgc2hvdWxkIHVzZSBhIG9uZS1waGFzZSBjb21taXQgCi0gICAgICogICAgICAgCSAgICAgICAgCXByb3RvY29sIHRvIGNvbW1pdCB0aGUgd29yayBkb25lIG9uIGJlaGFsZiBvZiB4aWQuCisgICAgICogQHBhcmFtICAgIHhpZCAgICBBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCisgICAgICogQHBhcmFtICAgIG9uZVBoYXNlICAgIElmIHRydWUsIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHNob3VsZCB1c2UgYSBvbmUtcGhhc2UgY29tbWl0CisgICAgICogICAgICAgICAgICAgICAgICAgICAgIHByb3RvY29sIHRvIGNvbW1pdCB0aGUgd29yayBkb25lIG9uIGJlaGFsZiBvZiB4aWQuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgY29tbWl0KFhpZCB4aWQsIGJvb2xlYW4gb25lUGhhc2UpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIC8vdGhlIG1jLnRyYW5zYWN0aW9uQ29tcGxldGVkIGNhbGwgaGFzIGNvbWUgaGVyZSBiZWNhc3VlCi0JLy90aGUgdHJhbnNhY3Rpb24gKmFjdHVhbGx5KiBjb21wbGV0ZXMgYWZ0ZXIgdGhlIGZsb3cKLQkvL3JlYWNoZXMgaGVyZS4gdGhlIGVuZCgpIG1ldGhvZCBtaWdodCBub3QgcmVhbGx5IHNpZ25hbAotCS8vY29tcGxldGlvbiBvZiB0cmFuc2FjdGlvbiBpbiBjYXNlIHRoZSB0cmFuc2FjdGlvbiBpcwotCS8vc3VzcGVuZGVkLiBJbiBjYXNlIG9mIHRyYW5zYWN0aW9uIHN1c3BlbnNpb24sIHRoZSBlbmQKLQkvL21ldGhvZCBpcyBzdGlsbCBjYWxsZWQgYnkgdGhlIHRyYW5zYWN0aW9uIG1hbmFnZXIKLQltYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOworICAgIC8vdGhlIHRyYW5zYWN0aW9uICphY3R1YWxseSogY29tcGxldGVzIGFmdGVyIHRoZSBmbG93CisgICAgLy9yZWFjaGVzIGhlcmUuIHRoZSBlbmQoKSBtZXRob2QgbWlnaHQgbm90IHJlYWxseSBzaWduYWwKKyAgICAvL2NvbXBsZXRpb24gb2YgdHJhbnNhY3Rpb24gaW4gY2FzZSB0aGUgdHJhbnNhY3Rpb24gaXMKKyAgICAvL3N1c3BlbmRlZC4gSW4gY2FzZSBvZiB0cmFuc2FjdGlvbiBzdXNwZW5zaW9uLCB0aGUgZW5kCisgICAgLy9tZXRob2QgaXMgc3RpbGwgY2FsbGVkIGJ5IHRoZSB0cmFuc2FjdGlvbiBtYW5hZ2VyCisgICAgbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKICAgICAgICAgeGFyLmNvbW1pdCh4aWQsIG9uZVBoYXNlKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBFbmRzIHRoZSB3b3JrIHBlcmZvcm1lZCBvbiBiZWhhbGYgb2YgYSB0cmFuc2FjdGlvbiBicmFuY2guCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGlkCUEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIgdGhhdCBpcyB0aGUgc2FtZSBhcyB3aGF0IAotICAgICAqCQkJd2FzIHVzZWQgcHJldmlvdXNseSBpbiB0aGUgc3RhcnQgbWV0aG9kLgotICAgICAqIEBwYXJhbQlmbGFncwlPbmUgb2YgVE1TVUNDRVNTLCBUTUZBSUwsIG9yIFRNU1VTUEVORAorICAgICAqIEBwYXJhbSAgICB4aWQgICAgQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllciB0aGF0IGlzIHRoZSBzYW1lIGFzIHdoYXQKKyAgICAgKiAgICAgICAgICAgIHdhcyB1c2VkIHByZXZpb3VzbHkgaW4gdGhlIHN0YXJ0IG1ldGhvZC4KKyAgICAgKiBAcGFyYW0gICAgZmxhZ3MgICAgT25lIG9mIFRNU1VDQ0VTUywgVE1GQUlMLCBvciBUTVNVU1BFTkQKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlbmQoWGlkIHhpZCwgaW50IGZsYWdzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICB4YXIuZW5kKHhpZCwgZmxhZ3MpOwogICAgICAgICAvL0dKQ0lOVAotCS8vbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKKyAgICAvL21jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGVsbCB0aGUgcmVzb3VyY2UgbWFuYWdlciB0byBmb3JnZXQgYWJvdXQgYSBoZXVyaXN0aWNhbGx5IGNvbXBsZXRlZCB0cmFuc2FjdGlvbiBicmFuY2guCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGlkCUEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKKyAgICAgKiBAcGFyYW0gICAgeGlkICAgIEEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBmb3JnZXQoWGlkIHhpZCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgeGFyLmZvcmdldCh4aWQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIE9idGFpbiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIHNldCBmb3IgdGhpcyAKKyAgICAgKiBPYnRhaW4gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBzZXQgZm9yIHRoaXMKICAgICAgKiA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JdGhlIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaW4gc2Vjb25kcworICAgICAqIEByZXR1cm4gICAgdGhlIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaW4gc2Vjb25kcwogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0VHJhbnNhY3Rpb25UaW1lb3V0KCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIHhhci5nZXRUcmFuc2FjdGlvblRpbWVvdXQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSByZXNvdXJjZSBtYW5hZ2VyIGluc3RhbmNlIAotICAgICAqIHJlcHJlc2VudGVkIGJ5IHRoZSB0YXJnZXQgb2JqZWN0IGlzIHRoZSBzYW1lIGFzIHRoZSByZXNvdWNlIG1hbmFnZXIgCisgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIGRldGVybWluZSBpZiB0aGUgcmVzb3VyY2UgbWFuYWdlciBpbnN0YW5jZQorICAgICAqIHJlcHJlc2VudGVkIGJ5IHRoZSB0YXJnZXQgb2JqZWN0IGlzIHRoZSBzYW1lIGFzIHRoZSByZXNvdWNlIG1hbmFnZXIKICAgICAgKiBpbnN0YW5jZSByZXByZXNlbnRlZCBieSB0aGUgcGFyYW1ldGVyIHhhcmVzLgogICAgICAqCi0gICAgICogQHBhcmFtCXhhcmVzCUFuIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IG9iamVjdCB3aG9zZSByZXNvdXJjZSBtYW5hZ2VyIAotICAgICAqIAkJCWluc3RhbmNlIGlzIHRvIGJlIGNvbXBhcmVkIHdpdGggdGhlIHJlc291cmNlCi0gICAgICogQHJldHVybgl0cnVlIGlmIGl0J3MgdGhlIHNhbWUgUk0gaW5zdGFuY2U7IG90aGVyd2lzZSBmYWxzZS4KKyAgICAgKiBAcGFyYW0gICAgeGFyZXMgICAgQW4gPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gb2JqZWN0IHdob3NlIHJlc291cmNlIG1hbmFnZXIKKyAgICAgKiAgICAgICAgICAgICBpbnN0YW5jZSBpcyB0byBiZSBjb21wYXJlZCB3aXRoIHRoZSByZXNvdXJjZQorICAgICAqIEByZXR1cm4gICAgdHJ1ZSBpZiBpdCdzIHRoZSBzYW1lIFJNIGluc3RhbmNlOyBvdGhlcndpc2UgZmFsc2UuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gaXNTYW1lUk0oWEFSZXNvdXJjZSB4YXJlcykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIHhhci5pc1NhbWVSTSh4YXJlcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogQXNrIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHRvIHByZXBhcmUgZm9yIGEgdHJhbnNhY3Rpb24gY29tbWl0IAorICAgICAqIEFzayB0aGUgcmVzb3VyY2UgbWFuYWdlciB0byBwcmVwYXJlIGZvciBhIHRyYW5zYWN0aW9uIGNvbW1pdAogICAgICAqIG9mIHRoZSB0cmFuc2FjdGlvbiBzcGVjaWZpZWQgaW4geGlkLgogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCi0gICAgICogQHJldHVybglBIHZhbHVlIGluZGljYXRpbmcgdGhlIHJlc291cmNlIG1hbmFnZXIncyB2b3RlIG9uIHRoZSAKLSAgICAgKgkJb3V0Y29tZSBvZiB0aGUgdHJhbnNhY3Rpb24uIFRoZSBwb3NzaWJsZSB2YWx1ZXMKLSAgICAgKgkJYXJlOiBYQV9SRE9OTFkgb3IgWEFfT0suIElmIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHdhbnRzIAotICAgICAqCQl0byByb2xsIGJhY2sgdGhlIHRyYW5zYWN0aW9uLCBpdCBzaG91bGQgZG8gc28KLSAgICAgKgkJYnkgcmFpc2luZyBhbiBhcHByb3ByaWF0ZSA8Y29kZT5YQUV4Y2VwdGlvbjwvY29kZT4gaW4gdGhlIHByZXBhcmUgbWV0aG9kLgorICAgICAqIEBwYXJhbSAgICB4aWQgICAgQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgorICAgICAqIEByZXR1cm4gICAgQSB2YWx1ZSBpbmRpY2F0aW5nIHRoZSByZXNvdXJjZSBtYW5hZ2VyJ3Mgdm90ZSBvbiB0aGUKKyAgICAgKiAgICAgICAgb3V0Y29tZSBvZiB0aGUgdHJhbnNhY3Rpb24uIFRoZSBwb3NzaWJsZSB2YWx1ZXMKKyAgICAgKiAgICAgICAgYXJlOiBYQV9SRE9OTFkgb3IgWEFfT0suIElmIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHdhbnRzCisgICAgICogICAgICAgIHRvIHJvbGwgYmFjayB0aGUgdHJhbnNhY3Rpb24sIGl0IHNob3VsZCBkbyBzbworICAgICAqICAgICAgICBieSByYWlzaW5nIGFuIGFwcHJvcHJpYXRlIDxjb2RlPlhBRXhjZXB0aW9uPC9jb2RlPiBpbiB0aGUgcHJlcGFyZSBtZXRob2QuCiAgICAgICovCiAgICAgcHVibGljIGludCBwcmVwYXJlKFhpZCB4aWQpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiB4YXIucHJlcGFyZSh4aWQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIE9idGFpbiBhIGxpc3Qgb2YgcHJlcGFyZWQgdHJhbnNhY3Rpb24gYnJhbmNoZXMgZnJvbSBhIHJlc291cmNlIG1hbmFnZXIuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZmxhZwlPbmUgb2YgVE1TVEFSVFJTQ0FOLCBUTUVORFJTQ0FOLCBUTU5PRkxBR1MuIFRNTk9GTEFHUyAKLSAgICAgKgkJCW11c3QgYmUgdXNlZCB3aGVuIG5vIG90aGVyIGZsYWdzIGFyZSBzZXQgaW4gZmxhZ3MuCi0gICAgICogQHJldHVybglUaGUgcmVzb3VyY2UgbWFuYWdlciByZXR1cm5zIHplcm8gb3IgbW9yZSBYSURzIGZvciB0aGUgdHJhbnNhY3Rpb24gCi0gICAgICoJCWJyYW5jaGVzIHRoYXQgYXJlIGN1cnJlbnRseSBpbiBhIHByZXBhcmVkIG9yIGhldXJpc3RpY2FsbHkgCi0gICAgICoJCWNvbXBsZXRlZCBzdGF0ZS4gSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgb3BlcmF0aW9uLCB0aGUgcmVzb3VyY2UKLSAgICAgKgkJbWFuYWdlciBzaG91bGQgdGhyb3cgdGhlIGFwcHJvcHJpYXRlIDxjb2RlPlhBRXhjZXB0aW9uPC9jb2RlPi4KKyAgICAgKiBAcGFyYW0gICAgZmxhZyAgICBPbmUgb2YgVE1TVEFSVFJTQ0FOLCBUTUVORFJTQ0FOLCBUTU5PRkxBR1MuIFRNTk9GTEFHUworICAgICAqICAgICAgICAgICAgbXVzdCBiZSB1c2VkIHdoZW4gbm8gb3RoZXIgZmxhZ3MgYXJlIHNldCBpbiBmbGFncy4KKyAgICAgKiBAcmV0dXJuICAgIFRoZSByZXNvdXJjZSBtYW5hZ2VyIHJldHVybnMgemVybyBvciBtb3JlIFhJRHMgZm9yIHRoZSB0cmFuc2FjdGlvbgorICAgICAqICAgICAgICBicmFuY2hlcyB0aGF0IGFyZSBjdXJyZW50bHkgaW4gYSBwcmVwYXJlZCBvciBoZXVyaXN0aWNhbGx5CisgICAgICogICAgICAgIGNvbXBsZXRlZCBzdGF0ZS4gSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgb3BlcmF0aW9uLCB0aGUgcmVzb3VyY2UKKyAgICAgKiAgICAgICAgbWFuYWdlciBzaG91bGQgdGhyb3cgdGhlIGFwcHJvcHJpYXRlIDxjb2RlPlhBRXhjZXB0aW9uPC9jb2RlPi4KICAgICAgKi8KICAgICBwdWJsaWMgWGlkW10gcmVjb3ZlcihpbnQgZmxhZykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIHhhci5yZWNvdmVyKGZsYWcpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEluZm9ybSB0aGUgcmVzb3VyY2UgbWFuYWdlciB0byByb2xsIGJhY2sgd29yayBkb25lIG9uIGJlaGFsZiBvZiBhIHRyYW5zYWN0aW9uIGJyYW5jaAogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCisgICAgICogQHBhcmFtICAgIHhpZCAgICBBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcm9sbGJhY2soWGlkIHhpZCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgLy90aGUgbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQgY2FsbCBoYXMgY29tZSBoZXJlIGJlY2FzdWUKLQkvL3RoZSB0cmFuc2FjdGlvbiAqYWN0dWFsbHkqIGNvbXBsZXRlcyBhZnRlciB0aGUgZmxvdwotCS8vcmVhY2hlcyBoZXJlLiB0aGUgZW5kKCkgbWV0aG9kIG1pZ2h0IG5vdCByZWFsbHkgc2lnbmFsCi0JLy9jb21wbGV0aW9uIG9mIHRyYW5zYWN0aW9uIGluIGNhc2UgdGhlIHRyYW5zYWN0aW9uIGlzCi0JLy9zdXNwZW5kZWQuIEluIGNhc2Ugb2YgdHJhbnNhY3Rpb24gc3VzcGVuc2lvbiwgdGhlIGVuZAotCS8vbWV0aG9kIGlzIHN0aWxsIGNhbGxlZCBieSB0aGUgdHJhbnNhY3Rpb24gbWFuYWdlcgorICAgIC8vdGhlIHRyYW5zYWN0aW9uICphY3R1YWxseSogY29tcGxldGVzIGFmdGVyIHRoZSBmbG93CisgICAgLy9yZWFjaGVzIGhlcmUuIHRoZSBlbmQoKSBtZXRob2QgbWlnaHQgbm90IHJlYWxseSBzaWduYWwKKyAgICAvL2NvbXBsZXRpb24gb2YgdHJhbnNhY3Rpb24gaW4gY2FzZSB0aGUgdHJhbnNhY3Rpb24gaXMKKyAgICAvL3N1c3BlbmRlZC4gSW4gY2FzZSBvZiB0cmFuc2FjdGlvbiBzdXNwZW5zaW9uLCB0aGUgZW5kCisgICAgLy9tZXRob2QgaXMgc3RpbGwgY2FsbGVkIGJ5IHRoZSB0cmFuc2FjdGlvbiBtYW5hZ2VyCiAgICAgICAgIG1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiAgICAgICAgIHhhci5yb2xsYmFjayh4aWQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIGZvciB0aGlzIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCXNlY29uZHMJdGhlIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaW4gc2Vjb25kcy4KLSAgICAgKiBAcmV0dXJuCXRydWUgaWYgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBpcyBzZXQgc3VjY2Vzc2Z1bGx5OyBvdGhlcndpc2UgZmFsc2UuCisgICAgICogQHBhcmFtICAgIHNlY29uZHMgICAgdGhlIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaW4gc2Vjb25kcy4KKyAgICAgKiBAcmV0dXJuICAgIHRydWUgaWYgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBpcyBzZXQgc3VjY2Vzc2Z1bGx5OyBvdGhlcndpc2UgZmFsc2UuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gc2V0VHJhbnNhY3Rpb25UaW1lb3V0KGludCBzZWNvbmRzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICByZXR1cm4geGFyLnNldFRyYW5zYWN0aW9uVGltZW91dChzZWNvbmRzKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTdGFydCB3b3JrIG9uIGJlaGFsZiBvZiBhIHRyYW5zYWN0aW9uIGJyYW5jaCBzcGVjaWZpZWQgaW4geGlkLgogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVzb3VyY2UKLSAgICAgKiBAcmV0dXJuCWZsYWdzCU9uZSBvZiBUTU5PRkxBR1MsIFRNSk9JTiwgb3IgVE1SRVNVTUUKKyAgICAgKiBAcGFyYW0gICAgeGlkICAgIEEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXNvdXJjZQorICAgICAqIEByZXR1cm4gICAgZmxhZ3MgICAgT25lIG9mIFRNTk9GTEFHUywgVE1KT0lOLCBvciBUTVJFU1VNRQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHN0YXJ0KFhpZCB4aWQsIGludCBmbGFncykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgLy9HSkNJTlQKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9idWlsZC54bWwKaW5kZXggOTY3ODY4Yi4uNjQxMDU1NyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9idWlsZC54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPHByb2plY3QgbmFtZT0iamRiY19jb25uZWN0b3IiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9IiBkZWZhdWx0PSJidWlsZCI+CiAgIDxwcm9wZXJ0eSBuYW1lPSJwa2cuZGlyIiB2YWx1ZT0iY29tL3N1bi9namMvc3BpIi8+Ci0gCisKICAgPHRhcmdldCBuYW1lPSJjbGVhbiI+CiAgICAgPGFudCBhbnRmaWxlPSJidWlsZC54bWwiIGRpcj0iJHtnamMuaG9tZX0vYmluIiB0YXJnZXQ9ImNsZWFuIi8+CiAgIDwvdGFyZ2V0PgpAQCAtMzcsNSArMzcsNSBAQAogCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQxNCIgZGVwZW5kcz0iY29tcGlsZTE0Ii8+CiAKLQk8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJidWlsZDEzLCBidWlsZDE0Ii8+CisgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iYnVpbGQxMywgYnVpbGQxNCIvPgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvTWV0aG9kRXhlY3V0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL01ldGhvZEV4ZWN1dG9yLmphdmEKaW5kZXggY2UzMjFhZi4uOWU3ZjI1MyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvTWV0aG9kRXhlY3V0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9NZXRob2RFeGVjdXRvci5qYXZhCkBAIC0yNiw4ICsyNiw4IEBACiAvKioKICAqIEV4ZWN1dGUgdGhlIG1ldGhvZHMgYmFzZWQgb24gdGhlIHBhcmFtZXRlcnMuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8yMwotICogQGF1dGhvcglCaW5vZCBQLkcKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMjMKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCiAgKi8KIHB1YmxpYyBjbGFzcyBNZXRob2RFeGVjdXRvciBpbXBsZW1lbnRzIGphdmEuaW8uU2VyaWFsaXphYmxlewogCkBAIC0zOSwxMzAgKzM5LDEzMCBAQAogICAgIC8qKgogICAgICAqIEV4Y2V1dGUgYSBzaW1wbGUgc2V0IE1ldGhvZC4KICAgICAgKgotICAgICAqIEBwYXJhbQl2YWx1ZQlWYWx1ZSB0byBiZSBzZXQuCi0gICAgICogQHBhcmFtCW1ldGhvZAk8Y29kZT5NZXRob2Q8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAcGFyYW0Jb2JqCU9iamVjdCBvbiB3aGljaCB0aGUgbWV0aG9kIHRvIGJlIGV4ZWN1dGVkLgorICAgICAqIEBwYXJhbSAgICB2YWx1ZSAgICBWYWx1ZSB0byBiZSBzZXQuCisgICAgICogQHBhcmFtICAgIG1ldGhvZCAgICA8Y29kZT5NZXRob2Q8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgb2JqICAgIE9iamVjdCBvbiB3aGljaCB0aGUgbWV0aG9kIHRvIGJlIGV4ZWN1dGVkLgogICAgICAqIEB0aHJvd3MgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiwgaW4gY2FzZSBvZiB0aGUgbWlzbWF0Y2ggb2YgcGFyYW1ldGVyIHZhbHVlcyBvcgotICAgICAqCQlhIHNlY3VyaXR5IHZpb2xhdGlvbi4gICAgIAorICAgICAqICAgICAgICBhIHNlY3VyaXR5IHZpb2xhdGlvbi4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBydW5KYXZhQmVhbk1ldGhvZChTdHJpbmcgdmFsdWUsIE1ldGhvZCBtZXRob2QsIE9iamVjdCBvYmopIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKLSAgICAJaWYgKHZhbHVlPT1udWxsIHx8IHZhbHVlLnRyaW0oKS5lcXVhbHMoIiIpKSB7Ci0gICAgCSAgICByZXR1cm47Ci0gICAgCX0KLSAgICAJdHJ5IHsKLSAgICAJICAgIENsYXNzW10gcGFyYW1ldGVycyA9IG1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpOwotICAgIAkgICAgaWYgKCBwYXJhbWV0ZXJzLmxlbmd0aCA9PSAxKSB7Ci0gICAgCSAgICAgICAgT2JqZWN0W10gdmFsdWVzID0gbmV3IE9iamVjdFsxXTsKLSAgICAJICAgIAl2YWx1ZXNbMF0gPSBjb252ZXJ0VHlwZShwYXJhbWV0ZXJzWzBdLCB2YWx1ZSk7Ci0gICAgCSAgICAJbWV0aG9kLmludm9rZShvYmosIHZhbHVlcyk7Ci0gICAgCSAgICB9Ci0gICAgCX0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gaWFlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGlhZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7Ci0gICAgCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFyZ3VtZW50cyBhcmUgd3JvbmcgZm9yIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsgICAgCQotICAgIAl9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGl0ZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpdGUpOwotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOyAgICAJCi0gICAgCX0KKyAgICAgICAgaWYgKHZhbHVlPT1udWxsIHx8IHZhbHVlLnRyaW0oKS5lcXVhbHMoIiIpKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIENsYXNzW10gcGFyYW1ldGVycyA9IG1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpOworICAgICAgICAgICAgaWYgKCBwYXJhbWV0ZXJzLmxlbmd0aCA9PSAxKSB7CisgICAgICAgICAgICAgICAgT2JqZWN0W10gdmFsdWVzID0gbmV3IE9iamVjdFsxXTsKKyAgICAgICAgICAgICAgICB2YWx1ZXNbMF0gPSBjb252ZXJ0VHlwZShwYXJhbWV0ZXJzWzBdLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgbWV0aG9kLmludm9rZShvYmosIHZhbHVlcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gaWFlKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGlhZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFyZ3VtZW50cyBhcmUgd3JvbmcgZm9yIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKKyAgICAgICAgfSBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBpdGUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaXRlKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIEV4ZWN1dGVzIHRoZSBtZXRob2QuICAgICAKKyAgICAgKiBFeGVjdXRlcyB0aGUgbWV0aG9kLgogICAgICAqCi0gICAgICogQHBhcmFtCW1ldGhvZCA8Y29kZT5NZXRob2Q8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAcGFyYW0Jb2JqCU9iamVjdCBvbiB3aGljaCB0aGUgbWV0aG9kIHRvIGJlIGV4ZWN1dGVkLgotICAgICAqIEBwYXJhbQl2YWx1ZXMJUGFyYW1ldGVyIHZhbHVlcyBmb3IgZXhlY3V0aW5nIHRoZSBtZXRob2QuCisgICAgICogQHBhcmFtICAgIG1ldGhvZCA8Y29kZT5NZXRob2Q8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgb2JqICAgIE9iamVjdCBvbiB3aGljaCB0aGUgbWV0aG9kIHRvIGJlIGV4ZWN1dGVkLgorICAgICAqIEBwYXJhbSAgICB2YWx1ZXMgICAgUGFyYW1ldGVyIHZhbHVlcyBmb3IgZXhlY3V0aW5nIHRoZSBtZXRob2QuCiAgICAgICogQHRocm93cyAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+LCBpbiBjYXNlIG9mIHRoZSBtaXNtYXRjaCBvZiBwYXJhbWV0ZXIgdmFsdWVzIG9yCi0gICAgICoJCWEgc2VjdXJpdHkgdmlvbGF0aW9uLgorICAgICAqICAgICAgICBhIHNlY3VyaXR5IHZpb2xhdGlvbi4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBydW5NZXRob2QoTWV0aG9kIG1ldGhvZCwgT2JqZWN0IG9iaiwgVmVjdG9yIHZhbHVlcykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewotICAgIAl0cnkgewotCSAgICBDbGFzc1tdIHBhcmFtZXRlcnMgPSBtZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKTsKLQkgICAgaWYgKHZhbHVlcy5zaXplKCkgIT0gcGFyYW1ldGVycy5sZW5ndGgpIHsKLQkgICAgICAgIHJldHVybjsKLQkgICAgfQotICAgIAkgICAgT2JqZWN0W10gYWN0dWFsVmFsdWVzID0gbmV3IE9iamVjdFtwYXJhbWV0ZXJzLmxlbmd0aF07Ci0gICAgCSAgICBmb3IgKGludCBpID0wOyBpPHBhcmFtZXRlcnMubGVuZ3RoIDsgaSsrKSB7Ci0gICAgCSAgICAJU3RyaW5nIHZhbCA9IChTdHJpbmcpIHZhbHVlcy5nZXQoaSk7Ci0gICAgCSAgICAJaWYgKHZhbC50cmltKCkuZXF1YWxzKCJOVUxMIikpIHsKLSAgICAJICAgIAkgICAgYWN0dWFsVmFsdWVzW2ldID0gbnVsbDsKLSAgICAJICAgIAl9IGVsc2UgewotICAgIAkgICAgCSAgICBhY3R1YWxWYWx1ZXNbaV0gPSBjb252ZXJ0VHlwZShwYXJhbWV0ZXJzW2ldLCB2YWwpOwotICAgIAkgICAgCX0KLSAgICAJICAgIH0KLSAgICAJICAgIG1ldGhvZC5pbnZva2Uob2JqLCBhY3R1YWxWYWx1ZXMpOwotICAgIAl9Y2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gaWFlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGlhZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7Ci0gICAgCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFyZ3VtZW50cyBhcmUgd3JvbmcgZm9yIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsgICAgCQotICAgIAl9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGl0ZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpdGUpOwotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOyAgICAJCi0gICAgCX0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgQ2xhc3NbXSBwYXJhbWV0ZXJzID0gbWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCk7CisgICAgICAgIGlmICh2YWx1ZXMuc2l6ZSgpICE9IHBhcmFtZXRlcnMubGVuZ3RoKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIE9iamVjdFtdIGFjdHVhbFZhbHVlcyA9IG5ldyBPYmplY3RbcGFyYW1ldGVycy5sZW5ndGhdOworICAgICAgICAgICAgZm9yIChpbnQgaSA9MDsgaTxwYXJhbWV0ZXJzLmxlbmd0aCA7IGkrKykgeworICAgICAgICAgICAgICAgIFN0cmluZyB2YWwgPSAoU3RyaW5nKSB2YWx1ZXMuZ2V0KGkpOworICAgICAgICAgICAgICAgIGlmICh2YWwudHJpbSgpLmVxdWFscygiTlVMTCIpKSB7CisgICAgICAgICAgICAgICAgICAgIGFjdHVhbFZhbHVlc1tpXSA9IG51bGw7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYWN0dWFsVmFsdWVzW2ldID0gY29udmVydFR5cGUocGFyYW1ldGVyc1tpXSwgdmFsKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtZXRob2QuaW52b2tlKG9iaiwgYWN0dWFsVmFsdWVzKTsKKyAgICAgICAgfWNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGlhZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpYWUpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOworICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWUpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBcmd1bWVudHMgYXJlIHdyb25nIGZvciB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7CisgICAgICAgIH0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gaXRlKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGl0ZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb252ZXJ0cyB0aGUgdHlwZSBmcm9tIFN0cmluZyB0byB0aGUgQ2xhc3MgdHlwZS4KICAgICAgKgotICAgICAqIEBwYXJhbQl0eXBlCQlDbGFzcyBuYW1lIHRvIHdoaWNoIHRoZSBjb252ZXJzaW9uIGlzIHJlcXVpcmVkLgotICAgICAqIEBwYXJhbQlwYXJhbWV0ZXIJU3RyaW5nIHZhbHVlIHRvIGJlIGNvbnZlcnRlZC4KLSAgICAgKiBAcmV0dXJuCUNvbnZlcnRlZCB2YWx1ZS4KKyAgICAgKiBAcGFyYW0gICAgdHlwZSAgICAgICAgQ2xhc3MgbmFtZSB0byB3aGljaCB0aGUgY29udmVyc2lvbiBpcyByZXF1aXJlZC4KKyAgICAgKiBAcGFyYW0gICAgcGFyYW1ldGVyICAgIFN0cmluZyB2YWx1ZSB0byBiZSBjb252ZXJ0ZWQuCisgICAgICogQHJldHVybiAgICBDb252ZXJ0ZWQgdmFsdWUuCiAgICAgICogQHRocm93cyAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+LCBpbiBjYXNlIG9mIHRoZSBtaXNtYXRjaCBvZiBwYXJhbWV0ZXIgdmFsdWVzIG9yCi0gICAgICoJCWEgc2VjdXJpdHkgdmlvbGF0aW9uLiAgICAgCisgICAgICogICAgICAgIGEgc2VjdXJpdHkgdmlvbGF0aW9uLgogICAgICAqLwogICAgIHByaXZhdGUgT2JqZWN0IGNvbnZlcnRUeXBlKENsYXNzIHR5cGUsIFN0cmluZyBwYXJhbWV0ZXIpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKLSAgICAJdHJ5IHsKLSAgICAJICAgIFN0cmluZyB0eXBlTmFtZSA9IHR5cGUuZ2V0TmFtZSgpOwotICAgIAkgICAgaWYgKCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5TdHJpbmciKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5PYmplY3QiKSkgewotICAgIAkgICAgCXJldHVybiBwYXJhbWV0ZXI7Ci0gICAgCSAgICB9Ci0gICAgCQotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiaW50IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuSW50ZWdlciIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBJbnRlZ2VyKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9Ci0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoInNob3J0IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuU2hvcnQiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgU2hvcnQocGFyYW1ldGVyKTsKLSAgICAJICAgIH0gICAgCSAgICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiYnl0ZSIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkJ5dGUiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgQnl0ZShwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgICAJICAgICAgICAJICAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJsb25nIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuTG9uZyIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBMb25nKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgIAkgICAgICAgIAkgICAgICAgCSAgICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiZmxvYXQiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5GbG9hdCIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBGbG9hdChwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJkb3VibGUiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5Eb3VibGUiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgRG91YmxlKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgIAkgICAgICAgIAkgICAgICAgCSAgICAgCSAgICAgICAgCSAgICAgICAJICAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJqYXZhLm1hdGguQmlnRGVjaW1hbCIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBqYXZhLm1hdGguQmlnRGVjaW1hbChwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgICAJICAgICAgICAJICAgICAgIAkgICAgCi0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImphdmEubWF0aC5CaWdJbnRlZ2VyIikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IGphdmEubWF0aC5CaWdJbnRlZ2VyKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgIAkgICAgICAgIAkgICAgICAgCSAgICAgICAgCSAgICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiYm9vbGVhbiIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkJvb2xlYW4iKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgQm9vbGVhbihwYXJhbWV0ZXIpOwotICAgICAgICAgICAgfQkJCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBTdHJpbmcgdHlwZU5hbWUgPSB0eXBlLmdldE5hbWUoKTsKKyAgICAgICAgICAgIGlmICggdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuU3RyaW5nIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuT2JqZWN0IikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyYW1ldGVyOworICAgICAgICAgICAgfQogCi0gICAgCSAgICByZXR1cm4gcGFyYW1ldGVyOwotICAgIAl9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX25mZSIsIHBhcmFtZXRlcik7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24ocGFyYW1ldGVyKyI6IE5vdCBhIHZhbGlkIHZhbHVlIGZvciB0aGlzIG1ldGhvZCAiKTsKLSAgICAJfQorICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiaW50IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuSW50ZWdlciIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnRlZ2VyKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoInNob3J0IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuU2hvcnQiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2hvcnQocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiYnl0ZSIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkJ5dGUiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQnl0ZShwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJsb25nIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuTG9uZyIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBMb25nKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImZsb2F0IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuRmxvYXQiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRmxvYXQocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiZG91YmxlIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuRG91YmxlIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERvdWJsZShwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJqYXZhLm1hdGguQmlnRGVjaW1hbCIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBqYXZhLm1hdGguQmlnRGVjaW1hbChwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJqYXZhLm1hdGguQmlnSW50ZWdlciIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBqYXZhLm1hdGguQmlnSW50ZWdlcihwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJib29sZWFuIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuQm9vbGVhbiIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCb29sZWFuKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBwYXJhbWV0ZXI7CisgICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfbmZlIiwgcGFyYW1ldGVyKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihwYXJhbWV0ZXIrIjogTm90IGEgdmFsaWQgdmFsdWUgZm9yIHRoaXMgbWV0aG9kICIpOworICAgICAgICB9CiAgICAgfQotICAgIAorCiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL1NlY3VyaXR5VXRpbHMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL1NlY3VyaXR5VXRpbHMuamF2YQppbmRleCBmYzE0OWJmLi5mMDA4ZTdmIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9TZWN1cml0eVV0aWxzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvU2VjdXJpdHlVdGlscy5qYXZhCkBAIC0yOSwzNiArMjksMzYgQEAKIC8qKgogICogU2VjdXJpdHlVdGlscyBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzIyCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8yMgorICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogcHVibGljIGNsYXNzIFNlY3VyaXR5VXRpbHMgewogCiAgICAgLyoqCi0gICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QsIGdpdmVuIAotICAgICAqIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LCBzdWJqZWN0IGFuZCB0aGUgCi0gICAgICogPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPi4gSXQgZmlyc3QgY2hlY2tzIGlmIHRoZSAKLSAgICAgKiA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IGlzIG51bGwgb3Igbm90LiBJZiBpdCBpcyBub3QgbnVsbCwgCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QsIGdpdmVuCisgICAgICogdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4sIHN1YmplY3QgYW5kIHRoZQorICAgICAqIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4uIEl0IGZpcnN0IGNoZWNrcyBpZiB0aGUKKyAgICAgKiA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IGlzIG51bGwgb3Igbm90LiBJZiBpdCBpcyBub3QgbnVsbCwKICAgICAgKiBpdCBjb25zdHJ1Y3RzIGEgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3Qgd2l0aAogICAgICAqIHRoZSB1c2VyIGFuZCBwYXNzd29yZCBmaWVsZHMgZnJvbSB0aGUgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBhbmQgcmV0dXJucyB0aGlzCi0gICAgICogPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QuIElmIHRoZSA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IAotICAgICAqIGlzIG51bGwsIGl0IHJldHJpZXZlcyB0aGUgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3RzIGZyb20gCisgICAgICogPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QuIElmIHRoZSA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+CisgICAgICogaXMgbnVsbCwgaXQgcmV0cmlldmVzIHRoZSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdHMgZnJvbQogICAgICAqIHRoZSA8Y29kZT5TdWJqZWN0PC9jb2RlPiBwYXJhbWV0ZXIgYW5kIHJldHVybnMgdGhlIGZpcnN0Ci0gICAgICogPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3Qgd2hpY2ggY29udGFpbnMgYSAKKyAgICAgKiA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdCB3aGljaCBjb250YWlucyBhCiAgICAgICogPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiwgaW5zdGFuY2UgZXF1aXZhbGVudAogICAgICAqIHRvIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LCBwYXJhbWV0ZXIuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWNmCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4KLSAgICAgKiBAcGFyYW0Jc3ViamVjdAk8Y29kZT5TdWJqZWN0PC9jb2RlPgotICAgICAqIEBwYXJhbQlpbmZvCTxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4KLSAgICAgKiBAcmV0dXJuCTxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPglnZW5lcmljIGV4Y2VwdGlvbiBpZiBvcGVyYXRpb24gZmFpbHMKLSAgICAgKiBAdGhyb3dzCTxjb2RlPlNlY3VyaXR5RXhjZXB0aW9uPC9jb2RlPglpZiBhY2Nlc3MgdG8gdGhlIDxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIGlzIGRlbmllZAorICAgICAqIEBwYXJhbSAgICBtY2YgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBzdWJqZWN0ICAgIDxjb2RlPlN1YmplY3Q8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGluZm8gICAgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+ICAgIGdlbmVyaWMgZXhjZXB0aW9uIGlmIG9wZXJhdGlvbiBmYWlscworICAgICAqIEB0aHJvd3MgICAgPGNvZGU+U2VjdXJpdHlFeGNlcHRpb248L2NvZGU+ICAgIGlmIGFjY2VzcyB0byB0aGUgPGNvZGU+U3ViamVjdDwvY29kZT4gaW5zdGFuY2UgaXMgZGVuaWVkCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBQYXNzd29yZENyZWRlbnRpYWwgZ2V0UGFzc3dvcmRDcmVkZW50aWFsKGZpbmFsIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2YsCiAgICAgICAgICBmaW5hbCBTdWJqZWN0IHN1YmplY3QsIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbmZvKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogCi0JaWYgKGluZm8gPT0gbnVsbCkgeworICAgIGlmIChpbmZvID09IG51bGwpIHsKICAgICAgICAgICAgIGlmIChzdWJqZWN0ID09IG51bGwpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC04OSwxNCArODksMTQgQEAKICAgICAgICAgICAgIHJldHVybiBwYzsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0d28gc3RyaW5ncyBhcmUgZXF1YWw7IGZhbHNlIG90aGVyd2lzZQotICAgICAqIAotICAgICAqIEBwYXJhbQlzdHIxCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAcGFyYW0Jc3RyMgk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHJldHVybgl0cnVlCWlmIHRoZSB0d28gc3RyaW5ncyBhcmUgZXF1YWwKLSAgICAgKiAgICAgICAgCWZhbHNlCW90aGVyd2lzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIHN0cjEgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBzdHIyICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHRydWUgICAgaWYgdGhlIHR3byBzdHJpbmdzIGFyZSBlcXVhbAorICAgICAqICAgICAgICAgICAgZmFsc2UgICAgb3RoZXJ3aXNlCiAgICAgICovCiAgICAgc3RhdGljIHByaXZhdGUgYm9vbGVhbiBpc0VxdWFsKFN0cmluZyBzdHIxLCBTdHJpbmcgc3RyMikgewogICAgICAgICBpZiAoc3RyMSA9PSBudWxsKSB7CkBAIC0xMDksMTAgKzEwOSwxMCBAQAogICAgIC8qKgogICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0d28gPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3RzIGFyZSBlcXVhbDsgZmFsc2Ugb3RoZXJ3aXNlCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcEMxCTxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KLSAgICAgKiBAcGFyYW0JcEMyCTxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KLSAgICAgKiBAcmV0dXJuCXRydWUJaWYgdGhlIHR3byBQYXNzd29yZENyZWRlbnRpYWxzIGFyZSBlcXVhbAotICAgICAqICAgICAgICAJZmFsc2UJb3RoZXJ3aXNlCisgICAgICogQHBhcmFtICAgIHBDMSAgICA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHBDMiAgICA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+CisgICAgICogQHJldHVybiAgICB0cnVlICAgIGlmIHRoZSB0d28gUGFzc3dvcmRDcmVkZW50aWFscyBhcmUgZXF1YWwKKyAgICAgKiAgICAgICAgICAgIGZhbHNlICAgIG90aGVyd2lzZQogICAgICAqLwogICAgIHN0YXRpYyBwdWJsaWMgYm9vbGVhbiBpc1Bhc3N3b3JkQ3JlZGVudGlhbEVxdWFsKFBhc3N3b3JkQ3JlZGVudGlhbCBwQzEsIFBhc3N3b3JkQ3JlZGVudGlhbCBwQzIpIHsKICAgICAgICAgaWYgKHBDMSA9PSBwQzIpCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9idWlsZC54bWwKaW5kZXggYTU1YmJmMC4uZjA2MGU3ZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL2J1aWxkLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8cHJvamVjdCBuYW1lPSJqZGJjX2Nvbm5lY3RvciIgYmFzZWRpcj0iLiIgZGVmYXVsdD0iYnVpbGQiPgogICA8cHJvcGVydHkgbmFtZT0icGtnLmRpciIgdmFsdWU9ImNvbS9zdW4vZ2pjL3V0aWwiLz4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJjbGVhbiI+CiAgICAgPGFudCBhbnRmaWxlPSJidWlsZC54bWwiIGRpcj0iJHtnamMuaG9tZX0vYmluIiB0YXJnZXQ9ImNsZWFuIi8+CiAgIDwvdGFyZ2V0PgpAQCAtMzMsNyArMzMsNyBAQAogICAgICAgPGphciBqYXJmaWxlPSIke2Rpc3QuZGlyfS8ke3BrZy5kaXJ9L3V0aWwuamFyIiBiYXNlZGlyPSIke2NsYXNzLmRpcn0iCiAgICAgICAgIGluY2x1ZGVzPSIke3BrZy5kaXJ9LyoqLyoiLz4KICAgPC90YXJnZXQ+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZTEzIiBkZXBlbmRzPSJjb21waWxlIi8+CiAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZTE0IiBkZXBlbmRzPSJjb21waWxlIi8+CiAKQEAgLTQ0LDUgKzQ0LDUgQEAKICAgPHRhcmdldCBuYW1lPSJidWlsZDE0IiBkZXBlbmRzPSJjb21waWxlMTQsIHBhY2thZ2UxNCIvPgogCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImJ1aWxkMTMsIGJ1aWxkMTQiLz4KLSAgCisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3NlcnZsZXQvU2ltcGxlQmFua1NlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3NlcnZsZXQvU2ltcGxlQmFua1NlcnZsZXQuamF2YQppbmRleCBlZmRmMGQ3Li5lMjA5YWFjIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9zZXJ2bGV0L1NpbXBsZUJhbmtTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvc2VydmxldC9TaW1wbGVCYW5rU2VydmxldC5qYXZhCkBAIC0xNywxNiArMTcsMTYgQEAKIHBhY2thZ2Ugc2FtcGxlcy5lamIuc3ViY2xhc3Npbmcuc2VydmxldDsKIAogaW1wb3J0IGphdmEuaW8uKjsKLWltcG9ydCBqYXZhLnV0aWwuKjsgCi1pbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lio7IAotaW1wb3J0IGphdmF4Lm5hbWluZy4qOyAKLWltcG9ydCBqYWthcnRhLnNlcnZsZXQuaHR0cC4qOyAKLWltcG9ydCBqYWthcnRhLmVqYi4qOyAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2ltcG9ydCBqYWthcnRhLnNlcnZsZXQuKjsKK2ltcG9ydCBqYXZheC5uYW1pbmcuKjsKK2ltcG9ydCBqYWthcnRhLnNlcnZsZXQuaHR0cC4qOworaW1wb3J0IGpha2FydGEuZWpiLio7CiAKLWltcG9ydCBzYW1wbGVzLmVqYi5zdWJjbGFzc2luZy5lamIuKjsgCitpbXBvcnQgc2FtcGxlcy5lamIuc3ViY2xhc3NpbmcuZWpiLio7CiBpbXBvcnQgY29tLnN1bi5qZGJjcmEuc3BpLkpkYmNTZXR1cEFkbWluOwogCi1wdWJsaWMgY2xhc3MgU2ltcGxlQmFua1NlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7ICAKK3B1YmxpYyBjbGFzcyBTaW1wbGVCYW5rU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIAogCiAgIEluaXRpYWxDb250ZXh0IGluaXRDb250ZXh0ID0gbnVsbDsKQEAgLTQyLDE0ICs0MiwxNCBAQAogICB7CiAgIH0KIAotICBwdWJsaWMgdm9pZCBkb0dldCAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgCi0gICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7IAorICBwdWJsaWMgdm9pZCBkb0dldCAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkKKyAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICBkb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOwotICB9ICAKKyAgfQogCi0gIC8qKiBoYW5kbGVzIHRoZSBIVFRQIFBPU1Qgb3BlcmF0aW9uICoqLyAKLSAgcHVibGljIHZvaWQgZG9Qb3N0IChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCxIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSAKLSAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgCisgIC8qKiBoYW5kbGVzIHRoZSBIVFRQIFBPU1Qgb3BlcmF0aW9uICoqLworICBwdWJsaWMgdm9pZCBkb1Bvc3QgKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCisgICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgZG9Mb29rdXAoKTsKICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNpbXBsZUJhbmtTZXJ2bGV0IGlzIGV4ZWN1dGluZyIpOwogICAgIFN0cmluZyBTU04gPSByZXF1ZXN0LmdldFBhcmFtZXRlcigiU1NOIik7CkBAIC02NSwxNCArNjUsMTQgQEAKICAgICBTdHJpbmcgemlwQ29kZSA9ICIiOwogICAgIGxvbmcgY3VycmVudFNhdmluZ3NCYWxhbmNlID0gMDsKICAgICBsb25nIGN1cnJlbnRDaGVja2luZ0JhbGFuY2UgPSAwOwotICAgICAKKwogICAgIFN0cmluZyBhY3Rpb24gPSByZXF1ZXN0LmdldFBhcmFtZXRlcigiYWN0aW9uIik7CiAgICAgaWYgKGFjdGlvbi5lcXVhbHMoIkNyZWF0ZSIpKQogICAgIHsKICAgICAgIG1lc3NhZ2UgPSAiQWRkIEN1c3RvbWVyIjsKICAgICAgIGpzcCA9ICIvU2ltcGxlQmFua0FkZC5qc3AiOwogICAgIH0KLSAgICBlbHNlIGlmIChhY3Rpb24uZXF1YWxzKCJBZGQgQ3VzdG9tZXIiKSkgCisgICAgZWxzZSBpZiAoYWN0aW9uLmVxdWFscygiQWRkIEN1c3RvbWVyIikpCiAgICAgewogICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBZGQgQ3VzdG9tZXIgYnV0dG9uIHByZXNzZWQiKTsKICAgICAgIFNTTiA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJTU04iKTsKQEAgLTg5LDcgKzg5LDcgQEAKICAgICAgICAgY3VzdG9tZXJTYXZpbmdzID0gY3VzdG9tZXJTYXZpbmdzTG9jYWxIb21lLmNyZWF0ZShTU04sIGxhc3ROYW1lLCBmaXJzdE5hbWUsIGFkZHJlc3MxLCBhZGRyZXNzMiwgY2l0eSwgc3RhdGUsIHppcENvZGUpOwogICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb3VsZCBub3QgY3JlYXRlIHRoZSBjdXN0b21lciBzYXZpbmdzIHJlbW90ZSBiZWFuIDogIiArIGUudG9TdHJpbmcoKSk7Ci0JdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgLy9yZXR1cm47CiAgICAgICB9CiAgICAgICBtZXNzYWdlID0gIkN1c3RvbWVyIEFkZGVkLiI7CkBAIC0xMDIsNyArMTAyLDcgQEAKICAgICAgICAgY3VzdG9tZXJTYXZpbmdzID0gY3VzdG9tZXJTYXZpbmdzTG9jYWxIb21lLmZpbmRCeVByaW1hcnlLZXkoU1NOKTsKICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ291bGQgbm90IGZpbmQgdGhlIGN1c3RvbWVyIHJlbW90ZSBiZWFuIDogIiArIGUudG9TdHJpbmcoKSk7Ci0JdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgLy9yZXR1cm47CiAgICAgICB9CiAgICAgICBqc3AgPSAiL1NpbXBsZUJhbmtFZGl0LmpzcCI7CkBAIC0xMTQsNyArMTE0LDcgQEAKICAgICAgICAgY3VzdG9tZXJTYXZpbmdzID0gY3VzdG9tZXJTYXZpbmdzTG9jYWxIb21lLmZpbmRCeVByaW1hcnlLZXkoU1NOKTsKICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ291bGQgbm90IGZpbmQgdGhlIGN1c3RvbWVyIHNhdmluZ3MgcmVtb3RlIGJlYW4gOiAiICsgZS50b1N0cmluZygpKTsKLQl0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CisgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAvL3JldHVybjsKICAgICAgIH0KICAgICAgIG1lc3NhZ2UgPSAiRGVsZXRlIEN1c3RvbWVyIjsKQEAgLTEyNiwxMiArMTI2LDEyIEBACiAgICAgICAgIGN1c3RvbWVyU2F2aW5nc0xvY2FsSG9tZS5maW5kQnlQcmltYXJ5S2V5KFNTTikucmVtb3ZlKCk7CiAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvdWxkIG5vdCBkZWxldGUgdGhlIGN1c3RvbWVyIHNhdmluZ3MgYmVhbiA6ICIgKyBlLnRvU3RyaW5nKCkpOwotCXRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIC8vcmV0dXJuOwogICAgICAgfQogICAgICAgbWVzc2FnZSA9ICJDdXN0b21lciBEZWxldGVkLiI7CiAgICAgICBqc3AgPSAiL1NpbXBsZUJhbmtNZXNzYWdlLmpzcCI7Ci0gICAgfSAgCisgICAgfQogCiAKICAgICBlbHNlIGlmIChhY3Rpb24uZXF1YWxzKCJVcGRhdGUiKSkKQEAgLTE0MSw3ICsxNDEsNyBAQAogICAgICAgICBjdXN0b21lclNhdmluZ3MgPSAoQ3VzdG9tZXJTYXZpbmdzKWN1c3RvbWVyU2F2aW5nc0xvY2FsSG9tZS5maW5kQnlQcmltYXJ5S2V5KFNTTik7CiAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvdWxkIG5vdCBmaW5kIHRoZSBjdXN0b21lciBzYXZpbmdzIHJlbW90ZSBiZWFuIDogIiArIGUudG9TdHJpbmcoKSk7Ci0JdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgLy9yZXR1cm47CiAgICAgICB9CiAKQEAgLTE1MCw3ICsxNTAsNyBAQAogICAgICAgICBjdXN0b21lckNoZWNraW5nID0gKEN1c3RvbWVyQ2hlY2tpbmcpY3VzdG9tZXJDaGVja2luZ0xvY2FsSG9tZS5maW5kQnlQcmltYXJ5S2V5KFNTTik7CiAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvdWxkIG5vdCBmaW5kIHRoZSBjdXN0b21lciBjaGVja2luZyByZW1vdGUgYmVhbiA6ICIgKyBlLnRvU3RyaW5nKCkpOwotCXRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIC8vcmV0dXJuOwogICAgICAgfQogCkBAIC0yMTAsOSArMjEwLDkgQEAKICAgICBSZXF1ZXN0RGlzcGF0Y2hlciBkaXNwYXRjaGVyID0gZ2V0U2VydmxldENvbnRleHQoKS5nZXRSZXF1ZXN0RGlzcGF0Y2hlcihqc3ApOwogICAgIGRpc3BhdGNoZXIuaW5jbHVkZShyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgcmV0dXJuOwotICB9IAorICB9CiAKLSAgcHVibGljIHZvaWQgZG9Mb29rdXAoKSAKKyAgcHVibGljIHZvaWQgZG9Mb29rdXAoKQogICB7CiAgICAgdHJ5IHsKICAgICAgIGluaXRDb250ZXh0ID0gbmV3IGphdmF4Lm5hbWluZy5Jbml0aWFsQ29udGV4dCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvc3FsL2Ryb3BCYW5rVGFibGVzLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi1yZXNvdXJjZXMteG1sL3NxbC9kcm9wQmFua1RhYmxlcy5zcWwKaW5kZXggZGY5ZGYzNC4uMzNhNzA2OSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViLXJlc291cmNlcy14bWwvc3FsL2Ryb3BCYW5rVGFibGVzLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWItcmVzb3VyY2VzLXhtbC9zcWwvZHJvcEJhbmtUYWJsZXMuc3FsCkBAIC0xICsxIEBACi1kcm9wIHRhYmxlIGN1c3RvbWVyMjsNCitkcm9wIHRhYmxlIGN1c3RvbWVyMjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZTJjYzc1ZC4uZGMxOWM5YiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE2ICsxNSwxNiBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zdWJjbGFzc2luZyIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc3ViY2xhc3NpbmciLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9InN1YmNsYXNzaW5nIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL2J1aWxkLnhtbAppbmRleCBkN2U3ZmExLi5jNzAwNjU0IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9idWlsZC54bWwKQEAgLTMyLDcgKzMyLDcgQEAKICAgICAmY29tbW9uQnVpbGQ7CiAgICAgJmNvbW1vblJ1bjsKICAgICAmdGVzdHByb3BlcnRpZXM7Ci0gICAgCisKIDwhLS0KICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQsc2V0dXAsZGVwbG95LXdhciwgcnVuLXdhciwgdW5kZXBsb3ktd2FyLCBkZXBsb3ktZWFyLCBydW4tZWFyLCB1bmRlcGxveS1lYXIsIHVuc2V0dXAiLz4KIApAQCAtNDEsMTUgKzQxLDE1IEBACiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLCBkaXNhYmxlLXJlc291cmNlLXZhbGlkYXRpb24sIGRlcGxveS1lYXIsIHNldHVwLCBydW4tZWFyLCB1bnNldHVwLCB1bmRlcGxveS1lYXIsIGVuYWJsZS1yZXNvdXJjZS12YWxpZGF0aW9uIi8+CiAKIDwhLS0KLQk8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJzZXR1cCIvPgotCTxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhciIvPgotCTxhbnRjYWxsIHRhcmdldD0icnVuLXdhciIvPgotCTxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktZWFyIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJydW4tZWFyIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1lYXIiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InVuc2V0dXAiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXR1cCIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhciIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLXdhciIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktZWFyIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4tZWFyIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1lYXIiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InVuc2V0dXAiLz4KICAgICA8L3RhcmdldD4KIC0tPgogCkBAIC01Nyw0MSArNTcsNDEgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgICA8YW50IGRpcj0icmEiIHRhcmdldD0iY2xlYW4iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiPgotICAgIAk8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbm5lY3RvciI+Ci0gICAgICAgIAk8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvc2ltcGxlQmFuay5zcWwiLz4KLSAgICAJPC9hbnRjYWxsPgotICAgIAk8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1wb29sIi8+Ci0gICAgCTxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLXJlc291cmNlIi8+Ci0gICAgCTxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWFkbWluLW9iamVjdCIvPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbm5lY3RvciI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvc2ltcGxlQmFuay5zcWwiLz4KKyAgICAgICAgPC9hbnRjYWxsPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1wb29sIi8+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLXJlc291cmNlIi8+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWFkbWluLW9iamVjdCIvPgogICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJkaXNhYmxlLXJlc291cmNlLXZhbGlkYXRpb24iPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qdm0tb3B0aW9ucyI+Ci0JCQk8cGFyYW0gbmFtZT0ib3B0aW9uIiB2YWx1ZT0iLURkZXBsb3ltZW50LnJlc291cmNlLnZhbGlkYXRpb249ZmFsc2UiLz4KLQkJPC9hbnRjYWxsPgotCQk8YW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQtc2VydmVyIi8+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJkaXNhYmxlLXJlc291cmNlLXZhbGlkYXRpb24iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qdm0tb3B0aW9ucyI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3B0aW9uIiB2YWx1ZT0iLURkZXBsb3ltZW50LnJlc291cmNlLnZhbGlkYXRpb249ZmFsc2UiLz4KKyAgICAgICAgPC9hbnRjYWxsPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQtc2VydmVyIi8+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImVuYWJsZS1yZXNvdXJjZS12YWxpZGF0aW9uIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtanZtLW9wdGlvbnMiPgotCQkJPHBhcmFtIG5hbWU9Im9wdGlvbiIgdmFsdWU9Ii1EZGVwbG95bWVudC5yZXNvdXJjZS52YWxpZGF0aW9uPWZhbHNlIi8+Ci0JCTwvYW50Y2FsbD4KLQkJPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXNlcnZlciIvPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0iZW5hYmxlLXJlc291cmNlLXZhbGlkYXRpb24iPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qdm0tb3B0aW9ucyI+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3B0aW9uIiB2YWx1ZT0iLURkZXBsb3ltZW50LnJlc291cmNlLnZhbGlkYXRpb249ZmFsc2UiLz4KKyAgICAgICAgPC9hbnRjYWxsPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQtc2VydmVyIi8+CisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1wb29sIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtY29ubmVjdG9yLWNvbm5wb29sLWNvbW1vbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWNvbm5lY3Rvci1jb25ucG9vbC1jb21tb24iPgogICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJyYS5uYW1lIiB2YWx1ZT0iJHthcHBuYW1lfUFwcCNqZGJjcmEiLz4KICAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZXh0cmEtcGFyYW1zIiB2YWx1ZT0iLS1tYXRjaGNvbm5lY3Rpb25zPWZhbHNlIi8+CiAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImNvbm5lY3Rpb24uZGVmbmFtZSIgdmFsdWU9ImphdmF4LnNxbC5EYXRhU291cmNlIi8+CiAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImNvbm5lY3Rvci5jb25wb29sLm5hbWUiIHZhbHVlPSJlbWJlZGRlZC1yYS1wb29sIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXQtb3JhY2xlLXByb3BzIj4KLQkJPHBhcmFtIG5hbWU9InBvb2wudHlwZSIgdmFsdWU9ImNvbm5lY3RvciIvPgotCQk8cGFyYW0gbmFtZT0iY29ucG9vbC5uYW1lIiB2YWx1ZT0iZW1iZWRkZWQtcmEtcG9vbCIvPgotCQk8L2FudGNhbGw+CisgICAgICAgIDxwYXJhbSBuYW1lPSJwb29sLnR5cGUiIHZhbHVlPSJjb25uZWN0b3IiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImNvbnBvb2wubmFtZSIgdmFsdWU9ImVtYmVkZGVkLXJhLXBvb2wiLz4KKyAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLXJlc291cmNlIj4KICAgICAgICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1jb25uZWN0b3ItcmVzb3VyY2UtY29tbW9uIj4KQEAgLTEwNCwxOCArMTA0LDE4IEBACiAgICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLWFkbWluLW9iamVjdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9ImNyZWF0ZS1hZG1pbi1vYmplY3QgLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0gLS1yZXN0eXBlIGNvbS5zdW4uamRiY3JhLnNwaS5KZGJjU2V0dXBBZG1pbiAtLXJhbmFtZSAke2FwcG5hbWV9QXBwI2pkYmNyYSAtLXByb3BlcnR5IFRhYmxlTmFtZT1jdXN0b21lcjI6Sm5kaU5hbWU9amRiYy9lamItc3ViY2xhc3Npbmc6U2NoZW1hTmFtZT1EQlVTRVI6Tm9PZlJvd3M9MSIvPgotCSAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9ImVpcy9qZGJjQWRtaW4iLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSJlaXMvamRiY0FkbWluIi8+CiAgICAgICAgICA8L2FudGNhbGw+CiAgICAgIDwvdGFyZ2V0PgogCiAgICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLWFkbWluLW9iamVjdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+Ci0JICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0iZGVsZXRlLWFkbWluLW9iamVjdCIvPgotCSAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9IGVpcy9qZGJjQWRtaW4iLz4KLQkgPC9hbnRjYWxsPgotCSA8IS0tPGFudGNhbGwgdGFyZ2V0PSJyZWNvbmZpZy1jb21tb24iLz4tLT4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJkZWxldGUtYWRtaW4tb2JqZWN0Ii8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0gZWlzL2pkYmNBZG1pbiIvPgorICAgICA8L2FudGNhbGw+CisgICAgIDwhLS08YW50Y2FsbCB0YXJnZXQ9InJlY29uZmlnLWNvbW1vbiIvPi0tPgogICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmVzdGFydCI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXNlcnZlci1pbnN0YW5jZS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTEyMywxNiArMTIzLDE2IEBACiAgICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLXJhLWNvbmZpZyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9ImNyZWF0ZS1yZXNvdXJjZS1hZGFwdGVyLWNvbmZpZyAgLS1wcm9wZXJ0eSBSQVByb3BlcnR5PVZBTElEIi8+Ci0JICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHthcHBuYW1lfUFwcCNqZGJjcmEiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke2FwcG5hbWV9QXBwI2pkYmNyYSIvPgogICAgICAgICAgPC9hbnRjYWxsPgogICAgICA8L3RhcmdldD4KIAogICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yYS1jb25maWciIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgotCSAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9ImRlbGV0ZS1yZXNvdXJjZS1hZGFwdGVyLWNvbmZpZyIvPgotCSAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7YXBwbmFtZX1BcHAjamRiY3JhIi8+Ci0JIDwvYW50Y2FsbD4KLQkgPCEtLTxhbnRjYWxsIHRhcmdldD0icmVjb25maWctY29tbW9uIi8+LS0+CisgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0iZGVsZXRlLXJlc291cmNlLWFkYXB0ZXItY29uZmlnIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHthcHBuYW1lfUFwcCNqZGJjcmEiLz4KKyAgICAgPC9hbnRjYWxsPgorICAgICA8IS0tPGFudGNhbGwgdGFyZ2V0PSJyZWNvbmZpZy1jb21tb24iLz4tLT4KICAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVuc2V0dXAiPgpAQCAtMTQ0LDcgKzE0NCw3IEBACiAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtcG9vbCIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWFkbWluLW9iamVjdCIvPi0tPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcG9vbCI+CiAgICAgICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtY29ubmVjdG9yLWNvbm5wb29sLWNvbW1vbiI+CiAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImNvbm5lY3Rvci5jb25wb29sLm5hbWUiIHZhbHVlPSJlbWJlZGRlZC1yYS1wb29sIi8+CkBAIC0xNTQsNyArMTU0LDcgQEAKICAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2UiPgogICAgICAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWNvbm5lY3Rvci1yZXNvdXJjZS1jb21tb24iPgogICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJjb25uZWN0b3Iuam5kaS5uYW1lIiB2YWx1ZT0iamRiYy9lamItc3ViY2xhc3NpbmciLz4KLQkJPC9hbnRjYWxsPgorICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KQEAgLTE3MCw5ICsxNzAsOSBAQAogICAgICAgPGVjaG8gbWVzc2FnZT0iY29tbW9uLnhtbDogQ29tcGlsaW5nIHRlc3Qgc291cmNlIGZpbGVzIiBsZXZlbD0idmVyYm9zZSIvPgogICAgICAgPGphdmFjIHNyY2Rpcj0ic2VydmxldCIKICAgICAgICAgIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgotCSBjbGFzc3BhdGg9IiR7czFhc3Rlc3QuY2xhc3NwYXRofTpyYS9wdWJsaXNoL2ludGVybmFsL2NsYXNzZXMiCisgICAgIGNsYXNzcGF0aD0iJHtzMWFzdGVzdC5jbGFzc3BhdGh9OnJhL3B1Ymxpc2gvaW50ZXJuYWwvY2xhc3NlcyIKICAgICAgICAgIGRlYnVnPSJvbiIKLQkgZmFpbG9uZXJyb3I9InRydWUiLz4KKyAgICAgZmFpbG9uZXJyb3I9InRydWUiLz4KICAgICAgPC90YXJnZXQ+CiAKIApAQCAtMTgxLDM1ICsxODEsMzUgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgIDxhbnQgZGlyPSJyYSIgdGFyZ2V0PSJhc3NlbWJsZSIvPgogCiAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgPC9hbnRjYWxsPgotICAgICAgIAorCiAgICAgPGFudGNhbGwgdGFyZ2V0PSJlamItamFyLWNvbW1vbiI+CiAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgIDwvYW50Y2FsbD4KIAotICAgIAorCiAgICAgPGRlbGV0ZSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS5lYXIiLz4KICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KLSAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPiAgICAKLSAgICA8ZWFyIGVhcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIgCisgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KKyAgICA8ZWFyIGVhcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIKICAgICAgYXBweG1sPSIke2FwcGxpY2F0aW9uLnhtbH0iPgogICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KICAgICAgIDxpbmNsdWRlIG5hbWU9IiouamFyIi8+CiAgICAgICA8aW5jbHVkZSBuYW1lPSIqLndhciIvPgotICAgIDwvZmlsZXNldD4gIAorICAgIDwvZmlsZXNldD4KICAgICA8ZmlsZXNldCBkaXI9InJhL3B1Ymxpc2gvbGliIj4KICAgICAgIDxpbmNsdWRlIG5hbWU9IioucmFyIi8+CiAgICAgPC9maWxlc2V0PgogICAgIDwvZWFyPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3ktZWFyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLXJhLWNvbmZpZyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KQEAgLTIxOCwyOSArMjE4LDI5IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3ktd2FyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuLXdhciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bndlYmNsaWVudC1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJlbWJlZGRlZHdlYiAoc3RhbmQtYWxvbmUgd2FyIGJhc2VkKSIvPgotCTwvYW50Y2FsbD4KKyAgICA8cGFyYW0gbmFtZT0idGVzdHN1aXRlLmlkIiB2YWx1ZT0iZW1iZWRkZWR3ZWIgKHN0YW5kLWFsb25lIHdhciBiYXNlZCkiLz4KKyAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi1lYXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW53ZWJjbGllbnQtY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0idGVzdHN1aXRlLmlkIiB2YWx1ZT0iZW1iZWRkZWR3ZWIgKGVhciBiYXNlZCkiLz4KLQk8L2FudGNhbGw+CisgICAgPHBhcmFtIG5hbWU9InRlc3RzdWl0ZS5pZCIgdmFsdWU9ImVtYmVkZGVkd2ViIChlYXIgYmFzZWQpIi8+CisgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveS1lYXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtcmEtY29uZmlnIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJleHRyYS1wYXJhbXMiIHZhbHVlPSItLWNhc2NhZGU9dHJ1ZSIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+ICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3ktd2FyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKaW5kZXggMWQxMjAwZC4uZGY0YmI5MyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbApAQCAtMjksMjAgKzI5LDIwIEBACiAgICAgICAgIDxyZXMtcmVmLW5hbWU+amRiYy9TaW1wbGVCYW5rPC9yZXMtcmVmLW5hbWU+CiAgICAgICAgIDxqbmRpLW5hbWU+amRiYy9lamItc3ViY2xhc3Npbmc8L2puZGktbmFtZT4KICAgICAgIDwvcmVzb3VyY2UtcmVmPgotICAgICAgPGlzLXJlYWQtb25seS1iZWFuPmZhbHNlPC9pcy1yZWFkLW9ubHktYmVhbj4gCi0gICAgICA8Y29tbWl0LW9wdGlvbj5CPC9jb21taXQtb3B0aW9uPiAKLSAgICAgPGJlYW4tcG9vbD4gCi0gICAgICAgICA8c3RlYWR5LXBvb2wtc2l6ZT4wPC9zdGVhZHktcG9vbC1zaXplPiAKLSAgICAgICAgIDxyZXNpemUtcXVhbnRpdHk+MTwvcmVzaXplLXF1YW50aXR5PiAKLSAgICAgICAgIDxtYXgtcG9vbC1zaXplPjEwPC9tYXgtcG9vbC1zaXplPiAKLSAgICAgICAgIDxwb29sLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjM2MDA8L3Bvb2wtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+IAotICAgICAgPC9iZWFuLXBvb2w+IAotICAgICAgPGJlYW4tY2FjaGU+IAotICAgICAgICAgIDxtYXgtY2FjaGUtc2l6ZT4xMDA8L21heC1jYWNoZS1zaXplPiAKLSAgICAgICAgPGNhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjYwPC9jYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4gCi0gICAgICAgIDxyZW1vdmFsLXRpbWVvdXQtaW4tc2Vjb25kcz4zNjAwPC9yZW1vdmFsLXRpbWVvdXQtaW4tc2Vjb25kcz4gCi0gICAgICAgIDx2aWN0aW0tc2VsZWN0aW9uLXBvbGljeT5MUlU8L3ZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PiAKLSAgICAgIDwvYmVhbi1jYWNoZT4gCisgICAgICA8aXMtcmVhZC1vbmx5LWJlYW4+ZmFsc2U8L2lzLXJlYWQtb25seS1iZWFuPgorICAgICAgPGNvbW1pdC1vcHRpb24+QjwvY29tbWl0LW9wdGlvbj4KKyAgICAgPGJlYW4tcG9vbD4KKyAgICAgICAgIDxzdGVhZHktcG9vbC1zaXplPjA8L3N0ZWFkeS1wb29sLXNpemU+CisgICAgICAgICA8cmVzaXplLXF1YW50aXR5PjE8L3Jlc2l6ZS1xdWFudGl0eT4KKyAgICAgICAgIDxtYXgtcG9vbC1zaXplPjEwPC9tYXgtcG9vbC1zaXplPgorICAgICAgICAgPHBvb2wtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcG9vbC1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4KKyAgICAgIDwvYmVhbi1wb29sPgorICAgICAgPGJlYW4tY2FjaGU+CisgICAgICAgICAgPG1heC1jYWNoZS1zaXplPjEwMDwvbWF4LWNhY2hlLXNpemU+CisgICAgICAgIDxjYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz42MDwvY2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+CisgICAgICAgIDxyZW1vdmFsLXRpbWVvdXQtaW4tc2Vjb25kcz4zNjAwPC9yZW1vdmFsLXRpbWVvdXQtaW4tc2Vjb25kcz4KKyAgICAgICAgPHZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PkxSVTwvdmljdGltLXNlbGVjdGlvbi1wb2xpY3k+CisgICAgICA8L2JlYW4tY2FjaGU+CiAgICAgPC9lamI+CiAgICAgPGVqYj4KICAgICAgIDxlamItbmFtZT5DdXN0b21lckNoZWNraW5nRUpCPC9lamItbmFtZT4KQEAgLTUxLDIwICs1MSwyMCBAQAogICAgICAgICA8cmVzLXJlZi1uYW1lPmpkYmMvU2ltcGxlQmFuazwvcmVzLXJlZi1uYW1lPgogICAgICAgICA8am5kaS1uYW1lPmpkYmMvZWpiLXN1YmNsYXNzaW5nPC9qbmRpLW5hbWU+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KLSAgICAgIDxpcy1yZWFkLW9ubHktYmVhbj5mYWxzZTwvaXMtcmVhZC1vbmx5LWJlYW4+IAotICAgICAgPGNvbW1pdC1vcHRpb24+QjwvY29tbWl0LW9wdGlvbj4gCi0gICAgIDxiZWFuLXBvb2w+IAotICAgICAgICAgPHN0ZWFkeS1wb29sLXNpemU+MDwvc3RlYWR5LXBvb2wtc2l6ZT4gCi0gICAgICAgICA8cmVzaXplLXF1YW50aXR5PjE8L3Jlc2l6ZS1xdWFudGl0eT4gCi0gICAgICAgICA8bWF4LXBvb2wtc2l6ZT4xMDwvbWF4LXBvb2wtc2l6ZT4gCisgICAgICA8aXMtcmVhZC1vbmx5LWJlYW4+ZmFsc2U8L2lzLXJlYWQtb25seS1iZWFuPgorICAgICAgPGNvbW1pdC1vcHRpb24+QjwvY29tbWl0LW9wdGlvbj4KKyAgICAgPGJlYW4tcG9vbD4KKyAgICAgICAgIDxzdGVhZHktcG9vbC1zaXplPjA8L3N0ZWFkeS1wb29sLXNpemU+CisgICAgICAgICA8cmVzaXplLXF1YW50aXR5PjE8L3Jlc2l6ZS1xdWFudGl0eT4KKyAgICAgICAgIDxtYXgtcG9vbC1zaXplPjEwPC9tYXgtcG9vbC1zaXplPgogICAgICAgICA8cG9vbC1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4zNjAwPC9wb29sLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPgotICAgICAgPC9iZWFuLXBvb2w+IAotICAgICAgPGJlYW4tY2FjaGU+IAorICAgICAgPC9iZWFuLXBvb2w+CisgICAgICA8YmVhbi1jYWNoZT4KICAgICAgICAgICA8bWF4LWNhY2hlLXNpemU+MTAwPC9tYXgtY2FjaGUtc2l6ZT4KICAgICAgICAgICA8Y2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+NjA8L2NhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPgogICAgICAgICAgIDxyZW1vdmFsLXRpbWVvdXQtaW4tc2Vjb25kcz4zNjAwPC9yZW1vdmFsLXRpbWVvdXQtaW4tc2Vjb25kcz4KICAgICAgICAgICA8dmljdGltLXNlbGVjdGlvbi1wb2xpY3k+TFJVPC92aWN0aW0tc2VsZWN0aW9uLXBvbGljeT4KLSAgICAgIDwvYmVhbi1jYWNoZT4gCisgICAgICA8L2JlYW4tY2FjaGU+CiAgICAgPC9lamI+CiAgIDwvZW50ZXJwcmlzZS1iZWFucz4KIDwvc3VuLWVqYi1qYXI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvZWpiL0N1c3RvbWVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvZWpiL0N1c3RvbWVyLmphdmEKaW5kZXggOGE5YjEwNS4uMTYwZWFiOSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL2VqYi9DdXN0b21lci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9lamIvQ3VzdG9tZXIuamF2YQpAQCAtNDQsNCArNDQsNCBAQAogCiB9CiAKLSAgCisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9lamIvQ3VzdG9tZXJDaGVja2luZy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL2VqYi9DdXN0b21lckNoZWNraW5nLmphdmEKaW5kZXggNjFkZTI5MS4uYjM0MWMzNCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL2VqYi9DdXN0b21lckNoZWNraW5nLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL2VqYi9DdXN0b21lckNoZWNraW5nLmphdmEKQEAgLTIwLDQgKzIwLDQgQEAKIHsKIH0KIAotICAKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL2VqYi9DdXN0b21lckNoZWNraW5nRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvZWpiL0N1c3RvbWVyQ2hlY2tpbmdFSkIuamF2YQppbmRleCBlZTBkMTdjLi40YjU0NDQ0IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvZWpiL0N1c3RvbWVyQ2hlY2tpbmdFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvZWpiL0N1c3RvbWVyQ2hlY2tpbmdFSkIuamF2YQpAQCAtOTQsNSArOTQsNSBAQAogICB9CiAKIH0KLSAgICAKLSAgICAKKworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvZWpiL0N1c3RvbWVyRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvZWpiL0N1c3RvbWVyRUpCLmphdmEKaW5kZXggMDUyMGI2MC4uMDcyMjBkYiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL2VqYi9DdXN0b21lckVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9lamIvQ3VzdG9tZXJFSkIuamF2YQpAQCAtNTMsNyArNTMsNyBAQAogCiAgIHB1YmxpYyBTdHJpbmcgZ2V0QWRkcmVzczEoKQogICB7Ci0gICAgcmV0dXJuIGFkZHJlc3MxOyAKKyAgICByZXR1cm4gYWRkcmVzczE7CiAgIH0KIAogICBwdWJsaWMgU3RyaW5nIGdldEFkZHJlc3MyKCkKQEAgLTEzOSw3ICsxMzksNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNRTCBleGNlcHRpb24gb2NjdXJlZCBpbiBlamJSZW1vdmUgbWV0aG9kIik7CiAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICB9Ci0gICAgCisKICAgfQogCiAgIHB1YmxpYyB2b2lkIGVqYlN0b3JlKCkKQEAgLTIwNiwxMiArMjA2LDEyIEBACiAgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU1FMRXhjZXB0aW9uIG9jY3VycmVkIGluIGVqYkxvYWQoKSBtZXRob2QiKTsKICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfSAgIAorICAgIH0KICAgfQogCiAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkge30KICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkge30KIH0KLSAgICAgIAotICAgIAotICAgIAorCisKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL2VqYi9DdXN0b21lclNhdmluZ3MuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9lamIvQ3VzdG9tZXJTYXZpbmdzLmphdmEKaW5kZXggMzM4YzkyMS4uODgzZTA0YSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL2VqYi9DdXN0b21lclNhdmluZ3MuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvZWpiL0N1c3RvbWVyU2F2aW5ncy5qYXZhCkBAIC0yMCw0ICsyMCw0IEBACiB7CiB9CiAKLSAgCisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9lamIvQ3VzdG9tZXJTYXZpbmdzRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvZWpiL0N1c3RvbWVyU2F2aW5nc0VKQi5qYXZhCmluZGV4IGYzMGI1MDYuLmIwY2U3YjUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9lamIvQ3VzdG9tZXJTYXZpbmdzRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL2VqYi9DdXN0b21lclNhdmluZ3NFSkIuamF2YQpAQCAtOTUsNiArOTUsNiBAQAogICB9CiAKIH0KLSAgICAgIAotICAgIAotICAgIAorCisKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvYnVpbGQucHJvcGVydGllcwppbmRleCBlZTJlY2EwLi5mZDIxYzNkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvYnVpbGQucHJvcGVydGllcwpAQCAtMTQsNyArMTQsNyBAQAogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKICMKIAotICAgIAorCiAjIyMgQ29tcG9uZW50IFByb3BlcnRpZXMgIyMjCiBzcmMuZGlyPXNyYwogY29tcG9uZW50LnB1Ymxpc2guaG9tZT0uCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL2J1aWxkLnhtbAppbmRleCBjYjZmZjMxLi4yM2ExYTBjIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9idWlsZC54bWwKQEAgLTIzLDYyICsyMyw2MiBAQAogCiA8cHJvamVjdCBuYW1lPSJKREJDQ29ubmVjdG9yIHRvcCBsZXZlbCIgZGVmYXVsdD0iYnVpbGQiPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJwa2cuZGlyIiB2YWx1ZT0iY29tL3N1bi9qZGJjcmEvc3BpIi8+Ci0gICAgCisKICAgICAmY29tbW9uOwogICAgICZ0ZXN0Y29tbW9uOwogICAgIDxwcm9wZXJ0eSBmaWxlPSIuL2J1aWxkLnByb3BlcnRpZXMiLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUsYXNzZW1ibGUiIC8+Ci0gICAgICAgICAgCisKIAogICAgIDwhLS0gaW5pdC4gSW5pdGlhbGl6YXRpb24gaW52b2x2ZXMgY3JlYXRpbmcgcHVibGlzaGluZyBkaXJlY3RvcmllcyBhbmQKLSAgICAgICAgIE9TIHNwZWNpZmljIHRhcmdldHMuIC0tPiAKKyAgICAgICAgIE9TIHNwZWNpZmljIHRhcmdldHMuIC0tPgogICAgIDx0YXJnZXQgbmFtZT0iaW5pdCIgZGVzY3JpcHRpb249IiR7Y29tcG9uZW50Lm5hbWV9IGluaXRpYWxpemF0aW9uIj4KICAgICAgICAgPHRzdGFtcD4KICAgICAgICAgICAgIDxmb3JtYXQgcHJvcGVydHk9InN0YXJ0LnRpbWUiIHBhdHRlcm49Ik1NL2RkL3l5eXkgaGg6bW0gYWEiLz4KLSAgICAgICAgPC90c3RhbXA+ICAgIAorICAgICAgICA8L3RzdGFtcD4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iQnVpbGRpbmcgY29tcG9uZW50ICR7Y29tcG9uZW50Lm5hbWV9Ii8+CiAgICAgICAgIDxta2RpciBkaXI9IiR7Y29tcG9uZW50LmNsYXNzZXMuZGlyfSIvPgotICAgICAgICA8bWtkaXIgZGlyPSIke2NvbXBvbmVudC5saWIuaG9tZX0iLz4gICAgCisgICAgICAgIDxta2RpciBkaXI9IiR7Y29tcG9uZW50LmxpYi5ob21lfSIvPgogICAgIDwvdGFyZ2V0PgotICAgIDwhLS0gY29tcGlsZSAtLT4gCisgICAgPCEtLSBjb21waWxlIC0tPgogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iaW5pdCIKLSAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJDb21waWxlIGNvbS9zdW4vKiBjb20vaXBsYW5ldC8qIHNvdXJjZXMiPiAgCisgICAgICAgICAgICBkZXNjcmlwdGlvbj0iQ29tcGlsZSBjb20vc3VuLyogY29tL2lwbGFuZXQvKiBzb3VyY2VzIj4KICAgICAgICAgPCEtLTxlY2hvIG1lc3NhZ2U9IkNvbm5lY3RvciBhcGkgcmVzaWRlcyBpbiAke2Nvbm5lY3Rvci1hcGkuamFyfSIvPi0tPgotICAgICAgICA8amF2YWMgc3JjZGlyPSIke3NyYy5kaXJ9IiAKKyAgICAgICAgPGphdmFjIHNyY2Rpcj0iJHtzcmMuZGlyfSIKICAgICAgICAgICAgICAgIGRlc3RkaXI9IiR7Y29tcG9uZW50LmNsYXNzZXMuZGlyfSIKLQkgICAgICAgZmFpbG9uZXJyb3I9InRydWUiPgotCSAgICAgICA8Y2xhc3NwYXRoPgotCSAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LlMxQVNfSE9NRX0vbW9kdWxlcyI+Ci0JICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqLyouamFyIiAvPgotCSAgICAgICAgICA8L2ZpbGVzZXQ+Ci0JICAgICAgIDwvY2xhc3NwYXRoPgorICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSI+CisgICAgICAgICAgIDxjbGFzc3BhdGg+CisgICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuUzFBU19IT01FfS9tb2R1bGVzIj4KKyAgICAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKiovKi5qYXIiIC8+CisgICAgICAgICAgICAgIDwvZmlsZXNldD4KKyAgICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJjb20vc3VuL2pkYmNyYS8qKiIvPgogICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iY29tL3N1bi9hcHBzZXJ2LyoqIi8+CiAgICAgICAgIDwvamF2YWM+CiAgICAgPC90YXJnZXQ+Ci0gICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkIi8+CiAKLSAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUiPiAgICAKLSAgICAJCi0JPGphciBqYXJmaWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vamRiYy5qYXIiIAotICAgICAgICAgICAgYmFzZWRpcj0iJHtjb21wb25lbnQuY2xhc3Nlcy5kaXJ9IiBpbmNsdWRlcz0iJHtwa2cuZGlyfS8qKi8qLCAKLSAgICAgICAgICAgIGNvbS9zdW4vYXBwc2Vydi8qKi8qLCBjb20vc3VuL2pkYmNyYS91dGlsLyoqLyosIGNvbS9zdW4vamRiY3JhL2NvbW1vbi8qKi8qIi8+IAotICAgCQotICAgICAgICA8Y29weSBmaWxlPSIke3NyYy5kaXJ9L2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvcmEtZHMueG1sIiAKLSAgICAgICAgICAgICAgICB0b2ZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4JCisgICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIj4KKworICAgIDxqYXIgamFyZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L2pkYmMuamFyIgorICAgICAgICAgICAgYmFzZWRpcj0iJHtjb21wb25lbnQuY2xhc3Nlcy5kaXJ9IiBpbmNsdWRlcz0iJHtwa2cuZGlyfS8qKi8qLAorICAgICAgICAgICAgY29tL3N1bi9hcHBzZXJ2LyoqLyosIGNvbS9zdW4vamRiY3JhL3V0aWwvKiovKiwgY29tL3N1bi9qZGJjcmEvY29tbW9uLyoqLyoiLz4KKworICAgICAgICA8Y29weSBmaWxlPSIke3NyYy5kaXJ9L2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvcmEtZHMueG1sIgorICAgICAgICAgICAgICAgIHRvZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgogICAgICAgICA8L2NvcHk+Ci0gICAJPGphciBqYXJmaWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vamRiY3JhLnJhciIgCi0JCWJhc2VkaXI9IiR7Y29tcG9uZW50LmxpYi5ob21lfSIgaW5jbHVkZXM9ImpkYmMuamFyIj4KKyAgICAgICA8amFyIGphcmZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9qZGJjcmEucmFyIgorICAgICAgICBiYXNlZGlyPSIke2NvbXBvbmVudC5saWIuaG9tZX0iIGluY2x1ZGVzPSJqZGJjLmphciI+CiAKLSAgIAkJPG1ldGFpbmYgZGlyPSIke2NvbXBvbmVudC5saWIuaG9tZX0iPgotICAgCQkJPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+Ci0gICAJCTwvbWV0YWluZj4KLSAgIAk8L2phcj4KKyAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2NvbXBvbmVudC5saWIuaG9tZX0iPgorICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+CisgICAgICAgICAgIDwvbWV0YWluZj4KKyAgICAgICA8L2phcj4KIAotICAgCTxkZWxldGUgZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L3JhLnhtbCIvPgotCQorICAgICAgIDxkZWxldGUgZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L3JhLnhtbCIvPgorCiAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVzY3JpcHRpb249IkNsZWFuIHRoZSBidWlsZCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vYXBwc2Vydi9qZGJjcmEvRGF0YVNvdXJjZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2FwcHNlcnYvamRiY3JhL0RhdGFTb3VyY2UuamF2YQppbmRleCA5ZjgzOTlhLi5iNmVmMzBiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vYXBwc2Vydi9qZGJjcmEvRGF0YVNvdXJjZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9hcHBzZXJ2L2pkYmNyYS9EYXRhU291cmNlLmphdmEKQEAgLTIwLDE1ICsyMCwxNSBAQAogaW1wb3J0IGphdmEuc3FsLlNRTEV4Y2VwdGlvbjsKIAogLyoqCi0gKiBUaGUgPGNvZGU+amF2YXguc3FsLkRhdGFTb3VyY2U8L2NvZGU+IGltcGxlbWVudGF0aW9uIG9mIFN1bk9ORSBhcHBsaWNhdGlvbiAKKyAqIFRoZSA8Y29kZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29kZT4gaW1wbGVtZW50YXRpb24gb2YgU3VuT05FIGFwcGxpY2F0aW9uCiAgKiBzZXJ2ZXIgd2lsbCBpbXBsZW1lbnQgdGhpcyBpbnRlcmZhY2UuIEFuIGFwcGxpY2F0aW9uIHByb2dyYW0gd291bGQgYmUgYWJsZQotICogdG8gdXNlIHRoaXMgaW50ZXJmYWNlIHRvIGRvIHRoZSBleHRlbmRlZCBmdW5jdGlvbmFsaXR5IGV4cG9zZWQgYnkgU3VuT05FIAorICogdG8gdXNlIHRoaXMgaW50ZXJmYWNlIHRvIGRvIHRoZSBleHRlbmRlZCBmdW5jdGlvbmFsaXR5IGV4cG9zZWQgYnkgU3VuT05FCiAgKiBhcHBsaWNhdGlvbiBzZXJ2ZXIuCi0gKiA8cD5BIHNhbXBsZSBjb2RlIGZvciBnZXR0aW5nIGRyaXZlcidzIGNvbm5lY3Rpb24gaW1wbGVtZW50YXRpb24gd291bGQgbGlrZSAKKyAqIDxwPkEgc2FtcGxlIGNvZGUgZm9yIGdldHRpbmcgZHJpdmVyJ3MgY29ubmVjdGlvbiBpbXBsZW1lbnRhdGlvbiB3b3VsZCBsaWtlCiAgKiB0aGUgZm9sbG93aW5nLgogICogPHByZT4KICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgY29tLnN1bi5hcHBzZXJ2LkRhdGFTb3VyY2UgZHMgPSAoY29tLnN1bi5hcHBzZXJ2LkRhdGFTT3VyY2UpIGljLmxvb2t1cCgiamRiYy9Qb2ludEJhc2UiKTsgCisgICAgIGNvbS5zdW4uYXBwc2Vydi5EYXRhU291cmNlIGRzID0gKGNvbS5zdW4uYXBwc2Vydi5EYXRhU091cmNlKSBpYy5sb29rdXAoImpkYmMvUG9pbnRCYXNlIik7CiAgICAgIENvbm5lY3Rpb24gY29uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwogICAgICBDb25uZWN0aW9uIGRyaXZlcmNvbiA9IGRzLmdldENvbm5lY3Rpb24oY29uKTsKIApAQCAtMzYsMTMgKzM2LDEzIEBACiAKICAgICAgY29uLmNsb3NlKCk7CiAgICA8L3ByZT4KLSAqIAorICoKICAqIEBhdXRob3IgQmlub2QgUC5HCiAgKi8KIHB1YmxpYyBpbnRlcmZhY2UgRGF0YVNvdXJjZSBleHRlbmRzIGphdmF4LnNxbC5EYXRhU291cmNlIHsKIAogICAgIC8qKgotICAgICAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIFNRTENvbm5lY3Rpb24gZnJvbSB0aGUgQ29ubmVjdGlvbiB3cmFwcGVyIAorICAgICAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIFNRTENvbm5lY3Rpb24gZnJvbSB0aGUgQ29ubmVjdGlvbiB3cmFwcGVyCiAgICAgICogaW1wbGVtZW50YXRpb24gb2YgU3VuT05FIGFwcGxpY2F0aW9uIHNlcnZlci4gSWYgYW4gYWN0dWFsIGNvbm5lY3Rpb24gaXMKICAgICAgKiBzdXBwbGllZCBhcyBhcmd1bWVudCwgdGhlbiBpdCB3aWxsIGJlIGp1c3QgcmV0dXJuZWQuCiAgICAgICoKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VPYmplY3RCdWlsZGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlT2JqZWN0QnVpbGRlci5qYXZhCmluZGV4IDcwMDI5ZjEuLmU5NjZmOTggMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VPYmplY3RCdWlsZGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIuamF2YQpAQCAtMjcsMjIgKzI3LDIyIEBACiBpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOwogaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOwogLyoqCi0gKiBVdGlsaXR5IGNsYXNzLCB3aGljaCB3b3VsZCBjcmVhdGUgbmVjZXNzYXJ5IERhdGFzb3VyY2Ugb2JqZWN0IGFjY29yZGluZyB0byB0aGUgCisgKiBVdGlsaXR5IGNsYXNzLCB3aGljaCB3b3VsZCBjcmVhdGUgbmVjZXNzYXJ5IERhdGFzb3VyY2Ugb2JqZWN0IGFjY29yZGluZyB0byB0aGUKICAqIHNwZWNpZmljYXRpb24uCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8yMwotICogQGF1dGhvcglCaW5vZCBQLkcKLSAqIEBzZWUJCWNvbS5zdW4uamRiY3JhLmNvbW1vbi5EYXRhU291cmNlU3BlYwotICogQHNlZQkJY29tLnN1bi5qZGJjcmEudXRpbC5NZXRob2RFeGNlY3V0b3IKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMjMKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCisgKiBAc2VlICAgICAgICBjb20uc3VuLmpkYmNyYS5jb21tb24uRGF0YVNvdXJjZVNwZWMKKyAqIEBzZWUgICAgICAgIGNvbS5zdW4uamRiY3JhLnV0aWwuTWV0aG9kRXhjZWN1dG9yCiAgKi8KIHB1YmxpYyBjbGFzcyBEYXRhU291cmNlT2JqZWN0QnVpbGRlciBpbXBsZW1lbnRzIGphdmEuaW8uU2VyaWFsaXphYmxlewogCiAgICAgcHJpdmF0ZSBEYXRhU291cmNlU3BlYyBzcGVjOwotICAgIAorCiAgICAgcHJpdmF0ZSBIYXNodGFibGUgZHJpdmVyUHJvcGVydGllcyA9IG51bGw7Ci0gICAgCi0gICAgcHJpdmF0ZSBNZXRob2RFeGVjdXRvciBleGVjdXRvciA9IG51bGw7ICAgIAotICAgIAorCisgICAgcHJpdmF0ZSBNZXRob2RFeGVjdXRvciBleGVjdXRvciA9IG51bGw7CisKICAgICBwcml2YXRlIHN0YXRpYyBMb2dnZXIgX2xvZ2dlcjsKICAgICBzdGF0aWMgewogICAgICAgICBfbG9nZ2VyID0gTG9nZ2VyLmdldEFub255bW91c0xvZ2dlcigpOwpAQCAtNTAsMTY5ICs1MCwxNjkgQEAKICAgICBwcml2YXRlIGJvb2xlYW4gZGVidWcgPSBmYWxzZTsKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3QgYSBEYXRhU291cmNlIE9iamVjdCBmcm9tIHRoZSBzcGVjLgotICAgICAqIAotICAgICAqIEBwYXJhbQlzcGVjCTxjb2RlPiBEYXRhU291cmNlU3BlYyA8L2NvZGU+IG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcGVjICAgIDxjb2RlPiBEYXRhU291cmNlU3BlYyA8L2NvZGU+IG9iamVjdC4KICAgICAgKi8KICAgICBwdWJsaWMgRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIoRGF0YVNvdXJjZVNwZWMgc3BlYykgewotICAgIAl0aGlzLnNwZWMgPSBzcGVjOwotICAgIAlleGVjdXRvciA9IG5ldyBNZXRob2RFeGVjdXRvcigpOworICAgICAgICB0aGlzLnNwZWMgPSBzcGVjOworICAgICAgICBleGVjdXRvciA9IG5ldyBNZXRob2RFeGVjdXRvcigpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdCB0aGUgRGF0YVNvdXJjZSBPYmplY3QgZnJvbSB0aGUgc3BlYy4KICAgICAgKgotICAgICAqIEByZXR1cm4JT2JqZWN0IGNvbnN0cnVjdGVkIHVzaW5nIHRoZSBEYXRhU291cmNlU3BlYy4KLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiBpZiB0aGUgY2xhc3MgaXMgbm90IGZvdW5kIG9yIHNvbWUgaXNzdWUgaW4gZXhlY3V0aW5nCi0gICAgICoJCXNvbWUgbWV0aG9kLgorICAgICAqIEByZXR1cm4gICAgT2JqZWN0IGNvbnN0cnVjdGVkIHVzaW5nIHRoZSBEYXRhU291cmNlU3BlYy4KKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiBpZiB0aGUgY2xhc3MgaXMgbm90IGZvdW5kIG9yIHNvbWUgaXNzdWUgaW4gZXhlY3V0aW5nCisgICAgICogICAgICAgIHNvbWUgbWV0aG9kLgogICAgICAqLwogICAgIHB1YmxpYyBPYmplY3QgY29uc3RydWN0RGF0YVNvdXJjZU9iamVjdCgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKLSAgICAJZHJpdmVyUHJvcGVydGllcyA9IHBhcnNlRHJpdmVyUHJvcGVydGllcyhzcGVjKTsKKyAgICAgICAgZHJpdmVyUHJvcGVydGllcyA9IHBhcnNlRHJpdmVyUHJvcGVydGllcyhzcGVjKTsKICAgICAgICAgT2JqZWN0IGRhdGFTb3VyY2VPYmplY3QgPSBnZXREYXRhU291cmNlT2JqZWN0KCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVjMtVEVTVCA6ICIgICsgZGF0YVNvdXJjZU9iamVjdCk7CiAgICAgICAgIE1ldGhvZFtdIG1ldGhvZHMgPSBkYXRhU291cmNlT2JqZWN0LmdldENsYXNzKCkuZ2V0TWV0aG9kcygpOwogICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBtZXRob2RzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICBTdHJpbmcgbWV0aG9kTmFtZSA9IG1ldGhvZHNbaV0uZ2V0TmFtZSgpOwotCSAgICBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRVc2VyIikpewkgICAgCQotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVVNFUk5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFBhc3N3b3JkIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUEFTU1dPUkQpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldExvZ2luVGltZU91dCIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR0lOVElNRU9VVCksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TG9nV3JpdGVyIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HV1JJVEVSKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXREYXRhYmFzZU5hbWUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBQkFTRU5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldERhdGFTb3VyY2VOYW1lIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQVNPVVJDRU5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldERlc2NyaXB0aW9uIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVTQ1JJUFRJT04pLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXROZXR3b3JrUHJvdG9jb2wiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ORVRXT1JLUFJPVE9DT0wpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFBvcnROdW1iZXIiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QT1JUTlVNQkVSKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRSb2xlTmFtZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlJPTEVOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCQkgICAgCQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRTZXJ2ZXJOYW1lIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuU0VSVkVSTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNYXhTdGF0ZW1lbnRzIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUFYU1RBVEVNRU5UUyksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0SW5pdGlhbFBvb2xTaXplIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuSU5JVElBTFBPT0xTSVpFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNaW5Qb29sU2l6ZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1JTlBPT0xTSVpFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNYXhQb29sU2l6ZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1BWFBPT0xTSVpFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNYXhJZGxlVGltZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1BWElETEVUSU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRQcm9wZXJ0eUN5Y2xlIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUFJPUEVSVFlDWUNMRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAkKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKGRyaXZlclByb3BlcnRpZXMuY29udGFpbnNLZXkobWV0aG9kTmFtZS50b1VwcGVyQ2FzZSgpKSl7Ci0JICAgIAlWZWN0b3IgdmFsdWVzID0gKFZlY3RvcikgZHJpdmVyUHJvcGVydGllcy5nZXQobWV0aG9kTmFtZS50b1VwcGVyQ2FzZSgpKTsKLQkgICAgICAgIGV4ZWN1dG9yLnJ1bk1ldGhvZChtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QsIHZhbHVlcyk7Ci0JICAgIH0KKyAgICAgICAgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0VXNlciIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlVTRVJOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRQYXNzd29yZCIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBBU1NXT1JEKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRMb2dpblRpbWVPdXQiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dJTlRJTUVPVVQpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldExvZ1dyaXRlciIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR1dSSVRFUiksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0RGF0YWJhc2VOYW1lIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQUJBU0VOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXREYXRhU291cmNlTmFtZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXREZXNjcmlwdGlvbiIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFU0NSSVBUSU9OKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXROZXR3b3JrUHJvdG9jb2wiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ORVRXT1JLUFJPVE9DT0wpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFBvcnROdW1iZXIiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QT1JUTlVNQkVSKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRSb2xlTmFtZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlJPTEVOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRTZXJ2ZXJOYW1lIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuU0VSVkVSTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWF4U3RhdGVtZW50cyIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1BWFNUQVRFTUVOVFMpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldEluaXRpYWxQb29sU2l6ZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLklOSVRJQUxQT09MU0laRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWluUG9vbFNpemUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NSU5QT09MU0laRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWF4UG9vbFNpemUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NQVhQT09MU0laRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWF4SWRsZVRpbWUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NQVhJRExFVElNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0UHJvcGVydHlDeWNsZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBST1BFUlRZQ1lDTEUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChkcml2ZXJQcm9wZXJ0aWVzLmNvbnRhaW5zS2V5KG1ldGhvZE5hbWUudG9VcHBlckNhc2UoKSkpeworICAgICAgICAgICAgVmVjdG9yIHZhbHVlcyA9IChWZWN0b3IpIGRyaXZlclByb3BlcnRpZXMuZ2V0KG1ldGhvZE5hbWUudG9VcHBlckNhc2UoKSk7CisgICAgICAgICAgICBleGVjdXRvci5ydW5NZXRob2QobWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0LCB2YWx1ZXMpOworICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGRhdGFTb3VyY2VPYmplY3Q7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSBleHRyYSBkcml2ZXIgcHJvcGVydGllcyBmcm9tIHRoZSBEYXRhU291cmNlU3BlYyBvYmplY3QgYW5kCiAgICAgICogcGFyc2UgdGhlbSB0byBhIHNldCBvZiBtZXRob2ROYW1lIGFuZCBwYXJhbWV0ZXJzLiBQcmVwYXJlIGEgaGFzaHRhYmxlCiAgICAgICogY29udGFpbmluZyB0aGVzZSBkZXRhaWxzIGFuZCByZXR1cm4uCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3BlYwk8Y29kZT4gRGF0YVNvdXJjZVNwZWMgPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHJldHVybglIYXNodGFibGUgY29udGFpbmluZyBtZXRob2QgbmFtZXMgYW5kIHBhcmFtZXRlcnMsCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglJZiBkZWxpbWl0ZXIgaXMgbm90IHByb3ZpZGVkIGFuZCBwcm9wZXJ0eSBzdHJpbmcKLSAgICAgKgkJCQkJaXMgbm90IG51bGwuCisgICAgICogQHBhcmFtICAgIHNwZWMgICAgPGNvZGU+IERhdGFTb3VyY2VTcGVjIDwvY29kZT4gb2JqZWN0LgorICAgICAqIEByZXR1cm4gICAgSGFzaHRhYmxlIGNvbnRhaW5pbmcgbWV0aG9kIG5hbWVzIGFuZCBwYXJhbWV0ZXJzLAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgSWYgZGVsaW1pdGVyIGlzIG5vdCBwcm92aWRlZCBhbmQgcHJvcGVydHkgc3RyaW5nCisgICAgICogICAgICAgICAgICAgICAgICAgIGlzIG5vdCBudWxsLgogICAgICAqLwogICAgIHByaXZhdGUgSGFzaHRhYmxlIHBhcnNlRHJpdmVyUHJvcGVydGllcyhEYXRhU291cmNlU3BlYyBzcGVjKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb257Ci0gICAgCVN0cmluZyBkZWxpbSA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUik7CisgICAgICAgIFN0cmluZyBkZWxpbSA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUik7CiAKICAgICAgICAgU3RyaW5nIHByb3AgPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EUklWRVJQUk9QRVJUSUVTKTsKLQlpZiAoIHByb3AgPT0gbnVsbCB8fCBwcm9wLnRyaW0oKS5lcXVhbHMoIiIpKSB7Ci0JICAgIHJldHVybiBuZXcgSGFzaHRhYmxlKCk7Ci0JfSBlbHNlIGlmIChkZWxpbSA9PSBudWxsIHx8IGRlbGltLmVxdWFscygiIikpIHsKLQkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uICgiRGVsaW1pdGVyIGlzIG5vdCBwcm92aWRlZCBpbiB0aGUgY29uZmlndXJhdGlvbiIpOwotCX0KLQkKLQlIYXNodGFibGUgcHJvcGVydGllcyA9IG5ldyBIYXNodGFibGUoKTsKLQlkZWxpbSA9IGRlbGltLnRyaW0oKTsJCi0JU3RyaW5nIHNlcCA9IGRlbGltK2RlbGltOwotCWludCBzZXBMZW4gPSBzZXAubGVuZ3RoKCk7Ci0JU3RyaW5nIGNhY2hlID0gcHJvcDsKLQlWZWN0b3IgbWV0aG9kcyA9IG5ldyBWZWN0b3IoKTsKLQkKLQl3aGlsZSAoY2FjaGUuaW5kZXhPZihzZXApICE9IC0xKSB7Ci0JICAgIGludCBpbmRleCA9IGNhY2hlLmluZGV4T2Yoc2VwKTsKLQkgICAgU3RyaW5nIG5hbWUgPSBjYWNoZS5zdWJzdHJpbmcoMCxpbmRleCk7Ci0JICAgIGlmIChuYW1lLnRyaW0oKSAhPSAiIikgewotCSAgICAgICAgbWV0aG9kcy5hZGQobmFtZSk7Ci0JICAgIAljYWNoZSA9IGNhY2hlLnN1YnN0cmluZyhpbmRleCtzZXBMZW4pOwotCSAgICB9Ci0JfQotCQotICAgIAlFbnVtZXJhdGlvbiBhbGxNZXRob2RzID0gbWV0aG9kcy5lbGVtZW50cygpOwotICAgIAl3aGlsZSAoYWxsTWV0aG9kcy5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgIAkgICAgU3RyaW5nIG9uZU1ldGhvZCA9IChTdHJpbmcpIGFsbE1ldGhvZHMubmV4dEVsZW1lbnQoKTsgICAgCSAgICAKLSAgICAJICAgIGlmICghb25lTWV0aG9kLnRyaW0oKS5lcXVhbHMoIiIpKSB7Ci0gICAgCSAgICAJU3RyaW5nIG1ldGhvZE5hbWUgPSBudWxsOwotICAgIAkgICAgCVZlY3RvciBwYXJtcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAJICAgIAlTdHJpbmdUb2tlbml6ZXIgbWV0aG9kRGV0YWlscyA9IG5ldyBTdHJpbmdUb2tlbml6ZXIob25lTWV0aG9kLGRlbGltKTsKLQkJZm9yIChpbnQgaT0wOyBtZXRob2REZXRhaWxzLmhhc01vcmVUb2tlbnMoKTtpKysgKSB7Ci0JCSAgICBTdHJpbmcgdG9rZW4gPSAoU3RyaW5nKSBtZXRob2REZXRhaWxzLm5leHRUb2tlbigpOwotCQkgICAgaWYgKGk9PTApIHsKLQkJICAgIAltZXRob2ROYW1lID0gdG9rZW4udG9VcHBlckNhc2UoKTsKLQkJICAgIH0gZWxzZSB7Ci0JCSAgICAJcGFybXMuYWRkKHRva2VuKTsJCSAgICAJCi0JCSAgICB9Ci0JCX0KLQkJcHJvcGVydGllcy5wdXQobWV0aG9kTmFtZSxwYXJtcyk7Ci0gICAgCSAgICB9ICAgIAkgICAgCi0gICAgCX0KLSAgICAJcmV0dXJuIHByb3BlcnRpZXM7CisgICAgaWYgKCBwcm9wID09IG51bGwgfHwgcHJvcC50cmltKCkuZXF1YWxzKCIiKSkgeworICAgICAgICByZXR1cm4gbmV3IEhhc2h0YWJsZSgpOworICAgIH0gZWxzZSBpZiAoZGVsaW0gPT0gbnVsbCB8fCBkZWxpbS5lcXVhbHMoIiIpKSB7CisgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbiAoIkRlbGltaXRlciBpcyBub3QgcHJvdmlkZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24iKTsKICAgICB9Ci0gICAgCisKKyAgICBIYXNodGFibGUgcHJvcGVydGllcyA9IG5ldyBIYXNodGFibGUoKTsKKyAgICBkZWxpbSA9IGRlbGltLnRyaW0oKTsKKyAgICBTdHJpbmcgc2VwID0gZGVsaW0rZGVsaW07CisgICAgaW50IHNlcExlbiA9IHNlcC5sZW5ndGgoKTsKKyAgICBTdHJpbmcgY2FjaGUgPSBwcm9wOworICAgIFZlY3RvciBtZXRob2RzID0gbmV3IFZlY3RvcigpOworCisgICAgd2hpbGUgKGNhY2hlLmluZGV4T2Yoc2VwKSAhPSAtMSkgeworICAgICAgICBpbnQgaW5kZXggPSBjYWNoZS5pbmRleE9mKHNlcCk7CisgICAgICAgIFN0cmluZyBuYW1lID0gY2FjaGUuc3Vic3RyaW5nKDAsaW5kZXgpOworICAgICAgICBpZiAobmFtZS50cmltKCkgIT0gIiIpIHsKKyAgICAgICAgICAgIG1ldGhvZHMuYWRkKG5hbWUpOworICAgICAgICAgICAgY2FjaGUgPSBjYWNoZS5zdWJzdHJpbmcoaW5kZXgrc2VwTGVuKTsKKyAgICAgICAgfQorICAgIH0KKworICAgICAgICBFbnVtZXJhdGlvbiBhbGxNZXRob2RzID0gbWV0aG9kcy5lbGVtZW50cygpOworICAgICAgICB3aGlsZSAoYWxsTWV0aG9kcy5oYXNNb3JlRWxlbWVudHMoKSkgeworICAgICAgICAgICAgU3RyaW5nIG9uZU1ldGhvZCA9IChTdHJpbmcpIGFsbE1ldGhvZHMubmV4dEVsZW1lbnQoKTsKKyAgICAgICAgICAgIGlmICghb25lTWV0aG9kLnRyaW0oKS5lcXVhbHMoIiIpKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIG1ldGhvZE5hbWUgPSBudWxsOworICAgICAgICAgICAgICAgIFZlY3RvciBwYXJtcyA9IG5ldyBWZWN0b3IoKTsKKyAgICAgICAgICAgICAgICBTdHJpbmdUb2tlbml6ZXIgbWV0aG9kRGV0YWlscyA9IG5ldyBTdHJpbmdUb2tlbml6ZXIob25lTWV0aG9kLGRlbGltKTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBtZXRob2REZXRhaWxzLmhhc01vcmVUb2tlbnMoKTtpKysgKSB7CisgICAgICAgICAgICBTdHJpbmcgdG9rZW4gPSAoU3RyaW5nKSBtZXRob2REZXRhaWxzLm5leHRUb2tlbigpOworICAgICAgICAgICAgaWYgKGk9PTApIHsKKyAgICAgICAgICAgICAgICBtZXRob2ROYW1lID0gdG9rZW4udG9VcHBlckNhc2UoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcGFybXMuYWRkKHRva2VuKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBwcm9wZXJ0aWVzLnB1dChtZXRob2ROYW1lLHBhcm1zKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcHJvcGVydGllczsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgRGF0YXNvdXJjZSBvYmplY3QgYWNjb3JkaW5nIHRvIHRoZSBzcGVjLgogICAgICAqCi0gICAgICogQHJldHVybglJbml0aWFsIERhdGFTb3VyY2UgT2JqZWN0IGluc3RhbmNlLgotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+IElmIGNsYXNzIG5hbWUgaXMgd3Jvbmcgb3IgY2xhc3NwYXRoIGlzIG5vdCBzZXQKLSAgICAgKgkJcHJvcGVybHkuCisgICAgICogQHJldHVybiAgICBJbml0aWFsIERhdGFTb3VyY2UgT2JqZWN0IGluc3RhbmNlLgorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+IElmIGNsYXNzIG5hbWUgaXMgd3Jvbmcgb3IgY2xhc3NwYXRoIGlzIG5vdCBzZXQKKyAgICAgKiAgICAgICAgcHJvcGVybHkuCiAgICAgICovCiAgICAgcHJpdmF0ZSBPYmplY3QgZ2V0RGF0YVNvdXJjZU9iamVjdCgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKLSAgICAJU3RyaW5nIGNsYXNzTmFtZSA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNMQVNTTkFNRSk7Ci0gICAgICAgIHRyeSB7ICAgICAgICAgICAgCisgICAgICAgIFN0cmluZyBjbGFzc05hbWUgPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DTEFTU05BTUUpOworICAgICAgICB0cnkgewogICAgICAgICAgICAgQ2xhc3MgZGF0YVNvdXJjZUNsYXNzID0gQ2xhc3MuZm9yTmFtZShjbGFzc05hbWUpOwogICAgICAgICAgICAgT2JqZWN0IGRhdGFTb3VyY2VPYmplY3QgPSBkYXRhU291cmNlQ2xhc3MubmV3SW5zdGFuY2UoKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVjMtVEVTVCA6ICIgICsgZGF0YVNvdXJjZU9iamVjdCk7CiAgICAgICAgICAgICByZXR1cm4gZGF0YVNvdXJjZU9iamVjdDsKICAgICAgICAgfSBjYXRjaChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGNmbmUpewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19jbmZlX2RzIiwgY2ZuZSk7Ci0JCisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2NuZmVfZHMiLCBjZm5lKTsKKwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJDbGFzcyBOYW1lIGlzIHdyb25nIG9yIENsYXNzIHBhdGggaXMgbm90IHNldCBmb3IgOiIgKyBjbGFzc05hbWUpOwogICAgICAgICB9IGNhdGNoKEluc3RhbnRpYXRpb25FeGNlcHRpb24gY2UpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfaW5zdCIsIGNsYXNzTmFtZSk7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2luc3QiLCBjbGFzc05hbWUpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJFcnJvciBpbiBpbnN0YW50aWF0aW5nIiArIGNsYXNzTmFtZSk7CiAgICAgICAgIH0gY2F0Y2goSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBjZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19hY2NfaW5zdCIsIGNsYXNzTmFtZSk7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2FjY19pbnN0IiwgY2xhc3NOYW1lKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIEVycm9yIGluIGluc3RhbnRpYXRpbmciICsgY2xhc3NOYW1lKTsKICAgICAgICAgfQogICAgIH0KLSAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VTcGVjLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlU3BlYy5qYXZhCmluZGV4IGVmNmM0YzkuLjNkYzE1NGQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VTcGVjLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZVNwZWMuamF2YQpAQCAtMTksOTIgKzE5LDkyIEBACiBpbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKIAogLyoqCi0gKiBFbmNhcHN1bGF0ZSB0aGUgRGF0YVNvdXJjZSBvYmplY3QgZGV0YWlscyBvYnRhaW5lZCBmcm9tIAorICogRW5jYXBzdWxhdGUgdGhlIERhdGFTb3VyY2Ugb2JqZWN0IGRldGFpbHMgb2J0YWluZWQgZnJvbQogICogTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMjMKLSAqIEBhdXRob3IJQmlub2QgUC5HCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzIzCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRwogICovCiBwdWJsaWMgY2xhc3MgRGF0YVNvdXJjZVNwZWMgaW1wbGVtZW50cyBqYXZhLmlvLlNlcmlhbGl6YWJsZXsKIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVTRVJOQU1FCQkJCT0gMTsgICAgCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUEFTU1dPUkQJCQkJPSAyOyAgCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVVJMCQkJCQk9IDM7ICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMT0dJTlRJTUVPVVQJCQk9IDQ7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTE9HV1JJVEVSCQkJCT0gNTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQVRBQkFTRU5BTUUJCQk9IDY7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREFUQVNPVVJDRU5BTUUJCQk9IDc7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVTQ1JJUFRJT04JCQkJPSA4OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5FVFdPUktQUk9UT0NPTAkJCT0gOTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQT1JUTlVNQkVSCQkJCT0gMTA7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUk9MRU5BTUUJCQkJPSAxMTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTRVJWRVJOQU1FCQkJCT0gMTI7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYU1RBVEVNRU5UUwkJCT0gMTM7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5JVElBTFBPT0xTSVpFCQkJPSAxNDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNSU5QT09MU0laRQkJCQk9IDE1OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWFBPT0xTSVpFCQkJCT0gMTY7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYSURMRVRJTUUJCQkJPSAxNzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQUk9QRVJUWUNZQ0xFCQkJPSAxODsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEUklWRVJQUk9QRVJUSUVTCQkJPSAxOTsgICAgCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0xBU1NOQU1FCQkJCT0gMjA7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVMSU1JVEVSCQkJCT0gMjE7Ci0gICAgCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgWEFEQVRBU09VUkNFCQkJPSAyMjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQVRBU09VUkNFCQkJCT0gMjM7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OTkVDVElPTlBPT0xEQVRBU09VUkNFCQk9IDI0OwotICAgICAgCi0gICAgLy9HSkNJTlQgICAgICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVECT0gMjU7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVkFMSURBVElPTk1FVEhPRAkJCT0gMjY7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVkFMSURBVElPTlRBQkxFTkFNRQkJCT0gMjc7Ci0gICAgCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVFJBTlNBQ1RJT05JU09MQVRJT04JCT0gMjg7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwJCT0gMjk7Ci0gICAgICAgICAgICAKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVU0VSTkFNRSAgICAgICAgICAgICAgICA9IDE7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUEFTU1dPUkQgICAgICAgICAgICAgICAgPSAyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVSTCAgICAgICAgICAgICAgICAgICAgPSAzOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExPR0lOVElNRU9VVCAgICAgICAgICAgID0gNDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMT0dXUklURVIgICAgICAgICAgICAgICAgPSA1OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFCQVNFTkFNRSAgICAgICAgICAgID0gNjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQVRBU09VUkNFTkFNRSAgICAgICAgICAgID0gNzsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERVNDUklQVElPTiAgICAgICAgICAgICAgICA9IDg7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTkVUV09SS1BST1RPQ09MICAgICAgICAgICAgPSA5OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBPUlROVU1CRVIgICAgICAgICAgICAgICAgPSAxMDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBST0xFTkFNRSAgICAgICAgICAgICAgICA9IDExOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNFUlZFUk5BTUUgICAgICAgICAgICAgICAgPSAxMjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhTVEFURU1FTlRTICAgICAgICAgICAgPSAxMzsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTklUSUFMUE9PTFNJWkUgICAgICAgICAgICA9IDE0OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1JTlBPT0xTSVpFICAgICAgICAgICAgICAgID0gMTU7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYUE9PTFNJWkUgICAgICAgICAgICAgICAgPSAxNjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhJRExFVElNRSAgICAgICAgICAgICAgICA9IDE3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBST1BFUlRZQ1lDTEUgICAgICAgICAgICA9IDE4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERSSVZFUlBST1BFUlRJRVMgICAgICAgICAgICA9IDE5OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENMQVNTTkFNRSAgICAgICAgICAgICAgICA9IDIwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFTElNSVRFUiAgICAgICAgICAgICAgICA9IDIxOworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgWEFEQVRBU09VUkNFICAgICAgICAgICAgPSAyMjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQVRBU09VUkNFICAgICAgICAgICAgICAgID0gMjM7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OTkVDVElPTlBPT0xEQVRBU09VUkNFICAgICAgICA9IDI0OworCisgICAgLy9HSkNJTlQKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVEICAgID0gMjU7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVkFMSURBVElPTk1FVEhPRCAgICAgICAgICAgID0gMjY7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVkFMSURBVElPTlRBQkxFTkFNRSAgICAgICAgICAgID0gMjc7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUUkFOU0FDVElPTklTT0xBVElPTiAgICAgICAgPSAyODsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHVUFSQU5URUVJU09MQVRJT05MRVZFTCAgICAgICAgPSAyOTsKKwogICAgIHByaXZhdGUgSGFzaHRhYmxlIGRldGFpbHMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIHByb3BlcnR5LgogICAgICAqCi0gICAgICogQHBhcmFtCXByb3BlcnR5CVByb3BlcnR5IE5hbWUgdG8gYmUgc2V0LgotICAgICAqIEBwYXJhbQl2YWx1ZQkJVmFsdWUgb2YgcHJvcGVydHkgdG8gYmUgc2V0LgorICAgICAqIEBwYXJhbSAgICBwcm9wZXJ0eSAgICBQcm9wZXJ0eSBOYW1lIHRvIGJlIHNldC4KKyAgICAgKiBAcGFyYW0gICAgdmFsdWUgICAgICAgIFZhbHVlIG9mIHByb3BlcnR5IHRvIGJlIHNldC4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXREZXRhaWwoaW50IHByb3BlcnR5LCBTdHJpbmcgdmFsdWUpIHsKLSAgICAJZGV0YWlscy5wdXQobmV3IEludGVnZXIocHJvcGVydHkpLHZhbHVlKTsKKyAgICAgICAgZGV0YWlscy5wdXQobmV3IEludGVnZXIocHJvcGVydHkpLHZhbHVlKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXQgdGhlIHZhbHVlIG9mIHByb3BlcnR5CiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVZhbHVlIG9mIHRoZSBwcm9wZXJ0eS4KKyAgICAgKiBAcmV0dXJuICAgIFZhbHVlIG9mIHRoZSBwcm9wZXJ0eS4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldERldGFpbChpbnQgcHJvcGVydHkpIHsKLSAgICAJaWYgKGRldGFpbHMuY29udGFpbnNLZXkobmV3IEludGVnZXIocHJvcGVydHkpKSkgewotICAgIAkgICAgcmV0dXJuIChTdHJpbmcpIGRldGFpbHMuZ2V0KG5ldyBJbnRlZ2VyKHByb3BlcnR5KSk7Ci0gICAgCX0gZWxzZSB7Ci0gICAgCSAgICByZXR1cm4gbnVsbDsKLSAgICAJfSAgICAJCisgICAgICAgIGlmIChkZXRhaWxzLmNvbnRhaW5zS2V5KG5ldyBJbnRlZ2VyKHByb3BlcnR5KSkpIHsKKyAgICAgICAgICAgIHJldHVybiAoU3RyaW5nKSBkZXRhaWxzLmdldChuZXcgSW50ZWdlcihwcm9wZXJ0eSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDaGVja3Mgd2hldGhlciB0d28gPGNvZGU+RGF0YVNvdXJjZVNwZWM8L2NvZGU+IG9iamVjdHMKICAgICAgKiBhcmUgZXF1YWwgb3Igbm90LgogICAgICAqCi0gICAgICogQHBhcmFtCW9iaglJbnN0YW5jZSBvZiA8Y29kZT5EYXRhU291cmNlU3BlYzwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBvYmogICAgSW5zdGFuY2Ugb2YgPGNvZGU+RGF0YVNvdXJjZVNwZWM8L2NvZGU+IG9iamVjdC4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9iaikgewotICAgIAlpZiAob2JqIGluc3RhbmNlb2YgRGF0YVNvdXJjZVNwZWMpIHsKLSAgICAJICAgIHJldHVybiB0aGlzLmRldGFpbHMuZXF1YWxzKCgoRGF0YVNvdXJjZVNwZWMpb2JqKS5kZXRhaWxzKTsKLSAgICAJfQotICAgIAlyZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBEYXRhU291cmNlU3BlYykgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGV0YWlscy5lcXVhbHMoKChEYXRhU291cmNlU3BlYylvYmopLmRldGFpbHMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIGhhc2hDb2RlIG9mIHRoaXMgPGNvZGU+RGF0YVNvdXJjZVNwZWM8L2NvZGU+IG9iamVjdC4KICAgICAgKgotICAgICAqIEByZXR1cm4JaGFzaENvZGUgb2YgdGhpcyBvYmplY3QuCisgICAgICogQHJldHVybiAgICBoYXNoQ29kZSBvZiB0aGlzIG9iamVjdC4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewotICAgIAlyZXR1cm4gdGhpcy5kZXRhaWxzLmhhc2hDb2RlKCk7Ci0gICAgfSAgICAKKyAgICAgICAgcmV0dXJuIHRoaXMuZGV0YWlscy5oYXNoQ29kZSgpOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL2J1aWxkLnhtbAppbmRleCBlZjQzOGZjLi4zYjRmYWViIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vYnVpbGQueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxwcm9qZWN0IG5hbWU9ImpkYmNfY29ubmVjdG9yIiBiYXNlZGlyPSIuIiBkZWZhdWx0PSJidWlsZCI+CiAgIDxwcm9wZXJ0eSBuYW1lPSJwa2cuZGlyIiB2YWx1ZT0iY29tL3N1bi9namMvY29tbW9uIi8+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iPgogICAgIDxhbnQgYW50ZmlsZT0iYnVpbGQueG1sIiBkaXI9IiR7Z2pjLmhvbWV9L2JpbiIgdGFyZ2V0PSJjbGVhbiIvPgogICA8L3RhcmdldD4KQEAgLTM2LDEzICszNiwxMyBAQAogCiAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZTEzIiBkZXBlbmRzPSJjb21waWxlIi8+CiAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZTE0IiBkZXBlbmRzPSJjb21waWxlIi8+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0icGFja2FnZTEzIiBkZXBlbmRzPSJwYWNrYWdlIi8+CiAgIDx0YXJnZXQgbmFtZT0icGFja2FnZTE0IiBkZXBlbmRzPSJwYWNrYWdlIi8+CiAKICAgPHRhcmdldCBuYW1lPSJidWlsZDEzIiBkZXBlbmRzPSJjb21waWxlMTMsIHBhY2thZ2UxMyIvPgogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkMTQiIGRlcGVuZHM9ImNvbXBpbGUxNCwgcGFja2FnZTE0Ii8+Ci0gICAgCisKICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iYnVpbGQxMywgYnVpbGQxNCIvPgogCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvQ29ubmVjdGlvbkhvbGRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L0Nvbm5lY3Rpb25Ib2xkZXIuamF2YQppbmRleCBhOTU2ZDk3Li4xMWFkNzQ2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvQ29ubmVjdGlvbkhvbGRlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9Db25uZWN0aW9uSG9sZGVyLmphdmEKQEAgLTI0LDI0ICsyNCwyNCBAQAogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9yOwogCiAvKioKLSAqIEhvbGRzIHRoZSBqYXZhLnNxbC5Db25uZWN0aW9uIG9iamVjdCwgd2hpY2ggaXMgdG8gYmUgCisgKiBIb2xkcyB0aGUgamF2YS5zcWwuQ29ubmVjdGlvbiBvYmplY3QsIHdoaWNoIGlzIHRvIGJlCiAgKiBwYXNzZWQgdG8gdGhlIGFwcGxpY2F0aW9uIHByb2dyYW0uCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8yMwotICogQGF1dGhvcglCaW5vZCBQLkcKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMjMKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCiAgKi8KLXB1YmxpYyBjbGFzcyBDb25uZWN0aW9uSG9sZGVyIGltcGxlbWVudHMgQ29ubmVjdGlvbnsgCitwdWJsaWMgY2xhc3MgQ29ubmVjdGlvbkhvbGRlciBpbXBsZW1lbnRzIENvbm5lY3Rpb257CiAKICAgICBwcml2YXRlIENvbm5lY3Rpb24gY29uOwotICAgIAorCiAgICAgcHJpdmF0ZSBNYW5hZ2VkQ29ubmVjdGlvbiBtYzsKLSAgICAKLSAgICBwcml2YXRlIGJvb2xlYW4gd3JhcHBlZEFscmVhZHkgPSBmYWxzZTsgICAgCi0gICAgCisKKyAgICBwcml2YXRlIGJvb2xlYW4gd3JhcHBlZEFscmVhZHkgPSBmYWxzZTsKKwogICAgIHByaXZhdGUgYm9vbGVhbiBpc0Nsb3NlZCA9IGZhbHNlOwotICAgIAorCiAgICAgcHJpdmF0ZSBib29sZWFuIHZhbGlkID0gdHJ1ZTsKLSAgICAKKwogICAgIHByaXZhdGUgYm9vbGVhbiBhY3RpdmUgPSBmYWxzZTsKICAgICAvKioKICAgICAgKiBUaGUgYWN0aXZlIGZsYWcgaXMgZmFsc2Ugd2hlbiB0aGUgY29ubmVjdGlvbiBoYW5kbGUgaXMKQEAgLTUzLDIxOSArNTMsMjE5IEBACiAgICAgICogZnVuY3Rpb24sIHRoZSBhYm92ZSBtZXRob2QgaW52b2NhdGlvbiBzdWNjZWVkczsgb3RoZXJ3aXNlCiAgICAgICogYW4gZXhjZXB0aW9uIGlzIHRocm93bi4KICAgICAgKi8KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdHMgYSBDb25uZWN0aW9uIGhvbGRlci4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JY29uCTxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBjb24gICAgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyBDb25uZWN0aW9uSG9sZGVyKENvbm5lY3Rpb24gY29uLCBNYW5hZ2VkQ29ubmVjdGlvbiBtYykgewogICAgICAgICB0aGlzLmNvbiA9IGNvbjsKICAgICAgICAgdGhpcy5tYyAgPSBtYzsKICAgICB9Ci0gICAgICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgYWN0dWFsIGNvbm5lY3Rpb24gaW4gdGhpcyBob2xkZXIgb2JqZWN0LgotICAgICAqIAotICAgICAqIEByZXR1cm4JQ29ubmVjdGlvbiBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcmV0dXJuICAgIENvbm5lY3Rpb24gb2JqZWN0LgogICAgICAqLwogICAgIENvbm5lY3Rpb24gZ2V0Q29ubmVjdGlvbigpIHsKLSAgICAJcmV0dXJuIGNvbjsKKyAgICAgICAgcmV0dXJuIGNvbjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBmbGFnIHRvIGluZGljYXRlIHRoYXQsIHRoZSBjb25uZWN0aW9uIGlzIHdyYXBwZWQgYWxyZWFkeSBvciBub3QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jd3JhcEZsYWcJCisgICAgICogQHBhcmFtICAgIHdyYXBGbGFnCiAgICAgICovCiAgICAgdm9pZCB3cmFwcGVkKGJvb2xlYW4gd3JhcEZsYWcpewogICAgICAgICB0aGlzLndyYXBwZWRBbHJlYWR5ID0gd3JhcEZsYWc7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB3aGV0aGVyIGl0IGlzIHdyYXBwZWQgYWxyZWFkeSBvciBub3QuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXdyYXBwZWQgZmxhZy4KKyAgICAgKiBAcmV0dXJuICAgIHdyYXBwZWQgZmxhZy4KICAgICAgKi8KICAgICBib29sZWFuIGlzV3JhcHBlZCgpewogICAgICAgICByZXR1cm4gd3JhcHBlZEFscmVhZHk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlIHJlc3BvbnNpYmxlCiAgICAgICogZm9yIHRoaXMgY29ubmVjdGlvbi4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqLwogICAgIE1hbmFnZWRDb25uZWN0aW9uIGdldE1hbmFnZWRDb25uZWN0aW9uKCkgewogICAgICAgICByZXR1cm4gbWM7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmVwbGFjZSB0aGUgYWN0dWFsIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCB3aXRoIHRoZSBvbmUKLSAgICAgKiBzdXBwbGllZC4gQWxzbyByZXBsYWNlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBsaW5rLiAgICAgCisgICAgICogc3VwcGxpZWQuIEFsc28gcmVwbGFjZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gbGluay4KICAgICAgKgotICAgICAqIEBwYXJhbQljb24gPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgotICAgICAqIEBwYXJhbQltYyAgPGNvZGU+IE1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCisgICAgICogQHBhcmFtICAgIGNvbiA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCisgICAgICogQHBhcmFtICAgIG1jICA8Y29kZT4gTWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KICAgICAgKi8KICAgICB2b2lkIGFzc29jaWF0ZUNvbm5lY3Rpb24oQ29ubmVjdGlvbiBjb24sIE1hbmFnZWRDb25uZWN0aW9uIG1jKSB7Ci0gICAgCXRoaXMubWMgPSBtYzsKLSAgICAJdGhpcy5jb24gPSBjb247CisgICAgICAgIHRoaXMubWMgPSBtYzsKKyAgICAgICAgdGhpcy5jb24gPSBjb247CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2xlYXJzIGFsbCB3YXJuaW5ncyByZXBvcnRlZCBmb3IgdGhlIHVuZGVybHlpbmcgY29ubmVjdGlvbiAgb2JqZWN0LgogICAgICAqCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBjbGVhcldhcm5pbmdzKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsgICAgCi0JY2hlY2tWYWxpZGl0eSgpOworICAgIHB1YmxpYyB2b2lkIGNsZWFyV2FybmluZ3MoKSB0aHJvd3MgU1FMRXhjZXB0aW9ueworICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgY29uLmNsZWFyV2FybmluZ3MoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBDbG9zZXMgdGhlIGxvZ2ljYWwgY29ubmVjdGlvbi4gICAgCisgICAgICogQ2xvc2VzIHRoZSBsb2dpY2FsIGNvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjbG9zZSgpIHRocm93cyBTUUxFeGNlcHRpb257CiAgICAgICAgIGlzQ2xvc2VkID0gdHJ1ZTsKLSAgICAgICAgbWMuY29ubmVjdGlvbkNsb3NlZChudWxsLCB0aGlzKTsgICAgICAgIAorICAgICAgICBtYy5jb25uZWN0aW9uQ2xvc2VkKG51bGwsIHRoaXMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEludmFsaWRhdGVzIHRoaXMgb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGludmFsaWRhdGUoKSB7Ci0gICAgCXZhbGlkID0gZmFsc2U7CisgICAgICAgIHZhbGlkID0gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2xvc2VzIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGludm9sdmVkIGluIHRoaXMuCiAgICAgICoKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwotICAgIHZvaWQgYWN0dWFsQ2xvc2UoKSB0aHJvd3MgU1FMRXhjZXB0aW9ueyAgICAKKyAgICB2b2lkIGFjdHVhbENsb3NlKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKICAgICAgICAgY29uLmNsb3NlKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29tbWl0IHRoZSBjaGFuZ2VzIGluIHRoZSB1bmRlcmx5aW5nIENvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNvbW1pdCgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5jb21taXQoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5jb21taXQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgc3RhdGVtZW50IGZyb20gdGhlIHVuZGVybHlpbmcgQ29ubmVjdGlvbgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5TdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHJldHVybiAgICA8Y29kZT5TdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFN0YXRlbWVudCBjcmVhdGVTdGF0ZW1lbnQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgcmV0dXJuIGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgc3RhdGVtZW50IGZyb20gdGhlIHVuZGVybHlpbmcgQ29ubmVjdGlvbi4KICAgICAgKgotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRUeXBlCVR5cGUgb2YgdGhlIFJlc3VsdFNldAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRDb25jdXJyZW5jeQlSZXN1bHRTZXQgQ29uY3VycmVuY3kuCi0gICAgICogQHJldHVybgk8Y29kZT5TdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4gICAgIAotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0VHlwZSAgICBUeXBlIG9mIHRoZSBSZXN1bHRTZXQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0Q29uY3VycmVuY3kgICAgUmVzdWx0U2V0IENvbmN1cnJlbmN5LgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+U3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTdGF0ZW1lbnQgY3JlYXRlU3RhdGVtZW50KGludCByZXN1bHRTZXRUeXBlLCBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3kpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICByZXR1cm4gY29uLmNyZWF0ZVN0YXRlbWVudChyZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIHN0YXRlbWVudCBmcm9tIHRoZSB1bmRlcmx5aW5nIENvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0VHlwZQlUeXBlIG9mIHRoZSBSZXN1bHRTZXQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0Q29uY3VycmVuY3kJUmVzdWx0U2V0IENvbmN1cnJlbmN5LgotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRIb2xkYWJpbGl0eQlSZXN1bHRTZXQgSG9sZGFiaWxpdHkuICAgICAKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlN0YXRlbWVudDwvY29kZT4gb2JqZWN0LiAKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgICAgIAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRUeXBlICAgIFR5cGUgb2YgdGhlIFJlc3VsdFNldAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRDb25jdXJyZW5jeSAgICBSZXN1bHRTZXQgQ29uY3VycmVuY3kuCisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldEhvbGRhYmlsaXR5ICAgIFJlc3VsdFNldCBIb2xkYWJpbGl0eS4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KLSAgICBwdWJsaWMgU3RhdGVtZW50IGNyZWF0ZVN0YXRlbWVudChpbnQgcmVzdWx0U2V0VHlwZSwgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5LCAKLSAgICAJCQkJICAgICBpbnQgcmVzdWx0U2V0SG9sZGFiaWx0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAJCQkJICAgICAKKyAgICBwdWJsaWMgU3RhdGVtZW50IGNyZWF0ZVN0YXRlbWVudChpbnQgcmVzdWx0U2V0VHlwZSwgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRIb2xkYWJpbHR5KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIHJldHVybiBjb24uY3JlYXRlU3RhdGVtZW50KHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5LAotICAgICAgICAJCQkgICByZXN1bHRTZXRIb2xkYWJpbHR5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0U2V0SG9sZGFiaWx0eSk7CiAgICAgfQotIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBjdXJyZW50IGF1dG8tY29tbWl0IG1vZGUgZm9yIHRoZSB1bmRlcmx5aW5nIDxjb2RlPiBDb25uZWN0aW9uPC9jb2RlPi4KICAgICAgKgogICAgICAqIEByZXR1cm4gVGhlIGN1cnJlbnQgc3RhdGUgb2YgY29ubmVjdGlvbidzIGF1dG8tY29tbWl0IG1vZGUuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBnZXRBdXRvQ29tbWl0KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5nZXRBdXRvQ29tbWl0KCk7Ci0gICAgfSAgIAotIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5nZXRBdXRvQ29tbWl0KCk7CisgICAgfQorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSB1bmRlcmx5aW5nIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCdzIGNhdGFsb2cgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JQ2F0YWxvZyBOYW1lLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcmV0dXJuICAgIENhdGFsb2cgTmFtZS4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRDYXRhbG9nKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIHJldHVybiBjb24uZ2V0Q2F0YWxvZygpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgY3VycmVudCBob2xkYWJpbGl0eSBvZiA8Y29kZT5SZXN1bHRTZXQ8L2NvZGU+IG9iamVjdHMgY3JlYXRlZAogICAgICAqIHVzaW5nIHRoaXMgY29ubmVjdGlvbiBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWhvbGRhYmlsaXR5IHZhbHVlLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcmV0dXJuICAgIGhvbGRhYmlsaXR5IHZhbHVlLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldEhvbGRhYmlsaXR5KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuCWNvbi5nZXRIb2xkYWJpbGl0eSgpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuICAgIGNvbi5nZXRIb2xkYWJpbGl0eSgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgPGNvZGU+RGF0YWJhc2VNZXRhRGF0YTwvY29kZT5vYmplY3QgZnJvbSB0aGUgdW5kZXJseWluZwogICAgICAqIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgogICAgICAqCiAgICAgICogQHJldHVybiA8Y29kZT5EYXRhYmFzZU1ldGFEYXRhPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgRGF0YWJhc2VNZXRhRGF0YSBnZXRNZXRhRGF0YSgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uZ2V0TWV0YURhdGEoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uZ2V0TWV0YURhdGEoKTsKICAgICB9Ci0gCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhpcyA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QncyBjdXJyZW50IHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbC4KICAgICAgKgogICAgICAqIEByZXR1cm4gVHJhbnNhY3Rpb24gbGV2ZWwKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgcmV0dXJuIGNvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFJldHJpZXZlcyB0aGUgPGNvZGU+TWFwPC9jb2RlPiBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIAorICAgICAqIFJldHJpZXZlcyB0aGUgPGNvZGU+TWFwPC9jb2RlPiBvYmplY3QgYXNzb2NpYXRlZCB3aXRoCiAgICAgICogPGNvZGU+IENvbm5lY3Rpb248L2NvZGU+IE9iamVjdC4KICAgICAgKgotICAgICAqIEByZXR1cm4JVHlwZU1hcCBzZXQgaW4gdGhpcyBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEByZXR1cm4gICAgVHlwZU1hcCBzZXQgaW4gdGhpcyBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBNYXAgZ2V0VHlwZU1hcCgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uZ2V0VHlwZU1hcCgpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5nZXRUeXBlTWFwKCk7CiAgICAgfQogCiAvKgpAQCAtMjc5LDE4NCArMjc5LDE4NCBAQAogICAgICAqIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KICAgICAgKgogICAgICAqIEByZXR1cm4gRmlyc3QgPGNvZGU+IFNRTFdhcm5pbmc8L2NvZGU+IE9iamVjdCBvciBudWxsLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFNRTFdhcm5pbmcgZ2V0V2FybmluZ3MoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLmdldFdhcm5pbmdzKCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLmdldFdhcm5pbmdzKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHdoZXRoZXIgdW5kZXJseWluZyA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaXMgY2xvc2VkLgogICAgICAqCi0gICAgICogQHJldHVybgl0cnVlIGlmIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpcyBjbG9zZWQsIGZhbHNlCi0gICAgICogCQlpZiBpdCBpcyBjbG9zZWQuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEByZXR1cm4gICAgdHJ1ZSBpZiA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaXMgY2xvc2VkLCBmYWxzZQorICAgICAqICAgICAgICAgaWYgaXQgaXMgY2xvc2VkLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc0Nsb3NlZCgpIHRocm93cyBTUUxFeGNlcHRpb24gewotICAgIAlyZXR1cm4gaXNDbG9zZWQ7CisgICAgICAgIHJldHVybiBpc0Nsb3NlZDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgd2hldGhlciB0aGlzIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpcyByZWFkLW9ubHkuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRydWUgaWYgPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBpcyByZWFkLW9ubHksIGZhbHNlIG90aGVyLXdpc2UKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHJldHVybiAgICB0cnVlIGlmIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gaXMgcmVhZC1vbmx5LCBmYWxzZSBvdGhlci13aXNlCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGlzUmVhZE9ubHkoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLmlzUmVhZE9ubHkoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uaXNSZWFkT25seSgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnZlcnRzIHRoZSBnaXZlbiBTUUwgc3RhdGVtZW50IGludG8gdGhlIHN5c3RlbSdzIG5hdGl2ZSBTUUwgZ3JhbW1lci4KICAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIHN0YXRlbWVudCAsIHRvIGJlIGNvbnZlcnRlZC4KLSAgICAgKiBAcmV0dXJuCUNvbnZlcnRlZCBTUUwgc3RyaW5nLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBzdGF0ZW1lbnQgLCB0byBiZSBjb252ZXJ0ZWQuCisgICAgICogQHJldHVybiAgICBDb252ZXJ0ZWQgU1FMIHN0cmluZy4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBuYXRpdmVTUUwoU3RyaW5nIHNxbCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5uYXRpdmVTUUwoc3FsKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ubmF0aXZlU1FMKHNxbCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3IgY2FsbGluZyBkYXRhYmFzZQogICAgICAqIHN0b3JlZCBwcm9jZWR1cmVzLgogICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CiAgICAgICogQHJldHVybiA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBDYWxsYWJsZVN0YXRlbWVudCBwcmVwYXJlQ2FsbChTdHJpbmcgc3FsKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnByZXBhcmVDYWxsKHNxbCk7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIGNhbGxpbmcgZGF0YWJhc2UKLSAgICAgKiBzdG9yZWQgcHJvY2VkdXJlcy4KLSAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRUeXBlCVR5cGUgb2YgdGhlIFJlc3VsdFNldAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRDb25jdXJyZW5jeQlSZXN1bHRTZXQgQ29uY3VycmVuY3kuCi0gICAgICogQHJldHVybiA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovCi0gICAgcHVibGljIENhbGxhYmxlU3RhdGVtZW50IHByZXBhcmVDYWxsKFN0cmluZyBzcWwsaW50IHJlc3VsdFNldFR5cGUsIAotICAgIAkJCQkJaW50IHJlc3VsdFNldENvbmN1cnJlbmN5KSB0aHJvd3MgU1FMRXhjZXB0aW9uewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCQkJCQkKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlQ2FsbChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5KTsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3IgY2FsbGluZyBkYXRhYmFzZQotICAgICAqIHN0b3JlZCBwcm9jZWR1cmVzLgotICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldFR5cGUJVHlwZSBvZiB0aGUgUmVzdWx0U2V0Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldENvbmN1cnJlbmN5CVJlc3VsdFNldCBDb25jdXJyZW5jeS4KLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0SG9sZGFiaWxpdHkJUmVzdWx0U2V0IEhvbGRhYmlsaXR5LiAgICAgICAgICAKLSAgICAgKiBAcmV0dXJuIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8KLSAgICBwdWJsaWMgQ2FsbGFibGVTdGF0ZW1lbnQgcHJlcGFyZUNhbGwoU3RyaW5nIHNxbCwgaW50IHJlc3VsdFNldFR5cGUsIAotICAgIAkJCQkJIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwgCi0gICAgCQkJCQkgaW50IHJlc3VsdFNldEhvbGRhYmlsdHkpIHRocm93cyBTUUxFeGNlcHRpb257Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAJCQkJCSAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlQ2FsbChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5LAotICAgIAkJCSAgICAgICByZXN1bHRTZXRIb2xkYWJpbHR5KTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZUNhbGwoc3FsKTsKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nIAorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIGNhbGxpbmcgZGF0YWJhc2UKKyAgICAgKiBzdG9yZWQgcHJvY2VkdXJlcy4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRUeXBlICAgIFR5cGUgb2YgdGhlIFJlc3VsdFNldAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRDb25jdXJyZW5jeSAgICBSZXN1bHRTZXQgQ29uY3VycmVuY3kuCisgICAgICogQHJldHVybiA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCisgICAgcHVibGljIENhbGxhYmxlU3RhdGVtZW50IHByZXBhcmVDYWxsKFN0cmluZyBzcWwsaW50IHJlc3VsdFNldFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3kpIHRocm93cyBTUUxFeGNlcHRpb257CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVDYWxsKHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3kpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIGNhbGxpbmcgZGF0YWJhc2UKKyAgICAgKiBzdG9yZWQgcHJvY2VkdXJlcy4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRUeXBlICAgIFR5cGUgb2YgdGhlIFJlc3VsdFNldAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRDb25jdXJyZW5jeSAgICBSZXN1bHRTZXQgQ29uY3VycmVuY3kuCisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldEhvbGRhYmlsaXR5ICAgIFJlc3VsdFNldCBIb2xkYWJpbGl0eS4KKyAgICAgKiBAcmV0dXJuIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgQ2FsbGFibGVTdGF0ZW1lbnQgcHJlcGFyZUNhbGwoU3RyaW5nIHNxbCwgaW50IHJlc3VsdFNldFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRIb2xkYWJpbHR5KSB0aHJvd3MgU1FMRXhjZXB0aW9ueworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlQ2FsbChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRTZXRIb2xkYWJpbHR5KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nCiAgICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKICAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsKTsKICAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZyAKLSAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKLSAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQlhdXRvR2VuZXJhdGVkS2V5cyBhIGZsYWcgaW5kaWNhdGluZyBBdXRvR2VuZXJhdGVkS2V5cyBuZWVkIHRvIGJlIHJldHVybmVkLgotICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLwotICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludCBhdXRvR2VuZXJhdGVkS2V5cykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCxhdXRvR2VuZXJhdGVkS2V5cyk7Ci0gICAgfSAgICAKLSAgICAgIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcgCi0gICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCi0gICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JY29sdW1uSW5kZXhlcyBhbiBhcnJheSBvZiBjb2x1bW4gaW5kZXhlcyBpbmRpY2F0aW5nIHRoZSBjb2x1bW5zIHRoYXQgc2hvdWxkIGJlCi0gICAgICoJCXJldHVybmVkIGZyb20gdGhlIGluc2VydGVkIHJvdyBvciByb3dzLgotICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLwotICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludFtdIGNvbHVtbkluZGV4ZXMpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsY29sdW1uSW5kZXhlcyk7Ci0gICAgfSAgICAgICAgICAKLSAKLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nIAotICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQotICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldFR5cGUJVHlwZSBvZiB0aGUgUmVzdWx0U2V0Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldENvbmN1cnJlbmN5CVJlc3VsdFNldCBDb25jdXJyZW5jeS4KLSAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8KLSAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLGludCByZXN1bHRTZXRUeXBlLCAKLSAgICAJCQkJCWludCByZXN1bHRTZXRDb25jdXJyZW5jeSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAkJCQkJCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5KTsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZyAKLSAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKLSAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRUeXBlCVR5cGUgb2YgdGhlIFJlc3VsdFNldAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRDb25jdXJyZW5jeQlSZXN1bHRTZXQgQ29uY3VycmVuY3kuCi0gICAgICogQHBhcmFtCXJlc3VsdFNldEhvbGRhYmlsaXR5CVJlc3VsdFNldCBIb2xkYWJpbGl0eS4gICAgICAgICAgCi0gICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovCi0gICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCwgaW50IHJlc3VsdFNldFR5cGUsIAotICAgIAkJCQkJIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwgCi0gICAgCQkJCQkgaW50IHJlc3VsdFNldEhvbGRhYmlsdHkpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCQkJCQkgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5LAotICAgIAkJCQkgICAgcmVzdWx0U2V0SG9sZGFiaWx0eSk7Ci0gICAgfSAgICAgICAgICAgCiAKICAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nIAorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcKICAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKICAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQljb2x1bW5OYW1lcyBOYW1lIG9mIGJvdW5kIGNvbHVtbnMuCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIGF1dG9HZW5lcmF0ZWRLZXlzIGEgZmxhZyBpbmRpY2F0aW5nIEF1dG9HZW5lcmF0ZWRLZXlzIG5lZWQgdG8gYmUgcmV0dXJuZWQuCiAgICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludCBhdXRvR2VuZXJhdGVkS2V5cykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLGF1dG9HZW5lcmF0ZWRLZXlzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nCisgICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgY29sdW1uSW5kZXhlcyBhbiBhcnJheSBvZiBjb2x1bW4gaW5kZXhlcyBpbmRpY2F0aW5nIHRoZSBjb2x1bW5zIHRoYXQgc2hvdWxkIGJlCisgICAgICogICAgICAgIHJldHVybmVkIGZyb20gdGhlIGluc2VydGVkIHJvdyBvciByb3dzLgorICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludFtdIGNvbHVtbkluZGV4ZXMpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCxjb2x1bW5JbmRleGVzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nCisgICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0VHlwZSAgICBUeXBlIG9mIHRoZSBSZXN1bHRTZXQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0Q29uY3VycmVuY3kgICAgUmVzdWx0U2V0IENvbmN1cnJlbmN5LgorICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsaW50IHJlc3VsdFNldFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3kpIHRocm93cyBTUUxFeGNlcHRpb257CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZworICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldFR5cGUgICAgVHlwZSBvZiB0aGUgUmVzdWx0U2V0CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldENvbmN1cnJlbmN5ICAgIFJlc3VsdFNldCBDb25jdXJyZW5jeS4KKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0SG9sZGFiaWxpdHkgICAgUmVzdWx0U2V0IEhvbGRhYmlsaXR5LgorICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludCByZXN1bHRTZXRUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0SG9sZGFiaWx0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFNldEhvbGRhYmlsdHkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcKKyAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICBjb2x1bW5OYW1lcyBOYW1lIG9mIGJvdW5kIGNvbHVtbnMuCisgICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCwgU3RyaW5nW10gY29sdW1uTmFtZXMpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsY29sdW1uTmFtZXMpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCxjb2x1bW5OYW1lcyk7CiAgICAgfQogCiAgICAgcHVibGljIENsb2IgY3JlYXRlQ2xvYigpIHRocm93cyBTUUxFeGNlcHRpb24gewpAQCAtNTA2LDE2MiArNTA2LDE2MiBAQAogICAgIC8qKgogICAgICAqIFJlbW92ZXMgdGhlIGdpdmVuIDxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0IGZyb20gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc2F2ZXBvaW50CTxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0Ci0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBzYXZlcG9pbnQgICAgPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcmVsZWFzZVNhdmVwb2ludChTYXZlcG9pbnQgc2F2ZXBvaW50KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24ucmVsZWFzZVNhdmVwb2ludChzYXZlcG9pbnQpOwotICAgIH0gCi0gICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24ucmVsZWFzZVNhdmVwb2ludChzYXZlcG9pbnQpOworICAgIH0KKwogICAgIC8qKgogICAgICAqIFJvbGxzIGJhY2sgdGhlIGNoYW5nZXMgbWFkZSBpbiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbi4KICAgICAgKgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8gICAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KICAgICBwdWJsaWMgdm9pZCByb2xsYmFjaygpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5yb2xsYmFjaygpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnJvbGxiYWNrKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUm9sbHMgYmFjayB0aGUgY2hhbmdlcyBtYWRlIGFmdGVyIHRoZSBzYXZlcG9pbnQuCiAgICAgICoKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovICAgICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCiAgICAgcHVibGljIHZvaWQgcm9sbGJhY2soU2F2ZXBvaW50IHNhdmVwb2ludCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnJvbGxiYWNrKHNhdmVwb2ludCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24ucm9sbGJhY2soc2F2ZXBvaW50KTsKICAgICB9Ci0gICAgICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgYXV0by1jb21tbWl0IG1vZGUgb2YgdGhlIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KICAgICAgKgotICAgICAqIEBwYXJhbQlhdXRvQ29tbWl0IGJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyB0aGUgYXV0by1jb21taXQgbW9kZS4gICAgIAotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgYXV0b0NvbW1pdCBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgdGhlIGF1dG8tY29tbWl0IG1vZGUuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldEF1dG9Db21taXQoYm9vbGVhbiBhdXRvQ29tbWl0KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24uc2V0QXV0b0NvbW1pdChhdXRvQ29tbWl0KTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5zZXRBdXRvQ29tbWl0KGF1dG9Db21taXQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGNhdGFsb2cgbmFtZSB0byB0aGUgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0CiAgICAgICoKLSAgICAgKiBAcGFyYW0JY2F0YWxvZwlDYXRhbG9nIG5hbWUuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBjYXRhbG9nICAgIENhdGFsb2cgbmFtZS4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Q2F0YWxvZyhTdHJpbmcgY2F0YWxvZykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnNldENhdGFsb2coY2F0YWxvZyk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24uc2V0Q2F0YWxvZyhjYXRhbG9nKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBTZXRzIHRoZSBob2xkYWJpbGl0eSBvZiA8Y29kZT5SZXN1bHRTZXQ8L2NvZGU+IG9iamVjdHMgY3JlYXRlZCAKKyAgICAgKiBTZXRzIHRoZSBob2xkYWJpbGl0eSBvZiA8Y29kZT5SZXN1bHRTZXQ8L2NvZGU+IG9iamVjdHMgY3JlYXRlZAogICAgICAqIHVzaW5nIHRoaXMgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgogICAgICAqCi0gICAgICogQHBhcmFtCWhvbGRhYmlsaXR5CUEgPGNvZGU+UmVzdWx0U2V0PC9jb2RlPiBob2xkYWJpbGl0eSBjb25zdGFudAotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgaG9sZGFiaWxpdHkgICAgQSA8Y29kZT5SZXN1bHRTZXQ8L2NvZGU+IGhvbGRhYmlsaXR5IGNvbnN0YW50CisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldEhvbGRhYmlsaXR5KGludCBob2xkYWJpbGl0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAgCWNvbi5zZXRIb2xkYWJpbGl0eShob2xkYWJpbGl0eSk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICAgY29uLnNldEhvbGRhYmlsaXR5KGhvbGRhYmlsaXR5KTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBQdXRzIHRoZSBjb25uZWN0aW9uIGluIHJlYWQtb25seSBtb2RlIGFzIGEgaGludCB0byB0aGUgZHJpdmVyIHRvIAorICAgICAqIFB1dHMgdGhlIGNvbm5lY3Rpb24gaW4gcmVhZC1vbmx5IG1vZGUgYXMgYSBoaW50IHRvIHRoZSBkcml2ZXIgdG8KICAgICAgKiBwZXJmb3JtIGRhdGFiYXNlIG9wdGltaXphdGlvbnMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcmVhZE9ubHkgIHRydWUgZW5hYmxlcyByZWFkLW9ubHkgbW9kZSwgZmFsc2UgZGlzYWJsZXMgaXQuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICByZWFkT25seSAgdHJ1ZSBlbmFibGVzIHJlYWQtb25seSBtb2RlLCBmYWxzZSBkaXNhYmxlcyBpdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0UmVhZE9ubHkoYm9vbGVhbiByZWFkT25seSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnNldFJlYWRPbmx5KHJlYWRPbmx5KTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5zZXRSZWFkT25seShyZWFkT25seSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhbmQgdW5uYW1lZCBzYXZlcG9pbnQgYW5kIHJldHVybnMgYW4gb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhhdC4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHJldHVybiAgICA8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdC4KICAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFNhdmVwb2ludCBzZXRTYXZlcG9pbnQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnNldFNhdmVwb2ludCgpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5zZXRTYXZlcG9pbnQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgc2F2ZXBvaW50IHdpdGggdGhlIG5hbWUgYW5kIHJldHVybnMgYW4gb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhhdC4KICAgICAgKgotICAgICAqIEBwYXJhbQluYW1lCU5hbWUgb2YgdGhlIHNhdmVwb2ludC4KLSAgICAgKiBAcmV0dXJuCTxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgbmFtZSAgICBOYW1lIG9mIHRoZSBzYXZlcG9pbnQuCisgICAgICogQHJldHVybiAgICA8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFNhdmVwb2ludCBzZXRTYXZlcG9pbnQoU3RyaW5nIG5hbWUpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uc2V0U2F2ZXBvaW50KG5hbWUpOwotICAgIH0gICAgCi0gICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnNldFNhdmVwb2ludChuYW1lKTsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbGV2ZWwgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgbGV2ZWwgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRUcmFuc2FjdGlvbklzb2xhdGlvbihpbnQgbGV2ZWwpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbihsZXZlbCk7Ci0gICAgfSAgICAgCi0gICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24obGV2ZWwpOworICAgIH0KKwogICAgIC8qKgotICAgICAqIEluc3RhbGxzIHRoZSBnaXZlbiA8Y29kZT5NYXA8L2NvZGU+IG9iamVjdCBhcyB0aGUgdHlvZSBtYXAgZm9yIHRoaXMgCisgICAgICogSW5zdGFsbHMgdGhlIGdpdmVuIDxjb2RlPk1hcDwvY29kZT4gb2JqZWN0IGFzIHRoZSB0eW9lIG1hcCBmb3IgdGhpcwogICAgICAqIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgogICAgICAqCi0gICAgICogQHBhcmFtCW1hcAk8Y29kZT5NYXA8L2NvZGU+IGEgTWFwIG9iamVjdCB0byBpbnN0YWxsLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgbWFwICAgIDxjb2RlPk1hcDwvY29kZT4gYSBNYXAgb2JqZWN0IHRvIGluc3RhbGwuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFR5cGVNYXAoTWFwIG1hcCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOwotICAgIAljb24uc2V0VHlwZU1hcChtYXApOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnNldFR5cGVNYXAobWFwKTsKICAgICB9CiAKICAgICBwdWJsaWMgaW50IGdldE5ldHdvcmtUaW1lb3V0KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICB0aHJvdyBuZXcgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiRG8gbm90IHN1cHBvcnQgSmF2YSA3IG5ldyBmZWF0dXJlLiIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldE5ldHdvcmtUaW1lb3V0KEV4ZWN1dG9yIGV4ZWN1dG9yLCBpbnQgbWlsbGlzZWNvbmRzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgbmV3IGZlYXR1cmUuIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgYWJvcnQoRXhlY3V0b3IgZXhlY3V0b3IpICB0aHJvd3MgU1FMRXhjZXB0aW9uewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBuZXcgZmVhdHVyZS4iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldFNjaGVtYSgpIHRocm93cyBTUUxFeGNlcHRpb257CiAgICAgICB0aHJvdyBuZXcgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiRG8gbm90IHN1cHBvcnQgSmF2YSA3IG5ldyBmZWF0dXJlLiIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFNjaGVtYShTdHJpbmcgc2NoZW1hKSB0aHJvd3MgU1FMRXhjZXB0aW9uewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBuZXcgZmVhdHVyZS4iKTsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIENoZWNrcyB0aGUgdmFsaWRpdHkgb2YgdGhpcyBvYmplY3QKICAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgY2hlY2tWYWxpZGl0eSgpIHRocm93cyBTUUxFeGNlcHRpb24gewotICAgIAlpZiAoaXNDbG9zZWQpIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKCJDb25uZWN0aW9uIGNsb3NlZCIpOwotICAgIAlpZiAoIXZhbGlkKSB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uICgiSW52YWxpZCBDb25uZWN0aW9uIik7Ci0gICAgCWlmKGFjdGl2ZSA9PSBmYWxzZSkgewotICAgIAkgICAgbWMuY2hlY2tJZkFjdGl2ZSh0aGlzKTsKLSAgICAJfQorICAgICAgICBpZiAoaXNDbG9zZWQpIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKCJDb25uZWN0aW9uIGNsb3NlZCIpOworICAgICAgICBpZiAoIXZhbGlkKSB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uICgiSW52YWxpZCBDb25uZWN0aW9uIik7CisgICAgICAgIGlmKGFjdGl2ZSA9PSBmYWxzZSkgeworICAgICAgICAgICAgbWMuY2hlY2tJZkFjdGl2ZSh0aGlzKTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGFjdGl2ZSBmbGFnIHRvIHRydWUKICAgICAgKgotICAgICAqIEBwYXJhbQlhY3R2CWJvb2xlYW4KKyAgICAgKiBAcGFyYW0gICAgYWN0diAgICBib29sZWFuCiAgICAgICovCiAgICAgdm9pZCBzZXRBY3RpdmUoYm9vbGVhbiBhY3R2KSB7CiAgICAgICAgIGFjdGl2ZSA9IGFjdHY7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKaW5kZXggYWM3ZTc0OC4uZjA2NzVhNCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQpAQCAtMzMsMTkgKzMzLDE5IEBACiAgKiBUaGlzIGNsYXNzIGlzIGV4dGVuZGVkIGJ5IHRoZSBEYXRhU291cmNlIHNwZWNpZmljIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBmYWN0b3JpZXMKICAqIGFuZCB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBmb3IgdGhlIDxjb2RlPkRyaXZlck1hbmFnZXI8L2NvZGU+LgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDgvMDMKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA4LzAzCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiAKLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnksIAorcHVibGljIGFic3RyYWN0IGNsYXNzIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSwKICAgICBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7Ci0gICAgCisKICAgICBwcm90ZWN0ZWQgRGF0YVNvdXJjZVNwZWMgc3BlYyA9IG5ldyBEYXRhU291cmNlU3BlYygpOwogICAgIHByb3RlY3RlZCB0cmFuc2llbnQgRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIgZHNPYmpCdWlsZGVyOwotICAgIAorCiAgICAgcHJvdGVjdGVkIGphdmEuaW8uUHJpbnRXcml0ZXIgbG9nV3JpdGVyID0gbnVsbDsKICAgICBwcm90ZWN0ZWQgamFrYXJ0YS5yZXNvdXJjZS5zcGkuUmVzb3VyY2VBZGFwdGVyIHJhID0gbnVsbDsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIExvZ2dlciBfbG9nZ2VyOwogICAgIHN0YXRpYyB7CiAgICAgICAgIF9sb2dnZXIgPSBMb2dnZXIuZ2V0QW5vbnltb3VzTG9nZ2VyKCk7CkBAIC01NCw4ICs1NCw4IEBACiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIENvbm5lY3Rpb24gRmFjdG9yeSBpbnN0YW5jZS4gVGhlIDxjb2RlPkNvbm5lY3Rpb25NYW5hZ2VyPC9jb2RlPiBpbXBsZW1lbnRhdGlvbgogICAgICAqIG9mIHRoZSByZXNvdXJjZSBhZGFwdGVyIGlzIHVzZWQgaGVyZS4KLSAgICAgKiAKLSAgICAgKiBAcmV0dXJuCUdlbmVyaWMgSkRCQyBDb25uZWN0b3IgaW1wbGVtZW50YXRpb24gb2YgPGNvZGU+amF2YXguc3FsLkRhdGFTb3VyY2U8L2NvZGU+CisgICAgICoKKyAgICAgKiBAcmV0dXJuICAgIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IgaW1wbGVtZW50YXRpb24gb2YgPGNvZGU+amF2YXguc3FsLkRhdGFTb3VyY2U8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIE9iamVjdCBjcmVhdGVDb25uZWN0aW9uRmFjdG9yeSgpIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTYzLDE2ICs2MywxNiBAQAogICAgICAgICB9CiAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlIGNmID0gbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlKAogICAgICAgICAgICAgKGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSl0aGlzLCBudWxsKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGNmOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBDb25uZWN0aW9uIEZhY3RvcnkgaW5zdGFuY2UuIFRoZSA8Y29kZT5Db25uZWN0aW9uTWFuYWdlcjwvY29kZT4gaW1wbGVtZW50YXRpb24KICAgICAgKiBvZiB0aGUgYXBwbGljYXRpb24gc2VydmVyIGlzIHVzZWQgaGVyZS4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JY3hNYW5hZ2VyCTxjb2RlPkNvbm5lY3Rpb25NYW5hZ2VyPC9jb2RlPiBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgotICAgICAqIEByZXR1cm4JR2VuZXJpYyBKREJDIENvbm5lY3RvciBpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29kZT4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBjeE1hbmFnZXIgICAgPGNvZGU+Q29ubmVjdGlvbk1hbmFnZXI8L2NvZGU+IHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogQHJldHVybiAgICBHZW5lcmljIEpEQkMgQ29ubmVjdG9yIGltcGxlbWVudGF0aW9uIG9mIDxjb2RlPmphdmF4LnNxbC5EYXRhU291cmNlPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBPYmplY3QgY3JlYXRlQ29ubmVjdGlvbkZhY3RvcnkoamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvbk1hbmFnZXIgY3hNYW5hZ2VyKSB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC04MCw1NSArODAsNTUgQEAKICAgICAgICAgfQogICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuRGF0YVNvdXJjZSBjZiA9IG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuRGF0YVNvdXJjZSgKICAgICAgICAgICAgIChqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkpdGhpcywgY3hNYW5hZ2VyKTsKLSAgICAgICAgcmV0dXJuIGNmOyAKKyAgICAgICAgcmV0dXJuIGNmOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBuZXcgcGh5c2ljYWwgY29ubmVjdGlvbiB0byB0aGUgdW5kZXJseWluZyBFSVMgcmVzb3VyY2UKICAgICAgKiBtYW5hZ2VyLgotICAgICAqIAotICAgICAqIEBwYXJhbQlzdWJqZWN0CTxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICogQHBhcmFtCWN4UmVxdWVzdEluZm8JPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiB3aGljaCBtYXkgYmUgY3JlYXRlZAotICAgICAqICAgICAgIAkgICAgICAgICAgICAgCWFzIGEgcmVzdWx0IG9mIHRoZSBpbnZvY2F0aW9uIDxjb2RlPmdldENvbm5lY3Rpb24odXNlciwgcGFzc3dvcmQpPC9jb2RlPgotICAgICAqICAgICAgIAkgICAgICAgICAgICAgCW9uIHRoZSA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QKLSAgICAgKiBAcmV0dXJuCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QgY3JlYXRlZAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gaW5zdGFudGlhdGluZyB0aGUKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCTxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdCB1c2VkIGZvciB0aGUKLSAgICAgKiAgICAgICAJCQkJY3JlYXRpb24gb2YgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QKLSAgICAgKiBAdGhyb3dzCVNlY3VyaXR5RXhjZXB0aW9uCWlmIHRoZXJlIGlubyA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdAotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJc2F0aXNmeWluZyB0aGlzIHJlcXVlc3QgCi0gICAgICogQHRocm93cwlSZXNvdXJjZUFsbG9jYXRpb25FeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUgCi0gICAgICoJCQkJCQlwaHlzaWNhbCBjb25uZWN0aW9uCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3ViamVjdCAgICA8Y29kZT5TdWJqZWN0PC9jb2RlPiBpbnN0YW5jZSBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqIEBwYXJhbSAgICBjeFJlcXVlc3RJbmZvICAgIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gd2hpY2ggbWF5IGJlIGNyZWF0ZWQKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyBhIHJlc3VsdCBvZiB0aGUgaW52b2NhdGlvbiA8Y29kZT5nZXRDb25uZWN0aW9uKHVzZXIsIHBhc3N3b3JkKTwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiB0aGUgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0CisgICAgICogQHJldHVybiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGNyZWF0ZWQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGluc3RhbnRpYXRpbmcgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QgdXNlZCBmb3IgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgIGNyZWF0aW9uIG9mIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0CisgICAgICogQHRocm93cyAgICBTZWN1cml0eUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpbm8gPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdGlzZnlpbmcgdGhpcyByZXF1ZXN0CisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUFsbG9jYXRpb25FeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHBoeXNpY2FsIGNvbm5lY3Rpb24KICAgICAgKi8KICAgICBwdWJsaWMgYWJzdHJhY3QgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gY3JlYXRlTWFuYWdlZENvbm5lY3Rpb24oamF2YXguc2VjdXJpdHkuYXV0aC5TdWJqZWN0IHN1YmplY3QsCiAgICAgICAgIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBjeFJlcXVlc3RJbmZvKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb247Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBDaGVjayBpZiB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaXMgZXF1YWwgdG8gCisgICAgICogQ2hlY2sgaWYgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGlzIGVxdWFsIHRvCiAgICAgICogYW5vdGhlciA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LgotICAgICAqIAotICAgICAqIEBwYXJhbQlvdGhlcgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdCBmb3IgY2hlY2tpbmcgZXF1YWxpdHkgd2l0aAotICAgICAqIEByZXR1cm4JdHJ1ZQlpZiB0aGUgcHJvcGVydHkgc2V0cyBvZiBib3RoIHRoZSAKLSAgICAgKgkJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0cyBhcmUgdGhlIHNhbWUKLSAgICAgKgkJZmFsc2UJb3RoZXJ3aXNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgb3RoZXIgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QgZm9yIGNoZWNraW5nIGVxdWFsaXR5IHdpdGgKKyAgICAgKiBAcmV0dXJuICAgIHRydWUgICAgaWYgdGhlIHByb3BlcnR5IHNldHMgb2YgYm90aCB0aGUKKyAgICAgKiAgICAgICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0cyBhcmUgdGhlIHNhbWUKKyAgICAgKiAgICAgICAgZmFsc2UgICAgb3RoZXJ3aXNlCiAgICAgICovCiAgICAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvdGhlcik7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXQgdGhlIGxvZyB3cml0ZXIgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAc2VlCTxjb2RlPnNldExvZ1dyaXRlcjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRMb2dXcml0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIGphdmEuaW8uUHJpbnRXcml0ZXIgZ2V0TG9nV3JpdGVyKCkgewogICAgICAgICByZXR1cm4gbG9nV3JpdGVyOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAc2VlCTxjb2RlPnNldFJlc291cmNlQWRhcHRlcjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0UmVzb3VyY2VBZGFwdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBqYWthcnRhLnJlc291cmNlLnNwaS5SZXNvdXJjZUFkYXB0ZXIgZ2V0UmVzb3VyY2VBZGFwdGVyKCkgewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtMTM2LDExICsxMzYsMTEgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmE7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgaGFzaCBjb2RlIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWhhc2ggY29kZSBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+CisgICAgICogQHJldHVybiAgICBoYXNoIGNvZGUgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKXsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTE0OCw0MSArMTQ4LDQxIEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHNwZWMuaGFzaENvZGUoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgbWF0Y2hlZCA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gZnJvbSB0aGUgY2FuZGlkYXRlIAorICAgICAqIFJldHVybnMgYSBtYXRjaGVkIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBmcm9tIHRoZSBjYW5kaWRhdGUKICAgICAgKiBzZXQgb2YgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdHMuCi0gICAgICogCi0gICAgICogQHBhcmFtCWNvbm5lY3Rpb25TZXQJPGNvZGU+U2V0PC9jb2RlPiBvZiAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+Ci0gICAgICoJCQkJb2JqZWN0cyBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgotICAgICAqIEBwYXJhbQlzdWJqZWN0CSBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgotICAgICAqCQkJZm9yIHJldHJpZXZpbmcgaW5mb3JtYXRpb24gcmVxdWlyZWQgZm9yIG1hdGNoaW5nCi0gICAgICogQHBhcmFtCWN4UmVxdWVzdEluZm8JPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgotICAgICAqCQkJCWZvciByZXRyaWV2aW5nIGluZm9ybWF0aW9uIHJlcXVpcmVkIGZvciBtYXRjaGluZwotICAgICAqIEByZXR1cm4JPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHRoYXQgaXMgdGhlIGJlc3QgbWF0Y2ggc2F0aXNmeWluZyB0aGlzIHJlcXVlc3QKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGFjY2Vzc2luZyB0aGUgPGNvZGU+U3ViamVjdDwvY29kZT4KLSAgICAgKgkJCQkJcGFyYW1ldGVyIG9yIHRoZSA8Y29kZT5TZXQ8L2NvZGU+IG9mIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgotICAgICAqCQkJCQlvYmplY3RzIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgY29ubmVjdGlvblNldCAgICA8Y29kZT5TZXQ8L2NvZGU+IG9mICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgICBvYmplY3RzIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogQHBhcmFtICAgIHN1YmplY3QgICAgIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogICAgICAgICAgICBmb3IgcmV0cmlldmluZyBpbmZvcm1hdGlvbiByZXF1aXJlZCBmb3IgbWF0Y2hpbmcKKyAgICAgKiBAcGFyYW0gICAgY3hSZXF1ZXN0SW5mbyAgICA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogICAgICAgICAgICAgICAgZm9yIHJldHJpZXZpbmcgaW5mb3JtYXRpb24gcmVxdWlyZWQgZm9yIG1hdGNoaW5nCisgICAgICogQHJldHVybiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdGhhdCBpcyB0aGUgYmVzdCBtYXRjaCBzYXRpc2Z5aW5nIHRoaXMgcmVxdWVzdAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgYWNjZXNzaW5nIHRoZSA8Y29kZT5TdWJqZWN0PC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIgb3IgdGhlIDxjb2RlPlNldDwvY29kZT4gb2YgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogICAgICAgICAgICAgICAgICAgIG9iamVjdHMgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKICAgICAgKi8KLSAgICBwdWJsaWMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWF0Y2hNYW5hZ2VkQ29ubmVjdGlvbnMoamF2YS51dGlsLlNldCBjb25uZWN0aW9uU2V0LCAKKyAgICBwdWJsaWMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWF0Y2hNYW5hZ2VkQ29ubmVjdGlvbnMoamF2YS51dGlsLlNldCBjb25uZWN0aW9uU2V0LAogICAgICAgICBqYXZheC5zZWN1cml0eS5hdXRoLlN1YmplY3Qgc3ViamVjdCwgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxdWVzdEluZm8pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CiAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gbWF0Y2hNYW5hZ2VkQ29ubmVjdGlvbnMiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZihjb25uZWN0aW9uU2V0ID09IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIFBhc3N3b3JkQ3JlZGVudGlhbCBwYyA9IFNlY3VyaXR5VXRpbHMuZ2V0UGFzc3dvcmRDcmVkZW50aWFsKHRoaXMsIHN1YmplY3QsIGN4UmVxdWVzdEluZm8pOwotICAgICAgICAKKwogICAgICAgICBqYXZhLnV0aWwuSXRlcmF0b3IgaXRlciA9IGNvbm5lY3Rpb25TZXQuaXRlcmF0b3IoKTsKICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1jID0gbnVsbDsKICAgICAgICAgd2hpbGUoaXRlci5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgbWMgPSAoY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uKSBpdGVyLm5leHQoKTsKICAgICAgICAgICAgIH0gY2F0Y2goamF2YS51dGlsLk5vU3VjaEVsZW1lbnRFeGNlcHRpb24gbnNlZSkgewotCSAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfaXRlciIpOworICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfaXRlciIpOwogICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihuc2VlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZihwYyA9PSBudWxsICYmIHRoaXMuZXF1YWxzKG1jLmdldE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSgpKSkgewpAQCAtMTkxLDcgKzE5MSw3IEBACiAgICAgICAgICAgICAgICAgICAgIGlzVmFsaWQobWMpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWM7CiAgICAgICAgICAgICAgICAgfSBjYXRjaChSZXNvdXJjZUV4Y2VwdGlvbiByZSkgewotCSAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3JlIiwgcmUpOworICAgICAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3JlIiwgcmUpOwogICAgICAgICAgICAgICAgICAgICBtYy5jb25uZWN0aW9uRXJyb3JPY2N1cnJlZChyZSwgbnVsbCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIGlmKFNlY3VyaXR5VXRpbHMuaXNQYXNzd29yZENyZWRlbnRpYWxFcXVhbChwYywgbWMuZ2V0UGFzc3dvcmRDcmVkZW50aWFsKCkpID09IHRydWUpIHsKQEAgLTIwMCw0NSArMjAwLDQ1IEBACiAgICAgICAgICAgICAgICAgICAgIGlzVmFsaWQobWMpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWM7CiAgICAgICAgICAgICAgICAgfSBjYXRjaChSZXNvdXJjZUV4Y2VwdGlvbiByZSkgewotCSAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMucmUiKTsKKyAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLnJlIik7CiAgICAgICAgICAgICAgICAgICAgIG1jLmNvbm5lY3Rpb25FcnJvck9jY3VycmVkKHJlLCBudWxsKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotICAgIAorCiAgICAgLy9HSkNJTlQKICAgICAvKioKICAgICAgKiBDaGVja3MgaWYgYSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaXMgdG8gYmUgdmFsaWRhdGVkIG9yIG5vdAogICAgICAqIGFuZCB2YWxpZGF0ZXMgaXQgb3IgcmV0dXJucy4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JbWMJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIG9yCi0gICAgICogICAgICAgIAkgICAgICAgICAgCQlpZiB2YWxpZGF0aW9uIG1ldGhvZCBpcyBub3QgcHJvcGVyCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIG9yCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB2YWxpZGF0aW9uIG1ldGhvZCBpcyBub3QgcHJvcGVyCiAgICAgICovCiAgICAgdm9pZCBpc1ZhbGlkKGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKIAogICAgICAgICBpZihtYy5pc1RyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKSB7Ci0JICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgCi0gICAgICAgIGJvb2xlYW4gY29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZCA9IAorCisgICAgICAgIGJvb2xlYW4gY29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZCA9CiAgICAgICAgICAgICAobmV3IEJvb2xlYW4oc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ09OTkVDVElPTlZBTElEQVRJT05SRVFVSVJFRCkudG9Mb3dlckNhc2UoKSkpLmJvb2xlYW5WYWx1ZSgpOwogICAgICAgICBpZiggY29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZCA9PSBmYWxzZSB8fCBtYyA9PSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIAorCisKICAgICAgICAgU3RyaW5nIHZhbGlkYXRpb25NZXRob2QgPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OTUVUSE9EKS50b0xvd2VyQ2FzZSgpOwotICAgICAgICAKKwogICAgICAgICBtYy5jaGVja0lmVmFsaWQoKTsKICAgICAgICAgLyoqCiAgICAgICAgICAqIFRoZSBhYm92ZSBjYWxsIGNoZWNrcyBpZiB0aGUgYWN0dWFsIHBoeXNpY2FsIGNvbm5lY3Rpb24KICAgICAgICAgICogaXMgdXNhYmxlIG9yIG5vdC4KICAgICAgICAgICovCiAgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gY29uID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpOwotICAgICAgICAKKwogICAgICAgICBpZih2YWxpZGF0aW9uTWV0aG9kLmVxdWFscygiYXV0by1jb21taXQiKSA9PSB0cnVlKSB7CiAgICAgICAgICAgICBpc1ZhbGlkQnlBdXRvQ29tbWl0KGNvbik7CiAgICAgICAgIH0gZWxzZSBpZih2YWxpZGF0aW9uTWV0aG9kLmVxdWFsc0lnbm9yZUNhc2UoIm1ldGEtZGF0YSIpID09IHRydWUpIHsKQEAgLTI0OSwyOCArMjQ5LDI4IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSB2YWxpZGF0aW9uIG1ldGhvZCBpcyBub3QgcHJvcGVyIik7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDaGVja3MgaWYgYSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBpcyB2YWxpZCBvciBub3QKICAgICAgKiBieSBjaGVja2luZyBpdHMgYXV0byBjb21taXQgcHJvcGVydHkuCi0gICAgICogCi0gICAgICogQHBhcmFtCWNvbgk8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqCisgICAgICogQHBhcmFtICAgIGNvbiAgICA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqLwogICAgIHByb3RlY3RlZCB2b2lkIGlzVmFsaWRCeUF1dG9Db21taXQoamF2YS5zcWwuQ29ubmVjdGlvbiBjb24pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGNvbiA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyAiCiAgICAgICAgICAgICAgICAgKyAidGhlIGNvbm5lY3Rpb24gaXMgbnVsbCIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgIC8vIE5vdGljZSB0aGF0IHVzaW5nIHNvbWV0aGluZyBsaWtlIAorICAgICAgICAgICAvLyBOb3RpY2UgdGhhdCB1c2luZyBzb21ldGhpbmcgbGlrZQogICAgICAgICAgICAvLyBkYkNvbi5zZXRBdXRvQ29tbWl0KGRiQ29uLmdldEF1dG9Db21taXQoKSkgd2lsbCBjYXVzZSBwcm9ibGVtcyB3aXRoCiAgICAgICAgICAgIC8vIHNvbWUgZHJpdmVycyBsaWtlIHN5YmFzZQotICAgICAgICAgICAvLyBXZSBkbyBub3QgdmFsaWRhdGUgY29ubmVjdGlvbnMgdGhhdCBhcmUgYWxyZWFkeSBlbmxpc3RlZCAKLQkgICAvL2luIGEgdHJhbnNhY3Rpb24gCi0JICAgLy8gV2UgY3ljbGUgYXV0b2NvbW1pdCB0byB0cnVlIGFuZCBmYWxzZSB0byBieS1wYXNzIGRyaXZlcnMgdGhhdCAKLQkgICAvLyBtaWdodCBjYWNoZSB0aGUgY2FsbCB0byBzZXQgYXV0b2NvbWl0dAorICAgICAgICAgICAvLyBXZSBkbyBub3QgdmFsaWRhdGUgY29ubmVjdGlvbnMgdGhhdCBhcmUgYWxyZWFkeSBlbmxpc3RlZAorICAgICAgIC8vaW4gYSB0cmFuc2FjdGlvbgorICAgICAgIC8vIFdlIGN5Y2xlIGF1dG9jb21taXQgdG8gdHJ1ZSBhbmQgZmFsc2UgdG8gYnktcGFzcyBkcml2ZXJzIHRoYXQKKyAgICAgICAvLyBtaWdodCBjYWNoZSB0aGUgY2FsbCB0byBzZXQgYXV0b2NvbWl0dAogICAgICAgICAgICAvLyBBbHNvIG5vdGljZSB0aGF0IHNvbWUgWEEgZGF0YSBzb3VyY2VzIHdpbGwgdGhyb3cgYW5kIGV4Y2VwdGlvbiBpZgogICAgICAgICAgICAvLyB5b3UgdHJ5IHRvIGNhbGwgc2V0QXV0b0NvbW1pdCwgZm9yIHRoZW0gdGhpcyBtZXRob2QgaXMgbm90IHJlY29tbWVuZGVkCiAKQEAgLTI4MSw5MCArMjgxLDkwIEBACiAgICAgICAgICAgICAgICAgY29uLnJvbGxiYWNrKCk7IC8vIHByZXZlbnRzIHVuY29tcGxldGVkIHRyYW5zYWN0aW9uIGV4Y2VwdGlvbnMKICAgICAgICAgICAgICAgICBjb24uc2V0QXV0b0NvbW1pdCh0cnVlKTsKICAgICAgICAgICAgfQotICAgICAgICAKLQkgICBjb24uc2V0QXV0b0NvbW1pdChhYyk7CisKKyAgICAgICBjb24uc2V0QXV0b0NvbW1pdChhYyk7CiAKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19hdXRvY29tbWl0Iik7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2F1dG9jb21taXQiKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDaGVja3MgaWYgYSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBpcyB2YWxpZCBvciBub3QKICAgICAgKiBieSBjaGVja2luZyBpdHMgbWV0YSBkYXRhLgotICAgICAqIAotICAgICAqIEBwYXJhbQljb24JPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBjb24gICAgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKi8KICAgICBwcm90ZWN0ZWQgdm9pZCBpc1ZhbGlkQnlNZXRhRGF0YShqYXZhLnNxbC5Db25uZWN0aW9uIGNvbikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYoY29uID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzICIKICAgICAgICAgICAgICAgICArICJ0aGUgY29ubmVjdGlvbiBpcyBudWxsIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGphdmEuc3FsLkRhdGFiYXNlTWV0YURhdGEgZG1kID0gY29uLmdldE1ldGFEYXRhKCk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfbWQiKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfbWQiKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzICIKICAgICAgICAgICAgICAgICArICJnZXR0aW5nIHRoZSBtZXRhIGRhdGEgZmFpbGVkOiAiICsgc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2hlY2tzIGlmIGEgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gaXMgdmFsaWQgb3Igbm90CiAgICAgICogYnkgcXVlcnlpbmcgYSB0YWJsZS4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JY29uCTxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAotICAgICAqIEBwYXJhbQl0YWJsZU5hbWUJdGFibGUgd2hpY2ggc2hvdWxkIGJlIHF1ZXJpZWQKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqCisgICAgICogQHBhcmFtICAgIGNvbiAgICA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKKyAgICAgKiBAcGFyYW0gICAgdGFibGVOYW1lICAgIHRhYmxlIHdoaWNoIHNob3VsZCBiZSBxdWVyaWVkCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKi8KLSAgICBwcm90ZWN0ZWQgdm9pZCBpc1ZhbGlkQnlUYWJsZVF1ZXJ5KGphdmEuc3FsLkNvbm5lY3Rpb24gY29uLCAKKyAgICBwcm90ZWN0ZWQgdm9pZCBpc1ZhbGlkQnlUYWJsZVF1ZXJ5KGphdmEuc3FsLkNvbm5lY3Rpb24gY29uLAogICAgICAgICBTdHJpbmcgdGFibGVOYW1lKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihjb24gPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgIgogICAgICAgICAgICAgICAgICsgInRoZSBjb25uZWN0aW9uIGlzIG51bGwiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgamF2YS5zcWwuU3RhdGVtZW50IHN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CiAgICAgICAgICAgICBqYXZhLnNxbC5SZXN1bHRTZXQgcnMgPSBzdG10LmV4ZWN1dGVRdWVyeSgiU0VMRUNUICogRlJPTSAiICsgdGFibGVOYW1lKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19leGVjdXRlIik7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2V4ZWN1dGUiKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzICIKICAgICAgICAgICAgICAgICArICJxdWVyeWluZyB0aGUgdGFibGUgIiArIHRhYmxlTmFtZSArICIgZmFpbGVkOiAiICsgc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgaXNvbGF0aW9uIGxldmVsIHNwZWNpZmllZCBpbiB0aGUgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPgogICAgICAqIGZvciB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHBhc3NlZC4KICAgICAgKgotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBpc29sYXRpb24gcHJvcGVydHkgaXMgaW52YWxpZAotICAgICAqCQkJCQlvciBpZiB0aGUgaXNvbGF0aW9uIGNhbm5vdCBiZSBzZXQgb3ZlciB0aGUgY29ubmVjdGlvbgorICAgICAqIEBwYXJhbSAgICBtYyAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBpc29sYXRpb24gcHJvcGVydHkgaXMgaW52YWxpZAorICAgICAqICAgICAgICAgICAgICAgICAgICBvciBpZiB0aGUgaXNvbGF0aW9uIGNhbm5vdCBiZSBzZXQgb3ZlciB0aGUgY29ubmVjdGlvbgogICAgICAqLwogICAgIHByb3RlY3RlZCB2b2lkIHNldElzb2xhdGlvbihjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWMpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7Ci0gICAgCQotICAgIAlqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiA9IG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKTsKLSAgICAJaWYoY29uID09IG51bGwpIHsKLSAgICAJICAgIHJldHVybjsKLSAgICAJfQotICAgIAkKLSAgICAJU3RyaW5nIHRyYW5Jc29sYXRpb24gPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTik7Ci0gICAgCWlmKHRyYW5Jc29sYXRpb24gIT0gbnVsbCAmJiB0cmFuSXNvbGF0aW9uLmVxdWFscygiIikgPT0gZmFsc2UpIHsKLSAgICAJICAgIGludCB0cmFuSXNvbGF0aW9uSW50ID0gZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb25JbnQodHJhbklzb2xhdGlvbik7Ci0gICAgCSAgICB0cnkgewotICAgIAkgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbih0cmFuSXNvbGF0aW9uSW50KTsKLSAgICAJICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3R4X2xldmVsIik7Ci0gICAgCSAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGNvdWxkICIKLSAgICAJICAgICAgICAgICAgKyAibm90IGJlIHNldDogIiArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAJICAgIH0KLSAgICAJfQorCisgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gY29uID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpOworICAgICAgICBpZihjb24gPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgU3RyaW5nIHRyYW5Jc29sYXRpb24gPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTik7CisgICAgICAgIGlmKHRyYW5Jc29sYXRpb24gIT0gbnVsbCAmJiB0cmFuSXNvbGF0aW9uLmVxdWFscygiIikgPT0gZmFsc2UpIHsKKyAgICAgICAgICAgIGludCB0cmFuSXNvbGF0aW9uSW50ID0gZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb25JbnQodHJhbklzb2xhdGlvbik7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbih0cmFuSXNvbGF0aW9uSW50KTsKKyAgICAgICAgICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKKyAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3R4X2xldmVsIik7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGNvdWxkICIKKyAgICAgICAgICAgICAgICAgICAgKyAibm90IGJlIHNldDogIiArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJlc2V0cyB0aGUgaXNvbGF0aW9uIGxldmVsIGZvciB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHBhc3NlZC4KICAgICAgKiBJZiB0aGUgdHJhbnNhY3Rpb24gbGV2ZWwgaXMgdG8gYmUgZ3VhcmFudGVlZCB0byBiZSB0aGUgc2FtZSBhcyB0aGUgb25lCkBAIC0zNzMsMzgyICszNzMsMzgyIEBACiAgICAgICogaXNvbGF0aW9uIGxldmVsIGZyb20gdGhlIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gcGFzc2VkLiBFbHNlLAogICAgICAqIGl0IHNldHMgaXQgdG8gdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBwYXNzZWQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWMJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+Ci0gICAgICogQHBhcmFtCXRyYW5Jc29sCWludAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIGlzb2xhdGlvbiBwcm9wZXJ0eSBpcyBpbnZhbGlkCi0gICAgICoJCQkJCW9yIGlmIHRoZSBpc29sYXRpb24gY2Fubm90IGJlIHNldCBvdmVyIHRoZSBjb25uZWN0aW9uCisgICAgICogQHBhcmFtICAgIG1jICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB0cmFuSXNvbCAgICBpbnQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBpc29sYXRpb24gcHJvcGVydHkgaXMgaW52YWxpZAorICAgICAqICAgICAgICAgICAgICAgICAgICBvciBpZiB0aGUgaXNvbGF0aW9uIGNhbm5vdCBiZSBzZXQgb3ZlciB0aGUgY29ubmVjdGlvbgogICAgICAqLwogICAgIHZvaWQgcmVzZXRJc29sYXRpb24oY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1jLCBpbnQgdHJhbklzb2wpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7Ci0gICAgCQotICAgIAlqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiA9IG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKTsKLSAgICAJaWYoY29uID09IG51bGwpIHsKLSAgICAJICAgIHJldHVybjsKLSAgICAJfQotICAgIAkKLSAgICAJU3RyaW5nIHRyYW5Jc29sYXRpb24gPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTik7Ci0gICAgCWlmKHRyYW5Jc29sYXRpb24gIT0gbnVsbCAmJiB0cmFuSXNvbGF0aW9uLmVxdWFscygiIikgPT0gZmFsc2UpIHsKLSAgICAJICAgIFN0cmluZyBndWFyYW50ZWVJc29sYXRpb25MZXZlbCA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkdVQVJBTlRFRUlTT0xBVElPTkxFVkVMKTsKLSAgICAJICAgIAotICAgIAkgICAgaWYoZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwgIT0gbnVsbCAmJiBndWFyYW50ZWVJc29sYXRpb25MZXZlbC5lcXVhbHMoIiIpID09IGZhbHNlKSB7Ci0gICAgCSAgICAgICAgYm9vbGVhbiBndWFyYW50ZWUgPSAobmV3IEJvb2xlYW4oZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwudG9Mb3dlckNhc2UoKSkpLmJvb2xlYW5WYWx1ZSgpOwotICAgIAkgICAgICAgIAotICAgIAkgICAgICAgIGlmKGd1YXJhbnRlZSkgewotICAgIAkgICAgICAgICAgICBpbnQgdHJhbklzb2xhdGlvbkludCA9IGdldFRyYW5zYWN0aW9uSXNvbGF0aW9uSW50KHRyYW5Jc29sYXRpb24pOwotICAgIAkgICAgICAgICAgICB0cnkgewotICAgIAkgICAgICAgICAgICAgICAgaWYodHJhbklzb2xhdGlvbkludCAhPSBjb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKSkgewotICAgIAkgICAgICAgICAgICAgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbih0cmFuSXNvbGF0aW9uSW50KTsKLSAgICAJICAgICAgICAgICAgICAgIH0KLSAgICAJICAgICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y190eF9sZXZlbCIpOwotICAgIAkgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgaXNvbGF0aW9uIGxldmVsIGNvdWxkIG5vdCBiZSBzZXQ6ICIKLSAgICAJICAgICAgICAgICAgICAgICAgICArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAJICAgICAgICAgICAgfQotICAgIAkgICAgICAgIH0gZWxzZSB7Ci0gICAgCSAgICAgICAgICAgIHRyeSB7Ci0gICAgCSAgICAgICAgICAgICAgICBpZih0cmFuSXNvbCAhPSBjb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKSkgewotICAgIAkgICAgICAgICAgICAgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbih0cmFuSXNvbCk7Ci0gICAgCSAgICAgICAgICAgICAgICB9Ci0gICAgCSAgICAgICAgICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfdHhfbGV2ZWwiKTsKLSAgICAJICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGlzb2xhdGlvbiBsZXZlbCBjb3VsZCBub3QgYmUgc2V0OiAiCi0gICAgCSAgICAgICAgICAgICAgICAgICAgKyBzcWxlLmdldE1lc3NhZ2UoKSk7Ci0gICAgCSAgICAgICAgICAgIH0KLSAgICAJICAgICAgICB9Ci0gICAgCSAgICB9Ci0gICAgCX0KKworICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiA9IG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKTsKKyAgICAgICAgaWYoY29uID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFN0cmluZyB0cmFuSXNvbGF0aW9uID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04pOworICAgICAgICBpZih0cmFuSXNvbGF0aW9uICE9IG51bGwgJiYgdHJhbklzb2xhdGlvbi5lcXVhbHMoIiIpID09IGZhbHNlKSB7CisgICAgICAgICAgICBTdHJpbmcgZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwgPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5HVUFSQU5URUVJU09MQVRJT05MRVZFTCk7CisKKyAgICAgICAgICAgIGlmKGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsICE9IG51bGwgJiYgZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwuZXF1YWxzKCIiKSA9PSBmYWxzZSkgeworICAgICAgICAgICAgICAgIGJvb2xlYW4gZ3VhcmFudGVlID0gKG5ldyBCb29sZWFuKGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsLnRvTG93ZXJDYXNlKCkpKS5ib29sZWFuVmFsdWUoKTsKKworICAgICAgICAgICAgICAgIGlmKGd1YXJhbnRlZSkgeworICAgICAgICAgICAgICAgICAgICBpbnQgdHJhbklzb2xhdGlvbkludCA9IGdldFRyYW5zYWN0aW9uSXNvbGF0aW9uSW50KHRyYW5Jc29sYXRpb24pOworICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYodHJhbklzb2xhdGlvbkludCAhPSBjb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbih0cmFuSXNvbGF0aW9uSW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgeworICAgICAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y190eF9sZXZlbCIpOworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgaXNvbGF0aW9uIGxldmVsIGNvdWxkIG5vdCBiZSBzZXQ6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZih0cmFuSXNvbCAhPSBjb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbih0cmFuSXNvbCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKKyAgICAgICAgICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfdHhfbGV2ZWwiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGlzb2xhdGlvbiBsZXZlbCBjb3VsZCBub3QgYmUgc2V0OiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBzcWxlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBpbnRlZ2VyIGVxdWl2YWxlbnQgb2YgdGhlIHN0cmluZyBzcGVjaWZ5aW5nCiAgICAgICogdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbi4KICAgICAgKgotICAgICAqIEBwYXJhbQl0cmFuSXNvbGF0aW9uCXN0cmluZyBzcGVjaWZ5aW5nIHRoZSBpc29sYXRpb24gbGV2ZWwKLSAgICAgKiBAcmV0dXJuCXRyYW5Jc29sYXRpb25JbnQJdGhlIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IGNvbnN0YW50Ci0gICAgICoJCQkJCWZvciB0aGUgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIGlzb2xhdGlvbi4KKyAgICAgKiBAcGFyYW0gICAgdHJhbklzb2xhdGlvbiAgICBzdHJpbmcgc3BlY2lmeWluZyB0aGUgaXNvbGF0aW9uIGxldmVsCisgICAgICogQHJldHVybiAgICB0cmFuSXNvbGF0aW9uSW50ICAgIHRoZSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBjb25zdGFudAorICAgICAqICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBpc29sYXRpb24uCiAgICAgICovCiAgICAgcHJpdmF0ZSBpbnQgZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb25JbnQoU3RyaW5nIHRyYW5Jc29sYXRpb24pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7Ci0gICAgCWlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgicmVhZC11bmNvbW1pdHRlZCIpKSB7Ci0gICAgCSAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9SRUFEX1VOQ09NTUlUVEVEOwotICAgIAl9IGVsc2UgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJyZWFkLWNvbW1pdHRlZCIpKSB7Ci0gICAgCSAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9SRUFEX0NPTU1JVFRFRDsKLSAgICAJfSBlbHNlIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgicmVwZWF0YWJsZS1yZWFkIikpIHsKLSAgICAJICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1JFUEVBVEFCTEVfUkVBRDsKLSAgICAJfSBlbHNlIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgic2VyaWFsaXphYmxlIikpIHsKLSAgICAJICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1NFUklBTElaQUJMRTsKLSAgICAJfSBlbHNlIHsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiSW52YWxpZCB0cmFuc2FjdGlvbiBpc29sYXRpb247IHRoZSB0cmFuc2FjdGlvbiAiCi0gICAgCSAgICAgICAgKyAiaXNvbGF0aW9uIGxldmVsIGNhbiBiZSBlbXB0eSBvciBhbnkgb2YgdGhlIGZvbGxvd2luZzogIgotICAgIAkgICAgICAgICAgICArICJyZWFkLXVuY29tbWl0dGVkLCByZWFkLWNvbW1pdHRlZCwgcmVwZWF0YWJsZS1yZWFkLCBzZXJpYWxpemFibGUiKTsKLSAgICAJfQorICAgICAgICBpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInJlYWQtdW5jb21taXR0ZWQiKSkgeworICAgICAgICAgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fUkVBRF9VTkNPTU1JVFRFRDsKKyAgICAgICAgfSBlbHNlIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgicmVhZC1jb21taXR0ZWQiKSkgeworICAgICAgICAgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fUkVBRF9DT01NSVRURUQ7CisgICAgICAgIH0gZWxzZSBpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInJlcGVhdGFibGUtcmVhZCIpKSB7CisgICAgICAgICAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9SRVBFQVRBQkxFX1JFQUQ7CisgICAgICAgIH0gZWxzZSBpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInNlcmlhbGl6YWJsZSIpKSB7CisgICAgICAgICAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9TRVJJQUxJWkFCTEU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkludmFsaWQgdHJhbnNhY3Rpb24gaXNvbGF0aW9uOyB0aGUgdHJhbnNhY3Rpb24gIgorICAgICAgICAgICAgICAgICsgImlzb2xhdGlvbiBsZXZlbCBjYW4gYmUgZW1wdHkgb3IgYW55IG9mIHRoZSBmb2xsb3dpbmc6ICIKKyAgICAgICAgICAgICAgICAgICAgKyAicmVhZC11bmNvbW1pdHRlZCwgcmVhZC1jb21taXR0ZWQsIHJlcGVhdGFibGUtcmVhZCwgc2VyaWFsaXphYmxlIik7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGxvZyB3cml0ZXIgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlvdXQJPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICogQHNlZQk8Y29kZT5nZXRMb2dXcml0ZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIG91dCAgICA8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldExvZ1dyaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRMb2dXcml0ZXIoamF2YS5pby5QcmludFdyaXRlciBvdXQpIHsKICAgICAgICAgbG9nV3JpdGVyID0gb3V0OwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgYXNzb2NpYXRlZCA8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IEphdmFCZWFuLgogICAgICAqCi0gICAgICogQHBhcmFtCXJhCTxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgCi0gICAgICoJCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHNlZQk8Y29kZT5nZXRSZXNvdXJjZUFkYXB0ZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHJhICAgIDxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyAgICAgKiAgICAgICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldFJlc291cmNlQWRhcHRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRSZXNvdXJjZUFkYXB0ZXIoamFrYXJ0YS5yZXNvdXJjZS5zcGkuUmVzb3VyY2VBZGFwdGVyIHJhKSB7Ci0gICAgICAgIHRoaXMucmEgPSByYTsgICAKKyAgICAgICAgdGhpcy5yYSA9IHJhOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHVzZXIgbmFtZQogICAgICAqCi0gICAgICogQHBhcmFtCXVzZXIJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB1c2VyICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRVc2VyKFN0cmluZyB1c2VyKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlVTRVJOQU1FLCB1c2VyKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSB1c2VyIG5hbWUKICAgICAgKgotICAgICAqIEByZXR1cm4JdXNlcgorICAgICAqIEByZXR1cm4gICAgdXNlcgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VXNlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlVTRVJOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB1c2VyIG5hbWUKICAgICAgKgotICAgICAqIEBwYXJhbQl1c2VyCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdXNlciAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0dXNlcihTdHJpbmcgdXNlcikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5VU0VSTkFNRSwgdXNlcik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgdXNlciBuYW1lCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXVzZXIKKyAgICAgKiBAcmV0dXJuICAgIHVzZXIKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHVzZXIoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5VU0VSTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgcGFzc3dvcmQKICAgICAgKgotICAgICAqIEBwYXJhbQlwYXNzd2QJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBwYXNzd2QgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFBhc3N3b3JkKFN0cmluZyBwYXNzd2QpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUEFTU1dPUkQsIHBhc3N3ZCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcGFzc3dvcmQKICAgICAgKgotICAgICAqIEByZXR1cm4JcGFzc3dkCisgICAgICogQHJldHVybiAgICBwYXNzd2QKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFBhc3N3b3JkKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUEFTU1dPUkQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHBhc3N3b3JkCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcGFzc3dkCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcGFzc3dkICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRwYXNzd29yZChTdHJpbmcgcGFzc3dkKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBBU1NXT1JELCBwYXNzd2QpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHBhc3N3b3JkCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXBhc3N3ZAorICAgICAqIEByZXR1cm4gICAgcGFzc3dkCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRwYXNzd29yZCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBBU1NXT1JEKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBkYXRhIHNvdXJjZQogICAgICAqCi0gICAgICogQHBhcmFtCWNsYXNzTmFtZQk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGNsYXNzTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Q2xhc3NOYW1lKFN0cmluZyBjbGFzc05hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ0xBU1NOQU1FLCBjbGFzc05hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGRhdGEgc291cmNlCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWNsYXNzTmFtZQorICAgICAqIEByZXR1cm4gICAgY2xhc3NOYW1lCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRDbGFzc05hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DTEFTU05BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGRhdGEgc291cmNlCiAgICAgICoKLSAgICAgKiBAcGFyYW0JY2xhc3NOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgY2xhc3NOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRjbGFzc05hbWUoU3RyaW5nIGNsYXNzTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5DTEFTU05BTUUsIGNsYXNzTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgZGF0YSBzb3VyY2UKICAgICAgKgotICAgICAqIEByZXR1cm4JY2xhc3NOYW1lCisgICAgICogQHJldHVybiAgICBjbGFzc05hbWUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGNsYXNzTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNMQVNTTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyBpZiBjb25uZWN0aW9uIHZhbGlkYXRpb24gaXMgcmVxdWlyZWQgb3Igbm90CiAgICAgICoKLSAgICAgKiBAcGFyYW0JY29uVmxkUmVxCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgY29uVmxkUmVxICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRDb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkKFN0cmluZyBjb25WbGRSZXEpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ09OTkVDVElPTlZBTElEQVRJT05SRVFVSVJFRCwgY29uVmxkUmVxKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIGlmIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiBpcyByZXF1aXJlZCBvciBub3QKICAgICAgKgotICAgICAqIEByZXR1cm4JY29ubmVjdGlvbiB2YWxpZGF0aW9uIHJlcXVpcmVtZW50CisgICAgICogQHJldHVybiAgICBjb25uZWN0aW9uIHZhbGlkYXRpb24gcmVxdWlyZW1lbnQKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldENvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVEKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIGlmIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiBpcyByZXF1aXJlZCBvciBub3QKICAgICAgKgotICAgICAqIEBwYXJhbQljb25WbGRSZXEJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBjb25WbGRSZXEgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGNvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQoU3RyaW5nIGNvblZsZFJlcSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5DT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVELCBjb25WbGRSZXEpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgaWYgY29ubmVjdGlvbiB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkIG9yIG5vdAogICAgICAqCi0gICAgICogQHJldHVybgljb25uZWN0aW9uIHZhbGlkYXRpb24gcmVxdWlyZW1lbnQKKyAgICAgKiBAcmV0dXJuICAgIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiByZXF1aXJlbWVudAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Y29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHZhbGlkYXRpb24gbWV0aG9kIHJlcXVpcmVkCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdmFsaWRhdGlvbk1ldGhvZAk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHZhbGlkYXRpb25NZXRob2QgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFZhbGlkYXRpb25NZXRob2QoU3RyaW5nIHZhbGlkYXRpb25NZXRob2QpIHsKICAgICAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05NRVRIT0QsIHZhbGlkYXRpb25NZXRob2QpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiBtZXRob2QgdHlwZQogICAgICAqCi0gICAgICogQHJldHVybgl2YWxpZGF0aW9uIG1ldGhvZAorICAgICAqIEByZXR1cm4gICAgdmFsaWRhdGlvbiBtZXRob2QKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFZhbGlkYXRpb25NZXRob2QoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OTUVUSE9EKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB2YWxpZGF0aW9uIG1ldGhvZCByZXF1aXJlZAogICAgICAqCi0gICAgICogQHBhcmFtCXZhbGlkYXRpb25NZXRob2QJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB2YWxpZGF0aW9uTWV0aG9kICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXR2YWxpZGF0aW9uTWV0aG9kKFN0cmluZyB2YWxpZGF0aW9uTWV0aG9kKSB7CiAgICAgICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OTUVUSE9ELCB2YWxpZGF0aW9uTWV0aG9kKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSBjb25uZWN0aW9uIHZhbGlkYXRpb24gbWV0aG9kIHR5cGUKICAgICAgKgotICAgICAqIEByZXR1cm4JdmFsaWRhdGlvbiBtZXRob2QKKyAgICAgKiBAcmV0dXJuICAgIHZhbGlkYXRpb24gbWV0aG9kCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXR2YWxpZGF0aW9uTWV0aG9kKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTk1FVEhPRCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdGFibGUgY2hlY2tlZCBmb3IgZHVyaW5nIHZhbGlkYXRpb24KICAgICAgKgotICAgICAqIEBwYXJhbQl0YWJsZQk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHRhYmxlICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRWYWxpZGF0aW9uVGFibGVOYW1lKFN0cmluZyB0YWJsZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OVEFCTEVOQU1FLCB0YWJsZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdGFibGUgY2hlY2tlZCBmb3IgZHVyaW5nIHZhbGlkYXRpb24KICAgICAgKgotICAgICAqIEByZXR1cm4JdGFibGUKKyAgICAgKiBAcmV0dXJuICAgIHRhYmxlCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRWYWxpZGF0aW9uVGFibGVOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTlRBQkxFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdGFibGUgY2hlY2tlZCBmb3IgZHVyaW5nIHZhbGlkYXRpb24KICAgICAgKgotICAgICAqIEBwYXJhbQl0YWJsZQk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHRhYmxlICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXR2YWxpZGF0aW9uVGFibGVOYW1lKFN0cmluZyB0YWJsZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OVEFCTEVOQU1FLCB0YWJsZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdGFibGUgY2hlY2tlZCBmb3IgZHVyaW5nIHZhbGlkYXRpb24KICAgICAgKgotICAgICAqIEByZXR1cm4JdGFibGUKKyAgICAgKiBAcmV0dXJuICAgIHRhYmxlCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXR2YWxpZGF0aW9uVGFibGVOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTlRBQkxFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdHJuSXNvbGF0aW9uCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdHJuSXNvbGF0aW9uICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRUcmFuc2FjdGlvbklzb2xhdGlvbihTdHJpbmcgdHJuSXNvbGF0aW9uKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OLCB0cm5Jc29sYXRpb24pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqCi0gICAgICogQHJldHVybgl0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKKyAgICAgKiBAcmV0dXJuICAgIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdHJuSXNvbGF0aW9uCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdHJuSXNvbGF0aW9uICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXR0cmFuc2FjdGlvbklzb2xhdGlvbihTdHJpbmcgdHJuSXNvbGF0aW9uKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OLCB0cm5Jc29sYXRpb24pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqCi0gICAgICogQHJldHVybgl0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKKyAgICAgKiBAcmV0dXJuICAgIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0dHJhbnNhY3Rpb25Jc29sYXRpb24oKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyBpZiB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsIGlzIHRvIGJlIGd1YXJhbnRlZWQKICAgICAgKgotICAgICAqIEBwYXJhbQlndWFyYW50ZWVJc29sYXRpb24JPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBndWFyYW50ZWVJc29sYXRpb24gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldEd1YXJhbnRlZUlzb2xhdGlvbkxldmVsKFN0cmluZyBndWFyYW50ZWVJc29sYXRpb24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwsIGd1YXJhbnRlZUlzb2xhdGlvbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWlzb2xhdGlvbiBsZXZlbCBndWFyYW50ZWUKKyAgICAgKiBAcmV0dXJuICAgIGlzb2xhdGlvbiBsZXZlbCBndWFyYW50ZWUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldEd1YXJhbnRlZUlzb2xhdGlvbkxldmVsKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgaWYgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbCBpcyB0byBiZSBndWFyYW50ZWVkCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZ3VhcmFudGVlSXNvbGF0aW9uCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZ3VhcmFudGVlSXNvbGF0aW9uICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRndWFyYW50ZWVJc29sYXRpb25MZXZlbChTdHJpbmcgZ3VhcmFudGVlSXNvbGF0aW9uKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkdVQVJBTlRFRUlTT0xBVElPTkxFVkVMLCBndWFyYW50ZWVJc29sYXRpb24pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqCi0gICAgICogQHJldHVybglpc29sYXRpb24gbGV2ZWwgZ3VhcmFudGVlCisgICAgICogQHJldHVybiAgICBpc29sYXRpb24gbGV2ZWwgZ3VhcmFudGVlCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRndWFyYW50ZWVJc29sYXRpb25MZXZlbCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkdVQVJBTlRFRUlTT0xBVElPTkxFVkVMKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9SZXNvdXJjZUFkYXB0ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9SZXNvdXJjZUFkYXB0ZXIuamF2YQppbmRleCA1NTViZTc3Li5lYTU0MDc2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvUmVzb3VyY2VBZGFwdGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L1Jlc291cmNlQWRhcHRlci5qYXZhCkBAIC0yNiw4ICsyNiw4IEBACiAvKioKICAqIDxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gaW1wbGVtZW50YXRpb24gZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wOC8wNQotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDgvMDUKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIHB1YmxpYyBjbGFzcyBSZXNvdXJjZUFkYXB0ZXIgaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5SZXNvdXJjZUFkYXB0ZXIgewogCkBAIC0zNyw1MiArMzcsNTIgQEAKICAgICAgKiBFbXB0eSBtZXRob2QgaW1wbGVtZW50YXRpb24gZm9yIGVuZHBvaW50QWN0aXZhdGlvbgogICAgICAqIHdoaWNoIGp1c3QgdGhyb3dzIDxjb2RlPk5vdFN1cHBvcnRlZEV4Y2VwdGlvbjwvY29kZT4KICAgICAgKgotICAgICAqIEBwYXJhbQltZWYJPGNvZGU+TWVzc2FnZUVuZHBvaW50RmFjdG9yeTwvY29kZT4KLSAgICAgKiBAcGFyYW0JYXMJPGNvZGU+QWN0aXZhdGlvblNwZWM8L2NvZGU+Ci0gICAgICogQHRocm93cwk8Y29kZT5Ob3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+CisgICAgICogQHBhcmFtICAgIG1lZiAgICA8Y29kZT5NZXNzYWdlRW5kcG9pbnRGYWN0b3J5PC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBhcyAgICA8Y29kZT5BY3RpdmF0aW9uU3BlYzwvY29kZT4KKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPk5vdFN1cHBvcnRlZEV4Y2VwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlbmRwb2ludEFjdGl2YXRpb24oTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBtZWYsIEFjdGl2YXRpb25TcGVjIGFzKSB0aHJvd3MgTm90U3VwcG9ydGVkRXhjZXB0aW9uIHsKICAgICAgICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiVGhpcyBtZXRob2QgaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBKREJDIGNvbm5lY3RvciIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEVtcHR5IG1ldGhvZCBpbXBsZW1lbnRhdGlvbiBmb3IgZW5kcG9pbnREZWFjdGl2YXRpb24KICAgICAgKgotICAgICAqIEBwYXJhbQltZWYJPGNvZGU+TWVzc2FnZUVuZHBvaW50RmFjdG9yeTwvY29kZT4KLSAgICAgKiBAcGFyYW0JYXMJPGNvZGU+QWN0aXZhdGlvblNwZWM8L2NvZGU+CisgICAgICogQHBhcmFtICAgIG1lZiAgICA8Y29kZT5NZXNzYWdlRW5kcG9pbnRGYWN0b3J5PC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBhcyAgICA8Y29kZT5BY3RpdmF0aW9uU3BlYzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlbmRwb2ludERlYWN0aXZhdGlvbihNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IG1lZiwgQWN0aXZhdGlvblNwZWMgYXMpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBFbXB0eSBtZXRob2QgaW1wbGVtZW50YXRpb24gZm9yIGdldFhBUmVzb3VyY2VzCiAgICAgICogd2hpY2gganVzdCB0aHJvd3MgPGNvZGU+Tm90U3VwcG9ydGVkRXhjZXB0aW9uPC9jb2RlPgogICAgICAqCi0gICAgICogQHBhcmFtCXNwZWNzCTxjb2RlPkFjdGl2YXRpb25TcGVjPC9jb2RlPiBhcnJheQotICAgICAqIEB0aHJvd3MJPGNvZGU+Tm90U3VwcG9ydGVkRXhjZXB0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBzcGVjcyAgICA8Y29kZT5BY3RpdmF0aW9uU3BlYzwvY29kZT4gYXJyYXkKKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPk5vdFN1cHBvcnRlZEV4Y2VwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgWEFSZXNvdXJjZVtdIGdldFhBUmVzb3VyY2VzKEFjdGl2YXRpb25TcGVjW10gc3BlY3MpIHRocm93cyBOb3RTdXBwb3J0ZWRFeGNlcHRpb24gewogICAgICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJUaGlzIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIEpEQkMgY29ubmVjdG9yIik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogRW1wdHkgaW1wbGVtZW50YXRpb24gb2Ygc3RhcnQgbWV0aG9kCiAgICAgICoKLSAgICAgKiBAcGFyYW0JY3R4CTxjb2RlPkJvb3RzdHJhcENvbnRleHQ8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGN0eCAgICA8Y29kZT5Cb290c3RyYXBDb250ZXh0PC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHN0YXJ0KEJvb3RzdHJhcENvbnRleHQgY3R4KSB0aHJvd3MgUmVzb3VyY2VBZGFwdGVySW50ZXJuYWxFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc291cmNlIEFkYXB0ZXIgaXMgc3RhcnRpbmcgd2l0aCBjb25maWd1cmF0aW9uIDoiICsgcmFQcm9wKTsKICAgICAgICAgaWYgKHJhUHJvcCA9PSBudWxsIHx8ICFyYVByb3AuZXF1YWxzKCJWQUxJRCIpKSB7Ci0JICAgIHRocm93IG5ldyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbigiUmVzb3VyY2UgYWRhcHRlciBjYW5ub3Qgc3RhcnQuIEl0IGlzIGNvbmZpZ3VyZWQgYXMgOiAiICsgcmFQcm9wKTsKLQl9IAorICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VBZGFwdGVySW50ZXJuYWxFeGNlcHRpb24oIlJlc291cmNlIGFkYXB0ZXIgY2Fubm90IHN0YXJ0LiBJdCBpcyBjb25maWd1cmVkIGFzIDogIiArIHJhUHJvcCk7CiAgICAgfQotICAgIAorICAgIH0KKwogICAgIC8qKgogICAgICAqIEVtcHR5IGltcGxlbWVudGF0aW9uIG9mIHN0b3AgbWV0aG9kCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc3RvcCgpIHsKLSAgICAKKwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldFJBUHJvcGVydHkoU3RyaW5nIHMpIHsKQEAgLTkyLDUgKzkyLDUgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldFJBUHJvcGVydHkoKSB7CiAgICAgICAgIHJldHVybiByYVByb3A7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L2J1aWxkLnhtbAppbmRleCA1ZTE0ZDQ0Li5mZjBmMDJiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9idWlsZC54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPHByb2plY3QgbmFtZT0iamRiY19jb25uZWN0b3IiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9IiBkZWZhdWx0PSJidWlsZCI+CiAgIDxwcm9wZXJ0eSBuYW1lPSJwa2cuZGlyIiB2YWx1ZT0iY29tL3N1bi9namMvc3BpIi8+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iPgogICAgIDxhbnQgYW50ZmlsZT0iYnVpbGQueG1sIiBkaXI9IiR7Z2pjLmhvbWV9L2JpbiIgdGFyZ2V0PSJjbGVhbiIvPgogICA8L3RhcmdldD4KQEAgLTI5LDU1ICsyOSw1NSBAQAogICA8L3RhcmdldD4KIAogICA8dGFyZ2V0IG5hbWU9InBhY2thZ2UxNCI+Ci0gICAgCQotICAgIAk8bWtkaXIgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiLz4KLSAgICAJCi0JPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvamRiYy5qYXIiIGJhc2VkaXI9IiR7Y2xhc3MuZGlyfSIKKworICAgICAgICA8bWtkaXIgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiLz4KKworICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L2pkYmMuamFyIiBiYXNlZGlyPSIke2NsYXNzLmRpcn0iCiAgICAgICAgIGluY2x1ZGVzPSIke3BrZy5kaXJ9LyoqLyosIGNvbS9zdW4vZ2pjL3V0aWwvKiovKiwgY29tL3N1bi9namMvY29tbW9uLyoqLyoiIGV4Y2x1ZGVzPSJjb20vc3VuL2dqYy9jY2kvKiovKixjb20vc3VuL2dqYy9zcGkvMS40LyoqLyoiLz4KLSAgICAgICAgCisKICAgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19jcC5yYXIiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIgaW5jbHVkZXM9ImpkYmMuamFyIi8+Ci0gICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLWNwLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CQorICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS1jcC54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgogICAgICAgICA8L2NvcHk+Ci0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19jcC5yYXIiIHVwZGF0ZT0ieWVzIj4KLSAgIAkJPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgotICAgCQkJPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+Ci0gICAJCTwvbWV0YWluZj4KLSAgIAk8L2phcj4KLSAgIAkKLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX3hhLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KLSAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEteGEueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4JCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19jcC5yYXIiIHVwZGF0ZT0ieWVzIj4KKyAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgorICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+CisgICAgICAgICAgIDwvbWV0YWluZj4KKyAgICAgICA8L2phcj4KKworICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19feGEucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgorICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS14YS54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgogICAgICAgICA8L2NvcHk+Ci0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX194YS5yYXIiIHVwZGF0ZT0ieWVzIj4KLSAgIAkJPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgotICAgCQkJPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+Ci0gICAJCTwvbWV0YWluZj4KLSAgIAk8L2phcj4KLSAgIAkKLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RtLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KLSAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEtZG0ueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4JCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX194YS5yYXIiIHVwZGF0ZT0ieWVzIj4KKyAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgorICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+CisgICAgICAgICAgIDwvbWV0YWluZj4KKyAgICAgICA8L2phcj4KKworICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZG0ucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgorICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS1kbS54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgogICAgICAgICA8L2NvcHk+Ci0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kbS5yYXIiIHVwZGF0ZT0ieWVzIj4KLSAgIAkJPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgotICAgCQkJPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+Ci0gICAJCTwvbWV0YWluZj4KLSAgIAk8L2phcj4KLSAgIAkKLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RzLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KLSAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEtZHMueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4JCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kbS5yYXIiIHVwZGF0ZT0ieWVzIj4KKyAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgorICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+CisgICAgICAgICAgIDwvbWV0YWluZj4KKyAgICAgICA8L2phcj4KKworICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZHMucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgorICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS1kcy54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgogICAgICAgICA8L2NvcHk+Ci0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kcy5yYXIiIHVwZGF0ZT0ieWVzIj4KLSAgIAkJPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgotICAgCQkJPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+Ci0gICAJCTwvbWV0YWluZj4KLSAgIAk8L2phcj4KLSAgIAkKLSAgIAk8ZGVsZXRlIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9jb20iLz4KLSAgIAk8ZGVsZXRlIGZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9qZGJjLmphciIvPgotICAgCTxkZWxldGUgZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIvPgotICAgCQorICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZHMucmFyIiB1cGRhdGU9InllcyI+CisgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KKyAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgorICAgICAgICAgICA8L21ldGFpbmY+CisgICAgICAgPC9qYXI+CisKKyAgICAgICA8ZGVsZXRlIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9jb20iLz4KKyAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9qZGJjLmphciIvPgorICAgICAgIDxkZWxldGUgZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIvPgorCiAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQxNCIgZGVwZW5kcz0iY29tcGlsZTE0LCBwYWNrYWdlMTQiLz4KICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkMTMiLz4KLQk8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJidWlsZDE0LCBidWlsZDEzIi8+CisgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iYnVpbGQxNCwgYnVpbGQxMyIvPgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L3JhLWRzLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9yYS1kcy54bWwKaW5kZXggMjc3ZWZiYS4uZjdlYTgyYiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L3JhLWRzLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvcmEtZHMueG1sCkBAIC0yMiw2OSArMjIsNjkgQEAKICAgICAgICAgICAgdmVyc2lvbj0iMS41Ij4KIAogICAgIDwhLS0gVGhlcmUgY2FuIGJlIGFueSBudW1iZXIgb2YgImRlc2NyaXB0aW9uIiBlbGVtZW50cyBpbmNsdWRpbmcgMCAtLT4KLSAgICA8IS0tIFRoaXMgZmllbGQgY2FuIGJlIG9wdGlvbmFsbHkgdXNlZCBieSB0aGUgZHJpdmVyIHZlbmRvciB0byBwcm92aWRlIGEgCisgICAgPCEtLSBUaGlzIGZpZWxkIGNhbiBiZSBvcHRpb25hbGx5IHVzZWQgYnkgdGhlIGRyaXZlciB2ZW5kb3IgdG8gcHJvdmlkZSBhCiAgICAgICAgICBkZXNjcmlwdGlvbiBmb3IgdGhlIHJlc291cmNlIGFkYXB0ZXIuCiAgICAgLS0+CiAgICAgPGRlc2NyaXB0aW9uPlJlc291cmNlIGFkYXB0ZXIgd3JhcHBpbmcgRGF0YXNvdXJjZSBpbXBsZW1lbnRhdGlvbiBvZiBkcml2ZXI8L2Rlc2NyaXB0aW9uPgotICAgIAorCiAgICAgPCEtLSBUaGVyZSBjYW4gYmUgYW55IG51bWJlciBvZiAiZGlzcGxheS1uYW1lIiBlbGVtZW50cyBpbmNsdWRpbmcgMCAtLT4KLSAgICA8IS0tIFRoZSBmaWVsZCBjYW4gYmUgb3B0aW9uYWxseSB1c2VkIGJ5IHRoZSBkcml2ZXIgdmVuZG9yIHRvIHByb3ZpZGUgYSBuYW1lIHRoYXQgCisgICAgPCEtLSBUaGUgZmllbGQgY2FuIGJlIG9wdGlvbmFsbHkgdXNlZCBieSB0aGUgZHJpdmVyIHZlbmRvciB0byBwcm92aWRlIGEgbmFtZSB0aGF0CiAgICAgICAgICBpcyBpbnRlbmRlZCB0byBiZSBkaXNwbGF5ZWQgYnkgdG9vbHMuCiAgICAgLS0+CiAgICAgPGRpc3BsYXktbmFtZT5EYXRhU291cmNlIFJlc291cmNlIEFkYXB0ZXI8L2Rpc3BsYXktbmFtZT4KLSAgICAKKwogICAgIDwhLS0gVGhlcmUgY2FuIGJlIGFueSBudW1iZXIgb2YgImljb24iIGVsZW1lbnRzIGluY2x1ZGluZyAwIC0tPgogICAgIDwhLS0gVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlLgogICAgICAgICA8aWNvbj4KLSAgICAgICAgICAgIFRoaXMgInNtYWxsLWljb24iIGVsZW1lbnQgY2FuIG9jY3VyIGF0bW9zdCBvbmNlLiBUaGlzIHNob3VsZCBzcGVjaWZ5IHRoZSAKLSAgICAgICAgICAgIGFic29sdXRlIG9yIHRoZSByZWxhdGl2ZSBwYXRoIG5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcgYSBzbWFsbCAoMTYgeCAxNikgCisgICAgICAgICAgICBUaGlzICJzbWFsbC1pY29uIiBlbGVtZW50IGNhbiBvY2N1ciBhdG1vc3Qgb25jZS4gVGhpcyBzaG91bGQgc3BlY2lmeSB0aGUKKyAgICAgICAgICAgIGFic29sdXRlIG9yIHRoZSByZWxhdGl2ZSBwYXRoIG5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcgYSBzbWFsbCAoMTYgeCAxNikKICAgICAgICAgICAgIGljb24gLSBKUEVHIG9yIEdJRiBpbWFnZS4gVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlLgogICAgICAgICAgICAgPHNtYWxsLWljb24+c21hbGxpY29uLmpwZzwvc21hbGwtaWNvbj4KLSAgICAgICAgCi0gICAgICAgICAgICBUaGlzICJsYXJnZS1pY29uIiBlbGVtZW50IGNhbiBvY2N1ciBhdG1vc3Qgb25jZS4gVGhpcyBzaG91bGQgc3BlY2lmeSB0aGUgCi0gICAgICAgICAgICBhYnNvbHV0ZSBvciB0aGUgcmVsYXRpdmUgcGF0aCBuYW1lIG9mIGEgZmlsZSBjb250YWluaW5nIGEgc21hbGwgKDMyIHggMzIpIAorCisgICAgICAgICAgICBUaGlzICJsYXJnZS1pY29uIiBlbGVtZW50IGNhbiBvY2N1ciBhdG1vc3Qgb25jZS4gVGhpcyBzaG91bGQgc3BlY2lmeSB0aGUKKyAgICAgICAgICAgIGFic29sdXRlIG9yIHRoZSByZWxhdGl2ZSBwYXRoIG5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcgYSBzbWFsbCAoMzIgeCAzMikKICAgICAgICAgICAgIGljb24gLSBKUEVHIG9yIEdJRiBpbWFnZS4gVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlLgotICAgICAgICAgICAgPGxhcmdlLWljb24+bGFyZ2VpY29uLmpwZzwvbGFyZ2UtaWNvbj4gICAKKyAgICAgICAgICAgIDxsYXJnZS1pY29uPmxhcmdlaWNvbi5qcGc8L2xhcmdlLWljb24+CiAgICAgICAgIDwvaWNvbj4KICAgICAtLT4KICAgICA8aWNvbj4KICAgICAgICAgPHNtYWxsLWljb24+PC9zbWFsbC1pY29uPgotICAgICAgICA8bGFyZ2UtaWNvbj48L2xhcmdlLWljb24+ICAgCisgICAgICAgIDxsYXJnZS1pY29uPjwvbGFyZ2UtaWNvbj4KICAgICA8L2ljb24+Ci0gICAgCisKICAgICA8IS0tIFRoZSAidmVuZG9yLW5hbWUiIGVsZW1lbnQgc2hvdWxkIG9jY3VyIGV4YWN0bHkgb25jZS4gLS0+CiAgICAgPCEtLSBUaGlzIHNob3VsZCBzcGVjaWZ5IHRoZSBuYW1lIG9mIHRoZSBkcml2ZXIgdmVuZG9yLiBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUuCiAgICAgICAgIDx2ZW5kb3ItbmFtZT5YWVogSU5DLjwvdmVuZG9yLW5hbWU+CiAgICAgLS0+CiAgICAgPHZlbmRvci1uYW1lPlN1biBNaWNyb3N5c3RlbXM8L3ZlbmRvci1uYW1lPgotICAgIAorCiAgICAgPCEtLSBUaGUgImVpcy10eXBlIiBlbGVtZW50IHNob3VsZCBvY2N1ciBleGFjdGx5IG9uY2UuIC0tPgotICAgIDwhLS0gVGhpcyBzaG91bGQgc3BlY2lmeSB0aGUgZGF0YWJhc2UsIGZvciBleGFtcGxlIHRoZSBwcm9kdWN0IG5hbWUgb2YgCisgICAgPCEtLSBUaGlzIHNob3VsZCBzcGVjaWZ5IHRoZSBkYXRhYmFzZSwgZm9yIGV4YW1wbGUgdGhlIHByb2R1Y3QgbmFtZSBvZgogICAgICAgICAgdGhlIGRhdGFiYXNlIGluZGVwZW5kZW50IG9mIGFueSB2ZXJzaW9uIGluZm9ybWF0aW9uLiBUaGUgZm9sbG93aW5nCiAgICAgICAgICBpcyBhbiBleGFtcGxlLgogICAgICAgICA8ZWlzLXR5cGU+WFlaPC9laXMtdHlwZT4KICAgICAtLT4KICAgICA8ZWlzLXR5cGU+RGF0YWJhc2U8L2Vpcy10eXBlPgotICAgIAorCiAgICAgPCEtLSBUaGUgInJlc291cmNlYWRhcHRlci12ZXJzaW9uIiBlbGVtZW50IHNob3VsZCBvY2N1ciBleGFjdGx5IG9uY2UuIC0tPgotICAgIDwhLS0gVGhpcyBzcGVjaWZpZXMgYSBzdHJpbmcgYmFzZWQgdmVyc2lvbiBvZiB0aGUgcmVzb3VyY2UgYWRhcHRlciBmcm9tIAorICAgIDwhLS0gVGhpcyBzcGVjaWZpZXMgYSBzdHJpbmcgYmFzZWQgdmVyc2lvbiBvZiB0aGUgcmVzb3VyY2UgYWRhcHRlciBmcm9tCiAgICAgICAgICB0aGUgZHJpdmVyIHZlbmRvci4gVGhlIGRlZmF1bHQgaXMgYmVpbmcgc2V0IGFzIDEuMC4gVGhlIGRyaXZlcgogICAgICAgICAgdmVuZG9yIGNhbiBjaGFuZ2UgaXQgYXMgcmVxdWlyZWQuCiAgICAgLS0+CiAgICAgPHJlc291cmNlYWRhcHRlci12ZXJzaW9uPjEuMDwvcmVzb3VyY2VhZGFwdGVyLXZlcnNpb24+Ci0gICAgCisKICAgICA8IS0tIFRoaXMgImxpY2Vuc2UiIGVsZW1lbnQgY2FuIG9jY3VyIGF0bW9zdCBvbmNlIC0tPgogICAgIDwhLS0gVGhpcyBzcGVjaWZpZXMgbGljZW5zaW5nIHJlcXVpcmVtZW50cyBmb3IgdGhlIHJlc291cmNlIGFkYXB0ZXIgbW9kdWxlLgogICAgICAgICAgVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlLgogICAgICAgICA8bGljZW5zZT4KICAgICAgICAgICAgIFRoZXJlIGNhbiBiZSBhbnkgbnVtYmVyIG9mICJkZXNjcmlwdGlvbiIgZWxlbWVudHMgaW5jbHVkaW5nIDAuCiAgICAgICAgICAgICA8ZGVzY3JpcHRpb24+Ci0gICAgICAgICAgICAgICAgVGhpcyBmaWVsZCBjYW4gYmUgb3B0aW9uYWxseSB1c2VkIGJ5IHRoZSBkcml2ZXIgdmVuZG9yIHRvIAotICAgICAgICAgICAgICAgIHByb3ZpZGUgYSBkZXNjcmlwdGlvbiBmb3IgdGhlIGxpY2Vuc2luZyByZXF1aXJlbWVudHMgb2YgdGhlIAotICAgICAgICAgICAgICAgIHJlc291cmNlIGFkYXB0ZXIgbGlrZSBkdXJhdGlvbiBvZiBsaWNlbnNlLCBudW1iZXJvZiBjb25uZWN0aW9uIAorICAgICAgICAgICAgICAgIFRoaXMgZmllbGQgY2FuIGJlIG9wdGlvbmFsbHkgdXNlZCBieSB0aGUgZHJpdmVyIHZlbmRvciB0bworICAgICAgICAgICAgICAgIHByb3ZpZGUgYSBkZXNjcmlwdGlvbiBmb3IgdGhlIGxpY2Vuc2luZyByZXF1aXJlbWVudHMgb2YgdGhlCisgICAgICAgICAgICAgICAgcmVzb3VyY2UgYWRhcHRlciBsaWtlIGR1cmF0aW9uIG9mIGxpY2Vuc2UsIG51bWJlcm9mIGNvbm5lY3Rpb24KICAgICAgICAgICAgICAgICByZXN0cmljdGlvbnMuCiAgICAgICAgICAgICA8L2Rlc2NyaXB0aW9uPgotICAgICAgICAKKwogICAgICAgICAgICAgVGhpcyBzcGVjaWZpZXMgd2hldGhlciBhIGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gZGVwbG95IGFuZCB1c2UgdGhlIHJlc291cmNlIGFkYXB0ZXIuCiAgICAgICAgICAgICBEZWZhdWx0IGlzIGZhbHNlLgogICAgICAgICAgICAgPGxpY2Vuc2UtcmVxdWlyZWQ+ZmFsc2U8L2xpY2Vuc2UtcmVxdWlyZWQ+CkBAIC05MywyNCArOTMsMjQgQEAKICAgICA8bGljZW5zZT4KICAgICAgICAgPGxpY2Vuc2UtcmVxdWlyZWQ+ZmFsc2U8L2xpY2Vuc2UtcmVxdWlyZWQ+CiAgICAgPC9saWNlbnNlPgotICAgIAorCiAgICAgPHJlc291cmNlYWRhcHRlcj4KLSAgICAgICAgCi0gICAgICAgIDwhLS0gCi0gICAgICAgICAgICBUaGUgImNvbmZpZy1wcm9wZXJ0eSIgZWxlbWVudHMgY2FuIGhhdmUgemVybyBvciBtb3JlICJkZXNjcmlwdGlvbiIgCisKKyAgICAgICAgPCEtLQorICAgICAgICAgICAgVGhlICJjb25maWctcHJvcGVydHkiIGVsZW1lbnRzIGNhbiBoYXZlIHplcm8gb3IgbW9yZSAiZGVzY3JpcHRpb24iCiAgICAgICAgICAgICBlbGVtZW50cy4gVGhlICJkZXNjcmlwdGlvbiIgZWxlbWVudHMgYXJlIG5vdCBiZWluZyBpbmNsdWRlZAogICAgICAgICAgICAgaW4gdGhlICJjb25maWctcHJvcGVydHkiIGVsZW1lbnRzIGJlbG93LiBUaGUgZHJpdmVyIHZlbmRvciBjYW4KICAgICAgICAgICAgIGFkZCB0aGVtIGFzIHJlcXVpcmVkLgogICAgICAgICAtLT4KLSAgICAgICAgCisKICAgICAgICAgPHJlc291cmNlYWRhcHRlci1jbGFzcz5jb20uc3VuLmpkYmNyYS5zcGkuUmVzb3VyY2VBZGFwdGVyPC9yZXNvdXJjZWFkYXB0ZXItY2xhc3M+Ci0gICAgICAgIAorCiAgICAgICAgIDxvdXRib3VuZC1yZXNvdXJjZWFkYXB0ZXI+Ci0gICAgICAgIAorCiAgICAgICAgICAgICA8Y29ubmVjdGlvbi1kZWZpbml0aW9uPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPG1hbmFnZWRjb25uZWN0aW9uZmFjdG9yeS1jbGFzcz5jb20uc3VuLmpkYmNyYS5zcGkuRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L21hbmFnZWRjb25uZWN0aW9uZmFjdG9yeS1jbGFzcz4KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIDwhLS0gVGhlcmUgY2FuIGJlIGFueSBudW1iZXIgb2YgdGhlc2UgZWxlbWVudHMgaW5jbHVkaW5nIDAgLS0+CiAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlNlcnZlck5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgpAQCAtMTI4LDcgKzEyOCw3IEBACiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+dGVzdGRiPC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CiAKLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VXNlcjwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT5kYnVzZXI8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KQEAgLTEzOSwxMiArMTM5LDEyIEBACiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+ZGJ1c2VyPC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CiAKLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+UGFzc3dvcmQ8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+ZGJwYXNzd29yZDwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5VUkw8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+amRiYzpkZXJieTovL2xvY2FsaG9zdDoxNTI3L3Rlc3RkYjtjcmVhdGU9dHJ1ZTwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgpAQCAtMTU0LDcgKzE1NCw3IEBACiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4tLT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+RGVzY3JpcHRpb248L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+T3JhY2xlIHRoaW4gZHJpdmVyIERhdGFzb3VyY2U8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KQEAgLTE2NSwxNyArMTY1LDE3IEBACiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+Um9sZU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4gICAgCisgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkxvZ2luVGltZU91dDwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT4wPC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4gICAgCisgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkRyaXZlclByb3BlcnRpZXM8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CkBAIC0xODYsNyArMTg2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPiM8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+Q2xhc3NOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPm9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnREYXRhU291cmNlNDA8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KQEAgLTE5OCw4MiArMTk4LDgyIEBACiAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgogCiA8IS0tCi0gICAgICAJCTxjb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktbmFtZT5Db25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkPC9jb25maWctcHJvcGVydHktbmFtZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPmZhbHNlPC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0gICAgICAgIAk8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgCTxjb25maWctcHJvcGVydHk+ICAgIAotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VmFsaWRhdGlvbk1ldGhvZDwvY29uZmlnLXByb3BlcnR5LW5hbWU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLSAgICAgICAgCTwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAJPGNvbmZpZy1wcm9wZXJ0eT4gICAgCi0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktbmFtZT5WYWxpZGF0aW9uVGFibGVOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotICAgICAgICAJPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgIAk8Y29uZmlnLXByb3BlcnR5PiAgICAKLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlRyYW5zYWN0aW9uSXNvbGF0aW9uPC9jb25maWctcHJvcGVydHktbmFtZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotICAgICAgICAJPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgIAk8Y29uZmlnLXByb3BlcnR5PiAgICAKLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkd1YXJhbnRlZUlzb2xhdGlvbkxldmVsPC9jb25maWctcHJvcGVydHktbmFtZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotICAgICAgICAJPC9jb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5Db25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPmZhbHNlPC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5WYWxpZGF0aW9uTWV0aG9kPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VmFsaWRhdGlvblRhYmxlTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlRyYW5zYWN0aW9uSXNvbGF0aW9uPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+R3VhcmFudGVlSXNvbGF0aW9uTGV2ZWw8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KIC0tPgogCiAgICAgICAgICAgICAgICAgPGNvbm5lY3Rpb25mYWN0b3J5LWludGVyZmFjZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29ubmVjdGlvbmZhY3RvcnktaW50ZXJmYWNlPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPGNvbm5lY3Rpb25mYWN0b3J5LWltcGwtY2xhc3M+Y29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2U8L2Nvbm5lY3Rpb25mYWN0b3J5LWltcGwtY2xhc3M+Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICA8Y29ubmVjdGlvbi1pbnRlcmZhY2U+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29ubmVjdGlvbi1pbnRlcmZhY2U+Ci0gICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPGNvbm5lY3Rpb24taW1wbC1jbGFzcz5jb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbkhvbGRlcjwvY29ubmVjdGlvbi1pbXBsLWNsYXNzPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICA8L2Nvbm5lY3Rpb24tZGVmaW5pdGlvbj4KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICA8dHJhbnNhY3Rpb24tc3VwcG9ydD5Mb2NhbFRyYW5zYWN0aW9uPC90cmFuc2FjdGlvbi1zdXBwb3J0PgotICAgICAgICAgICAgCisKICAgICAgICAgICAgIDxhdXRoZW50aWNhdGlvbi1tZWNoYW5pc20+CiAgICAgICAgICAgICAgICAgPCEtLSBUaGVyZSBjYW4gYmUgYW55IG51bWJlciBvZiAiZGVzY3JpcHRpb24iIGVsZW1lbnRzIGluY2x1ZGluZyAwIC0tPgogICAgICAgICAgICAgICAgIDwhLS0gTm90IGluY2x1ZGluZyB0aGUgImRlc2NyaXB0aW9uIiBlbGVtZW50IC0tPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPGF1dGhlbnRpY2F0aW9uLW1lY2hhbmlzbS10eXBlPkJhc2ljUGFzc3dvcmQ8L2F1dGhlbnRpY2F0aW9uLW1lY2hhbmlzbS10eXBlPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPGNyZWRlbnRpYWwtaW50ZXJmYWNlPmphdmF4LnJlc291cmNlLnNwaS5zZWN1cml0eS5QYXNzd29yZENyZWRlbnRpYWw8L2NyZWRlbnRpYWwtaW50ZXJmYWNlPgogICAgICAgICAgICAgPC9hdXRoZW50aWNhdGlvbi1tZWNoYW5pc20+Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgPHJlYXV0aGVudGljYXRpb24tc3VwcG9ydD5mYWxzZTwvcmVhdXRoZW50aWNhdGlvbi1zdXBwb3J0PgotICAgICAgICAgICAgCisKICAgICAgICAgPC9vdXRib3VuZC1yZXNvdXJjZWFkYXB0ZXI+Ci0JPGFkbWlub2JqZWN0PgotCSAgICAgICA8YWRtaW5vYmplY3QtaW50ZXJmYWNlPmNvbS5zdW4uamRiY3JhLnNwaS5KZGJjU2V0dXBBZG1pbjwvYWRtaW5vYmplY3QtaW50ZXJmYWNlPgotCSAgICAgICA8YWRtaW5vYmplY3QtY2xhc3M+Y29tLnN1bi5qZGJjcmEuc3BpLkpkYmNTZXR1cEFkbWluSW1wbDwvYWRtaW5vYmplY3QtY2xhc3M+Ci0JICAgICAgIDxjb25maWctcHJvcGVydHk+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VGFibGVOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0JICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotCSAgICAgICA8Y29uZmlnLXByb3BlcnR5PgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlNjaGVtYU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLQkgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0JICAgICAgIDxjb25maWctcHJvcGVydHk+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+Sm5kaU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLQkgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0JICAgICAgIDxjb25maWctcHJvcGVydHk+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+Tm9PZlJvd3M8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5JbnRlZ2VyPC9jb25maWctcHJvcGVydHktdHlwZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+MDwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotCSAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICA8YWRtaW5vYmplY3Q+CisgICAgICAgICAgIDxhZG1pbm9iamVjdC1pbnRlcmZhY2U+Y29tLnN1bi5qZGJjcmEuc3BpLkpkYmNTZXR1cEFkbWluPC9hZG1pbm9iamVjdC1pbnRlcmZhY2U+CisgICAgICAgICAgIDxhZG1pbm9iamVjdC1jbGFzcz5jb20uc3VuLmpkYmNyYS5zcGkuSmRiY1NldHVwQWRtaW5JbXBsPC9hZG1pbm9iamVjdC1jbGFzcz4KKyAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5UYWJsZU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+U2NoZW1hTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5KbmRpTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5Ob09mUm93czwvY29uZmlnLXByb3BlcnR5LW5hbWU+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLkludGVnZXI8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT4wPC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgogICAgICAgICA8L2FkbWlub2JqZWN0PgotICAgICAgICAKKwogICAgIDwvcmVzb3VyY2VhZGFwdGVyPgotICAgIAorCiA8L2Nvbm5lY3Rvcj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25NYW5hZ2VyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uTWFuYWdlci5qYXZhCmluZGV4IGIyMTljZDIuLjEyNDgwOWMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25NYW5hZ2VyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvbk1hbmFnZXIuamF2YQpAQCAtMjQsMjYgKzI0LDI2IEBACiAvKioKICAqIENvbm5lY3Rpb25NYW5hZ2VyIGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMzEKLSAqIEBhdXRob3IJQmlub2QgUC5HCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzMxCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRwogICovCi1wdWJsaWMgY2xhc3MgQ29ubmVjdGlvbk1hbmFnZXIgaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uTWFuYWdlcnsgCitwdWJsaWMgY2xhc3MgQ29ubmVjdGlvbk1hbmFnZXIgaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uTWFuYWdlcnsKIAogICAgIC8qKgogICAgICAqIFJldHVybnMgYSA8Y29kZT5Db25uZWN0aW9uIDwvY29kZT4gb2JqZWN0IHRvIHRoZSA8Y29kZT5Db25uZWN0aW9uRmFjdG9yeTwvY29kZT4KICAgICAgKgotICAgICAqIEBwYXJhbQltY2YJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHBhcmFtCWluZm8JPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHJldHVybglBIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IE9iamVjdC4KLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uIEluIGNhc2Ugb2YgYW4gZXJyb3IgaW4gZ2V0dGluZyB0aGUgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4uCisgICAgICogQHBhcmFtICAgIG1jZiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgaW5mbyAgICA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcmV0dXJuICAgIEEgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gT2JqZWN0LgorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gSW4gY2FzZSBvZiBhbiBlcnJvciBpbiBnZXR0aW5nIHRoZSA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPi4KICAgICAgKi8KICAgICBwdWJsaWMgT2JqZWN0IGFsbG9jYXRlQ29ubmVjdGlvbihNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmLAotICAgIAkJCQkgICAgIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbmZvKSAKLSAgICAJCQkJICAgICB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewotCU1hbmFnZWRDb25uZWN0aW9uIG1jID0gbWNmLmNyZWF0ZU1hbmFnZWRDb25uZWN0aW9uKG51bGwsIGluZm8pOwotCXJldHVybiBtYy5nZXRDb25uZWN0aW9uKG51bGwsIGluZm8pOyAgICAJCQkJICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW5mbykKKyAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24geworICAgIE1hbmFnZWRDb25uZWN0aW9uIG1jID0gbWNmLmNyZWF0ZU1hbmFnZWRDb25uZWN0aW9uKG51bGwsIGluZm8pOworICAgIHJldHVybiBtYy5nZXRDb25uZWN0aW9uKG51bGwsIGluZm8pOwogICAgIH0KLSAgICAKKwogICAgIC8qCiAgICAgICogVGhpcyBjbGFzcyBjb3VsZCBlZmZlY3RpdmVseSBpbXBsZW1lbnQgQ29ubmVjdGlvbiBwb29saW5nIGFsc28uCiAgICAgICogQ291bGQgYmUgZG9uZSBmb3IgRkNTLgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvblJlcXVlc3RJbmZvLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uUmVxdWVzdEluZm8uamF2YQppbmRleCAzOWM3ODc2Li5jNDc3ZmMyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uUmVxdWVzdEluZm8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uUmVxdWVzdEluZm8uamF2YQpAQCAtMTksMTAgKzE5LDEwIEBACiAvKioKICAqIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzMxCi0gKiBAYXV0aG9yCUJpbm9kIFAuRworICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8zMQorICogQGF1dGhvciAgICBCaW5vZCBQLkcKICAqLwotcHVibGljIGNsYXNzIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mb3sgCitwdWJsaWMgY2xhc3MgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZvewogCiAgICAgcHJpdmF0ZSBTdHJpbmcgdXNlcjsKICAgICBwcml2YXRlIFN0cmluZyBwYXNzd29yZDsKQEAgLTMwLDggKzMwLDggQEAKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gb2JqZWN0CiAgICAgICoKLSAgICAgKiBAcGFyYW0JdXNlcglVc2VyIE5hbWUuCi0gICAgICogQHBhcmFtCXBhc3N3b3JkCVBhc3N3b3JkCisgICAgICogQHBhcmFtICAgIHVzZXIgICAgVXNlciBOYW1lLgorICAgICAqIEBwYXJhbSAgICBwYXNzd29yZCAgICBQYXNzd29yZAogICAgICAqLwogICAgIHB1YmxpYyBDb25uZWN0aW9uUmVxdWVzdEluZm8oU3RyaW5nIHVzZXIsIFN0cmluZyBwYXNzd29yZCkgewogICAgICAgICB0aGlzLnVzZXIgPSB1c2VyOwpAQCAtNDEsNyArNDEsNyBAQAogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgdXNlciBuYW1lIG9mIHRoZSBDb25uZWN0aW9uUmVxdWVzdEluZm8uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVVzZXIgbmFtZSBvZiBDb25uZWN0aW9uUmVxdWVzdEluZm8uCisgICAgICogQHJldHVybiAgICBVc2VyIG5hbWUgb2YgQ29ubmVjdGlvblJlcXVlc3RJbmZvLgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VXNlcigpIHsKICAgICAgICAgcmV0dXJuIHVzZXI7CkBAIC01MCw3ICs1MCw3IEBACiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBwYXNzd29yZCBvZiB0aGUgQ29ubmVjdGlvblJlcXVlc3RJbmZvLgogICAgICAqCi0gICAgICogQHJldHVybglQYXNzd29yZCBvZiBDb25uZWN0aW9uUmVxdWVzdEluZm8uCisgICAgICogQHJldHVybiAgICBQYXNzd29yZCBvZiBDb25uZWN0aW9uUmVxdWVzdEluZm8uCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRQYXNzd29yZCgpIHsKICAgICAgICAgcmV0dXJuIHBhc3N3b3JkOwpAQCAtNTksNyArNTksNyBAQAogICAgIC8qKgogICAgICAqIFZlcmlmeSB3aGV0aGVyIHR3byBDb25uZWN0aW9uUmVxdWVzdEluZm9zIGFyZSBlcXVhbC4KICAgICAgKgotICAgICAqIEByZXR1cm4JVHJ1ZSwgaWYgdGhleSBhcmUgZXF1YWwgYW5kIGZhbHNlIG90aGVyd2lzZS4KKyAgICAgKiBAcmV0dXJuICAgIFRydWUsIGlmIHRoZXkgYXJlIGVxdWFsIGFuZCBmYWxzZSBvdGhlcndpc2UuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmopIHsKICAgICAgICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gZmFsc2U7CkBAIC03NSwxOCArNzUsMTggQEAKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIGhhc2hjb2RlIG9mIHRoZSBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWhhc2hDb2RlLgorICAgICAqIEByZXR1cm4gICAgaGFzaENvZGUuCiAgICAgICovCiAgICAgcHVibGljIGludCBoYXNoQ29kZSgpIHsKICAgICAgICAgU3RyaW5nIHJlc3VsdCA9ICIiICsgdXNlciArIHBhc3N3b3JkOwogICAgICAgICByZXR1cm4gcmVzdWx0Lmhhc2hDb2RlKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29tcGFyZXMgdHdvIG9iamVjdHMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbzEJRmlyc3Qgb2JqZWN0LgotICAgICAqIEBwYXJhbQlvMglTZWNvbmQgb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBvMSAgICBGaXJzdCBvYmplY3QuCisgICAgICogQHBhcmFtICAgIG8yICAgIFNlY29uZCBvYmplY3QuCiAgICAgICovCiAgICAgcHJpdmF0ZSBib29sZWFuIGlzRXF1YWwoT2JqZWN0IG8xLCBPYmplY3QgbzIpIHsKICAgICAgICAgaWYgKG8xID09IG51bGwpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCmluZGV4IGE5ZmE1ZjEuLmIxZmMwZTUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQpAQCAtMzEsMzYgKzMxLDM2IEBACiAvKioKICAqIERhdGEgU291cmNlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW1wbGVtZW50YXRpb24gZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8zMAotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMzAKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIAogcHVibGljIGNsYXNzIERTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IGV4dGVuZHMgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IHsKLSAgIAorCiAgICAgcHJpdmF0ZSB0cmFuc2llbnQgamF2YXguc3FsLkRhdGFTb3VyY2UgZGF0YVNvdXJjZU9iajsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIExvZ2dlciBfbG9nZ2VyOwogICAgIHN0YXRpYyB7CiAgICAgICAgIF9sb2dnZXIgPSBMb2dnZXIuZ2V0QW5vbnltb3VzTG9nZ2VyKCk7CiAgICAgfQogICAgIHByaXZhdGUgYm9vbGVhbiBkZWJ1ZyA9IGZhbHNlOwotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIG5ldyBwaHlzaWNhbCBjb25uZWN0aW9uIHRvIHRoZSB1bmRlcmx5aW5nIEVJUyByZXNvdXJjZQogICAgICAqIG1hbmFnZXIuCi0gICAgICogCi0gICAgICogQHBhcmFtCXN1YmplY3QJPGNvZGU+U3ViamVjdDwvY29kZT4gaW5zdGFuY2UgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKiBAcGFyYW0JY3hSZXF1ZXN0SW5mbwk8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHdoaWNoIG1heSBiZSBjcmVhdGVkCi0gICAgICogICAgICAgCSAgICAgICAgICAgICAJYXMgYSByZXN1bHQgb2YgdGhlIGludm9jYXRpb24gPGNvZGU+Z2V0Q29ubmVjdGlvbih1c2VyLCBwYXNzd29yZCk8L2NvZGU+Ci0gICAgICogICAgICAgCSAgICAgICAgICAgICAJb24gdGhlIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdAotICAgICAqIEByZXR1cm4JPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBjcmVhdGVkCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBpbnN0YW50aWF0aW5nIHRoZQotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0IHVzZWQgZm9yIHRoZQotICAgICAqICAgICAgIAkJCQljcmVhdGlvbiBvZiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdAotICAgICAqIEB0aHJvd3MJU2VjdXJpdHlFeGNlcHRpb24JaWYgdGhlcmUgaW5vIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0Ci0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAlzYXRpc2Z5aW5nIHRoaXMgcmVxdWVzdCAKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZSAKLSAgICAgKgkJCQkJCXBoeXNpY2FsIGNvbm5lY3Rpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzdWJqZWN0ICAgIDxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogQHBhcmFtICAgIGN4UmVxdWVzdEluZm8gICAgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiB3aGljaCBtYXkgYmUgY3JlYXRlZAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIGEgcmVzdWx0IG9mIHRoZSBpbnZvY2F0aW9uIDxjb2RlPmdldENvbm5lY3Rpb24odXNlciwgcGFzc3dvcmQpPC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIHRoZSA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QgY3JlYXRlZAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gaW5zdGFudGlhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdCB1c2VkIGZvciB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRpb24gb2YgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QKKyAgICAgKiBAdGhyb3dzICAgIFNlY3VyaXR5RXhjZXB0aW9uICAgIGlmIHRoZXJlIGlubyA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F0aXNmeWluZyB0aGlzIHJlcXVlc3QKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgcGh5c2ljYWwgY29ubmVjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBjcmVhdGVNYW5hZ2VkQ29ubmVjdGlvbihqYXZheC5zZWN1cml0eS5hdXRoLlN1YmplY3Qgc3ViamVjdCwKICAgICAgICAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxdWVzdEluZm8pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CkBAIC02OCw3ICs2OCw3IEBACiAgICAgICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGNyZWF0ZU1hbmFnZWRDb25uZWN0aW9uIik7CiAgICAgICAgIH0KICAgICAgICAgUGFzc3dvcmRDcmVkZW50aWFsIHBjID0gU2VjdXJpdHlVdGlscy5nZXRQYXNzd29yZENyZWRlbnRpYWwodGhpcywgc3ViamVjdCwgY3hSZXF1ZXN0SW5mbyk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKGRhdGFTb3VyY2VPYmogPT0gbnVsbCkgewogICAgICAgICAgICAgaWYoZHNPYmpCdWlsZGVyID09IG51bGwpIHsKICAgICAgICAgICAgICAgICBkc09iakJ1aWxkZXIgPSBuZXcgRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIoc3BlYyk7CkBAIC03OCwzNiArNzgsMzYgQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZU9iaiA9IChqYXZheC5zcWwuRGF0YVNvdXJjZSkgZHNPYmpCdWlsZGVyLmNvbnN0cnVjdERhdGFTb3VyY2VPYmplY3QoKTsKICAgICAgICAgICAgIH0gY2F0Y2goQ2xhc3NDYXN0RXhjZXB0aW9uIGNjZSkgewotCSAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfY2NlIiwgY2NlKTsKKyAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2NjZSIsIGNjZSk7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGpha2FydGEucmVzb3VyY2UuUmVzb3VyY2VFeGNlcHRpb24oY2NlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBkc0Nvbm4gPSBudWxsOwotICAgICAgICAKKwogICAgICAgICB0cnkgewotCSAgICAvKiBGb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIHVzZXIvcGFzc3dkIG9mIHRoZSBjb25uZWN0aW9uIHBvb2wgaXMKLQkgICAgICogZXF1YWwgdG8gdGhlIFBhc3N3b3JkQ3JlZGVudGlhbCBmb3IgdGhlIGNvbm5lY3Rpb24gcmVxdWVzdAotCSAgICAgKiBnZXQgYSBjb25uZWN0aW9uIGZyb20gdGhpcyBwb29sIGRpcmVjdGx5LgotCSAgICAgKiBmb3IgYWxsIG90aGVyIGNvbmRpdGlvbnMgZ28gY3JlYXRlIGEgbmV3IGNvbm5lY3Rpb24KLQkgICAgICovCi0JICAgIGlmICggaXNFcXVhbCggcGMsIGdldFVzZXIoKSwgZ2V0UGFzc3dvcmQoKSApICkgewotCSAgICAgICAgZHNDb25uID0gZGF0YVNvdXJjZU9iai5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIH0gZWxzZSB7Ci0JICAgICAgICBkc0Nvbm4gPSBkYXRhU291cmNlT2JqLmdldENvbm5lY3Rpb24ocGMuZ2V0VXNlck5hbWUoKSwgCi0JCSAgICBuZXcgU3RyaW5nKHBjLmdldFBhc3N3b3JkKCkpKTsKLQkgICAgfQorICAgICAgICAvKiBGb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIHVzZXIvcGFzc3dkIG9mIHRoZSBjb25uZWN0aW9uIHBvb2wgaXMKKyAgICAgICAgICogZXF1YWwgdG8gdGhlIFBhc3N3b3JkQ3JlZGVudGlhbCBmb3IgdGhlIGNvbm5lY3Rpb24gcmVxdWVzdAorICAgICAgICAgKiBnZXQgYSBjb25uZWN0aW9uIGZyb20gdGhpcyBwb29sIGRpcmVjdGx5LgorICAgICAgICAgKiBmb3IgYWxsIG90aGVyIGNvbmRpdGlvbnMgZ28gY3JlYXRlIGEgbmV3IGNvbm5lY3Rpb24KKyAgICAgICAgICovCisgICAgICAgIGlmICggaXNFcXVhbCggcGMsIGdldFVzZXIoKSwgZ2V0UGFzc3dvcmQoKSApICkgeworICAgICAgICAgICAgZHNDb25uID0gZGF0YVNvdXJjZU9iai5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkc0Nvbm4gPSBkYXRhU291cmNlT2JqLmdldENvbm5lY3Rpb24ocGMuZ2V0VXNlck5hbWUoKSwKKyAgICAgICAgICAgIG5ldyBTdHJpbmcocGMuZ2V0UGFzc3dvcmQoKSkpOworICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKICAgICAgICAgICAgIHNxbGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLmV4Y19jcmVhdGVfY29ubiIsIHNxbGUpOwotICAgICAgICAgICAgdGhyb3cgbmV3IGpha2FydGEucmVzb3VyY2Uuc3BpLlJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gY291bGQgbm90IGJlIGFsbG9jYXRlZDogIiArIAorICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5leGNfY3JlYXRlX2Nvbm4iLCBzcWxlKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBqYWthcnRhLnJlc291cmNlLnNwaS5SZXNvdXJjZUFsbG9jYXRpb25FeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGNvdWxkIG5vdCBiZSBhbGxvY2F0ZWQ6ICIgKwogICAgICAgICAgICAgICAgIHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSl7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlYzLVRFU1QgOiB1bmFibGUgdG8gZ2V0IGNvbm5lY3Rpb24iKTsKLSAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7ICAgCisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVjMtVEVTVCA6IGdvdCBjb25uZWN0aW9uIik7Ci0gICAgICAgIAorCiAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYyA9IG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24obnVsbCwgZHNDb25uLCBwYywgdGhpcyk7CiAgICAgICAgIC8vR0pDSU5UCiAvKgpAQCAtMTE3LDE1ICsxMTcsMTUgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJWMy1URVNUIDogcmV0dXJuaW5nIGNvbm5lY3Rpb24iKTsKICAgICAgICAgcmV0dXJuIG1jOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIENoZWNrIGlmIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpcyBlcXVhbCB0byAKKyAgICAgKiBDaGVjayBpZiB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaXMgZXF1YWwgdG8KICAgICAgKiBhbm90aGVyIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4uCi0gICAgICogCi0gICAgICogQHBhcmFtCW90aGVyCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0IGZvciBjaGVja2luZyBlcXVhbGl0eSB3aXRoCi0gICAgICogQHJldHVybgl0cnVlCWlmIHRoZSBwcm9wZXJ0eSBzZXRzIG9mIGJvdGggdGhlIAotICAgICAqCQkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3RzIGFyZSB0aGUgc2FtZQotICAgICAqCQlmYWxzZQlvdGhlcndpc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBvdGhlciAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdCBmb3IgY2hlY2tpbmcgZXF1YWxpdHkgd2l0aAorICAgICAqIEByZXR1cm4gICAgdHJ1ZSAgICBpZiB0aGUgcHJvcGVydHkgc2V0cyBvZiBib3RoIHRoZQorICAgICAqICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3RzIGFyZSB0aGUgc2FtZQorICAgICAqICAgICAgICBmYWxzZSAgICBvdGhlcndpc2UKICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG90aGVyKSB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC0xMzYsNDA5ICsxMzYsNDA5IEBACiAgICAgICAgICAqIGlmIGFuZCBvbmx5IGlmIHRoZWlyIHByb3BlcnRpZXMgYXJlIHRoZSBzYW1lLgogICAgICAgICAgKi8KICAgICAgICAgaWYob3RoZXIgaW5zdGFuY2VvZiBjb20uc3VuLmpkYmNyYS5zcGkuRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkpIHsKLSAgICAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBvdGhlck1DRiA9IAorICAgICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLkRTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG90aGVyTUNGID0KICAgICAgICAgICAgICAgICAoY29tLnN1bi5qZGJjcmEuc3BpLkRTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KSBvdGhlcjsKICAgICAgICAgICAgIHJldHVybiB0aGlzLnNwZWMuZXF1YWxzKG90aGVyTUNGLnNwZWMpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBzZXJ2ZXIgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlzZXJ2ZXJOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldFNlcnZlck5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHNlcnZlck5hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0U2VydmVyTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRzZXJ2ZXJOYW1lKFN0cmluZyBzZXJ2ZXJOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlNFUlZFUk5BTUUsIHNlcnZlck5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHNlcnZlciBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglzZXJ2ZXJOYW1lCi0gICAgICogQHNlZQk8Y29kZT5zZXRTZXJ2ZXJOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgc2VydmVyTmFtZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0U2VydmVyTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHNlcnZlck5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5TRVJWRVJOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBzZXJ2ZXIgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlzZXJ2ZXJOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldFNlcnZlck5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHNlcnZlck5hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0U2VydmVyTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJOYW1lKFN0cmluZyBzZXJ2ZXJOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlNFUlZFUk5BTUUsIHNlcnZlck5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHNlcnZlciBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglzZXJ2ZXJOYW1lCi0gICAgICogQHNlZQk8Y29kZT5zZXRTZXJ2ZXJOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgc2VydmVyTmFtZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0U2VydmVyTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFNlcnZlck5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5TRVJWRVJOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBwb3J0IG51bWJlci4KICAgICAgKgotICAgICAqIEBwYXJhbQlwb3J0TnVtYmVyCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldFBvcnROdW1iZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHBvcnROdW1iZXIgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0UG9ydE51bWJlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRwb3J0TnVtYmVyKFN0cmluZyBwb3J0TnVtYmVyKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIsIHBvcnROdW1iZXIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHBvcnQgbnVtYmVyLgogICAgICAqCi0gICAgICogQHJldHVybglwb3J0TnVtYmVyCi0gICAgICogQHNlZQk8Y29kZT5zZXRQb3J0TnVtYmVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgcG9ydE51bWJlcgorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0UG9ydE51bWJlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHBvcnROdW1iZXIoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QT1JUTlVNQkVSKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBwb3J0IG51bWJlci4KICAgICAgKgotICAgICAqIEBwYXJhbQlwb3J0TnVtYmVyCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldFBvcnROdW1iZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHBvcnROdW1iZXIgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0UG9ydE51bWJlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRQb3J0TnVtYmVyKFN0cmluZyBwb3J0TnVtYmVyKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIsIHBvcnROdW1iZXIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHBvcnQgbnVtYmVyLgogICAgICAqCi0gICAgICogQHJldHVybglwb3J0TnVtYmVyCi0gICAgICogQHNlZQk8Y29kZT5zZXRQb3J0TnVtYmVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgcG9ydE51bWJlcgorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0UG9ydE51bWJlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFBvcnROdW1iZXIoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QT1JUTlVNQkVSKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkYXRhYmFzZSBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCWRhdGFiYXNlTmFtZQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREYXRhYmFzZU5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRhdGFiYXNlTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREYXRhYmFzZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0ZGF0YWJhc2VOYW1lKFN0cmluZyBkYXRhYmFzZU5hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQUJBU0VOQU1FLCBkYXRhYmFzZU5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRhdGFiYXNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRhdGFiYXNlTmFtZQotICAgICAqIEBzZWUJPGNvZGU+c2V0RGF0YWJhc2VOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZGF0YWJhc2VOYW1lCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREYXRhYmFzZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRkYXRhYmFzZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBQkFTRU5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRhdGFiYXNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZGF0YWJhc2VOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERhdGFiYXNlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGF0YWJhc2VOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERhdGFiYXNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXREYXRhYmFzZU5hbWUoU3RyaW5nIGRhdGFiYXNlTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBQkFTRU5BTUUsIGRhdGFiYXNlTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGF0YWJhc2UgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGF0YWJhc2VOYW1lCi0gICAgICogQHNlZQk8Y29kZT5zZXREYXRhYmFzZU5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkYXRhYmFzZU5hbWUKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERhdGFiYXNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldERhdGFiYXNlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFCQVNFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGF0YSBzb3VyY2UgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlkc24gPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRzbiA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREYXRhU291cmNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRkYXRhU291cmNlTmFtZShTdHJpbmcgZHNuKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FLCBkc24pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRhdGEgc291cmNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRzbgotICAgICAqIEBzZWUJPGNvZGU+c2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkc24KKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERhdGFTb3VyY2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0ZGF0YVNvdXJjZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBU09VUkNFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGF0YSBzb3VyY2UgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlkc24gPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRzbiA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREYXRhU291cmNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXREYXRhU291cmNlTmFtZShTdHJpbmcgZHNuKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FLCBkc24pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRhdGEgc291cmNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRzbgotICAgICAqIEBzZWUJPGNvZGU+c2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkc24KKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERhdGFTb3VyY2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGF0YVNvdXJjZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBU09VUkNFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGVzY3JpcHRpb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZGVzYwk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREZXNjcmlwdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGVzYyAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREZXNjcmlwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRkZXNjcmlwdGlvbihTdHJpbmcgZGVzYykgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ERVNDUklQVElPTiwgZGVzYyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGVzY3JpcHRpb24uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRlc2MKLSAgICAgKiBAc2VlCTxjb2RlPnNldERlc2NyaXB0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZGVzYworICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGVzY3JpcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRkZXNjcmlwdGlvbigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFU0NSSVBUSU9OKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkZXNjcmlwdGlvbi4KICAgICAgKgotICAgICAqIEBwYXJhbQlkZXNjCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERlc2NyaXB0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkZXNjICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERlc2NyaXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERlc2NyaXB0aW9uKFN0cmluZyBkZXNjKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFU0NSSVBUSU9OLCBkZXNjKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkZXNjcmlwdGlvbi4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGVzYwotICAgICAqIEBzZWUJPGNvZGU+c2V0RGVzY3JpcHRpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBkZXNjCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREZXNjcmlwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVTQ1JJUFRJT04pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIG5ldHdvcmsgcHJvdG9jb2wuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbndQcm90b2NvbAk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CisgICAgICogQHBhcmFtICAgIG53UHJvdG9jb2wgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldG5ldHdvcmtQcm90b2NvbChTdHJpbmcgbndQcm90b2NvbCkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ORVRXT1JLUFJPVE9DT0wsIG53UHJvdG9jb2wpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIG5ldHdvcmsgcHJvdG9jb2wuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCW53UHJvdG9jb2wKLSAgICAgKiBAc2VlCTxjb2RlPnNldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIG53UHJvdG9jb2wKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldG5ldHdvcmtQcm90b2NvbCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk5FVFdPUktQUk9UT0NPTCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgbmV0d29yayBwcm90b2NvbC4KICAgICAgKgotICAgICAqIEBwYXJhbQlud1Byb3RvY29sCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbndQcm90b2NvbCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TmV0d29ya1Byb3RvY29sKFN0cmluZyBud1Byb3RvY29sKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk5FVFdPUktQUk9UT0NPTCwgbndQcm90b2NvbCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgbmV0d29yayBwcm90b2NvbC4KICAgICAgKgotICAgICAqIEByZXR1cm4JbndQcm90b2NvbAotICAgICAqIEBzZWUJPGNvZGU+c2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgbndQcm90b2NvbAorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmV0d29ya1Byb3RvY29sKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTkVUV09SS1BST1RPQ09MKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSByb2xlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jcm9sZU5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0Um9sZU5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHJvbGVOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldFJvbGVOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHJvbGVOYW1lKFN0cmluZyByb2xlTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ST0xFTkFNRSwgcm9sZU5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHJvbGUgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4Jcm9sZU5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldFJvbGVOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgcm9sZU5hbWUKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldFJvbGVOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0cm9sZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ST0xFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgcm9sZSBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCXJvbGVOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldFJvbGVOYW1lPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICByb2xlTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRSb2xlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRSb2xlTmFtZShTdHJpbmcgcm9sZU5hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUk9MRU5BTUUsIHJvbGVOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSByb2xlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXJvbGVOYW1lCi0gICAgICogQHNlZQk8Y29kZT5zZXRSb2xlTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHJvbGVOYW1lCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRSb2xlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFJvbGVOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUk9MRU5BTUUpOwogICAgIH0KIAotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgbG9naW4gdGltZW91dC4KICAgICAgKgotICAgICAqIEBwYXJhbQlsb2dpblRpbWVPdXQJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0TG9naW5UaW1lT3V0PC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBsb2dpblRpbWVPdXQgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0TG9naW5UaW1lT3V0PC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGxvZ2luVGltZU91dChTdHJpbmcgbG9naW5UaW1lT3V0KSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR0lOVElNRU9VVCwgbG9naW5UaW1lT3V0KTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBsb2dpbiB0aW1lb3V0LgogICAgICAqCi0gICAgICogQHJldHVybglsb2dpblRpbWVvdXQKLSAgICAgKiBAc2VlCTxjb2RlPnNldExvZ2luVGltZU91dDwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGxvZ2luVGltZW91dAorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0TG9naW5UaW1lT3V0PC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0bG9naW5UaW1lT3V0KCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HSU5USU1FT1VUKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBsb2dpbiB0aW1lb3V0LgogICAgICAqCi0gICAgICogQHBhcmFtCWxvZ2luVGltZU91dAk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXRMb2dpblRpbWVPdXQ8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGxvZ2luVGltZU91dCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRMb2dpblRpbWVPdXQ8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TG9naW5UaW1lT3V0KFN0cmluZyBsb2dpblRpbWVPdXQpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HSU5USU1FT1VULCBsb2dpblRpbWVPdXQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGxvZ2luIHRpbWVvdXQuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWxvZ2luVGltZW91dAotICAgICAqIEBzZWUJPGNvZGU+c2V0TG9naW5UaW1lT3V0PC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgbG9naW5UaW1lb3V0CisgICAgICogQHNlZSAgICA8Y29kZT5zZXRMb2dpblRpbWVPdXQ8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRMb2dpblRpbWVPdXQoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dJTlRJTUVPVVQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRlbGltaXRlci4KICAgICAgKgotICAgICAqIEBwYXJhbQlkZWxpbQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREZWxpbWl0ZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRlbGltICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERlbGltaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRkZWxpbWl0ZXIoU3RyaW5nIGRlbGltKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUiwgZGVsaW0pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRlbGltaXRlci4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGVsaW0KLSAgICAgKiBAc2VlCTxjb2RlPnNldERlbGltaXRlcjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRlbGltCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREZWxpbWl0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRkZWxpbWl0ZXIoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERUxJTUlURVIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRlbGltaXRlci4KICAgICAgKgotICAgICAqIEBwYXJhbQlkZWxpbQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREZWxpbWl0ZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRlbGltICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERlbGltaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXREZWxpbWl0ZXIoU3RyaW5nIGRlbGltKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUiwgZGVsaW0pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRlbGltaXRlci4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGVsaW0KLSAgICAgKiBAc2VlCTxjb2RlPnNldERlbGltaXRlcjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRlbGltCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREZWxpbWl0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXREZWxpbWl0ZXIoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERUxJTUlURVIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRyaXZlciBzcGVjaWZpYyBwcm9wZXJ0aWVzLgogICAgICAqCi0gICAgICogQHBhcmFtCWRyaXZlclByb3BzCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRyaXZlclByb3BzICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0ZHJpdmVyUHJvcGVydGllcyhTdHJpbmcgZHJpdmVyUHJvcHMpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuRFJJVkVSUFJPUEVSVElFUywgZHJpdmVyUHJvcHMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRyaXZlciBzcGVjaWZpYyBwcm9wZXJ0aWVzLgogICAgICAqCi0gICAgICogQHJldHVybglkcml2ZXJQcm9wcwotICAgICAqIEBzZWUJPGNvZGU+c2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRyaXZlclByb3BzCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0ZHJpdmVyUHJvcGVydGllcygpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRSSVZFUlBST1BFUlRJRVMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRyaXZlciBzcGVjaWZpYyBwcm9wZXJ0aWVzLgogICAgICAqCi0gICAgICogQHBhcmFtCWRyaXZlclByb3BzCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRyaXZlclByb3BzICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RHJpdmVyUHJvcGVydGllcyhTdHJpbmcgZHJpdmVyUHJvcHMpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuRFJJVkVSUFJPUEVSVElFUywgZHJpdmVyUHJvcHMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRyaXZlciBzcGVjaWZpYyBwcm9wZXJ0aWVzLgogICAgICAqCi0gICAgICogQHJldHVybglkcml2ZXJQcm9wcwotICAgICAqIEBzZWUJPGNvZGU+c2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRyaXZlclByb3BzCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RHJpdmVyUHJvcGVydGllcygpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRSSVZFUlBST1BFUlRJRVMpOwpAQCAtNTQ4LDM1ICs1NDgsMzUgQEAKICAgICAgKiBDaGVjayBpZiB0aGUgUGFzc3dvcmRDcmVkZW50aWFsIHBhc3NlZCBmb3IgdGhpcyBnZXQgY29ubmVjdGlvbgogICAgICAqIHJlcXVlc3QgaXMgZXF1YWwgdG8gdGhlIHVzZXIvcGFzc3dkIG9mIHRoaXMgY29ubmVjdGlvbiBwb29sLgogICAgICAqLwotICAgIHByaXZhdGUgYm9vbGVhbiBpc0VxdWFsKCBQYXNzd29yZENyZWRlbnRpYWwgcGMsIFN0cmluZyB1c2VyLCAKKyAgICBwcml2YXRlIGJvb2xlYW4gaXNFcXVhbCggUGFzc3dvcmRDcmVkZW50aWFsIHBjLCBTdHJpbmcgdXNlciwKICAgICAgICAgU3RyaW5nIHBhc3N3b3JkKSB7Ci0gICAgICAgIAotCS8vaWYgZXF1YWwgZ2V0IGRpcmVjdCBjb25uZWN0aW9uIGVsc2UgCi0JLy9nZXQgY29ubmVjdGlvbiB3aXRoIHVzZXIgYW5kIHBhc3N3b3JkLgotCQotCWlmICh1c2VyID09IG51bGwgJiYgcGMgPT0gbnVsbCkgewotCSAgICByZXR1cm4gdHJ1ZTsKLQl9Ci0JCi0JaWYgKCB1c2VyID09IG51bGwgJiYgcGMgIT0gbnVsbCApIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQl9CiAKLQlpZiggcGMgPT0gbnVsbCApIHsKLQkgICAgcmV0dXJuIHRydWU7Ci0JfQotCQotCWlmICggdXNlci5lcXVhbHMoIHBjLmdldFVzZXJOYW1lKCkgKSApIHsKLQkgICAgaWYgKCBwYXNzd29yZCA9PSBudWxsICYmIHBjLmdldFBhc3N3b3JkKCkgPT0gbnVsbCApIHsKLQkgICAgICAgIHJldHVybiB0cnVlOwotCSAgICB9Ci0JfQotCQotCWlmICggdXNlci5lcXVhbHMocGMuZ2V0VXNlck5hbWUoKSkgJiYgcGFzc3dvcmQuZXF1YWxzKHBjLmdldFBhc3N3b3JkKCkpICkgewotCSAgICByZXR1cm4gdHJ1ZTsKLQl9IAotCQotICAgICAgICAKLQlyZXR1cm4gZmFsc2U7CisgICAgLy9pZiBlcXVhbCBnZXQgZGlyZWN0IGNvbm5lY3Rpb24gZWxzZQorICAgIC8vZ2V0IGNvbm5lY3Rpb24gd2l0aCB1c2VyIGFuZCBwYXNzd29yZC4KKworICAgIGlmICh1c2VyID09IG51bGwgJiYgcGMgPT0gbnVsbCkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIHVzZXIgPT0gbnVsbCAmJiBwYyAhPSBudWxsICkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmKCBwYyA9PSBudWxsICkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIHVzZXIuZXF1YWxzKCBwYy5nZXRVc2VyTmFtZSgpICkgKSB7CisgICAgICAgIGlmICggcGFzc3dvcmQgPT0gbnVsbCAmJiBwYy5nZXRQYXNzd29yZCgpID09IG51bGwgKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICggdXNlci5lcXVhbHMocGMuZ2V0VXNlck5hbWUoKSkgJiYgcGFzc3dvcmQuZXF1YWxzKHBjLmdldFBhc3N3b3JkKCkpICkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKworICAgIHJldHVybiBmYWxzZTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EYXRhU291cmNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EYXRhU291cmNlLmphdmEKaW5kZXggZDkwMDg1ZC4uNTFmMTc3MyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRGF0YVNvdXJjZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RhdGFTb3VyY2UuamF2YQpAQCAtMjgsMjIgKzI4LDIyIEBACiBpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOwogaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOwogLyoqCi0gKiBIb2xkcyB0aGUgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LCB3aGljaCBpcyB0byBiZSAKKyAqIEhvbGRzIHRoZSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QsIHdoaWNoIGlzIHRvIGJlCiAgKiBwYXNzZWQgdG8gdGhlIGFwcGxpY2F0aW9uIHByb2dyYW0uCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8zMQotICogQGF1dGhvcglCaW5vZCBQLkcKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMzEKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCiAgKi8KIHB1YmxpYyBjbGFzcyBEYXRhU291cmNlIGltcGxlbWVudHMgamF2YXguc3FsLkRhdGFTb3VyY2UsIGphdmEuaW8uU2VyaWFsaXphYmxlLAotCQljb20uc3VuLmFwcHNlcnYuamRiY3JhLkRhdGFTb3VyY2UsIGpha2FydGEucmVzb3VyY2UuUmVmZXJlbmNlYWJsZXsgCi0JCQkJICAgCisgICAgICAgIGNvbS5zdW4uYXBwc2Vydi5qZGJjcmEuRGF0YVNvdXJjZSwgamFrYXJ0YS5yZXNvdXJjZS5SZWZlcmVuY2VhYmxleworCiAgICAgcHJpdmF0ZSBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmOwotICAgIHByaXZhdGUgQ29ubmVjdGlvbk1hbmFnZXIgY207CQkJCSAgIAkJCQkgICAKKyAgICBwcml2YXRlIENvbm5lY3Rpb25NYW5hZ2VyIGNtOwogICAgIHByaXZhdGUgaW50IGxvZ2luVGltZW91dDsKICAgICBwcml2YXRlIFByaW50V3JpdGVyIGxvZ1dyaXRlcjsKLSAgICBwcml2YXRlIFN0cmluZyBkZXNjcmlwdGlvbjsJCQkJICAgCisgICAgcHJpdmF0ZSBTdHJpbmcgZGVzY3JpcHRpb247CiAgICAgcHJpdmF0ZSBSZWZlcmVuY2UgcmVmZXJlbmNlOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgTG9nZ2VyIF9sb2dnZXI7CiAgICAgc3RhdGljIHsKICAgICAgICAgX2xvZ2dlciA9IExvZ2dlci5nZXRBbm9ueW1vdXNMb2dnZXIoKTsKQEAgLTUxLDU4ICs1MSw1OCBAQAogICAgIHByaXZhdGUgYm9vbGVhbiBkZWJ1ZyA9IGZhbHNlOwogCiAgICAgLyoqCi0gICAgICogQ29uc3RydWN0cyA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QuIFRoaXMgaXMgY3JlYXRlZCBieSB0aGUgCisgICAgICogQ29uc3RydWN0cyA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QuIFRoaXMgaXMgY3JlYXRlZCBieSB0aGUKICAgICAgKiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdC4KICAgICAgKgotICAgICAqIEBwYXJhbQltY2YJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QgCi0gICAgICoJCQljcmVhdGluZyB0aGlzIG9iamVjdC4KLSAgICAgKiBAcGFyYW0JY20JPGNvZGU+Q29ubmVjdGlvbk1hbmFnZXI8L2NvZGU+IG9iamVjdCBlaXRoZXIgYXNzb2NpYXRlZAotICAgICAqCQkJd2l0aCBBcHBsaWNhdGlvbiBzZXJ2ZXIgb3IgUmVzb3VyY2UgQWRhcHRlci4KKyAgICAgKiBAcGFyYW0gICAgbWNmICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0CisgICAgICogICAgICAgICAgICBjcmVhdGluZyB0aGlzIG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgY20gICAgPGNvZGU+Q29ubmVjdGlvbk1hbmFnZXI8L2NvZGU+IG9iamVjdCBlaXRoZXIgYXNzb2NpYXRlZAorICAgICAqICAgICAgICAgICAgd2l0aCBBcHBsaWNhdGlvbiBzZXJ2ZXIgb3IgUmVzb3VyY2UgQWRhcHRlci4KICAgICAgKi8KICAgICBwdWJsaWMgRGF0YVNvdXJjZSAoTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG1jZiwgQ29ubmVjdGlvbk1hbmFnZXIgY20pIHsKLSAgICAJdGhpcy5tY2YgPSBtY2Y7Ci0gICAgCWlmIChjbSA9PSBudWxsKSB7Ci0gICAgCSAgICB0aGlzLmNtID0gKENvbm5lY3Rpb25NYW5hZ2VyKSBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25NYW5hZ2VyKCk7Ci0gICAgCX0gZWxzZSB7Ci0gICAgCSAgICB0aGlzLmNtID0gY207Ci0gICAgCX0gICAgCQotICAgIH0gICAKLSAgICAKKyAgICAgICAgdGhpcy5tY2YgPSBtY2Y7CisgICAgICAgIGlmIChjbSA9PSBudWxsKSB7CisgICAgICAgICAgICB0aGlzLmNtID0gKENvbm5lY3Rpb25NYW5hZ2VyKSBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25NYW5hZ2VyKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aGlzLmNtID0gY207CisgICAgICAgIH0KKyAgICB9CisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgotICAgICAqIAotICAgICAqIEByZXR1cm4JPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhbiBlcnJvci4gICAgICAKKyAgICAgKgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhbiBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgQ29ubmVjdGlvbiBnZXRDb25uZWN0aW9uKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0gICAgCXRyeSB7Ci0gICAgCSAgICByZXR1cm4gKENvbm5lY3Rpb24pIGNtLmFsbG9jYXRlQ29ubmVjdGlvbihtY2YsbnVsbCk7ICAgIAkgICAgCi0gICAgCX0gY2F0Y2ggKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZXR1cm4gKENvbm5lY3Rpb24pIGNtLmFsbG9jYXRlQ29ubmVjdGlvbihtY2YsbnVsbCk7CisgICAgICAgIH0gY2F0Y2ggKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7CiAvLyBUaGlzIGlzIHRlbXBvcmFyeS4gVGhpcyBuZWVkcyB0byBiZSBjaGFuZ2VkIHRvIFNFVkVSRSBhZnRlciBUUAotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5leGNfZ2V0X2Nvbm4iLCByZS5nZXRNZXNzYWdlKCkpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5leGNfZ2V0X2Nvbm4iLCByZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgcmUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgCSAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uIChyZS5nZXRNZXNzYWdlKCkpOwotICAgIAl9CisgICAgICAgICAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uIChyZS5nZXRNZXNzYWdlKCkpOworICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JdXNlcglVc2VyIG5hbWUgZm9yIHRoZSBDb25uZWN0aW9uLgotICAgICAqIEBwYXJhbQlwd2QJUGFzc3dvcmQgZm9yIHRoZSBDb25uZWN0aW9uLgotICAgICAqIEByZXR1cm4JPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhbiBlcnJvci4gICAgICAKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICB1c2VyICAgIFVzZXIgbmFtZSBmb3IgdGhlIENvbm5lY3Rpb24uCisgICAgICogQHBhcmFtICAgIHB3ZCAgICBQYXNzd29yZCBmb3IgdGhlIENvbm5lY3Rpb24uCisgICAgICogQHJldHVybiAgICA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGFuIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBDb25uZWN0aW9uIGdldENvbm5lY3Rpb24oU3RyaW5nIHVzZXIsIFN0cmluZyBwd2QpIHRocm93cyBTUUxFeGNlcHRpb24gewotICAgIAl0cnkgewotICAgIAkgICAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGluZm8gPSBuZXcgQ29ubmVjdGlvblJlcXVlc3RJbmZvICh1c2VyLCBwd2QpOwotICAgIAkgICAgcmV0dXJuIChDb25uZWN0aW9uKSBjbS5hbGxvY2F0ZUNvbm5lY3Rpb24obWNmLGluZm8pOwotICAgIAl9IGNhdGNoIChSZXNvdXJjZUV4Y2VwdGlvbiByZSkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGluZm8gPSBuZXcgQ29ubmVjdGlvblJlcXVlc3RJbmZvICh1c2VyLCBwd2QpOworICAgICAgICAgICAgcmV0dXJuIChDb25uZWN0aW9uKSBjbS5hbGxvY2F0ZUNvbm5lY3Rpb24obWNmLGluZm8pOworICAgICAgICB9IGNhdGNoIChSZXNvdXJjZUV4Y2VwdGlvbiByZSkgewogLy8gVGhpcyBpcyB0ZW1wb3JhcnkuIFRoaXMgbmVlZHMgdG8gYmUgY2hhbmdlZCB0byBTRVZFUkUgYWZ0ZXIgVFAKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMuZXhjX2dldF9jb25uIiwgcmUuZ2V0TWVzc2FnZSgpKTsKLSAgICAJICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKHJlLmdldE1lc3NhZ2UoKSk7Ci0gICAgCX0KLSAgICB9ICAgIAorICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5leGNfZ2V0X2Nvbm4iLCByZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAocmUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgfQorICAgIH0KIAogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIFNRTENvbm5lY3Rpb24gZnJvbSB0aGUgQ29ubmVjdGlvbiB3cmFwcGVyCkBAIC0xMTUsOTEgKzExNSw5MSBAQAogICAgICAqLwogICAgIHB1YmxpYyBDb25uZWN0aW9uIGdldENvbm5lY3Rpb24oQ29ubmVjdGlvbiBjb24pIHRocm93cyBTUUxFeGNlcHRpb24gewogCi0gICAgICAgIENvbm5lY3Rpb24gZHJpdmVyQ29uID0gY29uOyAKKyAgICAgICAgQ29ubmVjdGlvbiBkcml2ZXJDb24gPSBjb247CiAgICAgICAgIGlmIChjb24gaW5zdGFuY2VvZiBjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbkhvbGRlcikgewotICAgICAgICAgICBkcml2ZXJDb24gPSAoKGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uSG9sZGVyKSBjb24pLmdldENvbm5lY3Rpb24oKTsgCi0gICAgICAgIH0gCisgICAgICAgICAgIGRyaXZlckNvbiA9ICgoY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25Ib2xkZXIpIGNvbikuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIGRyaXZlckNvbjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXQgdGhlIGxvZ2luIHRpbWVvdXQKICAgICAgKgogICAgICAqIEByZXR1cm4gbG9naW4gdGltZW91dC4KLSAgICAgKiBAdGhyb3dzCVNRTEV4Y2VwdGlvbglJZiBhIGRhdGFiYXNlIGVycm9yIG9jY3Vycy4KKyAgICAgKiBAdGhyb3dzICAgIFNRTEV4Y2VwdGlvbiAgICBJZiBhIGRhdGFiYXNlIGVycm9yIG9jY3Vycy4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldExvZ2luVGltZW91dCgpIHRocm93cyBTUUxFeGNlcHRpb257Ci0gICAgCXJldHVybglsb2dpblRpbWVvdXQ7CisgICAgICAgIHJldHVybiAgICBsb2dpblRpbWVvdXQ7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0IHRoZSBsb2dpbiB0aW1lb3V0CiAgICAgICoKLSAgICAgKiBAcGFyYW0JbG9naW5UaW1lb3V0CUxvZ2luIHRpbWVvdXQuCi0gICAgICogQHRocm93cwlTUUxFeGNlcHRpb24JSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCisgICAgICogQHBhcmFtICAgIGxvZ2luVGltZW91dCAgICBMb2dpbiB0aW1lb3V0LgorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIElmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldExvZ2luVGltZW91dChpbnQgbG9naW5UaW1lb3V0KSB0aHJvd3MgU1FMRXhjZXB0aW9uewotICAgIAl0aGlzLmxvZ2luVGltZW91dCA9IGxvZ2luVGltZW91dDsKKyAgICAgICAgdGhpcy5sb2dpblRpbWVvdXQgPSBsb2dpblRpbWVvdXQ7CiAgICAgfQotICAgIAotICAgIC8qKiAKKworICAgIC8qKgogICAgICAqIEdldCB0aGUgbG9nd3JpdGVyIG9iamVjdC4KICAgICAgKgogICAgICAqIEByZXR1cm4gPGNvZGU+IFByaW50V3JpdGVyIDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MJU1FMRXhjZXB0aW9uCUlmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIElmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgogICAgICAqLwogICAgIHB1YmxpYyBQcmludFdyaXRlciBnZXRMb2dXcml0ZXIoKSB0aHJvd3MgU1FMRXhjZXB0aW9uewotICAgIAlyZXR1cm4JbG9nV3JpdGVyOworICAgICAgICByZXR1cm4gICAgbG9nV3JpdGVyOwogICAgIH0KLSAgICAgICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGxvZ3dyaXRlciBvbiB0aGlzIG9iamVjdC4KICAgICAgKgogICAgICAqIEBwYXJhbSA8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MJU1FMRXhjZXB0aW9uCUlmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIElmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldExvZ1dyaXRlcihQcmludFdyaXRlciBsb2dXcml0ZXIpIHRocm93cyBTUUxFeGNlcHRpb257Ci0gICAgCXRoaXMubG9nV3JpdGVyID0gbG9nV3JpdGVyOwotICAgIH0gICAgICAgIAotICAgICAgICAKKyAgICAgICAgdGhpcy5sb2dXcml0ZXIgPSBsb2dXcml0ZXI7CisgICAgfQorCiAgICAgcHVibGljIExvZ2dlciBnZXRQYXJlbnRMb2dnZXIoKSB0aHJvd3MgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbnsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgZmVhdHVyZS4iKTsKICAgICB9CiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBkZXNjcmlwdGlvbi4KICAgICAgKgotICAgICAqIEByZXR1cm4JRGVzY3JpcHRpb24gYWJvdXQgdGhlIERhdGFTb3VyY2UuCisgICAgICogQHJldHVybiAgICBEZXNjcmlwdGlvbiBhYm91dCB0aGUgRGF0YVNvdXJjZS4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgewotICAgIAlyZXR1cm4gZGVzY3JpcHRpb247CisgICAgICAgIHJldHVybiBkZXNjcmlwdGlvbjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGRlc2NyaXB0aW9uLgogICAgICAqCiAgICAgICogQHBhcmFtIGRlc2NyaXB0aW9uIERlc2NyaXB0aW9uIGFib3V0IHRoZSBEYXRhU291cmNlLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERlc2NyaXB0aW9uKFN0cmluZyBkZXNjcmlwdGlvbikgewotICAgIAl0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247Ci0gICAgfSAgICAKLSAgICAKKyAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOworICAgIH0KKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgcmVmZXJlbmNlLgogICAgICAqCiAgICAgICogQHJldHVybiA8Y29kZT5SZWZlcmVuY2U8L2NvZGU+b2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyBSZWZlcmVuY2UgZ2V0UmVmZXJlbmNlKCkgewotICAgIAlyZXR1cm4gcmVmZXJlbmNlOworICAgICAgICByZXR1cm4gcmVmZXJlbmNlOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgcmVmZXJlbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCXJlZmVyZW5jZSA8Y29kZT5SZWZlcmVuY2U8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgcmVmZXJlbmNlIDxjb2RlPlJlZmVyZW5jZTwvY29kZT4gb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFJlZmVyZW5jZShSZWZlcmVuY2UgcmVmZXJlbmNlKSB7Ci0gICAgCXRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlOworICAgICAgICB0aGlzLnJlZmVyZW5jZSA9IHJlZmVyZW5jZTsKICAgICB9CiAKICAgICBwdWJsaWMgPFQ+IFQgdW53cmFwKENsYXNzPFQ+IGlmYWNlKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbi5qYXZhCmluZGV4IDU3NGVkNjYuLmJlYzBkNmIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW4uamF2YQpAQCAtMTgsMTMgKzE4LDEzIEBACiAKIHB1YmxpYyBpbnRlcmZhY2UgSmRiY1NldHVwQWRtaW4gewogCi0gICAgcHVibGljIHZvaWQgc2V0VGFibGVOYW1lKFN0cmluZyBkYik7IAorICAgIHB1YmxpYyB2b2lkIHNldFRhYmxlTmFtZShTdHJpbmcgZGIpOwogCiAgICAgcHVibGljIFN0cmluZyBnZXRUYWJsZU5hbWUoKTsKIAotICAgIHB1YmxpYyB2b2lkIHNldEpuZGlOYW1lKFN0cmluZyBuYW1lKTsgCisgICAgcHVibGljIHZvaWQgc2V0Sm5kaU5hbWUoU3RyaW5nIG5hbWUpOwogCi0gICAgcHVibGljIFN0cmluZyBnZXRKbmRpTmFtZSgpOyAKKyAgICBwdWJsaWMgU3RyaW5nIGdldEpuZGlOYW1lKCk7CiAKICAgICBwdWJsaWMgdm9pZCBzZXRTY2hlbWFOYW1lKFN0cmluZyBuYW1lKTsKIApAQCAtMzQsNiArMzQsNiBAQAogCiAgICAgcHVibGljIEludGVnZXIgZ2V0Tm9PZlJvd3MoKTsKIAotICAgIHB1YmxpYyBib29sZWFuIGNoZWNrU2V0dXAoKTsgCisgICAgcHVibGljIGJvb2xlYW4gY2hlY2tTZXR1cCgpOwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbkltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluSW1wbC5qYXZhCmluZGV4IDNiZDdjYWQuLmZlYzc0NDMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluSW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluSW1wbC5qYXZhCkBAIC02NSwxMSArNjUsMTEgQEAKIAogcHJpdmF0ZSB2b2lkIHByaW50SGllcmFyY2h5KENsYXNzTG9hZGVyIGNsLCBpbnQgY250KXsKIHdoaWxlKGNsICE9IG51bGwpIHsKLQlmb3IoaW50IGkgPTA7IGkgPCBjbnQ7IGkrKykgCi0JCVN5c3RlbS5vdXQucHJpbnQoIiAiICk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJQQVJFTlQgOiIgKyBjbCk7Ci0JY2wgPSBjbC5nZXRQYXJlbnQoKTsKLQljbnQgKz0gMzsKKyAgICBmb3IoaW50IGkgPTA7IGkgPCBjbnQ7IGkrKykKKyAgICAgICAgU3lzdGVtLm91dC5wcmludCgiICIgKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBBUkVOVCA6IiArIGNsKTsKKyAgICBjbCA9IGNsLmdldFBhcmVudCgpOworICAgIGNudCArPSAzOwogfQogfQogCkBAIC03OCwxMCArNzgsMTAgQEAKICAgICAgICAgZm9yKGludCBpID0wOyBpIDwgY250OyBpKyspCiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiICIgKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQQVJFTlQgb2YgQ2xhc3NMb2FkZXIgMSA6IiArIGNsMSk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJQQVJFTlQgb2YgQ2xhc3NMb2FkZXIgMiA6IiArIGNsMik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJFUVVBTFMgOiAiICsgKGNsMSA9PSBjbDIpKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBBUkVOVCBvZiBDbGFzc0xvYWRlciAyIDoiICsgY2wyKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVRVUFMUyA6ICIgKyAoY2wxID09IGNsMikpOwogICAgICAgICBjbDEgPSBjbDEuZ2V0UGFyZW50KCk7Ci0JY2wyID0gY2wyLmdldFBhcmVudCgpOworICAgIGNsMiA9IGNsMi5nZXRQYXJlbnQoKTsKICAgICAgICAgY250ICs9IDM7CiB9CiB9CkBAIC05MCw5MyArOTAsOTMgQEAKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja1NldHVwKCl7CiAKICAgICAgICAgaWYgKGpuZGlOYW1lPT0gbnVsbCB8fCBqbmRpTmFtZS50cmltKCkuZXF1YWxzKCIiKSkgewotCSAgIHJldHVybiBmYWxzZTsKLQl9CisgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAogICAgICAgICBpZiAodGFibGVOYW1lPT0gbnVsbCB8fCB0YWJsZU5hbWUudHJpbSgpLmVxdWFscygiIikpIHsKLQkgICByZXR1cm4gZmFsc2U7Ci0JfQorICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAgICAgICAgQ29ubmVjdGlvbiBjb24gPSBudWxsOwotCVN0YXRlbWVudCBzID0gbnVsbDsKLQlSZXN1bHRTZXQgcnMgPSBudWxsOwotCWJvb2xlYW4gYiA9IGZhbHNlOworICAgIFN0YXRlbWVudCBzID0gbnVsbDsKKyAgICBSZXN1bHRTZXQgcnMgPSBudWxsOworICAgIGJvb2xlYW4gYiA9IGZhbHNlOwogICAgICAgICB0cnkgewotCSAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCS8vZGVidWcKLQlDbGFzcyBjbHogPSBEYXRhU291cmNlLmNsYXNzOworICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgIC8vZGVidWcKKyAgICBDbGFzcyBjbHogPSBEYXRhU291cmNlLmNsYXNzOwogLyoKLQlpZihjbHouZ2V0Q2xhc3NMb2FkZXIoKSAhPSBudWxsKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiRGF0YVNvdXJjZSdzIGNsYXN4cyA6ICIgKyAgY2x6LmdldE5hbWUoKSArICAiIGNsYXNzbG9hZGVyICIgKyBjbHouZ2V0Q2xhc3NMb2FkZXIoKSk7Ci0JCXByaW50SGllcmFyY2h5KGNsei5nZXRDbGFzc0xvYWRlcigpLmdldFBhcmVudCgpLCA4KTsKLQl9Ci0JQ2xhc3MgY2xzID0gaWMubG9va3VwKGpuZGlOYW1lKS5nZXRDbGFzcygpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiTG9va2VkIHVwIGNsYXNzJ3MgOiAiICsgY2xzLmdldFBhY2thZ2UoKSArICI6IiArIGNscy5nZXROYW1lKCkgICsgIiBjbGFzc2xvYWRlciAiICArIGNscy5nZXRDbGFzc0xvYWRlcigpKTsKLQlwcmludEhpZXJhcmNoeShjbHMuZ2V0Q2xhc3NMb2FkZXIoKS5nZXRQYXJlbnQoKSwgOCk7CisgICAgaWYoY2x6LmdldENsYXNzTG9hZGVyKCkgIT0gbnVsbCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRhdGFTb3VyY2UncyBjbGFzeHMgOiAiICsgIGNsei5nZXROYW1lKCkgKyAgIiBjbGFzc2xvYWRlciAiICsgY2x6LmdldENsYXNzTG9hZGVyKCkpOworICAgICAgICBwcmludEhpZXJhcmNoeShjbHouZ2V0Q2xhc3NMb2FkZXIoKS5nZXRQYXJlbnQoKSwgOCk7CisgICAgfQorICAgIENsYXNzIGNscyA9IGljLmxvb2t1cChqbmRpTmFtZSkuZ2V0Q2xhc3MoKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tlZCB1cCBjbGFzcydzIDogIiArIGNscy5nZXRQYWNrYWdlKCkgKyAiOiIgKyBjbHMuZ2V0TmFtZSgpICArICIgY2xhc3Nsb2FkZXIgIiAgKyBjbHMuZ2V0Q2xhc3NMb2FkZXIoKSk7CisgICAgcHJpbnRIaWVyYXJjaHkoY2xzLmdldENsYXNzTG9hZGVyKCkuZ2V0UGFyZW50KCksIDgpOwogCi0JU3lzdGVtLm91dC5wcmludGxuKCJDbGFzc2xvYWRlcnMgZXF1YWwgPyAiICsgIChjbHouZ2V0Q2xhc3NMb2FkZXIoKSA9PSBjbHMuZ2V0Q2xhc3NMb2FkZXIoKSkpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiJiomKiYqJiogQ29tcGFyaW5nIEhpZXJhY2h5IERhdGFTb3VyY2UgdnMgbG9va2VkdXAiKTsKLQlpZihjbHouZ2V0Q2xhc3NMb2FkZXIoKSAhPSBudWxsKSB7Ci0JCWNvbXBhcmVIaWVyYXJjaHkoY2x6LmdldENsYXNzTG9hZGVyKCksIGNscy5nZXRDbGFzc0xvYWRlcigpLCA4KTsKLQl9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJDbGFzc2xvYWRlcnMgZXF1YWwgPyAiICsgIChjbHouZ2V0Q2xhc3NMb2FkZXIoKSA9PSBjbHMuZ2V0Q2xhc3NMb2FkZXIoKSkpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiJiomKiYqJiogQ29tcGFyaW5nIEhpZXJhY2h5IERhdGFTb3VyY2UgdnMgbG9va2VkdXAiKTsKKyAgICBpZihjbHouZ2V0Q2xhc3NMb2FkZXIoKSAhPSBudWxsKSB7CisgICAgICAgIGNvbXBhcmVIaWVyYXJjaHkoY2x6LmdldENsYXNzTG9hZGVyKCksIGNscy5nZXRDbGFzc0xvYWRlcigpLCA4KTsKKyAgICB9CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkJlZm9yZSBsb29rdXAiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJlZm9yZSBsb29rdXAiKTsKICovCi0JT2JqZWN0IG8gPSBpYy5sb29rdXAoam5kaU5hbWUpOwotLy8JU3lzdGVtLm91dC5wcmludGxuKCJhZnRlciBsb29rdXAgbG9va3VwIik7CisgICAgT2JqZWN0IG8gPSBpYy5sb29rdXAoam5kaU5hbWUpOworLy8gICAgU3lzdGVtLm91dC5wcmludGxuKCJhZnRlciBsb29rdXAgbG9va3VwIik7CiAKLQkgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKW8gOworICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpbyA7CiAvKgotCVN5c3RlbS5vdXQucHJpbnRsbigiYWZ0ZXIgY2FzdCIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLSBUcnlpbmcgb3VyIFN0dWZmICEhISIpOwotCXRyeSB7Ci0JCUNsYXNzIG8xID0gKENsYXNzLmZvck5hbWUoImNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlIikpOwotCQlDbGFzc0xvYWRlciBjbDEgPSBvMS5nZXRDbGFzc0xvYWRlcigpOwotCQlDbGFzc0xvYWRlciBjbDIgPSBEYXRhU291cmNlLmNsYXNzLmdldENsYXNzTG9hZGVyKCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQ2wxID09IENsMiIgKyAoY2wxID09IGNsMikpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNsYXNzZXMgZXF1YWwiICsgKERhdGFTb3VyY2UuY2xhc3MgPT0gbzEpKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYWZ0ZXIgY2FzdCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLSBUcnlpbmcgb3VyIFN0dWZmICEhISIpOworICAgIHRyeSB7CisgICAgICAgIENsYXNzIG8xID0gKENsYXNzLmZvck5hbWUoImNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlIikpOworICAgICAgICBDbGFzc0xvYWRlciBjbDEgPSBvMS5nZXRDbGFzc0xvYWRlcigpOworICAgICAgICBDbGFzc0xvYWRlciBjbDIgPSBEYXRhU291cmNlLmNsYXNzLmdldENsYXNzTG9hZGVyKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2wxID09IENsMiIgKyAoY2wxID09IGNsMikpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNsYXNzZXMgZXF1YWwiICsgKERhdGFTb3VyY2UuY2xhc3MgPT0gbzEpKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQogKi8KICAgICAgICAgICAgIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQkgICAgU3RyaW5nIGZ1bGxUYWJsZU5hbWUgPSB0YWJsZU5hbWU7Ci0JICAgIGlmIChzY2hlbWFOYW1lICE9IG51bGwgJiYgKCEoc2NoZW1hTmFtZS50cmltKCkuZXF1YWxzKCIiKSkpKSB7Ci0JICAgICAgICBmdWxsVGFibGVOYW1lID0gc2NoZW1hTmFtZS50cmltKCkgKyAiLiIgKyBmdWxsVGFibGVOYW1lOwotCSAgICB9Ci0JICAgIFN0cmluZyBxcnkgPSAic2VsZWN0ICogZnJvbSAiICsgZnVsbFRhYmxlTmFtZTsgCisgICAgICAgIFN0cmluZyBmdWxsVGFibGVOYW1lID0gdGFibGVOYW1lOworICAgICAgICBpZiAoc2NoZW1hTmFtZSAhPSBudWxsICYmICghKHNjaGVtYU5hbWUudHJpbSgpLmVxdWFscygiIikpKSkgeworICAgICAgICAgICAgZnVsbFRhYmxlTmFtZSA9IHNjaGVtYU5hbWUudHJpbSgpICsgIi4iICsgZnVsbFRhYmxlTmFtZTsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmcgcXJ5ID0gInNlbGVjdCAqIGZyb20gIiArIGZ1bGxUYWJsZU5hbWU7CiAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGVjdXRpbmcgcXVlcnkgOiIgKyBxcnkpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4ZWN1dGluZyBxdWVyeSA6IiArIHFyeSk7CiAKLQkgICAgcyA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKLQkgICAgcnMgPSBzLmV4ZWN1dGVRdWVyeShxcnkpOyAKKyAgICAgICAgcyA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgcnMgPSBzLmV4ZWN1dGVRdWVyeShxcnkpOwogCiAgICAgICAgICAgICBpbnQgaSA9IDA7Ci0JICAgIGlmIChycy5uZXh0KCkpIHsKLQkgICAgICAgIGkrKzsKLQkgICAgfQorICAgICAgICBpZiAocnMubmV4dCgpKSB7CisgICAgICAgICAgICBpKys7CisgICAgICAgIH0KIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJObyBvZiByb3dzIGZvdW5kOiIgKyBpKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTm8gb2Ygcm93cyBleHBlY3RlZDoiICsgbm9PZlJvd3MpOwogCi0JICAgIGlmIChpID09IG5vT2ZSb3dzLmludFZhbHVlKCkpIHsKLQkgICAgICAgYiA9IHRydWU7Ci0JICAgIH0gZWxzZSB7Ci0JICAgICAgIGIgPSBmYWxzZTsKLQkgICAgfQotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgYiA9IGZhbHNlOwotCX0gZmluYWxseSB7Ci0JICAgIHRyeSB7Ci0JICAgICAgICBpZiAocnMgIT0gbnVsbCkgcnMuY2xvc2UoKTsKLQkgICAgICAgIGlmIChzICE9IG51bGwpIHMuY2xvc2UoKTsKLQkgICAgICAgIGlmIChjb24gIT0gbnVsbCkgY29uLmNsb3NlKCk7CisgICAgICAgIGlmIChpID09IG5vT2ZSb3dzLmludFZhbHVlKCkpIHsKKyAgICAgICAgICAgYiA9IHRydWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgIGIgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgYiA9IGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpZiAocnMgIT0gbnVsbCkgcnMuY2xvc2UoKTsKKyAgICAgICAgICAgIGlmIChzICE9IG51bGwpIHMuY2xvc2UoKTsKKyAgICAgICAgICAgIGlmIChjb24gIT0gbnVsbCkgY29uLmNsb3NlKCk7CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICB9Ci0JfQotCVN5c3RlbS5vdXQucHJpbnRsbigiUmV0dXJuaW5nIHNldHVwIDoiICtiKTsKLQlyZXR1cm4gYjsKKyAgICAgICAgfQorICAgIH0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJldHVybmluZyBzZXR1cCA6IiArYik7CisgICAgcmV0dXJuIGI7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Mb2NhbFRyYW5zYWN0aW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Mb2NhbFRyYW5zYWN0aW9uLmphdmEKaW5kZXggOGViZTA1Ny4uYzU0YTIxNiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTG9jYWxUcmFuc2FjdGlvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0xvY2FsVHJhbnNhY3Rpb24uamF2YQpAQCAtMjMsNDUgKzIzLDQ1IEBACiAvKioKICAqIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDgvMDMKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA4LzAzCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiBwdWJsaWMgY2xhc3MgTG9jYWxUcmFuc2FjdGlvbiBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLkxvY2FsVHJhbnNhY3Rpb24gewotICAgIAorCiAgICAgcHJpdmF0ZSBNYW5hZ2VkQ29ubmVjdGlvbiBtYzsKLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdG9yIGZvciA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPi4KLSAgICAgKiBAcGFyYW0JbWMJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHRoYXQgcmV0dXJucwotICAgICAqCQkJdGhpcyA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBvYmplY3QgYXMKLSAgICAgKgkJCWEgcmVzdWx0IG9mIDxjb2RlPmdldExvY2FsVHJhbnNhY3Rpb248L2NvZGU+CisgICAgICogQHBhcmFtICAgIG1jICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiB0aGF0IHJldHVybnMKKyAgICAgKiAgICAgICAgICAgIHRoaXMgPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gb2JqZWN0IGFzCisgICAgICogICAgICAgICAgICBhIHJlc3VsdCBvZiA8Y29kZT5nZXRMb2NhbFRyYW5zYWN0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBMb2NhbFRyYW5zYWN0aW9uKE1hbmFnZWRDb25uZWN0aW9uIG1jKSB7CiAgICAgICAgIHRoaXMubWMgPSBtYzsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBCZWdpbiBhIGxvY2FsIHRyYW5zYWN0aW9uLgogICAgICAqCi0gICAgICogQHRocm93cwlMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNoYW5naW5nCi0gICAgICoJCQkJCQl0aGUgYXV0b2NvbW1pdCBtb2RlIG9mIHRoZSBwaHlzaWNhbAotICAgICAqCQkJCQkJY29ubmVjdGlvbgorICAgICAqIEB0aHJvd3MgICAgTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjaGFuZ2luZworICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGF1dG9jb21taXQgbW9kZSBvZiB0aGUgcGh5c2ljYWwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBiZWdpbigpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIC8vR0pDSU5UCi0JbWMudHJhbnNhY3Rpb25TdGFydGVkKCk7CisgICAgbWMudHJhbnNhY3Rpb25TdGFydGVkKCk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBtYy5nZXRBY3R1YWxDb25uZWN0aW9uKCkuc2V0QXV0b0NvbW1pdChmYWxzZSk7CiAgICAgICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbW1pdCBhIGxvY2FsIHRyYW5zYWN0aW9uLgotICAgICAqIEB0aHJvd3MJTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjaGFuZ2luZwotICAgICAqCQkJCQkJdGhlIGF1dG9jb21taXQgbW9kZSBvZiB0aGUgcGh5c2ljYWwKLSAgICAgKgkJCQkJCWNvbm5lY3Rpb24gb3IgY29tbWl0dGluZyB0aGUgdHJhbnNhY3Rpb24KKyAgICAgKiBAdGhyb3dzICAgIExvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2hhbmdpbmcKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhdXRvY29tbWl0IG1vZGUgb2YgdGhlIHBoeXNpY2FsCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uIG9yIGNvbW1pdHRpbmcgdGhlIHRyYW5zYWN0aW9uCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgY29tbWl0KCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgRXhjZXB0aW9uIGUgPSBudWxsOwpAQCAtNzIsMTUgKzcyLDE1IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICAgICAgLy9HSkNJTlQKLQltYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOworICAgIG1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUm9sbGJhY2sgYSBsb2NhbCB0cmFuc2FjdGlvbi4KLSAgICAgKiAKLSAgICAgKiBAdGhyb3dzCUxvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2hhbmdpbmcKLSAgICAgKgkJCQkJCXRoZSBhdXRvY29tbWl0IG1vZGUgb2YgdGhlIHBoeXNpY2FsCi0gICAgICoJCQkJCQljb25uZWN0aW9uIG9yIHJvbGxpbmcgYmFjayB0aGUgdHJhbnNhY3Rpb24KKyAgICAgKgorICAgICAqIEB0aHJvd3MgICAgTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjaGFuZ2luZworICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGF1dG9jb21taXQgbW9kZSBvZiB0aGUgcGh5c2ljYWwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gb3Igcm9sbGluZyBiYWNrIHRoZSB0cmFuc2FjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJvbGxiYWNrKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKQEAgLTkwLDcgKzkwLDcgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgICAgICAvL0dKQ0lOVAotCW1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CisgICAgbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbi5qYXZhCmluZGV4IDMwZjQ2MGEuLjJkYWQ1OWEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb24uamF2YQpAQCAtNDEsOCArNDEsOCBAQAogLyoqCiAgKiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW1wbGVtZW50YXRpb24gZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8yMgotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMjIKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIHB1YmxpYyBjbGFzcyBNYW5hZ2VkQ29ubmVjdGlvbiBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uIHsKIApAQCAtNTIsNyArNTIsNyBAQAogCiAgICAgcHJpdmF0ZSBib29sZWFuIGlzRGVzdHJveWVkID0gZmFsc2U7CiAgICAgcHJpdmF0ZSBib29sZWFuIGlzVXNhYmxlID0gdHJ1ZTsKLSAgICAKKwogICAgIHByaXZhdGUgaW50IGNvbm5lY3Rpb25UeXBlID0gSVNOT1RBUE9PTEVEQ09OTkVDVElPTjsKICAgICBwcml2YXRlIFBvb2xlZENvbm5lY3Rpb24gcGMgPSBudWxsOwogICAgIHByaXZhdGUgamF2YS5zcWwuQ29ubmVjdGlvbiBhY3R1YWxDb25uZWN0aW9uID0gbnVsbDsKQEAgLTYyLDcgKzYyLDcgQEAKICAgICBwcml2YXRlIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2YgPSBudWxsOwogICAgIHByaXZhdGUgWEFSZXNvdXJjZSB4YXIgPSBudWxsOwogICAgIHB1YmxpYyBDb25uZWN0aW9uSG9sZGVyIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGU7Ci0gICAgCisKICAgICAvL0dKQ0lOVAogICAgIHByaXZhdGUgaW50IGlzb2xhdGlvbkxldmVsV2hlbkNsZWFuZWQ7CiAgICAgcHJpdmF0ZSBib29sZWFuIGlzQ2xlYW4gPSBmYWxzZTsKQEAgLTc3LDcxICs3Nyw3MSBAQAogICAgIHN0YXRpYyB7CiAgICAgICAgIF9sb2dnZXIgPSBMb2dnZXIuZ2V0QW5vbnltb3VzTG9nZ2VyKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0b3IgZm9yIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPi4gVGhlIHBvb2xlZENvbm4gcGFyYW1ldGVyIGlzIGV4cGVjdGVkCi0gICAgICogdG8gYmUgbnVsbCBhbmQgc3FsQ29ubiBwYXJhbWV0ZXIgaXMgdGhlIGFjdHVhbCBjb25uZWN0aW9uIGluIGNhc2Ugd2hlcmUgCi0gICAgICogdGhlIGFjdHVhbCBjb25uZWN0aW9uIGlzIGdvdCBmcm9tIGEgbm9uIHBvb2xlZCBkYXRhc291cmNlIG9iamVjdC4gVGhlIAorICAgICAqIHRvIGJlIG51bGwgYW5kIHNxbENvbm4gcGFyYW1ldGVyIGlzIHRoZSBhY3R1YWwgY29ubmVjdGlvbiBpbiBjYXNlIHdoZXJlCisgICAgICogdGhlIGFjdHVhbCBjb25uZWN0aW9uIGlzIGdvdCBmcm9tIGEgbm9uIHBvb2xlZCBkYXRhc291cmNlIG9iamVjdC4gVGhlCiAgICAgICogcG9vbGVkQ29ubiBwYXJhbWV0ZXIgaXMgZXhwZWN0ZWQgdG8gYmUgbm9uIG51bGwgYW5kIHNxbENvbm4gcGFyYW1ldGVyCiAgICAgICogaXMgZXhwZWN0ZWQgdG8gYmUgbnVsbCBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgZGF0YXNvdXJjZSBvYmplY3QgaXMgYQogICAgICAqIGNvbm5lY3Rpb24gcG9vbCBkYXRhc291cmNlIG9yIGFuIHhhIGRhdGFzb3VyY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcG9vbGVkQ29ubgk8Y29kZT5Qb29sZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaW4gY2FzZSB0aGUgCi0gICAgICoJCQkJcGh5c2ljYWwgY29ubmVjdGlvbiBpcyB0byBiZSBvYnRhaW5lZCBmcm9tIGEgcG9vbGVkCi0gICAgICoJCQkJPGNvZGU+RGF0YVNvdXJjZTwvY29kZT47IG51bGwgb3RoZXJ3aXNlCi0gICAgICogQHBhcmFtCXNxbENvbm4JPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGluIGNhc2UgdGhlIHBoeXNpY2FsCi0gICAgICoJCQljb25uZWN0aW9uIGlzIHRvIGJlIG9idGFpbmVkIGZyb20gYSBub24gcG9vbGVkIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+OwotICAgICAqCQkJbnVsbCBvdGhlcndpc2UKLSAgICAgKiBAcGFyYW0JcGFzc3dkQ3JlZAlvYmplY3QgY29uYXRpbmluZyB0aGUKLSAgICAgKgkJCQl1c2VyIGFuZCBwYXNzd29yZCBmb3IgYWxsb2NhdGluZyB0aGUgY29ubmVjdGlvbgotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0Ci0gICAgICoJCQkJCXRoYXQgY3JlYXRlZCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QKLSAgICAgKgkJCQkJaXMgbm90IHRoZSBzYW1lIGFzIHJldHVybmVkIGJ5IDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KLSAgICAgKgkJCQkJb2JqZWN0IHBhc3NlZAorICAgICAqIEBwYXJhbSAgICBwb29sZWRDb25uICAgIDxjb2RlPlBvb2xlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpbiBjYXNlIHRoZQorICAgICAqICAgICAgICAgICAgICAgIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgdG8gYmUgb2J0YWluZWQgZnJvbSBhIHBvb2xlZAorICAgICAqICAgICAgICAgICAgICAgIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+OyBudWxsIG90aGVyd2lzZQorICAgICAqIEBwYXJhbSAgICBzcWxDb25uICAgIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpbiBjYXNlIHRoZSBwaHlzaWNhbAorICAgICAqICAgICAgICAgICAgY29ubmVjdGlvbiBpcyB0byBiZSBvYnRhaW5lZCBmcm9tIGEgbm9uIHBvb2xlZCA8Y29kZT5EYXRhU291cmNlPC9jb2RlPjsKKyAgICAgKiAgICAgICAgICAgIG51bGwgb3RoZXJ3aXNlCisgICAgICogQHBhcmFtICAgIHBhc3N3ZENyZWQgICAgb2JqZWN0IGNvbmF0aW5pbmcgdGhlCisgICAgICogICAgICAgICAgICAgICAgdXNlciBhbmQgcGFzc3dvcmQgZm9yIGFsbG9jYXRpbmcgdGhlIGNvbm5lY3Rpb24KKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdAorICAgICAqICAgICAgICAgICAgICAgICAgICB0aGF0IGNyZWF0ZWQgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0CisgICAgICogICAgICAgICAgICAgICAgICAgIGlzIG5vdCB0aGUgc2FtZSBhcyByZXR1cm5lZCBieSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+CisgICAgICogICAgICAgICAgICAgICAgICAgIG9iamVjdCBwYXNzZWQKICAgICAgKi8KLSAgICBwdWJsaWMgTWFuYWdlZENvbm5lY3Rpb24oUG9vbGVkQ29ubmVjdGlvbiBwb29sZWRDb25uLCBqYXZhLnNxbC5Db25uZWN0aW9uIHNxbENvbm4sIAorICAgIHB1YmxpYyBNYW5hZ2VkQ29ubmVjdGlvbihQb29sZWRDb25uZWN0aW9uIHBvb2xlZENvbm4sIGphdmEuc3FsLkNvbm5lY3Rpb24gc3FsQ29ubiwKICAgICAgICAgUGFzc3dvcmRDcmVkZW50aWFsIHBhc3N3ZENyZWQsIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2YpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKHBvb2xlZENvbm4gPT0gbnVsbCAmJiBzcWxDb25uID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQ29ubmVjdGlvbiBvYmplY3QgY2Fubm90IGJlIG51bGwiKTsKICAgICAgICAgfQogCi0JaWYgKGNvbm5lY3Rpb25UeXBlID09IElTTk9UQVBPT0xFRENPTk5FQ1RJT04gKSB7Ci0JICAgIGFjdHVhbENvbm5lY3Rpb24gPSBzcWxDb25uOwotCX0KKyAgICBpZiAoY29ubmVjdGlvblR5cGUgPT0gSVNOT1RBUE9PTEVEQ09OTkVDVElPTiApIHsKKyAgICAgICAgYWN0dWFsQ29ubmVjdGlvbiA9IHNxbENvbm47CisgICAgfQogCiAgICAgICAgIHBjID0gcG9vbGVkQ29ubjsKICAgICAgICAgY29ubmVjdGlvbkhhbmRsZXMgPSBuZXcgSGFzaHRhYmxlKCk7CiAgICAgICAgIHBhc3N3ZENyZWRlbnRpYWwgPSBwYXNzd2RDcmVkOwogICAgICAgICB0aGlzLm1jZiA9IG1jZjsKLSAgICAgICAgaWYocGFzc3dkQ3JlZGVudGlhbCAhPSBudWxsICYmICAKKyAgICAgICAgaWYocGFzc3dkQ3JlZGVudGlhbCAhPSBudWxsICYmCiAgICAgICAgICAgICB0aGlzLm1jZi5lcXVhbHMocGFzc3dkQ3JlZGVudGlhbC5nZXRNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkoKSkgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSB0aGF0IGhhcyBjcmVhdGVkIHRoaXMgIiArIAorICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IHRoYXQgaGFzIGNyZWF0ZWQgdGhpcyAiICsKICAgICAgICAgICAgICAgICAiTWFuYWdlZENvbm5lY3Rpb24gaXMgbm90IHRoZSBzYW1lIGFzIHRoZSBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgcmV0dXJuZWQgYnkiICsKICAgICAgICAgICAgICAgICAgICAgIiB0aGUgUGFzc3dvcmRDcmVkZW50aWFsIGZvciB0aGlzIE1hbmFnZWRDb25uZWN0aW9uIik7CiAgICAgICAgIH0KICAgICAgICAgbG9nV3JpdGVyID0gbWNmLmdldExvZ1dyaXRlcigpOwogICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKLQljZSA9IG5ldyBDb25uZWN0aW9uRXZlbnQodGhpcywgQ29ubmVjdGlvbkV2ZW50LkNPTk5FQ1RJT05fQ0xPU0VEKTsKKyAgICBjZSA9IG5ldyBDb25uZWN0aW9uRXZlbnQodGhpcywgQ29ubmVjdGlvbkV2ZW50LkNPTk5FQ1RJT05fQ0xPU0VEKTsKICAgICB9CiAKICAgICAvKioKICAgICAgKiBBZGRzIGEgY29ubmVjdGlvbiBldmVudCBsaXN0ZW5lciB0byB0aGUgTWFuYWdlZENvbm5lY3Rpb24gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbGlzdGVuZXIJPGNvZGU+Q29ubmVjdGlvbkV2ZW50TGlzdGVuZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGxpc3RlbmVyICAgIDxjb2RlPkNvbm5lY3Rpb25FdmVudExpc3RlbmVyPC9jb2RlPgogICAgICAqIEBzZWUgPGNvZGU+cmVtb3ZlQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgYWRkQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXIoQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXIgbGlzdGVuZXIpIHsKLQl0aGlzLmxpc3RlbmVyID0gbGlzdGVuZXI7CisgICAgdGhpcy5saXN0ZW5lciA9IGxpc3RlbmVyOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFVzZWQgYnkgdGhlIGNvbnRhaW5lciB0byBjaGFuZ2UgdGhlIGFzc29jaWF0aW9uIG9mIGFuIGFwcGxpY2F0aW9uLWxldmVsIAorICAgICAqIFVzZWQgYnkgdGhlIGNvbnRhaW5lciB0byBjaGFuZ2UgdGhlIGFzc29jaWF0aW9uIG9mIGFuIGFwcGxpY2F0aW9uLWxldmVsCiAgICAgICogY29ubmVjdGlvbiBoYW5kbGUgd2l0aCBhIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQljb25uZWN0aW9uCTxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRvIGJlIGFzc29jaWF0ZWQgd2l0aAotICAgICAqCQkJCXRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBubyBtb3JlCi0gICAgICoJCQkJCXZhbGlkIG9yIHRoZSBjb25uZWN0aW9uIGhhbmRsZSBwYXNzZWQgaXMgbnVsbAorICAgICAqIEBwYXJhbSAgICBjb25uZWN0aW9uICAgIDxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRvIGJlIGFzc29jaWF0ZWQgd2l0aAorICAgICAqICAgICAgICAgICAgICAgIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBubyBtb3JlCisgICAgICogICAgICAgICAgICAgICAgICAgIHZhbGlkIG9yIHRoZSBjb25uZWN0aW9uIGhhbmRsZSBwYXNzZWQgaXMgbnVsbAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGFzc29jaWF0ZUNvbm5lY3Rpb24oT2JqZWN0IGNvbm5lY3Rpb24pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC0xNTIsMTEgKzE1MiwxMSBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJDb25uZWN0aW9uIGhhbmRsZSBjYW5ub3QgYmUgbnVsbCIpOwogICAgICAgICB9CiAgICAgICAgIENvbm5lY3Rpb25Ib2xkZXIgY2ggPSAoQ29ubmVjdGlvbkhvbGRlcikgY29ubmVjdGlvbjsKLSAgICAgICAgCisKICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1jID0gKGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiljaC5nZXRNYW5hZ2VkQ29ubmVjdGlvbigpOwotCW1jLmFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOwotCWlzQ2xlYW4gPSBmYWxzZTsKLSAgICAgICAgCisgICAgbWMuYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7CisgICAgaXNDbGVhbiA9IGZhbHNlOworCiAgICAgICAgIGNoLmFzc29jaWF0ZUNvbm5lY3Rpb24oYWN0dWFsQ29ubmVjdGlvbiwgdGhpcyk7CiAgICAgICAgIC8qKgogICAgICAgICAgKiBUaGUgZXhwZWN0YXRpb24gZnJvbSB0aGUgYWJvdmUgbWV0aG9kIGlzIHRoYXQgdGhlIGNvbm5lY3Rpb24gaG9sZGVyCkBAIC0xNjUsMzQgKzE2NSwzNCBAQAogICAgICAgICAgKiB0byB0aGUgTWFuYWdlZENvbm5lY3Rpb24gaW5zdGFuY2Ugd2l0aCB0aGlzIE1hbmFnZWRDb25uZWN0aW9uIGluc3RhbmNlLgogICAgICAgICAgKiBBbnkgcHJldmlvdXMgc3RhdGVtZW50cyBhbmQgcmVzdWx0IHNldHMgYWxzbyBuZWVkIHRvIGJlIHJlbW92ZWQuCiAgICAgICAgICAqLwotICAgICAgICAgCisKICAgICAgICAgIGlmKGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgIT0gbnVsbCkgewogICAgICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZS5zZXRBY3RpdmUoZmFsc2UpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGNoLnNldEFjdGl2ZSh0cnVlKTsKLSAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IGNoOyAKKyAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IGNoOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIEFwcGxpY2F0aW9uIHNlcnZlciBjYWxscyB0aGlzIG1ldGhvZCB0byBmb3JjZSBhbnkgY2xlYW51cCBvbiB0aGUgCisgICAgICogQXBwbGljYXRpb24gc2VydmVyIGNhbGxzIHRoaXMgbWV0aG9kIHRvIGZvcmNlIGFueSBjbGVhbnVwIG9uIHRoZQogICAgICAqIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4gVGhpcyBtZXRob2QgY2FsbHMgdGhlIGludmFsaWRhdGUKICAgICAgKiBtZXRob2Qgb24gYWxsIENvbm5lY3Rpb25IYW5kbGVzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPi4KLSAgICAgKiAKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vIG1vcmUgdmFsaWQKKyAgICAgKgorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm8gbW9yZSB2YWxpZAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNsZWFudXAoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBjbGVhbnVwIik7CiAgICAgICAgIH0KICAgICAgICAgY2hlY2tJZlZhbGlkKCk7Ci0gICAgICAgIAorCiAgICAgICAgIC8qKgogICAgICAgICAgKiBtYXkgbmVlZCB0byBzZXQgdGhlIGF1dG9jb21taXQgdG8gdHJ1ZSBmb3IgdGhlIG5vbi1wb29sZWQgY2FzZS4KICAgICAgICAgICovCiAgICAgICAgIC8vR0pDSU5UCi0JLy9pZiAoYWN0dWFsQ29ubmVjdGlvbiAhPSBudWxsKSB7Ci0JaWYgKGNvbm5lY3Rpb25UeXBlID09IElTTk9UQVBPT0xFRENPTk5FQ1RJT04gKSB7CisgICAgLy9pZiAoYWN0dWFsQ29ubmVjdGlvbiAhPSBudWxsKSB7CisgICAgaWYgKGNvbm5lY3Rpb25UeXBlID09IElTTk9UQVBPT0xFRENPTk5FQ1RJT04gKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpc29sYXRpb25MZXZlbFdoZW5DbGVhbmVkID0gYWN0dWFsQ29ubmVjdGlvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpOwogICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7CkBAIC0yMDEsMTcgKzIwMSwxNyBAQAogICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaXNDbGVhbiA9IHRydWU7Ci0gICAgICAgIAorCiAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRoaXMgbWV0aG9kIHJlbW92ZXMgYWxsIHRoZSBjb25uZWN0aW9uIGhhbmRsZXMgZnJvbSB0aGUgdGFibGUKICAgICAgKiBvZiBjb25uZWN0aW9uIGhhbmRsZXMgYW5kIGludmFsaWRhdGVzIGFsbCBvZiB0aGVtIHNvIHRoYXQgYW55CiAgICAgICogb3BlcmF0aW9uIG9uIHRob3NlIGNvbm5lY3Rpb24gaGFuZGxlcyB0aHJvd3MgYW4gZXhjZXB0aW9uLgogICAgICAqCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhIHByb2JsZW0gaW4gcmV0cmlldmluZwotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJdGhlIGNvbm5lY3Rpb24gaGFuZGxlcworICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYSBwcm9ibGVtIGluIHJldHJpZXZpbmcKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb25uZWN0aW9uIGhhbmRsZXMKICAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgaW52YWxpZGF0ZUFsbENvbm5lY3Rpb25IYW5kbGVzKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgU2V0IGhhbmRsZXMgPSBjb25uZWN0aW9uSGFuZGxlcy5rZXlTZXQoKTsKQEAgLTIyNiwyMiArMjI2LDIyIEBACiAgICAgICAgIH0KICAgICAgICAgY29ubmVjdGlvbkhhbmRsZXMuY2xlYXIoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBEZXN0cm95cyB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiB0byB0aGUgdW5kZXJseWluZyByZXNvdXJjZSBtYW5hZ2VyLgotICAgICAqIAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2xvc2luZyB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbgorICAgICAqCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjbG9zaW5nIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBkZXN0cm95Iik7CiAgICAgICAgIH0KLQkvL0dKQ0lOVAotCWlmKGlzRGVzdHJveWVkID09IHRydWUpIHsKLQkgICAgcmV0dXJuOwkKLQl9CisgICAgLy9HSkNJTlQKKyAgICBpZihpc0Rlc3Ryb3llZCA9PSB0cnVlKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLQlhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKKyAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGlmKGNvbm5lY3Rpb25UeXBlID09IElTWEFDT05ORUNUSU9OIHx8IGNvbm5lY3Rpb25UeXBlID09IElTUE9PTEVEQ09OTkVDVElPTikgewogICAgICAgICAgICAgICAgIHBjLmNsb3NlKCk7CkBAIC0yNTUsMjggKzI1NSwyOCBAQAogICAgICAgICAgICAgaXNEZXN0cm95ZWQgPSB0cnVlOwogICAgICAgICAgICAgcGFzc3dkQ3JlZGVudGlhbCA9IG51bGw7CiAgICAgICAgICAgICBjb25uZWN0aW9uSGFuZGxlcyA9IG51bGw7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBmb2xsb3dpbmcgZXhjZXB0aW9uIGhhcyBvY2N1cmVkIGR1cmluZyBkZXN0cm95OiAiIAorICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgZm9sbG93aW5nIGV4Y2VwdGlvbiBoYXMgb2NjdXJlZCBkdXJpbmcgZGVzdHJveTogIgogICAgICAgICAgICAgICAgICsgc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgICAgIGlzRGVzdHJveWVkID0gdHJ1ZTsKICAgICAgICAgcGFzc3dkQ3JlZGVudGlhbCA9IG51bGw7CiAgICAgICAgIGNvbm5lY3Rpb25IYW5kbGVzID0gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgbmV3IGNvbm5lY3Rpb24gaGFuZGxlIGZvciB0aGUgdW5kZXJseWluZyBwaHlzaWNhbCAKKyAgICAgKiBDcmVhdGVzIGEgbmV3IGNvbm5lY3Rpb24gaGFuZGxlIGZvciB0aGUgdW5kZXJseWluZyBwaHlzaWNhbAogICAgICAqIGNvbm5lY3Rpb24gcmVwcmVzZW50ZWQgYnkgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlzdWJqZWN0CTxjb2RlPlN1YmplY3Q8L2NvZGU+IHBhcmFtZXRlciBuZWVkZWQgZm9yIGF1dGhlbnRpY2F0aW9uCi0gICAgICogQHBhcmFtCWN4UmVxSW5mbwk8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IGNhcnJpZXMgdGhlIHVzZXIgCi0gICAgICogICAgICAgCSAgICAgICAgIAlhbmQgcGFzc3dvcmQgcmVxdWlyZWQgZm9yIGdldHRpbmcgdGhpcyBjb25uZWN0aW9uLgotICAgICAqIEByZXR1cm4JQ29ubmVjdGlvbgl0aGUgY29ubmVjdGlvbiBoYW5kbGUgPGNvZGU+T2JqZWN0PC9jb2RlPgotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUgCi0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAlwaHlzaWNhbCBjb25uZWN0aW9uIGZyb20gdGhlIHBvb2xlZCBjb25uZWN0aW9uIAotICAgICAqIEB0aHJvd3MJU2VjdXJpdHlFeGNlcHRpb24JaWYgdGhlcmUgaXMgYSBtaXNtYXRjaCBiZXR3ZWVuIHRoZQotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJcGFzc3dvcmQgY3JlZGVudGlhbHMgb3IgcmVhdXRoZW50aWNhdGlvbiBpcyByZXF1ZXN0ZWQKKyAgICAgKiBAcGFyYW0gICAgc3ViamVjdCAgICA8Y29kZT5TdWJqZWN0PC9jb2RlPiBwYXJhbWV0ZXIgbmVlZGVkIGZvciBhdXRoZW50aWNhdGlvbgorICAgICAqIEBwYXJhbSAgICBjeFJlcUluZm8gICAgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBjYXJyaWVzIHRoZSB1c2VyCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICBhbmQgcGFzc3dvcmQgcmVxdWlyZWQgZm9yIGdldHRpbmcgdGhpcyBjb25uZWN0aW9uLgorICAgICAqIEByZXR1cm4gICAgQ29ubmVjdGlvbiAgICB0aGUgY29ubmVjdGlvbiBoYW5kbGUgPGNvZGU+T2JqZWN0PC9jb2RlPgorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoeXNpY2FsIGNvbm5lY3Rpb24gZnJvbSB0aGUgcG9vbGVkIGNvbm5lY3Rpb24KKyAgICAgKiBAdGhyb3dzICAgIFNlY3VyaXR5RXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGEgbWlzbWF0Y2ggYmV0d2VlbiB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkIGNyZWRlbnRpYWxzIG9yIHJlYXV0aGVudGljYXRpb24gaXMgcmVxdWVzdGVkCiAgICAgICovCi0gICAgcHVibGljIE9iamVjdCBnZXRDb25uZWN0aW9uKFN1YmplY3Qgc3ViLCBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm8gY3hSZXFJbmZvKSAKKyAgICBwdWJsaWMgT2JqZWN0IGdldENvbm5lY3Rpb24oU3ViamVjdCBzdWIsIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mbyBjeFJlcUluZm8pCiAgICAgICAgIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CiAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gZ2V0Q29ubmVjdGlvbiIpOwpAQCAtMjg0LDE0ICsyODQsMTQgQEAKICAgICAgICAgY2hlY2tJZlZhbGlkKCk7CiAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm8gY3hSZXF1ZXN0SW5mbyA9IChjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZvKSBjeFJlcUluZm87CiAgICAgICAgIFBhc3N3b3JkQ3JlZGVudGlhbCBwYXNzd2RDcmVkID0gU2VjdXJpdHlVdGlscy5nZXRQYXNzd29yZENyZWRlbnRpYWwodGhpcy5tY2YsIHN1YiwgY3hSZXF1ZXN0SW5mbyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICBpZihTZWN1cml0eVV0aWxzLmlzUGFzc3dvcmRDcmVkZW50aWFsRXF1YWwodGhpcy5wYXNzd2RDcmVkZW50aWFsLCBwYXNzd2RDcmVkKSA9PSBmYWxzZSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IGpha2FydGEucmVzb3VyY2Uuc3BpLlNlY3VyaXR5RXhjZXB0aW9uKCJSZS1hdXRoZW50aWNhdGlvbiBub3Qgc3VwcG9ydGVkIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgLy9HSkNJTlQKICAgICAgICAgZ2V0QWN0dWFsQ29ubmVjdGlvbigpOwotIAorCiAgICAgICAgIC8qKgogICAgICAgICAgKiBUaGUgZm9sbG93aW5nIGNvZGUgaW4gdGhlIGlmIHN0YXRlbWVudCBmaXJzdCBjaGVja3MgaWYgdGhpcyBNYW5hZ2VkQ29ubmVjdGlvbgogICAgICAgICAgKiBpcyBjbGVhbiBvciBub3QuIElmIGl0IGlzLCBpdCByZXNldHMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbCB0byB3aGF0CkBAIC0zMDEsMjggKzMwMSwyOCBAQAogICAgICAgICBpZihpc0NsZWFuKSB7CiAgICAgICAgICAgICAoKGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkpbWNmKS5yZXNldElzb2xhdGlvbih0aGlzLCBpc29sYXRpb25MZXZlbFdoZW5DbGVhbmVkKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgIAorCisKICAgICAgICAgQ29ubmVjdGlvbkhvbGRlciBjb25uSG9sZGVyT2JqZWN0ID0gbmV3IENvbm5lY3Rpb25Ib2xkZXIoYWN0dWFsQ29ubmVjdGlvbiwgdGhpcyk7Ci0JaXNDbGVhbj1mYWxzZTsKLSAgICAgICAgCisgICAgaXNDbGVhbj1mYWxzZTsKKwogICAgICAgICBpZihhY3RpdmVDb25uZWN0aW9uSGFuZGxlICE9IG51bGwpIHsKICAgICAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUuc2V0QWN0aXZlKGZhbHNlKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBjb25uSG9sZGVyT2JqZWN0LnNldEFjdGl2ZSh0cnVlKTsKICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IGNvbm5Ib2xkZXJPYmplY3Q7Ci0gCisKICAgICAgICAgcmV0dXJuIGNvbm5Ib2xkZXJPYmplY3Q7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBhbiA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4gVGhlIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IGludGVyZmFjZQotICAgICAqIGlzIHVzZWQgYnkgdGhlIGNvbnRhaW5lciB0byBtYW5hZ2UgbG9jYWwgdHJhbnNhY3Rpb25zIGZvciBhIFJNIGluc3RhbmNlLiAKKyAgICAgKiBpcyB1c2VkIGJ5IHRoZSBjb250YWluZXIgdG8gbWFuYWdlIGxvY2FsIHRyYW5zYWN0aW9ucyBmb3IgYSBSTSBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqIEByZXR1cm4gICAgPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqLwogICAgIHB1YmxpYyBqYWthcnRhLnJlc291cmNlLnNwaS5Mb2NhbFRyYW5zYWN0aW9uIGdldExvY2FsVHJhbnNhY3Rpb24oKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtMzMxLDEzICszMzEsMTMgQEAKICAgICAgICAgY2hlY2tJZlZhbGlkKCk7CiAgICAgICAgIHJldHVybiBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLkxvY2FsVHJhbnNhY3Rpb24odGhpcyk7CiAgICAgfQotICAgICAKKwogICAgIC8qKgotICAgICAqIEdldHMgdGhlIGxvZyB3cml0ZXIgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLiAKKyAgICAgKiBHZXRzIHRoZSBsb2cgd3JpdGVyIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIAotICAgICAqCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqIEByZXR1cm4gICAgPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzCisgICAgICogICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCiAgICAgICogQHNlZSA8Y29kZT5zZXRMb2dXcml0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFByaW50V3JpdGVyIGdldExvZ1dyaXRlcigpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CkBAIC0zNDUsNDYgKzM0NSw0NiBAQAogICAgICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBnZXRMb2dXcml0ZXIiKTsKICAgICAgICAgfQogICAgICAgICBjaGVja0lmVmFsaWQoKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGxvZ1dyaXRlcjsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBtZXRhZGF0YSBpbmZvcm1hdGlvbiBmb3IgdGhpcyBjb25uZWN0aW9uJ3MgdW5kZXJseWluZyBFSVMgCi0gICAgICogcmVzb3VyY2UgbWFuYWdlciBpbnN0YW5jZS4gCisgICAgICogR2V0cyB0aGUgbWV0YWRhdGEgaW5mb3JtYXRpb24gZm9yIHRoaXMgY29ubmVjdGlvbidzIHVuZGVybHlpbmcgRUlTCisgICAgICogcmVzb3VyY2UgbWFuYWdlciBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YTwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqIEByZXR1cm4gICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YTwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqLwogICAgIHB1YmxpYyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhIGdldE1ldGFEYXRhKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gZ2V0TWV0YURhdGEiKTsKICAgICAgICAgfQogICAgICAgICBjaGVja0lmVmFsaWQoKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YSh0aGlzKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIGFuIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlLiAKKyAgICAgKiBSZXR1cm5zIGFuIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIG9yCi0gICAgICoJCQkJCXRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlIAotICAgICAqCQkJCQk8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJTm90U3VwcG9ydGVkRXhjZXB0aW9uCWlmIHVuZGVybHlpbmcgZGF0YXNvdXJjZSBpcyBub3QgYW4KLSAgICAgKgkJCQkJPGNvZGU+WEFEYXRhU291cmNlPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBvcgorICAgICAqICAgICAgICAgICAgICAgICAgICB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgTm90U3VwcG9ydGVkRXhjZXB0aW9uICAgIGlmIHVuZGVybHlpbmcgZGF0YXNvdXJjZSBpcyBub3QgYW4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgPGNvZGU+WEFEYXRhU291cmNlPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBYQVJlc291cmNlIGdldFhBUmVzb3VyY2UoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBnZXRYQVJlc291cmNlIik7CiAgICAgICAgIH0KICAgICAgICAgY2hlY2tJZlZhbGlkKCk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKGNvbm5lY3Rpb25UeXBlID09IElTWEFDT05ORUNUSU9OKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGlmKHhhciA9PSBudWxsKSB7Ci0JCSAgICAvKioKKyAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgICAgICAgICAgKiBVc2luZyB0aGUgd3JhcHBlciBYQVJlc291cmNlLgogICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICAgeGFyID0gbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5YQVJlc291cmNlSW1wbCgoKFhBQ29ubmVjdGlvbilwYykuZ2V0WEFSZXNvdXJjZSgpLCB0aGlzKTsKQEAgLTM5NywxNiArMzk3LDE2IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJDYW5ub3QgZ2V0IGFuIFhBUmVzb3VyY2UgZnJvbSBhIG5vbiBYQSBjb25uZWN0aW9uIik7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZW1vdmVzIGFuIGFscmVhZHkgcmVnaXN0ZXJlZCBjb25uZWN0aW9uIGV2ZW50IGxpc3RlbmVyIGZyb20gdGhlCiAgICAgICogPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCWxpc3RlbmVyCTxjb2RlPkNvbm5lY3Rpb25FdmVudExpc3RlbmVyPC9jb2RlPiB0byBiZSByZW1vdmVkCisgICAgICogQHBhcmFtICAgIGxpc3RlbmVyICAgIDxjb2RlPkNvbm5lY3Rpb25FdmVudExpc3RlbmVyPC9jb2RlPiB0byBiZSByZW1vdmVkCiAgICAgICogQHNlZSA8Y29kZT5hZGRDb25uZWN0aW9uRXZlbnRMaXN0ZW5lcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCByZW1vdmVDb25uZWN0aW9uRXZlbnRMaXN0ZW5lcihDb25uZWN0aW9uRXZlbnRMaXN0ZW5lciBsaXN0ZW5lcikgewotCWxpc3RlbmVyID0gbnVsbDsKKyAgICBsaXN0ZW5lciA9IG51bGw7CiAgICAgfQogCiAgICAgLyoqCkBAIC00MTUsNyArNDE1LDcgQEAKICAgICAgKiBMb2NhbFRyYW5zYWN0aW9uIG9iamVjdCB3aGVuIGl0cyBiZWdpbigpIG1ldGhvZCBpcyBjYWxsZWQuCiAgICAgICovCiAgICAgdm9pZCB0cmFuc2FjdGlvblN0YXJ0ZWQoKSB7Ci0JdHJhbnNhY3Rpb25JblByb2dyZXNzID0gdHJ1ZTsJCisgICAgdHJhbnNhY3Rpb25JblByb2dyZXNzID0gdHJ1ZTsKICAgICB9CiAKICAgICAvKioKQEAgLTQyNCwxNiArNDI0LDE2IEBACiAgICAgICogTG9jYWxUcmFuc2FjdGlvbiBvYmplY3Qgd2hlbiBpdHMgZW5kKCkgbWV0aG9kIGlzIGNhbGxlZC4KICAgICAgKi8KICAgICB2b2lkIHRyYW5zYWN0aW9uQ29tcGxldGVkKCkgewotCXRyYW5zYWN0aW9uSW5Qcm9ncmVzcyA9IGZhbHNlOwotCWlmKGNvbm5lY3Rpb25UeXBlID09IElTUE9PTEVEQ09OTkVDVElPTiB8fCBjb25uZWN0aW9uVHlwZSA9PSBJU1hBQ09OTkVDVElPTikgeworICAgIHRyYW5zYWN0aW9uSW5Qcm9ncmVzcyA9IGZhbHNlOworICAgIGlmKGNvbm5lY3Rpb25UeXBlID09IElTUE9PTEVEQ09OTkVDVElPTiB8fCBjb25uZWN0aW9uVHlwZSA9PSBJU1hBQ09OTkVDVElPTikgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBpc29sYXRpb25MZXZlbFdoZW5DbGVhbmVkID0gYWN0dWFsQ29ubmVjdGlvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpOwogICAgICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICAgICAgLy9jaGVjayB3aGF0IHRvIGRvIGluIHRoaXMgY2FzZSEhCi0JCV9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLm5vdGdvdF90eF9pc29sdmwiKTsKKyAgICAgICAgICAgIC8vY2hlY2sgd2hhdCB0byBkbyBpbiB0aGlzIGNhc2UhIQorICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5ub3Rnb3RfdHhfaXNvbHZsIik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLQkgICAgdHJ5IHsKKworICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGFjdHVhbENvbm5lY3Rpb24uY2xvc2UoKTsKICAgICAgICAgICAgICAgICBhY3R1YWxDb25uZWN0aW9uID0gbnVsbDsKICAgICAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKQEAgLTQ0MSw3ICs0NDEsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLQkgICAgICAgIAorCiAgICAgICAgIGlzQ2xlYW4gPSB0cnVlOwogCiAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOwpAQCAtNDUzLDI4ICs0NTMsMjggQEAKICAgICAgKiBvciBub3QuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gaXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSB7Ci0JcmV0dXJuIHRyYW5zYWN0aW9uSW5Qcm9ncmVzczsKKyAgICByZXR1cm4gdHJhbnNhY3Rpb25JblByb2dyZXNzOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGxvZyB3cml0ZXIgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCW91dAk8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMKLSAgICAgKgkJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICogQHBhcmFtICAgIG91dCAgICA8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyAgICAgKiAgICAgICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCiAgICAgICogQHNlZSA8Y29kZT5nZXRMb2dXcml0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TG9nV3JpdGVyKFByaW50V3JpdGVyIG91dCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgY2hlY2tJZlZhbGlkKCk7CiAgICAgICAgIGxvZ1dyaXRlciA9IG91dDsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBUaGlzIG1ldGhvZCBkZXRlcm1pbmVzIHRoZSB0eXBlIG9mIHRoZSBjb25uZWN0aW9uIGJlaW5nIGhlbGQgCisgICAgICogVGhpcyBtZXRob2QgZGV0ZXJtaW5lcyB0aGUgdHlwZSBvZiB0aGUgY29ubmVjdGlvbiBiZWluZyBoZWxkCiAgICAgICogaW4gdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4uCi0gICAgICogCi0gICAgICogQHBhcmFtCXBvb2xlZENvbm4JPGNvZGU+UG9vbGVkQ29ubmVjdGlvbjwvY29kZT4KLSAgICAgKiBAcmV0dXJuCWNvbm5lY3Rpb24gdHlwZQorICAgICAqCisgICAgICogQHBhcmFtICAgIHBvb2xlZENvbm4gICAgPGNvZGU+UG9vbGVkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGNvbm5lY3Rpb24gdHlwZQogICAgICAqLwogICAgIHByaXZhdGUgaW50IGdldENvbm5lY3Rpb25UeXBlKFBvb2xlZENvbm5lY3Rpb24gcG9vbGVkQ29ubikgewogICAgICAgICBpZihwb29sZWRDb25uID09IG51bGwpIHsKQEAgLTQ4NSwyMiArNDg1LDIyIEBACiAgICAgICAgICAgICByZXR1cm4gSVNQT09MRURDT05ORUNUSU9OOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZSB0aGF0IAorICAgICAqIFJldHVybnMgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UgdGhhdAogICAgICAqIGNyZWF0ZWQgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UgdGhhdCBjcmVhdGVkIHRoaXMKLSAgICAgKgkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCisgICAgICogQHJldHVybiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlIHRoYXQgY3JlYXRlZCB0aGlzCisgICAgICogICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQogICAgICAqLwogICAgIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBnZXRNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkoKSB7CiAgICAgICAgIHJldHVybiAoY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSltY2Y7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgYWN0dWFsIHNxbCBjb25uZWN0aW9uIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPi4gCisgICAgICogUmV0dXJucyB0aGUgYWN0dWFsIHNxbCBjb25uZWN0aW9uIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPi4KICAgICAgKgotICAgICAqIEByZXR1cm4JdGhlIHBoeXNpY2FsIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICB0aGUgcGh5c2ljYWwgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4KICAgICAgKi8KICAgICAvL0dKQ0lOVAogICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gZ2V0QWN0dWFsQ29ubmVjdGlvbigpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CkBAIC01MDksOCArNTA5LDggQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgaWYoYWN0dWFsQ29ubmVjdGlvbiA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIGFjdHVhbENvbm5lY3Rpb24gPSBwYy5nZXRDb25uZWN0aW9uKCk7Ci0JCX0KLQkJCisgICAgICAgIH0KKwogICAgICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewogICAgICAgICAgICAgICAgIHNxbGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKQEAgLTUxOCw4MSArNTE4LDgxIEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGFjdHVhbENvbm5lY3Rpb247CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+LgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzIAotICAgICAqCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyAgICAgKiAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCiAgICAgICovCiAgICAgUGFzc3dvcmRDcmVkZW50aWFsIGdldFBhc3N3b3JkQ3JlZGVudGlhbCgpIHsKICAgICAgICAgcmV0dXJuIHBhc3N3ZENyZWRlbnRpYWw7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2hlY2tzIGlmIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGlzIHZhbGlkIG9yIG5vdCBhbmQgdGhyb3dzIGFuCiAgICAgICogZXhjZXB0aW9uIGlmIGl0IGlzIG5vdCB2YWxpZC4gQSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaXMgbm90IHZhbGlkIGlmCiAgICAgICogZGVzdHJveSBoYXMgbm90IGJlZW4gY2FsbGVkIGFuZCBubyBwaHlzaWNhbCBjb25uZWN0aW9uIGVycm9yIGhhcwogICAgICAqIG9jY3VycmVkIHJlbmRlcmluZyB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiB1bnVzYWJsZS4KICAgICAgKgotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgPGNvZGU+ZGVzdHJveTwvY29kZT4gaGFzIGJlZW4gY2FsbGVkIG9uIHRoaXMgCi0gICAgICoJCQkJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZSBvciBpZiBhIAotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJcGh5c2ljYWwgY29ubmVjdGlvbiBlcnJvciBvY2N1cnJlZCByZW5kZXJpbmcgaXQgdW51c2FibGUKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIDxjb2RlPmRlc3Ryb3k8L2NvZGU+IGhhcyBiZWVuIGNhbGxlZCBvbiB0aGlzCisgICAgICogICAgICAgICAgICAgICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZSBvciBpZiBhCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaHlzaWNhbCBjb25uZWN0aW9uIGVycm9yIG9jY3VycmVkIHJlbmRlcmluZyBpdCB1bnVzYWJsZQogICAgICAqLwogICAgIC8vR0pDSU5UCiAgICAgdm9pZCBjaGVja0lmVmFsaWQoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihpc0Rlc3Ryb3llZCA9PSB0cnVlIHx8IGlzVXNhYmxlID09IGZhbHNlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoaXMgTWFuYWdlZENvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzIHRoZSBwaHlzaWNhbCAiICsgCisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoaXMgTWFuYWdlZENvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzIHRoZSBwaHlzaWNhbCAiICsKICAgICAgICAgICAgICAgICAiY29ubmVjdGlvbiBpcyBub3QgdXNhYmxlLiIpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSA8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB3aGVuIGl0cyBjbG9zZSBtZXRob2QgaXMKICAgICAgKiBjYWxsZWQuIFRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlICBpbnZhbGlkYXRlcyB0aGUgY29ubmVjdGlvbiBoYW5kbGUKICAgICAgKiBhbmQgc2VuZHMgYSBDT05ORUNUSU9OX0NMT1NFRCBldmVudCB0byBhbGwgdGhlIHJlZ2lzdGVyZWQgZXZlbnQgbGlzdGVuZXJzLgogICAgICAqCi0gICAgICogQHBhcmFtCWUJRXhjZXB0aW9uIHRoYXQgbWF5IGhhdmUgb2NjdXJlZCB3aGlsZSBjbG9zaW5nIHRoZSBjb25uZWN0aW9uIGhhbmRsZQotICAgICAqIEBwYXJhbQljb25uSG9sZGVyT2JqZWN0CTxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRoYXQgaGFzIGJlZW4gY2xvc2VkCi0gICAgICogQHRocm93cwlTUUxFeGNlcHRpb24JaW4gY2FzZSBjbG9zaW5nIHRoZSBzcWwgY29ubmVjdGlvbiBnb3Qgb3V0IG9mCi0gICAgICogICAgICAgICAJICAgICAgICAgICAgCTxjb2RlPmdldENvbm5lY3Rpb248L2NvZGU+IG9uIHRoZSB1bmRlcmx5aW5nIAotICAgICAqCQkJCTxjb2RlPlBvb2xlZENvbm5lY3Rpb248L2NvZGU+IHRocm93cyBhbiBleGNlcHRpb24KKyAgICAgKiBAcGFyYW0gICAgZSAgICBFeGNlcHRpb24gdGhhdCBtYXkgaGF2ZSBvY2N1cmVkIHdoaWxlIGNsb3NpbmcgdGhlIGNvbm5lY3Rpb24gaGFuZGxlCisgICAgICogQHBhcmFtICAgIGNvbm5Ib2xkZXJPYmplY3QgICAgPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdGhhdCBoYXMgYmVlbiBjbG9zZWQKKyAgICAgKiBAdGhyb3dzICAgIFNRTEV4Y2VwdGlvbiAgICBpbiBjYXNlIGNsb3NpbmcgdGhlIHNxbCBjb25uZWN0aW9uIGdvdCBvdXQgb2YKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+Z2V0Q29ubmVjdGlvbjwvY29kZT4gb24gdGhlIHVuZGVybHlpbmcKKyAgICAgKiAgICAgICAgICAgICAgICA8Y29kZT5Qb29sZWRDb25uZWN0aW9uPC9jb2RlPiB0aHJvd3MgYW4gZXhjZXB0aW9uCiAgICAgICovCiAgICAgdm9pZCBjb25uZWN0aW9uQ2xvc2VkKEV4Y2VwdGlvbiBlLCBDb25uZWN0aW9uSG9sZGVyIGNvbm5Ib2xkZXJPYmplY3QpIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgICBjb25uSG9sZGVyT2JqZWN0LmludmFsaWRhdGUoKTsKLSAgICAgICAgCisKICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7Ci0gICAgICAgIAorCiAgICAgICAgIGNlLnNldENvbm5lY3Rpb25IYW5kbGUoY29ubkhvbGRlck9iamVjdCk7CiAgICAgICAgIGxpc3RlbmVyLmNvbm5lY3Rpb25DbG9zZWQoY2UpOwotCQorCiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSA8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB3aGVuIGl0IGRldGVjdHMgYSBjb25uZWNpb24KICAgICAgKiByZWxhdGVkIGVycm9yLgogICAgICAqCi0gICAgICogQHBhcmFtCWUJRXhjZXB0aW9uIHRoYXQgaGFzIG9jY3VycmVkIGR1cmluZyBhbiBvcGVyYXRpb24gb24gdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24KLSAgICAgKiBAcGFyYW0JY29ubkhvbGRlck9iamVjdAk8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0aGF0IGRldGVjdGVkIHRoZSBwaHlzaWNhbAotICAgICAqCQkJCQljb25uZWN0aW9uIGVycm9yCisgICAgICogQHBhcmFtICAgIGUgICAgRXhjZXB0aW9uIHRoYXQgaGFzIG9jY3VycmVkIGR1cmluZyBhbiBvcGVyYXRpb24gb24gdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24KKyAgICAgKiBAcGFyYW0gICAgY29ubkhvbGRlck9iamVjdCAgICA8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0aGF0IGRldGVjdGVkIHRoZSBwaHlzaWNhbAorICAgICAqICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uIGVycm9yCiAgICAgICovCi0gICAgdm9pZCBjb25uZWN0aW9uRXJyb3JPY2N1cnJlZChFeGNlcHRpb24gZSwgCisgICAgdm9pZCBjb25uZWN0aW9uRXJyb3JPY2N1cnJlZChFeGNlcHRpb24gZSwKICAgICAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uSG9sZGVyIGNvbm5Ib2xkZXJPYmplY3QpIHsKLQkgICAgCisKICAgICAgICAgIENvbm5lY3Rpb25FdmVudExpc3RlbmVyIGNlbCA9IHRoaXMubGlzdGVuZXI7CiAgICAgICAgICBDb25uZWN0aW9uRXZlbnQgY2UgPSBudWxsOwogICAgICAgICAgY2UgPSBlID09IG51bGwgPyBuZXcgQ29ubmVjdGlvbkV2ZW50KHRoaXMsIENvbm5lY3Rpb25FdmVudC5DT05ORUNUSU9OX0VSUk9SX09DQ1VSUkVEKQogICAgICAgICAgICAgICAgICAgICA6IG5ldyBDb25uZWN0aW9uRXZlbnQodGhpcywgQ29ubmVjdGlvbkV2ZW50LkNPTk5FQ1RJT05fRVJST1JfT0NDVVJSRUQsIGUpOwogICAgICAgICAgaWYgKGNvbm5Ib2xkZXJPYmplY3QgIT0gbnVsbCkgewogICAgICAgICAgICAgIGNlLnNldENvbm5lY3Rpb25IYW5kbGUoY29ubkhvbGRlck9iamVjdCk7Ci0gICAgICAgICB9ICAgIAorICAgICAgICAgfQogCiAgICAgICAgICBjZWwuY29ubmVjdGlvbkVycm9yT2NjdXJyZWQoY2UpOwogICAgICAgICAgaXNVc2FibGUgPSBmYWxzZTsKICAgICB9Ci0gICAgCi0gICAgCi0gICAgCisKKworCiAgICAgLyoqCiAgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBvYmplY3Qgd2hlbiBpdHMgc3RhcnQgbWV0aG9kCiAgICAgICogaGFzIGJlZW4gaW52b2tlZC4KQEAgLTYwNiw3ICs2MDYsNyBAQAogICAgICAgICAgICAgY29ubmVjdGlvbkVycm9yT2NjdXJyZWQoZSwgbnVsbCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IG9iamVjdCB3aGVuIGl0cyBlbmQgbWV0aG9kCiAgICAgICogaGFzIGJlZW4gaW52b2tlZC4KQEAgLTYyMCw3ICs2MjAsNyBAQAogICAgICAgICAgICAgY29ubmVjdGlvbkVycm9yT2NjdXJyZWQoZSwgbnVsbCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgYSBDb25uZWN0aW9uIEhhbmRsZSB0byBjaGVjayBpZiBpdCBpcwogICAgICAqIHRoZSBhY3RpdmUgQ29ubmVjdGlvbiBIYW5kbGUuIElmIGl0IGlzIG5vdCB0aGUgYWN0aXZlIENvbm5lY3Rpb24KQEAgLTYyOSwyNCArNjI5LDI0IEBACiAgICAgICogQ29ubmVjdGlvbiBIYW5kbGUgb2JqZWN0IHRvIHRoaXMgb2JqZWN0IGlmIHRoZSBhY3RpdmUgQ29ubmVjdGlvbgogICAgICAqIEhhbmRsZSBpcyBudWxsLgogICAgICAqCi0gICAgICogQHBhcmFtCWNoCTxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRoYXQgcmVxdWVzdHMgdGhpcwotICAgICAqCQkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlIHdoZXRoZXIKLSAgICAgKgkJCWl0IGNhbiBiZSBhY3RpdmUgb3Igbm90Ci0gICAgICogQHRocm93cwlTUUxFeGNlcHRpb24JaW4gY2FzZSB0aGUgcGh5c2ljYWwgaXMgbm90IHZhbGlkIG9yCi0gICAgICoJCQkJdGhlcmUgaXMgYWxyZWFkeSBhbiBhY3RpdmUgY29ubmVjdGlvbiBoYW5kbGUKKyAgICAgKiBAcGFyYW0gICAgY2ggICAgPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdGhhdCByZXF1ZXN0cyB0aGlzCisgICAgICogICAgICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2Ugd2hldGhlcgorICAgICAqICAgICAgICAgICAgaXQgY2FuIGJlIGFjdGl2ZSBvciBub3QKKyAgICAgKiBAdGhyb3dzICAgIFNRTEV4Y2VwdGlvbiAgICBpbiBjYXNlIHRoZSBwaHlzaWNhbCBpcyBub3QgdmFsaWQgb3IKKyAgICAgKiAgICAgICAgICAgICAgICB0aGVyZSBpcyBhbHJlYWR5IGFuIGFjdGl2ZSBjb25uZWN0aW9uIGhhbmRsZQogICAgICAqLwotICAgICAKKwogICAgIHZvaWQgY2hlY2tJZkFjdGl2ZShDb25uZWN0aW9uSG9sZGVyIGNoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgICAgaWYoaXNEZXN0cm95ZWQgPT0gdHJ1ZSB8fCBpc1VzYWJsZSA9PSBmYWxzZSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbigiVGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHVzYWJsZSIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmKGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPT0gbnVsbCkgewogICAgICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IGNoOwogICAgICAgICAgICAgY2guc2V0QWN0aXZlKHRydWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmKGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgIT0gY2gpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGhhbmRsZSBjYW5ub3QgYmUgdXNlZCBhcyBhbm90aGVyIGNvbm5lY3Rpb24gaXMgY3VycmVudGx5IGFjdGl2ZSIpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhLmphdmEKaW5kZXggMjBmMDNhYS4uZjY1MGQ0MSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEuamF2YQpAQCAtMjUsOCArMjUsOCBAQAogLyoqCiAgKiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA4LzAzCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wOC8wMworICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogcHVibGljIGNsYXNzIE1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEgaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhIHsKIApAQCAtNDEsODEgKzQxLDgxIEBACiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0b3IgZm9yIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGE8L2NvZGU+CiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWMJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+Ci0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4JaWYgZ2V0dGluZyB0aGUgRGF0YWJhc2VNZXRhRGF0YSBvYmplY3QgZmFpbHMKKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4gICAgaWYgZ2V0dGluZyB0aGUgRGF0YWJhc2VNZXRhRGF0YSBvYmplY3QgZmFpbHMKICAgICAgKi8KICAgICBwdWJsaWMgTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YShNYW5hZ2VkQ29ubmVjdGlvbiBtYykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHRoaXMubWMgPSBtYzsKICAgICAgICAgICAgIGRtZCA9IG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKS5nZXRNZXRhRGF0YSgpOwogICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX21kIik7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX21kIik7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBwcm9kdWN0IG5hbWUgb2YgdGhlIHVuZGVybHlpbmcgRUlTIGluc3RhbmNlIGNvbm5lY3RlZAogICAgICAqIHRocm91Z2ggdGhlIE1hbmFnZWRDb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybglQcm9kdWN0IG5hbWUgb2YgdGhlIEVJUyBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBQcm9kdWN0IG5hbWUgb2YgdGhlIEVJUyBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRFSVNQcm9kdWN0TmFtZSgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXR1cm4gZG1kLmdldERhdGFiYXNlUHJvZHVjdE5hbWUoKTsKICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19laXNfcHJvZG5hbWUiLCBzcWxlKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZWlzX3Byb2RuYW1lIiwgc3FsZSk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBwcm9kdWN0IHZlcnNpb24gb2YgdGhlIHVuZGVybHlpbmcgRUlTIGluc3RhbmNlIGNvbm5lY3RlZAogICAgICAqIHRocm91Z2ggdGhlIE1hbmFnZWRDb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybglQcm9kdWN0IHZlcnNpb24gb2YgdGhlIEVJUyBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBQcm9kdWN0IHZlcnNpb24gb2YgdGhlIEVJUyBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRFSVNQcm9kdWN0VmVyc2lvbigpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXR1cm4gZG1kLmdldERhdGFiYXNlUHJvZHVjdFZlcnNpb24oKTsKICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19laXNfcHJvZHZlcnMiLCBzcWxlKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZWlzX3Byb2R2ZXJzIiwgc3FsZSk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCksIHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgbWF4aW11bSBsaW1pdCBvbiBudW1iZXIgb2YgYWN0aXZlIGNvbmN1cnJlbnQgY29ubmVjdGlvbnMKICAgICAgKiB0aGF0IGFuIEVJUyBpbnN0YW5jZSBjYW4gc3VwcG9ydCBhY3Jvc3MgY2xpZW50IHByb2Nlc3Nlcy4KICAgICAgKgotICAgICAqIEByZXR1cm4JTWF4aW11bSBsaW1pdCBmb3IgbnVtYmVyIG9mIGFjdGl2ZSBjb25jdXJyZW50IGNvbm5lY3Rpb25zCi0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIE1heGltdW0gbGltaXQgZm9yIG51bWJlciBvZiBhY3RpdmUgY29uY3VycmVudCBjb25uZWN0aW9ucworICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIGludCBnZXRNYXhDb25uZWN0aW9ucygpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXR1cm4gZG1kLmdldE1heENvbm5lY3Rpb25zKCk7CiAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZWlzX21heGNvbm4iKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZWlzX21heGNvbm4iKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIG5hbWUgb2YgdGhlIHVzZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBNYW5hZ2VkQ29ubmVjdGlvbiBpbnN0YW5jZS4gVGhlIG5hbWUKICAgICAgKiBjb3JyZXNwb25kcyB0byB0aGUgcmVzb3VyY2UgcHJpbmNpcGFsIHVuZGVyIHdob3NlIHdob3NlIHNlY3VyaXR5IGNvbnRleHQsIGEgY29ubmVjdGlvbgogICAgICAqIHRvIHRoZSBFSVMgaW5zdGFuY2UgaGFzIGJlZW4gZXN0YWJsaXNoZWQuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCW5hbWUgb2YgdGhlIHVzZXIKLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgbmFtZSBvZiB0aGUgdXNlcgorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRVc2VyTmFtZSgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGpha2FydGEucmVzb3VyY2Uuc3BpLnNlY3VyaXR5LlBhc3N3b3JkQ3JlZGVudGlhbCBwYyA9IG1jLmdldFBhc3N3b3JkQ3JlZGVudGlhbCgpOwogICAgICAgICBpZihwYyAhPSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm4gcGMuZ2V0VXNlck5hbWUoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXR1cm4gbWMuZ2V0TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KCkuZ2V0VXNlcigpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL1hBUmVzb3VyY2VJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9YQVJlc291cmNlSW1wbC5qYXZhCmluZGV4IGRhZDFkNzcuLjQ4MmYzMzIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL1hBUmVzb3VyY2VJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvWEFSZXNvdXJjZUltcGwuamF2YQpAQCAtMjQsMTQ4ICsyNCwxNDggQEAKIC8qKgogICogPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gd3JhcHBlciBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA4LzIzCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wOC8yMworICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogcHVibGljIGNsYXNzIFhBUmVzb3VyY2VJbXBsIGltcGxlbWVudHMgWEFSZXNvdXJjZSB7CiAKICAgICBYQVJlc291cmNlIHhhcjsKICAgICBNYW5hZ2VkQ29ubmVjdGlvbiBtYzsKLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdG9yIGZvciBYQVJlc291cmNlSW1wbAogICAgICAqCi0gICAgICogQHBhcmFtCXhhcgk8Y29kZT5YQVJlc291cmNlPC9jb2RlPgotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgeGFyICAgIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+CisgICAgICogQHBhcmFtICAgIG1jICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBYQVJlc291cmNlSW1wbChYQVJlc291cmNlIHhhciwgTWFuYWdlZENvbm5lY3Rpb24gbWMpIHsKICAgICAgICAgdGhpcy54YXIgPSB4YXI7CiAgICAgICAgIHRoaXMubWMgPSBtYzsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb21taXQgdGhlIGdsb2JhbCB0cmFuc2FjdGlvbiBzcGVjaWZpZWQgYnkgeGlkLgogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCi0gICAgICogQHBhcmFtCW9uZVBoYXNlCUlmIHRydWUsIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHNob3VsZCB1c2UgYSBvbmUtcGhhc2UgY29tbWl0IAotICAgICAqICAgICAgIAkgICAgICAgIAlwcm90b2NvbCB0byBjb21taXQgdGhlIHdvcmsgZG9uZSBvbiBiZWhhbGYgb2YgeGlkLgorICAgICAqIEBwYXJhbSAgICB4aWQgICAgQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgorICAgICAqIEBwYXJhbSAgICBvbmVQaGFzZSAgICBJZiB0cnVlLCB0aGUgcmVzb3VyY2UgbWFuYWdlciBzaG91bGQgdXNlIGEgb25lLXBoYXNlIGNvbW1pdAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICBwcm90b2NvbCB0byBjb21taXQgdGhlIHdvcmsgZG9uZSBvbiBiZWhhbGYgb2YgeGlkLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNvbW1pdChYaWQgeGlkLCBib29sZWFuIG9uZVBoYXNlKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICAvL3RoZSBtYy50cmFuc2FjdGlvbkNvbXBsZXRlZCBjYWxsIGhhcyBjb21lIGhlcmUgYmVjYXN1ZQotCS8vdGhlIHRyYW5zYWN0aW9uICphY3R1YWxseSogY29tcGxldGVzIGFmdGVyIHRoZSBmbG93Ci0JLy9yZWFjaGVzIGhlcmUuIHRoZSBlbmQoKSBtZXRob2QgbWlnaHQgbm90IHJlYWxseSBzaWduYWwKLQkvL2NvbXBsZXRpb24gb2YgdHJhbnNhY3Rpb24gaW4gY2FzZSB0aGUgdHJhbnNhY3Rpb24gaXMKLQkvL3N1c3BlbmRlZC4gSW4gY2FzZSBvZiB0cmFuc2FjdGlvbiBzdXNwZW5zaW9uLCB0aGUgZW5kCi0JLy9tZXRob2QgaXMgc3RpbGwgY2FsbGVkIGJ5IHRoZSB0cmFuc2FjdGlvbiBtYW5hZ2VyCi0JbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKKyAgICAvL3RoZSB0cmFuc2FjdGlvbiAqYWN0dWFsbHkqIGNvbXBsZXRlcyBhZnRlciB0aGUgZmxvdworICAgIC8vcmVhY2hlcyBoZXJlLiB0aGUgZW5kKCkgbWV0aG9kIG1pZ2h0IG5vdCByZWFsbHkgc2lnbmFsCisgICAgLy9jb21wbGV0aW9uIG9mIHRyYW5zYWN0aW9uIGluIGNhc2UgdGhlIHRyYW5zYWN0aW9uIGlzCisgICAgLy9zdXNwZW5kZWQuIEluIGNhc2Ugb2YgdHJhbnNhY3Rpb24gc3VzcGVuc2lvbiwgdGhlIGVuZAorICAgIC8vbWV0aG9kIGlzIHN0aWxsIGNhbGxlZCBieSB0aGUgdHJhbnNhY3Rpb24gbWFuYWdlcgorICAgIG1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiAgICAgICAgIHhhci5jb21taXQoeGlkLCBvbmVQaGFzZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogRW5kcyB0aGUgd29yayBwZXJmb3JtZWQgb24gYmVoYWxmIG9mIGEgdHJhbnNhY3Rpb24gYnJhbmNoLgogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyIHRoYXQgaXMgdGhlIHNhbWUgYXMgd2hhdCAKLSAgICAgKgkJCXdhcyB1c2VkIHByZXZpb3VzbHkgaW4gdGhlIHN0YXJ0IG1ldGhvZC4KLSAgICAgKiBAcGFyYW0JZmxhZ3MJT25lIG9mIFRNU1VDQ0VTUywgVE1GQUlMLCBvciBUTVNVU1BFTkQKKyAgICAgKiBAcGFyYW0gICAgeGlkICAgIEEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIgdGhhdCBpcyB0aGUgc2FtZSBhcyB3aGF0CisgICAgICogICAgICAgICAgICB3YXMgdXNlZCBwcmV2aW91c2x5IGluIHRoZSBzdGFydCBtZXRob2QuCisgICAgICogQHBhcmFtICAgIGZsYWdzICAgIE9uZSBvZiBUTVNVQ0NFU1MsIFRNRkFJTCwgb3IgVE1TVVNQRU5ECiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZW5kKFhpZCB4aWQsIGludCBmbGFncykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgeGFyLmVuZCh4aWQsIGZsYWdzKTsKICAgICAgICAgLy9HSkNJTlQKLQkvL21jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CisgICAgLy9tYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRlbGwgdGhlIHJlc291cmNlIG1hbmFnZXIgdG8gZm9yZ2V0IGFib3V0IGEgaGV1cmlzdGljYWxseSBjb21wbGV0ZWQgdHJhbnNhY3Rpb24gYnJhbmNoLgogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCisgICAgICogQHBhcmFtICAgIHhpZCAgICBBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZm9yZ2V0KFhpZCB4aWQpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHhhci5mb3JnZXQoeGlkKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBPYnRhaW4gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBzZXQgZm9yIHRoaXMgCisgICAgICogT2J0YWluIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgc2V0IGZvciB0aGlzCiAgICAgICogPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRoZSB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIGluIHNlY29uZHMKKyAgICAgKiBAcmV0dXJuICAgIHRoZSB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIGluIHNlY29uZHMKICAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldFRyYW5zYWN0aW9uVGltZW91dCgpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiB4YXIuZ2V0VHJhbnNhY3Rpb25UaW1lb3V0KCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIGRldGVybWluZSBpZiB0aGUgcmVzb3VyY2UgbWFuYWdlciBpbnN0YW5jZSAKLSAgICAgKiByZXByZXNlbnRlZCBieSB0aGUgdGFyZ2V0IG9iamVjdCBpcyB0aGUgc2FtZSBhcyB0aGUgcmVzb3VjZSBtYW5hZ2VyIAorICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB0byBkZXRlcm1pbmUgaWYgdGhlIHJlc291cmNlIG1hbmFnZXIgaW5zdGFuY2UKKyAgICAgKiByZXByZXNlbnRlZCBieSB0aGUgdGFyZ2V0IG9iamVjdCBpcyB0aGUgc2FtZSBhcyB0aGUgcmVzb3VjZSBtYW5hZ2VyCiAgICAgICogaW5zdGFuY2UgcmVwcmVzZW50ZWQgYnkgdGhlIHBhcmFtZXRlciB4YXJlcy4KICAgICAgKgotICAgICAqIEBwYXJhbQl4YXJlcwlBbiA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBvYmplY3Qgd2hvc2UgcmVzb3VyY2UgbWFuYWdlciAKLSAgICAgKiAJCQlpbnN0YW5jZSBpcyB0byBiZSBjb21wYXJlZCB3aXRoIHRoZSByZXNvdXJjZQotICAgICAqIEByZXR1cm4JdHJ1ZSBpZiBpdCdzIHRoZSBzYW1lIFJNIGluc3RhbmNlOyBvdGhlcndpc2UgZmFsc2UuCisgICAgICogQHBhcmFtICAgIHhhcmVzICAgIEFuIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IG9iamVjdCB3aG9zZSByZXNvdXJjZSBtYW5hZ2VyCisgICAgICogICAgICAgICAgICAgaW5zdGFuY2UgaXMgdG8gYmUgY29tcGFyZWQgd2l0aCB0aGUgcmVzb3VyY2UKKyAgICAgKiBAcmV0dXJuICAgIHRydWUgaWYgaXQncyB0aGUgc2FtZSBSTSBpbnN0YW5jZTsgb3RoZXJ3aXNlIGZhbHNlLgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGlzU2FtZVJNKFhBUmVzb3VyY2UgeGFyZXMpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiB4YXIuaXNTYW1lUk0oeGFyZXMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIEFzayB0aGUgcmVzb3VyY2UgbWFuYWdlciB0byBwcmVwYXJlIGZvciBhIHRyYW5zYWN0aW9uIGNvbW1pdCAKKyAgICAgKiBBc2sgdGhlIHJlc291cmNlIG1hbmFnZXIgdG8gcHJlcGFyZSBmb3IgYSB0cmFuc2FjdGlvbiBjb21taXQKICAgICAgKiBvZiB0aGUgdHJhbnNhY3Rpb24gc3BlY2lmaWVkIGluIHhpZC4KICAgICAgKgotICAgICAqIEBwYXJhbQl4aWQJQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgotICAgICAqIEByZXR1cm4JQSB2YWx1ZSBpbmRpY2F0aW5nIHRoZSByZXNvdXJjZSBtYW5hZ2VyJ3Mgdm90ZSBvbiB0aGUgCi0gICAgICoJCW91dGNvbWUgb2YgdGhlIHRyYW5zYWN0aW9uLiBUaGUgcG9zc2libGUgdmFsdWVzCi0gICAgICoJCWFyZTogWEFfUkRPTkxZIG9yIFhBX09LLiBJZiB0aGUgcmVzb3VyY2UgbWFuYWdlciB3YW50cyAKLSAgICAgKgkJdG8gcm9sbCBiYWNrIHRoZSB0cmFuc2FjdGlvbiwgaXQgc2hvdWxkIGRvIHNvCi0gICAgICoJCWJ5IHJhaXNpbmcgYW4gYXBwcm9wcmlhdGUgPGNvZGU+WEFFeGNlcHRpb248L2NvZGU+IGluIHRoZSBwcmVwYXJlIG1ldGhvZC4KKyAgICAgKiBAcGFyYW0gICAgeGlkICAgIEEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKKyAgICAgKiBAcmV0dXJuICAgIEEgdmFsdWUgaW5kaWNhdGluZyB0aGUgcmVzb3VyY2UgbWFuYWdlcidzIHZvdGUgb24gdGhlCisgICAgICogICAgICAgIG91dGNvbWUgb2YgdGhlIHRyYW5zYWN0aW9uLiBUaGUgcG9zc2libGUgdmFsdWVzCisgICAgICogICAgICAgIGFyZTogWEFfUkRPTkxZIG9yIFhBX09LLiBJZiB0aGUgcmVzb3VyY2UgbWFuYWdlciB3YW50cworICAgICAqICAgICAgICB0byByb2xsIGJhY2sgdGhlIHRyYW5zYWN0aW9uLCBpdCBzaG91bGQgZG8gc28KKyAgICAgKiAgICAgICAgYnkgcmFpc2luZyBhbiBhcHByb3ByaWF0ZSA8Y29kZT5YQUV4Y2VwdGlvbjwvY29kZT4gaW4gdGhlIHByZXBhcmUgbWV0aG9kLgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgcHJlcGFyZShYaWQgeGlkKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICByZXR1cm4geGFyLnByZXBhcmUoeGlkKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBPYnRhaW4gYSBsaXN0IG9mIHByZXBhcmVkIHRyYW5zYWN0aW9uIGJyYW5jaGVzIGZyb20gYSByZXNvdXJjZSBtYW5hZ2VyLgogICAgICAqCi0gICAgICogQHBhcmFtCWZsYWcJT25lIG9mIFRNU1RBUlRSU0NBTiwgVE1FTkRSU0NBTiwgVE1OT0ZMQUdTLiBUTU5PRkxBR1MgCi0gICAgICoJCQltdXN0IGJlIHVzZWQgd2hlbiBubyBvdGhlciBmbGFncyBhcmUgc2V0IGluIGZsYWdzLgotICAgICAqIEByZXR1cm4JVGhlIHJlc291cmNlIG1hbmFnZXIgcmV0dXJucyB6ZXJvIG9yIG1vcmUgWElEcyBmb3IgdGhlIHRyYW5zYWN0aW9uIAotICAgICAqCQlicmFuY2hlcyB0aGF0IGFyZSBjdXJyZW50bHkgaW4gYSBwcmVwYXJlZCBvciBoZXVyaXN0aWNhbGx5IAotICAgICAqCQljb21wbGV0ZWQgc3RhdGUuIElmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIG9wZXJhdGlvbiwgdGhlIHJlc291cmNlCi0gICAgICoJCW1hbmFnZXIgc2hvdWxkIHRocm93IHRoZSBhcHByb3ByaWF0ZSA8Y29kZT5YQUV4Y2VwdGlvbjwvY29kZT4uCisgICAgICogQHBhcmFtICAgIGZsYWcgICAgT25lIG9mIFRNU1RBUlRSU0NBTiwgVE1FTkRSU0NBTiwgVE1OT0ZMQUdTLiBUTU5PRkxBR1MKKyAgICAgKiAgICAgICAgICAgIG11c3QgYmUgdXNlZCB3aGVuIG5vIG90aGVyIGZsYWdzIGFyZSBzZXQgaW4gZmxhZ3MuCisgICAgICogQHJldHVybiAgICBUaGUgcmVzb3VyY2UgbWFuYWdlciByZXR1cm5zIHplcm8gb3IgbW9yZSBYSURzIGZvciB0aGUgdHJhbnNhY3Rpb24KKyAgICAgKiAgICAgICAgYnJhbmNoZXMgdGhhdCBhcmUgY3VycmVudGx5IGluIGEgcHJlcGFyZWQgb3IgaGV1cmlzdGljYWxseQorICAgICAqICAgICAgICBjb21wbGV0ZWQgc3RhdGUuIElmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIG9wZXJhdGlvbiwgdGhlIHJlc291cmNlCisgICAgICogICAgICAgIG1hbmFnZXIgc2hvdWxkIHRocm93IHRoZSBhcHByb3ByaWF0ZSA8Y29kZT5YQUV4Y2VwdGlvbjwvY29kZT4uCiAgICAgICovCiAgICAgcHVibGljIFhpZFtdIHJlY292ZXIoaW50IGZsYWcpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiB4YXIucmVjb3ZlcihmbGFnKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBJbmZvcm0gdGhlIHJlc291cmNlIG1hbmFnZXIgdG8gcm9sbCBiYWNrIHdvcmsgZG9uZSBvbiBiZWhhbGYgb2YgYSB0cmFuc2FjdGlvbiBicmFuY2gKICAgICAgKgotICAgICAqIEBwYXJhbQl4aWQJQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgorICAgICAqIEBwYXJhbSAgICB4aWQgICAgQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJvbGxiYWNrKFhpZCB4aWQpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIC8vdGhlIG1jLnRyYW5zYWN0aW9uQ29tcGxldGVkIGNhbGwgaGFzIGNvbWUgaGVyZSBiZWNhc3VlCi0JLy90aGUgdHJhbnNhY3Rpb24gKmFjdHVhbGx5KiBjb21wbGV0ZXMgYWZ0ZXIgdGhlIGZsb3cKLQkvL3JlYWNoZXMgaGVyZS4gdGhlIGVuZCgpIG1ldGhvZCBtaWdodCBub3QgcmVhbGx5IHNpZ25hbAotCS8vY29tcGxldGlvbiBvZiB0cmFuc2FjdGlvbiBpbiBjYXNlIHRoZSB0cmFuc2FjdGlvbiBpcwotCS8vc3VzcGVuZGVkLiBJbiBjYXNlIG9mIHRyYW5zYWN0aW9uIHN1c3BlbnNpb24sIHRoZSBlbmQKLQkvL21ldGhvZCBpcyBzdGlsbCBjYWxsZWQgYnkgdGhlIHRyYW5zYWN0aW9uIG1hbmFnZXIKKyAgICAvL3RoZSB0cmFuc2FjdGlvbiAqYWN0dWFsbHkqIGNvbXBsZXRlcyBhZnRlciB0aGUgZmxvdworICAgIC8vcmVhY2hlcyBoZXJlLiB0aGUgZW5kKCkgbWV0aG9kIG1pZ2h0IG5vdCByZWFsbHkgc2lnbmFsCisgICAgLy9jb21wbGV0aW9uIG9mIHRyYW5zYWN0aW9uIGluIGNhc2UgdGhlIHRyYW5zYWN0aW9uIGlzCisgICAgLy9zdXNwZW5kZWQuIEluIGNhc2Ugb2YgdHJhbnNhY3Rpb24gc3VzcGVuc2lvbiwgdGhlIGVuZAorICAgIC8vbWV0aG9kIGlzIHN0aWxsIGNhbGxlZCBieSB0aGUgdHJhbnNhY3Rpb24gbWFuYWdlcgogICAgICAgICBtYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOwogICAgICAgICB4YXIucm9sbGJhY2soeGlkKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBmb3IgdGhpcyA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlzZWNvbmRzCXRoZSB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIGluIHNlY29uZHMuCi0gICAgICogQHJldHVybgl0cnVlIGlmIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaXMgc2V0IHN1Y2Nlc3NmdWxseTsgb3RoZXJ3aXNlIGZhbHNlLgorICAgICAqIEBwYXJhbSAgICBzZWNvbmRzICAgIHRoZSB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIGluIHNlY29uZHMuCisgICAgICogQHJldHVybiAgICB0cnVlIGlmIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaXMgc2V0IHN1Y2Nlc3NmdWxseTsgb3RoZXJ3aXNlIGZhbHNlLgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIHNldFRyYW5zYWN0aW9uVGltZW91dChpbnQgc2Vjb25kcykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIHhhci5zZXRUcmFuc2FjdGlvblRpbWVvdXQoc2Vjb25kcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU3RhcnQgd29yayBvbiBiZWhhbGYgb2YgYSB0cmFuc2FjdGlvbiBicmFuY2ggc3BlY2lmaWVkIGluIHhpZC4KICAgICAgKgotICAgICAqIEBwYXJhbQl4aWQJQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllciB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIHJlc291cmNlCi0gICAgICogQHJldHVybglmbGFncwlPbmUgb2YgVE1OT0ZMQUdTLCBUTUpPSU4sIG9yIFRNUkVTVU1FCisgICAgICogQHBhcmFtICAgIHhpZCAgICBBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVzb3VyY2UKKyAgICAgKiBAcmV0dXJuICAgIGZsYWdzICAgIE9uZSBvZiBUTU5PRkxBR1MsIFRNSk9JTiwgb3IgVE1SRVNVTUUKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzdGFydChYaWQgeGlkLCBpbnQgZmxhZ3MpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIC8vR0pDSU5UCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9idWlsZC54bWwKaW5kZXggOTY3ODY4Yi4uNjQxMDU1NyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL2J1aWxkLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8cHJvamVjdCBuYW1lPSJqZGJjX2Nvbm5lY3RvciIgYmFzZWRpcj0iJHtnamMuaG9tZX0iIGRlZmF1bHQ9ImJ1aWxkIj4KICAgPHByb3BlcnR5IG5hbWU9InBrZy5kaXIiIHZhbHVlPSJjb20vc3VuL2dqYy9zcGkiLz4KLSAKKwogICA8dGFyZ2V0IG5hbWU9ImNsZWFuIj4KICAgICA8YW50IGFudGZpbGU9ImJ1aWxkLnhtbCIgZGlyPSIke2dqYy5ob21lfS9iaW4iIHRhcmdldD0iY2xlYW4iLz4KICAgPC90YXJnZXQ+CkBAIC0zNyw1ICszNyw1IEBACiAKICAgPHRhcmdldCBuYW1lPSJidWlsZDE0IiBkZXBlbmRzPSJjb21waWxlMTQiLz4KIAotCTx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImJ1aWxkMTMsIGJ1aWxkMTQiLz4KKyAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJidWlsZDEzLCBidWlsZDE0Ii8+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvTWV0aG9kRXhlY3V0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9NZXRob2RFeGVjdXRvci5qYXZhCmluZGV4IGNlMzIxYWYuLjllN2YyNTMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9NZXRob2RFeGVjdXRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9NZXRob2RFeGVjdXRvci5qYXZhCkBAIC0yNiw4ICsyNiw4IEBACiAvKioKICAqIEV4ZWN1dGUgdGhlIG1ldGhvZHMgYmFzZWQgb24gdGhlIHBhcmFtZXRlcnMuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8yMwotICogQGF1dGhvcglCaW5vZCBQLkcKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMjMKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCiAgKi8KIHB1YmxpYyBjbGFzcyBNZXRob2RFeGVjdXRvciBpbXBsZW1lbnRzIGphdmEuaW8uU2VyaWFsaXphYmxlewogCkBAIC0zOSwxMzAgKzM5LDEzMCBAQAogICAgIC8qKgogICAgICAqIEV4Y2V1dGUgYSBzaW1wbGUgc2V0IE1ldGhvZC4KICAgICAgKgotICAgICAqIEBwYXJhbQl2YWx1ZQlWYWx1ZSB0byBiZSBzZXQuCi0gICAgICogQHBhcmFtCW1ldGhvZAk8Y29kZT5NZXRob2Q8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAcGFyYW0Jb2JqCU9iamVjdCBvbiB3aGljaCB0aGUgbWV0aG9kIHRvIGJlIGV4ZWN1dGVkLgorICAgICAqIEBwYXJhbSAgICB2YWx1ZSAgICBWYWx1ZSB0byBiZSBzZXQuCisgICAgICogQHBhcmFtICAgIG1ldGhvZCAgICA8Y29kZT5NZXRob2Q8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgb2JqICAgIE9iamVjdCBvbiB3aGljaCB0aGUgbWV0aG9kIHRvIGJlIGV4ZWN1dGVkLgogICAgICAqIEB0aHJvd3MgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiwgaW4gY2FzZSBvZiB0aGUgbWlzbWF0Y2ggb2YgcGFyYW1ldGVyIHZhbHVlcyBvcgotICAgICAqCQlhIHNlY3VyaXR5IHZpb2xhdGlvbi4gICAgIAorICAgICAqICAgICAgICBhIHNlY3VyaXR5IHZpb2xhdGlvbi4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBydW5KYXZhQmVhbk1ldGhvZChTdHJpbmcgdmFsdWUsIE1ldGhvZCBtZXRob2QsIE9iamVjdCBvYmopIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKLSAgICAJaWYgKHZhbHVlPT1udWxsIHx8IHZhbHVlLnRyaW0oKS5lcXVhbHMoIiIpKSB7Ci0gICAgCSAgICByZXR1cm47Ci0gICAgCX0KLSAgICAJdHJ5IHsKLSAgICAJICAgIENsYXNzW10gcGFyYW1ldGVycyA9IG1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpOwotICAgIAkgICAgaWYgKCBwYXJhbWV0ZXJzLmxlbmd0aCA9PSAxKSB7Ci0gICAgCSAgICAgICAgT2JqZWN0W10gdmFsdWVzID0gbmV3IE9iamVjdFsxXTsKLSAgICAJICAgIAl2YWx1ZXNbMF0gPSBjb252ZXJ0VHlwZShwYXJhbWV0ZXJzWzBdLCB2YWx1ZSk7Ci0gICAgCSAgICAJbWV0aG9kLmludm9rZShvYmosIHZhbHVlcyk7Ci0gICAgCSAgICB9Ci0gICAgCX0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gaWFlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGlhZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7Ci0gICAgCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFyZ3VtZW50cyBhcmUgd3JvbmcgZm9yIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsgICAgCQotICAgIAl9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGl0ZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpdGUpOwotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOyAgICAJCi0gICAgCX0KKyAgICAgICAgaWYgKHZhbHVlPT1udWxsIHx8IHZhbHVlLnRyaW0oKS5lcXVhbHMoIiIpKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIENsYXNzW10gcGFyYW1ldGVycyA9IG1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpOworICAgICAgICAgICAgaWYgKCBwYXJhbWV0ZXJzLmxlbmd0aCA9PSAxKSB7CisgICAgICAgICAgICAgICAgT2JqZWN0W10gdmFsdWVzID0gbmV3IE9iamVjdFsxXTsKKyAgICAgICAgICAgICAgICB2YWx1ZXNbMF0gPSBjb252ZXJ0VHlwZShwYXJhbWV0ZXJzWzBdLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgbWV0aG9kLmludm9rZShvYmosIHZhbHVlcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gaWFlKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGlhZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFyZ3VtZW50cyBhcmUgd3JvbmcgZm9yIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKKyAgICAgICAgfSBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBpdGUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaXRlKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIEV4ZWN1dGVzIHRoZSBtZXRob2QuICAgICAKKyAgICAgKiBFeGVjdXRlcyB0aGUgbWV0aG9kLgogICAgICAqCi0gICAgICogQHBhcmFtCW1ldGhvZCA8Y29kZT5NZXRob2Q8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAcGFyYW0Jb2JqCU9iamVjdCBvbiB3aGljaCB0aGUgbWV0aG9kIHRvIGJlIGV4ZWN1dGVkLgotICAgICAqIEBwYXJhbQl2YWx1ZXMJUGFyYW1ldGVyIHZhbHVlcyBmb3IgZXhlY3V0aW5nIHRoZSBtZXRob2QuCisgICAgICogQHBhcmFtICAgIG1ldGhvZCA8Y29kZT5NZXRob2Q8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgb2JqICAgIE9iamVjdCBvbiB3aGljaCB0aGUgbWV0aG9kIHRvIGJlIGV4ZWN1dGVkLgorICAgICAqIEBwYXJhbSAgICB2YWx1ZXMgICAgUGFyYW1ldGVyIHZhbHVlcyBmb3IgZXhlY3V0aW5nIHRoZSBtZXRob2QuCiAgICAgICogQHRocm93cyAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+LCBpbiBjYXNlIG9mIHRoZSBtaXNtYXRjaCBvZiBwYXJhbWV0ZXIgdmFsdWVzIG9yCi0gICAgICoJCWEgc2VjdXJpdHkgdmlvbGF0aW9uLgorICAgICAqICAgICAgICBhIHNlY3VyaXR5IHZpb2xhdGlvbi4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBydW5NZXRob2QoTWV0aG9kIG1ldGhvZCwgT2JqZWN0IG9iaiwgVmVjdG9yIHZhbHVlcykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewotICAgIAl0cnkgewotCSAgICBDbGFzc1tdIHBhcmFtZXRlcnMgPSBtZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKTsKLQkgICAgaWYgKHZhbHVlcy5zaXplKCkgIT0gcGFyYW1ldGVycy5sZW5ndGgpIHsKLQkgICAgICAgIHJldHVybjsKLQkgICAgfQotICAgIAkgICAgT2JqZWN0W10gYWN0dWFsVmFsdWVzID0gbmV3IE9iamVjdFtwYXJhbWV0ZXJzLmxlbmd0aF07Ci0gICAgCSAgICBmb3IgKGludCBpID0wOyBpPHBhcmFtZXRlcnMubGVuZ3RoIDsgaSsrKSB7Ci0gICAgCSAgICAJU3RyaW5nIHZhbCA9IChTdHJpbmcpIHZhbHVlcy5nZXQoaSk7Ci0gICAgCSAgICAJaWYgKHZhbC50cmltKCkuZXF1YWxzKCJOVUxMIikpIHsKLSAgICAJICAgIAkgICAgYWN0dWFsVmFsdWVzW2ldID0gbnVsbDsKLSAgICAJICAgIAl9IGVsc2UgewotICAgIAkgICAgCSAgICBhY3R1YWxWYWx1ZXNbaV0gPSBjb252ZXJ0VHlwZShwYXJhbWV0ZXJzW2ldLCB2YWwpOwotICAgIAkgICAgCX0KLSAgICAJICAgIH0KLSAgICAJICAgIG1ldGhvZC5pbnZva2Uob2JqLCBhY3R1YWxWYWx1ZXMpOwotICAgIAl9Y2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gaWFlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGlhZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7Ci0gICAgCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFyZ3VtZW50cyBhcmUgd3JvbmcgZm9yIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsgICAgCQotICAgIAl9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGl0ZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpdGUpOwotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOyAgICAJCi0gICAgCX0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgQ2xhc3NbXSBwYXJhbWV0ZXJzID0gbWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCk7CisgICAgICAgIGlmICh2YWx1ZXMuc2l6ZSgpICE9IHBhcmFtZXRlcnMubGVuZ3RoKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIE9iamVjdFtdIGFjdHVhbFZhbHVlcyA9IG5ldyBPYmplY3RbcGFyYW1ldGVycy5sZW5ndGhdOworICAgICAgICAgICAgZm9yIChpbnQgaSA9MDsgaTxwYXJhbWV0ZXJzLmxlbmd0aCA7IGkrKykgeworICAgICAgICAgICAgICAgIFN0cmluZyB2YWwgPSAoU3RyaW5nKSB2YWx1ZXMuZ2V0KGkpOworICAgICAgICAgICAgICAgIGlmICh2YWwudHJpbSgpLmVxdWFscygiTlVMTCIpKSB7CisgICAgICAgICAgICAgICAgICAgIGFjdHVhbFZhbHVlc1tpXSA9IG51bGw7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYWN0dWFsVmFsdWVzW2ldID0gY29udmVydFR5cGUocGFyYW1ldGVyc1tpXSwgdmFsKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtZXRob2QuaW52b2tlKG9iaiwgYWN0dWFsVmFsdWVzKTsKKyAgICAgICAgfWNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGlhZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpYWUpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOworICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWUpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBcmd1bWVudHMgYXJlIHdyb25nIGZvciB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7CisgICAgICAgIH0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gaXRlKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGl0ZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb252ZXJ0cyB0aGUgdHlwZSBmcm9tIFN0cmluZyB0byB0aGUgQ2xhc3MgdHlwZS4KICAgICAgKgotICAgICAqIEBwYXJhbQl0eXBlCQlDbGFzcyBuYW1lIHRvIHdoaWNoIHRoZSBjb252ZXJzaW9uIGlzIHJlcXVpcmVkLgotICAgICAqIEBwYXJhbQlwYXJhbWV0ZXIJU3RyaW5nIHZhbHVlIHRvIGJlIGNvbnZlcnRlZC4KLSAgICAgKiBAcmV0dXJuCUNvbnZlcnRlZCB2YWx1ZS4KKyAgICAgKiBAcGFyYW0gICAgdHlwZSAgICAgICAgQ2xhc3MgbmFtZSB0byB3aGljaCB0aGUgY29udmVyc2lvbiBpcyByZXF1aXJlZC4KKyAgICAgKiBAcGFyYW0gICAgcGFyYW1ldGVyICAgIFN0cmluZyB2YWx1ZSB0byBiZSBjb252ZXJ0ZWQuCisgICAgICogQHJldHVybiAgICBDb252ZXJ0ZWQgdmFsdWUuCiAgICAgICogQHRocm93cyAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+LCBpbiBjYXNlIG9mIHRoZSBtaXNtYXRjaCBvZiBwYXJhbWV0ZXIgdmFsdWVzIG9yCi0gICAgICoJCWEgc2VjdXJpdHkgdmlvbGF0aW9uLiAgICAgCisgICAgICogICAgICAgIGEgc2VjdXJpdHkgdmlvbGF0aW9uLgogICAgICAqLwogICAgIHByaXZhdGUgT2JqZWN0IGNvbnZlcnRUeXBlKENsYXNzIHR5cGUsIFN0cmluZyBwYXJhbWV0ZXIpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKLSAgICAJdHJ5IHsKLSAgICAJICAgIFN0cmluZyB0eXBlTmFtZSA9IHR5cGUuZ2V0TmFtZSgpOwotICAgIAkgICAgaWYgKCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5TdHJpbmciKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5PYmplY3QiKSkgewotICAgIAkgICAgCXJldHVybiBwYXJhbWV0ZXI7Ci0gICAgCSAgICB9Ci0gICAgCQotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiaW50IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuSW50ZWdlciIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBJbnRlZ2VyKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9Ci0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoInNob3J0IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuU2hvcnQiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgU2hvcnQocGFyYW1ldGVyKTsKLSAgICAJICAgIH0gICAgCSAgICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiYnl0ZSIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkJ5dGUiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgQnl0ZShwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgICAJICAgICAgICAJICAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJsb25nIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuTG9uZyIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBMb25nKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgIAkgICAgICAgIAkgICAgICAgCSAgICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiZmxvYXQiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5GbG9hdCIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBGbG9hdChwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJkb3VibGUiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5Eb3VibGUiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgRG91YmxlKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgIAkgICAgICAgIAkgICAgICAgCSAgICAgCSAgICAgICAgCSAgICAgICAJICAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJqYXZhLm1hdGguQmlnRGVjaW1hbCIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBqYXZhLm1hdGguQmlnRGVjaW1hbChwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgICAJICAgICAgICAJICAgICAgIAkgICAgCi0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImphdmEubWF0aC5CaWdJbnRlZ2VyIikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IGphdmEubWF0aC5CaWdJbnRlZ2VyKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgIAkgICAgICAgIAkgICAgICAgCSAgICAgICAgCSAgICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiYm9vbGVhbiIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkJvb2xlYW4iKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgQm9vbGVhbihwYXJhbWV0ZXIpOwotICAgICAgICAgICAgfQkJCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBTdHJpbmcgdHlwZU5hbWUgPSB0eXBlLmdldE5hbWUoKTsKKyAgICAgICAgICAgIGlmICggdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuU3RyaW5nIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuT2JqZWN0IikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyYW1ldGVyOworICAgICAgICAgICAgfQogCi0gICAgCSAgICByZXR1cm4gcGFyYW1ldGVyOwotICAgIAl9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX25mZSIsIHBhcmFtZXRlcik7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24ocGFyYW1ldGVyKyI6IE5vdCBhIHZhbGlkIHZhbHVlIGZvciB0aGlzIG1ldGhvZCAiKTsKLSAgICAJfQorICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiaW50IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuSW50ZWdlciIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnRlZ2VyKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoInNob3J0IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuU2hvcnQiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2hvcnQocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiYnl0ZSIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkJ5dGUiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQnl0ZShwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJsb25nIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuTG9uZyIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBMb25nKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImZsb2F0IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuRmxvYXQiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRmxvYXQocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiZG91YmxlIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuRG91YmxlIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERvdWJsZShwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJqYXZhLm1hdGguQmlnRGVjaW1hbCIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBqYXZhLm1hdGguQmlnRGVjaW1hbChwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJqYXZhLm1hdGguQmlnSW50ZWdlciIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBqYXZhLm1hdGguQmlnSW50ZWdlcihwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJib29sZWFuIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuQm9vbGVhbiIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCb29sZWFuKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBwYXJhbWV0ZXI7CisgICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfbmZlIiwgcGFyYW1ldGVyKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihwYXJhbWV0ZXIrIjogTm90IGEgdmFsaWQgdmFsdWUgZm9yIHRoaXMgbWV0aG9kICIpOworICAgICAgICB9CiAgICAgfQotICAgIAorCiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9TZWN1cml0eVV0aWxzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvU2VjdXJpdHlVdGlscy5qYXZhCmluZGV4IGZjMTQ5YmYuLmYwMDhlN2YgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9TZWN1cml0eVV0aWxzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL1NlY3VyaXR5VXRpbHMuamF2YQpAQCAtMjksMzYgKzI5LDM2IEBACiAvKioKICAqIFNlY3VyaXR5VXRpbHMgZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8yMgotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMjIKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIHB1YmxpYyBjbGFzcyBTZWN1cml0eVV0aWxzIHsKIAogICAgIC8qKgotICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0LCBnaXZlbiAKLSAgICAgKiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiwgc3ViamVjdCBhbmQgdGhlIAotICAgICAqIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4uIEl0IGZpcnN0IGNoZWNrcyBpZiB0aGUgCi0gICAgICogPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBpcyBudWxsIG9yIG5vdC4gSWYgaXQgaXMgbm90IG51bGwsIAorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0LCBnaXZlbgorICAgICAqIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LCBzdWJqZWN0IGFuZCB0aGUKKyAgICAgKiA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+LiBJdCBmaXJzdCBjaGVja3MgaWYgdGhlCisgICAgICogPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBpcyBudWxsIG9yIG5vdC4gSWYgaXQgaXMgbm90IG51bGwsCiAgICAgICogaXQgY29uc3RydWN0cyBhIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0IHdpdGgKICAgICAgKiB0aGUgdXNlciBhbmQgcGFzc3dvcmQgZmllbGRzIGZyb20gdGhlIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gYW5kIHJldHVybnMgdGhpcwotICAgICAqIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0LiBJZiB0aGUgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiAKLSAgICAgKiBpcyBudWxsLCBpdCByZXRyaWV2ZXMgdGhlIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0cyBmcm9tIAorICAgICAqIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0LiBJZiB0aGUgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPgorICAgICAqIGlzIG51bGwsIGl0IHJldHJpZXZlcyB0aGUgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3RzIGZyb20KICAgICAgKiB0aGUgPGNvZGU+U3ViamVjdDwvY29kZT4gcGFyYW1ldGVyIGFuZCByZXR1cm5zIHRoZSBmaXJzdAotICAgICAqIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0IHdoaWNoIGNvbnRhaW5zIGEgCisgICAgICogPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3Qgd2hpY2ggY29udGFpbnMgYQogICAgICAqIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4sIGluc3RhbmNlIGVxdWl2YWxlbnQKICAgICAgKiB0byB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiwgcGFyYW1ldGVyLgogICAgICAqCi0gICAgICogQHBhcmFtCW1jZgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+Ci0gICAgICogQHBhcmFtCXN1YmplY3QJPGNvZGU+U3ViamVjdDwvY29kZT4KLSAgICAgKiBAcGFyYW0JaW5mbwk8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+Ci0gICAgICogQHJldHVybgk8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+Ci0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4JZ2VuZXJpYyBleGNlcHRpb24gaWYgb3BlcmF0aW9uIGZhaWxzCi0gICAgICogQHRocm93cwk8Y29kZT5TZWN1cml0eUV4Y2VwdGlvbjwvY29kZT4JaWYgYWNjZXNzIHRvIHRoZSA8Y29kZT5TdWJqZWN0PC9jb2RlPiBpbnN0YW5jZSBpcyBkZW5pZWQKKyAgICAgKiBAcGFyYW0gICAgbWNmICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgc3ViamVjdCAgICA8Y29kZT5TdWJqZWN0PC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBpbmZvICAgIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiAgICBnZW5lcmljIGV4Y2VwdGlvbiBpZiBvcGVyYXRpb24gZmFpbHMKKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlNlY3VyaXR5RXhjZXB0aW9uPC9jb2RlPiAgICBpZiBhY2Nlc3MgdG8gdGhlIDxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIGlzIGRlbmllZAogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgUGFzc3dvcmRDcmVkZW50aWFsIGdldFBhc3N3b3JkQ3JlZGVudGlhbChmaW5hbCBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmLAogICAgICAgICAgZmluYWwgU3ViamVjdCBzdWJqZWN0LCBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm8gaW5mbykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKIAotCWlmIChpbmZvID09IG51bGwpIHsKKyAgICBpZiAoaW5mbyA9PSBudWxsKSB7CiAgICAgICAgICAgICBpZiAoc3ViamVjdCA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtODksMTQgKzg5LDE0IEBACiAgICAgICAgICAgICByZXR1cm4gcGM7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRydWUgaWYgdHdvIHN0cmluZ3MgYXJlIGVxdWFsOyBmYWxzZSBvdGhlcndpc2UKLSAgICAgKiAKLSAgICAgKiBAcGFyYW0Jc3RyMQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHBhcmFtCXN0cjIJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEByZXR1cm4JdHJ1ZQlpZiB0aGUgdHdvIHN0cmluZ3MgYXJlIGVxdWFsCi0gICAgICogICAgICAgIAlmYWxzZQlvdGhlcndpc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzdHIxICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgc3RyMiAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHJldHVybiAgICB0cnVlICAgIGlmIHRoZSB0d28gc3RyaW5ncyBhcmUgZXF1YWwKKyAgICAgKiAgICAgICAgICAgIGZhbHNlICAgIG90aGVyd2lzZQogICAgICAqLwogICAgIHN0YXRpYyBwcml2YXRlIGJvb2xlYW4gaXNFcXVhbChTdHJpbmcgc3RyMSwgU3RyaW5nIHN0cjIpIHsKICAgICAgICAgaWYgKHN0cjEgPT0gbnVsbCkgewpAQCAtMTA5LDEwICsxMDksMTAgQEAKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRydWUgaWYgdHdvIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0cyBhcmUgZXF1YWw7IGZhbHNlIG90aGVyd2lzZQogICAgICAqCi0gICAgICogQHBhcmFtCXBDMQk8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+Ci0gICAgICogQHBhcmFtCXBDMgk8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+Ci0gICAgICogQHJldHVybgl0cnVlCWlmIHRoZSB0d28gUGFzc3dvcmRDcmVkZW50aWFscyBhcmUgZXF1YWwKLSAgICAgKiAgICAgICAgCWZhbHNlCW90aGVyd2lzZQorICAgICAqIEBwYXJhbSAgICBwQzEgICAgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBwQzIgICAgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgdHJ1ZSAgICBpZiB0aGUgdHdvIFBhc3N3b3JkQ3JlZGVudGlhbHMgYXJlIGVxdWFsCisgICAgICogICAgICAgICAgICBmYWxzZSAgICBvdGhlcndpc2UKICAgICAgKi8KICAgICBzdGF0aWMgcHVibGljIGJvb2xlYW4gaXNQYXNzd29yZENyZWRlbnRpYWxFcXVhbChQYXNzd29yZENyZWRlbnRpYWwgcEMxLCBQYXNzd29yZENyZWRlbnRpYWwgcEMyKSB7CiAgICAgICAgIGlmIChwQzEgPT0gcEMyKQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9idWlsZC54bWwKaW5kZXggYTU1YmJmMC4uZjA2MGU3ZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvYnVpbGQueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxwcm9qZWN0IG5hbWU9ImpkYmNfY29ubmVjdG9yIiBiYXNlZGlyPSIuIiBkZWZhdWx0PSJidWlsZCI+CiAgIDxwcm9wZXJ0eSBuYW1lPSJwa2cuZGlyIiB2YWx1ZT0iY29tL3N1bi9namMvdXRpbCIvPgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImNsZWFuIj4KICAgICA8YW50IGFudGZpbGU9ImJ1aWxkLnhtbCIgZGlyPSIke2dqYy5ob21lfS9iaW4iIHRhcmdldD0iY2xlYW4iLz4KICAgPC90YXJnZXQ+CkBAIC0zMyw3ICszMyw3IEBACiAgICAgICA8amFyIGphcmZpbGU9IiR7ZGlzdC5kaXJ9LyR7cGtnLmRpcn0vdXRpbC5qYXIiIGJhc2VkaXI9IiR7Y2xhc3MuZGlyfSIKICAgICAgICAgaW5jbHVkZXM9IiR7cGtnLmRpcn0vKiovKiIvPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJjb21waWxlMTMiIGRlcGVuZHM9ImNvbXBpbGUiLz4KICAgPHRhcmdldCBuYW1lPSJjb21waWxlMTQiIGRlcGVuZHM9ImNvbXBpbGUiLz4KIApAQCAtNDQsNSArNDQsNSBAQAogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkMTQiIGRlcGVuZHM9ImNvbXBpbGUxNCwgcGFja2FnZTE0Ii8+CiAKICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iYnVpbGQxMywgYnVpbGQxNCIvPgotICAKKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3NlcnZsZXQvU2ltcGxlQmFua1NlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9lbWJlZGRlZHdlYi9zZXJ2bGV0L1NpbXBsZUJhbmtTZXJ2bGV0LmphdmEKaW5kZXggYmM3YjU1ZC4uOTg5MmZmNiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3NlcnZsZXQvU2ltcGxlQmFua1NlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvc2VydmxldC9TaW1wbGVCYW5rU2VydmxldC5qYXZhCkBAIC0xNywxNiArMTcsMTYgQEAKIHBhY2thZ2Ugc2FtcGxlcy5lamIuc3ViY2xhc3Npbmcuc2VydmxldDsKIAogaW1wb3J0IGphdmEuaW8uKjsKLWltcG9ydCBqYXZhLnV0aWwuKjsgCi1pbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lio7IAotaW1wb3J0IGphdmF4Lm5hbWluZy4qOyAKLWltcG9ydCBqYWthcnRhLnNlcnZsZXQuaHR0cC4qOyAKLWltcG9ydCBqYWthcnRhLmVqYi4qOyAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2ltcG9ydCBqYWthcnRhLnNlcnZsZXQuKjsKK2ltcG9ydCBqYXZheC5uYW1pbmcuKjsKK2ltcG9ydCBqYWthcnRhLnNlcnZsZXQuaHR0cC4qOworaW1wb3J0IGpha2FydGEuZWpiLio7CiAKLWltcG9ydCBzYW1wbGVzLmVqYi5zdWJjbGFzc2luZy5lamIuKjsgCitpbXBvcnQgc2FtcGxlcy5lamIuc3ViY2xhc3NpbmcuZWpiLio7CiBpbXBvcnQgY29tLnN1bi5qZGJjcmEuc3BpLkpkYmNTZXR1cEFkbWluOwogCi1wdWJsaWMgY2xhc3MgU2ltcGxlQmFua1NlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7ICAKK3B1YmxpYyBjbGFzcyBTaW1wbGVCYW5rU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIAogCiAgIEluaXRpYWxDb250ZXh0IGluaXRDb250ZXh0ID0gbnVsbDsKQEAgLTQyLDE0ICs0MiwxNCBAQAogICB7CiAgIH0KIAotICBwdWJsaWMgdm9pZCBkb0dldCAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgCi0gICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7IAorICBwdWJsaWMgdm9pZCBkb0dldCAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkKKyAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICBkb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOwotICB9ICAKKyAgfQogCi0gIC8qKiBoYW5kbGVzIHRoZSBIVFRQIFBPU1Qgb3BlcmF0aW9uICoqLyAKLSAgcHVibGljIHZvaWQgZG9Qb3N0IChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCxIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSAKLSAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgCisgIC8qKiBoYW5kbGVzIHRoZSBIVFRQIFBPU1Qgb3BlcmF0aW9uICoqLworICBwdWJsaWMgdm9pZCBkb1Bvc3QgKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCisgICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgZG9Mb29rdXAoKTsKICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNpbXBsZUJhbmtTZXJ2bGV0IGlzIGV4ZWN1dGluZyIpOwogICAgIFN0cmluZyBTU04gPSByZXF1ZXN0LmdldFBhcmFtZXRlcigiU1NOIik7CkBAIC02NSwxNCArNjUsMTQgQEAKICAgICBTdHJpbmcgemlwQ29kZSA9ICIiOwogICAgIGxvbmcgY3VycmVudFNhdmluZ3NCYWxhbmNlID0gMDsKICAgICBsb25nIGN1cnJlbnRDaGVja2luZ0JhbGFuY2UgPSAwOwotICAgICAKKwogICAgIFN0cmluZyBhY3Rpb24gPSByZXF1ZXN0LmdldFBhcmFtZXRlcigiYWN0aW9uIik7CiAgICAgaWYgKGFjdGlvbi5lcXVhbHMoIkNyZWF0ZSIpKQogICAgIHsKICAgICAgIG1lc3NhZ2UgPSAiQWRkIEN1c3RvbWVyIjsKICAgICAgIGpzcCA9ICIvU2ltcGxlQmFua0FkZC5qc3AiOwogICAgIH0KLSAgICBlbHNlIGlmIChhY3Rpb24uZXF1YWxzKCJBZGQgQ3VzdG9tZXIiKSkgCisgICAgZWxzZSBpZiAoYWN0aW9uLmVxdWFscygiQWRkIEN1c3RvbWVyIikpCiAgICAgewogICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBZGQgQ3VzdG9tZXIgYnV0dG9uIHByZXNzZWQiKTsKICAgICAgIFNTTiA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJTU04iKTsKQEAgLTg5LDcgKzg5LDcgQEAKICAgICAgICAgY3VzdG9tZXJTYXZpbmdzID0gY3VzdG9tZXJTYXZpbmdzTG9jYWxIb21lLmNyZWF0ZShTU04sIGxhc3ROYW1lLCBmaXJzdE5hbWUsIGFkZHJlc3MxLCBhZGRyZXNzMiwgY2l0eSwgc3RhdGUsIHppcENvZGUpOwogICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb3VsZCBub3QgY3JlYXRlIHRoZSBjdXN0b21lciBzYXZpbmdzIHJlbW90ZSBiZWFuIDogIiArIGUudG9TdHJpbmcoKSk7Ci0JdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgLy9yZXR1cm47CiAgICAgICB9CiAgICAgICBtZXNzYWdlID0gIkN1c3RvbWVyIEFkZGVkLiI7CkBAIC0xMDIsNyArMTAyLDcgQEAKICAgICAgICAgY3VzdG9tZXJTYXZpbmdzID0gY3VzdG9tZXJTYXZpbmdzTG9jYWxIb21lLmZpbmRCeVByaW1hcnlLZXkoU1NOKTsKICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ291bGQgbm90IGZpbmQgdGhlIGN1c3RvbWVyIHJlbW90ZSBiZWFuIDogIiArIGUudG9TdHJpbmcoKSk7Ci0JdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgLy9yZXR1cm47CiAgICAgICB9CiAgICAgICBqc3AgPSAiL1NpbXBsZUJhbmtFZGl0LmpzcCI7CkBAIC0xMTQsNyArMTE0LDcgQEAKICAgICAgICAgY3VzdG9tZXJTYXZpbmdzID0gY3VzdG9tZXJTYXZpbmdzTG9jYWxIb21lLmZpbmRCeVByaW1hcnlLZXkoU1NOKTsKICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ291bGQgbm90IGZpbmQgdGhlIGN1c3RvbWVyIHNhdmluZ3MgcmVtb3RlIGJlYW4gOiAiICsgZS50b1N0cmluZygpKTsKLQl0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CisgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAvL3JldHVybjsKICAgICAgIH0KICAgICAgIG1lc3NhZ2UgPSAiRGVsZXRlIEN1c3RvbWVyIjsKQEAgLTEyNiwxMiArMTI2LDEyIEBACiAgICAgICAgIGN1c3RvbWVyU2F2aW5nc0xvY2FsSG9tZS5maW5kQnlQcmltYXJ5S2V5KFNTTikucmVtb3ZlKCk7CiAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvdWxkIG5vdCBkZWxldGUgdGhlIGN1c3RvbWVyIHNhdmluZ3MgYmVhbiA6ICIgKyBlLnRvU3RyaW5nKCkpOwotCXRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIC8vcmV0dXJuOwogICAgICAgfQogICAgICAgbWVzc2FnZSA9ICJDdXN0b21lciBEZWxldGVkLiI7CiAgICAgICBqc3AgPSAiL1NpbXBsZUJhbmtNZXNzYWdlLmpzcCI7Ci0gICAgfSAgCisgICAgfQogCiAKICAgICBlbHNlIGlmIChhY3Rpb24uZXF1YWxzKCJVcGRhdGUiKSkKQEAgLTE0MSw3ICsxNDEsNyBAQAogICAgICAgICBjdXN0b21lclNhdmluZ3MgPSAoQ3VzdG9tZXJTYXZpbmdzKWN1c3RvbWVyU2F2aW5nc0xvY2FsSG9tZS5maW5kQnlQcmltYXJ5S2V5KFNTTik7CiAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvdWxkIG5vdCBmaW5kIHRoZSBjdXN0b21lciBzYXZpbmdzIHJlbW90ZSBiZWFuIDogIiArIGUudG9TdHJpbmcoKSk7Ci0JdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgLy9yZXR1cm47CiAgICAgICB9CiAKQEAgLTE1MCw3ICsxNTAsNyBAQAogICAgICAgICBjdXN0b21lckNoZWNraW5nID0gKEN1c3RvbWVyQ2hlY2tpbmcpY3VzdG9tZXJDaGVja2luZ0xvY2FsSG9tZS5maW5kQnlQcmltYXJ5S2V5KFNTTik7CiAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvdWxkIG5vdCBmaW5kIHRoZSBjdXN0b21lciBjaGVja2luZyByZW1vdGUgYmVhbiA6ICIgKyBlLnRvU3RyaW5nKCkpOwotCXRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIC8vcmV0dXJuOwogICAgICAgfQogCkBAIC0yMTAsOSArMjEwLDkgQEAKICAgICBSZXF1ZXN0RGlzcGF0Y2hlciBkaXNwYXRjaGVyID0gZ2V0U2VydmxldENvbnRleHQoKS5nZXRSZXF1ZXN0RGlzcGF0Y2hlcihqc3ApOwogICAgIGRpc3BhdGNoZXIuaW5jbHVkZShyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgcmV0dXJuOwotICB9IAorICB9CiAKLSAgcHVibGljIHZvaWQgZG9Mb29rdXAoKSAKKyAgcHVibGljIHZvaWQgZG9Mb29rdXAoKQogICB7CiAgICAgdHJ5IHsKICAgICAgIGluaXRDb250ZXh0ID0gbmV3IGphdmF4Lm5hbWluZy5Jbml0aWFsQ29udGV4dCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2VtYmVkZGVkd2ViL3NxbC9kcm9wQmFua1RhYmxlcy5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvc3FsL2Ryb3BCYW5rVGFibGVzLnNxbAppbmRleCBkZjlkZjM0Li4zM2E3MDY5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvc3FsL2Ryb3BCYW5rVGFibGVzLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZW1iZWRkZWR3ZWIvc3FsL2Ryb3BCYW5rVGFibGVzLnNxbApAQCAtMSArMSBAQAotZHJvcCB0YWJsZSBjdXN0b21lcjI7DQorZHJvcCB0YWJsZSBjdXN0b21lcjI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9hcHAvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvYXBwL2J1aWxkLnhtbAppbmRleCA1M2Y4ZGRlLi41MDFmMzdjIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9hcHAvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL2FwcC9idWlsZC54bWwKQEAgLTM2LDggKzM2LDggQEAKICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyIi8+CiAgPCEtLQogICAgPGFudGNhbGwgdGFyZ2V0PSJlYXItY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0iYXBwbmFtZSIgdmFsdWU9ImdlbmVyaWMtZW1iZWRkZWQiLz4KLQk8cGFyYW0gbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIi8+CisgICAgPHBhcmFtIG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJnZW5lcmljLWVtYmVkZGVkIi8+CisgICAgPHBhcmFtIG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9Ik1FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIvPgogICAgPC9hbnRjYWxsPgogIC0tPgogICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9hcHAvc3JjL01FVEEtSU5GL2VqYi1qYXIueG1sCmluZGV4IGU5NDA0MmIuLjhlNTQ3YzQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvYXBwL3NyYy9NRVRBLUlORi9lamItamFyLnhtbApAQCAtMzMsOCArMzMsOCBAQAogICAgICAgPHNlc3Npb24tdHlwZT5TdGF0ZWxlc3M8L3Nlc3Npb24tdHlwZT4KICAgICAgIDx0cmFuc2FjdGlvbi10eXBlPkNvbnRhaW5lcjwvdHJhbnNhY3Rpb24tdHlwZT4KICAgICAgIDxyZXNvdXJjZS1lbnYtcmVmPgotCTxyZXNvdXJjZS1lbnYtcmVmLW5hbWU+ZWlzL3Rlc3RBZG1pbjwvcmVzb3VyY2UtZW52LXJlZi1uYW1lPgotCTxyZXNvdXJjZS1lbnYtcmVmLXR5cGU+Y29tLnN1bi5qZGJjcmEuc3BpLkpkYmNTZXR1cEFkbWluPC9yZXNvdXJjZS1lbnYtcmVmLXR5cGU+CisgICAgPHJlc291cmNlLWVudi1yZWYtbmFtZT5laXMvdGVzdEFkbWluPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+CisgICAgPHJlc291cmNlLWVudi1yZWYtdHlwZT5jb20uc3VuLmpkYmNyYS5zcGkuSmRiY1NldHVwQWRtaW48L3Jlc291cmNlLWVudi1yZWYtdHlwZT4KICAgICAgIDwvcmVzb3VyY2UtZW52LXJlZj4KICAgICAgIDxzZWN1cml0eS1pZGVudGl0eT4KICAgICAgICAgPHVzZS1jYWxsZXItaWRlbnRpdHkvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvYXBwL3NyYy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9hcHAvc3JjL01FVEEtSU5GL3N1bi1lamItamFyLnhtbAppbmRleCBlNzNjYjQ2Li4zZmRlMjMwIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9hcHAvc3JjL01FVEEtSU5GL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9hcHAvc3JjL01FVEEtSU5GL3N1bi1lamItamFyLnhtbApAQCAtMjUsNyArMjUsNyBAQAogICAgIDxlamI+CiAgICAgICA8ZWpiLW5hbWU+TXlWZXJzaW9uQ2hlY2tlcjwvZWpiLW5hbWU+CiAgICAgICA8am5kaS1uYW1lPk15VmVyc2lvbkNoZWNrZXI8L2puZGktbmFtZT4KLTwhLS0gICAgICAKKzwhLS0KICAgICA8aW9yLXNlY3VyaXR5LWNvbmZpZz4KICAgICAgICAgPHRyYW5zcG9ydC1jb25maWc+CiAgICAgICAgICAgPGludGVncml0eT5zdXBwb3J0ZWQ8L2ludGVncml0eT4KQEAgLTQyLDEwICs0MiwxMCBAQAogICAgICAgICAgIDxjYWxsZXItcHJvcGFnYXRpb24+c3VwcG9ydGVkPC9jYWxsZXItcHJvcGFnYXRpb24+CiAgICAgICAgIDwvc2FzLWNvbnRleHQ+CiAgICAgICA8L2lvci1zZWN1cml0eS1jb25maWc+Ci0tLT4gICAgCistLT4KICAgICAgIDxyZXNvdXJjZS1lbnYtcmVmPgogICAgICAgICA8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmVpcy90ZXN0QWRtaW48L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KLQk8am5kaS1uYW1lPmVpcy90ZXN0QWRtaW48L2puZGktbmFtZT4KKyAgICA8am5kaS1uYW1lPmVpcy90ZXN0QWRtaW48L2puZGktbmFtZT4KICAgICAgIDwvcmVzb3VyY2UtZW52LXJlZj4KICAgICAgIDxnZW4tY2xhc3Nlcy8+CiAgICAgPC9lamI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9hcHAvc3JjL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL2FwcC9zcmMvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDdlZGIzNTcuLjc2NjNlZDYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL2FwcC9zcmMvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL2FwcC9zcmMvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNywzNiArMjcsMzYgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkNsaWVudDogQXJnczogIik7Ci0JZm9yKGludCBpID0gMCA7IGk8IGFyZ3MubGVuZ3RoOyBpKyspIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJDbGllbnQ6IEFyZ3M6ICIgKyBhcmdzW2ldKTsKLQl9Ci0JSW50ZWdlciB2ZXJzaW9uTnVtYmVyID0gbmV3IEludGVnZXIoYXJnc1swXSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJDbGllbnQ6IEFyZ3M6ICIpOworICAgIGZvcihpbnQgaSA9IDAgOyBpPCBhcmdzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2xpZW50OiBBcmdzOiAiICsgYXJnc1tpXSk7CisgICAgfQorICAgIEludGVnZXIgdmVyc2lvbk51bWJlciA9IG5ldyBJbnRlZ2VyKGFyZ3NbMF0pOwogICAgICAgICBjbGllbnQuZG9UZXN0KHZlcnNpb25OdW1iZXIuaW50VmFsdWUoKSk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBkb1Rlc3QoaW50IHZlcnNpb25Ub1Rlc3QpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVGhpcyBpcyB0byB0ZXN0IHJlZGVwbG95bWVudCBvZiBjb25uZWN0b3JzICIrCi0JICAgICAgICAgICAgICJjb250cmFjdHMuIik7Ci0gICAgICAgIAorICAgICAgICAgICAgICAgICAiY29udHJhY3RzLiIpOworCiAgICAgICAgIFN0cmluZyByZXMgPSAiTk9UIFJVTiI7Ci0JZGVidWcoImRvVGVzdCgpIEVOVEVSLi4uIik7CisgICAgZGVidWcoImRvVGVzdCgpIEVOVEVSLi4uIik7CiAgICAgICAgIGJvb2xlYW4gcGFzcyA9IGZhbHNlOwogICAgICAgICB0cnkgewotCQlwYXNzID0gY2hlY2tSZXN1bHRzKHZlcnNpb25Ub1Rlc3QpOwotCQlkZWJ1ZygiR290IGV4cGVjdGVkIHJlc3VsdHMgPSAiICsgcGFzcyk7Ci0JCQotCQkvL2RvIG5vdCBjb250aW51ZSBpZiBvbmUgdGVzdCBmYWlsZWQKLQkJaWYgKCFwYXNzKSB7Ci0JCQlyZXMgPSAiU09NRSBURVNUUyBGQUlMRUQiOwotCQkJc3RhdC5hZGRTdGF0dXMoIlJlZGVwbG95IENvbm5lY3RvciAxLjUgdGVzdCAtICIsIHN0YXQuRkFJTCk7Ci0JCX0gZWxzZSB7Ci0JCQlyZXMgID0gIkFMTCBURVNUUyBQQVNTRUQiOwotCQkJc3RhdC5hZGRTdGF0dXMoIlJlZGVwbG95IENvbm5lY3RvciAxLjUgdGVzdCAtICIgLCBzdGF0LlBBU1MpOwotCQl9CisgICAgICAgIHBhc3MgPSBjaGVja1Jlc3VsdHModmVyc2lvblRvVGVzdCk7CisgICAgICAgIGRlYnVnKCJHb3QgZXhwZWN0ZWQgcmVzdWx0cyA9ICIgKyBwYXNzKTsKKworICAgICAgICAvL2RvIG5vdCBjb250aW51ZSBpZiBvbmUgdGVzdCBmYWlsZWQKKyAgICAgICAgaWYgKCFwYXNzKSB7CisgICAgICAgICAgICByZXMgPSAiU09NRSBURVNUUyBGQUlMRUQiOworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIlJlZGVwbG95IENvbm5lY3RvciAxLjUgdGVzdCAtICIsIHN0YXQuRkFJTCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXMgID0gIkFMTCBURVNUUyBQQVNTRUQiOworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIlJlZGVwbG95IENvbm5lY3RvciAxLjUgdGVzdCAtICIgLCBzdGF0LlBBU1MpOworICAgICAgICB9CiAKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlZGVwbG95IGNvbm5lY3RvciB0ZXN0IGZhaWxlZC4iKTsKQEAgLTY4LDIwICs2OCwyMCBAQAogICAgICAgICBkZWJ1ZygiRVhJVElORy4uLiBTVEFUVVMgPSAiICsgcmVzKTsKICAgICAgICAgcmV0dXJuIHJlczsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIGJvb2xlYW4gY2hlY2tSZXN1bHRzKGludCBudW0pIHRocm93cyBFeGNlcHRpb24gewotCSAgICBkZWJ1ZygiY2hlY2tSZXN1bHQiICsgbnVtKTsKLQkgICAgZGVidWcoImdvdCBpbml0aWFsIGNvbnRleHQiICsgKG5ldyBJbml0aWFsQ29udGV4dCgpKS50b1N0cmluZygpKTsKKyAgICAgICAgZGVidWcoImNoZWNrUmVzdWx0IiArIG51bSk7CisgICAgICAgIGRlYnVnKCJnb3QgaW5pdGlhbCBjb250ZXh0IiArIChuZXcgSW5pdGlhbENvbnRleHQoKSkudG9TdHJpbmcoKSk7CiAgICAgICAgIE9iamVjdCBvID0gKG5ldyBJbml0aWFsQ29udGV4dCgpKS5sb29rdXAoIk15VmVyc2lvbkNoZWNrZXIiKTsKLQlkZWJ1ZygiZ290IG8iICsgbyk7Ci0gICAgICAgIFZlcnNpb25DaGVja2VySG9tZSAgaG9tZSA9IChWZXJzaW9uQ2hlY2tlckhvbWUpIAorICAgIGRlYnVnKCJnb3QgbyIgKyBvKTsKKyAgICAgICAgVmVyc2lvbkNoZWNrZXJIb21lICBob21lID0gKFZlcnNpb25DaGVja2VySG9tZSkKICAgICAgICAgICAgIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvLCBWZXJzaW9uQ2hlY2tlckhvbWUuY2xhc3MpOwogICAgICAgICBkZWJ1ZygiZ290IGhvbWUiICsgaG9tZSk7Ci0JICAgIFZlcnNpb25DaGVja2VyIGNoZWNrZXIgPSBob21lLmNyZWF0ZSgpOwotCSAgICBkZWJ1ZygiZ290IG8iICsgY2hlY2tlcik7CisgICAgICAgIFZlcnNpb25DaGVja2VyIGNoZWNrZXIgPSBob21lLmNyZWF0ZSgpOworICAgICAgICBkZWJ1ZygiZ290IG8iICsgY2hlY2tlcik7CiAgICAgICAgIC8vcHJvYmxlbSBoZXJlIQotCWludCByZXN1bHQgPSBjaGVja2VyLmdldFZlcnNpb24oKTsKLQlkZWJ1ZygiY2hlY2tSZXN1bHQiICsgcmVzdWx0KTsKKyAgICBpbnQgcmVzdWx0ID0gY2hlY2tlci5nZXRWZXJzaW9uKCk7CisgICAgZGVidWcoImNoZWNrUmVzdWx0IiArIHJlc3VsdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQgPT0gbnVtOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvYXBwL3NyYy9lamIvVmVyc2lvbkNoZWNrZXJFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL2FwcC9zcmMvZWpiL1ZlcnNpb25DaGVja2VyRUpCLmphdmEKaW5kZXggYTAwOTEzYS4uNjgyMTFkOCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvYXBwL3NyYy9lamIvVmVyc2lvbkNoZWNrZXJFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9hcHAvc3JjL2VqYi9WZXJzaW9uQ2hlY2tlckVKQi5qYXZhCkBAIC0yMyw0NyArMjMsNDcgQEAKIGltcG9ydCBjb20uc3VuLmpkYmNyYS5zcGkuSmRiY1NldHVwQWRtaW47CiAKIHB1YmxpYyBjbGFzcyBWZXJzaW9uQ2hlY2tlckVKQiBpbXBsZW1lbnRzIFNlc3Npb25CZWFuIHsKLQlwcml2YXRlIEluaXRpYWxDb250ZXh0IGluaXRDb250ZXh0ID0gbnVsbDsKLQlwcml2YXRlIFNlc3Npb25Db250ZXh0IHNlc3Npb25Db250ZXh0ID0gbnVsbDsKKyAgICBwcml2YXRlIEluaXRpYWxDb250ZXh0IGluaXRDb250ZXh0ID0gbnVsbDsKKyAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IHNlc3Npb25Db250ZXh0ID0gbnVsbDsKIAogCiAgICAgcHVibGljIFZlcnNpb25DaGVja2VyRUpCKCkgewogICAgIGRlYnVnKCJDb25zdHJ1Y3RvciIpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIAorICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpCiAgICAgICAgIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewotCQlkZWJ1ZygiZWpiQ3JlYXRlKCkiKTsKKyAgICAgICAgZGVidWcoImVqYkNyZWF0ZSgpIik7CiAgICAgfQogCiAKICAgICBwdWJsaWMgaW50IGdldFZlcnNpb24oKXsKLQkgICAgdHJ5IHsKLQkgICAgICBpbml0Q29udGV4dCA9IG5ldyBqYXZheC5uYW1pbmcuSW5pdGlhbENvbnRleHQoKTsKLQkgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4Y2VwdGlvbiBvY2N1cmVkIHdoZW4gY3JlYXRpbmcgSW5pdGlhbENvbnRleHQ6ICIgKyBlLnRvU3RyaW5nKCkpOwotCSAgICAgIHJldHVybiAtMTsKLQkgICAgfQotCQotCSAgICB0cnkgewotCSAgICAgIEpkYmNTZXR1cEFkbWluIGphID0gKEpkYmNTZXR1cEFkbWluKSBpbml0Q29udGV4dC5sb29rdXAoImVpcy9qZGJjQWRtaW4iKTsKLQkgICAgICBpbnQgdmVyc2lvbm5vID0gIGphLmdldFZlcnNpb24oKTsKLQkgICAgICBkZWJ1ZygiVmVyc2lvbiBudW1iZXIgaXMgIiArIHZlcnNpb25ubyk7Ci0JICAgICAgcmV0dXJuIHZlcnNpb25ubzsKLQkgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKLQkgICAgfQorICAgICAgICB0cnkgeworICAgICAgICAgIGluaXRDb250ZXh0ID0gbmV3IGphdmF4Lm5hbWluZy5Jbml0aWFsQ29udGV4dCgpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhjZXB0aW9uIG9jY3VyZWQgd2hlbiBjcmVhdGluZyBJbml0aWFsQ29udGV4dDogIiArIGUudG9TdHJpbmcoKSk7CisgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICBKZGJjU2V0dXBBZG1pbiBqYSA9IChKZGJjU2V0dXBBZG1pbikgaW5pdENvbnRleHQubG9va3VwKCJlaXMvamRiY0FkbWluIik7CisgICAgICAgICAgaW50IHZlcnNpb25ubyA9ICBqYS5nZXRWZXJzaW9uKCk7CisgICAgICAgICAgZGVidWcoIlZlcnNpb24gbnVtYmVyIGlzICIgKyB2ZXJzaW9ubm8pOworICAgICAgICAgIHJldHVybiB2ZXJzaW9ubm87CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIH0KICAgICB9CiAKIAogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IGNvbnRleHQpIHsKLQkgICAgZGVidWcoIiBiZWFuIHJlbW92ZWQiKTsKKyAgICAgICAgZGVidWcoIiBiZWFuIHJlbW92ZWQiKTsKICAgICAgICAgc2Vzc2lvbkNvbnRleHQgPSBjb250ZXh0OwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHsKLQkgICAgZGVidWcoIiBiZWFuIHJlbW92ZWQiKTsKKyAgICAgICAgZGVidWcoIiBiZWFuIHJlbW92ZWQiKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGZiMmI0ZDguLjQ0NTYzZTQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJmb3JjZS1kZXBsb3kiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXJhciIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tcmFyIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIAogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvYnVpbGQueG1sCmluZGV4IDg1MWRlZDUuLjgyOGIwMDUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9idWlsZC54bWwKQEAgLTM5LDcgKzM5LDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50IGRpcj0icmEiIGluaGVyaXRBbGw9ImZhbHNlIiB0YXJnZXQ9ImNvbXBpbGUiLz4KLSAgICAgICAgCisKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iczFhc3Rlc3QuY2xhc3NwYXRoIiB2YWx1ZT0iJHtzMWFzdGVzdC5jbGFzc3BhdGh9Oi4vcmEvcHVibGlzaC9pbnRlcm5hbC9jbGFzc2VzLyIvPgpAQCAtMTM0LDcgKzEzNCw3IEBACiAKIAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgICAgICAKKwogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InNldHVwdHdvIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95Ii8+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iY2xpZW50LldlYlRlc3QiPgpAQCAtMjIwLDcgKzIyMCw3IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZmFpbG9uZXJyb3IiIHZhbHVlPSJ0cnVlIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXBvb2wiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1jb25uZWN0b3ItY29ubnBvb2wtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJjb25uZWN0b3IuY29ucG9vbC5uYW1lIiB2YWx1ZT0idmVyc2lvbnRlc3QtcmEtcG9vbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGY5OTlhOGEuLjQ5MmU3OWEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI3LDM1ICsyNywzNSBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiQ2xpZW50OiBBcmdzOiAiKTsKLQlmb3IoaW50IGkgPSAwIDsgaTwgYXJncy5sZW5ndGg7IGkrKykgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNsaWVudDogQXJnczogIiArIGFyZ3NbaV0pOwotCX0KLQlJbnRlZ2VyIHZlcnNpb25OdW1iZXIgPSBuZXcgSW50ZWdlcihhcmdzWzBdKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNsaWVudDogQXJnczogIik7CisgICAgZm9yKGludCBpID0gMCA7IGk8IGFyZ3MubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDbGllbnQ6IEFyZ3M6ICIgKyBhcmdzW2ldKTsKKyAgICB9CisgICAgSW50ZWdlciB2ZXJzaW9uTnVtYmVyID0gbmV3IEludGVnZXIoYXJnc1swXSk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QodmVyc2lvbk51bWJlci5pbnRWYWx1ZSgpKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGRvVGVzdChpbnQgdmVyc2lvblRvVGVzdCkgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJUaGlzIGlzIHRvIHRlc3QgcmVkZXBsb3ltZW50IG9mIGNvbm5lY3RvciBtb2R1bGVzLiBUZXN0aW5nIHZlcnNpb24gIiArIHZlcnNpb25Ub1Rlc3QpOwotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgcmVzID0gIk5PVCBSVU4iOwotCWRlYnVnKCJkb1Rlc3QoKSBFTlRFUi4uLiIpOworICAgIGRlYnVnKCJkb1Rlc3QoKSBFTlRFUi4uLiIpOwogICAgICAgICBib29sZWFuIHBhc3MgPSBmYWxzZTsKICAgICAgICAgdHJ5IHsKLQkJcGFzcyA9IGNoZWNrUmVzdWx0cyh2ZXJzaW9uVG9UZXN0KTsKLQkJZGVidWcoIkdvdCBleHBlY3RlZCByZXN1bHRzID0gIiArIHBhc3MpOwotCQkKLQkJLy9kbyBub3QgY29udGludWUgaWYgb25lIHRlc3QgZmFpbGVkCi0JCWlmICghcGFzcykgewotCQkJcmVzID0gIlNPTUUgVEVTVFMgRkFJTEVEIjsKLQkJCXN0YXQuYWRkU3RhdHVzKCJSZWRlcGxveSBDb25uZWN0b3IgMS41IHRlc3QgLSBWZXJzaW9uIDogIisgdmVyc2lvblRvVGVzdCwgc3RhdC5GQUlMKTsKLQkJfSBlbHNlIHsKLQkJCXJlcyAgPSAiQUxMIFRFU1RTIFBBU1NFRCI7Ci0JCQlzdGF0LmFkZFN0YXR1cygiUmVkZXBsb3kgQ29ubmVjdG9yIDEuNSB0ZXN0IC0gVmVyc2lvbiA6ICIgKyB2ZXJzaW9uVG9UZXN0ICwgc3RhdC5QQVNTKTsKLQkJfQorICAgICAgICBwYXNzID0gY2hlY2tSZXN1bHRzKHZlcnNpb25Ub1Rlc3QpOworICAgICAgICBkZWJ1ZygiR290IGV4cGVjdGVkIHJlc3VsdHMgPSAiICsgcGFzcyk7CisKKyAgICAgICAgLy9kbyBub3QgY29udGludWUgaWYgb25lIHRlc3QgZmFpbGVkCisgICAgICAgIGlmICghcGFzcykgeworICAgICAgICAgICAgcmVzID0gIlNPTUUgVEVTVFMgRkFJTEVEIjsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJSZWRlcGxveSBDb25uZWN0b3IgMS41IHRlc3QgLSBWZXJzaW9uIDogIisgdmVyc2lvblRvVGVzdCwgc3RhdC5GQUlMKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJlcyAgPSAiQUxMIFRFU1RTIFBBU1NFRCI7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiUmVkZXBsb3kgQ29ubmVjdG9yIDEuNSB0ZXN0IC0gVmVyc2lvbiA6ICIgKyB2ZXJzaW9uVG9UZXN0ICwgc3RhdC5QQVNTKTsKKyAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVkZXBsb3kgY29ubmVjdG9yIHRlc3QgZmFpbGVkLiIpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CkBAIC02NiwyMCArNjYsMjAgQEAKICAgICAgICAgZGVidWcoIkVYSVRJTkcuLi4gU1RBVFVTID0gIiArIHJlcyk7CiAgICAgICAgIHJldHVybiByZXM7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBib29sZWFuIGNoZWNrUmVzdWx0cyhpbnQgbnVtKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkgICAgZGVidWcoImNoZWNrUmVzdWx0IiArIG51bSk7Ci0JICAgIGRlYnVnKCJnb3QgaW5pdGlhbCBjb250ZXh0IiArIChuZXcgSW5pdGlhbENvbnRleHQoKSkudG9TdHJpbmcoKSk7CisgICAgICAgIGRlYnVnKCJjaGVja1Jlc3VsdCIgKyBudW0pOworICAgICAgICBkZWJ1ZygiZ290IGluaXRpYWwgY29udGV4dCIgKyAobmV3IEluaXRpYWxDb250ZXh0KCkpLnRvU3RyaW5nKCkpOwogICAgICAgICBPYmplY3QgbyA9IChuZXcgSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9NeVZlcnNpb25DaGVja2VyIik7Ci0JZGVidWcoImdvdCBvIiArIG8pOwotICAgICAgICBWZXJzaW9uQ2hlY2tlckhvbWUgIGhvbWUgPSAoVmVyc2lvbkNoZWNrZXJIb21lKSAKKyAgICBkZWJ1ZygiZ290IG8iICsgbyk7CisgICAgICAgIFZlcnNpb25DaGVja2VySG9tZSAgaG9tZSA9IChWZXJzaW9uQ2hlY2tlckhvbWUpCiAgICAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cobywgVmVyc2lvbkNoZWNrZXJIb21lLmNsYXNzKTsKICAgICAgICAgZGVidWcoImdvdCBob21lIiArIGhvbWUpOwotCSAgICBWZXJzaW9uQ2hlY2tlciBjaGVja2VyID0gaG9tZS5jcmVhdGUoKTsKLQkgICAgZGVidWcoImdvdCBvIiArIGNoZWNrZXIpOworICAgICAgICBWZXJzaW9uQ2hlY2tlciBjaGVja2VyID0gaG9tZS5jcmVhdGUoKTsKKyAgICAgICAgZGVidWcoImdvdCBvIiArIGNoZWNrZXIpOwogICAgICAgICAvL3Byb2JsZW0gaGVyZSEKLQlpbnQgcmVzdWx0ID0gY2hlY2tlci5nZXRWZXJzaW9uKCk7Ci0JZGVidWcoImNoZWNrUmVzdWx0IiArIHJlc3VsdCk7CisgICAgaW50IHJlc3VsdCA9IGNoZWNrZXIuZ2V0VmVyc2lvbigpOworICAgIGRlYnVnKCJjaGVja1Jlc3VsdCIgKyByZXN1bHQpOwogICAgICAgICByZXR1cm4gcmVzdWx0ID09IG51bTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL2Rlc2NyaXB0b3IvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IGU5NDA0MmIuLjhlNTQ3YzQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvZGVzY3JpcHRvci9lamItamFyLnhtbApAQCAtMzMsOCArMzMsOCBAQAogICAgICAgPHNlc3Npb24tdHlwZT5TdGF0ZWxlc3M8L3Nlc3Npb24tdHlwZT4KICAgICAgIDx0cmFuc2FjdGlvbi10eXBlPkNvbnRhaW5lcjwvdHJhbnNhY3Rpb24tdHlwZT4KICAgICAgIDxyZXNvdXJjZS1lbnYtcmVmPgotCTxyZXNvdXJjZS1lbnYtcmVmLW5hbWU+ZWlzL3Rlc3RBZG1pbjwvcmVzb3VyY2UtZW52LXJlZi1uYW1lPgotCTxyZXNvdXJjZS1lbnYtcmVmLXR5cGU+Y29tLnN1bi5qZGJjcmEuc3BpLkpkYmNTZXR1cEFkbWluPC9yZXNvdXJjZS1lbnYtcmVmLXR5cGU+CisgICAgPHJlc291cmNlLWVudi1yZWYtbmFtZT5laXMvdGVzdEFkbWluPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+CisgICAgPHJlc291cmNlLWVudi1yZWYtdHlwZT5jb20uc3VuLmpkYmNyYS5zcGkuSmRiY1NldHVwQWRtaW48L3Jlc291cmNlLWVudi1yZWYtdHlwZT4KICAgICAgIDwvcmVzb3VyY2UtZW52LXJlZj4KICAgICAgIDxzZWN1cml0eS1pZGVudGl0eT4KICAgICAgICAgPHVzZS1jYWxsZXItaWRlbnRpdHkvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAppbmRleCBjYzVhM2Y5Li5lMTQ2NzIyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbApAQCAtMjUsNyArMjUsNyBAQAogICAgIDxlamI+CiAgICAgICA8ZWpiLW5hbWU+TXlWZXJzaW9uQ2hlY2tlcjwvZWpiLW5hbWU+CiAgICAgICA8am5kaS1uYW1lPmVqYi9NeVZlcnNpb25DaGVja2VyPC9qbmRpLW5hbWU+Ci08IS0tICAgICAgCis8IS0tCiAgICAgPGlvci1zZWN1cml0eS1jb25maWc+CiAgICAgICAgIDx0cmFuc3BvcnQtY29uZmlnPgogICAgICAgICAgIDxpbnRlZ3JpdHk+c3VwcG9ydGVkPC9pbnRlZ3JpdHk+CkBAIC00MiwxMCArNDIsMTAgQEAKICAgICAgICAgICA8Y2FsbGVyLXByb3BhZ2F0aW9uPnN1cHBvcnRlZDwvY2FsbGVyLXByb3BhZ2F0aW9uPgogICAgICAgICA8L3Nhcy1jb250ZXh0PgogICAgICAgPC9pb3Itc2VjdXJpdHktY29uZmlnPgotLS0+ICAgIAorLS0+CiAgICAgICA8cmVzb3VyY2UtZW52LXJlZj4KICAgICAgICAgPHJlc291cmNlLWVudi1yZWYtbmFtZT5laXMvdGVzdEFkbWluPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+Ci0JPGpuZGktbmFtZT5laXMvdGVzdEFkbWluPC9qbmRpLW5hbWU+CisgICAgPGpuZGktbmFtZT5laXMvdGVzdEFkbWluPC9qbmRpLW5hbWU+CiAgICAgICA8L3Jlc291cmNlLWVudi1yZWY+CiAgICAgICA8Z2VuLWNsYXNzZXMvPgogICAgIDwvZWpiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZWUyZWNhMC4uZmQyMWMzZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNCw3ICsxNCw3IEBACiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogIwogCi0gICAgCisKICMjIyBDb21wb25lbnQgUHJvcGVydGllcyAjIyMKIHNyYy5kaXI9c3JjCiBjb21wb25lbnQucHVibGlzaC5ob21lPS4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL2J1aWxkLnhtbAppbmRleCA3M2U5ODA1Li5hOTg4ZWI4IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvYnVpbGQueG1sCkBAIC0yMyw2MiArMjMsNjIgQEAKIAogPHByb2plY3QgbmFtZT0iSkRCQ0Nvbm5lY3RvciB0b3AgbGV2ZWwiIGRlZmF1bHQ9ImJ1aWxkIj4KICAgICA8cHJvcGVydHkgbmFtZT0icGtnLmRpciIgdmFsdWU9ImNvbS9zdW4vamRiY3JhL3NwaSIvPgotICAgIAorCiAgICAgJmNvbW1vbjsKICAgICAmdGVzdGNvbW1vbjsKICAgICA8cHJvcGVydHkgZmlsZT0iLi9idWlsZC5wcm9wZXJ0aWVzIi8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlLGFzc2VtYmxlIiAvPgotICAgICAgICAgIAorCiAKICAgICA8IS0tIGluaXQuIEluaXRpYWxpemF0aW9uIGludm9sdmVzIGNyZWF0aW5nIHB1Ymxpc2hpbmcgZGlyZWN0b3JpZXMgYW5kCi0gICAgICAgICBPUyBzcGVjaWZpYyB0YXJnZXRzLiAtLT4gCisgICAgICAgICBPUyBzcGVjaWZpYyB0YXJnZXRzLiAtLT4KICAgICA8dGFyZ2V0IG5hbWU9ImluaXQiIGRlc2NyaXB0aW9uPSIke2NvbXBvbmVudC5uYW1lfSBpbml0aWFsaXphdGlvbiI+CiAgICAgICAgIDx0c3RhbXA+CiAgICAgICAgICAgICA8Zm9ybWF0IHByb3BlcnR5PSJzdGFydC50aW1lIiBwYXR0ZXJuPSJNTS9kZC95eXl5IGhoOm1tIGFhIi8+Ci0gICAgICAgIDwvdHN0YW1wPiAgICAKKyAgICAgICAgPC90c3RhbXA+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkJ1aWxkaW5nIGNvbXBvbmVudCAke2NvbXBvbmVudC5uYW1lfSIvPgogICAgICAgICA8bWtkaXIgZGlyPSIke2NvbXBvbmVudC5jbGFzc2VzLmRpcn0iLz4KLSAgICAgICAgPG1rZGlyIGRpcj0iJHtjb21wb25lbnQubGliLmhvbWV9Ii8+ICAgIAorICAgICAgICA8bWtkaXIgZGlyPSIke2NvbXBvbmVudC5saWIuaG9tZX0iLz4KICAgICA8L3RhcmdldD4KLSAgICA8IS0tIGNvbXBpbGUgLS0+IAorICAgIDwhLS0gY29tcGlsZSAtLT4KICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImluaXQiCi0gICAgICAgICAgICBkZXNjcmlwdGlvbj0iQ29tcGlsZSBjb20vc3VuLyogY29tL2lwbGFuZXQvKiBzb3VyY2VzIj4gIAorICAgICAgICAgICAgZGVzY3JpcHRpb249IkNvbXBpbGUgY29tL3N1bi8qIGNvbS9pcGxhbmV0Lyogc291cmNlcyI+CiAgICAgICAgIDwhLS08ZWNobyBtZXNzYWdlPSJDb25uZWN0b3IgYXBpIHJlc2lkZXMgaW4gJHtjb25uZWN0b3ItYXBpLmphcn0iLz4tLT4KLSAgICAgICAgPGphdmFjIHNyY2Rpcj0iJHtzcmMuZGlyfSIgCisgICAgICAgIDxqYXZhYyBzcmNkaXI9IiR7c3JjLmRpcn0iCiAgICAgICAgICAgICAgICBkZXN0ZGlyPSIke2NvbXBvbmVudC5jbGFzc2VzLmRpcn0iCi0JICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIj4KLQkgICAgICAgPGNsYXNzcGF0aD4KLQkgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuUzFBU19IT01FfS9tb2R1bGVzIj4KLQkgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKiovKi5qYXIiIC8+Ci0JICAgICAgICAgICA8L2ZpbGVzZXQ+Ci0JICAgICAgIDwvY2xhc3NwYXRoPgorICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSI+CisgICAgICAgICAgIDxjbGFzc3BhdGg+CisgICAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LlMxQVNfSE9NRX0vbW9kdWxlcyI+CisgICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqLyouamFyIiAvPgorICAgICAgICAgICAgICAgPC9maWxlc2V0PgorICAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9ImNvbS9zdW4vamRiY3JhLyoqIi8+CiAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJjb20vc3VuL2FwcHNlcnYvKioiLz4KICAgICAgICAgPC9qYXZhYz4KICAgICA8L3RhcmdldD4KLSAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQiLz4KIAotICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZSI+ICAgIAotICAgIAkKLQk8amFyIGphcmZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9qZGJjLmphciIgCi0gICAgICAgICAgICBiYXNlZGlyPSIke2NvbXBvbmVudC5jbGFzc2VzLmRpcn0iIGluY2x1ZGVzPSIke3BrZy5kaXJ9LyoqLyosIAotICAgICAgICAgICAgY29tL3N1bi9hcHBzZXJ2LyoqLyosIGNvbS9zdW4vamRiY3JhL3V0aWwvKiovKiwgY29tL3N1bi9qZGJjcmEvY29tbW9uLyoqLyoiLz4gCi0gICAJCi0gICAgICAgIDxjb3B5IGZpbGU9IiR7c3JjLmRpcn0vY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9yYS1kcy54bWwiIAotICAgICAgICAgICAgICAgIHRvZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgkKKyAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUiPgorCisgICAgPGphciBqYXJmaWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vamRiYy5qYXIiCisgICAgICAgICAgICBiYXNlZGlyPSIke2NvbXBvbmVudC5jbGFzc2VzLmRpcn0iIGluY2x1ZGVzPSIke3BrZy5kaXJ9LyoqLyosCisgICAgICAgICAgICBjb20vc3VuL2FwcHNlcnYvKiovKiwgY29tL3N1bi9qZGJjcmEvdXRpbC8qKi8qLCBjb20vc3VuL2pkYmNyYS9jb21tb24vKiovKiIvPgorCisgICAgICAgIDxjb3B5IGZpbGU9IiR7c3JjLmRpcn0vY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9yYS1kcy54bWwiCisgICAgICAgICAgICAgICAgdG9maWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CiAgICAgICAgIDwvY29weT4KLSAgIAk8amFyIGphcmZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS90ZXN0amRiY3JhLnJhciIgCi0JCWJhc2VkaXI9IiR7Y29tcG9uZW50LmxpYi5ob21lfSIgaW5jbHVkZXM9ImpkYmMuamFyIj4KKyAgICAgICA8amFyIGphcmZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS90ZXN0amRiY3JhLnJhciIKKyAgICAgICAgYmFzZWRpcj0iJHtjb21wb25lbnQubGliLmhvbWV9IiBpbmNsdWRlcz0iamRiYy5qYXIiPgogCi0gICAJCTxtZXRhaW5mIGRpcj0iJHtjb21wb25lbnQubGliLmhvbWV9Ij4KLSAgIAkJCTxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgotICAgCQk8L21ldGFpbmY+Ci0gICAJPC9qYXI+CisgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iJHtjb21wb25lbnQubGliLmhvbWV9Ij4KKyAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgorICAgICAgICAgICA8L21ldGFpbmY+CisgICAgICAgPC9qYXI+CiAKLSAgIAk8ZGVsZXRlIGZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9yYS54bWwiLz4KLQkKKyAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9yYS54bWwiLz4KKwogICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlc2NyaXB0aW9uPSJDbGVhbiB0aGUgYnVpbGQiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vYXBwc2Vydi9qZGJjcmEvRGF0YVNvdXJjZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vYXBwc2Vydi9qZGJjcmEvRGF0YVNvdXJjZS5qYXZhCmluZGV4IDlmODM5OWEuLmI2ZWYzMGIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2FwcHNlcnYvamRiY3JhL0RhdGFTb3VyY2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9hcHBzZXJ2L2pkYmNyYS9EYXRhU291cmNlLmphdmEKQEAgLTIwLDE1ICsyMCwxNSBAQAogaW1wb3J0IGphdmEuc3FsLlNRTEV4Y2VwdGlvbjsKIAogLyoqCi0gKiBUaGUgPGNvZGU+amF2YXguc3FsLkRhdGFTb3VyY2U8L2NvZGU+IGltcGxlbWVudGF0aW9uIG9mIFN1bk9ORSBhcHBsaWNhdGlvbiAKKyAqIFRoZSA8Y29kZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29kZT4gaW1wbGVtZW50YXRpb24gb2YgU3VuT05FIGFwcGxpY2F0aW9uCiAgKiBzZXJ2ZXIgd2lsbCBpbXBsZW1lbnQgdGhpcyBpbnRlcmZhY2UuIEFuIGFwcGxpY2F0aW9uIHByb2dyYW0gd291bGQgYmUgYWJsZQotICogdG8gdXNlIHRoaXMgaW50ZXJmYWNlIHRvIGRvIHRoZSBleHRlbmRlZCBmdW5jdGlvbmFsaXR5IGV4cG9zZWQgYnkgU3VuT05FIAorICogdG8gdXNlIHRoaXMgaW50ZXJmYWNlIHRvIGRvIHRoZSBleHRlbmRlZCBmdW5jdGlvbmFsaXR5IGV4cG9zZWQgYnkgU3VuT05FCiAgKiBhcHBsaWNhdGlvbiBzZXJ2ZXIuCi0gKiA8cD5BIHNhbXBsZSBjb2RlIGZvciBnZXR0aW5nIGRyaXZlcidzIGNvbm5lY3Rpb24gaW1wbGVtZW50YXRpb24gd291bGQgbGlrZSAKKyAqIDxwPkEgc2FtcGxlIGNvZGUgZm9yIGdldHRpbmcgZHJpdmVyJ3MgY29ubmVjdGlvbiBpbXBsZW1lbnRhdGlvbiB3b3VsZCBsaWtlCiAgKiB0aGUgZm9sbG93aW5nLgogICogPHByZT4KICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgY29tLnN1bi5hcHBzZXJ2LkRhdGFTb3VyY2UgZHMgPSAoY29tLnN1bi5hcHBzZXJ2LkRhdGFTT3VyY2UpIGljLmxvb2t1cCgiamRiYy9Qb2ludEJhc2UiKTsgCisgICAgIGNvbS5zdW4uYXBwc2Vydi5EYXRhU291cmNlIGRzID0gKGNvbS5zdW4uYXBwc2Vydi5EYXRhU091cmNlKSBpYy5sb29rdXAoImpkYmMvUG9pbnRCYXNlIik7CiAgICAgIENvbm5lY3Rpb24gY29uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwogICAgICBDb25uZWN0aW9uIGRyaXZlcmNvbiA9IGRzLmdldENvbm5lY3Rpb24oY29uKTsKIApAQCAtMzYsMTMgKzM2LDEzIEBACiAKICAgICAgY29uLmNsb3NlKCk7CiAgICA8L3ByZT4KLSAqIAorICoKICAqIEBhdXRob3IgQmlub2QgUC5HCiAgKi8KIHB1YmxpYyBpbnRlcmZhY2UgRGF0YVNvdXJjZSBleHRlbmRzIGphdmF4LnNxbC5EYXRhU291cmNlIHsKIAogICAgIC8qKgotICAgICAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIFNRTENvbm5lY3Rpb24gZnJvbSB0aGUgQ29ubmVjdGlvbiB3cmFwcGVyIAorICAgICAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIFNRTENvbm5lY3Rpb24gZnJvbSB0aGUgQ29ubmVjdGlvbiB3cmFwcGVyCiAgICAgICogaW1wbGVtZW50YXRpb24gb2YgU3VuT05FIGFwcGxpY2F0aW9uIHNlcnZlci4gSWYgYW4gYWN0dWFsIGNvbm5lY3Rpb24gaXMKICAgICAgKiBzdXBwbGllZCBhcyBhcmd1bWVudCwgdGhlbiBpdCB3aWxsIGJlIGp1c3QgcmV0dXJuZWQuCiAgICAgICoKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIuamF2YQppbmRleCBjMjgyMmUyLi42YTM2NmIwIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VPYmplY3RCdWlsZGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlT2JqZWN0QnVpbGRlci5qYXZhCkBAIC0yNywyMiArMjcsMjIgQEAKIGltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7CiBpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7CiAvKioKLSAqIFV0aWxpdHkgY2xhc3MsIHdoaWNoIHdvdWxkIGNyZWF0ZSBuZWNlc3NhcnkgRGF0YXNvdXJjZSBvYmplY3QgYWNjb3JkaW5nIHRvIHRoZSAKKyAqIFV0aWxpdHkgY2xhc3MsIHdoaWNoIHdvdWxkIGNyZWF0ZSBuZWNlc3NhcnkgRGF0YXNvdXJjZSBvYmplY3QgYWNjb3JkaW5nIHRvIHRoZQogICogc3BlY2lmaWNhdGlvbi4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzIzCi0gKiBAYXV0aG9yCUJpbm9kIFAuRwotICogQHNlZQkJY29tLnN1bi5qZGJjcmEuY29tbW9uLkRhdGFTb3VyY2VTcGVjCi0gKiBAc2VlCQljb20uc3VuLmpkYmNyYS51dGlsLk1ldGhvZEV4Y2VjdXRvcgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8yMworICogQGF1dGhvciAgICBCaW5vZCBQLkcKKyAqIEBzZWUgICAgICAgIGNvbS5zdW4uamRiY3JhLmNvbW1vbi5EYXRhU291cmNlU3BlYworICogQHNlZSAgICAgICAgY29tLnN1bi5qZGJjcmEudXRpbC5NZXRob2RFeGNlY3V0b3IKICAqLwogcHVibGljIGNsYXNzIERhdGFTb3VyY2VPYmplY3RCdWlsZGVyIGltcGxlbWVudHMgamF2YS5pby5TZXJpYWxpemFibGV7CiAKICAgICBwcml2YXRlIERhdGFTb3VyY2VTcGVjIHNwZWM7Ci0gICAgCisKICAgICBwcml2YXRlIEhhc2h0YWJsZSBkcml2ZXJQcm9wZXJ0aWVzID0gbnVsbDsKLSAgICAKLSAgICBwcml2YXRlIE1ldGhvZEV4ZWN1dG9yIGV4ZWN1dG9yID0gbnVsbDsgICAgCi0gICAgCisKKyAgICBwcml2YXRlIE1ldGhvZEV4ZWN1dG9yIGV4ZWN1dG9yID0gbnVsbDsKKwogICAgIHByaXZhdGUgc3RhdGljIExvZ2dlciBfbG9nZ2VyOwogICAgIHN0YXRpYyB7CiAgICAgICAgIF9sb2dnZXIgPSBMb2dnZXIuZ2V0QW5vbnltb3VzTG9nZ2VyKCk7CkBAIC01MCwxNjcgKzUwLDE2NyBAQAogICAgIHByaXZhdGUgYm9vbGVhbiBkZWJ1ZyA9IGZhbHNlOwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdCBhIERhdGFTb3VyY2UgT2JqZWN0IGZyb20gdGhlIHNwZWMuCi0gICAgICogCi0gICAgICogQHBhcmFtCXNwZWMJPGNvZGU+IERhdGFTb3VyY2VTcGVjIDwvY29kZT4gb2JqZWN0LgorICAgICAqCisgICAgICogQHBhcmFtICAgIHNwZWMgICAgPGNvZGU+IERhdGFTb3VyY2VTcGVjIDwvY29kZT4gb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyBEYXRhU291cmNlT2JqZWN0QnVpbGRlcihEYXRhU291cmNlU3BlYyBzcGVjKSB7Ci0gICAgCXRoaXMuc3BlYyA9IHNwZWM7Ci0gICAgCWV4ZWN1dG9yID0gbmV3IE1ldGhvZEV4ZWN1dG9yKCk7CisgICAgICAgIHRoaXMuc3BlYyA9IHNwZWM7CisgICAgICAgIGV4ZWN1dG9yID0gbmV3IE1ldGhvZEV4ZWN1dG9yKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0IHRoZSBEYXRhU291cmNlIE9iamVjdCBmcm9tIHRoZSBzcGVjLgogICAgICAqCi0gICAgICogQHJldHVybglPYmplY3QgY29uc3RydWN0ZWQgdXNpbmcgdGhlIERhdGFTb3VyY2VTcGVjLgotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+IGlmIHRoZSBjbGFzcyBpcyBub3QgZm91bmQgb3Igc29tZSBpc3N1ZSBpbiBleGVjdXRpbmcKLSAgICAgKgkJc29tZSBtZXRob2QuCisgICAgICogQHJldHVybiAgICBPYmplY3QgY29uc3RydWN0ZWQgdXNpbmcgdGhlIERhdGFTb3VyY2VTcGVjLgorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+IGlmIHRoZSBjbGFzcyBpcyBub3QgZm91bmQgb3Igc29tZSBpc3N1ZSBpbiBleGVjdXRpbmcKKyAgICAgKiAgICAgICAgc29tZSBtZXRob2QuCiAgICAgICovCiAgICAgcHVibGljIE9iamVjdCBjb25zdHJ1Y3REYXRhU291cmNlT2JqZWN0KCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewotICAgIAlkcml2ZXJQcm9wZXJ0aWVzID0gcGFyc2VEcml2ZXJQcm9wZXJ0aWVzKHNwZWMpOworICAgICAgICBkcml2ZXJQcm9wZXJ0aWVzID0gcGFyc2VEcml2ZXJQcm9wZXJ0aWVzKHNwZWMpOwogICAgICAgICBPYmplY3QgZGF0YVNvdXJjZU9iamVjdCA9IGdldERhdGFTb3VyY2VPYmplY3QoKTsKICAgICAgICAgTWV0aG9kW10gbWV0aG9kcyA9IGRhdGFTb3VyY2VPYmplY3QuZ2V0Q2xhc3MoKS5nZXRNZXRob2RzKCk7CiAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IG1ldGhvZHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgIFN0cmluZyBtZXRob2ROYW1lID0gbWV0aG9kc1tpXS5nZXROYW1lKCk7Ci0JICAgIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFVzZXIiKSl7CSAgICAJCi0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5VU0VSTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0UGFzc3dvcmQiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QQVNTV09SRCksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TG9naW5UaW1lT3V0IikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HSU5USU1FT1VUKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRMb2dXcml0ZXIiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dXUklURVIpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldERhdGFiYXNlTmFtZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFCQVNFTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0RGF0YVNvdXJjZU5hbWUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBU09VUkNFTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAkKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0RGVzY3JpcHRpb24iKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERVNDUklQVElPTiksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE5ldHdvcmtQcm90b2NvbCIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk5FVFdPUktQUk9UT0NPTCksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0UG9ydE51bWJlciIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFJvbGVOYW1lIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUk9MRU5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAJCSAgICAJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFNlcnZlck5hbWUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5TRVJWRVJOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1heFN0YXRlbWVudHMiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NQVhTVEFURU1FTlRTKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRJbml0aWFsUG9vbFNpemUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5JTklUSUFMUE9PTFNJWkUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1pblBvb2xTaXplIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUlOUE9PTFNJWkUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1heFBvb2xTaXplIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUFYUE9PTFNJWkUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1heElkbGVUaW1lIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUFYSURMRVRJTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFByb3BlcnR5Q3ljbGUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QUk9QRVJUWUNZQ0xFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAoZHJpdmVyUHJvcGVydGllcy5jb250YWluc0tleShtZXRob2ROYW1lLnRvVXBwZXJDYXNlKCkpKXsKLQkgICAgCVZlY3RvciB2YWx1ZXMgPSAoVmVjdG9yKSBkcml2ZXJQcm9wZXJ0aWVzLmdldChtZXRob2ROYW1lLnRvVXBwZXJDYXNlKCkpOwotCSAgICAgICAgZXhlY3V0b3IucnVuTWV0aG9kKG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCwgdmFsdWVzKTsKLQkgICAgfQorICAgICAgICBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRVc2VyIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVVNFUk5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFBhc3N3b3JkIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUEFTU1dPUkQpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldExvZ2luVGltZU91dCIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR0lOVElNRU9VVCksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TG9nV3JpdGVyIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HV1JJVEVSKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXREYXRhYmFzZU5hbWUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBQkFTRU5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldERhdGFTb3VyY2VOYW1lIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQVNPVVJDRU5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldERlc2NyaXB0aW9uIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVTQ1JJUFRJT04pLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE5ldHdvcmtQcm90b2NvbCIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk5FVFdPUktQUk9UT0NPTCksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0UG9ydE51bWJlciIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFJvbGVOYW1lIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUk9MRU5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFNlcnZlck5hbWUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5TRVJWRVJOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNYXhTdGF0ZW1lbnRzIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUFYU1RBVEVNRU5UUyksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0SW5pdGlhbFBvb2xTaXplIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuSU5JVElBTFBPT0xTSVpFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNaW5Qb29sU2l6ZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1JTlBPT0xTSVpFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNYXhQb29sU2l6ZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1BWFBPT0xTSVpFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNYXhJZGxlVGltZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1BWElETEVUSU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRQcm9wZXJ0eUN5Y2xlIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUFJPUEVSVFlDWUNMRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKGRyaXZlclByb3BlcnRpZXMuY29udGFpbnNLZXkobWV0aG9kTmFtZS50b1VwcGVyQ2FzZSgpKSl7CisgICAgICAgICAgICBWZWN0b3IgdmFsdWVzID0gKFZlY3RvcikgZHJpdmVyUHJvcGVydGllcy5nZXQobWV0aG9kTmFtZS50b1VwcGVyQ2FzZSgpKTsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bk1ldGhvZChtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QsIHZhbHVlcyk7CisgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gZGF0YVNvdXJjZU9iamVjdDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXQgdGhlIGV4dHJhIGRyaXZlciBwcm9wZXJ0aWVzIGZyb20gdGhlIERhdGFTb3VyY2VTcGVjIG9iamVjdCBhbmQKICAgICAgKiBwYXJzZSB0aGVtIHRvIGEgc2V0IG9mIG1ldGhvZE5hbWUgYW5kIHBhcmFtZXRlcnMuIFByZXBhcmUgYSBoYXNodGFibGUKICAgICAgKiBjb250YWluaW5nIHRoZXNlIGRldGFpbHMgYW5kIHJldHVybi4KICAgICAgKgotICAgICAqIEBwYXJhbQlzcGVjCTxjb2RlPiBEYXRhU291cmNlU3BlYyA8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAcmV0dXJuCUhhc2h0YWJsZSBjb250YWluaW5nIG1ldGhvZCBuYW1lcyBhbmQgcGFyYW1ldGVycywKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCUlmIGRlbGltaXRlciBpcyBub3QgcHJvdmlkZWQgYW5kIHByb3BlcnR5IHN0cmluZwotICAgICAqCQkJCQlpcyBub3QgbnVsbC4KKyAgICAgKiBAcGFyYW0gICAgc3BlYyAgICA8Y29kZT4gRGF0YVNvdXJjZVNwZWMgPC9jb2RlPiBvYmplY3QuCisgICAgICogQHJldHVybiAgICBIYXNodGFibGUgY29udGFpbmluZyBtZXRob2QgbmFtZXMgYW5kIHBhcmFtZXRlcnMsCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBJZiBkZWxpbWl0ZXIgaXMgbm90IHByb3ZpZGVkIGFuZCBwcm9wZXJ0eSBzdHJpbmcKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgaXMgbm90IG51bGwuCiAgICAgICovCiAgICAgcHJpdmF0ZSBIYXNodGFibGUgcGFyc2VEcml2ZXJQcm9wZXJ0aWVzKERhdGFTb3VyY2VTcGVjIHNwZWMpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKLSAgICAJU3RyaW5nIGRlbGltID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVMSU1JVEVSKTsKKyAgICAgICAgU3RyaW5nIGRlbGltID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVMSU1JVEVSKTsKIAogICAgICAgICBTdHJpbmcgcHJvcCA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRSSVZFUlBST1BFUlRJRVMpOwotCWlmICggcHJvcCA9PSBudWxsIHx8IHByb3AudHJpbSgpLmVxdWFscygiIikpIHsKLQkgICAgcmV0dXJuIG5ldyBIYXNodGFibGUoKTsKLQl9IGVsc2UgaWYgKGRlbGltID09IG51bGwgfHwgZGVsaW0uZXF1YWxzKCIiKSkgewotCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24gKCJEZWxpbWl0ZXIgaXMgbm90IHByb3ZpZGVkIGluIHRoZSBjb25maWd1cmF0aW9uIik7Ci0JfQotCQotCUhhc2h0YWJsZSBwcm9wZXJ0aWVzID0gbmV3IEhhc2h0YWJsZSgpOwotCWRlbGltID0gZGVsaW0udHJpbSgpOwkKLQlTdHJpbmcgc2VwID0gZGVsaW0rZGVsaW07Ci0JaW50IHNlcExlbiA9IHNlcC5sZW5ndGgoKTsKLQlTdHJpbmcgY2FjaGUgPSBwcm9wOwotCVZlY3RvciBtZXRob2RzID0gbmV3IFZlY3RvcigpOwotCQotCXdoaWxlIChjYWNoZS5pbmRleE9mKHNlcCkgIT0gLTEpIHsKLQkgICAgaW50IGluZGV4ID0gY2FjaGUuaW5kZXhPZihzZXApOwotCSAgICBTdHJpbmcgbmFtZSA9IGNhY2hlLnN1YnN0cmluZygwLGluZGV4KTsKLQkgICAgaWYgKG5hbWUudHJpbSgpICE9ICIiKSB7Ci0JICAgICAgICBtZXRob2RzLmFkZChuYW1lKTsKLQkgICAgCWNhY2hlID0gY2FjaGUuc3Vic3RyaW5nKGluZGV4K3NlcExlbik7Ci0JICAgIH0KLQl9Ci0JCi0gICAgCUVudW1lcmF0aW9uIGFsbE1ldGhvZHMgPSBtZXRob2RzLmVsZW1lbnRzKCk7Ci0gICAgCXdoaWxlIChhbGxNZXRob2RzLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgCSAgICBTdHJpbmcgb25lTWV0aG9kID0gKFN0cmluZykgYWxsTWV0aG9kcy5uZXh0RWxlbWVudCgpOyAgICAJICAgIAotICAgIAkgICAgaWYgKCFvbmVNZXRob2QudHJpbSgpLmVxdWFscygiIikpIHsKLSAgICAJICAgIAlTdHJpbmcgbWV0aG9kTmFtZSA9IG51bGw7Ci0gICAgCSAgICAJVmVjdG9yIHBhcm1zID0gbmV3IFZlY3RvcigpOwotICAgIAkgICAgCVN0cmluZ1Rva2VuaXplciBtZXRob2REZXRhaWxzID0gbmV3IFN0cmluZ1Rva2VuaXplcihvbmVNZXRob2QsZGVsaW0pOwotCQlmb3IgKGludCBpPTA7IG1ldGhvZERldGFpbHMuaGFzTW9yZVRva2VucygpO2krKyApIHsKLQkJICAgIFN0cmluZyB0b2tlbiA9IChTdHJpbmcpIG1ldGhvZERldGFpbHMubmV4dFRva2VuKCk7Ci0JCSAgICBpZiAoaT09MCkgewotCQkgICAgCW1ldGhvZE5hbWUgPSB0b2tlbi50b1VwcGVyQ2FzZSgpOwotCQkgICAgfSBlbHNlIHsKLQkJICAgIAlwYXJtcy5hZGQodG9rZW4pOwkJICAgIAkKLQkJICAgIH0KLQkJfQotCQlwcm9wZXJ0aWVzLnB1dChtZXRob2ROYW1lLHBhcm1zKTsKLSAgICAJICAgIH0gICAgCSAgICAKLSAgICAJfQotICAgIAlyZXR1cm4gcHJvcGVydGllczsKKyAgICBpZiAoIHByb3AgPT0gbnVsbCB8fCBwcm9wLnRyaW0oKS5lcXVhbHMoIiIpKSB7CisgICAgICAgIHJldHVybiBuZXcgSGFzaHRhYmxlKCk7CisgICAgfSBlbHNlIGlmIChkZWxpbSA9PSBudWxsIHx8IGRlbGltLmVxdWFscygiIikpIHsKKyAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uICgiRGVsaW1pdGVyIGlzIG5vdCBwcm92aWRlZCBpbiB0aGUgY29uZmlndXJhdGlvbiIpOwogICAgIH0KLSAgICAKKworICAgIEhhc2h0YWJsZSBwcm9wZXJ0aWVzID0gbmV3IEhhc2h0YWJsZSgpOworICAgIGRlbGltID0gZGVsaW0udHJpbSgpOworICAgIFN0cmluZyBzZXAgPSBkZWxpbStkZWxpbTsKKyAgICBpbnQgc2VwTGVuID0gc2VwLmxlbmd0aCgpOworICAgIFN0cmluZyBjYWNoZSA9IHByb3A7CisgICAgVmVjdG9yIG1ldGhvZHMgPSBuZXcgVmVjdG9yKCk7CisKKyAgICB3aGlsZSAoY2FjaGUuaW5kZXhPZihzZXApICE9IC0xKSB7CisgICAgICAgIGludCBpbmRleCA9IGNhY2hlLmluZGV4T2Yoc2VwKTsKKyAgICAgICAgU3RyaW5nIG5hbWUgPSBjYWNoZS5zdWJzdHJpbmcoMCxpbmRleCk7CisgICAgICAgIGlmIChuYW1lLnRyaW0oKSAhPSAiIikgeworICAgICAgICAgICAgbWV0aG9kcy5hZGQobmFtZSk7CisgICAgICAgICAgICBjYWNoZSA9IGNhY2hlLnN1YnN0cmluZyhpbmRleCtzZXBMZW4pOworICAgICAgICB9CisgICAgfQorCisgICAgICAgIEVudW1lcmF0aW9uIGFsbE1ldGhvZHMgPSBtZXRob2RzLmVsZW1lbnRzKCk7CisgICAgICAgIHdoaWxlIChhbGxNZXRob2RzLmhhc01vcmVFbGVtZW50cygpKSB7CisgICAgICAgICAgICBTdHJpbmcgb25lTWV0aG9kID0gKFN0cmluZykgYWxsTWV0aG9kcy5uZXh0RWxlbWVudCgpOworICAgICAgICAgICAgaWYgKCFvbmVNZXRob2QudHJpbSgpLmVxdWFscygiIikpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgbWV0aG9kTmFtZSA9IG51bGw7CisgICAgICAgICAgICAgICAgVmVjdG9yIHBhcm1zID0gbmV3IFZlY3RvcigpOworICAgICAgICAgICAgICAgIFN0cmluZ1Rva2VuaXplciBtZXRob2REZXRhaWxzID0gbmV3IFN0cmluZ1Rva2VuaXplcihvbmVNZXRob2QsZGVsaW0pOworICAgICAgICBmb3IgKGludCBpPTA7IG1ldGhvZERldGFpbHMuaGFzTW9yZVRva2VucygpO2krKyApIHsKKyAgICAgICAgICAgIFN0cmluZyB0b2tlbiA9IChTdHJpbmcpIG1ldGhvZERldGFpbHMubmV4dFRva2VuKCk7CisgICAgICAgICAgICBpZiAoaT09MCkgeworICAgICAgICAgICAgICAgIG1ldGhvZE5hbWUgPSB0b2tlbi50b1VwcGVyQ2FzZSgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwYXJtcy5hZGQodG9rZW4pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHByb3BlcnRpZXMucHV0KG1ldGhvZE5hbWUscGFybXMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBwcm9wZXJ0aWVzOworICAgIH0KKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBEYXRhc291cmNlIG9iamVjdCBhY2NvcmRpbmcgdG8gdGhlIHNwZWMuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCUluaXRpYWwgRGF0YVNvdXJjZSBPYmplY3QgaW5zdGFuY2UuCi0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4gSWYgY2xhc3MgbmFtZSBpcyB3cm9uZyBvciBjbGFzc3BhdGggaXMgbm90IHNldAotICAgICAqCQlwcm9wZXJseS4KKyAgICAgKiBAcmV0dXJuICAgIEluaXRpYWwgRGF0YVNvdXJjZSBPYmplY3QgaW5zdGFuY2UuCisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4gSWYgY2xhc3MgbmFtZSBpcyB3cm9uZyBvciBjbGFzc3BhdGggaXMgbm90IHNldAorICAgICAqICAgICAgICBwcm9wZXJseS4KICAgICAgKi8KICAgICBwcml2YXRlIE9iamVjdCBnZXREYXRhU291cmNlT2JqZWN0KCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewotICAgIAlTdHJpbmcgY2xhc3NOYW1lID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ0xBU1NOQU1FKTsKLSAgICAgICAgdHJ5IHsgICAgICAgICAgICAKKyAgICAgICAgU3RyaW5nIGNsYXNzTmFtZSA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNMQVNTTkFNRSk7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDbGFzcyBkYXRhU291cmNlQ2xhc3MgPSBDbGFzcy5mb3JOYW1lKGNsYXNzTmFtZSk7CiAgICAgICAgICAgICBPYmplY3QgZGF0YVNvdXJjZU9iamVjdCA9IGRhdGFTb3VyY2VDbGFzcy5uZXdJbnN0YW5jZSgpOwogICAgICAgICAgICAgcmV0dXJuIGRhdGFTb3VyY2VPYmplY3Q7CiAgICAgICAgIH0gY2F0Y2goQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBjZm5lKXsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfY25mZV9kcyIsIGNmbmUpOwotCQorICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19jbmZlX2RzIiwgY2ZuZSk7CisKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQ2xhc3MgTmFtZSBpcyB3cm9uZyBvciBDbGFzcyBwYXRoIGlzIG5vdCBzZXQgZm9yIDoiICsgY2xhc3NOYW1lKTsKICAgICAgICAgfSBjYXRjaChJbnN0YW50aWF0aW9uRXhjZXB0aW9uIGNlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2luc3QiLCBjbGFzc05hbWUpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19pbnN0IiwgY2xhc3NOYW1lKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiRXJyb3IgaW4gaW5zdGFudGlhdGluZyIgKyBjbGFzc05hbWUpOwogICAgICAgICB9IGNhdGNoKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gY2UpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfYWNjX2luc3QiLCBjbGFzc05hbWUpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19hY2NfaW5zdCIsIGNsYXNzTmFtZSk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBFcnJvciBpbiBpbnN0YW50aWF0aW5nIiArIGNsYXNzTmFtZSk7CiAgICAgICAgIH0KICAgICB9Ci0gIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VTcGVjLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VTcGVjLmphdmEKaW5kZXggZWY2YzRjOS4uM2RjMTU0ZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlU3BlYy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZVNwZWMuamF2YQpAQCAtMTksOTIgKzE5LDkyIEBACiBpbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKIAogLyoqCi0gKiBFbmNhcHN1bGF0ZSB0aGUgRGF0YVNvdXJjZSBvYmplY3QgZGV0YWlscyBvYnRhaW5lZCBmcm9tIAorICogRW5jYXBzdWxhdGUgdGhlIERhdGFTb3VyY2Ugb2JqZWN0IGRldGFpbHMgb2J0YWluZWQgZnJvbQogICogTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMjMKLSAqIEBhdXRob3IJQmlub2QgUC5HCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzIzCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRwogICovCiBwdWJsaWMgY2xhc3MgRGF0YVNvdXJjZVNwZWMgaW1wbGVtZW50cyBqYXZhLmlvLlNlcmlhbGl6YWJsZXsKIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVTRVJOQU1FCQkJCT0gMTsgICAgCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUEFTU1dPUkQJCQkJPSAyOyAgCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVVJMCQkJCQk9IDM7ICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMT0dJTlRJTUVPVVQJCQk9IDQ7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTE9HV1JJVEVSCQkJCT0gNTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQVRBQkFTRU5BTUUJCQk9IDY7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREFUQVNPVVJDRU5BTUUJCQk9IDc7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVTQ1JJUFRJT04JCQkJPSA4OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5FVFdPUktQUk9UT0NPTAkJCT0gOTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQT1JUTlVNQkVSCQkJCT0gMTA7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUk9MRU5BTUUJCQkJPSAxMTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTRVJWRVJOQU1FCQkJCT0gMTI7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYU1RBVEVNRU5UUwkJCT0gMTM7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5JVElBTFBPT0xTSVpFCQkJPSAxNDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNSU5QT09MU0laRQkJCQk9IDE1OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWFBPT0xTSVpFCQkJCT0gMTY7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYSURMRVRJTUUJCQkJPSAxNzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQUk9QRVJUWUNZQ0xFCQkJPSAxODsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEUklWRVJQUk9QRVJUSUVTCQkJPSAxOTsgICAgCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0xBU1NOQU1FCQkJCT0gMjA7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVMSU1JVEVSCQkJCT0gMjE7Ci0gICAgCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgWEFEQVRBU09VUkNFCQkJPSAyMjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQVRBU09VUkNFCQkJCT0gMjM7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OTkVDVElPTlBPT0xEQVRBU09VUkNFCQk9IDI0OwotICAgICAgCi0gICAgLy9HSkNJTlQgICAgICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVECT0gMjU7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVkFMSURBVElPTk1FVEhPRAkJCT0gMjY7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVkFMSURBVElPTlRBQkxFTkFNRQkJCT0gMjc7Ci0gICAgCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVFJBTlNBQ1RJT05JU09MQVRJT04JCT0gMjg7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwJCT0gMjk7Ci0gICAgICAgICAgICAKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVU0VSTkFNRSAgICAgICAgICAgICAgICA9IDE7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUEFTU1dPUkQgICAgICAgICAgICAgICAgPSAyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVSTCAgICAgICAgICAgICAgICAgICAgPSAzOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExPR0lOVElNRU9VVCAgICAgICAgICAgID0gNDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMT0dXUklURVIgICAgICAgICAgICAgICAgPSA1OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFCQVNFTkFNRSAgICAgICAgICAgID0gNjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQVRBU09VUkNFTkFNRSAgICAgICAgICAgID0gNzsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERVNDUklQVElPTiAgICAgICAgICAgICAgICA9IDg7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTkVUV09SS1BST1RPQ09MICAgICAgICAgICAgPSA5OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBPUlROVU1CRVIgICAgICAgICAgICAgICAgPSAxMDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBST0xFTkFNRSAgICAgICAgICAgICAgICA9IDExOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNFUlZFUk5BTUUgICAgICAgICAgICAgICAgPSAxMjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhTVEFURU1FTlRTICAgICAgICAgICAgPSAxMzsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTklUSUFMUE9PTFNJWkUgICAgICAgICAgICA9IDE0OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1JTlBPT0xTSVpFICAgICAgICAgICAgICAgID0gMTU7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYUE9PTFNJWkUgICAgICAgICAgICAgICAgPSAxNjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhJRExFVElNRSAgICAgICAgICAgICAgICA9IDE3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBST1BFUlRZQ1lDTEUgICAgICAgICAgICA9IDE4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERSSVZFUlBST1BFUlRJRVMgICAgICAgICAgICA9IDE5OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENMQVNTTkFNRSAgICAgICAgICAgICAgICA9IDIwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFTElNSVRFUiAgICAgICAgICAgICAgICA9IDIxOworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgWEFEQVRBU09VUkNFICAgICAgICAgICAgPSAyMjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQVRBU09VUkNFICAgICAgICAgICAgICAgID0gMjM7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OTkVDVElPTlBPT0xEQVRBU09VUkNFICAgICAgICA9IDI0OworCisgICAgLy9HSkNJTlQKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVEICAgID0gMjU7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVkFMSURBVElPTk1FVEhPRCAgICAgICAgICAgID0gMjY7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVkFMSURBVElPTlRBQkxFTkFNRSAgICAgICAgICAgID0gMjc7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUUkFOU0FDVElPTklTT0xBVElPTiAgICAgICAgPSAyODsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHVUFSQU5URUVJU09MQVRJT05MRVZFTCAgICAgICAgPSAyOTsKKwogICAgIHByaXZhdGUgSGFzaHRhYmxlIGRldGFpbHMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIHByb3BlcnR5LgogICAgICAqCi0gICAgICogQHBhcmFtCXByb3BlcnR5CVByb3BlcnR5IE5hbWUgdG8gYmUgc2V0LgotICAgICAqIEBwYXJhbQl2YWx1ZQkJVmFsdWUgb2YgcHJvcGVydHkgdG8gYmUgc2V0LgorICAgICAqIEBwYXJhbSAgICBwcm9wZXJ0eSAgICBQcm9wZXJ0eSBOYW1lIHRvIGJlIHNldC4KKyAgICAgKiBAcGFyYW0gICAgdmFsdWUgICAgICAgIFZhbHVlIG9mIHByb3BlcnR5IHRvIGJlIHNldC4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXREZXRhaWwoaW50IHByb3BlcnR5LCBTdHJpbmcgdmFsdWUpIHsKLSAgICAJZGV0YWlscy5wdXQobmV3IEludGVnZXIocHJvcGVydHkpLHZhbHVlKTsKKyAgICAgICAgZGV0YWlscy5wdXQobmV3IEludGVnZXIocHJvcGVydHkpLHZhbHVlKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXQgdGhlIHZhbHVlIG9mIHByb3BlcnR5CiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVZhbHVlIG9mIHRoZSBwcm9wZXJ0eS4KKyAgICAgKiBAcmV0dXJuICAgIFZhbHVlIG9mIHRoZSBwcm9wZXJ0eS4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldERldGFpbChpbnQgcHJvcGVydHkpIHsKLSAgICAJaWYgKGRldGFpbHMuY29udGFpbnNLZXkobmV3IEludGVnZXIocHJvcGVydHkpKSkgewotICAgIAkgICAgcmV0dXJuIChTdHJpbmcpIGRldGFpbHMuZ2V0KG5ldyBJbnRlZ2VyKHByb3BlcnR5KSk7Ci0gICAgCX0gZWxzZSB7Ci0gICAgCSAgICByZXR1cm4gbnVsbDsKLSAgICAJfSAgICAJCisgICAgICAgIGlmIChkZXRhaWxzLmNvbnRhaW5zS2V5KG5ldyBJbnRlZ2VyKHByb3BlcnR5KSkpIHsKKyAgICAgICAgICAgIHJldHVybiAoU3RyaW5nKSBkZXRhaWxzLmdldChuZXcgSW50ZWdlcihwcm9wZXJ0eSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDaGVja3Mgd2hldGhlciB0d28gPGNvZGU+RGF0YVNvdXJjZVNwZWM8L2NvZGU+IG9iamVjdHMKICAgICAgKiBhcmUgZXF1YWwgb3Igbm90LgogICAgICAqCi0gICAgICogQHBhcmFtCW9iaglJbnN0YW5jZSBvZiA8Y29kZT5EYXRhU291cmNlU3BlYzwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBvYmogICAgSW5zdGFuY2Ugb2YgPGNvZGU+RGF0YVNvdXJjZVNwZWM8L2NvZGU+IG9iamVjdC4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9iaikgewotICAgIAlpZiAob2JqIGluc3RhbmNlb2YgRGF0YVNvdXJjZVNwZWMpIHsKLSAgICAJICAgIHJldHVybiB0aGlzLmRldGFpbHMuZXF1YWxzKCgoRGF0YVNvdXJjZVNwZWMpb2JqKS5kZXRhaWxzKTsKLSAgICAJfQotICAgIAlyZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBEYXRhU291cmNlU3BlYykgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGV0YWlscy5lcXVhbHMoKChEYXRhU291cmNlU3BlYylvYmopLmRldGFpbHMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIGhhc2hDb2RlIG9mIHRoaXMgPGNvZGU+RGF0YVNvdXJjZVNwZWM8L2NvZGU+IG9iamVjdC4KICAgICAgKgotICAgICAqIEByZXR1cm4JaGFzaENvZGUgb2YgdGhpcyBvYmplY3QuCisgICAgICogQHJldHVybiAgICBoYXNoQ29kZSBvZiB0aGlzIG9iamVjdC4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewotICAgIAlyZXR1cm4gdGhpcy5kZXRhaWxzLmhhc2hDb2RlKCk7Ci0gICAgfSAgICAKKyAgICAgICAgcmV0dXJuIHRoaXMuZGV0YWlscy5oYXNoQ29kZSgpOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9idWlsZC54bWwKaW5kZXggZWY0MzhmYy4uM2I0ZmFlYiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9idWlsZC54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPHByb2plY3QgbmFtZT0iamRiY19jb25uZWN0b3IiIGJhc2VkaXI9Ii4iIGRlZmF1bHQ9ImJ1aWxkIj4KICAgPHByb3BlcnR5IG5hbWU9InBrZy5kaXIiIHZhbHVlPSJjb20vc3VuL2dqYy9jb21tb24iLz4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJjbGVhbiI+CiAgICAgPGFudCBhbnRmaWxlPSJidWlsZC54bWwiIGRpcj0iJHtnamMuaG9tZX0vYmluIiB0YXJnZXQ9ImNsZWFuIi8+CiAgIDwvdGFyZ2V0PgpAQCAtMzYsMTMgKzM2LDEzIEBACiAKICAgPHRhcmdldCBuYW1lPSJjb21waWxlMTMiIGRlcGVuZHM9ImNvbXBpbGUiLz4KICAgPHRhcmdldCBuYW1lPSJjb21waWxlMTQiIGRlcGVuZHM9ImNvbXBpbGUiLz4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlMTMiIGRlcGVuZHM9InBhY2thZ2UiLz4KICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlMTQiIGRlcGVuZHM9InBhY2thZ2UiLz4KIAogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkMTMiIGRlcGVuZHM9ImNvbXBpbGUxMywgcGFja2FnZTEzIi8+CiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQxNCIgZGVwZW5kcz0iY29tcGlsZTE0LCBwYWNrYWdlMTQiLz4KLSAgICAKKwogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJidWlsZDEzLCBidWlsZDE0Ii8+CiAKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L0Nvbm5lY3Rpb25Ib2xkZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L0Nvbm5lY3Rpb25Ib2xkZXIuamF2YQppbmRleCBiZmNiZjBiLi40ZWJlZDZlIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9Db25uZWN0aW9uSG9sZGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvQ29ubmVjdGlvbkhvbGRlci5qYXZhCkBAIC0yNCwyNCArMjQsMjQgQEAKIGltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcjsKIAogLyoqCi0gKiBIb2xkcyB0aGUgamF2YS5zcWwuQ29ubmVjdGlvbiBvYmplY3QsIHdoaWNoIGlzIHRvIGJlIAorICogSG9sZHMgdGhlIGphdmEuc3FsLkNvbm5lY3Rpb24gb2JqZWN0LCB3aGljaCBpcyB0byBiZQogICogcGFzc2VkIHRvIHRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMjMKLSAqIEBhdXRob3IJQmlub2QgUC5HCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzIzCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRwogICovCi1wdWJsaWMgY2xhc3MgQ29ubmVjdGlvbkhvbGRlciBpbXBsZW1lbnRzIENvbm5lY3Rpb257IAorcHVibGljIGNsYXNzIENvbm5lY3Rpb25Ib2xkZXIgaW1wbGVtZW50cyBDb25uZWN0aW9uewogCiAgICAgcHJpdmF0ZSBDb25uZWN0aW9uIGNvbjsKLSAgICAKKwogICAgIHByaXZhdGUgTWFuYWdlZENvbm5lY3Rpb24gbWM7Ci0gICAgCi0gICAgcHJpdmF0ZSBib29sZWFuIHdyYXBwZWRBbHJlYWR5ID0gZmFsc2U7ICAgIAotICAgIAorCisgICAgcHJpdmF0ZSBib29sZWFuIHdyYXBwZWRBbHJlYWR5ID0gZmFsc2U7CisKICAgICBwcml2YXRlIGJvb2xlYW4gaXNDbG9zZWQgPSBmYWxzZTsKLSAgICAKKwogICAgIHByaXZhdGUgYm9vbGVhbiB2YWxpZCA9IHRydWU7Ci0gICAgCisKICAgICBwcml2YXRlIGJvb2xlYW4gYWN0aXZlID0gZmFsc2U7CiAgICAgLyoqCiAgICAgICogVGhlIGFjdGl2ZSBmbGFnIGlzIGZhbHNlIHdoZW4gdGhlIGNvbm5lY3Rpb24gaGFuZGxlIGlzCkBAIC01MywyMTkgKzUzLDIxOSBAQAogICAgICAqIGZ1bmN0aW9uLCB0aGUgYWJvdmUgbWV0aG9kIGludm9jYXRpb24gc3VjY2VlZHM7IG90aGVyd2lzZQogICAgICAqIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24uCiAgICAgICovCi0gICAgCisKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RzIGEgQ29ubmVjdGlvbiBob2xkZXIuCi0gICAgICogCi0gICAgICogQHBhcmFtCWNvbgk8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgY29uICAgIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KICAgICAgKi8KICAgICBwdWJsaWMgQ29ubmVjdGlvbkhvbGRlcihDb25uZWN0aW9uIGNvbiwgTWFuYWdlZENvbm5lY3Rpb24gbWMpIHsKICAgICAgICAgdGhpcy5jb24gPSBjb247CiAgICAgICAgIHRoaXMubWMgID0gbWM7CiAgICAgfQotICAgICAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIGFjdHVhbCBjb25uZWN0aW9uIGluIHRoaXMgaG9sZGVyIG9iamVjdC4KLSAgICAgKiAKLSAgICAgKiBAcmV0dXJuCUNvbm5lY3Rpb24gb2JqZWN0LgorICAgICAqCisgICAgICogQHJldHVybiAgICBDb25uZWN0aW9uIG9iamVjdC4KICAgICAgKi8KICAgICBDb25uZWN0aW9uIGdldENvbm5lY3Rpb24oKSB7Ci0gICAgCXJldHVybiBjb247CisgICAgICAgIHJldHVybiBjb247CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZmxhZyB0byBpbmRpY2F0ZSB0aGF0LCB0aGUgY29ubmVjdGlvbiBpcyB3cmFwcGVkIGFscmVhZHkgb3Igbm90LgogICAgICAqCi0gICAgICogQHBhcmFtCXdyYXBGbGFnCQorICAgICAqIEBwYXJhbSAgICB3cmFwRmxhZwogICAgICAqLwogICAgIHZvaWQgd3JhcHBlZChib29sZWFuIHdyYXBGbGFnKXsKICAgICAgICAgdGhpcy53cmFwcGVkQWxyZWFkeSA9IHdyYXBGbGFnOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgd2hldGhlciBpdCBpcyB3cmFwcGVkIGFscmVhZHkgb3Igbm90LgogICAgICAqCi0gICAgICogQHJldHVybgl3cmFwcGVkIGZsYWcuCisgICAgICogQHJldHVybiAgICB3cmFwcGVkIGZsYWcuCiAgICAgICovCiAgICAgYm9vbGVhbiBpc1dyYXBwZWQoKXsKICAgICAgICAgcmV0dXJuIHdyYXBwZWRBbHJlYWR5OwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZSByZXNwb25zaWJsZQogICAgICAqIGZvciB0aGlzIGNvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKi8KICAgICBNYW5hZ2VkQ29ubmVjdGlvbiBnZXRNYW5hZ2VkQ29ubmVjdGlvbigpIHsKICAgICAgICAgcmV0dXJuIG1jOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJlcGxhY2UgdGhlIGFjdHVhbCA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3Qgd2l0aCB0aGUgb25lCi0gICAgICogc3VwcGxpZWQuIEFsc28gcmVwbGFjZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gbGluay4gICAgIAorICAgICAqIHN1cHBsaWVkLiBBbHNvIHJlcGxhY2UgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGxpbmsuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JY29uIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAcGFyYW0JbWMgIDxjb2RlPiBNYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBjb24gPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBtYyAgPGNvZGU+IE1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCiAgICAgICovCiAgICAgdm9pZCBhc3NvY2lhdGVDb25uZWN0aW9uKENvbm5lY3Rpb24gY29uLCBNYW5hZ2VkQ29ubmVjdGlvbiBtYykgewotICAgIAl0aGlzLm1jID0gbWM7Ci0gICAgCXRoaXMuY29uID0gY29uOworICAgICAgICB0aGlzLm1jID0gbWM7CisgICAgICAgIHRoaXMuY29uID0gY29uOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENsZWFycyBhbGwgd2FybmluZ3MgcmVwb3J0ZWQgZm9yIHRoZSB1bmRlcmx5aW5nIGNvbm5lY3Rpb24gIG9iamVjdC4KICAgICAgKgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgY2xlYXJXYXJuaW5ncygpIHRocm93cyBTUUxFeGNlcHRpb257ICAgIAotCWNoZWNrVmFsaWRpdHkoKTsKKyAgICBwdWJsaWMgdm9pZCBjbGVhcldhcm5pbmdzKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIGNvbi5jbGVhcldhcm5pbmdzKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogQ2xvc2VzIHRoZSBsb2dpY2FsIGNvbm5lY3Rpb24uICAgIAorICAgICAqIENsb3NlcyB0aGUgbG9naWNhbCBjb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgY2xvc2UoKSB0aHJvd3MgU1FMRXhjZXB0aW9uewogICAgICAgICBpc0Nsb3NlZCA9IHRydWU7Ci0gICAgICAgIG1jLmNvbm5lY3Rpb25DbG9zZWQobnVsbCwgdGhpcyk7ICAgICAgICAKKyAgICAgICAgbWMuY29ubmVjdGlvbkNsb3NlZChudWxsLCB0aGlzKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBJbnZhbGlkYXRlcyB0aGlzIG9iamVjdC4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBpbnZhbGlkYXRlKCkgewotICAgIAl2YWxpZCA9IGZhbHNlOworICAgICAgICB2YWxpZCA9IGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENsb3NlcyB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpbnZvbHZlZCBpbiB0aGlzLgogICAgICAqCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KLSAgICB2b2lkIGFjdHVhbENsb3NlKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsgICAgCisgICAgdm9pZCBhY3R1YWxDbG9zZSgpIHRocm93cyBTUUxFeGNlcHRpb257CiAgICAgICAgIGNvbi5jbG9zZSgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbW1pdCB0aGUgY2hhbmdlcyBpbiB0aGUgdW5kZXJseWluZyBDb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjb21taXQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24uY29tbWl0KCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24uY29tbWl0KCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIHN0YXRlbWVudCBmcm9tIHRoZSB1bmRlcmx5aW5nIENvbm5lY3Rpb24KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+U3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEByZXR1cm4gICAgPGNvZGU+U3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTdGF0ZW1lbnQgY3JlYXRlU3RhdGVtZW50KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIHJldHVybiBjb24uY3JlYXRlU3RhdGVtZW50KCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIHN0YXRlbWVudCBmcm9tIHRoZSB1bmRlcmx5aW5nIENvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0VHlwZQlUeXBlIG9mIHRoZSBSZXN1bHRTZXQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0Q29uY3VycmVuY3kJUmVzdWx0U2V0IENvbmN1cnJlbmN5LgotICAgICAqIEByZXR1cm4JPGNvZGU+U3RhdGVtZW50PC9jb2RlPiBvYmplY3QuICAgICAKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldFR5cGUgICAgVHlwZSBvZiB0aGUgUmVzdWx0U2V0CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldENvbmN1cnJlbmN5ICAgIFJlc3VsdFNldCBDb25jdXJyZW5jeS4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgU3RhdGVtZW50IGNyZWF0ZVN0YXRlbWVudChpbnQgcmVzdWx0U2V0VHlwZSwgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgcmV0dXJuIGNvbi5jcmVhdGVTdGF0ZW1lbnQocmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3kpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBzdGF0ZW1lbnQgZnJvbSB0aGUgdW5kZXJseWluZyBDb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHBhcmFtCXJlc3VsdFNldFR5cGUJVHlwZSBvZiB0aGUgUmVzdWx0U2V0Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldENvbmN1cnJlbmN5CVJlc3VsdFNldCBDb25jdXJyZW5jeS4KLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0SG9sZGFiaWxpdHkJUmVzdWx0U2V0IEhvbGRhYmlsaXR5LiAgICAgCi0gICAgICogQHJldHVybgk8Y29kZT5TdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4gCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgICAgICAKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0VHlwZSAgICBUeXBlIG9mIHRoZSBSZXN1bHRTZXQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0Q29uY3VycmVuY3kgICAgUmVzdWx0U2V0IENvbmN1cnJlbmN5LgorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRIb2xkYWJpbGl0eSAgICBSZXN1bHRTZXQgSG9sZGFiaWxpdHkuCisgICAgICogQHJldHVybiAgICA8Y29kZT5TdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCi0gICAgcHVibGljIFN0YXRlbWVudCBjcmVhdGVTdGF0ZW1lbnQoaW50IHJlc3VsdFNldFR5cGUsIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwgCi0gICAgCQkJCSAgICAgaW50IHJlc3VsdFNldEhvbGRhYmlsdHkpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCQkJCSAgICAgCisgICAgcHVibGljIFN0YXRlbWVudCBjcmVhdGVTdGF0ZW1lbnQoaW50IHJlc3VsdFNldFR5cGUsIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0SG9sZGFiaWx0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICByZXR1cm4gY29uLmNyZWF0ZVN0YXRlbWVudChyZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSwKLSAgICAgICAgCQkJICAgcmVzdWx0U2V0SG9sZGFiaWx0eSk7CisgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFNldEhvbGRhYmlsdHkpOwogICAgIH0KLSAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgY3VycmVudCBhdXRvLWNvbW1pdCBtb2RlIGZvciB0aGUgdW5kZXJseWluZyA8Y29kZT4gQ29ubmVjdGlvbjwvY29kZT4uCiAgICAgICoKICAgICAgKiBAcmV0dXJuIFRoZSBjdXJyZW50IHN0YXRlIG9mIGNvbm5lY3Rpb24ncyBhdXRvLWNvbW1pdCBtb2RlLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gZ2V0QXV0b0NvbW1pdCgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uZ2V0QXV0b0NvbW1pdCgpOwotICAgIH0gICAKLSAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uZ2V0QXV0b0NvbW1pdCgpOworICAgIH0KKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgdW5kZXJseWluZyA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QncyBjYXRhbG9nIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCUNhdGFsb2cgTmFtZS4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHJldHVybiAgICBDYXRhbG9nIE5hbWUuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q2F0YWxvZygpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICByZXR1cm4gY29uLmdldENhdGFsb2coKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgaG9sZGFiaWxpdHkgb2YgPGNvZGU+UmVzdWx0U2V0PC9jb2RlPiBvYmplY3RzIGNyZWF0ZWQKICAgICAgKiB1c2luZyB0aGlzIGNvbm5lY3Rpb24gb2JqZWN0LgogICAgICAqCi0gICAgICogQHJldHVybglob2xkYWJpbGl0eSB2YWx1ZS4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHJldHVybiAgICBob2xkYWJpbGl0eSB2YWx1ZS4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIGludCBnZXRIb2xkYWJpbGl0eSgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybgljb24uZ2V0SG9sZGFiaWxpdHkoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiAgICBjb24uZ2V0SG9sZGFiaWxpdHkoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIDxjb2RlPkRhdGFiYXNlTWV0YURhdGE8L2NvZGU+b2JqZWN0IGZyb20gdGhlIHVuZGVybHlpbmcKICAgICAgKiA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KICAgICAgKgogICAgICAqIEByZXR1cm4gPGNvZGU+RGF0YWJhc2VNZXRhRGF0YTwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIERhdGFiYXNlTWV0YURhdGEgZ2V0TWV0YURhdGEoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLmdldE1ldGFEYXRhKCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLmdldE1ldGFEYXRhKCk7CiAgICAgfQotIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoaXMgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0J3MgY3VycmVudCB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwuCiAgICAgICoKICAgICAgKiBAcmV0dXJuIFRyYW5zYWN0aW9uIGxldmVsCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLyAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIHJldHVybiBjb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBSZXRyaWV2ZXMgdGhlIDxjb2RlPk1hcDwvY29kZT4gb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCAKKyAgICAgKiBSZXRyaWV2ZXMgdGhlIDxjb2RlPk1hcDwvY29kZT4gb2JqZWN0IGFzc29jaWF0ZWQgd2l0aAogICAgICAqIDxjb2RlPiBDb25uZWN0aW9uPC9jb2RlPiBPYmplY3QuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVR5cGVNYXAgc2V0IGluIHRoaXMgb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcmV0dXJuICAgIFR5cGVNYXAgc2V0IGluIHRoaXMgb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgTWFwIGdldFR5cGVNYXAoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLmdldFR5cGVNYXAoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uZ2V0VHlwZU1hcCgpOwogICAgIH0KIAogICAgIC8qKgpAQCAtMjczLDE4NCArMjczLDE4NCBAQAogICAgICAqIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KICAgICAgKgogICAgICAqIEByZXR1cm4gRmlyc3QgPGNvZGU+IFNRTFdhcm5pbmc8L2NvZGU+IE9iamVjdCBvciBudWxsLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFNRTFdhcm5pbmcgZ2V0V2FybmluZ3MoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLmdldFdhcm5pbmdzKCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLmdldFdhcm5pbmdzKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHdoZXRoZXIgdW5kZXJseWluZyA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaXMgY2xvc2VkLgogICAgICAqCi0gICAgICogQHJldHVybgl0cnVlIGlmIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpcyBjbG9zZWQsIGZhbHNlCi0gICAgICogCQlpZiBpdCBpcyBjbG9zZWQuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEByZXR1cm4gICAgdHJ1ZSBpZiA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaXMgY2xvc2VkLCBmYWxzZQorICAgICAqICAgICAgICAgaWYgaXQgaXMgY2xvc2VkLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc0Nsb3NlZCgpIHRocm93cyBTUUxFeGNlcHRpb24gewotICAgIAlyZXR1cm4gaXNDbG9zZWQ7CisgICAgICAgIHJldHVybiBpc0Nsb3NlZDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgd2hldGhlciB0aGlzIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpcyByZWFkLW9ubHkuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRydWUgaWYgPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBpcyByZWFkLW9ubHksIGZhbHNlIG90aGVyLXdpc2UKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHJldHVybiAgICB0cnVlIGlmIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gaXMgcmVhZC1vbmx5LCBmYWxzZSBvdGhlci13aXNlCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGlzUmVhZE9ubHkoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLmlzUmVhZE9ubHkoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uaXNSZWFkT25seSgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnZlcnRzIHRoZSBnaXZlbiBTUUwgc3RhdGVtZW50IGludG8gdGhlIHN5c3RlbSdzIG5hdGl2ZSBTUUwgZ3JhbW1lci4KICAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIHN0YXRlbWVudCAsIHRvIGJlIGNvbnZlcnRlZC4KLSAgICAgKiBAcmV0dXJuCUNvbnZlcnRlZCBTUUwgc3RyaW5nLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBzdGF0ZW1lbnQgLCB0byBiZSBjb252ZXJ0ZWQuCisgICAgICogQHJldHVybiAgICBDb252ZXJ0ZWQgU1FMIHN0cmluZy4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBuYXRpdmVTUUwoU3RyaW5nIHNxbCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5uYXRpdmVTUUwoc3FsKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ubmF0aXZlU1FMKHNxbCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3IgY2FsbGluZyBkYXRhYmFzZQogICAgICAqIHN0b3JlZCBwcm9jZWR1cmVzLgogICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CiAgICAgICogQHJldHVybiA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBDYWxsYWJsZVN0YXRlbWVudCBwcmVwYXJlQ2FsbChTdHJpbmcgc3FsKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnByZXBhcmVDYWxsKHNxbCk7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIGNhbGxpbmcgZGF0YWJhc2UKLSAgICAgKiBzdG9yZWQgcHJvY2VkdXJlcy4KLSAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRUeXBlCVR5cGUgb2YgdGhlIFJlc3VsdFNldAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRDb25jdXJyZW5jeQlSZXN1bHRTZXQgQ29uY3VycmVuY3kuCi0gICAgICogQHJldHVybiA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovCi0gICAgcHVibGljIENhbGxhYmxlU3RhdGVtZW50IHByZXBhcmVDYWxsKFN0cmluZyBzcWwsaW50IHJlc3VsdFNldFR5cGUsIAotICAgIAkJCQkJaW50IHJlc3VsdFNldENvbmN1cnJlbmN5KSB0aHJvd3MgU1FMRXhjZXB0aW9uewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCQkJCQkKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlQ2FsbChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5KTsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3IgY2FsbGluZyBkYXRhYmFzZQotICAgICAqIHN0b3JlZCBwcm9jZWR1cmVzLgotICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldFR5cGUJVHlwZSBvZiB0aGUgUmVzdWx0U2V0Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldENvbmN1cnJlbmN5CVJlc3VsdFNldCBDb25jdXJyZW5jeS4KLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0SG9sZGFiaWxpdHkJUmVzdWx0U2V0IEhvbGRhYmlsaXR5LiAgICAgICAgICAKLSAgICAgKiBAcmV0dXJuIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8KLSAgICBwdWJsaWMgQ2FsbGFibGVTdGF0ZW1lbnQgcHJlcGFyZUNhbGwoU3RyaW5nIHNxbCwgaW50IHJlc3VsdFNldFR5cGUsIAotICAgIAkJCQkJIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwgCi0gICAgCQkJCQkgaW50IHJlc3VsdFNldEhvbGRhYmlsdHkpIHRocm93cyBTUUxFeGNlcHRpb257Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAJCQkJCSAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlQ2FsbChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5LAotICAgIAkJCSAgICAgICByZXN1bHRTZXRIb2xkYWJpbHR5KTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZUNhbGwoc3FsKTsKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nIAorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIGNhbGxpbmcgZGF0YWJhc2UKKyAgICAgKiBzdG9yZWQgcHJvY2VkdXJlcy4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRUeXBlICAgIFR5cGUgb2YgdGhlIFJlc3VsdFNldAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRDb25jdXJyZW5jeSAgICBSZXN1bHRTZXQgQ29uY3VycmVuY3kuCisgICAgICogQHJldHVybiA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCisgICAgcHVibGljIENhbGxhYmxlU3RhdGVtZW50IHByZXBhcmVDYWxsKFN0cmluZyBzcWwsaW50IHJlc3VsdFNldFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3kpIHRocm93cyBTUUxFeGNlcHRpb257CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVDYWxsKHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3kpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIGNhbGxpbmcgZGF0YWJhc2UKKyAgICAgKiBzdG9yZWQgcHJvY2VkdXJlcy4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRUeXBlICAgIFR5cGUgb2YgdGhlIFJlc3VsdFNldAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRDb25jdXJyZW5jeSAgICBSZXN1bHRTZXQgQ29uY3VycmVuY3kuCisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldEhvbGRhYmlsaXR5ICAgIFJlc3VsdFNldCBIb2xkYWJpbGl0eS4KKyAgICAgKiBAcmV0dXJuIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgQ2FsbGFibGVTdGF0ZW1lbnQgcHJlcGFyZUNhbGwoU3RyaW5nIHNxbCwgaW50IHJlc3VsdFNldFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRIb2xkYWJpbHR5KSB0aHJvd3MgU1FMRXhjZXB0aW9ueworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlQ2FsbChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRTZXRIb2xkYWJpbHR5KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nCiAgICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKICAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsKTsKICAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZyAKLSAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKLSAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQlhdXRvR2VuZXJhdGVkS2V5cyBhIGZsYWcgaW5kaWNhdGluZyBBdXRvR2VuZXJhdGVkS2V5cyBuZWVkIHRvIGJlIHJldHVybmVkLgotICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLwotICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludCBhdXRvR2VuZXJhdGVkS2V5cykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCxhdXRvR2VuZXJhdGVkS2V5cyk7Ci0gICAgfSAgICAKLSAgICAgIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcgCi0gICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCi0gICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JY29sdW1uSW5kZXhlcyBhbiBhcnJheSBvZiBjb2x1bW4gaW5kZXhlcyBpbmRpY2F0aW5nIHRoZSBjb2x1bW5zIHRoYXQgc2hvdWxkIGJlCi0gICAgICoJCXJldHVybmVkIGZyb20gdGhlIGluc2VydGVkIHJvdyBvciByb3dzLgotICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLwotICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludFtdIGNvbHVtbkluZGV4ZXMpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsY29sdW1uSW5kZXhlcyk7Ci0gICAgfSAgICAgICAgICAKLSAKLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nIAotICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQotICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldFR5cGUJVHlwZSBvZiB0aGUgUmVzdWx0U2V0Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldENvbmN1cnJlbmN5CVJlc3VsdFNldCBDb25jdXJyZW5jeS4KLSAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8KLSAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLGludCByZXN1bHRTZXRUeXBlLCAKLSAgICAJCQkJCWludCByZXN1bHRTZXRDb25jdXJyZW5jeSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAkJCQkJCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5KTsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZyAKLSAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKLSAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRUeXBlCVR5cGUgb2YgdGhlIFJlc3VsdFNldAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRDb25jdXJyZW5jeQlSZXN1bHRTZXQgQ29uY3VycmVuY3kuCi0gICAgICogQHBhcmFtCXJlc3VsdFNldEhvbGRhYmlsaXR5CVJlc3VsdFNldCBIb2xkYWJpbGl0eS4gICAgICAgICAgCi0gICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovCi0gICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCwgaW50IHJlc3VsdFNldFR5cGUsIAotICAgIAkJCQkJIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwgCi0gICAgCQkJCQkgaW50IHJlc3VsdFNldEhvbGRhYmlsdHkpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCQkJCQkgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5LAotICAgIAkJCQkgICAgcmVzdWx0U2V0SG9sZGFiaWx0eSk7Ci0gICAgfSAgICAgICAgICAgCiAKICAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nIAorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcKICAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKICAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQljb2x1bW5OYW1lcyBOYW1lIG9mIGJvdW5kIGNvbHVtbnMuCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIGF1dG9HZW5lcmF0ZWRLZXlzIGEgZmxhZyBpbmRpY2F0aW5nIEF1dG9HZW5lcmF0ZWRLZXlzIG5lZWQgdG8gYmUgcmV0dXJuZWQuCiAgICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludCBhdXRvR2VuZXJhdGVkS2V5cykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLGF1dG9HZW5lcmF0ZWRLZXlzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nCisgICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgY29sdW1uSW5kZXhlcyBhbiBhcnJheSBvZiBjb2x1bW4gaW5kZXhlcyBpbmRpY2F0aW5nIHRoZSBjb2x1bW5zIHRoYXQgc2hvdWxkIGJlCisgICAgICogICAgICAgIHJldHVybmVkIGZyb20gdGhlIGluc2VydGVkIHJvdyBvciByb3dzLgorICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludFtdIGNvbHVtbkluZGV4ZXMpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCxjb2x1bW5JbmRleGVzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nCisgICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0VHlwZSAgICBUeXBlIG9mIHRoZSBSZXN1bHRTZXQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0Q29uY3VycmVuY3kgICAgUmVzdWx0U2V0IENvbmN1cnJlbmN5LgorICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsaW50IHJlc3VsdFNldFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3kpIHRocm93cyBTUUxFeGNlcHRpb257CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZworICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldFR5cGUgICAgVHlwZSBvZiB0aGUgUmVzdWx0U2V0CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldENvbmN1cnJlbmN5ICAgIFJlc3VsdFNldCBDb25jdXJyZW5jeS4KKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0SG9sZGFiaWxpdHkgICAgUmVzdWx0U2V0IEhvbGRhYmlsaXR5LgorICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludCByZXN1bHRTZXRUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0SG9sZGFiaWx0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFNldEhvbGRhYmlsdHkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcKKyAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICBjb2x1bW5OYW1lcyBOYW1lIG9mIGJvdW5kIGNvbHVtbnMuCisgICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCwgU3RyaW5nW10gY29sdW1uTmFtZXMpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsY29sdW1uTmFtZXMpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCxjb2x1bW5OYW1lcyk7CiAgICAgfQogCiAgICAgcHVibGljIENsb2IgY3JlYXRlQ2xvYigpIHRocm93cyBTUUxFeGNlcHRpb24gewpAQCAtNTAwLDE2MiArNTAwLDE2MiBAQAogICAgIC8qKgogICAgICAqIFJlbW92ZXMgdGhlIGdpdmVuIDxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0IGZyb20gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc2F2ZXBvaW50CTxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0Ci0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBzYXZlcG9pbnQgICAgPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcmVsZWFzZVNhdmVwb2ludChTYXZlcG9pbnQgc2F2ZXBvaW50KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24ucmVsZWFzZVNhdmVwb2ludChzYXZlcG9pbnQpOwotICAgIH0gCi0gICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24ucmVsZWFzZVNhdmVwb2ludChzYXZlcG9pbnQpOworICAgIH0KKwogICAgIC8qKgogICAgICAqIFJvbGxzIGJhY2sgdGhlIGNoYW5nZXMgbWFkZSBpbiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbi4KICAgICAgKgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8gICAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KICAgICBwdWJsaWMgdm9pZCByb2xsYmFjaygpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5yb2xsYmFjaygpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnJvbGxiYWNrKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUm9sbHMgYmFjayB0aGUgY2hhbmdlcyBtYWRlIGFmdGVyIHRoZSBzYXZlcG9pbnQuCiAgICAgICoKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovICAgICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCiAgICAgcHVibGljIHZvaWQgcm9sbGJhY2soU2F2ZXBvaW50IHNhdmVwb2ludCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnJvbGxiYWNrKHNhdmVwb2ludCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24ucm9sbGJhY2soc2F2ZXBvaW50KTsKICAgICB9Ci0gICAgICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgYXV0by1jb21tbWl0IG1vZGUgb2YgdGhlIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KICAgICAgKgotICAgICAqIEBwYXJhbQlhdXRvQ29tbWl0IGJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyB0aGUgYXV0by1jb21taXQgbW9kZS4gICAgIAotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgYXV0b0NvbW1pdCBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgdGhlIGF1dG8tY29tbWl0IG1vZGUuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldEF1dG9Db21taXQoYm9vbGVhbiBhdXRvQ29tbWl0KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24uc2V0QXV0b0NvbW1pdChhdXRvQ29tbWl0KTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5zZXRBdXRvQ29tbWl0KGF1dG9Db21taXQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGNhdGFsb2cgbmFtZSB0byB0aGUgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0CiAgICAgICoKLSAgICAgKiBAcGFyYW0JY2F0YWxvZwlDYXRhbG9nIG5hbWUuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBjYXRhbG9nICAgIENhdGFsb2cgbmFtZS4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Q2F0YWxvZyhTdHJpbmcgY2F0YWxvZykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnNldENhdGFsb2coY2F0YWxvZyk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24uc2V0Q2F0YWxvZyhjYXRhbG9nKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBTZXRzIHRoZSBob2xkYWJpbGl0eSBvZiA8Y29kZT5SZXN1bHRTZXQ8L2NvZGU+IG9iamVjdHMgY3JlYXRlZCAKKyAgICAgKiBTZXRzIHRoZSBob2xkYWJpbGl0eSBvZiA8Y29kZT5SZXN1bHRTZXQ8L2NvZGU+IG9iamVjdHMgY3JlYXRlZAogICAgICAqIHVzaW5nIHRoaXMgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgogICAgICAqCi0gICAgICogQHBhcmFtCWhvbGRhYmlsaXR5CUEgPGNvZGU+UmVzdWx0U2V0PC9jb2RlPiBob2xkYWJpbGl0eSBjb25zdGFudAotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgaG9sZGFiaWxpdHkgICAgQSA8Y29kZT5SZXN1bHRTZXQ8L2NvZGU+IGhvbGRhYmlsaXR5IGNvbnN0YW50CisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldEhvbGRhYmlsaXR5KGludCBob2xkYWJpbGl0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAgCWNvbi5zZXRIb2xkYWJpbGl0eShob2xkYWJpbGl0eSk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICAgY29uLnNldEhvbGRhYmlsaXR5KGhvbGRhYmlsaXR5KTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBQdXRzIHRoZSBjb25uZWN0aW9uIGluIHJlYWQtb25seSBtb2RlIGFzIGEgaGludCB0byB0aGUgZHJpdmVyIHRvIAorICAgICAqIFB1dHMgdGhlIGNvbm5lY3Rpb24gaW4gcmVhZC1vbmx5IG1vZGUgYXMgYSBoaW50IHRvIHRoZSBkcml2ZXIgdG8KICAgICAgKiBwZXJmb3JtIGRhdGFiYXNlIG9wdGltaXphdGlvbnMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcmVhZE9ubHkgIHRydWUgZW5hYmxlcyByZWFkLW9ubHkgbW9kZSwgZmFsc2UgZGlzYWJsZXMgaXQuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICByZWFkT25seSAgdHJ1ZSBlbmFibGVzIHJlYWQtb25seSBtb2RlLCBmYWxzZSBkaXNhYmxlcyBpdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0UmVhZE9ubHkoYm9vbGVhbiByZWFkT25seSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnNldFJlYWRPbmx5KHJlYWRPbmx5KTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5zZXRSZWFkT25seShyZWFkT25seSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhbmQgdW5uYW1lZCBzYXZlcG9pbnQgYW5kIHJldHVybnMgYW4gb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhhdC4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHJldHVybiAgICA8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdC4KICAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFNhdmVwb2ludCBzZXRTYXZlcG9pbnQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnNldFNhdmVwb2ludCgpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5zZXRTYXZlcG9pbnQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgc2F2ZXBvaW50IHdpdGggdGhlIG5hbWUgYW5kIHJldHVybnMgYW4gb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhhdC4KICAgICAgKgotICAgICAqIEBwYXJhbQluYW1lCU5hbWUgb2YgdGhlIHNhdmVwb2ludC4KLSAgICAgKiBAcmV0dXJuCTxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgbmFtZSAgICBOYW1lIG9mIHRoZSBzYXZlcG9pbnQuCisgICAgICogQHJldHVybiAgICA8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFNhdmVwb2ludCBzZXRTYXZlcG9pbnQoU3RyaW5nIG5hbWUpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uc2V0U2F2ZXBvaW50KG5hbWUpOwotICAgIH0gICAgCi0gICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnNldFNhdmVwb2ludChuYW1lKTsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbGV2ZWwgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgbGV2ZWwgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRUcmFuc2FjdGlvbklzb2xhdGlvbihpbnQgbGV2ZWwpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbihsZXZlbCk7Ci0gICAgfSAgICAgCi0gICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24obGV2ZWwpOworICAgIH0KKwogICAgIC8qKgotICAgICAqIEluc3RhbGxzIHRoZSBnaXZlbiA8Y29kZT5NYXA8L2NvZGU+IG9iamVjdCBhcyB0aGUgdHlvZSBtYXAgZm9yIHRoaXMgCisgICAgICogSW5zdGFsbHMgdGhlIGdpdmVuIDxjb2RlPk1hcDwvY29kZT4gb2JqZWN0IGFzIHRoZSB0eW9lIG1hcCBmb3IgdGhpcwogICAgICAqIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgogICAgICAqCi0gICAgICogQHBhcmFtCW1hcAk8Y29kZT5NYXA8L2NvZGU+IGEgTWFwIG9iamVjdCB0byBpbnN0YWxsLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgbWFwICAgIDxjb2RlPk1hcDwvY29kZT4gYSBNYXAgb2JqZWN0IHRvIGluc3RhbGwuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFR5cGVNYXAoTWFwIG1hcCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOwotICAgIAljb24uc2V0VHlwZU1hcChtYXApOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnNldFR5cGVNYXAobWFwKTsKICAgICB9CiAKICAgICBwdWJsaWMgaW50IGdldE5ldHdvcmtUaW1lb3V0KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICB0aHJvdyBuZXcgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiRG8gbm90IHN1cHBvcnQgSmF2YSA3IG5ldyBmZWF0dXJlLiIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldE5ldHdvcmtUaW1lb3V0KEV4ZWN1dG9yIGV4ZWN1dG9yLCBpbnQgbWlsbGlzZWNvbmRzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgbmV3IGZlYXR1cmUuIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgYWJvcnQoRXhlY3V0b3IgZXhlY3V0b3IpICB0aHJvd3MgU1FMRXhjZXB0aW9uewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBuZXcgZmVhdHVyZS4iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldFNjaGVtYSgpIHRocm93cyBTUUxFeGNlcHRpb257CiAgICAgICB0aHJvdyBuZXcgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiRG8gbm90IHN1cHBvcnQgSmF2YSA3IG5ldyBmZWF0dXJlLiIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFNjaGVtYShTdHJpbmcgc2NoZW1hKSB0aHJvd3MgU1FMRXhjZXB0aW9uewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBuZXcgZmVhdHVyZS4iKTsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIENoZWNrcyB0aGUgdmFsaWRpdHkgb2YgdGhpcyBvYmplY3QKICAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgY2hlY2tWYWxpZGl0eSgpIHRocm93cyBTUUxFeGNlcHRpb24gewotICAgIAlpZiAoaXNDbG9zZWQpIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKCJDb25uZWN0aW9uIGNsb3NlZCIpOwotICAgIAlpZiAoIXZhbGlkKSB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uICgiSW52YWxpZCBDb25uZWN0aW9uIik7Ci0gICAgCWlmKGFjdGl2ZSA9PSBmYWxzZSkgewotICAgIAkgICAgbWMuY2hlY2tJZkFjdGl2ZSh0aGlzKTsKLSAgICAJfQorICAgICAgICBpZiAoaXNDbG9zZWQpIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKCJDb25uZWN0aW9uIGNsb3NlZCIpOworICAgICAgICBpZiAoIXZhbGlkKSB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uICgiSW52YWxpZCBDb25uZWN0aW9uIik7CisgICAgICAgIGlmKGFjdGl2ZSA9PSBmYWxzZSkgeworICAgICAgICAgICAgbWMuY2hlY2tJZkFjdGl2ZSh0aGlzKTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGFjdGl2ZSBmbGFnIHRvIHRydWUKICAgICAgKgotICAgICAqIEBwYXJhbQlhY3R2CWJvb2xlYW4KKyAgICAgKiBAcGFyYW0gICAgYWN0diAgICBib29sZWFuCiAgICAgICovCiAgICAgdm9pZCBzZXRBY3RpdmUoYm9vbGVhbiBhY3R2KSB7CiAgICAgICAgIGFjdGl2ZSA9IGFjdHY7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCmluZGV4IGFjN2U3NDguLmYwNjc1YTQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCkBAIC0zMywxOSArMzMsMTkgQEAKICAqIFRoaXMgY2xhc3MgaXMgZXh0ZW5kZWQgYnkgdGhlIERhdGFTb3VyY2Ugc3BlY2lmaWMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGZhY3RvcmllcwogICogYW5kIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGZvciB0aGUgPGNvZGU+RHJpdmVyTWFuYWdlcjwvY29kZT4uCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wOC8wMwotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDgvMDMKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIAotcHVibGljIGFic3RyYWN0IGNsYXNzIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSwgCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LAogICAgIGphdmEuaW8uU2VyaWFsaXphYmxlIHsKLSAgICAKKwogICAgIHByb3RlY3RlZCBEYXRhU291cmNlU3BlYyBzcGVjID0gbmV3IERhdGFTb3VyY2VTcGVjKCk7CiAgICAgcHJvdGVjdGVkIHRyYW5zaWVudCBEYXRhU291cmNlT2JqZWN0QnVpbGRlciBkc09iakJ1aWxkZXI7Ci0gICAgCisKICAgICBwcm90ZWN0ZWQgamF2YS5pby5QcmludFdyaXRlciBsb2dXcml0ZXIgPSBudWxsOwogICAgIHByb3RlY3RlZCBqYWthcnRhLnJlc291cmNlLnNwaS5SZXNvdXJjZUFkYXB0ZXIgcmEgPSBudWxsOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgTG9nZ2VyIF9sb2dnZXI7CiAgICAgc3RhdGljIHsKICAgICAgICAgX2xvZ2dlciA9IExvZ2dlci5nZXRBbm9ueW1vdXNMb2dnZXIoKTsKQEAgLTU0LDggKzU0LDggQEAKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgQ29ubmVjdGlvbiBGYWN0b3J5IGluc3RhbmNlLiBUaGUgPGNvZGU+Q29ubmVjdGlvbk1hbmFnZXI8L2NvZGU+IGltcGxlbWVudGF0aW9uCiAgICAgICogb2YgdGhlIHJlc291cmNlIGFkYXB0ZXIgaXMgdXNlZCBoZXJlLgotICAgICAqIAotICAgICAqIEByZXR1cm4JR2VuZXJpYyBKREJDIENvbm5lY3RvciBpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29kZT4KKyAgICAgKgorICAgICAqIEByZXR1cm4gICAgR2VuZXJpYyBKREJDIENvbm5lY3RvciBpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgT2JqZWN0IGNyZWF0ZUNvbm5lY3Rpb25GYWN0b3J5KCkgewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtNjMsMTYgKzYzLDE2IEBACiAgICAgICAgIH0KICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2UgY2YgPSBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2UoCiAgICAgICAgICAgICAoamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KXRoaXMsIG51bGwpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gY2Y7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIENvbm5lY3Rpb24gRmFjdG9yeSBpbnN0YW5jZS4gVGhlIDxjb2RlPkNvbm5lY3Rpb25NYW5hZ2VyPC9jb2RlPiBpbXBsZW1lbnRhdGlvbgogICAgICAqIG9mIHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIgaXMgdXNlZCBoZXJlLgotICAgICAqIAotICAgICAqIEBwYXJhbQljeE1hbmFnZXIJPGNvZGU+Q29ubmVjdGlvbk1hbmFnZXI8L2NvZGU+IHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICogQHJldHVybglHZW5lcmljIEpEQkMgQ29ubmVjdG9yIGltcGxlbWVudGF0aW9uIG9mIDxjb2RlPmphdmF4LnNxbC5EYXRhU291cmNlPC9jb2RlPgorICAgICAqCisgICAgICogQHBhcmFtICAgIGN4TWFuYWdlciAgICA8Y29kZT5Db25uZWN0aW9uTWFuYWdlcjwvY29kZT4gcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiBAcmV0dXJuICAgIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IgaW1wbGVtZW50YXRpb24gb2YgPGNvZGU+amF2YXguc3FsLkRhdGFTb3VyY2U8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIE9iamVjdCBjcmVhdGVDb25uZWN0aW9uRmFjdG9yeShqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uTWFuYWdlciBjeE1hbmFnZXIpIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTgwLDU1ICs4MCw1NSBAQAogICAgICAgICB9CiAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlIGNmID0gbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlKAogICAgICAgICAgICAgKGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSl0aGlzLCBjeE1hbmFnZXIpOwotICAgICAgICByZXR1cm4gY2Y7IAorICAgICAgICByZXR1cm4gY2Y7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIG5ldyBwaHlzaWNhbCBjb25uZWN0aW9uIHRvIHRoZSB1bmRlcmx5aW5nIEVJUyByZXNvdXJjZQogICAgICAqIG1hbmFnZXIuCi0gICAgICogCi0gICAgICogQHBhcmFtCXN1YmplY3QJPGNvZGU+U3ViamVjdDwvY29kZT4gaW5zdGFuY2UgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKiBAcGFyYW0JY3hSZXF1ZXN0SW5mbwk8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHdoaWNoIG1heSBiZSBjcmVhdGVkCi0gICAgICogICAgICAgCSAgICAgICAgICAgICAJYXMgYSByZXN1bHQgb2YgdGhlIGludm9jYXRpb24gPGNvZGU+Z2V0Q29ubmVjdGlvbih1c2VyLCBwYXNzd29yZCk8L2NvZGU+Ci0gICAgICogICAgICAgCSAgICAgICAgICAgICAJb24gdGhlIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdAotICAgICAqIEByZXR1cm4JPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBjcmVhdGVkCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBpbnN0YW50aWF0aW5nIHRoZQotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0IHVzZWQgZm9yIHRoZQotICAgICAqICAgICAgIAkJCQljcmVhdGlvbiBvZiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdAotICAgICAqIEB0aHJvd3MJU2VjdXJpdHlFeGNlcHRpb24JaWYgdGhlcmUgaW5vIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0Ci0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAlzYXRpc2Z5aW5nIHRoaXMgcmVxdWVzdCAKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZSAKLSAgICAgKgkJCQkJCXBoeXNpY2FsIGNvbm5lY3Rpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzdWJqZWN0ICAgIDxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogQHBhcmFtICAgIGN4UmVxdWVzdEluZm8gICAgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiB3aGljaCBtYXkgYmUgY3JlYXRlZAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIGEgcmVzdWx0IG9mIHRoZSBpbnZvY2F0aW9uIDxjb2RlPmdldENvbm5lY3Rpb24odXNlciwgcGFzc3dvcmQpPC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIHRoZSA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QgY3JlYXRlZAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gaW5zdGFudGlhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdCB1c2VkIGZvciB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRpb24gb2YgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QKKyAgICAgKiBAdGhyb3dzICAgIFNlY3VyaXR5RXhjZXB0aW9uICAgIGlmIHRoZXJlIGlubyA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F0aXNmeWluZyB0aGlzIHJlcXVlc3QKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgcGh5c2ljYWwgY29ubmVjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyBhYnN0cmFjdCBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBjcmVhdGVNYW5hZ2VkQ29ubmVjdGlvbihqYXZheC5zZWN1cml0eS5hdXRoLlN1YmplY3Qgc3ViamVjdCwKICAgICAgICAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxdWVzdEluZm8pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIC8qKgotICAgICAqIENoZWNrIGlmIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpcyBlcXVhbCB0byAKKyAgICAgKiBDaGVjayBpZiB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaXMgZXF1YWwgdG8KICAgICAgKiBhbm90aGVyIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4uCi0gICAgICogCi0gICAgICogQHBhcmFtCW90aGVyCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0IGZvciBjaGVja2luZyBlcXVhbGl0eSB3aXRoCi0gICAgICogQHJldHVybgl0cnVlCWlmIHRoZSBwcm9wZXJ0eSBzZXRzIG9mIGJvdGggdGhlIAotICAgICAqCQkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3RzIGFyZSB0aGUgc2FtZQotICAgICAqCQlmYWxzZQlvdGhlcndpc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBvdGhlciAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdCBmb3IgY2hlY2tpbmcgZXF1YWxpdHkgd2l0aAorICAgICAqIEByZXR1cm4gICAgdHJ1ZSAgICBpZiB0aGUgcHJvcGVydHkgc2V0cyBvZiBib3RoIHRoZQorICAgICAqICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3RzIGFyZSB0aGUgc2FtZQorICAgICAqICAgICAgICBmYWxzZSAgICBvdGhlcndpc2UKICAgICAgKi8KICAgICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG90aGVyKTsKLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgbG9nIHdyaXRlciBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEBzZWUJPGNvZGU+c2V0TG9nV3JpdGVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldExvZ1dyaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgamF2YS5pby5QcmludFdyaXRlciBnZXRMb2dXcml0ZXIoKSB7CiAgICAgICAgIHJldHVybiBsb2dXcml0ZXI7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSA8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEBzZWUJPGNvZGU+c2V0UmVzb3VyY2VBZGFwdGVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRSZXNvdXJjZUFkYXB0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIGpha2FydGEucmVzb3VyY2Uuc3BpLlJlc291cmNlQWRhcHRlciBnZXRSZXNvdXJjZUFkYXB0ZXIoKSB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC0xMzYsMTEgKzEzNiwxMSBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiByYTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSBoYXNoIGNvZGUgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPi4KICAgICAgKgotICAgICAqIEByZXR1cm4JaGFzaCBjb2RlIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGhhc2ggY29kZSBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIGludCBoYXNoQ29kZSgpewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtMTQ4LDQxICsxNDgsNDEgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gc3BlYy5oYXNoQ29kZSgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFJldHVybnMgYSBtYXRjaGVkIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBmcm9tIHRoZSBjYW5kaWRhdGUgCisgICAgICogUmV0dXJucyBhIG1hdGNoZWQgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGZyb20gdGhlIGNhbmRpZGF0ZQogICAgICAqIHNldCBvZiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0cy4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JY29ubmVjdGlvblNldAk8Y29kZT5TZXQ8L2NvZGU+IG9mICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KLSAgICAgKgkJCQlvYmplY3RzIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICogQHBhcmFtCXN1YmplY3QJIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICoJCQlmb3IgcmV0cmlldmluZyBpbmZvcm1hdGlvbiByZXF1aXJlZCBmb3IgbWF0Y2hpbmcKLSAgICAgKiBAcGFyYW0JY3hSZXF1ZXN0SW5mbwk8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICoJCQkJZm9yIHJldHJpZXZpbmcgaW5mb3JtYXRpb24gcmVxdWlyZWQgZm9yIG1hdGNoaW5nCi0gICAgICogQHJldHVybgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdGhhdCBpcyB0aGUgYmVzdCBtYXRjaCBzYXRpc2Z5aW5nIHRoaXMgcmVxdWVzdAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgYWNjZXNzaW5nIHRoZSA8Y29kZT5TdWJqZWN0PC9jb2RlPgotICAgICAqCQkJCQlwYXJhbWV0ZXIgb3IgdGhlIDxjb2RlPlNldDwvY29kZT4gb2YgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+Ci0gICAgICoJCQkJCW9iamVjdHMgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBjb25uZWN0aW9uU2V0ICAgIDxjb2RlPlNldDwvY29kZT4gb2YgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgIG9iamVjdHMgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiBAcGFyYW0gICAgc3ViamVjdCAgICAgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiAgICAgICAgICAgIGZvciByZXRyaWV2aW5nIGluZm9ybWF0aW9uIHJlcXVpcmVkIGZvciBtYXRjaGluZworICAgICAqIEBwYXJhbSAgICBjeFJlcXVlc3RJbmZvICAgIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiAgICAgICAgICAgICAgICBmb3IgcmV0cmlldmluZyBpbmZvcm1hdGlvbiByZXF1aXJlZCBmb3IgbWF0Y2hpbmcKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiB0aGF0IGlzIHRoZSBiZXN0IG1hdGNoIHNhdGlzZnlpbmcgdGhpcyByZXF1ZXN0CisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBhY2Nlc3NpbmcgdGhlIDxjb2RlPlN1YmplY3Q8L2NvZGU+CisgICAgICogICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlciBvciB0aGUgPGNvZGU+U2V0PC9jb2RlPiBvZiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgb2JqZWN0cyBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgogICAgICAqLwotICAgIHB1YmxpYyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYXRjaE1hbmFnZWRDb25uZWN0aW9ucyhqYXZhLnV0aWwuU2V0IGNvbm5lY3Rpb25TZXQsIAorICAgIHB1YmxpYyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYXRjaE1hbmFnZWRDb25uZWN0aW9ucyhqYXZhLnV0aWwuU2V0IGNvbm5lY3Rpb25TZXQsCiAgICAgICAgIGphdmF4LnNlY3VyaXR5LmF1dGguU3ViamVjdCBzdWJqZWN0LCBDb25uZWN0aW9uUmVxdWVzdEluZm8gY3hSZXF1ZXN0SW5mbykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBtYXRjaE1hbmFnZWRDb25uZWN0aW9ucyIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmKGNvbm5lY3Rpb25TZXQgPT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgUGFzc3dvcmRDcmVkZW50aWFsIHBjID0gU2VjdXJpdHlVdGlscy5nZXRQYXNzd29yZENyZWRlbnRpYWwodGhpcywgc3ViamVjdCwgY3hSZXF1ZXN0SW5mbyk7Ci0gICAgICAgIAorCiAgICAgICAgIGphdmEudXRpbC5JdGVyYXRvciBpdGVyID0gY29ubmVjdGlvblNldC5pdGVyYXRvcigpOwogICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWMgPSBudWxsOwogICAgICAgICB3aGlsZShpdGVyLmhhc05leHQoKSkgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBtYyA9IChjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24pIGl0ZXIubmV4dCgpOwogICAgICAgICAgICAgfSBjYXRjaChqYXZhLnV0aWwuTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiBuc2VlKSB7Ci0JICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19pdGVyIik7CisgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19pdGVyIik7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKG5zZWUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmKHBjID09IG51bGwgJiYgdGhpcy5lcXVhbHMobWMuZ2V0TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KCkpKSB7CkBAIC0xOTEsNyArMTkxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgaXNWYWxpZChtYyk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYzsKICAgICAgICAgICAgICAgICB9IGNhdGNoKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7Ci0JICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfcmUiLCByZSk7CisgICAgICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfcmUiLCByZSk7CiAgICAgICAgICAgICAgICAgICAgIG1jLmNvbm5lY3Rpb25FcnJvck9jY3VycmVkKHJlLCBudWxsKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgaWYoU2VjdXJpdHlVdGlscy5pc1Bhc3N3b3JkQ3JlZGVudGlhbEVxdWFsKHBjLCBtYy5nZXRQYXNzd29yZENyZWRlbnRpYWwoKSkgPT0gdHJ1ZSkgewpAQCAtMjAwLDQ1ICsyMDAsNDUgQEAKICAgICAgICAgICAgICAgICAgICAgaXNWYWxpZChtYyk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYzsKICAgICAgICAgICAgICAgICB9IGNhdGNoKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7Ci0JICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5yZSIpOworICAgICAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMucmUiKTsKICAgICAgICAgICAgICAgICAgICAgbWMuY29ubmVjdGlvbkVycm9yT2NjdXJyZWQocmUsIG51bGwpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICAvL0dKQ0lOVAogICAgIC8qKgogICAgICAqIENoZWNrcyBpZiBhIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpcyB0byBiZSB2YWxpZGF0ZWQgb3Igbm90CiAgICAgICogYW5kIHZhbGlkYXRlcyBpdCBvciByZXR1cm5zLgotICAgICAqIAotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgb3IKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAJCWlmIHZhbGlkYXRpb24gbWV0aG9kIGlzIG5vdCBwcm9wZXIKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBtYyAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgb3IKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHZhbGlkYXRpb24gbWV0aG9kIGlzIG5vdCBwcm9wZXIKICAgICAgKi8KICAgICB2b2lkIGlzVmFsaWQoY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1jKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogCiAgICAgICAgIGlmKG1jLmlzVHJhbnNhY3Rpb25JblByb2dyZXNzKCkpIHsKLQkgICAgcmV0dXJuOworICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAKLSAgICAgICAgYm9vbGVhbiBjb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkID0gCisKKyAgICAgICAgYm9vbGVhbiBjb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkID0KICAgICAgICAgICAgIChuZXcgQm9vbGVhbihzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVEKS50b0xvd2VyQ2FzZSgpKSkuYm9vbGVhblZhbHVlKCk7CiAgICAgICAgIGlmKCBjb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkID09IGZhbHNlIHx8IG1jID09IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgCisKKwogICAgICAgICBTdHJpbmcgdmFsaWRhdGlvbk1ldGhvZCA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05NRVRIT0QpLnRvTG93ZXJDYXNlKCk7Ci0gICAgICAgIAorCiAgICAgICAgIG1jLmNoZWNrSWZWYWxpZCgpOwogICAgICAgICAvKioKICAgICAgICAgICogVGhlIGFib3ZlIGNhbGwgY2hlY2tzIGlmIHRoZSBhY3R1YWwgcGh5c2ljYWwgY29ubmVjdGlvbgogICAgICAgICAgKiBpcyB1c2FibGUgb3Igbm90LgogICAgICAgICAgKi8KICAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBjb24gPSBtYy5nZXRBY3R1YWxDb25uZWN0aW9uKCk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKHZhbGlkYXRpb25NZXRob2QuZXF1YWxzKCJhdXRvLWNvbW1pdCIpID09IHRydWUpIHsKICAgICAgICAgICAgIGlzVmFsaWRCeUF1dG9Db21taXQoY29uKTsKICAgICAgICAgfSBlbHNlIGlmKHZhbGlkYXRpb25NZXRob2QuZXF1YWxzSWdub3JlQ2FzZSgibWV0YS1kYXRhIikgPT0gdHJ1ZSkgewpAQCAtMjQ5LDI4ICsyNDksMjggQEAKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIHZhbGlkYXRpb24gbWV0aG9kIGlzIG5vdCBwcm9wZXIiKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENoZWNrcyBpZiBhIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IGlzIHZhbGlkIG9yIG5vdAogICAgICAqIGJ5IGNoZWNraW5nIGl0cyBhdXRvIGNvbW1pdCBwcm9wZXJ0eS4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JY29uCTxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgY29uICAgIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCiAgICAgICovCiAgICAgcHJvdGVjdGVkIHZvaWQgaXNWYWxpZEJ5QXV0b0NvbW1pdChqYXZhLnNxbC5Db25uZWN0aW9uIGNvbikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYoY29uID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzICIKICAgICAgICAgICAgICAgICArICJ0aGUgY29ubmVjdGlvbiBpcyBudWxsIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgLy8gTm90aWNlIHRoYXQgdXNpbmcgc29tZXRoaW5nIGxpa2UgCisgICAgICAgICAgIC8vIE5vdGljZSB0aGF0IHVzaW5nIHNvbWV0aGluZyBsaWtlCiAgICAgICAgICAgIC8vIGRiQ29uLnNldEF1dG9Db21taXQoZGJDb24uZ2V0QXV0b0NvbW1pdCgpKSB3aWxsIGNhdXNlIHByb2JsZW1zIHdpdGgKICAgICAgICAgICAgLy8gc29tZSBkcml2ZXJzIGxpa2Ugc3liYXNlCi0gICAgICAgICAgIC8vIFdlIGRvIG5vdCB2YWxpZGF0ZSBjb25uZWN0aW9ucyB0aGF0IGFyZSBhbHJlYWR5IGVubGlzdGVkIAotCSAgIC8vaW4gYSB0cmFuc2FjdGlvbiAKLQkgICAvLyBXZSBjeWNsZSBhdXRvY29tbWl0IHRvIHRydWUgYW5kIGZhbHNlIHRvIGJ5LXBhc3MgZHJpdmVycyB0aGF0IAotCSAgIC8vIG1pZ2h0IGNhY2hlIHRoZSBjYWxsIHRvIHNldCBhdXRvY29taXR0CisgICAgICAgICAgIC8vIFdlIGRvIG5vdCB2YWxpZGF0ZSBjb25uZWN0aW9ucyB0aGF0IGFyZSBhbHJlYWR5IGVubGlzdGVkCisgICAgICAgLy9pbiBhIHRyYW5zYWN0aW9uCisgICAgICAgLy8gV2UgY3ljbGUgYXV0b2NvbW1pdCB0byB0cnVlIGFuZCBmYWxzZSB0byBieS1wYXNzIGRyaXZlcnMgdGhhdAorICAgICAgIC8vIG1pZ2h0IGNhY2hlIHRoZSBjYWxsIHRvIHNldCBhdXRvY29taXR0CiAgICAgICAgICAgIC8vIEFsc28gbm90aWNlIHRoYXQgc29tZSBYQSBkYXRhIHNvdXJjZXMgd2lsbCB0aHJvdyBhbmQgZXhjZXB0aW9uIGlmCiAgICAgICAgICAgIC8vIHlvdSB0cnkgdG8gY2FsbCBzZXRBdXRvQ29tbWl0LCBmb3IgdGhlbSB0aGlzIG1ldGhvZCBpcyBub3QgcmVjb21tZW5kZWQKIApAQCAtMjgxLDkwICsyODEsOTAgQEAKICAgICAgICAgICAgICAgICBjb24ucm9sbGJhY2soKTsgLy8gcHJldmVudHMgdW5jb21wbGV0ZWQgdHJhbnNhY3Rpb24gZXhjZXB0aW9ucwogICAgICAgICAgICAgICAgIGNvbi5zZXRBdXRvQ29tbWl0KHRydWUpOwogICAgICAgICAgICB9Ci0gICAgICAgIAotCSAgIGNvbi5zZXRBdXRvQ29tbWl0KGFjKTsKKworICAgICAgIGNvbi5zZXRBdXRvQ29tbWl0KGFjKTsKIAogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2F1dG9jb21taXQiKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfYXV0b2NvbW1pdCIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENoZWNrcyBpZiBhIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IGlzIHZhbGlkIG9yIG5vdAogICAgICAqIGJ5IGNoZWNraW5nIGl0cyBtZXRhIGRhdGEuCi0gICAgICogCi0gICAgICogQHBhcmFtCWNvbgk8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqCisgICAgICogQHBhcmFtICAgIGNvbiAgICA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqLwogICAgIHByb3RlY3RlZCB2b2lkIGlzVmFsaWRCeU1ldGFEYXRhKGphdmEuc3FsLkNvbm5lY3Rpb24gY29uKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihjb24gPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgIgogICAgICAgICAgICAgICAgICsgInRoZSBjb25uZWN0aW9uIGlzIG51bGwiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgamF2YS5zcWwuRGF0YWJhc2VNZXRhRGF0YSBkbWQgPSBjb24uZ2V0TWV0YURhdGEoKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19tZCIpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19tZCIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgIgogICAgICAgICAgICAgICAgICsgImdldHRpbmcgdGhlIG1ldGEgZGF0YSBmYWlsZWQ6ICIgKyBzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDaGVja3MgaWYgYSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBpcyB2YWxpZCBvciBub3QKICAgICAgKiBieSBxdWVyeWluZyBhIHRhYmxlLgotICAgICAqIAotICAgICAqIEBwYXJhbQljb24JPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCi0gICAgICogQHBhcmFtCXRhYmxlTmFtZQl0YWJsZSB3aGljaCBzaG91bGQgYmUgcXVlcmllZAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgY29uICAgIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAorICAgICAqIEBwYXJhbSAgICB0YWJsZU5hbWUgICAgdGFibGUgd2hpY2ggc2hvdWxkIGJlIHF1ZXJpZWQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqLwotICAgIHByb3RlY3RlZCB2b2lkIGlzVmFsaWRCeVRhYmxlUXVlcnkoamF2YS5zcWwuQ29ubmVjdGlvbiBjb24sIAorICAgIHByb3RlY3RlZCB2b2lkIGlzVmFsaWRCeVRhYmxlUXVlcnkoamF2YS5zcWwuQ29ubmVjdGlvbiBjb24sCiAgICAgICAgIFN0cmluZyB0YWJsZU5hbWUpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGNvbiA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyAiCiAgICAgICAgICAgICAgICAgKyAidGhlIGNvbm5lY3Rpb24gaXMgbnVsbCIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBqYXZhLnNxbC5TdGF0ZW1lbnQgc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKICAgICAgICAgICAgIGphdmEuc3FsLlJlc3VsdFNldCBycyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KCJTRUxFQ1QgKiBGUk9NICIgKyB0YWJsZU5hbWUpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2V4ZWN1dGUiKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZXhlY3V0ZSIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgIgogICAgICAgICAgICAgICAgICsgInF1ZXJ5aW5nIHRoZSB0YWJsZSAiICsgdGFibGVOYW1lICsgIiBmYWlsZWQ6ICIgKyBzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBpc29sYXRpb24gbGV2ZWwgc3BlY2lmaWVkIGluIHRoZSA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+CiAgICAgICogZm9yIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gcGFzc2VkLgogICAgICAqCi0gICAgICogQHBhcmFtCW1jCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIGlzb2xhdGlvbiBwcm9wZXJ0eSBpcyBpbnZhbGlkCi0gICAgICoJCQkJCW9yIGlmIHRoZSBpc29sYXRpb24gY2Fubm90IGJlIHNldCBvdmVyIHRoZSBjb25uZWN0aW9uCisgICAgICogQHBhcmFtICAgIG1jICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIGlzb2xhdGlvbiBwcm9wZXJ0eSBpcyBpbnZhbGlkCisgICAgICogICAgICAgICAgICAgICAgICAgIG9yIGlmIHRoZSBpc29sYXRpb24gY2Fubm90IGJlIHNldCBvdmVyIHRoZSBjb25uZWN0aW9uCiAgICAgICovCiAgICAgcHJvdGVjdGVkIHZvaWQgc2V0SXNvbGF0aW9uKGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKLSAgICAJCi0gICAgCWphdmEuc3FsLkNvbm5lY3Rpb24gY29uID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpOwotICAgIAlpZihjb24gPT0gbnVsbCkgewotICAgIAkgICAgcmV0dXJuOwotICAgIAl9Ci0gICAgCQotICAgIAlTdHJpbmcgdHJhbklzb2xhdGlvbiA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKLSAgICAJaWYodHJhbklzb2xhdGlvbiAhPSBudWxsICYmIHRyYW5Jc29sYXRpb24uZXF1YWxzKCIiKSA9PSBmYWxzZSkgewotICAgIAkgICAgaW50IHRyYW5Jc29sYXRpb25JbnQgPSBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbkludCh0cmFuSXNvbGF0aW9uKTsKLSAgICAJICAgIHRyeSB7Ci0gICAgCSAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sYXRpb25JbnQpOwotICAgIAkgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfdHhfbGV2ZWwiKTsKLSAgICAJICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gY291bGQgIgotICAgIAkgICAgICAgICAgICArICJub3QgYmUgc2V0OiAiICsgc3FsZS5nZXRNZXNzYWdlKCkpOwotICAgIAkgICAgfQotICAgIAl9CisKKyAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBjb24gPSBtYy5nZXRBY3R1YWxDb25uZWN0aW9uKCk7CisgICAgICAgIGlmKGNvbiA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBTdHJpbmcgdHJhbklzb2xhdGlvbiA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKKyAgICAgICAgaWYodHJhbklzb2xhdGlvbiAhPSBudWxsICYmIHRyYW5Jc29sYXRpb24uZXF1YWxzKCIiKSA9PSBmYWxzZSkgeworICAgICAgICAgICAgaW50IHRyYW5Jc29sYXRpb25JbnQgPSBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbkludCh0cmFuSXNvbGF0aW9uKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sYXRpb25JbnQpOworICAgICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgeworICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfdHhfbGV2ZWwiKTsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gY291bGQgIgorICAgICAgICAgICAgICAgICAgICArICJub3QgYmUgc2V0OiAiICsgc3FsZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmVzZXRzIHRoZSBpc29sYXRpb24gbGV2ZWwgZm9yIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gcGFzc2VkLgogICAgICAqIElmIHRoZSB0cmFuc2FjdGlvbiBsZXZlbCBpcyB0byBiZSBndWFyYW50ZWVkIHRvIGJlIHRoZSBzYW1lIGFzIHRoZSBvbmUKQEAgLTM3MywzODIgKzM3MywzODIgQEAKICAgICAgKiBpc29sYXRpb24gbGV2ZWwgZnJvbSB0aGUgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBwYXNzZWQuIEVsc2UsCiAgICAgICogaXQgc2V0cyBpdCB0byB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIHBhc3NlZC4KICAgICAgKgotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KLSAgICAgKiBAcGFyYW0JdHJhbklzb2wJaW50Ci0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgaXNvbGF0aW9uIHByb3BlcnR5IGlzIGludmFsaWQKLSAgICAgKgkJCQkJb3IgaWYgdGhlIGlzb2xhdGlvbiBjYW5ub3QgYmUgc2V0IG92ZXIgdGhlIGNvbm5lY3Rpb24KKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogQHBhcmFtICAgIHRyYW5Jc29sICAgIGludAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIGlzb2xhdGlvbiBwcm9wZXJ0eSBpcyBpbnZhbGlkCisgICAgICogICAgICAgICAgICAgICAgICAgIG9yIGlmIHRoZSBpc29sYXRpb24gY2Fubm90IGJlIHNldCBvdmVyIHRoZSBjb25uZWN0aW9uCiAgICAgICovCiAgICAgdm9pZCByZXNldElzb2xhdGlvbihjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWMsIGludCB0cmFuSXNvbCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKLSAgICAJCi0gICAgCWphdmEuc3FsLkNvbm5lY3Rpb24gY29uID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpOwotICAgIAlpZihjb24gPT0gbnVsbCkgewotICAgIAkgICAgcmV0dXJuOwotICAgIAl9Ci0gICAgCQotICAgIAlTdHJpbmcgdHJhbklzb2xhdGlvbiA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKLSAgICAJaWYodHJhbklzb2xhdGlvbiAhPSBudWxsICYmIHRyYW5Jc29sYXRpb24uZXF1YWxzKCIiKSA9PSBmYWxzZSkgewotICAgIAkgICAgU3RyaW5nIGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwpOwotICAgIAkgICAgCi0gICAgCSAgICBpZihndWFyYW50ZWVJc29sYXRpb25MZXZlbCAhPSBudWxsICYmIGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsLmVxdWFscygiIikgPT0gZmFsc2UpIHsKLSAgICAJICAgICAgICBib29sZWFuIGd1YXJhbnRlZSA9IChuZXcgQm9vbGVhbihndWFyYW50ZWVJc29sYXRpb25MZXZlbC50b0xvd2VyQ2FzZSgpKSkuYm9vbGVhblZhbHVlKCk7Ci0gICAgCSAgICAgICAgCi0gICAgCSAgICAgICAgaWYoZ3VhcmFudGVlKSB7Ci0gICAgCSAgICAgICAgICAgIGludCB0cmFuSXNvbGF0aW9uSW50ID0gZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb25JbnQodHJhbklzb2xhdGlvbik7Ci0gICAgCSAgICAgICAgICAgIHRyeSB7Ci0gICAgCSAgICAgICAgICAgICAgICBpZih0cmFuSXNvbGF0aW9uSW50ICE9IGNvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpKSB7Ci0gICAgCSAgICAgICAgICAgICAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sYXRpb25JbnQpOwotICAgIAkgICAgICAgICAgICAgICAgfQotICAgIAkgICAgICAgICAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgICAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3R4X2xldmVsIik7Ci0gICAgCSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBpc29sYXRpb24gbGV2ZWwgY291bGQgbm90IGJlIHNldDogIgotICAgIAkgICAgICAgICAgICAgICAgICAgICsgc3FsZS5nZXRNZXNzYWdlKCkpOwotICAgIAkgICAgICAgICAgICB9Ci0gICAgCSAgICAgICAgfSBlbHNlIHsKLSAgICAJICAgICAgICAgICAgdHJ5IHsKLSAgICAJICAgICAgICAgICAgICAgIGlmKHRyYW5Jc29sICE9IGNvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpKSB7Ci0gICAgCSAgICAgICAgICAgICAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sKTsKLSAgICAJICAgICAgICAgICAgICAgIH0KLSAgICAJICAgICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y190eF9sZXZlbCIpOwotICAgIAkgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgaXNvbGF0aW9uIGxldmVsIGNvdWxkIG5vdCBiZSBzZXQ6ICIKLSAgICAJICAgICAgICAgICAgICAgICAgICArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAJICAgICAgICAgICAgfQotICAgIAkgICAgICAgIH0KLSAgICAJICAgIH0KLSAgICAJfQorCisgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gY29uID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpOworICAgICAgICBpZihjb24gPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgU3RyaW5nIHRyYW5Jc29sYXRpb24gPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTik7CisgICAgICAgIGlmKHRyYW5Jc29sYXRpb24gIT0gbnVsbCAmJiB0cmFuSXNvbGF0aW9uLmVxdWFscygiIikgPT0gZmFsc2UpIHsKKyAgICAgICAgICAgIFN0cmluZyBndWFyYW50ZWVJc29sYXRpb25MZXZlbCA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkdVQVJBTlRFRUlTT0xBVElPTkxFVkVMKTsKKworICAgICAgICAgICAgaWYoZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwgIT0gbnVsbCAmJiBndWFyYW50ZWVJc29sYXRpb25MZXZlbC5lcXVhbHMoIiIpID09IGZhbHNlKSB7CisgICAgICAgICAgICAgICAgYm9vbGVhbiBndWFyYW50ZWUgPSAobmV3IEJvb2xlYW4oZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwudG9Mb3dlckNhc2UoKSkpLmJvb2xlYW5WYWx1ZSgpOworCisgICAgICAgICAgICAgICAgaWYoZ3VhcmFudGVlKSB7CisgICAgICAgICAgICAgICAgICAgIGludCB0cmFuSXNvbGF0aW9uSW50ID0gZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb25JbnQodHJhbklzb2xhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZih0cmFuSXNvbGF0aW9uSW50ICE9IGNvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sYXRpb25JbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7CisgICAgICAgICAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3R4X2xldmVsIik7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBpc29sYXRpb24gbGV2ZWwgY291bGQgbm90IGJlIHNldDogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgc3FsZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRyYW5Jc29sICE9IGNvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgeworICAgICAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y190eF9sZXZlbCIpOworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgaXNvbGF0aW9uIGxldmVsIGNvdWxkIG5vdCBiZSBzZXQ6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGludGVnZXIgZXF1aXZhbGVudCBvZiB0aGUgc3RyaW5nIHNwZWNpZnlpbmcKICAgICAgKiB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uLgogICAgICAqCi0gICAgICogQHBhcmFtCXRyYW5Jc29sYXRpb24Jc3RyaW5nIHNwZWNpZnlpbmcgdGhlIGlzb2xhdGlvbiBsZXZlbAotICAgICAqIEByZXR1cm4JdHJhbklzb2xhdGlvbkludAl0aGUgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gY29uc3RhbnQKLSAgICAgKgkJCQkJZm9yIHRoZSBzdHJpbmcgc3BlY2lmeWluZyB0aGUgaXNvbGF0aW9uLgorICAgICAqIEBwYXJhbSAgICB0cmFuSXNvbGF0aW9uICAgIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBpc29sYXRpb24gbGV2ZWwKKyAgICAgKiBAcmV0dXJuICAgIHRyYW5Jc29sYXRpb25JbnQgICAgdGhlIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IGNvbnN0YW50CisgICAgICogICAgICAgICAgICAgICAgICAgIGZvciB0aGUgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIGlzb2xhdGlvbi4KICAgICAgKi8KICAgICBwcml2YXRlIGludCBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbkludChTdHJpbmcgdHJhbklzb2xhdGlvbikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKLSAgICAJaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJyZWFkLXVuY29tbWl0dGVkIikpIHsKLSAgICAJICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1JFQURfVU5DT01NSVRURUQ7Ci0gICAgCX0gZWxzZSBpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInJlYWQtY29tbWl0dGVkIikpIHsKLSAgICAJICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1JFQURfQ09NTUlUVEVEOwotICAgIAl9IGVsc2UgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJyZXBlYXRhYmxlLXJlYWQiKSkgewotICAgIAkgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fUkVQRUFUQUJMRV9SRUFEOwotICAgIAl9IGVsc2UgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJzZXJpYWxpemFibGUiKSkgewotICAgIAkgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fU0VSSUFMSVpBQkxFOwotICAgIAl9IGVsc2UgewotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJJbnZhbGlkIHRyYW5zYWN0aW9uIGlzb2xhdGlvbjsgdGhlIHRyYW5zYWN0aW9uICIKLSAgICAJICAgICAgICArICJpc29sYXRpb24gbGV2ZWwgY2FuIGJlIGVtcHR5IG9yIGFueSBvZiB0aGUgZm9sbG93aW5nOiAiCi0gICAgCSAgICAgICAgICAgICsgInJlYWQtdW5jb21taXR0ZWQsIHJlYWQtY29tbWl0dGVkLCByZXBlYXRhYmxlLXJlYWQsIHNlcmlhbGl6YWJsZSIpOwotICAgIAl9CisgICAgICAgIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgicmVhZC11bmNvbW1pdHRlZCIpKSB7CisgICAgICAgICAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9SRUFEX1VOQ09NTUlUVEVEOworICAgICAgICB9IGVsc2UgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJyZWFkLWNvbW1pdHRlZCIpKSB7CisgICAgICAgICAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9SRUFEX0NPTU1JVFRFRDsKKyAgICAgICAgfSBlbHNlIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgicmVwZWF0YWJsZS1yZWFkIikpIHsKKyAgICAgICAgICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1JFUEVBVEFCTEVfUkVBRDsKKyAgICAgICAgfSBlbHNlIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgic2VyaWFsaXphYmxlIikpIHsKKyAgICAgICAgICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1NFUklBTElaQUJMRTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiSW52YWxpZCB0cmFuc2FjdGlvbiBpc29sYXRpb247IHRoZSB0cmFuc2FjdGlvbiAiCisgICAgICAgICAgICAgICAgKyAiaXNvbGF0aW9uIGxldmVsIGNhbiBiZSBlbXB0eSBvciBhbnkgb2YgdGhlIGZvbGxvd2luZzogIgorICAgICAgICAgICAgICAgICAgICArICJyZWFkLXVuY29tbWl0dGVkLCByZWFkLWNvbW1pdHRlZCwgcmVwZWF0YWJsZS1yZWFkLCBzZXJpYWxpemFibGUiKTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgbG9nIHdyaXRlciBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCW91dAk8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKiBAc2VlCTxjb2RlPmdldExvZ1dyaXRlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgb3V0ICAgIDxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0TG9nV3JpdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldExvZ1dyaXRlcihqYXZhLmlvLlByaW50V3JpdGVyIG91dCkgewogICAgICAgICBsb2dXcml0ZXIgPSBvdXQ7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0IHRoZSBhc3NvY2lhdGVkIDxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gSmF2YUJlYW4uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcmEJPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcyAKLSAgICAgKgkJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAc2VlCTxjb2RlPmdldFJlc291cmNlQWRhcHRlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcmEgICAgPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAqICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0UmVzb3VyY2VBZGFwdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFJlc291cmNlQWRhcHRlcihqYWthcnRhLnJlc291cmNlLnNwaS5SZXNvdXJjZUFkYXB0ZXIgcmEpIHsKLSAgICAgICAgdGhpcy5yYSA9IHJhOyAgIAorICAgICAgICB0aGlzLnJhID0gcmE7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdXNlciBuYW1lCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdXNlcgk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHVzZXIgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFVzZXIoU3RyaW5nIHVzZXIpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVVNFUk5BTUUsIHVzZXIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHVzZXIgbmFtZQogICAgICAqCi0gICAgICogQHJldHVybgl1c2VyCisgICAgICogQHJldHVybiAgICB1c2VyCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRVc2VyKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVVNFUk5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHVzZXIgbmFtZQogICAgICAqCi0gICAgICogQHBhcmFtCXVzZXIJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB1c2VyICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXR1c2VyKFN0cmluZyB1c2VyKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlVTRVJOQU1FLCB1c2VyKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSB1c2VyIG5hbWUKICAgICAgKgotICAgICAqIEByZXR1cm4JdXNlcgorICAgICAqIEByZXR1cm4gICAgdXNlcgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0dXNlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlVTRVJOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBwYXNzd29yZAogICAgICAqCi0gICAgICogQHBhcmFtCXBhc3N3ZAk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHBhc3N3ZCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0UGFzc3dvcmQoU3RyaW5nIHBhc3N3ZCkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5QQVNTV09SRCwgcGFzc3dkKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBwYXNzd29yZAogICAgICAqCi0gICAgICogQHJldHVybglwYXNzd2QKKyAgICAgKiBAcmV0dXJuICAgIHBhc3N3ZAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0UGFzc3dvcmQoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QQVNTV09SRCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgcGFzc3dvcmQKICAgICAgKgotICAgICAqIEBwYXJhbQlwYXNzd2QJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBwYXNzd2QgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHBhc3N3b3JkKFN0cmluZyBwYXNzd2QpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUEFTU1dPUkQsIHBhc3N3ZCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcGFzc3dvcmQKICAgICAgKgotICAgICAqIEByZXR1cm4JcGFzc3dkCisgICAgICogQHJldHVybiAgICBwYXNzd2QKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHBhc3N3b3JkKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUEFTU1dPUkQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGRhdGEgc291cmNlCiAgICAgICoKLSAgICAgKiBAcGFyYW0JY2xhc3NOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgY2xhc3NOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRDbGFzc05hbWUoU3RyaW5nIGNsYXNzTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5DTEFTU05BTUUsIGNsYXNzTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgZGF0YSBzb3VyY2UKICAgICAgKgotICAgICAqIEByZXR1cm4JY2xhc3NOYW1lCisgICAgICogQHJldHVybiAgICBjbGFzc05hbWUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldENsYXNzTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNMQVNTTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgZGF0YSBzb3VyY2UKICAgICAgKgotICAgICAqIEBwYXJhbQljbGFzc05hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBjbGFzc05hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGNsYXNzTmFtZShTdHJpbmcgY2xhc3NOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNMQVNTTkFNRSwgY2xhc3NOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBkYXRhIHNvdXJjZQogICAgICAqCi0gICAgICogQHJldHVybgljbGFzc05hbWUKKyAgICAgKiBAcmV0dXJuICAgIGNsYXNzTmFtZQogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Y2xhc3NOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ0xBU1NOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIGlmIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiBpcyByZXF1aXJlZCBvciBub3QKICAgICAgKgotICAgICAqIEBwYXJhbQljb25WbGRSZXEJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBjb25WbGRSZXEgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldENvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQoU3RyaW5nIGNvblZsZFJlcSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5DT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVELCBjb25WbGRSZXEpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgaWYgY29ubmVjdGlvbiB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkIG9yIG5vdAogICAgICAqCi0gICAgICogQHJldHVybgljb25uZWN0aW9uIHZhbGlkYXRpb24gcmVxdWlyZW1lbnQKKyAgICAgKiBAcmV0dXJuICAgIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiByZXF1aXJlbWVudAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgaWYgY29ubmVjdGlvbiB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkIG9yIG5vdAogICAgICAqCi0gICAgICogQHBhcmFtCWNvblZsZFJlcQk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGNvblZsZFJlcSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Y29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZChTdHJpbmcgY29uVmxkUmVxKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQsIGNvblZsZFJlcSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBpZiBjb25uZWN0aW9uIHZhbGlkYXRpb24gaXMgcmVxdWlyZWQgb3Igbm90CiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWNvbm5lY3Rpb24gdmFsaWRhdGlvbiByZXF1aXJlbWVudAorICAgICAqIEByZXR1cm4gICAgY29ubmVjdGlvbiB2YWxpZGF0aW9uIHJlcXVpcmVtZW50CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRjb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ09OTkVDVElPTlZBTElEQVRJT05SRVFVSVJFRCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdmFsaWRhdGlvbiBtZXRob2QgcmVxdWlyZWQKICAgICAgKgotICAgICAqIEBwYXJhbQl2YWxpZGF0aW9uTWV0aG9kCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdmFsaWRhdGlvbk1ldGhvZCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0VmFsaWRhdGlvbk1ldGhvZChTdHJpbmcgdmFsaWRhdGlvbk1ldGhvZCkgewogICAgICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTk1FVEhPRCwgdmFsaWRhdGlvbk1ldGhvZCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgY29ubmVjdGlvbiB2YWxpZGF0aW9uIG1ldGhvZCB0eXBlCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXZhbGlkYXRpb24gbWV0aG9kCisgICAgICogQHJldHVybiAgICB2YWxpZGF0aW9uIG1ldGhvZAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VmFsaWRhdGlvbk1ldGhvZCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05NRVRIT0QpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHZhbGlkYXRpb24gbWV0aG9kIHJlcXVpcmVkCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdmFsaWRhdGlvbk1ldGhvZAk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHZhbGlkYXRpb25NZXRob2QgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHZhbGlkYXRpb25NZXRob2QoU3RyaW5nIHZhbGlkYXRpb25NZXRob2QpIHsKICAgICAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05NRVRIT0QsIHZhbGlkYXRpb25NZXRob2QpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiBtZXRob2QgdHlwZQogICAgICAqCi0gICAgICogQHJldHVybgl2YWxpZGF0aW9uIG1ldGhvZAorICAgICAqIEByZXR1cm4gICAgdmFsaWRhdGlvbiBtZXRob2QKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHZhbGlkYXRpb25NZXRob2QoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OTUVUSE9EKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB0YWJsZSBjaGVja2VkIGZvciBkdXJpbmcgdmFsaWRhdGlvbgogICAgICAqCi0gICAgICogQHBhcmFtCXRhYmxlCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdGFibGUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFZhbGlkYXRpb25UYWJsZU5hbWUoU3RyaW5nIHRhYmxlKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05UQUJMRU5BTUUsIHRhYmxlKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSB0YWJsZSBjaGVja2VkIGZvciBkdXJpbmcgdmFsaWRhdGlvbgogICAgICAqCi0gICAgICogQHJldHVybgl0YWJsZQorICAgICAqIEByZXR1cm4gICAgdGFibGUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFZhbGlkYXRpb25UYWJsZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OVEFCTEVOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB0YWJsZSBjaGVja2VkIGZvciBkdXJpbmcgdmFsaWRhdGlvbgogICAgICAqCi0gICAgICogQHBhcmFtCXRhYmxlCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdGFibGUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHZhbGlkYXRpb25UYWJsZU5hbWUoU3RyaW5nIHRhYmxlKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05UQUJMRU5BTUUsIHRhYmxlKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSB0YWJsZSBjaGVja2VkIGZvciBkdXJpbmcgdmFsaWRhdGlvbgogICAgICAqCi0gICAgICogQHJldHVybgl0YWJsZQorICAgICAqIEByZXR1cm4gICAgdGFibGUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHZhbGlkYXRpb25UYWJsZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OVEFCTEVOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKgotICAgICAqIEBwYXJhbQl0cm5Jc29sYXRpb24JPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB0cm5Jc29sYXRpb24gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKFN0cmluZyB0cm5Jc29sYXRpb24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04sIHRybklzb2xhdGlvbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAorICAgICAqIEByZXR1cm4gICAgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKgotICAgICAqIEBwYXJhbQl0cm5Jc29sYXRpb24JPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB0cm5Jc29sYXRpb24gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHRyYW5zYWN0aW9uSXNvbGF0aW9uKFN0cmluZyB0cm5Jc29sYXRpb24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04sIHRybklzb2xhdGlvbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAorICAgICAqIEByZXR1cm4gICAgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXR0cmFuc2FjdGlvbklzb2xhdGlvbigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIGlmIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwgaXMgdG8gYmUgZ3VhcmFudGVlZAogICAgICAqCi0gICAgICogQHBhcmFtCWd1YXJhbnRlZUlzb2xhdGlvbgk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGd1YXJhbnRlZUlzb2xhdGlvbiAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0R3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwoU3RyaW5nIGd1YXJhbnRlZUlzb2xhdGlvbikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5HVUFSQU5URUVJU09MQVRJT05MRVZFTCwgZ3VhcmFudGVlSXNvbGF0aW9uKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKgotICAgICAqIEByZXR1cm4JaXNvbGF0aW9uIGxldmVsIGd1YXJhbnRlZQorICAgICAqIEByZXR1cm4gICAgaXNvbGF0aW9uIGxldmVsIGd1YXJhbnRlZQogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0R3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5HVUFSQU5URUVJU09MQVRJT05MRVZFTCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyBpZiB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsIGlzIHRvIGJlIGd1YXJhbnRlZWQKICAgICAgKgotICAgICAqIEBwYXJhbQlndWFyYW50ZWVJc29sYXRpb24JPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBndWFyYW50ZWVJc29sYXRpb24gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsKFN0cmluZyBndWFyYW50ZWVJc29sYXRpb24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwsIGd1YXJhbnRlZUlzb2xhdGlvbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWlzb2xhdGlvbiBsZXZlbCBndWFyYW50ZWUKKyAgICAgKiBAcmV0dXJuICAgIGlzb2xhdGlvbiBsZXZlbCBndWFyYW50ZWUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvUmVzb3VyY2VBZGFwdGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9SZXNvdXJjZUFkYXB0ZXIuamF2YQppbmRleCBlNjAzMzhmLi5jNWFkYTQ2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9SZXNvdXJjZUFkYXB0ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9SZXNvdXJjZUFkYXB0ZXIuamF2YQpAQCAtMjYsOCArMjYsOCBAQAogLyoqCiAgKiA8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDgvMDUKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA4LzA1CisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiBwdWJsaWMgY2xhc3MgUmVzb3VyY2VBZGFwdGVyIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuUmVzb3VyY2VBZGFwdGVyIHsKIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFZFUlNJT04gPSAyOwpAQCAtMzcsMzkgKzM3LDM5IEBACiAgICAgICogRW1wdHkgbWV0aG9kIGltcGxlbWVudGF0aW9uIGZvciBlbmRwb2ludEFjdGl2YXRpb24KICAgICAgKiB3aGljaCBqdXN0IHRocm93cyA8Y29kZT5Ob3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+CiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWVmCTxjb2RlPk1lc3NhZ2VFbmRwb2ludEZhY3Rvcnk8L2NvZGU+Ci0gICAgICogQHBhcmFtCWFzCTxjb2RlPkFjdGl2YXRpb25TcGVjPC9jb2RlPgotICAgICAqIEB0aHJvd3MJPGNvZGU+Tm90U3VwcG9ydGVkRXhjZXB0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBtZWYgICAgPGNvZGU+TWVzc2FnZUVuZHBvaW50RmFjdG9yeTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgYXMgICAgPGNvZGU+QWN0aXZhdGlvblNwZWM8L2NvZGU+CisgICAgICogQHRocm93cyAgICA8Y29kZT5Ob3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZW5kcG9pbnRBY3RpdmF0aW9uKE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgbWVmLCBBY3RpdmF0aW9uU3BlYyBhcykgdGhyb3dzIE5vdFN1cHBvcnRlZEV4Y2VwdGlvbiB7CiAgICAgICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIlRoaXMgbWV0aG9kIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgSkRCQyBjb25uZWN0b3IiKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBFbXB0eSBtZXRob2QgaW1wbGVtZW50YXRpb24gZm9yIGVuZHBvaW50RGVhY3RpdmF0aW9uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWVmCTxjb2RlPk1lc3NhZ2VFbmRwb2ludEZhY3Rvcnk8L2NvZGU+Ci0gICAgICogQHBhcmFtCWFzCTxjb2RlPkFjdGl2YXRpb25TcGVjPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBtZWYgICAgPGNvZGU+TWVzc2FnZUVuZHBvaW50RmFjdG9yeTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgYXMgICAgPGNvZGU+QWN0aXZhdGlvblNwZWM8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZW5kcG9pbnREZWFjdGl2YXRpb24oTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBtZWYsIEFjdGl2YXRpb25TcGVjIGFzKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogRW1wdHkgbWV0aG9kIGltcGxlbWVudGF0aW9uIGZvciBnZXRYQVJlc291cmNlcwogICAgICAqIHdoaWNoIGp1c3QgdGhyb3dzIDxjb2RlPk5vdFN1cHBvcnRlZEV4Y2VwdGlvbjwvY29kZT4KICAgICAgKgotICAgICAqIEBwYXJhbQlzcGVjcwk8Y29kZT5BY3RpdmF0aW9uU3BlYzwvY29kZT4gYXJyYXkKLSAgICAgKiBAdGhyb3dzCTxjb2RlPk5vdFN1cHBvcnRlZEV4Y2VwdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgc3BlY3MgICAgPGNvZGU+QWN0aXZhdGlvblNwZWM8L2NvZGU+IGFycmF5CisgICAgICogQHRocm93cyAgICA8Y29kZT5Ob3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFhBUmVzb3VyY2VbXSBnZXRYQVJlc291cmNlcyhBY3RpdmF0aW9uU3BlY1tdIHNwZWNzKSB0aHJvd3MgTm90U3VwcG9ydGVkRXhjZXB0aW9uIHsKICAgICAgICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiVGhpcyBtZXRob2QgaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBKREJDIGNvbm5lY3RvciIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEVtcHR5IGltcGxlbWVudGF0aW9uIG9mIHN0YXJ0IG1ldGhvZAogICAgICAqCi0gICAgICogQHBhcmFtCWN0eAk8Y29kZT5Cb290c3RyYXBDb250ZXh0PC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBjdHggICAgPGNvZGU+Qm9vdHN0cmFwQ29udGV4dDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzdGFydChCb290c3RyYXBDb250ZXh0IGN0eCkgdGhyb3dzIFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uIHsKIC8qCkBAIC03NywxNiArNzcsMTYgQEAKIAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc291cmNlIEFkYXB0ZXIgaXMgc3RhcnRpbmcgd2l0aCBjb25maWd1cmF0aW9uIDoiICsgcmFQcm9wKTsKICAgICAgICAgaWYgKHJhUHJvcCA9PSBudWxsIHx8ICFyYVByb3AuZXF1YWxzKCJWQUxJRCIpKSB7Ci0JICAgIHRocm93IG5ldyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbigiUmVzb3VyY2UgYWRhcHRlciBjYW5ub3Qgc3RhcnQuIEl0IGlzIGNvbmZpZ3VyZWQgYXMgOiAiICsgcmFQcm9wKTsKLQl9IAorICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VBZGFwdGVySW50ZXJuYWxFeGNlcHRpb24oIlJlc291cmNlIGFkYXB0ZXIgY2Fubm90IHN0YXJ0LiBJdCBpcyBjb25maWd1cmVkIGFzIDogIiArIHJhUHJvcCk7CisgICAgfQogKi8KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBFbXB0eSBpbXBsZW1lbnRhdGlvbiBvZiBzdG9wIG1ldGhvZAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHN0b3AoKSB7Ci0gICAgCisKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRSQVByb3BlcnR5KFN0cmluZyBzKSB7CkBAIC05Niw1ICs5Niw1IEBACiAgICAgcHVibGljIFN0cmluZyBnZXRSQVByb3BlcnR5KCkgewogICAgICAgICByZXR1cm4gcmFQcm9wOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvYnVpbGQueG1sCmluZGV4IDVlMTRkNDQuLmZmMGYwMmIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9idWlsZC54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPHByb2plY3QgbmFtZT0iamRiY19jb25uZWN0b3IiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9IiBkZWZhdWx0PSJidWlsZCI+CiAgIDxwcm9wZXJ0eSBuYW1lPSJwa2cuZGlyIiB2YWx1ZT0iY29tL3N1bi9namMvc3BpIi8+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iPgogICAgIDxhbnQgYW50ZmlsZT0iYnVpbGQueG1sIiBkaXI9IiR7Z2pjLmhvbWV9L2JpbiIgdGFyZ2V0PSJjbGVhbiIvPgogICA8L3RhcmdldD4KQEAgLTI5LDU1ICsyOSw1NSBAQAogICA8L3RhcmdldD4KIAogICA8dGFyZ2V0IG5hbWU9InBhY2thZ2UxNCI+Ci0gICAgCQotICAgIAk8bWtkaXIgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiLz4KLSAgICAJCi0JPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvamRiYy5qYXIiIGJhc2VkaXI9IiR7Y2xhc3MuZGlyfSIKKworICAgICAgICA8bWtkaXIgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiLz4KKworICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L2pkYmMuamFyIiBiYXNlZGlyPSIke2NsYXNzLmRpcn0iCiAgICAgICAgIGluY2x1ZGVzPSIke3BrZy5kaXJ9LyoqLyosIGNvbS9zdW4vZ2pjL3V0aWwvKiovKiwgY29tL3N1bi9namMvY29tbW9uLyoqLyoiIGV4Y2x1ZGVzPSJjb20vc3VuL2dqYy9jY2kvKiovKixjb20vc3VuL2dqYy9zcGkvMS40LyoqLyoiLz4KLSAgICAgICAgCisKICAgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19jcC5yYXIiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIgaW5jbHVkZXM9ImpkYmMuamFyIi8+Ci0gICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLWNwLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CQorICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS1jcC54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgogICAgICAgICA8L2NvcHk+Ci0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19jcC5yYXIiIHVwZGF0ZT0ieWVzIj4KLSAgIAkJPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgotICAgCQkJPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+Ci0gICAJCTwvbWV0YWluZj4KLSAgIAk8L2phcj4KLSAgIAkKLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX3hhLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KLSAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEteGEueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4JCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19jcC5yYXIiIHVwZGF0ZT0ieWVzIj4KKyAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgorICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+CisgICAgICAgICAgIDwvbWV0YWluZj4KKyAgICAgICA8L2phcj4KKworICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19feGEucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgorICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS14YS54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgogICAgICAgICA8L2NvcHk+Ci0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX194YS5yYXIiIHVwZGF0ZT0ieWVzIj4KLSAgIAkJPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgotICAgCQkJPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+Ci0gICAJCTwvbWV0YWluZj4KLSAgIAk8L2phcj4KLSAgIAkKLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RtLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KLSAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEtZG0ueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4JCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX194YS5yYXIiIHVwZGF0ZT0ieWVzIj4KKyAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgorICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+CisgICAgICAgICAgIDwvbWV0YWluZj4KKyAgICAgICA8L2phcj4KKworICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZG0ucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgorICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS1kbS54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgogICAgICAgICA8L2NvcHk+Ci0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kbS5yYXIiIHVwZGF0ZT0ieWVzIj4KLSAgIAkJPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgotICAgCQkJPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+Ci0gICAJCTwvbWV0YWluZj4KLSAgIAk8L2phcj4KLSAgIAkKLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RzLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KLSAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEtZHMueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4JCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kbS5yYXIiIHVwZGF0ZT0ieWVzIj4KKyAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgorICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+CisgICAgICAgICAgIDwvbWV0YWluZj4KKyAgICAgICA8L2phcj4KKworICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZHMucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgorICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS1kcy54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgogICAgICAgICA8L2NvcHk+Ci0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kcy5yYXIiIHVwZGF0ZT0ieWVzIj4KLSAgIAkJPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgotICAgCQkJPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+Ci0gICAJCTwvbWV0YWluZj4KLSAgIAk8L2phcj4KLSAgIAkKLSAgIAk8ZGVsZXRlIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9jb20iLz4KLSAgIAk8ZGVsZXRlIGZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9qZGJjLmphciIvPgotICAgCTxkZWxldGUgZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIvPgotICAgCQorICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZHMucmFyIiB1cGRhdGU9InllcyI+CisgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KKyAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgorICAgICAgICAgICA8L21ldGFpbmY+CisgICAgICAgPC9qYXI+CisKKyAgICAgICA8ZGVsZXRlIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9jb20iLz4KKyAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9qZGJjLmphciIvPgorICAgICAgIDxkZWxldGUgZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIvPgorCiAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQxNCIgZGVwZW5kcz0iY29tcGlsZTE0LCBwYWNrYWdlMTQiLz4KICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkMTMiLz4KLQk8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJidWlsZDE0LCBidWlsZDEzIi8+CisgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iYnVpbGQxNCwgYnVpbGQxMyIvPgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvcmEtZHMueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvcmEtZHMueG1sCmluZGV4IDYwZTFlNGUuLjY1ZThmYjUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L3JhLWRzLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9yYS1kcy54bWwKQEAgLTIyLDY5ICsyMiw2OSBAQAogICAgICAgICAgICB2ZXJzaW9uPSIxLjUiPgogCiAgICAgPCEtLSBUaGVyZSBjYW4gYmUgYW55IG51bWJlciBvZiAiZGVzY3JpcHRpb24iIGVsZW1lbnRzIGluY2x1ZGluZyAwIC0tPgotICAgIDwhLS0gVGhpcyBmaWVsZCBjYW4gYmUgb3B0aW9uYWxseSB1c2VkIGJ5IHRoZSBkcml2ZXIgdmVuZG9yIHRvIHByb3ZpZGUgYSAKKyAgICA8IS0tIFRoaXMgZmllbGQgY2FuIGJlIG9wdGlvbmFsbHkgdXNlZCBieSB0aGUgZHJpdmVyIHZlbmRvciB0byBwcm92aWRlIGEKICAgICAgICAgIGRlc2NyaXB0aW9uIGZvciB0aGUgcmVzb3VyY2UgYWRhcHRlci4KICAgICAtLT4KICAgICA8ZGVzY3JpcHRpb24+UmVzb3VyY2UgYWRhcHRlciB3cmFwcGluZyBEYXRhc291cmNlIGltcGxlbWVudGF0aW9uIG9mIGRyaXZlcjwvZGVzY3JpcHRpb24+Ci0gICAgCisKICAgICA8IS0tIFRoZXJlIGNhbiBiZSBhbnkgbnVtYmVyIG9mICJkaXNwbGF5LW5hbWUiIGVsZW1lbnRzIGluY2x1ZGluZyAwIC0tPgotICAgIDwhLS0gVGhlIGZpZWxkIGNhbiBiZSBvcHRpb25hbGx5IHVzZWQgYnkgdGhlIGRyaXZlciB2ZW5kb3IgdG8gcHJvdmlkZSBhIG5hbWUgdGhhdCAKKyAgICA8IS0tIFRoZSBmaWVsZCBjYW4gYmUgb3B0aW9uYWxseSB1c2VkIGJ5IHRoZSBkcml2ZXIgdmVuZG9yIHRvIHByb3ZpZGUgYSBuYW1lIHRoYXQKICAgICAgICAgIGlzIGludGVuZGVkIHRvIGJlIGRpc3BsYXllZCBieSB0b29scy4KICAgICAtLT4KICAgICA8ZGlzcGxheS1uYW1lPkRhdGFTb3VyY2UgUmVzb3VyY2UgQWRhcHRlcjwvZGlzcGxheS1uYW1lPgotICAgIAorCiAgICAgPCEtLSBUaGVyZSBjYW4gYmUgYW55IG51bWJlciBvZiAiaWNvbiIgZWxlbWVudHMgaW5jbHVkaW5nIDAgLS0+CiAgICAgPCEtLSBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUuCiAgICAgICAgIDxpY29uPgotICAgICAgICAgICAgVGhpcyAic21hbGwtaWNvbiIgZWxlbWVudCBjYW4gb2NjdXIgYXRtb3N0IG9uY2UuIFRoaXMgc2hvdWxkIHNwZWNpZnkgdGhlIAotICAgICAgICAgICAgYWJzb2x1dGUgb3IgdGhlIHJlbGF0aXZlIHBhdGggbmFtZSBvZiBhIGZpbGUgY29udGFpbmluZyBhIHNtYWxsICgxNiB4IDE2KSAKKyAgICAgICAgICAgIFRoaXMgInNtYWxsLWljb24iIGVsZW1lbnQgY2FuIG9jY3VyIGF0bW9zdCBvbmNlLiBUaGlzIHNob3VsZCBzcGVjaWZ5IHRoZQorICAgICAgICAgICAgYWJzb2x1dGUgb3IgdGhlIHJlbGF0aXZlIHBhdGggbmFtZSBvZiBhIGZpbGUgY29udGFpbmluZyBhIHNtYWxsICgxNiB4IDE2KQogICAgICAgICAgICAgaWNvbiAtIEpQRUcgb3IgR0lGIGltYWdlLiBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUuCiAgICAgICAgICAgICA8c21hbGwtaWNvbj5zbWFsbGljb24uanBnPC9zbWFsbC1pY29uPgotICAgICAgICAKLSAgICAgICAgICAgIFRoaXMgImxhcmdlLWljb24iIGVsZW1lbnQgY2FuIG9jY3VyIGF0bW9zdCBvbmNlLiBUaGlzIHNob3VsZCBzcGVjaWZ5IHRoZSAKLSAgICAgICAgICAgIGFic29sdXRlIG9yIHRoZSByZWxhdGl2ZSBwYXRoIG5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcgYSBzbWFsbCAoMzIgeCAzMikgCisKKyAgICAgICAgICAgIFRoaXMgImxhcmdlLWljb24iIGVsZW1lbnQgY2FuIG9jY3VyIGF0bW9zdCBvbmNlLiBUaGlzIHNob3VsZCBzcGVjaWZ5IHRoZQorICAgICAgICAgICAgYWJzb2x1dGUgb3IgdGhlIHJlbGF0aXZlIHBhdGggbmFtZSBvZiBhIGZpbGUgY29udGFpbmluZyBhIHNtYWxsICgzMiB4IDMyKQogICAgICAgICAgICAgaWNvbiAtIEpQRUcgb3IgR0lGIGltYWdlLiBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUuCi0gICAgICAgICAgICA8bGFyZ2UtaWNvbj5sYXJnZWljb24uanBnPC9sYXJnZS1pY29uPiAgIAorICAgICAgICAgICAgPGxhcmdlLWljb24+bGFyZ2VpY29uLmpwZzwvbGFyZ2UtaWNvbj4KICAgICAgICAgPC9pY29uPgogICAgIC0tPgogICAgIDxpY29uPgogICAgICAgICA8c21hbGwtaWNvbj48L3NtYWxsLWljb24+Ci0gICAgICAgIDxsYXJnZS1pY29uPjwvbGFyZ2UtaWNvbj4gICAKKyAgICAgICAgPGxhcmdlLWljb24+PC9sYXJnZS1pY29uPgogICAgIDwvaWNvbj4KLSAgICAKKwogICAgIDwhLS0gVGhlICJ2ZW5kb3ItbmFtZSIgZWxlbWVudCBzaG91bGQgb2NjdXIgZXhhY3RseSBvbmNlLiAtLT4KICAgICA8IS0tIFRoaXMgc2hvdWxkIHNwZWNpZnkgdGhlIG5hbWUgb2YgdGhlIGRyaXZlciB2ZW5kb3IuIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZS4KICAgICAgICAgPHZlbmRvci1uYW1lPlhZWiBJTkMuPC92ZW5kb3ItbmFtZT4KICAgICAtLT4KICAgICA8dmVuZG9yLW5hbWU+U3VuIE1pY3Jvc3lzdGVtczwvdmVuZG9yLW5hbWU+Ci0gICAgCisKICAgICA8IS0tIFRoZSAiZWlzLXR5cGUiIGVsZW1lbnQgc2hvdWxkIG9jY3VyIGV4YWN0bHkgb25jZS4gLS0+Ci0gICAgPCEtLSBUaGlzIHNob3VsZCBzcGVjaWZ5IHRoZSBkYXRhYmFzZSwgZm9yIGV4YW1wbGUgdGhlIHByb2R1Y3QgbmFtZSBvZiAKKyAgICA8IS0tIFRoaXMgc2hvdWxkIHNwZWNpZnkgdGhlIGRhdGFiYXNlLCBmb3IgZXhhbXBsZSB0aGUgcHJvZHVjdCBuYW1lIG9mCiAgICAgICAgICB0aGUgZGF0YWJhc2UgaW5kZXBlbmRlbnQgb2YgYW55IHZlcnNpb24gaW5mb3JtYXRpb24uIFRoZSBmb2xsb3dpbmcKICAgICAgICAgIGlzIGFuIGV4YW1wbGUuCiAgICAgICAgIDxlaXMtdHlwZT5YWVo8L2Vpcy10eXBlPgogICAgIC0tPgogICAgIDxlaXMtdHlwZT5EYXRhYmFzZTwvZWlzLXR5cGU+Ci0gICAgCisKICAgICA8IS0tIFRoZSAicmVzb3VyY2VhZGFwdGVyLXZlcnNpb24iIGVsZW1lbnQgc2hvdWxkIG9jY3VyIGV4YWN0bHkgb25jZS4gLS0+Ci0gICAgPCEtLSBUaGlzIHNwZWNpZmllcyBhIHN0cmluZyBiYXNlZCB2ZXJzaW9uIG9mIHRoZSByZXNvdXJjZSBhZGFwdGVyIGZyb20gCisgICAgPCEtLSBUaGlzIHNwZWNpZmllcyBhIHN0cmluZyBiYXNlZCB2ZXJzaW9uIG9mIHRoZSByZXNvdXJjZSBhZGFwdGVyIGZyb20KICAgICAgICAgIHRoZSBkcml2ZXIgdmVuZG9yLiBUaGUgZGVmYXVsdCBpcyBiZWluZyBzZXQgYXMgMS4wLiBUaGUgZHJpdmVyCiAgICAgICAgICB2ZW5kb3IgY2FuIGNoYW5nZSBpdCBhcyByZXF1aXJlZC4KICAgICAtLT4KICAgICA8cmVzb3VyY2VhZGFwdGVyLXZlcnNpb24+MS4wPC9yZXNvdXJjZWFkYXB0ZXItdmVyc2lvbj4KLSAgICAKKwogICAgIDwhLS0gVGhpcyAibGljZW5zZSIgZWxlbWVudCBjYW4gb2NjdXIgYXRtb3N0IG9uY2UgLS0+CiAgICAgPCEtLSBUaGlzIHNwZWNpZmllcyBsaWNlbnNpbmcgcmVxdWlyZW1lbnRzIGZvciB0aGUgcmVzb3VyY2UgYWRhcHRlciBtb2R1bGUuCiAgICAgICAgICBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUuCiAgICAgICAgIDxsaWNlbnNlPgogICAgICAgICAgICAgVGhlcmUgY2FuIGJlIGFueSBudW1iZXIgb2YgImRlc2NyaXB0aW9uIiBlbGVtZW50cyBpbmNsdWRpbmcgMC4KICAgICAgICAgICAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICAgICAgICAgICBUaGlzIGZpZWxkIGNhbiBiZSBvcHRpb25hbGx5IHVzZWQgYnkgdGhlIGRyaXZlciB2ZW5kb3IgdG8gCi0gICAgICAgICAgICAgICAgcHJvdmlkZSBhIGRlc2NyaXB0aW9uIGZvciB0aGUgbGljZW5zaW5nIHJlcXVpcmVtZW50cyBvZiB0aGUgCi0gICAgICAgICAgICAgICAgcmVzb3VyY2UgYWRhcHRlciBsaWtlIGR1cmF0aW9uIG9mIGxpY2Vuc2UsIG51bWJlcm9mIGNvbm5lY3Rpb24gCisgICAgICAgICAgICAgICAgVGhpcyBmaWVsZCBjYW4gYmUgb3B0aW9uYWxseSB1c2VkIGJ5IHRoZSBkcml2ZXIgdmVuZG9yIHRvCisgICAgICAgICAgICAgICAgcHJvdmlkZSBhIGRlc2NyaXB0aW9uIGZvciB0aGUgbGljZW5zaW5nIHJlcXVpcmVtZW50cyBvZiB0aGUKKyAgICAgICAgICAgICAgICByZXNvdXJjZSBhZGFwdGVyIGxpa2UgZHVyYXRpb24gb2YgbGljZW5zZSwgbnVtYmVyb2YgY29ubmVjdGlvbgogICAgICAgICAgICAgICAgIHJlc3RyaWN0aW9ucy4KICAgICAgICAgICAgIDwvZGVzY3JpcHRpb24+Ci0gICAgICAgIAorCiAgICAgICAgICAgICBUaGlzIHNwZWNpZmllcyB3aGV0aGVyIGEgbGljZW5zZSBpcyByZXF1aXJlZCB0byBkZXBsb3kgYW5kIHVzZSB0aGUgcmVzb3VyY2UgYWRhcHRlci4KICAgICAgICAgICAgIERlZmF1bHQgaXMgZmFsc2UuCiAgICAgICAgICAgICA8bGljZW5zZS1yZXF1aXJlZD5mYWxzZTwvbGljZW5zZS1yZXF1aXJlZD4KQEAgLTkzLDI0ICs5MywyNCBAQAogICAgIDxsaWNlbnNlPgogICAgICAgICA8bGljZW5zZS1yZXF1aXJlZD5mYWxzZTwvbGljZW5zZS1yZXF1aXJlZD4KICAgICA8L2xpY2Vuc2U+Ci0gICAgCisKICAgICA8cmVzb3VyY2VhZGFwdGVyPgotICAgICAgICAKLSAgICAgICAgPCEtLSAKLSAgICAgICAgICAgIFRoZSAiY29uZmlnLXByb3BlcnR5IiBlbGVtZW50cyBjYW4gaGF2ZSB6ZXJvIG9yIG1vcmUgImRlc2NyaXB0aW9uIiAKKworICAgICAgICA8IS0tCisgICAgICAgICAgICBUaGUgImNvbmZpZy1wcm9wZXJ0eSIgZWxlbWVudHMgY2FuIGhhdmUgemVybyBvciBtb3JlICJkZXNjcmlwdGlvbiIKICAgICAgICAgICAgIGVsZW1lbnRzLiBUaGUgImRlc2NyaXB0aW9uIiBlbGVtZW50cyBhcmUgbm90IGJlaW5nIGluY2x1ZGVkCiAgICAgICAgICAgICBpbiB0aGUgImNvbmZpZy1wcm9wZXJ0eSIgZWxlbWVudHMgYmVsb3cuIFRoZSBkcml2ZXIgdmVuZG9yIGNhbgogICAgICAgICAgICAgYWRkIHRoZW0gYXMgcmVxdWlyZWQuCiAgICAgICAgIC0tPgotICAgICAgICAKKwogICAgICAgICA8cmVzb3VyY2VhZGFwdGVyLWNsYXNzPmNvbS5zdW4uamRiY3JhLnNwaS5SZXNvdXJjZUFkYXB0ZXI8L3Jlc291cmNlYWRhcHRlci1jbGFzcz4KLSAgICAgICAgCisKICAgICAgICAgPG91dGJvdW5kLXJlc291cmNlYWRhcHRlcj4KLSAgICAgICAgCisKICAgICAgICAgICAgIDxjb25uZWN0aW9uLWRlZmluaXRpb24+Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICA8bWFuYWdlZGNvbm5lY3Rpb25mYWN0b3J5LWNsYXNzPmNvbS5zdW4uamRiY3JhLnNwaS5EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvbWFuYWdlZGNvbm5lY3Rpb25mYWN0b3J5LWNsYXNzPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPCEtLSBUaGVyZSBjYW4gYmUgYW55IG51bWJlciBvZiB0aGVzZSBlbGVtZW50cyBpbmNsdWRpbmcgMCAtLT4KICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+U2VydmVyTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CkBAIC0xMjIsMTM2ICsxMjIsMTM2IEBACiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT45MDkyPC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4gICAgCisgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlVzZXI8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+REJVU0VSPC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4gICAgCisgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlBhc3N3b3JkPC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPkRCUEFTU1dPUkQ8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+RGF0YWJhc2VOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPmpkYmM6cG9pbnRiYXNlOnNlcnZlcjovL2xvY2FsaG9zdDo5MDkyL3NxZS1zYW1wbGVzLG5ldzwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5EYXRhU291cmNlTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+RGVzY3JpcHRpb248L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+T3JhY2xlIHRoaW4gZHJpdmVyIERhdGFzb3VyY2U8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4gICAgCisgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPk5ldHdvcmtQcm90b2NvbDwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+Um9sZU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4gICAgCisgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkxvZ2luVGltZU91dDwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT4wPC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4gICAgCisgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkRyaXZlclByb3BlcnRpZXM8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4gICAgCisgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkRlbGltaXRlcjwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT4jPC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4gICAgCisgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkNsYXNzTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT5jb20ucG9pbnRiYXNlLmpkYmMuamRiY0RhdGFTb3VyY2U8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgIAkJPGNvbmZpZy1wcm9wZXJ0eT4gICAgCi0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktbmFtZT5Db25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkPC9jb25maWctcHJvcGVydHktbmFtZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPmZhbHNlPC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0gICAgICAgIAk8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgCTxjb25maWctcHJvcGVydHk+ICAgIAotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VmFsaWRhdGlvbk1ldGhvZDwvY29uZmlnLXByb3BlcnR5LW5hbWU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLSAgICAgICAgCTwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAJPGNvbmZpZy1wcm9wZXJ0eT4gICAgCi0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktbmFtZT5WYWxpZGF0aW9uVGFibGVOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotICAgICAgICAJPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgIAk8Y29uZmlnLXByb3BlcnR5PiAgICAKLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlRyYW5zYWN0aW9uSXNvbGF0aW9uPC9jb25maWctcHJvcGVydHktbmFtZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotICAgICAgICAJPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgIAk8Y29uZmlnLXByb3BlcnR5PiAgICAKLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkd1YXJhbnRlZUlzb2xhdGlvbkxldmVsPC9jb25maWctcHJvcGVydHktbmFtZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotICAgICAgICAJPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5Db25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPmZhbHNlPC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5WYWxpZGF0aW9uTWV0aG9kPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VmFsaWRhdGlvblRhYmxlTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlRyYW5zYWN0aW9uSXNvbGF0aW9uPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+R3VhcmFudGVlSXNvbGF0aW9uTGV2ZWw8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKwogICAgICAgICAgICAgICAgIDxjb25uZWN0aW9uZmFjdG9yeS1pbnRlcmZhY2U+amF2YXguc3FsLkRhdGFTb3VyY2U8L2Nvbm5lY3Rpb25mYWN0b3J5LWludGVyZmFjZT4KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIDxjb25uZWN0aW9uZmFjdG9yeS1pbXBsLWNsYXNzPmNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlPC9jb25uZWN0aW9uZmFjdG9yeS1pbXBsLWNsYXNzPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPGNvbm5lY3Rpb24taW50ZXJmYWNlPmphdmEuc3FsLkNvbm5lY3Rpb248L2Nvbm5lY3Rpb24taW50ZXJmYWNlPgotICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIDxjb25uZWN0aW9uLWltcGwtY2xhc3M+Y29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25Ib2xkZXI8L2Nvbm5lY3Rpb24taW1wbC1jbGFzcz4KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgPC9jb25uZWN0aW9uLWRlZmluaXRpb24+Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgPHRyYW5zYWN0aW9uLXN1cHBvcnQ+TG9jYWxUcmFuc2FjdGlvbjwvdHJhbnNhY3Rpb24tc3VwcG9ydD4KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICA8YXV0aGVudGljYXRpb24tbWVjaGFuaXNtPgogICAgICAgICAgICAgICAgIDwhLS0gVGhlcmUgY2FuIGJlIGFueSBudW1iZXIgb2YgImRlc2NyaXB0aW9uIiBlbGVtZW50cyBpbmNsdWRpbmcgMCAtLT4KICAgICAgICAgICAgICAgICA8IS0tIE5vdCBpbmNsdWRpbmcgdGhlICJkZXNjcmlwdGlvbiIgZWxlbWVudCAtLT4KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIDxhdXRoZW50aWNhdGlvbi1tZWNoYW5pc20tdHlwZT5CYXNpY1Bhc3N3b3JkPC9hdXRoZW50aWNhdGlvbi1tZWNoYW5pc20tdHlwZT4KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIDxjcmVkZW50aWFsLWludGVyZmFjZT5qYXZheC5yZXNvdXJjZS5zcGkuc2VjdXJpdHkuUGFzc3dvcmRDcmVkZW50aWFsPC9jcmVkZW50aWFsLWludGVyZmFjZT4KICAgICAgICAgICAgIDwvYXV0aGVudGljYXRpb24tbWVjaGFuaXNtPgotICAgICAgICAgICAgCisKICAgICAgICAgICAgIDxyZWF1dGhlbnRpY2F0aW9uLXN1cHBvcnQ+ZmFsc2U8L3JlYXV0aGVudGljYXRpb24tc3VwcG9ydD4KLSAgICAgICAgICAgIAorCiAgICAgICAgIDwvb3V0Ym91bmQtcmVzb3VyY2VhZGFwdGVyPgotCTxhZG1pbm9iamVjdD4KLQkgICAgICAgPGFkbWlub2JqZWN0LWludGVyZmFjZT5jb20uc3VuLmpkYmNyYS5zcGkuSmRiY1NldHVwQWRtaW48L2FkbWlub2JqZWN0LWludGVyZmFjZT4KLQkgICAgICAgPGFkbWlub2JqZWN0LWNsYXNzPmNvbS5zdW4uamRiY3JhLnNwaS5KZGJjU2V0dXBBZG1pbkltcGw8L2FkbWlub2JqZWN0LWNsYXNzPgotCSAgICAgICA8Y29uZmlnLXByb3BlcnR5PgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlRhYmxlTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotCSAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLQkgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5TY2hlbWFOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0JICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotCSAgICAgICA8Y29uZmlnLXByb3BlcnR5PgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkpuZGlOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0JICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotCSAgICAgICA8Y29uZmlnLXByb3BlcnR5PgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPk5vT2ZSb3dzPC9jb25maWctcHJvcGVydHktbmFtZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuSW50ZWdlcjwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjA8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLQkgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgPGFkbWlub2JqZWN0PgorICAgICAgICAgICA8YWRtaW5vYmplY3QtaW50ZXJmYWNlPmNvbS5zdW4uamRiY3JhLnNwaS5KZGJjU2V0dXBBZG1pbjwvYWRtaW5vYmplY3QtaW50ZXJmYWNlPgorICAgICAgICAgICA8YWRtaW5vYmplY3QtY2xhc3M+Y29tLnN1bi5qZGJjcmEuc3BpLkpkYmNTZXR1cEFkbWluSW1wbDwvYWRtaW5vYmplY3QtY2xhc3M+CisgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VGFibGVOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlNjaGVtYU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+Sm5kaU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+Tm9PZlJvd3M8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5JbnRlZ2VyPC9jb25maWctcHJvcGVydHktdHlwZT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+MDwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgPC9hZG1pbm9iamVjdD4KLSAgICAgICAgCisKICAgICA8L3Jlc291cmNlYWRhcHRlcj4KLSAgICAKKwogPC9jb25uZWN0b3I+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25NYW5hZ2VyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25NYW5hZ2VyLmphdmEKaW5kZXggYjIxOWNkMi4uMTI0ODA5YyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uTWFuYWdlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvbk1hbmFnZXIuamF2YQpAQCAtMjQsMjYgKzI0LDI2IEBACiAvKioKICAqIENvbm5lY3Rpb25NYW5hZ2VyIGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMzEKLSAqIEBhdXRob3IJQmlub2QgUC5HCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzMxCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRwogICovCi1wdWJsaWMgY2xhc3MgQ29ubmVjdGlvbk1hbmFnZXIgaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uTWFuYWdlcnsgCitwdWJsaWMgY2xhc3MgQ29ubmVjdGlvbk1hbmFnZXIgaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uTWFuYWdlcnsKIAogICAgIC8qKgogICAgICAqIFJldHVybnMgYSA8Y29kZT5Db25uZWN0aW9uIDwvY29kZT4gb2JqZWN0IHRvIHRoZSA8Y29kZT5Db25uZWN0aW9uRmFjdG9yeTwvY29kZT4KICAgICAgKgotICAgICAqIEBwYXJhbQltY2YJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHBhcmFtCWluZm8JPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHJldHVybglBIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IE9iamVjdC4KLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uIEluIGNhc2Ugb2YgYW4gZXJyb3IgaW4gZ2V0dGluZyB0aGUgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4uCisgICAgICogQHBhcmFtICAgIG1jZiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgaW5mbyAgICA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcmV0dXJuICAgIEEgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gT2JqZWN0LgorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gSW4gY2FzZSBvZiBhbiBlcnJvciBpbiBnZXR0aW5nIHRoZSA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPi4KICAgICAgKi8KICAgICBwdWJsaWMgT2JqZWN0IGFsbG9jYXRlQ29ubmVjdGlvbihNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmLAotICAgIAkJCQkgICAgIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbmZvKSAKLSAgICAJCQkJICAgICB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewotCU1hbmFnZWRDb25uZWN0aW9uIG1jID0gbWNmLmNyZWF0ZU1hbmFnZWRDb25uZWN0aW9uKG51bGwsIGluZm8pOwotCXJldHVybiBtYy5nZXRDb25uZWN0aW9uKG51bGwsIGluZm8pOyAgICAJCQkJICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW5mbykKKyAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24geworICAgIE1hbmFnZWRDb25uZWN0aW9uIG1jID0gbWNmLmNyZWF0ZU1hbmFnZWRDb25uZWN0aW9uKG51bGwsIGluZm8pOworICAgIHJldHVybiBtYy5nZXRDb25uZWN0aW9uKG51bGwsIGluZm8pOwogICAgIH0KLSAgICAKKwogICAgIC8qCiAgICAgICogVGhpcyBjbGFzcyBjb3VsZCBlZmZlY3RpdmVseSBpbXBsZW1lbnQgQ29ubmVjdGlvbiBwb29saW5nIGFsc28uCiAgICAgICogQ291bGQgYmUgZG9uZSBmb3IgRkNTLgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uUmVxdWVzdEluZm8uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvblJlcXVlc3RJbmZvLmphdmEKaW5kZXggMzljNzg3Ni4uYzQ3N2ZjMiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uUmVxdWVzdEluZm8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25SZXF1ZXN0SW5mby5qYXZhCkBAIC0xOSwxMCArMTksMTAgQEAKIC8qKgogICogQ29ubmVjdGlvblJlcXVlc3RJbmZvIGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMzEKLSAqIEBhdXRob3IJQmlub2QgUC5HCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzMxCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRwogICovCi1wdWJsaWMgY2xhc3MgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZveyAKK3B1YmxpYyBjbGFzcyBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm97CiAKICAgICBwcml2YXRlIFN0cmluZyB1c2VyOwogICAgIHByaXZhdGUgU3RyaW5nIHBhc3N3b3JkOwpAQCAtMzAsOCArMzAsOCBAQAogICAgIC8qKgogICAgICAqIENvbnN0cnVjdHMgYSBuZXcgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBvYmplY3QKICAgICAgKgotICAgICAqIEBwYXJhbQl1c2VyCVVzZXIgTmFtZS4KLSAgICAgKiBAcGFyYW0JcGFzc3dvcmQJUGFzc3dvcmQKKyAgICAgKiBAcGFyYW0gICAgdXNlciAgICBVc2VyIE5hbWUuCisgICAgICogQHBhcmFtICAgIHBhc3N3b3JkICAgIFBhc3N3b3JkCiAgICAgICovCiAgICAgcHVibGljIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyhTdHJpbmcgdXNlciwgU3RyaW5nIHBhc3N3b3JkKSB7CiAgICAgICAgIHRoaXMudXNlciA9IHVzZXI7CkBAIC00MSw3ICs0MSw3IEBACiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSB1c2VyIG5hbWUgb2YgdGhlIENvbm5lY3Rpb25SZXF1ZXN0SW5mby4KICAgICAgKgotICAgICAqIEByZXR1cm4JVXNlciBuYW1lIG9mIENvbm5lY3Rpb25SZXF1ZXN0SW5mby4KKyAgICAgKiBAcmV0dXJuICAgIFVzZXIgbmFtZSBvZiBDb25uZWN0aW9uUmVxdWVzdEluZm8uCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRVc2VyKCkgewogICAgICAgICByZXR1cm4gdXNlcjsKQEAgLTUwLDcgKzUwLDcgQEAKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIHBhc3N3b3JkIG9mIHRoZSBDb25uZWN0aW9uUmVxdWVzdEluZm8uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVBhc3N3b3JkIG9mIENvbm5lY3Rpb25SZXF1ZXN0SW5mby4KKyAgICAgKiBAcmV0dXJuICAgIFBhc3N3b3JkIG9mIENvbm5lY3Rpb25SZXF1ZXN0SW5mby4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFBhc3N3b3JkKCkgewogICAgICAgICByZXR1cm4gcGFzc3dvcmQ7CkBAIC01OSw3ICs1OSw3IEBACiAgICAgLyoqCiAgICAgICogVmVyaWZ5IHdoZXRoZXIgdHdvIENvbm5lY3Rpb25SZXF1ZXN0SW5mb3MgYXJlIGVxdWFsLgogICAgICAqCi0gICAgICogQHJldHVybglUcnVlLCBpZiB0aGV5IGFyZSBlcXVhbCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLgorICAgICAqIEByZXR1cm4gICAgVHJ1ZSwgaWYgdGhleSBhcmUgZXF1YWwgYW5kIGZhbHNlIG90aGVyd2lzZS4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9iaikgewogICAgICAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBmYWxzZTsKQEAgLTc1LDE4ICs3NSwxOCBAQAogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgaGFzaGNvZGUgb2YgdGhlIG9iamVjdC4KICAgICAgKgotICAgICAqIEByZXR1cm4JaGFzaENvZGUuCisgICAgICogQHJldHVybiAgICBoYXNoQ29kZS4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewogICAgICAgICBTdHJpbmcgcmVzdWx0ID0gIiIgKyB1c2VyICsgcGFzc3dvcmQ7CiAgICAgICAgIHJldHVybiByZXN1bHQuaGFzaENvZGUoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb21wYXJlcyB0d28gb2JqZWN0cy4KICAgICAgKgotICAgICAqIEBwYXJhbQlvMQlGaXJzdCBvYmplY3QuCi0gICAgICogQHBhcmFtCW8yCVNlY29uZCBvYmplY3QuCisgICAgICogQHBhcmFtICAgIG8xICAgIEZpcnN0IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgbzIgICAgU2Vjb25kIG9iamVjdC4KICAgICAgKi8KICAgICBwcml2YXRlIGJvb2xlYW4gaXNFcXVhbChPYmplY3QgbzEsIE9iamVjdCBvMikgewogICAgICAgICBpZiAobzEgPT0gbnVsbCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCmluZGV4IDQxMWI3M2YuLmQ5ODc0YTAgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKQEAgLTMxLDM2ICszMSwzNiBAQAogLyoqCiAgKiBEYXRhIFNvdXJjZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMzAKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzMwCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiAKIHB1YmxpYyBjbGFzcyBEU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBleHRlbmRzIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSB7Ci0gICAKKwogICAgIHByaXZhdGUgdHJhbnNpZW50IGphdmF4LnNxbC5EYXRhU291cmNlIGRhdGFTb3VyY2VPYmo7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBMb2dnZXIgX2xvZ2dlcjsKICAgICBzdGF0aWMgewogICAgICAgICBfbG9nZ2VyID0gTG9nZ2VyLmdldEFub255bW91c0xvZ2dlcigpOwogICAgIH0KICAgICBwcml2YXRlIGJvb2xlYW4gZGVidWcgPSBmYWxzZTsKLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBuZXcgcGh5c2ljYWwgY29ubmVjdGlvbiB0byB0aGUgdW5kZXJseWluZyBFSVMgcmVzb3VyY2UKICAgICAgKiBtYW5hZ2VyLgotICAgICAqIAotICAgICAqIEBwYXJhbQlzdWJqZWN0CTxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICogQHBhcmFtCWN4UmVxdWVzdEluZm8JPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiB3aGljaCBtYXkgYmUgY3JlYXRlZAotICAgICAqICAgICAgIAkgICAgICAgICAgICAgCWFzIGEgcmVzdWx0IG9mIHRoZSBpbnZvY2F0aW9uIDxjb2RlPmdldENvbm5lY3Rpb24odXNlciwgcGFzc3dvcmQpPC9jb2RlPgotICAgICAqICAgICAgIAkgICAgICAgICAgICAgCW9uIHRoZSA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QKLSAgICAgKiBAcmV0dXJuCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QgY3JlYXRlZAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gaW5zdGFudGlhdGluZyB0aGUKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCTxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdCB1c2VkIGZvciB0aGUKLSAgICAgKiAgICAgICAJCQkJY3JlYXRpb24gb2YgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QKLSAgICAgKiBAdGhyb3dzCVNlY3VyaXR5RXhjZXB0aW9uCWlmIHRoZXJlIGlubyA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdAotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJc2F0aXNmeWluZyB0aGlzIHJlcXVlc3QgCi0gICAgICogQHRocm93cwlSZXNvdXJjZUFsbG9jYXRpb25FeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUgCi0gICAgICoJCQkJCQlwaHlzaWNhbCBjb25uZWN0aW9uCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3ViamVjdCAgICA8Y29kZT5TdWJqZWN0PC9jb2RlPiBpbnN0YW5jZSBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqIEBwYXJhbSAgICBjeFJlcXVlc3RJbmZvICAgIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gd2hpY2ggbWF5IGJlIGNyZWF0ZWQKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyBhIHJlc3VsdCBvZiB0aGUgaW52b2NhdGlvbiA8Y29kZT5nZXRDb25uZWN0aW9uKHVzZXIsIHBhc3N3b3JkKTwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiB0aGUgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0CisgICAgICogQHJldHVybiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGNyZWF0ZWQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGluc3RhbnRpYXRpbmcgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QgdXNlZCBmb3IgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgIGNyZWF0aW9uIG9mIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0CisgICAgICogQHRocm93cyAgICBTZWN1cml0eUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpbm8gPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdGlzZnlpbmcgdGhpcyByZXF1ZXN0CisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUFsbG9jYXRpb25FeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHBoeXNpY2FsIGNvbm5lY3Rpb24KICAgICAgKi8KICAgICBwdWJsaWMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gY3JlYXRlTWFuYWdlZENvbm5lY3Rpb24oamF2YXguc2VjdXJpdHkuYXV0aC5TdWJqZWN0IHN1YmplY3QsCiAgICAgICAgIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBjeFJlcXVlc3RJbmZvKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewpAQCAtNjgsNTUgKzY4LDU1IEBACiAgICAgICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGNyZWF0ZU1hbmFnZWRDb25uZWN0aW9uIik7CiAgICAgICAgIH0KICAgICAgICAgUGFzc3dvcmRDcmVkZW50aWFsIHBjID0gU2VjdXJpdHlVdGlscy5nZXRQYXNzd29yZENyZWRlbnRpYWwodGhpcywgc3ViamVjdCwgY3hSZXF1ZXN0SW5mbyk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKGRhdGFTb3VyY2VPYmogPT0gbnVsbCkgewogICAgICAgICAgICAgaWYoZHNPYmpCdWlsZGVyID09IG51bGwpIHsKICAgICAgICAgICAgICAgICBkc09iakJ1aWxkZXIgPSBuZXcgRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIoc3BlYyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGRhdGFTb3VyY2VPYmogPSAoamF2YXguc3FsLkRhdGFTb3VyY2UpIGRzT2JqQnVpbGRlci5jb25zdHJ1Y3REYXRhU291cmNlT2JqZWN0KCk7CiAgICAgICAgICAgICB9IGNhdGNoKENsYXNzQ2FzdEV4Y2VwdGlvbiBjY2UpIHsKLQkgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2NjZSIsIGNjZSk7CisgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19jY2UiLCBjY2UpOwogICAgICAgICAgICAgICAgIHRocm93IG5ldyBqYWthcnRhLnJlc291cmNlLlJlc291cmNlRXhjZXB0aW9uKGNjZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gZHNDb25uID0gbnVsbDsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKLQkgICAgLyogRm9yIHRoZSBjYXNlIHdoZXJlIHRoZSB1c2VyL3Bhc3N3ZCBvZiB0aGUgY29ubmVjdGlvbiBwb29sIGlzCi0JICAgICAqIGVxdWFsIHRvIHRoZSBQYXNzd29yZENyZWRlbnRpYWwgZm9yIHRoZSBjb25uZWN0aW9uIHJlcXVlc3QKLQkgICAgICogZ2V0IGEgY29ubmVjdGlvbiBmcm9tIHRoaXMgcG9vbCBkaXJlY3RseS4KLQkgICAgICogZm9yIGFsbCBvdGhlciBjb25kaXRpb25zIGdvIGNyZWF0ZSBhIG5ldyBjb25uZWN0aW9uCi0JICAgICAqLwotCSAgICBpZiAoIGlzRXF1YWwoIHBjLCBnZXRVc2VyKCksIGdldFBhc3N3b3JkKCkgKSApIHsKLQkgICAgICAgIGRzQ29ubiA9IGRhdGFTb3VyY2VPYmouZ2V0Q29ubmVjdGlvbigpOwotCSAgICB9IGVsc2UgewotCSAgICAgICAgZHNDb25uID0gZGF0YVNvdXJjZU9iai5nZXRDb25uZWN0aW9uKHBjLmdldFVzZXJOYW1lKCksIAotCQkgICAgbmV3IFN0cmluZyhwYy5nZXRQYXNzd29yZCgpKSk7Ci0JICAgIH0KKyAgICAgICAgLyogRm9yIHRoZSBjYXNlIHdoZXJlIHRoZSB1c2VyL3Bhc3N3ZCBvZiB0aGUgY29ubmVjdGlvbiBwb29sIGlzCisgICAgICAgICAqIGVxdWFsIHRvIHRoZSBQYXNzd29yZENyZWRlbnRpYWwgZm9yIHRoZSBjb25uZWN0aW9uIHJlcXVlc3QKKyAgICAgICAgICogZ2V0IGEgY29ubmVjdGlvbiBmcm9tIHRoaXMgcG9vbCBkaXJlY3RseS4KKyAgICAgICAgICogZm9yIGFsbCBvdGhlciBjb25kaXRpb25zIGdvIGNyZWF0ZSBhIG5ldyBjb25uZWN0aW9uCisgICAgICAgICAqLworICAgICAgICBpZiAoIGlzRXF1YWwoIHBjLCBnZXRVc2VyKCksIGdldFBhc3N3b3JkKCkgKSApIHsKKyAgICAgICAgICAgIGRzQ29ubiA9IGRhdGFTb3VyY2VPYmouZ2V0Q29ubmVjdGlvbigpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZHNDb25uID0gZGF0YVNvdXJjZU9iai5nZXRDb25uZWN0aW9uKHBjLmdldFVzZXJOYW1lKCksCisgICAgICAgICAgICBuZXcgU3RyaW5nKHBjLmdldFBhc3N3b3JkKCkpKTsKKyAgICAgICAgfQogICAgICAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLmV4Y19jcmVhdGVfY29ubiIsIHNxbGUpOwotICAgICAgICAgICAgdGhyb3cgbmV3IGpha2FydGEucmVzb3VyY2Uuc3BpLlJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gY291bGQgbm90IGJlIGFsbG9jYXRlZDogIiArIAorICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5leGNfY3JlYXRlX2Nvbm4iLCBzcWxlKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBqYWthcnRhLnJlc291cmNlLnNwaS5SZXNvdXJjZUFsbG9jYXRpb25FeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGNvdWxkIG5vdCBiZSBhbGxvY2F0ZWQ6ICIgKwogICAgICAgICAgICAgICAgIHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWMgPSBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uKG51bGwsIGRzQ29ubiwgcGMsIHRoaXMpOwogICAgICAgICAvL0dKQ0lOVAogICAgICAgICBzZXRJc29sYXRpb24obWMpOwogICAgICAgICBpc1ZhbGlkKG1jKTsKICAgICAgICAgcmV0dXJuIG1jOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIENoZWNrIGlmIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpcyBlcXVhbCB0byAKKyAgICAgKiBDaGVjayBpZiB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaXMgZXF1YWwgdG8KICAgICAgKiBhbm90aGVyIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4uCi0gICAgICogCi0gICAgICogQHBhcmFtCW90aGVyCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0IGZvciBjaGVja2luZyBlcXVhbGl0eSB3aXRoCi0gICAgICogQHJldHVybgl0cnVlCWlmIHRoZSBwcm9wZXJ0eSBzZXRzIG9mIGJvdGggdGhlIAotICAgICAqCQkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3RzIGFyZSB0aGUgc2FtZQotICAgICAqCQlmYWxzZQlvdGhlcndpc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBvdGhlciAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdCBmb3IgY2hlY2tpbmcgZXF1YWxpdHkgd2l0aAorICAgICAqIEByZXR1cm4gICAgdHJ1ZSAgICBpZiB0aGUgcHJvcGVydHkgc2V0cyBvZiBib3RoIHRoZQorICAgICAqICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3RzIGFyZSB0aGUgc2FtZQorICAgICAqICAgICAgICBmYWxzZSAgICBvdGhlcndpc2UKICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG90aGVyKSB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC0xMjcsNDA5ICsxMjcsNDA5IEBACiAgICAgICAgICAqIGlmIGFuZCBvbmx5IGlmIHRoZWlyIHByb3BlcnRpZXMgYXJlIHRoZSBzYW1lLgogICAgICAgICAgKi8KICAgICAgICAgaWYob3RoZXIgaW5zdGFuY2VvZiBjb20uc3VuLmpkYmNyYS5zcGkuRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkpIHsKLSAgICAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBvdGhlck1DRiA9IAorICAgICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLkRTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG90aGVyTUNGID0KICAgICAgICAgICAgICAgICAoY29tLnN1bi5qZGJjcmEuc3BpLkRTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KSBvdGhlcjsKICAgICAgICAgICAgIHJldHVybiB0aGlzLnNwZWMuZXF1YWxzKG90aGVyTUNGLnNwZWMpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBzZXJ2ZXIgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlzZXJ2ZXJOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldFNlcnZlck5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHNlcnZlck5hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0U2VydmVyTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRzZXJ2ZXJOYW1lKFN0cmluZyBzZXJ2ZXJOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlNFUlZFUk5BTUUsIHNlcnZlck5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHNlcnZlciBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglzZXJ2ZXJOYW1lCi0gICAgICogQHNlZQk8Y29kZT5zZXRTZXJ2ZXJOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgc2VydmVyTmFtZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0U2VydmVyTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHNlcnZlck5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5TRVJWRVJOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBzZXJ2ZXIgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlzZXJ2ZXJOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldFNlcnZlck5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHNlcnZlck5hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0U2VydmVyTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJOYW1lKFN0cmluZyBzZXJ2ZXJOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlNFUlZFUk5BTUUsIHNlcnZlck5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHNlcnZlciBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglzZXJ2ZXJOYW1lCi0gICAgICogQHNlZQk8Y29kZT5zZXRTZXJ2ZXJOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgc2VydmVyTmFtZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0U2VydmVyTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFNlcnZlck5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5TRVJWRVJOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBwb3J0IG51bWJlci4KICAgICAgKgotICAgICAqIEBwYXJhbQlwb3J0TnVtYmVyCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldFBvcnROdW1iZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHBvcnROdW1iZXIgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0UG9ydE51bWJlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRwb3J0TnVtYmVyKFN0cmluZyBwb3J0TnVtYmVyKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIsIHBvcnROdW1iZXIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHBvcnQgbnVtYmVyLgogICAgICAqCi0gICAgICogQHJldHVybglwb3J0TnVtYmVyCi0gICAgICogQHNlZQk8Y29kZT5zZXRQb3J0TnVtYmVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgcG9ydE51bWJlcgorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0UG9ydE51bWJlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHBvcnROdW1iZXIoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QT1JUTlVNQkVSKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBwb3J0IG51bWJlci4KICAgICAgKgotICAgICAqIEBwYXJhbQlwb3J0TnVtYmVyCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldFBvcnROdW1iZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHBvcnROdW1iZXIgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0UG9ydE51bWJlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRQb3J0TnVtYmVyKFN0cmluZyBwb3J0TnVtYmVyKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIsIHBvcnROdW1iZXIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHBvcnQgbnVtYmVyLgogICAgICAqCi0gICAgICogQHJldHVybglwb3J0TnVtYmVyCi0gICAgICogQHNlZQk8Y29kZT5zZXRQb3J0TnVtYmVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgcG9ydE51bWJlcgorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0UG9ydE51bWJlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFBvcnROdW1iZXIoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QT1JUTlVNQkVSKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkYXRhYmFzZSBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCWRhdGFiYXNlTmFtZQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREYXRhYmFzZU5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRhdGFiYXNlTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREYXRhYmFzZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0ZGF0YWJhc2VOYW1lKFN0cmluZyBkYXRhYmFzZU5hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQUJBU0VOQU1FLCBkYXRhYmFzZU5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRhdGFiYXNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRhdGFiYXNlTmFtZQotICAgICAqIEBzZWUJPGNvZGU+c2V0RGF0YWJhc2VOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZGF0YWJhc2VOYW1lCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREYXRhYmFzZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRkYXRhYmFzZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBQkFTRU5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRhdGFiYXNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZGF0YWJhc2VOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERhdGFiYXNlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGF0YWJhc2VOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERhdGFiYXNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXREYXRhYmFzZU5hbWUoU3RyaW5nIGRhdGFiYXNlTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBQkFTRU5BTUUsIGRhdGFiYXNlTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGF0YWJhc2UgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGF0YWJhc2VOYW1lCi0gICAgICogQHNlZQk8Y29kZT5zZXREYXRhYmFzZU5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkYXRhYmFzZU5hbWUKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERhdGFiYXNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldERhdGFiYXNlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFCQVNFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGF0YSBzb3VyY2UgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlkc24gPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRzbiA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREYXRhU291cmNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRkYXRhU291cmNlTmFtZShTdHJpbmcgZHNuKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FLCBkc24pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRhdGEgc291cmNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRzbgotICAgICAqIEBzZWUJPGNvZGU+c2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkc24KKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERhdGFTb3VyY2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0ZGF0YVNvdXJjZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBU09VUkNFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGF0YSBzb3VyY2UgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlkc24gPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRzbiA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREYXRhU291cmNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXREYXRhU291cmNlTmFtZShTdHJpbmcgZHNuKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FLCBkc24pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRhdGEgc291cmNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRzbgotICAgICAqIEBzZWUJPGNvZGU+c2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkc24KKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERhdGFTb3VyY2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGF0YVNvdXJjZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBU09VUkNFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGVzY3JpcHRpb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZGVzYwk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREZXNjcmlwdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGVzYyAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREZXNjcmlwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRkZXNjcmlwdGlvbihTdHJpbmcgZGVzYykgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ERVNDUklQVElPTiwgZGVzYyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGVzY3JpcHRpb24uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRlc2MKLSAgICAgKiBAc2VlCTxjb2RlPnNldERlc2NyaXB0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZGVzYworICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGVzY3JpcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRkZXNjcmlwdGlvbigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFU0NSSVBUSU9OKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkZXNjcmlwdGlvbi4KICAgICAgKgotICAgICAqIEBwYXJhbQlkZXNjCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERlc2NyaXB0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkZXNjICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERlc2NyaXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERlc2NyaXB0aW9uKFN0cmluZyBkZXNjKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFU0NSSVBUSU9OLCBkZXNjKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkZXNjcmlwdGlvbi4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGVzYwotICAgICAqIEBzZWUJPGNvZGU+c2V0RGVzY3JpcHRpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBkZXNjCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREZXNjcmlwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVTQ1JJUFRJT04pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIG5ldHdvcmsgcHJvdG9jb2wuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbndQcm90b2NvbAk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CisgICAgICogQHBhcmFtICAgIG53UHJvdG9jb2wgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldG5ldHdvcmtQcm90b2NvbChTdHJpbmcgbndQcm90b2NvbCkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ORVRXT1JLUFJPVE9DT0wsIG53UHJvdG9jb2wpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIG5ldHdvcmsgcHJvdG9jb2wuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCW53UHJvdG9jb2wKLSAgICAgKiBAc2VlCTxjb2RlPnNldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIG53UHJvdG9jb2wKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldG5ldHdvcmtQcm90b2NvbCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk5FVFdPUktQUk9UT0NPTCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgbmV0d29yayBwcm90b2NvbC4KICAgICAgKgotICAgICAqIEBwYXJhbQlud1Byb3RvY29sCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbndQcm90b2NvbCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TmV0d29ya1Byb3RvY29sKFN0cmluZyBud1Byb3RvY29sKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk5FVFdPUktQUk9UT0NPTCwgbndQcm90b2NvbCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgbmV0d29yayBwcm90b2NvbC4KICAgICAgKgotICAgICAqIEByZXR1cm4JbndQcm90b2NvbAotICAgICAqIEBzZWUJPGNvZGU+c2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgbndQcm90b2NvbAorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmV0d29ya1Byb3RvY29sKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTkVUV09SS1BST1RPQ09MKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSByb2xlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jcm9sZU5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0Um9sZU5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHJvbGVOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldFJvbGVOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHJvbGVOYW1lKFN0cmluZyByb2xlTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ST0xFTkFNRSwgcm9sZU5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHJvbGUgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4Jcm9sZU5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldFJvbGVOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgcm9sZU5hbWUKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldFJvbGVOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0cm9sZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ST0xFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgcm9sZSBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCXJvbGVOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldFJvbGVOYW1lPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICByb2xlTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRSb2xlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRSb2xlTmFtZShTdHJpbmcgcm9sZU5hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUk9MRU5BTUUsIHJvbGVOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSByb2xlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXJvbGVOYW1lCi0gICAgICogQHNlZQk8Y29kZT5zZXRSb2xlTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHJvbGVOYW1lCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRSb2xlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFJvbGVOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUk9MRU5BTUUpOwogICAgIH0KIAotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgbG9naW4gdGltZW91dC4KICAgICAgKgotICAgICAqIEBwYXJhbQlsb2dpblRpbWVPdXQJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0TG9naW5UaW1lT3V0PC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBsb2dpblRpbWVPdXQgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0TG9naW5UaW1lT3V0PC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGxvZ2luVGltZU91dChTdHJpbmcgbG9naW5UaW1lT3V0KSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR0lOVElNRU9VVCwgbG9naW5UaW1lT3V0KTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBsb2dpbiB0aW1lb3V0LgogICAgICAqCi0gICAgICogQHJldHVybglsb2dpblRpbWVvdXQKLSAgICAgKiBAc2VlCTxjb2RlPnNldExvZ2luVGltZU91dDwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGxvZ2luVGltZW91dAorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0TG9naW5UaW1lT3V0PC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0bG9naW5UaW1lT3V0KCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HSU5USU1FT1VUKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBsb2dpbiB0aW1lb3V0LgogICAgICAqCi0gICAgICogQHBhcmFtCWxvZ2luVGltZU91dAk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXRMb2dpblRpbWVPdXQ8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGxvZ2luVGltZU91dCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRMb2dpblRpbWVPdXQ8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TG9naW5UaW1lT3V0KFN0cmluZyBsb2dpblRpbWVPdXQpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HSU5USU1FT1VULCBsb2dpblRpbWVPdXQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGxvZ2luIHRpbWVvdXQuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWxvZ2luVGltZW91dAotICAgICAqIEBzZWUJPGNvZGU+c2V0TG9naW5UaW1lT3V0PC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgbG9naW5UaW1lb3V0CisgICAgICogQHNlZSAgICA8Y29kZT5zZXRMb2dpblRpbWVPdXQ8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRMb2dpblRpbWVPdXQoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dJTlRJTUVPVVQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRlbGltaXRlci4KICAgICAgKgotICAgICAqIEBwYXJhbQlkZWxpbQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREZWxpbWl0ZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRlbGltICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERlbGltaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRkZWxpbWl0ZXIoU3RyaW5nIGRlbGltKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUiwgZGVsaW0pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRlbGltaXRlci4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGVsaW0KLSAgICAgKiBAc2VlCTxjb2RlPnNldERlbGltaXRlcjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRlbGltCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREZWxpbWl0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRkZWxpbWl0ZXIoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERUxJTUlURVIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRlbGltaXRlci4KICAgICAgKgotICAgICAqIEBwYXJhbQlkZWxpbQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREZWxpbWl0ZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRlbGltICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERlbGltaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXREZWxpbWl0ZXIoU3RyaW5nIGRlbGltKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUiwgZGVsaW0pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRlbGltaXRlci4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGVsaW0KLSAgICAgKiBAc2VlCTxjb2RlPnNldERlbGltaXRlcjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRlbGltCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREZWxpbWl0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXREZWxpbWl0ZXIoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERUxJTUlURVIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRyaXZlciBzcGVjaWZpYyBwcm9wZXJ0aWVzLgogICAgICAqCi0gICAgICogQHBhcmFtCWRyaXZlclByb3BzCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRyaXZlclByb3BzICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0ZHJpdmVyUHJvcGVydGllcyhTdHJpbmcgZHJpdmVyUHJvcHMpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuRFJJVkVSUFJPUEVSVElFUywgZHJpdmVyUHJvcHMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRyaXZlciBzcGVjaWZpYyBwcm9wZXJ0aWVzLgogICAgICAqCi0gICAgICogQHJldHVybglkcml2ZXJQcm9wcwotICAgICAqIEBzZWUJPGNvZGU+c2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRyaXZlclByb3BzCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0ZHJpdmVyUHJvcGVydGllcygpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRSSVZFUlBST1BFUlRJRVMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRyaXZlciBzcGVjaWZpYyBwcm9wZXJ0aWVzLgogICAgICAqCi0gICAgICogQHBhcmFtCWRyaXZlclByb3BzCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRyaXZlclByb3BzICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RHJpdmVyUHJvcGVydGllcyhTdHJpbmcgZHJpdmVyUHJvcHMpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuRFJJVkVSUFJPUEVSVElFUywgZHJpdmVyUHJvcHMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRyaXZlciBzcGVjaWZpYyBwcm9wZXJ0aWVzLgogICAgICAqCi0gICAgICogQHJldHVybglkcml2ZXJQcm9wcwotICAgICAqIEBzZWUJPGNvZGU+c2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRyaXZlclByb3BzCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RHJpdmVyUHJvcGVydGllcygpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRSSVZFUlBST1BFUlRJRVMpOwpAQCAtNTM5LDM1ICs1MzksMzUgQEAKICAgICAgKiBDaGVjayBpZiB0aGUgUGFzc3dvcmRDcmVkZW50aWFsIHBhc3NlZCBmb3IgdGhpcyBnZXQgY29ubmVjdGlvbgogICAgICAqIHJlcXVlc3QgaXMgZXF1YWwgdG8gdGhlIHVzZXIvcGFzc3dkIG9mIHRoaXMgY29ubmVjdGlvbiBwb29sLgogICAgICAqLwotICAgIHByaXZhdGUgYm9vbGVhbiBpc0VxdWFsKCBQYXNzd29yZENyZWRlbnRpYWwgcGMsIFN0cmluZyB1c2VyLCAKKyAgICBwcml2YXRlIGJvb2xlYW4gaXNFcXVhbCggUGFzc3dvcmRDcmVkZW50aWFsIHBjLCBTdHJpbmcgdXNlciwKICAgICAgICAgU3RyaW5nIHBhc3N3b3JkKSB7Ci0gICAgICAgIAotCS8vaWYgZXF1YWwgZ2V0IGRpcmVjdCBjb25uZWN0aW9uIGVsc2UgCi0JLy9nZXQgY29ubmVjdGlvbiB3aXRoIHVzZXIgYW5kIHBhc3N3b3JkLgotCQotCWlmICh1c2VyID09IG51bGwgJiYgcGMgPT0gbnVsbCkgewotCSAgICByZXR1cm4gdHJ1ZTsKLQl9Ci0JCi0JaWYgKCB1c2VyID09IG51bGwgJiYgcGMgIT0gbnVsbCApIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQl9CiAKLQlpZiggcGMgPT0gbnVsbCApIHsKLQkgICAgcmV0dXJuIHRydWU7Ci0JfQotCQotCWlmICggdXNlci5lcXVhbHMoIHBjLmdldFVzZXJOYW1lKCkgKSApIHsKLQkgICAgaWYgKCBwYXNzd29yZCA9PSBudWxsICYmIHBjLmdldFBhc3N3b3JkKCkgPT0gbnVsbCApIHsKLQkgICAgICAgIHJldHVybiB0cnVlOwotCSAgICB9Ci0JfQotCQotCWlmICggdXNlci5lcXVhbHMocGMuZ2V0VXNlck5hbWUoKSkgJiYgcGFzc3dvcmQuZXF1YWxzKHBjLmdldFBhc3N3b3JkKCkpICkgewotCSAgICByZXR1cm4gdHJ1ZTsKLQl9IAotCQotICAgICAgICAKLQlyZXR1cm4gZmFsc2U7CisgICAgLy9pZiBlcXVhbCBnZXQgZGlyZWN0IGNvbm5lY3Rpb24gZWxzZQorICAgIC8vZ2V0IGNvbm5lY3Rpb24gd2l0aCB1c2VyIGFuZCBwYXNzd29yZC4KKworICAgIGlmICh1c2VyID09IG51bGwgJiYgcGMgPT0gbnVsbCkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIHVzZXIgPT0gbnVsbCAmJiBwYyAhPSBudWxsICkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmKCBwYyA9PSBudWxsICkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIHVzZXIuZXF1YWxzKCBwYy5nZXRVc2VyTmFtZSgpICkgKSB7CisgICAgICAgIGlmICggcGFzc3dvcmQgPT0gbnVsbCAmJiBwYy5nZXRQYXNzd29yZCgpID09IG51bGwgKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICggdXNlci5lcXVhbHMocGMuZ2V0VXNlck5hbWUoKSkgJiYgcGFzc3dvcmQuZXF1YWxzKHBjLmdldFBhc3N3b3JkKCkpICkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKworICAgIHJldHVybiBmYWxzZTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RhdGFTb3VyY2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRGF0YVNvdXJjZS5qYXZhCmluZGV4IDIwNjg0MzAuLjczOWZmNGQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRGF0YVNvdXJjZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRGF0YVNvdXJjZS5qYXZhCkBAIC0yOCwyMiArMjgsMjIgQEAKIGltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7CiBpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7CiAvKioKLSAqIEhvbGRzIHRoZSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QsIHdoaWNoIGlzIHRvIGJlIAorICogSG9sZHMgdGhlIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCwgd2hpY2ggaXMgdG8gYmUKICAqIHBhc3NlZCB0byB0aGUgYXBwbGljYXRpb24gcHJvZ3JhbS4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzMxCi0gKiBAYXV0aG9yCUJpbm9kIFAuRworICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8zMQorICogQGF1dGhvciAgICBCaW5vZCBQLkcKICAqLwogcHVibGljIGNsYXNzIERhdGFTb3VyY2UgaW1wbGVtZW50cyBqYXZheC5zcWwuRGF0YVNvdXJjZSwgamF2YS5pby5TZXJpYWxpemFibGUsCi0JCWNvbS5zdW4uYXBwc2Vydi5qZGJjcmEuRGF0YVNvdXJjZSwgamFrYXJ0YS5yZXNvdXJjZS5SZWZlcmVuY2VhYmxleyAKLQkJCQkgICAKKyAgICAgICAgY29tLnN1bi5hcHBzZXJ2LmpkYmNyYS5EYXRhU291cmNlLCBqYWthcnRhLnJlc291cmNlLlJlZmVyZW5jZWFibGV7CisKICAgICBwcml2YXRlIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2Y7Ci0gICAgcHJpdmF0ZSBDb25uZWN0aW9uTWFuYWdlciBjbTsJCQkJICAgCQkJCSAgIAorICAgIHByaXZhdGUgQ29ubmVjdGlvbk1hbmFnZXIgY207CiAgICAgcHJpdmF0ZSBpbnQgbG9naW5UaW1lb3V0OwogICAgIHByaXZhdGUgUHJpbnRXcml0ZXIgbG9nV3JpdGVyOwotICAgIHByaXZhdGUgU3RyaW5nIGRlc2NyaXB0aW9uOwkJCQkgICAKKyAgICBwcml2YXRlIFN0cmluZyBkZXNjcmlwdGlvbjsKICAgICBwcml2YXRlIFJlZmVyZW5jZSByZWZlcmVuY2U7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBMb2dnZXIgX2xvZ2dlcjsKICAgICBzdGF0aWMgewogICAgICAgICBfbG9nZ2VyID0gTG9nZ2VyLmdldEFub255bW91c0xvZ2dlcigpOwpAQCAtNTEsNTcgKzUxLDU3IEBACiAgICAgcHJpdmF0ZSBib29sZWFuIGRlYnVnID0gZmFsc2U7CiAKICAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdC4gVGhpcyBpcyBjcmVhdGVkIGJ5IHRoZSAKKyAgICAgKiBDb25zdHJ1Y3RzIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdC4gVGhpcyBpcyBjcmVhdGVkIGJ5IHRoZQogICAgICAqIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0LgogICAgICAqCi0gICAgICogQHBhcmFtCW1jZgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdCAKLSAgICAgKgkJCWNyZWF0aW5nIHRoaXMgb2JqZWN0LgotICAgICAqIEBwYXJhbQljbQk8Y29kZT5Db25uZWN0aW9uTWFuYWdlcjwvY29kZT4gb2JqZWN0IGVpdGhlciBhc3NvY2lhdGVkCi0gICAgICoJCQl3aXRoIEFwcGxpY2F0aW9uIHNlcnZlciBvciBSZXNvdXJjZSBBZGFwdGVyLgorICAgICAqIEBwYXJhbSAgICBtY2YgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QKKyAgICAgKiAgICAgICAgICAgIGNyZWF0aW5nIHRoaXMgb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBjbSAgICA8Y29kZT5Db25uZWN0aW9uTWFuYWdlcjwvY29kZT4gb2JqZWN0IGVpdGhlciBhc3NvY2lhdGVkCisgICAgICogICAgICAgICAgICB3aXRoIEFwcGxpY2F0aW9uIHNlcnZlciBvciBSZXNvdXJjZSBBZGFwdGVyLgogICAgICAqLwogICAgIHB1YmxpYyBEYXRhU291cmNlIChNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmLCBDb25uZWN0aW9uTWFuYWdlciBjbSkgewotICAgIAl0aGlzLm1jZiA9IG1jZjsKLSAgICAJaWYgKGNtID09IG51bGwpIHsKLSAgICAJICAgIHRoaXMuY20gPSAoQ29ubmVjdGlvbk1hbmFnZXIpIG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbk1hbmFnZXIoKTsKLSAgICAJfSBlbHNlIHsKLSAgICAJICAgIHRoaXMuY20gPSBjbTsKLSAgICAJfSAgICAJCi0gICAgfSAgIAotICAgIAorICAgICAgICB0aGlzLm1jZiA9IG1jZjsKKyAgICAgICAgaWYgKGNtID09IG51bGwpIHsKKyAgICAgICAgICAgIHRoaXMuY20gPSAoQ29ubmVjdGlvbk1hbmFnZXIpIG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbk1hbmFnZXIoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuY20gPSBjbTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QuCi0gICAgICogCi0gICAgICogQHJldHVybgk8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGFuIGVycm9yLiAgICAgIAorICAgICAqCisgICAgICogQHJldHVybiAgICA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGFuIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBDb25uZWN0aW9uIGdldENvbm5lY3Rpb24oKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLSAgICAJdHJ5IHsKLSAgICAJICAgIHJldHVybiAoQ29ubmVjdGlvbikgY20uYWxsb2NhdGVDb25uZWN0aW9uKG1jZixudWxsKTsgICAgCSAgICAKLSAgICAJfSBjYXRjaCAoUmVzb3VyY2VFeGNlcHRpb24gcmUpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJldHVybiAoQ29ubmVjdGlvbikgY20uYWxsb2NhdGVDb25uZWN0aW9uKG1jZixudWxsKTsKKyAgICAgICAgfSBjYXRjaCAoUmVzb3VyY2VFeGNlcHRpb24gcmUpIHsKIC8vIFRoaXMgaXMgdGVtcG9yYXJ5LiBUaGlzIG5lZWRzIHRvIGJlIGNoYW5nZWQgdG8gU0VWRVJFIGFmdGVyIFRQCi0JICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLmV4Y19nZXRfY29ubiIsIHJlLmdldE1lc3NhZ2UoKSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uIChyZS5nZXRNZXNzYWdlKCkpOwotICAgIAl9CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLmV4Y19nZXRfY29ubiIsIHJlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uIChyZS5nZXRNZXNzYWdlKCkpOworICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JdXNlcglVc2VyIG5hbWUgZm9yIHRoZSBDb25uZWN0aW9uLgotICAgICAqIEBwYXJhbQlwd2QJUGFzc3dvcmQgZm9yIHRoZSBDb25uZWN0aW9uLgotICAgICAqIEByZXR1cm4JPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhbiBlcnJvci4gICAgICAKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICB1c2VyICAgIFVzZXIgbmFtZSBmb3IgdGhlIENvbm5lY3Rpb24uCisgICAgICogQHBhcmFtICAgIHB3ZCAgICBQYXNzd29yZCBmb3IgdGhlIENvbm5lY3Rpb24uCisgICAgICogQHJldHVybiAgICA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGFuIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBDb25uZWN0aW9uIGdldENvbm5lY3Rpb24oU3RyaW5nIHVzZXIsIFN0cmluZyBwd2QpIHRocm93cyBTUUxFeGNlcHRpb24gewotICAgIAl0cnkgewotICAgIAkgICAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGluZm8gPSBuZXcgQ29ubmVjdGlvblJlcXVlc3RJbmZvICh1c2VyLCBwd2QpOwotICAgIAkgICAgcmV0dXJuIChDb25uZWN0aW9uKSBjbS5hbGxvY2F0ZUNvbm5lY3Rpb24obWNmLGluZm8pOwotICAgIAl9IGNhdGNoIChSZXNvdXJjZUV4Y2VwdGlvbiByZSkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGluZm8gPSBuZXcgQ29ubmVjdGlvblJlcXVlc3RJbmZvICh1c2VyLCBwd2QpOworICAgICAgICAgICAgcmV0dXJuIChDb25uZWN0aW9uKSBjbS5hbGxvY2F0ZUNvbm5lY3Rpb24obWNmLGluZm8pOworICAgICAgICB9IGNhdGNoIChSZXNvdXJjZUV4Y2VwdGlvbiByZSkgewogLy8gVGhpcyBpcyB0ZW1wb3JhcnkuIFRoaXMgbmVlZHMgdG8gYmUgY2hhbmdlZCB0byBTRVZFUkUgYWZ0ZXIgVFAKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMuZXhjX2dldF9jb25uIiwgcmUuZ2V0TWVzc2FnZSgpKTsKLSAgICAJICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKHJlLmdldE1lc3NhZ2UoKSk7Ci0gICAgCX0KLSAgICB9ICAgIAorICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5leGNfZ2V0X2Nvbm4iLCByZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAocmUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgfQorICAgIH0KIAogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIFNRTENvbm5lY3Rpb24gZnJvbSB0aGUgQ29ubmVjdGlvbiB3cmFwcGVyCkBAIC0xMTQsOTEgKzExNCw5MSBAQAogICAgICAqLwogICAgIHB1YmxpYyBDb25uZWN0aW9uIGdldENvbm5lY3Rpb24oQ29ubmVjdGlvbiBjb24pIHRocm93cyBTUUxFeGNlcHRpb24gewogCi0gICAgICAgIENvbm5lY3Rpb24gZHJpdmVyQ29uID0gY29uOyAKKyAgICAgICAgQ29ubmVjdGlvbiBkcml2ZXJDb24gPSBjb247CiAgICAgICAgIGlmIChjb24gaW5zdGFuY2VvZiBjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbkhvbGRlcikgewotICAgICAgICAgICBkcml2ZXJDb24gPSAoKGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uSG9sZGVyKSBjb24pLmdldENvbm5lY3Rpb24oKTsgCi0gICAgICAgIH0gCisgICAgICAgICAgIGRyaXZlckNvbiA9ICgoY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25Ib2xkZXIpIGNvbikuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIGRyaXZlckNvbjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXQgdGhlIGxvZ2luIHRpbWVvdXQKICAgICAgKgogICAgICAqIEByZXR1cm4gbG9naW4gdGltZW91dC4KLSAgICAgKiBAdGhyb3dzCVNRTEV4Y2VwdGlvbglJZiBhIGRhdGFiYXNlIGVycm9yIG9jY3Vycy4KKyAgICAgKiBAdGhyb3dzICAgIFNRTEV4Y2VwdGlvbiAgICBJZiBhIGRhdGFiYXNlIGVycm9yIG9jY3Vycy4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldExvZ2luVGltZW91dCgpIHRocm93cyBTUUxFeGNlcHRpb257Ci0gICAgCXJldHVybglsb2dpblRpbWVvdXQ7CisgICAgICAgIHJldHVybiAgICBsb2dpblRpbWVvdXQ7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0IHRoZSBsb2dpbiB0aW1lb3V0CiAgICAgICoKLSAgICAgKiBAcGFyYW0JbG9naW5UaW1lb3V0CUxvZ2luIHRpbWVvdXQuCi0gICAgICogQHRocm93cwlTUUxFeGNlcHRpb24JSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCisgICAgICogQHBhcmFtICAgIGxvZ2luVGltZW91dCAgICBMb2dpbiB0aW1lb3V0LgorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIElmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldExvZ2luVGltZW91dChpbnQgbG9naW5UaW1lb3V0KSB0aHJvd3MgU1FMRXhjZXB0aW9uewotICAgIAl0aGlzLmxvZ2luVGltZW91dCA9IGxvZ2luVGltZW91dDsKKyAgICAgICAgdGhpcy5sb2dpblRpbWVvdXQgPSBsb2dpblRpbWVvdXQ7CiAgICAgfQotICAgIAotICAgIC8qKiAKKworICAgIC8qKgogICAgICAqIEdldCB0aGUgbG9nd3JpdGVyIG9iamVjdC4KICAgICAgKgogICAgICAqIEByZXR1cm4gPGNvZGU+IFByaW50V3JpdGVyIDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MJU1FMRXhjZXB0aW9uCUlmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIElmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgogICAgICAqLwogICAgIHB1YmxpYyBQcmludFdyaXRlciBnZXRMb2dXcml0ZXIoKSB0aHJvd3MgU1FMRXhjZXB0aW9uewotICAgIAlyZXR1cm4JbG9nV3JpdGVyOworICAgICAgICByZXR1cm4gICAgbG9nV3JpdGVyOwogICAgIH0KLSAgICAgICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGxvZ3dyaXRlciBvbiB0aGlzIG9iamVjdC4KICAgICAgKgogICAgICAqIEBwYXJhbSA8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MJU1FMRXhjZXB0aW9uCUlmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIElmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldExvZ1dyaXRlcihQcmludFdyaXRlciBsb2dXcml0ZXIpIHRocm93cyBTUUxFeGNlcHRpb257Ci0gICAgCXRoaXMubG9nV3JpdGVyID0gbG9nV3JpdGVyOwotICAgIH0gICAgICAgIAotICAgICAgICAKKyAgICAgICAgdGhpcy5sb2dXcml0ZXIgPSBsb2dXcml0ZXI7CisgICAgfQorCiAgICAgcHVibGljIExvZ2dlciBnZXRQYXJlbnRMb2dnZXIoKSB0aHJvd3MgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbnsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgZmVhdHVyZS4iKTsKICAgICB9CiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBkZXNjcmlwdGlvbi4KICAgICAgKgotICAgICAqIEByZXR1cm4JRGVzY3JpcHRpb24gYWJvdXQgdGhlIERhdGFTb3VyY2UuCisgICAgICogQHJldHVybiAgICBEZXNjcmlwdGlvbiBhYm91dCB0aGUgRGF0YVNvdXJjZS4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgewotICAgIAlyZXR1cm4gZGVzY3JpcHRpb247CisgICAgICAgIHJldHVybiBkZXNjcmlwdGlvbjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGRlc2NyaXB0aW9uLgogICAgICAqCiAgICAgICogQHBhcmFtIGRlc2NyaXB0aW9uIERlc2NyaXB0aW9uIGFib3V0IHRoZSBEYXRhU291cmNlLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERlc2NyaXB0aW9uKFN0cmluZyBkZXNjcmlwdGlvbikgewotICAgIAl0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247Ci0gICAgfSAgICAKLSAgICAKKyAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOworICAgIH0KKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgcmVmZXJlbmNlLgogICAgICAqCiAgICAgICogQHJldHVybiA8Y29kZT5SZWZlcmVuY2U8L2NvZGU+b2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyBSZWZlcmVuY2UgZ2V0UmVmZXJlbmNlKCkgewotICAgIAlyZXR1cm4gcmVmZXJlbmNlOworICAgICAgICByZXR1cm4gcmVmZXJlbmNlOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgcmVmZXJlbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCXJlZmVyZW5jZSA8Y29kZT5SZWZlcmVuY2U8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgcmVmZXJlbmNlIDxjb2RlPlJlZmVyZW5jZTwvY29kZT4gb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFJlZmVyZW5jZShSZWZlcmVuY2UgcmVmZXJlbmNlKSB7Ci0gICAgCXRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlOworICAgICAgICB0aGlzLnJlZmVyZW5jZSA9IHJlZmVyZW5jZTsKICAgICB9CiAKICAgICBwdWJsaWMgPFQ+IFQgdW53cmFwKENsYXNzPFQ+IGlmYWNlKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW4uamF2YQppbmRleCBhZTE2YjUxLi44MjQ1MTBkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbi5qYXZhCkBAIC0xOCwxMyArMTgsMTMgQEAKIAogcHVibGljIGludGVyZmFjZSBKZGJjU2V0dXBBZG1pbiB7CiAKLSAgICBwdWJsaWMgdm9pZCBzZXRUYWJsZU5hbWUoU3RyaW5nIGRiKTsgCisgICAgcHVibGljIHZvaWQgc2V0VGFibGVOYW1lKFN0cmluZyBkYik7CiAKICAgICBwdWJsaWMgU3RyaW5nIGdldFRhYmxlTmFtZSgpOwogCi0gICAgcHVibGljIHZvaWQgc2V0Sm5kaU5hbWUoU3RyaW5nIG5hbWUpOyAKKyAgICBwdWJsaWMgdm9pZCBzZXRKbmRpTmFtZShTdHJpbmcgbmFtZSk7CiAKLSAgICBwdWJsaWMgU3RyaW5nIGdldEpuZGlOYW1lKCk7IAorICAgIHB1YmxpYyBTdHJpbmcgZ2V0Sm5kaU5hbWUoKTsKIAogICAgIHB1YmxpYyB2b2lkIHNldFNjaGVtYU5hbWUoU3RyaW5nIG5hbWUpOwogCkBAIC0zNCw4ICszNCw4IEBACiAKICAgICBwdWJsaWMgSW50ZWdlciBnZXROb09mUm93cygpOwogCi0gICAgcHVibGljIGJvb2xlYW4gY2hlY2tTZXR1cCgpOyAKLSAgICAKKyAgICBwdWJsaWMgYm9vbGVhbiBjaGVja1NldHVwKCk7CisKICAgICBwdWJsaWMgaW50IGdldFZlcnNpb24oKTsKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbkltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW5JbXBsLmphdmEKaW5kZXggMWE5ZTVjNi4uYzcyZDc0YyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbkltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluSW1wbC5qYXZhCkBAIC02Niw2MiArNjYsNjIgQEAKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja1NldHVwKCl7CiAKICAgICAgICAgaWYgKGpuZGlOYW1lPT0gbnVsbCB8fCBqbmRpTmFtZS50cmltKCkuZXF1YWxzKCIiKSkgewotCSAgIHJldHVybiBmYWxzZTsKLQl9CisgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAogICAgICAgICBpZiAodGFibGVOYW1lPT0gbnVsbCB8fCB0YWJsZU5hbWUudHJpbSgpLmVxdWFscygiIikpIHsKLQkgICByZXR1cm4gZmFsc2U7Ci0JfQorICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAgICAgICAgQ29ubmVjdGlvbiBjb24gPSBudWxsOwotCVN0YXRlbWVudCBzID0gbnVsbDsKLQlSZXN1bHRTZXQgcnMgPSBudWxsOwotCWJvb2xlYW4gYiA9IGZhbHNlOworICAgIFN0YXRlbWVudCBzID0gbnVsbDsKKyAgICBSZXN1bHRTZXQgcnMgPSBudWxsOworICAgIGJvb2xlYW4gYiA9IGZhbHNlOwogICAgICAgICB0cnkgewotCSAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCSAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cChqbmRpTmFtZSk7CisgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSkgaWMubG9va3VwKGpuZGlOYW1lKTsKICAgICAgICAgICAgIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQkgICAgU3RyaW5nIGZ1bGxUYWJsZU5hbWUgPSB0YWJsZU5hbWU7Ci0JICAgIGlmIChzY2hlbWFOYW1lICE9IG51bGwgJiYgKCEoc2NoZW1hTmFtZS50cmltKCkuZXF1YWxzKCIiKSkpKSB7Ci0JICAgICAgICBmdWxsVGFibGVOYW1lID0gc2NoZW1hTmFtZS50cmltKCkgKyAiLiIgKyBmdWxsVGFibGVOYW1lOwotCSAgICB9Ci0JICAgIFN0cmluZyBxcnkgPSAic2VsZWN0ICogZnJvbSAiICsgZnVsbFRhYmxlTmFtZTsgCisgICAgICAgIFN0cmluZyBmdWxsVGFibGVOYW1lID0gdGFibGVOYW1lOworICAgICAgICBpZiAoc2NoZW1hTmFtZSAhPSBudWxsICYmICghKHNjaGVtYU5hbWUudHJpbSgpLmVxdWFscygiIikpKSkgeworICAgICAgICAgICAgZnVsbFRhYmxlTmFtZSA9IHNjaGVtYU5hbWUudHJpbSgpICsgIi4iICsgZnVsbFRhYmxlTmFtZTsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmcgcXJ5ID0gInNlbGVjdCAqIGZyb20gIiArIGZ1bGxUYWJsZU5hbWU7CiAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGVjdXRpbmcgcXVlcnkgOiIgKyBxcnkpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4ZWN1dGluZyBxdWVyeSA6IiArIHFyeSk7CiAKLQkgICAgcyA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKLQkgICAgcnMgPSBzLmV4ZWN1dGVRdWVyeShxcnkpOyAKKyAgICAgICAgcyA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgcnMgPSBzLmV4ZWN1dGVRdWVyeShxcnkpOwogCiAgICAgICAgICAgICBpbnQgaSA9IDA7Ci0JICAgIGlmIChycy5uZXh0KCkpIHsKLQkgICAgICAgIGkrKzsKLQkgICAgfQorICAgICAgICBpZiAocnMubmV4dCgpKSB7CisgICAgICAgICAgICBpKys7CisgICAgICAgIH0KIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJObyBvZiByb3dzIGZvdW5kOiIgKyBpKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTm8gb2Ygcm93cyBleHBlY3RlZDoiICsgbm9PZlJvd3MpOwogCi0JICAgIGlmIChpID09IG5vT2ZSb3dzLmludFZhbHVlKCkpIHsKLQkgICAgICAgYiA9IHRydWU7Ci0JICAgIH0gZWxzZSB7Ci0JICAgICAgIGIgPSBmYWxzZTsKLQkgICAgfQotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgYiA9IGZhbHNlOwotCX0gZmluYWxseSB7Ci0JICAgIHRyeSB7Ci0JICAgICAgICBpZiAocnMgIT0gbnVsbCkgcnMuY2xvc2UoKTsKLQkgICAgICAgIGlmIChzICE9IG51bGwpIHMuY2xvc2UoKTsKLQkgICAgICAgIGlmIChjb24gIT0gbnVsbCkgY29uLmNsb3NlKCk7CisgICAgICAgIGlmIChpID09IG5vT2ZSb3dzLmludFZhbHVlKCkpIHsKKyAgICAgICAgICAgYiA9IHRydWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgIGIgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgYiA9IGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpZiAocnMgIT0gbnVsbCkgcnMuY2xvc2UoKTsKKyAgICAgICAgICAgIGlmIChzICE9IG51bGwpIHMuY2xvc2UoKTsKKyAgICAgICAgICAgIGlmIChjb24gIT0gbnVsbCkgY29uLmNsb3NlKCk7CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICB9Ci0JfQotCVN5c3RlbS5vdXQucHJpbnRsbigiUmV0dXJuaW5nIHNldHVwIDoiICtiKTsKLQlyZXR1cm4gYjsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJldHVybmluZyBzZXR1cCA6IiArYik7CisgICAgcmV0dXJuIGI7CisgICAgfQorCiAgICAgcHVibGljIGludCBnZXRWZXJzaW9uKCl7Ci0JICAgIHJldHVybiBSZXNvdXJjZUFkYXB0ZXIuVkVSU0lPTjsKKyAgICAgICAgcmV0dXJuIFJlc291cmNlQWRhcHRlci5WRVJTSU9OOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Mb2NhbFRyYW5zYWN0aW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0xvY2FsVHJhbnNhY3Rpb24uamF2YQppbmRleCA4ZWJlMDU3Li5jNTRhMjE2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0xvY2FsVHJhbnNhY3Rpb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0xvY2FsVHJhbnNhY3Rpb24uamF2YQpAQCAtMjMsNDUgKzIzLDQ1IEBACiAvKioKICAqIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDgvMDMKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA4LzAzCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiBwdWJsaWMgY2xhc3MgTG9jYWxUcmFuc2FjdGlvbiBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLkxvY2FsVHJhbnNhY3Rpb24gewotICAgIAorCiAgICAgcHJpdmF0ZSBNYW5hZ2VkQ29ubmVjdGlvbiBtYzsKLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdG9yIGZvciA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPi4KLSAgICAgKiBAcGFyYW0JbWMJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHRoYXQgcmV0dXJucwotICAgICAqCQkJdGhpcyA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBvYmplY3QgYXMKLSAgICAgKgkJCWEgcmVzdWx0IG9mIDxjb2RlPmdldExvY2FsVHJhbnNhY3Rpb248L2NvZGU+CisgICAgICogQHBhcmFtICAgIG1jICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiB0aGF0IHJldHVybnMKKyAgICAgKiAgICAgICAgICAgIHRoaXMgPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gb2JqZWN0IGFzCisgICAgICogICAgICAgICAgICBhIHJlc3VsdCBvZiA8Y29kZT5nZXRMb2NhbFRyYW5zYWN0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBMb2NhbFRyYW5zYWN0aW9uKE1hbmFnZWRDb25uZWN0aW9uIG1jKSB7CiAgICAgICAgIHRoaXMubWMgPSBtYzsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBCZWdpbiBhIGxvY2FsIHRyYW5zYWN0aW9uLgogICAgICAqCi0gICAgICogQHRocm93cwlMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNoYW5naW5nCi0gICAgICoJCQkJCQl0aGUgYXV0b2NvbW1pdCBtb2RlIG9mIHRoZSBwaHlzaWNhbAotICAgICAqCQkJCQkJY29ubmVjdGlvbgorICAgICAqIEB0aHJvd3MgICAgTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjaGFuZ2luZworICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGF1dG9jb21taXQgbW9kZSBvZiB0aGUgcGh5c2ljYWwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBiZWdpbigpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIC8vR0pDSU5UCi0JbWMudHJhbnNhY3Rpb25TdGFydGVkKCk7CisgICAgbWMudHJhbnNhY3Rpb25TdGFydGVkKCk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBtYy5nZXRBY3R1YWxDb25uZWN0aW9uKCkuc2V0QXV0b0NvbW1pdChmYWxzZSk7CiAgICAgICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbW1pdCBhIGxvY2FsIHRyYW5zYWN0aW9uLgotICAgICAqIEB0aHJvd3MJTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjaGFuZ2luZwotICAgICAqCQkJCQkJdGhlIGF1dG9jb21taXQgbW9kZSBvZiB0aGUgcGh5c2ljYWwKLSAgICAgKgkJCQkJCWNvbm5lY3Rpb24gb3IgY29tbWl0dGluZyB0aGUgdHJhbnNhY3Rpb24KKyAgICAgKiBAdGhyb3dzICAgIExvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2hhbmdpbmcKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhdXRvY29tbWl0IG1vZGUgb2YgdGhlIHBoeXNpY2FsCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uIG9yIGNvbW1pdHRpbmcgdGhlIHRyYW5zYWN0aW9uCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgY29tbWl0KCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgRXhjZXB0aW9uIGUgPSBudWxsOwpAQCAtNzIsMTUgKzcyLDE1IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICAgICAgLy9HSkNJTlQKLQltYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOworICAgIG1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUm9sbGJhY2sgYSBsb2NhbCB0cmFuc2FjdGlvbi4KLSAgICAgKiAKLSAgICAgKiBAdGhyb3dzCUxvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2hhbmdpbmcKLSAgICAgKgkJCQkJCXRoZSBhdXRvY29tbWl0IG1vZGUgb2YgdGhlIHBoeXNpY2FsCi0gICAgICoJCQkJCQljb25uZWN0aW9uIG9yIHJvbGxpbmcgYmFjayB0aGUgdHJhbnNhY3Rpb24KKyAgICAgKgorICAgICAqIEB0aHJvd3MgICAgTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjaGFuZ2luZworICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGF1dG9jb21taXQgbW9kZSBvZiB0aGUgcGh5c2ljYWwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gb3Igcm9sbGluZyBiYWNrIHRoZSB0cmFuc2FjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJvbGxiYWNrKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKQEAgLTkwLDcgKzkwLDcgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgICAgICAvL0dKQ0lOVAotCW1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CisgICAgbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb24uamF2YQppbmRleCAzMGY0NjBhLi4yZGFkNTlhIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbi5qYXZhCkBAIC00MSw4ICs0MSw4IEBACiAvKioKICAqIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzIyCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8yMgorICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogcHVibGljIGNsYXNzIE1hbmFnZWRDb25uZWN0aW9uIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gewogCkBAIC01Miw3ICs1Miw3IEBACiAKICAgICBwcml2YXRlIGJvb2xlYW4gaXNEZXN0cm95ZWQgPSBmYWxzZTsKICAgICBwcml2YXRlIGJvb2xlYW4gaXNVc2FibGUgPSB0cnVlOwotICAgIAorCiAgICAgcHJpdmF0ZSBpbnQgY29ubmVjdGlvblR5cGUgPSBJU05PVEFQT09MRURDT05ORUNUSU9OOwogICAgIHByaXZhdGUgUG9vbGVkQ29ubmVjdGlvbiBwYyA9IG51bGw7CiAgICAgcHJpdmF0ZSBqYXZhLnNxbC5Db25uZWN0aW9uIGFjdHVhbENvbm5lY3Rpb24gPSBudWxsOwpAQCAtNjIsNyArNjIsNyBAQAogICAgIHByaXZhdGUgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG1jZiA9IG51bGw7CiAgICAgcHJpdmF0ZSBYQVJlc291cmNlIHhhciA9IG51bGw7CiAgICAgcHVibGljIENvbm5lY3Rpb25Ib2xkZXIgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZTsKLSAgICAKKwogICAgIC8vR0pDSU5UCiAgICAgcHJpdmF0ZSBpbnQgaXNvbGF0aW9uTGV2ZWxXaGVuQ2xlYW5lZDsKICAgICBwcml2YXRlIGJvb2xlYW4gaXNDbGVhbiA9IGZhbHNlOwpAQCAtNzcsNzEgKzc3LDcxIEBACiAgICAgc3RhdGljIHsKICAgICAgICAgX2xvZ2dlciA9IExvZ2dlci5nZXRBbm9ueW1vdXNMb2dnZXIoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+LiBUaGUgcG9vbGVkQ29ubiBwYXJhbWV0ZXIgaXMgZXhwZWN0ZWQKLSAgICAgKiB0byBiZSBudWxsIGFuZCBzcWxDb25uIHBhcmFtZXRlciBpcyB0aGUgYWN0dWFsIGNvbm5lY3Rpb24gaW4gY2FzZSB3aGVyZSAKLSAgICAgKiB0aGUgYWN0dWFsIGNvbm5lY3Rpb24gaXMgZ290IGZyb20gYSBub24gcG9vbGVkIGRhdGFzb3VyY2Ugb2JqZWN0LiBUaGUgCisgICAgICogdG8gYmUgbnVsbCBhbmQgc3FsQ29ubiBwYXJhbWV0ZXIgaXMgdGhlIGFjdHVhbCBjb25uZWN0aW9uIGluIGNhc2Ugd2hlcmUKKyAgICAgKiB0aGUgYWN0dWFsIGNvbm5lY3Rpb24gaXMgZ290IGZyb20gYSBub24gcG9vbGVkIGRhdGFzb3VyY2Ugb2JqZWN0LiBUaGUKICAgICAgKiBwb29sZWRDb25uIHBhcmFtZXRlciBpcyBleHBlY3RlZCB0byBiZSBub24gbnVsbCBhbmQgc3FsQ29ubiBwYXJhbWV0ZXIKICAgICAgKiBpcyBleHBlY3RlZCB0byBiZSBudWxsIGluIHRoZSBjYXNlIHdoZXJlIHRoZSBkYXRhc291cmNlIG9iamVjdCBpcyBhCiAgICAgICogY29ubmVjdGlvbiBwb29sIGRhdGFzb3VyY2Ugb3IgYW4geGEgZGF0YXNvdXJjZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlwb29sZWRDb25uCTxjb2RlPlBvb2xlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpbiBjYXNlIHRoZSAKLSAgICAgKgkJCQlwaHlzaWNhbCBjb25uZWN0aW9uIGlzIHRvIGJlIG9idGFpbmVkIGZyb20gYSBwb29sZWQKLSAgICAgKgkJCQk8Y29kZT5EYXRhU291cmNlPC9jb2RlPjsgbnVsbCBvdGhlcndpc2UKLSAgICAgKiBAcGFyYW0Jc3FsQ29ubgk8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaW4gY2FzZSB0aGUgcGh5c2ljYWwKLSAgICAgKgkJCWNvbm5lY3Rpb24gaXMgdG8gYmUgb2J0YWluZWQgZnJvbSBhIG5vbiBwb29sZWQgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT47Ci0gICAgICoJCQludWxsIG90aGVyd2lzZQotICAgICAqIEBwYXJhbQlwYXNzd2RDcmVkCW9iamVjdCBjb25hdGluaW5nIHRoZQotICAgICAqCQkJCXVzZXIgYW5kIHBhc3N3b3JkIGZvciBhbGxvY2F0aW5nIHRoZSBjb25uZWN0aW9uCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QKLSAgICAgKgkJCQkJdGhhdCBjcmVhdGVkIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdAotICAgICAqCQkJCQlpcyBub3QgdGhlIHNhbWUgYXMgcmV0dXJuZWQgYnkgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgotICAgICAqCQkJCQlvYmplY3QgcGFzc2VkCisgICAgICogQHBhcmFtICAgIHBvb2xlZENvbm4gICAgPGNvZGU+UG9vbGVkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGluIGNhc2UgdGhlCisgICAgICogICAgICAgICAgICAgICAgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyB0byBiZSBvYnRhaW5lZCBmcm9tIGEgcG9vbGVkCisgICAgICogICAgICAgICAgICAgICAgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT47IG51bGwgb3RoZXJ3aXNlCisgICAgICogQHBhcmFtICAgIHNxbENvbm4gICAgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGluIGNhc2UgdGhlIHBoeXNpY2FsCisgICAgICogICAgICAgICAgICBjb25uZWN0aW9uIGlzIHRvIGJlIG9idGFpbmVkIGZyb20gYSBub24gcG9vbGVkIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+OworICAgICAqICAgICAgICAgICAgbnVsbCBvdGhlcndpc2UKKyAgICAgKiBAcGFyYW0gICAgcGFzc3dkQ3JlZCAgICBvYmplY3QgY29uYXRpbmluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICB1c2VyIGFuZCBwYXNzd29yZCBmb3IgYWxsb2NhdGluZyB0aGUgY29ubmVjdGlvbgorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0CisgICAgICogICAgICAgICAgICAgICAgICAgIHRoYXQgY3JlYXRlZCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgaXMgbm90IHRoZSBzYW1lIGFzIHJldHVybmVkIGJ5IDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgb2JqZWN0IHBhc3NlZAogICAgICAqLwotICAgIHB1YmxpYyBNYW5hZ2VkQ29ubmVjdGlvbihQb29sZWRDb25uZWN0aW9uIHBvb2xlZENvbm4sIGphdmEuc3FsLkNvbm5lY3Rpb24gc3FsQ29ubiwgCisgICAgcHVibGljIE1hbmFnZWRDb25uZWN0aW9uKFBvb2xlZENvbm5lY3Rpb24gcG9vbGVkQ29ubiwgamF2YS5zcWwuQ29ubmVjdGlvbiBzcWxDb25uLAogICAgICAgICBQYXNzd29yZENyZWRlbnRpYWwgcGFzc3dkQ3JlZCwgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG1jZikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYocG9vbGVkQ29ubiA9PSBudWxsICYmIHNxbENvbm4gPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJDb25uZWN0aW9uIG9iamVjdCBjYW5ub3QgYmUgbnVsbCIpOwogICAgICAgICB9CiAKLQlpZiAoY29ubmVjdGlvblR5cGUgPT0gSVNOT1RBUE9PTEVEQ09OTkVDVElPTiApIHsKLQkgICAgYWN0dWFsQ29ubmVjdGlvbiA9IHNxbENvbm47Ci0JfQorICAgIGlmIChjb25uZWN0aW9uVHlwZSA9PSBJU05PVEFQT09MRURDT05ORUNUSU9OICkgeworICAgICAgICBhY3R1YWxDb25uZWN0aW9uID0gc3FsQ29ubjsKKyAgICB9CiAKICAgICAgICAgcGMgPSBwb29sZWRDb25uOwogICAgICAgICBjb25uZWN0aW9uSGFuZGxlcyA9IG5ldyBIYXNodGFibGUoKTsKICAgICAgICAgcGFzc3dkQ3JlZGVudGlhbCA9IHBhc3N3ZENyZWQ7CiAgICAgICAgIHRoaXMubWNmID0gbWNmOwotICAgICAgICBpZihwYXNzd2RDcmVkZW50aWFsICE9IG51bGwgJiYgIAorICAgICAgICBpZihwYXNzd2RDcmVkZW50aWFsICE9IG51bGwgJiYKICAgICAgICAgICAgIHRoaXMubWNmLmVxdWFscyhwYXNzd2RDcmVkZW50aWFsLmdldE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSgpKSA9PSBmYWxzZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IHRoYXQgaGFzIGNyZWF0ZWQgdGhpcyAiICsgCisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgdGhhdCBoYXMgY3JlYXRlZCB0aGlzICIgKwogICAgICAgICAgICAgICAgICJNYW5hZ2VkQ29ubmVjdGlvbiBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSByZXR1cm5lZCBieSIgKwogICAgICAgICAgICAgICAgICAgICAiIHRoZSBQYXNzd29yZENyZWRlbnRpYWwgZm9yIHRoaXMgTWFuYWdlZENvbm5lY3Rpb24iKTsKICAgICAgICAgfQogICAgICAgICBsb2dXcml0ZXIgPSBtY2YuZ2V0TG9nV3JpdGVyKCk7CiAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOwotCWNlID0gbmV3IENvbm5lY3Rpb25FdmVudCh0aGlzLCBDb25uZWN0aW9uRXZlbnQuQ09OTkVDVElPTl9DTE9TRUQpOworICAgIGNlID0gbmV3IENvbm5lY3Rpb25FdmVudCh0aGlzLCBDb25uZWN0aW9uRXZlbnQuQ09OTkVDVElPTl9DTE9TRUQpOwogICAgIH0KIAogICAgIC8qKgogICAgICAqIEFkZHMgYSBjb25uZWN0aW9uIGV2ZW50IGxpc3RlbmVyIHRvIHRoZSBNYW5hZ2VkQ29ubmVjdGlvbiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlsaXN0ZW5lcgk8Y29kZT5Db25uZWN0aW9uRXZlbnRMaXN0ZW5lcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbGlzdGVuZXIgICAgPGNvZGU+Q29ubmVjdGlvbkV2ZW50TGlzdGVuZXI8L2NvZGU+CiAgICAgICogQHNlZSA8Y29kZT5yZW1vdmVDb25uZWN0aW9uRXZlbnRMaXN0ZW5lcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBhZGRDb25uZWN0aW9uRXZlbnRMaXN0ZW5lcihDb25uZWN0aW9uRXZlbnRMaXN0ZW5lciBsaXN0ZW5lcikgewotCXRoaXMubGlzdGVuZXIgPSBsaXN0ZW5lcjsKKyAgICB0aGlzLmxpc3RlbmVyID0gbGlzdGVuZXI7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogVXNlZCBieSB0aGUgY29udGFpbmVyIHRvIGNoYW5nZSB0aGUgYXNzb2NpYXRpb24gb2YgYW4gYXBwbGljYXRpb24tbGV2ZWwgCisgICAgICogVXNlZCBieSB0aGUgY29udGFpbmVyIHRvIGNoYW5nZSB0aGUgYXNzb2NpYXRpb24gb2YgYW4gYXBwbGljYXRpb24tbGV2ZWwKICAgICAgKiBjb25uZWN0aW9uIGhhbmRsZSB3aXRoIGEgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCWNvbm5lY3Rpb24JPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdG8gYmUgYXNzb2NpYXRlZCB3aXRoCi0gICAgICoJCQkJdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vIG1vcmUKLSAgICAgKgkJCQkJdmFsaWQgb3IgdGhlIGNvbm5lY3Rpb24gaGFuZGxlIHBhc3NlZCBpcyBudWxsCisgICAgICogQHBhcmFtICAgIGNvbm5lY3Rpb24gICAgPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdG8gYmUgYXNzb2NpYXRlZCB3aXRoCisgICAgICogICAgICAgICAgICAgICAgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vIG1vcmUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgdmFsaWQgb3IgdGhlIGNvbm5lY3Rpb24gaGFuZGxlIHBhc3NlZCBpcyBudWxsCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgYXNzb2NpYXRlQ29ubmVjdGlvbihPYmplY3QgY29ubmVjdGlvbikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTE1MiwxMSArMTUyLDExIEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkNvbm5lY3Rpb24gaGFuZGxlIGNhbm5vdCBiZSBudWxsIik7CiAgICAgICAgIH0KICAgICAgICAgQ29ubmVjdGlvbkhvbGRlciBjaCA9IChDb25uZWN0aW9uSG9sZGVyKSBjb25uZWN0aW9uOwotICAgICAgICAKKwogICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWMgPSAoY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uKWNoLmdldE1hbmFnZWRDb25uZWN0aW9uKCk7Ci0JbWMuYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7Ci0JaXNDbGVhbiA9IGZhbHNlOwotICAgICAgICAKKyAgICBtYy5hY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKKyAgICBpc0NsZWFuID0gZmFsc2U7CisKICAgICAgICAgY2guYXNzb2NpYXRlQ29ubmVjdGlvbihhY3R1YWxDb25uZWN0aW9uLCB0aGlzKTsKICAgICAgICAgLyoqCiAgICAgICAgICAqIFRoZSBleHBlY3RhdGlvbiBmcm9tIHRoZSBhYm92ZSBtZXRob2QgaXMgdGhhdCB0aGUgY29ubmVjdGlvbiBob2xkZXIKQEAgLTE2NSwzNCArMTY1LDM0IEBACiAgICAgICAgICAqIHRvIHRoZSBNYW5hZ2VkQ29ubmVjdGlvbiBpbnN0YW5jZSB3aXRoIHRoaXMgTWFuYWdlZENvbm5lY3Rpb24gaW5zdGFuY2UuCiAgICAgICAgICAqIEFueSBwcmV2aW91cyBzdGF0ZW1lbnRzIGFuZCByZXN1bHQgc2V0cyBhbHNvIG5lZWQgdG8gYmUgcmVtb3ZlZC4KICAgICAgICAgICovCi0gICAgICAgICAKKwogICAgICAgICAgaWYoYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSAhPSBudWxsKSB7CiAgICAgICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlLnNldEFjdGl2ZShmYWxzZSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgY2guc2V0QWN0aXZlKHRydWUpOwotICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gY2g7IAorICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gY2g7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogQXBwbGljYXRpb24gc2VydmVyIGNhbGxzIHRoaXMgbWV0aG9kIHRvIGZvcmNlIGFueSBjbGVhbnVwIG9uIHRoZSAKKyAgICAgKiBBcHBsaWNhdGlvbiBzZXJ2ZXIgY2FsbHMgdGhpcyBtZXRob2QgdG8gZm9yY2UgYW55IGNsZWFudXAgb24gdGhlCiAgICAgICogPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLiBUaGlzIG1ldGhvZCBjYWxscyB0aGUgaW52YWxpZGF0ZQogICAgICAqIG1ldGhvZCBvbiBhbGwgQ29ubmVjdGlvbkhhbmRsZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+LgotICAgICAqIAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm8gbW9yZSB2YWxpZAorICAgICAqCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBubyBtb3JlIHZhbGlkCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgY2xlYW51cCgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGNsZWFudXAiKTsKICAgICAgICAgfQogICAgICAgICBjaGVja0lmVmFsaWQoKTsKLSAgICAgICAgCisKICAgICAgICAgLyoqCiAgICAgICAgICAqIG1heSBuZWVkIHRvIHNldCB0aGUgYXV0b2NvbW1pdCB0byB0cnVlIGZvciB0aGUgbm9uLXBvb2xlZCBjYXNlLgogICAgICAgICAgKi8KICAgICAgICAgLy9HSkNJTlQKLQkvL2lmIChhY3R1YWxDb25uZWN0aW9uICE9IG51bGwpIHsKLQlpZiAoY29ubmVjdGlvblR5cGUgPT0gSVNOT1RBUE9PTEVEQ09OTkVDVElPTiApIHsKKyAgICAvL2lmIChhY3R1YWxDb25uZWN0aW9uICE9IG51bGwpIHsKKyAgICBpZiAoY29ubmVjdGlvblR5cGUgPT0gSVNOT1RBUE9PTEVEQ09OTkVDVElPTiApIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGlzb2xhdGlvbkxldmVsV2hlbkNsZWFuZWQgPSBhY3R1YWxDb25uZWN0aW9uLmdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCk7CiAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKQEAgLTIwMSwxNyArMjAxLDE3IEBACiAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpc0NsZWFuID0gdHJ1ZTsKLSAgICAgICAgCisKICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGhpcyBtZXRob2QgcmVtb3ZlcyBhbGwgdGhlIGNvbm5lY3Rpb24gaGFuZGxlcyBmcm9tIHRoZSB0YWJsZQogICAgICAqIG9mIGNvbm5lY3Rpb24gaGFuZGxlcyBhbmQgaW52YWxpZGF0ZXMgYWxsIG9mIHRoZW0gc28gdGhhdCBhbnkKICAgICAgKiBvcGVyYXRpb24gb24gdGhvc2UgY29ubmVjdGlvbiBoYW5kbGVzIHRocm93cyBhbiBleGNlcHRpb24uCiAgICAgICoKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGEgcHJvYmxlbSBpbiByZXRyaWV2aW5nCi0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAl0aGUgY29ubmVjdGlvbiBoYW5kbGVzCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhIHByb2JsZW0gaW4gcmV0cmlldmluZworICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNvbm5lY3Rpb24gaGFuZGxlcwogICAgICAqLwogICAgIHByaXZhdGUgdm9pZCBpbnZhbGlkYXRlQWxsQ29ubmVjdGlvbkhhbmRsZXMoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBTZXQgaGFuZGxlcyA9IGNvbm5lY3Rpb25IYW5kbGVzLmtleVNldCgpOwpAQCAtMjI2LDIyICsyMjYsMjIgQEAKICAgICAgICAgfQogICAgICAgICBjb25uZWN0aW9uSGFuZGxlcy5jbGVhcigpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIERlc3Ryb3lzIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIHRvIHRoZSB1bmRlcmx5aW5nIHJlc291cmNlIG1hbmFnZXIuCi0gICAgICogCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjbG9zaW5nIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uCisgICAgICoKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNsb3NpbmcgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGRlc3Ryb3kiKTsKICAgICAgICAgfQotCS8vR0pDSU5UCi0JaWYoaXNEZXN0cm95ZWQgPT0gdHJ1ZSkgewotCSAgICByZXR1cm47CQotCX0KKyAgICAvL0dKQ0lOVAorICAgIGlmKGlzRGVzdHJveWVkID09IHRydWUpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotCWFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOworICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgaWYoY29ubmVjdGlvblR5cGUgPT0gSVNYQUNPTk5FQ1RJT04gfHwgY29ubmVjdGlvblR5cGUgPT0gSVNQT09MRURDT05ORUNUSU9OKSB7CiAgICAgICAgICAgICAgICAgcGMuY2xvc2UoKTsKQEAgLTI1NSwyOCArMjU1LDI4IEBACiAgICAgICAgICAgICBpc0Rlc3Ryb3llZCA9IHRydWU7CiAgICAgICAgICAgICBwYXNzd2RDcmVkZW50aWFsID0gbnVsbDsKICAgICAgICAgICAgIGNvbm5lY3Rpb25IYW5kbGVzID0gbnVsbDsKLSAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGZvbGxvd2luZyBleGNlcHRpb24gaGFzIG9jY3VyZWQgZHVyaW5nIGRlc3Ryb3k6ICIgCisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBmb2xsb3dpbmcgZXhjZXB0aW9uIGhhcyBvY2N1cmVkIGR1cmluZyBkZXN0cm95OiAiCiAgICAgICAgICAgICAgICAgKyBzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICAgICAgaXNEZXN0cm95ZWQgPSB0cnVlOwogICAgICAgICBwYXNzd2RDcmVkZW50aWFsID0gbnVsbDsKICAgICAgICAgY29ubmVjdGlvbkhhbmRsZXMgPSBudWxsOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSBuZXcgY29ubmVjdGlvbiBoYW5kbGUgZm9yIHRoZSB1bmRlcmx5aW5nIHBoeXNpY2FsIAorICAgICAqIENyZWF0ZXMgYSBuZXcgY29ubmVjdGlvbiBoYW5kbGUgZm9yIHRoZSB1bmRlcmx5aW5nIHBoeXNpY2FsCiAgICAgICogY29ubmVjdGlvbiByZXByZXNlbnRlZCBieSB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCXN1YmplY3QJPGNvZGU+U3ViamVjdDwvY29kZT4gcGFyYW1ldGVyIG5lZWRlZCBmb3IgYXV0aGVudGljYXRpb24KLSAgICAgKiBAcGFyYW0JY3hSZXFJbmZvCTxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gY2FycmllcyB0aGUgdXNlciAKLSAgICAgKiAgICAgICAJICAgICAgICAgCWFuZCBwYXNzd29yZCByZXF1aXJlZCBmb3IgZ2V0dGluZyB0aGlzIGNvbm5lY3Rpb24uCi0gICAgICogQHJldHVybglDb25uZWN0aW9uCXRoZSBjb25uZWN0aW9uIGhhbmRsZSA8Y29kZT5PYmplY3Q8L2NvZGU+Ci0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZSAKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCXBoeXNpY2FsIGNvbm5lY3Rpb24gZnJvbSB0aGUgcG9vbGVkIGNvbm5lY3Rpb24gCi0gICAgICogQHRocm93cwlTZWN1cml0eUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhIG1pc21hdGNoIGJldHdlZW4gdGhlCi0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAlwYXNzd29yZCBjcmVkZW50aWFscyBvciByZWF1dGhlbnRpY2F0aW9uIGlzIHJlcXVlc3RlZAorICAgICAqIEBwYXJhbSAgICBzdWJqZWN0ICAgIDxjb2RlPlN1YmplY3Q8L2NvZGU+IHBhcmFtZXRlciBuZWVkZWQgZm9yIGF1dGhlbnRpY2F0aW9uCisgICAgICogQHBhcmFtICAgIGN4UmVxSW5mbyAgICA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IGNhcnJpZXMgdGhlIHVzZXIKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBwYXNzd29yZCByZXF1aXJlZCBmb3IgZ2V0dGluZyB0aGlzIGNvbm5lY3Rpb24uCisgICAgICogQHJldHVybiAgICBDb25uZWN0aW9uICAgIHRoZSBjb25uZWN0aW9uIGhhbmRsZSA8Y29kZT5PYmplY3Q8L2NvZGU+CisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGh5c2ljYWwgY29ubmVjdGlvbiBmcm9tIHRoZSBwb29sZWQgY29ubmVjdGlvbgorICAgICAqIEB0aHJvd3MgICAgU2VjdXJpdHlFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYSBtaXNtYXRjaCBiZXR3ZWVuIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQgY3JlZGVudGlhbHMgb3IgcmVhdXRoZW50aWNhdGlvbiBpcyByZXF1ZXN0ZWQKICAgICAgKi8KLSAgICBwdWJsaWMgT2JqZWN0IGdldENvbm5lY3Rpb24oU3ViamVjdCBzdWIsIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mbyBjeFJlcUluZm8pIAorICAgIHB1YmxpYyBPYmplY3QgZ2V0Q29ubmVjdGlvbihTdWJqZWN0IHN1YiwgamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxSW5mbykKICAgICAgICAgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBnZXRDb25uZWN0aW9uIik7CkBAIC0yODQsMTQgKzI4NCwxNCBAQAogICAgICAgICBjaGVja0lmVmFsaWQoKTsKICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mbyBjeFJlcXVlc3RJbmZvID0gKGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm8pIGN4UmVxSW5mbzsKICAgICAgICAgUGFzc3dvcmRDcmVkZW50aWFsIHBhc3N3ZENyZWQgPSBTZWN1cml0eVV0aWxzLmdldFBhc3N3b3JkQ3JlZGVudGlhbCh0aGlzLm1jZiwgc3ViLCBjeFJlcXVlc3RJbmZvKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIGlmKFNlY3VyaXR5VXRpbHMuaXNQYXNzd29yZENyZWRlbnRpYWxFcXVhbCh0aGlzLnBhc3N3ZENyZWRlbnRpYWwsIHBhc3N3ZENyZWQpID09IGZhbHNlKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgamFrYXJ0YS5yZXNvdXJjZS5zcGkuU2VjdXJpdHlFeGNlcHRpb24oIlJlLWF1dGhlbnRpY2F0aW9uIG5vdCBzdXBwb3J0ZWQiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAvL0dKQ0lOVAogICAgICAgICBnZXRBY3R1YWxDb25uZWN0aW9uKCk7Ci0gCisKICAgICAgICAgLyoqCiAgICAgICAgICAqIFRoZSBmb2xsb3dpbmcgY29kZSBpbiB0aGUgaWYgc3RhdGVtZW50IGZpcnN0IGNoZWNrcyBpZiB0aGlzIE1hbmFnZWRDb25uZWN0aW9uCiAgICAgICAgICAqIGlzIGNsZWFuIG9yIG5vdC4gSWYgaXQgaXMsIGl0IHJlc2V0cyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsIHRvIHdoYXQKQEAgLTMwMSwyOCArMzAxLDI4IEBACiAgICAgICAgIGlmKGlzQ2xlYW4pIHsKICAgICAgICAgICAgICgoY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSltY2YpLnJlc2V0SXNvbGF0aW9uKHRoaXMsIGlzb2xhdGlvbkxldmVsV2hlbkNsZWFuZWQpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAgCisKKwogICAgICAgICBDb25uZWN0aW9uSG9sZGVyIGNvbm5Ib2xkZXJPYmplY3QgPSBuZXcgQ29ubmVjdGlvbkhvbGRlcihhY3R1YWxDb25uZWN0aW9uLCB0aGlzKTsKLQlpc0NsZWFuPWZhbHNlOwotICAgICAgICAKKyAgICBpc0NsZWFuPWZhbHNlOworCiAgICAgICAgIGlmKGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgIT0gbnVsbCkgewogICAgICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZS5zZXRBY3RpdmUoZmFsc2UpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGNvbm5Ib2xkZXJPYmplY3Quc2V0QWN0aXZlKHRydWUpOwogICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gY29ubkhvbGRlck9iamVjdDsKLSAKKwogICAgICAgICByZXR1cm4gY29ubkhvbGRlck9iamVjdDsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIGFuIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IGluc3RhbmNlLiBUaGUgPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gaW50ZXJmYWNlCi0gICAgICogaXMgdXNlZCBieSB0aGUgY29udGFpbmVyIHRvIG1hbmFnZSBsb2NhbCB0cmFuc2FjdGlvbnMgZm9yIGEgUk0gaW5zdGFuY2UuIAorICAgICAqIGlzIHVzZWQgYnkgdGhlIGNvbnRhaW5lciB0byBtYW5hZ2UgbG9jYWwgdHJhbnNhY3Rpb25zIGZvciBhIFJNIGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICogQHJldHVybiAgICA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCiAgICAgICovCiAgICAgcHVibGljIGpha2FydGEucmVzb3VyY2Uuc3BpLkxvY2FsVHJhbnNhY3Rpb24gZ2V0TG9jYWxUcmFuc2FjdGlvbigpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC0zMzEsMTMgKzMzMSwxMyBAQAogICAgICAgICBjaGVja0lmVmFsaWQoKTsKICAgICAgICAgcmV0dXJuIG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuTG9jYWxUcmFuc2FjdGlvbih0aGlzKTsKICAgICB9Ci0gICAgIAorCiAgICAgLyoqCi0gICAgICogR2V0cyB0aGUgbG9nIHdyaXRlciBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuIAorICAgICAqIEdldHMgdGhlIGxvZyB3cml0ZXIgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgCi0gICAgICoJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICogQHJldHVybiAgICA8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyAgICAgKiAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKiBAc2VlIDxjb2RlPnNldExvZ1dyaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgUHJpbnRXcml0ZXIgZ2V0TG9nV3JpdGVyKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKQEAgLTM0NSw0NiArMzQ1LDQ2IEBACiAgICAgICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGdldExvZ1dyaXRlciIpOwogICAgICAgICB9CiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gbG9nV3JpdGVyOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIEdldHMgdGhlIG1ldGFkYXRhIGluZm9ybWF0aW9uIGZvciB0aGlzIGNvbm5lY3Rpb24ncyB1bmRlcmx5aW5nIEVJUyAKLSAgICAgKiByZXNvdXJjZSBtYW5hZ2VyIGluc3RhbmNlLiAKKyAgICAgKiBHZXRzIHRoZSBtZXRhZGF0YSBpbmZvcm1hdGlvbiBmb3IgdGhpcyBjb25uZWN0aW9uJ3MgdW5kZXJseWluZyBFSVMKKyAgICAgKiByZXNvdXJjZSBtYW5hZ2VyIGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICogQHJldHVybiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCiAgICAgICovCiAgICAgcHVibGljIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEgZ2V0TWV0YURhdGEoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBnZXRNZXRhRGF0YSIpOwogICAgICAgICB9CiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhKHRoaXMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFJldHVybnMgYW4gPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UuIAorICAgICAqIFJldHVybnMgYW4gPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgb3IKLSAgICAgKgkJCQkJdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUgCi0gICAgICoJCQkJCTxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlOb3RTdXBwb3J0ZWRFeGNlcHRpb24JaWYgdW5kZXJseWluZyBkYXRhc291cmNlIGlzIG5vdCBhbgotICAgICAqCQkJCQk8Y29kZT5YQURhdGFTb3VyY2U8L2NvZGU+CisgICAgICogQHJldHVybiAgICA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIG9yCisgICAgICogICAgICAgICAgICAgICAgICAgIHRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBOb3RTdXBwb3J0ZWRFeGNlcHRpb24gICAgaWYgdW5kZXJseWluZyBkYXRhc291cmNlIGlzIG5vdCBhbgorICAgICAqICAgICAgICAgICAgICAgICAgICA8Y29kZT5YQURhdGFTb3VyY2U8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFhBUmVzb3VyY2UgZ2V0WEFSZXNvdXJjZSgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGdldFhBUmVzb3VyY2UiKTsKICAgICAgICAgfQogICAgICAgICBjaGVja0lmVmFsaWQoKTsKLSAgICAgICAgCisKICAgICAgICAgaWYoY29ubmVjdGlvblR5cGUgPT0gSVNYQUNPTk5FQ1RJT04pIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgaWYoeGFyID09IG51bGwpIHsKLQkJICAgIC8qKgorICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgICAgICAqIFVzaW5nIHRoZSB3cmFwcGVyIFhBUmVzb3VyY2UuCiAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgICAgICB4YXIgPSBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLlhBUmVzb3VyY2VJbXBsKCgoWEFDb25uZWN0aW9uKXBjKS5nZXRYQVJlc291cmNlKCksIHRoaXMpOwpAQCAtMzk3LDE2ICszOTcsMTYgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkNhbm5vdCBnZXQgYW4gWEFSZXNvdXJjZSBmcm9tIGEgbm9uIFhBIGNvbm5lY3Rpb24iKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJlbW92ZXMgYW4gYWxyZWFkeSByZWdpc3RlcmVkIGNvbm5lY3Rpb24gZXZlbnQgbGlzdGVuZXIgZnJvbSB0aGUKICAgICAgKiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbGlzdGVuZXIJPGNvZGU+Q29ubmVjdGlvbkV2ZW50TGlzdGVuZXI8L2NvZGU+IHRvIGJlIHJlbW92ZWQKKyAgICAgKiBAcGFyYW0gICAgbGlzdGVuZXIgICAgPGNvZGU+Q29ubmVjdGlvbkV2ZW50TGlzdGVuZXI8L2NvZGU+IHRvIGJlIHJlbW92ZWQKICAgICAgKiBAc2VlIDxjb2RlPmFkZENvbm5lY3Rpb25FdmVudExpc3RlbmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJlbW92ZUNvbm5lY3Rpb25FdmVudExpc3RlbmVyKENvbm5lY3Rpb25FdmVudExpc3RlbmVyIGxpc3RlbmVyKSB7Ci0JbGlzdGVuZXIgPSBudWxsOworICAgIGxpc3RlbmVyID0gbnVsbDsKICAgICB9CiAKICAgICAvKioKQEAgLTQxNSw3ICs0MTUsNyBAQAogICAgICAqIExvY2FsVHJhbnNhY3Rpb24gb2JqZWN0IHdoZW4gaXRzIGJlZ2luKCkgbWV0aG9kIGlzIGNhbGxlZC4KICAgICAgKi8KICAgICB2b2lkIHRyYW5zYWN0aW9uU3RhcnRlZCgpIHsKLQl0cmFuc2FjdGlvbkluUHJvZ3Jlc3MgPSB0cnVlOwkKKyAgICB0cmFuc2FjdGlvbkluUHJvZ3Jlc3MgPSB0cnVlOwogICAgIH0KIAogICAgIC8qKgpAQCAtNDI0LDE2ICs0MjQsMTYgQEAKICAgICAgKiBMb2NhbFRyYW5zYWN0aW9uIG9iamVjdCB3aGVuIGl0cyBlbmQoKSBtZXRob2QgaXMgY2FsbGVkLgogICAgICAqLwogICAgIHZvaWQgdHJhbnNhY3Rpb25Db21wbGV0ZWQoKSB7Ci0JdHJhbnNhY3Rpb25JblByb2dyZXNzID0gZmFsc2U7Ci0JaWYoY29ubmVjdGlvblR5cGUgPT0gSVNQT09MRURDT05ORUNUSU9OIHx8IGNvbm5lY3Rpb25UeXBlID09IElTWEFDT05ORUNUSU9OKSB7CisgICAgdHJhbnNhY3Rpb25JblByb2dyZXNzID0gZmFsc2U7CisgICAgaWYoY29ubmVjdGlvblR5cGUgPT0gSVNQT09MRURDT05ORUNUSU9OIHx8IGNvbm5lY3Rpb25UeXBlID09IElTWEFDT05ORUNUSU9OKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGlzb2xhdGlvbkxldmVsV2hlbkNsZWFuZWQgPSBhY3R1YWxDb25uZWN0aW9uLmdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCk7CiAgICAgICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgICAgICAvL2NoZWNrIHdoYXQgdG8gZG8gaW4gdGhpcyBjYXNlISEKLQkJX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMubm90Z290X3R4X2lzb2x2bCIpOworICAgICAgICAgICAgLy9jaGVjayB3aGF0IHRvIGRvIGluIHRoaXMgY2FzZSEhCisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLm5vdGdvdF90eF9pc29sdmwiKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotCSAgICB0cnkgeworCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgYWN0dWFsQ29ubmVjdGlvbi5jbG9zZSgpOwogICAgICAgICAgICAgICAgIGFjdHVhbENvbm5lY3Rpb24gPSBudWxsOwogICAgICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewpAQCAtNDQxLDcgKzQ0MSw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotCSAgICAgICAgCisKICAgICAgICAgaXNDbGVhbiA9IHRydWU7CiAKICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7CkBAIC00NTMsMjggKzQ1MywyOCBAQAogICAgICAqIG9yIG5vdC4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc1RyYW5zYWN0aW9uSW5Qcm9ncmVzcygpIHsKLQlyZXR1cm4gdHJhbnNhY3Rpb25JblByb2dyZXNzOworICAgIHJldHVybiB0cmFuc2FjdGlvbkluUHJvZ3Jlc3M7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgbG9nIHdyaXRlciBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jb3V0CTxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhpcwotICAgICAqCQkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKiBAcGFyYW0gICAgb3V0ICAgIDxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAqICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKiBAc2VlIDxjb2RlPmdldExvZ1dyaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRMb2dXcml0ZXIoUHJpbnRXcml0ZXIgb3V0KSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBjaGVja0lmVmFsaWQoKTsKICAgICAgICAgbG9nV3JpdGVyID0gb3V0OwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFRoaXMgbWV0aG9kIGRldGVybWluZXMgdGhlIHR5cGUgb2YgdGhlIGNvbm5lY3Rpb24gYmVpbmcgaGVsZCAKKyAgICAgKiBUaGlzIG1ldGhvZCBkZXRlcm1pbmVzIHRoZSB0eXBlIG9mIHRoZSBjb25uZWN0aW9uIGJlaW5nIGhlbGQKICAgICAgKiBpbiB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPi4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JcG9vbGVkQ29ubgk8Y29kZT5Qb29sZWRDb25uZWN0aW9uPC9jb2RlPgotICAgICAqIEByZXR1cm4JY29ubmVjdGlvbiB0eXBlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgcG9vbGVkQ29ubiAgICA8Y29kZT5Qb29sZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgY29ubmVjdGlvbiB0eXBlCiAgICAgICovCiAgICAgcHJpdmF0ZSBpbnQgZ2V0Q29ubmVjdGlvblR5cGUoUG9vbGVkQ29ubmVjdGlvbiBwb29sZWRDb25uKSB7CiAgICAgICAgIGlmKHBvb2xlZENvbm4gPT0gbnVsbCkgewpAQCAtNDg1LDIyICs0ODUsMjIgQEAKICAgICAgICAgICAgIHJldHVybiBJU1BPT0xFRENPTk5FQ1RJT047CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlIHRoYXQgCisgICAgICogUmV0dXJucyB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZSB0aGF0CiAgICAgICogY3JlYXRlZCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZSB0aGF0IGNyZWF0ZWQgdGhpcwotICAgICAqCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UgdGhhdCBjcmVhdGVkIHRoaXMKKyAgICAgKiAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCiAgICAgICovCiAgICAgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IGdldE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSgpIHsKICAgICAgICAgcmV0dXJuIChjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KW1jZjsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBhY3R1YWwgc3FsIGNvbm5lY3Rpb24gZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+LiAKKyAgICAgKiBSZXR1cm5zIHRoZSBhY3R1YWwgc3FsIGNvbm5lY3Rpb24gZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+LgogICAgICAqCi0gICAgICogQHJldHVybgl0aGUgcGh5c2ljYWwgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHRoZSBwaHlzaWNhbCA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPgogICAgICAqLwogICAgIC8vR0pDSU5UCiAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBnZXRBY3R1YWxDb25uZWN0aW9uKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKQEAgLTUwOSw4ICs1MDksOCBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBpZihhY3R1YWxDb25uZWN0aW9uID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgYWN0dWFsQ29ubmVjdGlvbiA9IHBjLmdldENvbm5lY3Rpb24oKTsKLQkJfQotCQkKKyAgICAgICAgfQorCiAgICAgICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7CiAgICAgICAgICAgICAgICAgc3FsZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwpAQCAtNTE4LDgxICs1MTgsODEgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gYWN0dWFsQ29ubmVjdGlvbjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgCi0gICAgICoJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEByZXR1cm4gICAgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAqICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKICAgICAgKi8KICAgICBQYXNzd29yZENyZWRlbnRpYWwgZ2V0UGFzc3dvcmRDcmVkZW50aWFsKCkgewogICAgICAgICByZXR1cm4gcGFzc3dkQ3JlZGVudGlhbDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDaGVja3MgaWYgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaXMgdmFsaWQgb3Igbm90IGFuZCB0aHJvd3MgYW4KICAgICAgKiBleGNlcHRpb24gaWYgaXQgaXMgbm90IHZhbGlkLiBBIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpcyBub3QgdmFsaWQgaWYKICAgICAgKiBkZXN0cm95IGhhcyBub3QgYmVlbiBjYWxsZWQgYW5kIG5vIHBoeXNpY2FsIGNvbm5lY3Rpb24gZXJyb3IgaGFzCiAgICAgICogb2NjdXJyZWQgcmVuZGVyaW5nIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIHVudXNhYmxlLgogICAgICAqCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiA8Y29kZT5kZXN0cm95PC9jb2RlPiBoYXMgYmVlbiBjYWxsZWQgb24gdGhpcyAKLSAgICAgKgkJCQkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlIG9yIGlmIGEgCi0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAlwaHlzaWNhbCBjb25uZWN0aW9uIGVycm9yIG9jY3VycmVkIHJlbmRlcmluZyBpdCB1bnVzYWJsZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgPGNvZGU+ZGVzdHJveTwvY29kZT4gaGFzIGJlZW4gY2FsbGVkIG9uIHRoaXMKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlIG9yIGlmIGEKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoeXNpY2FsIGNvbm5lY3Rpb24gZXJyb3Igb2NjdXJyZWQgcmVuZGVyaW5nIGl0IHVudXNhYmxlCiAgICAgICovCiAgICAgLy9HSkNJTlQKICAgICB2b2lkIGNoZWNrSWZWYWxpZCgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGlzRGVzdHJveWVkID09IHRydWUgfHwgaXNVc2FibGUgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhpcyBNYW5hZ2VkQ29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgdGhlIHBoeXNpY2FsICIgKyAKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhpcyBNYW5hZ2VkQ29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgdGhlIHBoeXNpY2FsICIgKwogICAgICAgICAgICAgICAgICJjb25uZWN0aW9uIGlzIG5vdCB1c2FibGUuIik7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIDxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHdoZW4gaXRzIGNsb3NlIG1ldGhvZCBpcwogICAgICAqIGNhbGxlZC4gVGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UgIGludmFsaWRhdGVzIHRoZSBjb25uZWN0aW9uIGhhbmRsZQogICAgICAqIGFuZCBzZW5kcyBhIENPTk5FQ1RJT05fQ0xPU0VEIGV2ZW50IHRvIGFsbCB0aGUgcmVnaXN0ZXJlZCBldmVudCBsaXN0ZW5lcnMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZQlFeGNlcHRpb24gdGhhdCBtYXkgaGF2ZSBvY2N1cmVkIHdoaWxlIGNsb3NpbmcgdGhlIGNvbm5lY3Rpb24gaGFuZGxlCi0gICAgICogQHBhcmFtCWNvbm5Ib2xkZXJPYmplY3QJPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdGhhdCBoYXMgYmVlbiBjbG9zZWQKLSAgICAgKiBAdGhyb3dzCVNRTEV4Y2VwdGlvbglpbiBjYXNlIGNsb3NpbmcgdGhlIHNxbCBjb25uZWN0aW9uIGdvdCBvdXQgb2YKLSAgICAgKiAgICAgICAgIAkgICAgICAgICAgICAJPGNvZGU+Z2V0Q29ubmVjdGlvbjwvY29kZT4gb24gdGhlIHVuZGVybHlpbmcgCi0gICAgICoJCQkJPGNvZGU+UG9vbGVkQ29ubmVjdGlvbjwvY29kZT4gdGhyb3dzIGFuIGV4Y2VwdGlvbgorICAgICAqIEBwYXJhbSAgICBlICAgIEV4Y2VwdGlvbiB0aGF0IG1heSBoYXZlIG9jY3VyZWQgd2hpbGUgY2xvc2luZyB0aGUgY29ubmVjdGlvbiBoYW5kbGUKKyAgICAgKiBAcGFyYW0gICAgY29ubkhvbGRlck9iamVjdCAgICA8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0aGF0IGhhcyBiZWVuIGNsb3NlZAorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIGluIGNhc2UgY2xvc2luZyB0aGUgc3FsIGNvbm5lY3Rpb24gZ290IG91dCBvZgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZT5nZXRDb25uZWN0aW9uPC9jb2RlPiBvbiB0aGUgdW5kZXJseWluZworICAgICAqICAgICAgICAgICAgICAgIDxjb2RlPlBvb2xlZENvbm5lY3Rpb248L2NvZGU+IHRocm93cyBhbiBleGNlcHRpb24KICAgICAgKi8KICAgICB2b2lkIGNvbm5lY3Rpb25DbG9zZWQoRXhjZXB0aW9uIGUsIENvbm5lY3Rpb25Ib2xkZXIgY29ubkhvbGRlck9iamVjdCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICAgIGNvbm5Ib2xkZXJPYmplY3QuaW52YWxpZGF0ZSgpOwotICAgICAgICAKKwogICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKLSAgICAgICAgCisKICAgICAgICAgY2Uuc2V0Q29ubmVjdGlvbkhhbmRsZShjb25uSG9sZGVyT2JqZWN0KTsKICAgICAgICAgbGlzdGVuZXIuY29ubmVjdGlvbkNsb3NlZChjZSk7Ci0JCisKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIDxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHdoZW4gaXQgZGV0ZWN0cyBhIGNvbm5lY2lvbgogICAgICAqIHJlbGF0ZWQgZXJyb3IuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZQlFeGNlcHRpb24gdGhhdCBoYXMgb2NjdXJyZWQgZHVyaW5nIGFuIG9wZXJhdGlvbiBvbiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbgotICAgICAqIEBwYXJhbQljb25uSG9sZGVyT2JqZWN0CTxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRoYXQgZGV0ZWN0ZWQgdGhlIHBoeXNpY2FsCi0gICAgICoJCQkJCWNvbm5lY3Rpb24gZXJyb3IKKyAgICAgKiBAcGFyYW0gICAgZSAgICBFeGNlcHRpb24gdGhhdCBoYXMgb2NjdXJyZWQgZHVyaW5nIGFuIG9wZXJhdGlvbiBvbiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbgorICAgICAqIEBwYXJhbSAgICBjb25uSG9sZGVyT2JqZWN0ICAgIDxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRoYXQgZGV0ZWN0ZWQgdGhlIHBoeXNpY2FsCisgICAgICogICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gZXJyb3IKICAgICAgKi8KLSAgICB2b2lkIGNvbm5lY3Rpb25FcnJvck9jY3VycmVkKEV4Y2VwdGlvbiBlLCAKKyAgICB2b2lkIGNvbm5lY3Rpb25FcnJvck9jY3VycmVkKEV4Y2VwdGlvbiBlLAogICAgICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25Ib2xkZXIgY29ubkhvbGRlck9iamVjdCkgewotCSAgICAKKwogICAgICAgICAgQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXIgY2VsID0gdGhpcy5saXN0ZW5lcjsKICAgICAgICAgIENvbm5lY3Rpb25FdmVudCBjZSA9IG51bGw7CiAgICAgICAgICBjZSA9IGUgPT0gbnVsbCA/IG5ldyBDb25uZWN0aW9uRXZlbnQodGhpcywgQ29ubmVjdGlvbkV2ZW50LkNPTk5FQ1RJT05fRVJST1JfT0NDVVJSRUQpCiAgICAgICAgICAgICAgICAgICAgIDogbmV3IENvbm5lY3Rpb25FdmVudCh0aGlzLCBDb25uZWN0aW9uRXZlbnQuQ09OTkVDVElPTl9FUlJPUl9PQ0NVUlJFRCwgZSk7CiAgICAgICAgICBpZiAoY29ubkhvbGRlck9iamVjdCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgY2Uuc2V0Q29ubmVjdGlvbkhhbmRsZShjb25uSG9sZGVyT2JqZWN0KTsKLSAgICAgICAgIH0gICAgCisgICAgICAgICB9CiAKICAgICAgICAgIGNlbC5jb25uZWN0aW9uRXJyb3JPY2N1cnJlZChjZSk7CiAgICAgICAgICBpc1VzYWJsZSA9IGZhbHNlOwogICAgIH0KLSAgICAKLSAgICAKLSAgICAKKworCisKICAgICAvKioKICAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IG9iamVjdCB3aGVuIGl0cyBzdGFydCBtZXRob2QKICAgICAgKiBoYXMgYmVlbiBpbnZva2VkLgpAQCAtNjA2LDcgKzYwNiw3IEBACiAgICAgICAgICAgICBjb25uZWN0aW9uRXJyb3JPY2N1cnJlZChlLCBudWxsKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gb2JqZWN0IHdoZW4gaXRzIGVuZCBtZXRob2QKICAgICAgKiBoYXMgYmVlbiBpbnZva2VkLgpAQCAtNjIwLDcgKzYyMCw3IEBACiAgICAgICAgICAgICBjb25uZWN0aW9uRXJyb3JPY2N1cnJlZChlLCBudWxsKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSBhIENvbm5lY3Rpb24gSGFuZGxlIHRvIGNoZWNrIGlmIGl0IGlzCiAgICAgICogdGhlIGFjdGl2ZSBDb25uZWN0aW9uIEhhbmRsZS4gSWYgaXQgaXMgbm90IHRoZSBhY3RpdmUgQ29ubmVjdGlvbgpAQCAtNjI5LDI0ICs2MjksMjQgQEAKICAgICAgKiBDb25uZWN0aW9uIEhhbmRsZSBvYmplY3QgdG8gdGhpcyBvYmplY3QgaWYgdGhlIGFjdGl2ZSBDb25uZWN0aW9uCiAgICAgICogSGFuZGxlIGlzIG51bGwuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JY2gJPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdGhhdCByZXF1ZXN0cyB0aGlzCi0gICAgICoJCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2Ugd2hldGhlcgotICAgICAqCQkJaXQgY2FuIGJlIGFjdGl2ZSBvciBub3QKLSAgICAgKiBAdGhyb3dzCVNRTEV4Y2VwdGlvbglpbiBjYXNlIHRoZSBwaHlzaWNhbCBpcyBub3QgdmFsaWQgb3IKLSAgICAgKgkJCQl0aGVyZSBpcyBhbHJlYWR5IGFuIGFjdGl2ZSBjb25uZWN0aW9uIGhhbmRsZQorICAgICAqIEBwYXJhbSAgICBjaCAgICA8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0aGF0IHJlcXVlc3RzIHRoaXMKKyAgICAgKiAgICAgICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZSB3aGV0aGVyCisgICAgICogICAgICAgICAgICBpdCBjYW4gYmUgYWN0aXZlIG9yIG5vdAorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIGluIGNhc2UgdGhlIHBoeXNpY2FsIGlzIG5vdCB2YWxpZCBvcgorICAgICAqICAgICAgICAgICAgICAgIHRoZXJlIGlzIGFscmVhZHkgYW4gYWN0aXZlIGNvbm5lY3Rpb24gaGFuZGxlCiAgICAgICovCi0gICAgIAorCiAgICAgdm9pZCBjaGVja0lmQWN0aXZlKENvbm5lY3Rpb25Ib2xkZXIgY2gpIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgICBpZihpc0Rlc3Ryb3llZCA9PSB0cnVlIHx8IGlzVXNhYmxlID09IGZhbHNlKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uKCJUaGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdXNhYmxlIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYoYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9PSBudWxsKSB7CiAgICAgICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gY2g7CiAgICAgICAgICAgICBjaC5zZXRBY3RpdmUodHJ1ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYoYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSAhPSBjaCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gaGFuZGxlIGNhbm5vdCBiZSB1c2VkIGFzIGFub3RoZXIgY29ubmVjdGlvbiBpcyBjdXJyZW50bHkgYWN0aXZlIik7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhLmphdmEKaW5kZXggMjBmMDNhYS4uZjY1MGQ0MSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhLmphdmEKQEAgLTI1LDggKzI1LDggQEAKIC8qKgogICogPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YTwvY29kZT4gaW1wbGVtZW50YXRpb24gZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wOC8wMwotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDgvMDMKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIHB1YmxpYyBjbGFzcyBNYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YSB7CiAKQEAgLTQxLDgxICs0MSw4MSBAQAogICAgIC8qKgogICAgICAqIENvbnN0cnVjdG9yIGZvciA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhPC9jb2RlPgogICAgICAqCi0gICAgICogQHBhcmFtCW1jCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CWlmIGdldHRpbmcgdGhlIERhdGFiYXNlTWV0YURhdGEgb2JqZWN0IGZhaWxzCisgICAgICogQHBhcmFtICAgIG1jICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+ICAgIGlmIGdldHRpbmcgdGhlIERhdGFiYXNlTWV0YURhdGEgb2JqZWN0IGZhaWxzCiAgICAgICovCiAgICAgcHVibGljIE1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEoTWFuYWdlZENvbm5lY3Rpb24gbWMpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICB0aGlzLm1jID0gbWM7CiAgICAgICAgICAgICBkbWQgPSBtYy5nZXRBY3R1YWxDb25uZWN0aW9uKCkuZ2V0TWV0YURhdGEoKTsKICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19tZCIpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19tZCIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgcHJvZHVjdCBuYW1lIG9mIHRoZSB1bmRlcmx5aW5nIEVJUyBpbnN0YW5jZSBjb25uZWN0ZWQKICAgICAgKiB0aHJvdWdoIHRoZSBNYW5hZ2VkQ29ubmVjdGlvbi4KICAgICAgKgotICAgICAqIEByZXR1cm4JUHJvZHVjdCBuYW1lIG9mIHRoZSBFSVMgaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgUHJvZHVjdCBuYW1lIG9mIHRoZSBFSVMgaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RUlTUHJvZHVjdE5hbWUoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmV0dXJuIGRtZC5nZXREYXRhYmFzZVByb2R1Y3ROYW1lKCk7CiAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZWlzX3Byb2RuYW1lIiwgc3FsZSk7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2Vpc19wcm9kbmFtZSIsIHNxbGUpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgcHJvZHVjdCB2ZXJzaW9uIG9mIHRoZSB1bmRlcmx5aW5nIEVJUyBpbnN0YW5jZSBjb25uZWN0ZWQKICAgICAgKiB0aHJvdWdoIHRoZSBNYW5hZ2VkQ29ubmVjdGlvbi4KICAgICAgKgotICAgICAqIEByZXR1cm4JUHJvZHVjdCB2ZXJzaW9uIG9mIHRoZSBFSVMgaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgUHJvZHVjdCB2ZXJzaW9uIG9mIHRoZSBFSVMgaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RUlTUHJvZHVjdFZlcnNpb24oKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmV0dXJuIGRtZC5nZXREYXRhYmFzZVByb2R1Y3RWZXJzaW9uKCk7CiAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZWlzX3Byb2R2ZXJzIiwgc3FsZSk7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2Vpc19wcm9kdmVycyIsIHNxbGUpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpLCBzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIG1heGltdW0gbGltaXQgb24gbnVtYmVyIG9mIGFjdGl2ZSBjb25jdXJyZW50IGNvbm5lY3Rpb25zCiAgICAgICogdGhhdCBhbiBFSVMgaW5zdGFuY2UgY2FuIHN1cHBvcnQgYWNyb3NzIGNsaWVudCBwcm9jZXNzZXMuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCU1heGltdW0gbGltaXQgZm9yIG51bWJlciBvZiBhY3RpdmUgY29uY3VycmVudCBjb25uZWN0aW9ucwotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBNYXhpbXVtIGxpbWl0IGZvciBudW1iZXIgb2YgYWN0aXZlIGNvbmN1cnJlbnQgY29ubmVjdGlvbnMKKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0TWF4Q29ubmVjdGlvbnMoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmV0dXJuIGRtZC5nZXRNYXhDb25uZWN0aW9ucygpOwogICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2Vpc19tYXhjb25uIik7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2Vpc19tYXhjb25uIik7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBuYW1lIG9mIHRoZSB1c2VyIGFzc29jaWF0ZWQgd2l0aCB0aGUgTWFuYWdlZENvbm5lY3Rpb24gaW5zdGFuY2UuIFRoZSBuYW1lCiAgICAgICogY29ycmVzcG9uZHMgdG8gdGhlIHJlc291cmNlIHByaW5jaXBhbCB1bmRlciB3aG9zZSB3aG9zZSBzZWN1cml0eSBjb250ZXh0LCBhIGNvbm5lY3Rpb24KICAgICAgKiB0byB0aGUgRUlTIGluc3RhbmNlIGhhcyBiZWVuIGVzdGFibGlzaGVkLgogICAgICAqCi0gICAgICogQHJldHVybgluYW1lIG9mIHRoZSB1c2VyCi0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIG5hbWUgb2YgdGhlIHVzZXIKKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VXNlck5hbWUoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBqYWthcnRhLnJlc291cmNlLnNwaS5zZWN1cml0eS5QYXNzd29yZENyZWRlbnRpYWwgcGMgPSBtYy5nZXRQYXNzd29yZENyZWRlbnRpYWwoKTsKICAgICAgICAgaWYocGMgIT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuIHBjLmdldFVzZXJOYW1lKCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIG1jLmdldE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSgpLmdldFVzZXIoKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL1hBUmVzb3VyY2VJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL1hBUmVzb3VyY2VJbXBsLmphdmEKaW5kZXggZGFkMWQ3Ny4uNDgyZjMzMiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9YQVJlc291cmNlSW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvWEFSZXNvdXJjZUltcGwuamF2YQpAQCAtMjQsMTQ4ICsyNCwxNDggQEAKIC8qKgogICogPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gd3JhcHBlciBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA4LzIzCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wOC8yMworICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogcHVibGljIGNsYXNzIFhBUmVzb3VyY2VJbXBsIGltcGxlbWVudHMgWEFSZXNvdXJjZSB7CiAKICAgICBYQVJlc291cmNlIHhhcjsKICAgICBNYW5hZ2VkQ29ubmVjdGlvbiBtYzsKLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdG9yIGZvciBYQVJlc291cmNlSW1wbAogICAgICAqCi0gICAgICogQHBhcmFtCXhhcgk8Y29kZT5YQVJlc291cmNlPC9jb2RlPgotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgeGFyICAgIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+CisgICAgICogQHBhcmFtICAgIG1jICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBYQVJlc291cmNlSW1wbChYQVJlc291cmNlIHhhciwgTWFuYWdlZENvbm5lY3Rpb24gbWMpIHsKICAgICAgICAgdGhpcy54YXIgPSB4YXI7CiAgICAgICAgIHRoaXMubWMgPSBtYzsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb21taXQgdGhlIGdsb2JhbCB0cmFuc2FjdGlvbiBzcGVjaWZpZWQgYnkgeGlkLgogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCi0gICAgICogQHBhcmFtCW9uZVBoYXNlCUlmIHRydWUsIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHNob3VsZCB1c2UgYSBvbmUtcGhhc2UgY29tbWl0IAotICAgICAqICAgICAgIAkgICAgICAgIAlwcm90b2NvbCB0byBjb21taXQgdGhlIHdvcmsgZG9uZSBvbiBiZWhhbGYgb2YgeGlkLgorICAgICAqIEBwYXJhbSAgICB4aWQgICAgQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgorICAgICAqIEBwYXJhbSAgICBvbmVQaGFzZSAgICBJZiB0cnVlLCB0aGUgcmVzb3VyY2UgbWFuYWdlciBzaG91bGQgdXNlIGEgb25lLXBoYXNlIGNvbW1pdAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICBwcm90b2NvbCB0byBjb21taXQgdGhlIHdvcmsgZG9uZSBvbiBiZWhhbGYgb2YgeGlkLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNvbW1pdChYaWQgeGlkLCBib29sZWFuIG9uZVBoYXNlKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICAvL3RoZSBtYy50cmFuc2FjdGlvbkNvbXBsZXRlZCBjYWxsIGhhcyBjb21lIGhlcmUgYmVjYXN1ZQotCS8vdGhlIHRyYW5zYWN0aW9uICphY3R1YWxseSogY29tcGxldGVzIGFmdGVyIHRoZSBmbG93Ci0JLy9yZWFjaGVzIGhlcmUuIHRoZSBlbmQoKSBtZXRob2QgbWlnaHQgbm90IHJlYWxseSBzaWduYWwKLQkvL2NvbXBsZXRpb24gb2YgdHJhbnNhY3Rpb24gaW4gY2FzZSB0aGUgdHJhbnNhY3Rpb24gaXMKLQkvL3N1c3BlbmRlZC4gSW4gY2FzZSBvZiB0cmFuc2FjdGlvbiBzdXNwZW5zaW9uLCB0aGUgZW5kCi0JLy9tZXRob2QgaXMgc3RpbGwgY2FsbGVkIGJ5IHRoZSB0cmFuc2FjdGlvbiBtYW5hZ2VyCi0JbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKKyAgICAvL3RoZSB0cmFuc2FjdGlvbiAqYWN0dWFsbHkqIGNvbXBsZXRlcyBhZnRlciB0aGUgZmxvdworICAgIC8vcmVhY2hlcyBoZXJlLiB0aGUgZW5kKCkgbWV0aG9kIG1pZ2h0IG5vdCByZWFsbHkgc2lnbmFsCisgICAgLy9jb21wbGV0aW9uIG9mIHRyYW5zYWN0aW9uIGluIGNhc2UgdGhlIHRyYW5zYWN0aW9uIGlzCisgICAgLy9zdXNwZW5kZWQuIEluIGNhc2Ugb2YgdHJhbnNhY3Rpb24gc3VzcGVuc2lvbiwgdGhlIGVuZAorICAgIC8vbWV0aG9kIGlzIHN0aWxsIGNhbGxlZCBieSB0aGUgdHJhbnNhY3Rpb24gbWFuYWdlcgorICAgIG1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiAgICAgICAgIHhhci5jb21taXQoeGlkLCBvbmVQaGFzZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogRW5kcyB0aGUgd29yayBwZXJmb3JtZWQgb24gYmVoYWxmIG9mIGEgdHJhbnNhY3Rpb24gYnJhbmNoLgogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyIHRoYXQgaXMgdGhlIHNhbWUgYXMgd2hhdCAKLSAgICAgKgkJCXdhcyB1c2VkIHByZXZpb3VzbHkgaW4gdGhlIHN0YXJ0IG1ldGhvZC4KLSAgICAgKiBAcGFyYW0JZmxhZ3MJT25lIG9mIFRNU1VDQ0VTUywgVE1GQUlMLCBvciBUTVNVU1BFTkQKKyAgICAgKiBAcGFyYW0gICAgeGlkICAgIEEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIgdGhhdCBpcyB0aGUgc2FtZSBhcyB3aGF0CisgICAgICogICAgICAgICAgICB3YXMgdXNlZCBwcmV2aW91c2x5IGluIHRoZSBzdGFydCBtZXRob2QuCisgICAgICogQHBhcmFtICAgIGZsYWdzICAgIE9uZSBvZiBUTVNVQ0NFU1MsIFRNRkFJTCwgb3IgVE1TVVNQRU5ECiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZW5kKFhpZCB4aWQsIGludCBmbGFncykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgeGFyLmVuZCh4aWQsIGZsYWdzKTsKICAgICAgICAgLy9HSkNJTlQKLQkvL21jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CisgICAgLy9tYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRlbGwgdGhlIHJlc291cmNlIG1hbmFnZXIgdG8gZm9yZ2V0IGFib3V0IGEgaGV1cmlzdGljYWxseSBjb21wbGV0ZWQgdHJhbnNhY3Rpb24gYnJhbmNoLgogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCisgICAgICogQHBhcmFtICAgIHhpZCAgICBBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZm9yZ2V0KFhpZCB4aWQpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHhhci5mb3JnZXQoeGlkKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBPYnRhaW4gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBzZXQgZm9yIHRoaXMgCisgICAgICogT2J0YWluIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgc2V0IGZvciB0aGlzCiAgICAgICogPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRoZSB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIGluIHNlY29uZHMKKyAgICAgKiBAcmV0dXJuICAgIHRoZSB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIGluIHNlY29uZHMKICAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldFRyYW5zYWN0aW9uVGltZW91dCgpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiB4YXIuZ2V0VHJhbnNhY3Rpb25UaW1lb3V0KCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIGRldGVybWluZSBpZiB0aGUgcmVzb3VyY2UgbWFuYWdlciBpbnN0YW5jZSAKLSAgICAgKiByZXByZXNlbnRlZCBieSB0aGUgdGFyZ2V0IG9iamVjdCBpcyB0aGUgc2FtZSBhcyB0aGUgcmVzb3VjZSBtYW5hZ2VyIAorICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB0byBkZXRlcm1pbmUgaWYgdGhlIHJlc291cmNlIG1hbmFnZXIgaW5zdGFuY2UKKyAgICAgKiByZXByZXNlbnRlZCBieSB0aGUgdGFyZ2V0IG9iamVjdCBpcyB0aGUgc2FtZSBhcyB0aGUgcmVzb3VjZSBtYW5hZ2VyCiAgICAgICogaW5zdGFuY2UgcmVwcmVzZW50ZWQgYnkgdGhlIHBhcmFtZXRlciB4YXJlcy4KICAgICAgKgotICAgICAqIEBwYXJhbQl4YXJlcwlBbiA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBvYmplY3Qgd2hvc2UgcmVzb3VyY2UgbWFuYWdlciAKLSAgICAgKiAJCQlpbnN0YW5jZSBpcyB0byBiZSBjb21wYXJlZCB3aXRoIHRoZSByZXNvdXJjZQotICAgICAqIEByZXR1cm4JdHJ1ZSBpZiBpdCdzIHRoZSBzYW1lIFJNIGluc3RhbmNlOyBvdGhlcndpc2UgZmFsc2UuCisgICAgICogQHBhcmFtICAgIHhhcmVzICAgIEFuIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IG9iamVjdCB3aG9zZSByZXNvdXJjZSBtYW5hZ2VyCisgICAgICogICAgICAgICAgICAgaW5zdGFuY2UgaXMgdG8gYmUgY29tcGFyZWQgd2l0aCB0aGUgcmVzb3VyY2UKKyAgICAgKiBAcmV0dXJuICAgIHRydWUgaWYgaXQncyB0aGUgc2FtZSBSTSBpbnN0YW5jZTsgb3RoZXJ3aXNlIGZhbHNlLgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGlzU2FtZVJNKFhBUmVzb3VyY2UgeGFyZXMpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiB4YXIuaXNTYW1lUk0oeGFyZXMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIEFzayB0aGUgcmVzb3VyY2UgbWFuYWdlciB0byBwcmVwYXJlIGZvciBhIHRyYW5zYWN0aW9uIGNvbW1pdCAKKyAgICAgKiBBc2sgdGhlIHJlc291cmNlIG1hbmFnZXIgdG8gcHJlcGFyZSBmb3IgYSB0cmFuc2FjdGlvbiBjb21taXQKICAgICAgKiBvZiB0aGUgdHJhbnNhY3Rpb24gc3BlY2lmaWVkIGluIHhpZC4KICAgICAgKgotICAgICAqIEBwYXJhbQl4aWQJQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgotICAgICAqIEByZXR1cm4JQSB2YWx1ZSBpbmRpY2F0aW5nIHRoZSByZXNvdXJjZSBtYW5hZ2VyJ3Mgdm90ZSBvbiB0aGUgCi0gICAgICoJCW91dGNvbWUgb2YgdGhlIHRyYW5zYWN0aW9uLiBUaGUgcG9zc2libGUgdmFsdWVzCi0gICAgICoJCWFyZTogWEFfUkRPTkxZIG9yIFhBX09LLiBJZiB0aGUgcmVzb3VyY2UgbWFuYWdlciB3YW50cyAKLSAgICAgKgkJdG8gcm9sbCBiYWNrIHRoZSB0cmFuc2FjdGlvbiwgaXQgc2hvdWxkIGRvIHNvCi0gICAgICoJCWJ5IHJhaXNpbmcgYW4gYXBwcm9wcmlhdGUgPGNvZGU+WEFFeGNlcHRpb248L2NvZGU+IGluIHRoZSBwcmVwYXJlIG1ldGhvZC4KKyAgICAgKiBAcGFyYW0gICAgeGlkICAgIEEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKKyAgICAgKiBAcmV0dXJuICAgIEEgdmFsdWUgaW5kaWNhdGluZyB0aGUgcmVzb3VyY2UgbWFuYWdlcidzIHZvdGUgb24gdGhlCisgICAgICogICAgICAgIG91dGNvbWUgb2YgdGhlIHRyYW5zYWN0aW9uLiBUaGUgcG9zc2libGUgdmFsdWVzCisgICAgICogICAgICAgIGFyZTogWEFfUkRPTkxZIG9yIFhBX09LLiBJZiB0aGUgcmVzb3VyY2UgbWFuYWdlciB3YW50cworICAgICAqICAgICAgICB0byByb2xsIGJhY2sgdGhlIHRyYW5zYWN0aW9uLCBpdCBzaG91bGQgZG8gc28KKyAgICAgKiAgICAgICAgYnkgcmFpc2luZyBhbiBhcHByb3ByaWF0ZSA8Y29kZT5YQUV4Y2VwdGlvbjwvY29kZT4gaW4gdGhlIHByZXBhcmUgbWV0aG9kLgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgcHJlcGFyZShYaWQgeGlkKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICByZXR1cm4geGFyLnByZXBhcmUoeGlkKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBPYnRhaW4gYSBsaXN0IG9mIHByZXBhcmVkIHRyYW5zYWN0aW9uIGJyYW5jaGVzIGZyb20gYSByZXNvdXJjZSBtYW5hZ2VyLgogICAgICAqCi0gICAgICogQHBhcmFtCWZsYWcJT25lIG9mIFRNU1RBUlRSU0NBTiwgVE1FTkRSU0NBTiwgVE1OT0ZMQUdTLiBUTU5PRkxBR1MgCi0gICAgICoJCQltdXN0IGJlIHVzZWQgd2hlbiBubyBvdGhlciBmbGFncyBhcmUgc2V0IGluIGZsYWdzLgotICAgICAqIEByZXR1cm4JVGhlIHJlc291cmNlIG1hbmFnZXIgcmV0dXJucyB6ZXJvIG9yIG1vcmUgWElEcyBmb3IgdGhlIHRyYW5zYWN0aW9uIAotICAgICAqCQlicmFuY2hlcyB0aGF0IGFyZSBjdXJyZW50bHkgaW4gYSBwcmVwYXJlZCBvciBoZXVyaXN0aWNhbGx5IAotICAgICAqCQljb21wbGV0ZWQgc3RhdGUuIElmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIG9wZXJhdGlvbiwgdGhlIHJlc291cmNlCi0gICAgICoJCW1hbmFnZXIgc2hvdWxkIHRocm93IHRoZSBhcHByb3ByaWF0ZSA8Y29kZT5YQUV4Y2VwdGlvbjwvY29kZT4uCisgICAgICogQHBhcmFtICAgIGZsYWcgICAgT25lIG9mIFRNU1RBUlRSU0NBTiwgVE1FTkRSU0NBTiwgVE1OT0ZMQUdTLiBUTU5PRkxBR1MKKyAgICAgKiAgICAgICAgICAgIG11c3QgYmUgdXNlZCB3aGVuIG5vIG90aGVyIGZsYWdzIGFyZSBzZXQgaW4gZmxhZ3MuCisgICAgICogQHJldHVybiAgICBUaGUgcmVzb3VyY2UgbWFuYWdlciByZXR1cm5zIHplcm8gb3IgbW9yZSBYSURzIGZvciB0aGUgdHJhbnNhY3Rpb24KKyAgICAgKiAgICAgICAgYnJhbmNoZXMgdGhhdCBhcmUgY3VycmVudGx5IGluIGEgcHJlcGFyZWQgb3IgaGV1cmlzdGljYWxseQorICAgICAqICAgICAgICBjb21wbGV0ZWQgc3RhdGUuIElmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIG9wZXJhdGlvbiwgdGhlIHJlc291cmNlCisgICAgICogICAgICAgIG1hbmFnZXIgc2hvdWxkIHRocm93IHRoZSBhcHByb3ByaWF0ZSA8Y29kZT5YQUV4Y2VwdGlvbjwvY29kZT4uCiAgICAgICovCiAgICAgcHVibGljIFhpZFtdIHJlY292ZXIoaW50IGZsYWcpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiB4YXIucmVjb3ZlcihmbGFnKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBJbmZvcm0gdGhlIHJlc291cmNlIG1hbmFnZXIgdG8gcm9sbCBiYWNrIHdvcmsgZG9uZSBvbiBiZWhhbGYgb2YgYSB0cmFuc2FjdGlvbiBicmFuY2gKICAgICAgKgotICAgICAqIEBwYXJhbQl4aWQJQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgorICAgICAqIEBwYXJhbSAgICB4aWQgICAgQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJvbGxiYWNrKFhpZCB4aWQpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIC8vdGhlIG1jLnRyYW5zYWN0aW9uQ29tcGxldGVkIGNhbGwgaGFzIGNvbWUgaGVyZSBiZWNhc3VlCi0JLy90aGUgdHJhbnNhY3Rpb24gKmFjdHVhbGx5KiBjb21wbGV0ZXMgYWZ0ZXIgdGhlIGZsb3cKLQkvL3JlYWNoZXMgaGVyZS4gdGhlIGVuZCgpIG1ldGhvZCBtaWdodCBub3QgcmVhbGx5IHNpZ25hbAotCS8vY29tcGxldGlvbiBvZiB0cmFuc2FjdGlvbiBpbiBjYXNlIHRoZSB0cmFuc2FjdGlvbiBpcwotCS8vc3VzcGVuZGVkLiBJbiBjYXNlIG9mIHRyYW5zYWN0aW9uIHN1c3BlbnNpb24sIHRoZSBlbmQKLQkvL21ldGhvZCBpcyBzdGlsbCBjYWxsZWQgYnkgdGhlIHRyYW5zYWN0aW9uIG1hbmFnZXIKKyAgICAvL3RoZSB0cmFuc2FjdGlvbiAqYWN0dWFsbHkqIGNvbXBsZXRlcyBhZnRlciB0aGUgZmxvdworICAgIC8vcmVhY2hlcyBoZXJlLiB0aGUgZW5kKCkgbWV0aG9kIG1pZ2h0IG5vdCByZWFsbHkgc2lnbmFsCisgICAgLy9jb21wbGV0aW9uIG9mIHRyYW5zYWN0aW9uIGluIGNhc2UgdGhlIHRyYW5zYWN0aW9uIGlzCisgICAgLy9zdXNwZW5kZWQuIEluIGNhc2Ugb2YgdHJhbnNhY3Rpb24gc3VzcGVuc2lvbiwgdGhlIGVuZAorICAgIC8vbWV0aG9kIGlzIHN0aWxsIGNhbGxlZCBieSB0aGUgdHJhbnNhY3Rpb24gbWFuYWdlcgogICAgICAgICBtYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOwogICAgICAgICB4YXIucm9sbGJhY2soeGlkKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBmb3IgdGhpcyA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlzZWNvbmRzCXRoZSB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIGluIHNlY29uZHMuCi0gICAgICogQHJldHVybgl0cnVlIGlmIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaXMgc2V0IHN1Y2Nlc3NmdWxseTsgb3RoZXJ3aXNlIGZhbHNlLgorICAgICAqIEBwYXJhbSAgICBzZWNvbmRzICAgIHRoZSB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIGluIHNlY29uZHMuCisgICAgICogQHJldHVybiAgICB0cnVlIGlmIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaXMgc2V0IHN1Y2Nlc3NmdWxseTsgb3RoZXJ3aXNlIGZhbHNlLgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIHNldFRyYW5zYWN0aW9uVGltZW91dChpbnQgc2Vjb25kcykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIHhhci5zZXRUcmFuc2FjdGlvblRpbWVvdXQoc2Vjb25kcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU3RhcnQgd29yayBvbiBiZWhhbGYgb2YgYSB0cmFuc2FjdGlvbiBicmFuY2ggc3BlY2lmaWVkIGluIHhpZC4KICAgICAgKgotICAgICAqIEBwYXJhbQl4aWQJQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllciB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIHJlc291cmNlCi0gICAgICogQHJldHVybglmbGFncwlPbmUgb2YgVE1OT0ZMQUdTLCBUTUpPSU4sIG9yIFRNUkVTVU1FCisgICAgICogQHBhcmFtICAgIHhpZCAgICBBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVzb3VyY2UKKyAgICAgKiBAcmV0dXJuICAgIGZsYWdzICAgIE9uZSBvZiBUTU5PRkxBR1MsIFRNSk9JTiwgb3IgVE1SRVNVTUUKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzdGFydChYaWQgeGlkLCBpbnQgZmxhZ3MpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIC8vR0pDSU5UCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvYnVpbGQueG1sCmluZGV4IDk2Nzg2OGIuLjY0MTA1NTcgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvYnVpbGQueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxwcm9qZWN0IG5hbWU9ImpkYmNfY29ubmVjdG9yIiBiYXNlZGlyPSIke2dqYy5ob21lfSIgZGVmYXVsdD0iYnVpbGQiPgogICA8cHJvcGVydHkgbmFtZT0icGtnLmRpciIgdmFsdWU9ImNvbS9zdW4vZ2pjL3NwaSIvPgotIAorCiAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iPgogICAgIDxhbnQgYW50ZmlsZT0iYnVpbGQueG1sIiBkaXI9IiR7Z2pjLmhvbWV9L2JpbiIgdGFyZ2V0PSJjbGVhbiIvPgogICA8L3RhcmdldD4KQEAgLTM3LDUgKzM3LDUgQEAKIAogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkMTQiIGRlcGVuZHM9ImNvbXBpbGUxNCIvPgogCi0JPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iYnVpbGQxMywgYnVpbGQxNCIvPgorICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImJ1aWxkMTMsIGJ1aWxkMTQiLz4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL01ldGhvZEV4ZWN1dG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9NZXRob2RFeGVjdXRvci5qYXZhCmluZGV4IGNlMzIxYWYuLjllN2YyNTMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL01ldGhvZEV4ZWN1dG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvTWV0aG9kRXhlY3V0b3IuamF2YQpAQCAtMjYsOCArMjYsOCBAQAogLyoqCiAgKiBFeGVjdXRlIHRoZSBtZXRob2RzIGJhc2VkIG9uIHRoZSBwYXJhbWV0ZXJzLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMjMKLSAqIEBhdXRob3IJQmlub2QgUC5HCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzIzCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRwogICovCiBwdWJsaWMgY2xhc3MgTWV0aG9kRXhlY3V0b3IgaW1wbGVtZW50cyBqYXZhLmlvLlNlcmlhbGl6YWJsZXsKIApAQCAtMzksMTMwICszOSwxMzAgQEAKICAgICAvKioKICAgICAgKiBFeGNldXRlIGEgc2ltcGxlIHNldCBNZXRob2QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdmFsdWUJVmFsdWUgdG8gYmUgc2V0LgotICAgICAqIEBwYXJhbQltZXRob2QJPGNvZGU+TWV0aG9kPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHBhcmFtCW9iaglPYmplY3Qgb24gd2hpY2ggdGhlIG1ldGhvZCB0byBiZSBleGVjdXRlZC4KKyAgICAgKiBAcGFyYW0gICAgdmFsdWUgICAgVmFsdWUgdG8gYmUgc2V0LgorICAgICAqIEBwYXJhbSAgICBtZXRob2QgICAgPGNvZGU+TWV0aG9kPC9jb2RlPiBvYmplY3QuCisgICAgICogQHBhcmFtICAgIG9iaiAgICBPYmplY3Qgb24gd2hpY2ggdGhlIG1ldGhvZCB0byBiZSBleGVjdXRlZC4KICAgICAgKiBAdGhyb3dzICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4sIGluIGNhc2Ugb2YgdGhlIG1pc21hdGNoIG9mIHBhcmFtZXRlciB2YWx1ZXMgb3IKLSAgICAgKgkJYSBzZWN1cml0eSB2aW9sYXRpb24uICAgICAKKyAgICAgKiAgICAgICAgYSBzZWN1cml0eSB2aW9sYXRpb24uCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcnVuSmF2YUJlYW5NZXRob2QoU3RyaW5nIHZhbHVlLCBNZXRob2QgbWV0aG9kLCBPYmplY3Qgb2JqKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb257Ci0gICAgCWlmICh2YWx1ZT09bnVsbCB8fCB2YWx1ZS50cmltKCkuZXF1YWxzKCIiKSkgewotICAgIAkgICAgcmV0dXJuOwotICAgIAl9Ci0gICAgCXRyeSB7Ci0gICAgCSAgICBDbGFzc1tdIHBhcmFtZXRlcnMgPSBtZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKTsKLSAgICAJICAgIGlmICggcGFyYW1ldGVycy5sZW5ndGggPT0gMSkgewotICAgIAkgICAgICAgIE9iamVjdFtdIHZhbHVlcyA9IG5ldyBPYmplY3RbMV07Ci0gICAgCSAgICAJdmFsdWVzWzBdID0gY29udmVydFR5cGUocGFyYW1ldGVyc1swXSwgdmFsdWUpOwotICAgIAkgICAgCW1ldGhvZC5pbnZva2Uob2JqLCB2YWx1ZXMpOwotICAgIAkgICAgfQotICAgIAl9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGlhZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpYWUpOwotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOwotICAgIAl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWUpOwotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBcmd1bWVudHMgYXJlIHdyb25nIGZvciB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7ICAgIAkKLSAgICAJfSBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBpdGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaXRlKTsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsgICAgCQotICAgIAl9CisgICAgICAgIGlmICh2YWx1ZT09bnVsbCB8fCB2YWx1ZS50cmltKCkuZXF1YWxzKCIiKSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBDbGFzc1tdIHBhcmFtZXRlcnMgPSBtZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKTsKKyAgICAgICAgICAgIGlmICggcGFyYW1ldGVycy5sZW5ndGggPT0gMSkgeworICAgICAgICAgICAgICAgIE9iamVjdFtdIHZhbHVlcyA9IG5ldyBPYmplY3RbMV07CisgICAgICAgICAgICAgICAgdmFsdWVzWzBdID0gY29udmVydFR5cGUocGFyYW1ldGVyc1swXSwgdmFsdWUpOworICAgICAgICAgICAgICAgIG1ldGhvZC5pbnZva2Uob2JqLCB2YWx1ZXMpOworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGlhZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpYWUpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOworICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWUpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBcmd1bWVudHMgYXJlIHdyb25nIGZvciB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7CisgICAgICAgIH0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gaXRlKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGl0ZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBFeGVjdXRlcyB0aGUgbWV0aG9kLiAgICAgCisgICAgICogRXhlY3V0ZXMgdGhlIG1ldGhvZC4KICAgICAgKgotICAgICAqIEBwYXJhbQltZXRob2QgPGNvZGU+TWV0aG9kPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHBhcmFtCW9iaglPYmplY3Qgb24gd2hpY2ggdGhlIG1ldGhvZCB0byBiZSBleGVjdXRlZC4KLSAgICAgKiBAcGFyYW0JdmFsdWVzCVBhcmFtZXRlciB2YWx1ZXMgZm9yIGV4ZWN1dGluZyB0aGUgbWV0aG9kLgorICAgICAqIEBwYXJhbSAgICBtZXRob2QgPGNvZGU+TWV0aG9kPC9jb2RlPiBvYmplY3QuCisgICAgICogQHBhcmFtICAgIG9iaiAgICBPYmplY3Qgb24gd2hpY2ggdGhlIG1ldGhvZCB0byBiZSBleGVjdXRlZC4KKyAgICAgKiBAcGFyYW0gICAgdmFsdWVzICAgIFBhcmFtZXRlciB2YWx1ZXMgZm9yIGV4ZWN1dGluZyB0aGUgbWV0aG9kLgogICAgICAqIEB0aHJvd3MgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiwgaW4gY2FzZSBvZiB0aGUgbWlzbWF0Y2ggb2YgcGFyYW1ldGVyIHZhbHVlcyBvcgotICAgICAqCQlhIHNlY3VyaXR5IHZpb2xhdGlvbi4KKyAgICAgKiAgICAgICAgYSBzZWN1cml0eSB2aW9sYXRpb24uCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcnVuTWV0aG9kKE1ldGhvZCBtZXRob2QsIE9iamVjdCBvYmosIFZlY3RvciB2YWx1ZXMpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKLSAgICAJdHJ5IHsKLQkgICAgQ2xhc3NbXSBwYXJhbWV0ZXJzID0gbWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCk7Ci0JICAgIGlmICh2YWx1ZXMuc2l6ZSgpICE9IHBhcmFtZXRlcnMubGVuZ3RoKSB7Ci0JICAgICAgICByZXR1cm47Ci0JICAgIH0KLSAgICAJICAgIE9iamVjdFtdIGFjdHVhbFZhbHVlcyA9IG5ldyBPYmplY3RbcGFyYW1ldGVycy5sZW5ndGhdOwotICAgIAkgICAgZm9yIChpbnQgaSA9MDsgaTxwYXJhbWV0ZXJzLmxlbmd0aCA7IGkrKykgewotICAgIAkgICAgCVN0cmluZyB2YWwgPSAoU3RyaW5nKSB2YWx1ZXMuZ2V0KGkpOwotICAgIAkgICAgCWlmICh2YWwudHJpbSgpLmVxdWFscygiTlVMTCIpKSB7Ci0gICAgCSAgICAJICAgIGFjdHVhbFZhbHVlc1tpXSA9IG51bGw7Ci0gICAgCSAgICAJfSBlbHNlIHsKLSAgICAJICAgIAkgICAgYWN0dWFsVmFsdWVzW2ldID0gY29udmVydFR5cGUocGFyYW1ldGVyc1tpXSwgdmFsKTsKLSAgICAJICAgIAl9Ci0gICAgCSAgICB9Ci0gICAgCSAgICBtZXRob2QuaW52b2tlKG9iaiwgYWN0dWFsVmFsdWVzKTsKLSAgICAJfWNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGlhZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpYWUpOwotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOwotICAgIAl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWUpOwotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBcmd1bWVudHMgYXJlIHdyb25nIGZvciB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7ICAgIAkKLSAgICAJfSBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBpdGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaXRlKTsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsgICAgCQotICAgIAl9CisgICAgICAgIHRyeSB7CisgICAgICAgIENsYXNzW10gcGFyYW1ldGVycyA9IG1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpOworICAgICAgICBpZiAodmFsdWVzLnNpemUoKSAhPSBwYXJhbWV0ZXJzLmxlbmd0aCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICBPYmplY3RbXSBhY3R1YWxWYWx1ZXMgPSBuZXcgT2JqZWN0W3BhcmFtZXRlcnMubGVuZ3RoXTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPTA7IGk8cGFyYW1ldGVycy5sZW5ndGggOyBpKyspIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgdmFsID0gKFN0cmluZykgdmFsdWVzLmdldChpKTsKKyAgICAgICAgICAgICAgICBpZiAodmFsLnRyaW0oKS5lcXVhbHMoIk5VTEwiKSkgeworICAgICAgICAgICAgICAgICAgICBhY3R1YWxWYWx1ZXNbaV0gPSBudWxsOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGFjdHVhbFZhbHVlc1tpXSA9IGNvbnZlcnRUeXBlKHBhcmFtZXRlcnNbaV0sIHZhbCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgbWV0aG9kLmludm9rZShvYmosIGFjdHVhbFZhbHVlcyk7CisgICAgICAgIH1jYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBpYWUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWFlKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKKyAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGllKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGllKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQXJndW1lbnRzIGFyZSB3cm9uZyBmb3IgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOworICAgICAgICB9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGl0ZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpdGUpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOworICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29udmVydHMgdGhlIHR5cGUgZnJvbSBTdHJpbmcgdG8gdGhlIENsYXNzIHR5cGUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdHlwZQkJQ2xhc3MgbmFtZSB0byB3aGljaCB0aGUgY29udmVyc2lvbiBpcyByZXF1aXJlZC4KLSAgICAgKiBAcGFyYW0JcGFyYW1ldGVyCVN0cmluZyB2YWx1ZSB0byBiZSBjb252ZXJ0ZWQuCi0gICAgICogQHJldHVybglDb252ZXJ0ZWQgdmFsdWUuCisgICAgICogQHBhcmFtICAgIHR5cGUgICAgICAgIENsYXNzIG5hbWUgdG8gd2hpY2ggdGhlIGNvbnZlcnNpb24gaXMgcmVxdWlyZWQuCisgICAgICogQHBhcmFtICAgIHBhcmFtZXRlciAgICBTdHJpbmcgdmFsdWUgdG8gYmUgY29udmVydGVkLgorICAgICAqIEByZXR1cm4gICAgQ29udmVydGVkIHZhbHVlLgogICAgICAqIEB0aHJvd3MgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiwgaW4gY2FzZSBvZiB0aGUgbWlzbWF0Y2ggb2YgcGFyYW1ldGVyIHZhbHVlcyBvcgotICAgICAqCQlhIHNlY3VyaXR5IHZpb2xhdGlvbi4gICAgIAorICAgICAqICAgICAgICBhIHNlY3VyaXR5IHZpb2xhdGlvbi4KICAgICAgKi8KICAgICBwcml2YXRlIE9iamVjdCBjb252ZXJ0VHlwZShDbGFzcyB0eXBlLCBTdHJpbmcgcGFyYW1ldGVyKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb257Ci0gICAgCXRyeSB7Ci0gICAgCSAgICBTdHJpbmcgdHlwZU5hbWUgPSB0eXBlLmdldE5hbWUoKTsKLSAgICAJICAgIGlmICggdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuU3RyaW5nIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuT2JqZWN0IikpIHsKLSAgICAJICAgIAlyZXR1cm4gcGFyYW1ldGVyOwotICAgIAkgICAgfQotICAgIAkKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImludCIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkludGVnZXIiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgSW50ZWdlcihwYXJhbWV0ZXIpOwotICAgIAkgICAgfQotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJzaG9ydCIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLlNob3J0IikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IFNob3J0KHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgIAkgICAgCi0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImJ5dGUiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5CeXRlIikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IEJ5dGUocGFyYW1ldGVyKTsKLSAgICAJICAgIH0gICAgCSAgICAgICAgCSAgICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygibG9uZyIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkxvbmciKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgTG9uZyhwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgICAJICAgICAgICAJICAgICAgIAkgICAgCi0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImZsb2F0IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuRmxvYXQiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgRmxvYXQocGFyYW1ldGVyKTsKLSAgICAJICAgIH0gICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiZG91YmxlIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuRG91YmxlIikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IERvdWJsZShwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgICAJICAgICAgICAJICAgICAgIAkgICAgIAkgICAgICAgIAkgICAgICAgCSAgICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiamF2YS5tYXRoLkJpZ0RlY2ltYWwiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgamF2YS5tYXRoLkJpZ0RlY2ltYWwocGFyYW1ldGVyKTsKLSAgICAJICAgIH0gICAgCSAgICAgICAgCSAgICAgICAJICAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJqYXZhLm1hdGguQmlnSW50ZWdlciIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBqYXZhLm1hdGguQmlnSW50ZWdlcihwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgICAJICAgICAgICAJICAgICAgIAkgICAgICAgIAkgICAgCi0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImJvb2xlYW4iKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5Cb29sZWFuIikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IEJvb2xlYW4ocGFyYW1ldGVyKTsKLSAgICAgICAgICAgIH0JCQorICAgICAgICB0cnkgeworICAgICAgICAgICAgU3RyaW5nIHR5cGVOYW1lID0gdHlwZS5nZXROYW1lKCk7CisgICAgICAgICAgICBpZiAoIHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLlN0cmluZyIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLk9iamVjdCIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcmFtZXRlcjsKKyAgICAgICAgICAgIH0KIAotICAgIAkgICAgcmV0dXJuIHBhcmFtZXRlcjsKLSAgICAJfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19uZmUiLCBwYXJhbWV0ZXIpOwotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHBhcmFtZXRlcisiOiBOb3QgYSB2YWxpZCB2YWx1ZSBmb3IgdGhpcyBtZXRob2QgIik7Ci0gICAgCX0KKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImludCIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkludGVnZXIiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgSW50ZWdlcihwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJzaG9ydCIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLlNob3J0IikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNob3J0KHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImJ5dGUiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5CeXRlIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJ5dGUocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygibG9uZyIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkxvbmciKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTG9uZyhwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJmbG9hdCIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkZsb2F0IikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0KHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImRvdWJsZSIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkRvdWJsZSIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEb3VibGUocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiamF2YS5tYXRoLkJpZ0RlY2ltYWwiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgamF2YS5tYXRoLkJpZ0RlY2ltYWwocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiamF2YS5tYXRoLkJpZ0ludGVnZXIiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgamF2YS5tYXRoLkJpZ0ludGVnZXIocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiYm9vbGVhbiIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkJvb2xlYW4iKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQm9vbGVhbihwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gcGFyYW1ldGVyOworICAgICAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX25mZSIsIHBhcmFtZXRlcik7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24ocGFyYW1ldGVyKyI6IE5vdCBhIHZhbGlkIHZhbHVlIGZvciB0aGlzIG1ldGhvZCAiKTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9TZWN1cml0eVV0aWxzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9TZWN1cml0eVV0aWxzLmphdmEKaW5kZXggZmMxNDliZi4uZjAwOGU3ZiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvU2VjdXJpdHlVdGlscy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL1NlY3VyaXR5VXRpbHMuamF2YQpAQCAtMjksMzYgKzI5LDM2IEBACiAvKioKICAqIFNlY3VyaXR5VXRpbHMgZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8yMgotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMjIKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIHB1YmxpYyBjbGFzcyBTZWN1cml0eVV0aWxzIHsKIAogICAgIC8qKgotICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0LCBnaXZlbiAKLSAgICAgKiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiwgc3ViamVjdCBhbmQgdGhlIAotICAgICAqIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4uIEl0IGZpcnN0IGNoZWNrcyBpZiB0aGUgCi0gICAgICogPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBpcyBudWxsIG9yIG5vdC4gSWYgaXQgaXMgbm90IG51bGwsIAorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0LCBnaXZlbgorICAgICAqIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LCBzdWJqZWN0IGFuZCB0aGUKKyAgICAgKiA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+LiBJdCBmaXJzdCBjaGVja3MgaWYgdGhlCisgICAgICogPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBpcyBudWxsIG9yIG5vdC4gSWYgaXQgaXMgbm90IG51bGwsCiAgICAgICogaXQgY29uc3RydWN0cyBhIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0IHdpdGgKICAgICAgKiB0aGUgdXNlciBhbmQgcGFzc3dvcmQgZmllbGRzIGZyb20gdGhlIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gYW5kIHJldHVybnMgdGhpcwotICAgICAqIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0LiBJZiB0aGUgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiAKLSAgICAgKiBpcyBudWxsLCBpdCByZXRyaWV2ZXMgdGhlIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0cyBmcm9tIAorICAgICAqIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0LiBJZiB0aGUgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPgorICAgICAqIGlzIG51bGwsIGl0IHJldHJpZXZlcyB0aGUgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3RzIGZyb20KICAgICAgKiB0aGUgPGNvZGU+U3ViamVjdDwvY29kZT4gcGFyYW1ldGVyIGFuZCByZXR1cm5zIHRoZSBmaXJzdAotICAgICAqIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0IHdoaWNoIGNvbnRhaW5zIGEgCisgICAgICogPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3Qgd2hpY2ggY29udGFpbnMgYQogICAgICAqIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4sIGluc3RhbmNlIGVxdWl2YWxlbnQKICAgICAgKiB0byB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiwgcGFyYW1ldGVyLgogICAgICAqCi0gICAgICogQHBhcmFtCW1jZgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+Ci0gICAgICogQHBhcmFtCXN1YmplY3QJPGNvZGU+U3ViamVjdDwvY29kZT4KLSAgICAgKiBAcGFyYW0JaW5mbwk8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+Ci0gICAgICogQHJldHVybgk8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+Ci0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4JZ2VuZXJpYyBleGNlcHRpb24gaWYgb3BlcmF0aW9uIGZhaWxzCi0gICAgICogQHRocm93cwk8Y29kZT5TZWN1cml0eUV4Y2VwdGlvbjwvY29kZT4JaWYgYWNjZXNzIHRvIHRoZSA8Y29kZT5TdWJqZWN0PC9jb2RlPiBpbnN0YW5jZSBpcyBkZW5pZWQKKyAgICAgKiBAcGFyYW0gICAgbWNmICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgc3ViamVjdCAgICA8Y29kZT5TdWJqZWN0PC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBpbmZvICAgIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiAgICBnZW5lcmljIGV4Y2VwdGlvbiBpZiBvcGVyYXRpb24gZmFpbHMKKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlNlY3VyaXR5RXhjZXB0aW9uPC9jb2RlPiAgICBpZiBhY2Nlc3MgdG8gdGhlIDxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIGlzIGRlbmllZAogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgUGFzc3dvcmRDcmVkZW50aWFsIGdldFBhc3N3b3JkQ3JlZGVudGlhbChmaW5hbCBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmLAogICAgICAgICAgZmluYWwgU3ViamVjdCBzdWJqZWN0LCBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm8gaW5mbykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKIAotCWlmIChpbmZvID09IG51bGwpIHsKKyAgICBpZiAoaW5mbyA9PSBudWxsKSB7CiAgICAgICAgICAgICBpZiAoc3ViamVjdCA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtODksMTQgKzg5LDE0IEBACiAgICAgICAgICAgICByZXR1cm4gcGM7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRydWUgaWYgdHdvIHN0cmluZ3MgYXJlIGVxdWFsOyBmYWxzZSBvdGhlcndpc2UKLSAgICAgKiAKLSAgICAgKiBAcGFyYW0Jc3RyMQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHBhcmFtCXN0cjIJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEByZXR1cm4JdHJ1ZQlpZiB0aGUgdHdvIHN0cmluZ3MgYXJlIGVxdWFsCi0gICAgICogICAgICAgIAlmYWxzZQlvdGhlcndpc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzdHIxICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgc3RyMiAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHJldHVybiAgICB0cnVlICAgIGlmIHRoZSB0d28gc3RyaW5ncyBhcmUgZXF1YWwKKyAgICAgKiAgICAgICAgICAgIGZhbHNlICAgIG90aGVyd2lzZQogICAgICAqLwogICAgIHN0YXRpYyBwcml2YXRlIGJvb2xlYW4gaXNFcXVhbChTdHJpbmcgc3RyMSwgU3RyaW5nIHN0cjIpIHsKICAgICAgICAgaWYgKHN0cjEgPT0gbnVsbCkgewpAQCAtMTA5LDEwICsxMDksMTAgQEAKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRydWUgaWYgdHdvIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0cyBhcmUgZXF1YWw7IGZhbHNlIG90aGVyd2lzZQogICAgICAqCi0gICAgICogQHBhcmFtCXBDMQk8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+Ci0gICAgICogQHBhcmFtCXBDMgk8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+Ci0gICAgICogQHJldHVybgl0cnVlCWlmIHRoZSB0d28gUGFzc3dvcmRDcmVkZW50aWFscyBhcmUgZXF1YWwKLSAgICAgKiAgICAgICAgCWZhbHNlCW90aGVyd2lzZQorICAgICAqIEBwYXJhbSAgICBwQzEgICAgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBwQzIgICAgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgdHJ1ZSAgICBpZiB0aGUgdHdvIFBhc3N3b3JkQ3JlZGVudGlhbHMgYXJlIGVxdWFsCisgICAgICogICAgICAgICAgICBmYWxzZSAgICBvdGhlcndpc2UKICAgICAgKi8KICAgICBzdGF0aWMgcHVibGljIGJvb2xlYW4gaXNQYXNzd29yZENyZWRlbnRpYWxFcXVhbChQYXNzd29yZENyZWRlbnRpYWwgcEMxLCBQYXNzd29yZENyZWRlbnRpYWwgcEMyKSB7CiAgICAgICAgIGlmIChwQzEgPT0gcEMyKQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ZvcmNlLWRlcGxveS1yYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvYnVpbGQueG1sCmluZGV4IGE1NWJiZjAuLmYwNjBlN2QgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9mb3JjZS1kZXBsb3ktcmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvZm9yY2UtZGVwbG95LXJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9idWlsZC54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPHByb2plY3QgbmFtZT0iamRiY19jb25uZWN0b3IiIGJhc2VkaXI9Ii4iIGRlZmF1bHQ9ImJ1aWxkIj4KICAgPHByb3BlcnR5IG5hbWU9InBrZy5kaXIiIHZhbHVlPSJjb20vc3VuL2dqYy91dGlsIi8+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iPgogICAgIDxhbnQgYW50ZmlsZT0iYnVpbGQueG1sIiBkaXI9IiR7Z2pjLmhvbWV9L2JpbiIgdGFyZ2V0PSJjbGVhbiIvPgogICA8L3RhcmdldD4KQEAgLTMzLDcgKzMzLDcgQEAKICAgICAgIDxqYXIgamFyZmlsZT0iJHtkaXN0LmRpcn0vJHtwa2cuZGlyfS91dGlsLmphciIgYmFzZWRpcj0iJHtjbGFzcy5kaXJ9IgogICAgICAgICBpbmNsdWRlcz0iJHtwa2cuZGlyfS8qKi8qIi8+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUxMyIgZGVwZW5kcz0iY29tcGlsZSIvPgogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUxNCIgZGVwZW5kcz0iY29tcGlsZSIvPgogCkBAIC00NCw1ICs0NCw1IEBACiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQxNCIgZGVwZW5kcz0iY29tcGlsZTE0LCBwYWNrYWdlMTQiLz4KIAogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJidWlsZDEzLCBidWlsZDE0Ii8+Ci0gIAorCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvYnVpbGQucHJvcGVydGllcwppbmRleCA1OTIzZmUzLi44NjJhMDg0IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9Imluc3RhbGxlZC1saWJyYXJpZXMiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWVtYmVkZGVkIi8+CkBAIC0yNCw3ICsyNCw3IEBACiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Imluc3RhbGxlZF9saWJyYXJpZXNfZW1iZWRkZWQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL2J1aWxkLnhtbAppbmRleCA5MDg5YzBjLi45YTkxM2Y5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvYnVpbGQueG1sCkBAIC00MiwyMiArNDIsMjIgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImFsbC1leHQiIGRlcGVuZHM9ImNsZWFuLCBkaXNhYmxlLXJlc291cmNlLXZhbGlkYXRpb24sIGJ1aWxkLXJhLXdpdGgtZXh0ZW5zaW9uLCBidWlsZCwgZGVwbG95LWVhciwgc2V0dXAsIHJ1bi1lYXIsIHVuc2V0dXAsIHVuZGVwbG95LWVhciwgZW5hYmxlLXJlc291cmNlLXZhbGlkYXRpb24iLz4KIAogPCEtLQotCTxhbnRjYWxsIHRhcmdldD0iYnVpbGQiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InNldHVwIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJydW4td2FyIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXIiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1lYXIiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InJ1bi1lYXIiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWVhciIvPgotCTxhbnRjYWxsIHRhcmdldD0idW5zZXR1cCIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InNldHVwIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4td2FyIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXIiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1lYXIiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi1lYXIiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWVhciIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0idW5zZXR1cCIvPgogICAgIDwvdGFyZ2V0PgogLS0+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb25uZWN0b3IiPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvc2ltcGxlQmFuay5zcWwiLz4KQEAgLTcxLDEzICs3MSwxMyBAQAogICAgICAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWNvbm5lY3Rvci1jb25ucG9vbC1jb21tb24iPgogICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJyYS5uYW1lIiB2YWx1ZT0iJHthcHBuYW1lfUFwcCNqZGJjcmEiLz4KICAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iY29ubmVjdGlvbi5kZWZuYW1lIiB2YWx1ZT0iamF2YXguc3FsLkRhdGFTb3VyY2UiLz4KLQkJICAgIDxwYXJhbSBuYW1lPSJleHRyYS1wYXJhbXMiIHZhbHVlPSItLW1hdGNoY29ubmVjdGlvbnM9ZmFsc2UiLz4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJleHRyYS1wYXJhbXMiIHZhbHVlPSItLW1hdGNoY29ubmVjdGlvbnM9ZmFsc2UiLz4KICAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iY29ubmVjdG9yLmNvbnBvb2wubmFtZSIgdmFsdWU9ImVtYmVkZGVkLXJhLXBvb2wiLz4KICAgICAgICAgICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXQtb3JhY2xlLXByb3BzIj4KLQkJPHBhcmFtIG5hbWU9InBvb2wudHlwZSIgdmFsdWU9ImNvbm5lY3RvciIvPgotCQk8cGFyYW0gbmFtZT0iY29ucG9vbC5uYW1lIiB2YWx1ZT0iZW1iZWRkZWQtcmEtcG9vbCIvPgotCQk8L2FudGNhbGw+CisgICAgICAgIDxwYXJhbSBuYW1lPSJwb29sLnR5cGUiIHZhbHVlPSJjb25uZWN0b3IiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImNvbnBvb2wubmFtZSIgdmFsdWU9ImVtYmVkZGVkLXJhLXBvb2wiLz4KKyAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLXJlc291cmNlIj4KICAgICAgICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1jb25uZWN0b3ItcmVzb3VyY2UtY29tbW9uIj4KQEAgLTg2LDUzICs4Niw1MyBAQAogICAgICAgICAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImRpc2FibGUtcmVzb3VyY2UtdmFsaWRhdGlvbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWp2bS1vcHRpb25zIj4KLQkJCTxwYXJhbSBuYW1lPSJvcHRpb24iIHZhbHVlPSItRGRlcGxveW1lbnQucmVzb3VyY2UudmFsaWRhdGlvbj1mYWxzZSIvPgotCQk8L2FudGNhbGw+Ci0JCTxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXIiLz4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9ImRpc2FibGUtcmVzb3VyY2UtdmFsaWRhdGlvbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWp2bS1vcHRpb25zIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJvcHRpb24iIHZhbHVlPSItRGRlcGxveW1lbnQucmVzb3VyY2UudmFsaWRhdGlvbj1mYWxzZSIvPgorICAgICAgICA8L2FudGNhbGw+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXIiLz4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iZW5hYmxlLXJlc291cmNlLXZhbGlkYXRpb24iPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qdm0tb3B0aW9ucyI+Ci0JCQk8cGFyYW0gbmFtZT0ib3B0aW9uIiB2YWx1ZT0iLURkZXBsb3ltZW50LnJlc291cmNlLnZhbGlkYXRpb249ZmFsc2UiLz4KLQkJPC9hbnRjYWxsPgotCQk8YW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQtc2VydmVyIi8+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJlbmFibGUtcmVzb3VyY2UtdmFsaWRhdGlvbiI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWp2bS1vcHRpb25zIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJvcHRpb24iIHZhbHVlPSItRGRlcGxveW1lbnQucmVzb3VyY2UudmFsaWRhdGlvbj1mYWxzZSIvPgorICAgICAgICA8L2FudGNhbGw+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXIiLz4KKyAgICA8L3RhcmdldD4KIAogCiAgICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLWFkbWluLW9iamVjdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9ImNyZWF0ZS1hZG1pbi1vYmplY3QgLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0gLS1yZXN0eXBlIGNvbS5zdW4uamRiY3JhLnNwaS5KZGJjU2V0dXBBZG1pbiAtLXJhbmFtZSAke2FwcG5hbWV9QXBwI2pkYmNyYSAtLXByb3BlcnR5IFRhYmxlTmFtZT1jdXN0b21lcjI6Sm5kaU5hbWU9amRiYy9lamItaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZDpTY2hlbWFOYW1lPURCVVNFUjpOb09mUm93cz0xIi8+Ci0JICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iZWlzL2pkYmNBZG1pbiIvPgorICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9ImVpcy9qZGJjQWRtaW4iLz4KICAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgPC90YXJnZXQ+CiAKICAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtYWRtaW4tb2JqZWN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KLQkgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJkZWxldGUtYWRtaW4tb2JqZWN0Ii8+Ci0JICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0gZWlzL2pkYmNBZG1pbiIvPgotCSA8L2FudGNhbGw+Ci0JIDwhLS08YW50Y2FsbCB0YXJnZXQ9InJlY29uZmlnLWNvbW1vbiIvPi0tPgorICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9ImRlbGV0ZS1hZG1pbi1vYmplY3QiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSBlaXMvamRiY0FkbWluIi8+CisgICAgIDwvYW50Y2FsbD4KKyAgICAgPCEtLTxhbnRjYWxsIHRhcmdldD0icmVjb25maWctY29tbW9uIi8+LS0+CiAgICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0YXJ0Ij4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQtc2VydmVyLWluc3RhbmNlLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgCisKICAgICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtcmEtY29uZmlnIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0iY3JlYXRlLXJlc291cmNlLWFkYXB0ZXItY29uZmlnICAtLXByb3BlcnR5IFJBUHJvcGVydHk9VkFMSUQiLz4KLQkgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke2FwcG5hbWV9QXBwI2pkYmNyYSIvPgorICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7YXBwbmFtZX1BcHAjamRiY3JhIi8+CiAgICAgICAgICA8L2FudGNhbGw+CiAgICAgIDwvdGFyZ2V0PgogCiAgICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJhLWNvbmZpZyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+Ci0JICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0iZGVsZXRlLXJlc291cmNlLWFkYXB0ZXItY29uZmlnIi8+Ci0JICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHthcHBuYW1lfUFwcCNqZGJjcmEiLz4KLQkgPC9hbnRjYWxsPgotCSA8IS0tPGFudGNhbGwgdGFyZ2V0PSJyZWNvbmZpZy1jb21tb24iLz4tLT4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJkZWxldGUtcmVzb3VyY2UtYWRhcHRlci1jb25maWciLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke2FwcG5hbWV9QXBwI2pkYmNyYSIvPgorICAgICA8L2FudGNhbGw+CisgICAgIDwhLS08YW50Y2FsbCB0YXJnZXQ9InJlY29uZmlnLWNvbW1vbiIvPi0tPgogICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idW5zZXR1cCI+CkBAIC0xNDQsNyArMTQ0LDcgQEAKICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1wb29sIi8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtYWRtaW4tb2JqZWN0Ii8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1wb29sIj4KICAgICAgICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1jb25uZWN0b3ItY29ubnBvb2wtY29tbW9uIj4KICAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iY29ubmVjdG9yLmNvbnBvb2wubmFtZSIgdmFsdWU9ImVtYmVkZGVkLXJhLXBvb2wiLz4KQEAgLTE1NCw3ICsxNTQsNyBAQAogICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtY29ubmVjdG9yLXJlc291cmNlLWNvbW1vbiI+CiAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImNvbm5lY3Rvci5qbmRpLm5hbWUiIHZhbHVlPSJqZGJjL2VqYi1pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkIi8+Ci0JCTwvYW50Y2FsbD4KKyAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CkBAIC0xNjksOSArMTY5LDkgQEAKICAgICAgIDxlY2hvIG1lc3NhZ2U9ImNvbW1vbi54bWw6IENvbXBpbGluZyB0ZXN0IHNvdXJjZSBmaWxlcyIgbGV2ZWw9InZlcmJvc2UiLz4KICAgICAgIDxqYXZhYyBzcmNkaXI9InNlcnZsZXQiCiAgICAgICAgICBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKLQkgY2xhc3NwYXRoPSIke3MxYXN0ZXN0LmNsYXNzcGF0aH06cmEvcHVibGlzaC9pbnRlcm5hbC9jbGFzc2VzIgorICAgICBjbGFzc3BhdGg9IiR7czFhc3Rlc3QuY2xhc3NwYXRofTpyYS9wdWJsaXNoL2ludGVybmFsL2NsYXNzZXMiCiAgICAgICAgICBkZWJ1Zz0ib24iCi0JIGZhaWxvbmVycm9yPSJ0cnVlIi8+CisgICAgIGZhaWxvbmVycm9yPSJ0cnVlIi8+CiAgICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCAgbmFtZT0iYnVpbGQtcmEtd2l0aC1leHRlbnNpb24iPgpAQCAtMTg5LDI3ICsxODksMjcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogCiAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgPC9hbnRjYWxsPgotICAgICAgIAorCiAgICAgPGFudGNhbGwgdGFyZ2V0PSJlamItamFyLWNvbW1vbiI+CiAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgIDwvYW50Y2FsbD4KIAotICAgIAorCiAgICAgPGRlbGV0ZSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS5lYXIiLz4KICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KLSAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPiAgICAKLSAgICA8ZWFyIGVhcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIgCisgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KKyAgICA8ZWFyIGVhcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIKICAgICAgYXBweG1sPSIke2FwcGxpY2F0aW9uLnhtbH0iPgogICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KICAgICAgIDxpbmNsdWRlIG5hbWU9IiouamFyIi8+CiAgICAgICA8aW5jbHVkZSBuYW1lPSIqLndhciIvPgotICAgIDwvZmlsZXNldD4gIAorICAgIDwvZmlsZXNldD4KICAgICA8ZmlsZXNldCBkaXI9InJhL3B1Ymxpc2gvbGliIj4KICAgICAgIDxpbmNsdWRlIG5hbWU9IioucmFyIi8+CiAgICAgPC9maWxlc2V0PgpAQCAtMjQ1LDI4ICsyNDUsMjggQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveS13YXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4td2FyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVud2ViY2xpZW50LWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9InRlc3RzdWl0ZS5pZCIgdmFsdWU9Imluc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQgKHN0YW5kLWFsb25lIHdhciBiYXNlZCkiLz4KLQk8L2FudGNhbGw+CisgICAgPHBhcmFtIG5hbWU9InRlc3RzdWl0ZS5pZCIgdmFsdWU9Imluc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQgKHN0YW5kLWFsb25lIHdhciBiYXNlZCkiLz4KKyAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi1lYXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW53ZWJjbGllbnQtY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0idGVzdHN1aXRlLmlkIiB2YWx1ZT0iaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZCAoZWFyIGJhc2VkKSIvPgotCTwvYW50Y2FsbD4KKyAgICA8cGFyYW0gbmFtZT0idGVzdHN1aXRlLmlkIiB2YWx1ZT0iaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZCAoZWFyIGJhc2VkKSIvPgorICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3ktZWFyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLXJhLWNvbmZpZyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuaW5zdGFsbC1saWJyYXJ5Ii8+Ci0gICAgPC90YXJnZXQ+ICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3ktd2FyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCmluZGV4IGNmNTVlMjEuLjBhMzExNjIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCkBAIC0yOSwyMCArMjksMjAgQEAKICAgICAgICAgPHJlcy1yZWYtbmFtZT5qZGJjL1NpbXBsZUJhbms8L3Jlcy1yZWYtbmFtZT4KICAgICAgICAgPGpuZGktbmFtZT5qZGJjL2VqYi1pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkPC9qbmRpLW5hbWU+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KLSAgICAgIDxpcy1yZWFkLW9ubHktYmVhbj5mYWxzZTwvaXMtcmVhZC1vbmx5LWJlYW4+IAotICAgICAgPGNvbW1pdC1vcHRpb24+QjwvY29tbWl0LW9wdGlvbj4gCi0gICAgIDxiZWFuLXBvb2w+IAotICAgICAgICAgPHN0ZWFkeS1wb29sLXNpemU+MDwvc3RlYWR5LXBvb2wtc2l6ZT4gCi0gICAgICAgICA8cmVzaXplLXF1YW50aXR5PjE8L3Jlc2l6ZS1xdWFudGl0eT4gCi0gICAgICAgICA8bWF4LXBvb2wtc2l6ZT4xMDwvbWF4LXBvb2wtc2l6ZT4gCi0gICAgICAgICA8cG9vbC1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4zNjAwPC9wb29sLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPiAKLSAgICAgIDwvYmVhbi1wb29sPiAKLSAgICAgIDxiZWFuLWNhY2hlPiAKLSAgICAgICAgICA8bWF4LWNhY2hlLXNpemU+MTAwPC9tYXgtY2FjaGUtc2l6ZT4gCi0gICAgICAgIDxjYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz42MDwvY2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+IAotICAgICAgICA8cmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+IAotICAgICAgICA8dmljdGltLXNlbGVjdGlvbi1wb2xpY3k+TFJVPC92aWN0aW0tc2VsZWN0aW9uLXBvbGljeT4gCi0gICAgICA8L2JlYW4tY2FjaGU+IAorICAgICAgPGlzLXJlYWQtb25seS1iZWFuPmZhbHNlPC9pcy1yZWFkLW9ubHktYmVhbj4KKyAgICAgIDxjb21taXQtb3B0aW9uPkI8L2NvbW1pdC1vcHRpb24+CisgICAgIDxiZWFuLXBvb2w+CisgICAgICAgICA8c3RlYWR5LXBvb2wtc2l6ZT4wPC9zdGVhZHktcG9vbC1zaXplPgorICAgICAgICAgPHJlc2l6ZS1xdWFudGl0eT4xPC9yZXNpemUtcXVhbnRpdHk+CisgICAgICAgICA8bWF4LXBvb2wtc2l6ZT4xMDwvbWF4LXBvb2wtc2l6ZT4KKyAgICAgICAgIDxwb29sLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjM2MDA8L3Bvb2wtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+CisgICAgICA8L2JlYW4tcG9vbD4KKyAgICAgIDxiZWFuLWNhY2hlPgorICAgICAgICAgIDxtYXgtY2FjaGUtc2l6ZT4xMDA8L21heC1jYWNoZS1zaXplPgorICAgICAgICA8Y2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+NjA8L2NhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPgorICAgICAgICA8cmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+CisgICAgICAgIDx2aWN0aW0tc2VsZWN0aW9uLXBvbGljeT5MUlU8L3ZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PgorICAgICAgPC9iZWFuLWNhY2hlPgogICAgIDwvZWpiPgogICAgIDxlamI+CiAgICAgICA8ZWpiLW5hbWU+Q3VzdG9tZXJDaGVja2luZ0VKQjwvZWpiLW5hbWU+CkBAIC01MSwyMCArNTEsMjAgQEAKICAgICAgICAgPHJlcy1yZWYtbmFtZT5qZGJjL1NpbXBsZUJhbms8L3Jlcy1yZWYtbmFtZT4KICAgICAgICAgPGpuZGktbmFtZT5qZGJjL2VqYi1pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkPC9qbmRpLW5hbWU+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KLSAgICAgIDxpcy1yZWFkLW9ubHktYmVhbj5mYWxzZTwvaXMtcmVhZC1vbmx5LWJlYW4+IAotICAgICAgPGNvbW1pdC1vcHRpb24+QjwvY29tbWl0LW9wdGlvbj4gCi0gICAgIDxiZWFuLXBvb2w+IAotICAgICAgICAgPHN0ZWFkeS1wb29sLXNpemU+MDwvc3RlYWR5LXBvb2wtc2l6ZT4gCi0gICAgICAgICA8cmVzaXplLXF1YW50aXR5PjE8L3Jlc2l6ZS1xdWFudGl0eT4gCi0gICAgICAgICA8bWF4LXBvb2wtc2l6ZT4xMDwvbWF4LXBvb2wtc2l6ZT4gCisgICAgICA8aXMtcmVhZC1vbmx5LWJlYW4+ZmFsc2U8L2lzLXJlYWQtb25seS1iZWFuPgorICAgICAgPGNvbW1pdC1vcHRpb24+QjwvY29tbWl0LW9wdGlvbj4KKyAgICAgPGJlYW4tcG9vbD4KKyAgICAgICAgIDxzdGVhZHktcG9vbC1zaXplPjA8L3N0ZWFkeS1wb29sLXNpemU+CisgICAgICAgICA8cmVzaXplLXF1YW50aXR5PjE8L3Jlc2l6ZS1xdWFudGl0eT4KKyAgICAgICAgIDxtYXgtcG9vbC1zaXplPjEwPC9tYXgtcG9vbC1zaXplPgogICAgICAgICA8cG9vbC1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4zNjAwPC9wb29sLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPgotICAgICAgPC9iZWFuLXBvb2w+IAotICAgICAgPGJlYW4tY2FjaGU+IAorICAgICAgPC9iZWFuLXBvb2w+CisgICAgICA8YmVhbi1jYWNoZT4KICAgICAgICAgICA8bWF4LWNhY2hlLXNpemU+MTAwPC9tYXgtY2FjaGUtc2l6ZT4KICAgICAgICAgICA8Y2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+NjA8L2NhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPgogICAgICAgICAgIDxyZW1vdmFsLXRpbWVvdXQtaW4tc2Vjb25kcz4zNjAwPC9yZW1vdmFsLXRpbWVvdXQtaW4tc2Vjb25kcz4KICAgICAgICAgICA8dmljdGltLXNlbGVjdGlvbi1wb2xpY3k+TFJVPC92aWN0aW0tc2VsZWN0aW9uLXBvbGljeT4KLSAgICAgIDwvYmVhbi1jYWNoZT4gCisgICAgICA8L2JlYW4tY2FjaGU+CiAgICAgPC9lamI+CiAgIDwvZW50ZXJwcmlzZS1iZWFucz4KIDwvc3VuLWVqYi1qYXI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9lamIvQ3VzdG9tZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL2VqYi9DdXN0b21lci5qYXZhCmluZGV4IGFjOWM5NzEuLmY4MzI0YmEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL2VqYi9DdXN0b21lci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL2VqYi9DdXN0b21lci5qYXZhCkBAIC00NCw0ICs0NCw0IEBACiAKIH0KIAotICAKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvZWpiL0N1c3RvbWVyQ2hlY2tpbmcuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL2VqYi9DdXN0b21lckNoZWNraW5nLmphdmEKaW5kZXggMTE0OWYzOC4uYzEyMDBhNyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvZWpiL0N1c3RvbWVyQ2hlY2tpbmcuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9lamIvQ3VzdG9tZXJDaGVja2luZy5qYXZhCkBAIC0yMCw0ICsyMCw0IEBACiB7CiB9CiAKLSAgCisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL2VqYi9DdXN0b21lckNoZWNraW5nRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9lamIvQ3VzdG9tZXJDaGVja2luZ0VKQi5qYXZhCmluZGV4IDgyYzQxYTYuLjg4NjhlNmIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL2VqYi9DdXN0b21lckNoZWNraW5nRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvZWpiL0N1c3RvbWVyQ2hlY2tpbmdFSkIuamF2YQpAQCAtOTQsNSArOTQsNSBAQAogICB9CiAKIH0KLSAgICAKLSAgICAKKworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9lamIvQ3VzdG9tZXJFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL2VqYi9DdXN0b21lckVKQi5qYXZhCmluZGV4IDBmOWM5YWYuLmFiODcwMzAgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL2VqYi9DdXN0b21lckVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL2VqYi9DdXN0b21lckVKQi5qYXZhCkBAIC01Myw3ICs1Myw3IEBACiAKICAgcHVibGljIFN0cmluZyBnZXRBZGRyZXNzMSgpCiAgIHsKLSAgICByZXR1cm4gYWRkcmVzczE7IAorICAgIHJldHVybiBhZGRyZXNzMTsKICAgfQogCiAgIHB1YmxpYyBTdHJpbmcgZ2V0QWRkcmVzczIoKQpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU1FMIGV4Y2VwdGlvbiBvY2N1cmVkIGluIGVqYlJlbW92ZSBtZXRob2QiKTsKICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgIH0KLSAgICAKKwogICB9CiAKICAgcHVibGljIHZvaWQgZWpiU3RvcmUoKQpAQCAtMjE0LDEyICsyMTQsMTIgQEAKICAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgewogICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTUUxFeGNlcHRpb24gb2NjdXJyZWQgaW4gZWpiTG9hZCgpIG1ldGhvZCIpOwogICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICB9ICAgCisgICAgfQogICB9CiAKICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7fQogICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7fQogfQotICAgICAgCi0gICAgCi0gICAgCisKKworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9lamIvQ3VzdG9tZXJTYXZpbmdzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9lamIvQ3VzdG9tZXJTYXZpbmdzLmphdmEKaW5kZXggYWU0MGM2OC4uMzY3NTcxMSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvZWpiL0N1c3RvbWVyU2F2aW5ncy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL2VqYi9DdXN0b21lclNhdmluZ3MuamF2YQpAQCAtMjAsNCArMjAsNCBAQAogewogfQogCi0gIAorCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9lamIvQ3VzdG9tZXJTYXZpbmdzRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9lamIvQ3VzdG9tZXJTYXZpbmdzRUpCLmphdmEKaW5kZXggOWY1Yjc2Yi4uZDU4YmFiNSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvZWpiL0N1c3RvbWVyU2F2aW5nc0VKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL2VqYi9DdXN0b21lclNhdmluZ3NFSkIuamF2YQpAQCAtOTUsNiArOTUsNiBAQAogICB9CiAKIH0KLSAgICAgIAotICAgIAotICAgIAorCisKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZWUyZWNhMC4uZmQyMWMzZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNCw3ICsxNCw3IEBACiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogIwogCi0gICAgCisKICMjIyBDb21wb25lbnQgUHJvcGVydGllcyAjIyMKIHNyYy5kaXI9c3JjCiBjb21wb25lbnQucHVibGlzaC5ob21lPS4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL2J1aWxkLnhtbAppbmRleCAwNDVkNzk0Li5mYjMwOTcyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvYnVpbGQueG1sCkBAIC0yMSw2NCArMjEsNjQgQEAKICAgPCFFTlRJVFkgdGVzdGNvbW1vbiBTWVNURU0gIi4uLy4uLy4uLy4uLy4uL2NvbmZpZy9wcm9wZXJ0aWVzLnhtbCI+CiBdPgogCi08cHJvamVjdCBuYW1lPSJKREJDQ29ubmVjdG9yIHRvcCBsZXZlbCIgZGVmYXVsdD0iYnVpbGQiPiAgCis8cHJvamVjdCBuYW1lPSJKREJDQ29ubmVjdG9yIHRvcCBsZXZlbCIgZGVmYXVsdD0iYnVpbGQiPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJwa2cuZGlyIiB2YWx1ZT0iY29tL3N1bi9qZGJjcmEvc3BpIi8+Ci0gICAgCisKICAgICAmY29tbW9uOwogICAgICZ0ZXN0Y29tbW9uOwogICAgIDxwcm9wZXJ0eSBmaWxlPSIuL2J1aWxkLnByb3BlcnRpZXMiLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNsZWFuLGNvbXBpbGUsYXNzZW1ibGUiLz4KLSAgICAgICAgICAKKwogCiAgICAgPCEtLSBpbml0LiBJbml0aWFsaXphdGlvbiBpbnZvbHZlcyBjcmVhdGluZyBwdWJsaXNoaW5nIGRpcmVjdG9yaWVzIGFuZAotICAgICAgICAgT1Mgc3BlY2lmaWMgdGFyZ2V0cy4gLS0+IAorICAgICAgICAgT1Mgc3BlY2lmaWMgdGFyZ2V0cy4gLS0+CiAgICAgPHRhcmdldCBuYW1lPSJpbml0IiBkZXNjcmlwdGlvbj0iJHtjb21wb25lbnQubmFtZX0gaW5pdGlhbGl6YXRpb24iPgogICAgICAgICA8dHN0YW1wPgogICAgICAgICAgICAgPGZvcm1hdCBwcm9wZXJ0eT0ic3RhcnQudGltZSIgcGF0dGVybj0iTU0vZGQveXl5eSBoaDptbSBhYSIvPgotICAgICAgICA8L3RzdGFtcD4gICAgCisgICAgICAgIDwvdHN0YW1wPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJCdWlsZGluZyBjb21wb25lbnQgJHtjb21wb25lbnQubmFtZX0iLz4KICAgICAgICAgPG1rZGlyIGRpcj0iJHtjb21wb25lbnQuY2xhc3Nlcy5kaXJ9Ii8+Ci0gICAgICAgIDxta2RpciBkaXI9IiR7Y29tcG9uZW50LmxpYi5ob21lfSIvPiAgICAKKyAgICAgICAgPG1rZGlyIGRpcj0iJHtjb21wb25lbnQubGliLmhvbWV9Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgPCEtLSBjb21waWxlIC0tPiAKKyAgICA8IS0tIGNvbXBpbGUgLS0+CiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJpbml0IgotICAgICAgICAgICAgZGVzY3JpcHRpb249IkNvbXBpbGUgY29tL3N1bi8qIGNvbS9pcGxhbmV0Lyogc291cmNlcyI+ICAKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJDb21waWxlIGNvbS9zdW4vKiBjb20vaXBsYW5ldC8qIHNvdXJjZXMiPgogICAgICAgICA8IS0tPGVjaG8gbWVzc2FnZT0iQ29ubmVjdG9yIGFwaSByZXNpZGVzIGluICR7Y29ubmVjdG9yLWFwaS5qYXJ9Ii8+LS0+Ci0gICAgICAgIDxqYXZhYyBzcmNkaXI9IiR7c3JjLmRpcn0iIAorICAgICAgICA8amF2YWMgc3JjZGlyPSIke3NyYy5kaXJ9IgogICAgICAgICAgICAgICAgZGVzdGRpcj0iJHtjb21wb25lbnQuY2xhc3Nlcy5kaXJ9IgotCSAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSI+Ci0JICAgIDxjbGFzc3BhdGg+CisgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIj4KKyAgICAgICAgPGNsYXNzcGF0aD4KICAgICAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LlMxQVNfSE9NRX0vbW9kdWxlcyI+Ci0JICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLmphciIgLz4KKyAgICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqLyouamFyIiAvPgogICAgICAgICAgICAgICAgIDwvZmlsZXNldD4KLQkgICAgPC9jbGFzc3BhdGg+CisgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iY29tL3N1bi9qZGJjcmEvKioiLz4KICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9ImNvbS9zdW4vYXBwc2Vydi8qKiIvPgogICAgICAgICA8L2phdmFjPgogICAgIDwvdGFyZ2V0PgotICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCIvPgogCi0gICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIj4gICAgCi0gICAgCQotCTxqYXIgamFyZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L2pkYmMuamFyIiAgbWFuaWZlc3Q9IiR7amFyLm1mfSIKLSAgICAgICAgICAgIGJhc2VkaXI9IiR7Y29tcG9uZW50LmNsYXNzZXMuZGlyfSIgaW5jbHVkZXM9IiR7cGtnLmRpcn0vKiovKiwgCi0gICAgICAgICAgICBjb20vc3VuL2FwcHNlcnYvKiovKiwgY29tL3N1bi9qZGJjcmEvdXRpbC8qKi8qLCBjb20vc3VuL2pkYmNyYS9jb21tb24vKiovKiIvPiAKLSAgIAkKLSAgICAgICAgPGNvcHkgZmlsZT0iJHtzcmMuZGlyfS9jb20vc3VuL2pkYmNyYS9zcGkvMS40L3JhLWRzLnhtbCIgCi0gICAgICAgICAgICAgICAgdG9maWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CQorICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZSI+CisKKyAgICA8amFyIGphcmZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9qZGJjLmphciIgIG1hbmlmZXN0PSIke2phci5tZn0iCisgICAgICAgICAgICBiYXNlZGlyPSIke2NvbXBvbmVudC5jbGFzc2VzLmRpcn0iIGluY2x1ZGVzPSIke3BrZy5kaXJ9LyoqLyosCisgICAgICAgICAgICBjb20vc3VuL2FwcHNlcnYvKiovKiwgY29tL3N1bi9qZGJjcmEvdXRpbC8qKi8qLCBjb20vc3VuL2pkYmNyYS9jb21tb24vKiovKiIvPgorCisgICAgICAgIDxjb3B5IGZpbGU9IiR7c3JjLmRpcn0vY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9yYS1kcy54bWwiCisgICAgICAgICAgICAgICAgdG9maWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CiAgICAgICAgIDwvY29weT4KLSAgIAk8amFyIGphcmZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9qZGJjcmEucmFyIiAKLQkJYmFzZWRpcj0iJHtjb21wb25lbnQubGliLmhvbWV9IiBtYW5pZmVzdD0iJHtyYXIubWZ9IiBleGNsdWRlcz0iamRiYy5qYXIiPgorICAgICAgIDxqYXIgamFyZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L2pkYmNyYS5yYXIiCisgICAgICAgIGJhc2VkaXI9IiR7Y29tcG9uZW50LmxpYi5ob21lfSIgbWFuaWZlc3Q9IiR7cmFyLm1mfSIgZXhjbHVkZXM9ImpkYmMuamFyIj4KIAotICAgCQk8bWV0YWluZiBkaXI9IiR7Y29tcG9uZW50LmxpYi5ob21lfSI+Ci0gICAJCQk8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KLSAgIAkJPC9tZXRhaW5mPgotICAgCTwvamFyPgorICAgICAgICAgICA8bWV0YWluZiBkaXI9IiR7Y29tcG9uZW50LmxpYi5ob21lfSI+CisgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KKyAgICAgICAgICAgPC9tZXRhaW5mPgorICAgICAgIDwvamFyPgogCi0gICAJPGRlbGV0ZSBmaWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vcmEueG1sIi8+Ci0JCisgICAgICAgPGRlbGV0ZSBmaWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vcmEueG1sIi8+CisKICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXNjcmlwdGlvbj0iQ2xlYW4gdGhlIGJ1aWxkIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2FwcHNlcnYvamRiY3JhL0RhdGFTb3VyY2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2FwcHNlcnYvamRiY3JhL0RhdGFTb3VyY2UuamF2YQppbmRleCA5ZjgzOTlhLi5iNmVmMzBiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9hcHBzZXJ2L2pkYmNyYS9EYXRhU291cmNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vYXBwc2Vydi9qZGJjcmEvRGF0YVNvdXJjZS5qYXZhCkBAIC0yMCwxNSArMjAsMTUgQEAKIGltcG9ydCBqYXZhLnNxbC5TUUxFeGNlcHRpb247CiAKIC8qKgotICogVGhlIDxjb2RlPmphdmF4LnNxbC5EYXRhU291cmNlPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBvZiBTdW5PTkUgYXBwbGljYXRpb24gCisgKiBUaGUgPGNvZGU+amF2YXguc3FsLkRhdGFTb3VyY2U8L2NvZGU+IGltcGxlbWVudGF0aW9uIG9mIFN1bk9ORSBhcHBsaWNhdGlvbgogICogc2VydmVyIHdpbGwgaW1wbGVtZW50IHRoaXMgaW50ZXJmYWNlLiBBbiBhcHBsaWNhdGlvbiBwcm9ncmFtIHdvdWxkIGJlIGFibGUKLSAqIHRvIHVzZSB0aGlzIGludGVyZmFjZSB0byBkbyB0aGUgZXh0ZW5kZWQgZnVuY3Rpb25hbGl0eSBleHBvc2VkIGJ5IFN1bk9ORSAKKyAqIHRvIHVzZSB0aGlzIGludGVyZmFjZSB0byBkbyB0aGUgZXh0ZW5kZWQgZnVuY3Rpb25hbGl0eSBleHBvc2VkIGJ5IFN1bk9ORQogICogYXBwbGljYXRpb24gc2VydmVyLgotICogPHA+QSBzYW1wbGUgY29kZSBmb3IgZ2V0dGluZyBkcml2ZXIncyBjb25uZWN0aW9uIGltcGxlbWVudGF0aW9uIHdvdWxkIGxpa2UgCisgKiA8cD5BIHNhbXBsZSBjb2RlIGZvciBnZXR0aW5nIGRyaXZlcidzIGNvbm5lY3Rpb24gaW1wbGVtZW50YXRpb24gd291bGQgbGlrZQogICogdGhlIGZvbGxvd2luZy4KICAqIDxwcmU+CiAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgIGNvbS5zdW4uYXBwc2Vydi5EYXRhU291cmNlIGRzID0gKGNvbS5zdW4uYXBwc2Vydi5EYXRhU091cmNlKSBpYy5sb29rdXAoImpkYmMvUG9pbnRCYXNlIik7IAorICAgICBjb20uc3VuLmFwcHNlcnYuRGF0YVNvdXJjZSBkcyA9IChjb20uc3VuLmFwcHNlcnYuRGF0YVNPdXJjZSkgaWMubG9va3VwKCJqZGJjL1BvaW50QmFzZSIpOwogICAgICBDb25uZWN0aW9uIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKICAgICAgQ29ubmVjdGlvbiBkcml2ZXJjb24gPSBkcy5nZXRDb25uZWN0aW9uKGNvbik7CiAKQEAgLTM2LDEzICszNiwxMyBAQAogCiAgICAgIGNvbi5jbG9zZSgpOwogICAgPC9wcmU+Ci0gKiAKKyAqCiAgKiBAYXV0aG9yIEJpbm9kIFAuRwogICovCiBwdWJsaWMgaW50ZXJmYWNlIERhdGFTb3VyY2UgZXh0ZW5kcyBqYXZheC5zcWwuRGF0YVNvdXJjZSB7CiAKICAgICAvKioKLSAgICAgKiBSZXRyaWV2ZXMgdGhlIGFjdHVhbCBTUUxDb25uZWN0aW9uIGZyb20gdGhlIENvbm5lY3Rpb24gd3JhcHBlciAKKyAgICAgKiBSZXRyaWV2ZXMgdGhlIGFjdHVhbCBTUUxDb25uZWN0aW9uIGZyb20gdGhlIENvbm5lY3Rpb24gd3JhcHBlcgogICAgICAqIGltcGxlbWVudGF0aW9uIG9mIFN1bk9ORSBhcHBsaWNhdGlvbiBzZXJ2ZXIuIElmIGFuIGFjdHVhbCBjb25uZWN0aW9uIGlzCiAgICAgICogc3VwcGxpZWQgYXMgYXJndW1lbnQsIHRoZW4gaXQgd2lsbCBiZSBqdXN0IHJldHVybmVkLgogICAgICAqCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VPYmplY3RCdWlsZGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VPYmplY3RCdWlsZGVyLmphdmEKaW5kZXggNzAwMjlmMS4uZTk2NmY5OCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlT2JqZWN0QnVpbGRlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIuamF2YQpAQCAtMjcsMjIgKzI3LDIyIEBACiBpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOwogaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOwogLyoqCi0gKiBVdGlsaXR5IGNsYXNzLCB3aGljaCB3b3VsZCBjcmVhdGUgbmVjZXNzYXJ5IERhdGFzb3VyY2Ugb2JqZWN0IGFjY29yZGluZyB0byB0aGUgCisgKiBVdGlsaXR5IGNsYXNzLCB3aGljaCB3b3VsZCBjcmVhdGUgbmVjZXNzYXJ5IERhdGFzb3VyY2Ugb2JqZWN0IGFjY29yZGluZyB0byB0aGUKICAqIHNwZWNpZmljYXRpb24uCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8yMwotICogQGF1dGhvcglCaW5vZCBQLkcKLSAqIEBzZWUJCWNvbS5zdW4uamRiY3JhLmNvbW1vbi5EYXRhU291cmNlU3BlYwotICogQHNlZQkJY29tLnN1bi5qZGJjcmEudXRpbC5NZXRob2RFeGNlY3V0b3IKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMjMKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCisgKiBAc2VlICAgICAgICBjb20uc3VuLmpkYmNyYS5jb21tb24uRGF0YVNvdXJjZVNwZWMKKyAqIEBzZWUgICAgICAgIGNvbS5zdW4uamRiY3JhLnV0aWwuTWV0aG9kRXhjZWN1dG9yCiAgKi8KIHB1YmxpYyBjbGFzcyBEYXRhU291cmNlT2JqZWN0QnVpbGRlciBpbXBsZW1lbnRzIGphdmEuaW8uU2VyaWFsaXphYmxlewogCiAgICAgcHJpdmF0ZSBEYXRhU291cmNlU3BlYyBzcGVjOwotICAgIAorCiAgICAgcHJpdmF0ZSBIYXNodGFibGUgZHJpdmVyUHJvcGVydGllcyA9IG51bGw7Ci0gICAgCi0gICAgcHJpdmF0ZSBNZXRob2RFeGVjdXRvciBleGVjdXRvciA9IG51bGw7ICAgIAotICAgIAorCisgICAgcHJpdmF0ZSBNZXRob2RFeGVjdXRvciBleGVjdXRvciA9IG51bGw7CisKICAgICBwcml2YXRlIHN0YXRpYyBMb2dnZXIgX2xvZ2dlcjsKICAgICBzdGF0aWMgewogICAgICAgICBfbG9nZ2VyID0gTG9nZ2VyLmdldEFub255bW91c0xvZ2dlcigpOwpAQCAtNTAsMTY5ICs1MCwxNjkgQEAKICAgICBwcml2YXRlIGJvb2xlYW4gZGVidWcgPSBmYWxzZTsKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3QgYSBEYXRhU291cmNlIE9iamVjdCBmcm9tIHRoZSBzcGVjLgotICAgICAqIAotICAgICAqIEBwYXJhbQlzcGVjCTxjb2RlPiBEYXRhU291cmNlU3BlYyA8L2NvZGU+IG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcGVjICAgIDxjb2RlPiBEYXRhU291cmNlU3BlYyA8L2NvZGU+IG9iamVjdC4KICAgICAgKi8KICAgICBwdWJsaWMgRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIoRGF0YVNvdXJjZVNwZWMgc3BlYykgewotICAgIAl0aGlzLnNwZWMgPSBzcGVjOwotICAgIAlleGVjdXRvciA9IG5ldyBNZXRob2RFeGVjdXRvcigpOworICAgICAgICB0aGlzLnNwZWMgPSBzcGVjOworICAgICAgICBleGVjdXRvciA9IG5ldyBNZXRob2RFeGVjdXRvcigpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdCB0aGUgRGF0YVNvdXJjZSBPYmplY3QgZnJvbSB0aGUgc3BlYy4KICAgICAgKgotICAgICAqIEByZXR1cm4JT2JqZWN0IGNvbnN0cnVjdGVkIHVzaW5nIHRoZSBEYXRhU291cmNlU3BlYy4KLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiBpZiB0aGUgY2xhc3MgaXMgbm90IGZvdW5kIG9yIHNvbWUgaXNzdWUgaW4gZXhlY3V0aW5nCi0gICAgICoJCXNvbWUgbWV0aG9kLgorICAgICAqIEByZXR1cm4gICAgT2JqZWN0IGNvbnN0cnVjdGVkIHVzaW5nIHRoZSBEYXRhU291cmNlU3BlYy4KKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiBpZiB0aGUgY2xhc3MgaXMgbm90IGZvdW5kIG9yIHNvbWUgaXNzdWUgaW4gZXhlY3V0aW5nCisgICAgICogICAgICAgIHNvbWUgbWV0aG9kLgogICAgICAqLwogICAgIHB1YmxpYyBPYmplY3QgY29uc3RydWN0RGF0YVNvdXJjZU9iamVjdCgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKLSAgICAJZHJpdmVyUHJvcGVydGllcyA9IHBhcnNlRHJpdmVyUHJvcGVydGllcyhzcGVjKTsKKyAgICAgICAgZHJpdmVyUHJvcGVydGllcyA9IHBhcnNlRHJpdmVyUHJvcGVydGllcyhzcGVjKTsKICAgICAgICAgT2JqZWN0IGRhdGFTb3VyY2VPYmplY3QgPSBnZXREYXRhU291cmNlT2JqZWN0KCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVjMtVEVTVCA6ICIgICsgZGF0YVNvdXJjZU9iamVjdCk7CiAgICAgICAgIE1ldGhvZFtdIG1ldGhvZHMgPSBkYXRhU291cmNlT2JqZWN0LmdldENsYXNzKCkuZ2V0TWV0aG9kcygpOwogICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBtZXRob2RzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICBTdHJpbmcgbWV0aG9kTmFtZSA9IG1ldGhvZHNbaV0uZ2V0TmFtZSgpOwotCSAgICBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRVc2VyIikpewkgICAgCQotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVVNFUk5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFBhc3N3b3JkIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUEFTU1dPUkQpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldExvZ2luVGltZU91dCIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR0lOVElNRU9VVCksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TG9nV3JpdGVyIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HV1JJVEVSKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXREYXRhYmFzZU5hbWUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBQkFTRU5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldERhdGFTb3VyY2VOYW1lIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQVNPVVJDRU5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldERlc2NyaXB0aW9uIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVTQ1JJUFRJT04pLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXROZXR3b3JrUHJvdG9jb2wiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ORVRXT1JLUFJPVE9DT0wpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFBvcnROdW1iZXIiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QT1JUTlVNQkVSKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRSb2xlTmFtZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlJPTEVOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCQkgICAgCQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRTZXJ2ZXJOYW1lIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuU0VSVkVSTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNYXhTdGF0ZW1lbnRzIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUFYU1RBVEVNRU5UUyksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0SW5pdGlhbFBvb2xTaXplIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuSU5JVElBTFBPT0xTSVpFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNaW5Qb29sU2l6ZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1JTlBPT0xTSVpFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNYXhQb29sU2l6ZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1BWFBPT0xTSVpFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNYXhJZGxlVGltZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1BWElETEVUSU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRQcm9wZXJ0eUN5Y2xlIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUFJPUEVSVFlDWUNMRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAkKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKGRyaXZlclByb3BlcnRpZXMuY29udGFpbnNLZXkobWV0aG9kTmFtZS50b1VwcGVyQ2FzZSgpKSl7Ci0JICAgIAlWZWN0b3IgdmFsdWVzID0gKFZlY3RvcikgZHJpdmVyUHJvcGVydGllcy5nZXQobWV0aG9kTmFtZS50b1VwcGVyQ2FzZSgpKTsKLQkgICAgICAgIGV4ZWN1dG9yLnJ1bk1ldGhvZChtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QsIHZhbHVlcyk7Ci0JICAgIH0KKyAgICAgICAgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0VXNlciIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlVTRVJOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRQYXNzd29yZCIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBBU1NXT1JEKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRMb2dpblRpbWVPdXQiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dJTlRJTUVPVVQpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldExvZ1dyaXRlciIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR1dSSVRFUiksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0RGF0YWJhc2VOYW1lIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQUJBU0VOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXREYXRhU291cmNlTmFtZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXREZXNjcmlwdGlvbiIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFU0NSSVBUSU9OKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXROZXR3b3JrUHJvdG9jb2wiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ORVRXT1JLUFJPVE9DT0wpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFBvcnROdW1iZXIiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QT1JUTlVNQkVSKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRSb2xlTmFtZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlJPTEVOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRTZXJ2ZXJOYW1lIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuU0VSVkVSTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWF4U3RhdGVtZW50cyIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1BWFNUQVRFTUVOVFMpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldEluaXRpYWxQb29sU2l6ZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLklOSVRJQUxQT09MU0laRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWluUG9vbFNpemUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NSU5QT09MU0laRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWF4UG9vbFNpemUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NQVhQT09MU0laRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWF4SWRsZVRpbWUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NQVhJRExFVElNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0UHJvcGVydHlDeWNsZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBST1BFUlRZQ1lDTEUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChkcml2ZXJQcm9wZXJ0aWVzLmNvbnRhaW5zS2V5KG1ldGhvZE5hbWUudG9VcHBlckNhc2UoKSkpeworICAgICAgICAgICAgVmVjdG9yIHZhbHVlcyA9IChWZWN0b3IpIGRyaXZlclByb3BlcnRpZXMuZ2V0KG1ldGhvZE5hbWUudG9VcHBlckNhc2UoKSk7CisgICAgICAgICAgICBleGVjdXRvci5ydW5NZXRob2QobWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0LCB2YWx1ZXMpOworICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGRhdGFTb3VyY2VPYmplY3Q7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSBleHRyYSBkcml2ZXIgcHJvcGVydGllcyBmcm9tIHRoZSBEYXRhU291cmNlU3BlYyBvYmplY3QgYW5kCiAgICAgICogcGFyc2UgdGhlbSB0byBhIHNldCBvZiBtZXRob2ROYW1lIGFuZCBwYXJhbWV0ZXJzLiBQcmVwYXJlIGEgaGFzaHRhYmxlCiAgICAgICogY29udGFpbmluZyB0aGVzZSBkZXRhaWxzIGFuZCByZXR1cm4uCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3BlYwk8Y29kZT4gRGF0YVNvdXJjZVNwZWMgPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHJldHVybglIYXNodGFibGUgY29udGFpbmluZyBtZXRob2QgbmFtZXMgYW5kIHBhcmFtZXRlcnMsCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglJZiBkZWxpbWl0ZXIgaXMgbm90IHByb3ZpZGVkIGFuZCBwcm9wZXJ0eSBzdHJpbmcKLSAgICAgKgkJCQkJaXMgbm90IG51bGwuCisgICAgICogQHBhcmFtICAgIHNwZWMgICAgPGNvZGU+IERhdGFTb3VyY2VTcGVjIDwvY29kZT4gb2JqZWN0LgorICAgICAqIEByZXR1cm4gICAgSGFzaHRhYmxlIGNvbnRhaW5pbmcgbWV0aG9kIG5hbWVzIGFuZCBwYXJhbWV0ZXJzLAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgSWYgZGVsaW1pdGVyIGlzIG5vdCBwcm92aWRlZCBhbmQgcHJvcGVydHkgc3RyaW5nCisgICAgICogICAgICAgICAgICAgICAgICAgIGlzIG5vdCBudWxsLgogICAgICAqLwogICAgIHByaXZhdGUgSGFzaHRhYmxlIHBhcnNlRHJpdmVyUHJvcGVydGllcyhEYXRhU291cmNlU3BlYyBzcGVjKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb257Ci0gICAgCVN0cmluZyBkZWxpbSA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUik7CisgICAgICAgIFN0cmluZyBkZWxpbSA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUik7CiAKICAgICAgICAgU3RyaW5nIHByb3AgPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EUklWRVJQUk9QRVJUSUVTKTsKLQlpZiAoIHByb3AgPT0gbnVsbCB8fCBwcm9wLnRyaW0oKS5lcXVhbHMoIiIpKSB7Ci0JICAgIHJldHVybiBuZXcgSGFzaHRhYmxlKCk7Ci0JfSBlbHNlIGlmIChkZWxpbSA9PSBudWxsIHx8IGRlbGltLmVxdWFscygiIikpIHsKLQkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uICgiRGVsaW1pdGVyIGlzIG5vdCBwcm92aWRlZCBpbiB0aGUgY29uZmlndXJhdGlvbiIpOwotCX0KLQkKLQlIYXNodGFibGUgcHJvcGVydGllcyA9IG5ldyBIYXNodGFibGUoKTsKLQlkZWxpbSA9IGRlbGltLnRyaW0oKTsJCi0JU3RyaW5nIHNlcCA9IGRlbGltK2RlbGltOwotCWludCBzZXBMZW4gPSBzZXAubGVuZ3RoKCk7Ci0JU3RyaW5nIGNhY2hlID0gcHJvcDsKLQlWZWN0b3IgbWV0aG9kcyA9IG5ldyBWZWN0b3IoKTsKLQkKLQl3aGlsZSAoY2FjaGUuaW5kZXhPZihzZXApICE9IC0xKSB7Ci0JICAgIGludCBpbmRleCA9IGNhY2hlLmluZGV4T2Yoc2VwKTsKLQkgICAgU3RyaW5nIG5hbWUgPSBjYWNoZS5zdWJzdHJpbmcoMCxpbmRleCk7Ci0JICAgIGlmIChuYW1lLnRyaW0oKSAhPSAiIikgewotCSAgICAgICAgbWV0aG9kcy5hZGQobmFtZSk7Ci0JICAgIAljYWNoZSA9IGNhY2hlLnN1YnN0cmluZyhpbmRleCtzZXBMZW4pOwotCSAgICB9Ci0JfQotCQotICAgIAlFbnVtZXJhdGlvbiBhbGxNZXRob2RzID0gbWV0aG9kcy5lbGVtZW50cygpOwotICAgIAl3aGlsZSAoYWxsTWV0aG9kcy5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgIAkgICAgU3RyaW5nIG9uZU1ldGhvZCA9IChTdHJpbmcpIGFsbE1ldGhvZHMubmV4dEVsZW1lbnQoKTsgICAgCSAgICAKLSAgICAJICAgIGlmICghb25lTWV0aG9kLnRyaW0oKS5lcXVhbHMoIiIpKSB7Ci0gICAgCSAgICAJU3RyaW5nIG1ldGhvZE5hbWUgPSBudWxsOwotICAgIAkgICAgCVZlY3RvciBwYXJtcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAJICAgIAlTdHJpbmdUb2tlbml6ZXIgbWV0aG9kRGV0YWlscyA9IG5ldyBTdHJpbmdUb2tlbml6ZXIob25lTWV0aG9kLGRlbGltKTsKLQkJZm9yIChpbnQgaT0wOyBtZXRob2REZXRhaWxzLmhhc01vcmVUb2tlbnMoKTtpKysgKSB7Ci0JCSAgICBTdHJpbmcgdG9rZW4gPSAoU3RyaW5nKSBtZXRob2REZXRhaWxzLm5leHRUb2tlbigpOwotCQkgICAgaWYgKGk9PTApIHsKLQkJICAgIAltZXRob2ROYW1lID0gdG9rZW4udG9VcHBlckNhc2UoKTsKLQkJICAgIH0gZWxzZSB7Ci0JCSAgICAJcGFybXMuYWRkKHRva2VuKTsJCSAgICAJCi0JCSAgICB9Ci0JCX0KLQkJcHJvcGVydGllcy5wdXQobWV0aG9kTmFtZSxwYXJtcyk7Ci0gICAgCSAgICB9ICAgIAkgICAgCi0gICAgCX0KLSAgICAJcmV0dXJuIHByb3BlcnRpZXM7CisgICAgaWYgKCBwcm9wID09IG51bGwgfHwgcHJvcC50cmltKCkuZXF1YWxzKCIiKSkgeworICAgICAgICByZXR1cm4gbmV3IEhhc2h0YWJsZSgpOworICAgIH0gZWxzZSBpZiAoZGVsaW0gPT0gbnVsbCB8fCBkZWxpbS5lcXVhbHMoIiIpKSB7CisgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbiAoIkRlbGltaXRlciBpcyBub3QgcHJvdmlkZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24iKTsKICAgICB9Ci0gICAgCisKKyAgICBIYXNodGFibGUgcHJvcGVydGllcyA9IG5ldyBIYXNodGFibGUoKTsKKyAgICBkZWxpbSA9IGRlbGltLnRyaW0oKTsKKyAgICBTdHJpbmcgc2VwID0gZGVsaW0rZGVsaW07CisgICAgaW50IHNlcExlbiA9IHNlcC5sZW5ndGgoKTsKKyAgICBTdHJpbmcgY2FjaGUgPSBwcm9wOworICAgIFZlY3RvciBtZXRob2RzID0gbmV3IFZlY3RvcigpOworCisgICAgd2hpbGUgKGNhY2hlLmluZGV4T2Yoc2VwKSAhPSAtMSkgeworICAgICAgICBpbnQgaW5kZXggPSBjYWNoZS5pbmRleE9mKHNlcCk7CisgICAgICAgIFN0cmluZyBuYW1lID0gY2FjaGUuc3Vic3RyaW5nKDAsaW5kZXgpOworICAgICAgICBpZiAobmFtZS50cmltKCkgIT0gIiIpIHsKKyAgICAgICAgICAgIG1ldGhvZHMuYWRkKG5hbWUpOworICAgICAgICAgICAgY2FjaGUgPSBjYWNoZS5zdWJzdHJpbmcoaW5kZXgrc2VwTGVuKTsKKyAgICAgICAgfQorICAgIH0KKworICAgICAgICBFbnVtZXJhdGlvbiBhbGxNZXRob2RzID0gbWV0aG9kcy5lbGVtZW50cygpOworICAgICAgICB3aGlsZSAoYWxsTWV0aG9kcy5oYXNNb3JlRWxlbWVudHMoKSkgeworICAgICAgICAgICAgU3RyaW5nIG9uZU1ldGhvZCA9IChTdHJpbmcpIGFsbE1ldGhvZHMubmV4dEVsZW1lbnQoKTsKKyAgICAgICAgICAgIGlmICghb25lTWV0aG9kLnRyaW0oKS5lcXVhbHMoIiIpKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIG1ldGhvZE5hbWUgPSBudWxsOworICAgICAgICAgICAgICAgIFZlY3RvciBwYXJtcyA9IG5ldyBWZWN0b3IoKTsKKyAgICAgICAgICAgICAgICBTdHJpbmdUb2tlbml6ZXIgbWV0aG9kRGV0YWlscyA9IG5ldyBTdHJpbmdUb2tlbml6ZXIob25lTWV0aG9kLGRlbGltKTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBtZXRob2REZXRhaWxzLmhhc01vcmVUb2tlbnMoKTtpKysgKSB7CisgICAgICAgICAgICBTdHJpbmcgdG9rZW4gPSAoU3RyaW5nKSBtZXRob2REZXRhaWxzLm5leHRUb2tlbigpOworICAgICAgICAgICAgaWYgKGk9PTApIHsKKyAgICAgICAgICAgICAgICBtZXRob2ROYW1lID0gdG9rZW4udG9VcHBlckNhc2UoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcGFybXMuYWRkKHRva2VuKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBwcm9wZXJ0aWVzLnB1dChtZXRob2ROYW1lLHBhcm1zKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcHJvcGVydGllczsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgRGF0YXNvdXJjZSBvYmplY3QgYWNjb3JkaW5nIHRvIHRoZSBzcGVjLgogICAgICAqCi0gICAgICogQHJldHVybglJbml0aWFsIERhdGFTb3VyY2UgT2JqZWN0IGluc3RhbmNlLgotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+IElmIGNsYXNzIG5hbWUgaXMgd3Jvbmcgb3IgY2xhc3NwYXRoIGlzIG5vdCBzZXQKLSAgICAgKgkJcHJvcGVybHkuCisgICAgICogQHJldHVybiAgICBJbml0aWFsIERhdGFTb3VyY2UgT2JqZWN0IGluc3RhbmNlLgorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+IElmIGNsYXNzIG5hbWUgaXMgd3Jvbmcgb3IgY2xhc3NwYXRoIGlzIG5vdCBzZXQKKyAgICAgKiAgICAgICAgcHJvcGVybHkuCiAgICAgICovCiAgICAgcHJpdmF0ZSBPYmplY3QgZ2V0RGF0YVNvdXJjZU9iamVjdCgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKLSAgICAJU3RyaW5nIGNsYXNzTmFtZSA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNMQVNTTkFNRSk7Ci0gICAgICAgIHRyeSB7ICAgICAgICAgICAgCisgICAgICAgIFN0cmluZyBjbGFzc05hbWUgPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DTEFTU05BTUUpOworICAgICAgICB0cnkgewogICAgICAgICAgICAgQ2xhc3MgZGF0YVNvdXJjZUNsYXNzID0gQ2xhc3MuZm9yTmFtZShjbGFzc05hbWUpOwogICAgICAgICAgICAgT2JqZWN0IGRhdGFTb3VyY2VPYmplY3QgPSBkYXRhU291cmNlQ2xhc3MubmV3SW5zdGFuY2UoKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVjMtVEVTVCA6ICIgICsgZGF0YVNvdXJjZU9iamVjdCk7CiAgICAgICAgICAgICByZXR1cm4gZGF0YVNvdXJjZU9iamVjdDsKICAgICAgICAgfSBjYXRjaChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGNmbmUpewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19jbmZlX2RzIiwgY2ZuZSk7Ci0JCisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2NuZmVfZHMiLCBjZm5lKTsKKwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJDbGFzcyBOYW1lIGlzIHdyb25nIG9yIENsYXNzIHBhdGggaXMgbm90IHNldCBmb3IgOiIgKyBjbGFzc05hbWUpOwogICAgICAgICB9IGNhdGNoKEluc3RhbnRpYXRpb25FeGNlcHRpb24gY2UpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfaW5zdCIsIGNsYXNzTmFtZSk7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2luc3QiLCBjbGFzc05hbWUpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJFcnJvciBpbiBpbnN0YW50aWF0aW5nIiArIGNsYXNzTmFtZSk7CiAgICAgICAgIH0gY2F0Y2goSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBjZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19hY2NfaW5zdCIsIGNsYXNzTmFtZSk7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2FjY19pbnN0IiwgY2xhc3NOYW1lKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIEVycm9yIGluIGluc3RhbnRpYXRpbmciICsgY2xhc3NOYW1lKTsKICAgICAgICAgfQogICAgIH0KLSAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZVNwZWMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZVNwZWMuamF2YQppbmRleCBlZjZjNGM5Li4zZGMxNTRkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VTcGVjLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlU3BlYy5qYXZhCkBAIC0xOSw5MiArMTksOTIgQEAKIGltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwogCiAvKioKLSAqIEVuY2Fwc3VsYXRlIHRoZSBEYXRhU291cmNlIG9iamVjdCBkZXRhaWxzIG9idGFpbmVkIGZyb20gCisgKiBFbmNhcHN1bGF0ZSB0aGUgRGF0YVNvdXJjZSBvYmplY3QgZGV0YWlscyBvYnRhaW5lZCBmcm9tCiAgKiBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8yMwotICogQGF1dGhvcglCaW5vZCBQLkcKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMjMKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCiAgKi8KIHB1YmxpYyBjbGFzcyBEYXRhU291cmNlU3BlYyBpbXBsZW1lbnRzIGphdmEuaW8uU2VyaWFsaXphYmxlewogCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVVNFUk5BTUUJCQkJPSAxOyAgICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQQVNTV09SRAkJCQk9IDI7ICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVUkwJCQkJCT0gMzsgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExPR0lOVElNRU9VVAkJCT0gNDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMT0dXUklURVIJCQkJPSA1OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFCQVNFTkFNRQkJCT0gNjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQVRBU09VUkNFTkFNRQkJCT0gNzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERVNDUklQVElPTgkJCQk9IDg7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTkVUV09SS1BST1RPQ09MCQkJPSA5OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBPUlROVU1CRVIJCQkJPSAxMDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBST0xFTkFNRQkJCQk9IDExOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNFUlZFUk5BTUUJCQkJPSAxMjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhTVEFURU1FTlRTCQkJPSAxMzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTklUSUFMUE9PTFNJWkUJCQk9IDE0OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1JTlBPT0xTSVpFCQkJCT0gMTU7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYUE9PTFNJWkUJCQkJPSAxNjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhJRExFVElNRQkJCQk9IDE3OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBST1BFUlRZQ1lDTEUJCQk9IDE4OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERSSVZFUlBST1BFUlRJRVMJCQk9IDE5OyAgICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDTEFTU05BTUUJCQkJPSAyMDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERUxJTUlURVIJCQkJPSAyMTsKLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBYQURBVEFTT1VSQ0UJCQk9IDIyOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFTT1VSQ0UJCQkJPSAyMzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05ORUNUSU9OUE9PTERBVEFTT1VSQ0UJCT0gMjQ7Ci0gICAgICAKLSAgICAvL0dKQ0lOVCAgICAgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQJPSAyNTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWQUxJREFUSU9OTUVUSE9ECQkJPSAyNjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWQUxJREFUSU9OVEFCTEVOQU1FCQkJPSAyNzsKLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUUkFOU0FDVElPTklTT0xBVElPTgkJPSAyODsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHVUFSQU5URUVJU09MQVRJT05MRVZFTAkJPSAyOTsKLSAgICAgICAgICAgIAorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVTRVJOQU1FICAgICAgICAgICAgICAgID0gMTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQQVNTV09SRCAgICAgICAgICAgICAgICA9IDI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVVJMICAgICAgICAgICAgICAgICAgICA9IDM7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTE9HSU5USU1FT1VUICAgICAgICAgICAgPSA0OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExPR1dSSVRFUiAgICAgICAgICAgICAgICA9IDU7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREFUQUJBU0VOQU1FICAgICAgICAgICAgPSA2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFTT1VSQ0VOQU1FICAgICAgICAgICAgPSA3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFU0NSSVBUSU9OICAgICAgICAgICAgICAgID0gODsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBORVRXT1JLUFJPVE9DT0wgICAgICAgICAgICA9IDk7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUE9SVE5VTUJFUiAgICAgICAgICAgICAgICA9IDEwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJPTEVOQU1FICAgICAgICAgICAgICAgID0gMTE7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0VSVkVSTkFNRSAgICAgICAgICAgICAgICA9IDEyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWFNUQVRFTUVOVFMgICAgICAgICAgICA9IDEzOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOSVRJQUxQT09MU0laRSAgICAgICAgICAgID0gMTQ7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUlOUE9PTFNJWkUgICAgICAgICAgICAgICAgPSAxNTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhQT09MU0laRSAgICAgICAgICAgICAgICA9IDE2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWElETEVUSU1FICAgICAgICAgICAgICAgID0gMTc7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUFJPUEVSVFlDWUNMRSAgICAgICAgICAgID0gMTg7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRFJJVkVSUFJPUEVSVElFUyAgICAgICAgICAgID0gMTk7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0xBU1NOQU1FICAgICAgICAgICAgICAgID0gMjA7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVMSU1JVEVSICAgICAgICAgICAgICAgID0gMjE7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBYQURBVEFTT1VSQ0UgICAgICAgICAgICA9IDIyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFTT1VSQ0UgICAgICAgICAgICAgICAgPSAyMzsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05ORUNUSU9OUE9PTERBVEFTT1VSQ0UgICAgICAgID0gMjQ7CisKKyAgICAvL0dKQ0lOVAorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQgICAgPSAyNTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWQUxJREFUSU9OTUVUSE9EICAgICAgICAgICAgPSAyNjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWQUxJREFUSU9OVEFCTEVOQU1FICAgICAgICAgICAgPSAyNzsKKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRSQU5TQUNUSU9OSVNPTEFUSU9OICAgICAgICA9IDI4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdVQVJBTlRFRUlTT0xBVElPTkxFVkVMICAgICAgICA9IDI5OworCiAgICAgcHJpdmF0ZSBIYXNodGFibGUgZGV0YWlscyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgcHJvcGVydHkuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcHJvcGVydHkJUHJvcGVydHkgTmFtZSB0byBiZSBzZXQuCi0gICAgICogQHBhcmFtCXZhbHVlCQlWYWx1ZSBvZiBwcm9wZXJ0eSB0byBiZSBzZXQuCisgICAgICogQHBhcmFtICAgIHByb3BlcnR5ICAgIFByb3BlcnR5IE5hbWUgdG8gYmUgc2V0LgorICAgICAqIEBwYXJhbSAgICB2YWx1ZSAgICAgICAgVmFsdWUgb2YgcHJvcGVydHkgdG8gYmUgc2V0LgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERldGFpbChpbnQgcHJvcGVydHksIFN0cmluZyB2YWx1ZSkgewotICAgIAlkZXRhaWxzLnB1dChuZXcgSW50ZWdlcihwcm9wZXJ0eSksdmFsdWUpOworICAgICAgICBkZXRhaWxzLnB1dChuZXcgSW50ZWdlcihwcm9wZXJ0eSksdmFsdWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgdmFsdWUgb2YgcHJvcGVydHkKICAgICAgKgotICAgICAqIEByZXR1cm4JVmFsdWUgb2YgdGhlIHByb3BlcnR5LgorICAgICAqIEByZXR1cm4gICAgVmFsdWUgb2YgdGhlIHByb3BlcnR5LgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGV0YWlsKGludCBwcm9wZXJ0eSkgewotICAgIAlpZiAoZGV0YWlscy5jb250YWluc0tleShuZXcgSW50ZWdlcihwcm9wZXJ0eSkpKSB7Ci0gICAgCSAgICByZXR1cm4gKFN0cmluZykgZGV0YWlscy5nZXQobmV3IEludGVnZXIocHJvcGVydHkpKTsKLSAgICAJfSBlbHNlIHsKLSAgICAJICAgIHJldHVybiBudWxsOwotICAgIAl9ICAgIAkKKyAgICAgICAgaWYgKGRldGFpbHMuY29udGFpbnNLZXkobmV3IEludGVnZXIocHJvcGVydHkpKSkgeworICAgICAgICAgICAgcmV0dXJuIChTdHJpbmcpIGRldGFpbHMuZ2V0KG5ldyBJbnRlZ2VyKHByb3BlcnR5KSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENoZWNrcyB3aGV0aGVyIHR3byA8Y29kZT5EYXRhU291cmNlU3BlYzwvY29kZT4gb2JqZWN0cwogICAgICAqIGFyZSBlcXVhbCBvciBub3QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jb2JqCUluc3RhbmNlIG9mIDxjb2RlPkRhdGFTb3VyY2VTcGVjPC9jb2RlPiBvYmplY3QuCisgICAgICogQHBhcmFtICAgIG9iaiAgICBJbnN0YW5jZSBvZiA8Y29kZT5EYXRhU291cmNlU3BlYzwvY29kZT4gb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb2JqKSB7Ci0gICAgCWlmIChvYmogaW5zdGFuY2VvZiBEYXRhU291cmNlU3BlYykgewotICAgIAkgICAgcmV0dXJuIHRoaXMuZGV0YWlscy5lcXVhbHMoKChEYXRhU291cmNlU3BlYylvYmopLmRldGFpbHMpOwotICAgIAl9Ci0gICAgCXJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIERhdGFTb3VyY2VTcGVjKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5kZXRhaWxzLmVxdWFscygoKERhdGFTb3VyY2VTcGVjKW9iaikuZGV0YWlscyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgaGFzaENvZGUgb2YgdGhpcyA8Y29kZT5EYXRhU291cmNlU3BlYzwvY29kZT4gb2JqZWN0LgogICAgICAqCi0gICAgICogQHJldHVybgloYXNoQ29kZSBvZiB0aGlzIG9iamVjdC4KKyAgICAgKiBAcmV0dXJuICAgIGhhc2hDb2RlIG9mIHRoaXMgb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7Ci0gICAgCXJldHVybiB0aGlzLmRldGFpbHMuaGFzaENvZGUoKTsKLSAgICB9ICAgIAorICAgICAgICByZXR1cm4gdGhpcy5kZXRhaWxzLmhhc2hDb2RlKCk7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL2J1aWxkLnhtbAppbmRleCBlZjQzOGZjLi4zYjRmYWViIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL2J1aWxkLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8cHJvamVjdCBuYW1lPSJqZGJjX2Nvbm5lY3RvciIgYmFzZWRpcj0iLiIgZGVmYXVsdD0iYnVpbGQiPgogICA8cHJvcGVydHkgbmFtZT0icGtnLmRpciIgdmFsdWU9ImNvbS9zdW4vZ2pjL2NvbW1vbiIvPgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImNsZWFuIj4KICAgICA8YW50IGFudGZpbGU9ImJ1aWxkLnhtbCIgZGlyPSIke2dqYy5ob21lfS9iaW4iIHRhcmdldD0iY2xlYW4iLz4KICAgPC90YXJnZXQ+CkBAIC0zNiwxMyArMzYsMTMgQEAKIAogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUxMyIgZGVwZW5kcz0iY29tcGlsZSIvPgogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUxNCIgZGVwZW5kcz0iY29tcGlsZSIvPgotICAKKwogICA8dGFyZ2V0IG5hbWU9InBhY2thZ2UxMyIgZGVwZW5kcz0icGFja2FnZSIvPgogICA8dGFyZ2V0IG5hbWU9InBhY2thZ2UxNCIgZGVwZW5kcz0icGFja2FnZSIvPgogCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQxMyIgZGVwZW5kcz0iY29tcGlsZTEzLCBwYWNrYWdlMTMiLz4KICAgPHRhcmdldCBuYW1lPSJidWlsZDE0IiBkZXBlbmRzPSJjb21waWxlMTQsIHBhY2thZ2UxNCIvPgotICAgIAorCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImJ1aWxkMTMsIGJ1aWxkMTQiLz4KIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvQ29ubmVjdGlvbkhvbGRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvQ29ubmVjdGlvbkhvbGRlci5qYXZhCmluZGV4IGE5NTZkOTcuLjExYWQ3NDYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L0Nvbm5lY3Rpb25Ib2xkZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9Db25uZWN0aW9uSG9sZGVyLmphdmEKQEAgLTI0LDI0ICsyNCwyNCBAQAogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9yOwogCiAvKioKLSAqIEhvbGRzIHRoZSBqYXZhLnNxbC5Db25uZWN0aW9uIG9iamVjdCwgd2hpY2ggaXMgdG8gYmUgCisgKiBIb2xkcyB0aGUgamF2YS5zcWwuQ29ubmVjdGlvbiBvYmplY3QsIHdoaWNoIGlzIHRvIGJlCiAgKiBwYXNzZWQgdG8gdGhlIGFwcGxpY2F0aW9uIHByb2dyYW0uCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8yMwotICogQGF1dGhvcglCaW5vZCBQLkcKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMjMKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCiAgKi8KLXB1YmxpYyBjbGFzcyBDb25uZWN0aW9uSG9sZGVyIGltcGxlbWVudHMgQ29ubmVjdGlvbnsgCitwdWJsaWMgY2xhc3MgQ29ubmVjdGlvbkhvbGRlciBpbXBsZW1lbnRzIENvbm5lY3Rpb257CiAKICAgICBwcml2YXRlIENvbm5lY3Rpb24gY29uOwotICAgIAorCiAgICAgcHJpdmF0ZSBNYW5hZ2VkQ29ubmVjdGlvbiBtYzsKLSAgICAKLSAgICBwcml2YXRlIGJvb2xlYW4gd3JhcHBlZEFscmVhZHkgPSBmYWxzZTsgICAgCi0gICAgCisKKyAgICBwcml2YXRlIGJvb2xlYW4gd3JhcHBlZEFscmVhZHkgPSBmYWxzZTsKKwogICAgIHByaXZhdGUgYm9vbGVhbiBpc0Nsb3NlZCA9IGZhbHNlOwotICAgIAorCiAgICAgcHJpdmF0ZSBib29sZWFuIHZhbGlkID0gdHJ1ZTsKLSAgICAKKwogICAgIHByaXZhdGUgYm9vbGVhbiBhY3RpdmUgPSBmYWxzZTsKICAgICAvKioKICAgICAgKiBUaGUgYWN0aXZlIGZsYWcgaXMgZmFsc2Ugd2hlbiB0aGUgY29ubmVjdGlvbiBoYW5kbGUgaXMKQEAgLTUzLDIxOSArNTMsMjE5IEBACiAgICAgICogZnVuY3Rpb24sIHRoZSBhYm92ZSBtZXRob2QgaW52b2NhdGlvbiBzdWNjZWVkczsgb3RoZXJ3aXNlCiAgICAgICogYW4gZXhjZXB0aW9uIGlzIHRocm93bi4KICAgICAgKi8KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdHMgYSBDb25uZWN0aW9uIGhvbGRlci4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JY29uCTxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBjb24gICAgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyBDb25uZWN0aW9uSG9sZGVyKENvbm5lY3Rpb24gY29uLCBNYW5hZ2VkQ29ubmVjdGlvbiBtYykgewogICAgICAgICB0aGlzLmNvbiA9IGNvbjsKICAgICAgICAgdGhpcy5tYyAgPSBtYzsKICAgICB9Ci0gICAgICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgYWN0dWFsIGNvbm5lY3Rpb24gaW4gdGhpcyBob2xkZXIgb2JqZWN0LgotICAgICAqIAotICAgICAqIEByZXR1cm4JQ29ubmVjdGlvbiBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcmV0dXJuICAgIENvbm5lY3Rpb24gb2JqZWN0LgogICAgICAqLwogICAgIENvbm5lY3Rpb24gZ2V0Q29ubmVjdGlvbigpIHsKLSAgICAJcmV0dXJuIGNvbjsKKyAgICAgICAgcmV0dXJuIGNvbjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBmbGFnIHRvIGluZGljYXRlIHRoYXQsIHRoZSBjb25uZWN0aW9uIGlzIHdyYXBwZWQgYWxyZWFkeSBvciBub3QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jd3JhcEZsYWcJCisgICAgICogQHBhcmFtICAgIHdyYXBGbGFnCiAgICAgICovCiAgICAgdm9pZCB3cmFwcGVkKGJvb2xlYW4gd3JhcEZsYWcpewogICAgICAgICB0aGlzLndyYXBwZWRBbHJlYWR5ID0gd3JhcEZsYWc7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB3aGV0aGVyIGl0IGlzIHdyYXBwZWQgYWxyZWFkeSBvciBub3QuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXdyYXBwZWQgZmxhZy4KKyAgICAgKiBAcmV0dXJuICAgIHdyYXBwZWQgZmxhZy4KICAgICAgKi8KICAgICBib29sZWFuIGlzV3JhcHBlZCgpewogICAgICAgICByZXR1cm4gd3JhcHBlZEFscmVhZHk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlIHJlc3BvbnNpYmxlCiAgICAgICogZm9yIHRoaXMgY29ubmVjdGlvbi4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqLwogICAgIE1hbmFnZWRDb25uZWN0aW9uIGdldE1hbmFnZWRDb25uZWN0aW9uKCkgewogICAgICAgICByZXR1cm4gbWM7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmVwbGFjZSB0aGUgYWN0dWFsIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCB3aXRoIHRoZSBvbmUKLSAgICAgKiBzdXBwbGllZC4gQWxzbyByZXBsYWNlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBsaW5rLiAgICAgCisgICAgICogc3VwcGxpZWQuIEFsc28gcmVwbGFjZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gbGluay4KICAgICAgKgotICAgICAqIEBwYXJhbQljb24gPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgotICAgICAqIEBwYXJhbQltYyAgPGNvZGU+IE1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCisgICAgICogQHBhcmFtICAgIGNvbiA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCisgICAgICogQHBhcmFtICAgIG1jICA8Y29kZT4gTWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KICAgICAgKi8KICAgICB2b2lkIGFzc29jaWF0ZUNvbm5lY3Rpb24oQ29ubmVjdGlvbiBjb24sIE1hbmFnZWRDb25uZWN0aW9uIG1jKSB7Ci0gICAgCXRoaXMubWMgPSBtYzsKLSAgICAJdGhpcy5jb24gPSBjb247CisgICAgICAgIHRoaXMubWMgPSBtYzsKKyAgICAgICAgdGhpcy5jb24gPSBjb247CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2xlYXJzIGFsbCB3YXJuaW5ncyByZXBvcnRlZCBmb3IgdGhlIHVuZGVybHlpbmcgY29ubmVjdGlvbiAgb2JqZWN0LgogICAgICAqCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBjbGVhcldhcm5pbmdzKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsgICAgCi0JY2hlY2tWYWxpZGl0eSgpOworICAgIHB1YmxpYyB2b2lkIGNsZWFyV2FybmluZ3MoKSB0aHJvd3MgU1FMRXhjZXB0aW9ueworICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgY29uLmNsZWFyV2FybmluZ3MoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBDbG9zZXMgdGhlIGxvZ2ljYWwgY29ubmVjdGlvbi4gICAgCisgICAgICogQ2xvc2VzIHRoZSBsb2dpY2FsIGNvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjbG9zZSgpIHRocm93cyBTUUxFeGNlcHRpb257CiAgICAgICAgIGlzQ2xvc2VkID0gdHJ1ZTsKLSAgICAgICAgbWMuY29ubmVjdGlvbkNsb3NlZChudWxsLCB0aGlzKTsgICAgICAgIAorICAgICAgICBtYy5jb25uZWN0aW9uQ2xvc2VkKG51bGwsIHRoaXMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEludmFsaWRhdGVzIHRoaXMgb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGludmFsaWRhdGUoKSB7Ci0gICAgCXZhbGlkID0gZmFsc2U7CisgICAgICAgIHZhbGlkID0gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2xvc2VzIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGludm9sdmVkIGluIHRoaXMuCiAgICAgICoKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwotICAgIHZvaWQgYWN0dWFsQ2xvc2UoKSB0aHJvd3MgU1FMRXhjZXB0aW9ueyAgICAKKyAgICB2b2lkIGFjdHVhbENsb3NlKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKICAgICAgICAgY29uLmNsb3NlKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29tbWl0IHRoZSBjaGFuZ2VzIGluIHRoZSB1bmRlcmx5aW5nIENvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNvbW1pdCgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5jb21taXQoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5jb21taXQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgc3RhdGVtZW50IGZyb20gdGhlIHVuZGVybHlpbmcgQ29ubmVjdGlvbgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5TdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHJldHVybiAgICA8Y29kZT5TdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFN0YXRlbWVudCBjcmVhdGVTdGF0ZW1lbnQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgcmV0dXJuIGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgc3RhdGVtZW50IGZyb20gdGhlIHVuZGVybHlpbmcgQ29ubmVjdGlvbi4KICAgICAgKgotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRUeXBlCVR5cGUgb2YgdGhlIFJlc3VsdFNldAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRDb25jdXJyZW5jeQlSZXN1bHRTZXQgQ29uY3VycmVuY3kuCi0gICAgICogQHJldHVybgk8Y29kZT5TdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4gICAgIAotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0VHlwZSAgICBUeXBlIG9mIHRoZSBSZXN1bHRTZXQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0Q29uY3VycmVuY3kgICAgUmVzdWx0U2V0IENvbmN1cnJlbmN5LgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+U3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTdGF0ZW1lbnQgY3JlYXRlU3RhdGVtZW50KGludCByZXN1bHRTZXRUeXBlLCBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3kpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICByZXR1cm4gY29uLmNyZWF0ZVN0YXRlbWVudChyZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIHN0YXRlbWVudCBmcm9tIHRoZSB1bmRlcmx5aW5nIENvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0VHlwZQlUeXBlIG9mIHRoZSBSZXN1bHRTZXQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0Q29uY3VycmVuY3kJUmVzdWx0U2V0IENvbmN1cnJlbmN5LgotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRIb2xkYWJpbGl0eQlSZXN1bHRTZXQgSG9sZGFiaWxpdHkuICAgICAKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlN0YXRlbWVudDwvY29kZT4gb2JqZWN0LiAKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgICAgIAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRUeXBlICAgIFR5cGUgb2YgdGhlIFJlc3VsdFNldAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRDb25jdXJyZW5jeSAgICBSZXN1bHRTZXQgQ29uY3VycmVuY3kuCisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldEhvbGRhYmlsaXR5ICAgIFJlc3VsdFNldCBIb2xkYWJpbGl0eS4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KLSAgICBwdWJsaWMgU3RhdGVtZW50IGNyZWF0ZVN0YXRlbWVudChpbnQgcmVzdWx0U2V0VHlwZSwgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5LCAKLSAgICAJCQkJICAgICBpbnQgcmVzdWx0U2V0SG9sZGFiaWx0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAJCQkJICAgICAKKyAgICBwdWJsaWMgU3RhdGVtZW50IGNyZWF0ZVN0YXRlbWVudChpbnQgcmVzdWx0U2V0VHlwZSwgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRIb2xkYWJpbHR5KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIHJldHVybiBjb24uY3JlYXRlU3RhdGVtZW50KHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5LAotICAgICAgICAJCQkgICByZXN1bHRTZXRIb2xkYWJpbHR5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0U2V0SG9sZGFiaWx0eSk7CiAgICAgfQotIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBjdXJyZW50IGF1dG8tY29tbWl0IG1vZGUgZm9yIHRoZSB1bmRlcmx5aW5nIDxjb2RlPiBDb25uZWN0aW9uPC9jb2RlPi4KICAgICAgKgogICAgICAqIEByZXR1cm4gVGhlIGN1cnJlbnQgc3RhdGUgb2YgY29ubmVjdGlvbidzIGF1dG8tY29tbWl0IG1vZGUuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBnZXRBdXRvQ29tbWl0KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5nZXRBdXRvQ29tbWl0KCk7Ci0gICAgfSAgIAotIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5nZXRBdXRvQ29tbWl0KCk7CisgICAgfQorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSB1bmRlcmx5aW5nIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCdzIGNhdGFsb2cgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JQ2F0YWxvZyBOYW1lLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcmV0dXJuICAgIENhdGFsb2cgTmFtZS4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRDYXRhbG9nKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIHJldHVybiBjb24uZ2V0Q2F0YWxvZygpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgY3VycmVudCBob2xkYWJpbGl0eSBvZiA8Y29kZT5SZXN1bHRTZXQ8L2NvZGU+IG9iamVjdHMgY3JlYXRlZAogICAgICAqIHVzaW5nIHRoaXMgY29ubmVjdGlvbiBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWhvbGRhYmlsaXR5IHZhbHVlLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcmV0dXJuICAgIGhvbGRhYmlsaXR5IHZhbHVlLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldEhvbGRhYmlsaXR5KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuCWNvbi5nZXRIb2xkYWJpbGl0eSgpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuICAgIGNvbi5nZXRIb2xkYWJpbGl0eSgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgPGNvZGU+RGF0YWJhc2VNZXRhRGF0YTwvY29kZT5vYmplY3QgZnJvbSB0aGUgdW5kZXJseWluZwogICAgICAqIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgogICAgICAqCiAgICAgICogQHJldHVybiA8Y29kZT5EYXRhYmFzZU1ldGFEYXRhPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgRGF0YWJhc2VNZXRhRGF0YSBnZXRNZXRhRGF0YSgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uZ2V0TWV0YURhdGEoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uZ2V0TWV0YURhdGEoKTsKICAgICB9Ci0gCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhpcyA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QncyBjdXJyZW50IHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbC4KICAgICAgKgogICAgICAqIEByZXR1cm4gVHJhbnNhY3Rpb24gbGV2ZWwKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgcmV0dXJuIGNvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFJldHJpZXZlcyB0aGUgPGNvZGU+TWFwPC9jb2RlPiBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIAorICAgICAqIFJldHJpZXZlcyB0aGUgPGNvZGU+TWFwPC9jb2RlPiBvYmplY3QgYXNzb2NpYXRlZCB3aXRoCiAgICAgICogPGNvZGU+IENvbm5lY3Rpb248L2NvZGU+IE9iamVjdC4KICAgICAgKgotICAgICAqIEByZXR1cm4JVHlwZU1hcCBzZXQgaW4gdGhpcyBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEByZXR1cm4gICAgVHlwZU1hcCBzZXQgaW4gdGhpcyBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBNYXAgZ2V0VHlwZU1hcCgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uZ2V0VHlwZU1hcCgpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5nZXRUeXBlTWFwKCk7CiAgICAgfQogCiAvKgpAQCAtMjc5LDE4NCArMjc5LDE4NCBAQAogICAgICAqIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KICAgICAgKgogICAgICAqIEByZXR1cm4gRmlyc3QgPGNvZGU+IFNRTFdhcm5pbmc8L2NvZGU+IE9iamVjdCBvciBudWxsLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFNRTFdhcm5pbmcgZ2V0V2FybmluZ3MoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLmdldFdhcm5pbmdzKCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLmdldFdhcm5pbmdzKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHdoZXRoZXIgdW5kZXJseWluZyA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaXMgY2xvc2VkLgogICAgICAqCi0gICAgICogQHJldHVybgl0cnVlIGlmIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpcyBjbG9zZWQsIGZhbHNlCi0gICAgICogCQlpZiBpdCBpcyBjbG9zZWQuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEByZXR1cm4gICAgdHJ1ZSBpZiA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaXMgY2xvc2VkLCBmYWxzZQorICAgICAqICAgICAgICAgaWYgaXQgaXMgY2xvc2VkLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc0Nsb3NlZCgpIHRocm93cyBTUUxFeGNlcHRpb24gewotICAgIAlyZXR1cm4gaXNDbG9zZWQ7CisgICAgICAgIHJldHVybiBpc0Nsb3NlZDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgd2hldGhlciB0aGlzIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpcyByZWFkLW9ubHkuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRydWUgaWYgPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBpcyByZWFkLW9ubHksIGZhbHNlIG90aGVyLXdpc2UKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHJldHVybiAgICB0cnVlIGlmIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gaXMgcmVhZC1vbmx5LCBmYWxzZSBvdGhlci13aXNlCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGlzUmVhZE9ubHkoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLmlzUmVhZE9ubHkoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uaXNSZWFkT25seSgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnZlcnRzIHRoZSBnaXZlbiBTUUwgc3RhdGVtZW50IGludG8gdGhlIHN5c3RlbSdzIG5hdGl2ZSBTUUwgZ3JhbW1lci4KICAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIHN0YXRlbWVudCAsIHRvIGJlIGNvbnZlcnRlZC4KLSAgICAgKiBAcmV0dXJuCUNvbnZlcnRlZCBTUUwgc3RyaW5nLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBzdGF0ZW1lbnQgLCB0byBiZSBjb252ZXJ0ZWQuCisgICAgICogQHJldHVybiAgICBDb252ZXJ0ZWQgU1FMIHN0cmluZy4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBuYXRpdmVTUUwoU3RyaW5nIHNxbCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5uYXRpdmVTUUwoc3FsKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ubmF0aXZlU1FMKHNxbCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3IgY2FsbGluZyBkYXRhYmFzZQogICAgICAqIHN0b3JlZCBwcm9jZWR1cmVzLgogICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CiAgICAgICogQHJldHVybiA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBDYWxsYWJsZVN0YXRlbWVudCBwcmVwYXJlQ2FsbChTdHJpbmcgc3FsKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnByZXBhcmVDYWxsKHNxbCk7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIGNhbGxpbmcgZGF0YWJhc2UKLSAgICAgKiBzdG9yZWQgcHJvY2VkdXJlcy4KLSAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRUeXBlCVR5cGUgb2YgdGhlIFJlc3VsdFNldAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRDb25jdXJyZW5jeQlSZXN1bHRTZXQgQ29uY3VycmVuY3kuCi0gICAgICogQHJldHVybiA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovCi0gICAgcHVibGljIENhbGxhYmxlU3RhdGVtZW50IHByZXBhcmVDYWxsKFN0cmluZyBzcWwsaW50IHJlc3VsdFNldFR5cGUsIAotICAgIAkJCQkJaW50IHJlc3VsdFNldENvbmN1cnJlbmN5KSB0aHJvd3MgU1FMRXhjZXB0aW9uewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCQkJCQkKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlQ2FsbChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5KTsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3IgY2FsbGluZyBkYXRhYmFzZQotICAgICAqIHN0b3JlZCBwcm9jZWR1cmVzLgotICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldFR5cGUJVHlwZSBvZiB0aGUgUmVzdWx0U2V0Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldENvbmN1cnJlbmN5CVJlc3VsdFNldCBDb25jdXJyZW5jeS4KLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0SG9sZGFiaWxpdHkJUmVzdWx0U2V0IEhvbGRhYmlsaXR5LiAgICAgICAgICAKLSAgICAgKiBAcmV0dXJuIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8KLSAgICBwdWJsaWMgQ2FsbGFibGVTdGF0ZW1lbnQgcHJlcGFyZUNhbGwoU3RyaW5nIHNxbCwgaW50IHJlc3VsdFNldFR5cGUsIAotICAgIAkJCQkJIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwgCi0gICAgCQkJCQkgaW50IHJlc3VsdFNldEhvbGRhYmlsdHkpIHRocm93cyBTUUxFeGNlcHRpb257Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAJCQkJCSAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlQ2FsbChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5LAotICAgIAkJCSAgICAgICByZXN1bHRTZXRIb2xkYWJpbHR5KTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZUNhbGwoc3FsKTsKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nIAorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIGNhbGxpbmcgZGF0YWJhc2UKKyAgICAgKiBzdG9yZWQgcHJvY2VkdXJlcy4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRUeXBlICAgIFR5cGUgb2YgdGhlIFJlc3VsdFNldAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRDb25jdXJyZW5jeSAgICBSZXN1bHRTZXQgQ29uY3VycmVuY3kuCisgICAgICogQHJldHVybiA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCisgICAgcHVibGljIENhbGxhYmxlU3RhdGVtZW50IHByZXBhcmVDYWxsKFN0cmluZyBzcWwsaW50IHJlc3VsdFNldFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3kpIHRocm93cyBTUUxFeGNlcHRpb257CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVDYWxsKHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3kpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIGNhbGxpbmcgZGF0YWJhc2UKKyAgICAgKiBzdG9yZWQgcHJvY2VkdXJlcy4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRUeXBlICAgIFR5cGUgb2YgdGhlIFJlc3VsdFNldAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRDb25jdXJyZW5jeSAgICBSZXN1bHRTZXQgQ29uY3VycmVuY3kuCisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldEhvbGRhYmlsaXR5ICAgIFJlc3VsdFNldCBIb2xkYWJpbGl0eS4KKyAgICAgKiBAcmV0dXJuIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgQ2FsbGFibGVTdGF0ZW1lbnQgcHJlcGFyZUNhbGwoU3RyaW5nIHNxbCwgaW50IHJlc3VsdFNldFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRIb2xkYWJpbHR5KSB0aHJvd3MgU1FMRXhjZXB0aW9ueworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlQ2FsbChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRTZXRIb2xkYWJpbHR5KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nCiAgICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKICAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsKTsKICAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZyAKLSAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKLSAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQlhdXRvR2VuZXJhdGVkS2V5cyBhIGZsYWcgaW5kaWNhdGluZyBBdXRvR2VuZXJhdGVkS2V5cyBuZWVkIHRvIGJlIHJldHVybmVkLgotICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLwotICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludCBhdXRvR2VuZXJhdGVkS2V5cykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCxhdXRvR2VuZXJhdGVkS2V5cyk7Ci0gICAgfSAgICAKLSAgICAgIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcgCi0gICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCi0gICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JY29sdW1uSW5kZXhlcyBhbiBhcnJheSBvZiBjb2x1bW4gaW5kZXhlcyBpbmRpY2F0aW5nIHRoZSBjb2x1bW5zIHRoYXQgc2hvdWxkIGJlCi0gICAgICoJCXJldHVybmVkIGZyb20gdGhlIGluc2VydGVkIHJvdyBvciByb3dzLgotICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLwotICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludFtdIGNvbHVtbkluZGV4ZXMpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsY29sdW1uSW5kZXhlcyk7Ci0gICAgfSAgICAgICAgICAKLSAKLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nIAotICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQotICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldFR5cGUJVHlwZSBvZiB0aGUgUmVzdWx0U2V0Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldENvbmN1cnJlbmN5CVJlc3VsdFNldCBDb25jdXJyZW5jeS4KLSAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8KLSAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLGludCByZXN1bHRTZXRUeXBlLCAKLSAgICAJCQkJCWludCByZXN1bHRTZXRDb25jdXJyZW5jeSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAkJCQkJCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5KTsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZyAKLSAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKLSAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRUeXBlCVR5cGUgb2YgdGhlIFJlc3VsdFNldAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRDb25jdXJyZW5jeQlSZXN1bHRTZXQgQ29uY3VycmVuY3kuCi0gICAgICogQHBhcmFtCXJlc3VsdFNldEhvbGRhYmlsaXR5CVJlc3VsdFNldCBIb2xkYWJpbGl0eS4gICAgICAgICAgCi0gICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovCi0gICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCwgaW50IHJlc3VsdFNldFR5cGUsIAotICAgIAkJCQkJIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwgCi0gICAgCQkJCQkgaW50IHJlc3VsdFNldEhvbGRhYmlsdHkpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCQkJCQkgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5LAotICAgIAkJCQkgICAgcmVzdWx0U2V0SG9sZGFiaWx0eSk7Ci0gICAgfSAgICAgICAgICAgCiAKICAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nIAorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcKICAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKICAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQljb2x1bW5OYW1lcyBOYW1lIG9mIGJvdW5kIGNvbHVtbnMuCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIGF1dG9HZW5lcmF0ZWRLZXlzIGEgZmxhZyBpbmRpY2F0aW5nIEF1dG9HZW5lcmF0ZWRLZXlzIG5lZWQgdG8gYmUgcmV0dXJuZWQuCiAgICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludCBhdXRvR2VuZXJhdGVkS2V5cykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLGF1dG9HZW5lcmF0ZWRLZXlzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nCisgICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgY29sdW1uSW5kZXhlcyBhbiBhcnJheSBvZiBjb2x1bW4gaW5kZXhlcyBpbmRpY2F0aW5nIHRoZSBjb2x1bW5zIHRoYXQgc2hvdWxkIGJlCisgICAgICogICAgICAgIHJldHVybmVkIGZyb20gdGhlIGluc2VydGVkIHJvdyBvciByb3dzLgorICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludFtdIGNvbHVtbkluZGV4ZXMpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCxjb2x1bW5JbmRleGVzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nCisgICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0VHlwZSAgICBUeXBlIG9mIHRoZSBSZXN1bHRTZXQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0Q29uY3VycmVuY3kgICAgUmVzdWx0U2V0IENvbmN1cnJlbmN5LgorICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsaW50IHJlc3VsdFNldFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3kpIHRocm93cyBTUUxFeGNlcHRpb257CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZworICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldFR5cGUgICAgVHlwZSBvZiB0aGUgUmVzdWx0U2V0CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldENvbmN1cnJlbmN5ICAgIFJlc3VsdFNldCBDb25jdXJyZW5jeS4KKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0SG9sZGFiaWxpdHkgICAgUmVzdWx0U2V0IEhvbGRhYmlsaXR5LgorICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludCByZXN1bHRTZXRUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0SG9sZGFiaWx0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFNldEhvbGRhYmlsdHkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcKKyAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICBjb2x1bW5OYW1lcyBOYW1lIG9mIGJvdW5kIGNvbHVtbnMuCisgICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCwgU3RyaW5nW10gY29sdW1uTmFtZXMpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsY29sdW1uTmFtZXMpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCxjb2x1bW5OYW1lcyk7CiAgICAgfQogCiAgICAgcHVibGljIENsb2IgY3JlYXRlQ2xvYigpIHRocm93cyBTUUxFeGNlcHRpb24gewpAQCAtNTA2LDE2MiArNTA2LDE2MiBAQAogICAgIC8qKgogICAgICAqIFJlbW92ZXMgdGhlIGdpdmVuIDxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0IGZyb20gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc2F2ZXBvaW50CTxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0Ci0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBzYXZlcG9pbnQgICAgPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcmVsZWFzZVNhdmVwb2ludChTYXZlcG9pbnQgc2F2ZXBvaW50KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24ucmVsZWFzZVNhdmVwb2ludChzYXZlcG9pbnQpOwotICAgIH0gCi0gICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24ucmVsZWFzZVNhdmVwb2ludChzYXZlcG9pbnQpOworICAgIH0KKwogICAgIC8qKgogICAgICAqIFJvbGxzIGJhY2sgdGhlIGNoYW5nZXMgbWFkZSBpbiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbi4KICAgICAgKgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8gICAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KICAgICBwdWJsaWMgdm9pZCByb2xsYmFjaygpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5yb2xsYmFjaygpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnJvbGxiYWNrKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUm9sbHMgYmFjayB0aGUgY2hhbmdlcyBtYWRlIGFmdGVyIHRoZSBzYXZlcG9pbnQuCiAgICAgICoKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovICAgICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCiAgICAgcHVibGljIHZvaWQgcm9sbGJhY2soU2F2ZXBvaW50IHNhdmVwb2ludCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnJvbGxiYWNrKHNhdmVwb2ludCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24ucm9sbGJhY2soc2F2ZXBvaW50KTsKICAgICB9Ci0gICAgICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgYXV0by1jb21tbWl0IG1vZGUgb2YgdGhlIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KICAgICAgKgotICAgICAqIEBwYXJhbQlhdXRvQ29tbWl0IGJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyB0aGUgYXV0by1jb21taXQgbW9kZS4gICAgIAotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgYXV0b0NvbW1pdCBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgdGhlIGF1dG8tY29tbWl0IG1vZGUuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldEF1dG9Db21taXQoYm9vbGVhbiBhdXRvQ29tbWl0KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24uc2V0QXV0b0NvbW1pdChhdXRvQ29tbWl0KTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5zZXRBdXRvQ29tbWl0KGF1dG9Db21taXQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGNhdGFsb2cgbmFtZSB0byB0aGUgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0CiAgICAgICoKLSAgICAgKiBAcGFyYW0JY2F0YWxvZwlDYXRhbG9nIG5hbWUuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBjYXRhbG9nICAgIENhdGFsb2cgbmFtZS4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Q2F0YWxvZyhTdHJpbmcgY2F0YWxvZykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnNldENhdGFsb2coY2F0YWxvZyk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24uc2V0Q2F0YWxvZyhjYXRhbG9nKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBTZXRzIHRoZSBob2xkYWJpbGl0eSBvZiA8Y29kZT5SZXN1bHRTZXQ8L2NvZGU+IG9iamVjdHMgY3JlYXRlZCAKKyAgICAgKiBTZXRzIHRoZSBob2xkYWJpbGl0eSBvZiA8Y29kZT5SZXN1bHRTZXQ8L2NvZGU+IG9iamVjdHMgY3JlYXRlZAogICAgICAqIHVzaW5nIHRoaXMgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgogICAgICAqCi0gICAgICogQHBhcmFtCWhvbGRhYmlsaXR5CUEgPGNvZGU+UmVzdWx0U2V0PC9jb2RlPiBob2xkYWJpbGl0eSBjb25zdGFudAotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgaG9sZGFiaWxpdHkgICAgQSA8Y29kZT5SZXN1bHRTZXQ8L2NvZGU+IGhvbGRhYmlsaXR5IGNvbnN0YW50CisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldEhvbGRhYmlsaXR5KGludCBob2xkYWJpbGl0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAgCWNvbi5zZXRIb2xkYWJpbGl0eShob2xkYWJpbGl0eSk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICAgY29uLnNldEhvbGRhYmlsaXR5KGhvbGRhYmlsaXR5KTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBQdXRzIHRoZSBjb25uZWN0aW9uIGluIHJlYWQtb25seSBtb2RlIGFzIGEgaGludCB0byB0aGUgZHJpdmVyIHRvIAorICAgICAqIFB1dHMgdGhlIGNvbm5lY3Rpb24gaW4gcmVhZC1vbmx5IG1vZGUgYXMgYSBoaW50IHRvIHRoZSBkcml2ZXIgdG8KICAgICAgKiBwZXJmb3JtIGRhdGFiYXNlIG9wdGltaXphdGlvbnMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcmVhZE9ubHkgIHRydWUgZW5hYmxlcyByZWFkLW9ubHkgbW9kZSwgZmFsc2UgZGlzYWJsZXMgaXQuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICByZWFkT25seSAgdHJ1ZSBlbmFibGVzIHJlYWQtb25seSBtb2RlLCBmYWxzZSBkaXNhYmxlcyBpdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0UmVhZE9ubHkoYm9vbGVhbiByZWFkT25seSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnNldFJlYWRPbmx5KHJlYWRPbmx5KTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5zZXRSZWFkT25seShyZWFkT25seSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhbmQgdW5uYW1lZCBzYXZlcG9pbnQgYW5kIHJldHVybnMgYW4gb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhhdC4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHJldHVybiAgICA8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdC4KICAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFNhdmVwb2ludCBzZXRTYXZlcG9pbnQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnNldFNhdmVwb2ludCgpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5zZXRTYXZlcG9pbnQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgc2F2ZXBvaW50IHdpdGggdGhlIG5hbWUgYW5kIHJldHVybnMgYW4gb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhhdC4KICAgICAgKgotICAgICAqIEBwYXJhbQluYW1lCU5hbWUgb2YgdGhlIHNhdmVwb2ludC4KLSAgICAgKiBAcmV0dXJuCTxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgbmFtZSAgICBOYW1lIG9mIHRoZSBzYXZlcG9pbnQuCisgICAgICogQHJldHVybiAgICA8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFNhdmVwb2ludCBzZXRTYXZlcG9pbnQoU3RyaW5nIG5hbWUpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uc2V0U2F2ZXBvaW50KG5hbWUpOwotICAgIH0gICAgCi0gICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnNldFNhdmVwb2ludChuYW1lKTsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbGV2ZWwgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgbGV2ZWwgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRUcmFuc2FjdGlvbklzb2xhdGlvbihpbnQgbGV2ZWwpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbihsZXZlbCk7Ci0gICAgfSAgICAgCi0gICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24obGV2ZWwpOworICAgIH0KKwogICAgIC8qKgotICAgICAqIEluc3RhbGxzIHRoZSBnaXZlbiA8Y29kZT5NYXA8L2NvZGU+IG9iamVjdCBhcyB0aGUgdHlvZSBtYXAgZm9yIHRoaXMgCisgICAgICogSW5zdGFsbHMgdGhlIGdpdmVuIDxjb2RlPk1hcDwvY29kZT4gb2JqZWN0IGFzIHRoZSB0eW9lIG1hcCBmb3IgdGhpcwogICAgICAqIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgogICAgICAqCi0gICAgICogQHBhcmFtCW1hcAk8Y29kZT5NYXA8L2NvZGU+IGEgTWFwIG9iamVjdCB0byBpbnN0YWxsLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgbWFwICAgIDxjb2RlPk1hcDwvY29kZT4gYSBNYXAgb2JqZWN0IHRvIGluc3RhbGwuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFR5cGVNYXAoTWFwIG1hcCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOwotICAgIAljb24uc2V0VHlwZU1hcChtYXApOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnNldFR5cGVNYXAobWFwKTsKICAgICB9CiAKICAgICBwdWJsaWMgaW50IGdldE5ldHdvcmtUaW1lb3V0KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICB0aHJvdyBuZXcgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiRG8gbm90IHN1cHBvcnQgSmF2YSA3IG5ldyBmZWF0dXJlLiIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldE5ldHdvcmtUaW1lb3V0KEV4ZWN1dG9yIGV4ZWN1dG9yLCBpbnQgbWlsbGlzZWNvbmRzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgbmV3IGZlYXR1cmUuIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgYWJvcnQoRXhlY3V0b3IgZXhlY3V0b3IpICB0aHJvd3MgU1FMRXhjZXB0aW9uewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBuZXcgZmVhdHVyZS4iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldFNjaGVtYSgpIHRocm93cyBTUUxFeGNlcHRpb257CiAgICAgICB0aHJvdyBuZXcgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiRG8gbm90IHN1cHBvcnQgSmF2YSA3IG5ldyBmZWF0dXJlLiIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFNjaGVtYShTdHJpbmcgc2NoZW1hKSB0aHJvd3MgU1FMRXhjZXB0aW9uewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBuZXcgZmVhdHVyZS4iKTsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIENoZWNrcyB0aGUgdmFsaWRpdHkgb2YgdGhpcyBvYmplY3QKICAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgY2hlY2tWYWxpZGl0eSgpIHRocm93cyBTUUxFeGNlcHRpb24gewotICAgIAlpZiAoaXNDbG9zZWQpIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKCJDb25uZWN0aW9uIGNsb3NlZCIpOwotICAgIAlpZiAoIXZhbGlkKSB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uICgiSW52YWxpZCBDb25uZWN0aW9uIik7Ci0gICAgCWlmKGFjdGl2ZSA9PSBmYWxzZSkgewotICAgIAkgICAgbWMuY2hlY2tJZkFjdGl2ZSh0aGlzKTsKLSAgICAJfQorICAgICAgICBpZiAoaXNDbG9zZWQpIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKCJDb25uZWN0aW9uIGNsb3NlZCIpOworICAgICAgICBpZiAoIXZhbGlkKSB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uICgiSW52YWxpZCBDb25uZWN0aW9uIik7CisgICAgICAgIGlmKGFjdGl2ZSA9PSBmYWxzZSkgeworICAgICAgICAgICAgbWMuY2hlY2tJZkFjdGl2ZSh0aGlzKTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGFjdGl2ZSBmbGFnIHRvIHRydWUKICAgICAgKgotICAgICAqIEBwYXJhbQlhY3R2CWJvb2xlYW4KKyAgICAgKiBAcGFyYW0gICAgYWN0diAgICBib29sZWFuCiAgICAgICovCiAgICAgdm9pZCBzZXRBY3RpdmUoYm9vbGVhbiBhY3R2KSB7CiAgICAgICAgIGFjdGl2ZSA9IGFjdHY7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCmluZGV4IGFjN2U3NDguLmYwNjc1YTQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCkBAIC0zMywxOSArMzMsMTkgQEAKICAqIFRoaXMgY2xhc3MgaXMgZXh0ZW5kZWQgYnkgdGhlIERhdGFTb3VyY2Ugc3BlY2lmaWMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGZhY3RvcmllcwogICogYW5kIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGZvciB0aGUgPGNvZGU+RHJpdmVyTWFuYWdlcjwvY29kZT4uCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wOC8wMwotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDgvMDMKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIAotcHVibGljIGFic3RyYWN0IGNsYXNzIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSwgCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LAogICAgIGphdmEuaW8uU2VyaWFsaXphYmxlIHsKLSAgICAKKwogICAgIHByb3RlY3RlZCBEYXRhU291cmNlU3BlYyBzcGVjID0gbmV3IERhdGFTb3VyY2VTcGVjKCk7CiAgICAgcHJvdGVjdGVkIHRyYW5zaWVudCBEYXRhU291cmNlT2JqZWN0QnVpbGRlciBkc09iakJ1aWxkZXI7Ci0gICAgCisKICAgICBwcm90ZWN0ZWQgamF2YS5pby5QcmludFdyaXRlciBsb2dXcml0ZXIgPSBudWxsOwogICAgIHByb3RlY3RlZCBqYWthcnRhLnJlc291cmNlLnNwaS5SZXNvdXJjZUFkYXB0ZXIgcmEgPSBudWxsOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgTG9nZ2VyIF9sb2dnZXI7CiAgICAgc3RhdGljIHsKICAgICAgICAgX2xvZ2dlciA9IExvZ2dlci5nZXRBbm9ueW1vdXNMb2dnZXIoKTsKQEAgLTU0LDggKzU0LDggQEAKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgQ29ubmVjdGlvbiBGYWN0b3J5IGluc3RhbmNlLiBUaGUgPGNvZGU+Q29ubmVjdGlvbk1hbmFnZXI8L2NvZGU+IGltcGxlbWVudGF0aW9uCiAgICAgICogb2YgdGhlIHJlc291cmNlIGFkYXB0ZXIgaXMgdXNlZCBoZXJlLgotICAgICAqIAotICAgICAqIEByZXR1cm4JR2VuZXJpYyBKREJDIENvbm5lY3RvciBpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29kZT4KKyAgICAgKgorICAgICAqIEByZXR1cm4gICAgR2VuZXJpYyBKREJDIENvbm5lY3RvciBpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgT2JqZWN0IGNyZWF0ZUNvbm5lY3Rpb25GYWN0b3J5KCkgewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtNjMsMTYgKzYzLDE2IEBACiAgICAgICAgIH0KICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2UgY2YgPSBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2UoCiAgICAgICAgICAgICAoamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KXRoaXMsIG51bGwpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gY2Y7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIENvbm5lY3Rpb24gRmFjdG9yeSBpbnN0YW5jZS4gVGhlIDxjb2RlPkNvbm5lY3Rpb25NYW5hZ2VyPC9jb2RlPiBpbXBsZW1lbnRhdGlvbgogICAgICAqIG9mIHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIgaXMgdXNlZCBoZXJlLgotICAgICAqIAotICAgICAqIEBwYXJhbQljeE1hbmFnZXIJPGNvZGU+Q29ubmVjdGlvbk1hbmFnZXI8L2NvZGU+IHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICogQHJldHVybglHZW5lcmljIEpEQkMgQ29ubmVjdG9yIGltcGxlbWVudGF0aW9uIG9mIDxjb2RlPmphdmF4LnNxbC5EYXRhU291cmNlPC9jb2RlPgorICAgICAqCisgICAgICogQHBhcmFtICAgIGN4TWFuYWdlciAgICA8Y29kZT5Db25uZWN0aW9uTWFuYWdlcjwvY29kZT4gcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiBAcmV0dXJuICAgIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IgaW1wbGVtZW50YXRpb24gb2YgPGNvZGU+amF2YXguc3FsLkRhdGFTb3VyY2U8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIE9iamVjdCBjcmVhdGVDb25uZWN0aW9uRmFjdG9yeShqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uTWFuYWdlciBjeE1hbmFnZXIpIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTgwLDU1ICs4MCw1NSBAQAogICAgICAgICB9CiAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlIGNmID0gbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlKAogICAgICAgICAgICAgKGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSl0aGlzLCBjeE1hbmFnZXIpOwotICAgICAgICByZXR1cm4gY2Y7IAorICAgICAgICByZXR1cm4gY2Y7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIG5ldyBwaHlzaWNhbCBjb25uZWN0aW9uIHRvIHRoZSB1bmRlcmx5aW5nIEVJUyByZXNvdXJjZQogICAgICAqIG1hbmFnZXIuCi0gICAgICogCi0gICAgICogQHBhcmFtCXN1YmplY3QJPGNvZGU+U3ViamVjdDwvY29kZT4gaW5zdGFuY2UgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKiBAcGFyYW0JY3hSZXF1ZXN0SW5mbwk8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHdoaWNoIG1heSBiZSBjcmVhdGVkCi0gICAgICogICAgICAgCSAgICAgICAgICAgICAJYXMgYSByZXN1bHQgb2YgdGhlIGludm9jYXRpb24gPGNvZGU+Z2V0Q29ubmVjdGlvbih1c2VyLCBwYXNzd29yZCk8L2NvZGU+Ci0gICAgICogICAgICAgCSAgICAgICAgICAgICAJb24gdGhlIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdAotICAgICAqIEByZXR1cm4JPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBjcmVhdGVkCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBpbnN0YW50aWF0aW5nIHRoZQotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0IHVzZWQgZm9yIHRoZQotICAgICAqICAgICAgIAkJCQljcmVhdGlvbiBvZiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdAotICAgICAqIEB0aHJvd3MJU2VjdXJpdHlFeGNlcHRpb24JaWYgdGhlcmUgaW5vIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0Ci0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAlzYXRpc2Z5aW5nIHRoaXMgcmVxdWVzdCAKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZSAKLSAgICAgKgkJCQkJCXBoeXNpY2FsIGNvbm5lY3Rpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzdWJqZWN0ICAgIDxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogQHBhcmFtICAgIGN4UmVxdWVzdEluZm8gICAgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiB3aGljaCBtYXkgYmUgY3JlYXRlZAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIGEgcmVzdWx0IG9mIHRoZSBpbnZvY2F0aW9uIDxjb2RlPmdldENvbm5lY3Rpb24odXNlciwgcGFzc3dvcmQpPC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIHRoZSA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QgY3JlYXRlZAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gaW5zdGFudGlhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdCB1c2VkIGZvciB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRpb24gb2YgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QKKyAgICAgKiBAdGhyb3dzICAgIFNlY3VyaXR5RXhjZXB0aW9uICAgIGlmIHRoZXJlIGlubyA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F0aXNmeWluZyB0aGlzIHJlcXVlc3QKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgcGh5c2ljYWwgY29ubmVjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyBhYnN0cmFjdCBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBjcmVhdGVNYW5hZ2VkQ29ubmVjdGlvbihqYXZheC5zZWN1cml0eS5hdXRoLlN1YmplY3Qgc3ViamVjdCwKICAgICAgICAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxdWVzdEluZm8pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIC8qKgotICAgICAqIENoZWNrIGlmIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpcyBlcXVhbCB0byAKKyAgICAgKiBDaGVjayBpZiB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaXMgZXF1YWwgdG8KICAgICAgKiBhbm90aGVyIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4uCi0gICAgICogCi0gICAgICogQHBhcmFtCW90aGVyCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0IGZvciBjaGVja2luZyBlcXVhbGl0eSB3aXRoCi0gICAgICogQHJldHVybgl0cnVlCWlmIHRoZSBwcm9wZXJ0eSBzZXRzIG9mIGJvdGggdGhlIAotICAgICAqCQkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3RzIGFyZSB0aGUgc2FtZQotICAgICAqCQlmYWxzZQlvdGhlcndpc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBvdGhlciAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdCBmb3IgY2hlY2tpbmcgZXF1YWxpdHkgd2l0aAorICAgICAqIEByZXR1cm4gICAgdHJ1ZSAgICBpZiB0aGUgcHJvcGVydHkgc2V0cyBvZiBib3RoIHRoZQorICAgICAqICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3RzIGFyZSB0aGUgc2FtZQorICAgICAqICAgICAgICBmYWxzZSAgICBvdGhlcndpc2UKICAgICAgKi8KICAgICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG90aGVyKTsKLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgbG9nIHdyaXRlciBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEBzZWUJPGNvZGU+c2V0TG9nV3JpdGVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldExvZ1dyaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgamF2YS5pby5QcmludFdyaXRlciBnZXRMb2dXcml0ZXIoKSB7CiAgICAgICAgIHJldHVybiBsb2dXcml0ZXI7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSA8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEBzZWUJPGNvZGU+c2V0UmVzb3VyY2VBZGFwdGVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRSZXNvdXJjZUFkYXB0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIGpha2FydGEucmVzb3VyY2Uuc3BpLlJlc291cmNlQWRhcHRlciBnZXRSZXNvdXJjZUFkYXB0ZXIoKSB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC0xMzYsMTEgKzEzNiwxMSBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiByYTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSBoYXNoIGNvZGUgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPi4KICAgICAgKgotICAgICAqIEByZXR1cm4JaGFzaCBjb2RlIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGhhc2ggY29kZSBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIGludCBoYXNoQ29kZSgpewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtMTQ4LDQxICsxNDgsNDEgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gc3BlYy5oYXNoQ29kZSgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFJldHVybnMgYSBtYXRjaGVkIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBmcm9tIHRoZSBjYW5kaWRhdGUgCisgICAgICogUmV0dXJucyBhIG1hdGNoZWQgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGZyb20gdGhlIGNhbmRpZGF0ZQogICAgICAqIHNldCBvZiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0cy4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JY29ubmVjdGlvblNldAk8Y29kZT5TZXQ8L2NvZGU+IG9mICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KLSAgICAgKgkJCQlvYmplY3RzIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICogQHBhcmFtCXN1YmplY3QJIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICoJCQlmb3IgcmV0cmlldmluZyBpbmZvcm1hdGlvbiByZXF1aXJlZCBmb3IgbWF0Y2hpbmcKLSAgICAgKiBAcGFyYW0JY3hSZXF1ZXN0SW5mbwk8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICoJCQkJZm9yIHJldHJpZXZpbmcgaW5mb3JtYXRpb24gcmVxdWlyZWQgZm9yIG1hdGNoaW5nCi0gICAgICogQHJldHVybgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdGhhdCBpcyB0aGUgYmVzdCBtYXRjaCBzYXRpc2Z5aW5nIHRoaXMgcmVxdWVzdAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgYWNjZXNzaW5nIHRoZSA8Y29kZT5TdWJqZWN0PC9jb2RlPgotICAgICAqCQkJCQlwYXJhbWV0ZXIgb3IgdGhlIDxjb2RlPlNldDwvY29kZT4gb2YgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+Ci0gICAgICoJCQkJCW9iamVjdHMgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBjb25uZWN0aW9uU2V0ICAgIDxjb2RlPlNldDwvY29kZT4gb2YgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgIG9iamVjdHMgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiBAcGFyYW0gICAgc3ViamVjdCAgICAgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiAgICAgICAgICAgIGZvciByZXRyaWV2aW5nIGluZm9ybWF0aW9uIHJlcXVpcmVkIGZvciBtYXRjaGluZworICAgICAqIEBwYXJhbSAgICBjeFJlcXVlc3RJbmZvICAgIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiAgICAgICAgICAgICAgICBmb3IgcmV0cmlldmluZyBpbmZvcm1hdGlvbiByZXF1aXJlZCBmb3IgbWF0Y2hpbmcKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiB0aGF0IGlzIHRoZSBiZXN0IG1hdGNoIHNhdGlzZnlpbmcgdGhpcyByZXF1ZXN0CisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBhY2Nlc3NpbmcgdGhlIDxjb2RlPlN1YmplY3Q8L2NvZGU+CisgICAgICogICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlciBvciB0aGUgPGNvZGU+U2V0PC9jb2RlPiBvZiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgb2JqZWN0cyBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgogICAgICAqLwotICAgIHB1YmxpYyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYXRjaE1hbmFnZWRDb25uZWN0aW9ucyhqYXZhLnV0aWwuU2V0IGNvbm5lY3Rpb25TZXQsIAorICAgIHB1YmxpYyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYXRjaE1hbmFnZWRDb25uZWN0aW9ucyhqYXZhLnV0aWwuU2V0IGNvbm5lY3Rpb25TZXQsCiAgICAgICAgIGphdmF4LnNlY3VyaXR5LmF1dGguU3ViamVjdCBzdWJqZWN0LCBDb25uZWN0aW9uUmVxdWVzdEluZm8gY3hSZXF1ZXN0SW5mbykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBtYXRjaE1hbmFnZWRDb25uZWN0aW9ucyIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmKGNvbm5lY3Rpb25TZXQgPT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgUGFzc3dvcmRDcmVkZW50aWFsIHBjID0gU2VjdXJpdHlVdGlscy5nZXRQYXNzd29yZENyZWRlbnRpYWwodGhpcywgc3ViamVjdCwgY3hSZXF1ZXN0SW5mbyk7Ci0gICAgICAgIAorCiAgICAgICAgIGphdmEudXRpbC5JdGVyYXRvciBpdGVyID0gY29ubmVjdGlvblNldC5pdGVyYXRvcigpOwogICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWMgPSBudWxsOwogICAgICAgICB3aGlsZShpdGVyLmhhc05leHQoKSkgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBtYyA9IChjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24pIGl0ZXIubmV4dCgpOwogICAgICAgICAgICAgfSBjYXRjaChqYXZhLnV0aWwuTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiBuc2VlKSB7Ci0JICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19pdGVyIik7CisgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19pdGVyIik7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKG5zZWUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmKHBjID09IG51bGwgJiYgdGhpcy5lcXVhbHMobWMuZ2V0TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KCkpKSB7CkBAIC0xOTEsNyArMTkxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgaXNWYWxpZChtYyk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYzsKICAgICAgICAgICAgICAgICB9IGNhdGNoKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7Ci0JICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfcmUiLCByZSk7CisgICAgICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfcmUiLCByZSk7CiAgICAgICAgICAgICAgICAgICAgIG1jLmNvbm5lY3Rpb25FcnJvck9jY3VycmVkKHJlLCBudWxsKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgaWYoU2VjdXJpdHlVdGlscy5pc1Bhc3N3b3JkQ3JlZGVudGlhbEVxdWFsKHBjLCBtYy5nZXRQYXNzd29yZENyZWRlbnRpYWwoKSkgPT0gdHJ1ZSkgewpAQCAtMjAwLDQ1ICsyMDAsNDUgQEAKICAgICAgICAgICAgICAgICAgICAgaXNWYWxpZChtYyk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYzsKICAgICAgICAgICAgICAgICB9IGNhdGNoKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7Ci0JICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5yZSIpOworICAgICAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMucmUiKTsKICAgICAgICAgICAgICAgICAgICAgbWMuY29ubmVjdGlvbkVycm9yT2NjdXJyZWQocmUsIG51bGwpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICAvL0dKQ0lOVAogICAgIC8qKgogICAgICAqIENoZWNrcyBpZiBhIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpcyB0byBiZSB2YWxpZGF0ZWQgb3Igbm90CiAgICAgICogYW5kIHZhbGlkYXRlcyBpdCBvciByZXR1cm5zLgotICAgICAqIAotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgb3IKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAJCWlmIHZhbGlkYXRpb24gbWV0aG9kIGlzIG5vdCBwcm9wZXIKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBtYyAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgb3IKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHZhbGlkYXRpb24gbWV0aG9kIGlzIG5vdCBwcm9wZXIKICAgICAgKi8KICAgICB2b2lkIGlzVmFsaWQoY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1jKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogCiAgICAgICAgIGlmKG1jLmlzVHJhbnNhY3Rpb25JblByb2dyZXNzKCkpIHsKLQkgICAgcmV0dXJuOworICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAKLSAgICAgICAgYm9vbGVhbiBjb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkID0gCisKKyAgICAgICAgYm9vbGVhbiBjb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkID0KICAgICAgICAgICAgIChuZXcgQm9vbGVhbihzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVEKS50b0xvd2VyQ2FzZSgpKSkuYm9vbGVhblZhbHVlKCk7CiAgICAgICAgIGlmKCBjb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkID09IGZhbHNlIHx8IG1jID09IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgCisKKwogICAgICAgICBTdHJpbmcgdmFsaWRhdGlvbk1ldGhvZCA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05NRVRIT0QpLnRvTG93ZXJDYXNlKCk7Ci0gICAgICAgIAorCiAgICAgICAgIG1jLmNoZWNrSWZWYWxpZCgpOwogICAgICAgICAvKioKICAgICAgICAgICogVGhlIGFib3ZlIGNhbGwgY2hlY2tzIGlmIHRoZSBhY3R1YWwgcGh5c2ljYWwgY29ubmVjdGlvbgogICAgICAgICAgKiBpcyB1c2FibGUgb3Igbm90LgogICAgICAgICAgKi8KICAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBjb24gPSBtYy5nZXRBY3R1YWxDb25uZWN0aW9uKCk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKHZhbGlkYXRpb25NZXRob2QuZXF1YWxzKCJhdXRvLWNvbW1pdCIpID09IHRydWUpIHsKICAgICAgICAgICAgIGlzVmFsaWRCeUF1dG9Db21taXQoY29uKTsKICAgICAgICAgfSBlbHNlIGlmKHZhbGlkYXRpb25NZXRob2QuZXF1YWxzSWdub3JlQ2FzZSgibWV0YS1kYXRhIikgPT0gdHJ1ZSkgewpAQCAtMjQ5LDI4ICsyNDksMjggQEAKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIHZhbGlkYXRpb24gbWV0aG9kIGlzIG5vdCBwcm9wZXIiKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENoZWNrcyBpZiBhIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IGlzIHZhbGlkIG9yIG5vdAogICAgICAqIGJ5IGNoZWNraW5nIGl0cyBhdXRvIGNvbW1pdCBwcm9wZXJ0eS4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JY29uCTxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgY29uICAgIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCiAgICAgICovCiAgICAgcHJvdGVjdGVkIHZvaWQgaXNWYWxpZEJ5QXV0b0NvbW1pdChqYXZhLnNxbC5Db25uZWN0aW9uIGNvbikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYoY29uID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzICIKICAgICAgICAgICAgICAgICArICJ0aGUgY29ubmVjdGlvbiBpcyBudWxsIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgLy8gTm90aWNlIHRoYXQgdXNpbmcgc29tZXRoaW5nIGxpa2UgCisgICAgICAgICAgIC8vIE5vdGljZSB0aGF0IHVzaW5nIHNvbWV0aGluZyBsaWtlCiAgICAgICAgICAgIC8vIGRiQ29uLnNldEF1dG9Db21taXQoZGJDb24uZ2V0QXV0b0NvbW1pdCgpKSB3aWxsIGNhdXNlIHByb2JsZW1zIHdpdGgKICAgICAgICAgICAgLy8gc29tZSBkcml2ZXJzIGxpa2Ugc3liYXNlCi0gICAgICAgICAgIC8vIFdlIGRvIG5vdCB2YWxpZGF0ZSBjb25uZWN0aW9ucyB0aGF0IGFyZSBhbHJlYWR5IGVubGlzdGVkIAotCSAgIC8vaW4gYSB0cmFuc2FjdGlvbiAKLQkgICAvLyBXZSBjeWNsZSBhdXRvY29tbWl0IHRvIHRydWUgYW5kIGZhbHNlIHRvIGJ5LXBhc3MgZHJpdmVycyB0aGF0IAotCSAgIC8vIG1pZ2h0IGNhY2hlIHRoZSBjYWxsIHRvIHNldCBhdXRvY29taXR0CisgICAgICAgICAgIC8vIFdlIGRvIG5vdCB2YWxpZGF0ZSBjb25uZWN0aW9ucyB0aGF0IGFyZSBhbHJlYWR5IGVubGlzdGVkCisgICAgICAgLy9pbiBhIHRyYW5zYWN0aW9uCisgICAgICAgLy8gV2UgY3ljbGUgYXV0b2NvbW1pdCB0byB0cnVlIGFuZCBmYWxzZSB0byBieS1wYXNzIGRyaXZlcnMgdGhhdAorICAgICAgIC8vIG1pZ2h0IGNhY2hlIHRoZSBjYWxsIHRvIHNldCBhdXRvY29taXR0CiAgICAgICAgICAgIC8vIEFsc28gbm90aWNlIHRoYXQgc29tZSBYQSBkYXRhIHNvdXJjZXMgd2lsbCB0aHJvdyBhbmQgZXhjZXB0aW9uIGlmCiAgICAgICAgICAgIC8vIHlvdSB0cnkgdG8gY2FsbCBzZXRBdXRvQ29tbWl0LCBmb3IgdGhlbSB0aGlzIG1ldGhvZCBpcyBub3QgcmVjb21tZW5kZWQKIApAQCAtMjgxLDkwICsyODEsOTAgQEAKICAgICAgICAgICAgICAgICBjb24ucm9sbGJhY2soKTsgLy8gcHJldmVudHMgdW5jb21wbGV0ZWQgdHJhbnNhY3Rpb24gZXhjZXB0aW9ucwogICAgICAgICAgICAgICAgIGNvbi5zZXRBdXRvQ29tbWl0KHRydWUpOwogICAgICAgICAgICB9Ci0gICAgICAgIAotCSAgIGNvbi5zZXRBdXRvQ29tbWl0KGFjKTsKKworICAgICAgIGNvbi5zZXRBdXRvQ29tbWl0KGFjKTsKIAogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2F1dG9jb21taXQiKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfYXV0b2NvbW1pdCIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENoZWNrcyBpZiBhIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IGlzIHZhbGlkIG9yIG5vdAogICAgICAqIGJ5IGNoZWNraW5nIGl0cyBtZXRhIGRhdGEuCi0gICAgICogCi0gICAgICogQHBhcmFtCWNvbgk8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqCisgICAgICogQHBhcmFtICAgIGNvbiAgICA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqLwogICAgIHByb3RlY3RlZCB2b2lkIGlzVmFsaWRCeU1ldGFEYXRhKGphdmEuc3FsLkNvbm5lY3Rpb24gY29uKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihjb24gPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgIgogICAgICAgICAgICAgICAgICsgInRoZSBjb25uZWN0aW9uIGlzIG51bGwiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgamF2YS5zcWwuRGF0YWJhc2VNZXRhRGF0YSBkbWQgPSBjb24uZ2V0TWV0YURhdGEoKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19tZCIpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19tZCIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgIgogICAgICAgICAgICAgICAgICsgImdldHRpbmcgdGhlIG1ldGEgZGF0YSBmYWlsZWQ6ICIgKyBzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDaGVja3MgaWYgYSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBpcyB2YWxpZCBvciBub3QKICAgICAgKiBieSBxdWVyeWluZyBhIHRhYmxlLgotICAgICAqIAotICAgICAqIEBwYXJhbQljb24JPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCi0gICAgICogQHBhcmFtCXRhYmxlTmFtZQl0YWJsZSB3aGljaCBzaG91bGQgYmUgcXVlcmllZAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgY29uICAgIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAorICAgICAqIEBwYXJhbSAgICB0YWJsZU5hbWUgICAgdGFibGUgd2hpY2ggc2hvdWxkIGJlIHF1ZXJpZWQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqLwotICAgIHByb3RlY3RlZCB2b2lkIGlzVmFsaWRCeVRhYmxlUXVlcnkoamF2YS5zcWwuQ29ubmVjdGlvbiBjb24sIAorICAgIHByb3RlY3RlZCB2b2lkIGlzVmFsaWRCeVRhYmxlUXVlcnkoamF2YS5zcWwuQ29ubmVjdGlvbiBjb24sCiAgICAgICAgIFN0cmluZyB0YWJsZU5hbWUpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGNvbiA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyAiCiAgICAgICAgICAgICAgICAgKyAidGhlIGNvbm5lY3Rpb24gaXMgbnVsbCIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBqYXZhLnNxbC5TdGF0ZW1lbnQgc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKICAgICAgICAgICAgIGphdmEuc3FsLlJlc3VsdFNldCBycyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KCJTRUxFQ1QgKiBGUk9NICIgKyB0YWJsZU5hbWUpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2V4ZWN1dGUiKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZXhlY3V0ZSIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgIgogICAgICAgICAgICAgICAgICsgInF1ZXJ5aW5nIHRoZSB0YWJsZSAiICsgdGFibGVOYW1lICsgIiBmYWlsZWQ6ICIgKyBzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBpc29sYXRpb24gbGV2ZWwgc3BlY2lmaWVkIGluIHRoZSA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+CiAgICAgICogZm9yIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gcGFzc2VkLgogICAgICAqCi0gICAgICogQHBhcmFtCW1jCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIGlzb2xhdGlvbiBwcm9wZXJ0eSBpcyBpbnZhbGlkCi0gICAgICoJCQkJCW9yIGlmIHRoZSBpc29sYXRpb24gY2Fubm90IGJlIHNldCBvdmVyIHRoZSBjb25uZWN0aW9uCisgICAgICogQHBhcmFtICAgIG1jICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIGlzb2xhdGlvbiBwcm9wZXJ0eSBpcyBpbnZhbGlkCisgICAgICogICAgICAgICAgICAgICAgICAgIG9yIGlmIHRoZSBpc29sYXRpb24gY2Fubm90IGJlIHNldCBvdmVyIHRoZSBjb25uZWN0aW9uCiAgICAgICovCiAgICAgcHJvdGVjdGVkIHZvaWQgc2V0SXNvbGF0aW9uKGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKLSAgICAJCi0gICAgCWphdmEuc3FsLkNvbm5lY3Rpb24gY29uID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpOwotICAgIAlpZihjb24gPT0gbnVsbCkgewotICAgIAkgICAgcmV0dXJuOwotICAgIAl9Ci0gICAgCQotICAgIAlTdHJpbmcgdHJhbklzb2xhdGlvbiA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKLSAgICAJaWYodHJhbklzb2xhdGlvbiAhPSBudWxsICYmIHRyYW5Jc29sYXRpb24uZXF1YWxzKCIiKSA9PSBmYWxzZSkgewotICAgIAkgICAgaW50IHRyYW5Jc29sYXRpb25JbnQgPSBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbkludCh0cmFuSXNvbGF0aW9uKTsKLSAgICAJICAgIHRyeSB7Ci0gICAgCSAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sYXRpb25JbnQpOwotICAgIAkgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfdHhfbGV2ZWwiKTsKLSAgICAJICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gY291bGQgIgotICAgIAkgICAgICAgICAgICArICJub3QgYmUgc2V0OiAiICsgc3FsZS5nZXRNZXNzYWdlKCkpOwotICAgIAkgICAgfQotICAgIAl9CisKKyAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBjb24gPSBtYy5nZXRBY3R1YWxDb25uZWN0aW9uKCk7CisgICAgICAgIGlmKGNvbiA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBTdHJpbmcgdHJhbklzb2xhdGlvbiA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKKyAgICAgICAgaWYodHJhbklzb2xhdGlvbiAhPSBudWxsICYmIHRyYW5Jc29sYXRpb24uZXF1YWxzKCIiKSA9PSBmYWxzZSkgeworICAgICAgICAgICAgaW50IHRyYW5Jc29sYXRpb25JbnQgPSBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbkludCh0cmFuSXNvbGF0aW9uKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sYXRpb25JbnQpOworICAgICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgeworICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfdHhfbGV2ZWwiKTsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gY291bGQgIgorICAgICAgICAgICAgICAgICAgICArICJub3QgYmUgc2V0OiAiICsgc3FsZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmVzZXRzIHRoZSBpc29sYXRpb24gbGV2ZWwgZm9yIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gcGFzc2VkLgogICAgICAqIElmIHRoZSB0cmFuc2FjdGlvbiBsZXZlbCBpcyB0byBiZSBndWFyYW50ZWVkIHRvIGJlIHRoZSBzYW1lIGFzIHRoZSBvbmUKQEAgLTM3MywzODIgKzM3MywzODIgQEAKICAgICAgKiBpc29sYXRpb24gbGV2ZWwgZnJvbSB0aGUgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBwYXNzZWQuIEVsc2UsCiAgICAgICogaXQgc2V0cyBpdCB0byB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIHBhc3NlZC4KICAgICAgKgotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KLSAgICAgKiBAcGFyYW0JdHJhbklzb2wJaW50Ci0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgaXNvbGF0aW9uIHByb3BlcnR5IGlzIGludmFsaWQKLSAgICAgKgkJCQkJb3IgaWYgdGhlIGlzb2xhdGlvbiBjYW5ub3QgYmUgc2V0IG92ZXIgdGhlIGNvbm5lY3Rpb24KKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogQHBhcmFtICAgIHRyYW5Jc29sICAgIGludAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIGlzb2xhdGlvbiBwcm9wZXJ0eSBpcyBpbnZhbGlkCisgICAgICogICAgICAgICAgICAgICAgICAgIG9yIGlmIHRoZSBpc29sYXRpb24gY2Fubm90IGJlIHNldCBvdmVyIHRoZSBjb25uZWN0aW9uCiAgICAgICovCiAgICAgdm9pZCByZXNldElzb2xhdGlvbihjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWMsIGludCB0cmFuSXNvbCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKLSAgICAJCi0gICAgCWphdmEuc3FsLkNvbm5lY3Rpb24gY29uID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpOwotICAgIAlpZihjb24gPT0gbnVsbCkgewotICAgIAkgICAgcmV0dXJuOwotICAgIAl9Ci0gICAgCQotICAgIAlTdHJpbmcgdHJhbklzb2xhdGlvbiA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKLSAgICAJaWYodHJhbklzb2xhdGlvbiAhPSBudWxsICYmIHRyYW5Jc29sYXRpb24uZXF1YWxzKCIiKSA9PSBmYWxzZSkgewotICAgIAkgICAgU3RyaW5nIGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwpOwotICAgIAkgICAgCi0gICAgCSAgICBpZihndWFyYW50ZWVJc29sYXRpb25MZXZlbCAhPSBudWxsICYmIGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsLmVxdWFscygiIikgPT0gZmFsc2UpIHsKLSAgICAJICAgICAgICBib29sZWFuIGd1YXJhbnRlZSA9IChuZXcgQm9vbGVhbihndWFyYW50ZWVJc29sYXRpb25MZXZlbC50b0xvd2VyQ2FzZSgpKSkuYm9vbGVhblZhbHVlKCk7Ci0gICAgCSAgICAgICAgCi0gICAgCSAgICAgICAgaWYoZ3VhcmFudGVlKSB7Ci0gICAgCSAgICAgICAgICAgIGludCB0cmFuSXNvbGF0aW9uSW50ID0gZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb25JbnQodHJhbklzb2xhdGlvbik7Ci0gICAgCSAgICAgICAgICAgIHRyeSB7Ci0gICAgCSAgICAgICAgICAgICAgICBpZih0cmFuSXNvbGF0aW9uSW50ICE9IGNvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpKSB7Ci0gICAgCSAgICAgICAgICAgICAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sYXRpb25JbnQpOwotICAgIAkgICAgICAgICAgICAgICAgfQotICAgIAkgICAgICAgICAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgICAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3R4X2xldmVsIik7Ci0gICAgCSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBpc29sYXRpb24gbGV2ZWwgY291bGQgbm90IGJlIHNldDogIgotICAgIAkgICAgICAgICAgICAgICAgICAgICsgc3FsZS5nZXRNZXNzYWdlKCkpOwotICAgIAkgICAgICAgICAgICB9Ci0gICAgCSAgICAgICAgfSBlbHNlIHsKLSAgICAJICAgICAgICAgICAgdHJ5IHsKLSAgICAJICAgICAgICAgICAgICAgIGlmKHRyYW5Jc29sICE9IGNvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpKSB7Ci0gICAgCSAgICAgICAgICAgICAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sKTsKLSAgICAJICAgICAgICAgICAgICAgIH0KLSAgICAJICAgICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y190eF9sZXZlbCIpOwotICAgIAkgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgaXNvbGF0aW9uIGxldmVsIGNvdWxkIG5vdCBiZSBzZXQ6ICIKLSAgICAJICAgICAgICAgICAgICAgICAgICArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAJICAgICAgICAgICAgfQotICAgIAkgICAgICAgIH0KLSAgICAJICAgIH0KLSAgICAJfQorCisgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gY29uID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpOworICAgICAgICBpZihjb24gPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgU3RyaW5nIHRyYW5Jc29sYXRpb24gPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTik7CisgICAgICAgIGlmKHRyYW5Jc29sYXRpb24gIT0gbnVsbCAmJiB0cmFuSXNvbGF0aW9uLmVxdWFscygiIikgPT0gZmFsc2UpIHsKKyAgICAgICAgICAgIFN0cmluZyBndWFyYW50ZWVJc29sYXRpb25MZXZlbCA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkdVQVJBTlRFRUlTT0xBVElPTkxFVkVMKTsKKworICAgICAgICAgICAgaWYoZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwgIT0gbnVsbCAmJiBndWFyYW50ZWVJc29sYXRpb25MZXZlbC5lcXVhbHMoIiIpID09IGZhbHNlKSB7CisgICAgICAgICAgICAgICAgYm9vbGVhbiBndWFyYW50ZWUgPSAobmV3IEJvb2xlYW4oZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwudG9Mb3dlckNhc2UoKSkpLmJvb2xlYW5WYWx1ZSgpOworCisgICAgICAgICAgICAgICAgaWYoZ3VhcmFudGVlKSB7CisgICAgICAgICAgICAgICAgICAgIGludCB0cmFuSXNvbGF0aW9uSW50ID0gZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb25JbnQodHJhbklzb2xhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZih0cmFuSXNvbGF0aW9uSW50ICE9IGNvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sYXRpb25JbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7CisgICAgICAgICAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3R4X2xldmVsIik7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBpc29sYXRpb24gbGV2ZWwgY291bGQgbm90IGJlIHNldDogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgc3FsZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRyYW5Jc29sICE9IGNvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5Jc29sKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgeworICAgICAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y190eF9sZXZlbCIpOworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgaXNvbGF0aW9uIGxldmVsIGNvdWxkIG5vdCBiZSBzZXQ6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGludGVnZXIgZXF1aXZhbGVudCBvZiB0aGUgc3RyaW5nIHNwZWNpZnlpbmcKICAgICAgKiB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uLgogICAgICAqCi0gICAgICogQHBhcmFtCXRyYW5Jc29sYXRpb24Jc3RyaW5nIHNwZWNpZnlpbmcgdGhlIGlzb2xhdGlvbiBsZXZlbAotICAgICAqIEByZXR1cm4JdHJhbklzb2xhdGlvbkludAl0aGUgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gY29uc3RhbnQKLSAgICAgKgkJCQkJZm9yIHRoZSBzdHJpbmcgc3BlY2lmeWluZyB0aGUgaXNvbGF0aW9uLgorICAgICAqIEBwYXJhbSAgICB0cmFuSXNvbGF0aW9uICAgIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBpc29sYXRpb24gbGV2ZWwKKyAgICAgKiBAcmV0dXJuICAgIHRyYW5Jc29sYXRpb25JbnQgICAgdGhlIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IGNvbnN0YW50CisgICAgICogICAgICAgICAgICAgICAgICAgIGZvciB0aGUgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIGlzb2xhdGlvbi4KICAgICAgKi8KICAgICBwcml2YXRlIGludCBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbkludChTdHJpbmcgdHJhbklzb2xhdGlvbikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKLSAgICAJaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJyZWFkLXVuY29tbWl0dGVkIikpIHsKLSAgICAJICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1JFQURfVU5DT01NSVRURUQ7Ci0gICAgCX0gZWxzZSBpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInJlYWQtY29tbWl0dGVkIikpIHsKLSAgICAJICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1JFQURfQ09NTUlUVEVEOwotICAgIAl9IGVsc2UgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJyZXBlYXRhYmxlLXJlYWQiKSkgewotICAgIAkgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fUkVQRUFUQUJMRV9SRUFEOwotICAgIAl9IGVsc2UgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJzZXJpYWxpemFibGUiKSkgewotICAgIAkgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fU0VSSUFMSVpBQkxFOwotICAgIAl9IGVsc2UgewotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJJbnZhbGlkIHRyYW5zYWN0aW9uIGlzb2xhdGlvbjsgdGhlIHRyYW5zYWN0aW9uICIKLSAgICAJICAgICAgICArICJpc29sYXRpb24gbGV2ZWwgY2FuIGJlIGVtcHR5IG9yIGFueSBvZiB0aGUgZm9sbG93aW5nOiAiCi0gICAgCSAgICAgICAgICAgICsgInJlYWQtdW5jb21taXR0ZWQsIHJlYWQtY29tbWl0dGVkLCByZXBlYXRhYmxlLXJlYWQsIHNlcmlhbGl6YWJsZSIpOwotICAgIAl9CisgICAgICAgIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgicmVhZC11bmNvbW1pdHRlZCIpKSB7CisgICAgICAgICAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9SRUFEX1VOQ09NTUlUVEVEOworICAgICAgICB9IGVsc2UgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJyZWFkLWNvbW1pdHRlZCIpKSB7CisgICAgICAgICAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9SRUFEX0NPTU1JVFRFRDsKKyAgICAgICAgfSBlbHNlIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgicmVwZWF0YWJsZS1yZWFkIikpIHsKKyAgICAgICAgICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1JFUEVBVEFCTEVfUkVBRDsKKyAgICAgICAgfSBlbHNlIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgic2VyaWFsaXphYmxlIikpIHsKKyAgICAgICAgICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1NFUklBTElaQUJMRTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiSW52YWxpZCB0cmFuc2FjdGlvbiBpc29sYXRpb247IHRoZSB0cmFuc2FjdGlvbiAiCisgICAgICAgICAgICAgICAgKyAiaXNvbGF0aW9uIGxldmVsIGNhbiBiZSBlbXB0eSBvciBhbnkgb2YgdGhlIGZvbGxvd2luZzogIgorICAgICAgICAgICAgICAgICAgICArICJyZWFkLXVuY29tbWl0dGVkLCByZWFkLWNvbW1pdHRlZCwgcmVwZWF0YWJsZS1yZWFkLCBzZXJpYWxpemFibGUiKTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgbG9nIHdyaXRlciBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCW91dAk8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKiBAc2VlCTxjb2RlPmdldExvZ1dyaXRlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgb3V0ICAgIDxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0TG9nV3JpdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldExvZ1dyaXRlcihqYXZhLmlvLlByaW50V3JpdGVyIG91dCkgewogICAgICAgICBsb2dXcml0ZXIgPSBvdXQ7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0IHRoZSBhc3NvY2lhdGVkIDxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gSmF2YUJlYW4uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcmEJPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcyAKLSAgICAgKgkJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAc2VlCTxjb2RlPmdldFJlc291cmNlQWRhcHRlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcmEgICAgPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAqICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0UmVzb3VyY2VBZGFwdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFJlc291cmNlQWRhcHRlcihqYWthcnRhLnJlc291cmNlLnNwaS5SZXNvdXJjZUFkYXB0ZXIgcmEpIHsKLSAgICAgICAgdGhpcy5yYSA9IHJhOyAgIAorICAgICAgICB0aGlzLnJhID0gcmE7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdXNlciBuYW1lCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdXNlcgk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHVzZXIgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFVzZXIoU3RyaW5nIHVzZXIpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVVNFUk5BTUUsIHVzZXIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHVzZXIgbmFtZQogICAgICAqCi0gICAgICogQHJldHVybgl1c2VyCisgICAgICogQHJldHVybiAgICB1c2VyCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRVc2VyKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVVNFUk5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHVzZXIgbmFtZQogICAgICAqCi0gICAgICogQHBhcmFtCXVzZXIJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB1c2VyICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXR1c2VyKFN0cmluZyB1c2VyKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlVTRVJOQU1FLCB1c2VyKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSB1c2VyIG5hbWUKICAgICAgKgotICAgICAqIEByZXR1cm4JdXNlcgorICAgICAqIEByZXR1cm4gICAgdXNlcgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0dXNlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlVTRVJOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBwYXNzd29yZAogICAgICAqCi0gICAgICogQHBhcmFtCXBhc3N3ZAk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHBhc3N3ZCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0UGFzc3dvcmQoU3RyaW5nIHBhc3N3ZCkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5QQVNTV09SRCwgcGFzc3dkKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBwYXNzd29yZAogICAgICAqCi0gICAgICogQHJldHVybglwYXNzd2QKKyAgICAgKiBAcmV0dXJuICAgIHBhc3N3ZAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0UGFzc3dvcmQoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QQVNTV09SRCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgcGFzc3dvcmQKICAgICAgKgotICAgICAqIEBwYXJhbQlwYXNzd2QJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBwYXNzd2QgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHBhc3N3b3JkKFN0cmluZyBwYXNzd2QpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUEFTU1dPUkQsIHBhc3N3ZCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcGFzc3dvcmQKICAgICAgKgotICAgICAqIEByZXR1cm4JcGFzc3dkCisgICAgICogQHJldHVybiAgICBwYXNzd2QKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHBhc3N3b3JkKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUEFTU1dPUkQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGRhdGEgc291cmNlCiAgICAgICoKLSAgICAgKiBAcGFyYW0JY2xhc3NOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgY2xhc3NOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRDbGFzc05hbWUoU3RyaW5nIGNsYXNzTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5DTEFTU05BTUUsIGNsYXNzTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgZGF0YSBzb3VyY2UKICAgICAgKgotICAgICAqIEByZXR1cm4JY2xhc3NOYW1lCisgICAgICogQHJldHVybiAgICBjbGFzc05hbWUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldENsYXNzTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNMQVNTTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgZGF0YSBzb3VyY2UKICAgICAgKgotICAgICAqIEBwYXJhbQljbGFzc05hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBjbGFzc05hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGNsYXNzTmFtZShTdHJpbmcgY2xhc3NOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNMQVNTTkFNRSwgY2xhc3NOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBkYXRhIHNvdXJjZQogICAgICAqCi0gICAgICogQHJldHVybgljbGFzc05hbWUKKyAgICAgKiBAcmV0dXJuICAgIGNsYXNzTmFtZQogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Y2xhc3NOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ0xBU1NOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIGlmIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiBpcyByZXF1aXJlZCBvciBub3QKICAgICAgKgotICAgICAqIEBwYXJhbQljb25WbGRSZXEJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBjb25WbGRSZXEgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldENvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQoU3RyaW5nIGNvblZsZFJlcSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5DT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVELCBjb25WbGRSZXEpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgaWYgY29ubmVjdGlvbiB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkIG9yIG5vdAogICAgICAqCi0gICAgICogQHJldHVybgljb25uZWN0aW9uIHZhbGlkYXRpb24gcmVxdWlyZW1lbnQKKyAgICAgKiBAcmV0dXJuICAgIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiByZXF1aXJlbWVudAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgaWYgY29ubmVjdGlvbiB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkIG9yIG5vdAogICAgICAqCi0gICAgICogQHBhcmFtCWNvblZsZFJlcQk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGNvblZsZFJlcSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Y29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZChTdHJpbmcgY29uVmxkUmVxKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQsIGNvblZsZFJlcSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBpZiBjb25uZWN0aW9uIHZhbGlkYXRpb24gaXMgcmVxdWlyZWQgb3Igbm90CiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWNvbm5lY3Rpb24gdmFsaWRhdGlvbiByZXF1aXJlbWVudAorICAgICAqIEByZXR1cm4gICAgY29ubmVjdGlvbiB2YWxpZGF0aW9uIHJlcXVpcmVtZW50CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRjb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ09OTkVDVElPTlZBTElEQVRJT05SRVFVSVJFRCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdmFsaWRhdGlvbiBtZXRob2QgcmVxdWlyZWQKICAgICAgKgotICAgICAqIEBwYXJhbQl2YWxpZGF0aW9uTWV0aG9kCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdmFsaWRhdGlvbk1ldGhvZCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0VmFsaWRhdGlvbk1ldGhvZChTdHJpbmcgdmFsaWRhdGlvbk1ldGhvZCkgewogICAgICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTk1FVEhPRCwgdmFsaWRhdGlvbk1ldGhvZCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgY29ubmVjdGlvbiB2YWxpZGF0aW9uIG1ldGhvZCB0eXBlCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXZhbGlkYXRpb24gbWV0aG9kCisgICAgICogQHJldHVybiAgICB2YWxpZGF0aW9uIG1ldGhvZAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VmFsaWRhdGlvbk1ldGhvZCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05NRVRIT0QpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHZhbGlkYXRpb24gbWV0aG9kIHJlcXVpcmVkCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdmFsaWRhdGlvbk1ldGhvZAk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHZhbGlkYXRpb25NZXRob2QgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHZhbGlkYXRpb25NZXRob2QoU3RyaW5nIHZhbGlkYXRpb25NZXRob2QpIHsKICAgICAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05NRVRIT0QsIHZhbGlkYXRpb25NZXRob2QpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiBtZXRob2QgdHlwZQogICAgICAqCi0gICAgICogQHJldHVybgl2YWxpZGF0aW9uIG1ldGhvZAorICAgICAqIEByZXR1cm4gICAgdmFsaWRhdGlvbiBtZXRob2QKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHZhbGlkYXRpb25NZXRob2QoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OTUVUSE9EKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB0YWJsZSBjaGVja2VkIGZvciBkdXJpbmcgdmFsaWRhdGlvbgogICAgICAqCi0gICAgICogQHBhcmFtCXRhYmxlCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdGFibGUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFZhbGlkYXRpb25UYWJsZU5hbWUoU3RyaW5nIHRhYmxlKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05UQUJMRU5BTUUsIHRhYmxlKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSB0YWJsZSBjaGVja2VkIGZvciBkdXJpbmcgdmFsaWRhdGlvbgogICAgICAqCi0gICAgICogQHJldHVybgl0YWJsZQorICAgICAqIEByZXR1cm4gICAgdGFibGUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFZhbGlkYXRpb25UYWJsZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OVEFCTEVOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB0YWJsZSBjaGVja2VkIGZvciBkdXJpbmcgdmFsaWRhdGlvbgogICAgICAqCi0gICAgICogQHBhcmFtCXRhYmxlCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdGFibGUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHZhbGlkYXRpb25UYWJsZU5hbWUoU3RyaW5nIHRhYmxlKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05UQUJMRU5BTUUsIHRhYmxlKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSB0YWJsZSBjaGVja2VkIGZvciBkdXJpbmcgdmFsaWRhdGlvbgogICAgICAqCi0gICAgICogQHJldHVybgl0YWJsZQorICAgICAqIEByZXR1cm4gICAgdGFibGUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHZhbGlkYXRpb25UYWJsZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OVEFCTEVOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKgotICAgICAqIEBwYXJhbQl0cm5Jc29sYXRpb24JPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB0cm5Jc29sYXRpb24gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKFN0cmluZyB0cm5Jc29sYXRpb24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04sIHRybklzb2xhdGlvbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAorICAgICAqIEByZXR1cm4gICAgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKgotICAgICAqIEBwYXJhbQl0cm5Jc29sYXRpb24JPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB0cm5Jc29sYXRpb24gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHRyYW5zYWN0aW9uSXNvbGF0aW9uKFN0cmluZyB0cm5Jc29sYXRpb24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04sIHRybklzb2xhdGlvbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAorICAgICAqIEByZXR1cm4gICAgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXR0cmFuc2FjdGlvbklzb2xhdGlvbigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIGlmIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwgaXMgdG8gYmUgZ3VhcmFudGVlZAogICAgICAqCi0gICAgICogQHBhcmFtCWd1YXJhbnRlZUlzb2xhdGlvbgk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGd1YXJhbnRlZUlzb2xhdGlvbiAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0R3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwoU3RyaW5nIGd1YXJhbnRlZUlzb2xhdGlvbikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5HVUFSQU5URUVJU09MQVRJT05MRVZFTCwgZ3VhcmFudGVlSXNvbGF0aW9uKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKgotICAgICAqIEByZXR1cm4JaXNvbGF0aW9uIGxldmVsIGd1YXJhbnRlZQorICAgICAqIEByZXR1cm4gICAgaXNvbGF0aW9uIGxldmVsIGd1YXJhbnRlZQogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0R3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5HVUFSQU5URUVJU09MQVRJT05MRVZFTCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyBpZiB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsIGlzIHRvIGJlIGd1YXJhbnRlZWQKICAgICAgKgotICAgICAqIEBwYXJhbQlndWFyYW50ZWVJc29sYXRpb24JPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBndWFyYW50ZWVJc29sYXRpb24gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsKFN0cmluZyBndWFyYW50ZWVJc29sYXRpb24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwsIGd1YXJhbnRlZUlzb2xhdGlvbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWlzb2xhdGlvbiBsZXZlbCBndWFyYW50ZWUKKyAgICAgKiBAcmV0dXJuICAgIGlzb2xhdGlvbiBsZXZlbCBndWFyYW50ZWUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvUmVzb3VyY2VBZGFwdGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9SZXNvdXJjZUFkYXB0ZXIuamF2YQppbmRleCAxYmU0ZGVkLi40MzYyNTYxIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9SZXNvdXJjZUFkYXB0ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9SZXNvdXJjZUFkYXB0ZXIuamF2YQpAQCAtMjQsOCArMjQsOCBAQAogLyoqCiAgKiA8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDgvMDUKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA4LzA1CisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiBAQ29ubmVjdG9yKAogICAgICAgICBkZXNjcmlwdGlvbiA9ICJSZXNvdXJjZSBhZGFwdGVyIHdyYXBwaW5nIERhdGFzb3VyY2UgaW1wbGVtZW50YXRpb24gb2YgZHJpdmVyIiwKQEAgLTQ5LDUyICs0OSw1MiBAQAogICAgICAqIEVtcHR5IG1ldGhvZCBpbXBsZW1lbnRhdGlvbiBmb3IgZW5kcG9pbnRBY3RpdmF0aW9uCiAgICAgICogd2hpY2gganVzdCB0aHJvd3MgPGNvZGU+Tm90U3VwcG9ydGVkRXhjZXB0aW9uPC9jb2RlPgogICAgICAqCi0gICAgICogQHBhcmFtCW1lZgk8Y29kZT5NZXNzYWdlRW5kcG9pbnRGYWN0b3J5PC9jb2RlPgotICAgICAqIEBwYXJhbQlhcwk8Y29kZT5BY3RpdmF0aW9uU3BlYzwvY29kZT4KLSAgICAgKiBAdGhyb3dzCTxjb2RlPk5vdFN1cHBvcnRlZEV4Y2VwdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbWVmICAgIDxjb2RlPk1lc3NhZ2VFbmRwb2ludEZhY3Rvcnk8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGFzICAgIDxjb2RlPkFjdGl2YXRpb25TcGVjPC9jb2RlPgorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+Tm90U3VwcG9ydGVkRXhjZXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVuZHBvaW50QWN0aXZhdGlvbihNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IG1lZiwgQWN0aXZhdGlvblNwZWMgYXMpIHRocm93cyBOb3RTdXBwb3J0ZWRFeGNlcHRpb24gewogICAgICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJUaGlzIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIEpEQkMgY29ubmVjdG9yIik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogRW1wdHkgbWV0aG9kIGltcGxlbWVudGF0aW9uIGZvciBlbmRwb2ludERlYWN0aXZhdGlvbgogICAgICAqCi0gICAgICogQHBhcmFtCW1lZgk8Y29kZT5NZXNzYWdlRW5kcG9pbnRGYWN0b3J5PC9jb2RlPgotICAgICAqIEBwYXJhbQlhcwk8Y29kZT5BY3RpdmF0aW9uU3BlYzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbWVmICAgIDxjb2RlPk1lc3NhZ2VFbmRwb2ludEZhY3Rvcnk8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGFzICAgIDxjb2RlPkFjdGl2YXRpb25TcGVjPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVuZHBvaW50RGVhY3RpdmF0aW9uKE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgbWVmLCBBY3RpdmF0aW9uU3BlYyBhcykgewotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEVtcHR5IG1ldGhvZCBpbXBsZW1lbnRhdGlvbiBmb3IgZ2V0WEFSZXNvdXJjZXMKICAgICAgKiB3aGljaCBqdXN0IHRocm93cyA8Y29kZT5Ob3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+CiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3BlY3MJPGNvZGU+QWN0aXZhdGlvblNwZWM8L2NvZGU+IGFycmF5Ci0gICAgICogQHRocm93cwk8Y29kZT5Ob3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+CisgICAgICogQHBhcmFtICAgIHNwZWNzICAgIDxjb2RlPkFjdGl2YXRpb25TcGVjPC9jb2RlPiBhcnJheQorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+Tm90U3VwcG9ydGVkRXhjZXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBYQVJlc291cmNlW10gZ2V0WEFSZXNvdXJjZXMoQWN0aXZhdGlvblNwZWNbXSBzcGVjcykgdGhyb3dzIE5vdFN1cHBvcnRlZEV4Y2VwdGlvbiB7CiAgICAgICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIlRoaXMgbWV0aG9kIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgSkRCQyBjb25uZWN0b3IiKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBFbXB0eSBpbXBsZW1lbnRhdGlvbiBvZiBzdGFydCBtZXRob2QKICAgICAgKgotICAgICAqIEBwYXJhbQljdHgJPGNvZGU+Qm9vdHN0cmFwQ29udGV4dDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgY3R4ICAgIDxjb2RlPkJvb3RzdHJhcENvbnRleHQ8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc3RhcnQoQm9vdHN0cmFwQ29udGV4dCBjdHgpIHRocm93cyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzb3VyY2UgQWRhcHRlciBpcyBzdGFydGluZyB3aXRoIGNvbmZpZ3VyYXRpb24gOiIgKyByYVByb3ApOwogICAgICAgICBpZiAocmFQcm9wID09IG51bGwgfHwgIXJhUHJvcC5lcXVhbHMoIlZBTElEIikpIHsKLQkgICAgdGhyb3cgbmV3IFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uKCJSZXNvdXJjZSBhZGFwdGVyIGNhbm5vdCBzdGFydC4gSXQgaXMgY29uZmlndXJlZCBhcyA6ICIgKyByYVByb3ApOwotCX0gCisgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbigiUmVzb3VyY2UgYWRhcHRlciBjYW5ub3Qgc3RhcnQuIEl0IGlzIGNvbmZpZ3VyZWQgYXMgOiAiICsgcmFQcm9wKTsKICAgICB9Ci0gICAgCisgICAgfQorCiAgICAgLyoqCiAgICAgICogRW1wdHkgaW1wbGVtZW50YXRpb24gb2Ygc3RvcCBtZXRob2QKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzdG9wKCkgewotICAgIAorCiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0UkFQcm9wZXJ0eShTdHJpbmcgcykgewpAQCAtMTA0LDUgKzEwNCw1IEBACiAgICAgcHVibGljIFN0cmluZyBnZXRSQVByb3BlcnR5KCkgewogICAgICAgICByZXR1cm4gcmFQcm9wOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvYnVpbGQueG1sCmluZGV4IDVlMTRkNDQuLmZmMGYwMmIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9idWlsZC54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPHByb2plY3QgbmFtZT0iamRiY19jb25uZWN0b3IiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9IiBkZWZhdWx0PSJidWlsZCI+CiAgIDxwcm9wZXJ0eSBuYW1lPSJwa2cuZGlyIiB2YWx1ZT0iY29tL3N1bi9namMvc3BpIi8+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iPgogICAgIDxhbnQgYW50ZmlsZT0iYnVpbGQueG1sIiBkaXI9IiR7Z2pjLmhvbWV9L2JpbiIgdGFyZ2V0PSJjbGVhbiIvPgogICA8L3RhcmdldD4KQEAgLTI5LDU1ICsyOSw1NSBAQAogICA8L3RhcmdldD4KIAogICA8dGFyZ2V0IG5hbWU9InBhY2thZ2UxNCI+Ci0gICAgCQotICAgIAk8bWtkaXIgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiLz4KLSAgICAJCi0JPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvamRiYy5qYXIiIGJhc2VkaXI9IiR7Y2xhc3MuZGlyfSIKKworICAgICAgICA8bWtkaXIgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiLz4KKworICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L2pkYmMuamFyIiBiYXNlZGlyPSIke2NsYXNzLmRpcn0iCiAgICAgICAgIGluY2x1ZGVzPSIke3BrZy5kaXJ9LyoqLyosIGNvbS9zdW4vZ2pjL3V0aWwvKiovKiwgY29tL3N1bi9namMvY29tbW9uLyoqLyoiIGV4Y2x1ZGVzPSJjb20vc3VuL2dqYy9jY2kvKiovKixjb20vc3VuL2dqYy9zcGkvMS40LyoqLyoiLz4KLSAgICAgICAgCisKICAgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19jcC5yYXIiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIgaW5jbHVkZXM9ImpkYmMuamFyIi8+Ci0gICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLWNwLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CQorICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS1jcC54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgogICAgICAgICA8L2NvcHk+Ci0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19jcC5yYXIiIHVwZGF0ZT0ieWVzIj4KLSAgIAkJPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgotICAgCQkJPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+Ci0gICAJCTwvbWV0YWluZj4KLSAgIAk8L2phcj4KLSAgIAkKLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX3hhLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KLSAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEteGEueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4JCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19jcC5yYXIiIHVwZGF0ZT0ieWVzIj4KKyAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgorICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+CisgICAgICAgICAgIDwvbWV0YWluZj4KKyAgICAgICA8L2phcj4KKworICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19feGEucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgorICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS14YS54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgogICAgICAgICA8L2NvcHk+Ci0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX194YS5yYXIiIHVwZGF0ZT0ieWVzIj4KLSAgIAkJPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgotICAgCQkJPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+Ci0gICAJCTwvbWV0YWluZj4KLSAgIAk8L2phcj4KLSAgIAkKLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RtLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KLSAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEtZG0ueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4JCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX194YS5yYXIiIHVwZGF0ZT0ieWVzIj4KKyAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgorICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+CisgICAgICAgICAgIDwvbWV0YWluZj4KKyAgICAgICA8L2phcj4KKworICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZG0ucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgorICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS1kbS54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgogICAgICAgICA8L2NvcHk+Ci0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kbS5yYXIiIHVwZGF0ZT0ieWVzIj4KLSAgIAkJPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgotICAgCQkJPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+Ci0gICAJCTwvbWV0YWluZj4KLSAgIAk8L2phcj4KLSAgIAkKLSAgIAk8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RzLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KLSAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEtZHMueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4JCisgICAgICAgPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kbS5yYXIiIHVwZGF0ZT0ieWVzIj4KKyAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgorICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+CisgICAgICAgICAgIDwvbWV0YWluZj4KKyAgICAgICA8L2phcj4KKworICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZHMucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgorICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS1kcy54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgogICAgICAgICA8L2NvcHk+Ci0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kcy5yYXIiIHVwZGF0ZT0ieWVzIj4KLSAgIAkJPG1ldGFpbmYgZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiPgotICAgCQkJPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+Ci0gICAJCTwvbWV0YWluZj4KLSAgIAk8L2phcj4KLSAgIAkKLSAgIAk8ZGVsZXRlIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9jb20iLz4KLSAgIAk8ZGVsZXRlIGZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9qZGJjLmphciIvPgotICAgCTxkZWxldGUgZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIvPgotICAgCQorICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZHMucmFyIiB1cGRhdGU9InllcyI+CisgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KKyAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgorICAgICAgICAgICA8L21ldGFpbmY+CisgICAgICAgPC9qYXI+CisKKyAgICAgICA8ZGVsZXRlIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9jb20iLz4KKyAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9qZGJjLmphciIvPgorICAgICAgIDxkZWxldGUgZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIvPgorCiAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQxNCIgZGVwZW5kcz0iY29tcGlsZTE0LCBwYWNrYWdlMTQiLz4KICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkMTMiLz4KLQk8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJidWlsZDE0LCBidWlsZDEzIi8+CisgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iYnVpbGQxNCwgYnVpbGQxMyIvPgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvcmEtZHMueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvcmEtZHMueG1sCmluZGV4IDJjMjliZTYuLjA5Y2U2M2QgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L3JhLWRzLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9yYS1kcy54bWwKQEAgLTI4LDcgKzI4LDcgQEAKICAgICAgICAgPG91dGJvdW5kLXJlc291cmNlYWRhcHRlcj4KICAgICAgICAgICAgIDxjb25uZWN0aW9uLWRlZmluaXRpb24+CiAgICAgICAgICAgICAgICAgPG1hbmFnZWRjb25uZWN0aW9uZmFjdG9yeS1jbGFzcz5jb20uc3VuLmpkYmNyYS5zcGkuRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L21hbmFnZWRjb25uZWN0aW9uZmFjdG9yeS1jbGFzcz4KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIDwhLS0gVGhlcmUgY2FuIGJlIGFueSBudW1iZXIgb2YgdGhlc2UgZWxlbWVudHMgaW5jbHVkaW5nIDAgLS0+CiAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlVzZXI8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgpAQCAtNTAsNyArNTAsNyBAQAogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+dGVzdGRiPC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4gICAgCisgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlVSTDwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT5qZGJjOmRlcmJ5Oi8vbG9jYWxob3N0OjE1MjcvdGVzdGRiO2NyZWF0ZT10cnVlPC9jb25maWctcHJvcGVydHktdmFsdWU+CkBAIC02MCw3ICs2MCw3IEBACiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT5PcmFjbGUgdGhpbiBkcml2ZXIgRGF0YXNvdXJjZTwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+Q2xhc3NOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPm9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnREYXRhU291cmNlNDA8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KQEAgLTc3LDcgKzc3LDcgQEAKICAgICAgICAgICAgICAgICA8Y29ubmVjdGlvbi1pbnRlcmZhY2U+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29ubmVjdGlvbi1pbnRlcmZhY2U+CiAKICAgICAgICAgICAgICAgICA8Y29ubmVjdGlvbi1pbXBsLWNsYXNzPmNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uSG9sZGVyPC9jb25uZWN0aW9uLWltcGwtY2xhc3M+Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIDwvY29ubmVjdGlvbi1kZWZpbml0aW9uPgogCiAgICAgICAgICAgICA8dHJhbnNhY3Rpb24tc3VwcG9ydD5Mb2NhbFRyYW5zYWN0aW9uPC90cmFuc2FjdGlvbi1zdXBwb3J0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uTWFuYWdlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uTWFuYWdlci5qYXZhCmluZGV4IGIyMTljZDIuLjEyNDgwOWMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvbk1hbmFnZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25NYW5hZ2VyLmphdmEKQEAgLTI0LDI2ICsyNCwyNiBAQAogLyoqCiAgKiBDb25uZWN0aW9uTWFuYWdlciBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzMxCi0gKiBAYXV0aG9yCUJpbm9kIFAuRworICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8zMQorICogQGF1dGhvciAgICBCaW5vZCBQLkcKICAqLwotcHVibGljIGNsYXNzIENvbm5lY3Rpb25NYW5hZ2VyIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvbk1hbmFnZXJ7IAorcHVibGljIGNsYXNzIENvbm5lY3Rpb25NYW5hZ2VyIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvbk1hbmFnZXJ7CiAKICAgICAvKioKICAgICAgKiBSZXR1cm5zIGEgPGNvZGU+Q29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdCB0byB0aGUgPGNvZGU+Q29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+CiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWNmCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0LgotICAgICAqIEBwYXJhbQlpbmZvCTxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gb2JqZWN0LgotICAgICAqIEByZXR1cm4JQSA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBPYmplY3QuCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbiBJbiBjYXNlIG9mIGFuIGVycm9yIGluIGdldHRpbmcgdGhlIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+LgorICAgICAqIEBwYXJhbSAgICBtY2YgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QuCisgICAgICogQHBhcmFtICAgIGluZm8gICAgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBvYmplY3QuCisgICAgICogQHJldHVybiAgICBBIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IE9iamVjdC4KKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uIEluIGNhc2Ugb2YgYW4gZXJyb3IgaW4gZ2V0dGluZyB0aGUgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4uCiAgICAgICovCiAgICAgcHVibGljIE9iamVjdCBhbGxvY2F0ZUNvbm5lY3Rpb24oTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG1jZiwKLSAgICAJCQkJICAgICBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW5mbykgCi0gICAgCQkJCSAgICAgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKLQlNYW5hZ2VkQ29ubmVjdGlvbiBtYyA9IG1jZi5jcmVhdGVNYW5hZ2VkQ29ubmVjdGlvbihudWxsLCBpbmZvKTsKLQlyZXR1cm4gbWMuZ2V0Q29ubmVjdGlvbihudWxsLCBpbmZvKTsgICAgCQkJCSAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGluZm8pCisgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKKyAgICBNYW5hZ2VkQ29ubmVjdGlvbiBtYyA9IG1jZi5jcmVhdGVNYW5hZ2VkQ29ubmVjdGlvbihudWxsLCBpbmZvKTsKKyAgICByZXR1cm4gbWMuZ2V0Q29ubmVjdGlvbihudWxsLCBpbmZvKTsKICAgICB9Ci0gICAgCisKICAgICAvKgogICAgICAqIFRoaXMgY2xhc3MgY291bGQgZWZmZWN0aXZlbHkgaW1wbGVtZW50IENvbm5lY3Rpb24gcG9vbGluZyBhbHNvLgogICAgICAqIENvdWxkIGJlIGRvbmUgZm9yIEZDUy4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvblJlcXVlc3RJbmZvLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25SZXF1ZXN0SW5mby5qYXZhCmluZGV4IDM5Yzc4NzYuLmM0NzdmYzIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvblJlcXVlc3RJbmZvLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uUmVxdWVzdEluZm8uamF2YQpAQCAtMTksMTAgKzE5LDEwIEBACiAvKioKICAqIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzMxCi0gKiBAYXV0aG9yCUJpbm9kIFAuRworICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8zMQorICogQGF1dGhvciAgICBCaW5vZCBQLkcKICAqLwotcHVibGljIGNsYXNzIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mb3sgCitwdWJsaWMgY2xhc3MgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZvewogCiAgICAgcHJpdmF0ZSBTdHJpbmcgdXNlcjsKICAgICBwcml2YXRlIFN0cmluZyBwYXNzd29yZDsKQEAgLTMwLDggKzMwLDggQEAKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gb2JqZWN0CiAgICAgICoKLSAgICAgKiBAcGFyYW0JdXNlcglVc2VyIE5hbWUuCi0gICAgICogQHBhcmFtCXBhc3N3b3JkCVBhc3N3b3JkCisgICAgICogQHBhcmFtICAgIHVzZXIgICAgVXNlciBOYW1lLgorICAgICAqIEBwYXJhbSAgICBwYXNzd29yZCAgICBQYXNzd29yZAogICAgICAqLwogICAgIHB1YmxpYyBDb25uZWN0aW9uUmVxdWVzdEluZm8oU3RyaW5nIHVzZXIsIFN0cmluZyBwYXNzd29yZCkgewogICAgICAgICB0aGlzLnVzZXIgPSB1c2VyOwpAQCAtNDEsNyArNDEsNyBAQAogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgdXNlciBuYW1lIG9mIHRoZSBDb25uZWN0aW9uUmVxdWVzdEluZm8uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVVzZXIgbmFtZSBvZiBDb25uZWN0aW9uUmVxdWVzdEluZm8uCisgICAgICogQHJldHVybiAgICBVc2VyIG5hbWUgb2YgQ29ubmVjdGlvblJlcXVlc3RJbmZvLgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VXNlcigpIHsKICAgICAgICAgcmV0dXJuIHVzZXI7CkBAIC01MCw3ICs1MCw3IEBACiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBwYXNzd29yZCBvZiB0aGUgQ29ubmVjdGlvblJlcXVlc3RJbmZvLgogICAgICAqCi0gICAgICogQHJldHVybglQYXNzd29yZCBvZiBDb25uZWN0aW9uUmVxdWVzdEluZm8uCisgICAgICogQHJldHVybiAgICBQYXNzd29yZCBvZiBDb25uZWN0aW9uUmVxdWVzdEluZm8uCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRQYXNzd29yZCgpIHsKICAgICAgICAgcmV0dXJuIHBhc3N3b3JkOwpAQCAtNTksNyArNTksNyBAQAogICAgIC8qKgogICAgICAqIFZlcmlmeSB3aGV0aGVyIHR3byBDb25uZWN0aW9uUmVxdWVzdEluZm9zIGFyZSBlcXVhbC4KICAgICAgKgotICAgICAqIEByZXR1cm4JVHJ1ZSwgaWYgdGhleSBhcmUgZXF1YWwgYW5kIGZhbHNlIG90aGVyd2lzZS4KKyAgICAgKiBAcmV0dXJuICAgIFRydWUsIGlmIHRoZXkgYXJlIGVxdWFsIGFuZCBmYWxzZSBvdGhlcndpc2UuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmopIHsKICAgICAgICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gZmFsc2U7CkBAIC03NSwxOCArNzUsMTggQEAKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIGhhc2hjb2RlIG9mIHRoZSBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWhhc2hDb2RlLgorICAgICAqIEByZXR1cm4gICAgaGFzaENvZGUuCiAgICAgICovCiAgICAgcHVibGljIGludCBoYXNoQ29kZSgpIHsKICAgICAgICAgU3RyaW5nIHJlc3VsdCA9ICIiICsgdXNlciArIHBhc3N3b3JkOwogICAgICAgICByZXR1cm4gcmVzdWx0Lmhhc2hDb2RlKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29tcGFyZXMgdHdvIG9iamVjdHMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbzEJRmlyc3Qgb2JqZWN0LgotICAgICAqIEBwYXJhbQlvMglTZWNvbmQgb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBvMSAgICBGaXJzdCBvYmplY3QuCisgICAgICogQHBhcmFtICAgIG8yICAgIFNlY29uZCBvYmplY3QuCiAgICAgICovCiAgICAgcHJpdmF0ZSBib29sZWFuIGlzRXF1YWwoT2JqZWN0IG8xLCBPYmplY3QgbzIpIHsKICAgICAgICAgaWYgKG8xID09IG51bGwpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQppbmRleCA4NTkxNmU1Li45OWE0NmUxIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCkBAIC0zMSw4ICszMSw4IEBACiAvKioKICAqIERhdGEgU291cmNlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW1wbGVtZW50YXRpb24gZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8zMAotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMzAKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIAogQENvbm5lY3Rpb25EZWZpbml0aW9uKApAQCAtNDIsMzEgKzQyLDMxIEBACiAgICAgICAgIGNvbm5lY3Rpb25GYWN0b3J5SW1wbCA9IGNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlLmNsYXNzCiApCiBwdWJsaWMgY2xhc3MgRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgZXh0ZW5kcyBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgewotICAgCisKICAgICBwcml2YXRlIHRyYW5zaWVudCBqYXZheC5zcWwuRGF0YVNvdXJjZSBkYXRhU291cmNlT2JqOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgTG9nZ2VyIF9sb2dnZXI7CiAgICAgc3RhdGljIHsKICAgICAgICAgX2xvZ2dlciA9IExvZ2dlci5nZXRBbm9ueW1vdXNMb2dnZXIoKTsKICAgICB9CiAgICAgcHJpdmF0ZSBib29sZWFuIGRlYnVnID0gZmFsc2U7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgbmV3IHBoeXNpY2FsIGNvbm5lY3Rpb24gdG8gdGhlIHVuZGVybHlpbmcgRUlTIHJlc291cmNlCiAgICAgICogbWFuYWdlci4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0Jc3ViamVjdAk8Y29kZT5TdWJqZWN0PC9jb2RlPiBpbnN0YW5jZSBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgotICAgICAqIEBwYXJhbQljeFJlcXVlc3RJbmZvCTxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gd2hpY2ggbWF5IGJlIGNyZWF0ZWQKLSAgICAgKiAgICAgICAJICAgICAgICAgICAgIAlhcyBhIHJlc3VsdCBvZiB0aGUgaW52b2NhdGlvbiA8Y29kZT5nZXRDb25uZWN0aW9uKHVzZXIsIHBhc3N3b3JkKTwvY29kZT4KLSAgICAgKiAgICAgICAJICAgICAgICAgICAgIAlvbiB0aGUgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0Ci0gICAgICogQHJldHVybgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGNyZWF0ZWQKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGluc3RhbnRpYXRpbmcgdGhlCi0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAk8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QgdXNlZCBmb3IgdGhlCi0gICAgICogICAgICAgCQkJCWNyZWF0aW9uIG9mIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0Ci0gICAgICogQHRocm93cwlTZWN1cml0eUV4Y2VwdGlvbglpZiB0aGVyZSBpbm8gPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCXNhdGlzZnlpbmcgdGhpcyByZXF1ZXN0IAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VBbGxvY2F0aW9uRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlIAotICAgICAqCQkJCQkJcGh5c2ljYWwgY29ubmVjdGlvbgorICAgICAqCisgICAgICogQHBhcmFtICAgIHN1YmplY3QgICAgPGNvZGU+U3ViamVjdDwvY29kZT4gaW5zdGFuY2UgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiBAcGFyYW0gICAgY3hSZXF1ZXN0SW5mbyAgICA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHdoaWNoIG1heSBiZSBjcmVhdGVkCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgYSByZXN1bHQgb2YgdGhlIGludm9jYXRpb24gPGNvZGU+Z2V0Q29ubmVjdGlvbih1c2VyLCBwYXNzd29yZCk8L2NvZGU+CisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gdGhlIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdAorICAgICAqIEByZXR1cm4gICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBjcmVhdGVkCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBpbnN0YW50aWF0aW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0IHVzZWQgZm9yIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGlvbiBvZiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdAorICAgICAqIEB0aHJvd3MgICAgU2VjdXJpdHlFeGNlcHRpb24gICAgaWYgdGhlcmUgaW5vIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0CisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXRpc2Z5aW5nIHRoaXMgcmVxdWVzdAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VBbGxvY2F0aW9uRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICBwaHlzaWNhbCBjb25uZWN0aW9uCiAgICAgICovCiAgICAgcHVibGljIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uIGNyZWF0ZU1hbmFnZWRDb25uZWN0aW9uKGphdmF4LnNlY3VyaXR5LmF1dGguU3ViamVjdCBzdWJqZWN0LAogICAgICAgICBDb25uZWN0aW9uUmVxdWVzdEluZm8gY3hSZXF1ZXN0SW5mbykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKQEAgLTc0LDcgKzc0LDcgQEAKICAgICAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gY3JlYXRlTWFuYWdlZENvbm5lY3Rpb24iKTsKICAgICAgICAgfQogICAgICAgICBQYXNzd29yZENyZWRlbnRpYWwgcGMgPSBTZWN1cml0eVV0aWxzLmdldFBhc3N3b3JkQ3JlZGVudGlhbCh0aGlzLCBzdWJqZWN0LCBjeFJlcXVlc3RJbmZvKTsKLSAgICAgICAgCisKICAgICAgICAgaWYoZGF0YVNvdXJjZU9iaiA9PSBudWxsKSB7CiAgICAgICAgICAgICBpZihkc09iakJ1aWxkZXIgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGRzT2JqQnVpbGRlciA9IG5ldyBEYXRhU291cmNlT2JqZWN0QnVpbGRlcihzcGVjKTsKQEAgLTg0LDM2ICs4NCwzNiBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBkYXRhU291cmNlT2JqID0gKGphdmF4LnNxbC5EYXRhU291cmNlKSBkc09iakJ1aWxkZXIuY29uc3RydWN0RGF0YVNvdXJjZU9iamVjdCgpOwogICAgICAgICAgICAgfSBjYXRjaChDbGFzc0Nhc3RFeGNlcHRpb24gY2NlKSB7Ci0JICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19jY2UiLCBjY2UpOworICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfY2NlIiwgY2NlKTsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgamFrYXJ0YS5yZXNvdXJjZS5SZXNvdXJjZUV4Y2VwdGlvbihjY2UuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGRzQ29ubiA9IG51bGw7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7Ci0JICAgIC8qIEZvciB0aGUgY2FzZSB3aGVyZSB0aGUgdXNlci9wYXNzd2Qgb2YgdGhlIGNvbm5lY3Rpb24gcG9vbCBpcwotCSAgICAgKiBlcXVhbCB0byB0aGUgUGFzc3dvcmRDcmVkZW50aWFsIGZvciB0aGUgY29ubmVjdGlvbiByZXF1ZXN0Ci0JICAgICAqIGdldCBhIGNvbm5lY3Rpb24gZnJvbSB0aGlzIHBvb2wgZGlyZWN0bHkuCi0JICAgICAqIGZvciBhbGwgb3RoZXIgY29uZGl0aW9ucyBnbyBjcmVhdGUgYSBuZXcgY29ubmVjdGlvbgotCSAgICAgKi8KLQkgICAgaWYgKCBpc0VxdWFsKCBwYywgZ2V0VXNlcigpLCBnZXRQYXNzd29yZCgpICkgKSB7Ci0JICAgICAgICBkc0Nvbm4gPSBkYXRhU291cmNlT2JqLmdldENvbm5lY3Rpb24oKTsKLQkgICAgfSBlbHNlIHsKLQkgICAgICAgIGRzQ29ubiA9IGRhdGFTb3VyY2VPYmouZ2V0Q29ubmVjdGlvbihwYy5nZXRVc2VyTmFtZSgpLCAKLQkJICAgIG5ldyBTdHJpbmcocGMuZ2V0UGFzc3dvcmQoKSkpOwotCSAgICB9CisgICAgICAgIC8qIEZvciB0aGUgY2FzZSB3aGVyZSB0aGUgdXNlci9wYXNzd2Qgb2YgdGhlIGNvbm5lY3Rpb24gcG9vbCBpcworICAgICAgICAgKiBlcXVhbCB0byB0aGUgUGFzc3dvcmRDcmVkZW50aWFsIGZvciB0aGUgY29ubmVjdGlvbiByZXF1ZXN0CisgICAgICAgICAqIGdldCBhIGNvbm5lY3Rpb24gZnJvbSB0aGlzIHBvb2wgZGlyZWN0bHkuCisgICAgICAgICAqIGZvciBhbGwgb3RoZXIgY29uZGl0aW9ucyBnbyBjcmVhdGUgYSBuZXcgY29ubmVjdGlvbgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKCBpc0VxdWFsKCBwYywgZ2V0VXNlcigpLCBnZXRQYXNzd29yZCgpICkgKSB7CisgICAgICAgICAgICBkc0Nvbm4gPSBkYXRhU291cmNlT2JqLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRzQ29ubiA9IGRhdGFTb3VyY2VPYmouZ2V0Q29ubmVjdGlvbihwYy5nZXRVc2VyTmFtZSgpLAorICAgICAgICAgICAgbmV3IFN0cmluZyhwYy5nZXRQYXNzd29yZCgpKSk7CisgICAgICAgIH0KICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgewogICAgICAgICAgICAgc3FsZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMuZXhjX2NyZWF0ZV9jb25uIiwgc3FsZSk7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgamFrYXJ0YS5yZXNvdXJjZS5zcGkuUmVzb3VyY2VBbGxvY2F0aW9uRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBjb3VsZCBub3QgYmUgYWxsb2NhdGVkOiAiICsgCisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLmV4Y19jcmVhdGVfY29ubiIsIHNxbGUpOworICAgICAgICAgICAgdGhyb3cgbmV3IGpha2FydGEucmVzb3VyY2Uuc3BpLlJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gY291bGQgbm90IGJlIGFsbG9jYXRlZDogIiArCiAgICAgICAgICAgICAgICAgc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKXsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVjMtVEVTVCA6IHVuYWJsZSB0byBnZXQgY29ubmVjdGlvbiIpOwotICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsgICAKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJWMy1URVNUIDogZ290IGNvbm5lY3Rpb24iKTsKLSAgICAgICAgCisKICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1jID0gbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbihudWxsLCBkc0Nvbm4sIHBjLCB0aGlzKTsKICAgICAgICAgLy9HSkNJTlQKIC8qCkBAIC0xMjMsMTUgKzEyMywxNSBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlYzLVRFU1QgOiByZXR1cm5pbmcgY29ubmVjdGlvbiIpOwogICAgICAgICByZXR1cm4gbWM7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogQ2hlY2sgaWYgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGlzIGVxdWFsIHRvIAorICAgICAqIENoZWNrIGlmIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpcyBlcXVhbCB0bwogICAgICAqIGFub3RoZXIgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPi4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0Jb3RoZXIJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QgZm9yIGNoZWNraW5nIGVxdWFsaXR5IHdpdGgKLSAgICAgKiBAcmV0dXJuCXRydWUJaWYgdGhlIHByb3BlcnR5IHNldHMgb2YgYm90aCB0aGUgCi0gICAgICoJCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdHMgYXJlIHRoZSBzYW1lCi0gICAgICoJCWZhbHNlCW90aGVyd2lzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIG90aGVyICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0IGZvciBjaGVja2luZyBlcXVhbGl0eSB3aXRoCisgICAgICogQHJldHVybiAgICB0cnVlICAgIGlmIHRoZSBwcm9wZXJ0eSBzZXRzIG9mIGJvdGggdGhlCisgICAgICogICAgICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdHMgYXJlIHRoZSBzYW1lCisgICAgICogICAgICAgIGZhbHNlICAgIG90aGVyd2lzZQogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb3RoZXIpIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTE0MiwzOCArMTQyLDM4IEBACiAgICAgICAgICAqIGlmIGFuZCBvbmx5IGlmIHRoZWlyIHByb3BlcnRpZXMgYXJlIHRoZSBzYW1lLgogICAgICAgICAgKi8KICAgICAgICAgaWYob3RoZXIgaW5zdGFuY2VvZiBjb20uc3VuLmpkYmNyYS5zcGkuRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkpIHsKLSAgICAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBvdGhlck1DRiA9IAorICAgICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLkRTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG90aGVyTUNGID0KICAgICAgICAgICAgICAgICAoY29tLnN1bi5qZGJjcmEuc3BpLkRTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KSBvdGhlcjsKICAgICAgICAgICAgIHJldHVybiB0aGlzLnNwZWMuZXF1YWxzKG90aGVyTUNGLnNwZWMpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBzZXJ2ZXIgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlzZXJ2ZXJOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldFNlcnZlck5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHNlcnZlck5hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0U2VydmVyTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRzZXJ2ZXJOYW1lKFN0cmluZyBzZXJ2ZXJOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlNFUlZFUk5BTUUsIHNlcnZlck5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHNlcnZlciBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglzZXJ2ZXJOYW1lCi0gICAgICogQHNlZQk8Y29kZT5zZXRTZXJ2ZXJOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgc2VydmVyTmFtZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0U2VydmVyTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHNlcnZlck5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5TRVJWRVJOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBzZXJ2ZXIgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlzZXJ2ZXJOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldFNlcnZlck5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHNlcnZlck5hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0U2VydmVyTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBAQ29uZmlnUHJvcGVydHkoCiAgICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSAibG9jYWxob3N0IiwKQEAgLTE4Miw0MiArMTgyLDQyIEBACiAgICAgcHVibGljIHZvaWQgc2V0U2VydmVyTmFtZShTdHJpbmcgc2VydmVyTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5TRVJWRVJOQU1FLCBzZXJ2ZXJOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBzZXJ2ZXIgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4Jc2VydmVyTmFtZQotICAgICAqIEBzZWUJPGNvZGU+c2V0U2VydmVyTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHNlcnZlck5hbWUKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldFNlcnZlck5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRTZXJ2ZXJOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuU0VSVkVSTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgcG9ydCBudW1iZXIuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcG9ydE51bWJlcgk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXRQb3J0TnVtYmVyPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBwb3J0TnVtYmVyICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldFBvcnROdW1iZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0cG9ydE51bWJlcihTdHJpbmcgcG9ydE51bWJlcikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5QT1JUTlVNQkVSLCBwb3J0TnVtYmVyKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBwb3J0IG51bWJlci4KICAgICAgKgotICAgICAqIEByZXR1cm4JcG9ydE51bWJlcgotICAgICAqIEBzZWUJPGNvZGU+c2V0UG9ydE51bWJlcjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHBvcnROdW1iZXIKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldFBvcnROdW1iZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRwb3J0TnVtYmVyKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUE9SVE5VTUJFUik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgcG9ydCBudW1iZXIuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcG9ydE51bWJlcgk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXRQb3J0TnVtYmVyPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBwb3J0TnVtYmVyICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldFBvcnROdW1iZXI8L2NvZGU+CiAgICAgICovCiAgICAgQENvbmZpZ1Byb3BlcnR5KAogICAgICAgICAgICAgZGVmYXVsdFZhbHVlID0gIjE1MjciLApAQCAtMjI2LDQyICsyMjYsNDIgQEAKICAgICBwdWJsaWMgdm9pZCBzZXRQb3J0TnVtYmVyKFN0cmluZyBwb3J0TnVtYmVyKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIsIHBvcnROdW1iZXIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHBvcnQgbnVtYmVyLgogICAgICAqCi0gICAgICogQHJldHVybglwb3J0TnVtYmVyCi0gICAgICogQHNlZQk8Y29kZT5zZXRQb3J0TnVtYmVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgcG9ydE51bWJlcgorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0UG9ydE51bWJlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFBvcnROdW1iZXIoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QT1JUTlVNQkVSKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkYXRhYmFzZSBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCWRhdGFiYXNlTmFtZQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREYXRhYmFzZU5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRhdGFiYXNlTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREYXRhYmFzZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0ZGF0YWJhc2VOYW1lKFN0cmluZyBkYXRhYmFzZU5hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQUJBU0VOQU1FLCBkYXRhYmFzZU5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRhdGFiYXNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRhdGFiYXNlTmFtZQotICAgICAqIEBzZWUJPGNvZGU+c2V0RGF0YWJhc2VOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZGF0YWJhc2VOYW1lCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREYXRhYmFzZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRkYXRhYmFzZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBQkFTRU5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRhdGFiYXNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZGF0YWJhc2VOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERhdGFiYXNlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGF0YWJhc2VOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERhdGFiYXNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBAQ29uZmlnUHJvcGVydHkoCiAgICAgICAgICAgICBkZWZhdWx0VmFsdWU9InRlc3RkYiIsCkBAIC0yNzAsNDIgKzI3MCw0MiBAQAogICAgIHB1YmxpYyB2b2lkIHNldERhdGFiYXNlTmFtZShTdHJpbmcgZGF0YWJhc2VOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFCQVNFTkFNRSwgZGF0YWJhc2VOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkYXRhYmFzZSBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglkYXRhYmFzZU5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldERhdGFiYXNlTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRhdGFiYXNlTmFtZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGF0YWJhc2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGF0YWJhc2VOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQUJBU0VOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkYXRhIHNvdXJjZSBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCWRzbiA8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREYXRhU291cmNlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZHNuIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERhdGFTb3VyY2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGRhdGFTb3VyY2VOYW1lKFN0cmluZyBkc24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQVNPVVJDRU5BTUUsIGRzbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGF0YSBzb3VyY2UgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JZHNuCi0gICAgICogQHNlZQk8Y29kZT5zZXREYXRhU291cmNlTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRzbgorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRkYXRhU291cmNlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkYXRhIHNvdXJjZSBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCWRzbiA8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREYXRhU291cmNlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZHNuIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERhdGFTb3VyY2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIEBDb25maWdQcm9wZXJ0eSgKICAgICAgICAgICAgIHR5cGU9amF2YS5sYW5nLlN0cmluZy5jbGFzcwpAQCAtMzEzLDIwMyArMzEzLDIwMyBAQAogICAgIHB1YmxpYyB2b2lkIHNldERhdGFTb3VyY2VOYW1lKFN0cmluZyBkc24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQVNPVVJDRU5BTUUsIGRzbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGF0YSBzb3VyY2UgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JZHNuCi0gICAgICogQHNlZQk8Y29kZT5zZXREYXRhU291cmNlTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRzbgorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXREYXRhU291cmNlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkZXNjcmlwdGlvbi4KICAgICAgKgotICAgICAqIEBwYXJhbQlkZXNjCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERlc2NyaXB0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkZXNjICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERlc2NyaXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGRlc2NyaXB0aW9uKFN0cmluZyBkZXNjKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFU0NSSVBUSU9OLCBkZXNjKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkZXNjcmlwdGlvbi4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGVzYwotICAgICAqIEBzZWUJPGNvZGU+c2V0RGVzY3JpcHRpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBkZXNjCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREZXNjcmlwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGRlc2NyaXB0aW9uKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVTQ1JJUFRJT04pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRlc2NyaXB0aW9uLgogICAgICAqCi0gICAgICogQHBhcmFtCWRlc2MJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGVzY3JpcHRpb248L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRlc2MgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGVzY3JpcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RGVzY3JpcHRpb24oU3RyaW5nIGRlc2MpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVTQ1JJUFRJT04sIGRlc2MpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRlc2NyaXB0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybglkZXNjCi0gICAgICogQHNlZQk8Y29kZT5zZXREZXNjcmlwdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRlc2MKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERlc2NyaXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERVNDUklQVElPTik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgbmV0d29yayBwcm90b2NvbC4KICAgICAgKgotICAgICAqIEBwYXJhbQlud1Byb3RvY29sCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbndQcm90b2NvbCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0bmV0d29ya1Byb3RvY29sKFN0cmluZyBud1Byb3RvY29sKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk5FVFdPUktQUk9UT0NPTCwgbndQcm90b2NvbCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgbmV0d29yayBwcm90b2NvbC4KICAgICAgKgotICAgICAqIEByZXR1cm4JbndQcm90b2NvbAotICAgICAqIEBzZWUJPGNvZGU+c2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgbndQcm90b2NvbAorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0bmV0d29ya1Byb3RvY29sKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTkVUV09SS1BST1RPQ09MKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBuZXR3b3JrIHByb3RvY29sLgogICAgICAqCi0gICAgICogQHBhcmFtCW53UHJvdG9jb2wJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBud1Byb3RvY29sICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXROZXR3b3JrUHJvdG9jb2woU3RyaW5nIG53UHJvdG9jb2wpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTkVUV09SS1BST1RPQ09MLCBud1Byb3RvY29sKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBuZXR3b3JrIHByb3RvY29sLgogICAgICAqCi0gICAgICogQHJldHVybglud1Byb3RvY29sCi0gICAgICogQHNlZQk8Y29kZT5zZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CisgICAgICogQHJldHVybiAgICBud1Byb3RvY29sCisgICAgICogQHNlZSAgICA8Y29kZT5zZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXROZXR3b3JrUHJvdG9jb2woKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ORVRXT1JLUFJPVE9DT0wpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHJvbGUgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlyb2xlTmFtZQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXRSb2xlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcm9sZU5hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0Um9sZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0cm9sZU5hbWUoU3RyaW5nIHJvbGVOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlJPTEVOQU1FLCByb2xlTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcm9sZSBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglyb2xlTmFtZQotICAgICAqIEBzZWUJPGNvZGU+c2V0Um9sZU5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICByb2xlTmFtZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0Um9sZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRyb2xlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlJPTEVOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSByb2xlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jcm9sZU5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0Um9sZU5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHJvbGVOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldFJvbGVOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFJvbGVOYW1lKFN0cmluZyByb2xlTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ST0xFTkFNRSwgcm9sZU5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHJvbGUgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4Jcm9sZU5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldFJvbGVOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgcm9sZU5hbWUKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldFJvbGVOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Um9sZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ST0xFTkFNRSk7CiAgICAgfQogCi0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBsb2dpbiB0aW1lb3V0LgogICAgICAqCi0gICAgICogQHBhcmFtCWxvZ2luVGltZU91dAk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXRMb2dpblRpbWVPdXQ8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGxvZ2luVGltZU91dCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRMb2dpblRpbWVPdXQ8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0bG9naW5UaW1lT3V0KFN0cmluZyBsb2dpblRpbWVPdXQpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HSU5USU1FT1VULCBsb2dpblRpbWVPdXQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGxvZ2luIHRpbWVvdXQuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWxvZ2luVGltZW91dAotICAgICAqIEBzZWUJPGNvZGU+c2V0TG9naW5UaW1lT3V0PC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgbG9naW5UaW1lb3V0CisgICAgICogQHNlZSAgICA8Y29kZT5zZXRMb2dpblRpbWVPdXQ8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRsb2dpblRpbWVPdXQoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dJTlRJTUVPVVQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGxvZ2luIHRpbWVvdXQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbG9naW5UaW1lT3V0CTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldExvZ2luVGltZU91dDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbG9naW5UaW1lT3V0ICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldExvZ2luVGltZU91dDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRMb2dpblRpbWVPdXQoU3RyaW5nIGxvZ2luVGltZU91dCkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dJTlRJTUVPVVQsIGxvZ2luVGltZU91dCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgbG9naW4gdGltZW91dC4KICAgICAgKgotICAgICAqIEByZXR1cm4JbG9naW5UaW1lb3V0Ci0gICAgICogQHNlZQk8Y29kZT5zZXRMb2dpblRpbWVPdXQ8L2NvZGU+CisgICAgICogQHJldHVybiAgICBsb2dpblRpbWVvdXQKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldExvZ2luVGltZU91dDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldExvZ2luVGltZU91dCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR0lOVElNRU9VVCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGVsaW1pdGVyLgogICAgICAqCi0gICAgICogQHBhcmFtCWRlbGltCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERlbGltaXRlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGVsaW0gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGVsaW1pdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGRlbGltaXRlcihTdHJpbmcgZGVsaW0pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVMSU1JVEVSLCBkZWxpbSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGVsaW1pdGVyLgogICAgICAqCi0gICAgICogQHJldHVybglkZWxpbQotICAgICAqIEBzZWUJPGNvZGU+c2V0RGVsaW1pdGVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZGVsaW0KKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERlbGltaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGRlbGltaXRlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGVsaW1pdGVyLgogICAgICAqCi0gICAgICogQHBhcmFtCWRlbGltCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERlbGltaXRlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGVsaW0gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGVsaW1pdGVyPC9jb2RlPgogICAgICAqLwogICAgIEBDb25maWdQcm9wZXJ0eSgKICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9ICIjIiwKQEAgLTUxOCw1MiArNTE4LDUyIEBACiAgICAgcHVibGljIHZvaWQgc2V0RGVsaW1pdGVyKFN0cmluZyBkZWxpbSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ERUxJTUlURVIsIGRlbGltKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkZWxpbWl0ZXIuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRlbGltCi0gICAgICogQHNlZQk8Y29kZT5zZXREZWxpbWl0ZXI8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkZWxpbQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGVsaW1pdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVsaW1pdGVyKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVMSU1JVEVSKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkcml2ZXIgc3BlY2lmaWMgcHJvcGVydGllcy4KICAgICAgKgotICAgICAqIEBwYXJhbQlkcml2ZXJQcm9wcwk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkcml2ZXJQcm9wcyAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGRyaXZlclByb3BlcnRpZXMoU3RyaW5nIGRyaXZlclByb3BzKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRSSVZFUlBST1BFUlRJRVMsIGRyaXZlclByb3BzKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkcml2ZXIgc3BlY2lmaWMgcHJvcGVydGllcy4KICAgICAgKgotICAgICAqIEByZXR1cm4JZHJpdmVyUHJvcHMKLSAgICAgKiBAc2VlCTxjb2RlPnNldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkcml2ZXJQcm9wcworICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGRyaXZlclByb3BlcnRpZXMoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EUklWRVJQUk9QRVJUSUVTKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkcml2ZXIgc3BlY2lmaWMgcHJvcGVydGllcy4KICAgICAgKgotICAgICAqIEBwYXJhbQlkcml2ZXJQcm9wcwk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkcml2ZXJQcm9wcyAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERyaXZlclByb3BlcnRpZXMoU3RyaW5nIGRyaXZlclByb3BzKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRSSVZFUlBST1BFUlRJRVMsIGRyaXZlclByb3BzKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkcml2ZXIgc3BlY2lmaWMgcHJvcGVydGllcy4KICAgICAgKgotICAgICAqIEByZXR1cm4JZHJpdmVyUHJvcHMKLSAgICAgKiBAc2VlCTxjb2RlPnNldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkcml2ZXJQcm9wcworICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldERyaXZlclByb3BlcnRpZXMoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EUklWRVJQUk9QRVJUSUVTKTsKQEAgLTU3MywzNSArNTczLDM1IEBACiAgICAgICogQ2hlY2sgaWYgdGhlIFBhc3N3b3JkQ3JlZGVudGlhbCBwYXNzZWQgZm9yIHRoaXMgZ2V0IGNvbm5lY3Rpb24KICAgICAgKiByZXF1ZXN0IGlzIGVxdWFsIHRvIHRoZSB1c2VyL3Bhc3N3ZCBvZiB0aGlzIGNvbm5lY3Rpb24gcG9vbC4KICAgICAgKi8KLSAgICBwcml2YXRlIGJvb2xlYW4gaXNFcXVhbCggUGFzc3dvcmRDcmVkZW50aWFsIHBjLCBTdHJpbmcgdXNlciwgCisgICAgcHJpdmF0ZSBib29sZWFuIGlzRXF1YWwoIFBhc3N3b3JkQ3JlZGVudGlhbCBwYywgU3RyaW5nIHVzZXIsCiAgICAgICAgIFN0cmluZyBwYXNzd29yZCkgewotICAgICAgICAKLQkvL2lmIGVxdWFsIGdldCBkaXJlY3QgY29ubmVjdGlvbiBlbHNlIAotCS8vZ2V0IGNvbm5lY3Rpb24gd2l0aCB1c2VyIGFuZCBwYXNzd29yZC4KLQkKLQlpZiAodXNlciA9PSBudWxsICYmIHBjID09IG51bGwpIHsKLQkgICAgcmV0dXJuIHRydWU7Ci0JfQotCQotCWlmICggdXNlciA9PSBudWxsICYmIHBjICE9IG51bGwgKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0JfQogCi0JaWYoIHBjID09IG51bGwgKSB7Ci0JICAgIHJldHVybiB0cnVlOwotCX0KLQkKLQlpZiAoIHVzZXIuZXF1YWxzKCBwYy5nZXRVc2VyTmFtZSgpICkgKSB7Ci0JICAgIGlmICggcGFzc3dvcmQgPT0gbnVsbCAmJiBwYy5nZXRQYXNzd29yZCgpID09IG51bGwgKSB7Ci0JICAgICAgICByZXR1cm4gdHJ1ZTsKLQkgICAgfQotCX0KLQkKLQlpZiAoIHVzZXIuZXF1YWxzKHBjLmdldFVzZXJOYW1lKCkpICYmIHBhc3N3b3JkLmVxdWFscyhwYy5nZXRQYXNzd29yZCgpKSApIHsKLQkgICAgcmV0dXJuIHRydWU7Ci0JfSAKLQkKLSAgICAgICAgCi0JcmV0dXJuIGZhbHNlOworICAgIC8vaWYgZXF1YWwgZ2V0IGRpcmVjdCBjb25uZWN0aW9uIGVsc2UKKyAgICAvL2dldCBjb25uZWN0aW9uIHdpdGggdXNlciBhbmQgcGFzc3dvcmQuCisKKyAgICBpZiAodXNlciA9PSBudWxsICYmIHBjID09IG51bGwpIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKCB1c2VyID09IG51bGwgJiYgcGMgIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiggcGMgPT0gbnVsbCApIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKCB1c2VyLmVxdWFscyggcGMuZ2V0VXNlck5hbWUoKSApICkgeworICAgICAgICBpZiAoIHBhc3N3b3JkID09IG51bGwgJiYgcGMuZ2V0UGFzc3dvcmQoKSA9PSBudWxsICkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIHVzZXIuZXF1YWxzKHBjLmdldFVzZXJOYW1lKCkpICYmIHBhc3N3b3JkLmVxdWFscyhwYy5nZXRQYXNzd29yZCgpKSApIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisKKyAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EYXRhU291cmNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RhdGFTb3VyY2UuamF2YQppbmRleCBkOTAwODVkLi41MWYxNzczIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RhdGFTb3VyY2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RhdGFTb3VyY2UuamF2YQpAQCAtMjgsMjIgKzI4LDIyIEBACiBpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOwogaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOwogLyoqCi0gKiBIb2xkcyB0aGUgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LCB3aGljaCBpcyB0byBiZSAKKyAqIEhvbGRzIHRoZSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QsIHdoaWNoIGlzIHRvIGJlCiAgKiBwYXNzZWQgdG8gdGhlIGFwcGxpY2F0aW9uIHByb2dyYW0uCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8zMQotICogQGF1dGhvcglCaW5vZCBQLkcKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMzEKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCiAgKi8KIHB1YmxpYyBjbGFzcyBEYXRhU291cmNlIGltcGxlbWVudHMgamF2YXguc3FsLkRhdGFTb3VyY2UsIGphdmEuaW8uU2VyaWFsaXphYmxlLAotCQljb20uc3VuLmFwcHNlcnYuamRiY3JhLkRhdGFTb3VyY2UsIGpha2FydGEucmVzb3VyY2UuUmVmZXJlbmNlYWJsZXsgCi0JCQkJICAgCisgICAgICAgIGNvbS5zdW4uYXBwc2Vydi5qZGJjcmEuRGF0YVNvdXJjZSwgamFrYXJ0YS5yZXNvdXJjZS5SZWZlcmVuY2VhYmxleworCiAgICAgcHJpdmF0ZSBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmOwotICAgIHByaXZhdGUgQ29ubmVjdGlvbk1hbmFnZXIgY207CQkJCSAgIAkJCQkgICAKKyAgICBwcml2YXRlIENvbm5lY3Rpb25NYW5hZ2VyIGNtOwogICAgIHByaXZhdGUgaW50IGxvZ2luVGltZW91dDsKICAgICBwcml2YXRlIFByaW50V3JpdGVyIGxvZ1dyaXRlcjsKLSAgICBwcml2YXRlIFN0cmluZyBkZXNjcmlwdGlvbjsJCQkJICAgCisgICAgcHJpdmF0ZSBTdHJpbmcgZGVzY3JpcHRpb247CiAgICAgcHJpdmF0ZSBSZWZlcmVuY2UgcmVmZXJlbmNlOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgTG9nZ2VyIF9sb2dnZXI7CiAgICAgc3RhdGljIHsKICAgICAgICAgX2xvZ2dlciA9IExvZ2dlci5nZXRBbm9ueW1vdXNMb2dnZXIoKTsKQEAgLTUxLDU4ICs1MSw1OCBAQAogICAgIHByaXZhdGUgYm9vbGVhbiBkZWJ1ZyA9IGZhbHNlOwogCiAgICAgLyoqCi0gICAgICogQ29uc3RydWN0cyA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QuIFRoaXMgaXMgY3JlYXRlZCBieSB0aGUgCisgICAgICogQ29uc3RydWN0cyA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QuIFRoaXMgaXMgY3JlYXRlZCBieSB0aGUKICAgICAgKiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdC4KICAgICAgKgotICAgICAqIEBwYXJhbQltY2YJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QgCi0gICAgICoJCQljcmVhdGluZyB0aGlzIG9iamVjdC4KLSAgICAgKiBAcGFyYW0JY20JPGNvZGU+Q29ubmVjdGlvbk1hbmFnZXI8L2NvZGU+IG9iamVjdCBlaXRoZXIgYXNzb2NpYXRlZAotICAgICAqCQkJd2l0aCBBcHBsaWNhdGlvbiBzZXJ2ZXIgb3IgUmVzb3VyY2UgQWRhcHRlci4KKyAgICAgKiBAcGFyYW0gICAgbWNmICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0CisgICAgICogICAgICAgICAgICBjcmVhdGluZyB0aGlzIG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgY20gICAgPGNvZGU+Q29ubmVjdGlvbk1hbmFnZXI8L2NvZGU+IG9iamVjdCBlaXRoZXIgYXNzb2NpYXRlZAorICAgICAqICAgICAgICAgICAgd2l0aCBBcHBsaWNhdGlvbiBzZXJ2ZXIgb3IgUmVzb3VyY2UgQWRhcHRlci4KICAgICAgKi8KICAgICBwdWJsaWMgRGF0YVNvdXJjZSAoTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG1jZiwgQ29ubmVjdGlvbk1hbmFnZXIgY20pIHsKLSAgICAJdGhpcy5tY2YgPSBtY2Y7Ci0gICAgCWlmIChjbSA9PSBudWxsKSB7Ci0gICAgCSAgICB0aGlzLmNtID0gKENvbm5lY3Rpb25NYW5hZ2VyKSBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25NYW5hZ2VyKCk7Ci0gICAgCX0gZWxzZSB7Ci0gICAgCSAgICB0aGlzLmNtID0gY207Ci0gICAgCX0gICAgCQotICAgIH0gICAKLSAgICAKKyAgICAgICAgdGhpcy5tY2YgPSBtY2Y7CisgICAgICAgIGlmIChjbSA9PSBudWxsKSB7CisgICAgICAgICAgICB0aGlzLmNtID0gKENvbm5lY3Rpb25NYW5hZ2VyKSBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25NYW5hZ2VyKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aGlzLmNtID0gY207CisgICAgICAgIH0KKyAgICB9CisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgotICAgICAqIAotICAgICAqIEByZXR1cm4JPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhbiBlcnJvci4gICAgICAKKyAgICAgKgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhbiBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgQ29ubmVjdGlvbiBnZXRDb25uZWN0aW9uKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0gICAgCXRyeSB7Ci0gICAgCSAgICByZXR1cm4gKENvbm5lY3Rpb24pIGNtLmFsbG9jYXRlQ29ubmVjdGlvbihtY2YsbnVsbCk7ICAgIAkgICAgCi0gICAgCX0gY2F0Y2ggKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZXR1cm4gKENvbm5lY3Rpb24pIGNtLmFsbG9jYXRlQ29ubmVjdGlvbihtY2YsbnVsbCk7CisgICAgICAgIH0gY2F0Y2ggKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7CiAvLyBUaGlzIGlzIHRlbXBvcmFyeS4gVGhpcyBuZWVkcyB0byBiZSBjaGFuZ2VkIHRvIFNFVkVSRSBhZnRlciBUUAotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5leGNfZ2V0X2Nvbm4iLCByZS5nZXRNZXNzYWdlKCkpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5leGNfZ2V0X2Nvbm4iLCByZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgcmUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgCSAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uIChyZS5nZXRNZXNzYWdlKCkpOwotICAgIAl9CisgICAgICAgICAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uIChyZS5nZXRNZXNzYWdlKCkpOworICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JdXNlcglVc2VyIG5hbWUgZm9yIHRoZSBDb25uZWN0aW9uLgotICAgICAqIEBwYXJhbQlwd2QJUGFzc3dvcmQgZm9yIHRoZSBDb25uZWN0aW9uLgotICAgICAqIEByZXR1cm4JPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhbiBlcnJvci4gICAgICAKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICB1c2VyICAgIFVzZXIgbmFtZSBmb3IgdGhlIENvbm5lY3Rpb24uCisgICAgICogQHBhcmFtICAgIHB3ZCAgICBQYXNzd29yZCBmb3IgdGhlIENvbm5lY3Rpb24uCisgICAgICogQHJldHVybiAgICA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGFuIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBDb25uZWN0aW9uIGdldENvbm5lY3Rpb24oU3RyaW5nIHVzZXIsIFN0cmluZyBwd2QpIHRocm93cyBTUUxFeGNlcHRpb24gewotICAgIAl0cnkgewotICAgIAkgICAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGluZm8gPSBuZXcgQ29ubmVjdGlvblJlcXVlc3RJbmZvICh1c2VyLCBwd2QpOwotICAgIAkgICAgcmV0dXJuIChDb25uZWN0aW9uKSBjbS5hbGxvY2F0ZUNvbm5lY3Rpb24obWNmLGluZm8pOwotICAgIAl9IGNhdGNoIChSZXNvdXJjZUV4Y2VwdGlvbiByZSkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGluZm8gPSBuZXcgQ29ubmVjdGlvblJlcXVlc3RJbmZvICh1c2VyLCBwd2QpOworICAgICAgICAgICAgcmV0dXJuIChDb25uZWN0aW9uKSBjbS5hbGxvY2F0ZUNvbm5lY3Rpb24obWNmLGluZm8pOworICAgICAgICB9IGNhdGNoIChSZXNvdXJjZUV4Y2VwdGlvbiByZSkgewogLy8gVGhpcyBpcyB0ZW1wb3JhcnkuIFRoaXMgbmVlZHMgdG8gYmUgY2hhbmdlZCB0byBTRVZFUkUgYWZ0ZXIgVFAKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMuZXhjX2dldF9jb25uIiwgcmUuZ2V0TWVzc2FnZSgpKTsKLSAgICAJICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKHJlLmdldE1lc3NhZ2UoKSk7Ci0gICAgCX0KLSAgICB9ICAgIAorICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5leGNfZ2V0X2Nvbm4iLCByZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAocmUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgfQorICAgIH0KIAogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIFNRTENvbm5lY3Rpb24gZnJvbSB0aGUgQ29ubmVjdGlvbiB3cmFwcGVyCkBAIC0xMTUsOTEgKzExNSw5MSBAQAogICAgICAqLwogICAgIHB1YmxpYyBDb25uZWN0aW9uIGdldENvbm5lY3Rpb24oQ29ubmVjdGlvbiBjb24pIHRocm93cyBTUUxFeGNlcHRpb24gewogCi0gICAgICAgIENvbm5lY3Rpb24gZHJpdmVyQ29uID0gY29uOyAKKyAgICAgICAgQ29ubmVjdGlvbiBkcml2ZXJDb24gPSBjb247CiAgICAgICAgIGlmIChjb24gaW5zdGFuY2VvZiBjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbkhvbGRlcikgewotICAgICAgICAgICBkcml2ZXJDb24gPSAoKGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uSG9sZGVyKSBjb24pLmdldENvbm5lY3Rpb24oKTsgCi0gICAgICAgIH0gCisgICAgICAgICAgIGRyaXZlckNvbiA9ICgoY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25Ib2xkZXIpIGNvbikuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIGRyaXZlckNvbjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXQgdGhlIGxvZ2luIHRpbWVvdXQKICAgICAgKgogICAgICAqIEByZXR1cm4gbG9naW4gdGltZW91dC4KLSAgICAgKiBAdGhyb3dzCVNRTEV4Y2VwdGlvbglJZiBhIGRhdGFiYXNlIGVycm9yIG9jY3Vycy4KKyAgICAgKiBAdGhyb3dzICAgIFNRTEV4Y2VwdGlvbiAgICBJZiBhIGRhdGFiYXNlIGVycm9yIG9jY3Vycy4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldExvZ2luVGltZW91dCgpIHRocm93cyBTUUxFeGNlcHRpb257Ci0gICAgCXJldHVybglsb2dpblRpbWVvdXQ7CisgICAgICAgIHJldHVybiAgICBsb2dpblRpbWVvdXQ7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0IHRoZSBsb2dpbiB0aW1lb3V0CiAgICAgICoKLSAgICAgKiBAcGFyYW0JbG9naW5UaW1lb3V0CUxvZ2luIHRpbWVvdXQuCi0gICAgICogQHRocm93cwlTUUxFeGNlcHRpb24JSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCisgICAgICogQHBhcmFtICAgIGxvZ2luVGltZW91dCAgICBMb2dpbiB0aW1lb3V0LgorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIElmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldExvZ2luVGltZW91dChpbnQgbG9naW5UaW1lb3V0KSB0aHJvd3MgU1FMRXhjZXB0aW9uewotICAgIAl0aGlzLmxvZ2luVGltZW91dCA9IGxvZ2luVGltZW91dDsKKyAgICAgICAgdGhpcy5sb2dpblRpbWVvdXQgPSBsb2dpblRpbWVvdXQ7CiAgICAgfQotICAgIAotICAgIC8qKiAKKworICAgIC8qKgogICAgICAqIEdldCB0aGUgbG9nd3JpdGVyIG9iamVjdC4KICAgICAgKgogICAgICAqIEByZXR1cm4gPGNvZGU+IFByaW50V3JpdGVyIDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MJU1FMRXhjZXB0aW9uCUlmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIElmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgogICAgICAqLwogICAgIHB1YmxpYyBQcmludFdyaXRlciBnZXRMb2dXcml0ZXIoKSB0aHJvd3MgU1FMRXhjZXB0aW9uewotICAgIAlyZXR1cm4JbG9nV3JpdGVyOworICAgICAgICByZXR1cm4gICAgbG9nV3JpdGVyOwogICAgIH0KLSAgICAgICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGxvZ3dyaXRlciBvbiB0aGlzIG9iamVjdC4KICAgICAgKgogICAgICAqIEBwYXJhbSA8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MJU1FMRXhjZXB0aW9uCUlmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIElmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldExvZ1dyaXRlcihQcmludFdyaXRlciBsb2dXcml0ZXIpIHRocm93cyBTUUxFeGNlcHRpb257Ci0gICAgCXRoaXMubG9nV3JpdGVyID0gbG9nV3JpdGVyOwotICAgIH0gICAgICAgIAotICAgICAgICAKKyAgICAgICAgdGhpcy5sb2dXcml0ZXIgPSBsb2dXcml0ZXI7CisgICAgfQorCiAgICAgcHVibGljIExvZ2dlciBnZXRQYXJlbnRMb2dnZXIoKSB0aHJvd3MgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbnsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgZmVhdHVyZS4iKTsKICAgICB9CiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBkZXNjcmlwdGlvbi4KICAgICAgKgotICAgICAqIEByZXR1cm4JRGVzY3JpcHRpb24gYWJvdXQgdGhlIERhdGFTb3VyY2UuCisgICAgICogQHJldHVybiAgICBEZXNjcmlwdGlvbiBhYm91dCB0aGUgRGF0YVNvdXJjZS4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgewotICAgIAlyZXR1cm4gZGVzY3JpcHRpb247CisgICAgICAgIHJldHVybiBkZXNjcmlwdGlvbjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGRlc2NyaXB0aW9uLgogICAgICAqCiAgICAgICogQHBhcmFtIGRlc2NyaXB0aW9uIERlc2NyaXB0aW9uIGFib3V0IHRoZSBEYXRhU291cmNlLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERlc2NyaXB0aW9uKFN0cmluZyBkZXNjcmlwdGlvbikgewotICAgIAl0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247Ci0gICAgfSAgICAKLSAgICAKKyAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOworICAgIH0KKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgcmVmZXJlbmNlLgogICAgICAqCiAgICAgICogQHJldHVybiA8Y29kZT5SZWZlcmVuY2U8L2NvZGU+b2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyBSZWZlcmVuY2UgZ2V0UmVmZXJlbmNlKCkgewotICAgIAlyZXR1cm4gcmVmZXJlbmNlOworICAgICAgICByZXR1cm4gcmVmZXJlbmNlOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgcmVmZXJlbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCXJlZmVyZW5jZSA8Y29kZT5SZWZlcmVuY2U8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgcmVmZXJlbmNlIDxjb2RlPlJlZmVyZW5jZTwvY29kZT4gb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFJlZmVyZW5jZShSZWZlcmVuY2UgcmVmZXJlbmNlKSB7Ci0gICAgCXRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlOworICAgICAgICB0aGlzLnJlZmVyZW5jZSA9IHJlZmVyZW5jZTsKICAgICB9CiAKICAgICBwdWJsaWMgPFQ+IFQgdW53cmFwKENsYXNzPFQ+IGlmYWNlKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW4uamF2YQppbmRleCA1NzRlZDY2Li5iZWMwZDZiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbi5qYXZhCkBAIC0xOCwxMyArMTgsMTMgQEAKIAogcHVibGljIGludGVyZmFjZSBKZGJjU2V0dXBBZG1pbiB7CiAKLSAgICBwdWJsaWMgdm9pZCBzZXRUYWJsZU5hbWUoU3RyaW5nIGRiKTsgCisgICAgcHVibGljIHZvaWQgc2V0VGFibGVOYW1lKFN0cmluZyBkYik7CiAKICAgICBwdWJsaWMgU3RyaW5nIGdldFRhYmxlTmFtZSgpOwogCi0gICAgcHVibGljIHZvaWQgc2V0Sm5kaU5hbWUoU3RyaW5nIG5hbWUpOyAKKyAgICBwdWJsaWMgdm9pZCBzZXRKbmRpTmFtZShTdHJpbmcgbmFtZSk7CiAKLSAgICBwdWJsaWMgU3RyaW5nIGdldEpuZGlOYW1lKCk7IAorICAgIHB1YmxpYyBTdHJpbmcgZ2V0Sm5kaU5hbWUoKTsKIAogICAgIHB1YmxpYyB2b2lkIHNldFNjaGVtYU5hbWUoU3RyaW5nIG5hbWUpOwogCkBAIC0zNCw2ICszNCw2IEBACiAKICAgICBwdWJsaWMgSW50ZWdlciBnZXROb09mUm93cygpOwogCi0gICAgcHVibGljIGJvb2xlYW4gY2hlY2tTZXR1cCgpOyAKKyAgICBwdWJsaWMgYm9vbGVhbiBjaGVja1NldHVwKCk7CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW5JbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluSW1wbC5qYXZhCmluZGV4IGY4OWJlNTcuLmZjM2E5NTcgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW5JbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbkltcGwuamF2YQpAQCAtODQsMTEgKzg0LDExIEBACiAKIHByaXZhdGUgdm9pZCBwcmludEhpZXJhcmNoeShDbGFzc0xvYWRlciBjbCwgaW50IGNudCl7CiB3aGlsZShjbCAhPSBudWxsKSB7Ci0JZm9yKGludCBpID0wOyBpIDwgY250OyBpKyspIAotCQlTeXN0ZW0ub3V0LnByaW50KCIgIiApOwotCVN5c3RlbS5vdXQucHJpbnRsbigiUEFSRU5UIDoiICsgY2wpOwotCWNsID0gY2wuZ2V0UGFyZW50KCk7Ci0JY250ICs9IDM7CisgICAgZm9yKGludCBpID0wOyBpIDwgY250OyBpKyspCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIiAiICk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJQQVJFTlQgOiIgKyBjbCk7CisgICAgY2wgPSBjbC5nZXRQYXJlbnQoKTsKKyAgICBjbnQgKz0gMzsKIH0KIH0KIApAQCAtOTcsMTAgKzk3LDEwIEBACiAgICAgICAgIGZvcihpbnQgaSA9MDsgaSA8IGNudDsgaSsrKQogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIiAiICk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUEFSRU5UIG9mIENsYXNzTG9hZGVyIDEgOiIgKyBjbDEpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiUEFSRU5UIG9mIENsYXNzTG9hZGVyIDIgOiIgKyBjbDIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiRVFVQUxTIDogIiArIChjbDEgPT0gY2wyKSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJQQVJFTlQgb2YgQ2xhc3NMb2FkZXIgMiA6IiArIGNsMik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJFUVVBTFMgOiAiICsgKGNsMSA9PSBjbDIpKTsKICAgICAgICAgY2wxID0gY2wxLmdldFBhcmVudCgpOwotCWNsMiA9IGNsMi5nZXRQYXJlbnQoKTsKKyAgICBjbDIgPSBjbDIuZ2V0UGFyZW50KCk7CiAgICAgICAgIGNudCArPSAzOwogfQogfQpAQCAtMTA5LDkzICsxMDksOTMgQEAKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja1NldHVwKCl7CiAKICAgICAgICAgaWYgKGpuZGlOYW1lPT0gbnVsbCB8fCBqbmRpTmFtZS50cmltKCkuZXF1YWxzKCIiKSkgewotCSAgIHJldHVybiBmYWxzZTsKLQl9CisgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAogICAgICAgICBpZiAodGFibGVOYW1lPT0gbnVsbCB8fCB0YWJsZU5hbWUudHJpbSgpLmVxdWFscygiIikpIHsKLQkgICByZXR1cm4gZmFsc2U7Ci0JfQorICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAgICAgICAgQ29ubmVjdGlvbiBjb24gPSBudWxsOwotCVN0YXRlbWVudCBzID0gbnVsbDsKLQlSZXN1bHRTZXQgcnMgPSBudWxsOwotCWJvb2xlYW4gYiA9IGZhbHNlOworICAgIFN0YXRlbWVudCBzID0gbnVsbDsKKyAgICBSZXN1bHRTZXQgcnMgPSBudWxsOworICAgIGJvb2xlYW4gYiA9IGZhbHNlOwogICAgICAgICB0cnkgewotCSAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCS8vZGVidWcKLQlDbGFzcyBjbHogPSBEYXRhU291cmNlLmNsYXNzOworICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgIC8vZGVidWcKKyAgICBDbGFzcyBjbHogPSBEYXRhU291cmNlLmNsYXNzOwogLyoKLQlpZihjbHouZ2V0Q2xhc3NMb2FkZXIoKSAhPSBudWxsKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiRGF0YVNvdXJjZSdzIGNsYXN4cyA6ICIgKyAgY2x6LmdldE5hbWUoKSArICAiIGNsYXNzbG9hZGVyICIgKyBjbHouZ2V0Q2xhc3NMb2FkZXIoKSk7Ci0JCXByaW50SGllcmFyY2h5KGNsei5nZXRDbGFzc0xvYWRlcigpLmdldFBhcmVudCgpLCA4KTsKLQl9Ci0JQ2xhc3MgY2xzID0gaWMubG9va3VwKGpuZGlOYW1lKS5nZXRDbGFzcygpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiTG9va2VkIHVwIGNsYXNzJ3MgOiAiICsgY2xzLmdldFBhY2thZ2UoKSArICI6IiArIGNscy5nZXROYW1lKCkgICsgIiBjbGFzc2xvYWRlciAiICArIGNscy5nZXRDbGFzc0xvYWRlcigpKTsKLQlwcmludEhpZXJhcmNoeShjbHMuZ2V0Q2xhc3NMb2FkZXIoKS5nZXRQYXJlbnQoKSwgOCk7CisgICAgaWYoY2x6LmdldENsYXNzTG9hZGVyKCkgIT0gbnVsbCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRhdGFTb3VyY2UncyBjbGFzeHMgOiAiICsgIGNsei5nZXROYW1lKCkgKyAgIiBjbGFzc2xvYWRlciAiICsgY2x6LmdldENsYXNzTG9hZGVyKCkpOworICAgICAgICBwcmludEhpZXJhcmNoeShjbHouZ2V0Q2xhc3NMb2FkZXIoKS5nZXRQYXJlbnQoKSwgOCk7CisgICAgfQorICAgIENsYXNzIGNscyA9IGljLmxvb2t1cChqbmRpTmFtZSkuZ2V0Q2xhc3MoKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tlZCB1cCBjbGFzcydzIDogIiArIGNscy5nZXRQYWNrYWdlKCkgKyAiOiIgKyBjbHMuZ2V0TmFtZSgpICArICIgY2xhc3Nsb2FkZXIgIiAgKyBjbHMuZ2V0Q2xhc3NMb2FkZXIoKSk7CisgICAgcHJpbnRIaWVyYXJjaHkoY2xzLmdldENsYXNzTG9hZGVyKCkuZ2V0UGFyZW50KCksIDgpOwogCi0JU3lzdGVtLm91dC5wcmludGxuKCJDbGFzc2xvYWRlcnMgZXF1YWwgPyAiICsgIChjbHouZ2V0Q2xhc3NMb2FkZXIoKSA9PSBjbHMuZ2V0Q2xhc3NMb2FkZXIoKSkpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiJiomKiYqJiogQ29tcGFyaW5nIEhpZXJhY2h5IERhdGFTb3VyY2UgdnMgbG9va2VkdXAiKTsKLQlpZihjbHouZ2V0Q2xhc3NMb2FkZXIoKSAhPSBudWxsKSB7Ci0JCWNvbXBhcmVIaWVyYXJjaHkoY2x6LmdldENsYXNzTG9hZGVyKCksIGNscy5nZXRDbGFzc0xvYWRlcigpLCA4KTsKLQl9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJDbGFzc2xvYWRlcnMgZXF1YWwgPyAiICsgIChjbHouZ2V0Q2xhc3NMb2FkZXIoKSA9PSBjbHMuZ2V0Q2xhc3NMb2FkZXIoKSkpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiJiomKiYqJiogQ29tcGFyaW5nIEhpZXJhY2h5IERhdGFTb3VyY2UgdnMgbG9va2VkdXAiKTsKKyAgICBpZihjbHouZ2V0Q2xhc3NMb2FkZXIoKSAhPSBudWxsKSB7CisgICAgICAgIGNvbXBhcmVIaWVyYXJjaHkoY2x6LmdldENsYXNzTG9hZGVyKCksIGNscy5nZXRDbGFzc0xvYWRlcigpLCA4KTsKKyAgICB9CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkJlZm9yZSBsb29rdXAiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJlZm9yZSBsb29rdXAiKTsKICovCi0JT2JqZWN0IG8gPSBpYy5sb29rdXAoam5kaU5hbWUpOwotLy8JU3lzdGVtLm91dC5wcmludGxuKCJhZnRlciBsb29rdXAgbG9va3VwIik7CisgICAgT2JqZWN0IG8gPSBpYy5sb29rdXAoam5kaU5hbWUpOworLy8gICAgU3lzdGVtLm91dC5wcmludGxuKCJhZnRlciBsb29rdXAgbG9va3VwIik7CiAKLQkgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKW8gOworICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpbyA7CiAvKgotCVN5c3RlbS5vdXQucHJpbnRsbigiYWZ0ZXIgY2FzdCIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLSBUcnlpbmcgb3VyIFN0dWZmICEhISIpOwotCXRyeSB7Ci0JCUNsYXNzIG8xID0gKENsYXNzLmZvck5hbWUoImNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlIikpOwotCQlDbGFzc0xvYWRlciBjbDEgPSBvMS5nZXRDbGFzc0xvYWRlcigpOwotCQlDbGFzc0xvYWRlciBjbDIgPSBEYXRhU291cmNlLmNsYXNzLmdldENsYXNzTG9hZGVyKCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQ2wxID09IENsMiIgKyAoY2wxID09IGNsMikpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNsYXNzZXMgZXF1YWwiICsgKERhdGFTb3VyY2UuY2xhc3MgPT0gbzEpKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYWZ0ZXIgY2FzdCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLSBUcnlpbmcgb3VyIFN0dWZmICEhISIpOworICAgIHRyeSB7CisgICAgICAgIENsYXNzIG8xID0gKENsYXNzLmZvck5hbWUoImNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlIikpOworICAgICAgICBDbGFzc0xvYWRlciBjbDEgPSBvMS5nZXRDbGFzc0xvYWRlcigpOworICAgICAgICBDbGFzc0xvYWRlciBjbDIgPSBEYXRhU291cmNlLmNsYXNzLmdldENsYXNzTG9hZGVyKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2wxID09IENsMiIgKyAoY2wxID09IGNsMikpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNsYXNzZXMgZXF1YWwiICsgKERhdGFTb3VyY2UuY2xhc3MgPT0gbzEpKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQogKi8KICAgICAgICAgICAgIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQkgICAgU3RyaW5nIGZ1bGxUYWJsZU5hbWUgPSB0YWJsZU5hbWU7Ci0JICAgIGlmIChzY2hlbWFOYW1lICE9IG51bGwgJiYgKCEoc2NoZW1hTmFtZS50cmltKCkuZXF1YWxzKCIiKSkpKSB7Ci0JICAgICAgICBmdWxsVGFibGVOYW1lID0gc2NoZW1hTmFtZS50cmltKCkgKyAiLiIgKyBmdWxsVGFibGVOYW1lOwotCSAgICB9Ci0JICAgIFN0cmluZyBxcnkgPSAic2VsZWN0ICogZnJvbSAiICsgZnVsbFRhYmxlTmFtZTsgCisgICAgICAgIFN0cmluZyBmdWxsVGFibGVOYW1lID0gdGFibGVOYW1lOworICAgICAgICBpZiAoc2NoZW1hTmFtZSAhPSBudWxsICYmICghKHNjaGVtYU5hbWUudHJpbSgpLmVxdWFscygiIikpKSkgeworICAgICAgICAgICAgZnVsbFRhYmxlTmFtZSA9IHNjaGVtYU5hbWUudHJpbSgpICsgIi4iICsgZnVsbFRhYmxlTmFtZTsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmcgcXJ5ID0gInNlbGVjdCAqIGZyb20gIiArIGZ1bGxUYWJsZU5hbWU7CiAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGVjdXRpbmcgcXVlcnkgOiIgKyBxcnkpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4ZWN1dGluZyBxdWVyeSA6IiArIHFyeSk7CiAKLQkgICAgcyA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKLQkgICAgcnMgPSBzLmV4ZWN1dGVRdWVyeShxcnkpOyAKKyAgICAgICAgcyA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgcnMgPSBzLmV4ZWN1dGVRdWVyeShxcnkpOwogCiAgICAgICAgICAgICBpbnQgaSA9IDA7Ci0JICAgIGlmIChycy5uZXh0KCkpIHsKLQkgICAgICAgIGkrKzsKLQkgICAgfQorICAgICAgICBpZiAocnMubmV4dCgpKSB7CisgICAgICAgICAgICBpKys7CisgICAgICAgIH0KIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJObyBvZiByb3dzIGZvdW5kOiIgKyBpKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTm8gb2Ygcm93cyBleHBlY3RlZDoiICsgbm9PZlJvd3MpOwogCi0JICAgIGlmIChpID09IG5vT2ZSb3dzLmludFZhbHVlKCkpIHsKLQkgICAgICAgYiA9IHRydWU7Ci0JICAgIH0gZWxzZSB7Ci0JICAgICAgIGIgPSBmYWxzZTsKLQkgICAgfQotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgYiA9IGZhbHNlOwotCX0gZmluYWxseSB7Ci0JICAgIHRyeSB7Ci0JICAgICAgICBpZiAocnMgIT0gbnVsbCkgcnMuY2xvc2UoKTsKLQkgICAgICAgIGlmIChzICE9IG51bGwpIHMuY2xvc2UoKTsKLQkgICAgICAgIGlmIChjb24gIT0gbnVsbCkgY29uLmNsb3NlKCk7CisgICAgICAgIGlmIChpID09IG5vT2ZSb3dzLmludFZhbHVlKCkpIHsKKyAgICAgICAgICAgYiA9IHRydWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgIGIgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgYiA9IGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpZiAocnMgIT0gbnVsbCkgcnMuY2xvc2UoKTsKKyAgICAgICAgICAgIGlmIChzICE9IG51bGwpIHMuY2xvc2UoKTsKKyAgICAgICAgICAgIGlmIChjb24gIT0gbnVsbCkgY29uLmNsb3NlKCk7CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICB9Ci0JfQotCVN5c3RlbS5vdXQucHJpbnRsbigiUmV0dXJuaW5nIHNldHVwIDoiICtiKTsKLQlyZXR1cm4gYjsKKyAgICAgICAgfQorICAgIH0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJldHVybmluZyBzZXR1cCA6IiArYik7CisgICAgcmV0dXJuIGI7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0xvY2FsVHJhbnNhY3Rpb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTG9jYWxUcmFuc2FjdGlvbi5qYXZhCmluZGV4IDhlYmUwNTcuLmM1NGEyMTYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTG9jYWxUcmFuc2FjdGlvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTG9jYWxUcmFuc2FjdGlvbi5qYXZhCkBAIC0yMyw0NSArMjMsNDUgQEAKIC8qKgogICogPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gaW1wbGVtZW50YXRpb24gZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wOC8wMwotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDgvMDMKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIHB1YmxpYyBjbGFzcyBMb2NhbFRyYW5zYWN0aW9uIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTG9jYWxUcmFuc2FjdGlvbiB7Ci0gICAgCisKICAgICBwcml2YXRlIE1hbmFnZWRDb25uZWN0aW9uIG1jOwotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0b3IgZm9yIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+LgotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdGhhdCByZXR1cm5zCi0gICAgICoJCQl0aGlzIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IG9iamVjdCBhcwotICAgICAqCQkJYSByZXN1bHQgb2YgPGNvZGU+Z2V0TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHRoYXQgcmV0dXJucworICAgICAqICAgICAgICAgICAgdGhpcyA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBvYmplY3QgYXMKKyAgICAgKiAgICAgICAgICAgIGEgcmVzdWx0IG9mIDxjb2RlPmdldExvY2FsVHJhbnNhY3Rpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIExvY2FsVHJhbnNhY3Rpb24oTWFuYWdlZENvbm5lY3Rpb24gbWMpIHsKICAgICAgICAgdGhpcy5tYyA9IG1jOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEJlZ2luIGEgbG9jYWwgdHJhbnNhY3Rpb24uCiAgICAgICoKLSAgICAgKiBAdGhyb3dzCUxvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2hhbmdpbmcKLSAgICAgKgkJCQkJCXRoZSBhdXRvY29tbWl0IG1vZGUgb2YgdGhlIHBoeXNpY2FsCi0gICAgICoJCQkJCQljb25uZWN0aW9uCisgICAgICogQHRocm93cyAgICBMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNoYW5naW5nCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICB0aGUgYXV0b2NvbW1pdCBtb2RlIG9mIHRoZSBwaHlzaWNhbAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGJlZ2luKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgLy9HSkNJTlQKLQltYy50cmFuc2FjdGlvblN0YXJ0ZWQoKTsKKyAgICBtYy50cmFuc2FjdGlvblN0YXJ0ZWQoKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKS5zZXRBdXRvQ29tbWl0KGZhbHNlKTsKICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IExvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29tbWl0IGEgbG9jYWwgdHJhbnNhY3Rpb24uCi0gICAgICogQHRocm93cwlMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNoYW5naW5nCi0gICAgICoJCQkJCQl0aGUgYXV0b2NvbW1pdCBtb2RlIG9mIHRoZSBwaHlzaWNhbAotICAgICAqCQkJCQkJY29ubmVjdGlvbiBvciBjb21taXR0aW5nIHRoZSB0cmFuc2FjdGlvbgorICAgICAqIEB0aHJvd3MgICAgTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjaGFuZ2luZworICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGF1dG9jb21taXQgbW9kZSBvZiB0aGUgcGh5c2ljYWwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gb3IgY29tbWl0dGluZyB0aGUgdHJhbnNhY3Rpb24KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjb21taXQoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBFeGNlcHRpb24gZSA9IG51bGw7CkBAIC03MiwxNSArNzIsMTUgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgICAgICAvL0dKQ0lOVAotCW1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CisgICAgbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSb2xsYmFjayBhIGxvY2FsIHRyYW5zYWN0aW9uLgotICAgICAqIAotICAgICAqIEB0aHJvd3MJTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjaGFuZ2luZwotICAgICAqCQkJCQkJdGhlIGF1dG9jb21taXQgbW9kZSBvZiB0aGUgcGh5c2ljYWwKLSAgICAgKgkJCQkJCWNvbm5lY3Rpb24gb3Igcm9sbGluZyBiYWNrIHRoZSB0cmFuc2FjdGlvbgorICAgICAqCisgICAgICogQHRocm93cyAgICBMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNoYW5naW5nCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICB0aGUgYXV0b2NvbW1pdCBtb2RlIG9mIHRoZSBwaHlzaWNhbAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbiBvciByb2xsaW5nIGJhY2sgdGhlIHRyYW5zYWN0aW9uCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcm9sbGJhY2soKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICB0cnkgewpAQCAtOTAsNyArOTAsNyBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IExvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgICAgIC8vR0pDSU5UCi0JbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKKyAgICBtYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbi5qYXZhCmluZGV4IDMwZjQ2MGEuLjJkYWQ1OWEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uLmphdmEKQEAgLTQxLDggKzQxLDggQEAKIC8qKgogICogPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMjIKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzIyCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiBwdWJsaWMgY2xhc3MgTWFuYWdlZENvbm5lY3Rpb24gaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiB7CiAKQEAgLTUyLDcgKzUyLDcgQEAKIAogICAgIHByaXZhdGUgYm9vbGVhbiBpc0Rlc3Ryb3llZCA9IGZhbHNlOwogICAgIHByaXZhdGUgYm9vbGVhbiBpc1VzYWJsZSA9IHRydWU7Ci0gICAgCisKICAgICBwcml2YXRlIGludCBjb25uZWN0aW9uVHlwZSA9IElTTk9UQVBPT0xFRENPTk5FQ1RJT047CiAgICAgcHJpdmF0ZSBQb29sZWRDb25uZWN0aW9uIHBjID0gbnVsbDsKICAgICBwcml2YXRlIGphdmEuc3FsLkNvbm5lY3Rpb24gYWN0dWFsQ29ubmVjdGlvbiA9IG51bGw7CkBAIC02Miw3ICs2Miw3IEBACiAgICAgcHJpdmF0ZSBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmID0gbnVsbDsKICAgICBwcml2YXRlIFhBUmVzb3VyY2UgeGFyID0gbnVsbDsKICAgICBwdWJsaWMgQ29ubmVjdGlvbkhvbGRlciBhY3RpdmVDb25uZWN0aW9uSGFuZGxlOwotICAgIAorCiAgICAgLy9HSkNJTlQKICAgICBwcml2YXRlIGludCBpc29sYXRpb25MZXZlbFdoZW5DbGVhbmVkOwogICAgIHByaXZhdGUgYm9vbGVhbiBpc0NsZWFuID0gZmFsc2U7CkBAIC03Nyw3MSArNzcsNzEgQEAKICAgICBzdGF0aWMgewogICAgICAgICBfbG9nZ2VyID0gTG9nZ2VyLmdldEFub255bW91c0xvZ2dlcigpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdG9yIGZvciA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4uIFRoZSBwb29sZWRDb25uIHBhcmFtZXRlciBpcyBleHBlY3RlZAotICAgICAqIHRvIGJlIG51bGwgYW5kIHNxbENvbm4gcGFyYW1ldGVyIGlzIHRoZSBhY3R1YWwgY29ubmVjdGlvbiBpbiBjYXNlIHdoZXJlIAotICAgICAqIHRoZSBhY3R1YWwgY29ubmVjdGlvbiBpcyBnb3QgZnJvbSBhIG5vbiBwb29sZWQgZGF0YXNvdXJjZSBvYmplY3QuIFRoZSAKKyAgICAgKiB0byBiZSBudWxsIGFuZCBzcWxDb25uIHBhcmFtZXRlciBpcyB0aGUgYWN0dWFsIGNvbm5lY3Rpb24gaW4gY2FzZSB3aGVyZQorICAgICAqIHRoZSBhY3R1YWwgY29ubmVjdGlvbiBpcyBnb3QgZnJvbSBhIG5vbiBwb29sZWQgZGF0YXNvdXJjZSBvYmplY3QuIFRoZQogICAgICAqIHBvb2xlZENvbm4gcGFyYW1ldGVyIGlzIGV4cGVjdGVkIHRvIGJlIG5vbiBudWxsIGFuZCBzcWxDb25uIHBhcmFtZXRlcgogICAgICAqIGlzIGV4cGVjdGVkIHRvIGJlIG51bGwgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlIGRhdGFzb3VyY2Ugb2JqZWN0IGlzIGEKICAgICAgKiBjb25uZWN0aW9uIHBvb2wgZGF0YXNvdXJjZSBvciBhbiB4YSBkYXRhc291cmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCXBvb2xlZENvbm4JPGNvZGU+UG9vbGVkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGluIGNhc2UgdGhlIAotICAgICAqCQkJCXBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgdG8gYmUgb2J0YWluZWQgZnJvbSBhIHBvb2xlZAotICAgICAqCQkJCTxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+OyBudWxsIG90aGVyd2lzZQotICAgICAqIEBwYXJhbQlzcWxDb25uCTxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpbiBjYXNlIHRoZSBwaHlzaWNhbAotICAgICAqCQkJY29ubmVjdGlvbiBpcyB0byBiZSBvYnRhaW5lZCBmcm9tIGEgbm9uIHBvb2xlZCA8Y29kZT5EYXRhU291cmNlPC9jb2RlPjsKLSAgICAgKgkJCW51bGwgb3RoZXJ3aXNlCi0gICAgICogQHBhcmFtCXBhc3N3ZENyZWQJb2JqZWN0IGNvbmF0aW5pbmcgdGhlCi0gICAgICoJCQkJdXNlciBhbmQgcGFzc3dvcmQgZm9yIGFsbG9jYXRpbmcgdGhlIGNvbm5lY3Rpb24KLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdAotICAgICAqCQkJCQl0aGF0IGNyZWF0ZWQgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0Ci0gICAgICoJCQkJCWlzIG5vdCB0aGUgc2FtZSBhcyByZXR1cm5lZCBieSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+Ci0gICAgICoJCQkJCW9iamVjdCBwYXNzZWQKKyAgICAgKiBAcGFyYW0gICAgcG9vbGVkQ29ubiAgICA8Y29kZT5Qb29sZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaW4gY2FzZSB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIHRvIGJlIG9idGFpbmVkIGZyb20gYSBwb29sZWQKKyAgICAgKiAgICAgICAgICAgICAgICA8Y29kZT5EYXRhU291cmNlPC9jb2RlPjsgbnVsbCBvdGhlcndpc2UKKyAgICAgKiBAcGFyYW0gICAgc3FsQ29ubiAgICA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaW4gY2FzZSB0aGUgcGh5c2ljYWwKKyAgICAgKiAgICAgICAgICAgIGNvbm5lY3Rpb24gaXMgdG8gYmUgb2J0YWluZWQgZnJvbSBhIG5vbiBwb29sZWQgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT47CisgICAgICogICAgICAgICAgICBudWxsIG90aGVyd2lzZQorICAgICAqIEBwYXJhbSAgICBwYXNzd2RDcmVkICAgIG9iamVjdCBjb25hdGluaW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgIHVzZXIgYW5kIHBhc3N3b3JkIGZvciBhbGxvY2F0aW5nIHRoZSBjb25uZWN0aW9uCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgdGhhdCBjcmVhdGVkIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdAorICAgICAqICAgICAgICAgICAgICAgICAgICBpcyBub3QgdGhlIHNhbWUgYXMgcmV0dXJuZWQgYnkgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgICAgICBvYmplY3QgcGFzc2VkCiAgICAgICovCi0gICAgcHVibGljIE1hbmFnZWRDb25uZWN0aW9uKFBvb2xlZENvbm5lY3Rpb24gcG9vbGVkQ29ubiwgamF2YS5zcWwuQ29ubmVjdGlvbiBzcWxDb25uLCAKKyAgICBwdWJsaWMgTWFuYWdlZENvbm5lY3Rpb24oUG9vbGVkQ29ubmVjdGlvbiBwb29sZWRDb25uLCBqYXZhLnNxbC5Db25uZWN0aW9uIHNxbENvbm4sCiAgICAgICAgIFBhc3N3b3JkQ3JlZGVudGlhbCBwYXNzd2RDcmVkLCBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihwb29sZWRDb25uID09IG51bGwgJiYgc3FsQ29ubiA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkNvbm5lY3Rpb24gb2JqZWN0IGNhbm5vdCBiZSBudWxsIik7CiAgICAgICAgIH0KIAotCWlmIChjb25uZWN0aW9uVHlwZSA9PSBJU05PVEFQT09MRURDT05ORUNUSU9OICkgewotCSAgICBhY3R1YWxDb25uZWN0aW9uID0gc3FsQ29ubjsKLQl9CisgICAgaWYgKGNvbm5lY3Rpb25UeXBlID09IElTTk9UQVBPT0xFRENPTk5FQ1RJT04gKSB7CisgICAgICAgIGFjdHVhbENvbm5lY3Rpb24gPSBzcWxDb25uOworICAgIH0KIAogICAgICAgICBwYyA9IHBvb2xlZENvbm47CiAgICAgICAgIGNvbm5lY3Rpb25IYW5kbGVzID0gbmV3IEhhc2h0YWJsZSgpOwogICAgICAgICBwYXNzd2RDcmVkZW50aWFsID0gcGFzc3dkQ3JlZDsKICAgICAgICAgdGhpcy5tY2YgPSBtY2Y7Ci0gICAgICAgIGlmKHBhc3N3ZENyZWRlbnRpYWwgIT0gbnVsbCAmJiAgCisgICAgICAgIGlmKHBhc3N3ZENyZWRlbnRpYWwgIT0gbnVsbCAmJgogICAgICAgICAgICAgdGhpcy5tY2YuZXF1YWxzKHBhc3N3ZENyZWRlbnRpYWwuZ2V0TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KCkpID09IGZhbHNlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgdGhhdCBoYXMgY3JlYXRlZCB0aGlzICIgKyAKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSB0aGF0IGhhcyBjcmVhdGVkIHRoaXMgIiArCiAgICAgICAgICAgICAgICAgIk1hbmFnZWRDb25uZWN0aW9uIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IHJldHVybmVkIGJ5IiArCiAgICAgICAgICAgICAgICAgICAgICIgdGhlIFBhc3N3b3JkQ3JlZGVudGlhbCBmb3IgdGhpcyBNYW5hZ2VkQ29ubmVjdGlvbiIpOwogICAgICAgICB9CiAgICAgICAgIGxvZ1dyaXRlciA9IG1jZi5nZXRMb2dXcml0ZXIoKTsKICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7Ci0JY2UgPSBuZXcgQ29ubmVjdGlvbkV2ZW50KHRoaXMsIENvbm5lY3Rpb25FdmVudC5DT05ORUNUSU9OX0NMT1NFRCk7CisgICAgY2UgPSBuZXcgQ29ubmVjdGlvbkV2ZW50KHRoaXMsIENvbm5lY3Rpb25FdmVudC5DT05ORUNUSU9OX0NMT1NFRCk7CiAgICAgfQogCiAgICAgLyoqCiAgICAgICogQWRkcyBhIGNvbm5lY3Rpb24gZXZlbnQgbGlzdGVuZXIgdG8gdGhlIE1hbmFnZWRDb25uZWN0aW9uIGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCWxpc3RlbmVyCTxjb2RlPkNvbm5lY3Rpb25FdmVudExpc3RlbmVyPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBsaXN0ZW5lciAgICA8Y29kZT5Db25uZWN0aW9uRXZlbnRMaXN0ZW5lcjwvY29kZT4KICAgICAgKiBAc2VlIDxjb2RlPnJlbW92ZUNvbm5lY3Rpb25FdmVudExpc3RlbmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGFkZENvbm5lY3Rpb25FdmVudExpc3RlbmVyKENvbm5lY3Rpb25FdmVudExpc3RlbmVyIGxpc3RlbmVyKSB7Ci0JdGhpcy5saXN0ZW5lciA9IGxpc3RlbmVyOworICAgIHRoaXMubGlzdGVuZXIgPSBsaXN0ZW5lcjsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBVc2VkIGJ5IHRoZSBjb250YWluZXIgdG8gY2hhbmdlIHRoZSBhc3NvY2lhdGlvbiBvZiBhbiBhcHBsaWNhdGlvbi1sZXZlbCAKKyAgICAgKiBVc2VkIGJ5IHRoZSBjb250YWluZXIgdG8gY2hhbmdlIHRoZSBhc3NvY2lhdGlvbiBvZiBhbiBhcHBsaWNhdGlvbi1sZXZlbAogICAgICAqIGNvbm5lY3Rpb24gaGFuZGxlIHdpdGggYSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JY29ubmVjdGlvbgk8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0byBiZSBhc3NvY2lhdGVkIHdpdGgKLSAgICAgKgkJCQl0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm8gbW9yZQotICAgICAqCQkJCQl2YWxpZCBvciB0aGUgY29ubmVjdGlvbiBoYW5kbGUgcGFzc2VkIGlzIG51bGwKKyAgICAgKiBAcGFyYW0gICAgY29ubmVjdGlvbiAgICA8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0byBiZSBhc3NvY2lhdGVkIHdpdGgKKyAgICAgKiAgICAgICAgICAgICAgICB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm8gbW9yZQorICAgICAqICAgICAgICAgICAgICAgICAgICB2YWxpZCBvciB0aGUgY29ubmVjdGlvbiBoYW5kbGUgcGFzc2VkIGlzIG51bGwKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBhc3NvY2lhdGVDb25uZWN0aW9uKE9iamVjdCBjb25uZWN0aW9uKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtMTUyLDExICsxNTIsMTEgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQ29ubmVjdGlvbiBoYW5kbGUgY2Fubm90IGJlIG51bGwiKTsKICAgICAgICAgfQogICAgICAgICBDb25uZWN0aW9uSG9sZGVyIGNoID0gKENvbm5lY3Rpb25Ib2xkZXIpIGNvbm5lY3Rpb247Ci0gICAgICAgIAorCiAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYyA9IChjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24pY2guZ2V0TWFuYWdlZENvbm5lY3Rpb24oKTsKLQltYy5hY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKLQlpc0NsZWFuID0gZmFsc2U7Ci0gICAgICAgIAorICAgIG1jLmFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOworICAgIGlzQ2xlYW4gPSBmYWxzZTsKKwogICAgICAgICBjaC5hc3NvY2lhdGVDb25uZWN0aW9uKGFjdHVhbENvbm5lY3Rpb24sIHRoaXMpOwogICAgICAgICAvKioKICAgICAgICAgICogVGhlIGV4cGVjdGF0aW9uIGZyb20gdGhlIGFib3ZlIG1ldGhvZCBpcyB0aGF0IHRoZSBjb25uZWN0aW9uIGhvbGRlcgpAQCAtMTY1LDM0ICsxNjUsMzQgQEAKICAgICAgICAgICogdG8gdGhlIE1hbmFnZWRDb25uZWN0aW9uIGluc3RhbmNlIHdpdGggdGhpcyBNYW5hZ2VkQ29ubmVjdGlvbiBpbnN0YW5jZS4KICAgICAgICAgICogQW55IHByZXZpb3VzIHN0YXRlbWVudHMgYW5kIHJlc3VsdCBzZXRzIGFsc28gbmVlZCB0byBiZSByZW1vdmVkLgogICAgICAgICAgKi8KLSAgICAgICAgIAorCiAgICAgICAgICBpZihhY3RpdmVDb25uZWN0aW9uSGFuZGxlICE9IG51bGwpIHsKICAgICAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUuc2V0QWN0aXZlKGZhbHNlKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBjaC5zZXRBY3RpdmUodHJ1ZSk7Ci0gICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBjaDsgCisgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBjaDsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBBcHBsaWNhdGlvbiBzZXJ2ZXIgY2FsbHMgdGhpcyBtZXRob2QgdG8gZm9yY2UgYW55IGNsZWFudXAgb24gdGhlIAorICAgICAqIEFwcGxpY2F0aW9uIHNlcnZlciBjYWxscyB0aGlzIG1ldGhvZCB0byBmb3JjZSBhbnkgY2xlYW51cCBvbiB0aGUKICAgICAgKiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuIFRoaXMgbWV0aG9kIGNhbGxzIHRoZSBpbnZhbGlkYXRlCiAgICAgICogbWV0aG9kIG9uIGFsbCBDb25uZWN0aW9uSGFuZGxlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4uCi0gICAgICogCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBubyBtb3JlIHZhbGlkCisgICAgICoKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vIG1vcmUgdmFsaWQKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjbGVhbnVwKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gY2xlYW51cCIpOwogICAgICAgICB9CiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwotICAgICAgICAKKwogICAgICAgICAvKioKICAgICAgICAgICogbWF5IG5lZWQgdG8gc2V0IHRoZSBhdXRvY29tbWl0IHRvIHRydWUgZm9yIHRoZSBub24tcG9vbGVkIGNhc2UuCiAgICAgICAgICAqLwogICAgICAgICAvL0dKQ0lOVAotCS8vaWYgKGFjdHVhbENvbm5lY3Rpb24gIT0gbnVsbCkgewotCWlmIChjb25uZWN0aW9uVHlwZSA9PSBJU05PVEFQT09MRURDT05ORUNUSU9OICkgeworICAgIC8vaWYgKGFjdHVhbENvbm5lY3Rpb24gIT0gbnVsbCkgeworICAgIGlmIChjb25uZWN0aW9uVHlwZSA9PSBJU05PVEFQT09MRURDT05ORUNUSU9OICkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgaXNvbGF0aW9uTGV2ZWxXaGVuQ2xlYW5lZCA9IGFjdHVhbENvbm5lY3Rpb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKTsKICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewpAQCAtMjAxLDE3ICsyMDEsMTcgQEAKICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGlzQ2xlYW4gPSB0cnVlOwotICAgICAgICAKKwogICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUaGlzIG1ldGhvZCByZW1vdmVzIGFsbCB0aGUgY29ubmVjdGlvbiBoYW5kbGVzIGZyb20gdGhlIHRhYmxlCiAgICAgICogb2YgY29ubmVjdGlvbiBoYW5kbGVzIGFuZCBpbnZhbGlkYXRlcyBhbGwgb2YgdGhlbSBzbyB0aGF0IGFueQogICAgICAqIG9wZXJhdGlvbiBvbiB0aG9zZSBjb25uZWN0aW9uIGhhbmRsZXMgdGhyb3dzIGFuIGV4Y2VwdGlvbi4KICAgICAgKgotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlcmUgaXMgYSBwcm9ibGVtIGluIHJldHJpZXZpbmcKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCXRoZSBjb25uZWN0aW9uIGhhbmRsZXMKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSBpbiByZXRyaWV2aW5nCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY29ubmVjdGlvbiBoYW5kbGVzCiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIGludmFsaWRhdGVBbGxDb25uZWN0aW9uSGFuZGxlcygpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIFNldCBoYW5kbGVzID0gY29ubmVjdGlvbkhhbmRsZXMua2V5U2V0KCk7CkBAIC0yMjYsMjIgKzIyNiwyMiBAQAogICAgICAgICB9CiAgICAgICAgIGNvbm5lY3Rpb25IYW5kbGVzLmNsZWFyKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogRGVzdHJveXMgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gdG8gdGhlIHVuZGVybHlpbmcgcmVzb3VyY2UgbWFuYWdlci4KLSAgICAgKiAKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNsb3NpbmcgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24KKyAgICAgKgorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2xvc2luZyB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb257CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CiAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gZGVzdHJveSIpOwogICAgICAgICB9Ci0JLy9HSkNJTlQKLQlpZihpc0Rlc3Ryb3llZCA9PSB0cnVlKSB7Ci0JICAgIHJldHVybjsJCi0JfQorICAgIC8vR0pDSU5UCisgICAgaWYoaXNEZXN0cm95ZWQgPT0gdHJ1ZSkgeworICAgICAgICByZXR1cm47CisgICAgfQogCi0JYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7CisgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpZihjb25uZWN0aW9uVHlwZSA9PSBJU1hBQ09OTkVDVElPTiB8fCBjb25uZWN0aW9uVHlwZSA9PSBJU1BPT0xFRENPTk5FQ1RJT04pIHsKICAgICAgICAgICAgICAgICBwYy5jbG9zZSgpOwpAQCAtMjU1LDI4ICsyNTUsMjggQEAKICAgICAgICAgICAgIGlzRGVzdHJveWVkID0gdHJ1ZTsKICAgICAgICAgICAgIHBhc3N3ZENyZWRlbnRpYWwgPSBudWxsOwogICAgICAgICAgICAgY29ubmVjdGlvbkhhbmRsZXMgPSBudWxsOwotICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgZm9sbG93aW5nIGV4Y2VwdGlvbiBoYXMgb2NjdXJlZCBkdXJpbmcgZGVzdHJveTogIiAKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGZvbGxvd2luZyBleGNlcHRpb24gaGFzIG9jY3VyZWQgZHVyaW5nIGRlc3Ryb3k6ICIKICAgICAgICAgICAgICAgICArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgICAgICBpc0Rlc3Ryb3llZCA9IHRydWU7CiAgICAgICAgIHBhc3N3ZENyZWRlbnRpYWwgPSBudWxsOwogICAgICAgICBjb25uZWN0aW9uSGFuZGxlcyA9IG51bGw7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIG5ldyBjb25uZWN0aW9uIGhhbmRsZSBmb3IgdGhlIHVuZGVybHlpbmcgcGh5c2ljYWwgCisgICAgICogQ3JlYXRlcyBhIG5ldyBjb25uZWN0aW9uIGhhbmRsZSBmb3IgdGhlIHVuZGVybHlpbmcgcGh5c2ljYWwKICAgICAgKiBjb25uZWN0aW9uIHJlcHJlc2VudGVkIGJ5IHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3ViamVjdAk8Y29kZT5TdWJqZWN0PC9jb2RlPiBwYXJhbWV0ZXIgbmVlZGVkIGZvciBhdXRoZW50aWNhdGlvbgotICAgICAqIEBwYXJhbQljeFJlcUluZm8JPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBjYXJyaWVzIHRoZSB1c2VyIAotICAgICAqICAgICAgIAkgICAgICAgICAJYW5kIHBhc3N3b3JkIHJlcXVpcmVkIGZvciBnZXR0aW5nIHRoaXMgY29ubmVjdGlvbi4KLSAgICAgKiBAcmV0dXJuCUNvbm5lY3Rpb24JdGhlIGNvbm5lY3Rpb24gaGFuZGxlIDxjb2RlPk9iamVjdDwvY29kZT4KLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlIAotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJcGh5c2ljYWwgY29ubmVjdGlvbiBmcm9tIHRoZSBwb29sZWQgY29ubmVjdGlvbiAKLSAgICAgKiBAdGhyb3dzCVNlY3VyaXR5RXhjZXB0aW9uCWlmIHRoZXJlIGlzIGEgbWlzbWF0Y2ggYmV0d2VlbiB0aGUKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCXBhc3N3b3JkIGNyZWRlbnRpYWxzIG9yIHJlYXV0aGVudGljYXRpb24gaXMgcmVxdWVzdGVkCisgICAgICogQHBhcmFtICAgIHN1YmplY3QgICAgPGNvZGU+U3ViamVjdDwvY29kZT4gcGFyYW1ldGVyIG5lZWRlZCBmb3IgYXV0aGVudGljYXRpb24KKyAgICAgKiBAcGFyYW0gICAgY3hSZXFJbmZvICAgIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gY2FycmllcyB0aGUgdXNlcgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHBhc3N3b3JkIHJlcXVpcmVkIGZvciBnZXR0aW5nIHRoaXMgY29ubmVjdGlvbi4KKyAgICAgKiBAcmV0dXJuICAgIENvbm5lY3Rpb24gICAgdGhlIGNvbm5lY3Rpb24gaGFuZGxlIDxjb2RlPk9iamVjdDwvY29kZT4KKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaHlzaWNhbCBjb25uZWN0aW9uIGZyb20gdGhlIHBvb2xlZCBjb25uZWN0aW9uCisgICAgICogQHRocm93cyAgICBTZWN1cml0eUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhIG1pc21hdGNoIGJldHdlZW4gdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzd29yZCBjcmVkZW50aWFscyBvciByZWF1dGhlbnRpY2F0aW9uIGlzIHJlcXVlc3RlZAogICAgICAqLwotICAgIHB1YmxpYyBPYmplY3QgZ2V0Q29ubmVjdGlvbihTdWJqZWN0IHN1YiwgamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxSW5mbykgCisgICAgcHVibGljIE9iamVjdCBnZXRDb25uZWN0aW9uKFN1YmplY3Qgc3ViLCBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm8gY3hSZXFJbmZvKQogICAgICAgICB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGdldENvbm5lY3Rpb24iKTsKQEAgLTI4NCwxNCArMjg0LDE0IEBACiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwogICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxdWVzdEluZm8gPSAoY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mbykgY3hSZXFJbmZvOwogICAgICAgICBQYXNzd29yZENyZWRlbnRpYWwgcGFzc3dkQ3JlZCA9IFNlY3VyaXR5VXRpbHMuZ2V0UGFzc3dvcmRDcmVkZW50aWFsKHRoaXMubWNmLCBzdWIsIGN4UmVxdWVzdEluZm8pOwotICAgICAgICAgICAgCisKICAgICAgICAgaWYoU2VjdXJpdHlVdGlscy5pc1Bhc3N3b3JkQ3JlZGVudGlhbEVxdWFsKHRoaXMucGFzc3dkQ3JlZGVudGlhbCwgcGFzc3dkQ3JlZCkgPT0gZmFsc2UpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBqYWthcnRhLnJlc291cmNlLnNwaS5TZWN1cml0eUV4Y2VwdGlvbigiUmUtYXV0aGVudGljYXRpb24gbm90IHN1cHBvcnRlZCIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIC8vR0pDSU5UCiAgICAgICAgIGdldEFjdHVhbENvbm5lY3Rpb24oKTsKLSAKKwogICAgICAgICAvKioKICAgICAgICAgICogVGhlIGZvbGxvd2luZyBjb2RlIGluIHRoZSBpZiBzdGF0ZW1lbnQgZmlyc3QgY2hlY2tzIGlmIHRoaXMgTWFuYWdlZENvbm5lY3Rpb24KICAgICAgICAgICogaXMgY2xlYW4gb3Igbm90LiBJZiBpdCBpcywgaXQgcmVzZXRzIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwgdG8gd2hhdApAQCAtMzAxLDI4ICszMDEsMjggQEAKICAgICAgICAgaWYoaXNDbGVhbikgewogICAgICAgICAgICAgKChjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KW1jZikucmVzZXRJc29sYXRpb24odGhpcywgaXNvbGF0aW9uTGV2ZWxXaGVuQ2xlYW5lZCk7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgICAKKworCiAgICAgICAgIENvbm5lY3Rpb25Ib2xkZXIgY29ubkhvbGRlck9iamVjdCA9IG5ldyBDb25uZWN0aW9uSG9sZGVyKGFjdHVhbENvbm5lY3Rpb24sIHRoaXMpOwotCWlzQ2xlYW49ZmFsc2U7Ci0gICAgICAgIAorICAgIGlzQ2xlYW49ZmFsc2U7CisKICAgICAgICAgaWYoYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSAhPSBudWxsKSB7CiAgICAgICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlLnNldEFjdGl2ZShmYWxzZSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgY29ubkhvbGRlck9iamVjdC5zZXRBY3RpdmUodHJ1ZSk7CiAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBjb25uSG9sZGVyT2JqZWN0OwotIAorCiAgICAgICAgIHJldHVybiBjb25uSG9sZGVyT2JqZWN0OwotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgYW4gPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gaW5zdGFuY2UuIFRoZSA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBpbnRlcmZhY2UKLSAgICAgKiBpcyB1c2VkIGJ5IHRoZSBjb250YWluZXIgdG8gbWFuYWdlIGxvY2FsIHRyYW5zYWN0aW9ucyBmb3IgYSBSTSBpbnN0YW5jZS4gCisgICAgICogaXMgdXNlZCBieSB0aGUgY29udGFpbmVyIHRvIG1hbmFnZSBsb2NhbCB0cmFuc2FjdGlvbnMgZm9yIGEgUk0gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKi8KICAgICBwdWJsaWMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTG9jYWxUcmFuc2FjdGlvbiBnZXRMb2NhbFRyYW5zYWN0aW9uKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTMzMSwxMyArMzMxLDEzIEBACiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwogICAgICAgICByZXR1cm4gbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5Mb2NhbFRyYW5zYWN0aW9uKHRoaXMpOwogICAgIH0KLSAgICAgCisKICAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBsb2cgd3JpdGVyIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4gCisgICAgICogR2V0cyB0aGUgbG9nIHdyaXRlciBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggdGhpcyAKLSAgICAgKgkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAqICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqIEBzZWUgPGNvZGU+c2V0TG9nV3JpdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBQcmludFdyaXRlciBnZXRMb2dXcml0ZXIoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewpAQCAtMzQ1LDQ2ICszNDUsNDYgQEAKICAgICAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gZ2V0TG9nV3JpdGVyIik7CiAgICAgICAgIH0KICAgICAgICAgY2hlY2tJZlZhbGlkKCk7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBsb2dXcml0ZXI7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogR2V0cyB0aGUgbWV0YWRhdGEgaW5mb3JtYXRpb24gZm9yIHRoaXMgY29ubmVjdGlvbidzIHVuZGVybHlpbmcgRUlTIAotICAgICAqIHJlc291cmNlIG1hbmFnZXIgaW5zdGFuY2UuIAorICAgICAqIEdldHMgdGhlIG1ldGFkYXRhIGluZm9ybWF0aW9uIGZvciB0aGlzIGNvbm5lY3Rpb24ncyB1bmRlcmx5aW5nIEVJUworICAgICAqIHJlc291cmNlIG1hbmFnZXIgaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGE8L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGE8L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKi8KICAgICBwdWJsaWMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YSBnZXRNZXRhRGF0YSgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGdldE1ldGFEYXRhIik7CiAgICAgICAgIH0KICAgICAgICAgY2hlY2tJZlZhbGlkKCk7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEodGhpcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogUmV0dXJucyBhbiA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZS4gCisgICAgICogUmV0dXJucyBhbiA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBvcgotICAgICAqCQkJCQl0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZSAKLSAgICAgKgkJCQkJPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCU5vdFN1cHBvcnRlZEV4Y2VwdGlvbglpZiB1bmRlcmx5aW5nIGRhdGFzb3VyY2UgaXMgbm90IGFuCi0gICAgICoJCQkJCTxjb2RlPlhBRGF0YVNvdXJjZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgb3IKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIE5vdFN1cHBvcnRlZEV4Y2VwdGlvbiAgICBpZiB1bmRlcmx5aW5nIGRhdGFzb3VyY2UgaXMgbm90IGFuCisgICAgICogICAgICAgICAgICAgICAgICAgIDxjb2RlPlhBRGF0YVNvdXJjZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgWEFSZXNvdXJjZSBnZXRYQVJlc291cmNlKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gZ2V0WEFSZXNvdXJjZSIpOwogICAgICAgICB9CiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwotICAgICAgICAKKwogICAgICAgICBpZihjb25uZWN0aW9uVHlwZSA9PSBJU1hBQ09OTkVDVElPTikgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBpZih4YXIgPT0gbnVsbCkgewotCQkgICAgLyoqCisgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgICogVXNpbmcgdGhlIHdyYXBwZXIgWEFSZXNvdXJjZS4KICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgICAgIHhhciA9IG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuWEFSZXNvdXJjZUltcGwoKChYQUNvbm5lY3Rpb24pcGMpLmdldFhBUmVzb3VyY2UoKSwgdGhpcyk7CkBAIC0zOTcsMTYgKzM5NywxNiBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiQ2Fubm90IGdldCBhbiBYQVJlc291cmNlIGZyb20gYSBub24gWEEgY29ubmVjdGlvbiIpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmVtb3ZlcyBhbiBhbHJlYWR5IHJlZ2lzdGVyZWQgY29ubmVjdGlvbiBldmVudCBsaXN0ZW5lciBmcm9tIHRoZQogICAgICAqIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlsaXN0ZW5lcgk8Y29kZT5Db25uZWN0aW9uRXZlbnRMaXN0ZW5lcjwvY29kZT4gdG8gYmUgcmVtb3ZlZAorICAgICAqIEBwYXJhbSAgICBsaXN0ZW5lciAgICA8Y29kZT5Db25uZWN0aW9uRXZlbnRMaXN0ZW5lcjwvY29kZT4gdG8gYmUgcmVtb3ZlZAogICAgICAqIEBzZWUgPGNvZGU+YWRkQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcmVtb3ZlQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXIoQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXIgbGlzdGVuZXIpIHsKLQlsaXN0ZW5lciA9IG51bGw7CisgICAgbGlzdGVuZXIgPSBudWxsOwogICAgIH0KIAogICAgIC8qKgpAQCAtNDE1LDcgKzQxNSw3IEBACiAgICAgICogTG9jYWxUcmFuc2FjdGlvbiBvYmplY3Qgd2hlbiBpdHMgYmVnaW4oKSBtZXRob2QgaXMgY2FsbGVkLgogICAgICAqLwogICAgIHZvaWQgdHJhbnNhY3Rpb25TdGFydGVkKCkgewotCXRyYW5zYWN0aW9uSW5Qcm9ncmVzcyA9IHRydWU7CQorICAgIHRyYW5zYWN0aW9uSW5Qcm9ncmVzcyA9IHRydWU7CiAgICAgfQogCiAgICAgLyoqCkBAIC00MjQsMTYgKzQyNCwxNiBAQAogICAgICAqIExvY2FsVHJhbnNhY3Rpb24gb2JqZWN0IHdoZW4gaXRzIGVuZCgpIG1ldGhvZCBpcyBjYWxsZWQuCiAgICAgICovCiAgICAgdm9pZCB0cmFuc2FjdGlvbkNvbXBsZXRlZCgpIHsKLQl0cmFuc2FjdGlvbkluUHJvZ3Jlc3MgPSBmYWxzZTsKLQlpZihjb25uZWN0aW9uVHlwZSA9PSBJU1BPT0xFRENPTk5FQ1RJT04gfHwgY29ubmVjdGlvblR5cGUgPT0gSVNYQUNPTk5FQ1RJT04pIHsKKyAgICB0cmFuc2FjdGlvbkluUHJvZ3Jlc3MgPSBmYWxzZTsKKyAgICBpZihjb25uZWN0aW9uVHlwZSA9PSBJU1BPT0xFRENPTk5FQ1RJT04gfHwgY29ubmVjdGlvblR5cGUgPT0gSVNYQUNPTk5FQ1RJT04pIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgaXNvbGF0aW9uTGV2ZWxXaGVuQ2xlYW5lZCA9IGFjdHVhbENvbm5lY3Rpb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKTsKICAgICAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgICAgIC8vY2hlY2sgd2hhdCB0byBkbyBpbiB0aGlzIGNhc2UhIQotCQlfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5ub3Rnb3RfdHhfaXNvbHZsIik7CisgICAgICAgICAgICAvL2NoZWNrIHdoYXQgdG8gZG8gaW4gdGhpcyBjYXNlISEKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMubm90Z290X3R4X2lzb2x2bCIpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0JICAgIHRyeSB7CisKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBhY3R1YWxDb25uZWN0aW9uLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgYWN0dWFsQ29ubmVjdGlvbiA9IG51bGw7CiAgICAgICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7CkBAIC00NDEsNyArNDQxLDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0JICAgICAgICAKKwogICAgICAgICBpc0NsZWFuID0gdHJ1ZTsKIAogICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKQEAgLTQ1MywyOCArNDUzLDI4IEBACiAgICAgICogb3Igbm90LgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGlzVHJhbnNhY3Rpb25JblByb2dyZXNzKCkgewotCXJldHVybiB0cmFuc2FjdGlvbkluUHJvZ3Jlc3M7CisgICAgcmV0dXJuIHRyYW5zYWN0aW9uSW5Qcm9ncmVzczsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBsb2cgd3JpdGVyIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlvdXQJPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzCi0gICAgICoJCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqIEBwYXJhbSAgICBvdXQgICAgPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzCisgICAgICogICAgICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqIEBzZWUgPGNvZGU+Z2V0TG9nV3JpdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldExvZ1dyaXRlcihQcmludFdyaXRlciBvdXQpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwogICAgICAgICBsb2dXcml0ZXIgPSBvdXQ7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogVGhpcyBtZXRob2QgZGV0ZXJtaW5lcyB0aGUgdHlwZSBvZiB0aGUgY29ubmVjdGlvbiBiZWluZyBoZWxkIAorICAgICAqIFRoaXMgbWV0aG9kIGRldGVybWluZXMgdGhlIHR5cGUgb2YgdGhlIGNvbm5lY3Rpb24gYmVpbmcgaGVsZAogICAgICAqIGluIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+LgotICAgICAqIAotICAgICAqIEBwYXJhbQlwb29sZWRDb25uCTxjb2RlPlBvb2xlZENvbm5lY3Rpb248L2NvZGU+Ci0gICAgICogQHJldHVybgljb25uZWN0aW9uIHR5cGUKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBwb29sZWRDb25uICAgIDxjb2RlPlBvb2xlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBjb25uZWN0aW9uIHR5cGUKICAgICAgKi8KICAgICBwcml2YXRlIGludCBnZXRDb25uZWN0aW9uVHlwZShQb29sZWRDb25uZWN0aW9uIHBvb2xlZENvbm4pIHsKICAgICAgICAgaWYocG9vbGVkQ29ubiA9PSBudWxsKSB7CkBAIC00ODUsMjIgKzQ4NSwyMiBAQAogICAgICAgICAgICAgcmV0dXJuIElTUE9PTEVEQ09OTkVDVElPTjsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UgdGhhdCAKKyAgICAgKiBSZXR1cm5zIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlIHRoYXQKICAgICAgKiBjcmVhdGVkIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlIHRoYXQgY3JlYXRlZCB0aGlzCi0gICAgICoJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEByZXR1cm4gICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZSB0aGF0IGNyZWF0ZWQgdGhpcworICAgICAqICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKICAgICAgKi8KICAgICBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgZ2V0TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KCkgewogICAgICAgICByZXR1cm4gKGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkpbWNmOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGFjdHVhbCBzcWwgY29ubmVjdGlvbiBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4uIAorICAgICAqIFJldHVybnMgdGhlIGFjdHVhbCBzcWwgY29ubmVjdGlvbiBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRoZSBwaHlzaWNhbCA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgdGhlIHBoeXNpY2FsIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+CiAgICAgICovCiAgICAgLy9HSkNJTlQKICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGdldEFjdHVhbENvbm5lY3Rpb24oKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewpAQCAtNTA5LDggKzUwOSw4IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGlmKGFjdHVhbENvbm5lY3Rpb24gPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICBhY3R1YWxDb25uZWN0aW9uID0gcGMuZ2V0Q29ubmVjdGlvbigpOwotCQl9Ci0JCQorICAgICAgICB9CisKICAgICAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKICAgICAgICAgICAgICAgICBzcWxlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CkBAIC01MTgsODEgKzUxOCw4MSBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBhY3R1YWxDb25uZWN0aW9uOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPi4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcyAKLSAgICAgKgkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCisgICAgICogQHJldHVybiAgICA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzCisgICAgICogICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQogICAgICAqLwogICAgIFBhc3N3b3JkQ3JlZGVudGlhbCBnZXRQYXNzd29yZENyZWRlbnRpYWwoKSB7CiAgICAgICAgIHJldHVybiBwYXNzd2RDcmVkZW50aWFsOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENoZWNrcyBpZiB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpcyB2YWxpZCBvciBub3QgYW5kIHRocm93cyBhbgogICAgICAqIGV4Y2VwdGlvbiBpZiBpdCBpcyBub3QgdmFsaWQuIEEgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGlzIG5vdCB2YWxpZCBpZgogICAgICAqIGRlc3Ryb3kgaGFzIG5vdCBiZWVuIGNhbGxlZCBhbmQgbm8gcGh5c2ljYWwgY29ubmVjdGlvbiBlcnJvciBoYXMKICAgICAgKiBvY2N1cnJlZCByZW5kZXJpbmcgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gdW51c2FibGUuCiAgICAgICoKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIDxjb2RlPmRlc3Ryb3k8L2NvZGU+IGhhcyBiZWVuIGNhbGxlZCBvbiB0aGlzIAotICAgICAqCQkJCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2Ugb3IgaWYgYSAKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCXBoeXNpY2FsIGNvbm5lY3Rpb24gZXJyb3Igb2NjdXJyZWQgcmVuZGVyaW5nIGl0IHVudXNhYmxlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiA8Y29kZT5kZXN0cm95PC9jb2RlPiBoYXMgYmVlbiBjYWxsZWQgb24gdGhpcworICAgICAqICAgICAgICAgICAgICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2Ugb3IgaWYgYQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGh5c2ljYWwgY29ubmVjdGlvbiBlcnJvciBvY2N1cnJlZCByZW5kZXJpbmcgaXQgdW51c2FibGUKICAgICAgKi8KICAgICAvL0dKQ0lOVAogICAgIHZvaWQgY2hlY2tJZlZhbGlkKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYoaXNEZXN0cm95ZWQgPT0gdHJ1ZSB8fCBpc1VzYWJsZSA9PSBmYWxzZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGlzIE1hbmFnZWRDb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyB0aGUgcGh5c2ljYWwgIiArIAorICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGlzIE1hbmFnZWRDb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyB0aGUgcGh5c2ljYWwgIiArCiAgICAgICAgICAgICAgICAgImNvbm5lY3Rpb24gaXMgbm90IHVzYWJsZS4iKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gd2hlbiBpdHMgY2xvc2UgbWV0aG9kIGlzCiAgICAgICogY2FsbGVkLiBUaGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZSAgaW52YWxpZGF0ZXMgdGhlIGNvbm5lY3Rpb24gaGFuZGxlCiAgICAgICogYW5kIHNlbmRzIGEgQ09OTkVDVElPTl9DTE9TRUQgZXZlbnQgdG8gYWxsIHRoZSByZWdpc3RlcmVkIGV2ZW50IGxpc3RlbmVycy4KICAgICAgKgotICAgICAqIEBwYXJhbQllCUV4Y2VwdGlvbiB0aGF0IG1heSBoYXZlIG9jY3VyZWQgd2hpbGUgY2xvc2luZyB0aGUgY29ubmVjdGlvbiBoYW5kbGUKLSAgICAgKiBAcGFyYW0JY29ubkhvbGRlck9iamVjdAk8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0aGF0IGhhcyBiZWVuIGNsb3NlZAotICAgICAqIEB0aHJvd3MJU1FMRXhjZXB0aW9uCWluIGNhc2UgY2xvc2luZyB0aGUgc3FsIGNvbm5lY3Rpb24gZ290IG91dCBvZgotICAgICAqICAgICAgICAgCSAgICAgICAgICAgIAk8Y29kZT5nZXRDb25uZWN0aW9uPC9jb2RlPiBvbiB0aGUgdW5kZXJseWluZyAKLSAgICAgKgkJCQk8Y29kZT5Qb29sZWRDb25uZWN0aW9uPC9jb2RlPiB0aHJvd3MgYW4gZXhjZXB0aW9uCisgICAgICogQHBhcmFtICAgIGUgICAgRXhjZXB0aW9uIHRoYXQgbWF5IGhhdmUgb2NjdXJlZCB3aGlsZSBjbG9zaW5nIHRoZSBjb25uZWN0aW9uIGhhbmRsZQorICAgICAqIEBwYXJhbSAgICBjb25uSG9sZGVyT2JqZWN0ICAgIDxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRoYXQgaGFzIGJlZW4gY2xvc2VkCisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgaW4gY2FzZSBjbG9zaW5nIHRoZSBzcWwgY29ubmVjdGlvbiBnb3Qgb3V0IG9mCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPmdldENvbm5lY3Rpb248L2NvZGU+IG9uIHRoZSB1bmRlcmx5aW5nCisgICAgICogICAgICAgICAgICAgICAgPGNvZGU+UG9vbGVkQ29ubmVjdGlvbjwvY29kZT4gdGhyb3dzIGFuIGV4Y2VwdGlvbgogICAgICAqLwogICAgIHZvaWQgY29ubmVjdGlvbkNsb3NlZChFeGNlcHRpb24gZSwgQ29ubmVjdGlvbkhvbGRlciBjb25uSG9sZGVyT2JqZWN0KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgICAgY29ubkhvbGRlck9iamVjdC5pbnZhbGlkYXRlKCk7Ci0gICAgICAgIAorCiAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOwotICAgICAgICAKKwogICAgICAgICBjZS5zZXRDb25uZWN0aW9uSGFuZGxlKGNvbm5Ib2xkZXJPYmplY3QpOwogICAgICAgICBsaXN0ZW5lci5jb25uZWN0aW9uQ2xvc2VkKGNlKTsKLQkKKwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gd2hlbiBpdCBkZXRlY3RzIGEgY29ubmVjaW9uCiAgICAgICogcmVsYXRlZCBlcnJvci4KICAgICAgKgotICAgICAqIEBwYXJhbQllCUV4Y2VwdGlvbiB0aGF0IGhhcyBvY2N1cnJlZCBkdXJpbmcgYW4gb3BlcmF0aW9uIG9uIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uCi0gICAgICogQHBhcmFtCWNvbm5Ib2xkZXJPYmplY3QJPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdGhhdCBkZXRlY3RlZCB0aGUgcGh5c2ljYWwKLSAgICAgKgkJCQkJY29ubmVjdGlvbiBlcnJvcgorICAgICAqIEBwYXJhbSAgICBlICAgIEV4Y2VwdGlvbiB0aGF0IGhhcyBvY2N1cnJlZCBkdXJpbmcgYW4gb3BlcmF0aW9uIG9uIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uCisgICAgICogQHBhcmFtICAgIGNvbm5Ib2xkZXJPYmplY3QgICAgPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdGhhdCBkZXRlY3RlZCB0aGUgcGh5c2ljYWwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbiBlcnJvcgogICAgICAqLwotICAgIHZvaWQgY29ubmVjdGlvbkVycm9yT2NjdXJyZWQoRXhjZXB0aW9uIGUsIAorICAgIHZvaWQgY29ubmVjdGlvbkVycm9yT2NjdXJyZWQoRXhjZXB0aW9uIGUsCiAgICAgICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbkhvbGRlciBjb25uSG9sZGVyT2JqZWN0KSB7Ci0JICAgIAorCiAgICAgICAgICBDb25uZWN0aW9uRXZlbnRMaXN0ZW5lciBjZWwgPSB0aGlzLmxpc3RlbmVyOwogICAgICAgICAgQ29ubmVjdGlvbkV2ZW50IGNlID0gbnVsbDsKICAgICAgICAgIGNlID0gZSA9PSBudWxsID8gbmV3IENvbm5lY3Rpb25FdmVudCh0aGlzLCBDb25uZWN0aW9uRXZlbnQuQ09OTkVDVElPTl9FUlJPUl9PQ0NVUlJFRCkKICAgICAgICAgICAgICAgICAgICAgOiBuZXcgQ29ubmVjdGlvbkV2ZW50KHRoaXMsIENvbm5lY3Rpb25FdmVudC5DT05ORUNUSU9OX0VSUk9SX09DQ1VSUkVELCBlKTsKICAgICAgICAgIGlmIChjb25uSG9sZGVyT2JqZWN0ICE9IG51bGwpIHsKICAgICAgICAgICAgICBjZS5zZXRDb25uZWN0aW9uSGFuZGxlKGNvbm5Ib2xkZXJPYmplY3QpOwotICAgICAgICAgfSAgICAKKyAgICAgICAgIH0KIAogICAgICAgICAgY2VsLmNvbm5lY3Rpb25FcnJvck9jY3VycmVkKGNlKTsKICAgICAgICAgIGlzVXNhYmxlID0gZmFsc2U7CiAgICAgfQotICAgIAotICAgIAotICAgIAorCisKKwogICAgIC8qKgogICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gb2JqZWN0IHdoZW4gaXRzIHN0YXJ0IG1ldGhvZAogICAgICAqIGhhcyBiZWVuIGludm9rZWQuCkBAIC02MDYsNyArNjA2LDcgQEAKICAgICAgICAgICAgIGNvbm5lY3Rpb25FcnJvck9jY3VycmVkKGUsIG51bGwpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBvYmplY3Qgd2hlbiBpdHMgZW5kIG1ldGhvZAogICAgICAqIGhhcyBiZWVuIGludm9rZWQuCkBAIC02MjAsNyArNjIwLDcgQEAKICAgICAgICAgICAgIGNvbm5lY3Rpb25FcnJvck9jY3VycmVkKGUsIG51bGwpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IGEgQ29ubmVjdGlvbiBIYW5kbGUgdG8gY2hlY2sgaWYgaXQgaXMKICAgICAgKiB0aGUgYWN0aXZlIENvbm5lY3Rpb24gSGFuZGxlLiBJZiBpdCBpcyBub3QgdGhlIGFjdGl2ZSBDb25uZWN0aW9uCkBAIC02MjksMjQgKzYyOSwyNCBAQAogICAgICAqIENvbm5lY3Rpb24gSGFuZGxlIG9iamVjdCB0byB0aGlzIG9iamVjdCBpZiB0aGUgYWN0aXZlIENvbm5lY3Rpb24KICAgICAgKiBIYW5kbGUgaXMgbnVsbC4KICAgICAgKgotICAgICAqIEBwYXJhbQljaAk8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0aGF0IHJlcXVlc3RzIHRoaXMKLSAgICAgKgkJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZSB3aGV0aGVyCi0gICAgICoJCQlpdCBjYW4gYmUgYWN0aXZlIG9yIG5vdAotICAgICAqIEB0aHJvd3MJU1FMRXhjZXB0aW9uCWluIGNhc2UgdGhlIHBoeXNpY2FsIGlzIG5vdCB2YWxpZCBvcgotICAgICAqCQkJCXRoZXJlIGlzIGFscmVhZHkgYW4gYWN0aXZlIGNvbm5lY3Rpb24gaGFuZGxlCisgICAgICogQHBhcmFtICAgIGNoICAgIDxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRoYXQgcmVxdWVzdHMgdGhpcworICAgICAqICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlIHdoZXRoZXIKKyAgICAgKiAgICAgICAgICAgIGl0IGNhbiBiZSBhY3RpdmUgb3Igbm90CisgICAgICogQHRocm93cyAgICBTUUxFeGNlcHRpb24gICAgaW4gY2FzZSB0aGUgcGh5c2ljYWwgaXMgbm90IHZhbGlkIG9yCisgICAgICogICAgICAgICAgICAgICAgdGhlcmUgaXMgYWxyZWFkeSBhbiBhY3RpdmUgY29ubmVjdGlvbiBoYW5kbGUKICAgICAgKi8KLSAgICAgCisKICAgICB2b2lkIGNoZWNrSWZBY3RpdmUoQ29ubmVjdGlvbkhvbGRlciBjaCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGlzRGVzdHJveWVkID09IHRydWUgfHwgaXNVc2FibGUgPT0gZmFsc2UpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24oIlRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB1c2FibGUiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZihhY3RpdmVDb25uZWN0aW9uSGFuZGxlID09IG51bGwpIHsKICAgICAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBjaDsKICAgICAgICAgICAgIGNoLnNldEFjdGl2ZSh0cnVlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZihhY3RpdmVDb25uZWN0aW9uSGFuZGxlICE9IGNoKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBoYW5kbGUgY2Fubm90IGJlIHVzZWQgYXMgYW5vdGhlciBjb25uZWN0aW9uIGlzIGN1cnJlbnRseSBhY3RpdmUiKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEuamF2YQppbmRleCAyMGYwM2FhLi5mNjUwZDQxIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEuamF2YQpAQCAtMjUsOCArMjUsOCBAQAogLyoqCiAgKiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA4LzAzCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wOC8wMworICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogcHVibGljIGNsYXNzIE1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEgaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhIHsKIApAQCAtNDEsODEgKzQxLDgxIEBACiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0b3IgZm9yIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGE8L2NvZGU+CiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWMJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+Ci0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4JaWYgZ2V0dGluZyB0aGUgRGF0YWJhc2VNZXRhRGF0YSBvYmplY3QgZmFpbHMKKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4gICAgaWYgZ2V0dGluZyB0aGUgRGF0YWJhc2VNZXRhRGF0YSBvYmplY3QgZmFpbHMKICAgICAgKi8KICAgICBwdWJsaWMgTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YShNYW5hZ2VkQ29ubmVjdGlvbiBtYykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHRoaXMubWMgPSBtYzsKICAgICAgICAgICAgIGRtZCA9IG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKS5nZXRNZXRhRGF0YSgpOwogICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX21kIik7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX21kIik7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBwcm9kdWN0IG5hbWUgb2YgdGhlIHVuZGVybHlpbmcgRUlTIGluc3RhbmNlIGNvbm5lY3RlZAogICAgICAqIHRocm91Z2ggdGhlIE1hbmFnZWRDb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybglQcm9kdWN0IG5hbWUgb2YgdGhlIEVJUyBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBQcm9kdWN0IG5hbWUgb2YgdGhlIEVJUyBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRFSVNQcm9kdWN0TmFtZSgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXR1cm4gZG1kLmdldERhdGFiYXNlUHJvZHVjdE5hbWUoKTsKICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19laXNfcHJvZG5hbWUiLCBzcWxlKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZWlzX3Byb2RuYW1lIiwgc3FsZSk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBwcm9kdWN0IHZlcnNpb24gb2YgdGhlIHVuZGVybHlpbmcgRUlTIGluc3RhbmNlIGNvbm5lY3RlZAogICAgICAqIHRocm91Z2ggdGhlIE1hbmFnZWRDb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybglQcm9kdWN0IHZlcnNpb24gb2YgdGhlIEVJUyBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBQcm9kdWN0IHZlcnNpb24gb2YgdGhlIEVJUyBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRFSVNQcm9kdWN0VmVyc2lvbigpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXR1cm4gZG1kLmdldERhdGFiYXNlUHJvZHVjdFZlcnNpb24oKTsKICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19laXNfcHJvZHZlcnMiLCBzcWxlKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZWlzX3Byb2R2ZXJzIiwgc3FsZSk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCksIHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgbWF4aW11bSBsaW1pdCBvbiBudW1iZXIgb2YgYWN0aXZlIGNvbmN1cnJlbnQgY29ubmVjdGlvbnMKICAgICAgKiB0aGF0IGFuIEVJUyBpbnN0YW5jZSBjYW4gc3VwcG9ydCBhY3Jvc3MgY2xpZW50IHByb2Nlc3Nlcy4KICAgICAgKgotICAgICAqIEByZXR1cm4JTWF4aW11bSBsaW1pdCBmb3IgbnVtYmVyIG9mIGFjdGl2ZSBjb25jdXJyZW50IGNvbm5lY3Rpb25zCi0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIE1heGltdW0gbGltaXQgZm9yIG51bWJlciBvZiBhY3RpdmUgY29uY3VycmVudCBjb25uZWN0aW9ucworICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIGludCBnZXRNYXhDb25uZWN0aW9ucygpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXR1cm4gZG1kLmdldE1heENvbm5lY3Rpb25zKCk7CiAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZWlzX21heGNvbm4iKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZWlzX21heGNvbm4iKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIG5hbWUgb2YgdGhlIHVzZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBNYW5hZ2VkQ29ubmVjdGlvbiBpbnN0YW5jZS4gVGhlIG5hbWUKICAgICAgKiBjb3JyZXNwb25kcyB0byB0aGUgcmVzb3VyY2UgcHJpbmNpcGFsIHVuZGVyIHdob3NlIHdob3NlIHNlY3VyaXR5IGNvbnRleHQsIGEgY29ubmVjdGlvbgogICAgICAqIHRvIHRoZSBFSVMgaW5zdGFuY2UgaGFzIGJlZW4gZXN0YWJsaXNoZWQuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCW5hbWUgb2YgdGhlIHVzZXIKLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgbmFtZSBvZiB0aGUgdXNlcgorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRVc2VyTmFtZSgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGpha2FydGEucmVzb3VyY2Uuc3BpLnNlY3VyaXR5LlBhc3N3b3JkQ3JlZGVudGlhbCBwYyA9IG1jLmdldFBhc3N3b3JkQ3JlZGVudGlhbCgpOwogICAgICAgICBpZihwYyAhPSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm4gcGMuZ2V0VXNlck5hbWUoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXR1cm4gbWMuZ2V0TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KCkuZ2V0VXNlcigpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvWEFSZXNvdXJjZUltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvWEFSZXNvdXJjZUltcGwuamF2YQppbmRleCBkYWQxZDc3Li40ODJmMzMyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL1hBUmVzb3VyY2VJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9YQVJlc291cmNlSW1wbC5qYXZhCkBAIC0yNCwxNDggKzI0LDE0OCBAQAogLyoqCiAgKiA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiB3cmFwcGVyIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDgvMjMKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA4LzIzCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiBwdWJsaWMgY2xhc3MgWEFSZXNvdXJjZUltcGwgaW1wbGVtZW50cyBYQVJlc291cmNlIHsKIAogICAgIFhBUmVzb3VyY2UgeGFyOwogICAgIE1hbmFnZWRDb25uZWN0aW9uIG1jOwotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0b3IgZm9yIFhBUmVzb3VyY2VJbXBsCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGFyCTxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+Ci0gICAgICogQHBhcmFtCW1jCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB4YXIgICAgPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFhBUmVzb3VyY2VJbXBsKFhBUmVzb3VyY2UgeGFyLCBNYW5hZ2VkQ29ubmVjdGlvbiBtYykgewogICAgICAgICB0aGlzLnhhciA9IHhhcjsKICAgICAgICAgdGhpcy5tYyA9IG1jOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbW1pdCB0aGUgZ2xvYmFsIHRyYW5zYWN0aW9uIHNwZWNpZmllZCBieSB4aWQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGlkCUEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKLSAgICAgKiBAcGFyYW0Jb25lUGhhc2UJSWYgdHJ1ZSwgdGhlIHJlc291cmNlIG1hbmFnZXIgc2hvdWxkIHVzZSBhIG9uZS1waGFzZSBjb21taXQgCi0gICAgICogICAgICAgCSAgICAgICAgCXByb3RvY29sIHRvIGNvbW1pdCB0aGUgd29yayBkb25lIG9uIGJlaGFsZiBvZiB4aWQuCisgICAgICogQHBhcmFtICAgIHhpZCAgICBBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCisgICAgICogQHBhcmFtICAgIG9uZVBoYXNlICAgIElmIHRydWUsIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHNob3VsZCB1c2UgYSBvbmUtcGhhc2UgY29tbWl0CisgICAgICogICAgICAgICAgICAgICAgICAgICAgIHByb3RvY29sIHRvIGNvbW1pdCB0aGUgd29yayBkb25lIG9uIGJlaGFsZiBvZiB4aWQuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgY29tbWl0KFhpZCB4aWQsIGJvb2xlYW4gb25lUGhhc2UpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIC8vdGhlIG1jLnRyYW5zYWN0aW9uQ29tcGxldGVkIGNhbGwgaGFzIGNvbWUgaGVyZSBiZWNhc3VlCi0JLy90aGUgdHJhbnNhY3Rpb24gKmFjdHVhbGx5KiBjb21wbGV0ZXMgYWZ0ZXIgdGhlIGZsb3cKLQkvL3JlYWNoZXMgaGVyZS4gdGhlIGVuZCgpIG1ldGhvZCBtaWdodCBub3QgcmVhbGx5IHNpZ25hbAotCS8vY29tcGxldGlvbiBvZiB0cmFuc2FjdGlvbiBpbiBjYXNlIHRoZSB0cmFuc2FjdGlvbiBpcwotCS8vc3VzcGVuZGVkLiBJbiBjYXNlIG9mIHRyYW5zYWN0aW9uIHN1c3BlbnNpb24sIHRoZSBlbmQKLQkvL21ldGhvZCBpcyBzdGlsbCBjYWxsZWQgYnkgdGhlIHRyYW5zYWN0aW9uIG1hbmFnZXIKLQltYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOworICAgIC8vdGhlIHRyYW5zYWN0aW9uICphY3R1YWxseSogY29tcGxldGVzIGFmdGVyIHRoZSBmbG93CisgICAgLy9yZWFjaGVzIGhlcmUuIHRoZSBlbmQoKSBtZXRob2QgbWlnaHQgbm90IHJlYWxseSBzaWduYWwKKyAgICAvL2NvbXBsZXRpb24gb2YgdHJhbnNhY3Rpb24gaW4gY2FzZSB0aGUgdHJhbnNhY3Rpb24gaXMKKyAgICAvL3N1c3BlbmRlZC4gSW4gY2FzZSBvZiB0cmFuc2FjdGlvbiBzdXNwZW5zaW9uLCB0aGUgZW5kCisgICAgLy9tZXRob2QgaXMgc3RpbGwgY2FsbGVkIGJ5IHRoZSB0cmFuc2FjdGlvbiBtYW5hZ2VyCisgICAgbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKICAgICAgICAgeGFyLmNvbW1pdCh4aWQsIG9uZVBoYXNlKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBFbmRzIHRoZSB3b3JrIHBlcmZvcm1lZCBvbiBiZWhhbGYgb2YgYSB0cmFuc2FjdGlvbiBicmFuY2guCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGlkCUEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIgdGhhdCBpcyB0aGUgc2FtZSBhcyB3aGF0IAotICAgICAqCQkJd2FzIHVzZWQgcHJldmlvdXNseSBpbiB0aGUgc3RhcnQgbWV0aG9kLgotICAgICAqIEBwYXJhbQlmbGFncwlPbmUgb2YgVE1TVUNDRVNTLCBUTUZBSUwsIG9yIFRNU1VTUEVORAorICAgICAqIEBwYXJhbSAgICB4aWQgICAgQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllciB0aGF0IGlzIHRoZSBzYW1lIGFzIHdoYXQKKyAgICAgKiAgICAgICAgICAgIHdhcyB1c2VkIHByZXZpb3VzbHkgaW4gdGhlIHN0YXJ0IG1ldGhvZC4KKyAgICAgKiBAcGFyYW0gICAgZmxhZ3MgICAgT25lIG9mIFRNU1VDQ0VTUywgVE1GQUlMLCBvciBUTVNVU1BFTkQKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlbmQoWGlkIHhpZCwgaW50IGZsYWdzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICB4YXIuZW5kKHhpZCwgZmxhZ3MpOwogICAgICAgICAvL0dKQ0lOVAotCS8vbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKKyAgICAvL21jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGVsbCB0aGUgcmVzb3VyY2UgbWFuYWdlciB0byBmb3JnZXQgYWJvdXQgYSBoZXVyaXN0aWNhbGx5IGNvbXBsZXRlZCB0cmFuc2FjdGlvbiBicmFuY2guCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGlkCUEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKKyAgICAgKiBAcGFyYW0gICAgeGlkICAgIEEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBmb3JnZXQoWGlkIHhpZCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgeGFyLmZvcmdldCh4aWQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIE9idGFpbiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIHNldCBmb3IgdGhpcyAKKyAgICAgKiBPYnRhaW4gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBzZXQgZm9yIHRoaXMKICAgICAgKiA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JdGhlIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaW4gc2Vjb25kcworICAgICAqIEByZXR1cm4gICAgdGhlIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaW4gc2Vjb25kcwogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0VHJhbnNhY3Rpb25UaW1lb3V0KCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIHhhci5nZXRUcmFuc2FjdGlvblRpbWVvdXQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSByZXNvdXJjZSBtYW5hZ2VyIGluc3RhbmNlIAotICAgICAqIHJlcHJlc2VudGVkIGJ5IHRoZSB0YXJnZXQgb2JqZWN0IGlzIHRoZSBzYW1lIGFzIHRoZSByZXNvdWNlIG1hbmFnZXIgCisgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIGRldGVybWluZSBpZiB0aGUgcmVzb3VyY2UgbWFuYWdlciBpbnN0YW5jZQorICAgICAqIHJlcHJlc2VudGVkIGJ5IHRoZSB0YXJnZXQgb2JqZWN0IGlzIHRoZSBzYW1lIGFzIHRoZSByZXNvdWNlIG1hbmFnZXIKICAgICAgKiBpbnN0YW5jZSByZXByZXNlbnRlZCBieSB0aGUgcGFyYW1ldGVyIHhhcmVzLgogICAgICAqCi0gICAgICogQHBhcmFtCXhhcmVzCUFuIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IG9iamVjdCB3aG9zZSByZXNvdXJjZSBtYW5hZ2VyIAotICAgICAqIAkJCWluc3RhbmNlIGlzIHRvIGJlIGNvbXBhcmVkIHdpdGggdGhlIHJlc291cmNlCi0gICAgICogQHJldHVybgl0cnVlIGlmIGl0J3MgdGhlIHNhbWUgUk0gaW5zdGFuY2U7IG90aGVyd2lzZSBmYWxzZS4KKyAgICAgKiBAcGFyYW0gICAgeGFyZXMgICAgQW4gPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gb2JqZWN0IHdob3NlIHJlc291cmNlIG1hbmFnZXIKKyAgICAgKiAgICAgICAgICAgICBpbnN0YW5jZSBpcyB0byBiZSBjb21wYXJlZCB3aXRoIHRoZSByZXNvdXJjZQorICAgICAqIEByZXR1cm4gICAgdHJ1ZSBpZiBpdCdzIHRoZSBzYW1lIFJNIGluc3RhbmNlOyBvdGhlcndpc2UgZmFsc2UuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gaXNTYW1lUk0oWEFSZXNvdXJjZSB4YXJlcykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIHhhci5pc1NhbWVSTSh4YXJlcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogQXNrIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHRvIHByZXBhcmUgZm9yIGEgdHJhbnNhY3Rpb24gY29tbWl0IAorICAgICAqIEFzayB0aGUgcmVzb3VyY2UgbWFuYWdlciB0byBwcmVwYXJlIGZvciBhIHRyYW5zYWN0aW9uIGNvbW1pdAogICAgICAqIG9mIHRoZSB0cmFuc2FjdGlvbiBzcGVjaWZpZWQgaW4geGlkLgogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCi0gICAgICogQHJldHVybglBIHZhbHVlIGluZGljYXRpbmcgdGhlIHJlc291cmNlIG1hbmFnZXIncyB2b3RlIG9uIHRoZSAKLSAgICAgKgkJb3V0Y29tZSBvZiB0aGUgdHJhbnNhY3Rpb24uIFRoZSBwb3NzaWJsZSB2YWx1ZXMKLSAgICAgKgkJYXJlOiBYQV9SRE9OTFkgb3IgWEFfT0suIElmIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHdhbnRzIAotICAgICAqCQl0byByb2xsIGJhY2sgdGhlIHRyYW5zYWN0aW9uLCBpdCBzaG91bGQgZG8gc28KLSAgICAgKgkJYnkgcmFpc2luZyBhbiBhcHByb3ByaWF0ZSA8Y29kZT5YQUV4Y2VwdGlvbjwvY29kZT4gaW4gdGhlIHByZXBhcmUgbWV0aG9kLgorICAgICAqIEBwYXJhbSAgICB4aWQgICAgQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgorICAgICAqIEByZXR1cm4gICAgQSB2YWx1ZSBpbmRpY2F0aW5nIHRoZSByZXNvdXJjZSBtYW5hZ2VyJ3Mgdm90ZSBvbiB0aGUKKyAgICAgKiAgICAgICAgb3V0Y29tZSBvZiB0aGUgdHJhbnNhY3Rpb24uIFRoZSBwb3NzaWJsZSB2YWx1ZXMKKyAgICAgKiAgICAgICAgYXJlOiBYQV9SRE9OTFkgb3IgWEFfT0suIElmIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHdhbnRzCisgICAgICogICAgICAgIHRvIHJvbGwgYmFjayB0aGUgdHJhbnNhY3Rpb24sIGl0IHNob3VsZCBkbyBzbworICAgICAqICAgICAgICBieSByYWlzaW5nIGFuIGFwcHJvcHJpYXRlIDxjb2RlPlhBRXhjZXB0aW9uPC9jb2RlPiBpbiB0aGUgcHJlcGFyZSBtZXRob2QuCiAgICAgICovCiAgICAgcHVibGljIGludCBwcmVwYXJlKFhpZCB4aWQpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiB4YXIucHJlcGFyZSh4aWQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIE9idGFpbiBhIGxpc3Qgb2YgcHJlcGFyZWQgdHJhbnNhY3Rpb24gYnJhbmNoZXMgZnJvbSBhIHJlc291cmNlIG1hbmFnZXIuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZmxhZwlPbmUgb2YgVE1TVEFSVFJTQ0FOLCBUTUVORFJTQ0FOLCBUTU5PRkxBR1MuIFRNTk9GTEFHUyAKLSAgICAgKgkJCW11c3QgYmUgdXNlZCB3aGVuIG5vIG90aGVyIGZsYWdzIGFyZSBzZXQgaW4gZmxhZ3MuCi0gICAgICogQHJldHVybglUaGUgcmVzb3VyY2UgbWFuYWdlciByZXR1cm5zIHplcm8gb3IgbW9yZSBYSURzIGZvciB0aGUgdHJhbnNhY3Rpb24gCi0gICAgICoJCWJyYW5jaGVzIHRoYXQgYXJlIGN1cnJlbnRseSBpbiBhIHByZXBhcmVkIG9yIGhldXJpc3RpY2FsbHkgCi0gICAgICoJCWNvbXBsZXRlZCBzdGF0ZS4gSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgb3BlcmF0aW9uLCB0aGUgcmVzb3VyY2UKLSAgICAgKgkJbWFuYWdlciBzaG91bGQgdGhyb3cgdGhlIGFwcHJvcHJpYXRlIDxjb2RlPlhBRXhjZXB0aW9uPC9jb2RlPi4KKyAgICAgKiBAcGFyYW0gICAgZmxhZyAgICBPbmUgb2YgVE1TVEFSVFJTQ0FOLCBUTUVORFJTQ0FOLCBUTU5PRkxBR1MuIFRNTk9GTEFHUworICAgICAqICAgICAgICAgICAgbXVzdCBiZSB1c2VkIHdoZW4gbm8gb3RoZXIgZmxhZ3MgYXJlIHNldCBpbiBmbGFncy4KKyAgICAgKiBAcmV0dXJuICAgIFRoZSByZXNvdXJjZSBtYW5hZ2VyIHJldHVybnMgemVybyBvciBtb3JlIFhJRHMgZm9yIHRoZSB0cmFuc2FjdGlvbgorICAgICAqICAgICAgICBicmFuY2hlcyB0aGF0IGFyZSBjdXJyZW50bHkgaW4gYSBwcmVwYXJlZCBvciBoZXVyaXN0aWNhbGx5CisgICAgICogICAgICAgIGNvbXBsZXRlZCBzdGF0ZS4gSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgb3BlcmF0aW9uLCB0aGUgcmVzb3VyY2UKKyAgICAgKiAgICAgICAgbWFuYWdlciBzaG91bGQgdGhyb3cgdGhlIGFwcHJvcHJpYXRlIDxjb2RlPlhBRXhjZXB0aW9uPC9jb2RlPi4KICAgICAgKi8KICAgICBwdWJsaWMgWGlkW10gcmVjb3ZlcihpbnQgZmxhZykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIHhhci5yZWNvdmVyKGZsYWcpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEluZm9ybSB0aGUgcmVzb3VyY2UgbWFuYWdlciB0byByb2xsIGJhY2sgd29yayBkb25lIG9uIGJlaGFsZiBvZiBhIHRyYW5zYWN0aW9uIGJyYW5jaAogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCisgICAgICogQHBhcmFtICAgIHhpZCAgICBBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcm9sbGJhY2soWGlkIHhpZCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgLy90aGUgbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQgY2FsbCBoYXMgY29tZSBoZXJlIGJlY2FzdWUKLQkvL3RoZSB0cmFuc2FjdGlvbiAqYWN0dWFsbHkqIGNvbXBsZXRlcyBhZnRlciB0aGUgZmxvdwotCS8vcmVhY2hlcyBoZXJlLiB0aGUgZW5kKCkgbWV0aG9kIG1pZ2h0IG5vdCByZWFsbHkgc2lnbmFsCi0JLy9jb21wbGV0aW9uIG9mIHRyYW5zYWN0aW9uIGluIGNhc2UgdGhlIHRyYW5zYWN0aW9uIGlzCi0JLy9zdXNwZW5kZWQuIEluIGNhc2Ugb2YgdHJhbnNhY3Rpb24gc3VzcGVuc2lvbiwgdGhlIGVuZAotCS8vbWV0aG9kIGlzIHN0aWxsIGNhbGxlZCBieSB0aGUgdHJhbnNhY3Rpb24gbWFuYWdlcgorICAgIC8vdGhlIHRyYW5zYWN0aW9uICphY3R1YWxseSogY29tcGxldGVzIGFmdGVyIHRoZSBmbG93CisgICAgLy9yZWFjaGVzIGhlcmUuIHRoZSBlbmQoKSBtZXRob2QgbWlnaHQgbm90IHJlYWxseSBzaWduYWwKKyAgICAvL2NvbXBsZXRpb24gb2YgdHJhbnNhY3Rpb24gaW4gY2FzZSB0aGUgdHJhbnNhY3Rpb24gaXMKKyAgICAvL3N1c3BlbmRlZC4gSW4gY2FzZSBvZiB0cmFuc2FjdGlvbiBzdXNwZW5zaW9uLCB0aGUgZW5kCisgICAgLy9tZXRob2QgaXMgc3RpbGwgY2FsbGVkIGJ5IHRoZSB0cmFuc2FjdGlvbiBtYW5hZ2VyCiAgICAgICAgIG1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiAgICAgICAgIHhhci5yb2xsYmFjayh4aWQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIGZvciB0aGlzIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCXNlY29uZHMJdGhlIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaW4gc2Vjb25kcy4KLSAgICAgKiBAcmV0dXJuCXRydWUgaWYgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBpcyBzZXQgc3VjY2Vzc2Z1bGx5OyBvdGhlcndpc2UgZmFsc2UuCisgICAgICogQHBhcmFtICAgIHNlY29uZHMgICAgdGhlIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaW4gc2Vjb25kcy4KKyAgICAgKiBAcmV0dXJuICAgIHRydWUgaWYgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBpcyBzZXQgc3VjY2Vzc2Z1bGx5OyBvdGhlcndpc2UgZmFsc2UuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gc2V0VHJhbnNhY3Rpb25UaW1lb3V0KGludCBzZWNvbmRzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICByZXR1cm4geGFyLnNldFRyYW5zYWN0aW9uVGltZW91dChzZWNvbmRzKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTdGFydCB3b3JrIG9uIGJlaGFsZiBvZiBhIHRyYW5zYWN0aW9uIGJyYW5jaCBzcGVjaWZpZWQgaW4geGlkLgogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVzb3VyY2UKLSAgICAgKiBAcmV0dXJuCWZsYWdzCU9uZSBvZiBUTU5PRkxBR1MsIFRNSk9JTiwgb3IgVE1SRVNVTUUKKyAgICAgKiBAcGFyYW0gICAgeGlkICAgIEEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXNvdXJjZQorICAgICAqIEByZXR1cm4gICAgZmxhZ3MgICAgT25lIG9mIFRNTk9GTEFHUywgVE1KT0lOLCBvciBUTVJFU1VNRQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHN0YXJ0KFhpZCB4aWQsIGludCBmbGFncykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgLy9HSkNJTlQKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9idWlsZC54bWwKaW5kZXggOTY3ODY4Yi4uNjQxMDU1NyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9idWlsZC54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPHByb2plY3QgbmFtZT0iamRiY19jb25uZWN0b3IiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9IiBkZWZhdWx0PSJidWlsZCI+CiAgIDxwcm9wZXJ0eSBuYW1lPSJwa2cuZGlyIiB2YWx1ZT0iY29tL3N1bi9namMvc3BpIi8+Ci0gCisKICAgPHRhcmdldCBuYW1lPSJjbGVhbiI+CiAgICAgPGFudCBhbnRmaWxlPSJidWlsZC54bWwiIGRpcj0iJHtnamMuaG9tZX0vYmluIiB0YXJnZXQ9ImNsZWFuIi8+CiAgIDwvdGFyZ2V0PgpAQCAtMzcsNSArMzcsNSBAQAogCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQxNCIgZGVwZW5kcz0iY29tcGlsZTE0Ii8+CiAKLQk8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJidWlsZDEzLCBidWlsZDE0Ii8+CisgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iYnVpbGQxMywgYnVpbGQxNCIvPgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvTWV0aG9kRXhlY3V0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL01ldGhvZEV4ZWN1dG9yLmphdmEKaW5kZXggY2UzMjFhZi4uOWU3ZjI1MyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvTWV0aG9kRXhlY3V0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9NZXRob2RFeGVjdXRvci5qYXZhCkBAIC0yNiw4ICsyNiw4IEBACiAvKioKICAqIEV4ZWN1dGUgdGhlIG1ldGhvZHMgYmFzZWQgb24gdGhlIHBhcmFtZXRlcnMuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8yMwotICogQGF1dGhvcglCaW5vZCBQLkcKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMjMKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCiAgKi8KIHB1YmxpYyBjbGFzcyBNZXRob2RFeGVjdXRvciBpbXBsZW1lbnRzIGphdmEuaW8uU2VyaWFsaXphYmxlewogCkBAIC0zOSwxMzAgKzM5LDEzMCBAQAogICAgIC8qKgogICAgICAqIEV4Y2V1dGUgYSBzaW1wbGUgc2V0IE1ldGhvZC4KICAgICAgKgotICAgICAqIEBwYXJhbQl2YWx1ZQlWYWx1ZSB0byBiZSBzZXQuCi0gICAgICogQHBhcmFtCW1ldGhvZAk8Y29kZT5NZXRob2Q8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAcGFyYW0Jb2JqCU9iamVjdCBvbiB3aGljaCB0aGUgbWV0aG9kIHRvIGJlIGV4ZWN1dGVkLgorICAgICAqIEBwYXJhbSAgICB2YWx1ZSAgICBWYWx1ZSB0byBiZSBzZXQuCisgICAgICogQHBhcmFtICAgIG1ldGhvZCAgICA8Y29kZT5NZXRob2Q8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgb2JqICAgIE9iamVjdCBvbiB3aGljaCB0aGUgbWV0aG9kIHRvIGJlIGV4ZWN1dGVkLgogICAgICAqIEB0aHJvd3MgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiwgaW4gY2FzZSBvZiB0aGUgbWlzbWF0Y2ggb2YgcGFyYW1ldGVyIHZhbHVlcyBvcgotICAgICAqCQlhIHNlY3VyaXR5IHZpb2xhdGlvbi4gICAgIAorICAgICAqICAgICAgICBhIHNlY3VyaXR5IHZpb2xhdGlvbi4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBydW5KYXZhQmVhbk1ldGhvZChTdHJpbmcgdmFsdWUsIE1ldGhvZCBtZXRob2QsIE9iamVjdCBvYmopIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKLSAgICAJaWYgKHZhbHVlPT1udWxsIHx8IHZhbHVlLnRyaW0oKS5lcXVhbHMoIiIpKSB7Ci0gICAgCSAgICByZXR1cm47Ci0gICAgCX0KLSAgICAJdHJ5IHsKLSAgICAJICAgIENsYXNzW10gcGFyYW1ldGVycyA9IG1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpOwotICAgIAkgICAgaWYgKCBwYXJhbWV0ZXJzLmxlbmd0aCA9PSAxKSB7Ci0gICAgCSAgICAgICAgT2JqZWN0W10gdmFsdWVzID0gbmV3IE9iamVjdFsxXTsKLSAgICAJICAgIAl2YWx1ZXNbMF0gPSBjb252ZXJ0VHlwZShwYXJhbWV0ZXJzWzBdLCB2YWx1ZSk7Ci0gICAgCSAgICAJbWV0aG9kLmludm9rZShvYmosIHZhbHVlcyk7Ci0gICAgCSAgICB9Ci0gICAgCX0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gaWFlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGlhZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7Ci0gICAgCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFyZ3VtZW50cyBhcmUgd3JvbmcgZm9yIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsgICAgCQotICAgIAl9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGl0ZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpdGUpOwotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOyAgICAJCi0gICAgCX0KKyAgICAgICAgaWYgKHZhbHVlPT1udWxsIHx8IHZhbHVlLnRyaW0oKS5lcXVhbHMoIiIpKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIENsYXNzW10gcGFyYW1ldGVycyA9IG1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpOworICAgICAgICAgICAgaWYgKCBwYXJhbWV0ZXJzLmxlbmd0aCA9PSAxKSB7CisgICAgICAgICAgICAgICAgT2JqZWN0W10gdmFsdWVzID0gbmV3IE9iamVjdFsxXTsKKyAgICAgICAgICAgICAgICB2YWx1ZXNbMF0gPSBjb252ZXJ0VHlwZShwYXJhbWV0ZXJzWzBdLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgbWV0aG9kLmludm9rZShvYmosIHZhbHVlcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gaWFlKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGlhZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFyZ3VtZW50cyBhcmUgd3JvbmcgZm9yIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKKyAgICAgICAgfSBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBpdGUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaXRlKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIEV4ZWN1dGVzIHRoZSBtZXRob2QuICAgICAKKyAgICAgKiBFeGVjdXRlcyB0aGUgbWV0aG9kLgogICAgICAqCi0gICAgICogQHBhcmFtCW1ldGhvZCA8Y29kZT5NZXRob2Q8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAcGFyYW0Jb2JqCU9iamVjdCBvbiB3aGljaCB0aGUgbWV0aG9kIHRvIGJlIGV4ZWN1dGVkLgotICAgICAqIEBwYXJhbQl2YWx1ZXMJUGFyYW1ldGVyIHZhbHVlcyBmb3IgZXhlY3V0aW5nIHRoZSBtZXRob2QuCisgICAgICogQHBhcmFtICAgIG1ldGhvZCA8Y29kZT5NZXRob2Q8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgb2JqICAgIE9iamVjdCBvbiB3aGljaCB0aGUgbWV0aG9kIHRvIGJlIGV4ZWN1dGVkLgorICAgICAqIEBwYXJhbSAgICB2YWx1ZXMgICAgUGFyYW1ldGVyIHZhbHVlcyBmb3IgZXhlY3V0aW5nIHRoZSBtZXRob2QuCiAgICAgICogQHRocm93cyAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+LCBpbiBjYXNlIG9mIHRoZSBtaXNtYXRjaCBvZiBwYXJhbWV0ZXIgdmFsdWVzIG9yCi0gICAgICoJCWEgc2VjdXJpdHkgdmlvbGF0aW9uLgorICAgICAqICAgICAgICBhIHNlY3VyaXR5IHZpb2xhdGlvbi4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBydW5NZXRob2QoTWV0aG9kIG1ldGhvZCwgT2JqZWN0IG9iaiwgVmVjdG9yIHZhbHVlcykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewotICAgIAl0cnkgewotCSAgICBDbGFzc1tdIHBhcmFtZXRlcnMgPSBtZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKTsKLQkgICAgaWYgKHZhbHVlcy5zaXplKCkgIT0gcGFyYW1ldGVycy5sZW5ndGgpIHsKLQkgICAgICAgIHJldHVybjsKLQkgICAgfQotICAgIAkgICAgT2JqZWN0W10gYWN0dWFsVmFsdWVzID0gbmV3IE9iamVjdFtwYXJhbWV0ZXJzLmxlbmd0aF07Ci0gICAgCSAgICBmb3IgKGludCBpID0wOyBpPHBhcmFtZXRlcnMubGVuZ3RoIDsgaSsrKSB7Ci0gICAgCSAgICAJU3RyaW5nIHZhbCA9IChTdHJpbmcpIHZhbHVlcy5nZXQoaSk7Ci0gICAgCSAgICAJaWYgKHZhbC50cmltKCkuZXF1YWxzKCJOVUxMIikpIHsKLSAgICAJICAgIAkgICAgYWN0dWFsVmFsdWVzW2ldID0gbnVsbDsKLSAgICAJICAgIAl9IGVsc2UgewotICAgIAkgICAgCSAgICBhY3R1YWxWYWx1ZXNbaV0gPSBjb252ZXJ0VHlwZShwYXJhbWV0ZXJzW2ldLCB2YWwpOwotICAgIAkgICAgCX0KLSAgICAJICAgIH0KLSAgICAJICAgIG1ldGhvZC5pbnZva2Uob2JqLCBhY3R1YWxWYWx1ZXMpOwotICAgIAl9Y2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gaWFlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGlhZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7Ci0gICAgCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFyZ3VtZW50cyBhcmUgd3JvbmcgZm9yIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsgICAgCQotICAgIAl9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGl0ZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpdGUpOwotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOyAgICAJCi0gICAgCX0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgQ2xhc3NbXSBwYXJhbWV0ZXJzID0gbWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCk7CisgICAgICAgIGlmICh2YWx1ZXMuc2l6ZSgpICE9IHBhcmFtZXRlcnMubGVuZ3RoKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIE9iamVjdFtdIGFjdHVhbFZhbHVlcyA9IG5ldyBPYmplY3RbcGFyYW1ldGVycy5sZW5ndGhdOworICAgICAgICAgICAgZm9yIChpbnQgaSA9MDsgaTxwYXJhbWV0ZXJzLmxlbmd0aCA7IGkrKykgeworICAgICAgICAgICAgICAgIFN0cmluZyB2YWwgPSAoU3RyaW5nKSB2YWx1ZXMuZ2V0KGkpOworICAgICAgICAgICAgICAgIGlmICh2YWwudHJpbSgpLmVxdWFscygiTlVMTCIpKSB7CisgICAgICAgICAgICAgICAgICAgIGFjdHVhbFZhbHVlc1tpXSA9IG51bGw7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYWN0dWFsVmFsdWVzW2ldID0gY29udmVydFR5cGUocGFyYW1ldGVyc1tpXSwgdmFsKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtZXRob2QuaW52b2tlKG9iaiwgYWN0dWFsVmFsdWVzKTsKKyAgICAgICAgfWNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGlhZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpYWUpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOworICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWUpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBcmd1bWVudHMgYXJlIHdyb25nIGZvciB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7CisgICAgICAgIH0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gaXRlKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGl0ZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb252ZXJ0cyB0aGUgdHlwZSBmcm9tIFN0cmluZyB0byB0aGUgQ2xhc3MgdHlwZS4KICAgICAgKgotICAgICAqIEBwYXJhbQl0eXBlCQlDbGFzcyBuYW1lIHRvIHdoaWNoIHRoZSBjb252ZXJzaW9uIGlzIHJlcXVpcmVkLgotICAgICAqIEBwYXJhbQlwYXJhbWV0ZXIJU3RyaW5nIHZhbHVlIHRvIGJlIGNvbnZlcnRlZC4KLSAgICAgKiBAcmV0dXJuCUNvbnZlcnRlZCB2YWx1ZS4KKyAgICAgKiBAcGFyYW0gICAgdHlwZSAgICAgICAgQ2xhc3MgbmFtZSB0byB3aGljaCB0aGUgY29udmVyc2lvbiBpcyByZXF1aXJlZC4KKyAgICAgKiBAcGFyYW0gICAgcGFyYW1ldGVyICAgIFN0cmluZyB2YWx1ZSB0byBiZSBjb252ZXJ0ZWQuCisgICAgICogQHJldHVybiAgICBDb252ZXJ0ZWQgdmFsdWUuCiAgICAgICogQHRocm93cyAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+LCBpbiBjYXNlIG9mIHRoZSBtaXNtYXRjaCBvZiBwYXJhbWV0ZXIgdmFsdWVzIG9yCi0gICAgICoJCWEgc2VjdXJpdHkgdmlvbGF0aW9uLiAgICAgCisgICAgICogICAgICAgIGEgc2VjdXJpdHkgdmlvbGF0aW9uLgogICAgICAqLwogICAgIHByaXZhdGUgT2JqZWN0IGNvbnZlcnRUeXBlKENsYXNzIHR5cGUsIFN0cmluZyBwYXJhbWV0ZXIpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKLSAgICAJdHJ5IHsKLSAgICAJICAgIFN0cmluZyB0eXBlTmFtZSA9IHR5cGUuZ2V0TmFtZSgpOwotICAgIAkgICAgaWYgKCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5TdHJpbmciKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5PYmplY3QiKSkgewotICAgIAkgICAgCXJldHVybiBwYXJhbWV0ZXI7Ci0gICAgCSAgICB9Ci0gICAgCQotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiaW50IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuSW50ZWdlciIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBJbnRlZ2VyKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9Ci0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoInNob3J0IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuU2hvcnQiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgU2hvcnQocGFyYW1ldGVyKTsKLSAgICAJICAgIH0gICAgCSAgICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiYnl0ZSIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkJ5dGUiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgQnl0ZShwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgICAJICAgICAgICAJICAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJsb25nIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuTG9uZyIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBMb25nKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgIAkgICAgICAgIAkgICAgICAgCSAgICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiZmxvYXQiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5GbG9hdCIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBGbG9hdChwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJkb3VibGUiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5Eb3VibGUiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgRG91YmxlKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgIAkgICAgICAgIAkgICAgICAgCSAgICAgCSAgICAgICAgCSAgICAgICAJICAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJqYXZhLm1hdGguQmlnRGVjaW1hbCIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBqYXZhLm1hdGguQmlnRGVjaW1hbChwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgICAJICAgICAgICAJICAgICAgIAkgICAgCi0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImphdmEubWF0aC5CaWdJbnRlZ2VyIikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IGphdmEubWF0aC5CaWdJbnRlZ2VyKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgIAkgICAgICAgIAkgICAgICAgCSAgICAgICAgCSAgICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiYm9vbGVhbiIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkJvb2xlYW4iKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgQm9vbGVhbihwYXJhbWV0ZXIpOwotICAgICAgICAgICAgfQkJCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBTdHJpbmcgdHlwZU5hbWUgPSB0eXBlLmdldE5hbWUoKTsKKyAgICAgICAgICAgIGlmICggdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuU3RyaW5nIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuT2JqZWN0IikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyYW1ldGVyOworICAgICAgICAgICAgfQogCi0gICAgCSAgICByZXR1cm4gcGFyYW1ldGVyOwotICAgIAl9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX25mZSIsIHBhcmFtZXRlcik7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24ocGFyYW1ldGVyKyI6IE5vdCBhIHZhbGlkIHZhbHVlIGZvciB0aGlzIG1ldGhvZCAiKTsKLSAgICAJfQorICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiaW50IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuSW50ZWdlciIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnRlZ2VyKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoInNob3J0IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuU2hvcnQiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2hvcnQocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiYnl0ZSIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkJ5dGUiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQnl0ZShwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJsb25nIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuTG9uZyIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBMb25nKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImZsb2F0IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuRmxvYXQiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRmxvYXQocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiZG91YmxlIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuRG91YmxlIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERvdWJsZShwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJqYXZhLm1hdGguQmlnRGVjaW1hbCIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBqYXZhLm1hdGguQmlnRGVjaW1hbChwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJqYXZhLm1hdGguQmlnSW50ZWdlciIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBqYXZhLm1hdGguQmlnSW50ZWdlcihwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJib29sZWFuIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuQm9vbGVhbiIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCb29sZWFuKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBwYXJhbWV0ZXI7CisgICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfbmZlIiwgcGFyYW1ldGVyKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihwYXJhbWV0ZXIrIjogTm90IGEgdmFsaWQgdmFsdWUgZm9yIHRoaXMgbWV0aG9kICIpOworICAgICAgICB9CiAgICAgfQotICAgIAorCiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL1NlY3VyaXR5VXRpbHMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL1NlY3VyaXR5VXRpbHMuamF2YQppbmRleCBmYzE0OWJmLi5mMDA4ZTdmIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9TZWN1cml0eVV0aWxzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvU2VjdXJpdHlVdGlscy5qYXZhCkBAIC0yOSwzNiArMjksMzYgQEAKIC8qKgogICogU2VjdXJpdHlVdGlscyBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzIyCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8yMgorICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogcHVibGljIGNsYXNzIFNlY3VyaXR5VXRpbHMgewogCiAgICAgLyoqCi0gICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QsIGdpdmVuIAotICAgICAqIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LCBzdWJqZWN0IGFuZCB0aGUgCi0gICAgICogPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPi4gSXQgZmlyc3QgY2hlY2tzIGlmIHRoZSAKLSAgICAgKiA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IGlzIG51bGwgb3Igbm90LiBJZiBpdCBpcyBub3QgbnVsbCwgCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QsIGdpdmVuCisgICAgICogdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4sIHN1YmplY3QgYW5kIHRoZQorICAgICAqIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4uIEl0IGZpcnN0IGNoZWNrcyBpZiB0aGUKKyAgICAgKiA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IGlzIG51bGwgb3Igbm90LiBJZiBpdCBpcyBub3QgbnVsbCwKICAgICAgKiBpdCBjb25zdHJ1Y3RzIGEgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3Qgd2l0aAogICAgICAqIHRoZSB1c2VyIGFuZCBwYXNzd29yZCBmaWVsZHMgZnJvbSB0aGUgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBhbmQgcmV0dXJucyB0aGlzCi0gICAgICogPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QuIElmIHRoZSA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IAotICAgICAqIGlzIG51bGwsIGl0IHJldHJpZXZlcyB0aGUgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3RzIGZyb20gCisgICAgICogPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QuIElmIHRoZSA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+CisgICAgICogaXMgbnVsbCwgaXQgcmV0cmlldmVzIHRoZSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdHMgZnJvbQogICAgICAqIHRoZSA8Y29kZT5TdWJqZWN0PC9jb2RlPiBwYXJhbWV0ZXIgYW5kIHJldHVybnMgdGhlIGZpcnN0Ci0gICAgICogPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3Qgd2hpY2ggY29udGFpbnMgYSAKKyAgICAgKiA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdCB3aGljaCBjb250YWlucyBhCiAgICAgICogPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiwgaW5zdGFuY2UgZXF1aXZhbGVudAogICAgICAqIHRvIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LCBwYXJhbWV0ZXIuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWNmCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4KLSAgICAgKiBAcGFyYW0Jc3ViamVjdAk8Y29kZT5TdWJqZWN0PC9jb2RlPgotICAgICAqIEBwYXJhbQlpbmZvCTxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4KLSAgICAgKiBAcmV0dXJuCTxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPglnZW5lcmljIGV4Y2VwdGlvbiBpZiBvcGVyYXRpb24gZmFpbHMKLSAgICAgKiBAdGhyb3dzCTxjb2RlPlNlY3VyaXR5RXhjZXB0aW9uPC9jb2RlPglpZiBhY2Nlc3MgdG8gdGhlIDxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIGlzIGRlbmllZAorICAgICAqIEBwYXJhbSAgICBtY2YgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBzdWJqZWN0ICAgIDxjb2RlPlN1YmplY3Q8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGluZm8gICAgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+ICAgIGdlbmVyaWMgZXhjZXB0aW9uIGlmIG9wZXJhdGlvbiBmYWlscworICAgICAqIEB0aHJvd3MgICAgPGNvZGU+U2VjdXJpdHlFeGNlcHRpb248L2NvZGU+ICAgIGlmIGFjY2VzcyB0byB0aGUgPGNvZGU+U3ViamVjdDwvY29kZT4gaW5zdGFuY2UgaXMgZGVuaWVkCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBQYXNzd29yZENyZWRlbnRpYWwgZ2V0UGFzc3dvcmRDcmVkZW50aWFsKGZpbmFsIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2YsCiAgICAgICAgICBmaW5hbCBTdWJqZWN0IHN1YmplY3QsIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbmZvKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogCi0JaWYgKGluZm8gPT0gbnVsbCkgeworICAgIGlmIChpbmZvID09IG51bGwpIHsKICAgICAgICAgICAgIGlmIChzdWJqZWN0ID09IG51bGwpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC04OSwxNCArODksMTQgQEAKICAgICAgICAgICAgIHJldHVybiBwYzsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0d28gc3RyaW5ncyBhcmUgZXF1YWw7IGZhbHNlIG90aGVyd2lzZQotICAgICAqIAotICAgICAqIEBwYXJhbQlzdHIxCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAcGFyYW0Jc3RyMgk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHJldHVybgl0cnVlCWlmIHRoZSB0d28gc3RyaW5ncyBhcmUgZXF1YWwKLSAgICAgKiAgICAgICAgCWZhbHNlCW90aGVyd2lzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIHN0cjEgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBzdHIyICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHRydWUgICAgaWYgdGhlIHR3byBzdHJpbmdzIGFyZSBlcXVhbAorICAgICAqICAgICAgICAgICAgZmFsc2UgICAgb3RoZXJ3aXNlCiAgICAgICovCiAgICAgc3RhdGljIHByaXZhdGUgYm9vbGVhbiBpc0VxdWFsKFN0cmluZyBzdHIxLCBTdHJpbmcgc3RyMikgewogICAgICAgICBpZiAoc3RyMSA9PSBudWxsKSB7CkBAIC0xMDksMTAgKzEwOSwxMCBAQAogICAgIC8qKgogICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0d28gPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3RzIGFyZSBlcXVhbDsgZmFsc2Ugb3RoZXJ3aXNlCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcEMxCTxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KLSAgICAgKiBAcGFyYW0JcEMyCTxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KLSAgICAgKiBAcmV0dXJuCXRydWUJaWYgdGhlIHR3byBQYXNzd29yZENyZWRlbnRpYWxzIGFyZSBlcXVhbAotICAgICAqICAgICAgICAJZmFsc2UJb3RoZXJ3aXNlCisgICAgICogQHBhcmFtICAgIHBDMSAgICA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHBDMiAgICA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+CisgICAgICogQHJldHVybiAgICB0cnVlICAgIGlmIHRoZSB0d28gUGFzc3dvcmRDcmVkZW50aWFscyBhcmUgZXF1YWwKKyAgICAgKiAgICAgICAgICAgIGZhbHNlICAgIG90aGVyd2lzZQogICAgICAqLwogICAgIHN0YXRpYyBwdWJsaWMgYm9vbGVhbiBpc1Bhc3N3b3JkQ3JlZGVudGlhbEVxdWFsKFBhc3N3b3JkQ3JlZGVudGlhbCBwQzEsIFBhc3N3b3JkQ3JlZGVudGlhbCBwQzIpIHsKICAgICAgICAgaWYgKHBDMSA9PSBwQzIpCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9idWlsZC54bWwKaW5kZXggYTU1YmJmMC4uZjA2MGU3ZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL2J1aWxkLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8cHJvamVjdCBuYW1lPSJqZGJjX2Nvbm5lY3RvciIgYmFzZWRpcj0iLiIgZGVmYXVsdD0iYnVpbGQiPgogICA8cHJvcGVydHkgbmFtZT0icGtnLmRpciIgdmFsdWU9ImNvbS9zdW4vZ2pjL3V0aWwiLz4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJjbGVhbiI+CiAgICAgPGFudCBhbnRmaWxlPSJidWlsZC54bWwiIGRpcj0iJHtnamMuaG9tZX0vYmluIiB0YXJnZXQ9ImNsZWFuIi8+CiAgIDwvdGFyZ2V0PgpAQCAtMzMsNyArMzMsNyBAQAogICAgICAgPGphciBqYXJmaWxlPSIke2Rpc3QuZGlyfS8ke3BrZy5kaXJ9L3V0aWwuamFyIiBiYXNlZGlyPSIke2NsYXNzLmRpcn0iCiAgICAgICAgIGluY2x1ZGVzPSIke3BrZy5kaXJ9LyoqLyoiLz4KICAgPC90YXJnZXQ+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZTEzIiBkZXBlbmRzPSJjb21waWxlIi8+CiAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZTE0IiBkZXBlbmRzPSJjb21waWxlIi8+CiAKQEAgLTQ0LDUgKzQ0LDUgQEAKICAgPHRhcmdldCBuYW1lPSJidWlsZDE0IiBkZXBlbmRzPSJjb21waWxlMTQsIHBhY2thZ2UxNCIvPgogCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImJ1aWxkMTMsIGJ1aWxkMTQiLz4KLSAgCisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3NlcnZsZXQvU2ltcGxlQmFua1NlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3NlcnZsZXQvU2ltcGxlQmFua1NlcnZsZXQuamF2YQppbmRleCBhODIwNWNmLi5iZTlkMmY1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9zZXJ2bGV0L1NpbXBsZUJhbmtTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvc2VydmxldC9TaW1wbGVCYW5rU2VydmxldC5qYXZhCkBAIC0xNywxNiArMTcsMTYgQEAKIHBhY2thZ2Ugc2FtcGxlcy5lamIuaW5zdGFsbGVkX2xpYnJhcmllc19lbWJlZGRlZC5zZXJ2bGV0OwogCiBpbXBvcnQgamF2YS5pby4qOwotaW1wb3J0IGphdmEudXRpbC4qOyAKLWltcG9ydCBqYWthcnRhLnNlcnZsZXQuKjsgCi1pbXBvcnQgamF2YXgubmFtaW5nLio7IAotaW1wb3J0IGpha2FydGEuc2VydmxldC5odHRwLio7IAotaW1wb3J0IGpha2FydGEuZWpiLio7IAoraW1wb3J0IGphdmEudXRpbC4qOworaW1wb3J0IGpha2FydGEuc2VydmxldC4qOworaW1wb3J0IGphdmF4Lm5hbWluZy4qOworaW1wb3J0IGpha2FydGEuc2VydmxldC5odHRwLio7CitpbXBvcnQgamFrYXJ0YS5lamIuKjsKIAogaW1wb3J0IHNhbXBsZXMuZWpiLmluc3RhbGxlZF9saWJyYXJpZXNfZW1iZWRkZWQuZWpiLio7CiBpbXBvcnQgY29tLnN1bi5qZGJjcmEuc3BpLkpkYmNTZXR1cEFkbWluOwogCi1wdWJsaWMgY2xhc3MgU2ltcGxlQmFua1NlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7ICAKK3B1YmxpYyBjbGFzcyBTaW1wbGVCYW5rU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIAogCiAgIEluaXRpYWxDb250ZXh0IGluaXRDb250ZXh0ID0gbnVsbDsKQEAgLTQyLDE0ICs0MiwxNCBAQAogICB7CiAgIH0KIAotICBwdWJsaWMgdm9pZCBkb0dldCAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgCi0gICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7IAorICBwdWJsaWMgdm9pZCBkb0dldCAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkKKyAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICBkb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOwotICB9ICAKKyAgfQogCi0gIC8qKiBoYW5kbGVzIHRoZSBIVFRQIFBPU1Qgb3BlcmF0aW9uICoqLyAKLSAgcHVibGljIHZvaWQgZG9Qb3N0IChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCxIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSAKLSAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgCisgIC8qKiBoYW5kbGVzIHRoZSBIVFRQIFBPU1Qgb3BlcmF0aW9uICoqLworICBwdWJsaWMgdm9pZCBkb1Bvc3QgKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCisgICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgZG9Mb29rdXAoKTsKICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNpbXBsZUJhbmtTZXJ2bGV0IGlzIGV4ZWN1dGluZyIpOwogICAgIFN0cmluZyBTU04gPSByZXF1ZXN0LmdldFBhcmFtZXRlcigiU1NOIik7CkBAIC02NSwxNCArNjUsMTQgQEAKICAgICBTdHJpbmcgemlwQ29kZSA9ICIiOwogICAgIGxvbmcgY3VycmVudFNhdmluZ3NCYWxhbmNlID0gMDsKICAgICBsb25nIGN1cnJlbnRDaGVja2luZ0JhbGFuY2UgPSAwOwotICAgICAKKwogICAgIFN0cmluZyBhY3Rpb24gPSByZXF1ZXN0LmdldFBhcmFtZXRlcigiYWN0aW9uIik7CiAgICAgaWYgKGFjdGlvbi5lcXVhbHMoIkNyZWF0ZSIpKQogICAgIHsKICAgICAgIG1lc3NhZ2UgPSAiQWRkIEN1c3RvbWVyIjsKICAgICAgIGpzcCA9ICIvU2ltcGxlQmFua0FkZC5qc3AiOwogICAgIH0KLSAgICBlbHNlIGlmIChhY3Rpb24uZXF1YWxzKCJBZGQgQ3VzdG9tZXIiKSkgCisgICAgZWxzZSBpZiAoYWN0aW9uLmVxdWFscygiQWRkIEN1c3RvbWVyIikpCiAgICAgewogICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBZGQgQ3VzdG9tZXIgYnV0dG9uIHByZXNzZWQiKTsKICAgICAgIFNTTiA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJTU04iKTsKQEAgLTg5LDcgKzg5LDcgQEAKICAgICAgICAgY3VzdG9tZXJTYXZpbmdzID0gY3VzdG9tZXJTYXZpbmdzTG9jYWxIb21lLmNyZWF0ZShTU04sIGxhc3ROYW1lLCBmaXJzdE5hbWUsIGFkZHJlc3MxLCBhZGRyZXNzMiwgY2l0eSwgc3RhdGUsIHppcENvZGUpOwogICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb3VsZCBub3QgY3JlYXRlIHRoZSBjdXN0b21lciBzYXZpbmdzIHJlbW90ZSBiZWFuIDogIiArIGUudG9TdHJpbmcoKSk7Ci0JdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgLy9yZXR1cm47CiAgICAgICB9CiAgICAgICBtZXNzYWdlID0gIkN1c3RvbWVyIEFkZGVkLiI7CkBAIC0xMDIsNyArMTAyLDcgQEAKICAgICAgICAgY3VzdG9tZXJTYXZpbmdzID0gY3VzdG9tZXJTYXZpbmdzTG9jYWxIb21lLmZpbmRCeVByaW1hcnlLZXkoU1NOKTsKICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ291bGQgbm90IGZpbmQgdGhlIGN1c3RvbWVyIHJlbW90ZSBiZWFuIDogIiArIGUudG9TdHJpbmcoKSk7Ci0JdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgLy9yZXR1cm47CiAgICAgICB9CiAgICAgICBqc3AgPSAiL1NpbXBsZUJhbmtFZGl0LmpzcCI7CkBAIC0xMTQsNyArMTE0LDcgQEAKICAgICAgICAgY3VzdG9tZXJTYXZpbmdzID0gY3VzdG9tZXJTYXZpbmdzTG9jYWxIb21lLmZpbmRCeVByaW1hcnlLZXkoU1NOKTsKICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ291bGQgbm90IGZpbmQgdGhlIGN1c3RvbWVyIHNhdmluZ3MgcmVtb3RlIGJlYW4gOiAiICsgZS50b1N0cmluZygpKTsKLQl0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CisgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAvL3JldHVybjsKICAgICAgIH0KICAgICAgIG1lc3NhZ2UgPSAiRGVsZXRlIEN1c3RvbWVyIjsKQEAgLTEyNiwxMiArMTI2LDEyIEBACiAgICAgICAgIGN1c3RvbWVyU2F2aW5nc0xvY2FsSG9tZS5maW5kQnlQcmltYXJ5S2V5KFNTTikucmVtb3ZlKCk7CiAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvdWxkIG5vdCBkZWxldGUgdGhlIGN1c3RvbWVyIHNhdmluZ3MgYmVhbiA6ICIgKyBlLnRvU3RyaW5nKCkpOwotCXRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIC8vcmV0dXJuOwogICAgICAgfQogICAgICAgbWVzc2FnZSA9ICJDdXN0b21lciBEZWxldGVkLiI7CiAgICAgICBqc3AgPSAiL1NpbXBsZUJhbmtNZXNzYWdlLmpzcCI7Ci0gICAgfSAgCisgICAgfQogCiAKICAgICBlbHNlIGlmIChhY3Rpb24uZXF1YWxzKCJVcGRhdGUiKSkKQEAgLTE0MSw3ICsxNDEsNyBAQAogICAgICAgICBjdXN0b21lclNhdmluZ3MgPSAoQ3VzdG9tZXJTYXZpbmdzKWN1c3RvbWVyU2F2aW5nc0xvY2FsSG9tZS5maW5kQnlQcmltYXJ5S2V5KFNTTik7CiAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvdWxkIG5vdCBmaW5kIHRoZSBjdXN0b21lciBzYXZpbmdzIHJlbW90ZSBiZWFuIDogIiArIGUudG9TdHJpbmcoKSk7Ci0JdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgLy9yZXR1cm47CiAgICAgICB9CiAKQEAgLTE1MCw3ICsxNTAsNyBAQAogICAgICAgICBjdXN0b21lckNoZWNraW5nID0gKEN1c3RvbWVyQ2hlY2tpbmcpY3VzdG9tZXJDaGVja2luZ0xvY2FsSG9tZS5maW5kQnlQcmltYXJ5S2V5KFNTTik7CiAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvdWxkIG5vdCBmaW5kIHRoZSBjdXN0b21lciBjaGVja2luZyByZW1vdGUgYmVhbiA6ICIgKyBlLnRvU3RyaW5nKCkpOwotCXRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIC8vcmV0dXJuOwogICAgICAgfQogCkBAIC0yMTAsOSArMjEwLDkgQEAKICAgICBSZXF1ZXN0RGlzcGF0Y2hlciBkaXNwYXRjaGVyID0gZ2V0U2VydmxldENvbnRleHQoKS5nZXRSZXF1ZXN0RGlzcGF0Y2hlcihqc3ApOwogICAgIGRpc3BhdGNoZXIuaW5jbHVkZShyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgcmV0dXJuOwotICB9IAorICB9CiAKLSAgcHVibGljIHZvaWQgZG9Mb29rdXAoKSAKKyAgcHVibGljIHZvaWQgZG9Mb29rdXAoKQogICB7CiAgICAgdHJ5IHsKICAgICAgIGluaXRDb250ZXh0ID0gbmV3IGphdmF4Lm5hbWluZy5Jbml0aWFsQ29udGV4dCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvc3FsL2Ryb3BCYW5rVGFibGVzLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLWVtYmVkZGVkL3NxbC9kcm9wQmFua1RhYmxlcy5zcWwKaW5kZXggZGY5ZGYzNC4uMzNhNzA2OSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtZW1iZWRkZWQvc3FsL2Ryb3BCYW5rVGFibGVzLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1lbWJlZGRlZC9zcWwvZHJvcEJhbmtUYWJsZXMuc3FsCkBAIC0xICsxIEBACi1kcm9wIHRhYmxlIGN1c3RvbWVyMjsNCitkcm9wIHRhYmxlIGN1c3RvbWVyMjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLXJlc291cmNlcy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtcmVzb3VyY2VzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNDQzNGYwMS4uN2UxYjBjMSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtcmVzb3VyY2VzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtcmVzb3VyY2VzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIxICsxNSwyMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iaW5zdGFsbGVkLWxpYnJhcmllcy10ZXN0Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9InJhcmZpbGUiIHZhbHVlPSJyYXIvYmxhY2tib3gtdHgucmFyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1yZXNvdXJjZXMvZGVzY3JpcHRvci9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLXJlc291cmNlcy9kZXNjcmlwdG9yL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sCmluZGV4IDcxZDg5YzQuLmFmY2ZiZDMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLXJlc291cmNlcy9kZXNjcmlwdG9yL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLXJlc291cmNlcy9kZXNjcmlwdG9yL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sCkBAIC00Niw0ICs0Niw0IEBACiAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJvb2xlYW5XaXRoR2V0Qm9vbGVhbkFjY2Vzc29yIiB2YWx1ZT0idHJ1ZSIgLz4KICAgICAgICAgPC9jb25uZWN0b3ItY29ubmVjdGlvbi1wb29sPgogICAgICAgICA8Y29ubmVjdG9yLXJlc291cmNlIHBvb2wtbmFtZT0iaW5zdGFsbGVkLWxpYnJhcmllcy10ZXN0LWNjcCIgam5kaS1uYW1lPSJlaXMvY29ubmVjdG9yLXJlc291cmNlIiAgLz4KLTwvcmVzb3VyY2VzPiAKKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtcmVzb3VyY2VzL3Jhci9zcmMvY29tL3N1bi9jb25uZWN0b3IvYmxhY2tib3gvSmRiY0Nvbm5lY3Rpb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLXJlc291cmNlcy9yYXIvc3JjL2NvbS9zdW4vY29ubmVjdG9yL2JsYWNrYm94L0pkYmNDb25uZWN0aW9uLmphdmEKaW5kZXggZmE2NDk1OS4uYmIzNjU2YSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtcmVzb3VyY2VzL3Jhci9zcmMvY29tL3N1bi9jb25uZWN0b3IvYmxhY2tib3gvSmRiY0Nvbm5lY3Rpb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1yZXNvdXJjZXMvcmFyL3NyYy9jb20vc3VuL2Nvbm5lY3Rvci9ibGFja2JveC9KZGJjQ29ubmVjdGlvbi5qYXZhCkBAIC0xODMsNyArMTgzLDcgQEAKICAgICB9CiAKICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSAgICAvLyBUSEUgRk9MTE9XSU5HIEFQSVMgQVJFIE5FVyBGUk9NIEpESyAxLjQgLy8gICAgICAgIAorICAgIC8vIFRIRSBGT0xMT1dJTkcgQVBJUyBBUkUgTkVXIEZST00gSkRLIDEuNCAvLwogICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCiAgICAgLy8vLy8vLy8vLy8vLyAgQkVHSU4gIEpESyAxLjQgIC8vLy8vLy8vLy8vLy8vCkBAIC0zMjksMjcgKzMyOSwyNyBAQAogICAgIH0KIAogICAgIC8vLy8vLy8vLy8vLy8gIEVORCAgSkRLIDEuNCAgLy8vLy8vLy8vLy8vLy8KLSAgICAKKwogICAgIHB1YmxpYyBpbnQgZ2V0TmV0d29ya1RpbWVvdXQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgbmV3IGZlYXR1cmUuIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0TmV0d29ya1RpbWVvdXQoRXhlY3V0b3IgZXhlY3V0b3IsIGludCBtaWxsaXNlY29uZHMpIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBuZXcgZmVhdHVyZS4iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBhYm9ydChFeGVjdXRvciBleGVjdXRvcikgIHRocm93cyBTUUxFeGNlcHRpb257CiAgICAgICB0aHJvdyBuZXcgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiRG8gbm90IHN1cHBvcnQgSmF2YSA3IG5ldyBmZWF0dXJlLiIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2NoZW1hKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgbmV3IGZlYXR1cmUuIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0U2NoZW1hKFN0cmluZyBzY2hlbWEpIHRocm93cyBTUUxFeGNlcHRpb257CiAgICAgICB0aHJvdyBuZXcgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiRG8gbm90IHN1cHBvcnQgSmF2YSA3IG5ldyBmZWF0dXJlLiIpOwogICAgIH0KLSAgICAKKwogCiAgICAgdm9pZCBhc3NvY2lhdGVDb25uZWN0aW9uKEpkYmNNYW5hZ2VkQ29ubmVjdGlvbiBuZXdNYykKICAgICAgICAgICAgIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1yZXNvdXJjZXMvcmFyL3NyYy9jb20vc3VuL2Nvbm5lY3Rvci9ibGFja2JveC9Mb2NhbFR4TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1yZXNvdXJjZXMvcmFyL3NyYy9jb20vc3VuL2Nvbm5lY3Rvci9ibGFja2JveC9Mb2NhbFR4TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKaW5kZXggMGU0N2RkYy4uYTk2ODYwMSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtcmVzb3VyY2VzL3Jhci9zcmMvY29tL3N1bi9jb25uZWN0b3IvYmxhY2tib3gvTG9jYWxUeE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLXJlc291cmNlcy9yYXIvc3JjL2NvbS9zdW4vY29ubmVjdG9yL2JsYWNrYm94L0xvY2FsVHhNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQpAQCAtMTA5LDcgKzEwOSw3IEBACiAgICAgICAgIGlmICghZ2V0Qm9vbGVhbldpdGhHZXRCb29sZWFuQWNjZXNzb3IoKSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJCbGFja2JveCBSQVIgOiBHZXQgQm9vbGVhbiBBY2Nlc3NvciBpcyBmYWxzZSIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmICghaXNCb29sZWFuV2l0aElzQm9vbGVhbkFjY2Vzc29yKCkpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQmxhY2tib3ggUkFSIDogSXMgQm9vbGVhbiBBY2Nlc3NvciBpcyBmYWxzZSIpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1yZXNvdXJjZXMvcmFyL3NyYy9jb20vc3VuL2Nvbm5lY3Rvci9ibGFja2JveC9SZXNvdXJjZUFkYXB0ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLXJlc291cmNlcy9yYXIvc3JjL2NvbS9zdW4vY29ubmVjdG9yL2JsYWNrYm94L1Jlc291cmNlQWRhcHRlci5qYXZhCmluZGV4IDhmMmYzNTQuLjc5MjUwOTggMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLXJlc291cmNlcy9yYXIvc3JjL2NvbS9zdW4vY29ubmVjdG9yL2JsYWNrYm94L1Jlc291cmNlQWRhcHRlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLXJlc291cmNlcy9yYXIvc3JjL2NvbS9zdW4vY29ubmVjdG9yL2JsYWNrYm94L1Jlc291cmNlQWRhcHRlci5qYXZhCkBAIC00NCw3ICs0NCw3IEBACiAgICAgfQogCiAgICAgcHVibGljIFhBUmVzb3VyY2VbXSBnZXRYQVJlc291cmNlcyhBY3RpdmF0aW9uU3BlY1tdIGFjdGl2YXRpb25TcGVjcykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKLSAgICAgICAgcmV0dXJuIG51bGw7ICAKKyAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQogCiAgICAgcHVibGljIEJvb3RzdHJhcENvbnRleHQgZ2V0Qm9vdHN0cmFwQ29udGV4dCgpewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtcmVzb3VyY2VzL3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtcmVzb3VyY2VzL3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhCmluZGV4IDBmYjE0MDYuLjM2Mjg0OWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLXJlc291cmNlcy9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1yZXNvdXJjZXMvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEKQEAgLTc0LDcgKzc0LDcgQEAKICAgICAgICAgfWNhdGNoKE5hbWluZ0V4Y2VwdGlvbiBuZSl7CiAgICAgICAgICAgICBuZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfSBjYXRjaCAoQ3JlYXRlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7ICAKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH1maW5hbGx5ewogICAgICAgICAgICAgb3V0LnByaW50bG4oIkVORF9PRl9URVNUIik7CiAgICAgICAgICAgICBvdXQuZmx1c2goKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLXJlc291cmNlcy9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1yZXNvdXJjZXMvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IDQyMzQxMTUuLmVkNmRiYWIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLXJlc291cmNlcy9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMtcmVzb3VyY2VzL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSwyMCArMSwyMCBAQAotRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIOw0KLQ0KLUNSRUFURSBUQUJMRSBUWExFVkVMU1dJVENIICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQotSU5TRVJUIElOVE8gVFhMRVZFTFNXSVRDSCBWQUxVRVMoMTAsICdhYmNkJyk7DQotSU5TRVJUIElOVE8gVFhMRVZFTFNXSVRDSCBWQUxVRVMoMTEsICdwcXJzJyk7DQotDQotRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIMjsNCi0NCi1DUkVBVEUgVEFCTEUgVFhMRVZFTFNXSVRDSDIgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCi1JTlNFUlQgSU5UTyBUWExFVkVMU1dJVENIMiBWQUxVRVMoMSwgJ2FiY2QnKTsNCi1JTlNFUlQgSU5UTyBUWExFVkVMU1dJVENIMiBWQUxVRVMoMiwgJ3BxcnMnKTsNCi0NCitEcm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0g7CisKK0NSRUFURSBUQUJMRSBUWExFVkVMU1dJVENIICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikKKyk7CisKK0lOU0VSVCBJTlRPIFRYTEVWRUxTV0lUQ0ggVkFMVUVTKDEwLCAnYWJjZCcpOworSU5TRVJUIElOVE8gVFhMRVZFTFNXSVRDSCBWQUxVRVMoMTEsICdwcXJzJyk7CisKK0Ryb3AgdGFibGUgVFhMRVZFTFNXSVRDSDI7CisKK0NSRUFURSBUQUJMRSBUWExFVkVMU1dJVENIMiAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCitJTlNFUlQgSU5UTyBUWExFVkVMU1dJVENIMiBWQUxVRVMoMSwgJ2FiY2QnKTsKK0lOU0VSVCBJTlRPIFRYTEVWRUxTV0lUQ0gyIFZBTFVFUygyLCAncHFycycpOworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy1yZXNvdXJjZXMvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLXJlc291cmNlcy9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IDBjMTI0MmYuLmQxMWExMTUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLXJlc291cmNlcy9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzLXJlc291cmNlcy9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xLDIgKzEsMiBAQAotRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIOw0KLURyb3AgdGFibGUgVFhMRVZFTFNXSVRDSDI7DQorRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIOworRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIMjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDQ0MzRmMDEuLjdlMWIwYzEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJpbnN0YWxsZWQtbGlicmFyaWVzLXRlc3QiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0icmFyZmlsZSIgdmFsdWU9InJhci9ibGFja2JveC10eC5yYXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzL3Jhci9zcmMvY29tL3N1bi9jb25uZWN0b3IvYmxhY2tib3gvSmRiY0Nvbm5lY3Rpb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzL3Jhci9zcmMvY29tL3N1bi9jb25uZWN0b3IvYmxhY2tib3gvSmRiY0Nvbm5lY3Rpb24uamF2YQppbmRleCBmYTY0OTU5Li5iYjM2NTZhIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy9yYXIvc3JjL2NvbS9zdW4vY29ubmVjdG9yL2JsYWNrYm94L0pkYmNDb25uZWN0aW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMvcmFyL3NyYy9jb20vc3VuL2Nvbm5lY3Rvci9ibGFja2JveC9KZGJjQ29ubmVjdGlvbi5qYXZhCkBAIC0xODMsNyArMTgzLDcgQEAKICAgICB9CiAKICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSAgICAvLyBUSEUgRk9MTE9XSU5HIEFQSVMgQVJFIE5FVyBGUk9NIEpESyAxLjQgLy8gICAgICAgIAorICAgIC8vIFRIRSBGT0xMT1dJTkcgQVBJUyBBUkUgTkVXIEZST00gSkRLIDEuNCAvLwogICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCiAgICAgLy8vLy8vLy8vLy8vLyAgQkVHSU4gIEpESyAxLjQgIC8vLy8vLy8vLy8vLy8vCkBAIC0zMjksMjcgKzMyOSwyNyBAQAogICAgIH0KIAogICAgIC8vLy8vLy8vLy8vLy8gIEVORCAgSkRLIDEuNCAgLy8vLy8vLy8vLy8vLy8KLSAgICAKKwogICAgIHB1YmxpYyBpbnQgZ2V0TmV0d29ya1RpbWVvdXQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgbmV3IGZlYXR1cmUuIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0TmV0d29ya1RpbWVvdXQoRXhlY3V0b3IgZXhlY3V0b3IsIGludCBtaWxsaXNlY29uZHMpIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBuZXcgZmVhdHVyZS4iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBhYm9ydChFeGVjdXRvciBleGVjdXRvcikgIHRocm93cyBTUUxFeGNlcHRpb257CiAgICAgICB0aHJvdyBuZXcgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiRG8gbm90IHN1cHBvcnQgSmF2YSA3IG5ldyBmZWF0dXJlLiIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2NoZW1hKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgbmV3IGZlYXR1cmUuIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0U2NoZW1hKFN0cmluZyBzY2hlbWEpIHRocm93cyBTUUxFeGNlcHRpb257CiAgICAgICB0aHJvdyBuZXcgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiRG8gbm90IHN1cHBvcnQgSmF2YSA3IG5ldyBmZWF0dXJlLiIpOwogICAgIH0KLSAgICAKKwogCiAgICAgdm9pZCBhc3NvY2lhdGVDb25uZWN0aW9uKEpkYmNNYW5hZ2VkQ29ubmVjdGlvbiBuZXdNYykKICAgICAgICAgICAgIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy9yYXIvc3JjL2NvbS9zdW4vY29ubmVjdG9yL2JsYWNrYm94L0xvY2FsVHhNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzL3Jhci9zcmMvY29tL3N1bi9jb25uZWN0b3IvYmxhY2tib3gvTG9jYWxUeE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCmluZGV4IDBlNDdkZGMuLmE5Njg2MDEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzL3Jhci9zcmMvY29tL3N1bi9jb25uZWN0b3IvYmxhY2tib3gvTG9jYWxUeE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzL3Jhci9zcmMvY29tL3N1bi9jb25uZWN0b3IvYmxhY2tib3gvTG9jYWxUeE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCkBAIC0xMDksNyArMTA5LDcgQEAKICAgICAgICAgaWYgKCFnZXRCb29sZWFuV2l0aEdldEJvb2xlYW5BY2Nlc3NvcigpKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkJsYWNrYm94IFJBUiA6IEdldCBCb29sZWFuIEFjY2Vzc29yIGlzIGZhbHNlIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKCFpc0Jvb2xlYW5XaXRoSXNCb29sZWFuQWNjZXNzb3IoKSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJCbGFja2JveCBSQVIgOiBJcyBCb29sZWFuIEFjY2Vzc29yIGlzIGZhbHNlIik7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzL3Jhci9zcmMvY29tL3N1bi9jb25uZWN0b3IvYmxhY2tib3gvUmVzb3VyY2VBZGFwdGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy9yYXIvc3JjL2NvbS9zdW4vY29ubmVjdG9yL2JsYWNrYm94L1Jlc291cmNlQWRhcHRlci5qYXZhCmluZGV4IDhmMmYzNTQuLjc5MjUwOTggMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzL3Jhci9zcmMvY29tL3N1bi9jb25uZWN0b3IvYmxhY2tib3gvUmVzb3VyY2VBZGFwdGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMvcmFyL3NyYy9jb20vc3VuL2Nvbm5lY3Rvci9ibGFja2JveC9SZXNvdXJjZUFkYXB0ZXIuamF2YQpAQCAtNDQsNyArNDQsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyBYQVJlc291cmNlW10gZ2V0WEFSZXNvdXJjZXMoQWN0aXZhdGlvblNwZWNbXSBhY3RpdmF0aW9uU3BlY3MpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHJldHVybiBudWxsOyAgCisgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KIAogICAgIHB1YmxpYyBCb290c3RyYXBDb250ZXh0IGdldEJvb3RzdHJhcENvbnRleHQoKXsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzL3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEKaW5kZXggMGZiMTQwNi4uMzYyODQ5YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEKQEAgLTc0LDcgKzc0LDcgQEAKICAgICAgICAgfWNhdGNoKE5hbWluZ0V4Y2VwdGlvbiBuZSl7CiAgICAgICAgICAgICBuZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfSBjYXRjaCAoQ3JlYXRlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7ICAKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH1maW5hbGx5ewogICAgICAgICAgICAgb3V0LnByaW50bG4oIkVORF9PRl9URVNUIik7CiAgICAgICAgICAgICBvdXQuZmx1c2goKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCA0MjM0MTE1Li5lZDZkYmFiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDIwICsxLDIwIEBACi1Ecm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0g7DQotDQotQ1JFQVRFIFRBQkxFIFRYTEVWRUxTV0lUQ0ggKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCi1JTlNFUlQgSU5UTyBUWExFVkVMU1dJVENIIFZBTFVFUygxMCwgJ2FiY2QnKTsNCi1JTlNFUlQgSU5UTyBUWExFVkVMU1dJVENIIFZBTFVFUygxMSwgJ3BxcnMnKTsNCi0NCi1Ecm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0gyOw0KLQ0KLUNSRUFURSBUQUJMRSBUWExFVkVMU1dJVENIMiAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikNCi0pOw0KLQ0KLUlOU0VSVCBJTlRPIFRYTEVWRUxTV0lUQ0gyIFZBTFVFUygxLCAnYWJjZCcpOw0KLUlOU0VSVCBJTlRPIFRYTEVWRUxTV0lUQ0gyIFZBTFVFUygyLCAncHFycycpOw0KLQ0KK0Ryb3AgdGFibGUgVFhMRVZFTFNXSVRDSDsKKworQ1JFQVRFIFRBQkxFIFRYTEVWRUxTV0lUQ0ggKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQorKTsKKworSU5TRVJUIElOVE8gVFhMRVZFTFNXSVRDSCBWQUxVRVMoMTAsICdhYmNkJyk7CitJTlNFUlQgSU5UTyBUWExFVkVMU1dJVENIIFZBTFVFUygxMSwgJ3BxcnMnKTsKKworRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIMjsKKworQ1JFQVRFIFRBQkxFIFRYTEVWRUxTV0lUQ0gyICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikKKyk7CisKK0lOU0VSVCBJTlRPIFRYTEVWRUxTV0lUQ0gyIFZBTFVFUygxLCAnYWJjZCcpOworSU5TRVJUIElOVE8gVFhMRVZFTFNXSVRDSDIgVkFMVUVTKDIsICdwcXJzJyk7CisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvaW5zdGFsbGVkLWxpYnJhcmllcy9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IDBjMTI0MmYuLmQxMWExMTUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9pbnN0YWxsZWQtbGlicmFyaWVzL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2luc3RhbGxlZC1saWJyYXJpZXMvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbApAQCAtMSwyICsxLDIgQEAKLURyb3AgdGFibGUgVFhMRVZFTFNXSVRDSDsNCi1Ecm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0gyOw0KK0Ryb3AgdGFibGUgVFhMRVZFTFNXSVRDSDsKK0Ryb3AgdGFibGUgVFhMRVZFTFNXSVRDSDI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvam1zLWNvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvam1zLWNvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggODhhYWFlYS4uNmNkMWRkYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ptcy1jb25uZWN0aW9uLWZhY3RvcnktZGVmaW5pdGlvbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9qbXMtY29ubmVjdGlvbi1mYWN0b3J5LWRlZmluaXRpb24vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iam1zLWNvbm5lY3Rpb24tZmFjdG9yeS1kZWZpbml0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2ptcy1kZXN0aW5hdGlvbi1kZWZpbml0aW9uL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvam1zLWRlc3RpbmF0aW9uLWRlZmluaXRpb24vYnVpbGQucHJvcGVydGllcwppbmRleCA5MGQxODRlLi45M2VjMmU4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvam1zLWRlc3RpbmF0aW9uLWRlZmluaXRpb24vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvam1zLWRlc3RpbmF0aW9uLWRlZmluaXRpb24vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iam1zLWRlc3RpbmF0aW9uLWRlZmluaXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvanBhLXR4LXByb3BhZ2F0aW9uLWdmLXJlc291cmNlcy14bWwvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9qcGEtdHgtcHJvcGFnYXRpb24tZ2YtcmVzb3VyY2VzLXhtbC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDVkNzgyMzMuLjI5OTU1OWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9qcGEtdHgtcHJvcGFnYXRpb24tZ2YtcmVzb3VyY2VzLXhtbC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9qcGEtdHgtcHJvcGFnYXRpb24tZ2YtcmVzb3VyY2VzLXhtbC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lamIzMC1wZXJzaXN0ZW5jZS10eF9wcm9wYWdhdGlvbiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzaW1wbGUuY2xpZW50IiB2YWx1ZT0iY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5wZXJzaXN0ZW5jZS50eF9wcm9wYWdhdGlvbi5jbGllbnQuQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJDbGllbnQiLz4KQEAgLTI2LDEwICsyNiwxMCBAQAogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2pwYS10eC1wcm9wYWdhdGlvbi1nZi1yZXNvdXJjZXMteG1sL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9qcGEtdHgtcHJvcGFnYXRpb24tZ2YtcmVzb3VyY2VzLXhtbC9idWlsZC54bWwKaW5kZXggNzEzMzM0Yy4uZDc3ZTY4MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2pwYS10eC1wcm9wYWdhdGlvbi1nZi1yZXNvdXJjZXMteG1sL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvanBhLXR4LXByb3BhZ2F0aW9uLWdmLXJlc291cmNlcy14bWwvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS50eXBlIiB2YWx1ZT0iamF2YXguc3FsLlhBRGF0YVNvdXJjZSIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMveGEiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPiAKKyAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgogICAgICAgICAgICAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLmpkYmMteGEtcG9vbC5wcm9wZXJ0eS5jb25uZWN0aW9uQXR0cmlidXRlcz07Y3JlYXRlPXRydWUiLz4KQEAgLTgxLDEwICs4MSwxMCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfS9saWIiLz4KLSAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9L2xpYi8ke2FwcG5hbWV9LWxpYi5qYXIiIAorICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vbGliLyR7YXBwbmFtZX0tbGliLmphciIKICAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgICBpbmNsdWRlcz0iKiovUGVyc29uLmNsYXNzIj4KLSAgICAgICAgPC9qYXI+ICAgICAgICAKKyAgICAgICAgPC9qYXI+CiAgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS9saWIvJHthcHBuYW1lfS1wYXIxLmphciI+CiAgICAgICAgICAgICAgPG1ldGFpbmYgZmlsZT0iZGVzY3JpcHRvci9wZXJzaXN0ZW5jZS54bWwiLz4KICAgICAgICAgPC9qYXI+CkBAIC05Miw5ICs5Miw5IEBACiAgICAgICAgICAgPC9jb3B5Pi0tPgogCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovU2Z1bCouY2xhc3MiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9DbGllbnQuY2xhc3MsKiovU2Z1bC5jbGFzcyIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImdsYXNzZmlzaC1yZXNvdXJjZXMtZWFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwiLz4KICAgICAgICAgPC9hbnRjYWxsPgpAQCAtMTAzLDkgKzEwMyw5IEBACiAgICAgICAgICAgICAgaW5jbHVkZXM9ImxpYi8ke2FwcG5hbWV9LWxpYi5qYXIsIGxpYi8ke2FwcG5hbWV9LXBhcjEuamFyIj4KICAgICAgICAgPC9qYXI+CiAKLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtMTE0LDEwICsxMTQsMTAgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiA8IS0tICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LXN0YW5kYWxvbmUiLz4tLT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2pwYS10eC1wcm9wYWdhdGlvbi1nZi1yZXNvdXJjZXMteG1sL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9qcGEtdHgtcHJvcGFnYXRpb24tZ2YtcmVzb3VyY2VzLXhtbC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggNzQ2N2M0MS4uNjA2MDU5MyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2pwYS10eC1wcm9wYWdhdGlvbi1nZi1yZXNvdXJjZXMteG1sL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvanBhLXR4LXByb3BhZ2F0aW9uLWdmLXJlc291cmNlcy14bWwvY2xpZW50L0NsaWVudC5qYXZhCkBAIC02NCw3ICs2NCw3IEBACiAgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHMgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJJIGFtIGluIGNsaWVudCIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFVzZXJUcmFuc2FjdGlvbiB1dHggPSAoVXNlclRyYW5zYWN0aW9uKShuZXcgamF2YXgubmFtaW5nLkluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiamF2YTpjb21wL1VzZXJUcmFuc2FjdGlvbiIpOwogICAgICAgICAgICAgZHMgPSAoRGF0YVNvdXJjZSkobmV3IGphdmF4Lm5hbWluZy5Jbml0aWFsQ29udGV4dCgpKS5sb29rdXAoImphdmE6YXBwL2pkYmMveGEiKTsKIApAQCAtNzgsNyArNzgsNyBAQAogCiAgICAgICAgICAgICB1dHguYmVnaW4oKTsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigidXR4LmJlZ2luIGNhbGxlZCAiKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBjb25uZWN0aW9uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwogICAgICAgICAgICAgcyA9IGNvbm5lY3Rpb24ucHJlcGFyZVN0YXRlbWVudCgiaW5zZXJ0IGludG8gRUpCMzBfUEVSU0lTVEVOQ0VfRUVNX0lOSkVDVElPTl9QRVJTT04gdmFsdWVzKCcxJywgJzEnKSIpOwogICAgICAgICAgICAgcy5leGVjdXRlKCk7CkBAIC05NCw3ICs5NCw3IEBACiAgICAgICAgICAgICAgICAgdXR4LnJvbGxiYWNrKCk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJ1dHgucm9sbGJhY2sgY2FsbGVkICIpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIEl0ZXJhdG9yPFN0cmluZz4gaXRlciA9IG1hcC5rZXlTZXQoKS5pdGVyYXRvcigpOwogICAgICAgICAgICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgU3RyaW5nIHRlc3ROYW1lID0gaXRlci5uZXh0KCk7CkBAIC0xMjUsNyArMTI1LDcgQEAKIAogICAgICAgICB9CiAKLSAgICAJcmV0dXJuOworICAgICAgICByZXR1cm47CiAgICAgfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9qcGEtdHgtcHJvcGFnYXRpb24tZ2YtcmVzb3VyY2VzLXhtbC9kZXNjcmlwdG9yL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2pwYS10eC1wcm9wYWdhdGlvbi1nZi1yZXNvdXJjZXMteG1sL2Rlc2NyaXB0b3IvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwKaW5kZXggMDc4NmM1NC4uY2NkZWFhNCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2pwYS10eC1wcm9wYWdhdGlvbi1nZi1yZXNvdXJjZXMteG1sL2Rlc2NyaXB0b3IvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2pwYS10eC1wcm9wYWdhdGlvbi1nZi1yZXNvdXJjZXMteG1sL2Rlc2NyaXB0b3IvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwKQEAgLTUxLDQgKzUxLDQgQEAKICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjb25uZWN0aW9uQXR0cmlidXRlcyIgdmFsdWU9IjtjcmVhdGU9dHJ1ZSIgLz4KICAgICA8L2pkYmMtY29ubmVjdGlvbi1wb29sPgogICAgIDxqZGJjLXJlc291cmNlIHBvb2wtbmFtZT0iamF2YTphcHAvamRiYy14YS1wb29sIiBqbmRpLW5hbWU9ImphdmE6YXBwL2pkYmMveGEiIC8+Ci08L3Jlc291cmNlcz4gCis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9qcGEtdHgtcHJvcGFnYXRpb24tZ2YtcmVzb3VyY2VzLXhtbC9lamIvUGVyc29uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvanBhLXR4LXByb3BhZ2F0aW9uLWdmLXJlc291cmNlcy14bWwvZWpiL1BlcnNvbi5qYXZhCmluZGV4IDE0MzU4ZmYuLjk1MmNiZWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9qcGEtdHgtcHJvcGFnYXRpb24tZ2YtcmVzb3VyY2VzLXhtbC9lamIvUGVyc29uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2pwYS10eC1wcm9wYWdhdGlvbi1nZi1yZXNvdXJjZXMteG1sL2VqYi9QZXJzb24uamF2YQpAQCAtNDUsNyArNDUsNyBAQAogICAgICAgICB0aGlzLmRhdGEgPSBkYXRhOwogICAgIH0KIAotICAgIEBPdmVycmlkZSAKKyAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgICAgICByZXR1cm4gIlBlcnNvbjogKG5hbWU9IiArIG5hbWUgKyAiOyBkYXRhPSAiICsgZGF0YSArICIpIjsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvanBhLXR4LXByb3BhZ2F0aW9uLWdmLXJlc291cmNlcy14bWwvZWpiL1NmdWxCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvanBhLXR4LXByb3BhZ2F0aW9uLWdmLXJlc291cmNlcy14bWwvZWpiL1NmdWxCZWFuLmphdmEKaW5kZXggM2Q0ZjMwYi4uNGIyNGRmNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2pwYS10eC1wcm9wYWdhdGlvbi1nZi1yZXNvdXJjZXMteG1sL2VqYi9TZnVsQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9qcGEtdHgtcHJvcGFnYXRpb24tZ2YtcmVzb3VyY2VzLXhtbC9lamIvU2Z1bEJlYW4uamF2YQpAQCAtMzQsMjUgKzM0LDI1IEBACiBpbXBvcnQgamFrYXJ0YS5lamIuRUpCRXhjZXB0aW9uOwogCiBAU3RhdGVmdWwKLUBFSkIobmFtZT0iZWpiL1NmdWxCZWFuIiwgCitARUpCKG5hbWU9ImVqYi9TZnVsQmVhbiIsCiAgICAgICAgIGJlYW5JbnRlcmZhY2U9Y29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5wZXJzaXN0ZW5jZS50eF9wcm9wYWdhdGlvbi5TZnVsRGVsZWdhdGUuY2xhc3MpCiAKIHB1YmxpYyBjbGFzcyBTZnVsQmVhbgogICAgIGltcGxlbWVudHMgU2Z1bCB7CiAKICAgICBwcml2YXRlIFN0cmluZyBuYW1lOwotICAgIAorCiAgICAgcHJpdmF0ZSBARUpCIFNmdWxEZWxlZ2F0ZSBkZWxlZ2F0ZTsKLSAgICAKKwogICAgIHByaXZhdGUgQFBlcnNpc3RlbmNlQ29udGV4dCh1bml0TmFtZT0ibGliL2VqYi1lamIzMC1wZXJzaXN0ZW5jZS10eF9wcm9wYWdhdGlvbi1wYXIxLmphciNlbSIsCi0gICAgICAgICAgICAgICAgdHlwZT1QZXJzaXN0ZW5jZUNvbnRleHRUeXBlLkVYVEVOREVEKSAKKyAgICAgICAgICAgICAgICB0eXBlPVBlcnNpc3RlbmNlQ29udGV4dFR5cGUuRVhURU5ERUQpCiAgICAgICAgICAgICBFbnRpdHlNYW5hZ2VyIGV4dGVuZGVkRU07Ci0gCisKICAgICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBTdHJpbmcgbG9va3VwTmFtZSA9ICJqYXZhOmNvbXAvZW52L2VqYi9TZnVsQmVhbiI7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgSW5pdGlhbENvbnRleHQgaW5pdEN0eCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgZGVsZWdhdGUgPSAoU2Z1bERlbGVnYXRlKSBpbml0Q3R4Lmxvb2t1cChsb29rdXBOYW1lKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CkBAIC02Miw3ICs2Miw3IEBACiAKICAgICBwdWJsaWMgTWFwPFN0cmluZywgQm9vbGVhbj4gZG9UZXN0cygpIHsKICAgICAgICAgUGVyc29uIHBlcnNvbiA9IG5ldyBQZXJzb24obmFtZSk7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyBkZWxlZ2F0ZU5hbWUgPSAiZGVsZ25hbWVfIiArIG5hbWU7CiAgICAgICAgIFN0cmluZyBkZWxlZ2F0ZURhdGE9ICJkZWxnZGF0YTogIiArIG5hbWU7CiAgICAgICAgIGRlbGVnYXRlLmNyZWF0ZShkZWxlZ2F0ZU5hbWUsIGRlbGVnYXRlRGF0YSk7CkBAIC03MSw4ICs3MSw4IEBACiAKICAgICAgICAgZXh0ZW5kZWRFTS5wZXJzaXN0KHBlcnNvbik7CiAgICAgICAgIFBlcnNvbiBmb3VuZFBlcnNvbiA9IGRlbGVnYXRlLmZpbmQobmFtZSk7Ci0gICAgICAgIAotICAgICAgICAKKworCiAgICAgICAgIE1hcDxTdHJpbmcsIEJvb2xlYW4+IG1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgQm9vbGVhbj4oKTsKICAgICAgICAgbWFwLnB1dCgiZmluZERlbGVnYXRlQ3JlYXRlZFBlcnNvbiIsIChkUGVyc29uICE9IG51bGwpKTsKICAgICAgICAgbWFwLnB1dCgiZGVsZWdhdGVGb3VuZE1lIiwgKGZvdW5kUGVyc29uICE9IG51bGwpKTsKQEAgLTEwMCw1ICsxMDAsNSBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiByZW1vdmVkOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2pwYS10eC1wcm9wYWdhdGlvbi1nZi1yZXNvdXJjZXMteG1sL2VqYi9TZnVsRGVsZWdhdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9qcGEtdHgtcHJvcGFnYXRpb24tZ2YtcmVzb3VyY2VzLXhtbC9lamIvU2Z1bERlbGVnYXRlLmphdmEKaW5kZXggNjJkMjA5Ny4uMzM3YTQzZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2pwYS10eC1wcm9wYWdhdGlvbi1nZi1yZXNvdXJjZXMteG1sL2VqYi9TZnVsRGVsZWdhdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvanBhLXR4LXByb3BhZ2F0aW9uLWdmLXJlc291cmNlcy14bWwvZWpiL1NmdWxEZWxlZ2F0ZS5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAgICAgUGVyc29uIGZpbmQoU3RyaW5nIG5hbWUpOwogCiAgICAgYm9vbGVhbiByZW1vdmUoU3RyaW5nIG5hbWUpOwotICAgIAorCiAgICAgRW50aXR5TWFuYWdlciBnZXRFTSgpOwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvanBhLXR4LXByb3BhZ2F0aW9uLWdmLXJlc291cmNlcy14bWwvZWpiL1NmdWxEZWxlZ2F0ZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9qcGEtdHgtcHJvcGFnYXRpb24tZ2YtcmVzb3VyY2VzLXhtbC9lamIvU2Z1bERlbGVnYXRlQmVhbi5qYXZhCmluZGV4IDhhOTZlMjAuLmY3YTdhYWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9qcGEtdHgtcHJvcGFnYXRpb24tZ2YtcmVzb3VyY2VzLXhtbC9lamIvU2Z1bERlbGVnYXRlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9qcGEtdHgtcHJvcGFnYXRpb24tZ2YtcmVzb3VyY2VzLXhtbC9lamIvU2Z1bERlbGVnYXRlQmVhbi5qYXZhCkBAIC0zNywxMiArMzcsMTIgQEAKICAgICBwdWJsaWMgRW50aXR5TWFuYWdlciBnZXRFTSgpIHsKICAgICAgICAgcmV0dXJuIGV4dGVuZGVkRU07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFBlcnNvbiBjcmVhdGUoU3RyaW5nIG5hbWUsIFN0cmluZyBkYXRhKSB7CiAKICAgICAgICAgUGVyc29uIHAgPSBuZXcgUGVyc29uKG5hbWUpOwogICAgICAgICBwLnNldERhdGEoZGF0YSk7Ci0gICAgICAgIAorCiAgICAgICAgIGV4dGVuZGVkRU0ucGVyc2lzdChwKTsKICAgICAgICAgcmV0dXJuIHA7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2pwYS10eC1wcm9wYWdhdGlvbi1nZi1yZXNvdXJjZXMteG1sL3NxbC9jcmVhdGUuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2pwYS10eC1wcm9wYWdhdGlvbi1nZi1yZXNvdXJjZXMteG1sL3NxbC9jcmVhdGUuc3FsCmluZGV4IGZhNjA3NDIuLmMwYWI0M2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9qcGEtdHgtcHJvcGFnYXRpb24tZ2YtcmVzb3VyY2VzLXhtbC9zcWwvY3JlYXRlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvanBhLXR4LXByb3BhZ2F0aW9uLWdmLXJlc291cmNlcy14bWwvc3FsL2NyZWF0ZS5zcWwKQEAgLTEsNCArMSw0IEBACi1DUkVBVEUgVEFCTEUgRUpCMzBfUEVSU0lTVEVOQ0VfRUVNX0lOSkVDVElPTl9QRVJTT04gKA0KLSAgICBOQU1FIFZBUkNIQVIoMjU2KSBOT1QgTlVMTCBQUklNQVJZIEtFWSwNCi0gICAgREFUQSBWQVJDSEFSKDI1NikNCi0pOw0KK0NSRUFURSBUQUJMRSBFSkIzMF9QRVJTSVNURU5DRV9FRU1fSU5KRUNUSU9OX1BFUlNPTiAoCisgICAgTkFNRSBWQVJDSEFSKDI1NikgTk9UIE5VTEwgUFJJTUFSWSBLRVksCisgICAgREFUQSBWQVJDSEFSKDI1NikKKyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvanBhLXR4LXByb3BhZ2F0aW9uLWdmLXJlc291cmNlcy14bWwvc3FsL2Ryb3Auc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL2pwYS10eC1wcm9wYWdhdGlvbi1nZi1yZXNvdXJjZXMteG1sL3NxbC9kcm9wLnNxbAppbmRleCA1ZWIxMzZmLi5kMDEyYzY5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvanBhLXR4LXByb3BhZ2F0aW9uLWdmLXJlc291cmNlcy14bWwvc3FsL2Ryb3Auc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9qcGEtdHgtcHJvcGFnYXRpb24tZ2YtcmVzb3VyY2VzLXhtbC9zcWwvZHJvcC5zcWwKQEAgLTEgKzEgQEAKLURST1AgVEFCTEUgRUpCMzBfUEVSU0lTVEVOQ0VfRUVNX0lOSkVDVElPTl9QRVJTT047DQorRFJPUCBUQUJMRSBFSkIzMF9QRVJTSVNURU5DRV9FRU1fSU5KRUNUSU9OX1BFUlNPTjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvYXBwL01FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9hcHAvTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwKaW5kZXggMjFiZTA2Mi4uYjc0MWZlZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9hcHAvTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9hcHAvTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwKQEAgLTcyLDQgKzcyLDQgQEAKICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJSZXNldENvbnRyb2wiIHZhbHVlPSJCRUdJTk5JTkciLz4KICAgICA8L2FkbWluLW9iamVjdC1yZXNvdXJjZT4tLT4KIAotPC9yZXNvdXJjZXM+IAorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL2FwcC9zcmMvTUVUQS1JTkYvZWpiLWdmLXJlc291cmNlcy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL2FwcC9zcmMvTUVUQS1JTkYvZWpiLWdmLXJlc291cmNlcy54bWwKaW5kZXggM2VhZTQwMy4uMzg5Nzc5YSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9hcHAvc3JjL01FVEEtSU5GL2VqYi1nZi1yZXNvdXJjZXMueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvYXBwL3NyYy9NRVRBLUlORi9lamItZ2YtcmVzb3VyY2VzLnhtbApAQCAtNTcsNCArNTcsNCBAQAogICAgICA8YWRtaW4tb2JqZWN0LXJlc291cmNlIGVuYWJsZWQ9InRydWUiIGpuZGktbmFtZT0iamF2YTptb2R1bGUvZWlzL3Rlc3RBZG1pbiIgb2JqZWN0LXR5cGU9InVzZXIiIHJlcy1hZGFwdGVyPSJnZW5lcmljLXJhIiByZXMtdHlwZT0iY29ubmVjdG9yLk15QWRtaW5PYmplY3QiPgogICAgICAgPHByb3BlcnR5IG5hbWU9IlJlc2V0Q29udHJvbCIgdmFsdWU9IkJFR0lOTklORyIvPgogICAgIDwvYWRtaW4tb2JqZWN0LXJlc291cmNlPgotPC9yZXNvdXJjZXM+IAorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwKaW5kZXggNTgyYjc4MS4uMTJmYjZkMyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9hcHAvc3JjL01FVEEtSU5GL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvYXBwL3NyYy9NRVRBLUlORi9lamItamFyLnhtbApAQCAtMTE0LDggKzExNCw4IEBACiAgICAgICAgIDxyZXMtc2hhcmluZy1zY29wZT5TaGFyZWFibGU8L3Jlcy1zaGFyaW5nLXNjb3BlPgogICAgICAgPC9yZXNvdXJjZS1yZWY+CiAgICAgICA8cmVzb3VyY2UtZW52LXJlZj4KLQk8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmVpcy90ZXN0QWRtaW48L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KLQk8cmVzb3VyY2UtZW52LXJlZi10eXBlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC9yZXNvdXJjZS1lbnYtcmVmLXR5cGU+CisgICAgPHJlc291cmNlLWVudi1yZWYtbmFtZT5laXMvdGVzdEFkbWluPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+CisgICAgPHJlc291cmNlLWVudi1yZWYtdHlwZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvcmVzb3VyY2UtZW52LXJlZi10eXBlPgogICAgICAgPC9yZXNvdXJjZS1lbnYtcmVmPgogICAgICAgPHNlY3VyaXR5LWlkZW50aXR5PgogICAgICAgICA8dXNlLWNhbGxlci1pZGVudGl0eS8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9hcHAvc3JjL01FVEEtSU5GL3N1bi1lamItamFyLnhtbAppbmRleCBiODhhODY4Li42OWIwMTQ5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvYXBwL3NyYy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwKQEAgLTMyLDcgKzMyLDcgQEAKICAgICAgICAgICAgIFRlc3RJbnRlZ2VyUHJvcAogICAgICAgICAgIDwvYWN0aXZhdGlvbi1jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICA8YWN0aXZhdGlvbi1jb25maWctcHJvcGVydHktdmFsdWU+Ci0gICAgICAgICAgICAyIAorICAgICAgICAgICAgMgogICAgICAgICAgIDwvYWN0aXZhdGlvbi1jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgIDwvYWN0aXZhdGlvbi1jb25maWctcHJvcGVydHk+CiAgICAgICAgIDwvYWN0aXZhdGlvbi1jb25maWc+CkBAIC04NCw3ICs4NCw3IEBACiAgICAgICA8L3Jlc291cmNlLXJlZj4KICAgICAgIDxyZXNvdXJjZS1lbnYtcmVmPgogICAgICAgICA8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmVpcy90ZXN0QWRtaW48L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KLQk8am5kaS1uYW1lPmphdmE6bW9kdWxlL2Vpcy90ZXN0QWRtaW48L2puZGktbmFtZT4KKyAgICA8am5kaS1uYW1lPmphdmE6bW9kdWxlL2Vpcy90ZXN0QWRtaW48L2puZGktbmFtZT4KICAgICAgIDwvcmVzb3VyY2UtZW52LXJlZj4KICAgICAgIDxnZW4tY2xhc3Nlcy8+CiAgICAgPC9lamI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL2FwcC9zcmMvTUVUQS1JTkYvd2ViLWdmLXJlc291cmNlcy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL2FwcC9zcmMvTUVUQS1JTkYvd2ViLWdmLXJlc291cmNlcy54bWwKaW5kZXggODE2ZDVhOS4uYzY1OGEwNyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9hcHAvc3JjL01FVEEtSU5GL3dlYi1nZi1yZXNvdXJjZXMueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvYXBwL3NyYy9NRVRBLUlORi93ZWItZ2YtcmVzb3VyY2VzLnhtbApAQCAtNTMsNCArNTMsNCBAQAogICAgIDwvamRiYy1jb25uZWN0aW9uLXBvb2w+CiAKICAgICA8amRiYy1yZXNvdXJjZSBlbmFibGVkPSJ0cnVlIiBqbmRpLW5hbWU9ImphdmE6bW9kdWxlL2pkYmMvd2ViLWxldmVsLWRzIiBvYmplY3QtdHlwZT0idXNlciIgcG9vbC1uYW1lPSJqYXZhOm1vZHVsZS9qZGJjL3dlYi1sZXZlbC1wb29sIi8+Ci08L3Jlc291cmNlcz4gCis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvYXBwL3NyYy9iZWFucy9NZXNzYWdlQ2hlY2tlckVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9hcHAvc3JjL2JlYW5zL01lc3NhZ2VDaGVja2VyRUpCLmphdmEKaW5kZXggM2Y2NTNlMy4uZTRhNTBmNCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9hcHAvc3JjL2JlYW5zL01lc3NhZ2VDaGVja2VyRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9hcHAvc3JjL2JlYW5zL01lc3NhZ2VDaGVja2VyRUpCLmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKIAogICAgIHB1YmxpYyBNZXNzYWdlQ2hlY2tlckVKQigpIHt9CiAKLSAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSAKKyAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKQogICAgICAgICB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJiZWFuIGNyZWF0ZWQiKTsKICAgICAgICAgaGVsZENvbiA9IG51bGw7CkBAIC03Myw3ICs3Myw3IEBACiAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm1hby5nZXRSQSgpIGlzIG51bGwiKTsKICAgICAgICB9CiAgICAgfWNhdGNoKEV4Y2VwdGlvbiBlKXsKLQllLnByaW50U3RhY2tUcmFjZSgpOworICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgfQogCiAgdHJ5ewpAQCAtOTcsMTEgKzk3LDExIEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKENvbnRyb2xzLmdldExvY2tPYmplY3QoKSkgewogICAgICAgICAgICAgICAgIC8vVGVsbCB0aGUgcmVzb3VyY2UgYWRhcHRlciB0aGUgY2xpZW50IGlzIHJlYWR5IHRvIHJ1bgotICAgICAgICAgICAgICAgIENvbnRyb2xzLmdldExvY2tPYmplY3QoKS5ub3RpZnlBbGwoKTsgCi0gICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLm5vdGlmeUFsbCgpOworCiAgICAgICAgICAgICAgICAgZGVidWcoIk5PVElGSUVELi4uIFNUQVJUIFdBSVRJTkciKTsKICAgICAgICAgICAgICAgICAvL1dhaXQgdW50aWwgYmVpbmcgdG9sZCB0byByZWFkIGZyb20gdGhlIGRhdGFiYXNlCi0gICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLndhaXQoKTsgCisgICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLndhaXQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTEyMCwyMiArMTIwLDIyIEBACiAgICAgfQogCiAgICAgcHVibGljIGludCBnZXRNZXNzYWdlQ291bnQoKSB7Ci0JdHJ5IHsKKyAgICB0cnkgewogICAgICAgICAgICAgQ29ubmVjdGlvbiBjb24gPSBnZXRGcmVzaENvbm5lY3Rpb24oKTsKICAgICAgICAgICAgIGludCBjb3VudDEgPSBnZXRDb3VudChjb24pOwogICAgICAgICAgICAgY29uLmNsb3NlKCk7Ci0gICAgICAgICAgICAKLQkgICAgLyoKKworICAgICAgICAvKgogICAgICAgICAgICAgc3luY2hyb25pemVkKENvbnRyb2xzLmdldExvY2tPYmplY3QoKSkgewogICAgICAgICAgICAgICAgIENvbnRyb2xzLmdldExvY2tPYmplY3QoKS5ub3RpZnkoKTsKICAgICAgICAgICAgIH0KLQkgICAgKi8KLSAgICAgICAgICAgICAgICAKKyAgICAgICAgKi8KKwogICAgICAgICAgICAgcmV0dXJuIGNvdW50MTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5vdXQpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlKTsKLQl9CisgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgaW50IGdldENvdW50KENvbm5lY3Rpb24gY29uKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKQEAgLTE2MSwxMCArMTYxLDEwIEBACiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICB1c2VyID0gKFN0cmluZykgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3VzZXIiKTsKICAgICAgICAgICAgIHBhc3N3b3JkID0gKFN0cmluZykgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3Bhc3N3b3JkIik7Ci0JICAgIENvbnRyb2xzID0gKE15QWRtaW5PYmplY3QpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9laXMvdGVzdEFkbWluIik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ0FMTElORyBJTklUSUxJWkUgXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV0iKTsKLQkgICAgQ29udHJvbHMuaW5pdGlhbGl6ZSgpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNBTExFRCBJTklUSUxJWkUgXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV0iICsgQ29udHJvbHMpOworICAgICAgICBDb250cm9scyA9IChNeUFkbWluT2JqZWN0KSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWlzL3Rlc3RBZG1pbiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNBTExJTkcgSU5JVElMSVpFIF1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dIik7CisgICAgICAgIENvbnRyb2xzLmluaXRpYWxpemUoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDQUxMRUQgSU5JVElMSVpFIF1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dIiArIENvbnRyb2xzKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQpAQCAtMTk5LDcgKzE5OSw3IEBACiAgICAgICAgICAgICBkZWJ1ZygiTG9va2VkIHVwIERhdGFzb3VyY2VcbiIpOwogICAgICAgICAgICAgZGVidWcoIkdldCBKREJDIGNvbm5lY3Rpb24sIGF1dG8gc2lnbiBvbiIpOwogICAgICAgICAgICAgY29uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmIChjb24gIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIHJldHVybiBjb247CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMjEwLDcgKzIxMCw3IEBACiAgICAgICAgICAgICB0aHJvdyBleDE7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgY2xvc2VDb25uZWN0aW9uKENvbm5lY3Rpb24gY29uKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgICAgaWYgKGhlbGRDb24gIT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL2FwcC9zcmMvYnVpbGQucHJvcGVydGllcwppbmRleCBkYWQyMDdiLi4wYjM4YzE5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL2FwcC9zcmMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL2FwcC9zcmMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiBlamItamFyLnhtbD1NRVRBLUlORi9lamItamFyLnhtbAogc3VuLWVqYi1qYXIueG1sPU1FVEEtSU5GL3N1bi1lamItamFyLnhtbApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9hcHAvc3JjL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvYXBwL3NyYy9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggOTM0MzUwNi4uMzkzOTI1NyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9hcHAvc3JjL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL2FwcC9zcmMvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yOCw0NSArMjgsNDUgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLSAgICAKKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgLy9zdXBlcihhcmdzKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBkb1Rlc3QoKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlRoaXMgaXMgdG8gdGVzdCBjb25uZWN0b3IgMS41ICIrCi0JICAgICAgICAgICAgICJjb250cmFjdHMuIik7Ci0gICAgICAgIAorICAgICAgICAgICAgICAgICAiY29udHJhY3RzLiIpOworCiAgICAgICAgIFN0cmluZyByZXMgPSAiTk9UIFJVTiI7Ci0JZGVidWcoImRvVGVzdCgpIEVOVEVSLi4uIik7CisgICAgZGVidWcoImRvVGVzdCgpIEVOVEVSLi4uIik7CiAgICAgICAgIGJvb2xlYW4gcGFzcyA9IGZhbHNlOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmVzICA9ICJBTEwgVEVTVFMgUEFTU0VEIjsKLQkgICAgaW50IHRlc3RDb3VudCA9IDE7CisgICAgICAgIGludCB0ZXN0Q291bnQgPSAxOwogICAgICAgICAgICAgd2hpbGUgKCFkb25lKCkpIHsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIG5vdGlmeUFuZFdhaXQoKTsKICAgICAgICAgICAgICAgICBpZiAoIWRvbmUoKSkgewogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiUnVubmluZy4uLiIpOwogICAgICAgICAgICAgICAgICAgICBwYXNzID0gY2hlY2tSZXN1bHRzKGV4cGVjdGVkUmVzdWx0cygpKTsKICAgICAgICAgICAgICAgICAgICAgZGVidWcoIkdvdCBleHBlY3RlZCByZXN1bHRzID0gIiArIHBhc3MpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvL2RvIG5vdCBjb250aW51ZSBpZiBvbmUgdGVzdCBmYWlsZWQKICAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXNzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXMgPSAiU09NRSBURVNUUyBGQUlMRUQiOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIklEIENvbm5lY3RvciAxLjYgdGVzdCAtICIgKyB0ZXN0Q291bnQsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiSUQgQ29ubmVjdG9yIDEuNiB0ZXN0IC0gIiArIHRlc3RDb3VudCwgc3RhdC5QQVNTKTsKLQkJICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0JCXRlc3RDb3VudCArKzsKKyAgICAgICAgdGVzdENvdW50ICsrOwogICAgICAgICAgICAgfQogCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpAQCAtNzYsMTQgKzc2LDE0IEBACiAgICAgICAgIH0KICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImNvbm5lY3RvcjEuNklEIik7CiAKLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIkVYSVRJTkcuLi4gU1RBVFVTID0gIiArIHJlcyk7CiAgICAgICAgIHJldHVybiByZXM7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBib29sZWFuIGNoZWNrUmVzdWx0cyhpbnQgbnVtKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgT2JqZWN0IG8gPSAobmV3IEluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiTXlNZXNzYWdlQ2hlY2tlciIpOwotICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKSAKKyAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkKICAgICAgICAgICAgIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvLCBNZXNzYWdlQ2hlY2tlckhvbWUuY2xhc3MpOwogICAgICAgICBNZXNzYWdlQ2hlY2tlciBjaGVja2VyID0gaG9tZS5jcmVhdGUoKTsKICAgICAgICAgaW50IHJlc3VsdCA9IGNoZWNrZXIuZ2V0TWVzc2FnZUNvdW50KCk7CkBAIC05Miw3ICs5Miw3IEBACiAKICAgICBwcml2YXRlIGJvb2xlYW4gZG9uZSgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBPYmplY3QgbyA9IChuZXcgSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJNeU1lc3NhZ2VDaGVja2VyIik7Ci0gICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpIAorICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKQogICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG8sIE1lc3NhZ2VDaGVja2VySG9tZS5jbGFzcyk7CiAgICAgICAgIE1lc3NhZ2VDaGVja2VyIGNoZWNrZXIgPSBob21lLmNyZWF0ZSgpOwogICAgICAgICByZXR1cm4gY2hlY2tlci5kb25lKCk7CkBAIC0xMDAsNyArMTAwLDcgQEAKIAogICAgIHByaXZhdGUgaW50IGV4cGVjdGVkUmVzdWx0cygpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBPYmplY3QgbyA9IChuZXcgSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJNeU1lc3NhZ2VDaGVja2VyIik7Ci0gICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpIAorICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKQogICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG8sIE1lc3NhZ2VDaGVja2VySG9tZS5jbGFzcyk7CiAgICAgICAgIE1lc3NhZ2VDaGVja2VyIGNoZWNrZXIgPSBob21lLmNyZWF0ZSgpOwogICAgICAgICByZXR1cm4gY2hlY2tlci5leHBlY3RlZFJlc3VsdHMoKTsKQEAgLTEwOCw3ICsxMDgsNyBAQAogCiAgICAgcHJpdmF0ZSB2b2lkIG5vdGlmeUFuZFdhaXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgT2JqZWN0IG8gPSAobmV3IEluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiTXlNZXNzYWdlQ2hlY2tlciIpOwotICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKSAKKyAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkKICAgICAgICAgICAgIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvLCBNZXNzYWdlQ2hlY2tlckhvbWUuY2xhc3MpOwogICAgICAgICBNZXNzYWdlQ2hlY2tlciBjaGVja2VyID0gaG9tZS5jcmVhdGUoKTsKICAgICAgICAgY2hlY2tlci5ub3RpZnlBbmRXYWl0KCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL2FwcC9zcmMvbWRiL015TWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhCmluZGV4IGI3NDI3YWEuLjYyYzQyYWQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhCkBAIC0yOSw0MSArMjksNDEgQEAKIAogLyoqCiAgKi8KLXB1YmxpYyBjbGFzcyBNeU1lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZURyaXZlbkJlYW4sIAorcHVibGljIGNsYXNzIE15TWVzc2FnZUJlYW4gaW1wbGVtZW50cyBNZXNzYWdlRHJpdmVuQmVhbiwKICAgICAgICAgTXlNZXNzYWdlTGlzdGVuZXIgewogCiAgICAgcHJpdmF0ZSB0cmFuc2llbnQgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjID0gbnVsbDsKICAgICBwcml2YXRlIENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdG9yLCB3aGljaCBpcyBwdWJsaWMgYW5kIHRha2VzIG5vIGFyZ3VtZW50cy4KICAgICAgKi8KICAgICBwdWJsaWMgTXlNZXNzYWdlQmVhbigpIHt9CiAKICAgICAvKioKLSAgICAgKiBzZXRNZXNzYWdlRHJpdmVuQ29udGV4dCBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IAotICAgICAqIG5vdCBmaW5hbCBvciBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIAorICAgICAqIHNldE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQKKyAgICAgKiBub3QgZmluYWwgb3Igc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZAogICAgICAqIHdpdGggb25lIGFyZ3VtZW50IG9mIHR5cGUgamFrYXJ0YS5lamIuTWVzc2FnZURyaXZlbkNvbnRleHQuCiAgICAgICoKICAgICAgKiBAcGFyYW0gbWRjICAgIHRoZSBjb250ZXh0IHRvIHNldAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldE1lc3NhZ2VEcml2ZW5Db250ZXh0KE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYykgewotCXRoaXMubWRjID0gbWRjOworICAgIHRoaXMubWRjID0gbWRjOwogICAgIH0KIAogICAgIC8qKgotICAgICAqIGVqYkNyZWF0ZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvciAKLSAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggbm8gCisgICAgICogZWpiQ3JlYXRlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yCisgICAgICogc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCB3aXRoIG5vCiAgICAgICogYXJndW1lbnRzLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHsgfQogCiAgICAgLyoqCi0gICAgICogb25NZXNzYWdlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yIAorICAgICAqIG9uTWVzc2FnZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvcgogICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBvbmUgYXJndW1lbnQKICAgICAgKiBvZiB0eXBlIGpha2FydGEuam1zLk1lc3NhZ2UuCiAgICAgICoKLSAgICAgKiBDYXN0cyB0aGUgaW5jb21pbmcgTWVzc2FnZSB0byBhIFRleHRNZXNzYWdlIGFuZCBkaXNwbGF5cyAKKyAgICAgKiBDYXN0cyB0aGUgaW5jb21pbmcgTWVzc2FnZSB0byBhIFRleHRNZXNzYWdlIGFuZCBkaXNwbGF5cwogICAgICAqIHRoZSB0ZXh0LgogICAgICAqCiAgICAgICogQHBhcmFtIGluTWVzc2FnZSAgICB0aGUgaW5jb21pbmcgbWVzc2FnZQpAQCAtNzQsNyArNzQsNyBAQAogICAgICAgICAvL2xvZygib25NZXNzYWdlOjogZ2V0Q2FsbGVyUHJpbmNpcGFsIDogIiArIG1kYy5nZXRDYWxsZXJQcmluY2lwYWwoKSk7CiAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJvbk1lc3NhZ2UgOiBUaHJlYWRJRCA6ICIgKyBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldE5hbWUoKSk7CiAgICAgICAgIGlmKG1kYy5nZXRDYWxsZXJQcmluY2lwYWwoKSAhPSBudWxsKXsKLSAgICAgICAgCWxvZygib25NZXNzYWdlOjogZ2V0Q2FsbGVyUHJpbmNpcGFsIE5hbWUgOiAiICsgbWRjLmdldENhbGxlclByaW5jaXBhbCgpLmdldE5hbWUoKSk7CisgICAgICAgICAgICBsb2coIm9uTWVzc2FnZTo6IGdldENhbGxlclByaW5jaXBhbCBOYW1lIDogIiArIG1kYy5nZXRDYWxsZXJQcmluY2lwYWwoKS5nZXROYW1lKCkpOwogICAgICAgICB9CiAKICAgICAgICAgbG9nKCJvbk1lc3NhZ2UgOiBpc0NhbGxlckluUm9sZSgnamFnYWRpc2gnKSA6ICIgKyBtZGMuaXNDYWxsZXJJblJvbGUoImphZ2FkaXNoIikpOwpAQCAtODMsNyArODMsNyBAQAogCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpZiAoaW5NZXNzYWdlLmVuZHNXaXRoKCJXUklURSIpKSB7Ci0gICAgICAgICAgICAgICAgZG9EYlN0dWZmKCJXUklURSIsIAorICAgICAgICAgICAgICAgIGRvRGJTdHVmZigiV1JJVEUiLAogICAgICAgICAgICAgICAgICAgICAgICAgaW5NZXNzYWdlLnN1YnN0cmluZygwLCBpbk1lc3NhZ2UubGFzdEluZGV4T2YoIjoiKSkpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChpbk1lc3NhZ2UuZW5kc1dpdGgoIkRFTEVURSIpKSB7CiAgICAgICAgICAgICAgICAgZG9EYlN0dWZmKCJERUxFVEUiLApAQCAtOTcsMTAgKzk3LDEwIEBACiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIGVqYlJlbW92ZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvciAKLSAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggbm8gCisgICAgICogZWpiUmVtb3ZlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yCisgICAgICogc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCB3aXRoIG5vCiAgICAgICogYXJndW1lbnRzLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHt9CkBAIC0xMTAsNjIgKzExMCw2MiBAQAogCiAgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uID0gbnVsbDsKICAgICAgICAgU3RyaW5nIGlkICAgID0gbWVzc2FnZS5zdWJzdHJpbmcoMCwgbWVzc2FnZS5pbmRleE9mKCI6IikpOwotICAgICAgICBTdHJpbmcgYm9keSAgPSBtZXNzYWdlLnN1YnN0cmluZyhtZXNzYWdlLmluZGV4T2YoIjoiKSsxKTsgCisgICAgICAgIFN0cmluZyBib2R5ICA9IG1lc3NhZ2Uuc3Vic3RyaW5nKG1lc3NhZ2UuaW5kZXhPZigiOiIpKzEpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmICgiUkVBRCIuZXF1YWxzKG9wKSkgewotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgZGVidWcoIlJlYWRpbmcgcm93IGZyb20gZGF0YWJhc2UuLi4iKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIC8vIENyZWF0aW5nIGEgZGF0YWJhc2UgY29ubmVjdGlvbgogCiAgICAgICAgICAgICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9NeURCIik7CiAgICAgICAgICAgICAgICAgICBkZWJ1ZygiTG9va2VkIHVwIERhdGFzb3VyY2VcbiIpOwogICAgICAgICAgICAgICAgICAgZGVidWcoIkdldCBKREJDIGNvbm5lY3Rpb24sIGF1dG8gc2lnbiBvbiIpOwogICAgICAgICAgICAgICAgICAgZGJDb25uZWN0aW9uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgIFN0YXRlbWVudCBzdG10ID0gZGJDb25uZWN0aW9uLmNyZWF0ZVN0YXRlbWVudCgpOwotICAgICAgICAgICAgICAgICAgU3RyaW5nIHF1ZXJ5ID0gCisgICAgICAgICAgICAgICAgICBTdHJpbmcgcXVlcnkgPQogICAgICAgICAgICAgICAgICAgIlNFTEVDVCBpZCBmcm9tIG1lc3NhZ2VzIHdoZXJlIGlkID0gJ1FRJyI7CiAgICAgICAgICAgICAgICAgICBSZXN1bHRTZXQgcmVzdWx0cyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHF1ZXJ5KTsKICAgICAgICAgICAgICAgICAgIHJlc3VsdHMubmV4dCgpOwotICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJRUSBoYXMgYmFsYW5jZSAiICsgCisgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlFRIGhhcyBiYWxhbmNlICIgKwogICAgICAgICAgICAgICAgICAgcmVzdWx0cy5nZXRJbnQoImJhbGFuY2UiKSArICIgZG9sbGFycyIpOwogICAgICAgICAgICAgICAgICAgcmVzdWx0cy5jbG9zZSgpOwogICAgICAgICAgICAgICAgICAgc3RtdC5jbG9zZSgpOwotICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVhZCBvbmUgYWNjb3VudFxuIik7CiAKICAgICAgICAgICAgIH0gZWxzZSBpZiAoIldSSVRFIi5lcXVhbHMob3ApKSB7CiAKICAgICAgICAgICAgICAgICBkZWJ1ZygiSW5zZXJ0aW5nIG9uZSBtZXNzYWdlIGluIHRoZSBkYXRhYmFzZVxuIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIC8vIENyZWF0aW5nIGEgZGF0YWJhc2UgY29ubmVjdGlvbgogICAgICAgICAgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L015REIiKTsKICAgICAgICAgICAgICAgICAvL2RlYnVnKCJMb29rZWQgdXAgRGF0YXNvdXJjZVxuIik7CiAgICAgICAgICAgICAgICAgLy9kZWJ1ZygiR2V0IEpEQkMgY29ubmVjdGlvbiwgYXV0byBzaWduIG9uIik7CiAgICAgICAgICAgICAgICAgZGJDb25uZWN0aW9uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgY3JlYXRlUm93KGlkLCBib2R5LCBkYkNvbm5lY3Rpb24pOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRlZCBvbmUgbWVzc2FnZVxuIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIH0gZWxzZSBpZiAoIkRFTEVURSIuZXF1YWxzKG9wKSkgewotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgZGVidWcoIkRlbGV0aW5nIG9uZSBtZXNzYWdlIGZyb20gdGhlIGRhdGFiYXNlXG4iKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIC8vIENyZWF0aW5nIGEgZGF0YWJhc2UgY29ubmVjdGlvbgogICAgICAgICAgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L015REIiKTsKICAgICAgICAgICAgICAgICAvL2RlYnVnKCJMb29rZWQgdXAgRGF0YXNvdXJjZVxuIik7CiAgICAgICAgICAgICAgICAgLy9kZWJ1ZygiR2V0IEpEQkMgY29ubmVjdGlvbiwgYXV0byBzaWduIG9uIik7CiAgICAgICAgICAgICAgICAgZGJDb25uZWN0aW9uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgZGVsZXRlUm93KGlkLCBkYkNvbm5lY3Rpb24pOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGVsZXRlZCBvbmUgbWVzc2FnZVxuIik7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKCJERUxFVEVfQUxMIi5lcXVhbHMob3ApKSB7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZWJ1ZygiRGVsZXRpbmcgYWxsIG1lc3NhZ2VzIGZyb20gdGhlIGRhdGFiYXNlXG4iKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIC8vIENyZWF0aW5nIGEgZGF0YWJhc2UgY29ubmVjdGlvbgogICAgICAgICAgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L015REIiKTsKICAgICAgICAgICAgICAgICAvL2RlYnVnKCJMb29rZWQgdXAgRGF0YXNvdXJjZVxuIik7CkBAIC0xNzYsNyArMTc2LDcgQEAKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy91bnN1cHBvcnRlZCBvcAogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgfWZpbmFsbHl7CiAgICAgICAgICAgICB0cnl7CiAgICAgICAgICAgICAgICAgZGJDb25uZWN0aW9uLmNsb3NlKCk7CkBAIC0xODUsOSArMTg1LDkgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICBwcml2YXRlIHZvaWQgY3JlYXRlUm93KFN0cmluZyBpZCwgU3RyaW5nIGJvZHksIAotICAgICAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pIAorCisgICAgcHJpdmF0ZSB2b2lkIGNyZWF0ZVJvdyhTdHJpbmcgaWQsIFN0cmluZyBib2R5LAorICAgICAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogCiAgICAgICAgIC8vIENyZWF0ZSByb3cgZm9yIHRoaXMgbWVzc2FnZQpAQCAtMjAzLDkgKzIwMyw5IEBACiAgICAgICAgIHN0bXQuY2xvc2UoKTsKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgZGVsZXRlUm93KFN0cmluZyBpZCwgamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pIAorICAgIHByaXZhdGUgdm9pZCBkZWxldGVSb3coU3RyaW5nIGlkLCBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIERlbGV0ZSByb3cgZm9yIHRoaXMgbWVzc2FnZQogICAgICAgICBkZWJ1ZygiRGVsZXRlUm93IHdpdGggSUQgPSAiICsgaWQpOwogICAgICAgICBTdGF0ZW1lbnQgc3RtdCA9IGRiQ29ubmVjdGlvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKQEAgLTIxOCw5ICsyMTgsOSBAQAogICAgICAgICBzdG10LmNsb3NlKCk7CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIGRlbGV0ZUFsbChqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikgCisgICAgcHJpdmF0ZSB2b2lkIGRlbGV0ZUFsbChqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIERlbGV0ZSByb3cgZm9yIHRoaXMgbWVzc2FnZQogICAgICAgICBTdGF0ZW1lbnQgc3RtdCA9IGRiQ29ubmVjdGlvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKICAgICAgICAgU3RyaW5nIHF1ZXJ5ID0gIkRFTEVURSBGUk9NIG1lc3NhZ2VzIjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvYXBwL3NyYy9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvYXBwL3NyYy9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YQppbmRleCBlYTBkNWQxLi45N2E2M2UzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL2FwcC9zcmMvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9hcHAvc3JjL3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhCkBAIC00NSwxNyArNDUsMTcgQEAKIAogICAgIHB1YmxpYyBTdHJpbmcgZG9UZXN0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgSU9FeGNlcHRpb257CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhpcyBpcyB0byB0ZXN0IGNvbm5lY3RvciAxLjYgIisKLQkgICAgICAgICAgICAgImNvbnRyYWN0cy4iKTsKKyAgICAgICAgICAgICAgICAgImNvbnRyYWN0cy4iKTsKIAogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwogCiAgICAgICAgIFN0cmluZyByZXMgPSAiTk9UIFJVTiI7Ci0JZGVidWcoImRvVGVzdCgpIEVOVEVSLi4uIik7CisgICAgZGVidWcoImRvVGVzdCgpIEVOVEVSLi4uIik7CiAgICAgICAgIGJvb2xlYW4gcGFzcyA9IGZhbHNlOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmVzICA9ICJBTEwgVEVTVFMgUEFTU0VEIjsKLQkgICAgaW50IHRlc3RDb3VudCA9IDE7CisgICAgICAgIGludCB0ZXN0Q291bnQgPSAxOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIlN0YXJ0aW5nIHRoZSB0ZXN0Iik7CiAgICAgICAgICAgICBvdXQuZmx1c2goKTsKIApAQCAtOTQsMTggKzk0LDE4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICByZXMgPSAiU09NRSBURVNUUyBGQUlMRUQiOwogICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJRCBDb25uZWN0b3IgMS42IHRlc3QgLSAiICsgdGVzdENvdW50ICsgIiBGQUlMIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiVEVTVDpGQUlMIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJRCBDb25uZWN0b3IgMS42IHRlc3QgLSAiICsgdGVzdENvdW50ICsgIiBQQVNTIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiVEVTVDpQQVNTIik7Ci0JCSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJFTkRfT0ZfRVhFQ1VUSU9OIik7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG91dC5wcmludGxuKCJFTkRfT0ZfRVhFQ1VUSU9OIik7Ci0gICAgICAgICAgICAKKwogCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbXBvcnRpbmcgdHJhbnNhY3Rpb24gdGVzdCBmYWlsZWQuIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMjA3YTQ4Ni4uMDgzYjI2MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvY29ubmVjdG9yMTYvc2VydmxldCIvPgogPHByb3BlcnR5IG5hbWU9Imh0dHA6aG9zdCIgdmFsdWU9ImxvY2FsaG9zdCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9yYS9NRVRBLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvcmEvTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwKaW5kZXggYTkzNDlmYy4uMGZjYWJkZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9yYS9NRVRBLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL3JhL01FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sCkBAIC00OCw0ICs0OCw0IEBACiAgICAgICA8cHJpbmNpcGFsLW1hcCBlaXMtcHJpbmNpcGFsPSJlaXMtcHJhc2F0aCIgbWFwcGVkLXByaW5jaXBhbD0icHJhc2F0aCIgLz4KICAgICAgIDxwcmluY2lwYWwtbWFwIGVpcy1wcmluY2lwYWw9ImVpcy1qYWdhZGlzaCIgbWFwcGVkLXByaW5jaXBhbD0iamFnYWRpc2giIC8+CiAgICAgPC93b3JrLXNlY3VyaXR5LW1hcD4KLTwvcmVzb3VyY2VzPiAKKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9yYS9NRVRBLUlORi9yYS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL3JhL01FVEEtSU5GL3JhLnhtbAppbmRleCA5NzgxZTE2Li4zY2NmMjk2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL3JhL01FVEEtSU5GL3JhLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL3JhL01FVEEtSU5GL3JhLnhtbApAQCAtNTEsNyArNTEsNyBAQAogICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHktY29uZmlkZW50aWFsPgogICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgPGluYm91bmQtcmVzb3VyY2VhZGFwdGVyPgotICAgICAgICAgICAgPG1lc3NhZ2VhZGFwdGVyPiAgICAgICAgICAKKyAgICAgICAgICAgIDxtZXNzYWdlYWRhcHRlcj4KICAgICAgICAgICAgICAgICA8bWVzc2FnZWxpc3RlbmVyPgogICAgICAgICAgICAgICAgICAgICA8bWVzc2FnZWxpc3RlbmVyLXR5cGU+CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIKQEAgLTYyLDcgKzYyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIDwvYWN0aXZhdGlvbnNwZWMtY2xhc3M+CiAgICAgICAgICAgICAgICAgICAgIDwvYWN0aXZhdGlvbnNwZWM+CiAgICAgICAgICAgICAgICAgPC9tZXNzYWdlbGlzdGVuZXI+Ci0gICAgICAgICAgICA8L21lc3NhZ2VhZGFwdGVyPiAgICAgICAgICAKKyAgICAgICAgICAgIDwvbWVzc2FnZWFkYXB0ZXI+CiAgICAgICAgIDwvaW5ib3VuZC1yZXNvdXJjZWFkYXB0ZXI+CiAgICAgICAgIDxhZG1pbm9iamVjdD4KICAgICAgICAgICA8YWRtaW5vYmplY3QtaW50ZXJmYWNlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC9hZG1pbm9iamVjdC1pbnRlcmZhY2U+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL3JhL3NyYy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL3JhL3NyYy9idWlsZC54bWwKaW5kZXggZWQyOTg4OS4uODUyODgxOCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9yYS9zcmMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvcmEvc3JjL2J1aWxkLnhtbApAQCAtMzAsOCArMzAsOCBAQAogCiAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJpbml0LWNvbW1vbiIgPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJidWlsZC5jbGFzc2VzLmRpciIgdmFsdWU9ImNsYXNzZXMiIC8+Ci0JPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNvbm5lY3RvciIgLz4KKyAgICA8cGFyYW0gbmFtZT0iYnVpbGQuY2xhc3Nlcy5kaXIiIHZhbHVlPSJjbGFzc2VzIiAvPgorICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjb25uZWN0b3IiIC8+CiAgICAgPC9hbnRjYWxsPgogICAgIDxqYXIgamFyZmlsZT0iLi4vZ2VuZXJpYy1yYS5qYXIiIGJhc2VkaXI9ImNsYXNzZXMiCiAgICAgICAgICBpbmNsdWRlcz0iY29ubmVjdG9yLyouY2xhc3MiIC8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhCmluZGV4IDU1NTMzZDQuLmY1OWIyYjMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgQ29udHJvbHMgewogICAgIHB1YmxpYyBzdGF0aWMgT2JqZWN0IHJlYWR5TG9jayA9IG5ldyBPYmplY3QoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQppbmRleCA2NTgyMzNlLi5kNzNjODYyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgRGVsaXZlcnlXb3JrIGltcGxlbWVudHMgV29yayB7CiAKQEAgLTM2LDcgKzM2LDcgQEAKICAgICBwcml2YXRlIFN0cmluZyBvcDsKICAgICBwcml2YXRlIGJvb2xlYW4ga2VlcENvdW50OwogICAgIHByaXZhdGUgc3RhdGljIGludCBjb3VudGVyID0gMDsKLSAgICAKKwogICAgIHB1YmxpYyBEZWxpdmVyeVdvcmsoTWVzc2FnZUVuZHBvaW50IGVwLCBpbnQgbnVtT2ZNZXNzYWdlcywgU3RyaW5nIG9wKSB7CiAgICAgICAgIHRoaXMuZXAgPSBlcDsKICAgICAgICAgdGhpcy5udW0gPSBudW1PZk1lc3NhZ2VzOwpAQCAtNDQsNyArNDQsNyBAQAogICAgICAgICB0aGlzLmtlZXBDb3VudCA9IGZhbHNlOwogICAgIH0KIAotICAgIHB1YmxpYyBEZWxpdmVyeVdvcmsoTWVzc2FnZUVuZHBvaW50IGVwLCBpbnQgbnVtT2ZNZXNzYWdlcywgCisgICAgcHVibGljIERlbGl2ZXJ5V29yayhNZXNzYWdlRW5kcG9pbnQgZXAsIGludCBudW1PZk1lc3NhZ2VzLAogICAgICAgICAgICAgU3RyaW5nIG9wLCBib29sZWFuIGtlZXBDb3VudCkgewogICAgICAgICB0aGlzLmVwID0gZXA7CiAgICAgICAgIHRoaXMubnVtID0gbnVtT2ZNZXNzYWdlczsKQEAgLTU1LDcgKzU1LDcgQEAKICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CiAKICAgICAgICAgZGVidWcoIkVOVEVSLi4uIik7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAvL01ldGhvZCBvbk1lc3NhZ2UgPSBnZXRPbk1lc3NhZ2VNZXRob2QoKTsKICAgICAgICAgICAgIC8vZXAuYmVmb3JlRGVsaXZlcnkob25NZXNzYWdlKTsKQEAgLTc4LDExICs3OCwxMSBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvL2VwLmFmdGVyRGVsaXZlcnkoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgZGVidWcoIkxFQVZFLi4uIik7CiAgICAgfQogCkBAIC05MywxNCArOTMsMTQgQEAKICAgICB9CiAKICAgICBwcml2YXRlIE1ldGhvZCBnZXRPbk1lc3NhZ2VNZXRob2QoKSB7Ci0gICAgICAgIAorCiAgICAgICAgIE1ldGhvZCBvbk1lc3NhZ2VNZXRob2QgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ2xhc3MgbXNnTGlzdGVuZXJDbGFzcyA9IGNvbm5lY3Rvci5NeU1lc3NhZ2VMaXN0ZW5lci5jbGFzczsKICAgICAgICAgICAgIENsYXNzW10gcGFyYW1UeXBlcyA9IHsgamF2YS5sYW5nLlN0cmluZy5jbGFzcyB9OwotICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0gCisgICAgICAgICAgICBvbk1lc3NhZ2VNZXRob2QgPQogICAgICAgICAgICAgICAgIG1zZ0xpc3RlbmVyQ2xhc3MuZ2V0TWV0aG9kKCJvbk1lc3NhZ2UiLCBwYXJhbVR5cGVzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEKaW5kZXggMTAwY2FjZS4uZmE5M2Y2MyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgICAgICAgICAgZmxhZ1RvU3RyaW5nKGZsYWdzKSk7CiAgICAgfQogCi0gICAgCisKICAgICBwdWJsaWMgdm9pZCBmb3JnZXQoWGlkIHhpZCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLmZvcmdldDogIiArIHhpZFRvU3RyaW5nKHhpZCkpOwogICAgIH0KQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLnByZXBhcmU6ICIgKyB4aWRUb1N0cmluZyh4aWQpKTsKICAgICAgICAgcmV0dXJuIFhBUmVzb3VyY2UuWEFfT0s7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFhpZFtdIHJlY292ZXIoaW50IGZsYWcpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5yZWNvdmVyOiAiICsgZmxhZ1RvU3RyaW5nKGZsYWcpKTsKICAgICAgICAgcmV0dXJuIG51bGw7CkBAIC02Niw3ICs2Niw3IEBACiAgICAgcHVibGljIGJvb2xlYW4gc2V0VHJhbnNhY3Rpb25UaW1lb3V0KGludCBzZWNvbmRzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc3RhcnQoWGlkIHhpZCwgaW50IGZsYWdzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2Uuc3RhcnQ6ICIgKyB4aWRUb1N0cmluZyh4aWQpICsgIiwiICsKICAgICAgICAgICAgICAgICBmbGFnVG9TdHJpbmcoZmxhZ3MpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvcmEvc3JjL2Nvbm5lY3Rvci9KU1IzMjJXb3JrLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL3JhL3NyYy9jb25uZWN0b3IvSlNSMzIyV29yay5qYXZhCmluZGV4IDUxMDdhYzEuLjAyMDNmNGEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvcmEvc3JjL2Nvbm5lY3Rvci9KU1IzMjJXb3JrLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9yYS9zcmMvY29ubmVjdG9yL0pTUjMyMldvcmsuamF2YQpAQCAtNDgsNiArNDgsNiBAQAogCiAgICAgcHVibGljIHZvaWQgcnVuKCl7CiAgICAgICAgIHN1cGVyLnJ1bigpOwotICAgICAgICAKKwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdC5qYXZhCmluZGV4IGE2OGE1YjcuLjljMjg4MTIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9yYS9zcmMvY29ubmVjdG9yL015QWRtaW5PYmplY3QuamF2YQpAQCAtNTEsMTEgKzUxLDExIEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgaW5pdGlhbGl6ZSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXppbmcgdGhlIENvbnRyb2xzIHRvIGZhbHNlOiIrcmVzZXRDb250cm9sKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXppbmcgdGhlIENvbnRyb2xzIHRvIGZhbHNlOiIrcmVzZXRDb250cm9sKTsKICAgICAgICAgaWYgKHJlc2V0Q29udHJvbC5lcXVhbHMoIkJFR0lOTklORyIpKSB7CiAgICAgICAgICAgIENvbnRyb2xzLmRvbmU9ZmFsc2U7Ci0JICAgU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6ZWQgdGhlIENvbnRyb2xzIHRvIGZhbHNlIik7Ci0JfQorICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW015QWRtaW5PYmplY3RdIEluaXRpYWxpemVkIHRoZSBDb250cm9scyB0byBmYWxzZSIpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiBkb25lKCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9yYS9zcmMvY29ubmVjdG9yL015U2VjdXJpdHlDb250ZXh0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL3JhL3NyYy9jb25uZWN0b3IvTXlTZWN1cml0eUNvbnRleHQuamF2YQppbmRleCAzMTc4YzFjLi5lMTkwNTFlIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL3JhL3NyYy9jb25uZWN0b3IvTXlTZWN1cml0eUNvbnRleHQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL3JhL3NyYy9jb25uZWN0b3IvTXlTZWN1cml0eUNvbnRleHQuamF2YQpAQCAtNjIsNyArNjIsNyBAQAogICAgICAgICBDYWxsZXJQcmluY2lwYWxDYWxsYmFjayBjcGMgPSBuZXcgQ2FsbGVyUHJpbmNpcGFsQ2FsbGJhY2soZXhlY1N1YmplY3QsIG5ldyBQcmluY2lwYWxJbXBsKHByaW5jaXBhbE5hbWUpKTsKICAgICAgICAgZGVidWcoInNldHRpbmcgY2FsbGVyIHByaW5jaXBhbCBjYWxsYmFjayB3aXRoIHByaW5jaXBhbCA6ICIgKyBwcmluY2lwYWxOYW1lKTsKICAgICAgICAgY2FsbGJhY2tzLmFkZChjcGMpOwotICAgICAgICAKKwogLyoKICAgICAgICAgR3JvdXBQcmluY2lwYWxDYWxsYmFjayBncGMgPSBuZXcgR3JvdXBQcmluY2lwYWxDYWxsYmFjayhleGVjU3ViamVjdCwgbnVsbCk7CiAgICAgICAgIGNhbGxiYWNrcy5hZGQoZ3BjKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEKaW5kZXggODE4MmVmNS4uM2ZjZTU0NCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEKQEAgLTI0LDkgKzI0LDkgQEAKICAqIHNvIHRoYXQgdGhlIGFwcCBzZXJ2ZXIgY2FuIGluc3RhbnRpYXRlIGFuZCBjb25maWd1cmUKICAqIGl0IGF0IHRoZSBydW50aW1lLgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCi1wdWJsaWMgY2xhc3MgU2ltcGxlQWN0aXZhdGlvblNwZWMgCitwdWJsaWMgY2xhc3MgU2ltcGxlQWN0aXZhdGlvblNwZWMKICAgICBpbXBsZW1lbnRzIEFjdGl2YXRpb25TcGVjLCBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7CiAKICAgICBwcml2YXRlIFN0cmluZyBkZXN0aW5hdGlvbk5hbWU7CkBAIC00Myw3ICs0Myw3IEBACiAgICAgcHVibGljIFN0cmluZyBnZXREZXN0aW5hdGlvbk5hbWUgKCkgewogICAgICAgICByZXR1cm4gdGhpcy5kZXN0aW5hdGlvbk5hbWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0RGVzdGluYXRpb25OYW1lIChTdHJpbmcgbmFtZSkgewogICAgICAgICBkZWJ1Zygic2V0RGVzdGluYXRpb25OYW1lKCkgY2FsbGVkLi4uIG5hbWUgPSAiICsgbmFtZSk7CiAgICAgICAgIHRoaXMuZGVzdGluYXRpb25OYW1lID0gbmFtZTsKQEAgLTUyLDcgKzUyLDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldERlc3RpbmF0aW9uVHlwZSgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZGVzdGluYXRpb25UeXBlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldERlc3RpbmF0aW9uVHlwZSAoU3RyaW5nIHR5cGUpIHsKICAgICAgICAgZGVidWcoInNldERlc3RpbmF0aW9uVHlwZSAoKSBjYWxsZWQuLi4gdHlwZSA9ICIgKyB0eXBlKTsKICAgICAgICAgdGhpcy5kZXN0aW5hdGlvblR5cGU9IHR5cGU7CkBAIC02MSw3ICs2MSw3IEBACiAgICAgcHVibGljIFN0cmluZyBnZXRUZXN0UHJvcCgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMudGVzdFByb3A7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0VGVzdFByb3AgKFN0cmluZyB0ZXN0UHJvcCkgewogICAgICAgICBkZWJ1Zygic2V0VGVzdFByb3AgKCkgY2FsbGVkLi4uIHRlc3RQcm9wID0gIiArIHRlc3RQcm9wKTsKICAgICAgICAgdGhpcy50ZXN0UHJvcCA9IHRlc3RQcm9wOwpAQCAtNzAsNyArNzAsNyBAQAogICAgIHB1YmxpYyBJbnRlZ2VyIGdldFRlc3RJbnRlZ2VyUHJvcCgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMudGVzdEludGVnZXJQcm9wOwogICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFRlc3RJbnRlZ2VyUHJvcCAoSW50ZWdlciB0ZXN0UHJvcDEpIHsKICAgICAgICAgZGVidWcoInNldFRlc3RJbnRlZ2VyUHJvcCAoKSBjYWxsZWQuLi4gdGVzdEludGVnZXJQcm9wID0gIiArIHRlc3RQcm9wMSk7CiAgICAgICAgIHRoaXMudGVzdEludGVnZXJQcm9wID0gdGVzdFByb3AxOwpAQCAtOTQsNyArOTQsNyBAQAogCiAgICAgICB9CiAKLSAgIH0gCisgICB9CiAKICAgICBwcml2YXRlIHZvaWQgZGVidWcgKFN0cmluZyBtZXNzYWdlKQogICAgIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEKaW5kZXggZGRmZjAwNS4uNGU5MjFhMiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEKQEAgLTg2LDcgKzg2LDcgQEAKIAogICAgICAgICAgICAgICAgIGlmICghZmFjdG9yeS5pc0RlbGl2ZXJ5VHJhbnNhY3RlZChvbk1lc3NhZ2UpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vTWVzc2FnZUVuZHBvaW50IGVwID0gZmFjdG9yeS5jcmVhdGVFbmRwb2ludChudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgLy9EZWxpdmVyeVdvcmsgZCA9IG5ldyBEZWxpdmVyeVdvcmsoIk5PX1RYIiwgZXApOyAKKyAgICAgICAgICAgICAgICAgICAgLy9EZWxpdmVyeVdvcmsgZCA9IG5ldyBEZWxpdmVyeVdvcmsoIk5PX1RYIiwgZXApOwogICAgICAgICAgICAgICAgICAgICAvL3dtLmRvV29yayhkLCAwLCBudWxsLCBudWxsKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLWFwcC1tb2R1bGUtc2NvcGVkL3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEKaW5kZXggMThhOTcwZC4uYjJhOTA2YyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy1hcHAtbW9kdWxlLXNjb3BlZC9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMtYXBwLW1vZHVsZS1zY29wZWQvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YQpAQCAtMzUsOCArMzUsOCBAQAogICAgIHB1YmxpYyBpbnQgYnJhbmNoUXVhbGlmaWVyOwogICAgIHB1YmxpYyBpbnQgZ2xvYmFsVHhJRDsKIAotICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhHVFJJRFNJWkU9IDY0OyAKLSAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYQlFVQUxTSVpFPSA2NDsgCisgICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEdUUklEU0laRT0gNjQ7CisgICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEJRVUFMU0laRT0gNjQ7CiAKICAgICBwdWJsaWMgWElEKCkgewogICAgICAgICBpbnQgZm9vID0gSUQrKzsKQEAgLTU0LDEwICs1NCwxMCBAQAogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgICAgICAgICAgICAgICAgLy8gSXQgY2FuJ3QgYmUgZXF1YWwKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBvdGhlciA9IChYSUQpbzsgICAgICAgICAgICAgICAgICAgLy8gVGhlIG90aGVyIFhJRCwgbm93IHByb3Blcmx5IGNhc3QKLSAgICAgICAgCi0gICAgICAgIGlmICh0aGlzLmZvcm1hdElEID09IG90aGVyLmZvcm1hdElEIAorCisgICAgICAgIGlmICh0aGlzLmZvcm1hdElEID09IG90aGVyLmZvcm1hdElECiAgICAgICAgICAgICAgICAgJiYgdGhpcy5icmFuY2hRdWFsaWZpZXIgPT0gb3RoZXIuYnJhbmNoUXVhbGlmaWVyCiAgICAgICAgICAgICAgICAgJiYgdGhpcy5nbG9iYWxUeElEID09IG90aGVyLmdsb2JhbFR4SUQpIHsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtOTcsNyArOTcsNyBAQAogICAgICAgICAgICAgICAgICJmb3JtYXRJRCgiICAgICArIGZvcm1hdElEICAgICArICIpLCAiICsKICAgICAgICAgICAgICAgICAiYnJhbmNoUXVhbGlmaWVyICgiICsgYnJhbmNoUXVhbGlmaWVyICsgIiksICIgKwogICAgICAgICAgICAgICAgICJnbG9iYWxUeElEKCIgKyBnbG9iYWxUeElEICsgIil9Iik7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBzOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvYXBwL01FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvYXBwL01FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sCmluZGV4IDNiYjQ1NDkuLjhjZGY4NTkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL2FwcC9NRVRBLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9hcHAvTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwKQEAgLTczLDQgKzczLDQgQEAKICAgICA8L2FkbWluLW9iamVjdC1yZXNvdXJjZT4KIAogCi08L3Jlc291cmNlcz4gCis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL2FwcC9zcmMvTUVUQS1JTkYvZWpiLWdmLXJlc291cmNlcy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9hcHAvc3JjL01FVEEtSU5GL2VqYi1nZi1yZXNvdXJjZXMueG1sCmluZGV4IGZlNGEwOTAuLmQ3ZjhmOWIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL2FwcC9zcmMvTUVUQS1JTkYvZWpiLWdmLXJlc291cmNlcy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvYXBwL3NyYy9NRVRBLUlORi9lamItZ2YtcmVzb3VyY2VzLnhtbApAQCAtNTMsNCArNTMsNCBAQAogICAgIDwvamRiYy1jb25uZWN0aW9uLXBvb2w+CiAKICAgICA8amRiYy1yZXNvdXJjZSBlbmFibGVkPSJ0cnVlIiBqbmRpLW5hbWU9ImphdmE6bW9kdWxlL2pkYmMvZWpiLWxldmVsLWRzIiBvYmplY3QtdHlwZT0idXNlciIgcG9vbC1uYW1lPSJqYXZhOm1vZHVsZS9qZGJjL2VqYi1sZXZlbC1wb29sIi8+Ci08L3Jlc291cmNlcz4gCis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9hcHAvc3JjL01FVEEtSU5GL2VqYi1qYXIueG1sCmluZGV4IDU4MmI3ODEuLjEyZmI2ZDMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvYXBwL3NyYy9NRVRBLUlORi9lamItamFyLnhtbApAQCAtMTE0LDggKzExNCw4IEBACiAgICAgICAgIDxyZXMtc2hhcmluZy1zY29wZT5TaGFyZWFibGU8L3Jlcy1zaGFyaW5nLXNjb3BlPgogICAgICAgPC9yZXNvdXJjZS1yZWY+CiAgICAgICA8cmVzb3VyY2UtZW52LXJlZj4KLQk8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmVpcy90ZXN0QWRtaW48L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KLQk8cmVzb3VyY2UtZW52LXJlZi10eXBlPmNvbm5lY3Rvci5NeUFkbWluT2JqZWN0PC9yZXNvdXJjZS1lbnYtcmVmLXR5cGU+CisgICAgPHJlc291cmNlLWVudi1yZWYtbmFtZT5laXMvdGVzdEFkbWluPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+CisgICAgPHJlc291cmNlLWVudi1yZWYtdHlwZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvcmVzb3VyY2UtZW52LXJlZi10eXBlPgogICAgICAgPC9yZXNvdXJjZS1lbnYtcmVmPgogICAgICAgPHNlY3VyaXR5LWlkZW50aXR5PgogICAgICAgICA8dXNlLWNhbGxlci1pZGVudGl0eS8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9hcHAvc3JjL01FVEEtSU5GL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCmluZGV4IGU0NjU3N2YuLmNiOGNkMjMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCkBAIC0zMyw3ICszMyw3IEBACiAgICAgICAgICAgICBUZXN0SW50ZWdlclByb3AKICAgICAgICAgICA8L2FjdGl2YXRpb24tY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgPGFjdGl2YXRpb24tY29uZmlnLXByb3BlcnR5LXZhbHVlPgotICAgICAgICAgICAgMiAKKyAgICAgICAgICAgIDIKICAgICAgICAgICA8L2FjdGl2YXRpb24tY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICA8L2FjdGl2YXRpb24tY29uZmlnLXByb3BlcnR5PgogICAgICAgICA8L2FjdGl2YXRpb24tY29uZmlnPgpAQCAtODUsNyArODUsNyBAQAogICAgICAgPC9yZXNvdXJjZS1yZWY+CiAgICAgICA8cmVzb3VyY2UtZW52LXJlZj4KICAgICAgICAgPHJlc291cmNlLWVudi1yZWYtbmFtZT5laXMvdGVzdEFkbWluPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+Ci0JPGpuZGktbmFtZT5qYXZhOmFwcC9laXMvdGVzdEFkbWluPC9qbmRpLW5hbWU+CisgICAgPGpuZGktbmFtZT5qYXZhOmFwcC9laXMvdGVzdEFkbWluPC9qbmRpLW5hbWU+CiAgICAgICA8L3Jlc291cmNlLWVudi1yZWY+CiAgICAgICA8Z2VuLWNsYXNzZXMvPgogICAgIDwvZWpiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvYXBwL3NyYy9NRVRBLUlORi93ZWItZ2YtcmVzb3VyY2VzLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL2FwcC9zcmMvTUVUQS1JTkYvd2ViLWdmLXJlc291cmNlcy54bWwKaW5kZXggYWU2ZmMxMS4uOGMyOTc2ZiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvYXBwL3NyYy9NRVRBLUlORi93ZWItZ2YtcmVzb3VyY2VzLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9hcHAvc3JjL01FVEEtSU5GL3dlYi1nZi1yZXNvdXJjZXMueG1sCkBAIC01Myw0ICs1Myw0IEBACiAgICAgPC9qZGJjLWNvbm5lY3Rpb24tcG9vbD4KIAogICAgIDxqZGJjLXJlc291cmNlIGVuYWJsZWQ9InRydWUiIGpuZGktbmFtZT0iamRiYy93ZWItbGV2ZWwtZHMiIG9iamVjdC10eXBlPSJ1c2VyIiBwb29sLW5hbWU9ImpkYmMvd2ViLWxldmVsLXBvb2wiLz4KLTwvcmVzb3VyY2VzPiAKKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvYXBwL3NyYy9iZWFucy9NZXNzYWdlQ2hlY2tlckVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvYXBwL3NyYy9iZWFucy9NZXNzYWdlQ2hlY2tlckVKQi5qYXZhCmluZGV4IGI2NDhlOTEuLjIxZjdlOTIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL2FwcC9zcmMvYmVhbnMvTWVzc2FnZUNoZWNrZXJFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9hcHAvc3JjL2JlYW5zL01lc3NhZ2VDaGVja2VyRUpCLmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKIAogICAgIHB1YmxpYyBNZXNzYWdlQ2hlY2tlckVKQigpIHt9CiAKLSAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSAKKyAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKQogICAgICAgICB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJiZWFuIGNyZWF0ZWQiKTsKICAgICAgICAgaGVsZENvbiA9IG51bGw7CkBAIC03Myw3ICs3Myw3IEBACiAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm1hby5nZXRSQSgpIGlzIG51bGwiKTsKICAgICAgICB9CiAgICAgfWNhdGNoKEV4Y2VwdGlvbiBlKXsKLQllLnByaW50U3RhY2tUcmFjZSgpOworICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgfQogCiAgdHJ5ewpAQCAtOTgsMTEgKzk4LDExIEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKENvbnRyb2xzLmdldExvY2tPYmplY3QoKSkgewogICAgICAgICAgICAgICAgIC8vVGVsbCB0aGUgcmVzb3VyY2UgYWRhcHRlciB0aGUgY2xpZW50IGlzIHJlYWR5IHRvIHJ1bgotICAgICAgICAgICAgICAgIENvbnRyb2xzLmdldExvY2tPYmplY3QoKS5ub3RpZnlBbGwoKTsgCi0gICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLm5vdGlmeUFsbCgpOworCiAgICAgICAgICAgICAgICAgZGVidWcoIk5PVElGSUVELi4uIFNUQVJUIFdBSVRJTkciKTsKICAgICAgICAgICAgICAgICAvL1dhaXQgdW50aWwgYmVpbmcgdG9sZCB0byByZWFkIGZyb20gdGhlIGRhdGFiYXNlCi0gICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLndhaXQoKTsgCisgICAgICAgICAgICAgICAgQ29udHJvbHMuZ2V0TG9ja09iamVjdCgpLndhaXQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTEyMSwyMiArMTIxLDIyIEBACiAgICAgfQogCiAgICAgcHVibGljIGludCBnZXRNZXNzYWdlQ291bnQoKSB7Ci0JdHJ5IHsKKyAgICB0cnkgewogICAgICAgICAgICAgQ29ubmVjdGlvbiBjb24gPSBnZXRGcmVzaENvbm5lY3Rpb24oKTsKICAgICAgICAgICAgIGludCBjb3VudDEgPSBnZXRDb3VudChjb24pOwogICAgICAgICAgICAgY29uLmNsb3NlKCk7Ci0gICAgICAgICAgICAKLQkgICAgLyoKKworICAgICAgICAvKgogICAgICAgICAgICAgc3luY2hyb25pemVkKENvbnRyb2xzLmdldExvY2tPYmplY3QoKSkgewogICAgICAgICAgICAgICAgIENvbnRyb2xzLmdldExvY2tPYmplY3QoKS5ub3RpZnkoKTsKICAgICAgICAgICAgIH0KLQkgICAgKi8KLSAgICAgICAgICAgICAgICAKKyAgICAgICAgKi8KKwogICAgICAgICAgICAgcmV0dXJuIGNvdW50MTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5vdXQpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlKTsKLQl9CisgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgaW50IGdldENvdW50KENvbm5lY3Rpb24gY29uKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKQEAgLTE2MiwxMCArMTYyLDEwIEBACiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICB1c2VyID0gKFN0cmluZykgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3VzZXIiKTsKICAgICAgICAgICAgIHBhc3N3b3JkID0gKFN0cmluZykgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3Bhc3N3b3JkIik7Ci0JICAgIENvbnRyb2xzID0gKE15QWRtaW5PYmplY3QpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9laXMvdGVzdEFkbWluIik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ0FMTElORyBJTklUSUxJWkUgXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV0iKTsKLQkgICAgQ29udHJvbHMuaW5pdGlhbGl6ZSgpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNBTExFRCBJTklUSUxJWkUgXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV0iICsgQ29udHJvbHMpOworICAgICAgICBDb250cm9scyA9IChNeUFkbWluT2JqZWN0KSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWlzL3Rlc3RBZG1pbiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNBTExJTkcgSU5JVElMSVpFIF1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dIik7CisgICAgICAgIENvbnRyb2xzLmluaXRpYWxpemUoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDQUxMRUQgSU5JVElMSVpFIF1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dIiArIENvbnRyb2xzKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQpAQCAtMjAwLDcgKzIwMCw3IEBACiAgICAgICAgICAgICBkZWJ1ZygiTG9va2VkIHVwIERhdGFzb3VyY2VcbiIpOwogICAgICAgICAgICAgZGVidWcoIkdldCBKREJDIGNvbm5lY3Rpb24sIGF1dG8gc2lnbiBvbiIpOwogICAgICAgICAgICAgY29uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmIChjb24gIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIHJldHVybiBjb247CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMjExLDcgKzIxMSw3IEBACiAgICAgICAgICAgICB0aHJvdyBleDE7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgY2xvc2VDb25uZWN0aW9uKENvbm5lY3Rpb24gY29uKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgICAgaWYgKGhlbGRDb24gIT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvYXBwL3NyYy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvYXBwL3NyYy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGRhZDIwN2IuLjBiMzhjMTkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL2FwcC9zcmMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9hcHAvc3JjL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogZWpiLWphci54bWw9TUVUQS1JTkYvZWpiLWphci54bWwKIHN1bi1lamItamFyLnhtbD1NRVRBLUlORi9zdW4tZWpiLWphci54bWwKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL2FwcC9zcmMvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvYXBwL3NyYy9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggOTM0MzUwNi4uMzkzOTI1NyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvYXBwL3NyYy9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvYXBwL3NyYy9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI4LDQ1ICsyOCw0NSBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwotICAgIAorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgICAgICAvL3N1cGVyKGFyZ3MpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGRvVGVzdCgpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVGhpcyBpcyB0byB0ZXN0IGNvbm5lY3RvciAxLjUgIisKLQkgICAgICAgICAgICAgImNvbnRyYWN0cy4iKTsKLSAgICAgICAgCisgICAgICAgICAgICAgICAgICJjb250cmFjdHMuIik7CisKICAgICAgICAgU3RyaW5nIHJlcyA9ICJOT1QgUlVOIjsKLQlkZWJ1ZygiZG9UZXN0KCkgRU5URVIuLi4iKTsKKyAgICBkZWJ1ZygiZG9UZXN0KCkgRU5URVIuLi4iKTsKICAgICAgICAgYm9vbGVhbiBwYXNzID0gZmFsc2U7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXMgID0gIkFMTCBURVNUUyBQQVNTRUQiOwotCSAgICBpbnQgdGVzdENvdW50ID0gMTsKKyAgICAgICAgaW50IHRlc3RDb3VudCA9IDE7CiAgICAgICAgICAgICB3aGlsZSAoIWRvbmUoKSkgewotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgbm90aWZ5QW5kV2FpdCgpOwogICAgICAgICAgICAgICAgIGlmICghZG9uZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJSdW5uaW5nLi4uIik7CiAgICAgICAgICAgICAgICAgICAgIHBhc3MgPSBjaGVja1Jlc3VsdHMoZXhwZWN0ZWRSZXN1bHRzKCkpOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiR290IGV4cGVjdGVkIHJlc3VsdHMgPSAiICsgcGFzcyk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vZG8gbm90IGNvbnRpbnVlIGlmIG9uZSB0ZXN0IGZhaWxlZAogICAgICAgICAgICAgICAgICAgICBpZiAoIXBhc3MpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlcyA9ICJTT01FIFRFU1RTIEZBSUxFRCI7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiSUQgQ29ubmVjdG9yIDEuNiB0ZXN0IC0gIiArIHRlc3RDb3VudCwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJJRCBDb25uZWN0b3IgMS42IHRlc3QgLSAiICsgdGVzdENvdW50LCBzdGF0LlBBU1MpOwotCQkgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLQkJdGVzdENvdW50ICsrOworICAgICAgICB0ZXN0Q291bnQgKys7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CkBAIC03NiwxNCArNzYsMTQgQEAKICAgICAgICAgfQogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiY29ubmVjdG9yMS42SUQiKTsKIAotICAgICAgICAKKwogICAgICAgICBkZWJ1ZygiRVhJVElORy4uLiBTVEFUVVMgPSAiICsgcmVzKTsKICAgICAgICAgcmV0dXJuIHJlczsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIGJvb2xlYW4gY2hlY2tSZXN1bHRzKGludCBudW0pIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBPYmplY3QgbyA9IChuZXcgSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJNeU1lc3NhZ2VDaGVja2VyIik7Ci0gICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpIAorICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKQogICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG8sIE1lc3NhZ2VDaGVja2VySG9tZS5jbGFzcyk7CiAgICAgICAgIE1lc3NhZ2VDaGVja2VyIGNoZWNrZXIgPSBob21lLmNyZWF0ZSgpOwogICAgICAgICBpbnQgcmVzdWx0ID0gY2hlY2tlci5nZXRNZXNzYWdlQ291bnQoKTsKQEAgLTkyLDcgKzkyLDcgQEAKIAogICAgIHByaXZhdGUgYm9vbGVhbiBkb25lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIE9iamVjdCBvID0gKG5ldyBJbml0aWFsQ29udGV4dCgpKS5sb29rdXAoIk15TWVzc2FnZUNoZWNrZXIiKTsKLSAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkgCisgICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpCiAgICAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cobywgTWVzc2FnZUNoZWNrZXJIb21lLmNsYXNzKTsKICAgICAgICAgTWVzc2FnZUNoZWNrZXIgY2hlY2tlciA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgIHJldHVybiBjaGVja2VyLmRvbmUoKTsKQEAgLTEwMCw3ICsxMDAsNyBAQAogCiAgICAgcHJpdmF0ZSBpbnQgZXhwZWN0ZWRSZXN1bHRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIE9iamVjdCBvID0gKG5ldyBJbml0aWFsQ29udGV4dCgpKS5sb29rdXAoIk15TWVzc2FnZUNoZWNrZXIiKTsKLSAgICAgICAgTWVzc2FnZUNoZWNrZXJIb21lICBob21lID0gKE1lc3NhZ2VDaGVja2VySG9tZSkgCisgICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpCiAgICAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cobywgTWVzc2FnZUNoZWNrZXJIb21lLmNsYXNzKTsKICAgICAgICAgTWVzc2FnZUNoZWNrZXIgY2hlY2tlciA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgIHJldHVybiBjaGVja2VyLmV4cGVjdGVkUmVzdWx0cygpOwpAQCAtMTA4LDcgKzEwOCw3IEBACiAKICAgICBwcml2YXRlIHZvaWQgbm90aWZ5QW5kV2FpdCgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBPYmplY3QgbyA9IChuZXcgSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJNeU1lc3NhZ2VDaGVja2VyIik7Ci0gICAgICAgIE1lc3NhZ2VDaGVja2VySG9tZSAgaG9tZSA9IChNZXNzYWdlQ2hlY2tlckhvbWUpIAorICAgICAgICBNZXNzYWdlQ2hlY2tlckhvbWUgIGhvbWUgPSAoTWVzc2FnZUNoZWNrZXJIb21lKQogICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG8sIE1lc3NhZ2VDaGVja2VySG9tZS5jbGFzcyk7CiAgICAgICAgIE1lc3NhZ2VDaGVja2VyIGNoZWNrZXIgPSBob21lLmNyZWF0ZSgpOwogICAgICAgICBjaGVja2VyLm5vdGlmeUFuZFdhaXQoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL2FwcC9zcmMvbWRiL015TWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL2FwcC9zcmMvbWRiL015TWVzc2FnZUJlYW4uamF2YQppbmRleCA3OGEzZWU5Li4zYWIwYzJhIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9hcHAvc3JjL21kYi9NeU1lc3NhZ2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvYXBwL3NyYy9tZGIvTXlNZXNzYWdlQmVhbi5qYXZhCkBAIC0zMCw0MSArMzAsNDEgQEAKIAogLyoqCiAgKi8KLXB1YmxpYyBjbGFzcyBNeU1lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZURyaXZlbkJlYW4sIAorcHVibGljIGNsYXNzIE15TWVzc2FnZUJlYW4gaW1wbGVtZW50cyBNZXNzYWdlRHJpdmVuQmVhbiwKICAgICAgICAgTXlNZXNzYWdlTGlzdGVuZXIgewogCiAgICAgcHJpdmF0ZSB0cmFuc2llbnQgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjID0gbnVsbDsKICAgICBwcml2YXRlIENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdG9yLCB3aGljaCBpcyBwdWJsaWMgYW5kIHRha2VzIG5vIGFyZ3VtZW50cy4KICAgICAgKi8KICAgICBwdWJsaWMgTXlNZXNzYWdlQmVhbigpIHt9CiAKICAgICAvKioKLSAgICAgKiBzZXRNZXNzYWdlRHJpdmVuQ29udGV4dCBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IAotICAgICAqIG5vdCBmaW5hbCBvciBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIAorICAgICAqIHNldE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQKKyAgICAgKiBub3QgZmluYWwgb3Igc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZAogICAgICAqIHdpdGggb25lIGFyZ3VtZW50IG9mIHR5cGUgamFrYXJ0YS5lamIuTWVzc2FnZURyaXZlbkNvbnRleHQuCiAgICAgICoKICAgICAgKiBAcGFyYW0gbWRjICAgIHRoZSBjb250ZXh0IHRvIHNldAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldE1lc3NhZ2VEcml2ZW5Db250ZXh0KE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYykgewotCXRoaXMubWRjID0gbWRjOworICAgIHRoaXMubWRjID0gbWRjOwogICAgIH0KIAogICAgIC8qKgotICAgICAqIGVqYkNyZWF0ZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvciAKLSAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggbm8gCisgICAgICogZWpiQ3JlYXRlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yCisgICAgICogc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCB3aXRoIG5vCiAgICAgICogYXJndW1lbnRzLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHsgfQogCiAgICAgLyoqCi0gICAgICogb25NZXNzYWdlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yIAorICAgICAqIG9uTWVzc2FnZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvcgogICAgICAqIHN0YXRpYyksIHdpdGggYSByZXR1cm4gdHlwZSBvZiB2b2lkLCBhbmQgd2l0aCBvbmUgYXJndW1lbnQKICAgICAgKiBvZiB0eXBlIGpha2FydGEuam1zLk1lc3NhZ2UuCiAgICAgICoKLSAgICAgKiBDYXN0cyB0aGUgaW5jb21pbmcgTWVzc2FnZSB0byBhIFRleHRNZXNzYWdlIGFuZCBkaXNwbGF5cyAKKyAgICAgKiBDYXN0cyB0aGUgaW5jb21pbmcgTWVzc2FnZSB0byBhIFRleHRNZXNzYWdlIGFuZCBkaXNwbGF5cwogICAgICAqIHRoZSB0ZXh0LgogICAgICAqCiAgICAgICogQHBhcmFtIGluTWVzc2FnZSAgICB0aGUgaW5jb21pbmcgbWVzc2FnZQpAQCAtNzUsNyArNzUsNyBAQAogICAgICAgICAvL2xvZygib25NZXNzYWdlOjogZ2V0Q2FsbGVyUHJpbmNpcGFsIDogIiArIG1kYy5nZXRDYWxsZXJQcmluY2lwYWwoKSk7CiAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJvbk1lc3NhZ2UgOiBUaHJlYWRJRCA6ICIgKyBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldE5hbWUoKSk7CiAgICAgICAgIGlmKG1kYy5nZXRDYWxsZXJQcmluY2lwYWwoKSAhPSBudWxsKXsKLSAgICAgICAgCWxvZygib25NZXNzYWdlOjogZ2V0Q2FsbGVyUHJpbmNpcGFsIE5hbWUgOiAiICsgbWRjLmdldENhbGxlclByaW5jaXBhbCgpLmdldE5hbWUoKSk7CisgICAgICAgICAgICBsb2coIm9uTWVzc2FnZTo6IGdldENhbGxlclByaW5jaXBhbCBOYW1lIDogIiArIG1kYy5nZXRDYWxsZXJQcmluY2lwYWwoKS5nZXROYW1lKCkpOwogICAgICAgICB9CiAKICAgICAgICAgbG9nKCJvbk1lc3NhZ2UgOiBpc0NhbGxlckluUm9sZSgnamFnYWRpc2gnKSA6ICIgKyBtZGMuaXNDYWxsZXJJblJvbGUoImphZ2FkaXNoIikpOwpAQCAtODQsNyArODQsNyBAQAogCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpZiAoaW5NZXNzYWdlLmVuZHNXaXRoKCJXUklURSIpKSB7Ci0gICAgICAgICAgICAgICAgZG9EYlN0dWZmKCJXUklURSIsIAorICAgICAgICAgICAgICAgIGRvRGJTdHVmZigiV1JJVEUiLAogICAgICAgICAgICAgICAgICAgICAgICAgaW5NZXNzYWdlLnN1YnN0cmluZygwLCBpbk1lc3NhZ2UubGFzdEluZGV4T2YoIjoiKSkpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChpbk1lc3NhZ2UuZW5kc1dpdGgoIkRFTEVURSIpKSB7CiAgICAgICAgICAgICAgICAgZG9EYlN0dWZmKCJERUxFVEUiLApAQCAtOTgsMTAgKzk4LDEwIEBACiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIGVqYlJlbW92ZSBtZXRob2QsIGRlY2xhcmVkIGFzIHB1YmxpYyAoYnV0IG5vdCBmaW5hbCBvciAKLSAgICAgKiBzdGF0aWMpLCB3aXRoIGEgcmV0dXJuIHR5cGUgb2Ygdm9pZCwgYW5kIHdpdGggbm8gCisgICAgICogZWpiUmVtb3ZlIG1ldGhvZCwgZGVjbGFyZWQgYXMgcHVibGljIChidXQgbm90IGZpbmFsIG9yCisgICAgICogc3RhdGljKSwgd2l0aCBhIHJldHVybiB0eXBlIG9mIHZvaWQsIGFuZCB3aXRoIG5vCiAgICAgICogYXJndW1lbnRzLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHt9CkBAIC0xMTEsNjIgKzExMSw2MiBAQAogCiAgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gZGJDb25uZWN0aW9uID0gbnVsbDsKICAgICAgICAgU3RyaW5nIGlkICAgID0gbWVzc2FnZS5zdWJzdHJpbmcoMCwgbWVzc2FnZS5pbmRleE9mKCI6IikpOwotICAgICAgICBTdHJpbmcgYm9keSAgPSBtZXNzYWdlLnN1YnN0cmluZyhtZXNzYWdlLmluZGV4T2YoIjoiKSsxKTsgCisgICAgICAgIFN0cmluZyBib2R5ICA9IG1lc3NhZ2Uuc3Vic3RyaW5nKG1lc3NhZ2UuaW5kZXhPZigiOiIpKzEpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmICgiUkVBRCIuZXF1YWxzKG9wKSkgewotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgZGVidWcoIlJlYWRpbmcgcm93IGZyb20gZGF0YWJhc2UuLi4iKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIC8vIENyZWF0aW5nIGEgZGF0YWJhc2UgY29ubmVjdGlvbgogCiAgICAgICAgICAgICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9NeURCIik7CiAgICAgICAgICAgICAgICAgICBkZWJ1ZygiTG9va2VkIHVwIERhdGFzb3VyY2VcbiIpOwogICAgICAgICAgICAgICAgICAgZGVidWcoIkdldCBKREJDIGNvbm5lY3Rpb24sIGF1dG8gc2lnbiBvbiIpOwogICAgICAgICAgICAgICAgICAgZGJDb25uZWN0aW9uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgIFN0YXRlbWVudCBzdG10ID0gZGJDb25uZWN0aW9uLmNyZWF0ZVN0YXRlbWVudCgpOwotICAgICAgICAgICAgICAgICAgU3RyaW5nIHF1ZXJ5ID0gCisgICAgICAgICAgICAgICAgICBTdHJpbmcgcXVlcnkgPQogICAgICAgICAgICAgICAgICAgIlNFTEVDVCBpZCBmcm9tIG1lc3NhZ2VzIHdoZXJlIGlkID0gJ1FRJyI7CiAgICAgICAgICAgICAgICAgICBSZXN1bHRTZXQgcmVzdWx0cyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHF1ZXJ5KTsKICAgICAgICAgICAgICAgICAgIHJlc3VsdHMubmV4dCgpOwotICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJRUSBoYXMgYmFsYW5jZSAiICsgCisgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlFRIGhhcyBiYWxhbmNlICIgKwogICAgICAgICAgICAgICAgICAgcmVzdWx0cy5nZXRJbnQoImJhbGFuY2UiKSArICIgZG9sbGFycyIpOwogICAgICAgICAgICAgICAgICAgcmVzdWx0cy5jbG9zZSgpOwogICAgICAgICAgICAgICAgICAgc3RtdC5jbG9zZSgpOwotICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVhZCBvbmUgYWNjb3VudFxuIik7CiAKICAgICAgICAgICAgIH0gZWxzZSBpZiAoIldSSVRFIi5lcXVhbHMob3ApKSB7CiAKICAgICAgICAgICAgICAgICBkZWJ1ZygiSW5zZXJ0aW5nIG9uZSBtZXNzYWdlIGluIHRoZSBkYXRhYmFzZVxuIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIC8vIENyZWF0aW5nIGEgZGF0YWJhc2UgY29ubmVjdGlvbgogICAgICAgICAgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L015REIiKTsKICAgICAgICAgICAgICAgICAvL2RlYnVnKCJMb29rZWQgdXAgRGF0YXNvdXJjZVxuIik7CiAgICAgICAgICAgICAgICAgLy9kZWJ1ZygiR2V0IEpEQkMgY29ubmVjdGlvbiwgYXV0byBzaWduIG9uIik7CiAgICAgICAgICAgICAgICAgZGJDb25uZWN0aW9uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgY3JlYXRlUm93KGlkLCBib2R5LCBkYkNvbm5lY3Rpb24pOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRlZCBvbmUgbWVzc2FnZVxuIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIH0gZWxzZSBpZiAoIkRFTEVURSIuZXF1YWxzKG9wKSkgewotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgZGVidWcoIkRlbGV0aW5nIG9uZSBtZXNzYWdlIGZyb20gdGhlIGRhdGFiYXNlXG4iKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIC8vIENyZWF0aW5nIGEgZGF0YWJhc2UgY29ubmVjdGlvbgogICAgICAgICAgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L015REIiKTsKICAgICAgICAgICAgICAgICAvL2RlYnVnKCJMb29rZWQgdXAgRGF0YXNvdXJjZVxuIik7CiAgICAgICAgICAgICAgICAgLy9kZWJ1ZygiR2V0IEpEQkMgY29ubmVjdGlvbiwgYXV0byBzaWduIG9uIik7CiAgICAgICAgICAgICAgICAgZGJDb25uZWN0aW9uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgZGVsZXRlUm93KGlkLCBkYkNvbm5lY3Rpb24pOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGVsZXRlZCBvbmUgbWVzc2FnZVxuIik7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKCJERUxFVEVfQUxMIi5lcXVhbHMob3ApKSB7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBkZWJ1ZygiRGVsZXRpbmcgYWxsIG1lc3NhZ2VzIGZyb20gdGhlIGRhdGFiYXNlXG4iKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIC8vIENyZWF0aW5nIGEgZGF0YWJhc2UgY29ubmVjdGlvbgogICAgICAgICAgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L015REIiKTsKICAgICAgICAgICAgICAgICAvL2RlYnVnKCJMb29rZWQgdXAgRGF0YXNvdXJjZVxuIik7CkBAIC0xNzcsNyArMTc3LDcgQEAKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy91bnN1cHBvcnRlZCBvcAogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgfWZpbmFsbHl7CiAgICAgICAgICAgICB0cnl7CiAgICAgICAgICAgICAgICAgZGJDb25uZWN0aW9uLmNsb3NlKCk7CkBAIC0xODYsOSArMTg2LDkgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICBwcml2YXRlIHZvaWQgY3JlYXRlUm93KFN0cmluZyBpZCwgU3RyaW5nIGJvZHksIAotICAgICAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pIAorCisgICAgcHJpdmF0ZSB2b2lkIGNyZWF0ZVJvdyhTdHJpbmcgaWQsIFN0cmluZyBib2R5LAorICAgICAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogCiAgICAgICAgIC8vIENyZWF0ZSByb3cgZm9yIHRoaXMgbWVzc2FnZQpAQCAtMjA0LDkgKzIwNCw5IEBACiAgICAgICAgIHN0bXQuY2xvc2UoKTsKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgZGVsZXRlUm93KFN0cmluZyBpZCwgamF2YS5zcWwuQ29ubmVjdGlvbiBkYkNvbm5lY3Rpb24pIAorICAgIHByaXZhdGUgdm9pZCBkZWxldGVSb3coU3RyaW5nIGlkLCBqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIERlbGV0ZSByb3cgZm9yIHRoaXMgbWVzc2FnZQogICAgICAgICBkZWJ1ZygiRGVsZXRlUm93IHdpdGggSUQgPSAiICsgaWQpOwogICAgICAgICBTdGF0ZW1lbnQgc3RtdCA9IGRiQ29ubmVjdGlvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKQEAgLTIxOSw5ICsyMTksOSBAQAogICAgICAgICBzdG10LmNsb3NlKCk7CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIGRlbGV0ZUFsbChqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikgCisgICAgcHJpdmF0ZSB2b2lkIGRlbGV0ZUFsbChqYXZhLnNxbC5Db25uZWN0aW9uIGRiQ29ubmVjdGlvbikKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIERlbGV0ZSByb3cgZm9yIHRoaXMgbWVzc2FnZQogICAgICAgICBTdGF0ZW1lbnQgc3RtdCA9IGRiQ29ubmVjdGlvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKICAgICAgICAgU3RyaW5nIHF1ZXJ5ID0gIkRFTEVURSBGUk9NIG1lc3NhZ2VzIjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL2FwcC9zcmMvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9hcHAvc3JjL3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhCmluZGV4IGFjODllMzYuLjYzODc4YzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL2FwcC9zcmMvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvYXBwL3NyYy9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YQpAQCAtNDUsMTcgKzQ1LDE3IEBACiAKICAgICBwdWJsaWMgU3RyaW5nIGRvVGVzdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIElPRXhjZXB0aW9uewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoaXMgaXMgdG8gdGVzdCBjb25uZWN0b3IgMS42ICIrCi0JICAgICAgICAgICAgICJjb250cmFjdHMuIik7CisgICAgICAgICAgICAgICAgICJjb250cmFjdHMuIik7CiAKICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKIAogICAgICAgICBTdHJpbmcgcmVzID0gIk5PVCBSVU4iOwotCWRlYnVnKCJkb1Rlc3QoKSBFTlRFUi4uLiIpOworICAgIGRlYnVnKCJkb1Rlc3QoKSBFTlRFUi4uLiIpOwogICAgICAgICBib29sZWFuIHBhc3MgPSBmYWxzZTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJlcyAgPSAiQUxMIFRFU1RTIFBBU1NFRCI7Ci0JICAgIGludCB0ZXN0Q291bnQgPSAxOworICAgICAgICBpbnQgdGVzdENvdW50ID0gMTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCJTdGFydGluZyB0aGUgdGVzdCIpOwogICAgICAgICAgICAgb3V0LmZsdXNoKCk7CiAKQEAgLTk0LDE4ICs5NCwxOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gIlNPTUUgVEVTVFMgRkFJTEVEIjsKICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSUQgQ29ubmVjdG9yIDEuNiB0ZXN0IC0gIiArIHRlc3RDb3VudCArICIgRkFJTCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIlRFU1Q6RkFJTCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSUQgQ29ubmVjdG9yIDEuNiB0ZXN0IC0gIiArIHRlc3RDb3VudCArICIgUEFTUyIpOwogICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIlRFU1Q6UEFTUyIpOwotCQkgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiRU5EX09GX0VYRUNVVElPTiIpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiRU5EX09GX0VYRUNVVElPTiIpOwotICAgICAgICAgICAgCisKIAogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW1wb3J0aW5nIHRyYW5zYWN0aW9uIHRlc3QgZmFpbGVkLiIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMjA3YTQ4Ni4uMDgzYjI2MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii9jb25uZWN0b3IxNi9zZXJ2bGV0Ii8+CiA8cHJvcGVydHkgbmFtZT0iaHR0cDpob3N0IiB2YWx1ZT0ibG9jYWxob3N0Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9yYS9NRVRBLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL3JhL01FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sCmluZGV4IGE5MzQ5ZmMuLjBmY2FiZGQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL3JhL01FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL3JhL01FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sCkBAIC00OCw0ICs0OCw0IEBACiAgICAgICA8cHJpbmNpcGFsLW1hcCBlaXMtcHJpbmNpcGFsPSJlaXMtcHJhc2F0aCIgbWFwcGVkLXByaW5jaXBhbD0icHJhc2F0aCIgLz4KICAgICAgIDxwcmluY2lwYWwtbWFwIGVpcy1wcmluY2lwYWw9ImVpcy1qYWdhZGlzaCIgbWFwcGVkLXByaW5jaXBhbD0iamFnYWRpc2giIC8+CiAgICAgPC93b3JrLXNlY3VyaXR5LW1hcD4KLTwvcmVzb3VyY2VzPiAKKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvcmEvTUVUQS1JTkYvcmEueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvcmEvTUVUQS1JTkYvcmEueG1sCmluZGV4IDk3ODFlMTYuLjNjY2YyOTYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL3JhL01FVEEtSU5GL3JhLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9yYS9NRVRBLUlORi9yYS54bWwKQEAgLTUxLDcgKzUxLDcgQEAKICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5LWNvbmZpZGVudGlhbD4KICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CiAgICAgICAgIDxpbmJvdW5kLXJlc291cmNlYWRhcHRlcj4KLSAgICAgICAgICAgIDxtZXNzYWdlYWRhcHRlcj4gICAgICAgICAgCisgICAgICAgICAgICA8bWVzc2FnZWFkYXB0ZXI+CiAgICAgICAgICAgICAgICAgPG1lc3NhZ2VsaXN0ZW5lcj4KICAgICAgICAgICAgICAgICAgICAgPG1lc3NhZ2VsaXN0ZW5lci10eXBlPgogICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdG9yLk15TWVzc2FnZUxpc3RlbmVyCkBAIC02Miw3ICs2Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICA8L2FjdGl2YXRpb25zcGVjLWNsYXNzPgogICAgICAgICAgICAgICAgICAgICA8L2FjdGl2YXRpb25zcGVjPgogICAgICAgICAgICAgICAgIDwvbWVzc2FnZWxpc3RlbmVyPgotICAgICAgICAgICAgPC9tZXNzYWdlYWRhcHRlcj4gICAgICAgICAgCisgICAgICAgICAgICA8L21lc3NhZ2VhZGFwdGVyPgogICAgICAgICA8L2luYm91bmQtcmVzb3VyY2VhZGFwdGVyPgogICAgICAgICA8YWRtaW5vYmplY3Q+CiAgICAgICAgICAgPGFkbWlub2JqZWN0LWludGVyZmFjZT5jb25uZWN0b3IuTXlBZG1pbk9iamVjdDwvYWRtaW5vYmplY3QtaW50ZXJmYWNlPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvcmEvc3JjL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL3JhL3NyYy9idWlsZC54bWwKaW5kZXggZWQyOTg4OS4uODUyODgxOCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvcmEvc3JjL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9yYS9zcmMvYnVpbGQueG1sCkBAIC0zMCw4ICszMCw4IEBACiAKICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImluaXQtY29tbW9uIiA+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9ImJ1aWxkLmNsYXNzZXMuZGlyIiB2YWx1ZT0iY2xhc3NlcyIgLz4KLQk8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY29ubmVjdG9yIiAvPgorICAgIDxwYXJhbSBuYW1lPSJidWlsZC5jbGFzc2VzLmRpciIgdmFsdWU9ImNsYXNzZXMiIC8+CisgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNvbm5lY3RvciIgLz4KICAgICA8L2FudGNhbGw+CiAgICAgPGphciBqYXJmaWxlPSIuLi9nZW5lcmljLXJhLmphciIgYmFzZWRpcj0iY2xhc3NlcyIKICAgICAgICAgIGluY2x1ZGVzPSJjb25uZWN0b3IvKi5jbGFzcyIgLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL3JhL3NyYy9jb25uZWN0b3IvQ29udHJvbHMuamF2YQppbmRleCA1NTUzM2Q0Li5mNTliMmIzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9yYS9zcmMvY29ubmVjdG9yL0NvbnRyb2xzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvcmEvc3JjL2Nvbm5lY3Rvci9Db250cm9scy5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIC8qKgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCiBwdWJsaWMgY2xhc3MgQ29udHJvbHMgewogICAgIHB1YmxpYyBzdGF0aWMgT2JqZWN0IHJlYWR5TG9jayA9IG5ldyBPYmplY3QoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9yYS9zcmMvY29ubmVjdG9yL0RlbGl2ZXJ5V29yay5qYXZhCmluZGV4IDY1ODIzM2UuLmQ3M2M4NjIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL3JhL3NyYy9jb25uZWN0b3IvRGVsaXZlcnlXb3JrLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvcmEvc3JjL2Nvbm5lY3Rvci9EZWxpdmVyeVdvcmsuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogCiAvKioKICAqCi0gKiBAYXV0aG9yCVFpbmdxaW5nIE91eWFuZworICogQGF1dGhvciAgICBRaW5ncWluZyBPdXlhbmcKICAqLwogcHVibGljIGNsYXNzIERlbGl2ZXJ5V29yayBpbXBsZW1lbnRzIFdvcmsgewogCkBAIC0zNiw3ICszNiw3IEBACiAgICAgcHJpdmF0ZSBTdHJpbmcgb3A7CiAgICAgcHJpdmF0ZSBib29sZWFuIGtlZXBDb3VudDsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnRlciA9IDA7Ci0gICAgCisKICAgICBwdWJsaWMgRGVsaXZlcnlXb3JrKE1lc3NhZ2VFbmRwb2ludCBlcCwgaW50IG51bU9mTWVzc2FnZXMsIFN0cmluZyBvcCkgewogICAgICAgICB0aGlzLmVwID0gZXA7CiAgICAgICAgIHRoaXMubnVtID0gbnVtT2ZNZXNzYWdlczsKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICAgICAgdGhpcy5rZWVwQ291bnQgPSBmYWxzZTsKICAgICB9CiAKLSAgICBwdWJsaWMgRGVsaXZlcnlXb3JrKE1lc3NhZ2VFbmRwb2ludCBlcCwgaW50IG51bU9mTWVzc2FnZXMsIAorICAgIHB1YmxpYyBEZWxpdmVyeVdvcmsoTWVzc2FnZUVuZHBvaW50IGVwLCBpbnQgbnVtT2ZNZXNzYWdlcywKICAgICAgICAgICAgIFN0cmluZyBvcCwgYm9vbGVhbiBrZWVwQ291bnQpIHsKICAgICAgICAgdGhpcy5lcCA9IGVwOwogICAgICAgICB0aGlzLm51bSA9IG51bU9mTWVzc2FnZXM7CkBAIC01NSw3ICs1NSw3IEBACiAgICAgcHVibGljIHZvaWQgcnVuKCkgewogCiAgICAgICAgIGRlYnVnKCJFTlRFUi4uLiIpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgLy9NZXRob2Qgb25NZXNzYWdlID0gZ2V0T25NZXNzYWdlTWV0aG9kKCk7CiAgICAgICAgICAgICAvL2VwLmJlZm9yZURlbGl2ZXJ5KG9uTWVzc2FnZSk7CkBAIC03OCwxMSArNzgsMTEgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy9lcC5hZnRlckRlbGl2ZXJ5KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGRlYnVnKCJMRUFWRS4uLiIpOwogICAgIH0KIApAQCAtOTMsMTQgKzkzLDE0IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSBNZXRob2QgZ2V0T25NZXNzYWdlTWV0aG9kKCkgewotICAgICAgICAKKwogICAgICAgICBNZXRob2Qgb25NZXNzYWdlTWV0aG9kID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENsYXNzIG1zZ0xpc3RlbmVyQ2xhc3MgPSBjb25uZWN0b3IuTXlNZXNzYWdlTGlzdGVuZXIuY2xhc3M7CiAgICAgICAgICAgICBDbGFzc1tdIHBhcmFtVHlwZXMgPSB7IGphdmEubGFuZy5TdHJpbmcuY2xhc3MgfTsKLSAgICAgICAgICAgIG9uTWVzc2FnZU1ldGhvZCA9IAorICAgICAgICAgICAgb25NZXNzYWdlTWV0aG9kID0KICAgICAgICAgICAgICAgICBtc2dMaXN0ZW5lckNsYXNzLmdldE1ldGhvZCgib25NZXNzYWdlIiwgcGFyYW1UeXBlcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9yYS9zcmMvY29ubmVjdG9yL0Zha2VYQVJlc291cmNlLmphdmEKaW5kZXggMTAwY2FjZS4uZmE5M2Y2MyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvcmEvc3JjL2Nvbm5lY3Rvci9GYWtlWEFSZXNvdXJjZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL3JhL3NyYy9jb25uZWN0b3IvRmFrZVhBUmVzb3VyY2UuamF2YQpAQCAtMzYsNyArMzYsNyBAQAogICAgICAgICAgICAgICBmbGFnVG9TdHJpbmcoZmxhZ3MpKTsKICAgICB9CiAKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGZvcmdldChYaWQgeGlkKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2UuZm9yZ2V0OiAiICsgeGlkVG9TdHJpbmcoeGlkKSk7CiAgICAgfQpAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICBwcmludCgiRmFrZVhBUmVzb3VyY2UucHJlcGFyZTogIiArIHhpZFRvU3RyaW5nKHhpZCkpOwogICAgICAgICByZXR1cm4gWEFSZXNvdXJjZS5YQV9PSzsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgWGlkW10gcmVjb3ZlcihpbnQgZmxhZykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcHJpbnQoIkZha2VYQVJlc291cmNlLnJlY292ZXI6ICIgKyBmbGFnVG9TdHJpbmcoZmxhZykpOwogICAgICAgICByZXR1cm4gbnVsbDsKQEAgLTY2LDcgKzY2LDcgQEAKICAgICBwdWJsaWMgYm9vbGVhbiBzZXRUcmFuc2FjdGlvblRpbWVvdXQoaW50IHNlY29uZHMpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzdGFydChYaWQgeGlkLCBpbnQgZmxhZ3MpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHByaW50KCJGYWtlWEFSZXNvdXJjZS5zdGFydDogIiArIHhpZFRvU3RyaW5nKHhpZCkgKyAiLCIgKwogICAgICAgICAgICAgICAgIGZsYWdUb1N0cmluZyhmbGFncykpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvcmEvc3JjL2Nvbm5lY3Rvci9KU1IzMjJXb3JrLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9yYS9zcmMvY29ubmVjdG9yL0pTUjMyMldvcmsuamF2YQppbmRleCA1MTA3YWMxLi4wMjAzZjRhIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9yYS9zcmMvY29ubmVjdG9yL0pTUjMyMldvcmsuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9yYS9zcmMvY29ubmVjdG9yL0pTUjMyMldvcmsuamF2YQpAQCAtNDgsNiArNDgsNiBAQAogCiAgICAgcHVibGljIHZvaWQgcnVuKCl7CiAgICAgICAgIHN1cGVyLnJ1bigpOwotICAgICAgICAKKwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL3JhL3NyYy9jb25uZWN0b3IvTXlBZG1pbk9iamVjdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEKaW5kZXggYTY4YTViNy4uOWMyODgxMiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvcmEvc3JjL2Nvbm5lY3Rvci9NeUFkbWluT2JqZWN0LmphdmEKQEAgLTUxLDExICs1MSwxMSBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGluaXRpYWxpemUoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6aW5nIHRoZSBDb250cm9scyB0byBmYWxzZToiK3Jlc2V0Q29udHJvbCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJbTXlBZG1pbk9iamVjdF0gSW5pdGlhbGl6aW5nIHRoZSBDb250cm9scyB0byBmYWxzZToiK3Jlc2V0Q29udHJvbCk7CiAgICAgICAgIGlmIChyZXNldENvbnRyb2wuZXF1YWxzKCJCRUdJTk5JTkciKSkgewogICAgICAgICAgICBDb250cm9scy5kb25lPWZhbHNlOwotCSAgIFN5c3RlbS5vdXQucHJpbnRsbigiW015QWRtaW5PYmplY3RdIEluaXRpYWxpemVkIHRoZSBDb250cm9scyB0byBmYWxzZSIpOwotCX0KKyAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltNeUFkbWluT2JqZWN0XSBJbml0aWFsaXplZCB0aGUgQ29udHJvbHMgdG8gZmFsc2UiKTsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gZG9uZSgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL3JhL3NyYy9jb25uZWN0b3IvTXlTZWN1cml0eUNvbnRleHQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL3JhL3NyYy9jb25uZWN0b3IvTXlTZWN1cml0eUNvbnRleHQuamF2YQppbmRleCAzMTc4YzFjLi5lMTkwNTFlIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9yYS9zcmMvY29ubmVjdG9yL015U2VjdXJpdHlDb250ZXh0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvcmEvc3JjL2Nvbm5lY3Rvci9NeVNlY3VyaXR5Q29udGV4dC5qYXZhCkBAIC02Miw3ICs2Miw3IEBACiAgICAgICAgIENhbGxlclByaW5jaXBhbENhbGxiYWNrIGNwYyA9IG5ldyBDYWxsZXJQcmluY2lwYWxDYWxsYmFjayhleGVjU3ViamVjdCwgbmV3IFByaW5jaXBhbEltcGwocHJpbmNpcGFsTmFtZSkpOwogICAgICAgICBkZWJ1Zygic2V0dGluZyBjYWxsZXIgcHJpbmNpcGFsIGNhbGxiYWNrIHdpdGggcHJpbmNpcGFsIDogIiArIHByaW5jaXBhbE5hbWUpOwogICAgICAgICBjYWxsYmFja3MuYWRkKGNwYyk7Ci0gICAgICAgIAorCiAvKgogICAgICAgICBHcm91cFByaW5jaXBhbENhbGxiYWNrIGdwYyA9IG5ldyBHcm91cFByaW5jaXBhbENhbGxiYWNrKGV4ZWNTdWJqZWN0LCBudWxsKTsKICAgICAgICAgY2FsbGJhY2tzLmFkZChncGMpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvcmEvc3JjL2Nvbm5lY3Rvci9TaW1wbGVBY3RpdmF0aW9uU3BlYy5qYXZhCmluZGV4IDgxODJlZjUuLjNmY2U1NDQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL3JhL3NyYy9jb25uZWN0b3IvU2ltcGxlQWN0aXZhdGlvblNwZWMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9yYS9zcmMvY29ubmVjdG9yL1NpbXBsZUFjdGl2YXRpb25TcGVjLmphdmEKQEAgLTI0LDkgKzI0LDkgQEAKICAqIHNvIHRoYXQgdGhlIGFwcCBzZXJ2ZXIgY2FuIGluc3RhbnRpYXRlIGFuZCBjb25maWd1cmUKICAqIGl0IGF0IHRoZSBydW50aW1lLgogICoKLSAqIEBhdXRob3IJUWluZ3FpbmcgT3V5YW5nCisgKiBAYXV0aG9yICAgIFFpbmdxaW5nIE91eWFuZwogICovCi1wdWJsaWMgY2xhc3MgU2ltcGxlQWN0aXZhdGlvblNwZWMgCitwdWJsaWMgY2xhc3MgU2ltcGxlQWN0aXZhdGlvblNwZWMKICAgICBpbXBsZW1lbnRzIEFjdGl2YXRpb25TcGVjLCBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7CiAKICAgICBwcml2YXRlIFN0cmluZyBkZXN0aW5hdGlvbk5hbWU7CkBAIC00Myw3ICs0Myw3IEBACiAgICAgcHVibGljIFN0cmluZyBnZXREZXN0aW5hdGlvbk5hbWUgKCkgewogICAgICAgICByZXR1cm4gdGhpcy5kZXN0aW5hdGlvbk5hbWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0RGVzdGluYXRpb25OYW1lIChTdHJpbmcgbmFtZSkgewogICAgICAgICBkZWJ1Zygic2V0RGVzdGluYXRpb25OYW1lKCkgY2FsbGVkLi4uIG5hbWUgPSAiICsgbmFtZSk7CiAgICAgICAgIHRoaXMuZGVzdGluYXRpb25OYW1lID0gbmFtZTsKQEAgLTUyLDcgKzUyLDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldERlc3RpbmF0aW9uVHlwZSgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMuZGVzdGluYXRpb25UeXBlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldERlc3RpbmF0aW9uVHlwZSAoU3RyaW5nIHR5cGUpIHsKICAgICAgICAgZGVidWcoInNldERlc3RpbmF0aW9uVHlwZSAoKSBjYWxsZWQuLi4gdHlwZSA9ICIgKyB0eXBlKTsKICAgICAgICAgdGhpcy5kZXN0aW5hdGlvblR5cGU9IHR5cGU7CkBAIC02MSw3ICs2MSw3IEBACiAgICAgcHVibGljIFN0cmluZyBnZXRUZXN0UHJvcCgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMudGVzdFByb3A7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0VGVzdFByb3AgKFN0cmluZyB0ZXN0UHJvcCkgewogICAgICAgICBkZWJ1Zygic2V0VGVzdFByb3AgKCkgY2FsbGVkLi4uIHRlc3RQcm9wID0gIiArIHRlc3RQcm9wKTsKICAgICAgICAgdGhpcy50ZXN0UHJvcCA9IHRlc3RQcm9wOwpAQCAtNzAsNyArNzAsNyBAQAogICAgIHB1YmxpYyBJbnRlZ2VyIGdldFRlc3RJbnRlZ2VyUHJvcCgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMudGVzdEludGVnZXJQcm9wOwogICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFRlc3RJbnRlZ2VyUHJvcCAoSW50ZWdlciB0ZXN0UHJvcDEpIHsKICAgICAgICAgZGVidWcoInNldFRlc3RJbnRlZ2VyUHJvcCAoKSBjYWxsZWQuLi4gdGVzdEludGVnZXJQcm9wID0gIiArIHRlc3RQcm9wMSk7CiAgICAgICAgIHRoaXMudGVzdEludGVnZXJQcm9wID0gdGVzdFByb3AxOwpAQCAtOTQsNyArOTQsNyBAQAogCiAgICAgICB9CiAKLSAgIH0gCisgICB9CiAKICAgICBwcml2YXRlIHZvaWQgZGVidWcgKFN0cmluZyBtZXNzYWdlKQogICAgIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL3JhL3NyYy9jb25uZWN0b3IvV29ya0Rpc3BhdGNoZXIuamF2YQppbmRleCBkZGZmMDA1Li40ZTkyMWEyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9yYS9zcmMvY29ubmVjdG9yL1dvcmtEaXNwYXRjaGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvcmEvc3JjL2Nvbm5lY3Rvci9Xb3JrRGlzcGF0Y2hlci5qYXZhCkBAIC04Niw3ICs4Niw3IEBACiAKICAgICAgICAgICAgICAgICBpZiAoIWZhY3RvcnkuaXNEZWxpdmVyeVRyYW5zYWN0ZWQob25NZXNzYWdlKSkgewogICAgICAgICAgICAgICAgICAgICAvL01lc3NhZ2VFbmRwb2ludCBlcCA9IGZhY3RvcnkuY3JlYXRlRW5kcG9pbnQobnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIC8vRGVsaXZlcnlXb3JrIGQgPSBuZXcgRGVsaXZlcnlXb3JrKCJOT19UWCIsIGVwKTsgCisgICAgICAgICAgICAgICAgICAgIC8vRGVsaXZlcnlXb3JrIGQgPSBuZXcgRGVsaXZlcnlXb3JrKCJOT19UWCIsIGVwKTsKICAgICAgICAgICAgICAgICAgICAgLy93bS5kb1dvcmsoZCwgMCwgbnVsbCwgbnVsbCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9tdWx0aXBsZS1yZXNvdXJjZXMueG1sL3JhL3NyYy9jb25uZWN0b3IvWElELmphdmEKaW5kZXggMThhOTcwZC4uYjJhOTA2YyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL211bHRpcGxlLXJlc291cmNlcy54bWwvcmEvc3JjL2Nvbm5lY3Rvci9YSUQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbXVsdGlwbGUtcmVzb3VyY2VzLnhtbC9yYS9zcmMvY29ubmVjdG9yL1hJRC5qYXZhCkBAIC0zNSw4ICszNSw4IEBACiAgICAgcHVibGljIGludCBicmFuY2hRdWFsaWZpZXI7CiAgICAgcHVibGljIGludCBnbG9iYWxUeElEOwogCi0gICAgc3RhdGljIHB1YmxpYyAgZmluYWwgaW50IE1BWEdUUklEU0laRT0gNjQ7IAotICAgIHN0YXRpYyBwdWJsaWMgIGZpbmFsIGludCBNQVhCUVVBTFNJWkU9IDY0OyAKKyAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYR1RSSURTSVpFPSA2NDsKKyAgICBzdGF0aWMgcHVibGljICBmaW5hbCBpbnQgTUFYQlFVQUxTSVpFPSA2NDsKIAogICAgIHB1YmxpYyBYSUQoKSB7CiAgICAgICAgIGludCBmb28gPSBJRCsrOwpAQCAtNTQsMTAgKzU0LDEwIEBACiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAgICAgICAgICAgICAgICAvLyBJdCBjYW4ndCBiZSBlcXVhbAogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIG90aGVyID0gKFhJRClvOyAgICAgICAgICAgICAgICAgICAvLyBUaGUgb3RoZXIgWElELCBub3cgcHJvcGVybHkgY2FzdAotICAgICAgICAKLSAgICAgICAgaWYgKHRoaXMuZm9ybWF0SUQgPT0gb3RoZXIuZm9ybWF0SUQgCisKKyAgICAgICAgaWYgKHRoaXMuZm9ybWF0SUQgPT0gb3RoZXIuZm9ybWF0SUQKICAgICAgICAgICAgICAgICAmJiB0aGlzLmJyYW5jaFF1YWxpZmllciA9PSBvdGhlci5icmFuY2hRdWFsaWZpZXIKICAgICAgICAgICAgICAgICAmJiB0aGlzLmdsb2JhbFR4SUQgPT0gb3RoZXIuZ2xvYmFsVHhJRCkgewogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC05Nyw3ICs5Nyw3IEBACiAgICAgICAgICAgICAgICAgImZvcm1hdElEKCIgICAgICsgZm9ybWF0SUQgICAgICsgIiksICIgKwogICAgICAgICAgICAgICAgICJicmFuY2hRdWFsaWZpZXIgKCIgKyBicmFuY2hRdWFsaWZpZXIgKyAiKSwgIiArCiAgICAgICAgICAgICAgICAgImdsb2JhbFR4SUQoIiArIGdsb2JhbFR4SUQgKyAiKX0iKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIHM7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvYnVpbGQucHJvcGVydGllcwppbmRleCBlMmNjNzVkLi5kYzE5YzliIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE2ICsxNSwxNiBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zdWJjbGFzc2luZyIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc3ViY2xhc3NpbmciLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9InN1YmNsYXNzaW5nIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9idWlsZC54bWwKaW5kZXggODBkMDdjNC4uNzVlYWE1YiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL2J1aWxkLnhtbApAQCAtMzEsNyArMzEsNyBAQAogICAgICZjb21tb25CdWlsZDsKICAgICAmY29tbW9uUnVuOwogICAgICZ0ZXN0cHJvcGVydGllczsKLSAgICAKKwogPCEtLQogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCxzZXR1cCxkZXBsb3ktd2FyLCBydW4td2FyLCB1bmRlcGxveS13YXIsIGRlcGxveS1lYXIsIHJ1bi1lYXIsIHVuZGVwbG95LWVhciwgdW5zZXR1cCIvPgogCkBAIC00MCwxNSArNDAsMTUgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQsIGRpc2FibGUtcmVzb3VyY2UtdmFsaWRhdGlvbiwgZGVwbG95LWVhciwgc2V0dXAsIHJ1bi1lYXIsIHVuc2V0dXAsIHVuZGVwbG95LWVhciwgZW5hYmxlLXJlc291cmNlLXZhbGlkYXRpb24iLz4KIAogPCEtLQotCTxhbnRjYWxsIHRhcmdldD0iYnVpbGQiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InNldHVwIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJydW4td2FyIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXIiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1lYXIiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InJ1bi1lYXIiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWVhciIvPgotCTxhbnRjYWxsIHRhcmdldD0idW5zZXR1cCIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InNldHVwIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4td2FyIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXIiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1lYXIiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi1lYXIiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWVhciIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0idW5zZXR1cCIvPgogICAgIDwvdGFyZ2V0PgogLS0+CiAKQEAgLTU2LDcgKzU2LDcgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgICA8YW50IGRpcj0icmEiIHRhcmdldD0iY2xlYW4iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbm5lY3RvciI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9zaW1wbGVCYW5rLnNxbCIvPgpAQCAtNjQsNyArNjQsNyBAQAogICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLXBvb2wiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1yZXNvdXJjZSIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWFkbWluLW9iamVjdCIvPgotICAgICAgICAKKwogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLXBvb2wiPgogICAgICAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWNvbm5lY3Rvci1jb25ucG9vbC1jb21tb24iPgpAQCAtODQsMzcgKzg0LDM3IEBACiAgICAgICAgICAgICAgICAgPC9hbnRjYWxsPgogICAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iZGlzYWJsZS1yZXNvdXJjZS12YWxpZGF0aW9uIj4KLQkJPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtanZtLW9wdGlvbnMiPgotCQkJPHBhcmFtIG5hbWU9Im9wdGlvbiIgdmFsdWU9Ii1EZGVwbG95bWVudC5yZXNvdXJjZS52YWxpZGF0aW9uPWZhbHNlIi8+Ci0JCTwvYW50Y2FsbD4KLQkJPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXNlcnZlciIvPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0iZGlzYWJsZS1yZXNvdXJjZS12YWxpZGF0aW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtanZtLW9wdGlvbnMiPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wdGlvbiIgdmFsdWU9Ii1EZGVwbG95bWVudC5yZXNvdXJjZS52YWxpZGF0aW9uPWZhbHNlIi8+CisgICAgICAgIDwvYW50Y2FsbD4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXNlcnZlciIvPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJlbmFibGUtcmVzb3VyY2UtdmFsaWRhdGlvbiI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWp2bS1vcHRpb25zIj4KLQkJCTxwYXJhbSBuYW1lPSJvcHRpb24iIHZhbHVlPSItRGRlcGxveW1lbnQucmVzb3VyY2UudmFsaWRhdGlvbj1mYWxzZSIvPgotCQk8L2FudGNhbGw+Ci0JCTxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXIiLz4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9ImVuYWJsZS1yZXNvdXJjZS12YWxpZGF0aW9uIj4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtanZtLW9wdGlvbnMiPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wdGlvbiIgdmFsdWU9Ii1EZGVwbG95bWVudC5yZXNvdXJjZS52YWxpZGF0aW9uPWZhbHNlIi8+CisgICAgICAgIDwvYW50Y2FsbD4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXNlcnZlciIvPgorICAgIDwvdGFyZ2V0PgogCiAKICAgICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtYWRtaW4tb2JqZWN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgICA8IS0tPHByb3BlcnR5IGZpbGU9Ii4uL2NvbmZpZy9vcmFjbGUucHJvcGVydGllcyIvPi0tPgogICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9ImNyZWF0ZS1hZG1pbi1vYmplY3QgLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0gLS1yZXN0eXBlIGNvbS5zdW4uamRiY3JhLnNwaS5KZGJjU2V0dXBBZG1pbiAtLXJhbmFtZSAke2FwcG5hbWV9QXBwI2pkYmNyYSAtLXByb3BlcnR5IFRhYmxlTmFtZT1jdXN0b21lcjI6Sm5kaU5hbWU9amRiYy9lamItc3ViY2xhc3Npbmc6U2NoZW1hTmFtZT1EQlVTRVI6Tm9PZlJvd3M9MSIvPgotCSAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9ImVpcy9qZGJjQWRtaW4iLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSJlaXMvamRiY0FkbWluIi8+CiAgICAgICAgICA8L2FudGNhbGw+CiAgICAgIDwvdGFyZ2V0PgogCiAgICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLWFkbWluLW9iamVjdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+Ci0JICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0iZGVsZXRlLWFkbWluLW9iamVjdCIvPgotCSAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9IGVpcy9qZGJjQWRtaW4iLz4KLQkgPC9hbnRjYWxsPgotPCEtLQkgPGFudGNhbGwgdGFyZ2V0PSJyZWNvbmZpZy1jb21tb24iLz4tLT4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJkZWxldGUtYWRtaW4tb2JqZWN0Ii8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0gZWlzL2pkYmNBZG1pbiIvPgorICAgICA8L2FudGNhbGw+Cis8IS0tICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlY29uZmlnLWNvbW1vbiIvPi0tPgogICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmVzdGFydCI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXNlcnZlci1pbnN0YW5jZS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTEyMiwxNiArMTIyLDE2IEBACiAgICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLXJhLWNvbmZpZyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9ImNyZWF0ZS1yZXNvdXJjZS1hZGFwdGVyLWNvbmZpZyAgLS1wcm9wZXJ0eSBSQVByb3BlcnR5PVZBTElEIi8+Ci0JICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHthcHBuYW1lfUFwcCNqZGJjcmEiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke2FwcG5hbWV9QXBwI2pkYmNyYSIvPgogICAgICAgICAgPC9hbnRjYWxsPgogICAgICA8L3RhcmdldD4KIAogICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yYS1jb25maWciIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgotCSAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9ImRlbGV0ZS1yZXNvdXJjZS1hZGFwdGVyLWNvbmZpZyIvPgotCSAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7YXBwbmFtZX1BcHAjamRiY3JhIi8+Ci0JIDwvYW50Y2FsbD4KLTwhLS0JIDxhbnRjYWxsIHRhcmdldD0icmVjb25maWctY29tbW9uIi8+LS0+CisgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0iZGVsZXRlLXJlc291cmNlLWFkYXB0ZXItY29uZmlnIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHthcHBuYW1lfUFwcCNqZGJjcmEiLz4KKyAgICAgPC9hbnRjYWxsPgorPCEtLSAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZWNvbmZpZy1jb21tb24iLz4tLT4KICAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVuc2V0dXAiPgpAQCAtMTQzLDcgKzE0Myw3IEBACiAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtcG9vbCIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWFkbWluLW9iamVjdCIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcG9vbCI+CiAgICAgICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtY29ubmVjdG9yLWNvbm5wb29sLWNvbW1vbiI+CiAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImNvbm5lY3Rvci5jb25wb29sLm5hbWUiIHZhbHVlPSJlbWJlZGRlZC1yYS1wb29sIi8+CkBAIC0xNTMsNyArMTUzLDcgQEAKICAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2UiPgogICAgICAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWNvbm5lY3Rvci1yZXNvdXJjZS1jb21tb24iPgogICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJjb25uZWN0b3Iuam5kaS5uYW1lIiB2YWx1ZT0iamRiYy9lamItc3ViY2xhc3NpbmciLz4KLQkJPC9hbnRjYWxsPgorICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KQEAgLTE2OSw5ICsxNjksOSBAQAogICAgICAgPGVjaG8gbWVzc2FnZT0iY29tbW9uLnhtbDogQ29tcGlsaW5nIHRlc3Qgc291cmNlIGZpbGVzIiBsZXZlbD0idmVyYm9zZSIvPgogICAgICAgPGphdmFjIHNyY2Rpcj0ic2VydmxldCIKICAgICAgICAgIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgotCSBjbGFzc3BhdGg9IiR7czFhc3Rlc3QuY2xhc3NwYXRofTpyYS9wdWJsaXNoL2ludGVybmFsL2NsYXNzZXMiCisgICAgIGNsYXNzcGF0aD0iJHtzMWFzdGVzdC5jbGFzc3BhdGh9OnJhL3B1Ymxpc2gvaW50ZXJuYWwvY2xhc3NlcyIKICAgICAgICAgIGRlYnVnPSJvbiIKLQkgZmFpbG9uZXJyb3I9InRydWUiLz4KKyAgICAgZmFpbG9uZXJyb3I9InRydWUiLz4KICAgICAgPC90YXJnZXQ+CiAKIApAQCAtMTgwLDM0ICsxODAsMzQgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgIDxhbnQgZGlyPSJyYSIgdGFyZ2V0PSJhc3NlbWJsZSIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgIDwvYW50Y2FsbD4KLSAgICAgICAKKwogICAgIDxhbnRjYWxsIHRhcmdldD0iZWpiLWphci1jb21tb24iPgogICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICA8L2FudGNhbGw+CiAKLSAgICAKKwogICAgIDxkZWxldGUgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0uZWFyIi8+CiAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+Ci0gICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4gICAgCi0gICAgPGVhciBlYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiIAorICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CisgICAgPGVhciBlYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiCiAgICAgIGFwcHhtbD0iJHthcHBsaWNhdGlvbi54bWx9Ij4KICAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSI+CiAgICAgICA8aW5jbHVkZSBuYW1lPSIqLmphciIvPgogICAgICAgPGluY2x1ZGUgbmFtZT0iKi53YXIiLz4KLSAgICA8L2ZpbGVzZXQ+ICAKKyAgICA8L2ZpbGVzZXQ+CiAgICAgPGZpbGVzZXQgZGlyPSJyYS9wdWJsaXNoL2xpYiI+CiAgICAgICA8aW5jbHVkZSBuYW1lPSIqLnJhciIvPgogICAgIDwvZmlsZXNldD4KICAgICA8L2Vhcj4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95LWVhciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1yYS1jb25maWciLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CkBAIC0yMTYsMjcgKzIxNiwyNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95LXdhciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi13YXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW53ZWJjbGllbnQtY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0idGVzdHN1aXRlLmlkIiB2YWx1ZT0ibm9uLXN0cmluZy1tY2YtcHJvcGVydGllcyAoc3RhbmQtYWxvbmUgd2FyIGJhc2VkKSIvPgotCTwvYW50Y2FsbD4KKyAgICA8cGFyYW0gbmFtZT0idGVzdHN1aXRlLmlkIiB2YWx1ZT0ibm9uLXN0cmluZy1tY2YtcHJvcGVydGllcyAoc3RhbmQtYWxvbmUgd2FyIGJhc2VkKSIvPgorICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuLWVhciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bndlYmNsaWVudC1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJub24tc3RyaW5nLW1jZi1wcm9wZXJ0aWVzIChlYXIgYmFzZWQpIi8+Ci0JPC9hbnRjYWxsPgorICAgIDxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJub24tc3RyaW5nLW1jZi1wcm9wZXJ0aWVzIChlYXIgYmFzZWQpIi8+CisgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveS1lYXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtcmEtY29uZmlnIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3ktd2FyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCmluZGV4IDFkMTIwMGQuLmRmNGJiOTMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCkBAIC0yOSwyMCArMjksMjAgQEAKICAgICAgICAgPHJlcy1yZWYtbmFtZT5qZGJjL1NpbXBsZUJhbms8L3Jlcy1yZWYtbmFtZT4KICAgICAgICAgPGpuZGktbmFtZT5qZGJjL2VqYi1zdWJjbGFzc2luZzwvam5kaS1uYW1lPgogICAgICAgPC9yZXNvdXJjZS1yZWY+Ci0gICAgICA8aXMtcmVhZC1vbmx5LWJlYW4+ZmFsc2U8L2lzLXJlYWQtb25seS1iZWFuPiAKLSAgICAgIDxjb21taXQtb3B0aW9uPkI8L2NvbW1pdC1vcHRpb24+IAotICAgICA8YmVhbi1wb29sPiAKLSAgICAgICAgIDxzdGVhZHktcG9vbC1zaXplPjA8L3N0ZWFkeS1wb29sLXNpemU+IAotICAgICAgICAgPHJlc2l6ZS1xdWFudGl0eT4xPC9yZXNpemUtcXVhbnRpdHk+IAotICAgICAgICAgPG1heC1wb29sLXNpemU+MTA8L21heC1wb29sLXNpemU+IAotICAgICAgICAgPHBvb2wtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcG9vbC1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4gCi0gICAgICA8L2JlYW4tcG9vbD4gCi0gICAgICA8YmVhbi1jYWNoZT4gCi0gICAgICAgICAgPG1heC1jYWNoZS1zaXplPjEwMDwvbWF4LWNhY2hlLXNpemU+IAotICAgICAgICA8Y2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+NjA8L2NhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPiAKLSAgICAgICAgPHJlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPjM2MDA8L3JlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPiAKLSAgICAgICAgPHZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PkxSVTwvdmljdGltLXNlbGVjdGlvbi1wb2xpY3k+IAotICAgICAgPC9iZWFuLWNhY2hlPiAKKyAgICAgIDxpcy1yZWFkLW9ubHktYmVhbj5mYWxzZTwvaXMtcmVhZC1vbmx5LWJlYW4+CisgICAgICA8Y29tbWl0LW9wdGlvbj5CPC9jb21taXQtb3B0aW9uPgorICAgICA8YmVhbi1wb29sPgorICAgICAgICAgPHN0ZWFkeS1wb29sLXNpemU+MDwvc3RlYWR5LXBvb2wtc2l6ZT4KKyAgICAgICAgIDxyZXNpemUtcXVhbnRpdHk+MTwvcmVzaXplLXF1YW50aXR5PgorICAgICAgICAgPG1heC1wb29sLXNpemU+MTA8L21heC1wb29sLXNpemU+CisgICAgICAgICA8cG9vbC1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4zNjAwPC9wb29sLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPgorICAgICAgPC9iZWFuLXBvb2w+CisgICAgICA8YmVhbi1jYWNoZT4KKyAgICAgICAgICA8bWF4LWNhY2hlLXNpemU+MTAwPC9tYXgtY2FjaGUtc2l6ZT4KKyAgICAgICAgPGNhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjYwPC9jYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4KKyAgICAgICAgPHJlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPjM2MDA8L3JlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPgorICAgICAgICA8dmljdGltLXNlbGVjdGlvbi1wb2xpY3k+TFJVPC92aWN0aW0tc2VsZWN0aW9uLXBvbGljeT4KKyAgICAgIDwvYmVhbi1jYWNoZT4KICAgICA8L2VqYj4KICAgICA8ZWpiPgogICAgICAgPGVqYi1uYW1lPkN1c3RvbWVyQ2hlY2tpbmdFSkI8L2VqYi1uYW1lPgpAQCAtNTEsMjAgKzUxLDIwIEBACiAgICAgICAgIDxyZXMtcmVmLW5hbWU+amRiYy9TaW1wbGVCYW5rPC9yZXMtcmVmLW5hbWU+CiAgICAgICAgIDxqbmRpLW5hbWU+amRiYy9lamItc3ViY2xhc3Npbmc8L2puZGktbmFtZT4KICAgICAgIDwvcmVzb3VyY2UtcmVmPgotICAgICAgPGlzLXJlYWQtb25seS1iZWFuPmZhbHNlPC9pcy1yZWFkLW9ubHktYmVhbj4gCi0gICAgICA8Y29tbWl0LW9wdGlvbj5CPC9jb21taXQtb3B0aW9uPiAKLSAgICAgPGJlYW4tcG9vbD4gCi0gICAgICAgICA8c3RlYWR5LXBvb2wtc2l6ZT4wPC9zdGVhZHktcG9vbC1zaXplPiAKLSAgICAgICAgIDxyZXNpemUtcXVhbnRpdHk+MTwvcmVzaXplLXF1YW50aXR5PiAKLSAgICAgICAgIDxtYXgtcG9vbC1zaXplPjEwPC9tYXgtcG9vbC1zaXplPiAKKyAgICAgIDxpcy1yZWFkLW9ubHktYmVhbj5mYWxzZTwvaXMtcmVhZC1vbmx5LWJlYW4+CisgICAgICA8Y29tbWl0LW9wdGlvbj5CPC9jb21taXQtb3B0aW9uPgorICAgICA8YmVhbi1wb29sPgorICAgICAgICAgPHN0ZWFkeS1wb29sLXNpemU+MDwvc3RlYWR5LXBvb2wtc2l6ZT4KKyAgICAgICAgIDxyZXNpemUtcXVhbnRpdHk+MTwvcmVzaXplLXF1YW50aXR5PgorICAgICAgICAgPG1heC1wb29sLXNpemU+MTA8L21heC1wb29sLXNpemU+CiAgICAgICAgIDxwb29sLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjM2MDA8L3Bvb2wtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+Ci0gICAgICA8L2JlYW4tcG9vbD4gCi0gICAgICA8YmVhbi1jYWNoZT4gCisgICAgICA8L2JlYW4tcG9vbD4KKyAgICAgIDxiZWFuLWNhY2hlPgogICAgICAgICAgIDxtYXgtY2FjaGUtc2l6ZT4xMDA8L21heC1jYWNoZS1zaXplPgogICAgICAgICAgIDxjYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz42MDwvY2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+CiAgICAgICAgICAgPHJlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPjM2MDA8L3JlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPgogICAgICAgICAgIDx2aWN0aW0tc2VsZWN0aW9uLXBvbGljeT5MUlU8L3ZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PgotICAgICAgPC9iZWFuLWNhY2hlPiAKKyAgICAgIDwvYmVhbi1jYWNoZT4KICAgICA8L2VqYj4KICAgPC9lbnRlcnByaXNlLWJlYW5zPgogPC9zdW4tZWpiLWphcj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL2VqYi9DdXN0b21lci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvZWpiL0N1c3RvbWVyLmphdmEKaW5kZXggMDgxMDdhNS4uMGIyYjQ5YSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvZWpiL0N1c3RvbWVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvZWpiL0N1c3RvbWVyLmphdmEKQEAgLTQ3LDQgKzQ3LDQgQEAKIAogfQogCi0gIAorCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9lamIvQ3VzdG9tZXJDaGVja2luZy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvZWpiL0N1c3RvbWVyQ2hlY2tpbmcuamF2YQppbmRleCA2MWRlMjkxLi5iMzQxYzM0IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9lamIvQ3VzdG9tZXJDaGVja2luZy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL2VqYi9DdXN0b21lckNoZWNraW5nLmphdmEKQEAgLTIwLDQgKzIwLDQgQEAKIHsKIH0KIAotICAKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvZWpiL0N1c3RvbWVyQ2hlY2tpbmdFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL2VqYi9DdXN0b21lckNoZWNraW5nRUpCLmphdmEKaW5kZXggOTA5M2I3ZS4uYjY5MDA5OSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvZWpiL0N1c3RvbWVyQ2hlY2tpbmdFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9lamIvQ3VzdG9tZXJDaGVja2luZ0VKQi5qYXZhCkBAIC05Miw1ICs5Miw1IEBACiAgIH0KIAogfQotICAgIAotICAgIAorCisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL2VqYi9DdXN0b21lckVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvZWpiL0N1c3RvbWVyRUpCLmphdmEKaW5kZXggMDUyMGI2MC4uMDcyMjBkYiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvZWpiL0N1c3RvbWVyRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvZWpiL0N1c3RvbWVyRUpCLmphdmEKQEAgLTUzLDcgKzUzLDcgQEAKIAogICBwdWJsaWMgU3RyaW5nIGdldEFkZHJlc3MxKCkKICAgewotICAgIHJldHVybiBhZGRyZXNzMTsgCisgICAgcmV0dXJuIGFkZHJlc3MxOwogICB9CiAKICAgcHVibGljIFN0cmluZyBnZXRBZGRyZXNzMigpCkBAIC0xMzksNyArMTM5LDcgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTUUwgZXhjZXB0aW9uIG9jY3VyZWQgaW4gZWpiUmVtb3ZlIG1ldGhvZCIpOwogICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgfQotICAgIAorCiAgIH0KIAogICBwdWJsaWMgdm9pZCBlamJTdG9yZSgpCkBAIC0yMDYsMTIgKzIwNiwxMiBAQAogICAgIH0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7CiAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNRTEV4Y2VwdGlvbiBvY2N1cnJlZCBpbiBlamJMb2FkKCkgbWV0aG9kIik7CiAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0gICAKKyAgICB9CiAgIH0KIAogICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHt9CiAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHt9CiB9Ci0gICAgICAKLSAgICAKLSAgICAKKworCisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL2VqYi9DdXN0b21lclNhdmluZ3MuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL2VqYi9DdXN0b21lclNhdmluZ3MuamF2YQppbmRleCAzMzhjOTIxLi44ODNlMDRhIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9lamIvQ3VzdG9tZXJTYXZpbmdzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvZWpiL0N1c3RvbWVyU2F2aW5ncy5qYXZhCkBAIC0yMCw0ICsyMCw0IEBACiB7CiB9CiAKLSAgCisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL2VqYi9DdXN0b21lclNhdmluZ3NFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL2VqYi9DdXN0b21lclNhdmluZ3NFSkIuamF2YQppbmRleCBmMzBiNTA2Li5iMGNlN2I1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9lamIvQ3VzdG9tZXJTYXZpbmdzRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvZWpiL0N1c3RvbWVyU2F2aW5nc0VKQi5qYXZhCkBAIC05NSw2ICs5NSw2IEBACiAgIH0KIAogfQotICAgICAgCi0gICAgCi0gICAgCisKKworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvYnVpbGQucHJvcGVydGllcwppbmRleCBlZTJlY2EwLi5mZDIxYzNkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE0LDcgKzE0LDcgQEAKICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAjCiAKLSAgICAKKwogIyMjIENvbXBvbmVudCBQcm9wZXJ0aWVzICMjIwogc3JjLmRpcj1zcmMKIGNvbXBvbmVudC5wdWJsaXNoLmhvbWU9LgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvYnVpbGQueG1sCmluZGV4IDc0NDg0ZmUuLjJiNjc0NDYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9idWlsZC54bWwKQEAgLTIzLDYyICsyMyw2MiBAQAogCiA8cHJvamVjdCBuYW1lPSJKREJDQ29ubmVjdG9yIHRvcCBsZXZlbCIgZGVmYXVsdD0iYnVpbGQiPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJwa2cuZGlyIiB2YWx1ZT0iY29tL3N1bi9qZGJjcmEvc3BpIi8+Ci0gICAgCisKICAgICAmY29tbW9uOwogICAgICZ0ZXN0Y29tbW9uOwogICAgIDxwcm9wZXJ0eSBmaWxlPSIuL2J1aWxkLnByb3BlcnRpZXMiLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUsYXNzZW1ibGUiIC8+Ci0gICAgICAgICAgCisKIAogICAgIDwhLS0gaW5pdC4gSW5pdGlhbGl6YXRpb24gaW52b2x2ZXMgY3JlYXRpbmcgcHVibGlzaGluZyBkaXJlY3RvcmllcyBhbmQKLSAgICAgICAgIE9TIHNwZWNpZmljIHRhcmdldHMuIC0tPiAKKyAgICAgICAgIE9TIHNwZWNpZmljIHRhcmdldHMuIC0tPgogICAgIDx0YXJnZXQgbmFtZT0iaW5pdCIgZGVzY3JpcHRpb249IiR7Y29tcG9uZW50Lm5hbWV9IGluaXRpYWxpemF0aW9uIj4KICAgICAgICAgPHRzdGFtcD4KICAgICAgICAgICAgIDxmb3JtYXQgcHJvcGVydHk9InN0YXJ0LnRpbWUiIHBhdHRlcm49Ik1NL2RkL3l5eXkgaGg6bW0gYWEiLz4KLSAgICAgICAgPC90c3RhbXA+ICAgIAorICAgICAgICA8L3RzdGFtcD4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iQnVpbGRpbmcgY29tcG9uZW50ICR7Y29tcG9uZW50Lm5hbWV9Ii8+CiAgICAgICAgIDxta2RpciBkaXI9IiR7Y29tcG9uZW50LmNsYXNzZXMuZGlyfSIvPgotICAgICAgICA8bWtkaXIgZGlyPSIke2NvbXBvbmVudC5saWIuaG9tZX0iLz4gICAgCisgICAgICAgIDxta2RpciBkaXI9IiR7Y29tcG9uZW50LmxpYi5ob21lfSIvPgogICAgIDwvdGFyZ2V0PgotICAgIDwhLS0gY29tcGlsZSAtLT4gCisgICAgPCEtLSBjb21waWxlIC0tPgogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iaW5pdCIKLSAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJDb21waWxlIGNvbS9zdW4vKiBjb20vaXBsYW5ldC8qIHNvdXJjZXMiPiAgCisgICAgICAgICAgICBkZXNjcmlwdGlvbj0iQ29tcGlsZSBjb20vc3VuLyogY29tL2lwbGFuZXQvKiBzb3VyY2VzIj4KICAgICAgICAgPCEtLTxlY2hvIG1lc3NhZ2U9IkNvbm5lY3RvciBhcGkgcmVzaWRlcyBpbiAke2Nvbm5lY3Rvci1hcGkuamFyfSIvPi0tPgotICAgICAgICA8amF2YWMgc3JjZGlyPSIke3NyYy5kaXJ9IiAKKyAgICAgICAgPGphdmFjIHNyY2Rpcj0iJHtzcmMuZGlyfSIKICAgICAgICAgICAgICAgIGRlc3RkaXI9IiR7Y29tcG9uZW50LmNsYXNzZXMuZGlyfSIKLQkgICAgICAgZmFpbG9uZXJyb3I9InRydWUiPgotCSAgICAgICA8Y2xhc3NwYXRoPgotCSAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LlMxQVNfSE9NRX0vbW9kdWxlcyI+Ci0JICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLmphciIgLz4KLQkgICAgICAgICAgPC9maWxlc2V0PgotCSAgICAgICA8L2NsYXNzcGF0aD4KKyAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiPgorICAgICAgICAgICA8Y2xhc3NwYXRoPgorICAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LlMxQVNfSE9NRX0vbW9kdWxlcyI+CisgICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLmphciIgLz4KKyAgICAgICAgICAgICAgPC9maWxlc2V0PgorICAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9ImNvbS9zdW4vamRiY3JhLyoqIi8+CiAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJjb20vc3VuL2FwcHNlcnYvKioiLz4KICAgICAgICAgPC9qYXZhYz4KICAgICA8L3RhcmdldD4KLSAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQiLz4KIAotICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZSI+ICAgIAotICAgIAkKLQk8amFyIGphcmZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9qZGJjLmphciIgCi0gICAgICAgICAgICBiYXNlZGlyPSIke2NvbXBvbmVudC5jbGFzc2VzLmRpcn0iIGluY2x1ZGVzPSIke3BrZy5kaXJ9LyoqLyosIAotICAgICAgICAgICAgY29tL3N1bi9hcHBzZXJ2LyoqLyosIGNvbS9zdW4vamRiY3JhL3V0aWwvKiovKiwgY29tL3N1bi9qZGJjcmEvY29tbW9uLyoqLyoiLz4gCi0gICAJCi0gICAgICAgIDxjb3B5IGZpbGU9IiR7c3JjLmRpcn0vY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9yYS1kcy54bWwiIAotICAgICAgICAgICAgICAgIHRvZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgkKKyAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUiPgorCisgICAgPGphciBqYXJmaWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vamRiYy5qYXIiCisgICAgICAgICAgICBiYXNlZGlyPSIke2NvbXBvbmVudC5jbGFzc2VzLmRpcn0iIGluY2x1ZGVzPSIke3BrZy5kaXJ9LyoqLyosCisgICAgICAgICAgICBjb20vc3VuL2FwcHNlcnYvKiovKiwgY29tL3N1bi9qZGJjcmEvdXRpbC8qKi8qLCBjb20vc3VuL2pkYmNyYS9jb21tb24vKiovKiIvPgorCisgICAgICAgIDxjb3B5IGZpbGU9IiR7c3JjLmRpcn0vY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9yYS1kcy54bWwiCisgICAgICAgICAgICAgICAgdG9maWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CiAgICAgICAgIDwvY29weT4KLSAgIAk8amFyIGphcmZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9qZGJjcmEucmFyIiAKLQkJYmFzZWRpcj0iJHtjb21wb25lbnQubGliLmhvbWV9IiBpbmNsdWRlcz0iamRiYy5qYXIiPgorICAgICAgIDxqYXIgamFyZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L2pkYmNyYS5yYXIiCisgICAgICAgIGJhc2VkaXI9IiR7Y29tcG9uZW50LmxpYi5ob21lfSIgaW5jbHVkZXM9ImpkYmMuamFyIj4KIAotICAgCQk8bWV0YWluZiBkaXI9IiR7Y29tcG9uZW50LmxpYi5ob21lfSI+Ci0gICAJCQk8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KLSAgIAkJPC9tZXRhaW5mPgotICAgCTwvamFyPgorICAgICAgICAgICA8bWV0YWluZiBkaXI9IiR7Y29tcG9uZW50LmxpYi5ob21lfSI+CisgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KKyAgICAgICAgICAgPC9tZXRhaW5mPgorICAgICAgIDwvamFyPgogCi0gICAJPGRlbGV0ZSBmaWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vcmEueG1sIi8+Ci0JCisgICAgICAgPGRlbGV0ZSBmaWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vcmEueG1sIi8+CisKICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXNjcmlwdGlvbj0iQ2xlYW4gdGhlIGJ1aWxkIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2FwcHNlcnYvamRiY3JhL0RhdGFTb3VyY2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2FwcHNlcnYvamRiY3JhL0RhdGFTb3VyY2UuamF2YQppbmRleCA5ZjgzOTlhLi5iNmVmMzBiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9hcHBzZXJ2L2pkYmNyYS9EYXRhU291cmNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vYXBwc2Vydi9qZGJjcmEvRGF0YVNvdXJjZS5qYXZhCkBAIC0yMCwxNSArMjAsMTUgQEAKIGltcG9ydCBqYXZhLnNxbC5TUUxFeGNlcHRpb247CiAKIC8qKgotICogVGhlIDxjb2RlPmphdmF4LnNxbC5EYXRhU291cmNlPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBvZiBTdW5PTkUgYXBwbGljYXRpb24gCisgKiBUaGUgPGNvZGU+amF2YXguc3FsLkRhdGFTb3VyY2U8L2NvZGU+IGltcGxlbWVudGF0aW9uIG9mIFN1bk9ORSBhcHBsaWNhdGlvbgogICogc2VydmVyIHdpbGwgaW1wbGVtZW50IHRoaXMgaW50ZXJmYWNlLiBBbiBhcHBsaWNhdGlvbiBwcm9ncmFtIHdvdWxkIGJlIGFibGUKLSAqIHRvIHVzZSB0aGlzIGludGVyZmFjZSB0byBkbyB0aGUgZXh0ZW5kZWQgZnVuY3Rpb25hbGl0eSBleHBvc2VkIGJ5IFN1bk9ORSAKKyAqIHRvIHVzZSB0aGlzIGludGVyZmFjZSB0byBkbyB0aGUgZXh0ZW5kZWQgZnVuY3Rpb25hbGl0eSBleHBvc2VkIGJ5IFN1bk9ORQogICogYXBwbGljYXRpb24gc2VydmVyLgotICogPHA+QSBzYW1wbGUgY29kZSBmb3IgZ2V0dGluZyBkcml2ZXIncyBjb25uZWN0aW9uIGltcGxlbWVudGF0aW9uIHdvdWxkIGxpa2UgCisgKiA8cD5BIHNhbXBsZSBjb2RlIGZvciBnZXR0aW5nIGRyaXZlcidzIGNvbm5lY3Rpb24gaW1wbGVtZW50YXRpb24gd291bGQgbGlrZQogICogdGhlIGZvbGxvd2luZy4KICAqIDxwcmU+CiAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgIGNvbS5zdW4uYXBwc2Vydi5EYXRhU291cmNlIGRzID0gKGNvbS5zdW4uYXBwc2Vydi5EYXRhU091cmNlKSBpYy5sb29rdXAoImpkYmMvUG9pbnRCYXNlIik7IAorICAgICBjb20uc3VuLmFwcHNlcnYuRGF0YVNvdXJjZSBkcyA9IChjb20uc3VuLmFwcHNlcnYuRGF0YVNPdXJjZSkgaWMubG9va3VwKCJqZGJjL1BvaW50QmFzZSIpOwogICAgICBDb25uZWN0aW9uIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKICAgICAgQ29ubmVjdGlvbiBkcml2ZXJjb24gPSBkcy5nZXRDb25uZWN0aW9uKGNvbik7CiAKQEAgLTM2LDEzICszNiwxMyBAQAogCiAgICAgIGNvbi5jbG9zZSgpOwogICAgPC9wcmU+Ci0gKiAKKyAqCiAgKiBAYXV0aG9yIEJpbm9kIFAuRwogICovCiBwdWJsaWMgaW50ZXJmYWNlIERhdGFTb3VyY2UgZXh0ZW5kcyBqYXZheC5zcWwuRGF0YVNvdXJjZSB7CiAKICAgICAvKioKLSAgICAgKiBSZXRyaWV2ZXMgdGhlIGFjdHVhbCBTUUxDb25uZWN0aW9uIGZyb20gdGhlIENvbm5lY3Rpb24gd3JhcHBlciAKKyAgICAgKiBSZXRyaWV2ZXMgdGhlIGFjdHVhbCBTUUxDb25uZWN0aW9uIGZyb20gdGhlIENvbm5lY3Rpb24gd3JhcHBlcgogICAgICAqIGltcGxlbWVudGF0aW9uIG9mIFN1bk9ORSBhcHBsaWNhdGlvbiBzZXJ2ZXIuIElmIGFuIGFjdHVhbCBjb25uZWN0aW9uIGlzCiAgICAgICogc3VwcGxpZWQgYXMgYXJndW1lbnQsIHRoZW4gaXQgd2lsbCBiZSBqdXN0IHJldHVybmVkLgogICAgICAqCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VPYmplY3RCdWlsZGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VPYmplY3RCdWlsZGVyLmphdmEKaW5kZXggYzI4MjJlMi4uNmEzNjZiMCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlT2JqZWN0QnVpbGRlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIuamF2YQpAQCAtMjcsMjIgKzI3LDIyIEBACiBpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOwogaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOwogLyoqCi0gKiBVdGlsaXR5IGNsYXNzLCB3aGljaCB3b3VsZCBjcmVhdGUgbmVjZXNzYXJ5IERhdGFzb3VyY2Ugb2JqZWN0IGFjY29yZGluZyB0byB0aGUgCisgKiBVdGlsaXR5IGNsYXNzLCB3aGljaCB3b3VsZCBjcmVhdGUgbmVjZXNzYXJ5IERhdGFzb3VyY2Ugb2JqZWN0IGFjY29yZGluZyB0byB0aGUKICAqIHNwZWNpZmljYXRpb24uCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8yMwotICogQGF1dGhvcglCaW5vZCBQLkcKLSAqIEBzZWUJCWNvbS5zdW4uamRiY3JhLmNvbW1vbi5EYXRhU291cmNlU3BlYwotICogQHNlZQkJY29tLnN1bi5qZGJjcmEudXRpbC5NZXRob2RFeGNlY3V0b3IKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMjMKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCisgKiBAc2VlICAgICAgICBjb20uc3VuLmpkYmNyYS5jb21tb24uRGF0YVNvdXJjZVNwZWMKKyAqIEBzZWUgICAgICAgIGNvbS5zdW4uamRiY3JhLnV0aWwuTWV0aG9kRXhjZWN1dG9yCiAgKi8KIHB1YmxpYyBjbGFzcyBEYXRhU291cmNlT2JqZWN0QnVpbGRlciBpbXBsZW1lbnRzIGphdmEuaW8uU2VyaWFsaXphYmxlewogCiAgICAgcHJpdmF0ZSBEYXRhU291cmNlU3BlYyBzcGVjOwotICAgIAorCiAgICAgcHJpdmF0ZSBIYXNodGFibGUgZHJpdmVyUHJvcGVydGllcyA9IG51bGw7Ci0gICAgCi0gICAgcHJpdmF0ZSBNZXRob2RFeGVjdXRvciBleGVjdXRvciA9IG51bGw7ICAgIAotICAgIAorCisgICAgcHJpdmF0ZSBNZXRob2RFeGVjdXRvciBleGVjdXRvciA9IG51bGw7CisKICAgICBwcml2YXRlIHN0YXRpYyBMb2dnZXIgX2xvZ2dlcjsKICAgICBzdGF0aWMgewogICAgICAgICBfbG9nZ2VyID0gTG9nZ2VyLmdldEFub255bW91c0xvZ2dlcigpOwpAQCAtNTAsMTY3ICs1MCwxNjcgQEAKICAgICBwcml2YXRlIGJvb2xlYW4gZGVidWcgPSBmYWxzZTsKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3QgYSBEYXRhU291cmNlIE9iamVjdCBmcm9tIHRoZSBzcGVjLgotICAgICAqIAotICAgICAqIEBwYXJhbQlzcGVjCTxjb2RlPiBEYXRhU291cmNlU3BlYyA8L2NvZGU+IG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcGVjICAgIDxjb2RlPiBEYXRhU291cmNlU3BlYyA8L2NvZGU+IG9iamVjdC4KICAgICAgKi8KICAgICBwdWJsaWMgRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIoRGF0YVNvdXJjZVNwZWMgc3BlYykgewotICAgIAl0aGlzLnNwZWMgPSBzcGVjOwotICAgIAlleGVjdXRvciA9IG5ldyBNZXRob2RFeGVjdXRvcigpOworICAgICAgICB0aGlzLnNwZWMgPSBzcGVjOworICAgICAgICBleGVjdXRvciA9IG5ldyBNZXRob2RFeGVjdXRvcigpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdCB0aGUgRGF0YVNvdXJjZSBPYmplY3QgZnJvbSB0aGUgc3BlYy4KICAgICAgKgotICAgICAqIEByZXR1cm4JT2JqZWN0IGNvbnN0cnVjdGVkIHVzaW5nIHRoZSBEYXRhU291cmNlU3BlYy4KLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiBpZiB0aGUgY2xhc3MgaXMgbm90IGZvdW5kIG9yIHNvbWUgaXNzdWUgaW4gZXhlY3V0aW5nCi0gICAgICoJCXNvbWUgbWV0aG9kLgorICAgICAqIEByZXR1cm4gICAgT2JqZWN0IGNvbnN0cnVjdGVkIHVzaW5nIHRoZSBEYXRhU291cmNlU3BlYy4KKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiBpZiB0aGUgY2xhc3MgaXMgbm90IGZvdW5kIG9yIHNvbWUgaXNzdWUgaW4gZXhlY3V0aW5nCisgICAgICogICAgICAgIHNvbWUgbWV0aG9kLgogICAgICAqLwogICAgIHB1YmxpYyBPYmplY3QgY29uc3RydWN0RGF0YVNvdXJjZU9iamVjdCgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKLSAgICAJZHJpdmVyUHJvcGVydGllcyA9IHBhcnNlRHJpdmVyUHJvcGVydGllcyhzcGVjKTsKKyAgICAgICAgZHJpdmVyUHJvcGVydGllcyA9IHBhcnNlRHJpdmVyUHJvcGVydGllcyhzcGVjKTsKICAgICAgICAgT2JqZWN0IGRhdGFTb3VyY2VPYmplY3QgPSBnZXREYXRhU291cmNlT2JqZWN0KCk7CiAgICAgICAgIE1ldGhvZFtdIG1ldGhvZHMgPSBkYXRhU291cmNlT2JqZWN0LmdldENsYXNzKCkuZ2V0TWV0aG9kcygpOwogICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBtZXRob2RzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICBTdHJpbmcgbWV0aG9kTmFtZSA9IG1ldGhvZHNbaV0uZ2V0TmFtZSgpOwotCSAgICBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRVc2VyIikpewkgICAgCQotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVVNFUk5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFBhc3N3b3JkIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUEFTU1dPUkQpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldExvZ2luVGltZU91dCIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR0lOVElNRU9VVCksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TG9nV3JpdGVyIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HV1JJVEVSKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXREYXRhYmFzZU5hbWUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBQkFTRU5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldERhdGFTb3VyY2VOYW1lIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQVNPVVJDRU5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldERlc2NyaXB0aW9uIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVTQ1JJUFRJT04pLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXROZXR3b3JrUHJvdG9jb2wiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ORVRXT1JLUFJPVE9DT0wpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFBvcnROdW1iZXIiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QT1JUTlVNQkVSKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRSb2xlTmFtZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlJPTEVOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCQkgICAgCQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRTZXJ2ZXJOYW1lIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuU0VSVkVSTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNYXhTdGF0ZW1lbnRzIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUFYU1RBVEVNRU5UUyksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0SW5pdGlhbFBvb2xTaXplIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuSU5JVElBTFBPT0xTSVpFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNaW5Qb29sU2l6ZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1JTlBPT0xTSVpFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNYXhQb29sU2l6ZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1BWFBPT0xTSVpFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNYXhJZGxlVGltZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1BWElETEVUSU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRQcm9wZXJ0eUN5Y2xlIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUFJPUEVSVFlDWUNMRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAkKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKGRyaXZlclByb3BlcnRpZXMuY29udGFpbnNLZXkobWV0aG9kTmFtZS50b1VwcGVyQ2FzZSgpKSl7Ci0JICAgIAlWZWN0b3IgdmFsdWVzID0gKFZlY3RvcikgZHJpdmVyUHJvcGVydGllcy5nZXQobWV0aG9kTmFtZS50b1VwcGVyQ2FzZSgpKTsKLQkgICAgICAgIGV4ZWN1dG9yLnJ1bk1ldGhvZChtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QsIHZhbHVlcyk7Ci0JICAgIH0KKyAgICAgICAgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0VXNlciIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlVTRVJOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRQYXNzd29yZCIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBBU1NXT1JEKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRMb2dpblRpbWVPdXQiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dJTlRJTUVPVVQpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldExvZ1dyaXRlciIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR1dSSVRFUiksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0RGF0YWJhc2VOYW1lIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQUJBU0VOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXREYXRhU291cmNlTmFtZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXREZXNjcmlwdGlvbiIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFU0NSSVBUSU9OKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXROZXR3b3JrUHJvdG9jb2wiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ORVRXT1JLUFJPVE9DT0wpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFBvcnROdW1iZXIiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QT1JUTlVNQkVSKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRSb2xlTmFtZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlJPTEVOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRTZXJ2ZXJOYW1lIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuU0VSVkVSTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWF4U3RhdGVtZW50cyIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1BWFNUQVRFTUVOVFMpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldEluaXRpYWxQb29sU2l6ZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLklOSVRJQUxQT09MU0laRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWluUG9vbFNpemUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NSU5QT09MU0laRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWF4UG9vbFNpemUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NQVhQT09MU0laRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWF4SWRsZVRpbWUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NQVhJRExFVElNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0UHJvcGVydHlDeWNsZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBST1BFUlRZQ1lDTEUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChkcml2ZXJQcm9wZXJ0aWVzLmNvbnRhaW5zS2V5KG1ldGhvZE5hbWUudG9VcHBlckNhc2UoKSkpeworICAgICAgICAgICAgVmVjdG9yIHZhbHVlcyA9IChWZWN0b3IpIGRyaXZlclByb3BlcnRpZXMuZ2V0KG1ldGhvZE5hbWUudG9VcHBlckNhc2UoKSk7CisgICAgICAgICAgICBleGVjdXRvci5ydW5NZXRob2QobWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0LCB2YWx1ZXMpOworICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGRhdGFTb3VyY2VPYmplY3Q7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSBleHRyYSBkcml2ZXIgcHJvcGVydGllcyBmcm9tIHRoZSBEYXRhU291cmNlU3BlYyBvYmplY3QgYW5kCiAgICAgICogcGFyc2UgdGhlbSB0byBhIHNldCBvZiBtZXRob2ROYW1lIGFuZCBwYXJhbWV0ZXJzLiBQcmVwYXJlIGEgaGFzaHRhYmxlCiAgICAgICogY29udGFpbmluZyB0aGVzZSBkZXRhaWxzIGFuZCByZXR1cm4uCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3BlYwk8Y29kZT4gRGF0YVNvdXJjZVNwZWMgPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHJldHVybglIYXNodGFibGUgY29udGFpbmluZyBtZXRob2QgbmFtZXMgYW5kIHBhcmFtZXRlcnMsCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglJZiBkZWxpbWl0ZXIgaXMgbm90IHByb3ZpZGVkIGFuZCBwcm9wZXJ0eSBzdHJpbmcKLSAgICAgKgkJCQkJaXMgbm90IG51bGwuCisgICAgICogQHBhcmFtICAgIHNwZWMgICAgPGNvZGU+IERhdGFTb3VyY2VTcGVjIDwvY29kZT4gb2JqZWN0LgorICAgICAqIEByZXR1cm4gICAgSGFzaHRhYmxlIGNvbnRhaW5pbmcgbWV0aG9kIG5hbWVzIGFuZCBwYXJhbWV0ZXJzLAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgSWYgZGVsaW1pdGVyIGlzIG5vdCBwcm92aWRlZCBhbmQgcHJvcGVydHkgc3RyaW5nCisgICAgICogICAgICAgICAgICAgICAgICAgIGlzIG5vdCBudWxsLgogICAgICAqLwogICAgIHByaXZhdGUgSGFzaHRhYmxlIHBhcnNlRHJpdmVyUHJvcGVydGllcyhEYXRhU291cmNlU3BlYyBzcGVjKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb257Ci0gICAgCVN0cmluZyBkZWxpbSA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUik7CisgICAgICAgIFN0cmluZyBkZWxpbSA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUik7CiAKICAgICAgICAgU3RyaW5nIHByb3AgPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EUklWRVJQUk9QRVJUSUVTKTsKLQlpZiAoIHByb3AgPT0gbnVsbCB8fCBwcm9wLnRyaW0oKS5lcXVhbHMoIiIpKSB7Ci0JICAgIHJldHVybiBuZXcgSGFzaHRhYmxlKCk7Ci0JfSBlbHNlIGlmIChkZWxpbSA9PSBudWxsIHx8IGRlbGltLmVxdWFscygiIikpIHsKLQkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uICgiRGVsaW1pdGVyIGlzIG5vdCBwcm92aWRlZCBpbiB0aGUgY29uZmlndXJhdGlvbiIpOwotCX0KLQkKLQlIYXNodGFibGUgcHJvcGVydGllcyA9IG5ldyBIYXNodGFibGUoKTsKLQlkZWxpbSA9IGRlbGltLnRyaW0oKTsJCi0JU3RyaW5nIHNlcCA9IGRlbGltK2RlbGltOwotCWludCBzZXBMZW4gPSBzZXAubGVuZ3RoKCk7Ci0JU3RyaW5nIGNhY2hlID0gcHJvcDsKLQlWZWN0b3IgbWV0aG9kcyA9IG5ldyBWZWN0b3IoKTsKLQkKLQl3aGlsZSAoY2FjaGUuaW5kZXhPZihzZXApICE9IC0xKSB7Ci0JICAgIGludCBpbmRleCA9IGNhY2hlLmluZGV4T2Yoc2VwKTsKLQkgICAgU3RyaW5nIG5hbWUgPSBjYWNoZS5zdWJzdHJpbmcoMCxpbmRleCk7Ci0JICAgIGlmIChuYW1lLnRyaW0oKSAhPSAiIikgewotCSAgICAgICAgbWV0aG9kcy5hZGQobmFtZSk7Ci0JICAgIAljYWNoZSA9IGNhY2hlLnN1YnN0cmluZyhpbmRleCtzZXBMZW4pOwotCSAgICB9Ci0JfQotCQotICAgIAlFbnVtZXJhdGlvbiBhbGxNZXRob2RzID0gbWV0aG9kcy5lbGVtZW50cygpOwotICAgIAl3aGlsZSAoYWxsTWV0aG9kcy5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgIAkgICAgU3RyaW5nIG9uZU1ldGhvZCA9IChTdHJpbmcpIGFsbE1ldGhvZHMubmV4dEVsZW1lbnQoKTsgICAgCSAgICAKLSAgICAJICAgIGlmICghb25lTWV0aG9kLnRyaW0oKS5lcXVhbHMoIiIpKSB7Ci0gICAgCSAgICAJU3RyaW5nIG1ldGhvZE5hbWUgPSBudWxsOwotICAgIAkgICAgCVZlY3RvciBwYXJtcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAJICAgIAlTdHJpbmdUb2tlbml6ZXIgbWV0aG9kRGV0YWlscyA9IG5ldyBTdHJpbmdUb2tlbml6ZXIob25lTWV0aG9kLGRlbGltKTsKLQkJZm9yIChpbnQgaT0wOyBtZXRob2REZXRhaWxzLmhhc01vcmVUb2tlbnMoKTtpKysgKSB7Ci0JCSAgICBTdHJpbmcgdG9rZW4gPSAoU3RyaW5nKSBtZXRob2REZXRhaWxzLm5leHRUb2tlbigpOwotCQkgICAgaWYgKGk9PTApIHsKLQkJICAgIAltZXRob2ROYW1lID0gdG9rZW4udG9VcHBlckNhc2UoKTsKLQkJICAgIH0gZWxzZSB7Ci0JCSAgICAJcGFybXMuYWRkKHRva2VuKTsJCSAgICAJCi0JCSAgICB9Ci0JCX0KLQkJcHJvcGVydGllcy5wdXQobWV0aG9kTmFtZSxwYXJtcyk7Ci0gICAgCSAgICB9ICAgIAkgICAgCi0gICAgCX0KLSAgICAJcmV0dXJuIHByb3BlcnRpZXM7CisgICAgaWYgKCBwcm9wID09IG51bGwgfHwgcHJvcC50cmltKCkuZXF1YWxzKCIiKSkgeworICAgICAgICByZXR1cm4gbmV3IEhhc2h0YWJsZSgpOworICAgIH0gZWxzZSBpZiAoZGVsaW0gPT0gbnVsbCB8fCBkZWxpbS5lcXVhbHMoIiIpKSB7CisgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbiAoIkRlbGltaXRlciBpcyBub3QgcHJvdmlkZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24iKTsKICAgICB9Ci0gICAgCisKKyAgICBIYXNodGFibGUgcHJvcGVydGllcyA9IG5ldyBIYXNodGFibGUoKTsKKyAgICBkZWxpbSA9IGRlbGltLnRyaW0oKTsKKyAgICBTdHJpbmcgc2VwID0gZGVsaW0rZGVsaW07CisgICAgaW50IHNlcExlbiA9IHNlcC5sZW5ndGgoKTsKKyAgICBTdHJpbmcgY2FjaGUgPSBwcm9wOworICAgIFZlY3RvciBtZXRob2RzID0gbmV3IFZlY3RvcigpOworCisgICAgd2hpbGUgKGNhY2hlLmluZGV4T2Yoc2VwKSAhPSAtMSkgeworICAgICAgICBpbnQgaW5kZXggPSBjYWNoZS5pbmRleE9mKHNlcCk7CisgICAgICAgIFN0cmluZyBuYW1lID0gY2FjaGUuc3Vic3RyaW5nKDAsaW5kZXgpOworICAgICAgICBpZiAobmFtZS50cmltKCkgIT0gIiIpIHsKKyAgICAgICAgICAgIG1ldGhvZHMuYWRkKG5hbWUpOworICAgICAgICAgICAgY2FjaGUgPSBjYWNoZS5zdWJzdHJpbmcoaW5kZXgrc2VwTGVuKTsKKyAgICAgICAgfQorICAgIH0KKworICAgICAgICBFbnVtZXJhdGlvbiBhbGxNZXRob2RzID0gbWV0aG9kcy5lbGVtZW50cygpOworICAgICAgICB3aGlsZSAoYWxsTWV0aG9kcy5oYXNNb3JlRWxlbWVudHMoKSkgeworICAgICAgICAgICAgU3RyaW5nIG9uZU1ldGhvZCA9IChTdHJpbmcpIGFsbE1ldGhvZHMubmV4dEVsZW1lbnQoKTsKKyAgICAgICAgICAgIGlmICghb25lTWV0aG9kLnRyaW0oKS5lcXVhbHMoIiIpKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIG1ldGhvZE5hbWUgPSBudWxsOworICAgICAgICAgICAgICAgIFZlY3RvciBwYXJtcyA9IG5ldyBWZWN0b3IoKTsKKyAgICAgICAgICAgICAgICBTdHJpbmdUb2tlbml6ZXIgbWV0aG9kRGV0YWlscyA9IG5ldyBTdHJpbmdUb2tlbml6ZXIob25lTWV0aG9kLGRlbGltKTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBtZXRob2REZXRhaWxzLmhhc01vcmVUb2tlbnMoKTtpKysgKSB7CisgICAgICAgICAgICBTdHJpbmcgdG9rZW4gPSAoU3RyaW5nKSBtZXRob2REZXRhaWxzLm5leHRUb2tlbigpOworICAgICAgICAgICAgaWYgKGk9PTApIHsKKyAgICAgICAgICAgICAgICBtZXRob2ROYW1lID0gdG9rZW4udG9VcHBlckNhc2UoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcGFybXMuYWRkKHRva2VuKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBwcm9wZXJ0aWVzLnB1dChtZXRob2ROYW1lLHBhcm1zKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcHJvcGVydGllczsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgRGF0YXNvdXJjZSBvYmplY3QgYWNjb3JkaW5nIHRvIHRoZSBzcGVjLgogICAgICAqCi0gICAgICogQHJldHVybglJbml0aWFsIERhdGFTb3VyY2UgT2JqZWN0IGluc3RhbmNlLgotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+IElmIGNsYXNzIG5hbWUgaXMgd3Jvbmcgb3IgY2xhc3NwYXRoIGlzIG5vdCBzZXQKLSAgICAgKgkJcHJvcGVybHkuCisgICAgICogQHJldHVybiAgICBJbml0aWFsIERhdGFTb3VyY2UgT2JqZWN0IGluc3RhbmNlLgorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+IElmIGNsYXNzIG5hbWUgaXMgd3Jvbmcgb3IgY2xhc3NwYXRoIGlzIG5vdCBzZXQKKyAgICAgKiAgICAgICAgcHJvcGVybHkuCiAgICAgICovCiAgICAgcHJpdmF0ZSBPYmplY3QgZ2V0RGF0YVNvdXJjZU9iamVjdCgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKLSAgICAJU3RyaW5nIGNsYXNzTmFtZSA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNMQVNTTkFNRSk7Ci0gICAgICAgIHRyeSB7ICAgICAgICAgICAgCisgICAgICAgIFN0cmluZyBjbGFzc05hbWUgPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DTEFTU05BTUUpOworICAgICAgICB0cnkgewogICAgICAgICAgICAgQ2xhc3MgZGF0YVNvdXJjZUNsYXNzID0gQ2xhc3MuZm9yTmFtZShjbGFzc05hbWUpOwogICAgICAgICAgICAgT2JqZWN0IGRhdGFTb3VyY2VPYmplY3QgPSBkYXRhU291cmNlQ2xhc3MubmV3SW5zdGFuY2UoKTsKICAgICAgICAgICAgIHJldHVybiBkYXRhU291cmNlT2JqZWN0OwogICAgICAgICB9IGNhdGNoKENsYXNzTm90Rm91bmRFeGNlcHRpb24gY2ZuZSl7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2NuZmVfZHMiLCBjZm5lKTsKLQkKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfY25mZV9kcyIsIGNmbmUpOworCiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkNsYXNzIE5hbWUgaXMgd3Jvbmcgb3IgQ2xhc3MgcGF0aCBpcyBub3Qgc2V0IGZvciA6IiArIGNsYXNzTmFtZSk7CiAgICAgICAgIH0gY2F0Y2goSW5zdGFudGlhdGlvbkV4Y2VwdGlvbiBjZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19pbnN0IiwgY2xhc3NOYW1lKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfaW5zdCIsIGNsYXNzTmFtZSk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkVycm9yIGluIGluc3RhbnRpYXRpbmciICsgY2xhc3NOYW1lKTsKICAgICAgICAgfSBjYXRjaChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGNlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2FjY19pbnN0IiwgY2xhc3NOYW1lKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfYWNjX2luc3QiLCBjbGFzc05hbWUpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgRXJyb3IgaW4gaW5zdGFudGlhdGluZyIgKyBjbGFzc05hbWUpOwogICAgICAgICB9CiAgICAgfQotICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlU3BlYy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlU3BlYy5qYXZhCmluZGV4IGVmNmM0YzkuLjNkYzE1NGQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZVNwZWMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VTcGVjLmphdmEKQEAgLTE5LDkyICsxOSw5MiBAQAogaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7CiAKIC8qKgotICogRW5jYXBzdWxhdGUgdGhlIERhdGFTb3VyY2Ugb2JqZWN0IGRldGFpbHMgb2J0YWluZWQgZnJvbSAKKyAqIEVuY2Fwc3VsYXRlIHRoZSBEYXRhU291cmNlIG9iamVjdCBkZXRhaWxzIG9idGFpbmVkIGZyb20KICAqIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzIzCi0gKiBAYXV0aG9yCUJpbm9kIFAuRworICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8yMworICogQGF1dGhvciAgICBCaW5vZCBQLkcKICAqLwogcHVibGljIGNsYXNzIERhdGFTb3VyY2VTcGVjIGltcGxlbWVudHMgamF2YS5pby5TZXJpYWxpemFibGV7CiAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVU0VSTkFNRQkJCQk9IDE7ICAgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBBU1NXT1JECQkJCT0gMjsgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVSTAkJCQkJPSAzOyAgCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTE9HSU5USU1FT1VUCQkJPSA0OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExPR1dSSVRFUgkJCQk9IDU7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREFUQUJBU0VOQU1FCQkJPSA2OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFTT1VSQ0VOQU1FCQkJPSA3OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFU0NSSVBUSU9OCQkJCT0gODsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBORVRXT1JLUFJPVE9DT0wJCQk9IDk7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUE9SVE5VTUJFUgkJCQk9IDEwOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJPTEVOQU1FCQkJCT0gMTE7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0VSVkVSTkFNRQkJCQk9IDEyOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWFNUQVRFTUVOVFMJCQk9IDEzOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOSVRJQUxQT09MU0laRQkJCT0gMTQ7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUlOUE9PTFNJWkUJCQkJPSAxNTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhQT09MU0laRQkJCQk9IDE2OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWElETEVUSU1FCQkJCT0gMTc7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUFJPUEVSVFlDWUNMRQkJCT0gMTg7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRFJJVkVSUFJPUEVSVElFUwkJCT0gMTk7ICAgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENMQVNTTkFNRQkJCQk9IDIwOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFTElNSVRFUgkJCQk9IDIxOwotICAgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFhBREFUQVNPVVJDRQkJCT0gMjI7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREFUQVNPVVJDRQkJCQk9IDIzOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTk5FQ1RJT05QT09MREFUQVNPVVJDRQkJPSAyNDsKLSAgICAgIAotICAgIC8vR0pDSU5UICAgICAgCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OTkVDVElPTlZBTElEQVRJT05SRVFVSVJFRAk9IDI1OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFZBTElEQVRJT05NRVRIT0QJCQk9IDI2OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFZBTElEQVRJT05UQUJMRU5BTUUJCQk9IDI3OwotICAgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRSQU5TQUNUSU9OSVNPTEFUSU9OCQk9IDI4OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdVQVJBTlRFRUlTT0xBVElPTkxFVkVMCQk9IDI5OwotICAgICAgICAgICAgCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVVNFUk5BTUUgICAgICAgICAgICAgICAgPSAxOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBBU1NXT1JEICAgICAgICAgICAgICAgID0gMjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVUkwgICAgICAgICAgICAgICAgICAgID0gMzsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMT0dJTlRJTUVPVVQgICAgICAgICAgICA9IDQ7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTE9HV1JJVEVSICAgICAgICAgICAgICAgID0gNTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQVRBQkFTRU5BTUUgICAgICAgICAgICA9IDY7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREFUQVNPVVJDRU5BTUUgICAgICAgICAgICA9IDc7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgPSA4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5FVFdPUktQUk9UT0NPTCAgICAgICAgICAgID0gOTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQT1JUTlVNQkVSICAgICAgICAgICAgICAgID0gMTA7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUk9MRU5BTUUgICAgICAgICAgICAgICAgPSAxMTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTRVJWRVJOQU1FICAgICAgICAgICAgICAgID0gMTI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYU1RBVEVNRU5UUyAgICAgICAgICAgID0gMTM7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5JVElBTFBPT0xTSVpFICAgICAgICAgICAgPSAxNDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNSU5QT09MU0laRSAgICAgICAgICAgICAgICA9IDE1OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWFBPT0xTSVpFICAgICAgICAgICAgICAgID0gMTY7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYSURMRVRJTUUgICAgICAgICAgICAgICAgPSAxNzsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQUk9QRVJUWUNZQ0xFICAgICAgICAgICAgPSAxODsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEUklWRVJQUk9QRVJUSUVTICAgICAgICAgICAgPSAxOTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDTEFTU05BTUUgICAgICAgICAgICAgICAgPSAyMDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERUxJTUlURVIgICAgICAgICAgICAgICAgPSAyMTsKKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFhBREFUQVNPVVJDRSAgICAgICAgICAgID0gMjI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREFUQVNPVVJDRSAgICAgICAgICAgICAgICA9IDIzOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTk5FQ1RJT05QT09MREFUQVNPVVJDRSAgICAgICAgPSAyNDsKKworICAgIC8vR0pDSU5UCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OTkVDVElPTlZBTElEQVRJT05SRVFVSVJFRCAgICA9IDI1OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFZBTElEQVRJT05NRVRIT0QgICAgICAgICAgICA9IDI2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFZBTElEQVRJT05UQUJMRU5BTUUgICAgICAgICAgICA9IDI3OworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVFJBTlNBQ1RJT05JU09MQVRJT04gICAgICAgID0gMjg7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwgICAgICAgID0gMjk7CisKICAgICBwcml2YXRlIEhhc2h0YWJsZSBkZXRhaWxzID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0IHRoZSBwcm9wZXJ0eS4KICAgICAgKgotICAgICAqIEBwYXJhbQlwcm9wZXJ0eQlQcm9wZXJ0eSBOYW1lIHRvIGJlIHNldC4KLSAgICAgKiBAcGFyYW0JdmFsdWUJCVZhbHVlIG9mIHByb3BlcnR5IHRvIGJlIHNldC4KKyAgICAgKiBAcGFyYW0gICAgcHJvcGVydHkgICAgUHJvcGVydHkgTmFtZSB0byBiZSBzZXQuCisgICAgICogQHBhcmFtICAgIHZhbHVlICAgICAgICBWYWx1ZSBvZiBwcm9wZXJ0eSB0byBiZSBzZXQuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RGV0YWlsKGludCBwcm9wZXJ0eSwgU3RyaW5nIHZhbHVlKSB7Ci0gICAgCWRldGFpbHMucHV0KG5ldyBJbnRlZ2VyKHByb3BlcnR5KSx2YWx1ZSk7CisgICAgICAgIGRldGFpbHMucHV0KG5ldyBJbnRlZ2VyKHByb3BlcnR5KSx2YWx1ZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSB2YWx1ZSBvZiBwcm9wZXJ0eQogICAgICAqCi0gICAgICogQHJldHVybglWYWx1ZSBvZiB0aGUgcHJvcGVydHkuCisgICAgICogQHJldHVybiAgICBWYWx1ZSBvZiB0aGUgcHJvcGVydHkuCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXREZXRhaWwoaW50IHByb3BlcnR5KSB7Ci0gICAgCWlmIChkZXRhaWxzLmNvbnRhaW5zS2V5KG5ldyBJbnRlZ2VyKHByb3BlcnR5KSkpIHsKLSAgICAJICAgIHJldHVybiAoU3RyaW5nKSBkZXRhaWxzLmdldChuZXcgSW50ZWdlcihwcm9wZXJ0eSkpOwotICAgIAl9IGVsc2UgewotICAgIAkgICAgcmV0dXJuIG51bGw7Ci0gICAgCX0gICAgCQorICAgICAgICBpZiAoZGV0YWlscy5jb250YWluc0tleShuZXcgSW50ZWdlcihwcm9wZXJ0eSkpKSB7CisgICAgICAgICAgICByZXR1cm4gKFN0cmluZykgZGV0YWlscy5nZXQobmV3IEludGVnZXIocHJvcGVydHkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2hlY2tzIHdoZXRoZXIgdHdvIDxjb2RlPkRhdGFTb3VyY2VTcGVjPC9jb2RlPiBvYmplY3RzCiAgICAgICogYXJlIGVxdWFsIG9yIG5vdC4KICAgICAgKgotICAgICAqIEBwYXJhbQlvYmoJSW5zdGFuY2Ugb2YgPGNvZGU+RGF0YVNvdXJjZVNwZWM8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgb2JqICAgIEluc3RhbmNlIG9mIDxjb2RlPkRhdGFTb3VyY2VTcGVjPC9jb2RlPiBvYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmopIHsKLSAgICAJaWYgKG9iaiBpbnN0YW5jZW9mIERhdGFTb3VyY2VTcGVjKSB7Ci0gICAgCSAgICByZXR1cm4gdGhpcy5kZXRhaWxzLmVxdWFscygoKERhdGFTb3VyY2VTcGVjKW9iaikuZGV0YWlscyk7Ci0gICAgCX0KLSAgICAJcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgRGF0YVNvdXJjZVNwZWMpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmRldGFpbHMuZXF1YWxzKCgoRGF0YVNvdXJjZVNwZWMpb2JqKS5kZXRhaWxzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBoYXNoQ29kZSBvZiB0aGlzIDxjb2RlPkRhdGFTb3VyY2VTcGVjPC9jb2RlPiBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWhhc2hDb2RlIG9mIHRoaXMgb2JqZWN0LgorICAgICAqIEByZXR1cm4gICAgaGFzaENvZGUgb2YgdGhpcyBvYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIGludCBoYXNoQ29kZSgpIHsKLSAgICAJcmV0dXJuIHRoaXMuZGV0YWlscy5oYXNoQ29kZSgpOwotICAgIH0gICAgCisgICAgICAgIHJldHVybiB0aGlzLmRldGFpbHMuaGFzaENvZGUoKTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vYnVpbGQueG1sCmluZGV4IGVmNDM4ZmMuLjNiNGZhZWIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vYnVpbGQueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxwcm9qZWN0IG5hbWU9ImpkYmNfY29ubmVjdG9yIiBiYXNlZGlyPSIuIiBkZWZhdWx0PSJidWlsZCI+CiAgIDxwcm9wZXJ0eSBuYW1lPSJwa2cuZGlyIiB2YWx1ZT0iY29tL3N1bi9namMvY29tbW9uIi8+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iPgogICAgIDxhbnQgYW50ZmlsZT0iYnVpbGQueG1sIiBkaXI9IiR7Z2pjLmhvbWV9L2JpbiIgdGFyZ2V0PSJjbGVhbiIvPgogICA8L3RhcmdldD4KQEAgLTM2LDEzICszNiwxMyBAQAogCiAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZTEzIiBkZXBlbmRzPSJjb21waWxlIi8+CiAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZTE0IiBkZXBlbmRzPSJjb21waWxlIi8+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0icGFja2FnZTEzIiBkZXBlbmRzPSJwYWNrYWdlIi8+CiAgIDx0YXJnZXQgbmFtZT0icGFja2FnZTE0IiBkZXBlbmRzPSJwYWNrYWdlIi8+CiAKICAgPHRhcmdldCBuYW1lPSJidWlsZDEzIiBkZXBlbmRzPSJjb21waWxlMTMsIHBhY2thZ2UxMyIvPgogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkMTQiIGRlcGVuZHM9ImNvbXBpbGUxNCwgcGFja2FnZTE0Ii8+Ci0gICAgCisKICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iYnVpbGQxMywgYnVpbGQxNCIvPgogCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9Db25uZWN0aW9uSG9sZGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9Db25uZWN0aW9uSG9sZGVyLmphdmEKaW5kZXggYmZjYmYwYi4uNGViZWQ2ZSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvQ29ubmVjdGlvbkhvbGRlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L0Nvbm5lY3Rpb25Ib2xkZXIuamF2YQpAQCAtMjQsMjQgKzI0LDI0IEBACiBpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3I7CiAKIC8qKgotICogSG9sZHMgdGhlIGphdmEuc3FsLkNvbm5lY3Rpb24gb2JqZWN0LCB3aGljaCBpcyB0byBiZSAKKyAqIEhvbGRzIHRoZSBqYXZhLnNxbC5Db25uZWN0aW9uIG9iamVjdCwgd2hpY2ggaXMgdG8gYmUKICAqIHBhc3NlZCB0byB0aGUgYXBwbGljYXRpb24gcHJvZ3JhbS4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzIzCi0gKiBAYXV0aG9yCUJpbm9kIFAuRworICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8yMworICogQGF1dGhvciAgICBCaW5vZCBQLkcKICAqLwotcHVibGljIGNsYXNzIENvbm5lY3Rpb25Ib2xkZXIgaW1wbGVtZW50cyBDb25uZWN0aW9ueyAKK3B1YmxpYyBjbGFzcyBDb25uZWN0aW9uSG9sZGVyIGltcGxlbWVudHMgQ29ubmVjdGlvbnsKIAogICAgIHByaXZhdGUgQ29ubmVjdGlvbiBjb247Ci0gICAgCisKICAgICBwcml2YXRlIE1hbmFnZWRDb25uZWN0aW9uIG1jOwotICAgIAotICAgIHByaXZhdGUgYm9vbGVhbiB3cmFwcGVkQWxyZWFkeSA9IGZhbHNlOyAgICAKLSAgICAKKworICAgIHByaXZhdGUgYm9vbGVhbiB3cmFwcGVkQWxyZWFkeSA9IGZhbHNlOworCiAgICAgcHJpdmF0ZSBib29sZWFuIGlzQ2xvc2VkID0gZmFsc2U7Ci0gICAgCisKICAgICBwcml2YXRlIGJvb2xlYW4gdmFsaWQgPSB0cnVlOwotICAgIAorCiAgICAgcHJpdmF0ZSBib29sZWFuIGFjdGl2ZSA9IGZhbHNlOwogICAgIC8qKgogICAgICAqIFRoZSBhY3RpdmUgZmxhZyBpcyBmYWxzZSB3aGVuIHRoZSBjb25uZWN0aW9uIGhhbmRsZSBpcwpAQCAtNTMsMjE5ICs1MywyMTkgQEAKICAgICAgKiBmdW5jdGlvbiwgdGhlIGFib3ZlIG1ldGhvZCBpbnZvY2F0aW9uIHN1Y2NlZWRzOyBvdGhlcndpc2UKICAgICAgKiBhbiBleGNlcHRpb24gaXMgdGhyb3duLgogICAgICAqLwotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0cyBhIENvbm5lY3Rpb24gaG9sZGVyLgotICAgICAqIAotICAgICAqIEBwYXJhbQljb24JPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgorICAgICAqCisgICAgICogQHBhcmFtICAgIGNvbiAgICA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIENvbm5lY3Rpb25Ib2xkZXIoQ29ubmVjdGlvbiBjb24sIE1hbmFnZWRDb25uZWN0aW9uIG1jKSB7CiAgICAgICAgIHRoaXMuY29uID0gY29uOwogICAgICAgICB0aGlzLm1jICA9IG1jOwogICAgIH0KLSAgICAgICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSBhY3R1YWwgY29ubmVjdGlvbiBpbiB0aGlzIGhvbGRlciBvYmplY3QuCi0gICAgICogCi0gICAgICogQHJldHVybglDb25uZWN0aW9uIG9iamVjdC4KKyAgICAgKgorICAgICAqIEByZXR1cm4gICAgQ29ubmVjdGlvbiBvYmplY3QuCiAgICAgICovCiAgICAgQ29ubmVjdGlvbiBnZXRDb25uZWN0aW9uKCkgewotICAgIAlyZXR1cm4gY29uOworICAgICAgICByZXR1cm4gY29uOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCwgdGhlIGNvbm5lY3Rpb24gaXMgd3JhcHBlZCBhbHJlYWR5IG9yIG5vdC4KICAgICAgKgotICAgICAqIEBwYXJhbQl3cmFwRmxhZwkKKyAgICAgKiBAcGFyYW0gICAgd3JhcEZsYWcKICAgICAgKi8KICAgICB2b2lkIHdyYXBwZWQoYm9vbGVhbiB3cmFwRmxhZyl7CiAgICAgICAgIHRoaXMud3JhcHBlZEFscmVhZHkgPSB3cmFwRmxhZzsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHdoZXRoZXIgaXQgaXMgd3JhcHBlZCBhbHJlYWR5IG9yIG5vdC4KICAgICAgKgotICAgICAqIEByZXR1cm4Jd3JhcHBlZCBmbGFnLgorICAgICAqIEByZXR1cm4gICAgd3JhcHBlZCBmbGFnLgogICAgICAqLwogICAgIGJvb2xlYW4gaXNXcmFwcGVkKCl7CiAgICAgICAgIHJldHVybiB3cmFwcGVkQWxyZWFkeTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UgcmVzcG9uc2libGUKICAgICAgKiBmb3IgdGhpcyBjb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCisgICAgICogQHJldHVybiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICovCiAgICAgTWFuYWdlZENvbm5lY3Rpb24gZ2V0TWFuYWdlZENvbm5lY3Rpb24oKSB7CiAgICAgICAgIHJldHVybiBtYzsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXBsYWNlIHRoZSBhY3R1YWwgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IHdpdGggdGhlIG9uZQotICAgICAqIHN1cHBsaWVkLiBBbHNvIHJlcGxhY2UgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGxpbmsuICAgICAKKyAgICAgKiBzdXBwbGllZC4gQWxzbyByZXBsYWNlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBsaW5rLgogICAgICAqCi0gICAgICogQHBhcmFtCWNvbiA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHBhcmFtCW1jICA8Y29kZT4gTWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgY29uIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgbWMgIDxjb2RlPiBNYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgogICAgICAqLwogICAgIHZvaWQgYXNzb2NpYXRlQ29ubmVjdGlvbihDb25uZWN0aW9uIGNvbiwgTWFuYWdlZENvbm5lY3Rpb24gbWMpIHsKLSAgICAJdGhpcy5tYyA9IG1jOwotICAgIAl0aGlzLmNvbiA9IGNvbjsKKyAgICAgICAgdGhpcy5tYyA9IG1jOworICAgICAgICB0aGlzLmNvbiA9IGNvbjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDbGVhcnMgYWxsIHdhcm5pbmdzIHJlcG9ydGVkIGZvciB0aGUgdW5kZXJseWluZyBjb25uZWN0aW9uICBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGNsZWFyV2FybmluZ3MoKSB0aHJvd3MgU1FMRXhjZXB0aW9ueyAgICAKLQljaGVja1ZhbGlkaXR5KCk7CisgICAgcHVibGljIHZvaWQgY2xlYXJXYXJuaW5ncygpIHRocm93cyBTUUxFeGNlcHRpb257CisgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICBjb24uY2xlYXJXYXJuaW5ncygpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIENsb3NlcyB0aGUgbG9naWNhbCBjb25uZWN0aW9uLiAgICAKKyAgICAgKiBDbG9zZXMgdGhlIGxvZ2ljYWwgY29ubmVjdGlvbi4KICAgICAgKgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNsb3NlKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKICAgICAgICAgaXNDbG9zZWQgPSB0cnVlOwotICAgICAgICBtYy5jb25uZWN0aW9uQ2xvc2VkKG51bGwsIHRoaXMpOyAgICAgICAgCisgICAgICAgIG1jLmNvbm5lY3Rpb25DbG9zZWQobnVsbCwgdGhpcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogSW52YWxpZGF0ZXMgdGhpcyBvYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgaW52YWxpZGF0ZSgpIHsKLSAgICAJdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgdmFsaWQgPSBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDbG9zZXMgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaW52b2x2ZWQgaW4gdGhpcy4KICAgICAgKgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCi0gICAgdm9pZCBhY3R1YWxDbG9zZSgpIHRocm93cyBTUUxFeGNlcHRpb257ICAgIAorICAgIHZvaWQgYWN0dWFsQ2xvc2UoKSB0aHJvd3MgU1FMRXhjZXB0aW9uewogICAgICAgICBjb24uY2xvc2UoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb21taXQgdGhlIGNoYW5nZXMgaW4gdGhlIHVuZGVybHlpbmcgQ29ubmVjdGlvbi4KICAgICAgKgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgY29tbWl0KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLmNvbW1pdCgpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLmNvbW1pdCgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBzdGF0ZW1lbnQgZnJvbSB0aGUgdW5kZXJseWluZyBDb25uZWN0aW9uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgU3RhdGVtZW50IGNyZWF0ZVN0YXRlbWVudCgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICByZXR1cm4gY29uLmNyZWF0ZVN0YXRlbWVudCgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBzdGF0ZW1lbnQgZnJvbSB0aGUgdW5kZXJseWluZyBDb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHBhcmFtCXJlc3VsdFNldFR5cGUJVHlwZSBvZiB0aGUgUmVzdWx0U2V0Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldENvbmN1cnJlbmN5CVJlc3VsdFNldCBDb25jdXJyZW5jeS4KLSAgICAgKiBAcmV0dXJuCTxjb2RlPlN0YXRlbWVudDwvY29kZT4gb2JqZWN0LiAgICAgCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRUeXBlICAgIFR5cGUgb2YgdGhlIFJlc3VsdFNldAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRDb25jdXJyZW5jeSAgICBSZXN1bHRTZXQgQ29uY3VycmVuY3kuCisgICAgICogQHJldHVybiAgICA8Y29kZT5TdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFN0YXRlbWVudCBjcmVhdGVTdGF0ZW1lbnQoaW50IHJlc3VsdFNldFR5cGUsIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIHJldHVybiBjb24uY3JlYXRlU3RhdGVtZW50KHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5KTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgc3RhdGVtZW50IGZyb20gdGhlIHVuZGVybHlpbmcgQ29ubmVjdGlvbi4KICAgICAgKgotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRUeXBlCVR5cGUgb2YgdGhlIFJlc3VsdFNldAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRDb25jdXJyZW5jeQlSZXN1bHRTZXQgQ29uY3VycmVuY3kuCi0gICAgICogQHBhcmFtCXJlc3VsdFNldEhvbGRhYmlsaXR5CVJlc3VsdFNldCBIb2xkYWJpbGl0eS4gICAgIAotICAgICAqIEByZXR1cm4JPGNvZGU+U3RhdGVtZW50PC9jb2RlPiBvYmplY3QuIAotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAgICAgCisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldFR5cGUgICAgVHlwZSBvZiB0aGUgUmVzdWx0U2V0CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldENvbmN1cnJlbmN5ICAgIFJlc3VsdFNldCBDb25jdXJyZW5jeS4KKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0SG9sZGFiaWxpdHkgICAgUmVzdWx0U2V0IEhvbGRhYmlsaXR5LgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+U3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwotICAgIHB1YmxpYyBTdGF0ZW1lbnQgY3JlYXRlU3RhdGVtZW50KGludCByZXN1bHRTZXRUeXBlLCBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3ksIAotICAgIAkJCQkgICAgIGludCByZXN1bHRTZXRIb2xkYWJpbHR5KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAkJCQkgICAgIAorICAgIHB1YmxpYyBTdGF0ZW1lbnQgY3JlYXRlU3RhdGVtZW50KGludCByZXN1bHRTZXRUeXBlLCBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3ksCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdFNldEhvbGRhYmlsdHkpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgcmV0dXJuIGNvbi5jcmVhdGVTdGF0ZW1lbnQocmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3ksCi0gICAgICAgIAkJCSAgIHJlc3VsdFNldEhvbGRhYmlsdHkpOworICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRTZXRIb2xkYWJpbHR5KTsKICAgICB9Ci0gCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgYXV0by1jb21taXQgbW9kZSBmb3IgdGhlIHVuZGVybHlpbmcgPGNvZGU+IENvbm5lY3Rpb248L2NvZGU+LgogICAgICAqCiAgICAgICogQHJldHVybiBUaGUgY3VycmVudCBzdGF0ZSBvZiBjb25uZWN0aW9uJ3MgYXV0by1jb21taXQgbW9kZS4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGdldEF1dG9Db21taXQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLmdldEF1dG9Db21taXQoKTsKLSAgICB9ICAgCi0gCisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLmdldEF1dG9Db21taXQoKTsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIHVuZGVybHlpbmcgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0J3MgY2F0YWxvZyBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglDYXRhbG9nIE5hbWUuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEByZXR1cm4gICAgQ2F0YWxvZyBOYW1lLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldENhdGFsb2coKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgcmV0dXJuIGNvbi5nZXRDYXRhbG9nKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBjdXJyZW50IGhvbGRhYmlsaXR5IG9mIDxjb2RlPlJlc3VsdFNldDwvY29kZT4gb2JqZWN0cyBjcmVhdGVkCiAgICAgICogdXNpbmcgdGhpcyBjb25uZWN0aW9uIG9iamVjdC4KICAgICAgKgotICAgICAqIEByZXR1cm4JaG9sZGFiaWxpdHkgdmFsdWUuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEByZXR1cm4gICAgaG9sZGFiaWxpdHkgdmFsdWUuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0SG9sZGFiaWxpdHkoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4JY29uLmdldEhvbGRhYmlsaXR5KCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gICAgY29uLmdldEhvbGRhYmlsaXR5KCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSA8Y29kZT5EYXRhYmFzZU1ldGFEYXRhPC9jb2RlPm9iamVjdCBmcm9tIHRoZSB1bmRlcmx5aW5nCiAgICAgICogPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QuCiAgICAgICoKICAgICAgKiBAcmV0dXJuIDxjb2RlPkRhdGFiYXNlTWV0YURhdGE8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBEYXRhYmFzZU1ldGFEYXRhIGdldE1ldGFEYXRhKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5nZXRNZXRhRGF0YSgpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5nZXRNZXRhRGF0YSgpOwogICAgIH0KLSAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGlzIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCdzIGN1cnJlbnQgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsLgogICAgICAqCiAgICAgICogQHJldHVybiBUcmFuc2FjdGlvbiBsZXZlbAotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8gICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCiAgICAgcHVibGljIGludCBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICByZXR1cm4gY29uLmdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogUmV0cmlldmVzIHRoZSA8Y29kZT5NYXA8L2NvZGU+IG9iamVjdCBhc3NvY2lhdGVkIHdpdGggCisgICAgICogUmV0cmlldmVzIHRoZSA8Y29kZT5NYXA8L2NvZGU+IG9iamVjdCBhc3NvY2lhdGVkIHdpdGgKICAgICAgKiA8Y29kZT4gQ29ubmVjdGlvbjwvY29kZT4gT2JqZWN0LgogICAgICAqCi0gICAgICogQHJldHVybglUeXBlTWFwIHNldCBpbiB0aGlzIG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHJldHVybiAgICBUeXBlTWFwIHNldCBpbiB0aGlzIG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIE1hcCBnZXRUeXBlTWFwKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5nZXRUeXBlTWFwKCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLmdldFR5cGVNYXAoKTsKICAgICB9CiAKICAgICAvKioKQEAgLTI3MywxODQgKzI3MywxODQgQEAKICAgICAgKiA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCiAgICAgICoKICAgICAgKiBAcmV0dXJuIEZpcnN0IDxjb2RlPiBTUUxXYXJuaW5nPC9jb2RlPiBPYmplY3Qgb3IgbnVsbC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTUUxXYXJuaW5nIGdldFdhcm5pbmdzKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5nZXRXYXJuaW5ncygpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5nZXRXYXJuaW5ncygpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB3aGV0aGVyIHVuZGVybHlpbmcgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGlzIGNsb3NlZC4KICAgICAgKgotICAgICAqIEByZXR1cm4JdHJ1ZSBpZiA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaXMgY2xvc2VkLCBmYWxzZQotICAgICAqIAkJaWYgaXQgaXMgY2xvc2VkLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcmV0dXJuICAgIHRydWUgaWYgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGlzIGNsb3NlZCwgZmFsc2UKKyAgICAgKiAgICAgICAgIGlmIGl0IGlzIGNsb3NlZC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gaXNDbG9zZWQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLSAgICAJcmV0dXJuIGlzQ2xvc2VkOworICAgICAgICByZXR1cm4gaXNDbG9zZWQ7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHdoZXRoZXIgdGhpcyA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaXMgcmVhZC1vbmx5LgogICAgICAqCi0gICAgICogQHJldHVybgl0cnVlIGlmIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gaXMgcmVhZC1vbmx5LCBmYWxzZSBvdGhlci13aXNlCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEByZXR1cm4gICAgdHJ1ZSBpZiA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IGlzIHJlYWQtb25seSwgZmFsc2Ugb3RoZXItd2lzZQorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc1JlYWRPbmx5KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5pc1JlYWRPbmx5KCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLmlzUmVhZE9ubHkoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb252ZXJ0cyB0aGUgZ2l2ZW4gU1FMIHN0YXRlbWVudCBpbnRvIHRoZSBzeXN0ZW0ncyBuYXRpdmUgU1FMIGdyYW1tZXIuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBzdGF0ZW1lbnQgLCB0byBiZSBjb252ZXJ0ZWQuCi0gICAgICogQHJldHVybglDb252ZXJ0ZWQgU1FMIHN0cmluZy4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgc3RhdGVtZW50ICwgdG8gYmUgY29udmVydGVkLgorICAgICAqIEByZXR1cm4gICAgQ29udmVydGVkIFNRTCBzdHJpbmcuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgbmF0aXZlU1FMKFN0cmluZyBzcWwpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24ubmF0aXZlU1FMKHNxbCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLm5hdGl2ZVNRTChzcWwpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIGNhbGxpbmcgZGF0YWJhc2UKICAgICAgKiBzdG9yZWQgcHJvY2VkdXJlcy4KICAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAogICAgICAqIEByZXR1cm4gPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgQ2FsbGFibGVTdGF0ZW1lbnQgcHJlcGFyZUNhbGwoU3RyaW5nIHNxbCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlQ2FsbChzcWwpOwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBjYWxsaW5nIGRhdGFiYXNlCi0gICAgICogc3RvcmVkIHByb2NlZHVyZXMuCi0gICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0VHlwZQlUeXBlIG9mIHRoZSBSZXN1bHRTZXQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0Q29uY3VycmVuY3kJUmVzdWx0U2V0IENvbmN1cnJlbmN5LgotICAgICAqIEByZXR1cm4gPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLwotICAgIHB1YmxpYyBDYWxsYWJsZVN0YXRlbWVudCBwcmVwYXJlQ2FsbChTdHJpbmcgc3FsLGludCByZXN1bHRTZXRUeXBlLCAKLSAgICAJCQkJCWludCByZXN1bHRTZXRDb25jdXJyZW5jeSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAkJCQkJCi0gICAgCXJldHVybiBjb24ucHJlcGFyZUNhbGwoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSk7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIGNhbGxpbmcgZGF0YWJhc2UKLSAgICAgKiBzdG9yZWQgcHJvY2VkdXJlcy4KLSAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRUeXBlCVR5cGUgb2YgdGhlIFJlc3VsdFNldAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRDb25jdXJyZW5jeQlSZXN1bHRTZXQgQ29uY3VycmVuY3kuCi0gICAgICogQHBhcmFtCXJlc3VsdFNldEhvbGRhYmlsaXR5CVJlc3VsdFNldCBIb2xkYWJpbGl0eS4gICAgICAgICAgCi0gICAgICogQHJldHVybiA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovCi0gICAgcHVibGljIENhbGxhYmxlU3RhdGVtZW50IHByZXBhcmVDYWxsKFN0cmluZyBzcWwsIGludCByZXN1bHRTZXRUeXBlLCAKLSAgICAJCQkJCSBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3ksIAotICAgIAkJCQkJIGludCByZXN1bHRTZXRIb2xkYWJpbHR5KSB0aHJvd3MgU1FMRXhjZXB0aW9uewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCQkJCQkgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZUNhbGwoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSwKLSAgICAJCQkgICAgICAgcmVzdWx0U2V0SG9sZGFiaWx0eSk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVDYWxsKHNxbCk7CiAgICAgfQogCiAgICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZyAKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBjYWxsaW5nIGRhdGFiYXNlCisgICAgICogc3RvcmVkIHByb2NlZHVyZXMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0VHlwZSAgICBUeXBlIG9mIHRoZSBSZXN1bHRTZXQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0Q29uY3VycmVuY3kgICAgUmVzdWx0U2V0IENvbmN1cnJlbmN5LgorICAgICAqIEByZXR1cm4gPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBDYWxsYWJsZVN0YXRlbWVudCBwcmVwYXJlQ2FsbChTdHJpbmcgc3FsLGludCByZXN1bHRTZXRUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5KSB0aHJvd3MgU1FMRXhjZXB0aW9ueworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlQ2FsbChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBjYWxsaW5nIGRhdGFiYXNlCisgICAgICogc3RvcmVkIHByb2NlZHVyZXMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0VHlwZSAgICBUeXBlIG9mIHRoZSBSZXN1bHRTZXQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0Q29uY3VycmVuY3kgICAgUmVzdWx0U2V0IENvbmN1cnJlbmN5LgorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRIb2xkYWJpbGl0eSAgICBSZXN1bHRTZXQgSG9sZGFiaWxpdHkuCisgICAgICogQHJldHVybiA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCisgICAgcHVibGljIENhbGxhYmxlU3RhdGVtZW50IHByZXBhcmVDYWxsKFN0cmluZyBzcWwsIGludCByZXN1bHRTZXRUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0SG9sZGFiaWx0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZUNhbGwoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0U2V0SG9sZGFiaWx0eSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZwogICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQogICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CiAgICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCk7CiAgICAgfQotICAgIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcgCi0gICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCi0gICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JYXV0b0dlbmVyYXRlZEtleXMgYSBmbGFnIGluZGljYXRpbmcgQXV0b0dlbmVyYXRlZEtleXMgbmVlZCB0byBiZSByZXR1cm5lZC4KLSAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8KLSAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLCBpbnQgYXV0b0dlbmVyYXRlZEtleXMpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsYXV0b0dlbmVyYXRlZEtleXMpOwotICAgIH0gICAgCi0gICAgICAKLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nIAotICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQotICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50Ci0gICAgICogQHBhcmFtCWNvbHVtbkluZGV4ZXMgYW4gYXJyYXkgb2YgY29sdW1uIGluZGV4ZXMgaW5kaWNhdGluZyB0aGUgY29sdW1ucyB0aGF0IHNob3VsZCBiZQotICAgICAqCQlyZXR1cm5lZCBmcm9tIHRoZSBpbnNlcnRlZCByb3cgb3Igcm93cy4KLSAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8KLSAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLCBpbnRbXSBjb2x1bW5JbmRleGVzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLGNvbHVtbkluZGV4ZXMpOwotICAgIH0gICAgICAgICAgCi0gCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZyAKLSAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKLSAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRUeXBlCVR5cGUgb2YgdGhlIFJlc3VsdFNldAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRDb25jdXJyZW5jeQlSZXN1bHRTZXQgQ29uY3VycmVuY3kuCi0gICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovCi0gICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCxpbnQgcmVzdWx0U2V0VHlwZSwgCi0gICAgCQkJCQlpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3kpIHRocm93cyBTUUxFeGNlcHRpb257Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAJCQkJCQotICAgIAlyZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSk7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcgCi0gICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCi0gICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0VHlwZQlUeXBlIG9mIHRoZSBSZXN1bHRTZXQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0Q29uY3VycmVuY3kJUmVzdWx0U2V0IENvbmN1cnJlbmN5LgotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRIb2xkYWJpbGl0eQlSZXN1bHRTZXQgSG9sZGFiaWxpdHkuICAgICAgICAgIAotICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLwotICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludCByZXN1bHRTZXRUeXBlLCAKLSAgICAJCQkJCSBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3ksIAotICAgIAkJCQkJIGludCByZXN1bHRTZXRIb2xkYWJpbHR5KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAkJCQkJIAotICAgIAlyZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSwKLSAgICAJCQkJICAgIHJlc3VsdFNldEhvbGRhYmlsdHkpOwotICAgIH0gICAgICAgICAgIAogCiAgICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZyAKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nCiAgICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JY29sdW1uTmFtZXMgTmFtZSBvZiBib3VuZCBjb2x1bW5zLgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICBhdXRvR2VuZXJhdGVkS2V5cyBhIGZsYWcgaW5kaWNhdGluZyBBdXRvR2VuZXJhdGVkS2V5cyBuZWVkIHRvIGJlIHJldHVybmVkLgogICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLCBpbnQgYXV0b0dlbmVyYXRlZEtleXMpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCxhdXRvR2VuZXJhdGVkS2V5cyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZworICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIGNvbHVtbkluZGV4ZXMgYW4gYXJyYXkgb2YgY29sdW1uIGluZGV4ZXMgaW5kaWNhdGluZyB0aGUgY29sdW1ucyB0aGF0IHNob3VsZCBiZQorICAgICAqICAgICAgICByZXR1cm5lZCBmcm9tIHRoZSBpbnNlcnRlZCByb3cgb3Igcm93cy4KKyAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLCBpbnRbXSBjb2x1bW5JbmRleGVzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsY29sdW1uSW5kZXhlcyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZworICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldFR5cGUgICAgVHlwZSBvZiB0aGUgUmVzdWx0U2V0CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldENvbmN1cnJlbmN5ICAgIFJlc3VsdFNldCBDb25jdXJyZW5jeS4KKyAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLGludCByZXN1bHRTZXRUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5KSB0aHJvd3MgU1FMRXhjZXB0aW9ueworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3kpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcKKyAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRUeXBlICAgIFR5cGUgb2YgdGhlIFJlc3VsdFNldAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRDb25jdXJyZW5jeSAgICBSZXN1bHRTZXQgQ29uY3VycmVuY3kuCisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldEhvbGRhYmlsaXR5ICAgIFJlc3VsdFNldCBIb2xkYWJpbGl0eS4KKyAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLCBpbnQgcmVzdWx0U2V0VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3ksCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdFNldEhvbGRhYmlsdHkpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3ksCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRTZXRIb2xkYWJpbHR5KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nCisgICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgY29sdW1uTmFtZXMgTmFtZSBvZiBib3VuZCBjb2x1bW5zLgorICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIFN0cmluZ1tdIGNvbHVtbk5hbWVzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLGNvbHVtbk5hbWVzKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsY29sdW1uTmFtZXMpOwogICAgIH0KIAogICAgIHB1YmxpYyBDbG9iIGNyZWF0ZUNsb2IoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKQEAgLTUwMCwxNjIgKzUwMCwxNjIgQEAKICAgICAvKioKICAgICAgKiBSZW1vdmVzIHRoZSBnaXZlbiA8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdCBmcm9tIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLgogICAgICAqCi0gICAgICogQHBhcmFtCXNhdmVwb2ludAk8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdAotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgc2F2ZXBvaW50ICAgIDxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0CisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJlbGVhc2VTYXZlcG9pbnQoU2F2ZXBvaW50IHNhdmVwb2ludCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnJlbGVhc2VTYXZlcG9pbnQoc2F2ZXBvaW50KTsKLSAgICB9IAotICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnJlbGVhc2VTYXZlcG9pbnQoc2F2ZXBvaW50KTsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBSb2xscyBiYWNrIHRoZSBjaGFuZ2VzIG1hZGUgaW4gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24uCiAgICAgICoKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovICAgICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCiAgICAgcHVibGljIHZvaWQgcm9sbGJhY2soKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24ucm9sbGJhY2soKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5yb2xsYmFjaygpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJvbGxzIGJhY2sgdGhlIGNoYW5nZXMgbWFkZSBhZnRlciB0aGUgc2F2ZXBvaW50LgogICAgICAqCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLyAgICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJvbGxiYWNrKFNhdmVwb2ludCBzYXZlcG9pbnQpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5yb2xsYmFjayhzYXZlcG9pbnQpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnJvbGxiYWNrKHNhdmVwb2ludCk7CiAgICAgfQotICAgICAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGF1dG8tY29tbW1pdCBtb2RlIG9mIHRoZSA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JYXV0b0NvbW1pdCBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgdGhlIGF1dG8tY29tbWl0IG1vZGUuICAgICAKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIGF1dG9Db21taXQgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIHRoZSBhdXRvLWNvbW1pdCBtb2RlLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRBdXRvQ29tbWl0KGJvb2xlYW4gYXV0b0NvbW1pdCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnNldEF1dG9Db21taXQoYXV0b0NvbW1pdCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24uc2V0QXV0b0NvbW1pdChhdXRvQ29tbWl0KTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBjYXRhbG9nIG5hbWUgdG8gdGhlIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdAogICAgICAqCi0gICAgICogQHBhcmFtCWNhdGFsb2cJQ2F0YWxvZyBuYW1lLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgY2F0YWxvZyAgICBDYXRhbG9nIG5hbWUuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldENhdGFsb2coU3RyaW5nIGNhdGFsb2cpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5zZXRDYXRhbG9nKGNhdGFsb2cpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnNldENhdGFsb2coY2F0YWxvZyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogU2V0cyB0aGUgaG9sZGFiaWxpdHkgb2YgPGNvZGU+UmVzdWx0U2V0PC9jb2RlPiBvYmplY3RzIGNyZWF0ZWQgCisgICAgICogU2V0cyB0aGUgaG9sZGFiaWxpdHkgb2YgPGNvZGU+UmVzdWx0U2V0PC9jb2RlPiBvYmplY3RzIGNyZWF0ZWQKICAgICAgKiB1c2luZyB0aGlzIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KICAgICAgKgotICAgICAqIEBwYXJhbQlob2xkYWJpbGl0eQlBIDxjb2RlPlJlc3VsdFNldDwvY29kZT4gaG9sZGFiaWxpdHkgY29uc3RhbnQKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIGhvbGRhYmlsaXR5ICAgIEEgPGNvZGU+UmVzdWx0U2V0PC9jb2RlPiBob2xkYWJpbGl0eSBjb25zdGFudAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRIb2xkYWJpbGl0eShpbnQgaG9sZGFiaWxpdHkpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgIAljb24uc2V0SG9sZGFiaWxpdHkoaG9sZGFiaWxpdHkpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgIGNvbi5zZXRIb2xkYWJpbGl0eShob2xkYWJpbGl0eSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogUHV0cyB0aGUgY29ubmVjdGlvbiBpbiByZWFkLW9ubHkgbW9kZSBhcyBhIGhpbnQgdG8gdGhlIGRyaXZlciB0byAKKyAgICAgKiBQdXRzIHRoZSBjb25uZWN0aW9uIGluIHJlYWQtb25seSBtb2RlIGFzIGEgaGludCB0byB0aGUgZHJpdmVyIHRvCiAgICAgICogcGVyZm9ybSBkYXRhYmFzZSBvcHRpbWl6YXRpb25zLgogICAgICAqCi0gICAgICogQHBhcmFtCXJlYWRPbmx5ICB0cnVlIGVuYWJsZXMgcmVhZC1vbmx5IG1vZGUsIGZhbHNlIGRpc2FibGVzIGl0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgcmVhZE9ubHkgIHRydWUgZW5hYmxlcyByZWFkLW9ubHkgbW9kZSwgZmFsc2UgZGlzYWJsZXMgaXQuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFJlYWRPbmx5KGJvb2xlYW4gcmVhZE9ubHkpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5zZXRSZWFkT25seShyZWFkT25seSk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24uc2V0UmVhZE9ubHkocmVhZE9ubHkpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYW5kIHVubmFtZWQgc2F2ZXBvaW50IGFuZCByZXR1cm5zIGFuIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHRoYXQuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0LgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QuCiAgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTYXZlcG9pbnQgc2V0U2F2ZXBvaW50KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5zZXRTYXZlcG9pbnQoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uc2V0U2F2ZXBvaW50KCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIHNhdmVwb2ludCB3aXRoIHRoZSBuYW1lIGFuZCByZXR1cm5zIGFuIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHRoYXQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbmFtZQlOYW1lIG9mIHRoZSBzYXZlcG9pbnQuCi0gICAgICogQHJldHVybgk8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIG5hbWUgICAgTmFtZSBvZiB0aGUgc2F2ZXBvaW50LgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTYXZlcG9pbnQgc2V0U2F2ZXBvaW50KFN0cmluZyBuYW1lKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnNldFNhdmVwb2ludChuYW1lKTsKLSAgICB9ICAgIAotICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5zZXRTYXZlcG9pbnQobmFtZSk7CisgICAgfQorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsLgogICAgICAqCi0gICAgICogQHBhcmFtCWxldmVsIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIGxldmVsIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oaW50IGxldmVsKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24obGV2ZWwpOwotICAgIH0gICAgIAotICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKGxldmVsKTsKKyAgICB9CisKICAgICAvKioKLSAgICAgKiBJbnN0YWxscyB0aGUgZ2l2ZW4gPGNvZGU+TWFwPC9jb2RlPiBvYmplY3QgYXMgdGhlIHR5b2UgbWFwIGZvciB0aGlzIAorICAgICAqIEluc3RhbGxzIHRoZSBnaXZlbiA8Y29kZT5NYXA8L2NvZGU+IG9iamVjdCBhcyB0aGUgdHlvZSBtYXAgZm9yIHRoaXMKICAgICAgKiA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KICAgICAgKgotICAgICAqIEBwYXJhbQltYXAJPGNvZGU+TWFwPC9jb2RlPiBhIE1hcCBvYmplY3QgdG8gaW5zdGFsbC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIG1hcCAgICA8Y29kZT5NYXA8L2NvZGU+IGEgTWFwIG9iamVjdCB0byBpbnN0YWxsLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRUeXBlTWFwKE1hcCBtYXApIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsKLSAgICAJY29uLnNldFR5cGVNYXAobWFwKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5zZXRUeXBlTWFwKG1hcCk7CiAgICAgfQogCiAgICAgcHVibGljIGludCBnZXROZXR3b3JrVGltZW91dCgpIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBuZXcgZmVhdHVyZS4iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXROZXR3b3JrVGltZW91dChFeGVjdXRvciBleGVjdXRvciwgaW50IG1pbGxpc2Vjb25kcykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICB0aHJvdyBuZXcgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiRG8gbm90IHN1cHBvcnQgSmF2YSA3IG5ldyBmZWF0dXJlLiIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGFib3J0KEV4ZWN1dG9yIGV4ZWN1dG9yKSAgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgbmV3IGZlYXR1cmUuIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBnZXRTY2hlbWEoKSB0aHJvd3MgU1FMRXhjZXB0aW9uewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBuZXcgZmVhdHVyZS4iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRTY2hlbWEoU3RyaW5nIHNjaGVtYSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgbmV3IGZlYXR1cmUuIik7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBDaGVja3MgdGhlIHZhbGlkaXR5IG9mIHRoaXMgb2JqZWN0CiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIGNoZWNrVmFsaWRpdHkoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLSAgICAJaWYgKGlzQ2xvc2VkKSB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uICgiQ29ubmVjdGlvbiBjbG9zZWQiKTsKLSAgICAJaWYgKCF2YWxpZCkgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAoIkludmFsaWQgQ29ubmVjdGlvbiIpOwotICAgIAlpZihhY3RpdmUgPT0gZmFsc2UpIHsKLSAgICAJICAgIG1jLmNoZWNrSWZBY3RpdmUodGhpcyk7Ci0gICAgCX0KKyAgICAgICAgaWYgKGlzQ2xvc2VkKSB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uICgiQ29ubmVjdGlvbiBjbG9zZWQiKTsKKyAgICAgICAgaWYgKCF2YWxpZCkgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAoIkludmFsaWQgQ29ubmVjdGlvbiIpOworICAgICAgICBpZihhY3RpdmUgPT0gZmFsc2UpIHsKKyAgICAgICAgICAgIG1jLmNoZWNrSWZBY3RpdmUodGhpcyk7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBhY3RpdmUgZmxhZyB0byB0cnVlCiAgICAgICoKLSAgICAgKiBAcGFyYW0JYWN0dglib29sZWFuCisgICAgICogQHBhcmFtICAgIGFjdHYgICAgYm9vbGVhbgogICAgICAqLwogICAgIHZvaWQgc2V0QWN0aXZlKGJvb2xlYW4gYWN0dikgewogICAgICAgICBhY3RpdmUgPSBhY3R2OwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQppbmRleCBhYzdlNzQ4Li5mMDY3NWE0IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQpAQCAtMzMsMTkgKzMzLDE5IEBACiAgKiBUaGlzIGNsYXNzIGlzIGV4dGVuZGVkIGJ5IHRoZSBEYXRhU291cmNlIHNwZWNpZmljIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBmYWN0b3JpZXMKICAqIGFuZCB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBmb3IgdGhlIDxjb2RlPkRyaXZlck1hbmFnZXI8L2NvZGU+LgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDgvMDMKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA4LzAzCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiAKLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnksIAorcHVibGljIGFic3RyYWN0IGNsYXNzIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSwKICAgICBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7Ci0gICAgCisKICAgICBwcm90ZWN0ZWQgRGF0YVNvdXJjZVNwZWMgc3BlYyA9IG5ldyBEYXRhU291cmNlU3BlYygpOwogICAgIHByb3RlY3RlZCB0cmFuc2llbnQgRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIgZHNPYmpCdWlsZGVyOwotICAgIAorCiAgICAgcHJvdGVjdGVkIGphdmEuaW8uUHJpbnRXcml0ZXIgbG9nV3JpdGVyID0gbnVsbDsKICAgICBwcm90ZWN0ZWQgamFrYXJ0YS5yZXNvdXJjZS5zcGkuUmVzb3VyY2VBZGFwdGVyIHJhID0gbnVsbDsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIExvZ2dlciBfbG9nZ2VyOwogICAgIHN0YXRpYyB7CiAgICAgICAgIF9sb2dnZXIgPSBMb2dnZXIuZ2V0QW5vbnltb3VzTG9nZ2VyKCk7CkBAIC01NCw4ICs1NCw4IEBACiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIENvbm5lY3Rpb24gRmFjdG9yeSBpbnN0YW5jZS4gVGhlIDxjb2RlPkNvbm5lY3Rpb25NYW5hZ2VyPC9jb2RlPiBpbXBsZW1lbnRhdGlvbgogICAgICAqIG9mIHRoZSByZXNvdXJjZSBhZGFwdGVyIGlzIHVzZWQgaGVyZS4KLSAgICAgKiAKLSAgICAgKiBAcmV0dXJuCUdlbmVyaWMgSkRCQyBDb25uZWN0b3IgaW1wbGVtZW50YXRpb24gb2YgPGNvZGU+amF2YXguc3FsLkRhdGFTb3VyY2U8L2NvZGU+CisgICAgICoKKyAgICAgKiBAcmV0dXJuICAgIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IgaW1wbGVtZW50YXRpb24gb2YgPGNvZGU+amF2YXguc3FsLkRhdGFTb3VyY2U8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIE9iamVjdCBjcmVhdGVDb25uZWN0aW9uRmFjdG9yeSgpIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTYzLDE2ICs2MywxNiBAQAogICAgICAgICB9CiAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlIGNmID0gbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlKAogICAgICAgICAgICAgKGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSl0aGlzLCBudWxsKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGNmOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBDb25uZWN0aW9uIEZhY3RvcnkgaW5zdGFuY2UuIFRoZSA8Y29kZT5Db25uZWN0aW9uTWFuYWdlcjwvY29kZT4gaW1wbGVtZW50YXRpb24KICAgICAgKiBvZiB0aGUgYXBwbGljYXRpb24gc2VydmVyIGlzIHVzZWQgaGVyZS4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JY3hNYW5hZ2VyCTxjb2RlPkNvbm5lY3Rpb25NYW5hZ2VyPC9jb2RlPiBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgotICAgICAqIEByZXR1cm4JR2VuZXJpYyBKREJDIENvbm5lY3RvciBpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29kZT4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBjeE1hbmFnZXIgICAgPGNvZGU+Q29ubmVjdGlvbk1hbmFnZXI8L2NvZGU+IHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogQHJldHVybiAgICBHZW5lcmljIEpEQkMgQ29ubmVjdG9yIGltcGxlbWVudGF0aW9uIG9mIDxjb2RlPmphdmF4LnNxbC5EYXRhU291cmNlPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBPYmplY3QgY3JlYXRlQ29ubmVjdGlvbkZhY3RvcnkoamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvbk1hbmFnZXIgY3hNYW5hZ2VyKSB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC04MCw1NSArODAsNTUgQEAKICAgICAgICAgfQogICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuRGF0YVNvdXJjZSBjZiA9IG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuRGF0YVNvdXJjZSgKICAgICAgICAgICAgIChqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkpdGhpcywgY3hNYW5hZ2VyKTsKLSAgICAgICAgcmV0dXJuIGNmOyAKKyAgICAgICAgcmV0dXJuIGNmOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBuZXcgcGh5c2ljYWwgY29ubmVjdGlvbiB0byB0aGUgdW5kZXJseWluZyBFSVMgcmVzb3VyY2UKICAgICAgKiBtYW5hZ2VyLgotICAgICAqIAotICAgICAqIEBwYXJhbQlzdWJqZWN0CTxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICogQHBhcmFtCWN4UmVxdWVzdEluZm8JPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiB3aGljaCBtYXkgYmUgY3JlYXRlZAotICAgICAqICAgICAgIAkgICAgICAgICAgICAgCWFzIGEgcmVzdWx0IG9mIHRoZSBpbnZvY2F0aW9uIDxjb2RlPmdldENvbm5lY3Rpb24odXNlciwgcGFzc3dvcmQpPC9jb2RlPgotICAgICAqICAgICAgIAkgICAgICAgICAgICAgCW9uIHRoZSA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QKLSAgICAgKiBAcmV0dXJuCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QgY3JlYXRlZAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gaW5zdGFudGlhdGluZyB0aGUKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCTxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdCB1c2VkIGZvciB0aGUKLSAgICAgKiAgICAgICAJCQkJY3JlYXRpb24gb2YgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QKLSAgICAgKiBAdGhyb3dzCVNlY3VyaXR5RXhjZXB0aW9uCWlmIHRoZXJlIGlubyA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdAotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJc2F0aXNmeWluZyB0aGlzIHJlcXVlc3QgCi0gICAgICogQHRocm93cwlSZXNvdXJjZUFsbG9jYXRpb25FeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUgCi0gICAgICoJCQkJCQlwaHlzaWNhbCBjb25uZWN0aW9uCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3ViamVjdCAgICA8Y29kZT5TdWJqZWN0PC9jb2RlPiBpbnN0YW5jZSBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqIEBwYXJhbSAgICBjeFJlcXVlc3RJbmZvICAgIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gd2hpY2ggbWF5IGJlIGNyZWF0ZWQKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyBhIHJlc3VsdCBvZiB0aGUgaW52b2NhdGlvbiA8Y29kZT5nZXRDb25uZWN0aW9uKHVzZXIsIHBhc3N3b3JkKTwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiB0aGUgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0CisgICAgICogQHJldHVybiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGNyZWF0ZWQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGluc3RhbnRpYXRpbmcgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QgdXNlZCBmb3IgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgIGNyZWF0aW9uIG9mIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0CisgICAgICogQHRocm93cyAgICBTZWN1cml0eUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpbm8gPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdGlzZnlpbmcgdGhpcyByZXF1ZXN0CisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUFsbG9jYXRpb25FeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHBoeXNpY2FsIGNvbm5lY3Rpb24KICAgICAgKi8KICAgICBwdWJsaWMgYWJzdHJhY3QgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gY3JlYXRlTWFuYWdlZENvbm5lY3Rpb24oamF2YXguc2VjdXJpdHkuYXV0aC5TdWJqZWN0IHN1YmplY3QsCiAgICAgICAgIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBjeFJlcXVlc3RJbmZvKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb247Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBDaGVjayBpZiB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaXMgZXF1YWwgdG8gCisgICAgICogQ2hlY2sgaWYgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGlzIGVxdWFsIHRvCiAgICAgICogYW5vdGhlciA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LgotICAgICAqIAotICAgICAqIEBwYXJhbQlvdGhlcgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdCBmb3IgY2hlY2tpbmcgZXF1YWxpdHkgd2l0aAotICAgICAqIEByZXR1cm4JdHJ1ZQlpZiB0aGUgcHJvcGVydHkgc2V0cyBvZiBib3RoIHRoZSAKLSAgICAgKgkJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0cyBhcmUgdGhlIHNhbWUKLSAgICAgKgkJZmFsc2UJb3RoZXJ3aXNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgb3RoZXIgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QgZm9yIGNoZWNraW5nIGVxdWFsaXR5IHdpdGgKKyAgICAgKiBAcmV0dXJuICAgIHRydWUgICAgaWYgdGhlIHByb3BlcnR5IHNldHMgb2YgYm90aCB0aGUKKyAgICAgKiAgICAgICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0cyBhcmUgdGhlIHNhbWUKKyAgICAgKiAgICAgICAgZmFsc2UgICAgb3RoZXJ3aXNlCiAgICAgICovCiAgICAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvdGhlcik7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXQgdGhlIGxvZyB3cml0ZXIgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAc2VlCTxjb2RlPnNldExvZ1dyaXRlcjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRMb2dXcml0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIGphdmEuaW8uUHJpbnRXcml0ZXIgZ2V0TG9nV3JpdGVyKCkgewogICAgICAgICByZXR1cm4gbG9nV3JpdGVyOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAc2VlCTxjb2RlPnNldFJlc291cmNlQWRhcHRlcjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0UmVzb3VyY2VBZGFwdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBqYWthcnRhLnJlc291cmNlLnNwaS5SZXNvdXJjZUFkYXB0ZXIgZ2V0UmVzb3VyY2VBZGFwdGVyKCkgewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtMTM2LDExICsxMzYsMTEgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmE7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgaGFzaCBjb2RlIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWhhc2ggY29kZSBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+CisgICAgICogQHJldHVybiAgICBoYXNoIGNvZGUgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKXsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTE0OCw0MSArMTQ4LDQxIEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHNwZWMuaGFzaENvZGUoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgbWF0Y2hlZCA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gZnJvbSB0aGUgY2FuZGlkYXRlIAorICAgICAqIFJldHVybnMgYSBtYXRjaGVkIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBmcm9tIHRoZSBjYW5kaWRhdGUKICAgICAgKiBzZXQgb2YgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdHMuCi0gICAgICogCi0gICAgICogQHBhcmFtCWNvbm5lY3Rpb25TZXQJPGNvZGU+U2V0PC9jb2RlPiBvZiAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+Ci0gICAgICoJCQkJb2JqZWN0cyBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgotICAgICAqIEBwYXJhbQlzdWJqZWN0CSBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgotICAgICAqCQkJZm9yIHJldHJpZXZpbmcgaW5mb3JtYXRpb24gcmVxdWlyZWQgZm9yIG1hdGNoaW5nCi0gICAgICogQHBhcmFtCWN4UmVxdWVzdEluZm8JPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgotICAgICAqCQkJCWZvciByZXRyaWV2aW5nIGluZm9ybWF0aW9uIHJlcXVpcmVkIGZvciBtYXRjaGluZwotICAgICAqIEByZXR1cm4JPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHRoYXQgaXMgdGhlIGJlc3QgbWF0Y2ggc2F0aXNmeWluZyB0aGlzIHJlcXVlc3QKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGFjY2Vzc2luZyB0aGUgPGNvZGU+U3ViamVjdDwvY29kZT4KLSAgICAgKgkJCQkJcGFyYW1ldGVyIG9yIHRoZSA8Y29kZT5TZXQ8L2NvZGU+IG9mIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgotICAgICAqCQkJCQlvYmplY3RzIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgY29ubmVjdGlvblNldCAgICA8Y29kZT5TZXQ8L2NvZGU+IG9mICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgICBvYmplY3RzIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogQHBhcmFtICAgIHN1YmplY3QgICAgIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogICAgICAgICAgICBmb3IgcmV0cmlldmluZyBpbmZvcm1hdGlvbiByZXF1aXJlZCBmb3IgbWF0Y2hpbmcKKyAgICAgKiBAcGFyYW0gICAgY3hSZXF1ZXN0SW5mbyAgICA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogICAgICAgICAgICAgICAgZm9yIHJldHJpZXZpbmcgaW5mb3JtYXRpb24gcmVxdWlyZWQgZm9yIG1hdGNoaW5nCisgICAgICogQHJldHVybiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdGhhdCBpcyB0aGUgYmVzdCBtYXRjaCBzYXRpc2Z5aW5nIHRoaXMgcmVxdWVzdAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgYWNjZXNzaW5nIHRoZSA8Y29kZT5TdWJqZWN0PC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIgb3IgdGhlIDxjb2RlPlNldDwvY29kZT4gb2YgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogICAgICAgICAgICAgICAgICAgIG9iamVjdHMgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKICAgICAgKi8KLSAgICBwdWJsaWMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWF0Y2hNYW5hZ2VkQ29ubmVjdGlvbnMoamF2YS51dGlsLlNldCBjb25uZWN0aW9uU2V0LCAKKyAgICBwdWJsaWMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWF0Y2hNYW5hZ2VkQ29ubmVjdGlvbnMoamF2YS51dGlsLlNldCBjb25uZWN0aW9uU2V0LAogICAgICAgICBqYXZheC5zZWN1cml0eS5hdXRoLlN1YmplY3Qgc3ViamVjdCwgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxdWVzdEluZm8pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CiAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gbWF0Y2hNYW5hZ2VkQ29ubmVjdGlvbnMiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZihjb25uZWN0aW9uU2V0ID09IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIFBhc3N3b3JkQ3JlZGVudGlhbCBwYyA9IFNlY3VyaXR5VXRpbHMuZ2V0UGFzc3dvcmRDcmVkZW50aWFsKHRoaXMsIHN1YmplY3QsIGN4UmVxdWVzdEluZm8pOwotICAgICAgICAKKwogICAgICAgICBqYXZhLnV0aWwuSXRlcmF0b3IgaXRlciA9IGNvbm5lY3Rpb25TZXQuaXRlcmF0b3IoKTsKICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1jID0gbnVsbDsKICAgICAgICAgd2hpbGUoaXRlci5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgbWMgPSAoY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uKSBpdGVyLm5leHQoKTsKICAgICAgICAgICAgIH0gY2F0Y2goamF2YS51dGlsLk5vU3VjaEVsZW1lbnRFeGNlcHRpb24gbnNlZSkgewotCSAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfaXRlciIpOworICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfaXRlciIpOwogICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihuc2VlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZihwYyA9PSBudWxsICYmIHRoaXMuZXF1YWxzKG1jLmdldE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSgpKSkgewpAQCAtMTkxLDcgKzE5MSw3IEBACiAgICAgICAgICAgICAgICAgICAgIGlzVmFsaWQobWMpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWM7CiAgICAgICAgICAgICAgICAgfSBjYXRjaChSZXNvdXJjZUV4Y2VwdGlvbiByZSkgewotCSAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3JlIiwgcmUpOworICAgICAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3JlIiwgcmUpOwogICAgICAgICAgICAgICAgICAgICBtYy5jb25uZWN0aW9uRXJyb3JPY2N1cnJlZChyZSwgbnVsbCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIGlmKFNlY3VyaXR5VXRpbHMuaXNQYXNzd29yZENyZWRlbnRpYWxFcXVhbChwYywgbWMuZ2V0UGFzc3dvcmRDcmVkZW50aWFsKCkpID09IHRydWUpIHsKQEAgLTIwMCw0NSArMjAwLDQ1IEBACiAgICAgICAgICAgICAgICAgICAgIGlzVmFsaWQobWMpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWM7CiAgICAgICAgICAgICAgICAgfSBjYXRjaChSZXNvdXJjZUV4Y2VwdGlvbiByZSkgewotCSAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMucmUiKTsKKyAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLnJlIik7CiAgICAgICAgICAgICAgICAgICAgIG1jLmNvbm5lY3Rpb25FcnJvck9jY3VycmVkKHJlLCBudWxsKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotICAgIAorCiAgICAgLy9HSkNJTlQKICAgICAvKioKICAgICAgKiBDaGVja3MgaWYgYSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaXMgdG8gYmUgdmFsaWRhdGVkIG9yIG5vdAogICAgICAqIGFuZCB2YWxpZGF0ZXMgaXQgb3IgcmV0dXJucy4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JbWMJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIG9yCi0gICAgICogICAgICAgIAkgICAgICAgICAgCQlpZiB2YWxpZGF0aW9uIG1ldGhvZCBpcyBub3QgcHJvcGVyCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIG9yCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB2YWxpZGF0aW9uIG1ldGhvZCBpcyBub3QgcHJvcGVyCiAgICAgICovCiAgICAgdm9pZCBpc1ZhbGlkKGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKIAogICAgICAgICBpZihtYy5pc1RyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKSB7Ci0JICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgCi0gICAgICAgIGJvb2xlYW4gY29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZCA9IAorCisgICAgICAgIGJvb2xlYW4gY29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZCA9CiAgICAgICAgICAgICAobmV3IEJvb2xlYW4oc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ09OTkVDVElPTlZBTElEQVRJT05SRVFVSVJFRCkudG9Mb3dlckNhc2UoKSkpLmJvb2xlYW5WYWx1ZSgpOwogICAgICAgICBpZiggY29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZCA9PSBmYWxzZSB8fCBtYyA9PSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIAorCisKICAgICAgICAgU3RyaW5nIHZhbGlkYXRpb25NZXRob2QgPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OTUVUSE9EKS50b0xvd2VyQ2FzZSgpOwotICAgICAgICAKKwogICAgICAgICBtYy5jaGVja0lmVmFsaWQoKTsKICAgICAgICAgLyoqCiAgICAgICAgICAqIFRoZSBhYm92ZSBjYWxsIGNoZWNrcyBpZiB0aGUgYWN0dWFsIHBoeXNpY2FsIGNvbm5lY3Rpb24KICAgICAgICAgICogaXMgdXNhYmxlIG9yIG5vdC4KICAgICAgICAgICovCiAgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gY29uID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpOwotICAgICAgICAKKwogICAgICAgICBpZih2YWxpZGF0aW9uTWV0aG9kLmVxdWFscygiYXV0by1jb21taXQiKSA9PSB0cnVlKSB7CiAgICAgICAgICAgICBpc1ZhbGlkQnlBdXRvQ29tbWl0KGNvbik7CiAgICAgICAgIH0gZWxzZSBpZih2YWxpZGF0aW9uTWV0aG9kLmVxdWFsc0lnbm9yZUNhc2UoIm1ldGEtZGF0YSIpID09IHRydWUpIHsKQEAgLTI0OSwyOCArMjQ5LDI4IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSB2YWxpZGF0aW9uIG1ldGhvZCBpcyBub3QgcHJvcGVyIik7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDaGVja3MgaWYgYSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBpcyB2YWxpZCBvciBub3QKICAgICAgKiBieSBjaGVja2luZyBpdHMgYXV0byBjb21taXQgcHJvcGVydHkuCi0gICAgICogCi0gICAgICogQHBhcmFtCWNvbgk8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqCisgICAgICogQHBhcmFtICAgIGNvbiAgICA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqLwogICAgIHByb3RlY3RlZCB2b2lkIGlzVmFsaWRCeUF1dG9Db21taXQoamF2YS5zcWwuQ29ubmVjdGlvbiBjb24pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGNvbiA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyAiCiAgICAgICAgICAgICAgICAgKyAidGhlIGNvbm5lY3Rpb24gaXMgbnVsbCIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgIC8vIE5vdGljZSB0aGF0IHVzaW5nIHNvbWV0aGluZyBsaWtlIAorICAgICAgICAgICAvLyBOb3RpY2UgdGhhdCB1c2luZyBzb21ldGhpbmcgbGlrZQogICAgICAgICAgICAvLyBkYkNvbi5zZXRBdXRvQ29tbWl0KGRiQ29uLmdldEF1dG9Db21taXQoKSkgd2lsbCBjYXVzZSBwcm9ibGVtcyB3aXRoCiAgICAgICAgICAgIC8vIHNvbWUgZHJpdmVycyBsaWtlIHN5YmFzZQotICAgICAgICAgICAvLyBXZSBkbyBub3QgdmFsaWRhdGUgY29ubmVjdGlvbnMgdGhhdCBhcmUgYWxyZWFkeSBlbmxpc3RlZCAKLQkgICAvL2luIGEgdHJhbnNhY3Rpb24gCi0JICAgLy8gV2UgY3ljbGUgYXV0b2NvbW1pdCB0byB0cnVlIGFuZCBmYWxzZSB0byBieS1wYXNzIGRyaXZlcnMgdGhhdCAKLQkgICAvLyBtaWdodCBjYWNoZSB0aGUgY2FsbCB0byBzZXQgYXV0b2NvbWl0dAorICAgICAgICAgICAvLyBXZSBkbyBub3QgdmFsaWRhdGUgY29ubmVjdGlvbnMgdGhhdCBhcmUgYWxyZWFkeSBlbmxpc3RlZAorICAgICAgIC8vaW4gYSB0cmFuc2FjdGlvbgorICAgICAgIC8vIFdlIGN5Y2xlIGF1dG9jb21taXQgdG8gdHJ1ZSBhbmQgZmFsc2UgdG8gYnktcGFzcyBkcml2ZXJzIHRoYXQKKyAgICAgICAvLyBtaWdodCBjYWNoZSB0aGUgY2FsbCB0byBzZXQgYXV0b2NvbWl0dAogICAgICAgICAgICAvLyBBbHNvIG5vdGljZSB0aGF0IHNvbWUgWEEgZGF0YSBzb3VyY2VzIHdpbGwgdGhyb3cgYW5kIGV4Y2VwdGlvbiBpZgogICAgICAgICAgICAvLyB5b3UgdHJ5IHRvIGNhbGwgc2V0QXV0b0NvbW1pdCwgZm9yIHRoZW0gdGhpcyBtZXRob2QgaXMgbm90IHJlY29tbWVuZGVkCiAKQEAgLTI4MSw5MCArMjgxLDkwIEBACiAgICAgICAgICAgICAgICAgY29uLnJvbGxiYWNrKCk7IC8vIHByZXZlbnRzIHVuY29tcGxldGVkIHRyYW5zYWN0aW9uIGV4Y2VwdGlvbnMKICAgICAgICAgICAgICAgICBjb24uc2V0QXV0b0NvbW1pdCh0cnVlKTsKICAgICAgICAgICAgfQotICAgICAgICAKLQkgICBjb24uc2V0QXV0b0NvbW1pdChhYyk7CisKKyAgICAgICBjb24uc2V0QXV0b0NvbW1pdChhYyk7CiAKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19hdXRvY29tbWl0Iik7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2F1dG9jb21taXQiKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDaGVja3MgaWYgYSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBpcyB2YWxpZCBvciBub3QKICAgICAgKiBieSBjaGVja2luZyBpdHMgbWV0YSBkYXRhLgotICAgICAqIAotICAgICAqIEBwYXJhbQljb24JPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBjb24gICAgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKi8KICAgICBwcm90ZWN0ZWQgdm9pZCBpc1ZhbGlkQnlNZXRhRGF0YShqYXZhLnNxbC5Db25uZWN0aW9uIGNvbikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYoY29uID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzICIKICAgICAgICAgICAgICAgICArICJ0aGUgY29ubmVjdGlvbiBpcyBudWxsIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGphdmEuc3FsLkRhdGFiYXNlTWV0YURhdGEgZG1kID0gY29uLmdldE1ldGFEYXRhKCk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfbWQiKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfbWQiKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzICIKICAgICAgICAgICAgICAgICArICJnZXR0aW5nIHRoZSBtZXRhIGRhdGEgZmFpbGVkOiAiICsgc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2hlY2tzIGlmIGEgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gaXMgdmFsaWQgb3Igbm90CiAgICAgICogYnkgcXVlcnlpbmcgYSB0YWJsZS4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JY29uCTxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAotICAgICAqIEBwYXJhbQl0YWJsZU5hbWUJdGFibGUgd2hpY2ggc2hvdWxkIGJlIHF1ZXJpZWQKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqCisgICAgICogQHBhcmFtICAgIGNvbiAgICA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKKyAgICAgKiBAcGFyYW0gICAgdGFibGVOYW1lICAgIHRhYmxlIHdoaWNoIHNob3VsZCBiZSBxdWVyaWVkCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKi8KLSAgICBwcm90ZWN0ZWQgdm9pZCBpc1ZhbGlkQnlUYWJsZVF1ZXJ5KGphdmEuc3FsLkNvbm5lY3Rpb24gY29uLCAKKyAgICBwcm90ZWN0ZWQgdm9pZCBpc1ZhbGlkQnlUYWJsZVF1ZXJ5KGphdmEuc3FsLkNvbm5lY3Rpb24gY29uLAogICAgICAgICBTdHJpbmcgdGFibGVOYW1lKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihjb24gPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgIgogICAgICAgICAgICAgICAgICsgInRoZSBjb25uZWN0aW9uIGlzIG51bGwiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgamF2YS5zcWwuU3RhdGVtZW50IHN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CiAgICAgICAgICAgICBqYXZhLnNxbC5SZXN1bHRTZXQgcnMgPSBzdG10LmV4ZWN1dGVRdWVyeSgiU0VMRUNUICogRlJPTSAiICsgdGFibGVOYW1lKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19leGVjdXRlIik7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2V4ZWN1dGUiKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzICIKICAgICAgICAgICAgICAgICArICJxdWVyeWluZyB0aGUgdGFibGUgIiArIHRhYmxlTmFtZSArICIgZmFpbGVkOiAiICsgc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgaXNvbGF0aW9uIGxldmVsIHNwZWNpZmllZCBpbiB0aGUgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPgogICAgICAqIGZvciB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHBhc3NlZC4KICAgICAgKgotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBpc29sYXRpb24gcHJvcGVydHkgaXMgaW52YWxpZAotICAgICAqCQkJCQlvciBpZiB0aGUgaXNvbGF0aW9uIGNhbm5vdCBiZSBzZXQgb3ZlciB0aGUgY29ubmVjdGlvbgorICAgICAqIEBwYXJhbSAgICBtYyAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBpc29sYXRpb24gcHJvcGVydHkgaXMgaW52YWxpZAorICAgICAqICAgICAgICAgICAgICAgICAgICBvciBpZiB0aGUgaXNvbGF0aW9uIGNhbm5vdCBiZSBzZXQgb3ZlciB0aGUgY29ubmVjdGlvbgogICAgICAqLwogICAgIHByb3RlY3RlZCB2b2lkIHNldElzb2xhdGlvbihjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWMpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7Ci0gICAgCQotICAgIAlqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiA9IG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKTsKLSAgICAJaWYoY29uID09IG51bGwpIHsKLSAgICAJICAgIHJldHVybjsKLSAgICAJfQotICAgIAkKLSAgICAJU3RyaW5nIHRyYW5Jc29sYXRpb24gPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTik7Ci0gICAgCWlmKHRyYW5Jc29sYXRpb24gIT0gbnVsbCAmJiB0cmFuSXNvbGF0aW9uLmVxdWFscygiIikgPT0gZmFsc2UpIHsKLSAgICAJICAgIGludCB0cmFuSXNvbGF0aW9uSW50ID0gZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb25JbnQodHJhbklzb2xhdGlvbik7Ci0gICAgCSAgICB0cnkgewotICAgIAkgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbih0cmFuSXNvbGF0aW9uSW50KTsKLSAgICAJICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3R4X2xldmVsIik7Ci0gICAgCSAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGNvdWxkICIKLSAgICAJICAgICAgICAgICAgKyAibm90IGJlIHNldDogIiArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAJICAgIH0KLSAgICAJfQorCisgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gY29uID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpOworICAgICAgICBpZihjb24gPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgU3RyaW5nIHRyYW5Jc29sYXRpb24gPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTik7CisgICAgICAgIGlmKHRyYW5Jc29sYXRpb24gIT0gbnVsbCAmJiB0cmFuSXNvbGF0aW9uLmVxdWFscygiIikgPT0gZmFsc2UpIHsKKyAgICAgICAgICAgIGludCB0cmFuSXNvbGF0aW9uSW50ID0gZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb25JbnQodHJhbklzb2xhdGlvbik7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbih0cmFuSXNvbGF0aW9uSW50KTsKKyAgICAgICAgICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKKyAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3R4X2xldmVsIik7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGNvdWxkICIKKyAgICAgICAgICAgICAgICAgICAgKyAibm90IGJlIHNldDogIiArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJlc2V0cyB0aGUgaXNvbGF0aW9uIGxldmVsIGZvciB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHBhc3NlZC4KICAgICAgKiBJZiB0aGUgdHJhbnNhY3Rpb24gbGV2ZWwgaXMgdG8gYmUgZ3VhcmFudGVlZCB0byBiZSB0aGUgc2FtZSBhcyB0aGUgb25lCkBAIC0zNzMsMzgyICszNzMsMzgyIEBACiAgICAgICogaXNvbGF0aW9uIGxldmVsIGZyb20gdGhlIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gcGFzc2VkLiBFbHNlLAogICAgICAqIGl0IHNldHMgaXQgdG8gdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBwYXNzZWQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWMJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+Ci0gICAgICogQHBhcmFtCXRyYW5Jc29sCWludAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIGlzb2xhdGlvbiBwcm9wZXJ0eSBpcyBpbnZhbGlkCi0gICAgICoJCQkJCW9yIGlmIHRoZSBpc29sYXRpb24gY2Fubm90IGJlIHNldCBvdmVyIHRoZSBjb25uZWN0aW9uCisgICAgICogQHBhcmFtICAgIG1jICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB0cmFuSXNvbCAgICBpbnQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBpc29sYXRpb24gcHJvcGVydHkgaXMgaW52YWxpZAorICAgICAqICAgICAgICAgICAgICAgICAgICBvciBpZiB0aGUgaXNvbGF0aW9uIGNhbm5vdCBiZSBzZXQgb3ZlciB0aGUgY29ubmVjdGlvbgogICAgICAqLwogICAgIHZvaWQgcmVzZXRJc29sYXRpb24oY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1jLCBpbnQgdHJhbklzb2wpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7Ci0gICAgCQotICAgIAlqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiA9IG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKTsKLSAgICAJaWYoY29uID09IG51bGwpIHsKLSAgICAJICAgIHJldHVybjsKLSAgICAJfQotICAgIAkKLSAgICAJU3RyaW5nIHRyYW5Jc29sYXRpb24gPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTik7Ci0gICAgCWlmKHRyYW5Jc29sYXRpb24gIT0gbnVsbCAmJiB0cmFuSXNvbGF0aW9uLmVxdWFscygiIikgPT0gZmFsc2UpIHsKLSAgICAJICAgIFN0cmluZyBndWFyYW50ZWVJc29sYXRpb25MZXZlbCA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkdVQVJBTlRFRUlTT0xBVElPTkxFVkVMKTsKLSAgICAJICAgIAotICAgIAkgICAgaWYoZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwgIT0gbnVsbCAmJiBndWFyYW50ZWVJc29sYXRpb25MZXZlbC5lcXVhbHMoIiIpID09IGZhbHNlKSB7Ci0gICAgCSAgICAgICAgYm9vbGVhbiBndWFyYW50ZWUgPSAobmV3IEJvb2xlYW4oZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwudG9Mb3dlckNhc2UoKSkpLmJvb2xlYW5WYWx1ZSgpOwotICAgIAkgICAgICAgIAotICAgIAkgICAgICAgIGlmKGd1YXJhbnRlZSkgewotICAgIAkgICAgICAgICAgICBpbnQgdHJhbklzb2xhdGlvbkludCA9IGdldFRyYW5zYWN0aW9uSXNvbGF0aW9uSW50KHRyYW5Jc29sYXRpb24pOwotICAgIAkgICAgICAgICAgICB0cnkgewotICAgIAkgICAgICAgICAgICAgICAgaWYodHJhbklzb2xhdGlvbkludCAhPSBjb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKSkgewotICAgIAkgICAgICAgICAgICAgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbih0cmFuSXNvbGF0aW9uSW50KTsKLSAgICAJICAgICAgICAgICAgICAgIH0KLSAgICAJICAgICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y190eF9sZXZlbCIpOwotICAgIAkgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgaXNvbGF0aW9uIGxldmVsIGNvdWxkIG5vdCBiZSBzZXQ6ICIKLSAgICAJICAgICAgICAgICAgICAgICAgICArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAJICAgICAgICAgICAgfQotICAgIAkgICAgICAgIH0gZWxzZSB7Ci0gICAgCSAgICAgICAgICAgIHRyeSB7Ci0gICAgCSAgICAgICAgICAgICAgICBpZih0cmFuSXNvbCAhPSBjb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKSkgewotICAgIAkgICAgICAgICAgICAgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbih0cmFuSXNvbCk7Ci0gICAgCSAgICAgICAgICAgICAgICB9Ci0gICAgCSAgICAgICAgICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfdHhfbGV2ZWwiKTsKLSAgICAJICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGlzb2xhdGlvbiBsZXZlbCBjb3VsZCBub3QgYmUgc2V0OiAiCi0gICAgCSAgICAgICAgICAgICAgICAgICAgKyBzcWxlLmdldE1lc3NhZ2UoKSk7Ci0gICAgCSAgICAgICAgICAgIH0KLSAgICAJICAgICAgICB9Ci0gICAgCSAgICB9Ci0gICAgCX0KKworICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiA9IG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKTsKKyAgICAgICAgaWYoY29uID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFN0cmluZyB0cmFuSXNvbGF0aW9uID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04pOworICAgICAgICBpZih0cmFuSXNvbGF0aW9uICE9IG51bGwgJiYgdHJhbklzb2xhdGlvbi5lcXVhbHMoIiIpID09IGZhbHNlKSB7CisgICAgICAgICAgICBTdHJpbmcgZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwgPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5HVUFSQU5URUVJU09MQVRJT05MRVZFTCk7CisKKyAgICAgICAgICAgIGlmKGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsICE9IG51bGwgJiYgZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwuZXF1YWxzKCIiKSA9PSBmYWxzZSkgeworICAgICAgICAgICAgICAgIGJvb2xlYW4gZ3VhcmFudGVlID0gKG5ldyBCb29sZWFuKGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsLnRvTG93ZXJDYXNlKCkpKS5ib29sZWFuVmFsdWUoKTsKKworICAgICAgICAgICAgICAgIGlmKGd1YXJhbnRlZSkgeworICAgICAgICAgICAgICAgICAgICBpbnQgdHJhbklzb2xhdGlvbkludCA9IGdldFRyYW5zYWN0aW9uSXNvbGF0aW9uSW50KHRyYW5Jc29sYXRpb24pOworICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYodHJhbklzb2xhdGlvbkludCAhPSBjb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbih0cmFuSXNvbGF0aW9uSW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgeworICAgICAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y190eF9sZXZlbCIpOworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgaXNvbGF0aW9uIGxldmVsIGNvdWxkIG5vdCBiZSBzZXQ6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZih0cmFuSXNvbCAhPSBjb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbih0cmFuSXNvbCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKKyAgICAgICAgICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfdHhfbGV2ZWwiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGlzb2xhdGlvbiBsZXZlbCBjb3VsZCBub3QgYmUgc2V0OiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBzcWxlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBpbnRlZ2VyIGVxdWl2YWxlbnQgb2YgdGhlIHN0cmluZyBzcGVjaWZ5aW5nCiAgICAgICogdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbi4KICAgICAgKgotICAgICAqIEBwYXJhbQl0cmFuSXNvbGF0aW9uCXN0cmluZyBzcGVjaWZ5aW5nIHRoZSBpc29sYXRpb24gbGV2ZWwKLSAgICAgKiBAcmV0dXJuCXRyYW5Jc29sYXRpb25JbnQJdGhlIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IGNvbnN0YW50Ci0gICAgICoJCQkJCWZvciB0aGUgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIGlzb2xhdGlvbi4KKyAgICAgKiBAcGFyYW0gICAgdHJhbklzb2xhdGlvbiAgICBzdHJpbmcgc3BlY2lmeWluZyB0aGUgaXNvbGF0aW9uIGxldmVsCisgICAgICogQHJldHVybiAgICB0cmFuSXNvbGF0aW9uSW50ICAgIHRoZSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBjb25zdGFudAorICAgICAqICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBpc29sYXRpb24uCiAgICAgICovCiAgICAgcHJpdmF0ZSBpbnQgZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb25JbnQoU3RyaW5nIHRyYW5Jc29sYXRpb24pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7Ci0gICAgCWlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgicmVhZC11bmNvbW1pdHRlZCIpKSB7Ci0gICAgCSAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9SRUFEX1VOQ09NTUlUVEVEOwotICAgIAl9IGVsc2UgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJyZWFkLWNvbW1pdHRlZCIpKSB7Ci0gICAgCSAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9SRUFEX0NPTU1JVFRFRDsKLSAgICAJfSBlbHNlIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgicmVwZWF0YWJsZS1yZWFkIikpIHsKLSAgICAJICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1JFUEVBVEFCTEVfUkVBRDsKLSAgICAJfSBlbHNlIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgic2VyaWFsaXphYmxlIikpIHsKLSAgICAJICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1NFUklBTElaQUJMRTsKLSAgICAJfSBlbHNlIHsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiSW52YWxpZCB0cmFuc2FjdGlvbiBpc29sYXRpb247IHRoZSB0cmFuc2FjdGlvbiAiCi0gICAgCSAgICAgICAgKyAiaXNvbGF0aW9uIGxldmVsIGNhbiBiZSBlbXB0eSBvciBhbnkgb2YgdGhlIGZvbGxvd2luZzogIgotICAgIAkgICAgICAgICAgICArICJyZWFkLXVuY29tbWl0dGVkLCByZWFkLWNvbW1pdHRlZCwgcmVwZWF0YWJsZS1yZWFkLCBzZXJpYWxpemFibGUiKTsKLSAgICAJfQorICAgICAgICBpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInJlYWQtdW5jb21taXR0ZWQiKSkgeworICAgICAgICAgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fUkVBRF9VTkNPTU1JVFRFRDsKKyAgICAgICAgfSBlbHNlIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgicmVhZC1jb21taXR0ZWQiKSkgeworICAgICAgICAgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fUkVBRF9DT01NSVRURUQ7CisgICAgICAgIH0gZWxzZSBpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInJlcGVhdGFibGUtcmVhZCIpKSB7CisgICAgICAgICAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9SRVBFQVRBQkxFX1JFQUQ7CisgICAgICAgIH0gZWxzZSBpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInNlcmlhbGl6YWJsZSIpKSB7CisgICAgICAgICAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9TRVJJQUxJWkFCTEU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkludmFsaWQgdHJhbnNhY3Rpb24gaXNvbGF0aW9uOyB0aGUgdHJhbnNhY3Rpb24gIgorICAgICAgICAgICAgICAgICsgImlzb2xhdGlvbiBsZXZlbCBjYW4gYmUgZW1wdHkgb3IgYW55IG9mIHRoZSBmb2xsb3dpbmc6ICIKKyAgICAgICAgICAgICAgICAgICAgKyAicmVhZC11bmNvbW1pdHRlZCwgcmVhZC1jb21taXR0ZWQsIHJlcGVhdGFibGUtcmVhZCwgc2VyaWFsaXphYmxlIik7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGxvZyB3cml0ZXIgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlvdXQJPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICogQHNlZQk8Y29kZT5nZXRMb2dXcml0ZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIG91dCAgICA8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldExvZ1dyaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRMb2dXcml0ZXIoamF2YS5pby5QcmludFdyaXRlciBvdXQpIHsKICAgICAgICAgbG9nV3JpdGVyID0gb3V0OwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgYXNzb2NpYXRlZCA8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IEphdmFCZWFuLgogICAgICAqCi0gICAgICogQHBhcmFtCXJhCTxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgCi0gICAgICoJCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHNlZQk8Y29kZT5nZXRSZXNvdXJjZUFkYXB0ZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHJhICAgIDxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyAgICAgKiAgICAgICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldFJlc291cmNlQWRhcHRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRSZXNvdXJjZUFkYXB0ZXIoamFrYXJ0YS5yZXNvdXJjZS5zcGkuUmVzb3VyY2VBZGFwdGVyIHJhKSB7Ci0gICAgICAgIHRoaXMucmEgPSByYTsgICAKKyAgICAgICAgdGhpcy5yYSA9IHJhOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHVzZXIgbmFtZQogICAgICAqCi0gICAgICogQHBhcmFtCXVzZXIJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB1c2VyICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRVc2VyKFN0cmluZyB1c2VyKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlVTRVJOQU1FLCB1c2VyKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSB1c2VyIG5hbWUKICAgICAgKgotICAgICAqIEByZXR1cm4JdXNlcgorICAgICAqIEByZXR1cm4gICAgdXNlcgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VXNlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlVTRVJOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB1c2VyIG5hbWUKICAgICAgKgotICAgICAqIEBwYXJhbQl1c2VyCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdXNlciAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0dXNlcihTdHJpbmcgdXNlcikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5VU0VSTkFNRSwgdXNlcik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgdXNlciBuYW1lCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXVzZXIKKyAgICAgKiBAcmV0dXJuICAgIHVzZXIKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHVzZXIoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5VU0VSTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgcGFzc3dvcmQKICAgICAgKgotICAgICAqIEBwYXJhbQlwYXNzd2QJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBwYXNzd2QgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFBhc3N3b3JkKFN0cmluZyBwYXNzd2QpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUEFTU1dPUkQsIHBhc3N3ZCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcGFzc3dvcmQKICAgICAgKgotICAgICAqIEByZXR1cm4JcGFzc3dkCisgICAgICogQHJldHVybiAgICBwYXNzd2QKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFBhc3N3b3JkKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUEFTU1dPUkQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHBhc3N3b3JkCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcGFzc3dkCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcGFzc3dkICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRwYXNzd29yZChTdHJpbmcgcGFzc3dkKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBBU1NXT1JELCBwYXNzd2QpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHBhc3N3b3JkCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXBhc3N3ZAorICAgICAqIEByZXR1cm4gICAgcGFzc3dkCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRwYXNzd29yZCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBBU1NXT1JEKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBkYXRhIHNvdXJjZQogICAgICAqCi0gICAgICogQHBhcmFtCWNsYXNzTmFtZQk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGNsYXNzTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Q2xhc3NOYW1lKFN0cmluZyBjbGFzc05hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ0xBU1NOQU1FLCBjbGFzc05hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGRhdGEgc291cmNlCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWNsYXNzTmFtZQorICAgICAqIEByZXR1cm4gICAgY2xhc3NOYW1lCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRDbGFzc05hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DTEFTU05BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGRhdGEgc291cmNlCiAgICAgICoKLSAgICAgKiBAcGFyYW0JY2xhc3NOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgY2xhc3NOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRjbGFzc05hbWUoU3RyaW5nIGNsYXNzTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5DTEFTU05BTUUsIGNsYXNzTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgZGF0YSBzb3VyY2UKICAgICAgKgotICAgICAqIEByZXR1cm4JY2xhc3NOYW1lCisgICAgICogQHJldHVybiAgICBjbGFzc05hbWUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGNsYXNzTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNMQVNTTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyBpZiBjb25uZWN0aW9uIHZhbGlkYXRpb24gaXMgcmVxdWlyZWQgb3Igbm90CiAgICAgICoKLSAgICAgKiBAcGFyYW0JY29uVmxkUmVxCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgY29uVmxkUmVxICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRDb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkKFN0cmluZyBjb25WbGRSZXEpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ09OTkVDVElPTlZBTElEQVRJT05SRVFVSVJFRCwgY29uVmxkUmVxKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIGlmIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiBpcyByZXF1aXJlZCBvciBub3QKICAgICAgKgotICAgICAqIEByZXR1cm4JY29ubmVjdGlvbiB2YWxpZGF0aW9uIHJlcXVpcmVtZW50CisgICAgICogQHJldHVybiAgICBjb25uZWN0aW9uIHZhbGlkYXRpb24gcmVxdWlyZW1lbnQKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldENvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVEKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIGlmIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiBpcyByZXF1aXJlZCBvciBub3QKICAgICAgKgotICAgICAqIEBwYXJhbQljb25WbGRSZXEJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBjb25WbGRSZXEgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGNvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQoU3RyaW5nIGNvblZsZFJlcSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5DT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVELCBjb25WbGRSZXEpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgaWYgY29ubmVjdGlvbiB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkIG9yIG5vdAogICAgICAqCi0gICAgICogQHJldHVybgljb25uZWN0aW9uIHZhbGlkYXRpb24gcmVxdWlyZW1lbnQKKyAgICAgKiBAcmV0dXJuICAgIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiByZXF1aXJlbWVudAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Y29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHZhbGlkYXRpb24gbWV0aG9kIHJlcXVpcmVkCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdmFsaWRhdGlvbk1ldGhvZAk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHZhbGlkYXRpb25NZXRob2QgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFZhbGlkYXRpb25NZXRob2QoU3RyaW5nIHZhbGlkYXRpb25NZXRob2QpIHsKICAgICAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05NRVRIT0QsIHZhbGlkYXRpb25NZXRob2QpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiBtZXRob2QgdHlwZQogICAgICAqCi0gICAgICogQHJldHVybgl2YWxpZGF0aW9uIG1ldGhvZAorICAgICAqIEByZXR1cm4gICAgdmFsaWRhdGlvbiBtZXRob2QKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFZhbGlkYXRpb25NZXRob2QoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OTUVUSE9EKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB2YWxpZGF0aW9uIG1ldGhvZCByZXF1aXJlZAogICAgICAqCi0gICAgICogQHBhcmFtCXZhbGlkYXRpb25NZXRob2QJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB2YWxpZGF0aW9uTWV0aG9kICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXR2YWxpZGF0aW9uTWV0aG9kKFN0cmluZyB2YWxpZGF0aW9uTWV0aG9kKSB7CiAgICAgICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OTUVUSE9ELCB2YWxpZGF0aW9uTWV0aG9kKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSBjb25uZWN0aW9uIHZhbGlkYXRpb24gbWV0aG9kIHR5cGUKICAgICAgKgotICAgICAqIEByZXR1cm4JdmFsaWRhdGlvbiBtZXRob2QKKyAgICAgKiBAcmV0dXJuICAgIHZhbGlkYXRpb24gbWV0aG9kCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXR2YWxpZGF0aW9uTWV0aG9kKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTk1FVEhPRCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdGFibGUgY2hlY2tlZCBmb3IgZHVyaW5nIHZhbGlkYXRpb24KICAgICAgKgotICAgICAqIEBwYXJhbQl0YWJsZQk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHRhYmxlICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRWYWxpZGF0aW9uVGFibGVOYW1lKFN0cmluZyB0YWJsZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OVEFCTEVOQU1FLCB0YWJsZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdGFibGUgY2hlY2tlZCBmb3IgZHVyaW5nIHZhbGlkYXRpb24KICAgICAgKgotICAgICAqIEByZXR1cm4JdGFibGUKKyAgICAgKiBAcmV0dXJuICAgIHRhYmxlCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRWYWxpZGF0aW9uVGFibGVOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTlRBQkxFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdGFibGUgY2hlY2tlZCBmb3IgZHVyaW5nIHZhbGlkYXRpb24KICAgICAgKgotICAgICAqIEBwYXJhbQl0YWJsZQk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHRhYmxlICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXR2YWxpZGF0aW9uVGFibGVOYW1lKFN0cmluZyB0YWJsZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OVEFCTEVOQU1FLCB0YWJsZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdGFibGUgY2hlY2tlZCBmb3IgZHVyaW5nIHZhbGlkYXRpb24KICAgICAgKgotICAgICAqIEByZXR1cm4JdGFibGUKKyAgICAgKiBAcmV0dXJuICAgIHRhYmxlCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXR2YWxpZGF0aW9uVGFibGVOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTlRBQkxFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdHJuSXNvbGF0aW9uCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdHJuSXNvbGF0aW9uICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRUcmFuc2FjdGlvbklzb2xhdGlvbihTdHJpbmcgdHJuSXNvbGF0aW9uKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OLCB0cm5Jc29sYXRpb24pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqCi0gICAgICogQHJldHVybgl0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKKyAgICAgKiBAcmV0dXJuICAgIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdHJuSXNvbGF0aW9uCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdHJuSXNvbGF0aW9uICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXR0cmFuc2FjdGlvbklzb2xhdGlvbihTdHJpbmcgdHJuSXNvbGF0aW9uKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OLCB0cm5Jc29sYXRpb24pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqCi0gICAgICogQHJldHVybgl0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKKyAgICAgKiBAcmV0dXJuICAgIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0dHJhbnNhY3Rpb25Jc29sYXRpb24oKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyBpZiB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsIGlzIHRvIGJlIGd1YXJhbnRlZWQKICAgICAgKgotICAgICAqIEBwYXJhbQlndWFyYW50ZWVJc29sYXRpb24JPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBndWFyYW50ZWVJc29sYXRpb24gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldEd1YXJhbnRlZUlzb2xhdGlvbkxldmVsKFN0cmluZyBndWFyYW50ZWVJc29sYXRpb24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwsIGd1YXJhbnRlZUlzb2xhdGlvbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWlzb2xhdGlvbiBsZXZlbCBndWFyYW50ZWUKKyAgICAgKiBAcmV0dXJuICAgIGlzb2xhdGlvbiBsZXZlbCBndWFyYW50ZWUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldEd1YXJhbnRlZUlzb2xhdGlvbkxldmVsKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgaWYgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbCBpcyB0byBiZSBndWFyYW50ZWVkCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZ3VhcmFudGVlSXNvbGF0aW9uCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZ3VhcmFudGVlSXNvbGF0aW9uICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRndWFyYW50ZWVJc29sYXRpb25MZXZlbChTdHJpbmcgZ3VhcmFudGVlSXNvbGF0aW9uKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkdVQVJBTlRFRUlTT0xBVElPTkxFVkVMLCBndWFyYW50ZWVJc29sYXRpb24pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqCi0gICAgICogQHJldHVybglpc29sYXRpb24gbGV2ZWwgZ3VhcmFudGVlCisgICAgICogQHJldHVybiAgICBpc29sYXRpb24gbGV2ZWwgZ3VhcmFudGVlCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRndWFyYW50ZWVJc29sYXRpb25MZXZlbCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkdVQVJBTlRFRUlTT0xBVElPTkxFVkVMKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L1Jlc291cmNlQWRhcHRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvUmVzb3VyY2VBZGFwdGVyLmphdmEKaW5kZXggNTU1YmU3Ny4uZWE1NDA3NiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvUmVzb3VyY2VBZGFwdGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvUmVzb3VyY2VBZGFwdGVyLmphdmEKQEAgLTI2LDggKzI2LDggQEAKIC8qKgogICogPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA4LzA1Ci0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wOC8wNQorICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogcHVibGljIGNsYXNzIFJlc291cmNlQWRhcHRlciBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLlJlc291cmNlQWRhcHRlciB7CiAKQEAgLTM3LDUyICszNyw1MiBAQAogICAgICAqIEVtcHR5IG1ldGhvZCBpbXBsZW1lbnRhdGlvbiBmb3IgZW5kcG9pbnRBY3RpdmF0aW9uCiAgICAgICogd2hpY2gganVzdCB0aHJvd3MgPGNvZGU+Tm90U3VwcG9ydGVkRXhjZXB0aW9uPC9jb2RlPgogICAgICAqCi0gICAgICogQHBhcmFtCW1lZgk8Y29kZT5NZXNzYWdlRW5kcG9pbnRGYWN0b3J5PC9jb2RlPgotICAgICAqIEBwYXJhbQlhcwk8Y29kZT5BY3RpdmF0aW9uU3BlYzwvY29kZT4KLSAgICAgKiBAdGhyb3dzCTxjb2RlPk5vdFN1cHBvcnRlZEV4Y2VwdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbWVmICAgIDxjb2RlPk1lc3NhZ2VFbmRwb2ludEZhY3Rvcnk8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGFzICAgIDxjb2RlPkFjdGl2YXRpb25TcGVjPC9jb2RlPgorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+Tm90U3VwcG9ydGVkRXhjZXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVuZHBvaW50QWN0aXZhdGlvbihNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IG1lZiwgQWN0aXZhdGlvblNwZWMgYXMpIHRocm93cyBOb3RTdXBwb3J0ZWRFeGNlcHRpb24gewogICAgICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJUaGlzIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIEpEQkMgY29ubmVjdG9yIik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogRW1wdHkgbWV0aG9kIGltcGxlbWVudGF0aW9uIGZvciBlbmRwb2ludERlYWN0aXZhdGlvbgogICAgICAqCi0gICAgICogQHBhcmFtCW1lZgk8Y29kZT5NZXNzYWdlRW5kcG9pbnRGYWN0b3J5PC9jb2RlPgotICAgICAqIEBwYXJhbQlhcwk8Y29kZT5BY3RpdmF0aW9uU3BlYzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbWVmICAgIDxjb2RlPk1lc3NhZ2VFbmRwb2ludEZhY3Rvcnk8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGFzICAgIDxjb2RlPkFjdGl2YXRpb25TcGVjPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVuZHBvaW50RGVhY3RpdmF0aW9uKE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgbWVmLCBBY3RpdmF0aW9uU3BlYyBhcykgewotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEVtcHR5IG1ldGhvZCBpbXBsZW1lbnRhdGlvbiBmb3IgZ2V0WEFSZXNvdXJjZXMKICAgICAgKiB3aGljaCBqdXN0IHRocm93cyA8Y29kZT5Ob3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+CiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3BlY3MJPGNvZGU+QWN0aXZhdGlvblNwZWM8L2NvZGU+IGFycmF5Ci0gICAgICogQHRocm93cwk8Y29kZT5Ob3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+CisgICAgICogQHBhcmFtICAgIHNwZWNzICAgIDxjb2RlPkFjdGl2YXRpb25TcGVjPC9jb2RlPiBhcnJheQorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+Tm90U3VwcG9ydGVkRXhjZXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBYQVJlc291cmNlW10gZ2V0WEFSZXNvdXJjZXMoQWN0aXZhdGlvblNwZWNbXSBzcGVjcykgdGhyb3dzIE5vdFN1cHBvcnRlZEV4Y2VwdGlvbiB7CiAgICAgICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIlRoaXMgbWV0aG9kIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgSkRCQyBjb25uZWN0b3IiKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBFbXB0eSBpbXBsZW1lbnRhdGlvbiBvZiBzdGFydCBtZXRob2QKICAgICAgKgotICAgICAqIEBwYXJhbQljdHgJPGNvZGU+Qm9vdHN0cmFwQ29udGV4dDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgY3R4ICAgIDxjb2RlPkJvb3RzdHJhcENvbnRleHQ8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc3RhcnQoQm9vdHN0cmFwQ29udGV4dCBjdHgpIHRocm93cyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzb3VyY2UgQWRhcHRlciBpcyBzdGFydGluZyB3aXRoIGNvbmZpZ3VyYXRpb24gOiIgKyByYVByb3ApOwogICAgICAgICBpZiAocmFQcm9wID09IG51bGwgfHwgIXJhUHJvcC5lcXVhbHMoIlZBTElEIikpIHsKLQkgICAgdGhyb3cgbmV3IFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uKCJSZXNvdXJjZSBhZGFwdGVyIGNhbm5vdCBzdGFydC4gSXQgaXMgY29uZmlndXJlZCBhcyA6ICIgKyByYVByb3ApOwotCX0gCisgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbigiUmVzb3VyY2UgYWRhcHRlciBjYW5ub3Qgc3RhcnQuIEl0IGlzIGNvbmZpZ3VyZWQgYXMgOiAiICsgcmFQcm9wKTsKICAgICB9Ci0gICAgCisgICAgfQorCiAgICAgLyoqCiAgICAgICogRW1wdHkgaW1wbGVtZW50YXRpb24gb2Ygc3RvcCBtZXRob2QKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzdG9wKCkgewotICAgIAorCiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0UkFQcm9wZXJ0eShTdHJpbmcgcykgewpAQCAtOTIsNSArOTIsNSBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0UkFQcm9wZXJ0eSgpIHsKICAgICAgICAgcmV0dXJuIHJhUHJvcDsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L2J1aWxkLnhtbAppbmRleCA1ZTE0ZDQ0Li5mZjBmMDJiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvYnVpbGQueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxwcm9qZWN0IG5hbWU9ImpkYmNfY29ubmVjdG9yIiBiYXNlZGlyPSIke2dqYy5ob21lfSIgZGVmYXVsdD0iYnVpbGQiPgogICA8cHJvcGVydHkgbmFtZT0icGtnLmRpciIgdmFsdWU9ImNvbS9zdW4vZ2pjL3NwaSIvPgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImNsZWFuIj4KICAgICA8YW50IGFudGZpbGU9ImJ1aWxkLnhtbCIgZGlyPSIke2dqYy5ob21lfS9iaW4iIHRhcmdldD0iY2xlYW4iLz4KICAgPC90YXJnZXQ+CkBAIC0yOSw1NSArMjksNTUgQEAKICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlMTQiPgotICAgIAkKLSAgICAJPG1rZGlyIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ii8+Ci0gICAgCQotCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L2pkYmMuamFyIiBiYXNlZGlyPSIke2NsYXNzLmRpcn0iCisKKyAgICAgICAgPG1rZGlyIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ii8+CisKKyAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9qZGJjLmphciIgYmFzZWRpcj0iJHtjbGFzcy5kaXJ9IgogICAgICAgICBpbmNsdWRlcz0iJHtwa2cuZGlyfS8qKi8qLCBjb20vc3VuL2dqYy91dGlsLyoqLyosIGNvbS9zdW4vZ2pjL2NvbW1vbi8qKi8qIiBleGNsdWRlcz0iY29tL3N1bi9namMvY2NpLyoqLyosY29tL3N1bi9namMvc3BpLzEuNC8qKi8qIi8+Ci0gICAgICAgIAorCiAgICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fY3AucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgotICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS1jcC54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgkKKyAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEtY3AueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4KICAgICAgICAgPC9jb3B5PgotICAgCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fY3AucmFyIiB1cGRhdGU9InllcyI+Ci0gICAJCTxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KLSAgIAkJCTxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgotICAgCQk8L21ldGFpbmY+Ci0gICAJPC9qYXI+Ci0gICAJCi0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX194YS5yYXIiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIgaW5jbHVkZXM9ImpkYmMuamFyIi8+Ci0gICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLXhhLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CQorICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fY3AucmFyIiB1cGRhdGU9InllcyI+CisgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KKyAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgorICAgICAgICAgICA8L21ldGFpbmY+CisgICAgICAgPC9qYXI+CisKKyAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX3hhLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KKyAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEteGEueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4KICAgICAgICAgPC9jb3B5PgotICAgCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19feGEucmFyIiB1cGRhdGU9InllcyI+Ci0gICAJCTxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KLSAgIAkJCTxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgotICAgCQk8L21ldGFpbmY+Ci0gICAJPC9qYXI+Ci0gICAJCi0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kbS5yYXIiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIgaW5jbHVkZXM9ImpkYmMuamFyIi8+Ci0gICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLWRtLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CQorICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19feGEucmFyIiB1cGRhdGU9InllcyI+CisgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KKyAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgorICAgICAgICAgICA8L21ldGFpbmY+CisgICAgICAgPC9qYXI+CisKKyAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RtLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KKyAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEtZG0ueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4KICAgICAgICAgPC9jb3B5PgotICAgCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZG0ucmFyIiB1cGRhdGU9InllcyI+Ci0gICAJCTxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KLSAgIAkJCTxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgotICAgCQk8L21ldGFpbmY+Ci0gICAJPC9qYXI+Ci0gICAJCi0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kcy5yYXIiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIgaW5jbHVkZXM9ImpkYmMuamFyIi8+Ci0gICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLWRzLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CQorICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZG0ucmFyIiB1cGRhdGU9InllcyI+CisgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KKyAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgorICAgICAgICAgICA8L21ldGFpbmY+CisgICAgICAgPC9qYXI+CisKKyAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RzLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KKyAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEtZHMueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4KICAgICAgICAgPC9jb3B5PgotICAgCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZHMucmFyIiB1cGRhdGU9InllcyI+Ci0gICAJCTxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KLSAgIAkJCTxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgotICAgCQk8L21ldGFpbmY+Ci0gICAJPC9qYXI+Ci0gICAJCi0gICAJPGRlbGV0ZSBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3QvY29tIi8+Ci0gICAJPGRlbGV0ZSBmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvamRiYy5qYXIiLz4KLSAgIAk8ZGVsZXRlIGZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiLz4KLSAgIAkKKyAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RzLnJhciIgdXBkYXRlPSJ5ZXMiPgorICAgICAgICAgICA8bWV0YWluZiBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSI+CisgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KKyAgICAgICAgICAgPC9tZXRhaW5mPgorICAgICAgIDwvamFyPgorCisgICAgICAgPGRlbGV0ZSBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3QvY29tIi8+CisgICAgICAgPGRlbGV0ZSBmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvamRiYy5qYXIiLz4KKyAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiLz4KKwogICA8L3RhcmdldD4KIAogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkMTQiIGRlcGVuZHM9ImNvbXBpbGUxNCwgcGFja2FnZTE0Ii8+CiAgICAgPHRhcmdldCBuYW1lPSJidWlsZDEzIi8+Ci0JPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iYnVpbGQxNCwgYnVpbGQxMyIvPgorICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImJ1aWxkMTQsIGJ1aWxkMTMiLz4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L3JhLWRzLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L3JhLWRzLnhtbAppbmRleCAwZjNkNTEwLi4xNzNiZmVjIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9yYS1kcy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvcmEtZHMueG1sCkBAIC0yMiw2OSArMjIsNjkgQEAKICAgICAgICAgICAgdmVyc2lvbj0iMS41Ij4KIAogICAgIDwhLS0gVGhlcmUgY2FuIGJlIGFueSBudW1iZXIgb2YgImRlc2NyaXB0aW9uIiBlbGVtZW50cyBpbmNsdWRpbmcgMCAtLT4KLSAgICA8IS0tIFRoaXMgZmllbGQgY2FuIGJlIG9wdGlvbmFsbHkgdXNlZCBieSB0aGUgZHJpdmVyIHZlbmRvciB0byBwcm92aWRlIGEgCisgICAgPCEtLSBUaGlzIGZpZWxkIGNhbiBiZSBvcHRpb25hbGx5IHVzZWQgYnkgdGhlIGRyaXZlciB2ZW5kb3IgdG8gcHJvdmlkZSBhCiAgICAgICAgICBkZXNjcmlwdGlvbiBmb3IgdGhlIHJlc291cmNlIGFkYXB0ZXIuCiAgICAgLS0+CiAgICAgPGRlc2NyaXB0aW9uPlJlc291cmNlIGFkYXB0ZXIgd3JhcHBpbmcgRGF0YXNvdXJjZSBpbXBsZW1lbnRhdGlvbiBvZiBkcml2ZXI8L2Rlc2NyaXB0aW9uPgotICAgIAorCiAgICAgPCEtLSBUaGVyZSBjYW4gYmUgYW55IG51bWJlciBvZiAiZGlzcGxheS1uYW1lIiBlbGVtZW50cyBpbmNsdWRpbmcgMCAtLT4KLSAgICA8IS0tIFRoZSBmaWVsZCBjYW4gYmUgb3B0aW9uYWxseSB1c2VkIGJ5IHRoZSBkcml2ZXIgdmVuZG9yIHRvIHByb3ZpZGUgYSBuYW1lIHRoYXQgCisgICAgPCEtLSBUaGUgZmllbGQgY2FuIGJlIG9wdGlvbmFsbHkgdXNlZCBieSB0aGUgZHJpdmVyIHZlbmRvciB0byBwcm92aWRlIGEgbmFtZSB0aGF0CiAgICAgICAgICBpcyBpbnRlbmRlZCB0byBiZSBkaXNwbGF5ZWQgYnkgdG9vbHMuCiAgICAgLS0+CiAgICAgPGRpc3BsYXktbmFtZT5EYXRhU291cmNlIFJlc291cmNlIEFkYXB0ZXI8L2Rpc3BsYXktbmFtZT4KLSAgICAKKwogICAgIDwhLS0gVGhlcmUgY2FuIGJlIGFueSBudW1iZXIgb2YgImljb24iIGVsZW1lbnRzIGluY2x1ZGluZyAwIC0tPgogICAgIDwhLS0gVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlLgogICAgICAgICA8aWNvbj4KLSAgICAgICAgICAgIFRoaXMgInNtYWxsLWljb24iIGVsZW1lbnQgY2FuIG9jY3VyIGF0bW9zdCBvbmNlLiBUaGlzIHNob3VsZCBzcGVjaWZ5IHRoZSAKLSAgICAgICAgICAgIGFic29sdXRlIG9yIHRoZSByZWxhdGl2ZSBwYXRoIG5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcgYSBzbWFsbCAoMTYgeCAxNikgCisgICAgICAgICAgICBUaGlzICJzbWFsbC1pY29uIiBlbGVtZW50IGNhbiBvY2N1ciBhdG1vc3Qgb25jZS4gVGhpcyBzaG91bGQgc3BlY2lmeSB0aGUKKyAgICAgICAgICAgIGFic29sdXRlIG9yIHRoZSByZWxhdGl2ZSBwYXRoIG5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcgYSBzbWFsbCAoMTYgeCAxNikKICAgICAgICAgICAgIGljb24gLSBKUEVHIG9yIEdJRiBpbWFnZS4gVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlLgogICAgICAgICAgICAgPHNtYWxsLWljb24+c21hbGxpY29uLmpwZzwvc21hbGwtaWNvbj4KLSAgICAgICAgCi0gICAgICAgICAgICBUaGlzICJsYXJnZS1pY29uIiBlbGVtZW50IGNhbiBvY2N1ciBhdG1vc3Qgb25jZS4gVGhpcyBzaG91bGQgc3BlY2lmeSB0aGUgCi0gICAgICAgICAgICBhYnNvbHV0ZSBvciB0aGUgcmVsYXRpdmUgcGF0aCBuYW1lIG9mIGEgZmlsZSBjb250YWluaW5nIGEgc21hbGwgKDMyIHggMzIpIAorCisgICAgICAgICAgICBUaGlzICJsYXJnZS1pY29uIiBlbGVtZW50IGNhbiBvY2N1ciBhdG1vc3Qgb25jZS4gVGhpcyBzaG91bGQgc3BlY2lmeSB0aGUKKyAgICAgICAgICAgIGFic29sdXRlIG9yIHRoZSByZWxhdGl2ZSBwYXRoIG5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcgYSBzbWFsbCAoMzIgeCAzMikKICAgICAgICAgICAgIGljb24gLSBKUEVHIG9yIEdJRiBpbWFnZS4gVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlLgotICAgICAgICAgICAgPGxhcmdlLWljb24+bGFyZ2VpY29uLmpwZzwvbGFyZ2UtaWNvbj4gICAKKyAgICAgICAgICAgIDxsYXJnZS1pY29uPmxhcmdlaWNvbi5qcGc8L2xhcmdlLWljb24+CiAgICAgICAgIDwvaWNvbj4KICAgICAtLT4KICAgICA8aWNvbj4KICAgICAgICAgPHNtYWxsLWljb24+PC9zbWFsbC1pY29uPgotICAgICAgICA8bGFyZ2UtaWNvbj48L2xhcmdlLWljb24+ICAgCisgICAgICAgIDxsYXJnZS1pY29uPjwvbGFyZ2UtaWNvbj4KICAgICA8L2ljb24+Ci0gICAgCisKICAgICA8IS0tIFRoZSAidmVuZG9yLW5hbWUiIGVsZW1lbnQgc2hvdWxkIG9jY3VyIGV4YWN0bHkgb25jZS4gLS0+CiAgICAgPCEtLSBUaGlzIHNob3VsZCBzcGVjaWZ5IHRoZSBuYW1lIG9mIHRoZSBkcml2ZXIgdmVuZG9yLiBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUuCiAgICAgICAgIDx2ZW5kb3ItbmFtZT5YWVogSU5DLjwvdmVuZG9yLW5hbWU+CiAgICAgLS0+CiAgICAgPHZlbmRvci1uYW1lPlN1biBNaWNyb3N5c3RlbXM8L3ZlbmRvci1uYW1lPgotICAgIAorCiAgICAgPCEtLSBUaGUgImVpcy10eXBlIiBlbGVtZW50IHNob3VsZCBvY2N1ciBleGFjdGx5IG9uY2UuIC0tPgotICAgIDwhLS0gVGhpcyBzaG91bGQgc3BlY2lmeSB0aGUgZGF0YWJhc2UsIGZvciBleGFtcGxlIHRoZSBwcm9kdWN0IG5hbWUgb2YgCisgICAgPCEtLSBUaGlzIHNob3VsZCBzcGVjaWZ5IHRoZSBkYXRhYmFzZSwgZm9yIGV4YW1wbGUgdGhlIHByb2R1Y3QgbmFtZSBvZgogICAgICAgICAgdGhlIGRhdGFiYXNlIGluZGVwZW5kZW50IG9mIGFueSB2ZXJzaW9uIGluZm9ybWF0aW9uLiBUaGUgZm9sbG93aW5nCiAgICAgICAgICBpcyBhbiBleGFtcGxlLgogICAgICAgICA8ZWlzLXR5cGU+WFlaPC9laXMtdHlwZT4KICAgICAtLT4KICAgICA8ZWlzLXR5cGU+RGF0YWJhc2U8L2Vpcy10eXBlPgotICAgIAorCiAgICAgPCEtLSBUaGUgInJlc291cmNlYWRhcHRlci12ZXJzaW9uIiBlbGVtZW50IHNob3VsZCBvY2N1ciBleGFjdGx5IG9uY2UuIC0tPgotICAgIDwhLS0gVGhpcyBzcGVjaWZpZXMgYSBzdHJpbmcgYmFzZWQgdmVyc2lvbiBvZiB0aGUgcmVzb3VyY2UgYWRhcHRlciBmcm9tIAorICAgIDwhLS0gVGhpcyBzcGVjaWZpZXMgYSBzdHJpbmcgYmFzZWQgdmVyc2lvbiBvZiB0aGUgcmVzb3VyY2UgYWRhcHRlciBmcm9tCiAgICAgICAgICB0aGUgZHJpdmVyIHZlbmRvci4gVGhlIGRlZmF1bHQgaXMgYmVpbmcgc2V0IGFzIDEuMC4gVGhlIGRyaXZlcgogICAgICAgICAgdmVuZG9yIGNhbiBjaGFuZ2UgaXQgYXMgcmVxdWlyZWQuCiAgICAgLS0+CiAgICAgPHJlc291cmNlYWRhcHRlci12ZXJzaW9uPjEuMDwvcmVzb3VyY2VhZGFwdGVyLXZlcnNpb24+Ci0gICAgCisKICAgICA8IS0tIFRoaXMgImxpY2Vuc2UiIGVsZW1lbnQgY2FuIG9jY3VyIGF0bW9zdCBvbmNlIC0tPgogICAgIDwhLS0gVGhpcyBzcGVjaWZpZXMgbGljZW5zaW5nIHJlcXVpcmVtZW50cyBmb3IgdGhlIHJlc291cmNlIGFkYXB0ZXIgbW9kdWxlLgogICAgICAgICAgVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlLgogICAgICAgICA8bGljZW5zZT4KICAgICAgICAgICAgIFRoZXJlIGNhbiBiZSBhbnkgbnVtYmVyIG9mICJkZXNjcmlwdGlvbiIgZWxlbWVudHMgaW5jbHVkaW5nIDAuCiAgICAgICAgICAgICA8ZGVzY3JpcHRpb24+Ci0gICAgICAgICAgICAgICAgVGhpcyBmaWVsZCBjYW4gYmUgb3B0aW9uYWxseSB1c2VkIGJ5IHRoZSBkcml2ZXIgdmVuZG9yIHRvIAotICAgICAgICAgICAgICAgIHByb3ZpZGUgYSBkZXNjcmlwdGlvbiBmb3IgdGhlIGxpY2Vuc2luZyByZXF1aXJlbWVudHMgb2YgdGhlIAotICAgICAgICAgICAgICAgIHJlc291cmNlIGFkYXB0ZXIgbGlrZSBkdXJhdGlvbiBvZiBsaWNlbnNlLCBudW1iZXJvZiBjb25uZWN0aW9uIAorICAgICAgICAgICAgICAgIFRoaXMgZmllbGQgY2FuIGJlIG9wdGlvbmFsbHkgdXNlZCBieSB0aGUgZHJpdmVyIHZlbmRvciB0bworICAgICAgICAgICAgICAgIHByb3ZpZGUgYSBkZXNjcmlwdGlvbiBmb3IgdGhlIGxpY2Vuc2luZyByZXF1aXJlbWVudHMgb2YgdGhlCisgICAgICAgICAgICAgICAgcmVzb3VyY2UgYWRhcHRlciBsaWtlIGR1cmF0aW9uIG9mIGxpY2Vuc2UsIG51bWJlcm9mIGNvbm5lY3Rpb24KICAgICAgICAgICAgICAgICByZXN0cmljdGlvbnMuCiAgICAgICAgICAgICA8L2Rlc2NyaXB0aW9uPgotICAgICAgICAKKwogICAgICAgICAgICAgVGhpcyBzcGVjaWZpZXMgd2hldGhlciBhIGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gZGVwbG95IGFuZCB1c2UgdGhlIHJlc291cmNlIGFkYXB0ZXIuCiAgICAgICAgICAgICBEZWZhdWx0IGlzIGZhbHNlLgogICAgICAgICAgICAgPGxpY2Vuc2UtcmVxdWlyZWQ+ZmFsc2U8L2xpY2Vuc2UtcmVxdWlyZWQ+CkBAIC05MywyNCArOTMsMjQgQEAKICAgICA8bGljZW5zZT4KICAgICAgICAgPGxpY2Vuc2UtcmVxdWlyZWQ+ZmFsc2U8L2xpY2Vuc2UtcmVxdWlyZWQ+CiAgICAgPC9saWNlbnNlPgotICAgIAorCiAgICAgPHJlc291cmNlYWRhcHRlcj4KLSAgICAgICAgCi0gICAgICAgIDwhLS0gCi0gICAgICAgICAgICBUaGUgImNvbmZpZy1wcm9wZXJ0eSIgZWxlbWVudHMgY2FuIGhhdmUgemVybyBvciBtb3JlICJkZXNjcmlwdGlvbiIgCisKKyAgICAgICAgPCEtLQorICAgICAgICAgICAgVGhlICJjb25maWctcHJvcGVydHkiIGVsZW1lbnRzIGNhbiBoYXZlIHplcm8gb3IgbW9yZSAiZGVzY3JpcHRpb24iCiAgICAgICAgICAgICBlbGVtZW50cy4gVGhlICJkZXNjcmlwdGlvbiIgZWxlbWVudHMgYXJlIG5vdCBiZWluZyBpbmNsdWRlZAogICAgICAgICAgICAgaW4gdGhlICJjb25maWctcHJvcGVydHkiIGVsZW1lbnRzIGJlbG93LiBUaGUgZHJpdmVyIHZlbmRvciBjYW4KICAgICAgICAgICAgIGFkZCB0aGVtIGFzIHJlcXVpcmVkLgogICAgICAgICAtLT4KLSAgICAgICAgCisKICAgICAgICAgPHJlc291cmNlYWRhcHRlci1jbGFzcz5jb20uc3VuLmpkYmNyYS5zcGkuUmVzb3VyY2VBZGFwdGVyPC9yZXNvdXJjZWFkYXB0ZXItY2xhc3M+Ci0gICAgICAgIAorCiAgICAgICAgIDxvdXRib3VuZC1yZXNvdXJjZWFkYXB0ZXI+Ci0gICAgICAgIAorCiAgICAgICAgICAgICA8Y29ubmVjdGlvbi1kZWZpbml0aW9uPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPG1hbmFnZWRjb25uZWN0aW9uZmFjdG9yeS1jbGFzcz5jb20uc3VuLmpkYmNyYS5zcGkuRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L21hbmFnZWRjb25uZWN0aW9uZmFjdG9yeS1jbGFzcz4KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIDwhLS0gVGhlcmUgY2FuIGJlIGFueSBudW1iZXIgb2YgdGhlc2UgZWxlbWVudHMgaW5jbHVkaW5nIDAgLS0+CiAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlNlcnZlck5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgpAQCAtMTI4LDcgKzEyOCw3IEBACiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+dGVzdGRiPC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CiAKLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VXNlcjwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT5kYnVzZXI8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KQEAgLTEzOSwxMiArMTM5LDEyIEBACiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+ZGJ1c2VyPC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CiAKLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+UGFzc3dvcmQ8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+ZGJwYXNzd29yZDwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5VUkw8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+amRiYzpkZXJieTovL2xvY2FsaG9zdDoxNTI3L3Rlc3RkYjtjcmVhdGU9dHJ1ZTwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgpAQCAtMTU0LDcgKzE1NCw3IEBACiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4tLT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+RGVzY3JpcHRpb248L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+T3JhY2xlIHRoaW4gZHJpdmVyIERhdGFzb3VyY2U8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KQEAgLTE2NSwxNyArMTY1LDE3IEBACiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+Um9sZU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4gICAgCisgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkxvZ2luVGltZU91dDwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT4wPC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4gICAgCisgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkRyaXZlclByb3BlcnRpZXM8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CkBAIC0xODYsNyArMTg2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPiM8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+Q2xhc3NOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPm9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnREYXRhU291cmNlNDA8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KQEAgLTE5NywzMSArMTk3LDMxIEBACiAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT47Y3JlYXRlPXRydWU8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CiAKLSAgICAgIAkJPGNvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkNvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQ8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+ZmFsc2U8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLSAgICAgICAgCTwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAJPGNvbmZpZy1wcm9wZXJ0eT4gICAgCi0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktbmFtZT5WYWxpZGF0aW9uTWV0aG9kPC9jb25maWctcHJvcGVydHktbmFtZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotICAgICAgICAJPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgIAk8Y29uZmlnLXByb3BlcnR5PiAgICAKLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlZhbGlkYXRpb25UYWJsZU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0gICAgICAgIAk8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgCTxjb25maWctcHJvcGVydHk+ICAgIAotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VHJhbnNhY3Rpb25Jc29sYXRpb248L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0gICAgICAgIAk8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgCTxjb25maWctcHJvcGVydHk+ICAgIAotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+R3VhcmFudGVlSXNvbGF0aW9uTGV2ZWw8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0gICAgICAgIAk8L2NvbmZpZy1wcm9wZXJ0eT4gCisgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5Db25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPmZhbHNlPC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5WYWxpZGF0aW9uTWV0aG9kPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VmFsaWRhdGlvblRhYmxlTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlRyYW5zYWN0aW9uSXNvbGF0aW9uPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+R3VhcmFudGVlSXNvbGF0aW9uTGV2ZWw8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KIDwhLS0gcHJvcGVydGllcyB0byB0ZXN0IHNldHRpbmcgb2YgYSBub24tU3RyaW5nIHZhbHVlIHdpdGggb3ZlcnJpZGRlbiBzZXR0ZXJzIC0tPgogICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5Ob25TdHJpbmdXaXRoTm9PdmVycmlkZGVuU2V0dGVyPC9jb25maWctcHJvcGVydHktbmFtZT4KQEAgLTIzNSw1NCArMjM1LDU0IEBACiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CiAKICAgICAgICAgICAgICAgICA8Y29ubmVjdGlvbmZhY3RvcnktaW50ZXJmYWNlPmphdmF4LnNxbC5EYXRhU291cmNlPC9jb25uZWN0aW9uZmFjdG9yeS1pbnRlcmZhY2U+Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICA8Y29ubmVjdGlvbmZhY3RvcnktaW1wbC1jbGFzcz5jb20uc3VuLmpkYmNyYS5zcGkuRGF0YVNvdXJjZTwvY29ubmVjdGlvbmZhY3RvcnktaW1wbC1jbGFzcz4KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIDxjb25uZWN0aW9uLWludGVyZmFjZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb25uZWN0aW9uLWludGVyZmFjZT4KLSAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICA8Y29ubmVjdGlvbi1pbXBsLWNsYXNzPmNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uSG9sZGVyPC9jb25uZWN0aW9uLWltcGwtY2xhc3M+Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIDwvY29ubmVjdGlvbi1kZWZpbml0aW9uPgotICAgICAgICAgICAgCisKICAgICAgICAgICAgIDx0cmFuc2FjdGlvbi1zdXBwb3J0PkxvY2FsVHJhbnNhY3Rpb248L3RyYW5zYWN0aW9uLXN1cHBvcnQ+Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgPGF1dGhlbnRpY2F0aW9uLW1lY2hhbmlzbT4KICAgICAgICAgICAgICAgICA8IS0tIFRoZXJlIGNhbiBiZSBhbnkgbnVtYmVyIG9mICJkZXNjcmlwdGlvbiIgZWxlbWVudHMgaW5jbHVkaW5nIDAgLS0+CiAgICAgICAgICAgICAgICAgPCEtLSBOb3QgaW5jbHVkaW5nIHRoZSAiZGVzY3JpcHRpb24iIGVsZW1lbnQgLS0+Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICA8YXV0aGVudGljYXRpb24tbWVjaGFuaXNtLXR5cGU+QmFzaWNQYXNzd29yZDwvYXV0aGVudGljYXRpb24tbWVjaGFuaXNtLXR5cGU+Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICA8Y3JlZGVudGlhbC1pbnRlcmZhY2U+amF2YXgucmVzb3VyY2Uuc3BpLnNlY3VyaXR5LlBhc3N3b3JkQ3JlZGVudGlhbDwvY3JlZGVudGlhbC1pbnRlcmZhY2U+CiAgICAgICAgICAgICA8L2F1dGhlbnRpY2F0aW9uLW1lY2hhbmlzbT4KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICA8cmVhdXRoZW50aWNhdGlvbi1zdXBwb3J0PmZhbHNlPC9yZWF1dGhlbnRpY2F0aW9uLXN1cHBvcnQ+Ci0gICAgICAgICAgICAKKwogICAgICAgICA8L291dGJvdW5kLXJlc291cmNlYWRhcHRlcj4KLQk8YWRtaW5vYmplY3Q+Ci0JICAgICAgIDxhZG1pbm9iamVjdC1pbnRlcmZhY2U+Y29tLnN1bi5qZGJjcmEuc3BpLkpkYmNTZXR1cEFkbWluPC9hZG1pbm9iamVjdC1pbnRlcmZhY2U+Ci0JICAgICAgIDxhZG1pbm9iamVjdC1jbGFzcz5jb20uc3VuLmpkYmNyYS5zcGkuSmRiY1NldHVwQWRtaW5JbXBsPC9hZG1pbm9iamVjdC1jbGFzcz4KLQkgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5UYWJsZU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLQkgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0JICAgICAgIDxjb25maWctcHJvcGVydHk+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+U2NoZW1hTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotCSAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLQkgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5KbmRpTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotCSAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLQkgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5Ob09mUm93czwvY29uZmlnLXByb3BlcnR5LW5hbWU+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLkludGVnZXI8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT4wPC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0JICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgorICAgIDxhZG1pbm9iamVjdD4KKyAgICAgICAgICAgPGFkbWlub2JqZWN0LWludGVyZmFjZT5jb20uc3VuLmpkYmNyYS5zcGkuSmRiY1NldHVwQWRtaW48L2FkbWlub2JqZWN0LWludGVyZmFjZT4KKyAgICAgICAgICAgPGFkbWlub2JqZWN0LWNsYXNzPmNvbS5zdW4uamRiY3JhLnNwaS5KZGJjU2V0dXBBZG1pbkltcGw8L2FkbWlub2JqZWN0LWNsYXNzPgorICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlRhYmxlTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5TY2hlbWFOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkpuZGlOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPk5vT2ZSb3dzPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuSW50ZWdlcjwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjA8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CiAgICAgICAgIDwvYWRtaW5vYmplY3Q+Ci0gICAgICAgIAorCiAgICAgPC9yZXNvdXJjZWFkYXB0ZXI+Ci0gICAgCisKIDwvY29ubmVjdG9yPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uTWFuYWdlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uTWFuYWdlci5qYXZhCmluZGV4IGIyMTljZDIuLjEyNDgwOWMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvbk1hbmFnZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25NYW5hZ2VyLmphdmEKQEAgLTI0LDI2ICsyNCwyNiBAQAogLyoqCiAgKiBDb25uZWN0aW9uTWFuYWdlciBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzMxCi0gKiBAYXV0aG9yCUJpbm9kIFAuRworICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8zMQorICogQGF1dGhvciAgICBCaW5vZCBQLkcKICAqLwotcHVibGljIGNsYXNzIENvbm5lY3Rpb25NYW5hZ2VyIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvbk1hbmFnZXJ7IAorcHVibGljIGNsYXNzIENvbm5lY3Rpb25NYW5hZ2VyIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvbk1hbmFnZXJ7CiAKICAgICAvKioKICAgICAgKiBSZXR1cm5zIGEgPGNvZGU+Q29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdCB0byB0aGUgPGNvZGU+Q29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+CiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWNmCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0LgotICAgICAqIEBwYXJhbQlpbmZvCTxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gb2JqZWN0LgotICAgICAqIEByZXR1cm4JQSA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBPYmplY3QuCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbiBJbiBjYXNlIG9mIGFuIGVycm9yIGluIGdldHRpbmcgdGhlIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+LgorICAgICAqIEBwYXJhbSAgICBtY2YgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QuCisgICAgICogQHBhcmFtICAgIGluZm8gICAgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBvYmplY3QuCisgICAgICogQHJldHVybiAgICBBIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IE9iamVjdC4KKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uIEluIGNhc2Ugb2YgYW4gZXJyb3IgaW4gZ2V0dGluZyB0aGUgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4uCiAgICAgICovCiAgICAgcHVibGljIE9iamVjdCBhbGxvY2F0ZUNvbm5lY3Rpb24oTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG1jZiwKLSAgICAJCQkJICAgICBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW5mbykgCi0gICAgCQkJCSAgICAgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKLQlNYW5hZ2VkQ29ubmVjdGlvbiBtYyA9IG1jZi5jcmVhdGVNYW5hZ2VkQ29ubmVjdGlvbihudWxsLCBpbmZvKTsKLQlyZXR1cm4gbWMuZ2V0Q29ubmVjdGlvbihudWxsLCBpbmZvKTsgICAgCQkJCSAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGluZm8pCisgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKKyAgICBNYW5hZ2VkQ29ubmVjdGlvbiBtYyA9IG1jZi5jcmVhdGVNYW5hZ2VkQ29ubmVjdGlvbihudWxsLCBpbmZvKTsKKyAgICByZXR1cm4gbWMuZ2V0Q29ubmVjdGlvbihudWxsLCBpbmZvKTsKICAgICB9Ci0gICAgCisKICAgICAvKgogICAgICAqIFRoaXMgY2xhc3MgY291bGQgZWZmZWN0aXZlbHkgaW1wbGVtZW50IENvbm5lY3Rpb24gcG9vbGluZyBhbHNvLgogICAgICAqIENvdWxkIGJlIGRvbmUgZm9yIEZDUy4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvblJlcXVlc3RJbmZvLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25SZXF1ZXN0SW5mby5qYXZhCmluZGV4IDM5Yzc4NzYuLmM0NzdmYzIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvblJlcXVlc3RJbmZvLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uUmVxdWVzdEluZm8uamF2YQpAQCAtMTksMTAgKzE5LDEwIEBACiAvKioKICAqIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzMxCi0gKiBAYXV0aG9yCUJpbm9kIFAuRworICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8zMQorICogQGF1dGhvciAgICBCaW5vZCBQLkcKICAqLwotcHVibGljIGNsYXNzIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mb3sgCitwdWJsaWMgY2xhc3MgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZvewogCiAgICAgcHJpdmF0ZSBTdHJpbmcgdXNlcjsKICAgICBwcml2YXRlIFN0cmluZyBwYXNzd29yZDsKQEAgLTMwLDggKzMwLDggQEAKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gb2JqZWN0CiAgICAgICoKLSAgICAgKiBAcGFyYW0JdXNlcglVc2VyIE5hbWUuCi0gICAgICogQHBhcmFtCXBhc3N3b3JkCVBhc3N3b3JkCisgICAgICogQHBhcmFtICAgIHVzZXIgICAgVXNlciBOYW1lLgorICAgICAqIEBwYXJhbSAgICBwYXNzd29yZCAgICBQYXNzd29yZAogICAgICAqLwogICAgIHB1YmxpYyBDb25uZWN0aW9uUmVxdWVzdEluZm8oU3RyaW5nIHVzZXIsIFN0cmluZyBwYXNzd29yZCkgewogICAgICAgICB0aGlzLnVzZXIgPSB1c2VyOwpAQCAtNDEsNyArNDEsNyBAQAogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgdXNlciBuYW1lIG9mIHRoZSBDb25uZWN0aW9uUmVxdWVzdEluZm8uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVVzZXIgbmFtZSBvZiBDb25uZWN0aW9uUmVxdWVzdEluZm8uCisgICAgICogQHJldHVybiAgICBVc2VyIG5hbWUgb2YgQ29ubmVjdGlvblJlcXVlc3RJbmZvLgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VXNlcigpIHsKICAgICAgICAgcmV0dXJuIHVzZXI7CkBAIC01MCw3ICs1MCw3IEBACiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBwYXNzd29yZCBvZiB0aGUgQ29ubmVjdGlvblJlcXVlc3RJbmZvLgogICAgICAqCi0gICAgICogQHJldHVybglQYXNzd29yZCBvZiBDb25uZWN0aW9uUmVxdWVzdEluZm8uCisgICAgICogQHJldHVybiAgICBQYXNzd29yZCBvZiBDb25uZWN0aW9uUmVxdWVzdEluZm8uCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRQYXNzd29yZCgpIHsKICAgICAgICAgcmV0dXJuIHBhc3N3b3JkOwpAQCAtNTksNyArNTksNyBAQAogICAgIC8qKgogICAgICAqIFZlcmlmeSB3aGV0aGVyIHR3byBDb25uZWN0aW9uUmVxdWVzdEluZm9zIGFyZSBlcXVhbC4KICAgICAgKgotICAgICAqIEByZXR1cm4JVHJ1ZSwgaWYgdGhleSBhcmUgZXF1YWwgYW5kIGZhbHNlIG90aGVyd2lzZS4KKyAgICAgKiBAcmV0dXJuICAgIFRydWUsIGlmIHRoZXkgYXJlIGVxdWFsIGFuZCBmYWxzZSBvdGhlcndpc2UuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmopIHsKICAgICAgICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gZmFsc2U7CkBAIC03NSwxOCArNzUsMTggQEAKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIGhhc2hjb2RlIG9mIHRoZSBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWhhc2hDb2RlLgorICAgICAqIEByZXR1cm4gICAgaGFzaENvZGUuCiAgICAgICovCiAgICAgcHVibGljIGludCBoYXNoQ29kZSgpIHsKICAgICAgICAgU3RyaW5nIHJlc3VsdCA9ICIiICsgdXNlciArIHBhc3N3b3JkOwogICAgICAgICByZXR1cm4gcmVzdWx0Lmhhc2hDb2RlKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29tcGFyZXMgdHdvIG9iamVjdHMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbzEJRmlyc3Qgb2JqZWN0LgotICAgICAqIEBwYXJhbQlvMglTZWNvbmQgb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBvMSAgICBGaXJzdCBvYmplY3QuCisgICAgICogQHBhcmFtICAgIG8yICAgIFNlY29uZCBvYmplY3QuCiAgICAgICovCiAgICAgcHJpdmF0ZSBib29sZWFuIGlzRXF1YWwoT2JqZWN0IG8xLCBPYmplY3QgbzIpIHsKICAgICAgICAgaWYgKG8xID09IG51bGwpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQppbmRleCA0YmY5ZmVkLi4zMjM0MDMyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCkBAIC0zMSwxNCArMzEsMTQgQEAKIC8qKgogICogRGF0YSBTb3VyY2UgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzMwCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8zMAorICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogCiBwdWJsaWMgY2xhc3MgRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgZXh0ZW5kcyBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgewotICAgCisKICAgICBwcml2YXRlIHRyYW5zaWVudCBqYXZheC5zcWwuRGF0YVNvdXJjZSBkYXRhU291cmNlT2JqOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgTG9nZ2VyIF9sb2dnZXI7CiAgICAgc3RhdGljIHsKICAgICAgICAgX2xvZ2dlciA9IExvZ2dlci5nZXRBbm9ueW1vdXNMb2dnZXIoKTsKQEAgLTQ5LDE5ICs0OSwxOSBAQAogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBuZXcgcGh5c2ljYWwgY29ubmVjdGlvbiB0byB0aGUgdW5kZXJseWluZyBFSVMgcmVzb3VyY2UKICAgICAgKiBtYW5hZ2VyLgotICAgICAqIAotICAgICAqIEBwYXJhbQlzdWJqZWN0CTxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICogQHBhcmFtCWN4UmVxdWVzdEluZm8JPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiB3aGljaCBtYXkgYmUgY3JlYXRlZAotICAgICAqICAgICAgIAkgICAgICAgICAgICAgCWFzIGEgcmVzdWx0IG9mIHRoZSBpbnZvY2F0aW9uIDxjb2RlPmdldENvbm5lY3Rpb24odXNlciwgcGFzc3dvcmQpPC9jb2RlPgotICAgICAqICAgICAgIAkgICAgICAgICAgICAgCW9uIHRoZSA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QKLSAgICAgKiBAcmV0dXJuCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QgY3JlYXRlZAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gaW5zdGFudGlhdGluZyB0aGUKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCTxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdCB1c2VkIGZvciB0aGUKLSAgICAgKiAgICAgICAJCQkJY3JlYXRpb24gb2YgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QKLSAgICAgKiBAdGhyb3dzCVNlY3VyaXR5RXhjZXB0aW9uCWlmIHRoZXJlIGlubyA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdAotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJc2F0aXNmeWluZyB0aGlzIHJlcXVlc3QgCi0gICAgICogQHRocm93cwlSZXNvdXJjZUFsbG9jYXRpb25FeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUgCi0gICAgICoJCQkJCQlwaHlzaWNhbCBjb25uZWN0aW9uCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3ViamVjdCAgICA8Y29kZT5TdWJqZWN0PC9jb2RlPiBpbnN0YW5jZSBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqIEBwYXJhbSAgICBjeFJlcXVlc3RJbmZvICAgIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gd2hpY2ggbWF5IGJlIGNyZWF0ZWQKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyBhIHJlc3VsdCBvZiB0aGUgaW52b2NhdGlvbiA8Y29kZT5nZXRDb25uZWN0aW9uKHVzZXIsIHBhc3N3b3JkKTwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiB0aGUgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0CisgICAgICogQHJldHVybiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGNyZWF0ZWQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGluc3RhbnRpYXRpbmcgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QgdXNlZCBmb3IgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgIGNyZWF0aW9uIG9mIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0CisgICAgICogQHRocm93cyAgICBTZWN1cml0eUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpbm8gPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdGlzZnlpbmcgdGhpcyByZXF1ZXN0CisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUFsbG9jYXRpb25FeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHBoeXNpY2FsIGNvbm5lY3Rpb24KICAgICAgKi8KICAgICBwdWJsaWMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gY3JlYXRlTWFuYWdlZENvbm5lY3Rpb24oamF2YXguc2VjdXJpdHkuYXV0aC5TdWJqZWN0IHN1YmplY3QsCiAgICAgICAgIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBjeFJlcXVlc3RJbmZvKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewpAQCAtNjksNTUgKzY5LDU1IEBACiAgICAgICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGNyZWF0ZU1hbmFnZWRDb25uZWN0aW9uIik7CiAgICAgICAgIH0KICAgICAgICAgUGFzc3dvcmRDcmVkZW50aWFsIHBjID0gU2VjdXJpdHlVdGlscy5nZXRQYXNzd29yZENyZWRlbnRpYWwodGhpcywgc3ViamVjdCwgY3hSZXF1ZXN0SW5mbyk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKGRhdGFTb3VyY2VPYmogPT0gbnVsbCkgewogICAgICAgICAgICAgaWYoZHNPYmpCdWlsZGVyID09IG51bGwpIHsKICAgICAgICAgICAgICAgICBkc09iakJ1aWxkZXIgPSBuZXcgRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIoc3BlYyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGRhdGFTb3VyY2VPYmogPSAoamF2YXguc3FsLkRhdGFTb3VyY2UpIGRzT2JqQnVpbGRlci5jb25zdHJ1Y3REYXRhU291cmNlT2JqZWN0KCk7CiAgICAgICAgICAgICB9IGNhdGNoKENsYXNzQ2FzdEV4Y2VwdGlvbiBjY2UpIHsKLQkgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2NjZSIsIGNjZSk7CisgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19jY2UiLCBjY2UpOwogICAgICAgICAgICAgICAgIHRocm93IG5ldyBqYWthcnRhLnJlc291cmNlLlJlc291cmNlRXhjZXB0aW9uKGNjZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gZHNDb25uID0gbnVsbDsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKLQkgICAgLyogRm9yIHRoZSBjYXNlIHdoZXJlIHRoZSB1c2VyL3Bhc3N3ZCBvZiB0aGUgY29ubmVjdGlvbiBwb29sIGlzCi0JICAgICAqIGVxdWFsIHRvIHRoZSBQYXNzd29yZENyZWRlbnRpYWwgZm9yIHRoZSBjb25uZWN0aW9uIHJlcXVlc3QKLQkgICAgICogZ2V0IGEgY29ubmVjdGlvbiBmcm9tIHRoaXMgcG9vbCBkaXJlY3RseS4KLQkgICAgICogZm9yIGFsbCBvdGhlciBjb25kaXRpb25zIGdvIGNyZWF0ZSBhIG5ldyBjb25uZWN0aW9uCi0JICAgICAqLwotCSAgICBpZiAoIGlzRXF1YWwoIHBjLCBnZXRVc2VyKCksIGdldFBhc3N3b3JkKCkgKSApIHsKLQkgICAgICAgIGRzQ29ubiA9IGRhdGFTb3VyY2VPYmouZ2V0Q29ubmVjdGlvbigpOwotCSAgICB9IGVsc2UgewotCSAgICAgICAgZHNDb25uID0gZGF0YVNvdXJjZU9iai5nZXRDb25uZWN0aW9uKHBjLmdldFVzZXJOYW1lKCksIAotCQkgICAgbmV3IFN0cmluZyhwYy5nZXRQYXNzd29yZCgpKSk7Ci0JICAgIH0KKyAgICAgICAgLyogRm9yIHRoZSBjYXNlIHdoZXJlIHRoZSB1c2VyL3Bhc3N3ZCBvZiB0aGUgY29ubmVjdGlvbiBwb29sIGlzCisgICAgICAgICAqIGVxdWFsIHRvIHRoZSBQYXNzd29yZENyZWRlbnRpYWwgZm9yIHRoZSBjb25uZWN0aW9uIHJlcXVlc3QKKyAgICAgICAgICogZ2V0IGEgY29ubmVjdGlvbiBmcm9tIHRoaXMgcG9vbCBkaXJlY3RseS4KKyAgICAgICAgICogZm9yIGFsbCBvdGhlciBjb25kaXRpb25zIGdvIGNyZWF0ZSBhIG5ldyBjb25uZWN0aW9uCisgICAgICAgICAqLworICAgICAgICBpZiAoIGlzRXF1YWwoIHBjLCBnZXRVc2VyKCksIGdldFBhc3N3b3JkKCkgKSApIHsKKyAgICAgICAgICAgIGRzQ29ubiA9IGRhdGFTb3VyY2VPYmouZ2V0Q29ubmVjdGlvbigpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZHNDb25uID0gZGF0YVNvdXJjZU9iai5nZXRDb25uZWN0aW9uKHBjLmdldFVzZXJOYW1lKCksCisgICAgICAgICAgICBuZXcgU3RyaW5nKHBjLmdldFBhc3N3b3JkKCkpKTsKKyAgICAgICAgfQogICAgICAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLmV4Y19jcmVhdGVfY29ubiIsIHNxbGUpOwotICAgICAgICAgICAgdGhyb3cgbmV3IGpha2FydGEucmVzb3VyY2Uuc3BpLlJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gY291bGQgbm90IGJlIGFsbG9jYXRlZDogIiArIAorICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5leGNfY3JlYXRlX2Nvbm4iLCBzcWxlKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBqYWthcnRhLnJlc291cmNlLnNwaS5SZXNvdXJjZUFsbG9jYXRpb25FeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGNvdWxkIG5vdCBiZSBhbGxvY2F0ZWQ6ICIgKwogICAgICAgICAgICAgICAgIHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWMgPSBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uKG51bGwsIGRzQ29ubiwgcGMsIHRoaXMpOwogICAgICAgICAvL0dKQ0lOVAogICAgICAgICBzZXRJc29sYXRpb24obWMpOwogICAgICAgICBpc1ZhbGlkKG1jKTsKICAgICAgICAgcmV0dXJuIG1jOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIENoZWNrIGlmIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpcyBlcXVhbCB0byAKKyAgICAgKiBDaGVjayBpZiB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaXMgZXF1YWwgdG8KICAgICAgKiBhbm90aGVyIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4uCi0gICAgICogCi0gICAgICogQHBhcmFtCW90aGVyCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0IGZvciBjaGVja2luZyBlcXVhbGl0eSB3aXRoCi0gICAgICogQHJldHVybgl0cnVlCWlmIHRoZSBwcm9wZXJ0eSBzZXRzIG9mIGJvdGggdGhlIAotICAgICAqCQkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3RzIGFyZSB0aGUgc2FtZQotICAgICAqCQlmYWxzZQlvdGhlcndpc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBvdGhlciAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdCBmb3IgY2hlY2tpbmcgZXF1YWxpdHkgd2l0aAorICAgICAqIEByZXR1cm4gICAgdHJ1ZSAgICBpZiB0aGUgcHJvcGVydHkgc2V0cyBvZiBib3RoIHRoZQorICAgICAqICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3RzIGFyZSB0aGUgc2FtZQorICAgICAqICAgICAgICBmYWxzZSAgICBvdGhlcndpc2UKICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG90aGVyKSB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC0xMjgsNDA5ICsxMjgsNDA5IEBACiAgICAgICAgICAqIGlmIGFuZCBvbmx5IGlmIHRoZWlyIHByb3BlcnRpZXMgYXJlIHRoZSBzYW1lLgogICAgICAgICAgKi8KICAgICAgICAgaWYob3RoZXIgaW5zdGFuY2VvZiBjb20uc3VuLmpkYmNyYS5zcGkuRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkpIHsKLSAgICAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBvdGhlck1DRiA9IAorICAgICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLkRTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG90aGVyTUNGID0KICAgICAgICAgICAgICAgICAoY29tLnN1bi5qZGJjcmEuc3BpLkRTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KSBvdGhlcjsKICAgICAgICAgICAgIHJldHVybiB0aGlzLnNwZWMuZXF1YWxzKG90aGVyTUNGLnNwZWMpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBzZXJ2ZXIgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlzZXJ2ZXJOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldFNlcnZlck5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHNlcnZlck5hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0U2VydmVyTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRzZXJ2ZXJOYW1lKFN0cmluZyBzZXJ2ZXJOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlNFUlZFUk5BTUUsIHNlcnZlck5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHNlcnZlciBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglzZXJ2ZXJOYW1lCi0gICAgICogQHNlZQk8Y29kZT5zZXRTZXJ2ZXJOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgc2VydmVyTmFtZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0U2VydmVyTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHNlcnZlck5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5TRVJWRVJOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBzZXJ2ZXIgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlzZXJ2ZXJOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldFNlcnZlck5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHNlcnZlck5hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0U2VydmVyTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRTZXJ2ZXJOYW1lKFN0cmluZyBzZXJ2ZXJOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlNFUlZFUk5BTUUsIHNlcnZlck5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHNlcnZlciBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglzZXJ2ZXJOYW1lCi0gICAgICogQHNlZQk8Y29kZT5zZXRTZXJ2ZXJOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgc2VydmVyTmFtZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0U2VydmVyTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFNlcnZlck5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5TRVJWRVJOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBwb3J0IG51bWJlci4KICAgICAgKgotICAgICAqIEBwYXJhbQlwb3J0TnVtYmVyCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldFBvcnROdW1iZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHBvcnROdW1iZXIgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0UG9ydE51bWJlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRwb3J0TnVtYmVyKFN0cmluZyBwb3J0TnVtYmVyKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIsIHBvcnROdW1iZXIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHBvcnQgbnVtYmVyLgogICAgICAqCi0gICAgICogQHJldHVybglwb3J0TnVtYmVyCi0gICAgICogQHNlZQk8Y29kZT5zZXRQb3J0TnVtYmVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgcG9ydE51bWJlcgorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0UG9ydE51bWJlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHBvcnROdW1iZXIoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QT1JUTlVNQkVSKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBwb3J0IG51bWJlci4KICAgICAgKgotICAgICAqIEBwYXJhbQlwb3J0TnVtYmVyCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldFBvcnROdW1iZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHBvcnROdW1iZXIgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0UG9ydE51bWJlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRQb3J0TnVtYmVyKFN0cmluZyBwb3J0TnVtYmVyKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIsIHBvcnROdW1iZXIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHBvcnQgbnVtYmVyLgogICAgICAqCi0gICAgICogQHJldHVybglwb3J0TnVtYmVyCi0gICAgICogQHNlZQk8Y29kZT5zZXRQb3J0TnVtYmVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgcG9ydE51bWJlcgorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0UG9ydE51bWJlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFBvcnROdW1iZXIoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QT1JUTlVNQkVSKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkYXRhYmFzZSBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCWRhdGFiYXNlTmFtZQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREYXRhYmFzZU5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRhdGFiYXNlTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREYXRhYmFzZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0ZGF0YWJhc2VOYW1lKFN0cmluZyBkYXRhYmFzZU5hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQUJBU0VOQU1FLCBkYXRhYmFzZU5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRhdGFiYXNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRhdGFiYXNlTmFtZQotICAgICAqIEBzZWUJPGNvZGU+c2V0RGF0YWJhc2VOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZGF0YWJhc2VOYW1lCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREYXRhYmFzZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRkYXRhYmFzZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBQkFTRU5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRhdGFiYXNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZGF0YWJhc2VOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERhdGFiYXNlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGF0YWJhc2VOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERhdGFiYXNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXREYXRhYmFzZU5hbWUoU3RyaW5nIGRhdGFiYXNlTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBQkFTRU5BTUUsIGRhdGFiYXNlTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGF0YWJhc2UgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGF0YWJhc2VOYW1lCi0gICAgICogQHNlZQk8Y29kZT5zZXREYXRhYmFzZU5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkYXRhYmFzZU5hbWUKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERhdGFiYXNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldERhdGFiYXNlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFCQVNFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGF0YSBzb3VyY2UgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlkc24gPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRzbiA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREYXRhU291cmNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRkYXRhU291cmNlTmFtZShTdHJpbmcgZHNuKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FLCBkc24pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRhdGEgc291cmNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRzbgotICAgICAqIEBzZWUJPGNvZGU+c2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkc24KKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERhdGFTb3VyY2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0ZGF0YVNvdXJjZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBU09VUkNFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGF0YSBzb3VyY2UgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlkc24gPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRzbiA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREYXRhU291cmNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXREYXRhU291cmNlTmFtZShTdHJpbmcgZHNuKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FLCBkc24pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRhdGEgc291cmNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRzbgotICAgICAqIEBzZWUJPGNvZGU+c2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkc24KKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERhdGFTb3VyY2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGF0YVNvdXJjZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBU09VUkNFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGVzY3JpcHRpb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZGVzYwk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREZXNjcmlwdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGVzYyAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREZXNjcmlwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRkZXNjcmlwdGlvbihTdHJpbmcgZGVzYykgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ERVNDUklQVElPTiwgZGVzYyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGVzY3JpcHRpb24uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRlc2MKLSAgICAgKiBAc2VlCTxjb2RlPnNldERlc2NyaXB0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZGVzYworICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGVzY3JpcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRkZXNjcmlwdGlvbigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFU0NSSVBUSU9OKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkZXNjcmlwdGlvbi4KICAgICAgKgotICAgICAqIEBwYXJhbQlkZXNjCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERlc2NyaXB0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkZXNjICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERlc2NyaXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERlc2NyaXB0aW9uKFN0cmluZyBkZXNjKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFU0NSSVBUSU9OLCBkZXNjKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkZXNjcmlwdGlvbi4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGVzYwotICAgICAqIEBzZWUJPGNvZGU+c2V0RGVzY3JpcHRpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBkZXNjCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREZXNjcmlwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVTQ1JJUFRJT04pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIG5ldHdvcmsgcHJvdG9jb2wuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbndQcm90b2NvbAk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CisgICAgICogQHBhcmFtICAgIG53UHJvdG9jb2wgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldG5ldHdvcmtQcm90b2NvbChTdHJpbmcgbndQcm90b2NvbCkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ORVRXT1JLUFJPVE9DT0wsIG53UHJvdG9jb2wpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIG5ldHdvcmsgcHJvdG9jb2wuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCW53UHJvdG9jb2wKLSAgICAgKiBAc2VlCTxjb2RlPnNldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIG53UHJvdG9jb2wKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldG5ldHdvcmtQcm90b2NvbCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk5FVFdPUktQUk9UT0NPTCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgbmV0d29yayBwcm90b2NvbC4KICAgICAgKgotICAgICAqIEBwYXJhbQlud1Byb3RvY29sCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbndQcm90b2NvbCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TmV0d29ya1Byb3RvY29sKFN0cmluZyBud1Byb3RvY29sKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk5FVFdPUktQUk9UT0NPTCwgbndQcm90b2NvbCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgbmV0d29yayBwcm90b2NvbC4KICAgICAgKgotICAgICAqIEByZXR1cm4JbndQcm90b2NvbAotICAgICAqIEBzZWUJPGNvZGU+c2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgbndQcm90b2NvbAorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmV0d29ya1Byb3RvY29sKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTkVUV09SS1BST1RPQ09MKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSByb2xlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jcm9sZU5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0Um9sZU5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHJvbGVOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldFJvbGVOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHJvbGVOYW1lKFN0cmluZyByb2xlTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ST0xFTkFNRSwgcm9sZU5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHJvbGUgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4Jcm9sZU5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldFJvbGVOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgcm9sZU5hbWUKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldFJvbGVOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0cm9sZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ST0xFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgcm9sZSBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCXJvbGVOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldFJvbGVOYW1lPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICByb2xlTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRSb2xlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRSb2xlTmFtZShTdHJpbmcgcm9sZU5hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUk9MRU5BTUUsIHJvbGVOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSByb2xlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXJvbGVOYW1lCi0gICAgICogQHNlZQk8Y29kZT5zZXRSb2xlTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHJvbGVOYW1lCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRSb2xlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFJvbGVOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUk9MRU5BTUUpOwogICAgIH0KIAotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgbG9naW4gdGltZW91dC4KICAgICAgKgotICAgICAqIEBwYXJhbQlsb2dpblRpbWVPdXQJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0TG9naW5UaW1lT3V0PC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBsb2dpblRpbWVPdXQgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0TG9naW5UaW1lT3V0PC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGxvZ2luVGltZU91dChTdHJpbmcgbG9naW5UaW1lT3V0KSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR0lOVElNRU9VVCwgbG9naW5UaW1lT3V0KTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBsb2dpbiB0aW1lb3V0LgogICAgICAqCi0gICAgICogQHJldHVybglsb2dpblRpbWVvdXQKLSAgICAgKiBAc2VlCTxjb2RlPnNldExvZ2luVGltZU91dDwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGxvZ2luVGltZW91dAorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0TG9naW5UaW1lT3V0PC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0bG9naW5UaW1lT3V0KCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HSU5USU1FT1VUKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBsb2dpbiB0aW1lb3V0LgogICAgICAqCi0gICAgICogQHBhcmFtCWxvZ2luVGltZU91dAk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXRMb2dpblRpbWVPdXQ8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGxvZ2luVGltZU91dCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRMb2dpblRpbWVPdXQ8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TG9naW5UaW1lT3V0KFN0cmluZyBsb2dpblRpbWVPdXQpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HSU5USU1FT1VULCBsb2dpblRpbWVPdXQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGxvZ2luIHRpbWVvdXQuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWxvZ2luVGltZW91dAotICAgICAqIEBzZWUJPGNvZGU+c2V0TG9naW5UaW1lT3V0PC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgbG9naW5UaW1lb3V0CisgICAgICogQHNlZSAgICA8Y29kZT5zZXRMb2dpblRpbWVPdXQ8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRMb2dpblRpbWVPdXQoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dJTlRJTUVPVVQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRlbGltaXRlci4KICAgICAgKgotICAgICAqIEBwYXJhbQlkZWxpbQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREZWxpbWl0ZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRlbGltICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERlbGltaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRkZWxpbWl0ZXIoU3RyaW5nIGRlbGltKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUiwgZGVsaW0pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRlbGltaXRlci4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGVsaW0KLSAgICAgKiBAc2VlCTxjb2RlPnNldERlbGltaXRlcjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRlbGltCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREZWxpbWl0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRkZWxpbWl0ZXIoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERUxJTUlURVIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRlbGltaXRlci4KICAgICAgKgotICAgICAqIEBwYXJhbQlkZWxpbQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREZWxpbWl0ZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRlbGltICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERlbGltaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXREZWxpbWl0ZXIoU3RyaW5nIGRlbGltKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUiwgZGVsaW0pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRlbGltaXRlci4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGVsaW0KLSAgICAgKiBAc2VlCTxjb2RlPnNldERlbGltaXRlcjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRlbGltCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREZWxpbWl0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXREZWxpbWl0ZXIoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERUxJTUlURVIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRyaXZlciBzcGVjaWZpYyBwcm9wZXJ0aWVzLgogICAgICAqCi0gICAgICogQHBhcmFtCWRyaXZlclByb3BzCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRyaXZlclByb3BzICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0ZHJpdmVyUHJvcGVydGllcyhTdHJpbmcgZHJpdmVyUHJvcHMpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuRFJJVkVSUFJPUEVSVElFUywgZHJpdmVyUHJvcHMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRyaXZlciBzcGVjaWZpYyBwcm9wZXJ0aWVzLgogICAgICAqCi0gICAgICogQHJldHVybglkcml2ZXJQcm9wcwotICAgICAqIEBzZWUJPGNvZGU+c2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRyaXZlclByb3BzCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0ZHJpdmVyUHJvcGVydGllcygpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRSSVZFUlBST1BFUlRJRVMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRyaXZlciBzcGVjaWZpYyBwcm9wZXJ0aWVzLgogICAgICAqCi0gICAgICogQHBhcmFtCWRyaXZlclByb3BzCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRyaXZlclByb3BzICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RHJpdmVyUHJvcGVydGllcyhTdHJpbmcgZHJpdmVyUHJvcHMpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuRFJJVkVSUFJPUEVSVElFUywgZHJpdmVyUHJvcHMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRyaXZlciBzcGVjaWZpYyBwcm9wZXJ0aWVzLgogICAgICAqCi0gICAgICogQHJldHVybglkcml2ZXJQcm9wcwotICAgICAqIEBzZWUJPGNvZGU+c2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRyaXZlclByb3BzCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RHJpdmVyUHJvcGVydGllcygpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRSSVZFUlBST1BFUlRJRVMpOwpAQCAtNTM4LDE5ICs1MzgsMTkgQEAKIAogICAgIHB1YmxpYyBEb3VibGUgZ2V0Tm9uU3RyaW5nV2l0aE5vT3ZlcnJpZGRlblNldHRlcigpewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IDogZ2V0Tm9uU3RyaW5nV2l0aE5vT3ZlcnJpZGRlblNldHRlcigpIGNhbGxlZCIpOwotCXJldHVybiB0aGlzLm5vblN0cmluZ1dpdGhOb092ZXJyaWRkZW5TZXR0ZXI7CisgICAgcmV0dXJuIHRoaXMubm9uU3RyaW5nV2l0aE5vT3ZlcnJpZGRlblNldHRlcjsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXROb25TdHJpbmdXaXRoTm9PdmVycmlkZGVuU2V0dGVyKERvdWJsZSBkYmwpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSA6IHNldE5vblN0cmluZ1dpdGhOb092ZXJyaWRkZW5TZXR0ZXIoKSBjYWxsZWQiKTsKLQl0aGlzLm5vblN0cmluZ1dpdGhOb092ZXJyaWRkZW5TZXR0ZXIgPSBkYmw7CisgICAgdGhpcy5ub25TdHJpbmdXaXRoTm9PdmVycmlkZGVuU2V0dGVyID0gZGJsOwogICAgIH0KIAogICAgIHB1YmxpYyBEb3VibGUgZ2V0Tm9uU3RyaW5nV2l0aE92ZXJyaWRkZW5TZXR0ZXIoKXsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSA6IGdldE5vblN0cmluZ1dpdGhPdmVycmlkZGVuU2V0dGVyKCkgY2FsbGVkIik7CiAgICAgICAgIHJldHVybiB0aGlzLm5vblN0cmluZ1dpdGhPdmVycmlkZGVuU2V0dGVyOwogICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXROb25TdHJpbmdXaXRoT3ZlcnJpZGRlblNldHRlcihEb3VibGUgZGJsKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgOiBzZXROb25TdHJpbmdXaXRoT3ZlcnJpZGRlblNldHRlcihEb3VibGUpIGNhbGxlZCIpOwogICAgICAgICB0aGlzLm5vblN0cmluZ1dpdGhPdmVycmlkZGVuU2V0dGVyID0gZGJsOwpAQCAtNTY3LDM1ICs1NjcsMzUgQEAKICAgICAgKiBDaGVjayBpZiB0aGUgUGFzc3dvcmRDcmVkZW50aWFsIHBhc3NlZCBmb3IgdGhpcyBnZXQgY29ubmVjdGlvbgogICAgICAqIHJlcXVlc3QgaXMgZXF1YWwgdG8gdGhlIHVzZXIvcGFzc3dkIG9mIHRoaXMgY29ubmVjdGlvbiBwb29sLgogICAgICAqLwotICAgIHByaXZhdGUgYm9vbGVhbiBpc0VxdWFsKCBQYXNzd29yZENyZWRlbnRpYWwgcGMsIFN0cmluZyB1c2VyLCAKKyAgICBwcml2YXRlIGJvb2xlYW4gaXNFcXVhbCggUGFzc3dvcmRDcmVkZW50aWFsIHBjLCBTdHJpbmcgdXNlciwKICAgICAgICAgU3RyaW5nIHBhc3N3b3JkKSB7Ci0gICAgICAgIAotCS8vaWYgZXF1YWwgZ2V0IGRpcmVjdCBjb25uZWN0aW9uIGVsc2UgCi0JLy9nZXQgY29ubmVjdGlvbiB3aXRoIHVzZXIgYW5kIHBhc3N3b3JkLgotCQotCWlmICh1c2VyID09IG51bGwgJiYgcGMgPT0gbnVsbCkgewotCSAgICByZXR1cm4gdHJ1ZTsKLQl9Ci0JCi0JaWYgKCB1c2VyID09IG51bGwgJiYgcGMgIT0gbnVsbCApIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQl9CiAKLQlpZiggcGMgPT0gbnVsbCApIHsKLQkgICAgcmV0dXJuIHRydWU7Ci0JfQotCQotCWlmICggdXNlci5lcXVhbHMoIHBjLmdldFVzZXJOYW1lKCkgKSApIHsKLQkgICAgaWYgKCBwYXNzd29yZCA9PSBudWxsICYmIHBjLmdldFBhc3N3b3JkKCkgPT0gbnVsbCApIHsKLQkgICAgICAgIHJldHVybiB0cnVlOwotCSAgICB9Ci0JfQotCQotCWlmICggdXNlci5lcXVhbHMocGMuZ2V0VXNlck5hbWUoKSkgJiYgcGFzc3dvcmQuZXF1YWxzKHBjLmdldFBhc3N3b3JkKCkpICkgewotCSAgICByZXR1cm4gdHJ1ZTsKLQl9IAotCQotICAgICAgICAKLQlyZXR1cm4gZmFsc2U7CisgICAgLy9pZiBlcXVhbCBnZXQgZGlyZWN0IGNvbm5lY3Rpb24gZWxzZQorICAgIC8vZ2V0IGNvbm5lY3Rpb24gd2l0aCB1c2VyIGFuZCBwYXNzd29yZC4KKworICAgIGlmICh1c2VyID09IG51bGwgJiYgcGMgPT0gbnVsbCkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIHVzZXIgPT0gbnVsbCAmJiBwYyAhPSBudWxsICkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmKCBwYyA9PSBudWxsICkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIHVzZXIuZXF1YWxzKCBwYy5nZXRVc2VyTmFtZSgpICkgKSB7CisgICAgICAgIGlmICggcGFzc3dvcmQgPT0gbnVsbCAmJiBwYy5nZXRQYXNzd29yZCgpID09IG51bGwgKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICggdXNlci5lcXVhbHMocGMuZ2V0VXNlck5hbWUoKSkgJiYgcGFzc3dvcmQuZXF1YWxzKHBjLmdldFBhc3N3b3JkKCkpICkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKworICAgIHJldHVybiBmYWxzZTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RhdGFTb3VyY2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRGF0YVNvdXJjZS5qYXZhCmluZGV4IDIwNjg0MzAuLjczOWZmNGQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRGF0YVNvdXJjZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRGF0YVNvdXJjZS5qYXZhCkBAIC0yOCwyMiArMjgsMjIgQEAKIGltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7CiBpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7CiAvKioKLSAqIEhvbGRzIHRoZSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QsIHdoaWNoIGlzIHRvIGJlIAorICogSG9sZHMgdGhlIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCwgd2hpY2ggaXMgdG8gYmUKICAqIHBhc3NlZCB0byB0aGUgYXBwbGljYXRpb24gcHJvZ3JhbS4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzMxCi0gKiBAYXV0aG9yCUJpbm9kIFAuRworICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8zMQorICogQGF1dGhvciAgICBCaW5vZCBQLkcKICAqLwogcHVibGljIGNsYXNzIERhdGFTb3VyY2UgaW1wbGVtZW50cyBqYXZheC5zcWwuRGF0YVNvdXJjZSwgamF2YS5pby5TZXJpYWxpemFibGUsCi0JCWNvbS5zdW4uYXBwc2Vydi5qZGJjcmEuRGF0YVNvdXJjZSwgamFrYXJ0YS5yZXNvdXJjZS5SZWZlcmVuY2VhYmxleyAKLQkJCQkgICAKKyAgICAgICAgY29tLnN1bi5hcHBzZXJ2LmpkYmNyYS5EYXRhU291cmNlLCBqYWthcnRhLnJlc291cmNlLlJlZmVyZW5jZWFibGV7CisKICAgICBwcml2YXRlIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2Y7Ci0gICAgcHJpdmF0ZSBDb25uZWN0aW9uTWFuYWdlciBjbTsJCQkJICAgCQkJCSAgIAorICAgIHByaXZhdGUgQ29ubmVjdGlvbk1hbmFnZXIgY207CiAgICAgcHJpdmF0ZSBpbnQgbG9naW5UaW1lb3V0OwogICAgIHByaXZhdGUgUHJpbnRXcml0ZXIgbG9nV3JpdGVyOwotICAgIHByaXZhdGUgU3RyaW5nIGRlc2NyaXB0aW9uOwkJCQkgICAKKyAgICBwcml2YXRlIFN0cmluZyBkZXNjcmlwdGlvbjsKICAgICBwcml2YXRlIFJlZmVyZW5jZSByZWZlcmVuY2U7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBMb2dnZXIgX2xvZ2dlcjsKICAgICBzdGF0aWMgewogICAgICAgICBfbG9nZ2VyID0gTG9nZ2VyLmdldEFub255bW91c0xvZ2dlcigpOwpAQCAtNTEsNTcgKzUxLDU3IEBACiAgICAgcHJpdmF0ZSBib29sZWFuIGRlYnVnID0gZmFsc2U7CiAKICAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdC4gVGhpcyBpcyBjcmVhdGVkIGJ5IHRoZSAKKyAgICAgKiBDb25zdHJ1Y3RzIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdC4gVGhpcyBpcyBjcmVhdGVkIGJ5IHRoZQogICAgICAqIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0LgogICAgICAqCi0gICAgICogQHBhcmFtCW1jZgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdCAKLSAgICAgKgkJCWNyZWF0aW5nIHRoaXMgb2JqZWN0LgotICAgICAqIEBwYXJhbQljbQk8Y29kZT5Db25uZWN0aW9uTWFuYWdlcjwvY29kZT4gb2JqZWN0IGVpdGhlciBhc3NvY2lhdGVkCi0gICAgICoJCQl3aXRoIEFwcGxpY2F0aW9uIHNlcnZlciBvciBSZXNvdXJjZSBBZGFwdGVyLgorICAgICAqIEBwYXJhbSAgICBtY2YgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QKKyAgICAgKiAgICAgICAgICAgIGNyZWF0aW5nIHRoaXMgb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBjbSAgICA8Y29kZT5Db25uZWN0aW9uTWFuYWdlcjwvY29kZT4gb2JqZWN0IGVpdGhlciBhc3NvY2lhdGVkCisgICAgICogICAgICAgICAgICB3aXRoIEFwcGxpY2F0aW9uIHNlcnZlciBvciBSZXNvdXJjZSBBZGFwdGVyLgogICAgICAqLwogICAgIHB1YmxpYyBEYXRhU291cmNlIChNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmLCBDb25uZWN0aW9uTWFuYWdlciBjbSkgewotICAgIAl0aGlzLm1jZiA9IG1jZjsKLSAgICAJaWYgKGNtID09IG51bGwpIHsKLSAgICAJICAgIHRoaXMuY20gPSAoQ29ubmVjdGlvbk1hbmFnZXIpIG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbk1hbmFnZXIoKTsKLSAgICAJfSBlbHNlIHsKLSAgICAJICAgIHRoaXMuY20gPSBjbTsKLSAgICAJfSAgICAJCi0gICAgfSAgIAotICAgIAorICAgICAgICB0aGlzLm1jZiA9IG1jZjsKKyAgICAgICAgaWYgKGNtID09IG51bGwpIHsKKyAgICAgICAgICAgIHRoaXMuY20gPSAoQ29ubmVjdGlvbk1hbmFnZXIpIG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbk1hbmFnZXIoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuY20gPSBjbTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QuCi0gICAgICogCi0gICAgICogQHJldHVybgk8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGFuIGVycm9yLiAgICAgIAorICAgICAqCisgICAgICogQHJldHVybiAgICA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGFuIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBDb25uZWN0aW9uIGdldENvbm5lY3Rpb24oKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLSAgICAJdHJ5IHsKLSAgICAJICAgIHJldHVybiAoQ29ubmVjdGlvbikgY20uYWxsb2NhdGVDb25uZWN0aW9uKG1jZixudWxsKTsgICAgCSAgICAKLSAgICAJfSBjYXRjaCAoUmVzb3VyY2VFeGNlcHRpb24gcmUpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJldHVybiAoQ29ubmVjdGlvbikgY20uYWxsb2NhdGVDb25uZWN0aW9uKG1jZixudWxsKTsKKyAgICAgICAgfSBjYXRjaCAoUmVzb3VyY2VFeGNlcHRpb24gcmUpIHsKIC8vIFRoaXMgaXMgdGVtcG9yYXJ5LiBUaGlzIG5lZWRzIHRvIGJlIGNoYW5nZWQgdG8gU0VWRVJFIGFmdGVyIFRQCi0JICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLmV4Y19nZXRfY29ubiIsIHJlLmdldE1lc3NhZ2UoKSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uIChyZS5nZXRNZXNzYWdlKCkpOwotICAgIAl9CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLmV4Y19nZXRfY29ubiIsIHJlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uIChyZS5nZXRNZXNzYWdlKCkpOworICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JdXNlcglVc2VyIG5hbWUgZm9yIHRoZSBDb25uZWN0aW9uLgotICAgICAqIEBwYXJhbQlwd2QJUGFzc3dvcmQgZm9yIHRoZSBDb25uZWN0aW9uLgotICAgICAqIEByZXR1cm4JPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhbiBlcnJvci4gICAgICAKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICB1c2VyICAgIFVzZXIgbmFtZSBmb3IgdGhlIENvbm5lY3Rpb24uCisgICAgICogQHBhcmFtICAgIHB3ZCAgICBQYXNzd29yZCBmb3IgdGhlIENvbm5lY3Rpb24uCisgICAgICogQHJldHVybiAgICA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGFuIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBDb25uZWN0aW9uIGdldENvbm5lY3Rpb24oU3RyaW5nIHVzZXIsIFN0cmluZyBwd2QpIHRocm93cyBTUUxFeGNlcHRpb24gewotICAgIAl0cnkgewotICAgIAkgICAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGluZm8gPSBuZXcgQ29ubmVjdGlvblJlcXVlc3RJbmZvICh1c2VyLCBwd2QpOwotICAgIAkgICAgcmV0dXJuIChDb25uZWN0aW9uKSBjbS5hbGxvY2F0ZUNvbm5lY3Rpb24obWNmLGluZm8pOwotICAgIAl9IGNhdGNoIChSZXNvdXJjZUV4Y2VwdGlvbiByZSkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGluZm8gPSBuZXcgQ29ubmVjdGlvblJlcXVlc3RJbmZvICh1c2VyLCBwd2QpOworICAgICAgICAgICAgcmV0dXJuIChDb25uZWN0aW9uKSBjbS5hbGxvY2F0ZUNvbm5lY3Rpb24obWNmLGluZm8pOworICAgICAgICB9IGNhdGNoIChSZXNvdXJjZUV4Y2VwdGlvbiByZSkgewogLy8gVGhpcyBpcyB0ZW1wb3JhcnkuIFRoaXMgbmVlZHMgdG8gYmUgY2hhbmdlZCB0byBTRVZFUkUgYWZ0ZXIgVFAKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMuZXhjX2dldF9jb25uIiwgcmUuZ2V0TWVzc2FnZSgpKTsKLSAgICAJICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKHJlLmdldE1lc3NhZ2UoKSk7Ci0gICAgCX0KLSAgICB9ICAgIAorICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5leGNfZ2V0X2Nvbm4iLCByZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAocmUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgfQorICAgIH0KIAogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIFNRTENvbm5lY3Rpb24gZnJvbSB0aGUgQ29ubmVjdGlvbiB3cmFwcGVyCkBAIC0xMTQsOTEgKzExNCw5MSBAQAogICAgICAqLwogICAgIHB1YmxpYyBDb25uZWN0aW9uIGdldENvbm5lY3Rpb24oQ29ubmVjdGlvbiBjb24pIHRocm93cyBTUUxFeGNlcHRpb24gewogCi0gICAgICAgIENvbm5lY3Rpb24gZHJpdmVyQ29uID0gY29uOyAKKyAgICAgICAgQ29ubmVjdGlvbiBkcml2ZXJDb24gPSBjb247CiAgICAgICAgIGlmIChjb24gaW5zdGFuY2VvZiBjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbkhvbGRlcikgewotICAgICAgICAgICBkcml2ZXJDb24gPSAoKGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uSG9sZGVyKSBjb24pLmdldENvbm5lY3Rpb24oKTsgCi0gICAgICAgIH0gCisgICAgICAgICAgIGRyaXZlckNvbiA9ICgoY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25Ib2xkZXIpIGNvbikuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIGRyaXZlckNvbjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXQgdGhlIGxvZ2luIHRpbWVvdXQKICAgICAgKgogICAgICAqIEByZXR1cm4gbG9naW4gdGltZW91dC4KLSAgICAgKiBAdGhyb3dzCVNRTEV4Y2VwdGlvbglJZiBhIGRhdGFiYXNlIGVycm9yIG9jY3Vycy4KKyAgICAgKiBAdGhyb3dzICAgIFNRTEV4Y2VwdGlvbiAgICBJZiBhIGRhdGFiYXNlIGVycm9yIG9jY3Vycy4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldExvZ2luVGltZW91dCgpIHRocm93cyBTUUxFeGNlcHRpb257Ci0gICAgCXJldHVybglsb2dpblRpbWVvdXQ7CisgICAgICAgIHJldHVybiAgICBsb2dpblRpbWVvdXQ7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0IHRoZSBsb2dpbiB0aW1lb3V0CiAgICAgICoKLSAgICAgKiBAcGFyYW0JbG9naW5UaW1lb3V0CUxvZ2luIHRpbWVvdXQuCi0gICAgICogQHRocm93cwlTUUxFeGNlcHRpb24JSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCisgICAgICogQHBhcmFtICAgIGxvZ2luVGltZW91dCAgICBMb2dpbiB0aW1lb3V0LgorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIElmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldExvZ2luVGltZW91dChpbnQgbG9naW5UaW1lb3V0KSB0aHJvd3MgU1FMRXhjZXB0aW9uewotICAgIAl0aGlzLmxvZ2luVGltZW91dCA9IGxvZ2luVGltZW91dDsKKyAgICAgICAgdGhpcy5sb2dpblRpbWVvdXQgPSBsb2dpblRpbWVvdXQ7CiAgICAgfQotICAgIAotICAgIC8qKiAKKworICAgIC8qKgogICAgICAqIEdldCB0aGUgbG9nd3JpdGVyIG9iamVjdC4KICAgICAgKgogICAgICAqIEByZXR1cm4gPGNvZGU+IFByaW50V3JpdGVyIDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MJU1FMRXhjZXB0aW9uCUlmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIElmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgogICAgICAqLwogICAgIHB1YmxpYyBQcmludFdyaXRlciBnZXRMb2dXcml0ZXIoKSB0aHJvd3MgU1FMRXhjZXB0aW9uewotICAgIAlyZXR1cm4JbG9nV3JpdGVyOworICAgICAgICByZXR1cm4gICAgbG9nV3JpdGVyOwogICAgIH0KLSAgICAgICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGxvZ3dyaXRlciBvbiB0aGlzIG9iamVjdC4KICAgICAgKgogICAgICAqIEBwYXJhbSA8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MJU1FMRXhjZXB0aW9uCUlmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIElmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldExvZ1dyaXRlcihQcmludFdyaXRlciBsb2dXcml0ZXIpIHRocm93cyBTUUxFeGNlcHRpb257Ci0gICAgCXRoaXMubG9nV3JpdGVyID0gbG9nV3JpdGVyOwotICAgIH0gICAgICAgIAotICAgICAgICAKKyAgICAgICAgdGhpcy5sb2dXcml0ZXIgPSBsb2dXcml0ZXI7CisgICAgfQorCiAgICAgcHVibGljIExvZ2dlciBnZXRQYXJlbnRMb2dnZXIoKSB0aHJvd3MgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbnsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgZmVhdHVyZS4iKTsKICAgICB9CiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBkZXNjcmlwdGlvbi4KICAgICAgKgotICAgICAqIEByZXR1cm4JRGVzY3JpcHRpb24gYWJvdXQgdGhlIERhdGFTb3VyY2UuCisgICAgICogQHJldHVybiAgICBEZXNjcmlwdGlvbiBhYm91dCB0aGUgRGF0YVNvdXJjZS4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgewotICAgIAlyZXR1cm4gZGVzY3JpcHRpb247CisgICAgICAgIHJldHVybiBkZXNjcmlwdGlvbjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGRlc2NyaXB0aW9uLgogICAgICAqCiAgICAgICogQHBhcmFtIGRlc2NyaXB0aW9uIERlc2NyaXB0aW9uIGFib3V0IHRoZSBEYXRhU291cmNlLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERlc2NyaXB0aW9uKFN0cmluZyBkZXNjcmlwdGlvbikgewotICAgIAl0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247Ci0gICAgfSAgICAKLSAgICAKKyAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOworICAgIH0KKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgcmVmZXJlbmNlLgogICAgICAqCiAgICAgICogQHJldHVybiA8Y29kZT5SZWZlcmVuY2U8L2NvZGU+b2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyBSZWZlcmVuY2UgZ2V0UmVmZXJlbmNlKCkgewotICAgIAlyZXR1cm4gcmVmZXJlbmNlOworICAgICAgICByZXR1cm4gcmVmZXJlbmNlOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgcmVmZXJlbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCXJlZmVyZW5jZSA8Y29kZT5SZWZlcmVuY2U8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgcmVmZXJlbmNlIDxjb2RlPlJlZmVyZW5jZTwvY29kZT4gb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFJlZmVyZW5jZShSZWZlcmVuY2UgcmVmZXJlbmNlKSB7Ci0gICAgCXRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlOworICAgICAgICB0aGlzLnJlZmVyZW5jZSA9IHJlZmVyZW5jZTsKICAgICB9CiAKICAgICBwdWJsaWMgPFQ+IFQgdW53cmFwKENsYXNzPFQ+IGlmYWNlKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW4uamF2YQppbmRleCA1NzRlZDY2Li5iZWMwZDZiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbi5qYXZhCkBAIC0xOCwxMyArMTgsMTMgQEAKIAogcHVibGljIGludGVyZmFjZSBKZGJjU2V0dXBBZG1pbiB7CiAKLSAgICBwdWJsaWMgdm9pZCBzZXRUYWJsZU5hbWUoU3RyaW5nIGRiKTsgCisgICAgcHVibGljIHZvaWQgc2V0VGFibGVOYW1lKFN0cmluZyBkYik7CiAKICAgICBwdWJsaWMgU3RyaW5nIGdldFRhYmxlTmFtZSgpOwogCi0gICAgcHVibGljIHZvaWQgc2V0Sm5kaU5hbWUoU3RyaW5nIG5hbWUpOyAKKyAgICBwdWJsaWMgdm9pZCBzZXRKbmRpTmFtZShTdHJpbmcgbmFtZSk7CiAKLSAgICBwdWJsaWMgU3RyaW5nIGdldEpuZGlOYW1lKCk7IAorICAgIHB1YmxpYyBTdHJpbmcgZ2V0Sm5kaU5hbWUoKTsKIAogICAgIHB1YmxpYyB2b2lkIHNldFNjaGVtYU5hbWUoU3RyaW5nIG5hbWUpOwogCkBAIC0zNCw2ICszNCw2IEBACiAKICAgICBwdWJsaWMgSW50ZWdlciBnZXROb09mUm93cygpOwogCi0gICAgcHVibGljIGJvb2xlYW4gY2hlY2tTZXR1cCgpOyAKKyAgICBwdWJsaWMgYm9vbGVhbiBjaGVja1NldHVwKCk7CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW5JbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluSW1wbC5qYXZhCmluZGV4IDNiZDdjYWQuLmZlYzc0NDMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW5JbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbkltcGwuamF2YQpAQCAtNjUsMTEgKzY1LDExIEBACiAKIHByaXZhdGUgdm9pZCBwcmludEhpZXJhcmNoeShDbGFzc0xvYWRlciBjbCwgaW50IGNudCl7CiB3aGlsZShjbCAhPSBudWxsKSB7Ci0JZm9yKGludCBpID0wOyBpIDwgY250OyBpKyspIAotCQlTeXN0ZW0ub3V0LnByaW50KCIgIiApOwotCVN5c3RlbS5vdXQucHJpbnRsbigiUEFSRU5UIDoiICsgY2wpOwotCWNsID0gY2wuZ2V0UGFyZW50KCk7Ci0JY250ICs9IDM7CisgICAgZm9yKGludCBpID0wOyBpIDwgY250OyBpKyspCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIiAiICk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJQQVJFTlQgOiIgKyBjbCk7CisgICAgY2wgPSBjbC5nZXRQYXJlbnQoKTsKKyAgICBjbnQgKz0gMzsKIH0KIH0KIApAQCAtNzgsMTAgKzc4LDEwIEBACiAgICAgICAgIGZvcihpbnQgaSA9MDsgaSA8IGNudDsgaSsrKQogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIiAiICk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUEFSRU5UIG9mIENsYXNzTG9hZGVyIDEgOiIgKyBjbDEpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiUEFSRU5UIG9mIENsYXNzTG9hZGVyIDIgOiIgKyBjbDIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiRVFVQUxTIDogIiArIChjbDEgPT0gY2wyKSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJQQVJFTlQgb2YgQ2xhc3NMb2FkZXIgMiA6IiArIGNsMik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJFUVVBTFMgOiAiICsgKGNsMSA9PSBjbDIpKTsKICAgICAgICAgY2wxID0gY2wxLmdldFBhcmVudCgpOwotCWNsMiA9IGNsMi5nZXRQYXJlbnQoKTsKKyAgICBjbDIgPSBjbDIuZ2V0UGFyZW50KCk7CiAgICAgICAgIGNudCArPSAzOwogfQogfQpAQCAtOTAsOTMgKzkwLDkzIEBACiAgICAgcHVibGljIGJvb2xlYW4gY2hlY2tTZXR1cCgpewogCiAgICAgICAgIGlmIChqbmRpTmFtZT09IG51bGwgfHwgam5kaU5hbWUudHJpbSgpLmVxdWFscygiIikpIHsKLQkgICByZXR1cm4gZmFsc2U7Ci0JfQorICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAgICAgICAgaWYgKHRhYmxlTmFtZT09IG51bGwgfHwgdGFibGVOYW1lLnRyaW0oKS5lcXVhbHMoIiIpKSB7Ci0JICAgcmV0dXJuIGZhbHNlOwotCX0KKyAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgICAgIENvbm5lY3Rpb24gY29uID0gbnVsbDsKLQlTdGF0ZW1lbnQgcyA9IG51bGw7Ci0JUmVzdWx0U2V0IHJzID0gbnVsbDsKLQlib29sZWFuIGIgPSBmYWxzZTsKKyAgICBTdGF0ZW1lbnQgcyA9IG51bGw7CisgICAgUmVzdWx0U2V0IHJzID0gbnVsbDsKKyAgICBib29sZWFuIGIgPSBmYWxzZTsKICAgICAgICAgdHJ5IHsKLQkgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkvL2RlYnVnCi0JQ2xhc3MgY2x6ID0gRGF0YVNvdXJjZS5jbGFzczsKKyAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAvL2RlYnVnCisgICAgQ2xhc3MgY2x6ID0gRGF0YVNvdXJjZS5jbGFzczsKIC8qCi0JaWYoY2x6LmdldENsYXNzTG9hZGVyKCkgIT0gbnVsbCkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkRhdGFTb3VyY2UncyBjbGFzeHMgOiAiICsgIGNsei5nZXROYW1lKCkgKyAgIiBjbGFzc2xvYWRlciAiICsgY2x6LmdldENsYXNzTG9hZGVyKCkpOwotCQlwcmludEhpZXJhcmNoeShjbHouZ2V0Q2xhc3NMb2FkZXIoKS5nZXRQYXJlbnQoKSwgOCk7Ci0JfQotCUNsYXNzIGNscyA9IGljLmxvb2t1cChqbmRpTmFtZSkuZ2V0Q2xhc3MoKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tlZCB1cCBjbGFzcydzIDogIiArIGNscy5nZXRQYWNrYWdlKCkgKyAiOiIgKyBjbHMuZ2V0TmFtZSgpICArICIgY2xhc3Nsb2FkZXIgIiAgKyBjbHMuZ2V0Q2xhc3NMb2FkZXIoKSk7Ci0JcHJpbnRIaWVyYXJjaHkoY2xzLmdldENsYXNzTG9hZGVyKCkuZ2V0UGFyZW50KCksIDgpOworICAgIGlmKGNsei5nZXRDbGFzc0xvYWRlcigpICE9IG51bGwpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEYXRhU291cmNlJ3MgY2xhc3hzIDogIiArICBjbHouZ2V0TmFtZSgpICsgICIgY2xhc3Nsb2FkZXIgIiArIGNsei5nZXRDbGFzc0xvYWRlcigpKTsKKyAgICAgICAgcHJpbnRIaWVyYXJjaHkoY2x6LmdldENsYXNzTG9hZGVyKCkuZ2V0UGFyZW50KCksIDgpOworICAgIH0KKyAgICBDbGFzcyBjbHMgPSBpYy5sb29rdXAoam5kaU5hbWUpLmdldENsYXNzKCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29rZWQgdXAgY2xhc3MncyA6ICIgKyBjbHMuZ2V0UGFja2FnZSgpICsgIjoiICsgY2xzLmdldE5hbWUoKSAgKyAiIGNsYXNzbG9hZGVyICIgICsgY2xzLmdldENsYXNzTG9hZGVyKCkpOworICAgIHByaW50SGllcmFyY2h5KGNscy5nZXRDbGFzc0xvYWRlcigpLmdldFBhcmVudCgpLCA4KTsKIAotCVN5c3RlbS5vdXQucHJpbnRsbigiQ2xhc3Nsb2FkZXJzIGVxdWFsID8gIiArICAoY2x6LmdldENsYXNzTG9hZGVyKCkgPT0gY2xzLmdldENsYXNzTG9hZGVyKCkpKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIiYqJiomKiYqIENvbXBhcmluZyBIaWVyYWNoeSBEYXRhU291cmNlIHZzIGxvb2tlZHVwIik7Ci0JaWYoY2x6LmdldENsYXNzTG9hZGVyKCkgIT0gbnVsbCkgewotCQljb21wYXJlSGllcmFyY2h5KGNsei5nZXRDbGFzc0xvYWRlcigpLCBjbHMuZ2V0Q2xhc3NMb2FkZXIoKSwgOCk7Ci0JfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2xhc3Nsb2FkZXJzIGVxdWFsID8gIiArICAoY2x6LmdldENsYXNzTG9hZGVyKCkgPT0gY2xzLmdldENsYXNzTG9hZGVyKCkpKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiYqJiomKiYqIENvbXBhcmluZyBIaWVyYWNoeSBEYXRhU291cmNlIHZzIGxvb2tlZHVwIik7CisgICAgaWYoY2x6LmdldENsYXNzTG9hZGVyKCkgIT0gbnVsbCkgeworICAgICAgICBjb21wYXJlSGllcmFyY2h5KGNsei5nZXRDbGFzc0xvYWRlcigpLCBjbHMuZ2V0Q2xhc3NMb2FkZXIoKSwgOCk7CisgICAgfQogCi0JU3lzdGVtLm91dC5wcmludGxuKCJCZWZvcmUgbG9va3VwIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJCZWZvcmUgbG9va3VwIik7CiAqLwotCU9iamVjdCBvID0gaWMubG9va3VwKGpuZGlOYW1lKTsKLS8vCVN5c3RlbS5vdXQucHJpbnRsbigiYWZ0ZXIgbG9va3VwIGxvb2t1cCIpOworICAgIE9iamVjdCBvID0gaWMubG9va3VwKGpuZGlOYW1lKTsKKy8vICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYWZ0ZXIgbG9va3VwIGxvb2t1cCIpOwogCi0JICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSlvIDsKKyAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKW8gOwogLyoKLQlTeXN0ZW0ub3V0LnByaW50bG4oImFmdGVyIGNhc3QiKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0gVHJ5aW5nIG91ciBTdHVmZiAhISEiKTsKLQl0cnkgewotCQlDbGFzcyBvMSA9IChDbGFzcy5mb3JOYW1lKCJjb20uc3VuLmpkYmNyYS5zcGkuRGF0YVNvdXJjZSIpKTsKLQkJQ2xhc3NMb2FkZXIgY2wxID0gbzEuZ2V0Q2xhc3NMb2FkZXIoKTsKLQkJQ2xhc3NMb2FkZXIgY2wyID0gRGF0YVNvdXJjZS5jbGFzcy5nZXRDbGFzc0xvYWRlcigpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNsMSA9PSBDbDIiICsgKGNsMSA9PSBjbDIpKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJDbGFzc2VzIGVxdWFsIiArIChEYXRhU291cmNlLmNsYXNzID09IG8xKSk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCWV4LnByaW50U3RhY2tUcmFjZSgpOwotCX0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImFmdGVyIGNhc3QiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0gVHJ5aW5nIG91ciBTdHVmZiAhISEiKTsKKyAgICB0cnkgeworICAgICAgICBDbGFzcyBvMSA9IChDbGFzcy5mb3JOYW1lKCJjb20uc3VuLmpkYmNyYS5zcGkuRGF0YVNvdXJjZSIpKTsKKyAgICAgICAgQ2xhc3NMb2FkZXIgY2wxID0gbzEuZ2V0Q2xhc3NMb2FkZXIoKTsKKyAgICAgICAgQ2xhc3NMb2FkZXIgY2wyID0gRGF0YVNvdXJjZS5jbGFzcy5nZXRDbGFzc0xvYWRlcigpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNsMSA9PSBDbDIiICsgKGNsMSA9PSBjbDIpKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDbGFzc2VzIGVxdWFsIiArIChEYXRhU291cmNlLmNsYXNzID09IG8xKSk7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KICovCiAgICAgICAgICAgICBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIFN0cmluZyBmdWxsVGFibGVOYW1lID0gdGFibGVOYW1lOwotCSAgICBpZiAoc2NoZW1hTmFtZSAhPSBudWxsICYmICghKHNjaGVtYU5hbWUudHJpbSgpLmVxdWFscygiIikpKSkgewotCSAgICAgICAgZnVsbFRhYmxlTmFtZSA9IHNjaGVtYU5hbWUudHJpbSgpICsgIi4iICsgZnVsbFRhYmxlTmFtZTsKLQkgICAgfQotCSAgICBTdHJpbmcgcXJ5ID0gInNlbGVjdCAqIGZyb20gIiArIGZ1bGxUYWJsZU5hbWU7IAorICAgICAgICBTdHJpbmcgZnVsbFRhYmxlTmFtZSA9IHRhYmxlTmFtZTsKKyAgICAgICAgaWYgKHNjaGVtYU5hbWUgIT0gbnVsbCAmJiAoIShzY2hlbWFOYW1lLnRyaW0oKS5lcXVhbHMoIiIpKSkpIHsKKyAgICAgICAgICAgIGZ1bGxUYWJsZU5hbWUgPSBzY2hlbWFOYW1lLnRyaW0oKSArICIuIiArIGZ1bGxUYWJsZU5hbWU7CisgICAgICAgIH0KKyAgICAgICAgU3RyaW5nIHFyeSA9ICJzZWxlY3QgKiBmcm9tICIgKyBmdWxsVGFibGVOYW1lOwogCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhlY3V0aW5nIHF1ZXJ5IDoiICsgcXJ5KTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGVjdXRpbmcgcXVlcnkgOiIgKyBxcnkpOwogCi0JICAgIHMgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7Ci0JICAgIHJzID0gcy5leGVjdXRlUXVlcnkocXJ5KTsgCisgICAgICAgIHMgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgIHJzID0gcy5leGVjdXRlUXVlcnkocXJ5KTsKIAogICAgICAgICAgICAgaW50IGkgPSAwOwotCSAgICBpZiAocnMubmV4dCgpKSB7Ci0JICAgICAgICBpKys7Ci0JICAgIH0KKyAgICAgICAgaWYgKHJzLm5leHQoKSkgeworICAgICAgICAgICAgaSsrOworICAgICAgICB9CiAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTm8gb2Ygcm93cyBmb3VuZDoiICsgaSk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk5vIG9mIHJvd3MgZXhwZWN0ZWQ6IiArIG5vT2ZSb3dzKTsKIAotCSAgICBpZiAoaSA9PSBub09mUm93cy5pbnRWYWx1ZSgpKSB7Ci0JICAgICAgIGIgPSB0cnVlOwotCSAgICB9IGVsc2UgewotCSAgICAgICBiID0gZmFsc2U7Ci0JICAgIH0KLQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIGIgPSBmYWxzZTsKLQl9IGZpbmFsbHkgewotCSAgICB0cnkgewotCSAgICAgICAgaWYgKHJzICE9IG51bGwpIHJzLmNsb3NlKCk7Ci0JICAgICAgICBpZiAocyAhPSBudWxsKSBzLmNsb3NlKCk7Ci0JICAgICAgICBpZiAoY29uICE9IG51bGwpIGNvbi5jbG9zZSgpOworICAgICAgICBpZiAoaSA9PSBub09mUm93cy5pbnRWYWx1ZSgpKSB7CisgICAgICAgICAgIGIgPSB0cnVlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICBiID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIGIgPSBmYWxzZTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgaWYgKHJzICE9IG51bGwpIHJzLmNsb3NlKCk7CisgICAgICAgICAgICBpZiAocyAhPSBudWxsKSBzLmNsb3NlKCk7CisgICAgICAgICAgICBpZiAoY29uICE9IG51bGwpIGNvbi5jbG9zZSgpOwogICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgfQotCX0KLQlTeXN0ZW0ub3V0LnByaW50bG4oIlJldHVybmluZyBzZXR1cCA6IiArYik7Ci0JcmV0dXJuIGI7CisgICAgICAgIH0KKyAgICB9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXR1cm5pbmcgc2V0dXAgOiIgK2IpOworICAgIHJldHVybiBiOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Mb2NhbFRyYW5zYWN0aW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0xvY2FsVHJhbnNhY3Rpb24uamF2YQppbmRleCA4ZWJlMDU3Li5jNTRhMjE2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0xvY2FsVHJhbnNhY3Rpb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0xvY2FsVHJhbnNhY3Rpb24uamF2YQpAQCAtMjMsNDUgKzIzLDQ1IEBACiAvKioKICAqIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDgvMDMKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA4LzAzCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiBwdWJsaWMgY2xhc3MgTG9jYWxUcmFuc2FjdGlvbiBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLkxvY2FsVHJhbnNhY3Rpb24gewotICAgIAorCiAgICAgcHJpdmF0ZSBNYW5hZ2VkQ29ubmVjdGlvbiBtYzsKLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdG9yIGZvciA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPi4KLSAgICAgKiBAcGFyYW0JbWMJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHRoYXQgcmV0dXJucwotICAgICAqCQkJdGhpcyA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBvYmplY3QgYXMKLSAgICAgKgkJCWEgcmVzdWx0IG9mIDxjb2RlPmdldExvY2FsVHJhbnNhY3Rpb248L2NvZGU+CisgICAgICogQHBhcmFtICAgIG1jICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiB0aGF0IHJldHVybnMKKyAgICAgKiAgICAgICAgICAgIHRoaXMgPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gb2JqZWN0IGFzCisgICAgICogICAgICAgICAgICBhIHJlc3VsdCBvZiA8Y29kZT5nZXRMb2NhbFRyYW5zYWN0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBMb2NhbFRyYW5zYWN0aW9uKE1hbmFnZWRDb25uZWN0aW9uIG1jKSB7CiAgICAgICAgIHRoaXMubWMgPSBtYzsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBCZWdpbiBhIGxvY2FsIHRyYW5zYWN0aW9uLgogICAgICAqCi0gICAgICogQHRocm93cwlMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNoYW5naW5nCi0gICAgICoJCQkJCQl0aGUgYXV0b2NvbW1pdCBtb2RlIG9mIHRoZSBwaHlzaWNhbAotICAgICAqCQkJCQkJY29ubmVjdGlvbgorICAgICAqIEB0aHJvd3MgICAgTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjaGFuZ2luZworICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGF1dG9jb21taXQgbW9kZSBvZiB0aGUgcGh5c2ljYWwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBiZWdpbigpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIC8vR0pDSU5UCi0JbWMudHJhbnNhY3Rpb25TdGFydGVkKCk7CisgICAgbWMudHJhbnNhY3Rpb25TdGFydGVkKCk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBtYy5nZXRBY3R1YWxDb25uZWN0aW9uKCkuc2V0QXV0b0NvbW1pdChmYWxzZSk7CiAgICAgICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbW1pdCBhIGxvY2FsIHRyYW5zYWN0aW9uLgotICAgICAqIEB0aHJvd3MJTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjaGFuZ2luZwotICAgICAqCQkJCQkJdGhlIGF1dG9jb21taXQgbW9kZSBvZiB0aGUgcGh5c2ljYWwKLSAgICAgKgkJCQkJCWNvbm5lY3Rpb24gb3IgY29tbWl0dGluZyB0aGUgdHJhbnNhY3Rpb24KKyAgICAgKiBAdGhyb3dzICAgIExvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2hhbmdpbmcKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhdXRvY29tbWl0IG1vZGUgb2YgdGhlIHBoeXNpY2FsCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uIG9yIGNvbW1pdHRpbmcgdGhlIHRyYW5zYWN0aW9uCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgY29tbWl0KCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgRXhjZXB0aW9uIGUgPSBudWxsOwpAQCAtNzIsMTUgKzcyLDE1IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICAgICAgLy9HSkNJTlQKLQltYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOworICAgIG1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUm9sbGJhY2sgYSBsb2NhbCB0cmFuc2FjdGlvbi4KLSAgICAgKiAKLSAgICAgKiBAdGhyb3dzCUxvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2hhbmdpbmcKLSAgICAgKgkJCQkJCXRoZSBhdXRvY29tbWl0IG1vZGUgb2YgdGhlIHBoeXNpY2FsCi0gICAgICoJCQkJCQljb25uZWN0aW9uIG9yIHJvbGxpbmcgYmFjayB0aGUgdHJhbnNhY3Rpb24KKyAgICAgKgorICAgICAqIEB0aHJvd3MgICAgTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjaGFuZ2luZworICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGF1dG9jb21taXQgbW9kZSBvZiB0aGUgcGh5c2ljYWwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gb3Igcm9sbGluZyBiYWNrIHRoZSB0cmFuc2FjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJvbGxiYWNrKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKQEAgLTkwLDcgKzkwLDcgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgICAgICAvL0dKQ0lOVAotCW1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CisgICAgbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb24uamF2YQppbmRleCAzMGY0NjBhLi4yZGFkNTlhIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbi5qYXZhCkBAIC00MSw4ICs0MSw4IEBACiAvKioKICAqIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzIyCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8yMgorICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogcHVibGljIGNsYXNzIE1hbmFnZWRDb25uZWN0aW9uIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gewogCkBAIC01Miw3ICs1Miw3IEBACiAKICAgICBwcml2YXRlIGJvb2xlYW4gaXNEZXN0cm95ZWQgPSBmYWxzZTsKICAgICBwcml2YXRlIGJvb2xlYW4gaXNVc2FibGUgPSB0cnVlOwotICAgIAorCiAgICAgcHJpdmF0ZSBpbnQgY29ubmVjdGlvblR5cGUgPSBJU05PVEFQT09MRURDT05ORUNUSU9OOwogICAgIHByaXZhdGUgUG9vbGVkQ29ubmVjdGlvbiBwYyA9IG51bGw7CiAgICAgcHJpdmF0ZSBqYXZhLnNxbC5Db25uZWN0aW9uIGFjdHVhbENvbm5lY3Rpb24gPSBudWxsOwpAQCAtNjIsNyArNjIsNyBAQAogICAgIHByaXZhdGUgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG1jZiA9IG51bGw7CiAgICAgcHJpdmF0ZSBYQVJlc291cmNlIHhhciA9IG51bGw7CiAgICAgcHVibGljIENvbm5lY3Rpb25Ib2xkZXIgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZTsKLSAgICAKKwogICAgIC8vR0pDSU5UCiAgICAgcHJpdmF0ZSBpbnQgaXNvbGF0aW9uTGV2ZWxXaGVuQ2xlYW5lZDsKICAgICBwcml2YXRlIGJvb2xlYW4gaXNDbGVhbiA9IGZhbHNlOwpAQCAtNzcsNzEgKzc3LDcxIEBACiAgICAgc3RhdGljIHsKICAgICAgICAgX2xvZ2dlciA9IExvZ2dlci5nZXRBbm9ueW1vdXNMb2dnZXIoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+LiBUaGUgcG9vbGVkQ29ubiBwYXJhbWV0ZXIgaXMgZXhwZWN0ZWQKLSAgICAgKiB0byBiZSBudWxsIGFuZCBzcWxDb25uIHBhcmFtZXRlciBpcyB0aGUgYWN0dWFsIGNvbm5lY3Rpb24gaW4gY2FzZSB3aGVyZSAKLSAgICAgKiB0aGUgYWN0dWFsIGNvbm5lY3Rpb24gaXMgZ290IGZyb20gYSBub24gcG9vbGVkIGRhdGFzb3VyY2Ugb2JqZWN0LiBUaGUgCisgICAgICogdG8gYmUgbnVsbCBhbmQgc3FsQ29ubiBwYXJhbWV0ZXIgaXMgdGhlIGFjdHVhbCBjb25uZWN0aW9uIGluIGNhc2Ugd2hlcmUKKyAgICAgKiB0aGUgYWN0dWFsIGNvbm5lY3Rpb24gaXMgZ290IGZyb20gYSBub24gcG9vbGVkIGRhdGFzb3VyY2Ugb2JqZWN0LiBUaGUKICAgICAgKiBwb29sZWRDb25uIHBhcmFtZXRlciBpcyBleHBlY3RlZCB0byBiZSBub24gbnVsbCBhbmQgc3FsQ29ubiBwYXJhbWV0ZXIKICAgICAgKiBpcyBleHBlY3RlZCB0byBiZSBudWxsIGluIHRoZSBjYXNlIHdoZXJlIHRoZSBkYXRhc291cmNlIG9iamVjdCBpcyBhCiAgICAgICogY29ubmVjdGlvbiBwb29sIGRhdGFzb3VyY2Ugb3IgYW4geGEgZGF0YXNvdXJjZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlwb29sZWRDb25uCTxjb2RlPlBvb2xlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpbiBjYXNlIHRoZSAKLSAgICAgKgkJCQlwaHlzaWNhbCBjb25uZWN0aW9uIGlzIHRvIGJlIG9idGFpbmVkIGZyb20gYSBwb29sZWQKLSAgICAgKgkJCQk8Y29kZT5EYXRhU291cmNlPC9jb2RlPjsgbnVsbCBvdGhlcndpc2UKLSAgICAgKiBAcGFyYW0Jc3FsQ29ubgk8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaW4gY2FzZSB0aGUgcGh5c2ljYWwKLSAgICAgKgkJCWNvbm5lY3Rpb24gaXMgdG8gYmUgb2J0YWluZWQgZnJvbSBhIG5vbiBwb29sZWQgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT47Ci0gICAgICoJCQludWxsIG90aGVyd2lzZQotICAgICAqIEBwYXJhbQlwYXNzd2RDcmVkCW9iamVjdCBjb25hdGluaW5nIHRoZQotICAgICAqCQkJCXVzZXIgYW5kIHBhc3N3b3JkIGZvciBhbGxvY2F0aW5nIHRoZSBjb25uZWN0aW9uCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QKLSAgICAgKgkJCQkJdGhhdCBjcmVhdGVkIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdAotICAgICAqCQkJCQlpcyBub3QgdGhlIHNhbWUgYXMgcmV0dXJuZWQgYnkgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgotICAgICAqCQkJCQlvYmplY3QgcGFzc2VkCisgICAgICogQHBhcmFtICAgIHBvb2xlZENvbm4gICAgPGNvZGU+UG9vbGVkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGluIGNhc2UgdGhlCisgICAgICogICAgICAgICAgICAgICAgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyB0byBiZSBvYnRhaW5lZCBmcm9tIGEgcG9vbGVkCisgICAgICogICAgICAgICAgICAgICAgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT47IG51bGwgb3RoZXJ3aXNlCisgICAgICogQHBhcmFtICAgIHNxbENvbm4gICAgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGluIGNhc2UgdGhlIHBoeXNpY2FsCisgICAgICogICAgICAgICAgICBjb25uZWN0aW9uIGlzIHRvIGJlIG9idGFpbmVkIGZyb20gYSBub24gcG9vbGVkIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+OworICAgICAqICAgICAgICAgICAgbnVsbCBvdGhlcndpc2UKKyAgICAgKiBAcGFyYW0gICAgcGFzc3dkQ3JlZCAgICBvYmplY3QgY29uYXRpbmluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICB1c2VyIGFuZCBwYXNzd29yZCBmb3IgYWxsb2NhdGluZyB0aGUgY29ubmVjdGlvbgorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0CisgICAgICogICAgICAgICAgICAgICAgICAgIHRoYXQgY3JlYXRlZCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgaXMgbm90IHRoZSBzYW1lIGFzIHJldHVybmVkIGJ5IDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgb2JqZWN0IHBhc3NlZAogICAgICAqLwotICAgIHB1YmxpYyBNYW5hZ2VkQ29ubmVjdGlvbihQb29sZWRDb25uZWN0aW9uIHBvb2xlZENvbm4sIGphdmEuc3FsLkNvbm5lY3Rpb24gc3FsQ29ubiwgCisgICAgcHVibGljIE1hbmFnZWRDb25uZWN0aW9uKFBvb2xlZENvbm5lY3Rpb24gcG9vbGVkQ29ubiwgamF2YS5zcWwuQ29ubmVjdGlvbiBzcWxDb25uLAogICAgICAgICBQYXNzd29yZENyZWRlbnRpYWwgcGFzc3dkQ3JlZCwgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG1jZikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYocG9vbGVkQ29ubiA9PSBudWxsICYmIHNxbENvbm4gPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJDb25uZWN0aW9uIG9iamVjdCBjYW5ub3QgYmUgbnVsbCIpOwogICAgICAgICB9CiAKLQlpZiAoY29ubmVjdGlvblR5cGUgPT0gSVNOT1RBUE9PTEVEQ09OTkVDVElPTiApIHsKLQkgICAgYWN0dWFsQ29ubmVjdGlvbiA9IHNxbENvbm47Ci0JfQorICAgIGlmIChjb25uZWN0aW9uVHlwZSA9PSBJU05PVEFQT09MRURDT05ORUNUSU9OICkgeworICAgICAgICBhY3R1YWxDb25uZWN0aW9uID0gc3FsQ29ubjsKKyAgICB9CiAKICAgICAgICAgcGMgPSBwb29sZWRDb25uOwogICAgICAgICBjb25uZWN0aW9uSGFuZGxlcyA9IG5ldyBIYXNodGFibGUoKTsKICAgICAgICAgcGFzc3dkQ3JlZGVudGlhbCA9IHBhc3N3ZENyZWQ7CiAgICAgICAgIHRoaXMubWNmID0gbWNmOwotICAgICAgICBpZihwYXNzd2RDcmVkZW50aWFsICE9IG51bGwgJiYgIAorICAgICAgICBpZihwYXNzd2RDcmVkZW50aWFsICE9IG51bGwgJiYKICAgICAgICAgICAgIHRoaXMubWNmLmVxdWFscyhwYXNzd2RDcmVkZW50aWFsLmdldE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSgpKSA9PSBmYWxzZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IHRoYXQgaGFzIGNyZWF0ZWQgdGhpcyAiICsgCisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgdGhhdCBoYXMgY3JlYXRlZCB0aGlzICIgKwogICAgICAgICAgICAgICAgICJNYW5hZ2VkQ29ubmVjdGlvbiBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSByZXR1cm5lZCBieSIgKwogICAgICAgICAgICAgICAgICAgICAiIHRoZSBQYXNzd29yZENyZWRlbnRpYWwgZm9yIHRoaXMgTWFuYWdlZENvbm5lY3Rpb24iKTsKICAgICAgICAgfQogICAgICAgICBsb2dXcml0ZXIgPSBtY2YuZ2V0TG9nV3JpdGVyKCk7CiAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOwotCWNlID0gbmV3IENvbm5lY3Rpb25FdmVudCh0aGlzLCBDb25uZWN0aW9uRXZlbnQuQ09OTkVDVElPTl9DTE9TRUQpOworICAgIGNlID0gbmV3IENvbm5lY3Rpb25FdmVudCh0aGlzLCBDb25uZWN0aW9uRXZlbnQuQ09OTkVDVElPTl9DTE9TRUQpOwogICAgIH0KIAogICAgIC8qKgogICAgICAqIEFkZHMgYSBjb25uZWN0aW9uIGV2ZW50IGxpc3RlbmVyIHRvIHRoZSBNYW5hZ2VkQ29ubmVjdGlvbiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlsaXN0ZW5lcgk8Y29kZT5Db25uZWN0aW9uRXZlbnRMaXN0ZW5lcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbGlzdGVuZXIgICAgPGNvZGU+Q29ubmVjdGlvbkV2ZW50TGlzdGVuZXI8L2NvZGU+CiAgICAgICogQHNlZSA8Y29kZT5yZW1vdmVDb25uZWN0aW9uRXZlbnRMaXN0ZW5lcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBhZGRDb25uZWN0aW9uRXZlbnRMaXN0ZW5lcihDb25uZWN0aW9uRXZlbnRMaXN0ZW5lciBsaXN0ZW5lcikgewotCXRoaXMubGlzdGVuZXIgPSBsaXN0ZW5lcjsKKyAgICB0aGlzLmxpc3RlbmVyID0gbGlzdGVuZXI7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogVXNlZCBieSB0aGUgY29udGFpbmVyIHRvIGNoYW5nZSB0aGUgYXNzb2NpYXRpb24gb2YgYW4gYXBwbGljYXRpb24tbGV2ZWwgCisgICAgICogVXNlZCBieSB0aGUgY29udGFpbmVyIHRvIGNoYW5nZSB0aGUgYXNzb2NpYXRpb24gb2YgYW4gYXBwbGljYXRpb24tbGV2ZWwKICAgICAgKiBjb25uZWN0aW9uIGhhbmRsZSB3aXRoIGEgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCWNvbm5lY3Rpb24JPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdG8gYmUgYXNzb2NpYXRlZCB3aXRoCi0gICAgICoJCQkJdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vIG1vcmUKLSAgICAgKgkJCQkJdmFsaWQgb3IgdGhlIGNvbm5lY3Rpb24gaGFuZGxlIHBhc3NlZCBpcyBudWxsCisgICAgICogQHBhcmFtICAgIGNvbm5lY3Rpb24gICAgPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdG8gYmUgYXNzb2NpYXRlZCB3aXRoCisgICAgICogICAgICAgICAgICAgICAgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vIG1vcmUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgdmFsaWQgb3IgdGhlIGNvbm5lY3Rpb24gaGFuZGxlIHBhc3NlZCBpcyBudWxsCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgYXNzb2NpYXRlQ29ubmVjdGlvbihPYmplY3QgY29ubmVjdGlvbikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTE1MiwxMSArMTUyLDExIEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkNvbm5lY3Rpb24gaGFuZGxlIGNhbm5vdCBiZSBudWxsIik7CiAgICAgICAgIH0KICAgICAgICAgQ29ubmVjdGlvbkhvbGRlciBjaCA9IChDb25uZWN0aW9uSG9sZGVyKSBjb25uZWN0aW9uOwotICAgICAgICAKKwogICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWMgPSAoY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uKWNoLmdldE1hbmFnZWRDb25uZWN0aW9uKCk7Ci0JbWMuYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7Ci0JaXNDbGVhbiA9IGZhbHNlOwotICAgICAgICAKKyAgICBtYy5hY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKKyAgICBpc0NsZWFuID0gZmFsc2U7CisKICAgICAgICAgY2guYXNzb2NpYXRlQ29ubmVjdGlvbihhY3R1YWxDb25uZWN0aW9uLCB0aGlzKTsKICAgICAgICAgLyoqCiAgICAgICAgICAqIFRoZSBleHBlY3RhdGlvbiBmcm9tIHRoZSBhYm92ZSBtZXRob2QgaXMgdGhhdCB0aGUgY29ubmVjdGlvbiBob2xkZXIKQEAgLTE2NSwzNCArMTY1LDM0IEBACiAgICAgICAgICAqIHRvIHRoZSBNYW5hZ2VkQ29ubmVjdGlvbiBpbnN0YW5jZSB3aXRoIHRoaXMgTWFuYWdlZENvbm5lY3Rpb24gaW5zdGFuY2UuCiAgICAgICAgICAqIEFueSBwcmV2aW91cyBzdGF0ZW1lbnRzIGFuZCByZXN1bHQgc2V0cyBhbHNvIG5lZWQgdG8gYmUgcmVtb3ZlZC4KICAgICAgICAgICovCi0gICAgICAgICAKKwogICAgICAgICAgaWYoYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSAhPSBudWxsKSB7CiAgICAgICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlLnNldEFjdGl2ZShmYWxzZSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgY2guc2V0QWN0aXZlKHRydWUpOwotICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gY2g7IAorICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gY2g7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogQXBwbGljYXRpb24gc2VydmVyIGNhbGxzIHRoaXMgbWV0aG9kIHRvIGZvcmNlIGFueSBjbGVhbnVwIG9uIHRoZSAKKyAgICAgKiBBcHBsaWNhdGlvbiBzZXJ2ZXIgY2FsbHMgdGhpcyBtZXRob2QgdG8gZm9yY2UgYW55IGNsZWFudXAgb24gdGhlCiAgICAgICogPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLiBUaGlzIG1ldGhvZCBjYWxscyB0aGUgaW52YWxpZGF0ZQogICAgICAqIG1ldGhvZCBvbiBhbGwgQ29ubmVjdGlvbkhhbmRsZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+LgotICAgICAqIAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm8gbW9yZSB2YWxpZAorICAgICAqCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBubyBtb3JlIHZhbGlkCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgY2xlYW51cCgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGNsZWFudXAiKTsKICAgICAgICAgfQogICAgICAgICBjaGVja0lmVmFsaWQoKTsKLSAgICAgICAgCisKICAgICAgICAgLyoqCiAgICAgICAgICAqIG1heSBuZWVkIHRvIHNldCB0aGUgYXV0b2NvbW1pdCB0byB0cnVlIGZvciB0aGUgbm9uLXBvb2xlZCBjYXNlLgogICAgICAgICAgKi8KICAgICAgICAgLy9HSkNJTlQKLQkvL2lmIChhY3R1YWxDb25uZWN0aW9uICE9IG51bGwpIHsKLQlpZiAoY29ubmVjdGlvblR5cGUgPT0gSVNOT1RBUE9PTEVEQ09OTkVDVElPTiApIHsKKyAgICAvL2lmIChhY3R1YWxDb25uZWN0aW9uICE9IG51bGwpIHsKKyAgICBpZiAoY29ubmVjdGlvblR5cGUgPT0gSVNOT1RBUE9PTEVEQ09OTkVDVElPTiApIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGlzb2xhdGlvbkxldmVsV2hlbkNsZWFuZWQgPSBhY3R1YWxDb25uZWN0aW9uLmdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCk7CiAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKQEAgLTIwMSwxNyArMjAxLDE3IEBACiAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpc0NsZWFuID0gdHJ1ZTsKLSAgICAgICAgCisKICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGhpcyBtZXRob2QgcmVtb3ZlcyBhbGwgdGhlIGNvbm5lY3Rpb24gaGFuZGxlcyBmcm9tIHRoZSB0YWJsZQogICAgICAqIG9mIGNvbm5lY3Rpb24gaGFuZGxlcyBhbmQgaW52YWxpZGF0ZXMgYWxsIG9mIHRoZW0gc28gdGhhdCBhbnkKICAgICAgKiBvcGVyYXRpb24gb24gdGhvc2UgY29ubmVjdGlvbiBoYW5kbGVzIHRocm93cyBhbiBleGNlcHRpb24uCiAgICAgICoKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGEgcHJvYmxlbSBpbiByZXRyaWV2aW5nCi0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAl0aGUgY29ubmVjdGlvbiBoYW5kbGVzCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhIHByb2JsZW0gaW4gcmV0cmlldmluZworICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNvbm5lY3Rpb24gaGFuZGxlcwogICAgICAqLwogICAgIHByaXZhdGUgdm9pZCBpbnZhbGlkYXRlQWxsQ29ubmVjdGlvbkhhbmRsZXMoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBTZXQgaGFuZGxlcyA9IGNvbm5lY3Rpb25IYW5kbGVzLmtleVNldCgpOwpAQCAtMjI2LDIyICsyMjYsMjIgQEAKICAgICAgICAgfQogICAgICAgICBjb25uZWN0aW9uSGFuZGxlcy5jbGVhcigpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIERlc3Ryb3lzIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIHRvIHRoZSB1bmRlcmx5aW5nIHJlc291cmNlIG1hbmFnZXIuCi0gICAgICogCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjbG9zaW5nIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uCisgICAgICoKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNsb3NpbmcgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGRlc3Ryb3kiKTsKICAgICAgICAgfQotCS8vR0pDSU5UCi0JaWYoaXNEZXN0cm95ZWQgPT0gdHJ1ZSkgewotCSAgICByZXR1cm47CQotCX0KKyAgICAvL0dKQ0lOVAorICAgIGlmKGlzRGVzdHJveWVkID09IHRydWUpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotCWFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOworICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgaWYoY29ubmVjdGlvblR5cGUgPT0gSVNYQUNPTk5FQ1RJT04gfHwgY29ubmVjdGlvblR5cGUgPT0gSVNQT09MRURDT05ORUNUSU9OKSB7CiAgICAgICAgICAgICAgICAgcGMuY2xvc2UoKTsKQEAgLTI1NSwyOCArMjU1LDI4IEBACiAgICAgICAgICAgICBpc0Rlc3Ryb3llZCA9IHRydWU7CiAgICAgICAgICAgICBwYXNzd2RDcmVkZW50aWFsID0gbnVsbDsKICAgICAgICAgICAgIGNvbm5lY3Rpb25IYW5kbGVzID0gbnVsbDsKLSAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGZvbGxvd2luZyBleGNlcHRpb24gaGFzIG9jY3VyZWQgZHVyaW5nIGRlc3Ryb3k6ICIgCisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBmb2xsb3dpbmcgZXhjZXB0aW9uIGhhcyBvY2N1cmVkIGR1cmluZyBkZXN0cm95OiAiCiAgICAgICAgICAgICAgICAgKyBzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICAgICAgaXNEZXN0cm95ZWQgPSB0cnVlOwogICAgICAgICBwYXNzd2RDcmVkZW50aWFsID0gbnVsbDsKICAgICAgICAgY29ubmVjdGlvbkhhbmRsZXMgPSBudWxsOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSBuZXcgY29ubmVjdGlvbiBoYW5kbGUgZm9yIHRoZSB1bmRlcmx5aW5nIHBoeXNpY2FsIAorICAgICAqIENyZWF0ZXMgYSBuZXcgY29ubmVjdGlvbiBoYW5kbGUgZm9yIHRoZSB1bmRlcmx5aW5nIHBoeXNpY2FsCiAgICAgICogY29ubmVjdGlvbiByZXByZXNlbnRlZCBieSB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCXN1YmplY3QJPGNvZGU+U3ViamVjdDwvY29kZT4gcGFyYW1ldGVyIG5lZWRlZCBmb3IgYXV0aGVudGljYXRpb24KLSAgICAgKiBAcGFyYW0JY3hSZXFJbmZvCTxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gY2FycmllcyB0aGUgdXNlciAKLSAgICAgKiAgICAgICAJICAgICAgICAgCWFuZCBwYXNzd29yZCByZXF1aXJlZCBmb3IgZ2V0dGluZyB0aGlzIGNvbm5lY3Rpb24uCi0gICAgICogQHJldHVybglDb25uZWN0aW9uCXRoZSBjb25uZWN0aW9uIGhhbmRsZSA8Y29kZT5PYmplY3Q8L2NvZGU+Ci0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZSAKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCXBoeXNpY2FsIGNvbm5lY3Rpb24gZnJvbSB0aGUgcG9vbGVkIGNvbm5lY3Rpb24gCi0gICAgICogQHRocm93cwlTZWN1cml0eUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhIG1pc21hdGNoIGJldHdlZW4gdGhlCi0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAlwYXNzd29yZCBjcmVkZW50aWFscyBvciByZWF1dGhlbnRpY2F0aW9uIGlzIHJlcXVlc3RlZAorICAgICAqIEBwYXJhbSAgICBzdWJqZWN0ICAgIDxjb2RlPlN1YmplY3Q8L2NvZGU+IHBhcmFtZXRlciBuZWVkZWQgZm9yIGF1dGhlbnRpY2F0aW9uCisgICAgICogQHBhcmFtICAgIGN4UmVxSW5mbyAgICA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IGNhcnJpZXMgdGhlIHVzZXIKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBwYXNzd29yZCByZXF1aXJlZCBmb3IgZ2V0dGluZyB0aGlzIGNvbm5lY3Rpb24uCisgICAgICogQHJldHVybiAgICBDb25uZWN0aW9uICAgIHRoZSBjb25uZWN0aW9uIGhhbmRsZSA8Y29kZT5PYmplY3Q8L2NvZGU+CisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGh5c2ljYWwgY29ubmVjdGlvbiBmcm9tIHRoZSBwb29sZWQgY29ubmVjdGlvbgorICAgICAqIEB0aHJvd3MgICAgU2VjdXJpdHlFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYSBtaXNtYXRjaCBiZXR3ZWVuIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQgY3JlZGVudGlhbHMgb3IgcmVhdXRoZW50aWNhdGlvbiBpcyByZXF1ZXN0ZWQKICAgICAgKi8KLSAgICBwdWJsaWMgT2JqZWN0IGdldENvbm5lY3Rpb24oU3ViamVjdCBzdWIsIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mbyBjeFJlcUluZm8pIAorICAgIHB1YmxpYyBPYmplY3QgZ2V0Q29ubmVjdGlvbihTdWJqZWN0IHN1YiwgamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxSW5mbykKICAgICAgICAgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBnZXRDb25uZWN0aW9uIik7CkBAIC0yODQsMTQgKzI4NCwxNCBAQAogICAgICAgICBjaGVja0lmVmFsaWQoKTsKICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mbyBjeFJlcXVlc3RJbmZvID0gKGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm8pIGN4UmVxSW5mbzsKICAgICAgICAgUGFzc3dvcmRDcmVkZW50aWFsIHBhc3N3ZENyZWQgPSBTZWN1cml0eVV0aWxzLmdldFBhc3N3b3JkQ3JlZGVudGlhbCh0aGlzLm1jZiwgc3ViLCBjeFJlcXVlc3RJbmZvKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIGlmKFNlY3VyaXR5VXRpbHMuaXNQYXNzd29yZENyZWRlbnRpYWxFcXVhbCh0aGlzLnBhc3N3ZENyZWRlbnRpYWwsIHBhc3N3ZENyZWQpID09IGZhbHNlKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgamFrYXJ0YS5yZXNvdXJjZS5zcGkuU2VjdXJpdHlFeGNlcHRpb24oIlJlLWF1dGhlbnRpY2F0aW9uIG5vdCBzdXBwb3J0ZWQiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAvL0dKQ0lOVAogICAgICAgICBnZXRBY3R1YWxDb25uZWN0aW9uKCk7Ci0gCisKICAgICAgICAgLyoqCiAgICAgICAgICAqIFRoZSBmb2xsb3dpbmcgY29kZSBpbiB0aGUgaWYgc3RhdGVtZW50IGZpcnN0IGNoZWNrcyBpZiB0aGlzIE1hbmFnZWRDb25uZWN0aW9uCiAgICAgICAgICAqIGlzIGNsZWFuIG9yIG5vdC4gSWYgaXQgaXMsIGl0IHJlc2V0cyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsIHRvIHdoYXQKQEAgLTMwMSwyOCArMzAxLDI4IEBACiAgICAgICAgIGlmKGlzQ2xlYW4pIHsKICAgICAgICAgICAgICgoY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSltY2YpLnJlc2V0SXNvbGF0aW9uKHRoaXMsIGlzb2xhdGlvbkxldmVsV2hlbkNsZWFuZWQpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAgCisKKwogICAgICAgICBDb25uZWN0aW9uSG9sZGVyIGNvbm5Ib2xkZXJPYmplY3QgPSBuZXcgQ29ubmVjdGlvbkhvbGRlcihhY3R1YWxDb25uZWN0aW9uLCB0aGlzKTsKLQlpc0NsZWFuPWZhbHNlOwotICAgICAgICAKKyAgICBpc0NsZWFuPWZhbHNlOworCiAgICAgICAgIGlmKGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgIT0gbnVsbCkgewogICAgICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZS5zZXRBY3RpdmUoZmFsc2UpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGNvbm5Ib2xkZXJPYmplY3Quc2V0QWN0aXZlKHRydWUpOwogICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gY29ubkhvbGRlck9iamVjdDsKLSAKKwogICAgICAgICByZXR1cm4gY29ubkhvbGRlck9iamVjdDsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIGFuIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IGluc3RhbmNlLiBUaGUgPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gaW50ZXJmYWNlCi0gICAgICogaXMgdXNlZCBieSB0aGUgY29udGFpbmVyIHRvIG1hbmFnZSBsb2NhbCB0cmFuc2FjdGlvbnMgZm9yIGEgUk0gaW5zdGFuY2UuIAorICAgICAqIGlzIHVzZWQgYnkgdGhlIGNvbnRhaW5lciB0byBtYW5hZ2UgbG9jYWwgdHJhbnNhY3Rpb25zIGZvciBhIFJNIGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICogQHJldHVybiAgICA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCiAgICAgICovCiAgICAgcHVibGljIGpha2FydGEucmVzb3VyY2Uuc3BpLkxvY2FsVHJhbnNhY3Rpb24gZ2V0TG9jYWxUcmFuc2FjdGlvbigpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC0zMzEsMTMgKzMzMSwxMyBAQAogICAgICAgICBjaGVja0lmVmFsaWQoKTsKICAgICAgICAgcmV0dXJuIG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuTG9jYWxUcmFuc2FjdGlvbih0aGlzKTsKICAgICB9Ci0gICAgIAorCiAgICAgLyoqCi0gICAgICogR2V0cyB0aGUgbG9nIHdyaXRlciBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuIAorICAgICAqIEdldHMgdGhlIGxvZyB3cml0ZXIgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgCi0gICAgICoJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICogQHJldHVybiAgICA8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyAgICAgKiAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKiBAc2VlIDxjb2RlPnNldExvZ1dyaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgUHJpbnRXcml0ZXIgZ2V0TG9nV3JpdGVyKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKQEAgLTM0NSw0NiArMzQ1LDQ2IEBACiAgICAgICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGdldExvZ1dyaXRlciIpOwogICAgICAgICB9CiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gbG9nV3JpdGVyOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIEdldHMgdGhlIG1ldGFkYXRhIGluZm9ybWF0aW9uIGZvciB0aGlzIGNvbm5lY3Rpb24ncyB1bmRlcmx5aW5nIEVJUyAKLSAgICAgKiByZXNvdXJjZSBtYW5hZ2VyIGluc3RhbmNlLiAKKyAgICAgKiBHZXRzIHRoZSBtZXRhZGF0YSBpbmZvcm1hdGlvbiBmb3IgdGhpcyBjb25uZWN0aW9uJ3MgdW5kZXJseWluZyBFSVMKKyAgICAgKiByZXNvdXJjZSBtYW5hZ2VyIGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICogQHJldHVybiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCiAgICAgICovCiAgICAgcHVibGljIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEgZ2V0TWV0YURhdGEoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBnZXRNZXRhRGF0YSIpOwogICAgICAgICB9CiAgICAgICAgIGNoZWNrSWZWYWxpZCgpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhKHRoaXMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFJldHVybnMgYW4gPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UuIAorICAgICAqIFJldHVybnMgYW4gPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgb3IKLSAgICAgKgkJCQkJdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUgCi0gICAgICoJCQkJCTxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlOb3RTdXBwb3J0ZWRFeGNlcHRpb24JaWYgdW5kZXJseWluZyBkYXRhc291cmNlIGlzIG5vdCBhbgotICAgICAqCQkJCQk8Y29kZT5YQURhdGFTb3VyY2U8L2NvZGU+CisgICAgICogQHJldHVybiAgICA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIG9yCisgICAgICogICAgICAgICAgICAgICAgICAgIHRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBOb3RTdXBwb3J0ZWRFeGNlcHRpb24gICAgaWYgdW5kZXJseWluZyBkYXRhc291cmNlIGlzIG5vdCBhbgorICAgICAqICAgICAgICAgICAgICAgICAgICA8Y29kZT5YQURhdGFTb3VyY2U8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFhBUmVzb3VyY2UgZ2V0WEFSZXNvdXJjZSgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIGdldFhBUmVzb3VyY2UiKTsKICAgICAgICAgfQogICAgICAgICBjaGVja0lmVmFsaWQoKTsKLSAgICAgICAgCisKICAgICAgICAgaWYoY29ubmVjdGlvblR5cGUgPT0gSVNYQUNPTk5FQ1RJT04pIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgaWYoeGFyID09IG51bGwpIHsKLQkJICAgIC8qKgorICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgICAgICAqIFVzaW5nIHRoZSB3cmFwcGVyIFhBUmVzb3VyY2UuCiAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgICAgICB4YXIgPSBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLlhBUmVzb3VyY2VJbXBsKCgoWEFDb25uZWN0aW9uKXBjKS5nZXRYQVJlc291cmNlKCksIHRoaXMpOwpAQCAtMzk3LDE2ICszOTcsMTYgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkNhbm5vdCBnZXQgYW4gWEFSZXNvdXJjZSBmcm9tIGEgbm9uIFhBIGNvbm5lY3Rpb24iKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJlbW92ZXMgYW4gYWxyZWFkeSByZWdpc3RlcmVkIGNvbm5lY3Rpb24gZXZlbnQgbGlzdGVuZXIgZnJvbSB0aGUKICAgICAgKiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbGlzdGVuZXIJPGNvZGU+Q29ubmVjdGlvbkV2ZW50TGlzdGVuZXI8L2NvZGU+IHRvIGJlIHJlbW92ZWQKKyAgICAgKiBAcGFyYW0gICAgbGlzdGVuZXIgICAgPGNvZGU+Q29ubmVjdGlvbkV2ZW50TGlzdGVuZXI8L2NvZGU+IHRvIGJlIHJlbW92ZWQKICAgICAgKiBAc2VlIDxjb2RlPmFkZENvbm5lY3Rpb25FdmVudExpc3RlbmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJlbW92ZUNvbm5lY3Rpb25FdmVudExpc3RlbmVyKENvbm5lY3Rpb25FdmVudExpc3RlbmVyIGxpc3RlbmVyKSB7Ci0JbGlzdGVuZXIgPSBudWxsOworICAgIGxpc3RlbmVyID0gbnVsbDsKICAgICB9CiAKICAgICAvKioKQEAgLTQxNSw3ICs0MTUsNyBAQAogICAgICAqIExvY2FsVHJhbnNhY3Rpb24gb2JqZWN0IHdoZW4gaXRzIGJlZ2luKCkgbWV0aG9kIGlzIGNhbGxlZC4KICAgICAgKi8KICAgICB2b2lkIHRyYW5zYWN0aW9uU3RhcnRlZCgpIHsKLQl0cmFuc2FjdGlvbkluUHJvZ3Jlc3MgPSB0cnVlOwkKKyAgICB0cmFuc2FjdGlvbkluUHJvZ3Jlc3MgPSB0cnVlOwogICAgIH0KIAogICAgIC8qKgpAQCAtNDI0LDE2ICs0MjQsMTYgQEAKICAgICAgKiBMb2NhbFRyYW5zYWN0aW9uIG9iamVjdCB3aGVuIGl0cyBlbmQoKSBtZXRob2QgaXMgY2FsbGVkLgogICAgICAqLwogICAgIHZvaWQgdHJhbnNhY3Rpb25Db21wbGV0ZWQoKSB7Ci0JdHJhbnNhY3Rpb25JblByb2dyZXNzID0gZmFsc2U7Ci0JaWYoY29ubmVjdGlvblR5cGUgPT0gSVNQT09MRURDT05ORUNUSU9OIHx8IGNvbm5lY3Rpb25UeXBlID09IElTWEFDT05ORUNUSU9OKSB7CisgICAgdHJhbnNhY3Rpb25JblByb2dyZXNzID0gZmFsc2U7CisgICAgaWYoY29ubmVjdGlvblR5cGUgPT0gSVNQT09MRURDT05ORUNUSU9OIHx8IGNvbm5lY3Rpb25UeXBlID09IElTWEFDT05ORUNUSU9OKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGlzb2xhdGlvbkxldmVsV2hlbkNsZWFuZWQgPSBhY3R1YWxDb25uZWN0aW9uLmdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCk7CiAgICAgICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgICAgICAvL2NoZWNrIHdoYXQgdG8gZG8gaW4gdGhpcyBjYXNlISEKLQkJX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMubm90Z290X3R4X2lzb2x2bCIpOworICAgICAgICAgICAgLy9jaGVjayB3aGF0IHRvIGRvIGluIHRoaXMgY2FzZSEhCisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLm5vdGdvdF90eF9pc29sdmwiKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotCSAgICB0cnkgeworCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgYWN0dWFsQ29ubmVjdGlvbi5jbG9zZSgpOwogICAgICAgICAgICAgICAgIGFjdHVhbENvbm5lY3Rpb24gPSBudWxsOwogICAgICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewpAQCAtNDQxLDcgKzQ0MSw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotCSAgICAgICAgCisKICAgICAgICAgaXNDbGVhbiA9IHRydWU7CiAKICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7CkBAIC00NTMsMjggKzQ1MywyOCBAQAogICAgICAqIG9yIG5vdC4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc1RyYW5zYWN0aW9uSW5Qcm9ncmVzcygpIHsKLQlyZXR1cm4gdHJhbnNhY3Rpb25JblByb2dyZXNzOworICAgIHJldHVybiB0cmFuc2FjdGlvbkluUHJvZ3Jlc3M7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgbG9nIHdyaXRlciBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jb3V0CTxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhpcwotICAgICAqCQkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKiBAcGFyYW0gICAgb3V0ICAgIDxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAqICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKiBAc2VlIDxjb2RlPmdldExvZ1dyaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRMb2dXcml0ZXIoUHJpbnRXcml0ZXIgb3V0KSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBjaGVja0lmVmFsaWQoKTsKICAgICAgICAgbG9nV3JpdGVyID0gb3V0OwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFRoaXMgbWV0aG9kIGRldGVybWluZXMgdGhlIHR5cGUgb2YgdGhlIGNvbm5lY3Rpb24gYmVpbmcgaGVsZCAKKyAgICAgKiBUaGlzIG1ldGhvZCBkZXRlcm1pbmVzIHRoZSB0eXBlIG9mIHRoZSBjb25uZWN0aW9uIGJlaW5nIGhlbGQKICAgICAgKiBpbiB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPi4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JcG9vbGVkQ29ubgk8Y29kZT5Qb29sZWRDb25uZWN0aW9uPC9jb2RlPgotICAgICAqIEByZXR1cm4JY29ubmVjdGlvbiB0eXBlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgcG9vbGVkQ29ubiAgICA8Y29kZT5Qb29sZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgY29ubmVjdGlvbiB0eXBlCiAgICAgICovCiAgICAgcHJpdmF0ZSBpbnQgZ2V0Q29ubmVjdGlvblR5cGUoUG9vbGVkQ29ubmVjdGlvbiBwb29sZWRDb25uKSB7CiAgICAgICAgIGlmKHBvb2xlZENvbm4gPT0gbnVsbCkgewpAQCAtNDg1LDIyICs0ODUsMjIgQEAKICAgICAgICAgICAgIHJldHVybiBJU1BPT0xFRENPTk5FQ1RJT047CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlIHRoYXQgCisgICAgICogUmV0dXJucyB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZSB0aGF0CiAgICAgICogY3JlYXRlZCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZSB0aGF0IGNyZWF0ZWQgdGhpcwotICAgICAqCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UgdGhhdCBjcmVhdGVkIHRoaXMKKyAgICAgKiAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCiAgICAgICovCiAgICAgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IGdldE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSgpIHsKICAgICAgICAgcmV0dXJuIChjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KW1jZjsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBhY3R1YWwgc3FsIGNvbm5lY3Rpb24gZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+LiAKKyAgICAgKiBSZXR1cm5zIHRoZSBhY3R1YWwgc3FsIGNvbm5lY3Rpb24gZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+LgogICAgICAqCi0gICAgICogQHJldHVybgl0aGUgcGh5c2ljYWwgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHRoZSBwaHlzaWNhbCA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPgogICAgICAqLwogICAgIC8vR0pDSU5UCiAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBnZXRBY3R1YWxDb25uZWN0aW9uKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKQEAgLTUwOSw4ICs1MDksOCBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBpZihhY3R1YWxDb25uZWN0aW9uID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgYWN0dWFsQ29ubmVjdGlvbiA9IHBjLmdldENvbm5lY3Rpb24oKTsKLQkJfQotCQkKKyAgICAgICAgfQorCiAgICAgICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7CiAgICAgICAgICAgICAgICAgc3FsZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwpAQCAtNTE4LDgxICs1MTgsODEgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gYWN0dWFsQ29ubmVjdGlvbjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgCi0gICAgICoJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEByZXR1cm4gICAgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAqICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKICAgICAgKi8KICAgICBQYXNzd29yZENyZWRlbnRpYWwgZ2V0UGFzc3dvcmRDcmVkZW50aWFsKCkgewogICAgICAgICByZXR1cm4gcGFzc3dkQ3JlZGVudGlhbDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDaGVja3MgaWYgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaXMgdmFsaWQgb3Igbm90IGFuZCB0aHJvd3MgYW4KICAgICAgKiBleGNlcHRpb24gaWYgaXQgaXMgbm90IHZhbGlkLiBBIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpcyBub3QgdmFsaWQgaWYKICAgICAgKiBkZXN0cm95IGhhcyBub3QgYmVlbiBjYWxsZWQgYW5kIG5vIHBoeXNpY2FsIGNvbm5lY3Rpb24gZXJyb3IgaGFzCiAgICAgICogb2NjdXJyZWQgcmVuZGVyaW5nIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIHVudXNhYmxlLgogICAgICAqCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiA8Y29kZT5kZXN0cm95PC9jb2RlPiBoYXMgYmVlbiBjYWxsZWQgb24gdGhpcyAKLSAgICAgKgkJCQkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlIG9yIGlmIGEgCi0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAlwaHlzaWNhbCBjb25uZWN0aW9uIGVycm9yIG9jY3VycmVkIHJlbmRlcmluZyBpdCB1bnVzYWJsZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgPGNvZGU+ZGVzdHJveTwvY29kZT4gaGFzIGJlZW4gY2FsbGVkIG9uIHRoaXMKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlIG9yIGlmIGEKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoeXNpY2FsIGNvbm5lY3Rpb24gZXJyb3Igb2NjdXJyZWQgcmVuZGVyaW5nIGl0IHVudXNhYmxlCiAgICAgICovCiAgICAgLy9HSkNJTlQKICAgICB2b2lkIGNoZWNrSWZWYWxpZCgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGlzRGVzdHJveWVkID09IHRydWUgfHwgaXNVc2FibGUgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhpcyBNYW5hZ2VkQ29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgdGhlIHBoeXNpY2FsICIgKyAKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhpcyBNYW5hZ2VkQ29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgdGhlIHBoeXNpY2FsICIgKwogICAgICAgICAgICAgICAgICJjb25uZWN0aW9uIGlzIG5vdCB1c2FibGUuIik7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIDxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHdoZW4gaXRzIGNsb3NlIG1ldGhvZCBpcwogICAgICAqIGNhbGxlZC4gVGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UgIGludmFsaWRhdGVzIHRoZSBjb25uZWN0aW9uIGhhbmRsZQogICAgICAqIGFuZCBzZW5kcyBhIENPTk5FQ1RJT05fQ0xPU0VEIGV2ZW50IHRvIGFsbCB0aGUgcmVnaXN0ZXJlZCBldmVudCBsaXN0ZW5lcnMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZQlFeGNlcHRpb24gdGhhdCBtYXkgaGF2ZSBvY2N1cmVkIHdoaWxlIGNsb3NpbmcgdGhlIGNvbm5lY3Rpb24gaGFuZGxlCi0gICAgICogQHBhcmFtCWNvbm5Ib2xkZXJPYmplY3QJPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdGhhdCBoYXMgYmVlbiBjbG9zZWQKLSAgICAgKiBAdGhyb3dzCVNRTEV4Y2VwdGlvbglpbiBjYXNlIGNsb3NpbmcgdGhlIHNxbCBjb25uZWN0aW9uIGdvdCBvdXQgb2YKLSAgICAgKiAgICAgICAgIAkgICAgICAgICAgICAJPGNvZGU+Z2V0Q29ubmVjdGlvbjwvY29kZT4gb24gdGhlIHVuZGVybHlpbmcgCi0gICAgICoJCQkJPGNvZGU+UG9vbGVkQ29ubmVjdGlvbjwvY29kZT4gdGhyb3dzIGFuIGV4Y2VwdGlvbgorICAgICAqIEBwYXJhbSAgICBlICAgIEV4Y2VwdGlvbiB0aGF0IG1heSBoYXZlIG9jY3VyZWQgd2hpbGUgY2xvc2luZyB0aGUgY29ubmVjdGlvbiBoYW5kbGUKKyAgICAgKiBAcGFyYW0gICAgY29ubkhvbGRlck9iamVjdCAgICA8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0aGF0IGhhcyBiZWVuIGNsb3NlZAorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIGluIGNhc2UgY2xvc2luZyB0aGUgc3FsIGNvbm5lY3Rpb24gZ290IG91dCBvZgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZT5nZXRDb25uZWN0aW9uPC9jb2RlPiBvbiB0aGUgdW5kZXJseWluZworICAgICAqICAgICAgICAgICAgICAgIDxjb2RlPlBvb2xlZENvbm5lY3Rpb248L2NvZGU+IHRocm93cyBhbiBleGNlcHRpb24KICAgICAgKi8KICAgICB2b2lkIGNvbm5lY3Rpb25DbG9zZWQoRXhjZXB0aW9uIGUsIENvbm5lY3Rpb25Ib2xkZXIgY29ubkhvbGRlck9iamVjdCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICAgIGNvbm5Ib2xkZXJPYmplY3QuaW52YWxpZGF0ZSgpOwotICAgICAgICAKKwogICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKLSAgICAgICAgCisKICAgICAgICAgY2Uuc2V0Q29ubmVjdGlvbkhhbmRsZShjb25uSG9sZGVyT2JqZWN0KTsKICAgICAgICAgbGlzdGVuZXIuY29ubmVjdGlvbkNsb3NlZChjZSk7Ci0JCisKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIDxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHdoZW4gaXQgZGV0ZWN0cyBhIGNvbm5lY2lvbgogICAgICAqIHJlbGF0ZWQgZXJyb3IuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZQlFeGNlcHRpb24gdGhhdCBoYXMgb2NjdXJyZWQgZHVyaW5nIGFuIG9wZXJhdGlvbiBvbiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbgotICAgICAqIEBwYXJhbQljb25uSG9sZGVyT2JqZWN0CTxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRoYXQgZGV0ZWN0ZWQgdGhlIHBoeXNpY2FsCi0gICAgICoJCQkJCWNvbm5lY3Rpb24gZXJyb3IKKyAgICAgKiBAcGFyYW0gICAgZSAgICBFeGNlcHRpb24gdGhhdCBoYXMgb2NjdXJyZWQgZHVyaW5nIGFuIG9wZXJhdGlvbiBvbiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbgorICAgICAqIEBwYXJhbSAgICBjb25uSG9sZGVyT2JqZWN0ICAgIDxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRoYXQgZGV0ZWN0ZWQgdGhlIHBoeXNpY2FsCisgICAgICogICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gZXJyb3IKICAgICAgKi8KLSAgICB2b2lkIGNvbm5lY3Rpb25FcnJvck9jY3VycmVkKEV4Y2VwdGlvbiBlLCAKKyAgICB2b2lkIGNvbm5lY3Rpb25FcnJvck9jY3VycmVkKEV4Y2VwdGlvbiBlLAogICAgICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25Ib2xkZXIgY29ubkhvbGRlck9iamVjdCkgewotCSAgICAKKwogICAgICAgICAgQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXIgY2VsID0gdGhpcy5saXN0ZW5lcjsKICAgICAgICAgIENvbm5lY3Rpb25FdmVudCBjZSA9IG51bGw7CiAgICAgICAgICBjZSA9IGUgPT0gbnVsbCA/IG5ldyBDb25uZWN0aW9uRXZlbnQodGhpcywgQ29ubmVjdGlvbkV2ZW50LkNPTk5FQ1RJT05fRVJST1JfT0NDVVJSRUQpCiAgICAgICAgICAgICAgICAgICAgIDogbmV3IENvbm5lY3Rpb25FdmVudCh0aGlzLCBDb25uZWN0aW9uRXZlbnQuQ09OTkVDVElPTl9FUlJPUl9PQ0NVUlJFRCwgZSk7CiAgICAgICAgICBpZiAoY29ubkhvbGRlck9iamVjdCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgY2Uuc2V0Q29ubmVjdGlvbkhhbmRsZShjb25uSG9sZGVyT2JqZWN0KTsKLSAgICAgICAgIH0gICAgCisgICAgICAgICB9CiAKICAgICAgICAgIGNlbC5jb25uZWN0aW9uRXJyb3JPY2N1cnJlZChjZSk7CiAgICAgICAgICBpc1VzYWJsZSA9IGZhbHNlOwogICAgIH0KLSAgICAKLSAgICAKLSAgICAKKworCisKICAgICAvKioKICAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IG9iamVjdCB3aGVuIGl0cyBzdGFydCBtZXRob2QKICAgICAgKiBoYXMgYmVlbiBpbnZva2VkLgpAQCAtNjA2LDcgKzYwNiw3IEBACiAgICAgICAgICAgICBjb25uZWN0aW9uRXJyb3JPY2N1cnJlZChlLCBudWxsKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gb2JqZWN0IHdoZW4gaXRzIGVuZCBtZXRob2QKICAgICAgKiBoYXMgYmVlbiBpbnZva2VkLgpAQCAtNjIwLDcgKzYyMCw3IEBACiAgICAgICAgICAgICBjb25uZWN0aW9uRXJyb3JPY2N1cnJlZChlLCBudWxsKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSBhIENvbm5lY3Rpb24gSGFuZGxlIHRvIGNoZWNrIGlmIGl0IGlzCiAgICAgICogdGhlIGFjdGl2ZSBDb25uZWN0aW9uIEhhbmRsZS4gSWYgaXQgaXMgbm90IHRoZSBhY3RpdmUgQ29ubmVjdGlvbgpAQCAtNjI5LDI0ICs2MjksMjQgQEAKICAgICAgKiBDb25uZWN0aW9uIEhhbmRsZSBvYmplY3QgdG8gdGhpcyBvYmplY3QgaWYgdGhlIGFjdGl2ZSBDb25uZWN0aW9uCiAgICAgICogSGFuZGxlIGlzIG51bGwuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JY2gJPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdGhhdCByZXF1ZXN0cyB0aGlzCi0gICAgICoJCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2Ugd2hldGhlcgotICAgICAqCQkJaXQgY2FuIGJlIGFjdGl2ZSBvciBub3QKLSAgICAgKiBAdGhyb3dzCVNRTEV4Y2VwdGlvbglpbiBjYXNlIHRoZSBwaHlzaWNhbCBpcyBub3QgdmFsaWQgb3IKLSAgICAgKgkJCQl0aGVyZSBpcyBhbHJlYWR5IGFuIGFjdGl2ZSBjb25uZWN0aW9uIGhhbmRsZQorICAgICAqIEBwYXJhbSAgICBjaCAgICA8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0aGF0IHJlcXVlc3RzIHRoaXMKKyAgICAgKiAgICAgICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZSB3aGV0aGVyCisgICAgICogICAgICAgICAgICBpdCBjYW4gYmUgYWN0aXZlIG9yIG5vdAorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIGluIGNhc2UgdGhlIHBoeXNpY2FsIGlzIG5vdCB2YWxpZCBvcgorICAgICAqICAgICAgICAgICAgICAgIHRoZXJlIGlzIGFscmVhZHkgYW4gYWN0aXZlIGNvbm5lY3Rpb24gaGFuZGxlCiAgICAgICovCi0gICAgIAorCiAgICAgdm9pZCBjaGVja0lmQWN0aXZlKENvbm5lY3Rpb25Ib2xkZXIgY2gpIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgICBpZihpc0Rlc3Ryb3llZCA9PSB0cnVlIHx8IGlzVXNhYmxlID09IGZhbHNlKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uKCJUaGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBub3QgdXNhYmxlIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYoYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9PSBudWxsKSB7CiAgICAgICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gY2g7CiAgICAgICAgICAgICBjaC5zZXRBY3RpdmUodHJ1ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYoYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSAhPSBjaCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gaGFuZGxlIGNhbm5vdCBiZSB1c2VkIGFzIGFub3RoZXIgY29ubmVjdGlvbiBpcyBjdXJyZW50bHkgYWN0aXZlIik7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhLmphdmEKaW5kZXggMjBmMDNhYS4uZjY1MGQ0MSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhLmphdmEKQEAgLTI1LDggKzI1LDggQEAKIC8qKgogICogPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YTwvY29kZT4gaW1wbGVtZW50YXRpb24gZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wOC8wMwotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDgvMDMKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIHB1YmxpYyBjbGFzcyBNYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YSB7CiAKQEAgLTQxLDgxICs0MSw4MSBAQAogICAgIC8qKgogICAgICAqIENvbnN0cnVjdG9yIGZvciA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhPC9jb2RlPgogICAgICAqCi0gICAgICogQHBhcmFtCW1jCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CWlmIGdldHRpbmcgdGhlIERhdGFiYXNlTWV0YURhdGEgb2JqZWN0IGZhaWxzCisgICAgICogQHBhcmFtICAgIG1jICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+ICAgIGlmIGdldHRpbmcgdGhlIERhdGFiYXNlTWV0YURhdGEgb2JqZWN0IGZhaWxzCiAgICAgICovCiAgICAgcHVibGljIE1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEoTWFuYWdlZENvbm5lY3Rpb24gbWMpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICB0aGlzLm1jID0gbWM7CiAgICAgICAgICAgICBkbWQgPSBtYy5nZXRBY3R1YWxDb25uZWN0aW9uKCkuZ2V0TWV0YURhdGEoKTsKICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19tZCIpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19tZCIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgcHJvZHVjdCBuYW1lIG9mIHRoZSB1bmRlcmx5aW5nIEVJUyBpbnN0YW5jZSBjb25uZWN0ZWQKICAgICAgKiB0aHJvdWdoIHRoZSBNYW5hZ2VkQ29ubmVjdGlvbi4KICAgICAgKgotICAgICAqIEByZXR1cm4JUHJvZHVjdCBuYW1lIG9mIHRoZSBFSVMgaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgUHJvZHVjdCBuYW1lIG9mIHRoZSBFSVMgaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RUlTUHJvZHVjdE5hbWUoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmV0dXJuIGRtZC5nZXREYXRhYmFzZVByb2R1Y3ROYW1lKCk7CiAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZWlzX3Byb2RuYW1lIiwgc3FsZSk7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2Vpc19wcm9kbmFtZSIsIHNxbGUpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgcHJvZHVjdCB2ZXJzaW9uIG9mIHRoZSB1bmRlcmx5aW5nIEVJUyBpbnN0YW5jZSBjb25uZWN0ZWQKICAgICAgKiB0aHJvdWdoIHRoZSBNYW5hZ2VkQ29ubmVjdGlvbi4KICAgICAgKgotICAgICAqIEByZXR1cm4JUHJvZHVjdCB2ZXJzaW9uIG9mIHRoZSBFSVMgaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgUHJvZHVjdCB2ZXJzaW9uIG9mIHRoZSBFSVMgaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RUlTUHJvZHVjdFZlcnNpb24oKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmV0dXJuIGRtZC5nZXREYXRhYmFzZVByb2R1Y3RWZXJzaW9uKCk7CiAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZWlzX3Byb2R2ZXJzIiwgc3FsZSk7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2Vpc19wcm9kdmVycyIsIHNxbGUpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpLCBzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIG1heGltdW0gbGltaXQgb24gbnVtYmVyIG9mIGFjdGl2ZSBjb25jdXJyZW50IGNvbm5lY3Rpb25zCiAgICAgICogdGhhdCBhbiBFSVMgaW5zdGFuY2UgY2FuIHN1cHBvcnQgYWNyb3NzIGNsaWVudCBwcm9jZXNzZXMuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCU1heGltdW0gbGltaXQgZm9yIG51bWJlciBvZiBhY3RpdmUgY29uY3VycmVudCBjb25uZWN0aW9ucwotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBNYXhpbXVtIGxpbWl0IGZvciBudW1iZXIgb2YgYWN0aXZlIGNvbmN1cnJlbnQgY29ubmVjdGlvbnMKKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0TWF4Q29ubmVjdGlvbnMoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmV0dXJuIGRtZC5nZXRNYXhDb25uZWN0aW9ucygpOwogICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2Vpc19tYXhjb25uIik7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2Vpc19tYXhjb25uIik7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBuYW1lIG9mIHRoZSB1c2VyIGFzc29jaWF0ZWQgd2l0aCB0aGUgTWFuYWdlZENvbm5lY3Rpb24gaW5zdGFuY2UuIFRoZSBuYW1lCiAgICAgICogY29ycmVzcG9uZHMgdG8gdGhlIHJlc291cmNlIHByaW5jaXBhbCB1bmRlciB3aG9zZSB3aG9zZSBzZWN1cml0eSBjb250ZXh0LCBhIGNvbm5lY3Rpb24KICAgICAgKiB0byB0aGUgRUlTIGluc3RhbmNlIGhhcyBiZWVuIGVzdGFibGlzaGVkLgogICAgICAqCi0gICAgICogQHJldHVybgluYW1lIG9mIHRoZSB1c2VyCi0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIG5hbWUgb2YgdGhlIHVzZXIKKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VXNlck5hbWUoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBqYWthcnRhLnJlc291cmNlLnNwaS5zZWN1cml0eS5QYXNzd29yZENyZWRlbnRpYWwgcGMgPSBtYy5nZXRQYXNzd29yZENyZWRlbnRpYWwoKTsKICAgICAgICAgaWYocGMgIT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuIHBjLmdldFVzZXJOYW1lKCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIG1jLmdldE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSgpLmdldFVzZXIoKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL1hBUmVzb3VyY2VJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL1hBUmVzb3VyY2VJbXBsLmphdmEKaW5kZXggZGFkMWQ3Ny4uNDgyZjMzMiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9YQVJlc291cmNlSW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvWEFSZXNvdXJjZUltcGwuamF2YQpAQCAtMjQsMTQ4ICsyNCwxNDggQEAKIC8qKgogICogPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gd3JhcHBlciBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA4LzIzCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wOC8yMworICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogcHVibGljIGNsYXNzIFhBUmVzb3VyY2VJbXBsIGltcGxlbWVudHMgWEFSZXNvdXJjZSB7CiAKICAgICBYQVJlc291cmNlIHhhcjsKICAgICBNYW5hZ2VkQ29ubmVjdGlvbiBtYzsKLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdG9yIGZvciBYQVJlc291cmNlSW1wbAogICAgICAqCi0gICAgICogQHBhcmFtCXhhcgk8Y29kZT5YQVJlc291cmNlPC9jb2RlPgotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgeGFyICAgIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+CisgICAgICogQHBhcmFtICAgIG1jICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBYQVJlc291cmNlSW1wbChYQVJlc291cmNlIHhhciwgTWFuYWdlZENvbm5lY3Rpb24gbWMpIHsKICAgICAgICAgdGhpcy54YXIgPSB4YXI7CiAgICAgICAgIHRoaXMubWMgPSBtYzsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb21taXQgdGhlIGdsb2JhbCB0cmFuc2FjdGlvbiBzcGVjaWZpZWQgYnkgeGlkLgogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCi0gICAgICogQHBhcmFtCW9uZVBoYXNlCUlmIHRydWUsIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHNob3VsZCB1c2UgYSBvbmUtcGhhc2UgY29tbWl0IAotICAgICAqICAgICAgIAkgICAgICAgIAlwcm90b2NvbCB0byBjb21taXQgdGhlIHdvcmsgZG9uZSBvbiBiZWhhbGYgb2YgeGlkLgorICAgICAqIEBwYXJhbSAgICB4aWQgICAgQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgorICAgICAqIEBwYXJhbSAgICBvbmVQaGFzZSAgICBJZiB0cnVlLCB0aGUgcmVzb3VyY2UgbWFuYWdlciBzaG91bGQgdXNlIGEgb25lLXBoYXNlIGNvbW1pdAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICBwcm90b2NvbCB0byBjb21taXQgdGhlIHdvcmsgZG9uZSBvbiBiZWhhbGYgb2YgeGlkLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNvbW1pdChYaWQgeGlkLCBib29sZWFuIG9uZVBoYXNlKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICAvL3RoZSBtYy50cmFuc2FjdGlvbkNvbXBsZXRlZCBjYWxsIGhhcyBjb21lIGhlcmUgYmVjYXN1ZQotCS8vdGhlIHRyYW5zYWN0aW9uICphY3R1YWxseSogY29tcGxldGVzIGFmdGVyIHRoZSBmbG93Ci0JLy9yZWFjaGVzIGhlcmUuIHRoZSBlbmQoKSBtZXRob2QgbWlnaHQgbm90IHJlYWxseSBzaWduYWwKLQkvL2NvbXBsZXRpb24gb2YgdHJhbnNhY3Rpb24gaW4gY2FzZSB0aGUgdHJhbnNhY3Rpb24gaXMKLQkvL3N1c3BlbmRlZC4gSW4gY2FzZSBvZiB0cmFuc2FjdGlvbiBzdXNwZW5zaW9uLCB0aGUgZW5kCi0JLy9tZXRob2QgaXMgc3RpbGwgY2FsbGVkIGJ5IHRoZSB0cmFuc2FjdGlvbiBtYW5hZ2VyCi0JbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKKyAgICAvL3RoZSB0cmFuc2FjdGlvbiAqYWN0dWFsbHkqIGNvbXBsZXRlcyBhZnRlciB0aGUgZmxvdworICAgIC8vcmVhY2hlcyBoZXJlLiB0aGUgZW5kKCkgbWV0aG9kIG1pZ2h0IG5vdCByZWFsbHkgc2lnbmFsCisgICAgLy9jb21wbGV0aW9uIG9mIHRyYW5zYWN0aW9uIGluIGNhc2UgdGhlIHRyYW5zYWN0aW9uIGlzCisgICAgLy9zdXNwZW5kZWQuIEluIGNhc2Ugb2YgdHJhbnNhY3Rpb24gc3VzcGVuc2lvbiwgdGhlIGVuZAorICAgIC8vbWV0aG9kIGlzIHN0aWxsIGNhbGxlZCBieSB0aGUgdHJhbnNhY3Rpb24gbWFuYWdlcgorICAgIG1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiAgICAgICAgIHhhci5jb21taXQoeGlkLCBvbmVQaGFzZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogRW5kcyB0aGUgd29yayBwZXJmb3JtZWQgb24gYmVoYWxmIG9mIGEgdHJhbnNhY3Rpb24gYnJhbmNoLgogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyIHRoYXQgaXMgdGhlIHNhbWUgYXMgd2hhdCAKLSAgICAgKgkJCXdhcyB1c2VkIHByZXZpb3VzbHkgaW4gdGhlIHN0YXJ0IG1ldGhvZC4KLSAgICAgKiBAcGFyYW0JZmxhZ3MJT25lIG9mIFRNU1VDQ0VTUywgVE1GQUlMLCBvciBUTVNVU1BFTkQKKyAgICAgKiBAcGFyYW0gICAgeGlkICAgIEEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIgdGhhdCBpcyB0aGUgc2FtZSBhcyB3aGF0CisgICAgICogICAgICAgICAgICB3YXMgdXNlZCBwcmV2aW91c2x5IGluIHRoZSBzdGFydCBtZXRob2QuCisgICAgICogQHBhcmFtICAgIGZsYWdzICAgIE9uZSBvZiBUTVNVQ0NFU1MsIFRNRkFJTCwgb3IgVE1TVVNQRU5ECiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZW5kKFhpZCB4aWQsIGludCBmbGFncykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgeGFyLmVuZCh4aWQsIGZsYWdzKTsKICAgICAgICAgLy9HSkNJTlQKLQkvL21jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CisgICAgLy9tYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRlbGwgdGhlIHJlc291cmNlIG1hbmFnZXIgdG8gZm9yZ2V0IGFib3V0IGEgaGV1cmlzdGljYWxseSBjb21wbGV0ZWQgdHJhbnNhY3Rpb24gYnJhbmNoLgogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCisgICAgICogQHBhcmFtICAgIHhpZCAgICBBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZm9yZ2V0KFhpZCB4aWQpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHhhci5mb3JnZXQoeGlkKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBPYnRhaW4gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBzZXQgZm9yIHRoaXMgCisgICAgICogT2J0YWluIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgc2V0IGZvciB0aGlzCiAgICAgICogPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRoZSB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIGluIHNlY29uZHMKKyAgICAgKiBAcmV0dXJuICAgIHRoZSB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIGluIHNlY29uZHMKICAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldFRyYW5zYWN0aW9uVGltZW91dCgpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiB4YXIuZ2V0VHJhbnNhY3Rpb25UaW1lb3V0KCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIGRldGVybWluZSBpZiB0aGUgcmVzb3VyY2UgbWFuYWdlciBpbnN0YW5jZSAKLSAgICAgKiByZXByZXNlbnRlZCBieSB0aGUgdGFyZ2V0IG9iamVjdCBpcyB0aGUgc2FtZSBhcyB0aGUgcmVzb3VjZSBtYW5hZ2VyIAorICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB0byBkZXRlcm1pbmUgaWYgdGhlIHJlc291cmNlIG1hbmFnZXIgaW5zdGFuY2UKKyAgICAgKiByZXByZXNlbnRlZCBieSB0aGUgdGFyZ2V0IG9iamVjdCBpcyB0aGUgc2FtZSBhcyB0aGUgcmVzb3VjZSBtYW5hZ2VyCiAgICAgICogaW5zdGFuY2UgcmVwcmVzZW50ZWQgYnkgdGhlIHBhcmFtZXRlciB4YXJlcy4KICAgICAgKgotICAgICAqIEBwYXJhbQl4YXJlcwlBbiA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBvYmplY3Qgd2hvc2UgcmVzb3VyY2UgbWFuYWdlciAKLSAgICAgKiAJCQlpbnN0YW5jZSBpcyB0byBiZSBjb21wYXJlZCB3aXRoIHRoZSByZXNvdXJjZQotICAgICAqIEByZXR1cm4JdHJ1ZSBpZiBpdCdzIHRoZSBzYW1lIFJNIGluc3RhbmNlOyBvdGhlcndpc2UgZmFsc2UuCisgICAgICogQHBhcmFtICAgIHhhcmVzICAgIEFuIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IG9iamVjdCB3aG9zZSByZXNvdXJjZSBtYW5hZ2VyCisgICAgICogICAgICAgICAgICAgaW5zdGFuY2UgaXMgdG8gYmUgY29tcGFyZWQgd2l0aCB0aGUgcmVzb3VyY2UKKyAgICAgKiBAcmV0dXJuICAgIHRydWUgaWYgaXQncyB0aGUgc2FtZSBSTSBpbnN0YW5jZTsgb3RoZXJ3aXNlIGZhbHNlLgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGlzU2FtZVJNKFhBUmVzb3VyY2UgeGFyZXMpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiB4YXIuaXNTYW1lUk0oeGFyZXMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIEFzayB0aGUgcmVzb3VyY2UgbWFuYWdlciB0byBwcmVwYXJlIGZvciBhIHRyYW5zYWN0aW9uIGNvbW1pdCAKKyAgICAgKiBBc2sgdGhlIHJlc291cmNlIG1hbmFnZXIgdG8gcHJlcGFyZSBmb3IgYSB0cmFuc2FjdGlvbiBjb21taXQKICAgICAgKiBvZiB0aGUgdHJhbnNhY3Rpb24gc3BlY2lmaWVkIGluIHhpZC4KICAgICAgKgotICAgICAqIEBwYXJhbQl4aWQJQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgotICAgICAqIEByZXR1cm4JQSB2YWx1ZSBpbmRpY2F0aW5nIHRoZSByZXNvdXJjZSBtYW5hZ2VyJ3Mgdm90ZSBvbiB0aGUgCi0gICAgICoJCW91dGNvbWUgb2YgdGhlIHRyYW5zYWN0aW9uLiBUaGUgcG9zc2libGUgdmFsdWVzCi0gICAgICoJCWFyZTogWEFfUkRPTkxZIG9yIFhBX09LLiBJZiB0aGUgcmVzb3VyY2UgbWFuYWdlciB3YW50cyAKLSAgICAgKgkJdG8gcm9sbCBiYWNrIHRoZSB0cmFuc2FjdGlvbiwgaXQgc2hvdWxkIGRvIHNvCi0gICAgICoJCWJ5IHJhaXNpbmcgYW4gYXBwcm9wcmlhdGUgPGNvZGU+WEFFeGNlcHRpb248L2NvZGU+IGluIHRoZSBwcmVwYXJlIG1ldGhvZC4KKyAgICAgKiBAcGFyYW0gICAgeGlkICAgIEEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKKyAgICAgKiBAcmV0dXJuICAgIEEgdmFsdWUgaW5kaWNhdGluZyB0aGUgcmVzb3VyY2UgbWFuYWdlcidzIHZvdGUgb24gdGhlCisgICAgICogICAgICAgIG91dGNvbWUgb2YgdGhlIHRyYW5zYWN0aW9uLiBUaGUgcG9zc2libGUgdmFsdWVzCisgICAgICogICAgICAgIGFyZTogWEFfUkRPTkxZIG9yIFhBX09LLiBJZiB0aGUgcmVzb3VyY2UgbWFuYWdlciB3YW50cworICAgICAqICAgICAgICB0byByb2xsIGJhY2sgdGhlIHRyYW5zYWN0aW9uLCBpdCBzaG91bGQgZG8gc28KKyAgICAgKiAgICAgICAgYnkgcmFpc2luZyBhbiBhcHByb3ByaWF0ZSA8Y29kZT5YQUV4Y2VwdGlvbjwvY29kZT4gaW4gdGhlIHByZXBhcmUgbWV0aG9kLgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgcHJlcGFyZShYaWQgeGlkKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICByZXR1cm4geGFyLnByZXBhcmUoeGlkKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBPYnRhaW4gYSBsaXN0IG9mIHByZXBhcmVkIHRyYW5zYWN0aW9uIGJyYW5jaGVzIGZyb20gYSByZXNvdXJjZSBtYW5hZ2VyLgogICAgICAqCi0gICAgICogQHBhcmFtCWZsYWcJT25lIG9mIFRNU1RBUlRSU0NBTiwgVE1FTkRSU0NBTiwgVE1OT0ZMQUdTLiBUTU5PRkxBR1MgCi0gICAgICoJCQltdXN0IGJlIHVzZWQgd2hlbiBubyBvdGhlciBmbGFncyBhcmUgc2V0IGluIGZsYWdzLgotICAgICAqIEByZXR1cm4JVGhlIHJlc291cmNlIG1hbmFnZXIgcmV0dXJucyB6ZXJvIG9yIG1vcmUgWElEcyBmb3IgdGhlIHRyYW5zYWN0aW9uIAotICAgICAqCQlicmFuY2hlcyB0aGF0IGFyZSBjdXJyZW50bHkgaW4gYSBwcmVwYXJlZCBvciBoZXVyaXN0aWNhbGx5IAotICAgICAqCQljb21wbGV0ZWQgc3RhdGUuIElmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIG9wZXJhdGlvbiwgdGhlIHJlc291cmNlCi0gICAgICoJCW1hbmFnZXIgc2hvdWxkIHRocm93IHRoZSBhcHByb3ByaWF0ZSA8Y29kZT5YQUV4Y2VwdGlvbjwvY29kZT4uCisgICAgICogQHBhcmFtICAgIGZsYWcgICAgT25lIG9mIFRNU1RBUlRSU0NBTiwgVE1FTkRSU0NBTiwgVE1OT0ZMQUdTLiBUTU5PRkxBR1MKKyAgICAgKiAgICAgICAgICAgIG11c3QgYmUgdXNlZCB3aGVuIG5vIG90aGVyIGZsYWdzIGFyZSBzZXQgaW4gZmxhZ3MuCisgICAgICogQHJldHVybiAgICBUaGUgcmVzb3VyY2UgbWFuYWdlciByZXR1cm5zIHplcm8gb3IgbW9yZSBYSURzIGZvciB0aGUgdHJhbnNhY3Rpb24KKyAgICAgKiAgICAgICAgYnJhbmNoZXMgdGhhdCBhcmUgY3VycmVudGx5IGluIGEgcHJlcGFyZWQgb3IgaGV1cmlzdGljYWxseQorICAgICAqICAgICAgICBjb21wbGV0ZWQgc3RhdGUuIElmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIG9wZXJhdGlvbiwgdGhlIHJlc291cmNlCisgICAgICogICAgICAgIG1hbmFnZXIgc2hvdWxkIHRocm93IHRoZSBhcHByb3ByaWF0ZSA8Y29kZT5YQUV4Y2VwdGlvbjwvY29kZT4uCiAgICAgICovCiAgICAgcHVibGljIFhpZFtdIHJlY292ZXIoaW50IGZsYWcpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiB4YXIucmVjb3ZlcihmbGFnKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBJbmZvcm0gdGhlIHJlc291cmNlIG1hbmFnZXIgdG8gcm9sbCBiYWNrIHdvcmsgZG9uZSBvbiBiZWhhbGYgb2YgYSB0cmFuc2FjdGlvbiBicmFuY2gKICAgICAgKgotICAgICAqIEBwYXJhbQl4aWQJQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgorICAgICAqIEBwYXJhbSAgICB4aWQgICAgQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJvbGxiYWNrKFhpZCB4aWQpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIC8vdGhlIG1jLnRyYW5zYWN0aW9uQ29tcGxldGVkIGNhbGwgaGFzIGNvbWUgaGVyZSBiZWNhc3VlCi0JLy90aGUgdHJhbnNhY3Rpb24gKmFjdHVhbGx5KiBjb21wbGV0ZXMgYWZ0ZXIgdGhlIGZsb3cKLQkvL3JlYWNoZXMgaGVyZS4gdGhlIGVuZCgpIG1ldGhvZCBtaWdodCBub3QgcmVhbGx5IHNpZ25hbAotCS8vY29tcGxldGlvbiBvZiB0cmFuc2FjdGlvbiBpbiBjYXNlIHRoZSB0cmFuc2FjdGlvbiBpcwotCS8vc3VzcGVuZGVkLiBJbiBjYXNlIG9mIHRyYW5zYWN0aW9uIHN1c3BlbnNpb24sIHRoZSBlbmQKLQkvL21ldGhvZCBpcyBzdGlsbCBjYWxsZWQgYnkgdGhlIHRyYW5zYWN0aW9uIG1hbmFnZXIKKyAgICAvL3RoZSB0cmFuc2FjdGlvbiAqYWN0dWFsbHkqIGNvbXBsZXRlcyBhZnRlciB0aGUgZmxvdworICAgIC8vcmVhY2hlcyBoZXJlLiB0aGUgZW5kKCkgbWV0aG9kIG1pZ2h0IG5vdCByZWFsbHkgc2lnbmFsCisgICAgLy9jb21wbGV0aW9uIG9mIHRyYW5zYWN0aW9uIGluIGNhc2UgdGhlIHRyYW5zYWN0aW9uIGlzCisgICAgLy9zdXNwZW5kZWQuIEluIGNhc2Ugb2YgdHJhbnNhY3Rpb24gc3VzcGVuc2lvbiwgdGhlIGVuZAorICAgIC8vbWV0aG9kIGlzIHN0aWxsIGNhbGxlZCBieSB0aGUgdHJhbnNhY3Rpb24gbWFuYWdlcgogICAgICAgICBtYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOwogICAgICAgICB4YXIucm9sbGJhY2soeGlkKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBmb3IgdGhpcyA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlzZWNvbmRzCXRoZSB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIGluIHNlY29uZHMuCi0gICAgICogQHJldHVybgl0cnVlIGlmIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaXMgc2V0IHN1Y2Nlc3NmdWxseTsgb3RoZXJ3aXNlIGZhbHNlLgorICAgICAqIEBwYXJhbSAgICBzZWNvbmRzICAgIHRoZSB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIGluIHNlY29uZHMuCisgICAgICogQHJldHVybiAgICB0cnVlIGlmIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaXMgc2V0IHN1Y2Nlc3NmdWxseTsgb3RoZXJ3aXNlIGZhbHNlLgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIHNldFRyYW5zYWN0aW9uVGltZW91dChpbnQgc2Vjb25kcykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIHhhci5zZXRUcmFuc2FjdGlvblRpbWVvdXQoc2Vjb25kcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU3RhcnQgd29yayBvbiBiZWhhbGYgb2YgYSB0cmFuc2FjdGlvbiBicmFuY2ggc3BlY2lmaWVkIGluIHhpZC4KICAgICAgKgotICAgICAqIEBwYXJhbQl4aWQJQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllciB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIHJlc291cmNlCi0gICAgICogQHJldHVybglmbGFncwlPbmUgb2YgVE1OT0ZMQUdTLCBUTUpPSU4sIG9yIFRNUkVTVU1FCisgICAgICogQHBhcmFtICAgIHhpZCAgICBBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVzb3VyY2UKKyAgICAgKiBAcmV0dXJuICAgIGZsYWdzICAgIE9uZSBvZiBUTU5PRkxBR1MsIFRNSk9JTiwgb3IgVE1SRVNVTUUKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzdGFydChYaWQgeGlkLCBpbnQgZmxhZ3MpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIC8vR0pDSU5UCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvYnVpbGQueG1sCmluZGV4IDk2Nzg2OGIuLjY0MTA1NTcgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvYnVpbGQueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxwcm9qZWN0IG5hbWU9ImpkYmNfY29ubmVjdG9yIiBiYXNlZGlyPSIke2dqYy5ob21lfSIgZGVmYXVsdD0iYnVpbGQiPgogICA8cHJvcGVydHkgbmFtZT0icGtnLmRpciIgdmFsdWU9ImNvbS9zdW4vZ2pjL3NwaSIvPgotIAorCiAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iPgogICAgIDxhbnQgYW50ZmlsZT0iYnVpbGQueG1sIiBkaXI9IiR7Z2pjLmhvbWV9L2JpbiIgdGFyZ2V0PSJjbGVhbiIvPgogICA8L3RhcmdldD4KQEAgLTM3LDUgKzM3LDUgQEAKIAogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkMTQiIGRlcGVuZHM9ImNvbXBpbGUxNCIvPgogCi0JPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iYnVpbGQxMywgYnVpbGQxNCIvPgorICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImJ1aWxkMTMsIGJ1aWxkMTQiLz4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL01ldGhvZEV4ZWN1dG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9NZXRob2RFeGVjdXRvci5qYXZhCmluZGV4IGNlMzIxYWYuLjllN2YyNTMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL01ldGhvZEV4ZWN1dG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvTWV0aG9kRXhlY3V0b3IuamF2YQpAQCAtMjYsOCArMjYsOCBAQAogLyoqCiAgKiBFeGVjdXRlIHRoZSBtZXRob2RzIGJhc2VkIG9uIHRoZSBwYXJhbWV0ZXJzLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMjMKLSAqIEBhdXRob3IJQmlub2QgUC5HCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzIzCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRwogICovCiBwdWJsaWMgY2xhc3MgTWV0aG9kRXhlY3V0b3IgaW1wbGVtZW50cyBqYXZhLmlvLlNlcmlhbGl6YWJsZXsKIApAQCAtMzksMTMwICszOSwxMzAgQEAKICAgICAvKioKICAgICAgKiBFeGNldXRlIGEgc2ltcGxlIHNldCBNZXRob2QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdmFsdWUJVmFsdWUgdG8gYmUgc2V0LgotICAgICAqIEBwYXJhbQltZXRob2QJPGNvZGU+TWV0aG9kPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHBhcmFtCW9iaglPYmplY3Qgb24gd2hpY2ggdGhlIG1ldGhvZCB0byBiZSBleGVjdXRlZC4KKyAgICAgKiBAcGFyYW0gICAgdmFsdWUgICAgVmFsdWUgdG8gYmUgc2V0LgorICAgICAqIEBwYXJhbSAgICBtZXRob2QgICAgPGNvZGU+TWV0aG9kPC9jb2RlPiBvYmplY3QuCisgICAgICogQHBhcmFtICAgIG9iaiAgICBPYmplY3Qgb24gd2hpY2ggdGhlIG1ldGhvZCB0byBiZSBleGVjdXRlZC4KICAgICAgKiBAdGhyb3dzICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4sIGluIGNhc2Ugb2YgdGhlIG1pc21hdGNoIG9mIHBhcmFtZXRlciB2YWx1ZXMgb3IKLSAgICAgKgkJYSBzZWN1cml0eSB2aW9sYXRpb24uICAgICAKKyAgICAgKiAgICAgICAgYSBzZWN1cml0eSB2aW9sYXRpb24uCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcnVuSmF2YUJlYW5NZXRob2QoU3RyaW5nIHZhbHVlLCBNZXRob2QgbWV0aG9kLCBPYmplY3Qgb2JqKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb257Ci0gICAgCWlmICh2YWx1ZT09bnVsbCB8fCB2YWx1ZS50cmltKCkuZXF1YWxzKCIiKSkgewotICAgIAkgICAgcmV0dXJuOwotICAgIAl9Ci0gICAgCXRyeSB7Ci0gICAgCSAgICBDbGFzc1tdIHBhcmFtZXRlcnMgPSBtZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKTsKLSAgICAJICAgIGlmICggcGFyYW1ldGVycy5sZW5ndGggPT0gMSkgewotICAgIAkgICAgICAgIE9iamVjdFtdIHZhbHVlcyA9IG5ldyBPYmplY3RbMV07Ci0gICAgCSAgICAJdmFsdWVzWzBdID0gY29udmVydFR5cGUocGFyYW1ldGVyc1swXSwgdmFsdWUpOwotICAgIAkgICAgCW1ldGhvZC5pbnZva2Uob2JqLCB2YWx1ZXMpOwotICAgIAkgICAgfQotICAgIAl9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGlhZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpYWUpOwotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOwotICAgIAl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWUpOwotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBcmd1bWVudHMgYXJlIHdyb25nIGZvciB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7ICAgIAkKLSAgICAJfSBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBpdGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaXRlKTsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsgICAgCQotICAgIAl9CisgICAgICAgIGlmICh2YWx1ZT09bnVsbCB8fCB2YWx1ZS50cmltKCkuZXF1YWxzKCIiKSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBDbGFzc1tdIHBhcmFtZXRlcnMgPSBtZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKTsKKyAgICAgICAgICAgIGlmICggcGFyYW1ldGVycy5sZW5ndGggPT0gMSkgeworICAgICAgICAgICAgICAgIE9iamVjdFtdIHZhbHVlcyA9IG5ldyBPYmplY3RbMV07CisgICAgICAgICAgICAgICAgdmFsdWVzWzBdID0gY29udmVydFR5cGUocGFyYW1ldGVyc1swXSwgdmFsdWUpOworICAgICAgICAgICAgICAgIG1ldGhvZC5pbnZva2Uob2JqLCB2YWx1ZXMpOworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGlhZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpYWUpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOworICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWUpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBcmd1bWVudHMgYXJlIHdyb25nIGZvciB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7CisgICAgICAgIH0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gaXRlKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGl0ZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBFeGVjdXRlcyB0aGUgbWV0aG9kLiAgICAgCisgICAgICogRXhlY3V0ZXMgdGhlIG1ldGhvZC4KICAgICAgKgotICAgICAqIEBwYXJhbQltZXRob2QgPGNvZGU+TWV0aG9kPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHBhcmFtCW9iaglPYmplY3Qgb24gd2hpY2ggdGhlIG1ldGhvZCB0byBiZSBleGVjdXRlZC4KLSAgICAgKiBAcGFyYW0JdmFsdWVzCVBhcmFtZXRlciB2YWx1ZXMgZm9yIGV4ZWN1dGluZyB0aGUgbWV0aG9kLgorICAgICAqIEBwYXJhbSAgICBtZXRob2QgPGNvZGU+TWV0aG9kPC9jb2RlPiBvYmplY3QuCisgICAgICogQHBhcmFtICAgIG9iaiAgICBPYmplY3Qgb24gd2hpY2ggdGhlIG1ldGhvZCB0byBiZSBleGVjdXRlZC4KKyAgICAgKiBAcGFyYW0gICAgdmFsdWVzICAgIFBhcmFtZXRlciB2YWx1ZXMgZm9yIGV4ZWN1dGluZyB0aGUgbWV0aG9kLgogICAgICAqIEB0aHJvd3MgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiwgaW4gY2FzZSBvZiB0aGUgbWlzbWF0Y2ggb2YgcGFyYW1ldGVyIHZhbHVlcyBvcgotICAgICAqCQlhIHNlY3VyaXR5IHZpb2xhdGlvbi4KKyAgICAgKiAgICAgICAgYSBzZWN1cml0eSB2aW9sYXRpb24uCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcnVuTWV0aG9kKE1ldGhvZCBtZXRob2QsIE9iamVjdCBvYmosIFZlY3RvciB2YWx1ZXMpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKLSAgICAJdHJ5IHsKLQkgICAgQ2xhc3NbXSBwYXJhbWV0ZXJzID0gbWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCk7Ci0JICAgIGlmICh2YWx1ZXMuc2l6ZSgpICE9IHBhcmFtZXRlcnMubGVuZ3RoKSB7Ci0JICAgICAgICByZXR1cm47Ci0JICAgIH0KLSAgICAJICAgIE9iamVjdFtdIGFjdHVhbFZhbHVlcyA9IG5ldyBPYmplY3RbcGFyYW1ldGVycy5sZW5ndGhdOwotICAgIAkgICAgZm9yIChpbnQgaSA9MDsgaTxwYXJhbWV0ZXJzLmxlbmd0aCA7IGkrKykgewotICAgIAkgICAgCVN0cmluZyB2YWwgPSAoU3RyaW5nKSB2YWx1ZXMuZ2V0KGkpOwotICAgIAkgICAgCWlmICh2YWwudHJpbSgpLmVxdWFscygiTlVMTCIpKSB7Ci0gICAgCSAgICAJICAgIGFjdHVhbFZhbHVlc1tpXSA9IG51bGw7Ci0gICAgCSAgICAJfSBlbHNlIHsKLSAgICAJICAgIAkgICAgYWN0dWFsVmFsdWVzW2ldID0gY29udmVydFR5cGUocGFyYW1ldGVyc1tpXSwgdmFsKTsKLSAgICAJICAgIAl9Ci0gICAgCSAgICB9Ci0gICAgCSAgICBtZXRob2QuaW52b2tlKG9iaiwgYWN0dWFsVmFsdWVzKTsKLSAgICAJfWNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGlhZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpYWUpOwotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOwotICAgIAl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWUpOwotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBcmd1bWVudHMgYXJlIHdyb25nIGZvciB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7ICAgIAkKLSAgICAJfSBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBpdGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaXRlKTsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsgICAgCQotICAgIAl9CisgICAgICAgIHRyeSB7CisgICAgICAgIENsYXNzW10gcGFyYW1ldGVycyA9IG1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpOworICAgICAgICBpZiAodmFsdWVzLnNpemUoKSAhPSBwYXJhbWV0ZXJzLmxlbmd0aCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICBPYmplY3RbXSBhY3R1YWxWYWx1ZXMgPSBuZXcgT2JqZWN0W3BhcmFtZXRlcnMubGVuZ3RoXTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPTA7IGk8cGFyYW1ldGVycy5sZW5ndGggOyBpKyspIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgdmFsID0gKFN0cmluZykgdmFsdWVzLmdldChpKTsKKyAgICAgICAgICAgICAgICBpZiAodmFsLnRyaW0oKS5lcXVhbHMoIk5VTEwiKSkgeworICAgICAgICAgICAgICAgICAgICBhY3R1YWxWYWx1ZXNbaV0gPSBudWxsOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGFjdHVhbFZhbHVlc1tpXSA9IGNvbnZlcnRUeXBlKHBhcmFtZXRlcnNbaV0sIHZhbCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgbWV0aG9kLmludm9rZShvYmosIGFjdHVhbFZhbHVlcyk7CisgICAgICAgIH1jYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBpYWUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWFlKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKKyAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGllKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGllKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQXJndW1lbnRzIGFyZSB3cm9uZyBmb3IgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOworICAgICAgICB9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGl0ZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpdGUpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOworICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29udmVydHMgdGhlIHR5cGUgZnJvbSBTdHJpbmcgdG8gdGhlIENsYXNzIHR5cGUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdHlwZQkJQ2xhc3MgbmFtZSB0byB3aGljaCB0aGUgY29udmVyc2lvbiBpcyByZXF1aXJlZC4KLSAgICAgKiBAcGFyYW0JcGFyYW1ldGVyCVN0cmluZyB2YWx1ZSB0byBiZSBjb252ZXJ0ZWQuCi0gICAgICogQHJldHVybglDb252ZXJ0ZWQgdmFsdWUuCisgICAgICogQHBhcmFtICAgIHR5cGUgICAgICAgIENsYXNzIG5hbWUgdG8gd2hpY2ggdGhlIGNvbnZlcnNpb24gaXMgcmVxdWlyZWQuCisgICAgICogQHBhcmFtICAgIHBhcmFtZXRlciAgICBTdHJpbmcgdmFsdWUgdG8gYmUgY29udmVydGVkLgorICAgICAqIEByZXR1cm4gICAgQ29udmVydGVkIHZhbHVlLgogICAgICAqIEB0aHJvd3MgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiwgaW4gY2FzZSBvZiB0aGUgbWlzbWF0Y2ggb2YgcGFyYW1ldGVyIHZhbHVlcyBvcgotICAgICAqCQlhIHNlY3VyaXR5IHZpb2xhdGlvbi4gICAgIAorICAgICAqICAgICAgICBhIHNlY3VyaXR5IHZpb2xhdGlvbi4KICAgICAgKi8KICAgICBwcml2YXRlIE9iamVjdCBjb252ZXJ0VHlwZShDbGFzcyB0eXBlLCBTdHJpbmcgcGFyYW1ldGVyKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb257Ci0gICAgCXRyeSB7Ci0gICAgCSAgICBTdHJpbmcgdHlwZU5hbWUgPSB0eXBlLmdldE5hbWUoKTsKLSAgICAJICAgIGlmICggdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuU3RyaW5nIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuT2JqZWN0IikpIHsKLSAgICAJICAgIAlyZXR1cm4gcGFyYW1ldGVyOwotICAgIAkgICAgfQotICAgIAkKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImludCIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkludGVnZXIiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgSW50ZWdlcihwYXJhbWV0ZXIpOwotICAgIAkgICAgfQotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJzaG9ydCIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLlNob3J0IikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IFNob3J0KHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgIAkgICAgCi0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImJ5dGUiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5CeXRlIikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IEJ5dGUocGFyYW1ldGVyKTsKLSAgICAJICAgIH0gICAgCSAgICAgICAgCSAgICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygibG9uZyIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkxvbmciKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgTG9uZyhwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgICAJICAgICAgICAJICAgICAgIAkgICAgCi0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImZsb2F0IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuRmxvYXQiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgRmxvYXQocGFyYW1ldGVyKTsKLSAgICAJICAgIH0gICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiZG91YmxlIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuRG91YmxlIikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IERvdWJsZShwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgICAJICAgICAgICAJICAgICAgIAkgICAgIAkgICAgICAgIAkgICAgICAgCSAgICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiamF2YS5tYXRoLkJpZ0RlY2ltYWwiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgamF2YS5tYXRoLkJpZ0RlY2ltYWwocGFyYW1ldGVyKTsKLSAgICAJICAgIH0gICAgCSAgICAgICAgCSAgICAgICAJICAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJqYXZhLm1hdGguQmlnSW50ZWdlciIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBqYXZhLm1hdGguQmlnSW50ZWdlcihwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgICAJICAgICAgICAJICAgICAgIAkgICAgICAgIAkgICAgCi0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImJvb2xlYW4iKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5Cb29sZWFuIikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IEJvb2xlYW4ocGFyYW1ldGVyKTsKLSAgICAgICAgICAgIH0JCQorICAgICAgICB0cnkgeworICAgICAgICAgICAgU3RyaW5nIHR5cGVOYW1lID0gdHlwZS5nZXROYW1lKCk7CisgICAgICAgICAgICBpZiAoIHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLlN0cmluZyIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLk9iamVjdCIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcmFtZXRlcjsKKyAgICAgICAgICAgIH0KIAotICAgIAkgICAgcmV0dXJuIHBhcmFtZXRlcjsKLSAgICAJfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19uZmUiLCBwYXJhbWV0ZXIpOwotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHBhcmFtZXRlcisiOiBOb3QgYSB2YWxpZCB2YWx1ZSBmb3IgdGhpcyBtZXRob2QgIik7Ci0gICAgCX0KKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImludCIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkludGVnZXIiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgSW50ZWdlcihwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJzaG9ydCIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLlNob3J0IikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNob3J0KHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImJ5dGUiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5CeXRlIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJ5dGUocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygibG9uZyIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkxvbmciKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTG9uZyhwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJmbG9hdCIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkZsb2F0IikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0KHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImRvdWJsZSIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkRvdWJsZSIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEb3VibGUocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiamF2YS5tYXRoLkJpZ0RlY2ltYWwiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgamF2YS5tYXRoLkJpZ0RlY2ltYWwocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiamF2YS5tYXRoLkJpZ0ludGVnZXIiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgamF2YS5tYXRoLkJpZ0ludGVnZXIocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiYm9vbGVhbiIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkJvb2xlYW4iKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQm9vbGVhbihwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gcGFyYW1ldGVyOworICAgICAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX25mZSIsIHBhcmFtZXRlcik7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24ocGFyYW1ldGVyKyI6IE5vdCBhIHZhbGlkIHZhbHVlIGZvciB0aGlzIG1ldGhvZCAiKTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9TZWN1cml0eVV0aWxzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9TZWN1cml0eVV0aWxzLmphdmEKaW5kZXggZmMxNDliZi4uZjAwOGU3ZiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvU2VjdXJpdHlVdGlscy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL1NlY3VyaXR5VXRpbHMuamF2YQpAQCAtMjksMzYgKzI5LDM2IEBACiAvKioKICAqIFNlY3VyaXR5VXRpbHMgZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8yMgotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMjIKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIHB1YmxpYyBjbGFzcyBTZWN1cml0eVV0aWxzIHsKIAogICAgIC8qKgotICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0LCBnaXZlbiAKLSAgICAgKiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiwgc3ViamVjdCBhbmQgdGhlIAotICAgICAqIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4uIEl0IGZpcnN0IGNoZWNrcyBpZiB0aGUgCi0gICAgICogPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBpcyBudWxsIG9yIG5vdC4gSWYgaXQgaXMgbm90IG51bGwsIAorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0LCBnaXZlbgorICAgICAqIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LCBzdWJqZWN0IGFuZCB0aGUKKyAgICAgKiA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+LiBJdCBmaXJzdCBjaGVja3MgaWYgdGhlCisgICAgICogPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBpcyBudWxsIG9yIG5vdC4gSWYgaXQgaXMgbm90IG51bGwsCiAgICAgICogaXQgY29uc3RydWN0cyBhIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0IHdpdGgKICAgICAgKiB0aGUgdXNlciBhbmQgcGFzc3dvcmQgZmllbGRzIGZyb20gdGhlIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gYW5kIHJldHVybnMgdGhpcwotICAgICAqIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0LiBJZiB0aGUgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiAKLSAgICAgKiBpcyBudWxsLCBpdCByZXRyaWV2ZXMgdGhlIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0cyBmcm9tIAorICAgICAqIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0LiBJZiB0aGUgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPgorICAgICAqIGlzIG51bGwsIGl0IHJldHJpZXZlcyB0aGUgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3RzIGZyb20KICAgICAgKiB0aGUgPGNvZGU+U3ViamVjdDwvY29kZT4gcGFyYW1ldGVyIGFuZCByZXR1cm5zIHRoZSBmaXJzdAotICAgICAqIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0IHdoaWNoIGNvbnRhaW5zIGEgCisgICAgICogPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3Qgd2hpY2ggY29udGFpbnMgYQogICAgICAqIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4sIGluc3RhbmNlIGVxdWl2YWxlbnQKICAgICAgKiB0byB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiwgcGFyYW1ldGVyLgogICAgICAqCi0gICAgICogQHBhcmFtCW1jZgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+Ci0gICAgICogQHBhcmFtCXN1YmplY3QJPGNvZGU+U3ViamVjdDwvY29kZT4KLSAgICAgKiBAcGFyYW0JaW5mbwk8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+Ci0gICAgICogQHJldHVybgk8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+Ci0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4JZ2VuZXJpYyBleGNlcHRpb24gaWYgb3BlcmF0aW9uIGZhaWxzCi0gICAgICogQHRocm93cwk8Y29kZT5TZWN1cml0eUV4Y2VwdGlvbjwvY29kZT4JaWYgYWNjZXNzIHRvIHRoZSA8Y29kZT5TdWJqZWN0PC9jb2RlPiBpbnN0YW5jZSBpcyBkZW5pZWQKKyAgICAgKiBAcGFyYW0gICAgbWNmICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgc3ViamVjdCAgICA8Y29kZT5TdWJqZWN0PC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBpbmZvICAgIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiAgICBnZW5lcmljIGV4Y2VwdGlvbiBpZiBvcGVyYXRpb24gZmFpbHMKKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlNlY3VyaXR5RXhjZXB0aW9uPC9jb2RlPiAgICBpZiBhY2Nlc3MgdG8gdGhlIDxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIGlzIGRlbmllZAogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgUGFzc3dvcmRDcmVkZW50aWFsIGdldFBhc3N3b3JkQ3JlZGVudGlhbChmaW5hbCBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmLAogICAgICAgICAgZmluYWwgU3ViamVjdCBzdWJqZWN0LCBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm8gaW5mbykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKIAotCWlmIChpbmZvID09IG51bGwpIHsKKyAgICBpZiAoaW5mbyA9PSBudWxsKSB7CiAgICAgICAgICAgICBpZiAoc3ViamVjdCA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtODksMTQgKzg5LDE0IEBACiAgICAgICAgICAgICByZXR1cm4gcGM7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRydWUgaWYgdHdvIHN0cmluZ3MgYXJlIGVxdWFsOyBmYWxzZSBvdGhlcndpc2UKLSAgICAgKiAKLSAgICAgKiBAcGFyYW0Jc3RyMQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHBhcmFtCXN0cjIJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEByZXR1cm4JdHJ1ZQlpZiB0aGUgdHdvIHN0cmluZ3MgYXJlIGVxdWFsCi0gICAgICogICAgICAgIAlmYWxzZQlvdGhlcndpc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzdHIxICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgc3RyMiAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHJldHVybiAgICB0cnVlICAgIGlmIHRoZSB0d28gc3RyaW5ncyBhcmUgZXF1YWwKKyAgICAgKiAgICAgICAgICAgIGZhbHNlICAgIG90aGVyd2lzZQogICAgICAqLwogICAgIHN0YXRpYyBwcml2YXRlIGJvb2xlYW4gaXNFcXVhbChTdHJpbmcgc3RyMSwgU3RyaW5nIHN0cjIpIHsKICAgICAgICAgaWYgKHN0cjEgPT0gbnVsbCkgewpAQCAtMTA5LDEwICsxMDksMTAgQEAKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRydWUgaWYgdHdvIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0cyBhcmUgZXF1YWw7IGZhbHNlIG90aGVyd2lzZQogICAgICAqCi0gICAgICogQHBhcmFtCXBDMQk8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+Ci0gICAgICogQHBhcmFtCXBDMgk8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+Ci0gICAgICogQHJldHVybgl0cnVlCWlmIHRoZSB0d28gUGFzc3dvcmRDcmVkZW50aWFscyBhcmUgZXF1YWwKLSAgICAgKiAgICAgICAgCWZhbHNlCW90aGVyd2lzZQorICAgICAqIEBwYXJhbSAgICBwQzEgICAgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBwQzIgICAgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgdHJ1ZSAgICBpZiB0aGUgdHdvIFBhc3N3b3JkQ3JlZGVudGlhbHMgYXJlIGVxdWFsCisgICAgICogICAgICAgICAgICBmYWxzZSAgICBvdGhlcndpc2UKICAgICAgKi8KICAgICBzdGF0aWMgcHVibGljIGJvb2xlYW4gaXNQYXNzd29yZENyZWRlbnRpYWxFcXVhbChQYXNzd29yZENyZWRlbnRpYWwgcEMxLCBQYXNzd29yZENyZWRlbnRpYWwgcEMyKSB7CiAgICAgICAgIGlmIChwQzEgPT0gcEMyKQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvYnVpbGQueG1sCmluZGV4IGE1NWJiZjAuLmYwNjBlN2QgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9idWlsZC54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPHByb2plY3QgbmFtZT0iamRiY19jb25uZWN0b3IiIGJhc2VkaXI9Ii4iIGRlZmF1bHQ9ImJ1aWxkIj4KICAgPHByb3BlcnR5IG5hbWU9InBrZy5kaXIiIHZhbHVlPSJjb20vc3VuL2dqYy91dGlsIi8+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iPgogICAgIDxhbnQgYW50ZmlsZT0iYnVpbGQueG1sIiBkaXI9IiR7Z2pjLmhvbWV9L2JpbiIgdGFyZ2V0PSJjbGVhbiIvPgogICA8L3RhcmdldD4KQEAgLTMzLDcgKzMzLDcgQEAKICAgICAgIDxqYXIgamFyZmlsZT0iJHtkaXN0LmRpcn0vJHtwa2cuZGlyfS91dGlsLmphciIgYmFzZWRpcj0iJHtjbGFzcy5kaXJ9IgogICAgICAgICBpbmNsdWRlcz0iJHtwa2cuZGlyfS8qKi8qIi8+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUxMyIgZGVwZW5kcz0iY29tcGlsZSIvPgogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUxNCIgZGVwZW5kcz0iY29tcGlsZSIvPgogCkBAIC00NCw1ICs0NCw1IEBACiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQxNCIgZGVwZW5kcz0iY29tcGlsZTE0LCBwYWNrYWdlMTQiLz4KIAogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJidWlsZDEzLCBidWlsZDE0Ii8+Ci0gIAorCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9zZXJ2bGV0L1NpbXBsZUJhbmtTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9zZXJ2bGV0L1NpbXBsZUJhbmtTZXJ2bGV0LmphdmEKaW5kZXggZWUzNjk1Zi4uYTQ1ZGMwZiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvc2VydmxldC9TaW1wbGVCYW5rU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3NlcnZsZXQvU2ltcGxlQmFua1NlcnZsZXQuamF2YQpAQCAtMTcsMTUgKzE3LDE1IEBACiBwYWNrYWdlIHNhbXBsZXMuZWpiLnN1YmNsYXNzaW5nLnNlcnZsZXQ7CiAKIGltcG9ydCBqYXZhLmlvLio7Ci1pbXBvcnQgamF2YS51dGlsLio7IAotaW1wb3J0IGpha2FydGEuc2VydmxldC4qOyAKLWltcG9ydCBqYXZheC5uYW1pbmcuKjsgCi1pbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuKjsgCitpbXBvcnQgamF2YS51dGlsLio7CitpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lio7CitpbXBvcnQgamF2YXgubmFtaW5nLio7CitpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuKjsKIAotaW1wb3J0IHNhbXBsZXMuZWpiLnN1YmNsYXNzaW5nLmVqYi4qOyAKK2ltcG9ydCBzYW1wbGVzLmVqYi5zdWJjbGFzc2luZy5lamIuKjsKIGltcG9ydCBjb20uc3VuLmpkYmNyYS5zcGkuSmRiY1NldHVwQWRtaW47CiAKLXB1YmxpYyBjbGFzcyBTaW1wbGVCYW5rU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsgIAorcHVibGljIGNsYXNzIFNpbXBsZUJhbmtTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewogCiAKICAgSW5pdGlhbENvbnRleHQgaW5pdENvbnRleHQgPSBudWxsOwpAQCAtNDEsMTMgKzQxLDEzIEBACiAgIHsKICAgfQogCi0gIHB1YmxpYyB2b2lkIGRvR2V0IChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCxIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSAKLSAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgCisgIHB1YmxpYyB2b2lkIGRvR2V0IChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCxIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKQorICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7Ci0gIH0gIAorICB9CiAKLSAgLyoqIGhhbmRsZXMgdGhlIEhUVFAgUE9TVCBvcGVyYXRpb24gKiovIAotICBwdWJsaWMgdm9pZCBkb1Bvc3QgKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIAorICAvKiogaGFuZGxlcyB0aGUgSFRUUCBQT1NUIG9wZXJhdGlvbiAqKi8KKyAgcHVibGljIHZvaWQgZG9Qb3N0IChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCxIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKQogICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogCiAKQEAgLTU3LDcgKzU3LDcgQEAKICAgICAgIH1jYXRjaChFeGNlcHRpb24gZSl7CiAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgIH0KLSAgICAgIAorCiAgICAgZG9Mb29rdXAoKTsKICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNpbXBsZUJhbmtTZXJ2bGV0IGlzIGV4ZWN1dGluZyIpOwogICAgIFN0cmluZyBTU04gPSByZXF1ZXN0LmdldFBhcmFtZXRlcigiU1NOIik7CkBAIC03MywxNCArNzMsMTQgQEAKICAgICBTdHJpbmcgemlwQ29kZSA9ICIiOwogICAgIGxvbmcgY3VycmVudFNhdmluZ3NCYWxhbmNlID0gMDsKICAgICBsb25nIGN1cnJlbnRDaGVja2luZ0JhbGFuY2UgPSAwOwotICAgICAKKwogICAgIFN0cmluZyBhY3Rpb24gPSByZXF1ZXN0LmdldFBhcmFtZXRlcigiYWN0aW9uIik7CiAgICAgaWYgKGFjdGlvbi5lcXVhbHMoIkNyZWF0ZSIpKQogICAgIHsKICAgICAgIG1lc3NhZ2UgPSAiQWRkIEN1c3RvbWVyIjsKICAgICAgIGpzcCA9ICIvU2ltcGxlQmFua0FkZC5qc3AiOwogICAgIH0KLSAgICBlbHNlIGlmIChhY3Rpb24uZXF1YWxzKCJBZGQgQ3VzdG9tZXIiKSkgCisgICAgZWxzZSBpZiAoYWN0aW9uLmVxdWFscygiQWRkIEN1c3RvbWVyIikpCiAgICAgewogICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBZGQgQ3VzdG9tZXIgYnV0dG9uIHByZXNzZWQiKTsKICAgICAgIFNTTiA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJTU04iKTsKQEAgLTk3LDcgKzk3LDcgQEAKICAgICAgICAgY3VzdG9tZXJTYXZpbmdzID0gY3VzdG9tZXJTYXZpbmdzSG9tZS5jcmVhdGUoU1NOLCBsYXN0TmFtZSwgZmlyc3ROYW1lLCBhZGRyZXNzMSwgYWRkcmVzczIsIGNpdHksIHN0YXRlLCB6aXBDb2RlKTsKICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ291bGQgbm90IGNyZWF0ZSB0aGUgY3VzdG9tZXIgc2F2aW5ncyByZW1vdGUgYmVhbiA6ICIgKyBlLnRvU3RyaW5nKCkpOwotCXRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIC8vcmV0dXJuOwogICAgICAgfQogICAgICAgbWVzc2FnZSA9ICJDdXN0b21lciBBZGRlZC4iOwpAQCAtMTEwLDcgKzExMCw3IEBACiAgICAgICAgIGN1c3RvbWVyU2F2aW5ncyA9IGN1c3RvbWVyU2F2aW5nc0hvbWUuZmluZEJ5UHJpbWFyeUtleShTU04pOwogICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb3VsZCBub3QgZmluZCB0aGUgY3VzdG9tZXIgcmVtb3RlIGJlYW4gOiAiICsgZS50b1N0cmluZygpKTsKLQl0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CisgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAvL3JldHVybjsKICAgICAgIH0KICAgICAgIGpzcCA9ICIvU2ltcGxlQmFua0VkaXQuanNwIjsKQEAgLTEyMiw3ICsxMjIsNyBAQAogICAgICAgICBjdXN0b21lclNhdmluZ3MgPSBjdXN0b21lclNhdmluZ3NIb21lLmZpbmRCeVByaW1hcnlLZXkoU1NOKTsKICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ291bGQgbm90IGZpbmQgdGhlIGN1c3RvbWVyIHNhdmluZ3MgcmVtb3RlIGJlYW4gOiAiICsgZS50b1N0cmluZygpKTsKLQl0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CisgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAvL3JldHVybjsKICAgICAgIH0KICAgICAgIG1lc3NhZ2UgPSAiRGVsZXRlIEN1c3RvbWVyIjsKQEAgLTEzNCwxMiArMTM0LDEyIEBACiAgICAgICAgIGN1c3RvbWVyU2F2aW5nc0hvbWUuZmluZEJ5UHJpbWFyeUtleShTU04pLnJlbW92ZSgpOwogICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb3VsZCBub3QgZGVsZXRlIHRoZSBjdXN0b21lciBzYXZpbmdzIGJlYW4gOiAiICsgZS50b1N0cmluZygpKTsKLQl0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CisgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAvL3JldHVybjsKICAgICAgIH0KICAgICAgIG1lc3NhZ2UgPSAiQ3VzdG9tZXIgRGVsZXRlZC4iOwogICAgICAganNwID0gIi9TaW1wbGVCYW5rTWVzc2FnZS5qc3AiOwotICAgIH0gIAorICAgIH0KIAogCiAgICAgZWxzZSBpZiAoYWN0aW9uLmVxdWFscygiVXBkYXRlIikpCkBAIC0xNDksNyArMTQ5LDcgQEAKICAgICAgICAgY3VzdG9tZXJTYXZpbmdzID0gKEN1c3RvbWVyU2F2aW5ncyljdXN0b21lclNhdmluZ3NIb21lLmZpbmRCeVByaW1hcnlLZXkoU1NOKTsKICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ291bGQgbm90IGZpbmQgdGhlIGN1c3RvbWVyIHNhdmluZ3MgcmVtb3RlIGJlYW4gOiAiICsgZS50b1N0cmluZygpKTsKLQl0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CisgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAvL3JldHVybjsKICAgICAgIH0KIApAQCAtMTU4LDcgKzE1OCw3IEBACiAgICAgICAgIGN1c3RvbWVyQ2hlY2tpbmcgPSAoQ3VzdG9tZXJDaGVja2luZyljdXN0b21lckNoZWNraW5nSG9tZS5maW5kQnlQcmltYXJ5S2V5KFNTTik7CiAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvdWxkIG5vdCBmaW5kIHRoZSBjdXN0b21lciBjaGVja2luZyByZW1vdGUgYmVhbiA6ICIgKyBlLnRvU3RyaW5nKCkpOwotCXRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIC8vcmV0dXJuOwogICAgICAgfQogCkBAIC0yMTgsOSArMjE4LDkgQEAKICAgICBSZXF1ZXN0RGlzcGF0Y2hlciBkaXNwYXRjaGVyID0gZ2V0U2VydmxldENvbnRleHQoKS5nZXRSZXF1ZXN0RGlzcGF0Y2hlcihqc3ApOwogICAgIGRpc3BhdGNoZXIuaW5jbHVkZShyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgcmV0dXJuOwotICB9IAorICB9CiAKLSAgcHVibGljIHZvaWQgZG9Mb29rdXAoKSAKKyAgcHVibGljIHZvaWQgZG9Mb29rdXAoKQogICB7CiAgICAgdHJ5IHsKICAgICAgIGluaXRDb250ZXh0ID0gbmV3IGphdmF4Lm5hbWluZy5Jbml0aWFsQ29udGV4dCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvc3FsL2Ryb3BCYW5rVGFibGVzLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ub25zdHJpbmdtY2Zwcm9wZXJ0aWVzL3NxbC9kcm9wQmFua1RhYmxlcy5zcWwKaW5kZXggZGY5ZGYzNC4uMzNhNzA2OSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL25vbnN0cmluZ21jZnByb3BlcnRpZXMvc3FsL2Ryb3BCYW5rVGFibGVzLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvbm9uc3RyaW5nbWNmcHJvcGVydGllcy9zcWwvZHJvcEJhbmtUYWJsZXMuc3FsCkBAIC0xICsxIEBACi1kcm9wIHRhYmxlIGN1c3RvbWVyMjsNCitkcm9wIHRhYmxlIGN1c3RvbWVyMjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9vc2dpLXJlc291cmNlcy10ZXN0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvb3NnaS1yZXNvdXJjZXMtdGVzdC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGUyY2M3NWQuLmRjMTljOWIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9vc2dpLXJlc291cmNlcy10ZXN0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL29zZ2ktcmVzb3VyY2VzLXRlc3QvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTYgKzE1LDE2IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXN1YmNsYXNzaW5nIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zdWJjbGFzc2luZyIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0ic3ViY2xhc3NpbmciLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9vc2dpLXJlc291cmNlcy10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9vc2dpX3Jlc291cmNlc190ZXN0L1Jlc291cmNlc1Rlc3RBY3RpdmF0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9vc2dpLXJlc291cmNlcy10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9vc2dpX3Jlc291cmNlc190ZXN0L1Jlc291cmNlc1Rlc3RBY3RpdmF0b3IuamF2YQppbmRleCA3MmYzNjdhLi5hNGQzYjU3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvb3NnaS1yZXNvdXJjZXMtdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvb3NnaV9yZXNvdXJjZXNfdGVzdC9SZXNvdXJjZXNUZXN0QWN0aXZhdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL29zZ2ktcmVzb3VyY2VzLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL29zZ2lfcmVzb3VyY2VzX3Rlc3QvUmVzb3VyY2VzVGVzdEFjdGl2YXRvci5qYXZhCkBAIC05Miw3ICs5Miw3IEBACiAKIC8qCiAgICAgICAgIHRlc3RKZGJjUmVzb3VyY2VzKG51bGwpOwotICAgICAgICAKKwogICAgICAgICB0ZXN0SmRiY1Jlc291cmNlcygiKG9zZ2kuamRiYy5kcml2ZXIuY2xhc3M9b3JhY2xlLmpkYmMucG9vbC5PcmFjbGVEYXRhU291cmNlKSIpOwogCiAgICAgICAgIHRlc3RKZGJjUmVzb3VyY2VzKCIoam5kaS1uYW1lPWpkYmMvb3JhY2xlX3R5cGU0X3Jlc291cmNlKSIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3Jhci1hY2Nlc3NpYmlsaXR5L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmFyLWFjY2Vzc2liaWxpdHkvYnVpbGQucHJvcGVydGllcwppbmRleCA4MzVjN2NmLi4wZWU2NjFmIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmFyLWFjY2Vzc2liaWxpdHkvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmFyLWFjY2Vzc2liaWxpdHkvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJyYXItYWNjZXNzaWJpbGl0eS10ZXN0Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9InJhcmZpbGUiIHZhbHVlPSJyYXIvYmxhY2tib3gtdHgucmFyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmFyLWFjY2Vzc2liaWxpdHkvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3Jhci1hY2Nlc3NpYmlsaXR5L2J1aWxkLnhtbAppbmRleCBkNDIzZTExLi5jNzAwMzU2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmFyLWFjY2Vzc2liaWxpdHkvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yYXItYWNjZXNzaWJpbGl0eS9idWlsZC54bWwKQEAgLTUyLDcgKzUyLDcgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJleHBlY3RlZF9jb3VudCIgdmFsdWU9IjIiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgICAKKwogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yYXItYWNjZXNzaWJpbGl0eS9lamIvU2ltcGxlU2Vzc2lvbkJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yYXItYWNjZXNzaWJpbGl0eS9lamIvU2ltcGxlU2Vzc2lvbkJlYW4uamF2YQppbmRleCA2YzQwNTZhLi4yZGQwMjczIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmFyLWFjY2Vzc2liaWxpdHkvZWpiL1NpbXBsZVNlc3Npb25CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3Jhci1hY2Nlc3NpYmlsaXR5L2VqYi9TaW1wbGVTZXNzaW9uQmVhbi5qYXZhCkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgICAgICAgICAgICAgSW5pdGlhbENvbnRleHQgY3R4ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICAgICAgT2JqZWN0IG8gPSBjdHgubG9va3VwKHJlcyk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDTEFTU19OQU1FOiAiK28uZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOwotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ0xBU1NfTE9BREVSOiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDTEFTU19MT0FERVI6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKS5sb2FkQ2xhc3Moby5nZXRDbGFzcygpLmdldE5hbWUoKSkuZ2V0Q2xhc3NMb2FkZXIoKSk7CiAgICAgICAgICAgICAgICAgY291bnQrKzsKICAgICAgICAgICAgIH1jYXRjaChUaHJvd2FibGUgZSl7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmFyLWFjY2Vzc2liaWxpdHkvcmFyL3NyYy9jb20vc3VuL2Nvbm5lY3Rvci9ibGFja2JveC9KZGJjQ29ubmVjdGlvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3Jhci1hY2Nlc3NpYmlsaXR5L3Jhci9zcmMvY29tL3N1bi9jb25uZWN0b3IvYmxhY2tib3gvSmRiY0Nvbm5lY3Rpb24uamF2YQppbmRleCA3MDEwMGI4Li5lYjUxMzIzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmFyLWFjY2Vzc2liaWxpdHkvcmFyL3NyYy9jb20vc3VuL2Nvbm5lY3Rvci9ibGFja2JveC9KZGJjQ29ubmVjdGlvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yYXItYWNjZXNzaWJpbGl0eS9yYXIvc3JjL2NvbS9zdW4vY29ubmVjdG9yL2JsYWNrYm94L0pkYmNDb25uZWN0aW9uLmphdmEKQEAgLTE4NCw3ICsxODQsNyBAQAogICAgIH0KIAogICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotICAgIC8vIFRIRSBGT0xMT1dJTkcgQVBJUyBBUkUgTkVXIEZST00gSkRLIDEuNCAvLyAgICAgICAgCisgICAgLy8gVEhFIEZPTExPV0lORyBBUElTIEFSRSBORVcgRlJPTSBKREsgMS40IC8vCiAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKICAgICAvLy8vLy8vLy8vLy8vICBCRUdJTiAgSkRLIDEuNCAgLy8vLy8vLy8vLy8vLy8KQEAgLTMzMCwyNyArMzMwLDI3IEBACiAgICAgfQogCiAgICAgLy8vLy8vLy8vLy8vLyAgRU5EICBKREsgMS40ICAvLy8vLy8vLy8vLy8vLwotICAgIAorCiAgICAgcHVibGljIGludCBnZXROZXR3b3JrVGltZW91dCgpIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBuZXcgZmVhdHVyZS4iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXROZXR3b3JrVGltZW91dChFeGVjdXRvciBleGVjdXRvciwgaW50IG1pbGxpc2Vjb25kcykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICB0aHJvdyBuZXcgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiRG8gbm90IHN1cHBvcnQgSmF2YSA3IG5ldyBmZWF0dXJlLiIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGFib3J0KEV4ZWN1dG9yIGV4ZWN1dG9yKSAgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgbmV3IGZlYXR1cmUuIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBnZXRTY2hlbWEoKSB0aHJvd3MgU1FMRXhjZXB0aW9uewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBuZXcgZmVhdHVyZS4iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRTY2hlbWEoU3RyaW5nIHNjaGVtYSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgbmV3IGZlYXR1cmUuIik7CiAgICAgfQotICAgIAorCiAKICAgICB2b2lkIGFzc29jaWF0ZUNvbm5lY3Rpb24oSmRiY01hbmFnZWRDb25uZWN0aW9uIG5ld01jKQogICAgICAgICAgICAgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yYXItYWNjZXNzaWJpbGl0eS9yYXIvc3JjL2NvbS9zdW4vY29ubmVjdG9yL2JsYWNrYm94L0xvY2FsVHhNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yYXItYWNjZXNzaWJpbGl0eS9yYXIvc3JjL2NvbS9zdW4vY29ubmVjdG9yL2JsYWNrYm94L0xvY2FsVHhNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQppbmRleCAyNDgwNTE4Li4xYjIzYjA0IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmFyLWFjY2Vzc2liaWxpdHkvcmFyL3NyYy9jb20vc3VuL2Nvbm5lY3Rvci9ibGFja2JveC9Mb2NhbFR4TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3Jhci1hY2Nlc3NpYmlsaXR5L3Jhci9zcmMvY29tL3N1bi9jb25uZWN0b3IvYmxhY2tib3gvTG9jYWxUeE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCkBAIC0xMDksNyArMTA5LDcgQEAKICAgICAgICAgaWYgKCFnZXRCb29sZWFuV2l0aEdldEJvb2xlYW5BY2Nlc3NvcigpKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkJsYWNrYm94IFJBUiA6IEdldCBCb29sZWFuIEFjY2Vzc29yIGlzIGZhbHNlIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKCFpc0Jvb2xlYW5XaXRoSXNCb29sZWFuQWNjZXNzb3IoKSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJCbGFja2JveCBSQVIgOiBJcyBCb29sZWFuIEFjY2Vzc29yIGlzIGZhbHNlIik7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yYXItYWNjZXNzaWJpbGl0eS9yYXIvc3JjL2NvbS9zdW4vY29ubmVjdG9yL2JsYWNrYm94L1Jlc291cmNlQWRhcHRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3Jhci1hY2Nlc3NpYmlsaXR5L3Jhci9zcmMvY29tL3N1bi9jb25uZWN0b3IvYmxhY2tib3gvUmVzb3VyY2VBZGFwdGVyLmphdmEKaW5kZXggOWQ3OGU2YS4uZGU3MGQ0YSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3Jhci1hY2Nlc3NpYmlsaXR5L3Jhci9zcmMvY29tL3N1bi9jb25uZWN0b3IvYmxhY2tib3gvUmVzb3VyY2VBZGFwdGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3Jhci1hY2Nlc3NpYmlsaXR5L3Jhci9zcmMvY29tL3N1bi9jb25uZWN0b3IvYmxhY2tib3gvUmVzb3VyY2VBZGFwdGVyLmphdmEKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgWEFSZXNvdXJjZVtdIGdldFhBUmVzb3VyY2VzKEFjdGl2YXRpb25TcGVjW10gYWN0aXZhdGlvblNwZWNzKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewotICAgICAgICByZXR1cm4gbnVsbDsgIAorICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9CiAKICAgICBwdWJsaWMgQm9vdHN0cmFwQ29udGV4dCBnZXRCb290c3RyYXBDb250ZXh0KCl7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmFyLWFjY2Vzc2liaWxpdHkvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmFyLWFjY2Vzc2liaWxpdHkvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEKaW5kZXggNDUxNGYzZS4uNTg2MTRiOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3Jhci1hY2Nlc3NpYmlsaXR5L3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yYXItYWNjZXNzaWJpbGl0eS9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YQpAQCAtNzYsNyArNzYsNyBAQAogICAgICAgICB9Y2F0Y2goTmFtaW5nRXhjZXB0aW9uIG5lKXsKICAgICAgICAgICAgIG5lLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9IGNhdGNoIChDcmVhdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsgIAorICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfWZpbmFsbHl7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiRU5EX09GX1RFU1QiKTsKICAgICAgICAgICAgIG91dC5mbHVzaCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3Jhci1hY2Nlc3NpYmlsaXR5L3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yYXItYWNjZXNzaWJpbGl0eS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggNDIzNDExNS4uZWQ2ZGJhYiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3Jhci1hY2Nlc3NpYmlsaXR5L3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmFyLWFjY2Vzc2liaWxpdHkvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDIwICsxLDIwIEBACi1Ecm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0g7DQotDQotQ1JFQVRFIFRBQkxFIFRYTEVWRUxTV0lUQ0ggKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCi1JTlNFUlQgSU5UTyBUWExFVkVMU1dJVENIIFZBTFVFUygxMCwgJ2FiY2QnKTsNCi1JTlNFUlQgSU5UTyBUWExFVkVMU1dJVENIIFZBTFVFUygxMSwgJ3BxcnMnKTsNCi0NCi1Ecm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0gyOw0KLQ0KLUNSRUFURSBUQUJMRSBUWExFVkVMU1dJVENIMiAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikNCi0pOw0KLQ0KLUlOU0VSVCBJTlRPIFRYTEVWRUxTV0lUQ0gyIFZBTFVFUygxLCAnYWJjZCcpOw0KLUlOU0VSVCBJTlRPIFRYTEVWRUxTV0lUQ0gyIFZBTFVFUygyLCAncHFycycpOw0KLQ0KK0Ryb3AgdGFibGUgVFhMRVZFTFNXSVRDSDsKKworQ1JFQVRFIFRBQkxFIFRYTEVWRUxTV0lUQ0ggKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQorKTsKKworSU5TRVJUIElOVE8gVFhMRVZFTFNXSVRDSCBWQUxVRVMoMTAsICdhYmNkJyk7CitJTlNFUlQgSU5UTyBUWExFVkVMU1dJVENIIFZBTFVFUygxMSwgJ3BxcnMnKTsKKworRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIMjsKKworQ1JFQVRFIFRBQkxFIFRYTEVWRUxTV0lUQ0gyICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikKKyk7CisKK0lOU0VSVCBJTlRPIFRYTEVWRUxTV0lUQ0gyIFZBTFVFUygxLCAnYWJjZCcpOworSU5TRVJUIElOVE8gVFhMRVZFTFNXSVRDSDIgVkFMVUVTKDIsICdwcXJzJyk7CisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yYXItYWNjZXNzaWJpbGl0eS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3Jhci1hY2Nlc3NpYmlsaXR5L3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggMGMxMjQyZi4uZDExYTExNSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3Jhci1hY2Nlc3NpYmlsaXR5L3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3Jhci1hY2Nlc3NpYmlsaXR5L3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEsMiArMSwyIEBACi1Ecm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0g7DQotRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIMjsNCitEcm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0g7CitEcm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0gyOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL2FwcC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvYXBwL2J1aWxkLnhtbAppbmRleCA1M2Y4ZGRlLi41MDFmMzdjIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvYXBwL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvYXBwL2J1aWxkLnhtbApAQCAtMzYsOCArMzYsOCBAQAogICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXIiLz4KICA8IS0tCiAgICA8YW50Y2FsbCB0YXJnZXQ9ImVhci1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iZ2VuZXJpYy1lbWJlZGRlZCIvPgotCTxwYXJhbSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJNRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiLz4KKyAgICA8cGFyYW0gbmFtZT0iYXBwbmFtZSIgdmFsdWU9ImdlbmVyaWMtZW1iZWRkZWQiLz4KKyAgICA8cGFyYW0gbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIi8+CiAgICA8L2FudGNhbGw+CiAgLS0+CiAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL2FwcC9zcmMvTUVUQS1JTkYvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvYXBwL3NyYy9NRVRBLUlORi9lamItamFyLnhtbAppbmRleCBlOTQwNDJiLi44ZTU0N2M0IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvYXBwL3NyYy9NRVRBLUlORi9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvYXBwL3NyYy9NRVRBLUlORi9lamItamFyLnhtbApAQCAtMzMsOCArMzMsOCBAQAogICAgICAgPHNlc3Npb24tdHlwZT5TdGF0ZWxlc3M8L3Nlc3Npb24tdHlwZT4KICAgICAgIDx0cmFuc2FjdGlvbi10eXBlPkNvbnRhaW5lcjwvdHJhbnNhY3Rpb24tdHlwZT4KICAgICAgIDxyZXNvdXJjZS1lbnYtcmVmPgotCTxyZXNvdXJjZS1lbnYtcmVmLW5hbWU+ZWlzL3Rlc3RBZG1pbjwvcmVzb3VyY2UtZW52LXJlZi1uYW1lPgotCTxyZXNvdXJjZS1lbnYtcmVmLXR5cGU+Y29tLnN1bi5qZGJjcmEuc3BpLkpkYmNTZXR1cEFkbWluPC9yZXNvdXJjZS1lbnYtcmVmLXR5cGU+CisgICAgPHJlc291cmNlLWVudi1yZWYtbmFtZT5laXMvdGVzdEFkbWluPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+CisgICAgPHJlc291cmNlLWVudi1yZWYtdHlwZT5jb20uc3VuLmpkYmNyYS5zcGkuSmRiY1NldHVwQWRtaW48L3Jlc291cmNlLWVudi1yZWYtdHlwZT4KICAgICAgIDwvcmVzb3VyY2UtZW52LXJlZj4KICAgICAgIDxzZWN1cml0eS1pZGVudGl0eT4KICAgICAgICAgPHVzZS1jYWxsZXItaWRlbnRpdHkvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL2FwcC9zcmMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCmluZGV4IGU3M2NiNDYuLjNmZGUyMzAgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9hcHAvc3JjL01FVEEtSU5GL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvYXBwL3NyYy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwKQEAgLTI1LDcgKzI1LDcgQEAKICAgICA8ZWpiPgogICAgICAgPGVqYi1uYW1lPk15VmVyc2lvbkNoZWNrZXI8L2VqYi1uYW1lPgogICAgICAgPGpuZGktbmFtZT5NeVZlcnNpb25DaGVja2VyPC9qbmRpLW5hbWU+Ci08IS0tICAgICAgCis8IS0tCiAgICAgPGlvci1zZWN1cml0eS1jb25maWc+CiAgICAgICAgIDx0cmFuc3BvcnQtY29uZmlnPgogICAgICAgICAgIDxpbnRlZ3JpdHk+c3VwcG9ydGVkPC9pbnRlZ3JpdHk+CkBAIC00MiwxMCArNDIsMTAgQEAKICAgICAgICAgICA8Y2FsbGVyLXByb3BhZ2F0aW9uPnN1cHBvcnRlZDwvY2FsbGVyLXByb3BhZ2F0aW9uPgogICAgICAgICA8L3Nhcy1jb250ZXh0PgogICAgICAgPC9pb3Itc2VjdXJpdHktY29uZmlnPgotLS0+ICAgIAorLS0+CiAgICAgICA8cmVzb3VyY2UtZW52LXJlZj4KICAgICAgICAgPHJlc291cmNlLWVudi1yZWYtbmFtZT5laXMvdGVzdEFkbWluPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+Ci0JPGpuZGktbmFtZT5laXMvdGVzdEFkbWluPC9qbmRpLW5hbWU+CisgICAgPGpuZGktbmFtZT5laXMvdGVzdEFkbWluPC9qbmRpLW5hbWU+CiAgICAgICA8L3Jlc291cmNlLWVudi1yZWY+CiAgICAgICA8Z2VuLWNsYXNzZXMvPgogICAgIDwvZWpiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL2FwcC9zcmMvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL2FwcC9zcmMvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDdlZGIzNTcuLjc2NjNlZDYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9hcHAvc3JjL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvYXBwL3NyYy9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI3LDM2ICsyNywzNiBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiQ2xpZW50OiBBcmdzOiAiKTsKLQlmb3IoaW50IGkgPSAwIDsgaTwgYXJncy5sZW5ndGg7IGkrKykgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNsaWVudDogQXJnczogIiArIGFyZ3NbaV0pOwotCX0KLQlJbnRlZ2VyIHZlcnNpb25OdW1iZXIgPSBuZXcgSW50ZWdlcihhcmdzWzBdKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNsaWVudDogQXJnczogIik7CisgICAgZm9yKGludCBpID0gMCA7IGk8IGFyZ3MubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDbGllbnQ6IEFyZ3M6ICIgKyBhcmdzW2ldKTsKKyAgICB9CisgICAgSW50ZWdlciB2ZXJzaW9uTnVtYmVyID0gbmV3IEludGVnZXIoYXJnc1swXSk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QodmVyc2lvbk51bWJlci5pbnRWYWx1ZSgpKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGRvVGVzdChpbnQgdmVyc2lvblRvVGVzdCkgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJUaGlzIGlzIHRvIHRlc3QgcmVkZXBsb3ltZW50IG9mIGNvbm5lY3RvcnMgIisKLQkgICAgICAgICAgICAgImNvbnRyYWN0cy4iKTsKLSAgICAgICAgCisgICAgICAgICAgICAgICAgICJjb250cmFjdHMuIik7CisKICAgICAgICAgU3RyaW5nIHJlcyA9ICJOT1QgUlVOIjsKLQlkZWJ1ZygiZG9UZXN0KCkgRU5URVIuLi4iKTsKKyAgICBkZWJ1ZygiZG9UZXN0KCkgRU5URVIuLi4iKTsKICAgICAgICAgYm9vbGVhbiBwYXNzID0gZmFsc2U7CiAgICAgICAgIHRyeSB7Ci0JCXBhc3MgPSBjaGVja1Jlc3VsdHModmVyc2lvblRvVGVzdCk7Ci0JCWRlYnVnKCJHb3QgZXhwZWN0ZWQgcmVzdWx0cyA9ICIgKyBwYXNzKTsKLQkJCi0JCS8vZG8gbm90IGNvbnRpbnVlIGlmIG9uZSB0ZXN0IGZhaWxlZAotCQlpZiAoIXBhc3MpIHsKLQkJCXJlcyA9ICJTT01FIFRFU1RTIEZBSUxFRCI7Ci0JCQlzdGF0LmFkZFN0YXR1cygiUmVkZXBsb3kgQ29ubmVjdG9yIDEuNSB0ZXN0IC0gIiwgc3RhdC5GQUlMKTsKLQkJfSBlbHNlIHsKLQkJCXJlcyAgPSAiQUxMIFRFU1RTIFBBU1NFRCI7Ci0JCQlzdGF0LmFkZFN0YXR1cygiUmVkZXBsb3kgQ29ubmVjdG9yIDEuNSB0ZXN0IC0gIiAsIHN0YXQuUEFTUyk7Ci0JCX0KKyAgICAgICAgcGFzcyA9IGNoZWNrUmVzdWx0cyh2ZXJzaW9uVG9UZXN0KTsKKyAgICAgICAgZGVidWcoIkdvdCBleHBlY3RlZCByZXN1bHRzID0gIiArIHBhc3MpOworCisgICAgICAgIC8vZG8gbm90IGNvbnRpbnVlIGlmIG9uZSB0ZXN0IGZhaWxlZAorICAgICAgICBpZiAoIXBhc3MpIHsKKyAgICAgICAgICAgIHJlcyA9ICJTT01FIFRFU1RTIEZBSUxFRCI7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiUmVkZXBsb3kgQ29ubmVjdG9yIDEuNSB0ZXN0IC0gIiwgc3RhdC5GQUlMKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJlcyAgPSAiQUxMIFRFU1RTIFBBU1NFRCI7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiUmVkZXBsb3kgQ29ubmVjdG9yIDEuNSB0ZXN0IC0gIiAsIHN0YXQuUEFTUyk7CisgICAgICAgIH0KIAogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVkZXBsb3kgY29ubmVjdG9yIHRlc3QgZmFpbGVkLiIpOwpAQCAtNjgsMjAgKzY4LDIwIEBACiAgICAgICAgIGRlYnVnKCJFWElUSU5HLi4uIFNUQVRVUyA9ICIgKyByZXMpOwogICAgICAgICByZXR1cm4gcmVzOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgYm9vbGVhbiBjaGVja1Jlc3VsdHMoaW50IG51bSkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JICAgIGRlYnVnKCJjaGVja1Jlc3VsdCIgKyBudW0pOwotCSAgICBkZWJ1ZygiZ290IGluaXRpYWwgY29udGV4dCIgKyAobmV3IEluaXRpYWxDb250ZXh0KCkpLnRvU3RyaW5nKCkpOworICAgICAgICBkZWJ1ZygiY2hlY2tSZXN1bHQiICsgbnVtKTsKKyAgICAgICAgZGVidWcoImdvdCBpbml0aWFsIGNvbnRleHQiICsgKG5ldyBJbml0aWFsQ29udGV4dCgpKS50b1N0cmluZygpKTsKICAgICAgICAgT2JqZWN0IG8gPSAobmV3IEluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiTXlWZXJzaW9uQ2hlY2tlciIpOwotCWRlYnVnKCJnb3QgbyIgKyBvKTsKLSAgICAgICAgVmVyc2lvbkNoZWNrZXJIb21lICBob21lID0gKFZlcnNpb25DaGVja2VySG9tZSkgCisgICAgZGVidWcoImdvdCBvIiArIG8pOworICAgICAgICBWZXJzaW9uQ2hlY2tlckhvbWUgIGhvbWUgPSAoVmVyc2lvbkNoZWNrZXJIb21lKQogICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG8sIFZlcnNpb25DaGVja2VySG9tZS5jbGFzcyk7CiAgICAgICAgIGRlYnVnKCJnb3QgaG9tZSIgKyBob21lKTsKLQkgICAgVmVyc2lvbkNoZWNrZXIgY2hlY2tlciA9IGhvbWUuY3JlYXRlKCk7Ci0JICAgIGRlYnVnKCJnb3QgbyIgKyBjaGVja2VyKTsKKyAgICAgICAgVmVyc2lvbkNoZWNrZXIgY2hlY2tlciA9IGhvbWUuY3JlYXRlKCk7CisgICAgICAgIGRlYnVnKCJnb3QgbyIgKyBjaGVja2VyKTsKICAgICAgICAgLy9wcm9ibGVtIGhlcmUhCi0JaW50IHJlc3VsdCA9IGNoZWNrZXIuZ2V0VmVyc2lvbigpOwotCWRlYnVnKCJjaGVja1Jlc3VsdCIgKyByZXN1bHQpOworICAgIGludCByZXN1bHQgPSBjaGVja2VyLmdldFZlcnNpb24oKTsKKyAgICBkZWJ1ZygiY2hlY2tSZXN1bHQiICsgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdCA9PSBudW07CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvYXBwL3NyYy9lamIvVmVyc2lvbkNoZWNrZXJFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9hcHAvc3JjL2VqYi9WZXJzaW9uQ2hlY2tlckVKQi5qYXZhCmluZGV4IGEwMDkxM2EuLjY4MjExZDggMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9hcHAvc3JjL2VqYi9WZXJzaW9uQ2hlY2tlckVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9hcHAvc3JjL2VqYi9WZXJzaW9uQ2hlY2tlckVKQi5qYXZhCkBAIC0yMyw0NyArMjMsNDcgQEAKIGltcG9ydCBjb20uc3VuLmpkYmNyYS5zcGkuSmRiY1NldHVwQWRtaW47CiAKIHB1YmxpYyBjbGFzcyBWZXJzaW9uQ2hlY2tlckVKQiBpbXBsZW1lbnRzIFNlc3Npb25CZWFuIHsKLQlwcml2YXRlIEluaXRpYWxDb250ZXh0IGluaXRDb250ZXh0ID0gbnVsbDsKLQlwcml2YXRlIFNlc3Npb25Db250ZXh0IHNlc3Npb25Db250ZXh0ID0gbnVsbDsKKyAgICBwcml2YXRlIEluaXRpYWxDb250ZXh0IGluaXRDb250ZXh0ID0gbnVsbDsKKyAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IHNlc3Npb25Db250ZXh0ID0gbnVsbDsKIAogCiAgICAgcHVibGljIFZlcnNpb25DaGVja2VyRUpCKCkgewogICAgIGRlYnVnKCJDb25zdHJ1Y3RvciIpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIAorICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpCiAgICAgICAgIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewotCQlkZWJ1ZygiZWpiQ3JlYXRlKCkiKTsKKyAgICAgICAgZGVidWcoImVqYkNyZWF0ZSgpIik7CiAgICAgfQogCiAKICAgICBwdWJsaWMgaW50IGdldFZlcnNpb24oKXsKLQkgICAgdHJ5IHsKLQkgICAgICBpbml0Q29udGV4dCA9IG5ldyBqYXZheC5uYW1pbmcuSW5pdGlhbENvbnRleHQoKTsKLQkgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4Y2VwdGlvbiBvY2N1cmVkIHdoZW4gY3JlYXRpbmcgSW5pdGlhbENvbnRleHQ6ICIgKyBlLnRvU3RyaW5nKCkpOwotCSAgICAgIHJldHVybiAtMTsKLQkgICAgfQotCQotCSAgICB0cnkgewotCSAgICAgIEpkYmNTZXR1cEFkbWluIGphID0gKEpkYmNTZXR1cEFkbWluKSBpbml0Q29udGV4dC5sb29rdXAoImVpcy9qZGJjQWRtaW4iKTsKLQkgICAgICBpbnQgdmVyc2lvbm5vID0gIGphLmdldFZlcnNpb24oKTsKLQkgICAgICBkZWJ1ZygiVmVyc2lvbiBudW1iZXIgaXMgIiArIHZlcnNpb25ubyk7Ci0JICAgICAgcmV0dXJuIHZlcnNpb25ubzsKLQkgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKLQkgICAgfQorICAgICAgICB0cnkgeworICAgICAgICAgIGluaXRDb250ZXh0ID0gbmV3IGphdmF4Lm5hbWluZy5Jbml0aWFsQ29udGV4dCgpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhjZXB0aW9uIG9jY3VyZWQgd2hlbiBjcmVhdGluZyBJbml0aWFsQ29udGV4dDogIiArIGUudG9TdHJpbmcoKSk7CisgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICBKZGJjU2V0dXBBZG1pbiBqYSA9IChKZGJjU2V0dXBBZG1pbikgaW5pdENvbnRleHQubG9va3VwKCJlaXMvamRiY0FkbWluIik7CisgICAgICAgICAgaW50IHZlcnNpb25ubyA9ICBqYS5nZXRWZXJzaW9uKCk7CisgICAgICAgICAgZGVidWcoIlZlcnNpb24gbnVtYmVyIGlzICIgKyB2ZXJzaW9ubm8pOworICAgICAgICAgIHJldHVybiB2ZXJzaW9ubm87CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIH0KICAgICB9CiAKIAogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IGNvbnRleHQpIHsKLQkgICAgZGVidWcoIiBiZWFuIHJlbW92ZWQiKTsKKyAgICAgICAgZGVidWcoIiBiZWFuIHJlbW92ZWQiKTsKICAgICAgICAgc2Vzc2lvbkNvbnRleHQgPSBjb250ZXh0OwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHsKLQkgICAgZGVidWcoIiBiZWFuIHJlbW92ZWQiKTsKKyAgICAgICAgZGVidWcoIiBiZWFuIHJlbW92ZWQiKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMTQ5M2QxMi4uYjAwZmIxNiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0icmVkZXBsb3kiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXJhciIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tcmFyIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIAogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggZjk5OWE4YS4uNDkyZTc5YSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNywzNSArMjcsMzUgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkNsaWVudDogQXJnczogIik7Ci0JZm9yKGludCBpID0gMCA7IGk8IGFyZ3MubGVuZ3RoOyBpKyspIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJDbGllbnQ6IEFyZ3M6ICIgKyBhcmdzW2ldKTsKLQl9Ci0JSW50ZWdlciB2ZXJzaW9uTnVtYmVyID0gbmV3IEludGVnZXIoYXJnc1swXSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJDbGllbnQ6IEFyZ3M6ICIpOworICAgIGZvcihpbnQgaSA9IDAgOyBpPCBhcmdzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2xpZW50OiBBcmdzOiAiICsgYXJnc1tpXSk7CisgICAgfQorICAgIEludGVnZXIgdmVyc2lvbk51bWJlciA9IG5ldyBJbnRlZ2VyKGFyZ3NbMF0pOwogICAgICAgICBjbGllbnQuZG9UZXN0KHZlcnNpb25OdW1iZXIuaW50VmFsdWUoKSk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBkb1Rlc3QoaW50IHZlcnNpb25Ub1Rlc3QpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVGhpcyBpcyB0byB0ZXN0IHJlZGVwbG95bWVudCBvZiBjb25uZWN0b3IgbW9kdWxlcy4gVGVzdGluZyB2ZXJzaW9uICIgKyB2ZXJzaW9uVG9UZXN0KTsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHJlcyA9ICJOT1QgUlVOIjsKLQlkZWJ1ZygiZG9UZXN0KCkgRU5URVIuLi4iKTsKKyAgICBkZWJ1ZygiZG9UZXN0KCkgRU5URVIuLi4iKTsKICAgICAgICAgYm9vbGVhbiBwYXNzID0gZmFsc2U7CiAgICAgICAgIHRyeSB7Ci0JCXBhc3MgPSBjaGVja1Jlc3VsdHModmVyc2lvblRvVGVzdCk7Ci0JCWRlYnVnKCJHb3QgZXhwZWN0ZWQgcmVzdWx0cyA9ICIgKyBwYXNzKTsKLQkJCi0JCS8vZG8gbm90IGNvbnRpbnVlIGlmIG9uZSB0ZXN0IGZhaWxlZAotCQlpZiAoIXBhc3MpIHsKLQkJCXJlcyA9ICJTT01FIFRFU1RTIEZBSUxFRCI7Ci0JCQlzdGF0LmFkZFN0YXR1cygiUmVkZXBsb3kgQ29ubmVjdG9yIDEuNSB0ZXN0IC0gVmVyc2lvbiA6ICIrIHZlcnNpb25Ub1Rlc3QsIHN0YXQuRkFJTCk7Ci0JCX0gZWxzZSB7Ci0JCQlyZXMgID0gIkFMTCBURVNUUyBQQVNTRUQiOwotCQkJc3RhdC5hZGRTdGF0dXMoIlJlZGVwbG95IENvbm5lY3RvciAxLjUgdGVzdCAtIFZlcnNpb24gOiAiICsgdmVyc2lvblRvVGVzdCAsIHN0YXQuUEFTUyk7Ci0JCX0KKyAgICAgICAgcGFzcyA9IGNoZWNrUmVzdWx0cyh2ZXJzaW9uVG9UZXN0KTsKKyAgICAgICAgZGVidWcoIkdvdCBleHBlY3RlZCByZXN1bHRzID0gIiArIHBhc3MpOworCisgICAgICAgIC8vZG8gbm90IGNvbnRpbnVlIGlmIG9uZSB0ZXN0IGZhaWxlZAorICAgICAgICBpZiAoIXBhc3MpIHsKKyAgICAgICAgICAgIHJlcyA9ICJTT01FIFRFU1RTIEZBSUxFRCI7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiUmVkZXBsb3kgQ29ubmVjdG9yIDEuNSB0ZXN0IC0gVmVyc2lvbiA6ICIrIHZlcnNpb25Ub1Rlc3QsIHN0YXQuRkFJTCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXMgID0gIkFMTCBURVNUUyBQQVNTRUQiOworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIlJlZGVwbG95IENvbm5lY3RvciAxLjUgdGVzdCAtIFZlcnNpb24gOiAiICsgdmVyc2lvblRvVGVzdCAsIHN0YXQuUEFTUyk7CisgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlZGVwbG95IGNvbm5lY3RvciB0ZXN0IGZhaWxlZC4iKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwpAQCAtNjYsMjAgKzY2LDIwIEBACiAgICAgICAgIGRlYnVnKCJFWElUSU5HLi4uIFNUQVRVUyA9ICIgKyByZXMpOwogICAgICAgICByZXR1cm4gcmVzOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgYm9vbGVhbiBjaGVja1Jlc3VsdHMoaW50IG51bSkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JICAgIGRlYnVnKCJjaGVja1Jlc3VsdCIgKyBudW0pOwotCSAgICBkZWJ1ZygiZ290IGluaXRpYWwgY29udGV4dCIgKyAobmV3IEluaXRpYWxDb250ZXh0KCkpLnRvU3RyaW5nKCkpOworICAgICAgICBkZWJ1ZygiY2hlY2tSZXN1bHQiICsgbnVtKTsKKyAgICAgICAgZGVidWcoImdvdCBpbml0aWFsIGNvbnRleHQiICsgKG5ldyBJbml0aWFsQ29udGV4dCgpKS50b1N0cmluZygpKTsKICAgICAgICAgT2JqZWN0IG8gPSAobmV3IEluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvTXlWZXJzaW9uQ2hlY2tlciIpOwotCWRlYnVnKCJnb3QgbyIgKyBvKTsKLSAgICAgICAgVmVyc2lvbkNoZWNrZXJIb21lICBob21lID0gKFZlcnNpb25DaGVja2VySG9tZSkgCisgICAgZGVidWcoImdvdCBvIiArIG8pOworICAgICAgICBWZXJzaW9uQ2hlY2tlckhvbWUgIGhvbWUgPSAoVmVyc2lvbkNoZWNrZXJIb21lKQogICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG8sIFZlcnNpb25DaGVja2VySG9tZS5jbGFzcyk7CiAgICAgICAgIGRlYnVnKCJnb3QgaG9tZSIgKyBob21lKTsKLQkgICAgVmVyc2lvbkNoZWNrZXIgY2hlY2tlciA9IGhvbWUuY3JlYXRlKCk7Ci0JICAgIGRlYnVnKCJnb3QgbyIgKyBjaGVja2VyKTsKKyAgICAgICAgVmVyc2lvbkNoZWNrZXIgY2hlY2tlciA9IGhvbWUuY3JlYXRlKCk7CisgICAgICAgIGRlYnVnKCJnb3QgbyIgKyBjaGVja2VyKTsKICAgICAgICAgLy9wcm9ibGVtIGhlcmUhCi0JaW50IHJlc3VsdCA9IGNoZWNrZXIuZ2V0VmVyc2lvbigpOwotCWRlYnVnKCJjaGVja1Jlc3VsdCIgKyByZXN1bHQpOworICAgIGludCByZXN1bHQgPSBjaGVja2VyLmdldFZlcnNpb24oKTsKKyAgICBkZWJ1ZygiY2hlY2tSZXN1bHQiICsgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdCA9PSBudW07CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IGU5NDA0MmIuLjhlNTQ3YzQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC0zMyw4ICszMyw4IEBACiAgICAgICA8c2Vzc2lvbi10eXBlPlN0YXRlbGVzczwvc2Vzc2lvbi10eXBlPgogICAgICAgPHRyYW5zYWN0aW9uLXR5cGU+Q29udGFpbmVyPC90cmFuc2FjdGlvbi10eXBlPgogICAgICAgPHJlc291cmNlLWVudi1yZWY+Ci0JPHJlc291cmNlLWVudi1yZWYtbmFtZT5laXMvdGVzdEFkbWluPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+Ci0JPHJlc291cmNlLWVudi1yZWYtdHlwZT5jb20uc3VuLmpkYmNyYS5zcGkuSmRiY1NldHVwQWRtaW48L3Jlc291cmNlLWVudi1yZWYtdHlwZT4KKyAgICA8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmVpcy90ZXN0QWRtaW48L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KKyAgICA8cmVzb3VyY2UtZW52LXJlZi10eXBlPmNvbS5zdW4uamRiY3JhLnNwaS5KZGJjU2V0dXBBZG1pbjwvcmVzb3VyY2UtZW52LXJlZi10eXBlPgogICAgICAgPC9yZXNvdXJjZS1lbnYtcmVmPgogICAgICAgPHNlY3VyaXR5LWlkZW50aXR5PgogICAgICAgICA8dXNlLWNhbGxlci1pZGVudGl0eS8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKaW5kZXggY2M1YTNmOS4uZTE0NjcyMiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbApAQCAtMjUsNyArMjUsNyBAQAogICAgIDxlamI+CiAgICAgICA8ZWpiLW5hbWU+TXlWZXJzaW9uQ2hlY2tlcjwvZWpiLW5hbWU+CiAgICAgICA8am5kaS1uYW1lPmVqYi9NeVZlcnNpb25DaGVja2VyPC9qbmRpLW5hbWU+Ci08IS0tICAgICAgCis8IS0tCiAgICAgPGlvci1zZWN1cml0eS1jb25maWc+CiAgICAgICAgIDx0cmFuc3BvcnQtY29uZmlnPgogICAgICAgICAgIDxpbnRlZ3JpdHk+c3VwcG9ydGVkPC9pbnRlZ3JpdHk+CkBAIC00MiwxMCArNDIsMTAgQEAKICAgICAgICAgICA8Y2FsbGVyLXByb3BhZ2F0aW9uPnN1cHBvcnRlZDwvY2FsbGVyLXByb3BhZ2F0aW9uPgogICAgICAgICA8L3Nhcy1jb250ZXh0PgogICAgICAgPC9pb3Itc2VjdXJpdHktY29uZmlnPgotLS0+ICAgIAorLS0+CiAgICAgICA8cmVzb3VyY2UtZW52LXJlZj4KICAgICAgICAgPHJlc291cmNlLWVudi1yZWYtbmFtZT5laXMvdGVzdEFkbWluPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+Ci0JPGpuZGktbmFtZT5laXMvdGVzdEFkbWluPC9qbmRpLW5hbWU+CisgICAgPGpuZGktbmFtZT5laXMvdGVzdEFkbWluPC9qbmRpLW5hbWU+CiAgICAgICA8L3Jlc291cmNlLWVudi1yZWY+CiAgICAgICA8Z2VuLWNsYXNzZXMvPgogICAgIDwvZWpiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL2VqYi9WZXJzaW9uQ2hlY2tlckVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL2VqYi9WZXJzaW9uQ2hlY2tlckVKQi5qYXZhCmluZGV4IGFjMTQ3Y2MuLjE5NDk0NzYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9lamIvVmVyc2lvbkNoZWNrZXJFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvZWpiL1ZlcnNpb25DaGVja2VyRUpCLmphdmEKQEAgLTMyLDE1ICszMiwxNSBAQAogLy9pbXBvcnQgY29tLnN1bi5qZGJjcmEuc3BpLkpkYmNTZXR1cEFkbWluOwogCiBwdWJsaWMgY2xhc3MgVmVyc2lvbkNoZWNrZXJFSkIgaW1wbGVtZW50cyBTZXNzaW9uQmVhbiB7Ci0JcHJpdmF0ZSBJbml0aWFsQ29udGV4dCBpbml0Q29udGV4dCA9IG51bGw7Ci0JcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBzZXNzaW9uQ29udGV4dCA9IG51bGw7CisgICAgcHJpdmF0ZSBJbml0aWFsQ29udGV4dCBpbml0Q29udGV4dCA9IG51bGw7CisgICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBzZXNzaW9uQ29udGV4dCA9IG51bGw7CiAKIAogICAgIHB1YmxpYyBWZXJzaW9uQ2hlY2tlckVKQigpIHsKICAgICAgICAgZGVidWcoIkNvbnN0cnVjdG9yIik7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgCisgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkKICAgICAgICAgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7CiAgICAgICAgIGRlYnVnKCJlamJDcmVhdGUoKSIpOwogICAgIH0KQEAgLTQ4LDI0ICs0OCwyNCBAQAogCiAgICAgcHVibGljIGludCBnZXRWZXJzaW9uKCl7CiAgICAgICAgICAgICBkZWJ1ZygiQ2hlY2tpbmcgdGhlIHZlcnNpb24hISEhISEhISEhISEhISEhISEhISEhISEhISEhIik7Ci0JICAgIHRyeSB7Ci0JICAgICAgaW5pdENvbnRleHQgPSBuZXcgamF2YXgubmFtaW5nLkluaXRpYWxDb250ZXh0KCk7Ci0JICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGNlcHRpb24gb2NjdXJlZCB3aGVuIGNyZWF0aW5nIEluaXRpYWxDb250ZXh0OiAiICsgZS50b1N0cmluZygpKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICBpbml0Q29udGV4dCA9IG5ldyBqYXZheC5uYW1pbmcuSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4Y2VwdGlvbiBvY2N1cmVkIHdoZW4gY3JlYXRpbmcgSW5pdGlhbENvbnRleHQ6ICIgKyBlLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICAgIHJldHVybiAtMTsKLQkgICAgfQotCQotCSAgICB0cnkgewotCSAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5KZGJjU2V0dXBBZG1pbiBqYSA9IChjb20uc3VuLmpkYmNyYS5zcGkuSmRiY1NldHVwQWRtaW4pIGluaXRDb250ZXh0Lmxvb2t1cCgiZWlzL3Rlc3RBZG1pbiIpOwotCSAgICAgIGludCB2ZXJzaW9ubm8gPSAgamEuZ2V0VmVyc2lvbigpOwotCSAgICAgIGRlYnVnKCJWZXJzaW9uIG51bWJlciBpcyAiICsgdmVyc2lvbm5vKTsKLQkgICAgICByZXR1cm4gdmVyc2lvbm5vOwotCSAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwotCSAgICB9Ci0gICAgICAgICAgICAKKyAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICB0cnkgeworICAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5KZGJjU2V0dXBBZG1pbiBqYSA9IChjb20uc3VuLmpkYmNyYS5zcGkuSmRiY1NldHVwQWRtaW4pIGluaXRDb250ZXh0Lmxvb2t1cCgiZWlzL3Rlc3RBZG1pbiIpOworICAgICAgICAgIGludCB2ZXJzaW9ubm8gPSAgamEuZ2V0VmVyc2lvbigpOworICAgICAgICAgIGRlYnVnKCJWZXJzaW9uIG51bWJlciBpcyAiICsgdmVyc2lvbm5vKTsKKyAgICAgICAgICByZXR1cm4gdmVyc2lvbm5vOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworICAgICAgICB9CisKICAgICAgICAgICAgLy8gcmV0dXJuIC0xOwogICAgIH0KIApAQCAtNzYsNyArNzYsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHsKLQkgICAgZGVidWcoIiBiZWFuIHJlbW92ZWQiKTsKKyAgICAgICAgZGVidWcoIiBiZWFuIHJlbW92ZWQiKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZWUyZWNhMC4uZmQyMWMzZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE0LDcgKzE0LDcgQEAKICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAjCiAKLSAgICAKKwogIyMjIENvbXBvbmVudCBQcm9wZXJ0aWVzICMjIwogc3JjLmRpcj1zcmMKIGNvbXBvbmVudC5wdWJsaXNoLmhvbWU9LgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9idWlsZC54bWwKaW5kZXggMTVmMzQ1YS4uZWY1OWViYSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvYnVpbGQueG1sCkBAIC0yMyw2MiArMjMsNjIgQEAKIAogPHByb2plY3QgbmFtZT0iSkRCQ0Nvbm5lY3RvciB0b3AgbGV2ZWwiIGRlZmF1bHQ9ImJ1aWxkIj4KICAgICA8cHJvcGVydHkgbmFtZT0icGtnLmRpciIgdmFsdWU9ImNvbS9zdW4vamRiY3JhL3NwaSIvPgotICAgIAorCiAgICAgJmNvbW1vbjsKICAgICAmdGVzdGNvbW1vbjsKICAgICA8cHJvcGVydHkgZmlsZT0iLi9idWlsZC5wcm9wZXJ0aWVzIi8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlLGFzc2VtYmxlIiAvPgotICAgICAgICAgIAorCiAKICAgICA8IS0tIGluaXQuIEluaXRpYWxpemF0aW9uIGludm9sdmVzIGNyZWF0aW5nIHB1Ymxpc2hpbmcgZGlyZWN0b3JpZXMgYW5kCi0gICAgICAgICBPUyBzcGVjaWZpYyB0YXJnZXRzLiAtLT4gCisgICAgICAgICBPUyBzcGVjaWZpYyB0YXJnZXRzLiAtLT4KICAgICA8dGFyZ2V0IG5hbWU9ImluaXQiIGRlc2NyaXB0aW9uPSIke2NvbXBvbmVudC5uYW1lfSBpbml0aWFsaXphdGlvbiI+CiAgICAgICAgIDx0c3RhbXA+CiAgICAgICAgICAgICA8Zm9ybWF0IHByb3BlcnR5PSJzdGFydC50aW1lIiBwYXR0ZXJuPSJNTS9kZC95eXl5IGhoOm1tIGFhIi8+Ci0gICAgICAgIDwvdHN0YW1wPiAgICAKKyAgICAgICAgPC90c3RhbXA+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkJ1aWxkaW5nIGNvbXBvbmVudCAke2NvbXBvbmVudC5uYW1lfSIvPgogICAgICAgICA8bWtkaXIgZGlyPSIke2NvbXBvbmVudC5jbGFzc2VzLmRpcn0iLz4KLSAgICAgICAgPG1rZGlyIGRpcj0iJHtjb21wb25lbnQubGliLmhvbWV9Ii8+ICAgIAorICAgICAgICA8bWtkaXIgZGlyPSIke2NvbXBvbmVudC5saWIuaG9tZX0iLz4KICAgICA8L3RhcmdldD4KLSAgICA8IS0tIGNvbXBpbGUgLS0+IAorICAgIDwhLS0gY29tcGlsZSAtLT4KICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImluaXQiCi0gICAgICAgICAgICBkZXNjcmlwdGlvbj0iQ29tcGlsZSBjb20vc3VuLyogY29tL2lwbGFuZXQvKiBzb3VyY2VzIj4gIAorICAgICAgICAgICAgZGVzY3JpcHRpb249IkNvbXBpbGUgY29tL3N1bi8qIGNvbS9pcGxhbmV0Lyogc291cmNlcyI+CiAgICAgICAgIDwhLS08ZWNobyBtZXNzYWdlPSJDb25uZWN0b3IgYXBpIHJlc2lkZXMgaW4gJHtjb25uZWN0b3ItYXBpLmphcn0iLz4tLT4KLSAgICAgICAgPGphdmFjIHNyY2Rpcj0iJHtzcmMuZGlyfSIgCisgICAgICAgIDxqYXZhYyBzcmNkaXI9IiR7c3JjLmRpcn0iCiAgICAgICAgICAgICAgICBkZXN0ZGlyPSIke2NvbXBvbmVudC5jbGFzc2VzLmRpcn0iCi0JICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIj4KLQkgICAgICAgPGNsYXNzcGF0aD4KLQkJICAgPGZpbGVzZXQgZGlyPSIke2Vudi5TMUFTX0hPTUV9L21vZHVsZXMiPgotCQkgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLmphciIgLz4KLQkJICAgPC9maWxlc2V0PgotCSAgICAgICA8L2NsYXNzcGF0aD4KKyAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiPgorICAgICAgICAgICA8Y2xhc3NwYXRoPgorICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LlMxQVNfSE9NRX0vbW9kdWxlcyI+CisgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqLyouamFyIiAvPgorICAgICAgICAgICA8L2ZpbGVzZXQ+CisgICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iY29tL3N1bi9qZGJjcmEvKioiLz4KICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9ImNvbS9zdW4vYXBwc2Vydi8qKiIvPgogICAgICAgICA8L2phdmFjPgogICAgIDwvdGFyZ2V0PgotICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCIvPgogCi0gICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIj4gICAgCi0gICAgCQotCTxqYXIgamFyZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L2pkYmMuamFyIiAKLSAgICAgICAgICAgIGJhc2VkaXI9IiR7Y29tcG9uZW50LmNsYXNzZXMuZGlyfSIgaW5jbHVkZXM9IiR7cGtnLmRpcn0vKiovKiwgCi0gICAgICAgICAgICBjb20vc3VuL2FwcHNlcnYvKiovKiwgY29tL3N1bi9qZGJjcmEvdXRpbC8qKi8qLCBjb20vc3VuL2pkYmNyYS9jb21tb24vKiovKiIvPiAKLSAgIAkKLSAgICAgICAgPGNvcHkgZmlsZT0iJHtzcmMuZGlyfS9jb20vc3VuL2pkYmNyYS9zcGkvMS40L3JhLWRzLnhtbCIgCi0gICAgICAgICAgICAgICAgdG9maWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CQorICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZSI+CisKKyAgICA8amFyIGphcmZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9qZGJjLmphciIKKyAgICAgICAgICAgIGJhc2VkaXI9IiR7Y29tcG9uZW50LmNsYXNzZXMuZGlyfSIgaW5jbHVkZXM9IiR7cGtnLmRpcn0vKiovKiwKKyAgICAgICAgICAgIGNvbS9zdW4vYXBwc2Vydi8qKi8qLCBjb20vc3VuL2pkYmNyYS91dGlsLyoqLyosIGNvbS9zdW4vamRiY3JhL2NvbW1vbi8qKi8qIi8+CisKKyAgICAgICAgPGNvcHkgZmlsZT0iJHtzcmMuZGlyfS9jb20vc3VuL2pkYmNyYS9zcGkvMS40L3JhLWRzLnhtbCIKKyAgICAgICAgICAgICAgICB0b2ZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4KICAgICAgICAgPC9jb3B5PgotICAgCTxqYXIgamFyZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L3Rlc3RqZGJjcmEucmFyIiAKLQkJYmFzZWRpcj0iJHtjb21wb25lbnQubGliLmhvbWV9IiBpbmNsdWRlcz0iamRiYy5qYXIiPgorICAgICAgIDxqYXIgamFyZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L3Rlc3RqZGJjcmEucmFyIgorICAgICAgICBiYXNlZGlyPSIke2NvbXBvbmVudC5saWIuaG9tZX0iIGluY2x1ZGVzPSJqZGJjLmphciI+CiAKLSAgIAkJPG1ldGFpbmYgZGlyPSIke2NvbXBvbmVudC5saWIuaG9tZX0iPgotICAgCQkJPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+Ci0gICAJCTwvbWV0YWluZj4KLSAgIAk8L2phcj4KKyAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2NvbXBvbmVudC5saWIuaG9tZX0iPgorICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icmEueG1sIi8+CisgICAgICAgICAgIDwvbWV0YWluZj4KKyAgICAgICA8L2phcj4KIAotICAgCTxkZWxldGUgZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L3JhLnhtbCIvPgotCQorICAgICAgIDxkZWxldGUgZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L3JhLnhtbCIvPgorCiAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVzY3JpcHRpb249IkNsZWFuIHRoZSBidWlsZCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vYXBwc2Vydi9qZGJjcmEvRGF0YVNvdXJjZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2FwcHNlcnYvamRiY3JhL0RhdGFTb3VyY2UuamF2YQppbmRleCA5ZjgzOTlhLi5iNmVmMzBiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vYXBwc2Vydi9qZGJjcmEvRGF0YVNvdXJjZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9hcHBzZXJ2L2pkYmNyYS9EYXRhU291cmNlLmphdmEKQEAgLTIwLDE1ICsyMCwxNSBAQAogaW1wb3J0IGphdmEuc3FsLlNRTEV4Y2VwdGlvbjsKIAogLyoqCi0gKiBUaGUgPGNvZGU+amF2YXguc3FsLkRhdGFTb3VyY2U8L2NvZGU+IGltcGxlbWVudGF0aW9uIG9mIFN1bk9ORSBhcHBsaWNhdGlvbiAKKyAqIFRoZSA8Y29kZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29kZT4gaW1wbGVtZW50YXRpb24gb2YgU3VuT05FIGFwcGxpY2F0aW9uCiAgKiBzZXJ2ZXIgd2lsbCBpbXBsZW1lbnQgdGhpcyBpbnRlcmZhY2UuIEFuIGFwcGxpY2F0aW9uIHByb2dyYW0gd291bGQgYmUgYWJsZQotICogdG8gdXNlIHRoaXMgaW50ZXJmYWNlIHRvIGRvIHRoZSBleHRlbmRlZCBmdW5jdGlvbmFsaXR5IGV4cG9zZWQgYnkgU3VuT05FIAorICogdG8gdXNlIHRoaXMgaW50ZXJmYWNlIHRvIGRvIHRoZSBleHRlbmRlZCBmdW5jdGlvbmFsaXR5IGV4cG9zZWQgYnkgU3VuT05FCiAgKiBhcHBsaWNhdGlvbiBzZXJ2ZXIuCi0gKiA8cD5BIHNhbXBsZSBjb2RlIGZvciBnZXR0aW5nIGRyaXZlcidzIGNvbm5lY3Rpb24gaW1wbGVtZW50YXRpb24gd291bGQgbGlrZSAKKyAqIDxwPkEgc2FtcGxlIGNvZGUgZm9yIGdldHRpbmcgZHJpdmVyJ3MgY29ubmVjdGlvbiBpbXBsZW1lbnRhdGlvbiB3b3VsZCBsaWtlCiAgKiB0aGUgZm9sbG93aW5nLgogICogPHByZT4KICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgY29tLnN1bi5hcHBzZXJ2LkRhdGFTb3VyY2UgZHMgPSAoY29tLnN1bi5hcHBzZXJ2LkRhdGFTT3VyY2UpIGljLmxvb2t1cCgiamRiYy9Qb2ludEJhc2UiKTsgCisgICAgIGNvbS5zdW4uYXBwc2Vydi5EYXRhU291cmNlIGRzID0gKGNvbS5zdW4uYXBwc2Vydi5EYXRhU091cmNlKSBpYy5sb29rdXAoImpkYmMvUG9pbnRCYXNlIik7CiAgICAgIENvbm5lY3Rpb24gY29uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwogICAgICBDb25uZWN0aW9uIGRyaXZlcmNvbiA9IGRzLmdldENvbm5lY3Rpb24oY29uKTsKIApAQCAtMzYsMTMgKzM2LDEzIEBACiAKICAgICAgY29uLmNsb3NlKCk7CiAgICA8L3ByZT4KLSAqIAorICoKICAqIEBhdXRob3IgQmlub2QgUC5HCiAgKi8KIHB1YmxpYyBpbnRlcmZhY2UgRGF0YVNvdXJjZSBleHRlbmRzIGphdmF4LnNxbC5EYXRhU291cmNlIHsKIAogICAgIC8qKgotICAgICAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIFNRTENvbm5lY3Rpb24gZnJvbSB0aGUgQ29ubmVjdGlvbiB3cmFwcGVyIAorICAgICAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIFNRTENvbm5lY3Rpb24gZnJvbSB0aGUgQ29ubmVjdGlvbiB3cmFwcGVyCiAgICAgICogaW1wbGVtZW50YXRpb24gb2YgU3VuT05FIGFwcGxpY2F0aW9uIHNlcnZlci4gSWYgYW4gYWN0dWFsIGNvbm5lY3Rpb24gaXMKICAgICAgKiBzdXBwbGllZCBhcyBhcmd1bWVudCwgdGhlbiBpdCB3aWxsIGJlIGp1c3QgcmV0dXJuZWQuCiAgICAgICoKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VPYmplY3RCdWlsZGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlT2JqZWN0QnVpbGRlci5qYXZhCmluZGV4IGMyODIyZTIuLjZhMzY2YjAgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VPYmplY3RCdWlsZGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIuamF2YQpAQCAtMjcsMjIgKzI3LDIyIEBACiBpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOwogaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOwogLyoqCi0gKiBVdGlsaXR5IGNsYXNzLCB3aGljaCB3b3VsZCBjcmVhdGUgbmVjZXNzYXJ5IERhdGFzb3VyY2Ugb2JqZWN0IGFjY29yZGluZyB0byB0aGUgCisgKiBVdGlsaXR5IGNsYXNzLCB3aGljaCB3b3VsZCBjcmVhdGUgbmVjZXNzYXJ5IERhdGFzb3VyY2Ugb2JqZWN0IGFjY29yZGluZyB0byB0aGUKICAqIHNwZWNpZmljYXRpb24uCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8yMwotICogQGF1dGhvcglCaW5vZCBQLkcKLSAqIEBzZWUJCWNvbS5zdW4uamRiY3JhLmNvbW1vbi5EYXRhU291cmNlU3BlYwotICogQHNlZQkJY29tLnN1bi5qZGJjcmEudXRpbC5NZXRob2RFeGNlY3V0b3IKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMjMKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCisgKiBAc2VlICAgICAgICBjb20uc3VuLmpkYmNyYS5jb21tb24uRGF0YVNvdXJjZVNwZWMKKyAqIEBzZWUgICAgICAgIGNvbS5zdW4uamRiY3JhLnV0aWwuTWV0aG9kRXhjZWN1dG9yCiAgKi8KIHB1YmxpYyBjbGFzcyBEYXRhU291cmNlT2JqZWN0QnVpbGRlciBpbXBsZW1lbnRzIGphdmEuaW8uU2VyaWFsaXphYmxlewogCiAgICAgcHJpdmF0ZSBEYXRhU291cmNlU3BlYyBzcGVjOwotICAgIAorCiAgICAgcHJpdmF0ZSBIYXNodGFibGUgZHJpdmVyUHJvcGVydGllcyA9IG51bGw7Ci0gICAgCi0gICAgcHJpdmF0ZSBNZXRob2RFeGVjdXRvciBleGVjdXRvciA9IG51bGw7ICAgIAotICAgIAorCisgICAgcHJpdmF0ZSBNZXRob2RFeGVjdXRvciBleGVjdXRvciA9IG51bGw7CisKICAgICBwcml2YXRlIHN0YXRpYyBMb2dnZXIgX2xvZ2dlcjsKICAgICBzdGF0aWMgewogICAgICAgICBfbG9nZ2VyID0gTG9nZ2VyLmdldEFub255bW91c0xvZ2dlcigpOwpAQCAtNTAsMTY3ICs1MCwxNjcgQEAKICAgICBwcml2YXRlIGJvb2xlYW4gZGVidWcgPSBmYWxzZTsKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3QgYSBEYXRhU291cmNlIE9iamVjdCBmcm9tIHRoZSBzcGVjLgotICAgICAqIAotICAgICAqIEBwYXJhbQlzcGVjCTxjb2RlPiBEYXRhU291cmNlU3BlYyA8L2NvZGU+IG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcGVjICAgIDxjb2RlPiBEYXRhU291cmNlU3BlYyA8L2NvZGU+IG9iamVjdC4KICAgICAgKi8KICAgICBwdWJsaWMgRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIoRGF0YVNvdXJjZVNwZWMgc3BlYykgewotICAgIAl0aGlzLnNwZWMgPSBzcGVjOwotICAgIAlleGVjdXRvciA9IG5ldyBNZXRob2RFeGVjdXRvcigpOworICAgICAgICB0aGlzLnNwZWMgPSBzcGVjOworICAgICAgICBleGVjdXRvciA9IG5ldyBNZXRob2RFeGVjdXRvcigpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdCB0aGUgRGF0YVNvdXJjZSBPYmplY3QgZnJvbSB0aGUgc3BlYy4KICAgICAgKgotICAgICAqIEByZXR1cm4JT2JqZWN0IGNvbnN0cnVjdGVkIHVzaW5nIHRoZSBEYXRhU291cmNlU3BlYy4KLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiBpZiB0aGUgY2xhc3MgaXMgbm90IGZvdW5kIG9yIHNvbWUgaXNzdWUgaW4gZXhlY3V0aW5nCi0gICAgICoJCXNvbWUgbWV0aG9kLgorICAgICAqIEByZXR1cm4gICAgT2JqZWN0IGNvbnN0cnVjdGVkIHVzaW5nIHRoZSBEYXRhU291cmNlU3BlYy4KKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiBpZiB0aGUgY2xhc3MgaXMgbm90IGZvdW5kIG9yIHNvbWUgaXNzdWUgaW4gZXhlY3V0aW5nCisgICAgICogICAgICAgIHNvbWUgbWV0aG9kLgogICAgICAqLwogICAgIHB1YmxpYyBPYmplY3QgY29uc3RydWN0RGF0YVNvdXJjZU9iamVjdCgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKLSAgICAJZHJpdmVyUHJvcGVydGllcyA9IHBhcnNlRHJpdmVyUHJvcGVydGllcyhzcGVjKTsKKyAgICAgICAgZHJpdmVyUHJvcGVydGllcyA9IHBhcnNlRHJpdmVyUHJvcGVydGllcyhzcGVjKTsKICAgICAgICAgT2JqZWN0IGRhdGFTb3VyY2VPYmplY3QgPSBnZXREYXRhU291cmNlT2JqZWN0KCk7CiAgICAgICAgIE1ldGhvZFtdIG1ldGhvZHMgPSBkYXRhU291cmNlT2JqZWN0LmdldENsYXNzKCkuZ2V0TWV0aG9kcygpOwogICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBtZXRob2RzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICBTdHJpbmcgbWV0aG9kTmFtZSA9IG1ldGhvZHNbaV0uZ2V0TmFtZSgpOwotCSAgICBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRVc2VyIikpewkgICAgCQotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVVNFUk5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFBhc3N3b3JkIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUEFTU1dPUkQpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldExvZ2luVGltZU91dCIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR0lOVElNRU9VVCksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TG9nV3JpdGVyIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HV1JJVEVSKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXREYXRhYmFzZU5hbWUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBQkFTRU5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldERhdGFTb3VyY2VOYW1lIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQVNPVVJDRU5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldERlc2NyaXB0aW9uIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVTQ1JJUFRJT04pLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXROZXR3b3JrUHJvdG9jb2wiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ORVRXT1JLUFJPVE9DT0wpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFBvcnROdW1iZXIiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QT1JUTlVNQkVSKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRSb2xlTmFtZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlJPTEVOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCQkgICAgCQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRTZXJ2ZXJOYW1lIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuU0VSVkVSTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNYXhTdGF0ZW1lbnRzIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUFYU1RBVEVNRU5UUyksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0SW5pdGlhbFBvb2xTaXplIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuSU5JVElBTFBPT0xTSVpFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNaW5Qb29sU2l6ZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1JTlBPT0xTSVpFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNYXhQb29sU2l6ZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1BWFBPT0xTSVpFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNYXhJZGxlVGltZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1BWElETEVUSU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRQcm9wZXJ0eUN5Y2xlIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUFJPUEVSVFlDWUNMRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAkKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKGRyaXZlclByb3BlcnRpZXMuY29udGFpbnNLZXkobWV0aG9kTmFtZS50b1VwcGVyQ2FzZSgpKSl7Ci0JICAgIAlWZWN0b3IgdmFsdWVzID0gKFZlY3RvcikgZHJpdmVyUHJvcGVydGllcy5nZXQobWV0aG9kTmFtZS50b1VwcGVyQ2FzZSgpKTsKLQkgICAgICAgIGV4ZWN1dG9yLnJ1bk1ldGhvZChtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QsIHZhbHVlcyk7Ci0JICAgIH0KKyAgICAgICAgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0VXNlciIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlVTRVJOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRQYXNzd29yZCIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBBU1NXT1JEKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRMb2dpblRpbWVPdXQiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dJTlRJTUVPVVQpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldExvZ1dyaXRlciIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR1dSSVRFUiksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0RGF0YWJhc2VOYW1lIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQUJBU0VOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXREYXRhU291cmNlTmFtZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXREZXNjcmlwdGlvbiIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFU0NSSVBUSU9OKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXROZXR3b3JrUHJvdG9jb2wiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ORVRXT1JLUFJPVE9DT0wpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFBvcnROdW1iZXIiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QT1JUTlVNQkVSKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRSb2xlTmFtZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlJPTEVOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRTZXJ2ZXJOYW1lIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuU0VSVkVSTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWF4U3RhdGVtZW50cyIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1BWFNUQVRFTUVOVFMpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldEluaXRpYWxQb29sU2l6ZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLklOSVRJQUxQT09MU0laRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWluUG9vbFNpemUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NSU5QT09MU0laRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWF4UG9vbFNpemUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NQVhQT09MU0laRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TWF4SWRsZVRpbWUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NQVhJRExFVElNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0UHJvcGVydHlDeWNsZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBST1BFUlRZQ1lDTEUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChkcml2ZXJQcm9wZXJ0aWVzLmNvbnRhaW5zS2V5KG1ldGhvZE5hbWUudG9VcHBlckNhc2UoKSkpeworICAgICAgICAgICAgVmVjdG9yIHZhbHVlcyA9IChWZWN0b3IpIGRyaXZlclByb3BlcnRpZXMuZ2V0KG1ldGhvZE5hbWUudG9VcHBlckNhc2UoKSk7CisgICAgICAgICAgICBleGVjdXRvci5ydW5NZXRob2QobWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0LCB2YWx1ZXMpOworICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGRhdGFTb3VyY2VPYmplY3Q7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSBleHRyYSBkcml2ZXIgcHJvcGVydGllcyBmcm9tIHRoZSBEYXRhU291cmNlU3BlYyBvYmplY3QgYW5kCiAgICAgICogcGFyc2UgdGhlbSB0byBhIHNldCBvZiBtZXRob2ROYW1lIGFuZCBwYXJhbWV0ZXJzLiBQcmVwYXJlIGEgaGFzaHRhYmxlCiAgICAgICogY29udGFpbmluZyB0aGVzZSBkZXRhaWxzIGFuZCByZXR1cm4uCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3BlYwk8Y29kZT4gRGF0YVNvdXJjZVNwZWMgPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHJldHVybglIYXNodGFibGUgY29udGFpbmluZyBtZXRob2QgbmFtZXMgYW5kIHBhcmFtZXRlcnMsCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglJZiBkZWxpbWl0ZXIgaXMgbm90IHByb3ZpZGVkIGFuZCBwcm9wZXJ0eSBzdHJpbmcKLSAgICAgKgkJCQkJaXMgbm90IG51bGwuCisgICAgICogQHBhcmFtICAgIHNwZWMgICAgPGNvZGU+IERhdGFTb3VyY2VTcGVjIDwvY29kZT4gb2JqZWN0LgorICAgICAqIEByZXR1cm4gICAgSGFzaHRhYmxlIGNvbnRhaW5pbmcgbWV0aG9kIG5hbWVzIGFuZCBwYXJhbWV0ZXJzLAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgSWYgZGVsaW1pdGVyIGlzIG5vdCBwcm92aWRlZCBhbmQgcHJvcGVydHkgc3RyaW5nCisgICAgICogICAgICAgICAgICAgICAgICAgIGlzIG5vdCBudWxsLgogICAgICAqLwogICAgIHByaXZhdGUgSGFzaHRhYmxlIHBhcnNlRHJpdmVyUHJvcGVydGllcyhEYXRhU291cmNlU3BlYyBzcGVjKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb257Ci0gICAgCVN0cmluZyBkZWxpbSA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUik7CisgICAgICAgIFN0cmluZyBkZWxpbSA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUik7CiAKICAgICAgICAgU3RyaW5nIHByb3AgPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EUklWRVJQUk9QRVJUSUVTKTsKLQlpZiAoIHByb3AgPT0gbnVsbCB8fCBwcm9wLnRyaW0oKS5lcXVhbHMoIiIpKSB7Ci0JICAgIHJldHVybiBuZXcgSGFzaHRhYmxlKCk7Ci0JfSBlbHNlIGlmIChkZWxpbSA9PSBudWxsIHx8IGRlbGltLmVxdWFscygiIikpIHsKLQkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uICgiRGVsaW1pdGVyIGlzIG5vdCBwcm92aWRlZCBpbiB0aGUgY29uZmlndXJhdGlvbiIpOwotCX0KLQkKLQlIYXNodGFibGUgcHJvcGVydGllcyA9IG5ldyBIYXNodGFibGUoKTsKLQlkZWxpbSA9IGRlbGltLnRyaW0oKTsJCi0JU3RyaW5nIHNlcCA9IGRlbGltK2RlbGltOwotCWludCBzZXBMZW4gPSBzZXAubGVuZ3RoKCk7Ci0JU3RyaW5nIGNhY2hlID0gcHJvcDsKLQlWZWN0b3IgbWV0aG9kcyA9IG5ldyBWZWN0b3IoKTsKLQkKLQl3aGlsZSAoY2FjaGUuaW5kZXhPZihzZXApICE9IC0xKSB7Ci0JICAgIGludCBpbmRleCA9IGNhY2hlLmluZGV4T2Yoc2VwKTsKLQkgICAgU3RyaW5nIG5hbWUgPSBjYWNoZS5zdWJzdHJpbmcoMCxpbmRleCk7Ci0JICAgIGlmIChuYW1lLnRyaW0oKSAhPSAiIikgewotCSAgICAgICAgbWV0aG9kcy5hZGQobmFtZSk7Ci0JICAgIAljYWNoZSA9IGNhY2hlLnN1YnN0cmluZyhpbmRleCtzZXBMZW4pOwotCSAgICB9Ci0JfQotCQotICAgIAlFbnVtZXJhdGlvbiBhbGxNZXRob2RzID0gbWV0aG9kcy5lbGVtZW50cygpOwotICAgIAl3aGlsZSAoYWxsTWV0aG9kcy5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgIAkgICAgU3RyaW5nIG9uZU1ldGhvZCA9IChTdHJpbmcpIGFsbE1ldGhvZHMubmV4dEVsZW1lbnQoKTsgICAgCSAgICAKLSAgICAJICAgIGlmICghb25lTWV0aG9kLnRyaW0oKS5lcXVhbHMoIiIpKSB7Ci0gICAgCSAgICAJU3RyaW5nIG1ldGhvZE5hbWUgPSBudWxsOwotICAgIAkgICAgCVZlY3RvciBwYXJtcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAJICAgIAlTdHJpbmdUb2tlbml6ZXIgbWV0aG9kRGV0YWlscyA9IG5ldyBTdHJpbmdUb2tlbml6ZXIob25lTWV0aG9kLGRlbGltKTsKLQkJZm9yIChpbnQgaT0wOyBtZXRob2REZXRhaWxzLmhhc01vcmVUb2tlbnMoKTtpKysgKSB7Ci0JCSAgICBTdHJpbmcgdG9rZW4gPSAoU3RyaW5nKSBtZXRob2REZXRhaWxzLm5leHRUb2tlbigpOwotCQkgICAgaWYgKGk9PTApIHsKLQkJICAgIAltZXRob2ROYW1lID0gdG9rZW4udG9VcHBlckNhc2UoKTsKLQkJICAgIH0gZWxzZSB7Ci0JCSAgICAJcGFybXMuYWRkKHRva2VuKTsJCSAgICAJCi0JCSAgICB9Ci0JCX0KLQkJcHJvcGVydGllcy5wdXQobWV0aG9kTmFtZSxwYXJtcyk7Ci0gICAgCSAgICB9ICAgIAkgICAgCi0gICAgCX0KLSAgICAJcmV0dXJuIHByb3BlcnRpZXM7CisgICAgaWYgKCBwcm9wID09IG51bGwgfHwgcHJvcC50cmltKCkuZXF1YWxzKCIiKSkgeworICAgICAgICByZXR1cm4gbmV3IEhhc2h0YWJsZSgpOworICAgIH0gZWxzZSBpZiAoZGVsaW0gPT0gbnVsbCB8fCBkZWxpbS5lcXVhbHMoIiIpKSB7CisgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbiAoIkRlbGltaXRlciBpcyBub3QgcHJvdmlkZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24iKTsKICAgICB9Ci0gICAgCisKKyAgICBIYXNodGFibGUgcHJvcGVydGllcyA9IG5ldyBIYXNodGFibGUoKTsKKyAgICBkZWxpbSA9IGRlbGltLnRyaW0oKTsKKyAgICBTdHJpbmcgc2VwID0gZGVsaW0rZGVsaW07CisgICAgaW50IHNlcExlbiA9IHNlcC5sZW5ndGgoKTsKKyAgICBTdHJpbmcgY2FjaGUgPSBwcm9wOworICAgIFZlY3RvciBtZXRob2RzID0gbmV3IFZlY3RvcigpOworCisgICAgd2hpbGUgKGNhY2hlLmluZGV4T2Yoc2VwKSAhPSAtMSkgeworICAgICAgICBpbnQgaW5kZXggPSBjYWNoZS5pbmRleE9mKHNlcCk7CisgICAgICAgIFN0cmluZyBuYW1lID0gY2FjaGUuc3Vic3RyaW5nKDAsaW5kZXgpOworICAgICAgICBpZiAobmFtZS50cmltKCkgIT0gIiIpIHsKKyAgICAgICAgICAgIG1ldGhvZHMuYWRkKG5hbWUpOworICAgICAgICAgICAgY2FjaGUgPSBjYWNoZS5zdWJzdHJpbmcoaW5kZXgrc2VwTGVuKTsKKyAgICAgICAgfQorICAgIH0KKworICAgICAgICBFbnVtZXJhdGlvbiBhbGxNZXRob2RzID0gbWV0aG9kcy5lbGVtZW50cygpOworICAgICAgICB3aGlsZSAoYWxsTWV0aG9kcy5oYXNNb3JlRWxlbWVudHMoKSkgeworICAgICAgICAgICAgU3RyaW5nIG9uZU1ldGhvZCA9IChTdHJpbmcpIGFsbE1ldGhvZHMubmV4dEVsZW1lbnQoKTsKKyAgICAgICAgICAgIGlmICghb25lTWV0aG9kLnRyaW0oKS5lcXVhbHMoIiIpKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIG1ldGhvZE5hbWUgPSBudWxsOworICAgICAgICAgICAgICAgIFZlY3RvciBwYXJtcyA9IG5ldyBWZWN0b3IoKTsKKyAgICAgICAgICAgICAgICBTdHJpbmdUb2tlbml6ZXIgbWV0aG9kRGV0YWlscyA9IG5ldyBTdHJpbmdUb2tlbml6ZXIob25lTWV0aG9kLGRlbGltKTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBtZXRob2REZXRhaWxzLmhhc01vcmVUb2tlbnMoKTtpKysgKSB7CisgICAgICAgICAgICBTdHJpbmcgdG9rZW4gPSAoU3RyaW5nKSBtZXRob2REZXRhaWxzLm5leHRUb2tlbigpOworICAgICAgICAgICAgaWYgKGk9PTApIHsKKyAgICAgICAgICAgICAgICBtZXRob2ROYW1lID0gdG9rZW4udG9VcHBlckNhc2UoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcGFybXMuYWRkKHRva2VuKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBwcm9wZXJ0aWVzLnB1dChtZXRob2ROYW1lLHBhcm1zKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcHJvcGVydGllczsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgRGF0YXNvdXJjZSBvYmplY3QgYWNjb3JkaW5nIHRvIHRoZSBzcGVjLgogICAgICAqCi0gICAgICogQHJldHVybglJbml0aWFsIERhdGFTb3VyY2UgT2JqZWN0IGluc3RhbmNlLgotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+IElmIGNsYXNzIG5hbWUgaXMgd3Jvbmcgb3IgY2xhc3NwYXRoIGlzIG5vdCBzZXQKLSAgICAgKgkJcHJvcGVybHkuCisgICAgICogQHJldHVybiAgICBJbml0aWFsIERhdGFTb3VyY2UgT2JqZWN0IGluc3RhbmNlLgorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+IElmIGNsYXNzIG5hbWUgaXMgd3Jvbmcgb3IgY2xhc3NwYXRoIGlzIG5vdCBzZXQKKyAgICAgKiAgICAgICAgcHJvcGVybHkuCiAgICAgICovCiAgICAgcHJpdmF0ZSBPYmplY3QgZ2V0RGF0YVNvdXJjZU9iamVjdCgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKLSAgICAJU3RyaW5nIGNsYXNzTmFtZSA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNMQVNTTkFNRSk7Ci0gICAgICAgIHRyeSB7ICAgICAgICAgICAgCisgICAgICAgIFN0cmluZyBjbGFzc05hbWUgPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DTEFTU05BTUUpOworICAgICAgICB0cnkgewogICAgICAgICAgICAgQ2xhc3MgZGF0YVNvdXJjZUNsYXNzID0gQ2xhc3MuZm9yTmFtZShjbGFzc05hbWUpOwogICAgICAgICAgICAgT2JqZWN0IGRhdGFTb3VyY2VPYmplY3QgPSBkYXRhU291cmNlQ2xhc3MubmV3SW5zdGFuY2UoKTsKICAgICAgICAgICAgIHJldHVybiBkYXRhU291cmNlT2JqZWN0OwogICAgICAgICB9IGNhdGNoKENsYXNzTm90Rm91bmRFeGNlcHRpb24gY2ZuZSl7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2NuZmVfZHMiLCBjZm5lKTsKLQkKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfY25mZV9kcyIsIGNmbmUpOworCiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkNsYXNzIE5hbWUgaXMgd3Jvbmcgb3IgQ2xhc3MgcGF0aCBpcyBub3Qgc2V0IGZvciA6IiArIGNsYXNzTmFtZSk7CiAgICAgICAgIH0gY2F0Y2goSW5zdGFudGlhdGlvbkV4Y2VwdGlvbiBjZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19pbnN0IiwgY2xhc3NOYW1lKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfaW5zdCIsIGNsYXNzTmFtZSk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkVycm9yIGluIGluc3RhbnRpYXRpbmciICsgY2xhc3NOYW1lKTsKICAgICAgICAgfSBjYXRjaChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGNlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2FjY19pbnN0IiwgY2xhc3NOYW1lKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfYWNjX2luc3QiLCBjbGFzc05hbWUpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgRXJyb3IgaW4gaW5zdGFudGlhdGluZyIgKyBjbGFzc05hbWUpOwogICAgICAgICB9CiAgICAgfQotICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZVNwZWMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VTcGVjLmphdmEKaW5kZXggZWY2YzRjOS4uM2RjMTU0ZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZVNwZWMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlU3BlYy5qYXZhCkBAIC0xOSw5MiArMTksOTIgQEAKIGltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwogCiAvKioKLSAqIEVuY2Fwc3VsYXRlIHRoZSBEYXRhU291cmNlIG9iamVjdCBkZXRhaWxzIG9idGFpbmVkIGZyb20gCisgKiBFbmNhcHN1bGF0ZSB0aGUgRGF0YVNvdXJjZSBvYmplY3QgZGV0YWlscyBvYnRhaW5lZCBmcm9tCiAgKiBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8yMwotICogQGF1dGhvcglCaW5vZCBQLkcKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMjMKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCiAgKi8KIHB1YmxpYyBjbGFzcyBEYXRhU291cmNlU3BlYyBpbXBsZW1lbnRzIGphdmEuaW8uU2VyaWFsaXphYmxlewogCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVVNFUk5BTUUJCQkJPSAxOyAgICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQQVNTV09SRAkJCQk9IDI7ICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVUkwJCQkJCT0gMzsgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExPR0lOVElNRU9VVAkJCT0gNDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMT0dXUklURVIJCQkJPSA1OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFCQVNFTkFNRQkJCT0gNjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQVRBU09VUkNFTkFNRQkJCT0gNzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERVNDUklQVElPTgkJCQk9IDg7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTkVUV09SS1BST1RPQ09MCQkJPSA5OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBPUlROVU1CRVIJCQkJPSAxMDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBST0xFTkFNRQkJCQk9IDExOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNFUlZFUk5BTUUJCQkJPSAxMjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhTVEFURU1FTlRTCQkJPSAxMzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTklUSUFMUE9PTFNJWkUJCQk9IDE0OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1JTlBPT0xTSVpFCQkJCT0gMTU7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYUE9PTFNJWkUJCQkJPSAxNjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhJRExFVElNRQkJCQk9IDE3OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBST1BFUlRZQ1lDTEUJCQk9IDE4OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERSSVZFUlBST1BFUlRJRVMJCQk9IDE5OyAgICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDTEFTU05BTUUJCQkJPSAyMDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERUxJTUlURVIJCQkJPSAyMTsKLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBYQURBVEFTT1VSQ0UJCQk9IDIyOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFTT1VSQ0UJCQkJPSAyMzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05ORUNUSU9OUE9PTERBVEFTT1VSQ0UJCT0gMjQ7Ci0gICAgICAKLSAgICAvL0dKQ0lOVCAgICAgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQJPSAyNTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWQUxJREFUSU9OTUVUSE9ECQkJPSAyNjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWQUxJREFUSU9OVEFCTEVOQU1FCQkJPSAyNzsKLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUUkFOU0FDVElPTklTT0xBVElPTgkJPSAyODsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHVUFSQU5URUVJU09MQVRJT05MRVZFTAkJPSAyOTsKLSAgICAgICAgICAgIAorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVTRVJOQU1FICAgICAgICAgICAgICAgID0gMTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQQVNTV09SRCAgICAgICAgICAgICAgICA9IDI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVVJMICAgICAgICAgICAgICAgICAgICA9IDM7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTE9HSU5USU1FT1VUICAgICAgICAgICAgPSA0OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExPR1dSSVRFUiAgICAgICAgICAgICAgICA9IDU7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREFUQUJBU0VOQU1FICAgICAgICAgICAgPSA2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFTT1VSQ0VOQU1FICAgICAgICAgICAgPSA3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFU0NSSVBUSU9OICAgICAgICAgICAgICAgID0gODsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBORVRXT1JLUFJPVE9DT0wgICAgICAgICAgICA9IDk7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUE9SVE5VTUJFUiAgICAgICAgICAgICAgICA9IDEwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJPTEVOQU1FICAgICAgICAgICAgICAgID0gMTE7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0VSVkVSTkFNRSAgICAgICAgICAgICAgICA9IDEyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWFNUQVRFTUVOVFMgICAgICAgICAgICA9IDEzOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOSVRJQUxQT09MU0laRSAgICAgICAgICAgID0gMTQ7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUlOUE9PTFNJWkUgICAgICAgICAgICAgICAgPSAxNTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhQT09MU0laRSAgICAgICAgICAgICAgICA9IDE2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWElETEVUSU1FICAgICAgICAgICAgICAgID0gMTc7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUFJPUEVSVFlDWUNMRSAgICAgICAgICAgID0gMTg7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRFJJVkVSUFJPUEVSVElFUyAgICAgICAgICAgID0gMTk7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0xBU1NOQU1FICAgICAgICAgICAgICAgID0gMjA7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVMSU1JVEVSICAgICAgICAgICAgICAgID0gMjE7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBYQURBVEFTT1VSQ0UgICAgICAgICAgICA9IDIyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFTT1VSQ0UgICAgICAgICAgICAgICAgPSAyMzsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05ORUNUSU9OUE9PTERBVEFTT1VSQ0UgICAgICAgID0gMjQ7CisKKyAgICAvL0dKQ0lOVAorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQgICAgPSAyNTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWQUxJREFUSU9OTUVUSE9EICAgICAgICAgICAgPSAyNjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBWQUxJREFUSU9OVEFCTEVOQU1FICAgICAgICAgICAgPSAyNzsKKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRSQU5TQUNUSU9OSVNPTEFUSU9OICAgICAgICA9IDI4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdVQVJBTlRFRUlTT0xBVElPTkxFVkVMICAgICAgICA9IDI5OworCiAgICAgcHJpdmF0ZSBIYXNodGFibGUgZGV0YWlscyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgcHJvcGVydHkuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcHJvcGVydHkJUHJvcGVydHkgTmFtZSB0byBiZSBzZXQuCi0gICAgICogQHBhcmFtCXZhbHVlCQlWYWx1ZSBvZiBwcm9wZXJ0eSB0byBiZSBzZXQuCisgICAgICogQHBhcmFtICAgIHByb3BlcnR5ICAgIFByb3BlcnR5IE5hbWUgdG8gYmUgc2V0LgorICAgICAqIEBwYXJhbSAgICB2YWx1ZSAgICAgICAgVmFsdWUgb2YgcHJvcGVydHkgdG8gYmUgc2V0LgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERldGFpbChpbnQgcHJvcGVydHksIFN0cmluZyB2YWx1ZSkgewotICAgIAlkZXRhaWxzLnB1dChuZXcgSW50ZWdlcihwcm9wZXJ0eSksdmFsdWUpOworICAgICAgICBkZXRhaWxzLnB1dChuZXcgSW50ZWdlcihwcm9wZXJ0eSksdmFsdWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgdmFsdWUgb2YgcHJvcGVydHkKICAgICAgKgotICAgICAqIEByZXR1cm4JVmFsdWUgb2YgdGhlIHByb3BlcnR5LgorICAgICAqIEByZXR1cm4gICAgVmFsdWUgb2YgdGhlIHByb3BlcnR5LgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGV0YWlsKGludCBwcm9wZXJ0eSkgewotICAgIAlpZiAoZGV0YWlscy5jb250YWluc0tleShuZXcgSW50ZWdlcihwcm9wZXJ0eSkpKSB7Ci0gICAgCSAgICByZXR1cm4gKFN0cmluZykgZGV0YWlscy5nZXQobmV3IEludGVnZXIocHJvcGVydHkpKTsKLSAgICAJfSBlbHNlIHsKLSAgICAJICAgIHJldHVybiBudWxsOwotICAgIAl9ICAgIAkKKyAgICAgICAgaWYgKGRldGFpbHMuY29udGFpbnNLZXkobmV3IEludGVnZXIocHJvcGVydHkpKSkgeworICAgICAgICAgICAgcmV0dXJuIChTdHJpbmcpIGRldGFpbHMuZ2V0KG5ldyBJbnRlZ2VyKHByb3BlcnR5KSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENoZWNrcyB3aGV0aGVyIHR3byA8Y29kZT5EYXRhU291cmNlU3BlYzwvY29kZT4gb2JqZWN0cwogICAgICAqIGFyZSBlcXVhbCBvciBub3QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jb2JqCUluc3RhbmNlIG9mIDxjb2RlPkRhdGFTb3VyY2VTcGVjPC9jb2RlPiBvYmplY3QuCisgICAgICogQHBhcmFtICAgIG9iaiAgICBJbnN0YW5jZSBvZiA8Y29kZT5EYXRhU291cmNlU3BlYzwvY29kZT4gb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb2JqKSB7Ci0gICAgCWlmIChvYmogaW5zdGFuY2VvZiBEYXRhU291cmNlU3BlYykgewotICAgIAkgICAgcmV0dXJuIHRoaXMuZGV0YWlscy5lcXVhbHMoKChEYXRhU291cmNlU3BlYylvYmopLmRldGFpbHMpOwotICAgIAl9Ci0gICAgCXJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIERhdGFTb3VyY2VTcGVjKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5kZXRhaWxzLmVxdWFscygoKERhdGFTb3VyY2VTcGVjKW9iaikuZGV0YWlscyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgaGFzaENvZGUgb2YgdGhpcyA8Y29kZT5EYXRhU291cmNlU3BlYzwvY29kZT4gb2JqZWN0LgogICAgICAqCi0gICAgICogQHJldHVybgloYXNoQ29kZSBvZiB0aGlzIG9iamVjdC4KKyAgICAgKiBAcmV0dXJuICAgIGhhc2hDb2RlIG9mIHRoaXMgb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7Ci0gICAgCXJldHVybiB0aGlzLmRldGFpbHMuaGFzaENvZGUoKTsKLSAgICB9ICAgIAorICAgICAgICByZXR1cm4gdGhpcy5kZXRhaWxzLmhhc2hDb2RlKCk7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vYnVpbGQueG1sCmluZGV4IGVmNDM4ZmMuLjNiNGZhZWIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9idWlsZC54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPHByb2plY3QgbmFtZT0iamRiY19jb25uZWN0b3IiIGJhc2VkaXI9Ii4iIGRlZmF1bHQ9ImJ1aWxkIj4KICAgPHByb3BlcnR5IG5hbWU9InBrZy5kaXIiIHZhbHVlPSJjb20vc3VuL2dqYy9jb21tb24iLz4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJjbGVhbiI+CiAgICAgPGFudCBhbnRmaWxlPSJidWlsZC54bWwiIGRpcj0iJHtnamMuaG9tZX0vYmluIiB0YXJnZXQ9ImNsZWFuIi8+CiAgIDwvdGFyZ2V0PgpAQCAtMzYsMTMgKzM2LDEzIEBACiAKICAgPHRhcmdldCBuYW1lPSJjb21waWxlMTMiIGRlcGVuZHM9ImNvbXBpbGUiLz4KICAgPHRhcmdldCBuYW1lPSJjb21waWxlMTQiIGRlcGVuZHM9ImNvbXBpbGUiLz4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlMTMiIGRlcGVuZHM9InBhY2thZ2UiLz4KICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlMTQiIGRlcGVuZHM9InBhY2thZ2UiLz4KIAogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkMTMiIGRlcGVuZHM9ImNvbXBpbGUxMywgcGFja2FnZTEzIi8+CiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQxNCIgZGVwZW5kcz0iY29tcGlsZTE0LCBwYWNrYWdlMTQiLz4KLSAgICAKKwogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJidWlsZDEzLCBidWlsZDE0Ii8+CiAKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9Db25uZWN0aW9uSG9sZGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvQ29ubmVjdGlvbkhvbGRlci5qYXZhCmluZGV4IGJmY2JmMGIuLjRlYmVkNmUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9Db25uZWN0aW9uSG9sZGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L0Nvbm5lY3Rpb25Ib2xkZXIuamF2YQpAQCAtMjQsMjQgKzI0LDI0IEBACiBpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3I7CiAKIC8qKgotICogSG9sZHMgdGhlIGphdmEuc3FsLkNvbm5lY3Rpb24gb2JqZWN0LCB3aGljaCBpcyB0byBiZSAKKyAqIEhvbGRzIHRoZSBqYXZhLnNxbC5Db25uZWN0aW9uIG9iamVjdCwgd2hpY2ggaXMgdG8gYmUKICAqIHBhc3NlZCB0byB0aGUgYXBwbGljYXRpb24gcHJvZ3JhbS4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzIzCi0gKiBAYXV0aG9yCUJpbm9kIFAuRworICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8yMworICogQGF1dGhvciAgICBCaW5vZCBQLkcKICAqLwotcHVibGljIGNsYXNzIENvbm5lY3Rpb25Ib2xkZXIgaW1wbGVtZW50cyBDb25uZWN0aW9ueyAKK3B1YmxpYyBjbGFzcyBDb25uZWN0aW9uSG9sZGVyIGltcGxlbWVudHMgQ29ubmVjdGlvbnsKIAogICAgIHByaXZhdGUgQ29ubmVjdGlvbiBjb247Ci0gICAgCisKICAgICBwcml2YXRlIE1hbmFnZWRDb25uZWN0aW9uIG1jOwotICAgIAotICAgIHByaXZhdGUgYm9vbGVhbiB3cmFwcGVkQWxyZWFkeSA9IGZhbHNlOyAgICAKLSAgICAKKworICAgIHByaXZhdGUgYm9vbGVhbiB3cmFwcGVkQWxyZWFkeSA9IGZhbHNlOworCiAgICAgcHJpdmF0ZSBib29sZWFuIGlzQ2xvc2VkID0gZmFsc2U7Ci0gICAgCisKICAgICBwcml2YXRlIGJvb2xlYW4gdmFsaWQgPSB0cnVlOwotICAgIAorCiAgICAgcHJpdmF0ZSBib29sZWFuIGFjdGl2ZSA9IGZhbHNlOwogICAgIC8qKgogICAgICAqIFRoZSBhY3RpdmUgZmxhZyBpcyBmYWxzZSB3aGVuIHRoZSBjb25uZWN0aW9uIGhhbmRsZSBpcwpAQCAtNTMsMjE5ICs1MywyMTkgQEAKICAgICAgKiBmdW5jdGlvbiwgdGhlIGFib3ZlIG1ldGhvZCBpbnZvY2F0aW9uIHN1Y2NlZWRzOyBvdGhlcndpc2UKICAgICAgKiBhbiBleGNlcHRpb24gaXMgdGhyb3duLgogICAgICAqLwotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0cyBhIENvbm5lY3Rpb24gaG9sZGVyLgotICAgICAqIAotICAgICAqIEBwYXJhbQljb24JPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgorICAgICAqCisgICAgICogQHBhcmFtICAgIGNvbiAgICA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIENvbm5lY3Rpb25Ib2xkZXIoQ29ubmVjdGlvbiBjb24sIE1hbmFnZWRDb25uZWN0aW9uIG1jKSB7CiAgICAgICAgIHRoaXMuY29uID0gY29uOwogICAgICAgICB0aGlzLm1jICA9IG1jOwogICAgIH0KLSAgICAgICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSBhY3R1YWwgY29ubmVjdGlvbiBpbiB0aGlzIGhvbGRlciBvYmplY3QuCi0gICAgICogCi0gICAgICogQHJldHVybglDb25uZWN0aW9uIG9iamVjdC4KKyAgICAgKgorICAgICAqIEByZXR1cm4gICAgQ29ubmVjdGlvbiBvYmplY3QuCiAgICAgICovCiAgICAgQ29ubmVjdGlvbiBnZXRDb25uZWN0aW9uKCkgewotICAgIAlyZXR1cm4gY29uOworICAgICAgICByZXR1cm4gY29uOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCwgdGhlIGNvbm5lY3Rpb24gaXMgd3JhcHBlZCBhbHJlYWR5IG9yIG5vdC4KICAgICAgKgotICAgICAqIEBwYXJhbQl3cmFwRmxhZwkKKyAgICAgKiBAcGFyYW0gICAgd3JhcEZsYWcKICAgICAgKi8KICAgICB2b2lkIHdyYXBwZWQoYm9vbGVhbiB3cmFwRmxhZyl7CiAgICAgICAgIHRoaXMud3JhcHBlZEFscmVhZHkgPSB3cmFwRmxhZzsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHdoZXRoZXIgaXQgaXMgd3JhcHBlZCBhbHJlYWR5IG9yIG5vdC4KICAgICAgKgotICAgICAqIEByZXR1cm4Jd3JhcHBlZCBmbGFnLgorICAgICAqIEByZXR1cm4gICAgd3JhcHBlZCBmbGFnLgogICAgICAqLwogICAgIGJvb2xlYW4gaXNXcmFwcGVkKCl7CiAgICAgICAgIHJldHVybiB3cmFwcGVkQWxyZWFkeTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UgcmVzcG9uc2libGUKICAgICAgKiBmb3IgdGhpcyBjb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCisgICAgICogQHJldHVybiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICovCiAgICAgTWFuYWdlZENvbm5lY3Rpb24gZ2V0TWFuYWdlZENvbm5lY3Rpb24oKSB7CiAgICAgICAgIHJldHVybiBtYzsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXBsYWNlIHRoZSBhY3R1YWwgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IHdpdGggdGhlIG9uZQotICAgICAqIHN1cHBsaWVkLiBBbHNvIHJlcGxhY2UgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGxpbmsuICAgICAKKyAgICAgKiBzdXBwbGllZC4gQWxzbyByZXBsYWNlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBsaW5rLgogICAgICAqCi0gICAgICogQHBhcmFtCWNvbiA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHBhcmFtCW1jICA8Y29kZT4gTWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgY29uIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgbWMgIDxjb2RlPiBNYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgogICAgICAqLwogICAgIHZvaWQgYXNzb2NpYXRlQ29ubmVjdGlvbihDb25uZWN0aW9uIGNvbiwgTWFuYWdlZENvbm5lY3Rpb24gbWMpIHsKLSAgICAJdGhpcy5tYyA9IG1jOwotICAgIAl0aGlzLmNvbiA9IGNvbjsKKyAgICAgICAgdGhpcy5tYyA9IG1jOworICAgICAgICB0aGlzLmNvbiA9IGNvbjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDbGVhcnMgYWxsIHdhcm5pbmdzIHJlcG9ydGVkIGZvciB0aGUgdW5kZXJseWluZyBjb25uZWN0aW9uICBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGNsZWFyV2FybmluZ3MoKSB0aHJvd3MgU1FMRXhjZXB0aW9ueyAgICAKLQljaGVja1ZhbGlkaXR5KCk7CisgICAgcHVibGljIHZvaWQgY2xlYXJXYXJuaW5ncygpIHRocm93cyBTUUxFeGNlcHRpb257CisgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICBjb24uY2xlYXJXYXJuaW5ncygpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIENsb3NlcyB0aGUgbG9naWNhbCBjb25uZWN0aW9uLiAgICAKKyAgICAgKiBDbG9zZXMgdGhlIGxvZ2ljYWwgY29ubmVjdGlvbi4KICAgICAgKgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNsb3NlKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKICAgICAgICAgaXNDbG9zZWQgPSB0cnVlOwotICAgICAgICBtYy5jb25uZWN0aW9uQ2xvc2VkKG51bGwsIHRoaXMpOyAgICAgICAgCisgICAgICAgIG1jLmNvbm5lY3Rpb25DbG9zZWQobnVsbCwgdGhpcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogSW52YWxpZGF0ZXMgdGhpcyBvYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgaW52YWxpZGF0ZSgpIHsKLSAgICAJdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgdmFsaWQgPSBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDbG9zZXMgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaW52b2x2ZWQgaW4gdGhpcy4KICAgICAgKgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCi0gICAgdm9pZCBhY3R1YWxDbG9zZSgpIHRocm93cyBTUUxFeGNlcHRpb257ICAgIAorICAgIHZvaWQgYWN0dWFsQ2xvc2UoKSB0aHJvd3MgU1FMRXhjZXB0aW9uewogICAgICAgICBjb24uY2xvc2UoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb21taXQgdGhlIGNoYW5nZXMgaW4gdGhlIHVuZGVybHlpbmcgQ29ubmVjdGlvbi4KICAgICAgKgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgY29tbWl0KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLmNvbW1pdCgpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLmNvbW1pdCgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBzdGF0ZW1lbnQgZnJvbSB0aGUgdW5kZXJseWluZyBDb25uZWN0aW9uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgU3RhdGVtZW50IGNyZWF0ZVN0YXRlbWVudCgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICByZXR1cm4gY29uLmNyZWF0ZVN0YXRlbWVudCgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBzdGF0ZW1lbnQgZnJvbSB0aGUgdW5kZXJseWluZyBDb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHBhcmFtCXJlc3VsdFNldFR5cGUJVHlwZSBvZiB0aGUgUmVzdWx0U2V0Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldENvbmN1cnJlbmN5CVJlc3VsdFNldCBDb25jdXJyZW5jeS4KLSAgICAgKiBAcmV0dXJuCTxjb2RlPlN0YXRlbWVudDwvY29kZT4gb2JqZWN0LiAgICAgCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRUeXBlICAgIFR5cGUgb2YgdGhlIFJlc3VsdFNldAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRDb25jdXJyZW5jeSAgICBSZXN1bHRTZXQgQ29uY3VycmVuY3kuCisgICAgICogQHJldHVybiAgICA8Y29kZT5TdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIFN0YXRlbWVudCBjcmVhdGVTdGF0ZW1lbnQoaW50IHJlc3VsdFNldFR5cGUsIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIHJldHVybiBjb24uY3JlYXRlU3RhdGVtZW50KHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5KTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgc3RhdGVtZW50IGZyb20gdGhlIHVuZGVybHlpbmcgQ29ubmVjdGlvbi4KICAgICAgKgotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRUeXBlCVR5cGUgb2YgdGhlIFJlc3VsdFNldAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRDb25jdXJyZW5jeQlSZXN1bHRTZXQgQ29uY3VycmVuY3kuCi0gICAgICogQHBhcmFtCXJlc3VsdFNldEhvbGRhYmlsaXR5CVJlc3VsdFNldCBIb2xkYWJpbGl0eS4gICAgIAotICAgICAqIEByZXR1cm4JPGNvZGU+U3RhdGVtZW50PC9jb2RlPiBvYmplY3QuIAotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAgICAgCisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldFR5cGUgICAgVHlwZSBvZiB0aGUgUmVzdWx0U2V0CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldENvbmN1cnJlbmN5ICAgIFJlc3VsdFNldCBDb25jdXJyZW5jeS4KKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0SG9sZGFiaWxpdHkgICAgUmVzdWx0U2V0IEhvbGRhYmlsaXR5LgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+U3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwotICAgIHB1YmxpYyBTdGF0ZW1lbnQgY3JlYXRlU3RhdGVtZW50KGludCByZXN1bHRTZXRUeXBlLCBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3ksIAotICAgIAkJCQkgICAgIGludCByZXN1bHRTZXRIb2xkYWJpbHR5KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAkJCQkgICAgIAorICAgIHB1YmxpYyBTdGF0ZW1lbnQgY3JlYXRlU3RhdGVtZW50KGludCByZXN1bHRTZXRUeXBlLCBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3ksCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdFNldEhvbGRhYmlsdHkpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgcmV0dXJuIGNvbi5jcmVhdGVTdGF0ZW1lbnQocmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3ksCi0gICAgICAgIAkJCSAgIHJlc3VsdFNldEhvbGRhYmlsdHkpOworICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRTZXRIb2xkYWJpbHR5KTsKICAgICB9Ci0gCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgYXV0by1jb21taXQgbW9kZSBmb3IgdGhlIHVuZGVybHlpbmcgPGNvZGU+IENvbm5lY3Rpb248L2NvZGU+LgogICAgICAqCiAgICAgICogQHJldHVybiBUaGUgY3VycmVudCBzdGF0ZSBvZiBjb25uZWN0aW9uJ3MgYXV0by1jb21taXQgbW9kZS4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGdldEF1dG9Db21taXQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLmdldEF1dG9Db21taXQoKTsKLSAgICB9ICAgCi0gCisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLmdldEF1dG9Db21taXQoKTsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIHVuZGVybHlpbmcgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0J3MgY2F0YWxvZyBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglDYXRhbG9nIE5hbWUuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEByZXR1cm4gICAgQ2F0YWxvZyBOYW1lLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldENhdGFsb2coKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgcmV0dXJuIGNvbi5nZXRDYXRhbG9nKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBjdXJyZW50IGhvbGRhYmlsaXR5IG9mIDxjb2RlPlJlc3VsdFNldDwvY29kZT4gb2JqZWN0cyBjcmVhdGVkCiAgICAgICogdXNpbmcgdGhpcyBjb25uZWN0aW9uIG9iamVjdC4KICAgICAgKgotICAgICAqIEByZXR1cm4JaG9sZGFiaWxpdHkgdmFsdWUuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEByZXR1cm4gICAgaG9sZGFiaWxpdHkgdmFsdWUuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0SG9sZGFiaWxpdHkoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4JY29uLmdldEhvbGRhYmlsaXR5KCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gICAgY29uLmdldEhvbGRhYmlsaXR5KCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSA8Y29kZT5EYXRhYmFzZU1ldGFEYXRhPC9jb2RlPm9iamVjdCBmcm9tIHRoZSB1bmRlcmx5aW5nCiAgICAgICogPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QuCiAgICAgICoKICAgICAgKiBAcmV0dXJuIDxjb2RlPkRhdGFiYXNlTWV0YURhdGE8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBEYXRhYmFzZU1ldGFEYXRhIGdldE1ldGFEYXRhKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5nZXRNZXRhRGF0YSgpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5nZXRNZXRhRGF0YSgpOwogICAgIH0KLSAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGlzIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCdzIGN1cnJlbnQgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsLgogICAgICAqCiAgICAgICogQHJldHVybiBUcmFuc2FjdGlvbiBsZXZlbAotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8gICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCiAgICAgcHVibGljIGludCBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICByZXR1cm4gY29uLmdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogUmV0cmlldmVzIHRoZSA8Y29kZT5NYXA8L2NvZGU+IG9iamVjdCBhc3NvY2lhdGVkIHdpdGggCisgICAgICogUmV0cmlldmVzIHRoZSA8Y29kZT5NYXA8L2NvZGU+IG9iamVjdCBhc3NvY2lhdGVkIHdpdGgKICAgICAgKiA8Y29kZT4gQ29ubmVjdGlvbjwvY29kZT4gT2JqZWN0LgogICAgICAqCi0gICAgICogQHJldHVybglUeXBlTWFwIHNldCBpbiB0aGlzIG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHJldHVybiAgICBUeXBlTWFwIHNldCBpbiB0aGlzIG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIE1hcCBnZXRUeXBlTWFwKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5nZXRUeXBlTWFwKCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLmdldFR5cGVNYXAoKTsKICAgICB9CiAKICAgICAvKioKQEAgLTI3MywxODQgKzI3MywxODQgQEAKICAgICAgKiA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCiAgICAgICoKICAgICAgKiBAcmV0dXJuIEZpcnN0IDxjb2RlPiBTUUxXYXJuaW5nPC9jb2RlPiBPYmplY3Qgb3IgbnVsbC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTUUxXYXJuaW5nIGdldFdhcm5pbmdzKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5nZXRXYXJuaW5ncygpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5nZXRXYXJuaW5ncygpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB3aGV0aGVyIHVuZGVybHlpbmcgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGlzIGNsb3NlZC4KICAgICAgKgotICAgICAqIEByZXR1cm4JdHJ1ZSBpZiA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaXMgY2xvc2VkLCBmYWxzZQotICAgICAqIAkJaWYgaXQgaXMgY2xvc2VkLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcmV0dXJuICAgIHRydWUgaWYgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGlzIGNsb3NlZCwgZmFsc2UKKyAgICAgKiAgICAgICAgIGlmIGl0IGlzIGNsb3NlZC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gaXNDbG9zZWQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLSAgICAJcmV0dXJuIGlzQ2xvc2VkOworICAgICAgICByZXR1cm4gaXNDbG9zZWQ7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHdoZXRoZXIgdGhpcyA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaXMgcmVhZC1vbmx5LgogICAgICAqCi0gICAgICogQHJldHVybgl0cnVlIGlmIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gaXMgcmVhZC1vbmx5LCBmYWxzZSBvdGhlci13aXNlCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEByZXR1cm4gICAgdHJ1ZSBpZiA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IGlzIHJlYWQtb25seSwgZmFsc2Ugb3RoZXItd2lzZQorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc1JlYWRPbmx5KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5pc1JlYWRPbmx5KCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLmlzUmVhZE9ubHkoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb252ZXJ0cyB0aGUgZ2l2ZW4gU1FMIHN0YXRlbWVudCBpbnRvIHRoZSBzeXN0ZW0ncyBuYXRpdmUgU1FMIGdyYW1tZXIuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBzdGF0ZW1lbnQgLCB0byBiZSBjb252ZXJ0ZWQuCi0gICAgICogQHJldHVybglDb252ZXJ0ZWQgU1FMIHN0cmluZy4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgc3RhdGVtZW50ICwgdG8gYmUgY29udmVydGVkLgorICAgICAqIEByZXR1cm4gICAgQ29udmVydGVkIFNRTCBzdHJpbmcuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgbmF0aXZlU1FMKFN0cmluZyBzcWwpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24ubmF0aXZlU1FMKHNxbCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLm5hdGl2ZVNRTChzcWwpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIGNhbGxpbmcgZGF0YWJhc2UKICAgICAgKiBzdG9yZWQgcHJvY2VkdXJlcy4KICAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAogICAgICAqIEByZXR1cm4gPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgQ2FsbGFibGVTdGF0ZW1lbnQgcHJlcGFyZUNhbGwoU3RyaW5nIHNxbCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlQ2FsbChzcWwpOwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBjYWxsaW5nIGRhdGFiYXNlCi0gICAgICogc3RvcmVkIHByb2NlZHVyZXMuCi0gICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0VHlwZQlUeXBlIG9mIHRoZSBSZXN1bHRTZXQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0Q29uY3VycmVuY3kJUmVzdWx0U2V0IENvbmN1cnJlbmN5LgotICAgICAqIEByZXR1cm4gPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLwotICAgIHB1YmxpYyBDYWxsYWJsZVN0YXRlbWVudCBwcmVwYXJlQ2FsbChTdHJpbmcgc3FsLGludCByZXN1bHRTZXRUeXBlLCAKLSAgICAJCQkJCWludCByZXN1bHRTZXRDb25jdXJyZW5jeSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAkJCQkJCi0gICAgCXJldHVybiBjb24ucHJlcGFyZUNhbGwoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSk7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIGNhbGxpbmcgZGF0YWJhc2UKLSAgICAgKiBzdG9yZWQgcHJvY2VkdXJlcy4KLSAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRUeXBlCVR5cGUgb2YgdGhlIFJlc3VsdFNldAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRDb25jdXJyZW5jeQlSZXN1bHRTZXQgQ29uY3VycmVuY3kuCi0gICAgICogQHBhcmFtCXJlc3VsdFNldEhvbGRhYmlsaXR5CVJlc3VsdFNldCBIb2xkYWJpbGl0eS4gICAgICAgICAgCi0gICAgICogQHJldHVybiA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovCi0gICAgcHVibGljIENhbGxhYmxlU3RhdGVtZW50IHByZXBhcmVDYWxsKFN0cmluZyBzcWwsIGludCByZXN1bHRTZXRUeXBlLCAKLSAgICAJCQkJCSBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3ksIAotICAgIAkJCQkJIGludCByZXN1bHRTZXRIb2xkYWJpbHR5KSB0aHJvd3MgU1FMRXhjZXB0aW9uewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCQkJCQkgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZUNhbGwoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSwKLSAgICAJCQkgICAgICAgcmVzdWx0U2V0SG9sZGFiaWx0eSk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVDYWxsKHNxbCk7CiAgICAgfQogCiAgICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZyAKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBjYWxsaW5nIGRhdGFiYXNlCisgICAgICogc3RvcmVkIHByb2NlZHVyZXMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0VHlwZSAgICBUeXBlIG9mIHRoZSBSZXN1bHRTZXQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0Q29uY3VycmVuY3kgICAgUmVzdWx0U2V0IENvbmN1cnJlbmN5LgorICAgICAqIEByZXR1cm4gPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBDYWxsYWJsZVN0YXRlbWVudCBwcmVwYXJlQ2FsbChTdHJpbmcgc3FsLGludCByZXN1bHRTZXRUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5KSB0aHJvd3MgU1FMRXhjZXB0aW9ueworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlQ2FsbChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBjYWxsaW5nIGRhdGFiYXNlCisgICAgICogc3RvcmVkIHByb2NlZHVyZXMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0VHlwZSAgICBUeXBlIG9mIHRoZSBSZXN1bHRTZXQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0Q29uY3VycmVuY3kgICAgUmVzdWx0U2V0IENvbmN1cnJlbmN5LgorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRIb2xkYWJpbGl0eSAgICBSZXN1bHRTZXQgSG9sZGFiaWxpdHkuCisgICAgICogQHJldHVybiA8Y29kZT4gQ2FsbGFibGVTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCisgICAgcHVibGljIENhbGxhYmxlU3RhdGVtZW50IHByZXBhcmVDYWxsKFN0cmluZyBzcWwsIGludCByZXN1bHRTZXRUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0SG9sZGFiaWx0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZUNhbGwoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0U2V0SG9sZGFiaWx0eSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZwogICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQogICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CiAgICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCk7CiAgICAgfQotICAgIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcgCi0gICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCi0gICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JYXV0b0dlbmVyYXRlZEtleXMgYSBmbGFnIGluZGljYXRpbmcgQXV0b0dlbmVyYXRlZEtleXMgbmVlZCB0byBiZSByZXR1cm5lZC4KLSAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8KLSAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLCBpbnQgYXV0b0dlbmVyYXRlZEtleXMpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsYXV0b0dlbmVyYXRlZEtleXMpOwotICAgIH0gICAgCi0gICAgICAKLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nIAotICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQotICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50Ci0gICAgICogQHBhcmFtCWNvbHVtbkluZGV4ZXMgYW4gYXJyYXkgb2YgY29sdW1uIGluZGV4ZXMgaW5kaWNhdGluZyB0aGUgY29sdW1ucyB0aGF0IHNob3VsZCBiZQotICAgICAqCQlyZXR1cm5lZCBmcm9tIHRoZSBpbnNlcnRlZCByb3cgb3Igcm93cy4KLSAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8KLSAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLCBpbnRbXSBjb2x1bW5JbmRleGVzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLGNvbHVtbkluZGV4ZXMpOwotICAgIH0gICAgICAgICAgCi0gCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZyAKLSAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKLSAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRUeXBlCVR5cGUgb2YgdGhlIFJlc3VsdFNldAotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRDb25jdXJyZW5jeQlSZXN1bHRTZXQgQ29uY3VycmVuY3kuCi0gICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovCi0gICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCxpbnQgcmVzdWx0U2V0VHlwZSwgCi0gICAgCQkJCQlpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3kpIHRocm93cyBTUUxFeGNlcHRpb257Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAJCQkJCQotICAgIAlyZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSk7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcgCi0gICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCi0gICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0VHlwZQlUeXBlIG9mIHRoZSBSZXN1bHRTZXQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0Q29uY3VycmVuY3kJUmVzdWx0U2V0IENvbmN1cnJlbmN5LgotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRIb2xkYWJpbGl0eQlSZXN1bHRTZXQgSG9sZGFiaWxpdHkuICAgICAgICAgIAotICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLwotICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIGludCByZXN1bHRTZXRUeXBlLCAKLSAgICAJCQkJCSBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3ksIAotICAgIAkJCQkJIGludCByZXN1bHRTZXRIb2xkYWJpbHR5KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAkJCQkJIAotICAgIAlyZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSwKLSAgICAJCQkJICAgIHJlc3VsdFNldEhvbGRhYmlsdHkpOwotICAgIH0gICAgICAgICAgIAogCiAgICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZyAKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nCiAgICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JY29sdW1uTmFtZXMgTmFtZSBvZiBib3VuZCBjb2x1bW5zLgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICBhdXRvR2VuZXJhdGVkS2V5cyBhIGZsYWcgaW5kaWNhdGluZyBBdXRvR2VuZXJhdGVkS2V5cyBuZWVkIHRvIGJlIHJldHVybmVkLgogICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLCBpbnQgYXV0b0dlbmVyYXRlZEtleXMpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCxhdXRvR2VuZXJhdGVkS2V5cyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZworICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIGNvbHVtbkluZGV4ZXMgYW4gYXJyYXkgb2YgY29sdW1uIGluZGV4ZXMgaW5kaWNhdGluZyB0aGUgY29sdW1ucyB0aGF0IHNob3VsZCBiZQorICAgICAqICAgICAgICByZXR1cm5lZCBmcm9tIHRoZSBpbnNlcnRlZCByb3cgb3Igcm93cy4KKyAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLCBpbnRbXSBjb2x1bW5JbmRleGVzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsY29sdW1uSW5kZXhlcyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZworICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldFR5cGUgICAgVHlwZSBvZiB0aGUgUmVzdWx0U2V0CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldENvbmN1cnJlbmN5ICAgIFJlc3VsdFNldCBDb25jdXJyZW5jeS4KKyAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLGludCByZXN1bHRTZXRUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5KSB0aHJvd3MgU1FMRXhjZXB0aW9ueworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3kpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcKKyAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRUeXBlICAgIFR5cGUgb2YgdGhlIFJlc3VsdFNldAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRDb25jdXJyZW5jeSAgICBSZXN1bHRTZXQgQ29uY3VycmVuY3kuCisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldEhvbGRhYmlsaXR5ICAgIFJlc3VsdFNldCBIb2xkYWJpbGl0eS4KKyAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLCBpbnQgcmVzdWx0U2V0VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3ksCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdFNldEhvbGRhYmlsdHkpIHRocm93cyBTUUxFeGNlcHRpb24geworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3ksCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRTZXRIb2xkYWJpbHR5KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nCisgICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgY29sdW1uTmFtZXMgTmFtZSBvZiBib3VuZCBjb2x1bW5zLgorICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsIFN0cmluZ1tdIGNvbHVtbk5hbWVzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLGNvbHVtbk5hbWVzKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsY29sdW1uTmFtZXMpOwogICAgIH0KIAogICAgIHB1YmxpYyBDbG9iIGNyZWF0ZUNsb2IoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKQEAgLTUwMCwxNjIgKzUwMCwxNjIgQEAKICAgICAvKioKICAgICAgKiBSZW1vdmVzIHRoZSBnaXZlbiA8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdCBmcm9tIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLgogICAgICAqCi0gICAgICogQHBhcmFtCXNhdmVwb2ludAk8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdAotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgc2F2ZXBvaW50ICAgIDxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0CisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJlbGVhc2VTYXZlcG9pbnQoU2F2ZXBvaW50IHNhdmVwb2ludCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnJlbGVhc2VTYXZlcG9pbnQoc2F2ZXBvaW50KTsKLSAgICB9IAotICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnJlbGVhc2VTYXZlcG9pbnQoc2F2ZXBvaW50KTsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBSb2xscyBiYWNrIHRoZSBjaGFuZ2VzIG1hZGUgaW4gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24uCiAgICAgICoKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovICAgICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCiAgICAgcHVibGljIHZvaWQgcm9sbGJhY2soKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24ucm9sbGJhY2soKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5yb2xsYmFjaygpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJvbGxzIGJhY2sgdGhlIGNoYW5nZXMgbWFkZSBhZnRlciB0aGUgc2F2ZXBvaW50LgogICAgICAqCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLyAgICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJvbGxiYWNrKFNhdmVwb2ludCBzYXZlcG9pbnQpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5yb2xsYmFjayhzYXZlcG9pbnQpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnJvbGxiYWNrKHNhdmVwb2ludCk7CiAgICAgfQotICAgICAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGF1dG8tY29tbW1pdCBtb2RlIG9mIHRoZSA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JYXV0b0NvbW1pdCBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgdGhlIGF1dG8tY29tbWl0IG1vZGUuICAgICAKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIGF1dG9Db21taXQgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIHRoZSBhdXRvLWNvbW1pdCBtb2RlLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRBdXRvQ29tbWl0KGJvb2xlYW4gYXV0b0NvbW1pdCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnNldEF1dG9Db21taXQoYXV0b0NvbW1pdCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24uc2V0QXV0b0NvbW1pdChhdXRvQ29tbWl0KTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBjYXRhbG9nIG5hbWUgdG8gdGhlIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdAogICAgICAqCi0gICAgICogQHBhcmFtCWNhdGFsb2cJQ2F0YWxvZyBuYW1lLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgY2F0YWxvZyAgICBDYXRhbG9nIG5hbWUuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldENhdGFsb2coU3RyaW5nIGNhdGFsb2cpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5zZXRDYXRhbG9nKGNhdGFsb2cpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnNldENhdGFsb2coY2F0YWxvZyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogU2V0cyB0aGUgaG9sZGFiaWxpdHkgb2YgPGNvZGU+UmVzdWx0U2V0PC9jb2RlPiBvYmplY3RzIGNyZWF0ZWQgCisgICAgICogU2V0cyB0aGUgaG9sZGFiaWxpdHkgb2YgPGNvZGU+UmVzdWx0U2V0PC9jb2RlPiBvYmplY3RzIGNyZWF0ZWQKICAgICAgKiB1c2luZyB0aGlzIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KICAgICAgKgotICAgICAqIEBwYXJhbQlob2xkYWJpbGl0eQlBIDxjb2RlPlJlc3VsdFNldDwvY29kZT4gaG9sZGFiaWxpdHkgY29uc3RhbnQKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIGhvbGRhYmlsaXR5ICAgIEEgPGNvZGU+UmVzdWx0U2V0PC9jb2RlPiBob2xkYWJpbGl0eSBjb25zdGFudAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRIb2xkYWJpbGl0eShpbnQgaG9sZGFiaWxpdHkpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgIAljb24uc2V0SG9sZGFiaWxpdHkoaG9sZGFiaWxpdHkpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgIGNvbi5zZXRIb2xkYWJpbGl0eShob2xkYWJpbGl0eSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogUHV0cyB0aGUgY29ubmVjdGlvbiBpbiByZWFkLW9ubHkgbW9kZSBhcyBhIGhpbnQgdG8gdGhlIGRyaXZlciB0byAKKyAgICAgKiBQdXRzIHRoZSBjb25uZWN0aW9uIGluIHJlYWQtb25seSBtb2RlIGFzIGEgaGludCB0byB0aGUgZHJpdmVyIHRvCiAgICAgICogcGVyZm9ybSBkYXRhYmFzZSBvcHRpbWl6YXRpb25zLgogICAgICAqCi0gICAgICogQHBhcmFtCXJlYWRPbmx5ICB0cnVlIGVuYWJsZXMgcmVhZC1vbmx5IG1vZGUsIGZhbHNlIGRpc2FibGVzIGl0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcGFyYW0gICAgcmVhZE9ubHkgIHRydWUgZW5hYmxlcyByZWFkLW9ubHkgbW9kZSwgZmFsc2UgZGlzYWJsZXMgaXQuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFJlYWRPbmx5KGJvb2xlYW4gcmVhZE9ubHkpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5zZXRSZWFkT25seShyZWFkT25seSk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24uc2V0UmVhZE9ubHkocmVhZE9ubHkpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYW5kIHVubmFtZWQgc2F2ZXBvaW50IGFuZCByZXR1cm5zIGFuIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHRoYXQuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0LgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QuCiAgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTYXZlcG9pbnQgc2V0U2F2ZXBvaW50KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5zZXRTYXZlcG9pbnQoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uc2V0U2F2ZXBvaW50KCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIHNhdmVwb2ludCB3aXRoIHRoZSBuYW1lIGFuZCByZXR1cm5zIGFuIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHRoYXQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbmFtZQlOYW1lIG9mIHRoZSBzYXZlcG9pbnQuCi0gICAgICogQHJldHVybgk8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIG5hbWUgICAgTmFtZSBvZiB0aGUgc2F2ZXBvaW50LgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTYXZlcG9pbnQgc2V0U2F2ZXBvaW50KFN0cmluZyBuYW1lKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnNldFNhdmVwb2ludChuYW1lKTsKLSAgICB9ICAgIAotICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5zZXRTYXZlcG9pbnQobmFtZSk7CisgICAgfQorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsLgogICAgICAqCi0gICAgICogQHBhcmFtCWxldmVsIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIGxldmVsIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oaW50IGxldmVsKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24obGV2ZWwpOwotICAgIH0gICAgIAotICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKGxldmVsKTsKKyAgICB9CisKICAgICAvKioKLSAgICAgKiBJbnN0YWxscyB0aGUgZ2l2ZW4gPGNvZGU+TWFwPC9jb2RlPiBvYmplY3QgYXMgdGhlIHR5b2UgbWFwIGZvciB0aGlzIAorICAgICAqIEluc3RhbGxzIHRoZSBnaXZlbiA8Y29kZT5NYXA8L2NvZGU+IG9iamVjdCBhcyB0aGUgdHlvZSBtYXAgZm9yIHRoaXMKICAgICAgKiA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KICAgICAgKgotICAgICAqIEBwYXJhbQltYXAJPGNvZGU+TWFwPC9jb2RlPiBhIE1hcCBvYmplY3QgdG8gaW5zdGFsbC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIG1hcCAgICA8Y29kZT5NYXA8L2NvZGU+IGEgTWFwIG9iamVjdCB0byBpbnN0YWxsLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRUeXBlTWFwKE1hcCBtYXApIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsKLSAgICAJY29uLnNldFR5cGVNYXAobWFwKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5zZXRUeXBlTWFwKG1hcCk7CiAgICAgfQogCiAgICAgcHVibGljIGludCBnZXROZXR3b3JrVGltZW91dCgpIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBuZXcgZmVhdHVyZS4iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXROZXR3b3JrVGltZW91dChFeGVjdXRvciBleGVjdXRvciwgaW50IG1pbGxpc2Vjb25kcykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICB0aHJvdyBuZXcgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiRG8gbm90IHN1cHBvcnQgSmF2YSA3IG5ldyBmZWF0dXJlLiIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGFib3J0KEV4ZWN1dG9yIGV4ZWN1dG9yKSAgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgbmV3IGZlYXR1cmUuIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBnZXRTY2hlbWEoKSB0aHJvd3MgU1FMRXhjZXB0aW9uewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBuZXcgZmVhdHVyZS4iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRTY2hlbWEoU3RyaW5nIHNjaGVtYSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgbmV3IGZlYXR1cmUuIik7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBDaGVja3MgdGhlIHZhbGlkaXR5IG9mIHRoaXMgb2JqZWN0CiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIGNoZWNrVmFsaWRpdHkoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLSAgICAJaWYgKGlzQ2xvc2VkKSB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uICgiQ29ubmVjdGlvbiBjbG9zZWQiKTsKLSAgICAJaWYgKCF2YWxpZCkgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAoIkludmFsaWQgQ29ubmVjdGlvbiIpOwotICAgIAlpZihhY3RpdmUgPT0gZmFsc2UpIHsKLSAgICAJICAgIG1jLmNoZWNrSWZBY3RpdmUodGhpcyk7Ci0gICAgCX0KKyAgICAgICAgaWYgKGlzQ2xvc2VkKSB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uICgiQ29ubmVjdGlvbiBjbG9zZWQiKTsKKyAgICAgICAgaWYgKCF2YWxpZCkgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAoIkludmFsaWQgQ29ubmVjdGlvbiIpOworICAgICAgICBpZihhY3RpdmUgPT0gZmFsc2UpIHsKKyAgICAgICAgICAgIG1jLmNoZWNrSWZBY3RpdmUodGhpcyk7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBhY3RpdmUgZmxhZyB0byB0cnVlCiAgICAgICoKLSAgICAgKiBAcGFyYW0JYWN0dglib29sZWFuCisgICAgICogQHBhcmFtICAgIGFjdHYgICAgYm9vbGVhbgogICAgICAqLwogICAgIHZvaWQgc2V0QWN0aXZlKGJvb2xlYW4gYWN0dikgewogICAgICAgICBhY3RpdmUgPSBhY3R2OwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCmluZGV4IGFjN2U3NDguLmYwNjc1YTQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKQEAgLTMzLDE5ICszMywxOSBAQAogICogVGhpcyBjbGFzcyBpcyBleHRlbmRlZCBieSB0aGUgRGF0YVNvdXJjZSBzcGVjaWZpYyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gZmFjdG9yaWVzCiAgKiBhbmQgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gZm9yIHRoZSA8Y29kZT5Ecml2ZXJNYW5hZ2VyPC9jb2RlPi4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA4LzAzCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wOC8wMworICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LCAKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnksCiAgICAgamF2YS5pby5TZXJpYWxpemFibGUgewotICAgIAorCiAgICAgcHJvdGVjdGVkIERhdGFTb3VyY2VTcGVjIHNwZWMgPSBuZXcgRGF0YVNvdXJjZVNwZWMoKTsKICAgICBwcm90ZWN0ZWQgdHJhbnNpZW50IERhdGFTb3VyY2VPYmplY3RCdWlsZGVyIGRzT2JqQnVpbGRlcjsKLSAgICAKKwogICAgIHByb3RlY3RlZCBqYXZhLmlvLlByaW50V3JpdGVyIGxvZ1dyaXRlciA9IG51bGw7CiAgICAgcHJvdGVjdGVkIGpha2FydGEucmVzb3VyY2Uuc3BpLlJlc291cmNlQWRhcHRlciByYSA9IG51bGw7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBMb2dnZXIgX2xvZ2dlcjsKICAgICBzdGF0aWMgewogICAgICAgICBfbG9nZ2VyID0gTG9nZ2VyLmdldEFub255bW91c0xvZ2dlcigpOwpAQCAtNTQsOCArNTQsOCBAQAogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBDb25uZWN0aW9uIEZhY3RvcnkgaW5zdGFuY2UuIFRoZSA8Y29kZT5Db25uZWN0aW9uTWFuYWdlcjwvY29kZT4gaW1wbGVtZW50YXRpb24KICAgICAgKiBvZiB0aGUgcmVzb3VyY2UgYWRhcHRlciBpcyB1c2VkIGhlcmUuCi0gICAgICogCi0gICAgICogQHJldHVybglHZW5lcmljIEpEQkMgQ29ubmVjdG9yIGltcGxlbWVudGF0aW9uIG9mIDxjb2RlPmphdmF4LnNxbC5EYXRhU291cmNlPC9jb2RlPgorICAgICAqCisgICAgICogQHJldHVybiAgICBHZW5lcmljIEpEQkMgQ29ubmVjdG9yIGltcGxlbWVudGF0aW9uIG9mIDxjb2RlPmphdmF4LnNxbC5EYXRhU291cmNlPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBPYmplY3QgY3JlYXRlQ29ubmVjdGlvbkZhY3RvcnkoKSB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC02MywxNiArNjMsMTYgQEAKICAgICAgICAgfQogICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuRGF0YVNvdXJjZSBjZiA9IG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuRGF0YVNvdXJjZSgKICAgICAgICAgICAgIChqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkpdGhpcywgbnVsbCk7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBjZjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgQ29ubmVjdGlvbiBGYWN0b3J5IGluc3RhbmNlLiBUaGUgPGNvZGU+Q29ubmVjdGlvbk1hbmFnZXI8L2NvZGU+IGltcGxlbWVudGF0aW9uCiAgICAgICogb2YgdGhlIGFwcGxpY2F0aW9uIHNlcnZlciBpcyB1c2VkIGhlcmUuCi0gICAgICogCi0gICAgICogQHBhcmFtCWN4TWFuYWdlcgk8Y29kZT5Db25uZWN0aW9uTWFuYWdlcjwvY29kZT4gcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKiBAcmV0dXJuCUdlbmVyaWMgSkRCQyBDb25uZWN0b3IgaW1wbGVtZW50YXRpb24gb2YgPGNvZGU+amF2YXguc3FsLkRhdGFTb3VyY2U8L2NvZGU+CisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgY3hNYW5hZ2VyICAgIDxjb2RlPkNvbm5lY3Rpb25NYW5hZ2VyPC9jb2RlPiBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqIEByZXR1cm4gICAgR2VuZXJpYyBKREJDIENvbm5lY3RvciBpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgT2JqZWN0IGNyZWF0ZUNvbm5lY3Rpb25GYWN0b3J5KGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25NYW5hZ2VyIGN4TWFuYWdlcikgewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtODAsNTUgKzgwLDU1IEBACiAgICAgICAgIH0KICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2UgY2YgPSBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2UoCiAgICAgICAgICAgICAoamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KXRoaXMsIGN4TWFuYWdlcik7Ci0gICAgICAgIHJldHVybiBjZjsgCisgICAgICAgIHJldHVybiBjZjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgbmV3IHBoeXNpY2FsIGNvbm5lY3Rpb24gdG8gdGhlIHVuZGVybHlpbmcgRUlTIHJlc291cmNlCiAgICAgICogbWFuYWdlci4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0Jc3ViamVjdAk8Y29kZT5TdWJqZWN0PC9jb2RlPiBpbnN0YW5jZSBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgotICAgICAqIEBwYXJhbQljeFJlcXVlc3RJbmZvCTxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gd2hpY2ggbWF5IGJlIGNyZWF0ZWQKLSAgICAgKiAgICAgICAJICAgICAgICAgICAgIAlhcyBhIHJlc3VsdCBvZiB0aGUgaW52b2NhdGlvbiA8Y29kZT5nZXRDb25uZWN0aW9uKHVzZXIsIHBhc3N3b3JkKTwvY29kZT4KLSAgICAgKiAgICAgICAJICAgICAgICAgICAgIAlvbiB0aGUgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0Ci0gICAgICogQHJldHVybgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGNyZWF0ZWQKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGluc3RhbnRpYXRpbmcgdGhlCi0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAk8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QgdXNlZCBmb3IgdGhlCi0gICAgICogICAgICAgCQkJCWNyZWF0aW9uIG9mIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0Ci0gICAgICogQHRocm93cwlTZWN1cml0eUV4Y2VwdGlvbglpZiB0aGVyZSBpbm8gPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCXNhdGlzZnlpbmcgdGhpcyByZXF1ZXN0IAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VBbGxvY2F0aW9uRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlIAotICAgICAqCQkJCQkJcGh5c2ljYWwgY29ubmVjdGlvbgorICAgICAqCisgICAgICogQHBhcmFtICAgIHN1YmplY3QgICAgPGNvZGU+U3ViamVjdDwvY29kZT4gaW5zdGFuY2UgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiBAcGFyYW0gICAgY3hSZXF1ZXN0SW5mbyAgICA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHdoaWNoIG1heSBiZSBjcmVhdGVkCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgYSByZXN1bHQgb2YgdGhlIGludm9jYXRpb24gPGNvZGU+Z2V0Q29ubmVjdGlvbih1c2VyLCBwYXNzd29yZCk8L2NvZGU+CisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gdGhlIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdAorICAgICAqIEByZXR1cm4gICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBjcmVhdGVkCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBpbnN0YW50aWF0aW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0IHVzZWQgZm9yIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGlvbiBvZiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdAorICAgICAqIEB0aHJvd3MgICAgU2VjdXJpdHlFeGNlcHRpb24gICAgaWYgdGhlcmUgaW5vIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0CisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXRpc2Z5aW5nIHRoaXMgcmVxdWVzdAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VBbGxvY2F0aW9uRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICBwaHlzaWNhbCBjb25uZWN0aW9uCiAgICAgICovCiAgICAgcHVibGljIGFic3RyYWN0IGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uIGNyZWF0ZU1hbmFnZWRDb25uZWN0aW9uKGphdmF4LnNlY3VyaXR5LmF1dGguU3ViamVjdCBzdWJqZWN0LAogICAgICAgICBDb25uZWN0aW9uUmVxdWVzdEluZm8gY3hSZXF1ZXN0SW5mbykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uOwotICAgIAorCiAgICAgLyoqCi0gICAgICogQ2hlY2sgaWYgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGlzIGVxdWFsIHRvIAorICAgICAqIENoZWNrIGlmIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpcyBlcXVhbCB0bwogICAgICAqIGFub3RoZXIgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPi4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0Jb3RoZXIJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QgZm9yIGNoZWNraW5nIGVxdWFsaXR5IHdpdGgKLSAgICAgKiBAcmV0dXJuCXRydWUJaWYgdGhlIHByb3BlcnR5IHNldHMgb2YgYm90aCB0aGUgCi0gICAgICoJCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdHMgYXJlIHRoZSBzYW1lCi0gICAgICoJCWZhbHNlCW90aGVyd2lzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIG90aGVyICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0IGZvciBjaGVja2luZyBlcXVhbGl0eSB3aXRoCisgICAgICogQHJldHVybiAgICB0cnVlICAgIGlmIHRoZSBwcm9wZXJ0eSBzZXRzIG9mIGJvdGggdGhlCisgICAgICogICAgICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdHMgYXJlIHRoZSBzYW1lCisgICAgICogICAgICAgIGZhbHNlICAgIG90aGVyd2lzZQogICAgICAqLwogICAgIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGVxdWFscyhPYmplY3Qgb3RoZXIpOwotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSBsb2cgd3JpdGVyIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHNlZQk8Y29kZT5zZXRMb2dXcml0ZXI8L2NvZGU+CisgICAgICogQHJldHVybiAgICA8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0TG9nV3JpdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBqYXZhLmlvLlByaW50V3JpdGVyIGdldExvZ1dyaXRlcigpIHsKICAgICAgICAgcmV0dXJuIGxvZ1dyaXRlcjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXQgdGhlIDxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHNlZQk8Y29kZT5zZXRSZXNvdXJjZUFkYXB0ZXI8L2NvZGU+CisgICAgICogQHJldHVybiAgICA8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldFJlc291cmNlQWRhcHRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuUmVzb3VyY2VBZGFwdGVyIGdldFJlc291cmNlQWRhcHRlcigpIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTEzNiwxMSArMTM2LDExIEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJhOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIGhhc2ggY29kZSBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LgogICAgICAqCi0gICAgICogQHJldHVybgloYXNoIGNvZGUgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgaGFzaCBjb2RlIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCl7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC0xNDgsNDEgKzE0OCw0MSBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBzcGVjLmhhc2hDb2RlKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogUmV0dXJucyBhIG1hdGNoZWQgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGZyb20gdGhlIGNhbmRpZGF0ZSAKKyAgICAgKiBSZXR1cm5zIGEgbWF0Y2hlZCA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gZnJvbSB0aGUgY2FuZGlkYXRlCiAgICAgICogc2V0IG9mIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3RzLgotICAgICAqIAotICAgICAqIEBwYXJhbQljb25uZWN0aW9uU2V0CTxjb2RlPlNldDwvY29kZT4gb2YgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgotICAgICAqCQkJCW9iamVjdHMgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKiBAcGFyYW0Jc3ViamVjdAkgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKgkJCWZvciByZXRyaWV2aW5nIGluZm9ybWF0aW9uIHJlcXVpcmVkIGZvciBtYXRjaGluZwotICAgICAqIEBwYXJhbQljeFJlcXVlc3RJbmZvCTxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKgkJCQlmb3IgcmV0cmlldmluZyBpbmZvcm1hdGlvbiByZXF1aXJlZCBmb3IgbWF0Y2hpbmcKLSAgICAgKiBAcmV0dXJuCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiB0aGF0IGlzIHRoZSBiZXN0IG1hdGNoIHNhdGlzZnlpbmcgdGhpcyByZXF1ZXN0Ci0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBhY2Nlc3NpbmcgdGhlIDxjb2RlPlN1YmplY3Q8L2NvZGU+Ci0gICAgICoJCQkJCXBhcmFtZXRlciBvciB0aGUgPGNvZGU+U2V0PC9jb2RlPiBvZiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KLSAgICAgKgkJCQkJb2JqZWN0cyBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqCisgICAgICogQHBhcmFtICAgIGNvbm5lY3Rpb25TZXQgICAgPGNvZGU+U2V0PC9jb2RlPiBvZiAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogICAgICAgICAgICAgICAgb2JqZWN0cyBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqIEBwYXJhbSAgICBzdWJqZWN0ICAgICBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqICAgICAgICAgICAgZm9yIHJldHJpZXZpbmcgaW5mb3JtYXRpb24gcmVxdWlyZWQgZm9yIG1hdGNoaW5nCisgICAgICogQHBhcmFtICAgIGN4UmVxdWVzdEluZm8gICAgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqICAgICAgICAgICAgICAgIGZvciByZXRyaWV2aW5nIGluZm9ybWF0aW9uIHJlcXVpcmVkIGZvciBtYXRjaGluZworICAgICAqIEByZXR1cm4gICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHRoYXQgaXMgdGhlIGJlc3QgbWF0Y2ggc2F0aXNmeWluZyB0aGlzIHJlcXVlc3QKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGFjY2Vzc2luZyB0aGUgPGNvZGU+U3ViamVjdDwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyIG9yIHRoZSA8Y29kZT5TZXQ8L2NvZGU+IG9mIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgICAgICBvYmplY3RzIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCiAgICAgICovCi0gICAgcHVibGljIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1hdGNoTWFuYWdlZENvbm5lY3Rpb25zKGphdmEudXRpbC5TZXQgY29ubmVjdGlvblNldCwgCisgICAgcHVibGljIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1hdGNoTWFuYWdlZENvbm5lY3Rpb25zKGphdmEudXRpbC5TZXQgY29ubmVjdGlvblNldCwKICAgICAgICAgamF2YXguc2VjdXJpdHkuYXV0aC5TdWJqZWN0IHN1YmplY3QsIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBjeFJlcXVlc3RJbmZvKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nV3JpdGVyLnByaW50bG4oIkluIG1hdGNoTWFuYWdlZENvbm5lY3Rpb25zIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYoY29ubmVjdGlvblNldCA9PSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBQYXNzd29yZENyZWRlbnRpYWwgcGMgPSBTZWN1cml0eVV0aWxzLmdldFBhc3N3b3JkQ3JlZGVudGlhbCh0aGlzLCBzdWJqZWN0LCBjeFJlcXVlc3RJbmZvKTsKLSAgICAgICAgCisKICAgICAgICAgamF2YS51dGlsLkl0ZXJhdG9yIGl0ZXIgPSBjb25uZWN0aW9uU2V0Lml0ZXJhdG9yKCk7CiAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYyA9IG51bGw7CiAgICAgICAgIHdoaWxlKGl0ZXIuaGFzTmV4dCgpKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIG1jID0gKGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbikgaXRlci5uZXh0KCk7CiAgICAgICAgICAgICB9IGNhdGNoKGphdmEudXRpbC5Ob1N1Y2hFbGVtZW50RXhjZXB0aW9uIG5zZWUpIHsKLQkgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2l0ZXIiKTsKKyAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2l0ZXIiKTsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24obnNlZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYocGMgPT0gbnVsbCAmJiB0aGlzLmVxdWFscyhtYy5nZXRNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkoKSkpIHsKQEAgLTE5MSw3ICsxOTEsNyBAQAogICAgICAgICAgICAgICAgICAgICBpc1ZhbGlkKG1jKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1jOwogICAgICAgICAgICAgICAgIH0gY2F0Y2goUmVzb3VyY2VFeGNlcHRpb24gcmUpIHsKLQkgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19yZSIsIHJlKTsKKyAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19yZSIsIHJlKTsKICAgICAgICAgICAgICAgICAgICAgbWMuY29ubmVjdGlvbkVycm9yT2NjdXJyZWQocmUsIG51bGwpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSBpZihTZWN1cml0eVV0aWxzLmlzUGFzc3dvcmRDcmVkZW50aWFsRXF1YWwocGMsIG1jLmdldFBhc3N3b3JkQ3JlZGVudGlhbCgpKSA9PSB0cnVlKSB7CkBAIC0yMDAsNDUgKzIwMCw0NSBAQAogICAgICAgICAgICAgICAgICAgICBpc1ZhbGlkKG1jKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1jOwogICAgICAgICAgICAgICAgIH0gY2F0Y2goUmVzb3VyY2VFeGNlcHRpb24gcmUpIHsKLQkgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLnJlIik7CisgICAgICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5yZSIpOwogICAgICAgICAgICAgICAgICAgICBtYy5jb25uZWN0aW9uRXJyb3JPY2N1cnJlZChyZSwgbnVsbCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KLSAgICAKKwogICAgIC8vR0pDSU5UCiAgICAgLyoqCiAgICAgICogQ2hlY2tzIGlmIGEgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGlzIHRvIGJlIHZhbGlkYXRlZCBvciBub3QKICAgICAgKiBhbmQgdmFsaWRhdGVzIGl0IG9yIHJldHVybnMuCi0gICAgICogCi0gICAgICogQHBhcmFtCW1jCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBvcgotICAgICAqICAgICAgICAJICAgICAgICAgIAkJaWYgdmFsaWRhdGlvbiBtZXRob2QgaXMgbm90IHByb3BlcgorICAgICAqCisgICAgICogQHBhcmFtICAgIG1jICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBvcgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdmFsaWRhdGlvbiBtZXRob2QgaXMgbm90IHByb3BlcgogICAgICAqLwogICAgIHZvaWQgaXNWYWxpZChjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWMpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAKICAgICAgICAgaWYobWMuaXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSkgewotCSAgICByZXR1cm47CisgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgIAotICAgICAgICBib29sZWFuIGNvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQgPSAKKworICAgICAgICBib29sZWFuIGNvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQgPQogICAgICAgICAgICAgKG5ldyBCb29sZWFuKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQpLnRvTG93ZXJDYXNlKCkpKS5ib29sZWFuVmFsdWUoKTsKICAgICAgICAgaWYoIGNvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQgPT0gZmFsc2UgfHwgbWMgPT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAKKworCiAgICAgICAgIFN0cmluZyB2YWxpZGF0aW9uTWV0aG9kID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTk1FVEhPRCkudG9Mb3dlckNhc2UoKTsKLSAgICAgICAgCisKICAgICAgICAgbWMuY2hlY2tJZlZhbGlkKCk7CiAgICAgICAgIC8qKgogICAgICAgICAgKiBUaGUgYWJvdmUgY2FsbCBjaGVja3MgaWYgdGhlIGFjdHVhbCBwaHlzaWNhbCBjb25uZWN0aW9uCiAgICAgICAgICAqIGlzIHVzYWJsZSBvciBub3QuCiAgICAgICAgICAqLwogICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiA9IG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKTsKLSAgICAgICAgCisKICAgICAgICAgaWYodmFsaWRhdGlvbk1ldGhvZC5lcXVhbHMoImF1dG8tY29tbWl0IikgPT0gdHJ1ZSkgewogICAgICAgICAgICAgaXNWYWxpZEJ5QXV0b0NvbW1pdChjb24pOwogICAgICAgICB9IGVsc2UgaWYodmFsaWRhdGlvbk1ldGhvZC5lcXVhbHNJZ25vcmVDYXNlKCJtZXRhLWRhdGEiKSA9PSB0cnVlKSB7CkBAIC0yNDksMjggKzI0OSwyOCBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgdmFsaWRhdGlvbiBtZXRob2QgaXMgbm90IHByb3BlciIpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2hlY2tzIGlmIGEgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gaXMgdmFsaWQgb3Igbm90CiAgICAgICogYnkgY2hlY2tpbmcgaXRzIGF1dG8gY29tbWl0IHByb3BlcnR5LgotICAgICAqIAotICAgICAqIEBwYXJhbQljb24JPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBjb24gICAgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKi8KICAgICBwcm90ZWN0ZWQgdm9pZCBpc1ZhbGlkQnlBdXRvQ29tbWl0KGphdmEuc3FsLkNvbm5lY3Rpb24gY29uKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihjb24gPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgIgogICAgICAgICAgICAgICAgICsgInRoZSBjb25uZWN0aW9uIGlzIG51bGwiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICB0cnkgewotICAgICAgICAgICAvLyBOb3RpY2UgdGhhdCB1c2luZyBzb21ldGhpbmcgbGlrZSAKKyAgICAgICAgICAgLy8gTm90aWNlIHRoYXQgdXNpbmcgc29tZXRoaW5nIGxpa2UKICAgICAgICAgICAgLy8gZGJDb24uc2V0QXV0b0NvbW1pdChkYkNvbi5nZXRBdXRvQ29tbWl0KCkpIHdpbGwgY2F1c2UgcHJvYmxlbXMgd2l0aAogICAgICAgICAgICAvLyBzb21lIGRyaXZlcnMgbGlrZSBzeWJhc2UKLSAgICAgICAgICAgLy8gV2UgZG8gbm90IHZhbGlkYXRlIGNvbm5lY3Rpb25zIHRoYXQgYXJlIGFscmVhZHkgZW5saXN0ZWQgCi0JICAgLy9pbiBhIHRyYW5zYWN0aW9uIAotCSAgIC8vIFdlIGN5Y2xlIGF1dG9jb21taXQgdG8gdHJ1ZSBhbmQgZmFsc2UgdG8gYnktcGFzcyBkcml2ZXJzIHRoYXQgCi0JICAgLy8gbWlnaHQgY2FjaGUgdGhlIGNhbGwgdG8gc2V0IGF1dG9jb21pdHQKKyAgICAgICAgICAgLy8gV2UgZG8gbm90IHZhbGlkYXRlIGNvbm5lY3Rpb25zIHRoYXQgYXJlIGFscmVhZHkgZW5saXN0ZWQKKyAgICAgICAvL2luIGEgdHJhbnNhY3Rpb24KKyAgICAgICAvLyBXZSBjeWNsZSBhdXRvY29tbWl0IHRvIHRydWUgYW5kIGZhbHNlIHRvIGJ5LXBhc3MgZHJpdmVycyB0aGF0CisgICAgICAgLy8gbWlnaHQgY2FjaGUgdGhlIGNhbGwgdG8gc2V0IGF1dG9jb21pdHQKICAgICAgICAgICAgLy8gQWxzbyBub3RpY2UgdGhhdCBzb21lIFhBIGRhdGEgc291cmNlcyB3aWxsIHRocm93IGFuZCBleGNlcHRpb24gaWYKICAgICAgICAgICAgLy8geW91IHRyeSB0byBjYWxsIHNldEF1dG9Db21taXQsIGZvciB0aGVtIHRoaXMgbWV0aG9kIGlzIG5vdCByZWNvbW1lbmRlZAogCkBAIC0yODEsOTAgKzI4MSw5MCBAQAogICAgICAgICAgICAgICAgIGNvbi5yb2xsYmFjaygpOyAvLyBwcmV2ZW50cyB1bmNvbXBsZXRlZCB0cmFuc2FjdGlvbiBleGNlcHRpb25zCiAgICAgICAgICAgICAgICAgY29uLnNldEF1dG9Db21taXQodHJ1ZSk7CiAgICAgICAgICAgIH0KLSAgICAgICAgCi0JICAgY29uLnNldEF1dG9Db21taXQoYWMpOworCisgICAgICAgY29uLnNldEF1dG9Db21taXQoYWMpOwogCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfYXV0b2NvbW1pdCIpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19hdXRvY29tbWl0Iik7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2hlY2tzIGlmIGEgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gaXMgdmFsaWQgb3Igbm90CiAgICAgICogYnkgY2hlY2tpbmcgaXRzIG1ldGEgZGF0YS4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JY29uCTxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgY29uICAgIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCiAgICAgICovCiAgICAgcHJvdGVjdGVkIHZvaWQgaXNWYWxpZEJ5TWV0YURhdGEoamF2YS5zcWwuQ29ubmVjdGlvbiBjb24pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGNvbiA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyAiCiAgICAgICAgICAgICAgICAgKyAidGhlIGNvbm5lY3Rpb24gaXMgbnVsbCIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBqYXZhLnNxbC5EYXRhYmFzZU1ldGFEYXRhIGRtZCA9IGNvbi5nZXRNZXRhRGF0YSgpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX21kIik7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX21kIik7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyAiCiAgICAgICAgICAgICAgICAgKyAiZ2V0dGluZyB0aGUgbWV0YSBkYXRhIGZhaWxlZDogIiArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENoZWNrcyBpZiBhIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IGlzIHZhbGlkIG9yIG5vdAogICAgICAqIGJ5IHF1ZXJ5aW5nIGEgdGFibGUuCi0gICAgICogCi0gICAgICogQHBhcmFtCWNvbgk8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKLSAgICAgKiBAcGFyYW0JdGFibGVOYW1lCXRhYmxlIHdoaWNoIHNob3VsZCBiZSBxdWVyaWVkCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBjb24gICAgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCisgICAgICogQHBhcmFtICAgIHRhYmxlTmFtZSAgICB0YWJsZSB3aGljaCBzaG91bGQgYmUgcXVlcmllZAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCiAgICAgICovCi0gICAgcHJvdGVjdGVkIHZvaWQgaXNWYWxpZEJ5VGFibGVRdWVyeShqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiwgCisgICAgcHJvdGVjdGVkIHZvaWQgaXNWYWxpZEJ5VGFibGVRdWVyeShqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiwKICAgICAgICAgU3RyaW5nIHRhYmxlTmFtZSkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYoY29uID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzICIKICAgICAgICAgICAgICAgICArICJ0aGUgY29ubmVjdGlvbiBpcyBudWxsIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGphdmEuc3FsLlN0YXRlbWVudCBzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOwogICAgICAgICAgICAgamF2YS5zcWwuUmVzdWx0U2V0IHJzID0gc3RtdC5leGVjdXRlUXVlcnkoIlNFTEVDVCAqIEZST00gIiArIHRhYmxlTmFtZSk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZXhlY3V0ZSIpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19leGVjdXRlIik7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyAiCiAgICAgICAgICAgICAgICAgKyAicXVlcnlpbmcgdGhlIHRhYmxlICIgKyB0YWJsZU5hbWUgKyAiIGZhaWxlZDogIiArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGlzb2xhdGlvbiBsZXZlbCBzcGVjaWZpZWQgaW4gdGhlIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4KICAgICAgKiBmb3IgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBwYXNzZWQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWMJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+Ci0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgaXNvbGF0aW9uIHByb3BlcnR5IGlzIGludmFsaWQKLSAgICAgKgkJCQkJb3IgaWYgdGhlIGlzb2xhdGlvbiBjYW5ub3QgYmUgc2V0IG92ZXIgdGhlIGNvbm5lY3Rpb24KKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgaXNvbGF0aW9uIHByb3BlcnR5IGlzIGludmFsaWQKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgb3IgaWYgdGhlIGlzb2xhdGlvbiBjYW5ub3QgYmUgc2V0IG92ZXIgdGhlIGNvbm5lY3Rpb24KICAgICAgKi8KICAgICBwcm90ZWN0ZWQgdm9pZCBzZXRJc29sYXRpb24oY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1jKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewotICAgIAkKLSAgICAJamF2YS5zcWwuQ29ubmVjdGlvbiBjb24gPSBtYy5nZXRBY3R1YWxDb25uZWN0aW9uKCk7Ci0gICAgCWlmKGNvbiA9PSBudWxsKSB7Ci0gICAgCSAgICByZXR1cm47Ci0gICAgCX0KLSAgICAJCi0gICAgCVN0cmluZyB0cmFuSXNvbGF0aW9uID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04pOwotICAgIAlpZih0cmFuSXNvbGF0aW9uICE9IG51bGwgJiYgdHJhbklzb2xhdGlvbi5lcXVhbHMoIiIpID09IGZhbHNlKSB7Ci0gICAgCSAgICBpbnQgdHJhbklzb2xhdGlvbkludCA9IGdldFRyYW5zYWN0aW9uSXNvbGF0aW9uSW50KHRyYW5Jc29sYXRpb24pOwotICAgIAkgICAgdHJ5IHsKLSAgICAJICAgICAgICBjb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24odHJhbklzb2xhdGlvbkludCk7Ci0gICAgCSAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y190eF9sZXZlbCIpOwotICAgIAkgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBjb3VsZCAiCi0gICAgCSAgICAgICAgICAgICsgIm5vdCBiZSBzZXQ6ICIgKyBzcWxlLmdldE1lc3NhZ2UoKSk7Ci0gICAgCSAgICB9Ci0gICAgCX0KKworICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiA9IG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKTsKKyAgICAgICAgaWYoY29uID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFN0cmluZyB0cmFuSXNvbGF0aW9uID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04pOworICAgICAgICBpZih0cmFuSXNvbGF0aW9uICE9IG51bGwgJiYgdHJhbklzb2xhdGlvbi5lcXVhbHMoIiIpID09IGZhbHNlKSB7CisgICAgICAgICAgICBpbnQgdHJhbklzb2xhdGlvbkludCA9IGdldFRyYW5zYWN0aW9uSXNvbGF0aW9uSW50KHRyYW5Jc29sYXRpb24pOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24odHJhbklzb2xhdGlvbkludCk7CisgICAgICAgICAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7CisgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y190eF9sZXZlbCIpOworICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBjb3VsZCAiCisgICAgICAgICAgICAgICAgICAgICsgIm5vdCBiZSBzZXQ6ICIgKyBzcWxlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXNldHMgdGhlIGlzb2xhdGlvbiBsZXZlbCBmb3IgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBwYXNzZWQuCiAgICAgICogSWYgdGhlIHRyYW5zYWN0aW9uIGxldmVsIGlzIHRvIGJlIGd1YXJhbnRlZWQgdG8gYmUgdGhlIHNhbWUgYXMgdGhlIG9uZQpAQCAtMzczLDM4MiArMzczLDM4MiBAQAogICAgICAqIGlzb2xhdGlvbiBsZXZlbCBmcm9tIHRoZSA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHBhc3NlZC4gRWxzZSwKICAgICAgKiBpdCBzZXRzIGl0IHRvIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gcGFzc2VkLgogICAgICAqCi0gICAgICogQHBhcmFtCW1jCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgotICAgICAqIEBwYXJhbQl0cmFuSXNvbAlpbnQKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBpc29sYXRpb24gcHJvcGVydHkgaXMgaW52YWxpZAotICAgICAqCQkJCQlvciBpZiB0aGUgaXNvbGF0aW9uIGNhbm5vdCBiZSBzZXQgb3ZlciB0aGUgY29ubmVjdGlvbgorICAgICAqIEBwYXJhbSAgICBtYyAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdHJhbklzb2wgICAgaW50CisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgaXNvbGF0aW9uIHByb3BlcnR5IGlzIGludmFsaWQKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgb3IgaWYgdGhlIGlzb2xhdGlvbiBjYW5ub3QgYmUgc2V0IG92ZXIgdGhlIGNvbm5lY3Rpb24KICAgICAgKi8KICAgICB2b2lkIHJlc2V0SXNvbGF0aW9uKGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYywgaW50IHRyYW5Jc29sKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewotICAgIAkKLSAgICAJamF2YS5zcWwuQ29ubmVjdGlvbiBjb24gPSBtYy5nZXRBY3R1YWxDb25uZWN0aW9uKCk7Ci0gICAgCWlmKGNvbiA9PSBudWxsKSB7Ci0gICAgCSAgICByZXR1cm47Ci0gICAgCX0KLSAgICAJCi0gICAgCVN0cmluZyB0cmFuSXNvbGF0aW9uID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04pOwotICAgIAlpZih0cmFuSXNvbGF0aW9uICE9IG51bGwgJiYgdHJhbklzb2xhdGlvbi5lcXVhbHMoIiIpID09IGZhbHNlKSB7Ci0gICAgCSAgICBTdHJpbmcgZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwgPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5HVUFSQU5URUVJU09MQVRJT05MRVZFTCk7Ci0gICAgCSAgICAKLSAgICAJICAgIGlmKGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsICE9IG51bGwgJiYgZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwuZXF1YWxzKCIiKSA9PSBmYWxzZSkgewotICAgIAkgICAgICAgIGJvb2xlYW4gZ3VhcmFudGVlID0gKG5ldyBCb29sZWFuKGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsLnRvTG93ZXJDYXNlKCkpKS5ib29sZWFuVmFsdWUoKTsKLSAgICAJICAgICAgICAKLSAgICAJICAgICAgICBpZihndWFyYW50ZWUpIHsKLSAgICAJICAgICAgICAgICAgaW50IHRyYW5Jc29sYXRpb25JbnQgPSBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbkludCh0cmFuSXNvbGF0aW9uKTsKLSAgICAJICAgICAgICAgICAgdHJ5IHsKLSAgICAJICAgICAgICAgICAgICAgIGlmKHRyYW5Jc29sYXRpb25JbnQgIT0gY29uLmdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCkpIHsKLSAgICAJICAgICAgICAgICAgICAgICAgICBjb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24odHJhbklzb2xhdGlvbkludCk7Ci0gICAgCSAgICAgICAgICAgICAgICB9Ci0gICAgCSAgICAgICAgICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfdHhfbGV2ZWwiKTsKLSAgICAJICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGlzb2xhdGlvbiBsZXZlbCBjb3VsZCBub3QgYmUgc2V0OiAiCi0gICAgCSAgICAgICAgICAgICAgICAgICAgKyBzcWxlLmdldE1lc3NhZ2UoKSk7Ci0gICAgCSAgICAgICAgICAgIH0KLSAgICAJICAgICAgICB9IGVsc2UgewotICAgIAkgICAgICAgICAgICB0cnkgewotICAgIAkgICAgICAgICAgICAgICAgaWYodHJhbklzb2wgIT0gY29uLmdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCkpIHsKLSAgICAJICAgICAgICAgICAgICAgICAgICBjb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24odHJhbklzb2wpOwotICAgIAkgICAgICAgICAgICAgICAgfQotICAgIAkgICAgICAgICAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgICAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3R4X2xldmVsIik7Ci0gICAgCSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBpc29sYXRpb24gbGV2ZWwgY291bGQgbm90IGJlIHNldDogIgotICAgIAkgICAgICAgICAgICAgICAgICAgICsgc3FsZS5nZXRNZXNzYWdlKCkpOwotICAgIAkgICAgICAgICAgICB9Ci0gICAgCSAgICAgICAgfQotICAgIAkgICAgfQotICAgIAl9CisKKyAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBjb24gPSBtYy5nZXRBY3R1YWxDb25uZWN0aW9uKCk7CisgICAgICAgIGlmKGNvbiA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBTdHJpbmcgdHJhbklzb2xhdGlvbiA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OKTsKKyAgICAgICAgaWYodHJhbklzb2xhdGlvbiAhPSBudWxsICYmIHRyYW5Jc29sYXRpb24uZXF1YWxzKCIiKSA9PSBmYWxzZSkgeworICAgICAgICAgICAgU3RyaW5nIGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwpOworCisgICAgICAgICAgICBpZihndWFyYW50ZWVJc29sYXRpb25MZXZlbCAhPSBudWxsICYmIGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsLmVxdWFscygiIikgPT0gZmFsc2UpIHsKKyAgICAgICAgICAgICAgICBib29sZWFuIGd1YXJhbnRlZSA9IChuZXcgQm9vbGVhbihndWFyYW50ZWVJc29sYXRpb25MZXZlbC50b0xvd2VyQ2FzZSgpKSkuYm9vbGVhblZhbHVlKCk7CisKKyAgICAgICAgICAgICAgICBpZihndWFyYW50ZWUpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHRyYW5Jc29sYXRpb25JbnQgPSBnZXRUcmFuc2FjdGlvbklzb2xhdGlvbkludCh0cmFuSXNvbGF0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRyYW5Jc29sYXRpb25JbnQgIT0gY29uLmdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24odHJhbklzb2xhdGlvbkludCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKKyAgICAgICAgICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfdHhfbGV2ZWwiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGlzb2xhdGlvbiBsZXZlbCBjb3VsZCBub3QgYmUgc2V0OiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBzcWxlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYodHJhbklzb2wgIT0gY29uLmdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb24uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24odHJhbklzb2wpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7CisgICAgICAgICAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3R4X2xldmVsIik7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBpc29sYXRpb24gbGV2ZWwgY291bGQgbm90IGJlIHNldDogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgc3FsZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgaW50ZWdlciBlcXVpdmFsZW50IG9mIHRoZSBzdHJpbmcgc3BlY2lmeWluZwogICAgICAqIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdHJhbklzb2xhdGlvbglzdHJpbmcgc3BlY2lmeWluZyB0aGUgaXNvbGF0aW9uIGxldmVsCi0gICAgICogQHJldHVybgl0cmFuSXNvbGF0aW9uSW50CXRoZSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBjb25zdGFudAotICAgICAqCQkJCQlmb3IgdGhlIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBpc29sYXRpb24uCisgICAgICogQHBhcmFtICAgIHRyYW5Jc29sYXRpb24gICAgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIGlzb2xhdGlvbiBsZXZlbAorICAgICAqIEByZXR1cm4gICAgdHJhbklzb2xhdGlvbkludCAgICB0aGUgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gY29uc3RhbnQKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBzdHJpbmcgc3BlY2lmeWluZyB0aGUgaXNvbGF0aW9uLgogICAgICAqLwogICAgIHByaXZhdGUgaW50IGdldFRyYW5zYWN0aW9uSXNvbGF0aW9uSW50KFN0cmluZyB0cmFuSXNvbGF0aW9uKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewotICAgIAlpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInJlYWQtdW5jb21taXR0ZWQiKSkgewotICAgIAkgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fUkVBRF9VTkNPTU1JVFRFRDsKLSAgICAJfSBlbHNlIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgicmVhZC1jb21taXR0ZWQiKSkgewotICAgIAkgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fUkVBRF9DT01NSVRURUQ7Ci0gICAgCX0gZWxzZSBpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInJlcGVhdGFibGUtcmVhZCIpKSB7Ci0gICAgCSAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9SRVBFQVRBQkxFX1JFQUQ7Ci0gICAgCX0gZWxzZSBpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInNlcmlhbGl6YWJsZSIpKSB7Ci0gICAgCSAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9TRVJJQUxJWkFCTEU7Ci0gICAgCX0gZWxzZSB7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkludmFsaWQgdHJhbnNhY3Rpb24gaXNvbGF0aW9uOyB0aGUgdHJhbnNhY3Rpb24gIgotICAgIAkgICAgICAgICsgImlzb2xhdGlvbiBsZXZlbCBjYW4gYmUgZW1wdHkgb3IgYW55IG9mIHRoZSBmb2xsb3dpbmc6ICIKLSAgICAJICAgICAgICAgICAgKyAicmVhZC11bmNvbW1pdHRlZCwgcmVhZC1jb21taXR0ZWQsIHJlcGVhdGFibGUtcmVhZCwgc2VyaWFsaXphYmxlIik7Ci0gICAgCX0KKyAgICAgICAgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJyZWFkLXVuY29tbWl0dGVkIikpIHsKKyAgICAgICAgICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1JFQURfVU5DT01NSVRURUQ7CisgICAgICAgIH0gZWxzZSBpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInJlYWQtY29tbWl0dGVkIikpIHsKKyAgICAgICAgICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1JFQURfQ09NTUlUVEVEOworICAgICAgICB9IGVsc2UgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJyZXBlYXRhYmxlLXJlYWQiKSkgeworICAgICAgICAgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fUkVQRUFUQUJMRV9SRUFEOworICAgICAgICB9IGVsc2UgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJzZXJpYWxpemFibGUiKSkgeworICAgICAgICAgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fU0VSSUFMSVpBQkxFOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJJbnZhbGlkIHRyYW5zYWN0aW9uIGlzb2xhdGlvbjsgdGhlIHRyYW5zYWN0aW9uICIKKyAgICAgICAgICAgICAgICArICJpc29sYXRpb24gbGV2ZWwgY2FuIGJlIGVtcHR5IG9yIGFueSBvZiB0aGUgZm9sbG93aW5nOiAiCisgICAgICAgICAgICAgICAgICAgICsgInJlYWQtdW5jb21taXR0ZWQsIHJlYWQtY29tbWl0dGVkLCByZXBlYXRhYmxlLXJlYWQsIHNlcmlhbGl6YWJsZSIpOworICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0IHRoZSBsb2cgd3JpdGVyIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jb3V0CTxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgotICAgICAqIEBzZWUJPGNvZGU+Z2V0TG9nV3JpdGVyPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBvdXQgICAgPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogQHNlZSAgICA8Y29kZT5nZXRMb2dXcml0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TG9nV3JpdGVyKGphdmEuaW8uUHJpbnRXcml0ZXIgb3V0KSB7CiAgICAgICAgIGxvZ1dyaXRlciA9IG91dDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGFzc29jaWF0ZWQgPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBKYXZhQmVhbi4KICAgICAgKgotICAgICAqIEBwYXJhbQlyYQk8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzIAotICAgICAqCQkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEBzZWUJPGNvZGU+Z2V0UmVzb3VyY2VBZGFwdGVyPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICByYSAgICA8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzCisgICAgICogICAgICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlCisgICAgICogQHNlZSAgICA8Y29kZT5nZXRSZXNvdXJjZUFkYXB0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0UmVzb3VyY2VBZGFwdGVyKGpha2FydGEucmVzb3VyY2Uuc3BpLlJlc291cmNlQWRhcHRlciByYSkgewotICAgICAgICB0aGlzLnJhID0gcmE7ICAgCisgICAgICAgIHRoaXMucmEgPSByYTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB1c2VyIG5hbWUKICAgICAgKgotICAgICAqIEBwYXJhbQl1c2VyCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdXNlciAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0VXNlcihTdHJpbmcgdXNlcikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5VU0VSTkFNRSwgdXNlcik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgdXNlciBuYW1lCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXVzZXIKKyAgICAgKiBAcmV0dXJuICAgIHVzZXIKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFVzZXIoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5VU0VSTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdXNlciBuYW1lCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdXNlcgk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHVzZXIgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHVzZXIoU3RyaW5nIHVzZXIpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVVNFUk5BTUUsIHVzZXIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHVzZXIgbmFtZQogICAgICAqCi0gICAgICogQHJldHVybgl1c2VyCisgICAgICogQHJldHVybiAgICB1c2VyCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXR1c2VyKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVVNFUk5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHBhc3N3b3JkCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcGFzc3dkCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcGFzc3dkICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRQYXNzd29yZChTdHJpbmcgcGFzc3dkKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBBU1NXT1JELCBwYXNzd2QpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHBhc3N3b3JkCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXBhc3N3ZAorICAgICAqIEByZXR1cm4gICAgcGFzc3dkCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRQYXNzd29yZCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBBU1NXT1JEKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBwYXNzd29yZAogICAgICAqCi0gICAgICogQHBhcmFtCXBhc3N3ZAk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHBhc3N3ZCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0cGFzc3dvcmQoU3RyaW5nIHBhc3N3ZCkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5QQVNTV09SRCwgcGFzc3dkKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBwYXNzd29yZAogICAgICAqCi0gICAgICogQHJldHVybglwYXNzd2QKKyAgICAgKiBAcmV0dXJuICAgIHBhc3N3ZAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0cGFzc3dvcmQoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QQVNTV09SRCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgZGF0YSBzb3VyY2UKICAgICAgKgotICAgICAqIEBwYXJhbQljbGFzc05hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBjbGFzc05hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldENsYXNzTmFtZShTdHJpbmcgY2xhc3NOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNMQVNTTkFNRSwgY2xhc3NOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBkYXRhIHNvdXJjZQogICAgICAqCi0gICAgICogQHJldHVybgljbGFzc05hbWUKKyAgICAgKiBAcmV0dXJuICAgIGNsYXNzTmFtZQogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q2xhc3NOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ0xBU1NOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBkYXRhIHNvdXJjZQogICAgICAqCi0gICAgICogQHBhcmFtCWNsYXNzTmFtZQk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGNsYXNzTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Y2xhc3NOYW1lKFN0cmluZyBjbGFzc05hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ0xBU1NOQU1FLCBjbGFzc05hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGRhdGEgc291cmNlCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWNsYXNzTmFtZQorICAgICAqIEByZXR1cm4gICAgY2xhc3NOYW1lCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRjbGFzc05hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DTEFTU05BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgaWYgY29ubmVjdGlvbiB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkIG9yIG5vdAogICAgICAqCi0gICAgICogQHBhcmFtCWNvblZsZFJlcQk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGNvblZsZFJlcSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Q29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZChTdHJpbmcgY29uVmxkUmVxKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQsIGNvblZsZFJlcSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBpZiBjb25uZWN0aW9uIHZhbGlkYXRpb24gaXMgcmVxdWlyZWQgb3Igbm90CiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWNvbm5lY3Rpb24gdmFsaWRhdGlvbiByZXF1aXJlbWVudAorICAgICAqIEByZXR1cm4gICAgY29ubmVjdGlvbiB2YWxpZGF0aW9uIHJlcXVpcmVtZW50CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRDb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ09OTkVDVElPTlZBTElEQVRJT05SRVFVSVJFRCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyBpZiBjb25uZWN0aW9uIHZhbGlkYXRpb24gaXMgcmVxdWlyZWQgb3Igbm90CiAgICAgICoKLSAgICAgKiBAcGFyYW0JY29uVmxkUmVxCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgY29uVmxkUmVxICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRjb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkKFN0cmluZyBjb25WbGRSZXEpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ09OTkVDVElPTlZBTElEQVRJT05SRVFVSVJFRCwgY29uVmxkUmVxKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIGlmIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiBpcyByZXF1aXJlZCBvciBub3QKICAgICAgKgotICAgICAqIEByZXR1cm4JY29ubmVjdGlvbiB2YWxpZGF0aW9uIHJlcXVpcmVtZW50CisgICAgICogQHJldHVybiAgICBjb25uZWN0aW9uIHZhbGlkYXRpb24gcmVxdWlyZW1lbnQKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGNvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVEKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB2YWxpZGF0aW9uIG1ldGhvZCByZXF1aXJlZAogICAgICAqCi0gICAgICogQHBhcmFtCXZhbGlkYXRpb25NZXRob2QJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB2YWxpZGF0aW9uTWV0aG9kICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRWYWxpZGF0aW9uTWV0aG9kKFN0cmluZyB2YWxpZGF0aW9uTWV0aG9kKSB7CiAgICAgICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OTUVUSE9ELCB2YWxpZGF0aW9uTWV0aG9kKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSBjb25uZWN0aW9uIHZhbGlkYXRpb24gbWV0aG9kIHR5cGUKICAgICAgKgotICAgICAqIEByZXR1cm4JdmFsaWRhdGlvbiBtZXRob2QKKyAgICAgKiBAcmV0dXJuICAgIHZhbGlkYXRpb24gbWV0aG9kCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRWYWxpZGF0aW9uTWV0aG9kKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTk1FVEhPRCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdmFsaWRhdGlvbiBtZXRob2QgcmVxdWlyZWQKICAgICAgKgotICAgICAqIEBwYXJhbQl2YWxpZGF0aW9uTWV0aG9kCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdmFsaWRhdGlvbk1ldGhvZCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0dmFsaWRhdGlvbk1ldGhvZChTdHJpbmcgdmFsaWRhdGlvbk1ldGhvZCkgewogICAgICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTk1FVEhPRCwgdmFsaWRhdGlvbk1ldGhvZCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgY29ubmVjdGlvbiB2YWxpZGF0aW9uIG1ldGhvZCB0eXBlCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXZhbGlkYXRpb24gbWV0aG9kCisgICAgICogQHJldHVybiAgICB2YWxpZGF0aW9uIG1ldGhvZAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0dmFsaWRhdGlvbk1ldGhvZCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05NRVRIT0QpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHRhYmxlIGNoZWNrZWQgZm9yIGR1cmluZyB2YWxpZGF0aW9uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdGFibGUJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB0YWJsZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0VmFsaWRhdGlvblRhYmxlTmFtZShTdHJpbmcgdGFibGUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTlRBQkxFTkFNRSwgdGFibGUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIHRhYmxlIGNoZWNrZWQgZm9yIGR1cmluZyB2YWxpZGF0aW9uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRhYmxlCisgICAgICogQHJldHVybiAgICB0YWJsZQogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VmFsaWRhdGlvblRhYmxlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05UQUJMRU5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHRhYmxlIGNoZWNrZWQgZm9yIGR1cmluZyB2YWxpZGF0aW9uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdGFibGUJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB0YWJsZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0dmFsaWRhdGlvblRhYmxlTmFtZShTdHJpbmcgdGFibGUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTlRBQkxFTkFNRSwgdGFibGUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIHRhYmxlIGNoZWNrZWQgZm9yIGR1cmluZyB2YWxpZGF0aW9uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRhYmxlCisgICAgICogQHJldHVybiAgICB0YWJsZQogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0dmFsaWRhdGlvblRhYmxlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05UQUJMRU5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqCi0gICAgICogQHBhcmFtCXRybklzb2xhdGlvbgk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHRybklzb2xhdGlvbiAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oU3RyaW5nIHRybklzb2xhdGlvbikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTiwgdHJuSXNvbGF0aW9uKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKgotICAgICAqIEByZXR1cm4JdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCisgICAgICogQHJldHVybiAgICB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqCi0gICAgICogQHBhcmFtCXRybklzb2xhdGlvbgk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHRybklzb2xhdGlvbiAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0dHJhbnNhY3Rpb25Jc29sYXRpb24oU3RyaW5nIHRybklzb2xhdGlvbikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTiwgdHJuSXNvbGF0aW9uKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKgotICAgICAqIEByZXR1cm4JdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCisgICAgICogQHJldHVybiAgICB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHRyYW5zYWN0aW9uSXNvbGF0aW9uKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgaWYgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbCBpcyB0byBiZSBndWFyYW50ZWVkCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZ3VhcmFudGVlSXNvbGF0aW9uCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZ3VhcmFudGVlSXNvbGF0aW9uICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRHdWFyYW50ZWVJc29sYXRpb25MZXZlbChTdHJpbmcgZ3VhcmFudGVlSXNvbGF0aW9uKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkdVQVJBTlRFRUlTT0xBVElPTkxFVkVMLCBndWFyYW50ZWVJc29sYXRpb24pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqCi0gICAgICogQHJldHVybglpc29sYXRpb24gbGV2ZWwgZ3VhcmFudGVlCisgICAgICogQHJldHVybiAgICBpc29sYXRpb24gbGV2ZWwgZ3VhcmFudGVlCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRHdWFyYW50ZWVJc29sYXRpb25MZXZlbCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkdVQVJBTlRFRUlTT0xBVElPTkxFVkVMKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIGlmIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwgaXMgdG8gYmUgZ3VhcmFudGVlZAogICAgICAqCi0gICAgICogQHBhcmFtCWd1YXJhbnRlZUlzb2xhdGlvbgk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGd1YXJhbnRlZUlzb2xhdGlvbiAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Z3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwoU3RyaW5nIGd1YXJhbnRlZUlzb2xhdGlvbikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5HVUFSQU5URUVJU09MQVRJT05MRVZFTCwgZ3VhcmFudGVlSXNvbGF0aW9uKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKICAgICAgKgotICAgICAqIEByZXR1cm4JaXNvbGF0aW9uIGxldmVsIGd1YXJhbnRlZQorICAgICAqIEByZXR1cm4gICAgaXNvbGF0aW9uIGxldmVsIGd1YXJhbnRlZQogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Z3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5HVUFSQU5URUVJU09MQVRJT05MRVZFTCk7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvUmVzb3VyY2VBZGFwdGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvUmVzb3VyY2VBZGFwdGVyLmphdmEKaW5kZXggZTYwMzM4Zi4uYzVhZGE0NiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L1Jlc291cmNlQWRhcHRlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9SZXNvdXJjZUFkYXB0ZXIuamF2YQpAQCAtMjYsOCArMjYsOCBAQAogLyoqCiAgKiA8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDgvMDUKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA4LzA1CisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiBwdWJsaWMgY2xhc3MgUmVzb3VyY2VBZGFwdGVyIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuUmVzb3VyY2VBZGFwdGVyIHsKIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFZFUlNJT04gPSAyOwpAQCAtMzcsMzkgKzM3LDM5IEBACiAgICAgICogRW1wdHkgbWV0aG9kIGltcGxlbWVudGF0aW9uIGZvciBlbmRwb2ludEFjdGl2YXRpb24KICAgICAgKiB3aGljaCBqdXN0IHRocm93cyA8Y29kZT5Ob3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+CiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWVmCTxjb2RlPk1lc3NhZ2VFbmRwb2ludEZhY3Rvcnk8L2NvZGU+Ci0gICAgICogQHBhcmFtCWFzCTxjb2RlPkFjdGl2YXRpb25TcGVjPC9jb2RlPgotICAgICAqIEB0aHJvd3MJPGNvZGU+Tm90U3VwcG9ydGVkRXhjZXB0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBtZWYgICAgPGNvZGU+TWVzc2FnZUVuZHBvaW50RmFjdG9yeTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgYXMgICAgPGNvZGU+QWN0aXZhdGlvblNwZWM8L2NvZGU+CisgICAgICogQHRocm93cyAgICA8Y29kZT5Ob3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZW5kcG9pbnRBY3RpdmF0aW9uKE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgbWVmLCBBY3RpdmF0aW9uU3BlYyBhcykgdGhyb3dzIE5vdFN1cHBvcnRlZEV4Y2VwdGlvbiB7CiAgICAgICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIlRoaXMgbWV0aG9kIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgSkRCQyBjb25uZWN0b3IiKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBFbXB0eSBtZXRob2QgaW1wbGVtZW50YXRpb24gZm9yIGVuZHBvaW50RGVhY3RpdmF0aW9uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWVmCTxjb2RlPk1lc3NhZ2VFbmRwb2ludEZhY3Rvcnk8L2NvZGU+Ci0gICAgICogQHBhcmFtCWFzCTxjb2RlPkFjdGl2YXRpb25TcGVjPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBtZWYgICAgPGNvZGU+TWVzc2FnZUVuZHBvaW50RmFjdG9yeTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgYXMgICAgPGNvZGU+QWN0aXZhdGlvblNwZWM8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZW5kcG9pbnREZWFjdGl2YXRpb24oTWVzc2FnZUVuZHBvaW50RmFjdG9yeSBtZWYsIEFjdGl2YXRpb25TcGVjIGFzKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogRW1wdHkgbWV0aG9kIGltcGxlbWVudGF0aW9uIGZvciBnZXRYQVJlc291cmNlcwogICAgICAqIHdoaWNoIGp1c3QgdGhyb3dzIDxjb2RlPk5vdFN1cHBvcnRlZEV4Y2VwdGlvbjwvY29kZT4KICAgICAgKgotICAgICAqIEBwYXJhbQlzcGVjcwk8Y29kZT5BY3RpdmF0aW9uU3BlYzwvY29kZT4gYXJyYXkKLSAgICAgKiBAdGhyb3dzCTxjb2RlPk5vdFN1cHBvcnRlZEV4Y2VwdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgc3BlY3MgICAgPGNvZGU+QWN0aXZhdGlvblNwZWM8L2NvZGU+IGFycmF5CisgICAgICogQHRocm93cyAgICA8Y29kZT5Ob3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFhBUmVzb3VyY2VbXSBnZXRYQVJlc291cmNlcyhBY3RpdmF0aW9uU3BlY1tdIHNwZWNzKSB0aHJvd3MgTm90U3VwcG9ydGVkRXhjZXB0aW9uIHsKICAgICAgICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiVGhpcyBtZXRob2QgaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBKREJDIGNvbm5lY3RvciIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEVtcHR5IGltcGxlbWVudGF0aW9uIG9mIHN0YXJ0IG1ldGhvZAogICAgICAqCi0gICAgICogQHBhcmFtCWN0eAk8Y29kZT5Cb290c3RyYXBDb250ZXh0PC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBjdHggICAgPGNvZGU+Qm9vdHN0cmFwQ29udGV4dDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzdGFydChCb290c3RyYXBDb250ZXh0IGN0eCkgdGhyb3dzIFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uIHsKIC8qCkBAIC03NywxNiArNzcsMTYgQEAKIAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc291cmNlIEFkYXB0ZXIgaXMgc3RhcnRpbmcgd2l0aCBjb25maWd1cmF0aW9uIDoiICsgcmFQcm9wKTsKICAgICAgICAgaWYgKHJhUHJvcCA9PSBudWxsIHx8ICFyYVByb3AuZXF1YWxzKCJWQUxJRCIpKSB7Ci0JICAgIHRocm93IG5ldyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbigiUmVzb3VyY2UgYWRhcHRlciBjYW5ub3Qgc3RhcnQuIEl0IGlzIGNvbmZpZ3VyZWQgYXMgOiAiICsgcmFQcm9wKTsKLQl9IAorICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VBZGFwdGVySW50ZXJuYWxFeGNlcHRpb24oIlJlc291cmNlIGFkYXB0ZXIgY2Fubm90IHN0YXJ0LiBJdCBpcyBjb25maWd1cmVkIGFzIDogIiArIHJhUHJvcCk7CisgICAgfQogKi8KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBFbXB0eSBpbXBsZW1lbnRhdGlvbiBvZiBzdG9wIG1ldGhvZAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHN0b3AoKSB7Ci0gICAgCisKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRSQVByb3BlcnR5KFN0cmluZyBzKSB7CkBAIC05Niw1ICs5Niw1IEBACiAgICAgcHVibGljIFN0cmluZyBnZXRSQVByb3BlcnR5KCkgewogICAgICAgICByZXR1cm4gcmFQcm9wOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9idWlsZC54bWwKaW5kZXggNWUxNGQ0NC4uZmYwZjAyYiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvYnVpbGQueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxwcm9qZWN0IG5hbWU9ImpkYmNfY29ubmVjdG9yIiBiYXNlZGlyPSIke2dqYy5ob21lfSIgZGVmYXVsdD0iYnVpbGQiPgogICA8cHJvcGVydHkgbmFtZT0icGtnLmRpciIgdmFsdWU9ImNvbS9zdW4vZ2pjL3NwaSIvPgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImNsZWFuIj4KICAgICA8YW50IGFudGZpbGU9ImJ1aWxkLnhtbCIgZGlyPSIke2dqYy5ob21lfS9iaW4iIHRhcmdldD0iY2xlYW4iLz4KICAgPC90YXJnZXQ+CkBAIC0yOSw1NSArMjksNTUgQEAKICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlMTQiPgotICAgIAkKLSAgICAJPG1rZGlyIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ii8+Ci0gICAgCQotCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L2pkYmMuamFyIiBiYXNlZGlyPSIke2NsYXNzLmRpcn0iCisKKyAgICAgICAgPG1rZGlyIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ii8+CisKKyAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9qZGJjLmphciIgYmFzZWRpcj0iJHtjbGFzcy5kaXJ9IgogICAgICAgICBpbmNsdWRlcz0iJHtwa2cuZGlyfS8qKi8qLCBjb20vc3VuL2dqYy91dGlsLyoqLyosIGNvbS9zdW4vZ2pjL2NvbW1vbi8qKi8qIiBleGNsdWRlcz0iY29tL3N1bi9namMvY2NpLyoqLyosY29tL3N1bi9namMvc3BpLzEuNC8qKi8qIi8+Ci0gICAgICAgIAorCiAgICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fY3AucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgotICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS1jcC54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgkKKyAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEtY3AueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4KICAgICAgICAgPC9jb3B5PgotICAgCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fY3AucmFyIiB1cGRhdGU9InllcyI+Ci0gICAJCTxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KLSAgIAkJCTxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgotICAgCQk8L21ldGFpbmY+Ci0gICAJPC9qYXI+Ci0gICAJCi0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX194YS5yYXIiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIgaW5jbHVkZXM9ImpkYmMuamFyIi8+Ci0gICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLXhhLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CQorICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fY3AucmFyIiB1cGRhdGU9InllcyI+CisgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KKyAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgorICAgICAgICAgICA8L21ldGFpbmY+CisgICAgICAgPC9qYXI+CisKKyAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX3hhLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KKyAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEteGEueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4KICAgICAgICAgPC9jb3B5PgotICAgCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19feGEucmFyIiB1cGRhdGU9InllcyI+Ci0gICAJCTxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KLSAgIAkJCTxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgotICAgCQk8L21ldGFpbmY+Ci0gICAJPC9qYXI+Ci0gICAJCi0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kbS5yYXIiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIgaW5jbHVkZXM9ImpkYmMuamFyIi8+Ci0gICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLWRtLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CQorICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19feGEucmFyIiB1cGRhdGU9InllcyI+CisgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KKyAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgorICAgICAgICAgICA8L21ldGFpbmY+CisgICAgICAgPC9qYXI+CisKKyAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RtLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KKyAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEtZG0ueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4KICAgICAgICAgPC9jb3B5PgotICAgCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZG0ucmFyIiB1cGRhdGU9InllcyI+Ci0gICAJCTxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KLSAgIAkJCTxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgotICAgCQk8L21ldGFpbmY+Ci0gICAJPC9qYXI+Ci0gICAJCi0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kcy5yYXIiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIgaW5jbHVkZXM9ImpkYmMuamFyIi8+Ci0gICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLWRzLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CQorICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZG0ucmFyIiB1cGRhdGU9InllcyI+CisgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KKyAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgorICAgICAgICAgICA8L21ldGFpbmY+CisgICAgICAgPC9qYXI+CisKKyAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RzLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KKyAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEtZHMueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4KICAgICAgICAgPC9jb3B5PgotICAgCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZHMucmFyIiB1cGRhdGU9InllcyI+Ci0gICAJCTxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KLSAgIAkJCTxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgotICAgCQk8L21ldGFpbmY+Ci0gICAJPC9qYXI+Ci0gICAJCi0gICAJPGRlbGV0ZSBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3QvY29tIi8+Ci0gICAJPGRlbGV0ZSBmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvamRiYy5qYXIiLz4KLSAgIAk8ZGVsZXRlIGZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiLz4KLSAgIAkKKyAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RzLnJhciIgdXBkYXRlPSJ5ZXMiPgorICAgICAgICAgICA8bWV0YWluZiBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSI+CisgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KKyAgICAgICAgICAgPC9tZXRhaW5mPgorICAgICAgIDwvamFyPgorCisgICAgICAgPGRlbGV0ZSBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3QvY29tIi8+CisgICAgICAgPGRlbGV0ZSBmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvamRiYy5qYXIiLz4KKyAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiLz4KKwogICA8L3RhcmdldD4KIAogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkMTQiIGRlcGVuZHM9ImNvbXBpbGUxNCwgcGFja2FnZTE0Ii8+CiAgICAgPHRhcmdldCBuYW1lPSJidWlsZDEzIi8+Ci0JPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iYnVpbGQxNCwgYnVpbGQxMyIvPgorICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImJ1aWxkMTQsIGJ1aWxkMTMiLz4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9yYS1kcy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvcmEtZHMueG1sCmluZGV4IDYwZTFlNGUuLjY1ZThmYjUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9yYS1kcy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L3JhLWRzLnhtbApAQCAtMjIsNjkgKzIyLDY5IEBACiAgICAgICAgICAgIHZlcnNpb249IjEuNSI+CiAKICAgICA8IS0tIFRoZXJlIGNhbiBiZSBhbnkgbnVtYmVyIG9mICJkZXNjcmlwdGlvbiIgZWxlbWVudHMgaW5jbHVkaW5nIDAgLS0+Ci0gICAgPCEtLSBUaGlzIGZpZWxkIGNhbiBiZSBvcHRpb25hbGx5IHVzZWQgYnkgdGhlIGRyaXZlciB2ZW5kb3IgdG8gcHJvdmlkZSBhIAorICAgIDwhLS0gVGhpcyBmaWVsZCBjYW4gYmUgb3B0aW9uYWxseSB1c2VkIGJ5IHRoZSBkcml2ZXIgdmVuZG9yIHRvIHByb3ZpZGUgYQogICAgICAgICAgZGVzY3JpcHRpb24gZm9yIHRoZSByZXNvdXJjZSBhZGFwdGVyLgogICAgIC0tPgogICAgIDxkZXNjcmlwdGlvbj5SZXNvdXJjZSBhZGFwdGVyIHdyYXBwaW5nIERhdGFzb3VyY2UgaW1wbGVtZW50YXRpb24gb2YgZHJpdmVyPC9kZXNjcmlwdGlvbj4KLSAgICAKKwogICAgIDwhLS0gVGhlcmUgY2FuIGJlIGFueSBudW1iZXIgb2YgImRpc3BsYXktbmFtZSIgZWxlbWVudHMgaW5jbHVkaW5nIDAgLS0+Ci0gICAgPCEtLSBUaGUgZmllbGQgY2FuIGJlIG9wdGlvbmFsbHkgdXNlZCBieSB0aGUgZHJpdmVyIHZlbmRvciB0byBwcm92aWRlIGEgbmFtZSB0aGF0IAorICAgIDwhLS0gVGhlIGZpZWxkIGNhbiBiZSBvcHRpb25hbGx5IHVzZWQgYnkgdGhlIGRyaXZlciB2ZW5kb3IgdG8gcHJvdmlkZSBhIG5hbWUgdGhhdAogICAgICAgICAgaXMgaW50ZW5kZWQgdG8gYmUgZGlzcGxheWVkIGJ5IHRvb2xzLgogICAgIC0tPgogICAgIDxkaXNwbGF5LW5hbWU+RGF0YVNvdXJjZSBSZXNvdXJjZSBBZGFwdGVyPC9kaXNwbGF5LW5hbWU+Ci0gICAgCisKICAgICA8IS0tIFRoZXJlIGNhbiBiZSBhbnkgbnVtYmVyIG9mICJpY29uIiBlbGVtZW50cyBpbmNsdWRpbmcgMCAtLT4KICAgICA8IS0tIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZS4KICAgICAgICAgPGljb24+Ci0gICAgICAgICAgICBUaGlzICJzbWFsbC1pY29uIiBlbGVtZW50IGNhbiBvY2N1ciBhdG1vc3Qgb25jZS4gVGhpcyBzaG91bGQgc3BlY2lmeSB0aGUgCi0gICAgICAgICAgICBhYnNvbHV0ZSBvciB0aGUgcmVsYXRpdmUgcGF0aCBuYW1lIG9mIGEgZmlsZSBjb250YWluaW5nIGEgc21hbGwgKDE2IHggMTYpIAorICAgICAgICAgICAgVGhpcyAic21hbGwtaWNvbiIgZWxlbWVudCBjYW4gb2NjdXIgYXRtb3N0IG9uY2UuIFRoaXMgc2hvdWxkIHNwZWNpZnkgdGhlCisgICAgICAgICAgICBhYnNvbHV0ZSBvciB0aGUgcmVsYXRpdmUgcGF0aCBuYW1lIG9mIGEgZmlsZSBjb250YWluaW5nIGEgc21hbGwgKDE2IHggMTYpCiAgICAgICAgICAgICBpY29uIC0gSlBFRyBvciBHSUYgaW1hZ2UuIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZS4KICAgICAgICAgICAgIDxzbWFsbC1pY29uPnNtYWxsaWNvbi5qcGc8L3NtYWxsLWljb24+Ci0gICAgICAgIAotICAgICAgICAgICAgVGhpcyAibGFyZ2UtaWNvbiIgZWxlbWVudCBjYW4gb2NjdXIgYXRtb3N0IG9uY2UuIFRoaXMgc2hvdWxkIHNwZWNpZnkgdGhlIAotICAgICAgICAgICAgYWJzb2x1dGUgb3IgdGhlIHJlbGF0aXZlIHBhdGggbmFtZSBvZiBhIGZpbGUgY29udGFpbmluZyBhIHNtYWxsICgzMiB4IDMyKSAKKworICAgICAgICAgICAgVGhpcyAibGFyZ2UtaWNvbiIgZWxlbWVudCBjYW4gb2NjdXIgYXRtb3N0IG9uY2UuIFRoaXMgc2hvdWxkIHNwZWNpZnkgdGhlCisgICAgICAgICAgICBhYnNvbHV0ZSBvciB0aGUgcmVsYXRpdmUgcGF0aCBuYW1lIG9mIGEgZmlsZSBjb250YWluaW5nIGEgc21hbGwgKDMyIHggMzIpCiAgICAgICAgICAgICBpY29uIC0gSlBFRyBvciBHSUYgaW1hZ2UuIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZS4KLSAgICAgICAgICAgIDxsYXJnZS1pY29uPmxhcmdlaWNvbi5qcGc8L2xhcmdlLWljb24+ICAgCisgICAgICAgICAgICA8bGFyZ2UtaWNvbj5sYXJnZWljb24uanBnPC9sYXJnZS1pY29uPgogICAgICAgICA8L2ljb24+CiAgICAgLS0+CiAgICAgPGljb24+CiAgICAgICAgIDxzbWFsbC1pY29uPjwvc21hbGwtaWNvbj4KLSAgICAgICAgPGxhcmdlLWljb24+PC9sYXJnZS1pY29uPiAgIAorICAgICAgICA8bGFyZ2UtaWNvbj48L2xhcmdlLWljb24+CiAgICAgPC9pY29uPgotICAgIAorCiAgICAgPCEtLSBUaGUgInZlbmRvci1uYW1lIiBlbGVtZW50IHNob3VsZCBvY2N1ciBleGFjdGx5IG9uY2UuIC0tPgogICAgIDwhLS0gVGhpcyBzaG91bGQgc3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUgZHJpdmVyIHZlbmRvci4gVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlLgogICAgICAgICA8dmVuZG9yLW5hbWU+WFlaIElOQy48L3ZlbmRvci1uYW1lPgogICAgIC0tPgogICAgIDx2ZW5kb3ItbmFtZT5TdW4gTWljcm9zeXN0ZW1zPC92ZW5kb3ItbmFtZT4KLSAgICAKKwogICAgIDwhLS0gVGhlICJlaXMtdHlwZSIgZWxlbWVudCBzaG91bGQgb2NjdXIgZXhhY3RseSBvbmNlLiAtLT4KLSAgICA8IS0tIFRoaXMgc2hvdWxkIHNwZWNpZnkgdGhlIGRhdGFiYXNlLCBmb3IgZXhhbXBsZSB0aGUgcHJvZHVjdCBuYW1lIG9mIAorICAgIDwhLS0gVGhpcyBzaG91bGQgc3BlY2lmeSB0aGUgZGF0YWJhc2UsIGZvciBleGFtcGxlIHRoZSBwcm9kdWN0IG5hbWUgb2YKICAgICAgICAgIHRoZSBkYXRhYmFzZSBpbmRlcGVuZGVudCBvZiBhbnkgdmVyc2lvbiBpbmZvcm1hdGlvbi4gVGhlIGZvbGxvd2luZwogICAgICAgICAgaXMgYW4gZXhhbXBsZS4KICAgICAgICAgPGVpcy10eXBlPlhZWjwvZWlzLXR5cGU+CiAgICAgLS0+CiAgICAgPGVpcy10eXBlPkRhdGFiYXNlPC9laXMtdHlwZT4KLSAgICAKKwogICAgIDwhLS0gVGhlICJyZXNvdXJjZWFkYXB0ZXItdmVyc2lvbiIgZWxlbWVudCBzaG91bGQgb2NjdXIgZXhhY3RseSBvbmNlLiAtLT4KLSAgICA8IS0tIFRoaXMgc3BlY2lmaWVzIGEgc3RyaW5nIGJhc2VkIHZlcnNpb24gb2YgdGhlIHJlc291cmNlIGFkYXB0ZXIgZnJvbSAKKyAgICA8IS0tIFRoaXMgc3BlY2lmaWVzIGEgc3RyaW5nIGJhc2VkIHZlcnNpb24gb2YgdGhlIHJlc291cmNlIGFkYXB0ZXIgZnJvbQogICAgICAgICAgdGhlIGRyaXZlciB2ZW5kb3IuIFRoZSBkZWZhdWx0IGlzIGJlaW5nIHNldCBhcyAxLjAuIFRoZSBkcml2ZXIKICAgICAgICAgIHZlbmRvciBjYW4gY2hhbmdlIGl0IGFzIHJlcXVpcmVkLgogICAgIC0tPgogICAgIDxyZXNvdXJjZWFkYXB0ZXItdmVyc2lvbj4xLjA8L3Jlc291cmNlYWRhcHRlci12ZXJzaW9uPgotICAgIAorCiAgICAgPCEtLSBUaGlzICJsaWNlbnNlIiBlbGVtZW50IGNhbiBvY2N1ciBhdG1vc3Qgb25jZSAtLT4KICAgICA8IS0tIFRoaXMgc3BlY2lmaWVzIGxpY2Vuc2luZyByZXF1aXJlbWVudHMgZm9yIHRoZSByZXNvdXJjZSBhZGFwdGVyIG1vZHVsZS4KICAgICAgICAgIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZS4KICAgICAgICAgPGxpY2Vuc2U+CiAgICAgICAgICAgICBUaGVyZSBjYW4gYmUgYW55IG51bWJlciBvZiAiZGVzY3JpcHRpb24iIGVsZW1lbnRzIGluY2x1ZGluZyAwLgogICAgICAgICAgICAgPGRlc2NyaXB0aW9uPgotICAgICAgICAgICAgICAgIFRoaXMgZmllbGQgY2FuIGJlIG9wdGlvbmFsbHkgdXNlZCBieSB0aGUgZHJpdmVyIHZlbmRvciB0byAKLSAgICAgICAgICAgICAgICBwcm92aWRlIGEgZGVzY3JpcHRpb24gZm9yIHRoZSBsaWNlbnNpbmcgcmVxdWlyZW1lbnRzIG9mIHRoZSAKLSAgICAgICAgICAgICAgICByZXNvdXJjZSBhZGFwdGVyIGxpa2UgZHVyYXRpb24gb2YgbGljZW5zZSwgbnVtYmVyb2YgY29ubmVjdGlvbiAKKyAgICAgICAgICAgICAgICBUaGlzIGZpZWxkIGNhbiBiZSBvcHRpb25hbGx5IHVzZWQgYnkgdGhlIGRyaXZlciB2ZW5kb3IgdG8KKyAgICAgICAgICAgICAgICBwcm92aWRlIGEgZGVzY3JpcHRpb24gZm9yIHRoZSBsaWNlbnNpbmcgcmVxdWlyZW1lbnRzIG9mIHRoZQorICAgICAgICAgICAgICAgIHJlc291cmNlIGFkYXB0ZXIgbGlrZSBkdXJhdGlvbiBvZiBsaWNlbnNlLCBudW1iZXJvZiBjb25uZWN0aW9uCiAgICAgICAgICAgICAgICAgcmVzdHJpY3Rpb25zLgogICAgICAgICAgICAgPC9kZXNjcmlwdGlvbj4KLSAgICAgICAgCisKICAgICAgICAgICAgIFRoaXMgc3BlY2lmaWVzIHdoZXRoZXIgYSBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGRlcGxveSBhbmQgdXNlIHRoZSByZXNvdXJjZSBhZGFwdGVyLgogICAgICAgICAgICAgRGVmYXVsdCBpcyBmYWxzZS4KICAgICAgICAgICAgIDxsaWNlbnNlLXJlcXVpcmVkPmZhbHNlPC9saWNlbnNlLXJlcXVpcmVkPgpAQCAtOTMsMjQgKzkzLDI0IEBACiAgICAgPGxpY2Vuc2U+CiAgICAgICAgIDxsaWNlbnNlLXJlcXVpcmVkPmZhbHNlPC9saWNlbnNlLXJlcXVpcmVkPgogICAgIDwvbGljZW5zZT4KLSAgICAKKwogICAgIDxyZXNvdXJjZWFkYXB0ZXI+Ci0gICAgICAgIAotICAgICAgICA8IS0tIAotICAgICAgICAgICAgVGhlICJjb25maWctcHJvcGVydHkiIGVsZW1lbnRzIGNhbiBoYXZlIHplcm8gb3IgbW9yZSAiZGVzY3JpcHRpb24iIAorCisgICAgICAgIDwhLS0KKyAgICAgICAgICAgIFRoZSAiY29uZmlnLXByb3BlcnR5IiBlbGVtZW50cyBjYW4gaGF2ZSB6ZXJvIG9yIG1vcmUgImRlc2NyaXB0aW9uIgogICAgICAgICAgICAgZWxlbWVudHMuIFRoZSAiZGVzY3JpcHRpb24iIGVsZW1lbnRzIGFyZSBub3QgYmVpbmcgaW5jbHVkZWQKICAgICAgICAgICAgIGluIHRoZSAiY29uZmlnLXByb3BlcnR5IiBlbGVtZW50cyBiZWxvdy4gVGhlIGRyaXZlciB2ZW5kb3IgY2FuCiAgICAgICAgICAgICBhZGQgdGhlbSBhcyByZXF1aXJlZC4KICAgICAgICAgLS0+Ci0gICAgICAgIAorCiAgICAgICAgIDxyZXNvdXJjZWFkYXB0ZXItY2xhc3M+Y29tLnN1bi5qZGJjcmEuc3BpLlJlc291cmNlQWRhcHRlcjwvcmVzb3VyY2VhZGFwdGVyLWNsYXNzPgotICAgICAgICAKKwogICAgICAgICA8b3V0Ym91bmQtcmVzb3VyY2VhZGFwdGVyPgotICAgICAgICAKKwogICAgICAgICAgICAgPGNvbm5lY3Rpb24tZGVmaW5pdGlvbj4KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIDxtYW5hZ2VkY29ubmVjdGlvbmZhY3RvcnktY2xhc3M+Y29tLnN1bi5qZGJjcmEuc3BpLkRTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9tYW5hZ2VkY29ubmVjdGlvbmZhY3RvcnktY2xhc3M+Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICA8IS0tIFRoZXJlIGNhbiBiZSBhbnkgbnVtYmVyIG9mIHRoZXNlIGVsZW1lbnRzIGluY2x1ZGluZyAwIC0tPgogICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5TZXJ2ZXJOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KQEAgLTEyMiwxMzYgKzEyMiwxMzYgQEAKICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjkwOTI8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VXNlcjwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT5EQlVTRVI8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+UGFzc3dvcmQ8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+REJQQVNTV09SRDwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5EYXRhYmFzZU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+amRiYzpwb2ludGJhc2U6c2VydmVyOi8vbG9jYWxob3N0OjkwOTIvc3FlLXNhbXBsZXMsbmV3PC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4gICAgCisgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkRhdGFTb3VyY2VOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5EZXNjcmlwdGlvbjwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT5PcmFjbGUgdGhpbiBkcml2ZXIgRGF0YXNvdXJjZTwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+TmV0d29ya1Byb3RvY29sPC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5Sb2xlTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+TG9naW5UaW1lT3V0PC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjA8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+RHJpdmVyUHJvcGVydGllczwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+RGVsaW1pdGVyPC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPiM8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+Q2xhc3NOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPmNvbS5wb2ludGJhc2UuamRiYy5qZGJjRGF0YVNvdXJjZTwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgCQk8Y29uZmlnLXByb3BlcnR5PiAgICAKLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkNvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQ8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+ZmFsc2U8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLSAgICAgICAgCTwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAJPGNvbmZpZy1wcm9wZXJ0eT4gICAgCi0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktbmFtZT5WYWxpZGF0aW9uTWV0aG9kPC9jb25maWctcHJvcGVydHktbmFtZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotICAgICAgICAJPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgIAk8Y29uZmlnLXByb3BlcnR5PiAgICAKLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlZhbGlkYXRpb25UYWJsZU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0gICAgICAgIAk8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgCTxjb25maWctcHJvcGVydHk+ICAgIAotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VHJhbnNhY3Rpb25Jc29sYXRpb248L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0gICAgICAgIAk8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgCTxjb25maWctcHJvcGVydHk+ICAgIAotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+R3VhcmFudGVlSXNvbGF0aW9uTGV2ZWw8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0gICAgICAgIAk8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkNvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQ8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+ZmFsc2U8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlZhbGlkYXRpb25NZXRob2Q8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5WYWxpZGF0aW9uVGFibGVOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VHJhbnNhY3Rpb25Jc29sYXRpb248L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5HdWFyYW50ZWVJc29sYXRpb25MZXZlbDwvY29uZmlnLXByb3BlcnR5LW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgorCiAgICAgICAgICAgICAgICAgPGNvbm5lY3Rpb25mYWN0b3J5LWludGVyZmFjZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29ubmVjdGlvbmZhY3RvcnktaW50ZXJmYWNlPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPGNvbm5lY3Rpb25mYWN0b3J5LWltcGwtY2xhc3M+Y29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2U8L2Nvbm5lY3Rpb25mYWN0b3J5LWltcGwtY2xhc3M+Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICA8Y29ubmVjdGlvbi1pbnRlcmZhY2U+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29ubmVjdGlvbi1pbnRlcmZhY2U+Ci0gICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPGNvbm5lY3Rpb24taW1wbC1jbGFzcz5jb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbkhvbGRlcjwvY29ubmVjdGlvbi1pbXBsLWNsYXNzPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICA8L2Nvbm5lY3Rpb24tZGVmaW5pdGlvbj4KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICA8dHJhbnNhY3Rpb24tc3VwcG9ydD5Mb2NhbFRyYW5zYWN0aW9uPC90cmFuc2FjdGlvbi1zdXBwb3J0PgotICAgICAgICAgICAgCisKICAgICAgICAgICAgIDxhdXRoZW50aWNhdGlvbi1tZWNoYW5pc20+CiAgICAgICAgICAgICAgICAgPCEtLSBUaGVyZSBjYW4gYmUgYW55IG51bWJlciBvZiAiZGVzY3JpcHRpb24iIGVsZW1lbnRzIGluY2x1ZGluZyAwIC0tPgogICAgICAgICAgICAgICAgIDwhLS0gTm90IGluY2x1ZGluZyB0aGUgImRlc2NyaXB0aW9uIiBlbGVtZW50IC0tPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPGF1dGhlbnRpY2F0aW9uLW1lY2hhbmlzbS10eXBlPkJhc2ljUGFzc3dvcmQ8L2F1dGhlbnRpY2F0aW9uLW1lY2hhbmlzbS10eXBlPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPGNyZWRlbnRpYWwtaW50ZXJmYWNlPmphdmF4LnJlc291cmNlLnNwaS5zZWN1cml0eS5QYXNzd29yZENyZWRlbnRpYWw8L2NyZWRlbnRpYWwtaW50ZXJmYWNlPgogICAgICAgICAgICAgPC9hdXRoZW50aWNhdGlvbi1tZWNoYW5pc20+Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgPHJlYXV0aGVudGljYXRpb24tc3VwcG9ydD5mYWxzZTwvcmVhdXRoZW50aWNhdGlvbi1zdXBwb3J0PgotICAgICAgICAgICAgCisKICAgICAgICAgPC9vdXRib3VuZC1yZXNvdXJjZWFkYXB0ZXI+Ci0JPGFkbWlub2JqZWN0PgotCSAgICAgICA8YWRtaW5vYmplY3QtaW50ZXJmYWNlPmNvbS5zdW4uamRiY3JhLnNwaS5KZGJjU2V0dXBBZG1pbjwvYWRtaW5vYmplY3QtaW50ZXJmYWNlPgotCSAgICAgICA8YWRtaW5vYmplY3QtY2xhc3M+Y29tLnN1bi5qZGJjcmEuc3BpLkpkYmNTZXR1cEFkbWluSW1wbDwvYWRtaW5vYmplY3QtY2xhc3M+Ci0JICAgICAgIDxjb25maWctcHJvcGVydHk+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VGFibGVOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0JICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotCSAgICAgICA8Y29uZmlnLXByb3BlcnR5PgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlNjaGVtYU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLQkgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0JICAgICAgIDxjb25maWctcHJvcGVydHk+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+Sm5kaU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLQkgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0JICAgICAgIDxjb25maWctcHJvcGVydHk+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+Tm9PZlJvd3M8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5JbnRlZ2VyPC9jb25maWctcHJvcGVydHktdHlwZT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+MDwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotCSAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICA8YWRtaW5vYmplY3Q+CisgICAgICAgICAgIDxhZG1pbm9iamVjdC1pbnRlcmZhY2U+Y29tLnN1bi5qZGJjcmEuc3BpLkpkYmNTZXR1cEFkbWluPC9hZG1pbm9iamVjdC1pbnRlcmZhY2U+CisgICAgICAgICAgIDxhZG1pbm9iamVjdC1jbGFzcz5jb20uc3VuLmpkYmNyYS5zcGkuSmRiY1NldHVwQWRtaW5JbXBsPC9hZG1pbm9iamVjdC1jbGFzcz4KKyAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5UYWJsZU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+U2NoZW1hTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5KbmRpTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5Ob09mUm93czwvY29uZmlnLXByb3BlcnR5LW5hbWU+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLkludGVnZXI8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT4wPC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgogICAgICAgICA8L2FkbWlub2JqZWN0PgotICAgICAgICAKKwogICAgIDwvcmVzb3VyY2VhZGFwdGVyPgotICAgIAorCiA8L2Nvbm5lY3Rvcj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25NYW5hZ2VyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uTWFuYWdlci5qYXZhCmluZGV4IGIyMTljZDIuLjEyNDgwOWMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25NYW5hZ2VyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvbk1hbmFnZXIuamF2YQpAQCAtMjQsMjYgKzI0LDI2IEBACiAvKioKICAqIENvbm5lY3Rpb25NYW5hZ2VyIGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMzEKLSAqIEBhdXRob3IJQmlub2QgUC5HCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzMxCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRwogICovCi1wdWJsaWMgY2xhc3MgQ29ubmVjdGlvbk1hbmFnZXIgaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uTWFuYWdlcnsgCitwdWJsaWMgY2xhc3MgQ29ubmVjdGlvbk1hbmFnZXIgaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uTWFuYWdlcnsKIAogICAgIC8qKgogICAgICAqIFJldHVybnMgYSA8Y29kZT5Db25uZWN0aW9uIDwvY29kZT4gb2JqZWN0IHRvIHRoZSA8Y29kZT5Db25uZWN0aW9uRmFjdG9yeTwvY29kZT4KICAgICAgKgotICAgICAqIEBwYXJhbQltY2YJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHBhcmFtCWluZm8JPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHJldHVybglBIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IE9iamVjdC4KLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uIEluIGNhc2Ugb2YgYW4gZXJyb3IgaW4gZ2V0dGluZyB0aGUgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4uCisgICAgICogQHBhcmFtICAgIG1jZiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgaW5mbyAgICA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcmV0dXJuICAgIEEgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gT2JqZWN0LgorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gSW4gY2FzZSBvZiBhbiBlcnJvciBpbiBnZXR0aW5nIHRoZSA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPi4KICAgICAgKi8KICAgICBwdWJsaWMgT2JqZWN0IGFsbG9jYXRlQ29ubmVjdGlvbihNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmLAotICAgIAkJCQkgICAgIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbmZvKSAKLSAgICAJCQkJICAgICB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewotCU1hbmFnZWRDb25uZWN0aW9uIG1jID0gbWNmLmNyZWF0ZU1hbmFnZWRDb25uZWN0aW9uKG51bGwsIGluZm8pOwotCXJldHVybiBtYy5nZXRDb25uZWN0aW9uKG51bGwsIGluZm8pOyAgICAJCQkJICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW5mbykKKyAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24geworICAgIE1hbmFnZWRDb25uZWN0aW9uIG1jID0gbWNmLmNyZWF0ZU1hbmFnZWRDb25uZWN0aW9uKG51bGwsIGluZm8pOworICAgIHJldHVybiBtYy5nZXRDb25uZWN0aW9uKG51bGwsIGluZm8pOwogICAgIH0KLSAgICAKKwogICAgIC8qCiAgICAgICogVGhpcyBjbGFzcyBjb3VsZCBlZmZlY3RpdmVseSBpbXBsZW1lbnQgQ29ubmVjdGlvbiBwb29saW5nIGFsc28uCiAgICAgICogQ291bGQgYmUgZG9uZSBmb3IgRkNTLgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvblJlcXVlc3RJbmZvLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uUmVxdWVzdEluZm8uamF2YQppbmRleCAzOWM3ODc2Li5jNDc3ZmMyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uUmVxdWVzdEluZm8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uUmVxdWVzdEluZm8uamF2YQpAQCAtMTksMTAgKzE5LDEwIEBACiAvKioKICAqIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzMxCi0gKiBAYXV0aG9yCUJpbm9kIFAuRworICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8zMQorICogQGF1dGhvciAgICBCaW5vZCBQLkcKICAqLwotcHVibGljIGNsYXNzIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mb3sgCitwdWJsaWMgY2xhc3MgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZvewogCiAgICAgcHJpdmF0ZSBTdHJpbmcgdXNlcjsKICAgICBwcml2YXRlIFN0cmluZyBwYXNzd29yZDsKQEAgLTMwLDggKzMwLDggQEAKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gb2JqZWN0CiAgICAgICoKLSAgICAgKiBAcGFyYW0JdXNlcglVc2VyIE5hbWUuCi0gICAgICogQHBhcmFtCXBhc3N3b3JkCVBhc3N3b3JkCisgICAgICogQHBhcmFtICAgIHVzZXIgICAgVXNlciBOYW1lLgorICAgICAqIEBwYXJhbSAgICBwYXNzd29yZCAgICBQYXNzd29yZAogICAgICAqLwogICAgIHB1YmxpYyBDb25uZWN0aW9uUmVxdWVzdEluZm8oU3RyaW5nIHVzZXIsIFN0cmluZyBwYXNzd29yZCkgewogICAgICAgICB0aGlzLnVzZXIgPSB1c2VyOwpAQCAtNDEsNyArNDEsNyBAQAogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgdXNlciBuYW1lIG9mIHRoZSBDb25uZWN0aW9uUmVxdWVzdEluZm8uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVVzZXIgbmFtZSBvZiBDb25uZWN0aW9uUmVxdWVzdEluZm8uCisgICAgICogQHJldHVybiAgICBVc2VyIG5hbWUgb2YgQ29ubmVjdGlvblJlcXVlc3RJbmZvLgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VXNlcigpIHsKICAgICAgICAgcmV0dXJuIHVzZXI7CkBAIC01MCw3ICs1MCw3IEBACiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBwYXNzd29yZCBvZiB0aGUgQ29ubmVjdGlvblJlcXVlc3RJbmZvLgogICAgICAqCi0gICAgICogQHJldHVybglQYXNzd29yZCBvZiBDb25uZWN0aW9uUmVxdWVzdEluZm8uCisgICAgICogQHJldHVybiAgICBQYXNzd29yZCBvZiBDb25uZWN0aW9uUmVxdWVzdEluZm8uCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRQYXNzd29yZCgpIHsKICAgICAgICAgcmV0dXJuIHBhc3N3b3JkOwpAQCAtNTksNyArNTksNyBAQAogICAgIC8qKgogICAgICAqIFZlcmlmeSB3aGV0aGVyIHR3byBDb25uZWN0aW9uUmVxdWVzdEluZm9zIGFyZSBlcXVhbC4KICAgICAgKgotICAgICAqIEByZXR1cm4JVHJ1ZSwgaWYgdGhleSBhcmUgZXF1YWwgYW5kIGZhbHNlIG90aGVyd2lzZS4KKyAgICAgKiBAcmV0dXJuICAgIFRydWUsIGlmIHRoZXkgYXJlIGVxdWFsIGFuZCBmYWxzZSBvdGhlcndpc2UuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmopIHsKICAgICAgICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gZmFsc2U7CkBAIC03NSwxOCArNzUsMTggQEAKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIGhhc2hjb2RlIG9mIHRoZSBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWhhc2hDb2RlLgorICAgICAqIEByZXR1cm4gICAgaGFzaENvZGUuCiAgICAgICovCiAgICAgcHVibGljIGludCBoYXNoQ29kZSgpIHsKICAgICAgICAgU3RyaW5nIHJlc3VsdCA9ICIiICsgdXNlciArIHBhc3N3b3JkOwogICAgICAgICByZXR1cm4gcmVzdWx0Lmhhc2hDb2RlKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29tcGFyZXMgdHdvIG9iamVjdHMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbzEJRmlyc3Qgb2JqZWN0LgotICAgICAqIEBwYXJhbQlvMglTZWNvbmQgb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBvMSAgICBGaXJzdCBvYmplY3QuCisgICAgICogQHBhcmFtICAgIG8yICAgIFNlY29uZCBvYmplY3QuCiAgICAgICovCiAgICAgcHJpdmF0ZSBib29sZWFuIGlzRXF1YWwoT2JqZWN0IG8xLCBPYmplY3QgbzIpIHsKICAgICAgICAgaWYgKG8xID09IG51bGwpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCmluZGV4IDQxMWI3M2YuLmQ5ODc0YTAgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQpAQCAtMzEsMzYgKzMxLDM2IEBACiAvKioKICAqIERhdGEgU291cmNlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW1wbGVtZW50YXRpb24gZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8zMAotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMzAKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIAogcHVibGljIGNsYXNzIERTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IGV4dGVuZHMgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IHsKLSAgIAorCiAgICAgcHJpdmF0ZSB0cmFuc2llbnQgamF2YXguc3FsLkRhdGFTb3VyY2UgZGF0YVNvdXJjZU9iajsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIExvZ2dlciBfbG9nZ2VyOwogICAgIHN0YXRpYyB7CiAgICAgICAgIF9sb2dnZXIgPSBMb2dnZXIuZ2V0QW5vbnltb3VzTG9nZ2VyKCk7CiAgICAgfQogICAgIHByaXZhdGUgYm9vbGVhbiBkZWJ1ZyA9IGZhbHNlOwotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIG5ldyBwaHlzaWNhbCBjb25uZWN0aW9uIHRvIHRoZSB1bmRlcmx5aW5nIEVJUyByZXNvdXJjZQogICAgICAqIG1hbmFnZXIuCi0gICAgICogCi0gICAgICogQHBhcmFtCXN1YmplY3QJPGNvZGU+U3ViamVjdDwvY29kZT4gaW5zdGFuY2UgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKLSAgICAgKiBAcGFyYW0JY3hSZXF1ZXN0SW5mbwk8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHdoaWNoIG1heSBiZSBjcmVhdGVkCi0gICAgICogICAgICAgCSAgICAgICAgICAgICAJYXMgYSByZXN1bHQgb2YgdGhlIGludm9jYXRpb24gPGNvZGU+Z2V0Q29ubmVjdGlvbih1c2VyLCBwYXNzd29yZCk8L2NvZGU+Ci0gICAgICogICAgICAgCSAgICAgICAgICAgICAJb24gdGhlIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdAotICAgICAqIEByZXR1cm4JPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBjcmVhdGVkCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBpbnN0YW50aWF0aW5nIHRoZQotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0IHVzZWQgZm9yIHRoZQotICAgICAqICAgICAgIAkJCQljcmVhdGlvbiBvZiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdAotICAgICAqIEB0aHJvd3MJU2VjdXJpdHlFeGNlcHRpb24JaWYgdGhlcmUgaW5vIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0Ci0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAlzYXRpc2Z5aW5nIHRoaXMgcmVxdWVzdCAKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZSAKLSAgICAgKgkJCQkJCXBoeXNpY2FsIGNvbm5lY3Rpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzdWJqZWN0ICAgIDxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogQHBhcmFtICAgIGN4UmVxdWVzdEluZm8gICAgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiB3aGljaCBtYXkgYmUgY3JlYXRlZAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIGEgcmVzdWx0IG9mIHRoZSBpbnZvY2F0aW9uIDxjb2RlPmdldENvbm5lY3Rpb24odXNlciwgcGFzc3dvcmQpPC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIHRoZSA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QgY3JlYXRlZAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gaW5zdGFudGlhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdCB1c2VkIGZvciB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRpb24gb2YgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QKKyAgICAgKiBAdGhyb3dzICAgIFNlY3VyaXR5RXhjZXB0aW9uICAgIGlmIHRoZXJlIGlubyA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F0aXNmeWluZyB0aGlzIHJlcXVlc3QKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgcGh5c2ljYWwgY29ubmVjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBjcmVhdGVNYW5hZ2VkQ29ubmVjdGlvbihqYXZheC5zZWN1cml0eS5hdXRoLlN1YmplY3Qgc3ViamVjdCwKICAgICAgICAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxdWVzdEluZm8pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CkBAIC02OCw1NSArNjgsNTUgQEAKICAgICAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gY3JlYXRlTWFuYWdlZENvbm5lY3Rpb24iKTsKICAgICAgICAgfQogICAgICAgICBQYXNzd29yZENyZWRlbnRpYWwgcGMgPSBTZWN1cml0eVV0aWxzLmdldFBhc3N3b3JkQ3JlZGVudGlhbCh0aGlzLCBzdWJqZWN0LCBjeFJlcXVlc3RJbmZvKTsKLSAgICAgICAgCisKICAgICAgICAgaWYoZGF0YVNvdXJjZU9iaiA9PSBudWxsKSB7CiAgICAgICAgICAgICBpZihkc09iakJ1aWxkZXIgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGRzT2JqQnVpbGRlciA9IG5ldyBEYXRhU291cmNlT2JqZWN0QnVpbGRlcihzcGVjKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZU9iaiA9IChqYXZheC5zcWwuRGF0YVNvdXJjZSkgZHNPYmpCdWlsZGVyLmNvbnN0cnVjdERhdGFTb3VyY2VPYmplY3QoKTsKICAgICAgICAgICAgIH0gY2F0Y2goQ2xhc3NDYXN0RXhjZXB0aW9uIGNjZSkgewotCSAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfY2NlIiwgY2NlKTsKKyAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2NjZSIsIGNjZSk7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGpha2FydGEucmVzb3VyY2UuUmVzb3VyY2VFeGNlcHRpb24oY2NlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgamF2YS5zcWwuQ29ubmVjdGlvbiBkc0Nvbm4gPSBudWxsOwotICAgICAgICAKKwogICAgICAgICB0cnkgewotCSAgICAvKiBGb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIHVzZXIvcGFzc3dkIG9mIHRoZSBjb25uZWN0aW9uIHBvb2wgaXMKLQkgICAgICogZXF1YWwgdG8gdGhlIFBhc3N3b3JkQ3JlZGVudGlhbCBmb3IgdGhlIGNvbm5lY3Rpb24gcmVxdWVzdAotCSAgICAgKiBnZXQgYSBjb25uZWN0aW9uIGZyb20gdGhpcyBwb29sIGRpcmVjdGx5LgotCSAgICAgKiBmb3IgYWxsIG90aGVyIGNvbmRpdGlvbnMgZ28gY3JlYXRlIGEgbmV3IGNvbm5lY3Rpb24KLQkgICAgICovCi0JICAgIGlmICggaXNFcXVhbCggcGMsIGdldFVzZXIoKSwgZ2V0UGFzc3dvcmQoKSApICkgewotCSAgICAgICAgZHNDb25uID0gZGF0YVNvdXJjZU9iai5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIH0gZWxzZSB7Ci0JICAgICAgICBkc0Nvbm4gPSBkYXRhU291cmNlT2JqLmdldENvbm5lY3Rpb24ocGMuZ2V0VXNlck5hbWUoKSwgCi0JCSAgICBuZXcgU3RyaW5nKHBjLmdldFBhc3N3b3JkKCkpKTsKLQkgICAgfQorICAgICAgICAvKiBGb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIHVzZXIvcGFzc3dkIG9mIHRoZSBjb25uZWN0aW9uIHBvb2wgaXMKKyAgICAgICAgICogZXF1YWwgdG8gdGhlIFBhc3N3b3JkQ3JlZGVudGlhbCBmb3IgdGhlIGNvbm5lY3Rpb24gcmVxdWVzdAorICAgICAgICAgKiBnZXQgYSBjb25uZWN0aW9uIGZyb20gdGhpcyBwb29sIGRpcmVjdGx5LgorICAgICAgICAgKiBmb3IgYWxsIG90aGVyIGNvbmRpdGlvbnMgZ28gY3JlYXRlIGEgbmV3IGNvbm5lY3Rpb24KKyAgICAgICAgICovCisgICAgICAgIGlmICggaXNFcXVhbCggcGMsIGdldFVzZXIoKSwgZ2V0UGFzc3dvcmQoKSApICkgeworICAgICAgICAgICAgZHNDb25uID0gZGF0YVNvdXJjZU9iai5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkc0Nvbm4gPSBkYXRhU291cmNlT2JqLmdldENvbm5lY3Rpb24ocGMuZ2V0VXNlck5hbWUoKSwKKyAgICAgICAgICAgIG5ldyBTdHJpbmcocGMuZ2V0UGFzc3dvcmQoKSkpOworICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMuZXhjX2NyZWF0ZV9jb25uIiwgc3FsZSk7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgamFrYXJ0YS5yZXNvdXJjZS5zcGkuUmVzb3VyY2VBbGxvY2F0aW9uRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBjb3VsZCBub3QgYmUgYWxsb2NhdGVkOiAiICsgCisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLmV4Y19jcmVhdGVfY29ubiIsIHNxbGUpOworICAgICAgICAgICAgdGhyb3cgbmV3IGpha2FydGEucmVzb3VyY2Uuc3BpLlJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gY291bGQgbm90IGJlIGFsbG9jYXRlZDogIiArCiAgICAgICAgICAgICAgICAgc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYyA9IG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24obnVsbCwgZHNDb25uLCBwYywgdGhpcyk7CiAgICAgICAgIC8vR0pDSU5UCiAgICAgICAgIHNldElzb2xhdGlvbihtYyk7CiAgICAgICAgIGlzVmFsaWQobWMpOwogICAgICAgICByZXR1cm4gbWM7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogQ2hlY2sgaWYgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGlzIGVxdWFsIHRvIAorICAgICAqIENoZWNrIGlmIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpcyBlcXVhbCB0bwogICAgICAqIGFub3RoZXIgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPi4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0Jb3RoZXIJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QgZm9yIGNoZWNraW5nIGVxdWFsaXR5IHdpdGgKLSAgICAgKiBAcmV0dXJuCXRydWUJaWYgdGhlIHByb3BlcnR5IHNldHMgb2YgYm90aCB0aGUgCi0gICAgICoJCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdHMgYXJlIHRoZSBzYW1lCi0gICAgICoJCWZhbHNlCW90aGVyd2lzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIG90aGVyICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0IGZvciBjaGVja2luZyBlcXVhbGl0eSB3aXRoCisgICAgICogQHJldHVybiAgICB0cnVlICAgIGlmIHRoZSBwcm9wZXJ0eSBzZXRzIG9mIGJvdGggdGhlCisgICAgICogICAgICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdHMgYXJlIHRoZSBzYW1lCisgICAgICogICAgICAgIGZhbHNlICAgIG90aGVyd2lzZQogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb3RoZXIpIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTEyNyw0MDkgKzEyNyw0MDkgQEAKICAgICAgICAgICogaWYgYW5kIG9ubHkgaWYgdGhlaXIgcHJvcGVydGllcyBhcmUgdGhlIHNhbWUuCiAgICAgICAgICAqLwogICAgICAgICBpZihvdGhlciBpbnN0YW5jZW9mIGNvbS5zdW4uamRiY3JhLnNwaS5EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSkgewotICAgICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLkRTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG90aGVyTUNGID0gCisgICAgICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnkgb3RoZXJNQ0YgPQogICAgICAgICAgICAgICAgIChjb20uc3VuLmpkYmNyYS5zcGkuRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkpIG90aGVyOwogICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3BlYy5lcXVhbHMob3RoZXJNQ0Yuc3BlYyk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHNlcnZlciBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCXNlcnZlck5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0U2VydmVyTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgc2VydmVyTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRTZXJ2ZXJOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHNlcnZlck5hbWUoU3RyaW5nIHNlcnZlck5hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuU0VSVkVSTkFNRSwgc2VydmVyTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgc2VydmVyIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXNlcnZlck5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldFNlcnZlck5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBzZXJ2ZXJOYW1lCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRTZXJ2ZXJOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0c2VydmVyTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlNFUlZFUk5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHNlcnZlciBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCXNlcnZlck5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0U2VydmVyTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgc2VydmVyTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRTZXJ2ZXJOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFNlcnZlck5hbWUoU3RyaW5nIHNlcnZlck5hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuU0VSVkVSTkFNRSwgc2VydmVyTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgc2VydmVyIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXNlcnZlck5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldFNlcnZlck5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBzZXJ2ZXJOYW1lCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRTZXJ2ZXJOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmVyTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlNFUlZFUk5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHBvcnQgbnVtYmVyLgogICAgICAqCi0gICAgICogQHBhcmFtCXBvcnROdW1iZXIJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0UG9ydE51bWJlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcG9ydE51bWJlciAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRQb3J0TnVtYmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHBvcnROdW1iZXIoU3RyaW5nIHBvcnROdW1iZXIpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUE9SVE5VTUJFUiwgcG9ydE51bWJlcik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcG9ydCBudW1iZXIuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXBvcnROdW1iZXIKLSAgICAgKiBAc2VlCTxjb2RlPnNldFBvcnROdW1iZXI8L2NvZGU+CisgICAgICogQHJldHVybiAgICBwb3J0TnVtYmVyCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRQb3J0TnVtYmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0cG9ydE51bWJlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHBvcnQgbnVtYmVyLgogICAgICAqCi0gICAgICogQHBhcmFtCXBvcnROdW1iZXIJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0UG9ydE51bWJlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcG9ydE51bWJlciAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRQb3J0TnVtYmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFBvcnROdW1iZXIoU3RyaW5nIHBvcnROdW1iZXIpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUE9SVE5VTUJFUiwgcG9ydE51bWJlcik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcG9ydCBudW1iZXIuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXBvcnROdW1iZXIKLSAgICAgKiBAc2VlCTxjb2RlPnNldFBvcnROdW1iZXI8L2NvZGU+CisgICAgICogQHJldHVybiAgICBwb3J0TnVtYmVyCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRQb3J0TnVtYmVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0UG9ydE51bWJlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRhdGFiYXNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZGF0YWJhc2VOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERhdGFiYXNlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGF0YWJhc2VOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERhdGFiYXNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRkYXRhYmFzZU5hbWUoU3RyaW5nIGRhdGFiYXNlTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBQkFTRU5BTUUsIGRhdGFiYXNlTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGF0YWJhc2UgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGF0YWJhc2VOYW1lCi0gICAgICogQHNlZQk8Y29kZT5zZXREYXRhYmFzZU5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkYXRhYmFzZU5hbWUKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERhdGFiYXNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGRhdGFiYXNlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFCQVNFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGF0YWJhc2UgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlkYXRhYmFzZU5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGF0YWJhc2VOYW1lPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkYXRhYmFzZU5hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGF0YWJhc2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERhdGFiYXNlTmFtZShTdHJpbmcgZGF0YWJhc2VOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFCQVNFTkFNRSwgZGF0YWJhc2VOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkYXRhYmFzZSBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglkYXRhYmFzZU5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldERhdGFiYXNlTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRhdGFiYXNlTmFtZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGF0YWJhc2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGF0YWJhc2VOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQUJBU0VOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkYXRhIHNvdXJjZSBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCWRzbiA8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREYXRhU291cmNlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZHNuIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERhdGFTb3VyY2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGRhdGFTb3VyY2VOYW1lKFN0cmluZyBkc24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQVNPVVJDRU5BTUUsIGRzbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGF0YSBzb3VyY2UgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JZHNuCi0gICAgICogQHNlZQk8Y29kZT5zZXREYXRhU291cmNlTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRzbgorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRkYXRhU291cmNlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkYXRhIHNvdXJjZSBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCWRzbiA8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREYXRhU291cmNlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZHNuIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERhdGFTb3VyY2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERhdGFTb3VyY2VOYW1lKFN0cmluZyBkc24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQVNPVVJDRU5BTUUsIGRzbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGF0YSBzb3VyY2UgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JZHNuCi0gICAgICogQHNlZQk8Y29kZT5zZXREYXRhU291cmNlTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRzbgorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXREYXRhU291cmNlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFTT1VSQ0VOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkZXNjcmlwdGlvbi4KICAgICAgKgotICAgICAqIEBwYXJhbQlkZXNjCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERlc2NyaXB0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkZXNjICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldERlc2NyaXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGRlc2NyaXB0aW9uKFN0cmluZyBkZXNjKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFU0NSSVBUSU9OLCBkZXNjKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkZXNjcmlwdGlvbi4KICAgICAgKgotICAgICAqIEByZXR1cm4JZGVzYwotICAgICAqIEBzZWUJPGNvZGU+c2V0RGVzY3JpcHRpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBkZXNjCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREZXNjcmlwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGRlc2NyaXB0aW9uKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVTQ1JJUFRJT04pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRlc2NyaXB0aW9uLgogICAgICAqCi0gICAgICogQHBhcmFtCWRlc2MJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGVzY3JpcHRpb248L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRlc2MgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGVzY3JpcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RGVzY3JpcHRpb24oU3RyaW5nIGRlc2MpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVTQ1JJUFRJT04sIGRlc2MpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRlc2NyaXB0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybglkZXNjCi0gICAgICogQHNlZQk8Y29kZT5zZXREZXNjcmlwdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRlc2MKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERlc2NyaXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERVNDUklQVElPTik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgbmV0d29yayBwcm90b2NvbC4KICAgICAgKgotICAgICAqIEBwYXJhbQlud1Byb3RvY29sCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbndQcm90b2NvbCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0bmV0d29ya1Byb3RvY29sKFN0cmluZyBud1Byb3RvY29sKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk5FVFdPUktQUk9UT0NPTCwgbndQcm90b2NvbCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgbmV0d29yayBwcm90b2NvbC4KICAgICAgKgotICAgICAqIEByZXR1cm4JbndQcm90b2NvbAotICAgICAqIEBzZWUJPGNvZGU+c2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgbndQcm90b2NvbAorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0bmV0d29ya1Byb3RvY29sKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTkVUV09SS1BST1RPQ09MKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBuZXR3b3JrIHByb3RvY29sLgogICAgICAqCi0gICAgICogQHBhcmFtCW53UHJvdG9jb2wJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBud1Byb3RvY29sICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXROZXR3b3JrUHJvdG9jb2woU3RyaW5nIG53UHJvdG9jb2wpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTkVUV09SS1BST1RPQ09MLCBud1Byb3RvY29sKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBuZXR3b3JrIHByb3RvY29sLgogICAgICAqCi0gICAgICogQHJldHVybglud1Byb3RvY29sCi0gICAgICogQHNlZQk8Y29kZT5zZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CisgICAgICogQHJldHVybiAgICBud1Byb3RvY29sCisgICAgICogQHNlZSAgICA8Y29kZT5zZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXROZXR3b3JrUHJvdG9jb2woKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ORVRXT1JLUFJPVE9DT0wpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHJvbGUgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlyb2xlTmFtZQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXRSb2xlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcm9sZU5hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0Um9sZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0cm9sZU5hbWUoU3RyaW5nIHJvbGVOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlJPTEVOQU1FLCByb2xlTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcm9sZSBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglyb2xlTmFtZQotICAgICAqIEBzZWUJPGNvZGU+c2V0Um9sZU5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICByb2xlTmFtZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0Um9sZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRyb2xlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlJPTEVOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSByb2xlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jcm9sZU5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0Um9sZU5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHJvbGVOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldFJvbGVOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFJvbGVOYW1lKFN0cmluZyByb2xlTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ST0xFTkFNRSwgcm9sZU5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHJvbGUgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4Jcm9sZU5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldFJvbGVOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgcm9sZU5hbWUKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldFJvbGVOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Um9sZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ST0xFTkFNRSk7CiAgICAgfQogCi0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBsb2dpbiB0aW1lb3V0LgogICAgICAqCi0gICAgICogQHBhcmFtCWxvZ2luVGltZU91dAk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXRMb2dpblRpbWVPdXQ8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGxvZ2luVGltZU91dCAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRMb2dpblRpbWVPdXQ8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0bG9naW5UaW1lT3V0KFN0cmluZyBsb2dpblRpbWVPdXQpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HSU5USU1FT1VULCBsb2dpblRpbWVPdXQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGxvZ2luIHRpbWVvdXQuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWxvZ2luVGltZW91dAotICAgICAqIEBzZWUJPGNvZGU+c2V0TG9naW5UaW1lT3V0PC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgbG9naW5UaW1lb3V0CisgICAgICogQHNlZSAgICA8Y29kZT5zZXRMb2dpblRpbWVPdXQ8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRsb2dpblRpbWVPdXQoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dJTlRJTUVPVVQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGxvZ2luIHRpbWVvdXQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbG9naW5UaW1lT3V0CTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldExvZ2luVGltZU91dDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbG9naW5UaW1lT3V0ICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldExvZ2luVGltZU91dDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRMb2dpblRpbWVPdXQoU3RyaW5nIGxvZ2luVGltZU91dCkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dJTlRJTUVPVVQsIGxvZ2luVGltZU91dCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgbG9naW4gdGltZW91dC4KICAgICAgKgotICAgICAqIEByZXR1cm4JbG9naW5UaW1lb3V0Ci0gICAgICogQHNlZQk8Y29kZT5zZXRMb2dpblRpbWVPdXQ8L2NvZGU+CisgICAgICogQHJldHVybiAgICBsb2dpblRpbWVvdXQKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldExvZ2luVGltZU91dDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldExvZ2luVGltZU91dCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR0lOVElNRU9VVCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGVsaW1pdGVyLgogICAgICAqCi0gICAgICogQHBhcmFtCWRlbGltCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERlbGltaXRlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGVsaW0gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGVsaW1pdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGRlbGltaXRlcihTdHJpbmcgZGVsaW0pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVMSU1JVEVSLCBkZWxpbSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGVsaW1pdGVyLgogICAgICAqCi0gICAgICogQHJldHVybglkZWxpbQotICAgICAqIEBzZWUJPGNvZGU+c2V0RGVsaW1pdGVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZGVsaW0KKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERlbGltaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGRlbGltaXRlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGVsaW1pdGVyLgogICAgICAqCi0gICAgICogQHBhcmFtCWRlbGltCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERlbGltaXRlcjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGVsaW0gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGVsaW1pdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERlbGltaXRlcihTdHJpbmcgZGVsaW0pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVMSU1JVEVSLCBkZWxpbSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGVsaW1pdGVyLgogICAgICAqCi0gICAgICogQHJldHVybglkZWxpbQotICAgICAqIEBzZWUJPGNvZGU+c2V0RGVsaW1pdGVyPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZGVsaW0KKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERlbGltaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldERlbGltaXRlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFTElNSVRFUik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZHJpdmVyIHNwZWNpZmljIHByb3BlcnRpZXMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZHJpdmVyUHJvcHMJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZHJpdmVyUHJvcHMgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRkcml2ZXJQcm9wZXJ0aWVzKFN0cmluZyBkcml2ZXJQcm9wcykgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5EUklWRVJQUk9QRVJUSUVTLCBkcml2ZXJQcm9wcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZHJpdmVyIHNwZWNpZmljIHByb3BlcnRpZXMuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRyaXZlclByb3BzCi0gICAgICogQHNlZQk8Y29kZT5zZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZHJpdmVyUHJvcHMKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRkcml2ZXJQcm9wZXJ0aWVzKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuRFJJVkVSUFJPUEVSVElFUyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZHJpdmVyIHNwZWNpZmljIHByb3BlcnRpZXMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZHJpdmVyUHJvcHMJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZHJpdmVyUHJvcHMgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXREcml2ZXJQcm9wZXJ0aWVzKFN0cmluZyBkcml2ZXJQcm9wcykgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5EUklWRVJQUk9QRVJUSUVTLCBkcml2ZXJQcm9wcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZHJpdmVyIHNwZWNpZmljIHByb3BlcnRpZXMuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRyaXZlclByb3BzCi0gICAgICogQHNlZQk8Y29kZT5zZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZHJpdmVyUHJvcHMKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXREcml2ZXJQcm9wZXJ0aWVzKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuRFJJVkVSUFJPUEVSVElFUyk7CkBAIC01MzksMzUgKzUzOSwzNSBAQAogICAgICAqIENoZWNrIGlmIHRoZSBQYXNzd29yZENyZWRlbnRpYWwgcGFzc2VkIGZvciB0aGlzIGdldCBjb25uZWN0aW9uCiAgICAgICogcmVxdWVzdCBpcyBlcXVhbCB0byB0aGUgdXNlci9wYXNzd2Qgb2YgdGhpcyBjb25uZWN0aW9uIHBvb2wuCiAgICAgICovCi0gICAgcHJpdmF0ZSBib29sZWFuIGlzRXF1YWwoIFBhc3N3b3JkQ3JlZGVudGlhbCBwYywgU3RyaW5nIHVzZXIsIAorICAgIHByaXZhdGUgYm9vbGVhbiBpc0VxdWFsKCBQYXNzd29yZENyZWRlbnRpYWwgcGMsIFN0cmluZyB1c2VyLAogICAgICAgICBTdHJpbmcgcGFzc3dvcmQpIHsKLSAgICAgICAgCi0JLy9pZiBlcXVhbCBnZXQgZGlyZWN0IGNvbm5lY3Rpb24gZWxzZSAKLQkvL2dldCBjb25uZWN0aW9uIHdpdGggdXNlciBhbmQgcGFzc3dvcmQuCi0JCi0JaWYgKHVzZXIgPT0gbnVsbCAmJiBwYyA9PSBudWxsKSB7Ci0JICAgIHJldHVybiB0cnVlOwotCX0KLQkKLQlpZiAoIHVzZXIgPT0gbnVsbCAmJiBwYyAhPSBudWxsICkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCX0KIAotCWlmKCBwYyA9PSBudWxsICkgewotCSAgICByZXR1cm4gdHJ1ZTsKLQl9Ci0JCi0JaWYgKCB1c2VyLmVxdWFscyggcGMuZ2V0VXNlck5hbWUoKSApICkgewotCSAgICBpZiAoIHBhc3N3b3JkID09IG51bGwgJiYgcGMuZ2V0UGFzc3dvcmQoKSA9PSBudWxsICkgewotCSAgICAgICAgcmV0dXJuIHRydWU7Ci0JICAgIH0KLQl9Ci0JCi0JaWYgKCB1c2VyLmVxdWFscyhwYy5nZXRVc2VyTmFtZSgpKSAmJiBwYXNzd29yZC5lcXVhbHMocGMuZ2V0UGFzc3dvcmQoKSkgKSB7Ci0JICAgIHJldHVybiB0cnVlOwotCX0gCi0JCi0gICAgICAgIAotCXJldHVybiBmYWxzZTsKKyAgICAvL2lmIGVxdWFsIGdldCBkaXJlY3QgY29ubmVjdGlvbiBlbHNlCisgICAgLy9nZXQgY29ubmVjdGlvbiB3aXRoIHVzZXIgYW5kIHBhc3N3b3JkLgorCisgICAgaWYgKHVzZXIgPT0gbnVsbCAmJiBwYyA9PSBudWxsKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICggdXNlciA9PSBudWxsICYmIHBjICE9IG51bGwgKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYoIHBjID09IG51bGwgKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICggdXNlci5lcXVhbHMoIHBjLmdldFVzZXJOYW1lKCkgKSApIHsKKyAgICAgICAgaWYgKCBwYXNzd29yZCA9PSBudWxsICYmIHBjLmdldFBhc3N3b3JkKCkgPT0gbnVsbCApIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCB1c2VyLmVxdWFscyhwYy5nZXRVc2VyTmFtZSgpKSAmJiBwYXNzd29yZC5lcXVhbHMocGMuZ2V0UGFzc3dvcmQoKSkgKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworCisgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RhdGFTb3VyY2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RhdGFTb3VyY2UuamF2YQppbmRleCAyMDY4NDMwLi43MzlmZjRkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EYXRhU291cmNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRGF0YVNvdXJjZS5qYXZhCkBAIC0yOCwyMiArMjgsMjIgQEAKIGltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7CiBpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7CiAvKioKLSAqIEhvbGRzIHRoZSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QsIHdoaWNoIGlzIHRvIGJlIAorICogSG9sZHMgdGhlIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCwgd2hpY2ggaXMgdG8gYmUKICAqIHBhc3NlZCB0byB0aGUgYXBwbGljYXRpb24gcHJvZ3JhbS4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzMxCi0gKiBAYXV0aG9yCUJpbm9kIFAuRworICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8zMQorICogQGF1dGhvciAgICBCaW5vZCBQLkcKICAqLwogcHVibGljIGNsYXNzIERhdGFTb3VyY2UgaW1wbGVtZW50cyBqYXZheC5zcWwuRGF0YVNvdXJjZSwgamF2YS5pby5TZXJpYWxpemFibGUsCi0JCWNvbS5zdW4uYXBwc2Vydi5qZGJjcmEuRGF0YVNvdXJjZSwgamFrYXJ0YS5yZXNvdXJjZS5SZWZlcmVuY2VhYmxleyAKLQkJCQkgICAKKyAgICAgICAgY29tLnN1bi5hcHBzZXJ2LmpkYmNyYS5EYXRhU291cmNlLCBqYWthcnRhLnJlc291cmNlLlJlZmVyZW5jZWFibGV7CisKICAgICBwcml2YXRlIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2Y7Ci0gICAgcHJpdmF0ZSBDb25uZWN0aW9uTWFuYWdlciBjbTsJCQkJICAgCQkJCSAgIAorICAgIHByaXZhdGUgQ29ubmVjdGlvbk1hbmFnZXIgY207CiAgICAgcHJpdmF0ZSBpbnQgbG9naW5UaW1lb3V0OwogICAgIHByaXZhdGUgUHJpbnRXcml0ZXIgbG9nV3JpdGVyOwotICAgIHByaXZhdGUgU3RyaW5nIGRlc2NyaXB0aW9uOwkJCQkgICAKKyAgICBwcml2YXRlIFN0cmluZyBkZXNjcmlwdGlvbjsKICAgICBwcml2YXRlIFJlZmVyZW5jZSByZWZlcmVuY2U7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBMb2dnZXIgX2xvZ2dlcjsKICAgICBzdGF0aWMgewogICAgICAgICBfbG9nZ2VyID0gTG9nZ2VyLmdldEFub255bW91c0xvZ2dlcigpOwpAQCAtNTEsNTcgKzUxLDU3IEBACiAgICAgcHJpdmF0ZSBib29sZWFuIGRlYnVnID0gZmFsc2U7CiAKICAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdC4gVGhpcyBpcyBjcmVhdGVkIGJ5IHRoZSAKKyAgICAgKiBDb25zdHJ1Y3RzIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdC4gVGhpcyBpcyBjcmVhdGVkIGJ5IHRoZQogICAgICAqIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0LgogICAgICAqCi0gICAgICogQHBhcmFtCW1jZgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdCAKLSAgICAgKgkJCWNyZWF0aW5nIHRoaXMgb2JqZWN0LgotICAgICAqIEBwYXJhbQljbQk8Y29kZT5Db25uZWN0aW9uTWFuYWdlcjwvY29kZT4gb2JqZWN0IGVpdGhlciBhc3NvY2lhdGVkCi0gICAgICoJCQl3aXRoIEFwcGxpY2F0aW9uIHNlcnZlciBvciBSZXNvdXJjZSBBZGFwdGVyLgorICAgICAqIEBwYXJhbSAgICBtY2YgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QKKyAgICAgKiAgICAgICAgICAgIGNyZWF0aW5nIHRoaXMgb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBjbSAgICA8Y29kZT5Db25uZWN0aW9uTWFuYWdlcjwvY29kZT4gb2JqZWN0IGVpdGhlciBhc3NvY2lhdGVkCisgICAgICogICAgICAgICAgICB3aXRoIEFwcGxpY2F0aW9uIHNlcnZlciBvciBSZXNvdXJjZSBBZGFwdGVyLgogICAgICAqLwogICAgIHB1YmxpYyBEYXRhU291cmNlIChNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmLCBDb25uZWN0aW9uTWFuYWdlciBjbSkgewotICAgIAl0aGlzLm1jZiA9IG1jZjsKLSAgICAJaWYgKGNtID09IG51bGwpIHsKLSAgICAJICAgIHRoaXMuY20gPSAoQ29ubmVjdGlvbk1hbmFnZXIpIG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbk1hbmFnZXIoKTsKLSAgICAJfSBlbHNlIHsKLSAgICAJICAgIHRoaXMuY20gPSBjbTsKLSAgICAJfSAgICAJCi0gICAgfSAgIAotICAgIAorICAgICAgICB0aGlzLm1jZiA9IG1jZjsKKyAgICAgICAgaWYgKGNtID09IG51bGwpIHsKKyAgICAgICAgICAgIHRoaXMuY20gPSAoQ29ubmVjdGlvbk1hbmFnZXIpIG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbk1hbmFnZXIoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuY20gPSBjbTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QuCi0gICAgICogCi0gICAgICogQHJldHVybgk8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGFuIGVycm9yLiAgICAgIAorICAgICAqCisgICAgICogQHJldHVybiAgICA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGFuIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBDb25uZWN0aW9uIGdldENvbm5lY3Rpb24oKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLSAgICAJdHJ5IHsKLSAgICAJICAgIHJldHVybiAoQ29ubmVjdGlvbikgY20uYWxsb2NhdGVDb25uZWN0aW9uKG1jZixudWxsKTsgICAgCSAgICAKLSAgICAJfSBjYXRjaCAoUmVzb3VyY2VFeGNlcHRpb24gcmUpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJldHVybiAoQ29ubmVjdGlvbikgY20uYWxsb2NhdGVDb25uZWN0aW9uKG1jZixudWxsKTsKKyAgICAgICAgfSBjYXRjaCAoUmVzb3VyY2VFeGNlcHRpb24gcmUpIHsKIC8vIFRoaXMgaXMgdGVtcG9yYXJ5LiBUaGlzIG5lZWRzIHRvIGJlIGNoYW5nZWQgdG8gU0VWRVJFIGFmdGVyIFRQCi0JICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLmV4Y19nZXRfY29ubiIsIHJlLmdldE1lc3NhZ2UoKSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uIChyZS5nZXRNZXNzYWdlKCkpOwotICAgIAl9CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLmV4Y19nZXRfY29ubiIsIHJlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uIChyZS5nZXRNZXNzYWdlKCkpOworICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JdXNlcglVc2VyIG5hbWUgZm9yIHRoZSBDb25uZWN0aW9uLgotICAgICAqIEBwYXJhbQlwd2QJUGFzc3dvcmQgZm9yIHRoZSBDb25uZWN0aW9uLgotICAgICAqIEByZXR1cm4JPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhbiBlcnJvci4gICAgICAKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICB1c2VyICAgIFVzZXIgbmFtZSBmb3IgdGhlIENvbm5lY3Rpb24uCisgICAgICogQHBhcmFtICAgIHB3ZCAgICBQYXNzd29yZCBmb3IgdGhlIENvbm5lY3Rpb24uCisgICAgICogQHJldHVybiAgICA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGFuIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBDb25uZWN0aW9uIGdldENvbm5lY3Rpb24oU3RyaW5nIHVzZXIsIFN0cmluZyBwd2QpIHRocm93cyBTUUxFeGNlcHRpb24gewotICAgIAl0cnkgewotICAgIAkgICAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGluZm8gPSBuZXcgQ29ubmVjdGlvblJlcXVlc3RJbmZvICh1c2VyLCBwd2QpOwotICAgIAkgICAgcmV0dXJuIChDb25uZWN0aW9uKSBjbS5hbGxvY2F0ZUNvbm5lY3Rpb24obWNmLGluZm8pOwotICAgIAl9IGNhdGNoIChSZXNvdXJjZUV4Y2VwdGlvbiByZSkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGluZm8gPSBuZXcgQ29ubmVjdGlvblJlcXVlc3RJbmZvICh1c2VyLCBwd2QpOworICAgICAgICAgICAgcmV0dXJuIChDb25uZWN0aW9uKSBjbS5hbGxvY2F0ZUNvbm5lY3Rpb24obWNmLGluZm8pOworICAgICAgICB9IGNhdGNoIChSZXNvdXJjZUV4Y2VwdGlvbiByZSkgewogLy8gVGhpcyBpcyB0ZW1wb3JhcnkuIFRoaXMgbmVlZHMgdG8gYmUgY2hhbmdlZCB0byBTRVZFUkUgYWZ0ZXIgVFAKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMuZXhjX2dldF9jb25uIiwgcmUuZ2V0TWVzc2FnZSgpKTsKLSAgICAJICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKHJlLmdldE1lc3NhZ2UoKSk7Ci0gICAgCX0KLSAgICB9ICAgIAorICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5leGNfZ2V0X2Nvbm4iLCByZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAocmUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgfQorICAgIH0KIAogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIFNRTENvbm5lY3Rpb24gZnJvbSB0aGUgQ29ubmVjdGlvbiB3cmFwcGVyCkBAIC0xMTQsOTEgKzExNCw5MSBAQAogICAgICAqLwogICAgIHB1YmxpYyBDb25uZWN0aW9uIGdldENvbm5lY3Rpb24oQ29ubmVjdGlvbiBjb24pIHRocm93cyBTUUxFeGNlcHRpb24gewogCi0gICAgICAgIENvbm5lY3Rpb24gZHJpdmVyQ29uID0gY29uOyAKKyAgICAgICAgQ29ubmVjdGlvbiBkcml2ZXJDb24gPSBjb247CiAgICAgICAgIGlmIChjb24gaW5zdGFuY2VvZiBjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbkhvbGRlcikgewotICAgICAgICAgICBkcml2ZXJDb24gPSAoKGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uSG9sZGVyKSBjb24pLmdldENvbm5lY3Rpb24oKTsgCi0gICAgICAgIH0gCisgICAgICAgICAgIGRyaXZlckNvbiA9ICgoY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25Ib2xkZXIpIGNvbikuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIGRyaXZlckNvbjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXQgdGhlIGxvZ2luIHRpbWVvdXQKICAgICAgKgogICAgICAqIEByZXR1cm4gbG9naW4gdGltZW91dC4KLSAgICAgKiBAdGhyb3dzCVNRTEV4Y2VwdGlvbglJZiBhIGRhdGFiYXNlIGVycm9yIG9jY3Vycy4KKyAgICAgKiBAdGhyb3dzICAgIFNRTEV4Y2VwdGlvbiAgICBJZiBhIGRhdGFiYXNlIGVycm9yIG9jY3Vycy4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldExvZ2luVGltZW91dCgpIHRocm93cyBTUUxFeGNlcHRpb257Ci0gICAgCXJldHVybglsb2dpblRpbWVvdXQ7CisgICAgICAgIHJldHVybiAgICBsb2dpblRpbWVvdXQ7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0IHRoZSBsb2dpbiB0aW1lb3V0CiAgICAgICoKLSAgICAgKiBAcGFyYW0JbG9naW5UaW1lb3V0CUxvZ2luIHRpbWVvdXQuCi0gICAgICogQHRocm93cwlTUUxFeGNlcHRpb24JSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCisgICAgICogQHBhcmFtICAgIGxvZ2luVGltZW91dCAgICBMb2dpbiB0aW1lb3V0LgorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIElmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldExvZ2luVGltZW91dChpbnQgbG9naW5UaW1lb3V0KSB0aHJvd3MgU1FMRXhjZXB0aW9uewotICAgIAl0aGlzLmxvZ2luVGltZW91dCA9IGxvZ2luVGltZW91dDsKKyAgICAgICAgdGhpcy5sb2dpblRpbWVvdXQgPSBsb2dpblRpbWVvdXQ7CiAgICAgfQotICAgIAotICAgIC8qKiAKKworICAgIC8qKgogICAgICAqIEdldCB0aGUgbG9nd3JpdGVyIG9iamVjdC4KICAgICAgKgogICAgICAqIEByZXR1cm4gPGNvZGU+IFByaW50V3JpdGVyIDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MJU1FMRXhjZXB0aW9uCUlmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIElmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgogICAgICAqLwogICAgIHB1YmxpYyBQcmludFdyaXRlciBnZXRMb2dXcml0ZXIoKSB0aHJvd3MgU1FMRXhjZXB0aW9uewotICAgIAlyZXR1cm4JbG9nV3JpdGVyOworICAgICAgICByZXR1cm4gICAgbG9nV3JpdGVyOwogICAgIH0KLSAgICAgICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGxvZ3dyaXRlciBvbiB0aGlzIG9iamVjdC4KICAgICAgKgogICAgICAqIEBwYXJhbSA8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MJU1FMRXhjZXB0aW9uCUlmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIElmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldExvZ1dyaXRlcihQcmludFdyaXRlciBsb2dXcml0ZXIpIHRocm93cyBTUUxFeGNlcHRpb257Ci0gICAgCXRoaXMubG9nV3JpdGVyID0gbG9nV3JpdGVyOwotICAgIH0gICAgICAgIAotICAgICAgICAKKyAgICAgICAgdGhpcy5sb2dXcml0ZXIgPSBsb2dXcml0ZXI7CisgICAgfQorCiAgICAgcHVibGljIExvZ2dlciBnZXRQYXJlbnRMb2dnZXIoKSB0aHJvd3MgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbnsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgZmVhdHVyZS4iKTsKICAgICB9CiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBkZXNjcmlwdGlvbi4KICAgICAgKgotICAgICAqIEByZXR1cm4JRGVzY3JpcHRpb24gYWJvdXQgdGhlIERhdGFTb3VyY2UuCisgICAgICogQHJldHVybiAgICBEZXNjcmlwdGlvbiBhYm91dCB0aGUgRGF0YVNvdXJjZS4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgewotICAgIAlyZXR1cm4gZGVzY3JpcHRpb247CisgICAgICAgIHJldHVybiBkZXNjcmlwdGlvbjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGRlc2NyaXB0aW9uLgogICAgICAqCiAgICAgICogQHBhcmFtIGRlc2NyaXB0aW9uIERlc2NyaXB0aW9uIGFib3V0IHRoZSBEYXRhU291cmNlLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERlc2NyaXB0aW9uKFN0cmluZyBkZXNjcmlwdGlvbikgewotICAgIAl0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247Ci0gICAgfSAgICAKLSAgICAKKyAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOworICAgIH0KKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgcmVmZXJlbmNlLgogICAgICAqCiAgICAgICogQHJldHVybiA8Y29kZT5SZWZlcmVuY2U8L2NvZGU+b2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyBSZWZlcmVuY2UgZ2V0UmVmZXJlbmNlKCkgewotICAgIAlyZXR1cm4gcmVmZXJlbmNlOworICAgICAgICByZXR1cm4gcmVmZXJlbmNlOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgcmVmZXJlbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCXJlZmVyZW5jZSA8Y29kZT5SZWZlcmVuY2U8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgcmVmZXJlbmNlIDxjb2RlPlJlZmVyZW5jZTwvY29kZT4gb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFJlZmVyZW5jZShSZWZlcmVuY2UgcmVmZXJlbmNlKSB7Ci0gICAgCXRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlOworICAgICAgICB0aGlzLnJlZmVyZW5jZSA9IHJlZmVyZW5jZTsKICAgICB9CiAKICAgICBwdWJsaWMgPFQ+IFQgdW53cmFwKENsYXNzPFQ+IGlmYWNlKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbi5qYXZhCmluZGV4IGFlMTZiNTEuLjgyNDUxMGQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW4uamF2YQpAQCAtMTgsMTMgKzE4LDEzIEBACiAKIHB1YmxpYyBpbnRlcmZhY2UgSmRiY1NldHVwQWRtaW4gewogCi0gICAgcHVibGljIHZvaWQgc2V0VGFibGVOYW1lKFN0cmluZyBkYik7IAorICAgIHB1YmxpYyB2b2lkIHNldFRhYmxlTmFtZShTdHJpbmcgZGIpOwogCiAgICAgcHVibGljIFN0cmluZyBnZXRUYWJsZU5hbWUoKTsKIAotICAgIHB1YmxpYyB2b2lkIHNldEpuZGlOYW1lKFN0cmluZyBuYW1lKTsgCisgICAgcHVibGljIHZvaWQgc2V0Sm5kaU5hbWUoU3RyaW5nIG5hbWUpOwogCi0gICAgcHVibGljIFN0cmluZyBnZXRKbmRpTmFtZSgpOyAKKyAgICBwdWJsaWMgU3RyaW5nIGdldEpuZGlOYW1lKCk7CiAKICAgICBwdWJsaWMgdm9pZCBzZXRTY2hlbWFOYW1lKFN0cmluZyBuYW1lKTsKIApAQCAtMzQsOCArMzQsOCBAQAogCiAgICAgcHVibGljIEludGVnZXIgZ2V0Tm9PZlJvd3MoKTsKIAotICAgIHB1YmxpYyBib29sZWFuIGNoZWNrU2V0dXAoKTsgCi0gICAgCisgICAgcHVibGljIGJvb2xlYW4gY2hlY2tTZXR1cCgpOworCiAgICAgcHVibGljIGludCBnZXRWZXJzaW9uKCk7CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluSW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW5JbXBsLmphdmEKaW5kZXggMWE5ZTVjNi4uYzcyZDc0YyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW5JbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW5JbXBsLmphdmEKQEAgLTY2LDYyICs2Niw2MiBAQAogICAgIHB1YmxpYyBib29sZWFuIGNoZWNrU2V0dXAoKXsKIAogICAgICAgICBpZiAoam5kaU5hbWU9PSBudWxsIHx8IGpuZGlOYW1lLnRyaW0oKS5lcXVhbHMoIiIpKSB7Ci0JICAgcmV0dXJuIGZhbHNlOwotCX0KKyAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgICAgIGlmICh0YWJsZU5hbWU9PSBudWxsIHx8IHRhYmxlTmFtZS50cmltKCkuZXF1YWxzKCIiKSkgewotCSAgIHJldHVybiBmYWxzZTsKLQl9CisgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAogICAgICAgICBDb25uZWN0aW9uIGNvbiA9IG51bGw7Ci0JU3RhdGVtZW50IHMgPSBudWxsOwotCVJlc3VsdFNldCBycyA9IG51bGw7Ci0JYm9vbGVhbiBiID0gZmFsc2U7CisgICAgU3RhdGVtZW50IHMgPSBudWxsOworICAgIFJlc3VsdFNldCBycyA9IG51bGw7CisgICAgYm9vbGVhbiBiID0gZmFsc2U7CiAgICAgICAgIHRyeSB7Ci0JICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSkgaWMubG9va3VwKGpuZGlOYW1lKTsKKyAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoam5kaU5hbWUpOwogICAgICAgICAgICAgY29uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCSAgICBTdHJpbmcgZnVsbFRhYmxlTmFtZSA9IHRhYmxlTmFtZTsKLQkgICAgaWYgKHNjaGVtYU5hbWUgIT0gbnVsbCAmJiAoIShzY2hlbWFOYW1lLnRyaW0oKS5lcXVhbHMoIiIpKSkpIHsKLQkgICAgICAgIGZ1bGxUYWJsZU5hbWUgPSBzY2hlbWFOYW1lLnRyaW0oKSArICIuIiArIGZ1bGxUYWJsZU5hbWU7Ci0JICAgIH0KLQkgICAgU3RyaW5nIHFyeSA9ICJzZWxlY3QgKiBmcm9tICIgKyBmdWxsVGFibGVOYW1lOyAKKyAgICAgICAgU3RyaW5nIGZ1bGxUYWJsZU5hbWUgPSB0YWJsZU5hbWU7CisgICAgICAgIGlmIChzY2hlbWFOYW1lICE9IG51bGwgJiYgKCEoc2NoZW1hTmFtZS50cmltKCkuZXF1YWxzKCIiKSkpKSB7CisgICAgICAgICAgICBmdWxsVGFibGVOYW1lID0gc2NoZW1hTmFtZS50cmltKCkgKyAiLiIgKyBmdWxsVGFibGVOYW1lOworICAgICAgICB9CisgICAgICAgIFN0cmluZyBxcnkgPSAic2VsZWN0ICogZnJvbSAiICsgZnVsbFRhYmxlTmFtZTsKIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4ZWN1dGluZyBxdWVyeSA6IiArIHFyeSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhlY3V0aW5nIHF1ZXJ5IDoiICsgcXJ5KTsKIAotCSAgICBzID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOwotCSAgICBycyA9IHMuZXhlY3V0ZVF1ZXJ5KHFyeSk7IAorICAgICAgICBzID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICBycyA9IHMuZXhlY3V0ZVF1ZXJ5KHFyeSk7CiAKICAgICAgICAgICAgIGludCBpID0gMDsKLQkgICAgaWYgKHJzLm5leHQoKSkgewotCSAgICAgICAgaSsrOwotCSAgICB9CisgICAgICAgIGlmIChycy5uZXh0KCkpIHsKKyAgICAgICAgICAgIGkrKzsKKyAgICAgICAgfQogCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk5vIG9mIHJvd3MgZm91bmQ6IiArIGkpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJObyBvZiByb3dzIGV4cGVjdGVkOiIgKyBub09mUm93cyk7CiAKLQkgICAgaWYgKGkgPT0gbm9PZlJvd3MuaW50VmFsdWUoKSkgewotCSAgICAgICBiID0gdHJ1ZTsKLQkgICAgfSBlbHNlIHsKLQkgICAgICAgYiA9IGZhbHNlOwotCSAgICB9Ci0JfSBjYXRjaChFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICBiID0gZmFsc2U7Ci0JfSBmaW5hbGx5IHsKLQkgICAgdHJ5IHsKLQkgICAgICAgIGlmIChycyAhPSBudWxsKSBycy5jbG9zZSgpOwotCSAgICAgICAgaWYgKHMgIT0gbnVsbCkgcy5jbG9zZSgpOwotCSAgICAgICAgaWYgKGNvbiAhPSBudWxsKSBjb24uY2xvc2UoKTsKKyAgICAgICAgaWYgKGkgPT0gbm9PZlJvd3MuaW50VmFsdWUoKSkgeworICAgICAgICAgICBiID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgYiA9IGZhbHNlOworICAgICAgICB9CisgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICBiID0gZmFsc2U7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGlmIChycyAhPSBudWxsKSBycy5jbG9zZSgpOworICAgICAgICAgICAgaWYgKHMgIT0gbnVsbCkgcy5jbG9zZSgpOworICAgICAgICAgICAgaWYgKGNvbiAhPSBudWxsKSBjb24uY2xvc2UoKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIH0KLQl9Ci0JU3lzdGVtLm91dC5wcmludGxuKCJSZXR1cm5pbmcgc2V0dXAgOiIgK2IpOwotCXJldHVybiBiOworICAgICAgICB9CiAgICAgfQotICAgIAorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmV0dXJuaW5nIHNldHVwIDoiICtiKTsKKyAgICByZXR1cm4gYjsKKyAgICB9CisKICAgICBwdWJsaWMgaW50IGdldFZlcnNpb24oKXsKLQkgICAgcmV0dXJuIFJlc291cmNlQWRhcHRlci5WRVJTSU9OOworICAgICAgICByZXR1cm4gUmVzb3VyY2VBZGFwdGVyLlZFUlNJT047CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Mb2NhbFRyYW5zYWN0aW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Mb2NhbFRyYW5zYWN0aW9uLmphdmEKaW5kZXggOGViZTA1Ny4uYzU0YTIxNiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTG9jYWxUcmFuc2FjdGlvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0xvY2FsVHJhbnNhY3Rpb24uamF2YQpAQCAtMjMsNDUgKzIzLDQ1IEBACiAvKioKICAqIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDgvMDMKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA4LzAzCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiBwdWJsaWMgY2xhc3MgTG9jYWxUcmFuc2FjdGlvbiBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLkxvY2FsVHJhbnNhY3Rpb24gewotICAgIAorCiAgICAgcHJpdmF0ZSBNYW5hZ2VkQ29ubmVjdGlvbiBtYzsKLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdG9yIGZvciA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPi4KLSAgICAgKiBAcGFyYW0JbWMJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHRoYXQgcmV0dXJucwotICAgICAqCQkJdGhpcyA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBvYmplY3QgYXMKLSAgICAgKgkJCWEgcmVzdWx0IG9mIDxjb2RlPmdldExvY2FsVHJhbnNhY3Rpb248L2NvZGU+CisgICAgICogQHBhcmFtICAgIG1jICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiB0aGF0IHJldHVybnMKKyAgICAgKiAgICAgICAgICAgIHRoaXMgPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gb2JqZWN0IGFzCisgICAgICogICAgICAgICAgICBhIHJlc3VsdCBvZiA8Y29kZT5nZXRMb2NhbFRyYW5zYWN0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBMb2NhbFRyYW5zYWN0aW9uKE1hbmFnZWRDb25uZWN0aW9uIG1jKSB7CiAgICAgICAgIHRoaXMubWMgPSBtYzsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBCZWdpbiBhIGxvY2FsIHRyYW5zYWN0aW9uLgogICAgICAqCi0gICAgICogQHRocm93cwlMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNoYW5naW5nCi0gICAgICoJCQkJCQl0aGUgYXV0b2NvbW1pdCBtb2RlIG9mIHRoZSBwaHlzaWNhbAotICAgICAqCQkJCQkJY29ubmVjdGlvbgorICAgICAqIEB0aHJvd3MgICAgTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjaGFuZ2luZworICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGF1dG9jb21taXQgbW9kZSBvZiB0aGUgcGh5c2ljYWwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBiZWdpbigpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIC8vR0pDSU5UCi0JbWMudHJhbnNhY3Rpb25TdGFydGVkKCk7CisgICAgbWMudHJhbnNhY3Rpb25TdGFydGVkKCk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBtYy5nZXRBY3R1YWxDb25uZWN0aW9uKCkuc2V0QXV0b0NvbW1pdChmYWxzZSk7CiAgICAgICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbW1pdCBhIGxvY2FsIHRyYW5zYWN0aW9uLgotICAgICAqIEB0aHJvd3MJTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjaGFuZ2luZwotICAgICAqCQkJCQkJdGhlIGF1dG9jb21taXQgbW9kZSBvZiB0aGUgcGh5c2ljYWwKLSAgICAgKgkJCQkJCWNvbm5lY3Rpb24gb3IgY29tbWl0dGluZyB0aGUgdHJhbnNhY3Rpb24KKyAgICAgKiBAdGhyb3dzICAgIExvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2hhbmdpbmcKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhdXRvY29tbWl0IG1vZGUgb2YgdGhlIHBoeXNpY2FsCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uIG9yIGNvbW1pdHRpbmcgdGhlIHRyYW5zYWN0aW9uCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgY29tbWl0KCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgRXhjZXB0aW9uIGUgPSBudWxsOwpAQCAtNzIsMTUgKzcyLDE1IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICAgICAgLy9HSkNJTlQKLQltYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOworICAgIG1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUm9sbGJhY2sgYSBsb2NhbCB0cmFuc2FjdGlvbi4KLSAgICAgKiAKLSAgICAgKiBAdGhyb3dzCUxvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2hhbmdpbmcKLSAgICAgKgkJCQkJCXRoZSBhdXRvY29tbWl0IG1vZGUgb2YgdGhlIHBoeXNpY2FsCi0gICAgICoJCQkJCQljb25uZWN0aW9uIG9yIHJvbGxpbmcgYmFjayB0aGUgdHJhbnNhY3Rpb24KKyAgICAgKgorICAgICAqIEB0aHJvd3MgICAgTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjaGFuZ2luZworICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGF1dG9jb21taXQgbW9kZSBvZiB0aGUgcGh5c2ljYWwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gb3Igcm9sbGluZyBiYWNrIHRoZSB0cmFuc2FjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJvbGxiYWNrKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKQEAgLTkwLDcgKzkwLDcgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgICAgICAvL0dKQ0lOVAotCW1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CisgICAgbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbi5qYXZhCmluZGV4IDMwZjQ2MGEuLjJkYWQ1OWEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb24uamF2YQpAQCAtNDEsOCArNDEsOCBAQAogLyoqCiAgKiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW1wbGVtZW50YXRpb24gZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8yMgotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMjIKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIHB1YmxpYyBjbGFzcyBNYW5hZ2VkQ29ubmVjdGlvbiBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uIHsKIApAQCAtNTIsNyArNTIsNyBAQAogCiAgICAgcHJpdmF0ZSBib29sZWFuIGlzRGVzdHJveWVkID0gZmFsc2U7CiAgICAgcHJpdmF0ZSBib29sZWFuIGlzVXNhYmxlID0gdHJ1ZTsKLSAgICAKKwogICAgIHByaXZhdGUgaW50IGNvbm5lY3Rpb25UeXBlID0gSVNOT1RBUE9PTEVEQ09OTkVDVElPTjsKICAgICBwcml2YXRlIFBvb2xlZENvbm5lY3Rpb24gcGMgPSBudWxsOwogICAgIHByaXZhdGUgamF2YS5zcWwuQ29ubmVjdGlvbiBhY3R1YWxDb25uZWN0aW9uID0gbnVsbDsKQEAgLTYyLDcgKzYyLDcgQEAKICAgICBwcml2YXRlIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2YgPSBudWxsOwogICAgIHByaXZhdGUgWEFSZXNvdXJjZSB4YXIgPSBudWxsOwogICAgIHB1YmxpYyBDb25uZWN0aW9uSG9sZGVyIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGU7Ci0gICAgCisKICAgICAvL0dKQ0lOVAogICAgIHByaXZhdGUgaW50IGlzb2xhdGlvbkxldmVsV2hlbkNsZWFuZWQ7CiAgICAgcHJpdmF0ZSBib29sZWFuIGlzQ2xlYW4gPSBmYWxzZTsKQEAgLTc3LDcxICs3Nyw3MSBAQAogICAgIHN0YXRpYyB7CiAgICAgICAgIF9sb2dnZXIgPSBMb2dnZXIuZ2V0QW5vbnltb3VzTG9nZ2VyKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0b3IgZm9yIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPi4gVGhlIHBvb2xlZENvbm4gcGFyYW1ldGVyIGlzIGV4cGVjdGVkCi0gICAgICogdG8gYmUgbnVsbCBhbmQgc3FsQ29ubiBwYXJhbWV0ZXIgaXMgdGhlIGFjdHVhbCBjb25uZWN0aW9uIGluIGNhc2Ugd2hlcmUgCi0gICAgICogdGhlIGFjdHVhbCBjb25uZWN0aW9uIGlzIGdvdCBmcm9tIGEgbm9uIHBvb2xlZCBkYXRhc291cmNlIG9iamVjdC4gVGhlIAorICAgICAqIHRvIGJlIG51bGwgYW5kIHNxbENvbm4gcGFyYW1ldGVyIGlzIHRoZSBhY3R1YWwgY29ubmVjdGlvbiBpbiBjYXNlIHdoZXJlCisgICAgICogdGhlIGFjdHVhbCBjb25uZWN0aW9uIGlzIGdvdCBmcm9tIGEgbm9uIHBvb2xlZCBkYXRhc291cmNlIG9iamVjdC4gVGhlCiAgICAgICogcG9vbGVkQ29ubiBwYXJhbWV0ZXIgaXMgZXhwZWN0ZWQgdG8gYmUgbm9uIG51bGwgYW5kIHNxbENvbm4gcGFyYW1ldGVyCiAgICAgICogaXMgZXhwZWN0ZWQgdG8gYmUgbnVsbCBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgZGF0YXNvdXJjZSBvYmplY3QgaXMgYQogICAgICAqIGNvbm5lY3Rpb24gcG9vbCBkYXRhc291cmNlIG9yIGFuIHhhIGRhdGFzb3VyY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcG9vbGVkQ29ubgk8Y29kZT5Qb29sZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaW4gY2FzZSB0aGUgCi0gICAgICoJCQkJcGh5c2ljYWwgY29ubmVjdGlvbiBpcyB0byBiZSBvYnRhaW5lZCBmcm9tIGEgcG9vbGVkCi0gICAgICoJCQkJPGNvZGU+RGF0YVNvdXJjZTwvY29kZT47IG51bGwgb3RoZXJ3aXNlCi0gICAgICogQHBhcmFtCXNxbENvbm4JPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGluIGNhc2UgdGhlIHBoeXNpY2FsCi0gICAgICoJCQljb25uZWN0aW9uIGlzIHRvIGJlIG9idGFpbmVkIGZyb20gYSBub24gcG9vbGVkIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+OwotICAgICAqCQkJbnVsbCBvdGhlcndpc2UKLSAgICAgKiBAcGFyYW0JcGFzc3dkQ3JlZAlvYmplY3QgY29uYXRpbmluZyB0aGUKLSAgICAgKgkJCQl1c2VyIGFuZCBwYXNzd29yZCBmb3IgYWxsb2NhdGluZyB0aGUgY29ubmVjdGlvbgotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0Ci0gICAgICoJCQkJCXRoYXQgY3JlYXRlZCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QKLSAgICAgKgkJCQkJaXMgbm90IHRoZSBzYW1lIGFzIHJldHVybmVkIGJ5IDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KLSAgICAgKgkJCQkJb2JqZWN0IHBhc3NlZAorICAgICAqIEBwYXJhbSAgICBwb29sZWRDb25uICAgIDxjb2RlPlBvb2xlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpbiBjYXNlIHRoZQorICAgICAqICAgICAgICAgICAgICAgIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgdG8gYmUgb2J0YWluZWQgZnJvbSBhIHBvb2xlZAorICAgICAqICAgICAgICAgICAgICAgIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+OyBudWxsIG90aGVyd2lzZQorICAgICAqIEBwYXJhbSAgICBzcWxDb25uICAgIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpbiBjYXNlIHRoZSBwaHlzaWNhbAorICAgICAqICAgICAgICAgICAgY29ubmVjdGlvbiBpcyB0byBiZSBvYnRhaW5lZCBmcm9tIGEgbm9uIHBvb2xlZCA8Y29kZT5EYXRhU291cmNlPC9jb2RlPjsKKyAgICAgKiAgICAgICAgICAgIG51bGwgb3RoZXJ3aXNlCisgICAgICogQHBhcmFtICAgIHBhc3N3ZENyZWQgICAgb2JqZWN0IGNvbmF0aW5pbmcgdGhlCisgICAgICogICAgICAgICAgICAgICAgdXNlciBhbmQgcGFzc3dvcmQgZm9yIGFsbG9jYXRpbmcgdGhlIGNvbm5lY3Rpb24KKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdAorICAgICAqICAgICAgICAgICAgICAgICAgICB0aGF0IGNyZWF0ZWQgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0CisgICAgICogICAgICAgICAgICAgICAgICAgIGlzIG5vdCB0aGUgc2FtZSBhcyByZXR1cm5lZCBieSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+CisgICAgICogICAgICAgICAgICAgICAgICAgIG9iamVjdCBwYXNzZWQKICAgICAgKi8KLSAgICBwdWJsaWMgTWFuYWdlZENvbm5lY3Rpb24oUG9vbGVkQ29ubmVjdGlvbiBwb29sZWRDb25uLCBqYXZhLnNxbC5Db25uZWN0aW9uIHNxbENvbm4sIAorICAgIHB1YmxpYyBNYW5hZ2VkQ29ubmVjdGlvbihQb29sZWRDb25uZWN0aW9uIHBvb2xlZENvbm4sIGphdmEuc3FsLkNvbm5lY3Rpb24gc3FsQ29ubiwKICAgICAgICAgUGFzc3dvcmRDcmVkZW50aWFsIHBhc3N3ZENyZWQsIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2YpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKHBvb2xlZENvbm4gPT0gbnVsbCAmJiBzcWxDb25uID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQ29ubmVjdGlvbiBvYmplY3QgY2Fubm90IGJlIG51bGwiKTsKICAgICAgICAgfQogCi0JaWYgKGNvbm5lY3Rpb25UeXBlID09IElTTk9UQVBPT0xFRENPTk5FQ1RJT04gKSB7Ci0JICAgIGFjdHVhbENvbm5lY3Rpb24gPSBzcWxDb25uOwotCX0KKyAgICBpZiAoY29ubmVjdGlvblR5cGUgPT0gSVNOT1RBUE9PTEVEQ09OTkVDVElPTiApIHsKKyAgICAgICAgYWN0dWFsQ29ubmVjdGlvbiA9IHNxbENvbm47CisgICAgfQogCiAgICAgICAgIHBjID0gcG9vbGVkQ29ubjsKICAgICAgICAgY29ubmVjdGlvbkhhbmRsZXMgPSBuZXcgSGFzaHRhYmxlKCk7CiAgICAgICAgIHBhc3N3ZENyZWRlbnRpYWwgPSBwYXNzd2RDcmVkOwogICAgICAgICB0aGlzLm1jZiA9IG1jZjsKLSAgICAgICAgaWYocGFzc3dkQ3JlZGVudGlhbCAhPSBudWxsICYmICAKKyAgICAgICAgaWYocGFzc3dkQ3JlZGVudGlhbCAhPSBudWxsICYmCiAgICAgICAgICAgICB0aGlzLm1jZi5lcXVhbHMocGFzc3dkQ3JlZGVudGlhbC5nZXRNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkoKSkgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSB0aGF0IGhhcyBjcmVhdGVkIHRoaXMgIiArIAorICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IHRoYXQgaGFzIGNyZWF0ZWQgdGhpcyAiICsKICAgICAgICAgICAgICAgICAiTWFuYWdlZENvbm5lY3Rpb24gaXMgbm90IHRoZSBzYW1lIGFzIHRoZSBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgcmV0dXJuZWQgYnkiICsKICAgICAgICAgICAgICAgICAgICAgIiB0aGUgUGFzc3dvcmRDcmVkZW50aWFsIGZvciB0aGlzIE1hbmFnZWRDb25uZWN0aW9uIik7CiAgICAgICAgIH0KICAgICAgICAgbG9nV3JpdGVyID0gbWNmLmdldExvZ1dyaXRlcigpOwogICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKLQljZSA9IG5ldyBDb25uZWN0aW9uRXZlbnQodGhpcywgQ29ubmVjdGlvbkV2ZW50LkNPTk5FQ1RJT05fQ0xPU0VEKTsKKyAgICBjZSA9IG5ldyBDb25uZWN0aW9uRXZlbnQodGhpcywgQ29ubmVjdGlvbkV2ZW50LkNPTk5FQ1RJT05fQ0xPU0VEKTsKICAgICB9CiAKICAgICAvKioKICAgICAgKiBBZGRzIGEgY29ubmVjdGlvbiBldmVudCBsaXN0ZW5lciB0byB0aGUgTWFuYWdlZENvbm5lY3Rpb24gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbGlzdGVuZXIJPGNvZGU+Q29ubmVjdGlvbkV2ZW50TGlzdGVuZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGxpc3RlbmVyICAgIDxjb2RlPkNvbm5lY3Rpb25FdmVudExpc3RlbmVyPC9jb2RlPgogICAgICAqIEBzZWUgPGNvZGU+cmVtb3ZlQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgYWRkQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXIoQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXIgbGlzdGVuZXIpIHsKLQl0aGlzLmxpc3RlbmVyID0gbGlzdGVuZXI7CisgICAgdGhpcy5saXN0ZW5lciA9IGxpc3RlbmVyOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFVzZWQgYnkgdGhlIGNvbnRhaW5lciB0byBjaGFuZ2UgdGhlIGFzc29jaWF0aW9uIG9mIGFuIGFwcGxpY2F0aW9uLWxldmVsIAorICAgICAqIFVzZWQgYnkgdGhlIGNvbnRhaW5lciB0byBjaGFuZ2UgdGhlIGFzc29jaWF0aW9uIG9mIGFuIGFwcGxpY2F0aW9uLWxldmVsCiAgICAgICogY29ubmVjdGlvbiBoYW5kbGUgd2l0aCBhIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQljb25uZWN0aW9uCTxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRvIGJlIGFzc29jaWF0ZWQgd2l0aAotICAgICAqCQkJCXRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBubyBtb3JlCi0gICAgICoJCQkJCXZhbGlkIG9yIHRoZSBjb25uZWN0aW9uIGhhbmRsZSBwYXNzZWQgaXMgbnVsbAorICAgICAqIEBwYXJhbSAgICBjb25uZWN0aW9uICAgIDxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRvIGJlIGFzc29jaWF0ZWQgd2l0aAorICAgICAqICAgICAgICAgICAgICAgIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBubyBtb3JlCisgICAgICogICAgICAgICAgICAgICAgICAgIHZhbGlkIG9yIHRoZSBjb25uZWN0aW9uIGhhbmRsZSBwYXNzZWQgaXMgbnVsbAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGFzc29jaWF0ZUNvbm5lY3Rpb24oT2JqZWN0IGNvbm5lY3Rpb24pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC0xNTIsMTEgKzE1MiwxMSBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJDb25uZWN0aW9uIGhhbmRsZSBjYW5ub3QgYmUgbnVsbCIpOwogICAgICAgICB9CiAgICAgICAgIENvbm5lY3Rpb25Ib2xkZXIgY2ggPSAoQ29ubmVjdGlvbkhvbGRlcikgY29ubmVjdGlvbjsKLSAgICAgICAgCisKICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1jID0gKGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiljaC5nZXRNYW5hZ2VkQ29ubmVjdGlvbigpOwotCW1jLmFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOwotCWlzQ2xlYW4gPSBmYWxzZTsKLSAgICAgICAgCisgICAgbWMuYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7CisgICAgaXNDbGVhbiA9IGZhbHNlOworCiAgICAgICAgIGNoLmFzc29jaWF0ZUNvbm5lY3Rpb24oYWN0dWFsQ29ubmVjdGlvbiwgdGhpcyk7CiAgICAgICAgIC8qKgogICAgICAgICAgKiBUaGUgZXhwZWN0YXRpb24gZnJvbSB0aGUgYWJvdmUgbWV0aG9kIGlzIHRoYXQgdGhlIGNvbm5lY3Rpb24gaG9sZGVyCkBAIC0xNjUsMzQgKzE2NSwzNCBAQAogICAgICAgICAgKiB0byB0aGUgTWFuYWdlZENvbm5lY3Rpb24gaW5zdGFuY2Ugd2l0aCB0aGlzIE1hbmFnZWRDb25uZWN0aW9uIGluc3RhbmNlLgogICAgICAgICAgKiBBbnkgcHJldmlvdXMgc3RhdGVtZW50cyBhbmQgcmVzdWx0IHNldHMgYWxzbyBuZWVkIHRvIGJlIHJlbW92ZWQuCiAgICAgICAgICAqLwotICAgICAgICAgCisKICAgICAgICAgIGlmKGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgIT0gbnVsbCkgewogICAgICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZS5zZXRBY3RpdmUoZmFsc2UpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGNoLnNldEFjdGl2ZSh0cnVlKTsKLSAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IGNoOyAKKyAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IGNoOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIEFwcGxpY2F0aW9uIHNlcnZlciBjYWxscyB0aGlzIG1ldGhvZCB0byBmb3JjZSBhbnkgY2xlYW51cCBvbiB0aGUgCisgICAgICogQXBwbGljYXRpb24gc2VydmVyIGNhbGxzIHRoaXMgbWV0aG9kIHRvIGZvcmNlIGFueSBjbGVhbnVwIG9uIHRoZQogICAgICAqIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4gVGhpcyBtZXRob2QgY2FsbHMgdGhlIGludmFsaWRhdGUKICAgICAgKiBtZXRob2Qgb24gYWxsIENvbm5lY3Rpb25IYW5kbGVzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPi4KLSAgICAgKiAKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vIG1vcmUgdmFsaWQKKyAgICAgKgorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm8gbW9yZSB2YWxpZAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNsZWFudXAoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBjbGVhbnVwIik7CiAgICAgICAgIH0KICAgICAgICAgY2hlY2tJZlZhbGlkKCk7Ci0gICAgICAgIAorCiAgICAgICAgIC8qKgogICAgICAgICAgKiBtYXkgbmVlZCB0byBzZXQgdGhlIGF1dG9jb21taXQgdG8gdHJ1ZSBmb3IgdGhlIG5vbi1wb29sZWQgY2FzZS4KICAgICAgICAgICovCiAgICAgICAgIC8vR0pDSU5UCi0JLy9pZiAoYWN0dWFsQ29ubmVjdGlvbiAhPSBudWxsKSB7Ci0JaWYgKGNvbm5lY3Rpb25UeXBlID09IElTTk9UQVBPT0xFRENPTk5FQ1RJT04gKSB7CisgICAgLy9pZiAoYWN0dWFsQ29ubmVjdGlvbiAhPSBudWxsKSB7CisgICAgaWYgKGNvbm5lY3Rpb25UeXBlID09IElTTk9UQVBPT0xFRENPTk5FQ1RJT04gKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpc29sYXRpb25MZXZlbFdoZW5DbGVhbmVkID0gYWN0dWFsQ29ubmVjdGlvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpOwogICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7CkBAIC0yMDEsMTcgKzIwMSwxNyBAQAogICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaXNDbGVhbiA9IHRydWU7Ci0gICAgICAgIAorCiAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRoaXMgbWV0aG9kIHJlbW92ZXMgYWxsIHRoZSBjb25uZWN0aW9uIGhhbmRsZXMgZnJvbSB0aGUgdGFibGUKICAgICAgKiBvZiBjb25uZWN0aW9uIGhhbmRsZXMgYW5kIGludmFsaWRhdGVzIGFsbCBvZiB0aGVtIHNvIHRoYXQgYW55CiAgICAgICogb3BlcmF0aW9uIG9uIHRob3NlIGNvbm5lY3Rpb24gaGFuZGxlcyB0aHJvd3MgYW4gZXhjZXB0aW9uLgogICAgICAqCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhIHByb2JsZW0gaW4gcmV0cmlldmluZwotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJdGhlIGNvbm5lY3Rpb24gaGFuZGxlcworICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYSBwcm9ibGVtIGluIHJldHJpZXZpbmcKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb25uZWN0aW9uIGhhbmRsZXMKICAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgaW52YWxpZGF0ZUFsbENvbm5lY3Rpb25IYW5kbGVzKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgU2V0IGhhbmRsZXMgPSBjb25uZWN0aW9uSGFuZGxlcy5rZXlTZXQoKTsKQEAgLTIyNiwyMiArMjI2LDIyIEBACiAgICAgICAgIH0KICAgICAgICAgY29ubmVjdGlvbkhhbmRsZXMuY2xlYXIoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBEZXN0cm95cyB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiB0byB0aGUgdW5kZXJseWluZyByZXNvdXJjZSBtYW5hZ2VyLgotICAgICAqIAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2xvc2luZyB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbgorICAgICAqCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjbG9zaW5nIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBkZXN0cm95Iik7CiAgICAgICAgIH0KLQkvL0dKQ0lOVAotCWlmKGlzRGVzdHJveWVkID09IHRydWUpIHsKLQkgICAgcmV0dXJuOwkKLQl9CisgICAgLy9HSkNJTlQKKyAgICBpZihpc0Rlc3Ryb3llZCA9PSB0cnVlKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLQlhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKKyAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGlmKGNvbm5lY3Rpb25UeXBlID09IElTWEFDT05ORUNUSU9OIHx8IGNvbm5lY3Rpb25UeXBlID09IElTUE9PTEVEQ09OTkVDVElPTikgewogICAgICAgICAgICAgICAgIHBjLmNsb3NlKCk7CkBAIC0yNTUsMjggKzI1NSwyOCBAQAogICAgICAgICAgICAgaXNEZXN0cm95ZWQgPSB0cnVlOwogICAgICAgICAgICAgcGFzc3dkQ3JlZGVudGlhbCA9IG51bGw7CiAgICAgICAgICAgICBjb25uZWN0aW9uSGFuZGxlcyA9IG51bGw7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBmb2xsb3dpbmcgZXhjZXB0aW9uIGhhcyBvY2N1cmVkIGR1cmluZyBkZXN0cm95OiAiIAorICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgZm9sbG93aW5nIGV4Y2VwdGlvbiBoYXMgb2NjdXJlZCBkdXJpbmcgZGVzdHJveTogIgogICAgICAgICAgICAgICAgICsgc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgICAgIGlzRGVzdHJveWVkID0gdHJ1ZTsKICAgICAgICAgcGFzc3dkQ3JlZGVudGlhbCA9IG51bGw7CiAgICAgICAgIGNvbm5lY3Rpb25IYW5kbGVzID0gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgbmV3IGNvbm5lY3Rpb24gaGFuZGxlIGZvciB0aGUgdW5kZXJseWluZyBwaHlzaWNhbCAKKyAgICAgKiBDcmVhdGVzIGEgbmV3IGNvbm5lY3Rpb24gaGFuZGxlIGZvciB0aGUgdW5kZXJseWluZyBwaHlzaWNhbAogICAgICAqIGNvbm5lY3Rpb24gcmVwcmVzZW50ZWQgYnkgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlzdWJqZWN0CTxjb2RlPlN1YmplY3Q8L2NvZGU+IHBhcmFtZXRlciBuZWVkZWQgZm9yIGF1dGhlbnRpY2F0aW9uCi0gICAgICogQHBhcmFtCWN4UmVxSW5mbwk8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IGNhcnJpZXMgdGhlIHVzZXIgCi0gICAgICogICAgICAgCSAgICAgICAgIAlhbmQgcGFzc3dvcmQgcmVxdWlyZWQgZm9yIGdldHRpbmcgdGhpcyBjb25uZWN0aW9uLgotICAgICAqIEByZXR1cm4JQ29ubmVjdGlvbgl0aGUgY29ubmVjdGlvbiBoYW5kbGUgPGNvZGU+T2JqZWN0PC9jb2RlPgotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUgCi0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAlwaHlzaWNhbCBjb25uZWN0aW9uIGZyb20gdGhlIHBvb2xlZCBjb25uZWN0aW9uIAotICAgICAqIEB0aHJvd3MJU2VjdXJpdHlFeGNlcHRpb24JaWYgdGhlcmUgaXMgYSBtaXNtYXRjaCBiZXR3ZWVuIHRoZQotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJcGFzc3dvcmQgY3JlZGVudGlhbHMgb3IgcmVhdXRoZW50aWNhdGlvbiBpcyByZXF1ZXN0ZWQKKyAgICAgKiBAcGFyYW0gICAgc3ViamVjdCAgICA8Y29kZT5TdWJqZWN0PC9jb2RlPiBwYXJhbWV0ZXIgbmVlZGVkIGZvciBhdXRoZW50aWNhdGlvbgorICAgICAqIEBwYXJhbSAgICBjeFJlcUluZm8gICAgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBjYXJyaWVzIHRoZSB1c2VyCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICBhbmQgcGFzc3dvcmQgcmVxdWlyZWQgZm9yIGdldHRpbmcgdGhpcyBjb25uZWN0aW9uLgorICAgICAqIEByZXR1cm4gICAgQ29ubmVjdGlvbiAgICB0aGUgY29ubmVjdGlvbiBoYW5kbGUgPGNvZGU+T2JqZWN0PC9jb2RlPgorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoeXNpY2FsIGNvbm5lY3Rpb24gZnJvbSB0aGUgcG9vbGVkIGNvbm5lY3Rpb24KKyAgICAgKiBAdGhyb3dzICAgIFNlY3VyaXR5RXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGEgbWlzbWF0Y2ggYmV0d2VlbiB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkIGNyZWRlbnRpYWxzIG9yIHJlYXV0aGVudGljYXRpb24gaXMgcmVxdWVzdGVkCiAgICAgICovCi0gICAgcHVibGljIE9iamVjdCBnZXRDb25uZWN0aW9uKFN1YmplY3Qgc3ViLCBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm8gY3hSZXFJbmZvKSAKKyAgICBwdWJsaWMgT2JqZWN0IGdldENvbm5lY3Rpb24oU3ViamVjdCBzdWIsIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mbyBjeFJlcUluZm8pCiAgICAgICAgIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CiAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gZ2V0Q29ubmVjdGlvbiIpOwpAQCAtMjg0LDE0ICsyODQsMTQgQEAKICAgICAgICAgY2hlY2tJZlZhbGlkKCk7CiAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm8gY3hSZXF1ZXN0SW5mbyA9IChjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZvKSBjeFJlcUluZm87CiAgICAgICAgIFBhc3N3b3JkQ3JlZGVudGlhbCBwYXNzd2RDcmVkID0gU2VjdXJpdHlVdGlscy5nZXRQYXNzd29yZENyZWRlbnRpYWwodGhpcy5tY2YsIHN1YiwgY3hSZXF1ZXN0SW5mbyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICBpZihTZWN1cml0eVV0aWxzLmlzUGFzc3dvcmRDcmVkZW50aWFsRXF1YWwodGhpcy5wYXNzd2RDcmVkZW50aWFsLCBwYXNzd2RDcmVkKSA9PSBmYWxzZSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IGpha2FydGEucmVzb3VyY2Uuc3BpLlNlY3VyaXR5RXhjZXB0aW9uKCJSZS1hdXRoZW50aWNhdGlvbiBub3Qgc3VwcG9ydGVkIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgLy9HSkNJTlQKICAgICAgICAgZ2V0QWN0dWFsQ29ubmVjdGlvbigpOwotIAorCiAgICAgICAgIC8qKgogICAgICAgICAgKiBUaGUgZm9sbG93aW5nIGNvZGUgaW4gdGhlIGlmIHN0YXRlbWVudCBmaXJzdCBjaGVja3MgaWYgdGhpcyBNYW5hZ2VkQ29ubmVjdGlvbgogICAgICAgICAgKiBpcyBjbGVhbiBvciBub3QuIElmIGl0IGlzLCBpdCByZXNldHMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbCB0byB3aGF0CkBAIC0zMDEsMjggKzMwMSwyOCBAQAogICAgICAgICBpZihpc0NsZWFuKSB7CiAgICAgICAgICAgICAoKGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkpbWNmKS5yZXNldElzb2xhdGlvbih0aGlzLCBpc29sYXRpb25MZXZlbFdoZW5DbGVhbmVkKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgIAorCisKICAgICAgICAgQ29ubmVjdGlvbkhvbGRlciBjb25uSG9sZGVyT2JqZWN0ID0gbmV3IENvbm5lY3Rpb25Ib2xkZXIoYWN0dWFsQ29ubmVjdGlvbiwgdGhpcyk7Ci0JaXNDbGVhbj1mYWxzZTsKLSAgICAgICAgCisgICAgaXNDbGVhbj1mYWxzZTsKKwogICAgICAgICBpZihhY3RpdmVDb25uZWN0aW9uSGFuZGxlICE9IG51bGwpIHsKICAgICAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUuc2V0QWN0aXZlKGZhbHNlKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBjb25uSG9sZGVyT2JqZWN0LnNldEFjdGl2ZSh0cnVlKTsKICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IGNvbm5Ib2xkZXJPYmplY3Q7Ci0gCisKICAgICAgICAgcmV0dXJuIGNvbm5Ib2xkZXJPYmplY3Q7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBhbiA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4gVGhlIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IGludGVyZmFjZQotICAgICAqIGlzIHVzZWQgYnkgdGhlIGNvbnRhaW5lciB0byBtYW5hZ2UgbG9jYWwgdHJhbnNhY3Rpb25zIGZvciBhIFJNIGluc3RhbmNlLiAKKyAgICAgKiBpcyB1c2VkIGJ5IHRoZSBjb250YWluZXIgdG8gbWFuYWdlIGxvY2FsIHRyYW5zYWN0aW9ucyBmb3IgYSBSTSBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqIEByZXR1cm4gICAgPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqLwogICAgIHB1YmxpYyBqYWthcnRhLnJlc291cmNlLnNwaS5Mb2NhbFRyYW5zYWN0aW9uIGdldExvY2FsVHJhbnNhY3Rpb24oKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtMzMxLDEzICszMzEsMTMgQEAKICAgICAgICAgY2hlY2tJZlZhbGlkKCk7CiAgICAgICAgIHJldHVybiBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLkxvY2FsVHJhbnNhY3Rpb24odGhpcyk7CiAgICAgfQotICAgICAKKwogICAgIC8qKgotICAgICAqIEdldHMgdGhlIGxvZyB3cml0ZXIgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLiAKKyAgICAgKiBHZXRzIHRoZSBsb2cgd3JpdGVyIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIAotICAgICAqCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqIEByZXR1cm4gICAgPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzCisgICAgICogICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCiAgICAgICogQHNlZSA8Y29kZT5zZXRMb2dXcml0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFByaW50V3JpdGVyIGdldExvZ1dyaXRlcigpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CkBAIC0zNDUsNDYgKzM0NSw0NiBAQAogICAgICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBnZXRMb2dXcml0ZXIiKTsKICAgICAgICAgfQogICAgICAgICBjaGVja0lmVmFsaWQoKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGxvZ1dyaXRlcjsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBtZXRhZGF0YSBpbmZvcm1hdGlvbiBmb3IgdGhpcyBjb25uZWN0aW9uJ3MgdW5kZXJseWluZyBFSVMgCi0gICAgICogcmVzb3VyY2UgbWFuYWdlciBpbnN0YW5jZS4gCisgICAgICogR2V0cyB0aGUgbWV0YWRhdGEgaW5mb3JtYXRpb24gZm9yIHRoaXMgY29ubmVjdGlvbidzIHVuZGVybHlpbmcgRUlTCisgICAgICogcmVzb3VyY2UgbWFuYWdlciBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YTwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqIEByZXR1cm4gICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YTwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqLwogICAgIHB1YmxpYyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhIGdldE1ldGFEYXRhKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gZ2V0TWV0YURhdGEiKTsKICAgICAgICAgfQogICAgICAgICBjaGVja0lmVmFsaWQoKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YSh0aGlzKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIGFuIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlLiAKKyAgICAgKiBSZXR1cm5zIGFuIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIG9yCi0gICAgICoJCQkJCXRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlIAotICAgICAqCQkJCQk8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJTm90U3VwcG9ydGVkRXhjZXB0aW9uCWlmIHVuZGVybHlpbmcgZGF0YXNvdXJjZSBpcyBub3QgYW4KLSAgICAgKgkJCQkJPGNvZGU+WEFEYXRhU291cmNlPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBvcgorICAgICAqICAgICAgICAgICAgICAgICAgICB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgTm90U3VwcG9ydGVkRXhjZXB0aW9uICAgIGlmIHVuZGVybHlpbmcgZGF0YXNvdXJjZSBpcyBub3QgYW4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgPGNvZGU+WEFEYXRhU291cmNlPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBYQVJlc291cmNlIGdldFhBUmVzb3VyY2UoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBnZXRYQVJlc291cmNlIik7CiAgICAgICAgIH0KICAgICAgICAgY2hlY2tJZlZhbGlkKCk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKGNvbm5lY3Rpb25UeXBlID09IElTWEFDT05ORUNUSU9OKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGlmKHhhciA9PSBudWxsKSB7Ci0JCSAgICAvKioKKyAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgICAgICAgICAgKiBVc2luZyB0aGUgd3JhcHBlciBYQVJlc291cmNlLgogICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICAgeGFyID0gbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5YQVJlc291cmNlSW1wbCgoKFhBQ29ubmVjdGlvbilwYykuZ2V0WEFSZXNvdXJjZSgpLCB0aGlzKTsKQEAgLTM5NywxNiArMzk3LDE2IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJDYW5ub3QgZ2V0IGFuIFhBUmVzb3VyY2UgZnJvbSBhIG5vbiBYQSBjb25uZWN0aW9uIik7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZW1vdmVzIGFuIGFscmVhZHkgcmVnaXN0ZXJlZCBjb25uZWN0aW9uIGV2ZW50IGxpc3RlbmVyIGZyb20gdGhlCiAgICAgICogPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCWxpc3RlbmVyCTxjb2RlPkNvbm5lY3Rpb25FdmVudExpc3RlbmVyPC9jb2RlPiB0byBiZSByZW1vdmVkCisgICAgICogQHBhcmFtICAgIGxpc3RlbmVyICAgIDxjb2RlPkNvbm5lY3Rpb25FdmVudExpc3RlbmVyPC9jb2RlPiB0byBiZSByZW1vdmVkCiAgICAgICogQHNlZSA8Y29kZT5hZGRDb25uZWN0aW9uRXZlbnRMaXN0ZW5lcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCByZW1vdmVDb25uZWN0aW9uRXZlbnRMaXN0ZW5lcihDb25uZWN0aW9uRXZlbnRMaXN0ZW5lciBsaXN0ZW5lcikgewotCWxpc3RlbmVyID0gbnVsbDsKKyAgICBsaXN0ZW5lciA9IG51bGw7CiAgICAgfQogCiAgICAgLyoqCkBAIC00MTUsNyArNDE1LDcgQEAKICAgICAgKiBMb2NhbFRyYW5zYWN0aW9uIG9iamVjdCB3aGVuIGl0cyBiZWdpbigpIG1ldGhvZCBpcyBjYWxsZWQuCiAgICAgICovCiAgICAgdm9pZCB0cmFuc2FjdGlvblN0YXJ0ZWQoKSB7Ci0JdHJhbnNhY3Rpb25JblByb2dyZXNzID0gdHJ1ZTsJCisgICAgdHJhbnNhY3Rpb25JblByb2dyZXNzID0gdHJ1ZTsKICAgICB9CiAKICAgICAvKioKQEAgLTQyNCwxNiArNDI0LDE2IEBACiAgICAgICogTG9jYWxUcmFuc2FjdGlvbiBvYmplY3Qgd2hlbiBpdHMgZW5kKCkgbWV0aG9kIGlzIGNhbGxlZC4KICAgICAgKi8KICAgICB2b2lkIHRyYW5zYWN0aW9uQ29tcGxldGVkKCkgewotCXRyYW5zYWN0aW9uSW5Qcm9ncmVzcyA9IGZhbHNlOwotCWlmKGNvbm5lY3Rpb25UeXBlID09IElTUE9PTEVEQ09OTkVDVElPTiB8fCBjb25uZWN0aW9uVHlwZSA9PSBJU1hBQ09OTkVDVElPTikgeworICAgIHRyYW5zYWN0aW9uSW5Qcm9ncmVzcyA9IGZhbHNlOworICAgIGlmKGNvbm5lY3Rpb25UeXBlID09IElTUE9PTEVEQ09OTkVDVElPTiB8fCBjb25uZWN0aW9uVHlwZSA9PSBJU1hBQ09OTkVDVElPTikgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBpc29sYXRpb25MZXZlbFdoZW5DbGVhbmVkID0gYWN0dWFsQ29ubmVjdGlvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpOwogICAgICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICAgICAgLy9jaGVjayB3aGF0IHRvIGRvIGluIHRoaXMgY2FzZSEhCi0JCV9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLm5vdGdvdF90eF9pc29sdmwiKTsKKyAgICAgICAgICAgIC8vY2hlY2sgd2hhdCB0byBkbyBpbiB0aGlzIGNhc2UhIQorICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5ub3Rnb3RfdHhfaXNvbHZsIik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLQkgICAgdHJ5IHsKKworICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGFjdHVhbENvbm5lY3Rpb24uY2xvc2UoKTsKICAgICAgICAgICAgICAgICBhY3R1YWxDb25uZWN0aW9uID0gbnVsbDsKICAgICAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKQEAgLTQ0MSw3ICs0NDEsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLQkgICAgICAgIAorCiAgICAgICAgIGlzQ2xlYW4gPSB0cnVlOwogCiAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOwpAQCAtNDUzLDI4ICs0NTMsMjggQEAKICAgICAgKiBvciBub3QuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gaXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSB7Ci0JcmV0dXJuIHRyYW5zYWN0aW9uSW5Qcm9ncmVzczsKKyAgICByZXR1cm4gdHJhbnNhY3Rpb25JblByb2dyZXNzOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGxvZyB3cml0ZXIgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCW91dAk8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMKLSAgICAgKgkJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICogQHBhcmFtICAgIG91dCAgICA8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyAgICAgKiAgICAgICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCiAgICAgICogQHNlZSA8Y29kZT5nZXRMb2dXcml0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TG9nV3JpdGVyKFByaW50V3JpdGVyIG91dCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgY2hlY2tJZlZhbGlkKCk7CiAgICAgICAgIGxvZ1dyaXRlciA9IG91dDsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBUaGlzIG1ldGhvZCBkZXRlcm1pbmVzIHRoZSB0eXBlIG9mIHRoZSBjb25uZWN0aW9uIGJlaW5nIGhlbGQgCisgICAgICogVGhpcyBtZXRob2QgZGV0ZXJtaW5lcyB0aGUgdHlwZSBvZiB0aGUgY29ubmVjdGlvbiBiZWluZyBoZWxkCiAgICAgICogaW4gdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4uCi0gICAgICogCi0gICAgICogQHBhcmFtCXBvb2xlZENvbm4JPGNvZGU+UG9vbGVkQ29ubmVjdGlvbjwvY29kZT4KLSAgICAgKiBAcmV0dXJuCWNvbm5lY3Rpb24gdHlwZQorICAgICAqCisgICAgICogQHBhcmFtICAgIHBvb2xlZENvbm4gICAgPGNvZGU+UG9vbGVkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGNvbm5lY3Rpb24gdHlwZQogICAgICAqLwogICAgIHByaXZhdGUgaW50IGdldENvbm5lY3Rpb25UeXBlKFBvb2xlZENvbm5lY3Rpb24gcG9vbGVkQ29ubikgewogICAgICAgICBpZihwb29sZWRDb25uID09IG51bGwpIHsKQEAgLTQ4NSwyMiArNDg1LDIyIEBACiAgICAgICAgICAgICByZXR1cm4gSVNQT09MRURDT05ORUNUSU9OOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZSB0aGF0IAorICAgICAqIFJldHVybnMgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UgdGhhdAogICAgICAqIGNyZWF0ZWQgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UgdGhhdCBjcmVhdGVkIHRoaXMKLSAgICAgKgkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCisgICAgICogQHJldHVybiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlIHRoYXQgY3JlYXRlZCB0aGlzCisgICAgICogICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQogICAgICAqLwogICAgIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBnZXRNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkoKSB7CiAgICAgICAgIHJldHVybiAoY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSltY2Y7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgYWN0dWFsIHNxbCBjb25uZWN0aW9uIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPi4gCisgICAgICogUmV0dXJucyB0aGUgYWN0dWFsIHNxbCBjb25uZWN0aW9uIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPi4KICAgICAgKgotICAgICAqIEByZXR1cm4JdGhlIHBoeXNpY2FsIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICB0aGUgcGh5c2ljYWwgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4KICAgICAgKi8KICAgICAvL0dKQ0lOVAogICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gZ2V0QWN0dWFsQ29ubmVjdGlvbigpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CkBAIC01MDksOCArNTA5LDggQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgaWYoYWN0dWFsQ29ubmVjdGlvbiA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIGFjdHVhbENvbm5lY3Rpb24gPSBwYy5nZXRDb25uZWN0aW9uKCk7Ci0JCX0KLQkJCisgICAgICAgIH0KKwogICAgICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewogICAgICAgICAgICAgICAgIHNxbGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKQEAgLTUxOCw4MSArNTE4LDgxIEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGFjdHVhbENvbm5lY3Rpb247CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+LgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzIAotICAgICAqCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyAgICAgKiAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCiAgICAgICovCiAgICAgUGFzc3dvcmRDcmVkZW50aWFsIGdldFBhc3N3b3JkQ3JlZGVudGlhbCgpIHsKICAgICAgICAgcmV0dXJuIHBhc3N3ZENyZWRlbnRpYWw7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2hlY2tzIGlmIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGlzIHZhbGlkIG9yIG5vdCBhbmQgdGhyb3dzIGFuCiAgICAgICogZXhjZXB0aW9uIGlmIGl0IGlzIG5vdCB2YWxpZC4gQSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaXMgbm90IHZhbGlkIGlmCiAgICAgICogZGVzdHJveSBoYXMgbm90IGJlZW4gY2FsbGVkIGFuZCBubyBwaHlzaWNhbCBjb25uZWN0aW9uIGVycm9yIGhhcwogICAgICAqIG9jY3VycmVkIHJlbmRlcmluZyB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiB1bnVzYWJsZS4KICAgICAgKgotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgPGNvZGU+ZGVzdHJveTwvY29kZT4gaGFzIGJlZW4gY2FsbGVkIG9uIHRoaXMgCi0gICAgICoJCQkJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZSBvciBpZiBhIAotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJcGh5c2ljYWwgY29ubmVjdGlvbiBlcnJvciBvY2N1cnJlZCByZW5kZXJpbmcgaXQgdW51c2FibGUKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIDxjb2RlPmRlc3Ryb3k8L2NvZGU+IGhhcyBiZWVuIGNhbGxlZCBvbiB0aGlzCisgICAgICogICAgICAgICAgICAgICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZSBvciBpZiBhCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaHlzaWNhbCBjb25uZWN0aW9uIGVycm9yIG9jY3VycmVkIHJlbmRlcmluZyBpdCB1bnVzYWJsZQogICAgICAqLwogICAgIC8vR0pDSU5UCiAgICAgdm9pZCBjaGVja0lmVmFsaWQoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihpc0Rlc3Ryb3llZCA9PSB0cnVlIHx8IGlzVXNhYmxlID09IGZhbHNlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoaXMgTWFuYWdlZENvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzIHRoZSBwaHlzaWNhbCAiICsgCisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoaXMgTWFuYWdlZENvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzIHRoZSBwaHlzaWNhbCAiICsKICAgICAgICAgICAgICAgICAiY29ubmVjdGlvbiBpcyBub3QgdXNhYmxlLiIpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSA8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB3aGVuIGl0cyBjbG9zZSBtZXRob2QgaXMKICAgICAgKiBjYWxsZWQuIFRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlICBpbnZhbGlkYXRlcyB0aGUgY29ubmVjdGlvbiBoYW5kbGUKICAgICAgKiBhbmQgc2VuZHMgYSBDT05ORUNUSU9OX0NMT1NFRCBldmVudCB0byBhbGwgdGhlIHJlZ2lzdGVyZWQgZXZlbnQgbGlzdGVuZXJzLgogICAgICAqCi0gICAgICogQHBhcmFtCWUJRXhjZXB0aW9uIHRoYXQgbWF5IGhhdmUgb2NjdXJlZCB3aGlsZSBjbG9zaW5nIHRoZSBjb25uZWN0aW9uIGhhbmRsZQotICAgICAqIEBwYXJhbQljb25uSG9sZGVyT2JqZWN0CTxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRoYXQgaGFzIGJlZW4gY2xvc2VkCi0gICAgICogQHRocm93cwlTUUxFeGNlcHRpb24JaW4gY2FzZSBjbG9zaW5nIHRoZSBzcWwgY29ubmVjdGlvbiBnb3Qgb3V0IG9mCi0gICAgICogICAgICAgICAJICAgICAgICAgICAgCTxjb2RlPmdldENvbm5lY3Rpb248L2NvZGU+IG9uIHRoZSB1bmRlcmx5aW5nIAotICAgICAqCQkJCTxjb2RlPlBvb2xlZENvbm5lY3Rpb248L2NvZGU+IHRocm93cyBhbiBleGNlcHRpb24KKyAgICAgKiBAcGFyYW0gICAgZSAgICBFeGNlcHRpb24gdGhhdCBtYXkgaGF2ZSBvY2N1cmVkIHdoaWxlIGNsb3NpbmcgdGhlIGNvbm5lY3Rpb24gaGFuZGxlCisgICAgICogQHBhcmFtICAgIGNvbm5Ib2xkZXJPYmplY3QgICAgPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdGhhdCBoYXMgYmVlbiBjbG9zZWQKKyAgICAgKiBAdGhyb3dzICAgIFNRTEV4Y2VwdGlvbiAgICBpbiBjYXNlIGNsb3NpbmcgdGhlIHNxbCBjb25uZWN0aW9uIGdvdCBvdXQgb2YKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+Z2V0Q29ubmVjdGlvbjwvY29kZT4gb24gdGhlIHVuZGVybHlpbmcKKyAgICAgKiAgICAgICAgICAgICAgICA8Y29kZT5Qb29sZWRDb25uZWN0aW9uPC9jb2RlPiB0aHJvd3MgYW4gZXhjZXB0aW9uCiAgICAgICovCiAgICAgdm9pZCBjb25uZWN0aW9uQ2xvc2VkKEV4Y2VwdGlvbiBlLCBDb25uZWN0aW9uSG9sZGVyIGNvbm5Ib2xkZXJPYmplY3QpIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgICBjb25uSG9sZGVyT2JqZWN0LmludmFsaWRhdGUoKTsKLSAgICAgICAgCisKICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7Ci0gICAgICAgIAorCiAgICAgICAgIGNlLnNldENvbm5lY3Rpb25IYW5kbGUoY29ubkhvbGRlck9iamVjdCk7CiAgICAgICAgIGxpc3RlbmVyLmNvbm5lY3Rpb25DbG9zZWQoY2UpOwotCQorCiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSA8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB3aGVuIGl0IGRldGVjdHMgYSBjb25uZWNpb24KICAgICAgKiByZWxhdGVkIGVycm9yLgogICAgICAqCi0gICAgICogQHBhcmFtCWUJRXhjZXB0aW9uIHRoYXQgaGFzIG9jY3VycmVkIGR1cmluZyBhbiBvcGVyYXRpb24gb24gdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24KLSAgICAgKiBAcGFyYW0JY29ubkhvbGRlck9iamVjdAk8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0aGF0IGRldGVjdGVkIHRoZSBwaHlzaWNhbAotICAgICAqCQkJCQljb25uZWN0aW9uIGVycm9yCisgICAgICogQHBhcmFtICAgIGUgICAgRXhjZXB0aW9uIHRoYXQgaGFzIG9jY3VycmVkIGR1cmluZyBhbiBvcGVyYXRpb24gb24gdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24KKyAgICAgKiBAcGFyYW0gICAgY29ubkhvbGRlck9iamVjdCAgICA8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0aGF0IGRldGVjdGVkIHRoZSBwaHlzaWNhbAorICAgICAqICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uIGVycm9yCiAgICAgICovCi0gICAgdm9pZCBjb25uZWN0aW9uRXJyb3JPY2N1cnJlZChFeGNlcHRpb24gZSwgCisgICAgdm9pZCBjb25uZWN0aW9uRXJyb3JPY2N1cnJlZChFeGNlcHRpb24gZSwKICAgICAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uSG9sZGVyIGNvbm5Ib2xkZXJPYmplY3QpIHsKLQkgICAgCisKICAgICAgICAgIENvbm5lY3Rpb25FdmVudExpc3RlbmVyIGNlbCA9IHRoaXMubGlzdGVuZXI7CiAgICAgICAgICBDb25uZWN0aW9uRXZlbnQgY2UgPSBudWxsOwogICAgICAgICAgY2UgPSBlID09IG51bGwgPyBuZXcgQ29ubmVjdGlvbkV2ZW50KHRoaXMsIENvbm5lY3Rpb25FdmVudC5DT05ORUNUSU9OX0VSUk9SX09DQ1VSUkVEKQogICAgICAgICAgICAgICAgICAgICA6IG5ldyBDb25uZWN0aW9uRXZlbnQodGhpcywgQ29ubmVjdGlvbkV2ZW50LkNPTk5FQ1RJT05fRVJST1JfT0NDVVJSRUQsIGUpOwogICAgICAgICAgaWYgKGNvbm5Ib2xkZXJPYmplY3QgIT0gbnVsbCkgewogICAgICAgICAgICAgIGNlLnNldENvbm5lY3Rpb25IYW5kbGUoY29ubkhvbGRlck9iamVjdCk7Ci0gICAgICAgICB9ICAgIAorICAgICAgICAgfQogCiAgICAgICAgICBjZWwuY29ubmVjdGlvbkVycm9yT2NjdXJyZWQoY2UpOwogICAgICAgICAgaXNVc2FibGUgPSBmYWxzZTsKICAgICB9Ci0gICAgCi0gICAgCi0gICAgCisKKworCiAgICAgLyoqCiAgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBvYmplY3Qgd2hlbiBpdHMgc3RhcnQgbWV0aG9kCiAgICAgICogaGFzIGJlZW4gaW52b2tlZC4KQEAgLTYwNiw3ICs2MDYsNyBAQAogICAgICAgICAgICAgY29ubmVjdGlvbkVycm9yT2NjdXJyZWQoZSwgbnVsbCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IG9iamVjdCB3aGVuIGl0cyBlbmQgbWV0aG9kCiAgICAgICogaGFzIGJlZW4gaW52b2tlZC4KQEAgLTYyMCw3ICs2MjAsNyBAQAogICAgICAgICAgICAgY29ubmVjdGlvbkVycm9yT2NjdXJyZWQoZSwgbnVsbCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgYSBDb25uZWN0aW9uIEhhbmRsZSB0byBjaGVjayBpZiBpdCBpcwogICAgICAqIHRoZSBhY3RpdmUgQ29ubmVjdGlvbiBIYW5kbGUuIElmIGl0IGlzIG5vdCB0aGUgYWN0aXZlIENvbm5lY3Rpb24KQEAgLTYyOSwyNCArNjI5LDI0IEBACiAgICAgICogQ29ubmVjdGlvbiBIYW5kbGUgb2JqZWN0IHRvIHRoaXMgb2JqZWN0IGlmIHRoZSBhY3RpdmUgQ29ubmVjdGlvbgogICAgICAqIEhhbmRsZSBpcyBudWxsLgogICAgICAqCi0gICAgICogQHBhcmFtCWNoCTxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRoYXQgcmVxdWVzdHMgdGhpcwotICAgICAqCQkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlIHdoZXRoZXIKLSAgICAgKgkJCWl0IGNhbiBiZSBhY3RpdmUgb3Igbm90Ci0gICAgICogQHRocm93cwlTUUxFeGNlcHRpb24JaW4gY2FzZSB0aGUgcGh5c2ljYWwgaXMgbm90IHZhbGlkIG9yCi0gICAgICoJCQkJdGhlcmUgaXMgYWxyZWFkeSBhbiBhY3RpdmUgY29ubmVjdGlvbiBoYW5kbGUKKyAgICAgKiBAcGFyYW0gICAgY2ggICAgPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdGhhdCByZXF1ZXN0cyB0aGlzCisgICAgICogICAgICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2Ugd2hldGhlcgorICAgICAqICAgICAgICAgICAgaXQgY2FuIGJlIGFjdGl2ZSBvciBub3QKKyAgICAgKiBAdGhyb3dzICAgIFNRTEV4Y2VwdGlvbiAgICBpbiBjYXNlIHRoZSBwaHlzaWNhbCBpcyBub3QgdmFsaWQgb3IKKyAgICAgKiAgICAgICAgICAgICAgICB0aGVyZSBpcyBhbHJlYWR5IGFuIGFjdGl2ZSBjb25uZWN0aW9uIGhhbmRsZQogICAgICAqLwotICAgICAKKwogICAgIHZvaWQgY2hlY2tJZkFjdGl2ZShDb25uZWN0aW9uSG9sZGVyIGNoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgICAgaWYoaXNEZXN0cm95ZWQgPT0gdHJ1ZSB8fCBpc1VzYWJsZSA9PSBmYWxzZSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbigiVGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHVzYWJsZSIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmKGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPT0gbnVsbCkgewogICAgICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IGNoOwogICAgICAgICAgICAgY2guc2V0QWN0aXZlKHRydWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmKGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgIT0gY2gpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGhhbmRsZSBjYW5ub3QgYmUgdXNlZCBhcyBhbm90aGVyIGNvbm5lY3Rpb24gaXMgY3VycmVudGx5IGFjdGl2ZSIpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhLmphdmEKaW5kZXggMjBmMDNhYS4uZjY1MGQ0MSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEuamF2YQpAQCAtMjUsOCArMjUsOCBAQAogLyoqCiAgKiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA4LzAzCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wOC8wMworICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogcHVibGljIGNsYXNzIE1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEgaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhIHsKIApAQCAtNDEsODEgKzQxLDgxIEBACiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0b3IgZm9yIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGE8L2NvZGU+CiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWMJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+Ci0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4JaWYgZ2V0dGluZyB0aGUgRGF0YWJhc2VNZXRhRGF0YSBvYmplY3QgZmFpbHMKKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4gICAgaWYgZ2V0dGluZyB0aGUgRGF0YWJhc2VNZXRhRGF0YSBvYmplY3QgZmFpbHMKICAgICAgKi8KICAgICBwdWJsaWMgTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YShNYW5hZ2VkQ29ubmVjdGlvbiBtYykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHRoaXMubWMgPSBtYzsKICAgICAgICAgICAgIGRtZCA9IG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKS5nZXRNZXRhRGF0YSgpOwogICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX21kIik7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX21kIik7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBwcm9kdWN0IG5hbWUgb2YgdGhlIHVuZGVybHlpbmcgRUlTIGluc3RhbmNlIGNvbm5lY3RlZAogICAgICAqIHRocm91Z2ggdGhlIE1hbmFnZWRDb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybglQcm9kdWN0IG5hbWUgb2YgdGhlIEVJUyBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBQcm9kdWN0IG5hbWUgb2YgdGhlIEVJUyBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRFSVNQcm9kdWN0TmFtZSgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXR1cm4gZG1kLmdldERhdGFiYXNlUHJvZHVjdE5hbWUoKTsKICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19laXNfcHJvZG5hbWUiLCBzcWxlKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZWlzX3Byb2RuYW1lIiwgc3FsZSk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBwcm9kdWN0IHZlcnNpb24gb2YgdGhlIHVuZGVybHlpbmcgRUlTIGluc3RhbmNlIGNvbm5lY3RlZAogICAgICAqIHRocm91Z2ggdGhlIE1hbmFnZWRDb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybglQcm9kdWN0IHZlcnNpb24gb2YgdGhlIEVJUyBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBQcm9kdWN0IHZlcnNpb24gb2YgdGhlIEVJUyBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRFSVNQcm9kdWN0VmVyc2lvbigpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXR1cm4gZG1kLmdldERhdGFiYXNlUHJvZHVjdFZlcnNpb24oKTsKICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19laXNfcHJvZHZlcnMiLCBzcWxlKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZWlzX3Byb2R2ZXJzIiwgc3FsZSk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCksIHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgbWF4aW11bSBsaW1pdCBvbiBudW1iZXIgb2YgYWN0aXZlIGNvbmN1cnJlbnQgY29ubmVjdGlvbnMKICAgICAgKiB0aGF0IGFuIEVJUyBpbnN0YW5jZSBjYW4gc3VwcG9ydCBhY3Jvc3MgY2xpZW50IHByb2Nlc3Nlcy4KICAgICAgKgotICAgICAqIEByZXR1cm4JTWF4aW11bSBsaW1pdCBmb3IgbnVtYmVyIG9mIGFjdGl2ZSBjb25jdXJyZW50IGNvbm5lY3Rpb25zCi0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIE1heGltdW0gbGltaXQgZm9yIG51bWJlciBvZiBhY3RpdmUgY29uY3VycmVudCBjb25uZWN0aW9ucworICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIGludCBnZXRNYXhDb25uZWN0aW9ucygpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXR1cm4gZG1kLmdldE1heENvbm5lY3Rpb25zKCk7CiAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZWlzX21heGNvbm4iKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfZWlzX21heGNvbm4iKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIG5hbWUgb2YgdGhlIHVzZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBNYW5hZ2VkQ29ubmVjdGlvbiBpbnN0YW5jZS4gVGhlIG5hbWUKICAgICAgKiBjb3JyZXNwb25kcyB0byB0aGUgcmVzb3VyY2UgcHJpbmNpcGFsIHVuZGVyIHdob3NlIHdob3NlIHNlY3VyaXR5IGNvbnRleHQsIGEgY29ubmVjdGlvbgogICAgICAqIHRvIHRoZSBFSVMgaW5zdGFuY2UgaGFzIGJlZW4gZXN0YWJsaXNoZWQuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCW5hbWUgb2YgdGhlIHVzZXIKLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgbmFtZSBvZiB0aGUgdXNlcgorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRVc2VyTmFtZSgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGpha2FydGEucmVzb3VyY2Uuc3BpLnNlY3VyaXR5LlBhc3N3b3JkQ3JlZGVudGlhbCBwYyA9IG1jLmdldFBhc3N3b3JkQ3JlZGVudGlhbCgpOwogICAgICAgICBpZihwYyAhPSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm4gcGMuZ2V0VXNlck5hbWUoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXR1cm4gbWMuZ2V0TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KCkuZ2V0VXNlcigpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL1hBUmVzb3VyY2VJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9YQVJlc291cmNlSW1wbC5qYXZhCmluZGV4IGRhZDFkNzcuLjQ4MmYzMzIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL1hBUmVzb3VyY2VJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvWEFSZXNvdXJjZUltcGwuamF2YQpAQCAtMjQsMTQ4ICsyNCwxNDggQEAKIC8qKgogICogPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gd3JhcHBlciBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA4LzIzCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wOC8yMworICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogcHVibGljIGNsYXNzIFhBUmVzb3VyY2VJbXBsIGltcGxlbWVudHMgWEFSZXNvdXJjZSB7CiAKICAgICBYQVJlc291cmNlIHhhcjsKICAgICBNYW5hZ2VkQ29ubmVjdGlvbiBtYzsKLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdG9yIGZvciBYQVJlc291cmNlSW1wbAogICAgICAqCi0gICAgICogQHBhcmFtCXhhcgk8Y29kZT5YQVJlc291cmNlPC9jb2RlPgotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgeGFyICAgIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+CisgICAgICogQHBhcmFtICAgIG1jICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBYQVJlc291cmNlSW1wbChYQVJlc291cmNlIHhhciwgTWFuYWdlZENvbm5lY3Rpb24gbWMpIHsKICAgICAgICAgdGhpcy54YXIgPSB4YXI7CiAgICAgICAgIHRoaXMubWMgPSBtYzsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb21taXQgdGhlIGdsb2JhbCB0cmFuc2FjdGlvbiBzcGVjaWZpZWQgYnkgeGlkLgogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCi0gICAgICogQHBhcmFtCW9uZVBoYXNlCUlmIHRydWUsIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHNob3VsZCB1c2UgYSBvbmUtcGhhc2UgY29tbWl0IAotICAgICAqICAgICAgIAkgICAgICAgIAlwcm90b2NvbCB0byBjb21taXQgdGhlIHdvcmsgZG9uZSBvbiBiZWhhbGYgb2YgeGlkLgorICAgICAqIEBwYXJhbSAgICB4aWQgICAgQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgorICAgICAqIEBwYXJhbSAgICBvbmVQaGFzZSAgICBJZiB0cnVlLCB0aGUgcmVzb3VyY2UgbWFuYWdlciBzaG91bGQgdXNlIGEgb25lLXBoYXNlIGNvbW1pdAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICBwcm90b2NvbCB0byBjb21taXQgdGhlIHdvcmsgZG9uZSBvbiBiZWhhbGYgb2YgeGlkLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNvbW1pdChYaWQgeGlkLCBib29sZWFuIG9uZVBoYXNlKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICAvL3RoZSBtYy50cmFuc2FjdGlvbkNvbXBsZXRlZCBjYWxsIGhhcyBjb21lIGhlcmUgYmVjYXN1ZQotCS8vdGhlIHRyYW5zYWN0aW9uICphY3R1YWxseSogY29tcGxldGVzIGFmdGVyIHRoZSBmbG93Ci0JLy9yZWFjaGVzIGhlcmUuIHRoZSBlbmQoKSBtZXRob2QgbWlnaHQgbm90IHJlYWxseSBzaWduYWwKLQkvL2NvbXBsZXRpb24gb2YgdHJhbnNhY3Rpb24gaW4gY2FzZSB0aGUgdHJhbnNhY3Rpb24gaXMKLQkvL3N1c3BlbmRlZC4gSW4gY2FzZSBvZiB0cmFuc2FjdGlvbiBzdXNwZW5zaW9uLCB0aGUgZW5kCi0JLy9tZXRob2QgaXMgc3RpbGwgY2FsbGVkIGJ5IHRoZSB0cmFuc2FjdGlvbiBtYW5hZ2VyCi0JbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKKyAgICAvL3RoZSB0cmFuc2FjdGlvbiAqYWN0dWFsbHkqIGNvbXBsZXRlcyBhZnRlciB0aGUgZmxvdworICAgIC8vcmVhY2hlcyBoZXJlLiB0aGUgZW5kKCkgbWV0aG9kIG1pZ2h0IG5vdCByZWFsbHkgc2lnbmFsCisgICAgLy9jb21wbGV0aW9uIG9mIHRyYW5zYWN0aW9uIGluIGNhc2UgdGhlIHRyYW5zYWN0aW9uIGlzCisgICAgLy9zdXNwZW5kZWQuIEluIGNhc2Ugb2YgdHJhbnNhY3Rpb24gc3VzcGVuc2lvbiwgdGhlIGVuZAorICAgIC8vbWV0aG9kIGlzIHN0aWxsIGNhbGxlZCBieSB0aGUgdHJhbnNhY3Rpb24gbWFuYWdlcgorICAgIG1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiAgICAgICAgIHhhci5jb21taXQoeGlkLCBvbmVQaGFzZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogRW5kcyB0aGUgd29yayBwZXJmb3JtZWQgb24gYmVoYWxmIG9mIGEgdHJhbnNhY3Rpb24gYnJhbmNoLgogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyIHRoYXQgaXMgdGhlIHNhbWUgYXMgd2hhdCAKLSAgICAgKgkJCXdhcyB1c2VkIHByZXZpb3VzbHkgaW4gdGhlIHN0YXJ0IG1ldGhvZC4KLSAgICAgKiBAcGFyYW0JZmxhZ3MJT25lIG9mIFRNU1VDQ0VTUywgVE1GQUlMLCBvciBUTVNVU1BFTkQKKyAgICAgKiBAcGFyYW0gICAgeGlkICAgIEEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIgdGhhdCBpcyB0aGUgc2FtZSBhcyB3aGF0CisgICAgICogICAgICAgICAgICB3YXMgdXNlZCBwcmV2aW91c2x5IGluIHRoZSBzdGFydCBtZXRob2QuCisgICAgICogQHBhcmFtICAgIGZsYWdzICAgIE9uZSBvZiBUTVNVQ0NFU1MsIFRNRkFJTCwgb3IgVE1TVVNQRU5ECiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZW5kKFhpZCB4aWQsIGludCBmbGFncykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgeGFyLmVuZCh4aWQsIGZsYWdzKTsKICAgICAgICAgLy9HSkNJTlQKLQkvL21jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CisgICAgLy9tYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRlbGwgdGhlIHJlc291cmNlIG1hbmFnZXIgdG8gZm9yZ2V0IGFib3V0IGEgaGV1cmlzdGljYWxseSBjb21wbGV0ZWQgdHJhbnNhY3Rpb24gYnJhbmNoLgogICAgICAqCi0gICAgICogQHBhcmFtCXhpZAlBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCisgICAgICogQHBhcmFtICAgIHhpZCAgICBBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZm9yZ2V0KFhpZCB4aWQpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHhhci5mb3JnZXQoeGlkKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBPYnRhaW4gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBzZXQgZm9yIHRoaXMgCisgICAgICogT2J0YWluIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgc2V0IGZvciB0aGlzCiAgICAgICogPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRoZSB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIGluIHNlY29uZHMKKyAgICAgKiBAcmV0dXJuICAgIHRoZSB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIGluIHNlY29uZHMKICAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldFRyYW5zYWN0aW9uVGltZW91dCgpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiB4YXIuZ2V0VHJhbnNhY3Rpb25UaW1lb3V0KCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIGRldGVybWluZSBpZiB0aGUgcmVzb3VyY2UgbWFuYWdlciBpbnN0YW5jZSAKLSAgICAgKiByZXByZXNlbnRlZCBieSB0aGUgdGFyZ2V0IG9iamVjdCBpcyB0aGUgc2FtZSBhcyB0aGUgcmVzb3VjZSBtYW5hZ2VyIAorICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB0byBkZXRlcm1pbmUgaWYgdGhlIHJlc291cmNlIG1hbmFnZXIgaW5zdGFuY2UKKyAgICAgKiByZXByZXNlbnRlZCBieSB0aGUgdGFyZ2V0IG9iamVjdCBpcyB0aGUgc2FtZSBhcyB0aGUgcmVzb3VjZSBtYW5hZ2VyCiAgICAgICogaW5zdGFuY2UgcmVwcmVzZW50ZWQgYnkgdGhlIHBhcmFtZXRlciB4YXJlcy4KICAgICAgKgotICAgICAqIEBwYXJhbQl4YXJlcwlBbiA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBvYmplY3Qgd2hvc2UgcmVzb3VyY2UgbWFuYWdlciAKLSAgICAgKiAJCQlpbnN0YW5jZSBpcyB0byBiZSBjb21wYXJlZCB3aXRoIHRoZSByZXNvdXJjZQotICAgICAqIEByZXR1cm4JdHJ1ZSBpZiBpdCdzIHRoZSBzYW1lIFJNIGluc3RhbmNlOyBvdGhlcndpc2UgZmFsc2UuCisgICAgICogQHBhcmFtICAgIHhhcmVzICAgIEFuIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IG9iamVjdCB3aG9zZSByZXNvdXJjZSBtYW5hZ2VyCisgICAgICogICAgICAgICAgICAgaW5zdGFuY2UgaXMgdG8gYmUgY29tcGFyZWQgd2l0aCB0aGUgcmVzb3VyY2UKKyAgICAgKiBAcmV0dXJuICAgIHRydWUgaWYgaXQncyB0aGUgc2FtZSBSTSBpbnN0YW5jZTsgb3RoZXJ3aXNlIGZhbHNlLgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGlzU2FtZVJNKFhBUmVzb3VyY2UgeGFyZXMpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiB4YXIuaXNTYW1lUk0oeGFyZXMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIEFzayB0aGUgcmVzb3VyY2UgbWFuYWdlciB0byBwcmVwYXJlIGZvciBhIHRyYW5zYWN0aW9uIGNvbW1pdCAKKyAgICAgKiBBc2sgdGhlIHJlc291cmNlIG1hbmFnZXIgdG8gcHJlcGFyZSBmb3IgYSB0cmFuc2FjdGlvbiBjb21taXQKICAgICAgKiBvZiB0aGUgdHJhbnNhY3Rpb24gc3BlY2lmaWVkIGluIHhpZC4KICAgICAgKgotICAgICAqIEBwYXJhbQl4aWQJQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgotICAgICAqIEByZXR1cm4JQSB2YWx1ZSBpbmRpY2F0aW5nIHRoZSByZXNvdXJjZSBtYW5hZ2VyJ3Mgdm90ZSBvbiB0aGUgCi0gICAgICoJCW91dGNvbWUgb2YgdGhlIHRyYW5zYWN0aW9uLiBUaGUgcG9zc2libGUgdmFsdWVzCi0gICAgICoJCWFyZTogWEFfUkRPTkxZIG9yIFhBX09LLiBJZiB0aGUgcmVzb3VyY2UgbWFuYWdlciB3YW50cyAKLSAgICAgKgkJdG8gcm9sbCBiYWNrIHRoZSB0cmFuc2FjdGlvbiwgaXQgc2hvdWxkIGRvIHNvCi0gICAgICoJCWJ5IHJhaXNpbmcgYW4gYXBwcm9wcmlhdGUgPGNvZGU+WEFFeGNlcHRpb248L2NvZGU+IGluIHRoZSBwcmVwYXJlIG1ldGhvZC4KKyAgICAgKiBAcGFyYW0gICAgeGlkICAgIEEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKKyAgICAgKiBAcmV0dXJuICAgIEEgdmFsdWUgaW5kaWNhdGluZyB0aGUgcmVzb3VyY2UgbWFuYWdlcidzIHZvdGUgb24gdGhlCisgICAgICogICAgICAgIG91dGNvbWUgb2YgdGhlIHRyYW5zYWN0aW9uLiBUaGUgcG9zc2libGUgdmFsdWVzCisgICAgICogICAgICAgIGFyZTogWEFfUkRPTkxZIG9yIFhBX09LLiBJZiB0aGUgcmVzb3VyY2UgbWFuYWdlciB3YW50cworICAgICAqICAgICAgICB0byByb2xsIGJhY2sgdGhlIHRyYW5zYWN0aW9uLCBpdCBzaG91bGQgZG8gc28KKyAgICAgKiAgICAgICAgYnkgcmFpc2luZyBhbiBhcHByb3ByaWF0ZSA8Y29kZT5YQUV4Y2VwdGlvbjwvY29kZT4gaW4gdGhlIHByZXBhcmUgbWV0aG9kLgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgcHJlcGFyZShYaWQgeGlkKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICByZXR1cm4geGFyLnByZXBhcmUoeGlkKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBPYnRhaW4gYSBsaXN0IG9mIHByZXBhcmVkIHRyYW5zYWN0aW9uIGJyYW5jaGVzIGZyb20gYSByZXNvdXJjZSBtYW5hZ2VyLgogICAgICAqCi0gICAgICogQHBhcmFtCWZsYWcJT25lIG9mIFRNU1RBUlRSU0NBTiwgVE1FTkRSU0NBTiwgVE1OT0ZMQUdTLiBUTU5PRkxBR1MgCi0gICAgICoJCQltdXN0IGJlIHVzZWQgd2hlbiBubyBvdGhlciBmbGFncyBhcmUgc2V0IGluIGZsYWdzLgotICAgICAqIEByZXR1cm4JVGhlIHJlc291cmNlIG1hbmFnZXIgcmV0dXJucyB6ZXJvIG9yIG1vcmUgWElEcyBmb3IgdGhlIHRyYW5zYWN0aW9uIAotICAgICAqCQlicmFuY2hlcyB0aGF0IGFyZSBjdXJyZW50bHkgaW4gYSBwcmVwYXJlZCBvciBoZXVyaXN0aWNhbGx5IAotICAgICAqCQljb21wbGV0ZWQgc3RhdGUuIElmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIG9wZXJhdGlvbiwgdGhlIHJlc291cmNlCi0gICAgICoJCW1hbmFnZXIgc2hvdWxkIHRocm93IHRoZSBhcHByb3ByaWF0ZSA8Y29kZT5YQUV4Y2VwdGlvbjwvY29kZT4uCisgICAgICogQHBhcmFtICAgIGZsYWcgICAgT25lIG9mIFRNU1RBUlRSU0NBTiwgVE1FTkRSU0NBTiwgVE1OT0ZMQUdTLiBUTU5PRkxBR1MKKyAgICAgKiAgICAgICAgICAgIG11c3QgYmUgdXNlZCB3aGVuIG5vIG90aGVyIGZsYWdzIGFyZSBzZXQgaW4gZmxhZ3MuCisgICAgICogQHJldHVybiAgICBUaGUgcmVzb3VyY2UgbWFuYWdlciByZXR1cm5zIHplcm8gb3IgbW9yZSBYSURzIGZvciB0aGUgdHJhbnNhY3Rpb24KKyAgICAgKiAgICAgICAgYnJhbmNoZXMgdGhhdCBhcmUgY3VycmVudGx5IGluIGEgcHJlcGFyZWQgb3IgaGV1cmlzdGljYWxseQorICAgICAqICAgICAgICBjb21wbGV0ZWQgc3RhdGUuIElmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIG9wZXJhdGlvbiwgdGhlIHJlc291cmNlCisgICAgICogICAgICAgIG1hbmFnZXIgc2hvdWxkIHRocm93IHRoZSBhcHByb3ByaWF0ZSA8Y29kZT5YQUV4Y2VwdGlvbjwvY29kZT4uCiAgICAgICovCiAgICAgcHVibGljIFhpZFtdIHJlY292ZXIoaW50IGZsYWcpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiB4YXIucmVjb3ZlcihmbGFnKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBJbmZvcm0gdGhlIHJlc291cmNlIG1hbmFnZXIgdG8gcm9sbCBiYWNrIHdvcmsgZG9uZSBvbiBiZWhhbGYgb2YgYSB0cmFuc2FjdGlvbiBicmFuY2gKICAgICAgKgotICAgICAqIEBwYXJhbQl4aWQJQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgorICAgICAqIEBwYXJhbSAgICB4aWQgICAgQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJvbGxiYWNrKFhpZCB4aWQpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIC8vdGhlIG1jLnRyYW5zYWN0aW9uQ29tcGxldGVkIGNhbGwgaGFzIGNvbWUgaGVyZSBiZWNhc3VlCi0JLy90aGUgdHJhbnNhY3Rpb24gKmFjdHVhbGx5KiBjb21wbGV0ZXMgYWZ0ZXIgdGhlIGZsb3cKLQkvL3JlYWNoZXMgaGVyZS4gdGhlIGVuZCgpIG1ldGhvZCBtaWdodCBub3QgcmVhbGx5IHNpZ25hbAotCS8vY29tcGxldGlvbiBvZiB0cmFuc2FjdGlvbiBpbiBjYXNlIHRoZSB0cmFuc2FjdGlvbiBpcwotCS8vc3VzcGVuZGVkLiBJbiBjYXNlIG9mIHRyYW5zYWN0aW9uIHN1c3BlbnNpb24sIHRoZSBlbmQKLQkvL21ldGhvZCBpcyBzdGlsbCBjYWxsZWQgYnkgdGhlIHRyYW5zYWN0aW9uIG1hbmFnZXIKKyAgICAvL3RoZSB0cmFuc2FjdGlvbiAqYWN0dWFsbHkqIGNvbXBsZXRlcyBhZnRlciB0aGUgZmxvdworICAgIC8vcmVhY2hlcyBoZXJlLiB0aGUgZW5kKCkgbWV0aG9kIG1pZ2h0IG5vdCByZWFsbHkgc2lnbmFsCisgICAgLy9jb21wbGV0aW9uIG9mIHRyYW5zYWN0aW9uIGluIGNhc2UgdGhlIHRyYW5zYWN0aW9uIGlzCisgICAgLy9zdXNwZW5kZWQuIEluIGNhc2Ugb2YgdHJhbnNhY3Rpb24gc3VzcGVuc2lvbiwgdGhlIGVuZAorICAgIC8vbWV0aG9kIGlzIHN0aWxsIGNhbGxlZCBieSB0aGUgdHJhbnNhY3Rpb24gbWFuYWdlcgogICAgICAgICBtYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOwogICAgICAgICB4YXIucm9sbGJhY2soeGlkKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBmb3IgdGhpcyA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlzZWNvbmRzCXRoZSB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIGluIHNlY29uZHMuCi0gICAgICogQHJldHVybgl0cnVlIGlmIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaXMgc2V0IHN1Y2Nlc3NmdWxseTsgb3RoZXJ3aXNlIGZhbHNlLgorICAgICAqIEBwYXJhbSAgICBzZWNvbmRzICAgIHRoZSB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIGluIHNlY29uZHMuCisgICAgICogQHJldHVybiAgICB0cnVlIGlmIHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgaXMgc2V0IHN1Y2Nlc3NmdWxseTsgb3RoZXJ3aXNlIGZhbHNlLgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIHNldFRyYW5zYWN0aW9uVGltZW91dChpbnQgc2Vjb25kcykgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIHhhci5zZXRUcmFuc2FjdGlvblRpbWVvdXQoc2Vjb25kcyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU3RhcnQgd29yayBvbiBiZWhhbGYgb2YgYSB0cmFuc2FjdGlvbiBicmFuY2ggc3BlY2lmaWVkIGluIHhpZC4KICAgICAgKgotICAgICAqIEBwYXJhbQl4aWQJQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllciB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIHJlc291cmNlCi0gICAgICogQHJldHVybglmbGFncwlPbmUgb2YgVE1OT0ZMQUdTLCBUTUpPSU4sIG9yIFRNUkVTVU1FCisgICAgICogQHBhcmFtICAgIHhpZCAgICBBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVzb3VyY2UKKyAgICAgKiBAcmV0dXJuICAgIGZsYWdzICAgIE9uZSBvZiBUTU5PRkxBR1MsIFRNSk9JTiwgb3IgVE1SRVNVTUUKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzdGFydChYaWQgeGlkLCBpbnQgZmxhZ3MpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIC8vR0pDSU5UCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9idWlsZC54bWwKaW5kZXggOTY3ODY4Yi4uNjQxMDU1NyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL2J1aWxkLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8cHJvamVjdCBuYW1lPSJqZGJjX2Nvbm5lY3RvciIgYmFzZWRpcj0iJHtnamMuaG9tZX0iIGRlZmF1bHQ9ImJ1aWxkIj4KICAgPHByb3BlcnR5IG5hbWU9InBrZy5kaXIiIHZhbHVlPSJjb20vc3VuL2dqYy9zcGkiLz4KLSAKKwogICA8dGFyZ2V0IG5hbWU9ImNsZWFuIj4KICAgICA8YW50IGFudGZpbGU9ImJ1aWxkLnhtbCIgZGlyPSIke2dqYy5ob21lfS9iaW4iIHRhcmdldD0iY2xlYW4iLz4KICAgPC90YXJnZXQ+CkBAIC0zNyw1ICszNyw1IEBACiAKICAgPHRhcmdldCBuYW1lPSJidWlsZDE0IiBkZXBlbmRzPSJjb21waWxlMTQiLz4KIAotCTx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImJ1aWxkMTMsIGJ1aWxkMTQiLz4KKyAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJidWlsZDEzLCBidWlsZDE0Ii8+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvTWV0aG9kRXhlY3V0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9NZXRob2RFeGVjdXRvci5qYXZhCmluZGV4IGNlMzIxYWYuLjllN2YyNTMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9NZXRob2RFeGVjdXRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9NZXRob2RFeGVjdXRvci5qYXZhCkBAIC0yNiw4ICsyNiw4IEBACiAvKioKICAqIEV4ZWN1dGUgdGhlIG1ldGhvZHMgYmFzZWQgb24gdGhlIHBhcmFtZXRlcnMuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8yMwotICogQGF1dGhvcglCaW5vZCBQLkcKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMjMKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCiAgKi8KIHB1YmxpYyBjbGFzcyBNZXRob2RFeGVjdXRvciBpbXBsZW1lbnRzIGphdmEuaW8uU2VyaWFsaXphYmxlewogCkBAIC0zOSwxMzAgKzM5LDEzMCBAQAogICAgIC8qKgogICAgICAqIEV4Y2V1dGUgYSBzaW1wbGUgc2V0IE1ldGhvZC4KICAgICAgKgotICAgICAqIEBwYXJhbQl2YWx1ZQlWYWx1ZSB0byBiZSBzZXQuCi0gICAgICogQHBhcmFtCW1ldGhvZAk8Y29kZT5NZXRob2Q8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAcGFyYW0Jb2JqCU9iamVjdCBvbiB3aGljaCB0aGUgbWV0aG9kIHRvIGJlIGV4ZWN1dGVkLgorICAgICAqIEBwYXJhbSAgICB2YWx1ZSAgICBWYWx1ZSB0byBiZSBzZXQuCisgICAgICogQHBhcmFtICAgIG1ldGhvZCAgICA8Y29kZT5NZXRob2Q8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgb2JqICAgIE9iamVjdCBvbiB3aGljaCB0aGUgbWV0aG9kIHRvIGJlIGV4ZWN1dGVkLgogICAgICAqIEB0aHJvd3MgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiwgaW4gY2FzZSBvZiB0aGUgbWlzbWF0Y2ggb2YgcGFyYW1ldGVyIHZhbHVlcyBvcgotICAgICAqCQlhIHNlY3VyaXR5IHZpb2xhdGlvbi4gICAgIAorICAgICAqICAgICAgICBhIHNlY3VyaXR5IHZpb2xhdGlvbi4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBydW5KYXZhQmVhbk1ldGhvZChTdHJpbmcgdmFsdWUsIE1ldGhvZCBtZXRob2QsIE9iamVjdCBvYmopIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKLSAgICAJaWYgKHZhbHVlPT1udWxsIHx8IHZhbHVlLnRyaW0oKS5lcXVhbHMoIiIpKSB7Ci0gICAgCSAgICByZXR1cm47Ci0gICAgCX0KLSAgICAJdHJ5IHsKLSAgICAJICAgIENsYXNzW10gcGFyYW1ldGVycyA9IG1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpOwotICAgIAkgICAgaWYgKCBwYXJhbWV0ZXJzLmxlbmd0aCA9PSAxKSB7Ci0gICAgCSAgICAgICAgT2JqZWN0W10gdmFsdWVzID0gbmV3IE9iamVjdFsxXTsKLSAgICAJICAgIAl2YWx1ZXNbMF0gPSBjb252ZXJ0VHlwZShwYXJhbWV0ZXJzWzBdLCB2YWx1ZSk7Ci0gICAgCSAgICAJbWV0aG9kLmludm9rZShvYmosIHZhbHVlcyk7Ci0gICAgCSAgICB9Ci0gICAgCX0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gaWFlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGlhZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7Ci0gICAgCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFyZ3VtZW50cyBhcmUgd3JvbmcgZm9yIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsgICAgCQotICAgIAl9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGl0ZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpdGUpOwotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOyAgICAJCi0gICAgCX0KKyAgICAgICAgaWYgKHZhbHVlPT1udWxsIHx8IHZhbHVlLnRyaW0oKS5lcXVhbHMoIiIpKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIENsYXNzW10gcGFyYW1ldGVycyA9IG1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpOworICAgICAgICAgICAgaWYgKCBwYXJhbWV0ZXJzLmxlbmd0aCA9PSAxKSB7CisgICAgICAgICAgICAgICAgT2JqZWN0W10gdmFsdWVzID0gbmV3IE9iamVjdFsxXTsKKyAgICAgICAgICAgICAgICB2YWx1ZXNbMF0gPSBjb252ZXJ0VHlwZShwYXJhbWV0ZXJzWzBdLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgbWV0aG9kLmludm9rZShvYmosIHZhbHVlcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gaWFlKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGlhZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFyZ3VtZW50cyBhcmUgd3JvbmcgZm9yIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKKyAgICAgICAgfSBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBpdGUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaXRlKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIEV4ZWN1dGVzIHRoZSBtZXRob2QuICAgICAKKyAgICAgKiBFeGVjdXRlcyB0aGUgbWV0aG9kLgogICAgICAqCi0gICAgICogQHBhcmFtCW1ldGhvZCA8Y29kZT5NZXRob2Q8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAcGFyYW0Jb2JqCU9iamVjdCBvbiB3aGljaCB0aGUgbWV0aG9kIHRvIGJlIGV4ZWN1dGVkLgotICAgICAqIEBwYXJhbQl2YWx1ZXMJUGFyYW1ldGVyIHZhbHVlcyBmb3IgZXhlY3V0aW5nIHRoZSBtZXRob2QuCisgICAgICogQHBhcmFtICAgIG1ldGhvZCA8Y29kZT5NZXRob2Q8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgb2JqICAgIE9iamVjdCBvbiB3aGljaCB0aGUgbWV0aG9kIHRvIGJlIGV4ZWN1dGVkLgorICAgICAqIEBwYXJhbSAgICB2YWx1ZXMgICAgUGFyYW1ldGVyIHZhbHVlcyBmb3IgZXhlY3V0aW5nIHRoZSBtZXRob2QuCiAgICAgICogQHRocm93cyAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+LCBpbiBjYXNlIG9mIHRoZSBtaXNtYXRjaCBvZiBwYXJhbWV0ZXIgdmFsdWVzIG9yCi0gICAgICoJCWEgc2VjdXJpdHkgdmlvbGF0aW9uLgorICAgICAqICAgICAgICBhIHNlY3VyaXR5IHZpb2xhdGlvbi4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBydW5NZXRob2QoTWV0aG9kIG1ldGhvZCwgT2JqZWN0IG9iaiwgVmVjdG9yIHZhbHVlcykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewotICAgIAl0cnkgewotCSAgICBDbGFzc1tdIHBhcmFtZXRlcnMgPSBtZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKTsKLQkgICAgaWYgKHZhbHVlcy5zaXplKCkgIT0gcGFyYW1ldGVycy5sZW5ndGgpIHsKLQkgICAgICAgIHJldHVybjsKLQkgICAgfQotICAgIAkgICAgT2JqZWN0W10gYWN0dWFsVmFsdWVzID0gbmV3IE9iamVjdFtwYXJhbWV0ZXJzLmxlbmd0aF07Ci0gICAgCSAgICBmb3IgKGludCBpID0wOyBpPHBhcmFtZXRlcnMubGVuZ3RoIDsgaSsrKSB7Ci0gICAgCSAgICAJU3RyaW5nIHZhbCA9IChTdHJpbmcpIHZhbHVlcy5nZXQoaSk7Ci0gICAgCSAgICAJaWYgKHZhbC50cmltKCkuZXF1YWxzKCJOVUxMIikpIHsKLSAgICAJICAgIAkgICAgYWN0dWFsVmFsdWVzW2ldID0gbnVsbDsKLSAgICAJICAgIAl9IGVsc2UgewotICAgIAkgICAgCSAgICBhY3R1YWxWYWx1ZXNbaV0gPSBjb252ZXJ0VHlwZShwYXJhbWV0ZXJzW2ldLCB2YWwpOwotICAgIAkgICAgCX0KLSAgICAJICAgIH0KLSAgICAJICAgIG1ldGhvZC5pbnZva2Uob2JqLCBhY3R1YWxWYWx1ZXMpOwotICAgIAl9Y2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gaWFlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGlhZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7Ci0gICAgCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFyZ3VtZW50cyBhcmUgd3JvbmcgZm9yIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsgICAgCQotICAgIAl9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGl0ZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpdGUpOwotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOyAgICAJCi0gICAgCX0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgQ2xhc3NbXSBwYXJhbWV0ZXJzID0gbWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCk7CisgICAgICAgIGlmICh2YWx1ZXMuc2l6ZSgpICE9IHBhcmFtZXRlcnMubGVuZ3RoKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIE9iamVjdFtdIGFjdHVhbFZhbHVlcyA9IG5ldyBPYmplY3RbcGFyYW1ldGVycy5sZW5ndGhdOworICAgICAgICAgICAgZm9yIChpbnQgaSA9MDsgaTxwYXJhbWV0ZXJzLmxlbmd0aCA7IGkrKykgeworICAgICAgICAgICAgICAgIFN0cmluZyB2YWwgPSAoU3RyaW5nKSB2YWx1ZXMuZ2V0KGkpOworICAgICAgICAgICAgICAgIGlmICh2YWwudHJpbSgpLmVxdWFscygiTlVMTCIpKSB7CisgICAgICAgICAgICAgICAgICAgIGFjdHVhbFZhbHVlc1tpXSA9IG51bGw7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYWN0dWFsVmFsdWVzW2ldID0gY29udmVydFR5cGUocGFyYW1ldGVyc1tpXSwgdmFsKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtZXRob2QuaW52b2tlKG9iaiwgYWN0dWFsVmFsdWVzKTsKKyAgICAgICAgfWNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGlhZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpYWUpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOworICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWUpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBcmd1bWVudHMgYXJlIHdyb25nIGZvciB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7CisgICAgICAgIH0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gaXRlKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGl0ZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb252ZXJ0cyB0aGUgdHlwZSBmcm9tIFN0cmluZyB0byB0aGUgQ2xhc3MgdHlwZS4KICAgICAgKgotICAgICAqIEBwYXJhbQl0eXBlCQlDbGFzcyBuYW1lIHRvIHdoaWNoIHRoZSBjb252ZXJzaW9uIGlzIHJlcXVpcmVkLgotICAgICAqIEBwYXJhbQlwYXJhbWV0ZXIJU3RyaW5nIHZhbHVlIHRvIGJlIGNvbnZlcnRlZC4KLSAgICAgKiBAcmV0dXJuCUNvbnZlcnRlZCB2YWx1ZS4KKyAgICAgKiBAcGFyYW0gICAgdHlwZSAgICAgICAgQ2xhc3MgbmFtZSB0byB3aGljaCB0aGUgY29udmVyc2lvbiBpcyByZXF1aXJlZC4KKyAgICAgKiBAcGFyYW0gICAgcGFyYW1ldGVyICAgIFN0cmluZyB2YWx1ZSB0byBiZSBjb252ZXJ0ZWQuCisgICAgICogQHJldHVybiAgICBDb252ZXJ0ZWQgdmFsdWUuCiAgICAgICogQHRocm93cyAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+LCBpbiBjYXNlIG9mIHRoZSBtaXNtYXRjaCBvZiBwYXJhbWV0ZXIgdmFsdWVzIG9yCi0gICAgICoJCWEgc2VjdXJpdHkgdmlvbGF0aW9uLiAgICAgCisgICAgICogICAgICAgIGEgc2VjdXJpdHkgdmlvbGF0aW9uLgogICAgICAqLwogICAgIHByaXZhdGUgT2JqZWN0IGNvbnZlcnRUeXBlKENsYXNzIHR5cGUsIFN0cmluZyBwYXJhbWV0ZXIpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKLSAgICAJdHJ5IHsKLSAgICAJICAgIFN0cmluZyB0eXBlTmFtZSA9IHR5cGUuZ2V0TmFtZSgpOwotICAgIAkgICAgaWYgKCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5TdHJpbmciKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5PYmplY3QiKSkgewotICAgIAkgICAgCXJldHVybiBwYXJhbWV0ZXI7Ci0gICAgCSAgICB9Ci0gICAgCQotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiaW50IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuSW50ZWdlciIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBJbnRlZ2VyKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9Ci0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoInNob3J0IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuU2hvcnQiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgU2hvcnQocGFyYW1ldGVyKTsKLSAgICAJICAgIH0gICAgCSAgICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiYnl0ZSIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkJ5dGUiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgQnl0ZShwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgICAJICAgICAgICAJICAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJsb25nIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuTG9uZyIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBMb25nKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgIAkgICAgICAgIAkgICAgICAgCSAgICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiZmxvYXQiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5GbG9hdCIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBGbG9hdChwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJkb3VibGUiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5Eb3VibGUiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgRG91YmxlKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgIAkgICAgICAgIAkgICAgICAgCSAgICAgCSAgICAgICAgCSAgICAgICAJICAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJqYXZhLm1hdGguQmlnRGVjaW1hbCIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBqYXZhLm1hdGguQmlnRGVjaW1hbChwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgICAJICAgICAgICAJICAgICAgIAkgICAgCi0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImphdmEubWF0aC5CaWdJbnRlZ2VyIikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IGphdmEubWF0aC5CaWdJbnRlZ2VyKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgIAkgICAgICAgIAkgICAgICAgCSAgICAgICAgCSAgICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiYm9vbGVhbiIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkJvb2xlYW4iKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgQm9vbGVhbihwYXJhbWV0ZXIpOwotICAgICAgICAgICAgfQkJCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBTdHJpbmcgdHlwZU5hbWUgPSB0eXBlLmdldE5hbWUoKTsKKyAgICAgICAgICAgIGlmICggdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuU3RyaW5nIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuT2JqZWN0IikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyYW1ldGVyOworICAgICAgICAgICAgfQogCi0gICAgCSAgICByZXR1cm4gcGFyYW1ldGVyOwotICAgIAl9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX25mZSIsIHBhcmFtZXRlcik7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24ocGFyYW1ldGVyKyI6IE5vdCBhIHZhbGlkIHZhbHVlIGZvciB0aGlzIG1ldGhvZCAiKTsKLSAgICAJfQorICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiaW50IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuSW50ZWdlciIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnRlZ2VyKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoInNob3J0IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuU2hvcnQiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2hvcnQocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiYnl0ZSIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkJ5dGUiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQnl0ZShwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJsb25nIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuTG9uZyIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBMb25nKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImZsb2F0IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuRmxvYXQiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRmxvYXQocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiZG91YmxlIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuRG91YmxlIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERvdWJsZShwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJqYXZhLm1hdGguQmlnRGVjaW1hbCIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBqYXZhLm1hdGguQmlnRGVjaW1hbChwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJqYXZhLm1hdGguQmlnSW50ZWdlciIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBqYXZhLm1hdGguQmlnSW50ZWdlcihwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJib29sZWFuIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuQm9vbGVhbiIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCb29sZWFuKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBwYXJhbWV0ZXI7CisgICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfbmZlIiwgcGFyYW1ldGVyKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihwYXJhbWV0ZXIrIjogTm90IGEgdmFsaWQgdmFsdWUgZm9yIHRoaXMgbWV0aG9kICIpOworICAgICAgICB9CiAgICAgfQotICAgIAorCiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9TZWN1cml0eVV0aWxzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvU2VjdXJpdHlVdGlscy5qYXZhCmluZGV4IGZjMTQ5YmYuLmYwMDhlN2YgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9TZWN1cml0eVV0aWxzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL1NlY3VyaXR5VXRpbHMuamF2YQpAQCAtMjksMzYgKzI5LDM2IEBACiAvKioKICAqIFNlY3VyaXR5VXRpbHMgZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8yMgotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMjIKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIHB1YmxpYyBjbGFzcyBTZWN1cml0eVV0aWxzIHsKIAogICAgIC8qKgotICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0LCBnaXZlbiAKLSAgICAgKiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiwgc3ViamVjdCBhbmQgdGhlIAotICAgICAqIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4uIEl0IGZpcnN0IGNoZWNrcyBpZiB0aGUgCi0gICAgICogPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBpcyBudWxsIG9yIG5vdC4gSWYgaXQgaXMgbm90IG51bGwsIAorICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0LCBnaXZlbgorICAgICAqIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LCBzdWJqZWN0IGFuZCB0aGUKKyAgICAgKiA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+LiBJdCBmaXJzdCBjaGVja3MgaWYgdGhlCisgICAgICogPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBpcyBudWxsIG9yIG5vdC4gSWYgaXQgaXMgbm90IG51bGwsCiAgICAgICogaXQgY29uc3RydWN0cyBhIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0IHdpdGgKICAgICAgKiB0aGUgdXNlciBhbmQgcGFzc3dvcmQgZmllbGRzIGZyb20gdGhlIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gYW5kIHJldHVybnMgdGhpcwotICAgICAqIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0LiBJZiB0aGUgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiAKLSAgICAgKiBpcyBudWxsLCBpdCByZXRyaWV2ZXMgdGhlIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0cyBmcm9tIAorICAgICAqIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0LiBJZiB0aGUgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPgorICAgICAqIGlzIG51bGwsIGl0IHJldHJpZXZlcyB0aGUgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3RzIGZyb20KICAgICAgKiB0aGUgPGNvZGU+U3ViamVjdDwvY29kZT4gcGFyYW1ldGVyIGFuZCByZXR1cm5zIHRoZSBmaXJzdAotICAgICAqIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0IHdoaWNoIGNvbnRhaW5zIGEgCisgICAgICogPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3Qgd2hpY2ggY29udGFpbnMgYQogICAgICAqIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4sIGluc3RhbmNlIGVxdWl2YWxlbnQKICAgICAgKiB0byB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiwgcGFyYW1ldGVyLgogICAgICAqCi0gICAgICogQHBhcmFtCW1jZgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+Ci0gICAgICogQHBhcmFtCXN1YmplY3QJPGNvZGU+U3ViamVjdDwvY29kZT4KLSAgICAgKiBAcGFyYW0JaW5mbwk8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+Ci0gICAgICogQHJldHVybgk8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+Ci0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4JZ2VuZXJpYyBleGNlcHRpb24gaWYgb3BlcmF0aW9uIGZhaWxzCi0gICAgICogQHRocm93cwk8Y29kZT5TZWN1cml0eUV4Y2VwdGlvbjwvY29kZT4JaWYgYWNjZXNzIHRvIHRoZSA8Y29kZT5TdWJqZWN0PC9jb2RlPiBpbnN0YW5jZSBpcyBkZW5pZWQKKyAgICAgKiBAcGFyYW0gICAgbWNmICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgc3ViamVjdCAgICA8Y29kZT5TdWJqZWN0PC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBpbmZvICAgIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiAgICBnZW5lcmljIGV4Y2VwdGlvbiBpZiBvcGVyYXRpb24gZmFpbHMKKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlNlY3VyaXR5RXhjZXB0aW9uPC9jb2RlPiAgICBpZiBhY2Nlc3MgdG8gdGhlIDxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIGlzIGRlbmllZAogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgUGFzc3dvcmRDcmVkZW50aWFsIGdldFBhc3N3b3JkQ3JlZGVudGlhbChmaW5hbCBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmLAogICAgICAgICAgZmluYWwgU3ViamVjdCBzdWJqZWN0LCBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm8gaW5mbykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKIAotCWlmIChpbmZvID09IG51bGwpIHsKKyAgICBpZiAoaW5mbyA9PSBudWxsKSB7CiAgICAgICAgICAgICBpZiAoc3ViamVjdCA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtODksMTQgKzg5LDE0IEBACiAgICAgICAgICAgICByZXR1cm4gcGM7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRydWUgaWYgdHdvIHN0cmluZ3MgYXJlIGVxdWFsOyBmYWxzZSBvdGhlcndpc2UKLSAgICAgKiAKLSAgICAgKiBAcGFyYW0Jc3RyMQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHBhcmFtCXN0cjIJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEByZXR1cm4JdHJ1ZQlpZiB0aGUgdHdvIHN0cmluZ3MgYXJlIGVxdWFsCi0gICAgICogICAgICAgIAlmYWxzZQlvdGhlcndpc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzdHIxICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgc3RyMiAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHJldHVybiAgICB0cnVlICAgIGlmIHRoZSB0d28gc3RyaW5ncyBhcmUgZXF1YWwKKyAgICAgKiAgICAgICAgICAgIGZhbHNlICAgIG90aGVyd2lzZQogICAgICAqLwogICAgIHN0YXRpYyBwcml2YXRlIGJvb2xlYW4gaXNFcXVhbChTdHJpbmcgc3RyMSwgU3RyaW5nIHN0cjIpIHsKICAgICAgICAgaWYgKHN0cjEgPT0gbnVsbCkgewpAQCAtMTA5LDEwICsxMDksMTAgQEAKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRydWUgaWYgdHdvIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0cyBhcmUgZXF1YWw7IGZhbHNlIG90aGVyd2lzZQogICAgICAqCi0gICAgICogQHBhcmFtCXBDMQk8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+Ci0gICAgICogQHBhcmFtCXBDMgk8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+Ci0gICAgICogQHJldHVybgl0cnVlCWlmIHRoZSB0d28gUGFzc3dvcmRDcmVkZW50aWFscyBhcmUgZXF1YWwKLSAgICAgKiAgICAgICAgCWZhbHNlCW90aGVyd2lzZQorICAgICAqIEBwYXJhbSAgICBwQzEgICAgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBwQzIgICAgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgdHJ1ZSAgICBpZiB0aGUgdHdvIFBhc3N3b3JkQ3JlZGVudGlhbHMgYXJlIGVxdWFsCisgICAgICogICAgICAgICAgICBmYWxzZSAgICBvdGhlcndpc2UKICAgICAgKi8KICAgICBzdGF0aWMgcHVibGljIGJvb2xlYW4gaXNQYXNzd29yZENyZWRlbnRpYWxFcXVhbChQYXNzd29yZENyZWRlbnRpYWwgcEMxLCBQYXNzd29yZENyZWRlbnRpYWwgcEMyKSB7CiAgICAgICAgIGlmIChwQzEgPT0gcEMyKQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9idWlsZC54bWwKaW5kZXggYTU1YmJmMC4uZjA2MGU3ZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvYnVpbGQueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxwcm9qZWN0IG5hbWU9ImpkYmNfY29ubmVjdG9yIiBiYXNlZGlyPSIuIiBkZWZhdWx0PSJidWlsZCI+CiAgIDxwcm9wZXJ0eSBuYW1lPSJwa2cuZGlyIiB2YWx1ZT0iY29tL3N1bi9namMvdXRpbCIvPgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImNsZWFuIj4KICAgICA8YW50IGFudGZpbGU9ImJ1aWxkLnhtbCIgZGlyPSIke2dqYy5ob21lfS9iaW4iIHRhcmdldD0iY2xlYW4iLz4KICAgPC90YXJnZXQ+CkBAIC0zMyw3ICszMyw3IEBACiAgICAgICA8amFyIGphcmZpbGU9IiR7ZGlzdC5kaXJ9LyR7cGtnLmRpcn0vdXRpbC5qYXIiIGJhc2VkaXI9IiR7Y2xhc3MuZGlyfSIKICAgICAgICAgaW5jbHVkZXM9IiR7cGtnLmRpcn0vKiovKiIvPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJjb21waWxlMTMiIGRlcGVuZHM9ImNvbXBpbGUiLz4KICAgPHRhcmdldCBuYW1lPSJjb21waWxlMTQiIGRlcGVuZHM9ImNvbXBpbGUiLz4KIApAQCAtNDQsNSArNDQsNSBAQAogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkMTQiIGRlcGVuZHM9ImNvbXBpbGUxNCwgcGFja2FnZTE0Ii8+CiAKICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iYnVpbGQxMywgYnVpbGQxNCIvPgotICAKKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3JlZGVwbG95UmFyL3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhCmluZGV4IGM5YjY3YjIuLjkxYzJkNDMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZWRlcGxveVJhci9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVkZXBsb3lSYXIvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEKQEAgLTUyLDIyICs1MiwyMiBAQAogCiAKICAgICAgICAgU3RyaW5nIHJlcyA9ICJOT1QgUlVOIjsKLQkgICAgZGVidWcoImRvVGVzdCgpIEVOVEVSLi4uIik7CisgICAgICAgIGRlYnVnKCJkb1Rlc3QoKSBFTlRFUi4uLiIpOwogICAgICAgICBib29sZWFuIHBhc3MgPSBmYWxzZTsKICAgICAgICAgdHJ5IHsKLQkJcGFzcyA9IGNoZWNrUmVzdWx0cyh2ZXJzaW9uVG9UZXN0KTsKLQkJZGVidWcoIkdvdCBleHBlY3RlZCByZXN1bHRzID0gIiArIHBhc3MpOworICAgICAgICBwYXNzID0gY2hlY2tSZXN1bHRzKHZlcnNpb25Ub1Rlc3QpOworICAgICAgICBkZWJ1ZygiR290IGV4cGVjdGVkIHJlc3VsdHMgPSAiICsgcGFzcyk7CiAKLQkJLy9kbyBub3QgY29udGludWUgaWYgb25lIHRlc3QgZmFpbGVkCi0JCWlmICghcGFzcykgewotCQkJcmVzID0gIlNPTUUgVEVTVFMgRkFJTEVEIjsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiUmVkZXBsb3kgQ29ubmVjdG9yIDEuNSB0ZXN0IC0gVmVyc2lvbiA6ICIrIHZlcnNpb25Ub1Rlc3QgKyAiIEZBSUwiKTsKKyAgICAgICAgLy9kbyBub3QgY29udGludWUgaWYgb25lIHRlc3QgZmFpbGVkCisgICAgICAgIGlmICghcGFzcykgeworICAgICAgICAgICAgcmVzID0gIlNPTUUgVEVTVFMgRkFJTEVEIjsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVkZXBsb3kgQ29ubmVjdG9yIDEuNSB0ZXN0IC0gVmVyc2lvbiA6ICIrIHZlcnNpb25Ub1Rlc3QgKyAiIEZBSUwiKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCJURVNUOkZBSUwiKTsKLQkJfSBlbHNlIHsKLQkJCXJlcyAgPSAiQUxMIFRFU1RTIFBBU1NFRCI7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlJlZGVwbG95IENvbm5lY3RvciAxLjUgdGVzdCAtIFZlcnNpb24gOiAiKyB2ZXJzaW9uVG9UZXN0ICsgIiBQQVNTIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXMgID0gIkFMTCBURVNUUyBQQVNTRUQiOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZWRlcGxveSBDb25uZWN0b3IgMS41IHRlc3QgLSBWZXJzaW9uIDogIisgdmVyc2lvblRvVGVzdCArICIgUEFTUyIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIlRFU1Q6UEFTUyIpOwotCQl9CisgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlZGVwbG95IGNvbm5lY3RvciB0ZXN0IGZhaWxlZC4iKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwpAQCAtODMsMTggKzgzLDE4IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSBib29sZWFuIGNoZWNrUmVzdWx0cyhpbnQgbnVtKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkgICAgZGVidWcoImNoZWNrUmVzdWx0IiArIG51bSk7Ci0JICAgIGRlYnVnKCJnb3QgaW5pdGlhbCBjb250ZXh0IiArIChuZXcgSW5pdGlhbENvbnRleHQoKSkudG9TdHJpbmcoKSk7CisgICAgICAgIGRlYnVnKCJjaGVja1Jlc3VsdCIgKyBudW0pOworICAgICAgICBkZWJ1ZygiZ290IGluaXRpYWwgY29udGV4dCIgKyAobmV3IEluaXRpYWxDb250ZXh0KCkpLnRvU3RyaW5nKCkpOwogICAgICAgICBPYmplY3QgbyA9IChuZXcgSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9NeVZlcnNpb25DaGVja2VyIik7Ci0JZGVidWcoImdvdCBvIiArIG8pOworICAgIGRlYnVnKCJnb3QgbyIgKyBvKTsKICAgICAgICAgVmVyc2lvbkNoZWNrZXJIb21lIGhvbWUgPSAoVmVyc2lvbkNoZWNrZXJIb21lKQogICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG8sIFZlcnNpb25DaGVja2VySG9tZS5jbGFzcyk7CiAgICAgICAgIGRlYnVnKCJnb3QgaG9tZSIgKyBob21lKTsKLQkgICAgVmVyc2lvbkNoZWNrZXIgY2hlY2tlciA9IGhvbWUuY3JlYXRlKCk7Ci0JICAgIGRlYnVnKCJnb3QgbyIgKyBjaGVja2VyKTsKKyAgICAgICAgVmVyc2lvbkNoZWNrZXIgY2hlY2tlciA9IGhvbWUuY3JlYXRlKCk7CisgICAgICAgIGRlYnVnKCJnb3QgbyIgKyBjaGVja2VyKTsKICAgICAgICAgLy9wcm9ibGVtIGhlcmUhCi0JaW50IHJlc3VsdCA9IGNoZWNrZXIuZ2V0VmVyc2lvbigpOwotCWRlYnVnKCJjaGVja1Jlc3VsdCIgKyByZXN1bHQpOworICAgIGludCByZXN1bHQgPSBjaGVja2VyLmdldFZlcnNpb24oKTsKKyAgICBkZWJ1ZygiY2hlY2tSZXN1bHQiICsgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdCA9PSBudW07CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcmVwb3J0LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZXBvcnQueG1sCmluZGV4IDY1YTMyYWUuLjA5NGUzNjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZXBvcnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9yZXBvcnQueG1sCkBAIC0yMyw3ICsyMyw3IEBACiA8dGFyZ2V0IG5hbWU9InJlcG9ydCI+CiA8ZWNobyBtZXNzYWdlPSJDb21wYXJpbmcgcmVzdWx0cyB3aXRoIGV4cGVjdGVkIHJlc3VsdHMiLz4KIAotIAorCiAgICAgPHhzbHQgc3R5bGU9IiR7c3R5bGVzaGVldH0iCiAgICAgICAgICAgICBpbj0iJHt4bWxmaWxlfSIgb3V0PSIke2h0bWxmaWxlfSIKICAgICAgICAgICAgIGJhc2VkaXI9Ii4iIGRlc3RkaXI9Ii4iIC8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcnVuX3Rlc3Quc2ggYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvcnVuX3Rlc3Quc2gKaW5kZXggNGU5YTQxMi4uNzA0ZjFkZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3J1bl90ZXN0LnNoCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9ydW5fdGVzdC5zaApAQCAtMTgsNyArMTgsNyBAQAogbGlzdF90ZXN0X2lkcygpewogICBlY2hvIGNvbm5lY3Rvcl9hbGwgY29ubmVjdG9yX2dyb3VwXzEgY29ubmVjdG9yX2dyb3VwXzIgY29ubmVjdG9yX2dyb3VwXzMgY29ubmVjdG9yX2dyb3VwXzQKIH0KLSAKKwogdGVzdF9ydW4oKXsKICAgI3Rlc3QgZnVuY3Rpb25zIGdvZXMgaGVyZSwgbWF2ZW4gdGVzdCBvciBhbnQgdGVzdCBldGMuCiAgIGV4cG9ydCBIVURTT049dHJ1ZQpAQCAtNDUsMTYgKzQ1LDE2IEBACiB9CiAKIGdldF90ZXN0X3RhcmdldCgpewotCWNhc2UgJHsxfSBpbgotCQljb25uZWN0b3JfYWxsICkKLQkJCVRBUkdFVD1hbGwKLQkJCWV4cG9ydCBUQVJHRVQ7OworICAgIGNhc2UgJHsxfSBpbgorICAgICAgICBjb25uZWN0b3JfYWxsICkKKyAgICAgICAgICAgIFRBUkdFVD1hbGwKKyAgICAgICAgICAgIGV4cG9ydCBUQVJHRVQ7OwogICAqICkKICAgICBUQVJHRVQ9JDEKICAgICBleHBvcnQgVEFSR0VUOzsKLQllc2FjCisgICAgZXNhYwogfQotIAorCiBPUFQ9JHsxfQogVEVTVF9JRD0kezJ9CiBzb3VyY2UgYGRpcm5hbWUgJHswfWAvLi4vLi4vLi4vLi4vY29tbW9uX3Rlc3Quc2gKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9zZWN1cml0eW1hcHdlYi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3NlY3VyaXR5bWFwd2ViL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMGM2OGFkNC4uZWMwN2YyMiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3NlY3VyaXR5bWFwd2ViL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3NlY3VyaXR5bWFwd2ViL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNvbm5lY3Rvci9zZWN1cml0eW1hcHdlYiIvPgogPHByb3BlcnR5IG5hbWU9InBvb2xuYW1lIiB2YWx1ZT0iTXlQb29sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvc2VjdXJpdHltYXB3ZWIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3NlY3VyaXR5bWFwd2ViL2J1aWxkLnhtbAppbmRleCBmYWI5ZDBiLi45M2NlM2Y4IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvc2VjdXJpdHltYXB3ZWIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9zZWN1cml0eW1hcHdlYi9idWlsZC54bWwKQEAgLTEzMCw3ICsxMzAsNyBAQAogICAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgogICAgICAgPGFyZyBsaW5lPSJkb21haW4ucmVzb3VyY2VzLmNvbm5lY3Rvci1jb25uZWN0aW9uLXBvb2wuJHtwb29sbmFtZX0ucHJvcGVydHkuUGFzc3dvcmQ9JHtkYi5wd2R9Ii8+CiAgICAgPC9leGVjPgotICAgCisKICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICAgIDxhcmcgbGluZT0ic2V0Ii8+CiAgICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvc2VyaWFsaXphYmxldGVzdC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3NlcmlhbGl6YWJsZXRlc3QvYnVpbGQucHJvcGVydGllcwppbmRleCAxYjU5ODVmLi5mNjMzNTdhIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvc2VyaWFsaXphYmxldGVzdC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9zZXJpYWxpemFibGV0ZXN0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE5ICsxNSwxOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY29ubmVjdG9yLXNlcmlhbGl6YWJsZS10ZXN0Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0icmFyZmlsZSIgdmFsdWU9InJhci9ibGFja2JveC10eC5yYXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9zZXJpYWxpemFibGV0ZXN0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9zZXJpYWxpemFibGV0ZXN0L2J1aWxkLnhtbAppbmRleCA3Y2Q3ZGY2Li42MjZiYmQ5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvc2VyaWFsaXphYmxldGVzdC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3NlcmlhbGl6YWJsZXRlc3QvYnVpbGQueG1sCkBAIC01Niw3ICs1Niw3IEBACiAgICAgICAgICAgICAgICAgc3JjZGlyPSIuIgogICAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgICAgaW5jbHVkZXM9ImNsaWVudC9XZWJUZXN0LmphdmEiIGRlc3RkaXI9Ii4iLz4KLSAgICAgICAgCisKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3NlcmlhbGl6YWJsZXRlc3QvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3NlcmlhbGl6YWJsZXRlc3QvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDk2Zjg3MmQuLjQ2OGI3MmEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9zZXJpYWxpemFibGV0ZXN0L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvc2VyaWFsaXphYmxldGVzdC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTQ5LDcgKzQ5LDcgQEAKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLQkKKwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9zZXJpYWxpemFibGV0ZXN0L3Jhci9zcmMvY29tL3N1bi9jb25uZWN0b3IvYmxhY2tib3gvQm9vdHN0cmFwSG9sZGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvc2VyaWFsaXphYmxldGVzdC9yYXIvc3JjL2NvbS9zdW4vY29ubmVjdG9yL2JsYWNrYm94L0Jvb3RzdHJhcEhvbGRlci5qYXZhCmluZGV4IDk5NGNhZDguLjM5MDc0NGYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9zZXJpYWxpemFibGV0ZXN0L3Jhci9zcmMvY29tL3N1bi9jb25uZWN0b3IvYmxhY2tib3gvQm9vdHN0cmFwSG9sZGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3NlcmlhbGl6YWJsZXRlc3QvcmFyL3NyYy9jb20vc3VuL2Nvbm5lY3Rvci9ibGFja2JveC9Cb290c3RyYXBIb2xkZXIuamF2YQpAQCAtMjgsNyArMjgsNyBAQAogICAgIHByaXZhdGUgV29ya01hbmFnZXIgd207CiAKICAgICBwdWJsaWMgQm9vdHN0cmFwSG9sZGVyKEJvb3RzdHJhcENvbnRleHQgY29udGV4dCkgewotICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0OyAgICAKKyAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDsKICAgICAgICAgdGhpcy53bSA9IChXb3JrTWFuYWdlcikgbWFrZUNvcHlPZk9iamVjdChjb250ZXh0LmdldFdvcmtNYW5hZ2VyKCkpOwogICAgICAgICBjaGVja0VxdWFsaXR5KHdtLCBjb250ZXh0LmdldFdvcmtNYW5hZ2VyKCkpOwogICAgICAgICB0aGlzLnhhdCA9IChYQVRlcm1pbmF0b3IpIG1ha2VDb3B5T2ZPYmplY3QoY29udGV4dC5nZXRYQVRlcm1pbmF0b3IoKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvc2VyaWFsaXphYmxldGVzdC9yYXIvc3JjL2NvbS9zdW4vY29ubmVjdG9yL2JsYWNrYm94L0pkYmNDb25uZWN0aW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvc2VyaWFsaXphYmxldGVzdC9yYXIvc3JjL2NvbS9zdW4vY29ubmVjdG9yL2JsYWNrYm94L0pkYmNDb25uZWN0aW9uLmphdmEKaW5kZXggNmE3MjY3Yy4uZDU4YWY0NCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3NlcmlhbGl6YWJsZXRlc3QvcmFyL3NyYy9jb20vc3VuL2Nvbm5lY3Rvci9ibGFja2JveC9KZGJjQ29ubmVjdGlvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9zZXJpYWxpemFibGV0ZXN0L3Jhci9zcmMvY29tL3N1bi9jb25uZWN0b3IvYmxhY2tib3gvSmRiY0Nvbm5lY3Rpb24uamF2YQpAQCAtMTgzLDcgKzE4Myw3IEBACiAgICAgfQogCiAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0gICAgLy8gVEhFIEZPTExPV0lORyBBUElTIEFSRSBORVcgRlJPTSBKREsgMS40IC8vICAgICAgICAKKyAgICAvLyBUSEUgRk9MTE9XSU5HIEFQSVMgQVJFIE5FVyBGUk9NIEpESyAxLjQgLy8KICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAogICAgIC8vLy8vLy8vLy8vLy8gIEJFR0lOICBKREsgMS40ICAvLy8vLy8vLy8vLy8vLwpAQCAtMzI5LDI3ICszMjksMjcgQEAKICAgICB9CiAKICAgICAvLy8vLy8vLy8vLy8vICBFTkQgIEpESyAxLjQgIC8vLy8vLy8vLy8vLy8vCi0gICAgCisKICAgICBwdWJsaWMgaW50IGdldE5ldHdvcmtUaW1lb3V0KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICB0aHJvdyBuZXcgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiRG8gbm90IHN1cHBvcnQgSmF2YSA3IG5ldyBmZWF0dXJlLiIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldE5ldHdvcmtUaW1lb3V0KEV4ZWN1dG9yIGV4ZWN1dG9yLCBpbnQgbWlsbGlzZWNvbmRzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgbmV3IGZlYXR1cmUuIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgYWJvcnQoRXhlY3V0b3IgZXhlY3V0b3IpICB0aHJvd3MgU1FMRXhjZXB0aW9uewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBuZXcgZmVhdHVyZS4iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldFNjaGVtYSgpIHRocm93cyBTUUxFeGNlcHRpb257CiAgICAgICB0aHJvdyBuZXcgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiRG8gbm90IHN1cHBvcnQgSmF2YSA3IG5ldyBmZWF0dXJlLiIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFNjaGVtYShTdHJpbmcgc2NoZW1hKSB0aHJvd3MgU1FMRXhjZXB0aW9uewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBuZXcgZmVhdHVyZS4iKTsKICAgICB9Ci0gICAgCisKIAogICAgIHZvaWQgYXNzb2NpYXRlQ29ubmVjdGlvbihKZGJjTWFuYWdlZENvbm5lY3Rpb24gbmV3TWMpCiAgICAgICAgICAgICB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3NlcmlhbGl6YWJsZXRlc3QvcmFyL3NyYy9jb20vc3VuL2Nvbm5lY3Rvci9ibGFja2JveC9SZXNvdXJjZUFkYXB0ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9zZXJpYWxpemFibGV0ZXN0L3Jhci9zcmMvY29tL3N1bi9jb25uZWN0b3IvYmxhY2tib3gvUmVzb3VyY2VBZGFwdGVyLmphdmEKaW5kZXggOGYyZjM1NC4uNzkyNTA5OCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3NlcmlhbGl6YWJsZXRlc3QvcmFyL3NyYy9jb20vc3VuL2Nvbm5lY3Rvci9ibGFja2JveC9SZXNvdXJjZUFkYXB0ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvc2VyaWFsaXphYmxldGVzdC9yYXIvc3JjL2NvbS9zdW4vY29ubmVjdG9yL2JsYWNrYm94L1Jlc291cmNlQWRhcHRlci5qYXZhCkBAIC00NCw3ICs0NCw3IEBACiAgICAgfQogCiAgICAgcHVibGljIFhBUmVzb3VyY2VbXSBnZXRYQVJlc291cmNlcyhBY3RpdmF0aW9uU3BlY1tdIGFjdGl2YXRpb25TcGVjcykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKLSAgICAgICAgcmV0dXJuIG51bGw7ICAKKyAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQogCiAgICAgcHVibGljIEJvb3RzdHJhcENvbnRleHQgZ2V0Qm9vdHN0cmFwQ29udGV4dCgpewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3NlcmlhbGl6YWJsZXRlc3Qvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3NlcmlhbGl6YWJsZXRlc3Qvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IDQyMzQxMTUuLmVkNmRiYWIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9zZXJpYWxpemFibGV0ZXN0L3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvc2VyaWFsaXphYmxldGVzdC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsMjAgKzEsMjAgQEAKLURyb3AgdGFibGUgVFhMRVZFTFNXSVRDSDsNCi0NCi1DUkVBVEUgVEFCTEUgVFhMRVZFTFNXSVRDSCAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikNCi0pOw0KLQ0KLUlOU0VSVCBJTlRPIFRYTEVWRUxTV0lUQ0ggVkFMVUVTKDEwLCAnYWJjZCcpOw0KLUlOU0VSVCBJTlRPIFRYTEVWRUxTV0lUQ0ggVkFMVUVTKDExLCAncHFycycpOw0KLQ0KLURyb3AgdGFibGUgVFhMRVZFTFNXSVRDSDI7DQotDQotQ1JFQVRFIFRBQkxFIFRYTEVWRUxTV0lUQ0gyICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQotSU5TRVJUIElOVE8gVFhMRVZFTFNXSVRDSDIgVkFMVUVTKDEsICdhYmNkJyk7DQotSU5TRVJUIElOVE8gVFhMRVZFTFNXSVRDSDIgVkFMVUVTKDIsICdwcXJzJyk7DQotDQorRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIOworCitDUkVBVEUgVEFCTEUgVFhMRVZFTFNXSVRDSCAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCitJTlNFUlQgSU5UTyBUWExFVkVMU1dJVENIIFZBTFVFUygxMCwgJ2FiY2QnKTsKK0lOU0VSVCBJTlRPIFRYTEVWRUxTV0lUQ0ggVkFMVUVTKDExLCAncHFycycpOworCitEcm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0gyOworCitDUkVBVEUgVEFCTEUgVFhMRVZFTFNXSVRDSDIgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQorKTsKKworSU5TRVJUIElOVE8gVFhMRVZFTFNXSVRDSDIgVkFMVUVTKDEsICdhYmNkJyk7CitJTlNFUlQgSU5UTyBUWExFVkVMU1dJVENIMiBWQUxVRVMoMiwgJ3BxcnMnKTsKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3NlcmlhbGl6YWJsZXRlc3Qvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci92My9zZXJpYWxpemFibGV0ZXN0L3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggMGMxMjQyZi4uZDExYTExNSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3YzL3NlcmlhbGl6YWJsZXRlc3Qvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3IvdjMvc2VyaWFsaXphYmxldGVzdC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xLDIgKzEsMiBAQAotRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIOw0KLURyb3AgdGFibGUgVFhMRVZFTFNXSVRDSDI7DQorRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIOworRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIMjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGUyY2M3NWQuLmRjMTljOWIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTYgKzE1LDE2IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXN1YmNsYXNzaW5nIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zdWJjbGFzc2luZyIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0ic3ViY2xhc3NpbmciLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL2J1aWxkLnhtbAppbmRleCAwZmQwOTBhLi41MmVkMzRmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvYnVpbGQueG1sCkBAIC0zMSw3ICszMSw3IEBACiAgICAgJmNvbW1vbkJ1aWxkOwogICAgICZjb21tb25SdW47CiAgICAgJnRlc3Rwcm9wZXJ0aWVzOwotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLCBzZXR1cCwgZGVwbG95LWVhciwgcnVuLWVhciwgIHVuZGVwbG95LWVhciwgdW5zZXR1cCIvPgogCiAKQEAgLTM5LDE0ICszOSwxNCBAQAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICAgIDxhbnQgZGlyPSJyYSIgdGFyZ2V0PSJjbGVhbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCI+CiAgICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbm5lY3RvciI+CiAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL3NpbXBsZUJhbmsuc3FsIi8+CiAgICAgICAgICAgICA8L2FudGNhbGw+Ci0gICAgICAgIAorCiAgICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1yYS1jb25maWciLz4KLSAgICAgICAgCisKICAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXJhci1jb21tb24iPgogICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJyYXJmaWxlIiB2YWx1ZT0icmEvcHVibGlzaC9saWIvamRiY3JhLnJhciIvPgogICAgICAgICAgICAgPC9hbnRjYWxsPgpAQCAtODAsMTggKzgwLDE4IEBACiAgICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLWFkbWluLW9iamVjdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9ImNyZWF0ZS1hZG1pbi1vYmplY3QgLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0gLS1yZXN0eXBlIGNvbS5zdW4uamRiY3JhLnNwaS5KZGJjU2V0dXBBZG1pbiAtLXJhbmFtZSBqZGJjcmEgLS1wcm9wZXJ0eSBUYWJsZU5hbWU9Y3VzdG9tZXIyOkpuZGlOYW1lPWpkYmMvZWpiLXN1YmNsYXNzaW5nOlNjaGVtYU5hbWU9REJVU0VSOk5vT2ZSb3dzPTEiLz4KLQkgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSJlaXMvamRiY0FkbWluIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iZWlzL2pkYmNBZG1pbiIvPgogICAgICAgICAgPC9hbnRjYWxsPgogICAgICA8L3RhcmdldD4KIAogICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1hZG1pbi1vYmplY3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgotCSAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9ImRlbGV0ZS1hZG1pbi1vYmplY3QiLz4KLQkgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSBlaXMvamRiY0FkbWluIi8+Ci0JIDwvYW50Y2FsbD4KLQkgPCEtLTxhbnRjYWxsIHRhcmdldD0icmVjb25maWctY29tbW9uIi8+LS0+CisgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0iZGVsZXRlLWFkbWluLW9iamVjdCIvPgorICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9IGVpcy9qZGJjQWRtaW4iLz4KKyAgICAgPC9hbnRjYWxsPgorICAgICA8IS0tPGFudGNhbGwgdGFyZ2V0PSJyZWNvbmZpZy1jb21tb24iLz4tLT4KICAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RhcnQiPgogICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXItaW5zdGFuY2UtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC05OSwzMSArOTksMzEgQEAKICAgICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtcmEtY29uZmlnIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0iY3JlYXRlLXJlc291cmNlLWFkYXB0ZXItY29uZmlnICAtLXByb3BlcnR5IFJBUHJvcGVydHk9VkFMSUQiLz4KLQkgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSJqZGJjcmEiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSJqZGJjcmEiLz4KICAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgPC90YXJnZXQ+CiAKICAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmEtY29uZmlnIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KLQkgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJkZWxldGUtcmVzb3VyY2UtYWRhcHRlci1jb25maWciLz4KLQkgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSJqZGJjcmEiLz4KLQkgPC9hbnRjYWxsPgotCSA8IS0tPGFudGNhbGwgdGFyZ2V0PSJyZWNvbmZpZy1jb21tb24iLz4tLT4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJkZWxldGUtcmVzb3VyY2UtYWRhcHRlci1jb25maWciLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSJqZGJjcmEiLz4KKyAgICAgPC9hbnRjYWxsPgorICAgICA8IS0tPGFudGNhbGwgdGFyZ2V0PSJyZWNvbmZpZy1jb21tb24iLz4tLT4KICAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVuc2V0dXAiPgotCSAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbm5lY3RvciI+Ci0gICAgICAgIAk8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcEJhbmtUYWJsZXMuc3FsIi8+Ci0JICAgICAgPC9hbnRjYWxsPgotCQotCSAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1yZXNvdXJjZSIvPgotCSAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1wb29sIi8+Ci0JICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWFkbWluLW9iamVjdCIvPgotCSAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXJhci1jb21tb24iPgotCSAgICAJPHBhcmFtIG5hbWU9InVuZGVwbG95cmFyIiB2YWx1ZT0iamRiY3JhIi8+Ci0JICAgIDwvYW50Y2FsbD4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb25uZWN0b3IiPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BCYW5rVGFibGVzLnNxbCIvPgorICAgICAgICAgIDwvYW50Y2FsbD4KKworICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1yZXNvdXJjZSIvPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1wb29sIi8+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWFkbWluLW9iamVjdCIvPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXJhci1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9InVuZGVwbG95cmFyIiB2YWx1ZT0iamRiY3JhIi8+CisgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXBvb2wiPgogICAgICAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWNvbm5lY3Rvci1jb25ucG9vbC1jb21tb24iPgogICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJjb25uZWN0b3IuY29ucG9vbC5uYW1lIiB2YWx1ZT0ic3RhbmRhbG9uZS1yYS1wb29sIi8+CkBAIC0xMzMsNyArMTMzLDcgQEAKICAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2UiPgogICAgICAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWNvbm5lY3Rvci1yZXNvdXJjZS1jb21tb24iPgogICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJjb25uZWN0b3Iuam5kaS5uYW1lIiB2YWx1ZT0iamRiYy9lamItc3ViY2xhc3NpbmciLz4KLQkJPC9hbnRjYWxsPgorICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KQEAgLTE0OSw5ICsxNDksOSBAQAogICAgICAgPGVjaG8gbWVzc2FnZT0iY29tbW9uLnhtbDogQ29tcGlsaW5nIHRlc3Qgc291cmNlIGZpbGVzIiBsZXZlbD0idmVyYm9zZSIvPgogICAgICAgPGphdmFjIHNyY2Rpcj0ic2VydmxldCIKICAgICAgICAgIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgotCSBjbGFzc3BhdGg9IiR7czFhc3Rlc3QuY2xhc3NwYXRofTpyYS9wdWJsaXNoL2ludGVybmFsL2NsYXNzZXMiCisgICAgIGNsYXNzcGF0aD0iJHtzMWFzdGVzdC5jbGFzc3BhdGh9OnJhL3B1Ymxpc2gvaW50ZXJuYWwvY2xhc3NlcyIKICAgICAgICAgIGRlYnVnPSJvbiIKLQkgZmFpbG9uZXJyb3I9InRydWUiLz4KKyAgICAgZmFpbG9uZXJyb3I9InRydWUiLz4KICAgICAgPC90YXJnZXQ+CiAKIApAQCAtMTYwLDMxICsxNjAsMzEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgIDxhbnQgZGlyPSJyYSIgdGFyZ2V0PSJhc3NlbWJsZSIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgIDwvYW50Y2FsbD4KLSAgICAgICAKKwogICAgIDxhbnRjYWxsIHRhcmdldD0iZWpiLWphci1jb21tb24iPgogICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICA8L2FudGNhbGw+CiAKLSAgICAKKwogICAgIDxkZWxldGUgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0uZWFyIi8+CiAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+Ci0gICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4gICAgCi0gICAgPGVhciBlYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiIAorICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CisgICAgPGVhciBlYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiCiAgICAgIGFwcHhtbD0iJHthcHBsaWNhdGlvbi54bWx9Ij4KLSAgICAJPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgotIAkgICAgIDxpbmNsdWRlIG5hbWU9IiouamFyIi8+Ci0JICAgICAgPGluY2x1ZGUgbmFtZT0iKi53YXIiLz4KLQkgICAgPC9maWxlc2V0PgorICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSI+CisgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KKyAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLndhciIvPgorICAgICAgICA8L2ZpbGVzZXQ+CiAgICAgPC9lYXI+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCi0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveS1lYXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC0xOTIsMjcgKzE5MiwyNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95LXdhciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi13YXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW53ZWJjbGllbnQtY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0idGVzdHN1aXRlLmlkIiB2YWx1ZT0id2ViLXRvLWNvbm5lY3RvciAoc3RhbmQtYWxvbmUgd2FyIGFuZCByYXIgYmFzZWQpIi8+Ci0JPC9hbnRjYWxsPgorICAgIDxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJ3ZWItdG8tY29ubmVjdG9yIChzdGFuZC1hbG9uZSB3YXIgYW5kIHJhciBiYXNlZCkiLz4KKyAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi1lYXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW53ZWJjbGllbnQtY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0idGVzdHN1aXRlLmlkIiB2YWx1ZT0id2ViLXRvLWNvbm5lY3RvciAoZWFyIGJhc2VkKSIvPgotCTwvYW50Y2FsbD4KKyAgICA8cGFyYW0gbmFtZT0idGVzdHN1aXRlLmlkIiB2YWx1ZT0id2ViLXRvLWNvbm5lY3RvciAoZWFyIGJhc2VkKSIvPgorICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3ktZWFyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1yYS1jb25maWciLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveS13YXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKaW5kZXggMWQxMjAwZC4uZGY0YmI5MyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKQEAgLTI5LDIwICsyOSwyMCBAQAogICAgICAgICA8cmVzLXJlZi1uYW1lPmpkYmMvU2ltcGxlQmFuazwvcmVzLXJlZi1uYW1lPgogICAgICAgICA8am5kaS1uYW1lPmpkYmMvZWpiLXN1YmNsYXNzaW5nPC9qbmRpLW5hbWU+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KLSAgICAgIDxpcy1yZWFkLW9ubHktYmVhbj5mYWxzZTwvaXMtcmVhZC1vbmx5LWJlYW4+IAotICAgICAgPGNvbW1pdC1vcHRpb24+QjwvY29tbWl0LW9wdGlvbj4gCi0gICAgIDxiZWFuLXBvb2w+IAotICAgICAgICAgPHN0ZWFkeS1wb29sLXNpemU+MDwvc3RlYWR5LXBvb2wtc2l6ZT4gCi0gICAgICAgICA8cmVzaXplLXF1YW50aXR5PjE8L3Jlc2l6ZS1xdWFudGl0eT4gCi0gICAgICAgICA8bWF4LXBvb2wtc2l6ZT4xMDwvbWF4LXBvb2wtc2l6ZT4gCi0gICAgICAgICA8cG9vbC1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4zNjAwPC9wb29sLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPiAKLSAgICAgIDwvYmVhbi1wb29sPiAKLSAgICAgIDxiZWFuLWNhY2hlPiAKLSAgICAgICAgICA8bWF4LWNhY2hlLXNpemU+MTAwPC9tYXgtY2FjaGUtc2l6ZT4gCi0gICAgICAgIDxjYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz42MDwvY2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+IAotICAgICAgICA8cmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+IAotICAgICAgICA8dmljdGltLXNlbGVjdGlvbi1wb2xpY3k+TFJVPC92aWN0aW0tc2VsZWN0aW9uLXBvbGljeT4gCi0gICAgICA8L2JlYW4tY2FjaGU+IAorICAgICAgPGlzLXJlYWQtb25seS1iZWFuPmZhbHNlPC9pcy1yZWFkLW9ubHktYmVhbj4KKyAgICAgIDxjb21taXQtb3B0aW9uPkI8L2NvbW1pdC1vcHRpb24+CisgICAgIDxiZWFuLXBvb2w+CisgICAgICAgICA8c3RlYWR5LXBvb2wtc2l6ZT4wPC9zdGVhZHktcG9vbC1zaXplPgorICAgICAgICAgPHJlc2l6ZS1xdWFudGl0eT4xPC9yZXNpemUtcXVhbnRpdHk+CisgICAgICAgICA8bWF4LXBvb2wtc2l6ZT4xMDwvbWF4LXBvb2wtc2l6ZT4KKyAgICAgICAgIDxwb29sLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjM2MDA8L3Bvb2wtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+CisgICAgICA8L2JlYW4tcG9vbD4KKyAgICAgIDxiZWFuLWNhY2hlPgorICAgICAgICAgIDxtYXgtY2FjaGUtc2l6ZT4xMDA8L21heC1jYWNoZS1zaXplPgorICAgICAgICA8Y2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+NjA8L2NhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPgorICAgICAgICA8cmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+CisgICAgICAgIDx2aWN0aW0tc2VsZWN0aW9uLXBvbGljeT5MUlU8L3ZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PgorICAgICAgPC9iZWFuLWNhY2hlPgogICAgIDwvZWpiPgogICAgIDxlamI+CiAgICAgICA8ZWpiLW5hbWU+Q3VzdG9tZXJDaGVja2luZ0VKQjwvZWpiLW5hbWU+CkBAIC01MSwyMCArNTEsMjAgQEAKICAgICAgICAgPHJlcy1yZWYtbmFtZT5qZGJjL1NpbXBsZUJhbms8L3Jlcy1yZWYtbmFtZT4KICAgICAgICAgPGpuZGktbmFtZT5qZGJjL2VqYi1zdWJjbGFzc2luZzwvam5kaS1uYW1lPgogICAgICAgPC9yZXNvdXJjZS1yZWY+Ci0gICAgICA8aXMtcmVhZC1vbmx5LWJlYW4+ZmFsc2U8L2lzLXJlYWQtb25seS1iZWFuPiAKLSAgICAgIDxjb21taXQtb3B0aW9uPkI8L2NvbW1pdC1vcHRpb24+IAotICAgICA8YmVhbi1wb29sPiAKLSAgICAgICAgIDxzdGVhZHktcG9vbC1zaXplPjA8L3N0ZWFkeS1wb29sLXNpemU+IAotICAgICAgICAgPHJlc2l6ZS1xdWFudGl0eT4xPC9yZXNpemUtcXVhbnRpdHk+IAotICAgICAgICAgPG1heC1wb29sLXNpemU+MTA8L21heC1wb29sLXNpemU+IAorICAgICAgPGlzLXJlYWQtb25seS1iZWFuPmZhbHNlPC9pcy1yZWFkLW9ubHktYmVhbj4KKyAgICAgIDxjb21taXQtb3B0aW9uPkI8L2NvbW1pdC1vcHRpb24+CisgICAgIDxiZWFuLXBvb2w+CisgICAgICAgICA8c3RlYWR5LXBvb2wtc2l6ZT4wPC9zdGVhZHktcG9vbC1zaXplPgorICAgICAgICAgPHJlc2l6ZS1xdWFudGl0eT4xPC9yZXNpemUtcXVhbnRpdHk+CisgICAgICAgICA8bWF4LXBvb2wtc2l6ZT4xMDwvbWF4LXBvb2wtc2l6ZT4KICAgICAgICAgPHBvb2wtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcG9vbC1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4KLSAgICAgIDwvYmVhbi1wb29sPiAKLSAgICAgIDxiZWFuLWNhY2hlPiAKKyAgICAgIDwvYmVhbi1wb29sPgorICAgICAgPGJlYW4tY2FjaGU+CiAgICAgICAgICAgPG1heC1jYWNoZS1zaXplPjEwMDwvbWF4LWNhY2hlLXNpemU+CiAgICAgICAgICAgPGNhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjYwPC9jYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4KICAgICAgICAgICA8cmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+MzYwMDwvcmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+CiAgICAgICAgICAgPHZpY3RpbS1zZWxlY3Rpb24tcG9saWN5PkxSVTwvdmljdGltLXNlbGVjdGlvbi1wb2xpY3k+Ci0gICAgICA8L2JlYW4tY2FjaGU+IAorICAgICAgPC9iZWFuLWNhY2hlPgogICAgIDwvZWpiPgogICA8L2VudGVycHJpc2UtYmVhbnM+CiA8L3N1bi1lamItamFyPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvZWpiL0N1c3RvbWVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9lamIvQ3VzdG9tZXIuamF2YQppbmRleCA1OTIyZjMxLi4zNjE1ZTE2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9lamIvQ3VzdG9tZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9lamIvQ3VzdG9tZXIuamF2YQpAQCAtNDYsNCArNDYsNCBAQAogCiB9CiAKLSAgCisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL2VqYi9DdXN0b21lckNoZWNraW5nLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9lamIvQ3VzdG9tZXJDaGVja2luZy5qYXZhCmluZGV4IGZmMTVlN2UuLjg5ZGMzMjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL2VqYi9DdXN0b21lckNoZWNraW5nLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvZWpiL0N1c3RvbWVyQ2hlY2tpbmcuamF2YQpAQCAtMjIsNCArMjIsNCBAQAogewogfQogCi0gIAorCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9lamIvQ3VzdG9tZXJDaGVja2luZ0VKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvZWpiL0N1c3RvbWVyQ2hlY2tpbmdFSkIuamF2YQppbmRleCBlZTBkMTdjLi40YjU0NDQ0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9lamIvQ3VzdG9tZXJDaGVja2luZ0VKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL2VqYi9DdXN0b21lckNoZWNraW5nRUpCLmphdmEKQEAgLTk0LDUgKzk0LDUgQEAKICAgfQogCiB9Ci0gICAgCi0gICAgCisKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvZWpiL0N1c3RvbWVyRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9lamIvQ3VzdG9tZXJFSkIuamF2YQppbmRleCAwNTIwYjYwLi4wNzIyMGRiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9lamIvQ3VzdG9tZXJFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9lamIvQ3VzdG9tZXJFSkIuamF2YQpAQCAtNTMsNyArNTMsNyBAQAogCiAgIHB1YmxpYyBTdHJpbmcgZ2V0QWRkcmVzczEoKQogICB7Ci0gICAgcmV0dXJuIGFkZHJlc3MxOyAKKyAgICByZXR1cm4gYWRkcmVzczE7CiAgIH0KIAogICBwdWJsaWMgU3RyaW5nIGdldEFkZHJlc3MyKCkKQEAgLTEzOSw3ICsxMzksNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNRTCBleGNlcHRpb24gb2NjdXJlZCBpbiBlamJSZW1vdmUgbWV0aG9kIik7CiAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICB9Ci0gICAgCisKICAgfQogCiAgIHB1YmxpYyB2b2lkIGVqYlN0b3JlKCkKQEAgLTIwNiwxMiArMjA2LDEyIEBACiAgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsKICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU1FMRXhjZXB0aW9uIG9jY3VycmVkIGluIGVqYkxvYWQoKSBtZXRob2QiKTsKICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgfSAgIAorICAgIH0KICAgfQogCiAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkge30KICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkge30KIH0KLSAgICAgIAotICAgIAotICAgIAorCisKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvZWpiL0N1c3RvbWVyU2F2aW5ncy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvZWpiL0N1c3RvbWVyU2F2aW5ncy5qYXZhCmluZGV4IDI3NDA2OTIuLmM0NWExYzUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL2VqYi9DdXN0b21lclNhdmluZ3MuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9lamIvQ3VzdG9tZXJTYXZpbmdzLmphdmEKQEAgLTIyLDQgKzIyLDQgQEAKIHsKIH0KIAotICAKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvZWpiL0N1c3RvbWVyU2F2aW5nc0VKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvZWpiL0N1c3RvbWVyU2F2aW5nc0VKQi5qYXZhCmluZGV4IGYzMGI1MDYuLmIwY2U3YjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL2VqYi9DdXN0b21lclNhdmluZ3NFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9lamIvQ3VzdG9tZXJTYXZpbmdzRUpCLmphdmEKQEAgLTk1LDYgKzk1LDYgQEAKICAgfQogCiB9Ci0gICAgICAKLSAgICAKLSAgICAKKworCisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGVlMmVjYTAuLmZkMjFjM2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvYnVpbGQucHJvcGVydGllcwpAQCAtMTQsNyArMTQsNyBAQAogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKICMKIAotICAgIAorCiAjIyMgQ29tcG9uZW50IFByb3BlcnRpZXMgIyMjCiBzcmMuZGlyPXNyYwogY29tcG9uZW50LnB1Ymxpc2guaG9tZT0uCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9idWlsZC54bWwKaW5kZXggY2I2NmE0NS4uM2FjZWVmMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL2J1aWxkLnhtbApAQCAtMjMsNjIgKzIzLDYyIEBACiAKIDxwcm9qZWN0IG5hbWU9IkpEQkNDb25uZWN0b3IgdG9wIGxldmVsIiBkZWZhdWx0PSJidWlsZCI+CiAgICAgPHByb3BlcnR5IG5hbWU9InBrZy5kaXIiIHZhbHVlPSJjb20vc3VuL2pkYmNyYS9zcGkiLz4KLSAgICAKKwogICAgICZjb21tb247CiAgICAgJnRlc3Rjb21tb247CiAgICAgPHByb3BlcnR5IGZpbGU9Ii4vYnVpbGQucHJvcGVydGllcyIvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSxhc3NlbWJsZSIgLz4KLSAgICAgICAgICAKKwogCiAgICAgPCEtLSBpbml0LiBJbml0aWFsaXphdGlvbiBpbnZvbHZlcyBjcmVhdGluZyBwdWJsaXNoaW5nIGRpcmVjdG9yaWVzIGFuZAotICAgICAgICAgT1Mgc3BlY2lmaWMgdGFyZ2V0cy4gLS0+IAorICAgICAgICAgT1Mgc3BlY2lmaWMgdGFyZ2V0cy4gLS0+CiAgICAgPHRhcmdldCBuYW1lPSJpbml0IiBkZXNjcmlwdGlvbj0iJHtjb21wb25lbnQubmFtZX0gaW5pdGlhbGl6YXRpb24iPgogICAgICAgICA8dHN0YW1wPgogICAgICAgICAgICAgPGZvcm1hdCBwcm9wZXJ0eT0ic3RhcnQudGltZSIgcGF0dGVybj0iTU0vZGQveXl5eSBoaDptbSBhYSIvPgotICAgICAgICA8L3RzdGFtcD4gICAgCisgICAgICAgIDwvdHN0YW1wPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJCdWlsZGluZyBjb21wb25lbnQgJHtjb21wb25lbnQubmFtZX0iLz4KICAgICAgICAgPG1rZGlyIGRpcj0iJHtjb21wb25lbnQuY2xhc3Nlcy5kaXJ9Ii8+Ci0gICAgICAgIDxta2RpciBkaXI9IiR7Y29tcG9uZW50LmxpYi5ob21lfSIvPiAgICAKKyAgICAgICAgPG1rZGlyIGRpcj0iJHtjb21wb25lbnQubGliLmhvbWV9Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgPCEtLSBjb21waWxlIC0tPiAKKyAgICA8IS0tIGNvbXBpbGUgLS0+CiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJpbml0IgotICAgICAgICAgICAgZGVzY3JpcHRpb249IkNvbXBpbGUgY29tL3N1bi8qIGNvbS9pcGxhbmV0Lyogc291cmNlcyI+ICAKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJDb21waWxlIGNvbS9zdW4vKiBjb20vaXBsYW5ldC8qIHNvdXJjZXMiPgogICAgICAgICA8IS0tPGVjaG8gbWVzc2FnZT0iQ29ubmVjdG9yIGFwaSByZXNpZGVzIGluICR7Y29ubmVjdG9yLWFwaS5qYXJ9Ii8+LS0+Ci0gICAgICAgIDxqYXZhYyBzcmNkaXI9IiR7c3JjLmRpcn0iIAorICAgICAgICA8amF2YWMgc3JjZGlyPSIke3NyYy5kaXJ9IgogICAgICAgICAgICAgICAgZGVzdGRpcj0iJHtjb21wb25lbnQuY2xhc3Nlcy5kaXJ9IgogICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiPgogICAgICAgICAgICAgPGNsYXNzcGF0aD4KLQkJPGZpbGVzZXQgZGlyPSIke2Vudi5TMUFTX0hPTUV9L21vZHVsZXMiPgotCQkgICAgPGluY2x1ZGUgbmFtZT0iKiovKi5qYXIiIC8+Ci0JCTwvZmlsZXNldD4KKyAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5TMUFTX0hPTUV9L21vZHVsZXMiPgorICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKiovKi5qYXIiIC8+CisgICAgICAgIDwvZmlsZXNldD4KICAgICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iY29tL3N1bi9qZGJjcmEvKioiLz4KICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9ImNvbS9zdW4vYXBwc2Vydi8qKiIvPgogICAgICAgICA8L2phdmFjPgogICAgIDwvdGFyZ2V0PgotICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCIvPgogCi0gICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIj4gICAgCi0gICAgCQotCTxqYXIgamFyZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L2pkYmMuamFyIiAKLSAgICAgICAgICAgIGJhc2VkaXI9IiR7Y29tcG9uZW50LmNsYXNzZXMuZGlyfSIgaW5jbHVkZXM9IiR7cGtnLmRpcn0vKiovKiwgCi0gICAgICAgICAgICBjb20vc3VuL2FwcHNlcnYvKiovKiwgY29tL3N1bi9qZGJjcmEvdXRpbC8qKi8qLCBjb20vc3VuL2pkYmNyYS9jb21tb24vKiovKiIvPiAKLSAgIAkKLSAgICAgICAgPGNvcHkgZmlsZT0iJHtzcmMuZGlyfS9jb20vc3VuL2pkYmNyYS9zcGkvMS40L3JhLWRzLnhtbCIgCi0gICAgICAgICAgICAgICAgdG9maWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CQorICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZSI+CisKKyAgICA8amFyIGphcmZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9qZGJjLmphciIKKyAgICAgICAgICAgIGJhc2VkaXI9IiR7Y29tcG9uZW50LmNsYXNzZXMuZGlyfSIgaW5jbHVkZXM9IiR7cGtnLmRpcn0vKiovKiwKKyAgICAgICAgICAgIGNvbS9zdW4vYXBwc2Vydi8qKi8qLCBjb20vc3VuL2pkYmNyYS91dGlsLyoqLyosIGNvbS9zdW4vamRiY3JhL2NvbW1vbi8qKi8qIi8+CisKKyAgICAgICAgPGNvcHkgZmlsZT0iJHtzcmMuZGlyfS9jb20vc3VuL2pkYmNyYS9zcGkvMS40L3JhLWRzLnhtbCIKKyAgICAgICAgICAgICAgICB0b2ZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4KICAgICAgICAgPC9jb3B5PgotICAgCTxqYXIgamFyZmlsZT0iJHtjb21wb25lbnQubGliLmhvbWV9L2pkYmNyYS5yYXIiIAotCQliYXNlZGlyPSIke2NvbXBvbmVudC5saWIuaG9tZX0iIGluY2x1ZGVzPSJqZGJjLmphciI+CisgICAgICAgPGphciBqYXJmaWxlPSIke2NvbXBvbmVudC5saWIuaG9tZX0vamRiY3JhLnJhciIKKyAgICAgICAgYmFzZWRpcj0iJHtjb21wb25lbnQubGliLmhvbWV9IiBpbmNsdWRlcz0iamRiYy5qYXIiPgogCi0gICAJCTxtZXRhaW5mIGRpcj0iJHtjb21wb25lbnQubGliLmhvbWV9Ij4KLSAgIAkJCTxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgotICAgCQk8L21ldGFpbmY+Ci0gICAJPC9qYXI+CisgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iJHtjb21wb25lbnQubGliLmhvbWV9Ij4KKyAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgorICAgICAgICAgICA8L21ldGFpbmY+CisgICAgICAgPC9qYXI+CiAKLSAgIAk8ZGVsZXRlIGZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9yYS54bWwiLz4KLQkKKyAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Y29tcG9uZW50LmxpYi5ob21lfS9yYS54bWwiLz4KKwogICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlc2NyaXB0aW9uPSJDbGVhbiB0aGUgYnVpbGQiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vYXBwc2Vydi9qZGJjcmEvRGF0YVNvdXJjZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vYXBwc2Vydi9qZGJjcmEvRGF0YVNvdXJjZS5qYXZhCmluZGV4IDlmODM5OWEuLmI2ZWYzMGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2FwcHNlcnYvamRiY3JhL0RhdGFTb3VyY2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9hcHBzZXJ2L2pkYmNyYS9EYXRhU291cmNlLmphdmEKQEAgLTIwLDE1ICsyMCwxNSBAQAogaW1wb3J0IGphdmEuc3FsLlNRTEV4Y2VwdGlvbjsKIAogLyoqCi0gKiBUaGUgPGNvZGU+amF2YXguc3FsLkRhdGFTb3VyY2U8L2NvZGU+IGltcGxlbWVudGF0aW9uIG9mIFN1bk9ORSBhcHBsaWNhdGlvbiAKKyAqIFRoZSA8Y29kZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29kZT4gaW1wbGVtZW50YXRpb24gb2YgU3VuT05FIGFwcGxpY2F0aW9uCiAgKiBzZXJ2ZXIgd2lsbCBpbXBsZW1lbnQgdGhpcyBpbnRlcmZhY2UuIEFuIGFwcGxpY2F0aW9uIHByb2dyYW0gd291bGQgYmUgYWJsZQotICogdG8gdXNlIHRoaXMgaW50ZXJmYWNlIHRvIGRvIHRoZSBleHRlbmRlZCBmdW5jdGlvbmFsaXR5IGV4cG9zZWQgYnkgU3VuT05FIAorICogdG8gdXNlIHRoaXMgaW50ZXJmYWNlIHRvIGRvIHRoZSBleHRlbmRlZCBmdW5jdGlvbmFsaXR5IGV4cG9zZWQgYnkgU3VuT05FCiAgKiBhcHBsaWNhdGlvbiBzZXJ2ZXIuCi0gKiA8cD5BIHNhbXBsZSBjb2RlIGZvciBnZXR0aW5nIGRyaXZlcidzIGNvbm5lY3Rpb24gaW1wbGVtZW50YXRpb24gd291bGQgbGlrZSAKKyAqIDxwPkEgc2FtcGxlIGNvZGUgZm9yIGdldHRpbmcgZHJpdmVyJ3MgY29ubmVjdGlvbiBpbXBsZW1lbnRhdGlvbiB3b3VsZCBsaWtlCiAgKiB0aGUgZm9sbG93aW5nLgogICogPHByZT4KICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgY29tLnN1bi5hcHBzZXJ2LkRhdGFTb3VyY2UgZHMgPSAoY29tLnN1bi5hcHBzZXJ2LkRhdGFTT3VyY2UpIGljLmxvb2t1cCgiamRiYy9Qb2ludEJhc2UiKTsgCisgICAgIGNvbS5zdW4uYXBwc2Vydi5EYXRhU291cmNlIGRzID0gKGNvbS5zdW4uYXBwc2Vydi5EYXRhU091cmNlKSBpYy5sb29rdXAoImpkYmMvUG9pbnRCYXNlIik7CiAgICAgIENvbm5lY3Rpb24gY29uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwogICAgICBDb25uZWN0aW9uIGRyaXZlcmNvbiA9IGRzLmdldENvbm5lY3Rpb24oY29uKTsKIApAQCAtMzYsMTMgKzM2LDEzIEBACiAKICAgICAgY29uLmNsb3NlKCk7CiAgICA8L3ByZT4KLSAqIAorICoKICAqIEBhdXRob3IgQmlub2QgUC5HCiAgKi8KIHB1YmxpYyBpbnRlcmZhY2UgRGF0YVNvdXJjZSBleHRlbmRzIGphdmF4LnNxbC5EYXRhU291cmNlIHsKIAogICAgIC8qKgotICAgICAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIFNRTENvbm5lY3Rpb24gZnJvbSB0aGUgQ29ubmVjdGlvbiB3cmFwcGVyIAorICAgICAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIFNRTENvbm5lY3Rpb24gZnJvbSB0aGUgQ29ubmVjdGlvbiB3cmFwcGVyCiAgICAgICogaW1wbGVtZW50YXRpb24gb2YgU3VuT05FIGFwcGxpY2F0aW9uIHNlcnZlci4gSWYgYW4gYWN0dWFsIGNvbm5lY3Rpb24gaXMKICAgICAgKiBzdXBwbGllZCBhcyBhcmd1bWVudCwgdGhlbiBpdCB3aWxsIGJlIGp1c3QgcmV0dXJuZWQuCiAgICAgICoKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIuamF2YQppbmRleCBjMjgyMmUyLi42YTM2NmIwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VPYmplY3RCdWlsZGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlT2JqZWN0QnVpbGRlci5qYXZhCkBAIC0yNywyMiArMjcsMjIgQEAKIGltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7CiBpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7CiAvKioKLSAqIFV0aWxpdHkgY2xhc3MsIHdoaWNoIHdvdWxkIGNyZWF0ZSBuZWNlc3NhcnkgRGF0YXNvdXJjZSBvYmplY3QgYWNjb3JkaW5nIHRvIHRoZSAKKyAqIFV0aWxpdHkgY2xhc3MsIHdoaWNoIHdvdWxkIGNyZWF0ZSBuZWNlc3NhcnkgRGF0YXNvdXJjZSBvYmplY3QgYWNjb3JkaW5nIHRvIHRoZQogICogc3BlY2lmaWNhdGlvbi4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzIzCi0gKiBAYXV0aG9yCUJpbm9kIFAuRwotICogQHNlZQkJY29tLnN1bi5qZGJjcmEuY29tbW9uLkRhdGFTb3VyY2VTcGVjCi0gKiBAc2VlCQljb20uc3VuLmpkYmNyYS51dGlsLk1ldGhvZEV4Y2VjdXRvcgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8yMworICogQGF1dGhvciAgICBCaW5vZCBQLkcKKyAqIEBzZWUgICAgICAgIGNvbS5zdW4uamRiY3JhLmNvbW1vbi5EYXRhU291cmNlU3BlYworICogQHNlZSAgICAgICAgY29tLnN1bi5qZGJjcmEudXRpbC5NZXRob2RFeGNlY3V0b3IKICAqLwogcHVibGljIGNsYXNzIERhdGFTb3VyY2VPYmplY3RCdWlsZGVyIGltcGxlbWVudHMgamF2YS5pby5TZXJpYWxpemFibGV7CiAKICAgICBwcml2YXRlIERhdGFTb3VyY2VTcGVjIHNwZWM7Ci0gICAgCisKICAgICBwcml2YXRlIEhhc2h0YWJsZSBkcml2ZXJQcm9wZXJ0aWVzID0gbnVsbDsKLSAgICAKLSAgICBwcml2YXRlIE1ldGhvZEV4ZWN1dG9yIGV4ZWN1dG9yID0gbnVsbDsgICAgCi0gICAgCisKKyAgICBwcml2YXRlIE1ldGhvZEV4ZWN1dG9yIGV4ZWN1dG9yID0gbnVsbDsKKwogICAgIHByaXZhdGUgc3RhdGljIExvZ2dlciBfbG9nZ2VyOwogICAgIHN0YXRpYyB7CiAgICAgICAgIF9sb2dnZXIgPSBMb2dnZXIuZ2V0QW5vbnltb3VzTG9nZ2VyKCk7CkBAIC01MCwxNjcgKzUwLDE2NyBAQAogICAgIHByaXZhdGUgYm9vbGVhbiBkZWJ1ZyA9IGZhbHNlOwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdCBhIERhdGFTb3VyY2UgT2JqZWN0IGZyb20gdGhlIHNwZWMuCi0gICAgICogCi0gICAgICogQHBhcmFtCXNwZWMJPGNvZGU+IERhdGFTb3VyY2VTcGVjIDwvY29kZT4gb2JqZWN0LgorICAgICAqCisgICAgICogQHBhcmFtICAgIHNwZWMgICAgPGNvZGU+IERhdGFTb3VyY2VTcGVjIDwvY29kZT4gb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyBEYXRhU291cmNlT2JqZWN0QnVpbGRlcihEYXRhU291cmNlU3BlYyBzcGVjKSB7Ci0gICAgCXRoaXMuc3BlYyA9IHNwZWM7Ci0gICAgCWV4ZWN1dG9yID0gbmV3IE1ldGhvZEV4ZWN1dG9yKCk7CisgICAgICAgIHRoaXMuc3BlYyA9IHNwZWM7CisgICAgICAgIGV4ZWN1dG9yID0gbmV3IE1ldGhvZEV4ZWN1dG9yKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0IHRoZSBEYXRhU291cmNlIE9iamVjdCBmcm9tIHRoZSBzcGVjLgogICAgICAqCi0gICAgICogQHJldHVybglPYmplY3QgY29uc3RydWN0ZWQgdXNpbmcgdGhlIERhdGFTb3VyY2VTcGVjLgotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+IGlmIHRoZSBjbGFzcyBpcyBub3QgZm91bmQgb3Igc29tZSBpc3N1ZSBpbiBleGVjdXRpbmcKLSAgICAgKgkJc29tZSBtZXRob2QuCisgICAgICogQHJldHVybiAgICBPYmplY3QgY29uc3RydWN0ZWQgdXNpbmcgdGhlIERhdGFTb3VyY2VTcGVjLgorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+IGlmIHRoZSBjbGFzcyBpcyBub3QgZm91bmQgb3Igc29tZSBpc3N1ZSBpbiBleGVjdXRpbmcKKyAgICAgKiAgICAgICAgc29tZSBtZXRob2QuCiAgICAgICovCiAgICAgcHVibGljIE9iamVjdCBjb25zdHJ1Y3REYXRhU291cmNlT2JqZWN0KCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewotICAgIAlkcml2ZXJQcm9wZXJ0aWVzID0gcGFyc2VEcml2ZXJQcm9wZXJ0aWVzKHNwZWMpOworICAgICAgICBkcml2ZXJQcm9wZXJ0aWVzID0gcGFyc2VEcml2ZXJQcm9wZXJ0aWVzKHNwZWMpOwogICAgICAgICBPYmplY3QgZGF0YVNvdXJjZU9iamVjdCA9IGdldERhdGFTb3VyY2VPYmplY3QoKTsKICAgICAgICAgTWV0aG9kW10gbWV0aG9kcyA9IGRhdGFTb3VyY2VPYmplY3QuZ2V0Q2xhc3MoKS5nZXRNZXRob2RzKCk7CiAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IG1ldGhvZHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgIFN0cmluZyBtZXRob2ROYW1lID0gbWV0aG9kc1tpXS5nZXROYW1lKCk7Ci0JICAgIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFVzZXIiKSl7CSAgICAJCi0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5VU0VSTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0UGFzc3dvcmQiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QQVNTV09SRCksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TG9naW5UaW1lT3V0IikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HSU5USU1FT1VUKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRMb2dXcml0ZXIiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dXUklURVIpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldERhdGFiYXNlTmFtZSIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFCQVNFTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0RGF0YVNvdXJjZU5hbWUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBU09VUkNFTkFNRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJICAgIAkKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0RGVzY3JpcHRpb24iKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERVNDUklQVElPTiksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE5ldHdvcmtQcm90b2NvbCIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk5FVFdPUktQUk9UT0NPTCksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKLQkgICAgCQotCSAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0UG9ydE51bWJlciIpKXsKLQkgICAgCWV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFJvbGVOYW1lIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUk9MRU5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAJCSAgICAJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFNlcnZlck5hbWUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5TRVJWRVJOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1heFN0YXRlbWVudHMiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5NQVhTVEFURU1FTlRTKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRJbml0aWFsUG9vbFNpemUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5JTklUSUFMUE9PTFNJWkUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1pblBvb2xTaXplIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUlOUE9PTFNJWkUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7Ci0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1heFBvb2xTaXplIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUFYUE9PTFNJWkUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE1heElkbGVUaW1lIikpewotCSAgICAJZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUFYSURMRVRJTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CSAgICAJCi0JICAgIAkKLQkgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFByb3BlcnR5Q3ljbGUiKSl7Ci0JICAgIAlleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5QUk9QRVJUWUNZQ0xFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOwkgICAgCQotCSAgICAJCi0JICAgIH0gZWxzZSBpZiAoZHJpdmVyUHJvcGVydGllcy5jb250YWluc0tleShtZXRob2ROYW1lLnRvVXBwZXJDYXNlKCkpKXsKLQkgICAgCVZlY3RvciB2YWx1ZXMgPSAoVmVjdG9yKSBkcml2ZXJQcm9wZXJ0aWVzLmdldChtZXRob2ROYW1lLnRvVXBwZXJDYXNlKCkpOwotCSAgICAgICAgZXhlY3V0b3IucnVuTWV0aG9kKG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCwgdmFsdWVzKTsKLQkgICAgfQorICAgICAgICBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRVc2VyIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVVNFUk5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFBhc3N3b3JkIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUEFTU1dPUkQpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldExvZ2luVGltZU91dCIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR0lOVElNRU9VVCksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0TG9nV3JpdGVyIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HV1JJVEVSKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXREYXRhYmFzZU5hbWUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBQkFTRU5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldERhdGFTb3VyY2VOYW1lIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQVNPVVJDRU5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldERlc2NyaXB0aW9uIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVTQ1JJUFRJT04pLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldE5ldHdvcmtQcm90b2NvbCIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk5FVFdPUktQUk9UT0NPTCksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0UG9ydE51bWJlciIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBPUlROVU1CRVIpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFJvbGVOYW1lIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUk9MRU5BTUUpLG1ldGhvZHNbaV0sZGF0YVNvdXJjZU9iamVjdCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFsc0lnbm9yZUNhc2UoInNldFNlcnZlck5hbWUiKSl7CisgICAgICAgICAgICBleGVjdXRvci5ydW5KYXZhQmVhbk1ldGhvZChzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5TRVJWRVJOQU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNYXhTdGF0ZW1lbnRzIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTUFYU1RBVEVNRU5UUyksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzSWdub3JlQ2FzZSgic2V0SW5pdGlhbFBvb2xTaXplIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuSU5JVElBTFBPT0xTSVpFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNaW5Qb29sU2l6ZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1JTlBPT0xTSVpFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNYXhQb29sU2l6ZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1BWFBPT0xTSVpFKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRNYXhJZGxlVGltZSIpKXsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bkphdmFCZWFuTWV0aG9kKHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk1BWElETEVUSU1FKSxtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QpOworCisgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJzZXRQcm9wZXJ0eUN5Y2xlIikpeworICAgICAgICAgICAgZXhlY3V0b3IucnVuSmF2YUJlYW5NZXRob2Qoc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUFJPUEVSVFlDWUNMRSksbWV0aG9kc1tpXSxkYXRhU291cmNlT2JqZWN0KTsKKworICAgICAgICB9IGVsc2UgaWYgKGRyaXZlclByb3BlcnRpZXMuY29udGFpbnNLZXkobWV0aG9kTmFtZS50b1VwcGVyQ2FzZSgpKSl7CisgICAgICAgICAgICBWZWN0b3IgdmFsdWVzID0gKFZlY3RvcikgZHJpdmVyUHJvcGVydGllcy5nZXQobWV0aG9kTmFtZS50b1VwcGVyQ2FzZSgpKTsKKyAgICAgICAgICAgIGV4ZWN1dG9yLnJ1bk1ldGhvZChtZXRob2RzW2ldLGRhdGFTb3VyY2VPYmplY3QsIHZhbHVlcyk7CisgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gZGF0YVNvdXJjZU9iamVjdDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXQgdGhlIGV4dHJhIGRyaXZlciBwcm9wZXJ0aWVzIGZyb20gdGhlIERhdGFTb3VyY2VTcGVjIG9iamVjdCBhbmQKICAgICAgKiBwYXJzZSB0aGVtIHRvIGEgc2V0IG9mIG1ldGhvZE5hbWUgYW5kIHBhcmFtZXRlcnMuIFByZXBhcmUgYSBoYXNodGFibGUKICAgICAgKiBjb250YWluaW5nIHRoZXNlIGRldGFpbHMgYW5kIHJldHVybi4KICAgICAgKgotICAgICAqIEBwYXJhbQlzcGVjCTxjb2RlPiBEYXRhU291cmNlU3BlYyA8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAcmV0dXJuCUhhc2h0YWJsZSBjb250YWluaW5nIG1ldGhvZCBuYW1lcyBhbmQgcGFyYW1ldGVycywKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCUlmIGRlbGltaXRlciBpcyBub3QgcHJvdmlkZWQgYW5kIHByb3BlcnR5IHN0cmluZwotICAgICAqCQkJCQlpcyBub3QgbnVsbC4KKyAgICAgKiBAcGFyYW0gICAgc3BlYyAgICA8Y29kZT4gRGF0YVNvdXJjZVNwZWMgPC9jb2RlPiBvYmplY3QuCisgICAgICogQHJldHVybiAgICBIYXNodGFibGUgY29udGFpbmluZyBtZXRob2QgbmFtZXMgYW5kIHBhcmFtZXRlcnMsCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBJZiBkZWxpbWl0ZXIgaXMgbm90IHByb3ZpZGVkIGFuZCBwcm9wZXJ0eSBzdHJpbmcKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgaXMgbm90IG51bGwuCiAgICAgICovCiAgICAgcHJpdmF0ZSBIYXNodGFibGUgcGFyc2VEcml2ZXJQcm9wZXJ0aWVzKERhdGFTb3VyY2VTcGVjIHNwZWMpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKLSAgICAJU3RyaW5nIGRlbGltID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVMSU1JVEVSKTsKKyAgICAgICAgU3RyaW5nIGRlbGltID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVMSU1JVEVSKTsKIAogICAgICAgICBTdHJpbmcgcHJvcCA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRSSVZFUlBST1BFUlRJRVMpOwotCWlmICggcHJvcCA9PSBudWxsIHx8IHByb3AudHJpbSgpLmVxdWFscygiIikpIHsKLQkgICAgcmV0dXJuIG5ldyBIYXNodGFibGUoKTsKLQl9IGVsc2UgaWYgKGRlbGltID09IG51bGwgfHwgZGVsaW0uZXF1YWxzKCIiKSkgewotCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24gKCJEZWxpbWl0ZXIgaXMgbm90IHByb3ZpZGVkIGluIHRoZSBjb25maWd1cmF0aW9uIik7Ci0JfQotCQotCUhhc2h0YWJsZSBwcm9wZXJ0aWVzID0gbmV3IEhhc2h0YWJsZSgpOwotCWRlbGltID0gZGVsaW0udHJpbSgpOwkKLQlTdHJpbmcgc2VwID0gZGVsaW0rZGVsaW07Ci0JaW50IHNlcExlbiA9IHNlcC5sZW5ndGgoKTsKLQlTdHJpbmcgY2FjaGUgPSBwcm9wOwotCVZlY3RvciBtZXRob2RzID0gbmV3IFZlY3RvcigpOwotCQotCXdoaWxlIChjYWNoZS5pbmRleE9mKHNlcCkgIT0gLTEpIHsKLQkgICAgaW50IGluZGV4ID0gY2FjaGUuaW5kZXhPZihzZXApOwotCSAgICBTdHJpbmcgbmFtZSA9IGNhY2hlLnN1YnN0cmluZygwLGluZGV4KTsKLQkgICAgaWYgKG5hbWUudHJpbSgpICE9ICIiKSB7Ci0JICAgICAgICBtZXRob2RzLmFkZChuYW1lKTsKLQkgICAgCWNhY2hlID0gY2FjaGUuc3Vic3RyaW5nKGluZGV4K3NlcExlbik7Ci0JICAgIH0KLQl9Ci0JCi0gICAgCUVudW1lcmF0aW9uIGFsbE1ldGhvZHMgPSBtZXRob2RzLmVsZW1lbnRzKCk7Ci0gICAgCXdoaWxlIChhbGxNZXRob2RzLmhhc01vcmVFbGVtZW50cygpKSB7Ci0gICAgCSAgICBTdHJpbmcgb25lTWV0aG9kID0gKFN0cmluZykgYWxsTWV0aG9kcy5uZXh0RWxlbWVudCgpOyAgICAJICAgIAotICAgIAkgICAgaWYgKCFvbmVNZXRob2QudHJpbSgpLmVxdWFscygiIikpIHsKLSAgICAJICAgIAlTdHJpbmcgbWV0aG9kTmFtZSA9IG51bGw7Ci0gICAgCSAgICAJVmVjdG9yIHBhcm1zID0gbmV3IFZlY3RvcigpOwotICAgIAkgICAgCVN0cmluZ1Rva2VuaXplciBtZXRob2REZXRhaWxzID0gbmV3IFN0cmluZ1Rva2VuaXplcihvbmVNZXRob2QsZGVsaW0pOwotCQlmb3IgKGludCBpPTA7IG1ldGhvZERldGFpbHMuaGFzTW9yZVRva2VucygpO2krKyApIHsKLQkJICAgIFN0cmluZyB0b2tlbiA9IChTdHJpbmcpIG1ldGhvZERldGFpbHMubmV4dFRva2VuKCk7Ci0JCSAgICBpZiAoaT09MCkgewotCQkgICAgCW1ldGhvZE5hbWUgPSB0b2tlbi50b1VwcGVyQ2FzZSgpOwotCQkgICAgfSBlbHNlIHsKLQkJICAgIAlwYXJtcy5hZGQodG9rZW4pOwkJICAgIAkKLQkJICAgIH0KLQkJfQotCQlwcm9wZXJ0aWVzLnB1dChtZXRob2ROYW1lLHBhcm1zKTsKLSAgICAJICAgIH0gICAgCSAgICAKLSAgICAJfQotICAgIAlyZXR1cm4gcHJvcGVydGllczsKKyAgICBpZiAoIHByb3AgPT0gbnVsbCB8fCBwcm9wLnRyaW0oKS5lcXVhbHMoIiIpKSB7CisgICAgICAgIHJldHVybiBuZXcgSGFzaHRhYmxlKCk7CisgICAgfSBlbHNlIGlmIChkZWxpbSA9PSBudWxsIHx8IGRlbGltLmVxdWFscygiIikpIHsKKyAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uICgiRGVsaW1pdGVyIGlzIG5vdCBwcm92aWRlZCBpbiB0aGUgY29uZmlndXJhdGlvbiIpOwogICAgIH0KLSAgICAKKworICAgIEhhc2h0YWJsZSBwcm9wZXJ0aWVzID0gbmV3IEhhc2h0YWJsZSgpOworICAgIGRlbGltID0gZGVsaW0udHJpbSgpOworICAgIFN0cmluZyBzZXAgPSBkZWxpbStkZWxpbTsKKyAgICBpbnQgc2VwTGVuID0gc2VwLmxlbmd0aCgpOworICAgIFN0cmluZyBjYWNoZSA9IHByb3A7CisgICAgVmVjdG9yIG1ldGhvZHMgPSBuZXcgVmVjdG9yKCk7CisKKyAgICB3aGlsZSAoY2FjaGUuaW5kZXhPZihzZXApICE9IC0xKSB7CisgICAgICAgIGludCBpbmRleCA9IGNhY2hlLmluZGV4T2Yoc2VwKTsKKyAgICAgICAgU3RyaW5nIG5hbWUgPSBjYWNoZS5zdWJzdHJpbmcoMCxpbmRleCk7CisgICAgICAgIGlmIChuYW1lLnRyaW0oKSAhPSAiIikgeworICAgICAgICAgICAgbWV0aG9kcy5hZGQobmFtZSk7CisgICAgICAgICAgICBjYWNoZSA9IGNhY2hlLnN1YnN0cmluZyhpbmRleCtzZXBMZW4pOworICAgICAgICB9CisgICAgfQorCisgICAgICAgIEVudW1lcmF0aW9uIGFsbE1ldGhvZHMgPSBtZXRob2RzLmVsZW1lbnRzKCk7CisgICAgICAgIHdoaWxlIChhbGxNZXRob2RzLmhhc01vcmVFbGVtZW50cygpKSB7CisgICAgICAgICAgICBTdHJpbmcgb25lTWV0aG9kID0gKFN0cmluZykgYWxsTWV0aG9kcy5uZXh0RWxlbWVudCgpOworICAgICAgICAgICAgaWYgKCFvbmVNZXRob2QudHJpbSgpLmVxdWFscygiIikpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgbWV0aG9kTmFtZSA9IG51bGw7CisgICAgICAgICAgICAgICAgVmVjdG9yIHBhcm1zID0gbmV3IFZlY3RvcigpOworICAgICAgICAgICAgICAgIFN0cmluZ1Rva2VuaXplciBtZXRob2REZXRhaWxzID0gbmV3IFN0cmluZ1Rva2VuaXplcihvbmVNZXRob2QsZGVsaW0pOworICAgICAgICBmb3IgKGludCBpPTA7IG1ldGhvZERldGFpbHMuaGFzTW9yZVRva2VucygpO2krKyApIHsKKyAgICAgICAgICAgIFN0cmluZyB0b2tlbiA9IChTdHJpbmcpIG1ldGhvZERldGFpbHMubmV4dFRva2VuKCk7CisgICAgICAgICAgICBpZiAoaT09MCkgeworICAgICAgICAgICAgICAgIG1ldGhvZE5hbWUgPSB0b2tlbi50b1VwcGVyQ2FzZSgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwYXJtcy5hZGQodG9rZW4pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHByb3BlcnRpZXMucHV0KG1ldGhvZE5hbWUscGFybXMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBwcm9wZXJ0aWVzOworICAgIH0KKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBEYXRhc291cmNlIG9iamVjdCBhY2NvcmRpbmcgdG8gdGhlIHNwZWMuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCUluaXRpYWwgRGF0YVNvdXJjZSBPYmplY3QgaW5zdGFuY2UuCi0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4gSWYgY2xhc3MgbmFtZSBpcyB3cm9uZyBvciBjbGFzc3BhdGggaXMgbm90IHNldAotICAgICAqCQlwcm9wZXJseS4KKyAgICAgKiBAcmV0dXJuICAgIEluaXRpYWwgRGF0YVNvdXJjZSBPYmplY3QgaW5zdGFuY2UuCisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4gSWYgY2xhc3MgbmFtZSBpcyB3cm9uZyBvciBjbGFzc3BhdGggaXMgbm90IHNldAorICAgICAqICAgICAgICBwcm9wZXJseS4KICAgICAgKi8KICAgICBwcml2YXRlIE9iamVjdCBnZXREYXRhU291cmNlT2JqZWN0KCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewotICAgIAlTdHJpbmcgY2xhc3NOYW1lID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ0xBU1NOQU1FKTsKLSAgICAgICAgdHJ5IHsgICAgICAgICAgICAKKyAgICAgICAgU3RyaW5nIGNsYXNzTmFtZSA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNMQVNTTkFNRSk7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDbGFzcyBkYXRhU291cmNlQ2xhc3MgPSBDbGFzcy5mb3JOYW1lKGNsYXNzTmFtZSk7CiAgICAgICAgICAgICBPYmplY3QgZGF0YVNvdXJjZU9iamVjdCA9IGRhdGFTb3VyY2VDbGFzcy5uZXdJbnN0YW5jZSgpOwogICAgICAgICAgICAgcmV0dXJuIGRhdGFTb3VyY2VPYmplY3Q7CiAgICAgICAgIH0gY2F0Y2goQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBjZm5lKXsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfY25mZV9kcyIsIGNmbmUpOwotCQorICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19jbmZlX2RzIiwgY2ZuZSk7CisKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQ2xhc3MgTmFtZSBpcyB3cm9uZyBvciBDbGFzcyBwYXRoIGlzIG5vdCBzZXQgZm9yIDoiICsgY2xhc3NOYW1lKTsKICAgICAgICAgfSBjYXRjaChJbnN0YW50aWF0aW9uRXhjZXB0aW9uIGNlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2luc3QiLCBjbGFzc05hbWUpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19pbnN0IiwgY2xhc3NOYW1lKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiRXJyb3IgaW4gaW5zdGFudGlhdGluZyIgKyBjbGFzc05hbWUpOwogICAgICAgICB9IGNhdGNoKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gY2UpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfYWNjX2luc3QiLCBjbGFzc05hbWUpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19hY2NfaW5zdCIsIGNsYXNzTmFtZSk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBFcnJvciBpbiBpbnN0YW50aWF0aW5nIiArIGNsYXNzTmFtZSk7CiAgICAgICAgIH0KICAgICB9Ci0gIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VTcGVjLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvY29tbW9uL0RhdGFTb3VyY2VTcGVjLmphdmEKaW5kZXggZWY2YzRjOS4uM2RjMTU0ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9EYXRhU291cmNlU3BlYy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vRGF0YVNvdXJjZVNwZWMuamF2YQpAQCAtMTksOTIgKzE5LDkyIEBACiBpbXBvcnQgamF2YS51dGlsLkhhc2h0YWJsZTsKIAogLyoqCi0gKiBFbmNhcHN1bGF0ZSB0aGUgRGF0YVNvdXJjZSBvYmplY3QgZGV0YWlscyBvYnRhaW5lZCBmcm9tIAorICogRW5jYXBzdWxhdGUgdGhlIERhdGFTb3VyY2Ugb2JqZWN0IGRldGFpbHMgb2J0YWluZWQgZnJvbQogICogTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMjMKLSAqIEBhdXRob3IJQmlub2QgUC5HCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzIzCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRwogICovCiBwdWJsaWMgY2xhc3MgRGF0YVNvdXJjZVNwZWMgaW1wbGVtZW50cyBqYXZhLmlvLlNlcmlhbGl6YWJsZXsKIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVTRVJOQU1FCQkJCT0gMTsgICAgCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUEFTU1dPUkQJCQkJPSAyOyAgCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVVJMCQkJCQk9IDM7ICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMT0dJTlRJTUVPVVQJCQk9IDQ7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTE9HV1JJVEVSCQkJCT0gNTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQVRBQkFTRU5BTUUJCQk9IDY7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREFUQVNPVVJDRU5BTUUJCQk9IDc7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVTQ1JJUFRJT04JCQkJPSA4OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5FVFdPUktQUk9UT0NPTAkJCT0gOTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQT1JUTlVNQkVSCQkJCT0gMTA7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUk9MRU5BTUUJCQkJPSAxMTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTRVJWRVJOQU1FCQkJCT0gMTI7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYU1RBVEVNRU5UUwkJCT0gMTM7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5JVElBTFBPT0xTSVpFCQkJPSAxNDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNSU5QT09MU0laRQkJCQk9IDE1OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWFBPT0xTSVpFCQkJCT0gMTY7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYSURMRVRJTUUJCQkJPSAxNzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQUk9QRVJUWUNZQ0xFCQkJPSAxODsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEUklWRVJQUk9QRVJUSUVTCQkJPSAxOTsgICAgCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0xBU1NOQU1FCQkJCT0gMjA7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVMSU1JVEVSCQkJCT0gMjE7Ci0gICAgCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgWEFEQVRBU09VUkNFCQkJPSAyMjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQVRBU09VUkNFCQkJCT0gMjM7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OTkVDVElPTlBPT0xEQVRBU09VUkNFCQk9IDI0OwotICAgICAgCi0gICAgLy9HSkNJTlQgICAgICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVECT0gMjU7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVkFMSURBVElPTk1FVEhPRAkJCT0gMjY7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVkFMSURBVElPTlRBQkxFTkFNRQkJCT0gMjc7Ci0gICAgCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVFJBTlNBQ1RJT05JU09MQVRJT04JCT0gMjg7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwJCT0gMjk7Ci0gICAgICAgICAgICAKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVU0VSTkFNRSAgICAgICAgICAgICAgICA9IDE7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUEFTU1dPUkQgICAgICAgICAgICAgICAgPSAyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVSTCAgICAgICAgICAgICAgICAgICAgPSAzOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExPR0lOVElNRU9VVCAgICAgICAgICAgID0gNDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMT0dXUklURVIgICAgICAgICAgICAgICAgPSA1OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERBVEFCQVNFTkFNRSAgICAgICAgICAgID0gNjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQVRBU09VUkNFTkFNRSAgICAgICAgICAgID0gNzsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERVNDUklQVElPTiAgICAgICAgICAgICAgICA9IDg7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTkVUV09SS1BST1RPQ09MICAgICAgICAgICAgPSA5OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBPUlROVU1CRVIgICAgICAgICAgICAgICAgPSAxMDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBST0xFTkFNRSAgICAgICAgICAgICAgICA9IDExOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNFUlZFUk5BTUUgICAgICAgICAgICAgICAgPSAxMjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhTVEFURU1FTlRTICAgICAgICAgICAgPSAxMzsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTklUSUFMUE9PTFNJWkUgICAgICAgICAgICA9IDE0OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1JTlBPT0xTSVpFICAgICAgICAgICAgICAgID0gMTU7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYUE9PTFNJWkUgICAgICAgICAgICAgICAgPSAxNjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhJRExFVElNRSAgICAgICAgICAgICAgICA9IDE3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBST1BFUlRZQ1lDTEUgICAgICAgICAgICA9IDE4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERSSVZFUlBST1BFUlRJRVMgICAgICAgICAgICA9IDE5OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENMQVNTTkFNRSAgICAgICAgICAgICAgICA9IDIwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFTElNSVRFUiAgICAgICAgICAgICAgICA9IDIxOworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgWEFEQVRBU09VUkNFICAgICAgICAgICAgPSAyMjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQVRBU09VUkNFICAgICAgICAgICAgICAgID0gMjM7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OTkVDVElPTlBPT0xEQVRBU09VUkNFICAgICAgICA9IDI0OworCisgICAgLy9HSkNJTlQKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVEICAgID0gMjU7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVkFMSURBVElPTk1FVEhPRCAgICAgICAgICAgID0gMjY7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVkFMSURBVElPTlRBQkxFTkFNRSAgICAgICAgICAgID0gMjc7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUUkFOU0FDVElPTklTT0xBVElPTiAgICAgICAgPSAyODsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHVUFSQU5URUVJU09MQVRJT05MRVZFTCAgICAgICAgPSAyOTsKKwogICAgIHByaXZhdGUgSGFzaHRhYmxlIGRldGFpbHMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIHByb3BlcnR5LgogICAgICAqCi0gICAgICogQHBhcmFtCXByb3BlcnR5CVByb3BlcnR5IE5hbWUgdG8gYmUgc2V0LgotICAgICAqIEBwYXJhbQl2YWx1ZQkJVmFsdWUgb2YgcHJvcGVydHkgdG8gYmUgc2V0LgorICAgICAqIEBwYXJhbSAgICBwcm9wZXJ0eSAgICBQcm9wZXJ0eSBOYW1lIHRvIGJlIHNldC4KKyAgICAgKiBAcGFyYW0gICAgdmFsdWUgICAgICAgIFZhbHVlIG9mIHByb3BlcnR5IHRvIGJlIHNldC4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXREZXRhaWwoaW50IHByb3BlcnR5LCBTdHJpbmcgdmFsdWUpIHsKLSAgICAJZGV0YWlscy5wdXQobmV3IEludGVnZXIocHJvcGVydHkpLHZhbHVlKTsKKyAgICAgICAgZGV0YWlscy5wdXQobmV3IEludGVnZXIocHJvcGVydHkpLHZhbHVlKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXQgdGhlIHZhbHVlIG9mIHByb3BlcnR5CiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVZhbHVlIG9mIHRoZSBwcm9wZXJ0eS4KKyAgICAgKiBAcmV0dXJuICAgIFZhbHVlIG9mIHRoZSBwcm9wZXJ0eS4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldERldGFpbChpbnQgcHJvcGVydHkpIHsKLSAgICAJaWYgKGRldGFpbHMuY29udGFpbnNLZXkobmV3IEludGVnZXIocHJvcGVydHkpKSkgewotICAgIAkgICAgcmV0dXJuIChTdHJpbmcpIGRldGFpbHMuZ2V0KG5ldyBJbnRlZ2VyKHByb3BlcnR5KSk7Ci0gICAgCX0gZWxzZSB7Ci0gICAgCSAgICByZXR1cm4gbnVsbDsKLSAgICAJfSAgICAJCisgICAgICAgIGlmIChkZXRhaWxzLmNvbnRhaW5zS2V5KG5ldyBJbnRlZ2VyKHByb3BlcnR5KSkpIHsKKyAgICAgICAgICAgIHJldHVybiAoU3RyaW5nKSBkZXRhaWxzLmdldChuZXcgSW50ZWdlcihwcm9wZXJ0eSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDaGVja3Mgd2hldGhlciB0d28gPGNvZGU+RGF0YVNvdXJjZVNwZWM8L2NvZGU+IG9iamVjdHMKICAgICAgKiBhcmUgZXF1YWwgb3Igbm90LgogICAgICAqCi0gICAgICogQHBhcmFtCW9iaglJbnN0YW5jZSBvZiA8Y29kZT5EYXRhU291cmNlU3BlYzwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBvYmogICAgSW5zdGFuY2Ugb2YgPGNvZGU+RGF0YVNvdXJjZVNwZWM8L2NvZGU+IG9iamVjdC4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9iaikgewotICAgIAlpZiAob2JqIGluc3RhbmNlb2YgRGF0YVNvdXJjZVNwZWMpIHsKLSAgICAJICAgIHJldHVybiB0aGlzLmRldGFpbHMuZXF1YWxzKCgoRGF0YVNvdXJjZVNwZWMpb2JqKS5kZXRhaWxzKTsKLSAgICAJfQotICAgIAlyZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBEYXRhU291cmNlU3BlYykgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGV0YWlscy5lcXVhbHMoKChEYXRhU291cmNlU3BlYylvYmopLmRldGFpbHMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIGhhc2hDb2RlIG9mIHRoaXMgPGNvZGU+RGF0YVNvdXJjZVNwZWM8L2NvZGU+IG9iamVjdC4KICAgICAgKgotICAgICAqIEByZXR1cm4JaGFzaENvZGUgb2YgdGhpcyBvYmplY3QuCisgICAgICogQHJldHVybiAgICBoYXNoQ29kZSBvZiB0aGlzIG9iamVjdC4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewotICAgIAlyZXR1cm4gdGhpcy5kZXRhaWxzLmhhc2hDb2RlKCk7Ci0gICAgfSAgICAKKyAgICAgICAgcmV0dXJuIHRoaXMuZGV0YWlscy5oYXNoQ29kZSgpOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9jb21tb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9idWlsZC54bWwKaW5kZXggZWY0MzhmYy4uM2I0ZmFlYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL2NvbW1vbi9idWlsZC54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPHByb2plY3QgbmFtZT0iamRiY19jb25uZWN0b3IiIGJhc2VkaXI9Ii4iIGRlZmF1bHQ9ImJ1aWxkIj4KICAgPHByb3BlcnR5IG5hbWU9InBrZy5kaXIiIHZhbHVlPSJjb20vc3VuL2dqYy9jb21tb24iLz4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJjbGVhbiI+CiAgICAgPGFudCBhbnRmaWxlPSJidWlsZC54bWwiIGRpcj0iJHtnamMuaG9tZX0vYmluIiB0YXJnZXQ9ImNsZWFuIi8+CiAgIDwvdGFyZ2V0PgpAQCAtMzYsMTMgKzM2LDEzIEBACiAKICAgPHRhcmdldCBuYW1lPSJjb21waWxlMTMiIGRlcGVuZHM9ImNvbXBpbGUiLz4KICAgPHRhcmdldCBuYW1lPSJjb21waWxlMTQiIGRlcGVuZHM9ImNvbXBpbGUiLz4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlMTMiIGRlcGVuZHM9InBhY2thZ2UiLz4KICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlMTQiIGRlcGVuZHM9InBhY2thZ2UiLz4KIAogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkMTMiIGRlcGVuZHM9ImNvbXBpbGUxMywgcGFja2FnZTEzIi8+CiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQxNCIgZGVwZW5kcz0iY29tcGlsZTE0LCBwYWNrYWdlMTQiLz4KLSAgICAKKwogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJidWlsZDEzLCBidWlsZDE0Ii8+CiAKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L0Nvbm5lY3Rpb25Ib2xkZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L0Nvbm5lY3Rpb25Ib2xkZXIuamF2YQppbmRleCBkYmI1NzI5Li5iZWFiZTU1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9Db25uZWN0aW9uSG9sZGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvQ29ubmVjdGlvbkhvbGRlci5qYXZhCkBAIC0yNCwyNCArMjQsMjQgQEAKIGltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcjsKIAogLyoqCi0gKiBIb2xkcyB0aGUgamF2YS5zcWwuQ29ubmVjdGlvbiBvYmplY3QsIHdoaWNoIGlzIHRvIGJlIAorICogSG9sZHMgdGhlIGphdmEuc3FsLkNvbm5lY3Rpb24gb2JqZWN0LCB3aGljaCBpcyB0byBiZQogICogcGFzc2VkIHRvIHRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDcvMjMKLSAqIEBhdXRob3IJQmlub2QgUC5HCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA3LzIzCisgKiBAYXV0aG9yICAgIEJpbm9kIFAuRwogICovCi1wdWJsaWMgY2xhc3MgQ29ubmVjdGlvbkhvbGRlciBpbXBsZW1lbnRzIENvbm5lY3Rpb257IAorcHVibGljIGNsYXNzIENvbm5lY3Rpb25Ib2xkZXIgaW1wbGVtZW50cyBDb25uZWN0aW9uewogCiAgICAgcHJpdmF0ZSBDb25uZWN0aW9uIGNvbjsKLSAgICAKKwogICAgIHByaXZhdGUgTWFuYWdlZENvbm5lY3Rpb24gbWM7Ci0gICAgCi0gICAgcHJpdmF0ZSBib29sZWFuIHdyYXBwZWRBbHJlYWR5ID0gZmFsc2U7ICAgIAotICAgIAorCisgICAgcHJpdmF0ZSBib29sZWFuIHdyYXBwZWRBbHJlYWR5ID0gZmFsc2U7CisKICAgICBwcml2YXRlIGJvb2xlYW4gaXNDbG9zZWQgPSBmYWxzZTsKLSAgICAKKwogICAgIHByaXZhdGUgYm9vbGVhbiB2YWxpZCA9IHRydWU7Ci0gICAgCisKICAgICBwcml2YXRlIGJvb2xlYW4gYWN0aXZlID0gZmFsc2U7CiAgICAgLyoqCiAgICAgICogVGhlIGFjdGl2ZSBmbGFnIGlzIGZhbHNlIHdoZW4gdGhlIGNvbm5lY3Rpb24gaGFuZGxlIGlzCkBAIC01MywyMTkgKzUzLDIxOSBAQAogICAgICAqIGZ1bmN0aW9uLCB0aGUgYWJvdmUgbWV0aG9kIGludm9jYXRpb24gc3VjY2VlZHM7IG90aGVyd2lzZQogICAgICAqIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24uCiAgICAgICovCi0gICAgCisKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RzIGEgQ29ubmVjdGlvbiBob2xkZXIuCi0gICAgICogCi0gICAgICogQHBhcmFtCWNvbgk8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgY29uICAgIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KICAgICAgKi8KICAgICBwdWJsaWMgQ29ubmVjdGlvbkhvbGRlcihDb25uZWN0aW9uIGNvbiwgTWFuYWdlZENvbm5lY3Rpb24gbWMpIHsKICAgICAgICAgdGhpcy5jb24gPSBjb247CiAgICAgICAgIHRoaXMubWMgID0gbWM7CiAgICAgfQotICAgICAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIGFjdHVhbCBjb25uZWN0aW9uIGluIHRoaXMgaG9sZGVyIG9iamVjdC4KLSAgICAgKiAKLSAgICAgKiBAcmV0dXJuCUNvbm5lY3Rpb24gb2JqZWN0LgorICAgICAqCisgICAgICogQHJldHVybiAgICBDb25uZWN0aW9uIG9iamVjdC4KICAgICAgKi8KICAgICBDb25uZWN0aW9uIGdldENvbm5lY3Rpb24oKSB7Ci0gICAgCXJldHVybiBjb247CisgICAgICAgIHJldHVybiBjb247CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZmxhZyB0byBpbmRpY2F0ZSB0aGF0LCB0aGUgY29ubmVjdGlvbiBpcyB3cmFwcGVkIGFscmVhZHkgb3Igbm90LgogICAgICAqCi0gICAgICogQHBhcmFtCXdyYXBGbGFnCQorICAgICAqIEBwYXJhbSAgICB3cmFwRmxhZwogICAgICAqLwogICAgIHZvaWQgd3JhcHBlZChib29sZWFuIHdyYXBGbGFnKXsKICAgICAgICAgdGhpcy53cmFwcGVkQWxyZWFkeSA9IHdyYXBGbGFnOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgd2hldGhlciBpdCBpcyB3cmFwcGVkIGFscmVhZHkgb3Igbm90LgogICAgICAqCi0gICAgICogQHJldHVybgl3cmFwcGVkIGZsYWcuCisgICAgICogQHJldHVybiAgICB3cmFwcGVkIGZsYWcuCiAgICAgICovCiAgICAgYm9vbGVhbiBpc1dyYXBwZWQoKXsKICAgICAgICAgcmV0dXJuIHdyYXBwZWRBbHJlYWR5OwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZSByZXNwb25zaWJsZQogICAgICAqIGZvciB0aGlzIGNvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKi8KICAgICBNYW5hZ2VkQ29ubmVjdGlvbiBnZXRNYW5hZ2VkQ29ubmVjdGlvbigpIHsKICAgICAgICAgcmV0dXJuIG1jOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJlcGxhY2UgdGhlIGFjdHVhbCA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3Qgd2l0aCB0aGUgb25lCi0gICAgICogc3VwcGxpZWQuIEFsc28gcmVwbGFjZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gbGluay4gICAgIAorICAgICAqIHN1cHBsaWVkLiBBbHNvIHJlcGxhY2UgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGxpbmsuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JY29uIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAcGFyYW0JbWMgIDxjb2RlPiBNYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBjb24gPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBtYyAgPGNvZGU+IE1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCiAgICAgICovCiAgICAgdm9pZCBhc3NvY2lhdGVDb25uZWN0aW9uKENvbm5lY3Rpb24gY29uLCBNYW5hZ2VkQ29ubmVjdGlvbiBtYykgewotICAgIAl0aGlzLm1jID0gbWM7Ci0gICAgCXRoaXMuY29uID0gY29uOworICAgICAgICB0aGlzLm1jID0gbWM7CisgICAgICAgIHRoaXMuY29uID0gY29uOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENsZWFycyBhbGwgd2FybmluZ3MgcmVwb3J0ZWQgZm9yIHRoZSB1bmRlcmx5aW5nIGNvbm5lY3Rpb24gIG9iamVjdC4KICAgICAgKgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgY2xlYXJXYXJuaW5ncygpIHRocm93cyBTUUxFeGNlcHRpb257ICAgIAotCWNoZWNrVmFsaWRpdHkoKTsKKyAgICBwdWJsaWMgdm9pZCBjbGVhcldhcm5pbmdzKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIGNvbi5jbGVhcldhcm5pbmdzKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogQ2xvc2VzIHRoZSBsb2dpY2FsIGNvbm5lY3Rpb24uICAgIAorICAgICAqIENsb3NlcyB0aGUgbG9naWNhbCBjb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgY2xvc2UoKSB0aHJvd3MgU1FMRXhjZXB0aW9uewogICAgICAgICBpc0Nsb3NlZCA9IHRydWU7Ci0gICAgICAgIG1jLmNvbm5lY3Rpb25DbG9zZWQobnVsbCwgdGhpcyk7ICAgICAgICAKKyAgICAgICAgbWMuY29ubmVjdGlvbkNsb3NlZChudWxsLCB0aGlzKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBJbnZhbGlkYXRlcyB0aGlzIG9iamVjdC4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBpbnZhbGlkYXRlKCkgewotICAgIAl2YWxpZCA9IGZhbHNlOworICAgICAgICB2YWxpZCA9IGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENsb3NlcyB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpbnZvbHZlZCBpbiB0aGlzLgogICAgICAqCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KLSAgICB2b2lkIGFjdHVhbENsb3NlKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsgICAgCisgICAgdm9pZCBhY3R1YWxDbG9zZSgpIHRocm93cyBTUUxFeGNlcHRpb257CiAgICAgICAgIGNvbi5jbG9zZSgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbW1pdCB0aGUgY2hhbmdlcyBpbiB0aGUgdW5kZXJseWluZyBDb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjb21taXQoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24uY29tbWl0KCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24uY29tbWl0KCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIHN0YXRlbWVudCBmcm9tIHRoZSB1bmRlcmx5aW5nIENvbm5lY3Rpb24KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+U3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEByZXR1cm4gICAgPGNvZGU+U3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTdGF0ZW1lbnQgY3JlYXRlU3RhdGVtZW50KCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIHJldHVybiBjb24uY3JlYXRlU3RhdGVtZW50KCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIHN0YXRlbWVudCBmcm9tIHRoZSB1bmRlcmx5aW5nIENvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0VHlwZQlUeXBlIG9mIHRoZSBSZXN1bHRTZXQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0Q29uY3VycmVuY3kJUmVzdWx0U2V0IENvbmN1cnJlbmN5LgotICAgICAqIEByZXR1cm4JPGNvZGU+U3RhdGVtZW50PC9jb2RlPiBvYmplY3QuICAgICAKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldFR5cGUgICAgVHlwZSBvZiB0aGUgUmVzdWx0U2V0CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldENvbmN1cnJlbmN5ICAgIFJlc3VsdFNldCBDb25jdXJyZW5jeS4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgU3RhdGVtZW50IGNyZWF0ZVN0YXRlbWVudChpbnQgcmVzdWx0U2V0VHlwZSwgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAorICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgcmV0dXJuIGNvbi5jcmVhdGVTdGF0ZW1lbnQocmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3kpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBzdGF0ZW1lbnQgZnJvbSB0aGUgdW5kZXJseWluZyBDb25uZWN0aW9uLgogICAgICAqCi0gICAgICogQHBhcmFtCXJlc3VsdFNldFR5cGUJVHlwZSBvZiB0aGUgUmVzdWx0U2V0Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldENvbmN1cnJlbmN5CVJlc3VsdFNldCBDb25jdXJyZW5jeS4KLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0SG9sZGFiaWxpdHkJUmVzdWx0U2V0IEhvbGRhYmlsaXR5LiAgICAgCi0gICAgICogQHJldHVybgk8Y29kZT5TdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4gCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgICAgICAKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0VHlwZSAgICBUeXBlIG9mIHRoZSBSZXN1bHRTZXQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0Q29uY3VycmVuY3kgICAgUmVzdWx0U2V0IENvbmN1cnJlbmN5LgorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRIb2xkYWJpbGl0eSAgICBSZXN1bHRTZXQgSG9sZGFiaWxpdHkuCisgICAgICogQHJldHVybiAgICA8Y29kZT5TdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCi0gICAgcHVibGljIFN0YXRlbWVudCBjcmVhdGVTdGF0ZW1lbnQoaW50IHJlc3VsdFNldFR5cGUsIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwgCi0gICAgCQkJCSAgICAgaW50IHJlc3VsdFNldEhvbGRhYmlsdHkpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCQkJCSAgICAgCisgICAgcHVibGljIFN0YXRlbWVudCBjcmVhdGVTdGF0ZW1lbnQoaW50IHJlc3VsdFNldFR5cGUsIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0SG9sZGFiaWx0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICByZXR1cm4gY29uLmNyZWF0ZVN0YXRlbWVudChyZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSwKLSAgICAgICAgCQkJICAgcmVzdWx0U2V0SG9sZGFiaWx0eSk7CisgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFNldEhvbGRhYmlsdHkpOwogICAgIH0KLSAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgY3VycmVudCBhdXRvLWNvbW1pdCBtb2RlIGZvciB0aGUgdW5kZXJseWluZyA8Y29kZT4gQ29ubmVjdGlvbjwvY29kZT4uCiAgICAgICoKICAgICAgKiBAcmV0dXJuIFRoZSBjdXJyZW50IHN0YXRlIG9mIGNvbm5lY3Rpb24ncyBhdXRvLWNvbW1pdCBtb2RlLgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gZ2V0QXV0b0NvbW1pdCgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uZ2V0QXV0b0NvbW1pdCgpOwotICAgIH0gICAKLSAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uZ2V0QXV0b0NvbW1pdCgpOworICAgIH0KKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgdW5kZXJseWluZyA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QncyBjYXRhbG9nIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCUNhdGFsb2cgTmFtZS4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHJldHVybiAgICBDYXRhbG9nIE5hbWUuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q2F0YWxvZygpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCisgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICByZXR1cm4gY29uLmdldENhdGFsb2coKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgaG9sZGFiaWxpdHkgb2YgPGNvZGU+UmVzdWx0U2V0PC9jb2RlPiBvYmplY3RzIGNyZWF0ZWQKICAgICAgKiB1c2luZyB0aGlzIGNvbm5lY3Rpb24gb2JqZWN0LgogICAgICAqCi0gICAgICogQHJldHVybglob2xkYWJpbGl0eSB2YWx1ZS4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHJldHVybiAgICBob2xkYWJpbGl0eSB2YWx1ZS4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIGludCBnZXRIb2xkYWJpbGl0eSgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybgljb24uZ2V0SG9sZGFiaWxpdHkoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiAgICBjb24uZ2V0SG9sZGFiaWxpdHkoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIDxjb2RlPkRhdGFiYXNlTWV0YURhdGE8L2NvZGU+b2JqZWN0IGZyb20gdGhlIHVuZGVybHlpbmcKICAgICAgKiA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KICAgICAgKgogICAgICAqIEByZXR1cm4gPGNvZGU+RGF0YWJhc2VNZXRhRGF0YTwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIERhdGFiYXNlTWV0YURhdGEgZ2V0TWV0YURhdGEoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLmdldE1ldGFEYXRhKCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLmdldE1ldGFEYXRhKCk7CiAgICAgfQotIAorCiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoaXMgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0J3MgY3VycmVudCB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwuCiAgICAgICoKICAgICAgKiBAcmV0dXJuIFRyYW5zYWN0aW9uIGxldmVsCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLyAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIHJldHVybiBjb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBSZXRyaWV2ZXMgdGhlIDxjb2RlPk1hcDwvY29kZT4gb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCAKKyAgICAgKiBSZXRyaWV2ZXMgdGhlIDxjb2RlPk1hcDwvY29kZT4gb2JqZWN0IGFzc29jaWF0ZWQgd2l0aAogICAgICAqIDxjb2RlPiBDb25uZWN0aW9uPC9jb2RlPiBPYmplY3QuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVR5cGVNYXAgc2V0IGluIHRoaXMgb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcmV0dXJuICAgIFR5cGVNYXAgc2V0IGluIHRoaXMgb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgTWFwIGdldFR5cGVNYXAoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLmdldFR5cGVNYXAoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uZ2V0VHlwZU1hcCgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldFR5cGVNYXAoTWFwPFN0cmluZywgQ2xhc3M8Pz4+IG1hcCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CkBAIC0yNzcsMTg0ICsyNzcsMTg0IEBACiAgICAgICogPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgogICAgICAqCiAgICAgICogQHJldHVybiBGaXJzdCA8Y29kZT4gU1FMV2FybmluZzwvY29kZT4gT2JqZWN0IG9yIG51bGwuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgU1FMV2FybmluZyBnZXRXYXJuaW5ncygpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uZ2V0V2FybmluZ3MoKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uZ2V0V2FybmluZ3MoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgd2hldGhlciB1bmRlcmx5aW5nIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpcyBjbG9zZWQuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXRydWUgaWYgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGlzIGNsb3NlZCwgZmFsc2UKLSAgICAgKiAJCWlmIGl0IGlzIGNsb3NlZC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHJldHVybiAgICB0cnVlIGlmIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpcyBjbG9zZWQsIGZhbHNlCisgICAgICogICAgICAgICBpZiBpdCBpcyBjbG9zZWQuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGlzQ2xvc2VkKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0gICAgCXJldHVybiBpc0Nsb3NlZDsKKyAgICAgICAgcmV0dXJuIGlzQ2xvc2VkOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB3aGV0aGVyIHRoaXMgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGlzIHJlYWQtb25seS4KICAgICAgKgotICAgICAqIEByZXR1cm4JdHJ1ZSBpZiA8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IGlzIHJlYWQtb25seSwgZmFsc2Ugb3RoZXItd2lzZQotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAcmV0dXJuICAgIHRydWUgaWYgPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBpcyByZWFkLW9ubHksIGZhbHNlIG90aGVyLXdpc2UKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gaXNSZWFkT25seSgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uaXNSZWFkT25seSgpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5pc1JlYWRPbmx5KCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29udmVydHMgdGhlIGdpdmVuIFNRTCBzdGF0ZW1lbnQgaW50byB0aGUgc3lzdGVtJ3MgbmF0aXZlIFNRTCBncmFtbWVyLgogICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgc3RhdGVtZW50ICwgdG8gYmUgY29udmVydGVkLgotICAgICAqIEByZXR1cm4JQ29udmVydGVkIFNRTCBzdHJpbmcuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIHN0YXRlbWVudCAsIHRvIGJlIGNvbnZlcnRlZC4KKyAgICAgKiBAcmV0dXJuICAgIENvbnZlcnRlZCBTUUwgc3RyaW5nLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIG5hdGl2ZVNRTChTdHJpbmcgc3FsKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLm5hdGl2ZVNRTChzcWwpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5uYXRpdmVTUUwoc3FsKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBjYWxsaW5nIGRhdGFiYXNlCiAgICAgICogc3RvcmVkIHByb2NlZHVyZXMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKICAgICAgKiBAcmV0dXJuIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIENhbGxhYmxlU3RhdGVtZW50IHByZXBhcmVDYWxsKFN0cmluZyBzcWwpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24ucHJlcGFyZUNhbGwoc3FsKTsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3IgY2FsbGluZyBkYXRhYmFzZQotICAgICAqIHN0b3JlZCBwcm9jZWR1cmVzLgotICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldFR5cGUJVHlwZSBvZiB0aGUgUmVzdWx0U2V0Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldENvbmN1cnJlbmN5CVJlc3VsdFNldCBDb25jdXJyZW5jeS4KLSAgICAgKiBAcmV0dXJuIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8KLSAgICBwdWJsaWMgQ2FsbGFibGVTdGF0ZW1lbnQgcHJlcGFyZUNhbGwoU3RyaW5nIHNxbCxpbnQgcmVzdWx0U2V0VHlwZSwgCi0gICAgCQkJCQlpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3kpIHRocm93cyBTUUxFeGNlcHRpb257Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAJCQkJCQotICAgIAlyZXR1cm4gY29uLnByZXBhcmVDYWxsKHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3kpOwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBjYWxsaW5nIGRhdGFiYXNlCi0gICAgICogc3RvcmVkIHByb2NlZHVyZXMuCi0gICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0VHlwZQlUeXBlIG9mIHRoZSBSZXN1bHRTZXQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0Q29uY3VycmVuY3kJUmVzdWx0U2V0IENvbmN1cnJlbmN5LgotICAgICAqIEBwYXJhbQlyZXN1bHRTZXRIb2xkYWJpbGl0eQlSZXN1bHRTZXQgSG9sZGFiaWxpdHkuICAgICAgICAgIAotICAgICAqIEByZXR1cm4gPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLwotICAgIHB1YmxpYyBDYWxsYWJsZVN0YXRlbWVudCBwcmVwYXJlQ2FsbChTdHJpbmcgc3FsLCBpbnQgcmVzdWx0U2V0VHlwZSwgCi0gICAgCQkJCQkgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5LCAKLSAgICAJCQkJCSBpbnQgcmVzdWx0U2V0SG9sZGFiaWx0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAkJCQkJIAotICAgIAlyZXR1cm4gY29uLnByZXBhcmVDYWxsKHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3ksCi0gICAgCQkJICAgICAgIHJlc3VsdFNldEhvbGRhYmlsdHkpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgcmV0dXJuIGNvbi5wcmVwYXJlQ2FsbChzcWwpOwogICAgIH0KIAogICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcgCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3IgY2FsbGluZyBkYXRhYmFzZQorICAgICAqIHN0b3JlZCBwcm9jZWR1cmVzLgorICAgICAqCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldFR5cGUgICAgVHlwZSBvZiB0aGUgUmVzdWx0U2V0CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldENvbmN1cnJlbmN5ICAgIFJlc3VsdFNldCBDb25jdXJyZW5jeS4KKyAgICAgKiBAcmV0dXJuIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgQ2FsbGFibGVTdGF0ZW1lbnQgcHJlcGFyZUNhbGwoU3RyaW5nIHNxbCxpbnQgcmVzdWx0U2V0VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZUNhbGwoc3FsLCByZXN1bHRTZXRUeXBlLCByZXN1bHRTZXRDb25jdXJyZW5jeSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBDYWxsYWJsZVN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3IgY2FsbGluZyBkYXRhYmFzZQorICAgICAqIHN0b3JlZCBwcm9jZWR1cmVzLgorICAgICAqCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldFR5cGUgICAgVHlwZSBvZiB0aGUgUmVzdWx0U2V0CisgICAgICogQHBhcmFtICAgIHJlc3VsdFNldENvbmN1cnJlbmN5ICAgIFJlc3VsdFNldCBDb25jdXJyZW5jeS4KKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0SG9sZGFiaWxpdHkgICAgUmVzdWx0U2V0IEhvbGRhYmlsaXR5LgorICAgICAqIEByZXR1cm4gPGNvZGU+IENhbGxhYmxlU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLworICAgIHB1YmxpYyBDYWxsYWJsZVN0YXRlbWVudCBwcmVwYXJlQ2FsbChTdHJpbmcgc3FsLCBpbnQgcmVzdWx0U2V0VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0U2V0Q29uY3VycmVuY3ksCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdFNldEhvbGRhYmlsdHkpIHRocm93cyBTUUxFeGNlcHRpb257CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVDYWxsKHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3ksCisgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFNldEhvbGRhYmlsdHkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcKICAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKICAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAogICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwpOwogICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nIAotICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQotICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50Ci0gICAgICogQHBhcmFtCWF1dG9HZW5lcmF0ZWRLZXlzIGEgZmxhZyBpbmRpY2F0aW5nIEF1dG9HZW5lcmF0ZWRLZXlzIG5lZWQgdG8gYmUgcmV0dXJuZWQuCi0gICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovCi0gICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCwgaW50IGF1dG9HZW5lcmF0ZWRLZXlzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAlyZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLGF1dG9HZW5lcmF0ZWRLZXlzKTsKLSAgICB9ICAgIAotICAgICAgCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZyAKLSAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKLSAgICAgKgotICAgICAqIEBwYXJhbQlzcWwJU1FMIFN0YXRlbWVudAotICAgICAqIEBwYXJhbQljb2x1bW5JbmRleGVzIGFuIGFycmF5IG9mIGNvbHVtbiBpbmRleGVzIGluZGljYXRpbmcgdGhlIGNvbHVtbnMgdGhhdCBzaG91bGQgYmUKLSAgICAgKgkJcmV0dXJuZWQgZnJvbSB0aGUgaW5zZXJ0ZWQgcm93IG9yIHJvd3MuCi0gICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCi0gICAgICovCi0gICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCwgaW50W10gY29sdW1uSW5kZXhlcykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCxjb2x1bW5JbmRleGVzKTsKLSAgICB9ICAgICAgICAgIAotIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcgCi0gICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCi0gICAgICoKLSAgICAgKiBAcGFyYW0Jc3FsCVNRTCBTdGF0ZW1lbnQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0VHlwZQlUeXBlIG9mIHRoZSBSZXN1bHRTZXQKLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0Q29uY3VycmVuY3kJUmVzdWx0U2V0IENvbmN1cnJlbmN5LgotICAgICAqIEByZXR1cm4gPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLwotICAgIHB1YmxpYyBQcmVwYXJlZFN0YXRlbWVudCBwcmVwYXJlU3RhdGVtZW50KFN0cmluZyBzcWwsaW50IHJlc3VsdFNldFR5cGUsIAotICAgIAkJCQkJaW50IHJlc3VsdFNldENvbmN1cnJlbmN5KSB0aHJvd3MgU1FMRXhjZXB0aW9uewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCQkJCQkKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3kpOwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nIAotICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQotICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldFR5cGUJVHlwZSBvZiB0aGUgUmVzdWx0U2V0Ci0gICAgICogQHBhcmFtCXJlc3VsdFNldENvbmN1cnJlbmN5CVJlc3VsdFNldCBDb25jdXJyZW5jeS4KLSAgICAgKiBAcGFyYW0JcmVzdWx0U2V0SG9sZGFiaWxpdHkJUmVzdWx0U2V0IEhvbGRhYmlsaXR5LiAgICAgICAgICAKLSAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8KLSAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLCBpbnQgcmVzdWx0U2V0VHlwZSwgCi0gICAgCQkJCQkgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5LCAKLSAgICAJCQkJCSBpbnQgcmVzdWx0U2V0SG9sZGFiaWx0eSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAJCQkJCSAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCwgcmVzdWx0U2V0VHlwZSwgcmVzdWx0U2V0Q29uY3VycmVuY3ksCi0gICAgCQkJCSAgICByZXN1bHRTZXRIb2xkYWJpbHR5KTsKLSAgICB9ICAgICAgICAgICAKIAogICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcgCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZwogICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQogICAgICAqCi0gICAgICogQHBhcmFtCXNxbAlTUUwgU3RhdGVtZW50Ci0gICAgICogQHBhcmFtCWNvbHVtbk5hbWVzIE5hbWUgb2YgYm91bmQgY29sdW1ucy4KKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgYXV0b0dlbmVyYXRlZEtleXMgYSBmbGFnIGluZGljYXRpbmcgQXV0b0dlbmVyYXRlZEtleXMgbmVlZCB0byBiZSByZXR1cm5lZC4KICAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCisgICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCwgaW50IGF1dG9HZW5lcmF0ZWRLZXlzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsYXV0b0dlbmVyYXRlZEtleXMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcKKyAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICBjb2x1bW5JbmRleGVzIGFuIGFycmF5IG9mIGNvbHVtbiBpbmRleGVzIGluZGljYXRpbmcgdGhlIGNvbHVtbnMgdGhhdCBzaG91bGQgYmUKKyAgICAgKiAgICAgICAgcmV0dXJuZWQgZnJvbSB0aGUgaW5zZXJ0ZWQgcm93IG9yIHJvd3MuCisgICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCisgICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCwgaW50W10gY29sdW1uSW5kZXhlcykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLGNvbHVtbkluZGV4ZXMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQgPC9jb2RlPiBvYmplY3QgZm9yIHNlbmRpbmcKKyAgICAgKiBwYXJhbXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gZGF0YWJhc2UKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBzcWwgICAgU1FMIFN0YXRlbWVudAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRUeXBlICAgIFR5cGUgb2YgdGhlIFJlc3VsdFNldAorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRDb25jdXJyZW5jeSAgICBSZXN1bHRTZXQgQ29uY3VycmVuY3kuCisgICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCisgICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCxpbnQgcmVzdWx0U2V0VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRDb25jdXJyZW5jeSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgPGNvZGU+IFByZXBhcmVkU3RhdGVtZW50IDwvY29kZT4gb2JqZWN0IGZvciBzZW5kaW5nCisgICAgICogcGFyYW10ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIGRhdGFiYXNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3FsICAgIFNRTCBTdGF0ZW1lbnQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0VHlwZSAgICBUeXBlIG9mIHRoZSBSZXN1bHRTZXQKKyAgICAgKiBAcGFyYW0gICAgcmVzdWx0U2V0Q29uY3VycmVuY3kgICAgUmVzdWx0U2V0IENvbmN1cnJlbmN5LgorICAgICAqIEBwYXJhbSAgICByZXN1bHRTZXRIb2xkYWJpbGl0eSAgICBSZXN1bHRTZXQgSG9sZGFiaWxpdHkuCisgICAgICogQHJldHVybiA8Y29kZT4gUHJlcGFyZWRTdGF0ZW1lbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCisgICAgICovCisgICAgcHVibGljIFByZXBhcmVkU3RhdGVtZW50IHByZXBhcmVTdGF0ZW1lbnQoU3RyaW5nIHNxbCwgaW50IHJlc3VsdFNldFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdFNldENvbmN1cnJlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRTZXRIb2xkYWJpbHR5KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24ucHJlcGFyZVN0YXRlbWVudChzcWwsIHJlc3VsdFNldFR5cGUsIHJlc3VsdFNldENvbmN1cnJlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0U2V0SG9sZGFiaWx0eSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudCA8L2NvZGU+IG9iamVjdCBmb3Igc2VuZGluZworICAgICAqIHBhcmFtdGVyaXplZCBTUUwgc3RhdGVtZW50cyB0byBkYXRhYmFzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIHNxbCAgICBTUUwgU3RhdGVtZW50CisgICAgICogQHBhcmFtICAgIGNvbHVtbk5hbWVzIE5hbWUgb2YgYm91bmQgY29sdW1ucy4KKyAgICAgKiBAcmV0dXJuIDxjb2RlPiBQcmVwYXJlZFN0YXRlbWVudDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcGFyZVN0YXRlbWVudChTdHJpbmcgc3FsLCBTdHJpbmdbXSBjb2x1bW5OYW1lcykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNxbCxjb2x1bW5OYW1lcyk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnByZXBhcmVTdGF0ZW1lbnQoc3FsLGNvbHVtbk5hbWVzKTsKICAgICB9CiAKICAgICBwdWJsaWMgQ2xvYiBjcmVhdGVDbG9iKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CkBAIC01MDQsMTUwICs1MDQsMTUwIEBACiAgICAgLyoqCiAgICAgICogUmVtb3ZlcyB0aGUgZ2l2ZW4gPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QgZnJvbSB0aGUgY3VycmVudCB0cmFuc2FjdGlvbi4KICAgICAgKgotICAgICAqIEBwYXJhbQlzYXZlcG9pbnQJPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QKLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIHNhdmVwb2ludCAgICA8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCByZWxlYXNlU2F2ZXBvaW50KFNhdmVwb2ludCBzYXZlcG9pbnQpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5yZWxlYXNlU2F2ZXBvaW50KHNhdmVwb2ludCk7Ci0gICAgfSAKLSAgICAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5yZWxlYXNlU2F2ZXBvaW50KHNhdmVwb2ludCk7CisgICAgfQorCiAgICAgLyoqCiAgICAgICogUm9sbHMgYmFjayB0aGUgY2hhbmdlcyBtYWRlIGluIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLgogICAgICAqCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAotICAgICAqLyAgICAgICAgCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgorICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJvbGxiYWNrKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnJvbGxiYWNrKCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICBjb24ucm9sbGJhY2soKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSb2xscyBiYWNrIHRoZSBjaGFuZ2VzIG1hZGUgYWZ0ZXIgdGhlIHNhdmVwb2ludC4KICAgICAgKgotICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4gICAgICAKLSAgICAgKi8gICAgICAgIAorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KKyAgICAgKi8KICAgICBwdWJsaWMgdm9pZCByb2xsYmFjayhTYXZlcG9pbnQgc2F2ZXBvaW50KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24ucm9sbGJhY2soc2F2ZXBvaW50KTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5yb2xsYmFjayhzYXZlcG9pbnQpOwogICAgIH0KLSAgICAgICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBhdXRvLWNvbW1taXQgbW9kZSBvZiB0aGUgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LgogICAgICAqCi0gICAgICogQHBhcmFtCWF1dG9Db21taXQgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIHRoZSBhdXRvLWNvbW1pdCBtb2RlLiAgICAgCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBhdXRvQ29tbWl0IGJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyB0aGUgYXV0by1jb21taXQgbW9kZS4KKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0QXV0b0NvbW1pdChib29sZWFuIGF1dG9Db21taXQpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCWNvbi5zZXRBdXRvQ29tbWl0KGF1dG9Db21taXQpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnNldEF1dG9Db21taXQoYXV0b0NvbW1pdCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgY2F0YWxvZyBuYW1lIHRvIHRoZSA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QKICAgICAgKgotICAgICAqIEBwYXJhbQljYXRhbG9nCUNhdGFsb2cgbmFtZS4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIGNhdGFsb2cgICAgQ2F0YWxvZyBuYW1lLgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRDYXRhbG9nKFN0cmluZyBjYXRhbG9nKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24uc2V0Q2F0YWxvZyhjYXRhbG9nKTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5zZXRDYXRhbG9nKGNhdGFsb2cpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFNldHMgdGhlIGhvbGRhYmlsaXR5IG9mIDxjb2RlPlJlc3VsdFNldDwvY29kZT4gb2JqZWN0cyBjcmVhdGVkIAorICAgICAqIFNldHMgdGhlIGhvbGRhYmlsaXR5IG9mIDxjb2RlPlJlc3VsdFNldDwvY29kZT4gb2JqZWN0cyBjcmVhdGVkCiAgICAgICogdXNpbmcgdGhpcyA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JaG9sZGFiaWxpdHkJQSA8Y29kZT5SZXN1bHRTZXQ8L2NvZGU+IGhvbGRhYmlsaXR5IGNvbnN0YW50Ci0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBob2xkYWJpbGl0eSAgICBBIDxjb2RlPlJlc3VsdFNldDwvY29kZT4gaG9sZGFiaWxpdHkgY29uc3RhbnQKKyAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0SG9sZGFiaWxpdHkoaW50IGhvbGRhYmlsaXR5KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgICAJY29uLnNldEhvbGRhYmlsaXR5KGhvbGRhYmlsaXR5KTsKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgICBjb24uc2V0SG9sZGFiaWxpdHkoaG9sZGFiaWxpdHkpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFB1dHMgdGhlIGNvbm5lY3Rpb24gaW4gcmVhZC1vbmx5IG1vZGUgYXMgYSBoaW50IHRvIHRoZSBkcml2ZXIgdG8gCisgICAgICogUHV0cyB0aGUgY29ubmVjdGlvbiBpbiByZWFkLW9ubHkgbW9kZSBhcyBhIGhpbnQgdG8gdGhlIGRyaXZlciB0bwogICAgICAqIHBlcmZvcm0gZGF0YWJhc2Ugb3B0aW1pemF0aW9ucy4KICAgICAgKgotICAgICAqIEBwYXJhbQlyZWFkT25seSAgdHJ1ZSBlbmFibGVzIHJlYWQtb25seSBtb2RlLCBmYWxzZSBkaXNhYmxlcyBpdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGEgZGF0YWJhc2UgZXJyb3IuICAgICAgCisgICAgICogQHBhcmFtICAgIHJlYWRPbmx5ICB0cnVlIGVuYWJsZXMgcmVhZC1vbmx5IG1vZGUsIGZhbHNlIGRpc2FibGVzIGl0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRSZWFkT25seShib29sZWFuIHJlYWRPbmx5KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLQljaGVja1ZhbGlkaXR5KCk7ICAgIAotICAgIAljb24uc2V0UmVhZE9ubHkocmVhZE9ubHkpOworICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgY29uLnNldFJlYWRPbmx5KHJlYWRPbmx5KTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGFuZCB1bm5hbWVkIHNhdmVwb2ludCBhbmQgcmV0dXJucyBhbiBvYmplY3QgY29ycmVzcG9uZGluZyB0byB0aGF0LgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5TYXZlcG9pbnQ8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0LgogICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgU2F2ZXBvaW50IHNldFNhdmVwb2ludCgpIHRocm93cyBTUUxFeGNlcHRpb24gewotCWNoZWNrVmFsaWRpdHkoKTsgICAgCi0gICAgCXJldHVybiBjb24uc2V0U2F2ZXBvaW50KCk7CisgICAgY2hlY2tWYWxpZGl0eSgpOworICAgICAgICByZXR1cm4gY29uLnNldFNhdmVwb2ludCgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBzYXZlcG9pbnQgd2l0aCB0aGUgbmFtZSBhbmQgcmV0dXJucyBhbiBvYmplY3QgY29ycmVzcG9uZGluZyB0byB0aGF0LgogICAgICAqCi0gICAgICogQHBhcmFtCW5hbWUJTmFtZSBvZiB0aGUgc2F2ZXBvaW50LgotICAgICAqIEByZXR1cm4JPGNvZGU+U2F2ZXBvaW50PC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBuYW1lICAgIE5hbWUgb2YgdGhlIHNhdmVwb2ludC4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlNhdmVwb2ludDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYSBkYXRhYmFzZSBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgU2F2ZXBvaW50IHNldFNhdmVwb2ludChTdHJpbmcgbmFtZSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJcmV0dXJuIGNvbi5zZXRTYXZlcG9pbnQobmFtZSk7Ci0gICAgfSAgICAKLSAgICAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIHJldHVybiBjb24uc2V0U2F2ZXBvaW50KG5hbWUpOworICAgIH0KKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbC4KICAgICAgKgotICAgICAqIEBwYXJhbQlsZXZlbCB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLiAgICAgIAorICAgICAqIEBwYXJhbSAgICBsZXZlbCB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhIGRhdGFiYXNlIGVycm9yLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKGludCBsZXZlbCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JY2hlY2tWYWxpZGl0eSgpOyAgICAKLSAgICAJY29uLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKGxldmVsKTsKLSAgICB9ICAgICAKLSAgICAKKyAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbihsZXZlbCk7CisgICAgfQorCiAgICAgcHVibGljIGludCBnZXROZXR3b3JrVGltZW91dCgpIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBuZXcgZmVhdHVyZS4iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXROZXR3b3JrVGltZW91dChFeGVjdXRvciBleGVjdXRvciwgaW50IG1pbGxpc2Vjb25kcykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICB0aHJvdyBuZXcgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiRG8gbm90IHN1cHBvcnQgSmF2YSA3IG5ldyBmZWF0dXJlLiIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGFib3J0KEV4ZWN1dG9yIGV4ZWN1dG9yKSAgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgbmV3IGZlYXR1cmUuIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBnZXRTY2hlbWEoKSB0aHJvd3MgU1FMRXhjZXB0aW9uewogICAgICAgdGhyb3cgbmV3IFNRTEZlYXR1cmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIkRvIG5vdCBzdXBwb3J0IEphdmEgNyBuZXcgZmVhdHVyZS4iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRTY2hlbWEoU3RyaW5nIHNjaGVtYSkgdGhyb3dzIFNRTEV4Y2VwdGlvbnsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgbmV3IGZlYXR1cmUuIik7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBDaGVja3MgdGhlIHZhbGlkaXR5IG9mIHRoaXMgb2JqZWN0CiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIGNoZWNrVmFsaWRpdHkoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKLSAgICAJaWYgKGlzQ2xvc2VkKSB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uICgiQ29ubmVjdGlvbiBjbG9zZWQiKTsKLSAgICAJaWYgKCF2YWxpZCkgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAoIkludmFsaWQgQ29ubmVjdGlvbiIpOwotICAgIAlpZihhY3RpdmUgPT0gZmFsc2UpIHsKLSAgICAJICAgIG1jLmNoZWNrSWZBY3RpdmUodGhpcyk7Ci0gICAgCX0KKyAgICAgICAgaWYgKGlzQ2xvc2VkKSB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uICgiQ29ubmVjdGlvbiBjbG9zZWQiKTsKKyAgICAgICAgaWYgKCF2YWxpZCkgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAoIkludmFsaWQgQ29ubmVjdGlvbiIpOworICAgICAgICBpZihhY3RpdmUgPT0gZmFsc2UpIHsKKyAgICAgICAgICAgIG1jLmNoZWNrSWZBY3RpdmUodGhpcyk7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBhY3RpdmUgZmxhZyB0byB0cnVlCiAgICAgICoKLSAgICAgKiBAcGFyYW0JYWN0dglib29sZWFuCisgICAgICogQHBhcmFtICAgIGFjdHYgICAgYm9vbGVhbgogICAgICAqLwogICAgIHZvaWQgc2V0QWN0aXZlKGJvb2xlYW4gYWN0dikgewogICAgICAgICBhY3RpdmUgPSBhY3R2OwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQppbmRleCBhYzdlNzQ4Li5mMDY3NWE0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQpAQCAtMzMsMTkgKzMzLDE5IEBACiAgKiBUaGlzIGNsYXNzIGlzIGV4dGVuZGVkIGJ5IHRoZSBEYXRhU291cmNlIHNwZWNpZmljIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBmYWN0b3JpZXMKICAqIGFuZCB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBmb3IgdGhlIDxjb2RlPkRyaXZlck1hbmFnZXI8L2NvZGU+LgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDgvMDMKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA4LzAzCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiAKLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnksIAorcHVibGljIGFic3RyYWN0IGNsYXNzIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSwKICAgICBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7Ci0gICAgCisKICAgICBwcm90ZWN0ZWQgRGF0YVNvdXJjZVNwZWMgc3BlYyA9IG5ldyBEYXRhU291cmNlU3BlYygpOwogICAgIHByb3RlY3RlZCB0cmFuc2llbnQgRGF0YVNvdXJjZU9iamVjdEJ1aWxkZXIgZHNPYmpCdWlsZGVyOwotICAgIAorCiAgICAgcHJvdGVjdGVkIGphdmEuaW8uUHJpbnRXcml0ZXIgbG9nV3JpdGVyID0gbnVsbDsKICAgICBwcm90ZWN0ZWQgamFrYXJ0YS5yZXNvdXJjZS5zcGkuUmVzb3VyY2VBZGFwdGVyIHJhID0gbnVsbDsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIExvZ2dlciBfbG9nZ2VyOwogICAgIHN0YXRpYyB7CiAgICAgICAgIF9sb2dnZXIgPSBMb2dnZXIuZ2V0QW5vbnltb3VzTG9nZ2VyKCk7CkBAIC01NCw4ICs1NCw4IEBACiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIENvbm5lY3Rpb24gRmFjdG9yeSBpbnN0YW5jZS4gVGhlIDxjb2RlPkNvbm5lY3Rpb25NYW5hZ2VyPC9jb2RlPiBpbXBsZW1lbnRhdGlvbgogICAgICAqIG9mIHRoZSByZXNvdXJjZSBhZGFwdGVyIGlzIHVzZWQgaGVyZS4KLSAgICAgKiAKLSAgICAgKiBAcmV0dXJuCUdlbmVyaWMgSkRCQyBDb25uZWN0b3IgaW1wbGVtZW50YXRpb24gb2YgPGNvZGU+amF2YXguc3FsLkRhdGFTb3VyY2U8L2NvZGU+CisgICAgICoKKyAgICAgKiBAcmV0dXJuICAgIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IgaW1wbGVtZW50YXRpb24gb2YgPGNvZGU+amF2YXguc3FsLkRhdGFTb3VyY2U8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIE9iamVjdCBjcmVhdGVDb25uZWN0aW9uRmFjdG9yeSgpIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTYzLDE2ICs2MywxNiBAQAogICAgICAgICB9CiAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlIGNmID0gbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5EYXRhU291cmNlKAogICAgICAgICAgICAgKGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSl0aGlzLCBudWxsKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGNmOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBDb25uZWN0aW9uIEZhY3RvcnkgaW5zdGFuY2UuIFRoZSA8Y29kZT5Db25uZWN0aW9uTWFuYWdlcjwvY29kZT4gaW1wbGVtZW50YXRpb24KICAgICAgKiBvZiB0aGUgYXBwbGljYXRpb24gc2VydmVyIGlzIHVzZWQgaGVyZS4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JY3hNYW5hZ2VyCTxjb2RlPkNvbm5lY3Rpb25NYW5hZ2VyPC9jb2RlPiBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgotICAgICAqIEByZXR1cm4JR2VuZXJpYyBKREJDIENvbm5lY3RvciBpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29kZT4KKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBjeE1hbmFnZXIgICAgPGNvZGU+Q29ubmVjdGlvbk1hbmFnZXI8L2NvZGU+IHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogQHJldHVybiAgICBHZW5lcmljIEpEQkMgQ29ubmVjdG9yIGltcGxlbWVudGF0aW9uIG9mIDxjb2RlPmphdmF4LnNxbC5EYXRhU291cmNlPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBPYmplY3QgY3JlYXRlQ29ubmVjdGlvbkZhY3RvcnkoamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvbk1hbmFnZXIgY3hNYW5hZ2VyKSB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC04MCw1NSArODAsNTUgQEAKICAgICAgICAgfQogICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuRGF0YVNvdXJjZSBjZiA9IG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuRGF0YVNvdXJjZSgKICAgICAgICAgICAgIChqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkpdGhpcywgY3hNYW5hZ2VyKTsKLSAgICAgICAgcmV0dXJuIGNmOyAKKyAgICAgICAgcmV0dXJuIGNmOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBuZXcgcGh5c2ljYWwgY29ubmVjdGlvbiB0byB0aGUgdW5kZXJseWluZyBFSVMgcmVzb3VyY2UKICAgICAgKiBtYW5hZ2VyLgotICAgICAqIAotICAgICAqIEBwYXJhbQlzdWJqZWN0CTxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICogQHBhcmFtCWN4UmVxdWVzdEluZm8JPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiB3aGljaCBtYXkgYmUgY3JlYXRlZAotICAgICAqICAgICAgIAkgICAgICAgICAgICAgCWFzIGEgcmVzdWx0IG9mIHRoZSBpbnZvY2F0aW9uIDxjb2RlPmdldENvbm5lY3Rpb24odXNlciwgcGFzc3dvcmQpPC9jb2RlPgotICAgICAqICAgICAgIAkgICAgICAgICAgICAgCW9uIHRoZSA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QKLSAgICAgKiBAcmV0dXJuCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QgY3JlYXRlZAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gaW5zdGFudGlhdGluZyB0aGUKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCTxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdCB1c2VkIGZvciB0aGUKLSAgICAgKiAgICAgICAJCQkJY3JlYXRpb24gb2YgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QKLSAgICAgKiBAdGhyb3dzCVNlY3VyaXR5RXhjZXB0aW9uCWlmIHRoZXJlIGlubyA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdAotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJc2F0aXNmeWluZyB0aGlzIHJlcXVlc3QgCi0gICAgICogQHRocm93cwlSZXNvdXJjZUFsbG9jYXRpb25FeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUgCi0gICAgICoJCQkJCQlwaHlzaWNhbCBjb25uZWN0aW9uCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgc3ViamVjdCAgICA8Y29kZT5TdWJqZWN0PC9jb2RlPiBpbnN0YW5jZSBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgorICAgICAqIEBwYXJhbSAgICBjeFJlcXVlc3RJbmZvICAgIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gd2hpY2ggbWF5IGJlIGNyZWF0ZWQKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyBhIHJlc3VsdCBvZiB0aGUgaW52b2NhdGlvbiA8Y29kZT5nZXRDb25uZWN0aW9uKHVzZXIsIHBhc3N3b3JkKTwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiB0aGUgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0CisgICAgICogQHJldHVybiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGNyZWF0ZWQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGluc3RhbnRpYXRpbmcgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QgdXNlZCBmb3IgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgIGNyZWF0aW9uIG9mIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0CisgICAgICogQHRocm93cyAgICBTZWN1cml0eUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpbm8gPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdGlzZnlpbmcgdGhpcyByZXF1ZXN0CisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUFsbG9jYXRpb25FeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHBoeXNpY2FsIGNvbm5lY3Rpb24KICAgICAgKi8KICAgICBwdWJsaWMgYWJzdHJhY3QgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gY3JlYXRlTWFuYWdlZENvbm5lY3Rpb24oamF2YXguc2VjdXJpdHkuYXV0aC5TdWJqZWN0IHN1YmplY3QsCiAgICAgICAgIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBjeFJlcXVlc3RJbmZvKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb247Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBDaGVjayBpZiB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaXMgZXF1YWwgdG8gCisgICAgICogQ2hlY2sgaWYgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGlzIGVxdWFsIHRvCiAgICAgICogYW5vdGhlciA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LgotICAgICAqIAotICAgICAqIEBwYXJhbQlvdGhlcgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdCBmb3IgY2hlY2tpbmcgZXF1YWxpdHkgd2l0aAotICAgICAqIEByZXR1cm4JdHJ1ZQlpZiB0aGUgcHJvcGVydHkgc2V0cyBvZiBib3RoIHRoZSAKLSAgICAgKgkJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0cyBhcmUgdGhlIHNhbWUKLSAgICAgKgkJZmFsc2UJb3RoZXJ3aXNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgb3RoZXIgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QgZm9yIGNoZWNraW5nIGVxdWFsaXR5IHdpdGgKKyAgICAgKiBAcmV0dXJuICAgIHRydWUgICAgaWYgdGhlIHByb3BlcnR5IHNldHMgb2YgYm90aCB0aGUKKyAgICAgKiAgICAgICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0cyBhcmUgdGhlIHNhbWUKKyAgICAgKiAgICAgICAgZmFsc2UgICAgb3RoZXJ3aXNlCiAgICAgICovCiAgICAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvdGhlcik7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXQgdGhlIGxvZyB3cml0ZXIgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAc2VlCTxjb2RlPnNldExvZ1dyaXRlcjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlByaW50V3JpdGVyPC9jb2RlPiBhc3NvY2lhdGVkIHdpdGggdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRMb2dXcml0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIGphdmEuaW8uUHJpbnRXcml0ZXIgZ2V0TG9nV3JpdGVyKCkgewogICAgICAgICByZXR1cm4gbG9nV3JpdGVyOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAc2VlCTxjb2RlPnNldFJlc291cmNlQWRhcHRlcjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0UmVzb3VyY2VBZGFwdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBqYWthcnRhLnJlc291cmNlLnNwaS5SZXNvdXJjZUFkYXB0ZXIgZ2V0UmVzb3VyY2VBZGFwdGVyKCkgewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtMTM2LDExICsxMzYsMTEgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmE7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgaGFzaCBjb2RlIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWhhc2ggY29kZSBmb3IgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+CisgICAgICogQHJldHVybiAgICBoYXNoIGNvZGUgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKXsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKQEAgLTE0OCw0MSArMTQ4LDQxIEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHNwZWMuaGFzaENvZGUoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgbWF0Y2hlZCA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gZnJvbSB0aGUgY2FuZGlkYXRlIAorICAgICAqIFJldHVybnMgYSBtYXRjaGVkIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBmcm9tIHRoZSBjYW5kaWRhdGUKICAgICAgKiBzZXQgb2YgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdHMuCi0gICAgICogCi0gICAgICogQHBhcmFtCWNvbm5lY3Rpb25TZXQJPGNvZGU+U2V0PC9jb2RlPiBvZiAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+Ci0gICAgICoJCQkJb2JqZWN0cyBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgotICAgICAqIEBwYXJhbQlzdWJqZWN0CSBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgotICAgICAqCQkJZm9yIHJldHJpZXZpbmcgaW5mb3JtYXRpb24gcmVxdWlyZWQgZm9yIG1hdGNoaW5nCi0gICAgICogQHBhcmFtCWN4UmVxdWVzdEluZm8JPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgotICAgICAqCQkJCWZvciByZXRyaWV2aW5nIGluZm9ybWF0aW9uIHJlcXVpcmVkIGZvciBtYXRjaGluZwotICAgICAqIEByZXR1cm4JPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHRoYXQgaXMgdGhlIGJlc3QgbWF0Y2ggc2F0aXNmeWluZyB0aGlzIHJlcXVlc3QKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGFjY2Vzc2luZyB0aGUgPGNvZGU+U3ViamVjdDwvY29kZT4KLSAgICAgKgkJCQkJcGFyYW1ldGVyIG9yIHRoZSA8Y29kZT5TZXQ8L2NvZGU+IG9mIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgotICAgICAqCQkJCQlvYmplY3RzIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgY29ubmVjdGlvblNldCAgICA8Y29kZT5TZXQ8L2NvZGU+IG9mICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiAgICAgICAgICAgICAgICBvYmplY3RzIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogQHBhcmFtICAgIHN1YmplY3QgICAgIHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogICAgICAgICAgICBmb3IgcmV0cmlldmluZyBpbmZvcm1hdGlvbiByZXF1aXJlZCBmb3IgbWF0Y2hpbmcKKyAgICAgKiBAcGFyYW0gICAgY3hSZXF1ZXN0SW5mbyAgICA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCisgICAgICogICAgICAgICAgICAgICAgZm9yIHJldHJpZXZpbmcgaW5mb3JtYXRpb24gcmVxdWlyZWQgZm9yIG1hdGNoaW5nCisgICAgICogQHJldHVybiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdGhhdCBpcyB0aGUgYmVzdCBtYXRjaCBzYXRpc2Z5aW5nIHRoaXMgcmVxdWVzdAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgYWNjZXNzaW5nIHRoZSA8Y29kZT5TdWJqZWN0PC9jb2RlPgorICAgICAqICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIgb3IgdGhlIDxjb2RlPlNldDwvY29kZT4gb2YgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogICAgICAgICAgICAgICAgICAgIG9iamVjdHMgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKICAgICAgKi8KLSAgICBwdWJsaWMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWF0Y2hNYW5hZ2VkQ29ubmVjdGlvbnMoamF2YS51dGlsLlNldCBjb25uZWN0aW9uU2V0LCAKKyAgICBwdWJsaWMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWF0Y2hNYW5hZ2VkQ29ubmVjdGlvbnMoamF2YS51dGlsLlNldCBjb25uZWN0aW9uU2V0LAogICAgICAgICBqYXZheC5zZWN1cml0eS5hdXRoLlN1YmplY3Qgc3ViamVjdCwgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGN4UmVxdWVzdEluZm8pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CiAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gbWF0Y2hNYW5hZ2VkQ29ubmVjdGlvbnMiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZihjb25uZWN0aW9uU2V0ID09IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIFBhc3N3b3JkQ3JlZGVudGlhbCBwYyA9IFNlY3VyaXR5VXRpbHMuZ2V0UGFzc3dvcmRDcmVkZW50aWFsKHRoaXMsIHN1YmplY3QsIGN4UmVxdWVzdEluZm8pOwotICAgICAgICAKKwogICAgICAgICBqYXZhLnV0aWwuSXRlcmF0b3IgaXRlciA9IGNvbm5lY3Rpb25TZXQuaXRlcmF0b3IoKTsKICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1jID0gbnVsbDsKICAgICAgICAgd2hpbGUoaXRlci5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgbWMgPSAoY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uKSBpdGVyLm5leHQoKTsKICAgICAgICAgICAgIH0gY2F0Y2goamF2YS51dGlsLk5vU3VjaEVsZW1lbnRFeGNlcHRpb24gbnNlZSkgewotCSAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfaXRlciIpOworICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfaXRlciIpOwogICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihuc2VlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZihwYyA9PSBudWxsICYmIHRoaXMuZXF1YWxzKG1jLmdldE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSgpKSkgewpAQCAtMTkxLDcgKzE5MSw3IEBACiAgICAgICAgICAgICAgICAgICAgIGlzVmFsaWQobWMpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWM7CiAgICAgICAgICAgICAgICAgfSBjYXRjaChSZXNvdXJjZUV4Y2VwdGlvbiByZSkgewotCSAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3JlIiwgcmUpOworICAgICAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3JlIiwgcmUpOwogICAgICAgICAgICAgICAgICAgICBtYy5jb25uZWN0aW9uRXJyb3JPY2N1cnJlZChyZSwgbnVsbCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIGlmKFNlY3VyaXR5VXRpbHMuaXNQYXNzd29yZENyZWRlbnRpYWxFcXVhbChwYywgbWMuZ2V0UGFzc3dvcmRDcmVkZW50aWFsKCkpID09IHRydWUpIHsKQEAgLTIwMCw0NSArMjAwLDQ1IEBACiAgICAgICAgICAgICAgICAgICAgIGlzVmFsaWQobWMpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWM7CiAgICAgICAgICAgICAgICAgfSBjYXRjaChSZXNvdXJjZUV4Y2VwdGlvbiByZSkgewotCSAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMucmUiKTsKKyAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLnJlIik7CiAgICAgICAgICAgICAgICAgICAgIG1jLmNvbm5lY3Rpb25FcnJvck9jY3VycmVkKHJlLCBudWxsKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotICAgIAorCiAgICAgLy9HSkNJTlQKICAgICAvKioKICAgICAgKiBDaGVja3MgaWYgYSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaXMgdG8gYmUgdmFsaWRhdGVkIG9yIG5vdAogICAgICAqIGFuZCB2YWxpZGF0ZXMgaXQgb3IgcmV0dXJucy4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JbWMJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIG9yCi0gICAgICogICAgICAgIAkgICAgICAgICAgCQlpZiB2YWxpZGF0aW9uIG1ldGhvZCBpcyBub3QgcHJvcGVyCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgbWMgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIG9yCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB2YWxpZGF0aW9uIG1ldGhvZCBpcyBub3QgcHJvcGVyCiAgICAgICovCiAgICAgdm9pZCBpc1ZhbGlkKGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKIAogICAgICAgICBpZihtYy5pc1RyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKSB7Ci0JICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgCi0gICAgICAgIGJvb2xlYW4gY29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZCA9IAorCisgICAgICAgIGJvb2xlYW4gY29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZCA9CiAgICAgICAgICAgICAobmV3IEJvb2xlYW4oc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ09OTkVDVElPTlZBTElEQVRJT05SRVFVSVJFRCkudG9Mb3dlckNhc2UoKSkpLmJvb2xlYW5WYWx1ZSgpOwogICAgICAgICBpZiggY29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZCA9PSBmYWxzZSB8fCBtYyA9PSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIAorCisKICAgICAgICAgU3RyaW5nIHZhbGlkYXRpb25NZXRob2QgPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OTUVUSE9EKS50b0xvd2VyQ2FzZSgpOwotICAgICAgICAKKwogICAgICAgICBtYy5jaGVja0lmVmFsaWQoKTsKICAgICAgICAgLyoqCiAgICAgICAgICAqIFRoZSBhYm92ZSBjYWxsIGNoZWNrcyBpZiB0aGUgYWN0dWFsIHBoeXNpY2FsIGNvbm5lY3Rpb24KICAgICAgICAgICogaXMgdXNhYmxlIG9yIG5vdC4KICAgICAgICAgICovCiAgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gY29uID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpOwotICAgICAgICAKKwogICAgICAgICBpZih2YWxpZGF0aW9uTWV0aG9kLmVxdWFscygiYXV0by1jb21taXQiKSA9PSB0cnVlKSB7CiAgICAgICAgICAgICBpc1ZhbGlkQnlBdXRvQ29tbWl0KGNvbik7CiAgICAgICAgIH0gZWxzZSBpZih2YWxpZGF0aW9uTWV0aG9kLmVxdWFsc0lnbm9yZUNhc2UoIm1ldGEtZGF0YSIpID09IHRydWUpIHsKQEAgLTI0OSwyOCArMjQ5LDI4IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSB2YWxpZGF0aW9uIG1ldGhvZCBpcyBub3QgcHJvcGVyIik7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDaGVja3MgaWYgYSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBpcyB2YWxpZCBvciBub3QKICAgICAgKiBieSBjaGVja2luZyBpdHMgYXV0byBjb21taXQgcHJvcGVydHkuCi0gICAgICogCi0gICAgICogQHBhcmFtCWNvbgk8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqCisgICAgICogQHBhcmFtICAgIGNvbiAgICA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqLwogICAgIHByb3RlY3RlZCB2b2lkIGlzVmFsaWRCeUF1dG9Db21taXQoamF2YS5zcWwuQ29ubmVjdGlvbiBjb24pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGNvbiA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyAiCiAgICAgICAgICAgICAgICAgKyAidGhlIGNvbm5lY3Rpb24gaXMgbnVsbCIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgIC8vIE5vdGljZSB0aGF0IHVzaW5nIHNvbWV0aGluZyBsaWtlIAorICAgICAgICAgICAvLyBOb3RpY2UgdGhhdCB1c2luZyBzb21ldGhpbmcgbGlrZQogICAgICAgICAgICAvLyBkYkNvbi5zZXRBdXRvQ29tbWl0KGRiQ29uLmdldEF1dG9Db21taXQoKSkgd2lsbCBjYXVzZSBwcm9ibGVtcyB3aXRoCiAgICAgICAgICAgIC8vIHNvbWUgZHJpdmVycyBsaWtlIHN5YmFzZQotICAgICAgICAgICAvLyBXZSBkbyBub3QgdmFsaWRhdGUgY29ubmVjdGlvbnMgdGhhdCBhcmUgYWxyZWFkeSBlbmxpc3RlZCAKLQkgICAvL2luIGEgdHJhbnNhY3Rpb24gCi0JICAgLy8gV2UgY3ljbGUgYXV0b2NvbW1pdCB0byB0cnVlIGFuZCBmYWxzZSB0byBieS1wYXNzIGRyaXZlcnMgdGhhdCAKLQkgICAvLyBtaWdodCBjYWNoZSB0aGUgY2FsbCB0byBzZXQgYXV0b2NvbWl0dAorICAgICAgICAgICAvLyBXZSBkbyBub3QgdmFsaWRhdGUgY29ubmVjdGlvbnMgdGhhdCBhcmUgYWxyZWFkeSBlbmxpc3RlZAorICAgICAgIC8vaW4gYSB0cmFuc2FjdGlvbgorICAgICAgIC8vIFdlIGN5Y2xlIGF1dG9jb21taXQgdG8gdHJ1ZSBhbmQgZmFsc2UgdG8gYnktcGFzcyBkcml2ZXJzIHRoYXQKKyAgICAgICAvLyBtaWdodCBjYWNoZSB0aGUgY2FsbCB0byBzZXQgYXV0b2NvbWl0dAogICAgICAgICAgICAvLyBBbHNvIG5vdGljZSB0aGF0IHNvbWUgWEEgZGF0YSBzb3VyY2VzIHdpbGwgdGhyb3cgYW5kIGV4Y2VwdGlvbiBpZgogICAgICAgICAgICAvLyB5b3UgdHJ5IHRvIGNhbGwgc2V0QXV0b0NvbW1pdCwgZm9yIHRoZW0gdGhpcyBtZXRob2QgaXMgbm90IHJlY29tbWVuZGVkCiAKQEAgLTI4MSw5MCArMjgxLDkwIEBACiAgICAgICAgICAgICAgICAgY29uLnJvbGxiYWNrKCk7IC8vIHByZXZlbnRzIHVuY29tcGxldGVkIHRyYW5zYWN0aW9uIGV4Y2VwdGlvbnMKICAgICAgICAgICAgICAgICBjb24uc2V0QXV0b0NvbW1pdCh0cnVlKTsKICAgICAgICAgICAgfQotICAgICAgICAKLQkgICBjb24uc2V0QXV0b0NvbW1pdChhYyk7CisKKyAgICAgICBjb24uc2V0QXV0b0NvbW1pdChhYyk7CiAKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19hdXRvY29tbWl0Iik7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2F1dG9jb21taXQiKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDaGVja3MgaWYgYSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBpcyB2YWxpZCBvciBub3QKICAgICAgKiBieSBjaGVja2luZyBpdHMgbWV0YSBkYXRhLgotICAgICAqIAotICAgICAqIEBwYXJhbQljb24JPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKKyAgICAgKgorICAgICAqIEBwYXJhbSAgICBjb24gICAgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gdG8gYmUgdmFsaWRhdGVkCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKi8KICAgICBwcm90ZWN0ZWQgdm9pZCBpc1ZhbGlkQnlNZXRhRGF0YShqYXZhLnNxbC5Db25uZWN0aW9uIGNvbikgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYoY29uID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzICIKICAgICAgICAgICAgICAgICArICJ0aGUgY29ubmVjdGlvbiBpcyBudWxsIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGphdmEuc3FsLkRhdGFiYXNlTWV0YURhdGEgZG1kID0gY29uLmdldE1ldGFEYXRhKCk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfbWQiKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfbWQiKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzICIKICAgICAgICAgICAgICAgICArICJnZXR0aW5nIHRoZSBtZXRhIGRhdGEgZmFpbGVkOiAiICsgc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2hlY2tzIGlmIGEgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gaXMgdmFsaWQgb3Igbm90CiAgICAgICogYnkgcXVlcnlpbmcgYSB0YWJsZS4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0JY29uCTxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IHRvIGJlIHZhbGlkYXRlZAotICAgICAqIEBwYXJhbQl0YWJsZU5hbWUJdGFibGUgd2hpY2ggc2hvdWxkIGJlIHF1ZXJpZWQKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqCisgICAgICogQHBhcmFtICAgIGNvbiAgICA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiB0byBiZSB2YWxpZGF0ZWQKKyAgICAgKiBAcGFyYW0gICAgdGFibGVOYW1lICAgIHRhYmxlIHdoaWNoIHNob3VsZCBiZSBxdWVyaWVkCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAgKi8KLSAgICBwcm90ZWN0ZWQgdm9pZCBpc1ZhbGlkQnlUYWJsZVF1ZXJ5KGphdmEuc3FsLkNvbm5lY3Rpb24gY29uLCAKKyAgICBwcm90ZWN0ZWQgdm9pZCBpc1ZhbGlkQnlUYWJsZVF1ZXJ5KGphdmEuc3FsLkNvbm5lY3Rpb24gY29uLAogICAgICAgICBTdHJpbmcgdGFibGVOYW1lKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihjb24gPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQgYXMgIgogICAgICAgICAgICAgICAgICsgInRoZSBjb25uZWN0aW9uIGlzIG51bGwiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgamF2YS5zcWwuU3RhdGVtZW50IHN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CiAgICAgICAgICAgICBqYXZhLnNxbC5SZXN1bHRTZXQgcnMgPSBzdG10LmV4ZWN1dGVRdWVyeSgiU0VMRUNUICogRlJPTSAiICsgdGFibGVOYW1lKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19leGVjdXRlIik7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2V4ZWN1dGUiKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzICIKICAgICAgICAgICAgICAgICArICJxdWVyeWluZyB0aGUgdGFibGUgIiArIHRhYmxlTmFtZSArICIgZmFpbGVkOiAiICsgc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgaXNvbGF0aW9uIGxldmVsIHNwZWNpZmllZCBpbiB0aGUgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPgogICAgICAqIGZvciB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHBhc3NlZC4KICAgICAgKgotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBpc29sYXRpb24gcHJvcGVydHkgaXMgaW52YWxpZAotICAgICAqCQkJCQlvciBpZiB0aGUgaXNvbGF0aW9uIGNhbm5vdCBiZSBzZXQgb3ZlciB0aGUgY29ubmVjdGlvbgorICAgICAqIEBwYXJhbSAgICBtYyAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBpc29sYXRpb24gcHJvcGVydHkgaXMgaW52YWxpZAorICAgICAqICAgICAgICAgICAgICAgICAgICBvciBpZiB0aGUgaXNvbGF0aW9uIGNhbm5vdCBiZSBzZXQgb3ZlciB0aGUgY29ubmVjdGlvbgogICAgICAqLwogICAgIHByb3RlY3RlZCB2b2lkIHNldElzb2xhdGlvbihjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24gbWMpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7Ci0gICAgCQotICAgIAlqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiA9IG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKTsKLSAgICAJaWYoY29uID09IG51bGwpIHsKLSAgICAJICAgIHJldHVybjsKLSAgICAJfQotICAgIAkKLSAgICAJU3RyaW5nIHRyYW5Jc29sYXRpb24gPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTik7Ci0gICAgCWlmKHRyYW5Jc29sYXRpb24gIT0gbnVsbCAmJiB0cmFuSXNvbGF0aW9uLmVxdWFscygiIikgPT0gZmFsc2UpIHsKLSAgICAJICAgIGludCB0cmFuSXNvbGF0aW9uSW50ID0gZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb25JbnQodHJhbklzb2xhdGlvbik7Ci0gICAgCSAgICB0cnkgewotICAgIAkgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbih0cmFuSXNvbGF0aW9uSW50KTsKLSAgICAJICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3R4X2xldmVsIik7Ci0gICAgCSAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGNvdWxkICIKLSAgICAJICAgICAgICAgICAgKyAibm90IGJlIHNldDogIiArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAJICAgIH0KLSAgICAJfQorCisgICAgICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gY29uID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpOworICAgICAgICBpZihjb24gPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgU3RyaW5nIHRyYW5Jc29sYXRpb24gPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTik7CisgICAgICAgIGlmKHRyYW5Jc29sYXRpb24gIT0gbnVsbCAmJiB0cmFuSXNvbGF0aW9uLmVxdWFscygiIikgPT0gZmFsc2UpIHsKKyAgICAgICAgICAgIGludCB0cmFuSXNvbGF0aW9uSW50ID0gZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb25JbnQodHJhbklzb2xhdGlvbik7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbih0cmFuSXNvbGF0aW9uSW50KTsKKyAgICAgICAgICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKKyAgICAgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX3R4X2xldmVsIik7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGNvdWxkICIKKyAgICAgICAgICAgICAgICAgICAgKyAibm90IGJlIHNldDogIiArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJlc2V0cyB0aGUgaXNvbGF0aW9uIGxldmVsIGZvciB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IHBhc3NlZC4KICAgICAgKiBJZiB0aGUgdHJhbnNhY3Rpb24gbGV2ZWwgaXMgdG8gYmUgZ3VhcmFudGVlZCB0byBiZSB0aGUgc2FtZSBhcyB0aGUgb25lCkBAIC0zNzMsMzgyICszNzMsMzgyIEBACiAgICAgICogaXNvbGF0aW9uIGxldmVsIGZyb20gdGhlIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gcGFzc2VkLiBFbHNlLAogICAgICAqIGl0IHNldHMgaXQgdG8gdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBwYXNzZWQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWMJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+Ci0gICAgICogQHBhcmFtCXRyYW5Jc29sCWludAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIGlzb2xhdGlvbiBwcm9wZXJ0eSBpcyBpbnZhbGlkCi0gICAgICoJCQkJCW9yIGlmIHRoZSBpc29sYXRpb24gY2Fubm90IGJlIHNldCBvdmVyIHRoZSBjb25uZWN0aW9uCisgICAgICogQHBhcmFtICAgIG1jICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB0cmFuSXNvbCAgICBpbnQKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBpc29sYXRpb24gcHJvcGVydHkgaXMgaW52YWxpZAorICAgICAqICAgICAgICAgICAgICAgICAgICBvciBpZiB0aGUgaXNvbGF0aW9uIGNhbm5vdCBiZSBzZXQgb3ZlciB0aGUgY29ubmVjdGlvbgogICAgICAqLwogICAgIHZvaWQgcmVzZXRJc29sYXRpb24oY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1jLCBpbnQgdHJhbklzb2wpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7Ci0gICAgCQotICAgIAlqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiA9IG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKTsKLSAgICAJaWYoY29uID09IG51bGwpIHsKLSAgICAJICAgIHJldHVybjsKLSAgICAJfQotICAgIAkKLSAgICAJU3RyaW5nIHRyYW5Jc29sYXRpb24gPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTik7Ci0gICAgCWlmKHRyYW5Jc29sYXRpb24gIT0gbnVsbCAmJiB0cmFuSXNvbGF0aW9uLmVxdWFscygiIikgPT0gZmFsc2UpIHsKLSAgICAJICAgIFN0cmluZyBndWFyYW50ZWVJc29sYXRpb25MZXZlbCA9IHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkdVQVJBTlRFRUlTT0xBVElPTkxFVkVMKTsKLSAgICAJICAgIAotICAgIAkgICAgaWYoZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwgIT0gbnVsbCAmJiBndWFyYW50ZWVJc29sYXRpb25MZXZlbC5lcXVhbHMoIiIpID09IGZhbHNlKSB7Ci0gICAgCSAgICAgICAgYm9vbGVhbiBndWFyYW50ZWUgPSAobmV3IEJvb2xlYW4oZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwudG9Mb3dlckNhc2UoKSkpLmJvb2xlYW5WYWx1ZSgpOwotICAgIAkgICAgICAgIAotICAgIAkgICAgICAgIGlmKGd1YXJhbnRlZSkgewotICAgIAkgICAgICAgICAgICBpbnQgdHJhbklzb2xhdGlvbkludCA9IGdldFRyYW5zYWN0aW9uSXNvbGF0aW9uSW50KHRyYW5Jc29sYXRpb24pOwotICAgIAkgICAgICAgICAgICB0cnkgewotICAgIAkgICAgICAgICAgICAgICAgaWYodHJhbklzb2xhdGlvbkludCAhPSBjb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKSkgewotICAgIAkgICAgICAgICAgICAgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbih0cmFuSXNvbGF0aW9uSW50KTsKLSAgICAJICAgICAgICAgICAgICAgIH0KLSAgICAJICAgICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y190eF9sZXZlbCIpOwotICAgIAkgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgaXNvbGF0aW9uIGxldmVsIGNvdWxkIG5vdCBiZSBzZXQ6ICIKLSAgICAJICAgICAgICAgICAgICAgICAgICArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAJICAgICAgICAgICAgfQotICAgIAkgICAgICAgIH0gZWxzZSB7Ci0gICAgCSAgICAgICAgICAgIHRyeSB7Ci0gICAgCSAgICAgICAgICAgICAgICBpZih0cmFuSXNvbCAhPSBjb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKSkgewotICAgIAkgICAgICAgICAgICAgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbih0cmFuSXNvbCk7Ci0gICAgCSAgICAgICAgICAgICAgICB9Ci0gICAgCSAgICAgICAgICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfdHhfbGV2ZWwiKTsKLSAgICAJICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGlzb2xhdGlvbiBsZXZlbCBjb3VsZCBub3QgYmUgc2V0OiAiCi0gICAgCSAgICAgICAgICAgICAgICAgICAgKyBzcWxlLmdldE1lc3NhZ2UoKSk7Ci0gICAgCSAgICAgICAgICAgIH0KLSAgICAJICAgICAgICB9Ci0gICAgCSAgICB9Ci0gICAgCX0KKworICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGNvbiA9IG1jLmdldEFjdHVhbENvbm5lY3Rpb24oKTsKKyAgICAgICAgaWYoY29uID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFN0cmluZyB0cmFuSXNvbGF0aW9uID0gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVFJBTlNBQ1RJT05JU09MQVRJT04pOworICAgICAgICBpZih0cmFuSXNvbGF0aW9uICE9IG51bGwgJiYgdHJhbklzb2xhdGlvbi5lcXVhbHMoIiIpID09IGZhbHNlKSB7CisgICAgICAgICAgICBTdHJpbmcgZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwgPSBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5HVUFSQU5URUVJU09MQVRJT05MRVZFTCk7CisKKyAgICAgICAgICAgIGlmKGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsICE9IG51bGwgJiYgZ3VhcmFudGVlSXNvbGF0aW9uTGV2ZWwuZXF1YWxzKCIiKSA9PSBmYWxzZSkgeworICAgICAgICAgICAgICAgIGJvb2xlYW4gZ3VhcmFudGVlID0gKG5ldyBCb29sZWFuKGd1YXJhbnRlZUlzb2xhdGlvbkxldmVsLnRvTG93ZXJDYXNlKCkpKS5ib29sZWFuVmFsdWUoKTsKKworICAgICAgICAgICAgICAgIGlmKGd1YXJhbnRlZSkgeworICAgICAgICAgICAgICAgICAgICBpbnQgdHJhbklzb2xhdGlvbkludCA9IGdldFRyYW5zYWN0aW9uSXNvbGF0aW9uSW50KHRyYW5Jc29sYXRpb24pOworICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYodHJhbklzb2xhdGlvbkludCAhPSBjb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbih0cmFuSXNvbGF0aW9uSW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgeworICAgICAgICAgICAgICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y190eF9sZXZlbCIpOworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgaXNvbGF0aW9uIGxldmVsIGNvdWxkIG5vdCBiZSBzZXQ6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHNxbGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZih0cmFuSXNvbCAhPSBjb24uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbih0cmFuSXNvbCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goamF2YS5zcWwuU1FMRXhjZXB0aW9uIHNxbGUpIHsKKyAgICAgICAgICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfdHhfbGV2ZWwiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIGlzb2xhdGlvbiBsZXZlbCBjb3VsZCBub3QgYmUgc2V0OiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBzcWxlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBpbnRlZ2VyIGVxdWl2YWxlbnQgb2YgdGhlIHN0cmluZyBzcGVjaWZ5aW5nCiAgICAgICogdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbi4KICAgICAgKgotICAgICAqIEBwYXJhbQl0cmFuSXNvbGF0aW9uCXN0cmluZyBzcGVjaWZ5aW5nIHRoZSBpc29sYXRpb24gbGV2ZWwKLSAgICAgKiBAcmV0dXJuCXRyYW5Jc29sYXRpb25JbnQJdGhlIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IGNvbnN0YW50Ci0gICAgICoJCQkJCWZvciB0aGUgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIGlzb2xhdGlvbi4KKyAgICAgKiBAcGFyYW0gICAgdHJhbklzb2xhdGlvbiAgICBzdHJpbmcgc3BlY2lmeWluZyB0aGUgaXNvbGF0aW9uIGxldmVsCisgICAgICogQHJldHVybiAgICB0cmFuSXNvbGF0aW9uSW50ICAgIHRoZSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBjb25zdGFudAorICAgICAqICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBpc29sYXRpb24uCiAgICAgICovCiAgICAgcHJpdmF0ZSBpbnQgZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb25JbnQoU3RyaW5nIHRyYW5Jc29sYXRpb24pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7Ci0gICAgCWlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgicmVhZC11bmNvbW1pdHRlZCIpKSB7Ci0gICAgCSAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9SRUFEX1VOQ09NTUlUVEVEOwotICAgIAl9IGVsc2UgaWYodHJhbklzb2xhdGlvbi5lcXVhbHNJZ25vcmVDYXNlKCJyZWFkLWNvbW1pdHRlZCIpKSB7Ci0gICAgCSAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9SRUFEX0NPTU1JVFRFRDsKLSAgICAJfSBlbHNlIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgicmVwZWF0YWJsZS1yZWFkIikpIHsKLSAgICAJICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1JFUEVBVEFCTEVfUkVBRDsKLSAgICAJfSBlbHNlIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgic2VyaWFsaXphYmxlIikpIHsKLSAgICAJICAgIHJldHVybiBqYXZhLnNxbC5Db25uZWN0aW9uLlRSQU5TQUNUSU9OX1NFUklBTElaQUJMRTsKLSAgICAJfSBlbHNlIHsKLSAgICAJICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiSW52YWxpZCB0cmFuc2FjdGlvbiBpc29sYXRpb247IHRoZSB0cmFuc2FjdGlvbiAiCi0gICAgCSAgICAgICAgKyAiaXNvbGF0aW9uIGxldmVsIGNhbiBiZSBlbXB0eSBvciBhbnkgb2YgdGhlIGZvbGxvd2luZzogIgotICAgIAkgICAgICAgICAgICArICJyZWFkLXVuY29tbWl0dGVkLCByZWFkLWNvbW1pdHRlZCwgcmVwZWF0YWJsZS1yZWFkLCBzZXJpYWxpemFibGUiKTsKLSAgICAJfQorICAgICAgICBpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInJlYWQtdW5jb21taXR0ZWQiKSkgeworICAgICAgICAgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fUkVBRF9VTkNPTU1JVFRFRDsKKyAgICAgICAgfSBlbHNlIGlmKHRyYW5Jc29sYXRpb24uZXF1YWxzSWdub3JlQ2FzZSgicmVhZC1jb21taXR0ZWQiKSkgeworICAgICAgICAgICAgcmV0dXJuIGphdmEuc3FsLkNvbm5lY3Rpb24uVFJBTlNBQ1RJT05fUkVBRF9DT01NSVRURUQ7CisgICAgICAgIH0gZWxzZSBpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInJlcGVhdGFibGUtcmVhZCIpKSB7CisgICAgICAgICAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9SRVBFQVRBQkxFX1JFQUQ7CisgICAgICAgIH0gZWxzZSBpZih0cmFuSXNvbGF0aW9uLmVxdWFsc0lnbm9yZUNhc2UoInNlcmlhbGl6YWJsZSIpKSB7CisgICAgICAgICAgICByZXR1cm4gamF2YS5zcWwuQ29ubmVjdGlvbi5UUkFOU0FDVElPTl9TRVJJQUxJWkFCTEU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkludmFsaWQgdHJhbnNhY3Rpb24gaXNvbGF0aW9uOyB0aGUgdHJhbnNhY3Rpb24gIgorICAgICAgICAgICAgICAgICsgImlzb2xhdGlvbiBsZXZlbCBjYW4gYmUgZW1wdHkgb3IgYW55IG9mIHRoZSBmb2xsb3dpbmc6ICIKKyAgICAgICAgICAgICAgICAgICAgKyAicmVhZC11bmNvbW1pdHRlZCwgcmVhZC1jb21taXR0ZWQsIHJlcGVhdGFibGUtcmVhZCwgc2VyaWFsaXphYmxlIik7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGxvZyB3cml0ZXIgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlvdXQJPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IHBhc3NlZCBieSB0aGUgYXBwbGljYXRpb24gc2VydmVyCi0gICAgICogQHNlZQk8Y29kZT5nZXRMb2dXcml0ZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIG91dCAgICA8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldExvZ1dyaXRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRMb2dXcml0ZXIoamF2YS5pby5QcmludFdyaXRlciBvdXQpIHsKICAgICAgICAgbG9nV3JpdGVyID0gb3V0OwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldCB0aGUgYXNzb2NpYXRlZCA8Y29kZT5SZXNvdXJjZUFkYXB0ZXI8L2NvZGU+IEphdmFCZWFuLgogICAgICAqCi0gICAgICogQHBhcmFtCXJhCTxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgCi0gICAgICoJCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHNlZQk8Y29kZT5nZXRSZXNvdXJjZUFkYXB0ZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHJhICAgIDxjb2RlPlJlc291cmNlQWRhcHRlcjwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyAgICAgKiAgICAgICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldFJlc291cmNlQWRhcHRlcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRSZXNvdXJjZUFkYXB0ZXIoamFrYXJ0YS5yZXNvdXJjZS5zcGkuUmVzb3VyY2VBZGFwdGVyIHJhKSB7Ci0gICAgICAgIHRoaXMucmEgPSByYTsgICAKKyAgICAgICAgdGhpcy5yYSA9IHJhOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHVzZXIgbmFtZQogICAgICAqCi0gICAgICogQHBhcmFtCXVzZXIJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB1c2VyICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRVc2VyKFN0cmluZyB1c2VyKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlVTRVJOQU1FLCB1c2VyKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSB1c2VyIG5hbWUKICAgICAgKgotICAgICAqIEByZXR1cm4JdXNlcgorICAgICAqIEByZXR1cm4gICAgdXNlcgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VXNlcigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlVTRVJOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB1c2VyIG5hbWUKICAgICAgKgotICAgICAqIEBwYXJhbQl1c2VyCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdXNlciAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0dXNlcihTdHJpbmcgdXNlcikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5VU0VSTkFNRSwgdXNlcik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgdXNlciBuYW1lCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXVzZXIKKyAgICAgKiBAcmV0dXJuICAgIHVzZXIKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHVzZXIoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5VU0VSTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgcGFzc3dvcmQKICAgICAgKgotICAgICAqIEBwYXJhbQlwYXNzd2QJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBwYXNzd2QgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFBhc3N3b3JkKFN0cmluZyBwYXNzd2QpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUEFTU1dPUkQsIHBhc3N3ZCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcGFzc3dvcmQKICAgICAgKgotICAgICAqIEByZXR1cm4JcGFzc3dkCisgICAgICogQHJldHVybiAgICBwYXNzd2QKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFBhc3N3b3JkKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUEFTU1dPUkQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHBhc3N3b3JkCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcGFzc3dkCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcGFzc3dkICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRwYXNzd29yZChTdHJpbmcgcGFzc3dkKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBBU1NXT1JELCBwYXNzd2QpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHBhc3N3b3JkCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXBhc3N3ZAorICAgICAqIEByZXR1cm4gICAgcGFzc3dkCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRwYXNzd29yZCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlBBU1NXT1JEKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBkYXRhIHNvdXJjZQogICAgICAqCi0gICAgICogQHBhcmFtCWNsYXNzTmFtZQk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGNsYXNzTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Q2xhc3NOYW1lKFN0cmluZyBjbGFzc05hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ0xBU1NOQU1FLCBjbGFzc05hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGRhdGEgc291cmNlCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWNsYXNzTmFtZQorICAgICAqIEByZXR1cm4gICAgY2xhc3NOYW1lCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRDbGFzc05hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DTEFTU05BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGRhdGEgc291cmNlCiAgICAgICoKLSAgICAgKiBAcGFyYW0JY2xhc3NOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgY2xhc3NOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRjbGFzc05hbWUoU3RyaW5nIGNsYXNzTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5DTEFTU05BTUUsIGNsYXNzTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgZGF0YSBzb3VyY2UKICAgICAgKgotICAgICAqIEByZXR1cm4JY2xhc3NOYW1lCisgICAgICogQHJldHVybiAgICBjbGFzc05hbWUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGNsYXNzTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNMQVNTTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyBpZiBjb25uZWN0aW9uIHZhbGlkYXRpb24gaXMgcmVxdWlyZWQgb3Igbm90CiAgICAgICoKLSAgICAgKiBAcGFyYW0JY29uVmxkUmVxCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgY29uVmxkUmVxICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRDb25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkKFN0cmluZyBjb25WbGRSZXEpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuQ09OTkVDVElPTlZBTElEQVRJT05SRVFVSVJFRCwgY29uVmxkUmVxKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIGlmIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiBpcyByZXF1aXJlZCBvciBub3QKICAgICAgKgotICAgICAqIEByZXR1cm4JY29ubmVjdGlvbiB2YWxpZGF0aW9uIHJlcXVpcmVtZW50CisgICAgICogQHJldHVybiAgICBjb25uZWN0aW9uIHZhbGlkYXRpb24gcmVxdWlyZW1lbnQKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldENvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5DT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVEKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIGlmIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiBpcyByZXF1aXJlZCBvciBub3QKICAgICAgKgotICAgICAqIEBwYXJhbQljb25WbGRSZXEJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBjb25WbGRSZXEgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGNvbm5lY3Rpb25WYWxpZGF0aW9uUmVxdWlyZWQoU3RyaW5nIGNvblZsZFJlcSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5DT05ORUNUSU9OVkFMSURBVElPTlJFUVVJUkVELCBjb25WbGRSZXEpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgaWYgY29ubmVjdGlvbiB2YWxpZGF0aW9uIGlzIHJlcXVpcmVkIG9yIG5vdAogICAgICAqCi0gICAgICogQHJldHVybgljb25uZWN0aW9uIHZhbGlkYXRpb24gcmVxdWlyZW1lbnQKKyAgICAgKiBAcmV0dXJuICAgIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiByZXF1aXJlbWVudAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Y29ubmVjdGlvblZhbGlkYXRpb25SZXF1aXJlZCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkNPTk5FQ1RJT05WQUxJREFUSU9OUkVRVUlSRUQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHZhbGlkYXRpb24gbWV0aG9kIHJlcXVpcmVkCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdmFsaWRhdGlvbk1ldGhvZAk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHZhbGlkYXRpb25NZXRob2QgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFZhbGlkYXRpb25NZXRob2QoU3RyaW5nIHZhbGlkYXRpb25NZXRob2QpIHsKICAgICAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlZBTElEQVRJT05NRVRIT0QsIHZhbGlkYXRpb25NZXRob2QpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIGNvbm5lY3Rpb24gdmFsaWRhdGlvbiBtZXRob2QgdHlwZQogICAgICAqCi0gICAgICogQHJldHVybgl2YWxpZGF0aW9uIG1ldGhvZAorICAgICAqIEByZXR1cm4gICAgdmFsaWRhdGlvbiBtZXRob2QKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFZhbGlkYXRpb25NZXRob2QoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OTUVUSE9EKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSB2YWxpZGF0aW9uIG1ldGhvZCByZXF1aXJlZAogICAgICAqCi0gICAgICogQHBhcmFtCXZhbGlkYXRpb25NZXRob2QJPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICB2YWxpZGF0aW9uTWV0aG9kICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXR2YWxpZGF0aW9uTWV0aG9kKFN0cmluZyB2YWxpZGF0aW9uTWV0aG9kKSB7CiAgICAgICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OTUVUSE9ELCB2YWxpZGF0aW9uTWV0aG9kKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSBjb25uZWN0aW9uIHZhbGlkYXRpb24gbWV0aG9kIHR5cGUKICAgICAgKgotICAgICAqIEByZXR1cm4JdmFsaWRhdGlvbiBtZXRob2QKKyAgICAgKiBAcmV0dXJuICAgIHZhbGlkYXRpb24gbWV0aG9kCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXR2YWxpZGF0aW9uTWV0aG9kKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTk1FVEhPRCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdGFibGUgY2hlY2tlZCBmb3IgZHVyaW5nIHZhbGlkYXRpb24KICAgICAgKgotICAgICAqIEBwYXJhbQl0YWJsZQk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHRhYmxlICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRWYWxpZGF0aW9uVGFibGVOYW1lKFN0cmluZyB0YWJsZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OVEFCTEVOQU1FLCB0YWJsZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdGFibGUgY2hlY2tlZCBmb3IgZHVyaW5nIHZhbGlkYXRpb24KICAgICAgKgotICAgICAqIEByZXR1cm4JdGFibGUKKyAgICAgKiBAcmV0dXJuICAgIHRhYmxlCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRWYWxpZGF0aW9uVGFibGVOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTlRBQkxFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdGFibGUgY2hlY2tlZCBmb3IgZHVyaW5nIHZhbGlkYXRpb24KICAgICAgKgotICAgICAqIEBwYXJhbQl0YWJsZQk8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHRhYmxlICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXR2YWxpZGF0aW9uVGFibGVOYW1lKFN0cmluZyB0YWJsZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5WQUxJREFUSU9OVEFCTEVOQU1FLCB0YWJsZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdGFibGUgY2hlY2tlZCBmb3IgZHVyaW5nIHZhbGlkYXRpb24KICAgICAgKgotICAgICAqIEByZXR1cm4JdGFibGUKKyAgICAgKiBAcmV0dXJuICAgIHRhYmxlCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXR2YWxpZGF0aW9uVGFibGVOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuVkFMSURBVElPTlRBQkxFTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdHJuSXNvbGF0aW9uCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdHJuSXNvbGF0aW9uICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRUcmFuc2FjdGlvbklzb2xhdGlvbihTdHJpbmcgdHJuSXNvbGF0aW9uKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OLCB0cm5Jc29sYXRpb24pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqCi0gICAgICogQHJldHVybgl0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKKyAgICAgKiBAcmV0dXJuICAgIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcGFyYW0JdHJuSXNvbGF0aW9uCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgdHJuSXNvbGF0aW9uICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXR0cmFuc2FjdGlvbklzb2xhdGlvbihTdHJpbmcgdHJuSXNvbGF0aW9uKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlRSQU5TQUNUSU9OSVNPTEFUSU9OLCB0cm5Jc29sYXRpb24pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqCi0gICAgICogQHJldHVybgl0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwKKyAgICAgKiBAcmV0dXJuICAgIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0dHJhbnNhY3Rpb25Jc29sYXRpb24oKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5UUkFOU0FDVElPTklTT0xBVElPTik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyBpZiB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsIGlzIHRvIGJlIGd1YXJhbnRlZWQKICAgICAgKgotICAgICAqIEBwYXJhbQlndWFyYW50ZWVJc29sYXRpb24JPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBndWFyYW50ZWVJc29sYXRpb24gICAgPGNvZGU+U3RyaW5nPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldEd1YXJhbnRlZUlzb2xhdGlvbkxldmVsKFN0cmluZyBndWFyYW50ZWVJc29sYXRpb24pIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwsIGd1YXJhbnRlZUlzb2xhdGlvbik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWlzb2xhdGlvbiBsZXZlbCBndWFyYW50ZWUKKyAgICAgKiBAcmV0dXJuICAgIGlzb2xhdGlvbiBsZXZlbCBndWFyYW50ZWUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldEd1YXJhbnRlZUlzb2xhdGlvbkxldmVsKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuR1VBUkFOVEVFSVNPTEFUSU9OTEVWRUwpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgaWYgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbCBpcyB0byBiZSBndWFyYW50ZWVkCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZ3VhcmFudGVlSXNvbGF0aW9uCTxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZ3VhcmFudGVlSXNvbGF0aW9uICAgIDxjb2RlPlN0cmluZzwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRndWFyYW50ZWVJc29sYXRpb25MZXZlbChTdHJpbmcgZ3VhcmFudGVlSXNvbGF0aW9uKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkdVQVJBTlRFRUlTT0xBVElPTkxFVkVMLCBndWFyYW50ZWVJc29sYXRpb24pOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbAogICAgICAqCi0gICAgICogQHJldHVybglpc29sYXRpb24gbGV2ZWwgZ3VhcmFudGVlCisgICAgICogQHJldHVybiAgICBpc29sYXRpb24gbGV2ZWwgZ3VhcmFudGVlCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRndWFyYW50ZWVJc29sYXRpb25MZXZlbCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkdVQVJBTlRFRUlTT0xBVElPTkxFVkVMKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L1Jlc291cmNlQWRhcHRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvUmVzb3VyY2VBZGFwdGVyLmphdmEKaW5kZXggNTU1YmU3Ny4uZWE1NDA3NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvUmVzb3VyY2VBZGFwdGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvUmVzb3VyY2VBZGFwdGVyLmphdmEKQEAgLTI2LDggKzI2LDggQEAKIC8qKgogICogPGNvZGU+UmVzb3VyY2VBZGFwdGVyPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA4LzA1Ci0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wOC8wNQorICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogcHVibGljIGNsYXNzIFJlc291cmNlQWRhcHRlciBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLlJlc291cmNlQWRhcHRlciB7CiAKQEAgLTM3LDUyICszNyw1MiBAQAogICAgICAqIEVtcHR5IG1ldGhvZCBpbXBsZW1lbnRhdGlvbiBmb3IgZW5kcG9pbnRBY3RpdmF0aW9uCiAgICAgICogd2hpY2gganVzdCB0aHJvd3MgPGNvZGU+Tm90U3VwcG9ydGVkRXhjZXB0aW9uPC9jb2RlPgogICAgICAqCi0gICAgICogQHBhcmFtCW1lZgk8Y29kZT5NZXNzYWdlRW5kcG9pbnRGYWN0b3J5PC9jb2RlPgotICAgICAqIEBwYXJhbQlhcwk8Y29kZT5BY3RpdmF0aW9uU3BlYzwvY29kZT4KLSAgICAgKiBAdGhyb3dzCTxjb2RlPk5vdFN1cHBvcnRlZEV4Y2VwdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbWVmICAgIDxjb2RlPk1lc3NhZ2VFbmRwb2ludEZhY3Rvcnk8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGFzICAgIDxjb2RlPkFjdGl2YXRpb25TcGVjPC9jb2RlPgorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+Tm90U3VwcG9ydGVkRXhjZXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVuZHBvaW50QWN0aXZhdGlvbihNZXNzYWdlRW5kcG9pbnRGYWN0b3J5IG1lZiwgQWN0aXZhdGlvblNwZWMgYXMpIHRocm93cyBOb3RTdXBwb3J0ZWRFeGNlcHRpb24gewogICAgICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJUaGlzIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIEpEQkMgY29ubmVjdG9yIik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogRW1wdHkgbWV0aG9kIGltcGxlbWVudGF0aW9uIGZvciBlbmRwb2ludERlYWN0aXZhdGlvbgogICAgICAqCi0gICAgICogQHBhcmFtCW1lZgk8Y29kZT5NZXNzYWdlRW5kcG9pbnRGYWN0b3J5PC9jb2RlPgotICAgICAqIEBwYXJhbQlhcwk8Y29kZT5BY3RpdmF0aW9uU3BlYzwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbWVmICAgIDxjb2RlPk1lc3NhZ2VFbmRwb2ludEZhY3Rvcnk8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGFzICAgIDxjb2RlPkFjdGl2YXRpb25TcGVjPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVuZHBvaW50RGVhY3RpdmF0aW9uKE1lc3NhZ2VFbmRwb2ludEZhY3RvcnkgbWVmLCBBY3RpdmF0aW9uU3BlYyBhcykgewotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEVtcHR5IG1ldGhvZCBpbXBsZW1lbnRhdGlvbiBmb3IgZ2V0WEFSZXNvdXJjZXMKICAgICAgKiB3aGljaCBqdXN0IHRocm93cyA8Y29kZT5Ob3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+CiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc3BlY3MJPGNvZGU+QWN0aXZhdGlvblNwZWM8L2NvZGU+IGFycmF5Ci0gICAgICogQHRocm93cwk8Y29kZT5Ob3RTdXBwb3J0ZWRFeGNlcHRpb248L2NvZGU+CisgICAgICogQHBhcmFtICAgIHNwZWNzICAgIDxjb2RlPkFjdGl2YXRpb25TcGVjPC9jb2RlPiBhcnJheQorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+Tm90U3VwcG9ydGVkRXhjZXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBYQVJlc291cmNlW10gZ2V0WEFSZXNvdXJjZXMoQWN0aXZhdGlvblNwZWNbXSBzcGVjcykgdGhyb3dzIE5vdFN1cHBvcnRlZEV4Y2VwdGlvbiB7CiAgICAgICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIlRoaXMgbWV0aG9kIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgSkRCQyBjb25uZWN0b3IiKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBFbXB0eSBpbXBsZW1lbnRhdGlvbiBvZiBzdGFydCBtZXRob2QKICAgICAgKgotICAgICAqIEBwYXJhbQljdHgJPGNvZGU+Qm9vdHN0cmFwQ29udGV4dDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgY3R4ICAgIDxjb2RlPkJvb3RzdHJhcENvbnRleHQ8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc3RhcnQoQm9vdHN0cmFwQ29udGV4dCBjdHgpIHRocm93cyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzb3VyY2UgQWRhcHRlciBpcyBzdGFydGluZyB3aXRoIGNvbmZpZ3VyYXRpb24gOiIgKyByYVByb3ApOwogICAgICAgICBpZiAocmFQcm9wID09IG51bGwgfHwgIXJhUHJvcC5lcXVhbHMoIlZBTElEIikpIHsKLQkgICAgdGhyb3cgbmV3IFJlc291cmNlQWRhcHRlckludGVybmFsRXhjZXB0aW9uKCJSZXNvdXJjZSBhZGFwdGVyIGNhbm5vdCBzdGFydC4gSXQgaXMgY29uZmlndXJlZCBhcyA6ICIgKyByYVByb3ApOwotCX0gCisgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUFkYXB0ZXJJbnRlcm5hbEV4Y2VwdGlvbigiUmVzb3VyY2UgYWRhcHRlciBjYW5ub3Qgc3RhcnQuIEl0IGlzIGNvbmZpZ3VyZWQgYXMgOiAiICsgcmFQcm9wKTsKICAgICB9Ci0gICAgCisgICAgfQorCiAgICAgLyoqCiAgICAgICogRW1wdHkgaW1wbGVtZW50YXRpb24gb2Ygc3RvcCBtZXRob2QKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzdG9wKCkgewotICAgIAorCiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0UkFQcm9wZXJ0eShTdHJpbmcgcykgewpAQCAtOTIsNSArOTIsNSBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0UkFQcm9wZXJ0eSgpIHsKICAgICAgICAgcmV0dXJuIHJhUHJvcDsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L2J1aWxkLnhtbAppbmRleCA1ZTE0ZDQ0Li5mZjBmMDJiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvYnVpbGQueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxwcm9qZWN0IG5hbWU9ImpkYmNfY29ubmVjdG9yIiBiYXNlZGlyPSIke2dqYy5ob21lfSIgZGVmYXVsdD0iYnVpbGQiPgogICA8cHJvcGVydHkgbmFtZT0icGtnLmRpciIgdmFsdWU9ImNvbS9zdW4vZ2pjL3NwaSIvPgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImNsZWFuIj4KICAgICA8YW50IGFudGZpbGU9ImJ1aWxkLnhtbCIgZGlyPSIke2dqYy5ob21lfS9iaW4iIHRhcmdldD0iY2xlYW4iLz4KICAgPC90YXJnZXQ+CkBAIC0yOSw1NSArMjksNTUgQEAKICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlMTQiPgotICAgIAkKLSAgICAJPG1rZGlyIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ii8+Ci0gICAgCQotCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L2pkYmMuamFyIiBiYXNlZGlyPSIke2NsYXNzLmRpcn0iCisKKyAgICAgICAgPG1rZGlyIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ii8+CisKKyAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9qZGJjLmphciIgYmFzZWRpcj0iJHtjbGFzcy5kaXJ9IgogICAgICAgICBpbmNsdWRlcz0iJHtwa2cuZGlyfS8qKi8qLCBjb20vc3VuL2dqYy91dGlsLyoqLyosIGNvbS9zdW4vZ2pjL2NvbW1vbi8qKi8qIiBleGNsdWRlcz0iY29tL3N1bi9namMvY2NpLyoqLyosY29tL3N1bi9namMvc3BpLzEuNC8qKi8qIi8+Ci0gICAgICAgIAorCiAgICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fY3AucmFyIiBiYXNlZGlyPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUiIGluY2x1ZGVzPSJqZGJjLmphciIvPgotICAgICAgICA8Y29weSBmaWxlPSIke2dqYy5ob21lfS9zcmMvY29tL3N1bi9namMvc3BpLzEuNC9yYS1jcC54bWwiIHRvZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L3JhLnhtbCIgb3ZlcndyaXRlPSJ5ZXMiPgkKKyAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEtY3AueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4KICAgICAgICAgPC9jb3B5PgotICAgCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fY3AucmFyIiB1cGRhdGU9InllcyI+Ci0gICAJCTxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KLSAgIAkJCTxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgotICAgCQk8L21ldGFpbmY+Ci0gICAJPC9qYXI+Ci0gICAJCi0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX194YS5yYXIiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIgaW5jbHVkZXM9ImpkYmMuamFyIi8+Ci0gICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLXhhLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CQorICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fY3AucmFyIiB1cGRhdGU9InllcyI+CisgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KKyAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgorICAgICAgICAgICA8L21ldGFpbmY+CisgICAgICAgPC9qYXI+CisKKyAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX3hhLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KKyAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEteGEueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4KICAgICAgICAgPC9jb3B5PgotICAgCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19feGEucmFyIiB1cGRhdGU9InllcyI+Ci0gICAJCTxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KLSAgIAkJCTxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgotICAgCQk8L21ldGFpbmY+Ci0gICAJPC9qYXI+Ci0gICAJCi0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kbS5yYXIiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIgaW5jbHVkZXM9ImpkYmMuamFyIi8+Ci0gICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLWRtLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CQorICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19feGEucmFyIiB1cGRhdGU9InllcyI+CisgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KKyAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgorICAgICAgICAgICA8L21ldGFpbmY+CisgICAgICAgPC9qYXI+CisKKyAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RtLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KKyAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEtZG0ueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4KICAgICAgICAgPC9jb3B5PgotICAgCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZG0ucmFyIiB1cGRhdGU9InllcyI+Ci0gICAJCTxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KLSAgIAkJCTxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgotICAgCQk8L21ldGFpbmY+Ci0gICAJPC9qYXI+Ci0gICAJCi0gICAJPGphciBqYXJmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvX19kcy5yYXIiIGJhc2VkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSIgaW5jbHVkZXM9ImpkYmMuamFyIi8+Ci0gICAgICAgIDxjb3B5IGZpbGU9IiR7Z2pjLmhvbWV9L3NyYy9jb20vc3VuL2dqYy9zcGkvMS40L3JhLWRzLnhtbCIgdG9maWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvcmEueG1sIiBvdmVyd3JpdGU9InllcyI+CQorICAgICAgIDxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZG0ucmFyIiB1cGRhdGU9InllcyI+CisgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KKyAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgorICAgICAgICAgICA8L21ldGFpbmY+CisgICAgICAgPC9qYXI+CisKKyAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RzLnJhciIgYmFzZWRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41IiBpbmNsdWRlcz0iamRiYy5qYXIiLz4KKyAgICAgICAgPGNvcHkgZmlsZT0iJHtnamMuaG9tZX0vc3JjL2NvbS9zdW4vZ2pjL3NwaS8xLjQvcmEtZHMueG1sIiB0b2ZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiIG92ZXJ3cml0ZT0ieWVzIj4KICAgICAgICAgPC9jb3B5PgotICAgCTxqYXIgamFyZmlsZT0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41L19fZHMucmFyIiB1cGRhdGU9InllcyI+Ci0gICAJCTxtZXRhaW5mIGRpcj0iJHtnamMuaG9tZX0vZGlzdC9zcGkvMS41Ij4KLSAgIAkJCTxpbmNsdWRlIG5hbWU9InJhLnhtbCIvPgotICAgCQk8L21ldGFpbmY+Ci0gICAJPC9qYXI+Ci0gICAJCi0gICAJPGRlbGV0ZSBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3QvY29tIi8+Ci0gICAJPGRlbGV0ZSBmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvamRiYy5qYXIiLz4KLSAgIAk8ZGVsZXRlIGZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiLz4KLSAgIAkKKyAgICAgICA8amFyIGphcmZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9fX2RzLnJhciIgdXBkYXRlPSJ5ZXMiPgorICAgICAgICAgICA8bWV0YWluZiBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNSI+CisgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJyYS54bWwiLz4KKyAgICAgICAgICAgPC9tZXRhaW5mPgorICAgICAgIDwvamFyPgorCisgICAgICAgPGRlbGV0ZSBkaXI9IiR7Z2pjLmhvbWV9L2Rpc3QvY29tIi8+CisgICAgICAgPGRlbGV0ZSBmaWxlPSIke2dqYy5ob21lfS9kaXN0L3NwaS8xLjUvamRiYy5qYXIiLz4KKyAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Z2pjLmhvbWV9L2Rpc3Qvc3BpLzEuNS9yYS54bWwiLz4KKwogICA8L3RhcmdldD4KIAogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkMTQiIGRlcGVuZHM9ImNvbXBpbGUxNCwgcGFja2FnZTE0Ii8+CiAgICAgPHRhcmdldCBuYW1lPSJidWlsZDEzIi8+Ci0JPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iYnVpbGQxNCwgYnVpbGQxMyIvPgorICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImJ1aWxkMTQsIGJ1aWxkMTMiLz4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L3JhLWRzLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvMS40L3JhLWRzLnhtbAppbmRleCBkZjQ1Nzc3Li5hODk3ZjA2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpLzEuNC9yYS1kcy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS8xLjQvcmEtZHMueG1sCkBAIC0yMiw2OSArMjIsNjkgQEAKICAgICAgICAgICAgdmVyc2lvbj0iMS41Ij4KIAogICAgIDwhLS0gVGhlcmUgY2FuIGJlIGFueSBudW1iZXIgb2YgImRlc2NyaXB0aW9uIiBlbGVtZW50cyBpbmNsdWRpbmcgMCAtLT4KLSAgICA8IS0tIFRoaXMgZmllbGQgY2FuIGJlIG9wdGlvbmFsbHkgdXNlZCBieSB0aGUgZHJpdmVyIHZlbmRvciB0byBwcm92aWRlIGEgCisgICAgPCEtLSBUaGlzIGZpZWxkIGNhbiBiZSBvcHRpb25hbGx5IHVzZWQgYnkgdGhlIGRyaXZlciB2ZW5kb3IgdG8gcHJvdmlkZSBhCiAgICAgICAgICBkZXNjcmlwdGlvbiBmb3IgdGhlIHJlc291cmNlIGFkYXB0ZXIuCiAgICAgLS0+CiAgICAgPGRlc2NyaXB0aW9uPlJlc291cmNlIGFkYXB0ZXIgd3JhcHBpbmcgRGF0YXNvdXJjZSBpbXBsZW1lbnRhdGlvbiBvZiBkcml2ZXI8L2Rlc2NyaXB0aW9uPgotICAgIAorCiAgICAgPCEtLSBUaGVyZSBjYW4gYmUgYW55IG51bWJlciBvZiAiZGlzcGxheS1uYW1lIiBlbGVtZW50cyBpbmNsdWRpbmcgMCAtLT4KLSAgICA8IS0tIFRoZSBmaWVsZCBjYW4gYmUgb3B0aW9uYWxseSB1c2VkIGJ5IHRoZSBkcml2ZXIgdmVuZG9yIHRvIHByb3ZpZGUgYSBuYW1lIHRoYXQgCisgICAgPCEtLSBUaGUgZmllbGQgY2FuIGJlIG9wdGlvbmFsbHkgdXNlZCBieSB0aGUgZHJpdmVyIHZlbmRvciB0byBwcm92aWRlIGEgbmFtZSB0aGF0CiAgICAgICAgICBpcyBpbnRlbmRlZCB0byBiZSBkaXNwbGF5ZWQgYnkgdG9vbHMuCiAgICAgLS0+CiAgICAgPGRpc3BsYXktbmFtZT5EYXRhU291cmNlIFJlc291cmNlIEFkYXB0ZXI8L2Rpc3BsYXktbmFtZT4KLSAgICAKKwogICAgIDwhLS0gVGhlcmUgY2FuIGJlIGFueSBudW1iZXIgb2YgImljb24iIGVsZW1lbnRzIGluY2x1ZGluZyAwIC0tPgogICAgIDwhLS0gVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlLgogICAgICAgICA8aWNvbj4KLSAgICAgICAgICAgIFRoaXMgInNtYWxsLWljb24iIGVsZW1lbnQgY2FuIG9jY3VyIGF0bW9zdCBvbmNlLiBUaGlzIHNob3VsZCBzcGVjaWZ5IHRoZSAKLSAgICAgICAgICAgIGFic29sdXRlIG9yIHRoZSByZWxhdGl2ZSBwYXRoIG5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcgYSBzbWFsbCAoMTYgeCAxNikgCisgICAgICAgICAgICBUaGlzICJzbWFsbC1pY29uIiBlbGVtZW50IGNhbiBvY2N1ciBhdG1vc3Qgb25jZS4gVGhpcyBzaG91bGQgc3BlY2lmeSB0aGUKKyAgICAgICAgICAgIGFic29sdXRlIG9yIHRoZSByZWxhdGl2ZSBwYXRoIG5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcgYSBzbWFsbCAoMTYgeCAxNikKICAgICAgICAgICAgIGljb24gLSBKUEVHIG9yIEdJRiBpbWFnZS4gVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlLgogICAgICAgICAgICAgPHNtYWxsLWljb24+c21hbGxpY29uLmpwZzwvc21hbGwtaWNvbj4KLSAgICAgICAgCi0gICAgICAgICAgICBUaGlzICJsYXJnZS1pY29uIiBlbGVtZW50IGNhbiBvY2N1ciBhdG1vc3Qgb25jZS4gVGhpcyBzaG91bGQgc3BlY2lmeSB0aGUgCi0gICAgICAgICAgICBhYnNvbHV0ZSBvciB0aGUgcmVsYXRpdmUgcGF0aCBuYW1lIG9mIGEgZmlsZSBjb250YWluaW5nIGEgc21hbGwgKDMyIHggMzIpIAorCisgICAgICAgICAgICBUaGlzICJsYXJnZS1pY29uIiBlbGVtZW50IGNhbiBvY2N1ciBhdG1vc3Qgb25jZS4gVGhpcyBzaG91bGQgc3BlY2lmeSB0aGUKKyAgICAgICAgICAgIGFic29sdXRlIG9yIHRoZSByZWxhdGl2ZSBwYXRoIG5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcgYSBzbWFsbCAoMzIgeCAzMikKICAgICAgICAgICAgIGljb24gLSBKUEVHIG9yIEdJRiBpbWFnZS4gVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlLgotICAgICAgICAgICAgPGxhcmdlLWljb24+bGFyZ2VpY29uLmpwZzwvbGFyZ2UtaWNvbj4gICAKKyAgICAgICAgICAgIDxsYXJnZS1pY29uPmxhcmdlaWNvbi5qcGc8L2xhcmdlLWljb24+CiAgICAgICAgIDwvaWNvbj4KICAgICAtLT4KICAgICA8aWNvbj4KICAgICAgICAgPHNtYWxsLWljb24+PC9zbWFsbC1pY29uPgotICAgICAgICA8bGFyZ2UtaWNvbj48L2xhcmdlLWljb24+ICAgCisgICAgICAgIDxsYXJnZS1pY29uPjwvbGFyZ2UtaWNvbj4KICAgICA8L2ljb24+Ci0gICAgCisKICAgICA8IS0tIFRoZSAidmVuZG9yLW5hbWUiIGVsZW1lbnQgc2hvdWxkIG9jY3VyIGV4YWN0bHkgb25jZS4gLS0+CiAgICAgPCEtLSBUaGlzIHNob3VsZCBzcGVjaWZ5IHRoZSBuYW1lIG9mIHRoZSBkcml2ZXIgdmVuZG9yLiBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUuCiAgICAgICAgIDx2ZW5kb3ItbmFtZT5YWVogSU5DLjwvdmVuZG9yLW5hbWU+CiAgICAgLS0+CiAgICAgPHZlbmRvci1uYW1lPlN1biBNaWNyb3N5c3RlbXM8L3ZlbmRvci1uYW1lPgotICAgIAorCiAgICAgPCEtLSBUaGUgImVpcy10eXBlIiBlbGVtZW50IHNob3VsZCBvY2N1ciBleGFjdGx5IG9uY2UuIC0tPgotICAgIDwhLS0gVGhpcyBzaG91bGQgc3BlY2lmeSB0aGUgZGF0YWJhc2UsIGZvciBleGFtcGxlIHRoZSBwcm9kdWN0IG5hbWUgb2YgCisgICAgPCEtLSBUaGlzIHNob3VsZCBzcGVjaWZ5IHRoZSBkYXRhYmFzZSwgZm9yIGV4YW1wbGUgdGhlIHByb2R1Y3QgbmFtZSBvZgogICAgICAgICAgdGhlIGRhdGFiYXNlIGluZGVwZW5kZW50IG9mIGFueSB2ZXJzaW9uIGluZm9ybWF0aW9uLiBUaGUgZm9sbG93aW5nCiAgICAgICAgICBpcyBhbiBleGFtcGxlLgogICAgICAgICA8ZWlzLXR5cGU+WFlaPC9laXMtdHlwZT4KICAgICAtLT4KICAgICA8ZWlzLXR5cGU+RGF0YWJhc2U8L2Vpcy10eXBlPgotICAgIAorCiAgICAgPCEtLSBUaGUgInJlc291cmNlYWRhcHRlci12ZXJzaW9uIiBlbGVtZW50IHNob3VsZCBvY2N1ciBleGFjdGx5IG9uY2UuIC0tPgotICAgIDwhLS0gVGhpcyBzcGVjaWZpZXMgYSBzdHJpbmcgYmFzZWQgdmVyc2lvbiBvZiB0aGUgcmVzb3VyY2UgYWRhcHRlciBmcm9tIAorICAgIDwhLS0gVGhpcyBzcGVjaWZpZXMgYSBzdHJpbmcgYmFzZWQgdmVyc2lvbiBvZiB0aGUgcmVzb3VyY2UgYWRhcHRlciBmcm9tCiAgICAgICAgICB0aGUgZHJpdmVyIHZlbmRvci4gVGhlIGRlZmF1bHQgaXMgYmVpbmcgc2V0IGFzIDEuMC4gVGhlIGRyaXZlcgogICAgICAgICAgdmVuZG9yIGNhbiBjaGFuZ2UgaXQgYXMgcmVxdWlyZWQuCiAgICAgLS0+CiAgICAgPHJlc291cmNlYWRhcHRlci12ZXJzaW9uPjEuMDwvcmVzb3VyY2VhZGFwdGVyLXZlcnNpb24+Ci0gICAgCisKICAgICA8IS0tIFRoaXMgImxpY2Vuc2UiIGVsZW1lbnQgY2FuIG9jY3VyIGF0bW9zdCBvbmNlIC0tPgogICAgIDwhLS0gVGhpcyBzcGVjaWZpZXMgbGljZW5zaW5nIHJlcXVpcmVtZW50cyBmb3IgdGhlIHJlc291cmNlIGFkYXB0ZXIgbW9kdWxlLgogICAgICAgICAgVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlLgogICAgICAgICA8bGljZW5zZT4KICAgICAgICAgICAgIFRoZXJlIGNhbiBiZSBhbnkgbnVtYmVyIG9mICJkZXNjcmlwdGlvbiIgZWxlbWVudHMgaW5jbHVkaW5nIDAuCiAgICAgICAgICAgICA8ZGVzY3JpcHRpb24+Ci0gICAgICAgICAgICAgICAgVGhpcyBmaWVsZCBjYW4gYmUgb3B0aW9uYWxseSB1c2VkIGJ5IHRoZSBkcml2ZXIgdmVuZG9yIHRvIAotICAgICAgICAgICAgICAgIHByb3ZpZGUgYSBkZXNjcmlwdGlvbiBmb3IgdGhlIGxpY2Vuc2luZyByZXF1aXJlbWVudHMgb2YgdGhlIAotICAgICAgICAgICAgICAgIHJlc291cmNlIGFkYXB0ZXIgbGlrZSBkdXJhdGlvbiBvZiBsaWNlbnNlLCBudW1iZXJvZiBjb25uZWN0aW9uIAorICAgICAgICAgICAgICAgIFRoaXMgZmllbGQgY2FuIGJlIG9wdGlvbmFsbHkgdXNlZCBieSB0aGUgZHJpdmVyIHZlbmRvciB0bworICAgICAgICAgICAgICAgIHByb3ZpZGUgYSBkZXNjcmlwdGlvbiBmb3IgdGhlIGxpY2Vuc2luZyByZXF1aXJlbWVudHMgb2YgdGhlCisgICAgICAgICAgICAgICAgcmVzb3VyY2UgYWRhcHRlciBsaWtlIGR1cmF0aW9uIG9mIGxpY2Vuc2UsIG51bWJlcm9mIGNvbm5lY3Rpb24KICAgICAgICAgICAgICAgICByZXN0cmljdGlvbnMuCiAgICAgICAgICAgICA8L2Rlc2NyaXB0aW9uPgotICAgICAgICAKKwogICAgICAgICAgICAgVGhpcyBzcGVjaWZpZXMgd2hldGhlciBhIGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gZGVwbG95IGFuZCB1c2UgdGhlIHJlc291cmNlIGFkYXB0ZXIuCiAgICAgICAgICAgICBEZWZhdWx0IGlzIGZhbHNlLgogICAgICAgICAgICAgPGxpY2Vuc2UtcmVxdWlyZWQ+ZmFsc2U8L2xpY2Vuc2UtcmVxdWlyZWQ+CkBAIC05MywyNCArOTMsMjQgQEAKICAgICA8bGljZW5zZT4KICAgICAgICAgPGxpY2Vuc2UtcmVxdWlyZWQ+ZmFsc2U8L2xpY2Vuc2UtcmVxdWlyZWQ+CiAgICAgPC9saWNlbnNlPgotICAgIAorCiAgICAgPHJlc291cmNlYWRhcHRlcj4KLSAgICAgICAgCi0gICAgICAgIDwhLS0gCi0gICAgICAgICAgICBUaGUgImNvbmZpZy1wcm9wZXJ0eSIgZWxlbWVudHMgY2FuIGhhdmUgemVybyBvciBtb3JlICJkZXNjcmlwdGlvbiIgCisKKyAgICAgICAgPCEtLQorICAgICAgICAgICAgVGhlICJjb25maWctcHJvcGVydHkiIGVsZW1lbnRzIGNhbiBoYXZlIHplcm8gb3IgbW9yZSAiZGVzY3JpcHRpb24iCiAgICAgICAgICAgICBlbGVtZW50cy4gVGhlICJkZXNjcmlwdGlvbiIgZWxlbWVudHMgYXJlIG5vdCBiZWluZyBpbmNsdWRlZAogICAgICAgICAgICAgaW4gdGhlICJjb25maWctcHJvcGVydHkiIGVsZW1lbnRzIGJlbG93LiBUaGUgZHJpdmVyIHZlbmRvciBjYW4KICAgICAgICAgICAgIGFkZCB0aGVtIGFzIHJlcXVpcmVkLgogICAgICAgICAtLT4KLSAgICAgICAgCisKICAgICAgICAgPHJlc291cmNlYWRhcHRlci1jbGFzcz5jb20uc3VuLmpkYmNyYS5zcGkuUmVzb3VyY2VBZGFwdGVyPC9yZXNvdXJjZWFkYXB0ZXItY2xhc3M+Ci0gICAgICAgIAorCiAgICAgICAgIDxvdXRib3VuZC1yZXNvdXJjZWFkYXB0ZXI+Ci0gICAgICAgIAorCiAgICAgICAgICAgICA8Y29ubmVjdGlvbi1kZWZpbml0aW9uPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPG1hbmFnZWRjb25uZWN0aW9uZmFjdG9yeS1jbGFzcz5jb20uc3VuLmpkYmNyYS5zcGkuRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L21hbmFnZWRjb25uZWN0aW9uZmFjdG9yeS1jbGFzcz4KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIDwhLS0gVGhlcmUgY2FuIGJlIGFueSBudW1iZXIgb2YgdGhlc2UgZWxlbWVudHMgaW5jbHVkaW5nIDAgLS0+CiAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlNlcnZlck5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgpAQCAtMTI4LDcgKzEyOCw3IEBACiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+dGVzdGRiPC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CiAKLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VXNlcjwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT5kYnVzZXI8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KQEAgLTEzOSwxMiArMTM5LDEyIEBACiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+ZGJ1c2VyPC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CiAKLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+UGFzc3dvcmQ8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+ZGJwYXNzd29yZDwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgogICAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+ICAgIAorICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5VUkw8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+amRiYzpkZXJieTovL2xvY2FsaG9zdDoxNTI3L3Rlc3RkYjtjcmVhdGU9dHJ1ZTwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgpAQCAtMTU0LDcgKzE1NCw3IEBACiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4tLT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+RGVzY3JpcHRpb248L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+T3JhY2xlIHRoaW4gZHJpdmVyIERhdGFzb3VyY2U8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KQEAgLTE2NSwxNyArMTY1LDE3IEBACiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+Um9sZU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4gICAgCisgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkxvZ2luVGltZU91dDwvY29uZmlnLXByb3BlcnR5LW5hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT4wPC9jb25maWctcHJvcGVydHktdmFsdWU+CiAgICAgICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4gICAgCisgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkRyaXZlclByb3BlcnRpZXM8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CiAgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CkBAIC0xODYsNyArMTg2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPiM8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KICAgICAgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PiAgICAKKyAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+Q2xhc3NOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPm9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnREYXRhU291cmNlNDA8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KQEAgLTE5OCw4MiArMTk4LDgyIEBACiAgICAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgogCiA8IS0tCi0gICAgICAJCTxjb25maWctcHJvcGVydHk+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktbmFtZT5Db25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkPC9jb25maWctcHJvcGVydHktbmFtZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPmZhbHNlPC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0gICAgICAgIAk8L2NvbmZpZy1wcm9wZXJ0eT4KLSAgICAgICAgCTxjb25maWctcHJvcGVydHk+ICAgIAotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VmFsaWRhdGlvbk1ldGhvZDwvY29uZmlnLXByb3BlcnR5LW5hbWU+Ci0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLSAgICAgICAgCTwvY29uZmlnLXByb3BlcnR5PgotICAgICAgICAJPGNvbmZpZy1wcm9wZXJ0eT4gICAgCi0gICAgICAgICAgICAJICAgIDxjb25maWctcHJvcGVydHktbmFtZT5WYWxpZGF0aW9uVGFibGVOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotICAgICAgICAJPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgIAk8Y29uZmlnLXByb3BlcnR5PiAgICAKLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlRyYW5zYWN0aW9uSXNvbGF0aW9uPC9jb25maWctcHJvcGVydHktbmFtZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotICAgICAgICAJPC9jb25maWctcHJvcGVydHk+Ci0gICAgICAgIAk8Y29uZmlnLXByb3BlcnR5PiAgICAKLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkd1YXJhbnRlZUlzb2xhdGlvbkxldmVsPC9jb25maWctcHJvcGVydHktbmFtZT4KLSAgICAgICAgICAgIAkgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotICAgICAgICAgICAgCSAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotICAgICAgICAJPC9jb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5Db25uZWN0aW9uVmFsaWRhdGlvblJlcXVpcmVkPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPmZhbHNlPC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgIDxjb25maWctcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5WYWxpZGF0aW9uTWV0aG9kPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+VmFsaWRhdGlvblRhYmxlTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlRyYW5zYWN0aW9uSXNvbGF0aW9uPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CisgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+R3VhcmFudGVlSXNvbGF0aW9uTGV2ZWw8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgorICAgICAgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KIC0tPgogCiAgICAgICAgICAgICAgICAgPGNvbm5lY3Rpb25mYWN0b3J5LWludGVyZmFjZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvY29ubmVjdGlvbmZhY3RvcnktaW50ZXJmYWNlPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPGNvbm5lY3Rpb25mYWN0b3J5LWltcGwtY2xhc3M+Y29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2U8L2Nvbm5lY3Rpb25mYWN0b3J5LWltcGwtY2xhc3M+Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICA8Y29ubmVjdGlvbi1pbnRlcmZhY2U+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29ubmVjdGlvbi1pbnRlcmZhY2U+Ci0gICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPGNvbm5lY3Rpb24taW1wbC1jbGFzcz5jb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbkhvbGRlcjwvY29ubmVjdGlvbi1pbXBsLWNsYXNzPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICA8L2Nvbm5lY3Rpb24tZGVmaW5pdGlvbj4KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICA8dHJhbnNhY3Rpb24tc3VwcG9ydD5Mb2NhbFRyYW5zYWN0aW9uPC90cmFuc2FjdGlvbi1zdXBwb3J0PgotICAgICAgICAgICAgCisKICAgICAgICAgICAgIDxhdXRoZW50aWNhdGlvbi1tZWNoYW5pc20+CiAgICAgICAgICAgICAgICAgPCEtLSBUaGVyZSBjYW4gYmUgYW55IG51bWJlciBvZiAiZGVzY3JpcHRpb24iIGVsZW1lbnRzIGluY2x1ZGluZyAwIC0tPgogICAgICAgICAgICAgICAgIDwhLS0gTm90IGluY2x1ZGluZyB0aGUgImRlc2NyaXB0aW9uIiBlbGVtZW50IC0tPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPGF1dGhlbnRpY2F0aW9uLW1lY2hhbmlzbS10eXBlPkJhc2ljUGFzc3dvcmQ8L2F1dGhlbnRpY2F0aW9uLW1lY2hhbmlzbS10eXBlPgotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgPGNyZWRlbnRpYWwtaW50ZXJmYWNlPmpha2FydGEucmVzb3VyY2Uuc3BpLnNlY3VyaXR5LlBhc3N3b3JkQ3JlZGVudGlhbDwvY3JlZGVudGlhbC1pbnRlcmZhY2U+CiAgICAgICAgICAgICA8L2F1dGhlbnRpY2F0aW9uLW1lY2hhbmlzbT4KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICA8cmVhdXRoZW50aWNhdGlvbi1zdXBwb3J0PmZhbHNlPC9yZWF1dGhlbnRpY2F0aW9uLXN1cHBvcnQ+Ci0gICAgICAgICAgICAKKwogICAgICAgICA8L291dGJvdW5kLXJlc291cmNlYWRhcHRlcj4KLQk8YWRtaW5vYmplY3Q+Ci0JICAgICAgIDxhZG1pbm9iamVjdC1pbnRlcmZhY2U+Y29tLnN1bi5qZGJjcmEuc3BpLkpkYmNTZXR1cEFkbWluPC9hZG1pbm9iamVjdC1pbnRlcmZhY2U+Ci0JICAgICAgIDxhZG1pbm9iamVjdC1jbGFzcz5jb20uc3VuLmpkYmNyYS5zcGkuSmRiY1NldHVwQWRtaW5JbXBsPC9hZG1pbm9iamVjdC1jbGFzcz4KLQkgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5UYWJsZU5hbWU8L2NvbmZpZy1wcm9wZXJ0eS1uYW1lPgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT48L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLQkgICAgICAgPC9jb25maWctcHJvcGVydHk+Ci0JICAgICAgIDxjb25maWctcHJvcGVydHk+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LW5hbWU+U2NoZW1hTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotCSAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLQkgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5KbmRpTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgotCSAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KLQkgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KLQkgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5Ob09mUm93czwvY29uZmlnLXByb3BlcnR5LW5hbWU+Ci0JICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLkludGVnZXI8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotCSAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT4wPC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0JICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgorICAgIDxhZG1pbm9iamVjdD4KKyAgICAgICAgICAgPGFkbWlub2JqZWN0LWludGVyZmFjZT5jb20uc3VuLmpkYmNyYS5zcGkuSmRiY1NldHVwQWRtaW48L2FkbWlub2JqZWN0LWludGVyZmFjZT4KKyAgICAgICAgICAgPGFkbWlub2JqZWN0LWNsYXNzPmNvbS5zdW4uamRiY3JhLnNwaS5KZGJjU2V0dXBBZG1pbkltcGw8L2FkbWlub2JqZWN0LWNsYXNzPgorICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPlRhYmxlTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjwvY29uZmlnLXByb3BlcnR5LXZhbHVlPgorICAgICAgICAgICA8L2NvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktbmFtZT5TY2hlbWFOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPkpuZGlOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+PC9jb25maWctcHJvcGVydHktdmFsdWU+CisgICAgICAgICAgIDwvY29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5PgorICAgICAgICAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS1uYW1lPk5vT2ZSb3dzPC9jb25maWctcHJvcGVydHktbmFtZT4KKyAgICAgICAgICAgICAgIDxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuSW50ZWdlcjwvY29uZmlnLXByb3BlcnR5LXR5cGU+CisgICAgICAgICAgICAgICA8Y29uZmlnLXByb3BlcnR5LXZhbHVlPjA8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KKyAgICAgICAgICAgPC9jb25maWctcHJvcGVydHk+CiAgICAgICAgIDwvYWRtaW5vYmplY3Q+Ci0gICAgICAgIAorCiAgICAgPC9yZXNvdXJjZWFkYXB0ZXI+Ci0gICAgCisKIDwvY29ubmVjdG9yPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uTWFuYWdlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uTWFuYWdlci5qYXZhCmluZGV4IGIyMTljZDIuLjEyNDgwOWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvbk1hbmFnZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25NYW5hZ2VyLmphdmEKQEAgLTI0LDI2ICsyNCwyNiBAQAogLyoqCiAgKiBDb25uZWN0aW9uTWFuYWdlciBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzMxCi0gKiBAYXV0aG9yCUJpbm9kIFAuRworICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8zMQorICogQGF1dGhvciAgICBCaW5vZCBQLkcKICAqLwotcHVibGljIGNsYXNzIENvbm5lY3Rpb25NYW5hZ2VyIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvbk1hbmFnZXJ7IAorcHVibGljIGNsYXNzIENvbm5lY3Rpb25NYW5hZ2VyIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvbk1hbmFnZXJ7CiAKICAgICAvKioKICAgICAgKiBSZXR1cm5zIGEgPGNvZGU+Q29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdCB0byB0aGUgPGNvZGU+Q29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+CiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWNmCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0LgotICAgICAqIEBwYXJhbQlpbmZvCTxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gb2JqZWN0LgotICAgICAqIEByZXR1cm4JQSA8Y29kZT5Db25uZWN0aW9uPC9jb2RlPiBPYmplY3QuCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbiBJbiBjYXNlIG9mIGFuIGVycm9yIGluIGdldHRpbmcgdGhlIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+LgorICAgICAqIEBwYXJhbSAgICBtY2YgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QuCisgICAgICogQHBhcmFtICAgIGluZm8gICAgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBvYmplY3QuCisgICAgICogQHJldHVybiAgICBBIDxjb2RlPkNvbm5lY3Rpb248L2NvZGU+IE9iamVjdC4KKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uIEluIGNhc2Ugb2YgYW4gZXJyb3IgaW4gZ2V0dGluZyB0aGUgPGNvZGU+Q29ubmVjdGlvbjwvY29kZT4uCiAgICAgICovCiAgICAgcHVibGljIE9iamVjdCBhbGxvY2F0ZUNvbm5lY3Rpb24oTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG1jZiwKLSAgICAJCQkJICAgICBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW5mbykgCi0gICAgCQkJCSAgICAgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKLQlNYW5hZ2VkQ29ubmVjdGlvbiBtYyA9IG1jZi5jcmVhdGVNYW5hZ2VkQ29ubmVjdGlvbihudWxsLCBpbmZvKTsKLQlyZXR1cm4gbWMuZ2V0Q29ubmVjdGlvbihudWxsLCBpbmZvKTsgICAgCQkJCSAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGluZm8pCisgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKKyAgICBNYW5hZ2VkQ29ubmVjdGlvbiBtYyA9IG1jZi5jcmVhdGVNYW5hZ2VkQ29ubmVjdGlvbihudWxsLCBpbmZvKTsKKyAgICByZXR1cm4gbWMuZ2V0Q29ubmVjdGlvbihudWxsLCBpbmZvKTsKICAgICB9Ci0gICAgCisKICAgICAvKgogICAgICAqIFRoaXMgY2xhc3MgY291bGQgZWZmZWN0aXZlbHkgaW1wbGVtZW50IENvbm5lY3Rpb24gcG9vbGluZyBhbHNvLgogICAgICAqIENvdWxkIGJlIGRvbmUgZm9yIEZDUy4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvblJlcXVlc3RJbmZvLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0Nvbm5lY3Rpb25SZXF1ZXN0SW5mby5qYXZhCmluZGV4IDM5Yzc4NzYuLmM0NzdmYzIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvQ29ubmVjdGlvblJlcXVlc3RJbmZvLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Db25uZWN0aW9uUmVxdWVzdEluZm8uamF2YQpAQCAtMTksMTAgKzE5LDEwIEBACiAvKioKICAqIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzMxCi0gKiBAYXV0aG9yCUJpbm9kIFAuRworICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8zMQorICogQGF1dGhvciAgICBCaW5vZCBQLkcKICAqLwotcHVibGljIGNsYXNzIENvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mb3sgCitwdWJsaWMgY2xhc3MgQ29ubmVjdGlvblJlcXVlc3RJbmZvIGltcGxlbWVudHMgamFrYXJ0YS5yZXNvdXJjZS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZvewogCiAgICAgcHJpdmF0ZSBTdHJpbmcgdXNlcjsKICAgICBwcml2YXRlIFN0cmluZyBwYXNzd29yZDsKQEAgLTMwLDggKzMwLDggQEAKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gb2JqZWN0CiAgICAgICoKLSAgICAgKiBAcGFyYW0JdXNlcglVc2VyIE5hbWUuCi0gICAgICogQHBhcmFtCXBhc3N3b3JkCVBhc3N3b3JkCisgICAgICogQHBhcmFtICAgIHVzZXIgICAgVXNlciBOYW1lLgorICAgICAqIEBwYXJhbSAgICBwYXNzd29yZCAgICBQYXNzd29yZAogICAgICAqLwogICAgIHB1YmxpYyBDb25uZWN0aW9uUmVxdWVzdEluZm8oU3RyaW5nIHVzZXIsIFN0cmluZyBwYXNzd29yZCkgewogICAgICAgICB0aGlzLnVzZXIgPSB1c2VyOwpAQCAtNDEsNyArNDEsNyBAQAogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgdXNlciBuYW1lIG9mIHRoZSBDb25uZWN0aW9uUmVxdWVzdEluZm8uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVVzZXIgbmFtZSBvZiBDb25uZWN0aW9uUmVxdWVzdEluZm8uCisgICAgICogQHJldHVybiAgICBVc2VyIG5hbWUgb2YgQ29ubmVjdGlvblJlcXVlc3RJbmZvLgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VXNlcigpIHsKICAgICAgICAgcmV0dXJuIHVzZXI7CkBAIC01MCw3ICs1MCw3IEBACiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBwYXNzd29yZCBvZiB0aGUgQ29ubmVjdGlvblJlcXVlc3RJbmZvLgogICAgICAqCi0gICAgICogQHJldHVybglQYXNzd29yZCBvZiBDb25uZWN0aW9uUmVxdWVzdEluZm8uCisgICAgICogQHJldHVybiAgICBQYXNzd29yZCBvZiBDb25uZWN0aW9uUmVxdWVzdEluZm8uCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRQYXNzd29yZCgpIHsKICAgICAgICAgcmV0dXJuIHBhc3N3b3JkOwpAQCAtNTksNyArNTksNyBAQAogICAgIC8qKgogICAgICAqIFZlcmlmeSB3aGV0aGVyIHR3byBDb25uZWN0aW9uUmVxdWVzdEluZm9zIGFyZSBlcXVhbC4KICAgICAgKgotICAgICAqIEByZXR1cm4JVHJ1ZSwgaWYgdGhleSBhcmUgZXF1YWwgYW5kIGZhbHNlIG90aGVyd2lzZS4KKyAgICAgKiBAcmV0dXJuICAgIFRydWUsIGlmIHRoZXkgYXJlIGVxdWFsIGFuZCBmYWxzZSBvdGhlcndpc2UuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmopIHsKICAgICAgICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gZmFsc2U7CkBAIC03NSwxOCArNzUsMTggQEAKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIGhhc2hjb2RlIG9mIHRoZSBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWhhc2hDb2RlLgorICAgICAqIEByZXR1cm4gICAgaGFzaENvZGUuCiAgICAgICovCiAgICAgcHVibGljIGludCBoYXNoQ29kZSgpIHsKICAgICAgICAgU3RyaW5nIHJlc3VsdCA9ICIiICsgdXNlciArIHBhc3N3b3JkOwogICAgICAgICByZXR1cm4gcmVzdWx0Lmhhc2hDb2RlKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29tcGFyZXMgdHdvIG9iamVjdHMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbzEJRmlyc3Qgb2JqZWN0LgotICAgICAqIEBwYXJhbQlvMglTZWNvbmQgb2JqZWN0LgorICAgICAqIEBwYXJhbSAgICBvMSAgICBGaXJzdCBvYmplY3QuCisgICAgICogQHBhcmFtICAgIG8yICAgIFNlY29uZCBvYmplY3QuCiAgICAgICovCiAgICAgcHJpdmF0ZSBib29sZWFuIGlzRXF1YWwoT2JqZWN0IG8xLCBPYmplY3QgbzIpIHsKICAgICAgICAgaWYgKG8xID09IG51bGwpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkuamF2YQppbmRleCBiNjdkMjNhLi42NTM3NTU5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeS5qYXZhCkBAIC0zMSwzNiArMzEsMzYgQEAKIC8qKgogICogRGF0YSBTb3VyY2UgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzMwCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8zMAorICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogCiBwdWJsaWMgY2xhc3MgRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgZXh0ZW5kcyBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgewotICAgCisKICAgICBwcml2YXRlIHRyYW5zaWVudCBqYXZheC5zcWwuRGF0YVNvdXJjZSBkYXRhU291cmNlT2JqOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgTG9nZ2VyIF9sb2dnZXI7CiAgICAgc3RhdGljIHsKICAgICAgICAgX2xvZ2dlciA9IExvZ2dlci5nZXRBbm9ueW1vdXNMb2dnZXIoKTsKICAgICB9CiAgICAgcHJpdmF0ZSBib29sZWFuIGRlYnVnID0gZmFsc2U7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgbmV3IHBoeXNpY2FsIGNvbm5lY3Rpb24gdG8gdGhlIHVuZGVybHlpbmcgRUlTIHJlc291cmNlCiAgICAgICogbWFuYWdlci4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0Jc3ViamVjdAk8Y29kZT5TdWJqZWN0PC9jb2RlPiBpbnN0YW5jZSBwYXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHNlcnZlcgotICAgICAqIEBwYXJhbQljeFJlcXVlc3RJbmZvCTxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4gd2hpY2ggbWF5IGJlIGNyZWF0ZWQKLSAgICAgKiAgICAgICAJICAgICAgICAgICAgIAlhcyBhIHJlc3VsdCBvZiB0aGUgaW52b2NhdGlvbiA8Y29kZT5nZXRDb25uZWN0aW9uKHVzZXIsIHBhc3N3b3JkKTwvY29kZT4KLSAgICAgKiAgICAgICAJICAgICAgICAgICAgIAlvbiB0aGUgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0Ci0gICAgICogQHJldHVybgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGNyZWF0ZWQKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGluc3RhbnRpYXRpbmcgdGhlCi0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAk8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QgdXNlZCBmb3IgdGhlCi0gICAgICogICAgICAgCQkJCWNyZWF0aW9uIG9mIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0Ci0gICAgICogQHRocm93cwlTZWN1cml0eUV4Y2VwdGlvbglpZiB0aGVyZSBpbm8gPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QKLSAgICAgKiAgICAgICAgCSAgICAgICAgICAgICAgICAgCXNhdGlzZnlpbmcgdGhpcyByZXF1ZXN0IAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VBbGxvY2F0aW9uRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlIAotICAgICAqCQkJCQkJcGh5c2ljYWwgY29ubmVjdGlvbgorICAgICAqCisgICAgICogQHBhcmFtICAgIHN1YmplY3QgICAgPGNvZGU+U3ViamVjdDwvY29kZT4gaW5zdGFuY2UgcGFzc2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKKyAgICAgKiBAcGFyYW0gICAgY3hSZXF1ZXN0SW5mbyAgICA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IHdoaWNoIG1heSBiZSBjcmVhdGVkCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgYSByZXN1bHQgb2YgdGhlIGludm9jYXRpb24gPGNvZGU+Z2V0Q29ubmVjdGlvbih1c2VyLCBwYXNzd29yZCk8L2NvZGU+CisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gdGhlIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+IG9iamVjdAorICAgICAqIEByZXR1cm4gICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBjcmVhdGVkCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBpbnN0YW50aWF0aW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+RGF0YVNvdXJjZTwvY29kZT4gb2JqZWN0IHVzZWQgZm9yIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGlvbiBvZiB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdAorICAgICAqIEB0aHJvd3MgICAgU2VjdXJpdHlFeGNlcHRpb24gICAgaWYgdGhlcmUgaW5vIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gb2JqZWN0CisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXRpc2Z5aW5nIHRoaXMgcmVxdWVzdAorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VBbGxvY2F0aW9uRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICBwaHlzaWNhbCBjb25uZWN0aW9uCiAgICAgICovCiAgICAgcHVibGljIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uIGNyZWF0ZU1hbmFnZWRDb25uZWN0aW9uKGphdmF4LnNlY3VyaXR5LmF1dGguU3ViamVjdCBzdWJqZWN0LAogICAgICAgICBDb25uZWN0aW9uUmVxdWVzdEluZm8gY3hSZXF1ZXN0SW5mbykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKQEAgLTY4LDU4ICs2OCw1OCBAQAogICAgICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBjcmVhdGVNYW5hZ2VkQ29ubmVjdGlvbiIpOwogICAgICAgICB9CiAgICAgICAgIFBhc3N3b3JkQ3JlZGVudGlhbCBwYyA9IFNlY3VyaXR5VXRpbHMuZ2V0UGFzc3dvcmRDcmVkZW50aWFsKHRoaXMsIHN1YmplY3QsIGN4UmVxdWVzdEluZm8pOwotICAgICAgICAKKwogICAgICAgICBpZihkYXRhU291cmNlT2JqID09IG51bGwpIHsKICAgICAgICAgICAgIGlmKGRzT2JqQnVpbGRlciA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgZHNPYmpCdWlsZGVyID0gbmV3IERhdGFTb3VyY2VPYmplY3RCdWlsZGVyKHNwZWMpOwogICAgICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBkYXRhU291cmNlT2JqID0gKGphdmF4LnNxbC5EYXRhU291cmNlKSBkc09iakJ1aWxkZXIuY29uc3RydWN0RGF0YVNvdXJjZU9iamVjdCgpOwogICAgICAgICAgICAgfSBjYXRjaChDbGFzc0Nhc3RFeGNlcHRpb24gY2NlKSB7Ci0JICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19jY2UiLCBjY2UpOworICAgICAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfY2NlIiwgY2NlKTsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgamFrYXJ0YS5yZXNvdXJjZS5SZXNvdXJjZUV4Y2VwdGlvbihjY2UuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGRzQ29ubiA9IG51bGw7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7Ci0JICAgIC8qIEZvciB0aGUgY2FzZSB3aGVyZSB0aGUgdXNlci9wYXNzd2Qgb2YgdGhlIGNvbm5lY3Rpb24gcG9vbCBpcwotCSAgICAgKiBlcXVhbCB0byB0aGUgUGFzc3dvcmRDcmVkZW50aWFsIGZvciB0aGUgY29ubmVjdGlvbiByZXF1ZXN0Ci0JICAgICAqIGdldCBhIGNvbm5lY3Rpb24gZnJvbSB0aGlzIHBvb2wgZGlyZWN0bHkuCi0JICAgICAqIGZvciBhbGwgb3RoZXIgY29uZGl0aW9ucyBnbyBjcmVhdGUgYSBuZXcgY29ubmVjdGlvbgotCSAgICAgKi8KLQkgICAgaWYgKCBpc0VxdWFsKCBwYywgZ2V0VXNlcigpLCBnZXRQYXNzd29yZCgpICkgKSB7Ci0JICAgICAgICBkc0Nvbm4gPSBkYXRhU291cmNlT2JqLmdldENvbm5lY3Rpb24oKTsKLQkgICAgfSBlbHNlIHsKLQkgICAgICAgIGRzQ29ubiA9IGRhdGFTb3VyY2VPYmouZ2V0Q29ubmVjdGlvbihwYy5nZXRVc2VyTmFtZSgpLCAKLQkJICAgIG5ldyBTdHJpbmcocGMuZ2V0UGFzc3dvcmQoKSkpOwotCSAgICB9CisgICAgICAgIC8qIEZvciB0aGUgY2FzZSB3aGVyZSB0aGUgdXNlci9wYXNzd2Qgb2YgdGhlIGNvbm5lY3Rpb24gcG9vbCBpcworICAgICAgICAgKiBlcXVhbCB0byB0aGUgUGFzc3dvcmRDcmVkZW50aWFsIGZvciB0aGUgY29ubmVjdGlvbiByZXF1ZXN0CisgICAgICAgICAqIGdldCBhIGNvbm5lY3Rpb24gZnJvbSB0aGlzIHBvb2wgZGlyZWN0bHkuCisgICAgICAgICAqIGZvciBhbGwgb3RoZXIgY29uZGl0aW9ucyBnbyBjcmVhdGUgYSBuZXcgY29ubmVjdGlvbgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKCBpc0VxdWFsKCBwYywgZ2V0VXNlcigpLCBnZXRQYXNzd29yZCgpICkgKSB7CisgICAgICAgICAgICBkc0Nvbm4gPSBkYXRhU291cmNlT2JqLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRzQ29ubiA9IGRhdGFTb3VyY2VPYmouZ2V0Q29ubmVjdGlvbihwYy5nZXRVc2VyTmFtZSgpLAorICAgICAgICAgICAgbmV3IFN0cmluZyhwYy5nZXRQYXNzd29yZCgpKSk7CisgICAgICAgIH0KICAgICAgICAgfSBjYXRjaChqYXZhLnNxbC5TUUxFeGNlcHRpb24gc3FsZSkgewogICAgICAgICAgICAgc3FsZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMuZXhjX2NyZWF0ZV9jb25uIiwgc3FsZSk7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgamFrYXJ0YS5yZXNvdXJjZS5zcGkuUmVzb3VyY2VBbGxvY2F0aW9uRXhjZXB0aW9uKCJUaGUgY29ubmVjdGlvbiBjb3VsZCBub3QgYmUgYWxsb2NhdGVkOiAiICsgCisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLmV4Y19jcmVhdGVfY29ubiIsIHNxbGUpOworICAgICAgICAgICAgdGhyb3cgbmV3IGpha2FydGEucmVzb3VyY2Uuc3BpLlJlc291cmNlQWxsb2NhdGlvbkV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gY291bGQgbm90IGJlIGFsbG9jYXRlZDogIiArCiAgICAgICAgICAgICAgICAgc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKXsKLSAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7ICAgCisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiBtYyA9IG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb24obnVsbCwgZHNDb25uLCBwYywgdGhpcyk7CiAgICAgICAgIC8vR0pDSU5UCiAgICAgICAgIC8qc2V0SXNvbGF0aW9uKG1jKTsKICAgICAgICAgaXNWYWxpZChtYyk7ICovCiAgICAgICAgIHJldHVybiBtYzsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBDaGVjayBpZiB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaXMgZXF1YWwgdG8gCisgICAgICogQ2hlY2sgaWYgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGlzIGVxdWFsIHRvCiAgICAgICogYW5vdGhlciA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LgotICAgICAqIAotICAgICAqIEBwYXJhbQlvdGhlcgk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdCBmb3IgY2hlY2tpbmcgZXF1YWxpdHkgd2l0aAotICAgICAqIEByZXR1cm4JdHJ1ZQlpZiB0aGUgcHJvcGVydHkgc2V0cyBvZiBib3RoIHRoZSAKLSAgICAgKgkJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0cyBhcmUgdGhlIHNhbWUKLSAgICAgKgkJZmFsc2UJb3RoZXJ3aXNlCisgICAgICoKKyAgICAgKiBAcGFyYW0gICAgb3RoZXIgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QgZm9yIGNoZWNraW5nIGVxdWFsaXR5IHdpdGgKKyAgICAgKiBAcmV0dXJuICAgIHRydWUgICAgaWYgdGhlIHByb3BlcnR5IHNldHMgb2YgYm90aCB0aGUKKyAgICAgKiAgICAgICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0cyBhcmUgdGhlIHNhbWUKKyAgICAgKiAgICAgICAgZmFsc2UgICAgb3RoZXJ3aXNlCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvdGhlcikgewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtMTMwLDQwOSArMTMwLDQwOSBAQAogICAgICAgICAgKiBpZiBhbmQgb25seSBpZiB0aGVpciBwcm9wZXJ0aWVzIGFyZSB0aGUgc2FtZS4KICAgICAgICAgICovCiAgICAgICAgIGlmKG90aGVyIGluc3RhbmNlb2YgY29tLnN1bi5qZGJjcmEuc3BpLkRTTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5KSB7Ci0gICAgICAgICAgICBjb20uc3VuLmpkYmNyYS5zcGkuRFNNYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnkgb3RoZXJNQ0YgPSAKKyAgICAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBvdGhlck1DRiA9CiAgICAgICAgICAgICAgICAgKGNvbS5zdW4uamRiY3JhLnNwaS5EU01hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSkgb3RoZXI7CiAgICAgICAgICAgICByZXR1cm4gdGhpcy5zcGVjLmVxdWFscyhvdGhlck1DRi5zcGVjKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgc2VydmVyIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc2VydmVyTmFtZQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXRTZXJ2ZXJOYW1lPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBzZXJ2ZXJOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldFNlcnZlck5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0c2VydmVyTmFtZShTdHJpbmcgc2VydmVyTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5TRVJWRVJOQU1FLCBzZXJ2ZXJOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBzZXJ2ZXIgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4Jc2VydmVyTmFtZQotICAgICAqIEBzZWUJPGNvZGU+c2V0U2VydmVyTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHNlcnZlck5hbWUKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldFNlcnZlck5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRzZXJ2ZXJOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuU0VSVkVSTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgc2VydmVyIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc2VydmVyTmFtZQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXRTZXJ2ZXJOYW1lPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBzZXJ2ZXJOYW1lICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldFNlcnZlck5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0U2VydmVyTmFtZShTdHJpbmcgc2VydmVyTmFtZSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5TRVJWRVJOQU1FLCBzZXJ2ZXJOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBzZXJ2ZXIgbmFtZS4KICAgICAgKgotICAgICAqIEByZXR1cm4Jc2VydmVyTmFtZQotICAgICAqIEBzZWUJPGNvZGU+c2V0U2VydmVyTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHNlcnZlck5hbWUKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldFNlcnZlck5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRTZXJ2ZXJOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuU0VSVkVSTkFNRSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgcG9ydCBudW1iZXIuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcG9ydE51bWJlcgk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXRQb3J0TnVtYmVyPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBwb3J0TnVtYmVyICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldFBvcnROdW1iZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0cG9ydE51bWJlcihTdHJpbmcgcG9ydE51bWJlcikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5QT1JUTlVNQkVSLCBwb3J0TnVtYmVyKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBwb3J0IG51bWJlci4KICAgICAgKgotICAgICAqIEByZXR1cm4JcG9ydE51bWJlcgotICAgICAqIEBzZWUJPGNvZGU+c2V0UG9ydE51bWJlcjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHBvcnROdW1iZXIKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldFBvcnROdW1iZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRwb3J0TnVtYmVyKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUE9SVE5VTUJFUik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgcG9ydCBudW1iZXIuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcG9ydE51bWJlcgk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXRQb3J0TnVtYmVyPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBwb3J0TnVtYmVyICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldFBvcnROdW1iZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0UG9ydE51bWJlcihTdHJpbmcgcG9ydE51bWJlcikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5QT1JUTlVNQkVSLCBwb3J0TnVtYmVyKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBwb3J0IG51bWJlci4KICAgICAgKgotICAgICAqIEByZXR1cm4JcG9ydE51bWJlcgotICAgICAqIEBzZWUJPGNvZGU+c2V0UG9ydE51bWJlcjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHBvcnROdW1iZXIKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldFBvcnROdW1iZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRQb3J0TnVtYmVyKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUE9SVE5VTUJFUik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGF0YWJhc2UgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlkYXRhYmFzZU5hbWUJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGF0YWJhc2VOYW1lPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkYXRhYmFzZU5hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGF0YWJhc2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGRhdGFiYXNlTmFtZShTdHJpbmcgZGF0YWJhc2VOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRBVEFCQVNFTkFNRSwgZGF0YWJhc2VOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkYXRhYmFzZSBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglkYXRhYmFzZU5hbWUKLSAgICAgKiBAc2VlCTxjb2RlPnNldERhdGFiYXNlTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRhdGFiYXNlTmFtZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGF0YWJhc2VOYW1lPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0ZGF0YWJhc2VOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQUJBU0VOQU1FKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkYXRhYmFzZSBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCWRhdGFiYXNlTmFtZQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREYXRhYmFzZU5hbWU8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRhdGFiYXNlTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREYXRhYmFzZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RGF0YWJhc2VOYW1lKFN0cmluZyBkYXRhYmFzZU5hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQUJBU0VOQU1FLCBkYXRhYmFzZU5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRhdGFiYXNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRhdGFiYXNlTmFtZQotICAgICAqIEBzZWUJPGNvZGU+c2V0RGF0YWJhc2VOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZGF0YWJhc2VOYW1lCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREYXRhYmFzZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXREYXRhYmFzZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBQkFTRU5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRhdGEgc291cmNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZHNuIDxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERhdGFTb3VyY2VOYW1lPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkc24gPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0ZGF0YVNvdXJjZU5hbWUoU3RyaW5nIGRzbikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBU09VUkNFTkFNRSwgZHNuKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkYXRhIHNvdXJjZSBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglkc24KLSAgICAgKiBAc2VlCTxjb2RlPnNldERhdGFTb3VyY2VOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZHNuCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREYXRhU291cmNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGRhdGFTb3VyY2VOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQVNPVVJDRU5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRhdGEgc291cmNlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZHNuIDxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldERhdGFTb3VyY2VOYW1lPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkc24gPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGF0YVNvdXJjZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RGF0YVNvdXJjZU5hbWUoU3RyaW5nIGRzbikgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5EQVRBU09VUkNFTkFNRSwgZHNuKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkYXRhIHNvdXJjZSBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglkc24KLSAgICAgKiBAc2VlCTxjb2RlPnNldERhdGFTb3VyY2VOYW1lPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZHNuCisgICAgICogQHNlZSAgICA8Y29kZT5zZXREYXRhU291cmNlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldERhdGFTb3VyY2VOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREFUQVNPVVJDRU5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRlc2NyaXB0aW9uLgogICAgICAqCi0gICAgICogQHBhcmFtCWRlc2MJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGVzY3JpcHRpb248L2NvZGU+CisgICAgICogQHBhcmFtICAgIGRlc2MgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0RGVzY3JpcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0ZGVzY3JpcHRpb24oU3RyaW5nIGRlc2MpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVTQ1JJUFRJT04sIGRlc2MpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGRlc2NyaXB0aW9uLgogICAgICAqCi0gICAgICogQHJldHVybglkZXNjCi0gICAgICogQHNlZQk8Y29kZT5zZXREZXNjcmlwdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGRlc2MKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldERlc2NyaXB0aW9uPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0ZGVzY3JpcHRpb24oKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ERVNDUklQVElPTik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgZGVzY3JpcHRpb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZGVzYwk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREZXNjcmlwdGlvbjwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgZGVzYyAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREZXNjcmlwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXREZXNjcmlwdGlvbihTdHJpbmcgZGVzYykgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ERVNDUklQVElPTiwgZGVzYyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZGVzY3JpcHRpb24uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRlc2MKLSAgICAgKiBAc2VlCTxjb2RlPnNldERlc2NyaXB0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgZGVzYworICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGVzY3JpcHRpb248L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbigpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRFU0NSSVBUSU9OKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBuZXR3b3JrIHByb3RvY29sLgogICAgICAqCi0gICAgICogQHBhcmFtCW53UHJvdG9jb2wJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBud1Byb3RvY29sICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRuZXR3b3JrUHJvdG9jb2woU3RyaW5nIG53UHJvdG9jb2wpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTkVUV09SS1BST1RPQ09MLCBud1Byb3RvY29sKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBuZXR3b3JrIHByb3RvY29sLgogICAgICAqCi0gICAgICogQHJldHVybglud1Byb3RvY29sCi0gICAgICogQHNlZQk8Y29kZT5zZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CisgICAgICogQHJldHVybiAgICBud1Byb3RvY29sCisgICAgICogQHNlZSAgICA8Y29kZT5zZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRuZXR3b3JrUHJvdG9jb2woKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5ORVRXT1JLUFJPVE9DT0wpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIG5ldHdvcmsgcHJvdG9jb2wuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbndQcm90b2NvbAk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXROZXR3b3JrUHJvdG9jb2w8L2NvZGU+CisgICAgICogQHBhcmFtICAgIG53UHJvdG9jb2wgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0TmV0d29ya1Byb3RvY29sPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldE5ldHdvcmtQcm90b2NvbChTdHJpbmcgbndQcm90b2NvbCkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ORVRXT1JLUFJPVE9DT0wsIG53UHJvdG9jb2wpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgdGhlIG5ldHdvcmsgcHJvdG9jb2wuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCW53UHJvdG9jb2wKLSAgICAgKiBAc2VlCTxjb2RlPnNldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIG53UHJvdG9jb2wKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldE5ldHdvcmtQcm90b2NvbDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldE5ldHdvcmtQcm90b2NvbCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLk5FVFdPUktQUk9UT0NPTCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgcm9sZSBuYW1lLgogICAgICAqCi0gICAgICogQHBhcmFtCXJvbGVOYW1lCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldFJvbGVOYW1lPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICByb2xlTmFtZSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXRSb2xlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRyb2xlTmFtZShTdHJpbmcgcm9sZU5hbWUpIHsKICAgICAgICAgc3BlYy5zZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUk9MRU5BTUUsIHJvbGVOYW1lKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSByb2xlIG5hbWUuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCXJvbGVOYW1lCi0gICAgICogQHNlZQk8Y29kZT5zZXRSb2xlTmFtZTwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHJvbGVOYW1lCisgICAgICogQHNlZSAgICA8Y29kZT5zZXRSb2xlTmFtZTwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldHJvbGVOYW1lKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuUk9MRU5BTUUpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIHJvbGUgbmFtZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlyb2xlTmFtZQk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXRSb2xlTmFtZTwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgcm9sZU5hbWUgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0Um9sZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Um9sZU5hbWUoU3RyaW5nIHJvbGVOYW1lKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlJPTEVOQU1FLCByb2xlTmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcm9sZSBuYW1lLgogICAgICAqCi0gICAgICogQHJldHVybglyb2xlTmFtZQotICAgICAqIEBzZWUJPGNvZGU+c2V0Um9sZU5hbWU8L2NvZGU+CisgICAgICogQHJldHVybiAgICByb2xlTmFtZQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0Um9sZU5hbWU8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRSb2xlTmFtZSgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLlJPTEVOQU1FKTsKICAgICB9CiAKLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGxvZ2luIHRpbWVvdXQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbG9naW5UaW1lT3V0CTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAc2VlCTxjb2RlPmdldExvZ2luVGltZU91dDwvY29kZT4KKyAgICAgKiBAcGFyYW0gICAgbG9naW5UaW1lT3V0ICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAc2VlICAgIDxjb2RlPmdldExvZ2luVGltZU91dDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRsb2dpblRpbWVPdXQoU3RyaW5nIGxvZ2luVGltZU91dCkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5MT0dJTlRJTUVPVVQsIGxvZ2luVGltZU91dCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgbG9naW4gdGltZW91dC4KICAgICAgKgotICAgICAqIEByZXR1cm4JbG9naW5UaW1lb3V0Ci0gICAgICogQHNlZQk8Y29kZT5zZXRMb2dpblRpbWVPdXQ8L2NvZGU+CisgICAgICogQHJldHVybiAgICBsb2dpblRpbWVvdXQKKyAgICAgKiBAc2VlICAgIDxjb2RlPnNldExvZ2luVGltZU91dDwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGxvZ2luVGltZU91dCgpIHsKICAgICAgICAgcmV0dXJuIHNwZWMuZ2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR0lOVElNRU9VVCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgbG9naW4gdGltZW91dC4KICAgICAgKgotICAgICAqIEBwYXJhbQlsb2dpblRpbWVPdXQJPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0TG9naW5UaW1lT3V0PC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBsb2dpblRpbWVPdXQgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBzZWUgICAgPGNvZGU+Z2V0TG9naW5UaW1lT3V0PC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldExvZ2luVGltZU91dChTdHJpbmcgbG9naW5UaW1lT3V0KSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkxPR0lOVElNRU9VVCwgbG9naW5UaW1lT3V0KTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBsb2dpbiB0aW1lb3V0LgogICAgICAqCi0gICAgICogQHJldHVybglsb2dpblRpbWVvdXQKLSAgICAgKiBAc2VlCTxjb2RlPnNldExvZ2luVGltZU91dDwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGxvZ2luVGltZW91dAorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0TG9naW5UaW1lT3V0PC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TG9naW5UaW1lT3V0KCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuTE9HSU5USU1FT1VUKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkZWxpbWl0ZXIuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZGVsaW0JPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGVsaW1pdGVyPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkZWxpbSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREZWxpbWl0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0ZGVsaW1pdGVyKFN0cmluZyBkZWxpbSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ERUxJTUlURVIsIGRlbGltKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkZWxpbWl0ZXIuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRlbGltCi0gICAgICogQHNlZQk8Y29kZT5zZXREZWxpbWl0ZXI8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkZWxpbQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGVsaW1pdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0ZGVsaW1pdGVyKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVMSU1JVEVSKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkZWxpbWl0ZXIuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JZGVsaW0JPGNvZGU+U3RyaW5nPC9jb2RlPgotICAgICAqIEBzZWUJPGNvZGU+Z2V0RGVsaW1pdGVyPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkZWxpbSAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREZWxpbWl0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RGVsaW1pdGVyKFN0cmluZyBkZWxpbSkgewogICAgICAgICBzcGVjLnNldERldGFpbChEYXRhU291cmNlU3BlYy5ERUxJTUlURVIsIGRlbGltKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkZWxpbWl0ZXIuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCWRlbGltCi0gICAgICogQHNlZQk8Y29kZT5zZXREZWxpbWl0ZXI8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkZWxpbQorICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RGVsaW1pdGVyPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVsaW1pdGVyKCkgewogICAgICAgICByZXR1cm4gc3BlYy5nZXREZXRhaWwoRGF0YVNvdXJjZVNwZWMuREVMSU1JVEVSKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkcml2ZXIgc3BlY2lmaWMgcHJvcGVydGllcy4KICAgICAgKgotICAgICAqIEBwYXJhbQlkcml2ZXJQcm9wcwk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkcml2ZXJQcm9wcyAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldGRyaXZlclByb3BlcnRpZXMoU3RyaW5nIGRyaXZlclByb3BzKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRSSVZFUlBST1BFUlRJRVMsIGRyaXZlclByb3BzKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkcml2ZXIgc3BlY2lmaWMgcHJvcGVydGllcy4KICAgICAgKgotICAgICAqIEByZXR1cm4JZHJpdmVyUHJvcHMKLSAgICAgKiBAc2VlCTxjb2RlPnNldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkcml2ZXJQcm9wcworICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldGRyaXZlclByb3BlcnRpZXMoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EUklWRVJQUk9QRVJUSUVTKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkcml2ZXIgc3BlY2lmaWMgcHJvcGVydGllcy4KICAgICAgKgotICAgICAqIEBwYXJhbQlkcml2ZXJQcm9wcwk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHNlZQk8Y29kZT5nZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBkcml2ZXJQcm9wcyAgICA8Y29kZT5TdHJpbmc8L2NvZGU+CisgICAgICogQHNlZSAgICA8Y29kZT5nZXREcml2ZXJQcm9wZXJ0aWVzPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERyaXZlclByb3BlcnRpZXMoU3RyaW5nIGRyaXZlclByb3BzKSB7CiAgICAgICAgIHNwZWMuc2V0RGV0YWlsKERhdGFTb3VyY2VTcGVjLkRSSVZFUlBST1BFUlRJRVMsIGRyaXZlclByb3BzKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkcml2ZXIgc3BlY2lmaWMgcHJvcGVydGllcy4KICAgICAgKgotICAgICAqIEByZXR1cm4JZHJpdmVyUHJvcHMKLSAgICAgKiBAc2VlCTxjb2RlPnNldERyaXZlclByb3BlcnRpZXM8L2NvZGU+CisgICAgICogQHJldHVybiAgICBkcml2ZXJQcm9wcworICAgICAqIEBzZWUgICAgPGNvZGU+c2V0RHJpdmVyUHJvcGVydGllczwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldERyaXZlclByb3BlcnRpZXMoKSB7CiAgICAgICAgIHJldHVybiBzcGVjLmdldERldGFpbChEYXRhU291cmNlU3BlYy5EUklWRVJQUk9QRVJUSUVTKTsKQEAgLTU0MiwzNSArNTQyLDM1IEBACiAgICAgICogQ2hlY2sgaWYgdGhlIFBhc3N3b3JkQ3JlZGVudGlhbCBwYXNzZWQgZm9yIHRoaXMgZ2V0IGNvbm5lY3Rpb24KICAgICAgKiByZXF1ZXN0IGlzIGVxdWFsIHRvIHRoZSB1c2VyL3Bhc3N3ZCBvZiB0aGlzIGNvbm5lY3Rpb24gcG9vbC4KICAgICAgKi8KLSAgICBwcml2YXRlIGJvb2xlYW4gaXNFcXVhbCggUGFzc3dvcmRDcmVkZW50aWFsIHBjLCBTdHJpbmcgdXNlciwgCisgICAgcHJpdmF0ZSBib29sZWFuIGlzRXF1YWwoIFBhc3N3b3JkQ3JlZGVudGlhbCBwYywgU3RyaW5nIHVzZXIsCiAgICAgICAgIFN0cmluZyBwYXNzd29yZCkgewotICAgICAgICAKLQkvL2lmIGVxdWFsIGdldCBkaXJlY3QgY29ubmVjdGlvbiBlbHNlIAotCS8vZ2V0IGNvbm5lY3Rpb24gd2l0aCB1c2VyIGFuZCBwYXNzd29yZC4KLQkKLQlpZiAodXNlciA9PSBudWxsICYmIHBjID09IG51bGwpIHsKLQkgICAgcmV0dXJuIHRydWU7Ci0JfQotCQotCWlmICggdXNlciA9PSBudWxsICYmIHBjICE9IG51bGwgKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0JfQogCi0JaWYoIHBjID09IG51bGwgKSB7Ci0JICAgIHJldHVybiB0cnVlOwotCX0KLQkKLQlpZiAoIHVzZXIuZXF1YWxzKCBwYy5nZXRVc2VyTmFtZSgpICkgKSB7Ci0JICAgIGlmICggcGFzc3dvcmQgPT0gbnVsbCAmJiBwYy5nZXRQYXNzd29yZCgpID09IG51bGwgKSB7Ci0JICAgICAgICByZXR1cm4gdHJ1ZTsKLQkgICAgfQotCX0KLQkKLQlpZiAoIHVzZXIuZXF1YWxzKHBjLmdldFVzZXJOYW1lKCkpICYmIHBhc3N3b3JkLmVxdWFscyhwYy5nZXRQYXNzd29yZCgpKSApIHsKLQkgICAgcmV0dXJuIHRydWU7Ci0JfSAKLQkKLSAgICAgICAgCi0JcmV0dXJuIGZhbHNlOworICAgIC8vaWYgZXF1YWwgZ2V0IGRpcmVjdCBjb25uZWN0aW9uIGVsc2UKKyAgICAvL2dldCBjb25uZWN0aW9uIHdpdGggdXNlciBhbmQgcGFzc3dvcmQuCisKKyAgICBpZiAodXNlciA9PSBudWxsICYmIHBjID09IG51bGwpIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKCB1c2VyID09IG51bGwgJiYgcGMgIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiggcGMgPT0gbnVsbCApIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKCB1c2VyLmVxdWFscyggcGMuZ2V0VXNlck5hbWUoKSApICkgeworICAgICAgICBpZiAoIHBhc3N3b3JkID09IG51bGwgJiYgcGMuZ2V0UGFzc3dvcmQoKSA9PSBudWxsICkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIHVzZXIuZXF1YWxzKHBjLmdldFVzZXJOYW1lKCkpICYmIHBhc3N3b3JkLmVxdWFscyhwYy5nZXRQYXNzd29yZCgpKSApIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisKKyAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9EYXRhU291cmNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RhdGFTb3VyY2UuamF2YQppbmRleCAzMGRhMWZlLi4yOTVjM2ZiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RhdGFTb3VyY2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0RhdGFTb3VyY2UuamF2YQpAQCAtMjgsMjIgKzI4LDIyIEBACiBpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOwogaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOwogLyoqCi0gKiBIb2xkcyB0aGUgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0LCB3aGljaCBpcyB0byBiZSAKKyAqIEhvbGRzIHRoZSA8Y29kZT5qYXZhLnNxbC5Db25uZWN0aW9uPC9jb2RlPiBvYmplY3QsIHdoaWNoIGlzIHRvIGJlCiAgKiBwYXNzZWQgdG8gdGhlIGFwcGxpY2F0aW9uIHByb2dyYW0uCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8zMQotICogQGF1dGhvcglCaW5vZCBQLkcKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMzEKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCiAgKi8KIHB1YmxpYyBjbGFzcyBEYXRhU291cmNlIGltcGxlbWVudHMgamF2YXguc3FsLkRhdGFTb3VyY2UsIGphdmEuaW8uU2VyaWFsaXphYmxlLAotCQljb20uc3VuLmFwcHNlcnYuamRiY3JhLkRhdGFTb3VyY2UsIGpha2FydGEucmVzb3VyY2UuUmVmZXJlbmNlYWJsZXsgCi0JCQkJICAgCisgICAgICAgIGNvbS5zdW4uYXBwc2Vydi5qZGJjcmEuRGF0YVNvdXJjZSwgamFrYXJ0YS5yZXNvdXJjZS5SZWZlcmVuY2VhYmxleworCiAgICAgcHJpdmF0ZSBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgbWNmOwotICAgIHByaXZhdGUgQ29ubmVjdGlvbk1hbmFnZXIgY207CQkJCSAgIAkJCQkgICAKKyAgICBwcml2YXRlIENvbm5lY3Rpb25NYW5hZ2VyIGNtOwogICAgIHByaXZhdGUgaW50IGxvZ2luVGltZW91dDsKICAgICBwcml2YXRlIFByaW50V3JpdGVyIGxvZ1dyaXRlcjsKLSAgICBwcml2YXRlIFN0cmluZyBkZXNjcmlwdGlvbjsJCQkJICAgCisgICAgcHJpdmF0ZSBTdHJpbmcgZGVzY3JpcHRpb247CiAgICAgcHJpdmF0ZSBSZWZlcmVuY2UgcmVmZXJlbmNlOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgTG9nZ2VyIF9sb2dnZXI7CiAgICAgc3RhdGljIHsKICAgICAgICAgX2xvZ2dlciA9IExvZ2dlci5nZXRBbm9ueW1vdXNMb2dnZXIoKTsKQEAgLTUxLDU3ICs1MSw1NyBAQAogICAgIHByaXZhdGUgYm9vbGVhbiBkZWJ1ZyA9IGZhbHNlOwogCiAgICAgLyoqCi0gICAgICogQ29uc3RydWN0cyA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QuIFRoaXMgaXMgY3JlYXRlZCBieSB0aGUgCisgICAgICogQ29uc3RydWN0cyA8Y29kZT5EYXRhU291cmNlPC9jb2RlPiBvYmplY3QuIFRoaXMgaXMgY3JlYXRlZCBieSB0aGUKICAgICAgKiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdC4KICAgICAgKgotICAgICAqIEBwYXJhbQltY2YJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBvYmplY3QgCi0gICAgICoJCQljcmVhdGluZyB0aGlzIG9iamVjdC4KLSAgICAgKiBAcGFyYW0JY20JPGNvZGU+Q29ubmVjdGlvbk1hbmFnZXI8L2NvZGU+IG9iamVjdCBlaXRoZXIgYXNzb2NpYXRlZAotICAgICAqCQkJd2l0aCBBcHBsaWNhdGlvbiBzZXJ2ZXIgb3IgUmVzb3VyY2UgQWRhcHRlci4KKyAgICAgKiBAcGFyYW0gICAgbWNmICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0CisgICAgICogICAgICAgICAgICBjcmVhdGluZyB0aGlzIG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgY20gICAgPGNvZGU+Q29ubmVjdGlvbk1hbmFnZXI8L2NvZGU+IG9iamVjdCBlaXRoZXIgYXNzb2NpYXRlZAorICAgICAqICAgICAgICAgICAgd2l0aCBBcHBsaWNhdGlvbiBzZXJ2ZXIgb3IgUmVzb3VyY2UgQWRhcHRlci4KICAgICAgKi8KICAgICBwdWJsaWMgRGF0YVNvdXJjZSAoTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IG1jZiwgQ29ubmVjdGlvbk1hbmFnZXIgY20pIHsKLSAgICAJdGhpcy5tY2YgPSBtY2Y7Ci0gICAgCWlmIChjbSA9PSBudWxsKSB7Ci0gICAgCSAgICB0aGlzLmNtID0gKENvbm5lY3Rpb25NYW5hZ2VyKSBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25NYW5hZ2VyKCk7Ci0gICAgCX0gZWxzZSB7Ci0gICAgCSAgICB0aGlzLmNtID0gY207Ci0gICAgCX0gICAgCQotICAgIH0gICAKLSAgICAKKyAgICAgICAgdGhpcy5tY2YgPSBtY2Y7CisgICAgICAgIGlmIChjbSA9PSBudWxsKSB7CisgICAgICAgICAgICB0aGlzLmNtID0gKENvbm5lY3Rpb25NYW5hZ2VyKSBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25NYW5hZ2VyKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aGlzLmNtID0gY207CisgICAgICAgIH0KKyAgICB9CisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgotICAgICAqIAotICAgICAqIEByZXR1cm4JPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QuCi0gICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhbiBlcnJvci4gICAgICAKKyAgICAgKgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+IENvbm5lY3Rpb24gPC9jb2RlPiBvYmplY3QuCisgICAgICogQHRocm93cyBTUUxFeGNlcHRpb24gSW4gY2FzZSBvZiBhbiBlcnJvci4KICAgICAgKi8KICAgICBwdWJsaWMgQ29ubmVjdGlvbiBnZXRDb25uZWN0aW9uKCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0gICAgCXRyeSB7Ci0gICAgCSAgICByZXR1cm4gKENvbm5lY3Rpb24pIGNtLmFsbG9jYXRlQ29ubmVjdGlvbihtY2YsbnVsbCk7ICAgIAkgICAgCi0gICAgCX0gY2F0Y2ggKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZXR1cm4gKENvbm5lY3Rpb24pIGNtLmFsbG9jYXRlQ29ubmVjdGlvbihtY2YsbnVsbCk7CisgICAgICAgIH0gY2F0Y2ggKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7CiAvLyBUaGlzIGlzIHRlbXBvcmFyeS4gVGhpcyBuZWVkcyB0byBiZSBjaGFuZ2VkIHRvIFNFVkVSRSBhZnRlciBUUAotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5leGNfZ2V0X2Nvbm4iLCByZS5nZXRNZXNzYWdlKCkpOwotICAgIAkgICAgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAocmUpOwotICAgIAl9CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLmV4Y19nZXRfY29ubiIsIHJlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uIChyZSk7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgotICAgICAqIAotICAgICAqIEBwYXJhbQl1c2VyCVVzZXIgbmFtZSBmb3IgdGhlIENvbm5lY3Rpb24uCi0gICAgICogQHBhcmFtCXB3ZAlQYXNzd29yZCBmb3IgdGhlIENvbm5lY3Rpb24uCi0gICAgICogQHJldHVybgk8Y29kZT4gQ29ubmVjdGlvbiA8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAdGhyb3dzIFNRTEV4Y2VwdGlvbiBJbiBjYXNlIG9mIGFuIGVycm9yLiAgICAgIAorICAgICAqCisgICAgICogQHBhcmFtICAgIHVzZXIgICAgVXNlciBuYW1lIGZvciB0aGUgQ29ubmVjdGlvbi4KKyAgICAgKiBAcGFyYW0gICAgcHdkICAgIFBhc3N3b3JkIGZvciB0aGUgQ29ubmVjdGlvbi4KKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPiBDb25uZWN0aW9uIDwvY29kZT4gb2JqZWN0LgorICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uIEluIGNhc2Ugb2YgYW4gZXJyb3IuCiAgICAgICovCiAgICAgcHVibGljIENvbm5lY3Rpb24gZ2V0Q29ubmVjdGlvbihTdHJpbmcgdXNlciwgU3RyaW5nIHB3ZCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0gICAgCXRyeSB7Ci0gICAgCSAgICBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW5mbyA9IG5ldyBDb25uZWN0aW9uUmVxdWVzdEluZm8gKHVzZXIsIHB3ZCk7Ci0gICAgCSAgICByZXR1cm4gKENvbm5lY3Rpb24pIGNtLmFsbG9jYXRlQ29ubmVjdGlvbihtY2YsaW5mbyk7Ci0gICAgCX0gY2F0Y2ggKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBDb25uZWN0aW9uUmVxdWVzdEluZm8gaW5mbyA9IG5ldyBDb25uZWN0aW9uUmVxdWVzdEluZm8gKHVzZXIsIHB3ZCk7CisgICAgICAgICAgICByZXR1cm4gKENvbm5lY3Rpb24pIGNtLmFsbG9jYXRlQ29ubmVjdGlvbihtY2YsaW5mbyk7CisgICAgICAgIH0gY2F0Y2ggKFJlc291cmNlRXhjZXB0aW9uIHJlKSB7CiAvLyBUaGlzIGlzIHRlbXBvcmFyeS4gVGhpcyBuZWVkcyB0byBiZSBjaGFuZ2VkIHRvIFNFVkVSRSBhZnRlciBUUAotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5leGNfZ2V0X2Nvbm4iLCByZS5nZXRNZXNzYWdlKCkpOwotICAgIAkgICAgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbiAocmUpOwotICAgIAl9Ci0gICAgfSAgICAKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuV0FSTklORywgImpkYmMuZXhjX2dldF9jb25uIiwgcmUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24gKHJlKTsKKyAgICAgICAgfQorICAgIH0KIAogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgYWN0dWFsIFNRTENvbm5lY3Rpb24gZnJvbSB0aGUgQ29ubmVjdGlvbiB3cmFwcGVyCkBAIC0xMTQsOTEgKzExNCw5MSBAQAogICAgICAqLwogICAgIHB1YmxpYyBDb25uZWN0aW9uIGdldENvbm5lY3Rpb24oQ29ubmVjdGlvbiBjb24pIHRocm93cyBTUUxFeGNlcHRpb24gewogCi0gICAgICAgIENvbm5lY3Rpb24gZHJpdmVyQ29uID0gY29uOyAKKyAgICAgICAgQ29ubmVjdGlvbiBkcml2ZXJDb24gPSBjb247CiAgICAgICAgIGlmIChjb24gaW5zdGFuY2VvZiBjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvbkhvbGRlcikgewotICAgICAgICAgICBkcml2ZXJDb24gPSAoKGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uSG9sZGVyKSBjb24pLmdldENvbm5lY3Rpb24oKTsgCi0gICAgICAgIH0gCisgICAgICAgICAgIGRyaXZlckNvbiA9ICgoY29tLnN1bi5qZGJjcmEuc3BpLkNvbm5lY3Rpb25Ib2xkZXIpIGNvbikuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIGRyaXZlckNvbjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXQgdGhlIGxvZ2luIHRpbWVvdXQKICAgICAgKgogICAgICAqIEByZXR1cm4gbG9naW4gdGltZW91dC4KLSAgICAgKiBAdGhyb3dzCVNRTEV4Y2VwdGlvbglJZiBhIGRhdGFiYXNlIGVycm9yIG9jY3Vycy4KKyAgICAgKiBAdGhyb3dzICAgIFNRTEV4Y2VwdGlvbiAgICBJZiBhIGRhdGFiYXNlIGVycm9yIG9jY3Vycy4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldExvZ2luVGltZW91dCgpIHRocm93cyBTUUxFeGNlcHRpb257Ci0gICAgCXJldHVybglsb2dpblRpbWVvdXQ7CisgICAgICAgIHJldHVybiAgICBsb2dpblRpbWVvdXQ7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0IHRoZSBsb2dpbiB0aW1lb3V0CiAgICAgICoKLSAgICAgKiBAcGFyYW0JbG9naW5UaW1lb3V0CUxvZ2luIHRpbWVvdXQuCi0gICAgICogQHRocm93cwlTUUxFeGNlcHRpb24JSWYgYSBkYXRhYmFzZSBlcnJvciBvY2N1cnMuCisgICAgICogQHBhcmFtICAgIGxvZ2luVGltZW91dCAgICBMb2dpbiB0aW1lb3V0LgorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIElmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldExvZ2luVGltZW91dChpbnQgbG9naW5UaW1lb3V0KSB0aHJvd3MgU1FMRXhjZXB0aW9uewotICAgIAl0aGlzLmxvZ2luVGltZW91dCA9IGxvZ2luVGltZW91dDsKKyAgICAgICAgdGhpcy5sb2dpblRpbWVvdXQgPSBsb2dpblRpbWVvdXQ7CiAgICAgfQotICAgIAotICAgIC8qKiAKKworICAgIC8qKgogICAgICAqIEdldCB0aGUgbG9nd3JpdGVyIG9iamVjdC4KICAgICAgKgogICAgICAqIEByZXR1cm4gPGNvZGU+IFByaW50V3JpdGVyIDwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MJU1FMRXhjZXB0aW9uCUlmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIElmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgogICAgICAqLwogICAgIHB1YmxpYyBQcmludFdyaXRlciBnZXRMb2dXcml0ZXIoKSB0aHJvd3MgU1FMRXhjZXB0aW9uewotICAgIAlyZXR1cm4JbG9nV3JpdGVyOworICAgICAgICByZXR1cm4gICAgbG9nV3JpdGVyOwogICAgIH0KLSAgICAgICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGxvZ3dyaXRlciBvbiB0aGlzIG9iamVjdC4KICAgICAgKgogICAgICAqIEBwYXJhbSA8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gb2JqZWN0LgotICAgICAqIEB0aHJvd3MJU1FMRXhjZXB0aW9uCUlmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgorICAgICAqIEB0aHJvd3MgICAgU1FMRXhjZXB0aW9uICAgIElmIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldExvZ1dyaXRlcihQcmludFdyaXRlciBsb2dXcml0ZXIpIHRocm93cyBTUUxFeGNlcHRpb257Ci0gICAgCXRoaXMubG9nV3JpdGVyID0gbG9nV3JpdGVyOwotICAgIH0gICAgICAgIAotICAgICAgICAKKyAgICAgICAgdGhpcy5sb2dXcml0ZXIgPSBsb2dXcml0ZXI7CisgICAgfQorCiAgICAgcHVibGljIExvZ2dlciBnZXRQYXJlbnRMb2dnZXIoKSB0aHJvd3MgU1FMRmVhdHVyZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbnsKICAgICAgIHRocm93IG5ldyBTUUxGZWF0dXJlTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJEbyBub3Qgc3VwcG9ydCBKYXZhIDcgZmVhdHVyZS4iKTsKICAgICB9CiAgICAgLyoqCiAgICAgICogUmV0cmlldmVzIHRoZSBkZXNjcmlwdGlvbi4KICAgICAgKgotICAgICAqIEByZXR1cm4JRGVzY3JpcHRpb24gYWJvdXQgdGhlIERhdGFTb3VyY2UuCisgICAgICogQHJldHVybiAgICBEZXNjcmlwdGlvbiBhYm91dCB0aGUgRGF0YVNvdXJjZS4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgewotICAgIAlyZXR1cm4gZGVzY3JpcHRpb247CisgICAgICAgIHJldHVybiBkZXNjcmlwdGlvbjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGRlc2NyaXB0aW9uLgogICAgICAqCiAgICAgICogQHBhcmFtIGRlc2NyaXB0aW9uIERlc2NyaXB0aW9uIGFib3V0IHRoZSBEYXRhU291cmNlLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldERlc2NyaXB0aW9uKFN0cmluZyBkZXNjcmlwdGlvbikgewotICAgIAl0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247Ci0gICAgfSAgICAKLSAgICAKKyAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOworICAgIH0KKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgcmVmZXJlbmNlLgogICAgICAqCiAgICAgICogQHJldHVybiA8Y29kZT5SZWZlcmVuY2U8L2NvZGU+b2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyBSZWZlcmVuY2UgZ2V0UmVmZXJlbmNlKCkgewotICAgIAlyZXR1cm4gcmVmZXJlbmNlOworICAgICAgICByZXR1cm4gcmVmZXJlbmNlOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUgcmVmZXJlbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCXJlZmVyZW5jZSA8Y29kZT5SZWZlcmVuY2U8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgcmVmZXJlbmNlIDxjb2RlPlJlZmVyZW5jZTwvY29kZT4gb2JqZWN0LgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFJlZmVyZW5jZShSZWZlcmVuY2UgcmVmZXJlbmNlKSB7Ci0gICAgCXRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlOworICAgICAgICB0aGlzLnJlZmVyZW5jZSA9IHJlZmVyZW5jZTsKICAgICB9CiAKICAgICBwdWJsaWMgPFQ+IFQgdW53cmFwKENsYXNzPFQ+IGlmYWNlKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKQEAgLTIwNiw2ICsyMDYsNiBAQAogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIGlzV3JhcHBlckZvcihDbGFzczw/PiBpZmFjZSkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsgCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluLmphdmEKaW5kZXggNTc0ZWQ2Ni4uYmVjMGQ2YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW4uamF2YQpAQCAtMTgsMTMgKzE4LDEzIEBACiAKIHB1YmxpYyBpbnRlcmZhY2UgSmRiY1NldHVwQWRtaW4gewogCi0gICAgcHVibGljIHZvaWQgc2V0VGFibGVOYW1lKFN0cmluZyBkYik7IAorICAgIHB1YmxpYyB2b2lkIHNldFRhYmxlTmFtZShTdHJpbmcgZGIpOwogCiAgICAgcHVibGljIFN0cmluZyBnZXRUYWJsZU5hbWUoKTsKIAotICAgIHB1YmxpYyB2b2lkIHNldEpuZGlOYW1lKFN0cmluZyBuYW1lKTsgCisgICAgcHVibGljIHZvaWQgc2V0Sm5kaU5hbWUoU3RyaW5nIG5hbWUpOwogCi0gICAgcHVibGljIFN0cmluZyBnZXRKbmRpTmFtZSgpOyAKKyAgICBwdWJsaWMgU3RyaW5nIGdldEpuZGlOYW1lKCk7CiAKICAgICBwdWJsaWMgdm9pZCBzZXRTY2hlbWFOYW1lKFN0cmluZyBuYW1lKTsKIApAQCAtMzQsNiArMzQsNiBAQAogCiAgICAgcHVibGljIEludGVnZXIgZ2V0Tm9PZlJvd3MoKTsKIAotICAgIHB1YmxpYyBib29sZWFuIGNoZWNrU2V0dXAoKTsgCisgICAgcHVibGljIGJvb2xlYW4gY2hlY2tTZXR1cCgpOwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluSW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9KZGJjU2V0dXBBZG1pbkltcGwuamF2YQppbmRleCAzYmQ3Y2FkLi5mZWM3NDQzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL0pkYmNTZXR1cEFkbWluSW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvSmRiY1NldHVwQWRtaW5JbXBsLmphdmEKQEAgLTY1LDExICs2NSwxMSBAQAogCiBwcml2YXRlIHZvaWQgcHJpbnRIaWVyYXJjaHkoQ2xhc3NMb2FkZXIgY2wsIGludCBjbnQpewogd2hpbGUoY2wgIT0gbnVsbCkgewotCWZvcihpbnQgaSA9MDsgaSA8IGNudDsgaSsrKSAKLQkJU3lzdGVtLm91dC5wcmludCgiICIgKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlBBUkVOVCA6IiArIGNsKTsKLQljbCA9IGNsLmdldFBhcmVudCgpOwotCWNudCArPSAzOworICAgIGZvcihpbnQgaSA9MDsgaSA8IGNudDsgaSsrKQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCIgIiApOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUEFSRU5UIDoiICsgY2wpOworICAgIGNsID0gY2wuZ2V0UGFyZW50KCk7CisgICAgY250ICs9IDM7CiB9CiB9CiAKQEAgLTc4LDEwICs3OCwxMCBAQAogICAgICAgICBmb3IoaW50IGkgPTA7IGkgPCBjbnQ7IGkrKykKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCIgIiApOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBBUkVOVCBvZiBDbGFzc0xvYWRlciAxIDoiICsgY2wxKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlBBUkVOVCBvZiBDbGFzc0xvYWRlciAyIDoiICsgY2wyKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkVRVUFMUyA6ICIgKyAoY2wxID09IGNsMikpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUEFSRU5UIG9mIENsYXNzTG9hZGVyIDIgOiIgKyBjbDIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRVFVQUxTIDogIiArIChjbDEgPT0gY2wyKSk7CiAgICAgICAgIGNsMSA9IGNsMS5nZXRQYXJlbnQoKTsKLQljbDIgPSBjbDIuZ2V0UGFyZW50KCk7CisgICAgY2wyID0gY2wyLmdldFBhcmVudCgpOwogICAgICAgICBjbnQgKz0gMzsKIH0KIH0KQEAgLTkwLDkzICs5MCw5MyBAQAogICAgIHB1YmxpYyBib29sZWFuIGNoZWNrU2V0dXAoKXsKIAogICAgICAgICBpZiAoam5kaU5hbWU9PSBudWxsIHx8IGpuZGlOYW1lLnRyaW0oKS5lcXVhbHMoIiIpKSB7Ci0JICAgcmV0dXJuIGZhbHNlOwotCX0KKyAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgICAgIGlmICh0YWJsZU5hbWU9PSBudWxsIHx8IHRhYmxlTmFtZS50cmltKCkuZXF1YWxzKCIiKSkgewotCSAgIHJldHVybiBmYWxzZTsKLQl9CisgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAogICAgICAgICBDb25uZWN0aW9uIGNvbiA9IG51bGw7Ci0JU3RhdGVtZW50IHMgPSBudWxsOwotCVJlc3VsdFNldCBycyA9IG51bGw7Ci0JYm9vbGVhbiBiID0gZmFsc2U7CisgICAgU3RhdGVtZW50IHMgPSBudWxsOworICAgIFJlc3VsdFNldCBycyA9IG51bGw7CisgICAgYm9vbGVhbiBiID0gZmFsc2U7CiAgICAgICAgIHRyeSB7Ci0JICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JLy9kZWJ1ZwotCUNsYXNzIGNseiA9IERhdGFTb3VyY2UuY2xhc3M7CisgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgLy9kZWJ1ZworICAgIENsYXNzIGNseiA9IERhdGFTb3VyY2UuY2xhc3M7CiAvKgotCWlmKGNsei5nZXRDbGFzc0xvYWRlcigpICE9IG51bGwpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJEYXRhU291cmNlJ3MgY2xhc3hzIDogIiArICBjbHouZ2V0TmFtZSgpICsgICIgY2xhc3Nsb2FkZXIgIiArIGNsei5nZXRDbGFzc0xvYWRlcigpKTsKLQkJcHJpbnRIaWVyYXJjaHkoY2x6LmdldENsYXNzTG9hZGVyKCkuZ2V0UGFyZW50KCksIDgpOwotCX0KLQlDbGFzcyBjbHMgPSBpYy5sb29rdXAoam5kaU5hbWUpLmdldENsYXNzKCk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJMb29rZWQgdXAgY2xhc3MncyA6ICIgKyBjbHMuZ2V0UGFja2FnZSgpICsgIjoiICsgY2xzLmdldE5hbWUoKSAgKyAiIGNsYXNzbG9hZGVyICIgICsgY2xzLmdldENsYXNzTG9hZGVyKCkpOwotCXByaW50SGllcmFyY2h5KGNscy5nZXRDbGFzc0xvYWRlcigpLmdldFBhcmVudCgpLCA4KTsKKyAgICBpZihjbHouZ2V0Q2xhc3NMb2FkZXIoKSAhPSBudWxsKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGF0YVNvdXJjZSdzIGNsYXN4cyA6ICIgKyAgY2x6LmdldE5hbWUoKSArICAiIGNsYXNzbG9hZGVyICIgKyBjbHouZ2V0Q2xhc3NMb2FkZXIoKSk7CisgICAgICAgIHByaW50SGllcmFyY2h5KGNsei5nZXRDbGFzc0xvYWRlcigpLmdldFBhcmVudCgpLCA4KTsKKyAgICB9CisgICAgQ2xhc3MgY2xzID0gaWMubG9va3VwKGpuZGlOYW1lKS5nZXRDbGFzcygpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2VkIHVwIGNsYXNzJ3MgOiAiICsgY2xzLmdldFBhY2thZ2UoKSArICI6IiArIGNscy5nZXROYW1lKCkgICsgIiBjbGFzc2xvYWRlciAiICArIGNscy5nZXRDbGFzc0xvYWRlcigpKTsKKyAgICBwcmludEhpZXJhcmNoeShjbHMuZ2V0Q2xhc3NMb2FkZXIoKS5nZXRQYXJlbnQoKSwgOCk7CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkNsYXNzbG9hZGVycyBlcXVhbCA/ICIgKyAgKGNsei5nZXRDbGFzc0xvYWRlcigpID09IGNscy5nZXRDbGFzc0xvYWRlcigpKSk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCImKiYqJiomKiBDb21wYXJpbmcgSGllcmFjaHkgRGF0YVNvdXJjZSB2cyBsb29rZWR1cCIpOwotCWlmKGNsei5nZXRDbGFzc0xvYWRlcigpICE9IG51bGwpIHsKLQkJY29tcGFyZUhpZXJhcmNoeShjbHouZ2V0Q2xhc3NMb2FkZXIoKSwgY2xzLmdldENsYXNzTG9hZGVyKCksIDgpOwotCX0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNsYXNzbG9hZGVycyBlcXVhbCA/ICIgKyAgKGNsei5nZXRDbGFzc0xvYWRlcigpID09IGNscy5nZXRDbGFzc0xvYWRlcigpKSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCImKiYqJiomKiBDb21wYXJpbmcgSGllcmFjaHkgRGF0YVNvdXJjZSB2cyBsb29rZWR1cCIpOworICAgIGlmKGNsei5nZXRDbGFzc0xvYWRlcigpICE9IG51bGwpIHsKKyAgICAgICAgY29tcGFyZUhpZXJhcmNoeShjbHouZ2V0Q2xhc3NMb2FkZXIoKSwgY2xzLmdldENsYXNzTG9hZGVyKCksIDgpOworICAgIH0KIAotCVN5c3RlbS5vdXQucHJpbnRsbigiQmVmb3JlIGxvb2t1cCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmVmb3JlIGxvb2t1cCIpOwogKi8KLQlPYmplY3QgbyA9IGljLmxvb2t1cChqbmRpTmFtZSk7Ci0vLwlTeXN0ZW0ub3V0LnByaW50bG4oImFmdGVyIGxvb2t1cCBsb29rdXAiKTsKKyAgICBPYmplY3QgbyA9IGljLmxvb2t1cChqbmRpTmFtZSk7CisvLyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImFmdGVyIGxvb2t1cCBsb29rdXAiKTsKIAotCSAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpbyA7CisgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSlvIDsKIC8qCi0JU3lzdGVtLm91dC5wcmludGxuKCJhZnRlciBjYXN0Iik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tIFRyeWluZyBvdXIgU3R1ZmYgISEhIik7Ci0JdHJ5IHsKLQkJQ2xhc3MgbzEgPSAoQ2xhc3MuZm9yTmFtZSgiY29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2UiKSk7Ci0JCUNsYXNzTG9hZGVyIGNsMSA9IG8xLmdldENsYXNzTG9hZGVyKCk7Ci0JCUNsYXNzTG9hZGVyIGNsMiA9IERhdGFTb3VyY2UuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJDbDEgPT0gQ2wyIiArIChjbDEgPT0gY2wyKSk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQ2xhc3NlcyBlcXVhbCIgKyAoRGF0YVNvdXJjZS5jbGFzcyA9PSBvMSkpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQlleC5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJhZnRlciBjYXN0Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tIFRyeWluZyBvdXIgU3R1ZmYgISEhIik7CisgICAgdHJ5IHsKKyAgICAgICAgQ2xhc3MgbzEgPSAoQ2xhc3MuZm9yTmFtZSgiY29tLnN1bi5qZGJjcmEuc3BpLkRhdGFTb3VyY2UiKSk7CisgICAgICAgIENsYXNzTG9hZGVyIGNsMSA9IG8xLmdldENsYXNzTG9hZGVyKCk7CisgICAgICAgIENsYXNzTG9hZGVyIGNsMiA9IERhdGFTb3VyY2UuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDbDEgPT0gQ2wyIiArIChjbDEgPT0gY2wyKSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2xhc3NlcyBlcXVhbCIgKyAoRGF0YVNvdXJjZS5jbGFzcyA9PSBvMSkpOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CiAqLwogICAgICAgICAgICAgY29uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCSAgICBTdHJpbmcgZnVsbFRhYmxlTmFtZSA9IHRhYmxlTmFtZTsKLQkgICAgaWYgKHNjaGVtYU5hbWUgIT0gbnVsbCAmJiAoIShzY2hlbWFOYW1lLnRyaW0oKS5lcXVhbHMoIiIpKSkpIHsKLQkgICAgICAgIGZ1bGxUYWJsZU5hbWUgPSBzY2hlbWFOYW1lLnRyaW0oKSArICIuIiArIGZ1bGxUYWJsZU5hbWU7Ci0JICAgIH0KLQkgICAgU3RyaW5nIHFyeSA9ICJzZWxlY3QgKiBmcm9tICIgKyBmdWxsVGFibGVOYW1lOyAKKyAgICAgICAgU3RyaW5nIGZ1bGxUYWJsZU5hbWUgPSB0YWJsZU5hbWU7CisgICAgICAgIGlmIChzY2hlbWFOYW1lICE9IG51bGwgJiYgKCEoc2NoZW1hTmFtZS50cmltKCkuZXF1YWxzKCIiKSkpKSB7CisgICAgICAgICAgICBmdWxsVGFibGVOYW1lID0gc2NoZW1hTmFtZS50cmltKCkgKyAiLiIgKyBmdWxsVGFibGVOYW1lOworICAgICAgICB9CisgICAgICAgIFN0cmluZyBxcnkgPSAic2VsZWN0ICogZnJvbSAiICsgZnVsbFRhYmxlTmFtZTsKIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4ZWN1dGluZyBxdWVyeSA6IiArIHFyeSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhlY3V0aW5nIHF1ZXJ5IDoiICsgcXJ5KTsKIAotCSAgICBzID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOwotCSAgICBycyA9IHMuZXhlY3V0ZVF1ZXJ5KHFyeSk7IAorICAgICAgICBzID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICBycyA9IHMuZXhlY3V0ZVF1ZXJ5KHFyeSk7CiAKICAgICAgICAgICAgIGludCBpID0gMDsKLQkgICAgaWYgKHJzLm5leHQoKSkgewotCSAgICAgICAgaSsrOwotCSAgICB9CisgICAgICAgIGlmIChycy5uZXh0KCkpIHsKKyAgICAgICAgICAgIGkrKzsKKyAgICAgICAgfQogCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk5vIG9mIHJvd3MgZm91bmQ6IiArIGkpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJObyBvZiByb3dzIGV4cGVjdGVkOiIgKyBub09mUm93cyk7CiAKLQkgICAgaWYgKGkgPT0gbm9PZlJvd3MuaW50VmFsdWUoKSkgewotCSAgICAgICBiID0gdHJ1ZTsKLQkgICAgfSBlbHNlIHsKLQkgICAgICAgYiA9IGZhbHNlOwotCSAgICB9Ci0JfSBjYXRjaChFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICBiID0gZmFsc2U7Ci0JfSBmaW5hbGx5IHsKLQkgICAgdHJ5IHsKLQkgICAgICAgIGlmIChycyAhPSBudWxsKSBycy5jbG9zZSgpOwotCSAgICAgICAgaWYgKHMgIT0gbnVsbCkgcy5jbG9zZSgpOwotCSAgICAgICAgaWYgKGNvbiAhPSBudWxsKSBjb24uY2xvc2UoKTsKKyAgICAgICAgaWYgKGkgPT0gbm9PZlJvd3MuaW50VmFsdWUoKSkgeworICAgICAgICAgICBiID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgYiA9IGZhbHNlOworICAgICAgICB9CisgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICBiID0gZmFsc2U7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGlmIChycyAhPSBudWxsKSBycy5jbG9zZSgpOworICAgICAgICAgICAgaWYgKHMgIT0gbnVsbCkgcy5jbG9zZSgpOworICAgICAgICAgICAgaWYgKGNvbiAhPSBudWxsKSBjb24uY2xvc2UoKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIH0KLQl9Ci0JU3lzdGVtLm91dC5wcmludGxuKCJSZXR1cm5pbmcgc2V0dXAgOiIgK2IpOwotCXJldHVybiBiOworICAgICAgICB9CisgICAgfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmV0dXJuaW5nIHNldHVwIDoiICtiKTsKKyAgICByZXR1cm4gYjsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTG9jYWxUcmFuc2FjdGlvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Mb2NhbFRyYW5zYWN0aW9uLmphdmEKaW5kZXggOGViZTA1Ny4uYzU0YTIxNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Mb2NhbFRyYW5zYWN0aW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9Mb2NhbFRyYW5zYWN0aW9uLmphdmEKQEAgLTIzLDQ1ICsyMyw0NSBAQAogLyoqCiAgKiA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA4LzAzCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wOC8wMworICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogcHVibGljIGNsYXNzIExvY2FsVHJhbnNhY3Rpb24gaW1wbGVtZW50cyBqYWthcnRhLnJlc291cmNlLnNwaS5Mb2NhbFRyYW5zYWN0aW9uIHsKLSAgICAKKwogICAgIHByaXZhdGUgTWFuYWdlZENvbm5lY3Rpb24gbWM7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4uCi0gICAgICogQHBhcmFtCW1jCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiB0aGF0IHJldHVybnMKLSAgICAgKgkJCXRoaXMgPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gb2JqZWN0IGFzCi0gICAgICoJCQlhIHJlc3VsdCBvZiA8Y29kZT5nZXRMb2NhbFRyYW5zYWN0aW9uPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBtYyAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gdGhhdCByZXR1cm5zCisgICAgICogICAgICAgICAgICB0aGlzIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IG9iamVjdCBhcworICAgICAqICAgICAgICAgICAgYSByZXN1bHQgb2YgPGNvZGU+Z2V0TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgTG9jYWxUcmFuc2FjdGlvbihNYW5hZ2VkQ29ubmVjdGlvbiBtYykgewogICAgICAgICB0aGlzLm1jID0gbWM7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQmVnaW4gYSBsb2NhbCB0cmFuc2FjdGlvbi4KICAgICAgKgotICAgICAqIEB0aHJvd3MJTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjaGFuZ2luZwotICAgICAqCQkJCQkJdGhlIGF1dG9jb21taXQgbW9kZSBvZiB0aGUgcGh5c2ljYWwKLSAgICAgKgkJCQkJCWNvbm5lY3Rpb24KKyAgICAgKiBAdGhyb3dzICAgIExvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2hhbmdpbmcKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhdXRvY29tbWl0IG1vZGUgb2YgdGhlIHBoeXNpY2FsCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgYmVnaW4oKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICAvL0dKQ0lOVAotCW1jLnRyYW5zYWN0aW9uU3RhcnRlZCgpOworICAgIG1jLnRyYW5zYWN0aW9uU3RhcnRlZCgpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpLnNldEF1dG9Db21taXQoZmFsc2UpOwogICAgICAgICB9IGNhdGNoKGphdmEuc3FsLlNRTEV4Y2VwdGlvbiBzcWxlKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb21taXQgYSBsb2NhbCB0cmFuc2FjdGlvbi4KLSAgICAgKiBAdGhyb3dzCUxvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2hhbmdpbmcKLSAgICAgKgkJCQkJCXRoZSBhdXRvY29tbWl0IG1vZGUgb2YgdGhlIHBoeXNpY2FsCi0gICAgICoJCQkJCQljb25uZWN0aW9uIG9yIGNvbW1pdHRpbmcgdGhlIHRyYW5zYWN0aW9uCisgICAgICogQHRocm93cyAgICBMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNoYW5naW5nCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICB0aGUgYXV0b2NvbW1pdCBtb2RlIG9mIHRoZSBwaHlzaWNhbAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbiBvciBjb21taXR0aW5nIHRoZSB0cmFuc2FjdGlvbgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNvbW1pdCgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIEV4Y2VwdGlvbiBlID0gbnVsbDsKQEAgLTcyLDE1ICs3MiwxNSBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IExvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24oc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgICAgIC8vR0pDSU5UCi0JbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKKyAgICBtYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJvbGxiYWNrIGEgbG9jYWwgdHJhbnNhY3Rpb24uCi0gICAgICogCi0gICAgICogQHRocm93cwlMb2NhbFRyYW5zYWN0aW9uRXhjZXB0aW9uCWlmIHRoZXJlIGlzIGFuIGVycm9yIGluIGNoYW5naW5nCi0gICAgICoJCQkJCQl0aGUgYXV0b2NvbW1pdCBtb2RlIG9mIHRoZSBwaHlzaWNhbAotICAgICAqCQkJCQkJY29ubmVjdGlvbiBvciByb2xsaW5nIGJhY2sgdGhlIHRyYW5zYWN0aW9uCisgICAgICoKKyAgICAgKiBAdGhyb3dzICAgIExvY2FsVHJhbnNhY3Rpb25FeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2hhbmdpbmcKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhdXRvY29tbWl0IG1vZGUgb2YgdGhlIHBoeXNpY2FsCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uIG9yIHJvbGxpbmcgYmFjayB0aGUgdHJhbnNhY3Rpb24KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCByb2xsYmFjaygpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7CkBAIC05MCw3ICs5MCw3IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgTG9jYWxUcmFuc2FjdGlvbkV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICAgICAgLy9HSkNJTlQKLQltYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOworICAgIG1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uLmphdmEKaW5kZXggMzBmNDYwYS4uMmRhZDU5YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9NYW5hZ2VkQ29ubmVjdGlvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb24uamF2YQpAQCAtNDEsOCArNDEsOCBAQAogLyoqCiAgKiA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW1wbGVtZW50YXRpb24gZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8yMgotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMjIKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIHB1YmxpYyBjbGFzcyBNYW5hZ2VkQ29ubmVjdGlvbiBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uIHsKIApAQCAtNTIsNyArNTIsNyBAQAogCiAgICAgcHJpdmF0ZSBib29sZWFuIGlzRGVzdHJveWVkID0gZmFsc2U7CiAgICAgcHJpdmF0ZSBib29sZWFuIGlzVXNhYmxlID0gdHJ1ZTsKLSAgICAKKwogICAgIHByaXZhdGUgaW50IGNvbm5lY3Rpb25UeXBlID0gSVNOT1RBUE9PTEVEQ09OTkVDVElPTjsKICAgICBwcml2YXRlIFBvb2xlZENvbm5lY3Rpb24gcGMgPSBudWxsOwogICAgIHByaXZhdGUgamF2YS5zcWwuQ29ubmVjdGlvbiBhY3R1YWxDb25uZWN0aW9uID0gbnVsbDsKQEAgLTYyLDcgKzYyLDcgQEAKICAgICBwcml2YXRlIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2YgPSBudWxsOwogICAgIHByaXZhdGUgWEFSZXNvdXJjZSB4YXIgPSBudWxsOwogICAgIHB1YmxpYyBDb25uZWN0aW9uSG9sZGVyIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGU7Ci0gICAgCisKICAgICAvL0dKQ0lOVAogICAgIHByaXZhdGUgaW50IGlzb2xhdGlvbkxldmVsV2hlbkNsZWFuZWQ7CiAgICAgcHJpdmF0ZSBib29sZWFuIGlzQ2xlYW4gPSBmYWxzZTsKQEAgLTc3LDcxICs3Nyw3MSBAQAogICAgIHN0YXRpYyB7CiAgICAgICAgIF9sb2dnZXIgPSBMb2dnZXIuZ2V0QW5vbnltb3VzTG9nZ2VyKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0b3IgZm9yIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPi4gVGhlIHBvb2xlZENvbm4gcGFyYW1ldGVyIGlzIGV4cGVjdGVkCi0gICAgICogdG8gYmUgbnVsbCBhbmQgc3FsQ29ubiBwYXJhbWV0ZXIgaXMgdGhlIGFjdHVhbCBjb25uZWN0aW9uIGluIGNhc2Ugd2hlcmUgCi0gICAgICogdGhlIGFjdHVhbCBjb25uZWN0aW9uIGlzIGdvdCBmcm9tIGEgbm9uIHBvb2xlZCBkYXRhc291cmNlIG9iamVjdC4gVGhlIAorICAgICAqIHRvIGJlIG51bGwgYW5kIHNxbENvbm4gcGFyYW1ldGVyIGlzIHRoZSBhY3R1YWwgY29ubmVjdGlvbiBpbiBjYXNlIHdoZXJlCisgICAgICogdGhlIGFjdHVhbCBjb25uZWN0aW9uIGlzIGdvdCBmcm9tIGEgbm9uIHBvb2xlZCBkYXRhc291cmNlIG9iamVjdC4gVGhlCiAgICAgICogcG9vbGVkQ29ubiBwYXJhbWV0ZXIgaXMgZXhwZWN0ZWQgdG8gYmUgbm9uIG51bGwgYW5kIHNxbENvbm4gcGFyYW1ldGVyCiAgICAgICogaXMgZXhwZWN0ZWQgdG8gYmUgbnVsbCBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgZGF0YXNvdXJjZSBvYmplY3QgaXMgYQogICAgICAqIGNvbm5lY3Rpb24gcG9vbCBkYXRhc291cmNlIG9yIGFuIHhhIGRhdGFzb3VyY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcG9vbGVkQ29ubgk8Y29kZT5Qb29sZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QgaW4gY2FzZSB0aGUgCi0gICAgICoJCQkJcGh5c2ljYWwgY29ubmVjdGlvbiBpcyB0byBiZSBvYnRhaW5lZCBmcm9tIGEgcG9vbGVkCi0gICAgICoJCQkJPGNvZGU+RGF0YVNvdXJjZTwvY29kZT47IG51bGwgb3RoZXJ3aXNlCi0gICAgICogQHBhcmFtCXNxbENvbm4JPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0IGluIGNhc2UgdGhlIHBoeXNpY2FsCi0gICAgICoJCQljb25uZWN0aW9uIGlzIHRvIGJlIG9idGFpbmVkIGZyb20gYSBub24gcG9vbGVkIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+OwotICAgICAqCQkJbnVsbCBvdGhlcndpc2UKLSAgICAgKiBAcGFyYW0JcGFzc3dkQ3JlZAlvYmplY3QgY29uYXRpbmluZyB0aGUKLSAgICAgKgkJCQl1c2VyIGFuZCBwYXNzd29yZCBmb3IgYWxsb2NhdGluZyB0aGUgY29ubmVjdGlvbgotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gb2JqZWN0Ci0gICAgICoJCQkJCXRoYXQgY3JlYXRlZCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBvYmplY3QKLSAgICAgKgkJCQkJaXMgbm90IHRoZSBzYW1lIGFzIHJldHVybmVkIGJ5IDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KLSAgICAgKgkJCQkJb2JqZWN0IHBhc3NlZAorICAgICAqIEBwYXJhbSAgICBwb29sZWRDb25uICAgIDxjb2RlPlBvb2xlZENvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpbiBjYXNlIHRoZQorICAgICAqICAgICAgICAgICAgICAgIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgdG8gYmUgb2J0YWluZWQgZnJvbSBhIHBvb2xlZAorICAgICAqICAgICAgICAgICAgICAgIDxjb2RlPkRhdGFTb3VyY2U8L2NvZGU+OyBudWxsIG90aGVyd2lzZQorICAgICAqIEBwYXJhbSAgICBzcWxDb25uICAgIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+IG9iamVjdCBpbiBjYXNlIHRoZSBwaHlzaWNhbAorICAgICAqICAgICAgICAgICAgY29ubmVjdGlvbiBpcyB0byBiZSBvYnRhaW5lZCBmcm9tIGEgbm9uIHBvb2xlZCA8Y29kZT5EYXRhU291cmNlPC9jb2RlPjsKKyAgICAgKiAgICAgICAgICAgIG51bGwgb3RoZXJ3aXNlCisgICAgICogQHBhcmFtICAgIHBhc3N3ZENyZWQgICAgb2JqZWN0IGNvbmF0aW5pbmcgdGhlCisgICAgICogICAgICAgICAgICAgICAgdXNlciBhbmQgcGFzc3dvcmQgZm9yIGFsbG9jYXRpbmcgdGhlIGNvbm5lY3Rpb24KKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IG9iamVjdAorICAgICAqICAgICAgICAgICAgICAgICAgICB0aGF0IGNyZWF0ZWQgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gb2JqZWN0CisgICAgICogICAgICAgICAgICAgICAgICAgIGlzIG5vdCB0aGUgc2FtZSBhcyByZXR1cm5lZCBieSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+CisgICAgICogICAgICAgICAgICAgICAgICAgIG9iamVjdCBwYXNzZWQKICAgICAgKi8KLSAgICBwdWJsaWMgTWFuYWdlZENvbm5lY3Rpb24oUG9vbGVkQ29ubmVjdGlvbiBwb29sZWRDb25uLCBqYXZhLnNxbC5Db25uZWN0aW9uIHNxbENvbm4sIAorICAgIHB1YmxpYyBNYW5hZ2VkQ29ubmVjdGlvbihQb29sZWRDb25uZWN0aW9uIHBvb2xlZENvbm4sIGphdmEuc3FsLkNvbm5lY3Rpb24gc3FsQ29ubiwKICAgICAgICAgUGFzc3dvcmRDcmVkZW50aWFsIHBhc3N3ZENyZWQsIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2YpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKHBvb2xlZENvbm4gPT0gbnVsbCAmJiBzcWxDb25uID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQ29ubmVjdGlvbiBvYmplY3QgY2Fubm90IGJlIG51bGwiKTsKICAgICAgICAgfQogCi0JaWYgKGNvbm5lY3Rpb25UeXBlID09IElTTk9UQVBPT0xFRENPTk5FQ1RJT04gKSB7Ci0JICAgIGFjdHVhbENvbm5lY3Rpb24gPSBzcWxDb25uOwotCX0KKyAgICBpZiAoY29ubmVjdGlvblR5cGUgPT0gSVNOT1RBUE9PTEVEQ09OTkVDVElPTiApIHsKKyAgICAgICAgYWN0dWFsQ29ubmVjdGlvbiA9IHNxbENvbm47CisgICAgfQogCiAgICAgICAgIHBjID0gcG9vbGVkQ29ubjsKICAgICAgICAgY29ubmVjdGlvbkhhbmRsZXMgPSBuZXcgSGFzaHRhYmxlKCk7CiAgICAgICAgIHBhc3N3ZENyZWRlbnRpYWwgPSBwYXNzd2RDcmVkOwogICAgICAgICB0aGlzLm1jZiA9IG1jZjsKLSAgICAgICAgaWYocGFzc3dkQ3JlZGVudGlhbCAhPSBudWxsICYmICAKKyAgICAgICAgaWYocGFzc3dkQ3JlZGVudGlhbCAhPSBudWxsICYmCiAgICAgICAgICAgICB0aGlzLm1jZi5lcXVhbHMocGFzc3dkQ3JlZGVudGlhbC5nZXRNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkoKSkgPT0gZmFsc2UpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiVGhlIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSB0aGF0IGhhcyBjcmVhdGVkIHRoaXMgIiArIAorICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IHRoYXQgaGFzIGNyZWF0ZWQgdGhpcyAiICsKICAgICAgICAgICAgICAgICAiTWFuYWdlZENvbm5lY3Rpb24gaXMgbm90IHRoZSBzYW1lIGFzIHRoZSBNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgcmV0dXJuZWQgYnkiICsKICAgICAgICAgICAgICAgICAgICAgIiB0aGUgUGFzc3dvcmRDcmVkZW50aWFsIGZvciB0aGlzIE1hbmFnZWRDb25uZWN0aW9uIik7CiAgICAgICAgIH0KICAgICAgICAgbG9nV3JpdGVyID0gbWNmLmdldExvZ1dyaXRlcigpOwogICAgICAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKLQljZSA9IG5ldyBDb25uZWN0aW9uRXZlbnQodGhpcywgQ29ubmVjdGlvbkV2ZW50LkNPTk5FQ1RJT05fQ0xPU0VEKTsKKyAgICBjZSA9IG5ldyBDb25uZWN0aW9uRXZlbnQodGhpcywgQ29ubmVjdGlvbkV2ZW50LkNPTk5FQ1RJT05fQ0xPU0VEKTsKICAgICB9CiAKICAgICAvKioKICAgICAgKiBBZGRzIGEgY29ubmVjdGlvbiBldmVudCBsaXN0ZW5lciB0byB0aGUgTWFuYWdlZENvbm5lY3Rpb24gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbGlzdGVuZXIJPGNvZGU+Q29ubmVjdGlvbkV2ZW50TGlzdGVuZXI8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGxpc3RlbmVyICAgIDxjb2RlPkNvbm5lY3Rpb25FdmVudExpc3RlbmVyPC9jb2RlPgogICAgICAqIEBzZWUgPGNvZGU+cmVtb3ZlQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgYWRkQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXIoQ29ubmVjdGlvbkV2ZW50TGlzdGVuZXIgbGlzdGVuZXIpIHsKLQl0aGlzLmxpc3RlbmVyID0gbGlzdGVuZXI7CisgICAgdGhpcy5saXN0ZW5lciA9IGxpc3RlbmVyOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFVzZWQgYnkgdGhlIGNvbnRhaW5lciB0byBjaGFuZ2UgdGhlIGFzc29jaWF0aW9uIG9mIGFuIGFwcGxpY2F0aW9uLWxldmVsIAorICAgICAqIFVzZWQgYnkgdGhlIGNvbnRhaW5lciB0byBjaGFuZ2UgdGhlIGFzc29jaWF0aW9uIG9mIGFuIGFwcGxpY2F0aW9uLWxldmVsCiAgICAgICogY29ubmVjdGlvbiBoYW5kbGUgd2l0aCBhIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQljb25uZWN0aW9uCTxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRvIGJlIGFzc29jaWF0ZWQgd2l0aAotICAgICAqCQkJCXRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBubyBtb3JlCi0gICAgICoJCQkJCXZhbGlkIG9yIHRoZSBjb25uZWN0aW9uIGhhbmRsZSBwYXNzZWQgaXMgbnVsbAorICAgICAqIEBwYXJhbSAgICBjb25uZWN0aW9uICAgIDxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRvIGJlIGFzc29jaWF0ZWQgd2l0aAorICAgICAqICAgICAgICAgICAgICAgIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiBpcyBubyBtb3JlCisgICAgICogICAgICAgICAgICAgICAgICAgIHZhbGlkIG9yIHRoZSBjb25uZWN0aW9uIGhhbmRsZSBwYXNzZWQgaXMgbnVsbAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGFzc29jaWF0ZUNvbm5lY3Rpb24oT2JqZWN0IGNvbm5lY3Rpb24pIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CkBAIC0xNTIsMTEgKzE1MiwxMSBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJDb25uZWN0aW9uIGhhbmRsZSBjYW5ub3QgYmUgbnVsbCIpOwogICAgICAgICB9CiAgICAgICAgIENvbm5lY3Rpb25Ib2xkZXIgY2ggPSAoQ29ubmVjdGlvbkhvbGRlcikgY29ubmVjdGlvbjsKLSAgICAgICAgCisKICAgICAgICAgY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uIG1jID0gKGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbiljaC5nZXRNYW5hZ2VkQ29ubmVjdGlvbigpOwotCW1jLmFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOwotCWlzQ2xlYW4gPSBmYWxzZTsKLSAgICAgICAgCisgICAgbWMuYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7CisgICAgaXNDbGVhbiA9IGZhbHNlOworCiAgICAgICAgIGNoLmFzc29jaWF0ZUNvbm5lY3Rpb24oYWN0dWFsQ29ubmVjdGlvbiwgdGhpcyk7CiAgICAgICAgIC8qKgogICAgICAgICAgKiBUaGUgZXhwZWN0YXRpb24gZnJvbSB0aGUgYWJvdmUgbWV0aG9kIGlzIHRoYXQgdGhlIGNvbm5lY3Rpb24gaG9sZGVyCkBAIC0xNjUsMzQgKzE2NSwzNCBAQAogICAgICAgICAgKiB0byB0aGUgTWFuYWdlZENvbm5lY3Rpb24gaW5zdGFuY2Ugd2l0aCB0aGlzIE1hbmFnZWRDb25uZWN0aW9uIGluc3RhbmNlLgogICAgICAgICAgKiBBbnkgcHJldmlvdXMgc3RhdGVtZW50cyBhbmQgcmVzdWx0IHNldHMgYWxzbyBuZWVkIHRvIGJlIHJlbW92ZWQuCiAgICAgICAgICAqLwotICAgICAgICAgCisKICAgICAgICAgIGlmKGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgIT0gbnVsbCkgewogICAgICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZS5zZXRBY3RpdmUoZmFsc2UpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGNoLnNldEFjdGl2ZSh0cnVlKTsKLSAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IGNoOyAKKyAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IGNoOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIEFwcGxpY2F0aW9uIHNlcnZlciBjYWxscyB0aGlzIG1ldGhvZCB0byBmb3JjZSBhbnkgY2xlYW51cCBvbiB0aGUgCisgICAgICogQXBwbGljYXRpb24gc2VydmVyIGNhbGxzIHRoaXMgbWV0aG9kIHRvIGZvcmNlIGFueSBjbGVhbnVwIG9uIHRoZQogICAgICAqIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4gVGhpcyBtZXRob2QgY2FsbHMgdGhlIGludmFsaWRhdGUKICAgICAgKiBtZXRob2Qgb24gYWxsIENvbm5lY3Rpb25IYW5kbGVzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPi4KLSAgICAgKiAKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vIG1vcmUgdmFsaWQKKyAgICAgKgorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm8gbW9yZSB2YWxpZAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNsZWFudXAoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBjbGVhbnVwIik7CiAgICAgICAgIH0KICAgICAgICAgY2hlY2tJZlZhbGlkKCk7Ci0gICAgICAgIAorCiAgICAgICAgIC8qKgogICAgICAgICAgKiBtYXkgbmVlZCB0byBzZXQgdGhlIGF1dG9jb21taXQgdG8gdHJ1ZSBmb3IgdGhlIG5vbi1wb29sZWQgY2FzZS4KICAgICAgICAgICovCiAgICAgICAgIC8vR0pDSU5UCi0JLy9pZiAoYWN0dWFsQ29ubmVjdGlvbiAhPSBudWxsKSB7Ci0JaWYgKGNvbm5lY3Rpb25UeXBlID09IElTTk9UQVBPT0xFRENPTk5FQ1RJT04gKSB7CisgICAgLy9pZiAoYWN0dWFsQ29ubmVjdGlvbiAhPSBudWxsKSB7CisgICAgaWYgKGNvbm5lY3Rpb25UeXBlID09IElTTk9UQVBPT0xFRENPTk5FQ1RJT04gKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpc29sYXRpb25MZXZlbFdoZW5DbGVhbmVkID0gYWN0dWFsQ29ubmVjdGlvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpOwogICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7CkBAIC0yMDEsMTcgKzIwMSwxNyBAQAogICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaXNDbGVhbiA9IHRydWU7Ci0gICAgICAgIAorCiAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRoaXMgbWV0aG9kIHJlbW92ZXMgYWxsIHRoZSBjb25uZWN0aW9uIGhhbmRsZXMgZnJvbSB0aGUgdGFibGUKICAgICAgKiBvZiBjb25uZWN0aW9uIGhhbmRsZXMgYW5kIGludmFsaWRhdGVzIGFsbCBvZiB0aGVtIHNvIHRoYXQgYW55CiAgICAgICogb3BlcmF0aW9uIG9uIHRob3NlIGNvbm5lY3Rpb24gaGFuZGxlcyB0aHJvd3MgYW4gZXhjZXB0aW9uLgogICAgICAqCi0gICAgICogQHRocm93cwlSZXNvdXJjZUV4Y2VwdGlvbglpZiB0aGVyZSBpcyBhIHByb2JsZW0gaW4gcmV0cmlldmluZwotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJdGhlIGNvbm5lY3Rpb24gaGFuZGxlcworICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYSBwcm9ibGVtIGluIHJldHJpZXZpbmcKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb25uZWN0aW9uIGhhbmRsZXMKICAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgaW52YWxpZGF0ZUFsbENvbm5lY3Rpb25IYW5kbGVzKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgU2V0IGhhbmRsZXMgPSBjb25uZWN0aW9uSGFuZGxlcy5rZXlTZXQoKTsKQEAgLTIyNiwyMiArMjI2LDIyIEBACiAgICAgICAgIH0KICAgICAgICAgY29ubmVjdGlvbkhhbmRsZXMuY2xlYXIoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBEZXN0cm95cyB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiB0byB0aGUgdW5kZXJseWluZyByZXNvdXJjZSBtYW5hZ2VyLgotICAgICAqIAotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gY2xvc2luZyB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbgorICAgICAqCisgICAgICogQHRocm93cyAgICBSZXNvdXJjZUV4Y2VwdGlvbiAgICBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBjbG9zaW5nIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBkZXN0cm95Iik7CiAgICAgICAgIH0KLQkvL0dKQ0lOVAotCWlmKGlzRGVzdHJveWVkID09IHRydWUpIHsKLQkgICAgcmV0dXJuOwkKLQl9CisgICAgLy9HSkNJTlQKKyAgICBpZihpc0Rlc3Ryb3llZCA9PSB0cnVlKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLQlhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKKyAgICBhY3RpdmVDb25uZWN0aW9uSGFuZGxlID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGlmKGNvbm5lY3Rpb25UeXBlID09IElTWEFDT05ORUNUSU9OIHx8IGNvbm5lY3Rpb25UeXBlID09IElTUE9PTEVEQ09OTkVDVElPTikgewogICAgICAgICAgICAgICAgIHBjLmNsb3NlKCk7CkBAIC0yNTUsMjggKzI1NSwyOCBAQAogICAgICAgICAgICAgaXNEZXN0cm95ZWQgPSB0cnVlOwogICAgICAgICAgICAgcGFzc3dkQ3JlZGVudGlhbCA9IG51bGw7CiAgICAgICAgICAgICBjb25uZWN0aW9uSGFuZGxlcyA9IG51bGw7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoZSBmb2xsb3dpbmcgZXhjZXB0aW9uIGhhcyBvY2N1cmVkIGR1cmluZyBkZXN0cm95OiAiIAorICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJUaGUgZm9sbG93aW5nIGV4Y2VwdGlvbiBoYXMgb2NjdXJlZCBkdXJpbmcgZGVzdHJveTogIgogICAgICAgICAgICAgICAgICsgc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgICAgIGlzRGVzdHJveWVkID0gdHJ1ZTsKICAgICAgICAgcGFzc3dkQ3JlZGVudGlhbCA9IG51bGw7CiAgICAgICAgIGNvbm5lY3Rpb25IYW5kbGVzID0gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgbmV3IGNvbm5lY3Rpb24gaGFuZGxlIGZvciB0aGUgdW5kZXJseWluZyBwaHlzaWNhbCAKKyAgICAgKiBDcmVhdGVzIGEgbmV3IGNvbm5lY3Rpb24gaGFuZGxlIGZvciB0aGUgdW5kZXJseWluZyBwaHlzaWNhbAogICAgICAqIGNvbm5lY3Rpb24gcmVwcmVzZW50ZWQgYnkgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEBwYXJhbQlzdWJqZWN0CTxjb2RlPlN1YmplY3Q8L2NvZGU+IHBhcmFtZXRlciBuZWVkZWQgZm9yIGF1dGhlbnRpY2F0aW9uCi0gICAgICogQHBhcmFtCWN4UmVxSW5mbwk8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IGNhcnJpZXMgdGhlIHVzZXIgCi0gICAgICogICAgICAgCSAgICAgICAgIAlhbmQgcGFzc3dvcmQgcmVxdWlyZWQgZm9yIGdldHRpbmcgdGhpcyBjb25uZWN0aW9uLgotICAgICAqIEByZXR1cm4JQ29ubmVjdGlvbgl0aGUgY29ubmVjdGlvbiBoYW5kbGUgPGNvZGU+T2JqZWN0PC9jb2RlPgotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUgCi0gICAgICogICAgICAgIAkgICAgICAgICAgICAgICAgIAlwaHlzaWNhbCBjb25uZWN0aW9uIGZyb20gdGhlIHBvb2xlZCBjb25uZWN0aW9uIAotICAgICAqIEB0aHJvd3MJU2VjdXJpdHlFeGNlcHRpb24JaWYgdGhlcmUgaXMgYSBtaXNtYXRjaCBiZXR3ZWVuIHRoZQotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJcGFzc3dvcmQgY3JlZGVudGlhbHMgb3IgcmVhdXRoZW50aWNhdGlvbiBpcyByZXF1ZXN0ZWQKKyAgICAgKiBAcGFyYW0gICAgc3ViamVjdCAgICA8Y29kZT5TdWJqZWN0PC9jb2RlPiBwYXJhbWV0ZXIgbmVlZGVkIGZvciBhdXRoZW50aWNhdGlvbgorICAgICAqIEBwYXJhbSAgICBjeFJlcUluZm8gICAgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBjYXJyaWVzIHRoZSB1c2VyCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICBhbmQgcGFzc3dvcmQgcmVxdWlyZWQgZm9yIGdldHRpbmcgdGhpcyBjb25uZWN0aW9uLgorICAgICAqIEByZXR1cm4gICAgQ29ubmVjdGlvbiAgICB0aGUgY29ubmVjdGlvbiBoYW5kbGUgPGNvZGU+T2JqZWN0PC9jb2RlPgorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYWxsb2NhdGluZyB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoeXNpY2FsIGNvbm5lY3Rpb24gZnJvbSB0aGUgcG9vbGVkIGNvbm5lY3Rpb24KKyAgICAgKiBAdGhyb3dzICAgIFNlY3VyaXR5RXhjZXB0aW9uICAgIGlmIHRoZXJlIGlzIGEgbWlzbWF0Y2ggYmV0d2VlbiB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkIGNyZWRlbnRpYWxzIG9yIHJlYXV0aGVudGljYXRpb24gaXMgcmVxdWVzdGVkCiAgICAgICovCi0gICAgcHVibGljIE9iamVjdCBnZXRDb25uZWN0aW9uKFN1YmplY3Qgc3ViLCBqYWthcnRhLnJlc291cmNlLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm8gY3hSZXFJbmZvKSAKKyAgICBwdWJsaWMgT2JqZWN0IGdldENvbm5lY3Rpb24oU3ViamVjdCBzdWIsIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mbyBjeFJlcUluZm8pCiAgICAgICAgIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKGxvZ1dyaXRlciAhPSBudWxsKSB7CiAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gZ2V0Q29ubmVjdGlvbiIpOwpAQCAtMjg0LDE0ICsyODQsMTQgQEAKICAgICAgICAgY2hlY2tJZlZhbGlkKCk7CiAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uUmVxdWVzdEluZm8gY3hSZXF1ZXN0SW5mbyA9IChjb20uc3VuLmpkYmNyYS5zcGkuQ29ubmVjdGlvblJlcXVlc3RJbmZvKSBjeFJlcUluZm87CiAgICAgICAgIFBhc3N3b3JkQ3JlZGVudGlhbCBwYXNzd2RDcmVkID0gU2VjdXJpdHlVdGlscy5nZXRQYXNzd29yZENyZWRlbnRpYWwodGhpcy5tY2YsIHN1YiwgY3hSZXF1ZXN0SW5mbyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICBpZihTZWN1cml0eVV0aWxzLmlzUGFzc3dvcmRDcmVkZW50aWFsRXF1YWwodGhpcy5wYXNzd2RDcmVkZW50aWFsLCBwYXNzd2RDcmVkKSA9PSBmYWxzZSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IGpha2FydGEucmVzb3VyY2Uuc3BpLlNlY3VyaXR5RXhjZXB0aW9uKCJSZS1hdXRoZW50aWNhdGlvbiBub3Qgc3VwcG9ydGVkIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgLy9HSkNJTlQKICAgICAgICAgZ2V0QWN0dWFsQ29ubmVjdGlvbigpOwotIAorCiAgICAgICAgIC8qKgogICAgICAgICAgKiBUaGUgZm9sbG93aW5nIGNvZGUgaW4gdGhlIGlmIHN0YXRlbWVudCBmaXJzdCBjaGVja3MgaWYgdGhpcyBNYW5hZ2VkQ29ubmVjdGlvbgogICAgICAgICAgKiBpcyBjbGVhbiBvciBub3QuIElmIGl0IGlzLCBpdCByZXNldHMgdGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbCB0byB3aGF0CkBAIC0zMDEsMjggKzMwMSwyOCBAQAogICAgICAgICBpZihpc0NsZWFuKSB7CiAgICAgICAgICAgICAoKGNvbS5zdW4uamRiY3JhLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkpbWNmKS5yZXNldElzb2xhdGlvbih0aGlzLCBpc29sYXRpb25MZXZlbFdoZW5DbGVhbmVkKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgIAorCisKICAgICAgICAgQ29ubmVjdGlvbkhvbGRlciBjb25uSG9sZGVyT2JqZWN0ID0gbmV3IENvbm5lY3Rpb25Ib2xkZXIoYWN0dWFsQ29ubmVjdGlvbiwgdGhpcyk7Ci0JaXNDbGVhbj1mYWxzZTsKLSAgICAgICAgCisgICAgaXNDbGVhbj1mYWxzZTsKKwogICAgICAgICBpZihhY3RpdmVDb25uZWN0aW9uSGFuZGxlICE9IG51bGwpIHsKICAgICAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUuc2V0QWN0aXZlKGZhbHNlKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBjb25uSG9sZGVyT2JqZWN0LnNldEFjdGl2ZSh0cnVlKTsKICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IGNvbm5Ib2xkZXJPYmplY3Q7Ci0gCisKICAgICAgICAgcmV0dXJuIGNvbm5Ib2xkZXJPYmplY3Q7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBhbiA8Y29kZT5Mb2NhbFRyYW5zYWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4gVGhlIDxjb2RlPkxvY2FsVHJhbnNhY3Rpb248L2NvZGU+IGludGVyZmFjZQotICAgICAqIGlzIHVzZWQgYnkgdGhlIGNvbnRhaW5lciB0byBtYW5hZ2UgbG9jYWwgdHJhbnNhY3Rpb25zIGZvciBhIFJNIGluc3RhbmNlLiAKKyAgICAgKiBpcyB1c2VkIGJ5IHRoZSBjb250YWluZXIgdG8gbWFuYWdlIGxvY2FsIHRyYW5zYWN0aW9ucyBmb3IgYSBSTSBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqIEByZXR1cm4gICAgPGNvZGU+TG9jYWxUcmFuc2FjdGlvbjwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqLwogICAgIHB1YmxpYyBqYWthcnRhLnJlc291cmNlLnNwaS5Mb2NhbFRyYW5zYWN0aW9uIGdldExvY2FsVHJhbnNhY3Rpb24oKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewpAQCAtMzMxLDEzICszMzEsMTMgQEAKICAgICAgICAgY2hlY2tJZlZhbGlkKCk7CiAgICAgICAgIHJldHVybiBuZXcgY29tLnN1bi5qZGJjcmEuc3BpLkxvY2FsVHJhbnNhY3Rpb24odGhpcyk7CiAgICAgfQotICAgICAKKwogICAgIC8qKgotICAgICAqIEdldHMgdGhlIGxvZyB3cml0ZXIgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLiAKKyAgICAgKiBHZXRzIHRoZSBsb2cgd3JpdGVyIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIAotICAgICAqCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqIEByZXR1cm4gICAgPGNvZGU+UHJpbnRXcml0ZXI8L2NvZGU+IGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzCisgICAgICogICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCiAgICAgICogQHNlZSA8Y29kZT5zZXRMb2dXcml0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIFByaW50V3JpdGVyIGdldExvZ1dyaXRlcigpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CkBAIC0zNDUsNDYgKzM0NSw0NiBAQAogICAgICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBnZXRMb2dXcml0ZXIiKTsKICAgICAgICAgfQogICAgICAgICBjaGVja0lmVmFsaWQoKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGxvZ1dyaXRlcjsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBtZXRhZGF0YSBpbmZvcm1hdGlvbiBmb3IgdGhpcyBjb25uZWN0aW9uJ3MgdW5kZXJseWluZyBFSVMgCi0gICAgICogcmVzb3VyY2UgbWFuYWdlciBpbnN0YW5jZS4gCisgICAgICogR2V0cyB0aGUgbWV0YWRhdGEgaW5mb3JtYXRpb24gZm9yIHRoaXMgY29ubmVjdGlvbidzIHVuZGVybHlpbmcgRUlTCisgICAgICogcmVzb3VyY2UgbWFuYWdlciBpbnN0YW5jZS4KICAgICAgKgotICAgICAqIEByZXR1cm4JPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YTwvY29kZT4gaW5zdGFuY2UKLSAgICAgKiBAdGhyb3dzCVJlc291cmNlRXhjZXB0aW9uCWlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAorICAgICAqIEByZXR1cm4gICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YTwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZAogICAgICAqLwogICAgIHB1YmxpYyBqYWthcnRhLnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhIGdldE1ldGFEYXRhKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgaWYobG9nV3JpdGVyICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBsb2dXcml0ZXIucHJpbnRsbigiSW4gZ2V0TWV0YURhdGEiKTsKICAgICAgICAgfQogICAgICAgICBjaGVja0lmVmFsaWQoKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIG5ldyBjb20uc3VuLmpkYmNyYS5zcGkuTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YSh0aGlzKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIGFuIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlLiAKKyAgICAgKiBSZXR1cm5zIGFuIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIG9yCi0gICAgICoJCQkJCXRoZXJlIGlzIGFuIGVycm9yIGluIGFsbG9jYXRpbmcgdGhlIAotICAgICAqCQkJCQk8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJTm90U3VwcG9ydGVkRXhjZXB0aW9uCWlmIHVuZGVybHlpbmcgZGF0YXNvdXJjZSBpcyBub3QgYW4KLSAgICAgKgkJCQkJPGNvZGU+WEFEYXRhU291cmNlPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIHRoZSBwaHlzaWNhbCBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBvcgorICAgICAqICAgICAgICAgICAgICAgICAgICB0aGVyZSBpcyBhbiBlcnJvciBpbiBhbGxvY2F0aW5nIHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgTm90U3VwcG9ydGVkRXhjZXB0aW9uICAgIGlmIHVuZGVybHlpbmcgZGF0YXNvdXJjZSBpcyBub3QgYW4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgPGNvZGU+WEFEYXRhU291cmNlPC9jb2RlPgogICAgICAqLwogICAgIHB1YmxpYyBYQVJlc291cmNlIGdldFhBUmVzb3VyY2UoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihsb2dXcml0ZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGxvZ1dyaXRlci5wcmludGxuKCJJbiBnZXRYQVJlc291cmNlIik7CiAgICAgICAgIH0KICAgICAgICAgY2hlY2tJZlZhbGlkKCk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKGNvbm5lY3Rpb25UeXBlID09IElTWEFDT05ORUNUSU9OKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGlmKHhhciA9PSBudWxsKSB7Ci0JCSAgICAvKioKKyAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgICAgICAgICAgKiBVc2luZyB0aGUgd3JhcHBlciBYQVJlc291cmNlLgogICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICAgeGFyID0gbmV3IGNvbS5zdW4uamRiY3JhLnNwaS5YQVJlc291cmNlSW1wbCgoKFhBQ29ubmVjdGlvbilwYykuZ2V0WEFSZXNvdXJjZSgpLCB0aGlzKTsKQEAgLTM5NywxNiArMzk3LDE2IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJDYW5ub3QgZ2V0IGFuIFhBUmVzb3VyY2UgZnJvbSBhIG5vbiBYQSBjb25uZWN0aW9uIik7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZW1vdmVzIGFuIGFscmVhZHkgcmVnaXN0ZXJlZCBjb25uZWN0aW9uIGV2ZW50IGxpc3RlbmVyIGZyb20gdGhlCiAgICAgICogPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCWxpc3RlbmVyCTxjb2RlPkNvbm5lY3Rpb25FdmVudExpc3RlbmVyPC9jb2RlPiB0byBiZSByZW1vdmVkCisgICAgICogQHBhcmFtICAgIGxpc3RlbmVyICAgIDxjb2RlPkNvbm5lY3Rpb25FdmVudExpc3RlbmVyPC9jb2RlPiB0byBiZSByZW1vdmVkCiAgICAgICogQHNlZSA8Y29kZT5hZGRDb25uZWN0aW9uRXZlbnRMaXN0ZW5lcjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCByZW1vdmVDb25uZWN0aW9uRXZlbnRMaXN0ZW5lcihDb25uZWN0aW9uRXZlbnRMaXN0ZW5lciBsaXN0ZW5lcikgewotCWxpc3RlbmVyID0gbnVsbDsKKyAgICBsaXN0ZW5lciA9IG51bGw7CiAgICAgfQogCiAgICAgLyoqCkBAIC00MTUsNyArNDE1LDcgQEAKICAgICAgKiBMb2NhbFRyYW5zYWN0aW9uIG9iamVjdCB3aGVuIGl0cyBiZWdpbigpIG1ldGhvZCBpcyBjYWxsZWQuCiAgICAgICovCiAgICAgdm9pZCB0cmFuc2FjdGlvblN0YXJ0ZWQoKSB7Ci0JdHJhbnNhY3Rpb25JblByb2dyZXNzID0gdHJ1ZTsJCisgICAgdHJhbnNhY3Rpb25JblByb2dyZXNzID0gdHJ1ZTsKICAgICB9CiAKICAgICAvKioKQEAgLTQyNCwxNiArNDI0LDE2IEBACiAgICAgICogTG9jYWxUcmFuc2FjdGlvbiBvYmplY3Qgd2hlbiBpdHMgZW5kKCkgbWV0aG9kIGlzIGNhbGxlZC4KICAgICAgKi8KICAgICB2b2lkIHRyYW5zYWN0aW9uQ29tcGxldGVkKCkgewotCXRyYW5zYWN0aW9uSW5Qcm9ncmVzcyA9IGZhbHNlOwotCWlmKGNvbm5lY3Rpb25UeXBlID09IElTUE9PTEVEQ09OTkVDVElPTiB8fCBjb25uZWN0aW9uVHlwZSA9PSBJU1hBQ09OTkVDVElPTikgeworICAgIHRyYW5zYWN0aW9uSW5Qcm9ncmVzcyA9IGZhbHNlOworICAgIGlmKGNvbm5lY3Rpb25UeXBlID09IElTUE9PTEVEQ09OTkVDVElPTiB8fCBjb25uZWN0aW9uVHlwZSA9PSBJU1hBQ09OTkVDVElPTikgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBpc29sYXRpb25MZXZlbFdoZW5DbGVhbmVkID0gYWN0dWFsQ29ubmVjdGlvbi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpOwogICAgICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICAgICAgLy9jaGVjayB3aGF0IHRvIGRvIGluIHRoaXMgY2FzZSEhCi0JCV9sb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJqZGJjLm5vdGdvdF90eF9pc29sdmwiKTsKKyAgICAgICAgICAgIC8vY2hlY2sgd2hhdCB0byBkbyBpbiB0aGlzIGNhc2UhIQorICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiamRiYy5ub3Rnb3RfdHhfaXNvbHZsIik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLQkgICAgdHJ5IHsKKworICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGFjdHVhbENvbm5lY3Rpb24uY2xvc2UoKTsKICAgICAgICAgICAgICAgICBhY3R1YWxDb25uZWN0aW9uID0gbnVsbDsKICAgICAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKQEAgLTQ0MSw3ICs0NDEsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLQkgICAgICAgIAorCiAgICAgICAgIGlzQ2xlYW4gPSB0cnVlOwogCiAgICAgICAgIGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPSBudWxsOwpAQCAtNDUzLDI4ICs0NTMsMjggQEAKICAgICAgKiBvciBub3QuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gaXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSB7Ci0JcmV0dXJuIHRyYW5zYWN0aW9uSW5Qcm9ncmVzczsKKyAgICByZXR1cm4gdHJhbnNhY3Rpb25JblByb2dyZXNzOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGxvZyB3cml0ZXIgZm9yIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHBhcmFtCW91dAk8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMKLSAgICAgKgkJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCisgICAgICogQHBhcmFtICAgIG91dCAgICA8Y29kZT5QcmludFdyaXRlcjwvY29kZT4gdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyAgICAgKiAgICAgICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQorICAgICAqIEB0aHJvd3MgICAgUmVzb3VyY2VFeGNlcHRpb24gICAgaWYgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkCiAgICAgICogQHNlZSA8Y29kZT5nZXRMb2dXcml0ZXI8L2NvZGU+CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TG9nV3JpdGVyKFByaW50V3JpdGVyIG91dCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgY2hlY2tJZlZhbGlkKCk7CiAgICAgICAgIGxvZ1dyaXRlciA9IG91dDsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBUaGlzIG1ldGhvZCBkZXRlcm1pbmVzIHRoZSB0eXBlIG9mIHRoZSBjb25uZWN0aW9uIGJlaW5nIGhlbGQgCisgICAgICogVGhpcyBtZXRob2QgZGV0ZXJtaW5lcyB0aGUgdHlwZSBvZiB0aGUgY29ubmVjdGlvbiBiZWluZyBoZWxkCiAgICAgICogaW4gdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4uCi0gICAgICogCi0gICAgICogQHBhcmFtCXBvb2xlZENvbm4JPGNvZGU+UG9vbGVkQ29ubmVjdGlvbjwvY29kZT4KLSAgICAgKiBAcmV0dXJuCWNvbm5lY3Rpb24gdHlwZQorICAgICAqCisgICAgICogQHBhcmFtICAgIHBvb2xlZENvbm4gICAgPGNvZGU+UG9vbGVkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIGNvbm5lY3Rpb24gdHlwZQogICAgICAqLwogICAgIHByaXZhdGUgaW50IGdldENvbm5lY3Rpb25UeXBlKFBvb2xlZENvbm5lY3Rpb24gcG9vbGVkQ29ubikgewogICAgICAgICBpZihwb29sZWRDb25uID09IG51bGwpIHsKQEAgLTQ4NSwyMiArNDg1LDIyIEBACiAgICAgICAgICAgICByZXR1cm4gSVNQT09MRURDT05ORUNUSU9OOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiBpbnN0YW5jZSB0aGF0IAorICAgICAqIFJldHVybnMgdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UgdGhhdAogICAgICAqIGNyZWF0ZWQgdGhpcyA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4gaW5zdGFuY2UgdGhhdCBjcmVhdGVkIHRoaXMKLSAgICAgKgkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCisgICAgICogQHJldHVybiAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+IGluc3RhbmNlIHRoYXQgY3JlYXRlZCB0aGlzCisgICAgICogICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZQogICAgICAqLwogICAgIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBnZXRNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkoKSB7CiAgICAgICAgIHJldHVybiAoY29tLnN1bi5qZGJjcmEuc3BpLk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSltY2Y7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgYWN0dWFsIHNxbCBjb25uZWN0aW9uIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPi4gCisgICAgICogUmV0dXJucyB0aGUgYWN0dWFsIHNxbCBjb25uZWN0aW9uIGZvciB0aGlzIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPi4KICAgICAgKgotICAgICAqIEByZXR1cm4JdGhlIHBoeXNpY2FsIDxjb2RlPmphdmEuc3FsLkNvbm5lY3Rpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICB0aGUgcGh5c2ljYWwgPGNvZGU+amF2YS5zcWwuQ29ubmVjdGlvbjwvY29kZT4KICAgICAgKi8KICAgICAvL0dKQ0lOVAogICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gZ2V0QWN0dWFsQ29ubmVjdGlvbigpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiB7CkBAIC01MDksOCArNTA5LDggQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgaWYoYWN0dWFsQ29ubmVjdGlvbiA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIGFjdHVhbENvbm5lY3Rpb24gPSBwYy5nZXRDb25uZWN0aW9uKCk7Ci0JCX0KLQkJCisgICAgICAgIH0KKwogICAgICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewogICAgICAgICAgICAgICAgIHNxbGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKQEAgLTUxOCw4MSArNTE4LDgxIEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGFjdHVhbENvbm5lY3Rpb247CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+LgogICAgICAqCi0gICAgICogQHJldHVybgk8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aCB0aGlzIAotICAgICAqCQk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2UKKyAgICAgKiBAcmV0dXJuICAgIDxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4gYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyAgICAgKiAgICAgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlCiAgICAgICovCiAgICAgUGFzc3dvcmRDcmVkZW50aWFsIGdldFBhc3N3b3JkQ3JlZGVudGlhbCgpIHsKICAgICAgICAgcmV0dXJuIHBhc3N3ZENyZWRlbnRpYWw7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2hlY2tzIGlmIHRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGlzIHZhbGlkIG9yIG5vdCBhbmQgdGhyb3dzIGFuCiAgICAgICogZXhjZXB0aW9uIGlmIGl0IGlzIG5vdCB2YWxpZC4gQSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaXMgbm90IHZhbGlkIGlmCiAgICAgICogZGVzdHJveSBoYXMgbm90IGJlZW4gY2FsbGVkIGFuZCBubyBwaHlzaWNhbCBjb25uZWN0aW9uIGVycm9yIGhhcwogICAgICAqIG9jY3VycmVkIHJlbmRlcmluZyB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbiB1bnVzYWJsZS4KICAgICAgKgotICAgICAqIEB0aHJvd3MJUmVzb3VyY2VFeGNlcHRpb24JaWYgPGNvZGU+ZGVzdHJveTwvY29kZT4gaGFzIGJlZW4gY2FsbGVkIG9uIHRoaXMgCi0gICAgICoJCQkJCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZSBvciBpZiBhIAotICAgICAqICAgICAgICAJICAgICAgICAgICAgICAgICAJcGh5c2ljYWwgY29ubmVjdGlvbiBlcnJvciBvY2N1cnJlZCByZW5kZXJpbmcgaXQgdW51c2FibGUKKyAgICAgKiBAdGhyb3dzICAgIFJlc291cmNlRXhjZXB0aW9uICAgIGlmIDxjb2RlPmRlc3Ryb3k8L2NvZGU+IGhhcyBiZWVuIGNhbGxlZCBvbiB0aGlzCisgICAgICogICAgICAgICAgICAgICAgICAgIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uPC9jb2RlPiBpbnN0YW5jZSBvciBpZiBhCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaHlzaWNhbCBjb25uZWN0aW9uIGVycm9yIG9jY3VycmVkIHJlbmRlcmluZyBpdCB1bnVzYWJsZQogICAgICAqLwogICAgIC8vR0pDSU5UCiAgICAgdm9pZCBjaGVja0lmVmFsaWQoKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICBpZihpc0Rlc3Ryb3llZCA9PSB0cnVlIHx8IGlzVXNhYmxlID09IGZhbHNlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoaXMgTWFuYWdlZENvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzIHRoZSBwaHlzaWNhbCAiICsgCisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIlRoaXMgTWFuYWdlZENvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzIHRoZSBwaHlzaWNhbCAiICsKICAgICAgICAgICAgICAgICAiY29ubmVjdGlvbiBpcyBub3QgdXNhYmxlLiIpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSA8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB3aGVuIGl0cyBjbG9zZSBtZXRob2QgaXMKICAgICAgKiBjYWxsZWQuIFRoaXMgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlICBpbnZhbGlkYXRlcyB0aGUgY29ubmVjdGlvbiBoYW5kbGUKICAgICAgKiBhbmQgc2VuZHMgYSBDT05ORUNUSU9OX0NMT1NFRCBldmVudCB0byBhbGwgdGhlIHJlZ2lzdGVyZWQgZXZlbnQgbGlzdGVuZXJzLgogICAgICAqCi0gICAgICogQHBhcmFtCWUJRXhjZXB0aW9uIHRoYXQgbWF5IGhhdmUgb2NjdXJlZCB3aGlsZSBjbG9zaW5nIHRoZSBjb25uZWN0aW9uIGhhbmRsZQotICAgICAqIEBwYXJhbQljb25uSG9sZGVyT2JqZWN0CTxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRoYXQgaGFzIGJlZW4gY2xvc2VkCi0gICAgICogQHRocm93cwlTUUxFeGNlcHRpb24JaW4gY2FzZSBjbG9zaW5nIHRoZSBzcWwgY29ubmVjdGlvbiBnb3Qgb3V0IG9mCi0gICAgICogICAgICAgICAJICAgICAgICAgICAgCTxjb2RlPmdldENvbm5lY3Rpb248L2NvZGU+IG9uIHRoZSB1bmRlcmx5aW5nIAotICAgICAqCQkJCTxjb2RlPlBvb2xlZENvbm5lY3Rpb248L2NvZGU+IHRocm93cyBhbiBleGNlcHRpb24KKyAgICAgKiBAcGFyYW0gICAgZSAgICBFeGNlcHRpb24gdGhhdCBtYXkgaGF2ZSBvY2N1cmVkIHdoaWxlIGNsb3NpbmcgdGhlIGNvbm5lY3Rpb24gaGFuZGxlCisgICAgICogQHBhcmFtICAgIGNvbm5Ib2xkZXJPYmplY3QgICAgPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdGhhdCBoYXMgYmVlbiBjbG9zZWQKKyAgICAgKiBAdGhyb3dzICAgIFNRTEV4Y2VwdGlvbiAgICBpbiBjYXNlIGNsb3NpbmcgdGhlIHNxbCBjb25uZWN0aW9uIGdvdCBvdXQgb2YKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+Z2V0Q29ubmVjdGlvbjwvY29kZT4gb24gdGhlIHVuZGVybHlpbmcKKyAgICAgKiAgICAgICAgICAgICAgICA8Y29kZT5Qb29sZWRDb25uZWN0aW9uPC9jb2RlPiB0aHJvd3MgYW4gZXhjZXB0aW9uCiAgICAgICovCiAgICAgdm9pZCBjb25uZWN0aW9uQ2xvc2VkKEV4Y2VwdGlvbiBlLCBDb25uZWN0aW9uSG9sZGVyIGNvbm5Ib2xkZXJPYmplY3QpIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgICBjb25uSG9sZGVyT2JqZWN0LmludmFsaWRhdGUoKTsKLSAgICAgICAgCisKICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IG51bGw7Ci0gICAgICAgIAorCiAgICAgICAgIGNlLnNldENvbm5lY3Rpb25IYW5kbGUoY29ubkhvbGRlck9iamVjdCk7CiAgICAgICAgIGxpc3RlbmVyLmNvbm5lY3Rpb25DbG9zZWQoY2UpOwotCQorCiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSA8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB3aGVuIGl0IGRldGVjdHMgYSBjb25uZWNpb24KICAgICAgKiByZWxhdGVkIGVycm9yLgogICAgICAqCi0gICAgICogQHBhcmFtCWUJRXhjZXB0aW9uIHRoYXQgaGFzIG9jY3VycmVkIGR1cmluZyBhbiBvcGVyYXRpb24gb24gdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24KLSAgICAgKiBAcGFyYW0JY29ubkhvbGRlck9iamVjdAk8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0aGF0IGRldGVjdGVkIHRoZSBwaHlzaWNhbAotICAgICAqCQkJCQljb25uZWN0aW9uIGVycm9yCisgICAgICogQHBhcmFtICAgIGUgICAgRXhjZXB0aW9uIHRoYXQgaGFzIG9jY3VycmVkIGR1cmluZyBhbiBvcGVyYXRpb24gb24gdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24KKyAgICAgKiBAcGFyYW0gICAgY29ubkhvbGRlck9iamVjdCAgICA8Y29kZT5Db25uZWN0aW9uSG9sZGVyPC9jb2RlPiB0aGF0IGRldGVjdGVkIHRoZSBwaHlzaWNhbAorICAgICAqICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uIGVycm9yCiAgICAgICovCi0gICAgdm9pZCBjb25uZWN0aW9uRXJyb3JPY2N1cnJlZChFeGNlcHRpb24gZSwgCisgICAgdm9pZCBjb25uZWN0aW9uRXJyb3JPY2N1cnJlZChFeGNlcHRpb24gZSwKICAgICAgICAgICAgIGNvbS5zdW4uamRiY3JhLnNwaS5Db25uZWN0aW9uSG9sZGVyIGNvbm5Ib2xkZXJPYmplY3QpIHsKLQkgICAgCisKICAgICAgICAgIENvbm5lY3Rpb25FdmVudExpc3RlbmVyIGNlbCA9IHRoaXMubGlzdGVuZXI7CiAgICAgICAgICBDb25uZWN0aW9uRXZlbnQgY2UgPSBudWxsOwogICAgICAgICAgY2UgPSBlID09IG51bGwgPyBuZXcgQ29ubmVjdGlvbkV2ZW50KHRoaXMsIENvbm5lY3Rpb25FdmVudC5DT05ORUNUSU9OX0VSUk9SX09DQ1VSUkVEKQogICAgICAgICAgICAgICAgICAgICA6IG5ldyBDb25uZWN0aW9uRXZlbnQodGhpcywgQ29ubmVjdGlvbkV2ZW50LkNPTk5FQ1RJT05fRVJST1JfT0NDVVJSRUQsIGUpOwogICAgICAgICAgaWYgKGNvbm5Ib2xkZXJPYmplY3QgIT0gbnVsbCkgewogICAgICAgICAgICAgIGNlLnNldENvbm5lY3Rpb25IYW5kbGUoY29ubkhvbGRlck9iamVjdCk7Ci0gICAgICAgICB9ICAgIAorICAgICAgICAgfQogCiAgICAgICAgICBjZWwuY29ubmVjdGlvbkVycm9yT2NjdXJyZWQoY2UpOwogICAgICAgICAgaXNVc2FibGUgPSBmYWxzZTsKICAgICB9Ci0gICAgCi0gICAgCi0gICAgCisKKworCiAgICAgLyoqCiAgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBvYmplY3Qgd2hlbiBpdHMgc3RhcnQgbWV0aG9kCiAgICAgICogaGFzIGJlZW4gaW52b2tlZC4KQEAgLTYwNiw3ICs2MDYsNyBAQAogICAgICAgICAgICAgY29ubmVjdGlvbkVycm9yT2NjdXJyZWQoZSwgbnVsbCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IG9iamVjdCB3aGVuIGl0cyBlbmQgbWV0aG9kCiAgICAgICogaGFzIGJlZW4gaW52b2tlZC4KQEAgLTYyMCw3ICs2MjAsNyBAQAogICAgICAgICAgICAgY29ubmVjdGlvbkVycm9yT2NjdXJyZWQoZSwgbnVsbCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgYSBDb25uZWN0aW9uIEhhbmRsZSB0byBjaGVjayBpZiBpdCBpcwogICAgICAqIHRoZSBhY3RpdmUgQ29ubmVjdGlvbiBIYW5kbGUuIElmIGl0IGlzIG5vdCB0aGUgYWN0aXZlIENvbm5lY3Rpb24KQEAgLTYyOSwyNCArNjI5LDI0IEBACiAgICAgICogQ29ubmVjdGlvbiBIYW5kbGUgb2JqZWN0IHRvIHRoaXMgb2JqZWN0IGlmIHRoZSBhY3RpdmUgQ29ubmVjdGlvbgogICAgICAqIEhhbmRsZSBpcyBudWxsLgogICAgICAqCi0gICAgICogQHBhcmFtCWNoCTxjb2RlPkNvbm5lY3Rpb25Ib2xkZXI8L2NvZGU+IHRoYXQgcmVxdWVzdHMgdGhpcwotICAgICAqCQkJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+IGluc3RhbmNlIHdoZXRoZXIKLSAgICAgKgkJCWl0IGNhbiBiZSBhY3RpdmUgb3Igbm90Ci0gICAgICogQHRocm93cwlTUUxFeGNlcHRpb24JaW4gY2FzZSB0aGUgcGh5c2ljYWwgaXMgbm90IHZhbGlkIG9yCi0gICAgICoJCQkJdGhlcmUgaXMgYWxyZWFkeSBhbiBhY3RpdmUgY29ubmVjdGlvbiBoYW5kbGUKKyAgICAgKiBAcGFyYW0gICAgY2ggICAgPGNvZGU+Q29ubmVjdGlvbkhvbGRlcjwvY29kZT4gdGhhdCByZXF1ZXN0cyB0aGlzCisgICAgICogICAgICAgICAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4gaW5zdGFuY2Ugd2hldGhlcgorICAgICAqICAgICAgICAgICAgaXQgY2FuIGJlIGFjdGl2ZSBvciBub3QKKyAgICAgKiBAdGhyb3dzICAgIFNRTEV4Y2VwdGlvbiAgICBpbiBjYXNlIHRoZSBwaHlzaWNhbCBpcyBub3QgdmFsaWQgb3IKKyAgICAgKiAgICAgICAgICAgICAgICB0aGVyZSBpcyBhbHJlYWR5IGFuIGFjdGl2ZSBjb25uZWN0aW9uIGhhbmRsZQogICAgICAqLwotICAgICAKKwogICAgIHZvaWQgY2hlY2tJZkFjdGl2ZShDb25uZWN0aW9uSG9sZGVyIGNoKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgICAgaWYoaXNEZXN0cm95ZWQgPT0gdHJ1ZSB8fCBpc1VzYWJsZSA9PSBmYWxzZSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbigiVGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgbm90IHVzYWJsZSIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmKGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgPT0gbnVsbCkgewogICAgICAgICAgICAgYWN0aXZlQ29ubmVjdGlvbkhhbmRsZSA9IGNoOwogICAgICAgICAgICAgY2guc2V0QWN0aXZlKHRydWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmKGFjdGl2ZUNvbm5lY3Rpb25IYW5kbGUgIT0gY2gpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGhhbmRsZSBjYW5ub3QgYmUgdXNlZCBhcyBhbm90aGVyIGNvbm5lY3Rpb24gaXMgY3VycmVudGx5IGFjdGl2ZSIpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL01hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YS5qYXZhCmluZGV4IDIwZjAzYWEuLmY2NTBkNDEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YS5qYXZhCkBAIC0yNSw4ICsyNSw4IEBACiAvKioKICAqIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGE8L2NvZGU+IGltcGxlbWVudGF0aW9uIGZvciBHZW5lcmljIEpEQkMgQ29ubmVjdG9yLgogICoKLSAqIEB2ZXJzaW9uCTEuMCwgMDIvMDgvMDMKLSAqIEBhdXRob3IJRXZhbmkgU2FpIFN1cnlhIEtpcmFuCisgKiBAdmVyc2lvbiAgICAxLjAsIDAyLzA4LzAzCisgKiBAYXV0aG9yICAgIEV2YW5pIFNhaSBTdXJ5YSBLaXJhbgogICovCiBwdWJsaWMgY2xhc3MgTWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YSBpbXBsZW1lbnRzIGpha2FydGEucmVzb3VyY2Uuc3BpLk1hbmFnZWRDb25uZWN0aW9uTWV0YURhdGEgewogCkBAIC00MSw4MSArNDEsODEgQEAKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25NZXRhRGF0YTwvY29kZT4KICAgICAgKgotICAgICAqIEBwYXJhbQltYwk8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPglpZiBnZXR0aW5nIHRoZSBEYXRhYmFzZU1ldGFEYXRhIG9iamVjdCBmYWlscworICAgICAqIEBwYXJhbSAgICBtYyAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KKyAgICAgKiBAdGhyb3dzICAgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiAgICBpZiBnZXR0aW5nIHRoZSBEYXRhYmFzZU1ldGFEYXRhIG9iamVjdCBmYWlscwogICAgICAqLwogICAgIHB1YmxpYyBNYW5hZ2VkQ29ubmVjdGlvbk1ldGFEYXRhKE1hbmFnZWRDb25uZWN0aW9uIG1jKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogICAgICAgICB0cnkgewogICAgICAgICAgICAgdGhpcy5tYyA9IG1jOwogICAgICAgICAgICAgZG1kID0gbWMuZ2V0QWN0dWFsQ29ubmVjdGlvbigpLmdldE1ldGFEYXRhKCk7CiAgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIHNxbGUpIHsKLQkgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfbWQiKTsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfbWQiKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHByb2R1Y3QgbmFtZSBvZiB0aGUgdW5kZXJseWluZyBFSVMgaW5zdGFuY2UgY29ubmVjdGVkCiAgICAgICogdGhyb3VnaCB0aGUgTWFuYWdlZENvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVByb2R1Y3QgbmFtZSBvZiB0aGUgRUlTIGluc3RhbmNlCi0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIFByb2R1Y3QgbmFtZSBvZiB0aGUgRUlTIGluc3RhbmNlCisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldEVJU1Byb2R1Y3ROYW1lKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJldHVybiBkbWQuZ2V0RGF0YWJhc2VQcm9kdWN0TmFtZSgpOwogICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2Vpc19wcm9kbmFtZSIsIHNxbGUpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19laXNfcHJvZG5hbWUiLCBzcWxlKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHByb2R1Y3QgdmVyc2lvbiBvZiB0aGUgdW5kZXJseWluZyBFSVMgaW5zdGFuY2UgY29ubmVjdGVkCiAgICAgICogdGhyb3VnaCB0aGUgTWFuYWdlZENvbm5lY3Rpb24uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuCVByb2R1Y3QgdmVyc2lvbiBvZiB0aGUgRUlTIGluc3RhbmNlCi0gICAgICogQHRocm93cwk8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIFByb2R1Y3QgdmVyc2lvbiBvZiB0aGUgRUlTIGluc3RhbmNlCisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldEVJU1Byb2R1Y3RWZXJzaW9uKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJldHVybiBkbWQuZ2V0RGF0YWJhc2VQcm9kdWN0VmVyc2lvbigpOwogICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBzcWxlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2Vpc19wcm9kdmVycyIsIHNxbGUpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19laXNfcHJvZHZlcnMiLCBzcWxlKTsKICAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihzcWxlLmdldE1lc3NhZ2UoKSwgc3FsZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBtYXhpbXVtIGxpbWl0IG9uIG51bWJlciBvZiBhY3RpdmUgY29uY3VycmVudCBjb25uZWN0aW9ucwogICAgICAqIHRoYXQgYW4gRUlTIGluc3RhbmNlIGNhbiBzdXBwb3J0IGFjcm9zcyBjbGllbnQgcHJvY2Vzc2VzLgogICAgICAqCi0gICAgICogQHJldHVybglNYXhpbXVtIGxpbWl0IGZvciBudW1iZXIgb2YgYWN0aXZlIGNvbmN1cnJlbnQgY29ubmVjdGlvbnMKLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgTWF4aW11bSBsaW1pdCBmb3IgbnVtYmVyIG9mIGFjdGl2ZSBjb25jdXJyZW50IGNvbm5lY3Rpb25zCisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldE1heENvbm5lY3Rpb25zKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJldHVybiBkbWQuZ2V0TWF4Q29ubmVjdGlvbnMoKTsKICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gc3FsZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19laXNfbWF4Y29ubiIpOworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19laXNfbWF4Y29ubiIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKHNxbGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgbmFtZSBvZiB0aGUgdXNlciBhc3NvY2lhdGVkIHdpdGggdGhlIE1hbmFnZWRDb25uZWN0aW9uIGluc3RhbmNlLiBUaGUgbmFtZQogICAgICAqIGNvcnJlc3BvbmRzIHRvIHRoZSByZXNvdXJjZSBwcmluY2lwYWwgdW5kZXIgd2hvc2Ugd2hvc2Ugc2VjdXJpdHkgY29udGV4dCwgYSBjb25uZWN0aW9uCiAgICAgICogdG8gdGhlIEVJUyBpbnN0YW5jZSBoYXMgYmVlbiBlc3RhYmxpc2hlZC4KICAgICAgKgotICAgICAqIEByZXR1cm4JbmFtZSBvZiB0aGUgdXNlcgotICAgICAqIEB0aHJvd3MJPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+CisgICAgICogQHJldHVybiAgICBuYW1lIG9mIHRoZSB1c2VyCisgICAgICogQHRocm93cyAgICA8Y29kZT5SZXNvdXJjZUV4Y2VwdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFVzZXJOYW1lKCkgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uIHsKICAgICAgICAgamFrYXJ0YS5yZXNvdXJjZS5zcGkuc2VjdXJpdHkuUGFzc3dvcmRDcmVkZW50aWFsIHBjID0gbWMuZ2V0UGFzc3dvcmRDcmVkZW50aWFsKCk7CiAgICAgICAgIGlmKHBjICE9IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybiBwYy5nZXRVc2VyTmFtZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBtYy5nZXRNYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkoKS5nZXRVc2VyKCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9YQVJlc291cmNlSW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3NwaS9YQVJlc291cmNlSW1wbC5qYXZhCmluZGV4IGRhZDFkNzcuLjQ4MmYzMzIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS9zcGkvWEFSZXNvdXJjZUltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvc3BpL1hBUmVzb3VyY2VJbXBsLmphdmEKQEAgLTI0LDE0OCArMjQsMTQ4IEBACiAvKioKICAqIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IHdyYXBwZXIgZm9yIEdlbmVyaWMgSkRCQyBDb25uZWN0b3IuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wOC8yMwotICogQGF1dGhvcglFdmFuaSBTYWkgU3VyeWEgS2lyYW4KKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDgvMjMKKyAqIEBhdXRob3IgICAgRXZhbmkgU2FpIFN1cnlhIEtpcmFuCiAgKi8KIHB1YmxpYyBjbGFzcyBYQVJlc291cmNlSW1wbCBpbXBsZW1lbnRzIFhBUmVzb3VyY2UgewogCiAgICAgWEFSZXNvdXJjZSB4YXI7CiAgICAgTWFuYWdlZENvbm5lY3Rpb24gbWM7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgWEFSZXNvdXJjZUltcGwKICAgICAgKgotICAgICAqIEBwYXJhbQl4YXIJPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4KLSAgICAgKiBAcGFyYW0JbWMJPGNvZGU+TWFuYWdlZENvbm5lY3Rpb248L2NvZGU+CisgICAgICogQHBhcmFtICAgIHhhciAgICA8Y29kZT5YQVJlc291cmNlPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBtYyAgICA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbjwvY29kZT4KICAgICAgKi8KICAgICBwdWJsaWMgWEFSZXNvdXJjZUltcGwoWEFSZXNvdXJjZSB4YXIsIE1hbmFnZWRDb25uZWN0aW9uIG1jKSB7CiAgICAgICAgIHRoaXMueGFyID0geGFyOwogICAgICAgICB0aGlzLm1jID0gbWM7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29tbWl0IHRoZSBnbG9iYWwgdHJhbnNhY3Rpb24gc3BlY2lmaWVkIGJ5IHhpZC4KICAgICAgKgotICAgICAqIEBwYXJhbQl4aWQJQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgotICAgICAqIEBwYXJhbQlvbmVQaGFzZQlJZiB0cnVlLCB0aGUgcmVzb3VyY2UgbWFuYWdlciBzaG91bGQgdXNlIGEgb25lLXBoYXNlIGNvbW1pdCAKLSAgICAgKiAgICAgICAJICAgICAgICAJcHJvdG9jb2wgdG8gY29tbWl0IHRoZSB3b3JrIGRvbmUgb24gYmVoYWxmIG9mIHhpZC4KKyAgICAgKiBAcGFyYW0gICAgeGlkICAgIEEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKKyAgICAgKiBAcGFyYW0gICAgb25lUGhhc2UgICAgSWYgdHJ1ZSwgdGhlIHJlc291cmNlIG1hbmFnZXIgc2hvdWxkIHVzZSBhIG9uZS1waGFzZSBjb21taXQKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2wgdG8gY29tbWl0IHRoZSB3b3JrIGRvbmUgb24gYmVoYWxmIG9mIHhpZC4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjb21taXQoWGlkIHhpZCwgYm9vbGVhbiBvbmVQaGFzZSkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgLy90aGUgbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQgY2FsbCBoYXMgY29tZSBoZXJlIGJlY2FzdWUKLQkvL3RoZSB0cmFuc2FjdGlvbiAqYWN0dWFsbHkqIGNvbXBsZXRlcyBhZnRlciB0aGUgZmxvdwotCS8vcmVhY2hlcyBoZXJlLiB0aGUgZW5kKCkgbWV0aG9kIG1pZ2h0IG5vdCByZWFsbHkgc2lnbmFsCi0JLy9jb21wbGV0aW9uIG9mIHRyYW5zYWN0aW9uIGluIGNhc2UgdGhlIHRyYW5zYWN0aW9uIGlzCi0JLy9zdXNwZW5kZWQuIEluIGNhc2Ugb2YgdHJhbnNhY3Rpb24gc3VzcGVuc2lvbiwgdGhlIGVuZAotCS8vbWV0aG9kIGlzIHN0aWxsIGNhbGxlZCBieSB0aGUgdHJhbnNhY3Rpb24gbWFuYWdlcgotCW1jLnRyYW5zYWN0aW9uQ29tcGxldGVkKCk7CisgICAgLy90aGUgdHJhbnNhY3Rpb24gKmFjdHVhbGx5KiBjb21wbGV0ZXMgYWZ0ZXIgdGhlIGZsb3cKKyAgICAvL3JlYWNoZXMgaGVyZS4gdGhlIGVuZCgpIG1ldGhvZCBtaWdodCBub3QgcmVhbGx5IHNpZ25hbAorICAgIC8vY29tcGxldGlvbiBvZiB0cmFuc2FjdGlvbiBpbiBjYXNlIHRoZSB0cmFuc2FjdGlvbiBpcworICAgIC8vc3VzcGVuZGVkLiBJbiBjYXNlIG9mIHRyYW5zYWN0aW9uIHN1c3BlbnNpb24sIHRoZSBlbmQKKyAgICAvL21ldGhvZCBpcyBzdGlsbCBjYWxsZWQgYnkgdGhlIHRyYW5zYWN0aW9uIG1hbmFnZXIKKyAgICBtYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOwogICAgICAgICB4YXIuY29tbWl0KHhpZCwgb25lUGhhc2UpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEVuZHMgdGhlIHdvcmsgcGVyZm9ybWVkIG9uIGJlaGFsZiBvZiBhIHRyYW5zYWN0aW9uIGJyYW5jaC4KICAgICAgKgotICAgICAqIEBwYXJhbQl4aWQJQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllciB0aGF0IGlzIHRoZSBzYW1lIGFzIHdoYXQgCi0gICAgICoJCQl3YXMgdXNlZCBwcmV2aW91c2x5IGluIHRoZSBzdGFydCBtZXRob2QuCi0gICAgICogQHBhcmFtCWZsYWdzCU9uZSBvZiBUTVNVQ0NFU1MsIFRNRkFJTCwgb3IgVE1TVVNQRU5ECisgICAgICogQHBhcmFtICAgIHhpZCAgICBBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyIHRoYXQgaXMgdGhlIHNhbWUgYXMgd2hhdAorICAgICAqICAgICAgICAgICAgd2FzIHVzZWQgcHJldmlvdXNseSBpbiB0aGUgc3RhcnQgbWV0aG9kLgorICAgICAqIEBwYXJhbSAgICBmbGFncyAgICBPbmUgb2YgVE1TVUNDRVNTLCBUTUZBSUwsIG9yIFRNU1VTUEVORAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVuZChYaWQgeGlkLCBpbnQgZmxhZ3MpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHhhci5lbmQoeGlkLCBmbGFncyk7CiAgICAgICAgIC8vR0pDSU5UCi0JLy9tYy50cmFuc2FjdGlvbkNvbXBsZXRlZCgpOworICAgIC8vbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUZWxsIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHRvIGZvcmdldCBhYm91dCBhIGhldXJpc3RpY2FsbHkgY29tcGxldGVkIHRyYW5zYWN0aW9uIGJyYW5jaC4KICAgICAgKgotICAgICAqIEBwYXJhbQl4aWQJQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgorICAgICAqIEBwYXJhbSAgICB4aWQgICAgQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllcgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGZvcmdldChYaWQgeGlkKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICB4YXIuZm9yZ2V0KHhpZCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogT2J0YWluIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgc2V0IGZvciB0aGlzIAorICAgICAqIE9idGFpbiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIHNldCBmb3IgdGhpcwogICAgICAqIDxjb2RlPlhBUmVzb3VyY2U8L2NvZGU+IGluc3RhbmNlLgogICAgICAqCi0gICAgICogQHJldHVybgl0aGUgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBpbiBzZWNvbmRzCisgICAgICogQHJldHVybiAgICB0aGUgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBpbiBzZWNvbmRzCiAgICAgICovCiAgICAgcHVibGljIGludCBnZXRUcmFuc2FjdGlvblRpbWVvdXQoKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICByZXR1cm4geGFyLmdldFRyYW5zYWN0aW9uVGltZW91dCgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB0byBkZXRlcm1pbmUgaWYgdGhlIHJlc291cmNlIG1hbmFnZXIgaW5zdGFuY2UgCi0gICAgICogcmVwcmVzZW50ZWQgYnkgdGhlIHRhcmdldCBvYmplY3QgaXMgdGhlIHNhbWUgYXMgdGhlIHJlc291Y2UgbWFuYWdlciAKKyAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSByZXNvdXJjZSBtYW5hZ2VyIGluc3RhbmNlCisgICAgICogcmVwcmVzZW50ZWQgYnkgdGhlIHRhcmdldCBvYmplY3QgaXMgdGhlIHNhbWUgYXMgdGhlIHJlc291Y2UgbWFuYWdlcgogICAgICAqIGluc3RhbmNlIHJlcHJlc2VudGVkIGJ5IHRoZSBwYXJhbWV0ZXIgeGFyZXMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGFyZXMJQW4gPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gb2JqZWN0IHdob3NlIHJlc291cmNlIG1hbmFnZXIgCi0gICAgICogCQkJaW5zdGFuY2UgaXMgdG8gYmUgY29tcGFyZWQgd2l0aCB0aGUgcmVzb3VyY2UKLSAgICAgKiBAcmV0dXJuCXRydWUgaWYgaXQncyB0aGUgc2FtZSBSTSBpbnN0YW5jZTsgb3RoZXJ3aXNlIGZhbHNlLgorICAgICAqIEBwYXJhbSAgICB4YXJlcyAgICBBbiA8Y29kZT5YQVJlc291cmNlPC9jb2RlPiBvYmplY3Qgd2hvc2UgcmVzb3VyY2UgbWFuYWdlcgorICAgICAqICAgICAgICAgICAgIGluc3RhbmNlIGlzIHRvIGJlIGNvbXBhcmVkIHdpdGggdGhlIHJlc291cmNlCisgICAgICogQHJldHVybiAgICB0cnVlIGlmIGl0J3MgdGhlIHNhbWUgUk0gaW5zdGFuY2U7IG90aGVyd2lzZSBmYWxzZS4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc1NhbWVSTShYQVJlc291cmNlIHhhcmVzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICByZXR1cm4geGFyLmlzU2FtZVJNKHhhcmVzKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBBc2sgdGhlIHJlc291cmNlIG1hbmFnZXIgdG8gcHJlcGFyZSBmb3IgYSB0cmFuc2FjdGlvbiBjb21taXQgCisgICAgICogQXNrIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHRvIHByZXBhcmUgZm9yIGEgdHJhbnNhY3Rpb24gY29tbWl0CiAgICAgICogb2YgdGhlIHRyYW5zYWN0aW9uIHNwZWNpZmllZCBpbiB4aWQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGlkCUEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKLSAgICAgKiBAcmV0dXJuCUEgdmFsdWUgaW5kaWNhdGluZyB0aGUgcmVzb3VyY2UgbWFuYWdlcidzIHZvdGUgb24gdGhlIAotICAgICAqCQlvdXRjb21lIG9mIHRoZSB0cmFuc2FjdGlvbi4gVGhlIHBvc3NpYmxlIHZhbHVlcwotICAgICAqCQlhcmU6IFhBX1JET05MWSBvciBYQV9PSy4gSWYgdGhlIHJlc291cmNlIG1hbmFnZXIgd2FudHMgCi0gICAgICoJCXRvIHJvbGwgYmFjayB0aGUgdHJhbnNhY3Rpb24sIGl0IHNob3VsZCBkbyBzbwotICAgICAqCQlieSByYWlzaW5nIGFuIGFwcHJvcHJpYXRlIDxjb2RlPlhBRXhjZXB0aW9uPC9jb2RlPiBpbiB0aGUgcHJlcGFyZSBtZXRob2QuCisgICAgICogQHBhcmFtICAgIHhpZCAgICBBIGdsb2JhbCB0cmFuc2FjdGlvbiBpZGVudGlmaWVyCisgICAgICogQHJldHVybiAgICBBIHZhbHVlIGluZGljYXRpbmcgdGhlIHJlc291cmNlIG1hbmFnZXIncyB2b3RlIG9uIHRoZQorICAgICAqICAgICAgICBvdXRjb21lIG9mIHRoZSB0cmFuc2FjdGlvbi4gVGhlIHBvc3NpYmxlIHZhbHVlcworICAgICAqICAgICAgICBhcmU6IFhBX1JET05MWSBvciBYQV9PSy4gSWYgdGhlIHJlc291cmNlIG1hbmFnZXIgd2FudHMKKyAgICAgKiAgICAgICAgdG8gcm9sbCBiYWNrIHRoZSB0cmFuc2FjdGlvbiwgaXQgc2hvdWxkIGRvIHNvCisgICAgICogICAgICAgIGJ5IHJhaXNpbmcgYW4gYXBwcm9wcmlhdGUgPGNvZGU+WEFFeGNlcHRpb248L2NvZGU+IGluIHRoZSBwcmVwYXJlIG1ldGhvZC4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IHByZXBhcmUoWGlkIHhpZCkgdGhyb3dzIFhBRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIHhhci5wcmVwYXJlKHhpZCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogT2J0YWluIGEgbGlzdCBvZiBwcmVwYXJlZCB0cmFuc2FjdGlvbiBicmFuY2hlcyBmcm9tIGEgcmVzb3VyY2UgbWFuYWdlci4KICAgICAgKgotICAgICAqIEBwYXJhbQlmbGFnCU9uZSBvZiBUTVNUQVJUUlNDQU4sIFRNRU5EUlNDQU4sIFRNTk9GTEFHUy4gVE1OT0ZMQUdTIAotICAgICAqCQkJbXVzdCBiZSB1c2VkIHdoZW4gbm8gb3RoZXIgZmxhZ3MgYXJlIHNldCBpbiBmbGFncy4KLSAgICAgKiBAcmV0dXJuCVRoZSByZXNvdXJjZSBtYW5hZ2VyIHJldHVybnMgemVybyBvciBtb3JlIFhJRHMgZm9yIHRoZSB0cmFuc2FjdGlvbiAKLSAgICAgKgkJYnJhbmNoZXMgdGhhdCBhcmUgY3VycmVudGx5IGluIGEgcHJlcGFyZWQgb3IgaGV1cmlzdGljYWxseSAKLSAgICAgKgkJY29tcGxldGVkIHN0YXRlLiBJZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIHRoZSBvcGVyYXRpb24sIHRoZSByZXNvdXJjZQotICAgICAqCQltYW5hZ2VyIHNob3VsZCB0aHJvdyB0aGUgYXBwcm9wcmlhdGUgPGNvZGU+WEFFeGNlcHRpb248L2NvZGU+LgorICAgICAqIEBwYXJhbSAgICBmbGFnICAgIE9uZSBvZiBUTVNUQVJUUlNDQU4sIFRNRU5EUlNDQU4sIFRNTk9GTEFHUy4gVE1OT0ZMQUdTCisgICAgICogICAgICAgICAgICBtdXN0IGJlIHVzZWQgd2hlbiBubyBvdGhlciBmbGFncyBhcmUgc2V0IGluIGZsYWdzLgorICAgICAqIEByZXR1cm4gICAgVGhlIHJlc291cmNlIG1hbmFnZXIgcmV0dXJucyB6ZXJvIG9yIG1vcmUgWElEcyBmb3IgdGhlIHRyYW5zYWN0aW9uCisgICAgICogICAgICAgIGJyYW5jaGVzIHRoYXQgYXJlIGN1cnJlbnRseSBpbiBhIHByZXBhcmVkIG9yIGhldXJpc3RpY2FsbHkKKyAgICAgKiAgICAgICAgY29tcGxldGVkIHN0YXRlLiBJZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIHRoZSBvcGVyYXRpb24sIHRoZSByZXNvdXJjZQorICAgICAqICAgICAgICBtYW5hZ2VyIHNob3VsZCB0aHJvdyB0aGUgYXBwcm9wcmlhdGUgPGNvZGU+WEFFeGNlcHRpb248L2NvZGU+LgogICAgICAqLwogICAgIHB1YmxpYyBYaWRbXSByZWNvdmVyKGludCBmbGFnKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICByZXR1cm4geGFyLnJlY292ZXIoZmxhZyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogSW5mb3JtIHRoZSByZXNvdXJjZSBtYW5hZ2VyIHRvIHJvbGwgYmFjayB3b3JrIGRvbmUgb24gYmVoYWxmIG9mIGEgdHJhbnNhY3Rpb24gYnJhbmNoCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGlkCUEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKKyAgICAgKiBAcGFyYW0gICAgeGlkICAgIEEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCByb2xsYmFjayhYaWQgeGlkKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICAvL3RoZSBtYy50cmFuc2FjdGlvbkNvbXBsZXRlZCBjYWxsIGhhcyBjb21lIGhlcmUgYmVjYXN1ZQotCS8vdGhlIHRyYW5zYWN0aW9uICphY3R1YWxseSogY29tcGxldGVzIGFmdGVyIHRoZSBmbG93Ci0JLy9yZWFjaGVzIGhlcmUuIHRoZSBlbmQoKSBtZXRob2QgbWlnaHQgbm90IHJlYWxseSBzaWduYWwKLQkvL2NvbXBsZXRpb24gb2YgdHJhbnNhY3Rpb24gaW4gY2FzZSB0aGUgdHJhbnNhY3Rpb24gaXMKLQkvL3N1c3BlbmRlZC4gSW4gY2FzZSBvZiB0cmFuc2FjdGlvbiBzdXNwZW5zaW9uLCB0aGUgZW5kCi0JLy9tZXRob2QgaXMgc3RpbGwgY2FsbGVkIGJ5IHRoZSB0cmFuc2FjdGlvbiBtYW5hZ2VyCisgICAgLy90aGUgdHJhbnNhY3Rpb24gKmFjdHVhbGx5KiBjb21wbGV0ZXMgYWZ0ZXIgdGhlIGZsb3cKKyAgICAvL3JlYWNoZXMgaGVyZS4gdGhlIGVuZCgpIG1ldGhvZCBtaWdodCBub3QgcmVhbGx5IHNpZ25hbAorICAgIC8vY29tcGxldGlvbiBvZiB0cmFuc2FjdGlvbiBpbiBjYXNlIHRoZSB0cmFuc2FjdGlvbiBpcworICAgIC8vc3VzcGVuZGVkLiBJbiBjYXNlIG9mIHRyYW5zYWN0aW9uIHN1c3BlbnNpb24sIHRoZSBlbmQKKyAgICAvL21ldGhvZCBpcyBzdGlsbCBjYWxsZWQgYnkgdGhlIHRyYW5zYWN0aW9uIG1hbmFnZXIKICAgICAgICAgbWMudHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKICAgICAgICAgeGFyLnJvbGxiYWNrKHhpZCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0IHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIHRpbWVvdXQgdmFsdWUgZm9yIHRoaXMgPGNvZGU+WEFSZXNvdXJjZTwvY29kZT4gaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0Jc2Vjb25kcwl0aGUgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBpbiBzZWNvbmRzLgotICAgICAqIEByZXR1cm4JdHJ1ZSBpZiB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIGlzIHNldCBzdWNjZXNzZnVsbHk7IG90aGVyd2lzZSBmYWxzZS4KKyAgICAgKiBAcGFyYW0gICAgc2Vjb25kcyAgICB0aGUgdHJhbnNhY3Rpb24gdGltZW91dCB2YWx1ZSBpbiBzZWNvbmRzLgorICAgICAqIEByZXR1cm4gICAgdHJ1ZSBpZiB0cmFuc2FjdGlvbiB0aW1lb3V0IHZhbHVlIGlzIHNldCBzdWNjZXNzZnVsbHk7IG90aGVyd2lzZSBmYWxzZS4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBzZXRUcmFuc2FjdGlvblRpbWVvdXQoaW50IHNlY29uZHMpIHRocm93cyBYQUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiB4YXIuc2V0VHJhbnNhY3Rpb25UaW1lb3V0KHNlY29uZHMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFN0YXJ0IHdvcmsgb24gYmVoYWxmIG9mIGEgdHJhbnNhY3Rpb24gYnJhbmNoIHNwZWNpZmllZCBpbiB4aWQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JeGlkCUEgZ2xvYmFsIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXNvdXJjZQotICAgICAqIEByZXR1cm4JZmxhZ3MJT25lIG9mIFRNTk9GTEFHUywgVE1KT0lOLCBvciBUTVJFU1VNRQorICAgICAqIEBwYXJhbSAgICB4aWQgICAgQSBnbG9iYWwgdHJhbnNhY3Rpb24gaWRlbnRpZmllciB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIHJlc291cmNlCisgICAgICogQHJldHVybiAgICBmbGFncyAgICBPbmUgb2YgVE1OT0ZMQUdTLCBUTUpPSU4sIG9yIFRNUkVTVU1FCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc3RhcnQoWGlkIHhpZCwgaW50IGZsYWdzKSB0aHJvd3MgWEFFeGNlcHRpb24gewogICAgICAgICAvL0dKQ0lOVApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvTWV0aG9kRXhlY3V0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL01ldGhvZEV4ZWN1dG9yLmphdmEKaW5kZXggY2UzMjFhZi4uOWU3ZjI1MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvTWV0aG9kRXhlY3V0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9NZXRob2RFeGVjdXRvci5qYXZhCkBAIC0yNiw4ICsyNiw4IEBACiAvKioKICAqIEV4ZWN1dGUgdGhlIG1ldGhvZHMgYmFzZWQgb24gdGhlIHBhcmFtZXRlcnMuCiAgKgotICogQHZlcnNpb24JMS4wLCAwMi8wNy8yMwotICogQGF1dGhvcglCaW5vZCBQLkcKKyAqIEB2ZXJzaW9uICAgIDEuMCwgMDIvMDcvMjMKKyAqIEBhdXRob3IgICAgQmlub2QgUC5HCiAgKi8KIHB1YmxpYyBjbGFzcyBNZXRob2RFeGVjdXRvciBpbXBsZW1lbnRzIGphdmEuaW8uU2VyaWFsaXphYmxlewogCkBAIC0zOSwxMzAgKzM5LDEzMCBAQAogICAgIC8qKgogICAgICAqIEV4Y2V1dGUgYSBzaW1wbGUgc2V0IE1ldGhvZC4KICAgICAgKgotICAgICAqIEBwYXJhbQl2YWx1ZQlWYWx1ZSB0byBiZSBzZXQuCi0gICAgICogQHBhcmFtCW1ldGhvZAk8Y29kZT5NZXRob2Q8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAcGFyYW0Jb2JqCU9iamVjdCBvbiB3aGljaCB0aGUgbWV0aG9kIHRvIGJlIGV4ZWN1dGVkLgorICAgICAqIEBwYXJhbSAgICB2YWx1ZSAgICBWYWx1ZSB0byBiZSBzZXQuCisgICAgICogQHBhcmFtICAgIG1ldGhvZCAgICA8Y29kZT5NZXRob2Q8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgb2JqICAgIE9iamVjdCBvbiB3aGljaCB0aGUgbWV0aG9kIHRvIGJlIGV4ZWN1dGVkLgogICAgICAqIEB0aHJvd3MgIDxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPiwgaW4gY2FzZSBvZiB0aGUgbWlzbWF0Y2ggb2YgcGFyYW1ldGVyIHZhbHVlcyBvcgotICAgICAqCQlhIHNlY3VyaXR5IHZpb2xhdGlvbi4gICAgIAorICAgICAqICAgICAgICBhIHNlY3VyaXR5IHZpb2xhdGlvbi4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBydW5KYXZhQmVhbk1ldGhvZChTdHJpbmcgdmFsdWUsIE1ldGhvZCBtZXRob2QsIE9iamVjdCBvYmopIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKLSAgICAJaWYgKHZhbHVlPT1udWxsIHx8IHZhbHVlLnRyaW0oKS5lcXVhbHMoIiIpKSB7Ci0gICAgCSAgICByZXR1cm47Ci0gICAgCX0KLSAgICAJdHJ5IHsKLSAgICAJICAgIENsYXNzW10gcGFyYW1ldGVycyA9IG1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpOwotICAgIAkgICAgaWYgKCBwYXJhbWV0ZXJzLmxlbmd0aCA9PSAxKSB7Ci0gICAgCSAgICAgICAgT2JqZWN0W10gdmFsdWVzID0gbmV3IE9iamVjdFsxXTsKLSAgICAJICAgIAl2YWx1ZXNbMF0gPSBjb252ZXJ0VHlwZShwYXJhbWV0ZXJzWzBdLCB2YWx1ZSk7Ci0gICAgCSAgICAJbWV0aG9kLmludm9rZShvYmosIHZhbHVlcyk7Ci0gICAgCSAgICB9Ci0gICAgCX0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gaWFlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGlhZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7Ci0gICAgCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFyZ3VtZW50cyBhcmUgd3JvbmcgZm9yIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsgICAgCQotICAgIAl9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGl0ZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpdGUpOwotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOyAgICAJCi0gICAgCX0KKyAgICAgICAgaWYgKHZhbHVlPT1udWxsIHx8IHZhbHVlLnRyaW0oKS5lcXVhbHMoIiIpKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIENsYXNzW10gcGFyYW1ldGVycyA9IG1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpOworICAgICAgICAgICAgaWYgKCBwYXJhbWV0ZXJzLmxlbmd0aCA9PSAxKSB7CisgICAgICAgICAgICAgICAgT2JqZWN0W10gdmFsdWVzID0gbmV3IE9iamVjdFsxXTsKKyAgICAgICAgICAgICAgICB2YWx1ZXNbMF0gPSBjb252ZXJ0VHlwZShwYXJhbWV0ZXJzWzBdLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgbWV0aG9kLmludm9rZShvYmosIHZhbHVlcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gaWFlKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGlhZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFyZ3VtZW50cyBhcmUgd3JvbmcgZm9yIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKKyAgICAgICAgfSBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBpdGUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaXRlKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbigiQWNjZXNzIGRlbmllZCB0byBleGVjdXRlIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgotICAgICAqIEV4ZWN1dGVzIHRoZSBtZXRob2QuICAgICAKKyAgICAgKiBFeGVjdXRlcyB0aGUgbWV0aG9kLgogICAgICAqCi0gICAgICogQHBhcmFtCW1ldGhvZCA8Y29kZT5NZXRob2Q8L2NvZGU+IG9iamVjdC4KLSAgICAgKiBAcGFyYW0Jb2JqCU9iamVjdCBvbiB3aGljaCB0aGUgbWV0aG9kIHRvIGJlIGV4ZWN1dGVkLgotICAgICAqIEBwYXJhbQl2YWx1ZXMJUGFyYW1ldGVyIHZhbHVlcyBmb3IgZXhlY3V0aW5nIHRoZSBtZXRob2QuCisgICAgICogQHBhcmFtICAgIG1ldGhvZCA8Y29kZT5NZXRob2Q8L2NvZGU+IG9iamVjdC4KKyAgICAgKiBAcGFyYW0gICAgb2JqICAgIE9iamVjdCBvbiB3aGljaCB0aGUgbWV0aG9kIHRvIGJlIGV4ZWN1dGVkLgorICAgICAqIEBwYXJhbSAgICB2YWx1ZXMgICAgUGFyYW1ldGVyIHZhbHVlcyBmb3IgZXhlY3V0aW5nIHRoZSBtZXRob2QuCiAgICAgICogQHRocm93cyAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+LCBpbiBjYXNlIG9mIHRoZSBtaXNtYXRjaCBvZiBwYXJhbWV0ZXIgdmFsdWVzIG9yCi0gICAgICoJCWEgc2VjdXJpdHkgdmlvbGF0aW9uLgorICAgICAqICAgICAgICBhIHNlY3VyaXR5IHZpb2xhdGlvbi4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBydW5NZXRob2QoTWV0aG9kIG1ldGhvZCwgT2JqZWN0IG9iaiwgVmVjdG9yIHZhbHVlcykgdGhyb3dzIFJlc291cmNlRXhjZXB0aW9uewotICAgIAl0cnkgewotCSAgICBDbGFzc1tdIHBhcmFtZXRlcnMgPSBtZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKTsKLQkgICAgaWYgKHZhbHVlcy5zaXplKCkgIT0gcGFyYW1ldGVycy5sZW5ndGgpIHsKLQkgICAgICAgIHJldHVybjsKLQkgICAgfQotICAgIAkgICAgT2JqZWN0W10gYWN0dWFsVmFsdWVzID0gbmV3IE9iamVjdFtwYXJhbWV0ZXJzLmxlbmd0aF07Ci0gICAgCSAgICBmb3IgKGludCBpID0wOyBpPHBhcmFtZXRlcnMubGVuZ3RoIDsgaSsrKSB7Ci0gICAgCSAgICAJU3RyaW5nIHZhbCA9IChTdHJpbmcpIHZhbHVlcy5nZXQoaSk7Ci0gICAgCSAgICAJaWYgKHZhbC50cmltKCkuZXF1YWxzKCJOVUxMIikpIHsKLSAgICAJICAgIAkgICAgYWN0dWFsVmFsdWVzW2ldID0gbnVsbDsKLSAgICAJICAgIAl9IGVsc2UgewotICAgIAkgICAgCSAgICBhY3R1YWxWYWx1ZXNbaV0gPSBjb252ZXJ0VHlwZShwYXJhbWV0ZXJzW2ldLCB2YWwpOwotICAgIAkgICAgCX0KLSAgICAJICAgIH0KLSAgICAJICAgIG1ldGhvZC5pbnZva2Uob2JqLCBhY3R1YWxWYWx1ZXMpOwotICAgIAl9Y2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gaWFlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGlhZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7Ci0gICAgCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpZSk7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFyZ3VtZW50cyBhcmUgd3JvbmcgZm9yIHRoZSBtZXRob2QgOiIgKyBtZXRob2QuZ2V0TmFtZSgpKTsgICAgCQotICAgIAl9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGl0ZSkgewotCSAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpdGUpOwotICAgIAkgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOyAgICAJCi0gICAgCX0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgQ2xhc3NbXSBwYXJhbWV0ZXJzID0gbWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCk7CisgICAgICAgIGlmICh2YWx1ZXMuc2l6ZSgpICE9IHBhcmFtZXRlcnMubGVuZ3RoKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIE9iamVjdFtdIGFjdHVhbFZhbHVlcyA9IG5ldyBPYmplY3RbcGFyYW1ldGVycy5sZW5ndGhdOworICAgICAgICAgICAgZm9yIChpbnQgaSA9MDsgaTxwYXJhbWV0ZXJzLmxlbmd0aCA7IGkrKykgeworICAgICAgICAgICAgICAgIFN0cmluZyB2YWwgPSAoU3RyaW5nKSB2YWx1ZXMuZ2V0KGkpOworICAgICAgICAgICAgICAgIGlmICh2YWwudHJpbSgpLmVxdWFscygiTlVMTCIpKSB7CisgICAgICAgICAgICAgICAgICAgIGFjdHVhbFZhbHVlc1tpXSA9IG51bGw7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYWN0dWFsVmFsdWVzW2ldID0gY29udmVydFR5cGUocGFyYW1ldGVyc1tpXSwgdmFsKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtZXRob2QuaW52b2tlKG9iaiwgYWN0dWFsVmFsdWVzKTsKKyAgICAgICAgfWNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGlhZSkgeworICAgICAgICBfbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJqZGJjLmV4Y19qYl92YWwiLCBpYWUpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBY2Nlc3MgZGVuaWVkIHRvIGV4ZWN1dGUgdGhlIG1ldGhvZCA6IiArIG1ldGhvZC5nZXROYW1lKCkpOworICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfamJfdmFsIiwgaWUpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJlc291cmNlRXhjZXB0aW9uKCJBcmd1bWVudHMgYXJlIHdyb25nIGZvciB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7CisgICAgICAgIH0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gaXRlKSB7CisgICAgICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX2piX3ZhbCIsIGl0ZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24oIkFjY2VzcyBkZW5pZWQgdG8gZXhlY3V0ZSB0aGUgbWV0aG9kIDoiICsgbWV0aG9kLmdldE5hbWUoKSk7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDb252ZXJ0cyB0aGUgdHlwZSBmcm9tIFN0cmluZyB0byB0aGUgQ2xhc3MgdHlwZS4KICAgICAgKgotICAgICAqIEBwYXJhbQl0eXBlCQlDbGFzcyBuYW1lIHRvIHdoaWNoIHRoZSBjb252ZXJzaW9uIGlzIHJlcXVpcmVkLgotICAgICAqIEBwYXJhbQlwYXJhbWV0ZXIJU3RyaW5nIHZhbHVlIHRvIGJlIGNvbnZlcnRlZC4KLSAgICAgKiBAcmV0dXJuCUNvbnZlcnRlZCB2YWx1ZS4KKyAgICAgKiBAcGFyYW0gICAgdHlwZSAgICAgICAgQ2xhc3MgbmFtZSB0byB3aGljaCB0aGUgY29udmVyc2lvbiBpcyByZXF1aXJlZC4KKyAgICAgKiBAcGFyYW0gICAgcGFyYW1ldGVyICAgIFN0cmluZyB2YWx1ZSB0byBiZSBjb252ZXJ0ZWQuCisgICAgICogQHJldHVybiAgICBDb252ZXJ0ZWQgdmFsdWUuCiAgICAgICogQHRocm93cyAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+LCBpbiBjYXNlIG9mIHRoZSBtaXNtYXRjaCBvZiBwYXJhbWV0ZXIgdmFsdWVzIG9yCi0gICAgICoJCWEgc2VjdXJpdHkgdmlvbGF0aW9uLiAgICAgCisgICAgICogICAgICAgIGEgc2VjdXJpdHkgdmlvbGF0aW9uLgogICAgICAqLwogICAgIHByaXZhdGUgT2JqZWN0IGNvbnZlcnRUeXBlKENsYXNzIHR5cGUsIFN0cmluZyBwYXJhbWV0ZXIpIHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbnsKLSAgICAJdHJ5IHsKLSAgICAJICAgIFN0cmluZyB0eXBlTmFtZSA9IHR5cGUuZ2V0TmFtZSgpOwotICAgIAkgICAgaWYgKCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5TdHJpbmciKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5PYmplY3QiKSkgewotICAgIAkgICAgCXJldHVybiBwYXJhbWV0ZXI7Ci0gICAgCSAgICB9Ci0gICAgCQotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiaW50IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuSW50ZWdlciIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBJbnRlZ2VyKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9Ci0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoInNob3J0IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuU2hvcnQiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgU2hvcnQocGFyYW1ldGVyKTsKLSAgICAJICAgIH0gICAgCSAgICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiYnl0ZSIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkJ5dGUiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgQnl0ZShwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgICAJICAgICAgICAJICAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJsb25nIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuTG9uZyIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBMb25nKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgIAkgICAgICAgIAkgICAgICAgCSAgICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiZmxvYXQiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5GbG9hdCIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBGbG9hdChwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJkb3VibGUiKSB8fCB0eXBlTmFtZS5lcXVhbHMoImphdmEubGFuZy5Eb3VibGUiKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgRG91YmxlKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgIAkgICAgICAgIAkgICAgICAgCSAgICAgCSAgICAgICAgCSAgICAgICAJICAgIAotICAgIAkgICAgCi0gICAgCSAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJqYXZhLm1hdGguQmlnRGVjaW1hbCIpKSB7Ci0gICAgCSAgICAJcmV0dXJuIG5ldyBqYXZhLm1hdGguQmlnRGVjaW1hbChwYXJhbWV0ZXIpOwotICAgIAkgICAgfSAgICAJICAgICAgICAJICAgICAgIAkgICAgCi0gICAgCSAgICAKLSAgICAJICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImphdmEubWF0aC5CaWdJbnRlZ2VyIikpIHsKLSAgICAJICAgIAlyZXR1cm4gbmV3IGphdmEubWF0aC5CaWdJbnRlZ2VyKHBhcmFtZXRlcik7Ci0gICAgCSAgICB9ICAgIAkgICAgICAgIAkgICAgICAgCSAgICAgICAgCSAgICAKLSAgICAJICAgIAotICAgIAkgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiYm9vbGVhbiIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkJvb2xlYW4iKSkgewotICAgIAkgICAgCXJldHVybiBuZXcgQm9vbGVhbihwYXJhbWV0ZXIpOwotICAgICAgICAgICAgfQkJCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBTdHJpbmcgdHlwZU5hbWUgPSB0eXBlLmdldE5hbWUoKTsKKyAgICAgICAgICAgIGlmICggdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuU3RyaW5nIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuT2JqZWN0IikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyYW1ldGVyOworICAgICAgICAgICAgfQogCi0gICAgCSAgICByZXR1cm4gcGFyYW1ldGVyOwotICAgIAl9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKSB7Ci0JICAgIF9sb2dnZXIubG9nKExldmVsLlNFVkVSRSwgImpkYmMuZXhjX25mZSIsIHBhcmFtZXRlcik7Ci0gICAgCSAgICB0aHJvdyBuZXcgUmVzb3VyY2VFeGNlcHRpb24ocGFyYW1ldGVyKyI6IE5vdCBhIHZhbGlkIHZhbHVlIGZvciB0aGlzIG1ldGhvZCAiKTsKLSAgICAJfQorICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiaW50IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuSW50ZWdlciIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnRlZ2VyKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoInNob3J0IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuU2hvcnQiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2hvcnQocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiYnl0ZSIpIHx8IHR5cGVOYW1lLmVxdWFscygiamF2YS5sYW5nLkJ5dGUiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQnl0ZShwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJsb25nIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuTG9uZyIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBMb25nKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoImZsb2F0IikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuRmxvYXQiKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRmxvYXQocGFyYW1ldGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVOYW1lLmVxdWFscygiZG91YmxlIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuRG91YmxlIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERvdWJsZShwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJqYXZhLm1hdGguQmlnRGVjaW1hbCIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBqYXZhLm1hdGguQmlnRGVjaW1hbChwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJqYXZhLm1hdGguQmlnSW50ZWdlciIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBqYXZhLm1hdGguQmlnSW50ZWdlcihwYXJhbWV0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZU5hbWUuZXF1YWxzKCJib29sZWFuIikgfHwgdHlwZU5hbWUuZXF1YWxzKCJqYXZhLmxhbmcuQm9vbGVhbiIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCb29sZWFuKHBhcmFtZXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBwYXJhbWV0ZXI7CisgICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpIHsKKyAgICAgICAgX2xvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiamRiYy5leGNfbmZlIiwgcGFyYW1ldGVyKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZXNvdXJjZUV4Y2VwdGlvbihwYXJhbWV0ZXIrIjogTm90IGEgdmFsaWQgdmFsdWUgZm9yIHRoaXMgbWV0aG9kICIpOworICAgICAgICB9CiAgICAgfQotICAgIAorCiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL1NlY3VyaXR5VXRpbHMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL1NlY3VyaXR5VXRpbHMuamF2YQppbmRleCBmYzE0OWJmLi5mMDA4ZTdmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9TZWN1cml0eVV0aWxzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvU2VjdXJpdHlVdGlscy5qYXZhCkBAIC0yOSwzNiArMjksMzYgQEAKIC8qKgogICogU2VjdXJpdHlVdGlscyBmb3IgR2VuZXJpYyBKREJDIENvbm5lY3Rvci4KICAqCi0gKiBAdmVyc2lvbgkxLjAsIDAyLzA3LzIyCi0gKiBAYXV0aG9yCUV2YW5pIFNhaSBTdXJ5YSBLaXJhbgorICogQHZlcnNpb24gICAgMS4wLCAwMi8wNy8yMgorICogQGF1dGhvciAgICBFdmFuaSBTYWkgU3VyeWEgS2lyYW4KICAqLwogcHVibGljIGNsYXNzIFNlY3VyaXR5VXRpbHMgewogCiAgICAgLyoqCi0gICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QsIGdpdmVuIAotICAgICAqIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LCBzdWJqZWN0IGFuZCB0aGUgCi0gICAgICogPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPi4gSXQgZmlyc3QgY2hlY2tzIGlmIHRoZSAKLSAgICAgKiA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IGlzIG51bGwgb3Igbm90LiBJZiBpdCBpcyBub3QgbnVsbCwgCisgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QsIGdpdmVuCisgICAgICogdGhlIDxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4sIHN1YmplY3QgYW5kIHRoZQorICAgICAqIDxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4uIEl0IGZpcnN0IGNoZWNrcyBpZiB0aGUKKyAgICAgKiA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IGlzIG51bGwgb3Igbm90LiBJZiBpdCBpcyBub3QgbnVsbCwKICAgICAgKiBpdCBjb25zdHJ1Y3RzIGEgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3Qgd2l0aAogICAgICAqIHRoZSB1c2VyIGFuZCBwYXNzd29yZCBmaWVsZHMgZnJvbSB0aGUgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPiBhbmQgcmV0dXJucyB0aGlzCi0gICAgICogPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QuIElmIHRoZSA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+IAotICAgICAqIGlzIG51bGwsIGl0IHJldHJpZXZlcyB0aGUgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3RzIGZyb20gCisgICAgICogPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3QuIElmIHRoZSA8Y29kZT5Db25uZWN0aW9uUmVxdWVzdEluZm88L2NvZGU+CisgICAgICogaXMgbnVsbCwgaXQgcmV0cmlldmVzIHRoZSA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdHMgZnJvbQogICAgICAqIHRoZSA8Y29kZT5TdWJqZWN0PC9jb2RlPiBwYXJhbWV0ZXIgYW5kIHJldHVybnMgdGhlIGZpcnN0Ci0gICAgICogPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3Qgd2hpY2ggY29udGFpbnMgYSAKKyAgICAgKiA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+IG9iamVjdCB3aGljaCBjb250YWlucyBhCiAgICAgICogPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPiwgaW5zdGFuY2UgZXF1aXZhbGVudAogICAgICAqIHRvIHRoZSA8Y29kZT5NYW5hZ2VkQ29ubmVjdGlvbkZhY3Rvcnk8L2NvZGU+LCBwYXJhbWV0ZXIuCiAgICAgICoKLSAgICAgKiBAcGFyYW0JbWNmCTxjb2RlPk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeTwvY29kZT4KLSAgICAgKiBAcGFyYW0Jc3ViamVjdAk8Y29kZT5TdWJqZWN0PC9jb2RlPgotICAgICAqIEBwYXJhbQlpbmZvCTxjb2RlPkNvbm5lY3Rpb25SZXF1ZXN0SW5mbzwvY29kZT4KLSAgICAgKiBAcmV0dXJuCTxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KLSAgICAgKiBAdGhyb3dzCTxjb2RlPlJlc291cmNlRXhjZXB0aW9uPC9jb2RlPglnZW5lcmljIGV4Y2VwdGlvbiBpZiBvcGVyYXRpb24gZmFpbHMKLSAgICAgKiBAdGhyb3dzCTxjb2RlPlNlY3VyaXR5RXhjZXB0aW9uPC9jb2RlPglpZiBhY2Nlc3MgdG8gdGhlIDxjb2RlPlN1YmplY3Q8L2NvZGU+IGluc3RhbmNlIGlzIGRlbmllZAorICAgICAqIEBwYXJhbSAgICBtY2YgICAgPGNvZGU+TWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5PC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBzdWJqZWN0ICAgIDxjb2RlPlN1YmplY3Q8L2NvZGU+CisgICAgICogQHBhcmFtICAgIGluZm8gICAgPGNvZGU+Q29ubmVjdGlvblJlcXVlc3RJbmZvPC9jb2RlPgorICAgICAqIEByZXR1cm4gICAgPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPgorICAgICAqIEB0aHJvd3MgICAgPGNvZGU+UmVzb3VyY2VFeGNlcHRpb248L2NvZGU+ICAgIGdlbmVyaWMgZXhjZXB0aW9uIGlmIG9wZXJhdGlvbiBmYWlscworICAgICAqIEB0aHJvd3MgICAgPGNvZGU+U2VjdXJpdHlFeGNlcHRpb248L2NvZGU+ICAgIGlmIGFjY2VzcyB0byB0aGUgPGNvZGU+U3ViamVjdDwvY29kZT4gaW5zdGFuY2UgaXMgZGVuaWVkCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBQYXNzd29yZENyZWRlbnRpYWwgZ2V0UGFzc3dvcmRDcmVkZW50aWFsKGZpbmFsIE1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBtY2YsCiAgICAgICAgICBmaW5hbCBTdWJqZWN0IHN1YmplY3QsIGpha2FydGEucmVzb3VyY2Uuc3BpLkNvbm5lY3Rpb25SZXF1ZXN0SW5mbyBpbmZvKSB0aHJvd3MgUmVzb3VyY2VFeGNlcHRpb24gewogCi0JaWYgKGluZm8gPT0gbnVsbCkgeworICAgIGlmIChpbmZvID09IG51bGwpIHsKICAgICAgICAgICAgIGlmIChzdWJqZWN0ID09IG51bGwpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC04OSwxNCArODksMTQgQEAKICAgICAgICAgICAgIHJldHVybiBwYzsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0d28gc3RyaW5ncyBhcmUgZXF1YWw7IGZhbHNlIG90aGVyd2lzZQotICAgICAqIAotICAgICAqIEBwYXJhbQlzdHIxCTxjb2RlPlN0cmluZzwvY29kZT4KLSAgICAgKiBAcGFyYW0Jc3RyMgk8Y29kZT5TdHJpbmc8L2NvZGU+Ci0gICAgICogQHJldHVybgl0cnVlCWlmIHRoZSB0d28gc3RyaW5ncyBhcmUgZXF1YWwKLSAgICAgKiAgICAgICAgCWZhbHNlCW90aGVyd2lzZQorICAgICAqCisgICAgICogQHBhcmFtICAgIHN0cjEgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorICAgICAqIEBwYXJhbSAgICBzdHIyICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKyAgICAgKiBAcmV0dXJuICAgIHRydWUgICAgaWYgdGhlIHR3byBzdHJpbmdzIGFyZSBlcXVhbAorICAgICAqICAgICAgICAgICAgZmFsc2UgICAgb3RoZXJ3aXNlCiAgICAgICovCiAgICAgc3RhdGljIHByaXZhdGUgYm9vbGVhbiBpc0VxdWFsKFN0cmluZyBzdHIxLCBTdHJpbmcgc3RyMikgewogICAgICAgICBpZiAoc3RyMSA9PSBudWxsKSB7CkBAIC0xMDksMTAgKzEwOSwxMCBAQAogICAgIC8qKgogICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0d28gPGNvZGU+UGFzc3dvcmRDcmVkZW50aWFsPC9jb2RlPiBvYmplY3RzIGFyZSBlcXVhbDsgZmFsc2Ugb3RoZXJ3aXNlCiAgICAgICoKLSAgICAgKiBAcGFyYW0JcEMxCTxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KLSAgICAgKiBAcGFyYW0JcEMyCTxjb2RlPlBhc3N3b3JkQ3JlZGVudGlhbDwvY29kZT4KLSAgICAgKiBAcmV0dXJuCXRydWUJaWYgdGhlIHR3byBQYXNzd29yZENyZWRlbnRpYWxzIGFyZSBlcXVhbAotICAgICAqICAgICAgICAJZmFsc2UJb3RoZXJ3aXNlCisgICAgICogQHBhcmFtICAgIHBDMSAgICA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+CisgICAgICogQHBhcmFtICAgIHBDMiAgICA8Y29kZT5QYXNzd29yZENyZWRlbnRpYWw8L2NvZGU+CisgICAgICogQHJldHVybiAgICB0cnVlICAgIGlmIHRoZSB0d28gUGFzc3dvcmRDcmVkZW50aWFscyBhcmUgZXF1YWwKKyAgICAgKiAgICAgICAgICAgIGZhbHNlICAgIG90aGVyd2lzZQogICAgICAqLwogICAgIHN0YXRpYyBwdWJsaWMgYm9vbGVhbiBpc1Bhc3N3b3JkQ3JlZGVudGlhbEVxdWFsKFBhc3N3b3JkQ3JlZGVudGlhbCBwQzEsIFBhc3N3b3JkQ3JlZGVudGlhbCBwQzIpIHsKICAgICAgICAgaWYgKHBDMSA9PSBwQzIpCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9yYS9zcmMvY29tL3N1bi9qZGJjcmEvdXRpbC9idWlsZC54bWwKaW5kZXggYTU1YmJmMC4uZjA2MGU3ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3IvcmEvc3JjL2NvbS9zdW4vamRiY3JhL3V0aWwvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3JhL3NyYy9jb20vc3VuL2pkYmNyYS91dGlsL2J1aWxkLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8cHJvamVjdCBuYW1lPSJqZGJjX2Nvbm5lY3RvciIgYmFzZWRpcj0iLiIgZGVmYXVsdD0iYnVpbGQiPgogICA8cHJvcGVydHkgbmFtZT0icGtnLmRpciIgdmFsdWU9ImNvbS9zdW4vZ2pjL3V0aWwiLz4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJjbGVhbiI+CiAgICAgPGFudCBhbnRmaWxlPSJidWlsZC54bWwiIGRpcj0iJHtnamMuaG9tZX0vYmluIiB0YXJnZXQ9ImNsZWFuIi8+CiAgIDwvdGFyZ2V0PgpAQCAtMzMsNyArMzMsNyBAQAogICAgICAgPGphciBqYXJmaWxlPSIke2Rpc3QuZGlyfS8ke3BrZy5kaXJ9L3V0aWwuamFyIiBiYXNlZGlyPSIke2NsYXNzLmRpcn0iCiAgICAgICAgIGluY2x1ZGVzPSIke3BrZy5kaXJ9LyoqLyoiLz4KICAgPC90YXJnZXQ+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZTEzIiBkZXBlbmRzPSJjb21waWxlIi8+CiAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZTE0IiBkZXBlbmRzPSJjb21waWxlIi8+CiAKQEAgLTQ0LDUgKzQ0LDUgQEAKICAgPHRhcmdldCBuYW1lPSJidWlsZDE0IiBkZXBlbmRzPSJjb21waWxlMTQsIHBhY2thZ2UxNCIvPgogCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImJ1aWxkMTMsIGJ1aWxkMTQiLz4KLSAgCisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3NlcnZsZXQvU2ltcGxlQmFua1NlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3NlcnZsZXQvU2ltcGxlQmFua1NlcnZsZXQuamF2YQppbmRleCA5NmU4M2E1Li5lMTQwMDZlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9zZXJ2bGV0L1NpbXBsZUJhbmtTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3Ivc2VydmxldC9TaW1wbGVCYW5rU2VydmxldC5qYXZhCkBAIC0xNywxNyArMTcsMTcgQEAKIHBhY2thZ2Ugc2FtcGxlcy5lamIuc3ViY2xhc3Npbmcuc2VydmxldDsKIAogaW1wb3J0IGphdmEuaW8uKjsKLWltcG9ydCBqYXZhLnV0aWwuKjsgCi1pbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lio7IAotaW1wb3J0IGphdmF4Lm5hbWluZy4qOyAKLWltcG9ydCBqYWthcnRhLnNlcnZsZXQuaHR0cC4qOyAKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2ltcG9ydCBqYWthcnRhLnNlcnZsZXQuKjsKK2ltcG9ydCBqYXZheC5uYW1pbmcuKjsKK2ltcG9ydCBqYWthcnRhLnNlcnZsZXQuaHR0cC4qOwogaW1wb3J0IGphdmF4LnJtaS5Qb3J0YWJsZVJlbW90ZU9iamVjdDsKLWltcG9ydCBqYWthcnRhLmVqYi4qOyAKK2ltcG9ydCBqYWthcnRhLmVqYi4qOwogCi1pbXBvcnQgc2FtcGxlcy5lamIuc3ViY2xhc3NpbmcuZWpiLio7IAoraW1wb3J0IHNhbXBsZXMuZWpiLnN1YmNsYXNzaW5nLmVqYi4qOwogaW1wb3J0IGNvbS5zdW4uamRiY3JhLnNwaS5KZGJjU2V0dXBBZG1pbjsKIAotcHVibGljIGNsYXNzIFNpbXBsZUJhbmtTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgeyAgCitwdWJsaWMgY2xhc3MgU2ltcGxlQmFua1NlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAKIAogICBJbml0aWFsQ29udGV4dCBpbml0Q29udGV4dCA9IG51bGw7CkBAIC00NCwxNCArNDQsMTQgQEAKICAgICBkb0xvb2t1cCgpOwogICB9CiAKLSAgcHVibGljIHZvaWQgZG9HZXQgKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIAotICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAKKyAgcHVibGljIHZvaWQgZG9HZXQgKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCisgICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKLSAgfSAgCisgIH0KIAotICAvKiogaGFuZGxlcyB0aGUgSFRUUCBQT1NUIG9wZXJhdGlvbiAqKi8gCi0gIHB1YmxpYyB2b2lkIGRvUG9zdCAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgCi0gICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7IAorICAvKiogaGFuZGxlcyB0aGUgSFRUUCBQT1NUIG9wZXJhdGlvbiAqKi8KKyAgcHVibGljIHZvaWQgZG9Qb3N0IChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCxIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKQorICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2ltcGxlQmFua1NlcnZsZXQgaXMgZXhlY3V0aW5nIik7CiAgICAgU3RyaW5nIFNTTiA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJTU04iKTsKIApAQCAtNjYsMTQgKzY2LDE0IEBACiAgICAgU3RyaW5nIHppcENvZGUgPSAiIjsKICAgICBsb25nIGN1cnJlbnRTYXZpbmdzQmFsYW5jZSA9IDA7CiAgICAgbG9uZyBjdXJyZW50Q2hlY2tpbmdCYWxhbmNlID0gMDsKLSAgICAgCisKICAgICBTdHJpbmcgYWN0aW9uID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoImFjdGlvbiIpOwogICAgIGlmIChhY3Rpb24uZXF1YWxzKCJDcmVhdGUiKSkKICAgICB7CiAgICAgICBtZXNzYWdlID0gIkFkZCBDdXN0b21lciI7CiAgICAgICBqc3AgPSAiL1NpbXBsZUJhbmtBZGQuanNwIjsKICAgICB9Ci0gICAgZWxzZSBpZiAoYWN0aW9uLmVxdWFscygiQWRkIEN1c3RvbWVyIikpIAorICAgIGVsc2UgaWYgKGFjdGlvbi5lcXVhbHMoIkFkZCBDdXN0b21lciIpKQogICAgIHsKICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWRkIEN1c3RvbWVyIGJ1dHRvbiBwcmVzc2VkIik7CiAgICAgICBTU04gPSByZXF1ZXN0LmdldFBhcmFtZXRlcigiU1NOIik7CkBAIC05MCw3ICs5MCw3IEBACiAgICAgICAgIGN1c3RvbWVyU2F2aW5ncyA9IGN1c3RvbWVyU2F2aW5nc0hvbWUuY3JlYXRlKFNTTiwgbGFzdE5hbWUsIGZpcnN0TmFtZSwgYWRkcmVzczEsIGFkZHJlc3MyLCBjaXR5LCBzdGF0ZSwgemlwQ29kZSk7CiAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvdWxkIG5vdCBjcmVhdGUgdGhlIGN1c3RvbWVyIHNhdmluZ3MgcmVtb3RlIGJlYW4gOiAiICsgZS50b1N0cmluZygpKTsKLQl0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CisgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAvL3JldHVybjsKICAgICAgIH0KICAgICAgIG1lc3NhZ2UgPSAiQ3VzdG9tZXIgQWRkZWQuIjsKQEAgLTEwMyw3ICsxMDMsNyBAQAogICAgICAgICBjdXN0b21lclNhdmluZ3MgPSBjdXN0b21lclNhdmluZ3NIb21lLmZpbmRCeVByaW1hcnlLZXkoU1NOKTsKICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ291bGQgbm90IGZpbmQgdGhlIGN1c3RvbWVyIHJlbW90ZSBiZWFuIDogIiArIGUudG9TdHJpbmcoKSk7Ci0JdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgLy9yZXR1cm47CiAgICAgICB9CiAgICAgICBqc3AgPSAiL1NpbXBsZUJhbmtFZGl0LmpzcCI7CkBAIC0xMTUsNyArMTE1LDcgQEAKICAgICAgICAgY3VzdG9tZXJTYXZpbmdzID0gY3VzdG9tZXJTYXZpbmdzSG9tZS5maW5kQnlQcmltYXJ5S2V5KFNTTik7CiAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvdWxkIG5vdCBmaW5kIHRoZSBjdXN0b21lciBzYXZpbmdzIHJlbW90ZSBiZWFuIDogIiArIGUudG9TdHJpbmcoKSk7Ci0JdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgLy9yZXR1cm47CiAgICAgICB9CiAgICAgICBtZXNzYWdlID0gIkRlbGV0ZSBDdXN0b21lciI7CkBAIC0xMjcsMTIgKzEyNywxMiBAQAogICAgICAgICBjdXN0b21lclNhdmluZ3NIb21lLmZpbmRCeVByaW1hcnlLZXkoU1NOKS5yZW1vdmUoKTsKICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ291bGQgbm90IGRlbGV0ZSB0aGUgY3VzdG9tZXIgc2F2aW5ncyBiZWFuIDogIiArIGUudG9TdHJpbmcoKSk7Ci0JdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgLy9yZXR1cm47CiAgICAgICB9CiAgICAgICBtZXNzYWdlID0gIkN1c3RvbWVyIERlbGV0ZWQuIjsKICAgICAgIGpzcCA9ICIvU2ltcGxlQmFua01lc3NhZ2UuanNwIjsKLSAgICB9ICAKKyAgICB9CiAKIAogICAgIGVsc2UgaWYgKGFjdGlvbi5lcXVhbHMoIlVwZGF0ZSIpKQpAQCAtMTQyLDcgKzE0Miw3IEBACiAgICAgICAgIGN1c3RvbWVyU2F2aW5ncyA9IChDdXN0b21lclNhdmluZ3MpY3VzdG9tZXJTYXZpbmdzSG9tZS5maW5kQnlQcmltYXJ5S2V5KFNTTik7CiAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvdWxkIG5vdCBmaW5kIHRoZSBjdXN0b21lciBzYXZpbmdzIHJlbW90ZSBiZWFuIDogIiArIGUudG9TdHJpbmcoKSk7Ci0JdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgLy9yZXR1cm47CiAgICAgICB9CiAKQEAgLTE1MSw3ICsxNTEsNyBAQAogICAgICAgICBjdXN0b21lckNoZWNraW5nID0gKEN1c3RvbWVyQ2hlY2tpbmcpY3VzdG9tZXJDaGVja2luZ0hvbWUuZmluZEJ5UHJpbWFyeUtleShTU04pOwogICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb3VsZCBub3QgZmluZCB0aGUgY3VzdG9tZXIgY2hlY2tpbmcgcmVtb3RlIGJlYW4gOiAiICsgZS50b1N0cmluZygpKTsKLQl0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CisgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAvL3JldHVybjsKICAgICAgIH0KIApAQCAtMjExLDkgKzIxMSw5IEBACiAgICAgUmVxdWVzdERpc3BhdGNoZXIgZGlzcGF0Y2hlciA9IGdldFNlcnZsZXRDb250ZXh0KCkuZ2V0UmVxdWVzdERpc3BhdGNoZXIoanNwKTsKICAgICBkaXNwYXRjaGVyLmluY2x1ZGUocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIHJldHVybjsKLSAgfSAKKyAgfQogCi0gIHB1YmxpYyB2b2lkIGRvTG9va3VwKCkgCisgIHB1YmxpYyB2b2lkIGRvTG9va3VwKCkKICAgewogICAgIHRyeSB7CiAgICAgICBpbml0Q29udGV4dCA9IG5ldyBqYXZheC5uYW1pbmcuSW5pdGlhbENvbnRleHQoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3NxbC9kcm9wQmFua1RhYmxlcy5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9jb25uZWN0b3Ivd2ViMmNvbm5lY3Rvci9zcWwvZHJvcEJhbmtUYWJsZXMuc3FsCmluZGV4IGRmOWRmMzQuLjMzYTcwNjkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2Nvbm5lY3Rvci93ZWIyY29ubmVjdG9yL3NxbC9kcm9wQmFua1RhYmxlcy5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvY29ubmVjdG9yL3dlYjJjb25uZWN0b3Ivc3FsL2Ryb3BCYW5rVGFibGVzLnNxbApAQCAtMSArMSBAQAotZHJvcCB0YWJsZSBjdXN0b21lcjI7DQorZHJvcCB0YWJsZSBjdXN0b21lcjI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L0RlcGxveW1lbnRUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L0RlcGxveW1lbnRUZXN0LmphdmEKaW5kZXggZjBhNjU5My4uYTgwYzFmZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9EZXBsb3ltZW50VGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvRGVwbG95bWVudFRlc3QuamF2YQpAQCAtNDAsMTYgKzQwLDE2IEBACiAgKiBAYXV0aG9yOiB0anF1aW5uCiAgKi8KIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBEZXBsb3ltZW50VGVzdCB7Ci0gICAgCisKICAgICAvKiogaW5kaWNhdGVzIGlmIHRoZSB0ZXN0IGNsYXNzIGhhcyBiZWVuIGluaXRpYWxpemVkIHlldCAqLwogICAgIHByaXZhdGUgYm9vbGVhbiBpc0luaXRlZCA9IGZhbHNlOwotICAgIAorCiAgICAgLyoqIGFudCBwcm9qZWN0IGJhc2VkIG9uIHRoZSBidWlsZC54bWwgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5ICovCiAgICAgcHJvdGVjdGVkIFByb2plY3QgcHJvamVjdDsKLSAgICAKKwogICAgIC8qKiB0aGUgYnVpbGQueG1sIGZpbGUgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5ICovCiAgICAgcHJvdGVjdGVkIEZpbGUgYnVpbGRGaWxlOwotICAgIAorCiAgICAgLyoqIE91ciBjdXJyZW50IG1lc3NhZ2Ugb3V0cHV0IHN0YXR1cy4gRm9sbG93cyBQcm9qZWN0Lk1TR19YWFguICovCiAgICAgcHJpdmF0ZSBpbnQgbXNnT3V0cHV0TGV2ZWwgPSBQcm9qZWN0Lk1TR19JTkZPOwogCkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgcHJpdmF0ZSBQcmludFN0cmVhbSBvdXQ7CiAgICAgcHJpdmF0ZSBQcmludFN0cmVhbSBlcnI7CiAgICAgcHJpdmF0ZSBJbnB1dFN0cmVhbSBpbjsKLSAgICAKKwogICAgIC8qKgogICAgICAqIFRoZSBBbnQgbG9nZ2VyIGNsYXNzLiBUaGVyZSBtYXkgYmUgb25seSBvbmUgbG9nZ2VyLiBJdCB3aWxsIGhhdmUKICAgICAgKiB0aGUgcmlnaHQgdG8gdXNlIHRoZSAnb3V0JyBQcmludFN0cmVhbS4gVGhlIGNsYXNzIG11c3QgaW1wbGVtZW50cyB0aGUKQEAgLTY5LDcgKzY5LDcgQEAKICAgICBwdWJsaWMgRGVwbG95bWVudFRlc3QoKSB7CiAgICAgICAgIGluaXQoKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKlJlcG9ydHMgaWYgdGhlIGNsYXNzIGhhcyBiZWVuIGluaXRpYWxpemVkIG9yIG5vdC4KICAgICAgKkByZXR1cm4gd2hldGhlciB0aGUgaW5pdGlhbGl6ZWQgaGFzIG9jY3VycmVkIG9yIG5vdApAQCAtNzcsNyArNzcsNyBAQAogICAgIHByb3RlY3RlZCBib29sZWFuIGlzSW5pdGVkKCkgewogICAgICAgICByZXR1cm4gaXNJbml0ZWQ7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICpQcmVwYXJlIHRoZSBjYWxsYWJsZSBhbnQgZW52aXJvbm1lbnQgZm9yIHRoZSB0ZXN0LgogICAgICAqLwpAQCAtODcsMTIgKzg3LDEyIEBACiAgICAgICAgICAgICBlcnIgPSBTeXN0ZW0uZXJyOwogICAgICAgICAgICAgb3V0ID0gU3lzdGVtLm91dDsKICAgICAgICAgICAgIGluID0gU3lzdGVtLmluOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKlVzZSB0aGUgYnVpbGQueG1sIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgYnVpbGRGaWxlID0gbmV3IEZpbGUoImJ1aWxkLnhtbCIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKlRvIGNhbGwgaW50byBhbnQsIGNyZWF0ZSBhIG5ldyBQcm9qZWN0IGFuZCBwcmVwYXJlIGl0IGZvciB1c2UuCiAgICAgICAgICAgICAgKi8KQEAgLTEwMCwxOSArMTAwLDE5IEBACiAvLyAgICAgICAgICAgIG1zZ091dHB1dExldmVsID0gUHJvamVjdC5NU0dfVkVSQk9TRTsKICAgICAgICAgICAgIHByb2plY3QuYWRkQnVpbGRMaXN0ZW5lcihjcmVhdGVMb2dnZXIoKSk7CiAgICAgICAgICAgICBwcm9qZWN0LnNldEJhc2VkaXIoIi4iKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBwcm9qZWN0LmluaXQoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICpTZXQgdXAgdGhlIHByb2plY3QgdG8gdXNlIHRoZSBidWlsZC54bWwgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBQcm9qZWN0SGVscGVyIGhlbHBlciA9IFByb2plY3RIZWxwZXIuZ2V0UHJvamVjdEhlbHBlcigpOwogICAgICAgICAgICAgaGVscGVyLnBhcnNlKHByb2plY3QsIGJ1aWxkRmlsZSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaXNJbml0ZWQgPSB0cnVlOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICpBc3NlbWJsZXMgdGhlIHJlcXVpcmVkIGphciwgd2FyLCBlYXIgZmlsZXMsIGV0Yy4KICAgICAgKi8KQEAgLTEyNiw3ICsxMjYsNyBAQAogICAgIHByb3RlY3RlZCB2b2lkIGRlcGxveSgpIHsKICAgICAgICAgcHJvamVjdC5leGVjdXRlVGFyZ2V0KCJkZXBsb3kuYXNhZG1pbiIpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqUmVkZXBsb3lzIHRoZSBhcHBsaWNhdGlvbiB1c2luZyBhc2FkbWluLgogICAgICAqUmVtb3ZlcyBhcHAgcmVmcyBmaXJzdCwgdGhlbiBkZXBsb3lzLCB0aGVuIGNyZWF0ZXMgYXBwIHJlZnMuCkBAIC0xNDcsNyArMTQ3LDcgQEAKICAgICAgKi8KICAgICBwcm90ZWN0ZWQgdm9pZCBjbGVhbigpIHsKICAgICAgICAgcHJvamVjdC5leGVjdXRlVGFyZ2V0KCJjbGVhbiIpOwotICAgIH0gICAgCisgICAgfQogCiAgICAgLyoqCiAgICAgICpDb25zdHJ1Y3RzIGFuIEV4ZWNUYXNrIGluc3RhbmNlLCBsaW5rZWQgdG8gdGhlIGN1cnJlbnQgcHJvamVjdCwgZm9yCkBAIC0xNjAsNyArMTYwLDcgQEAKICAgICBwcm90ZWN0ZWQgRXhlY1Rhc2sgcHJlcGFyZVJ1bkV4ZWNUYXNrKCkgewogICAgICAgICAvKgogICAgICAgICAgVGhpcyBpcyB0aGUgYW50IGV4Y2VycHQgaW1pdGF0ZWQgYnkgdGhlIGV4ZWMgdGFzayBidWlsdCBieSB0aGlzIG1ldGhvZDoKLSAgICAgICAgIAorCiAgICAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FQUENMSUVOVH0iIHJlc3VsdHByb3BlcnR5PSJyZXN1bHQiIGZhaWxvbmVycm9yPSJmYWxzZSIgb3V0cHV0PSIke2J1aWxkfS8ke2xvZy5pZH0ub3V0cHV0LmxvZyI+CiAgICAgICAgICAgICAgICAgICAgIDxhcmcgbGluZT0iLWNsaWVudCAke2FyY2hpdmVkaXJ9LyR7dGVzdE5hbWV9Q2xpZW50LmphciIvPgogICAgICAgICAgICAgICAgIDwvZXhlYz4KQEAgLTE3Myw3ICsxNzMsNyBAQAogICAgICAgICBleGVjLnNldFRhc2tOYW1lKCJydW5jbGllbnQiKTsKICAgICAgICAgcmV0dXJuIGV4ZWM7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICpQcmVwYXJlcyBhIGNvbW1hbmQgbGluZSBhcmd1bWVudCBvYmplY3QgZm9yIHVzZSB3aXRoIHRoZSBhcHBjbGllbnQKICAgICAgKmV4ZWMgdGFzayB0aGF0IHVzZXMgdGhlIGRlZmF1bHQgc2V0IG9mIGFyZ3VtZW50czogdGhlIGRlZmF1bHQKQEAgLTE4OCw3ICsxODgsNyBAQAogICAgICAgICBhcmcuc2V0TGluZSgiLWNsaWVudCAiICsgYXJjaGl2ZURpciArICIvIiArIHRlc3ROYW1lICsgIkNsaWVudC5qYXIiKTsKICAgICAgICAgcmV0dXJuIGFyZzsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKkRlZmF1bHQgaW1wbGVtZW50YXRpb24gZm9yIGV4ZWN1dGluZyB0aGUgYXBwIGNsaWVudAogICAgICAqLwpAQCAtMTk3LDcgKzE5Nyw3IEBACiAgICAgICAgIHByZXBhcmVSdW5Db21tYW5kbGluZUFyZyhleGVjKTsKICAgICAgICAgZXhlYy5leGVjdXRlKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICpQcmVwYXJlcyB0aGUgdGVzdCBlbnZpcm9ubWVudCBieSBjbGVhbmluZyB0aGUgYnVpbGQgZGlyZWN0b3J5CiAgICAgICphbmQgYXNzZW1ibGluZyB0aGUgcmVxdWlyZWQgamFyIGZpbGVzLgpAQCAtMjA3LDcgKzIwNyw3IEBACiAgICAgICAgIGNsZWFuKCk7CiAgICAgICAgIGFzc2VtYmxlKCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICpDbGVhbnMgdXAgYWZ0ZXIgYWxsIHRlc3RzIGhhdmUgcnVuLiAgSW4gdGhpcyBjYXNlLCB1bmRlcGxveXMKICAgICAgKnRoZSBhcHBsaWNhdGlvbi4KQEAgLTIxOCw3ICsyMTgsNyBAQAogICAgIH0KIAogICAgIC8vIFRoZSBmb2xsb3dpbmcgaXMgaW5zcGlyZWQgYnkgdGhlIGNvZGUgaW4gYW50IGl0c2VsZi4KLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgdGhlIGRlZmF1bHQgYnVpbGQgbG9nZ2VyIGZvciBzZW5kaW5nIGJ1aWxkIGV2ZW50cyB0byB0aGUgYW50CiAgICAgICogbG9nLgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9hbm5vdGF0aW9uL2FwcGNsaWVudC9zcmMvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Fubm90YXRpb24vYXBwY2xpZW50L3NyYy9DbGllbnQuamF2YQppbmRleCAwODQ5OGQxLi43M2M4NGQyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Fubm90YXRpb24vYXBwY2xpZW50L3NyYy9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Fubm90YXRpb24vYXBwY2xpZW50L3NyYy9DbGllbnQuamF2YQpAQCAtMjEsOCArMjEsOCBAQAogaW1wb3J0IHRlc3QuZWpiLnN0YXRlZnVsLlNGSGVsbG87CiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewotICAgIHByaXZhdGUgc3RhdGljIEBFSkIgU0ZIZWxsbyBzZnVsMTsgCi0gICAgcHJpdmF0ZSBzdGF0aWMgQEVKQihuYW1lPSJlamIvc2ZoZWxsbyIpIFNGSGVsbG8gc2Z1bDI7IAorICAgIHByaXZhdGUgc3RhdGljIEBFSkIgU0ZIZWxsbyBzZnVsMTsKKyAgICBwcml2YXRlIHN0YXRpYyBARUpCKG5hbWU9ImVqYi9zZmhlbGxvIikgU0ZIZWxsbyBzZnVsMjsKIAogICAgIHB1YmxpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvYW5ub3RhdGlvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Fubm90YXRpb24vYnVpbGQueG1sCmluZGV4IDc2MDU0NzAuLmRkNWUxNTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvYW5ub3RhdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9hbm5vdGF0aW9uL2J1aWxkLnhtbApAQCAtMjMsMjQgKzIzLDI0IEBACiAKIDxwcm9qZWN0IG5hbWU9ImVqYiIgZGVmYXVsdD0iYWxsIiBiYXNlZGlyPSIuIj4KIAotCSZjb21tb25CdWlsZDsKKyAgICAmY29tbW9uQnVpbGQ7CiAKLQk8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIj4KLQkJPGRlbGV0ZSBkaXI9IiR7YW5ub3RhdGlvbi5yZXBvcnQuZGlyfSIvPgorICAgIDx0YXJnZXQgbmFtZT0icHJpdmF0ZS1hbGwiPgorICAgICAgICA8ZGVsZXRlIGRpcj0iJHthbm5vdGF0aW9uLnJlcG9ydC5kaXJ9Ii8+CiAKLQkJPGFudCBkaXI9ImVqYiIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9lamIiLz4KLQkJPC9hbnQ+Ci0JCTxhbnQgZGlyPSJhcHBjbGllbnQiIHRhcmdldD0icHJpdmF0ZS1hbGwiPgotCQkJPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0vYXBwY2xpZW50Ii8+Ci0JCTwvYW50PgotCQk8YW50IGRpcj0id2ViIiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L3dlYiIvPgotCQk8L2FudD4KLQkJPGFudCBkaXI9ImluaGVyaXRhbmNlIiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L2luaGVyaXRhbmNlIi8+Ci0JCTwvYW50PgorICAgICAgICA8YW50IGRpcj0iZWpiIiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L2VqYiIvPgorICAgICAgICA8L2FudD4KKyAgICAgICAgPGFudCBkaXI9ImFwcGNsaWVudCIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9hcHBjbGllbnQiLz4KKyAgICAgICAgPC9hbnQ+CisgICAgICAgIDxhbnQgZGlyPSJ3ZWIiIHRhcmdldD0icHJpdmF0ZS1hbGwiPgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0vd2ViIi8+CisgICAgICAgIDwvYW50PgorICAgICAgICA8YW50IGRpcj0iaW5oZXJpdGFuY2UiIHRhcmdldD0icHJpdmF0ZS1hbGwiPgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0vaW5oZXJpdGFuY2UiLz4KKyAgICAgICAgPC9hbnQ+CiAKLQk8L3RhcmdldD4KKyAgICA8L3RhcmdldD4KIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9hbm5vdGF0aW9uL2VqYi9zcmMvSW50ZXJjZXB0b3JCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Fubm90YXRpb24vZWpiL3NyYy9JbnRlcmNlcHRvckIuamF2YQppbmRleCA1NTBjNmZiLi5jOGJkYzBhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Fubm90YXRpb24vZWpiL3NyYy9JbnRlcmNlcHRvckIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Fubm90YXRpb24vZWpiL3NyYy9JbnRlcmNlcHRvckIuamF2YQpAQCAtMjgsNyArMjgsNyBAQAogICAgIEBBcm91bmRJbnZva2UKICAgICBPYmplY3QgYXJvdW5kSW52b2tlQihJbnZvY2F0aW9uQ29udGV4dCBjdHgpIHsKICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfSAgCisgICAgfQogCiAgICAgQFByZURlc3Ryb3kKICAgICB2b2lkIHByZURlc3Ryb3koKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Fubm90YXRpb24vd2ViL3NyYy9TZXJ2bGV0VGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9hbm5vdGF0aW9uL3dlYi9zcmMvU2VydmxldFRlc3QuamF2YQppbmRleCA0MzY3OTM5Li5jOThmZWJhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Fubm90YXRpb24vd2ViL3NyYy9TZXJ2bGV0VGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvYW5ub3RhdGlvbi93ZWIvc3JjL1NlcnZsZXRUZXN0LmphdmEKQEAgLTMxLDggKzMxLDggQEAKIAogQERlY2xhcmVSb2xlcyh7InN0YWZmIn0pCiBwdWJsaWMgY2xhc3MgU2VydmxldFRlc3QgewotICAgIHByaXZhdGUgQEVKQiBTRkhlbGxvIHNmdWwxOyAKLSAgICBwcml2YXRlIEBFSkIobmFtZT0iZWpiL3NmaGVsbG8iKSBTRkhlbGxvIHNmdWwyOyAKKyAgICBwcml2YXRlIEBFSkIgU0ZIZWxsbyBzZnVsMTsKKyAgICBwcml2YXRlIEBFSkIobmFtZT0iZWpiL3NmaGVsbG8iKSBTRkhlbGxvIHNmdWwyOwogCiAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQogICAgICAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvYXV0b2RlcGxveS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2F1dG9kZXBsb3kvYnVpbGQueG1sCmluZGV4IGY3MWIzYWQuLjhiZTQ5NjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvYXV0b2RlcGxveS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9hdXRvZGVwbG95L2J1aWxkLnhtbApAQCAtMjQsMTUgKzI0LDE1IEBACiAKIDxwcm9qZWN0IG5hbWU9ImF1dG9kZXBsb3kiIGRlZmF1bHQ9ImFsbCIgYmFzZWRpcj0iLiI+CiAKLQkmY29tbW9uQnVpbGQ7Ci0gICAgICAgIAorICAgICZjb21tb25CdWlsZDsKKwogICAgICAgICA8cHJvcGVydHkgbmFtZT0iYXV0b2RlcGxveS51dGlsLmJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0vdXRpbCIvPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0iYXV0b2RlcGxveS5hcmNoaXZlLm5hbWUiIHZhbHVlPSJzZXJ2bGV0b25seS53YXIiLz4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImF1dG9kZXBsb3kuYXJjaGl2ZSIgdmFsdWU9Ii4uLy4uL2J1aWxkL3dhci9zZXJ2bGV0b25seS8ke2F1dG9kZXBsb3kuYXJjaGl2ZS5uYW1lfSIvPgotICAgICAgICAKKwogICAgICAgICAmYXV0b2RlcGxveVV0aWw7CiAKLQk8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIj4KKyAgICA8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIj4KIAogICAgICAgICAgICAgPCEtLQogICAgICAgICAgICAgICAgIEJ1aWxkIHRoZSBjb21tb24gdG9vbHMgdXNlZCBieSBhdXRvZGVwbG95IHRlc3RzLgpAQCAtNDcsNyArNDcsNyBAQAogICAgICAgICAgICAgPGFudCBkaXI9Ii4uL3dhci9zZXJ2bGV0b25seSIgdGFyZ2V0PSJhc3NlbWJsZSI+CiAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0vd2FyL3NlcnZsZXRvbmx5Ii8+CiAgICAgICAgICAgICA8L2FudD4KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICA8YW50IGRpcj0ic2ltcGxlIiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9zaW1wbGUiLz4KICAgICAgICAgICAgIDwvYW50PgpAQCAtNTUsMTQgKzU1LDE0IEBACiAgICAgICAgICAgICA8YW50IGRpcj0ic2xvd0NvcHkiIHRhcmdldD0icHJpdmF0ZS1hbGwiPgogICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L3Nsb3dDb3B5Ii8+CiAgICAgICAgICAgICA8L2FudD4KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICA8IS0tIGNvbW1lbnRlZCBvdXQgYmVjYXVzZSBsb2cgc2VhcmNoIG9uIExpbnV4IGRvZXMgbm90IHdvcmsgYXMgZXhwZWN0ZWQgLS0+CiAgICAgICAgICAgICA8IS0tCiAgICAgICAgICAgICAgICAgICAgIDxhbnQgZGlyPSJ3aXRoRUpCIiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS93aXRoRUpCIi8+CiAgICAgICAgICAgICAgICAgICAgIDwvYW50PgogICAgICAgICAgICAgLS0+Ci0gICAgICAgIAotCTwvdGFyZ2V0PgorCisgICAgPC90YXJnZXQ+CiAKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvYXV0b2RlcGxveS9zaW1wbGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9hdXRvZGVwbG95L3NpbXBsZS9idWlsZC54bWwKaW5kZXggOGRhMzg3My4uMGQ0MmE5MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9hdXRvZGVwbG95L3NpbXBsZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9hdXRvZGVwbG95L3NpbXBsZS9idWlsZC54bWwKQEAgLTIyLDM4ICsyMiwzOCBAQAogPCFFTlRJVFkgY29tbW9uQnVpbGQgU1lTVEVNICIuLy4uLy4uL2NvbmZpZy9jb21tb24ueG1sIj4KIF0+CiA8IS0tCi0gICAgVGhpcyBtYWtlcyBzdXJlIHRoYXQgcmVkZXBsb3ltZW50IG9mIGFuIGF1dG9kZXBsb3llZCBhcHAgd29ya3MuICBTcGVjaWZpY2FsbHksIAorICAgIFRoaXMgbWFrZXMgc3VyZSB0aGF0IHJlZGVwbG95bWVudCBvZiBhbiBhdXRvZGVwbG95ZWQgYXBwIHdvcmtzLiAgU3BlY2lmaWNhbGx5LAogICAgIGl0IHRlc3RzIHRoYXQgdGhlIHZhbGlkYXRpb25zIChnb3Zlcm5pbmcgYXBwIHJlZmNzIGluIHBhcnRpY3VsYXIpIHBhc3MgYXMKICAgICB0aGUgYXV0b2RlcGxveWVkIGFwcCBpcyByZW1vdmVkIGFuZCB0aGVuIHJlZGVwbG95ZWQuCiAtLT4KLSAKKwogPHByb2plY3QgbmFtZT0iYXV0b2RlcGxveS1zaW1wbGUiIGRlZmF1bHQ9ImFsbCIgYmFzZWRpcj0iLiI+CiAKLSAJJmNvbW1vbkJ1aWxkOworICAgICAmY29tbW9uQnVpbGQ7CiAgICAgICAgICZhdXRvZGVwbG95VXRpbDsKIAogICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0TmFtZSIgdmFsdWU9InNpbXBsZWF1dG9kZXBsb3kiLz4KLSAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InByZXBhcmUiIGRlcGVuZHM9ImluaXQiPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0icmVzdWx0LnByb3BlcnR5LmZpbGUiIHZhbHVlPSIke2J1aWxkfS9yZXN1bHQucHJvcGVydGllcyIvPgotPGVjaG8+aW4gc2ltcGxlL2J1aWxkLnhtbCBhbmQgYnVpbGQgaXMgJHtidWlsZH08L2VjaG8+ICAgICAgICAgICAgCis8ZWNobz5pbiBzaW1wbGUvYnVpbGQueG1sIGFuZCBidWlsZCBpcyAke2J1aWxkfTwvZWNobz4KICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZH0iIC8+CiAKICAgICA8L3RhcmdldD4KLQkKKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9InByZXBhcmUiPgotICAgICAgICAKKwogICAgICAgICA8ZWNobz5Vc2luZyBwcmV2aW91c2x5LWJ1aWx0ICR7YXV0b2RlcGxveS5hcmNoaXZlfTwvZWNobz4KICAgICAgICAgPCEtLQogICAgICAgICAgICAgU29tZSBlYXJsaWVyIHRlc3RzIHNob3VsZCBoYXZlIHJ1biBhbHJlYWR5LCBzbyB0aGUgYXBwIHdlIHVzZSBmb3IgYXV0b2RlcGxveSB0ZXN0aW5nCiAgICAgICAgICAgICBzaG91bGQgYWxyZWFkeSBiZSBpbiBwbGFjZSBpbiB0aGUgYnVpbGQgZGlyZWN0b3J5LgogICAgICAgICAtLT4KICAgICA8L3RhcmdldD4KLSAgICAKLQkKLSAgICAKKworCisKICAgICA8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIiBkZXBlbmRzPSJidWlsZCI+Ci0gICAgICAgIAorCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVjbGFyZS10ZXN0Ij4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJkZXNjcmlwdGlvbiIgdmFsdWU9ImF1dG9kZXBsb3kvc2ltcGxlIFRlc3QgYXV0b2RlcGxveSwgYXV0by1yZWRlcGxveSwgYW5kIGF1dG91bmRlcGxveSIvPgogICAgICAgICA8L2FudGNhbGw+CkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgICAgICByZWNvcmQgdGhlIHJlc3VsdHMgb2YgdGhlIGF1dG9kZXBsb3kgZGlyZWN0b3J5IG1vbml0b3JpbmcgSmF2YSBjbGFzcy4KICAgICAgICAgLS0+CiAgICAgICAgIDxkZWxldGUgZmlsZT0iJHtyZXN1bHQucHJvcGVydHkuZmlsZX0iIHF1aWV0PSJ0cnVlIi8+Ci0gICAgICAgIAorCiAgICAgICAgIDwhLS0KICAgICAgICAgICAgIERvIHRoZSBhdXRvLWRlcGxveW1lbnQuCiAgICAgICAgLS0+CkBAIC03NSw3ICs3NSw3IEBACiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8IS0tCi0gICAgICAgICAgICBSZWRlcGxveSB0aGUgYXJjaGl2ZS4gIFRoaXMgdXNlZCB0byB0cmlnZ2VyIGFuIGVycm9yIGJlY2F1c2UgdGhlIAorICAgICAgICAgICAgUmVkZXBsb3kgdGhlIGFyY2hpdmUuICBUaGlzIHVzZWQgdG8gdHJpZ2dlciBhbiBlcnJvciBiZWNhdXNlIHRoZQogICAgICAgICAgICAgYXBwIHJlZiB3YXMgbm90IHJlbW92ZWQgYmVmb3JlIHRoZSBhcHAgd2FzIHJlbW92ZWQuCiAgICAgICAgIC0tPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS5hdXRvZGVwbG95Ij4KQEAgLTExMyw3ICsxMTMsNyBAQAogICAgICAgICAgICAgICAgIDxlcXVhbHMgYXJnMT0iJHtzaW1wbGUuYXV0b2RlcGxveS51bmRlcGxveVJlc3VsdH0iIGFyZzI9IjAiLz4KICAgICAgICAgICAgIDwvYW5kPgogICAgICAgICA8L2NvbmRpdGlvbj4KLSAgICAgICAgCisKICAgICAgICAgPCEtLQogICAgICAgICAgICAgSWYgdGhlIHByb3BlcnR5ICJyZXN1bHQiIHdhcyBub3Qgc2V0IGJ5IHRoZSAiY29uZGl0aW9uIiB0YXNrIGp1c3QgYWJvdmUgdGhlbiBzb21ldGhpbmcKICAgICAgICAgICAgIHdlbnQgd3JvbmcgYW5kIHdlIHNldCByZXN1bHQgdG8gMSBub3cuCkBAIC0xMjMsMTIgKzEyMywxMiBAQAogICAgICAgICAgICAgICAgIDxpc3NldCBwcm9wZXJ0eT0icmVzdWx0Ii8+CiAgICAgICAgICAgICA8L25vdD4KICAgICAgICAgPC9jb25kaXRpb24+Ci0gICAgICAgIAorCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icHJvY2Vzc1Jlc3VsdCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0icmVzdWx0IiB2YWx1ZT0iJHtyZXN1bHR9Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ibG9nIiB2YWx1ZT0iJHtidWlsZH0vb3V0cHV0LmxvZyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICA8L3RhcmdldD4KLSAgICAKKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9hdXRvZGVwbG95L3Nsb3dDb3B5L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvYXV0b2RlcGxveS9zbG93Q29weS9idWlsZC54bWwKaW5kZXggMzcxNzBkMi4uZTA3ZDMzOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9hdXRvZGVwbG95L3Nsb3dDb3B5L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2F1dG9kZXBsb3kvc2xvd0NvcHkvYnVpbGQueG1sCkBAIC0yMiwyMSArMjIsMjEgQEAKIDwhRU5USVRZIGNvbW1vbkJ1aWxkIFNZU1RFTSAiLi8uLi8uLi9jb25maWcvY29tbW9uLnhtbCI+CiBdPgogPCEtLQotICAgIE5vdGUgdGhhdCB0aGlzIGN1cnJlbnRseSBhc3N1bWVzIHRoYXQgdGhlIGVhci9lYXJ3aXRoZWpiIGFuZCBlamIvc3RhdGVsZXNzaGVsbG8gcHJvamVjdHMgaGF2ZSBydW4gdG8gYnVpbGQgCisgICAgTm90ZSB0aGF0IHRoaXMgY3VycmVudGx5IGFzc3VtZXMgdGhhdCB0aGUgZWFyL2VhcndpdGhlamIgYW5kIGVqYi9zdGF0ZWxlc3NoZWxsbyBwcm9qZWN0cyBoYXZlIHJ1biB0byBidWlsZAogICAgIHRoZSBlYXIgdXNlZCBmb3IgdGhpcyB0ZXN0LgogCiAgICAgQWxzbyBub3RlIHRoYXQgdGhpcyB0ZXN0IGV4cGVjdHMgdGhlICdncmVwJyBjb21tYW5kIHRvIGJlIHByZXNlbnQgaW4gdGhlIG9wZXJhdGluZyBlbnZpcm9ubWVudC4KLSAgICBUaGlzIGlzIGZpbmUgb24gU29sYXJpcyBhbmQgTGludXggc3lzdGVtcywgYW5kIHNob3VsZCBiZSBmaW5lIG9uIFdpbmRvd3Mgc3lzdGVtcyBwcmVwYXJlZCAKLSAgICBhY2NvcmRpbmcgdG8gdGhlIHJlcXVpcmVtZW50cyBmb3IgYnVpbGRpbmcgdGhlIGFwcCBzZXJ2ZXIuICAKKyAgICBUaGlzIGlzIGZpbmUgb24gU29sYXJpcyBhbmQgTGludXggc3lzdGVtcywgYW5kIHNob3VsZCBiZSBmaW5lIG9uIFdpbmRvd3Mgc3lzdGVtcyBwcmVwYXJlZAorICAgIGFjY29yZGluZyB0byB0aGUgcmVxdWlyZW1lbnRzIGZvciBidWlsZGluZyB0aGUgYXBwIHNlcnZlci4KIC0tPgotIAorCiA8cHJvamVjdCBuYW1lPSJhdXRvZGVwbG95LXNsb3djb3B5IiBkZWZhdWx0PSJhbGwiIGJhc2VkaXI9Ii4iPgogCi0gCSZjb21tb25CdWlsZDsKKyAgICAgJmNvbW1vbkJ1aWxkOwogICAgICAgICAmYXV0b2RlcGxveVV0aWw7CiAKICAgICA8cHJvcGVydHkgbmFtZT0idGVzdE5hbWUiIHZhbHVlPSJzbG93Y29weSIvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJwcmVwYXJlIiBkZXBlbmRzPSJpbml0Ij4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImlucHV0QXJjaGl2ZSIgdmFsdWU9IiR7YXV0b2RlcGxveS5hcmNoaXZlfSIvPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0ib3V0cHV0QXJjaGl2ZSIgdmFsdWU9IiR7YXV0b2RlcGxveS5kaXJ9LyR7YXV0b2RlcGxveS5hcmNoaXZlLm5hbWV9Ii8+CkBAIC00Nyw0MSArNDcsNDEgQEAKICAgICAgICAgICAgIGludGVydmFsIHdpdGggd2hpY2ggdGhlIGF1dG9kZXBsb3kgdGhyZWFkIHJlY2hlY2tzIHRoZSBmaWxlcwogICAgICAgICAgICAgaW4gdGhlIGF1dG9kZXBsb3kgZGlyZWN0b3J5LiAgQnkgdXNpbmcgYSBzZXR0aW5nIHNpZ25pZmljYW50bHkKICAgICAgICAgICAgIGxvbmdlciB0aGFuIHRoZSAyLXNlY29uZCBhdXRvZGVwbG95IHBlcmlvZCwgd2UgdGVzdCB0d28gY29kZSBwYXRocyBpbiB0aGUKLSAgICAgICAgICAgIGF1dG9kZXBsb3kgY29kZS4gCi0gICAgICAgICAgICAKKyAgICAgICAgICAgIGF1dG9kZXBsb3kgY29kZS4KKwogICAgICAgICAgICAgT25lIGNvZGUgcGF0aCBzdXBwcmVzc2VzIGEgcmV0cnkgb2YgdGhlIGZpbGUKICAgICAgICAgICAgIGlmIGl0IGhhcyBmYWlsZWQgdG8gb3BlbiBzdWNjZXNzZnVsbHkgYXMgYW4gYXJjaGl2ZSBwcmV2aW91c2x5CiAgICAgICAgICAgICBhbmQgaGFzIGdyb3duIGluIHNpemUgc2luY2UgdGhlIGxhc3QgY2hlY2sgb2YgdGhlIGZpbGUuICBUaGUKICAgICAgICAgICAgIGFzc3VtcHRpb24gaW4gdGhpcyBjYXNlIGlzIHRoYXQsIHNpbmNlIHRoZSBmaWxlIGhhcyBncm93biBzaW5jZSB0aGUKLSAgICAgICAgICAgIGxhc3QgY2hlY2ssIGl0IG1pZ2h0IGNvbnRpbnVlIHRvIGdyb3cgYW5kIHNvIHdlIGRlY2lkZSBub3QgdG8gCisgICAgICAgICAgICBsYXN0IGNoZWNrLCBpdCBtaWdodCBjb250aW51ZSB0byBncm93IGFuZCBzbyB3ZSBkZWNpZGUgbm90IHRvCiAgICAgICAgICAgICByZXRyeSBpdCBhdCB0aGF0IG1vbWVudC4KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBUaGUgb3RoZXIgY29kZSBwYXRoIGRldGVjdHMgcnVucyB3aGVuIHRoZQogICAgICAgICAgICAgc2l6ZSBoYXMgbm90IGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgY2hlY2suICBUaGlzIHNldCBvZiBsb2dpYwogICAgICAgICAgICAgdGhlbiB0cmllcyB0byBvcGVuIHRoZSBmaWxlIGFzIGFuIGFyY2hpdmUKICAgICAgICAgICAgIGFnYWluLiAgKEhlcmUsIHRoZSBhc3N1bXB0aW9uIGlzIHRoYXQgc2luY2UgdGhlIGZpbGUgZGlkCiAgICAgICAgICAgICBub3QgZ3JvdyBzaW5jZSB0aGUgcHJldmlvdXMgY2hlY2ssIGl0IG1pZ2h0IGJlIGRvbmUgZ3Jvd2luZyBhbmQKLSAgICAgICAgICAgIHRoZXJlZm9yZSBpdCBtYWtlcyBzZW5zZSB0byB0cnkgdG8gb3BlbiBpdCBhZ2FpbiBub3cpLiAgCi0gICAgICAgICAgICBGb3IgbW9zdCBvZiB0aGUgaXRlcmF0aW9ucywgdGhpcyBjb2RlIHBhdGggZmluZHMgdGhhdCB0aGUgYXJjaGl2ZSAKKyAgICAgICAgICAgIHRoZXJlZm9yZSBpdCBtYWtlcyBzZW5zZSB0byB0cnkgdG8gb3BlbiBpdCBhZ2FpbiBub3cpLgorICAgICAgICAgICAgRm9yIG1vc3Qgb2YgdGhlIGl0ZXJhdGlvbnMsIHRoaXMgY29kZSBwYXRoIGZpbmRzIHRoYXQgdGhlIGFyY2hpdmUKICAgICAgICAgICAgIHN0aWxsIHdpbGwgbm90IG9wZW4gY29ycmVjdGx5IC0gYmVjYXVzZSB0aGUgc2xvdyBjb3B5IGlzIHN0aWxsCiAgICAgICAgICAgICBpbiBwcm9ncmVzcyAtIGFuZCBkb2VzIG5vdCBmdXJ0aGVyIHdvcmsgd2l0aCB0aGUgZmlsZSBpbiB0aGUKICAgICAgICAgICAgIGN1cnJlbnQgaXRlcmF0aW9uIGJ1dCBsZWF2ZXMgdGhlIGZpbGUgaW4gdGhlIG1hcCBvZiBmaWxlcyB0byBiZQotICAgICAgICAgICAgbW9uaXRvcmVkLiAgCi0gICAgICAgICAgICAKKyAgICAgICAgICAgIG1vbml0b3JlZC4KKwogICAgICAgICAgICAgQXQgbGFzdCwgd2hlbiB0aGUgY29weSBjb21wbGV0ZXMsIGFuIGl0ZXJhdGlvbiBkaXNjb3ZlcnMgdGhhdAogICAgICAgICAgICAgdGhlIGZpbGUgc2l6ZSBoYXMgYmVlbiBzdGFibGUgc2luY2UgdGhlIGxhc3QgdGltZSB0aHJvdWdoIGFuZAogICAgICAgICAgICAgdGhlIGF0dGVtcHQgdG8gb3BlbiB0aGUgZmlsZSBhcyBhbiBhcmNoaXZlIHN1Y2NlZWRzLiAgVGhlIGZpbGUKICAgICAgICAgICAgIGlzIHRoZW4gYXV0b2RlcGxveWVkIG5vcm1hbGx5LgogICAgICAgICAtLT4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9InNsb3djb3B5LmRlbGF5IiB2YWx1ZT0iNDAwMCIvPgotICAgICAgICAKKwogICAgICAgICA8cHJvcGVydHkgbmFtZT0icmVzdWx0LnByb3BlcnR5LmZpbGUiIHZhbHVlPSIke2J1aWxkfS9yZXN1bHQucHJvcGVydGllcyIvPgotICAgICAgICAKKwogICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkfSIgLz4KICAgICA8L3RhcmdldD4KLQkKKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9InByZXBhcmUiPgotICAgICAgICAKKwogICAgICAgICA8ZWNobz5Vc2luZyBwcmV2aW91c2x5LWJ1aWx0ICR7aW5wdXRBcmNoaXZlfTwvZWNobz4KICAgICAgICAgPCEtLQogICAgICAgICAgICAgU29tZSBlYXJsaWVyIHRlc3RzIHNob3VsZCBoYXZlIHJ1biBhbHJlYWR5LCBzbyB0aGUgYXBwIHdlIHVzZSBmb3IgYXV0b2RlcGxveSB0ZXN0aW5nCkBAIC04OSw5ICs4OSw5IEBACiAgICAgICAgIC0tPgogCiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIiBkZXBlbmRzPSJidWlsZCI+Ci0gICAgICAgIAorCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVjbGFyZS10ZXN0Ij4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJkZXNjcmlwdGlvbiIgdmFsdWU9ImF1dG9kZXBsb3kvc2xvdyBUZXN0IGF1dG9kZXBsb3kgd2l0aCBzbG93bHktY29waWVkIGZpbGUiLz4KICAgICAgICAgPC9hbnRjYWxsPgpAQCAtMTAxLDExICsxMDEsMTEgQEAKICAgICAgICAgICAgIHJlY29yZCB0aGUgcmVzdWx0cyBvZiB0aGUgYXV0b2RlcGxveSBkaXJlY3RvcnkgbW9uaXRvcmluZyBKYXZhIGNsYXNzLgogICAgICAgICAtLT4KICAgICAgICAgPGRlbGV0ZSBmaWxlPSIke3Jlc3VsdC5wcm9wZXJ0eS5maWxlfSIgcXVpZXQ9InRydWUiLz4KLSAgICAgICAgCisKICAgICAgICAgPHRzdGFtcCBwcmVmaXg9InNsb3djb3B5Ij4KICAgICAgICAgICAgIDxmb3JtYXQgcHJvcGVydHk9Ik5PVyIgcGF0dGVybj0iJHtkYXRlRm9ybWF0fSIvPgogICAgICAgICA8L3RzdGFtcD4KLSAgICAgICAgCisKICAgICAgICAgPCEtLQogICAgICAgICAgICAgRG8gdGhlIGF1dG8tZGVwbG95bWVudCBidXQgdXNlIHRoZSBzcGVjaWFsIHRvb2wgdGhhdCBjb3BpZXMgc2xvd2x5LgogICAgICAgICAgLS0+CkBAIC0xMjYsMTEgKzEyNiwxMSBAQAogICAgICAgICAgICAgPGNsYXNzcGF0aCByZWZpZD0iYXV0b2RlcGxveS5jb21waWxlLmNsYXNzcGF0aCIvPgogCiAgICAgICAgIDwvamF2YVdpdGhSZXN1bHQ+Ci0gICAgICAgIAorCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNlTW9uaXRvclRvV2FpdEZvckF1dG9kZXBsb3lDb21wbGV0aW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJsb2cuaWQiIHZhbHVlPSIyIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICAgICAgCisKICAgICAgICAgPCEtLQogICAgICAgICAgICAgTm93IHVuZGVwbG95IHRoZSBhcHAuCiAgICAgICAgIC0tPgpAQCAtMTU5LDcgKzE1OSw3IEBACiAgICAgICAgICAgICAgICAgPGVxdWFscyBhcmcxPSIke3Nsb3cuYXV0b2RlcGxveS51bmRlcGxveVJlc3VsdH0iIGFyZzI9IjAiLz4KICAgICAgICAgICAgIDwvYW5kPgogICAgICAgICA8L2NvbmRpdGlvbj4KLSAgICAgICAgCisKICAgICAgICAgPCEtLQogICAgICAgICAgICAgSWYgdGhlIHByb3BlcnR5ICJyZXN1bHQiIHdhcyBub3Qgc2V0IGJ5IHRoZSAiY29uZGl0aW9uIiB0YXNrIGp1c3QgYWJvdmUgdGhlbiBzb21ldGhpbmcKICAgICAgICAgICAgIHdlbnQgd3JvbmcgYW5kIHdlIHNldCByZXN1bHQgdG8gMSBub3cuCkBAIC0xNjksMTQgKzE2OSwxNCBAQAogICAgICAgICAgICAgICAgIDxpc3NldCBwcm9wZXJ0eT0icmVzdWx0Ii8+CiAgICAgICAgICAgICA8L25vdD4KICAgICAgICAgPC9jb25kaXRpb24+Ci0gICAgICAgIAorCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icHJvY2Vzc1Jlc3VsdCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0icmVzdWx0IiB2YWx1ZT0iJHtyZXN1bHR9Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ibG9nIiB2YWx1ZT0iJHtidWlsZH0vb3V0cHV0LmxvZyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0idXNlTW9uaXRvclRvV2FpdEZvckF1dG9kZXBsb3lDb21wbGV0aW9uIj4KICAgICAgICAgPGphdmFXaXRoUmVzdWx0CiAgICAgICAgICAgICAgICAgZm9yaz0idHJ1ZSIKQEAgLTE5NSwxNyArMTk1LDE3IEBACiAgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2RhdGVGb3JtYXR9Ii8+CiAgICAgICAgICAgICA8YXJnIHZhbHVlPSIke3Nsb3djb3B5Lk5PV30iLz4KICAgICAgICAgPC9qYXZhV2l0aFJlc3VsdD4KLSAgICAgICAgCisKICAgICAgICAgPCEtLQotICAgICAgICAgICAgVGhlIHJlc3VsdCBwcm9wZXJ0eSBuYW1lIHVzZWQgaW4gdGhlIG5leHQgdGFzayBpcyBhbiBhcmd1bWVudCB0byB0aGUgY2FsbGVkIHRhcmdldC4gIAorICAgICAgICAgICAgVGhlIHJlc3VsdCBwcm9wZXJ0eSBuYW1lIHVzZWQgaW4gdGhlIG5leHQgdGFzayBpcyBhbiBhcmd1bWVudCB0byB0aGUgY2FsbGVkIHRhcmdldC4KICAgICAgICAgICAgIE5vdGUgdGhhdCB0aGUgZWNobyBpcyBhIGxpdHRsZSBvZGRseSBmb3JtYXR0ZWQuICBUaGUgPC9lY2hvPiBpcyBvbiBhIGxpbmUgYnkgaXRzZWxmIGFuZCBsZWZ0LWp1c3RpZmllZCBzbwogICAgICAgICAgICAgdGhhdCB0aGUgb3V0cHV0IHRvIHRoZSBmaWxlIGJlaW5nIHdyaXR0ZW4gd2lsbCByZXNpZGUgb24gYSBsaW5lIGJ5IGl0c2VsZi4gIFRoZQogICAgICAgICAgICAgbGVmdC1qdXN0aWZpY2F0aW9uIGlzIG5vdCByZWFsbHkgbmVlZGVkIGJ1dCB0aGUgcHJvcGVydGllcyBmaWxlIGxvb2tzIGEgYml0IG5pY2VyCi0gICAgICAgICAgICBpZiB5b3Ugb3BlbiBpdCBpbiBhbiBlZGl0b3IuICBUaGlzIGlzIGJlY2F1c2UgdGhlIG5leHQgbGluZSBpbiB0aGUgcHJvcGVydGllcyBmaWxlIGJlaW5nIAorICAgICAgICAgICAgaWYgeW91IG9wZW4gaXQgaW4gYW4gZWRpdG9yLiAgVGhpcyBpcyBiZWNhdXNlIHRoZSBuZXh0IGxpbmUgaW4gdGhlIHByb3BlcnRpZXMgZmlsZSBiZWluZwogICAgICAgICAgICAgd3JpdHRlbiBpcyBpbmRlbnRlZCBhcyBmYXIgYXMgdGhlIDwvZWNobz4gaXMgaW5kZW50ZWQgaGVyZSBpbiB0aGUgYnVpbGQueG1sIGZpbGUuCiAgICAgICAgIC0tPgogICAgICAgICA8ZWNobyBmaWxlPSIke3Jlc3VsdC5wcm9wZXJ0eS5maWxlfSIgYXBwZW5kPSJ0cnVlIj4ke3Jlc3VsdFByb3BlcnR5TmFtZX09JHthdXRvZGVwbG95UmVzdWx0fQotPC9lY2hvPiAgICAgICAgICAKKzwvZWNobz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9hdXRvZGVwbG95L3V0aWwvQXV0b0RlcGxveU1vbml0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvYXV0b2RlcGxveS91dGlsL0F1dG9EZXBsb3lNb25pdG9yLmphdmEKaW5kZXggY2Y1MDFiMi4uNTMyMDM2NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9hdXRvZGVwbG95L3V0aWwvQXV0b0RlcGxveU1vbml0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2F1dG9kZXBsb3kvdXRpbC9BdXRvRGVwbG95TW9uaXRvci5qYXZhCkBAIC00NSwzMSArNDUsMzEgQEAKICAgKiBAYXV0aG9yICB0anF1aW5uCiAgICovCiBwdWJsaWMgY2xhc3MgQXV0b0RlcGxveU1vbml0b3IgewotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBERUJVRyA9IEJvb2xlYW4uZ2V0Qm9vbGVhbigibW9uaXRvci5kZWJ1ZyIpOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IElURVJBVElPTl9MSU1JVCA9IEludGVnZXIuZ2V0SW50ZWdlcigibW9uaXRvci5pdGVyYXRpb25MaW1pdCIsIDYwICogMiAvKiBkZWZhdWx0ID0gdHdvIG1pbnV0ZXMgKi8pLmludFZhbHVlKCk7Ci0gICAgCisKICAgICBwcml2YXRlIFN0cmluZyBhcmNoaXZlTmFtZSA9IG51bGw7Ci0gICAgCisKIC8vICAgIHByaXZhdGUgU3RyaW5nIGF1dG9kZXBsb3lEaXJTcGVjID0gbnVsbDsKLSAgICAKKwogICAgIHByaXZhdGUgRmlsZSBhdXRvZGVwbG95RGlyID0gbnVsbDsKIAogLy8gICAgcHJpdmF0ZSBTdHJpbmcgdGltZXN0YW1wRm9ybWF0ID0gbnVsbDsKLSAgICAKKwogLy8gICAgcHJpdmF0ZSBTdHJpbmcgdGltZXN0YW1wU3RyaW5nID0gbnVsbDsKLSAgICAKKwogICAgIHByaXZhdGUgbG9uZyB0aW1lc3RhbXA7Ci0gICAgCisKICAgICBwcml2YXRlIERhdGUgc3RhcnRUaW1lID0gbnVsbDsKLSAgICAKKwogICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBMSU5FX1NFUCA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKTsKLSAgICAKKwogICAgIC8qKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIEF1dG9EZXBsb3llciAqLwogICAgIHB1YmxpYyBBdXRvRGVwbG95TW9uaXRvcigpIHsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgICogQHBhcmFtIGFyZ3MgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKICAgICAgICovCkBAIC04Myw3ICs4Myw3IEBACiAgICAgICAgICAgICB1c2FnZSgpOwogICAgICAgICAgICAgU3lzdGVtLmV4aXQoMSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgYXJjaGl2ZU5hbWUgPSBhcmdzWzBdOwogICAgICAgICBTdHJpbmcgYXV0b2RlcGxveURpclNwZWMgPSBhcmdzWzFdOwogICAgICAgICBTdHJpbmcgdGltZXN0YW1wRm9ybWF0ID0gYXJnc1syXTsKQEAgLTk1LDIxICs5NSwyMSBAQAogICAgICAgICBkZWJ1ZygiQXV0b2RlcGxveSBkaXJlY3Rvcnk6ICIgKyBhdXRvZGVwbG95RGlyLmdldEFic29sdXRlUGF0aCgpKTsKIAogICAgICAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICAKKwogICAgICAgICAvKgogICAgICAgICAgKkNoZWNrIGF1dG8tZGVwbG95IGRpcmVjdG9yeS4KICAgICAgICAgICovCiAgICAgICAgIGlmICggISBhdXRvZGVwbG95RGlyLmV4aXN0cygpKSB7CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKExJTkVfU0VQKS5hcHBlbmQoIkF1dG9kZXBsb3kgZGlyZWN0b3J5ICIgKyBhdXRvZGVwbG95RGlyLmdldEFic29sdXRlUGF0aCgpICsgIiBkb2VzIG5vdCBleGlzdCBidXQgc2hvdWxkLiIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIC8qCiAgICAgICAgICAqQ2hlY2sgYXJjaGl2ZSBmaWxlIG5hbWUuCiAgICAgICAgICAqLwogICAgICAgICBpZiAoYXJjaGl2ZU5hbWUubGVuZ3RoKCkgPT0gMCkgewogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChMSU5FX1NFUCkuYXBwZW5kKCJBcmNoaXZlIGZpbGUgbmFtZSBtdXN0IG5vdCBiZSBlbXB0eSBidXQgaXMuIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgLyoKICAgICAgICAgICpDaGVjayB0aGUgdGltZXN0YW1wIGZvcm1hdCBhbmQgdmFsdWUuCiAgICAgICAgICAqLwpAQCAtMTIyLDEyICsxMjIsMTIgQEAKICAgICAgICAgfSBjYXRjaCAoUGFyc2VFeGNlcHRpb24gcGUpIHsKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoTElORV9TRVApLmFwcGVuZCgiQ291bGQgbm90IGludGVycHJldCB0aW1lc3RhbXAgIiArIHRpbWVzdGFtcFN0cmluZyArICIgdXNpbmcgZm9ybWF0ICIgKyB0aW1lc3RhbXBGb3JtYXQpLmFwcGVuZChMSU5FX1NFUCkuYXBwZW5kKCIgICAgIikuYXBwZW5kKHBlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGgoKSA+IDApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24ocmVzdWx0LnRvU3RyaW5nKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBpbnQgcnVuKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgLyoKICAgICAgICAgICpUaGUgY2FsbGluZyBzY3JpcHQgc2hvdWxkIHBhc3MgdGhlc2UgY29tbWFuZCBsaW5lIGFyZ3VtZW50czoKQEAgLTE0MSw5ICsxNDEsOSBAQAogCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBwcm9jZXNzQXJndW1lbnRzKGFyZ3MpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKlRoZSB0aW1lc3RhbXAgaGFuZGxpbmcgYWxsb3dzIHRoZSBsb2dpYyBiZWxvdyB0byBpZGVudGlmeSBhIG1hcmtlciBmaWxlICguLi5fZGVwbG95ZWQsIAorICAgICAgICAgICAgICpUaGUgdGltZXN0YW1wIGhhbmRsaW5nIGFsbG93cyB0aGUgbG9naWMgYmVsb3cgdG8gaWRlbnRpZnkgYSBtYXJrZXIgZmlsZSAoLi4uX2RlcGxveWVkLAogICAgICAgICAgICAgICouLi5fdW5kZXBsb3llZCwgLi4uX2RlcGxveUZhaWxlZCwgLi4uX3VuZGVwbG95RmFpbGVkKSB0aGF0IHdhcyBjcmVhdGVkIGFmdGVyIHRoZQogICAgICAgICAgICAgICphcmNoaXZlIHdhcyBkZXBvc2l0ZWQgaW50byAoZm9yIGF1dG9kZXBsb3kpIG9yIHJlbW92ZWQgZnJvbSAoZm9yIGF1dG91bmRlcGxveSkgdGhlCiAgICAgICAgICAgICAgKmF1dG9kZXBsb3kgZGlyZWN0b3J5LiAgV2UgbmVlZCB0byBkbyB0aGlzIHRvIG1ha2Ugc3VyZSB3ZSBkbyBub3QgYWNjaWRlbnRhbGx5IHRha2UKQEAgLTE1NSwxNiArMTU1LDE2IEBACiAgICAgICAgICAgICAgKkZvciBhdXRvLWRlcGxveSwgdGhlIGFyY2hpdmUgd2lsbCBoYXZlIGp1c3QgYmVlbiBjb3BpZWQgaW50byB0aGUgYXV0b2RlcGxveSBkaXJlY3RvcnkuCiAgICAgICAgICAgICAgKkZvciBhdXRvLXVuZGVwbG95LCB0aGUgYXJjaGl2ZSB3aWxsIGhhdmUganVzdCBiZWVuIGRlbGV0ZWQgZnJvbSB0aGVyZS4gIFRoZSBmaWxlIGZpbHRlcgogICAgICAgICAgICAgICpiZWxvdyB1c2VzIGJvdGggdGhlIGZpbGUgbmFtZSBhbmQgYWxzbyBhIHRpbWVzdGFtcCB0byBtYWtlIHN1cmUgaXQgYWNjZXB0cwotICAgICAgICAgICAgICptYXJrZXIgZmlsZXMgY3JlYXRlZCBhZnRlciB0aGUgYXJjaGl2ZSBpdHNlbGYuICAKKyAgICAgICAgICAgICAqbWFya2VyIGZpbGVzIGNyZWF0ZWQgYWZ0ZXIgdGhlIGFyY2hpdmUgaXRzZWxmLgogICAgICAgICAgICAgICoKICAgICAgICAgICAgICAqTm90ZSB0aGF0IHRoZSBmb2xsb3dpbmcgaXMgYm90aCBhIGRlY2xhcmF0aW9uIG9mIHRoZSBmaWx0ZXIgYW5kIGl0cyBpbml0aWFsaXphdGlvbiBieQogICAgICAgICAgICAgICppbnZva2luZyBpdHMgaW5pdCBtZXRob2QuCiAgICAgICAgICAgICAgKi8KIAotICAgICAgICAgICAgRmlsZUZpbHRlciBmaWx0ZXIgPSBuZXcgRmlsZUZpbHRlciAoKSB7IAorICAgICAgICAgICAgRmlsZUZpbHRlciBmaWx0ZXIgPSBuZXcgRmlsZUZpbHRlciAoKSB7CiAKICAgICAgICAgICAgICAgICBwcml2YXRlIGxvbmcgdGltZXN0YW1wOwotICAgICAgICAgICAgICAgIHByaXZhdGUgU3RyaW5nIGFyY2hpdmVOYW1lID0gbnVsbDsgCisgICAgICAgICAgICAgICAgcHJpdmF0ZSBTdHJpbmcgYXJjaGl2ZU5hbWUgPSBudWxsOwogCiAgICAgICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gYWNjZXB0KEZpbGUgY2FuZGlkYXRlRmlsZSkgewogICAgICAgICAgICAgICAgICAgICAvKgpAQCAtMTc2LDcgKzE3Niw3IEBACiAgICAgICAgICAgICAgICAgICAgIGxvbmcgY2FuZGlkYXRlVGltZXN0YW1wID0gY2FuZGlkYXRlRmlsZS5sYXN0TW9kaWZpZWQoKTsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGNhbmRpZGF0ZU5hbWVBbmRUeXBlID0gY2FuZGlkYXRlRmlsZVNwZWMuc3Vic3RyaW5nKGNhbmRpZGF0ZUZpbGVTcGVjLmxhc3RJbmRleE9mKEZpbGUuc2VwYXJhdG9yKSArIDEpOwogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgY2FuZGlkYXRlVHlwZSA9IGNhbmRpZGF0ZUZpbGVTcGVjLnN1YnN0cmluZyhjYW5kaWRhdGVGaWxlU3BlYy5sYXN0SW5kZXhPZignLicpICsgMSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gYW5zd2VyID0gKGNhbmRpZGF0ZVRpbWVzdGFtcCA+IHRoaXMudGltZXN0YW1wKQogICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGNhbmRpZGF0ZU5hbWVBbmRUeXBlLmVxdWFscyhhcmNoaXZlTmFtZSArIEF1dG9EZXBsb3lDb25zdGFudHMuREVQTE9ZRUQpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlTmFtZUFuZFR5cGUuZXF1YWxzKGFyY2hpdmVOYW1lICsgQXV0b0RlcGxveUNvbnN0YW50cy5VTkRFUExPWUVEKSB8fApAQCAtMTk2LDExICsxOTYsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0uaW5pdChhcmNoaXZlTmFtZSwgdGltZXN0YW1wKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBGaWxlIFtdIG1hdGNoZXMgPSBudWxsOwogCiAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICpCZWdpbiB3YWl0aW5nIGZvciBhIG5ldyBtYXJrZXIgZmlsZSB0byBhcHBlYXIgaW4gdGhlIGF1dG9kZXBsb3kgZGlyZWN0b3J5LiAgRG9uJ3Qgd2FpdCBsb25nZXIgdGhhbiAKKyAgICAgICAgICAgICAqQmVnaW4gd2FpdGluZyBmb3IgYSBuZXcgbWFya2VyIGZpbGUgdG8gYXBwZWFyIGluIHRoZSBhdXRvZGVwbG95IGRpcmVjdG9yeS4gIERvbid0IHdhaXQgbG9uZ2VyIHRoYW4KICAgICAgICAgICAgICAqdHdvIG1pbnV0ZXMgKGJ5IGRlZmF1bHQpIGluIGNhc2UgdGhlcmUgaXMgc29tZSBwcm9ibGVtLgogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBpbnQgaXRlcmF0aW9uQ291bnQgPSAwOwpAQCAtMjE0LDcgKzIxNCw3IEBACiAgICAgICAgICAgICAgICAgbWF0Y2hlcyA9IGF1dG9kZXBsb3lEaXIubGlzdEZpbGVzKGZpbHRlcik7CiAKICAgICAgICAgICAgIH0gd2hpbGUgKCAobWF0Y2hlcy5sZW5ndGggPT0gMCkgJiYgKGl0ZXJhdGlvbkNvdW50KysgPCBJVEVSQVRJT05fTElNSVQpKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqUmV0dXJuIDAgaWYgdGhlIG1hcmtlciBmaWxlIGZvdW5kIGVuZHMgd2l0aCBfZGVwbG95ZWQsIDEgaWYgdGhlIG1hcmtlciBlbmRzIHdpdGgKICAgICAgICAgICAgICAqX2RlcGxveUZhaWxlZCwgYW5kIC0xIG90aGVyd2lzZS4KQEAgLTI0Myw3ICsyNDMsNyBAQAogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHVzYWdlKCkgewogICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIlVzYWdlOiIpOwogICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIiAgICBhdXRvZGVwbG95LmxvYWRlci5jbGllbnQuQXV0b0RlcGxveU1vbml0b3IgPGFyY2hpdmUtbmFtZT4gPGF1dG9kZXBsb3ktZGlyZWN0b3J5PiA8U2ltcGxlRGF0ZUZvcm1hdC1wYXR0ZXJuLWZvci10aW1lc3RhbXA+IDx0aW1lc3RhbXAtdmFsdWU+Iik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2F1dG9kZXBsb3kvdXRpbC9TbG93Q29weS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9hdXRvZGVwbG95L3V0aWwvU2xvd0NvcHkuamF2YQppbmRleCA5MjRhYjMxLi45OWZlNTBlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2F1dG9kZXBsb3kvdXRpbC9TbG93Q29weS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvYXV0b2RlcGxveS91dGlsL1Nsb3dDb3B5LmphdmEKQEAgLTMyLDcgKzMyLDcgQEAKIAogLyoqCiAgKlByb3ZpZGVzIGEgd2F5IHRvIHRlc3QgYXV0b2RlcGxveWVyJ3MgYmVoYXZpb3Igd2hlbiBhbiBhdXRvZGVwbG95ZWQgZmlsZSBpcwotICpjb3BpZWQgaW50byB0aGUgYXV0b2RlcGxveSBkaXJlY3Rvcnkgc2xvd2x5LiAKKyAqY29waWVkIGludG8gdGhlIGF1dG9kZXBsb3kgZGlyZWN0b3J5IHNsb3dseS4KICAqCiAgKlVzYWdlOgogICoKQEAgLTQ5LDE3ICs0OSwxNyBAQAogICogQGF1dGhvciAgdGpxdWlubgogICovCiBwdWJsaWMgY2xhc3MgU2xvd0NvcHkgewotICAgIAorCiAgICAgLyoqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgU2xvd0NvcHkgKi8KICAgICBwdWJsaWMgU2xvd0NvcHkoKSB7CiAgICAgfQotICAKKwogICAgIC8qKiBkZWZhdWx0IGRlbGF5IGJldHdlZW4gc3VjY2Vzc2l2ZSB3cml0ZXMgb2YgZGF0YSB0byB0aGUgb3V0cHV0IGZpbGUgKi8KICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIERFRkFVTFRfREVMQVkgPSAyMDA7IC8vIG1pbGxpc2Vjb25kcwotICAgIAorCiAgICAgLyoqIHNpemUgb2YgcmVhZCBhbmQgd3JpdGUgYnVmZmVyICovCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEJVRkZFUl9TSVpFID0gMTAyNDsKLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIG5ldyBTbG93Q29weSgpLnJ1bihhcmdzKTsKQEAgLTY5LDIyICs2OSwyMiBAQAogICAgICAgICAgICAgU3lzdGVtLmV4aXQoMSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgcnVuKFN0cmluZyBbXSBhcmdzKSB0aHJvd3MgRmlsZU5vdEZvdW5kRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgSW50ZXJydXB0ZWRFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oQXJyYXlzLnRvU3RyaW5nKGFyZ3MpKTsKICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgMykgewogICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQ29tbWFuZCBsaW5lIGFyZ3MgbXVzdCBzcGVjaWZ5IHByb21wdC90aW1lZCwgdGhlIG9yaWdpbmFsIGZpbGUsIGFuZCB0aGUgdGFyZ2V0IGZpbGUiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAvKgotICAgICAgICAgKkdldCBkZWxheSBmcm9tIGRlZmF1bHQgYW5kIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGlmIHRoZSBkZWxheSBpcyAKKyAgICAgICAgICpHZXQgZGVsYXkgZnJvbSBkZWZhdWx0IGFuZCBvdmVycmlkZSB0aGUgZGVmYXVsdCBpZiB0aGUgZGVsYXkgaXMKICAgICAgICAgICpzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZS4KICAgICAgICAgICovCiAgICAgICAgIGxvbmcgZGVsYXkgPSBERUZBVUxUX0RFTEFZOwogICAgICAgICBpZiAoYXJncy5sZW5ndGggPiAzKSB7CiAgICAgICAgICAgICBkZWxheSA9IEludGVnZXIuZGVjb2RlKGFyZ3NbM10pOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIC8qCiAgICAgICAgICAqRm9yIGludGVyYWN0aXZlIHVzZSwgdGhlIHRvb2wgd291bGQgbGlrZSB0byBsZXQgdGhlIHVzZXIgcHJlc3MgYQogICAgICAgICAgKmtleSBlYWNoIHRpbWUgYSByZWFkL3dyaXRlIGlzIHRvIG9jY3VyLiAgVGhpcyBkb2Vzbid0IHlldCB3b3JrIGFuZApAQCAtOTMsNyArOTMsNyBAQAogICAgICAgICBib29sZWFuIHVzZVByb21wdERlbGF5ID0gYXJnc1swXS5lcXVhbHNJZ25vcmVDYXNlKCJwcm9tcHQiKTsKICAgICAgICAgRmlsZSBvbGRGID0gbmV3IEZpbGUoYXJnc1sxXSk7CiAgICAgICAgIEZpbGUgbmV3RiA9IG5ldyBGaWxlKGFyZ3NbMl0pOwotICAgICAgICAKKwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNsb3cgY29weSBzdGFydGluZ1xuIiArCiAgICAgICAgICAgICAgICAgIiAgbW9kZTogIiArIGFyZ3NbMF0gKyAiXG4iICsKICAgICAgICAgICAgICAgICAiICBpbnB1dCBmaWxlOiAiICsgb2xkRi5nZXRBYnNvbHV0ZVBhdGgoKSArICJcbiIgKwpAQCAtMTA2LDE1ICsxMDYsMTUgQEAKICAgICAgICAgRmlsZUlucHV0U3RyZWFtIGZpcyA9IG5ldyBGaWxlSW5wdXRTdHJlYW0ob2xkRik7CiAgICAgICAgIGJ5dGUgW10gZGF0YSA9IG5ldyBieXRlIFtCVUZGRVJfU0laRV07CiAgICAgICAgIGludCBieXRlc1JlYWQ7Ci0gICAgICAgIAorCiAgICAgICAgIFNjYW5uZXIgc2Nhbm5lciA9IG51bGw7CiAgICAgICAgIGJvb2xlYW4gY29udGludWVQcm9tcHRpbmcgPSB1c2VQcm9tcHREZWxheTsKICAgICAgICAgU3RyaW5nIGxpbmVTZXAgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIik7Ci0gICAgICAgIAorCiAgICAgICAgIGlmICh1c2VQcm9tcHREZWxheSkgewogICAgICAgICAgICAgc2Nhbm5lciA9IG5ldyBTY2FubmVyKFN5c3RlbS5pbik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaW50IHRvdGFsQnl0ZXNSZWFkID0gMDsKICAgICAgICAgLyoKICAgICAgICAgICpSZXBlYXQgdGhlIGN5Y2xlIG9mIHJlYWRpbmcgZnJvbSB0aGUgaW5wdXQgZmlsZSBhbmQgd3JpdGluZyB0byB0aGUKQEAgLTE0MCwxMyArMTQwLDEzIEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGaW5pc2hlZCBjb3B5aW5nICIgKyB0b3RhbEJ5dGVzUmVhZCArICIgYnl0ZXMgYXQgIiArIG5ldyBEYXRlKCkudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgaWYgKGZvcyAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgZm9zLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgZm9zID0gbnVsbDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChmaXMgIT0gbnVsbCkgeyAKKyAgICAgICAgICAgIGlmIChmaXMgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGZpcy5jbG9zZSgpOwogICAgICAgICAgICAgICAgIGZpcyA9IG51bGw7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2F1dG9kZXBsb3kvdXRpbC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2F1dG9kZXBsb3kvdXRpbC9idWlsZC54bWwKaW5kZXggNWY4NjA0MS4uNTMyMDBjMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9hdXRvZGVwbG95L3V0aWwvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvYXV0b2RlcGxveS91dGlsL2J1aWxkLnhtbApAQCAtMjMsMTcgKzIzLDE3IEBACiBdPgogCiA8cHJvamVjdCBuYW1lPSJhdXRvZGVwbG95LXV0aWwiIGRlZmF1bHQ9ImFsbCIgYmFzZWRpcj0iLiI+Ci0JJmNvbW1vbkJ1aWxkOworICAgICZjb21tb25CdWlsZDsKICAgICAgICAgJmF1dG9kZXBsb3lVdGlsOwogCiAgICAgPHRhcmdldCBuYW1lPSJwcmVwYXJlIiBkZXBlbmRzPSJpbml0Ij4KICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZH0iIC8+CiAgICAgPC90YXJnZXQ+Ci0JCisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgCisKICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0icHJlcGFyZSI+CiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iCiAgICAgICAgICAgICAgICBkZXN0ZGlyPSIke2J1aWxkfSIKQEAgLTQ2LDUgKzQ2LDUgQEAKICAgICA8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIiBkZXBlbmRzPSJidWlsZCI+CiAgICAgICAgIDxlY2hvPkF1dG9kZXBsb3kgdXRpbCBjb21tb24gdG9vbHMgYXJlIHJlYWR5PC9lY2hvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2F1dG9kZXBsb3kvdXRpbC91dGlsLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvYXV0b2RlcGxveS91dGlsL3V0aWwueG1sCmluZGV4IGY1YjM5ZjUuLmY1Mjg1MjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvYXV0b2RlcGxveS91dGlsL3V0aWwueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvYXV0b2RlcGxveS91dGlsL3V0aWwueG1sCkBAIC0yMCwyMyArMjAsMjMgQEAKICAgIFRoaXMgZmlsZSBzaG91bGQgYmUgaW5jbHVkZWQgYnkgYWxsIGF1dG9kZXBsb3ltZW50IGJ1aWxkLnhtbCBmaWxlcyBhbmQKICAgIGRlZmluZXMgcHJvcGVydGllcyBhbmQgdGFza3MgdXNlZCBieSBtdWx0aXBsZSBhdXRvLWRlcGxveSB0ZXN0cy4KIC0tPgotIAorCiAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGVGb3JtYXQiIHZhbHVlPSJ5eXl5LU1NLWRkLUhIOm1tOnNzIi8+CiAgICAgPHByb3BlcnR5IG5hbWU9ImF1dG9kZXBsb3kuZGlyIiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvYXV0b2RlcGxveSIvPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJhdXRvZGVwbG95LnV0aWwuYnVpbGQiIHZhbHVlPSIke3Rlc3RzUm9vdH0vYnVpbGQvYXV0b2RlcGxveS91dGlsIi8+Ci0gICAgCisKICAgICA8cGF0aCBpZD0iYXV0b2RlcGxveS5jb21waWxlLmNsYXNzcGF0aCI+CiAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtpbnN0fS9saWIvamF2YWVlLmphciIvPgogICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7amF2YS5ob21lfS9saWIvdG9vbHMuamFyIi8+CiAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuUzFBU19IT01FfS9tb2R1bGVzL2RlcGxveW1lbnQtYXV0b2RlcGxveS5qYXIiLz4KICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2F1dG9kZXBsb3kudXRpbC5idWlsZH0iLz4KLSAgICA8L3BhdGg+ICAgIAorICAgIDwvcGF0aD4KIAogICAgIDwhLS0KICAgICAgICAgVGhpcyB0YXJnZXQgcnVucyBhIEphdmEgY2xhc3MgdGhhdCB3YXRjaGVzIHRoZSBhcHAgc2VydmVyJ3MgYXV0b2RlcGxveSBkaXJlY3RvcnkgYW5kIGRldGVjdHMKICAgICAgICAgd2hlbiB0aGUgYXBwIHNlcnZlciBoYXMgZGVwbG95ZWQgb3IgdW5kZXBsb3llZCB0aGUgYXBwIChvciBoYXMgcmVwb3J0ZWQgYSBmYWlsdXJlIHRvIGRvIHNvKSBieSBvYnNlcnZpbmcKLSAgICAgICAgd2hlbiB0aGUgbWFya2VyIGZpbGVzIGFwcGVhciBpbiB0aGUgZGlyZWN0b3J5LiAgCi0gICAgICAgIAorICAgICAgICB3aGVuIHRoZSBtYXJrZXIgZmlsZXMgYXBwZWFyIGluIHRoZSBkaXJlY3RvcnkuCisKICAgICAgICAgVGhlIHRhcmdldCByZWNvcmRzIGl0cyByZXN1bHRzIGluIGEgdGVtcG9yYXJ5IHByb3BlcnRpZXMgZmlsZSBpbiB0aGUgJHtidWlsZH0gZGlyZWN0b3J5LgogICAgICAgICBUaGlzIHByb3ZpZGVzIGEgc2ltcGxlIHdheSAocmVsYXRpdmVseSBzaW1wbGUsIGF0IGxlYXN0KSB0byB1c2UgdGhlIHNhbWUgdGFyZ2V0IG1vcmUgdGhhbiBvbmNlCiAgICAgICAgIGFuZCBzdG9yZSBkaWZmZXJlbnQgcmVzdWx0IHZhbHVlcyBpbiBhIHdheSB0aGF0IGNhbiBiZSByZXRyaWV2ZWQgYW5kIHVzZWQgZnJvbSB0aGUgbWFpbgpAQCAtNjQsMzkgKzY0LDM5IEBACiAtLT4KICAgICAgICAgICAgIDxhcmcgbGluZT0iJHthcmcubGlzdH0iLz4KICAgICAgICAgPC9qYXZhV2l0aFJlc3VsdD4KLSAgICAgICAgCisKICAgICAgICAgPCEtLQotICAgICAgICAgICAgVGhlIHJlc3VsdCBwcm9wZXJ0eSBuYW1lIHVzZWQgaW4gdGhlIG5leHQgdGFzayBpcyBhbiBhcmd1bWVudCB0byB0aGUgY2FsbGVkIHRhcmdldC4gIAorICAgICAgICAgICAgVGhlIHJlc3VsdCBwcm9wZXJ0eSBuYW1lIHVzZWQgaW4gdGhlIG5leHQgdGFzayBpcyBhbiBhcmd1bWVudCB0byB0aGUgY2FsbGVkIHRhcmdldC4KICAgICAgICAgICAgIE5vdGUgdGhhdCB0aGUgZWNobyBpcyBhIGxpdHRsZSBvZGRseSBmb3JtYXR0ZWQuICBUaGUgPC9lY2hvPiBpcyBvbiBhIGxpbmUgYnkgaXRzZWxmIGFuZCBsZWZ0LWp1c3RpZmllZCBzbwogICAgICAgICAgICAgdGhhdCB0aGUgb3V0cHV0IHRvIHRoZSBmaWxlIGJlaW5nIHdyaXR0ZW4gd2lsbCByZXNpZGUgb24gYSBsaW5lIGJ5IGl0c2VsZi4gIFRoZQogICAgICAgICAgICAgbGVmdC1qdXN0aWZpY2F0aW9uIGlzIG5vdCByZWFsbHkgbmVlZGVkIGJ1dCB0aGUgcHJvcGVydGllcyBmaWxlIGxvb2tzIGEgYml0IG5pY2VyCi0gICAgICAgICAgICBpZiB5b3Ugb3BlbiBpdCBpbiBhbiBlZGl0b3IuICBUaGlzIGlzIGJlY2F1c2UgdGhlIG5leHQgbGluZSBpbiB0aGUgcHJvcGVydGllcyBmaWxlIGJlaW5nIAorICAgICAgICAgICAgaWYgeW91IG9wZW4gaXQgaW4gYW4gZWRpdG9yLiAgVGhpcyBpcyBiZWNhdXNlIHRoZSBuZXh0IGxpbmUgaW4gdGhlIHByb3BlcnRpZXMgZmlsZSBiZWluZwogICAgICAgICAgICAgd3JpdHRlbiBpcyBpbmRlbnRlZCBhcyBmYXIgYXMgdGhlIDwvZWNobz4gaXMgaW5kZW50ZWQgaGVyZSBpbiB0aGUgYnVpbGQueG1sIGZpbGUuCiAgICAgICAgIC0tPgogICAgICAgICA8ZWNobyBmaWxlPSIke3Jlc3VsdC5wcm9wZXJ0eS5maWxlfSIgYXBwZW5kPSJ0cnVlIj4ke3Jlc3VsdFByb3BlcnR5TmFtZX09JHthdXRvZGVwbG95UmVzdWx0fQogPC9lY2hvPgotICAgICAgICAKKwogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kuYXV0b2RlcGxveSI+Ci0gICAgCisKICAgICA8IS0tCi0gICAgICAgIFRvIG1vbml0b3IgYXV0by1kZXBsb3ltZW50IG9yIGF1dG8tdW5kZXBsb3ltZW50LCB3ZSBzdGFydCBieSBnZXR0aW5nIHRoZSBjdXJyZW50IHRpbWUuICAKLSAgICAgICAgVGhlbiB3ZSBjb3B5IHRoZSBhcmNoaXZlIGZpbGUgaW50byB0aGUgYXV0b2RlcGxveSBkaXJlY3RvcnkgKGZvciBhdXRvLWRlcGxveSkgb3IgZGVsZXRlIAorICAgICAgICBUbyBtb25pdG9yIGF1dG8tZGVwbG95bWVudCBvciBhdXRvLXVuZGVwbG95bWVudCwgd2Ugc3RhcnQgYnkgZ2V0dGluZyB0aGUgY3VycmVudCB0aW1lLgorICAgICAgICBUaGVuIHdlIGNvcHkgdGhlIGFyY2hpdmUgZmlsZSBpbnRvIHRoZSBhdXRvZGVwbG95IGRpcmVjdG9yeSAoZm9yIGF1dG8tZGVwbG95KSBvciBkZWxldGUKICAgICAgICAgaXQgKGZvciBhdXRvLXVuZGVwbG95KS4gIEFsbCBtYXJrZXIgZmlsZXMgY3JlYXRlZCBieSB0aGUgc2VydmVyIGR1cmluZyBhdXRvLWRlcGxveW1lbnQgb2YKICAgICAgICAgdGhlIG5ld2x5LWNvcGllZCBhcmNoaXZlIGZpbGUgd2lsbCBoYXZlIGxhdGVyIHRpbWVzdGFtcHMgdGhhbiB0aGUgdGltZXN0YW1wIGp1c3QgY3JlYXRlZC4KLSAgICAgICAgVGhlcmUgY291bGQgYmUgZWFybGllciBtYXJrZXIgZmlsZXMgZm9yIHRoZSBzYW1lIGFyY2hpdmUgaW4gdGhlIGRpcmVjdG9yeSBhbmQgdGhlIG1vbml0b3IgCisgICAgICAgIFRoZXJlIGNvdWxkIGJlIGVhcmxpZXIgbWFya2VyIGZpbGVzIGZvciB0aGUgc2FtZSBhcmNoaXZlIGluIHRoZSBkaXJlY3RvcnkgYW5kIHRoZSBtb25pdG9yCiAgICAgICAgIHdhbnRzIHRvIGlnbm9yZSB0aG9zZSwgd2hpY2ggaXMgd2h5IHdlIGdldCB0aGUgY3VycmVudCB0aW1lIGFuZCBwYXNzIGl0IHRvIHRoZSBtb25pdG9yLgotICAgICAgICAKKwogICAgICAgICBUaGUgbW9uaXRvciB3aWxsIGNoZWNrIGZvciBtYXJrZXIgZmlsZXMgZm9yIHRoZSBjb3BpZWQgYXJjaGl2ZSBmaWxlCi0gICAgICAgIGFuZCB3aG9zZSBsYXN0IG1vZGlmaWNhdGlvbiB0aW1lIGFyZSBhZnRlciB0aGUgY3VycmVudCB0aW1lc3RhbXAsIHJldHVybmluZyAwIGlmIHRoZSAKLSAgICAgICAgYXV0by1kZXBsb3llciBjcmVhdGVzIGEgX2RlcGxveWVkIG9yIF91bmRlcGxveWVkIGZpbGUsIDEgaWYgaXQgY3JlYXRlcyBhIF9kZXBsb3lfZmFpbGVkIAorICAgICAgICBhbmQgd2hvc2UgbGFzdCBtb2RpZmljYXRpb24gdGltZSBhcmUgYWZ0ZXIgdGhlIGN1cnJlbnQgdGltZXN0YW1wLCByZXR1cm5pbmcgMCBpZiB0aGUKKyAgICAgICAgYXV0by1kZXBsb3llciBjcmVhdGVzIGEgX2RlcGxveWVkIG9yIF91bmRlcGxveWVkIGZpbGUsIDEgaWYgaXQgY3JlYXRlcyBhIF9kZXBsb3lfZmFpbGVkCiAgICAgICAgIG9yIF91bmRlcGxveV9mYWlsZWQgZmlsZSwgYW5kIC0xIGlmIGl0IHJlY29nbml6ZWQgbm8gbWFya2VyIGZpbGUuCiAgICAgLS0+CiAgICAgICAgIDx0c3RhbXAgcHJlZml4PSJkZXBsb3kiPgogICAgICAgICAgICAgPGZvcm1hdCBwcm9wZXJ0eT0iTk9XIiBwYXR0ZXJuPSIke2RhdGVGb3JtYXR9Ii8+CiAgICAgICAgIDwvdHN0YW1wPgotICAgICAgICAKKwogICAgICAgICA8IS0tIFBhdXNlOyBzb21lIGZpbGUgc3lzdGVtcyByZWNvcmQgZmlsZSByZXYgZGF0ZS90aW1lIHRvIDItc2Vjb25kIHByZWNpc2lvbiAtLT4KICAgICAgICAgPHNsZWVwIHNlY29uZHM9IjIiLz4KIApAQCAtMTA0LDcgKzEwNCw3IEBACiAgICAgICAgICAgICBUcmlnZ2VyIHRoZSBhdXRvLWRlcGxveS4KICAgICAgICAgLS0+CiAgICAgICAgIDxjb3B5IGZpbGU9IiR7YXJjaGl2ZS5maWxlfSIgdG9kaXI9IiR7YXV0b2RlcGxveS5kaXJ9IiBvdmVyd3JpdGU9InRydWUiLz4KLSAgICAgICAgCisKICAgICAgICAgPGNvbmRpdGlvbiBwcm9wZXJ0eT0ibG9nLmlkIiB2YWx1ZT0iMSI+CiAgICAgICAgICAgICA8bm90PgogICAgICAgICAgICAgICAgIDxpc3NldCBwcm9wZXJ0eT0ibG9nLmlkIi8+CkBAIC0xMjAsMTEgKzEyMCwxMSBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImxvZy5pZCIgdmFsdWU9IiR7bG9nLmlkfSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveS5hdXRvdW5kZXBsb3kiPgotICAgIAorCiAgICAgICAgIDwhLS0KLSAgICAgICAgICAgIFRoaXMgdGFyZ2V0IHdvcmtzIHZlcnkgbXVjaCBsaWtlIHRoZSBkZXBsb3kuYXV0b2RlcGxveSB0YXJnZXQgZXhjZXB0IHRoYXQgaW5zdGVhZCBvZiAKKyAgICAgICAgICAgIFRoaXMgdGFyZ2V0IHdvcmtzIHZlcnkgbXVjaCBsaWtlIHRoZSBkZXBsb3kuYXV0b2RlcGxveSB0YXJnZXQgZXhjZXB0IHRoYXQgaW5zdGVhZCBvZgogICAgICAgICAgICAgY29weWluZyB0aGUgYXJjaGl2ZSBpbnRvIHRoZSBhdXRvZGVwbG95IGRpcmVjdG9yeSBpdCBkZWxldGVzIHRoZSBwcmV2aW91c2x5IGNvcGllZAogICAgICAgICAgICAgYXJjaGl2ZSBmcm9tIHRoYXQgZGlyZWN0b3J5LgogICAgICAgICAtLT4KQEAgLTE0MSw3ICsxNDEsNyBAQAogICAgICAgICA8ZGVsZXRlIHF1aWV0PSJ0cnVlIj4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHthdXRvZGVwbG95LmRpcn0iIGluY2x1ZGVzPSIke2FyY2hpdmUubmFtZX0iLz4KICAgICAgICAgPC9kZWxldGU+Ci0gICAgICAgIAorCiAgICAgICAgIDxjb25kaXRpb24gcHJvcGVydHk9ImxvZy5pZCIgdmFsdWU9IjIiPgogICAgICAgICAgICAgPG5vdD4KICAgICAgICAgICAgICAgICA8aXNzZXQgcHJvcGVydHk9ImxvZy5pZCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9hdXRvZGVwbG95L3dpdGhFSkIvQXV0b0RlcGxveU1vbml0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvYXV0b2RlcGxveS93aXRoRUpCL0F1dG9EZXBsb3lNb25pdG9yLmphdmEKaW5kZXggY2I1YzgyNy4uYzM4OGVkNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9hdXRvZGVwbG95L3dpdGhFSkIvQXV0b0RlcGxveU1vbml0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2F1dG9kZXBsb3kvd2l0aEVKQi9BdXRvRGVwbG95TW9uaXRvci5qYXZhCkBAIC00NSwzMSArNDUsMzEgQEAKICAgKiBAYXV0aG9yICB0anF1aW5uCiAgICovCiBwdWJsaWMgY2xhc3MgQXV0b0RlcGxveU1vbml0b3IgewotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBERUJVRyA9IEJvb2xlYW4uZ2V0Qm9vbGVhbigibW9uaXRvci5kZWJ1ZyIpOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IElURVJBVElPTl9MSU1JVCA9IEludGVnZXIuZ2V0SW50ZWdlcigibW9uaXRvci5pdGVyYXRpb25MaW1pdCIsIDYwICogMiAvKiBkZWZhdWx0ID0gdHdvIG1pbnV0ZXMgKi8pLmludFZhbHVlKCk7Ci0gICAgCisKICAgICBwcml2YXRlIFN0cmluZyBhcmNoaXZlTmFtZSA9IG51bGw7Ci0gICAgCisKIC8vICAgIHByaXZhdGUgU3RyaW5nIGF1dG9kZXBsb3lEaXJTcGVjID0gbnVsbDsKLSAgICAKKwogICAgIHByaXZhdGUgRmlsZSBhdXRvZGVwbG95RGlyID0gbnVsbDsKIAogLy8gICAgcHJpdmF0ZSBTdHJpbmcgdGltZXN0YW1wRm9ybWF0ID0gbnVsbDsKLSAgICAKKwogLy8gICAgcHJpdmF0ZSBTdHJpbmcgdGltZXN0YW1wU3RyaW5nID0gbnVsbDsKLSAgICAKKwogICAgIHByaXZhdGUgbG9uZyB0aW1lc3RhbXA7Ci0gICAgCisKICAgICBwcml2YXRlIERhdGUgc3RhcnRUaW1lID0gbnVsbDsKLSAgICAKKwogICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBMSU5FX1NFUCA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKTsKLSAgICAKKwogICAgIC8qKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIEF1dG9EZXBsb3llciAqLwogICAgIHB1YmxpYyBBdXRvRGVwbG95TW9uaXRvcigpIHsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgICogQHBhcmFtIGFyZ3MgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKICAgICAgICovCkBAIC04Myw3ICs4Myw3IEBACiAgICAgICAgICAgICB1c2FnZSgpOwogICAgICAgICAgICAgU3lzdGVtLmV4aXQoMSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgYXJjaGl2ZU5hbWUgPSBhcmdzWzBdOwogICAgICAgICBTdHJpbmcgYXV0b2RlcGxveURpclNwZWMgPSBhcmdzWzFdOwogICAgICAgICBTdHJpbmcgdGltZXN0YW1wRm9ybWF0ID0gYXJnc1syXTsKQEAgLTk1LDIxICs5NSwyMSBAQAogICAgICAgICBkZWJ1ZygiQXV0b2RlcGxveSBkaXJlY3Rvcnk6ICIgKyBhdXRvZGVwbG95RGlyLmdldEFic29sdXRlUGF0aCgpKTsKIAogICAgICAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICAKKwogICAgICAgICAvKgogICAgICAgICAgKkNoZWNrIGF1dG8tZGVwbG95IGRpcmVjdG9yeS4KICAgICAgICAgICovCiAgICAgICAgIGlmICggISBhdXRvZGVwbG95RGlyLmV4aXN0cygpKSB7CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKExJTkVfU0VQKS5hcHBlbmQoIkF1dG9kZXBsb3kgZGlyZWN0b3J5ICIgKyBhdXRvZGVwbG95RGlyLmdldEFic29sdXRlUGF0aCgpICsgIiBkb2VzIG5vdCBleGlzdCBidXQgc2hvdWxkLiIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIC8qCiAgICAgICAgICAqQ2hlY2sgYXJjaGl2ZSBmaWxlIG5hbWUuCiAgICAgICAgICAqLwogICAgICAgICBpZiAoYXJjaGl2ZU5hbWUubGVuZ3RoKCkgPT0gMCkgewogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChMSU5FX1NFUCkuYXBwZW5kKCJBcmNoaXZlIGZpbGUgbmFtZSBtdXN0IG5vdCBiZSBlbXB0eSBidXQgaXMuIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgLyoKICAgICAgICAgICpDaGVjayB0aGUgdGltZXN0YW1wIGZvcm1hdCBhbmQgdmFsdWUuCiAgICAgICAgICAqLwpAQCAtMTIyLDEyICsxMjIsMTIgQEAKICAgICAgICAgfSBjYXRjaCAoUGFyc2VFeGNlcHRpb24gcGUpIHsKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoTElORV9TRVApLmFwcGVuZCgiQ291bGQgbm90IGludGVycHJldCB0aW1lc3RhbXAgIiArIHRpbWVzdGFtcFN0cmluZyArICIgdXNpbmcgZm9ybWF0ICIgKyB0aW1lc3RhbXBGb3JtYXQpLmFwcGVuZChMSU5FX1NFUCkuYXBwZW5kKCIgICAgIikuYXBwZW5kKHBlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGgoKSA+IDApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24ocmVzdWx0LnRvU3RyaW5nKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBpbnQgcnVuKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgLyoKICAgICAgICAgICpUaGUgY2FsbGluZyBzY3JpcHQgc2hvdWxkIHBhc3MgdGhlc2UgY29tbWFuZCBsaW5lIGFyZ3VtZW50czoKQEAgLTE0MSw5ICsxNDEsOSBAQAogCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBwcm9jZXNzQXJndW1lbnRzKGFyZ3MpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKlRoZSB0aW1lc3RhbXAgaGFuZGxpbmcgYWxsb3dzIHRoZSBsb2dpYyBiZWxvdyB0byBpZGVudGlmeSBhIG1hcmtlciBmaWxlICguLi5fZGVwbG95ZWQsIAorICAgICAgICAgICAgICpUaGUgdGltZXN0YW1wIGhhbmRsaW5nIGFsbG93cyB0aGUgbG9naWMgYmVsb3cgdG8gaWRlbnRpZnkgYSBtYXJrZXIgZmlsZSAoLi4uX2RlcGxveWVkLAogICAgICAgICAgICAgICouLi5fdW5kZXBsb3llZCwgLi4uX2RlcGxveUZhaWxlZCwgLi4uX3VuZGVwbG95RmFpbGVkKSB0aGF0IHdhcyBjcmVhdGVkIGFmdGVyIHRoZQogICAgICAgICAgICAgICphcmNoaXZlIHdhcyBkZXBvc2l0ZWQgaW50byAoZm9yIGF1dG9kZXBsb3kpIG9yIHJlbW92ZWQgZnJvbSAoZm9yIGF1dG91bmRlcGxveSkgdGhlCiAgICAgICAgICAgICAgKmF1dG9kZXBsb3kgZGlyZWN0b3J5LiAgV2UgbmVlZCB0byBkbyB0aGlzIHRvIG1ha2Ugc3VyZSB3ZSBkbyBub3QgYWNjaWRlbnRhbGx5IHRha2UKQEAgLTE1NSwxNiArMTU1LDE2IEBACiAgICAgICAgICAgICAgKkZvciBhdXRvLWRlcGxveSwgdGhlIGFyY2hpdmUgd2lsbCBoYXZlIGp1c3QgYmVlbiBjb3BpZWQgaW50byB0aGUgYXV0b2RlcGxveSBkaXJlY3RvcnkuCiAgICAgICAgICAgICAgKkZvciBhdXRvLXVuZGVwbG95LCB0aGUgYXJjaGl2ZSB3aWxsIGhhdmUganVzdCBiZWVuIGRlbGV0ZWQgZnJvbSB0aGVyZS4gIFRoZSBmaWxlIGZpbHRlcgogICAgICAgICAgICAgICpiZWxvdyB1c2VzIGJvdGggdGhlIGZpbGUgbmFtZSBhbmQgYWxzbyBhIHRpbWVzdGFtcCB0byBtYWtlIHN1cmUgaXQgYWNjZXB0cwotICAgICAgICAgICAgICptYXJrZXIgZmlsZXMgY3JlYXRlZCBhZnRlciB0aGUgYXJjaGl2ZSBpdHNlbGYuICAKKyAgICAgICAgICAgICAqbWFya2VyIGZpbGVzIGNyZWF0ZWQgYWZ0ZXIgdGhlIGFyY2hpdmUgaXRzZWxmLgogICAgICAgICAgICAgICoKICAgICAgICAgICAgICAqTm90ZSB0aGF0IHRoZSBmb2xsb3dpbmcgaXMgYm90aCBhIGRlY2xhcmF0aW9uIG9mIHRoZSBmaWx0ZXIgYW5kIGl0cyBpbml0aWFsaXphdGlvbiBieQogICAgICAgICAgICAgICppbnZva2luZyBpdHMgaW5pdCBtZXRob2QuCiAgICAgICAgICAgICAgKi8KIAotICAgICAgICAgICAgRmlsZUZpbHRlciBmaWx0ZXIgPSBuZXcgRmlsZUZpbHRlciAoKSB7IAorICAgICAgICAgICAgRmlsZUZpbHRlciBmaWx0ZXIgPSBuZXcgRmlsZUZpbHRlciAoKSB7CiAKICAgICAgICAgICAgICAgICBwcml2YXRlIGxvbmcgdGltZXN0YW1wOwotICAgICAgICAgICAgICAgIHByaXZhdGUgU3RyaW5nIGFyY2hpdmVOYW1lID0gbnVsbDsgCisgICAgICAgICAgICAgICAgcHJpdmF0ZSBTdHJpbmcgYXJjaGl2ZU5hbWUgPSBudWxsOwogCiAgICAgICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gYWNjZXB0KEZpbGUgY2FuZGlkYXRlRmlsZSkgewogICAgICAgICAgICAgICAgICAgICAvKgpAQCAtMTc2LDcgKzE3Niw3IEBACiAgICAgICAgICAgICAgICAgICAgIGxvbmcgY2FuZGlkYXRlVGltZXN0YW1wID0gY2FuZGlkYXRlRmlsZS5sYXN0TW9kaWZpZWQoKTsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGNhbmRpZGF0ZU5hbWVBbmRUeXBlID0gY2FuZGlkYXRlRmlsZVNwZWMuc3Vic3RyaW5nKGNhbmRpZGF0ZUZpbGVTcGVjLmxhc3RJbmRleE9mKEZpbGUuc2VwYXJhdG9yKSArIDEpOwogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgY2FuZGlkYXRlVHlwZSA9IGNhbmRpZGF0ZUZpbGVTcGVjLnN1YnN0cmluZyhjYW5kaWRhdGVGaWxlU3BlYy5sYXN0SW5kZXhPZignLicpICsgMSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gYW5zd2VyID0gKGNhbmRpZGF0ZVRpbWVzdGFtcCA+IHRoaXMudGltZXN0YW1wKQogICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGNhbmRpZGF0ZU5hbWVBbmRUeXBlLmVxdWFscyhhcmNoaXZlTmFtZSArIEF1dG9EZXBsb3lDb25zdGFudHMuREVQTE9ZRUQpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlTmFtZUFuZFR5cGUuZXF1YWxzKGFyY2hpdmVOYW1lICsgQXV0b0RlcGxveUNvbnN0YW50cy5VTkRFUExPWUVEKSB8fApAQCAtMTk2LDExICsxOTYsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0uaW5pdChhcmNoaXZlTmFtZSwgdGltZXN0YW1wKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBGaWxlIFtdIG1hdGNoZXMgPSBudWxsOwogCiAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICpCZWdpbiB3YWl0aW5nIGZvciBhIG5ldyBtYXJrZXIgZmlsZSB0byBhcHBlYXIgaW4gdGhlIGF1dG9kZXBsb3kgZGlyZWN0b3J5LiAgRG9uJ3Qgd2FpdCBsb25nZXIgdGhhbiAKKyAgICAgICAgICAgICAqQmVnaW4gd2FpdGluZyBmb3IgYSBuZXcgbWFya2VyIGZpbGUgdG8gYXBwZWFyIGluIHRoZSBhdXRvZGVwbG95IGRpcmVjdG9yeS4gIERvbid0IHdhaXQgbG9uZ2VyIHRoYW4KICAgICAgICAgICAgICAqdHdvIG1pbnV0ZXMgKGJ5IGRlZmF1bHQpIGluIGNhc2UgdGhlcmUgaXMgc29tZSBwcm9ibGVtLgogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBpbnQgaXRlcmF0aW9uQ291bnQgPSAwOwpAQCAtMjE0LDcgKzIxNCw3IEBACiAgICAgICAgICAgICAgICAgbWF0Y2hlcyA9IGF1dG9kZXBsb3lEaXIubGlzdEZpbGVzKGZpbHRlcik7CiAKICAgICAgICAgICAgIH0gd2hpbGUgKCAobWF0Y2hlcy5sZW5ndGggPT0gMCkgJiYgKGl0ZXJhdGlvbkNvdW50IDwgSVRFUkFUSU9OX0xJTUlUKSk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKlJldHVybiAwIGlmIHRoZSBtYXJrZXIgZmlsZSBmb3VuZCBlbmRzIHdpdGggX2RlcGxveWVkLCAxIGlmIHRoZSBtYXJrZXIgZW5kcyB3aXRoCiAgICAgICAgICAgICAgKl9kZXBsb3lGYWlsZWQsIGFuZCAtMSBvdGhlcndpc2UuCkBAIC0yNDMsNyArMjQzLDcgQEAKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCB1c2FnZSgpIHsKICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJVc2FnZToiKTsKICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCIgICAgYXV0b2RlcGxveS5sb2FkZXIuY2xpZW50LkF1dG9EZXBsb3lNb25pdG9yIDxhcmNoaXZlLW5hbWU+IDxhdXRvZGVwbG95LWRpcmVjdG9yeT4gPFNpbXBsZURhdGVGb3JtYXQtcGF0dGVybi1mb3ItdGltZXN0YW1wPiA8dGltZXN0YW1wLXZhbHVlPiIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9hdXRvZGVwbG95L3dpdGhFSkIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9hdXRvZGVwbG95L3dpdGhFSkIvYnVpbGQueG1sCmluZGV4IGM1ZTBlODQuLmY5MWM5NGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvYXV0b2RlcGxveS93aXRoRUpCL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2F1dG9kZXBsb3kvd2l0aEVKQi9idWlsZC54bWwKQEAgLTIyLDM2ICsyMiwzNiBAQAogXT4KIAogPCEtLQotICAgIE5vdGUgdGhhdCB0aGlzIGN1cnJlbnRseSBhc3N1bWVzIHRoYXQgdGhlIGVhci9lYXJ3aXRoZWpiIGFuZCBlamIvc3RhdGVsZXNzaGVsbG8gcHJvamVjdHMgaGF2ZSBydW4gdG8gYnVpbGQgCisgICAgTm90ZSB0aGF0IHRoaXMgY3VycmVudGx5IGFzc3VtZXMgdGhhdCB0aGUgZWFyL2VhcndpdGhlamIgYW5kIGVqYi9zdGF0ZWxlc3NoZWxsbyBwcm9qZWN0cyBoYXZlIHJ1biB0byBidWlsZAogICAgIHRoZSBlYXIgdXNlZCBmb3IgdGhpcyB0ZXN0LgogCiAgICAgQWxzbyBub3RlIHRoYXQgdGhpcyB0ZXN0IGV4cGVjdHMgdGhlICdncmVwJyBjb21tYW5kIHRvIGJlIHByZXNlbnQgaW4gdGhlIG9wZXJhdGluZyBlbnZpcm9ubWVudC4KLSAgICBUaGlzIGlzIGZpbmUgb24gU29sYXJpcyBhbmQgTGludXggc3lzdGVtcywgYW5kIHNob3VsZCBiZSBmaW5lIG9uIFdpbmRvd3Mgc3lzdGVtcyBwcmVwYXJlZCAKLSAgICBhY2NvcmRpbmcgdG8gdGhlIHJlcXVpcmVtZW50cyBmb3IgYnVpbGRpbmcgdGhlIGFwcCBzZXJ2ZXIuICAKKyAgICBUaGlzIGlzIGZpbmUgb24gU29sYXJpcyBhbmQgTGludXggc3lzdGVtcywgYW5kIHNob3VsZCBiZSBmaW5lIG9uIFdpbmRvd3Mgc3lzdGVtcyBwcmVwYXJlZAorICAgIGFjY29yZGluZyB0byB0aGUgcmVxdWlyZW1lbnRzIGZvciBidWlsZGluZyB0aGUgYXBwIHNlcnZlci4KIC0tPgotIAorCiA8cHJvamVjdCBuYW1lPSJhdXRvZGVwbG95V2l0aEVKQiIgZGVmYXVsdD0iYWxsIiBiYXNlZGlyPSIuIj4KIAotIAkmY29tbW9uQnVpbGQ7CisgICAgICZjb21tb25CdWlsZDsKIAogICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0TmFtZSIgdmFsdWU9IndpdGhFSkIiLz4KICAgICA8cHJvcGVydHkgbmFtZT0iZGF0ZUZvcm1hdCIgdmFsdWU9Inl5eXktTU0tZGQtSEg6bW06c3MuU1NTIi8+CiAgICAgPHByb3BlcnR5IG5hbWU9ImFyY2hpdmVkaXIiIHZhbHVlPSIke2J1aWxkfS9hcmNoaXZlcyIvPgotICAgIAorCiAgICAgPCEtLQogICAgICAgICBUaGUgZm9sbG93aW5nIHByb3BlcnR5IGRlZmluZXMgdGhlIGV4Y2VwdGlvbiB0ZXh0IHRoYXQgYXBwZWFycyBpbiB0aGUgc2VydmVyLmxvZyBmaWxlIGlmCiAgICAgICAgIHRoZSBidWcgaXMgcHJlc2VudC4KICAgICAtLT4KICAgICA8cHJvcGVydHkgbmFtZT0iZXhjZXB0aW9uVGV4dCIgdmFsdWU9IkVKQkNsYXNzTG9hZGVyIGluc3RhbmNlIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBzaHV0ZG93biIvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJwcmVwYXJlIiBkZXBlbmRzPSJpbml0Ij4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImFyY2hpdmVOYW1lIiB2YWx1ZT0iZWFyd2l0aGVqYi5lYXIiLz4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImFsbC5lYXIiIHZhbHVlPSIke2FyY2hpdmVkaXJ9LyR7YXJjaGl2ZU5hbWV9Ii8+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzZXJ2ZXIubG9nLmZpbGUiIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9sb2dzL3NlcnZlci5sb2ciLz4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImF1dG9kZXBsb3kuZGlyIiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvYXV0b2RlcGxveSIvPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0icmVzdWx0LnByb3BlcnR5LmZpbGUiIHZhbHVlPSIke2J1aWxkfS9yZXN1bHQucHJvcGVydGllcyIvPgotICAgICAgICAKLSAgICAgICAgICAgIAorCisKICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZH0iIC8+CiAgICAgICAgIDxwYXRoIGlkPSJ0ZXN0LmNvbXBpbGUuY2xhc3NwYXRoIj4KICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtpbnN0fS9saWIvajJlZS5qYXIiLz4KQEAgLTYwLDE1ICs2MCwxNSBAQAogICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2J1aWxkfSIvPgogICAgICAgICA8L3BhdGg+CiAgICAgPC90YXJnZXQ+Ci0JCisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJwcmVwYXJlIj4KLSAgICAgICAgCisKICAgICAgICAgPGVjaG8+QnVpbGRpbmcgZWFyPC9lY2hvPgogICAgICAgICA8IS0tCiAgICAgICAgICAgICBUaGUgZWFybGllciB0ZXN0cyBzaG91bGQgaGF2ZSBydW4gYWxyZWFkeSwgc28gdGhlIGFwcCB3ZSB1c2UgZm9yIGF1dG9kZXBsb3kgdGVzdGluZwogICAgICAgICAgICAgc2hvdWxkIGFscmVhZHkgYmUgaW4gcGxhY2UuCiAgICAgICAgIC0tPgotICAgICAgICAKKwogPCEtLQogICAgICAgICA8YW50IGRpcj0iJHt0ZXN0c1Jvb3R9L2VqYi9zdGF0ZWxlc3NoZWxsbyIgdGFyZ2V0PSJhc3NlbWJsZSI+CiAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke3Rlc3RzUm9vdH0vYnVpbGQvZWpiL3N0YXRlbGVzc2hlbGxvIi8+CkBAIC03OCw3ICs3OCw3IEBACiAgICAgICAgIDwvYW50PgogLS0+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9InByZXBhcmUiPgogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIgogICAgICAgICAgICAgICAgZGVzdGRpcj0iJHtidWlsZH0iCkBAIC04NywxMiArODcsMTIgQEAKICAgICAgICAgICAgIDxjbGFzc3BhdGggcmVmaWQ9InRlc3QuY29tcGlsZS5jbGFzc3BhdGgiLz4KICAgICAgICAgPC9qYXZhYz4KICAgICA8L3RhcmdldD4KLQkKKwogICAgIDwhLS0KICAgICAgICAgVGhpcyB0YXJnZXQgcnVucyBhIEphdmEgY2xhc3MgdGhhdCB3YXRjaGVzIHRoZSBhcHAgc2VydmVyJ3MgYXV0b2RlcGxveSBkaXJlY3RvcnkgYW5kIGRldGVjdHMKICAgICAgICAgd2hlbiB0aGUgYXBwIHNlcnZlciBoYXMgZGVwbG95ZWQgb3IgdW5kZXBsb3llZCB0aGUgYXBwIChvciBoYXMgcmVwb3J0ZWQgYSBmYWlsdXJlIHRvIGRvIHNvKSBieSBvYnNlcnZpbmcKLSAgICAgICAgd2hlbiB0aGUgbWFya2VyIGZpbGVzIGFwcGVhciBpbiB0aGUgZGlyZWN0b3J5LiAgCi0gICAgICAgIAorICAgICAgICB3aGVuIHRoZSBtYXJrZXIgZmlsZXMgYXBwZWFyIGluIHRoZSBkaXJlY3RvcnkuCisKICAgICAgICAgVGhlIHRhcmdldCByZWNvcmRzIGl0cyByZXN1bHRzIGluIGEgdGVtcG9yYXJ5IHByb3BlcnRpZXMgZmlsZSBpbiB0aGUgJHtidWlsZH0gZGlyZWN0b3J5LgogICAgICAgICBUaGlzIHByb3ZpZGVzIGEgc2ltcGxlIHdheSAocmVsYXRpdmVseSBzaW1wbGUsIGF0IGxlYXN0KSB0byB1c2UgdGhlIHNhbWUgdGFyZ2V0IG1vcmUgdGhhbiBvbmNlCiAgICAgICAgIGFuZCBzdG9yZSBkaWZmZXJlbnQgcmVzdWx0IHZhbHVlcyBpbiBhIHdheSB0aGF0IGNhbiBiZSByZXRyaWV2ZWQgYW5kIHVzZWQgZnJvbSB0aGUgbWFpbgpAQCAtMTE3LDQ0ICsxMTcsNDQgQEAKICAgICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICAgICAgPGFyZyBsaW5lPSIke2FyZy5saXN0fSIvPgogICAgICAgICA8L2phdmFXaXRoUmVzdWx0PgotICAgICAgICAKKwogICAgICAgICA8IS0tCi0gICAgICAgICAgICBUaGUgcmVzdWx0IHByb3BlcnR5IG5hbWUgdXNlZCBpbiB0aGUgbmV4dCB0YXNrIGlzIGFuIGFyZ3VtZW50IHRvIHRoZSBjYWxsZWQgdGFyZ2V0LiAgCisgICAgICAgICAgICBUaGUgcmVzdWx0IHByb3BlcnR5IG5hbWUgdXNlZCBpbiB0aGUgbmV4dCB0YXNrIGlzIGFuIGFyZ3VtZW50IHRvIHRoZSBjYWxsZWQgdGFyZ2V0LgogICAgICAgICAgICAgTm90ZSB0aGF0IHRoZSBlY2hvIGlzIGEgbGl0dGxlIG9kZGx5IGZvcm1hdHRlZC4gIFRoZSA8L2VjaG8+IGlzIG9uIGEgbGluZSBieSBpdHNlbGYgYW5kIGxlZnQtanVzdGlmaWVkIHNvCiAgICAgICAgICAgICB0aGF0IHRoZSBvdXRwdXQgdG8gdGhlIGZpbGUgYmVpbmcgd3JpdHRlbiB3aWxsIHJlc2lkZSBvbiBhIGxpbmUgYnkgaXRzZWxmLiAgVGhlCiAgICAgICAgICAgICBsZWZ0LWp1c3RpZmljYXRpb24gaXMgbm90IHJlYWxseSBuZWVkZWQgYnV0IHRoZSBwcm9wZXJ0aWVzIGZpbGUgbG9va3MgYSBiaXQgbmljZXIKLSAgICAgICAgICAgIGlmIHlvdSBvcGVuIGl0IGluIGFuIGVkaXRvci4gIFRoaXMgaXMgYmVjYXVzZSB0aGUgbmV4dCBsaW5lIGluIHRoZSBwcm9wZXJ0aWVzIGZpbGUgYmVpbmcgCisgICAgICAgICAgICBpZiB5b3Ugb3BlbiBpdCBpbiBhbiBlZGl0b3IuICBUaGlzIGlzIGJlY2F1c2UgdGhlIG5leHQgbGluZSBpbiB0aGUgcHJvcGVydGllcyBmaWxlIGJlaW5nCiAgICAgICAgICAgICB3cml0dGVuIGlzIGluZGVudGVkIGFzIGZhciBhcyB0aGUgPC9lY2hvPiBpcyBpbmRlbnRlZCBoZXJlIGluIHRoZSBidWlsZC54bWwgZmlsZS4KICAgICAgICAgLS0+CiAgICAgICAgIDxlY2hvIGZpbGU9IiR7cmVzdWx0LnByb3BlcnR5LmZpbGV9IiBhcHBlbmQ9InRydWUiPiR7cmVzdWx0UHJvcGVydHlOYW1lfT0ke2F1dG9kZXBsb3lSZXN1bHR9CiA8L2VjaG8+Ci0gICAgICAgIAorCiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveS5hdXRvZGVwbG95Ij4KLSAgICAKKwogICAgIDwhLS0KLSAgICAgICAgVG8gbW9uaXRvciBhdXRvLWRlcGxveW1lbnQgb3IgYXV0by11bmRlcGxveW1lbnQsIHdlIHN0YXJ0IGJ5IGdldHRpbmcgdGhlIGN1cnJlbnQgdGltZS4gIAotICAgICAgICBUaGVuIHdlIGNvcHkgdGhlIGFyY2hpdmUgZmlsZSBpbnRvIHRoZSBhdXRvZGVwbG95IGRpcmVjdG9yeSAoZm9yIGF1dG8tZGVwbG95KSBvciBkZWxldGUgCisgICAgICAgIFRvIG1vbml0b3IgYXV0by1kZXBsb3ltZW50IG9yIGF1dG8tdW5kZXBsb3ltZW50LCB3ZSBzdGFydCBieSBnZXR0aW5nIHRoZSBjdXJyZW50IHRpbWUuCisgICAgICAgIFRoZW4gd2UgY29weSB0aGUgYXJjaGl2ZSBmaWxlIGludG8gdGhlIGF1dG9kZXBsb3kgZGlyZWN0b3J5IChmb3IgYXV0by1kZXBsb3kpIG9yIGRlbGV0ZQogICAgICAgICBpdCAoZm9yIGF1dG8tdW5kZXBsb3kpLiAgQWxsIG1hcmtlciBmaWxlcyBjcmVhdGVkIGJ5IHRoZSBzZXJ2ZXIgZHVyaW5nIGF1dG8tZGVwbG95bWVudCBvZgogICAgICAgICB0aGUgbmV3bHktY29waWVkIGFyY2hpdmUgZmlsZSB3aWxsIGhhdmUgbGF0ZXIgdGltZXN0YW1wcyB0aGFuIHRoZSB0aW1lc3RhbXAganVzdCBjcmVhdGVkLgotICAgICAgICBUaGVyZSBjb3VsZCBiZSBlYXJsaWVyIG1hcmtlciBmaWxlcyBmb3IgdGhlIHNhbWUgYXJjaGl2ZSBpbiB0aGUgZGlyZWN0b3J5IGFuZCB0aGUgbW9uaXRvciAKKyAgICAgICAgVGhlcmUgY291bGQgYmUgZWFybGllciBtYXJrZXIgZmlsZXMgZm9yIHRoZSBzYW1lIGFyY2hpdmUgaW4gdGhlIGRpcmVjdG9yeSBhbmQgdGhlIG1vbml0b3IKICAgICAgICAgd2FudHMgdG8gaWdub3JlIHRob3NlLCB3aGljaCBpcyB3aHkgd2UgZ2V0IHRoZSBjdXJyZW50IHRpbWUgYW5kIHBhc3MgaXQgdG8gdGhlIG1vbml0b3IuCi0gICAgICAgIAorCiAgICAgICAgIFRoZSBtb25pdG9yIHdpbGwgY2hlY2sgZm9yIG1hcmtlciBmaWxlcyBmb3IgdGhlIGNvcGllZCBhcmNoaXZlIGZpbGUKLSAgICAgICAgYW5kIHdob3NlIGxhc3QgbW9kaWZpY2F0aW9uIHRpbWUgYXJlIGFmdGVyIHRoZSBjdXJyZW50IHRpbWVzdGFtcCwgcmV0dXJuaW5nIDAgaWYgdGhlIAotICAgICAgICBhdXRvLWRlcGxveWVyIGNyZWF0ZXMgYSBfZGVwbG95ZWQgb3IgX3VuZGVwbG95ZWQgZmlsZSwgMSBpZiBpdCBjcmVhdGVzIGEgX2RlcGxveV9mYWlsZWQgCisgICAgICAgIGFuZCB3aG9zZSBsYXN0IG1vZGlmaWNhdGlvbiB0aW1lIGFyZSBhZnRlciB0aGUgY3VycmVudCB0aW1lc3RhbXAsIHJldHVybmluZyAwIGlmIHRoZQorICAgICAgICBhdXRvLWRlcGxveWVyIGNyZWF0ZXMgYSBfZGVwbG95ZWQgb3IgX3VuZGVwbG95ZWQgZmlsZSwgMSBpZiBpdCBjcmVhdGVzIGEgX2RlcGxveV9mYWlsZWQKICAgICAgICAgb3IgX3VuZGVwbG95X2ZhaWxlZCBmaWxlLCBhbmQgLTEgaWYgaXQgcmVjb2duaXplZCBubyBtYXJrZXIgZmlsZS4KICAgICAtLT4KICAgICAgICAgPHRzdGFtcCBwcmVmaXg9ImRlcGxveSI+CiAgICAgICAgICAgICA8Zm9ybWF0IHByb3BlcnR5PSJOT1ciIHBhdHRlcm49IiR7ZGF0ZUZvcm1hdH0iLz4KICAgICAgICAgPC90c3RhbXA+Ci0gICAgICAgIAorCiAgICAgICAgIDwhLS0KICAgICAgICAgICAgIFRyaWdnZXIgdGhlIGF1dG8tZGVwbG95LgogICAgICAgICAtLT4KICAgICAgICAgPGNvcHkgZmlsZT0iJHthcmNoaXZlLmZpbGV9IiB0b2Rpcj0iJHthdXRvZGVwbG95LmRpcn0iIG92ZXJ3cml0ZT0idHJ1ZSIvPgotICAgICAgICAKKwogICAgICAgICA8IS0tCiAgICAgICAgICAgICBVc2UgdGhlIG1vbml0b3IgdG8gZGV0ZWN0IHdoZW4gdGhlIGF1dG8tZGVwbG95IGhhcyBjb21wbGV0ZWQuCiAgICAgICAgIC0tPgpAQCAtMTY1LDI1ICsxNjUsMjUgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJsb2cuaWQiIHZhbHVlPSIxIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95LmF1dG91bmRlcGxveSI+Ci0gICAgCisKICAgICAgICAgPCEtLQotICAgICAgICAgICAgVGhpcyB0YXJnZXQgd29ya3MgdmVyeSBtdWNoIGxpa2UgdGhlIGRlcGxveS5hdXRvZGVwbG95IHRhcmdldCBleGNlcHQgdGhhdCBpbnN0ZWFkIG9mIAorICAgICAgICAgICAgVGhpcyB0YXJnZXQgd29ya3MgdmVyeSBtdWNoIGxpa2UgdGhlIGRlcGxveS5hdXRvZGVwbG95IHRhcmdldCBleGNlcHQgdGhhdCBpbnN0ZWFkIG9mCiAgICAgICAgICAgICBjb3B5aW5nIHRoZSBhcmNoaXZlIGludG8gdGhlIGF1dG9kZXBsb3kgZGlyZWN0b3J5IGl0IGRlbGV0ZXMgdGhlIHByZXZpb3VzbHkgY29waWVkCiAgICAgICAgICAgICBhcmNoaXZlIGZyb20gdGhhdCBkaXJlY3RvcnkuCiAgICAgICAgIC0tPgogICAgICAgICA8dHN0YW1wIHByZWZpeD0idW5kZXBsb3kiPgogICAgICAgICAgICAgPGZvcm1hdCBwcm9wZXJ0eT0iTk9XIiBwYXR0ZXJuPSIke2RhdGVGb3JtYXR9Ii8+CiAgICAgICAgIDwvdHN0YW1wPgotICAgICAgICAKKwogICAgICAgICA8IS0tCiAgICAgICAgICAgICBUcmlnZ2VyIGF1dG8tdW5kZXBsb3kgYnkgZGVsZXRpbmcgdGhlIGZpbGUuCiAgICAgICAgIC0tPgogICAgICAgICA8ZGVsZXRlIHF1aWV0PSJ0cnVlIj4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHthdXRvZGVwbG95LmRpcn0iIGluY2x1ZGVzPSIke2FyY2hpdmVOYW1lfSIvPgogICAgICAgICA8L2RlbGV0ZT4KLSAgICAgICAgCisKICAgICAgICAgPGVjaG8+V2FpdGluZyBmb3IgYXV0b3VuZGVwbG95bWVudCB0byBjb21wbGV0ZS4uLjwvZWNobz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5BdXRvRGVwbG95TW9uaXRvciI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiIHZhbHVlPSIke2FyY2hpdmVOYW1lfSAke2F1dG9kZXBsb3kuZGlyfSAke2RhdGVGb3JtYXR9ICR7dW5kZXBsb3kuTk9XfSIvPgpAQCAtMTk3LDE0ICsxOTcsMTQgQEAKICAgICAgICAgICAgIFNlZSBpZiB0aGUgZXhjZXB0aW9uIHRleHQgYXBwZWFycyBpbiB0aGUgc2VydmVyLmxvZyBmaWxlLiAgVGhpcyBzdGVwIGFzc3VtZXMgdGhlIG9wZXJhdGluZwogICAgICAgICAgICAgZW52aXJvbm1lbnQgc3VwcG9ydHMgdGhlIGdyZXAgY29tbWFuZC4gIFRoaXMgc2hvdWxkIGJlIGZpbmUgZm9yIFNvbGFyaXMgYW5kIExpbnV4IHN5c3RlbXMKICAgICAgICAgICAgIGFuZCBmb3IgV2luZG93cyBzeXN0ZW1zIHRoYXQgc3VwcG9ydCBidWlsZGluZyB0aGUgcHJvZHVjdC4KLSAgICAgICAgICAgIAotICAgICAgICAgICAgVGhlIG91dHB1dCBmcm9tIHRoZSBncmVwIGlzIHNhdmVkIGludG8gYSBwcm9wZXJ0eSAoZ3JlcE91dHB1dCksdGhlbiB0aGUgcHJvcGVydHkgaXMgd3JpdHRlbiAKKworICAgICAgICAgICAgVGhlIG91dHB1dCBmcm9tIHRoZSBncmVwIGlzIHNhdmVkIGludG8gYSBwcm9wZXJ0eSAoZ3JlcE91dHB1dCksdGhlbiB0aGUgcHJvcGVydHkgaXMgd3JpdHRlbgogICAgICAgICAgICAgaW50byBhIGZpbGUuICBUaGUgZmlsZSB0byBiZSB3cml0dGVuIChvdXRwdXQuZmlsZSkgaXMgYWxzbyBwcm92aWRlZCBhcyBhbiBhcmd1bWVudCBzbyB0aGlzCi0gICAgICAgICAgICB0YXJnZXQgY2FuIGJlIGNhbGxlZCBmcm9tIGRpZmZlcmVudCBwbGFjZXMgYW5kIHRoZSByZXN1bHRzIHN0b3JlZCBpbiBkaWZmZXJlbnQgZmlsZXMgZm9yIAorICAgICAgICAgICAgdGFyZ2V0IGNhbiBiZSBjYWxsZWQgZnJvbSBkaWZmZXJlbnQgcGxhY2VzIGFuZCB0aGUgcmVzdWx0cyBzdG9yZWQgaW4gZGlmZmVyZW50IGZpbGVzIGZvcgogICAgICAgICAgICAgbGF0ZXIgY29tcGFyaXNvbi4KICAgICAgICAgLS0+Ci0gICAgICAgIDxleGVjIAotICAgICAgICAgICAgZXhlY3V0YWJsZT0iZ3JlcCIgCisgICAgICAgIDxleGVjCisgICAgICAgICAgICBleGVjdXRhYmxlPSJncmVwIgogICAgICAgICAgICAgcmVzdWx0cHJvcGVydHk9ImdyZXBSZXN1bHQiCiAgICAgICAgICAgICBvdXRwdXRwcm9wZXJ0eT0iZ3JlcE91dHB1dCIKICAgICAgICAgICAgID4KQEAgLTIyMCwyNiArMjIwLDI2IEBACiAgICAgICAgIDxjb25kaXRpb24gcHJvcGVydHk9InN0YXR1c01lc3NhZ2UiIHZhbHVlPSJUaGUgcHJlY2VkaW5nIFJlc3VsdDogMSBtZXNzYWdlIGlzIGV4cGVjdGVkOyBpdCBtZWFucyBncmVwIGRpZCBub3QgZmluZCB0aGUgZXJyb3Igc3RyaW5nLiI+CiAgICAgICAgICAgICA8ZXF1YWxzIGFyZzE9IiR7Z3JlcFJlc3VsdH0iIGFyZzI9IjEiLz4KICAgICAgICAgPC9jb25kaXRpb24+Ci0gICAgICAgIAorCiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzdGF0dXNNZXNzYWdlIiB2YWx1ZT0iIi8+CiAgICAgICAgIDxlY2hvPiR7c3RhdHVzTWVzc2FnZX08L2VjaG8+Ci0gICAgICAgIAorCiAgICAgICAgIDxlY2hvIGZpbGU9IiR7b3V0cHV0LmZpbGV9Ij4ke2dyZXBPdXRwdXR9PC9lY2hvPgogICAgICAgICA8ZWNobyBmaWxlPSIke3Jlc3VsdC5wcm9wZXJ0eS5maWxlfSIgYXBwZW5kPSJ0cnVlIj4ke3Jlc3VsdFByb3BlcnR5TmFtZX09JHtncmVwUmVzdWx0fQogPC9lY2hvPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgCQkKKwogICAgIDx0YXJnZXQgbmFtZT0iY2hlY2tGb3JSZWdyZXNzaW9uIiBpZj0iZmlsZU1hdGNoRXJyb3IiPgogICAgICAgICA8ZWNobz4ke2ZpbGVNYXRjaEVycm9yfQogCiBUaGUgc3RyaW5nICIke2V4Y2VwdGlvblRleHR9IiB3YXMgZm91bmQsIGltcGx5aW5nIHRoYXQgdGhlIGJ1ZyBpcyBwcmVzZW50LgogPC9lY2hvPgotICAgIDwvdGFyZ2V0PgkKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0icHJpdmF0ZS1hbGwiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICAKKwogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkIi8+Ci0gICAgICAgIAorCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVjbGFyZS10ZXN0Ij4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJkZXNjcmlwdGlvbiIgdmFsdWU9ImF1dG9kZXBsb3kvbG9hZGVydGVzdCBUZXN0IGF1dG9kZXBsb3kgYW5kIGNvbnRleHQgY2xhc3MgbG9hZGVyIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KQEAgLTI0OSw3ICsyNDksNyBAQAogICAgICAgICAgICAgcmVjb3JkIHRoZSByZXN1bHRzIG9mIHRoZSBhdXRvZGVwbG95IGRpcmVjdG9yeSBtb25pdG9yaW5nIEphdmEgY2xhc3MuCiAgICAgICAgIC0tPgogICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7cmVzdWx0LnByb3BlcnR5LmZpbGV9IiBxdWlldD0idHJ1ZSIvPgotICAgICAgICAKKwogICAgICAgICA8IS0tCiAgICAgICAgICAgICBEbyB0aGUgYXV0by1kZXBsb3ltZW50LgogICAgICAgIC0tPgpAQCAtMjY0LDcgKzI2NCw3IEBACiAgICAgICAgICAgICBXZSBkbyB0aGlzIG5vdywgYmVmb3JlIHVuZGVwbG95aW5nLCBhbmQgY2FwdHVyZSB0aGUgb3V0cHV0IGluIGEgZmlsZS4gIFRoZW4gd2UnbGwKICAgICAgICAgICAgIGRvIHRoZSBzYW1lIHRoaW5nIGFmdGVyIHVuZGVwbG95aW5nLCBjYXB0dXJpbmcgdGhhdCBvdXRwdXQgdG8gcyBzZXBhcmF0ZSBmaWxlLiAgV2UKICAgICAgICAgICAgIGhvcGUgdGhlIHR3byBvdXRwdXQgZmlsZXMgd2lsbCBiZSB0aGUgc2FtZSwgbWVhbmluZyB0aGF0IG5vIG5ldyBleGNlcHRpb25zIHdlcmUKLSAgICAgICAgICAgIHRocm93biBhcyBhIHJlc3VsdCBvZiB0aGUgdW5kZXBsb3kuICBJZiB0aGUgYnVnIGhhcyByZXN1cmZhY2VkLCB0aGVuIHRoZSBzZWNvbmQgCisgICAgICAgICAgICB0aHJvd24gYXMgYSByZXN1bHQgb2YgdGhlIHVuZGVwbG95LiAgSWYgdGhlIGJ1ZyBoYXMgcmVzdXJmYWNlZCwgdGhlbiB0aGUgc2Vjb25kCiAgICAgICAgICAgICBvdXRwdXQgZmlsZSB3aWxsIGNvbnRhaW4gYW4gYWRkaXRpb25hbCBleGNlcHRpb24gYXMgY29tcGFyZWQgdG8gdGhlIGZpcnN0IG91dHB1dCBmaWxlLgogICAgICAgICAtLT4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzZWFyY2hGb3JFeGNlcHRpb24iPgpAQCAtMzAwLDcgKzMwMCw3IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0icmVzdWx0UHJvcGVydHlOYW1lIiB2YWx1ZT0ic2Vjb25kU2VhcmNoUmVzdWx0Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3V0cHV0LmZpbGUiIHZhbHVlPSIke2J1aWxkfS9hZnRlcjJuZGRlcGxveS5sb2ciLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgICAgICAKKwogICAgICAgICA8IS0tCiAgICAgICAgICAgICBBdXRvdW5kZXBsb3kgdGhlIGFwcCBvbmNlIG1vcmUganVzdCB0byBjbGVhbiB1cC4KICAgICAgICAgLS0+CkBAIC0zMjYsMTAgKzMyNiwxMCBAQAogICAgICAgICAgICAgICAgIDxmaWxlc21hdGNoIGZpbGUxPSIke2J1aWxkfS9iZWZvcmUybmRkZXBsb3kubG9nIiBmaWxlMj0iJHtidWlsZH0vYWZ0ZXIybmRkZXBsb3kubG9nIi8+CiAgICAgICAgICAgICA8L25vdD4KICAgICAgICAgPC9jb25kaXRpb24+Ci0gICAgICAgIAorCiAgICAgICAgIDwhLS0KICAgICAgICAgICAgIERlY2lkZSB3aGV0aGVyIHRoZSB0ZXN0IHdhcyBzdWNjZXNzZnVsIG9yIG5vdC4gIE1ha2Ugc3VyZSB0aGF0IHRoZSBkZXBsb3kgYW5kCi0gICAgICAgICAgICB1bmRlcGxveSByZXN1bHRzIGFyZSBnb29kIGFuZCB0aGF0IHRoZSBncmVwIGZvciB0aGUgZXJyb3Igc3RyaW5nIG9mIHRoZSBzZXJ2ZXIubG9nIAorICAgICAgICAgICAgdW5kZXBsb3kgcmVzdWx0cyBhcmUgZ29vZCBhbmQgdGhhdCB0aGUgZ3JlcCBmb3IgdGhlIGVycm9yIHN0cmluZyBvZiB0aGUgc2VydmVyLmxvZwogICAgICAgICAgICAgZmlsZSB3YXMgdGhlIHNhbWUgYmVmb3JlIGFuZCBhZnRlciB0aGUgc2Vjb25kIGF1dG9kZXBsb3ltZW50LiAgV2UgZG9uJ3QgcmVhbGx5IGNhcmUKICAgICAgICAgICAgIGlmIHRoZSBzZWNvbmQgdW5kZXBsb3kgd29ya2VkIG9yIG5vdCBzbyB3ZSBkb24ndCBjaGVjayBpdHMgcmVzdWx0IHByb3BlcnR5IGhlcmUuCiAgICAgICAgIC0tPgpAQCAtMzQzLDkgKzM0Myw5IEBACiAgICAgICAgICAgICAgICAgPC9ub3Q+CiAgICAgICAgICAgICA8L2FuZD4KICAgICAgICAgPC9jb25kaXRpb24+Ci0gICAgICAgIAorCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2hlY2tGb3JSZWdyZXNzaW9uIi8+Ci0gICAgICAgIAorCiAgICAgICAgIDwhLS0KICAgICAgICAgICAgIElmIHRoZSBwcm9wZXJ0eSAicmVzdWx0IiB3YXMgbm90IHNldCBieSB0aGUgImNvbmRpdGlvbiIgdGFzayBqdXN0IGFib3ZlIHRoZW4gc29tZXRoaW5nCiAgICAgICAgICAgICB3ZW50IHdyb25nIGFuZCB3ZSBzZXQgcmVzdWx0IHRvIDEgbm93LiAgTm9ybWFsbHkgY2hlY2tGb3JSZWdyZXNzaW9uIHdpbGwgc2V0IHRoZSB2YWx1ZSB0byAwIG9yIDEuCkBAIC0zNTUsMTIgKzM1NSwxMiBAQAogICAgICAgICAgICAgICAgIDxpc3NldCBwcm9wZXJ0eT0icmVzdWx0Ii8+CiAgICAgICAgICAgICA8L25vdD4KICAgICAgICAgPC9jb25kaXRpb24+Ci0gICAgICAgIAorCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icHJvY2Vzc1Jlc3VsdCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0icmVzdWx0IiB2YWx1ZT0iJHtyZXN1bHR9Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ibG9nIiB2YWx1ZT0iJHtidWlsZH0vb3V0cHV0LmxvZyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICA8L3RhcmdldD4KLSAgICAKKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9idWlsZC1uZy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2J1aWxkLW5nLnhtbAppbmRleCAxZTgyZjJmLi5iYzQyYmE1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2J1aWxkLW5nLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2J1aWxkLW5nLnhtbApAQCAtMjAsNTUgKzIwLDU1IEBACiA8IS0tCiAgICAgVGhpcyBhbnQgc2NyaXB0IHJ1bnMgVGVzdE5HIHRvIG1hbmFnZSB0ZXN0cyBpbiBhIEdsYXNzRmlzaCBkZXBsb3ltZW50IGRldnRlc3QKICAgICBkaXJlY3RvcnkuICBOb3RlIHRoYXQgdGhpcyBzY3JpcHQgZXhwZWN0czoKLSAKKwogICAgIC0gIEVudmlyb25tZW50IHZhcmlhYmxlczoKICAgICAgICAgQVBTX0hPTUUgc2hvdWxkIHBvaW50IHRvIHRoZSBHbGFzc0Zpc2ggYXBwc2Vydi10ZXN0cyBkaXJlY3RvcnkKICAgICAgICAgSkFWQV9IT01FIHNob3VsZCBwb2ludCB0byB0aGUgSkRLIHRvIGJlIHVzZWQgZm9yIHRlc3RpbmcKLSAgICAgICAgCi0gICAgLSBUaGUgVGVzdE5HIGphciBmaWxlIGJlIHBsYWNlZCBhdCAke0FQU19IT01FfS9saWIgd2l0aCB0aGUgbmFtZSB0ZXN0bmcuamFyLiAgCi0gICAgSW4gdGhlIG5lYXIgZnV0dXJlIHRoZSBUZXN0TkcgamFyIG1heSBiZWNvbWUgYXZhaWxhYmxlIGZyb20gdGhlIEdsYXNzRmlzaCAKKworICAgIC0gVGhlIFRlc3RORyBqYXIgZmlsZSBiZSBwbGFjZWQgYXQgJHtBUFNfSE9NRX0vbGliIHdpdGggdGhlIG5hbWUgdGVzdG5nLmphci4KKyAgICBJbiB0aGUgbmVhciBmdXR1cmUgdGhlIFRlc3RORyBqYXIgbWF5IGJlY29tZSBhdmFpbGFibGUgZnJvbSB0aGUgR2xhc3NGaXNoCiAgICAgc2l0ZS4gIFVudGlsIHRoZW4gdGVzdGVycyB3aG8gd2lzaCB0byB1c2UgaXQgc2hvdWxkIGRvd25sb2FkIGl0IHRoZW1zZWx2ZXMKLSAgICBmcm9tIGh0dHA6Ly93d3cudGVzdG5nLm9yZyBhbmQgY29weSB0aGUgamFyIGZpbGUgZnJvbSB0aGF0IGRvd25sb2FkIGFzIAorICAgIGZyb20gaHR0cDovL3d3dy50ZXN0bmcub3JnIGFuZCBjb3B5IHRoZSBqYXIgZmlsZSBmcm9tIHRoYXQgZG93bmxvYWQgYXMKICAgICB0ZXN0bmcuamFyIGludG8gJHtBUFNfSE9NRX0vbGliLgotICAgIAorCiAgICAgLSAgT25lIG9yIG1vcmUgSmF2YSBjbGFzc2VzIG9mIGFueSBuYW1lIGV4aXN0IGF0IHRoZSBsb3dlc3QtbGV2ZWwgdGVzdAotICAgIGRpcmVjdG9yeS4gIChGb3IgZXhhbXBsZSwgc3VjaCBhIGRpcmVjdG9yeSBpcyBlamIzMC9lYXIvc2Vzc2lvbi4pICBUaGVzZSAKKyAgICBkaXJlY3RvcnkuICAoRm9yIGV4YW1wbGUsIHN1Y2ggYSBkaXJlY3RvcnkgaXMgZWpiMzAvZWFyL3Nlc3Npb24uKSAgVGhlc2UKICAgICBjbGFzc2VzIGFyZSByZXF1aXJlZCB0byB1c2UgdGhlIFRlc3RORyBhbm5vdGF0aW9ucyB0byBpZGVudGlmeSBhbmQKICAgICBkZXNjcmliZSB0aGUgdGVzdCBtZXRob2RzIHRvIGJlIHJ1bi4gIFRoZXkgbXVzdCBhbHNvICh0ZW1wb3JhcmlseSBhdCBsZWFzdCkKICAgICByZXNpZGUgaW4gYSBwYWNrYWdlIHRoYXQgZW5kcyB3aXRoIC50ZXN0bmcgc28gdGhlIHRlc3RuZyB0YXNrIGJlbG93IGNhbgogICAgIGVmZmljaWVudGx5IHNlbGVjdCB3aGljaCAuY2xhc3MgZmlsZXMgdG8gY2hlY2sgZm9yIFRlc3RORyBhbm5vdGF0aW9ucy4KIAotICAgIFN1Y2ggY2xhc3NlcyBtYXkgZXh0ZW5kIERlcGxveW1lbnRUZXN0IChpbiB0aGUgR2xhc3NGaXNoIHJlcG9zaXRvcnkgYXQgCi0gICAgJHtBUFNfSE9NRX0vZGV2dGVzdHMvZGVwbG95bWVudC9EZXBsb3ltZW50VGVzdC5qYXZhKSBpZiB0aGV5IHdpc2ggYnV0IAorICAgIFN1Y2ggY2xhc3NlcyBtYXkgZXh0ZW5kIERlcGxveW1lbnRUZXN0IChpbiB0aGUgR2xhc3NGaXNoIHJlcG9zaXRvcnkgYXQKKyAgICAke0FQU19IT01FfS9kZXZ0ZXN0cy9kZXBsb3ltZW50L0RlcGxveW1lbnRUZXN0LmphdmEpIGlmIHRoZXkgd2lzaCBidXQKICAgICB0aGV5IGFyZSBub3QgcmVxdWlyZWQgdG8gZG8gc28uCi0gICAgCisKICAgICBUbyB1c2UgVGVzdE5HIHRvIHJ1biBzdWNoIHRlc3RzLCBjZCB0byB0aGUgbG93ZXItbGV2ZWwgdGVzdCBkaXJlY3RvcnkKLSAgICBvZiBpbnRlcmVzdCBhbmQgaW52b2tlIGFudCBzcGVjaWZ5aW5nIHRoaXMgZmlsZS4gIAotICAgIAotICAgIE5vdGUgdGhhdCB0aGlzIHNjcmlwdCBhbmQgdGhlIHRlc3QgY2xhc3NlcyBhcmUgZmFpcmx5IHNpbXBsZSBhbmQgd2lsbCAKLSAgICBsaWtlbHkgZXZvbHZlIGFuZCBpbXByb3ZlIG92ZXIgdGltZS4gIAotICAgICAgICAKKyAgICBvZiBpbnRlcmVzdCBhbmQgaW52b2tlIGFudCBzcGVjaWZ5aW5nIHRoaXMgZmlsZS4KKworICAgIE5vdGUgdGhhdCB0aGlzIHNjcmlwdCBhbmQgdGhlIHRlc3QgY2xhc3NlcyBhcmUgZmFpcmx5IHNpbXBsZSBhbmQgd2lsbAorICAgIGxpa2VseSBldm9sdmUgYW5kIGltcHJvdmUgb3ZlciB0aW1lLgorCiAtLT4KIAogPHByb2plY3QgZGVmYXVsdD0icnVuLXRlc3QiIGJhc2VkaXI9Ii4iPgogCiAgICAgPHByb3BlcnR5IGVudmlyb25tZW50PSJlbnZuZyIvPgotICAgIAotICAgIDwhLS0gCisKKyAgICA8IS0tCiAgICAgICAgIEN1cnJlbnRseSwgZGVwbG95bWVudCBkZXZ0ZXN0cyB1c2VyIHRoZWlyIG93biBidWlsZCBhcmVhLgogICAgIC0tPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJkZXBsLmRldnRlc3RzLmhvbWUiIHZhbHVlPSIke2Vudm5nLkFQU19IT01FfS9kZXZ0ZXN0cy9kZXBsb3ltZW50Ii8+CiAgICAgPHByb3BlcnR5IG5hbWU9ImRlcGwuYnVpbGQuZGlyIiB2YWx1ZT0iJHtkZXBsLmRldnRlc3RzLmhvbWV9L2J1aWxkIi8+Ci0gICAgCi0gIDwhLS0gCisKKyAgPCEtLQogICAgIENsYXNzcGF0aCBmb3IgdGhlIFRlc3RORyBqYXIgYW5kIHRoZSBidWlsZCBjbGFzcyBkaXJlY3RvcnkuICBUaGUgdGVzdCBmaWxlcwogICAgIHRoZW1zZWx2ZXMgd2lsbCBiZSBjb21waWxlZCBpbnRvIHRoZSBkZXBsb3ltZW50IGRldnRlc3QgYnVpbGQgZGlyZWN0b3J5LgotICAgIAorCiAgICAgQ3VycmVudGx5LCB0aGUgVGVzdE5HLWRyaXZlbiBkZXBsb3ltZW50IGRldnRlc3RzIHVzZSBjYWxsYWJsZSBhbnQsIHNvIHRoZQotICAgIHZhcmlvdXMgYW50IGphcnMgbmVlZCB0byBiZSBpbiB0aGUgY2xhc3MgcGF0aC4gIEFsc28sIHRoZSBkZXZ0ZXN0cyAKKyAgICB2YXJpb3VzIGFudCBqYXJzIG5lZWQgdG8gYmUgaW4gdGhlIGNsYXNzIHBhdGguICBBbHNvLCB0aGUgZGV2dGVzdHMKICAgICByZXF1aXJlIGNvbXBpbGF0aW9uIG9mIEphdmEgZmlsZXMsIHNvIHRvb2xzLmphciBtdXN0IGJlIGluIHRoZSBjbGFzc3BhdGgKICAgICBmb3IgdGhlIGNvbXBpbGVyIHRvIGJlIGZvdW5kIHdoZW4gYW50IGlzIGludm9rZWQgZnJvbSB0aGUgVGVzdE5HIHRlc3QuCi0gICAgCisKICAgLS0+CiAgIDxwYXRoIGlkPSJjcCI+CiAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Vudm5nLkFQU19IT01FfS9saWIvdGVzdG5nLmphciIvPgpAQCAtNzgsNyArNzgsNyBAQAogICAgIDwvZmlsZXNldD4KICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52bmcuSkFWQV9IT01FfS9saWIvdG9vbHMuamFyIi8+CiAgIDwvcGF0aD4KLSAKKwogICA8IS0tIERlZmluZSB0aGUgdGFzayBmb3IgcnVubmluZyB0ZXN0bmcgLS0+CiAgIDx0YXNrZGVmIG5hbWU9InRlc3RuZyIgY2xhc3NwYXRocmVmPSJjcCIKICAgICAgICAgICAgY2xhc3NuYW1lPSJvcmcudGVzdG5nLlRlc3ROR0FudFRhc2siIC8+CkBAIC05MCwxOSArOTAsMTkgQEAKICAgICBmaWxlLgogICAtLT4KICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUtdGVzdHMiPgotICAgICAgICA8amF2YWMgCi0gICAgICAgICAgICBzcmNkaXI9IiR7dXNlci5kaXJ9OiR7ZGVwbC5kZXZ0ZXN0cy5ob21lfSIgCisgICAgICAgIDxqYXZhYworICAgICAgICAgICAgc3JjZGlyPSIke3VzZXIuZGlyfToke2RlcGwuZGV2dGVzdHMuaG9tZX0iCiAgICAgICAgICAgICBpbmNsdWRlcz0iKi5qYXZhIgotICAgICAgICAgICAgZGVzdGRpcj0iJHtkZXBsLmJ1aWxkLmRpcn0iIAotICAgICAgICAgICAgZGVidWc9Im9uIiAKKyAgICAgICAgICAgIGRlc3RkaXI9IiR7ZGVwbC5idWlsZC5kaXJ9IgorICAgICAgICAgICAgZGVidWc9Im9uIgogICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiPgogICAgICAgICAgICAgPGNsYXNzcGF0aD4KICAgICAgICAgICAgICAgICA8cGF0aCByZWZpZD0iY3AiLz4KICAgICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmFjPgogICAgIDwvdGFyZ2V0PgotICAgIAotIDwhLS0gCisKKyA8IS0tCiAgICAgUnVuIHVzaW5nIGFsbCB0ZXN0cywgbG9va2luZyBpbiB0aG9zZSAuY2xhc3MgZmlsZXMgZm9yIHdoaWNoIHRoZSBwYWNrYWdlCiAgICAgZW5kcyB3aXRoIC50ZXN0bmcgKGZvciBlZmZpY2llbmN5IG9mIHNlYXJjaGluZyBvbmx5KS4KICAtLT4KQEAgLTExMSw1ICsxMTEsNSBAQAogICAgICAgPGNsYXNzZmlsZXNldCBkaXI9IiR7ZGVwbC5idWlsZC5kaXJ9IiBpbmNsdWRlcz0iKiovdGVzdG5nLyouY2xhc3MiLz4KICAgICA8L3Rlc3RuZz4KICAgPC90YXJnZXQ+Ci0gCisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9idWlsZC54bWwKaW5kZXggNzgyNjIwMC4uNzZkZGI1YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9idWlsZC54bWwKQEAgLTM1LDcgKzM1LDcgQEAKICAgICAgICAgPC9hbnQ+CiAgICAgICAgIDxhbnQgZGlyPSJlYXIiIHRhcmdldD0icHJpdmF0ZS1hbGwiPgogICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0vZWFyIi8+Ci0gICAgICAgIDwvYW50PiAgICAgICAgICAgICAgICAKKyAgICAgICAgPC9hbnQ+CiAgICAgICAgIDxhbnQgZGlyPSJqc3I4OCIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+CiAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9qc3I4OCIvPgogICAgICAgICA8L2FudD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvY29uZmlnL2NvbW1vbi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2NvbmZpZy9jb21tb24ueG1sCmluZGV4IDNjYmE0YzAuLjFhOTg3ZWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvY29uZmlnL2NvbW1vbi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9jb25maWcvY29tbW9uLnhtbApAQCAtMTcsNyArMTcsNyBAQAogLS0+CiAKIDwhLS0KLSAgICBUYXJnZXRzIHRvIGJlIHNoYXJlZCBieSBhbGwgdW5pdCB0ZXN0cyAKKyAgICBUYXJnZXRzIHRvIGJlIHNoYXJlZCBieSBhbGwgdW5pdCB0ZXN0cwogLS0+CiAKIDwhLS0gY29uZmlndXJhdGlvbiAtLT4KQEAgLTQwLDcgKzQwLDcgQEAKIDxwcm9wZXJ0eSBuYW1lPSJjdXN0b210YXNrcy5kZXN0IiB2YWx1ZT0iJHt0ZXN0c1Jvb3R9L3V0aWwvYnVpbGQvY3VzdG9tQW50VGFza3MiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjdXN0b210YXNrcy5qYXIiIHZhbHVlPSIke2N1c3RvbXRhc2tzLmRlc3R9L2N1c3RvbUFudFRhc2tzLmphciIvPgogPHByb3BlcnR5IG5hbWU9Imp1bml0LmphciIgdmFsdWU9IiR7ZW52LkFQU19IT01FfS9kZXZ0ZXN0cy9kZXBsb3ltZW50L2p1bml0LTQuMTIuamFyIiAvPgotPHByb3BlcnR5IG5hbWU9ImFubm90YXRpb24ucmVwb3J0LmRpciIgdmFsdWU9IiR7dGVzdHNSb290fS9hbm5vdGF0aW9uL3JlcG9ydCIvPiAKKzxwcm9wZXJ0eSBuYW1lPSJhbm5vdGF0aW9uLnJlcG9ydC5kaXIiIHZhbHVlPSIke3Rlc3RzUm9vdH0vYW5ub3RhdGlvbi9yZXBvcnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0RG9tYWluIiB2YWx1ZT0iZGVwbHRlc3QtZG9tYWluIi8+CiA8cHJvcGVydHkgbmFtZT0idGVzdFNlcnZlciIgdmFsdWU9ImRlcGx0ZXN0LXNlcnZlciIvPgogPHByb3BlcnR5IG5hbWU9InRlc3RDbHVzdGVyIiB2YWx1ZT0iZGVwbHRlc3QtY2x1c3RlciIvPgpAQCAtNzcsMTMgKzc3LDEzIEBACiAgICAgdXRpbCBkaXJlY3RvcnkgZm9yIGl0cyBvd24gYnVpbGQueG1sIGFuZCB0aGUgc291cmNlIGZpbGVzLgogLS0+CiAKLSAgICAgICAgCisKIDx0YXJnZXQgbmFtZT0iaW5pdCIgZGVwZW5kcz0iaW5pdC5vcyxpbml0LnRvb2xzLHNldEFzYWRtaW5BcmdzIj4KICAgICA8Z2V0IHNyYz0iaHR0cHM6Ly9yZXBvMS5tYXZlbi5vcmcvbWF2ZW4yL2p1bml0L2p1bml0LzQuMTIvanVuaXQtNC4xMi5qYXIiIGRlc3Q9IiR7ZW52LkFQU19IT01FfS9kZXZ0ZXN0cy9kZXBsb3ltZW50L2p1bml0LTQuMTIuamFyIiB1c2V0aW1lc3RhbXA9InRydWUiLz4KICAgICA8cHJvcGVydHkgbmFtZT0icm9vdCIgdmFsdWU9IiR7YmFzZWRpcn0iLz4KIAogICAgIDxhdmFpbGFibGUgcHJvcGVydHk9ImNsdXN0ZXIuZXhpc3RzIiBmaWxlPSIke3MxYXMuaG9tZX0vZG9tYWlucy8ke3Rlc3REb21haW59Ii8+Ci0gICAgCisKICAgICA8YXZhaWxhYmxlIHByb3BlcnR5PSJTZXR1cFN0YXJ0ZWQiIGZpbGU9IiR7YnVpbGR9L3NldHVwZG9uZSIvPgogCiAgICAgPGNvbmRpdGlvbiBwcm9wZXJ0eT0iRUUiIHZhbHVlPSJ0cnVlIj4KQEAgLTkyLDcgKzkyLDcgQEAKICAgICAgICAgICAgIDxlcXVhbHMgYXJnMT0iJHtlbnYuREVQTF9UQVJHRVR9IiBhcmcyPSJDTFVTVEVSIi8+CiAgICAgICAgIDwvb3I+CiAgICAgPC9jb25kaXRpb24+Ci0gICAgCisKICAgICA8Y29uZGl0aW9uIHByb3BlcnR5PSJkb0NsdXN0ZXIiPgogICAgICAgICA8ZXF1YWxzIGFyZzE9IiR7ZW52LkRFUExfVEFSR0VUfSIgYXJnMj0iQ0xVU1RFUiIvPgogICAgIDwvY29uZGl0aW9uPgpAQCAtMTAwLDcgKzEwMCw3IEBACiAgICAgPGNvbmRpdGlvbiBwcm9wZXJ0eT0iZG9JbnN0YW5jZSI+CiAgICAgICAgIDxlcXVhbHMgYXJnMT0iJHtlbnYuREVQTF9UQVJHRVR9IiBhcmcyPSJTRVJWRVIiLz4KICAgICA8L2NvbmRpdGlvbj4KLSAgICAKKwogICAgIDxjb25kaXRpb24gcHJvcGVydHk9IlBFIj4KICAgICAgICAgPGFuZD4KICAgICAgICAgICAgIDxub3Q+CkBAIC0xMjMsNyArMTIzLDcgQEAKICAgICA8cHJvcGVydHkgbmFtZT0iczFhcy5zZWN1cmUiIHZhbHVlPSJmYWxzZSIvPgogCiAgICAgPGNvbmRpdGlvbiBwcm9wZXJ0eT0icnVuLmpzcjg4IiB2YWx1ZT0iZmFsc2UiPgotICAgICAgICA8ZXF1YWxzIGFyZzE9IiR7cnVuLmpzcjg4fSIgYXJnMj0iZmFsc2UiIC8+IAorICAgICAgICA8ZXF1YWxzIGFyZzE9IiR7cnVuLmpzcjg4fSIgYXJnMj0iZmFsc2UiIC8+CiAgICAgPC9jb25kaXRpb24+CiAKICAgICA8Y29uZGl0aW9uIHByb3BlcnR5PSJqc3I4OC51cmkiIHZhbHVlPSJkZXBsb3llcjpTdW46QXBwU2VydmVyOjoke2FkbWluLmhvc3R9OiR7YWRtaW4ucG9ydH06aHR0cHMiPgpAQCAtMTQ0LDEzICsxNDQsMTMgQEAKIAogICAgIDwhLS0KICAgICAgICAgU2VlIGlmIHRoZSBjdXN0b20gYW50IHRhc2tzIGphciBmaWxlIGlzIHVwLXRvLWRhdGUgYXMgY29tcGFyZSB0byB0aGUgc291cmNlIGZpbGVzLiAgVGhlCi0gICAgICAgIHJlc3VsdGluZyBwcm9wZXJ0eSB3aWxsIGNvbnRyb2wgd2hldGhlciB0aGUgdGFza3MgYXJlIGNvbXBpbGVkIGFuZCB0aGUgamFyIGZpbGUgYnVpbHQgCisgICAgICAgIHJlc3VsdGluZyBwcm9wZXJ0eSB3aWxsIGNvbnRyb2wgd2hldGhlciB0aGUgdGFza3MgYXJlIGNvbXBpbGVkIGFuZCB0aGUgamFyIGZpbGUgYnVpbHQKICAgICAgICAgYmVjYXVzZSB0aGUgaW5pdC5jdXN0b210YXNrcyB0YXNrIHVzZXMgdW5sZXNzPSJjdXN0b210YXNrcy51cHRvZGF0ZS4iCiAgICAgLS0+CiAgICAgPHVwdG9kYXRlIHByb3BlcnR5PSJjdXN0b210YXNrcy51cHRvZGF0ZSIgdGFyZ2V0ZmlsZT0iJHtjdXN0b210YXNrcy5qYXJ9Ij4KICAgICAgICAgPHNyY2ZpbGVzIGRpcj0iJHtjdXN0b210YXNrcy5zcmN9IiBpbmNsdWRlcz0iKi5qYXZhIi8+CiAgICAgPC91cHRvZGF0ZT4KLSAgICAKKwogICAgIDxhbnRjYWxsIHRhcmdldD0iaW5pdC5jdXN0b210YXNrcyIvPgogICAgIDx0YXNrZGVmIG5hbWU9ImphdmFXaXRoUmVzdWx0IiBjbGFzc25hbWU9ImRldnRlc3RzLmRlcGxveW1lbnQudXRpbC5KYXZhV2l0aFJlc3VsdCIgY2xhc3NwYXRoPSIke2N1c3RvbXRhc2tzLmphcn0iLz4KIApAQCAtMzEyLDEyICszMTIsMTIgQEAKIDwvdGFyZ2V0PgogCiA8IS0tCi0gICAgVGhlIGZvbGxvd2luZyB0YXJnZXQgY29tcGlsZXMgYWxsIEphdmEgZmlsZXMgdGhhdCBhcmUgdXNlZCBpbiBjdXN0b20gQW50IHRhc2tzIGFuZCBwbGFjZXMgdGhlbSBpbnRvIGEgCisgICAgVGhlIGZvbGxvd2luZyB0YXJnZXQgY29tcGlsZXMgYWxsIEphdmEgZmlsZXMgdGhhdCBhcmUgdXNlZCBpbiBjdXN0b20gQW50IHRhc2tzIGFuZCBwbGFjZXMgdGhlbSBpbnRvIGEKICAgICBqYXIgZmlsZS4gIFN1YnNlcXVlbnQgdGFza2RlZnMgY2FuIHRoZW4gcmVmZXIgdG8gdGhlIGphciBmaWxlLgotICAgIAorCiAgICAgTm90ZSB0aGF0IHRoZSBjb21waWxhdGlvbiBhbmQgY29uc3RydWN0aW9uIG9mIHRoZSBqYXIgZmlsZSB3aWxsIG9jY3VyIG9ubHkgaWYgdGhlIGphciBmaWxlIGlzIG9ic29sZXRlCiAgICAgY29tcGFyZWQgdG8gdGhlIGphdmEgc291cmNlcywgdGhhbmtzIHRvIHRoZSB1cHRvZGF0ZSBzZXR0aW5nIG9mIGN1c3RvbXRhc2tzLnVwdG9kYXRlIGluIHRoZSBpbml0IHRhcmdldC4KLSAgICAKKwogICAgIE5vdGUgYWxzbyB0aGF0IHdlIHVzZSBhIHNlcGFyYXRlIGJ1aWxkIGRpcmVjdG9yeSBzbyB3ZSBjYW4gY2FwdHVyZSBvbmx5IHRoZSBjdXN0b20gdGFzayAuY2xhc3MgZmlsZXMgaW50bwogICAgIHRoZSBqYXIgYW5kIG5vdCBhbGwgLmNsYXNzIGZpbGVzIHVuZGVyIHRoZSB1dGlsIHRyZWUuCiAtLT4KQEAgLTMzNCw3ICszMzQsNyBAQAogICAgICAgICAgICAgPHBhdGggbG9jYXRpb249IiR7Y3VzdG9tdGFza3MuZGVzdH0iLz4gPCEtLSBmb3IgY3Jvc3MtZGVwZW5kZW5jaWVzLCBpZiBhbnksIGFtb25nIGN1c3RvbSB0YXNrIGNsYXNzZXMgYW5kL29yIGhlbHBlcnMgLS0+CiAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgIDwvamF2YWM+Ci0gICAgPGphciAKKyAgICA8amFyCiAgICAgICAgIGRlc3RmaWxlPSIke2N1c3RvbXRhc2tzLmphcn0iCiAgICAgICAgIGJhc2VkaXI9IiR7Y3VzdG9tdGFza3MuZGVzdH0iCiAgICAgICAgIGluY2x1ZGVzPSIqKi8qLmNsYXNzIgpAQCAtMzUzLDcgKzM1Myw3IEBACiBBU19BRE1JTl9NQVNURVJQQVNTV09SRD1jaGFuZ2VpdAogICA8L2VjaG8+CiAgIDxhbnRjYWxsIHRhcmdldD0iY29tbW9uLnJ1bi5hc2FkbWluIj4KLSAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiIAorICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIKICAgICAgICAgICAgdmFsdWU9ImNyZWF0ZS1maWxlLXVzZXIgJHtBU0FETUlOLUFSR1MtTk9QQVNTV0R9IC0tcGFzc3dvcmRmaWxlICR7dXNlci5wYXNzd29yZC5maWxlfSAtLWVjaG89dHJ1ZSAtLXRlcnNlPXRydWUgJHthcmcubGlzdH0iLz4KICAgICA8L2FudGNhbGw+CiAgIDxkZWxldGUgZmlsZT0iJHt1c2VyLnBhc3N3b3JkLmZpbGV9IiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KQEAgLTM2Myw3ICszNjMsNyBAQAogPCEtLSBzZXQgZG90dGVkIG5hbWUgZW5hYmxlIHVzaW5nIGFzYWRtaW4gLS0+CiA8dGFyZ2V0IG5hbWU9ImNvbW1vbi5kb3R0ZWQuZW5hYmxlLnJlZi5hc2FkbWluIiBkZXBlbmRzPSJzZXRJbnN0YW5jZU5hbWUiPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY29tbW9uLnJ1bi5hc2FkbWluIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IgogICAgICAgICAgICAgICAgdmFsdWU9InNldCBzZXJ2ZXJzLnNlcnZlci4ke2RlcGx0ZXN0Lmluc3RhbmNlLm5hbWV9LmFwcGxpY2F0aW9uLXJlZi4ke3Rlc3ROYW1lfS5lbmFibGVkPXRydWUiLz4KICAgICA8L2FudGNhbGw+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJkb3R0ZWQuZW5hYmxlQXBwT25JbnN0YW5jZSI+CkBAIC00MTIsNyArNDEyLDcgQEAKIDwhLS0gQHBhcmFtICR7YXJnLmxpc3R9IChyZXF1aXJlZCkgLS0+CiA8dGFyZ2V0IG5hbWU9ImNvbW1vbi5kaXNhYmxlLmFzYWRtaW4iIGRlcGVuZHM9InNldEFzYWRtaW5BcmdzIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbW1vbi5ydW4uYXNhZG1pbiI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIKICAgICAgICAgICAgICAgIHZhbHVlPSJkaXNhYmxlICR7QVNBRE1JTi1BUkdTfSAke2FyZy5saXN0fSIvPgogICAgIDwvYW50Y2FsbD4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRpc2FibGVBcHBPbkluc3RhbmNlIj4KQEAgLTQ5NCw3ICs0OTQsNyBAQAogPCEtLSBAcGFyYW0gJHthcmcubGlzdH0gKHJlcXVpcmVkKSAtLT4KIDx0YXJnZXQgbmFtZT0iY29tbW9uLmRlcGxveS5hc2FkbWluIiBkZXBlbmRzPSJzZXRBc2FkbWluQXJncyI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21tb24ucnVuLmFzYWRtaW4iPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiCiAgICAgICAgICAgICAgICB2YWx1ZT0iJHtkZXBsb3l9ICR7QVNBRE1JTi1BUkdTfSAke2FyZy5saXN0fSIvPgogICAgIDwvYW50Y2FsbD4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZUFwcFJlZiI+CkBAIC01MDcsNyArNTA3LDcgQEAKICAgICAgICAgPHBhcmFtIG5hbWU9InRlc3ROYW1lIiB2YWx1ZT0iJHt0ZXN0TmFtZX0iLz4KICAgICA8L2FudGNhbGw+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21tb24ucnVuLmFzYWRtaW4iPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiCiAgICAgICAgICAgICAgICB2YWx1ZT0iJHtkZXBsb3l9ICR7QVNBRE1JTi1BUkdTfSAtLWZvcmNlPXRydWUgJHthcmcubGlzdH0iLz4KICAgICA8L2FudGNhbGw+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGVBcHBSZWYiPgpAQCAtNTE5LDcgKzUxOSw3IEBACiA8IS0tIEBwYXJhbSAke2FyZy5saXN0fSAocmVxdWlyZWQpIC0tPgogPHRhcmdldCBuYW1lPSJjb21tb24uZGVwbG95Lm9zZ2kuYXNhZG1pbiIgZGVwZW5kcz0ic2V0QXNhZG1pbkFyZ3MiPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY29tbW9uLnJ1bi5hc2FkbWluIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IgogICAgICAgICAgICAgICAgdmFsdWU9IiR7ZGVwbG95fSAke0FTQURNSU4tQVJHU30gLS10eXBlIG9zZ2kgJHthcmcubGlzdH0iLz4KICAgICA8L2FudGNhbGw+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGVBcHBSZWYiPgpAQCAtNTMyLDcgKzUzMiw3IEBACiAgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0TmFtZSIgdmFsdWU9IiR7dGVzdE5hbWV9Ii8+CiAgICAgPC9hbnRjYWxsPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY29tbW9uLnJ1bi5hc2FkbWluIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IgogICAgICAgICAgICAgICAgdmFsdWU9IiR7ZGVwbG95fSAke0FTQURNSU4tQVJHU30gLS10eXBlIG9zZ2kgLS1mb3JjZT10cnVlICR7YXJnLmxpc3R9Ii8+CiAgICAgPC9hbnRjYWxsPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlQXBwUmVmIj4KQEAgLTU0Nyw3ICs1NDcsNyBAQAogICAgICAgICA8cGFyYW0gbmFtZT0idGVzdE5hbWUiIHZhbHVlPSIke3Rlc3ROYW1lfSIvPgogICAgIDwvYW50Y2FsbD4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbW1vbi5ydW4uYXNhZG1pbiI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIKICAgICAgICAgICAgICAgIHZhbHVlPSIke3VuZGVwbG95fSAke0FTQURNSU4tQVJHU30gJHthcmcubGlzdH0iLz4KICAgICA8L2FudGNhbGw+CiA8L3RhcmdldD4KQEAgLTU3MSw3ICs1NzEsNyBAQAogPHRhcmdldCBuYW1lPSJjcmVhdGVBcHBSZWYiIGRlcGVuZHM9ImluaXQsc2V0RW5hYmxlZCIgaWY9ImRvQ2x1c3RlciIgdW5sZXNzPSJkb1JvbGxpbmdVcGdyYWRlIj4KICAgICA8ZWNobyBtZXNzYWdlPSJDcmVhdGUgQXBwbGljYXRpb24gUmVmZXJlbmNlIGZvciAke3Rlc3ROYW1lfSIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY29tbW9uLnJ1bi5hc2FkbWluIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IgogICAgICAgICAgICAgICAgdmFsdWU9ImNyZWF0ZS1hcHBsaWNhdGlvbi1yZWYgLS11c2VyICR7YWRtaW4udXNlcn0gLS1wYXNzd29yZGZpbGUgJHtwYXNzd29yZEZpbGV9IC0tcG9ydCAke2FkbWluLnBvcnR9IC0tdGFyZ2V0ICR7dGVzdFNlcnZlcn0gLS1lbmFibGVkICR7ZW5hYmxlZH0gJHt0ZXN0TmFtZX0iLz4KICAgICA8L2FudGNhbGw+CiA8L3RhcmdldD4KQEAgLTU3OSw3ICs1NzksNyBAQAogPHRhcmdldCBuYW1lPSJkZWxBcHBSZWYiIGRlcGVuZHM9ImluaXQiIGlmPSJkb0NsdXN0ZXIiPgogICAgIDxlY2hvIG1lc3NhZ2U9IkRlbGV0ZSBBcHBsaWNhdGlvbiBSZWZlcmVuY2UgZm9yICR7dGVzdE5hbWV9Ii8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21tb24ucnVuLmFzYWRtaW4iPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiCiAgICAgICAgICAgICAgICB2YWx1ZT0iZGVsZXRlLWFwcGxpY2F0aW9uLXJlZiAtLXVzZXIgJHthZG1pbi51c2VyfSAtLXBhc3N3b3JkZmlsZSAke3Bhc3N3b3JkRmlsZX0gLS1wb3J0ICR7YWRtaW4ucG9ydH0gLS10YXJnZXQgJHt0ZXN0U2VydmVyfSAke3Rlc3ROYW1lfSIvPgogICAgIDwvYW50Y2FsbD4KIDwvdGFyZ2V0PgpAQCAtNjAyLDcgKzYwMiw3IEBACiAKIDx0YXJnZXQgbmFtZT0iZG90dGVkLmVuYWJsZUFwcE9uSW5zdGFuY2UiIGRlcGVuZHM9ImluaXQiIGlmPSJkb0NsdXN0ZXIiPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY29tbW9uLnJ1bi5hc2FkbWluIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IgogICAgICAgICAgICAgICAgdmFsdWU9InNldCBzZXJ2ZXJzLnNlcnZlci4ke3Rlc3RTZXJ2ZXJ9LmFwcGxpY2F0aW9uLXJlZi4ke3Rlc3ROYW1lfS5lbmFibGVkPXRydWUiLz4KICAgICA8L2FudGNhbGw+CiA8L3RhcmdldD4KQEAgLTc5NSw3ICs3OTUsNyBAQAogCiAgICAgPCEtLQogICAgICAgICBEdWUgdG8gZGlmZmVyZW5jZXMgaW4gY29tbWFuZCBsaW5lIHBhcnNpbmcgb24gV2luZG93cyBhbmQgbm9uLVdpbmRvd3Mgc3lzdGVtcyB3ZSBuZWVkCi0gICAgICAgIHRvIHBhc3MgdGhlIHBvc3NpYmx5LWVtcHR5IGFkbWluLnBhc3N3b3JkIGRpZmZlcmVudGx5LiAgCisgICAgICAgIHRvIHBhc3MgdGhlIHBvc3NpYmx5LWVtcHR5IGFkbWluLnBhc3N3b3JkIGRpZmZlcmVudGx5LgogICAgIC0tPgogICAgIDxjb25kaXRpb24gcHJvcGVydHk9ImFkbWluLnBhc3N3b3JkLmFyZyIgdmFsdWU9IiZxdW90OyR7YWRtaW4ucGFzc3dvcmR9JnF1b3Q7IiBlbHNlPSIke2FkbWluLnBhc3N3b3JkfSI+CiAgICAgICAgIDxvcyBmYW1pbHk9IndpbmRvd3MiLz4KQEAgLTgwMyw3ICs4MDMsNyBAQAogCiAgICAgPGVjaG8gbWVzc2FnZT0iSlNSODhEZXBsb3llciAke2NvbW1hbmR9ICR7anNyODgudXJpfSAke2FkbWluLnVzZXJ9ICR7YWRtaW4ucGFzc3dvcmR9ICAke2FyZy5saXN0fSIvPgogICAgIDxqYXZhV2l0aFJlc3VsdAotICAgICAgICAgICAgZm9yaz0idHJ1ZSIgCisgICAgICAgICAgICBmb3JrPSJ0cnVlIgogICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIgogICAgICAgICAgICAganZtPSIke0pBVkF9IgogICAgICAgICAgICAgY2xhc3NuYW1lPSJkZXZ0ZXN0cy5kZXBsb3ltZW50LnV0aWwuSlNSODhEZXBsb3llciIKQEAgLTg5NSw4ICs4OTUsOCBAQAogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0idHJhbnNmb3JtIiBkZXBlbmRzPSJpbml0Ij4KLSAgICA8c3R5bGUgaW49IiR7cm9vdH0vdGVzdHMtcmVzdWx0cy54bWwiIAotICAgICAgICAgICBvdXQ9IiR7cm9vdH0vcmVzdWx0cy5odG1sIiBleHRlbnNpb249Ii5odG1sIiAKKyAgICA8c3R5bGUgaW49IiR7cm9vdH0vdGVzdHMtcmVzdWx0cy54bWwiCisgICAgICAgICAgIG91dD0iJHtyb290fS9yZXN1bHRzLmh0bWwiIGV4dGVuc2lvbj0iLmh0bWwiCiAgICAgICAgICAgIHN0eWxlPSIke3Rlc3RzUm9vdH0vY29uZmlnL2NvbnZlcnQueHNsIiBkZXN0ZGlyPSIuIi8+CiAgICAgPGNvbmRpdGlvbiBwcm9wZXJ0eT0iaGFzQW5ub3RhdGlvbiI+CiAgICAgICAgIDwhLS0gbmVlZCBhIGJldHRlciB3YXkgdG8gY2hlY2sgaWYgYW5ub3RhdGlvbiBpcyBleGVjdXRlZCBmb3IgdGhpcyBydW4gLS0+CkBAIC05MDgsNyArOTA4LDcgQEAKICAgICAgICAgICAgPC9vcj4KICAgICAgICAgICAgPGF2YWlsYWJsZSBmaWxlPSIke2Fubm90YXRpb24ucmVwb3J0LmRpcn0iLz4KICAgICAgICAgPC9hbmQ+Ci0gICAgPC9jb25kaXRpb24+IAorICAgIDwvY29uZGl0aW9uPgogICAgIDxhbnRjYWxsIHRhcmdldD0ianV0cmFuc2Zvcm0iLz4KIDwvdGFyZ2V0PgogCkBAIC05MzQsOCArOTM0LDggQEAKICAgICA8ZGVsZXRlIGRpcj0iJHthbm5vdGF0aW9uLnJlcG9ydC5kaXJ9Ii8+CiA8L3RhcmdldD4KIAotPCEtLSAKLSAgICBUYXJnZXRzIHRvIHByb2Nlc3MgdGhlIHRlc3QgcmVzdWx0cyAKKzwhLS0KKyAgICBUYXJnZXRzIHRvIHByb2Nlc3MgdGhlIHRlc3QgcmVzdWx0cwogLS0+CiA8dGFyZ2V0IG5hbWU9InByb2Nlc3NSZXN1bHQiPgogICAgIDxjb25kaXRpb24gcHJvcGVydHk9InRlc3RQYXNzZWQiPgpAQCAtOTU2LDExICs5NTYsMTEgQEAKICAgICA8Y29uZGl0aW9uIHByb3BlcnR5PSJzdGF0dXNQcm92aWRlZCI+CiAgICAgICAgIDxvcj4KICAgICAgICAgICAgIDxlcXVhbHMgYXJnMT0iJHtyZXN1bHR9IiBhcmcyPSIwIi8+Ci0gICAgICAgICAgICA8ZXF1YWxzIGFyZzE9IiR7cmVzdWx0fSIgYXJnMj0iLTEiLz4JCQkJCi0gICAgICAgICAgICA8ZXF1YWxzIGFyZzE9IiR7cmVzdWx0fSIgYXJnMj0iMSIvPgkJCQkKKyAgICAgICAgICAgIDxlcXVhbHMgYXJnMT0iJHtyZXN1bHR9IiBhcmcyPSItMSIvPgorICAgICAgICAgICAgPGVxdWFscyBhcmcxPSIke3Jlc3VsdH0iIGFyZzI9IjEiLz4KICAgICAgICAgPC9vcj4KICAgICA8L2NvbmRpdGlvbj4KLSAgICA8ZGlybmFtZSBwcm9wZXJ0eT0iYW50ZmlsZS5kaXIiIGZpbGU9IiR7YW50LmZpbGV9Ii8+CQkKKyAgICA8ZGlybmFtZSBwcm9wZXJ0eT0iYW50ZmlsZS5kaXIiIGZpbGU9IiR7YW50LmZpbGV9Ii8+CiAgICAgPGJhc2VuYW1lIHByb3BlcnR5PSJjdXJyZW50LmRpciIgZmlsZT0iJHthbnRmaWxlLmRpcn0iLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImZhaWxlZCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0bmFtZSIgdmFsdWU9IiR7Y3VycmVudC5kaXJ9Ii8+CkBAIC05NzQsNyArOTc0LDcgQEAKIDwvdGFyZ2V0PgogCiA8IS0tCi0gIFBhcmFtdGVyczogCisgIFBhcmFtdGVyczoKICAgICB0ZXN0bmFtZSAtIG5hbWUgb2YgdGhlIHRlc3QKICAgICByZXN1bHQgLSBudW1lcmljIHZhbHVlIG9mIHRoZSBleGl0IHN0YXR1cyBmcm9tIHRoZSBjbGllbnQKICAgICBzdGF0dXMgLSB0eXBpY2FsbHkgRkFJTEVEIG9yIFVOS05PV04KQEAgLTEwMDcsNyArMTAwNyw3IEBACiA8dGFyZ2V0IG5hbWU9InBhc3NlZCIgaWY9InRlc3RQYXNzZWQiPgogICAgIDxlY2hvIG1lc3NhZ2U9IlRlc3QgJHt0ZXN0bmFtZX0gUGFzc2VkIi8+CiAgICAgPGNvbmNhdCBkZXN0ZmlsZT0iJHtyb290fS90ZXN0cy1yZXN1bHRzLnhtbCIgYXBwZW5kPSJ5ZXMiPiZsdDtyZXN1bHQgc3RhdHVzPSJQQVNTRUQiIGxvZz0iJHtsb2d9Ii8+PC9jb25jYXQ+Ci0gICAgPGNvbmNhdCBkZXN0ZmlsZT0iJHtyb290fS90ZXN0cy1yZXN1bHRzLnhtbCIgYXBwZW5kPSJ5ZXMiPiZsdDsvdGVzdD48L2NvbmNhdD4JCisgICAgPGNvbmNhdCBkZXN0ZmlsZT0iJHtyb290fS90ZXN0cy1yZXN1bHRzLnhtbCIgYXBwZW5kPSJ5ZXMiPiZsdDsvdGVzdD48L2NvbmNhdD4KIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9InVua25vd24iIHVubGVzcz0ic3RhdHVzUHJvdmlkZWQiPgpAQCAtMTAxOCwyMiArMTAxOCwyMiBAQAogCiA8IS0tIEBwYXJhbSAke2Rlc2NyaXB0aW9ufSAocmVxdWlyZWQpIC0tPgogPHRhcmdldCBuYW1lPSJkZWNsYXJlLXRlc3QiPgotICAgIDxkaXJuYW1lIHByb3BlcnR5PSJhbnRmaWxlLmRpciIgZmlsZT0iJHthbnQuZmlsZX0iLz4JCQorICAgIDxkaXJuYW1lIHByb3BlcnR5PSJhbnRmaWxlLmRpciIgZmlsZT0iJHthbnQuZmlsZX0iLz4KICAgICA8YmFzZW5hbWUgcHJvcGVydHk9ImN1cnJlbnQuZGlyIiBmaWxlPSIke2FudGZpbGUuZGlyfSIvPgogICAgIDxlY2hvIG1lc3NhZ2U9IlN0YXJ0aW5nIHRlc3QgJHtjdXJyZW50LmRpcn0gJHtkZXNjcmlwdGlvbn0iLz4KICAgICA8Y29uY2F0IGRlc3RmaWxlPSIke3Jvb3R9L3Rlc3RzLXJlc3VsdHMueG1sIiBhcHBlbmQ9InllcyI+Jmx0O3Rlc3QgbmFtZT0iJHtjdXJyZW50LmRpcn0iIGRlc2NyaXB0aW9uPSIke2Rlc2NyaXB0aW9ufSI+PC9jb25jYXQ+CiA8L3RhcmdldD4KIAotPCEtLSAKLSAgICBUYXJnZXRzIHByaXZhdGUgdG8gdGhpcyB4bWwgZmlsZSBvbmx5IAorPCEtLQorICAgIFRhcmdldHMgcHJpdmF0ZSB0byB0aGlzIHhtbCBmaWxlIG9ubHkKIC0tPgogPHRhcmdldCBuYW1lPSJwcmVUZXN0c1J1biIgZGVwZW5kcz0iY2xlYW4iPgotICAgIDxkaXJuYW1lIHByb3BlcnR5PSJhbnRmaWxlLmRpciIgZmlsZT0iJHthbnQuZmlsZX0iLz4JCQorICAgIDxkaXJuYW1lIHByb3BlcnR5PSJhbnRmaWxlLmRpciIgZmlsZT0iJHthbnQuZmlsZX0iLz4KICAgICA8YmFzZW5hbWUgcHJvcGVydHk9ImN1cnJlbnQuZGlyIiBmaWxlPSIke2FudGZpbGUuZGlyfSIvPgogICAgIDxlY2hvIG1lc3NhZ2U9IlJ1bm5pbmcgYWxsICR7Y3VycmVudC5kaXJ9IGRldnRlc3RzIi8+CiAgICAgPG1rZGlyIGRpcj0iJHt0ZXN0c1Jvb3R9L2J1aWxkL2FyY2hpdmVzIi8+CiAgICAgPGRlbGV0ZSBmaWxlPSIke3Jvb3R9L3Rlc3RzLXJlc3VsdHMueG1sIi8+Ci0gICAgPGNvbmNhdCBkZXN0ZmlsZT0iJHtyb290fS90ZXN0cy1yZXN1bHRzLnhtbCIgYXBwZW5kPSJ5ZXMiPiZsdDt0ZXN0cz48L2NvbmNhdD4JCQorICAgIDxjb25jYXQgZGVzdGZpbGU9IiR7cm9vdH0vdGVzdHMtcmVzdWx0cy54bWwiIGFwcGVuZD0ieWVzIj4mbHQ7dGVzdHM+PC9jb25jYXQ+CiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJyZXN0YXJ0LnNlcnZlciI+CkBAIC0xMDU0LDcgKzEwNTQsNyBAQAogICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJ0cnVlIj4KICAgICAgICAgPGFyZyBsaW5lPSJsaXN0LWluc3RhbmNlcyAtLXBvcnQgJHthZG1pbi5wb3J0fSAtLXVzZXIgJHthZG1pbi51c2VyfSAtLXBhc3N3b3JkZmlsZSAke3Bhc3N3b3JkRmlsZX0iLz4KICAgICA8L2V4ZWM+Ci0gICAgPG1rZGlyIGRpcj0iJHtidWlsZH0vc2V0dXBkb25lIi8+ICAgIAorICAgIDxta2RpciBkaXI9IiR7YnVpbGR9L3NldHVwZG9uZSIvPgogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0ic2V0dXBEb21haW4iPgpAQCAtMTE0OSw3ICsxMTQ5LDcgQEAKIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImRlbGV0ZUNsdXN0ZXIiIGlmPSJkb0NsdXN0ZXIiPgotICAgIDwhLS0gc3RvcC1jbHVzdGVyIGRvZXMgbm90IHdvcmsgc28gdXNlIHN0b3AtaW5zdGFuY2UgdG8gbWFrZSBzdXJlIAorICAgIDwhLS0gc3RvcC1jbHVzdGVyIGRvZXMgbm90IHdvcmsgc28gdXNlIHN0b3AtaW5zdGFuY2UgdG8gbWFrZSBzdXJlCiAgICAgICAgICBpbnN0YW5jZSBpcyBzdG9wcGVkIGJlZm9yZSBkZWxldGluZyBpdCAtLT4KICAgICA8ZWNobyBtZXNzYWdlPSJSdW5uaW5nLi4uIGFzYWRtaW4gc3RvcC1pbnN0YW5jZSIvPgogICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iPgpAQCAtMTE5OCw3ICsxMTk4LDcgQEAKICAgICA8Y29weSB0b2Rpcj0ic2VydmVyLWxvZ3MvJHt0ZXN0U2VydmVyfS9sb2dzIj4KICAgICAgICA8ZmlsZXNldCBkaXI9IiR7dGVzdFNlcnZlci5kaXJ9L2xvZ3MiIGluY2x1ZGVzPSIqLmxvZyAqLmxvZy4qIi8+CiAgICAgPC9jb3B5PgotCTxhbnRjYWxsIHRhcmdldD0iY29weUNsdXN0ZXJMb2ciLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvcHlDbHVzdGVyTG9nIi8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGVJbnN0YW5jZSIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlQ2x1c3RlciIvPgogICAgIDxkZWxldGUgZGlyPSIke3MxYXMuaG9tZX0vbm9kZWFnZW50cyIvPgpAQCAtMTIxMyw3ICsxMjEzLDcgQEAKIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9InBvc3RUZXN0c1J1biI+Ci0gICAgPGNvbmNhdCBkZXN0ZmlsZT0iJHtyb290fS90ZXN0cy1yZXN1bHRzLnhtbCIgYXBwZW5kPSJ5ZXMiPiZsdDsvdGVzdHM+PC9jb25jYXQ+CQkKKyAgICA8Y29uY2F0IGRlc3RmaWxlPSIke3Jvb3R9L3Rlc3RzLXJlc3VsdHMueG1sIiBhcHBlbmQ9InllcyI+Jmx0Oy90ZXN0cz48L2NvbmNhdD4KICAgICA8ZWNobyBtZXNzYWdlPSJQcm9jZXNzaW5nIHRlc3RzIHJlc3VsdHMiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InRyYW5zZm9ybSIvPgogICAgIDxsb2FkZmlsZSBzcmNGaWxlPSJyZXN1bHRzLmh0bWwiIHByb3BlcnR5PSJyZXN1bHRzIi8+CkBAIC0xMjUyLDE0ICsxMjUyLDE0IEBACiAgICAgPHByb3BlcnR5IG5hbWU9IkFQUENMSUVOVCIgdmFsdWU9IiR7czFhcy5ob21lfS9iaW4vYXBwY2xpZW50LmJhdCIvPgogPC90YXJnZXQ+CiAKLTwhLS0gCi0gICAgVGFyZ2V0cyB0byBiZSBkZXByZWNhdGVkIAorPCEtLQorICAgIFRhcmdldHMgdG8gYmUgZGVwcmVjYXRlZAogLS0+CiAKIDx0YXJnZXQgbmFtZT0icHJlcGFyZS1qc3I4OCIgPgogICAgIDxhbnQgZGlyPSIke2Vudi5BUFNfSE9NRX0vZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC90ZXN0ZXIiIHRhcmdldD0iY29tcGlsZSI+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9Ii8+Ci0gICAgPC9hbnQ+CQorICAgIDwvYW50PgogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0ianNyODgtZGVwbG95IiBkZXBlbmRzPSJwcmVwYXJlLWpzcjg4IiA+CkBAIC0xMjc2LDcgKzEyNzYsNyBAQAogICAgICAgICA8YXJnIHZhbHVlPSIke2FkbWluLnVzZXJ9Ii8+CiAgICAgICAgIDxhcmcgdmFsdWU9IiR7YWRtaW4ucGFzc3dvcmR9Ii8+CiAgICAgPC9qYXZhPgotPC90YXJnZXQ+ICAKKzwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9Imxpc3QiPgogICAgIDxlY2hvIG1lc3NhZ2U9IkFsbCBBVkFJTEFCTEUgbW9kdWxlcyIvPgpAQCAtMTMwMSw4ICsxMzAxLDggQEAKIDwhLS0KICAgT24gV2luZG93cywgYW50IGhhbmdzIHdoZW4gaXQgcnVucyBhbiBhc2FkbWluIGNvbW1hbmQgdGhhdCBzdGFydHMgYSBwcm9jZXNzLgogICBUbyB3b3JrIGFyb3VuZCB0aGF0LCB0aGlzIHRhc2sgZGlzdGluZ3Vpc2hlcyBiZXR3ZWVuIFdpbmRvd3MgYW5kIG5vbi1XaW5kb3dzCi0gIHN5c3RlbXMgYW5kIHVzZXMgYSBjdXN0b20gYW50IHRhc2sgZm9yIFdpbmRvd3MuIAotICAKKyAgc3lzdGVtcyBhbmQgdXNlcyBhIGN1c3RvbSBhbnQgdGFzayBmb3IgV2luZG93cy4KKwogICBBbnkgdGVzdCB0aGF0IG5lZWRzIHRvIHN0YXJ0IGEgcHJvY2VzcyBzaG91bGQgTk9UIHVzZSAke0FTQURNSU59IGRpcmVjdGx5CiAgIGJ1dCBzaG91bGQgY2FsbCB0aGlzIHN0YXJ0LXByb2Nlc3MgdGFyZ2V0IGluc3RlYWQuICBQYXNzIHRoZSBjb21tYW5kIGxpbmUKICAgdG8gYmUgcnVuIGFzIDxwYXJhbSBuYW1lPSJsaW5lIiB2YWx1ZT0iLi4uIi8+LgpAQCAtMTMyMCw3ICsxMzIwLDcgQEAKICAgICAgIDxpc3NldCBwcm9wZXJ0eT0ic3RhcnQtdGFyZ2V0Ii8+CiAgICAgPC9ub3Q+CiAgIDwvY29uZGl0aW9uPgotICAKKwogICA8IS0tCiAgICAgSW52b2tlIHRoZSB0YXJnZXQganVzdCBjaG9zZW4uCiAgIC0tPgpAQCAtMTM0Nyw3ICsxMzQ3LDcgQEAKIDwvdGFyZ2V0PgogCiA8IS0tCi0gIEZvciBub24tV2luZG93cyBzeXN0ZW1zLCBhbnQgd29ya3MgZmluZSB3aGVuIGludm9raW5nIGFzYWRtaW4gdG8gc3RhcnQgYSAKKyAgRm9yIG5vbi1XaW5kb3dzIHN5c3RlbXMsIGFudCB3b3JrcyBmaW5lIHdoZW4gaW52b2tpbmcgYXNhZG1pbiB0byBzdGFydCBhCiAgIHByb2Nlc3MsIHNvIGRvIGl0IHRoYXQgd2F5IGZvciB0aG9zZSBzeXN0ZW1zLgogLS0+CiA8dGFyZ2V0IG5hbWU9InN0YXJ0LXByb2Nlc3Mtbm9uLXdpbmRvd3MiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kZXNjcmlwdG9yX2ZyZWVfem9uZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Rlc2NyaXB0b3JfZnJlZV96b25lL2J1aWxkLnhtbAppbmRleCA2ZDY5MjNjLi41NjdkMjE1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Rlc2NyaXB0b3JfZnJlZV96b25lL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Rlc2NyaXB0b3JfZnJlZV96b25lL2J1aWxkLnhtbApAQCAtMjMsMTEgKzIzLDExIEBACiAKIDxwcm9qZWN0IG5hbWU9ImVhciIgZGVmYXVsdD0iYWxsIiBiYXNlZGlyPSIuIj4KIAotCSZjb21tb25CdWlsZDsKKyAgICAmY29tbW9uQnVpbGQ7CiAKLQk8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIj4KLQkJPGFudCBkaXI9ImVhciIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9lYXIiLz4KLQkJPC9hbnQ+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCI+CisgICAgICAgIDxhbnQgZGlyPSJlYXIiIHRhcmdldD0icHJpdmF0ZS1hbGwiPgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0vZWFyIi8+CisgICAgICAgIDwvYW50PgorICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kZXNjcmlwdG9yX2ZyZWVfem9uZS9lYXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kZXNjcmlwdG9yX2ZyZWVfem9uZS9lYXIvYnVpbGQueG1sCmluZGV4IGIxODRlMWQuLmI3MTM0MTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGVzY3JpcHRvcl9mcmVlX3pvbmUvZWFyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Rlc2NyaXB0b3JfZnJlZV96b25lL2Vhci9idWlsZC54bWwKQEAgLTIzLDE3ICsyMywxNyBAQAogCiA8cHJvamVjdCBuYW1lPSJlYXIiIGRlZmF1bHQ9ImFsbCIgYmFzZWRpcj0iLiI+CiAKLQkmY29tbW9uQnVpbGQ7CisgICAgJmNvbW1vbkJ1aWxkOwogCi0JPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCI+Ci0JCTxhbnQgZGlyPSJub19hcHB4bWwiIHRhcmdldD0icHJpdmF0ZS1hbGwiPgotCQkJPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0vbm9fYXBweG1sIi8+Ci0JCTwvYW50PgotCQk8YW50IGRpcj0iZGlyX2RlcGxveSIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9kaXJfZGVwbG95Ii8+Ci0JCTwvYW50PgotCQk8YW50IGRpcj0ibm9fYXBweG1sXzIiIHRhcmdldD0icHJpdmF0ZS1hbGwiPgotCQkJPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0vbm9fYXBweG1sXzIiLz4KLQkJPC9hbnQ+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCI+CisgICAgICAgIDxhbnQgZGlyPSJub19hcHB4bWwiIHRhcmdldD0icHJpdmF0ZS1hbGwiPgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0vbm9fYXBweG1sIi8+CisgICAgICAgIDwvYW50PgorICAgICAgICA8YW50IGRpcj0iZGlyX2RlcGxveSIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9kaXJfZGVwbG95Ii8+CisgICAgICAgIDwvYW50PgorICAgICAgICA8YW50IGRpcj0ibm9fYXBweG1sXzIiIHRhcmdldD0icHJpdmF0ZS1hbGwiPgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0vbm9fYXBweG1sXzIiLz4KKyAgICAgICAgPC9hbnQ+CisgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Rlc2NyaXB0b3JfZnJlZV96b25lL2Vhci9kaXJfZGVwbG95L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGVzY3JpcHRvcl9mcmVlX3pvbmUvZWFyL2Rpcl9kZXBsb3kvYnVpbGQueG1sCmluZGV4IDhlYjBlMTIuLjk1ZGU4ZTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGVzY3JpcHRvcl9mcmVlX3pvbmUvZWFyL2Rpcl9kZXBsb3kvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGVzY3JpcHRvcl9mcmVlX3pvbmUvZWFyL2Rpcl9kZXBsb3kvYnVpbGQueG1sCkBAIC01NCw3ICs1NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tL3N1bi9zMWFzZGV2L2RlcGxveW1lbnQvbm9hcHB4bWwvZWpiL1NmdWwuY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tL3N1bi9zMWFzZGV2L2RlcGxveW1lbnQvbm9hcHB4bWwvZWpiL1NsZXNzLmNsYXNzIi8+CiAgICAgICAgIDwvamFyPgotICAgICAgICA8Y29weSB0b2Rpcj0iJHtidWlsZH0vJHt0ZXN0TmFtZX0vZWpiX2phciI+IAorICAgICAgICA8Y29weSB0b2Rpcj0iJHtidWlsZH0vJHt0ZXN0TmFtZX0vZWpiX2phciI+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGR9IiBpbmNsdWRlcz0iY29tL3N1bi9zMWFzZGV2L2RlcGxveW1lbnQvbm9hcHB4bWwvZWpiLyoqLmNsYXNzIi8+CiAgICAgICAgIDwvY29weT4KICAgICAgICAgPGNvcHkgZmlsZT0iLi9lamIvTUFOSUZFU1QuTUYiIHRvZGlyPSIke2J1aWxkfS8ke3Rlc3ROYW1lfS9lamJfamFyL01FVEEtSU5GIi8+CkBAIC03OSwxMSArNzksMTEgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0TmFtZSIgdmFsdWU9IiR7dGVzdE5hbWV9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuY2xpZW50IiBkZXBlbmRzPSJwcmVwYXJlLHNldE9yYlBvcnQyIj4KLSAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBUFBDTElFTlR9IiAKLSAgICAgICAgICAgICAgcmVzdWx0cHJvcGVydHk9InJlc3VsdCIgCi0gICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIgCisgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVBQQ0xJRU5UfSIKKyAgICAgICAgICAgICAgcmVzdWx0cHJvcGVydHk9InJlc3VsdCIKKyAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIgogICAgICAgICAgICAgICBvdXRwdXQ9IiR7YnVpbGR9LyR7bG9nLmlkfS5vdXRwdXQubG9nIj4KICAgICAgICAgICA8YXJnIGxpbmU9Ii10YXJnZXRzZXJ2ZXIgJHthcHBjbGllbnQudGFyZ2V0c2VydmVyc30gLWNsaWVudCAke2FwcGNsaWVudC5qYXJ9Ii8+CiAgICAgICAgIDwvZXhlYz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGVzY3JpcHRvcl9mcmVlX3pvbmUvZWFyL2Rpcl9kZXBsb3kvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kZXNjcmlwdG9yX2ZyZWVfem9uZS9lYXIvZGlyX2RlcGxveS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggNTI5Mzg2NS4uMzUzM2EyMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kZXNjcmlwdG9yX2ZyZWVfem9uZS9lYXIvZGlyX2RlcGxveS9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kZXNjcmlwdG9yX2ZyZWVfem9uZS9lYXIvZGlyX2RlcGxveS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI1LDggKzI1LDggQEAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwotICAgIH0gIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHt9CiAKICAgICBARUpCCkBAIC00MywyMSArNDMsMjEgQEAKIAogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJpbnZva2luZyBzdGF0ZWxlc3MiKTsKICAgICAgICAgICAgIHNsZXNzLmhlbGxvKCk7Ci0gICAgICAgIAorCiAgICAgICAgICAgICBwYXNzKCk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgCXJldHVybjsKKworICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHBhc3MoKSB7CiAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiUEFTU0VEOiBkZXNjcmlwdG9yX2ZyZWVfem9uZS9lYXIvbm9fYXBweG1sIik7CiAgICAgICAgIFN5c3RlbS5leGl0KDApOwogICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIGZhaWwoKSB7CiAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRkFJTEVEOiBkZXNjcmlwdG9yX2ZyZWVfem9uZS9lYXIvbm9fYXBweG1sIik7CiAgICAgICAgIFN5c3RlbS5leGl0KC0xKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGVzY3JpcHRvcl9mcmVlX3pvbmUvZWFyL25vX2FwcHhtbC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Rlc2NyaXB0b3JfZnJlZV96b25lL2Vhci9ub19hcHB4bWwvYnVpbGQueG1sCmluZGV4IDRiZDQ5MDAuLjlkMTE0NTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGVzY3JpcHRvcl9mcmVlX3pvbmUvZWFyL25vX2FwcHhtbC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kZXNjcmlwdG9yX2ZyZWVfem9uZS9lYXIvbm9fYXBweG1sL2J1aWxkLnhtbApAQCAtNTQsNyArNTQsNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkfSIKICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJjb20vc3VuL3MxYXNkZXYvZGVwbG95bWVudC9ub2FwcHhtbC9lamIvKiouY2xhc3MiLz4KICAgICAgICAgPC9qYXI+Ci0gICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7cG9ydGFibGUuZWFyfSI+IAorICAgICAgICA8amFyIGRlc3RmaWxlPSIke3BvcnRhYmxlLmVhcn0iPgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkfSIgaW5jbHVkZXM9InV0aWwuamFyLCBlamIuamFyIi8+CiAgICAgICAgIDwvamFyPgogICAgICAgICA8amFyIGRlc3RmaWxlPSIke2FwcGNsaWVudC5qYXJ9IiBtYW5pZmVzdD0iY2xpZW50L01BTklGRVNULk1GIj4KQEAgLTg1LDcgKzg1LDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0TmFtZSIgdmFsdWU9IiR7dGVzdE5hbWV9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95Lmpzcjg4IiBkZXBlbmRzPSJwcmVwYXJlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21tb24uZGVwbG95Lmpzcjg4Ij4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIgdmFsdWU9IiR7cG9ydGFibGUuZWFyfSAke2RlcGxveXBsYW4uamFyfSIvPgpAQCAtMTI1LDkgKzEyNSw5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bmNsaWVudCIgZGVwZW5kcz0icHJlcGFyZSxzZXRPcmJQb3J0MiI+Ci0gICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVBQQ0xJRU5UfSIgCi0gICAgICAgICAgICAgIHJlc3VsdHByb3BlcnR5PSJyZXN1bHQiIAotICAgICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiIAorICAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FQUENMSUVOVH0iCisgICAgICAgICAgICAgIHJlc3VsdHByb3BlcnR5PSJyZXN1bHQiCisgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIKICAgICAgICAgICAgICAgb3V0cHV0PSIke2J1aWxkfS8ke2xvZy5pZH0ub3V0cHV0LmxvZyI+CiAgICAgICAgICAgPGFyZyBsaW5lPSItdGFyZ2V0c2VydmVyICR7YXBwY2xpZW50LnRhcmdldHNlcnZlcnN9IC1jbGllbnQgJHthcHBjbGllbnQuamFyfSIvPgogICAgICAgICA8L2V4ZWM+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Rlc2NyaXB0b3JfZnJlZV96b25lL2Vhci9ub19hcHB4bWwvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kZXNjcmlwdG9yX2ZyZWVfem9uZS9lYXIvbm9fYXBweG1sL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA1MjkzODY1Li4zNTMzYTIwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Rlc2NyaXB0b3JfZnJlZV96b25lL2Vhci9ub19hcHB4bWwvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGVzY3JpcHRvcl9mcmVlX3pvbmUvZWFyL25vX2FwcHhtbC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI1LDggKzI1LDggQEAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwotICAgIH0gIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHt9CiAKICAgICBARUpCCkBAIC00MywyMSArNDMsMjEgQEAKIAogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJpbnZva2luZyBzdGF0ZWxlc3MiKTsKICAgICAgICAgICAgIHNsZXNzLmhlbGxvKCk7Ci0gICAgICAgIAorCiAgICAgICAgICAgICBwYXNzKCk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgCXJldHVybjsKKworICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHBhc3MoKSB7CiAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiUEFTU0VEOiBkZXNjcmlwdG9yX2ZyZWVfem9uZS9lYXIvbm9fYXBweG1sIik7CiAgICAgICAgIFN5c3RlbS5leGl0KDApOwogICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIGZhaWwoKSB7CiAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRkFJTEVEOiBkZXNjcmlwdG9yX2ZyZWVfem9uZS9lYXIvbm9fYXBweG1sIik7CiAgICAgICAgIFN5c3RlbS5leGl0KC0xKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGVzY3JpcHRvcl9mcmVlX3pvbmUvZWFyL25vX2FwcHhtbF8yL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGVzY3JpcHRvcl9mcmVlX3pvbmUvZWFyL25vX2FwcHhtbF8yL2J1aWxkLnhtbAppbmRleCA4YjIyNGZiLi5kMjU2YTY0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Rlc2NyaXB0b3JfZnJlZV96b25lL2Vhci9ub19hcHB4bWxfMi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kZXNjcmlwdG9yX2ZyZWVfem9uZS9lYXIvbm9fYXBweG1sXzIvYnVpbGQueG1sCkBAIC02OSw3ICs2OSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tL3N1bi9zMWFzZGV2L2RlcGxveW1lbnQvbm9hcHB4bWwvZWpiL1NmdWwuY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tL3N1bi9zMWFzZGV2L2RlcGxveW1lbnQvbm9hcHB4bWwvZWpiL1NsZXNzLmNsYXNzIi8+CiAgICAgICAgIDwvamFyPgotICAgICAgICA8amFyIGRlc3RmaWxlPSIke3BvcnRhYmxlLmVhcn0iPiAKKyAgICAgICAgPGphciBkZXN0ZmlsZT0iJHtwb3J0YWJsZS5lYXJ9Ij4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZH0iIGluY2x1ZGVzPSJsaWIvdXRpbC5qYXIsIGVqYi9lamIuamFyLCB3ZWIvd2ViLndhciwgY2xpZW50L2FwcGNsaWVudC5qYXIiLz4KICAgICAgICAgPC9qYXI+CiAgICAgPC90YXJnZXQ+CkBAIC05NCw3ICs5NCw3IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0idGVzdE5hbWUiIHZhbHVlPSIke3Rlc3ROYW1lfSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveS5qc3I4OCIgZGVwZW5kcz0icHJlcGFyZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tbW9uLmRlcGxveS5qc3I4OCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiIHZhbHVlPSIke3BvcnRhYmxlLmVhcn0gJHtkZXBsb3lwbGFuLmphcn0iLz4KQEAgLTEzNCw5ICsxMzQsOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW5jbGllbnQiIGRlcGVuZHM9InByZXBhcmUsc2V0T3JiUG9ydDIsc2V0SHR0cFBvcnQyIj4KLSAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBUFBDTElFTlR9IiAKLSAgICAgICAgICAgICAgcmVzdWx0cHJvcGVydHk9InJlc3VsdCIgCi0gICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIgCisgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVBQQ0xJRU5UfSIKKyAgICAgICAgICAgICAgcmVzdWx0cHJvcGVydHk9InJlc3VsdCIKKyAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIgogICAgICAgICAgICAgICBvdXRwdXQ9IiR7YnVpbGR9LyR7bG9nLmlkfS5vdXRwdXQubG9nIj4KICAgICAgICAgICA8YXJnIGxpbmU9Ii10YXJnZXRzZXJ2ZXIgJHthcHBjbGllbnQudGFyZ2V0c2VydmVyc30gLWNsaWVudCAke3Rlc3ROYW1lfUNsaWVudC5qYXIgaHR0cDovLyR7aHR0cC5ob3N0fToke2RlcGx0ZXN0LnBvcnR9L3dlYiIvPgogICAgICAgICA8L2V4ZWM+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Rlc2NyaXB0b3JfZnJlZV96b25lL2Vhci9ub19hcHB4bWxfMi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Rlc2NyaXB0b3JfZnJlZV96b25lL2Vhci9ub19hcHB4bWxfMi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMWY4NzVlYS4uOWVhZDI5YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kZXNjcmlwdG9yX2ZyZWVfem9uZS9lYXIvbm9fYXBweG1sXzIvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGVzY3JpcHRvcl9mcmVlX3pvbmUvZWFyL25vX2FwcHhtbF8yL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjcsOCArMjcsOCBAQAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3MpOwotICAgIH0gIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHt9CiAKICAgICBARUpCCkBAIC01NCwyMSArNTQsMjEgQEAKICAgICAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAgICAgcGFzcygpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgIAlyZXR1cm47CisKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBwYXNzKCkgewogICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIlBBU1NFRDogZGVzY3JpcHRvcl9mcmVlX3pvbmUvZWFyL25vX2FwcHhtbF8yIik7CiAgICAgICAgIFN5c3RlbS5leGl0KDApOwogICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIGZhaWwoKSB7CiAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRkFJTEVEOiBkZXNjcmlwdG9yX2ZyZWVfem9uZS9lYXIvbm9fYXBweG1sXzIiKTsKICAgICAgICAgU3lzdGVtLmV4aXQoLTEpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kaXJlY3RvcnlkZXBsb3kvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kaXJlY3RvcnlkZXBsb3kvYnVpbGQueG1sCmluZGV4IDk3Y2NmMTYuLjlmOTE5MjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGlyZWN0b3J5ZGVwbG95L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RpcmVjdG9yeWRlcGxveS9idWlsZC54bWwKQEAgLTIzLDkgKzIzLDkgQEAKIAogPHByb2plY3QgbmFtZT0iZGlyZGVwbG95IiBkZWZhdWx0PSJhbGwiIGJhc2VkaXI9Ii4iPgogCi0JJmNvbW1vbkJ1aWxkOwotICAgICAgICAKLQk8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIiBpZj0iUEUiPgorICAgICZjb21tb25CdWlsZDsKKworICAgIDx0YXJnZXQgbmFtZT0icHJpdmF0ZS1hbGwiIGlmPSJQRSI+CiAgICAgICAgICAgICA8YW50IGRpcj0iZWFyIiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9lYXIiLz4KICAgICAgICAgICAgIDwvYW50PgpAQCAtNDQsNiArNDQsNiBAQAogICAgICAgICAgICAgPGFudCBkaXI9IndhcndpdGhzdWZmaXgiIHRhcmdldD0icHJpdmF0ZS1hbGwiPgogICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L3dhcndpdGhzdWZmaXgiLz4KICAgICAgICAgICAgIDwvYW50PgotCTwvdGFyZ2V0PgorICAgIDwvdGFyZ2V0PgogCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RpcmVjdG9yeWRlcGxveS9jbGllbnQvSGVsbG9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGlyZWN0b3J5ZGVwbG95L2NsaWVudC9IZWxsb0NsaWVudC5qYXZhCmluZGV4IDk4MmU4MWYuLjVhYzM2NTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGlyZWN0b3J5ZGVwbG95L2NsaWVudC9IZWxsb0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGlyZWN0b3J5ZGVwbG95L2NsaWVudC9IZWxsb0NsaWVudC5qYXZhCkBAIC0yOCwxMSArMjgsMTEgQEAKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAotCWJvb2xlYW4gdGVzdFBvc2l0aXZlID0gKEJvb2xlYW4udmFsdWVPZihhcmdzWzBdKSkuYm9vbGVhblZhbHVlKCk7Ci0JaWYodGVzdFBvc2l0aXZlKQotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3QgZXhwZWN0cyBzdWNjZXNzZnVsIHJlc3VsdCIpOwotCWVsc2UKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0IGV4cGVjdGVkIHRvIGZhaWwiKTsKKyAgICBib29sZWFuIHRlc3RQb3NpdGl2ZSA9IChCb29sZWFuLnZhbHVlT2YoYXJnc1swXSkpLmJvb2xlYW5WYWx1ZSgpOworICAgIGlmKHRlc3RQb3NpdGl2ZSkKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0IGV4cGVjdHMgc3VjY2Vzc2Z1bCByZXN1bHQiKTsKKyAgICBlbHNlCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdCBleHBlY3RlZCB0byBmYWlsIik7CiAgICAgICAgIHRyeSB7CiAKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKQEAgLTc1LDI5ICs3NSwyOSBAQAogCiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGYWlsdXJlISAgQ2F1Z2h0IHVuYXNrZWQgZm9yIEV4Y2VwdGlvbiIpOwotCQkgICAgU3lzdGVtLmV4aXQoLTEpOworICAgICAgICAgICAgU3lzdGVtLmV4aXQoLTEpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigKICAgICAgICAgICAgICAgICAiQ2xpZW50IGlzIG5vdyB0cnlpbmcgdG8gcmVtb3ZlIHRoZSBzZXNzaW9uIGJlYW5cbiIpOwogICAgICAgICAgICAgaHIucmVtb3ZlKCk7CiAgICAgICAgIH0gY2F0Y2ggKE5hbWluZ0V4Y2VwdGlvbiBuZSkgewotCSAgICBpZih0ZXN0UG9zaXRpdmUpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJDYXVnaHQgZXhjZXB0aW9uIHdoaWxlIGluaXRpYWxpemluZyBjb250ZXh0IDogIiArCi0JCQkJICAgbmUuZ2V0TWVzc2FnZSgpICsgIiBcbiIpOwotCQlTeXN0ZW0uZXhpdCgtMSk7Ci0JICAgIH0gZWxzZSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiUmVjZCBleGNlcHRpb24gYXMgZXhwZWN0ZWQiKTsKLQkgICAgfQorICAgICAgICBpZih0ZXN0UG9zaXRpdmUpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYXVnaHQgZXhjZXB0aW9uIHdoaWxlIGluaXRpYWxpemluZyBjb250ZXh0IDogIiArCisgICAgICAgICAgICAgICAgICAgbmUuZ2V0TWVzc2FnZSgpICsgIiBcbiIpOworICAgICAgICBTeXN0ZW0uZXhpdCgtMSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVjZCBleGNlcHRpb24gYXMgZXhwZWN0ZWQiKTsKKyAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gcmUpIHsKLQkgICAgaWYodGVzdFBvc2l0aXZlKSB7Ci0JCXJlLnByaW50U3RhY2tUcmFjZSgpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oICJTZXNzaW9uIGJlYW5zIGNvdWxkIG5vdCBiZSByZW1vdmVkIGJ5IHRoZSBjbGllbnQuXG4iKTsKLQkJU3lzdGVtLmV4aXQoLTEpOwotCSAgICB9IGVsc2UgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlJlY2QgZXhjZXB0aW9uIGFzIGV4cGVjdGVkIik7Ci0JICAgIH0KLQl9CisgICAgICAgIGlmKHRlc3RQb3NpdGl2ZSkgeworICAgICAgICByZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiU2Vzc2lvbiBiZWFucyBjb3VsZCBub3QgYmUgcmVtb3ZlZCBieSB0aGUgY2xpZW50LlxuIik7CisgICAgICAgIFN5c3RlbS5leGl0KC0xKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZWNkIGV4Y2VwdGlvbiBhcyBleHBlY3RlZCIpOworICAgICAgICB9CisgICAgfQogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oCiAgICAgICAgICAgICAiU2Vzc2lvbiBiZWFuIHdhcyBzdWNjZXNzZnVsbHkgcmVtb3ZlZCBieSB0aGUgY2xpZW50LlxuIik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kaXJlY3RvcnlkZXBsb3kvY2xpZW50L1Rlc3RDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGlyZWN0b3J5ZGVwbG95L2NsaWVudC9UZXN0Q2xpZW50LmphdmEKaW5kZXggZGUwM2NhMy4uMTJlZWUzZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kaXJlY3RvcnlkZXBsb3kvY2xpZW50L1Rlc3RDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RpcmVjdG9yeWRlcGxveS9jbGllbnQvVGVzdENsaWVudC5qYXZhCkBAIC0yOSw3ICsyOSw3IEBACiAgICAgICAgIFRlc3RDbGllbnQgY2xpZW50ID0gbmV3IFRlc3RDbGllbnQoKTsKICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIFN0cmluZyB1cmwgPSBhcmdzWzBdOwpAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICAgICAgICAgIGxvZygiQ2F1Z2h0IEVYUEVDVEVEIElPRXhjZXB0aW9uOiAiICsgZXgpOwogICAgICAgICAgICAgICAgIHBhc3MoKTsKICAgICAgICAgICAgIH0KLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RpcmVjdG9yeWRlcGxveS9lYXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kaXJlY3RvcnlkZXBsb3kvZWFyL2J1aWxkLnhtbAppbmRleCAyODY2MTE0Li5lNDcyY2U4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RpcmVjdG9yeWRlcGxveS9lYXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGlyZWN0b3J5ZGVwbG95L2Vhci9idWlsZC54bWwKQEAgLTIyLDIzICsyMiwyMyBAQAogXT4KIAogPCEtLQotICBUZXN0IGRpcmVjdG9yeSBkZXBsb3ltZW50IGZvciBlYXIgd2l0aCBkaXJlY3Rvcnkgc3RydWN0dXJlIHN1Y2ggCisgIFRlc3QgZGlyZWN0b3J5IGRlcGxveW1lbnQgZm9yIGVhciB3aXRoIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgc3VjaAogICBhcyBmb28vYmFyX3dhcgogLS0+Ci0gCisKIDxwcm9qZWN0IG5hbWU9ImRpcmVjdG9yeURlcGxveS1FYXIiIGRlZmF1bHQ9ImFsbCIgYmFzZWRpcj0iLiI+CiAKLSAJJmNvbW1vbkJ1aWxkOworICAgICAmY29tbW9uQnVpbGQ7CiAKICAgICA8cHJvcGVydHkgbmFtZT0idGVzdE5hbWUiIHZhbHVlPSJkaXJEZXBsb3lFYXIiLz4KICAgICA8cHJvcGVydHkgbmFtZT0iY29udGV4dFJvb3QiIHZhbHVlPSIke3Rlc3ROYW1lfVdlYiIvPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJlYXIuYnVpbGQuZGlyIiB2YWx1ZT0iJHtidWlsZH0vJHt0ZXN0TmFtZX0iLz4KLSAgICA8cHJvcGVydHkgbmFtZT0iZWpiLmJ1aWxkLmRpciIgCisgICAgPHByb3BlcnR5IG5hbWU9ImVqYi5idWlsZC5kaXIiCiAgICAgICAgICAgICAgIHZhbHVlPSIke2Vhci5idWlsZC5kaXJ9LyR7dGVzdE5hbWV9RWpiX2phciIvPgotICAgIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIuYnVpbGQuZGlyIiAKKyAgICA8cHJvcGVydHkgbmFtZT0id2ViLmJ1aWxkLmRpciIKICAgICAgICAgICAgICAgdmFsdWU9IiR7ZWFyLmJ1aWxkLmRpcn0vJHt0ZXN0TmFtZX1XZWJfd2FyIi8+CiAgICAgPHByb3BlcnR5IG5hbWU9ImNsaWVudC5idWlsZC5kaXIiIHZhbHVlPSIke2J1aWxkfS9jbGllbnQiLz4KLSAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InByZXBhcmUiIGRlcGVuZHM9ImluaXQiPgogICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGR9IiAvPgogICAgICAgIDxta2RpciBkaXI9IiR7ZWFyLmJ1aWxkLmRpcn0iIC8+CkBAIC02NSwxMSArNjUsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGFzc3BhdGggcmVmaWQ9ImdmdjMuY2xhc3NwYXRoIi8+CiAgICAgICAgIDwvamF2YWM+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZSIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgICAgICA8Y29weSBmaWxlPSJkZXNjcmlwdG9yL3dlYi54bWwiIHRvZGlyPSIke3dlYi5idWlsZC5kaXJ9L1dFQi1JTkYiLz4KLSAgICAgICAgICAgIDxjb3B5IGZpbGU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiIAotICAgICAgICAgICAgICAgICAgdG9kaXI9IiR7d2ViLmJ1aWxkLmRpcn0vV0VCLUlORiIgCisgICAgICAgICAgICA8Y29weSBmaWxlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIgorICAgICAgICAgICAgICAgICAgdG9kaXI9IiR7d2ViLmJ1aWxkLmRpcn0vV0VCLUlORiIKICAgICAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICAgICAgICAgICAgIDxjb3B5IHRvZGlyPSIke3dlYi5idWlsZC5kaXJ9Ij4KICAgICAgICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0id2FyIiBpbmNsdWRlcz0iKi5qc3AsICouaHRtbCIvPgpAQCAtNzgsMTggKzc4LDE4IEBACiAgICAgICAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IndhciIgaW5jbHVkZXM9Iipwcm9wZXJ0aWVzIi8+CiAgICAgICAgICAgICAgPC9jb3B5PgogICAgICAgICAgICAgIDxta2RpciBkaXI9IiR7ZWpiLmJ1aWxkLmRpcn0vTUVUQS1JTkYiLz4KLSAgICAgICAgICAgICA8Y29weSBmaWxlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIiAKKyAgICAgICAgICAgICA8Y29weSBmaWxlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIgogICAgICAgICAgICAgICAgICAgIHRvZGlyPSIke2VqYi5idWlsZC5kaXJ9L01FVEEtSU5GIi8+Ci0gICAgICAgICAgICAgPGNvcHkgZmlsZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiIAotICAgICAgICAgICAgICAgICAgIHRvZGlyPSIke2VqYi5idWlsZC5kaXJ9L01FVEEtSU5GIiAKKyAgICAgICAgICAgICA8Y29weSBmaWxlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIKKyAgICAgICAgICAgICAgICAgICB0b2Rpcj0iJHtlamIuYnVpbGQuZGlyfS9NRVRBLUlORiIKICAgICAgICAgICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICAgICAgICAgICA8bWtkaXIgZGlyPSIke2Vhci5idWlsZC5kaXJ9L01FVEEtSU5GIi8+CiAKICAgICAgICAgICAgICA8IS0tIGFwcGxpY2F0aW9uLnhtbCBpcyBvcHRpb25hbAotICAgICAgICAgICAgIDxjb3B5IGZpbGU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIiAKKyAgICAgICAgICAgICA8Y29weSBmaWxlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIKICAgICAgICAgICAgICAgICAgICB0b2Rpcj0iJHtlYXIuYnVpbGQuZGlyfS9NRVRBLUlORiIvPgogICAgICAgICAgICAgIC0tPgotICAgICAgICAgICAgIDxjb3B5IGZpbGU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIgCisgICAgICAgICAgICAgPGNvcHkgZmlsZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIgogICAgICAgICAgICAgICAgICAgIHRvZGlyPSIke2Vhci5idWlsZC5kaXJ9L01FVEEtSU5GIgogICAgICAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICAgIDwvdGFyZ2V0PgpAQCAtMTE2LDcgKzExNiw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJydW4ucG9zaXRpdmUiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi5wb3NpdGl2ZSIgZGVwZW5kcz0ic2V0SHR0cFBvcnQiPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0idXJsIiB2YWx1ZT0iaHR0cDovLyR7aHR0cC5ob3N0fToke2RlcGx0ZXN0LnBvcnR9LyR7Y29udGV4dFJvb3R9Ii8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50Ij4KQEAgLTEyNCw3ICsxMjQsNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImxvZy5pZCIgdmFsdWU9IiR7bG9nLmlkfSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4ubmVnYXRpdmUiIGRlcGVuZHM9InNldEh0dHBQb3J0Ij4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9InVybCIgdmFsdWU9Imh0dHA6Ly8ke2h0dHAuaG9zdH06JHtkZXBsdGVzdC5wb3J0fS8ke2NvbnRleHRSb290fS8ke3Rlc3ROYW1lfSIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudCI+CkBAIC0xMzIsNyArMTMyLDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJsb2cuaWQiIHZhbHVlPSIke2xvZy5pZH0iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuY2xpZW50IiBkZXBlbmRzPSJpbml0Ij4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iVGVzdENsaWVudCAke2FyZy5saXN0fSIvPgogICAgICAgICA8amF2YVdpdGhSZXN1bHQKQEAgLTE0NCw3ICsxNDQsNyBAQAogICAgICAgICAgICAgcmVzdWx0cHJvcGVydHk9InJlc3VsdCI+CiAgICAgICAgICAgICA8anZtYXJnIHZhbHVlPSItRG9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbEhvc3Q9JHtodHRwLmhvc3R9Ii8+CiAgICAgICAgICAgICA8anZtYXJnIHZhbHVlPSItRG9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQ9JHtvcmIucG9ydH0iLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIDxjbGFzc3BhdGg+CiAgICAgICAgICAgICAgICAgPHBhdGggcmVmaWQ9ImdmdjMuY2xhc3NwYXRoIi8+CiAgICAgICAgICAgICAgICAgPHBhdGggbG9jYXRpb249IiR7Y2xpZW50LmJ1aWxkLmRpcn0iLz4KQEAgLTE1MiwxMyArMTUyLDEzIEBACiAKICAgICAgICAgICAgIDxhcmcgbGluZT0iJHthcmcubGlzdH0iLz4KICAgICAgICAgPC9qYXZhV2l0aFJlc3VsdD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwcm9jZXNzUmVzdWx0Ij4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJyZXN1bHQiIHZhbHVlPSIke3Jlc3VsdH0iLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJsb2ciIHZhbHVlPSIke2J1aWxkfS8ke2xvZy5pZH0ub3V0cHV0LmxvZyIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNzZW1ibGUiLz4KICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlY2xhcmUtdGVzdCI+CkBAIC0xNjYsNyArMTY2LDcgQEAKICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveWRpci5hc2FkbWluIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLnBvc2l0aXZlIj48cGFyYW0gbmFtZT0ibG9nLmlkIiB2YWx1ZT0iMSIvPjwvYW50Y2FsbD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWNsYXJlLXRlc3QiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImRlc2NyaXB0aW9uIiB2YWx1ZT0iZGlyZWN0b3J5ZGVwbG95L2VhciBUZXN0IGFzYWRtaW4gcmVkZXBsb3lkaXIiLz4KICAgICAgICAgPC9hbnRjYWxsPgpAQCAtMTgzLDUgKzE4Myw1IEBACiAgICAgICAgIDxkZWxldGUgZGlyPSIke2J1aWxkfSIvPgogICAgIDwvdGFyZ2V0PgogCi0gICAgCisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGlyZWN0b3J5ZGVwbG95L2Vhci9lamIvR3JlZXRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kaXJlY3RvcnlkZXBsb3kvZWFyL2VqYi9HcmVldGVyLmphdmEKaW5kZXggOTA0N2U2NC4uM2FjZThkOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kaXJlY3RvcnlkZXBsb3kvZWFyL2VqYi9HcmVldGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kaXJlY3RvcnlkZXBsb3kvZWFyL2VqYi9HcmVldGVyLmphdmEKQEAgLTI2LDEyICsyNiwxMiBAQAogICogdG8gb2J0YWluIHJlZmVyZW5jZXMgdG8gdGhlIGJlYW4ncyByZW1vdGUgaW50ZXJmYWNlIChHcmVldGVyLCBpbiB0aGlzIGNhc2UpLgogICoKICAqLwotcHVibGljIGludGVyZmFjZSBHcmVldGVyIGV4dGVuZHMgamFrYXJ0YS5lamIuRUpCT2JqZWN0IHsgCitwdWJsaWMgaW50ZXJmYWNlIEdyZWV0ZXIgZXh0ZW5kcyBqYWthcnRhLmVqYi5FSkJPYmplY3QgewogICAgIC8qKgogICAgICAqIFJldHVybnMgYSBncmVldGluZy4KICAgICAgKiBAcmV0dXJuIHJldHVybnMgYSBncmVldGluZyBhcyBhIHN0cmluZy4KICAgICAgKiBAZXhjZXB0aW9uIHRocm93cyBhIFJlbW90ZUV4Y2VwdGlvbi4KICAgICAgKgogICAgICAqLwotICAgIHB1YmxpYyBTdHJpbmcgZ2V0R3JlZXRpbmcoKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOyAKLX0gCisgICAgcHVibGljIFN0cmluZyBnZXRHcmVldGluZygpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247Cit9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RpcmVjdG9yeWRlcGxveS9lYXIvZWpiL0dyZWV0ZXJFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGlyZWN0b3J5ZGVwbG95L2Vhci9lamIvR3JlZXRlckVKQi5qYXZhCmluZGV4IGI2YmI1NmQuLjEzMjRhYmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGlyZWN0b3J5ZGVwbG95L2Vhci9lamIvR3JlZXRlckVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGlyZWN0b3J5ZGVwbG95L2Vhci9lamIvR3JlZXRlckVKQi5qYXZhCkBAIC0xNiw3NSArMTYsNzUgQEAKIAogcGFja2FnZSBzYW1wbGVzLmVqYi5zdGF0ZWxlc3Muc2ltcGxlLmVqYjsKIAotaW1wb3J0IGphdmEudXRpbC4qOyAKLWltcG9ydCBqYXZhLmlvLio7IAoraW1wb3J0IGphdmEudXRpbC4qOworaW1wb3J0IGphdmEuaW8uKjsKIAogLyoqCiAgKiBBIHNpbXBsZSBzdGF0ZWxlc3MgYmVhbiBmb3IgdGhlIEhlbGxvV29ybGQgYXBwbGljYXRpb24uIFRoaXMgYmVhbiBpbXBsZW1lbnRzIG9uZQogICogYnVzaW5lc3MgbWV0aG9kIGFzIGRlY2xhcmVkIGJ5IHRoZSByZW1vdGUgaW50ZXJmYWNlLgogICovCi1wdWJsaWMgY2xhc3MgR3JlZXRlckVKQiBpbXBsZW1lbnRzIGpha2FydGEuZWpiLlNlc3Npb25CZWFuIHsgCitwdWJsaWMgY2xhc3MgR3JlZXRlckVKQiBpbXBsZW1lbnRzIGpha2FydGEuZWpiLlNlc3Npb25CZWFuIHsKIAotICAgIHByaXZhdGUgIGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0IG1fY3R4ID0gbnVsbDsgCi0gICAKKyAgICBwcml2YXRlICBqYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dCBtX2N0eCA9IG51bGw7CisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBzZXNzaW9uIGNvbnRleHQuIFJlcXVpcmVkIGJ5IEVKQiBzcGVjLgogICAgICAqIEBwYXJhbSBjdHggQSBTZXNzaW9uQ29udGV4dCBvYmplY3QuCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQgY3R4KSB7IAotICAgICAgICBtX2N0eCA9IGN0eDsgCi0gICAgfSAKKyAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChqYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dCBjdHgpIHsKKyAgICAgICAgbV9jdHggPSBjdHg7CisgICAgfQogCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIGJlYW4uIFJlcXVpcmVkIGJ5IEVKQiBzcGVjLgogICAgICAqIEBleGNlcHRpb24gdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbi4KICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB0aHJvd3MgamFrYXJ0YS5lamIuRUpCRXhjZXB0aW9uLCBqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb24geyAKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJlamJDcmVhdGUoKSBvbiBvYmogIiArIHRoaXMpOyAKLSAgICB9IAorICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBqYWthcnRhLmVqYi5FSkJFeGNlcHRpb24sIGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbiB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZWpiQ3JlYXRlKCkgb24gb2JqICIgKyB0aGlzKTsKKyAgICB9CiAKICAgICAvKioKICAgICAgKiBSZW1vdmVzIHRoZSBiZWFuLiBSZXF1aXJlZCBieSBFSkIgc3BlYy4KICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7IAotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImVqYlJlbW92ZSgpIG9uIG9iaiAiICsgdGhpcyk7IAotICAgIH0gCisgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImVqYlJlbW92ZSgpIG9uIG9iaiAiICsgdGhpcyk7CisgICAgfQogCiAgICAgLyoqCiAgICAgICogTG9hZHMgdGhlIHN0YXRlIG9mIHRoZSBiZWFuIGZyb20gc2Vjb25kYXJ5IHN0b3JhZ2UuIFJlcXVpcmVkIGJ5IEVKQiBzcGVjLgogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgeyAKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJlamJBY3RpdmF0ZSgpIG9uIG9iaiAiICsgdGhpcyk7IAotICAgIH0gCisgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZWpiQWN0aXZhdGUoKSBvbiBvYmogIiArIHRoaXMpOworICAgIH0KIAogICAgIC8qKgogICAgICAqIFNlcmlhbGl6ZXMgdGhlIHN0YXRlIG9mIHRoZSBiZWFuIHRvIHNlY29uZGFyeSBzdG9yYWdlLiBSZXF1aXJlZCBieSBFSkIgc3BlYy4KICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7IAotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImVqYlBhc3NpdmF0ZSgpIG9uIG9iaiAiICsgdGhpcyk7IAotICAgIH0gCisgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImVqYlBhc3NpdmF0ZSgpIG9uIG9iaiAiICsgdGhpcyk7CisgICAgfQogCiAgICAgLyoqCiAgICAgICogUmVxdWlyZWQgYnkgRUpCIHNwZWMuCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgR3JlZXRlcigpIHsgCi0gICAgfSAKKyAgICBwdWJsaWMgdm9pZCBHcmVldGVyKCkgeworICAgIH0KIAogCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBhIGdyZWV0aW5nLCBiYXNlZCBvbiB0aGUgdGltZSBvZiB0aGUgZGF5LgogICAgICAqIEByZXR1cm4gcmV0dXJucyBhIGdyZWV0aW5nIGFzIGEgc3RyaW5nLgogICAgICAqLwotICAgIHB1YmxpYyBTdHJpbmcgZ2V0R3JlZXRpbmcoKSB7IAotICAgICAgICBTdHJpbmcgbWVzc2FnZSA9IG51bGw7IAotICAgICAgICBDYWxlbmRhciBjYWxlbmRhciA9IG5ldyBHcmVnb3JpYW5DYWxlbmRhcigpOyAKLSAgICAgICAgaW50IGN1cnJlbnRIb3VyID0gY2FsZW5kYXIuZ2V0KENhbGVuZGFyLkhPVVJfT0ZfREFZKTsgCi0gICAgICAgIGlmKGN1cnJlbnRIb3VyIDwgMTIpIG1lc3NhZ2UgPSAibW9ybmluZyI7IAotICAgICAgICBlbHNlIHsgCi0gICAgICAgICAgaWYoIChjdXJyZW50SG91ciA+PSAxMikgJiYgCi0gICAgICAgICAgICAoY2FsZW5kYXIuZ2V0KENhbGVuZGFyLkhPVVJfT0ZfREFZKSA8IDE4KSkgbWVzc2FnZSA9ICJhZnRlcm5vb24iOyAKLSAgICAgICAgICBlbHNlIG1lc3NhZ2UgPSAiZXZlbmluZyI7IAotICAgICAgICB9IAotICAgICAgICByZXR1cm4gbWVzc2FnZTsgCi0gICAgfSAKLX0gCisgICAgcHVibGljIFN0cmluZyBnZXRHcmVldGluZygpIHsKKyAgICAgICAgU3RyaW5nIG1lc3NhZ2UgPSBudWxsOworICAgICAgICBDYWxlbmRhciBjYWxlbmRhciA9IG5ldyBHcmVnb3JpYW5DYWxlbmRhcigpOworICAgICAgICBpbnQgY3VycmVudEhvdXIgPSBjYWxlbmRhci5nZXQoQ2FsZW5kYXIuSE9VUl9PRl9EQVkpOworICAgICAgICBpZihjdXJyZW50SG91ciA8IDEyKSBtZXNzYWdlID0gIm1vcm5pbmciOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICBpZiggKGN1cnJlbnRIb3VyID49IDEyKSAmJgorICAgICAgICAgICAgKGNhbGVuZGFyLmdldChDYWxlbmRhci5IT1VSX09GX0RBWSkgPCAxOCkpIG1lc3NhZ2UgPSAiYWZ0ZXJub29uIjsKKyAgICAgICAgICBlbHNlIG1lc3NhZ2UgPSAiZXZlbmluZyI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1lc3NhZ2U7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kaXJlY3RvcnlkZXBsb3kvZWFyL2VqYi9HcmVldGVySG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kaXJlY3RvcnlkZXBsb3kvZWFyL2VqYi9HcmVldGVySG9tZS5qYXZhCmluZGV4IDEyZDAyM2EuLmE5NzJiYTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGlyZWN0b3J5ZGVwbG95L2Vhci9lamIvR3JlZXRlckhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RpcmVjdG9yeWRlcGxveS9lYXIvZWpiL0dyZWV0ZXJIb21lLmphdmEKQEAgLTIxLDExICsyMSwxMSBAQAogICogdG8gb2J0YWluIHJlZmVyZW5jZXMgdG8gdGhlIGJlYW4ncyByZW1vdGUgaW50ZXJmYWNlLgogICoKICAqLwotcHVibGljIGludGVyZmFjZSBHcmVldGVySG9tZSBleHRlbmRzIGpha2FydGEuZWpiLkVKQkhvbWUgeyAKK3B1YmxpYyBpbnRlcmZhY2UgR3JlZXRlckhvbWUgZXh0ZW5kcyBqYWthcnRhLmVqYi5FSkJIb21lIHsKICAgICAvKioKICAgICAgKiBHZXRzIGEgcmVmZXJlbmNlIHRvIHRoZSByZW1vdGUgaW50ZXJmYWNlIHRvIHRoZSBHcmVldGVyIGJlYW4uCiAgICAgICogQGV4Y2VwdGlvbiB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIGFuZCBSZW1vdGVFeGNlcHRpb24uCiAgICAgICoKICAgICAgKi8KLSAgICBwdWJsaWMgR3JlZXRlciBjcmVhdGUoKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uLCBqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb247IAotfSAKKyAgICBwdWJsaWMgR3JlZXRlciBjcmVhdGUoKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uLCBqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb247Cit9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RpcmVjdG9yeWRlcGxveS9lYXIvd2FyL0dyZWV0ZXJTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RpcmVjdG9yeWRlcGxveS9lYXIvd2FyL0dyZWV0ZXJTZXJ2bGV0LmphdmEKaW5kZXggMDAzNWYwZS4uNmRhMWJkYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kaXJlY3RvcnlkZXBsb3kvZWFyL3dhci9HcmVldGVyU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGlyZWN0b3J5ZGVwbG95L2Vhci93YXIvR3JlZXRlclNlcnZsZXQuamF2YQpAQCAtMTYsMTA0ICsxNiwxMDQgQEAKIAogcGFja2FnZSBzYW1wbGVzLmVqYi5zdGF0ZWxlc3Muc2ltcGxlLnNlcnZsZXQ7CiAKLWltcG9ydCBqYXZhLmlvLio7IAotaW1wb3J0IGphdmEudXRpbC4qOyAKLWltcG9ydCBqYWthcnRhLnNlcnZsZXQuKjsgCi1pbXBvcnQgamF2YXgubmFtaW5nLio7IAotaW1wb3J0IGpha2FydGEuc2VydmxldC5odHRwLio7IAoraW1wb3J0IGphdmEuaW8uKjsKK2ltcG9ydCBqYXZhLnV0aWwuKjsKK2ltcG9ydCBqYWthcnRhLnNlcnZsZXQuKjsKK2ltcG9ydCBqYXZheC5uYW1pbmcuKjsKK2ltcG9ydCBqYWthcnRhLnNlcnZsZXQuaHR0cC4qOwogaW1wb3J0IGphdmF4LnJtaS5Qb3J0YWJsZVJlbW90ZU9iamVjdDsKLWltcG9ydCBqYWthcnRhLmVqYi4qOyAKK2ltcG9ydCBqYWthcnRhLmVqYi4qOwogCi1pbXBvcnQgc2FtcGxlcy5lamIuc3RhdGVsZXNzLnNpbXBsZS5lamIuKjsgCitpbXBvcnQgc2FtcGxlcy5lamIuc3RhdGVsZXNzLnNpbXBsZS5lamIuKjsKIAogLyoqCiAgKiBUaGlzIHNlcnZsZXQgaXMgcmVzcG9uc2libGUgZm9yIHRocm93aW5nIHRoZSBodG1sIHBhZ2VzIGZvciB0aGUgSGVsbG9Xb3JsZCBhcHBsaWNhdGlvbi4KICAqLwotcHVibGljIGNsYXNzIEdyZWV0ZXJTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgeyAgCitwdWJsaWMgY2xhc3MgR3JlZXRlclNlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAKICAgIC8qKgogICAgICogVGhlIGRvR2V0IG1ldGhvZCBvZiB0aGUgc2VydmxldC4gSGFuZGxlcyBhbGwgaHR0cCBHRVQgcmVxdWVzdC4KICAgICAqIFJlcXVpcmVkIGJ5IHRoZSBzZXJ2bGV0IHNwZWNpZmljYXRpb24uCiAgICAgKiBAZXhjZXB0aW9uIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIGFuZCBJT0V4Y2VwdGlvbi4KICAgICAqLwotICAgcHVibGljIHZvaWQgZG9HZXQgKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIAotICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAKKyAgIHB1YmxpYyB2b2lkIGRvR2V0IChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCxIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKQorICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogCi0gICAgICAgIGpha2FydGEuZWpiLkhhbmRsZSBiZWFuSGFuZGxlOyAKLSAgICAgICAgR3JlZXRlciBteUdyZWV0ZXJCZWFuOyAKLSAgICAgICAgR3JlZXRlckhvbWUgbXlHcmVldGVySG9tZTsgCisgICAgICAgIGpha2FydGEuZWpiLkhhbmRsZSBiZWFuSGFuZGxlOworICAgICAgICBHcmVldGVyIG15R3JlZXRlckJlYW47CisgICAgICAgIEdyZWV0ZXJIb21lIG15R3JlZXRlckhvbWU7CiAgICAgICAgIEdyZWV0ZXIgbXlHcmVldGVyUmVtb3RlOwotIAotICAgICAgICBJbml0aWFsQ29udGV4dCBpbml0Q29udGV4dCA9IG51bGw7IAotICAgICAgICBIYXNodGFibGUgZW52ID0gbmV3IGphdmEudXRpbC5IYXNodGFibGUoMSk7IAorCisgICAgICAgIEluaXRpYWxDb250ZXh0IGluaXRDb250ZXh0ID0gbnVsbDsKKyAgICAgICAgSGFzaHRhYmxlIGVudiA9IG5ldyBqYXZhLnV0aWwuSGFzaHRhYmxlKDEpOwogICAgICAgICBSZXNvdXJjZUJ1bmRsZSByYiA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZSgiTG9jYWxTdHJpbmdzIiwgTG9jYWxlLmdldERlZmF1bHQoKSk7CiAKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcbiIrcmIuZ2V0U3RyaW5nKCJncmVldGluZ19zZXJ2bGV0IikrICIuLi4iKTsgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuIityYi5nZXRTdHJpbmcoImdyZWV0aW5nX3NlcnZsZXQiKSsgIi4uLiIpOwogCi0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyYi5nZXRTdHJpbmcoInJldHJpZXZpbmdfam5kaSIpKTsgCi0gICAgICAgIHRyeSB7IAotICAgICAgICAgICAgaW5pdENvbnRleHQgPSBuZXcgamF2YXgubmFtaW5nLkluaXRpYWxDb250ZXh0KCk7IAotICAgICAgICB9ICAKLSAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7IAotICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyYi5nZXRTdHJpbmcoImV4Y2VwdGlvbiIpKyI6ICIgKyBlLnRvU3RyaW5nKCkpOyAKLSAgICAgICAgICByZXR1cm47IAotICAgICAgICB9IAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmIuZ2V0U3RyaW5nKCJyZXRyaWV2aW5nX2puZGkiKSk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpbml0Q29udGV4dCA9IG5ldyBqYXZheC5uYW1pbmcuSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmIuZ2V0U3RyaW5nKCJleGNlcHRpb24iKSsiOiAiICsgZS50b1N0cmluZygpKTsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotICAgICAgICB0cnkgeyAKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyYi5nZXRTdHJpbmcoImxvb2tpbmdfdXAiKSk7IAotICAgICAgICAgICAgU3RyaW5nIEpORElOYW1lID0gImphdmE6Y29tcC9lbnYvZWpiL2dyZWV0ZXIiOyAKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyYi5nZXRTdHJpbmcoImxvb2tpbmciKSsiOiAiICsgSk5ESU5hbWUpOyAKLSAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpbml0Q29udGV4dC5sb29rdXAoSk5ESU5hbWUpOyAKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyYi5nZXRTdHJpbmcoImxvb2tpbmdfdXAiKSk7CisgICAgICAgICAgICBTdHJpbmcgSk5ESU5hbWUgPSAiamF2YTpjb21wL2Vudi9lamIvZ3JlZXRlciI7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmIuZ2V0U3RyaW5nKCJsb29raW5nIikrIjogIiArIEpORElOYW1lKTsKKyAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpbml0Q29udGV4dC5sb29rdXAoSk5ESU5hbWUpOwogICAgICAgICAgICAgbXlHcmVldGVySG9tZSA9IChHcmVldGVySG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmVldGVySG9tZS5jbGFzcyk7Ci0gICAgICAgIH0gIAotICAgICAgICBjYXRjaChFeGNlcHRpb24gZSkgeyAKLSAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmIuZ2V0U3RyaW5nKCJncmVldGVyX2JlYW4iKSsiIC0gIiArICAKLSAgICAgICAgICAgcmIuZ2V0U3RyaW5nKCJpc19yZWdpc3RlcmVkIikrIj86ICIgKyBlLnRvU3RyaW5nKCkpOyAKLSAgICAgICAgcmV0dXJuOyAKLSAgICAgICAgfSAKLSAgICAgICAgdHJ5IHsgCi0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmIuZ2V0U3RyaW5nKCJjcmVhdGluZyIpKTsgCi0gICAgICAgICAgICBteUdyZWV0ZXJSZW1vdGUgPSBteUdyZWV0ZXJIb21lLmNyZWF0ZSgpOyAgCi0gICAgICAgIH0gCi0gICAgICAgIGNhdGNoKENyZWF0ZUV4Y2VwdGlvbiBlKSB7IAotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJiLmdldFN0cmluZygiY291bGRfbm90IikrIjogIisgIAotICAgICAgICAgICAgZS50b1N0cmluZygpKTsgCi0gICAgICAgICAgICByZXR1cm47IAotICAgICAgICB9ICAKKyAgICAgICAgfQorICAgICAgICBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyYi5nZXRTdHJpbmcoImdyZWV0ZXJfYmVhbiIpKyIgLSAiICsKKyAgICAgICAgICAgcmIuZ2V0U3RyaW5nKCJpc19yZWdpc3RlcmVkIikrIj86ICIgKyBlLnRvU3RyaW5nKCkpOworICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyYi5nZXRTdHJpbmcoImNyZWF0aW5nIikpOworICAgICAgICAgICAgbXlHcmVldGVyUmVtb3RlID0gbXlHcmVldGVySG9tZS5jcmVhdGUoKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaChDcmVhdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJiLmdldFN0cmluZygiY291bGRfbm90IikrIjogIisKKyAgICAgICAgICAgIGUudG9TdHJpbmcoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmIuZ2V0U3RyaW5nKCJnZXR0aW5nIikpOyAKLSAgICAgICAgU3RyaW5nIHRoZU1lc3NhZ2UgPSBteUdyZWV0ZXJSZW1vdGUuZ2V0R3JlZXRpbmcoKTsgIAotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmIuZ2V0U3RyaW5nKCJnb3QiKSsiOiAiICsgdGhlTWVzc2FnZSk7IAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmIuZ2V0U3RyaW5nKCJnZXR0aW5nIikpOworICAgICAgICBTdHJpbmcgdGhlTWVzc2FnZSA9IG15R3JlZXRlclJlbW90ZS5nZXRHcmVldGluZygpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmIuZ2V0U3RyaW5nKCJnb3QiKSsiOiAiICsgdGhlTWVzc2FnZSk7CiAKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJiLmdldFN0cmluZygic3RvcmluZyIpKTsgCi0gICAgICAgIHJlcXVlc3Quc2V0QXR0cmlidXRlKCJtZXNzYWdlIiwgdGhlTWVzc2FnZSk7IAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmIuZ2V0U3RyaW5nKCJzdG9yaW5nIikpOworICAgICAgICByZXF1ZXN0LnNldEF0dHJpYnV0ZSgibWVzc2FnZSIsIHRoZU1lc3NhZ2UpOwogCi0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyYi5nZXRTdHJpbmcoImRpc3BhdGNoaW5nIikpOyAKLSAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOyAKLSAgICAgICAgUmVxdWVzdERpc3BhdGNoZXIgZGlzcGF0Y2hlcjsgCi0gICAgICAgIGRpc3BhdGNoZXIgPSBnZXRTZXJ2bGV0Q29udGV4dCgpLmdldFJlcXVlc3REaXNwYXRjaGVyIAotICAgICAgICAgKCIvR3JlZXRlclZpZXcuanNwIik7IAotICAgICAgICBkaXNwYXRjaGVyLmluY2x1ZGUocmVxdWVzdCwgcmVzcG9uc2UpOyAKLSAgICAgICAgcmV0dXJuOyAgCi0gICAgfSAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyYi5nZXRTdHJpbmcoImRpc3BhdGNoaW5nIikpOworICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CisgICAgICAgIFJlcXVlc3REaXNwYXRjaGVyIGRpc3BhdGNoZXI7CisgICAgICAgIGRpc3BhdGNoZXIgPSBnZXRTZXJ2bGV0Q29udGV4dCgpLmdldFJlcXVlc3REaXNwYXRjaGVyCisgICAgICAgICAoIi9HcmVldGVyVmlldy5qc3AiKTsKKyAgICAgICAgZGlzcGF0Y2hlci5pbmNsdWRlKHJlcXVlc3QsIHJlc3BvbnNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgLyoqCiAgICAgKiBUaGUgZG9Qb3N0IG1ldGhvZCBvZiB0aGUgc2VydmxldC4gSGFuZGxlcyBhbGwgaHR0cCBQT1NUIHJlcXVlc3QuCiAgICAgKiBSZXF1aXJlZCBieSB0aGUgc2VydmxldCBzcGVjaWZpY2F0aW9uLgogICAgICogQGV4Y2VwdGlvbiB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiBhbmQgSU9FeGNlcHRpb24uCiAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBkb1Bvc3QgKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIAotICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7IAotICAgICAgICBkb0dldChyZXF1ZXN0LHJlc3BvbnNlKTsgCi0gICAgfSAKKyAgICBwdWJsaWMgdm9pZCBkb1Bvc3QgKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCisgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKKyAgICAgICAgZG9HZXQocmVxdWVzdCxyZXNwb25zZSk7CisgICAgfQogCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHNlcnZsZXQgaW5mbyBhcyBhIFN0cmluZy4KICAgICAqIEByZXR1cm4gcmV0dXJucyB0aGUgc2VydmxldCBpbmZvIGFzIGEgU3RyaW5nLgogICAgICovCi0gICAgcHVibGljIFN0cmluZyBnZXRTZXJ2bGV0SW5mbygpIHsgCisgICAgcHVibGljIFN0cmluZyBnZXRTZXJ2bGV0SW5mbygpIHsKICAgICAgICAgUmVzb3VyY2VCdW5kbGUgcmIgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoIkxvY2FsU3RyaW5ncyIsIExvY2FsZS5nZXREZWZhdWx0KCkpOwotICAgICAgICByZXR1cm4gcmIuZ2V0U3RyaW5nKCJjYWxsIikrIi4iOyAKLSAgICB9IAotfSAKKyAgICAgICAgcmV0dXJuIHJiLmdldFN0cmluZygiY2FsbCIpKyIuIjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RpcmVjdG9yeWRlcGxveS9lYXIvd2FyL0xvY2FsU3RyaW5ncy5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kaXJlY3RvcnlkZXBsb3kvZWFyL3dhci9Mb2NhbFN0cmluZ3MucHJvcGVydGllcwppbmRleCA4NzFmY2U2Li5hMjhhMWE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RpcmVjdG9yeWRlcGxveS9lYXIvd2FyL0xvY2FsU3RyaW5ncy5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGlyZWN0b3J5ZGVwbG95L2Vhci93YXIvTG9jYWxTdHJpbmdzLnByb3BlcnRpZXMKQEAgLTE5LDE5ICsxOSwxOSBAQAogZ3JlZXRlcl90aXRsZT1HcmVldGVyCiBoZWxsb193b3JsZD1IZWxsbyBXb3JsZAogZ29vZD1Hb29kCi1lbmpveV95b3VyPUVuam95IHlvdXIgCitlbmpveV95b3VyPUVuam95IHlvdXJcdTAwMjAKIAogZ3JlZXRpbmdfc2VydmxldD1HcmVldGVyU2VydmxldCBpcyBleGVjdXRpbmcKLXJldHJpZXZpbmdfam5kaT1SZXRyaWV2aW5nIEpOREkgaW5pdGlhbCBjb250ZXh0ICAgICAgIAotZXhjZXB0aW9uPUV4Y2VwdGlvbiBjcmVhdGluZyBJbml0aWFsQ29udGV4dCAgICAgICAgICAKLWxvb2tpbmdfdXA9TG9va2luZyB1cCBncmVldGVyIGJlYW4gaG9tZSBpbnRlcmZhY2UgCityZXRyaWV2aW5nX2puZGk9UmV0cmlldmluZyBKTkRJIGluaXRpYWwgY29udGV4dCAgICAgIFx1MDAyMAorZXhjZXB0aW9uPUV4Y2VwdGlvbiBjcmVhdGluZyBJbml0aWFsQ29udGV4dCAgICAgICAgIFx1MDAyMAorbG9va2luZ191cD1Mb29raW5nIHVwIGdyZWV0ZXIgYmVhbiBob21lIGludGVyZmFjZVx1MDAyMAogbG9va2luZz1Mb29raW5nIHVwCi1ncmVldGVyX2JlYW49R3JlZXRlciBiZWFuIGhvbWUgbm90IGZvdW5kICAgCi1pc19yZWdpc3RlcmVkPUlzIGJlYW4gcmVnaXN0ZXJlZCB3aXRoIEpOREkgICAgICAgICAgICAgCitncmVldGVyX2JlYW49R3JlZXRlciBiZWFuIGhvbWUgbm90IGZvdW5kICBcdTAwMjAKK2lzX3JlZ2lzdGVyZWQ9SXMgYmVhbiByZWdpc3RlcmVkIHdpdGggSk5ESSAgICAgICAgICAgIFx1MDAyMAogY3JlYXRpbmc9Q3JlYXRpbmcgdGhlIGdyZWV0ZXIgYmVhbgotY291bGRfbm90PUNvdWxkIG5vdCBjcmVhdGUgdGhlIGdyZWV0ZXIgYmVhbiAKK2NvdWxkX25vdD1Db3VsZCBub3QgY3JlYXRlIHRoZSBncmVldGVyIGJlYW5cdTAwMjAKIGdldHRpbmc9R2V0dGluZyB0aGUgbWVzc2FnZSBmcm9tIHRoZSBncmVldGVyIGJlYW4KLWdvdD1Hb3QgdGhpcyBtZXNzYWdlIGZyb20gZ3JlZXRlciBiZWFuIAorZ290PUdvdCB0aGlzIG1lc3NhZ2UgZnJvbSBncmVldGVyIGJlYW5cdTAwMjAKIHN0b3Jpbmc9U3RvcmluZyB0aGUgbWVzc2FnZSBpbiByZXF1ZXN0IG9iamVjdAotZGlzcGF0Y2hpbmc9RGlzcGF0Y2hpbmcgSlNQIGZvciBvdXRwdXQgICAKK2Rpc3BhdGNoaW5nPURpc3BhdGNoaW5nIEpTUCBmb3Igb3V0cHV0ICBcdTAwMjAKIGNhbGw9Q2FsbCBhIHNlc3Npb24gYmVhbiBmcm9tIGEgc2VydmxldCBhbmQgZGVsaXZlciByZXN1bHQgdmlhIGEgSlNQCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RpcmVjdG9yeWRlcGxveS9lYXJ3aXRoc3VmZml4L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGlyZWN0b3J5ZGVwbG95L2VhcndpdGhzdWZmaXgvYnVpbGQueG1sCmluZGV4IDBkMzA0YTguLjUwMGI4NTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGlyZWN0b3J5ZGVwbG95L2VhcndpdGhzdWZmaXgvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGlyZWN0b3J5ZGVwbG95L2VhcndpdGhzdWZmaXgvYnVpbGQueG1sCkBAIC0yMiwyMyArMjIsMjMgQEAKIF0+CiAKIDwhLS0KLSAgVGVzdCBkaXJlY3RvcnkgZGVwbG95bWVudCBmb3IgZWFyIHdpdGggZGlyZWN0b3J5IHN0cnVjdHVyZSBzdWNoIAorICBUZXN0IGRpcmVjdG9yeSBkZXBsb3ltZW50IGZvciBlYXIgd2l0aCBkaXJlY3Rvcnkgc3RydWN0dXJlIHN1Y2gKICAgYXMgZm9vLmVhci9iYXIud2FyCiAtLT4KLSAKKwogPHByb2plY3QgbmFtZT0iZGlyZWN0b3J5RGVwbG95LXdpdGhFYXJTdWZmaXgiIGRlZmF1bHQ9ImFsbCIgYmFzZWRpcj0iLiI+CiAKLSAJJmNvbW1vbkJ1aWxkOworICAgICAmY29tbW9uQnVpbGQ7CiAKICAgICA8cHJvcGVydHkgbmFtZT0idGVzdE5hbWUiIHZhbHVlPSJkaXJEZXBsb3lXaXRoRWFyU3VmZml4Ii8+CiAgICAgPHByb3BlcnR5IG5hbWU9ImNvbnRleHRSb290IiB2YWx1ZT0iJHt0ZXN0TmFtZX1XZWIiLz4KICAgICA8cHJvcGVydHkgbmFtZT0iZWFyLmJ1aWxkLmRpciIgdmFsdWU9IiR7YnVpbGR9LyR7dGVzdE5hbWV9LmVhciIvPgotICAgIDxwcm9wZXJ0eSBuYW1lPSJlamIuYnVpbGQuZGlyIiAKKyAgICA8cHJvcGVydHkgbmFtZT0iZWpiLmJ1aWxkLmRpciIKICAgICAgICAgICAgICAgdmFsdWU9IiR7ZWFyLmJ1aWxkLmRpcn0vJHt0ZXN0TmFtZX1FamIuamFyIi8+Ci0gICAgPHByb3BlcnR5IG5hbWU9IndlYi5idWlsZC5kaXIiIAorICAgIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIuYnVpbGQuZGlyIgogICAgICAgICAgICAgICB2YWx1ZT0iJHtlYXIuYnVpbGQuZGlyfS8ke3Rlc3ROYW1lfVdlYi53YXIiLz4KICAgICA8cHJvcGVydHkgbmFtZT0iY2xpZW50LmJ1aWxkLmRpciIgdmFsdWU9IiR7YnVpbGR9L2NsaWVudCIvPgotICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icHJlcGFyZSIgZGVwZW5kcz0iaW5pdCI+CiAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZH0iIC8+CiAgICAgICAgPG1rZGlyIGRpcj0iJHtlYXIuYnVpbGQuZGlyfSIgLz4KQEAgLTY2LDExICs2NiwxMSBAQAogICAgICAgICA8L2phdmFjPgogCiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZSIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgICAgICA8Y29weSBmaWxlPSIuLi9lYXIvZGVzY3JpcHRvci93ZWIueG1sIiB0b2Rpcj0iJHt3ZWIuYnVpbGQuZGlyfS9XRUItSU5GIi8+Ci0gICAgICAgICAgICA8Y29weSBmaWxlPSIuLi9lYXIvZGVzY3JpcHRvci9zdW4td2ViLnhtbCIgCi0gICAgICAgICAgICAgICAgICB0b2Rpcj0iJHt3ZWIuYnVpbGQuZGlyfS9XRUItSU5GIiAKKyAgICAgICAgICAgIDxjb3B5IGZpbGU9Ii4uL2Vhci9kZXNjcmlwdG9yL3N1bi13ZWIueG1sIgorICAgICAgICAgICAgICAgICAgdG9kaXI9IiR7d2ViLmJ1aWxkLmRpcn0vV0VCLUlORiIKICAgICAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICAgICAgICAgICAgIDxjb3B5IHRvZGlyPSIke3dlYi5idWlsZC5kaXJ9Ij4KICAgICAgICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLi4vZWFyL3dhciIgaW5jbHVkZXM9IiouanNwLCAqLmh0bWwiLz4KQEAgLTc5LDE4ICs3OSwxOCBAQAogICAgICAgICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuLi9lYXIvd2FyIiBpbmNsdWRlcz0iKnByb3BlcnRpZXMiLz4KICAgICAgICAgICAgICA8L2NvcHk+CiAgICAgICAgICAgICAgPG1rZGlyIGRpcj0iJHtlamIuYnVpbGQuZGlyfS9NRVRBLUlORiIvPgotICAgICAgICAgICAgIDxjb3B5IGZpbGU9Ii4uL2Vhci9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIiAKKyAgICAgICAgICAgICA8Y29weSBmaWxlPSIuLi9lYXIvZGVzY3JpcHRvci9lamItamFyLnhtbCIKICAgICAgICAgICAgICAgICAgICB0b2Rpcj0iJHtlamIuYnVpbGQuZGlyfS9NRVRBLUlORiIvPgotICAgICAgICAgICAgIDxjb3B5IGZpbGU9Ii4uL2Vhci9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIgCi0gICAgICAgICAgICAgICAgICAgdG9kaXI9IiR7ZWpiLmJ1aWxkLmRpcn0vTUVUQS1JTkYiIAorICAgICAgICAgICAgIDxjb3B5IGZpbGU9Ii4uL2Vhci9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIKKyAgICAgICAgICAgICAgICAgICB0b2Rpcj0iJHtlamIuYnVpbGQuZGlyfS9NRVRBLUlORiIKICAgICAgICAgICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICAgICAgICAgICA8bWtkaXIgZGlyPSIke2Vhci5idWlsZC5kaXJ9L01FVEEtSU5GIi8+CiAKICAgICAgICAgICAgICA8IS0tIGFwcGxpY2F0aW9uLnhtbCBpcyBvcHRpb25hbAotICAgICAgICAgICAgIDxjb3B5IGZpbGU9Ii4uL2Vhci9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIgCisgICAgICAgICAgICAgPGNvcHkgZmlsZT0iLi4vZWFyL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIgogICAgICAgICAgICAgICAgICAgIHRvZGlyPSIke2Vhci5idWlsZC5kaXJ9L01FVEEtSU5GIi8+CiAgICAgICAgICAgICAgLS0+Ci0gICAgICAgICAgICAgPGNvcHkgZmlsZT0iLi4vZWFyL2Rlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIgCisgICAgICAgICAgICAgPGNvcHkgZmlsZT0iLi4vZWFyL2Rlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIKICAgICAgICAgICAgICAgICAgICB0b2Rpcj0iJHtlYXIuYnVpbGQuZGlyfS9NRVRBLUlORiIKICAgICAgICAgICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICA8L3RhcmdldD4KQEAgLTExNyw3ICsxMTcsNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0icnVuLnBvc2l0aXZlIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4ucG9zaXRpdmUiIGRlcGVuZHM9InNldEh0dHBQb3J0Ij4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9InVybCIgdmFsdWU9Imh0dHA6Ly8ke2h0dHAuaG9zdH06JHtkZXBsdGVzdC5wb3J0fS8ke2NvbnRleHRSb290fSIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudCI+CkBAIC0xMjUsNyArMTI1LDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJsb2cuaWQiIHZhbHVlPSIke2xvZy5pZH0iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuLm5lZ2F0aXZlIiBkZXBlbmRzPSJzZXRIdHRwUG9ydCI+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1cmwiIHZhbHVlPSJodHRwOi8vJHtodHRwLmhvc3R9OiR7ZGVwbHRlc3QucG9ydH0vJHtjb250ZXh0Um9vdH0vJHt0ZXN0TmFtZX0iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQiPgpAQCAtMTMzLDcgKzEzMyw3IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ibG9nLmlkIiB2YWx1ZT0iJHtsb2cuaWR9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bmNsaWVudCIgZGVwZW5kcz0iaW5pdCI+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IlRlc3RDbGllbnQgJHthcmcubGlzdH0iLz4KICAgICAgICAgPGphdmFXaXRoUmVzdWx0CkBAIC0xNDUsMjEgKzE0NSwyMSBAQAogICAgICAgICAgICAgcmVzdWx0cHJvcGVydHk9InJlc3VsdCI+CiAgICAgICAgICAgICA8anZtYXJnIHZhbHVlPSItRG9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbEhvc3Q9JHtodHRwLmhvc3R9Ii8+CiAgICAgICAgICAgICA8anZtYXJnIHZhbHVlPSItRG9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQ9JHtvcmIucG9ydH0iLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICA8Y2xhc3NwYXRoPiAgICAgICAgICAgICAgICAKKworICAgICAgICAgICAgPGNsYXNzcGF0aD4KICAgICAgICAgICAgICAgICA8cGF0aCByZWZpZD0iZ2Z2My5jbGFzc3BhdGgiLz4KICAgICAgICAgICAgICAgICA8cGF0aCBsb2NhdGlvbj0iJHtjbGllbnQuYnVpbGQuZGlyfSIvPgogICAgICAgICAgICAgPC9jbGFzc3BhdGg+CiAKICAgICAgICAgICAgIDxhcmcgbGluZT0iJHthcmcubGlzdH0iLz4KICAgICAgICAgPC9qYXZhV2l0aFJlc3VsdD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwcm9jZXNzUmVzdWx0Ij4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJyZXN1bHQiIHZhbHVlPSIke3Jlc3VsdH0iLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJsb2ciIHZhbHVlPSIke2J1aWxkfS8ke2xvZy5pZH0ub3V0cHV0LmxvZyIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNzZW1ibGUiLz4KICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlY2xhcmUtdGVzdCI+CkBAIC0xNjcsNyArMTY3LDcgQEAKICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveWRpci5hc2FkbWluIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLnBvc2l0aXZlIj48cGFyYW0gbmFtZT0ibG9nLmlkIiB2YWx1ZT0iMSIvPjwvYW50Y2FsbD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWNsYXJlLXRlc3QiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImRlc2NyaXB0aW9uIiB2YWx1ZT0iZGlyZWN0b3J5ZGVwbG95L2VhcldpdGhTdWZmaXggVGVzdCBhc2FkbWluIHJlZGVwbG95ZGlyIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KQEAgLTE4NCw1ICsxODQsNSBAQAogICAgICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZH0iLz4KICAgICA8L3RhcmdldD4KIAotICAgIAorCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RpcmVjdG9yeWRlcGxveS9lamIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kaXJlY3RvcnlkZXBsb3kvZWpiL2J1aWxkLnhtbAppbmRleCBkOGNkNWM1Li5lZjQ3MjE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RpcmVjdG9yeWRlcGxveS9lamIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGlyZWN0b3J5ZGVwbG95L2VqYi9idWlsZC54bWwKQEAgLTIyLDE5ICsyMiwxOSBAQAogXT4KIAogPCEtLQotICBUZXN0IGRpcmVjdG9yeSBkZXBsb3ltZW50IGZvciBlamIgd2l0aCBkaXJlY3Rvcnkgc3RydWN0dXJlIHN1Y2ggCisgIFRlc3QgZGlyZWN0b3J5IGRlcGxveW1lbnQgZm9yIGVqYiB3aXRoIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgc3VjaAogICBhcyBiYXIKIC0tPgotIAorCiA8cHJvamVjdCBuYW1lPSJkaXJlY3RvcnlEZXBsb3ktRWpiIiBkZWZhdWx0PSJhbGwiIGJhc2VkaXI9Ii4iPgogCi0gCSZjb21tb25CdWlsZDsKKyAgICAgJmNvbW1vbkJ1aWxkOwogCiAgICAgPHByb3BlcnR5IG5hbWU9InRlc3ROYW1lIiB2YWx1ZT0iZGlyRGVwbG95RWpiIi8+Ci0gICAgPHByb3BlcnR5IG5hbWU9ImVqYi5idWlsZC5kaXIiIAorICAgIDxwcm9wZXJ0eSBuYW1lPSJlamIuYnVpbGQuZGlyIgogICAgICAgICAgICAgICB2YWx1ZT0iJHtidWlsZH0vJHt0ZXN0TmFtZX0iLz4KICAgICA8cHJvcGVydHkgbmFtZT0iY2xpZW50LmJ1aWxkLmRpciIgdmFsdWU9IiR7YnVpbGR9L2NsaWVudCIvPgotICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icHJlcGFyZSIgZGVwZW5kcz0iaW5pdCI+CiAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZH0iIC8+CiAgICAgICAgPG1rZGlyIGRpcj0iJHtlamIuYnVpbGQuZGlyfSIgLz4KQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICAgIDwvamF2YWM+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZSIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgICAgICAgPG1rZGlyIGRpcj0iJHtlamIuYnVpbGQuZGlyfS9NRVRBLUlORiIvPgogICAgICAgICAgICAgIDxjb3B5IGZpbGU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiCkBAIC03Nyw3ICs3Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgdmFsdWU9Ii0tbmFtZSAke3Rlc3ROYW1lfSAtLXJldHJpZXZlICR7Y2xpZW50LmJ1aWxkLmRpcn0gJHtidWlsZH0vJHt0ZXN0TmFtZX0iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kuYXNhZG1pbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tbW9uLnVuZGVwbG95LmFzYWRtaW4iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IgpAQCAtOTQsNyArOTQsNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InRndFBvcnQiIHZhbHVlPSIke2RlcGx0ZXN0Lm9yYnBvcnR9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi5uZWdhdGl2ZSIgZGVwZW5kcz0iaW5pdCxzZXRPcmJQb3J0Ij4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IiB2YWx1ZT0iZmFsc2UiLz4KQEAgLTExMSwyNyArMTExLDI3IEBACiAgICAgICAgICAgICBjbGFzc25hbWU9InN0YW5kYWxvbmVjbGllbnQuSGVsbG9DbGllbnQiCiAgICAgICAgICAgICBvdXRwdXQ9IiR7YnVpbGR9LyR7bG9nLmlkfS5vdXRwdXQubG9nIgogICAgICAgICAgICAgcmVzdWx0cHJvcGVydHk9InJlc3VsdCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICA8anZtYXJnIHZhbHVlPSItRG9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbEhvc3Q9JHtodHRwLmhvc3R9Ii8+CiAgICAgICAgICAgICA8anZtYXJnIHZhbHVlPSItRG9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQ9JHt0Z3RQb3J0fSIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgPGNsYXNzcGF0aD4KICAgICAgICAgICAgICAgICA8cGF0aCByZWZpZD0iZ2Z2My5jbGFzc3BhdGgiLz4KICAgICAgICAgICAgICAgICA8cGF0aCBsb2NhdGlvbj0iJHtlamIuYnVpbGQuZGlyfSIvPgogICAgICAgICAgICAgICAgIDxwYXRoIGxvY2F0aW9uPSIke2NsaWVudC5idWlsZC5kaXJ9Ii8+CiAgICAgICAgICAgICAgICAgPHBhdGggbG9jYXRpb249IiR7Y2xpZW50LmJ1aWxkLmRpcn0vZGlyRGVwbG95RWpiQ2xpZW50LmphciIvPgogICAgICAgICAgICAgPC9jbGFzc3BhdGg+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICA8YXJnIGxpbmU9IiR7YXJnLmxpc3R9Ii8+CiAgICAgICAgIDwvamF2YVdpdGhSZXN1bHQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icHJvY2Vzc1Jlc3VsdCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0icmVzdWx0IiB2YWx1ZT0iJHtyZXN1bHR9Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ibG9nIiB2YWx1ZT0iJHtidWlsZH0vJHtsb2cuaWR9Lm91dHB1dC5sb2ciLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8L3RhcmdldD4KIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icHJpdmF0ZS1hbGwiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzc2VtYmxlIi8+CiAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWNsYXJlLXRlc3QiPgpAQCAtMTYxLDUgKzE2MSw1IEBACiAgICAgICAgIDxkZWxldGUgZGlyPSIke2J1aWxkfSIvPgogICAgIDwvdGFyZ2V0PgogCi0gICAgCisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGlyZWN0b3J5ZGVwbG95L2VqYi9lamIvU3RhdGVsZXNzaGVsbG9FSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGlyZWN0b3J5ZGVwbG95L2VqYi9lamIvU3RhdGVsZXNzaGVsbG9FSkIuamF2YQppbmRleCBmNGI2MTFkLi5lYzNmNjlhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RpcmVjdG9yeWRlcGxveS9lamIvZWpiL1N0YXRlbGVzc2hlbGxvRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kaXJlY3RvcnlkZXBsb3kvZWpiL2VqYi9TdGF0ZWxlc3NoZWxsb0VKQi5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIGltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKIGltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsgCitpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25CZWFuOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0OwogaW1wb3J0IGpha2FydGEuZWpiLkVKQkV4Y2VwdGlvbjsKQEAgLTI2LDExICsyNiwxMSBAQAogCiBwdWJsaWMgY2xhc3MgU3RhdGVsZXNzaGVsbG9FSkIgaW1wbGVtZW50cyBTZXNzaW9uQmVhbiB7CiAgICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBzYzsKLSAgICAKKwogICAgIHB1YmxpYyBTdGF0ZWxlc3NoZWxsb0VKQigpe30KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gZWpiQ3JlYXRlICEhIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBlamJDcmVhdGUgISEiKTsKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiBpc1N0YXRlbGVzc2hlbGxvKCkgdGhyb3dzIEVKQkV4Y2VwdGlvbiB7CkBAIC01Miw0NyArNTIsNDcgQEAKIAogCiAKLQlEb3VibGUgZCA9IG51bGw7Ci0JU3RyaW5nIG5hbWUgPSBudWxsOwotCVN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCJTdGF0ZWxlc3NoZWxsbyBFSkIgLSBjaGVja2VkIGVudmlyb25tZW50IHByb3BlcnRpZXMgZm9yIHVzZXIgIik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZWxlc3NoZWxsb0VKQiBpcyBzYXlpbmcgaGVsbG8gdG8gdXNlclxuIik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJOb3cgZ29pbmcgZm9yd2FyZCB3aXRoIHJlYWRpbmcgdGhlIGVudmlyb25tZW50IHByb3BlcnRpZXNcbiIpOworICAgIERvdWJsZSBkID0gbnVsbDsKKyAgICBTdHJpbmcgbmFtZSA9IG51bGw7CisgICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoIlN0YXRlbGVzc2hlbGxvIEVKQiAtIGNoZWNrZWQgZW52aXJvbm1lbnQgcHJvcGVydGllcyBmb3IgdXNlciAiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlbGVzc2hlbGxvRUpCIGlzIHNheWluZyBoZWxsbyB0byB1c2VyXG4iKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk5vdyBnb2luZyBmb3J3YXJkIHdpdGggcmVhZGluZyB0aGUgZW52aXJvbm1lbnQgcHJvcGVydGllc1xuIik7CiAKLQl0cnkgewotCSAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCSAgICBuYW1lID0gKFN0cmluZykgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3VzZXIiKTsKLQkgICAgYnVmZmVyLmFwcGVuZChuYW1lKTsKLQkgICAgYnVmZmVyLmFwcGVuZCgiXG5hbmQgZm9yIG51bWJlciB3aGljaCBpcyA9ICIpOwotCSAgICBkID0gKERvdWJsZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L251bWJlciIpOwotCSAgICBidWZmZXIuYXBwZW5kKGQpOwotCSAgICBidWZmZXIuYXBwZW5kKCJcbiIpOwotCX0gY2F0Y2goTmFtaW5nRXhjZXB0aW9uIGUpIHsKKyAgICB0cnkgeworICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgICAgICBuYW1lID0gKFN0cmluZykgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3VzZXIiKTsKKyAgICAgICAgYnVmZmVyLmFwcGVuZChuYW1lKTsKKyAgICAgICAgYnVmZmVyLmFwcGVuZCgiXG5hbmQgZm9yIG51bWJlciB3aGljaCBpcyA9ICIpOworICAgICAgICBkID0gKERvdWJsZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L251bWJlciIpOworICAgICAgICBidWZmZXIuYXBwZW5kKGQpOworICAgICAgICBidWZmZXIuYXBwZW5kKCJcbiIpOworICAgIH0gY2F0Y2goTmFtaW5nRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKLQl9Ci0JaWYoZCA9PSBudWxsKSB7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIldyb25nIHZhbHVlIGZvciBlbnZpcm9ubWVudCBwcm9wZXJ0eSIpOwotCX0KLQlTeXN0ZW0ub3V0LnByaW50bG4oYnVmZmVyKTsKKyAgICB9CisgICAgaWYoZCA9PSBudWxsKSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIldyb25nIHZhbHVlIGZvciBlbnZpcm9ubWVudCBwcm9wZXJ0eSIpOworICAgIH0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oYnVmZmVyKTsKICAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmcoYnVmZmVyKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldFVzZXJEZWZpbmVkRXhjZXB0aW9uKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiwgU3RhdGVsZXNzaGVsbG9FeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRocm93aW5nIGEgVXNlciBEZWZpbmVkIEV4Y2VwdGlvbiIpOwogICAgICAgICB0aHJvdyBuZXcgU3RhdGVsZXNzaGVsbG9FeGNlcHRpb24oInRlc3QgZXhjZXB0aW9uIik7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAotICAgIAorCisKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgewotCQorCiAgICAgICAgIHRoaXMuc2MgPSBzYzsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHt9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHt9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7fQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kaXJlY3RvcnlkZXBsb3kvZWpiL2VqYi9TdGF0ZWxlc3NoZWxsb0V4Y2VwdGlvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kaXJlY3RvcnlkZXBsb3kvZWpiL2VqYi9TdGF0ZWxlc3NoZWxsb0V4Y2VwdGlvbi5qYXZhCmluZGV4IDk0M2ViMzkuLmI4ODI1N2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGlyZWN0b3J5ZGVwbG95L2VqYi9lamIvU3RhdGVsZXNzaGVsbG9FeGNlcHRpb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RpcmVjdG9yeWRlcGxveS9lamIvZWpiL1N0YXRlbGVzc2hlbGxvRXhjZXB0aW9uLmphdmEKQEAgLTE5LDkgKzE5LDkgQEAKIGltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiAKIHB1YmxpYyBjbGFzcyBTdGF0ZWxlc3NoZWxsb0V4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbiB7Ci0gICAgCisKICAgICBwdWJsaWMgU3RhdGVsZXNzaGVsbG9FeGNlcHRpb24oU3RyaW5nIHN0cikgewotCXN1cGVyKHN0cik7CisgICAgc3VwZXIoc3RyKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGlyZWN0b3J5ZGVwbG95L2VqYndpdGhzdWZmaXgvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kaXJlY3RvcnlkZXBsb3kvZWpid2l0aHN1ZmZpeC9idWlsZC54bWwKaW5kZXggMDkzMTRiMi4uOTk5MjkyYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kaXJlY3RvcnlkZXBsb3kvZWpid2l0aHN1ZmZpeC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kaXJlY3RvcnlkZXBsb3kvZWpid2l0aHN1ZmZpeC9idWlsZC54bWwKQEAgLTIyLDE5ICsyMiwxOSBAQAogXT4KIAogPCEtLQotICBUZXN0IGRpcmVjdG9yeSBkZXBsb3ltZW50IGZvciBlamIgd2l0aCBkaXJlY3Rvcnkgc3RydWN0dXJlIHN1Y2ggCisgIFRlc3QgZGlyZWN0b3J5IGRlcGxveW1lbnQgZm9yIGVqYiB3aXRoIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgc3VjaAogICBhcyBiYXIuamFyCiAtLT4KLSAKKwogPHByb2plY3QgbmFtZT0iZGlyZWN0b3J5RGVwbG95LXdpdGhFamJTdWZmaXgiIGRlZmF1bHQ9ImFsbCIgYmFzZWRpcj0iLiI+CiAKLSAJJmNvbW1vbkJ1aWxkOworICAgICAmY29tbW9uQnVpbGQ7CiAKICAgICA8cHJvcGVydHkgbmFtZT0idGVzdE5hbWUiIHZhbHVlPSJkaXJEZXBsb3lXaXRoRWpiU3VmZml4Ii8+Ci0gICAgPHByb3BlcnR5IG5hbWU9ImVqYi5idWlsZC5kaXIiIAorICAgIDxwcm9wZXJ0eSBuYW1lPSJlamIuYnVpbGQuZGlyIgogICAgICAgICAgICAgICB2YWx1ZT0iJHtidWlsZH0vJHt0ZXN0TmFtZX0uamFyIi8+CiAgICAgPHByb3BlcnR5IG5hbWU9ImNsaWVudC5idWlsZC5kaXIiIHZhbHVlPSIke2J1aWxkfS9jbGllbnQiLz4KLSAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InByZXBhcmUiIGRlcGVuZHM9ImluaXQiPgogICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGR9IiAvPgogICAgICAgIDxta2RpciBkaXI9IiR7ZWpiLmJ1aWxkLmRpcn0iIC8+CkBAIC01NSw3ICs1NSw3IEBACiAgICAgICAgICAgPC9qYXZhYz4KIAogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICAgICAgIDxta2RpciBkaXI9IiR7ZWpiLmJ1aWxkLmRpcn0vTUVUQS1JTkYiLz4KICAgICAgICAgICAgICA8Y29weSBmaWxlPSIuLi9lamIvZGVzY3JpcHRvci9lamItamFyLnhtbCIKQEAgLTk1LDcgKzk1LDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ0Z3RQb3J0IiB2YWx1ZT0iJHtkZXBsdGVzdC5vcmJwb3J0fSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4ubmVnYXRpdmUiIGRlcGVuZHM9ImluaXQsc2V0T3JiUG9ydCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50Ij4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIgdmFsdWU9ImZhbHNlIi8+CkBAIC0xMTIsMjcgKzExMiwyNyBAQAogICAgICAgICAgICAgY2xhc3NuYW1lPSJzdGFuZGFsb25lY2xpZW50LkhlbGxvQ2xpZW50IgogICAgICAgICAgICAgb3V0cHV0PSIke2J1aWxkfS8ke2xvZy5pZH0ub3V0cHV0LmxvZyIKICAgICAgICAgICAgIHJlc3VsdHByb3BlcnR5PSJyZXN1bHQiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgPGp2bWFyZyB2YWx1ZT0iLURvcmcub21nLkNPUkJBLk9SQkluaXRpYWxIb3N0PSR7aHR0cC5ob3N0fSIvPgogICAgICAgICAgICAgPGp2bWFyZyB2YWx1ZT0iLURvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0PSR7dGd0UG9ydH0iLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIDxjbGFzc3BhdGg+CiAgICAgICAgICAgICAgICAgPHBhdGggcmVmaWQ9ImdmdjMuY2xhc3NwYXRoIi8+CiAgICAgICAgICAgICAgICAgPHBhdGggbG9jYXRpb249IiR7ZWpiLmJ1aWxkLmRpcn0iLz4KICAgICAgICAgICAgICAgICA8cGF0aCBsb2NhdGlvbj0iJHtjbGllbnQuYnVpbGQuZGlyfSIvPgogICAgICAgICAgICAgICAgIDxwYXRoIGxvY2F0aW9uPSIke2NsaWVudC5idWlsZC5kaXJ9L2RpckRlcGxveVdpdGhFamJTdWZmaXhDbGllbnQuamFyIi8+CiAgICAgICAgICAgICA8L2NsYXNzcGF0aD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIDxhcmcgbGluZT0iJHthcmcubGlzdH0iLz4KICAgICAgICAgPC9qYXZhV2l0aFJlc3VsdD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwcm9jZXNzUmVzdWx0Ij4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJyZXN1bHQiIHZhbHVlPSIke3Jlc3VsdH0iLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJsb2ciIHZhbHVlPSIke2J1aWxkfS8ke2xvZy5pZH0ub3V0cHV0LmxvZyIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDwvdGFyZ2V0PgogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNzZW1ibGUiLz4KICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlY2xhcmUtdGVzdCI+CkBAIC0xNjIsNSArMTYyLDUgQEAKICAgICAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGR9Ii8+CiAgICAgPC90YXJnZXQ+CiAKLSAgICAKKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kaXJlY3RvcnlkZXBsb3kvd2FyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGlyZWN0b3J5ZGVwbG95L3dhci9idWlsZC54bWwKaW5kZXggNWNlZjEwZS4uMmZlY2E2NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kaXJlY3RvcnlkZXBsb3kvd2FyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RpcmVjdG9yeWRlcGxveS93YXIvYnVpbGQueG1sCkBAIC0yMiwyMCArMjIsMjAgQEAKIF0+CiAKIDwhLS0KLSAgVGVzdCBkaXJlY3RvcnkgZGVwbG95bWVudCBmb3Igd2FyIHdpdGggZGlyZWN0b3J5IHN0cnVjdHVyZSBzdWNoIAorICBUZXN0IGRpcmVjdG9yeSBkZXBsb3ltZW50IGZvciB3YXIgd2l0aCBkaXJlY3Rvcnkgc3RydWN0dXJlIHN1Y2gKICAgYXMgYmFyCiAtLT4KLSAKKwogPHByb2plY3QgbmFtZT0iZGlyZWN0b3J5RGVwbG95LVdhciIgZGVmYXVsdD0iYWxsIiBiYXNlZGlyPSIuIj4KIAotIAkmY29tbW9uQnVpbGQ7CisgICAgICZjb21tb25CdWlsZDsKIAogICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0TmFtZSIgdmFsdWU9ImRpckRlcGxveVdhciIvPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0Um9vdCIgdmFsdWU9ImZvbyIvPgotICAgIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIuYnVpbGQuZGlyIiAKKyAgICA8cHJvcGVydHkgbmFtZT0id2ViLmJ1aWxkLmRpciIKICAgICAgICAgICAgICAgdmFsdWU9IiR7YnVpbGR9LyR7dGVzdE5hbWV9Ii8+CiAgICAgPHByb3BlcnR5IG5hbWU9ImNsaWVudC5idWlsZC5kaXIiIHZhbHVlPSIke2J1aWxkfS9jbGllbnQiLz4KLSAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InByZXBhcmUiIGRlcGVuZHM9ImluaXQiPgogICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGR9IiAvPgogICAgICAgIDxta2RpciBkaXI9IiR7d2ViLmJ1aWxkLmRpcn0iIC8+CkBAIC01NiwxMSArNTYsMTEgQEAKICAgICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICAgIDwvamF2YWM+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZSIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgICAgICA8Y29weSBmaWxlPSJkZXNjcmlwdG9yL3dlYi54bWwiIHRvZGlyPSIke3dlYi5idWlsZC5kaXJ9L1dFQi1JTkYiLz4KLSAgICAgICAgICAgIDxjb3B5IGZpbGU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiIAotICAgICAgICAgICAgICAgICAgdG9kaXI9IiR7d2ViLmJ1aWxkLmRpcn0vV0VCLUlORiIgCisgICAgICAgICAgICA8Y29weSBmaWxlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIgorICAgICAgICAgICAgICAgICAgdG9kaXI9IiR7d2ViLmJ1aWxkLmRpcn0vV0VCLUlORiIKICAgICAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICAgIDwvdGFyZ2V0PgogCkBAIC03Nyw3ICs3Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgdmFsdWU9Ii0tbmFtZSAke3Rlc3ROYW1lfSAke2J1aWxkfS8ke3Rlc3ROYW1lfSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveS5hc2FkbWluIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21tb24udW5kZXBsb3kuYXNhZG1pbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiCkBAIC04Niw3ICs4Niw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJydW4ucG9zaXRpdmUiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi5wb3NpdGl2ZSIgZGVwZW5kcz0ic2V0SHR0cFBvcnQiPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0idXJsIiB2YWx1ZT0iaHR0cDovLyR7aHR0cC5ob3N0fToke2RlcGx0ZXN0LnBvcnR9LyR7Y29udGV4dFJvb3R9L3NlcnZsZXRvbmx5Ii8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50Ij4KQEAgLTk0LDcgKzk0LDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJsb2cuaWQiIHZhbHVlPSIke2xvZy5pZH0iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuLm5lZ2F0aXZlIiBkZXBlbmRzPSJzZXRIdHRwUG9ydCI+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1cmwiIHZhbHVlPSJodHRwOi8vJHtodHRwLmhvc3R9OiR7ZGVwbHRlc3QucG9ydH0vJHtjb250ZXh0Um9vdH0vJHt0ZXN0TmFtZX0iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQiPgpAQCAtMTAyLDcgKzEwMiw3IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ibG9nLmlkIiB2YWx1ZT0iJHtsb2cuaWR9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bmNsaWVudCIgZGVwZW5kcz0iaW5pdCI+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IlRlc3RDbGllbnQgJHthcmcubGlzdH0iLz4KICAgICAgICAgPGphdmFXaXRoUmVzdWx0CkBAIC0xMTQsMjEgKzExNCwyMSBAQAogICAgICAgICAgICAgcmVzdWx0cHJvcGVydHk9InJlc3VsdCI+CiAgICAgICAgICAgICA8anZtYXJnIHZhbHVlPSItRG9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbEhvc3Q9JHtodHRwLmhvc3R9Ii8+CiAgICAgICAgICAgICA8anZtYXJnIHZhbHVlPSItRG9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQ9JHtvcmIucG9ydH0iLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIDxjbGFzc3BhdGg+CiAgICAgICAgICAgICAgICAgPHBhdGggcmVmaWQ9ImdmdjMuY2xhc3NwYXRoIi8+CiAgICAgICAgICAgICAgICAgPHBhdGggbG9jYXRpb249IiR7Y2xpZW50LmJ1aWxkLmRpcn0iLz4KICAgICAgICAgICAgIDwvY2xhc3NwYXRoPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgPGFyZyBsaW5lPSIke2FyZy5saXN0fSIvPgogICAgICAgICA8L2phdmFXaXRoUmVzdWx0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InByb2Nlc3NSZXN1bHQiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InJlc3VsdCIgdmFsdWU9IiR7cmVzdWx0fSIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImxvZyIgdmFsdWU9IiR7YnVpbGR9LyR7bG9nLmlkfS5vdXRwdXQubG9nIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc3NlbWJsZSIvPgogICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVjbGFyZS10ZXN0Ij4KQEAgLTEzNiw3ICsxMzYsNyBAQAogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95ZGlyLmFzYWRtaW4iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4ucG9zaXRpdmUiPjxwYXJhbSBuYW1lPSJsb2cuaWQiIHZhbHVlPSIxIi8+PC9hbnRjYWxsPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlY2xhcmUtdGVzdCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZGVzY3JpcHRpb24iIHZhbHVlPSJkaXJlY3RvcnlkZXBsb3kvd2FyIFRlc3QgYXNhZG1pbiByZWRlcGxveWRpciIvPgogICAgICAgICA8L2FudGNhbGw+CkBAIC0xNTMsNSArMTUzLDUgQEAKICAgICAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGR9Ii8+CiAgICAgPC90YXJnZXQ+CiAKLSAgICAKKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kaXJlY3RvcnlkZXBsb3kvd2FyL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZGlyZWN0b3J5ZGVwbG95L3dhci9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggZDkzMjFlZi4uNmFmNmI0ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kaXJlY3RvcnlkZXBsb3kvd2FyL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RpcmVjdG9yeWRlcGxveS93YXIvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0xOCw4ICsxOCw4IEBACiAtLT4KIAogPHdlYi1hcHAgdmVyc2lvbj0iMi40IgotICAgICAgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiIAotICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCisgICAgICAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIKKyAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiPgogICA8ZGlzcGxheS1uYW1lPnNlcnZsZXRvbmx5PC9kaXNwbGF5LW5hbWU+CiAgIDxzZXJ2bGV0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kaXJlY3RvcnlkZXBsb3kvd2Fyd2l0aHN1ZmZpeC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RpcmVjdG9yeWRlcGxveS93YXJ3aXRoc3VmZml4L2J1aWxkLnhtbAppbmRleCA5YWFkN2Q0Li42NTE3ODJhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RpcmVjdG9yeWRlcGxveS93YXJ3aXRoc3VmZml4L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RpcmVjdG9yeWRlcGxveS93YXJ3aXRoc3VmZml4L2J1aWxkLnhtbApAQCAtMjIsMjAgKzIyLDIwIEBACiBdPgogCiA8IS0tCi0gIFRlc3QgZGlyZWN0b3J5IGRlcGxveW1lbnQgZm9yIHdhciB3aXRoIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgc3VjaCAKKyAgVGVzdCBkaXJlY3RvcnkgZGVwbG95bWVudCBmb3Igd2FyIHdpdGggZGlyZWN0b3J5IHN0cnVjdHVyZSBzdWNoCiAgIGFzIGJhci53YXIKIC0tPgotIAorCiA8cHJvamVjdCBuYW1lPSJkaXJlY3RvcnlEZXBsb3ktd2l0aFdhclN1ZmZpeCIgZGVmYXVsdD0iYWxsIiBiYXNlZGlyPSIuIj4KIAotIAkmY29tbW9uQnVpbGQ7CisgICAgICZjb21tb25CdWlsZDsKIAogICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0TmFtZSIgdmFsdWU9ImRpckRlcGxveVdpdGhXYXJTdWZmaXgiLz4KICAgICA8cHJvcGVydHkgbmFtZT0iY29udGV4dFJvb3QiIHZhbHVlPSJmb28iLz4KLSAgICA8cHJvcGVydHkgbmFtZT0id2ViLmJ1aWxkLmRpciIgCisgICAgPHByb3BlcnR5IG5hbWU9IndlYi5idWlsZC5kaXIiCiAgICAgICAgICAgICAgIHZhbHVlPSIke2J1aWxkfS8ke3Rlc3ROYW1lfS53YXIiLz4KICAgICA8cHJvcGVydHkgbmFtZT0iY2xpZW50LmJ1aWxkLmRpciIgdmFsdWU9IiR7YnVpbGR9L2NsaWVudCIvPgotICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icHJlcGFyZSIgZGVwZW5kcz0iaW5pdCI+CiAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZH0iIC8+CiAgICAgICAgPG1rZGlyIGRpcj0iJHt3ZWIuYnVpbGQuZGlyfSIgLz4KQEAgLTU2LDExICs1NiwxMSBAQAogICAgICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgICAgPC9qYXZhYz4KICAgICA8L3RhcmdldD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgICAgIDxjb3B5IGZpbGU9Ii4uL3dhci9kZXNjcmlwdG9yL3dlYi54bWwiIHRvZGlyPSIke3dlYi5idWlsZC5kaXJ9L1dFQi1JTkYiLz4KLSAgICAgICAgICAgIDxjb3B5IGZpbGU9Ii4uL3dhci9kZXNjcmlwdG9yL3N1bi13ZWIueG1sIiAKLSAgICAgICAgICAgICAgICAgIHRvZGlyPSIke3dlYi5idWlsZC5kaXJ9L1dFQi1JTkYiIAorICAgICAgICAgICAgPGNvcHkgZmlsZT0iLi4vd2FyL2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwiCisgICAgICAgICAgICAgICAgICB0b2Rpcj0iJHt3ZWIuYnVpbGQuZGlyfS9XRUItSU5GIgogICAgICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgICAgPC90YXJnZXQ+CiAKQEAgLTg2LDcgKzg2LDcgQEAKICAgICA8L3RhcmdldD4KIAogICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9InJ1bi5wb3NpdGl2ZSIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuLnBvc2l0aXZlIiBkZXBlbmRzPSJzZXRIdHRwUG9ydCI+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1cmwiIHZhbHVlPSJodHRwOi8vJHtodHRwLmhvc3R9OiR7ZGVwbHRlc3QucG9ydH0vJHtjb250ZXh0Um9vdH0vc2VydmxldG9ubHkiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQiPgpAQCAtOTQsNyArOTQsNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImxvZy5pZCIgdmFsdWU9IiR7bG9nLmlkfSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4ubmVnYXRpdmUiIGRlcGVuZHM9InNldEh0dHBQb3J0Ij4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9InVybCIgdmFsdWU9Imh0dHA6Ly8ke2h0dHAuaG9zdH06JHtkZXBsdGVzdC5wb3J0fS8ke2NvbnRleHRSb290fS8ke3Rlc3ROYW1lfSIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudCI+CkBAIC0xMDIsNyArMTAyLDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJsb2cuaWQiIHZhbHVlPSIke2xvZy5pZH0iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuY2xpZW50IiBkZXBlbmRzPSJpbml0Ij4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iVGVzdENsaWVudCAke2FyZy5saXN0fSIvPgogICAgICAgICA8amF2YVdpdGhSZXN1bHQKQEAgLTExNCwyMSArMTE0LDIxIEBACiAgICAgICAgICAgICByZXN1bHRwcm9wZXJ0eT0icmVzdWx0Ij4KICAgICAgICAgICAgIDxqdm1hcmcgdmFsdWU9Ii1Eb3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsSG9zdD0ke2h0dHAuaG9zdH0iLz4KICAgICAgICAgICAgIDxqdm1hcmcgdmFsdWU9Ii1Eb3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydD0ke29yYi5wb3J0fSIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgPGNsYXNzcGF0aD4KICAgICAgICAgICAgICAgICAgPHBhdGggcmVmaWQ9ImdmdjMuY2xhc3NwYXRoIi8+CiAgICAgICAgICAgICAgICAgPHBhdGggbG9jYXRpb249IiR7Y2xpZW50LmJ1aWxkLmRpcn0iLz4KICAgICAgICAgICAgIDwvY2xhc3NwYXRoPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgPGFyZyBsaW5lPSIke2FyZy5saXN0fSIvPgogICAgICAgICA8L2phdmFXaXRoUmVzdWx0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InByb2Nlc3NSZXN1bHQiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InJlc3VsdCIgdmFsdWU9IiR7cmVzdWx0fSIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImxvZyIgdmFsdWU9IiR7YnVpbGR9LyR7bG9nLmlkfS5vdXRwdXQubG9nIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc3NlbWJsZSIvPgogICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVjbGFyZS10ZXN0Ij4KQEAgLTEzNiw3ICsxMzYsNyBAQAogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95ZGlyLmFzYWRtaW4iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4ucG9zaXRpdmUiPjxwYXJhbSBuYW1lPSJsb2cuaWQiIHZhbHVlPSIxIi8+PC9hbnRjYWxsPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlY2xhcmUtdGVzdCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZGVzY3JpcHRpb24iIHZhbHVlPSJkaXJlY3RvcnlkZXBsb3kvd2FyV2l0aFN1ZmZpeCBUZXN0IGFzYWRtaW4gcmVkZXBsb3lkaXIiLz4KICAgICAgICAgPC9hbnRjYWxsPgpAQCAtMTUzLDUgKzE1Myw1IEBACiAgICAgICAgIDxkZWxldGUgZGlyPSIke2J1aWxkfSIvPgogICAgIDwvdGFyZ2V0PgogCi0gICAgCisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZG9sL292ZXJyaWRlL092ZXJyaWRlVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kb2wvb3ZlcnJpZGUvT3ZlcnJpZGVUZXN0LmphdmEKaW5kZXggMDY2ZjdmMC4uZjgyNzkxMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kb2wvb3ZlcnJpZGUvT3ZlcnJpZGVUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kb2wvb3ZlcnJpZGUvT3ZlcnJpZGVUZXN0LmphdmEKQEAgLTczLDcgKzczLDcgQEAKICAgICAgICAgQXJjaGl2aXN0IGFyY2hpdmlzdCA9IG51bGw7CiAKICAgICAgICAgUmVhZGFibGVBcmNoaXZlIGFyY2hpdmUgPSBudWxsOwotICAgICAgICAKKwogICAgICAgICAvLyBmaXJzdCByZWFkL3BhcnNlIGFuZCB3cml0ZSBvdXQgdGhlIG9yaWdpbmFsIHZhbGlkIGFyY2hpdmUKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIEZpbGUgYXJjaGl2ZUZpbGUgPSBuZXcgRmlsZShmaWxlTmFtZSk7CkBAIC04Niw4ICs4Niw4IEBACiAgICAgICAgICAgICBhcmNoaXZpc3Quc2V0QW5ub3RhdGlvblByb2Nlc3NpbmdSZXF1ZXN0ZWQodHJ1ZSk7CiAgICAgICAgICAgICBKbmRpTmFtZUVudmlyb25tZW50IG5hbWVFbnYgPSAoSm5kaU5hbWVFbnZpcm9ubWVudClhcmNoaXZpc3Qub3BlbihhcmNoaXZlRmlsZSk7CiAKLSAgICAgICAgICAgIFNldDxSZXNvdXJjZVJlZmVyZW5jZURlc2NyaXB0b3I+IHJlc1JlZkRlc2NzID0gbmFtZUVudi5nZXRSZXNvdXJjZVJlZmVyZW5jZURlc2NyaXB0b3JzKCk7IAotIAorICAgICAgICAgICAgU2V0PFJlc291cmNlUmVmZXJlbmNlRGVzY3JpcHRvcj4gcmVzUmVmRGVzY3MgPSBuYW1lRW52LmdldFJlc291cmNlUmVmZXJlbmNlRGVzY3JpcHRvcnMoKTsKKwogICAgICAgICAgICAgZm9yIChSZXNvdXJjZVJlZmVyZW5jZURlc2NyaXB0b3IgcmVzUmVmIDogcmVzUmVmRGVzY3MpIHsKICAgICAgICAgICAgICAgICBTdHJpbmcgcmVmTmFtZSA9IHJlc1JlZi5nZXROYW1lKCk7CiAgICAgICAgICAgICAgICAgU3RyaW5nIGpuZGlOYW1lID0gcmVzUmVmLmdldEpuZGlOYW1lKCk7CkBAIC05NywxMSArOTcsMTEgQEAKICAgICAgICAgICAgICAgICBTdHJpbmcgYXV0aCA9IHJlc1JlZi5nZXRBdXRob3JpemF0aW9uKCk7CiAgICAgICAgICAgICAgICAgU3RyaW5nIHNjb3BlID0gcmVzUmVmLmdldFNoYXJpbmdTY29wZSgpOwogICAgICAgICAgICAgICAgIGxvZyAoIlJlc291cmNlIHJlZiBbIiArIHJlZk5hbWUgKyAiXSB3aXRoIEpOREkgbmFtZTogIiArIGpuZGlOYW1lICsgIiwgZGVzY3JpcHRpb246ICIgKyBkZXNjcmlwdGlvbiArICIsIGF1dGhvcml6YXRpb246ICIgKyBhdXRoICsgIiwgc2hhcmluZyBzY29wZTogIiArIHNjb3BlICsgIiwgbWFwcGVkTmFtZTogIiArIG1hcHBlZE5hbWUgKyAiLCBsb29rdXBOYW1lOiAiICsgbG9va3VwTmFtZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHJlZk5hbWUuZXF1YWxzKCJteURTNyIpICYmIAorICAgICAgICAgICAgICAgIGlmIChyZWZOYW1lLmVxdWFscygibXlEUzciKSAmJgogICAgICAgICAgICAgICAgICAgICAhZGVzY3JpcHRpb24uZXF1YWxzKEVYUEVDVEVEX1JFU09VUkNFX0RFU0NSSVBUSU9OKSkgewogICAgICAgICAgICAgICAgICAgICBsb2coIkRlc2NyaXB0b3IgZGlkIG5vdCBvdmVycmlkZSB0aGUgQFJlc291cmNlIGRlc2NyaXB0aW9uIGF0dHJpYnV0ZSBhcyBleHBlY3RlZCIpOwogICAgICAgICAgICAgICAgICAgICBmYWlsKCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZWZOYW1lLmVxdWFscygibXlEUzVhbmQ2IikpIHsgCisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZWZOYW1lLmVxdWFscygibXlEUzVhbmQ2IikpIHsKICAgICAgICAgICAgICAgICAgICAgU2V0PEluamVjdGlvblRhcmdldD4gdGFyZ2V0cyA9IHJlc1JlZi5nZXRJbmplY3Rpb25UYXJnZXRzKCk7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoSW5qZWN0aW9uVGFyZ2V0IHRhcmdldCA6IHRhcmdldHMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCJUYXJnZXQgY2xhc3MgbmFtZTogIiArIHRhcmdldC5nZXRDbGFzc05hbWUoKSk7CkBAIC0xMTEsMjggKzExMSwyOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCJUaGUgYWRkaXRpb25hbCBpbmplY3Rpb24gdGFyZ2V0IHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRvciBpcyBub3QgdXNlZCBhcyBleHBlY3RlZCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZWZOYW1lLmVxdWFscygibXlEUzgiKSAmJiAKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlZk5hbWUuZXF1YWxzKCJteURTOCIpICYmCiAgICAgICAgICAgICAgICAgICAgICFtYXBwZWROYW1lLmVxdWFscyhFWFBFQ1RFRF9SRVNPVVJDRV9KTkRJX05BTUUpKSB7CiAgICAgICAgICAgICAgICAgICAgIGxvZygiRGVzY3JpcHRvciBkaWQgbm90IG92ZXJyaWRlIHRoZSBAUmVzb3VyY2UgbWFwcGVkLW5hbWUgYXR0cmlidXRlIGFzIGV4cGVjdGVkIik7CiAgICAgICAgICAgICAgICAgICAgIGZhaWwoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlZk5hbWUuZXF1YWxzKCJteURTNyIpICYmIAorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVmTmFtZS5lcXVhbHMoIm15RFM3IikgJiYKICAgICAgICAgICAgICAgICAgICAgIXNjb3BlLmVxdWFscyhFWFBFQ1RFRF9SRVNPVVJDRV9TSEFSSU5HX1NDT1BFKSkgewogICAgICAgICAgICAgICAgICAgICBsb2coIkRlc2NyaXB0b3IgZGlkIG5vdCBvdmVycmlkZSB0aGUgQFJlc291cmNlIHNoYXJpbmcgc2NvcGUgYXR0cmlidXRlIGFzIGV4cGVjdGVkIik7CiAgICAgICAgICAgICAgICAgICAgIGZhaWwoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlZk5hbWUuZXF1YWxzKCJteURTNyIpICYmIAorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVmTmFtZS5lcXVhbHMoIm15RFM3IikgJiYKICAgICAgICAgICAgICAgICAgICAgIWF1dGguZXF1YWxzKEVYUEVDVEVEX1JFU09VUkNFX0FVVEhPUklaQVRJT04pKSB7CiAgICAgICAgICAgICAgICAgICAgIGxvZygiRGVzY3JpcHRvciBkaWQgbm90IG92ZXJyaWRlIHRoZSBAUmVzb3VyY2UgYXV0aG9yaXphdGlvbiBhdHRyaWJ1dGUgYXMgZXhwZWN0ZWQiKTsKICAgICAgICAgICAgICAgICAgICAgZmFpbCgpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVmTmFtZS5lcXVhbHMoIm15RFM3IikgJiYgCisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZWZOYW1lLmVxdWFscygibXlEUzciKSAmJgogICAgICAgICAgICAgICAgICAgICAhbG9va3VwTmFtZS5lcXVhbHMoRVhQRUNURURfUkVTT1VSQ0VfSk5ESV9OQU1FKSkgewogICAgICAgICAgICAgICAgICAgICBsb2coIkRlc2NyaXB0b3IgZGlkIG5vdCBvdmVycmlkZSB0aGUgQFJlc291cmNlIGxvb2t1cCBuYW1lIGF0dHJpYnV0ZSBhcyBleHBlY3RlZCIpOwogICAgICAgICAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAKKwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgICAgIGxvZygiSW5wdXQgYXJjaGl2ZTogWyIgKyBmaWxlTmFtZSArIAorICAgICAgICAgICAgbG9nKCJJbnB1dCBhcmNoaXZlOiBbIiArIGZpbGVOYW1lICsKICAgICAgICAgICAgICAgICAiXSBpcyBub3QgdmFsaWQiKTsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgfSBmaW5hbGx5IHsKQEAgLTE3Myw3ICsxNzMsNyBAQAogICAgICAgICAgICAgU3RhcnR1cENvbnRleHQgc3RhcnR1cENvbnRleHQgPSBuZXcgU3RhcnR1cENvbnRleHQoKTsKIAogICAgICAgICAgICAgU2VydmljZUxvY2F0b3JVdGlsaXRpZXMuYWRkT25lQ29uc3RhbnQoc2VydmljZUxvY2F0b3IsIHN0YXJ0dXBDb250ZXh0KTsKLSAgICAgICAgICAgIFNlcnZpY2VMb2NhdG9yVXRpbGl0aWVzLmFkZE9uZUNvbnN0YW50KHNlcnZpY2VMb2NhdG9yLCAKKyAgICAgICAgICAgIFNlcnZpY2VMb2NhdG9yVXRpbGl0aWVzLmFkZE9uZUNvbnN0YW50KHNlcnZpY2VMb2NhdG9yLAogICAgICAgICAgICAgICAgIG5ldyBQcm9jZXNzRW52aXJvbm1lbnQoUHJvY2Vzc0Vudmlyb25tZW50LlByb2Nlc3NUeXBlLk90aGVyKSk7CiAKICAgICAgICAgICAgIEdsb2JhbHMuc2V0RGVmYXVsdEhhYml0YXQoc2VydmljZUxvY2F0b3IpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kb2wvb3ZlcnJpZGUvT3ZlcnJpZGVUZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kb2wvb3ZlcnJpZGUvT3ZlcnJpZGVUZXN0U2VydmxldC5qYXZhCmluZGV4IDU2YjM2YmEuLjRjODQzMmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZG9sL292ZXJyaWRlL092ZXJyaWRlVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RvbC9vdmVycmlkZS9PdmVycmlkZVRlc3RTZXJ2bGV0LmphdmEKQEAgLTc1LDYgKzc1LDYgQEAKIAogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiQ2Fubm90IGdldCBsb2dpbiB0aW1lb3V0OiAiICsgZXgpOwotICAgICAgICB9IAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kb2wvdmFsaWRhdGlvbi9WYWxpZGF0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZG9sL3ZhbGlkYXRpb24vVmFsaWRhdG9yLmphdmEKaW5kZXggNmFhZGExMC4uYzZjYWEzYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kb2wvdmFsaWRhdGlvbi9WYWxpZGF0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RvbC92YWxpZGF0aW9uL1ZhbGlkYXRvci5qYXZhCkBAIC02NSw3ICs2NSw3IEBACiAgICAgICAgIEFyY2hpdmlzdCBhcmNoaXZpc3QgPSBudWxsOwogCiAgICAgICAgIFJlYWRhYmxlQXJjaGl2ZSBhcmNoaXZlID0gbnVsbDsKLSAgICAgICAgCisKICAgICAgICAgLy8gZmlyc3QgcmVhZC9wYXJzZSBhbmQgd3JpdGUgb3V0IHRoZSBvcmlnaW5hbCB2YWxpZCBhcmNoaXZlCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBGaWxlIGFyY2hpdmVGaWxlID0gbmV3IEZpbGUoZmlsZU5hbWUpOwpAQCAtNzQsMTEgKzc0LDExIEBACiAgICAgICAgICAgICBhcmNoaXZpc3QgPSBhcmNoaXZpc3RGYWN0b3J5LmdldEFyY2hpdmlzdChhcmNoaXZlVHlwZSk7CiAgICAgICAgICAgICBhcmNoaXZpc3Quc2V0SGFuZGxlUnVudGltZUluZm8odHJ1ZSk7CiAgICAgICAgICAgICBhcmNoaXZpc3Quc2V0QXJjaGl2ZVVyaShmaWxlTmFtZSk7Ci0JICAgIGFyY2hpdmlzdC5zZXRYTUxWYWxpZGF0aW9uKHRydWUpOwotCSAgICBhcmNoaXZpc3Quc2V0WE1MVmFsaWRhdGlvbkxldmVsKCJmdWxsIik7CisgICAgICAgIGFyY2hpdmlzdC5zZXRYTUxWYWxpZGF0aW9uKHRydWUpOworICAgICAgICBhcmNoaXZpc3Quc2V0WE1MVmFsaWRhdGlvbkxldmVsKCJmdWxsIik7CiAgICAgICAgICAgICBhcmNoaXZpc3Quc2V0UnVudGltZVhNTFZhbGlkYXRpb24odHJ1ZSk7CiAgICAgICAgICAgICBhcmNoaXZpc3Quc2V0UnVudGltZVhNTFZhbGlkYXRpb25MZXZlbCgiZnVsbCIpOwotICAgICAgICAgICAgbG9nKCJSZWFkaW5nL3BhcnNpbmcgdGhlIG9yZ2luYWwgYXJjaGl2ZTogIiArIAorICAgICAgICAgICAgbG9nKCJSZWFkaW5nL3BhcnNpbmcgdGhlIG9yZ2luYWwgYXJjaGl2ZTogIiArCiAgICAgICAgICAgICAgICAgZmlsZU5hbWUpOwogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgRGVzY3JpcHRvciBkZXNjcmlwdG9yID0gYXJjaGl2aXN0Lm9wZW4oYXJjaGl2ZUZpbGUpOwpAQCAtODksMTIgKzg5LDEyIEBACiAgICAgICAgICAgICAgICAgdGhyb3cgZXg7CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxvZygiV3JpdGluZyBvdXQgdGhlIGFyY2hpdmUgdG86ICIgKyAKKyAgICAgICAgICAgIGxvZygiV3JpdGluZyBvdXQgdGhlIGFyY2hpdmUgdG86ICIgKwogICAgICAgICAgICAgICAgIG91dHB1dEZpbGVOYW1lKTsKICAgICAgICAgICAgIGFyY2hpdmlzdC53cml0ZShhcmNoaXZlLCBvdXRwdXRGaWxlTmFtZSk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAgICAgbG9nKCJJbnB1dCBhcmNoaXZlOiBbIiArIGZpbGVOYW1lICsgCisgICAgICAgICAgICBsb2coIklucHV0IGFyY2hpdmU6IFsiICsgZmlsZU5hbWUgKwogICAgICAgICAgICAgICAgICJdIGlzIG5vdCB2YWxpZCIpOwogICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICB9IGZpbmFsbHkgewpAQCAtMTE5LDEyICsxMTksMTIgQEAKICAgICAgICAgICAgIGFyY2hpdmlzdC5zZXRYTUxWYWxpZGF0aW9uTGV2ZWwoImZ1bGwiKTsKICAgICAgICAgICAgIGFyY2hpdmlzdC5zZXRSdW50aW1lWE1MVmFsaWRhdGlvbih0cnVlKTsKICAgICAgICAgICAgIGFyY2hpdmlzdC5zZXRSdW50aW1lWE1MVmFsaWRhdGlvbkxldmVsKCJmdWxsIik7Ci0gICAgICAgICAgICBsb2coIlJlYWRpbmcvcGFyc2luZyB0aGUgb3V0cHV0IGFyY2hpdmUiICsgCisgICAgICAgICAgICBsb2coIlJlYWRpbmcvcGFyc2luZyB0aGUgb3V0cHV0IGFyY2hpdmUiICsKICAgICAgICAgICAgICAgICBvdXRwdXRGaWxlTmFtZSk7CiAgICAgICAgICAgICBEZXNjcmlwdG9yIGRlc2NyaXB0b3IgPSBhcmNoaXZpc3Qub3BlbihhcmNoaXZlRmlsZSk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAgICAgbG9nKCJUaGUgaW5wdXQgYXJjaGl2ZTogWyIgKyBvdXRwdXRGaWxlTmFtZSArIAorICAgICAgICAgICAgbG9nKCJUaGUgaW5wdXQgYXJjaGl2ZTogWyIgKyBvdXRwdXRGaWxlTmFtZSArCiAgICAgICAgICAgICAgICAgIl0gaXMgbm90IHZhbGlkIik7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KQEAgLTEzNCw3ICsxMzQsNyBAQAogICAgICAgICAgICAgYXJjaGl2aXN0LndyaXRlKGFyY2hpdmUsIG91dHB1dEZpbGVOYW1lMik7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAgICAgbG9nKCJUaGUgb3V0cHV0IGFyY2hpdmU6IFsiICsgb3V0cHV0RmlsZU5hbWUyICsgCisgICAgICAgICAgICBsb2coIlRoZSBvdXRwdXQgYXJjaGl2ZTogWyIgKyBvdXRwdXRGaWxlTmFtZTIgKwogICAgICAgICAgICAgICAgICJdIGlzIG5vdCB2YWxpZCIpOwogICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICB9IGZpbmFsbHkgewpAQCAtMTkzLDcgKzE5Myw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldEV4dGVuc2lvbihTdHJpbmcgZmlsZSkgewotICAgICAgICBTdHJpbmcgZXh0ID0gZmlsZS5zdWJzdHJpbmcoZmlsZS5sYXN0SW5kZXhPZigiLiIpKTsgICAgICAgIAorICAgICAgICBTdHJpbmcgZXh0ID0gZmlsZS5zdWJzdHJpbmcoZmlsZS5sYXN0SW5kZXhPZigiLiIpKTsKICAgICAgICAgcmV0dXJuIGV4dDsKICAgICB9CiAKQEAgLTIwNSw3ICsyMDUsNyBAQAogICAgICAgICAgICAgU3RhcnR1cENvbnRleHQgc3RhcnR1cENvbnRleHQgPSBuZXcgU3RhcnR1cENvbnRleHQoKTsKIAogICAgICAgICAgICAgU2VydmljZUxvY2F0b3JVdGlsaXRpZXMuYWRkT25lQ29uc3RhbnQoc2VydmljZUxvY2F0b3IsIHN0YXJ0dXBDb250ZXh0KTsKLSAgICAgICAgICAgIFNlcnZpY2VMb2NhdG9yVXRpbGl0aWVzLmFkZE9uZUNvbnN0YW50KHNlcnZpY2VMb2NhdG9yLCAKKyAgICAgICAgICAgIFNlcnZpY2VMb2NhdG9yVXRpbGl0aWVzLmFkZE9uZUNvbnN0YW50KHNlcnZpY2VMb2NhdG9yLAogICAgICAgICAgICAgICAgIG5ldyBQcm9jZXNzRW52aXJvbm1lbnQoUHJvY2Vzc0Vudmlyb25tZW50LlByb2Nlc3NUeXBlLk90aGVyKSk7CiAKICAgICAgICAgICAgIEdsb2JhbHMuc2V0RGVmYXVsdEhhYml0YXQoc2VydmljZUxvY2F0b3IpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kb2wvdmFsaWRhdGlvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RvbC92YWxpZGF0aW9uL2J1aWxkLnhtbAppbmRleCBhZGZhYjgyLi45YWY4ZTU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RvbC92YWxpZGF0aW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RvbC92YWxpZGF0aW9uL2J1aWxkLnhtbApAQCAtMjgsNDIgKzI4LDQyIEBACiAgICAgPHByb3BlcnR5IG5hbWU9InRlc3ROYW1lIiB2YWx1ZT0idmFsaWRhdGlvbiIvPgogCiAgICAgPHRhcmdldCBuYW1lPSJwcmVwYXJlIiBkZXBlbmRzPSJpbml0Ij4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9InZhbGlkYXRpb24ud2FyIiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9InZhbGlkYXRpb24ud2FyIgogICAgICAgICAgICAgdmFsdWU9IiR7YnVpbGR9L3dhci8ke3Rlc3ROYW1lfS53YXIiLz4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9InZhbGlkYXRpb24uamFyIiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9InZhbGlkYXRpb24uamFyIgogICAgICAgICAgICAgdmFsdWU9IiR7YnVpbGR9L2VqYi8ke3Rlc3ROYW1lfS1lamIuamFyIi8+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2YWxpZGF0aW9uLnJhciIgCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2YWxpZGF0aW9uLnJhciIKICAgICAgICAgICAgIHZhbHVlPSIke2J1aWxkfS9yYXIvJHt0ZXN0TmFtZX0ucmFyIi8+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2YWxpZGF0aW9uLmNhciIgCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2YWxpZGF0aW9uLmNhciIKICAgICAgICAgICAgIHZhbHVlPSIke2J1aWxkfS9jYXIvJHt0ZXN0TmFtZX0tY2xpZW50LmphciIvPgogCi0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2YWxpZGF0aW9uLndsc1JhciIgCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2YWxpZGF0aW9uLndsc1JhciIKICAgICAgICAgICAgIHZhbHVlPSIke2J1aWxkfS93bHNSYXIvJHt0ZXN0TmFtZX0ucmFyIi8+CiAKICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZhbGlkYXRpb24uZWFyLmRpciIgdmFsdWU9IiR7YnVpbGR9L2VhciIvPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0idmFsaWRhdGlvbi5lYXIud2FyIiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9InZhbGlkYXRpb24uZWFyLndhciIKICAgICAgICAgICAgICAgICAgIHZhbHVlPSIke3ZhbGlkYXRpb24uZWFyLmRpcn0vJHt0ZXN0TmFtZX0ud2FyIi8+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2YWxpZGF0aW9uLmVhci5qYXIiIAorICAgICAgICA8cHJvcGVydHkgbmFtZT0idmFsaWRhdGlvbi5lYXIuamFyIgogICAgICAgICAgICAgICAgICAgdmFsdWU9IiR7dmFsaWRhdGlvbi5lYXIuZGlyfS8ke3Rlc3ROYW1lfS1lamIuamFyIi8+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2YWxpZGF0aW9uLmVhci5yYXIiIAorICAgICAgICA8cHJvcGVydHkgbmFtZT0idmFsaWRhdGlvbi5lYXIucmFyIgogICAgICAgICAgICAgICAgICAgdmFsdWU9IiR7dmFsaWRhdGlvbi5lYXIuZGlyfS8ke3Rlc3ROYW1lfS5yYXIiLz4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9InZhbGlkYXRpb24uZWFyLmNhciIgCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2YWxpZGF0aW9uLmVhci5jYXIiCiAgICAgICAgICAgICAgICAgICB2YWx1ZT0iJHt2YWxpZGF0aW9uLmVhci5kaXJ9LyR7dGVzdE5hbWV9LWNsaWVudC5qYXIiLz4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9InZhbGlkYXRpb24uZWFyIiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9InZhbGlkYXRpb24uZWFyIgogICAgICAgICAgICAgICAgICAgdmFsdWU9IiR7dmFsaWRhdGlvbi5lYXIuZGlyfS8ke3Rlc3ROYW1lfS5lYXIiLz4KIAogICAgICAgICA8cHJvcGVydHkgbmFtZT0idmFsaWRhdGlvbi53bHNFYXIuZGlyIiB2YWx1ZT0iJHtidWlsZH0vd2xzRWFyIi8+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2YWxpZGF0aW9uLndsc0Vhci53bHNSYXIiIAorICAgICAgICA8cHJvcGVydHkgbmFtZT0idmFsaWRhdGlvbi53bHNFYXIud2xzUmFyIgogICAgICAgICAgICAgICAgICB2YWx1ZT0iJHt2YWxpZGF0aW9uLndsc0Vhci5kaXJ9LyR7dGVzdE5hbWV9LnJhciIvPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0idmFsaWRhdGlvbi53bHNFYXIiIAorICAgICAgICA8cHJvcGVydHkgbmFtZT0idmFsaWRhdGlvbi53bHNFYXIiCiAgICAgICAgICAgICAgICAgICB2YWx1ZT0iJHt2YWxpZGF0aW9uLndsc0Vhci5kaXJ9LyR7dGVzdE5hbWV9LmVhciIvPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0idmFsaWRhdGlvbi53bHNFYXIyLmRpciIgdmFsdWU9IiR7YnVpbGR9L3dsc0VhcjIiLz4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9InZhbGlkYXRpb24ud2xzRWFyMiIgCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2YWxpZGF0aW9uLndsc0VhcjIiCiAgICAgICAgICAgICAgICAgICB2YWx1ZT0iJHt2YWxpZGF0aW9uLndsc0VhcjIuZGlyfS8ke3Rlc3ROYW1lfS5lYXIiLz4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZhbGlkYXRpb24ud2xzRWFyMy5kaXIiIHZhbHVlPSIke2J1aWxkfS93bHNFYXIzIi8+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2YWxpZGF0aW9uLndsc0VhcjMud2xzUmFyIiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9InZhbGlkYXRpb24ud2xzRWFyMy53bHNSYXIiCiAgICAgICAgICAgICAgICAgIHZhbHVlPSIke3ZhbGlkYXRpb24ud2xzRWFyMy5kaXJ9LyR7dGVzdE5hbWV9LnJhciIvPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0idmFsaWRhdGlvbi53bHNFYXIzIiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9InZhbGlkYXRpb24ud2xzRWFyMyIKICAgICAgICAgICAgICAgICAgIHZhbHVlPSIke3ZhbGlkYXRpb24ud2xzRWFyMy5kaXJ9LyR7dGVzdE5hbWV9LmVhciIvPgogCiAgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGR9L3dhciIvPgpAQCAtMTA2LDcgKzEwNiw3IEBACiAgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7dmFsaWRhdGlvbi5lYXIud2FyfSIgYmFzZWRpcj0iJHtiYXNlZGlyfS9lYXIvd2FyIi8+CiAgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7dmFsaWRhdGlvbi5lYXIuamFyfSIgYmFzZWRpcj0iJHtiYXNlZGlyfS9lYXIvZWpiIi8+CiAgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7dmFsaWRhdGlvbi5lYXIucmFyfSIgYmFzZWRpcj0iJHtiYXNlZGlyfS9lYXIvcmFyIi8+Ci0gICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7dmFsaWRhdGlvbi5lYXIuY2FyfSIgYmFzZWRpcj0iJHtiYXNlZGlyfS9lYXIvY2FyIiAKKyAgICAgICAgPGphciBkZXN0ZmlsZT0iJHt2YWxpZGF0aW9uLmVhci5jYXJ9IiBiYXNlZGlyPSIke2Jhc2VkaXJ9L2Vhci9jYXIiCiAgICAgICAgICAgICAgbWFuaWZlc3Q9IiR7YmFzZWRpcn0vZWFyL2Nhci9NRVRBLUlORi9NQU5JRkVTVC5NRiIvPgogICAgICAgICA8Y29weSB0b2Rpcj0iJHt2YWxpZGF0aW9uLmVhci5kaXJ9Ij4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtiYXNlZGlyfS9lYXIiIGluY2x1ZGVzPSJNRVRBLUlORi8qIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RvbC92YWxpZGF0aW9uL2VqYi9NRVRBLUlORi9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZG9sL3ZhbGlkYXRpb24vZWpiL01FVEEtSU5GL2VqYi1qYXIueG1sCmluZGV4IDdmYzQ4ODAuLjgyMWRlNTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZG9sL3ZhbGlkYXRpb24vZWpiL01FVEEtSU5GL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZG9sL3ZhbGlkYXRpb24vZWpiL01FVEEtSU5GL2VqYi1qYXIueG1sCkBAIC0zNywxMyArMzcsMTMgQEAKICAgICAgIDxlbnYtZW50cnk+CiAgICAgICAgIDxkZXNjcmlwdGlvbj5iZWFzIGVudiBlbnRyeXI8L2Rlc2NyaXB0aW9uPgogICAgICAgICA8ZW52LWVudHJ5LW5hbWU+QkVBUzwvZW52LWVudHJ5LW5hbWU+Ci0JPGVudi1lbnRyeS10eXBlPmphdmEubGFuZy5Eb3VibGUgPC9lbnYtZW50cnktdHlwZT4KLQk8ZW52LWVudHJ5LXZhbHVlPjEwMC4wPC9lbnYtZW50cnktdmFsdWU+CisgICAgPGVudi1lbnRyeS10eXBlPmphdmEubGFuZy5Eb3VibGUgPC9lbnYtZW50cnktdHlwZT4KKyAgICA8ZW52LWVudHJ5LXZhbHVlPjEwMC4wPC9lbnYtZW50cnktdmFsdWU+CiAgICAgICA8L2Vudi1lbnRyeT4KICAgICAgIDxlbnYtZW50cnk+CiAgICAgICAgIDxlbnYtZW50cnktbmFtZT5NU0ZUPC9lbnYtZW50cnktbmFtZT4KLQk8ZW52LWVudHJ5LXR5cGU+amF2YS5sYW5nLkRvdWJsZSA8L2Vudi1lbnRyeS10eXBlPgotCTxlbnYtZW50cnktdmFsdWU+MTUwLjA8L2Vudi1lbnRyeS12YWx1ZT4KKyAgICA8ZW52LWVudHJ5LXR5cGU+amF2YS5sYW5nLkRvdWJsZSA8L2Vudi1lbnRyeS10eXBlPgorICAgIDxlbnYtZW50cnktdmFsdWU+MTUwLjA8L2Vudi1lbnRyeS12YWx1ZT4KICAgICAgIDwvZW52LWVudHJ5PgogICAgICAgPGVqYi1yZWY+CiAgICAgICAgIDxkZXNjcmlwdGlvbj5lbnJvbGxlciByZWY8L2Rlc2NyaXB0aW9uPgpAQCAtNTQ4LDcgKzU0OCw3IEBACiAgICAgPGNvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgICAgIDxtZXRob2Q+CiAgICAgICAgIDxlamItbmFtZT5zdGF0ZWZ1bFNlc3Npb248L2VqYi1uYW1lPgotCTxtZXRob2QtbmFtZT4qPC9tZXRob2QtbmFtZT4KKyAgICA8bWV0aG9kLW5hbWU+KjwvbWV0aG9kLW5hbWU+CiAgICAgICA8L21ldGhvZD4KICAgICAgIDx0cmFucy1hdHRyaWJ1dGU+UmVxdWlyZWQ8L3RyYW5zLWF0dHJpYnV0ZT4KICAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4KQEAgLTU2Myw2ICs1NjMsNiBAQAogICAgICAgICA8L21ldGhvZC1wYXJhbXM+CiAgICAgICA8L21ldGhvZD4KICAgICA8L2V4Y2x1ZGUtbGlzdD4KLSAgPC9hc3NlbWJseS1kZXNjcmlwdG9yPiAgCisgIDwvYXNzZW1ibHktZGVzY3JpcHRvcj4KICAgPGVqYi1jbGllbnQtamFyPmNhcnQtZWpiLWNsaWVudC5qYXI8L2VqYi1jbGllbnQtamFyPgogPC9lamItamFyPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kb2wvdmFsaWRhdGlvbi9lamIvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9kb2wvdmFsaWRhdGlvbi9lamIvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCmluZGV4IDQwNjRhYmMuLmIwMDZjMzIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZG9sL3ZhbGlkYXRpb24vZWpiL01FVEEtSU5GL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2RvbC92YWxpZGF0aW9uL2VqYi9NRVRBLUlORi9zdW4tZWpiLWphci54bWwKQEAgLTIzLDcgKzIzLDcgQEAKICAgICA8dW5pcXVlLWlkPjE8L3VuaXF1ZS1pZD4KICAgICA8ZWpiPgogICAgICAgPGVqYi1uYW1lPnN0YXRlZnVsU2Vzc2lvbjwvZWpiLW5hbWU+Ci0gICAgICA8am5kaS1uYW1lPk15VHJhZGVyQmVhbjwvam5kaS1uYW1lPiAgICAgIAorICAgICAgPGpuZGktbmFtZT5NeVRyYWRlckJlYW48L2puZGktbmFtZT4KICAgICA8L2VqYj4KICAgPC9lbnRlcnByaXNlLWJlYW5zPgogICA8c2VjdXJpdHktcm9sZS1tYXBwaW5nPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvYXBwbWd0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2FwcG1ndC9idWlsZC54bWwKaW5kZXggZjhhMmQ5OS4uY2M2Y2U5NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvYXBwbWd0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9hcHBtZ3QvYnVpbGQueG1sCkBAIC01OCw3ICs1OCw3IEBACiAgICAgICAgICAgICA8Y2xhc3NlcyBkaXI9IiR7YnVpbGR9Ii8+CiAgICAgICAgIDwvd2FyPgogCi0gICAgICAgICAKKwogICAgICAgICA8Y29weSBmaWxlPSJhcHBsaWNhdGlvbi54bWwiIHRvZGlyPSIke2J1aWxkfS9hcmNoaXZlL01FVEEtSU5GIi8+CiAgICAgICAgIDxjb3B5IGZpbGU9IiR7YWxsLndhcn0iIHRvZGlyPSIke2J1aWxkfS9hcmNoaXZlIi8+CiAgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YWxsLmVhcn0iIGJhc2VkaXI9IiR7YnVpbGR9L2FyY2hpdmUiLz4KQEAgLTkyLDE2ICs5MiwxNiBAQAogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKLSAgICA8dGFyZ2V0IG5hbWU9ImVuYWJsZS5hc2FkbWluIj4gCisgICAgPHRhcmdldCBuYW1lPSJlbmFibGUuYXNhZG1pbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tbW9uLmVuYWJsZS5hc2FkbWluIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9IiR7dGVzdE5hbWV9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGlzYWJsZS5hc2FkbWluIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21tb24uZGlzYWJsZS5hc2FkbWluIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9IiR7dGVzdE5hbWV9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KQEAgLTM3Myw3ICszNzMsNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImV4dHJhLmFyZ3MiIHZhbHVlPSIke2N1c3RvbWl6ZWQuY29uZmlnLmNsaWVudC5hcmdzfSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjaGVjay5hZGRlZC5jdXN0b21pemF0aW9uLmFuZC5zdXBwcmVzc2VkLm9yaWdpbmFsLmNvbmZpZyI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2hlY2suYWRkaXRpdmUuY3VzdG9taXphdGlvbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ibG9nLmlkIiB2YWx1ZT0iJHtsb2cuaWR9LjEiLz4KQEAgLTM5Niw3ICszOTYsNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImV4dHJhLmFyZ3MiIHZhbHVlPSItcGFyYW0gYnVpbHRpbj1pbi1hcHAiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjbG9iYmVyIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxkZWxldGUgZmlsZT0iJHthbGwuZWFyfSIvPgogICAgICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZH0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2J1aWxkLnhtbAppbmRleCA5OWZjZDliLi5jZTgzOTFkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvYnVpbGQueG1sCkBAIC0yMyw0MCArMjMsNDAgQEAKIAogPHByb2plY3QgbmFtZT0iZWFyIiBkZWZhdWx0PSJhbGwiIGJhc2VkaXI9Ii4iPgogCi0JJmNvbW1vbkJ1aWxkOworICAgICZjb21tb25CdWlsZDsKIAotCTx0YXJnZXQgbmFtZT0icHJpdmF0ZS1hbGwiPgotCQk8YW50IGRpcj0iZWFyd2l0aHdhciIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9lYXJ3aXRod2FyIi8+Ci0JCTwvYW50PgotCQk8YW50IGRpcj0iZWFyd2l0aGVqYiIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9lYXJ3aXRoZWpiIi8+Ci0JCTwvYW50PgotCQk8IS0tYW50IGRpcj0id3N0b2VqYiIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS93c3RvZWpiIi8+Ci0JCTwvYW50PgotCQk8YW50IGRpcj0iZWFyd2l0aGFsbCIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9lYXJ3aXRoYWxsIi8+Ci0JCTwvYW50LS0+Ci0JCTxhbnQgZGlyPSJlYXJ3aXRoYWxsMiIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9lYXJ3aXRoYWxsMiIvPgotCQk8L2FudD4KLQkJPGFudCBkaXI9InVuaXF1ZWNyIiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L3VuaXF1ZWNyIi8+Ci0JCTwvYW50PgotCQk8YW50IGRpcj0ibGliQ2xhc3NQYXRoIiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L2xpYkNsYXNzUGF0aCIvPgotCQk8L2FudD4KLSAgICAgICAgICAgICAgICAKKyAgICA8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIj4KKyAgICAgICAgPGFudCBkaXI9ImVhcndpdGh3YXIiIHRhcmdldD0icHJpdmF0ZS1hbGwiPgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0vZWFyd2l0aHdhciIvPgorICAgICAgICA8L2FudD4KKyAgICAgICAgPGFudCBkaXI9ImVhcndpdGhlamIiIHRhcmdldD0icHJpdmF0ZS1hbGwiPgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0vZWFyd2l0aGVqYiIvPgorICAgICAgICA8L2FudD4KKyAgICAgICAgPCEtLWFudCBkaXI9IndzdG9lamIiIHRhcmdldD0icHJpdmF0ZS1hbGwiPgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0vd3N0b2VqYiIvPgorICAgICAgICA8L2FudD4KKyAgICAgICAgPGFudCBkaXI9ImVhcndpdGhhbGwiIHRhcmdldD0icHJpdmF0ZS1hbGwiPgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0vZWFyd2l0aGFsbCIvPgorICAgICAgICA8L2FudC0tPgorICAgICAgICA8YW50IGRpcj0iZWFyd2l0aGFsbDIiIHRhcmdldD0icHJpdmF0ZS1hbGwiPgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0vZWFyd2l0aGFsbDIiLz4KKyAgICAgICAgPC9hbnQ+CisgICAgICAgIDxhbnQgZGlyPSJ1bmlxdWVjciIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS91bmlxdWVjciIvPgorICAgICAgICA8L2FudD4KKyAgICAgICAgPGFudCBkaXI9ImxpYkNsYXNzUGF0aCIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9saWJDbGFzc1BhdGgiLz4KKyAgICAgICAgPC9hbnQ+CisKICAgICAgICAgICAgICAgICA8YW50IGRpcj0ibGliY2xhc3NwYXRoMiIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9saWJjbGFzc3BhdGgyIi8+Ci0JCTwvYW50PgotCQk8YW50IGRpcj0ibWFuaWZlc3RDbGFzc1BhdGgiIHRhcmdldD0icHJpdmF0ZS1hbGwiPgotCQkJPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0vbWFuaWZlc3RDbGFzc1BhdGgiLz4KLQkJPC9hbnQ+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9saWJjbGFzc3BhdGgyIi8+CisgICAgICAgIDwvYW50PgorICAgICAgICA8YW50IGRpcj0ibWFuaWZlc3RDbGFzc1BhdGgiIHRhcmdldD0icHJpdmF0ZS1hbGwiPgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0vbWFuaWZlc3RDbGFzc1BhdGgiLz4KKyAgICAgICAgPC9hbnQ+CiAKICAgICAgICAgICAgICAgICA8YW50IGRpcj0iYXBwbWd0IiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0vYXBwbWd0Ii8+CiAgICAgICAgICAgICAgICAgPC9hbnQ+Ci0JPC90YXJnZXQ+CisgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9lYXJ3aXRoYWxsL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2VhcndpdGhhbGwvYnVpbGQueG1sCmluZGV4IDNlNGQ5ZjMuLjUwMGRjMjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2VhcndpdGhhbGwvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2VhcndpdGhhbGwvYnVpbGQueG1sCkBAIC0yNCw2OCArMjQsNjggQEAKIDxwcm9qZWN0IG5hbWU9IkhlbGxvU2VydmljZVdTIiBkZWZhdWx0PSJhbGwiIGJhc2VkaXI9Ii4iPgogCiAgICAgJmNvbW1vbkJ1aWxkOwotCQorCiAgICAgPHByb3BlcnR5IG5hbWU9InRlc3ROYW1lIiB2YWx1ZT0iU2F5SGVsbG9XUyIvPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJhcmNoaXZlZGlyIiB2YWx1ZT0iJHtidWlsZH0vYXJjaGl2ZXMiLz4KICAgICA8dGFyZ2V0IG5hbWU9InByZXBhcmUiIGRlcGVuZHM9ImluaXQiPgotCQk8cHJvcGVydHkgbmFtZT0iYmluYXJ5IiB2YWx1ZT0iJHtidWlsZH0vV0VCLUlORi9jbGFzc2VzIi8+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJ3c2RsIiB2YWx1ZT0iJHtidWlsZH0vV0VCLUlORi93c2RsIi8+Ci0JCTxta2RpciBkaXI9IiR7YmluYXJ5fSIgLz4KLQkJPG1rZGlyIGRpcj0iJHt3c2RsfSIvPgotCQk8bWtkaXIgZGlyPSIke2J1aWxkfS9lamIiLz4KLQkJPHByb3BlcnR5IG5hbWU9InBvcnRhYmxlLndhciIgdmFsdWU9IiR7YXJjaGl2ZWRpcn0vc2F5aGVsbG8tcG9ydGFibGUud2FyIi8+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJwb3J0YWJsZS5qYXIiIHZhbHVlPSIke2FyY2hpdmVkaXJ9L3N0YXRlbGVzc2hlbGxvLXBvcnRhYmxlLmphciIvPgotCQk8cHJvcGVydHkgbmFtZT0icG9ydGFibGUuZWFyIiB2YWx1ZT0iJHthcmNoaXZlZGlyfS9zYXloZWxsby1wb3J0YWJsZS5lYXIiLz4KLQkJPHByb3BlcnR5IG5hbWU9ImFsbC53YXIiIHZhbHVlPSIke2FyY2hpdmVkaXJ9L3NheWhlbGxvLndhciIvPgotCQk8cHJvcGVydHkgbmFtZT0iYWxsLmphciIgdmFsdWU9IiR7YXJjaGl2ZWRpcn0vc3RhdGVsZXNzaGVsbG8uamFyIi8+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJhbGwuZWFyIiB2YWx1ZT0iJHthcmNoaXZlZGlyfS9zYXloZWxsby5lYXIiLz4KLQkJPHByb3BlcnR5IG5hbWU9ImRlcGxveXBsYW4uamFyIiB2YWx1ZT0iJHthcmNoaXZlZGlyfS9zYXloZWxsby1kZXBsb3lwbGFuLmphciIvPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0iYmluYXJ5IiB2YWx1ZT0iJHtidWlsZH0vV0VCLUlORi9jbGFzc2VzIi8+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ3c2RsIiB2YWx1ZT0iJHtidWlsZH0vV0VCLUlORi93c2RsIi8+CisgICAgICAgIDxta2RpciBkaXI9IiR7YmluYXJ5fSIgLz4KKyAgICAgICAgPG1rZGlyIGRpcj0iJHt3c2RsfSIvPgorICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkfS9lamIiLz4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9InBvcnRhYmxlLndhciIgdmFsdWU9IiR7YXJjaGl2ZWRpcn0vc2F5aGVsbG8tcG9ydGFibGUud2FyIi8+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwb3J0YWJsZS5qYXIiIHZhbHVlPSIke2FyY2hpdmVkaXJ9L3N0YXRlbGVzc2hlbGxvLXBvcnRhYmxlLmphciIvPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0icG9ydGFibGUuZWFyIiB2YWx1ZT0iJHthcmNoaXZlZGlyfS9zYXloZWxsby1wb3J0YWJsZS5lYXIiLz4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9ImFsbC53YXIiIHZhbHVlPSIke2FyY2hpdmVkaXJ9L3NheWhlbGxvLndhciIvPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0iYWxsLmphciIgdmFsdWU9IiR7YXJjaGl2ZWRpcn0vc3RhdGVsZXNzaGVsbG8uamFyIi8+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJhbGwuZWFyIiB2YWx1ZT0iJHthcmNoaXZlZGlyfS9zYXloZWxsby5lYXIiLz4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9ImRlcGxveXBsYW4uamFyIiB2YWx1ZT0iJHthcmNoaXZlZGlyfS9zYXloZWxsby1kZXBsb3lwbGFuLmphciIvPgogICAgIDwvdGFyZ2V0PgotCQorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJwcmVwYXJlIj4KICAgICAgICAgPGphdmFjIHNyY2Rpcj0ic3RhdGVsZXNzaGVsbG8iIGRlc3RkaXI9IiR7YnVpbGR9L2VqYiI+CiAgICAgICAgICAgPGNsYXNzcGF0aCByZWZpZD0iZ2Z2My5jbGFzc3BhdGgiLz4KICAgICAgICAgPC9qYXZhYz4KLQkJPGphdmFjIHNyY2Rpcj0iaGVsbG9zZXJ2aWNlIiBkZXN0ZGlyPSIke2JpbmFyeX0iPgorICAgICAgICA8amF2YWMgc3JjZGlyPSJoZWxsb3NlcnZpY2UiIGRlc3RkaXI9IiR7YmluYXJ5fSI+CiAgICAgICAgICAgICAgICAgICAgIDxjbGFzc3BhdGggcmVmaWQ9ImdmdjMuY2xhc3NwYXRoIi8+CiAgICAgICAgICAgICAgICAgPC9qYXZhYz4KLQkJPGVjaG8gbWVzc2FnZT0iaW52b2tpbmcgd3Njb21waWxlIHRvIGdlbmVyYXRlIHdzZGwgZmlsZSIvPgotCQk8ZXhlYyBleGVjdXRhYmxlPSIke1dTQ09NUElMRX0iPgotCQkJPGFyZyBsaW5lPSItZGVmaW5lIGNvbmZpZy1pbnRlcmZhY2UueG1sICAtZCAke2JpbmFyeX0gLW5kICR7d3NkbH0gLWNsYXNzcGF0aCAke2JpbmFyeX0gLW1hcHBpbmcgJHtidWlsZH0vbWFwcGluZy54bWwiLz4KLQkgCTwvZXhlYz4JCQkJCQorICAgICAgICA8ZWNobyBtZXNzYWdlPSJpbnZva2luZyB3c2NvbXBpbGUgdG8gZ2VuZXJhdGUgd3NkbCBmaWxlIi8+CisgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7V1NDT01QSUxFfSI+CisgICAgICAgICAgICA8YXJnIGxpbmU9Ii1kZWZpbmUgY29uZmlnLWludGVyZmFjZS54bWwgIC1kICR7YmluYXJ5fSAtbmQgJHt3c2RsfSAtY2xhc3NwYXRoICR7YmluYXJ5fSAtbWFwcGluZyAke2J1aWxkfS9tYXBwaW5nLnhtbCIvPgorICAgICAgICAgPC9leGVjPgogICAgIDwvdGFyZ2V0PgotCQorCiAgICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZSIgZGVwZW5kcz0iY29tcGlsZSI+Ci0JCTxjb3B5IGZpbGU9IndlYi54bWwiIHRvZGlyPSIke2J1aWxkfS9XRUItSU5GIi8+Ci0JCTxjb3B5IGZpbGU9IndlYnNlcnZpY2VzLnhtbCIgdG9kaXI9IiR7YnVpbGR9L1dFQi1JTkYiLz4KLQkJPGphciBkZXN0ZmlsZT0iJHtwb3J0YWJsZS53YXJ9IiBiYXNlZGlyPSIke2J1aWxkfSIvPgotCQk8Y29weSBmaWxlPSJzdW4td2ViLnhtbCIgdG9kaXI9IiR7YnVpbGR9L1dFQi1JTkYiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotCQk8amFyIGRlc3RmaWxlPSIke2FsbC53YXJ9IiBiYXNlZGlyPSIke2J1aWxkfSIvPgorICAgICAgICA8Y29weSBmaWxlPSJ3ZWIueG1sIiB0b2Rpcj0iJHtidWlsZH0vV0VCLUlORiIvPgorICAgICAgICA8Y29weSBmaWxlPSJ3ZWJzZXJ2aWNlcy54bWwiIHRvZGlyPSIke2J1aWxkfS9XRUItSU5GIi8+CisgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7cG9ydGFibGUud2FyfSIgYmFzZWRpcj0iJHtidWlsZH0iLz4KKyAgICAgICAgPGNvcHkgZmlsZT0ic3VuLXdlYi54bWwiIHRvZGlyPSIke2J1aWxkfS9XRUItSU5GIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KKyAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthbGwud2FyfSIgYmFzZWRpcj0iJHtidWlsZH0iLz4KIAotCQk8bWtkaXIgZGlyPSIke2J1aWxkfS9lamIvTUVUQS1JTkYiLz4KLQkJPGNvcHkgZmlsZT0iZWpiLWphci54bWwiIHRvZGlyPSIke2J1aWxkfS9lamIvTUVUQS1JTkYiLz4KLQkJPGphciBkZXN0ZmlsZT0iJHtwb3J0YWJsZS5qYXJ9IiBiYXNlZGlyPSIke2J1aWxkfS9lamIiLz4KLQkJPGNvcHkgZmlsZT0ic3VuLWVqYi1qYXIueG1sIiB0b2Rpcj0iJHtidWlsZH0vZWpiL01FVEEtSU5GIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLQkJPGphciBkZXN0ZmlsZT0iJHthbGwuamFyfSIgYmFzZWRpcj0iJHtidWlsZH0vZWpiIi8+CisgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGR9L2VqYi9NRVRBLUlORiIvPgorICAgICAgICA8Y29weSBmaWxlPSJlamItamFyLnhtbCIgdG9kaXI9IiR7YnVpbGR9L2VqYi9NRVRBLUlORiIvPgorICAgICAgICA8amFyIGRlc3RmaWxlPSIke3BvcnRhYmxlLmphcn0iIGJhc2VkaXI9IiR7YnVpbGR9L2VqYiIvPgorICAgICAgICA8Y29weSBmaWxlPSJzdW4tZWpiLWphci54bWwiIHRvZGlyPSIke2J1aWxkfS9lamIvTUVUQS1JTkYiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICAgICAgICA8amFyIGRlc3RmaWxlPSIke2FsbC5qYXJ9IiBiYXNlZGlyPSIke2J1aWxkfS9lamIiLz4KIAotCQk8bWtkaXIgZGlyPSIke2J1aWxkfS9wbGFuIi8+Ci0JCTxjb3B5IGZpbGU9InN1bi1lamItamFyLnhtbCIgdG9maWxlPSIke2J1aWxkfS9wbGFuL3N0YXRlbGVzc2hlbGxvLXBvcnRhYmxlLmphci5zdW4tZWpiLWphci54bWwiLz4KLQkJPGNvcHkgZmlsZT0ic3VuLXdlYi54bWwiIHRvZmlsZT0iJHtidWlsZH0vcGxhbi9zYXloZWxsby1wb3J0YWJsZS53YXIuc3VuLXdlYi54bWwiLz4KLQkJPGphciBkZXN0ZmlsZT0iJHtkZXBsb3lwbGFuLmphcn0iIGJhc2VkaXI9IiR7YnVpbGR9L3BsYW4iLz4KKyAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZH0vcGxhbiIvPgorICAgICAgICA8Y29weSBmaWxlPSJzdW4tZWpiLWphci54bWwiIHRvZmlsZT0iJHtidWlsZH0vcGxhbi9zdGF0ZWxlc3NoZWxsby1wb3J0YWJsZS5qYXIuc3VuLWVqYi1qYXIueG1sIi8+CisgICAgICAgIDxjb3B5IGZpbGU9InN1bi13ZWIueG1sIiB0b2ZpbGU9IiR7YnVpbGR9L3BsYW4vc2F5aGVsbG8tcG9ydGFibGUud2FyLnN1bi13ZWIueG1sIi8+CisgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7ZGVwbG95cGxhbi5qYXJ9IiBiYXNlZGlyPSIke2J1aWxkfS9wbGFuIi8+CiAKLQkJPG1rZGlyIGRpcj0iJHtidWlsZH0vZWFyIi8+Ci0JCTxta2RpciBkaXI9IiR7YnVpbGR9L2Vhci9NRVRBLUlORiIvPgotCQk8Y29weSBmaWxlPSJhcHBsaWNhdGlvbi54bWwiIHRvZGlyPSIke2J1aWxkfS9lYXIvTUVUQS1JTkYiLz4KLQkJPGNvcHkgZmlsZT0iJHthbGwud2FyfSIgdG9kaXI9IiR7YnVpbGR9L2VhciIvPgotCQk8Y29weSBmaWxlPSIke2FsbC5qYXJ9IiB0b2Rpcj0iJHtidWlsZH0vZWFyIi8+Ci0JCTxqYXIgZGVzdGZpbGU9IiR7YWxsLmVhcn0iIGJhc2VkaXI9IiR7YnVpbGR9L2VhciIvPgotCQk8ZGVsZXRlIGZpbGU9IiR7YnVpbGR9L2Vhci9zYXloZWxsby53YXIiLz4KLQkJPGRlbGV0ZSBmaWxlPSIke2J1aWxkfS9lYXIvc3RhdGVsZXNzaGVsbG8uamFyIi8+Ci0JCTxkZWxldGUgZmlsZT0iJHtidWlsZH0vZWFyL01FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIvPgotCQk8Y29weSBmaWxlPSJwb3J0YWJsZS1hcHAueG1sIiB0b2ZpbGU9IiR7YnVpbGR9L2Vhci9NRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiLz4KLQkJPGNvcHkgZmlsZT0iJHtwb3J0YWJsZS53YXJ9IiB0b2Rpcj0iJHtidWlsZH0vZWFyIi8+Ci0JCTxjb3B5IGZpbGU9IiR7cG9ydGFibGUuamFyfSIgdG9kaXI9IiR7YnVpbGR9L2VhciIvPgotCQk8amFyIGRlc3RmaWxlPSIke3BvcnRhYmxlLmVhcn0iIGJhc2VkaXI9IiR7YnVpbGR9L2VhciIvPgorICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkfS9lYXIiLz4KKyAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZH0vZWFyL01FVEEtSU5GIi8+CisgICAgICAgIDxjb3B5IGZpbGU9ImFwcGxpY2F0aW9uLnhtbCIgdG9kaXI9IiR7YnVpbGR9L2Vhci9NRVRBLUlORiIvPgorICAgICAgICA8Y29weSBmaWxlPSIke2FsbC53YXJ9IiB0b2Rpcj0iJHtidWlsZH0vZWFyIi8+CisgICAgICAgIDxjb3B5IGZpbGU9IiR7YWxsLmphcn0iIHRvZGlyPSIke2J1aWxkfS9lYXIiLz4KKyAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthbGwuZWFyfSIgYmFzZWRpcj0iJHtidWlsZH0vZWFyIi8+CisgICAgICAgIDxkZWxldGUgZmlsZT0iJHtidWlsZH0vZWFyL3NheWhlbGxvLndhciIvPgorICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7YnVpbGR9L2Vhci9zdGF0ZWxlc3NoZWxsby5qYXIiLz4KKyAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2J1aWxkfS9lYXIvTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIi8+CisgICAgICAgIDxjb3B5IGZpbGU9InBvcnRhYmxlLWFwcC54bWwiIHRvZmlsZT0iJHtidWlsZH0vZWFyL01FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIvPgorICAgICAgICA8Y29weSBmaWxlPSIke3BvcnRhYmxlLndhcn0iIHRvZGlyPSIke2J1aWxkfS9lYXIiLz4KKyAgICAgICAgPGNvcHkgZmlsZT0iJHtwb3J0YWJsZS5qYXJ9IiB0b2Rpcj0iJHtidWlsZH0vZWFyIi8+CisgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7cG9ydGFibGUuZWFyfSIgYmFzZWRpcj0iJHtidWlsZH0vZWFyIi8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveS5hc2FkbWluIiBkZXBlbmRzPSJwcmVwYXJlIj4KQEAgLTkzLDEwICs5MywxMCBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IiB2YWx1ZT0iLS1uYW1lICR7dGVzdE5hbWV9ICR7YWxsLmVhcn0iLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0TmFtZSIgdmFsdWU9IiR7dGVzdE5hbWV9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KLQk8ZWNobyBtZXNzYWdlPSJDcmVhdGUgY2xpZW50IHdlYnNlcnZpY2VzIGFydGlmYWN0cyIvPgotCTxleGVjIGV4ZWN1dGFibGU9IiR7V1NDT01QSUxFfSI+Ci0JCTxhcmcgbGluZT0iLWdlbjpjbGllbnQgLWtlZXAgLWQgJHtiaW5hcnl9IC1jbGFzc3BhdGggJHtiaW5hcnl9IGNvbmZpZy1pbnRlcmZhY2UueG1sIi8+Ci0JPC9leGVjPgorICAgIDxlY2hvIG1lc3NhZ2U9IkNyZWF0ZSBjbGllbnQgd2Vic2VydmljZXMgYXJ0aWZhY3RzIi8+CisgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtXU0NPTVBJTEV9Ij4KKyAgICAgICAgPGFyZyBsaW5lPSItZ2VuOmNsaWVudCAta2VlcCAtZCAke2JpbmFyeX0gLWNsYXNzcGF0aCAke2JpbmFyeX0gY29uZmlnLWludGVyZmFjZS54bWwiLz4KKyAgICA8L2V4ZWM+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlZGVwbG95LmFzYWRtaW4iIGRlcGVuZHM9InByZXBhcmUiPgpAQCAtMTA0LDEwICsxMDQsMTAgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIgdmFsdWU9Ii0tbmFtZSAke3Rlc3ROYW1lfSAke2FsbC5lYXJ9Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0idGVzdE5hbWUiIHZhbHVlPSIke3Rlc3ROYW1lfSIvPgogICAgICAgICA8L2FudGNhbGw+Ci0JPGVjaG8gbWVzc2FnZT0iQ3JlYXRlIGNsaWVudCB3ZWJzZXJ2aWNlcyBhcnRpZmFjdHMiLz4KLQk8ZXhlYyBleGVjdXRhYmxlPSIke1dTQ09NUElMRX0iPgotCQk8YXJnIGxpbmU9Ii1nZW46Y2xpZW50IC1rZWVwIC1kICR7YmluYXJ5fSAtY2xhc3NwYXRoICR7YmluYXJ5fSBjb25maWctaW50ZXJmYWNlLnhtbCIvPgotCTwvZXhlYz4KKyAgICA8ZWNobyBtZXNzYWdlPSJDcmVhdGUgY2xpZW50IHdlYnNlcnZpY2VzIGFydGlmYWN0cyIvPgorICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7V1NDT01QSUxFfSI+CisgICAgICAgIDxhcmcgbGluZT0iLWdlbjpjbGllbnQgLWtlZXAgLWQgJHtiaW5hcnl9IC1jbGFzc3BhdGggJHtiaW5hcnl9IGNvbmZpZy1pbnRlcmZhY2UueG1sIi8+CisgICAgPC9leGVjPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveS5hc2FkbWluIj4KQEAgLTE3Niw3ICsxNzYsNyBAQAogICAgICAgICA8amF2YVdpdGhSZXN1bHQKICAgICAgICAgICAgIGZvcms9InRydWUiCiAgICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiCi0gICAgICAgICAgICBqdm09IiR7SkFWQX0iCQorICAgICAgICAgICAganZtPSIke0pBVkF9IgogICAgICAgICAgICAgY2xhc3NuYW1lPSJzdGF0aWNzdHViY2xpZW50LlNheUhlbGxvQ2xpZW50IgogICAgICAgICAgICAgb3V0cHV0PSIke2J1aWxkfS8ke2xvZy5pZH0ub3V0cHV0LmxvZyIKICAgICAgICAgICAgIHJlc3VsdHByb3BlcnR5PSJyZXN1bHQiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvZWFyd2l0aGFsbC9jb25maWctaW50ZXJmYWNlLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2VhcndpdGhhbGwvY29uZmlnLWludGVyZmFjZS54bWwKaW5kZXggYTk5ZDljMC4uODk0Nzg5YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvZWFyd2l0aGFsbC9jb25maWctaW50ZXJmYWNlLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9lYXJ3aXRoYWxsL2NvbmZpZy1pbnRlcmZhY2UueG1sCkBAIC0xOSwxMSArMTksMTEgQEAKIAogPGNvbmZpZ3VyYXRpb24KICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheC1ycGMvcmkvY29uZmlnIj4KLSAgPHNlcnZpY2UgCi0gICAgICBuYW1lPSJTYXlIZWxsb1NlcnZpY2UiIAotICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJ1cm46RGVwbG95bWVudFdlYlNlcnZpY2VUZXN0IiAKLSAgICAgIHR5cGVOYW1lc3BhY2U9InVybjpEZXBsb3ltZW50V2ViU2VydmljZVRlc3QiIAorICA8c2VydmljZQorICAgICAgbmFtZT0iU2F5SGVsbG9TZXJ2aWNlIgorICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJ1cm46RGVwbG95bWVudFdlYlNlcnZpY2VUZXN0IgorICAgICAgdHlwZU5hbWVzcGFjZT0idXJuOkRlcGxveW1lbnRXZWJTZXJ2aWNlVGVzdCIKICAgICAgIHBhY2thZ2VOYW1lPSJoZWxsb3NlcnZpY2UiPgogICAgICAgPGludGVyZmFjZSBuYW1lPSJoZWxsb3NlcnZpY2UuU2F5SGVsbG8iLz4KICAgPC9zZXJ2aWNlPgotPC9jb25maWd1cmF0aW9uPiAKKzwvY29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2VhcndpdGhhbGwvaGVsbG9zZXJ2aWNlL1NheUhlbGxvLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9lYXJ3aXRoYWxsL2hlbGxvc2VydmljZS9TYXlIZWxsby5qYXZhCmluZGV4IDA3NzRkNjEuLmQyNTMzNWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2VhcndpdGhhbGwvaGVsbG9zZXJ2aWNlL1NheUhlbGxvLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvZWFyd2l0aGFsbC9oZWxsb3NlcnZpY2UvU2F5SGVsbG8uamF2YQpAQCAtMTUsNyArMTUsNyBAQAogICovCiAKICBwYWNrYWdlIGhlbGxvc2VydmljZTsKLSAKKwogaW1wb3J0IGphdmEucm1pLlJlbW90ZTsKIGltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiAKQEAgLTIzLDExICsyMywxMSBAQAogICAqIFRoaXMgaXMgYSBtaW5pbXVtIFdlYlNlcnZpY2UgaW50ZXJmYWNlCiAgICovCiAgIHB1YmxpYyBpbnRlcmZhY2UgU2F5SGVsbG8gIGV4dGVuZHMgUmVtb3RlIHsKLSAgCQotICAJLyoKLSAgCSAqIEByZXR1cm4gYSBoZWxsbyBzdHJpbmcKLSAgCSAqLwotICAJIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIG5hbWUpIHRocm93cyBSZW1vdGVFeGNlcHRpb247Ci0gIAorCisgICAgICAvKgorICAgICAgICogQHJldHVybiBhIGhlbGxvIHN0cmluZworICAgICAgICovCisgICAgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgbmFtZSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKwogICB9Ci0gIAkKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvZWFyd2l0aGFsbC9oZWxsb3NlcnZpY2UvU2F5SGVsbG9JbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9lYXJ3aXRoYWxsL2hlbGxvc2VydmljZS9TYXlIZWxsb0ltcGwuamF2YQppbmRleCBlZDQ0OWE2Li45M2U4NTk4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9lYXJ3aXRoYWxsL2hlbGxvc2VydmljZS9TYXlIZWxsb0ltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9lYXJ3aXRoYWxsL2hlbGxvc2VydmljZS9TYXlIZWxsb0ltcGwuamF2YQpAQCAtMjQsMzIgKzI0LDMyIEBACiAKIHB1YmxpYyBjbGFzcyBTYXlIZWxsb0ltcGwgaW1wbGVtZW50cyBTYXlIZWxsbyB7CiAKLQlwdWJsaWMgU3RyaW5nIG1lc3NhZ2UgPSJNZXNzYWdlIGZyb20gc2VydmxldCBpcyA6IEJvbmpvdXIgIjsKKyAgICBwdWJsaWMgU3RyaW5nIG1lc3NhZ2UgPSJNZXNzYWdlIGZyb20gc2VydmxldCBpcyA6IEJvbmpvdXIgIjsKIAotCXB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIHMpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotCSAgICB0cnkgeworICAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIHMpIHRocm93cyBSZW1vdGVFeGNlcHRpb24geworICAgICAgICB0cnkgewogCi0JCUNvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogCi0JCS8vIGNyZWF0ZSBFSkIgdXNpbmcgZmFjdG9yeSBmcm9tIGNvbnRhaW5lcgotCQlqYXZhLmxhbmcuT2JqZWN0IG9ianJlZiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvTXlTdGF0ZWxlc3NoZWxsbyIpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tlZCB1cCBob21lISEiKTsKKyAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyCisgICAgICAgIGphdmEubGFuZy5PYmplY3Qgb2JqcmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9NeVN0YXRlbGVzc2hlbGxvIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2VkIHVwIGhvbWUhISIpOwogCi0JCVN0YXRlbGVzc2hlbGxvSG9tZSBob21lID0KLQkJICAgIChTdGF0ZWxlc3NoZWxsb0hvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdygKLQkJCQlvYmpyZWYsIFN0YXRlbGVzc2hlbGxvSG9tZS5jbGFzcyk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiTmFycm93ZWQgaG9tZSEhIik7CisgICAgICAgIFN0YXRlbGVzc2hlbGxvSG9tZSBob21lID0KKyAgICAgICAgICAgIChTdGF0ZWxlc3NoZWxsb0hvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdygKKyAgICAgICAgICAgICAgICBvYmpyZWYsIFN0YXRlbGVzc2hlbGxvSG9tZS5jbGFzcyk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTmFycm93ZWQgaG9tZSEhIik7CiAKLQkJU3RhdGVsZXNzaGVsbG8gaHIgPSBob21lLmNyZWF0ZSgpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCB0aGUgRUpCISEiKTsKKyAgICAgICAgU3RhdGVsZXNzaGVsbG8gaHIgPSBob21lLmNyZWF0ZSgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCB0aGUgRUpCISEiKTsKIAotCQkvLyBpbnZva2UgbWV0aG9kIG9uIHRoZSBFSkIKLQkJbWVzc2FnZSA9IGhyLnNheVN0YXRlbGVzc2hlbGxvKCkgKyAiOyIgKyBtZXNzYWdlICsgczsKLQkgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJTZXJ2bGV0IHNheUhlbGxvSW1wbCByZWNkIGV4Y2VwdGlvbiA6ICIgKwotCQkJCSAgIGUuZ2V0TWVzc2FnZSgpKTsKLQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgfQotCSAgICByZXR1cm4gbWVzc2FnZTsKLQl9IAorICAgICAgICAvLyBpbnZva2UgbWV0aG9kIG9uIHRoZSBFSkIKKyAgICAgICAgbWVzc2FnZSA9IGhyLnNheVN0YXRlbGVzc2hlbGxvKCkgKyAiOyIgKyBtZXNzYWdlICsgczsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZXJ2bGV0IHNheUhlbGxvSW1wbCByZWNkIGV4Y2VwdGlvbiA6ICIgKworICAgICAgICAgICAgICAgICAgIGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbWVzc2FnZTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9lYXJ3aXRoYWxsL3N0YXRlbGVzc2hlbGxvL1N0YXRlbGVzc2hlbGxvRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9lYXJ3aXRoYWxsL3N0YXRlbGVzc2hlbGxvL1N0YXRlbGVzc2hlbGxvRUpCLmphdmEKaW5kZXggNDkzMzg1MC4uNzRiZWQ3NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvZWFyd2l0aGFsbC9zdGF0ZWxlc3NoZWxsby9TdGF0ZWxlc3NoZWxsb0VKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2VhcndpdGhhbGwvc3RhdGVsZXNzaGVsbG8vU3RhdGVsZXNzaGVsbG9FSkIuamF2YQpAQCAtMTcsNyArMTcsNyBAQAogcGFja2FnZSBzdGF0ZWxlc3NoZWxsbzsKIAogaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOwotaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsgCitpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25CZWFuOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0OwogaW1wb3J0IGpha2FydGEuZWpiLkVKQkV4Y2VwdGlvbjsKQEAgLTI1LDI2ICsyNSwyNiBAQAogCiBwdWJsaWMgY2xhc3MgU3RhdGVsZXNzaGVsbG9FSkIgaW1wbGVtZW50cyBTZXNzaW9uQmVhbiB7CiAgICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBzYzsKLSAgICAKKwogICAgIHB1YmxpYyBTdGF0ZWxlc3NoZWxsb0VKQigpe30KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gZWpiQ3JlYXRlICEhIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBlamJDcmVhdGUgISEiKTsKICAgICB9CiAKICAgICBwdWJsaWMgU3RyaW5nIHNheVN0YXRlbGVzc2hlbGxvKCkgdGhyb3dzIEVKQkV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZWxlc3NoZWxsb0VKQiBpcyBzYXlpbmcgaGVsbG8gdG8gdXNlclxuIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZWxlc3NoZWxsb0VKQiBpcyBzYXlpbmcgaGVsbG8gdG8gdXNlclxuIik7CiAgICAgICAgIHJldHVybigiQSBCaWcgaGVsbG8gZnJvbSBzdGF0ZWxlc3MgSEVMTE8iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgewotCQorCiAgICAgICAgIHRoaXMuc2MgPSBzYzsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHt9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHt9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7fQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvZWFyd2l0aGFsbC9zdGF0aWNzdHViY2xpZW50L1NheUhlbGxvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9lYXJ3aXRoYWxsL3N0YXRpY3N0dWJjbGllbnQvU2F5SGVsbG9DbGllbnQuamF2YQppbmRleCA4MDEwMDY0Li5kNjFmNzhlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9lYXJ3aXRoYWxsL3N0YXRpY3N0dWJjbGllbnQvU2F5SGVsbG9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9lYXJ3aXRoYWxsL3N0YXRpY3N0dWJjbGllbnQvU2F5SGVsbG9DbGllbnQuamF2YQpAQCAtMjYsMjggKzI2LDI4IEBACiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW5kcG9pbnQgYWRkcmVzcyA9ICIgKyBhcmdzWzBdKTsKLQlib29sZWFuIHRlc3RQb3NpdGl2ZSA9IChCb29sZWFuLnZhbHVlT2YoYXJnc1sxXSkpLmJvb2xlYW5WYWx1ZSgpOworICAgIGJvb2xlYW4gdGVzdFBvc2l0aXZlID0gKEJvb2xlYW4udmFsdWVPZihhcmdzWzFdKSkuYm9vbGVhblZhbHVlKCk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBTdHViIHN0dWIgPSBjcmVhdGVQcm94eSgpOwogICAgICAgICAgICAgc3R1Yi5fc2V0UHJvcGVydHkKICAgICAgICAgICAgICAgKGphdmF4LnhtbC5ycGMuU3R1Yi5FTkRQT0lOVF9BRERSRVNTX1BST1BFUlRZLAotICAgICAgICAgICAgICAgYXJnc1swXSk7IAotCQkJU2F5SGVsbG8gaGVsbG8gPSAoU2F5SGVsbG8pc3R1YjsKKyAgICAgICAgICAgICAgIGFyZ3NbMF0pOworICAgICAgICAgICAgU2F5SGVsbG8gaGVsbG8gPSAoU2F5SGVsbG8pc3R1YjsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihoZWxsby5zYXlIZWxsbygiSmVyb21lICEiKSk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCSAgICBpZih0ZXN0UG9zaXRpdmUpIHsKLQkJZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JCVN5c3RlbS5leGl0KC0xKTsKLQkgICAgfSBlbHNlIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJFeGNlcHRpb24gcmVjZCBhcyBleHBlY3RlZCIpOwotCSAgICB9Ci0JfQotCVN5c3RlbS5leGl0KDApOwotICAgIH0gICAgCisgICAgICAgIGlmKHRlc3RQb3NpdGl2ZSkgeworICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgU3lzdGVtLmV4aXQoLTEpOworICAgICAgICB9IGVsc2UgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4Y2VwdGlvbiByZWNkIGFzIGV4cGVjdGVkIik7CisgICAgICAgIH0KKyAgICB9CisgICAgU3lzdGVtLmV4aXQoMCk7CisgICAgfQogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU3R1YiBjcmVhdGVQcm94eSgpIHsKICAgICAgICAgLy8gTm90ZTogTXlIZWxsb1NlcnZpY2VfSW1wbCBpcyBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYy4KLSAgICAgICAgcmV0dXJuIAorICAgICAgICByZXR1cm4KICAgICAgICAgKFN0dWIpIChuZXcgU2F5SGVsbG9TZXJ2aWNlX0ltcGwoKS5nZXRTYXlIZWxsb1BvcnQoKSk7CiAgICAgfQotfSAKK30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2VhcndpdGhhbGwvc3VuLXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9lYXJ3aXRoYWxsL3N1bi13ZWIueG1sCmluZGV4IGY2ZWZmMzkuLjg3M2ZkNzkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2VhcndpdGhhbGwvc3VuLXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvZWFyd2l0aGFsbC9zdW4td2ViLnhtbApAQCAtMjEsNiArMjEsNiBAQAogPHN1bi13ZWItYXBwPgogICAgIDxlamItcmVmPgogICAgICAgICA8ZWpiLXJlZi1uYW1lPmVqYi9NeVN0YXRlbGVzc2hlbGxvPC9lamItcmVmLW5hbWU+Ci0JPGpuZGktbmFtZT5lamIvTXlTdGF0ZWxlc3NoZWxsbzwvam5kaS1uYW1lPgorICAgIDxqbmRpLW5hbWU+ZWpiL015U3RhdGVsZXNzaGVsbG88L2puZGktbmFtZT4KICAgICA8L2VqYi1yZWY+CiA8L3N1bi13ZWItYXBwPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvZWFyd2l0aGFsbDIvVGVzdENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvZWFyd2l0aGFsbDIvVGVzdENsaWVudC5qYXZhCmluZGV4IDM0ZTk2NjAuLjQ5MTU1ZTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2VhcndpdGhhbGwyL1Rlc3RDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9lYXJ3aXRoYWxsMi9UZXN0Q2xpZW50LmphdmEKQEAgLTI5LDcgKzI5LDcgQEAKICAgICAgICAgVGVzdENsaWVudCBjbGllbnQgPSBuZXcgVGVzdENsaWVudCgpOwogICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3MpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgU3RyaW5nIHVybCA9IGFyZ3NbMF07CkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgICAgICAgICAgbG9nKCJDYXVnaHQgRVhQRUNURUQgSU9FeGNlcHRpb246ICIgKyBleCk7CiAgICAgICAgICAgICAgICAgcGFzcygpOwogICAgICAgICAgICAgfQotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2VhcndpdGhhbGwyL1Rlc3REZXBsT3JkZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2VhcndpdGhhbGwyL1Rlc3REZXBsT3JkZXIuamF2YQppbmRleCAxZWZlNzdiLi5hN2E5YTI1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9lYXJ3aXRoYWxsMi9UZXN0RGVwbE9yZGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvZWFyd2l0aGFsbDIvVGVzdERlcGxPcmRlci5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAgICAgICAgIFRlc3REZXBsT3JkZXIgY2xpZW50ID0gbmV3IFRlc3REZXBsT3JkZXIoKTsKICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIFN0cmluZyBwYXRoID0gYXJnc1swXTsKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgICAgIH0KLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9lYXJ3aXRoYWxsMi9UZXN0RGVwbE9yZGVyMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvZWFyd2l0aGFsbDIvVGVzdERlcGxPcmRlcjIuamF2YQppbmRleCA3MjE2YTk4Li43MTJmNjZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9lYXJ3aXRoYWxsMi9UZXN0RGVwbE9yZGVyMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2VhcndpdGhhbGwyL1Rlc3REZXBsT3JkZXIyLmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKICAgICAgICAgVGVzdERlcGxPcmRlcjIgY2xpZW50ID0gbmV3IFRlc3REZXBsT3JkZXIyKCk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoYXJncyk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBTdHJpbmcgcGF0aCA9IGFyZ3NbMF07CkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgICAgICB9Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvZWFyd2l0aGFsbDIvYXBwbGljYXRpb24ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvZWFyd2l0aGFsbDIvYXBwbGljYXRpb24ueG1sCmluZGV4IDViNWM1ZDcuLmYzMWM2M2MgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2VhcndpdGhhbGwyL2FwcGxpY2F0aW9uLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9lYXJ3aXRoYWxsMi9hcHBsaWNhdGlvbi54bWwKQEAgLTI3LDcgKzI3LDcgQEAKICAgPC9tb2R1bGU+CiAgIDwhLS0KICAgPG1vZHVsZT4KLSAgICA8amF2YT5hcHAtY2xpZW50LWljLmphcjwvamF2YT4gCisgICAgPGphdmE+YXBwLWNsaWVudC1pYy5qYXI8L2phdmE+CiAgIDwvbW9kdWxlPgogICAtLT4KICAgPG1vZHVsZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2VhcndpdGhhbGwyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2VhcndpdGhhbGwyL2J1aWxkLnhtbAppbmRleCAwZjNjZTUxLi5lOTZiYjIwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9lYXJ3aXRoYWxsMi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvZWFyd2l0aGFsbDIvYnVpbGQueG1sCkBAIC0xMjksNyArMTI5LDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0TmFtZSIgdmFsdWU9IiR7YXBwTmFtZX0iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kuYXNhZG1pbi53YXIiIGRlcGVuZHM9InByZXBhcmUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbW1vbi5kZXBsb3kuYXNhZG1pbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiIHZhbHVlPSItLWRlcGxveW1lbnRvcmRlciAxMDIgJHt0ZXN0V2FyfSIvPgpAQCAtMjAwLDkgKzIwMCw5IEBACiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAotICAgIDx0YXJnZXQgbmFtZT0iZW5hYmxlLmFzYWRtaW4iPiAKKyAgICA8dGFyZ2V0IG5hbWU9ImVuYWJsZS5hc2FkbWluIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21tb24uZW5hYmxlLmFzYWRtaW4iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iJHthcHBOYW1lfSIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InRlc3ROYW1lIiB2YWx1ZT0iJHthcHBOYW1lfSIvPgogICAgICAgICA8L2FudGNhbGw+CkBAIC0yMTAsNyArMjEwLDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iZGlzYWJsZS5hc2FkbWluIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21tb24uZGlzYWJsZS5hc2FkbWluIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9IiR7YXBwTmFtZX0iLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0TmFtZSIgdmFsdWU9IiR7YXBwTmFtZX0iLz4KICAgICAgICAgPC9hbnRjYWxsPgpAQCAtMjQ4LDcgKzI0OCw3IEBACiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAotICAgPCEtLSBhcyBpdCdzIG5vdCBlYXN5IHRvIGltcGxlbWVudCB0aGUgdW5kZXBsb3ktc3RyZWFtIHVzaW5nIHRoZSAKKyAgIDwhLS0gYXMgaXQncyBub3QgZWFzeSB0byBpbXBsZW1lbnQgdGhlIHVuZGVwbG95LXN0cmVhbSB1c2luZyB0aGUKICAgICAgICAgY3VycmVudCBKU1I4OCBEZXBsb3llciwgbGV0J3MganVzdCB1bmRlcGxveSBhbGwgLS0+CiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveS1zdHJlYW0uanNyODgiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbW1vbi51bmRlcGxveS5qc3I4OCI+CkBAIC0yODksNyArMjg5LDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJsb2cuaWQiIHZhbHVlPSIke2xvZy5pZH0iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW5jbGllbnQiIGRlcGVuZHM9ImluaXQiPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJUZXN0Q2xpZW50ICR7YXJnLmxpc3R9Ii8+CiAgICAgICAgIDxqYXZhV2l0aFJlc3VsdApAQCAtNDEyLDE1ICs0MTIsMTUgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImFkZENsdXN0ZXJSZWZzIiBkZXBlbmRzPSJwcmVwYXJlIiBpZj0iZG9DbHVzdGVyIj4KICAgICAgICAgPCEtLSBjcmVhdGUtYXBwLXJlZiB0byBjbHVzdGVyIC0tPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbW1vbi5ydW4uYXNhZG1pbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IgogICAgICAgICAgICAgICAgICAgIHZhbHVlPSJjcmVhdGUtYXBwbGljYXRpb24tcmVmIC0tcG9ydCAke2FkbWluLnBvcnR9IC0tdXNlciAke2FkbWluLnVzZXJ9IC0tcGFzc3dvcmRmaWxlICR7cGFzc3dvcmRGaWxlfSAtLXRhcmdldCAke3Rlc3RDbHVzdGVyfSAke2FwcE5hbWV9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsQ2x1c3RlclJlZnMiIGRlcGVuZHM9InByZXBhcmUiIGlmPSJkb0NsdXN0ZXIiPgogICAgICAgICA8IS0tIGRlbGV0ZS1hcHAtcmVmIHRvIHJlbW90ZSBpbnN0YW5jZSBzZXJ2ZXIgLS0+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tbW9uLnJ1bi5hc2FkbWluIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9ImRlbGV0ZS1hcHBsaWNhdGlvbi1yZWYgLS1wb3J0ICR7YWRtaW4ucG9ydH0gLS11c2VyICR7YWRtaW4udXNlcn0gLS1wYXNzd29yZGZpbGUgJHtwYXNzd29yZEZpbGV9IC0tdGFyZ2V0ICR7dGVzdENsdXN0ZXJ9ICR7YXBwTmFtZX0iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgpAQCAtNDMxLDcgKzQzMSw3IEBACiAKICAgICAgICAgPCEtLSBkZXBsb3ltZW50IHRvIERvbWFpbiAtLT4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21tb24ucnVuLmFzYWRtaW4iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iZGVwbG95IC0tcG9ydCAke2FkbWluLnBvcnR9IC0tdXNlciAke2FkbWluLnVzZXJ9IC0tcGFzc3dvcmRmaWxlICR7cGFzc3dvcmRGaWxlfSAtLXRhcmdldCBkb21haW4gJHthbGwuZWFyfSIvPgogICAgICAgICA8L2FudGNhbGw+CiAKQEAgLTQ1Miw3ICs0NTIsNyBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFkZEluc3RhbmNlUmVmIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYWRkQ2x1c3RlclJlZnMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21tb24ucnVuLmFzYWRtaW4iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iZGVwbG95IC0tcG9ydCAke2FkbWluLnBvcnR9IC0tdXNlciAke2FkbWluLnVzZXJ9IC0tcGFzc3dvcmRmaWxlICR7cGFzc3dvcmRGaWxlfSAtLWZvcmNlPXRydWUgLS10YXJnZXQgZG9tYWluICR7YWxsLmVhcn0iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi5wb3NpdGl2ZSI+CkBAIC00ODAsNyArNDgwLDcgQEAKIAogICAgICAgICA8IS0tIHVuZGVwbG95IGZyb20gRG9tYWluIC0tPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbW1vbi5ydW4uYXNhZG1pbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IgogICAgICAgICAgICAgICAgICAgIHZhbHVlPSJ1bmRlcGxveSAtLXBvcnQgJHthZG1pbi5wb3J0fSAtLXVzZXIgJHthZG1pbi51c2VyfSAtLXBhc3N3b3JkZmlsZSAke3Bhc3N3b3JkRmlsZX0gLS10YXJnZXQgZG9tYWluICR7YXBwTmFtZX0iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvZWFyd2l0aGFsbDIvanVzdGJlYW4vSnVzdEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2VhcndpdGhhbGwyL2p1c3RiZWFuL0p1c3RCZWFuLmphdmEKaW5kZXggMDk4MWRjYi4uZDAwZWZlOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvZWFyd2l0aGFsbDIvanVzdGJlYW4vSnVzdEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9lYXJ3aXRoYWxsMi9qdXN0YmVhbi9KdXN0QmVhbi5qYXZhCkBAIC0yMSwxMSArMjEsMTEgQEAKIAogcHVibGljIGludGVyZmFjZSBKdXN0QmVhbiBleHRlbmRzIEVKQk9iamVjdCB7CiAKLSAgICBwdWJsaWMgdm9pZCAKLSAgICBsb2coU3RyaW5nIG1lc3NhZ2UpIAorICAgIHB1YmxpYyB2b2lkCisgICAgbG9nKFN0cmluZyBtZXNzYWdlKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIFN0cmluZ1tdCi0gICAgZmluZEFsbE1hcmJsZXMoKSAKKyAgICBmaW5kQWxsTWFyYmxlcygpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9lYXJ3aXRoYWxsMi9qdXN0YmVhbi9KdXN0QmVhbkhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2VhcndpdGhhbGwyL2p1c3RiZWFuL0p1c3RCZWFuSG9tZS5qYXZhCmluZGV4IDUzOWZiNzAuLjNjOTdhYjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2VhcndpdGhhbGwyL2p1c3RiZWFuL0p1c3RCZWFuSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2VhcndpdGhhbGwyL2p1c3RiZWFuL0p1c3RCZWFuSG9tZS5qYXZhCkBAIC0xOSwxMSArMTksMTEgQEAKIGltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgamFrYXJ0YS5lamIuRUpCSG9tZTsKIGltcG9ydCBqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb247Ci0gCisKIHB1YmxpYyBpbnRlcmZhY2UgSnVzdEJlYW5Ib21lIGV4dGVuZHMgRUpCSG9tZSB7Ci0gCi0gICAgcHVibGljIEp1c3RCZWFuIAotICAgIGNyZWF0ZSgpIAorCisgICAgcHVibGljIEp1c3RCZWFuCisgICAgY3JlYXRlKCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiwgQ3JlYXRlRXhjZXB0aW9uOwotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9lYXJ3aXRoYWxsMi9qdXN0YmVhbi9KdXN0U2Vzc2lvbkJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2VhcndpdGhhbGwyL2p1c3RiZWFuL0p1c3RTZXNzaW9uQmVhbi5qYXZhCmluZGV4IDQyYjNkZjguLjcxM2VmYmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2VhcndpdGhhbGwyL2p1c3RiZWFuL0p1c3RTZXNzaW9uQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2VhcndpdGhhbGwyL2p1c3RiZWFuL0p1c3RTZXNzaW9uQmVhbi5qYXZhCkBAIC0yMSwyNSArMjEsMjUgQEAKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dDsKIAogcHVibGljIGNsYXNzIEp1c3RTZXNzaW9uQmVhbiBpbXBsZW1lbnRzIFNlc3Npb25CZWFuIHsKLSAKKwogICAgIHByaXZhdGUgU2Vzc2lvbkNvbnRleHQgY3R4OwotICAgIAotICAgIHB1YmxpYyB2b2lkIAotICAgIGVqYkNyZWF0ZSgpIAotICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIAorCisgICAgcHVibGljIHZvaWQKKyAgICBlamJDcmVhdGUoKQorICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uCiAgICAgewogICAgICAgICBsb2coIkp1c3RTZXNzaW9uQmVhbi5lamJDcmVhdGUoKS4uLiIpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIAotICAgIGVqYlJlbW92ZSgpIAotICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIAorICAgIHB1YmxpYyB2b2lkCisgICAgZWpiUmVtb3ZlKCkKKyAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgbG9nKCJKdXN0U2Vzc2lvbkJlYW4uZWpiUmVtb3ZlKCkuLi4iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZAotICAgIGxvZyhTdHJpbmcgbWVzc2FnZSkgCisgICAgbG9nKFN0cmluZyBtZXNzYWdlKQogICAgIHsKICAgICAgICAgTG9nLmxvZyhtZXNzYWdlKTsKICAgICB9CkBAIC01Myw0MyArNTMsNDMgQEAKICAgICAgICAgc3RyQXJyYXlbMV0gPSAiWW91IGhhdmUgbG9zdCBhbGwgeW91ciBtYXJibGVzLiI7CiAgICAgICAgIHJldHVybiBzdHJBcnJheTsKICAgICB9Ci0gICAgCi0gICAgCi0gICAgLyoqIAorCisKKyAgICAvKioKICAgICAgKiBlamJEZXN0cm95IC0gY2FsbGVkIGJ5IHRoZSBDb250YWluZXIgYmVmb3JlIHRoaXMgYmVhbiBpcyBkZXN0cm95ZWQuCi0gICAgICovIAotICAgIHB1YmxpYyB2b2lkIAotICAgIGVqYkRlc3Ryb3koKSAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZAorICAgIGVqYkRlc3Ryb3koKQogICAgIHsKICAgICAgICAgbG9nKCJKdXN0U2Vzc2lvbkJlYW4uZWpiRGVzdHJveSgpLi4uIik7CiAgICAgfQotICAgIAotICAgIC8qKiAKLSAgICAgKiBlamJBY3RpdmF0ZSAtIGNhbGxlZCBieSB0aGUgQ29udGFpbmVyIGFmdGVyIHRoaXMgYmVhbiBpbnN0YW5jZSAKKworICAgIC8qKgorICAgICAqIGVqYkFjdGl2YXRlIC0gY2FsbGVkIGJ5IHRoZSBDb250YWluZXIgYWZ0ZXIgdGhpcyBiZWFuIGluc3RhbmNlCiAgICAgICogaXMgYWN0aXZhdGVkIGZyb20gaXRzIHBhc3NpdmUgc3RhdGUuCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgCi0gICAgZWpiQWN0aXZhdGUoKSAKKyAgICBwdWJsaWMgdm9pZAorICAgIGVqYkFjdGl2YXRlKCkKICAgICB7CiAgICAgICAgIGxvZygiSnVzdFNlc3Npb25CZWFuLmVqYkFjdGl2YXRlKCkuLi4iKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBlamJQYXNzaXZhdGUgLSBjYWxsZWQgYnkgdGhlIENvbnRhaW5lciBiZWZvcmUgdGhpcyBiZWFuIGluc3RhbmNlIAotICAgICAqIGlzIHB1dCBpbiBwYXNzaXZlIHN0YXRlLiAKLSAgICAgKi8gCi0gICAgcHVibGljIHZvaWQgCi0gICAgZWpiUGFzc2l2YXRlKCkgCisgICAgICogZWpiUGFzc2l2YXRlIC0gY2FsbGVkIGJ5IHRoZSBDb250YWluZXIgYmVmb3JlIHRoaXMgYmVhbiBpbnN0YW5jZQorICAgICAqIGlzIHB1dCBpbiBwYXNzaXZlIHN0YXRlLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkCisgICAgZWpiUGFzc2l2YXRlKCkKICAgICB7CiAgICAgICAgIGxvZygiSnVzdFNlc3Npb25CZWFuLmVqYlBhc3NpdmF0ZSgpLi4uIik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogc2V0U2Vzc2lvbkNvbnRleHQgLSBjYWxsZWQgYnkgdGhlIENvbnRhaW5lciBhZnRlciBjcmVhdGlvbiBvZiB0aGlzCiAgICAgICogYmVhbiBpbnN0YW5jZS4KICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCAKLSAgICBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBjb250ZXh0KSAKKyAgICBwdWJsaWMgdm9pZAorICAgIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IGNvbnRleHQpCiAgICAgewogICAgICAgICBsb2coIkp1c3RTZXNzaW9uQmVhbi5zZXRTZXNzaW9uQ29udGV4dChjdHgpLi4uIGN0eCA9ICIgKyBjdHgpOwogICAgICAgICBjdHggPSBjb250ZXh0OwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvZWFyd2l0aGFsbDIvanVzdGJlYW4vTG9nLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9lYXJ3aXRoYWxsMi9qdXN0YmVhbi9Mb2cuamF2YQppbmRleCBmM2I1ZTU1Li4zNGFhNGY0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9lYXJ3aXRoYWxsMi9qdXN0YmVhbi9Mb2cuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9lYXJ3aXRoYWxsMi9qdXN0YmVhbi9Mb2cuamF2YQpAQCAtMTYsNyArMTYsNyBAQAogCiBwYWNrYWdlIGp1c3RiZWFuOwogCi1wdWJsaWMgY2xhc3MgTG9nIGltcGxlbWVudHMgamF2YS5pby5TZXJpYWxpemFibGUgCitwdWJsaWMgY2xhc3MgTG9nIGltcGxlbWVudHMgamF2YS5pby5TZXJpYWxpemFibGUKIHsKICAgcHVibGljIHN0YXRpYyB2b2lkCiAgIGxvZyAoU3RyaW5nIG1lc3NhZ2UpCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9lYXJ3aXRoYWxsMi9qdXN0d2ViL0p1c3RXZWJTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9lYXJ3aXRoYWxsMi9qdXN0d2ViL0p1c3RXZWJTZXJ2bGV0LmphdmEKaW5kZXggOWQ4YjI5Zi4uZTBiNzg5NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvZWFyd2l0aGFsbDIvanVzdHdlYi9KdXN0V2ViU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2VhcndpdGhhbGwyL2p1c3R3ZWIvSnVzdFdlYlNlcnZsZXQuamF2YQpAQCAtNTIsNyArNTIsNyBAQAogICAgIH0KICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotICAgIH0gICAgICAgIAorICAgIH0KIAogICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSnVzdFdlYlNlcnZsZXQuc2VydmljZSgpLi4uIEp1c3RCZWFuIGNyZWF0ZWQuIik7CiAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVU0VSTkFNRSA9ICIgKyBnZXRJbml0UGFyYW1ldGVyKCJVU0VSTkFNRSIpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2VhcndpdGhlamIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvZWFyd2l0aGVqYi9idWlsZC54bWwKaW5kZXggNDlhY2QyYy4uODY2Y2M2OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvZWFyd2l0aGVqYi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvZWFyd2l0aGVqYi9idWlsZC54bWwKQEAgLTIwLDcgKzIwLDcgQEAKIAogPCFFTlRJVFkgY29tbW9uQnVpbGQgU1lTVEVNICIuLy4uLy4uL2NvbmZpZy9jb21tb24ueG1sIj4KIF0+Ci0gCisKIDxwcm9qZWN0IG5hbWU9InN0YXRlbGVzc2hlbGxvIiBkZWZhdWx0PSJhbGwiIGJhc2VkaXI9Ii4iPgogCiAgICAgJmNvbW1vbkJ1aWxkOwpAQCAtMjgsNTEgKzI4LDUxIEBACiAgICAgPHByb3BlcnR5IG5hbWU9InRlc3ROYW1lIiB2YWx1ZT0iU3RhdGVsZXNzSGVsbG9FamIiLz4KICAgICA8cHJvcGVydHkgbmFtZT0iYXJjaGl2ZWRpciIgdmFsdWU9IiR7YnVpbGR9L2FyY2hpdmVzIi8+CiAgICAgPHRhcmdldCBuYW1lPSJwcmVwYXJlIiBkZXBlbmRzPSJpbml0Ij4KLQkJPG1rZGlyIGRpcj0iJHtidWlsZH0iIC8+Ci0JCTxta2RpciBkaXI9IiR7YXJjaGl2ZWRpcn0iIC8+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJwb3J0YWJsZS5lYXIiIHZhbHVlPSIke2FyY2hpdmVkaXJ9L2VhcndpdGhlamItcG9ydGFibGUuZWFyIi8+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJwb3J0YWJsZS5qYXIiIHZhbHVlPSIke2FyY2hpdmVkaXJ9L2VhcndpdGhlamItcG9ydGFibGUuamFyIi8+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJhbGwuZWFyIiB2YWx1ZT0iJHthcmNoaXZlZGlyfS9lYXJ3aXRoZWpiLmVhciIvPgotCQk8cHJvcGVydHkgbmFtZT0iYWxsLmphciIgdmFsdWU9IiR7YXJjaGl2ZWRpcn0vZWFyd2l0aGVqYi5qYXIiLz4KLQkJPHByb3BlcnR5IG5hbWU9ImRlcGxveXBsYW4uamFyIiB2YWx1ZT0iJHthcmNoaXZlZGlyfS9lYXJ3aXRoZWpiLWRlcGxveXBsYW4uamFyIi8+CisgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGR9IiAvPgorICAgICAgICA8bWtkaXIgZGlyPSIke2FyY2hpdmVkaXJ9IiAvPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0icG9ydGFibGUuZWFyIiB2YWx1ZT0iJHthcmNoaXZlZGlyfS9lYXJ3aXRoZWpiLXBvcnRhYmxlLmVhciIvPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0icG9ydGFibGUuamFyIiB2YWx1ZT0iJHthcmNoaXZlZGlyfS9lYXJ3aXRoZWpiLXBvcnRhYmxlLmphciIvPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0iYWxsLmVhciIgdmFsdWU9IiR7YXJjaGl2ZWRpcn0vZWFyd2l0aGVqYi5lYXIiLz4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9ImFsbC5qYXIiIHZhbHVlPSIke2FyY2hpdmVkaXJ9L2VhcndpdGhlamIuamFyIi8+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkZXBsb3lwbGFuLmphciIgdmFsdWU9IiR7YXJjaGl2ZWRpcn0vZWFyd2l0aGVqYi1kZXBsb3lwbGFuLmphciIvPgogICAgIDwvdGFyZ2V0PgotCQorCiAgICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZSIgZGVwZW5kcz0icHJlcGFyZSI+Ci0JICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7ZGVwbG95cGxhbi5qYXJ9Ij4KLQkgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtiYXNlZGlyfSIgaW5jbHVkZXM9InN1bi1lamItamFyLnhtbCIvPgotCQk8L2phcj4JICAgCisgICAgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7ZGVwbG95cGxhbi5qYXJ9Ij4KKyAgICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtiYXNlZGlyfSIgaW5jbHVkZXM9InN1bi1lamItamFyLnhtbCIvPgorICAgICAgICA8L2phcj4KIAotCQk8bWtkaXIgZGlyPSIke2J1aWxkfS9NRVRBLUlORiIvPgotCQk8Y29weSBmaWxlPSJlamItamFyLnhtbCIgdG9kaXI9IiR7YnVpbGR9L01FVEEtSU5GIi8+Ci0JCTxqYXIgZGVzdGZpbGU9IiR7cG9ydGFibGUuamFyfSI+Ci0JCSAgIDxmaWxlc2V0IGRpcj0iLi4vLi4vYnVpbGQvZWpiL3N0YXRlbGVzc2hlbGxvIiAKKyAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZH0vTUVUQS1JTkYiLz4KKyAgICAgICAgPGNvcHkgZmlsZT0iZWpiLWphci54bWwiIHRvZGlyPSIke2J1aWxkfS9NRVRBLUlORiIvPgorICAgICAgICA8amFyIGRlc3RmaWxlPSIke3BvcnRhYmxlLmphcn0iPgorICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4uLy4uL2J1aWxkL2VqYi9zdGF0ZWxlc3NoZWxsbyIKICAgICAgICAgICAgICAgICAgICAgZXhjbHVkZXM9IioqL2FyY2hpdmVzLyoqIi8+Ci0JCSAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZH0iCisgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZH0iCiAgICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVzPSIqKi9hcmNoaXZlcy8qKiIvPgotCQk8L2phcj4KKyAgICAgICAgPC9qYXI+CiAKLQkJPGNvcHkgZmlsZT0ic3VuLWVqYi1qYXIueG1sIiB0b2Rpcj0iJHtidWlsZH0vTUVUQS1JTkYiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotCQk8amFyIGRlc3RmaWxlPSIke2FsbC5qYXJ9Ij4KLQkJICAgPGZpbGVzZXQgZGlyPSIuLi8uLi9idWlsZC9lamIvc3RhdGVsZXNzaGVsbG8iLz4KLQkJICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkfSIKKyAgICAgICAgPGNvcHkgZmlsZT0ic3VuLWVqYi1qYXIueG1sIiB0b2Rpcj0iJHtidWlsZH0vTUVUQS1JTkYiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICAgICAgICA8amFyIGRlc3RmaWxlPSIke2FsbC5qYXJ9Ij4KKyAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuLi8uLi9idWlsZC9lamIvc3RhdGVsZXNzaGVsbG8iLz4KKyAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkfSIKICAgICAgICAgICAgICAgICAgICAgZXhjbHVkZXM9IioqL2FyY2hpdmVzLyoqIi8+Ci0JCTwvamFyPgorICAgICAgICA8L2phcj4KIAotCQk8bWtkaXIgZGlyPSIke2J1aWxkfS9NRVRBLUlORiIvPgotCQk8Y29weSBmaWxlPSJwb3J0YWJsZS1hcHAueG1sIiB0b2ZpbGU9IiR7YnVpbGR9L01FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIvPgotCQk8Y29weSBmaWxlPSIke3BvcnRhYmxlLmphcn0iIHRvZGlyPSIke2J1aWxkfSIvPgotCQk8amFyIGRlc3RmaWxlPSIke3BvcnRhYmxlLmVhcn0iIGJhc2VkaXI9IiR7YnVpbGR9IiBleGNsdWRlcz0iKiplamItamFyLnhtbCIvPgorICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkfS9NRVRBLUlORiIvPgorICAgICAgICA8Y29weSBmaWxlPSJwb3J0YWJsZS1hcHAueG1sIiB0b2ZpbGU9IiR7YnVpbGR9L01FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIvPgorICAgICAgICA8Y29weSBmaWxlPSIke3BvcnRhYmxlLmphcn0iIHRvZGlyPSIke2J1aWxkfSIvPgorICAgICAgICA8amFyIGRlc3RmaWxlPSIke3BvcnRhYmxlLmVhcn0iIGJhc2VkaXI9IiR7YnVpbGR9IiBleGNsdWRlcz0iKiplamItamFyLnhtbCIvPgogCi0JCTxkZWxldGUgZmlsZT0iJHtidWlsZH0vZWFyd2l0aGVqYi1wb3J0YWJsZS5qYXIiLz4KLQkJPGRlbGV0ZSBmaWxlPSIke2J1aWxkfS9NRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiLz4KLQkJPGRlbGV0ZSBmaWxlPSIke2J1aWxkfS9NRVRBLUlORi9zdW4tZWpiLWphci54bWwiLz4KLQkJPGRlbGV0ZSBmaWxlPSIke2J1aWxkfS9NRVRBLUlORi9lamItamFyLnhtbCIvPgotCQk8ZGVsZXRlIGZpbGU9IiR7YnVpbGR9L2VhcndpdGhlamItcG9ydGFibGUuamFyIi8+Ci0JCTxjb3B5IGZpbGU9ImFwcGxpY2F0aW9uLnhtbCIgdG9kaXI9IiR7YnVpbGR9L01FVEEtSU5GIi8+Ci0JCTxjb3B5IGZpbGU9ImFsdC1lamJqYXIueG1sIiB0b2Rpcj0iJHtidWlsZH0iLz4KLQkJPGNvcHkgZmlsZT0ic3VuLWFsdC1lamJqYXIueG1sIiB0b2Rpcj0iJHtidWlsZH0iIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotCQk8Y29weSBmaWxlPSIke2FsbC5qYXJ9IiB0b2Rpcj0iJHtidWlsZH0iLz4KLQkJPGphciBkZXN0ZmlsZT0iJHthbGwuZWFyfSIgYmFzZWRpcj0iJHtidWlsZH0iIGV4Y2x1ZGVzPSIqKi9hcmNoaXZlcy8qKiIvPgorICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7YnVpbGR9L2VhcndpdGhlamItcG9ydGFibGUuamFyIi8+CisgICAgICAgIDxkZWxldGUgZmlsZT0iJHtidWlsZH0vTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIi8+CisgICAgICAgIDxkZWxldGUgZmlsZT0iJHtidWlsZH0vTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sIi8+CisgICAgICAgIDxkZWxldGUgZmlsZT0iJHtidWlsZH0vTUVUQS1JTkYvZWpiLWphci54bWwiLz4KKyAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2J1aWxkfS9lYXJ3aXRoZWpiLXBvcnRhYmxlLmphciIvPgorICAgICAgICA8Y29weSBmaWxlPSJhcHBsaWNhdGlvbi54bWwiIHRvZGlyPSIke2J1aWxkfS9NRVRBLUlORiIvPgorICAgICAgICA8Y29weSBmaWxlPSJhbHQtZWpiamFyLnhtbCIgdG9kaXI9IiR7YnVpbGR9Ii8+CisgICAgICAgIDxjb3B5IGZpbGU9InN1bi1hbHQtZWpiamFyLnhtbCIgdG9kaXI9IiR7YnVpbGR9IiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KKyAgICAgICAgPGNvcHkgZmlsZT0iJHthbGwuamFyfSIgdG9kaXI9IiR7YnVpbGR9Ii8+CisgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YWxsLmVhcn0iIGJhc2VkaXI9IiR7YnVpbGR9IiBleGNsdWRlcz0iKiovYXJjaGl2ZXMvKioiLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95LmFzYWRtaW4iIGRlcGVuZHM9InByZXBhcmUiPgpAQCAtMTMxLDcgKzEzMSw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveS5hdXRvZGVwbG95Ij4KICAgICA8L3RhcmdldD4KLQkKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJydW4ucG9zaXRpdmUiLz4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuLnBvc2l0aXZlIiBkZXBlbmRzPSJpbml0LHNldE9yYlBvcnQiPgpAQCAtMTg5LDcgKzE4OSw3IEBACiAgICAgICAgIDxqYXZhV2l0aFJlc3VsdAogICAgICAgICAgICAgZm9yaz0idHJ1ZSIKICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIKLSAgICAgICAgICAgIGp2bT0iJHtKQVZBfSIJCisgICAgICAgICAgICBqdm09IiR7SkFWQX0iCiAgICAgICAgICAgICBjbGFzc25hbWU9InN0YW5kYWxvbmVjbGllbnQuSGVsbG9DbGllbnQiCiAgICAgICAgICAgICBvdXRwdXQ9IiR7YnVpbGR9LyR7bG9nLmlkfS5vdXRwdXQubG9nIgogICAgICAgICAgICAgcmVzdWx0cHJvcGVydHk9InJlc3VsdCI+CkBAIC0yMDUsNyArMjA1LDcgQEAKICAgICAgICAgICAgICAgICA8cGF0aCBsb2NhdGlvbj0iJHthcmNoaXZlZGlyfS9lYXJ3aXRoZWpiLmphciIvPgogICAgICAgICAgICAgPC9jbGFzc3BhdGg+CiAKLQkgICAgPGFyZyBsaW5lPSIke2FyZy5saXN0fSIvPgorICAgICAgICA8YXJnIGxpbmU9IiR7YXJnLmxpc3R9Ii8+CiAgICAgICAgIDwvamF2YVdpdGhSZXN1bHQ+CiAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwcm9jZXNzUmVzdWx0Ij4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2VhcndpdGh3YXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvZWFyd2l0aHdhci9idWlsZC54bWwKaW5kZXggMjRiYmRiNy4uMjVlMzc1MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvZWFyd2l0aHdhci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvZWFyd2l0aHdhci9idWlsZC54bWwKQEAgLTE2NSw3ICsxNjUsNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImxvZy5pZCIgdmFsdWU9IiR7bG9nLmlkfSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bmNsaWVudCIgZGVwZW5kcz0iaW5pdCI+CiAgICAgICAgIDxqYXZhV2l0aFJlc3VsdAogICAgICAgICAgICAgZm9yaz0idHJ1ZSIKQEAgLTIxMSwxMyArMjExLDEzIEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLm5lZ2F0aXZlIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJsb2cuaWQiIHZhbHVlPSIzIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZGVzYyIgdmFsdWU9ImVhci9lYXJ3aXRod2FyIFRlc3QgYXNhZG1pbiBkaXNhYmxlIi8+Ci0gICAgICAgIDwvYW50Y2FsbD4gCisgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVuYWJsZS5hc2FkbWluIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLnBvc2l0aXZlIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJsb2cuaWQiIHZhbHVlPSI0Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZGVzYyIgdmFsdWU9ImVhci9lYXJ3aXRod2FyIFRlc3QgYXNhZG1pbiBlbmFibGUiLz4KLSAgICAgICAgPC9hbnRjYWxsPiAKKyAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3kuYXNhZG1pbiIvPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJDbGFzc1BhdGgvY2xpZW50L2kxOG4vc2ltcGxlL1Rlc3RDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYkNsYXNzUGF0aC9jbGllbnQvaTE4bi9zaW1wbGUvVGVzdENsaWVudC5qYXZhCmluZGV4IDQyMzI5MDIuLjA0ZjEwMWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYkNsYXNzUGF0aC9jbGllbnQvaTE4bi9zaW1wbGUvVGVzdENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYkNsYXNzUGF0aC9jbGllbnQvaTE4bi9zaW1wbGUvVGVzdENsaWVudC5qYXZhCkBAIC0yOSw3ICsyOSw3IEBACiAgICAgICAgIFRlc3RDbGllbnQgY2xpZW50ID0gbmV3IFRlc3RDbGllbnQoKTsKICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIFN0cmluZyB1cmwgPSBhcmdzWzBdOwpAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICAgICAgICAgIGxvZygiQ2F1Z2h0IEVYUEVDVEVEIElPRXhjZXB0aW9uOiAiICsgZXgpOwogICAgICAgICAgICAgICAgIHBhc3MoKTsKICAgICAgICAgICAgIH0KLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJDbGFzc1BhdGgvZGVzY3JpcHRvci9zdW4td2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYkNsYXNzUGF0aC9kZXNjcmlwdG9yL3N1bi13ZWIueG1sCmluZGV4IGY3Zjg2MjcuLmM5MDg3OTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYkNsYXNzUGF0aC9kZXNjcmlwdG9yL3N1bi13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYkNsYXNzUGF0aC9kZXNjcmlwdG9yL3N1bi13ZWIueG1sCkBAIC0yMiw4ICsyMiw4IEBACiA8c3VuLXdlYi1hcHA+CiAgIDxzZXNzaW9uLWNvbmZpZz4KICAgICA8c2Vzc2lvbi1tYW5hZ2VyLz4KLSAgPC9zZXNzaW9uLWNvbmZpZz4gIAotICA8anNwLWNvbmZpZy8+IAorICA8L3Nlc3Npb24tY29uZmlnPgorICA8anNwLWNvbmZpZy8+CiAgIDxsb2NhbGUtY2hhcnNldC1pbmZvIGRlZmF1bHQtbG9jYWxlPSJqYSI+CiAgICAgICA8bG9jYWxlLWNoYXJzZXQtbWFwIGNoYXJzZXQ9IkVVQy1KUCIgbG9jYWxlPSJqYSIgYWdlbnQ9Ik1vemlsbGEvNC43IFtlbl0gKFgxMTsgSTsgU3VuT1MgNS44IHN1bjR1KSI+CiAgICAgICAgIDxkZXNjcmlwdGlvbj5DaGFyc2V0IG1hcHBpbmcgZm9yIEphcGFuZXNlIGxvY2FsZTwvZGVzY3JpcHRpb24+CkBAIC0zNiwxMSArMzYsMTEgQEAKICAgICAgIDwvbG9jYWxlLWNoYXJzZXQtbWFwPgogICAgICAgPGxvY2FsZS1jaGFyc2V0LW1hcCBjaGFyc2V0PSJTaGlmdF9KSVMiIGxvY2FsZT0iamEiIGFnZW50PSJNb3ppbGxhLzQuNzkgW2VuXSAoV2luZG93cyBOVCA1LjA7IFUpIj4KICAgICAgICAgPGRlc2NyaXB0aW9uPkNoYXJzZXQgbWFwcGluZyBmb3IgSmFwYW5lc2UgbG9jYWxlPC9kZXNjcmlwdGlvbj4KLSAgICAgIDwvbG9jYWxlLWNoYXJzZXQtbWFwPiAgICAgIAorICAgICAgPC9sb2NhbGUtY2hhcnNldC1tYXA+CiAgICAgICA8bG9jYWxlLWNoYXJzZXQtbWFwIGNoYXJzZXQ9IklTTy04ODU5LTEiIGxvY2FsZT0iZGVfREUiPgogICAgICAgICA8ZGVzY3JpcHRpb24+Q2hhcnNldCBtYXBwaW5nIGZvciBHZXJtYW4gbG9jYWxlPC9kZXNjcmlwdGlvbj4KICAgICAgIDwvbG9jYWxlLWNoYXJzZXQtbWFwPgogICAgICAgPHBhcmFtZXRlci1lbmNvZGluZyBmb3JtLWhpbnQtZmllbGQ9ImNoYXJzZXR2YWwiIC8+Ci0gIDwvbG9jYWxlLWNoYXJzZXQtaW5mbz4gIAorICA8L2xvY2FsZS1jaGFyc2V0LWluZm8+CiA8L3N1bi13ZWItYXBwPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJDbGFzc1BhdGgvbWlzYy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJDbGFzc1BhdGgvbWlzYy9idWlsZC54bWwKaW5kZXggODc2N2MxNC4uODQwM2RlMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliQ2xhc3NQYXRoL21pc2MvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYkNsYXNzUGF0aC9taXNjL2J1aWxkLnhtbApAQCAtMjMsMzAgKzIzLDMwIEBACiAKIDxwcm9qZWN0IG5hbWU9ImkxOG4tc2ltcGxlIiBkZWZhdWx0PSJhbGwiIGJhc2VkaXI9Ii4iPgogCi0JJmNvbW1vbkJ1aWxkOworICAgICZjb21tb25CdWlsZDsKICAgICA8cHJvcGVydHkgbmFtZT0iYXJjaGl2ZWRpciIgdmFsdWU9IiR7YnVpbGR9L2FyY2hpdmVzIi8+CiAKLQk8dGFyZ2V0IG5hbWU9InByZXBhcmUiIGRlcGVuZHM9ImluaXQiPgorICAgIDx0YXJnZXQgbmFtZT0icHJlcGFyZSIgZGVwZW5kcz0iaW5pdCI+CiAgICAgICAgICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZH0iIC8+CiAgICAgICAgIDwvdGFyZ2V0PgogCi0JCi0JPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJwcmVwYXJlIj4KLQkJPGphdmFjIHNyY2Rpcj0ic2FtcGxlcyIgZGVzdGRpcj0iJHtidWlsZH0iPgotCSAgICAJPGNsYXNzcGF0aD4KLQkgICAgCSAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2luc3R9L2xpYi9qMmVlLmphciIvPgotCSAgICAJICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7aW5zdH0vbGliL2FwcHNlcnYtcnQuamFyIi8+CSAgICAJICAKLSAgICAJCSAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2J1aWxkfS9XRUItSU5GL2xpYi9saWJyYXJ5LmphciIvPgotCQkgICAgPC9jbGFzc3BhdGg+CQkKLQkJIDwvamF2YWM+Ci0JPC90YXJnZXQ+Ci0JCi0JPHRhcmdldCBuYW1lPSJhc3NlbWJsZSIgZGVwZW5kcz0iY29tcGlsZSI+Ci0JCTxqYXIgZGVzdGZpbGU9IiR7YXJjaGl2ZWRpcn0vYS9iL2kxOG4tc2ltcGxlLmphciIgCi0gICAgICAgICAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkfSIvPgotCTwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCIgZGVwZW5kcz0iYXNzZW1ibGUiPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0icHJlcGFyZSI+CisgICAgICAgIDxqYXZhYyBzcmNkaXI9InNhbXBsZXMiIGRlc3RkaXI9IiR7YnVpbGR9Ij4KKyAgICAgICAgICAgIDxjbGFzc3BhdGg+CisgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtpbnN0fS9saWIvajJlZS5qYXIiLz4KKyAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2luc3R9L2xpYi9hcHBzZXJ2LXJ0LmphciIvPgorICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7YnVpbGR9L1dFQi1JTkYvbGliL2xpYnJhcnkuamFyIi8+CisgICAgICAgICAgICA8L2NsYXNzcGF0aD4KKyAgICAgICAgIDwvamF2YWM+CisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIiBkZXBlbmRzPSJjb21waWxlIj4KKyAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthcmNoaXZlZGlyfS9hL2IvaTE4bi1zaW1wbGUuamFyIgorICAgICAgICAgICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZH0iLz4KKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0icHJpdmF0ZS1hbGwiIGRlcGVuZHM9ImFzc2VtYmxlIj4KKyAgICA8L3RhcmdldD4KIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliQ2xhc3NQYXRoL21pc2Mvc2FtcGxlcy9pMThuL3NpbXBsZS9pMThudGFnL01lc3NhZ2VUYWcuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYkNsYXNzUGF0aC9taXNjL3NhbXBsZXMvaTE4bi9zaW1wbGUvaTE4bnRhZy9NZXNzYWdlVGFnLmphdmEKaW5kZXggNTZkMTZmMi4uYjg0YjE0YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliQ2xhc3NQYXRoL21pc2Mvc2FtcGxlcy9pMThuL3NpbXBsZS9pMThudGFnL01lc3NhZ2VUYWcuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJDbGFzc1BhdGgvbWlzYy9zYW1wbGVzL2kxOG4vc2ltcGxlL2kxOG50YWcvTWVzc2FnZVRhZy5qYXZhCkBAIC0yNiwxMTAgKzI2LDExMCBAQAogLyoqCiAgKiBBIHNpbXBsZSBtZXNzYWdlIHRhZ2hhbmRsZXIgdG8gZGlzcGxheSBsb2NhbGl6ZWQgbWVzc2FnZSBmcm9tIGEgcmVzb3VyY2UgYnVuZGxlIGJhc2VkIG9uIGpzcCByZXF1ZXN0CiAgKiBAYXV0aG9yICBDaGFuZCBCYXNoYQotICogQHZlcnNpb24JMS4wCisgKiBAdmVyc2lvbiAgICAxLjAKICAqLwogCiBwdWJsaWMgY2xhc3MgTWVzc2FnZVRhZyBleHRlbmRzIFRhZ1N1cHBvcnQgewogCi0gICAgcHJpdmF0ZSBTdHJpbmcga2V5CQkJPSBudWxsOwotCXByaXZhdGUgU3RyaW5nIGJ1bmRsZU5hbWUJPSBudWxsOwotCXByaXZhdGUgU3RyaW5nIGxhbmd1YWdlCQk9IG51bGw7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgY291bnRyeQkJPSBudWxsOwotICAgIHByaXZhdGUgU3RyaW5nIHZhcmlhbnQJCT0gbnVsbDsKKyAgICBwcml2YXRlIFN0cmluZyBrZXkgICAgICAgICAgICA9IG51bGw7CisgICAgcHJpdmF0ZSBTdHJpbmcgYnVuZGxlTmFtZSAgICA9IG51bGw7CisgICAgcHJpdmF0ZSBTdHJpbmcgbGFuZ3VhZ2UgICAgICAgID0gbnVsbDsKKyAgICBwcml2YXRlIFN0cmluZyBjb3VudHJ5ICAgICAgICA9IG51bGw7CisgICAgcHJpdmF0ZSBTdHJpbmcgdmFyaWFudCAgICAgICAgPSBudWxsOwogCi0JLyoqCi0JICogU2V0IHRoZSB1c2VyIHByZWZlcnJlZCBsYW5ndWFnZQotCSAqLwotCXB1YmxpYyB2b2lkIHNldExhbmd1YWdlKFN0cmluZyBsYW5nKSB7CisgICAgLyoqCisgICAgICogU2V0IHRoZSB1c2VyIHByZWZlcnJlZCBsYW5ndWFnZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldExhbmd1YWdlKFN0cmluZyBsYW5nKSB7CiAgICAgICAgIHRoaXMubGFuZ3VhZ2UgPSBsYW5nOwotCX0KLQotICAgIC8qKgotCSAqIEdldCB0aGUgdXNlciBwcmVmZXJyZWQgbGFuZ3VhZ2UKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldExhbmd1YWdlKCkgewotCQlyZXR1cm4gbGFuZ3VhZ2U7Ci0JfQotCi0JLyoqCi0JICogU2V0IHRoZSB1c2VyIHByZWZlcnJlZCBjb3VudHJ5Ci0JICovCi0JcHVibGljIHZvaWQgc2V0Q291bnRyeShTdHJpbmcgY291bnRyeSkgewotCQl0aGlzLmNvdW50cnkgPSBjb3VudHJ5OwotCX0KLQotICAgIC8qKgotCSAqIEdldCB0aGUgdXNlciBwcmVmZXJyZWQgY291bnRyeQotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0Q291bnRyeSgpIHsKLQkJcmV0dXJuIGNvdW50cnk7CiAgICAgfQogCiAgICAgLyoqCi0JICogU2V0IHRoZSB1c2VyIHByZWZlcnJlZCB2YXJpYW50Ci0JICovCisgICAgICogR2V0IHRoZSB1c2VyIHByZWZlcnJlZCBsYW5ndWFnZQorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgZ2V0TGFuZ3VhZ2UoKSB7CisgICAgICAgIHJldHVybiBsYW5ndWFnZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIHVzZXIgcHJlZmVycmVkIGNvdW50cnkKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRDb3VudHJ5KFN0cmluZyBjb3VudHJ5KSB7CisgICAgICAgIHRoaXMuY291bnRyeSA9IGNvdW50cnk7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0IHRoZSB1c2VyIHByZWZlcnJlZCBjb3VudHJ5CisgICAgICovCisgICAgcHVibGljIFN0cmluZyBnZXRDb3VudHJ5KCkgeworICAgICAgICByZXR1cm4gY291bnRyeTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIHVzZXIgcHJlZmVycmVkIHZhcmlhbnQKKyAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRWYXJpYW50KFN0cmluZyB2YXJpYW50KSB7Ci0JICAgIHRoaXMudmFyaWFudCA9IHZhcmlhbnQ7Ci0JfQotCi0gICAgLyoqCi0JICogR2V0IHRoZSB1c2VyIHByZWZlcnJlZCB2YXJpYW50Ci0JICovCi0JcHVibGljIFN0cmluZyBnZXRWYXJpYW50KCkgewotCSAgICByZXR1cm4gdmFyaWFudDsKKyAgICAgICAgdGhpcy52YXJpYW50ID0gdmFyaWFudDsKICAgICB9CiAKICAgICAvKioKLQkgKiBTZXQgdGhlIHVzZXIgcHJlZmVycmVkIHJlc291cmNlIGJ1bmRsZSBuYW1lCi0JICovCi0JcHVibGljIHZvaWQgc2V0TmFtZSAoU3RyaW5nIG5hbWUpIHsKLQkJdGhpcy5idW5kbGVOYW1lID0gbmFtZTsKLQl9CisgICAgICogR2V0IHRoZSB1c2VyIHByZWZlcnJlZCB2YXJpYW50CisgICAgICovCisgICAgcHVibGljIFN0cmluZyBnZXRWYXJpYW50KCkgeworICAgICAgICByZXR1cm4gdmFyaWFudDsKKyAgICB9CiAKICAgICAvKioKLQkgKiBTZXQgdGhlIG1lc3NhZ2Uga2V5IHJlcXVpcmVkIHRvIHJldHJpZXZlIG1lc3NhZ2UgZnJvbSB0aGUgcmVzb3VyY2UgYnVuZGxlCi0JICovCisgICAgICogU2V0IHRoZSB1c2VyIHByZWZlcnJlZCByZXNvdXJjZSBidW5kbGUgbmFtZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldE5hbWUgKFN0cmluZyBuYW1lKSB7CisgICAgICAgIHRoaXMuYnVuZGxlTmFtZSA9IG5hbWU7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0IHRoZSBtZXNzYWdlIGtleSByZXF1aXJlZCB0byByZXRyaWV2ZSBtZXNzYWdlIGZyb20gdGhlIHJlc291cmNlIGJ1bmRsZQorICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldEtleShTdHJpbmcga2V5KSB7CiAgICAgICAgIHRoaXMua2V5ID0ga2V5OwogICAgIH0KIAogICAgIC8qKgotCSAqIEdldCB0aGUgbWVzc2FnZSBrZXkgcmVxdWlyZWQgdG8gcmV0cmlldmUgbWVzc2FnZSBmcm9tIHRoZSByZXNvdXJjZSBidW5kbGUKLQkgKi8KKyAgICAgKiBHZXQgdGhlIG1lc3NhZ2Uga2V5IHJlcXVpcmVkIHRvIHJldHJpZXZlIG1lc3NhZ2UgZnJvbSB0aGUgcmVzb3VyY2UgYnVuZGxlCisgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRLZXkoKSB7CiAgICAgICAgIHJldHVybiBrZXk7CiAgICAgfQogCiAgICAgLyoqCi0JICogR2V0cyB0aGUgdXNlciBwcmVmZXJyZWQgcmVzb3VyY2UgYnVuZGxlIG5hbWUKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0JCXJldHVybiBidW5kbGVOYW1lOwotCX0KKyAgICAgKiBHZXRzIHRoZSB1c2VyIHByZWZlcnJlZCByZXNvdXJjZSBidW5kbGUgbmFtZQorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKKyAgICAgICAgcmV0dXJuIGJ1bmRsZU5hbWU7CisgICAgfQogCiAgICAgLyoqCi0JICogV2lsbCBiZSBjYWxsZWQgYnkgdGhlIEpTUCBFbmdpbmUgd2hlbiBpdCBlbmNvdW50ZXJzIHRoZSBzdGFydCBvZiB0aGUgdGFnCi0JICovCisgICAgICogV2lsbCBiZSBjYWxsZWQgYnkgdGhlIEpTUCBFbmdpbmUgd2hlbiBpdCBlbmNvdW50ZXJzIHRoZSBzdGFydCBvZiB0aGUgdGFnCisgICAgICovCiAgICAgcHVibGljIGludCBkb1N0YXJ0VGFnKCkgdGhyb3dzIEpzcFRhZ0V4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiBFVkFMX0JPRFlfSU5DTFVERTsKICAgICB9CiAKICAgICAvKioKLQkgKiBXaWxsIGJlIGNhbGxlZCBieSB0aGUgSlNQIEVuZ2luZSB3aGVuIGl0IGVuY291bnRlcnMgdGhlIGVuZCBvZiB0aGUgdGFnCi0JICovCisgICAgICogV2lsbCBiZSBjYWxsZWQgYnkgdGhlIEpTUCBFbmdpbmUgd2hlbiBpdCBlbmNvdW50ZXJzIHRoZSBlbmQgb2YgdGhlIHRhZworICAgICAqLwogICAgIHB1YmxpYyBpbnQgZG9FbmRUYWcoKSB0aHJvd3MgSnNwVGFnRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKLQkJCWlmKGxhbmd1YWdlICE9IG51bGwpIHsKLQkJCQlpZiggY291bnRyeSA9PSBudWxsKQotCQkJCQljb3VudHJ5ID0gIiI7Ci0JCQkJaWYodmFyaWFudCA9PSBudWxsKQotCQkJCQl2YXJpYW50ID0gIiI7Ci0JCQl9IGVsc2UgbGFuZ3VhZ2UgPSAiZW4iOwotCQkJamF2YS51dGlsLkxvY2FsZSBsb2NhbGUgPSBuZXcgTG9jYWxlKGxhbmd1YWdlLCBjb3VudHJ5LCB2YXJpYW50KTsKLQkJCVJlc291cmNlQnVuZGxlIGJ1bmRsZSA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZShidW5kbGVOYW1lLCBsb2NhbGUpOwotCQkJU3RyaW5nIG1lc3NhZ2UgPSBidW5kbGUuZ2V0U3RyaW5nKGtleSk7Ci0JCQlwYWdlQ29udGV4dC5nZXRPdXQoKS53cml0ZSgiTWVzc2FnZSBmcm9tIHJlc291cmNlIGJ1bmRsZToiICsgbWVzc2FnZSk7Ci0JCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGlmKGxhbmd1YWdlICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBpZiggY291bnRyeSA9PSBudWxsKQorICAgICAgICAgICAgICAgICAgICBjb3VudHJ5ID0gIiI7CisgICAgICAgICAgICAgICAgaWYodmFyaWFudCA9PSBudWxsKQorICAgICAgICAgICAgICAgICAgICB2YXJpYW50ID0gIiI7CisgICAgICAgICAgICB9IGVsc2UgbGFuZ3VhZ2UgPSAiZW4iOworICAgICAgICAgICAgamF2YS51dGlsLkxvY2FsZSBsb2NhbGUgPSBuZXcgTG9jYWxlKGxhbmd1YWdlLCBjb3VudHJ5LCB2YXJpYW50KTsKKyAgICAgICAgICAgIFJlc291cmNlQnVuZGxlIGJ1bmRsZSA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZShidW5kbGVOYW1lLCBsb2NhbGUpOworICAgICAgICAgICAgU3RyaW5nIG1lc3NhZ2UgPSBidW5kbGUuZ2V0U3RyaW5nKGtleSk7CisgICAgICAgICAgICBwYWdlQ29udGV4dC5nZXRPdXQoKS53cml0ZSgiTWVzc2FnZSBmcm9tIHJlc291cmNlIGJ1bmRsZToiICsgbWVzc2FnZSk7CisgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBKc3BUYWdFeGNlcHRpb24oIkVycm9yOiAiICsgZSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIEVWQUxfUEFHRTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYkNsYXNzUGF0aC9taXNjL3NhbXBsZXMvaTE4bi9zaW1wbGUvc2VydmxldC9Gb3J3YXJkZWRTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJDbGFzc1BhdGgvbWlzYy9zYW1wbGVzL2kxOG4vc2ltcGxlL3NlcnZsZXQvRm9yd2FyZGVkU2VydmxldC5qYXZhCmluZGV4IDA4NDBmYzAuLjBlZDZlYWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYkNsYXNzUGF0aC9taXNjL3NhbXBsZXMvaTE4bi9zaW1wbGUvc2VydmxldC9Gb3J3YXJkZWRTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliQ2xhc3NQYXRoL21pc2Mvc2FtcGxlcy9pMThuL3NpbXBsZS9zZXJ2bGV0L0ZvcndhcmRlZFNlcnZsZXQuamF2YQpAQCAtMTYsNyArMTYsNyBAQAogLyoqCiAgKiBTZXJ2bGV0IGZvcndhcmRlZCBmcm9tIFNpbXBsZUkxOG5TZXJ2bGV0CiAgKiBAYXV0aG9yICBDaGFuZCBCYXNoYQotICogQHZlcnNpb24JMS4wCisgKiBAdmVyc2lvbiAgICAxLjAKICAqLwogcHVibGljIGNsYXNzIEZvcndhcmRlZFNlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAKQEAgLTQwLDExICs0MCwxMSBAQAogICAgICAqLwogICAgIHByb3RlY3RlZCB2b2lkIHByb2Nlc3NSZXF1ZXN0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzKQogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgU3RyaW5nIGNoYXJzZXR2YWwJCQk9CXJlcS5nZXRQYXJhbWV0ZXIoImNoYXJzZXR2YWwiKTsKKyAgICAgICAgU3RyaW5nIGNoYXJzZXR2YWwgICAgICAgICAgICA9ICAgIHJlcS5nZXRQYXJhbWV0ZXIoImNoYXJzZXR2YWwiKTsKICAgICAgICAgcmVxLnNldENoYXJhY3RlckVuY29kaW5nKGNoYXJzZXR2YWwpOwogICAgICAgICByZXMuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbDtjaGFyc2V0PSIgKyBjaGFyc2V0dmFsICsgIiIpOwotICAgICAgICBqYXZhLmlvLlByaW50V3JpdGVyIG91dAkJPQlyZXMuZ2V0V3JpdGVyKCk7Ci0gICAgICAgIFN0cmluZyBuYW1lCQkJCQk9CXJlcS5nZXRQYXJhbWV0ZXIoIm5hbWUiKTsKKyAgICAgICAgamF2YS5pby5QcmludFdyaXRlciBvdXQgICAgICAgID0gICAgcmVzLmdldFdyaXRlcigpOworICAgICAgICBTdHJpbmcgbmFtZSAgICAgICAgICAgICAgICAgICAgPSAgICByZXEuZ2V0UGFyYW1ldGVyKCJuYW1lIik7CiAgICAgICAgIG91dC5wcmludGxuKCI8aHRtbD4iKTsKICAgICAgICAgb3V0LnByaW50bG4oIjxoZWFkPiIpOwogICAgICAgICBvdXQucHJpbnRsbigiPHRpdGxlPlNlcnZsZXQ8L3RpdGxlPiIpOwpAQCAtNTIsOCArNTIsOCBAQAogICAgICAgICBvdXQucHJpbnRsbigiPGJvZHk+Iik7CiAgICAgICAgIG91dC5wcmludGxuKCI8SDM+IFRoaXMgaXMgdGhlIG5hbWUgZnJvbSBmb3J3YXJkZWQgc2VydmxldCA8L0gzPiIpOwogICAgICAgICBvdXQucHJpbnRsbigiPEg0PiBUaGUgbmFtZSBlbnRlcmVkIHdhczoiICsgbmFtZSArICI8L2g0PiIpOwotCQlvdXQucHJpbnRsbigiPGJyPiIpOwotCQlvdXQucHJpbnRsbigiPFA+PEJSPjxBIEhSRUY9XCIvaTE4bi1zaW1wbGVcIj5CYWNrIHRvIHNhbXBsZSBob21lPC9BPjwvUD4iKTsKKyAgICAgICAgb3V0LnByaW50bG4oIjxicj4iKTsKKyAgICAgICAgb3V0LnByaW50bG4oIjxQPjxCUj48QSBIUkVGPVwiL2kxOG4tc2ltcGxlXCI+QmFjayB0byBzYW1wbGUgaG9tZTwvQT48L1A+Iik7CiAgICAgICAgIG91dC5wcmludGxuKCI8L2JvZHk+Iik7CiAgICAgICAgIG91dC5wcmludGxuKCI8L2h0bWw+Iik7CiAgICAgICAgIG91dC5jbG9zZSgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliQ2xhc3NQYXRoL21pc2Mvc2FtcGxlcy9pMThuL3NpbXBsZS9zZXJ2bGV0L0luY2x1ZGVkU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliQ2xhc3NQYXRoL21pc2Mvc2FtcGxlcy9pMThuL3NpbXBsZS9zZXJ2bGV0L0luY2x1ZGVkU2VydmxldC5qYXZhCmluZGV4IGMzMTViNDYuLmRjN2Y5ZTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYkNsYXNzUGF0aC9taXNjL3NhbXBsZXMvaTE4bi9zaW1wbGUvc2VydmxldC9JbmNsdWRlZFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJDbGFzc1BhdGgvbWlzYy9zYW1wbGVzL2kxOG4vc2ltcGxlL3NlcnZsZXQvSW5jbHVkZWRTZXJ2bGV0LmphdmEKQEAgLTE3LDcgKzE3LDcgQEAKIC8qKgogICogU2VydmxldCBpbmNsdWRlZCBpbiBTaW1wbGVJMThuU2VydmxldAogICogQGF1dGhvciAgQ2hhbmQgQmFzaGEKLSAqIEB2ZXJzaW9uCTEuMAorICogQHZlcnNpb24gICAgMS4wCiAgKi8KIHB1YmxpYyBjbGFzcyBJbmNsdWRlZFNlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAKQEAgLTQyLDE1ICs0MiwxNSBAQAogICAgIHByb3RlY3RlZCB2b2lkIHByb2Nlc3NSZXF1ZXN0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzKQogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKLQkJCWphdmEuaW8uUHJpbnRXcml0ZXIgb3V0CT0JcmVzLmdldFdyaXRlcigpOwotCQkJU3RyaW5nIG5hbWUJCQkJPQlyZXEuZ2V0UGFyYW1ldGVyKCJuYW1lIik7CisgICAgICAgICAgICBqYXZhLmlvLlByaW50V3JpdGVyIG91dCAgICA9ICAgIHJlcy5nZXRXcml0ZXIoKTsKKyAgICAgICAgICAgIFN0cmluZyBuYW1lICAgICAgICAgICAgICAgID0gICAgcmVxLmdldFBhcmFtZXRlcigibmFtZSIpOwogCi0JCQlvdXQucHJpbnRsbigiPEgzPiBUaGlzIGlzIHRoZSBuYW1lIGZyb20gaW5jbHVkZWQgc2VydmxldCA8L0gzPiIpOwotCQkJb3V0LnByaW50bG4oIjxIND4gVGhlIG5hbWUgZW50ZXJlZCB3YXM6IiArIG5hbWUgKyAiPC9oND4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8SDM+IFRoaXMgaXMgdGhlIG5hbWUgZnJvbSBpbmNsdWRlZCBzZXJ2bGV0IDwvSDM+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPEg0PiBUaGUgbmFtZSBlbnRlcmVkIHdhczoiICsgbmFtZSArICI8L2g0PiIpOwogCi0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CiAgICAgfQogCiAgICAgLyoqIEhhbmRsZXMgdGhlIEhUVFAgPGNvZGU+R0VUPC9jb2RlPiBtZXRob2QuCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJDbGFzc1BhdGgvbWlzYy9zYW1wbGVzL2kxOG4vc2ltcGxlL3NlcnZsZXQvTG9jYWxlQ2hhcnNldFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYkNsYXNzUGF0aC9taXNjL3NhbXBsZXMvaTE4bi9zaW1wbGUvc2VydmxldC9Mb2NhbGVDaGFyc2V0U2VydmxldC5qYXZhCmluZGV4IDRlNzgwNDMuLmUwMTQ5NzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYkNsYXNzUGF0aC9taXNjL3NhbXBsZXMvaTE4bi9zaW1wbGUvc2VydmxldC9Mb2NhbGVDaGFyc2V0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYkNsYXNzUGF0aC9taXNjL3NhbXBsZXMvaTE4bi9zaW1wbGUvc2VydmxldC9Mb2NhbGVDaGFyc2V0U2VydmxldC5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiAKICAqIEBhdXRob3IgIENoYW5kIEJhc2hhCiAKLSAqIEB2ZXJzaW9uCTEuMAorICogQHZlcnNpb24gICAgMS4wCiAKICAqLwogCkBAIC01MiwxNSArNTIsMTUgQEAKIAogCiAKLSAgICAgICAgU3RyaW5nIG5hbWUJCQk9CXJlcS5nZXRQYXJhbWV0ZXIoIm5hbWUiKTsKKyAgICAgICAgU3RyaW5nIG5hbWUgICAgICAgICAgICA9ICAgIHJlcS5nZXRQYXJhbWV0ZXIoIm5hbWUiKTsKIAotICAgICAgICBTdHJpbmcgY2hhcnNldHZhbAk9CXJlcS5nZXRDaGFyYWN0ZXJFbmNvZGluZygpOworICAgICAgICBTdHJpbmcgY2hhcnNldHZhbCAgICA9ICAgIHJlcS5nZXRDaGFyYWN0ZXJFbmNvZGluZygpOwogCiAgICAgICAgIGlmIChjaGFyc2V0dmFsICE9IG51bGwpIHsKIAotICAgICAgICAJcmVzLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWw7Y2hhcnNldD0iICsgY2hhcnNldHZhbCArICIiKTsKKyAgICAgICAgICAgIHJlcy5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sO2NoYXJzZXQ9IiArIGNoYXJzZXR2YWwgKyAiIik7CiAKLQkJfSBlbHNlIHJlcy5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sO2NoYXJzZXQ9VVRGLTgiKTsKKyAgICAgICAgfSBlbHNlIHJlcy5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sO2NoYXJzZXQ9VVRGLTgiKTsKIAogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXMuZ2V0V3JpdGVyKCk7CiAKQEAgLTgyLDkgKzgyLDkgQEAKIAogICAgICAgICBvdXQucHJpbnRsbigiPGJyPiIpOwogCi0JCW91dC5wcmludGxuKCI8UD48QlI+PEEgSFJFRj1cIi9pMThuLXNpbXBsZVwiPkJhY2sgdG8gc2FtcGxlIGhvbWU8L0E+PC9QPiIpOworICAgICAgICBvdXQucHJpbnRsbigiPFA+PEJSPjxBIEhSRUY9XCIvaTE4bi1zaW1wbGVcIj5CYWNrIHRvIHNhbXBsZSBob21lPC9BPjwvUD4iKTsKIAotCQlvdXQucHJpbnRsbigiPC9ib2R5PjwvaHRtbD4iKTsKKyAgICAgICAgb3V0LnByaW50bG4oIjwvYm9keT48L2h0bWw+Iik7CiAKICAgICAgICAgb3V0LmNsb3NlKCk7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYkNsYXNzUGF0aC9taXNjL3NhbXBsZXMvaTE4bi9zaW1wbGUvc2VydmxldC9TaW1wbGVGaWx0ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYkNsYXNzUGF0aC9taXNjL3NhbXBsZXMvaTE4bi9zaW1wbGUvc2VydmxldC9TaW1wbGVGaWx0ZXIuamF2YQppbmRleCBjNGFhMWQ3Li40NWNhYjBlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJDbGFzc1BhdGgvbWlzYy9zYW1wbGVzL2kxOG4vc2ltcGxlL3NlcnZsZXQvU2ltcGxlRmlsdGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliQ2xhc3NQYXRoL21pc2Mvc2FtcGxlcy9pMThuL3NpbXBsZS9zZXJ2bGV0L1NpbXBsZUZpbHRlci5qYXZhCkBAIC0yMSw5ICsyMSw5IEBACiAKIHB1YmxpYyBjbGFzcyBTaW1wbGVGaWx0ZXIgaW1wbGVtZW50cyBGaWx0ZXIgewogCi0gICAgcHJpdmF0ZSBGaWx0ZXJDb25maWcgZmlsdGVyQ29uZmlnCT0gbnVsbDsKLSAgICBwcml2YXRlIGJvb2xlYW4gdXNlZmlsdGVyCQkJPSBmYWxzZTsKLSAgICBwcml2YXRlIFN0cmluZyBlbmNvZGluZwkJCQk9IG51bGw7CisgICAgcHJpdmF0ZSBGaWx0ZXJDb25maWcgZmlsdGVyQ29uZmlnICAgID0gbnVsbDsKKyAgICBwcml2YXRlIGJvb2xlYW4gdXNlZmlsdGVyICAgICAgICAgICAgPSBmYWxzZTsKKyAgICBwcml2YXRlIFN0cmluZyBlbmNvZGluZyAgICAgICAgICAgICAgICA9IG51bGw7CiAKICAgICAvKioKICAgICAgKiBDYWxsZWQgYnkgdGhlIHdlYiBjb250YWluZXIgdG8gaW5kaWNhdGUgdG8gYSBmaWx0ZXIgdGhhdCBpdCBpcyBiZWluZyBwbGFjZWQgaW50byBzZXJ2aWNlCkBAIC0zMSwxNiArMzEsMTYgQEAKICAgICAgKiBAcGFyYW0gZmlsdGVyQ29uZmlnIFRoZSBmaWx0ZXIgY29uZmlndXJhdGlvbiBvYmplY3QKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBpbml0KEZpbHRlckNvbmZpZyBmaWx0ZXJDb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKLQkJdHJ5IHsKLQkJCXRoaXMuZmlsdGVyQ29uZmlnCT0JZmlsdGVyQ29uZmlnOwotCQkJU3RyaW5nIHBhcmFtCQk9CWZpbHRlckNvbmZpZy5nZXRJbml0UGFyYW1ldGVyKCJ1c2VmaWx0ZXIiKTsKLQkJCXRoaXMuZW5jb2RpbmcJCT0JZmlsdGVyQ29uZmlnLmdldEluaXRQYXJhbWV0ZXIoImVuY29kaW5nIik7Ci0JCQlpZiAocGFyYW0uZXF1YWxzKCJ0cnVlIikpIHsKLQkJCQl0aGlzLnVzZWZpbHRlcgk9CXRydWU7Ci0JCQl9Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB0aGlzLmZpbHRlckNvbmZpZyAgICA9ICAgIGZpbHRlckNvbmZpZzsKKyAgICAgICAgICAgIFN0cmluZyBwYXJhbSAgICAgICAgPSAgICBmaWx0ZXJDb25maWcuZ2V0SW5pdFBhcmFtZXRlcigidXNlZmlsdGVyIik7CisgICAgICAgICAgICB0aGlzLmVuY29kaW5nICAgICAgICA9ICAgIGZpbHRlckNvbmZpZy5nZXRJbml0UGFyYW1ldGVyKCJlbmNvZGluZyIpOworICAgICAgICAgICAgaWYgKHBhcmFtLmVxdWFscygidHJ1ZSIpKSB7CisgICAgICAgICAgICAgICAgdGhpcy51c2VmaWx0ZXIgICAgPSAgICB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIC8qKgpAQCAtNTEsMTggKzUxLDE4IEBACiAgICAgICogQHBhcmFtIGNoYWluIFRoZSBmaWx0ZXIgY2hhaW4gd2UgYXJlIHByb2Nlc3NpbmcKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBkb0ZpbHRlcihTZXJ2bGV0UmVxdWVzdCByZXEsIFNlcnZsZXRSZXNwb25zZSByZXMsIEZpbHRlckNoYWluIGNoYWluKQotCXRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbiB7Ci0JCXRyeSB7Ci0gICAgICAgIAlpZiAodXNlZmlsdGVyKSB7Ci0gICAgICAgIAkgICAgU3RyaW5nIGVuY29kaW5nID0gZ2V0RW5jb2RpbmcocmVxKTsKLSAgICAgICAgCSAgICBpZiAoZW5jb2RpbmcgIT0gbnVsbCkgewotICAgICAgICAJICAgICAgICByZXEuc2V0Q2hhcmFjdGVyRW5jb2RpbmcoZW5jb2RpbmcpOwotCQkJCX0KLQkJCX0KLSAgICAgICAgCWNoYWluLmRvRmlsdGVyKHJlcSwgcmVzKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KKyAgICB0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24geworICAgICAgICB0cnkgeworICAgICAgICAgICAgaWYgKHVzZWZpbHRlcikgeworICAgICAgICAgICAgICAgIFN0cmluZyBlbmNvZGluZyA9IGdldEVuY29kaW5nKHJlcSk7CisgICAgICAgICAgICAgICAgaWYgKGVuY29kaW5nICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVxLnNldENoYXJhY3RlckVuY29kaW5nKGVuY29kaW5nKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjaGFpbi5kb0ZpbHRlcihyZXEsIHJlcyk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CiAgICAgfQogCiAgICAgLyoqCkBAIC03OCw3ICs3OCw3IEBACiAgICAgICogQ2FsbGVkIGJ5IHRoZSB3ZWIgY29udGFpbmVyIHRvIGluZGljYXRlIHRvIGEgZmlsdGVyIHRoYXQgaXQgaXMgYmVpbmcgdGFrZW4gb3V0IG9mIHNlcnZpY2UuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHsKLSAgICAgICAgdGhpcy5lbmNvZGluZwkJPSBudWxsOwotICAgICAgICB0aGlzLmZpbHRlckNvbmZpZwk9IG51bGw7CisgICAgICAgIHRoaXMuZW5jb2RpbmcgICAgICAgID0gbnVsbDsKKyAgICAgICAgdGhpcy5maWx0ZXJDb25maWcgICAgPSBudWxsOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYkNsYXNzUGF0aC9taXNjL3NhbXBsZXMvaTE4bi9zaW1wbGUvc2VydmxldC9TaW1wbGVGaWx0ZXJTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJDbGFzc1BhdGgvbWlzYy9zYW1wbGVzL2kxOG4vc2ltcGxlL3NlcnZsZXQvU2ltcGxlRmlsdGVyU2VydmxldC5qYXZhCmluZGV4IDRlNjJlZDAuLmE2NDEwYWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYkNsYXNzUGF0aC9taXNjL3NhbXBsZXMvaTE4bi9zaW1wbGUvc2VydmxldC9TaW1wbGVGaWx0ZXJTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliQ2xhc3NQYXRoL21pc2Mvc2FtcGxlcy9pMThuL3NpbXBsZS9zZXJ2bGV0L1NpbXBsZUZpbHRlclNlcnZsZXQuamF2YQpAQCAtNDAsMTAgKzQwLDEwIEBACiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewogICAgICAgICBTdHJpbmcgY2hhcnNldHZhbCA9IHJlcS5nZXRDaGFyYWN0ZXJFbmNvZGluZygpOwogICAgICAgICBpZiAoY2hhcnNldHZhbCAhPSBudWxsKSB7Ci0gICAgICAgIAlyZXMuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbDtjaGFyc2V0PSIgKyBjaGFyc2V0dmFsICsgIiIpOwotCQl9IGVsc2UgcmVzLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWw7Y2hhcnNldD1VVEYtOCIpOwotICAgICAgICBqYXZhLmlvLlByaW50V3JpdGVyIG91dAkJPQlyZXMuZ2V0V3JpdGVyKCk7Ci0gICAgICAgIFN0cmluZyBuYW1lCQkJCQk9CXJlcS5nZXRQYXJhbWV0ZXIoIm5hbWUiKTsKKyAgICAgICAgICAgIHJlcy5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sO2NoYXJzZXQ9IiArIGNoYXJzZXR2YWwgKyAiIik7CisgICAgICAgIH0gZWxzZSByZXMuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbDtjaGFyc2V0PVVURi04Iik7CisgICAgICAgIGphdmEuaW8uUHJpbnRXcml0ZXIgb3V0ICAgICAgICA9ICAgIHJlcy5nZXRXcml0ZXIoKTsKKyAgICAgICAgU3RyaW5nIG5hbWUgICAgICAgICAgICAgICAgICAgID0gICAgcmVxLmdldFBhcmFtZXRlcigibmFtZSIpOwogICAgICAgICBvdXQucHJpbnRsbigiPGh0bWw+Iik7CiAgICAgICAgIG91dC5wcmludGxuKCI8aGVhZD4iKTsKICAgICAgICAgb3V0LnByaW50bG4oIjx0aXRsZT5TaW1wbGUgc2VydmxldCB0byB2ZXJpZnkgdGhlIGZpbHRlcjwvdGl0bGU+Iik7CkBAIC01MSw4ICs1MSw4IEBACiAgICAgICAgIG91dC5wcmludGxuKCI8Ym9keT4iKTsKICAgICAgICAgb3V0LnByaW50bG4oIjxIMz4gVGhpcyBpcyB0aGUgbmFtZSB5b3UgaGF2ZSBlbnRlcmVkICIgKyBuYW1lICsgIjwvSDM+Iik7CiAgICAgICAgIG91dC5wcmludGxuKCI8SDQ+IFRoZSBjaGFyYWN0ZXIgZW5jb2Rpbmcgc2V0IGJ5IHRoZSBmaWx0ZXIgaXM6ICIgKyBjaGFyc2V0dmFsICsgIjwvaDQ+Iik7Ci0JCW91dC5wcmludGxuKCI8YnI+Iik7Ci0JCW91dC5wcmludGxuKCI8UD48QlI+PEEgSFJFRj1cIi9pMThuLXNpbXBsZVwiPkJhY2sgdG8gc2FtcGxlIGhvbWU8L0E+PC9QPiIpOworICAgICAgICBvdXQucHJpbnRsbigiPGJyPiIpOworICAgICAgICBvdXQucHJpbnRsbigiPFA+PEJSPjxBIEhSRUY9XCIvaTE4bi1zaW1wbGVcIj5CYWNrIHRvIHNhbXBsZSBob21lPC9BPjwvUD4iKTsKICAgICAgICAgb3V0LnByaW50bG4oIjwvYm9keT4iKTsKICAgICAgICAgb3V0LnByaW50bG4oIjwvaHRtbD4iKTsKICAgICAgICAgb3V0LmNsb3NlKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJDbGFzc1BhdGgvbWlzYy9zYW1wbGVzL2kxOG4vc2ltcGxlL3NlcnZsZXQvU2ltcGxlSTE4blNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYkNsYXNzUGF0aC9taXNjL3NhbXBsZXMvaTE4bi9zaW1wbGUvc2VydmxldC9TaW1wbGVJMThuU2VydmxldC5qYXZhCmluZGV4IGJhMDJhMmMuLjExMzI0OWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYkNsYXNzUGF0aC9taXNjL3NhbXBsZXMvaTE4bi9zaW1wbGUvc2VydmxldC9TaW1wbGVJMThuU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYkNsYXNzUGF0aC9taXNjL3NhbXBsZXMvaTE4bi9zaW1wbGUvc2VydmxldC9TaW1wbGVJMThuU2VydmxldC5qYXZhCkBAIC0yMCw3ICsyMCw3IEBACiAgKiBUaGlzIGlzIGEgc2ltcGxlIHNlcnZsZXQgdGhhdCBkZW1vbnN0cmF0ZXMgc29tZSBvZiBtb3N0IGNvbW1vbmx5IHVzZWQgaTE4biBmZWF0dXJlcyBvZgogICogdGhlIEFwcGxpY2F0aW9uIFNlcnZlcidzIEphdmEgU2VydmxldCBBUEkgSW1wbGVtZW50YXRpb24KICAqIEBhdXRob3IgIENoYW5kIEJhc2hhCi0gKiBAdmVyc2lvbgkxLjAKKyAqIEB2ZXJzaW9uICAgIDEuMAogICovCiBwdWJsaWMgY2xhc3MgU2ltcGxlSTE4blNlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAKQEAgLTQ0LDgwICs0NCw4MCBAQAogICAgIHByb3RlY3RlZCB2b2lkIHByb2Nlc3NSZXF1ZXN0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzKQogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKLQkJCUh0dHBTZXNzaW9uIHNlc3Npb24JPQlyZXEuZ2V0U2Vzc2lvbihmYWxzZSk7Ci0JCQlpZihzZXNzaW9uICE9IG51bGwpIHsKLQkJCQlTdHJpbmcgc2Vzc2lvbmNoYXJzZXQgPSAoU3RyaW5nKXNlc3Npb24uZ2V0QXR0cmlidXRlKCJjaGFyc2V0Iik7Ci0JCQkJdHJ5IHsKLQkJCQkJcmVxLnNldENoYXJhY3RlckVuY29kaW5nKHNlc3Npb25jaGFyc2V0KTsKLQkJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkge30KLQkJCX0KLQkJCVN0cmluZyBmdW5jCQk9CXJlcS5nZXRQYXJhbWV0ZXIoImZ1bmMiKTsKLQkJCVN0cmluZyBhY3Rpb24JPQlyZXEuZ2V0UGFyYW1ldGVyKCJhY3Rpb24iKTsKKyAgICAgICAgICAgIEh0dHBTZXNzaW9uIHNlc3Npb24gICAgPSAgICByZXEuZ2V0U2Vzc2lvbihmYWxzZSk7CisgICAgICAgICAgICBpZihzZXNzaW9uICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgc2Vzc2lvbmNoYXJzZXQgPSAoU3RyaW5nKXNlc3Npb24uZ2V0QXR0cmlidXRlKCJjaGFyc2V0Iik7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgcmVxLnNldENoYXJhY3RlckVuY29kaW5nKHNlc3Npb25jaGFyc2V0KTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFN0cmluZyBmdW5jICAgICAgICA9ICAgIHJlcS5nZXRQYXJhbWV0ZXIoImZ1bmMiKTsKKyAgICAgICAgICAgIFN0cmluZyBhY3Rpb24gICAgPSAgICByZXEuZ2V0UGFyYW1ldGVyKCJhY3Rpb24iKTsKIAotCQkJaWYoZnVuYy5lcXVhbHMoInNlbmRJbnB1dCIpKSB7Ci0JCQkJU3RyaW5nIGNoYXJzZXR2YWwJPQlyZXEuZ2V0UGFyYW1ldGVyKCJjaGFyc2V0dmFsIik7Ci0JCQkJc2VuZElucHV0IChyZXEsIHJlcywgY2hhcnNldHZhbCwgYWN0aW9uKTsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKCBhY3Rpb24uZXF1YWxzKCJmb3JtYXREYXRlIikgKSB7Ci0JCQkJCWZvcm1hdERhdGUgKHJlcSwgcmVzKTsKLQkJCQl9IGVsc2UgaWYgKCBhY3Rpb24uZXF1YWxzKCJzZXRDaGFyRW5jb2RpbmciKSApIHsKLQkJCQkJc2V0Q2hhckVuY29kaW5nIChyZXEsIHJlcyk7Ci0JCQkJfSBlbHNlIGlmICggYWN0aW9uLmVxdWFscygiaW5jbHVkZVNlcnZsZXQiKSApIHsKLQkJCQkJaW5jbHVkZVNlcnZsZXQgKHJlcSwgcmVzKTsKLQkJCQl9IGVsc2UgaWYgKCBhY3Rpb24uZXF1YWxzKCJmb3J3YXJkU2VydmxldCIpICkgewotCQkJCQlmb3J3YXJkU2VydmxldCAocmVxLCByZXMpOwotCQkJCX0gZWxzZSBpZiAoIGFjdGlvbi5lcXVhbHMoInNlbmRFcnJvck1lc3NhZ2UiKSApIHsKLQkJCQkJc2VuZEVycm9yTWVzc2FnZSAocmVxLCByZXMpOwotCQkJCX0gZWxzZSBpZiAoIGFjdGlvbi5lcXVhbHMoInVzZVJlc291cmNlQnVuZGxlIikgKSB7Ci0JCQkJCXVzZVJlc291cmNlQnVuZGxlIChyZXEsIHJlcyk7Ci0JCQkJfSBlbHNlIGlmICggYWN0aW9uLmVxdWFscygiZm9yd2FyZEpzcCIpICkgewotCQkJCQlmb3J3YXJkSnNwIChyZXEsIHJlcyk7Ci0JCQkJfQotCQkJfQotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCX0KLQkvKiogU2V0cyB0aGUgY2hhcnNldCBhdHRyaWJ1dGUgdG8gdGhlIHNlc3Npb24gYW5kIGdlbmVyYXRlcyBhbiBpbnB1dCBmb3JtCi0JICogIEBwYXJhbSByZXF1ZXN0IHNlcnZsZXQgcmVxdWVzdAotCSAqICBAcGFyYW0gcmVzcG9uc2Ugc2VydmxldCByZXNwb25zZQorICAgICAgICAgICAgaWYoZnVuYy5lcXVhbHMoInNlbmRJbnB1dCIpKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIGNoYXJzZXR2YWwgICAgPSAgICByZXEuZ2V0UGFyYW1ldGVyKCJjaGFyc2V0dmFsIik7CisgICAgICAgICAgICAgICAgc2VuZElucHV0IChyZXEsIHJlcywgY2hhcnNldHZhbCwgYWN0aW9uKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKCBhY3Rpb24uZXF1YWxzKCJmb3JtYXREYXRlIikgKSB7CisgICAgICAgICAgICAgICAgICAgIGZvcm1hdERhdGUgKHJlcSwgcmVzKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBhY3Rpb24uZXF1YWxzKCJzZXRDaGFyRW5jb2RpbmciKSApIHsKKyAgICAgICAgICAgICAgICAgICAgc2V0Q2hhckVuY29kaW5nIChyZXEsIHJlcyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggYWN0aW9uLmVxdWFscygiaW5jbHVkZVNlcnZsZXQiKSApIHsKKyAgICAgICAgICAgICAgICAgICAgaW5jbHVkZVNlcnZsZXQgKHJlcSwgcmVzKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBhY3Rpb24uZXF1YWxzKCJmb3J3YXJkU2VydmxldCIpICkgeworICAgICAgICAgICAgICAgICAgICBmb3J3YXJkU2VydmxldCAocmVxLCByZXMpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGFjdGlvbi5lcXVhbHMoInNlbmRFcnJvck1lc3NhZ2UiKSApIHsKKyAgICAgICAgICAgICAgICAgICAgc2VuZEVycm9yTWVzc2FnZSAocmVxLCByZXMpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGFjdGlvbi5lcXVhbHMoInVzZVJlc291cmNlQnVuZGxlIikgKSB7CisgICAgICAgICAgICAgICAgICAgIHVzZVJlc291cmNlQnVuZGxlIChyZXEsIHJlcyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggYWN0aW9uLmVxdWFscygiZm9yd2FyZEpzcCIpICkgeworICAgICAgICAgICAgICAgICAgICBmb3J3YXJkSnNwIChyZXEsIHJlcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAvKiogU2V0cyB0aGUgY2hhcnNldCBhdHRyaWJ1dGUgdG8gdGhlIHNlc3Npb24gYW5kIGdlbmVyYXRlcyBhbiBpbnB1dCBmb3JtCisgICAgICogIEBwYXJhbSByZXF1ZXN0IHNlcnZsZXQgcmVxdWVzdAorICAgICAqICBAcGFyYW0gcmVzcG9uc2Ugc2VydmxldCByZXNwb25zZQogICAgICAqLwotCXByb3RlY3RlZCB2b2lkIHNlbmRJbnB1dCAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMsIFN0cmluZyBjaGFyc2V0dmFsLCBTdHJpbmcgYWN0aW9uKQorICAgIHByb3RlY3RlZCB2b2lkIHNlbmRJbnB1dCAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMsIFN0cmluZyBjaGFyc2V0dmFsLCBTdHJpbmcgYWN0aW9uKQogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCXRyeSB7Ci0JCQlIdHRwU2Vzc2lvbiBzZXNzaW9uCT0JcmVxLmdldFNlc3Npb24odHJ1ZSk7Ci0JCQlzZXNzaW9uLnNldEF0dHJpYnV0ZSgiY2hhcnNldCIsIGNoYXJzZXR2YWwpOwotCQkJcmVzLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9IiArIGNoYXJzZXR2YWwpOwotCQkJUHJpbnRXcml0ZXIgb3V0ID0gcmVzLmdldFdyaXRlcigpOwotCQkJb3V0LnByaW50bG4oIjxodG1sPiIpOwotCQkJb3V0LnByaW50bG4oIjxoZWFkPiIpOwotCQkJb3V0LnByaW50bG4oIjx0aXRsZT5TZXJ2bGV0IGkxOG4gc2FtcGxlczwvdGl0bGU+PC9oZWFkPiIpOwotCQkJb3V0LnByaW50bG4oIjxib2R5Pjxicj4iKTsKLQkJCW91dC5wcmludGxuKCI8UD48Rk9OVCBGQUNFPVwiVGltZXMgTmV3IFJvbWFuXCI+PEZPTlQgU0laRT02PjxCPlNlcnZsZXQgaTE4biBzYW1wbGVzPC9CPjwvRk9OVD48L0ZPTlQ+PC9QPiIpOwotCQkJb3V0LnByaW50bG4oIjxmb3JtIG5hbWU9XCJpMThuLXNpbXBsZVwiIG1ldGhvZD1cInBvc3RcIiBhY3Rpb249XCIvaTE4bi1zaW1wbGUvU2ltcGxlSTE4blNlcnZsZXRcIj4iKTsKLQkJCW91dC5wcmludGxuKCI8dGFibGU+Iik7Ci0JCQlvdXQucHJpbnRsbigiPHRyPiIpOwotCQkJb3V0LnByaW50bG4oIjx0ZD48SDM+UGxlYXNlIGVudGVyIHlvdXIgbmFtZTo8L0gzPjwvdGQ+Iik7Ci0JCQlvdXQucHJpbnRsbigiPHRkPiIpOwotCQkJb3V0LnByaW50bG4oIjxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJuYW1lXCIgc2l6ZT1cIjIwXCI+Iik7Ci0JCQlvdXQucHJpbnRsbigiPC90ZD4iKTsKLQkJCW91dC5wcmludGxuKCI8L3RyPiIpOwotCQkJb3V0LnByaW50bG4oIjwvdGFibGU+Iik7Ci0JCQlvdXQucHJpbnRsbigiPHByZT4iKTsKLQkJCW91dC5wcmludGxuKCI8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9U3VibWl0PiIpOwotCQkJb3V0LnByaW50bG4oIjwvcHJlPiIpOwotCQkJb3V0LnByaW50bG4oIjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWNoYXJzZXR2YWwgdmFsdWU9IiArIGNoYXJzZXR2YWwgKyAiPiIpOwotCQkJb3V0LnByaW50bG4oIjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWFjdGlvbiB2YWx1ZT0iICsgYWN0aW9uICsgIj4iKTsKLQkJCW91dC5wcmludGxuKCI8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1mdW5jIHZhbHVlPWV4ZWM+Iik7Ci0JCQlvdXQucHJpbnRsbigiPGJyPiIpOwotCQkJb3V0LnByaW50bG4oIjxQPjxCUj48QSBIUkVGPVwiL2kxOG4tc2ltcGxlXCI+QmFjayB0byBzYW1wbGUgaG9tZTwvQT48L1A+Iik7Ci0JCQlvdXQucHJpbnRsbigiPC9mb3JtPiIpOwotCQkJb3V0LnByaW50bG4oIjwvYm9keT4iKTsKLQkJCW91dC5wcmludGxuKCI8L2h0bWw+Iik7Ci0JCQlvdXQuY2xvc2UoKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIEh0dHBTZXNzaW9uIHNlc3Npb24gICAgPSAgICByZXEuZ2V0U2Vzc2lvbih0cnVlKTsKKyAgICAgICAgICAgIHNlc3Npb24uc2V0QXR0cmlidXRlKCJjaGFyc2V0IiwgY2hhcnNldHZhbCk7CisgICAgICAgICAgICByZXMuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbDsgY2hhcnNldD0iICsgY2hhcnNldHZhbCk7CisgICAgICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXMuZ2V0V3JpdGVyKCk7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPGh0bWw+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPGhlYWQ+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPHRpdGxlPlNlcnZsZXQgaTE4biBzYW1wbGVzPC90aXRsZT48L2hlYWQ+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJvZHk+PGJyPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxQPjxGT05UIEZBQ0U9XCJUaW1lcyBOZXcgUm9tYW5cIj48Rk9OVCBTSVpFPTY+PEI+U2VydmxldCBpMThuIHNhbXBsZXM8L0I+PC9GT05UPjwvRk9OVD48L1A+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPGZvcm0gbmFtZT1cImkxOG4tc2ltcGxlXCIgbWV0aG9kPVwicG9zdFwiIGFjdGlvbj1cIi9pMThuLXNpbXBsZS9TaW1wbGVJMThuU2VydmxldFwiPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjx0YWJsZT4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8dHI+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPHRkPjxIMz5QbGVhc2UgZW50ZXIgeW91ciBuYW1lOjwvSDM+PC90ZD4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8dGQ+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cIm5hbWVcIiBzaXplPVwiMjBcIj4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8L3RkPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvdHI+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPC90YWJsZT4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8cHJlPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT1TdWJtaXQ+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9wcmU+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9Y2hhcnNldHZhbCB2YWx1ZT0iICsgY2hhcnNldHZhbCArICI+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YWN0aW9uIHZhbHVlPSIgKyBhY3Rpb24gKyAiPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWZ1bmMgdmFsdWU9ZXhlYz4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8YnI+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPFA+PEJSPjxBIEhSRUY9XCIvaTE4bi1zaW1wbGVcIj5CYWNrIHRvIHNhbXBsZSBob21lPC9BPjwvUD4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8L2Zvcm0+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9ib2R5PiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvaHRtbD4iKTsKKyAgICAgICAgICAgIG91dC5jbG9zZSgpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIC8qKiBHZXRzIHRoZSBsb2NhbGUgaW5mb3JtYXRpb24gZnJvbSBicm93c2VyIHNldHRpbmdzIGFuZCBzZXRzIHRoZSBsb2NhbGUgdG8KQEAgLTEyOSwyNSArMTI5LDI1IEBACiAgICAgcHJvdGVjdGVkIHZvaWQgZm9ybWF0RGF0ZSAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpCiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKLQkJCVN0cmluZyBuYW1lCQkJCT0JcmVxLmdldFBhcmFtZXRlcigibmFtZSIpOwotCQkJU3RyaW5nIGNoYXJzZXR2YWwJCT0JcmVxLmdldFBhcmFtZXRlcigiY2hhcnNldHZhbCIpOworICAgICAgICAgICAgU3RyaW5nIG5hbWUgICAgICAgICAgICAgICAgPSAgICByZXEuZ2V0UGFyYW1ldGVyKCJuYW1lIik7CisgICAgICAgICAgICBTdHJpbmcgY2hhcnNldHZhbCAgICAgICAgPSAgICByZXEuZ2V0UGFyYW1ldGVyKCJjaGFyc2V0dmFsIik7CiAKICAgICAgICAgICAgIC8vIEdldCdzIHRoZSBsb2NhbGUgb2YgdGhlIGJyb3dzZXIgZnJvbSB0aGUgcmVxdWVzdCBvYmplY3QKLSAgICAgICAgICAgIExvY2FsZSBicm93c2VyTG9jYWxlCT0JcmVxLmdldExvY2FsZSgpOworICAgICAgICAgICAgTG9jYWxlIGJyb3dzZXJMb2NhbGUgICAgPSAgICByZXEuZ2V0TG9jYWxlKCk7CiAKICAgICAgICAgICAgIC8vIERlZmF1bHQgbG9jYWxlIG9mIHRoZSByZXNwb25zZSBvYmplY3QKLSAgICAgICAgICAgIExvY2FsZSByZXNMb2NhbGUJCT0JcmVzLmdldExvY2FsZSgpOwotICAgICAgICAgICAgU3RyaW5nIHJlc0NoYXJzZXQJCT0JcmVzLmdldENoYXJhY3RlckVuY29kaW5nKCk7CisgICAgICAgICAgICBMb2NhbGUgcmVzTG9jYWxlICAgICAgICA9ICAgIHJlcy5nZXRMb2NhbGUoKTsKKyAgICAgICAgICAgIFN0cmluZyByZXNDaGFyc2V0ICAgICAgICA9ICAgIHJlcy5nZXRDaGFyYWN0ZXJFbmNvZGluZygpOwogCiAgICAgICAgICAgICAvLyBTZXQncyB0aGUgYnJvd3NlcidzIGxvY2FsZSB0byB0aGUgcmVzcG9uc2Ugb2JqZWN0CiAgICAgICAgICAgICByZXMuc2V0TG9jYWxlKGJyb3dzZXJMb2NhbGUpOwogCi0gICAgICAgICAgICBMb2NhbGUgcmVzTG9jYWxlQWZ0ZXIJPQlyZXMuZ2V0TG9jYWxlKCk7Ci0gICAgICAgICAgICBTdHJpbmcgcmVzQ2hhcnNldEFmdGVyCT0JcmVzLmdldENoYXJhY3RlckVuY29kaW5nKCk7CisgICAgICAgICAgICBMb2NhbGUgcmVzTG9jYWxlQWZ0ZXIgICAgPSAgICByZXMuZ2V0TG9jYWxlKCk7CisgICAgICAgICAgICBTdHJpbmcgcmVzQ2hhcnNldEFmdGVyICAgID0gICAgcmVzLmdldENoYXJhY3RlckVuY29kaW5nKCk7CiAKICAgICAgICAgICAgIHJlcy5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sOyBjaGFyc2V0PSIgKyByZXNDaGFyc2V0QWZ0ZXIpOwogICAgICAgICAgICAgLy8gT3V0cHV0IHN0cmVhbSBmb3IgdGhlIHJlc3BvbnNlCi0gICAgICAgICAgICBqYXZhLmlvLlByaW50V3JpdGVyIG91dAk9CXJlcy5nZXRXcml0ZXIoKTsKKyAgICAgICAgICAgIGphdmEuaW8uUHJpbnRXcml0ZXIgb3V0ICAgID0gICAgcmVzLmdldFdyaXRlcigpOwogCiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGh0bWw+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGhlYWQ+PHRpdGxlPkZvcm1hdHRpbmcgZGF0ZSBhcyBwZXIgYnJvd3NlcidzIGxvY2FsZTwvdGl0bGU+PC9oZWFkPiIpOwpAQCAtMTYxLDE5ICsxNjEsMTkgQEAKICAgICAgICAgICAgIG91dC5wcmludGxuKCJSZXNwb25zZSBjaGFyc2V0IGFmdGVyIHNldHRpbmcgaXQgZnJvbSByZXF1ZXN0IGxvY2FsZTogIiArIHJlc0NoYXJzZXRBZnRlciArICI8YnI+Iik7CiAKICAgICAgICAgICAgIC8vIEdldCB0b2RheSdzIGRhdGUgYW5kIGZvcm1hdHMgaXQgdXNpbmcgdGhlIGJyb3dzZXIgbG9jYWxlCi0gICAgICAgICAgICBqYXZhLnV0aWwuRGF0ZSB0b2RheQk9CW5ldyBqYXZhLnV0aWwuRGF0ZSgpOwotICAgICAgICAgICAgRGF0ZUZvcm1hdCBmb3JtYXR0ZXIJPQlEYXRlRm9ybWF0LmdldERhdGVJbnN0YW5jZShEYXRlRm9ybWF0LkZVTEwsIGJyb3dzZXJMb2NhbGUpOwotICAgICAgICAgICAgU3RyaW5nIGZvcm1hdHRlZERhdGUJPQlmb3JtYXR0ZXIuZm9ybWF0KHRvZGF5KTsKKyAgICAgICAgICAgIGphdmEudXRpbC5EYXRlIHRvZGF5ICAgID0gICAgbmV3IGphdmEudXRpbC5EYXRlKCk7CisgICAgICAgICAgICBEYXRlRm9ybWF0IGZvcm1hdHRlciAgICA9ICAgIERhdGVGb3JtYXQuZ2V0RGF0ZUluc3RhbmNlKERhdGVGb3JtYXQuRlVMTCwgYnJvd3NlckxvY2FsZSk7CisgICAgICAgICAgICBTdHJpbmcgZm9ybWF0dGVkRGF0ZSAgICA9ICAgIGZvcm1hdHRlci5mb3JtYXQodG9kYXkpOwogCiAgICAgICAgICAgICBvdXQucHJpbnRsbigiVG9kYXkncyBkYXRlIGZvciAiICsgcmVzTG9jYWxlQWZ0ZXIgKyAiIGlzIDogIiArIGZvcm1hdHRlZERhdGUgKyAiPGJyPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxicj4iKTsKLQkJCW91dC5wcmludGxuKCI8UD48QlI+PEEgSFJFRj1cIi9pMThuLXNpbXBsZVwiPkJhY2sgdG8gc2FtcGxlIGhvbWU8L0E+PC9QPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxQPjxCUj48QSBIUkVGPVwiL2kxOG4tc2ltcGxlXCI+QmFjayB0byBzYW1wbGUgaG9tZTwvQT48L1A+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9ib2R5PjwvaHRtbD4iKTsKICAgICAgICAgICAgIG91dC5jbG9zZSgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotCX0KKyAgICB9CiAKICAgICAvKiogU2V0cyByZXF1ZXN0J3MgY2hhcmFjdGVyIGVuY29kaW5nIHVzaW5nIHNldENoYXJhY3RlckVuY29kaW5nIG1ldGhvZCBvZiBIdHRwU2VydmxldFJlcXVlc3QgaW50ZXJmYWNlLgogICAgICAqICBUaGUgc2V0Q2hhcmFjdGVyRW5jb2RpbmcgbWV0aG9kIGlzIHVzZWQgdG8gaW5mb3JtIHRoZSBzZXJ2bGV0IGNvbnRhaW5lciB0byByZWFkIHJlcXVlc3QgcGFyYW1ldGVycyB1c2luZyBzcGVjaWZpZWQgZW5jb2RpbmcuCkBAIC0xODMsMjQgKzE4MywyNCBAQAogICAgIHByb3RlY3RlZCB2b2lkIHNldENoYXJFbmNvZGluZyAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpCiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKLQkJCVN0cmluZyBuYW1lCQkJPQlyZXEuZ2V0UGFyYW1ldGVyKCJuYW1lIik7Ci0JCQlTdHJpbmcgY2hhcnNldHZhbAk9CXJlcS5nZXRQYXJhbWV0ZXIoImNoYXJzZXR2YWwiKTsKLQkJCXJlcy5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sOyBjaGFyc2V0PSIgKyBjaGFyc2V0dmFsKTsKKyAgICAgICAgICAgIFN0cmluZyBuYW1lICAgICAgICAgICAgPSAgICByZXEuZ2V0UGFyYW1ldGVyKCJuYW1lIik7CisgICAgICAgICAgICBTdHJpbmcgY2hhcnNldHZhbCAgICA9ICAgIHJlcS5nZXRQYXJhbWV0ZXIoImNoYXJzZXR2YWwiKTsKKyAgICAgICAgICAgIHJlcy5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sOyBjaGFyc2V0PSIgKyBjaGFyc2V0dmFsKTsKIAotCQkJLy8gT3V0cHV0IHN0cmVhbSBmb3IgdGhlIHJlc3BvbnNlCi0JCQlQcmludFdyaXRlciBvdXQJCT0JcmVzLmdldFdyaXRlcigpOworICAgICAgICAgICAgLy8gT3V0cHV0IHN0cmVhbSBmb3IgdGhlIHJlc3BvbnNlCisgICAgICAgICAgICBQcmludFdyaXRlciBvdXQgICAgICAgID0gICAgcmVzLmdldFdyaXRlcigpOwogCi0JCQlvdXQucHJpbnRsbigiPGh0bWw+Iik7Ci0JCQlvdXQucHJpbnRsbigiPGhlYWQ+PHRpdGxlPlNldHRpbmcgcmVxdWVzdCBvYmplY3QncyBjaGFyYWN0ZXIgZW5jb2RpbmcgdG8gIiArIGNoYXJzZXR2YWwgKyAiPC90aXRsZT48L2hlYWQ+Iik7Ci0JCQlvdXQucHJpbnRsbigiPGJvZHk+Iik7Ci0JCQlvdXQucHJpbnRsbigiPGJyPjxIMz4gVGhlIG5hbWUgZW50ZXJlZCB3YXMgOiAiICsgbmFtZSArICIgYW5kIHRoZSBhc3NvY2lhdGVkIGVuY29kaW5nIHdhcyA6ICIgKyBjaGFyc2V0dmFsICsgIjwvSDM+PGJyPiIpOwotCQkJb3V0LnByaW50bG4oIjxicj4iKTsKLQkJCW91dC5wcmludGxuKCI8UD48QlI+PEEgSFJFRj1cIi9pMThuLXNpbXBsZVwiPkJhY2sgdG8gc2FtcGxlIGhvbWU8L0E+PC9QPiIpOwotCQkJb3V0LnByaW50bG4oIjwvYm9keT48L2h0bWw+Iik7Ci0JCQlvdXQuY2xvc2UoKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8aHRtbD4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8aGVhZD48dGl0bGU+U2V0dGluZyByZXF1ZXN0IG9iamVjdCdzIGNoYXJhY3RlciBlbmNvZGluZyB0byAiICsgY2hhcnNldHZhbCArICI8L3RpdGxlPjwvaGVhZD4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8Ym9keT4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8YnI+PEgzPiBUaGUgbmFtZSBlbnRlcmVkIHdhcyA6ICIgKyBuYW1lICsgIiBhbmQgdGhlIGFzc29jaWF0ZWQgZW5jb2Rpbmcgd2FzIDogIiArIGNoYXJzZXR2YWwgKyAiPC9IMz48YnI+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJyPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxQPjxCUj48QSBIUkVGPVwiL2kxOG4tc2ltcGxlXCI+QmFjayB0byBzYW1wbGUgaG9tZTwvQT48L1A+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9ib2R5PjwvaHRtbD4iKTsKKyAgICAgICAgICAgIG91dC5jbG9zZSgpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIC8qKiBJbmNsdWRlcyBhIHNlcnZsZXQgdXNpbmcgUmVxdWVzdERpc3BhdGNoZXIncyBpbmNsdWRlIG1ldGhvZC4gSGVyZSB0aGUgZGF0YSBkaXNwbGF5IGJlaGF2aW91cgpAQCAtMjEyLDMwICsyMTIsMzAgQEAKICAgICBwcm90ZWN0ZWQgdm9pZCBpbmNsdWRlU2VydmxldCAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpCiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKLQkJCVN0cmluZyBuYW1lID0gcmVxLmdldFBhcmFtZXRlcigibmFtZSIpOwotCQkJU3RyaW5nIGNoYXJzZXR2YWwgPSByZXEuZ2V0UGFyYW1ldGVyKCJjaGFyc2V0dmFsIik7Ci0JCQlyZXMuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbDsgY2hhcnNldD0iICsgY2hhcnNldHZhbCk7CisgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IHJlcS5nZXRQYXJhbWV0ZXIoIm5hbWUiKTsKKyAgICAgICAgICAgIFN0cmluZyBjaGFyc2V0dmFsID0gcmVxLmdldFBhcmFtZXRlcigiY2hhcnNldHZhbCIpOworICAgICAgICAgICAgcmVzLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9IiArIGNoYXJzZXR2YWwpOwogCi0JCQkvLyBPdXRwdXQgc3RyZWFtIGZvciB0aGUgcmVzcG9uc2UKLQkJCVByaW50V3JpdGVyIG91dCA9IHJlcy5nZXRXcml0ZXIoKTsKKyAgICAgICAgICAgIC8vIE91dHB1dCBzdHJlYW0gZm9yIHRoZSByZXNwb25zZQorICAgICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzLmdldFdyaXRlcigpOwogCi0JCQlvdXQucHJpbnRsbigiPGh0bWw+Iik7Ci0JCQlvdXQucHJpbnRsbigiPGhlYWQ+PHRpdGxlPkluY2x1ZGluZyBhbm90aGVyIHNlcnZsZXQgZnJvbSBhIHNlcnZsZXQ8L3RpdGxlPjwvaGVhZD4iKTsKLQkJCW91dC5wcmludGxuKCI8Ym9keT4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8aHRtbD4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8aGVhZD48dGl0bGU+SW5jbHVkaW5nIGFub3RoZXIgc2VydmxldCBmcm9tIGEgc2VydmxldDwvdGl0bGU+PC9oZWFkPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxib2R5PiIpOwogCi0JCQlSZXF1ZXN0RGlzcGF0Y2hlciBkaXNwYXRjaGVyOwotCQkJZGlzcGF0Y2hlciA9IGdldFNlcnZsZXRDb250ZXh0KCkuZ2V0UmVxdWVzdERpc3BhdGNoZXIoIi9JbmNsdWRlZFNlcnZsZXQiKTsKLQkJCWRpc3BhdGNoZXIuaW5jbHVkZShyZXEsIHJlcyk7CisgICAgICAgICAgICBSZXF1ZXN0RGlzcGF0Y2hlciBkaXNwYXRjaGVyOworICAgICAgICAgICAgZGlzcGF0Y2hlciA9IGdldFNlcnZsZXRDb250ZXh0KCkuZ2V0UmVxdWVzdERpc3BhdGNoZXIoIi9JbmNsdWRlZFNlcnZsZXQiKTsKKyAgICAgICAgICAgIGRpc3BhdGNoZXIuaW5jbHVkZShyZXEsIHJlcyk7CiAKLQkJCW91dC5wcmludGxuKCI8YnI+TmFtZSBmcm9tIHRoZSBpbmNsdWRpbmcgc2VydmxldDogIiArIG5hbWUgKyAiPGJyPiIpOwotCQkJb3V0LnByaW50bG4oIjxicj4iKTsKLQkJCW91dC5wcmludGxuKCI8UD48QlI+PEEgSFJFRj1cIi9pMThuLXNpbXBsZVwiPkJhY2sgdG8gc2FtcGxlIGhvbWU8L0E+PC9QPiIpOwotCQkJb3V0LnByaW50bG4oIjwvYm9keT48L2h0bWw+Iik7Ci0JCQlvdXQuY2xvc2UoKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8YnI+TmFtZSBmcm9tIHRoZSBpbmNsdWRpbmcgc2VydmxldDogIiArIG5hbWUgKyAiPGJyPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxicj4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8UD48QlI+PEEgSFJFRj1cIi9pMThuLXNpbXBsZVwiPkJhY2sgdG8gc2FtcGxlIGhvbWU8L0E+PC9QPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvYm9keT48L2h0bWw+Iik7CisgICAgICAgICAgICBvdXQuY2xvc2UoKTsKIAotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQorICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIC8qKiBGb3J3YXJkcyBhIHNlcnZsZXQgdXNpbmcgUmVxdWVzdERpc3BhdGNoZXIncyBmb3J3YXJkIG1ldGhvZC4gSGVyZSB0aGUgZGF0YSBkaXNwbGF5IGJlaGF2aW91cgpAQCAtMjQ4LDI0ICsyNDgsMjQgQEAKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogCiAgICAgICAgIHRyeSB7Ci0JCQlTdHJpbmcgbmFtZQkJCT0gcmVxLmdldFBhcmFtZXRlcigibmFtZSIpOwotCQkJU3RyaW5nIGNoYXJzZXR2YWwJPSByZXEuZ2V0UGFyYW1ldGVyKCJjaGFyc2V0dmFsIik7Ci0JCQlyZXMuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbDsgY2hhcnNldD0iICsgY2hhcnNldHZhbCk7CisgICAgICAgICAgICBTdHJpbmcgbmFtZSAgICAgICAgICAgID0gcmVxLmdldFBhcmFtZXRlcigibmFtZSIpOworICAgICAgICAgICAgU3RyaW5nIGNoYXJzZXR2YWwgICAgPSByZXEuZ2V0UGFyYW1ldGVyKCJjaGFyc2V0dmFsIik7CisgICAgICAgICAgICByZXMuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbDsgY2hhcnNldD0iICsgY2hhcnNldHZhbCk7CiAKLQkJCS8vIE91dHB1dCBzdHJlYW0gZm9yIHRoZSByZXNwb25zZQotCQkJUHJpbnRXcml0ZXIgb3V0CQk9IHJlcy5nZXRXcml0ZXIoKTsKKyAgICAgICAgICAgIC8vIE91dHB1dCBzdHJlYW0gZm9yIHRoZSByZXNwb25zZQorICAgICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ICAgICAgICA9IHJlcy5nZXRXcml0ZXIoKTsKIAotCQkJb3V0LnByaW50bG4oIjxodG1sPiIpOwotCQkJb3V0LnByaW50bG4oIjxoZWFkPjx0aXRsZT5JbmNsdWRpbmcgYW5vdGhlciBzZXJ2bGV0IGZyb20gYSBzZXJ2bGV0PC90aXRsZT48L2hlYWQ+Iik7Ci0JCQlvdXQucHJpbnRsbigiPGJvZHk+Iik7Ci0JCQlvdXQucHJpbnRsbigiPGJyPlRoZSBuYW1lIGZyb20gZm9yd2FyZGluZyBzZXJ2bGV0IDogIiArIG5hbWUgKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8aHRtbD4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8aGVhZD48dGl0bGU+SW5jbHVkaW5nIGFub3RoZXIgc2VydmxldCBmcm9tIGEgc2VydmxldDwvdGl0bGU+PC9oZWFkPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxib2R5PiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxicj5UaGUgbmFtZSBmcm9tIGZvcndhcmRpbmcgc2VydmxldCA6ICIgKyBuYW1lICk7CiAKLQkJCVJlcXVlc3REaXNwYXRjaGVyIGRpc3BhdGNoZXI7Ci0JCQlkaXNwYXRjaGVyID0gZ2V0U2VydmxldENvbnRleHQoKS5nZXRSZXF1ZXN0RGlzcGF0Y2hlcigiL0ZvcndhcmRlZFNlcnZsZXQiKTsKLQkJCWRpc3BhdGNoZXIuZm9yd2FyZChyZXEsIHJlcyk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9CisgICAgICAgICAgICBSZXF1ZXN0RGlzcGF0Y2hlciBkaXNwYXRjaGVyOworICAgICAgICAgICAgZGlzcGF0Y2hlciA9IGdldFNlcnZsZXRDb250ZXh0KCkuZ2V0UmVxdWVzdERpc3BhdGNoZXIoIi9Gb3J3YXJkZWRTZXJ2bGV0Iik7CisgICAgICAgICAgICBkaXNwYXRjaGVyLmZvcndhcmQocmVxLCByZXMpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIC8qKiBTZW5kIGVycm9yIG1lc3NhZ2VzIHVzaW5nIHJlc3BvbnNlJ3Mgc2VuZEVycm9yIG1ldGhvZC4gVGhlIHNlbmRFcnJvciBtZXRob2Qgc2VuZHMgbXVsdGkgYnl0ZSBlcnJvciBtZXNzYWdlcyBjb3JyZWN0bHkKQEAgLTI3NiwxNiArMjc2LDE2IEBACiAgICAgcHJvdGVjdGVkIHZvaWQgc2VuZEVycm9yTWVzc2FnZSAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpCiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKLQkJCVN0cmluZyBuYW1lCQkJPQlyZXEuZ2V0UGFyYW1ldGVyKCJuYW1lIik7Ci0JCQlTdHJpbmcgY2hhcnNldHZhbAk9CXJlcS5nZXRQYXJhbWV0ZXIoImNoYXJzZXR2YWwiKTsKLQkJCXJlcy5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sOyBjaGFyc2V0PSIgKyBjaGFyc2V0dmFsKTsKLQkJCXJlcy5zZW5kRXJyb3IoNDA0LCAiSTE4biBlcnJvciBtZXNzYWdlIGZyb20gc2VydmxldCAiKyBuYW1lKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KKyAgICAgICAgICAgIFN0cmluZyBuYW1lICAgICAgICAgICAgPSAgICByZXEuZ2V0UGFyYW1ldGVyKCJuYW1lIik7CisgICAgICAgICAgICBTdHJpbmcgY2hhcnNldHZhbCAgICA9ICAgIHJlcS5nZXRQYXJhbWV0ZXIoImNoYXJzZXR2YWwiKTsKKyAgICAgICAgICAgIHJlcy5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sOyBjaGFyc2V0PSIgKyBjaGFyc2V0dmFsKTsKKyAgICAgICAgICAgIHJlcy5zZW5kRXJyb3IoNDA0LCAiSTE4biBlcnJvciBtZXNzYWdlIGZyb20gc2VydmxldCAiKyBuYW1lKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KICAgICB9CiAKLQkvKiogTG9hZCByZXNvdXJjZSBidW5kbGUgYmFzZWQgb24gY2xpZW50J3MgbG9jYWxlLiBJZiB0aGVyZSBpcyBubyByZXNvdXJjZSBidW5kbGUgYXZhaWxhYmxlLCB0aGUgZGVmYXVsdCByZXNvdXJjZSBidW5kbGUKKyAgICAvKiogTG9hZCByZXNvdXJjZSBidW5kbGUgYmFzZWQgb24gY2xpZW50J3MgbG9jYWxlLiBJZiB0aGVyZSBpcyBubyByZXNvdXJjZSBidW5kbGUgYXZhaWxhYmxlLCB0aGUgZGVmYXVsdCByZXNvdXJjZSBidW5kbGUKICAgICAgKiAgd2lsbCBiZSBwaWNrZWQgdXAKICAgICAgKiAgQHBhcmFtIHJlcXVlc3Qgc2VydmxldCByZXF1ZXN0CiAgICAgICogIEBwYXJhbSByZXNwb25zZSBzZXJ2bGV0IHJlc3BvbnNlCkBAIC0yOTMsNDMgKzI5Myw0MyBAQAogICAgIHByb3RlY3RlZCB2b2lkIHVzZVJlc291cmNlQnVuZGxlIChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlcykKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICB0cnkgewotCQkJU3RyaW5nIG5hbWUJCQk9CXJlcS5nZXRQYXJhbWV0ZXIoIm5hbWUiKTsKLQkJCVN0cmluZyBjaGFyc2V0dmFsCT0JcmVxLmdldFBhcmFtZXRlcigiY2hhcnNldHZhbCIpOwotCQkJcmVzLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9IiArIGNoYXJzZXR2YWwpOwotCQkJUmVzb3VyY2VCdW5kbGUgcmIJPQludWxsOwotCQkJcmIJCQkJCT0JUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKCJMb2NhbFN0cmluZ3MiLHJlcS5nZXRMb2NhbGUoKSk7Ci0JCQlTdHJpbmcgbXNnOwotCQkJUHJpbnRXcml0ZXIgb3V0CQk9CXJlcy5nZXRXcml0ZXIoKTsKKyAgICAgICAgICAgIFN0cmluZyBuYW1lICAgICAgICAgICAgPSAgICByZXEuZ2V0UGFyYW1ldGVyKCJuYW1lIik7CisgICAgICAgICAgICBTdHJpbmcgY2hhcnNldHZhbCAgICA9ICAgIHJlcS5nZXRQYXJhbWV0ZXIoImNoYXJzZXR2YWwiKTsKKyAgICAgICAgICAgIHJlcy5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sOyBjaGFyc2V0PSIgKyBjaGFyc2V0dmFsKTsKKyAgICAgICAgICAgIFJlc291cmNlQnVuZGxlIHJiICAgID0gICAgbnVsbDsKKyAgICAgICAgICAgIHJiICAgICAgICAgICAgICAgICAgICA9ICAgIFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZSgiTG9jYWxTdHJpbmdzIixyZXEuZ2V0TG9jYWxlKCkpOworICAgICAgICAgICAgU3RyaW5nIG1zZzsKKyAgICAgICAgICAgIFByaW50V3JpdGVyIG91dCAgICAgICAgPSAgICByZXMuZ2V0V3JpdGVyKCk7CiAKLQkJCW91dC5wcmludGxuKCI8aHRtbD4iKTsKLQkJCW91dC5wcmludGxuKCI8aGVhZD4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8aHRtbD4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8aGVhZD4iKTsKIAotCQkJdHJ5IHsKLQkJCQltc2cJCQkJPQlyYi5nZXRTdHJpbmcgKCJ0aXRsZSIpOwotCQkJCW91dC5wcmludGxuKCI8dGl0bGU+IiArIG1zZyArICI8L3RpdGxlPiIpOwotCQkJCW91dC5wcmludGxuKCI8L2hlYWQ+Iik7Ci0JCQkJb3V0LnByaW50bG4oIjxib2R5PiIpOwotCQkJCW91dC5wcmludGxuKCI8YnI+PEgxPiBIZWxsbyAiICsgbmFtZSArICIsIHRoZSBmb2xsb3dpbmcgbWVzc2FnZXMgYXJlIGRpc3BsYXllZCBmcm9tIGEgcmVzb3VyY2UgYnVuZGxlPC9IMT4iKTsKLQkJCQltc2cgPSByYi5nZXRTdHJpbmcgKCJtc2ciKTsKLQkJCQlvdXQucHJpbnRsbigiPGJyPjxicj48SDI+IiArIG1zZyArICI8L0gyPiIpOwotCQkJCW1zZyA9IHJiLmdldFN0cmluZyAoInRoYW5rcyIpOwotCQkJCW91dC5wcmludGxuKCI8YnI+PGJyPjxIMz4iICsgbXNnICsgIjwvSDM+Iik7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIG1zZyAgICAgICAgICAgICAgICA9ICAgIHJiLmdldFN0cmluZyAoInRpdGxlIik7CisgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjx0aXRsZT4iICsgbXNnICsgIjwvdGl0bGU+Iik7CisgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvaGVhZD4iKTsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJvZHk+Iik7CisgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxicj48SDE+IEhlbGxvICIgKyBuYW1lICsgIiwgdGhlIGZvbGxvd2luZyBtZXNzYWdlcyBhcmUgZGlzcGxheWVkIGZyb20gYSByZXNvdXJjZSBidW5kbGU8L0gxPiIpOworICAgICAgICAgICAgICAgIG1zZyA9IHJiLmdldFN0cmluZyAoIm1zZyIpOworICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8YnI+PGJyPjxIMj4iICsgbXNnICsgIjwvSDI+Iik7CisgICAgICAgICAgICAgICAgbXNnID0gcmIuZ2V0U3RyaW5nICgidGhhbmtzIik7CisgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxicj48YnI+PEgzPiIgKyBtc2cgKyAiPC9IMz4iKTsKIAotCQkJfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgCX0KLQkJCW91dC5wcmludGxuKCI8YnI+Iik7Ci0JCQlvdXQucHJpbnRsbigiPFA+PEJSPjxBIEhSRUY9XCIvaTE4bi1zaW1wbGVcIj5CYWNrIHRvIHNhbXBsZSBob21lPC9BPjwvUD4iKTsKLSAgICAgICAgCW91dC5wcmludGxuKCI8L2JvZHk+PC9odG1sPiIpOwotICAgICAgICAJb3V0LmNsb3NlKCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9CisgICAgICAgICAgICB9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0LnByaW50bG4oIjxicj4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8UD48QlI+PEEgSFJFRj1cIi9pMThuLXNpbXBsZVwiPkJhY2sgdG8gc2FtcGxlIGhvbWU8L0E+PC9QPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvYm9keT48L2h0bWw+Iik7CisgICAgICAgICAgICBvdXQuY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KICAgICB9CiAKLQkvKiogRm9yd2FyZHMgcmVxdWVzdCBmcm9tIHNlcnZsZXQgdG8ganNwIHVzaW5nIFJlcXVlc3REaXNwYXRjaGVyJ3MgZm9yd2FyZCBtZXRob2QuIEhlcmUgdGhlIGRhdGEgZGlzcGxheSBiZWhhdmlvdXIKKyAgICAvKiogRm9yd2FyZHMgcmVxdWVzdCBmcm9tIHNlcnZsZXQgdG8ganNwIHVzaW5nIFJlcXVlc3REaXNwYXRjaGVyJ3MgZm9yd2FyZCBtZXRob2QuIEhlcmUgdGhlIGRhdGEgZGlzcGxheSBiZWhhdmlvdXIKICAgICAgKiAgY2hhbmdlcyBiYXNlZCBvbiB0aGUgY29udGVudCB0eXBlIHNldC4gSWYgdGhlIGZvcndhcmRlZCBqc3Agc2V0cyB0aGUgY29udGVudCB0eXBlIHRvIGEgZGlmZmVyZW50IHZhbHVlIHRoZW4gdGhlIG5ldyBjb250ZW50IHR5cGUKICAgICAgKiAgc2hvdWxkIGJlIHNldCBmb3IgdGhlIG91dHB1dCBzdHJlYW0KICAgICAgKiAgQHBhcmFtIHJlcXVlc3Qgc2VydmxldCByZXF1ZXN0CkBAIC0zMzgsMTIgKzMzOCwxMiBAQAogICAgIHByb3RlY3RlZCB2b2lkIGZvcndhcmRKc3AgKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzKQogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7Ci0JCQlSZXF1ZXN0RGlzcGF0Y2hlciBkaXNwYXRjaGVyOwotCQkJZGlzcGF0Y2hlciA9IGdldFNlcnZsZXRDb250ZXh0KCkuZ2V0UmVxdWVzdERpc3BhdGNoZXIoIi9Gb3J3YXJkZWRKc3AuanNwIik7Ci0gICAgICAJCWRpc3BhdGNoZXIuZm9yd2FyZChyZXEsIHJlcyk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9CisgICAgICAgICAgICBSZXF1ZXN0RGlzcGF0Y2hlciBkaXNwYXRjaGVyOworICAgICAgICAgICAgZGlzcGF0Y2hlciA9IGdldFNlcnZsZXRDb250ZXh0KCkuZ2V0UmVxdWVzdERpc3BhdGNoZXIoIi9Gb3J3YXJkZWRKc3AuanNwIik7CisgICAgICAgICAgICAgIGRpc3BhdGNoZXIuZm9yd2FyZChyZXEsIHJlcyk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CiAgICAgfQogCiAgICAgLyoqIEhhbmRsZXMgdGhlIEhUVFAgPGNvZGU+R0VUPC9jb2RlPiBtZXRob2QuCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJDbGFzc1BhdGgvbWlzYy9zYW1wbGVzL2kxOG4vc2ltcGxlL3NlcnZsZXQvc2FtcGxlYmVhbi9KYXZhVXNlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliQ2xhc3NQYXRoL21pc2Mvc2FtcGxlcy9pMThuL3NpbXBsZS9zZXJ2bGV0L3NhbXBsZWJlYW4vSmF2YVVzZUJlYW4uamF2YQppbmRleCBjOTg1N2Y5Li43OGRjOWZmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJDbGFzc1BhdGgvbWlzYy9zYW1wbGVzL2kxOG4vc2ltcGxlL3NlcnZsZXQvc2FtcGxlYmVhbi9KYXZhVXNlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYkNsYXNzUGF0aC9taXNjL3NhbXBsZXMvaTE4bi9zaW1wbGUvc2VydmxldC9zYW1wbGViZWFuL0phdmFVc2VCZWFuLmphdmEKQEAgLTIzLDcgKzIzLDcgQEAKIC8qKgogICogU2ltcGxlIEphdmEgQmVhbiB1c2VkIHRvIHNldC9nZXQgbmFtZSBhbmQgZ3JlZXRpbmcgbWVzc2FnZXMgZnJvbSBhIGpzcAogICogQGF1dGhvciAgQ2hhbmQgQmFzaGEKLSAqIEB2ZXJzaW9uCTEuMAorICogQHZlcnNpb24gICAgMS4wCiAgKi8KIHB1YmxpYyBjbGFzcyBKYXZhVXNlQmVhbiB7CiAKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICB9CiAKLQkvKiogR2V0cyB0aGUgbmFtZSB0aGF0IHdhcyBzZXQgdXNpbmcgc2V0TmFtZShTdHJpbmcgbmFtZSkgbWV0aG9kIG9mIHRoaXMgY2xhc3MKKyAgICAvKiogR2V0cyB0aGUgbmFtZSB0aGF0IHdhcyBzZXQgdXNpbmcgc2V0TmFtZShTdHJpbmcgbmFtZSkgbWV0aG9kIG9mIHRoaXMgY2xhc3MKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CiAgICAgICAgIHJldHVybiBuYW1lOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliQ2xhc3NQYXRoL3dhci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJDbGFzc1BhdGgvd2FyL2J1aWxkLnhtbAppbmRleCA4MDE2NmRkLi40ZjI2NmM1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJDbGFzc1BhdGgvd2FyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJDbGFzc1BhdGgvd2FyL2J1aWxkLnhtbApAQCAtMjMsMzAgKzIzLDMwIEBACiAKIDxwcm9qZWN0IG5hbWU9ImkxOG4tc2ltcGxlIiBkZWZhdWx0PSJhbGwiIGJhc2VkaXI9Ii4iPgogCi0JJmNvbW1vbkJ1aWxkOworICAgICZjb21tb25CdWlsZDsKICAgICA8cHJvcGVydHkgbmFtZT0iYXJjaGl2ZWRpciIgdmFsdWU9IiR7YnVpbGR9L2FyY2hpdmVzIi8+CiAKICAgICAgICAgPHRhcmdldCBuYW1lPSJwcmVwYXJlIiBkZXBlbmRzPSJpbml0Ij4KICAgICAgICAgICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkfSIgLz4KICAgICAgICAgPC90YXJnZXQ+Ci0JCi0JPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJwcmVwYXJlIi8+Ci0JCi0JPHRhcmdldCBuYW1lPSJhc3NlbWJsZSIgZGVwZW5kcz0iY29tcGlsZSI+Ci0JCTxjb3B5IGZpbGU9Ii4uL2Rlc2NyaXB0b3Ivd2ViLnhtbCIgdG9kaXI9IiR7YnVpbGR9L1dFQi1JTkYiLz4KLQkJPGNvcHkgZmlsZT0iLi4vZGVzY3JpcHRvci9zdW4td2ViLnhtbCIgdG9kaXI9IiR7YnVpbGR9L1dFQi1JTkYiIAorCisgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJwcmVwYXJlIi8+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIiBkZXBlbmRzPSJjb21waWxlIj4KKyAgICAgICAgPGNvcHkgZmlsZT0iLi4vZGVzY3JpcHRvci93ZWIueG1sIiB0b2Rpcj0iJHtidWlsZH0vV0VCLUlORiIvPgorICAgICAgICA8Y29weSBmaWxlPSIuLi9kZXNjcmlwdG9yL3N1bi13ZWIueG1sIiB0b2Rpcj0iJHtidWlsZH0vV0VCLUlORiIKICAgICAgICAgICAgICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLQkJPGNvcHkgdG9kaXI9IiR7YnVpbGR9L1dFQi1JTkYvdGxkcyI+CisgICAgICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkfS9XRUItSU5GL3RsZHMiPgogICAgICAgICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSJ0bGRzIi8+CiAgICAgICAgICAgICAgICAgPC9jb3B5PgogICAgICAgICAgICAgICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkfSI+CiAgICAgICAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9ImRvY3Jvb3QiIGluY2x1ZGVzPSIqLmpzcCwgKi5odG1sIi8+CiAgICAgICAgICAgICAgICAgPC9jb3B5PgotCQk8amFyIGRlc3RmaWxlPSIke2FyY2hpdmVkaXJ9L2kxOG4tc2ltcGxlLndhciIgCisgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXJjaGl2ZWRpcn0vaTE4bi1zaW1wbGUud2FyIgogICAgICAgICAgICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZH0iLz4KLQk8L3RhcmdldD4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0icHJpdmF0ZS1hbGwiIGRlcGVuZHM9ImFzc2VtYmxlIj4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIiBkZXBlbmRzPSJhc3NlbWJsZSI+CisgICAgPC90YXJnZXQ+CiAKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYmNsYXNzcGF0aDIvUmVzb3VyY2VIZWxwZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYmNsYXNzcGF0aDIvUmVzb3VyY2VIZWxwZXIuamF2YQppbmRleCA1ZTI3NTQ4Li40NDk5MjBhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJjbGFzc3BhdGgyL1Jlc291cmNlSGVscGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliY2xhc3NwYXRoMi9SZXNvdXJjZUhlbHBlci5qYXZhCkBAIC0zMiwxMCArMzIsMTAgQEAKICAqIEBhdXRob3IgdGpxdWlubgogICovCiBwdWJsaWMgY2xhc3MgUmVzb3VyY2VIZWxwZXIgewotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE5PX1JFU09VUkNFID0gIk5PX1JFU09VUkNFIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9fUFJPUEVSVFkgPSAiTk9fUFJPUEVSVFkiOwotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZmluZChTdHJpbmcgcmVzb3VyY2VOYW1lLCBTdHJpbmcgcHJvcGVydHlOYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24gewogICAgICAgICBTdHJpbmcgcmVzdWx0OwogICAgICAgICBVUkwgdXJsID0gUmVzb3VyY2VIZWxwZXIuY2xhc3MuZ2V0UmVzb3VyY2UocmVzb3VyY2VOYW1lKTsKQEAgLTUwLDcgKzUwLDcgQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgVVJMQ29ubmVjdGlvbiBjbnggPSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgICAgICAgICBjbnguc2V0VXNlQ2FjaGVzKGZhbHNlKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGlzID0gY254LmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgICAgICAgICAgUHJvcGVydGllcyBwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7CiAgICAgICAgICAgICAgICAgcHJvcHMubG9hZChpcyk7CkBAIC02OCwxNCArNjgsMTQgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIE1ha2VzIHN1cmUgdGhhdCBlYWNoIHRlc3Qgb2YgdGhlIGZvcm0gPHJlc291cmNlTmFtZT46PHByb3BlcnR5TmFtZT49PGV4cGVjdGVkVmFsdWU+Ci0gICAgICogcGFzc2VzOyB0aGF0IGlzLCB0aGF0IHRoZSByZXNvdXJjZSBpcyBmb3VuZCwgdGhhdCB0aGUgcHJvcGVydHkgaXMgCisgICAgICogcGFzc2VzOyB0aGF0IGlzLCB0aGF0IHRoZSByZXNvdXJjZSBpcyBmb3VuZCwgdGhhdCB0aGUgcHJvcGVydHkgaXMKICAgICAgKiBzZXQgYnkgdGhlIHByb3BlcnRpZXMgZmlsZSByZXByZXNlbnRlZCBieSB0aGF0IHJlc291cmNlLCBhbmQgdGhhdCB0aGUKICAgICAgKiBwcm9wZXJ0eSB2YWx1ZSBpcyB0aGUgc2FtZSBhcyB0aGUgZXhwZWN0ZWQgdmFsdWUuCiAgICAgICpAcGFyYW0gdGVzdHMgMCBvciBtb3JlIGV4cHJlc3Npb25zIDxyZXNvdXJjZU5hbWU+Ojxwcm9wZXJ0eU5hbWU+PTxleHBlY3RlZFZhbHVlPgotICAgICAqQHJldHVybiBSZXN1bHRzIG9iamVjdCBkZXNjcmliaW5nIHRoZSByZXN1bHRzIG9mIHRoZSB0ZXN0cyAKKyAgICAgKkByZXR1cm4gUmVzdWx0cyBvYmplY3QgZGVzY3JpYmluZyB0aGUgcmVzdWx0cyBvZiB0aGUgdGVzdHMKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIFJlc3VsdCBjaGVja0FsbChTdHJpbmdbXSB0ZXN0cywgVGVzdFR5cGUgY2FsbGVyVGVzdFR5cGUpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIFJlc3VsdCByZXN1bHQgPSBuZXcgUmVzdWx0KCk7CkBAIC05Myw3ICs5Myw3IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmICggISBjYWxsZXJUZXN0VHlwZS5ydW5zKGN1cnJlbnRBcmd1bWVudFRlc3RUeXBlKSkgewogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQpAQCAtMTE3LDM5ICsxMTcsMzkgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgUmVzdWx0IGltcGxlbWVudHMgU2VyaWFsaXphYmxlIHsKICAgICAgICAgcHJpdmF0ZSBib29sZWFuIHJlc3VsdCA9IHRydWU7CiAgICAgICAgIHByaXZhdGUgU3RyaW5nQnVpbGRlciByZXN1bHRzID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKLSAgICAgICAgCisKICAgICAgICAgcHJpdmF0ZSB2b2lkIHJlY29yZFJlc3VsdChib29sZWFuIHJlc3VsdCwgU3RyaW5nIG5vdGUpIHsKICAgICAgICAgICAgIHRoaXMucmVzdWx0ICY9IHJlc3VsdDsKICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG5vdGUpLmFwcGVuZCgiQCIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHB1YmxpYyBib29sZWFuIGdldFJlc3VsdCgpIHsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcHVibGljIFN0cmluZ0J1aWxkZXIgZ2V0UmVzdWx0cygpIHsKICAgICAgICAgICAgIHJldHVybiByZXN1bHRzOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyBlbnVtIFRlc3RUeXBlIHsKICAgICAgICAgQ0xJRU5UKCJjbGllbnRvbmx5IiksCiAgICAgICAgIFNFUlZFUigic2VydmVyb25seSIpLAogICAgICAgICBCT1RIKCJib3RoIik7Ci0gICAgICAgIAorCiAgICAgICAgIHByaXZhdGUgU3RyaW5nIG5hbWU7CiAgICAgICAgIFRlc3RUeXBlKFN0cmluZyBuYW1lKSB7CiAgICAgICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICAgICAgICAgICByZXR1cm4gbmFtZTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBwdWJsaWMgc3RhdGljIFRlc3RUeXBlIGZpbmQoU3RyaW5nIHR5cGUpIHsKICAgICAgICAgICAgIGZvciAoVGVzdFR5cGUgdHQgOiB2YWx1ZXMoKSkgewogICAgICAgICAgICAgICAgIGlmICh0dC50b1N0cmluZygpLmVxdWFscyh0eXBlKSkgewpAQCAtMTU4LDcgKzE1OCw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBib29sZWFuIHJ1bnMoVGVzdFR5cGUgYXJndW1lbnRUZXN0VHlwZSkgewogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50VGVzdFR5cGUuZXF1YWxzKEJPVEgpIHx8ICh0aGlzLmVxdWFscyhhcmd1bWVudFRlc3RUeXBlKSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYmNsYXNzcGF0aDIvYXBwbGljYXRpb24tZGVmYXVsdExpYkRpci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJjbGFzc3BhdGgyL2FwcGxpY2F0aW9uLWRlZmF1bHRMaWJEaXIueG1sCmluZGV4IGVkOThhMmUuLmJlMWE4MmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYmNsYXNzcGF0aDIvYXBwbGljYXRpb24tZGVmYXVsdExpYkRpci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliY2xhc3NwYXRoMi9hcHBsaWNhdGlvbi1kZWZhdWx0TGliRGlyLnhtbApAQCAtMzUsNSArMzUsNSBAQAogICAgIE9taXR0aW5nIHRoZSA8bGlicmFyeS1kaXJlY3Rvcnk+IGVsZW1lbnQgZW50aXJlbHkgc2hvdWxkIGNhdXNlIHRoZSBhcHAKICAgICBzZXJ2ZXIgdG8gYWRkIGFsbCBqYXJzIGluIHRoZSBkZWZhdWx0ICdsaWInIHN1YmRpcmVjdG9yeSB0byB0aGUKICAgICBydW50aW1lIGNsYXNzcGF0aC4KLS0tPiAgICAKKy0tPgogPC9hcHBsaWNhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYmNsYXNzcGF0aDIvYXBwbGljYXRpb24tbm9MaWJEaXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliY2xhc3NwYXRoMi9hcHBsaWNhdGlvbi1ub0xpYkRpci54bWwKaW5kZXggY2ZkZGQ2Ny4uOWNhNTM4MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliY2xhc3NwYXRoMi9hcHBsaWNhdGlvbi1ub0xpYkRpci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliY2xhc3NwYXRoMi9hcHBsaWNhdGlvbi1ub0xpYkRpci54bWwKQEAgLTMxLDUgKzMxLDUgQEAKICAgPG1vZHVsZT4KICAgICAgIDxqYXZhPmNsaWVudC9saWJkaXJ0ZXN0LWNsaWVudC5qYXI8L2phdmE+CiAgIDwvbW9kdWxlPgotICA8bGlicmFyeS1kaXJlY3RvcnkvPiA8IS0tIHN1cHByZXNzIGxpYnJhcnkgZGlyZWN0b3J5IGhhbmRsaW5nIC0tPiAgCisgIDxsaWJyYXJ5LWRpcmVjdG9yeS8+IDwhLS0gc3VwcHJlc3MgbGlicmFyeSBkaXJlY3RvcnkgaGFuZGxpbmcgLS0+CiA8L2FwcGxpY2F0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliY2xhc3NwYXRoMi9hcHBsaWNhdGlvbi14TGliRGlyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYmNsYXNzcGF0aDIvYXBwbGljYXRpb24teExpYkRpci54bWwKaW5kZXggYzZkNzk1Zi4uYzVjMmRkYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliY2xhc3NwYXRoMi9hcHBsaWNhdGlvbi14TGliRGlyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJjbGFzc3BhdGgyL2FwcGxpY2F0aW9uLXhMaWJEaXIueG1sCkBAIC0zMSw1ICszMSw1IEBACiAgIDxtb2R1bGU+CiAgICAgICA8amF2YT5jbGllbnQvbGliZGlydGVzdC1jbGllbnQuamFyPC9qYXZhPgogICA8L21vZHVsZT4KLSAgPGxpYnJhcnktZGlyZWN0b3J5Png8L2xpYnJhcnktZGlyZWN0b3J5PiAgCisgIDxsaWJyYXJ5LWRpcmVjdG9yeT54PC9saWJyYXJ5LWRpcmVjdG9yeT4KIDwvYXBwbGljYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJjbGFzc3BhdGgyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYmNsYXNzcGF0aDIvYnVpbGQueG1sCmluZGV4IDUxMDg4MGMuLjgwY2M4ZDcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYmNsYXNzcGF0aDIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYmNsYXNzcGF0aDIvYnVpbGQueG1sCkBAIC0yNywxMTMgKzI3LDExMyBAQAogICAgIFRoaXMgc2V0IG9mIHRlc3RzIG1ha2Ugc3VyZSB0aGF0IHRoZSBoYW5kbGluZyBvZiA8bGlicmFyeS1kaXJlY3Rvcnk+IGlzCiAgICAgZG9uZSBwcm9wZXJseSwgdGhhdCB0aGUgc2VydmVyLXNpZGUgYW5kIGNsaWVudC1zaWRlIGNsYXNzIHBhdGhzIGFyZSBzZXQKICAgICBjb3JyZWN0bHksIGFuZCB0aGF0IHRoZSBnZW5lcmF0ZWQgY2xpZW50IEpBUiBjb250YWlucyB3aGF0IGl0IHNob3VsZC4KLSAgICAKLSAgICAKKworCiAgICAgKioqKiBUSEUgQVBQIENMSUVOVCAqKioqCi0gICAgCisKICAgICBUaGUgYXBwIGNsaWVudCB0aGF0IGRyaXZlcyB0aGUgdGVzdHMgaW52b2tlcyBhbiBFSkIgbWV0aG9kIHRvIG1ha2Ugc3VyZSB0aGUKICAgICBzZXJ2ZXItc2lkZSBjbGFzcyBwYXRoIGlzIGNvcnJlY3QsIHRoZW4gY2hlY2tzIGZvciB0aGUgdmVyeSBzYW1lIHJlc291cmNlcwogICAgIGl0c2VsZiBvbiB0aGUgY2xpZW50IHNpZGUgdG8gbWFrZSBzdXJlIHRoYXQgaXRzIGNsYXNzIHBhdGggYW5kIHRoZSBnZW5lcmF0ZWQKICAgICBhcHAgY2xpZW50IEpBUiBmaWxlIGFyZSBib3RoIGNvcnJlY3QuCi0gICAgCisKICAgICBUaGUgYXBwY2xpZW50J3Mgb3V0cHV0IHNlcnZlcnMgYXJlIHByb3BlcnR5IGRlZmluaXRpb25zIHRoYXQgYXJlIHdyaXR0ZW4gdG8KLSAgICB0aGUgY2xpZW50IHJ1bidzIGxvZyBmaWxlLiAgVGhlIGxvZyBmaWxlIGlzIHRoZW4gdXNlZCBieSB0aGUgYW50IHRhc2sgdG8gCisgICAgdGhlIGNsaWVudCBydW4ncyBsb2cgZmlsZS4gIFRoZSBsb2cgZmlsZSBpcyB0aGVuIHVzZWQgYnkgdGhlIGFudCB0YXNrIHRvCiAgICAgZGVmaW5lIHJ1bi1zcGVjaWZpYyBwcm9wZXJ0aWVzIGZvciBjaGVja2luZyB0aGUgcmVzdWx0cyBhbmQgZGlzcGxheWluZyBhbnkKICAgICB0ZXN0IGZhaWx1cmVzLgotICAgIAotICAgIAorCisKICAgICAqKioqIFRIRSBFQVJTICoqKioKLSAgICAKKwogICAgIFRoZSB0ZXN0cyB1c2UgYSBzaW5nbGUgRUFSIHN0cnVjdHVyZS4gIFRoZSA8bGlicmFyeS1kaXJlY3Rvcnk+IHNldHRpbmcKICAgICBpbiBhcHBsaWNhdGlvbi54bWwgY2hhbmdlcyB0byBhZmZlY3QgdGhlIG91dGNvbWUgb2YgdGhlIHRlc3RzLgotICAgIAorCiAgICAgSGVyZSBpcyB0aGUgRUFSIHN0cnVjdHVyZToKLSAgICAKKwogICAgIHRvcExldmVsLmphciAtIGFsd2F5cyBpbmNsdWRlZCBkdWUgdG8gYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBsZWdhY3kgZmVhdHVyZQogICAgIHRoYXQgaW5jbHVkZXMgYWxsIHRvcC1sZXZlbCBKQVJzIGluIHRoZSBjbGFzcyBwYXRoCi0gICAgCisKICAgICAgICAgdG9wTGV2ZWwucHJvcGVydGllcwotICAgIAorCiAgICAgbGliL2xpYi5qYXIgLSBhY2Nlc3NpYmxlIHdoZW4gPGxpYnJhcnktZGlyZWN0b3J5PiBlbGVtZW50IGlzIG9taXR0ZWQKLSAgICBiZWNhdXNlIHRoZSBkZWZhdWx0IGlzIGxpYiAodGhlcmUgYXJlIG5vIHRlc3RzIGluIHRoaXMgcHJvamVjdCB0aGF0IGV4cGxpY2l0bHkgCisgICAgYmVjYXVzZSB0aGUgZGVmYXVsdCBpcyBsaWIgKHRoZXJlIGFyZSBubyB0ZXN0cyBpbiB0aGlzIHByb2plY3QgdGhhdCBleHBsaWNpdGx5CiAgICAgc3BlY2lmeSA8bGlicmFyeS1kaXJlY3Rvcnk+bGliPC9saWJyYXJ5LWRpcmVjdG9yeT4pCi0gICAgCi0gICAgICAgIGxpYi5wcm9wZXJ0aWVzIAorCisgICAgICAgIGxpYi5wcm9wZXJ0aWVzCiAKICAgICBsaWIvc3ViL2xpYl9zdWIuamFyIC0gc2hvdWxkIG5vdCBiZSBhY2Nlc3NpYmxlIGJlY2F1c2UgSkFScyBpbiBzdWJkaXJlY3RvcmllcyBvZiB0aGUKICAgICBsaWJyYXJ5IGRpcmVjdG9yeSBzaG91bGQgbm90IGJlIGFjY2Vzc2libGUKLSAgICAKKwogICAgICAgICBsaWJfc3ViLnByb3BlcnRpZXMKLSAgICAKKwogICAgIHgveC5qYXIgLSBhY2Nlc3NpYmxlIHdoZW4gbGliIGRpciBpcyAieCIgIC0gVGhlIG1hbmlmZXN0IG9mIHguamFyIHNwZWNpZmllcyBDbGFzcy1QYXRoOiB4RXh0cmEveEV4dHJhLmphciB4TW9yZS9zdWIKLSAgICAgICAgCisKICAgICAgICAgeC5wcm9wZXJ0aWVzIC0gYWNjZXNzaWJsZSAoc2luY2UgeC5qYXIgY29udGFpbnMgaXQgYW5kIGlzIGluIHRoZSBsaWIgZGlyZWN0b3J5KQotICAgICAgICAKKwogICAgIHgveEV4dHJhL3hFeHRyYS5qYXIgLSBhY2Nlc3NpYmxlIHdoZW4gbGliIGRpciBpcyAieCIgc2luY2UgdGhlIG1hbmlmZXN0IG9mIHguamFyIGluY2x1ZGVzIHhFeHRyYS94RXh0cmEuamFyCi0gICAgCi0gICAgICAgIHhfeEV4dHJhLnByb3BlcnRpZXMgCi0gICAgICAgIAorCisgICAgICAgIHhfeEV4dHJhLnByb3BlcnRpZXMKKwogICAgIHhFeHRyYS94RXh0cmEuamFyIC0gbmV2ZXIgYWNjZXNzaWJsZS4gIEhlcmUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIENsYXNzLVBhdGggaGFuZGxpbmcKLSAgICBvZiB4RXh0cmEveEV4dHJhLmphciBpbiAveC94LmphcidzIG1hbmlmZXN0IGNvcnJlY3RseSByZXNvbHZlcyByZWxhdGl2ZSB0byB0aGUgeCBkaXJlY3RvcnkgCisgICAgb2YgeEV4dHJhL3hFeHRyYS5qYXIgaW4gL3gveC5qYXIncyBtYW5pZmVzdCBjb3JyZWN0bHkgcmVzb2x2ZXMgcmVsYXRpdmUgdG8gdGhlIHggZGlyZWN0b3J5CiAgICAgd2hlcmUgeC5qYXIgcmVzaWRlcyBhbmQgbm90IHJlbGF0aXZlIHRvIHRoZSB0b3AtbGV2ZWwgb2YgdGhlIEVBUgotICAgIAorCiAgICAgICAgIHhFeHRyYS5wcm9wZXJ0aWVzCi0gICAgCisKICAgICB4L3hNb3JlIC0gbmV2ZXIgYWNjZXNzaWJsZSBiZWNhdXNlIGV2ZW4gd2hlbiB0aGUgbGliLWRpciBpcyB4IChhbmQKICAgICB4LmphcidzIG1hbmlmZXN0IENsYXNzLVBhdGggc3BlY2lmaWVzIHhNb3JlL3N1YiksIG9ubHkgeE1vcmUvc3ViIHNob3VsZCBiZSBhZGRlZCB0byB0aGUKICAgICBjbGFzcyBwYXRoLCBub3QgaXRzIHBhcmVudCBkaXJlY3RvcnkuCi0gICAgCi0gICAgICAgIHhfeE1vcmUucHJvcGVydGllcyAKLSAgICAgICAgCisKKyAgICAgICAgeF94TW9yZS5wcm9wZXJ0aWVzCisKICAgICB4L3hNb3JlL3N1YiAtIGFjY2Vzc2libGUgd2hlbiBsaWItZGlyIGlzIHgKLSAgICAKLSAgICAgICAgeF94TW9yZV9zdWIucHJvcGVydGllcyAKLSAgICAKLSAgICB4RXh0cmEveEV4dHJhLmphciAtIG5ldmUgYWNjZXNzaWJsZSBiZWNhdXNlIHRoZSBtYW5pZmVzdCBDbGFzcy1QYXRoIGVudHJpZXMgaW4geC94LmphciBzaG91bGQgYmUgcmVsYXRpdmUgdG8gCisKKyAgICAgICAgeF94TW9yZV9zdWIucHJvcGVydGllcworCisgICAgeEV4dHJhL3hFeHRyYS5qYXIgLSBuZXZlIGFjY2Vzc2libGUgYmVjYXVzZSB0aGUgbWFuaWZlc3QgQ2xhc3MtUGF0aCBlbnRyaWVzIGluIHgveC5qYXIgc2hvdWxkIGJlIHJlbGF0aXZlIHRvCiAgICAgdGhlIFVSSSBvZiB0aGUgSkFSIGl0c2VsZiwgYW5kIHNvIHNob3VsZCByZXNvbHZlIHRvIHgveEV4dHJhL3hFeHRyYS5qYXIsIG5vdCB4RXh0cmEveEV4dHJhLmphcgotICAgIAotICAgICAgICB4RXh0cmFfeEV4dHJhLnByb3BlcnRpZXMgCi0gICAgCi0gICAgeE1vcmUvc3ViLyAtIG5ldmVyIGFjY2Vzc2libGUgKGFnYWluIGJlY2F1c2UgeC94LmphcidzIENsYXNzLVBhdGggZW50cnkgZm9yIHhNb3JlL3N1YiAKKworICAgICAgICB4RXh0cmFfeEV4dHJhLnByb3BlcnRpZXMKKworICAgIHhNb3JlL3N1Yi8gLSBuZXZlciBhY2Nlc3NpYmxlIChhZ2FpbiBiZWNhdXNlIHgveC5qYXIncyBDbGFzcy1QYXRoIGVudHJ5IGZvciB4TW9yZS9zdWIKICAgICBzaG91bGQgYmUgcmVzb2x2ZWQgcmVsYXRpdmUgdG8geC94LmphcidzIGxvY2F0aW9uIHdoaWNoIGlzIC94IGFuZCBzaG91bGQgdGhlcmVmb3JlIHJlc292bGUgdG8geC94TW9yZS9zdWIKICAgICB3aXRoaW4gdGhlIEpBUiByYXRoZXIgdGhhbiB4TW9yZS9zdWIKLSAgICAKLSAgICAgICAgeE1vcmVfc3ViLnByb3BlcnRpZXMgCisKKyAgICAgICAgeE1vcmVfc3ViLnByb3BlcnRpZXMKIAogICAgIHkveS5qYXIgLSBhbHdheXMgYWNjZXNzaWJsZSB0byB0aGUgY2xpZW50IChhcHBlYXJzIGluIHRoZSBDbGFzcy1QYXRoIG9mIHRoZSBhcHAgY2xpZW50IEpBUidzIG1hbmlmZXN0KQotICAgIAorCiAgICAgICAgIHkucHJvcGVydGllcwotICAgICAgICAKLSAgICAKKworCiAgICAgVGhlcmUgYXJlIHRocmVlIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGUgRUFSIGNyZWF0ZWQsIGVhY2ggb2Ygd2hpY2ggdXNlcyBhCiAgICAgZGlmZmVyZW50IDxsaWJyYXJ5LWRpcmVjdG9yeT4gc2V0dGluZzoKLSAgICAKKwogICAgICAgICBkZWZhdWx0LmVhciAtIG9taXRzIDxsaWJyYXJ5LWRpcmVjdG9yeT4sIHNvIHRoZSBkZWZhdWx0IG9mIGxpYiBzaG91bGQgYmUgdXNlZAogICAgICAgICBub25lLmVhciAtIHNwZWNpZmllcyA8bGlicmFyeS1kaXJlY3RvcnkvPiAoZW1wdHkpOyBubyBsaWJyYXJ5IGRpcmVjdG9yeSBzaG91bGQgYmUgdXNlZAogICAgICAgICB4LmVhciAtIHNwZWNpZmllcyA8bGlicmFyeS1kaXJlY3Rvcnk+IGFzIHgKLSAgICAKLSAgICBFYWNoIEVBUiBzaG91bGQgZ2l2ZSBzb21ld2hhdCBkaWZmZXJlbnQgcmVzdWx0cyBpbiB0cnlpbmcgdG8gbG9jYXRlIHZhcmlvdXMgCisKKyAgICBFYWNoIEVBUiBzaG91bGQgZ2l2ZSBzb21ld2hhdCBkaWZmZXJlbnQgcmVzdWx0cyBpbiB0cnlpbmcgdG8gbG9jYXRlIHZhcmlvdXMKICAgICBwcm9wZXJ0aWVzIGZpbGVzIGFuZCBwcm9wZXJ0aWVzIHdpdGhpbiB0aGVtLgotICAgIAotICAgIAorCisKICAgICAqKioqIFNQRUNJRllJTkcgVEVTVFMgKioqKgotICAgIAorCiAgICAgVGhlIGFwcCBjbGllbnQgZHJpdmVyIGFjY2VwdHMgY29tbWFuZC1saW5lIGFyZ3VtZW50cyB0aGF0IHNwZWNpZnkgYSBwYXRoIGZvciBhIHJlc291cmNlLAogICAgIGEgcHJvcGVydHkgbmFtZSBleHBlY3RlZCB0byBiZSBmb3VuZCBpbiB0aGUgcmVzb3VyY2UsIGFuZCB0aGUgdmFsdWUgZXhwZWN0ZWQgZm9yIHRoYXQKICAgICBwcm9wZXJ0eSBpbiB0aGF0IHJlc291cmNlLiAgVGhlIGZvcm1hdCBvZiBlYWNoIHRlc3QgZXhwcmVzc2lvbiBpcwotICAgIAorCiAgICAgICAge3Jlc291cmNlLXBhdGh9Ontwcm9wZXJ0eS1uYW1lfT17ZXhwZWN0ZWQtdmFsdWV9Ci0gICAgICAgCi0gICAgVGhlIGNsaWVudC0gYW5kIHNlcnZlci1zaWRlIHRlc3RzIHVzZSB0aGUgc2FtZSBjb21tb24gbG9naWMgaW4gUmVzb3VyY2VIZWxwZXIgCisKKyAgICBUaGUgY2xpZW50LSBhbmQgc2VydmVyLXNpZGUgdGVzdHMgdXNlIHRoZSBzYW1lIGNvbW1vbiBsb2dpYyBpbiBSZXNvdXJjZUhlbHBlcgogICAgIHRvIHBhcnNlIHRoZSB0ZXN0IGV4cHJlc3Npb25zLCB0byBzZWFyY2ggZm9yIGEKLSAgICByZXNvdXJjZSwgdG8gbG9hZCBhIFByb3BlcnRpZXMgb2JqZWN0IHVzaW5nIHRoZSByZXNvdXJjZSwgYW5kIHRvIGdldCB0aGUgdmFsdWUgCisgICAgcmVzb3VyY2UsIHRvIGxvYWQgYSBQcm9wZXJ0aWVzIG9iamVjdCB1c2luZyB0aGUgcmVzb3VyY2UsIGFuZCB0byBnZXQgdGhlIHZhbHVlCiAgICAgb2YgYSByZXF1ZXN0ZWQgcHJvcGVydHkgYW5kIGNvbXBhcmluZyBpdCB0byB0aGUgZXhwZWN0ZWQgdmFsdWUuCiAtLT4KICAgICAmY29tbW9uQnVpbGQ7CiAKICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRlc3ROYW1lIiB2YWx1ZT0ibGliQ2xhc3NQYXRoMiIvPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0iYXJjaGl2ZWRpciIgdmFsdWU9IiR7YnVpbGR9L2FyY2hpdmVzIi8+Ci0gICAgICAgIAorCiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ4LmVhciIgdmFsdWU9IiR7YXJjaGl2ZWRpcn0vJHt0ZXN0TmFtZX14LUFwcC5lYXIiLz4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImRlZmF1bHQuZWFyIiB2YWx1ZT0iJHthcmNoaXZlZGlyfS8ke3Rlc3ROYW1lfWRlZmF1bHQtQXBwLmVhciIvPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0ibm9uZS5lYXIiIHZhbHVlPSIke2FyY2hpdmVkaXJ9LyR7dGVzdE5hbWV9bm9uZS1BcHAuZWFyIi8+CkBAIC0xNjYsNyArMTY2LDcgQEAKICAgICAgICAgICAgIEVBUnMgYnV0IG5vdCBvdGhlcnM7IHNvbWUgc2hvdWxkIHdvcmsgaW4gYWxsIEVBUnM7IHNvbWUgc2hvdWxkIHdvcmsKICAgICAgICAgICAgIGluIG5vIEVBUnMuCiAgICAgICAgIC0tPgotICAgICAgICAKKwogICAgICAgICA8IS0tCiAgICAgICAgICAgICBUaGUgdGVzdCBmb3IgdGhlIHRvcC1sZXZlbCBKQVIgc2hvdWxkIGFsd2F5cyBiZSBwb3NpdGl2ZSwgdW5sZXNzCiAgICAgICAgICAgICBhbmQgdW50aWwgd2UgcmV0aXJlIHRoYXQgbGVnYWN5IGZlYXR1cmUuCkBAIC0xODAsNyArMTgwLDcgQEAKICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRlc3QueCIgdmFsdWU9Ii94LnByb3BlcnRpZXM6bGliLnBhdGg9Ii8+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LngucG9zIiB2YWx1ZT0iJHt0ZXN0Lnh9eCIvPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0idGVzdC54Lm5lZyIgdmFsdWU9IiR7dGVzdC54fU5PX1JFU09VUkNFIi8+Ci0gICAgICAgIAorCiAgICAgICAgIDwhLS0KICAgICAgICAgICAgIHhFeHRyYS5wcm9wZXJ0aWVzIGlzIG5ldmVyIGFjY2Vzc2libGUKICAgICAgICAgLS0+CkBAIC0xOTMsNyArMTkzLDcgQEAKICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRlc3QueC54RXh0cmEiIHZhbHVlPSIveF94RXh0cmEucHJvcGVydGllczp4X3hFeHRyYT0iLz4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRlc3QueC54RXh0cmEucG9zIiB2YWx1ZT0iJHt0ZXN0LngueEV4dHJhfXhfeEV4dHJhIi8+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LngueEV4dHJhLm5lZyIgdmFsdWU9IiR7dGVzdC54LnhFeHRyYX1OT19SRVNPVVJDRSIvPgotICAgICAgICAKKwogICAgICAgICA8IS0tCiAgICAgICAgICAgICBsaWIucHJvcGVydGllcyBpcyBhY2Nlc3NpYmxlIG9ubHkgdXNpbmcgZGVmYXVsdC5lYXIKICAgICAgICAgLS0+CkBAIC0yMTUsOCArMjE1LDggQEAKICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRlc3QueC54TW9yZS5uZWciIHZhbHVlPSIke3Rlc3QueC54TW9yZX1OT19SRVNPVVJDRSIvPgogCiAgICAgICAgIDwhLS0KLSAgICAgICAgICAgIHhNb3JlX3N1Yi5wcm9wZXJ0aWVzIGlzIG5ldmVyIGFjY2Vzc2libGUgKGJlY2F1c2UgdGhlIHhNb3JlL3N1YiAKLSAgICAgICAgICAgIENsYXNzLVBhdGggZW50cnkgaW4geC5qYXIncyBtYW5pZmVzdCBtdXN0IGJlIHJlc29sdmVkIHdpdGhpbiB0aGUgL3ggCisgICAgICAgICAgICB4TW9yZV9zdWIucHJvcGVydGllcyBpcyBuZXZlciBhY2Nlc3NpYmxlIChiZWNhdXNlIHRoZSB4TW9yZS9zdWIKKyAgICAgICAgICAgIENsYXNzLVBhdGggZW50cnkgaW4geC5qYXIncyBtYW5pZmVzdCBtdXN0IGJlIHJlc29sdmVkIHdpdGhpbiB0aGUgL3gKICAgICAgICAgICAgIGRpcmVjdG9yeSB3aGVyZSB4LmphciBpcyBmb3VuZCwgbm90IGZyb20gdGhlIHRvcC1sZXZlbCBvZiB0aGUgRUFSCiAgICAgICAgIC0tPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0idGVzdC54TW9yZS5zdWIiIHZhbHVlPSIveE1vcmVfc3ViLnByb3BlcnRpZXM6eE1vcmVfc3ViPSIvPgpAQCAtMjMwLDEzICsyMzAsMTMgQEAKICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRlc3QueC54TW9yZS5zdWIubmVnIiB2YWx1ZT0iJHt0ZXN0LngueE1vcmUuc3VifU5PX1JFU09VUkNFIi8+CiAKICAgICAgICAgPCEtLQotICAgICAgICAgICAgei5wcm9wZXJ0aWVzIGlzIGFsd2F5cyBhY2Nlc3NpYmxlIHRvIHRoZSBjbGllbnQgKGl0IGFwcGVhcnMgaW4gdGhlIENsYXNzLVBhdGggCisgICAgICAgICAgICB6LnByb3BlcnRpZXMgaXMgYWx3YXlzIGFjY2Vzc2libGUgdG8gdGhlIGNsaWVudCAoaXQgYXBwZWFycyBpbiB0aGUgQ2xhc3MtUGF0aAogICAgICAgICAgICAgaW4gdGhlIGFwcCBjbGllbnQgSkFSJ3MgbWFuaWZlc3QpIGJ1dCBuZXZlciB0byB0aGUgc2VydmVyCiAgICAgICAgIC0tPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0idGVzdC56IiB2YWx1ZT0iL3oucHJvcGVydGllczp2YWx1ZT0iLz4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRlc3Quei5wb3MiIHZhbHVlPSIke3Rlc3Quen16Ii8+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LnoubmVnIiB2YWx1ZT0iJHt0ZXN0Lnp9Tk9fUkVTT1VSQ0UiLz4KLSAgICAgICAgCisKICAgICAgICAgPCEtLQogICAgICAgICAgICAgeS5wcm9wZXJ0aWVzIHNob3VsZCBhbHdheXMgYmUgYWNjZXNzaWJsZSBiZWNhdXNlIHRoZQogICAgICAgICAgICAgYXBwIGNsaWVudCBKQVIgbWFuaWZlc3QgdXNlZCBmb3IgdGhlIGFwcCBjbGllbnQgSkFSIHNoYXJlZCBieSBhbGwKQEAgLTI0NSwyMSArMjQ1LDIxIEBACiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LnkiIHZhbHVlPSIveS5wcm9wZXJ0aWVzOnZhbHVlPSIvPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0idGVzdC55LnBvcyIgdmFsdWU9IiR7dGVzdC55fXkiLz4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRlc3QueS5uZWciIHZhbHVlPSIke3Rlc3QueX1OT19SRVNPVVJDRSIvPgotICAgICAgICAKKwogICAgICAgICA8IS0tCiAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIHByb3BlcnRpZXMgZGVmaW5lIHRoZSBleHBlY3RlZCByZXN1bHRzIGZvciBlYWNoIHRlc3QgcnVuLgogICAgICAgICAtLT4KLSAgICAgICAgCisKICAgICAgICAgPCEtLSBsaWJyYXJ5LWRpcmVjdG9yeSBzcGVjaWZpZWQgYXMgZW1wdHksIG1lYW5pbmcgbm8gbGliIGRpciBzaG91bGQgYmUgdXNlZCAtLT4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Im5vTGliLmV4cGVjdGVkLnJlc3VsdHMiIAorICAgICAgICA8cHJvcGVydHkgbmFtZT0ibm9MaWIuZXhwZWN0ZWQucmVzdWx0cyIKICAgICAgICAgICAgIHZhbHVlPSIke3Rlc3QudGwucG9zfSAke3Rlc3QueC5uZWd9ICR7dGVzdC54RXh0cmEubmVnfSAke3Rlc3QubGliLm5lZ30gJHt0ZXN0LmxpYi5zdWIubmVnfSAke3Rlc3QueC54RXh0cmEubmVnfSAke3Rlc3QueE1vcmUuc3ViLm5lZ30gJHt0ZXN0LngueE1vcmUubmVnfSAke3Rlc3QueC54TW9yZS5zdWIubmVnfSAtY2xpZW50b25seSAke3Rlc3Quei5wb3N9IC1zZXJ2ZXJvbmx5ICR7dGVzdC56Lm5lZ30gJHt0ZXN0LnkubmVnfSIvPgotICAgICAgICAKKwogICAgICAgICA8IS0tIGxpYnJhcnktZGlyZWN0b3J5IG5vdCBzcGVjaWZpZWQ7IGRlZmF1bHQgb2YgbGliIHVzZWQgLS0+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkZWZhdWx0TGliLmV4cGVjdGVkLnJlc3VsdHMiIAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iZGVmYXVsdExpYi5leHBlY3RlZC5yZXN1bHRzIgogICAgICAgICAgICAgdmFsdWU9IiR7dGVzdC50bC5wb3N9ICR7dGVzdC54Lm5lZ30gJHt0ZXN0LnhFeHRyYS5uZWd9ICR7dGVzdC5saWIucG9zfSAke3Rlc3QubGliLnN1Yi5uZWd9ICR7dGVzdC54LnhFeHRyYS5uZWd9ICR7dGVzdC54TW9yZS5zdWIubmVnfSAke3Rlc3QueC54TW9yZS5uZWd9ICR7dGVzdC54LnhNb3JlLnN1Yi5uZWd9IC1jbGllbnRvbmx5ICR7dGVzdC56LnBvc30gLXNlcnZlcm9ubHkgJHt0ZXN0LnoubmVnfSAke3Rlc3QueS5uZWd9Ii8+CiAKICAgICAgICAgPCEtLSBsaWJyYXJ5LWRpcmVjdG9yeSBzcGVjaWZpZWQgYXMgeDsgeC5qYXIgYW5kIGl0cyBDbGFzcy1QYXRoIGVudHJpZXMgeEV4dHJhL3hFeHRyYS5qYXIgYW5kIHhNb3JlL3N1YiB1c2VkIC0tPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iZXhwbGljaXRMaWJXaXRoRGlyLmV4cGVjdGVkLnJlc3VsdHMiIAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iZXhwbGljaXRMaWJXaXRoRGlyLmV4cGVjdGVkLnJlc3VsdHMiCiAgICAgICAgICAgICB2YWx1ZT0iJHt0ZXN0LnRsLnBvc30gJHt0ZXN0LngucG9zfSAke3Rlc3QueEV4dHJhLm5lZ30gJHt0ZXN0LmxpYi5uZWd9ICR7dGVzdC5saWIuc3ViLm5lZ30gJHt0ZXN0LngueEV4dHJhLnBvc30gJHt0ZXN0LnhNb3JlLnN1Yi5uZWd9ICR7dGVzdC54LnhNb3JlLm5lZ30gLWNsaWVudG9ubHkgJHt0ZXN0LnoucG9zfSAtc2VydmVyb25seSAke3Rlc3Quei5uZWd9ICR7dGVzdC55Lm5lZ30iLz4KIAogCkBAIC0yNjksOSArMjY5LDkgQEAKICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZH0vY2xpZW50Ii8+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGR9L2NsaWVudC95Ii8+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGR9L2NsaWVudC96Ii8+Ci0gICAgICAgIAorCiAgICAgICAgIDxta2RpciBkaXI9IiR7YXJjaGl2ZWRpcn0iLz4KLSAgICAgICAgCisKICAgICAgICAgPCEtLSBUaGUgZm9sbG93aW5nIGRpcmVjdG9yaWVzIHdpbGwgaG9sZCBkaWZmZXJlbnQgZmlsZXMgc28gdGhleSB3aWxsCiAgICAgICAgICAgICAgYXBwZWFyIGluIHRoZSBFQVIgaW4gdGhlIHJpZ2h0IHBsYWNlcy4KICAgICAgICAgIC0tPgpAQCAtMjc5LDE1ICsyNzksMTUgQEAKICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZH0veC94RXh0cmEiLz4gICAgPCEtLSBob2xkcyB4RXh0cmEuamFyIC0tPgogICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkfS94L3hNb3JlIi8+ICAgICA8IS0tIGhvbGRzIHhfeE1vcmUucHJvcGVydGllcyAoc2hvdWxkIG5vdCBiZSBhY2Nlc3NpYmxlKSAtLT4KICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZH0veC94TW9yZS9zdWIiLz4gPCEtLSBob2xkcyB4X3hNb3JlX3N1Yi5wcm9wZXJ0aWVzIC0tPgotICAgICAgICAKKwogICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkfS94TW9yZS8iLz4KICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZH0veE1vcmUvc3ViIi8+ICAgPCEtLSBob2xkcyB4TW9yZV9zdWIucHJvcGVydGllcyAoc2hvdWxkIG5vdCBiZSBhY2Nlc3NpYmxlKSAtLT4KLSAgICAgICAgCisKICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZH0vbGliIi8+ICAgICAgICAgPCEtLSBob2xkcyBsaWIuamFyIC0tPgogICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkfS9saWIvc3ViIi8+ICAgICA8IS0tIGhvbGRzIGxpYl9zdWIuamFyIChzaG91bGQgbm90IGJlIGFjY2Vzc2libGUpIC0tPgotICAgICAgICAKLSAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZH0veEV4dHJhIi8+ICAgICAgPCEtLSBob2xkcyB4RXh0cmEuamFyIChzaG91bGQgbm90IGJlIGFjY2Vzc2libGUpIC0tPiAKLSAgICAgICAgCisKKyAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZH0veEV4dHJhIi8+ICAgICAgPCEtLSBob2xkcyB4RXh0cmEuamFyIChzaG91bGQgbm90IGJlIGFjY2Vzc2libGUpIC0tPgorCiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9InByZXBhcmUiPgpAQCAtMjk5LDExICsyOTksMTEgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIiBkZXBlbmRzPSJtYWtlRWFycyIvPgogCiAgICAgPHRhcmdldCBuYW1lPSJtYWtlSmFycyIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgCisKICAgICAgICAgPCEtLQogICAgICAgICAgICAgQnVpbGQgdGhlIHZhcmlvdXMgamFycyB1c2VkIGluIHRoZSBkaWZmZXJlbnQgdGVzdHMuCiAgICAgICAgIC0tPgotICAgICAgICAKKwogICAgICAgICA8IS0tCiAgICAgICAgICAgICBUaGUgeC94LmphciB3aWxsIGhhdmUgdGhlIENsYXNzLVBhdGggc2V0dGluZyBpbiBpdHMgbWFuaWZlc3QsIHNvCiAgICAgICAgICAgICBzcGVjaWZ5IHRoZSBtYW5pZmVzdCByYXRoZXIgdGhhbiBsZXR0aW5nIGFudCBjcmVhdGUgaXQuCkBAIC0zMTEsMTUgKzMxMSwxNSBAQAogICAgICAgICA8amFyIGRlc3RmaWxlPSIke3guamFyfSIgbWFuaWZlc3Q9IngvTUFOSUZFU1QuTUYiPgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSJ4IiBpbmNsdWRlcz0iKi5wcm9wZXJ0aWVzIi8+CiAgICAgICAgIDwvamFyPgotICAgCisKICAgICAgICAgPGphciBkZXN0ZmlsZT0iJHt4X3hFeHRyYS5qYXJ9Ij4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0ieC94RXh0cmEiIGluY2x1ZGVzPSIqLnByb3BlcnRpZXMiLz4KICAgICAgICAgPC9qYXI+Ci0gICAgICAgIAorCiAgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7eEV4dHJhLmphcn0iPgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSJ4RXh0cmEiIGluY2x1ZGVzPSIqLnByb3BlcnRpZXMiLz4KICAgICAgICAgPC9qYXI+Ci0gICAgICAgIAorCiAgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7bGliLmphcn0iPgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSJsaWIiIGluY2x1ZGVzPSIqLnByb3BlcnRpZXMiLz4KICAgICAgICAgPC9qYXI+CkBAIC0zMzEsNyArMzMxLDcgQEAKICAgICAgICAgPGphciBkZXN0ZmlsZT0iJHt0b3BMZXZlbC5qYXJ9Ij4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0idG9wTGV2ZWwiIGluY2x1ZGVzPSIqKi8qLnByb3BlcnRpZXMiLz4KICAgICAgICAgPC9qYXI+Ci0gICAgICAgIAorCiAgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7ei5qYXJ9Ij4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iY2xpZW50L3oiIGluY2x1ZGVzPSIqLnByb3BlcnRpZXMiLz4KICAgICAgICAgPC9qYXI+CkBAIC0zNDMsOSArMzQzLDkgQEAKICAgICAgICAgPGNvcHkgZmlsZT0ieC94TW9yZS94X3hNb3JlLnByb3BlcnRpZXMiIHRvZGlyPSIke3gueE1vcmUuZGlyfSIvPgogICAgICAgICA8Y29weSBmaWxlPSJ4L3hNb3JlL3N1Yi94X3hNb3JlX3N1Yi5wcm9wZXJ0aWVzIiB0b2Rpcj0iJHt4LnhNb3JlLnN1Yi5kaXJ9Ii8+CiAgICAgICAgIDxjb3B5IGZpbGU9InhNb3JlL3N1Yi94TW9yZV9zdWIucHJvcGVydGllcyIgdG9kaXI9IiR7eE1vcmUuc3ViLmRpcn0iLz4KLSAgICAgICAgCisKICAgICAgICAgPGNvcHkgZmlsZT0iY2xpZW50L3kveS5wcm9wZXJ0aWVzIiB0b2Rpcj0iJHt5LmRpcn0iLz4KLSAgICAgICAgCisKICAgICAgICAgPCEtLQogICAgICAgICAgICAgQnVpbGQgdGhlIEVKQiBhbmQgY2xpZW50IGphcnMuICBUaGUgUmVzb3VyY2VIZWxwZXIgY2xhc3MgaXMgdXNlZCBmcm9tCiAgICAgICAgICAgICB0aGUgRUpCIGFuZCBhbHNvIGZyb20gdGhlIGNsaWVudCwgc28gaW5jbHVkZSBpdCBpbiBib3RoIHN1Ym1vZHVsZXMuCkBAIC0zNTYsMjQgKzM1NiwyNCBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkfSIgaW5jbHVkZXM9IioqL2VqYi8qKi8qLmNsYXNzIi8+CiAgICAgICAgICAgICA8ZmlsZXNldCByZWZpZD0icmVzb3VyY2VIZWxwZXJDbGFzcyIvPgogICAgICAgICA8L2phcj4KLSAgICAgICAgCisKICAgICAgICAgPGphciBkZXN0ZmlsZT0iJHtjbGllbnQuamFyfSIgbWFuaWZlc3Q9ImNsaWVudC9NQU5JRkVTVC5NRiI+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGR9IiBpbmNsdWRlcz0iKiovY2xpZW50LyoqLyouY2xhc3MiLz4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZH0iIGluY2x1ZGVzPSIqKi9lamIvTG9va3VwU0JSZW1vdGUuY2xhc3MiLz4KICAgICAgICAgICAgIDxmaWxlc2V0IHJlZmlkPSJyZXNvdXJjZUhlbHBlckNsYXNzIi8+CiAgICAgICAgIDwvamFyPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJtYWtlRWFycyIgZGVwZW5kcz0ibWFrZUphcnMiPgogCiAgICAgICAgIDwhLS0KICAgICAgICAgICAgIEFsbCB0aGUgRUFScyBhcmUgcG9wdWxhdGVkIHdpdGggZXhhY3RseSB0aGUgc2FtZSBjb250ZW50IEVYQ0VQVCBmb3IKLSAgICAgICAgICAgIHRoZSBhcHBsaWNhdGlvbi54bWwsIHdoaWNoIGRpZmZlcnMgZm9yIGVhY2guICBUaGUgZWFySW5jbHVkZXMgcHJvcGVydHkgCisgICAgICAgICAgICB0aGUgYXBwbGljYXRpb24ueG1sLCB3aGljaCBkaWZmZXJzIGZvciBlYWNoLiAgVGhlIGVhckluY2x1ZGVzIHByb3BlcnR5CiAgICAgICAgICAgICBkZWZpbmVkIG5leHQgc3BlbGxzIG91dCBhbGwgdGhlIEpBUnMgYW5kIGRpcmVjdG9yaWVzIGluY2x1ZGVkIGluIGFsbAogICAgICAgICAgICAgdGhlIEVBUnMuCiAgICAgICAgIC0tPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0iZWFySW5jbHVkZXMiIHZhbHVlPSJsaWJkaXJ0ZXN0LUVKQk1vZHVsZS5qYXIsY2xpZW50L2xpYmRpcnRlc3QtY2xpZW50LmphcixjbGllbnQvei96LmphcixjbGllbnQveS95LnByb3BlcnRpZXMsdG9wTGV2ZWwuamFyLGxpYi9saWIuamFyLGxpYi9zdWIvbGliX3N1Yi5qYXIseC94Lmphcix4RXh0cmEveEV4dHJhLmphcix4L3hFeHRyYS94RXh0cmEuamFyLHgveE1vcmUvKioseE1vcmUvKioiLz4KLSAgICAgICAgCisKICAgICAgICAgPGVhciBkZXN0ZmlsZT0iJHtub25lLmVhcn0iIGJhc2VkaXI9IiR7YnVpbGR9IgogICAgICAgICAgICAgIGFwcHhtbD0iYXBwbGljYXRpb24tbm9MaWJEaXIueG1sIiBpbmNsdWRlcz0iJHtlYXJJbmNsdWRlc30iLz4KIApAQCAtNDM4LDcgKzQzOCw3IEBACiAKICAgICA8L3RhcmdldD4KIAotICAgIAorCiAgICAgPG1hY3JvZGVmIG5hbWU9ImRlcGxveSI+CiAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibW9kdWxlTmFtZSIvPgogICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImVhckZpbGUiIGRlZmF1bHQ9IiR7YXJjaGl2ZWRpcn0vQHttb2R1bGVOYW1lfS5lYXIiLz4KQEAgLTQ1OCwxOSArNDU4LDE5IEBACiAgICAgICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDwvc2VxdWVudGlhbD4KICAgICA8L21hY3JvZGVmPgotICAgIAorCiAgICAgPG1hY3JvZGVmIG5hbWU9InJ1bi10ZXN0Ij4KICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJ0ZXN0cyIvPgogICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImxvZ0lEIi8+CiAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibW9kdWxlTmFtZSIvPgogICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImNsaWVudEZpbGUiIGRlZmF1bHQ9IiR7YXJjaGl2ZWRpcn0vQHttb2R1bGVOYW1lfUNsaWVudC5qYXIiLz4KICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJ0ZXN0TG9nVGl0bGUiIGRlZmF1bHQ9IkB7ZXhwZWN0ZWRSZXN1bHR9Ii8+Ci0gICAgICAgIAorCiAgICAgICAgIDxzZXF1ZW50aWFsPgogICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWNsYXJlLXRlc3QiPgogICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJkZXNjcmlwdGlvbiIgdmFsdWU9ImVhci9saWJjbGFzc3BhdGgyIFRlc3RpbmcgZm9yIEB7dGVzdExvZ1RpdGxlfSIvPgogICAgICAgICAgICAgPC9hbnRjYWxsPgotICAgICAgICAgICAgCisKICAgICAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IiR7QVBQQ0xJRU5UfSAtY2xpZW50IEB7Y2xpZW50RmlsZX0gQHt0ZXN0c30iLz4KICAgICAgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVBQQ0xJRU5UfSIgcmVzdWx0cHJvcGVydHk9InJlc3VsdCIgb3V0cHV0PSIke2J1aWxkfS9Ae2xvZ0lEfS5vdXRwdXQubG9nIiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgICAgICAgICAgICAgIDxhcmcgdmFsdWU9Ii1jbGllbnQiLz4KQEAgLTQ3OCwxMCArNDc4LDEwIEBACiAgICAgICAgICAgICAgICAgPGFyZyBsaW5lPSJAe3Rlc3RzfSIvPgogICAgICAgICAgICAgPC9leGVjPgogICAgICAgICAgICAgPGNoZWNrUmVzdWx0IGxvZ0lEPSJAe2xvZ0lEfSIvPgotICAgICAgICAgICAgCisKICAgICAgICA8L3NlcXVlbnRpYWw+Ci0gICAgPC9tYWNyb2RlZj4gIAotPCEtLSAgICAKKyAgICA8L21hY3JvZGVmPgorPCEtLQogICAgIDxtYWNyb2RlZiBuYW1lPSJydW4tdGVzdC1vbmx5Ij4KICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJleHBlY3RlZFJlc3VsdCIvPgogICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImxvZ0lEIi8+CkBAIC00OTQsMTYgKzQ5NCwxNiBAQAogICAgICAgICAgICAgICAgIDxhcmcgdmFsdWU9Ii1jbGllbnQiLz4KICAgICAgICAgICAgICAgICA8YXJnIHZhbHVlPSJAe2NsaWVudEZpbGV9Ii8+CiAgICAgICAgICAgICAgICAgPGFyZyB2YWx1ZT0iQHtleHBlY3RlZFJlc3VsdH0iLz4KLSAgICAgICAgICAgIDwvZXhlYz4gCi0gICAgICAgIDwvc2VxdWVudGlhbD4gICAKLSAgICA8L21hY3JvZGVmPiAgCi0gICAgCisgICAgICAgICAgICA8L2V4ZWM+CisgICAgICAgIDwvc2VxdWVudGlhbD4KKyAgICA8L21hY3JvZGVmPgorCiAgICAgPHRhcmdldCBuYW1lPSJydW4tb25seSIgZGVwZW5kcz0iaW5pdCI+CiAgICAgICAgIDxydW4tdGVzdC1vbmx5IGV4cGVjdGVkUmVzdWx0PSIke2V4cGVjdGVkUmVzdWx0fSIgbG9nSUQ9IiR7bG9nSUR9Ii8+CiAgICAgPC90YXJnZXQ+CiAgICAgLS0+CiAgICAgPCEtLQotICAgICAgICBDb252ZW5pZW5jZSB0YXJnZXQgZm9yIGRlcGxveWluZyBhbmQgcnVubmluZyBhIHNpbmdsZSB0ZXN0LiAgSGFuZC1lZGl0IHRoZSAKKyAgICAgICAgQ29udmVuaWVuY2UgdGFyZ2V0IGZvciBkZXBsb3lpbmcgYW5kIHJ1bm5pbmcgYSBzaW5nbGUgdGVzdC4gIEhhbmQtZWRpdCB0aGUKICAgICAgICAgZXhwZWN0ZWRSZXN1bHQgcHJvcGVydHkgKGFuZCB0aGUgbG9nSUQgaWYgeW91IGZlZWwgbGlrZSBpdCkgc28gaXQgaXMKICAgICAgICAgb25lIG9mIHRoZSB0ZXN0IGFwcHMgYnVpbGQgYnkgdGhlIGFzc2VtYmxlIHRhc2suCiAgICAgLS0+CkBAIC01MTksNyArNTE5LDcgQEAKICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJsb2dGaWxlIiBkZWZhdWx0PSIke2J1aWxkfS9Ae2xvZ0lEfS5vdXRwdXQubG9nIi8+CiAgICAgICAgIDxzZXF1ZW50aWFsPgogICAgICAgICAgICAgPHByb3BlcnR5IGZpbGU9IkB7bG9nRmlsZX0iIHByZWZpeD0ieEB7bG9nSUR9Ii8+Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgPGNvbmNhdD4KICAgICAgICAgICAgICAgICA8ZmlsZXNldCBmaWxlPSJAe2xvZ0ZpbGV9Ii8+CiAgICAgICAgICAgICA8L2NvbmNhdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYmNsYXNzcGF0aDIvY2xpZW50L0xpYkRpclRlc3RDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYmNsYXNzcGF0aDIvY2xpZW50L0xpYkRpclRlc3RDbGllbnQuamF2YQppbmRleCBhNWNiMjlmLi5kNTIwOTU3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJjbGFzc3BhdGgyL2NsaWVudC9MaWJEaXJUZXN0Q2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliY2xhc3NwYXRoMi9jbGllbnQvTGliRGlyVGVzdENsaWVudC5qYXZhCkBAIC0yOCwxMSArMjgsMTEgQEAKIHB1YmxpYyBjbGFzcyBMaWJEaXJUZXN0Q2xpZW50IHsKIAogICAgIHByaXZhdGUgc3RhdGljIEBFSkIoKSBMb29rdXBTQlJlbW90ZSBsb29rdXA7Ci0gICAgCisKICAgICAvKiogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBMaWJEaXJUZXN0Q2xpZW50ICovCiAgICAgcHVibGljIExpYkRpclRlc3RDbGllbnQoKSB7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQHBhcmFtIGFyZ3MgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKICAgICAgKi8KQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5leGl0KC0xKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBydW4oU3RyaW5nW10gYXJncykgdGhyb3dzIElPRXhjZXB0aW9uIHsKICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09IDApIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigicmVzdWx0PS0xIik7CkBAIC01NywxMyArNTcsMTMgQEAKICAgICAgICAgICpBc2sgdGhlIEVKQiB0byBmaW5kIHRoZSByZXF1aXJlZCByZXNvdXJjZXMgYW5kIHByb3BlcnR5IHZhbHVlcy4KICAgICAgICAgICovCiAgICAgICAgIFJlc291cmNlSGVscGVyLlJlc3VsdCBzZXJ2ZXJSZXN1bHQgPSBsb29rdXAucnVuVGVzdHMoYXJncywgUmVzb3VyY2VIZWxwZXIuVGVzdFR5cGUuU0VSVkVSKTsKLSAgICAgICAgCisKICAgICAgICAgLyoKICAgICAgICAgICpOb3cgdHJ5IHRvIGdldCB0aGUgc2FtZSByZXN1bHRzIG9uIHRoZSBjbGllbnQgc2lkZS4KICAgICAgICAgICovCiAgICAgICAgIFN0cmluZ0J1aWxkZXIgY2xpZW50UmVzdWx0cyA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CiAgICAgICAgIFJlc291cmNlSGVscGVyLlJlc3VsdCBjbGllbnRSZXN1bHQgPSBSZXNvdXJjZUhlbHBlci5jaGVja0FsbChhcmdzLCBSZXNvdXJjZUhlbHBlci5UZXN0VHlwZS5DTElFTlQpOwotICAgICAgICAKKwogICAgICAgICBpZiAoc2VydmVyUmVzdWx0LmdldFJlc3VsdCgpICYmIGNsaWVudFJlc3VsdC5nZXRSZXN1bHQoKSkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJyZXN1bHQ9MCIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJub3RlPVJlY2VpdmVkIGV4cGVjdGVkIHJlc3VsdHMiKTsKQEAgLTgzLDYgKzgzLDYgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibm90ZT0iKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYmNsYXNzcGF0aDIvZWpiL0xvb2t1cFNCQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliY2xhc3NwYXRoMi9lamIvTG9va3VwU0JCZWFuLmphdmEKaW5kZXggODdhZmI1OC4uYjlkZjg0YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliY2xhc3NwYXRoMi9lamIvTG9va3VwU0JCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliY2xhc3NwYXRoMi9lamIvTG9va3VwU0JCZWFuLmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKICAqLwogQFN0YXRlbGVzcygpCiBwdWJsaWMgY2xhc3MgTG9va3VwU0JCZWFuIGltcGxlbWVudHMgTG9va3VwU0JSZW1vdGUgewotICAgIAorCiAgICAgcHVibGljIFJlc291cmNlSGVscGVyLlJlc3VsdCBydW5UZXN0cyhTdHJpbmdbXSB0ZXN0cywgUmVzb3VyY2VIZWxwZXIuVGVzdFR5cGUgdGVzdFR5cGUpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiBSZXNvdXJjZUhlbHBlci5jaGVja0FsbCh0ZXN0cywgdGVzdFR5cGUpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYmNsYXNzcGF0aDIvZWpiL0xvb2t1cFNCUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJjbGFzc3BhdGgyL2VqYi9Mb29rdXBTQlJlbW90ZS5qYXZhCmluZGV4IDJmNzdmMmIuLjBlNTIzODEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYmNsYXNzcGF0aDIvZWpiL0xvb2t1cFNCUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliY2xhc3NwYXRoMi9lamIvTG9va3VwU0JSZW1vdGUuamF2YQpAQCAtMjcsNSArMjcsNSBAQAogQFJlbW90ZQogcHVibGljIGludGVyZmFjZSBMb29rdXBTQlJlbW90ZSB7CiAgICAgcHVibGljIFJlc291cmNlSGVscGVyLlJlc3VsdCBydW5UZXN0cyhTdHJpbmdbXSB0ZXN0cywgUmVzb3VyY2VIZWxwZXIuVGVzdFR5cGUgdGVzdFR5cGUpIHRocm93cyBJT0V4Y2VwdGlvbjsKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliY2xhc3NwYXRoMi9saWIvYXBwbGljYXRpb24ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliY2xhc3NwYXRoMi9saWIvYXBwbGljYXRpb24ueG1sCmluZGV4IGE2MWEwOTAuLjE0MTdmNGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYmNsYXNzcGF0aDIvbGliL2FwcGxpY2F0aW9uLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJjbGFzc3BhdGgyL2xpYi9hcHBsaWNhdGlvbi54bWwKQEAgLTQwLDUgKzQwLDUgQEAKICAgICBPbWl0dGluZyB0aGUgPGxpYnJhcnktZGlyZWN0b3J5PiBlbGVtZW50IGVudGlyZWx5IHNob3VsZCBjYXVzZSB0aGUgYXBwCiAgICAgc2VydmVyIHRvIGFkZCBhbGwgamFycyBpbiB0aGUgZGVmYXVsdCAnbGliJyBzdWJkaXJlY3RvcnkgdG8gdGhlCiAgICAgcnVudGltZSBjbGFzc3BhdGguCi0tLT4gICAgCistLT4KIDwvYXBwbGljYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJjbGFzc3BhdGgyL25vbmUvYXBwbGljYXRpb24ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliY2xhc3NwYXRoMi9ub25lL2FwcGxpY2F0aW9uLnhtbAppbmRleCAyNGE3NTUyLi5lNzZkNmQ1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJjbGFzc3BhdGgyL25vbmUvYXBwbGljYXRpb24ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYmNsYXNzcGF0aDIvbm9uZS9hcHBsaWNhdGlvbi54bWwKQEAgLTM2LDUgKzM2LDUgQEAKICAgPG1vZHVsZT4KICAgICAgIDxqYXZhPmxpYmRpcnRlc3QtY2xpZW50LmphcjwvamF2YT4KICAgPC9tb2R1bGU+Ci0gIDxsaWJyYXJ5LWRpcmVjdG9yeS8+IDwhLS0gc3VwcHJlc3MgbGlicmFyeSBkaXJlY3RvcnkgaGFuZGxpbmcgLS0+ICAKKyAgPGxpYnJhcnktZGlyZWN0b3J5Lz4gPCEtLSBzdXBwcmVzcyBsaWJyYXJ5IGRpcmVjdG9yeSBoYW5kbGluZyAtLT4KIDwvYXBwbGljYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJjbGFzc3BhdGgyL3gvYXBwbGljYXRpb24ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliY2xhc3NwYXRoMi94L2FwcGxpY2F0aW9uLnhtbAppbmRleCBmYTgwYTEyLi4zNWY2NjgyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJjbGFzc3BhdGgyL3gvYXBwbGljYXRpb24ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYmNsYXNzcGF0aDIveC9hcHBsaWNhdGlvbi54bWwKQEAgLTM2LDUgKzM2LDUgQEAKICAgPG1vZHVsZT4KICAgICAgIDxqYXZhPmxpYmRpcnRlc3QtY2xpZW50LmphcjwvamF2YT4KICAgPC9tb2R1bGU+Ci0gIDxsaWJyYXJ5LWRpcmVjdG9yeT54PC9saWJyYXJ5LWRpcmVjdG9yeT4gIAorICA8bGlicmFyeS1kaXJlY3Rvcnk+eDwvbGlicmFyeS1kaXJlY3Rvcnk+CiA8L2FwcGxpY2F0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliY2xhc3NwYXRoMi95L2FwcGxpY2F0aW9uLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL2xpYmNsYXNzcGF0aDIveS9hcHBsaWNhdGlvbi54bWwKaW5kZXggYzY0N2NkMi4uZDNhZWUwYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbGliY2xhc3NwYXRoMi95L2FwcGxpY2F0aW9uLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9saWJjbGFzc3BhdGgyL3kvYXBwbGljYXRpb24ueG1sCkBAIC0zNiw1ICszNiw1IEBACiAgIDxtb2R1bGU+CiAgICAgICA8amF2YT5saWJkaXJ0ZXN0LWNsaWVudC5qYXI8L2phdmE+CiAgIDwvbW9kdWxlPgotICA8bGlicmFyeS1kaXJlY3Rvcnk+eTwvbGlicmFyeS1kaXJlY3Rvcnk+ICAKKyAgPGxpYnJhcnktZGlyZWN0b3J5Pnk8L2xpYnJhcnktZGlyZWN0b3J5PgogPC9hcHBsaWNhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL21hbmlmZXN0Q2xhc3NQYXRoL2NsaWVudC9pMThuL3NpbXBsZS9UZXN0Q2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9tYW5pZmVzdENsYXNzUGF0aC9jbGllbnQvaTE4bi9zaW1wbGUvVGVzdENsaWVudC5qYXZhCmluZGV4IDQyMzI5MDIuLjA0ZjEwMWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL21hbmlmZXN0Q2xhc3NQYXRoL2NsaWVudC9pMThuL3NpbXBsZS9UZXN0Q2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbWFuaWZlc3RDbGFzc1BhdGgvY2xpZW50L2kxOG4vc2ltcGxlL1Rlc3RDbGllbnQuamF2YQpAQCAtMjksNyArMjksNyBAQAogICAgICAgICBUZXN0Q2xpZW50IGNsaWVudCA9IG5ldyBUZXN0Q2xpZW50KCk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoYXJncyk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBTdHJpbmcgdXJsID0gYXJnc1swXTsKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgICAgICAgICBsb2coIkNhdWdodCBFWFBFQ1RFRCBJT0V4Y2VwdGlvbjogIiArIGV4KTsKICAgICAgICAgICAgICAgICBwYXNzKCk7CiAgICAgICAgICAgICB9Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbWFuaWZlc3RDbGFzc1BhdGgvZGVzY3JpcHRvci9zdW4td2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL21hbmlmZXN0Q2xhc3NQYXRoL2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwKaW5kZXggZjdmODYyNy4uYzkwODc5NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbWFuaWZlc3RDbGFzc1BhdGgvZGVzY3JpcHRvci9zdW4td2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9tYW5pZmVzdENsYXNzUGF0aC9kZXNjcmlwdG9yL3N1bi13ZWIueG1sCkBAIC0yMiw4ICsyMiw4IEBACiA8c3VuLXdlYi1hcHA+CiAgIDxzZXNzaW9uLWNvbmZpZz4KICAgICA8c2Vzc2lvbi1tYW5hZ2VyLz4KLSAgPC9zZXNzaW9uLWNvbmZpZz4gIAotICA8anNwLWNvbmZpZy8+IAorICA8L3Nlc3Npb24tY29uZmlnPgorICA8anNwLWNvbmZpZy8+CiAgIDxsb2NhbGUtY2hhcnNldC1pbmZvIGRlZmF1bHQtbG9jYWxlPSJqYSI+CiAgICAgICA8bG9jYWxlLWNoYXJzZXQtbWFwIGNoYXJzZXQ9IkVVQy1KUCIgbG9jYWxlPSJqYSIgYWdlbnQ9Ik1vemlsbGEvNC43IFtlbl0gKFgxMTsgSTsgU3VuT1MgNS44IHN1bjR1KSI+CiAgICAgICAgIDxkZXNjcmlwdGlvbj5DaGFyc2V0IG1hcHBpbmcgZm9yIEphcGFuZXNlIGxvY2FsZTwvZGVzY3JpcHRpb24+CkBAIC0zNiwxMSArMzYsMTEgQEAKICAgICAgIDwvbG9jYWxlLWNoYXJzZXQtbWFwPgogICAgICAgPGxvY2FsZS1jaGFyc2V0LW1hcCBjaGFyc2V0PSJTaGlmdF9KSVMiIGxvY2FsZT0iamEiIGFnZW50PSJNb3ppbGxhLzQuNzkgW2VuXSAoV2luZG93cyBOVCA1LjA7IFUpIj4KICAgICAgICAgPGRlc2NyaXB0aW9uPkNoYXJzZXQgbWFwcGluZyBmb3IgSmFwYW5lc2UgbG9jYWxlPC9kZXNjcmlwdGlvbj4KLSAgICAgIDwvbG9jYWxlLWNoYXJzZXQtbWFwPiAgICAgIAorICAgICAgPC9sb2NhbGUtY2hhcnNldC1tYXA+CiAgICAgICA8bG9jYWxlLWNoYXJzZXQtbWFwIGNoYXJzZXQ9IklTTy04ODU5LTEiIGxvY2FsZT0iZGVfREUiPgogICAgICAgICA8ZGVzY3JpcHRpb24+Q2hhcnNldCBtYXBwaW5nIGZvciBHZXJtYW4gbG9jYWxlPC9kZXNjcmlwdGlvbj4KICAgICAgIDwvbG9jYWxlLWNoYXJzZXQtbWFwPgogICAgICAgPHBhcmFtZXRlci1lbmNvZGluZyBmb3JtLWhpbnQtZmllbGQ9ImNoYXJzZXR2YWwiIC8+Ci0gIDwvbG9jYWxlLWNoYXJzZXQtaW5mbz4gIAorICA8L2xvY2FsZS1jaGFyc2V0LWluZm8+CiA8L3N1bi13ZWItYXBwPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9tYW5pZmVzdENsYXNzUGF0aC9taXNjL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL21hbmlmZXN0Q2xhc3NQYXRoL21pc2MvYnVpbGQueG1sCmluZGV4IDg3NjdjMTQuLjg0MDNkZTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL21hbmlmZXN0Q2xhc3NQYXRoL21pc2MvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL21hbmlmZXN0Q2xhc3NQYXRoL21pc2MvYnVpbGQueG1sCkBAIC0yMywzMCArMjMsMzAgQEAKIAogPHByb2plY3QgbmFtZT0iaTE4bi1zaW1wbGUiIGRlZmF1bHQ9ImFsbCIgYmFzZWRpcj0iLiI+CiAKLQkmY29tbW9uQnVpbGQ7CisgICAgJmNvbW1vbkJ1aWxkOwogICAgIDxwcm9wZXJ0eSBuYW1lPSJhcmNoaXZlZGlyIiB2YWx1ZT0iJHtidWlsZH0vYXJjaGl2ZXMiLz4KIAotCTx0YXJnZXQgbmFtZT0icHJlcGFyZSIgZGVwZW5kcz0iaW5pdCI+CisgICAgPHRhcmdldCBuYW1lPSJwcmVwYXJlIiBkZXBlbmRzPSJpbml0Ij4KICAgICAgICAgICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkfSIgLz4KICAgICAgICAgPC90YXJnZXQ+CiAKLQkKLQk8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9InByZXBhcmUiPgotCQk8amF2YWMgc3JjZGlyPSJzYW1wbGVzIiBkZXN0ZGlyPSIke2J1aWxkfSI+Ci0JICAgIAk8Y2xhc3NwYXRoPgotCSAgICAJICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7aW5zdH0vbGliL2oyZWUuamFyIi8+Ci0JICAgIAkgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtpbnN0fS9saWIvYXBwc2Vydi1ydC5qYXIiLz4JICAgIAkgIAotICAgIAkJICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7YnVpbGR9L1dFQi1JTkYvbGliL2xpYnJhcnkuamFyIi8+Ci0JCSAgICA8L2NsYXNzcGF0aD4JCQotCQkgPC9qYXZhYz4KLQk8L3RhcmdldD4KLQkKLQk8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIiBkZXBlbmRzPSJjb21waWxlIj4KLQkJPGphciBkZXN0ZmlsZT0iJHthcmNoaXZlZGlyfS9hL2IvaTE4bi1zaW1wbGUuamFyIiAKLSAgICAgICAgICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGR9Ii8+Ci0JPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIiBkZXBlbmRzPSJhc3NlbWJsZSI+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJwcmVwYXJlIj4KKyAgICAgICAgPGphdmFjIHNyY2Rpcj0ic2FtcGxlcyIgZGVzdGRpcj0iJHtidWlsZH0iPgorICAgICAgICAgICAgPGNsYXNzcGF0aD4KKyAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2luc3R9L2xpYi9qMmVlLmphciIvPgorICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7aW5zdH0vbGliL2FwcHNlcnYtcnQuamFyIi8+CisgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtidWlsZH0vV0VCLUlORi9saWIvbGlicmFyeS5qYXIiLz4KKyAgICAgICAgICAgIDwvY2xhc3NwYXRoPgorICAgICAgICAgPC9qYXZhYz4KKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUiIGRlcGVuZHM9ImNvbXBpbGUiPgorICAgICAgICA8amFyIGRlc3RmaWxlPSIke2FyY2hpdmVkaXJ9L2EvYi9pMThuLXNpbXBsZS5qYXIiCisgICAgICAgICAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkfSIvPgorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCIgZGVwZW5kcz0iYXNzZW1ibGUiPgorICAgIDwvdGFyZ2V0PgogCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9tYW5pZmVzdENsYXNzUGF0aC9taXNjL3NhbXBsZXMvaTE4bi9zaW1wbGUvaTE4bnRhZy9NZXNzYWdlVGFnLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9tYW5pZmVzdENsYXNzUGF0aC9taXNjL3NhbXBsZXMvaTE4bi9zaW1wbGUvaTE4bnRhZy9NZXNzYWdlVGFnLmphdmEKaW5kZXggNTZkMTZmMi4uYjg0YjE0YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbWFuaWZlc3RDbGFzc1BhdGgvbWlzYy9zYW1wbGVzL2kxOG4vc2ltcGxlL2kxOG50YWcvTWVzc2FnZVRhZy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL21hbmlmZXN0Q2xhc3NQYXRoL21pc2Mvc2FtcGxlcy9pMThuL3NpbXBsZS9pMThudGFnL01lc3NhZ2VUYWcuamF2YQpAQCAtMjYsMTEwICsyNiwxMTAgQEAKIC8qKgogICogQSBzaW1wbGUgbWVzc2FnZSB0YWdoYW5kbGVyIHRvIGRpc3BsYXkgbG9jYWxpemVkIG1lc3NhZ2UgZnJvbSBhIHJlc291cmNlIGJ1bmRsZSBiYXNlZCBvbiBqc3AgcmVxdWVzdAogICogQGF1dGhvciAgQ2hhbmQgQmFzaGEKLSAqIEB2ZXJzaW9uCTEuMAorICogQHZlcnNpb24gICAgMS4wCiAgKi8KIAogcHVibGljIGNsYXNzIE1lc3NhZ2VUYWcgZXh0ZW5kcyBUYWdTdXBwb3J0IHsKIAotICAgIHByaXZhdGUgU3RyaW5nIGtleQkJCT0gbnVsbDsKLQlwcml2YXRlIFN0cmluZyBidW5kbGVOYW1lCT0gbnVsbDsKLQlwcml2YXRlIFN0cmluZyBsYW5ndWFnZQkJPSBudWxsOwotICAgIHByaXZhdGUgU3RyaW5nIGNvdW50cnkJCT0gbnVsbDsKLSAgICBwcml2YXRlIFN0cmluZyB2YXJpYW50CQk9IG51bGw7CisgICAgcHJpdmF0ZSBTdHJpbmcga2V5ICAgICAgICAgICAgPSBudWxsOworICAgIHByaXZhdGUgU3RyaW5nIGJ1bmRsZU5hbWUgICAgPSBudWxsOworICAgIHByaXZhdGUgU3RyaW5nIGxhbmd1YWdlICAgICAgICA9IG51bGw7CisgICAgcHJpdmF0ZSBTdHJpbmcgY291bnRyeSAgICAgICAgPSBudWxsOworICAgIHByaXZhdGUgU3RyaW5nIHZhcmlhbnQgICAgICAgID0gbnVsbDsKIAotCS8qKgotCSAqIFNldCB0aGUgdXNlciBwcmVmZXJyZWQgbGFuZ3VhZ2UKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRMYW5ndWFnZShTdHJpbmcgbGFuZykgeworICAgIC8qKgorICAgICAqIFNldCB0aGUgdXNlciBwcmVmZXJyZWQgbGFuZ3VhZ2UKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRMYW5ndWFnZShTdHJpbmcgbGFuZykgewogICAgICAgICB0aGlzLmxhbmd1YWdlID0gbGFuZzsKLQl9Ci0KLSAgICAvKioKLQkgKiBHZXQgdGhlIHVzZXIgcHJlZmVycmVkIGxhbmd1YWdlCi0JICovCi0JcHVibGljIFN0cmluZyBnZXRMYW5ndWFnZSgpIHsKLQkJcmV0dXJuIGxhbmd1YWdlOwotCX0KLQotCS8qKgotCSAqIFNldCB0aGUgdXNlciBwcmVmZXJyZWQgY291bnRyeQotCSAqLwotCXB1YmxpYyB2b2lkIHNldENvdW50cnkoU3RyaW5nIGNvdW50cnkpIHsKLQkJdGhpcy5jb3VudHJ5ID0gY291bnRyeTsKLQl9Ci0KLSAgICAvKioKLQkgKiBHZXQgdGhlIHVzZXIgcHJlZmVycmVkIGNvdW50cnkKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldENvdW50cnkoKSB7Ci0JCXJldHVybiBjb3VudHJ5OwogICAgIH0KIAogICAgIC8qKgotCSAqIFNldCB0aGUgdXNlciBwcmVmZXJyZWQgdmFyaWFudAotCSAqLworICAgICAqIEdldCB0aGUgdXNlciBwcmVmZXJyZWQgbGFuZ3VhZ2UKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIGdldExhbmd1YWdlKCkgeworICAgICAgICByZXR1cm4gbGFuZ3VhZ2U7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0IHRoZSB1c2VyIHByZWZlcnJlZCBjb3VudHJ5CisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0Q291bnRyeShTdHJpbmcgY291bnRyeSkgeworICAgICAgICB0aGlzLmNvdW50cnkgPSBjb3VudHJ5OworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldCB0aGUgdXNlciBwcmVmZXJyZWQgY291bnRyeQorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q291bnRyeSgpIHsKKyAgICAgICAgcmV0dXJuIGNvdW50cnk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0IHRoZSB1c2VyIHByZWZlcnJlZCB2YXJpYW50CisgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0VmFyaWFudChTdHJpbmcgdmFyaWFudCkgewotCSAgICB0aGlzLnZhcmlhbnQgPSB2YXJpYW50OwotCX0KLQotICAgIC8qKgotCSAqIEdldCB0aGUgdXNlciBwcmVmZXJyZWQgdmFyaWFudAotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0VmFyaWFudCgpIHsKLQkgICAgcmV0dXJuIHZhcmlhbnQ7CisgICAgICAgIHRoaXMudmFyaWFudCA9IHZhcmlhbnQ7CiAgICAgfQogCiAgICAgLyoqCi0JICogU2V0IHRoZSB1c2VyIHByZWZlcnJlZCByZXNvdXJjZSBidW5kbGUgbmFtZQotCSAqLwotCXB1YmxpYyB2b2lkIHNldE5hbWUgKFN0cmluZyBuYW1lKSB7Ci0JCXRoaXMuYnVuZGxlTmFtZSA9IG5hbWU7Ci0JfQorICAgICAqIEdldCB0aGUgdXNlciBwcmVmZXJyZWQgdmFyaWFudAorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgZ2V0VmFyaWFudCgpIHsKKyAgICAgICAgcmV0dXJuIHZhcmlhbnQ7CisgICAgfQogCiAgICAgLyoqCi0JICogU2V0IHRoZSBtZXNzYWdlIGtleSByZXF1aXJlZCB0byByZXRyaWV2ZSBtZXNzYWdlIGZyb20gdGhlIHJlc291cmNlIGJ1bmRsZQotCSAqLworICAgICAqIFNldCB0aGUgdXNlciBwcmVmZXJyZWQgcmVzb3VyY2UgYnVuZGxlIG5hbWUKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXROYW1lIChTdHJpbmcgbmFtZSkgeworICAgICAgICB0aGlzLmJ1bmRsZU5hbWUgPSBuYW1lOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldCB0aGUgbWVzc2FnZSBrZXkgcmVxdWlyZWQgdG8gcmV0cmlldmUgbWVzc2FnZSBmcm9tIHRoZSByZXNvdXJjZSBidW5kbGUKKyAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRLZXkoU3RyaW5nIGtleSkgewogICAgICAgICB0aGlzLmtleSA9IGtleTsKICAgICB9CiAKICAgICAvKioKLQkgKiBHZXQgdGhlIG1lc3NhZ2Uga2V5IHJlcXVpcmVkIHRvIHJldHJpZXZlIG1lc3NhZ2UgZnJvbSB0aGUgcmVzb3VyY2UgYnVuZGxlCi0JICovCisgICAgICogR2V0IHRoZSBtZXNzYWdlIGtleSByZXF1aXJlZCB0byByZXRyaWV2ZSBtZXNzYWdlIGZyb20gdGhlIHJlc291cmNlIGJ1bmRsZQorICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0S2V5KCkgewogICAgICAgICByZXR1cm4ga2V5OwogICAgIH0KIAogICAgIC8qKgotCSAqIEdldHMgdGhlIHVzZXIgcHJlZmVycmVkIHJlc291cmNlIGJ1bmRsZSBuYW1lCi0JICovCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotCQlyZXR1cm4gYnVuZGxlTmFtZTsKLQl9CisgICAgICogR2V0cyB0aGUgdXNlciBwcmVmZXJyZWQgcmVzb3VyY2UgYnVuZGxlIG5hbWUKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CisgICAgICAgIHJldHVybiBidW5kbGVOYW1lOworICAgIH0KIAogICAgIC8qKgotCSAqIFdpbGwgYmUgY2FsbGVkIGJ5IHRoZSBKU1AgRW5naW5lIHdoZW4gaXQgZW5jb3VudGVycyB0aGUgc3RhcnQgb2YgdGhlIHRhZwotCSAqLworICAgICAqIFdpbGwgYmUgY2FsbGVkIGJ5IHRoZSBKU1AgRW5naW5lIHdoZW4gaXQgZW5jb3VudGVycyB0aGUgc3RhcnQgb2YgdGhlIHRhZworICAgICAqLwogICAgIHB1YmxpYyBpbnQgZG9TdGFydFRhZygpIHRocm93cyBKc3BUYWdFeGNlcHRpb24gewogICAgICAgICByZXR1cm4gRVZBTF9CT0RZX0lOQ0xVREU7CiAgICAgfQogCiAgICAgLyoqCi0JICogV2lsbCBiZSBjYWxsZWQgYnkgdGhlIEpTUCBFbmdpbmUgd2hlbiBpdCBlbmNvdW50ZXJzIHRoZSBlbmQgb2YgdGhlIHRhZwotCSAqLworICAgICAqIFdpbGwgYmUgY2FsbGVkIGJ5IHRoZSBKU1AgRW5naW5lIHdoZW4gaXQgZW5jb3VudGVycyB0aGUgZW5kIG9mIHRoZSB0YWcKKyAgICAgKi8KICAgICBwdWJsaWMgaW50IGRvRW5kVGFnKCkgdGhyb3dzIEpzcFRhZ0V4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7Ci0JCQlpZihsYW5ndWFnZSAhPSBudWxsKSB7Ci0JCQkJaWYoIGNvdW50cnkgPT0gbnVsbCkKLQkJCQkJY291bnRyeSA9ICIiOwotCQkJCWlmKHZhcmlhbnQgPT0gbnVsbCkKLQkJCQkJdmFyaWFudCA9ICIiOwotCQkJfSBlbHNlIGxhbmd1YWdlID0gImVuIjsKLQkJCWphdmEudXRpbC5Mb2NhbGUgbG9jYWxlID0gbmV3IExvY2FsZShsYW5ndWFnZSwgY291bnRyeSwgdmFyaWFudCk7Ci0JCQlSZXNvdXJjZUJ1bmRsZSBidW5kbGUgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoYnVuZGxlTmFtZSwgbG9jYWxlKTsKLQkJCVN0cmluZyBtZXNzYWdlID0gYnVuZGxlLmdldFN0cmluZyhrZXkpOwotCQkJcGFnZUNvbnRleHQuZ2V0T3V0KCkud3JpdGUoIk1lc3NhZ2UgZnJvbSByZXNvdXJjZSBidW5kbGU6IiArIG1lc3NhZ2UpOwotCQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBpZihsYW5ndWFnZSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgaWYoIGNvdW50cnkgPT0gbnVsbCkKKyAgICAgICAgICAgICAgICAgICAgY291bnRyeSA9ICIiOworICAgICAgICAgICAgICAgIGlmKHZhcmlhbnQgPT0gbnVsbCkKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFudCA9ICIiOworICAgICAgICAgICAgfSBlbHNlIGxhbmd1YWdlID0gImVuIjsKKyAgICAgICAgICAgIGphdmEudXRpbC5Mb2NhbGUgbG9jYWxlID0gbmV3IExvY2FsZShsYW5ndWFnZSwgY291bnRyeSwgdmFyaWFudCk7CisgICAgICAgICAgICBSZXNvdXJjZUJ1bmRsZSBidW5kbGUgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoYnVuZGxlTmFtZSwgbG9jYWxlKTsKKyAgICAgICAgICAgIFN0cmluZyBtZXNzYWdlID0gYnVuZGxlLmdldFN0cmluZyhrZXkpOworICAgICAgICAgICAgcGFnZUNvbnRleHQuZ2V0T3V0KCkud3JpdGUoIk1lc3NhZ2UgZnJvbSByZXNvdXJjZSBidW5kbGU6IiArIG1lc3NhZ2UpOworICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgSnNwVGFnRXhjZXB0aW9uKCJFcnJvcjogIiArIGUpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBFVkFMX1BBR0U7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9tYW5pZmVzdENsYXNzUGF0aC9taXNjL3NhbXBsZXMvaTE4bi9zaW1wbGUvc2VydmxldC9Gb3J3YXJkZWRTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9tYW5pZmVzdENsYXNzUGF0aC9taXNjL3NhbXBsZXMvaTE4bi9zaW1wbGUvc2VydmxldC9Gb3J3YXJkZWRTZXJ2bGV0LmphdmEKaW5kZXggMDg0MGZjMC4uMGVkNmVhZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbWFuaWZlc3RDbGFzc1BhdGgvbWlzYy9zYW1wbGVzL2kxOG4vc2ltcGxlL3NlcnZsZXQvRm9yd2FyZGVkU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL21hbmlmZXN0Q2xhc3NQYXRoL21pc2Mvc2FtcGxlcy9pMThuL3NpbXBsZS9zZXJ2bGV0L0ZvcndhcmRlZFNlcnZsZXQuamF2YQpAQCAtMTYsNyArMTYsNyBAQAogLyoqCiAgKiBTZXJ2bGV0IGZvcndhcmRlZCBmcm9tIFNpbXBsZUkxOG5TZXJ2bGV0CiAgKiBAYXV0aG9yICBDaGFuZCBCYXNoYQotICogQHZlcnNpb24JMS4wCisgKiBAdmVyc2lvbiAgICAxLjAKICAqLwogcHVibGljIGNsYXNzIEZvcndhcmRlZFNlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAKQEAgLTQwLDExICs0MCwxMSBAQAogICAgICAqLwogICAgIHByb3RlY3RlZCB2b2lkIHByb2Nlc3NSZXF1ZXN0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzKQogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgU3RyaW5nIGNoYXJzZXR2YWwJCQk9CXJlcS5nZXRQYXJhbWV0ZXIoImNoYXJzZXR2YWwiKTsKKyAgICAgICAgU3RyaW5nIGNoYXJzZXR2YWwgICAgICAgICAgICA9ICAgIHJlcS5nZXRQYXJhbWV0ZXIoImNoYXJzZXR2YWwiKTsKICAgICAgICAgcmVxLnNldENoYXJhY3RlckVuY29kaW5nKGNoYXJzZXR2YWwpOwogICAgICAgICByZXMuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbDtjaGFyc2V0PSIgKyBjaGFyc2V0dmFsICsgIiIpOwotICAgICAgICBqYXZhLmlvLlByaW50V3JpdGVyIG91dAkJPQlyZXMuZ2V0V3JpdGVyKCk7Ci0gICAgICAgIFN0cmluZyBuYW1lCQkJCQk9CXJlcS5nZXRQYXJhbWV0ZXIoIm5hbWUiKTsKKyAgICAgICAgamF2YS5pby5QcmludFdyaXRlciBvdXQgICAgICAgID0gICAgcmVzLmdldFdyaXRlcigpOworICAgICAgICBTdHJpbmcgbmFtZSAgICAgICAgICAgICAgICAgICAgPSAgICByZXEuZ2V0UGFyYW1ldGVyKCJuYW1lIik7CiAgICAgICAgIG91dC5wcmludGxuKCI8aHRtbD4iKTsKICAgICAgICAgb3V0LnByaW50bG4oIjxoZWFkPiIpOwogICAgICAgICBvdXQucHJpbnRsbigiPHRpdGxlPlNlcnZsZXQ8L3RpdGxlPiIpOwpAQCAtNTIsOCArNTIsOCBAQAogICAgICAgICBvdXQucHJpbnRsbigiPGJvZHk+Iik7CiAgICAgICAgIG91dC5wcmludGxuKCI8SDM+IFRoaXMgaXMgdGhlIG5hbWUgZnJvbSBmb3J3YXJkZWQgc2VydmxldCA8L0gzPiIpOwogICAgICAgICBvdXQucHJpbnRsbigiPEg0PiBUaGUgbmFtZSBlbnRlcmVkIHdhczoiICsgbmFtZSArICI8L2g0PiIpOwotCQlvdXQucHJpbnRsbigiPGJyPiIpOwotCQlvdXQucHJpbnRsbigiPFA+PEJSPjxBIEhSRUY9XCIvaTE4bi1zaW1wbGVcIj5CYWNrIHRvIHNhbXBsZSBob21lPC9BPjwvUD4iKTsKKyAgICAgICAgb3V0LnByaW50bG4oIjxicj4iKTsKKyAgICAgICAgb3V0LnByaW50bG4oIjxQPjxCUj48QSBIUkVGPVwiL2kxOG4tc2ltcGxlXCI+QmFjayB0byBzYW1wbGUgaG9tZTwvQT48L1A+Iik7CiAgICAgICAgIG91dC5wcmludGxuKCI8L2JvZHk+Iik7CiAgICAgICAgIG91dC5wcmludGxuKCI8L2h0bWw+Iik7CiAgICAgICAgIG91dC5jbG9zZSgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbWFuaWZlc3RDbGFzc1BhdGgvbWlzYy9zYW1wbGVzL2kxOG4vc2ltcGxlL3NlcnZsZXQvSW5jbHVkZWRTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9tYW5pZmVzdENsYXNzUGF0aC9taXNjL3NhbXBsZXMvaTE4bi9zaW1wbGUvc2VydmxldC9JbmNsdWRlZFNlcnZsZXQuamF2YQppbmRleCBjMzE1YjQ2Li5kYzdmOWU1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9tYW5pZmVzdENsYXNzUGF0aC9taXNjL3NhbXBsZXMvaTE4bi9zaW1wbGUvc2VydmxldC9JbmNsdWRlZFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9tYW5pZmVzdENsYXNzUGF0aC9taXNjL3NhbXBsZXMvaTE4bi9zaW1wbGUvc2VydmxldC9JbmNsdWRlZFNlcnZsZXQuamF2YQpAQCAtMTcsNyArMTcsNyBAQAogLyoqCiAgKiBTZXJ2bGV0IGluY2x1ZGVkIGluIFNpbXBsZUkxOG5TZXJ2bGV0CiAgKiBAYXV0aG9yICBDaGFuZCBCYXNoYQotICogQHZlcnNpb24JMS4wCisgKiBAdmVyc2lvbiAgICAxLjAKICAqLwogcHVibGljIGNsYXNzIEluY2x1ZGVkU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIApAQCAtNDIsMTUgKzQyLDE1IEBACiAgICAgcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc1JlcXVlc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpCiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewogICAgICAgICB0cnkgewotCQkJamF2YS5pby5QcmludFdyaXRlciBvdXQJPQlyZXMuZ2V0V3JpdGVyKCk7Ci0JCQlTdHJpbmcgbmFtZQkJCQk9CXJlcS5nZXRQYXJhbWV0ZXIoIm5hbWUiKTsKKyAgICAgICAgICAgIGphdmEuaW8uUHJpbnRXcml0ZXIgb3V0ICAgID0gICAgcmVzLmdldFdyaXRlcigpOworICAgICAgICAgICAgU3RyaW5nIG5hbWUgICAgICAgICAgICAgICAgPSAgICByZXEuZ2V0UGFyYW1ldGVyKCJuYW1lIik7CiAKLQkJCW91dC5wcmludGxuKCI8SDM+IFRoaXMgaXMgdGhlIG5hbWUgZnJvbSBpbmNsdWRlZCBzZXJ2bGV0IDwvSDM+Iik7Ci0JCQlvdXQucHJpbnRsbigiPEg0PiBUaGUgbmFtZSBlbnRlcmVkIHdhczoiICsgbmFtZSArICI8L2g0PiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxIMz4gVGhpcyBpcyB0aGUgbmFtZSBmcm9tIGluY2x1ZGVkIHNlcnZsZXQgPC9IMz4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8SDQ+IFRoZSBuYW1lIGVudGVyZWQgd2FzOiIgKyBuYW1lICsgIjwvaDQ+Iik7CiAKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICAvKiogSGFuZGxlcyB0aGUgSFRUUCA8Y29kZT5HRVQ8L2NvZGU+IG1ldGhvZC4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL21hbmlmZXN0Q2xhc3NQYXRoL21pc2Mvc2FtcGxlcy9pMThuL3NpbXBsZS9zZXJ2bGV0L0xvY2FsZUNoYXJzZXRTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9tYW5pZmVzdENsYXNzUGF0aC9taXNjL3NhbXBsZXMvaTE4bi9zaW1wbGUvc2VydmxldC9Mb2NhbGVDaGFyc2V0U2VydmxldC5qYXZhCmluZGV4IDRlNzgwNDMuLmUwMTQ5NzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL21hbmlmZXN0Q2xhc3NQYXRoL21pc2Mvc2FtcGxlcy9pMThuL3NpbXBsZS9zZXJ2bGV0L0xvY2FsZUNoYXJzZXRTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbWFuaWZlc3RDbGFzc1BhdGgvbWlzYy9zYW1wbGVzL2kxOG4vc2ltcGxlL3NlcnZsZXQvTG9jYWxlQ2hhcnNldFNlcnZsZXQuamF2YQpAQCAtMzAsNyArMzAsNyBAQAogCiAgKiBAYXV0aG9yICBDaGFuZCBCYXNoYQogCi0gKiBAdmVyc2lvbgkxLjAKKyAqIEB2ZXJzaW9uICAgIDEuMAogCiAgKi8KIApAQCAtNTIsMTUgKzUyLDE1IEBACiAKIAogCi0gICAgICAgIFN0cmluZyBuYW1lCQkJPQlyZXEuZ2V0UGFyYW1ldGVyKCJuYW1lIik7CisgICAgICAgIFN0cmluZyBuYW1lICAgICAgICAgICAgPSAgICByZXEuZ2V0UGFyYW1ldGVyKCJuYW1lIik7CiAKLSAgICAgICAgU3RyaW5nIGNoYXJzZXR2YWwJPQlyZXEuZ2V0Q2hhcmFjdGVyRW5jb2RpbmcoKTsKKyAgICAgICAgU3RyaW5nIGNoYXJzZXR2YWwgICAgPSAgICByZXEuZ2V0Q2hhcmFjdGVyRW5jb2RpbmcoKTsKIAogICAgICAgICBpZiAoY2hhcnNldHZhbCAhPSBudWxsKSB7CiAKLSAgICAgICAgCXJlcy5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sO2NoYXJzZXQ9IiArIGNoYXJzZXR2YWwgKyAiIik7CisgICAgICAgICAgICByZXMuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbDtjaGFyc2V0PSIgKyBjaGFyc2V0dmFsICsgIiIpOwogCi0JCX0gZWxzZSByZXMuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbDtjaGFyc2V0PVVURi04Iik7CisgICAgICAgIH0gZWxzZSByZXMuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbDtjaGFyc2V0PVVURi04Iik7CiAKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzLmdldFdyaXRlcigpOwogCkBAIC04Miw5ICs4Miw5IEBACiAKICAgICAgICAgb3V0LnByaW50bG4oIjxicj4iKTsKIAotCQlvdXQucHJpbnRsbigiPFA+PEJSPjxBIEhSRUY9XCIvaTE4bi1zaW1wbGVcIj5CYWNrIHRvIHNhbXBsZSBob21lPC9BPjwvUD4iKTsKKyAgICAgICAgb3V0LnByaW50bG4oIjxQPjxCUj48QSBIUkVGPVwiL2kxOG4tc2ltcGxlXCI+QmFjayB0byBzYW1wbGUgaG9tZTwvQT48L1A+Iik7CiAKLQkJb3V0LnByaW50bG4oIjwvYm9keT48L2h0bWw+Iik7CisgICAgICAgIG91dC5wcmludGxuKCI8L2JvZHk+PC9odG1sPiIpOwogCiAgICAgICAgIG91dC5jbG9zZSgpOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9tYW5pZmVzdENsYXNzUGF0aC9taXNjL3NhbXBsZXMvaTE4bi9zaW1wbGUvc2VydmxldC9TaW1wbGVGaWx0ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL21hbmlmZXN0Q2xhc3NQYXRoL21pc2Mvc2FtcGxlcy9pMThuL3NpbXBsZS9zZXJ2bGV0L1NpbXBsZUZpbHRlci5qYXZhCmluZGV4IGM0YWExZDcuLjQ1Y2FiMGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL21hbmlmZXN0Q2xhc3NQYXRoL21pc2Mvc2FtcGxlcy9pMThuL3NpbXBsZS9zZXJ2bGV0L1NpbXBsZUZpbHRlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL21hbmlmZXN0Q2xhc3NQYXRoL21pc2Mvc2FtcGxlcy9pMThuL3NpbXBsZS9zZXJ2bGV0L1NpbXBsZUZpbHRlci5qYXZhCkBAIC0yMSw5ICsyMSw5IEBACiAKIHB1YmxpYyBjbGFzcyBTaW1wbGVGaWx0ZXIgaW1wbGVtZW50cyBGaWx0ZXIgewogCi0gICAgcHJpdmF0ZSBGaWx0ZXJDb25maWcgZmlsdGVyQ29uZmlnCT0gbnVsbDsKLSAgICBwcml2YXRlIGJvb2xlYW4gdXNlZmlsdGVyCQkJPSBmYWxzZTsKLSAgICBwcml2YXRlIFN0cmluZyBlbmNvZGluZwkJCQk9IG51bGw7CisgICAgcHJpdmF0ZSBGaWx0ZXJDb25maWcgZmlsdGVyQ29uZmlnICAgID0gbnVsbDsKKyAgICBwcml2YXRlIGJvb2xlYW4gdXNlZmlsdGVyICAgICAgICAgICAgPSBmYWxzZTsKKyAgICBwcml2YXRlIFN0cmluZyBlbmNvZGluZyAgICAgICAgICAgICAgICA9IG51bGw7CiAKICAgICAvKioKICAgICAgKiBDYWxsZWQgYnkgdGhlIHdlYiBjb250YWluZXIgdG8gaW5kaWNhdGUgdG8gYSBmaWx0ZXIgdGhhdCBpdCBpcyBiZWluZyBwbGFjZWQgaW50byBzZXJ2aWNlCkBAIC0zMSwxNiArMzEsMTYgQEAKICAgICAgKiBAcGFyYW0gZmlsdGVyQ29uZmlnIFRoZSBmaWx0ZXIgY29uZmlndXJhdGlvbiBvYmplY3QKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBpbml0KEZpbHRlckNvbmZpZyBmaWx0ZXJDb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKLQkJdHJ5IHsKLQkJCXRoaXMuZmlsdGVyQ29uZmlnCT0JZmlsdGVyQ29uZmlnOwotCQkJU3RyaW5nIHBhcmFtCQk9CWZpbHRlckNvbmZpZy5nZXRJbml0UGFyYW1ldGVyKCJ1c2VmaWx0ZXIiKTsKLQkJCXRoaXMuZW5jb2RpbmcJCT0JZmlsdGVyQ29uZmlnLmdldEluaXRQYXJhbWV0ZXIoImVuY29kaW5nIik7Ci0JCQlpZiAocGFyYW0uZXF1YWxzKCJ0cnVlIikpIHsKLQkJCQl0aGlzLnVzZWZpbHRlcgk9CXRydWU7Ci0JCQl9Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB0aGlzLmZpbHRlckNvbmZpZyAgICA9ICAgIGZpbHRlckNvbmZpZzsKKyAgICAgICAgICAgIFN0cmluZyBwYXJhbSAgICAgICAgPSAgICBmaWx0ZXJDb25maWcuZ2V0SW5pdFBhcmFtZXRlcigidXNlZmlsdGVyIik7CisgICAgICAgICAgICB0aGlzLmVuY29kaW5nICAgICAgICA9ICAgIGZpbHRlckNvbmZpZy5nZXRJbml0UGFyYW1ldGVyKCJlbmNvZGluZyIpOworICAgICAgICAgICAgaWYgKHBhcmFtLmVxdWFscygidHJ1ZSIpKSB7CisgICAgICAgICAgICAgICAgdGhpcy51c2VmaWx0ZXIgICAgPSAgICB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIC8qKgpAQCAtNTEsMTggKzUxLDE4IEBACiAgICAgICogQHBhcmFtIGNoYWluIFRoZSBmaWx0ZXIgY2hhaW4gd2UgYXJlIHByb2Nlc3NpbmcKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBkb0ZpbHRlcihTZXJ2bGV0UmVxdWVzdCByZXEsIFNlcnZsZXRSZXNwb25zZSByZXMsIEZpbHRlckNoYWluIGNoYWluKQotCXRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbiB7Ci0JCXRyeSB7Ci0gICAgICAgIAlpZiAodXNlZmlsdGVyKSB7Ci0gICAgICAgIAkgICAgU3RyaW5nIGVuY29kaW5nID0gZ2V0RW5jb2RpbmcocmVxKTsKLSAgICAgICAgCSAgICBpZiAoZW5jb2RpbmcgIT0gbnVsbCkgewotICAgICAgICAJICAgICAgICByZXEuc2V0Q2hhcmFjdGVyRW5jb2RpbmcoZW5jb2RpbmcpOwotCQkJCX0KLQkJCX0KLSAgICAgICAgCWNoYWluLmRvRmlsdGVyKHJlcSwgcmVzKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KKyAgICB0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24geworICAgICAgICB0cnkgeworICAgICAgICAgICAgaWYgKHVzZWZpbHRlcikgeworICAgICAgICAgICAgICAgIFN0cmluZyBlbmNvZGluZyA9IGdldEVuY29kaW5nKHJlcSk7CisgICAgICAgICAgICAgICAgaWYgKGVuY29kaW5nICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVxLnNldENoYXJhY3RlckVuY29kaW5nKGVuY29kaW5nKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjaGFpbi5kb0ZpbHRlcihyZXEsIHJlcyk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CiAgICAgfQogCiAgICAgLyoqCkBAIC03OCw3ICs3OCw3IEBACiAgICAgICogQ2FsbGVkIGJ5IHRoZSB3ZWIgY29udGFpbmVyIHRvIGluZGljYXRlIHRvIGEgZmlsdGVyIHRoYXQgaXQgaXMgYmVpbmcgdGFrZW4gb3V0IG9mIHNlcnZpY2UuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHsKLSAgICAgICAgdGhpcy5lbmNvZGluZwkJPSBudWxsOwotICAgICAgICB0aGlzLmZpbHRlckNvbmZpZwk9IG51bGw7CisgICAgICAgIHRoaXMuZW5jb2RpbmcgICAgICAgID0gbnVsbDsKKyAgICAgICAgdGhpcy5maWx0ZXJDb25maWcgICAgPSBudWxsOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL21hbmlmZXN0Q2xhc3NQYXRoL21pc2Mvc2FtcGxlcy9pMThuL3NpbXBsZS9zZXJ2bGV0L1NpbXBsZUZpbHRlclNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL21hbmlmZXN0Q2xhc3NQYXRoL21pc2Mvc2FtcGxlcy9pMThuL3NpbXBsZS9zZXJ2bGV0L1NpbXBsZUZpbHRlclNlcnZsZXQuamF2YQppbmRleCA0ZTYyZWQwLi5hNjQxMGFmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9tYW5pZmVzdENsYXNzUGF0aC9taXNjL3NhbXBsZXMvaTE4bi9zaW1wbGUvc2VydmxldC9TaW1wbGVGaWx0ZXJTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbWFuaWZlc3RDbGFzc1BhdGgvbWlzYy9zYW1wbGVzL2kxOG4vc2ltcGxlL3NlcnZsZXQvU2ltcGxlRmlsdGVyU2VydmxldC5qYXZhCkBAIC00MCwxMCArNDAsMTAgQEAKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7CiAgICAgICAgIFN0cmluZyBjaGFyc2V0dmFsID0gcmVxLmdldENoYXJhY3RlckVuY29kaW5nKCk7CiAgICAgICAgIGlmIChjaGFyc2V0dmFsICE9IG51bGwpIHsKLSAgICAgICAgCXJlcy5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sO2NoYXJzZXQ9IiArIGNoYXJzZXR2YWwgKyAiIik7Ci0JCX0gZWxzZSByZXMuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbDtjaGFyc2V0PVVURi04Iik7Ci0gICAgICAgIGphdmEuaW8uUHJpbnRXcml0ZXIgb3V0CQk9CXJlcy5nZXRXcml0ZXIoKTsKLSAgICAgICAgU3RyaW5nIG5hbWUJCQkJCT0JcmVxLmdldFBhcmFtZXRlcigibmFtZSIpOworICAgICAgICAgICAgcmVzLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWw7Y2hhcnNldD0iICsgY2hhcnNldHZhbCArICIiKTsKKyAgICAgICAgfSBlbHNlIHJlcy5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sO2NoYXJzZXQ9VVRGLTgiKTsKKyAgICAgICAgamF2YS5pby5QcmludFdyaXRlciBvdXQgICAgICAgID0gICAgcmVzLmdldFdyaXRlcigpOworICAgICAgICBTdHJpbmcgbmFtZSAgICAgICAgICAgICAgICAgICAgPSAgICByZXEuZ2V0UGFyYW1ldGVyKCJuYW1lIik7CiAgICAgICAgIG91dC5wcmludGxuKCI8aHRtbD4iKTsKICAgICAgICAgb3V0LnByaW50bG4oIjxoZWFkPiIpOwogICAgICAgICBvdXQucHJpbnRsbigiPHRpdGxlPlNpbXBsZSBzZXJ2bGV0IHRvIHZlcmlmeSB0aGUgZmlsdGVyPC90aXRsZT4iKTsKQEAgLTUxLDggKzUxLDggQEAKICAgICAgICAgb3V0LnByaW50bG4oIjxib2R5PiIpOwogICAgICAgICBvdXQucHJpbnRsbigiPEgzPiBUaGlzIGlzIHRoZSBuYW1lIHlvdSBoYXZlIGVudGVyZWQgIiArIG5hbWUgKyAiPC9IMz4iKTsKICAgICAgICAgb3V0LnByaW50bG4oIjxIND4gVGhlIGNoYXJhY3RlciBlbmNvZGluZyBzZXQgYnkgdGhlIGZpbHRlciBpczogIiArIGNoYXJzZXR2YWwgKyAiPC9oND4iKTsKLQkJb3V0LnByaW50bG4oIjxicj4iKTsKLQkJb3V0LnByaW50bG4oIjxQPjxCUj48QSBIUkVGPVwiL2kxOG4tc2ltcGxlXCI+QmFjayB0byBzYW1wbGUgaG9tZTwvQT48L1A+Iik7CisgICAgICAgIG91dC5wcmludGxuKCI8YnI+Iik7CisgICAgICAgIG91dC5wcmludGxuKCI8UD48QlI+PEEgSFJFRj1cIi9pMThuLXNpbXBsZVwiPkJhY2sgdG8gc2FtcGxlIGhvbWU8L0E+PC9QPiIpOwogICAgICAgICBvdXQucHJpbnRsbigiPC9ib2R5PiIpOwogICAgICAgICBvdXQucHJpbnRsbigiPC9odG1sPiIpOwogICAgICAgICBvdXQuY2xvc2UoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL21hbmlmZXN0Q2xhc3NQYXRoL21pc2Mvc2FtcGxlcy9pMThuL3NpbXBsZS9zZXJ2bGV0L1NpbXBsZUkxOG5TZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9tYW5pZmVzdENsYXNzUGF0aC9taXNjL3NhbXBsZXMvaTE4bi9zaW1wbGUvc2VydmxldC9TaW1wbGVJMThuU2VydmxldC5qYXZhCmluZGV4IGJhMDJhMmMuLjExMzI0OWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL21hbmlmZXN0Q2xhc3NQYXRoL21pc2Mvc2FtcGxlcy9pMThuL3NpbXBsZS9zZXJ2bGV0L1NpbXBsZUkxOG5TZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbWFuaWZlc3RDbGFzc1BhdGgvbWlzYy9zYW1wbGVzL2kxOG4vc2ltcGxlL3NlcnZsZXQvU2ltcGxlSTE4blNlcnZsZXQuamF2YQpAQCAtMjAsNyArMjAsNyBAQAogICogVGhpcyBpcyBhIHNpbXBsZSBzZXJ2bGV0IHRoYXQgZGVtb25zdHJhdGVzIHNvbWUgb2YgbW9zdCBjb21tb25seSB1c2VkIGkxOG4gZmVhdHVyZXMgb2YKICAqIHRoZSBBcHBsaWNhdGlvbiBTZXJ2ZXIncyBKYXZhIFNlcnZsZXQgQVBJIEltcGxlbWVudGF0aW9uCiAgKiBAYXV0aG9yICBDaGFuZCBCYXNoYQotICogQHZlcnNpb24JMS4wCisgKiBAdmVyc2lvbiAgICAxLjAKICAqLwogcHVibGljIGNsYXNzIFNpbXBsZUkxOG5TZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewogCkBAIC00NCw4MCArNDQsODAgQEAKICAgICBwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzUmVxdWVzdChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlcykKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7Ci0JCQlIdHRwU2Vzc2lvbiBzZXNzaW9uCT0JcmVxLmdldFNlc3Npb24oZmFsc2UpOwotCQkJaWYoc2Vzc2lvbiAhPSBudWxsKSB7Ci0JCQkJU3RyaW5nIHNlc3Npb25jaGFyc2V0ID0gKFN0cmluZylzZXNzaW9uLmdldEF0dHJpYnV0ZSgiY2hhcnNldCIpOwotCQkJCXRyeSB7Ci0JCQkJCXJlcS5zZXRDaGFyYWN0ZXJFbmNvZGluZyhzZXNzaW9uY2hhcnNldCk7Ci0JCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9Ci0JCQl9Ci0JCQlTdHJpbmcgZnVuYwkJPQlyZXEuZ2V0UGFyYW1ldGVyKCJmdW5jIik7Ci0JCQlTdHJpbmcgYWN0aW9uCT0JcmVxLmdldFBhcmFtZXRlcigiYWN0aW9uIik7CisgICAgICAgICAgICBIdHRwU2Vzc2lvbiBzZXNzaW9uICAgID0gICAgcmVxLmdldFNlc3Npb24oZmFsc2UpOworICAgICAgICAgICAgaWYoc2Vzc2lvbiAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIHNlc3Npb25jaGFyc2V0ID0gKFN0cmluZylzZXNzaW9uLmdldEF0dHJpYnV0ZSgiY2hhcnNldCIpOworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIHJlcS5zZXRDaGFyYWN0ZXJFbmNvZGluZyhzZXNzaW9uY2hhcnNldCk7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBTdHJpbmcgZnVuYyAgICAgICAgPSAgICByZXEuZ2V0UGFyYW1ldGVyKCJmdW5jIik7CisgICAgICAgICAgICBTdHJpbmcgYWN0aW9uICAgID0gICAgcmVxLmdldFBhcmFtZXRlcigiYWN0aW9uIik7CiAKLQkJCWlmKGZ1bmMuZXF1YWxzKCJzZW5kSW5wdXQiKSkgewotCQkJCVN0cmluZyBjaGFyc2V0dmFsCT0JcmVxLmdldFBhcmFtZXRlcigiY2hhcnNldHZhbCIpOwotCQkJCXNlbmRJbnB1dCAocmVxLCByZXMsIGNoYXJzZXR2YWwsIGFjdGlvbik7Ci0JCQl9IGVsc2UgewotCQkJCWlmICggYWN0aW9uLmVxdWFscygiZm9ybWF0RGF0ZSIpICkgewotCQkJCQlmb3JtYXREYXRlIChyZXEsIHJlcyk7Ci0JCQkJfSBlbHNlIGlmICggYWN0aW9uLmVxdWFscygic2V0Q2hhckVuY29kaW5nIikgKSB7Ci0JCQkJCXNldENoYXJFbmNvZGluZyAocmVxLCByZXMpOwotCQkJCX0gZWxzZSBpZiAoIGFjdGlvbi5lcXVhbHMoImluY2x1ZGVTZXJ2bGV0IikgKSB7Ci0JCQkJCWluY2x1ZGVTZXJ2bGV0IChyZXEsIHJlcyk7Ci0JCQkJfSBlbHNlIGlmICggYWN0aW9uLmVxdWFscygiZm9yd2FyZFNlcnZsZXQiKSApIHsKLQkJCQkJZm9yd2FyZFNlcnZsZXQgKHJlcSwgcmVzKTsKLQkJCQl9IGVsc2UgaWYgKCBhY3Rpb24uZXF1YWxzKCJzZW5kRXJyb3JNZXNzYWdlIikgKSB7Ci0JCQkJCXNlbmRFcnJvck1lc3NhZ2UgKHJlcSwgcmVzKTsKLQkJCQl9IGVsc2UgaWYgKCBhY3Rpb24uZXF1YWxzKCJ1c2VSZXNvdXJjZUJ1bmRsZSIpICkgewotCQkJCQl1c2VSZXNvdXJjZUJ1bmRsZSAocmVxLCByZXMpOwotCQkJCX0gZWxzZSBpZiAoIGFjdGlvbi5lcXVhbHMoImZvcndhcmRKc3AiKSApIHsKLQkJCQkJZm9yd2FyZEpzcCAocmVxLCByZXMpOwotCQkJCX0KLQkJCX0KLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQl9Ci0JLyoqIFNldHMgdGhlIGNoYXJzZXQgYXR0cmlidXRlIHRvIHRoZSBzZXNzaW9uIGFuZCBnZW5lcmF0ZXMgYW4gaW5wdXQgZm9ybQotCSAqICBAcGFyYW0gcmVxdWVzdCBzZXJ2bGV0IHJlcXVlc3QKLQkgKiAgQHBhcmFtIHJlc3BvbnNlIHNlcnZsZXQgcmVzcG9uc2UKKyAgICAgICAgICAgIGlmKGZ1bmMuZXF1YWxzKCJzZW5kSW5wdXQiKSkgeworICAgICAgICAgICAgICAgIFN0cmluZyBjaGFyc2V0dmFsICAgID0gICAgcmVxLmdldFBhcmFtZXRlcigiY2hhcnNldHZhbCIpOworICAgICAgICAgICAgICAgIHNlbmRJbnB1dCAocmVxLCByZXMsIGNoYXJzZXR2YWwsIGFjdGlvbik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICggYWN0aW9uLmVxdWFscygiZm9ybWF0RGF0ZSIpICkgeworICAgICAgICAgICAgICAgICAgICBmb3JtYXREYXRlIChyZXEsIHJlcyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggYWN0aW9uLmVxdWFscygic2V0Q2hhckVuY29kaW5nIikgKSB7CisgICAgICAgICAgICAgICAgICAgIHNldENoYXJFbmNvZGluZyAocmVxLCByZXMpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGFjdGlvbi5lcXVhbHMoImluY2x1ZGVTZXJ2bGV0IikgKSB7CisgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVTZXJ2bGV0IChyZXEsIHJlcyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggYWN0aW9uLmVxdWFscygiZm9yd2FyZFNlcnZsZXQiKSApIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yd2FyZFNlcnZsZXQgKHJlcSwgcmVzKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBhY3Rpb24uZXF1YWxzKCJzZW5kRXJyb3JNZXNzYWdlIikgKSB7CisgICAgICAgICAgICAgICAgICAgIHNlbmRFcnJvck1lc3NhZ2UgKHJlcSwgcmVzKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBhY3Rpb24uZXF1YWxzKCJ1c2VSZXNvdXJjZUJ1bmRsZSIpICkgeworICAgICAgICAgICAgICAgICAgICB1c2VSZXNvdXJjZUJ1bmRsZSAocmVxLCByZXMpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGFjdGlvbi5lcXVhbHMoImZvcndhcmRKc3AiKSApIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yd2FyZEpzcCAocmVxLCByZXMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgLyoqIFNldHMgdGhlIGNoYXJzZXQgYXR0cmlidXRlIHRvIHRoZSBzZXNzaW9uIGFuZCBnZW5lcmF0ZXMgYW4gaW5wdXQgZm9ybQorICAgICAqICBAcGFyYW0gcmVxdWVzdCBzZXJ2bGV0IHJlcXVlc3QKKyAgICAgKiAgQHBhcmFtIHJlc3BvbnNlIHNlcnZsZXQgcmVzcG9uc2UKICAgICAgKi8KLQlwcm90ZWN0ZWQgdm9pZCBzZW5kSW5wdXQgKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzLCBTdHJpbmcgY2hhcnNldHZhbCwgU3RyaW5nIGFjdGlvbikKKyAgICBwcm90ZWN0ZWQgdm9pZCBzZW5kSW5wdXQgKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzLCBTdHJpbmcgY2hhcnNldHZhbCwgU3RyaW5nIGFjdGlvbikKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQl0cnkgewotCQkJSHR0cFNlc3Npb24gc2Vzc2lvbgk9CXJlcS5nZXRTZXNzaW9uKHRydWUpOwotCQkJc2Vzc2lvbi5zZXRBdHRyaWJ1dGUoImNoYXJzZXQiLCBjaGFyc2V0dmFsKTsKLQkJCXJlcy5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sOyBjaGFyc2V0PSIgKyBjaGFyc2V0dmFsKTsKLQkJCVByaW50V3JpdGVyIG91dCA9IHJlcy5nZXRXcml0ZXIoKTsKLQkJCW91dC5wcmludGxuKCI8aHRtbD4iKTsKLQkJCW91dC5wcmludGxuKCI8aGVhZD4iKTsKLQkJCW91dC5wcmludGxuKCI8dGl0bGU+U2VydmxldCBpMThuIHNhbXBsZXM8L3RpdGxlPjwvaGVhZD4iKTsKLQkJCW91dC5wcmludGxuKCI8Ym9keT48YnI+Iik7Ci0JCQlvdXQucHJpbnRsbigiPFA+PEZPTlQgRkFDRT1cIlRpbWVzIE5ldyBSb21hblwiPjxGT05UIFNJWkU9Nj48Qj5TZXJ2bGV0IGkxOG4gc2FtcGxlczwvQj48L0ZPTlQ+PC9GT05UPjwvUD4iKTsKLQkJCW91dC5wcmludGxuKCI8Zm9ybSBuYW1lPVwiaTE4bi1zaW1wbGVcIiBtZXRob2Q9XCJwb3N0XCIgYWN0aW9uPVwiL2kxOG4tc2ltcGxlL1NpbXBsZUkxOG5TZXJ2bGV0XCI+Iik7Ci0JCQlvdXQucHJpbnRsbigiPHRhYmxlPiIpOwotCQkJb3V0LnByaW50bG4oIjx0cj4iKTsKLQkJCW91dC5wcmludGxuKCI8dGQ+PEgzPlBsZWFzZSBlbnRlciB5b3VyIG5hbWU6PC9IMz48L3RkPiIpOwotCQkJb3V0LnByaW50bG4oIjx0ZD4iKTsKLQkJCW91dC5wcmludGxuKCI8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwibmFtZVwiIHNpemU9XCIyMFwiPiIpOwotCQkJb3V0LnByaW50bG4oIjwvdGQ+Iik7Ci0JCQlvdXQucHJpbnRsbigiPC90cj4iKTsKLQkJCW91dC5wcmludGxuKCI8L3RhYmxlPiIpOwotCQkJb3V0LnByaW50bG4oIjxwcmU+Iik7Ci0JCQlvdXQucHJpbnRsbigiPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPVN1Ym1pdD4iKTsKLQkJCW91dC5wcmludGxuKCI8L3ByZT4iKTsKLQkJCW91dC5wcmludGxuKCI8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jaGFyc2V0dmFsIHZhbHVlPSIgKyBjaGFyc2V0dmFsICsgIj4iKTsKLQkJCW91dC5wcmludGxuKCI8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hY3Rpb24gdmFsdWU9IiArIGFjdGlvbiArICI+Iik7Ci0JCQlvdXQucHJpbnRsbigiPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ZnVuYyB2YWx1ZT1leGVjPiIpOwotCQkJb3V0LnByaW50bG4oIjxicj4iKTsKLQkJCW91dC5wcmludGxuKCI8UD48QlI+PEEgSFJFRj1cIi9pMThuLXNpbXBsZVwiPkJhY2sgdG8gc2FtcGxlIGhvbWU8L0E+PC9QPiIpOwotCQkJb3V0LnByaW50bG4oIjwvZm9ybT4iKTsKLQkJCW91dC5wcmludGxuKCI8L2JvZHk+Iik7Ci0JCQlvdXQucHJpbnRsbigiPC9odG1sPiIpOwotCQkJb3V0LmNsb3NlKCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBIdHRwU2Vzc2lvbiBzZXNzaW9uICAgID0gICAgcmVxLmdldFNlc3Npb24odHJ1ZSk7CisgICAgICAgICAgICBzZXNzaW9uLnNldEF0dHJpYnV0ZSgiY2hhcnNldCIsIGNoYXJzZXR2YWwpOworICAgICAgICAgICAgcmVzLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9IiArIGNoYXJzZXR2YWwpOworICAgICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzLmdldFdyaXRlcigpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxodG1sPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoZWFkPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjx0aXRsZT5TZXJ2bGV0IGkxOG4gc2FtcGxlczwvdGl0bGU+PC9oZWFkPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxib2R5Pjxicj4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8UD48Rk9OVCBGQUNFPVwiVGltZXMgTmV3IFJvbWFuXCI+PEZPTlQgU0laRT02PjxCPlNlcnZsZXQgaTE4biBzYW1wbGVzPC9CPjwvRk9OVD48L0ZPTlQ+PC9QPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxmb3JtIG5hbWU9XCJpMThuLXNpbXBsZVwiIG1ldGhvZD1cInBvc3RcIiBhY3Rpb249XCIvaTE4bi1zaW1wbGUvU2ltcGxlSTE4blNlcnZsZXRcIj4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8dGFibGU+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPHRyPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjx0ZD48SDM+UGxlYXNlIGVudGVyIHlvdXIgbmFtZTo8L0gzPjwvdGQ+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPHRkPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJuYW1lXCIgc2l6ZT1cIjIwXCI+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPC90ZD4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8L3RyPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvdGFibGU+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPHByZT4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9U3VibWl0PiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvcHJlPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWNoYXJzZXR2YWwgdmFsdWU9IiArIGNoYXJzZXR2YWwgKyAiPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWFjdGlvbiB2YWx1ZT0iICsgYWN0aW9uICsgIj4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1mdW5jIHZhbHVlPWV4ZWM+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJyPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxQPjxCUj48QSBIUkVGPVwiL2kxOG4tc2ltcGxlXCI+QmFjayB0byBzYW1wbGUgaG9tZTwvQT48L1A+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9mb3JtPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvYm9keT4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8L2h0bWw+Iik7CisgICAgICAgICAgICBvdXQuY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICAvKiogR2V0cyB0aGUgbG9jYWxlIGluZm9ybWF0aW9uIGZyb20gYnJvd3NlciBzZXR0aW5ncyBhbmQgc2V0cyB0aGUgbG9jYWxlIHRvCkBAIC0xMjksMjUgKzEyOSwyNSBAQAogICAgIHByb3RlY3RlZCB2b2lkIGZvcm1hdERhdGUgKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzKQogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7Ci0JCQlTdHJpbmcgbmFtZQkJCQk9CXJlcS5nZXRQYXJhbWV0ZXIoIm5hbWUiKTsKLQkJCVN0cmluZyBjaGFyc2V0dmFsCQk9CXJlcS5nZXRQYXJhbWV0ZXIoImNoYXJzZXR2YWwiKTsKKyAgICAgICAgICAgIFN0cmluZyBuYW1lICAgICAgICAgICAgICAgID0gICAgcmVxLmdldFBhcmFtZXRlcigibmFtZSIpOworICAgICAgICAgICAgU3RyaW5nIGNoYXJzZXR2YWwgICAgICAgID0gICAgcmVxLmdldFBhcmFtZXRlcigiY2hhcnNldHZhbCIpOwogCiAgICAgICAgICAgICAvLyBHZXQncyB0aGUgbG9jYWxlIG9mIHRoZSBicm93c2VyIGZyb20gdGhlIHJlcXVlc3Qgb2JqZWN0Ci0gICAgICAgICAgICBMb2NhbGUgYnJvd3NlckxvY2FsZQk9CXJlcS5nZXRMb2NhbGUoKTsKKyAgICAgICAgICAgIExvY2FsZSBicm93c2VyTG9jYWxlICAgID0gICAgcmVxLmdldExvY2FsZSgpOwogCiAgICAgICAgICAgICAvLyBEZWZhdWx0IGxvY2FsZSBvZiB0aGUgcmVzcG9uc2Ugb2JqZWN0Ci0gICAgICAgICAgICBMb2NhbGUgcmVzTG9jYWxlCQk9CXJlcy5nZXRMb2NhbGUoKTsKLSAgICAgICAgICAgIFN0cmluZyByZXNDaGFyc2V0CQk9CXJlcy5nZXRDaGFyYWN0ZXJFbmNvZGluZygpOworICAgICAgICAgICAgTG9jYWxlIHJlc0xvY2FsZSAgICAgICAgPSAgICByZXMuZ2V0TG9jYWxlKCk7CisgICAgICAgICAgICBTdHJpbmcgcmVzQ2hhcnNldCAgICAgICAgPSAgICByZXMuZ2V0Q2hhcmFjdGVyRW5jb2RpbmcoKTsKIAogICAgICAgICAgICAgLy8gU2V0J3MgdGhlIGJyb3dzZXIncyBsb2NhbGUgdG8gdGhlIHJlc3BvbnNlIG9iamVjdAogICAgICAgICAgICAgcmVzLnNldExvY2FsZShicm93c2VyTG9jYWxlKTsKIAotICAgICAgICAgICAgTG9jYWxlIHJlc0xvY2FsZUFmdGVyCT0JcmVzLmdldExvY2FsZSgpOwotICAgICAgICAgICAgU3RyaW5nIHJlc0NoYXJzZXRBZnRlcgk9CXJlcy5nZXRDaGFyYWN0ZXJFbmNvZGluZygpOworICAgICAgICAgICAgTG9jYWxlIHJlc0xvY2FsZUFmdGVyICAgID0gICAgcmVzLmdldExvY2FsZSgpOworICAgICAgICAgICAgU3RyaW5nIHJlc0NoYXJzZXRBZnRlciAgICA9ICAgIHJlcy5nZXRDaGFyYWN0ZXJFbmNvZGluZygpOwogCiAgICAgICAgICAgICByZXMuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbDsgY2hhcnNldD0iICsgcmVzQ2hhcnNldEFmdGVyKTsKICAgICAgICAgICAgIC8vIE91dHB1dCBzdHJlYW0gZm9yIHRoZSByZXNwb25zZQotICAgICAgICAgICAgamF2YS5pby5QcmludFdyaXRlciBvdXQJPQlyZXMuZ2V0V3JpdGVyKCk7CisgICAgICAgICAgICBqYXZhLmlvLlByaW50V3JpdGVyIG91dCAgICA9ICAgIHJlcy5nZXRXcml0ZXIoKTsKIAogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxodG1sPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoZWFkPjx0aXRsZT5Gb3JtYXR0aW5nIGRhdGUgYXMgcGVyIGJyb3dzZXIncyBsb2NhbGU8L3RpdGxlPjwvaGVhZD4iKTsKQEAgLTE2MSwxOSArMTYxLDE5IEBACiAgICAgICAgICAgICBvdXQucHJpbnRsbigiUmVzcG9uc2UgY2hhcnNldCBhZnRlciBzZXR0aW5nIGl0IGZyb20gcmVxdWVzdCBsb2NhbGU6ICIgKyByZXNDaGFyc2V0QWZ0ZXIgKyAiPGJyPiIpOwogCiAgICAgICAgICAgICAvLyBHZXQgdG9kYXkncyBkYXRlIGFuZCBmb3JtYXRzIGl0IHVzaW5nIHRoZSBicm93c2VyIGxvY2FsZQotICAgICAgICAgICAgamF2YS51dGlsLkRhdGUgdG9kYXkJPQluZXcgamF2YS51dGlsLkRhdGUoKTsKLSAgICAgICAgICAgIERhdGVGb3JtYXQgZm9ybWF0dGVyCT0JRGF0ZUZvcm1hdC5nZXREYXRlSW5zdGFuY2UoRGF0ZUZvcm1hdC5GVUxMLCBicm93c2VyTG9jYWxlKTsKLSAgICAgICAgICAgIFN0cmluZyBmb3JtYXR0ZWREYXRlCT0JZm9ybWF0dGVyLmZvcm1hdCh0b2RheSk7CisgICAgICAgICAgICBqYXZhLnV0aWwuRGF0ZSB0b2RheSAgICA9ICAgIG5ldyBqYXZhLnV0aWwuRGF0ZSgpOworICAgICAgICAgICAgRGF0ZUZvcm1hdCBmb3JtYXR0ZXIgICAgPSAgICBEYXRlRm9ybWF0LmdldERhdGVJbnN0YW5jZShEYXRlRm9ybWF0LkZVTEwsIGJyb3dzZXJMb2NhbGUpOworICAgICAgICAgICAgU3RyaW5nIGZvcm1hdHRlZERhdGUgICAgPSAgICBmb3JtYXR0ZXIuZm9ybWF0KHRvZGF5KTsKIAogICAgICAgICAgICAgb3V0LnByaW50bG4oIlRvZGF5J3MgZGF0ZSBmb3IgIiArIHJlc0xvY2FsZUFmdGVyICsgIiBpcyA6ICIgKyBmb3JtYXR0ZWREYXRlICsgIjxicj4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8YnI+Iik7Ci0JCQlvdXQucHJpbnRsbigiPFA+PEJSPjxBIEhSRUY9XCIvaTE4bi1zaW1wbGVcIj5CYWNrIHRvIHNhbXBsZSBob21lPC9BPjwvUD4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8UD48QlI+PEEgSFJFRj1cIi9pMThuLXNpbXBsZVwiPkJhY2sgdG8gc2FtcGxlIGhvbWU8L0E+PC9QPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvYm9keT48L2h0bWw+Iik7CiAgICAgICAgICAgICBvdXQuY2xvc2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLQl9CisgICAgfQogCiAgICAgLyoqIFNldHMgcmVxdWVzdCdzIGNoYXJhY3RlciBlbmNvZGluZyB1c2luZyBzZXRDaGFyYWN0ZXJFbmNvZGluZyBtZXRob2Qgb2YgSHR0cFNlcnZsZXRSZXF1ZXN0IGludGVyZmFjZS4KICAgICAgKiAgVGhlIHNldENoYXJhY3RlckVuY29kaW5nIG1ldGhvZCBpcyB1c2VkIHRvIGluZm9ybSB0aGUgc2VydmxldCBjb250YWluZXIgdG8gcmVhZCByZXF1ZXN0IHBhcmFtZXRlcnMgdXNpbmcgc3BlY2lmaWVkIGVuY29kaW5nLgpAQCAtMTgzLDI0ICsxODMsMjQgQEAKICAgICBwcm90ZWN0ZWQgdm9pZCBzZXRDaGFyRW5jb2RpbmcgKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzKQogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7Ci0JCQlTdHJpbmcgbmFtZQkJCT0JcmVxLmdldFBhcmFtZXRlcigibmFtZSIpOwotCQkJU3RyaW5nIGNoYXJzZXR2YWwJPQlyZXEuZ2V0UGFyYW1ldGVyKCJjaGFyc2V0dmFsIik7Ci0JCQlyZXMuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbDsgY2hhcnNldD0iICsgY2hhcnNldHZhbCk7CisgICAgICAgICAgICBTdHJpbmcgbmFtZSAgICAgICAgICAgID0gICAgcmVxLmdldFBhcmFtZXRlcigibmFtZSIpOworICAgICAgICAgICAgU3RyaW5nIGNoYXJzZXR2YWwgICAgPSAgICByZXEuZ2V0UGFyYW1ldGVyKCJjaGFyc2V0dmFsIik7CisgICAgICAgICAgICByZXMuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbDsgY2hhcnNldD0iICsgY2hhcnNldHZhbCk7CiAKLQkJCS8vIE91dHB1dCBzdHJlYW0gZm9yIHRoZSByZXNwb25zZQotCQkJUHJpbnRXcml0ZXIgb3V0CQk9CXJlcy5nZXRXcml0ZXIoKTsKKyAgICAgICAgICAgIC8vIE91dHB1dCBzdHJlYW0gZm9yIHRoZSByZXNwb25zZQorICAgICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ICAgICAgICA9ICAgIHJlcy5nZXRXcml0ZXIoKTsKIAotCQkJb3V0LnByaW50bG4oIjxodG1sPiIpOwotCQkJb3V0LnByaW50bG4oIjxoZWFkPjx0aXRsZT5TZXR0aW5nIHJlcXVlc3Qgb2JqZWN0J3MgY2hhcmFjdGVyIGVuY29kaW5nIHRvICIgKyBjaGFyc2V0dmFsICsgIjwvdGl0bGU+PC9oZWFkPiIpOwotCQkJb3V0LnByaW50bG4oIjxib2R5PiIpOwotCQkJb3V0LnByaW50bG4oIjxicj48SDM+IFRoZSBuYW1lIGVudGVyZWQgd2FzIDogIiArIG5hbWUgKyAiIGFuZCB0aGUgYXNzb2NpYXRlZCBlbmNvZGluZyB3YXMgOiAiICsgY2hhcnNldHZhbCArICI8L0gzPjxicj4iKTsKLQkJCW91dC5wcmludGxuKCI8YnI+Iik7Ci0JCQlvdXQucHJpbnRsbigiPFA+PEJSPjxBIEhSRUY9XCIvaTE4bi1zaW1wbGVcIj5CYWNrIHRvIHNhbXBsZSBob21lPC9BPjwvUD4iKTsKLQkJCW91dC5wcmludGxuKCI8L2JvZHk+PC9odG1sPiIpOwotCQkJb3V0LmNsb3NlKCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPGh0bWw+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPGhlYWQ+PHRpdGxlPlNldHRpbmcgcmVxdWVzdCBvYmplY3QncyBjaGFyYWN0ZXIgZW5jb2RpbmcgdG8gIiArIGNoYXJzZXR2YWwgKyAiPC90aXRsZT48L2hlYWQ+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJvZHk+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJyPjxIMz4gVGhlIG5hbWUgZW50ZXJlZCB3YXMgOiAiICsgbmFtZSArICIgYW5kIHRoZSBhc3NvY2lhdGVkIGVuY29kaW5nIHdhcyA6ICIgKyBjaGFyc2V0dmFsICsgIjwvSDM+PGJyPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxicj4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8UD48QlI+PEEgSFJFRj1cIi9pMThuLXNpbXBsZVwiPkJhY2sgdG8gc2FtcGxlIGhvbWU8L0E+PC9QPiIpOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvYm9keT48L2h0bWw+Iik7CisgICAgICAgICAgICBvdXQuY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICAvKiogSW5jbHVkZXMgYSBzZXJ2bGV0IHVzaW5nIFJlcXVlc3REaXNwYXRjaGVyJ3MgaW5jbHVkZSBtZXRob2QuIEhlcmUgdGhlIGRhdGEgZGlzcGxheSBiZWhhdmlvdXIKQEAgLTIxMiwzMCArMjEyLDMwIEBACiAgICAgcHJvdGVjdGVkIHZvaWQgaW5jbHVkZVNlcnZsZXQgKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzKQogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7Ci0JCQlTdHJpbmcgbmFtZSA9IHJlcS5nZXRQYXJhbWV0ZXIoIm5hbWUiKTsKLQkJCVN0cmluZyBjaGFyc2V0dmFsID0gcmVxLmdldFBhcmFtZXRlcigiY2hhcnNldHZhbCIpOwotCQkJcmVzLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9IiArIGNoYXJzZXR2YWwpOworICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSByZXEuZ2V0UGFyYW1ldGVyKCJuYW1lIik7CisgICAgICAgICAgICBTdHJpbmcgY2hhcnNldHZhbCA9IHJlcS5nZXRQYXJhbWV0ZXIoImNoYXJzZXR2YWwiKTsKKyAgICAgICAgICAgIHJlcy5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sOyBjaGFyc2V0PSIgKyBjaGFyc2V0dmFsKTsKIAotCQkJLy8gT3V0cHV0IHN0cmVhbSBmb3IgdGhlIHJlc3BvbnNlCi0JCQlQcmludFdyaXRlciBvdXQgPSByZXMuZ2V0V3JpdGVyKCk7CisgICAgICAgICAgICAvLyBPdXRwdXQgc3RyZWFtIGZvciB0aGUgcmVzcG9uc2UKKyAgICAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlcy5nZXRXcml0ZXIoKTsKIAotCQkJb3V0LnByaW50bG4oIjxodG1sPiIpOwotCQkJb3V0LnByaW50bG4oIjxoZWFkPjx0aXRsZT5JbmNsdWRpbmcgYW5vdGhlciBzZXJ2bGV0IGZyb20gYSBzZXJ2bGV0PC90aXRsZT48L2hlYWQ+Iik7Ci0JCQlvdXQucHJpbnRsbigiPGJvZHk+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPGh0bWw+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPGhlYWQ+PHRpdGxlPkluY2x1ZGluZyBhbm90aGVyIHNlcnZsZXQgZnJvbSBhIHNlcnZsZXQ8L3RpdGxlPjwvaGVhZD4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8Ym9keT4iKTsKIAotCQkJUmVxdWVzdERpc3BhdGNoZXIgZGlzcGF0Y2hlcjsKLQkJCWRpc3BhdGNoZXIgPSBnZXRTZXJ2bGV0Q29udGV4dCgpLmdldFJlcXVlc3REaXNwYXRjaGVyKCIvSW5jbHVkZWRTZXJ2bGV0Iik7Ci0JCQlkaXNwYXRjaGVyLmluY2x1ZGUocmVxLCByZXMpOworICAgICAgICAgICAgUmVxdWVzdERpc3BhdGNoZXIgZGlzcGF0Y2hlcjsKKyAgICAgICAgICAgIGRpc3BhdGNoZXIgPSBnZXRTZXJ2bGV0Q29udGV4dCgpLmdldFJlcXVlc3REaXNwYXRjaGVyKCIvSW5jbHVkZWRTZXJ2bGV0Iik7CisgICAgICAgICAgICBkaXNwYXRjaGVyLmluY2x1ZGUocmVxLCByZXMpOwogCi0JCQlvdXQucHJpbnRsbigiPGJyPk5hbWUgZnJvbSB0aGUgaW5jbHVkaW5nIHNlcnZsZXQ6ICIgKyBuYW1lICsgIjxicj4iKTsKLQkJCW91dC5wcmludGxuKCI8YnI+Iik7Ci0JCQlvdXQucHJpbnRsbigiPFA+PEJSPjxBIEhSRUY9XCIvaTE4bi1zaW1wbGVcIj5CYWNrIHRvIHNhbXBsZSBob21lPC9BPjwvUD4iKTsKLQkJCW91dC5wcmludGxuKCI8L2JvZHk+PC9odG1sPiIpOwotCQkJb3V0LmNsb3NlKCk7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJyPk5hbWUgZnJvbSB0aGUgaW5jbHVkaW5nIHNlcnZsZXQ6ICIgKyBuYW1lICsgIjxicj4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8YnI+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPFA+PEJSPjxBIEhSRUY9XCIvaTE4bi1zaW1wbGVcIj5CYWNrIHRvIHNhbXBsZSBob21lPC9BPjwvUD4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8L2JvZHk+PC9odG1sPiIpOworICAgICAgICAgICAgb3V0LmNsb3NlKCk7CiAKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICAvKiogRm9yd2FyZHMgYSBzZXJ2bGV0IHVzaW5nIFJlcXVlc3REaXNwYXRjaGVyJ3MgZm9yd2FyZCBtZXRob2QuIEhlcmUgdGhlIGRhdGEgZGlzcGxheSBiZWhhdmlvdXIKQEAgLTI0OCwyNCArMjQ4LDI0IEBACiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKIAogICAgICAgICB0cnkgewotCQkJU3RyaW5nIG5hbWUJCQk9IHJlcS5nZXRQYXJhbWV0ZXIoIm5hbWUiKTsKLQkJCVN0cmluZyBjaGFyc2V0dmFsCT0gcmVxLmdldFBhcmFtZXRlcigiY2hhcnNldHZhbCIpOwotCQkJcmVzLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9IiArIGNoYXJzZXR2YWwpOworICAgICAgICAgICAgU3RyaW5nIG5hbWUgICAgICAgICAgICA9IHJlcS5nZXRQYXJhbWV0ZXIoIm5hbWUiKTsKKyAgICAgICAgICAgIFN0cmluZyBjaGFyc2V0dmFsICAgID0gcmVxLmdldFBhcmFtZXRlcigiY2hhcnNldHZhbCIpOworICAgICAgICAgICAgcmVzLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9IiArIGNoYXJzZXR2YWwpOwogCi0JCQkvLyBPdXRwdXQgc3RyZWFtIGZvciB0aGUgcmVzcG9uc2UKLQkJCVByaW50V3JpdGVyIG91dAkJPSByZXMuZ2V0V3JpdGVyKCk7CisgICAgICAgICAgICAvLyBPdXRwdXQgc3RyZWFtIGZvciB0aGUgcmVzcG9uc2UKKyAgICAgICAgICAgIFByaW50V3JpdGVyIG91dCAgICAgICAgPSByZXMuZ2V0V3JpdGVyKCk7CiAKLQkJCW91dC5wcmludGxuKCI8aHRtbD4iKTsKLQkJCW91dC5wcmludGxuKCI8aGVhZD48dGl0bGU+SW5jbHVkaW5nIGFub3RoZXIgc2VydmxldCBmcm9tIGEgc2VydmxldDwvdGl0bGU+PC9oZWFkPiIpOwotCQkJb3V0LnByaW50bG4oIjxib2R5PiIpOwotCQkJb3V0LnByaW50bG4oIjxicj5UaGUgbmFtZSBmcm9tIGZvcndhcmRpbmcgc2VydmxldCA6ICIgKyBuYW1lICk7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPGh0bWw+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPGhlYWQ+PHRpdGxlPkluY2x1ZGluZyBhbm90aGVyIHNlcnZsZXQgZnJvbSBhIHNlcnZsZXQ8L3RpdGxlPjwvaGVhZD4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8Ym9keT4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8YnI+VGhlIG5hbWUgZnJvbSBmb3J3YXJkaW5nIHNlcnZsZXQgOiAiICsgbmFtZSApOwogCi0JCQlSZXF1ZXN0RGlzcGF0Y2hlciBkaXNwYXRjaGVyOwotCQkJZGlzcGF0Y2hlciA9IGdldFNlcnZsZXRDb250ZXh0KCkuZ2V0UmVxdWVzdERpc3BhdGNoZXIoIi9Gb3J3YXJkZWRTZXJ2bGV0Iik7Ci0JCQlkaXNwYXRjaGVyLmZvcndhcmQocmVxLCByZXMpOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQorICAgICAgICAgICAgUmVxdWVzdERpc3BhdGNoZXIgZGlzcGF0Y2hlcjsKKyAgICAgICAgICAgIGRpc3BhdGNoZXIgPSBnZXRTZXJ2bGV0Q29udGV4dCgpLmdldFJlcXVlc3REaXNwYXRjaGVyKCIvRm9yd2FyZGVkU2VydmxldCIpOworICAgICAgICAgICAgZGlzcGF0Y2hlci5mb3J3YXJkKHJlcSwgcmVzKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICAvKiogU2VuZCBlcnJvciBtZXNzYWdlcyB1c2luZyByZXNwb25zZSdzIHNlbmRFcnJvciBtZXRob2QuIFRoZSBzZW5kRXJyb3IgbWV0aG9kIHNlbmRzIG11bHRpIGJ5dGUgZXJyb3IgbWVzc2FnZXMgY29ycmVjdGx5CkBAIC0yNzYsMTYgKzI3NiwxNiBAQAogICAgIHByb3RlY3RlZCB2b2lkIHNlbmRFcnJvck1lc3NhZ2UgKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzKQogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7Ci0JCQlTdHJpbmcgbmFtZQkJCT0JcmVxLmdldFBhcmFtZXRlcigibmFtZSIpOwotCQkJU3RyaW5nIGNoYXJzZXR2YWwJPQlyZXEuZ2V0UGFyYW1ldGVyKCJjaGFyc2V0dmFsIik7Ci0JCQlyZXMuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbDsgY2hhcnNldD0iICsgY2hhcnNldHZhbCk7Ci0JCQlyZXMuc2VuZEVycm9yKDQwNCwgIkkxOG4gZXJyb3IgbWVzc2FnZSBmcm9tIHNlcnZsZXQgIisgbmFtZSk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9CisgICAgICAgICAgICBTdHJpbmcgbmFtZSAgICAgICAgICAgID0gICAgcmVxLmdldFBhcmFtZXRlcigibmFtZSIpOworICAgICAgICAgICAgU3RyaW5nIGNoYXJzZXR2YWwgICAgPSAgICByZXEuZ2V0UGFyYW1ldGVyKCJjaGFyc2V0dmFsIik7CisgICAgICAgICAgICByZXMuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbDsgY2hhcnNldD0iICsgY2hhcnNldHZhbCk7CisgICAgICAgICAgICByZXMuc2VuZEVycm9yKDQwNCwgIkkxOG4gZXJyb3IgbWVzc2FnZSBmcm9tIHNlcnZsZXQgIisgbmFtZSk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CiAgICAgfQogCi0JLyoqIExvYWQgcmVzb3VyY2UgYnVuZGxlIGJhc2VkIG9uIGNsaWVudCdzIGxvY2FsZS4gSWYgdGhlcmUgaXMgbm8gcmVzb3VyY2UgYnVuZGxlIGF2YWlsYWJsZSwgdGhlIGRlZmF1bHQgcmVzb3VyY2UgYnVuZGxlCisgICAgLyoqIExvYWQgcmVzb3VyY2UgYnVuZGxlIGJhc2VkIG9uIGNsaWVudCdzIGxvY2FsZS4gSWYgdGhlcmUgaXMgbm8gcmVzb3VyY2UgYnVuZGxlIGF2YWlsYWJsZSwgdGhlIGRlZmF1bHQgcmVzb3VyY2UgYnVuZGxlCiAgICAgICogIHdpbGwgYmUgcGlja2VkIHVwCiAgICAgICogIEBwYXJhbSByZXF1ZXN0IHNlcnZsZXQgcmVxdWVzdAogICAgICAqICBAcGFyYW0gcmVzcG9uc2Ugc2VydmxldCByZXNwb25zZQpAQCAtMjkzLDQzICsyOTMsNDMgQEAKICAgICBwcm90ZWN0ZWQgdm9pZCB1c2VSZXNvdXJjZUJ1bmRsZSAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpCiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKLQkJCVN0cmluZyBuYW1lCQkJPQlyZXEuZ2V0UGFyYW1ldGVyKCJuYW1lIik7Ci0JCQlTdHJpbmcgY2hhcnNldHZhbAk9CXJlcS5nZXRQYXJhbWV0ZXIoImNoYXJzZXR2YWwiKTsKLQkJCXJlcy5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sOyBjaGFyc2V0PSIgKyBjaGFyc2V0dmFsKTsKLQkJCVJlc291cmNlQnVuZGxlIHJiCT0JbnVsbDsKLQkJCXJiCQkJCQk9CVJlc291cmNlQnVuZGxlLmdldEJ1bmRsZSgiTG9jYWxTdHJpbmdzIixyZXEuZ2V0TG9jYWxlKCkpOwotCQkJU3RyaW5nIG1zZzsKLQkJCVByaW50V3JpdGVyIG91dAkJPQlyZXMuZ2V0V3JpdGVyKCk7CisgICAgICAgICAgICBTdHJpbmcgbmFtZSAgICAgICAgICAgID0gICAgcmVxLmdldFBhcmFtZXRlcigibmFtZSIpOworICAgICAgICAgICAgU3RyaW5nIGNoYXJzZXR2YWwgICAgPSAgICByZXEuZ2V0UGFyYW1ldGVyKCJjaGFyc2V0dmFsIik7CisgICAgICAgICAgICByZXMuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbDsgY2hhcnNldD0iICsgY2hhcnNldHZhbCk7CisgICAgICAgICAgICBSZXNvdXJjZUJ1bmRsZSByYiAgICA9ICAgIG51bGw7CisgICAgICAgICAgICByYiAgICAgICAgICAgICAgICAgICAgPSAgICBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoIkxvY2FsU3RyaW5ncyIscmVxLmdldExvY2FsZSgpKTsKKyAgICAgICAgICAgIFN0cmluZyBtc2c7CisgICAgICAgICAgICBQcmludFdyaXRlciBvdXQgICAgICAgID0gICAgcmVzLmdldFdyaXRlcigpOwogCi0JCQlvdXQucHJpbnRsbigiPGh0bWw+Iik7Ci0JCQlvdXQucHJpbnRsbigiPGhlYWQ+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPGh0bWw+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPGhlYWQ+Iik7CiAKLQkJCXRyeSB7Ci0JCQkJbXNnCQkJCT0JcmIuZ2V0U3RyaW5nICgidGl0bGUiKTsKLQkJCQlvdXQucHJpbnRsbigiPHRpdGxlPiIgKyBtc2cgKyAiPC90aXRsZT4iKTsKLQkJCQlvdXQucHJpbnRsbigiPC9oZWFkPiIpOwotCQkJCW91dC5wcmludGxuKCI8Ym9keT4iKTsKLQkJCQlvdXQucHJpbnRsbigiPGJyPjxIMT4gSGVsbG8gIiArIG5hbWUgKyAiLCB0aGUgZm9sbG93aW5nIG1lc3NhZ2VzIGFyZSBkaXNwbGF5ZWQgZnJvbSBhIHJlc291cmNlIGJ1bmRsZTwvSDE+Iik7Ci0JCQkJbXNnID0gcmIuZ2V0U3RyaW5nICgibXNnIik7Ci0JCQkJb3V0LnByaW50bG4oIjxicj48YnI+PEgyPiIgKyBtc2cgKyAiPC9IMj4iKTsKLQkJCQltc2cgPSByYi5nZXRTdHJpbmcgKCJ0aGFua3MiKTsKLQkJCQlvdXQucHJpbnRsbigiPGJyPjxicj48SDM+IiArIG1zZyArICI8L0gzPiIpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBtc2cgICAgICAgICAgICAgICAgPSAgICByYi5nZXRTdHJpbmcgKCJ0aXRsZSIpOworICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8dGl0bGU+IiArIG1zZyArICI8L3RpdGxlPiIpOworICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L2hlYWQ+Iik7CisgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxib2R5PiIpOworICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8YnI+PEgxPiBIZWxsbyAiICsgbmFtZSArICIsIHRoZSBmb2xsb3dpbmcgbWVzc2FnZXMgYXJlIGRpc3BsYXllZCBmcm9tIGEgcmVzb3VyY2UgYnVuZGxlPC9IMT4iKTsKKyAgICAgICAgICAgICAgICBtc2cgPSByYi5nZXRTdHJpbmcgKCJtc2ciKTsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJyPjxicj48SDI+IiArIG1zZyArICI8L0gyPiIpOworICAgICAgICAgICAgICAgIG1zZyA9IHJiLmdldFN0cmluZyAoInRoYW5rcyIpOworICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8YnI+PGJyPjxIMz4iICsgbXNnICsgIjwvSDM+Iik7CiAKLQkJCX0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgIAl9Ci0JCQlvdXQucHJpbnRsbigiPGJyPiIpOwotCQkJb3V0LnByaW50bG4oIjxQPjxCUj48QSBIUkVGPVwiL2kxOG4tc2ltcGxlXCI+QmFjayB0byBzYW1wbGUgaG9tZTwvQT48L1A+Iik7Ci0gICAgICAgIAlvdXQucHJpbnRsbigiPC9ib2R5PjwvaHRtbD4iKTsKLSAgICAgICAgCW91dC5jbG9zZSgpOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQorICAgICAgICAgICAgfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8YnI+Iik7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPFA+PEJSPjxBIEhSRUY9XCIvaTE4bi1zaW1wbGVcIj5CYWNrIHRvIHNhbXBsZSBob21lPC9BPjwvUD4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8L2JvZHk+PC9odG1sPiIpOworICAgICAgICAgICAgb3V0LmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CiAgICAgfQogCi0JLyoqIEZvcndhcmRzIHJlcXVlc3QgZnJvbSBzZXJ2bGV0IHRvIGpzcCB1c2luZyBSZXF1ZXN0RGlzcGF0Y2hlcidzIGZvcndhcmQgbWV0aG9kLiBIZXJlIHRoZSBkYXRhIGRpc3BsYXkgYmVoYXZpb3VyCisgICAgLyoqIEZvcndhcmRzIHJlcXVlc3QgZnJvbSBzZXJ2bGV0IHRvIGpzcCB1c2luZyBSZXF1ZXN0RGlzcGF0Y2hlcidzIGZvcndhcmQgbWV0aG9kLiBIZXJlIHRoZSBkYXRhIGRpc3BsYXkgYmVoYXZpb3VyCiAgICAgICogIGNoYW5nZXMgYmFzZWQgb24gdGhlIGNvbnRlbnQgdHlwZSBzZXQuIElmIHRoZSBmb3J3YXJkZWQganNwIHNldHMgdGhlIGNvbnRlbnQgdHlwZSB0byBhIGRpZmZlcmVudCB2YWx1ZSB0aGVuIHRoZSBuZXcgY29udGVudCB0eXBlCiAgICAgICogIHNob3VsZCBiZSBzZXQgZm9yIHRoZSBvdXRwdXQgc3RyZWFtCiAgICAgICogIEBwYXJhbSByZXF1ZXN0IHNlcnZsZXQgcmVxdWVzdApAQCAtMzM4LDEyICszMzgsMTIgQEAKICAgICBwcm90ZWN0ZWQgdm9pZCBmb3J3YXJkSnNwIChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlcykKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICB0cnkgewotCQkJUmVxdWVzdERpc3BhdGNoZXIgZGlzcGF0Y2hlcjsKLQkJCWRpc3BhdGNoZXIgPSBnZXRTZXJ2bGV0Q29udGV4dCgpLmdldFJlcXVlc3REaXNwYXRjaGVyKCIvRm9yd2FyZGVkSnNwLmpzcCIpOwotICAgICAgCQlkaXNwYXRjaGVyLmZvcndhcmQocmVxLCByZXMpOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQorICAgICAgICAgICAgUmVxdWVzdERpc3BhdGNoZXIgZGlzcGF0Y2hlcjsKKyAgICAgICAgICAgIGRpc3BhdGNoZXIgPSBnZXRTZXJ2bGV0Q29udGV4dCgpLmdldFJlcXVlc3REaXNwYXRjaGVyKCIvRm9yd2FyZGVkSnNwLmpzcCIpOworICAgICAgICAgICAgICBkaXNwYXRjaGVyLmZvcndhcmQocmVxLCByZXMpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIC8qKiBIYW5kbGVzIHRoZSBIVFRQIDxjb2RlPkdFVDwvY29kZT4gbWV0aG9kLgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbWFuaWZlc3RDbGFzc1BhdGgvbWlzYy9zYW1wbGVzL2kxOG4vc2ltcGxlL3NlcnZsZXQvc2FtcGxlYmVhbi9KYXZhVXNlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbWFuaWZlc3RDbGFzc1BhdGgvbWlzYy9zYW1wbGVzL2kxOG4vc2ltcGxlL3NlcnZsZXQvc2FtcGxlYmVhbi9KYXZhVXNlQmVhbi5qYXZhCmluZGV4IGM5ODU3ZjkuLjc4ZGM5ZmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL21hbmlmZXN0Q2xhc3NQYXRoL21pc2Mvc2FtcGxlcy9pMThuL3NpbXBsZS9zZXJ2bGV0L3NhbXBsZWJlYW4vSmF2YVVzZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9tYW5pZmVzdENsYXNzUGF0aC9taXNjL3NhbXBsZXMvaTE4bi9zaW1wbGUvc2VydmxldC9zYW1wbGViZWFuL0phdmFVc2VCZWFuLmphdmEKQEAgLTIzLDcgKzIzLDcgQEAKIC8qKgogICogU2ltcGxlIEphdmEgQmVhbiB1c2VkIHRvIHNldC9nZXQgbmFtZSBhbmQgZ3JlZXRpbmcgbWVzc2FnZXMgZnJvbSBhIGpzcAogICogQGF1dGhvciAgQ2hhbmQgQmFzaGEKLSAqIEB2ZXJzaW9uCTEuMAorICogQHZlcnNpb24gICAgMS4wCiAgKi8KIHB1YmxpYyBjbGFzcyBKYXZhVXNlQmVhbiB7CiAKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICB9CiAKLQkvKiogR2V0cyB0aGUgbmFtZSB0aGF0IHdhcyBzZXQgdXNpbmcgc2V0TmFtZShTdHJpbmcgbmFtZSkgbWV0aG9kIG9mIHRoaXMgY2xhc3MKKyAgICAvKiogR2V0cyB0aGUgbmFtZSB0aGF0IHdhcyBzZXQgdXNpbmcgc2V0TmFtZShTdHJpbmcgbmFtZSkgbWV0aG9kIG9mIHRoaXMgY2xhc3MKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CiAgICAgICAgIHJldHVybiBuYW1lOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbWFuaWZlc3RDbGFzc1BhdGgvd2FyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL21hbmlmZXN0Q2xhc3NQYXRoL3dhci9idWlsZC54bWwKaW5kZXggZGFhOThiNi4uODVjZTgyNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvbWFuaWZlc3RDbGFzc1BhdGgvd2FyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci9tYW5pZmVzdENsYXNzUGF0aC93YXIvYnVpbGQueG1sCkBAIC0yMywzMSArMjMsMzEgQEAKIAogPHByb2plY3QgbmFtZT0iaTE4bi1zaW1wbGUiIGRlZmF1bHQ9ImFsbCIgYmFzZWRpcj0iLiI+CiAKLQkmY29tbW9uQnVpbGQ7CisgICAgJmNvbW1vbkJ1aWxkOwogICAgIDxwcm9wZXJ0eSBuYW1lPSJhcmNoaXZlZGlyIiB2YWx1ZT0iJHtidWlsZH0vYXJjaGl2ZXMiLz4KIAogICAgICAgICA8dGFyZ2V0IG5hbWU9InByZXBhcmUiIGRlcGVuZHM9ImluaXQiPgogICAgICAgICAgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGR9IiAvPgogICAgICAgICA8L3RhcmdldD4KLQkKLQk8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9InByZXBhcmUiLz4KLQkKLQk8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIiBkZXBlbmRzPSJjb21waWxlIj4KLQkJPGNvcHkgZmlsZT0iLi4vZGVzY3JpcHRvci93ZWIueG1sIiB0b2Rpcj0iJHtidWlsZH0vV0VCLUlORiIvPgotCQk8Y29weSBmaWxlPSIuLi9kZXNjcmlwdG9yL3N1bi13ZWIueG1sIiB0b2Rpcj0iJHtidWlsZH0vV0VCLUlORiIgCisKKyAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9InByZXBhcmUiLz4KKworICAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUiIGRlcGVuZHM9ImNvbXBpbGUiPgorICAgICAgICA8Y29weSBmaWxlPSIuLi9kZXNjcmlwdG9yL3dlYi54bWwiIHRvZGlyPSIke2J1aWxkfS9XRUItSU5GIi8+CisgICAgICAgIDxjb3B5IGZpbGU9Ii4uL2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwiIHRvZGlyPSIke2J1aWxkfS9XRUItSU5GIgogICAgICAgICAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotCQk8Y29weSB0b2Rpcj0iJHtidWlsZH0vV0VCLUlORi90bGRzIj4KKyAgICAgICAgPGNvcHkgdG9kaXI9IiR7YnVpbGR9L1dFQi1JTkYvdGxkcyI+CiAgICAgICAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9InRsZHMiLz4KICAgICAgICAgICAgICAgICA8L2NvcHk+CiAgICAgICAgICAgICAgICAgPGNvcHkgdG9kaXI9IiR7YnVpbGR9Ij4KICAgICAgICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iZG9jcm9vdCIgaW5jbHVkZXM9IiouanNwLCAqLmh0bWwiLz4KICAgICAgICAgICAgICAgICA8L2NvcHk+Ci0JCTxqYXIgZGVzdGZpbGU9IiR7YXJjaGl2ZWRpcn0vaTE4bi1zaW1wbGUud2FyIiAKKyAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthcmNoaXZlZGlyfS9pMThuLXNpbXBsZS53YXIiCiAgICAgICAgICAgICAgICAgICAgICBtYW5pZmVzdD0iLi4vbWFuaWZlc3QvTUFOSUZFU1QuTUYiCiAgICAgICAgICAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkfSIvPgotCTwvdGFyZ2V0PgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCIgZGVwZW5kcz0iYXNzZW1ibGUiPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0icHJpdmF0ZS1hbGwiIGRlcGVuZHM9ImFzc2VtYmxlIj4KKyAgICA8L3RhcmdldD4KIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvdW5pcXVlY3IvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvdW5pcXVlY3IvYnVpbGQueG1sCmluZGV4IGNjMzUwYWUuLjUxZTI4YmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL3VuaXF1ZWNyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci91bmlxdWVjci9idWlsZC54bWwKQEAgLTEzMyw3ICsxMzMsNyBAQAogICAgICAgICA8IS0tIGNyZWF0ZS1hcHAtcmVmIHRvIGNsdXN0ZXIgLS0+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tbW9uLnJ1bi5hc2FkbWluIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIKLSAgICAgICAgICAgICAgICAgICB2YWx1ZT0iY3JlYXRlLWFwcGxpY2F0aW9uLXJlZiAtLXBvcnQgJHthZG1pbi5wb3J0fSAtLXVzZXIgJHthZG1pbi51c2VyfSAtLXBhc3N3b3JkZmlsZSAke3Bhc3N3b3JkRmlsZX0gLS10YXJnZXQgJHt0ZXN0Q2x1c3Rlcn0gJHt0ZXN0TmFtZTJ9Ii8+ICAgICAgCisgICAgICAgICAgICAgICAgICAgdmFsdWU9ImNyZWF0ZS1hcHBsaWNhdGlvbi1yZWYgLS1wb3J0ICR7YWRtaW4ucG9ydH0gLS11c2VyICR7YWRtaW4udXNlcn0gLS1wYXNzd29yZGZpbGUgJHtwYXNzd29yZEZpbGV9IC0tdGFyZ2V0ICR7dGVzdENsdXN0ZXJ9ICR7dGVzdE5hbWUyfSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL3dzdG9lamIvYXBwY2xpZW50L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL3dzdG9lamIvYXBwY2xpZW50L2J1aWxkLnhtbAppbmRleCA2NGZjN2VhLi45MDQ1NGUzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci93c3RvZWpiL2FwcGNsaWVudC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvd3N0b2VqYi9hcHBjbGllbnQvYnVpbGQueG1sCkBAIC0yMCwyOSArMjAsMjkgQEAKIAogPCFFTlRJVFkgY29tbW9uQnVpbGQgU1lTVEVNICIuLy4uLy4uLy4uL2NvbmZpZy9jb21tb24ueG1sIj4KIF0+Ci0gCisKIDxwcm9qZWN0IG5hbWU9IndzdG9lamIiIGRlZmF1bHQ9ImFsbCIgYmFzZWRpcj0iLiI+CiAKLSAJJmNvbW1vbkJ1aWxkOworICAgICAmY29tbW9uQnVpbGQ7CiAgICAgPHByb3BlcnR5IG5hbWU9ImFyY2hpdmVkaXIiIHZhbHVlPSIke2J1aWxkfS9hcmNoaXZlcyIvPgogCi0JPHRhcmdldCBuYW1lPSJwcmVwYXJlIiBkZXBlbmRzPSJpbml0Ij4KKyAgICA8dGFyZ2V0IG5hbWU9InByZXBhcmUiIGRlcGVuZHM9ImluaXQiPgogICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkfSIgLz4KICAgICAgICAgPG1rZGlyIGRpcj0iJHthcmNoaXZlZGlyfSIgLz4KICAgICAgICAgPGNvcHkgZmlsZT0iV2ViU2VydmljZVRvRWpiLndzZGwiIHRvZGlyPSIke2J1aWxkfS9NRVRBLUlORi93c2RsIi8+CiAgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7V1NDT01QSUxFfSIgZmFpbG9uZXJyb3I9InRydWUiID4KLQkJICAgIDxhcmcgbGluZT0iLWltcG9ydCAtZCAke2J1aWxkfSAtY2xhc3NwYXRoICR7YnVpbGR9IC1tYXBwaW5nICR7YnVpbGR9L21hcHBpbmcueG1sIHdzY29tcGlsZV9jb25maWcueG1sIi8+CisgICAgICAgICAgICA8YXJnIGxpbmU9Ii1pbXBvcnQgLWQgJHtidWlsZH0gLWNsYXNzcGF0aCAke2J1aWxkfSAtbWFwcGluZyAke2J1aWxkfS9tYXBwaW5nLnhtbCB3c2NvbXBpbGVfY29uZmlnLnhtbCIvPgogICAgICAgICA8L2V4ZWM+Ci0JPC90YXJnZXQ+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9InByZXBhcmUiPgotCQk8amF2YWMgc3JjZGlyPSJ3c3RvZWpiIiBkZXN0ZGlyPSIke2J1aWxkfSI+CisgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJwcmVwYXJlIj4KKyAgICAgICAgPGphdmFjIHNyY2Rpcj0id3N0b2VqYiIgZGVzdGRpcj0iJHtidWlsZH0iPgogICA8Y2xhc3NwYXRoIHJlZmlkPSJnZnYzLmNsYXNzcGF0aCIvPgogICAgICAgICAgPC9qYXZhYz4KIAotCTwvdGFyZ2V0PgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJhc3NlbWJsZSIgZGVwZW5kcz0iY29tcGlsZSxzZXRIdHRwUG9ydCI+CisgICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZSIgZGVwZW5kcz0iY29tcGlsZSxzZXRIdHRwUG9ydCI+CiAgICAgICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkfS9NRVRBLUlORiIvPgogICAgICAgICAgICAgPGNvcHkgZmlsZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgdG9kaXI9IiR7YnVpbGR9L01FVEEtSU5GIi8+CiAgICAgICAgICAgICA8amFyIGRlc3RmaWxlPSIke2FyY2hpdmVkaXJ9L2FwcGNsaWVudC1wb3J0YWJsZS5qYXIiIGJhc2VkaXI9IiR7YnVpbGR9Ij4KQEAgLTYwLDggKzYwLDggQEAKICAgICAgICAgICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJtYWluLWNsYXNzIiB2YWx1ZT0id3N0b2VqYi5DbGllbnQiLz4KICAgICAgICAgICAgICAgICA8L21hbmlmZXN0PgogICAgICAgICAgICAgPC9qYXI+Ci0JPC90YXJnZXQ+Ci0JCQotCTx0YXJnZXQgbmFtZT0icHJpdmF0ZS1hbGwiIGRlcGVuZHM9ImFzc2VtYmxlIi8+CisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIiBkZXBlbmRzPSJhc3NlbWJsZSIvPgogCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci93c3RvZWpiL2FwcGNsaWVudC9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL3dzdG9lamIvYXBwY2xpZW50L3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sCmluZGV4IGIyMGZhMDAuLmZhZjQzZGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL3dzdG9lamIvYXBwY2xpZW50L3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL3dzdG9lamIvYXBwY2xpZW50L3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sCkBAIC0yMSw2ICsyMSw2IEBACiA8c3VuLWFwcGxpY2F0aW9uLWNsaWVudD4KICAgICA8c2VydmljZS1yZWY+CiAgICAgICA8c2VydmljZS1yZWYtbmFtZT5zZXJ2aWNlL1dzdG9FamJTZXJ2aWNlPC9zZXJ2aWNlLXJlZi1uYW1lPgotICAgICAgPHdzZGwtb3ZlcnJpZGU+aHR0cDovL0hUVFBfSE9TVDpIVFRQX1BPUlQvd3N0b2VqYi93c3RvZWpiP1dTREw8L3dzZGwtb3ZlcnJpZGU+IAorICAgICAgPHdzZGwtb3ZlcnJpZGU+aHR0cDovL0hUVFBfSE9TVDpIVFRQX1BPUlQvd3N0b2VqYi93c3RvZWpiP1dTREw8L3dzZGwtb3ZlcnJpZGU+CiAgICAgPC9zZXJ2aWNlLXJlZj4KIDwvc3VuLWFwcGxpY2F0aW9uLWNsaWVudD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL3dzdG9lamIvYXBwY2xpZW50L3dzY29tcGlsZV9jb25maWcueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvd3N0b2VqYi9hcHBjbGllbnQvd3Njb21waWxlX2NvbmZpZy54bWwKaW5kZXggNWE1YjlmNS4uZTc4MWViMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvd3N0b2VqYi9hcHBjbGllbnQvd3Njb21waWxlX2NvbmZpZy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvd3N0b2VqYi9hcHBjbGllbnQvd3Njb21waWxlX2NvbmZpZy54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPGNvbmZpZ3VyYXRpb24KICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheC1ycGMvcmkvY29uZmlnIj4KLSAgPHdzZGwgCisgIDx3c2RsCiAgICAgICBsb2NhdGlvbj0iV2ViU2VydmljZVRvRWpiLndzZGwiCiAgICAgICBwYWNrYWdlTmFtZT0id3N0b2VqYiIvPgogPC9jb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvd3N0b2VqYi9hcHBjbGllbnQvd3N0b2VqYi9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL3dzdG9lamIvYXBwY2xpZW50L3dzdG9lamIvQ2xpZW50LmphdmEKaW5kZXggYTQ4YTI3Ny4uNWE2YTM1YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvd3N0b2VqYi9hcHBjbGllbnQvd3N0b2VqYi9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci93c3RvZWpiL2FwcGNsaWVudC93c3RvZWpiL0NsaWVudC5qYXZhCkBAIC0yOSwyNiArMjksMjYgQEAKICAqIFRoaXMgaXMgYSBhcHBjbGllbnQgdGVzdAogICovCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKLSAgICAgICAgCisKICAgICAgICAgYm9vbGVhbiB0ZXN0UG9zaXRpdmUgPSAoQm9vbGVhbi52YWx1ZU9mKGFyZ3NbMF0pKS5ib29sZWFuVmFsdWUoKTsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsgICAgICAgIAotICAgICAgICAKKyAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKwogICAgICAgICAgICAgU2VydmljZSBteVdlYlNlcnZpY2UgPSAoU2VydmljZSkKLSAgICAgICAgICAgICAgICBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvc2VydmljZS9Xc3RvRWpiU2VydmljZSIpOyAgICAgICAgCisgICAgICAgICAgICAgICAgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3NlcnZpY2UvV3N0b0VqYlNlcnZpY2UiKTsKICAgICAgICAgICAgIFdlYlNlcnZpY2VUb0VqYlNFSSBwb3J0ID0gKFdlYlNlcnZpY2VUb0VqYlNFSSkgbXlXZWJTZXJ2aWNlLmdldFBvcnQoV2ViU2VydmljZVRvRWpiU0VJLmNsYXNzKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihwb3J0LnBheWxvYWQoIkFQUENMSUVOVCBhcyBjbGllbnQiKSk7CiAgICAgICAgIH0gY2F0Y2goVGhyb3dhYmxlIHQpIHsKLQkJCWlmKHRlc3RQb3NpdGl2ZSkgewotICAgICAgICAgICAgCXQucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgICAJU3lzdGVtLmV4aXQoLTEpOwotCQkJfSBlbHNlIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlJlY2QgZXhjZXB0aW9uIGFzIGV4cGVjdGVkIik7Ci0JCQl9CisgICAgICAgICAgICBpZih0ZXN0UG9zaXRpdmUpIHsKKyAgICAgICAgICAgICAgICB0LnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAgICAgICAgIFN5c3RlbS5leGl0KC0xKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZWNkIGV4Y2VwdGlvbiBhcyBleHBlY3RlZCIpOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0JCVN5c3RlbS5leGl0KDApOworICAgICAgICBTeXN0ZW0uZXhpdCgwKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL3dzdG9lamIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvd3N0b2VqYi9idWlsZC54bWwKaW5kZXggODU4MjdiNy4uMzY0YTdiYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvd3N0b2VqYi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvd3N0b2VqYi9idWlsZC54bWwKQEAgLTIzLDkgKzIzLDkgQEAKIAogPHByb2plY3QgbmFtZT0id3N0b2VqYiIgZGVmYXVsdD0iYWxsIiBiYXNlZGlyPSIuIj4KIAotCSZjb21tb25CdWlsZDsKKyAgICAmY29tbW9uQnVpbGQ7CiAKLQkKKwogICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0TmFtZSIgdmFsdWU9IndzdG9lamIiLz4KICAgICA8dGFyZ2V0IG5hbWU9InByZXBhcmUiIGRlcGVuZHM9ImluaXQiPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0icG9ydGFibGUuZWFyIiB2YWx1ZT0iJHtidWlsZH0vd3N0b2VqYi1wb3J0YWJsZS5lYXIiLz4KQEAgLTQ1LDEwICs0NSwxMCBAQAogICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0vd2FyIi8+CiAgICAgICAgIDwvYW50PgogCi0gICAgICAgIDxjb3B5IGZpbGU9IiR7YnVpbGR9L3dhci9XRUItSU5GL3dzZGwvV2ViU2VydmljZVRvRWpiLndzZGwiIHRvZGlyPSJhcHBjbGllbnQiLz4gICAgICAgICAgICAgICAgCisgICAgICAgIDxjb3B5IGZpbGU9IiR7YnVpbGR9L3dhci9XRUItSU5GL3dzZGwvV2ViU2VydmljZVRvRWpiLndzZGwiIHRvZGlyPSJhcHBjbGllbnQiLz4KICAgICAgICAgPGFudCBkaXI9ImFwcGNsaWVudCIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+CiAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9hcHBjbGllbnQiLz4KLSAgICAgICAgPC9hbnQ+ICAKKyAgICAgICAgPC9hbnQ+CiAKICAgICAgICAgPGRlbGV0ZSBmaWxlPSJhcHBjbGllbnQvV2ViU2VydmljZVRvRWpiLndzZGwiLz4KICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZH0vZWFyL01FVEEtSU5GIi8+CkBAIC0xNDYsMTEgKzE0NiwxMSBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuY2xpZW50IiBkZXBlbmRzPSJwcmVwYXJlIj4KICAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBUFBDTElFTlR9IiByZXN1bHRwcm9wZXJ0eT0icmVzdWx0IiBvdXRwdXQ9IiR7YnVpbGR9LyR7bG9nLmlkfS5vdXRwdXQubG9nIj4KICAgICAgICAgICAgIDxhcmcgbGluZT0iLWNsaWVudCAke2J1aWxkfS93c3RvZWpiQ2xpZW50LmphciAke2FyZy5saXN0fSIvPgotICAgICAgICA8L2V4ZWM+ICAgICAKKyAgICAgICAgPC9leGVjPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InByb2Nlc3NSZXN1bHQiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InJlc3VsdCIgdmFsdWU9IiR7cmVzdWx0fSIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImxvZyIgdmFsdWU9IiR7YnVpbGR9LyR7bG9nLmlkfS5vdXRwdXQubG9nIi8+Ci0gICAgICAgIDwvYW50Y2FsbD4gICAgICAgICAgICAgICAgCisgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icHJpdmF0ZS1hbGwiIHVubGVzcz0iRUUiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvd3N0b2VqYi9lamIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvd3N0b2VqYi9lamIvYnVpbGQueG1sCmluZGV4IGEwY2ExODAuLjQ4ODJmMTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL3dzdG9lamIvZWpiL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci93c3RvZWpiL2VqYi9idWlsZC54bWwKQEAgLTIwLDMzICsyMCwzMyBAQAogCiA8IUVOVElUWSBjb21tb25CdWlsZCBTWVNURU0gIi4vLi4vLi4vLi4vY29uZmlnL2NvbW1vbi54bWwiPgogXT4KLSAKKwogPHByb2plY3QgbmFtZT0id3N0b2VqYiIgZGVmYXVsdD0iYWxsIiBiYXNlZGlyPSIuIj4KIAotIAkmY29tbW9uQnVpbGQ7CisgICAgICZjb21tb25CdWlsZDsKICAgICA8cHJvcGVydHkgbmFtZT0iYXJjaGl2ZWRpciIgdmFsdWU9IiR7YnVpbGR9L2FyY2hpdmVzIi8+CiAKLQk8dGFyZ2V0IG5hbWU9InByZXBhcmUiIGRlcGVuZHM9ImluaXQiPgotCQk8bWtkaXIgZGlyPSIke2J1aWxkfSIgLz4KLQkJPG1rZGlyIGRpcj0iJHthcmNoaXZlZGlyfSIgLz4KLQk8L3RhcmdldD4KLQkKLQk8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9InByZXBhcmUiPgotCQk8amF2YWMgc3JjZGlyPSJ3c3RvZWpiIiBkZXN0ZGlyPSIke2J1aWxkfSI+CisgICAgPHRhcmdldCBuYW1lPSJwcmVwYXJlIiBkZXBlbmRzPSJpbml0Ij4KKyAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZH0iIC8+CisgICAgICAgIDxta2RpciBkaXI9IiR7YXJjaGl2ZWRpcn0iIC8+CisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9InByZXBhcmUiPgorICAgICAgICA8amF2YWMgc3JjZGlyPSJ3c3RvZWpiIiBkZXN0ZGlyPSIke2J1aWxkfSI+CiAgICAgICAgICAgICAgICAgIDxjbGFzc3BhdGggcmVmaWQ9ImdmdjMuY2xhc3NwYXRoIi8+CiAgICAgICAgICAgICAgICAgPC9qYXZhYz4KIAotCTwvdGFyZ2V0PgotCQotCTx0YXJnZXQgbmFtZT0iYXNzZW1ibGUiIGRlcGVuZHM9ImNvbXBpbGUiPgotCQk8bWtkaXIgZGlyPSIke2J1aWxkfS9NRVRBLUlORiIvPgotCQk8Y29weSBmaWxlPSJlamItamFyLnhtbCIgdG9kaXI9IiR7YnVpbGR9L01FVEEtSU5GIi8+Ci0JCTxqYXIgZGVzdGZpbGU9IiR7YXJjaGl2ZWRpcn0vd3N0b2VqYi1wb3J0YWJsZS5qYXIiIGJhc2VkaXI9IiR7YnVpbGR9Ii8+Ci0JCTxjb3B5IGZpbGU9InN1bi1lamItamFyLnhtbCIgdG9kaXI9IiR7YnVpbGR9L01FVEEtSU5GIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLQkJPGphciBkZXN0ZmlsZT0iJHthcmNoaXZlZGlyfS93c3RvZWpiLmphciIgYmFzZWRpcj0iJHtidWlsZH0iLz4KLQk8L3RhcmdldD4KLQkJCi0JPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCIgZGVwZW5kcz0iYXNzZW1ibGUiPgotCTwvdGFyZ2V0PgorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZSIgZGVwZW5kcz0iY29tcGlsZSI+CisgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGR9L01FVEEtSU5GIi8+CisgICAgICAgIDxjb3B5IGZpbGU9ImVqYi1qYXIueG1sIiB0b2Rpcj0iJHtidWlsZH0vTUVUQS1JTkYiLz4KKyAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthcmNoaXZlZGlyfS93c3RvZWpiLXBvcnRhYmxlLmphciIgYmFzZWRpcj0iJHtidWlsZH0iLz4KKyAgICAgICAgPGNvcHkgZmlsZT0ic3VuLWVqYi1qYXIueG1sIiB0b2Rpcj0iJHtidWlsZH0vTUVUQS1JTkYiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICAgICAgICA8amFyIGRlc3RmaWxlPSIke2FyY2hpdmVkaXJ9L3dzdG9lamIuamFyIiBiYXNlZGlyPSIke2J1aWxkfSIvPgorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCIgZGVwZW5kcz0iYXNzZW1ibGUiPgorICAgIDwvdGFyZ2V0PgogCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci93c3RvZWpiL2VqYi93c3RvZWpiL1N0YXRlZnVsU2Vzc2lvbkJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL3dzdG9lamIvZWpiL3dzdG9lamIvU3RhdGVmdWxTZXNzaW9uQmVhbi5qYXZhCmluZGV4IDc1ZTkxMjAuLjk2YWM2NzUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL3dzdG9lamIvZWpiL3dzdG9lamIvU3RhdGVmdWxTZXNzaW9uQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL3dzdG9lamIvZWpiL3dzdG9lamIvU3RhdGVmdWxTZXNzaW9uQmVhbi5qYXZhCkBAIC0yMSwxNiArMjEsMTYgQEAKIAogLyoqCiAgKiAgU2ltcGxlIGludGVyZmFjZSBmb3IgYSBzdGF0ZWZ1bGwgc2Vzc2lvbiBiZWFuLgotICogCisgKgogICogQGF1dGhvciBKZXJvbWUgRG9jaGV6CiAgKi8KIHB1YmxpYyBpbnRlcmZhY2UgU3RhdGVmdWxTZXNzaW9uQmVhbiBleHRlbmRzIEVKQk9iamVjdCB7CiAKLQkvKioKLQkgKiBwZXJmb3JtIHNvbWUga2luZCBvZiBwcm9jZXNzaW5nCi0JICogQHBhcmFtIHBheWxvYWQgaXMgdGhlIHJlcXVlc3QgaW5mbwotCSAqIEByZXR1cm4gdGhlIHByb2Nlc3NlZCBpbmZvCi0JICogQHRocm93cyBSZW1vdGVFeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHBheUxvYWQoU3RyaW5nIHBheWxvYWQpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CQorICAgIC8qKgorICAgICAqIHBlcmZvcm0gc29tZSBraW5kIG9mIHByb2Nlc3NpbmcKKyAgICAgKiBAcGFyYW0gcGF5bG9hZCBpcyB0aGUgcmVxdWVzdCBpbmZvCisgICAgICogQHJldHVybiB0aGUgcHJvY2Vzc2VkIGluZm8KKyAgICAgKiBAdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbgorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgcGF5TG9hZChTdHJpbmcgcGF5bG9hZCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL3dzdG9lamIvZWpiL3dzdG9lamIvU3RhdGVmdWxTZXNzaW9uQmVhbkVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvd3N0b2VqYi9lamIvd3N0b2VqYi9TdGF0ZWZ1bFNlc3Npb25CZWFuRUpCLmphdmEKaW5kZXggZWI3MjBmMC4uY2NiY2JiMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvd3N0b2VqYi9lamIvd3N0b2VqYi9TdGF0ZWZ1bFNlc3Npb25CZWFuRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvd3N0b2VqYi9lamIvd3N0b2VqYi9TdGF0ZWZ1bFNlc3Npb25CZWFuRUpCLmphdmEKQEAgLTIxLDM2ICsyMSwzNiBAQAogCiAvKioKICAqICBTaW1wbGUgaW50ZXJmYWNlIGZvciBhIHN0YXRlZnVsbCBzZXNzaW9uIGJlYW4uCi0gKiAKKyAqCiAgKiBAYXV0aG9yIEplcm9tZSBEb2NoZXoKICAqLwogcHVibGljIGNsYXNzIFN0YXRlZnVsU2Vzc2lvbkJlYW5FSkIgaW1wbGVtZW50cyAgU2Vzc2lvbkJlYW4gewogCi0JcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBzYzsKLSAgICAKLQlwdWJsaWMgU3RhdGVmdWxTZXNzaW9uQmVhbkVKQigpe30KLSAgICAKLQlwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJJbiBlamJDcmVhdGUgISEiKTsKLQl9CisgICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBzYzsKIAotCXB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7CQotCQl0aGlzLnNjID0gc2M7Ci0JfQotICAgIAotCXB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24ge30KLSAgICAKLQlwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHt9Ci0gICAgCi0JcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkge30JCi0JCi0JLyoqCi0JICogcGVyZm9ybSBzb21lIGtpbmQgb2YgcHJvY2Vzc2luZwotCSAqIEBwYXJhbSBwYXlsb2FkIGlzIHRoZSByZXF1ZXN0IGluZm8KLQkgKiBAcmV0dXJuIHRoZSBwcm9jZXNzZWQgaW5mbwotCSAqIEB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uCi0JICovCi0JcHVibGljIFN0cmluZyBwYXlMb2FkKFN0cmluZyBwYXlsb2FkKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLQkJcmV0dXJuICJIZXkgIiArIHBheWxvYWQgKyAiLCBJIGFtIHN1Y2ggYSBkdW1teSBlamIsIGRvbid0IGJvdGhlciAhIjsKLQl9CQkJCisgICAgcHVibGljIFN0YXRlZnVsU2Vzc2lvbkJlYW5FSkIoKXt9CisKKyAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBlamJDcmVhdGUgISEiKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgeworICAgICAgICB0aGlzLnNjID0gc2M7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7fQorCisgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7fQorCisgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkge30KKworICAgIC8qKgorICAgICAqIHBlcmZvcm0gc29tZSBraW5kIG9mIHByb2Nlc3NpbmcKKyAgICAgKiBAcGFyYW0gcGF5bG9hZCBpcyB0aGUgcmVxdWVzdCBpbmZvCisgICAgICogQHJldHVybiB0aGUgcHJvY2Vzc2VkIGluZm8KKyAgICAgKiBAdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbgorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgcGF5TG9hZChTdHJpbmcgcGF5bG9hZCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CisgICAgICAgIHJldHVybiAiSGV5ICIgKyBwYXlsb2FkICsgIiwgSSBhbSBzdWNoIGEgZHVtbXkgZWpiLCBkb24ndCBib3RoZXIgISI7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvd3N0b2VqYi9lamIvd3N0b2VqYi9TdGF0ZWZ1bFNlc3Npb25CZWFuSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvd3N0b2VqYi9lamIvd3N0b2VqYi9TdGF0ZWZ1bFNlc3Npb25CZWFuSG9tZS5qYXZhCmluZGV4IGYwNzYxYzUuLjYyYmVlNzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL3dzdG9lamIvZWpiL3dzdG9lamIvU3RhdGVmdWxTZXNzaW9uQmVhbkhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci93c3RvZWpiL2VqYi93c3RvZWpiL1N0YXRlZnVsU2Vzc2lvbkJlYW5Ib21lLmphdmEKQEAgLTIyLDExICsyMiwxMSBAQAogCiAvKioKICAqIFNpbXBsZSBpbnRlcmZhY2UgdG8gY3JlYXRlIGEgc3RhdGVmdWxsIHNlc3Npb24gYmVhbgotICogCisgKgogICogQGF1dGhvciBKZXJvbWUgRG9jaGV6CiAgKi8KIHB1YmxpYyBpbnRlcmZhY2UgU3RhdGVmdWxTZXNzaW9uQmVhbkhvbWUgZXh0ZW5kcyBFSkJIb21lIHsKIAotCXB1YmxpYyBTdGF0ZWZ1bFNlc3Npb25CZWFuIGNyZWF0ZSAoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uLCBDcmVhdGVFeGNlcHRpb247CisgICAgcHVibGljIFN0YXRlZnVsU2Vzc2lvbkJlYW4gY3JlYXRlICgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24sIENyZWF0ZUV4Y2VwdGlvbjsKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvd3N0b2VqYi93YXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvd3N0b2VqYi93YXIvYnVpbGQueG1sCmluZGV4IDdkZDU3MjguLjFlZTM5ZDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL3dzdG9lamIvd2FyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci93c3RvZWpiL3dhci9idWlsZC54bWwKQEAgLTIzLDQ3ICsyMyw0NyBAQAogCiA8cHJvamVjdCBuYW1lPSJXZWJTZXJ2aWNlVG9FamIiIGRlZmF1bHQ9ImFsbCIgYmFzZWRpcj0iLiI+CiAKLQkmY29tbW9uQnVpbGQ7CisgICAgJmNvbW1vbkJ1aWxkOwogICAgIDxwcm9wZXJ0eSBuYW1lPSJhcmNoaXZlZGlyIiB2YWx1ZT0iJHtidWlsZH0vYXJjaGl2ZXMiLz4KIAotCTx0YXJnZXQgbmFtZT0icHJlcGFyZSIgZGVwZW5kcz0iaW5pdCI+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJiaW5hcnkiIHZhbHVlPSIke2J1aWxkfS9XRUItSU5GL2NsYXNzZXMiLz4KLQkJPHByb3BlcnR5IG5hbWU9IndzZGwiIHZhbHVlPSIke2J1aWxkfS9XRUItSU5GL3dzZGwiLz4KLQkJPG1rZGlyIGRpcj0iJHtiaW5hcnl9IiAvPgotCQk8bWtkaXIgZGlyPSIke3dzZGx9Ii8+Ci0JCTxta2RpciBkaXI9IiR7YXJjaGl2ZWRpcn0iIC8+Ci0JPC90YXJnZXQ+Ci0JCi0JPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJwcmVwYXJlLCBpbXBvcnQtZGVwIj4KLQkJPGphdmFjIHNyY2Rpcj0id3N0b2VqYiIgZGVzdGRpcj0iJHtiaW5hcnl9Ij4KLQkgICAgCTxjbGFzc3BhdGg+Ci0JICAgIAkgIDxwYXRoIHJlZmlkPSJnZnYzLmNsYXNzcGF0aCIvPgotICAgIAkJICA8cGF0aCBsb2NhdGlvbj0iJHtidWlsZH0vV0VCLUlORi9saWIvbGlicmFyeS5qYXIiLz4KLQkJICAgIDwvY2xhc3NwYXRoPgkJCi0JCSA8L2phdmFjPgotCQk8ZWNobyBtZXNzYWdlPSJpbnZva2luZyB3c2NvbXBpbGUgdG8gZ2VuZXJhdGUgd3NkbCBmaWxlIi8+Ci0JCTxleGVjIGV4ZWN1dGFibGU9IiR7V1NDT01QSUxFfSI+Ci0JCQk8YXJnIGxpbmU9Ii1kZWZpbmUgY29uZmlnLWludGVyZmFjZS54bWwgIC1kICR7YmluYXJ5fSAtbmQgJHt3c2RsfSAtY2xhc3NwYXRoICR7YmluYXJ5fSAtbWFwcGluZyAke2J1aWxkfS9tYXBwaW5nLnhtbCIvPgotCSAJPC9leGVjPgkJCQkJCi0JPC90YXJnZXQ+Ci0JCi0JPHRhcmdldCBuYW1lPSJpbXBvcnQtZGVwIj4KLQkJPG1rZGlyIGRpcj0iJHtidWlsZH0vV0VCLUlORi9saWIiIC8+Ci0JCTxta2RpciBkaXI9IiR7YnVpbGR9L3RtcC93c3RvZWpiIiAvPgkJCi0JCTxjb3B5IGZpbGU9IiR7YnVpbGR9Ly4uL2VqYi93c3RvZWpiL1N0YXRlZnVsU2Vzc2lvbkJlYW4uY2xhc3MiIHRvZGlyPSIke2J1aWxkfS90bXAvd3N0b2VqYiIvPgotCQk8Y29weSBmaWxlPSIke2J1aWxkfS8uLi9lamIvd3N0b2VqYi9TdGF0ZWZ1bFNlc3Npb25CZWFuSG9tZS5jbGFzcyIgdG9kaXI9IiR7YnVpbGR9L3RtcC93c3RvZWpiIi8+Ci0JCTxqYXIgZGVzdGZpbGU9IiR7YnVpbGR9L1dFQi1JTkYvbGliL2xpYnJhcnkuamFyIiBiYXNlZGlyPSIke2J1aWxkfS90bXAiLz4KLQkJPGRlbGV0ZSBkaXI9IiR7YnVpbGR9L3RtcCIvPgotCTwvdGFyZ2V0PgotCQotCTx0YXJnZXQgbmFtZT0iYXNzZW1ibGUiIGRlcGVuZHM9ImNvbXBpbGUiPgotCQk8Y29weSBmaWxlPSJ3ZWIueG1sIiB0b2Rpcj0iJHtidWlsZH0vV0VCLUlORiIvPgotCQk8Y29weSBmaWxlPSJ3ZWJzZXJ2aWNlcy54bWwiIHRvZGlyPSIke2J1aWxkfS9XRUItSU5GIi8+Ci0JCTxqYXIgZGVzdGZpbGU9IiR7YXJjaGl2ZWRpcn0vc2F5aGVsbG8tcG9ydGFibGUud2FyIiBiYXNlZGlyPSIke2J1aWxkfSIvPgotCQk8Y29weSBmaWxlPSJzdW4td2ViLnhtbCIgdG9kaXI9IiR7YnVpbGR9L1dFQi1JTkYiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotCQk8amFyIGRlc3RmaWxlPSIke2FyY2hpdmVkaXJ9L3NheWhlbGxvLndhciIgYmFzZWRpcj0iJHtidWlsZH0iLz4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9InByZXBhcmUiIGRlcGVuZHM9ImluaXQiPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0iYmluYXJ5IiB2YWx1ZT0iJHtidWlsZH0vV0VCLUlORi9jbGFzc2VzIi8+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ3c2RsIiB2YWx1ZT0iJHtidWlsZH0vV0VCLUlORi93c2RsIi8+CisgICAgICAgIDxta2RpciBkaXI9IiR7YmluYXJ5fSIgLz4KKyAgICAgICAgPG1rZGlyIGRpcj0iJHt3c2RsfSIvPgorICAgICAgICA8bWtkaXIgZGlyPSIke2FyY2hpdmVkaXJ9IiAvPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCIgZGVwZW5kcz0iYXNzZW1ibGUiLz4KKyAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9InByZXBhcmUsIGltcG9ydC1kZXAiPgorICAgICAgICA8amF2YWMgc3JjZGlyPSJ3c3RvZWpiIiBkZXN0ZGlyPSIke2JpbmFyeX0iPgorICAgICAgICAgICAgPGNsYXNzcGF0aD4KKyAgICAgICAgICAgICAgPHBhdGggcmVmaWQ9ImdmdjMuY2xhc3NwYXRoIi8+CisgICAgICAgICAgICAgIDxwYXRoIGxvY2F0aW9uPSIke2J1aWxkfS9XRUItSU5GL2xpYi9saWJyYXJ5LmphciIvPgorICAgICAgICAgICAgPC9jbGFzc3BhdGg+CisgICAgICAgICA8L2phdmFjPgorICAgICAgICA8ZWNobyBtZXNzYWdlPSJpbnZva2luZyB3c2NvbXBpbGUgdG8gZ2VuZXJhdGUgd3NkbCBmaWxlIi8+CisgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7V1NDT01QSUxFfSI+CisgICAgICAgICAgICA8YXJnIGxpbmU9Ii1kZWZpbmUgY29uZmlnLWludGVyZmFjZS54bWwgIC1kICR7YmluYXJ5fSAtbmQgJHt3c2RsfSAtY2xhc3NwYXRoICR7YmluYXJ5fSAtbWFwcGluZyAke2J1aWxkfS9tYXBwaW5nLnhtbCIvPgorICAgICAgICAgPC9leGVjPgorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJpbXBvcnQtZGVwIj4KKyAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZH0vV0VCLUlORi9saWIiIC8+CisgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGR9L3RtcC93c3RvZWpiIiAvPgorICAgICAgICA8Y29weSBmaWxlPSIke2J1aWxkfS8uLi9lamIvd3N0b2VqYi9TdGF0ZWZ1bFNlc3Npb25CZWFuLmNsYXNzIiB0b2Rpcj0iJHtidWlsZH0vdG1wL3dzdG9lamIiLz4KKyAgICAgICAgPGNvcHkgZmlsZT0iJHtidWlsZH0vLi4vZWpiL3dzdG9lamIvU3RhdGVmdWxTZXNzaW9uQmVhbkhvbWUuY2xhc3MiIHRvZGlyPSIke2J1aWxkfS90bXAvd3N0b2VqYiIvPgorICAgICAgICA8amFyIGRlc3RmaWxlPSIke2J1aWxkfS9XRUItSU5GL2xpYi9saWJyYXJ5LmphciIgYmFzZWRpcj0iJHtidWlsZH0vdG1wIi8+CisgICAgICAgIDxkZWxldGUgZGlyPSIke2J1aWxkfS90bXAiLz4KKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUiIGRlcGVuZHM9ImNvbXBpbGUiPgorICAgICAgICA8Y29weSBmaWxlPSJ3ZWIueG1sIiB0b2Rpcj0iJHtidWlsZH0vV0VCLUlORiIvPgorICAgICAgICA8Y29weSBmaWxlPSJ3ZWJzZXJ2aWNlcy54bWwiIHRvZGlyPSIke2J1aWxkfS9XRUItSU5GIi8+CisgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXJjaGl2ZWRpcn0vc2F5aGVsbG8tcG9ydGFibGUud2FyIiBiYXNlZGlyPSIke2J1aWxkfSIvPgorICAgICAgICA8Y29weSBmaWxlPSJzdW4td2ViLnhtbCIgdG9kaXI9IiR7YnVpbGR9L1dFQi1JTkYiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICAgICAgICA8amFyIGRlc3RmaWxlPSIke2FyY2hpdmVkaXJ9L3NheWhlbGxvLndhciIgYmFzZWRpcj0iJHtidWlsZH0iLz4KKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0icHJpdmF0ZS1hbGwiIGRlcGVuZHM9ImFzc2VtYmxlIi8+CiAKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL3dzdG9lamIvd2FyL2NvbmZpZy1pbnRlcmZhY2UueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvd3N0b2VqYi93YXIvY29uZmlnLWludGVyZmFjZS54bWwKaW5kZXggNDRjNzJkOC4uNGRiNzc3ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvd3N0b2VqYi93YXIvY29uZmlnLWludGVyZmFjZS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvd3N0b2VqYi93YXIvY29uZmlnLWludGVyZmFjZS54bWwKQEAgLTE5LDExICsxOSwxMSBAQAogCiA8Y29uZmlndXJhdGlvbgogICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4LXJwYy9yaS9jb25maWciPgotICA8c2VydmljZSAKLSAgICAgIG5hbWU9IldlYlNlcnZpY2VUb0VqYiIgCi0gICAgICB0YXJnZXROYW1lc3BhY2U9InVybjpEZXBsb3ltZW50V2ViU2VydmljZVRlc3QiIAotICAgICAgdHlwZU5hbWVzcGFjZT0idXJuOkRlcGxveW1lbnRXZWJTZXJ2aWNlVGVzdCIgCisgIDxzZXJ2aWNlCisgICAgICBuYW1lPSJXZWJTZXJ2aWNlVG9FamIiCisgICAgICB0YXJnZXROYW1lc3BhY2U9InVybjpEZXBsb3ltZW50V2ViU2VydmljZVRlc3QiCisgICAgICB0eXBlTmFtZXNwYWNlPSJ1cm46RGVwbG95bWVudFdlYlNlcnZpY2VUZXN0IgogICAgICAgcGFja2FnZU5hbWU9IndzdG9lamIiPgogICAgICAgPGludGVyZmFjZSBuYW1lPSJ3c3RvZWpiLldlYlNlcnZpY2VUb0VqYlNFSSIvPgogICA8L3NlcnZpY2U+Ci08L2NvbmZpZ3VyYXRpb24+IAorPC9jb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvd3N0b2VqYi93YXIvd3N0b2VqYi9XZWJTZXJ2aWNlVG9FamJTRUkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWFyL3dzdG9lamIvd2FyL3dzdG9lamIvV2ViU2VydmljZVRvRWpiU0VJLmphdmEKaW5kZXggY2E4ODgyMS4uYWFmYzlhNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvd3N0b2VqYi93YXIvd3N0b2VqYi9XZWJTZXJ2aWNlVG9FamJTRUkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci93c3RvZWpiL3dhci93c3RvZWpiL1dlYlNlcnZpY2VUb0VqYlNFSS5qYXZhCkBAIC0xNSwyMSArMTUsMjEgQEAKICAqLwogCiAgcGFja2FnZSB3c3RvZWpiOwotIAorCiBpbXBvcnQgamF2YS5ybWkuUmVtb3RlOwogaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKLSAKKwogIC8qCi0gICogVGhpcyBpbnRlcmZhY2UgIGlzIHRoZSBzZXJ2aWNlIGVuZHBvaW50IGludGVyZmFjZSBmb3IgYSBzaW1wbGUgd2Vic2VydmljZXMgCisgICogVGhpcyBpbnRlcmZhY2UgIGlzIHRoZSBzZXJ2aWNlIGVuZHBvaW50IGludGVyZmFjZSBmb3IgYSBzaW1wbGUgd2Vic2VydmljZXMKICAgKiBpbnRlcmZhY2luZyBhIHNpbXBsZSBFSkIKLSAgKiAKKyAgKgogICAqIEBhdXRob3IgSmVyb21lIERvY2hlegogICAqLwogIHB1YmxpYyBpbnRlcmZhY2UgV2ViU2VydmljZVRvRWpiU0VJIGV4dGVuZHMgUmVtb3RlIHsKLSAJCi0gCS8qCi0gCSAqIEludm9rZSB0aGUgZWpiCi0gCSAqLyAJCi0gCSBwdWJsaWMgU3RyaW5nIHBheWxvYWQoU3RyaW5nIHJlcXVlc3RJbmZvKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwotIAkgCisKKyAgICAgLyoKKyAgICAgICogSW52b2tlIHRoZSBlamIKKyAgICAgICovCisgICAgICBwdWJsaWMgU3RyaW5nIHBheWxvYWQoU3RyaW5nIHJlcXVlc3RJbmZvKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworCiAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lYXIvd3N0b2VqYi93YXIvd3N0b2VqYi9XZWJTZXJ2aWNlVG9FamJTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci93c3RvZWpiL3dhci93c3RvZWpiL1dlYlNlcnZpY2VUb0VqYlNlcnZsZXQuamF2YQppbmRleCA0N2QyNDMyLi5mNzU5MzMxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci93c3RvZWpiL3dhci93c3RvZWpiL1dlYlNlcnZpY2VUb0VqYlNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2Vhci93c3RvZWpiL3dhci93c3RvZWpiL1dlYlNlcnZpY2VUb0VqYlNlcnZsZXQuamF2YQpAQCAtMTUsNTEgKzE1LDUxIEBACiAgKi8KIAogcGFja2FnZSB3c3RvZWpiOwotIAorCiBpbXBvcnQgamF2YS5ybWkuKjsKIGltcG9ydCBqYXZheC5ybWkuKjsKIGltcG9ydCBqYXZheC5uYW1pbmcuKjsKIAotIAorCiAgLyoqCiAgICogIFNpbXBsZSBzZXJ2bGV0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBTRUkKLSAgKiAKKyAgKgogICAqIEBhdXRob3IgSmVyb21lIERvY2hlegogICAqLwogIHB1YmxpYyBjbGFzcyBXZWJTZXJ2aWNlVG9FamJTZXJ2bGV0IGltcGxlbWVudHMgV2ViU2VydmljZVRvRWpiU0VJIHsKLSAJCi0gCS8qKgotIAkgKiAgSW1wbGVtZW50YXRpb24gb2YgdGhlIFNFSSdzIG1ldGhvZHMKLSAJICovCi0gCXB1YmxpYyBTdHJpbmcgcGF5bG9hZChTdHJpbmcgcmVxdWVzdEluZm8pIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotIAkJdHJ5IHsKLSAJCQlpZiAoYmVhbj09bnVsbCkgewotCSAJCQliZWFuID0gY3JlYXRlRUpCKCk7Ci0gCQkJfQotIAkJCXJldHVybihnZXRNc2cocmVxdWVzdEluZm8pICsgIjsgYW5kIGRvbnQgYm90aGVyIHRoaXMgZHVtbXkgc2VydmxldCBhbHNvIik7Ci0gCQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0gCQkJdGhyb3cgbmV3IFJlbW90ZUV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7Ci0gCQl9IAkJCi0gCX0KIAotCS8qKgotCSAqIENyZWF0ZXMgdGhlIGVqYiBvYmplY3QgZnJvbSBpdCdzIGhvbWUgaW50ZXJmYWNlCi0JICovIAkKLQlwcml2YXRlIFN0YXRlZnVsU2Vzc2lvbkJlYW4gY3JlYXRlRUpCKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIGNvbm5lY3QgdG8gdGhlIEVKQgotCQlDb250ZXh0IGN0eHQgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkJamF2YS5sYW5nLk9iamVjdCBvYmpyZWYgPSBjdHh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9NeUVqYlJlZmVyZW5jZSIpOwotCQlTdGF0ZWZ1bFNlc3Npb25CZWFuSG9tZSBob21lSW50ZiA9IChTdGF0ZWZ1bFNlc3Npb25CZWFuSG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwgU3RhdGVmdWxTZXNzaW9uQmVhbkhvbWUuY2xhc3MpOwotCQlyZXR1cm4gaG9tZUludGYuY3JlYXRlKCk7Ci0JfQotICAgICAgICAgIAotCXB1YmxpYyBTdHJpbmcgZ2V0TXNnKFN0cmluZyBpbmZvKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJaWYgKGJlYW4gPT0gbnVsbCkgewotCQkJcmV0dXJuICJjb3VsZCBub3QgdGFsayB0byB0aGUgRUpCIDogamF2YTpjb21wL2Vudi9NeUVqYlJlZmVyZW5jZSI7Ci0JCX0gZWxzZSB7Ci0JCQlyZXR1cm4gYmVhbi5wYXlMb2FkKGluZm8pOyAgICAgICAgICAgICAgICAKLQkJfQotCX0KLSAJCi0gCXByaXZhdGUgU3RhdGVmdWxTZXNzaW9uQmVhbiBiZWFuOworICAgICAvKioKKyAgICAgICogIEltcGxlbWVudGF0aW9uIG9mIHRoZSBTRUkncyBtZXRob2RzCisgICAgICAqLworICAgICBwdWJsaWMgU3RyaW5nIHBheWxvYWQoU3RyaW5nIHJlcXVlc3RJbmZvKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKKyAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgaWYgKGJlYW49PW51bGwpIHsKKyAgICAgICAgICAgICAgICAgYmVhbiA9IGNyZWF0ZUVKQigpOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICByZXR1cm4oZ2V0TXNnKHJlcXVlc3RJbmZvKSArICI7IGFuZCBkb250IGJvdGhlciB0aGlzIGR1bW15IHNlcnZsZXQgYWxzbyIpOworICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgIHRocm93IG5ldyBSZW1vdGVFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgfQorICAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIHRoZSBlamIgb2JqZWN0IGZyb20gaXQncyBob21lIGludGVyZmFjZQorICAgICAqLworICAgIHByaXZhdGUgU3RhdGVmdWxTZXNzaW9uQmVhbiBjcmVhdGVFSkIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgLy8gY29ubmVjdCB0byB0aGUgRUpCCisgICAgICAgIENvbnRleHQgY3R4dCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgICAgICBqYXZhLmxhbmcuT2JqZWN0IG9ianJlZiA9IGN0eHQubG9va3VwKCJqYXZhOmNvbXAvZW52L015RWpiUmVmZXJlbmNlIik7CisgICAgICAgIFN0YXRlZnVsU2Vzc2lvbkJlYW5Ib21lIGhvbWVJbnRmID0gKFN0YXRlZnVsU2Vzc2lvbkJlYW5Ib21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCBTdGF0ZWZ1bFNlc3Npb25CZWFuSG9tZS5jbGFzcyk7CisgICAgICAgIHJldHVybiBob21lSW50Zi5jcmVhdGUoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIGdldE1zZyhTdHJpbmcgaW5mbykgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGlmIChiZWFuID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiAiY291bGQgbm90IHRhbGsgdG8gdGhlIEVKQiA6IGphdmE6Y29tcC9lbnYvTXlFamJSZWZlcmVuY2UiOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIGJlYW4ucGF5TG9hZChpbmZvKTsKKyAgICAgICAgfQorICAgIH0KKworICAgICBwcml2YXRlIFN0YXRlZnVsU2Vzc2lvbkJlYW4gYmVhbjsKICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYi9idWlsZC54bWwKaW5kZXggMDFkYTdmZC4uYzNlNmZlMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiL2J1aWxkLnhtbApAQCAtMjMsMTQgKzIzLDE0IEBACiAKIDxwcm9qZWN0IG5hbWU9ImVqYiIgZGVmYXVsdD0iYWxsIiBiYXNlZGlyPSIuIj4KIAotCSZjb21tb25CdWlsZDsKKyAgICAmY29tbW9uQnVpbGQ7CiAKLQk8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIj4KLQkJPGFudCBkaXI9InN0YXRlbGVzc2hlbGxvIiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L3N0YXRlbGVzc2hlbGxvIi8+Ci0JCTwvYW50PgotCQk8IS0tYW50IGRpcj0id2Vic2VydmljZSIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS93ZWJzZXJ2aWNlIi8+Ci0JCTwvYW50LS0+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCI+CisgICAgICAgIDxhbnQgZGlyPSJzdGF0ZWxlc3NoZWxsbyIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9zdGF0ZWxlc3NoZWxsbyIvPgorICAgICAgICA8L2FudD4KKyAgICAgICAgPCEtLWFudCBkaXI9IndlYnNlcnZpY2UiIHRhcmdldD0icHJpdmF0ZS1hbGwiPgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0vd2Vic2VydmljZSIvPgorICAgICAgICA8L2FudC0tPgorICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIvc3RhdGVsZXNzaGVsbG8vU3RhdGVsZXNzSGVsbG9UZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYi9zdGF0ZWxlc3NoZWxsby9TdGF0ZWxlc3NIZWxsb1Rlc3QuamF2YQppbmRleCBiZmYzOTAzLi5jZTYxYjNjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYi9zdGF0ZWxlc3NoZWxsby9TdGF0ZWxlc3NIZWxsb1Rlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYi9zdGF0ZWxlc3NoZWxsby9TdGF0ZWxlc3NIZWxsb1Rlc3QuamF2YQpAQCAtMzgsMTcgKzM4LDE3IEBACiAgKiAgIHVuZGVwbG95IHRoZSBhcHAgdXNpbmcgSlNSLTg4CiAgKgogICogQGF1dGhvcjogdGpxdWlubgotICogCisgKgogICovCiAKIHB1YmxpYyBjbGFzcyBTdGF0ZWxlc3NIZWxsb1Rlc3QgZXh0ZW5kcyBEZXBsb3ltZW50VGVzdCB7Ci0gICAgCisKICAgICBwcml2YXRlIGludCBuZXh0TG9nSUQgPSAwOwotICAgIAorCiAgICAgLyoqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgRXhhbXBsZVRlc3QgKi8KICAgICBwdWJsaWMgU3RhdGVsZXNzSGVsbG9UZXN0KCkgewogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqRGVwbG95IHRoZSBhcHAgdXNpbmcgYXNhZG1pbiBhbmQgcnVuIGl0LCBleHBlY3RpbmcgYSBwb3NpdGl2ZSByZXN1bHQuCiAgICAgICovCkBAIC01NywxNiArNTcsMTYgQEAKICAgICAgICAgZGVwbG95KCk7CiAgICAgICAgIHJ1blBvc2l0aXZlKCJlamIvc3RhdGVsZXNzZWpiIFRlc3QgYXNhZG1pbiBkZXBsb3kiKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKLSAgICAgKlJlZGVwbG95IGFuZCBydW4gYWZ0ZXIgZmlyc3QgdGVzdC4gCisgICAgICpSZWRlcGxveSBhbmQgcnVuIGFmdGVyIGZpcnN0IHRlc3QuCiAgICAgICovCiAgICAgQFRlc3QoZGVwZW5kc09uTWV0aG9kcz17ImRlcGxveVdpdGhBc2FkbWluQW5kUnVuIn0pCiAgICAgcHVibGljIHZvaWQgcmVkZXBsb3lXaXRoQXNhZG1pbkFuZFJ1bigpIHsKICAgICAgICAgcmVkZXBsb3koKTsKICAgICAgICAgcnVuUG9zaXRpdmUoImVqYi9zdGF0ZWxlc3NlamIgVGVzdCBhc2FkbWluIHJlZGVwbG95Iik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICpVbmRlcGxveSB1c2luZyBhc2FkbWluIGFmdGVyIGZpcnN0IGRlcGxveW1lbnQgYW5kIHJlZGVwbG95bWVudC4KICAgICAgKi8KQEAgLTc0LDcgKzc0LDcgQEAKICAgICBwdWJsaWMgdm9pZCB1bmRlcGxveUFmdGVyQXNhZG1pblJ1bnMoKSB7CiAgICAgICAgIHVuZGVwbG95KCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICpEZXBsb3kgd2l0aCBKU1ItODggYW5kIHJ1bi4KICAgICAgKi8KQEAgLTgzLDcgKzgzLDcgQEAKICAgICAgICAgZGVwbG95V2l0aEpTUjg4KCk7CiAgICAgICAgIHJ1blBvc2l0aXZlKCJlamIvc3RhdGVsZXNzZWpiIFRlc3QganNyODggZGVwbG95Iik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICpTdG9wIHVzaW5nIEpTUi04OCBhbmQgYXR0ZW1wdCB0byBydW4uCiAgICAgICovCkBAIC05Miw3ICs5Miw3IEBACiAgICAgICAgIHN0b3BXaXRoSlNSODgoKTsKICAgICAgICAgcnVuTmVnYXRpdmUoImVqYi9zdGF0ZWxlc3NlamIgVGVzdCBqc3I4OCBzdG9wcGVkIHN0YXRlIik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICpTdGFydCB3aXRoIEpTUi04OCBhbmQgYXR0ZW1wdCB0byBydW4uCiAgICAgICovCkBAIC0xMDEsNyArMTAxLDcgQEAKICAgICAgICAgc3RhcnRXaXRoSlNSODgoKTsKICAgICAgICAgcnVuUG9zaXRpdmUoImVqYi9zdGF0ZWxlc3NlamIgVGVzdCBqc3I4OCBzdGFydGVkIHN0YXRlIik7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICpTdG9wLCByZWRlcGxveSwgYW5kIGF0dGVtcHQgdG8gcnVuIChzaG91bGQgZmFpbCkuCiAgICAgICovCkBAIC0xMTYsMzkgKzExNiwzOSBAQAogICAgIHB1YmxpYyB2b2lkIHVuc2V0dXAoKSB7CiAgICAgICAgIHVuZGVwbG95QXRFbmQoKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCB1bmRlcGxveUF0RW5kKCkgewogICAgICAgICB1bmRlcGxveVdpdGhKU1I4OCgpOwogICAgIH0KLSAgICAKKwogICAgIHByb3RlY3RlZCB2b2lkIGRlcGxveVdpdGhKU1I4OCgpIHsKICAgICAgICAgcHJvamVjdC5leGVjdXRlVGFyZ2V0KCJkZXBsb3kuanNyODgiKTsKICAgICB9Ci0gICAgCisKICAgICBwcm90ZWN0ZWQgdm9pZCBzdGFydFdpdGhKU1I4OCgpIHsKICAgICAgICAgcHJvamVjdC5leGVjdXRlVGFyZ2V0KCJzdGFydC5qc3I4OCIpOwogICAgIH0KLSAgICAKKwogICAgIHByb3RlY3RlZCB2b2lkIHN0b3BXaXRoSlNSODgoKSB7CiAgICAgICAgIHByb2plY3QuZXhlY3V0ZVRhcmdldCgic3RvcC5qc3I4OCIpOwogICAgIH0KLSAgICAKKwogICAgIHByb3RlY3RlZCB2b2lkIHJlZGVwbG95V2l0aEpTUjg4KCkgewogICAgICAgICBwcm9qZWN0LmV4ZWN1dGVUYXJnZXQoInJlZGVwbG95Lmpzcjg4Iik7CiAgICAgfQotICAgIAorCiAgICAgcHJvdGVjdGVkIHZvaWQgdW5kZXBsb3lXaXRoSlNSODgoKSB7CiAgICAgICAgIHByb2plY3QuZXhlY3V0ZVRhcmdldCgidW5kZXBsb3kuanNyODgiKTsKICAgICB9Ci0gICAgCisKICAgICBwcm90ZWN0ZWQgdm9pZCBydW5Qb3NpdGl2ZShTdHJpbmcgdGVzdFRpdGxlKSB7CiAgICAgICAgIHJ1bih0ZXN0VGl0bGUsICJydW4ucG9zaXRpdmUiKTsKICAgICB9Ci0gICAgCisKICAgICBwcm90ZWN0ZWQgdm9pZCBydW5OZWdhdGl2ZShTdHJpbmcgdGVzdFRpdGxlKSB7CiAgICAgICAgIHJ1bih0ZXN0VGl0bGUsICJydW4ubmVnYXRpdmUiKTsKICAgICB9Ci0gICAgCisKICAgICBwcm90ZWN0ZWQgdm9pZCBydW4oU3RyaW5nIHRlc3RUaXRsZSwgU3RyaW5nIHJ1blRhcmdldCkgewogICAgICAgICBDYWxsVGFyZ2V0IHRhcmdldCA9IG5ldyBDYWxsVGFyZ2V0KCk7CiAgICAgICAgIHRhcmdldC5zZXRQcm9qZWN0KHByb2plY3QpOwpAQCAtMTYwLDcgKzE2MCw3IEBACiAgICAgICAgIGxvZ0lELnNldFZhbHVlKFN0cmluZy52YWx1ZU9mKG5leHRMb2dJRCsrKSk7CiAgICAgICAgIGRlc2NyaXB0aW9uLnNldE5hbWUoImRlc2NyaXB0aW9uIik7CiAgICAgICAgIGRlc2NyaXB0aW9uLnNldFZhbHVlKHRlc3RUaXRsZSk7Ci0gICAgICAgIAorCiAgICAgICAgIHRhcmdldC5leGVjdXRlKCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIvc3RhdGVsZXNzaGVsbG8vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIvc3RhdGVsZXNzaGVsbG8vYnVpbGQueG1sCmluZGV4IDRjMDczZTcuLjBhY2FkZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiL3N0YXRlbGVzc2hlbGxvL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYi9zdGF0ZWxlc3NoZWxsby9idWlsZC54bWwKQEAgLTIwLDM4ICsyMCwzOCBAQAogCiA8IUVOVElUWSBjb21tb25CdWlsZCBTWVNURU0gIi4vLi4vLi4vY29uZmlnL2NvbW1vbi54bWwiPgogXT4KLSAKKwogPHByb2plY3QgbmFtZT0ic3RhdGVsZXNzaGVsbG8iIGRlZmF1bHQ9ImFsbCIgYmFzZWRpcj0iLiI+CiAKLSAJJmNvbW1vbkJ1aWxkOworICAgICAmY29tbW9uQnVpbGQ7CiAgICAgPHByb3BlcnR5IG5hbWU9ImFyY2hpdmVkaXIiIHZhbHVlPSIke2J1aWxkfS9hcmNoaXZlcyIvPgogCiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0TmFtZSIgdmFsdWU9IlN0YXRlbGVzc0hlbGxvRWpiIi8+Ci0JPHRhcmdldCBuYW1lPSJwcmVwYXJlIiBkZXBlbmRzPSJpbml0Ij4KLQkJPHByb3BlcnR5IG5hbWU9InBvcnRhYmxlLmphciIgdmFsdWU9IiR7YXJjaGl2ZWRpcn0vc3RhdGVsZXNzaGVsbG9lamItcG9ydGFibGUuamFyIi8+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJhbGwuamFyIiB2YWx1ZT0iJHthcmNoaXZlZGlyfS9zdGF0ZWxlc3NoZWxsb2VqYi5qYXIiLz4KLQkJPHByb3BlcnR5IG5hbWU9ImRlcGxveXBsYW4uamFyIiB2YWx1ZT0iJHthcmNoaXZlZGlyfS9zdGF0ZWxlc3NoZWxsb2VqYi1wbGFuLmphciIvPgotCQk8bWtkaXIgZGlyPSIke2J1aWxkfSIgLz4KLQkJPG1rZGlyIGRpcj0iJHthcmNoaXZlZGlyfSIgLz4KLQk8L3RhcmdldD4KLQkKLQk8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9InByZXBhcmUiPgotCQk8amF2YWMgc3JjZGlyPSJzdGF0ZWxlc3NoZWxsbyIgZGVzdGRpcj0iJHtidWlsZH0iPgorICAgIDx0YXJnZXQgbmFtZT0icHJlcGFyZSIgZGVwZW5kcz0iaW5pdCI+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwb3J0YWJsZS5qYXIiIHZhbHVlPSIke2FyY2hpdmVkaXJ9L3N0YXRlbGVzc2hlbGxvZWpiLXBvcnRhYmxlLmphciIvPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0iYWxsLmphciIgdmFsdWU9IiR7YXJjaGl2ZWRpcn0vc3RhdGVsZXNzaGVsbG9lamIuamFyIi8+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkZXBsb3lwbGFuLmphciIgdmFsdWU9IiR7YXJjaGl2ZWRpcn0vc3RhdGVsZXNzaGVsbG9lamItcGxhbi5qYXIiLz4KKyAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZH0iIC8+CisgICAgICAgIDxta2RpciBkaXI9IiR7YXJjaGl2ZWRpcn0iIC8+CisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9InByZXBhcmUiPgorICAgICAgICA8amF2YWMgc3JjZGlyPSJzdGF0ZWxlc3NoZWxsbyIgZGVzdGRpcj0iJHtidWlsZH0iPgogICAgICAgICAgICAgICAgICAgICA8Y2xhc3NwYXRoIHJlZmlkPSJnZnYzLmNsYXNzcGF0aCIvPgotCSAgICAgICAgPC9qYXZhYz4JCQotCTwvdGFyZ2V0PgotCQotCTx0YXJnZXQgbmFtZT0iYXNzZW1ibGUiIGRlcGVuZHM9ImNvbXBpbGUiPgotCQk8bWtkaXIgZGlyPSIke2J1aWxkfS9NRVRBLUlORiIvPgotCQk8Y29weSBmaWxlPSJlamItamFyLnhtbCIgdG9kaXI9IiR7YnVpbGR9L01FVEEtSU5GIi8+Ci0JCTxqYXIgZGVzdGZpbGU9IiR7cG9ydGFibGUuamFyfSIgYmFzZWRpcj0iJHtidWlsZH0iIGV4Y2x1ZGVzPSIqKi9hcmNoaXZlcy8qKiIvPgotCQk8Y29weSBmaWxlPSJzdW4tZWpiLWphci54bWwiIHRvZGlyPSIke2J1aWxkfS9NRVRBLUlORiIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0JCTxqYXIgZGVzdGZpbGU9IiR7YWxsLmphcn0iIGJhc2VkaXI9IiR7YnVpbGR9IiBleGNsdWRlcz0iKiovYXJjaGl2ZXMvKioiLz4KLQkJPGphciBkZXN0ZmlsZT0iJHtkZXBsb3lwbGFuLmphcn0iPgotCQkJPGZpbGVzZXQgZGlyPSIke2Jhc2VkaXJ9IiBpbmNsdWRlcz0ic3VuLWVqYi1qYXIueG1sIiBleGNsdWRlcz0iKiovYXJjaGl2ZXMvKioiLz4KLQkJPC9qYXI+Ci0JPC90YXJnZXQ+Ci0JCisgICAgICAgICAgICA8L2phdmFjPgorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZSIgZGVwZW5kcz0iY29tcGlsZSI+CisgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGR9L01FVEEtSU5GIi8+CisgICAgICAgIDxjb3B5IGZpbGU9ImVqYi1qYXIueG1sIiB0b2Rpcj0iJHtidWlsZH0vTUVUQS1JTkYiLz4KKyAgICAgICAgPGphciBkZXN0ZmlsZT0iJHtwb3J0YWJsZS5qYXJ9IiBiYXNlZGlyPSIke2J1aWxkfSIgZXhjbHVkZXM9IioqL2FyY2hpdmVzLyoqIi8+CisgICAgICAgIDxjb3B5IGZpbGU9InN1bi1lamItamFyLnhtbCIgdG9kaXI9IiR7YnVpbGR9L01FVEEtSU5GIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KKyAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthbGwuamFyfSIgYmFzZWRpcj0iJHtidWlsZH0iIGV4Y2x1ZGVzPSIqKi9hcmNoaXZlcy8qKiIvPgorICAgICAgICA8amFyIGRlc3RmaWxlPSIke2RlcGxveXBsYW4uamFyfSI+CisgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YmFzZWRpcn0iIGluY2x1ZGVzPSJzdW4tZWpiLWphci54bWwiIGV4Y2x1ZGVzPSIqKi9hcmNoaXZlcy8qKiIvPgorICAgICAgICA8L2phcj4KKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95LmFzYWRtaW4iIGRlcGVuZHM9InByZXBhcmUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbW1vbi5kZXBsb3kuYXNhZG1pbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiIHZhbHVlPSItLXJldHJpZXZlICR7YXJjaGl2ZWRpcn0gLS1uYW1lICR7dGVzdE5hbWV9ICR7YWxsLmphcn0iLz4KQEAgLTE2MCw3ICsxNjAsNyBAQAogICAgICAgICA8amF2YVdpdGhSZXN1bHQKICAgICAgICAgICAgIGZvcms9InRydWUiCiAgICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiCi0gICAgICAgICAgICBqdm09IiR7SkFWQX0iCQorICAgICAgICAgICAganZtPSIke0pBVkF9IgogICAgICAgICAgICAgY2xhc3NuYW1lPSJzdGFuZGFsb25lY2xpZW50LkhlbGxvQ2xpZW50IgogICAgICAgICAgICAgb3V0cHV0PSIke2J1aWxkfS8ke2xvZy5pZH0ub3V0cHV0LmxvZyIKICAgICAgICAgICAgIHJlc3VsdHByb3BlcnR5PSJyZXN1bHQiPgpAQCAtMTcxLDcgKzE3MSw3IEBACiAgICAgICAgICAgICA8Y2xhc3NwYXRoPgogICAgICAgICAgICAgICAgIDxwYXRoIHJlZmlkPSJnZnYzLmNsYXNzcGF0aCIvPgogICAgICAgICAgICAgICAgIDxwYXRoIGxvY2F0aW9uPSIke2J1aWxkfSIvPgotCQk8cGF0aCBsb2NhdGlvbj0iJHthcmNoaXZlZGlyfS9TdGF0ZWxlc3NIZWxsb0VqYkNsaWVudC5qYXIiLz4KKyAgICAgICAgPHBhdGggbG9jYXRpb249IiR7YXJjaGl2ZWRpcn0vU3RhdGVsZXNzSGVsbG9FamJDbGllbnQuamFyIi8+CiAgICAgICAgICAgICA8L2NsYXNzcGF0aD4KIAogICAgICAgICAgICAgPGFyZyBsaW5lPSIke2FyZy5saXN0fSIvPgpAQCAtMTgxLDggKzE4MSw4IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0icmVzdWx0IiB2YWx1ZT0iJHtyZXN1bHR9Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ibG9nIiB2YWx1ZT0iJHtidWlsZH0vJHtsb2cuaWR9Lm91dHB1dC5sb2ciLz4KICAgICAgICAgPC9hbnRjYWxsPgotCTwvdGFyZ2V0PgotCQkJCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc3NlbWJsZSIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS5hc2FkbWluIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYi9zdGF0ZWxlc3NoZWxsby9zdGFuZGFsb25lY2xpZW50L0hlbGxvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYi9zdGF0ZWxlc3NoZWxsby9zdGFuZGFsb25lY2xpZW50L0hlbGxvQ2xpZW50LmphdmEKaW5kZXggOTgyZTgxZi4uNWFjMzY1MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIvc3RhdGVsZXNzaGVsbG8vc3RhbmRhbG9uZWNsaWVudC9IZWxsb0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiL3N0YXRlbGVzc2hlbGxvL3N0YW5kYWxvbmVjbGllbnQvSGVsbG9DbGllbnQuamF2YQpAQCAtMjgsMTEgKzI4LDExIEBACiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKLQlib29sZWFuIHRlc3RQb3NpdGl2ZSA9IChCb29sZWFuLnZhbHVlT2YoYXJnc1swXSkpLmJvb2xlYW5WYWx1ZSgpOwotCWlmKHRlc3RQb3NpdGl2ZSkKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0IGV4cGVjdHMgc3VjY2Vzc2Z1bCByZXN1bHQiKTsKLQllbHNlCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdCBleHBlY3RlZCB0byBmYWlsIik7CisgICAgYm9vbGVhbiB0ZXN0UG9zaXRpdmUgPSAoQm9vbGVhbi52YWx1ZU9mKGFyZ3NbMF0pKS5ib29sZWFuVmFsdWUoKTsKKyAgICBpZih0ZXN0UG9zaXRpdmUpCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdCBleHBlY3RzIHN1Y2Nlc3NmdWwgcmVzdWx0Iik7CisgICAgZWxzZQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3QgZXhwZWN0ZWQgdG8gZmFpbCIpOwogICAgICAgICB0cnkgewogCiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CkBAIC03NSwyOSArNzUsMjkgQEAKIAogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRmFpbHVyZSEgIENhdWdodCB1bmFza2VkIGZvciBFeGNlcHRpb24iKTsKLQkJICAgIFN5c3RlbS5leGl0KC0xKTsKKyAgICAgICAgICAgIFN5c3RlbS5leGl0KC0xKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oCiAgICAgICAgICAgICAgICAgIkNsaWVudCBpcyBub3cgdHJ5aW5nIHRvIHJlbW92ZSB0aGUgc2Vzc2lvbiBiZWFuXG4iKTsKICAgICAgICAgICAgIGhyLnJlbW92ZSgpOwogICAgICAgICB9IGNhdGNoIChOYW1pbmdFeGNlcHRpb24gbmUpIHsKLQkgICAgaWYodGVzdFBvc2l0aXZlKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQ2F1Z2h0IGV4Y2VwdGlvbiB3aGlsZSBpbml0aWFsaXppbmcgY29udGV4dCA6ICIgKwotCQkJCSAgIG5lLmdldE1lc3NhZ2UoKSArICIgXG4iKTsKLQkJU3lzdGVtLmV4aXQoLTEpOwotCSAgICB9IGVsc2UgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlJlY2QgZXhjZXB0aW9uIGFzIGV4cGVjdGVkIik7Ci0JICAgIH0KKyAgICAgICAgaWYodGVzdFBvc2l0aXZlKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2F1Z2h0IGV4Y2VwdGlvbiB3aGlsZSBpbml0aWFsaXppbmcgY29udGV4dCA6ICIgKworICAgICAgICAgICAgICAgICAgIG5lLmdldE1lc3NhZ2UoKSArICIgXG4iKTsKKyAgICAgICAgU3lzdGVtLmV4aXQoLTEpOworICAgICAgICB9IGVsc2UgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlY2QgZXhjZXB0aW9uIGFzIGV4cGVjdGVkIik7CisgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIHJlKSB7Ci0JICAgIGlmKHRlc3RQb3NpdGl2ZSkgewotCQlyZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCAiU2Vzc2lvbiBiZWFucyBjb3VsZCBub3QgYmUgcmVtb3ZlZCBieSB0aGUgY2xpZW50LlxuIik7Ci0JCVN5c3RlbS5leGl0KC0xKTsKLQkgICAgfSBlbHNlIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJSZWNkIGV4Y2VwdGlvbiBhcyBleHBlY3RlZCIpOwotCSAgICB9Ci0JfQorICAgICAgICBpZih0ZXN0UG9zaXRpdmUpIHsKKyAgICAgICAgcmUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIlNlc3Npb24gYmVhbnMgY291bGQgbm90IGJlIHJlbW92ZWQgYnkgdGhlIGNsaWVudC5cbiIpOworICAgICAgICBTeXN0ZW0uZXhpdCgtMSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVjZCBleGNlcHRpb24gYXMgZXhwZWN0ZWQiKTsKKyAgICAgICAgfQorICAgIH0KICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKAogICAgICAgICAgICAgIlNlc3Npb24gYmVhbiB3YXMgc3VjY2Vzc2Z1bGx5IHJlbW92ZWQgYnkgdGhlIGNsaWVudC5cbiIpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiL3N0YXRlbGVzc2hlbGxvL3N0YXRlbGVzc2hlbGxvL1N0YXRlbGVzc2hlbGxvRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYi9zdGF0ZWxlc3NoZWxsby9zdGF0ZWxlc3NoZWxsby9TdGF0ZWxlc3NoZWxsb0VKQi5qYXZhCmluZGV4IGY0YjYxMWQuLmVjM2Y2OWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiL3N0YXRlbGVzc2hlbGxvL3N0YXRlbGVzc2hlbGxvL1N0YXRlbGVzc2hlbGxvRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIvc3RhdGVsZXNzaGVsbG8vc3RhdGVsZXNzaGVsbG8vU3RhdGVsZXNzaGVsbG9FSkIuamF2YQpAQCAtMTgsNyArMTgsNyBAQAogCiBpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7CiBpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247IAoraW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQmVhbjsKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dDsKIGltcG9ydCBqYWthcnRhLmVqYi5FSkJFeGNlcHRpb247CkBAIC0yNiwxMSArMjYsMTEgQEAKIAogcHVibGljIGNsYXNzIFN0YXRlbGVzc2hlbGxvRUpCIGltcGxlbWVudHMgU2Vzc2lvbkJlYW4gewogICAgIHByaXZhdGUgU2Vzc2lvbkNvbnRleHQgc2M7Ci0gICAgCisKICAgICBwdWJsaWMgU3RhdGVsZXNzaGVsbG9FSkIoKXt9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIGVqYkNyZWF0ZSAhISIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gZWpiQ3JlYXRlICEhIik7CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gaXNTdGF0ZWxlc3NoZWxsbygpIHRocm93cyBFSkJFeGNlcHRpb24gewpAQCAtNTIsNDcgKzUyLDQ3IEBACiAKIAogCi0JRG91YmxlIGQgPSBudWxsOwotCVN0cmluZyBuYW1lID0gbnVsbDsKLQlTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigiU3RhdGVsZXNzaGVsbG8gRUpCIC0gY2hlY2tlZCBlbnZpcm9ubWVudCBwcm9wZXJ0aWVzIGZvciB1c2VyICIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVsZXNzaGVsbG9FSkIgaXMgc2F5aW5nIGhlbGxvIHRvIHVzZXJcbiIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiTm93IGdvaW5nIGZvcndhcmQgd2l0aCByZWFkaW5nIHRoZSBlbnZpcm9ubWVudCBwcm9wZXJ0aWVzXG4iKTsKKyAgICBEb3VibGUgZCA9IG51bGw7CisgICAgU3RyaW5nIG5hbWUgPSBudWxsOworICAgIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCJTdGF0ZWxlc3NoZWxsbyBFSkIgLSBjaGVja2VkIGVudmlyb25tZW50IHByb3BlcnRpZXMgZm9yIHVzZXIgIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZWxlc3NoZWxsb0VKQiBpcyBzYXlpbmcgaGVsbG8gdG8gdXNlclxuIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJOb3cgZ29pbmcgZm9yd2FyZCB3aXRoIHJlYWRpbmcgdGhlIGVudmlyb25tZW50IHByb3BlcnRpZXNcbiIpOwogCi0JdHJ5IHsKLQkgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkgICAgbmFtZSA9IChTdHJpbmcpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi91c2VyIik7Ci0JICAgIGJ1ZmZlci5hcHBlbmQobmFtZSk7Ci0JICAgIGJ1ZmZlci5hcHBlbmQoIlxuYW5kIGZvciBudW1iZXIgd2hpY2ggaXMgPSAiKTsKLQkgICAgZCA9IChEb3VibGUpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9udW1iZXIiKTsKLQkgICAgYnVmZmVyLmFwcGVuZChkKTsKLQkgICAgYnVmZmVyLmFwcGVuZCgiXG4iKTsKLQl9IGNhdGNoKE5hbWluZ0V4Y2VwdGlvbiBlKSB7CisgICAgdHJ5IHsKKyAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgbmFtZSA9IChTdHJpbmcpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi91c2VyIik7CisgICAgICAgIGJ1ZmZlci5hcHBlbmQobmFtZSk7CisgICAgICAgIGJ1ZmZlci5hcHBlbmQoIlxuYW5kIGZvciBudW1iZXIgd2hpY2ggaXMgPSAiKTsKKyAgICAgICAgZCA9IChEb3VibGUpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9udW1iZXIiKTsKKyAgICAgICAgYnVmZmVyLmFwcGVuZChkKTsKKyAgICAgICAgYnVmZmVyLmFwcGVuZCgiXG4iKTsKKyAgICB9IGNhdGNoKE5hbWluZ0V4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7Ci0JfQotCWlmKGQgPT0gbnVsbCkgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJXcm9uZyB2YWx1ZSBmb3IgZW52aXJvbm1lbnQgcHJvcGVydHkiKTsKLQl9Ci0JU3lzdGVtLm91dC5wcmludGxuKGJ1ZmZlcik7CisgICAgfQorICAgIGlmKGQgPT0gbnVsbCkgeworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJXcm9uZyB2YWx1ZSBmb3IgZW52aXJvbm1lbnQgcHJvcGVydHkiKTsKKyAgICB9CisgICAgU3lzdGVtLm91dC5wcmludGxuKGJ1ZmZlcik7CiAgICAgICAgIHJldHVybiBuZXcgU3RyaW5nKGJ1ZmZlcik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBnZXRVc2VyRGVmaW5lZEV4Y2VwdGlvbigpIHRocm93cyBSZW1vdGVFeGNlcHRpb24sIFN0YXRlbGVzc2hlbGxvRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaHJvd2luZyBhIFVzZXIgRGVmaW5lZCBFeGNlcHRpb24iKTsKICAgICAgICAgdGhyb3cgbmV3IFN0YXRlbGVzc2hlbGxvRXhjZXB0aW9uKCJ0ZXN0IGV4Y2VwdGlvbiIpOwotICAgICAgICAKKwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgc2MpIHsKLQkKKwogICAgICAgICB0aGlzLnNjID0gc2M7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7fQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7fQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkge30KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiL3N0YXRlbGVzc2hlbGxvL3N0YXRlbGVzc2hlbGxvL1N0YXRlbGVzc2hlbGxvRXhjZXB0aW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYi9zdGF0ZWxlc3NoZWxsby9zdGF0ZWxlc3NoZWxsby9TdGF0ZWxlc3NoZWxsb0V4Y2VwdGlvbi5qYXZhCmluZGV4IDk0M2ViMzkuLmI4ODI1N2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiL3N0YXRlbGVzc2hlbGxvL3N0YXRlbGVzc2hlbGxvL1N0YXRlbGVzc2hlbGxvRXhjZXB0aW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIvc3RhdGVsZXNzaGVsbG8vc3RhdGVsZXNzaGVsbG8vU3RhdGVsZXNzaGVsbG9FeGNlcHRpb24uamF2YQpAQCAtMTksOSArMTksOSBAQAogaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIAogcHVibGljIGNsYXNzIFN0YXRlbGVzc2hlbGxvRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uIHsKLSAgICAKKwogICAgIHB1YmxpYyBTdGF0ZWxlc3NoZWxsb0V4Y2VwdGlvbihTdHJpbmcgc3RyKSB7Ci0Jc3VwZXIoc3RyKTsKKyAgICBzdXBlcihzdHIpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIvd2Vic2VydmljZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYi93ZWJzZXJ2aWNlL2J1aWxkLnhtbAppbmRleCA1NTAxOGM3Li5iOWYwNTE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYi93ZWJzZXJ2aWNlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYi93ZWJzZXJ2aWNlL2J1aWxkLnhtbApAQCAtMjUsMzYgKzI1LDM2IEBACiAKICAgICAmY29tbW9uQnVpbGQ7CiAgICAgPHByb3BlcnR5IG5hbWU9ImFyY2hpdmVkaXIiIHZhbHVlPSIke2J1aWxkfS9hcmNoaXZlcyIvPgotCQorCiAgICAgPHByb3BlcnR5IG5hbWU9InRlc3ROYW1lIiB2YWx1ZT0iU2F5SGVsbG9XUyIvPgogICAgIDx0YXJnZXQgbmFtZT0icHJlcGFyZSIgZGVwZW5kcz0iaW5pdCI+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJ3c2RsIiB2YWx1ZT0iJHtidWlsZH0vTUVUQS1JTkYvd3NkbCIvPgotCQk8bWtkaXIgZGlyPSIke2J1aWxkfSIgLz4KLQkJPG1rZGlyIGRpcj0iJHt3c2RsfSIvPgotCQk8cHJvcGVydHkgbmFtZT0icG9ydGFibGUuamFyIiB2YWx1ZT0iJHthcmNoaXZlZGlyfS9zYXloZWxsby1wb3J0YWJsZS5qYXIiLz4KLQkJPHByb3BlcnR5IG5hbWU9ImFsbC5qYXIiIHZhbHVlPSIke2FyY2hpdmVkaXJ9L3NheWhlbGxvLmphciIvPgotCQk8cHJvcGVydHkgbmFtZT0iZGVwbG95cGxhbi5qYXIiIHZhbHVlPSIke2FyY2hpdmVkaXJ9L3NheWhlbGxvLWRlcGxveXBsYW4uamFyIi8+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ3c2RsIiB2YWx1ZT0iJHtidWlsZH0vTUVUQS1JTkYvd3NkbCIvPgorICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkfSIgLz4KKyAgICAgICAgPG1rZGlyIGRpcj0iJHt3c2RsfSIvPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0icG9ydGFibGUuamFyIiB2YWx1ZT0iJHthcmNoaXZlZGlyfS9zYXloZWxsby1wb3J0YWJsZS5qYXIiLz4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9ImFsbC5qYXIiIHZhbHVlPSIke2FyY2hpdmVkaXJ9L3NheWhlbGxvLmphciIvPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0iZGVwbG95cGxhbi5qYXIiIHZhbHVlPSIke2FyY2hpdmVkaXJ9L3NheWhlbGxvLWRlcGxveXBsYW4uamFyIi8+CiAgICAgPC90YXJnZXQ+Ci0JCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9InByZXBhcmUiPgotCQk8amF2YWMgc3JjZGlyPSJoZWxsb3NlcnZpY2UiIGRlc3RkaXI9IiR7YnVpbGR9Ij4KKyAgICAgICAgPGphdmFjIHNyY2Rpcj0iaGVsbG9zZXJ2aWNlIiBkZXN0ZGlyPSIke2J1aWxkfSI+CiAgICAgICAgICAgICAgICAgIDxjbGFzc3BhdGggcmVmaWQ9ImdmdjMuY2xhc3NwYXRoIi8+CiAgICAgICAgICAgICAgICAgPC9qYXZhYz4KLQkJPGVjaG8gbWVzc2FnZT0iaW52b2tpbmcgd3Njb21waWxlIHRvIGdlbmVyYXRlIHdzZGwgZmlsZSIvPgotCQk8ZXhlYyBleGVjdXRhYmxlPSIke1dTQ09NUElMRX0iPgotCQkJPGFyZyBsaW5lPSItZGVmaW5lIGNvbmZpZy1pbnRlcmZhY2UueG1sIC1kICR7YnVpbGR9IC1uZCAke3dzZGx9IC1jbGFzc3BhdGggJHtidWlsZH0gLW1hcHBpbmcgJHtidWlsZH0vbWFwcGluZy54bWwiLz4KLQkgCTwvZXhlYz4JCQkJCQorICAgICAgICA8ZWNobyBtZXNzYWdlPSJpbnZva2luZyB3c2NvbXBpbGUgdG8gZ2VuZXJhdGUgd3NkbCBmaWxlIi8+CisgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7V1NDT01QSUxFfSI+CisgICAgICAgICAgICA8YXJnIGxpbmU9Ii1kZWZpbmUgY29uZmlnLWludGVyZmFjZS54bWwgLWQgJHtidWlsZH0gLW5kICR7d3NkbH0gLWNsYXNzcGF0aCAke2J1aWxkfSAtbWFwcGluZyAke2J1aWxkfS9tYXBwaW5nLnhtbCIvPgorICAgICAgICAgPC9leGVjPgogICAgIDwvdGFyZ2V0PgotCQorCiAgICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZSIgZGVwZW5kcz0iY29tcGlsZSI+Ci0JCTxjb3B5IGZpbGU9ImVqYi1qYXIueG1sIiB0b2Rpcj0iJHtidWlsZH0vTUVUQS1JTkYiLz4KLQkJPGNvcHkgZmlsZT0id2Vic2VydmljZXMueG1sIiB0b2Rpcj0iJHtidWlsZH0vTUVUQS1JTkYiLz4KLQkJPGphciBkZXN0ZmlsZT0iJHtwb3J0YWJsZS5qYXJ9IiBiYXNlZGlyPSIke2J1aWxkfSIvPgotCQk8Y29weSBmaWxlPSJzdW4tZWpiLWphci54bWwiIHRvZGlyPSIke2J1aWxkfS9NRVRBLUlORiIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0JCTxqYXIgZGVzdGZpbGU9IiR7YWxsLmphcn0iIGJhc2VkaXI9IiR7YnVpbGR9Ii8+Ci0JCTxqYXIgZGVzdGZpbGU9IiR7ZGVwbG95cGxhbi5qYXJ9Ij4KLQkJICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YmFzZWRpcn0iIGluY2x1ZGVzPSJzdW4tZWpiLWphci54bWwiLz4KLQkJPC9qYXI+CisgICAgICAgIDxjb3B5IGZpbGU9ImVqYi1qYXIueG1sIiB0b2Rpcj0iJHtidWlsZH0vTUVUQS1JTkYiLz4KKyAgICAgICAgPGNvcHkgZmlsZT0id2Vic2VydmljZXMueG1sIiB0b2Rpcj0iJHtidWlsZH0vTUVUQS1JTkYiLz4KKyAgICAgICAgPGphciBkZXN0ZmlsZT0iJHtwb3J0YWJsZS5qYXJ9IiBiYXNlZGlyPSIke2J1aWxkfSIvPgorICAgICAgICA8Y29weSBmaWxlPSJzdW4tZWpiLWphci54bWwiIHRvZGlyPSIke2J1aWxkfS9NRVRBLUlORiIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CisgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YWxsLmphcn0iIGJhc2VkaXI9IiR7YnVpbGR9Ii8+CisgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7ZGVwbG95cGxhbi5qYXJ9Ij4KKyAgICAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YmFzZWRpcn0iIGluY2x1ZGVzPSJzdW4tZWpiLWphci54bWwiLz4KKyAgICAgICAgPC9qYXI+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveS5hc2FkbWluIiBkZXBlbmRzPSJwcmVwYXJlIj4KQEAgLTYyLDEwICs2MiwxMCBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IiB2YWx1ZT0iLS1uYW1lICR7dGVzdE5hbWV9ICR7YWxsLmphcn0iLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0TmFtZSIgdmFsdWU9IiR7dGVzdE5hbWV9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KLQk8ZWNobyBtZXNzYWdlPSJDcmVhdGUgY2xpZW50IHdlYnNlcnZpY2VzIGFydGlmYWN0cyIvPgotCTxleGVjIGV4ZWN1dGFibGU9IiR7V1NDT01QSUxFfSI+Ci0JICAgIDxhcmcgbGluZT0iLWdlbjpjbGllbnQgLWtlZXAgLWQgJHtidWlsZH0gLWNsYXNzcGF0aCAke2J1aWxkfSBjb25maWctaW50ZXJmYWNlLnhtbCIvPgotCTwvZXhlYz4KKyAgICA8ZWNobyBtZXNzYWdlPSJDcmVhdGUgY2xpZW50IHdlYnNlcnZpY2VzIGFydGlmYWN0cyIvPgorICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7V1NDT01QSUxFfSI+CisgICAgICAgIDxhcmcgbGluZT0iLWdlbjpjbGllbnQgLWtlZXAgLWQgJHtidWlsZH0gLWNsYXNzcGF0aCAke2J1aWxkfSBjb25maWctaW50ZXJmYWNlLnhtbCIvPgorICAgIDwvZXhlYz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVkZXBsb3kuYXNhZG1pbiIgZGVwZW5kcz0icHJlcGFyZSI+CkBAIC03MywxMCArNzMsMTAgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIgdmFsdWU9Ii0tbmFtZSAke3Rlc3ROYW1lfSAke2FsbC5qYXJ9Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0idGVzdE5hbWUiIHZhbHVlPSIke3Rlc3ROYW1lfSIvPgogICAgICAgICA8L2FudGNhbGw+Ci0JPGVjaG8gbWVzc2FnZT0iQ3JlYXRlIGNsaWVudCB3ZWJzZXJ2aWNlcyBhcnRpZmFjdHMiLz4KLQk8ZXhlYyBleGVjdXRhYmxlPSIke1dTQ09NUElMRX0iPgotCSAgICA8YXJnIGxpbmU9Ii1nZW46Y2xpZW50IC1rZWVwIC1kICR7YnVpbGR9IC1jbGFzc3BhdGggJHtidWlsZH0gY29uZmlnLWludGVyZmFjZS54bWwiLz4KLQk8L2V4ZWM+CisgICAgPGVjaG8gbWVzc2FnZT0iQ3JlYXRlIGNsaWVudCB3ZWJzZXJ2aWNlcyBhcnRpZmFjdHMiLz4KKyAgICA8ZXhlYyBleGVjdXRhYmxlPSIke1dTQ09NUElMRX0iPgorICAgICAgICA8YXJnIGxpbmU9Ii1nZW46Y2xpZW50IC1rZWVwIC1kICR7YnVpbGR9IC1jbGFzc3BhdGggJHtidWlsZH0gY29uZmlnLWludGVyZmFjZS54bWwiLz4KKyAgICA8L2V4ZWM+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95LmFzYWRtaW4iPgpAQCAtMTQ5LDcgKzE0OSw3IEBACiAgICAgICAgIDxqYXZhV2l0aFJlc3VsdAogICAgICAgICAgICAgZm9yaz0idHJ1ZSIKICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIKLSAgICAgICAgICAgIGp2bT0iJHtKQVZBfSIJCisgICAgICAgICAgICBqdm09IiR7SkFWQX0iCiAgICAgICAgICAgICBjbGFzc25hbWU9InN0YXRpY3N0dWJjbGllbnQuU2F5SGVsbG9DbGllbnQiCiAgICAgICAgICAgICBvdXRwdXQ9IiR7YnVpbGR9LyR7bG9nLmlkfS5vdXRwdXQubG9nIgogICAgICAgICAgICAgcmVzdWx0cHJvcGVydHk9InJlc3VsdCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYi93ZWJzZXJ2aWNlL2NvbmZpZy1pbnRlcmZhY2UueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIvd2Vic2VydmljZS9jb25maWctaW50ZXJmYWNlLnhtbAppbmRleCBhOTlkOWMwLi44OTQ3ODlhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYi93ZWJzZXJ2aWNlL2NvbmZpZy1pbnRlcmZhY2UueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiL3dlYnNlcnZpY2UvY29uZmlnLWludGVyZmFjZS54bWwKQEAgLTE5LDExICsxOSwxMSBAQAogCiA8Y29uZmlndXJhdGlvbgogICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4LXJwYy9yaS9jb25maWciPgotICA8c2VydmljZSAKLSAgICAgIG5hbWU9IlNheUhlbGxvU2VydmljZSIgCi0gICAgICB0YXJnZXROYW1lc3BhY2U9InVybjpEZXBsb3ltZW50V2ViU2VydmljZVRlc3QiIAotICAgICAgdHlwZU5hbWVzcGFjZT0idXJuOkRlcGxveW1lbnRXZWJTZXJ2aWNlVGVzdCIgCisgIDxzZXJ2aWNlCisgICAgICBuYW1lPSJTYXlIZWxsb1NlcnZpY2UiCisgICAgICB0YXJnZXROYW1lc3BhY2U9InVybjpEZXBsb3ltZW50V2ViU2VydmljZVRlc3QiCisgICAgICB0eXBlTmFtZXNwYWNlPSJ1cm46RGVwbG95bWVudFdlYlNlcnZpY2VUZXN0IgogICAgICAgcGFja2FnZU5hbWU9ImhlbGxvc2VydmljZSI+CiAgICAgICA8aW50ZXJmYWNlIG5hbWU9ImhlbGxvc2VydmljZS5TYXlIZWxsbyIvPgogICA8L3NlcnZpY2U+Ci08L2NvbmZpZ3VyYXRpb24+IAorPC9jb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIvd2Vic2VydmljZS9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiL3dlYnNlcnZpY2UvZWpiLWphci54bWwKaW5kZXggZmExOGVkZS4uZjJmMTVjYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIvd2Vic2VydmljZS9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYi93ZWJzZXJ2aWNlL2VqYi1qYXIueG1sCkBAIC0xOSwxNCArMTksMTQgQEAKIAogPGVqYi1qYXIgdmVyc2lvbj0iMi4xIiB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvZWpiLWphcl8yXzEueHNkIj4KIAotCTxkaXNwbGF5LW5hbWU+U2F5SGVsbG9KQVI8L2Rpc3BsYXktbmFtZT4KLQk8ZW50ZXJwcmlzZS1iZWFucz4KLQkJPHNlc3Npb24+Ci0JCQk8ZWpiLW5hbWU+U2F5SGVsbG9FSkI8L2VqYi1uYW1lPgotCQkJPHNlcnZpY2UtZW5kcG9pbnQ+aGVsbG9zZXJ2aWNlLlNheUhlbGxvPC9zZXJ2aWNlLWVuZHBvaW50PgotCQkJPGVqYi1jbGFzcz5oZWxsb3NlcnZpY2UuU2F5SGVsbG9FSkI8L2VqYi1jbGFzcz4KLQkJCTxzZXNzaW9uLXR5cGU+U3RhdGVsZXNzPC9zZXNzaW9uLXR5cGU+Ci0JCQk8dHJhbnNhY3Rpb24tdHlwZT5Db250YWluZXI8L3RyYW5zYWN0aW9uLXR5cGU+Ci0JCTwvc2Vzc2lvbj4KLQk8L2VudGVycHJpc2UtYmVhbnM+CisgICAgPGRpc3BsYXktbmFtZT5TYXlIZWxsb0pBUjwvZGlzcGxheS1uYW1lPgorICAgIDxlbnRlcnByaXNlLWJlYW5zPgorICAgICAgICA8c2Vzc2lvbj4KKyAgICAgICAgICAgIDxlamItbmFtZT5TYXlIZWxsb0VKQjwvZWpiLW5hbWU+CisgICAgICAgICAgICA8c2VydmljZS1lbmRwb2ludD5oZWxsb3NlcnZpY2UuU2F5SGVsbG88L3NlcnZpY2UtZW5kcG9pbnQ+CisgICAgICAgICAgICA8ZWpiLWNsYXNzPmhlbGxvc2VydmljZS5TYXlIZWxsb0VKQjwvZWpiLWNsYXNzPgorICAgICAgICAgICAgPHNlc3Npb24tdHlwZT5TdGF0ZWxlc3M8L3Nlc3Npb24tdHlwZT4KKyAgICAgICAgICAgIDx0cmFuc2FjdGlvbi10eXBlPkNvbnRhaW5lcjwvdHJhbnNhY3Rpb24tdHlwZT4KKyAgICAgICAgPC9zZXNzaW9uPgorICAgIDwvZW50ZXJwcmlzZS1iZWFucz4KIDwvZWpiLWphcj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiL3dlYnNlcnZpY2UvaGVsbG9zZXJ2aWNlL1NheUhlbGxvLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYi93ZWJzZXJ2aWNlL2hlbGxvc2VydmljZS9TYXlIZWxsby5qYXZhCmluZGV4IDM0ZDBiOWEuLmI4MmM5MTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiL3dlYnNlcnZpY2UvaGVsbG9zZXJ2aWNlL1NheUhlbGxvLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIvd2Vic2VydmljZS9oZWxsb3NlcnZpY2UvU2F5SGVsbG8uamF2YQpAQCAtMTUsMTEgKzE1LDExIEBACiAgKi8KIAogcGFja2FnZSBoZWxsb3NlcnZpY2U7Ci0gCisKIGltcG9ydCBqYXZhLnJtaS5SZW1vdGU7CiBpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogCiBwdWJsaWMgaW50ZXJmYWNlIFNheUhlbGxvICBleHRlbmRzIFJlbW90ZSB7Ci0JcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgbmFtZSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyBuYW1lKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogfQotICAJCisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiL3dlYnNlcnZpY2UvaGVsbG9zZXJ2aWNlL1NheUhlbGxvRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYi93ZWJzZXJ2aWNlL2hlbGxvc2VydmljZS9TYXlIZWxsb0VKQi5qYXZhCmluZGV4IDQ2ZTA4ZGMuLjJjZWJjODggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiL3dlYnNlcnZpY2UvaGVsbG9zZXJ2aWNlL1NheUhlbGxvRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIvd2Vic2VydmljZS9oZWxsb3NlcnZpY2UvU2F5SGVsbG9FSkIuamF2YQpAQCAtMjEsMjEgKzIxLDIxIEBACiAKIHB1YmxpYyBjbGFzcyBTYXlIZWxsb0VKQiBpbXBsZW1lbnRzIFNlc3Npb25CZWFuIHsKIAotCXByaXZhdGUgU2Vzc2lvbkNvbnRleHQgc2M7CisgICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBzYzsKIAotCXB1YmxpYyBTYXlIZWxsb0VKQigpIHt9CisgICAgcHVibGljIFNheUhlbGxvRUpCKCkge30KIAotCXB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBDcmVhdGVFeGNlcHRpb24ge30KKyAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHt9CiAKLQlwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyBzKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLQkJcmV0dXJuICJIZWxsbyBFSkIgcmV0dXJucyB5b3VyIEhlbGxvIDogIiArIHM7Ci0JfQorICAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIHMpIHRocm93cyBSZW1vdGVFeGNlcHRpb24geworICAgICAgICByZXR1cm4gIkhlbGxvIEVKQiByZXR1cm5zIHlvdXIgSGVsbG8gOiAiICsgczsKKyAgICB9CiAKLQlwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgewotCQkJCXRoaXMuc2MgPSBzYzsKLQl9CisgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgc2MpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnNjID0gc2M7CisgICAgfQogCi0JcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7fQotCXB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkge30KLQlwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7fQotfSAKKyAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHt9CisgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7fQorICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHt9Cit9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYi93ZWJzZXJ2aWNlL3N0YXRpY3N0dWJjbGllbnQvU2F5SGVsbG9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiL3dlYnNlcnZpY2Uvc3RhdGljc3R1YmNsaWVudC9TYXlIZWxsb0NsaWVudC5qYXZhCmluZGV4IDQ2YzQ3MmEuLjU1NjAxZmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiL3dlYnNlcnZpY2Uvc3RhdGljc3R1YmNsaWVudC9TYXlIZWxsb0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiL3dlYnNlcnZpY2Uvc3RhdGljc3R1YmNsaWVudC9TYXlIZWxsb0NsaWVudC5qYXZhCkBAIC0yNCwyNSArMjQsMjUgQEAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbmRwb2ludCBhZGRyZXNzID0gIiArIGFyZ3NbMF0pOwotCQlib29sZWFuIHRlc3RQb3NpdGl2ZSA9IChCb29sZWFuLnZhbHVlT2YoYXJnc1sxXSkpLmJvb2xlYW5WYWx1ZSgpOworICAgICAgICBib29sZWFuIHRlc3RQb3NpdGl2ZSA9IChCb29sZWFuLnZhbHVlT2YoYXJnc1sxXSkpLmJvb2xlYW5WYWx1ZSgpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgU3R1YiBzdHViID0gY3JlYXRlUHJveHkoKTsKICAgICAgICAgICAgIHN0dWIuX3NldFByb3BlcnR5Ci0gICAgICAgICAgICAgIChqYXZheC54bWwucnBjLlN0dWIuRU5EUE9JTlRfQUREUkVTU19QUk9QRVJUWSwgYXJnc1swXSk7IAotCQkJU2F5SGVsbG8gaGVsbG8gPSAoU2F5SGVsbG8pc3R1YjsKKyAgICAgICAgICAgICAgKGphdmF4LnhtbC5ycGMuU3R1Yi5FTkRQT0lOVF9BRERSRVNTX1BST1BFUlRZLCBhcmdzWzBdKTsKKyAgICAgICAgICAgIFNheUhlbGxvIGhlbGxvID0gKFNheUhlbGxvKXN0dWI7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaGVsbG8uc2F5SGVsbG8oIkhpIFRoZXJlIGVqYiBlbmRwb2ludCAhISEiKSk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCSAgICAJaWYodGVzdFBvc2l0aXZlKSB7Ci0JCQkJZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQkJU3lzdGVtLmV4aXQoLTEpOwotCSAgICAJfSBlbHNlIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkV4Y2VwdGlvbiByZWNkIGFzIGV4cGVjdGVkIik7Ci0JICAgIAl9Ci0JCX0KLQkJU3lzdGVtLmV4aXQoMCk7Ci0gICAgfSAgICAKKyAgICAgICAgICAgIGlmKHRlc3RQb3NpdGl2ZSkgeworICAgICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAgICAgICAgIFN5c3RlbS5leGl0KC0xKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGNlcHRpb24gcmVjZCBhcyBleHBlY3RlZCIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIFN5c3RlbS5leGl0KDApOworICAgIH0KIAogICAgIHByaXZhdGUgc3RhdGljIFN0dWIgY3JlYXRlUHJveHkoKSB7CiAgICAgICAgIHJldHVybiAoU3R1YikgKG5ldyBTYXlIZWxsb1NlcnZpY2VfSW1wbCgpLmdldFNheUhlbGxvUG9ydCgpKTsKICAgICB9Ci19IAorfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIvd2Vic2VydmljZS9zdW4tZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYi93ZWJzZXJ2aWNlL3N1bi1lamItamFyLnhtbAppbmRleCAyNTBmZDYxLi4yZmY4YWJhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYi93ZWJzZXJ2aWNlL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYi93ZWJzZXJ2aWNlL3N1bi1lamItamFyLnhtbApAQCAtMTksMTUgKzE5LDE1IEBACiAtLT4KIAogPHN1bi1lamItamFyPgotCTxlbnRlcnByaXNlLWJlYW5zPgotCQk8bmFtZT5TYXlIZWxsb0pBUjwvbmFtZT4KLQkJPGVqYj4KLQkJCTxlamItbmFtZT5TYXlIZWxsb0VKQjwvZWpiLW5hbWU+Ci0JCQk8am5kaS1uYW1lPlNheUhlbGxvRUpCPC9qbmRpLW5hbWU+Ci0JCQk8d2Vic2VydmljZS1lbmRwb2ludD4KLQkJCQk8cG9ydC1jb21wb25lbnQtbmFtZT5TYXlIZWxsb1BvcnQ8L3BvcnQtY29tcG9uZW50LW5hbWU+Ci0JCQkJPGVuZHBvaW50LWFkZHJlc3MtdXJpPmVqYi9zYXloZWxsbzwvZW5kcG9pbnQtYWRkcmVzcy11cmk+Ci0JCQk8L3dlYnNlcnZpY2UtZW5kcG9pbnQ+Ci0JCTwvZWpiPgotCTwvZW50ZXJwcmlzZS1iZWFucz4KKyAgICA8ZW50ZXJwcmlzZS1iZWFucz4KKyAgICAgICAgPG5hbWU+U2F5SGVsbG9KQVI8L25hbWU+CisgICAgICAgIDxlamI+CisgICAgICAgICAgICA8ZWpiLW5hbWU+U2F5SGVsbG9FSkI8L2VqYi1uYW1lPgorICAgICAgICAgICAgPGpuZGktbmFtZT5TYXlIZWxsb0VKQjwvam5kaS1uYW1lPgorICAgICAgICAgICAgPHdlYnNlcnZpY2UtZW5kcG9pbnQ+CisgICAgICAgICAgICAgICAgPHBvcnQtY29tcG9uZW50LW5hbWU+U2F5SGVsbG9Qb3J0PC9wb3J0LWNvbXBvbmVudC1uYW1lPgorICAgICAgICAgICAgICAgIDxlbmRwb2ludC1hZGRyZXNzLXVyaT5lamIvc2F5aGVsbG88L2VuZHBvaW50LWFkZHJlc3MtdXJpPgorICAgICAgICAgICAgPC93ZWJzZXJ2aWNlLWVuZHBvaW50PgorICAgICAgICA8L2VqYj4KKyAgICA8L2VudGVycHJpc2UtYmVhbnM+CiA8L3N1bi1lamItamFyPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2J1aWxkLnhtbAppbmRleCBlYjY4YTlhLi45ODJhZTRiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2J1aWxkLnhtbApAQCAtMjMsMTQgKzIzLDE0IEBACiAKIDxwcm9qZWN0IG5hbWU9ImVqYjMwIiBkZWZhdWx0PSJhbGwiIGJhc2VkaXI9Ii4iPgogCi0JJmNvbW1vbkJ1aWxkOworICAgICZjb21tb25CdWlsZDsKIAotCTx0YXJnZXQgbmFtZT0icHJpdmF0ZS1hbGwiPgotCQk8YW50IGRpcj0iZWFyIiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L2VhciIvPgotCQk8L2FudD4KLQkJPGFudCBkaXI9IndhciIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS93YXIiLz4KLQkJPC9hbnQ+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCI+CisgICAgICAgIDxhbnQgZGlyPSJlYXIiIHRhcmdldD0icHJpdmF0ZS1hbGwiPgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0vZWFyIi8+CisgICAgICAgIDwvYW50PgorICAgICAgICA8YW50IGRpcj0id2FyIiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L3dhciIvPgorICAgICAgICA8L2FudD4KKyAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL2J1aWxkLnhtbAppbmRleCA5N2Y5MTE1Li4zN2VlMDdhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvYnVpbGQueG1sCkBAIC0yMywyOCArMjMsMjggQEAKIAogPHByb2plY3QgbmFtZT0iZWpiMzAiIGRlZmF1bHQ9ImFsbCIgYmFzZWRpcj0iLiI+CiAKLQkmY29tbW9uQnVpbGQ7CisgICAgJmNvbW1vbkJ1aWxkOwogCi0JPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCI+Ci0JCTxhbnQgZGlyPSJzZXNzaW9uIiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L3Nlc3Npb24iLz4KLQkJPC9hbnQ+Ci0JCTxhbnQgZGlyPSJzZXNzaW9uMiIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9zZXNzaW9uMiIvPgotCQk8L2FudD4KLQkJPGFudCBkaXI9Im1kYiIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9tZGIiLz4KLQkJPC9hbnQ+CisgICAgPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCI+CisgICAgICAgIDxhbnQgZGlyPSJzZXNzaW9uIiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L3Nlc3Npb24iLz4KKyAgICAgICAgPC9hbnQ+CisgICAgICAgIDxhbnQgZGlyPSJzZXNzaW9uMiIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9zZXNzaW9uMiIvPgorICAgICAgICA8L2FudD4KKyAgICAgICAgPGFudCBkaXI9Im1kYiIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9tZGIiLz4KKyAgICAgICAgPC9hbnQ+CiA8IS0tCi0JCTxhbnQgZGlyPSJzZXNzaW9uMyIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9zZXNzaW9uMyIvPgotCQk8L2FudD4KKyAgICAgICAgPGFudCBkaXI9InNlc3Npb24zIiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L3Nlc3Npb24zIi8+CisgICAgICAgIDwvYW50PgogLS0+Ci0JCTxhbnQgZGlyPSJzZWN1cml0eSIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9zZWN1cml0eSIvPgotCQk8L2FudD4KLQkJPGFudCBkaXI9InhtbG92ZXJyaWRlIiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L3htbG92ZXJyaWRlIi8+Ci0JCTwvYW50PgotCTwvdGFyZ2V0PgorICAgICAgICA8YW50IGRpcj0ic2VjdXJpdHkiIHRhcmdldD0icHJpdmF0ZS1hbGwiPgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0vc2VjdXJpdHkiLz4KKyAgICAgICAgPC9hbnQ+CisgICAgICAgIDxhbnQgZGlyPSJ4bWxvdmVycmlkZSIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS94bWxvdmVycmlkZSIvPgorICAgICAgICA8L2FudD4KKyAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL21kYi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9tZGIvYnVpbGQueG1sCmluZGV4IDQyODY4M2MuLmJiMTliODggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL21kYi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvbWRiL2J1aWxkLnhtbApAQCAtMjMsMTEgKzIzLDExIEBACiAKIDxwcm9qZWN0IG5hbWU9Im1kYiIgZGVmYXVsdD0iYWxsIiBiYXNlZGlyPSIuIj4KIAotCSZjb21tb25CdWlsZDsKKyAgICAmY29tbW9uQnVpbGQ7CiAKLQk8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIiBpZj0iUEUiPgotCQk8YW50IGRpcj0id2ViY2xpZW50IiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L3dlYmNsaWVudCIvPgotCQk8L2FudD4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIiBpZj0iUEUiPgorICAgICAgICA8YW50IGRpcj0id2ViY2xpZW50IiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L3dlYmNsaWVudCIvPgorICAgICAgICA8L2FudD4KKyAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL21kYi93ZWJjbGllbnQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvbWRiL3dlYmNsaWVudC9idWlsZC54bWwKaW5kZXggODBjOGIwNS4uNzZhMmMwNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvbWRiL3dlYmNsaWVudC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvbWRiL3dlYmNsaWVudC9idWlsZC54bWwKQEAgLTUwLDcgKzUwLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICA8amFyIGRlc3RmaWxlPSIke2VqYi5qYXJ9Ij4KICAgICAgICAgICAgIDxtZXRhaW5mIGZpbGU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci0gICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGR9IiBleGNsdWRlcz0iKiovU2VydmxldC5jbGFzcywgKiovVGVzdENsaWVudC5jbGFzcyIvPiAgIAorICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkfSIgZXhjbHVkZXM9IioqL1NlcnZsZXQuY2xhc3MsICoqL1Rlc3RDbGllbnQuY2xhc3MiLz4KICAgICAgICAgPC9qYXI+CiAKICAgICAgICAgPHdhciBkZXN0ZmlsZT0iJHt3ZWIud2FyfSIgd2VieG1sPSJkZXNjcmlwdG9yL3dlYi54bWwiPgpAQCAtMTI5LDE5ICsxMjksMTkgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveS5qbXMucXVldWVzIiBkZXBlbmRzPSJwcmVwYXJlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21tb24uY3JlYXRlLmptcy5jb25uZWN0aW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqbXMuZmFjdG9yeS50eXBlIiB2YWx1ZT0iamFrYXJ0YS5qbXMuUXVldWVDb25uZWN0aW9uRmFjdG9yeSIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imptcy5mYWN0b3J5Lm5hbWUiIHZhbHVlPSJqbXMvZWpiX2VqYjMwX2hlbGxvX21kYl9RQ0YiLz4gICAgICAgICAgIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imptcy5mYWN0b3J5Lm5hbWUiIHZhbHVlPSJqbXMvZWpiX2VqYjMwX2hlbGxvX21kYl9RQ0YiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbW1vbi5jcmVhdGUuam1zLnJlc291cmNlIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJkZXN0LnR5cGUiIHZhbHVlPSJxdWV1ZSIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImRlc3QubmFtZSIgdmFsdWU9ImVqYl9lamIzMF9oZWxsb19tZGJfSW5RdWV1ZSIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InJlcy50eXBlIiB2YWx1ZT0iamFrYXJ0YS5qbXMuUXVldWUiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqbXMucmVzb3VyY2UubmFtZSIgdmFsdWU9Imptcy9lamJfZWpiMzBfaGVsbG9fbWRiX0luUXVldWUiLz4gIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imptcy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iam1zL2VqYl9lamIzMF9oZWxsb19tZGJfSW5RdWV1ZSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tbW9uLmNyZWF0ZS5qbXMucmVzb3VyY2UiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImRlc3QudHlwZSIgdmFsdWU9InF1ZXVlIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZGVzdC5uYW1lIiB2YWx1ZT0iZWpiX2VqYjMwX2hlbGxvX21kYl9PdXRRdWV1ZSIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InJlcy50eXBlIiB2YWx1ZT0iamFrYXJ0YS5qbXMuUXVldWUiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqbXMucmVzb3VyY2UubmFtZSIgdmFsdWU9Imptcy9lamJfZWpiMzBfaGVsbG9fbWRiX091dFF1ZXVlIi8+ICAgICAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqbXMucmVzb3VyY2UubmFtZSIgdmFsdWU9Imptcy9lamJfZWpiMzBfaGVsbG9fbWRiX091dFF1ZXVlIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvbWRiL3dlYmNsaWVudC9lamIvSGVsbG8xLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9tZGIvd2ViY2xpZW50L2VqYi9IZWxsbzEuamF2YQppbmRleCA4NjE1MThiLi5mY2NiYWVkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9tZGIvd2ViY2xpZW50L2VqYi9IZWxsbzEuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9tZGIvd2ViY2xpZW50L2VqYi9IZWxsbzEuamF2YQpAQCAtMTksNSArMTksNSBAQAogcHVibGljIGludGVyZmFjZSBIZWxsbzEgewogCiAgICAgcHVibGljIHZvaWQgaGVsbG8oU3RyaW5nIHMpOwotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9tZGIvd2ViY2xpZW50L2VqYi9IZWxsb1N0YXRlZnVsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9tZGIvd2ViY2xpZW50L2VqYi9IZWxsb1N0YXRlZnVsLmphdmEKaW5kZXggNjJiMThjNS4uY2RkMzNmZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvbWRiL3dlYmNsaWVudC9lamIvSGVsbG9TdGF0ZWZ1bC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL21kYi93ZWJjbGllbnQvZWpiL0hlbGxvU3RhdGVmdWwuamF2YQpAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnKTsKICAgICB9CiAgICAgQFByZURlc3Ryb3kgcHVibGljIHZvaWQgbXlQcmVEZXN0cm95TWV0aG9kKCkgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBSRS1ERVNUUk9ZIGNhbGxiYWNrIHJlY2VpdmVkIGluICIgKyBtc2cpOyAgICAgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUFJFLURFU1RST1kgY2FsbGJhY2sgcmVjZWl2ZWQgaW4gIiArIG1zZyk7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9tZGIvd2ViY2xpZW50L2VqYi9NZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvbWRiL3dlYmNsaWVudC9lamIvTWVzc2FnZUJlYW4uamF2YQppbmRleCBjNzE4OWZmLi4yYTdlMzVlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9tZGIvd2ViY2xpZW50L2VqYi9NZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL21kYi93ZWJjbGllbnQvZWpiL01lc3NhZ2VCZWFuLmphdmEKQEAgLTQyLDcgKzQyLDcgQEAKICAgICBARUpCIHByaXZhdGUgSGVsbG8xIGhlbGxvMTsKICAgICBARUpCIHByaXZhdGUgSGVsbG8yIGhlbGxvMjsKIAotICAgIEBSZXNvdXJjZShuYW1lPSJqbXMvTXlRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IikgCisgICAgQFJlc291cmNlKG5hbWU9Imptcy9NeVF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkiKQogICAgIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcWNGYWN0b3J5OwogCiAgICAgQFJlc291cmNlIFF1ZXVlIGNsaWVudFF1ZXVlOwpAQCAtNTIsNyArNTIsNyBAQAogCiAgICAgICAgIFF1ZXVlQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gbnVsbDsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxpbmcgaGVsbG8xIHN0YXRlbGVzcyBiZWFuIik7CiAgICAgICAgICAgICBoZWxsbzEuaGVsbG8oImxvY2FsIGVqYjMuMCBzdGF0ZWxlc3MiKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbGluZyBoZWxsbzIgc3RhdGVmdWwgYmVhbiIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvbWRiL3dlYmNsaWVudC9zZXJ2bGV0L1NlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL21kYi93ZWJjbGllbnQvc2VydmxldC9TZXJ2bGV0LmphdmEKaW5kZXggOTZiMDZhZC4uZDNiYmExMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvbWRiL3dlYmNsaWVudC9zZXJ2bGV0L1NlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9tZGIvd2ViY2xpZW50L3NlcnZsZXQvU2VydmxldC5qYXZhCkBAIC0yNiwyNiArMjYsMjYgQEAKIAogICAgIEBSZXNvdXJjZShuYW1lPSJGb29DRiIpCiAgICAgcHJpdmF0ZSBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHF1ZXVlQ29uRmFjdG9yeTsKLSAgICAKLSAgICBAUmVzb3VyY2UobmFtZT0iTXNnQmVhblF1ZXVlIikgCisKKyAgICBAUmVzb3VyY2UobmFtZT0iTXNnQmVhblF1ZXVlIikKICAgICBwcml2YXRlIGpha2FydGEuam1zLlF1ZXVlIG1zZ0JlYW5RdWV1ZTsKLSAgICAKKwogICAgIEBSZXNvdXJjZShuYW1lPSJDbGllbnRRdWV1ZSIpCiAgICAgcHJpdmF0ZSBqYWthcnRhLmptcy5RdWV1ZSBjbGllbnRRdWV1ZTsKLSAgICAKKwogICAgIHByaXZhdGUgUXVldWVDb25uZWN0aW9uIHF1ZXVlQ29uOwogICAgIHByaXZhdGUgUXVldWVTZXNzaW9uIHF1ZXVlU2Vzc2lvbjsKICAgICBwcml2YXRlIFF1ZXVlU2VuZGVyIHF1ZXVlU2VuZGVyOwogICAgIHByaXZhdGUgUXVldWVSZWNlaXZlciBxdWV1ZVJlY2VpdmVyOwogCi0gICAgcHJpdmF0ZSBpbnQgbnVtTWVzc2FnZXMgPSAxOyAKKyAgICBwcml2YXRlIGludCBudW1NZXNzYWdlcyA9IDE7CiAgICAgLy8gaW4gbWlsbGktc2Vjb25kcwogICAgIHByaXZhdGUgc3RhdGljIGxvbmcgVElNRU9VVCA9IDkwMDAwOwogCiAKIAogICAgIHB1YmxpYyB2b2lkICBpbml0KCkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBzdXBlci5pbml0KCk7CiAgICAgICAgIGxvZygiaW5pdCgpLi4uIik7CiAgICAgfQpAQCAtNjAsOSArNjAsOSBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXJ2aWNlICggSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSAsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCApIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgICAgICAgIAorCiAgICAgICAgIGxvZygic2VydmljZSgpLi4uIik7CiAKICAgICAgICAgdHJ5IHsKQEAgLTc2LDE1ICs3NiwxNSBAQAogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxwPiIpOwogCiAgICAgICAgICAgICBxdWV1ZUNvbiA9IHF1ZXVlQ29uRmFjdG9yeS5jcmVhdGVRdWV1ZUNvbm5lY3Rpb24oKTsKLSAgICAgICAgCisKICAgICAgICAgICAgIHF1ZXVlU2Vzc2lvbiA9IHF1ZXVlQ29uLmNyZWF0ZVF1ZXVlU2Vzc2lvbgogICAgICAgICAgICAgICAgIChmYWxzZSwgU2Vzc2lvbi5BVVRPX0FDS05PV0xFREdFKTsKLSAgICAgICAgCisKICAgICAgICAgICAgIC8vIFByb2R1Y2VyIHdpbGwgYmUgc3BlY2lmaWVkIHdoZW4gYWN0dWFsIG1zZyBpcyBzZW50LgogICAgICAgICAgICAgcXVldWVTZW5kZXIgPSBxdWV1ZVNlc3Npb24uY3JlYXRlU2VuZGVyKG51bGwpOwotICAgICAgICAKKwogICAgICAgICAgICAgcXVldWVSZWNlaXZlciA9IHF1ZXVlU2Vzc2lvbi5jcmVhdGVSZWNlaXZlcihjbGllbnRRdWV1ZSk7Ci0gICAgICAgIAorCiAgICAgICAgICAgICBxdWV1ZUNvbi5zdGFydCgpOwogCiAKQEAgLTExNiwxMCArMTE2LDEwIEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihleCk7CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICBjbGVhbnVwKCk7Ci0gICAgICAgIH0gCisgICAgICAgIH0KICAgICB9CiAKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGNsZWFudXAoKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpZiggcXVldWVDb24gIT0gbnVsbCApIHsKQEAgLTEzMyw4ICsxMzMsOCBAQAogICAgIHB1YmxpYyB2b2lkICBkZXN0cm95KCkgewogICAgICAgICBsb2coImRlc3Ryb3koKS4uLiIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGxvZyAoU3RyaW5nIG1lc3NhZ2UpIHsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlt3ZWJjbGllbnQgU2VydmxldF06OiAiICsgbWVzc2FnZSk7Ci0gICAgfSAgCisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvbWRiL3dlYmNsaWVudC9zZXJ2bGV0L1Rlc3RDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL21kYi93ZWJjbGllbnQvc2VydmxldC9UZXN0Q2xpZW50LmphdmEKaW5kZXggZmRjMjc4OC4uMmY1YTkxNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvbWRiL3dlYmNsaWVudC9zZXJ2bGV0L1Rlc3RDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9tZGIvd2ViY2xpZW50L3NlcnZsZXQvVGVzdENsaWVudC5qYXZhCkBAIC0xNCw3ICsxNCw3IEBACiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKICAqLwogCi1wYWNrYWdlIGNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaGVsbG8ubWRiOyAKK3BhY2thZ2UgY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5oZWxsby5tZGI7CiAKIGltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOwogaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CkBAIC0yOSw3ICsyOSw3IEBACiAgICAgICAgIFRlc3RDbGllbnQgY2xpZW50ID0gbmV3IFRlc3RDbGllbnQoKTsKICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIFN0cmluZyB1cmwgPSBhcmdzWzBdOwpAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICAgICAgICAgIGxvZygiQ2F1Z2h0IEVYUEVDVEVEIElPRXhjZXB0aW9uOiAiICsgZXgpOwogICAgICAgICAgICAgICAgIHBhc3MoKTsKICAgICAgICAgICAgIH0KLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZWN1cml0eS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZWN1cml0eS9idWlsZC54bWwKaW5kZXggOTJhMzYzNC4uZDVkNzc5ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2VjdXJpdHkvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3NlY3VyaXR5L2J1aWxkLnhtbApAQCAtMjcsNyArMjcsNyBAQAogCiAgICAgPHByb3BlcnR5IG5hbWU9InRlc3ROYW1lIiB2YWx1ZT0iZGVwbG95bWVudC1lamIzMC1lYXItc2VjdXJpdHkiLz4KICAgICA8cHJvcGVydHkgbmFtZT0iYXJjaGl2ZWRpciIgdmFsdWU9IiR7YnVpbGR9L2FyY2hpdmVzIi8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InByZXBhcmUiIGRlcGVuZHM9ImluaXQiPgogICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkfSIvPgogICAgICAgICA8bWtkaXIgZGlyPSIke2FyY2hpdmVkaXJ9Ii8+CkBAIC00OCw3ICs0OCw3IEBACiAgICAgICAgICA8Y2xhc3NwYXRoIHJlZmlkPSJnZnYzLmNsYXNzcGF0aCIvPgogICAgICAgICAgPC9qYXZhYz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLnVzZXIiIGRlcGVuZHM9InNldEFzYWRtaW5BcmdzV2l0aG91dFBhc3N3b3JkIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21tb24uY3JlYXRldXNlci5hc2FkbWluIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIKQEAgLTc4LDcgKzc4LDcgQEAKICAgICAgICAgICAgICAgICBleGNsdWRlcz0iKiovQ2xpZW50LmNsYXNzLCoqL0NsaWVudFN1cGVyLmNsYXNzLCoqL1NlcnZsZXQuY2xhc3MsICoqL015RmlsdGVyLmNsYXNzIi8+CiAKICAgICAgICAgPHdhciBkZXN0ZmlsZT0iJHt3ZWIud2FyfSIgd2VieG1sPSJkZXNjcmlwdG9yL3dlYi54bWwiPgotICAgICAgICAgICAgPGNsYXNzZXMgZGlyPSIke2J1aWxkfSIgCisgICAgICAgICAgICA8Y2xhc3NlcyBkaXI9IiR7YnVpbGR9IgogICAgICAgICAgICAgICAgIGV4Y2x1ZGVzPSIqKi9DbGllbnQuY2xhc3MsICoqLypFSkIuY2xhc3MsICoqLyouamFyIi8+CiAgICAgICAgIDwvd2FyPgogCkBAIC05Miw4ICs5Miw4IEBACiAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogICAgICAgICAgICAgPC9tZXRhaW5mPgogICAgICAgICA8L2Vhcj4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveS5hc2FkbWluIiBkZXBlbmRzPSJwcmVwYXJlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21tb24uZGVwbG95LmFzYWRtaW4iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IiB2YWx1ZT0iLS1yZXRyaWV2ZSAke2FyY2hpdmVkaXJ9IC0tbmFtZSAke3Rlc3ROYW1lfSAke2FsbC5lYXJ9Ii8+CkBAIC0xMTMsNyArMTEzLDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIgdmFsdWU9IiR7dGVzdE5hbWV9Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0idGVzdE5hbWUiIHZhbHVlPSIke3Rlc3ROYW1lfSIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bmNsaWVudCIgZGVwZW5kcz0icHJlcGFyZSxzZXRPcmJQb3J0MixzZXRIdHRwUG9ydDIiPgogICAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FQUENMSUVOVH0iIHJlc3VsdHByb3BlcnR5PSJyZXN1bHQiIGZhaWxvbmVycm9yPSJmYWxzZSIgb3V0cHV0PSIke2J1aWxkfS8ke2xvZy5pZH0ub3V0cHV0LmxvZyI+CkBAIC0xMjksOSArMTI5LDkgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwcm9jZXNzUmVzdWx0Ij4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJyZXN1bHQiIHZhbHVlPSIke3Jlc3VsdH0iLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJsb2ciIHZhbHVlPSIke2J1aWxkfS8ke2xvZy5pZH0ub3V0cHV0LmxvZyIvPgotICAgICAgICA8L2FudGNhbGw+ICAKKyAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLnVzZXIiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc3NlbWJsZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2VjdXJpdHkvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2VjdXJpdHkvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDIwYjkxNDkuLmMyMWY4ZDYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3NlY3VyaXR5L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZWN1cml0eS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTMxLDEzICszMSwxMyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImRlcGxveW1lbnQtZWpiMzAtZWFyLXNlY3VyaXR5Iik7CiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgICAgICBob3N0ID0gKGFyZ3MubGVuZ3RoID4gMCkgPyBhcmdzWzBdIDogImxvY2FsaG9zdCI7CiAgICAgICAgIHBvcnQgPSAoYXJncy5sZW5ndGggPiAxKSA/IEludGVnZXIucGFyc2VJbnQoYXJnc1sxXSkgOiA4MDgwOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIEBFSkIgU2xlc3Mgc2xlc3M7CiAgICAgcHJpdmF0ZSBzdGF0aWMgQEVKQiBTZnVsIHNmdWw7CiAKQEAgLTg2LDcgKzg2LDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5leGl0KC0xKTsKICAgICAgICAgfQogCi0gICAgCXJldHVybjsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIHByaXZhdGUgc3RhdGljIGludCBnb0dldChTdHJpbmcgaG9zdCwgaW50IHBvcnQsIFN0cmluZyBjb250ZXh0UGF0aCkKQEAgLTEwOSw3ICsxMDksNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGxpbmVOdW0gKyAiOiAiICsgbGluZSk7CiAgICAgICAgICAgICBpbnQgaW5kZXggPSBsaW5lLmluZGV4T2YoIj0iKTsKICAgICAgICAgICAgIGlmIChpbmRleCAhPSAtMSkgewotICAgICAgICAgICAgICAgIFN0cmluZyBpbmZvID0gbGluZS5zdWJzdHJpbmcoaW5kZXggKyAxKTsgIAorICAgICAgICAgICAgICAgIFN0cmluZyBpbmZvID0gbGluZS5zdWJzdHJpbmcoaW5kZXggKyAxKTsKICAgICAgICAgICAgICAgICBpZiAoaW5mby5zdGFydHNXaXRoKCJoZWxsbyIpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNvdW50Kys7CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2VjdXJpdHkvZWpiL1NmdWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3NlY3VyaXR5L2VqYi9TZnVsLmphdmEKaW5kZXggZjMzZDJkMi4uYmIxOTQ5MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2VjdXJpdHkvZWpiL1NmdWwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZWN1cml0eS9lamIvU2Z1bC5qYXZhCkBAIC0xNyw3ICsxNyw3IEBACiBwYWNrYWdlIGNvbS5zdW4uczFhc2Rldi5kZXBsb3ltZW50LmVqYjMwLmVhci5zZWN1cml0eTsKIAogaW1wb3J0IGpha2FydGEuZWpiLlJlbW90ZTsKLQkKKwogQFJlbW90ZQogcHVibGljIGludGVyZmFjZSBTZnVsCiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZWN1cml0eS9lamIvU2Z1bEVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2VjdXJpdHkvZWpiL1NmdWxFSkIuamF2YQppbmRleCBhODY2NjZmLi45YjUxMTU1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZWN1cml0eS9lamIvU2Z1bEVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3NlY3VyaXR5L2VqYi9TZnVsRUpCLmphdmEKQEAgLTUxLDEyICs1MSwxMiBAQAogICAgICAgICB9IGNhdGNoKEVKQkV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeHBlY3RlZCBmYWlsdXJlIGZyb20gc2xlc3NMb2NhbC5nb29kQnllKCkiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oc2xlc3NMb2NhbC5oZWxsbygpKTsKICAgICAgICAgcmV0dXJuIHNsZXNzLmhlbGxvKCk7CiAgICAgfQogCi0gICAgQFJvbGVzQWxsb3dlZCh7ImoyZWUifSkgCisgICAgQFJvbGVzQWxsb3dlZCh7ImoyZWUifSkKICAgICBwdWJsaWMgU3RyaW5nIGdvb2RBZnRlcm5vb24oKSB7CiAgICAgICAgIGlmICghc2MuaXNDYWxsZXJJblJvbGUoImoyZWUiKSB8fCBzYy5pc0NhbGxlckluUm9sZSgic3VudXNlciIpKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigibm90IG9mIHJvbGUgajJlZSBvciBvZiByb2xlIHN1bnVzZXIiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3NlY3VyaXR5L3dlYi9NeUZpbHRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2VjdXJpdHkvd2ViL015RmlsdGVyLmphdmEKaW5kZXggZTgzYTc4Mi4uMzhjNGRiNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2VjdXJpdHkvd2ViL015RmlsdGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2VjdXJpdHkvd2ViL015RmlsdGVyLmphdmEKQEAgLTM5LDcgKzM5LDcgQEAKICAgICBwdWJsaWMgdm9pZCBpbml0KEZpbHRlckNvbmZpZyBmaWx0ZXJDb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKIAogICAgICAgICBTZXJ2bGV0Q29udGV4dCBzYyA9IGZpbHRlckNvbmZpZy5nZXRTZXJ2bGV0Q29udGV4dCgpOwotICAgIAorCiAgICAgICAgIHRyeSB7CiAKICAgICAgICAgICAgIGludCBsb2dpblRpbWVvdXQgPSBkczEuZ2V0TG9naW5UaW1lb3V0KCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uL1Nlc3Npb25UZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uL1Nlc3Npb25UZXN0LmphdmEKaW5kZXggNGMzZmM4Yi4uNDYwZWVjMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbi9TZXNzaW9uVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24vU2Vzc2lvblRlc3QuamF2YQpAQCAtMjQsMTUgKzI0LDE1IEBACiAgKiBpbiBEZXBsb3ltZW50VGVzdC4KICAqCiAgKiBAYXV0aG9yOiB0anF1aW5uCi0gKiAKKyAqCiAgKi8KIAogcHVibGljIGNsYXNzIFNlc3Npb25UZXN0IGV4dGVuZHMgRGVwbG95bWVudFRlc3QgewotICAgIAorCiAgICAgLyoqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgRXhhbXBsZVRlc3QgKi8KICAgICBwdWJsaWMgU2Vzc2lvblRlc3QoKSB7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICpSdW5zIHRoZSBmaXJzdCBzdGVwIG9mIHRoZSB0ZXN0OiBkZXBsb3lpbmcgYW5kIHJ1bm5pbmcgdGhlIGNsaWVudC4KICAgICAgKi8KQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgZGVwbG95KCk7CiAgICAgICAgIHJ1bkNsaWVudCgpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqUnVucyB0aGUgc2Vjb25kIHN0ZXAgb2YgdGhlIHRlc3QsIG9ubHkgYWZ0ZXIgdGhlIGZpcnN0IGhhcyBydW4gYW5kCiAgICAgICpzdWNjZWVkZWQ6IHJlZGVwbG95IHRoZSBhcHAgYW5kIHJ1biB0aGUgY2xpZW50IGFnYWluLgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uL2J1aWxkLnhtbAppbmRleCA0NGFhOTkxLi40OTYzOWU5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uL2J1aWxkLnhtbApAQCAtNTgsOCArNTgsOCBAQAogICAgICAgICA8ZWFyIGRlc3RmaWxlPSIke2FsbC5lYXJ9IiBiYXNlZGlyPSIke2FyY2hpdmVkaXJ9IgogICAgICAgICAgICAgYXBweG1sPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIgaW5jbHVkZXM9IiouamFyIj4KICAgICAgICAgPC9lYXI+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kuYXNhZG1pbiIgZGVwZW5kcz0icHJlcGFyZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tbW9uLmRlcGxveS5hc2FkbWluIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIgdmFsdWU9Ii0tcmV0cmlldmUgJHthcmNoaXZlZGlyfSAtLW5hbWUgJHt0ZXN0TmFtZX0gJHthbGwuZWFyfSIvPgpAQCAtODIsMTUgKzgyLDE1IEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icHJvY2Vzc1Jlc3VsdCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0icmVzdWx0IiB2YWx1ZT0iJHtyZXN1bHR9Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ibG9nIiB2YWx1ZT0iJHtidWlsZH0vJHtsb2cuaWR9Lm91dHB1dC5sb2ciLz4KLSAgICAgICAgPC9hbnRjYWxsPiAgICAKKyAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveS5hc2FkbWluIiBkZXBlbmRzPSJwcmVwYXJlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21tb24udW5kZXBsb3kuYXNhZG1pbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiIHZhbHVlPSIke3Rlc3ROYW1lfSIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InRlc3ROYW1lIiB2YWx1ZT0iJHt0ZXN0TmFtZX0iLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNzZW1ibGUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24vY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggZjBhMDA4Ny4uY2M5NTI0NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbi9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTMwLDExICszMCwxMSBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImVqYi1lamIzMC1oZWxsby1zZXNzaW9uIik7CiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIEBFSkIgU2Z1bCBzZnVsOwogICAgIHByaXZhdGUgc3RhdGljIEBFSkIgU2xlc3Mgc2xlc3M7CiAKQEAgLTYwLDggKzYwLDggQEAKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgtMSk7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgCXJldHVybjsKKworICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgQFBvc3RDb25zdHJ1Y3QKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24vY2xpZW50L3N1bi1hY2Mtbm8tbG9nLXNlcnZpY2UueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbi9jbGllbnQvc3VuLWFjYy1uby1sb2ctc2VydmljZS54bWwKaW5kZXggNDdlM2QzZS4uMjYyM2YxNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbi9jbGllbnQvc3VuLWFjYy1uby1sb2ctc2VydmljZS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbi9jbGllbnQvc3VuLWFjYy1uby1sb2ctc2VydmljZS54bWwKQEAgLTE4LDggKzE4LDggQEAKIC0tPgogCiA8IS0tCi0gICBQbGVhc2UgcmVtZW1iZXIgdG8gY3VzdG9taXplIHRoaXMgZmlsZSBmb3IgeW91ciBlbnZpcm9ubWVudC4gVGhlIGRlZmF1bHRzIGZvciAKLSAgIGZvbGxvd2luZyBmaWVsZHMgbWF5IG5vdCBiZSBhcHByb3ByaWF0ZS4gIAorICAgUGxlYXNlIHJlbWVtYmVyIHRvIGN1c3RvbWl6ZSB0aGlzIGZpbGUgZm9yIHlvdXIgZW52aXJvbm1lbnQuIFRoZSBkZWZhdWx0cyBmb3IKKyAgIGZvbGxvd2luZyBmaWVsZHMgbWF5IG5vdCBiZSBhcHByb3ByaWF0ZS4KICAgIC0gdGFyZ2V0LXNlcnZlciBuYW1lLCBhZGRyZXNzIGFuZCBwb3J0CiAgICAtIFByb3BlcnR5IHNlY3VyaXR5LmNvbmZpZyBpbiBtZXNzYWdlLXNlY3VyaXR5LWNvbmZpZwogLS0+CkBAIC0zMSw3ICszMSw3IEBACiA8IS0tICAgPGxvZy1zZXJ2aWNlIGZpbGU9IiIgbGV2ZWw9IldBUk5JTkciLz4gLS0+CiAgIDxtZXNzYWdlLXNlY3VyaXR5LWNvbmZpZyBhdXRoLWxheWVyPSJTT0FQIj4KICAgICA8IS0tIHR1cm5lZCBvZmYgYnkgZGVmYXVsdCAtLT4KLSAgICA8cHJvdmlkZXItY29uZmlnIGNsYXNzLW5hbWU9ImNvbS5zdW4ueG1sLndzcy5wcm92aWRlci5DbGllbnRTZWN1cml0eUF1dGhNb2R1bGUiIHByb3ZpZGVyLWlkPSJYV1NfQ2xpZW50UHJvdmlkZXIiIHByb3ZpZGVyLXR5cGU9ImNsaWVudCI+IAorICAgIDxwcm92aWRlci1jb25maWcgY2xhc3MtbmFtZT0iY29tLnN1bi54bWwud3NzLnByb3ZpZGVyLkNsaWVudFNlY3VyaXR5QXV0aE1vZHVsZSIgcHJvdmlkZXItaWQ9IlhXU19DbGllbnRQcm92aWRlciIgcHJvdmlkZXItdHlwZT0iY2xpZW50Ij4KICAgICAgIDxyZXF1ZXN0LXBvbGljeSBhdXRoLXNvdXJjZT0iY29udGVudCIvPgogICAgICAgPHJlc3BvbnNlLXBvbGljeSBhdXRoLXNvdXJjZT0iY29udGVudCIvPgogICAgICAgPHByb3BlcnR5IG5hbWU9ImVuY3J5cHRpb24ua2V5LmFsaWFzIiB2YWx1ZT0iczFhcyIvPgpAQCAtMzksNyArMzksNyBAQAogICAgICAgPHByb3BlcnR5IG5hbWU9ImR5bmFtaWMudXNlcm5hbWUucGFzc3dvcmQiIHZhbHVlPSJmYWxzZSIvPgogICAgICAgPHByb3BlcnR5IG5hbWU9ImRlYnVnIiB2YWx1ZT0iZmFsc2UiLz4KICAgICA8L3Byb3ZpZGVyLWNvbmZpZz4KLSAgICA8cHJvdmlkZXItY29uZmlnIGNsYXNzLW5hbWU9ImNvbS5zdW4ueG1sLndzcy5wcm92aWRlci5DbGllbnRTZWN1cml0eUF1dGhNb2R1bGUiIHByb3ZpZGVyLWlkPSJDbGllbnRQcm92aWRlciIgcHJvdmlkZXItdHlwZT0iY2xpZW50Ij4gCisgICAgPHByb3ZpZGVyLWNvbmZpZyBjbGFzcy1uYW1lPSJjb20uc3VuLnhtbC53c3MucHJvdmlkZXIuQ2xpZW50U2VjdXJpdHlBdXRoTW9kdWxlIiBwcm92aWRlci1pZD0iQ2xpZW50UHJvdmlkZXIiIHByb3ZpZGVyLXR5cGU9ImNsaWVudCI+CiAgICAgICA8cmVxdWVzdC1wb2xpY3kgYXV0aC1zb3VyY2U9ImNvbnRlbnQiLz4KICAgICAgIDxyZXNwb25zZS1wb2xpY3kgYXV0aC1zb3VyY2U9ImNvbnRlbnQiLz4KICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJlbmNyeXB0aW9uLmtleS5hbGlhcyIgdmFsdWU9InMxYXMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24vZWpiL1NmdWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24vZWpiL1NmdWwuamF2YQppbmRleCA4MGFmNWJhLi5kZGE5NTg3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uL2VqYi9TZnVsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbi9lamIvU2Z1bC5qYXZhCkBAIC0xNyw3ICsxNyw3IEBACiBwYWNrYWdlIGNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaGVsbG8uc2Vzc2lvbjsKIAogaW1wb3J0IGpha2FydGEuZWpiLlJlbW90ZTsKLQkKKwogQFJlbW90ZQogcHVibGljIGludGVyZmFjZSBTZnVsCiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMi9idWlsZC54bWwKaW5kZXggNmE5ZDRmYi4uOGRkYmNmMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24yL2J1aWxkLnhtbApAQCAtNDYsNyArNDYsNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZSIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7ZWpiLmphcn0iIGJhc2VkaXI9IiR7YnVpbGR9IiAKKyAgICAgICAgPGphciBkZXN0ZmlsZT0iJHtlamIuamFyfSIgYmFzZWRpcj0iJHtidWlsZH0iCiAgICAgICAgICAgICAgICAgZXhjbHVkZXM9IioqL0NsaWVudFN1cGVyLmNsYXNzLCoqL0NsaWVudC5jbGFzcyI+CiAgICAgICAgICAgICAgICAgPG1ldGFpbmYgZmlsZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KICAgICAgICAgPC9qYXI+CkBAIC02Miw4ICs2Miw4IEBACiAgICAgICAgIDxlYXIgZGVzdGZpbGU9IiR7YWxsLmVhcn0iIGJhc2VkaXI9IiR7YXJjaGl2ZWRpcn0iCiAgICAgICAgICAgICBhcHB4bWw9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIiBpbmNsdWRlcz0iKi5qYXIsIHNlc3Npb24yYXBwY2xpZW50LnhtbCwgc3VuLXNlc3Npb24yYXBwY2xpZW50LnhtbCI+CiAgICAgICAgIDwvZWFyPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95LmFzYWRtaW4iIGRlcGVuZHM9InByZXBhcmUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbW1vbi5kZXBsb3kuYXNhZG1pbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiIHZhbHVlPSItLXJldHJpZXZlICR7YXJjaGl2ZWRpcn0gLS1uYW1lICR7dGVzdE5hbWV9ICR7YWxsLmVhcn0iLz4KQEAgLTg1LDE1ICs4NSwxNSBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InByb2Nlc3NSZXN1bHQiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InJlc3VsdCIgdmFsdWU9IiR7cmVzdWx0fSIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImxvZyIgdmFsdWU9IiR7YnVpbGR9LyR7bG9nLmlkfS5vdXRwdXQubG9nIi8+Ci0gICAgICAgIDwvYW50Y2FsbD4gICAgCisgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kuYXNhZG1pbiIgZGVwZW5kcz0icHJlcGFyZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tbW9uLnVuZGVwbG95LmFzYWRtaW4iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IiB2YWx1ZT0iJHt0ZXN0TmFtZX0iLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0TmFtZSIgdmFsdWU9IiR7dGVzdE5hbWV9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icHJpdmF0ZS1hbGwiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzc2VtYmxlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggODg4YWY3Yy4uYmU3ZGYzNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjIvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24yL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjgsMTAgKzI4LDEwIEBACiBpbXBvcnQgY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5oZWxsby5zZXNzaW9uMi4qOwogCiAKLUBFSkJzKCAKLSB7IEBFSkIobmFtZT0iZWpiL1R5cGVMZXZlbFNsZXNzMSIsIGJlYW5OYW1lPSJTbGVzc0VKQiIsIAorQEVKQnMoCisgeyBARUpCKG5hbWU9ImVqYi9UeXBlTGV2ZWxTbGVzczEiLCBiZWFuTmFtZT0iU2xlc3NFSkIiLAogICAgICAgIGJlYW5JbnRlcmZhY2U9U2xlc3MuY2xhc3MpLAotICAgQEVKQihuYW1lPSJlamIvVHlwZUxldmVsU2xlc3MyIiwgYmVhbk5hbWU9IlNsZXNzRUpCMiIsIAorICAgQEVKQihuYW1lPSJlamIvVHlwZUxldmVsU2xlc3MyIiwgYmVhbk5hbWU9IlNsZXNzRUpCMiIsCiAgICAgICAgYmVhbkludGVyZmFjZT1TbGVzcy5jbGFzcykKICB9KQogQEVKQihuYW1lPSJlamIvVHlwZUxldmVsU2xlc3MzIiwgYmVhbkludGVyZmFjZT1TbGVzc1N1Yi5jbGFzcykKQEAgLTQxLDcgKzQxLDcgQEAKIAogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwotICAgIH0gIAorICAgIH0KIAogICAgIHByaXZhdGUgc3RhdGljIEBFSkIgU2Z1bCBzZnVsMTsKICAgICBwcml2YXRlIHN0YXRpYyBARUpCIFNmdWwgc2Z1bDI7CkBAIC01MSw3ICs1MSw3IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBARUpCKGJlYW5OYW1lPSJTbGVzc0VKQiIpIFNsZXNzIHNsZXNzMTsKIAotICAgIC8vIGxpbmtlZCB0byBTbGVzc0VKQjIgdmlhIHN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIAorICAgIC8vIGxpbmtlZCB0byBTbGVzc0VKQjIgdmlhIHN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sCiAgICAgLy8gc28gbm8gYmVhbk5hbWUgZGlzYW1iaWd1YXRpb24gaXMgbmVlZGVkCiAgICAgcHJpdmF0ZSBzdGF0aWMgQEVKQiBTbGVzcyBzbGVzczI7CiAKQEAgLTYxLDExICs2MSwxMSBAQAogCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKIAogICAgICAgICB0cnkgewotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbGluZyBzdXBlclNsZXNzMSIpOwogCiAgICAgICAgICAgICBTbGVzcyBzdXBlclNsZXNzTG9va3VwID0gKFNsZXNzKSBuZXcgamF2YXgubmFtaW5nLkluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmNvbXAvZW52L2NvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaGVsbG8uc2Vzc2lvbjIuY2xpZW50LkNsaWVudFN1cGVyL3N1cGVyU2xlc3MxIik7CkBAIC04OSw3ICs4OSw3IEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHNmdWwxLmRvUmVtb3ZlTWV0aG9kU2Vzc2lvblN5bmNUZXN0cygpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8vIENhbGwgYXBwbGljYXRpb24tZGVmaW5lZCBAUmVtb3ZlIG1ldGhvZC4gVGhpcyBtZXRob2QgaGFzCiAgICAgICAgICAgICAvLyBubyByZWxhdGlvbnNoaXAgdG8gRUpCT2JqZWN0LnJlbW92ZSgpLiAgSXQncyBhIGNvaW5jaWRlbmNlCiAgICAgICAgICAgICAvLyB0aGF0IGl0IGhhcyB0aGUgc2FtZSBuYW1lLgpAQCAtMjMwLDcgKzIzMCw3IEBACiAgICAgICAgICAgICBpZiggcjEuZ2V0SWQoKS5lcXVhbHMocjIuZ2V0SWQoKSkgKSB7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigicmVtb3RlIHBhcmFtIHBhc3NpbmcgZ2V0SWQoKSB0ZXN0IGZhaWxlZCIpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHNsZXNzMy5oZWxsbygpOwogICAgICAgICAgICAgc2xlc3MzLmhlbGxvMygpOwogCkBAIC0yNTcsOCArMjU3LDggQEAKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAJcmV0dXJuOworCisgICAgICAgIHJldHVybjsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24yL2VqYi9Gb28uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24yL2VqYi9Gb28uamF2YQppbmRleCBkODk0NjlkLi4zOTY2OWI0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMi9lamIvRm9vLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjIvZWpiL0Zvby5qYXZhCkBAIC0yNSw3ICsyNSw3IEBACiAKICAgICB2b2lkIGNhbGxIZWxsbygpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAgICAgU3RyaW5nIHNheUhlbGxvKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGFzc2VydFZhbGlkUmVtb3RlT2JqZWN0KFN0cmluZyBtc2cpCi0JdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjIvZWpiL015Q2FsbGJhY2tIYW5kbGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMi9lamIvTXlDYWxsYmFja0hhbmRsZXIuamF2YQppbmRleCAyOWZlY2JhLi5lMWZlMzQ5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMi9lamIvTXlDYWxsYmFja0hhbmRsZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMi9lamIvTXlDYWxsYmFja0hhbmRsZXIuamF2YQpAQCAtMjEsMTAgKzIxLDEwIEBACiAKIHB1YmxpYyBjbGFzcyBNeUNhbGxiYWNrSGFuZGxlciB7CiAKLSAgICBAUHJlRGVzdHJveSAKKyAgICBAUHJlRGVzdHJveQogICAgIHB1YmxpYyB2b2lkIG15UHJlRGVzdE1ldGhvZChJbnZvY2F0aW9uQ29udGV4dCBpbnZDdHgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBNeUNhbGxiYWNrSGFuZGxlcjo6bXlQcmVEZXN0TWV0aG9kICIpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52Q3R4LnByb2NlZWQoKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjIvZWpiL1NmdWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24yL2VqYi9TZnVsLmphdmEKaW5kZXggMTgyYmRhNi4uNjhmNTdiNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjIvZWpiL1NmdWwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMi9lamIvU2Z1bC5qYXZhCkBAIC0zNywxNyArMzcsMTcgQEAKICAgICAvLyBmb3IgYSBtZXRob2QgdGhhdCBoYXMgQFJlbW92ZSBiZWhhdmlvciBzbyBpdCBuZWVkcyB0byB3b3JrLgogICAgIHB1YmxpYyB2b2lkIHJlbW92ZSgpOwogCi0gICAgLy8gQXNzb2NpYXRlZCB3aXRoIGFuIEBSZW1vdmUgbWV0aG9kIHRoYXQgaGFzIHJldGFpbklmRXhjZXB0aW9uPXRydWUuICAgIAorICAgIC8vIEFzc29jaWF0ZWQgd2l0aCBhbiBAUmVtb3ZlIG1ldGhvZCB0aGF0IGhhcyByZXRhaW5JZkV4Y2VwdGlvbj10cnVlLgogICAgIC8vIElmIGFyZ3VtZW50IGlzIHRydWUsIHRoZSBtZXRob2Qgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24sIHdoaWNoIHNob3VsZAogICAgIC8vIGtlZXAgdGhlIGJlYW4gZnJvbSBiZWluZyByZW1vdmVkLiAgSWYgYXJndW1lbnQgaXMgZmFsc2UsIHRoZSBiZWFuCiAgICAgLy8gc2hvdWxkIHN0bGwgYmUgcmVtb3ZlZC4KLSAgICBwdWJsaWMgdm9pZCByZW1vdmVSZXRhaW5JZkV4Y2VwdGlvbihib29sZWFuIHRocm93RXhjZXB0aW9uKSAKKyAgICBwdWJsaWMgdm9pZCByZW1vdmVSZXRhaW5JZkV4Y2VwdGlvbihib29sZWFuIHRocm93RXhjZXB0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uOwogCi0gICAgLy8gQXNzb2NpYXRlZCB3aXRoIGFuIEBSZW1vdmUgbWV0aG9kIHRoYXQgaGFzIHJldGFpbklmRXhjZXB0aW9uPWZhbHNlLiAgICAKKyAgICAvLyBBc3NvY2lhdGVkIHdpdGggYW4gQFJlbW92ZSBtZXRob2QgdGhhdCBoYXMgcmV0YWluSWZFeGNlcHRpb249ZmFsc2UuCiAgICAgLy8gV2hldGhlciB0aGUgYXJndW1lbnQgaXMgdHJ1ZSBvciBmYWxzZSwgdGhlIGJlYW4gc2hvdWxkIHN0aWxsIGJlCiAgICAgLy8gcmVtb3ZlZC4KLSAgICBwdWJsaWMgdm9pZCByZW1vdmVOb3RSZXRhaW5JZkV4Y2VwdGlvbihib29sZWFuIHRocm93RXhjZXB0aW9uKSAKKyAgICBwdWJsaWMgdm9pZCByZW1vdmVOb3RSZXRhaW5JZkV4Y2VwdGlvbihib29sZWFuIHRocm93RXhjZXB0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uOwogCiAgICAgLy8gQXNzb2NpYXRlZCB3aXRoIGFuIEBSZW1vdmUgbWV0aG9kIHRoYXQgaGFzIHJldGFpbklmRXhjZXB0aW9uPXRydWUKQEAgLTU1LDcgKzU1LDcgQEAKICAgICAvLyByZXRhaW5JZkV4Y2VwdGlvbiBvbmx5IGFwcGxpZXMgdG8gYXBwbGljYXRpb24gZXhjZXB0aW9ucywgc28KICAgICAvLyB0aGlzIGJlYW4gc2hvdWxkIGFsd2F5cyBiZSByZW1vdmVkLgogICAgIHB1YmxpYyB2b2lkIHJlbW92ZU1ldGhvZFRocm93U3lzRXhjZXB0aW9uKGJvb2xlYW4gdGhyb3dFeGNlcHRpb24pOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9SZW1vdmVNZXRob2RTZXNzaW9uU3luY1Rlc3RzKCk7Ci0gICAgICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMi9lamIvU2Z1bDIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24yL2VqYi9TZnVsMi5qYXZhCmluZGV4IGE0MmMyNGMuLmE4NmUzM2MgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24yL2VqYi9TZnVsMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24yL2VqYi9TZnVsMi5qYXZhCkBAIC0yMywxNyArMjMsMTcgQEAKIHsKICAgICBwdWJsaWMgU3RyaW5nIGhlbGxvKCk7CiAKLSAgICAvLyBBc3NvY2lhdGVkIHdpdGggYW4gQFJlbW92ZSBtZXRob2QgdGhhdCBoYXMgcmV0YWluSWZFeGNlcHRpb249dHJ1ZS4gICAgCisgICAgLy8gQXNzb2NpYXRlZCB3aXRoIGFuIEBSZW1vdmUgbWV0aG9kIHRoYXQgaGFzIHJldGFpbklmRXhjZXB0aW9uPXRydWUuCiAgICAgLy8gSWYgYXJndW1lbnQgaXMgdHJ1ZSwgdGhlIG1ldGhvZCB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbiwgd2hpY2ggc2hvdWxkCiAgICAgLy8ga2VlcCB0aGUgYmVhbiBmcm9tIGJlaW5nIHJlbW92ZWQuICBJZiBhcmd1bWVudCBpcyBmYWxzZSwgdGhlIGJlYW4KICAgICAvLyBzaG91bGQgc3RsbCBiZSByZW1vdmVkLgotICAgIHB1YmxpYyB2b2lkIHJlbW92ZVJldGFpbklmRXhjZXB0aW9uKGJvb2xlYW4gdGhyb3dFeGNlcHRpb24pIAorICAgIHB1YmxpYyB2b2lkIHJlbW92ZVJldGFpbklmRXhjZXB0aW9uKGJvb2xlYW4gdGhyb3dFeGNlcHRpb24pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb247CiAKLSAgICAvLyBBc3NvY2lhdGVkIHdpdGggYW4gQFJlbW92ZSBtZXRob2QgdGhhdCBoYXMgcmV0YWluSWZFeGNlcHRpb249ZmFsc2UuICAgIAorICAgIC8vIEFzc29jaWF0ZWQgd2l0aCBhbiBAUmVtb3ZlIG1ldGhvZCB0aGF0IGhhcyByZXRhaW5JZkV4Y2VwdGlvbj1mYWxzZS4KICAgICAvLyBXaGV0aGVyIHRoZSBhcmd1bWVudCBpcyB0cnVlIG9yIGZhbHNlLCB0aGUgYmVhbiBzaG91bGQgc3RpbGwgYmUKICAgICAvLyByZW1vdmVkLgotICAgIHB1YmxpYyB2b2lkIHJlbW92ZU5vdFJldGFpbklmRXhjZXB0aW9uKGJvb2xlYW4gdGhyb3dFeGNlcHRpb24pIAorICAgIHB1YmxpYyB2b2lkIHJlbW92ZU5vdFJldGFpbklmRXhjZXB0aW9uKGJvb2xlYW4gdGhyb3dFeGNlcHRpb24pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb247CiAKICAgICAvLyBBc3NvY2lhdGVkIHdpdGggYW4gQFJlbW92ZSBtZXRob2QgdGhhdCBoYXMgcmV0YWluSWZFeGNlcHRpb249dHJ1ZQpAQCAtNDEsNSArNDEsNSBAQAogICAgIC8vIHJldGFpbklmRXhjZXB0aW9uIG9ubHkgYXBwbGllcyB0byBhcHBsaWNhdGlvbiBleGNlcHRpb25zLCBzbwogICAgIC8vIHRoaXMgYmVhbiBzaG91bGQgYWx3YXlzIGJlIHJlbW92ZWQuCiAgICAgcHVibGljIHZvaWQgcmVtb3ZlTWV0aG9kVGhyb3dTeXNFeGNlcHRpb24oYm9vbGVhbiB0aHJvd0V4Y2VwdGlvbik7Ci0gICAgICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMi9lamIvU2Z1bEVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjIvZWpiL1NmdWxFSkIuamF2YQppbmRleCAzOWU0NmQwLi5kNjFkMGMzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMi9lamIvU2Z1bEVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24yL2VqYi9TZnVsRUpCLmphdmEKQEAgLTM5LDEwICszOSwxMCBAQAogQFN0YXRlZnVsCiBAVHJhbnNhY3Rpb25NYW5hZ2VtZW50KFRyYW5zYWN0aW9uTWFuYWdlbWVudFR5cGUuQkVBTikKIAotQEVKQnMoIAotIHsgQEVKQihuYW1lPSJlamIvVHlwZUxldmVsU2xlc3MxIiwgYmVhbk5hbWU9IlNsZXNzRUpCIiwgCitARUpCcygKKyB7IEBFSkIobmFtZT0iZWpiL1R5cGVMZXZlbFNsZXNzMSIsIGJlYW5OYW1lPSJTbGVzc0VKQiIsCiAgICAgICAgYmVhbkludGVyZmFjZT1TbGVzcy5jbGFzcyksCi0gICBARUpCKG5hbWU9ImVqYi9UeXBlTGV2ZWxTbGVzczIiLCBiZWFuTmFtZT0iU2xlc3NFSkIyIiwgCisgICBARUpCKG5hbWU9ImVqYi9UeXBlTGV2ZWxTbGVzczIiLCBiZWFuTmFtZT0iU2xlc3NFSkIyIiwKICAgICAgICBiZWFuSW50ZXJmYWNlPVNsZXNzLmNsYXNzKSAsCiAgICBARUpCKG5hbWU9ImVqYi9TZnVsRUpCMiIsIGJlYW5JbnRlcmZhY2U9U2Z1bDIuY2xhc3MpCiAgfSkKQEAgLTUxLDcgKzUxLDcgQEAKIEBFSkIobmFtZT0iZWpiL1R5cGVMZXZlbFNsZXNzMyIsIGJlYW5JbnRlcmZhY2U9U2xlc3NTdWIuY2xhc3MpCiBAUmVtb3RlKHtTZnVsLmNsYXNzfSkKIC8vIGVqYiBpcyBub3QgcmVxdWlyZWQgdG8gcHV0IGJ1c2luZXNzIGludGVyZmFjZSBpbiBpbXBsZW1lbnRzIGNsYXVzZQotcHVibGljIGNsYXNzIFNmdWxFSkIgCitwdWJsaWMgY2xhc3MgU2Z1bEVKQgogewogCiAgICAgcHJpdmF0ZSBAUmVzb3VyY2UgU2Vzc2lvbkNvbnRleHQgc2M7CkBAIC02NCw3ICs2NCw3IEBACiAgICAgcHJpdmF0ZSBARUpCKGJlYW5OYW1lPSJTbGVzc0VKQiIpIHZvaWQgc2V0U2xlc3M0KFNsZXNzIHNsZXNzKSB7CiAgICAgICAgIHNsZXNzNCA9IHNsZXNzOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgU2xlc3Mgc2xlc3M1OwogICAgIEBFSkIoYmVhbk5hbWU9IlNsZXNzRUpCMiIpIHZvaWQgc2V0U2xlc3M1KFNsZXNzIHNsZXNzKSB7CiAgICAgICAgIHNsZXNzNSA9IHNsZXNzOwpAQCAtMTczLDcgKzE3Myw3IEBACiAgICAgcHVibGljIHZvaWQgZm9vKGludCBhLCBTdHJpbmcgYikgewogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCB0ZXN0U2xlc3NSZWZzKFNsZXNzIHMxLCBTbGVzcyBzMiwgU2xlc3NTdWIgczMpIAorICAgIHByaXZhdGUgdm9pZCB0ZXN0U2xlc3NSZWZzKFNsZXNzIHMxLCBTbGVzcyBzMiwgU2xlc3NTdWIgczMpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogCiAgICAgICAgIFN0cmluZyBzbGVzczFJZCA9IHMxLmdldElkKCk7CkBAIC0yMjMsNyArMjIzLDcgQEAKICAgICAgICAgczMucm91bmRUcmlwMihjKTsKIAogICAgICAgICBzMy5oZWxsbzMoKTsKLSAKKwogICAgIH0KIAogICAgIEBQb3N0Q29uc3RydWN0CkBAIC0yNDcsNyArMjQ3LDcgQEAKICAgICB9CiAKICAgICBAUmVtb3ZlKHJldGFpbklmRXhjZXB0aW9uPXRydWUpCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlUmV0YWluSWZFeGNlcHRpb24oYm9vbGVhbiB0aHJvd0V4Y2VwdGlvbikgCisgICAgcHVibGljIHZvaWQgcmVtb3ZlUmV0YWluSWZFeGNlcHRpb24oYm9vbGVhbiB0aHJvd0V4Y2VwdGlvbikKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTZnVsRUpCICIgKyBzdGF0ZSArICIgcmVtb3ZlUmV0YWluSWZFeGNlcHRpb24iKTsKQEAgLTI1OCwxMCArMjU4LDEwIEBACiAgICAgfQogCiAgICAgQFJlbW92ZQotICAgIHB1YmxpYyB2b2lkIHJlbW92ZU5vdFJldGFpbklmRXhjZXB0aW9uKGJvb2xlYW4gdGhyb3dFeGNlcHRpb24pIAorICAgIHB1YmxpYyB2b2lkIHJlbW92ZU5vdFJldGFpbklmRXhjZXB0aW9uKGJvb2xlYW4gdGhyb3dFeGNlcHRpb24pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogCi0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2Z1bEVKQiAiICsgc3RhdGUgKyAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTZnVsRUpCICIgKyBzdGF0ZSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVtb3ZlTm90UmV0YWluSWZFeGNlcHRpb24iKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0aHJvd0V4Y2VwdGlvbiA9ICIgKyB0aHJvd0V4Y2VwdGlvbik7CiAgICAgICAgIGlmKCB0aHJvd0V4Y2VwdGlvbiApIHsKQEAgLTI3Miw3ICsyNzIsNyBAQAogICAgIEBSZW1vdmUKICAgICBwdWJsaWMgdm9pZCByZW1vdmVNZXRob2RUaHJvd1N5c0V4Y2VwdGlvbihib29sZWFuIHRocm93RXhjZXB0aW9uKSB7CiAKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTZnVsRUpCICIgKyBzdGF0ZSArIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNmdWxFSkIgIiArIHN0YXRlICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZW1vdmVNZXRob2RUaHJvd1N5c0V4Y2VwdGlvbiIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRocm93RXhjZXB0aW9uID0gIiArIHRocm93RXhjZXB0aW9uKTsKICAgICAgICAgaWYoIHRocm93RXhjZXB0aW9uICkgewpAQCAtMjk5LDcgKzI5OSw3IEBACiAgICAgICAgICAgICBTZnVsRUpCMi5iZWZvcmVDb21wbGV0aW9uQ2FsbGVkICYmCiAgICAgICAgICAgICBTZnVsRUpCMi5hZnRlckNvbXBsZXRpb25DYWxsZWQgKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBleHBlY3RlZCBTZXNzaW9uU3luY2ggYmVoYXZpb3IgZm9yICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZW1vdmVSZXRhaW5JZkV4Y2VwdGlvbih0cnVlKSIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVtb3ZlUmV0YWluSWZFeGNlcHRpb24odHJ1ZSkiKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIlNlc3Npb25TeW5jaCBmYWlsdXJlIGZvciAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlbW92ZVJldGFpbklmRXhjZXB0aW9uKHRydWUpIik7CkBAIC0zMjAsMTMgKzMyMCwxMyBAQAogICAgICAgICAgICAgIVNmdWxFSkIyLmJlZm9yZUNvbXBsZXRpb25DYWxsZWQgJiYKICAgICAgICAgICAgICFTZnVsRUpCMi5hZnRlckNvbXBsZXRpb25DYWxsZWQgKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBleHBlY3RlZCBTZXNzaW9uU3luY2ggYmVoYXZpb3IgZm9yICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZW1vdmVSZXRhaW5JZkV4Y2VwdGlvbihmYWxzZSkiKTsgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVtb3ZlUmV0YWluSWZFeGNlcHRpb24oZmFsc2UpIik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJTZXNzaW9uU3luY2ggZmFpbHVyZSBmb3IgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZW1vdmVSZXRhaW5JZkV4Y2VwdGlvbih0cnVlKSIpOwogICAgICAgICB9CiAKLSAgICAgICAgCisKIAogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24yL2VqYi9TZnVsRUpCMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjIvZWpiL1NmdWxFSkIyLmphdmEKaW5kZXggYjJmOWRkZi4uNmI5M2VkNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjIvZWpiL1NmdWxFSkIyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjIvZWpiL1NmdWxFSkIyLmphdmEKQEAgLTQzLDEwICs0MywxMCBAQAogCiAgICAgLy8gdXNlIHNvbWUgcGFja2FnZS1sb2NhbCBtdXRhYmxlIHN0YXRpYyBzdGF0ZSB0byBjaGVjayB3aGV0aGVyCiAgICAgLy8gc2Vzc2lvbiBzeW5jaCBjYWxsYmFja3MgYXJlIGNhbGxlZCBjb3JyZWN0bHkgZm9yIEBSZW1vdmUgbWV0aG9kcy4KLSAgICAvLyBUaGlzIHByb3ZpZGVzIGEgc2ltcGxlIHdheSB0byBjaGVjayB0aGUgcmVzdWx0cyBzaW5jZSB0aGUgYmVhbiAKKyAgICAvLyBUaGlzIHByb3ZpZGVzIGEgc2ltcGxlIHdheSB0byBjaGVjayB0aGUgcmVzdWx0cyBzaW5jZSB0aGUgYmVhbgogICAgIC8vIGluc3RhbmNlIGlzIG5vIGxvbmdlciBhdmFpbGFibGUgdG8gdGhlIGNhbGxlci4gIFRoZSBjYWxsZXIgbXVzdAogICAgIC8vIGFsd2F5cyBhdCBtb3N0IG9uZSBTRlNCcyBvZiB0aGlzIGJlYW4gdHlwZSBhdCBhIHRpbWUgZm9yIHRoaXMKLSAgICAvLyB0byB3b3JrLiAgCisgICAgLy8gdG8gd29yay4KICAgICBzdGF0aWMgYm9vbGVhbiBhZnRlckJlZ2luQ2FsbGVkID0gZmFsc2U7CiAgICAgc3RhdGljIGJvb2xlYW4gYmVmb3JlQ29tcGxldGlvbkNhbGxlZCA9IGZhbHNlOwogICAgIHN0YXRpYyBib29sZWFuIGFmdGVyQ29tcGxldGlvbkNhbGxlZCA9IGZhbHNlOwpAQCAtNjAsNyArNjAsNyBAQAogICAgIH0KIAogICAgIEBSZW1vdmUocmV0YWluSWZFeGNlcHRpb249dHJ1ZSkKLSAgICBwdWJsaWMgdm9pZCByZW1vdmVSZXRhaW5JZkV4Y2VwdGlvbihib29sZWFuIHRocm93RXhjZXB0aW9uKSAKKyAgICBwdWJsaWMgdm9pZCByZW1vdmVSZXRhaW5JZkV4Y2VwdGlvbihib29sZWFuIHRocm93RXhjZXB0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKIAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNmdWxFSkIyICIgKwpAQCAtNzIsNyArNzIsNyBAQAogICAgIH0KIAogICAgIEBSZW1vdmUKLSAgICBwdWJsaWMgdm9pZCByZW1vdmVOb3RSZXRhaW5JZkV4Y2VwdGlvbihib29sZWFuIHRocm93RXhjZXB0aW9uKSAKKyAgICBwdWJsaWMgdm9pZCByZW1vdmVOb3RSZXRhaW5JZkV4Y2VwdGlvbihib29sZWFuIHRocm93RXhjZXB0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKIAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNmdWxFSkIyICIgKwpAQCAtODYsNyArODYsNyBAQAogICAgIEBSZW1vdmUKICAgICBwdWJsaWMgdm9pZCByZW1vdmVNZXRob2RUaHJvd1N5c0V4Y2VwdGlvbihib29sZWFuIHRocm93RXhjZXB0aW9uKSB7CiAKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTZnVsRUpCMiAiICsgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2Z1bEVKQjIgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVtb3ZlTWV0aG9kVGhyb3dTeXNFeGNlcHRpb24iKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0aHJvd0V4Y2VwdGlvbiA9ICIgKyB0aHJvd0V4Y2VwdGlvbik7CiAgICAgICAgIGlmKCB0aHJvd0V4Y2VwdGlvbiApIHsKQEAgLTEwMCw3ICsxMDAsNyBAQAogICAgICAgICBhZnRlckJlZ2luQ2FsbGVkID0gdHJ1ZTsKICAgICAgICAgYmVmb3JlQ29tcGxldGlvbkNhbGxlZCA9IGZhbHNlOwogICAgICAgICBhZnRlckNvbXBsZXRpb25DYWxsZWQgPSBmYWxzZTsKLSAgICAgICAgCisKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTZnVsRUpCMjo6YWZ0ZXJCZWdpbigpIik7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMi9lamIvU2xlc3NFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24yL2VqYi9TbGVzc0VKQi5qYXZhCmluZGV4IGQyYTU1MzkuLmVkYTBiMjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24yL2VqYi9TbGVzc0VKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24yL2VqYi9TbGVzc0VKQi5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiBAU3RhdGVsZXNzCiAKIEBSZW1vdGUoe1NsZXNzLmNsYXNzfSkKLXB1YmxpYyBjbGFzcyBTbGVzc0VKQiAKK3B1YmxpYyBjbGFzcyBTbGVzc0VKQgogewogCiAKQEAgLTUyLDExICs1MiwxMSBAQAogICAgIH0KIAogICAgIHB1YmxpYyBDb2xsZWN0aW9uIHJvdW5kVHJpcDIoQ29sbGVjdGlvbiBjb2xsZWN0aW9uT2ZTbGVzcykgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNsZXNzRUpCOjpyb3VuZFRyaXAyICIgKyAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTbGVzc0VKQjo6cm91bmRUcmlwMiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25PZlNsZXNzKTsKICAgICAgICAgaWYoIGNvbGxlY3Rpb25PZlNsZXNzLnNpemUoKSA+IDAgKSB7CiAgICAgICAgICAgICBTbGVzcyBzbGVzcyA9IChTbGVzcykgY29sbGVjdGlvbk9mU2xlc3MuaXRlcmF0b3IoKS5uZXh0KCk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlucHV0IFNsZXNzLmdldElkKCkgPSAiICsgc2xlc3MuZ2V0SWQoKSk7ICAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW5wdXQgU2xlc3MuZ2V0SWQoKSA9ICIgKyBzbGVzcy5nZXRJZCgpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY29sbGVjdGlvbk9mU2xlc3M7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjIvZWpiL1NsZXNzRUpCMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjIvZWpiL1NsZXNzRUpCMi5qYXZhCmluZGV4IDVkODFkZTMuLjFlNWE4NWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24yL2VqYi9TbGVzc0VKQjIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMi9lamIvU2xlc3NFSkIyLmphdmEKQEAgLTQzLDcgKzQzLDcgQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNsZXNzRUpCMjo6ZWpiQ3JlYXRlKCkiKTsgICAgICAgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNsZXNzRUpCMjo6ZWpiQ3JlYXRlKCkiKTsKICAgICAgICAgcG9zdENvbnN0cnVjdENhbGxlZCA9IHRydWU7CiAgICAgfQogCkBAIC03Miw3ICs3Miw3IEBACiAgICAgcHVibGljIFN0cmluZyBnZXRJZCgpIHsKIAogICAgICAgICB0cnkgewotICAgICAgICAgICAgLy8gUHJvcHJpZXRhcnkgd2F5IHRvIGxvb2sgdXAgdHggbWFuYWdlci4gIAorICAgICAgICAgICAgLy8gUHJvcHJpZXRhcnkgd2F5IHRvIGxvb2sgdXAgdHggbWFuYWdlci4KICAgICAgICAgICAgIFRyYW5zYWN0aW9uTWFuYWdlciB0bSA9IChUcmFuc2FjdGlvbk1hbmFnZXIpCiAgICAgICAgICAgICAgICAgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmFwcHNlcnZlci9UcmFuc2FjdGlvbk1hbmFnZXIiKTsKICAgICAgICAgICAgIC8vIFVzZSBhbiBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYyBjaGVjayB0byBlbnN1cmUgdGhhdCB0aGVyZQpAQCAtOTQsNyArOTQsNyBAQAogCiAgICAgICAgIHJldHVybiAiU2xlc3NFSkIyIjsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU2xlc3Mgcm91bmRUcmlwKFNsZXNzIHMpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTbGVzc0VKQjI6OnJvdW5kVHJpcCAiICsgcyk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW5wdXQgU2xlc3MuZ2V0SWQoKSA9ICIgKyBzLmdldElkKCkpOwpAQCAtMTAyLDEyICsxMDIsMTIgQEAKICAgICB9CiAKICAgICBwdWJsaWMgQ29sbGVjdGlvbiByb3VuZFRyaXAyKENvbGxlY3Rpb24gY29sbGVjdGlvbk9mU2xlc3MpIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTbGVzc0VKQjI6OnJvdW5kVHJpcDIgIiArIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNsZXNzRUpCMjo6cm91bmRUcmlwMiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25PZlNsZXNzKTsKIAogICAgICAgICBpZiggY29sbGVjdGlvbk9mU2xlc3Muc2l6ZSgpID4gMCApIHsKICAgICAgICAgICAgIFNsZXNzIHNsZXNzID0gKFNsZXNzKSBjb2xsZWN0aW9uT2ZTbGVzcy5pdGVyYXRvcigpLm5leHQoKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW5wdXQgU2xlc3MuZ2V0SWQoKSA9ICIgKyBzbGVzcy5nZXRJZCgpKTsgIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnB1dCBTbGVzcy5nZXRJZCgpID0gIiArIHNsZXNzLmdldElkKCkpOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZlNsZXNzOwpAQCAtMTE4LDEwICsxMTgsMTAgQEAKICAgICAgICAgc2NfID0gc2M7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgCisgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkKICAgICB7fQogCi0gICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSAKKyAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpCiAgICAge30KIAogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMi9lamIvU2xlc3NFSkIzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMi9lamIvU2xlc3NFSkIzLmphdmEKaW5kZXggMDk4MTFmMy4uNDBjNmFmOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjIvZWpiL1NsZXNzRUpCMy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24yL2VqYi9TbGVzc0VKQjMuamF2YQpAQCAtMzksNyArMzksNyBAQAogCiAgICAgcHJpdmF0ZSBAUmVzb3VyY2UgU2Vzc2lvbkNvbnRleHQgZWpiQ29udGV4dDI7CiAKLSAgICBAUmVzb3VyY2UodHlwZT1qYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dC5jbGFzcykgCisgICAgQFJlc291cmNlKHR5cGU9amFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQuY2xhc3MpCiAgICAgcHJpdmF0ZSBFSkJDb250ZXh0IGVqYkNvbnRleHQzOwogCiAgICAgcHJpdmF0ZSBFSkJDb250ZXh0IGVqYkNvbnRleHQ0OwpAQCAtNzgsNyArNzgsNyBAQAogICAgICAgICBwcml2YXRlIHZvaWQgc2V0RUpCQ29udGV4dDYoRUpCQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgIGVqYkNvbnRleHQ2ID0gY29udGV4dDsKICAgICB9Ci0gICAgCisKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHB1YmxpYyB2b2lkIGFmdGVyQ3JlYXRlKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNsZXNzRUpCMzo6YWZ0ZXJDcmVhdGUoKSBtYXJrZWQgYXMgUG9zdENvbnN0cnVjdCIpOwpAQCAtMTM2LDEzICsxMzYsMTMgQEAKICAgICB9CiAKICAgICBwdWJsaWMgQ29sbGVjdGlvbiByb3VuZFRyaXAyKENvbGxlY3Rpb24gY29sbGVjdGlvbk9mU2xlc3MpIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTbGVzc0VKQjM6OnJvdW5kVHJpcDIgIiArIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNsZXNzRUpCMzo6cm91bmRUcmlwMiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25PZlNsZXNzKTsKICAgICAgICAgaWYoIGNvbGxlY3Rpb25PZlNsZXNzLnNpemUoKSA+IDAgKSB7CiAgICAgICAgICAgICBTbGVzcyBzbGVzcyA9IChTbGVzcykgY29sbGVjdGlvbk9mU2xlc3MuaXRlcmF0b3IoKS5uZXh0KCk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlucHV0IFNsZXNzLmdldElkKCkgPSAiICsgc2xlc3MuZ2V0SWQoKSk7ICAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW5wdXQgU2xlc3MuZ2V0SWQoKSA9ICIgKyBzbGVzcy5nZXRJZCgpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY29sbGVjdGlvbk9mU2xlc3M7Ci0gICAgfSAgICAKKyAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24zL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24zL2J1aWxkLnhtbAppbmRleCBhNzA0YTZhLi40ZWVmMTM5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjMvYnVpbGQueG1sCkBAIC01NSwxMyArNTUsMTMgQEAKICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZS5zcWwiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InVuc2V0dXBfc3FsIiBkZXBlbmRzPSJpbml0Ij4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wLnNxbCIvPgogICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0icHJlcGFyZSI+CiAgICAgICAgIDxqYXZhYyBzcmNkaXI9ImVqYiIgZGVzdGRpcj0iJHtlamIuYnVpbGQuZGlyfSI+CiAgICAgICAgICA8Y2xhc3NwYXRoIHJlZmlkPSJnZnYzLmNsYXNzcGF0aCIvPgpAQCAtMTEwLDExICsxMTAsMTEgQEAKICAgICAgICAgICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICAgICAgICAgICA8Y29weSBmaWxlPSJjbGllbnQvTUFOSUZFU1QuTUYiCiAgICAgICAgICAgICAgICAgICAgdG9kaXI9IiR7Y2xpZW50LmJ1aWxkLmRpcn0vTUVUQS1JTkYiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICA8Y29weSBmaWxlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIKLQkJCSAgIHRvZGlyPSIke2Vhci5idWlsZC5kaXJ9L01FVEEtSU5GIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgICAgICAgICAgICAgdG9kaXI9IiR7ZWFyLmJ1aWxkLmRpcn0vTUVUQS1JTkYiLz4KKyAgICA8L3RhcmdldD4KKwogICAgPHRhcmdldCBuYW1lPSJkZXBsb3lkaXIuYXNhZG1pbiIgZGVwZW5kcz0icHJlcGFyZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tbW9uLmRlcGxveWRpci5hc2FkbWluIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIKQEAgLTEyOSw3ICsxMjksNyBAQAogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95LmFzYWRtaW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbW1vbi51bmRlcGxveS5hc2FkbWluIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIKQEAgLTE0NCw5ICsxNDQsOSBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InByb2Nlc3NSZXN1bHQiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InJlc3VsdCIgdmFsdWU9IiR7cmVzdWx0fSIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImxvZyIgdmFsdWU9IiR7YnVpbGR9LyR7bG9nLmlkfS5vdXRwdXQubG9nIi8+Ci0gICAgICAgIDwvYW50Y2FsbD4gICAgCisgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icHJpdmF0ZS1hbGwiPgogICAgICAgICA8IS0tCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic3RhcnREZXJieSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjMvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjMvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGU0ZmZkNDguLmE3YTBjMWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24zL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMy9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI5LDI4ICsyOSwyOCBAQAogaW1wb3J0IGpha2FydGEucGVyc2lzdGVuY2UuRW50aXR5TWFuYWdlcjsKIAogcHVibGljIGNsYXNzIENsaWVudCB7Ci0gICAgCisKICAgICBwcml2YXRlIFN0cmluZyBob3N0OwogICAgIHByaXZhdGUgU3RyaW5nIHBvcnQ7CiAKLSAgICBAUGVyc2lzdGVuY2VVbml0IAorICAgIEBQZXJzaXN0ZW5jZVVuaXQKICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgRW50aXR5TWFuYWdlckZhY3RvcnkgZW1mMTsKIAotICAgIEBQZXJzaXN0ZW5jZVVuaXQobmFtZT0ibXllbWYiLCB1bml0TmFtZT0iZm9vIikgCisgICAgQFBlcnNpc3RlbmNlVW5pdChuYW1lPSJteWVtZiIsIHVuaXROYW1lPSJmb28iKQogICAgICAgICBwcml2YXRlIHN0YXRpYyBFbnRpdHlNYW5hZ2VyRmFjdG9yeSBlbWYyOwogCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgICAgICBob3N0ID0gKCBhcmdzLmxlbmd0aCA+IDApID8gYXJnc1swXSA6ICJsb2NhbGhvc3QiOwogICAgICAgICBwb3J0ID0gKCBhcmdzLmxlbmd0aCA+IDEpID8gYXJnc1sxXSA6ICI0ODQ4IjsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgZW52ID0gbnVsbDsKICAgICAgICAgdHJ5IHsKIApAQCAtNzQsMTEgKzc0LDExIEBACiAgICAgICAgICAgICB9CiAKIAotICAgICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgCisgICAgICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKwogICAgICAgICAgICAgICAgICIvZWpiLWVqYjMwLWhlbGxvLXNlc3Npb24zL3NlcnZsZXQiOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnZva2luZyB3ZWJjbGllbnQgc2VydmxldCBhdCAiICsgdXJsKTsKICAgICAgICAgICAgIGludCBjb2RlID0gaW52b2tlU2VydmxldCh1cmwpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmKGNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbmNvcnJlY3QgcmV0dXJuIGNvZGU6ICIgKyBjb2RlKTsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC04OCwxNSArODgsMTUgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSm1zIHdlYiB0ZXN0IGZhaWxlZC4iKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybjsKLSAgICAgICAgCisKICAgICB9CiAKICAgICBwcml2YXRlIGludCBpbnZva2VTZXJ2bGV0KFN0cmluZyB1cmwpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAgICAgCisKICAgICAgICAgVVJMIHUgPSBuZXcgVVJMKHVybCk7Ci0gICAgICAgIAorCiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGMxID0gKEh0dHBVUkxDb25uZWN0aW9uKXUub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgaW50IGNvZGUgPSBjMS5nZXRSZXNwb25zZUNvZGUoKTsKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBjMS5nZXRJbnB1dFN0cmVhbSgpOwpAQCAtMTA5LDYgKzEwOSw2IEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNvZGU7CiAgICAgfQotICAgIAorCiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24zL2VqYi9IZWxsby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjMvZWpiL0hlbGxvLmphdmEKaW5kZXggYTVkOTMzZi4uNTRiY2NhMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjMvZWpiL0hlbGxvLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjMvZWpiL0hlbGxvLmphdmEKQEAgLTE5LDUgKzE5LDUgQEAKIHB1YmxpYyBpbnRlcmZhY2UgSGVsbG8gewogCiAgICAgcHVibGljIHZvaWQgaGVsbG8oKTsKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjMvZWpiL0hlbGxvRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMy9lamIvSGVsbG9FSkIuamF2YQppbmRleCBmNzdhZjAzLi4xNDA4ZDYwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMy9lamIvSGVsbG9FSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMy9lamIvSGVsbG9FSkIuamF2YQpAQCAtMjgsMTYgKzI4LDE2IEBACiAKIEBTdGF0ZWxlc3MgcHVibGljIGNsYXNzIEhlbGxvRUpCIGltcGxlbWVudHMgSGVsbG8gewogCi0gICAgQFBlcnNpc3RlbmNlVW5pdCAKKyAgICBAUGVyc2lzdGVuY2VVbml0CiAgICAgICAgIHByaXZhdGUgRW50aXR5TWFuYWdlckZhY3RvcnkgZW1mMTsKIAotICAgIEBQZXJzaXN0ZW5jZVVuaXQobmFtZT0ibXllbWYiLCB1bml0TmFtZT0iZm9vIikgCisgICAgQFBlcnNpc3RlbmNlVW5pdChuYW1lPSJteWVtZiIsIHVuaXROYW1lPSJmb28iKQogICAgICAgICBwcml2YXRlIEVudGl0eU1hbmFnZXJGYWN0b3J5IGVtZjI7CiAKICAgICBAUGVyc2lzdGVuY2VDb250ZXh0CiAgICAgICAgIHByaXZhdGUgRW50aXR5TWFuYWdlciBlbTE7CiAKLSAgICBAUGVyc2lzdGVuY2VDb250ZXh0KG5hbWU9Im15ZW0iLCAKKyAgICBAUGVyc2lzdGVuY2VDb250ZXh0KG5hbWU9Im15ZW0iLAogICAgICAgICAgICAgICAgICAgICAgICAgdW5pdE5hbWU9ImZvbyIsIHR5cGU9UGVyc2lzdGVuY2VDb250ZXh0VHlwZS5FWFRFTkRFRCkKICAgICAgICAgcHJpdmF0ZSBFbnRpdHlNYW5hZ2VyIGVtMjsKIApAQCAtNjAsMTEgKzYwLDExIEBACiAKICAgICAgICAgICAgICAgICBFbnRpdHlNYW5hZ2VyIGxvb2t1cGVtMiA9IChFbnRpdHlNYW5hZ2VyKQogICAgICAgICAgICAgICAgICAgICBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvbXllbSIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGpha2FydGEuZWpiLkVKQkV4Y2VwdGlvbihlKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG9FSkIgc3VjY2Vzc2Z1bCBpbmplY3Rpb24gb2YgRU1GL0VNIHJlZmVyZW5jZXMhIik7CiAgICAgICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMy9lamIvSGVsbG9TdGF0ZWZ1bC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjMvZWpiL0hlbGxvU3RhdGVmdWwuamF2YQppbmRleCBkODU1NjhhLi40NWIwZDEwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMy9lamIvSGVsbG9TdGF0ZWZ1bC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24zL2VqYi9IZWxsb1N0YXRlZnVsLmphdmEKQEAgLTE5LDcgKzE5LDcgQEAKIHB1YmxpYyBpbnRlcmZhY2UgSGVsbG9TdGF0ZWZ1bCB7CiAKICAgICBwdWJsaWMgdm9pZCBoZWxsbygpOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2xlZXBGb3IoaW50IHNlYyk7CiAKICAgICBwdWJsaWMgdm9pZCBwaW5nKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMy9lamIvSGVsbG9TdGF0ZWZ1bEVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjMvZWpiL0hlbGxvU3RhdGVmdWxFSkIuamF2YQppbmRleCA0NDQxYmI4Li45OWJlYzMwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMy9lamIvSGVsbG9TdGF0ZWZ1bEVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24zL2VqYi9IZWxsb1N0YXRlZnVsRUpCLmphdmEKQEAgLTIxLDcgKzIxLDcgQEAKIAogQFN0YXRlZnVsIHB1YmxpYyBjbGFzcyBIZWxsb1N0YXRlZnVsRUpCIGltcGxlbWVudHMgSGVsbG9TdGF0ZWZ1bCB7CiAKLSAgICAKKwogICAgIEBQb3N0Q29uc3RydWN0IHB1YmxpYyB2b2lkIHBvc3RDb25zdHJ1Y3Rpb24oKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TdGF0ZWZ1bEVKQjo6cG9zdENvbnN0cnVjdGlvbigpIik7CiAgICAgfQpAQCAtMzEsMTIgKzMxLDEyIEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2xlZXBGb3IoaW50IHNlYykgewotCXRyeSB7Ci0JICAgIGZvciAoaW50IGk9MCA7IGk8c2VjOyBpKyspIHsKLQkJVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCgxMDAwKTsKLQkgICAgfQotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCX0KKyAgICB0cnkgeworICAgICAgICBmb3IgKGludCBpPTAgOyBpPHNlYzsgaSsrKSB7CisgICAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoMTAwMCk7CisgICAgICAgIH0KKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgcGluZygpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24zL3BlcnNpc3RlbmNlL1BlcnNvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjMvcGVyc2lzdGVuY2UvUGVyc29uLmphdmEKaW5kZXggZjBmMTdiMC4uZjcxNjhjNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjMvcGVyc2lzdGVuY2UvUGVyc29uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjMvcGVyc2lzdGVuY2UvUGVyc29uLmphdmEKQEAgLTMwLDEwICszMCwxMCBAQAogICAgIHB1YmxpYyBQZXJzb24oU3RyaW5nIG5hbWUpewogICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZSBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCl7CiAgICAgICAgIHJldHVybiAiUGVyc29uOiB7IisiKG5hbWUgPSAiK25hbWUrIil9IjsKICAgICB9CiAKIH0KLSAKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjMvc2VydmxldC9IZWxsby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjMvc2VydmxldC9IZWxsby5qYXZhCmluZGV4IGE1ZDkzM2YuLjU0YmNjYTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24zL3NlcnZsZXQvSGVsbG8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMy9zZXJ2bGV0L0hlbGxvLmphdmEKQEAgLTE5LDUgKzE5LDUgQEAKIHB1YmxpYyBpbnRlcmZhY2UgSGVsbG8gewogCiAgICAgcHVibGljIHZvaWQgaGVsbG8oKTsKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjMvc2VydmxldC9IZWxsb1N0YXRlZnVsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMy9zZXJ2bGV0L0hlbGxvU3RhdGVmdWwuamF2YQppbmRleCBkODU1NjhhLi40NWIwZDEwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMy9zZXJ2bGV0L0hlbGxvU3RhdGVmdWwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci9zZXNzaW9uMy9zZXJ2bGV0L0hlbGxvU3RhdGVmdWwuamF2YQpAQCAtMTksNyArMTksNyBAQAogcHVibGljIGludGVyZmFjZSBIZWxsb1N0YXRlZnVsIHsKIAogICAgIHB1YmxpYyB2b2lkIGhlbGxvKCk7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzbGVlcEZvcihpbnQgc2VjKTsKIAogICAgIHB1YmxpYyB2b2lkIHBpbmcoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3Nlc3Npb24zL3NlcnZsZXQvU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjMvc2VydmxldC9TZXJ2bGV0LmphdmEKaW5kZXggZTgzNWZiYi4uM2E1MWU4NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjMvc2VydmxldC9TZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIvc2Vzc2lvbjMvc2VydmxldC9TZXJ2bGV0LmphdmEKQEAgLTgwLDMwICs4MCwzMCBAQAogICAgIH0KIAogCi0gICAgQFBlcnNpc3RlbmNlVW5pdCAKKyAgICBAUGVyc2lzdGVuY2VVbml0CiAgICAgICAgIHByaXZhdGUgRW50aXR5TWFuYWdlckZhY3RvcnkgZW1mMTsKIAotICAgIEBQZXJzaXN0ZW5jZVVuaXQobmFtZT0ibXllbWYiLCB1bml0TmFtZT0iZm9vIikgCisgICAgQFBlcnNpc3RlbmNlVW5pdChuYW1lPSJteWVtZiIsIHVuaXROYW1lPSJmb28iKQogICAgICAgICBwcml2YXRlIEVudGl0eU1hbmFnZXJGYWN0b3J5IGVtZjI7CiAKICAgICBAUGVyc2lzdGVuY2VDb250ZXh0CiAgICAgICAgIHByaXZhdGUgRW50aXR5TWFuYWdlciBlbTE7CiAKLSAgICBAUGVyc2lzdGVuY2VDb250ZXh0KG5hbWU9Im15ZW0iLCAKKyAgICBAUGVyc2lzdGVuY2VDb250ZXh0KG5hbWU9Im15ZW0iLAogICAgICAgICAgICAgICAgICAgICAgICAgdW5pdE5hbWU9ImZvbyIsIHR5cGU9UGVyc2lzdGVuY2VDb250ZXh0VHlwZS5UUkFOU0FDVElPTikKICAgICAgICAgcHJpdmF0ZSBFbnRpdHlNYW5hZ2VyIGVtMjsKIAogICAgIHB1YmxpYyB2b2lkICBpbml0KCBTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gd2ViY2xpZW50OjpzZXJ2bGV0Li4uIGluaXQoKSIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlcnZpY2UgKCBIdHRwU2VydmxldFJlcXVlc3QgcmVxICwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwICkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLSAgICAgICAgICAgICAgICAgCisKICAgICAgICAgcmVzcC5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3AuZ2V0V3JpdGVyKCk7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAKICAgICAgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CkBAIC0xMjIsNyArMTIyLDcgQEAKIAogICAgICAgICAgICAgICAgIEVudGl0eU1hbmFnZXIgbG9va3VwZW0yID0gKEVudGl0eU1hbmFnZXIpCiAgICAgICAgICAgICAgICAgICAgIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9teWVtIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlcnZsZXQgc3VjY2Vzc2Z1bCBpbmplY3Rpb24gb2YgRU1GL0VNIHJlZmVyZW5jZXMhIik7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIk9uZSBvciBtb3JlIEVNRi9FTSByZWZlcmVuY2VzIiArCkBAIC0xNTEsMTcgKzE1MSwxNyBAQAogICAgICAgICAgICAgaGVsbG9TdGF0ZWZ1bC5oZWxsbygpOwogICAgICAgICAgICAgaGVsbG9TdGF0ZWZ1bDIuaGVsbG8oKTsKIAotICAgICAgICAgICAgSGVsbG8gaGVsbG9TdGF0ZWxlc3MzID0gKEhlbGxvKSAKKyAgICAgICAgICAgIEhlbGxvIGhlbGxvU3RhdGVsZXNzMyA9IChIZWxsbykKICAgICAgICAgICAgICAgICBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvaGVsbG9TdGF0ZWxlc3MzIik7CiAKICAgICAgICAgICAgIGhlbGxvU3RhdGVsZXNzMy5oZWxsbygpOwogCi0gICAgICAgICAgICBIZWxsbyBoZWxsb1N0YXRlbGVzczQgPSAoSGVsbG8pIAorICAgICAgICAgICAgSGVsbG8gaGVsbG9TdGF0ZWxlc3M0ID0gKEhlbGxvKQogICAgICAgICAgICAgICAgIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9oZWxsb1N0YXRlbGVzczQiKTsKIAogICAgICAgICAgICAgaGVsbG9TdGF0ZWxlc3M0LmhlbGxvKCk7CiAKLSAgICAgICAgICAgIEhlbGxvU3RhdGVmdWwgaGVsbG9TdGF0ZWZ1bDMgPSAoSGVsbG9TdGF0ZWZ1bCkgCisgICAgICAgICAgICBIZWxsb1N0YXRlZnVsIGhlbGxvU3RhdGVmdWwzID0gKEhlbGxvU3RhdGVmdWwpCiAgICAgICAgICAgICAgICAgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2hlbGxvU3RhdGVmdWwzIik7CiAKICAgICAgICAgICAgIGhlbGxvU3RhdGVmdWwzLmhlbGxvKCk7CkBAIC0xOTMsNjYgKzE5Myw2NiBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJkczYgbG9naW4gdGltZW91dCA9ICIgKyBsb2dpblRpbWVvdXQpOwogCiAKLQkgICAgdHJ5IHsKLQkJTXlUaHJlYWQgdGhyZWFkID0gbmV3IE15VGhyZWFkKGhlbGxvU3RhdGVmdWwyKTsKLQkJdGhyZWFkLnN0YXJ0KCk7CisgICAgICAgIHRyeSB7CisgICAgICAgIE15VGhyZWFkIHRocmVhZCA9IG5ldyBNeVRocmVhZChoZWxsb1N0YXRlZnVsMik7CisgICAgICAgIHRocmVhZC5zdGFydCgpOwogCi0JCXNsZWVwRm9yKDEwKTsKLQkJaGVsbG9TdGF0ZWZ1bDIucGluZygpOwotCQl0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJEaWQgbm90IGdldCBDb25jdXJyZW50QWNjZXNzRXhjZXB0aW9uIik7Ci0JICAgIH0gY2F0Y2ggKGpha2FydGEuZWpiLkNvbmN1cnJlbnRBY2Nlc3NFeGNlcHRpb24gY29uRXgpIHsKLQkJOyAgIC8vRXZlcnl0aGluZyBpcyBmaW5lCi0JICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0aCkgewotCQl0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJHb3Qgc29tZSB3aWVyZCBleGNlcHRpb246ICIgKyB0aCk7Ci0JICAgIH0KKyAgICAgICAgc2xlZXBGb3IoMTApOworICAgICAgICBoZWxsb1N0YXRlZnVsMi5waW5nKCk7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIkRpZCBub3QgZ2V0IENvbmN1cnJlbnRBY2Nlc3NFeGNlcHRpb24iKTsKKyAgICAgICAgfSBjYXRjaCAoamFrYXJ0YS5lamIuQ29uY3VycmVudEFjY2Vzc0V4Y2VwdGlvbiBjb25FeCkgeworICAgICAgICA7ICAgLy9FdmVyeXRoaW5nIGlzIGZpbmUKKyAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHRoKSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIkdvdCBzb21lIHdpZXJkIGV4Y2VwdGlvbjogIiArIHRoKTsKKyAgICAgICAgfQogCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInN1Y2Nlc3NmdWxseSBhY2Nlc3NlZCBjb25uZWN0aW9ucyIpOwogCiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPEhUTUw+IDxIRUFEPiA8VElUTEU+IEpNUyBTZXJ2bGV0IE91dHB1dCA8L1RJVExFPiA8L0hFQUQ+IDxCT0RZIEJHQ09MT1I9d2hpdGU+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPENFTlRFUj4gPEZPTlQgc2l6ZT0rMSBDT0xPUj1ibHVlPkRhdGFiYXNlU2VydmVsdCA6OiBBbGwgaW5mb3JtYXRpb24gSSBjYW4gZ2l2ZSA8L0ZPTlQ+IDwvQ0VOVEVSPiA8cD4gIiApOwotICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBDb250ZXh0IFBhdGggOiAgPC9GT05UPiAiICsgcmVxLmdldENvbnRleHRQYXRoKCkgKyAiPGJyPiIgKTsgCi0gICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IFNlcnZsZXQgUGF0aCA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0U2VydmxldFBhdGgoKSArICI8YnI+IiApOyAKLSAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gUGF0aCBJbmZvIDogIDwvRk9OVD4gIiArIHJlcS5nZXRQYXRoSW5mbygpICsgIjxicj4iICk7IAorICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBDb250ZXh0IFBhdGggOiAgPC9GT05UPiAiICsgcmVxLmdldENvbnRleHRQYXRoKCkgKyAiPGJyPiIgKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gU2VydmxldCBQYXRoIDogIDwvRk9OVD4gIiArIHJlcS5nZXRTZXJ2bGV0UGF0aCgpICsgIjxicj4iICk7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IFBhdGggSW5mbyA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0UGF0aEluZm8oKSArICI8YnI+IiApOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvQk9EWT4gPC9IVE1MPiAiKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH1jYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigid2ViY2xpZW50IHNlcnZsZXQgdGVzdCBmYWlsZWQiKTsKICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGV4KTsKLSAgICAgICAgfSAKKyAgICAgICAgfQogICAgIH0KIAotICAgIAotICAgIAorCisKICAgICBwdWJsaWMgdm9pZCAgZGVzdHJveSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbiB3ZWJjbGllbnQ6OnNlcnZsZXQgZGVzdHJveSIpOwogICAgIH0KIAogICAgIGNsYXNzIE15VGhyZWFkIGV4dGVuZHMgVGhyZWFkIHsKLQlIZWxsb1N0YXRlZnVsIHJlZjsKKyAgICBIZWxsb1N0YXRlZnVsIHJlZjsKIAotCU15VGhyZWFkKEhlbGxvU3RhdGVmdWwgcmVmKSB7Ci0JICAgIHRoaXMucmVmID0gcmVmOwotCX0KKyAgICBNeVRocmVhZChIZWxsb1N0YXRlZnVsIHJlZikgeworICAgICAgICB0aGlzLnJlZiA9IHJlZjsKKyAgICB9CiAKLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JICAgIHRyeSB7Ci0JCXJlZi5zbGVlcEZvcigyMCk7Ci0JICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0aCkgewotCQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiQ291bGQgbm90IGludm9rZSB3YWl0Zm9yKCkgbWV0aG9kIik7Ci0JICAgIH0KLQl9CisgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICB0cnkgeworICAgICAgICByZWYuc2xlZXBGb3IoMjApOworICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdGgpIHsKKyAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkNvdWxkIG5vdCBpbnZva2Ugd2FpdGZvcigpIG1ldGhvZCIpOworICAgICAgICB9CisgICAgfQogICAgIH0KIAogCiAgICAgcHJpdmF0ZSB2b2lkIHNsZWVwRm9yKGludCBzZWMpIHsKLQl0cnkgewotCSAgICBmb3IgKGludCBpPTAgOyBpPHNlYzsgaSsrKSB7Ci0JCVRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoMTAwMCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiWyIgKyBpICsgIi8iICsgc2VjICsgIl06IFNsZWVwaW5nLi4uLiIpOwotCSAgICB9Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JfQorICAgIHRyeSB7CisgICAgICAgIGZvciAoaW50IGk9MCA7IGk8c2VjOyBpKyspIHsKKyAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCgxMDAwKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbIiArIGkgKyAiLyIgKyBzZWMgKyAiXTogU2xlZXBpbmcuLi4uIik7CisgICAgICAgIH0KKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICB9CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci94bWxvdmVycmlkZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci94bWxvdmVycmlkZS9idWlsZC54bWwKaW5kZXggYmM4ZGI1YS4uOWFiOWU2ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIveG1sb3ZlcnJpZGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3htbG92ZXJyaWRlL2J1aWxkLnhtbApAQCAtNDQsNyArNDQsNyBAQAogICAgICAgICAgIDxjbGFzc3BhdGggcmVmaWQ9ImdmdjMuY2xhc3NwYXRoIi8+CiAgICAgICAgICA8L2phdmFjPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjcmVhdGUudXNlciIgZGVwZW5kcz0ic2V0QXNhZG1pbkFyZ3NXaXRob3V0UGFzc3dvcmQiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbW1vbi5jcmVhdGV1c2VyLmFzYWRtaW4iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IgpAQCAtODcsOCArODcsOCBAQAogICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiLz4KICAgICAgICAgICAgIDwvbWV0YWluZj4KICAgICAgICAgPC9lYXI+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kuYXNhZG1pbiIgZGVwZW5kcz0icHJlcGFyZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tbW9uLmRlcGxveS5hc2FkbWluIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIgdmFsdWU9Ii0tcmV0cmlldmUgJHthcmNoaXZlZGlyfSAtLW5hbWUgJHt0ZXN0TmFtZX0gJHthbGwuZWFyfSIvPgpAQCAtMTA4LDcgKzEwOCw3IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiIHZhbHVlPSIke3Rlc3ROYW1lfSIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InRlc3ROYW1lIiB2YWx1ZT0iJHt0ZXN0TmFtZX0iLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW5jbGllbnQiIGRlcGVuZHM9InByZXBhcmUsc2V0T3JiUG9ydDIiPgogICAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FQUENMSUVOVH0iIHJlc3VsdHByb3BlcnR5PSJyZXN1bHQiIGZhaWxvbmVycm9yPSJmYWxzZSIgb3V0cHV0PSIke2J1aWxkfS8ke2xvZy5pZH0ub3V0cHV0LmxvZyI+CkBAIC0xMjIsOSArMTIyLDkgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwcm9jZXNzUmVzdWx0Ij4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJyZXN1bHQiIHZhbHVlPSIke3Jlc3VsdH0iLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJsb2ciIHZhbHVlPSIke2J1aWxkfS8ke2xvZy5pZH0ub3V0cHV0LmxvZyIvPgotICAgICAgICA8L2FudGNhbGw+ICAKKyAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLnVzZXIiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc3NlbWJsZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIveG1sb3ZlcnJpZGUvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIveG1sb3ZlcnJpZGUvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGI0M2UzODAuLmRkZjAwYzQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3htbG92ZXJyaWRlL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci94bWxvdmVycmlkZS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI4LDggKzI4LDggQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJkZXBsb3ltZW50LWVqYjMwLWVhci14bWxvdmVycmlkZSIpOwogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHJpdmF0ZSBzdGF0aWMgQEVKQiBTbGVzcyBzbGVzczsKICAgICBwcml2YXRlIHN0YXRpYyBARUpCIFNmdWwgc2Z1bDsKIApAQCAtNzMsNiArNzMsNiBAQAogICAgICAgICAgICAgU3lzdGVtLmV4aXQoLTEpOwogICAgICAgICB9CiAKLSAgICAJcmV0dXJuOworICAgICAgICByZXR1cm47CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIveG1sb3ZlcnJpZGUvZWpiL1NmdWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3htbG92ZXJyaWRlL2VqYi9TZnVsLmphdmEKaW5kZXggN2Y5NjEyNS4uNjU5OWMwMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIveG1sb3ZlcnJpZGUvZWpiL1NmdWwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci94bWxvdmVycmlkZS9lamIvU2Z1bC5qYXZhCkBAIC0xNyw3ICsxNyw3IEBACiBwYWNrYWdlIGNvbS5zdW4uczFhc2Rldi5kZXBsb3ltZW50LmVqYjMwLmVhci54bWxvdmVycmlkZTsKIAogaW1wb3J0IGpha2FydGEuZWpiLlJlbW90ZTsKLQkKKwogQFJlbW90ZQogcHVibGljIGludGVyZmFjZSBTZnVsCiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci94bWxvdmVycmlkZS9lamIvU2Z1bEVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC9lYXIveG1sb3ZlcnJpZGUvZWpiL1NmdWxFSkIuamF2YQppbmRleCA5NmU4MDY5Li4zNDk3YTljIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL2Vhci94bWxvdmVycmlkZS9lamIvU2Z1bEVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvZWFyL3htbG92ZXJyaWRlL2VqYi9TZnVsRUpCLmphdmEKQEAgLTExNCw3ICsxMTQsNyBAQAogCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJDYW5ub3QgZ2V0IGV4cGVjdGVkIHZhbHVlOiAiICsgZXgpOwotICAgICAgICB9IAorICAgICAgICB9CiAgICAgICAgIHJldHVybiAiZ29vZE5pZ2h0IjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvd2FyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvd2FyL2J1aWxkLnhtbAppbmRleCA0MzJjNWFiLi5iYWJmZTRjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL3dhci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC93YXIvYnVpbGQueG1sCkBAIC0yMywxNCArMjMsMTQgQEAKIAogPHByb2plY3QgbmFtZT0iZWpiMzAiIGRlZmF1bHQ9ImFsbCIgYmFzZWRpcj0iLiI+CiAKLQkmY29tbW9uQnVpbGQ7CisgICAgJmNvbW1vbkJ1aWxkOwogCi0JPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCI+Ci0JCTxhbnQgZGlyPSJqc3AiIHRhcmdldD0icHJpdmF0ZS1hbGwiPgotCQkJPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0vanNwIi8+Ci0JCTwvYW50PgotCQk8YW50IGRpcj0ic2VydmxldCIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9zZXJ2bGV0Ii8+Ci0JCTwvYW50PgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0icHJpdmF0ZS1hbGwiPgorICAgICAgICA8YW50IGRpcj0ianNwIiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L2pzcCIvPgorICAgICAgICA8L2FudD4KKyAgICAgICAgPGFudCBkaXI9InNlcnZsZXQiIHRhcmdldD0icHJpdmF0ZS1hbGwiPgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0vc2VydmxldCIvPgorICAgICAgICA8L2FudD4KKyAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvd2FyL2pzcC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL3dhci9qc3AvV2ViVGVzdC5qYXZhCmluZGV4IDRlYmUwYWQuLmE5NzQwODYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvd2FyL2pzcC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC93YXIvanNwL1dlYlRlc3QuamF2YQpAQCAtMzEsNyArMzEsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ0LDE0ICs0NCwxNCBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQgKyAiLyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjb250ZXh0Um9vdCArICIvaW5kZXguanNwIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsgCisgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIldyb25nIHJlc3BvbnNlIGNvZGUuIEV4cGVjdGVkOiAyMDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCByZWNlaXZlZDogIiArIHJlc3BvbnNlQ29kZSk7CiAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgtMSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL3dhci9qc3AvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC93YXIvanNwL2J1aWxkLnhtbAppbmRleCBmMzdiNTUxLi41NmE2YmY5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL3dhci9qc3AvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvd2FyL2pzcC9idWlsZC54bWwKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgICA8Y2xhc3NwYXRoIHJlZmlkPSJnZnYzLmNsYXNzcGF0aCIvPgogICAgICAgICA8L2phdmFjPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZSIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDx3YXIgZGVzdGZpbGU9IiR7d2ViLndhcn0iIHdlYnhtbD0iZGVzY3JpcHRvci93ZWIueG1sIj4KICAgICAgICAgICAgIDxjbGFzc2VzIGRpcj0iJHtidWlsZH0iIGV4Y2x1ZGVzPSJXZWJUZXN0LmNsYXNzIi8+CkBAIC01Niw4ICs1Niw4IEBACiAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0ibXkudGxkIi8+CiAgICAgICAgICAgICA8L3dlYmluZj4KICAgICAgICAgPC93YXI+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kuYXNhZG1pbiIgZGVwZW5kcz0icHJlcGFyZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tbW9uLmRlcGxveS5hc2FkbWluIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIgdmFsdWU9Ii0tbmFtZSAke3Rlc3ROYW1lfSAke3dlYi53YXJ9Ii8+CkBAIC03Nyw3ICs3Nyw3IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiIHZhbHVlPSIke3Rlc3ROYW1lfSIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InRlc3ROYW1lIiB2YWx1ZT0iJHt0ZXN0TmFtZX0iLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW53ZWIiIGRlcGVuZHM9InByZXBhcmUsc2V0SHR0cFBvcnQyIj4KICAgICAgICAgPGphdmFXaXRoUmVzdWx0IGZvcms9InRydWUiIGZhaWxvbmVycm9yPSJmYWxzZSIganZtPSIke0pBVkF9IgpAQCAtOTQsOSArOTQsOSBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InByb2Nlc3NSZXN1bHQiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InJlc3VsdCIgdmFsdWU9IiR7cmVzdWx0fSIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImxvZyIgdmFsdWU9IiR7YnVpbGR9LyR7bG9nLmlkfS5vdXRwdXQubG9nIi8+Ci0gICAgICAgIDwvYW50Y2FsbD4gIAorICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc3NlbWJsZSIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlY2xhcmUtdGVzdCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL3dhci9qc3Avd2ViL015RmlsdGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL3dhci9qc3Avd2ViL015RmlsdGVyLmphdmEKaW5kZXggNDM5YTg2OC4uYTYyNWJlNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC93YXIvanNwL3dlYi9NeUZpbHRlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvd2FyL2pzcC93ZWIvTXlGaWx0ZXIuamF2YQpAQCAtNDUsNyArNDUsNyBAQAogICAgIHB1YmxpYyB2b2lkIGluaXQoRmlsdGVyQ29uZmlnIGZpbHRlckNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogCiAgICAgICAgIFNlcnZsZXRDb250ZXh0IHNjID0gZmlsdGVyQ29uZmlnLmdldFNlcnZsZXRDb250ZXh0KCk7Ci0gICAgCisKICAgICAgICAgdHJ5IHsKIAogICAgICAgICAgICAgaW50IGxvZ2luVGltZW91dCA9IGRzMS5nZXRMb2dpblRpbWVvdXQoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvd2FyL2pzcC93ZWIvTXlUYWcuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvd2FyL2pzcC93ZWIvTXlUYWcuamF2YQppbmRleCBmYWQwZjM5Li5kNDk3YTA3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL3dhci9qc3Avd2ViL015VGFnLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC93YXIvanNwL3dlYi9NeVRhZy5qYXZhCkBAIC00NSw3ICs0NSw3IEBACiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgSnNwRXhjZXB0aW9uKGV4KTsKLSAgICAgICAgfSAKKyAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBTS0lQX0JPRFk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC93YXIvc2VydmxldC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL3dhci9zZXJ2bGV0L1dlYlRlc3QuamF2YQppbmRleCA5OTNjZjNhLi4zY2E2MzZlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL3dhci9zZXJ2bGV0L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL3dhci9zZXJ2bGV0L1dlYlRlc3QuamF2YQpAQCAtMzEsNyArMzEsNyBAQAogICAgICAgICBwb3J0ID0gSW50ZWdlci5wYXJzZUludChhcmdzWzFdKTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ0LDEyICs0NCwxMiBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBTdHJpbmcgY29udGV4dFBhdGggPSAiLyIgKyBjb250ZXh0Um9vdCArICIvc2VydmxldCI7CiAgICAgICAgIFNvY2tldCBzID0gbmV3IFNvY2tldChob3N0LCBwb3J0KTsKIAogICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSBzLmdldE91dHB1dFN0cmVhbSgpOwotICAgICAgICAKKwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKCJHRVQgIiArIGNvbnRleHRQYXRoICsgIiBIVFRQLzEuMFxuIikpOwogICAgICAgICBvcy53cml0ZSgoIkdFVCAiICsgY29udGV4dFBhdGggKyAiIEhUVFAvMS4wXG4iKS5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIkF1dGhvcml6YXRpb246IEJhc2ljIGFqSmxaVHBxTW1WbFxuIi5nZXRCeXRlcygpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvd2FyL3NlcnZsZXQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC93YXIvc2VydmxldC9idWlsZC54bWwKaW5kZXggNDI2MzliMS4uYTM0ZmFiZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC93YXIvc2VydmxldC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC93YXIvc2VydmxldC9idWlsZC54bWwKQEAgLTYyLDcgKzYyLDcgQEAKICAgICAgICAgICAgICAgICB2YWx1ZT0iZGVsZXRlLWZpbGUtdXNlciAke0FTQURNSU4tQVJHU30gLS1hdXRocmVhbG1uYW1lIGZpbGUgajJlZSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPHdhciBkZXN0ZmlsZT0iJHt3ZWIud2FyfSIgd2VieG1sPSJkZXNjcmlwdG9yL3dlYi54bWwiPgogICAgICAgICAgICAgPGNsYXNzZXMgZGlyPSIke2J1aWxkfSIgZXhjbHVkZXM9IldlYlRlc3QuY2xhc3MiLz4KQEAgLTcwLDggKzcwLDggQEAKICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJzdW4td2ViLnhtbCIvPgogICAgICAgICAgICAgPC93ZWJpbmY+CiAgICAgICAgIDwvd2FyPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95LmFzYWRtaW4iIGRlcGVuZHM9InByZXBhcmUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbW1vbi5kZXBsb3kuYXNhZG1pbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiIHZhbHVlPSItLW5hbWUgJHt0ZXN0TmFtZX0gJHt3ZWIud2FyfSIvPgpAQCAtOTEsNyArOTEsNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IiB2YWx1ZT0iJHt0ZXN0TmFtZX0iLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0TmFtZSIgdmFsdWU9IiR7dGVzdE5hbWV9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVud2ViIiBkZXBlbmRzPSJwcmVwYXJlLHNldEh0dHBQb3J0MiI+CiAgICAgICAgIDxqYXZhV2l0aFJlc3VsdCBmb3JrPSJ0cnVlIiBmYWlsb25lcnJvcj0iZmFsc2UiIGp2bT0iJHtKQVZBfSIKQEAgLTEwOCw5ICsxMDgsOSBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InByb2Nlc3NSZXN1bHQiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InJlc3VsdCIgdmFsdWU9IiR7cmVzdWx0fSIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImxvZyIgdmFsdWU9IiR7YnVpbGR9LyR7bG9nLmlkfS5vdXRwdXQubG9nIi8+Ci0gICAgICAgIDwvYW50Y2FsbD4gIAorICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUudXNlciIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzc2VtYmxlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL3dhci9zZXJ2bGV0L3dlYi9NeUZpbHRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC93YXIvc2VydmxldC93ZWIvTXlGaWx0ZXIuamF2YQppbmRleCA4Y2U2YzllLi4xYWEzMjk1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL3dhci9zZXJ2bGV0L3dlYi9NeUZpbHRlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvd2FyL3NlcnZsZXQvd2ViL015RmlsdGVyLmphdmEKQEAgLTM5LDcgKzM5LDcgQEAKICAgICBwdWJsaWMgdm9pZCBpbml0KEZpbHRlckNvbmZpZyBmaWx0ZXJDb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKIAogICAgICAgICBTZXJ2bGV0Q29udGV4dCBzYyA9IGZpbHRlckNvbmZpZy5nZXRTZXJ2bGV0Q29udGV4dCgpOwotICAgIAorCiAgICAgICAgIHRyeSB7CiAKICAgICAgICAgICAgIGludCBsb2dpblRpbWVvdXQgPSBkczEuZ2V0TG9naW5UaW1lb3V0KCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL3dhci9zZXJ2bGV0L3dlYi9TZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMwL3dhci9zZXJ2bGV0L3dlYi9TZXJ2bGV0LmphdmEKaW5kZXggN2NkNzNiOC4uNzRiZWQ4NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMC93YXIvc2VydmxldC93ZWIvU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzAvd2FyL3NlcnZsZXQvd2ViL1NlcnZsZXQuamF2YQpAQCAtNTAsNyArNTAsNyBAQAogICAgICAgICBpZiAocmVxLmlzVXNlckluUm9sZSgiajJlZSIpICYmICFyZXEuaXNVc2VySW5Sb2xlKCJndWVzdCIpKSB7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiSGVsbG8gV29ybGQiKTsKICAgICAgICAgICAgIGlmIChyZXEuZ2V0U2Vzc2lvbihmYWxzZSkgIT0gbnVsbCAmJgotICAgICAgICAgICAgICAgICAgICBCb29sZWFuLlRSVUUuZXF1YWxzKHBjb25zdHJ1Y3QuZ2V0KCkpKSB7IAorICAgICAgICAgICAgICAgICAgICBCb29sZWFuLlRSVUUuZXF1YWxzKHBjb25zdHJ1Y3QuZ2V0KCkpKSB7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4ocmVxLmdldFNlc3Npb24oZmFsc2UpLmdldEF0dHJpYnV0ZSgKICAgICAgICAgICAgICAgICAgICAgImRlcGxveW1lbnQuZWpiMzAud2FyLnNlcnZsZXQiKSk7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvYnVpbGQueG1sCmluZGV4IDBhYWJhZDAuLjM0ZTc0ZjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvYnVpbGQueG1sCkBAIC0yMywxNSArMjMsMTUgQEAKIAogPHByb2plY3QgbmFtZT0iZWpiMzEiIGRlZmF1bHQ9ImFsbCIgYmFzZWRpcj0iLiI+CiAKLQkmY29tbW9uQnVpbGQ7CisgICAgJmNvbW1vbkJ1aWxkOwogCiAgICAgICAgIDwhLS0gT25seSBydW4gdGhlIHRlc3RzIGluIFBFIG1vZGUgdGlsbCBhbGwgdGVzdHMgcGFzcyBpbiBFRSAtLT4KLQk8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIj4KLQkJPGFudCBkaXI9ImVqYmxpdGUiIHRhcmdldD0icHJpdmF0ZS1hbGwiPgotCQkJPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0vZWpibGl0ZSIvPgotCQk8L2FudD4KLQkJPGFudCBkaXI9ImpuZGl2YWxpZGF0aW9uIiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L2puZGl2YWxpZGF0aW9uIi8+Ci0JCTwvYW50PgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0icHJpdmF0ZS1hbGwiPgorICAgICAgICA8YW50IGRpcj0iZWpibGl0ZSIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9lamJsaXRlIi8+CisgICAgICAgIDwvYW50PgorICAgICAgICA8YW50IGRpcj0iam5kaXZhbGlkYXRpb24iIHRhcmdldD0icHJpdmF0ZS1hbGwiPgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0vam5kaXZhbGlkYXRpb24iLz4KKyAgICAgICAgPC9hbnQ+CisgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2VqYmxpdGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9lamJsaXRlL2J1aWxkLnhtbAppbmRleCA2MGNiMWY3Li5mOTc5MDkzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2VqYmxpdGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvZWpibGl0ZS9idWlsZC54bWwKQEAgLTIzLDExICsyMywxMSBAQAogCiA8cHJvamVjdCBuYW1lPSJlamJsaXRlIiBkZWZhdWx0PSJhbGwiIGJhc2VkaXI9Ii4iPgogCi0JJmNvbW1vbkJ1aWxkOworICAgICZjb21tb25CdWlsZDsKIAotCTx0YXJnZXQgbmFtZT0icHJpdmF0ZS1hbGwiPgotCQk8YW50IGRpcj0iamF2YW1vZHVsZSIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9qYXZhbW9kdWxlIi8+Ci0JCTwvYW50PgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0icHJpdmF0ZS1hbGwiPgorICAgICAgICA8YW50IGRpcj0iamF2YW1vZHVsZSIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9qYXZhbW9kdWxlIi8+CisgICAgICAgIDwvYW50PgorICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDg5NzM1NWMuLjJlZjg3MzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTMwLDQzICszMCw0MyBAQAogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImVqYjMxLWVqYmxpdGUtamF2YW1vZHVsZSIpOwotCWFwcE5hbWUgPSBhcmdzWzBdOwotCUNsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOyAgICAgICAKLSAgICAgICAgY2xpZW50LmRvVGVzdCgpOwkKKyAgICBhcHBOYW1lID0gYXJnc1swXTsKKyAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKKyAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgIH0KIAogICAgIHB1YmxpYyBDbGllbnQoU3RyaW5nW10gYXJncykgewotCWhvc3QgPSBhcmdzWzFdOworICAgIGhvc3QgPSBhcmdzWzFdOwogICAgICAgICBwb3J0ID0gYXJnc1syXTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAKLQl0cnkgeworICAgIHRyeSB7CiAKLQkgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgCisgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArCiAgICAgICAgICAgICAgICAgIi8iICsgYXBwTmFtZSArICIvSGVsbG9TZXJ2bGV0IjsKIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnZva2luZyB3ZWJjbGllbnQgc2VydmxldCBhdCAiICsgdXJsKTsKIAotCSAgICBVUkwgdSA9IG5ldyBVUkwodXJsKTsKLSAgICAgICAgCi0JICAgIEh0dHBVUkxDb25uZWN0aW9uIGMxID0gKEh0dHBVUkxDb25uZWN0aW9uKXUub3BlbkNvbm5lY3Rpb24oKTsKLQkgICAgaW50IGNvZGUgPSBjMS5nZXRSZXNwb25zZUNvZGUoKTsKLQkgICAgSW5wdXRTdHJlYW0gaXMgPSBjMS5nZXRJbnB1dFN0cmVhbSgpOwotCSAgICBCdWZmZXJlZFJlYWRlciBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlciAobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7Ci0JICAgIFN0cmluZyBsaW5lID0gbnVsbDsKLQkgICAgd2hpbGUoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKQotCQlTeXN0ZW0ub3V0LnByaW50bG4obGluZSk7Ci0JICAgIGlmKGNvZGUgIT0gMjAwKSB7Ci0JCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJJbmNvcnJlY3QgcmV0dXJuIGNvZGU6ICIgKyBjb2RlKTsKLQkgICAgfQorICAgICAgICBVUkwgdSA9IG5ldyBVUkwodXJsKTsKKworICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjMSA9IChIdHRwVVJMQ29ubmVjdGlvbil1Lm9wZW5Db25uZWN0aW9uKCk7CisgICAgICAgIGludCBjb2RlID0gYzEuZ2V0UmVzcG9uc2VDb2RlKCk7CisgICAgICAgIElucHV0U3RyZWFtIGlzID0gYzEuZ2V0SW5wdXRTdHJlYW0oKTsKKyAgICAgICAgQnVmZmVyZWRSZWFkZXIgaW5wdXQgPSBuZXcgQnVmZmVyZWRSZWFkZXIgKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOworICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CisgICAgICAgIHdoaWxlKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGxpbmUpOworICAgICAgICBpZihjb2RlICE9IDIwMCkgeworICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiSW5jb3JyZWN0IHJldHVybiBjb2RlOiAiICsgY29kZSk7CisgICAgICAgIH0KICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidGVzdCBjb21wbGV0ZSIpOwotCSAgICAKLQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisKKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgtMSk7Ci0JfQorICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL3dhci9CYXJNYW5hZ2VkQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvd2FyL0Jhck1hbmFnZWRCZWFuLmphdmEKaW5kZXggZDFkZjNmNi4uNGFlNzEyOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvd2FyL0Jhck1hbmFnZWRCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvd2FyL0Jhck1hbmFnZWRCZWFuLmphdmEKQEAgLTI5LDcgKzI5LDcgQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBCYXJNYW5hZ2VkQmVhbjo6aW5pdCgpICIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gQmFyTWFuYWdlZEJlYW46OmluaXQoKSAiKTsKICAgICB9CiAKICAgIHB1YmxpYyB2b2lkIGJhcigpIHsKQEAgLTM5LDEyICszOSwxMiBAQAogCiAgICAgQFByZURlc3Ryb3kKICAgICBwcml2YXRlIHZvaWQgZGVzdHJveSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEJhck1hbmFnZWRCZWFuOjpkZXN0cm95KCkgIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBCYXJNYW5hZ2VkQmVhbjo6ZGVzdHJveSgpICIpOwogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JcmV0dXJuICJCYXJNYW5hZ2VkQmVhbiB0aGlzID0gIiArIHN1cGVyLnRvU3RyaW5nKCkgKyAKLQkgICAgIiBzID0gIiArIHMgKyAiICwgZHMgPSAiICsgZHM7CisgICAgcmV0dXJuICJCYXJNYW5hZ2VkQmVhbiB0aGlzID0gIiArIHN1cGVyLnRvU3RyaW5nKCkgKworICAgICAgICAiIHMgPSAiICsgcyArICIgLCBkcyA9ICIgKyBkczsKIAogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvd2FyL0Zvb01hbmFnZWRCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvRm9vTWFuYWdlZEJlYW4uamF2YQppbmRleCBlYTYwYThlLi4wODNhOTgwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvRm9vTWFuYWdlZEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvRm9vTWFuYWdlZEJlYW4uamF2YQpAQCAtMzgsMjAgKzM4LDIwIEBACiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vTWFuYWdlZEJlYW46OmluaXQoKSAiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb01hbmFnZWRCZWFuOjppbml0KCkgIik7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZm9vKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vTWFuYWdlZEJlYW46OmZvbygpICIpOwotCWJtYi5iYXIoKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb01hbmFnZWRCZWFuOjpmb28oKSAiKTsKKyAgICBibWIuYmFyKCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZm9vYmFyKFN0cmluZyBzKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJmb29iYXI6OnMgPSAiICsgcyk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJmb29iYXI6OnMgPSAiICsgcyk7CiAgICAgfQogCiAgICAgcHVibGljIE9iamVjdCBnZXRUaGlzKCkgewotCXJldHVybiB0aGlzOworICAgIHJldHVybiB0aGlzOwogICAgIH0KIAogICAgIHB1YmxpYyBpbnQgcmV0dXJuSW50Tm9FeGNlcHRpb25zKCkgeyByZXR1cm4gMTsgfQpAQCAtNzAsMjAgKzcwLDIwIEBACiAKICAgICBAUHJlRGVzdHJveQogICAgIHByaXZhdGUgdm9pZCBkZXN0cm95KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vTWFuYWdlZEJlYW46OmRlc3Ryb3koKSAiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb01hbmFnZWRCZWFuOjpkZXN0cm95KCkgIik7CiAgICAgfQogCiAKICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotCXJldHVybiAiRm9vTWFuYWdlZEJlYW4gdGhpcyA9ICIgKyBzdXBlci50b1N0cmluZygpICsgCi0JCQkgICAiIHMgPSAiICsgcyArICIgLCBvcmIgPSAiICsgb3JiICsgCi0JICAgICIgLCBibWIgPSAiICsgYm1iICsgIiAsIGVtID0gIiArIGVtOworICAgIHJldHVybiAiRm9vTWFuYWdlZEJlYW4gdGhpcyA9ICIgKyBzdXBlci50b1N0cmluZygpICsKKyAgICAgICAgICAgICAgICIgcyA9ICIgKyBzICsgIiAsIG9yYiA9ICIgKyBvcmIgKworICAgICAgICAiICwgYm1iID0gIiArIGJtYiArICIgLCBlbSA9ICIgKyBlbTsKICAgICB9CiAKICAgICBAQXJvdW5kSW52b2tlCiAgICAgcHVibGljIE9iamVjdCBhcm91bmQoSW52b2NhdGlvbkNvbnRleHQgYykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29NYW5hZ2VkQmVhbjo6YXJvdW5kKCkgIik7Ci0JcmV0dXJuIGMucHJvY2VlZCgpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vTWFuYWdlZEJlYW46OmFyb3VuZCgpICIpOworICAgIHJldHVybiBjLnByb2NlZWQoKTsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL3dhci9IZWxsb1NlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL3dhci9IZWxsb1NlcnZsZXQuamF2YQppbmRleCA3ODI3N2QyLi44ZDI3YWYwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvSGVsbG9TZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvd2FyL0hlbGxvU2VydmxldC5qYXZhCkBAIC03Myw5MSArNzMsOTEgQEAKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKIAotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TZXJ2bGV0Ojppbml0Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NlcnZsZXQ6OmluaXQiKTsKIAotCXRyeSB7Ci0JICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JICAgIHNiMiA9IChTaW5nbGV0b25CZWFuKSBpYy5sb29rdXAoImphdmE6bW9kdWxlL1NpbmdsZXRvbkJlYW4iKTsKLQkgICAgc2IzID0gKFNpbmdsZXRvbkJlYW4pIGljLmxvb2t1cCgiamF2YTptb2R1bGUvU2luZ2xldG9uQmVhbiFjb20uYWNtZS5TaW5nbGV0b25CZWFuIik7CisgICAgdHJ5IHsKKyAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgc2IyID0gKFNpbmdsZXRvbkJlYW4pIGljLmxvb2t1cCgiamF2YTptb2R1bGUvU2luZ2xldG9uQmVhbiIpOworICAgICAgICBzYjMgPSAoU2luZ2xldG9uQmVhbikgaWMubG9va3VwKCJqYXZhOm1vZHVsZS9TaW5nbGV0b25CZWFuIWNvbS5hY21lLlNpbmdsZXRvbkJlYW4iKTsKIAotCSAgICBzYjQgPSAoU2luZ2xldG9uQmVhbikgaWMubG9va3VwKCJqYXZhOm1vZHVsZS9FUzEiKTsKLQkgICAgc2I1ID0gKFNpbmdsZXRvbkJlYW4pIGljLmxvb2t1cCgiamF2YTptb2R1bGUvZW52L0VTMiIpOworICAgICAgICBzYjQgPSAoU2luZ2xldG9uQmVhbikgaWMubG9va3VwKCJqYXZhOm1vZHVsZS9FUzEiKTsKKyAgICAgICAgc2I1ID0gKFNpbmdsZXRvbkJlYW4pIGljLmxvb2t1cCgiamF2YTptb2R1bGUvZW52L0VTMiIpOwogCi0JICAgIHNsc2IgPSAoU3RhdGVsZXNzQmVhbikgaWMubG9va3VwKCJqYXZhOm1vZHVsZS9TdGF0ZWxlc3NCZWFuIik7Ci0JICAgIHNsc2IyID0gKFN0YXRlbGVzc0JlYW4pIGljLmxvb2t1cCgiamF2YTphcHAvZWpiLWVqYjMxLWVqYmxpdGUtamF2YW1vZHVsZS13ZWIvU3RhdGVsZXNzQmVhbiIpOwotCSAgICBzbHNiMyA9IChTdGF0ZWxlc3NCZWFuKSBpYy5sb29rdXAoImphdmE6YXBwL2VqYi1lamIzMS1lamJsaXRlLWphdmFtb2R1bGUtd2ViL1N0YXRlbGVzc0JlYW4hY29tLmFjbWUuU3RhdGVsZXNzQmVhbiIpOworICAgICAgICBzbHNiID0gKFN0YXRlbGVzc0JlYW4pIGljLmxvb2t1cCgiamF2YTptb2R1bGUvU3RhdGVsZXNzQmVhbiIpOworICAgICAgICBzbHNiMiA9IChTdGF0ZWxlc3NCZWFuKSBpYy5sb29rdXAoImphdmE6YXBwL2VqYi1lamIzMS1lamJsaXRlLWphdmFtb2R1bGUtd2ViL1N0YXRlbGVzc0JlYW4iKTsKKyAgICAgICAgc2xzYjMgPSAoU3RhdGVsZXNzQmVhbikgaWMubG9va3VwKCJqYXZhOmFwcC9lamItZWpiMzEtZWpibGl0ZS1qYXZhbW9kdWxlLXdlYi9TdGF0ZWxlc3NCZWFuIWNvbS5hY21lLlN0YXRlbGVzc0JlYW4iKTsKIAotCSAgICBzbHNiNCA9IChTdGF0ZWxlc3NCZWFuKSBpYy5sb29rdXAoImphdmE6YXBwL0VMMSIpOwotCSAgICBzbHNiNSA9IChTdGF0ZWxlc3NCZWFuKSBpYy5sb29rdXAoImphdmE6YXBwL2Vudi9FTDIiKTsKKyAgICAgICAgc2xzYjQgPSAoU3RhdGVsZXNzQmVhbikgaWMubG9va3VwKCJqYXZhOmFwcC9FTDEiKTsKKyAgICAgICAgc2xzYjUgPSAoU3RhdGVsZXNzQmVhbikgaWMubG9va3VwKCJqYXZhOmFwcC9lbnYvRUwyIik7CiAKLQkgICAgZm9vNCA9IChGb29NYW5hZ2VkQmVhbikgCi0JCWljLmxvb2t1cCgiamF2YTptb2R1bGUvZm9vbWFuYWdlZGJlYW4iKTsKKyAgICAgICAgZm9vNCA9IChGb29NYW5hZ2VkQmVhbikKKyAgICAgICAgaWMubG9va3VwKCJqYXZhOm1vZHVsZS9mb29tYW5hZ2VkYmVhbiIpOwogCi0JICAgIGZvbzUgPSAoRm9vTWFuYWdlZEJlYW4pIAotCQlpYy5sb29rdXAoImphdmE6YXBwL2VqYi1lamIzMS1lamJsaXRlLWphdmFtb2R1bGUtd2ViL2Zvb21hbmFnZWRiZWFuIik7CisgICAgICAgIGZvbzUgPSAoRm9vTWFuYWdlZEJlYW4pCisgICAgICAgIGljLmxvb2t1cCgiamF2YTphcHAvZWpiLWVqYjMxLWVqYmxpdGUtamF2YW1vZHVsZS13ZWIvZm9vbWFuYWdlZGJlYW4iKTsKIAotCSAgICBmb282ID0gKEZvb01hbmFnZWRCZWFuKQotCQlpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZm9vMnJlZiIpOworICAgICAgICBmb282ID0gKEZvb01hbmFnZWRCZWFuKQorICAgICAgICBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZm9vMnJlZiIpOwogCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTXkgQXBwTmFtZSA9ICIgKyAKLQkJCSAgICAgICBpYy5sb29rdXAoImphdmE6YXBwL0FwcE5hbWUiKSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTXkgQXBwTmFtZSA9ICIgKworICAgICAgICAgICAgICAgICAgIGljLmxvb2t1cCgiamF2YTphcHAvQXBwTmFtZSIpKTsKIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk15IE1vZHVsZU5hbWUgPSAiICsgCi0JCQkgICAgICAgaWMubG9va3VwKCJqYXZhOm1vZHVsZS9Nb2R1bGVOYW1lIikpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk15IE1vZHVsZU5hbWUgPSAiICsKKyAgICAgICAgICAgICAgICAgICBpYy5sb29rdXAoImphdmE6bW9kdWxlL01vZHVsZU5hbWUiKSk7CiAKLQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUpOwotCX0KKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUpOworICAgIH0KICAgICB9CiAKICAgICBAT3ZlcnJpZGUKICAgICBwcm90ZWN0ZWQgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKIAotCXJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOworICAgIHJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwLmdldFdyaXRlcigpOwogCi0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NlcnZsZXQ6OmRvR2V0Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NlcnZsZXQ6OmRvR2V0Iik7CiAKLQlmb28uZm9vYmFyKCJmb29iYXIiKTsKKyAgICBmb28uZm9vYmFyKCJmb29iYXIiKTsKIAotCXNpbXBsZVNpbmdsZXRvbi5oZWxsbygpOworICAgIHNpbXBsZVNpbmdsZXRvbi5oZWxsbygpOwogCi0Jc2ltcGxlU3RhdGVsZXNzLmhlbGxvKCk7Ci0Jc2ltcGxlU3RhdGVsZXNzMi5oZWxsbygpOworICAgIHNpbXBsZVN0YXRlbGVzcy5oZWxsbygpOworICAgIHNpbXBsZVN0YXRlbGVzczIuaGVsbG8oKTsKIAotCXNiMi5oZWxsbygpOworICAgIHNiMi5oZWxsbygpOwogCi0Jc2IzLmhlbGxvKCk7CisgICAgc2IzLmhlbGxvKCk7CiAKLQlzYjQuaGVsbG8oKTsKKyAgICBzYjQuaGVsbG8oKTsKIAotCXNiNS5oZWxsbygpOworICAgIHNiNS5oZWxsbygpOwogCi0Jc2xzYi5oZWxsbygpOworICAgIHNsc2IuaGVsbG8oKTsKIAotCXNsc2IyLmhlbGxvKCk7CisgICAgc2xzYjIuaGVsbG8oKTsKIAotCXNsc2IzLmhlbGxvKCk7CisgICAgc2xzYjMuaGVsbG8oKTsKIAotCXNsc2I0LmhlbGxvKCk7CisgICAgc2xzYjQuaGVsbG8oKTsKIAotCXNsc2I1LmhlbGxvKCk7CisgICAgc2xzYjUuaGVsbG8oKTsKIAotCWZvby5mb28oKTsKLQlmb28uZm9vYmFyKCJmb29iYXIiKTsKLQlmb28yLmZvbygpOwotCWZvbzMuZm9vKCk7Ci0JZm9vNC5mb28oKTsKLQlmb281LmZvbygpOwkKLQlmb282LmZvbygpOworICAgIGZvby5mb28oKTsKKyAgICBmb28uZm9vYmFyKCJmb29iYXIiKTsKKyAgICBmb28yLmZvbygpOworICAgIGZvbzMuZm9vKCk7CisgICAgZm9vNC5mb28oKTsKKyAgICBmb281LmZvbygpOworICAgIGZvbzYuZm9vKCk7CiAKLQlvdXQucHJpbnRsbigiPEhUTUw+IDxIRUFEPiA8VElUTEU+IEpNUyBTZXJ2bGV0IE91dHB1dCA8L1RJVExFPiA8L0hFQUQ+IDxCT0RZIEJHQ09MT1I9d2hpdGU+Iik7CisgICAgb3V0LnByaW50bG4oIjxIVE1MPiA8SEVBRD4gPFRJVExFPiBKTVMgU2VydmxldCBPdXRwdXQgPC9USVRMRT4gPC9IRUFEPiA8Qk9EWSBCR0NPTE9SPXdoaXRlPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxDRU5URVI+IDxGT05UIHNpemU9KzEgQ09MT1I9Ymx1ZT5EYXRhYmFzZVNlcnZlbHQgOjogQWxsIGluZm9ybWF0aW9uIEkgY2FuIGdpdmUgPC9GT05UPiA8L0NFTlRFUj4gPHA+ICIgKTsKLSAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gQ29udGV4dCBQYXRoIDogIDwvRk9OVD4gIiArIHJlcS5nZXRDb250ZXh0UGF0aCgpICsgIjxicj4iICk7IAotICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBTZXJ2bGV0IFBhdGggOiAgPC9GT05UPiAiICsgcmVxLmdldFNlcnZsZXRQYXRoKCkgKyAiPGJyPiIgKTsgCi0gICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IFBhdGggSW5mbyA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0UGF0aEluZm8oKSArICI8YnI+IiApOyAKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gQ29udGV4dCBQYXRoIDogIDwvRk9OVD4gIiArIHJlcS5nZXRDb250ZXh0UGF0aCgpICsgIjxicj4iICk7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IFNlcnZsZXQgUGF0aCA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0U2VydmxldFBhdGgoKSArICI8YnI+IiApOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBQYXRoIEluZm8gOiAgPC9GT05UPiAiICsgcmVxLmdldFBhdGhJbmZvKCkgKyAiPGJyPiIgKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L0JPRFk+IDwvSFRNTD4gIik7CiAKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvSW50ZXJjZXB0b3JBLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvSW50ZXJjZXB0b3JBLmphdmEKaW5kZXggMTAwMzYwMC4uY2IzZTg4YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvd2FyL0ludGVyY2VwdG9yQS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL3dhci9JbnRlcmNlcHRvckEuamF2YQpAQCAtMzUsMjQgKzM1LDI0IEBACiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0KEludm9jYXRpb25Db250ZXh0IGMpIHRocm93cyBFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSW50ZXJjZXB0b3JBOjppbml0KCkgIik7Ci0JYy5wcm9jZWVkKCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBJbnRlcmNlcHRvckE6OmluaXQoKSAiKTsKKyAgICBjLnByb2NlZWQoKTsKICAgICB9CiAKIAogICAgIEBBcm91bmRJbnZva2UKICAgICBwdWJsaWMgT2JqZWN0IHJvdW5kSW52b2tlKEludm9jYXRpb25Db250ZXh0IGMpIHRocm93cyBFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSW50ZXJjZXB0b3JBOjpyb3VuZEludm9rZSgpICIpOwotCWlmKCBjLmdldFBhcmFtZXRlcnMoKS5sZW5ndGggPiAwICkgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oInBhcmFtIDEgPSAiICsgYy5nZXRQYXJhbWV0ZXJzKClbMF0pOwotCX0KLQlyZXR1cm4gYy5wcm9jZWVkKCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBJbnRlcmNlcHRvckE6OnJvdW5kSW52b2tlKCkgIik7CisgICAgaWYoIGMuZ2V0UGFyYW1ldGVycygpLmxlbmd0aCA+IDAgKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigicGFyYW0gMSA9ICIgKyBjLmdldFBhcmFtZXRlcnMoKVswXSk7CisgICAgfQorICAgIHJldHVybiBjLnByb2NlZWQoKTsKICAgICB9CiAKICAgICBAUHJlRGVzdHJveQogICAgIHByaXZhdGUgdm9pZCBkZXN0cm95KEludm9jYXRpb25Db250ZXh0IGMpIHRocm93cyBFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSW50ZXJjZXB0b3I6OmRlc3Ryb3koKSAiKTsKLQljLnByb2NlZWQoKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEludGVyY2VwdG9yOjpkZXN0cm95KCkgIik7CisgICAgYy5wcm9jZWVkKCk7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvSW50ZXJjZXB0b3JCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvSW50ZXJjZXB0b3JCLmphdmEKaW5kZXggYzY0MzYzNy4uNTVlMDNmZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvd2FyL0ludGVyY2VwdG9yQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL3dhci9JbnRlcmNlcHRvckIuamF2YQpAQCAtMjgsMzYgKzI4LDM2IEBACiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0KEludm9jYXRpb25Db250ZXh0IGMpIHRocm93cyBFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSW50ZXJjZXB0b3JCOjppbml0KCkgIik7Ci0JYy5wcm9jZWVkKCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBJbnRlcmNlcHRvckI6OmluaXQoKSAiKTsKKyAgICBjLnByb2NlZWQoKTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLQlwdWJsaWMgT2JqZWN0IHJvdW5kSW52b2tlKEludm9jYXRpb25Db250ZXh0IGMpIHRocm93cyBFeGNlcHRpb24gewotCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJTaG91bGQgbm90IHJlYWNoIGhlcmUiKTsKKyAgICBwdWJsaWMgT2JqZWN0IHJvdW5kSW52b2tlKEludm9jYXRpb25Db250ZXh0IGMpIHRocm93cyBFeGNlcHRpb24geworICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJTaG91bGQgbm90IHJlYWNoIGhlcmUiKTsKICAgICB9CiAKICAgICBAQXJvdW5kSW52b2tlCiAgICAgcHJpdmF0ZSBPYmplY3QgYXJvdW5kSW52b2tlKEludm9jYXRpb25Db250ZXh0IGMpIHRocm93cyBFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSW50ZXJjZXB0b3JCOjphcm91bmRJbnZva2UoKSAiKTsKLQljLmdldENvbnRleHREYXRhKCkucHV0KCJmb28iLCAiYmFyIik7Ci0JT2JqZWN0IHJldHVyblZhbHVlID0gYy5wcm9jZWVkKCk7Ci0JCi0JU3RyaW5nIGZvb2JhciA9IChTdHJpbmcpIGMuZ2V0Q29udGV4dERhdGEoKS5nZXQoImZvb2JhciIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiZm9vYmFyIGZyb20gY29udGV4dCBkYXRhID0gIiArIGZvb2Jhcik7Ci0JaWYoIGZvb2JhciA9PSBudWxsICkgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJpbnZhbGlkIGNvbnRleHQgZGF0YSIpOwotCX0KLQkKLQljLmdldENvbnRleHREYXRhKCkuY2xlYXIoKTsKLQkKLQlyZXR1cm4gcmV0dXJuVmFsdWU7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBJbnRlcmNlcHRvckI6OmFyb3VuZEludm9rZSgpICIpOworICAgIGMuZ2V0Q29udGV4dERhdGEoKS5wdXQoImZvbyIsICJiYXIiKTsKKyAgICBPYmplY3QgcmV0dXJuVmFsdWUgPSBjLnByb2NlZWQoKTsKKworICAgIFN0cmluZyBmb29iYXIgPSAoU3RyaW5nKSBjLmdldENvbnRleHREYXRhKCkuZ2V0KCJmb29iYXIiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZvb2JhciBmcm9tIGNvbnRleHQgZGF0YSA9ICIgKyBmb29iYXIpOworICAgIGlmKCBmb29iYXIgPT0gbnVsbCApIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiaW52YWxpZCBjb250ZXh0IGRhdGEiKTsKKyAgICB9CisKKyAgICBjLmdldENvbnRleHREYXRhKCkuY2xlYXIoKTsKKworICAgIHJldHVybiByZXR1cm5WYWx1ZTsKICAgICB9CiAKICAgICBAUHJlRGVzdHJveQogICAgIHByaXZhdGUgdm9pZCBkZXN0cm95KEludm9jYXRpb25Db250ZXh0IGMpIHRocm93cyBFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSW50ZXJjZXB0b3JCOjpkZXN0cm95KCkgIik7Ci0JYy5wcm9jZWVkKCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBJbnRlcmNlcHRvckI6OmRlc3Ryb3koKSAiKTsKKyAgICBjLnByb2NlZWQoKTsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL3dhci9JbnRlcmNlcHRvclN1cGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvSW50ZXJjZXB0b3JTdXBlci5qYXZhCmluZGV4IDRhZGJkMDMuLjFiOTMyNWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL3dhci9JbnRlcmNlcHRvclN1cGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvd2FyL0ludGVyY2VwdG9yU3VwZXIuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogCiAgICAgQEFyb3VuZEludm9rZQogICAgIHByb3RlY3RlZCBPYmplY3Qgcm91bmRJbnZva2UoSW52b2NhdGlvbkNvbnRleHQgYykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlNob3VsZCBub3QgcmVhY2ggaGVyZSIpOworICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJTaG91bGQgbm90IHJlYWNoIGhlcmUiKTsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL3dhci9NYW5hZ2VkU3VwZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL3dhci9NYW5hZ2VkU3VwZXIuamF2YQppbmRleCA1YjBkZjU4Li4xMTNiMjgzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvTWFuYWdlZFN1cGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvd2FyL01hbmFnZWRTdXBlci5qYXZhCkBAIC0zMCwyNCArMzAsMjQgQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBNYW5hZ2VkU3VwZXI6OmluaXQoKSAiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIE1hbmFnZWRTdXBlcjo6aW5pdCgpICIpOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CiAgICAgcHJpdmF0ZSB2b2lkIGRlc3Ryb3koKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBNYW5hZ2VkU3VwZXI6OmRlc3Ryb3koKSAiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIE1hbmFnZWRTdXBlcjo6ZGVzdHJveSgpICIpOwogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JcmV0dXJuICJNYW5hZ2VkU3VwZXIgdGhpcyA9ICIgKyBzdXBlci50b1N0cmluZygpICsgCi0JICAgICIgcyA9ICIgKyBzICsgIiAsIGRzID0gIiArIGRzOworICAgIHJldHVybiAiTWFuYWdlZFN1cGVyIHRoaXMgPSAiICsgc3VwZXIudG9TdHJpbmcoKSArCisgICAgICAgICIgcyA9ICIgKyBzICsgIiAsIGRzID0gIiArIGRzOwogCiAgICAgfQogCiAgIEBBcm91bmRJbnZva2UKICAgICBwdWJsaWMgT2JqZWN0IGFyb3VuZFN1cGVyKEludm9jYXRpb25Db250ZXh0IGMpIHRocm93cyBFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gTWFuYWdlZFN1cGVyOjphcm91bmRTdXBlcigpICIpOwotCXJldHVybiBjLnByb2NlZWQoKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIE1hbmFnZWRTdXBlcjo6YXJvdW5kU3VwZXIoKSAiKTsKKyAgICByZXR1cm4gYy5wcm9jZWVkKCk7CiAgICAgfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL3dhci9TaW5nbGV0b25CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvU2luZ2xldG9uQmVhbi5qYXZhCmluZGV4IDM5NGZmY2UuLjlhYzViZjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL3dhci9TaW5nbGV0b25CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvd2FyL1NpbmdsZXRvbkJlYW4uamF2YQpAQCAtMzQsNyArMzQsNyBAQAogQFNpbmdsZXRvbgogQExvY2FsQmVhbgogcHVibGljIGNsYXNzIFNpbmdsZXRvbkJlYW4gaW1wbGVtZW50cyBqYXZhLnV0aWwuT2JzZXJ2ZXIgewotICAKKwogCiAgICAgQEVKQiBwcml2YXRlICBTaW5nbGV0b25CZWFuIG1lOwogCkBAIC01MSw3MSArNTEsNzEgQEAKICAgICBwcml2YXRlIFN0YXRlbGVzc0JlYW4gc2xzYjM7CiAgICAgcHJpdmF0ZSBTdGF0ZWxlc3NCZWFuIHNsc2I0OwogICAgIHByaXZhdGUgU3RhdGVsZXNzQmVhbiBzbHNiNTsKLQkKKwogICAgIHB1YmxpYyB2b2lkIHVwZGF0ZShqYXZhLnV0aWwuT2JzZXJ2YWJsZSBhLGphdmEubGFuZy5PYmplY3QgYikgIHt9CiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0KCkgewogCi0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOmluaXQoKSBtZSA9ICIgKyBtZSk7Ci0JCi0JaWYoIHNlc3Npb25DdHguZ2V0Q29udGV4dERhdGEoKSA9PSBudWxsICkgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJudWxsIGNvbnRleHQgZGF0YSIpOwotCX0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46aW5pdCgpIG1lID0gIiArIG1lKTsKIAotCXRyeSB7Ci0JICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgaWYoIHNlc3Npb25DdHguZ2V0Q29udGV4dERhdGEoKSA9PSBudWxsICkgeworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJudWxsIGNvbnRleHQgZGF0YSIpOworICAgIH0KIAotCSAgICAvLyBMb29rdXAgc2ltcGxlIGZvcm0gb2YgcG9ydGFibGUgSk5ESSBuYW1lIAotCSAgICBTdGF0ZWxlc3NCZWFuIHN0YXRlbGVzcyA9IChTdGF0ZWxlc3NCZWFuKSAKLQkJaWMubG9va3VwKCJqYXZhOm1vZHVsZS9TdGF0ZWxlc3NCZWFuIik7CisgICAgdHJ5IHsKKyAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKIAotCSAgICBzdGF0ZWxlc3MuaGVsbG8oKTsKKyAgICAgICAgLy8gTG9va3VwIHNpbXBsZSBmb3JtIG9mIHBvcnRhYmxlIEpOREkgbmFtZQorICAgICAgICBTdGF0ZWxlc3NCZWFuIHN0YXRlbGVzcyA9IChTdGF0ZWxlc3NCZWFuKQorICAgICAgICBpYy5sb29rdXAoImphdmE6bW9kdWxlL1N0YXRlbGVzc0JlYW4iKTsKIAotCSAgICAvLyBMb29rdXAgZnVsbHktcXVhbGlmaWVkIGZvcm0gb2YgcG9ydGFibGUgSk5ESSBuYW1lCi0JICAgIFN0YXRlbGVzc0JlYW4gc3RhdGVsZXNzMiA9IChTdGF0ZWxlc3NCZWFuKSAKLQkJaWMubG9va3VwKCJqYXZhOm1vZHVsZS9TdGF0ZWxlc3NCZWFuIWNvbS5hY21lLlN0YXRlbGVzc0JlYW4iKTsKKyAgICAgICAgc3RhdGVsZXNzLmhlbGxvKCk7CiAKLQkgICAgc3RhdGVsZXNzMi5oZWxsbygpOworICAgICAgICAvLyBMb29rdXAgZnVsbHktcXVhbGlmaWVkIGZvcm0gb2YgcG9ydGFibGUgSk5ESSBuYW1lCisgICAgICAgIFN0YXRlbGVzc0JlYW4gc3RhdGVsZXNzMiA9IChTdGF0ZWxlc3NCZWFuKQorICAgICAgICBpYy5sb29rdXAoImphdmE6bW9kdWxlL1N0YXRlbGVzc0JlYW4hY29tLmFjbWUuU3RhdGVsZXNzQmVhbiIpOwogCi0JICAgIHNiMiA9IChTaW5nbGV0b25CZWFuKSBpYy5sb29rdXAoImphdmE6bW9kdWxlL1NpbmdsZXRvbkJlYW4iKTsKLQkgICAgc2IzID0gKFNpbmdsZXRvbkJlYW4pIGljLmxvb2t1cCgiamF2YTptb2R1bGUvU2luZ2xldG9uQmVhbiFjb20uYWNtZS5TaW5nbGV0b25CZWFuIik7CisgICAgICAgIHN0YXRlbGVzczIuaGVsbG8oKTsKIAotCSAgICBzYjQgPSAoU2luZ2xldG9uQmVhbikgaWMubG9va3VwKCJqYXZhOm1vZHVsZS9FUzEiKTsKLQkgICAgc2I1ID0gKFNpbmdsZXRvbkJlYW4pIGljLmxvb2t1cCgiamF2YTptb2R1bGUvZW52L0VTMiIpOworICAgICAgICBzYjIgPSAoU2luZ2xldG9uQmVhbikgaWMubG9va3VwKCJqYXZhOm1vZHVsZS9TaW5nbGV0b25CZWFuIik7CisgICAgICAgIHNiMyA9IChTaW5nbGV0b25CZWFuKSBpYy5sb29rdXAoImphdmE6bW9kdWxlL1NpbmdsZXRvbkJlYW4hY29tLmFjbWUuU2luZ2xldG9uQmVhbiIpOwogCi0JICAgIHNsc2IgPSAoU3RhdGVsZXNzQmVhbikgaWMubG9va3VwKCJqYXZhOm1vZHVsZS9TdGF0ZWxlc3NCZWFuIik7Ci0JICAgIHNsc2IyID0gKFN0YXRlbGVzc0JlYW4pIGljLmxvb2t1cCgiamF2YTphcHAvZWpiLWVqYjMxLWVqYmxpdGUtamF2YW1vZHVsZS13ZWIvU3RhdGVsZXNzQmVhbiIpOwotCSAgICBzbHNiMyA9IChTdGF0ZWxlc3NCZWFuKSBpYy5sb29rdXAoImphdmE6YXBwL2VqYi1lamIzMS1lamJsaXRlLWphdmFtb2R1bGUtd2ViL1N0YXRlbGVzc0JlYW4hY29tLmFjbWUuU3RhdGVsZXNzQmVhbiIpOworICAgICAgICBzYjQgPSAoU2luZ2xldG9uQmVhbikgaWMubG9va3VwKCJqYXZhOm1vZHVsZS9FUzEiKTsKKyAgICAgICAgc2I1ID0gKFNpbmdsZXRvbkJlYW4pIGljLmxvb2t1cCgiamF2YTptb2R1bGUvZW52L0VTMiIpOwogCi0JICAgIHNsc2I0ID0gKFN0YXRlbGVzc0JlYW4pIGljLmxvb2t1cCgiamF2YTphcHAvRUwxIik7Ci0JICAgIHNsc2I1ID0gKFN0YXRlbGVzc0JlYW4pIGljLmxvb2t1cCgiamF2YTphcHAvZW52L0VMMiIpOworICAgICAgICBzbHNiID0gKFN0YXRlbGVzc0JlYW4pIGljLmxvb2t1cCgiamF2YTptb2R1bGUvU3RhdGVsZXNzQmVhbiIpOworICAgICAgICBzbHNiMiA9IChTdGF0ZWxlc3NCZWFuKSBpYy5sb29rdXAoImphdmE6YXBwL2VqYi1lamIzMS1lamJsaXRlLWphdmFtb2R1bGUtd2ViL1N0YXRlbGVzc0JlYW4iKTsKKyAgICAgICAgc2xzYjMgPSAoU3RhdGVsZXNzQmVhbikgaWMubG9va3VwKCJqYXZhOmFwcC9lamItZWpiMzEtZWpibGl0ZS1qYXZhbW9kdWxlLXdlYi9TdGF0ZWxlc3NCZWFuIWNvbS5hY21lLlN0YXRlbGVzc0JlYW4iKTsKIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk15IEFwcE5hbWUgPSAiICsgCi0JCQkgICAgICAgaWMubG9va3VwKCJqYXZhOmFwcC9BcHBOYW1lIikpOworICAgICAgICBzbHNiNCA9IChTdGF0ZWxlc3NCZWFuKSBpYy5sb29rdXAoImphdmE6YXBwL0VMMSIpOworICAgICAgICBzbHNiNSA9IChTdGF0ZWxlc3NCZWFuKSBpYy5sb29rdXAoImphdmE6YXBwL2Vudi9FTDIiKTsKIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk15IE1vZHVsZU5hbWUgPSAiICsgCi0JCQkgICAgICAgaWMubG9va3VwKCJqYXZhOm1vZHVsZS9Nb2R1bGVOYW1lIikpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk15IEFwcE5hbWUgPSAiICsKKyAgICAgICAgICAgICAgICAgICBpYy5sb29rdXAoImphdmE6YXBwL0FwcE5hbWUiKSk7CiAKLQl9IGNhdGNoKE5hbWluZ0V4Y2VwdGlvbiBuZSkgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKG5lKTsKLQl9CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTXkgTW9kdWxlTmFtZSA9ICIgKworICAgICAgICAgICAgICAgICAgIGljLmxvb2t1cCgiamF2YTptb2R1bGUvTW9kdWxlTmFtZSIpKTsKKworICAgIH0gY2F0Y2goTmFtaW5nRXhjZXB0aW9uIG5lKSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24obmUpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBoZWxsbygpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46aGVsbG8oKSIpOwotCWlmKCBzZXNzaW9uQ3R4LmdldENvbnRleHREYXRhKCkgPT0gbnVsbCApIHsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigibnVsbCBjb250ZXh0IGRhdGEiKTsKLQl9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOmhlbGxvKCkiKTsKKyAgICBpZiggc2Vzc2lvbkN0eC5nZXRDb250ZXh0RGF0YSgpID09IG51bGwgKSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIm51bGwgY29udGV4dCBkYXRhIik7CisgICAgfQogCiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKICAgICBwcml2YXRlIHZvaWQgZGVzdHJveSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46ZGVzdHJveSgpIik7Ci0JaWYoIHNlc3Npb25DdHguZ2V0Q29udGV4dERhdGEoKSA9PSBudWxsICkgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJudWxsIGNvbnRleHQgZGF0YSIpOwotCX0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46ZGVzdHJveSgpIik7CisgICAgaWYoIHNlc3Npb25DdHguZ2V0Q29udGV4dERhdGEoKSA9PSBudWxsICkgeworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJudWxsIGNvbnRleHQgZGF0YSIpOworICAgIH0KIAogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvd2FyL1N0YXRlZnVsQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvd2FyL1N0YXRlZnVsQmVhbi5qYXZhCmluZGV4IDlkY2Y5NzkuLmY5MWU5MTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL3dhci9TdGF0ZWZ1bEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvU3RhdGVmdWxCZWFuLmphdmEKQEAgLTI5LDIxICsyOSwyMSBAQAogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlZnVsQmVhbjppbml0KCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlZnVsQmVhbjppbml0KCkiKTsKICAgICB9CiAKICAgICBAUHJlUGFzc2l2YXRlCiAgICAgcHJpdmF0ZSB2b2lkIHByZVBhc3MoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWZ1bEJlYW46cHJlUGFzc2l2YXRlKCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlZnVsQmVhbjpwcmVQYXNzaXZhdGUoKSIpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGhlbGxvKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVmdWxCZWFuOjpoZWxsbygpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWZ1bEJlYW46OmhlbGxvKCkiKTsKICAgICB9CiAKICAgICBAUHJlRGVzdHJveQogICAgIHByaXZhdGUgdm9pZCBkZXN0cm95KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVmdWxCZWFuOmRlc3Ryb3koKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVmdWxCZWFuOmRlc3Ryb3koKSIpOwogICAgIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvU3RhdGVsZXNzQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvd2FyL1N0YXRlbGVzc0JlYW4uamF2YQppbmRleCBmNjE0OGE1Li5lNTlhMzhhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvU3RhdGVsZXNzQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL3dhci9TdGF0ZWxlc3NCZWFuLmphdmEKQEAgLTI5LDggKzI5LDggQEAKIEBTdGF0ZWxlc3MKIEBJbnRlcmNlcHRvcnMoSW50ZXJjZXB0b3JCLmNsYXNzKQogcHVibGljIGNsYXNzIFN0YXRlbGVzc0JlYW4gewotICAgIAotICAgIEBSZXNvdXJjZSAKKworICAgIEBSZXNvdXJjZQogICAgIHByaXZhdGUgU2Vzc2lvbkNvbnRleHQgc2Vzc2lvbkN0eDsKIAogICAgIEBSZXNvdXJjZShtYXBwZWROYW1lPSJqYXZhOm1vZHVsZS9mb29tYW5hZ2VkYmVhbiIpCkBAIC00NCw2NCArNDQsNjQgQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWxlc3NCZWFuOmluaXQoKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVsZXNzQmVhbjppbml0KCkiKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBoZWxsbygpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlbGVzc0JlYW46OmhlbGxvKCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlbGVzc0JlYW46OmhlbGxvKCkiKTsKIAotCU1hcDxTdHJpbmcsIE9iamVjdD4gY3R4RGF0YSA9IHNlc3Npb25DdHguZ2V0Q29udGV4dERhdGEoKTsKLQlTdHJpbmcgZm9vY3R4ID0gKFN0cmluZykgY3R4RGF0YS5nZXQoImZvbyIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiZm9vIGZyb20gY29udGV4dCBkYXRhID0gIiArIGZvb2N0eCk7Ci0JaWYoIGZvb2N0eCA9PSBudWxsICkgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJpbnZhbGlkIGNvbnRleHQgZGF0YSIpOwotCX0KLQljdHhEYXRhLnB1dCgiZm9vYmFyIiwgImZvb2JhciIpOworICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gY3R4RGF0YSA9IHNlc3Npb25DdHguZ2V0Q29udGV4dERhdGEoKTsKKyAgICBTdHJpbmcgZm9vY3R4ID0gKFN0cmluZykgY3R4RGF0YS5nZXQoImZvbyIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZm9vIGZyb20gY29udGV4dCBkYXRhID0gIiArIGZvb2N0eCk7CisgICAgaWYoIGZvb2N0eCA9PSBudWxsICkgeworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJpbnZhbGlkIGNvbnRleHQgZGF0YSIpOworICAgIH0KKyAgICBjdHhEYXRhLnB1dCgiZm9vYmFyIiwgImZvb2JhciIpOwogCi0JRm9vTWFuYWdlZEJlYW4gZm1iID0gKEZvb01hbmFnZWRCZWFuKSAKLQkgICAgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6bW9kdWxlL2Zvb21hbmFnZWRiZWFuIik7CisgICAgRm9vTWFuYWdlZEJlYW4gZm1iID0gKEZvb01hbmFnZWRCZWFuKQorICAgICAgICBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTptb2R1bGUvZm9vbWFuYWdlZGJlYW4iKTsKIAotCS8vIE1ha2Ugc3VyZSBkZXBlbmRlbmNpZXMgZGVjbGFyZWQgaW4gamF2YTpjb21wIGFyZSB2aXNpYmxlCi0JLy8gdmlhIGVxdWl2YWxlbnQgamF2YTptb2R1bGUgZW50cmllcyBzaW5jZSB0aGlzIGlzIGEgCi0JLy8gLndhcgotCVNlc3Npb25Db250ZXh0IHNlc3Npb25DdHgyID0gKFNlc3Npb25Db250ZXh0KQotCSAgICBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTptb2R1bGUvZW52L2NvbS5hY21lLlN0YXRlbGVzc0JlYW4vc2Vzc2lvbkN0eCIpOworICAgIC8vIE1ha2Ugc3VyZSBkZXBlbmRlbmNpZXMgZGVjbGFyZWQgaW4gamF2YTpjb21wIGFyZSB2aXNpYmxlCisgICAgLy8gdmlhIGVxdWl2YWxlbnQgamF2YTptb2R1bGUgZW50cmllcyBzaW5jZSB0aGlzIGlzIGEKKyAgICAvLyAud2FyCisgICAgU2Vzc2lvbkNvbnRleHQgc2Vzc2lvbkN0eDIgPSAoU2Vzc2lvbkNvbnRleHQpCisgICAgICAgIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOm1vZHVsZS9lbnYvY29tLmFjbWUuU3RhdGVsZXNzQmVhbi9zZXNzaW9uQ3R4Iik7CiAKLQlTaW5nbGV0b25CZWFuIHNpbmdsZXRvbjIgPSAoU2luZ2xldG9uQmVhbikKLQkgICAgc2Vzc2lvbkN0eDIubG9va3VwKCJqYXZhOm1vZHVsZS9lbnYvc3RhdGVsZXNzL3NpbmdsZXRvbnJlZiIpOworICAgIFNpbmdsZXRvbkJlYW4gc2luZ2xldG9uMiA9IChTaW5nbGV0b25CZWFuKQorICAgICAgICBzZXNzaW9uQ3R4Mi5sb29rdXAoImphdmE6bW9kdWxlL2Vudi9zdGF0ZWxlc3Mvc2luZ2xldG9ucmVmIik7CiAKLQkvLyBMb29rdXAgYSBjb21wIGVudiBkZXBlbmRlbmN5IGRlY2xhcmVkIGJ5IGFub3RoZXIgZWpiIGluIHRoZSAud2FyCi0JU2luZ2xldG9uQmVhbiBzaW5nbGV0b24zID0gKFNpbmdsZXRvbkJlYW4pCi0JICAgIHNlc3Npb25DdHgyLmxvb2t1cCgiamF2YTpjb21wL2Vudi9jb20uYWNtZS5TaW5nbGV0b25CZWFuL21lIik7CisgICAgLy8gTG9va3VwIGEgY29tcCBlbnYgZGVwZW5kZW5jeSBkZWNsYXJlZCBieSBhbm90aGVyIGVqYiBpbiB0aGUgLndhcgorICAgIFNpbmdsZXRvbkJlYW4gc2luZ2xldG9uMyA9IChTaW5nbGV0b25CZWFuKQorICAgICAgICBzZXNzaW9uQ3R4Mi5sb29rdXAoImphdmE6Y29tcC9lbnYvY29tLmFjbWUuU2luZ2xldG9uQmVhbi9tZSIpOwogCi0JLy8gTG9va3VwIGEgY29tcCBlbnYgZGVwZW5kZW5jeSBkZWNsYXJlZCBieSBhIHNlcnZsZXQKLQlGb29NYW5hZ2VkQmVhbiBmbWJTZXJ2bGV0ID0gKEZvb01hbmFnZWRCZWFuKQotCSAgICBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9mb28ycmVmIik7Ci0JRm9vTWFuYWdlZEJlYW4gZm1iU2VydmxldDIgPSAoRm9vTWFuYWdlZEJlYW4pCi0JICAgIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOm1vZHVsZS9lbnYvZm9vMnJlZiIpOworICAgIC8vIExvb2t1cCBhIGNvbXAgZW52IGRlcGVuZGVuY3kgZGVjbGFyZWQgYnkgYSBzZXJ2bGV0CisgICAgRm9vTWFuYWdlZEJlYW4gZm1iU2VydmxldCA9IChGb29NYW5hZ2VkQmVhbikKKyAgICAgICAgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6Y29tcC9lbnYvZm9vMnJlZiIpOworICAgIEZvb01hbmFnZWRCZWFuIGZtYlNlcnZsZXQyID0gKEZvb01hbmFnZWRCZWFuKQorICAgICAgICBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTptb2R1bGUvZW52L2ZvbzJyZWYiKTsKIAotCS8vIEVuc3VyZSB0aGF0IGVhY2ggaW5qZWN0ZWQgb3IgbG9va2VkIHVwIG1hbmFnZWQgYmVhbiAKLQkvLyBpbnN0YW5jZSBpcyB1bmlxdWUKLQlPYmplY3QgZm9vVGhpcyA9IGZvby5nZXRUaGlzKCk7Ci0JT2JqZWN0IGZvbzJUaGlzID0gZm9vMi5nZXRUaGlzKCk7Ci0JT2JqZWN0IGZtYlRoaXMgPSBmbWIuZ2V0VGhpcygpOworICAgIC8vIEVuc3VyZSB0aGF0IGVhY2ggaW5qZWN0ZWQgb3IgbG9va2VkIHVwIG1hbmFnZWQgYmVhbgorICAgIC8vIGluc3RhbmNlIGlzIHVuaXF1ZQorICAgIE9iamVjdCBmb29UaGlzID0gZm9vLmdldFRoaXMoKTsKKyAgICBPYmplY3QgZm9vMlRoaXMgPSBmb28yLmdldFRoaXMoKTsKKyAgICBPYmplY3QgZm1iVGhpcyA9IGZtYi5nZXRUaGlzKCk7CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oImZvb1RoaXMgPSAiICsgZm9vVGhpcyk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJmb28yVGhpcyA9ICIgKyBmb28yVGhpcyk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJmbWJUaGlzID0gIiArIGZtYlRoaXMpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiZm1iU2VydmxldCA9ICIgKyBmbWJTZXJ2bGV0KTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImZtYlNlcnZsZXQyID0gIiArIGZtYlNlcnZsZXQyKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZvb1RoaXMgPSAiICsgZm9vVGhpcyk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJmb28yVGhpcyA9ICIgKyBmb28yVGhpcyk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJmbWJUaGlzID0gIiArIGZtYlRoaXMpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZm1iU2VydmxldCA9ICIgKyBmbWJTZXJ2bGV0KTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZtYlNlcnZsZXQyID0gIiArIGZtYlNlcnZsZXQyKTsKIAotCWlmKCAoIGZvb1RoaXMgPT0gZm9vMlRoaXMgKSB8fCAoIGZvb1RoaXMgPT0gZm1iVGhpcyAgKSB8fAotCSAgICAoIGZvbzJUaGlzID09IGZtYlRoaXMgKSApIHsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiTWFuYWdlZCBiZWFuIGluc3RhbmNlcyBub3QgdW5pcXVlIik7Ci0JfQorICAgIGlmKCAoIGZvb1RoaXMgPT0gZm9vMlRoaXMgKSB8fCAoIGZvb1RoaXMgPT0gZm1iVGhpcyAgKSB8fAorICAgICAgICAoIGZvbzJUaGlzID09IGZtYlRoaXMgKSApIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiTWFuYWdlZCBiZWFuIGluc3RhbmNlcyBub3QgdW5pcXVlIik7CisgICAgfQogCiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKICAgICBwcml2YXRlIHZvaWQgZGVzdHJveSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlbGVzc0JlYW46ZGVzdHJveSgpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWxlc3NCZWFuOmRlc3Ryb3koKSIpOwogICAgIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2puZGl2YWxpZGF0aW9uL0NvbmZsaWN0ZWRFSkJSZWYvZWpiTW9kdWxlL2dmL0ludm9rZXIxLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2puZGl2YWxpZGF0aW9uL0NvbmZsaWN0ZWRFSkJSZWYvZWpiTW9kdWxlL2dmL0ludm9rZXIxLmphdmEKaW5kZXggYmNhYzM3Yi4uYTQ0N2YzYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9qbmRpdmFsaWRhdGlvbi9Db25mbGljdGVkRUpCUmVmL2VqYk1vZHVsZS9nZi9JbnZva2VyMS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvam5kaXZhbGlkYXRpb24vQ29uZmxpY3RlZEVKQlJlZi9lamJNb2R1bGUvZ2YvSW52b2tlcjEuamF2YQpAQCAtMjMsNyArMjMsNyBAQAogCiBAU3RhdGVsZXNzCiBwdWJsaWMgY2xhc3MgSW52b2tlcjEgewotCSAgQEVKQihuYW1lPSJqYXZhOm1vZHVsZS9lbnYvRHVwbGljYXRlRW50cnkiLGJlYW5OYW1lPSJlamIvbXlzbHNiIikKLQkgIHByaXZhdGUgTXlTTFNCIG15U0xTQjsKKyAgICAgIEBFSkIobmFtZT0iamF2YTptb2R1bGUvZW52L0R1cGxpY2F0ZUVudHJ5IixiZWFuTmFtZT0iZWpiL215c2xzYiIpCisgICAgICBwcml2YXRlIE15U0xTQiBteVNMU0I7CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvam5kaXZhbGlkYXRpb24vQ29uZmxpY3RlZEVKQlJlZi9lamJNb2R1bGUvZ2YvSW52b2tlcjIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvam5kaXZhbGlkYXRpb24vQ29uZmxpY3RlZEVKQlJlZi9lamJNb2R1bGUvZ2YvSW52b2tlcjIuamF2YQppbmRleCBjN2Y1ZTMzLi4yZGM5Y2QxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2puZGl2YWxpZGF0aW9uL0NvbmZsaWN0ZWRFSkJSZWYvZWpiTW9kdWxlL2dmL0ludm9rZXIyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9qbmRpdmFsaWRhdGlvbi9Db25mbGljdGVkRUpCUmVmL2VqYk1vZHVsZS9nZi9JbnZva2VyMi5qYXZhCkBAIC0yMyw3ICsyMyw3IEBACiAKIEBTdGF0ZWxlc3MKIHB1YmxpYyBjbGFzcyBJbnZva2VyMiB7Ci0JICBARUpCKG5hbWU9ImphdmE6bW9kdWxlL2Vudi9EdXBsaWNhdGVFbnRyeSIsYmVhbk5hbWU9ImVqYi9teXNsc2IyIikKLQkgIHByaXZhdGUgTXlTTFNCIG15U0xTQjsKKyAgICAgIEBFSkIobmFtZT0iamF2YTptb2R1bGUvZW52L0R1cGxpY2F0ZUVudHJ5IixiZWFuTmFtZT0iZWpiL215c2xzYjIiKQorICAgICAgcHJpdmF0ZSBNeVNMU0IgbXlTTFNCOwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2puZGl2YWxpZGF0aW9uL0NvbmZsaWN0ZWRFSkJSZWYvZWpiTW9kdWxlL2dmL015U0xTQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9qbmRpdmFsaWRhdGlvbi9Db25mbGljdGVkRUpCUmVmL2VqYk1vZHVsZS9nZi9NeVNMU0IuamF2YQppbmRleCBjOGFlYzBkLi42YjY2Y2RiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2puZGl2YWxpZGF0aW9uL0NvbmZsaWN0ZWRFSkJSZWYvZWpiTW9kdWxlL2dmL015U0xTQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvam5kaXZhbGlkYXRpb24vQ29uZmxpY3RlZEVKQlJlZi9lamJNb2R1bGUvZ2YvTXlTTFNCLmphdmEKQEAgLTIyLDYgKzIyLDYgQEAKIAogQFN0YXRlbGVzcyhuYW1lPSJlamIvbXlzbHNiIikKIHB1YmxpYyBjbGFzcyBNeVNMU0IgewotICAKKwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2puZGl2YWxpZGF0aW9uL0NvbmZsaWN0ZWRFSkJSZWYvZWpiTW9kdWxlL2dmL015U0xTQjIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvam5kaXZhbGlkYXRpb24vQ29uZmxpY3RlZEVKQlJlZi9lamJNb2R1bGUvZ2YvTXlTTFNCMi5qYXZhCmluZGV4IDRjOTZmMTUuLjJhNWVhOTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvam5kaXZhbGlkYXRpb24vQ29uZmxpY3RlZEVKQlJlZi9lamJNb2R1bGUvZ2YvTXlTTFNCMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvam5kaXZhbGlkYXRpb24vQ29uZmxpY3RlZEVKQlJlZi9lamJNb2R1bGUvZ2YvTXlTTFNCMi5qYXZhCkBAIC0yMiw2ICsyMiw2IEBACiAKIEBTdGF0ZWxlc3MobmFtZT0iZWpiL215c2xzYjIiKQogcHVibGljIGNsYXNzIE15U0xTQjIgewotICAKKwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2puZGl2YWxpZGF0aW9uL0NvbmZsaWN0ZWRFbnZFbnRyeS9lamJNb2R1bGUvTUVUQS1JTkYvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2puZGl2YWxpZGF0aW9uL0NvbmZsaWN0ZWRFbnZFbnRyeS9lamJNb2R1bGUvTUVUQS1JTkYvZWpiLWphci54bWwKaW5kZXggMjAzNTQwYS4uMWMyNzdhNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9qbmRpdmFsaWRhdGlvbi9Db25mbGljdGVkRW52RW50cnkvZWpiTW9kdWxlL01FVEEtSU5GL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvam5kaXZhbGlkYXRpb24vQ29uZmxpY3RlZEVudkVudHJ5L2VqYk1vZHVsZS9NRVRBLUlORi9lamItamFyLnhtbApAQCAtMTgsMzIgKzE4LDMyIEBACiAtLT4KIAogPGVqYi1qYXIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLQl4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIiB4bWxuczplamI9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS9lamItamFyXzNfMS54c2QiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL2VqYi1qYXJfM18xLnhzZCIKLQl2ZXJzaW9uPSIzLjEiPgotCTxlbnRlcnByaXNlLWJlYW5zPgotCQk8c2Vzc2lvbj4KLQkJCTxlamItbmFtZT5JbnZva2VyMTwvZWpiLW5hbWU+Ci0JCQk8ZWpiLWNsYXNzPmdmLkludm9rZXIxPC9lamItY2xhc3M+Ci0JCQk8c2Vzc2lvbi10eXBlPlN0YXRlbGVzczwvc2Vzc2lvbi10eXBlPgotCQkJPGVudi1lbnRyeT4KLQkJCQk8ZW52LWVudHJ5LW5hbWU+amF2YTptb2R1bGUvZW52L0R1cGxpY2F0ZUVudkVudHJ5PC9lbnYtZW50cnktbmFtZT4KLQkJCQk8ZW52LWVudHJ5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvZW52LWVudHJ5LXR5cGU+Ci0JCQkJPGVudi1lbnRyeS12YWx1ZT5Gcm9tIEludm9rZXIxPC9lbnYtZW50cnktdmFsdWU+Ci0JCQk8L2Vudi1lbnRyeT4KLQkJPC9zZXNzaW9uPgorICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiIHhtbG5zOmVqYj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL2VqYi1qYXJfM18xLnhzZCIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvZWpiLWphcl8zXzEueHNkIgorICAgIHZlcnNpb249IjMuMSI+CisgICAgPGVudGVycHJpc2UtYmVhbnM+CisgICAgICAgIDxzZXNzaW9uPgorICAgICAgICAgICAgPGVqYi1uYW1lPkludm9rZXIxPC9lamItbmFtZT4KKyAgICAgICAgICAgIDxlamItY2xhc3M+Z2YuSW52b2tlcjE8L2VqYi1jbGFzcz4KKyAgICAgICAgICAgIDxzZXNzaW9uLXR5cGU+U3RhdGVsZXNzPC9zZXNzaW9uLXR5cGU+CisgICAgICAgICAgICA8ZW52LWVudHJ5PgorICAgICAgICAgICAgICAgIDxlbnYtZW50cnktbmFtZT5qYXZhOm1vZHVsZS9lbnYvRHVwbGljYXRlRW52RW50cnk8L2Vudi1lbnRyeS1uYW1lPgorICAgICAgICAgICAgICAgIDxlbnYtZW50cnktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9lbnYtZW50cnktdHlwZT4KKyAgICAgICAgICAgICAgICA8ZW52LWVudHJ5LXZhbHVlPkZyb20gSW52b2tlcjE8L2Vudi1lbnRyeS12YWx1ZT4KKyAgICAgICAgICAgIDwvZW52LWVudHJ5PgorICAgICAgICA8L3Nlc3Npb24+CiAKLQkJPHNlc3Npb24+Ci0JCQk8ZWpiLW5hbWU+SW52b2tlcjI8L2VqYi1uYW1lPgotCQkJPGVqYi1jbGFzcz5nZi5JbnZva2VyMjwvZWpiLWNsYXNzPgotCQkJPHNlc3Npb24tdHlwZT5TdGF0ZWxlc3M8L3Nlc3Npb24tdHlwZT4KLQkJCTxlbnYtZW50cnk+Ci0JCQkJPGVudi1lbnRyeS1uYW1lPmphdmE6bW9kdWxlL2Vudi9EdXBsaWNhdGVFbnZFbnRyeTwvZW52LWVudHJ5LW5hbWU+Ci0JCQkJPGVudi1lbnRyeS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2Vudi1lbnRyeS10eXBlPgotCQkJCTxlbnYtZW50cnktdmFsdWU+RnJvbSBJbnZva2VyMjwvZW52LWVudHJ5LXZhbHVlPgotCQkJPC9lbnYtZW50cnk+Ci0JCTwvc2Vzc2lvbj4KLQk8L2VudGVycHJpc2UtYmVhbnM+CisgICAgICAgIDxzZXNzaW9uPgorICAgICAgICAgICAgPGVqYi1uYW1lPkludm9rZXIyPC9lamItbmFtZT4KKyAgICAgICAgICAgIDxlamItY2xhc3M+Z2YuSW52b2tlcjI8L2VqYi1jbGFzcz4KKyAgICAgICAgICAgIDxzZXNzaW9uLXR5cGU+U3RhdGVsZXNzPC9zZXNzaW9uLXR5cGU+CisgICAgICAgICAgICA8ZW52LWVudHJ5PgorICAgICAgICAgICAgICAgIDxlbnYtZW50cnktbmFtZT5qYXZhOm1vZHVsZS9lbnYvRHVwbGljYXRlRW52RW50cnk8L2Vudi1lbnRyeS1uYW1lPgorICAgICAgICAgICAgICAgIDxlbnYtZW50cnktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9lbnYtZW50cnktdHlwZT4KKyAgICAgICAgICAgICAgICA8ZW52LWVudHJ5LXZhbHVlPkZyb20gSW52b2tlcjI8L2Vudi1lbnRyeS12YWx1ZT4KKyAgICAgICAgICAgIDwvZW52LWVudHJ5PgorICAgICAgICA8L3Nlc3Npb24+CisgICAgPC9lbnRlcnByaXNlLWJlYW5zPgogCiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9qbmRpdmFsaWRhdGlvbi9Db25mbGljdGVkRW52RW50cnkvZWpiTW9kdWxlL2dmL0ludm9rZXIxLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2puZGl2YWxpZGF0aW9uL0NvbmZsaWN0ZWRFbnZFbnRyeS9lamJNb2R1bGUvZ2YvSW52b2tlcjEuamF2YQppbmRleCBjZGQ2NGZlLi45Nzk2ZDc0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2puZGl2YWxpZGF0aW9uL0NvbmZsaWN0ZWRFbnZFbnRyeS9lamJNb2R1bGUvZ2YvSW52b2tlcjEuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2puZGl2YWxpZGF0aW9uL0NvbmZsaWN0ZWRFbnZFbnRyeS9lamJNb2R1bGUvZ2YvSW52b2tlcjEuamF2YQpAQCAtMjMsNSArMjMsNSBAQAogQFN0YXRlbGVzcwogcHVibGljIGNsYXNzIEludm9rZXIxIHsKIAotCSAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvam5kaXZhbGlkYXRpb24vQ29uZmxpdGVkUmVzb3VyY2VFbnZSZWYvZWpiTW9kdWxlL01FVEEtSU5GL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9qbmRpdmFsaWRhdGlvbi9Db25mbGl0ZWRSZXNvdXJjZUVudlJlZi9lamJNb2R1bGUvTUVUQS1JTkYvZWpiLWphci54bWwKaW5kZXggNThkNDYxNi4uNmY5N2M4YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9qbmRpdmFsaWRhdGlvbi9Db25mbGl0ZWRSZXNvdXJjZUVudlJlZi9lamJNb2R1bGUvTUVUQS1JTkYvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9qbmRpdmFsaWRhdGlvbi9Db25mbGl0ZWRSZXNvdXJjZUVudlJlZi9lamJNb2R1bGUvTUVUQS1JTkYvZWpiLWphci54bWwKQEAgLTE4LDMxICsxOCwzMSBAQAogLS0+CiAKIDxlamItamFyIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0JeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIgeG1sbnM6ZWpiPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvZWpiLWphcl8zXzEueHNkIgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS9lamItamFyXzNfMS54c2QiCi0JdmVyc2lvbj0iMy4xIj4KLQk8ZW50ZXJwcmlzZS1iZWFucz4KLQkJPHNlc3Npb24+Ci0JCQk8ZWpiLW5hbWU+SW52b2tlcjE8L2VqYi1uYW1lPgotCQkJPGVqYi1jbGFzcz5nZi5JbnZva2VyMTwvZWpiLWNsYXNzPgotCQkJPHNlc3Npb24tdHlwZT5TdGF0ZWxlc3M8L3Nlc3Npb24tdHlwZT4KKyAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIiB4bWxuczplamI9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS9lamItamFyXzNfMS54c2QiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL2VqYi1qYXJfM18xLnhzZCIKKyAgICB2ZXJzaW9uPSIzLjEiPgorICAgIDxlbnRlcnByaXNlLWJlYW5zPgorICAgICAgICA8c2Vzc2lvbj4KKyAgICAgICAgICAgIDxlamItbmFtZT5JbnZva2VyMTwvZWpiLW5hbWU+CisgICAgICAgICAgICA8ZWpiLWNsYXNzPmdmLkludm9rZXIxPC9lamItY2xhc3M+CisgICAgICAgICAgICA8c2Vzc2lvbi10eXBlPlN0YXRlbGVzczwvc2Vzc2lvbi10eXBlPgogCi0JCQk8cmVzb3VyY2UtZW52LXJlZj4KLQkJCQk8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmphdmE6bW9kdWxlL2Vudi9EdXBSZXNvdXJjZUVudlJlZjwvcmVzb3VyY2UtZW52LXJlZi1uYW1lPgotCQkJCTxyZXNvdXJjZS1lbnYtcmVmLXR5cGU+amFrYXJ0YS5qbXMuVG9waWM8L3Jlc291cmNlLWVudi1yZWYtdHlwZT4KLQkJCTwvcmVzb3VyY2UtZW52LXJlZj4KLQkJPC9zZXNzaW9uPgotCQkKLQkJPHNlc3Npb24+Ci0JCQk8ZWpiLW5hbWU+SW52b2tlcjI8L2VqYi1uYW1lPgotCQkJPGVqYi1jbGFzcz5nZi5JbnZva2VyMjwvZWpiLWNsYXNzPgotCQkJPHNlc3Npb24tdHlwZT5TdGF0ZWxlc3M8L3Nlc3Npb24tdHlwZT4KLQkJCTxyZXNvdXJjZS1lbnYtcmVmPgotCQkJCTxyZXNvdXJjZS1lbnYtcmVmLW5hbWU+amF2YTptb2R1bGUvZW52L0R1cFJlc291cmNlRW52UmVmPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+Ci0JCQkJPHJlc291cmNlLWVudi1yZWYtdHlwZT5qYWthcnRhLmptcy5RdWV1ZTwvcmVzb3VyY2UtZW52LXJlZi10eXBlPgotCQkJPC9yZXNvdXJjZS1lbnYtcmVmPgotCQk8L3Nlc3Npb24+Ci0JPC9lbnRlcnByaXNlLWJlYW5zPgorICAgICAgICAgICAgPHJlc291cmNlLWVudi1yZWY+CisgICAgICAgICAgICAgICAgPHJlc291cmNlLWVudi1yZWYtbmFtZT5qYXZhOm1vZHVsZS9lbnYvRHVwUmVzb3VyY2VFbnZSZWY8L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KKyAgICAgICAgICAgICAgICA8cmVzb3VyY2UtZW52LXJlZi10eXBlPmpha2FydGEuam1zLlRvcGljPC9yZXNvdXJjZS1lbnYtcmVmLXR5cGU+CisgICAgICAgICAgICA8L3Jlc291cmNlLWVudi1yZWY+CisgICAgICAgIDwvc2Vzc2lvbj4KKworICAgICAgICA8c2Vzc2lvbj4KKyAgICAgICAgICAgIDxlamItbmFtZT5JbnZva2VyMjwvZWpiLW5hbWU+CisgICAgICAgICAgICA8ZWpiLWNsYXNzPmdmLkludm9rZXIyPC9lamItY2xhc3M+CisgICAgICAgICAgICA8c2Vzc2lvbi10eXBlPlN0YXRlbGVzczwvc2Vzc2lvbi10eXBlPgorICAgICAgICAgICAgPHJlc291cmNlLWVudi1yZWY+CisgICAgICAgICAgICAgICAgPHJlc291cmNlLWVudi1yZWYtbmFtZT5qYXZhOm1vZHVsZS9lbnYvRHVwUmVzb3VyY2VFbnZSZWY8L3Jlc291cmNlLWVudi1yZWYtbmFtZT4KKyAgICAgICAgICAgICAgICA8cmVzb3VyY2UtZW52LXJlZi10eXBlPmpha2FydGEuam1zLlF1ZXVlPC9yZXNvdXJjZS1lbnYtcmVmLXR5cGU+CisgICAgICAgICAgICA8L3Jlc291cmNlLWVudi1yZWY+CisgICAgICAgIDwvc2Vzc2lvbj4KKyAgICA8L2VudGVycHJpc2UtYmVhbnM+CiAKIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2puZGl2YWxpZGF0aW9uL0NvbmZsaXRlZFJlc291cmNlRW52UmVmL2VqYk1vZHVsZS9nZi9JbnZva2VyMS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9qbmRpdmFsaWRhdGlvbi9Db25mbGl0ZWRSZXNvdXJjZUVudlJlZi9lamJNb2R1bGUvZ2YvSW52b2tlcjEuamF2YQppbmRleCBjZGQ2NGZlLi45Nzk2ZDc0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2puZGl2YWxpZGF0aW9uL0NvbmZsaXRlZFJlc291cmNlRW52UmVmL2VqYk1vZHVsZS9nZi9JbnZva2VyMS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvam5kaXZhbGlkYXRpb24vQ29uZmxpdGVkUmVzb3VyY2VFbnZSZWYvZWpiTW9kdWxlL2dmL0ludm9rZXIxLmphdmEKQEAgLTIzLDUgKzIzLDUgQEAKIEBTdGF0ZWxlc3MKIHB1YmxpYyBjbGFzcyBJbnZva2VyMSB7CiAKLQkgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2puZGl2YWxpZGF0aW9uL0NvbmZsaXRlZFJlc291cmNlUmVmL2VqYk1vZHVsZS9nZi9JbnZva2VyMy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9qbmRpdmFsaWRhdGlvbi9Db25mbGl0ZWRSZXNvdXJjZVJlZi9lamJNb2R1bGUvZ2YvSW52b2tlcjMuamF2YQppbmRleCA0MGY4YTFmLi4wOGRlMDk3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2puZGl2YWxpZGF0aW9uL0NvbmZsaXRlZFJlc291cmNlUmVmL2VqYk1vZHVsZS9nZi9JbnZva2VyMy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvam5kaXZhbGlkYXRpb24vQ29uZmxpdGVkUmVzb3VyY2VSZWYvZWpiTW9kdWxlL2dmL0ludm9rZXIzLmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKIEBTdGF0ZWxlc3MKIHB1YmxpYyBjbGFzcyBJbnZva2VyMyB7CiAKLQkgIEBSZXNvdXJjZShuYW1lPSJqYXZhOm1vZHVsZS9lbnYvRHVwUmVzb3VyY2VSZWYiLGxvb2t1cD0iamRiYy9fX2RlZmF1bHQiKSAKLQkgIHByaXZhdGUgamF2YXguc3FsLkRhdGFTb3VyY2UgY3VzdG9tZXJBcHBEQjsKLQkgIAorICAgICAgQFJlc291cmNlKG5hbWU9ImphdmE6bW9kdWxlL2Vudi9EdXBSZXNvdXJjZVJlZiIsbG9va3VwPSJqZGJjL19fZGVmYXVsdCIpCisgICAgICBwcml2YXRlIGphdmF4LnNxbC5EYXRhU291cmNlIGN1c3RvbWVyQXBwREI7CisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvam5kaXZhbGlkYXRpb24vQ29uZmxpdGVkUmVzb3VyY2VSZWYvZWpiTW9kdWxlL2dmL0ludm9rZXI0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2puZGl2YWxpZGF0aW9uL0NvbmZsaXRlZFJlc291cmNlUmVmL2VqYk1vZHVsZS9nZi9JbnZva2VyNC5qYXZhCmluZGV4IGY2NGY1MTYuLmM3ZDJmYWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvam5kaXZhbGlkYXRpb24vQ29uZmxpdGVkUmVzb3VyY2VSZWYvZWpiTW9kdWxlL2dmL0ludm9rZXI0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9qbmRpdmFsaWRhdGlvbi9Db25mbGl0ZWRSZXNvdXJjZVJlZi9lamJNb2R1bGUvZ2YvSW52b2tlcjQuamF2YQpAQCAtMjMsOCArMjMsOCBAQAogCiBAU3RhdGVsZXNzCiBwdWJsaWMgY2xhc3MgSW52b2tlcjQgewotCUBSZXNvdXJjZShuYW1lPSJqYXZhOm1vZHVsZS9lbnYvRHVwUmVzb3VyY2VSZWYiLGxvb2t1cD0iamRiYy9fX1RpbWVyUG9vbCIpIAotCSAgcHJpdmF0ZSBqYXZheC5zcWwuRGF0YVNvdXJjZSBjdXN0b21lckFwcERCOwotIAorICAgIEBSZXNvdXJjZShuYW1lPSJqYXZhOm1vZHVsZS9lbnYvRHVwUmVzb3VyY2VSZWYiLGxvb2t1cD0iamRiYy9fX1RpbWVyUG9vbCIpCisgICAgICBwcml2YXRlIGphdmF4LnNxbC5EYXRhU291cmNlIGN1c3RvbWVyQXBwREI7CisKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9qbmRpdmFsaWRhdGlvbi9Db3JyZWN0RW52RW50cnkvV2ViQ29udGVudC9XRUItSU5GL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9qbmRpdmFsaWRhdGlvbi9Db3JyZWN0RW52RW50cnkvV2ViQ29udGVudC9XRUItSU5GL2VqYi1qYXIueG1sCmluZGV4IGZiOTdjODcuLmQ0Nzc4MGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvam5kaXZhbGlkYXRpb24vQ29ycmVjdEVudkVudHJ5L1dlYkNvbnRlbnQvV0VCLUlORi9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2puZGl2YWxpZGF0aW9uL0NvcnJlY3RFbnZFbnRyeS9XZWJDb250ZW50L1dFQi1JTkYvZWpiLWphci54bWwKQEAgLTE4LDI4ICsxOCwyOCBAQAogLS0+CiAKIDxlamItamFyIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0JeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIgeG1sbnM6ZWpiPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvZWpiLWphcl8zXzEueHNkIgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS9lamItamFyXzNfMS54c2QiCi0JdmVyc2lvbj0iMy4xIj4KLQk8ZW50ZXJwcmlzZS1iZWFucz4KLQkJPHNlc3Npb24+Ci0JCQk8ZWpiLW5hbWU+SW52b2tlcjE8L2VqYi1uYW1lPgotCQkJPGVqYi1jbGFzcz5nZi5JbnZva2VyMTwvZWpiLWNsYXNzPgotCQkJPHNlc3Npb24tdHlwZT5TdGF0ZWxlc3M8L3Nlc3Npb24tdHlwZT4KLQkJCTxlbnYtZW50cnk+Ci0JCQkJPGVudi1lbnRyeS1uYW1lPmphdmE6bW9kdWxlL2Vudi9EdXBsaWNhdGVFbnZFbnRyeTwvZW52LWVudHJ5LW5hbWU+Ci0JCQkJPGVudi1lbnRyeS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2Vudi1lbnRyeS10eXBlPgotCQkJCTxlbnYtZW50cnktdmFsdWU+ZnJvbSBlamI8L2Vudi1lbnRyeS12YWx1ZT4KLQkJCTwvZW52LWVudHJ5PgotCQkJCi0JCQk8ZW52LWVudHJ5PgotCQkJCTxlbnYtZW50cnktbmFtZT5qYXZhOmNvbXAvZW52L0R1cGxpY2F0ZUVudkVudHJ5PC9lbnYtZW50cnktbmFtZT4KLQkJCQk8ZW52LWVudHJ5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvZW52LWVudHJ5LXR5cGU+Ci0JCQkJPGVudi1lbnRyeS12YWx1ZT5mcm9tIGVqYjwvZW52LWVudHJ5LXZhbHVlPgotCQkJPC9lbnYtZW50cnk+Ci0JCTwvc2Vzc2lvbj4KLQkKLQk8L2VudGVycHJpc2UtYmVhbnM+CisgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIgeG1sbnM6ZWpiPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvZWpiLWphcl8zXzEueHNkIgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS9lamItamFyXzNfMS54c2QiCisgICAgdmVyc2lvbj0iMy4xIj4KKyAgICA8ZW50ZXJwcmlzZS1iZWFucz4KKyAgICAgICAgPHNlc3Npb24+CisgICAgICAgICAgICA8ZWpiLW5hbWU+SW52b2tlcjE8L2VqYi1uYW1lPgorICAgICAgICAgICAgPGVqYi1jbGFzcz5nZi5JbnZva2VyMTwvZWpiLWNsYXNzPgorICAgICAgICAgICAgPHNlc3Npb24tdHlwZT5TdGF0ZWxlc3M8L3Nlc3Npb24tdHlwZT4KKyAgICAgICAgICAgIDxlbnYtZW50cnk+CisgICAgICAgICAgICAgICAgPGVudi1lbnRyeS1uYW1lPmphdmE6bW9kdWxlL2Vudi9EdXBsaWNhdGVFbnZFbnRyeTwvZW52LWVudHJ5LW5hbWU+CisgICAgICAgICAgICAgICAgPGVudi1lbnRyeS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2Vudi1lbnRyeS10eXBlPgorICAgICAgICAgICAgICAgIDxlbnYtZW50cnktdmFsdWU+ZnJvbSBlamI8L2Vudi1lbnRyeS12YWx1ZT4KKyAgICAgICAgICAgIDwvZW52LWVudHJ5PgorCisgICAgICAgICAgICA8ZW52LWVudHJ5PgorICAgICAgICAgICAgICAgIDxlbnYtZW50cnktbmFtZT5qYXZhOmNvbXAvZW52L0R1cGxpY2F0ZUVudkVudHJ5PC9lbnYtZW50cnktbmFtZT4KKyAgICAgICAgICAgICAgICA8ZW52LWVudHJ5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvZW52LWVudHJ5LXR5cGU+CisgICAgICAgICAgICAgICAgPGVudi1lbnRyeS12YWx1ZT5mcm9tIGVqYjwvZW52LWVudHJ5LXZhbHVlPgorICAgICAgICAgICAgPC9lbnYtZW50cnk+CisgICAgICAgIDwvc2Vzc2lvbj4KKworICAgIDwvZW50ZXJwcmlzZS1iZWFucz4KIAogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvam5kaXZhbGlkYXRpb24vQ29ycmVjdEVudkVudHJ5L3NyYy9nZi9JbnZva2VyMS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9qbmRpdmFsaWRhdGlvbi9Db3JyZWN0RW52RW50cnkvc3JjL2dmL0ludm9rZXIxLmphdmEKaW5kZXggY2RkNjRmZS4uOTc5NmQ3NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9qbmRpdmFsaWRhdGlvbi9Db3JyZWN0RW52RW50cnkvc3JjL2dmL0ludm9rZXIxLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9qbmRpdmFsaWRhdGlvbi9Db3JyZWN0RW52RW50cnkvc3JjL2dmL0ludm9rZXIxLmphdmEKQEAgLTIzLDUgKzIzLDUgQEAKIEBTdGF0ZWxlc3MKIHB1YmxpYyBjbGFzcyBJbnZva2VyMSB7CiAKLQkgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2puZGl2YWxpZGF0aW9uL0luY29ycmVjdEVudkVudHJ5L1dlYkNvbnRlbnQvV0VCLUlORi9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvam5kaXZhbGlkYXRpb24vSW5jb3JyZWN0RW52RW50cnkvV2ViQ29udGVudC9XRUItSU5GL2VqYi1qYXIueG1sCmluZGV4IDkxMzA0ZTMuLjBkODk5OTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvam5kaXZhbGlkYXRpb24vSW5jb3JyZWN0RW52RW50cnkvV2ViQ29udGVudC9XRUItSU5GL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvam5kaXZhbGlkYXRpb24vSW5jb3JyZWN0RW52RW50cnkvV2ViQ29udGVudC9XRUItSU5GL2VqYi1qYXIueG1sCkBAIC0xOCwyOSArMTgsMjkgQEAKIC0tPgogCiA8ZWpiLWphciB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotCXhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiIHhtbG5zOmVqYj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL2VqYi1qYXJfM18xLnhzZCIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvZWpiLWphcl8zXzEueHNkIgotCXZlcnNpb249IjMuMSI+Ci0JPGVudGVycHJpc2UtYmVhbnM+Ci0JCTxzZXNzaW9uPgotCQkJPGVqYi1uYW1lPkludm9rZXIxPC9lamItbmFtZT4KLQkJCTxlamItY2xhc3M+Z2YuSW52b2tlcjE8L2VqYi1jbGFzcz4KLQkJCTxzZXNzaW9uLXR5cGU+U3RhdGVsZXNzPC9zZXNzaW9uLXR5cGU+Ci0JCQk8ZW52LWVudHJ5PgotCQkJCTxlbnYtZW50cnktbmFtZT5qYXZhOm1vZHVsZS9lbnYvRHVwbGljYXRlRW52RW50cnk8L2Vudi1lbnRyeS1uYW1lPgotCQkJCTxlbnYtZW50cnktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9lbnYtZW50cnktdHlwZT4KLQkJCQk8ZW52LWVudHJ5LXZhbHVlPmZyb20gbW9kdWxlPC9lbnYtZW50cnktdmFsdWU+Ci0JCQk8L2Vudi1lbnRyeT4KLQkJCQotCQkJPGVudi1lbnRyeT4KLQkJCQk8ZW52LWVudHJ5LW5hbWU+amF2YTpjb21wL2Vudi9EdXBsaWNhdGVFbnZFbnRyeTwvZW52LWVudHJ5LW5hbWU+Ci0JCQkJPGVudi1lbnRyeS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2Vudi1lbnRyeS10eXBlPgotCQkJCTxlbnYtZW50cnktdmFsdWU+RnJvbSBjb21wPC9lbnYtZW50cnktdmFsdWU+Ci0JCQk8L2Vudi1lbnRyeT4KLQkJPC9zZXNzaW9uPgorICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiIHhtbG5zOmVqYj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL2VqYi1qYXJfM18xLnhzZCIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvZWpiLWphcl8zXzEueHNkIgorICAgIHZlcnNpb249IjMuMSI+CisgICAgPGVudGVycHJpc2UtYmVhbnM+CisgICAgICAgIDxzZXNzaW9uPgorICAgICAgICAgICAgPGVqYi1uYW1lPkludm9rZXIxPC9lamItbmFtZT4KKyAgICAgICAgICAgIDxlamItY2xhc3M+Z2YuSW52b2tlcjE8L2VqYi1jbGFzcz4KKyAgICAgICAgICAgIDxzZXNzaW9uLXR5cGU+U3RhdGVsZXNzPC9zZXNzaW9uLXR5cGU+CisgICAgICAgICAgICA8ZW52LWVudHJ5PgorICAgICAgICAgICAgICAgIDxlbnYtZW50cnktbmFtZT5qYXZhOm1vZHVsZS9lbnYvRHVwbGljYXRlRW52RW50cnk8L2Vudi1lbnRyeS1uYW1lPgorICAgICAgICAgICAgICAgIDxlbnYtZW50cnktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9lbnYtZW50cnktdHlwZT4KKyAgICAgICAgICAgICAgICA8ZW52LWVudHJ5LXZhbHVlPmZyb20gbW9kdWxlPC9lbnYtZW50cnktdmFsdWU+CisgICAgICAgICAgICA8L2Vudi1lbnRyeT4KIAotCQotCTwvZW50ZXJwcmlzZS1iZWFucz4KKyAgICAgICAgICAgIDxlbnYtZW50cnk+CisgICAgICAgICAgICAgICAgPGVudi1lbnRyeS1uYW1lPmphdmE6Y29tcC9lbnYvRHVwbGljYXRlRW52RW50cnk8L2Vudi1lbnRyeS1uYW1lPgorICAgICAgICAgICAgICAgIDxlbnYtZW50cnktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9lbnYtZW50cnktdHlwZT4KKyAgICAgICAgICAgICAgICA8ZW52LWVudHJ5LXZhbHVlPkZyb20gY29tcDwvZW52LWVudHJ5LXZhbHVlPgorICAgICAgICAgICAgPC9lbnYtZW50cnk+CisgICAgICAgIDwvc2Vzc2lvbj4KKworCisgICAgPC9lbnRlcnByaXNlLWJlYW5zPgogCiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9qbmRpdmFsaWRhdGlvbi9JbmNvcnJlY3RFbnZFbnRyeS9zcmMvZ2YvSW52b2tlcjEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvam5kaXZhbGlkYXRpb24vSW5jb3JyZWN0RW52RW50cnkvc3JjL2dmL0ludm9rZXIxLmphdmEKaW5kZXggY2RkNjRmZS4uOTc5NmQ3NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9qbmRpdmFsaWRhdGlvbi9JbmNvcnJlY3RFbnZFbnRyeS9zcmMvZ2YvSW52b2tlcjEuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2puZGl2YWxpZGF0aW9uL0luY29ycmVjdEVudkVudHJ5L3NyYy9nZi9JbnZva2VyMS5qYXZhCkBAIC0yMyw1ICsyMyw1IEBACiBAU3RhdGVsZXNzCiBwdWJsaWMgY2xhc3MgSW52b2tlcjEgewogCi0JICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9qbmRpdmFsaWRhdGlvbi9SZXNvdXJjZVJlZi9Db3JyZWN0UXVldWVSZXMvTUVUQS1JTkYvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2puZGl2YWxpZGF0aW9uL1Jlc291cmNlUmVmL0NvcnJlY3RRdWV1ZVJlcy9NRVRBLUlORi9lamItamFyLnhtbAppbmRleCA2MWQwZmFjLi45YmM0ODg2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2puZGl2YWxpZGF0aW9uL1Jlc291cmNlUmVmL0NvcnJlY3RRdWV1ZVJlcy9NRVRBLUlORi9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2puZGl2YWxpZGF0aW9uL1Jlc291cmNlUmVmL0NvcnJlY3RRdWV1ZVJlcy9NRVRBLUlORi9lamItamFyLnhtbApAQCAtMTgsMjUgKzE4LDI1IEBACiAtLT4KIAogPGVqYi1qYXIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLQl4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIiB4bWxuczplamI9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS9lamItamFyXzNfMS54c2QiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL2VqYi1qYXJfM18xLnhzZCIKLQl2ZXJzaW9uPSIzLjEiPgotCTxlbnRlcnByaXNlLWJlYW5zPgotCQk8c2Vzc2lvbj4KLQkJCTxlamItbmFtZT5JbnZva2VyPC9lamItbmFtZT4KLQkJCTxlamItY2xhc3M+Z2YuSW52b2tlcjwvZWpiLWNsYXNzPgotCQkJPHNlc3Npb24tdHlwZT5TdGF0ZWxlc3M8L3Nlc3Npb24tdHlwZT4KLQkJCTxtZXNzYWdlLWRlc3RpbmF0aW9uLXJlZj4KLQkJCQk8bWVzc2FnZS1kZXN0aW5hdGlvbi1yZWYtbmFtZT5qbXMvTXlRdWV1ZTwvbWVzc2FnZS1kZXN0aW5hdGlvbi1yZWYtbmFtZT4KLQkJCQk8bWVzc2FnZS1kZXN0aW5hdGlvbi10eXBlPmpha2FydGEuam1zLlF1ZXVlPC9tZXNzYWdlLWRlc3RpbmF0aW9uLXR5cGU+Ci0JCQkJPG1lc3NhZ2UtZGVzdGluYXRpb24tdXNhZ2U+UHJvZHVjZXM8L21lc3NhZ2UtZGVzdGluYXRpb24tdXNhZ2U+Ci0JCQkJPG1lc3NhZ2UtZGVzdGluYXRpb24tbGluaz5NeVF1ZXVlTGluazwvbWVzc2FnZS1kZXN0aW5hdGlvbi1saW5rPgotCQkJPC9tZXNzYWdlLWRlc3RpbmF0aW9uLXJlZj4KLQkJPC9zZXNzaW9uPgotCTwvZW50ZXJwcmlzZS1iZWFucz4KLQk8YXNzZW1ibHktZGVzY3JpcHRvcj4KLQkJPG1lc3NhZ2UtZGVzdGluYXRpb24+Ci0JCQk8bWVzc2FnZS1kZXN0aW5hdGlvbi1uYW1lPk15UXVldWVMaW5rPC9tZXNzYWdlLWRlc3RpbmF0aW9uLW5hbWU+Ci0JCTwvbWVzc2FnZS1kZXN0aW5hdGlvbj4KLQk8L2Fzc2VtYmx5LWRlc2NyaXB0b3I+CisgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIgeG1sbnM6ZWpiPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvZWpiLWphcl8zXzEueHNkIgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS9lamItamFyXzNfMS54c2QiCisgICAgdmVyc2lvbj0iMy4xIj4KKyAgICA8ZW50ZXJwcmlzZS1iZWFucz4KKyAgICAgICAgPHNlc3Npb24+CisgICAgICAgICAgICA8ZWpiLW5hbWU+SW52b2tlcjwvZWpiLW5hbWU+CisgICAgICAgICAgICA8ZWpiLWNsYXNzPmdmLkludm9rZXI8L2VqYi1jbGFzcz4KKyAgICAgICAgICAgIDxzZXNzaW9uLXR5cGU+U3RhdGVsZXNzPC9zZXNzaW9uLXR5cGU+CisgICAgICAgICAgICA8bWVzc2FnZS1kZXN0aW5hdGlvbi1yZWY+CisgICAgICAgICAgICAgICAgPG1lc3NhZ2UtZGVzdGluYXRpb24tcmVmLW5hbWU+am1zL015UXVldWU8L21lc3NhZ2UtZGVzdGluYXRpb24tcmVmLW5hbWU+CisgICAgICAgICAgICAgICAgPG1lc3NhZ2UtZGVzdGluYXRpb24tdHlwZT5qYWthcnRhLmptcy5RdWV1ZTwvbWVzc2FnZS1kZXN0aW5hdGlvbi10eXBlPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlLWRlc3RpbmF0aW9uLXVzYWdlPlByb2R1Y2VzPC9tZXNzYWdlLWRlc3RpbmF0aW9uLXVzYWdlPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlLWRlc3RpbmF0aW9uLWxpbms+TXlRdWV1ZUxpbms8L21lc3NhZ2UtZGVzdGluYXRpb24tbGluaz4KKyAgICAgICAgICAgIDwvbWVzc2FnZS1kZXN0aW5hdGlvbi1yZWY+CisgICAgICAgIDwvc2Vzc2lvbj4KKyAgICA8L2VudGVycHJpc2UtYmVhbnM+CisgICAgPGFzc2VtYmx5LWRlc2NyaXB0b3I+CisgICAgICAgIDxtZXNzYWdlLWRlc3RpbmF0aW9uPgorICAgICAgICAgICAgPG1lc3NhZ2UtZGVzdGluYXRpb24tbmFtZT5NeVF1ZXVlTGluazwvbWVzc2FnZS1kZXN0aW5hdGlvbi1uYW1lPgorICAgICAgICA8L21lc3NhZ2UtZGVzdGluYXRpb24+CisgICAgPC9hc3NlbWJseS1kZXNjcmlwdG9yPgogPC9lamItamFyPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9qbmRpdmFsaWRhdGlvbi9SZXNvdXJjZVJlZi9Db3JyZWN0UXVldWVSZXMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9lamIzMS9qbmRpdmFsaWRhdGlvbi9SZXNvdXJjZVJlZi9Db3JyZWN0UXVldWVSZXMvTUVUQS1JTkYvc3VuLWVqYi1qYXIueG1sCmluZGV4IDRiYWIxZTcuLjAyMWJkNTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvZWpiMzEvam5kaXZhbGlkYXRpb24vUmVzb3VyY2VSZWYvQ29ycmVjdFF1ZXVlUmVzL01FVEEtSU5GL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2VqYjMxL2puZGl2YWxpZGF0aW9uL1Jlc291cmNlUmVmL0NvcnJlY3RRdWV1ZVJlcy9NRVRBLUlORi9zdW4tZWpiLWphci54bWwKQEAgLTE5LDEwICsxOSwxMCBAQAogLS0+CiAKIDxzdW4tZWpiLWphcj4KLQk8ZW50ZXJwcmlzZS1iZWFucz4KLQkJPG1lc3NhZ2UtZGVzdGluYXRpb24+Ci0JCQk8bWVzc2FnZS1kZXN0aW5hdGlvbi1uYW1lPk15UXVldWVMaW5rPC9tZXNzYWdlLWRlc3RpbmF0aW9uLW5hbWU+Ci0JCQk8am5kaS1uYW1lPmptcy9kZXBsb3ltZW50X2puZGl2YWxpZGF0aW9uX3F1ZXVlPC9qbmRpLW5hbWU+Ci0JCTwvbWVzc2FnZS1kZXN0aW5hdGlvbj4KLQk8L2VudGVycHJpc2UtYmVhbnM+CisgICAgPGVudGVycHJpc2UtYmVhbnM+CisgICAgICAgIDxtZXNzYWdlLWRlc3RpbmF0aW9uPgorICAgICAgICAgICAgPG1lc3NhZ2UtZGVzdGluYXRpb24tbmFtZT5NeVF1ZXVlTGluazwvbWVzc2FnZS1kZXN0aW5hdGlvbi1uYW1lPgorICAgICAgICAgICAgPGpuZGktbmFtZT5qbXMvZGVwbG95bWVudF9qbmRpdmFsaWRhdGlvbl9xdWV1ZTwvam5kaS1uYW1lPgorICAgICAgICA8L21lc3NhZ2UtZGVzdGluYXRpb24+CisgICAgPC9lbnRlcnByaXNlLWJlYW5zPgogPC9zdW4tZWpiLWphcj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvamF2YWVlOC9lYXIvY2xpZW50L01FVEEtSU5GL2FwcGxpY2F0aW9uLWNsaWVudC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2phdmFlZTgvZWFyL2NsaWVudC9NRVRBLUlORi9hcHBsaWNhdGlvbi1jbGllbnQueG1sCmluZGV4IGQzNDU1OWQuLjhkZmE4NGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvamF2YWVlOC9lYXIvY2xpZW50L01FVEEtSU5GL2FwcGxpY2F0aW9uLWNsaWVudC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qYXZhZWU4L2Vhci9jbGllbnQvTUVUQS1JTkYvYXBwbGljYXRpb24tY2xpZW50LnhtbApAQCAtMjEsNSArMjEsNSBAQAogICAgICAgICAgICAgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgICAgICAgICAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUgaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS9hcHBsaWNhdGlvbi1jbGllbnRfOC54c2QiPgogICA8ZGlzcGxheS1uYW1lPnRlc3RhcHA8L2Rpc3BsYXktbmFtZT4KLSAgIAorCiA8L2FwcGxpY2F0aW9uLWNsaWVudD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvYXBpdGVzdHMvVGVzdENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9hcGl0ZXN0cy9UZXN0Q2xpZW50LmphdmEKaW5kZXggZGUwMmI0ZC4uZWFjMWZlZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9hcGl0ZXN0cy9UZXN0Q2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9hcGl0ZXN0cy9UZXN0Q2xpZW50LmphdmEKQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICAgbG9nKCJBbGwgZXhwZWN0ZWQgYXBwbGljYXRpb25zIGhhdmUgYmVlbiByZXBvcnRlZCIpOwogICAgICAgICByZXR1cm4odHJ1ZSk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBib29sZWFuIGNoZWNrUmVwb3J0ZWRBcHBzKFN0cmluZ1tdIGFyZ3MsIEJvb2xlYW4gc3RhdGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIGxvZygiQ2hlY2tpbmcgaWYgYXBwbGljYXRpb24gbmFtZXMgcmVwb3J0ZWQgYXJlIHZhbGlkIik7CkBAIC0xMzUsNyArMTM1LDcgQEAKIAogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqV2UgZXhwZWN0IHR3byBldmVudHMsIG9uZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBzdGFydCBvcGVyYXRpb24gZW50ZXJpbmcgdGhlICJydW5uaW5nIiBzdGF0ZSBhbmQKLSAgICAgICAgICAgICAqb25lIGZvciB0aGUgb3BlcmF0aW9uIGNvbXBsZXRpbmcuICBJZiB0aGUgcmFjZSBjb25kaXRpb24gaGFzIG9jY3VycmVkLCB0aGVuIHdlIHdvbid0IHNlZSBib3RoIG9mIAorICAgICAgICAgICAgICpvbmUgZm9yIHRoZSBvcGVyYXRpb24gY29tcGxldGluZy4gIElmIHRoZSByYWNlIGNvbmRpdGlvbiBoYXMgb2NjdXJyZWQsIHRoZW4gd2Ugd29uJ3Qgc2VlIGJvdGggb2YKICAgICAgICAgICAgICAqdGhlIGV2ZW50cy4gIFdlJ3JlIGdvaW5nIHRvIGxvb2sgYXQgdGhlIGZpcnN0IG9uZSwgZXhwZWN0aW5nIGl0IHRvIGJlIHRoZSAicnVubmluZyIgZXZlbnQuCiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIGlmIChyZWNlaXZlZEV2ZW50cy5sZW5ndGggPCAyKSB7CkBAIC0xNzAsNyArMTcwLDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAgICAgCisKICAgICBwcml2YXRlIGludCB0ZXN0U3RhcnRTdG9wKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGxvZygiU3RvcHBpbmcgYWxsIEFwcGxpY2F0aW9ucyIpOwpAQCAtMjA5LDcgKzIwOSw3IEBACiAKICAgICAgICAgICAgIEhhc2hNYXAgc2V0ID0gbmV3IEhhc2hNYXAoKTsKICAgICAgICAgICAgIHNldC5wdXQoYXJnc1s0XSwgImFwcCIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGJvb2xlYW4gcmV0ID0gY2hlY2tJZkFwcHNBcmVQcmVzZW50KGFwcHMsIHNldCk7CiAgICAgICAgICAgICBpZighcmV0KQogICAgICAgICAgICAgICAgIHJldHVybigtMSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L2FwaXRlc3RzL1Rlc3RKU1I4OENvbmN1cnJlbmN5LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L2FwaXRlc3RzL1Rlc3RKU1I4OENvbmN1cnJlbmN5LmphdmEKaW5kZXggNDQ0NTVmZi4uYzA0NmY0NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9hcGl0ZXN0cy9UZXN0SlNSODhDb25jdXJyZW5jeS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvYXBpdGVzdHMvVGVzdEpTUjg4Q29uY3VycmVuY3kuamF2YQpAQCAtNDksMTEgKzQ5LDExIEBACiAgKkpWTXMgYnV0IHN5bmNocm9uaXplZC4KICAqPHA+CiAgKmFyZ3VtZW50czoKLSAqIC0taG9zdCA8aG9zdD4gCi0gKiAtLXBvcnQgPHBvcnQ+IAotICogLS11c2VybmFtZSA8dXNlcm5hbWU+IAotICogLS1wYXNzd29yZCA8cGFzc3dvcmQ+IAotICogLS1vcGVyYXRpb24gPG9wZXJhdGlvbj5bKjxuPl0gCisgKiAtLWhvc3QgPGhvc3Q+CisgKiAtLXBvcnQgPHBvcnQ+CisgKiAtLXVzZXJuYW1lIDx1c2VybmFtZT4KKyAqIC0tcGFzc3dvcmQgPHBhc3N3b3JkPgorICogLS1vcGVyYXRpb24gPG9wZXJhdGlvbj5bKjxuPl0KICAqIC0tc3RhcnRUaW1lIDx0ZXN0U3RhcnRUaW1lPiAoYXMgSDptbTpzcykKICAqIC0tZGVsYXkgPGRlbGF5VGltZSkgKGluIG1zKQogICogLS1zZWN1cmUgPHRydWUgb3IgZmFsc2U+CkBAIC02NCwxMCArNjQsMTAgQEAKICAqPHA+CiAgKlRoZSBnZXRUYXJnZXRzIGFuZCBnZXRBcHBzIHRhc2tzIGludm9rZSB0aGUgY29ycmVzcG9uZGluZyBiYWNrLWVuZCBtZXRob2Qgb25seQogICpvbmNlIGluIGVhY2ggdGhyZWFkLiAgVGhlIGxvb3BHZXRUYXJnZXRzIGlzIG1vcmUgbGlrZWx5IHRvIGluZHVjZSBwcm9ibGVtcyBpZgotICp0aGVyZSBhcmUgcmFjZSBjb25kaXRpb25zIHNvbWV3aGVyZSBpbiB0aGUgY29kZSBwYXRoLCBzaW5jZSBpdCBpbnZva2VzIHRoZSAKLSAqZ2V0VGFyZ2V0cyBtZXRob2QgbXVsdGlwbGUgdGltZXMgZnJvbSBlYWNoIHRocmVhZC4gIAorICp0aGVyZSBhcmUgcmFjZSBjb25kaXRpb25zIHNvbWV3aGVyZSBpbiB0aGUgY29kZSBwYXRoLCBzaW5jZSBpdCBpbnZva2VzIHRoZQorICpnZXRUYXJnZXRzIG1ldGhvZCBtdWx0aXBsZSB0aW1lcyBmcm9tIGVhY2ggdGhyZWFkLgogICo8cD4KLSAqVGhlIHN5c3RlbSBwcm9wZXJ0eSBzbGVlcC50aW1lLCBpZiBzZXQsIGlzIHVzZWQgYXMgdGhlIGRlbGF5IGJldHdlZW4gd2hlbiAKKyAqVGhlIHN5c3RlbSBwcm9wZXJ0eSBzbGVlcC50aW1lLCBpZiBzZXQsIGlzIHVzZWQgYXMgdGhlIGRlbGF5IGJldHdlZW4gd2hlbgogICptdWx0aXBsZSB0aHJlYWRzIGFyZSBzdGFydGVkLiAgVGhpcyBpcyBub3JtYWxseSBub3QgbmVlZGVkIGJ1dCBjb3VsZCBiZSB1c2VkCiAgKnRvIHN0YWdnZXIgdGhlIHJlcXVlc3RzIGZyb20gdGhlIHRocmVhZHMgdGhhdCBhcmUgc3RhcnRlZCB0byBzZWUgaWYgZG9pbmcKICAqc28gYXZvaWRzIGFueSByYWNlIGNvbmRpdG9uIHRoYXQgaXMgcmV2ZWFsZWQgYnkgc3RhcnRpbmcgdGhlIHRocmVhZHMKQEAgLTgxLDExICs4MSwxMSBAQAogICogQGF1dGhvciB0anF1aW5uCiAgKi8KIHB1YmxpYyBjbGFzcyBUZXN0SlNSODhDb25jdXJyZW5jeSB7Ci0gICAgCisKICAgICBwcml2YXRlIERlcGxveW1lbnRGYWN0b3J5IGZhY3Rvcnk7Ci0gICAgCisKICAgICBwcml2YXRlIERlcGxveW1lbnRNYW5hZ2VyIG1hbmFnZXI7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSE9TVCA9ICItLWhvc3QiOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQT1JUID0gIi0tcG9ydCI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFVTRVJOQU1FID0gIi0tdXNlcm5hbWUiOwpAQCAtOTUsOSArOTUsOSBAQAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERUxBWSA9ICItLWRlbGF5IjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VDVVJFID0gIi0tc2VjdXJlIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVElNRU9VVCA9ICItLXRpbWVvdXQiOwotICAgIAorCiAgICAgLyoqIGluaXRpYWxpemF0aW9uIGluZm8gZm9yIHRoZSBjb21tYW5kLWxpbmUgb3B0aW9uIG5hbWVzIGFuZCBkZWZhdWx0cywgaWYgYW55ICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW11bXSBvcHRpb25zQW5kRGVmYXVsdHMgPSBuZXcgU3RyaW5nW11bXSAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXVtdIG9wdGlvbnNBbmREZWZhdWx0cyA9IG5ldyBTdHJpbmdbXVtdCiAgICAgICAgIHsge0hPU1QsICJsb2NhbGhvc3QifSwKICAgICAgICAgICB7UE9SVCwgIjQ4NDgifSwKICAgICAgICAgICB7VVNFUk5BTUUsICJhZG1pbiJ9LApAQCAtMTA4LDE5ICsxMDgsMTkgQEAKICAgICAgICAgICB7U0VDVVJFLCAiZmFsc2UifSwKICAgICAgICAgICB7VElNRU9VVCwgIjEwMDAwIn0gLy8gMTAgc2Vjb25kcwogICAgIH07Ci0gICAgCisKICAgICAvKiBjb21tYW5kLWxpbmUgb3B0aW9uIG5hbWVzIGFuZCB2YWx1ZXMgKi8KICAgICBwcml2YXRlIEhhc2hNYXA8U3RyaW5nLFN0cmluZz4gb3B0aW9uczsKLSAgICAKKwogICAgIC8qIHVzZWQgdG8gY29udHJvbCBob3cgbWFueSBpdGVyYXRpb25zIG9mIHRoZSBsb29wR2V0VGFyZ2V0cyB3aWxsIHJ1biAqLwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBMT09QX01BWCA9IDEwMDsKLSAgICAKKwogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgVGVzdEpTUjg4Q29uY3VycmVuY3kKICAgICAgKi8KICAgICBwdWJsaWMgVGVzdEpTUjg4Q29uY3VycmVuY3koKSB7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQHBhcmFtIGFyZ3MgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKICAgICAgKi8KQEAgLTEzMiwxNiArMTMyLDE2IEBACiAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBydW4oU3RyaW5nW10gYXJncykgdGhyb3dzIERlcGxveW1lbnRNYW5hZ2VyQ3JlYXRpb25FeGNlcHRpb24sIFRhcmdldEV4Y2VwdGlvbiwgSW50ZXJydXB0ZWRFeGNlcHRpb24sIFBhcnNlRXhjZXB0aW9uLCBVc2VyRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHByZXBhcmVBcmdzKGFyZ3MpOwogICAgICAgICAgICAgZmFjdG9yeSA9IGluaXRGYWN0b3J5KCk7CiAgICAgICAgICAgICBtYW5hZ2VyID0gaW5pdE1hbmFnZXIoCi0gICAgICAgICAgICAgICAgICAgIGdldEhvc3QoKSwgCi0gICAgICAgICAgICAgICAgICAgIGdldFBvcnQoKSwgCi0gICAgICAgICAgICAgICAgICAgIGdldFVzZXJuYW1lKCksIAotICAgICAgICAgICAgICAgICAgICBnZXRQYXNzd29yZCgpLCAKKyAgICAgICAgICAgICAgICAgICAgZ2V0SG9zdCgpLAorICAgICAgICAgICAgICAgICAgICBnZXRQb3J0KCksCisgICAgICAgICAgICAgICAgICAgIGdldFVzZXJuYW1lKCksCisgICAgICAgICAgICAgICAgICAgIGdldFBhc3N3b3JkKCksCiAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuZ2V0KFNFQ1VSRSkuZXF1YWxzSWdub3JlQ2FzZSgidHJ1ZSIpKTsKIAogICAgICAgICAgICAgd2FpdEZvclRhcmdldFRpbWUoKTsKQEAgLTE1MSw5ICsxNTEsOSBAQAogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJVc2VyIGVycm9yOiAiICsgdWUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIFN5c3RlbS5leGl0KDEpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHdhaXRGb3JUYXJnZXRUaW1lKCkgdGhyb3dzIFBhcnNlRXhjZXB0aW9uLCBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7CiAgICAgICAgIGlmIChnZXRUYXJnZXRUaW1lVGV4dCgpID09IG51bGwpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTm8gc3RhcnQgZGVsYXkgc3BlY2lmaWVkOyBjb250aW51aW5nIGltbWVkaWF0ZWx5Iik7CkBAIC0xNjIsNyArMTYyLDcgQEAKICAgICAgICAgU2ltcGxlRGF0ZUZvcm1hdCB0YXJnZXRUaW1lRm9ybWF0ID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoIkg6bW06c3MiKTsKICAgICAgICAgQ2FsZW5kYXIgdGFyZ2V0VGltZSA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7CiAgICAgICAgIHRhcmdldFRpbWUuc2V0VGltZSh0YXJnZXRUaW1lRm9ybWF0LnBhcnNlKGdldFRhcmdldFRpbWVUZXh0KCkpKTsKLSAgICAgICAgCisKICAgICAgICAgQ2FsZW5kYXIgbm93ID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKICAgICAgICAgdGFyZ2V0VGltZS5zZXQobm93LmdldChDYWxlbmRhci5ZRUFSKSwgbm93LmdldChDYWxlbmRhci5NT05USCksIG5vdy5nZXQoQ2FsZW5kYXIuREFZX09GX01PTlRIKSk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3VycmVudGx5IGl0IGlzICIgKyBub3cuZ2V0VGltZSgpLnRvU3RyaW5nKCkpOwpAQCAtMTcwLDEwICsxNzAsMTAgQEAKICAgICAgICAgVGhyZWFkLnNsZWVwKHRhcmdldFRpbWUuZ2V0VGltZUluTWlsbGlzKCkgLSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUHJvY2VlZGluZyIpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBwcmVwYXJlQXJncyhTdHJpbmdbXSBhcmdzKSB0aHJvd3MgVXNlckV4Y2VwdGlvbiB7CiAgICAgICAgIG9wdGlvbnMgPSBpbml0T3B0aW9uc01hcCgpOwotICAgICAgICAKKwogICAgICAgICBpbnQgaSA9IDA7CiAgICAgICAgIHdoaWxlIChpIDwgYXJncy5sZW5ndGgpIHsKICAgICAgICAgICAgIGlmIChvcHRpb25zLmNvbnRhaW5zS2V5KGFyZ3NbaV0pKSB7CkBAIC0xODMsMTYgKzE4MywxNiBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgaSsrOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGVuc3VyZVJlcXVpcmVkSW5mb1N1cHBsaWVkKCk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIGVuc3VyZVJlcXVpcmVkSW5mb1N1cHBsaWVkKCkgdGhyb3dzIFVzZXJFeGNlcHRpb24gewogICAgICAgICBpZiAoZ2V0T3BlcmF0aW9uKCkgPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFVzZXJFeGNlcHRpb24oIkV4cGVjdGVkIC0tb3BlcmF0aW9uIDxvcGVyYXRpb25bKm5dPiBidXQgbm9uZSB3YXMgZm91bmQiKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgSGFzaE1hcDxTdHJpbmcsU3RyaW5nPiBpbml0T3B0aW9uc01hcCgpIHsKICAgICAgICAgSGFzaE1hcDxTdHJpbmcsU3RyaW5nPiByZXN1bHQgPSBuZXcgSGFzaE1hcDxTdHJpbmcsU3RyaW5nPigpOwogICAgICAgICBmb3IgKFN0cmluZ1tdIG9wdGlvbkFuZFZhbHVlIDogb3B0aW9uc0FuZERlZmF1bHRzKSB7CkBAIC0yMDAsMTQgKzIwMCwxNCBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgZ2V0UmVxdWlyZWRPcHRpb25WYWx1ZShTdHJpbmdbXSBhcmdzLCBpbnQgdmFsdWVQb3NpdGlvbikgdGhyb3dzIFVzZXJFeGNlcHRpb24gewogICAgICAgICBpZiAoKHZhbHVlUG9zaXRpb24gPj0gYXJncy5sZW5ndGgpIHx8IChhcmdzW3ZhbHVlUG9zaXRpb25dLnN0YXJ0c1dpdGgoIi0tIikpKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgVXNlckV4Y2VwdGlvbigiTm8gdmFsdWUgYXZhaWxhYmxlIGZvciAiICsgYXJnc1t2YWx1ZVBvc2l0aW9uIC0gMV0pOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBhcmdzW3ZhbHVlUG9zaXRpb25dOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCB1c2FnZSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJkZXZ0ZXN0cy5kZXBsb3ltZW50Lmpzcjg4LmFwaXRlc3RzLlRlc3RKU1I4OENvbmN1cnJlbmN5IC0taG9zdCA8aG9zdD4gLS1wb3J0IDxwb3J0PiAtLXVzZXJuYW1lIDx1c2VybmFtZT4gLS1wYXNzd29yZCA8cGFzc3dvcmQ+IC0tb3BlcmF0aW9uIDxvcGVyYXRpb24+Wyo8bj5dIC0tc3RhcnRUaW1lIHRlc3RTdGFydFRpbWUgKGFzIEg6bW06c3MpIC0tZGVsYXkgPGRlbGF5LWluLW1zPiAtLXNlY3VyZSB0cnVlL2ZhbHNlIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICB3aGVyZSA8b3BlcmF0aW9uPiBjYW4gYmUgZ2V0VGFyZ2V0cywgZ2V0QXBwcywgbG9vcEdldFRhcmdldHMiKTsKQEAgLTIxNSwxOCArMjE1LDE4IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICB0ZXN0U3RhcnRUaW1lIGlzIGEgdGltZSBpbiB0aGUgY3VycmVudCBkYXksIHNwZWNpZmllZCBhcyBbSF1IOm1tOnNzICBkZWZhdWx0IGlzIHRvIHN0YXJ0IGltbWVkaWF0ZWx5Iik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICBkZWxheSBpcyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IGJldHdlZW4gc3RhcnRpbmcgdGhyZWFkcyIpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgRGVwbG95bWVudEZhY3RvcnkgaW5pdEZhY3RvcnkoKSB7CiAgICAgICAgIC8qCiAgICAgICAgICAqV2Uga25vdyB3ZSBhcmUgdGVzdGluZyBvdXIgZmFjdG9yeSwgc28ganVzdCBpbnN0YW50aWF0ZSBpdC4KICAgICAgICAgICovCiAgICAgICAgIHJldHVybiBuZXcgU3VuRGVwbG95bWVudEZhY3RvcnkoKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIERlcGxveW1lbnRNYW5hZ2VyIGluaXRNYW5hZ2VyKAotICAgICAgICAgICAgU3RyaW5nIGhvc3QsIAotICAgICAgICAgICAgU3RyaW5nIHBvcnQsIAotICAgICAgICAgICAgU3RyaW5nIHVzZXJuYW1lLCAKKyAgICAgICAgICAgIFN0cmluZyBob3N0LAorICAgICAgICAgICAgU3RyaW5nIHBvcnQsCisgICAgICAgICAgICBTdHJpbmcgdXNlcm5hbWUsCiAgICAgICAgICAgICBTdHJpbmcgcGFzc3dvcmQsCiAgICAgICAgICAgICBib29sZWFuIHNlY3VyZSkgdGhyb3dzIERlcGxveW1lbnRNYW5hZ2VyQ3JlYXRpb25FeGNlcHRpb24gewogICAgICAgICBTdHJpbmcgdXJsID0gImRlcGxveWVyOlN1bjpBcHBTZXJ2ZXI6OiIgKyBob3N0ICsgIjoiICsgcG9ydCArIGdldENvbm5lY3Rpb25TdHJpbmdTdWZmaXgoc2VjdXJlKTsKQEAgLTI2NiwyNiArMjY2LDI2IEBACiAgICAgICAgICAgICAgICAgdC5qb2luKGdldFRpbWVvdXQoKSk7CiAgICAgICAgICAgICAgICAgYWxsVGhyZWFkc09LICY9IHRocmVhZE9LW2ldLmdldCgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmICggISBhbGxUaHJlYWRzT0spIHsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiQXQgbGVhc3Qgb25lIHRocmVhZCBmYWlsZWQiKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBwcmludFRhcmdldHMoaW50IHRocmVhZElEKSB7Ci0gICAgICAgIAorCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiWyIgKyB0aHJlYWRJRCArICJdVGFyZ2V0czoiKTsKICAgICAgICAgZm9yIChUYXJnZXQgdCA6IGdldFRhcmdldHMoKSkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbIiArIHRocmVhZElEICsgIl0gICIgKyB0LmdldE5hbWUoKSk7CiAgICAgICAgIH0KICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBUYXJnZXRbXSBnZXRUYXJnZXRzKCkgewogICAgICAgICByZXR1cm4gbWFuYWdlci5nZXRUYXJnZXRzKCk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBUYXJnZXRNb2R1bGVJRFtdIGdldEFwcHMoKSB0aHJvd3MgVGFyZ2V0RXhjZXB0aW9uIHsKICAgICAgICAgVGFyZ2V0W10gdGFyZ2V0cyA9IGdldFRhcmdldHMoKTsKICAgICAgICAgTW9kdWxlVHlwZVtdIHR5cGVzID0gbmV3IE1vZHVsZVR5cGVbXSB7TW9kdWxlVHlwZS5FSkIsIE1vZHVsZVR5cGUuRUFSLCBNb2R1bGVUeXBlLkNBUiwgTW9kdWxlVHlwZS5SQVJ9OwpAQCAtMjk1LDcgKzI5NSw3IEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJlc3VsdC50b0FycmF5KG5ldyBUYXJnZXRNb2R1bGVJRFtyZXN1bHQuc2l6ZSgpXSk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHByaW50QXBwcyhpbnQgdGhyZWFkSUQpIHRocm93cyBUYXJnZXRFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlsiICsgdGhyZWFkSUQgKyAiXUFwcGxpY2F0aW9uczoiKTsKICAgICAgICAgZm9yIChUYXJnZXRNb2R1bGVJRCBpZCA6IGdldEFwcHMoKSkgewpAQCAtMzAzLDcgKzMwMyw3IEBACiAgICAgICAgIH0KICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbIiArIHRocmVhZElEICsgIl0iKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgbG9vcEdldFRhcmdldHMoKSB7CiAgICAgICAgIGdldFRhcmdldHMoKTsgLy8gdG8gd2FybSB1cCB0aGUgY29ubmVjdGlvbgogICAgICAgICBsb25nIHN0YXJ0VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwpAQCAtMzEyLDIzICszMTIsMjMgQEAKICAgICAgICAgfQogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gc3RhcnRUaW1lKSk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHBlcmZvcm1GdW5jdGlvbihTdHJpbmcgZnVuY3Rpb24sIGludCB0aHJlYWRJRCkgdGhyb3dzIFRhcmdldEV4Y2VwdGlvbiB7CiAgICAgICAgIGlmIChmdW5jdGlvbi5lcXVhbHMoImdldFRhcmdldHMiKSkgewogICAgICAgICAgICAgcHJpbnRUYXJnZXRzKHRocmVhZElEKTsKICAgICAgICAgfSBlbHNlIGlmIChmdW5jdGlvbi5lcXVhbHMoImdldEFwcHMiKSkgewogICAgICAgICAgICAgcHJpbnRBcHBzKHRocmVhZElEKTsKICAgICAgICAgfSBlbHNlIGlmIChmdW5jdGlvbi5lcXVhbHMoImxvb3BHZXRUYXJnZXRzIikpIHsKLSAgICAgICAgICAgIGxvb3BHZXRUYXJnZXRzKCk7IAorICAgICAgICAgICAgbG9vcEdldFRhcmdldHMoKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTm8gcmVjb2duaXplZCBmdW5jdGlvbiBpbiB0aHJlYWQgIiArIHRocmVhZElEKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBtdWx0aUdldEFwcHMoKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgZ2V0U3RhcnRUaW1lVGV4dCgpIHsKICAgICAgICAgcmV0dXJuIG9wdGlvbnMuZ2V0KFNUQVJUX1RJTUUpOwogICAgIH0KQEAgLTM2MCw3ICszNjAsNyBAQAogICAgIHByaXZhdGUgbG9uZyBnZXREZWxheSgpIHsKICAgICAgICAgcmV0dXJuIExvbmcucGFyc2VMb25nKG9wdGlvbnMuZ2V0KERFTEFZKSk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgZ2V0Q29ubmVjdGlvblN0cmluZ1N1ZmZpeChib29sZWFuIHNlY3VyZSkgewogICAgICAgICByZXR1cm4gc2VjdXJlID8gIjpodHRwcyIgOiAiIjsKICAgICB9CkBAIC0zNjgsMTkgKzM2OCwxOSBAQAogICAgIHByaXZhdGUgbG9uZyBnZXRUaW1lb3V0KCkgewogICAgICAgICByZXR1cm4gTG9uZy5wYXJzZUxvbmcob3B0aW9ucy5nZXQoVElNRU9VVCkpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgY2xhc3MgUnVubmVyIGltcGxlbWVudHMgUnVubmFibGUgewotICAgICAgICAKKwogICAgICAgICBwcml2YXRlIFN0cmluZyBmdW5jdGlvbjsKICAgICAgICAgcHJpdmF0ZSBpbnQgdGhyZWFkSUQ7CiAgICAgICAgIHByaXZhdGUgQXRvbWljQm9vbGVhbiByZXN1bHQ7Ci0gICAgICAgIAorCiAgICAgICAgIHB1YmxpYyBSdW5uZXIoU3RyaW5nIGZ1bmN0aW9uLCBpbnQgdGhyZWFkSUQsIEF0b21pY0Jvb2xlYW4gcmVzdWx0KSB7CiAgICAgICAgICAgICBSdW5uZXIudGhpcy5mdW5jdGlvbiA9IGZ1bmN0aW9uOwogICAgICAgICAgICAgdGhpcy50aHJlYWRJRCA9IHRocmVhZElEOwogICAgICAgICAgICAgdGhpcy5yZXN1bHQgPSByZXN1bHQ7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBwZXJmb3JtRnVuY3Rpb24oZnVuY3Rpb24sIHRocmVhZElEKTsKQEAgLTM5MiwxMCArMzkyLDEwIEBACiAgICAgICAgICAgICAgICAgICAgIHRoci5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICpJbmRpY2F0ZXMgYSB1c2VyIGVycm9yLCBzdWNoIGFzIGEgbWlzc2luZyBjb21tYW5kLWxpbmUgdmFsdWUsIHRoYXQgc2hvdWxkCiAgICAgICpiZSBkaXNwbGF5ZWQgd2l0aG91dCBhIHN0YWNrIHRyYWNlLgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9hcGl0ZXN0cy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L2FwaXRlc3RzL2J1aWxkLnhtbAppbmRleCA5Zjk2NjNmLi5jNjRiM2Q1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L2FwaXRlc3RzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L2FwaXRlc3RzL2J1aWxkLnhtbApAQCAtNDIsMTggKzQyLDE4IEBACiAgICAgPC9wYXRoPgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3lBcHBzIj4KLQkJPGRlbGV0ZSBkaXI9IiR7dGVzdHNSb290fS9idWlsZC93YXIvc2VydmxldG9ubHkiLz4KLQkJPGRlbGV0ZSBkaXI9IiR7dGVzdHNSb290fS9idWlsZC9lamIvc3RhdGVsZXNzaGVsbG8iLz4KLQkJPGRlbGV0ZSBkaXI9IiR7dGVzdHNSb290fS9idWlsZC9lYXIvd3N0b2VqYiIvPgorICAgICAgICA8ZGVsZXRlIGRpcj0iJHt0ZXN0c1Jvb3R9L2J1aWxkL3dhci9zZXJ2bGV0b25seSIvPgorICAgICAgICA8ZGVsZXRlIGRpcj0iJHt0ZXN0c1Jvb3R9L2J1aWxkL2VqYi9zdGF0ZWxlc3NoZWxsbyIvPgorICAgICAgICA8ZGVsZXRlIGRpcj0iJHt0ZXN0c1Jvb3R9L2J1aWxkL2Vhci93c3RvZWpiIi8+CiAgICAgICAgIDxhbnQgZGlyPSIuLi8uLi93YXIvc2VydmxldG9ubHkiIHRhcmdldD0iYXNzZW1ibGUiPgogICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHt0ZXN0c1Jvb3R9L2J1aWxkL3dhci9zZXJ2bGV0b25seSIvPgogICAgICAgICA8L2FudD4KICAgICAgICAgPGFudCBkaXI9Ii4uLy4uL2VqYi9zdGF0ZWxlc3NoZWxsbyIgdGFyZ2V0PSJhc3NlbWJsZSI+CiAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke3Rlc3RzUm9vdH0vYnVpbGQvZWpiL3N0YXRlbGVzc2hlbGxvIi8+Ci0gICAgICAgIDwvYW50PiAgICAgICAgCisgICAgICAgIDwvYW50PgogICAgICAgICA8YW50IGRpcj0iLi4vLi4vZWFyL3dzdG9lamIiIHRhcmdldD0iYnVpbGQiPgogICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHt0ZXN0c1Jvb3R9L2J1aWxkL2Vhci93c3RvZWpiIi8+Ci0gICAgICAgIDwvYW50PiAgICAgICAgCisgICAgICAgIDwvYW50PgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbW1vbi5kZXBsb3kuYXNhZG1pbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiIHZhbHVlPSIke3Rlc3RzUm9vdH0vYnVpbGQvd2FyL3NlcnZsZXRvbmx5L3NlcnZsZXRvbmx5LndhciIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InRlc3ROYW1lIiB2YWx1ZT0ic2VydmxldG9ubHkiLz4KQEAgLTEyNiw3ICsxMjYsNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImxvZyIgdmFsdWU9IiR7YnVpbGR9LyR7bG9nLmlkfS5vdXRwdXQubG9nIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuQ29uY3VycmVuY3lDbGllbnQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJDb25jdXJyZW5jeUNsaWVudCAke2FyZy5saXN0fSIvPgogICAgICAgICA8amF2YQpAQCAtMTk4LDcgKzE5OCw3IEBACiAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveUFwcHMiIC8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bkNvbmN1cnJlbmN5VGVzdCIgZGVwZW5kcz0iaW5pdCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVjbGFyZS10ZXN0Ij4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJkZXNjcmlwdGlvbiIgdmFsdWU9Impzcjg4L2FwaXRlc3RzIFRlc3QgSlNSLTg4IGNvbmN1cnJlbnQgdXNhZ2UiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9idWlsZC54bWwKaW5kZXggNjY5YTAyYi4uNWRlYmJhMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9idWlsZC54bWwKQEAgLTIzLDcgKzIzLDcgQEAKIAogPHByb2plY3QgbmFtZT0ianNyODgiIGRlZmF1bHQ9ImFsbCIgYmFzZWRpcj0iLiI+CiAKLSAgICAmY29tbW9uQnVpbGQ7ICAgIAorICAgICZjb21tb25CdWlsZDsKIAogICAgIDx0YXJnZXQgbmFtZT0icHJpdmF0ZS1hbGwiPgogICAgICAgICA8YW50IGRpcj0id2FyIiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvZGVwbG95bWVudG1hbmFnZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9kZXBsb3ltZW50bWFuYWdlci9idWlsZC54bWwKaW5kZXggMGYwYTk2Ny4uMjRhODEyZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9kZXBsb3ltZW50bWFuYWdlci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9kZXBsb3ltZW50bWFuYWdlci9idWlsZC54bWwKQEAgLTIzLDE2ICsyMywxNiBAQAogCiA8cHJvamVjdCBuYW1lPSJkZXBsb3ltZW50bWFuYWdlciIgZGVmYXVsdD0iYWxsIiBiYXNlZGlyPSIuIj4KIAotCSZjb21tb25CdWlsZDsgICAgCisgICAgJmNvbW1vbkJ1aWxkOwogICAgIDxwcm9wZXJ0eSBuYW1lPSJhcmNoaXZlZGlyIiB2YWx1ZT0iJHtidWlsZH0vYXJjaGl2ZXMiLz4KIAotCTx0YXJnZXQgbmFtZT0icHJpdmF0ZS1hbGwiPgotCQk8YW50IGRpcj0iZGlzdHJpYnV0ZSIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9kaXN0cmlidXRlIi8+Ci0JCTwvYW50PgotCQk8YW50IGRpcj0iZ2V0WE1vZHVsZXMiIHRhcmdldD0icHJpdmF0ZS1hbGwiPgotCQkJPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0vZ2V0WE1vZHVsZXMiLz4KLQkJPC9hbnQ+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCI+CisgICAgICAgIDxhbnQgZGlyPSJkaXN0cmlidXRlIiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L2Rpc3RyaWJ1dGUiLz4KKyAgICAgICAgPC9hbnQ+CisgICAgICAgIDxhbnQgZGlyPSJnZXRYTW9kdWxlcyIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9nZXRYTW9kdWxlcyIvPgorICAgICAgICA8L2FudD4KKyAgICA8L3RhcmdldD4KIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9kZXBsb3ltZW50bWFuYWdlci9kaXN0cmlidXRlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvZGVwbG95bWVudG1hbmFnZXIvZGlzdHJpYnV0ZS9idWlsZC54bWwKaW5kZXggZjU5MTE5MC4uYmE2Mjc3NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9kZXBsb3ltZW50bWFuYWdlci9kaXN0cmlidXRlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L2RlcGxveW1lbnRtYW5hZ2VyL2Rpc3RyaWJ1dGUvYnVpbGQueG1sCkBAIC0yMywxOSArMjMsMTkgQEAKIAogPHByb2plY3QgbmFtZT0iZGlzdHJpYnV0ZSIgZGVmYXVsdD0iYWxsIiBiYXNlZGlyPSIuIj4KIAotCSZjb21tb25CdWlsZDsgICAgCisgICAgJmNvbW1vbkJ1aWxkOwogCi0JPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCI+Ci0JCTxhbnQgZGlyPSJjaGlsZHRhcmdldG1vZHVsZWlkIiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9Ii8+Ci0JCTwvYW50PgotCQk8YW50IGRpcj0iZ2V0d2VidXJsIiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9Ii8+Ci0JCTwvYW50PgotCQk8YW50IGRpcj0iY2xpZW50Y29uZmlndXJhdGlvbiIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfSIvPgotCQk8L2FudD4KKyAgICA8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIj4KKyAgICAgICAgPGFudCBkaXI9ImNoaWxkdGFyZ2V0bW9kdWxlaWQiIHRhcmdldD0icHJpdmF0ZS1hbGwiPgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0iLz4KKyAgICAgICAgPC9hbnQ+CisgICAgICAgIDxhbnQgZGlyPSJnZXR3ZWJ1cmwiIHRhcmdldD0icHJpdmF0ZS1hbGwiPgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0iLz4KKyAgICAgICAgPC9hbnQ+CisgICAgICAgIDxhbnQgZGlyPSJjbGllbnRjb25maWd1cmF0aW9uIiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9Ii8+CisgICAgICAgIDwvYW50PgogCi0JPC90YXJnZXQ+CisgICAgPC90YXJnZXQ+CiAKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvZGVwbG95bWVudG1hbmFnZXIvZGlzdHJpYnV0ZS9jaGlsZHRhcmdldG1vZHVsZWlkL0RlcGxveVRhcmdldE1vZHVsZUlEVGVzdGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L2RlcGxveW1lbnRtYW5hZ2VyL2Rpc3RyaWJ1dGUvY2hpbGR0YXJnZXRtb2R1bGVpZC9EZXBsb3lUYXJnZXRNb2R1bGVJRFRlc3Rlci5qYXZhCmluZGV4IGRkMTc0YjEuLjAyOGRlMjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvZGVwbG95bWVudG1hbmFnZXIvZGlzdHJpYnV0ZS9jaGlsZHRhcmdldG1vZHVsZWlkL0RlcGxveVRhcmdldE1vZHVsZUlEVGVzdGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9kZXBsb3ltZW50bWFuYWdlci9kaXN0cmlidXRlL2NoaWxkdGFyZ2V0bW9kdWxlaWQvRGVwbG95VGFyZ2V0TW9kdWxlSURUZXN0ZXIuamF2YQpAQCAtNDAsMTcgKzQwLDE3IEBACiAgKiBAYXV0aG9yIEplcm9tZSBEb2NoZXoKICAqLwogcHVibGljIGNsYXNzIERlcGxveVRhcmdldE1vZHVsZUlEVGVzdGVyIGV4dGVuZHMgSlNSODhEZXBsb3llciB7Ci0gICAgCisKICAgICAvKiogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBEZXBsb3lUYXJnZXRNb2R1bGVJRFRlc3RlciAqLwotICAgIHB1YmxpYyBEZXBsb3lUYXJnZXRNb2R1bGVJRFRlc3RlcihTdHJpbmcgaG9zdCwgU3RyaW5nIHBvcnQsIFN0cmluZyB1c2VyLCBTdHJpbmcgcGFzc3dvcmQpIHsgICAgICAgCisgICAgcHVibGljIERlcGxveVRhcmdldE1vZHVsZUlEVGVzdGVyKFN0cmluZyBob3N0LCBTdHJpbmcgcG9ydCwgU3RyaW5nIHVzZXIsIFN0cmluZyBwYXNzd29yZCkgewogICAgICAgICBzdXBlcihob3N0LCBwb3J0LCB1c2VyLCBwYXNzd29yZCk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQHBhcmFtIGFyZ3MgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBEZXBsb3lUYXJnZXRNb2R1bGVJRFRlc3RlciBkZXBsb3llciA9IGdldERlcGxveWVyKGFyZ3MpOwogICAgICAgICAgICAgVGFyZ2V0TW9kdWxlSURbXSBpZHMgPSBkZXBsb3llci5kZXBsb3koYXJncyk7CkBAIC01OSwyMyArNTksMjMgQEAKICAgICAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgwKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgbG9nKCJUZXN0IEZBSUxFRCIpOwotICAgICAgICAgICAgICAgIGRlcGxveWVyLmR1bXBNb2R1bGVzSURzKCIiLCBpZHMpOyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBkZXBsb3llci5kdW1wTW9kdWxlc0lEcygiIiwgaWRzKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKICAgICAgICAgfQotICAgIH0gCi0gICAgCi0gICAgcHJvdGVjdGVkIHN0YXRpYyBEZXBsb3lUYXJnZXRNb2R1bGVJRFRlc3RlciBnZXREZXBsb3llcihTdHJpbmdbXSBhcmdzKSB7Ci0gICAgICAgcmV0dXJuIG5ldyBEZXBsb3lUYXJnZXRNb2R1bGVJRFRlc3RlcihhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdLCBhcmdzWzRdKTsgICAgICAgICAgICAgICAgCiAgICAgfQotICAgIAotICAgIAotICAgIHByb3RlY3RlZCBUYXJnZXRNb2R1bGVJRFtdIGRlcGxveShTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsgICAgICAgIAotICAgICAgICAKKworICAgIHByb3RlY3RlZCBzdGF0aWMgRGVwbG95VGFyZ2V0TW9kdWxlSURUZXN0ZXIgZ2V0RGVwbG95ZXIoU3RyaW5nW10gYXJncykgeworICAgICAgIHJldHVybiBuZXcgRGVwbG95VGFyZ2V0TW9kdWxlSURUZXN0ZXIoYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSk7CisgICAgfQorCisKKyAgICBwcm90ZWN0ZWQgVGFyZ2V0TW9kdWxlSURbXSBkZXBsb3koU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7CisKICAgICAgICAgRmlsZSBpbnB1dEZpbGUgPSBuZXcgRmlsZShhcmdzWzZdKTsKICAgICAgICAgaWYgKCFpbnB1dEZpbGUuZXhpc3RzKCkpIHsKICAgICAgICAgICAgIGVycm9yKCJGaWxlIG5vdCBmb3VuZCA6ICIgKyBpbnB1dEZpbGUuZ2V0UGF0aCgpKTsKQEAgLTkxLDI5ICs5MSwyOSBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBsb2coIkRlcGxveWluZyAiICsgaW5wdXRGaWxlICsgIiBwbGFuOiAiICsgZGVwbG95bWVudEZpbGUpOwogICAgICAgICBQcm9ncmVzc09iamVjdCBwbyA9ICBkZXBsb3koaW5wdXRGaWxlLCBkZXBsb3ltZW50RmlsZSwgZmFsc2UpOwogICAgICAgICByZXR1cm4gcG8uZ2V0UmVzdWx0VGFyZ2V0TW9kdWxlSURzKCk7CiAgICAgfQotICAgIAorCiAgICAgcHJvdGVjdGVkIGJvb2xlYW4gdGVzdChUYXJnZXRNb2R1bGVJRFtdIG1vZHVsZUlEcywgU3RyaW5nIHBhdGgpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24KICAgICB7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChtb2R1bGVJRHMubGVuZ3RoPT0wKSB7CiAgICAgICAgICAgICAvLyBkZXBsb3ltZW50IGZhaWxlZCA/CiAgICAgICAgICAgICBsb2coIkRlcGxveW1lbnQgZmFpbGVkLCBnb3QgemVybyBUYXJnZXRNb2R1bGVJRCIpOwogICAgICAgICAgICAgU3lzdGVtLmV4aXQoMSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgLy8gd2UgYXJlIGxvYWRpbmcgdGhlIGRlcGxveWVkIGZpbGUgYW5kIGNoZWNraW5nIHRoYXQgdGhlIG1vZHVsZUlEcyBhcmUKICAgICAgICAgLy8gY29ycmVjdAogICAgICAgICBBcHBsaWNhdGlvbiBhcHAgPSBBcHBsaWNhdGlvbkFyY2hpdmlzdC5vcGVuQXJjaGl2ZShuZXcgRmlsZShwYXRoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChhcHAuaXNWaXJ0dWFsKCkpIHsKICAgICAgICAgICAgIEJ1bmRsZURlc2NyaXB0b3IgYmQgPSBhcHAuZ2V0U3RhbmRhbG9uZUJ1bmRsZURlc2NyaXB0b3IoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyBzdGFuZGFsb25lIG1vZHVsZSwgc2hvdWxkIGJlIGZhc3QuCiAgICAgICAgICAgICBpZiAobW9kdWxlSURzLmxlbmd0aCE9MSkgewogICAgICAgICAgICAgICAgIC8vIHdyb25nIG51bWJlci4uLgpAQCAtMTIyLDQxICsxMjIsNDEgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKGludCBpPTA7aTxtb2R1bGVJRHMubGVuZ3RoO2krKykgeyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoaW50IGk9MDtpPG1vZHVsZUlEcy5sZW5ndGg7aSsrKSB7CiAgICAgICAgICAgICAgICAgVGFyZ2V0TW9kdWxlSUQgcGFyZW50ID0gbW9kdWxlSURzW2ldOwogICAgICAgICAgICAgICAgIFRhcmdldCB0YXJnZXQgPSBwYXJlbnQuZ2V0VGFyZ2V0KCk7CiAgICAgICAgICAgICAgICAgbG9nKCJEZXBsb3llZCBvbiAiICsgdGFyZ2V0LmdldE5hbWUoKSArICIgd2l0aCBtb2R1bGUgSUQgIiArIHBhcmVudC5nZXRNb2R1bGVJRCgpKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIC8vIG5vdyBsb29rIGF0IGFsbCB0aGUgY2hpbGRyZW4KICAgICAgICAgICAgICAgICBUYXJnZXRNb2R1bGVJRFtdIGNoaWxkcmVuID0gcGFyZW50LmdldENoaWxkVGFyZ2V0TW9kdWxlSUQoKTsKICAgICAgICAgICAgICAgICBpZiAoY2hpbGRyZW49PW51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgbG9nKCJFUlJPUiA6IEFwcCBmcm9tICIgKyBwYXRoICsgIiBoYXMgIiArIGFwcC5nZXRCdW5kbGVEZXNjcmlwdG9ycygpLnNpemUoKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAiIG1vZHVsZXMgYnV0IEkgZGlkbid0IGdldCBhbnkgY2hpbGRyZW4gVGFnZXRNb2R1bGVJRCIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgLy8gc2l6ZSBpcyBjb25zaXN0ZW50ID8KICAgICAgICAgICAgICAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoIT1hcHAuZ2V0QnVuZGxlRGVzY3JpcHRvcnMoKS5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICAgbG9nKCJFUlJPUiA6IEFwcCBmcm9tICIgKyBwYXRoICsgIiBoYXMgIiArIGFwcC5nZXRCdW5kbGVEZXNjcmlwdG9ycygpLnNpemUoKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAiIG1vZHVsZXMgYnV0IEkgZ290IG9ubHkgIiArIGNoaWxkcmVuLmxlbmd0aCArIAorICAgICAgICAgICAgICAgICAgICAgICAgIiBtb2R1bGVzIGJ1dCBJIGdvdCBvbmx5ICIgKyBjaGlsZHJlbi5sZW5ndGggKwogICAgICAgICAgICAgICAgICAgICAgICAgIiBjaGlsZHJlbiBUYWdldE1vZHVsZUlEIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBsb2coIkV4cGVjdGVkICIgKyBhcHAuZ2V0QnVuZGxlRGVzY3JpcHRvcnMoKS5zaXplKCkgKyAKKyAgICAgICAgICAgICAgICAgICAgbG9nKCJFeHBlY3RlZCAiICsgYXBwLmdldEJ1bmRsZURlc2NyaXB0b3JzKCkuc2l6ZSgpICsKICAgICAgICAgICAgICAgICAgICAgICAgICIgY2hpbGRyZW4gVGFyZ2V0TW9kdWxlSURzIGFuZCBnb3QgIiArIGNoaWxkcmVuLmxlbmd0aCk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGZvciAoaW50IGo9MDtqPGNoaWxkcmVuLmxlbmd0aDtqKyspIHsKICAgICAgICAgICAgICAgICAgICAgVGFyZ2V0TW9kdWxlSUQgYUNoaWxkID0gY2hpbGRyZW5bal07CiAgICAgICAgICAgICAgICAgICAgIGxvZygiUHJvY2Vzc2luZyAiICsgYUNoaWxkLmdldE1vZHVsZUlEKCkpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgY2hpbGRNb2R1bGVJRCA9IGFDaGlsZC5nZXRNb2R1bGVJRCgpOwogICAgICAgICAgICAgICAgICAgICBTdHJpbmdbXSBzcGxpdHRlZCA9IGNoaWxkTW9kdWxlSUQuc3BsaXQoIiMiKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHNwbGl0dGVkLmxlbmd0aCE9MikgewogICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCJVbmtub3duIHN1YiBtb2R1bGUgaWQgIiArIGNoaWxkTW9kdWxlSUQpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIHRoYXQgcGFyZW50IFRhcmdlVE1vZHVsZUlEIGlzIGNvcnJlY3QKICAgICAgICAgICAgICAgICAgICAgaWYgKGFDaGlsZC5nZXRQYXJlbnRUYXJnZXRNb2R1bGVJRCgpLmVxdWFscyhwYXJlbnQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBsb2coIkNoaWxkJ3MgcGFyZW50IFRhcmdldE1vZHVsZUlEIGlzIGNvcnJlY3RseSBzZXQiKTsKQEAgLTE2NCwxNCArMTY0LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBsb2coIkNoaWxkJ3MgcGFyZW50IFRhcmdldE1vZHVsZUlEIGlzIGluY29ycmVjdCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBmaXJzdCA9IHNwbGl0dGVkWzBdOwogICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3QuZXF1YWxzKHBhcmVudC5nZXRNb2R1bGVJRCgpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCJDb3JyZWN0IHBhcmVudCBtb2R1bGUgaWQgZm9yIGNoaWxkICIgKyBjaGlsZE1vZHVsZUlEKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGxvZygiSW5jb3JyZWN0IHBhcmVudCBtb2R1bGUgaWQgZm9yIGNoaWxkICIgKyBjaGlsZE1vZHVsZUlEKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvLyBsb29rIGZvciB0aGUgcmlnaHQgbW9kdWxlIGRlc2NyaXB0b3IuLgogICAgICAgICAgICAgICAgICAgICBNb2R1bGVEZXNjcmlwdG9yIG1kID0gYXBwLmdldE1vZHVsZURlc2NyaXB0b3JCeVVyaShzcGxpdHRlZFsxXSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChtZD09bnVsbCkgewpAQCAtMTgwLDEwICsxODAsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGxvZygiRm91bmQgbW9kdWxlIGRlc2NyaXB0b3IgZm9yICIgKyBjaGlsZE1vZHVsZUlEKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIC8vIGlmIHdlIGFyZSBoZXJlLCBpdCdzIGdvb2QgIQotICAgICAgICByZXR1cm4gdHJ1ZTsgICAgICAKLSAgICB9ICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L2RlcGxveW1lbnRtYW5hZ2VyL2Rpc3RyaWJ1dGUvY2hpbGR0YXJnZXRtb2R1bGVpZC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L2RlcGxveW1lbnRtYW5hZ2VyL2Rpc3RyaWJ1dGUvY2hpbGR0YXJnZXRtb2R1bGVpZC9idWlsZC54bWwKaW5kZXggMTJlZGZlYy4uMDE2ZTE2MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9kZXBsb3ltZW50bWFuYWdlci9kaXN0cmlidXRlL2NoaWxkdGFyZ2V0bW9kdWxlaWQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvZGVwbG95bWVudG1hbmFnZXIvZGlzdHJpYnV0ZS9jaGlsZHRhcmdldG1vZHVsZWlkL2J1aWxkLnhtbApAQCAtMjAsMTkgKzIwLDE5IEBACiAKIDwhRU5USVRZIGNvbW1vbkJ1aWxkIFNZU1RFTSAiLi8uLi8uLi8uLi8uLi9jb25maWcvY29tbW9uLnhtbCI+CiBdPgotIAorCiA8cHJvamVjdCBuYW1lPSJkZXBsb3l0YXJnZXRtb2R1bGVpZCIgZGVmYXVsdD0iYWxsIiBiYXNlZGlyPSIuIj4KIAotIAkmY29tbW9uQnVpbGQ7ICAgICAgICAKKyAgICAgJmNvbW1vbkJ1aWxkOwogICAgIDxwcm9wZXJ0eSBuYW1lPSJhcmNoaXZlZGlyIiB2YWx1ZT0iJHtidWlsZH0vYXJjaGl2ZXMiLz4KIAotCTx0YXJnZXQgbmFtZT0iY29tcGlsZSI+CisgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIj4KICAgICAgICAgICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkfSIgLz4KLQkJPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtlbnYuQVBTX0hPTUV9L2RldnRlc3RzL2RlcGxveW1lbnQvdXRpbC9idWlsZCIKLQkJCWNsYXNzcGF0aD0iJHtpbnN0fS9saWIvajJlZS5qYXI6JHtpbnN0fS9saWIvYXBwc2Vydi1ydC5qYXI6Li4vLi4vLi4vLi4vdXRpbC9idWlsZCIKLQkJLz4JCQotCTwvdGFyZ2V0PgotICAgICAgICAKKyAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtlbnYuQVBTX0hPTUV9L2RldnRlc3RzL2RlcGxveW1lbnQvdXRpbC9idWlsZCIKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtpbnN0fS9saWIvajJlZS5qYXI6JHtpbnN0fS9saWIvYXBwc2Vydi1ydC5qYXI6Li4vLi4vLi4vLi4vdXRpbC9idWlsZCIKKyAgICAgICAgLz4KKyAgICA8L3RhcmdldD4KKwogICAgICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLWVhciIgdW5sZXNzPSJlYXJmaWxlLmJ1aWx0Ij4KICAgICAgICAgICAgIDxlY2hvIG1lc3NhZ2U9ImZpbGUgJHtidWlsZH0vc2F2ZS93c3RvZWpiLmVhciBpcyBwcmVzZW50IDogJHtlYXJmaWxlLmJ1aWx0fSIvPgogICAgICAgICAgICAgPGFudCBkaXI9Ii4uLy4uLy4uL2Vhci93c3RvZWpiIiB0YXJnZXQ9ImFzc2VtYmxlIi8+CkBAIC00MCwyNCArNDAsMjQgQEAKICAgICAgICAgICAgIDxjb3B5IGZpbGU9IiR7YXJjaGl2ZWRpcn0vd3N0b2VqYi5lYXIiIHRvZGlyPSIke2J1aWxkfS8uLi9zYXZlIi8+CiAgICAgICAgICAgICA8Y29weSBmaWxlPSIke2FyY2hpdmVkaXJ9L3BsYW4uamFyIiB0b2Rpcj0iJHtidWlsZH0vLi4vc2F2ZSIvPgogICAgICAgICA8L3RhcmdldD4KLSAgICAgICAgCisKICAgICAgICAgPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iZGVjbGFyZS10ZXN0Ij4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWNsYXJlLXRlc3QiPgogICAgICAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZGVzY3JpcHRpb24iIHZhbHVlPSJqc3I4OC9kaXN0cmlidXRlL0NoaWxkVGFyZ2V0TW9kdWxlSUQgdGVzdCBUYXJnZXRNb2R1bGVJRCBhbmQgaXRzIGNoaWxkcmVuIHJldHVybmVkIGZyb20gZGVwbG95bWVudCIvPgotICAgICAgICAgICAgICAgIDwvYW50Y2FsbD4gICAgICAgIAorICAgICAgICAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgICAgICAgICA8YXZhaWxhYmxlIHByb3BlcnR5PSJlYXJmaWxlLmJ1aWx0IiBmaWxlPSIke2FyY2hpdmVkaXJ9L3dzdG9lamIuZWFyIi8+CiAgICAgICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXIiLz4KLQkJPGFudGNhbGwgdGFyZ2V0PSJzcGVjaWFsaXplZC5ydW4uanNyODgiPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InNwZWNpYWxpemVkLnJ1bi5qc3I4OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZGVwbG95ZXIuY2xhc3MiIHZhbHVlPSJkZXZ0ZXN0cy5kZXBsb3ltZW50Lmpzcjg4LnRhcmdldG1vZHVsZWlkLmRlcGxveXRhcmdldG1vZHVsZWlkLkRlcGxveVRhcmdldE1vZHVsZUlEVGVzdGVyIi8+Ci0JCQk8cGFyYW0gbmFtZT0iY29tbWFuZCIgdmFsdWU9ImRlcGxveSIvPgotCQkJPHBhcmFtIG5hbWU9ImFyZy5saXN0IiB2YWx1ZT0idHJ1ZSAke2J1aWxkfS8uLi9zYXZlL3dzdG9lamIuZWFyICR7YnVpbGR9Ly4uL3NhdmUvcGxhbi5qYXIiLz4KLQkJPC9hbnRjYWxsPiAgICAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJjb21tYW5kIiB2YWx1ZT0iZGVwbG95Ii8+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiIHZhbHVlPSJ0cnVlICR7YnVpbGR9Ly4uL3NhdmUvd3N0b2VqYi5lYXIgJHtidWlsZH0vLi4vc2F2ZS9wbGFuLmphciIvPgorICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwcm9jZXNzUmVzdWx0Ij4KLSAgICAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9InJlc3VsdCIgdmFsdWU9IjAiLz4gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgPC9hbnRjYWxsPiAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9InJlc3VsdCIgdmFsdWU9IjAiLz4KKyAgICAgICAgICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21tb24udW5kZXBsb3kuYXNhZG1pbiI+CiAgICAgICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIgdmFsdWU9IndzdG9lamIiLz4KLSAgICAgICAgICAgICAgICA8L2FudGNhbGw+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgIDwvdGFyZ2V0PiAgICAgICAKLSAgICAgICAgCisgICAgICAgICAgICAgICAgPC9hbnRjYWxsPgorICAgICAgICA8L3RhcmdldD4KKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9kZXBsb3ltZW50bWFuYWdlci9kaXN0cmlidXRlL2NsaWVudGNvbmZpZ3VyYXRpb24vQ2xpZW50Q29uZmlndXJhdGlvblRlc3Rlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9kZXBsb3ltZW50bWFuYWdlci9kaXN0cmlidXRlL2NsaWVudGNvbmZpZ3VyYXRpb24vQ2xpZW50Q29uZmlndXJhdGlvblRlc3Rlci5qYXZhCmluZGV4IDA0MjJlYzkuLmIyM2MzZmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvZGVwbG95bWVudG1hbmFnZXIvZGlzdHJpYnV0ZS9jbGllbnRjb25maWd1cmF0aW9uL0NsaWVudENvbmZpZ3VyYXRpb25UZXN0ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L2RlcGxveW1lbnRtYW5hZ2VyL2Rpc3RyaWJ1dGUvY2xpZW50Y29uZmlndXJhdGlvbi9DbGllbnRDb25maWd1cmF0aW9uVGVzdGVyLmphdmEKQEAgLTQxLDQwICs0MSw0MCBAQAogICogQGF1dGhvciBKZXJvbWUgRG9jaGV6CiAgKi8KIHB1YmxpYyBjbGFzcyBDbGllbnRDb25maWd1cmF0aW9uVGVzdGVyIGV4dGVuZHMgSlNSODhEZXBsb3llciB7Ci0gICAgCisKICAgICAvKiogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBEZXBsb3lUYXJnZXRNb2R1bGVJRFRlc3RlciAqLwotICAgIHB1YmxpYyBDbGllbnRDb25maWd1cmF0aW9uVGVzdGVyKFN0cmluZyBob3N0LCBTdHJpbmcgcG9ydCwgU3RyaW5nIHVzZXIsIFN0cmluZyBwYXNzd29yZCkgeyAgICAgICAKKyAgICBwdWJsaWMgQ2xpZW50Q29uZmlndXJhdGlvblRlc3RlcihTdHJpbmcgaG9zdCwgU3RyaW5nIHBvcnQsIFN0cmluZyB1c2VyLCBTdHJpbmcgcGFzc3dvcmQpIHsKICAgICAgICAgc3VwZXIoaG9zdCwgcG9ydCwgdXNlciwgcGFzc3dvcmQpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEBwYXJhbSBhcmdzIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ2xpZW50Q29uZmlndXJhdGlvblRlc3RlciBkZXBsb3llciA9IGdldERlcGxveWVyKGFyZ3MpOwogICAgICAgICAgICAgUHJvZ3Jlc3NPYmplY3QgcG8gPSBkZXBsb3llci5kZXBsb3koYXJncyk7CiAgICAgICAgICAgICBpZiAoZGVwbG95ZXIudGVzdChwbywgYXJnc1s2XSkpIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgwKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZGVwbG95ZXIuZHVtcE1vZHVsZXNJRHMoIiIsIHBvLmdldFJlc3VsdFRhcmdldE1vZHVsZUlEcygpKTsgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZGVwbG95ZXIuZHVtcE1vZHVsZXNJRHMoIiIsIHBvLmdldFJlc3VsdFRhcmdldE1vZHVsZUlEcygpKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKICAgICAgICAgfQotICAgIH0gCi0gICAgCi0gICAgcHJvdGVjdGVkIHN0YXRpYyBDbGllbnRDb25maWd1cmF0aW9uVGVzdGVyIGdldERlcGxveWVyKFN0cmluZ1tdIGFyZ3MpIHsKLSAgICAgICByZXR1cm4gbmV3IENsaWVudENvbmZpZ3VyYXRpb25UZXN0ZXIoYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSk7ICAgICAgICAgICAgICAgIAogICAgIH0KLSAgICAKLSAgICAKLSAgICBwcm90ZWN0ZWQgUHJvZ3Jlc3NPYmplY3QgZGVwbG95KFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24geyAgICAgICAgCi0gICAgICAgIAorCisgICAgcHJvdGVjdGVkIHN0YXRpYyBDbGllbnRDb25maWd1cmF0aW9uVGVzdGVyIGdldERlcGxveWVyKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICByZXR1cm4gbmV3IENsaWVudENvbmZpZ3VyYXRpb25UZXN0ZXIoYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSk7CisgICAgfQorCisKKyAgICBwcm90ZWN0ZWQgUHJvZ3Jlc3NPYmplY3QgZGVwbG95KFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24geworCiAgICAgICAgIEZpbGUgaW5wdXRGaWxlID0gbmV3IEZpbGUoYXJnc1s2XSk7CiAgICAgICAgIGlmICghaW5wdXRGaWxlLmV4aXN0cygpKSB7CiAgICAgICAgICAgICBlcnJvcigiRmlsZSBub3QgZm91bmQgOiAiICsgaW5wdXRGaWxlLmdldFBhdGgoKSk7CkBAIC05MCwyOSArOTAsMjkgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgbG9nKCJEZXBsb3lpbmcgIiArIGlucHV0RmlsZSArICIgcGxhbjogIiArIGRlcGxveW1lbnRGaWxlKTsKICAgICAgICAgcmV0dXJuIGRlcGxveShpbnB1dEZpbGUsIGRlcGxveW1lbnRGaWxlLCBmYWxzZSk7CiAgICAgfQotICAgIAorCiAgICAgcHJvdGVjdGVkIGJvb2xlYW4gdGVzdChQcm9ncmVzc09iamVjdCBwbywgU3RyaW5nIHBhdGgpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24KICAgICB7Ci0gICAgICAgIAorCiAgICAgICAgIFRhcmdldE1vZHVsZUlEW10gbW9kdWxlSURzID0gcG8uZ2V0UmVzdWx0VGFyZ2V0TW9kdWxlSURzKCk7CiAgICAgICAgIGlmIChtb2R1bGVJRHMubGVuZ3RoPT0wKSB7CiAgICAgICAgICAgICAvLyBkZXBsb3ltZW50IGZhaWxlZCA/CiAgICAgICAgICAgICBsb2coIkRlcGxveW1lbnQgZmFpbGVkLCBnb3QgemVybyBUYXJnZXRNb2R1bGVJRCIpOwogICAgICAgICAgICAgU3lzdGVtLmV4aXQoMSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgLy8gd2UgYXJlIGxvYWRpbmcgdGhlIGRlcGxveWVkIGZpbGUgYW5kIGNoZWNraW5nIHRoYXQgdGhlIG1vZHVsZUlEcyBhcmUKICAgICAgICAgLy8gY29ycmVjdAogICAgICAgICBBcHBsaWNhdGlvbiBhcHAgPSBBcHBsaWNhdGlvbkFyY2hpdmlzdC5vcGVuQXJjaGl2ZShuZXcgRmlsZShwYXRoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChhcHAuaXNWaXJ0dWFsKCkpIHsKICAgICAgICAgICAgIEJ1bmRsZURlc2NyaXB0b3IgYmQgPSBhcHAuZ2V0U3RhbmRhbG9uZUJ1bmRsZURlc2NyaXB0b3IoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyBzdGFuZGFsb25lIG1vZHVsZSwgc2hvdWxkIGJlIGZhc3QuCiAgICAgICAgICAgICBpZiAobW9kdWxlSURzLmxlbmd0aCE9MSkgewogICAgICAgICAgICAgICAgIC8vIHdyb25nIG51bWJlci4uLgpAQCAtMTIwLDcgKzEyMCw3IEBACiAgICAgICAgICAgICAgICAgZHVtcE1vZHVsZXNJRHMoIiIsIG1vZHVsZUlEcyk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8vIGxldCdzIGp1c3QgY2hlY2sgdGhhdCB0aGUgd2ViIHVyaSBpcyBmaW5lCiAgICAgICAgICAgICBpZiAoYmQuZ2V0TW9kdWxlVHlwZSgpLmVxdWFscyhNb2R1bGVUeXBlLldBUikpIHsKICAgICAgICAgICAgICAgICBpZiAobW9kdWxlSURzWzBdLmdldFdlYlVSTCgpPT1udWxsKSB7CkBAIC0xMjksMzAgKzEyOSwzMCBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvciAoaW50IGk9MDtpPG1vZHVsZUlEcy5sZW5ndGg7aSsrKSB7ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChpbnQgaT0wO2k8bW9kdWxlSURzLmxlbmd0aDtpKyspIHsKICAgICAgICAgICAgICAgICBUYXJnZXRNb2R1bGVJRCBwYXJlbnQgPSBtb2R1bGVJRHNbaV07CiAgICAgICAgICAgICAgICAgVGFyZ2V0IHRhcmdldCA9IHBhcmVudC5nZXRUYXJnZXQoKTsKICAgICAgICAgICAgICAgICBsb2coIkRlcGxveWVkIG9uICIgKyB0YXJnZXQuZ2V0TmFtZSgpICsgIiB3aXRoIG1vZHVsZSBJRCAiICsgcGFyZW50LmdldE1vZHVsZUlEKCkpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gbm93IGxvb2sgYXQgYWxsIHRoZSBjaGlsZHJlbgogICAgICAgICAgICAgICAgIFRhcmdldE1vZHVsZUlEW10gY2hpbGRyZW4gPSBwYXJlbnQuZ2V0Q2hpbGRUYXJnZXRNb2R1bGVJRCgpOwogICAgICAgICAgICAgICAgIGlmIChjaGlsZHJlbj09bnVsbCkgewogICAgICAgICAgICAgICAgICAgICBsb2coIkVSUk9SIDogQXBwIGZyb20gIiArIHBhdGggKyAiIGhhcyAiICsgYXBwLmdldEJ1bmRsZURlc2NyaXB0b3JzKCkuc2l6ZSgpICsKICAgICAgICAgICAgICAgICAgICAgICAgICIgbW9kdWxlcyBidXQgSSBkaWRuJ3QgZ2V0IGFueSBjaGlsZHJlbiBUYWdldE1vZHVsZUlEIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaj0wO2o8Y2hpbGRyZW4ubGVuZ3RoO2orKykgewogICAgICAgICAgICAgICAgICAgICBUYXJnZXRNb2R1bGVJRCBhQ2hpbGQgPSBjaGlsZHJlbltqXTsKICAgICAgICAgICAgICAgICAgICAgbG9nKCJQcm9jZXNzaW5nICIgKyBhQ2hpbGQuZ2V0TW9kdWxlSUQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBjaGlsZE1vZHVsZUlEID0gYUNoaWxkLmdldE1vZHVsZUlEKCk7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZ1tdIHNwbGl0dGVkID0gY2hpbGRNb2R1bGVJRC5zcGxpdCgiIyIpOwogICAgICAgICAgICAgICAgICAgICBpZiAoc3BsaXR0ZWQubGVuZ3RoIT0yKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBsb2coIlVua25vd24gc3ViIG1vZHVsZSBpZCAiICsgY2hpbGRNb2R1bGVJRCk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vIGxvb2sgZm9yIHRoZSByaWdodCBtb2R1bGUgZGVzY3JpcHRvci4uCiAgICAgICAgICAgICAgICAgICAgIE1vZHVsZURlc2NyaXB0b3IgbWQgPSBhcHAuZ2V0TW9kdWxlRGVzY3JpcHRvckJ5VXJpKHNwbGl0dGVkWzFdKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKG1kPT1udWxsKSB7CkBAIC0xNjYsMTAgKzE2NiwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgQ2xpZW50Q29uZmlndXJhdGlvbiBjYyA9IHBvLmdldENsaWVudENvbmZpZ3VyYXRpb24oYUNoaWxkKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNjLmV4ZWN1dGUoKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIC8vIGlmIHdlIGFyZSBoZXJlLCBpdCdzIGdvb2QgIQotICAgICAgICByZXR1cm4gdHJ1ZTsgICAgICAKLSAgICB9ICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9kZXBsb3ltZW50bWFuYWdlci9kaXN0cmlidXRlL2NsaWVudGNvbmZpZ3VyYXRpb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9kZXBsb3ltZW50bWFuYWdlci9kaXN0cmlidXRlL2NsaWVudGNvbmZpZ3VyYXRpb24vYnVpbGQueG1sCmluZGV4IDhhMjk2NGYuLmJmZjdhM2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvZGVwbG95bWVudG1hbmFnZXIvZGlzdHJpYnV0ZS9jbGllbnRjb25maWd1cmF0aW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L2RlcGxveW1lbnRtYW5hZ2VyL2Rpc3RyaWJ1dGUvY2xpZW50Y29uZmlndXJhdGlvbi9idWlsZC54bWwKQEAgLTIwLDE5ICsyMCwxOSBAQAogCiA8IUVOVElUWSBjb21tb25CdWlsZCBTWVNURU0gIi4vLi4vLi4vLi4vLi4vY29uZmlnL2NvbW1vbi54bWwiPgogXT4KLSAKKwogPHByb2plY3QgbmFtZT0iZ2V0d2VidXJsIiBkZWZhdWx0PSJhbGwiIGJhc2VkaXI9Ii4iPgogCi0gCSZjb21tb25CdWlsZDsKKyAgICAgJmNvbW1vbkJ1aWxkOwogICAgIDxwcm9wZXJ0eSBuYW1lPSJhcmNoaXZlZGlyIiB2YWx1ZT0iJHtidWlsZH0vYXJjaGl2ZXMiLz4KLSAgICAgICAgCi0JPHRhcmdldCBuYW1lPSJjb21waWxlIj4KLSAgICAgICAgICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkfSIgLz4gICAgICAgIAotCQk8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2Vudi5BUFNfSE9NRX0vZGV2dGVzdHMvZGVwbG95bWVudC91dGlsL2J1aWxkIgotCQkJY2xhc3NwYXRoPSIke2luc3R9L2xpYi9qMmVlLmphcjoke2luc3R9L2xpYi9hcHBzZXJ2LXJ0LmphcjouLi8uLi8uLi8uLi91dGlsL2J1aWxkIgotCQkvPgkJCi0JPC90YXJnZXQ+Ci0gICAgICAgIAorCisgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIj4KKyAgICAgICAgICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkfSIgLz4KKyAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtlbnYuQVBTX0hPTUV9L2RldnRlc3RzL2RlcGxveW1lbnQvdXRpbC9idWlsZCIKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtpbnN0fS9saWIvajJlZS5qYXI6JHtpbnN0fS9saWIvYXBwc2Vydi1ydC5qYXI6Li4vLi4vLi4vLi4vdXRpbC9idWlsZCIKKyAgICAgICAgLz4KKyAgICA8L3RhcmdldD4KKwogICAgICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLWVhciIgdW5sZXNzPSJlYXJmaWxlLmJ1aWx0Ij4KICAgICAgICAgICAgIDxlY2hvIG1lc3NhZ2U9ImZpbGUgJHtidWlsZH0vc2F2ZS93c3RvZWpiLmVhciBpcyBwcmVzZW50IDogJHtlYXJmaWxlLmJ1aWx0fSIvPgogICAgICAgICAgICAgPGFudCBkaXI9Ii4uLy4uLy4uL2Vhci93c3RvZWpiIiB0YXJnZXQ9ImFzc2VtYmxlIi8+CkBAIC00MCwyNCArNDAsMjQgQEAKICAgICAgICAgICAgIDxjb3B5IGZpbGU9IiR7YXJjaGl2ZWRpcn0vd3N0b2VqYi5lYXIiIHRvZGlyPSIke2J1aWxkfS8uLi9zYXZlIi8+CiAgICAgICAgICAgICA8Y29weSBmaWxlPSIke2FyY2hpdmVkaXJ9L3BsYW4uamFyIiB0b2Rpcj0iJHtidWlsZH0vLi4vc2F2ZSIvPgogICAgICAgICA8L3RhcmdldD4KLSAgICAgICAgCisKICAgICAgICAgPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iZGVjbGFyZS10ZXN0Ij4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWNsYXJlLXRlc3QiPgogICAgICAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZGVzY3JpcHRpb24iIHZhbHVlPSJqc3I4OC9kZXBsb3ltZW50bWFuYWdlci9kaXN0cmlidXRlL2NsaWVudGNvbmZpZ3VyYXRpb24gdGVzdCBnZXRDbGllbnRDb25maWd1cmF0b24gQVBJIi8+Ci0gICAgICAgICAgICAgICAgPC9hbnRjYWxsPiAgICAgICAgCisgICAgICAgICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICAgICAgICAgIDxhdmFpbGFibGUgcHJvcGVydHk9ImVhcmZpbGUuYnVpbHQiIGZpbGU9IiR7YnVpbGR9Ly4uL3NhdmUvd3N0b2VqYi5lYXIiLz4KICAgICAgICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhciIvPgotCQk8YW50Y2FsbCB0YXJnZXQ9InNwZWNpYWxpemVkLnJ1bi5qc3I4OCI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic3BlY2lhbGl6ZWQucnVuLmpzcjg4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJkZXBsb3llci5jbGFzcyIgdmFsdWU9Impzcjg4LmRlcGxveW1lbnRtYW5hZ2VyLmRpc3RyaWJ1dGUuY2xpZW50Y29uZmlndXJhdGlvbi5DbGllbnRDb25maWd1cmF0aW9uVGVzdGVyIi8+Ci0JCQk8cGFyYW0gbmFtZT0iY29tbWFuZCIgdmFsdWU9ImRlcGxveSIvPgotCQkJPHBhcmFtIG5hbWU9ImFyZy5saXN0IiB2YWx1ZT0idHJ1ZSAke2J1aWxkfS8uLi9zYXZlLy93c3RvZWpiLmVhciAke2J1aWxkfS8uLi9zYXZlL3BsYW4uamFyIi8+Ci0JCTwvYW50Y2FsbD4gICAgICAgICAgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iY29tbWFuZCIgdmFsdWU9ImRlcGxveSIvPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IiB2YWx1ZT0idHJ1ZSAke2J1aWxkfS8uLi9zYXZlLy93c3RvZWpiLmVhciAke2J1aWxkfS8uLi9zYXZlL3BsYW4uamFyIi8+CisgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InByb2Nlc3NSZXN1bHQiPgotICAgICAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0icmVzdWx0IiB2YWx1ZT0iMCIvPiAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICA8L2FudGNhbGw+ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9InJlc3VsdCIgdmFsdWU9IjAiLz4KKyAgICAgICAgICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21tb24udW5kZXBsb3kuYXNhZG1pbiI+CiAgICAgICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIgdmFsdWU9IndzdG9lamIiLz4KICAgICAgICAgICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDwvdGFyZ2V0PgotICAgICAgICAKKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9kZXBsb3ltZW50bWFuYWdlci9kaXN0cmlidXRlL2dldHdlYnVybC9EZXBsb3lHZXRXZWJVcmxUZXN0ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvZGVwbG95bWVudG1hbmFnZXIvZGlzdHJpYnV0ZS9nZXR3ZWJ1cmwvRGVwbG95R2V0V2ViVXJsVGVzdGVyLmphdmEKaW5kZXggMTdkMGEzNi4uOTY5N2ZlMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9kZXBsb3ltZW50bWFuYWdlci9kaXN0cmlidXRlL2dldHdlYnVybC9EZXBsb3lHZXRXZWJVcmxUZXN0ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L2RlcGxveW1lbnRtYW5hZ2VyL2Rpc3RyaWJ1dGUvZ2V0d2VidXJsL0RlcGxveUdldFdlYlVybFRlc3Rlci5qYXZhCkBAIC00MCw0MCArNDAsNDAgQEAKICAqIEBhdXRob3IgSmVyb21lIERvY2hlegogICovCiBwdWJsaWMgY2xhc3MgRGVwbG95R2V0V2ViVXJsVGVzdGVyIGV4dGVuZHMgSlNSODhEZXBsb3llciB7Ci0gICAgCisKICAgICAvKiogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBEZXBsb3lUYXJnZXRNb2R1bGVJRFRlc3RlciAqLwotICAgIHB1YmxpYyBEZXBsb3lHZXRXZWJVcmxUZXN0ZXIoU3RyaW5nIGhvc3QsIFN0cmluZyBwb3J0LCBTdHJpbmcgdXNlciwgU3RyaW5nIHBhc3N3b3JkKSB7ICAgICAgIAorICAgIHB1YmxpYyBEZXBsb3lHZXRXZWJVcmxUZXN0ZXIoU3RyaW5nIGhvc3QsIFN0cmluZyBwb3J0LCBTdHJpbmcgdXNlciwgU3RyaW5nIHBhc3N3b3JkKSB7CiAgICAgICAgIHN1cGVyKGhvc3QsIHBvcnQsIHVzZXIsIHBhc3N3b3JkKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBAcGFyYW0gYXJncyB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cwogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIERlcGxveUdldFdlYlVybFRlc3RlciBkZXBsb3llciA9IGdldERlcGxveWVyKGFyZ3MpOwogICAgICAgICAgICAgVGFyZ2V0TW9kdWxlSURbXSBpZHMgPSBkZXBsb3llci5kZXBsb3koYXJncyk7CiAgICAgICAgICAgICBpZiAoZGVwbG95ZXIudGVzdChpZHMsIGFyZ3NbNl0pKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLmV4aXQoMCk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGRlcGxveWVyLmR1bXBNb2R1bGVzSURzKCIiLCBpZHMpOyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBkZXBsb3llci5kdW1wTW9kdWxlc0lEcygiIiwgaWRzKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKICAgICAgICAgfQotICAgIH0gCi0gICAgCi0gICAgcHJvdGVjdGVkIHN0YXRpYyBEZXBsb3lHZXRXZWJVcmxUZXN0ZXIgZ2V0RGVwbG95ZXIoU3RyaW5nW10gYXJncykgewotICAgICAgIHJldHVybiBuZXcgRGVwbG95R2V0V2ViVXJsVGVzdGVyKGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0pOyAgICAgICAgICAgICAgICAKICAgICB9Ci0gICAgCi0gICAgCi0gICAgcHJvdGVjdGVkIFRhcmdldE1vZHVsZUlEW10gZGVwbG95KFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24geyAgICAgICAgCi0gICAgICAgIAorCisgICAgcHJvdGVjdGVkIHN0YXRpYyBEZXBsb3lHZXRXZWJVcmxUZXN0ZXIgZ2V0RGVwbG95ZXIoU3RyaW5nW10gYXJncykgeworICAgICAgIHJldHVybiBuZXcgRGVwbG95R2V0V2ViVXJsVGVzdGVyKGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0pOworICAgIH0KKworCisgICAgcHJvdGVjdGVkIFRhcmdldE1vZHVsZUlEW10gZGVwbG95KFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24geworCiAgICAgICAgIEZpbGUgaW5wdXRGaWxlID0gbmV3IEZpbGUoYXJnc1s2XSk7CiAgICAgICAgIGlmICghaW5wdXRGaWxlLmV4aXN0cygpKSB7CiAgICAgICAgICAgICBlcnJvcigiRmlsZSBub3QgZm91bmQgOiAiICsgaW5wdXRGaWxlLmdldFBhdGgoKSk7CkBAIC04OSwyOSArODksMjkgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgbG9nKCJEZXBsb3lpbmcgIiArIGlucHV0RmlsZSArICIgcGxhbjogIiArIGRlcGxveW1lbnRGaWxlKTsKICAgICAgICAgUHJvZ3Jlc3NPYmplY3QgcG8gPSAgZGVwbG95KGlucHV0RmlsZSwgZGVwbG95bWVudEZpbGUsIGZhbHNlKTsKICAgICAgICAgcmV0dXJuIHBvLmdldFJlc3VsdFRhcmdldE1vZHVsZUlEcygpOwogICAgIH0KLSAgICAKKwogICAgIHByb3RlY3RlZCBib29sZWFuIHRlc3QoVGFyZ2V0TW9kdWxlSURbXSBtb2R1bGVJRHMsIFN0cmluZyBwYXRoKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewotICAgICAgICAKKwogICAgICAgICBpZiAobW9kdWxlSURzLmxlbmd0aD09MCkgewogICAgICAgICAgICAgLy8gZGVwbG95bWVudCBmYWlsZWQgPwogICAgICAgICAgICAgbG9nKCJEZXBsb3ltZW50IGZhaWxlZCwgZ290IHplcm8gVGFyZ2V0TW9kdWxlSUQiKTsKICAgICAgICAgICAgIFN5c3RlbS5leGl0KDEpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIC8vIHdlIGFyZSBsb2FkaW5nIHRoZSBkZXBsb3llZCBmaWxlIGFuZCBjaGVja2luZyB0aGF0IHRoZSBtb2R1bGVJRHMgYXJlCiAgICAgICAgIC8vIGNvcnJlY3QKICAgICAgICAgQXBwbGljYXRpb24gYXBwID0gQXBwbGljYXRpb25BcmNoaXZpc3Qub3BlbkFyY2hpdmUobmV3IEZpbGUocGF0aCkpOwotICAgICAgICAKKwogICAgICAgICBpZiAoYXBwLmlzVmlydHVhbCgpKSB7CiAgICAgICAgICAgICBCdW5kbGVEZXNjcmlwdG9yIGJkID0gYXBwLmdldFN0YW5kYWxvbmVCdW5kbGVEZXNjcmlwdG9yKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgLy8gc3RhbmRhbG9uZSBtb2R1bGUsIHNob3VsZCBiZSBmYXN0LgogICAgICAgICAgICAgaWYgKG1vZHVsZUlEcy5sZW5ndGghPTEpIHsKICAgICAgICAgICAgICAgICAvLyB3cm9uZyBudW1iZXIuLi4KQEAgLTExOSw3ICsxMTksNyBAQAogICAgICAgICAgICAgICAgIGR1bXBNb2R1bGVzSURzKCIiLCBtb2R1bGVJRHMpOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyBsZXQncyBqdXN0IGNoZWNrIHRoYXQgdGhlIHdlYiB1cmkgaXMgZmluZQogICAgICAgICAgICAgaWYgKGJkLmdldE1vZHVsZVR5cGUoKS5lcXVhbHMoTW9kdWxlVHlwZS5XQVIpKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1vZHVsZUlEc1swXS5nZXRXZWJVUkwoKT09bnVsbCkgewpAQCAtMTI4LDMwICsxMjgsMzAgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKGludCBpPTA7aTxtb2R1bGVJRHMubGVuZ3RoO2krKykgeyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoaW50IGk9MDtpPG1vZHVsZUlEcy5sZW5ndGg7aSsrKSB7CiAgICAgICAgICAgICAgICAgVGFyZ2V0TW9kdWxlSUQgcGFyZW50ID0gbW9kdWxlSURzW2ldOwogICAgICAgICAgICAgICAgIFRhcmdldCB0YXJnZXQgPSBwYXJlbnQuZ2V0VGFyZ2V0KCk7CiAgICAgICAgICAgICAgICAgbG9nKCJEZXBsb3llZCBvbiAiICsgdGFyZ2V0LmdldE5hbWUoKSArICIgd2l0aCBtb2R1bGUgSUQgIiArIHBhcmVudC5nZXRNb2R1bGVJRCgpKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIC8vIG5vdyBsb29rIGF0IGFsbCB0aGUgY2hpbGRyZW4KICAgICAgICAgICAgICAgICBUYXJnZXRNb2R1bGVJRFtdIGNoaWxkcmVuID0gcGFyZW50LmdldENoaWxkVGFyZ2V0TW9kdWxlSUQoKTsKICAgICAgICAgICAgICAgICBpZiAoY2hpbGRyZW49PW51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgbG9nKCJFUlJPUiA6IEFwcCBmcm9tICIgKyBwYXRoICsgIiBoYXMgIiArIGFwcC5nZXRCdW5kbGVEZXNjcmlwdG9ycygpLnNpemUoKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAiIG1vZHVsZXMgYnV0IEkgZGlkbid0IGdldCBhbnkgY2hpbGRyZW4gVGFnZXRNb2R1bGVJRCIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgIGZvciAoaW50IGo9MDtqPGNoaWxkcmVuLmxlbmd0aDtqKyspIHsKICAgICAgICAgICAgICAgICAgICAgVGFyZ2V0TW9kdWxlSUQgYUNoaWxkID0gY2hpbGRyZW5bal07CiAgICAgICAgICAgICAgICAgICAgIGxvZygiUHJvY2Vzc2luZyAiICsgYUNoaWxkLmdldE1vZHVsZUlEKCkpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgY2hpbGRNb2R1bGVJRCA9IGFDaGlsZC5nZXRNb2R1bGVJRCgpOwogICAgICAgICAgICAgICAgICAgICBTdHJpbmdbXSBzcGxpdHRlZCA9IGNoaWxkTW9kdWxlSUQuc3BsaXQoIiMiKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHNwbGl0dGVkLmxlbmd0aCE9MikgewogICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCJVbmtub3duIHN1YiBtb2R1bGUgaWQgIiArIGNoaWxkTW9kdWxlSUQpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvLyBsb29rIGZvciB0aGUgcmlnaHQgbW9kdWxlIGRlc2NyaXB0b3IuLgogICAgICAgICAgICAgICAgICAgICBNb2R1bGVEZXNjcmlwdG9yIG1kID0gYXBwLmdldE1vZHVsZURlc2NyaXB0b3JCeVVyaShzcGxpdHRlZFsxXSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChtZD09bnVsbCkgewpAQCAtMTY4LDEwICsxNjgsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2coIldlYiBtb2R1bGUgIiArIHNwbGl0dGVkWzFdICsgIiBhdmFpbGFibGUgYXQgIiArIGFDaGlsZC5nZXRXZWJVUkwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAvLyBpZiB3ZSBhcmUgaGVyZSwgaXQncyBnb29kICEKLSAgICAgICAgcmV0dXJuIHRydWU7ICAgICAgCi0gICAgfSAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvZGVwbG95bWVudG1hbmFnZXIvZGlzdHJpYnV0ZS9nZXR3ZWJ1cmwvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9kZXBsb3ltZW50bWFuYWdlci9kaXN0cmlidXRlL2dldHdlYnVybC9idWlsZC54bWwKaW5kZXggMDZhY2MwYy4uNjI3ZWJlYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9kZXBsb3ltZW50bWFuYWdlci9kaXN0cmlidXRlL2dldHdlYnVybC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9kZXBsb3ltZW50bWFuYWdlci9kaXN0cmlidXRlL2dldHdlYnVybC9idWlsZC54bWwKQEAgLTIwLDE5ICsyMCwxOSBAQAogCiA8IUVOVElUWSBjb21tb25CdWlsZCBTWVNURU0gIi4vLi4vLi4vLi4vLi4vY29uZmlnL2NvbW1vbi54bWwiPgogXT4KLSAKKwogPHByb2plY3QgbmFtZT0iZ2V0d2VidXJsIiBkZWZhdWx0PSJhbGwiIGJhc2VkaXI9Ii4iPgogCi0gCSZjb21tb25CdWlsZDsKKyAgICAgJmNvbW1vbkJ1aWxkOwogICAgIDxwcm9wZXJ0eSBuYW1lPSJhcmNoaXZlZGlyIiB2YWx1ZT0iJHtidWlsZH0vYXJjaGl2ZXMiLz4KLSAgICAgICAgCi0JPHRhcmdldCBuYW1lPSJjb21waWxlIj4KLSAgICAgICAgICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkfSIgLz4gICAgICAgIAotCQk8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2Vudi5BUFNfSE9NRX0vZGV2dGVzdHMvZGVwbG95bWVudC91dGlsL2J1aWxkIgotCQkJY2xhc3NwYXRoPSIke2luc3R9L2xpYi9qMmVlLmphcjoke2luc3R9L2xpYi9hcHBzZXJ2LXJ0LmphcjouLi8uLi8uLi8uLi91dGlsL2J1aWxkIgotCQkvPgkJCi0JPC90YXJnZXQ+Ci0gICAgICAgIAorCisgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIj4KKyAgICAgICAgICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkfSIgLz4KKyAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtlbnYuQVBTX0hPTUV9L2RldnRlc3RzL2RlcGxveW1lbnQvdXRpbC9idWlsZCIKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtpbnN0fS9saWIvajJlZS5qYXI6JHtpbnN0fS9saWIvYXBwc2Vydi1ydC5qYXI6Li4vLi4vLi4vLi4vdXRpbC9idWlsZCIKKyAgICAgICAgLz4KKyAgICA8L3RhcmdldD4KKwogICAgICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLWVhciIgdW5sZXNzPSJlYXJmaWxlLmJ1aWx0Ij4KICAgICAgICAgICAgIDxlY2hvIG1lc3NhZ2U9ImZpbGUgJHtidWlsZH0vc2F2ZS93c3RvZWpiLmVhciBpcyBwcmVzZW50IDogJHtlYXJmaWxlLmJ1aWx0fSIvPgogICAgICAgICAgICAgPGFudCBkaXI9Ii4uLy4uLy4uL2Vhci93c3RvZWpiIiB0YXJnZXQ9ImFzc2VtYmxlIi8+CkBAIC00MCwyNCArNDAsMjQgQEAKICAgICAgICAgICAgIDxjb3B5IGZpbGU9IiR7YXJjaGl2ZWRpcn0vd3N0b2VqYi5lYXIiIHRvZGlyPSIke2J1aWxkfS8uLi9zYXZlIi8+CiAgICAgICAgICAgICA8Y29weSBmaWxlPSIke2FyY2hpdmVkaXJ9L3BsYW4uamFyIiB0b2Rpcj0iJHtidWlsZH0vLi4vc2F2ZSIvPgogICAgICAgICA8L3RhcmdldD4KLSAgICAgICAgCisKICAgICAgICAgPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iZGVjbGFyZS10ZXN0Ij4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWNsYXJlLXRlc3QiPgogICAgICAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZGVzY3JpcHRpb24iIHZhbHVlPSJqc3I4OC90YXJnZXRtb2R1bGVpZC9EZXBsb3lHZXRXZWJVcmxUZXN0ZXIgdGVzdCBHZXRXZWJVUkwgcmV0dXJuZWQgZnJvbSBkZXBsb3ltZW50Ii8+Ci0gICAgICAgICAgICAgICAgPC9hbnRjYWxsPiAgICAgICAgCisgICAgICAgICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICAgICAgICAgIDxhdmFpbGFibGUgcHJvcGVydHk9ImVhcmZpbGUuYnVpbHQiIGZpbGU9IiR7YnVpbGR9Ly4uL3NhdmUvd3N0b2VqYi5lYXIiLz4KICAgICAgICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhciIvPgotCQk8YW50Y2FsbCB0YXJnZXQ9InNwZWNpYWxpemVkLnJ1bi5qc3I4OCI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic3BlY2lhbGl6ZWQucnVuLmpzcjg4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJkZXBsb3llci5jbGFzcyIgdmFsdWU9ImRldnRlc3RzLmRlcGxveW1lbnQuanNyODgudGFyZ2V0bW9kdWxlaWQuZGVwbG95Z2V0d2VidXJsLkRlcGxveUdldFdlYlVybFRlc3RlciIvPgotCQkJPHBhcmFtIG5hbWU9ImNvbW1hbmQiIHZhbHVlPSJkZXBsb3kiLz4KLQkJCTxwYXJhbSBuYW1lPSJhcmcubGlzdCIgdmFsdWU9InRydWUgJHtidWlsZH0vLi4vc2F2ZS8vd3N0b2VqYi5lYXIgJHtidWlsZH0vLi4vc2F2ZS9wbGFuLmphciIvPgotCQk8L2FudGNhbGw+ICAgICAgICAgIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImNvbW1hbmQiIHZhbHVlPSJkZXBsb3kiLz4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIgdmFsdWU9InRydWUgJHtidWlsZH0vLi4vc2F2ZS8vd3N0b2VqYi5lYXIgJHtidWlsZH0vLi4vc2F2ZS9wbGFuLmphciIvPgorICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwcm9jZXNzUmVzdWx0Ij4KLSAgICAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9InJlc3VsdCIgdmFsdWU9IjAiLz4gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgPC9hbnRjYWxsPiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJyZXN1bHQiIHZhbHVlPSIwIi8+CisgICAgICAgICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tbW9uLnVuZGVwbG95LmFzYWRtaW4iPgogICAgICAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiIHZhbHVlPSJ3c3RvZWpiIi8+CiAgICAgICAgICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8L3RhcmdldD4KLSAgICAgICAgCisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvZGVwbG95bWVudG1hbmFnZXIvZ2V0WE1vZHVsZXMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9kZXBsb3ltZW50bWFuYWdlci9nZXRYTW9kdWxlcy9idWlsZC54bWwKaW5kZXggMGU1YTA3NC4uYzdmNzFjNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9kZXBsb3ltZW50bWFuYWdlci9nZXRYTW9kdWxlcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9kZXBsb3ltZW50bWFuYWdlci9nZXRYTW9kdWxlcy9idWlsZC54bWwKQEAgLTIzLDEyICsyMywxMiBAQAogCiA8cHJvamVjdCBuYW1lPSJnZXRYTW9kdWxlcyIgZGVmYXVsdD0iYWxsIiBiYXNlZGlyPSIuIj4KIAotCSZjb21tb25CdWlsZDsgICAgCisgICAgJmNvbW1vbkJ1aWxkOwogCi0JPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCI+Ci0JCTxhbnQgZGlyPSJjaGlsZHRtaWQiIHRhcmdldD0icHJpdmF0ZS1hbGwiPgotCQkJPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0iLz4KLQkJPC9hbnQ+Ci0JPC90YXJnZXQ+CisgICAgPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCI+CisgICAgICAgIDxhbnQgZGlyPSJjaGlsZHRtaWQiIHRhcmdldD0icHJpdmF0ZS1hbGwiPgorICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0iLz4KKyAgICAgICAgPC9hbnQ+CisgICAgPC90YXJnZXQ+CiAKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvZGVwbG95bWVudG1hbmFnZXIvZ2V0WE1vZHVsZXMvY2hpbGR0bWlkL0NoaWxkVGFyZ2V0TW9kdWxlSURUZXN0ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvZGVwbG95bWVudG1hbmFnZXIvZ2V0WE1vZHVsZXMvY2hpbGR0bWlkL0NoaWxkVGFyZ2V0TW9kdWxlSURUZXN0ZXIuamF2YQppbmRleCAzYWY3YzZhLi41OTUyMjU2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L2RlcGxveW1lbnRtYW5hZ2VyL2dldFhNb2R1bGVzL2NoaWxkdG1pZC9DaGlsZFRhcmdldE1vZHVsZUlEVGVzdGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9kZXBsb3ltZW50bWFuYWdlci9nZXRYTW9kdWxlcy9jaGlsZHRtaWQvQ2hpbGRUYXJnZXRNb2R1bGVJRFRlc3Rlci5qYXZhCkBAIC00MCwxNyArNDAsMTcgQEAKICAqIEBhdXRob3IgSmVyb21lIERvY2hlegogICovCiBwdWJsaWMgY2xhc3MgQ2hpbGRUYXJnZXRNb2R1bGVJRFRlc3RlciBleHRlbmRzIEpTUjg4RGVwbG95ZXIgewotICAgIAorCiAgICAgLyoqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgRGVwbG95VGFyZ2V0TW9kdWxlSURUZXN0ZXIgKi8KLSAgICBwdWJsaWMgQ2hpbGRUYXJnZXRNb2R1bGVJRFRlc3RlcihTdHJpbmcgaG9zdCwgU3RyaW5nIHBvcnQsIFN0cmluZyB1c2VyLCBTdHJpbmcgcGFzc3dvcmQpIHsgICAgICAgCisgICAgcHVibGljIENoaWxkVGFyZ2V0TW9kdWxlSURUZXN0ZXIoU3RyaW5nIGhvc3QsIFN0cmluZyBwb3J0LCBTdHJpbmcgdXNlciwgU3RyaW5nIHBhc3N3b3JkKSB7CiAgICAgICAgIHN1cGVyKGhvc3QsIHBvcnQsIHVzZXIsIHBhc3N3b3JkKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBAcGFyYW0gYXJncyB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cwogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENoaWxkVGFyZ2V0TW9kdWxlSURUZXN0ZXIgZGVwbG95ZXIgPSBnZXREZXBsb3llcihhcmdzKTsKICAgICAgICAgICAgIFRhcmdldE1vZHVsZUlEW10gaWRzID0gZGVwbG95ZXIuZGVwbG95KGFyZ3MpOwpAQCAtNTksMjMgKzU5LDIzIEBACiAgICAgICAgICAgICAgICAgU3lzdGVtLmV4aXQoMCk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGxvZygiVGVzdCBGQUlMRUQiKTsKLSAgICAgICAgICAgICAgICBkZXBsb3llci5kdW1wTW9kdWxlc0lEcygiIiwgaWRzKTsgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZGVwbG95ZXIuZHVtcE1vZHVsZXNJRHMoIiIsIGlkcyk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLmV4aXQoMSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgU3lzdGVtLmV4aXQoMSk7CiAgICAgICAgIH0KLSAgICB9IAotICAgIAotICAgIHByb3RlY3RlZCBzdGF0aWMgQ2hpbGRUYXJnZXRNb2R1bGVJRFRlc3RlciBnZXREZXBsb3llcihTdHJpbmdbXSBhcmdzKSB7Ci0gICAgICAgcmV0dXJuIG5ldyBDaGlsZFRhcmdldE1vZHVsZUlEVGVzdGVyKGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0pOyAgICAgICAgICAgICAgICAKICAgICB9Ci0gICAgCi0gICAgCi0gICAgcHJvdGVjdGVkIFRhcmdldE1vZHVsZUlEW10gZGVwbG95KFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24geyAgICAgICAgCi0gICAgICAgIAorCisgICAgcHJvdGVjdGVkIHN0YXRpYyBDaGlsZFRhcmdldE1vZHVsZUlEVGVzdGVyIGdldERlcGxveWVyKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICByZXR1cm4gbmV3IENoaWxkVGFyZ2V0TW9kdWxlSURUZXN0ZXIoYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSk7CisgICAgfQorCisKKyAgICBwcm90ZWN0ZWQgVGFyZ2V0TW9kdWxlSURbXSBkZXBsb3koU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7CisKICAgICAgICAgRmlsZSBpbnB1dEZpbGUgPSBuZXcgRmlsZShhcmdzWzZdKTsKICAgICAgICAgaWYgKCFpbnB1dEZpbGUuZXhpc3RzKCkpIHsKICAgICAgICAgICAgIGVycm9yKCJGaWxlIG5vdCBmb3VuZCA6ICIgKyBpbnB1dEZpbGUuZ2V0UGF0aCgpKTsKQEAgLTkxLDMyICs5MSwzMiBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBsb2coIkRlcGxveWluZyAiICsgaW5wdXRGaWxlICsgIiBwbGFuOiAiICsgZGVwbG95bWVudEZpbGUpOwogICAgICAgICBQcm9ncmVzc09iamVjdCBwbyA9IGRlcGxveShpbnB1dEZpbGUsIGRlcGxveW1lbnRGaWxlLCBmYWxzZSk7CiAgICAgICAgIHJldHVybiBwby5nZXRSZXN1bHRUYXJnZXRNb2R1bGVJRHMoKTsKLSAgICB9ICAgCi0gICAgCisgICAgfQorCiAgICAgcHJvdGVjdGVkIGJvb2xlYW4gdGVzdChUYXJnZXRNb2R1bGVJRFtdIG1vZHVsZUlEcywgU3RyaW5nIHBhdGgpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24KICAgICB7Ci0gICAgICAgIAorCiAgICAgICAgICAgICAvLyBoYWNrIGZvciBzdGQgbW9kdWxlcwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFRhcmdldE1vZHVsZUlEW10gYVRhcmdldE1vZHVsZUlEcyA9IGZpbmRBcHBsaWNhdGlvbigic2F5aGVsbG8iLCBNb2R1bGVUeXBlLldBUiwgbnVsbCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgZHVtcE1vZHVsZXNJRHMoIndhciIsIGFUYXJnZXRNb2R1bGVJRHMpOwotICAgICAgICAgICAgCisKICAgICAgICAgaWYgKG1vZHVsZUlEcy5sZW5ndGg9PTApIHsKICAgICAgICAgICAgIC8vIGRlcGxveW1lbnQgZmFpbGVkID8KICAgICAgICAgICAgIGxvZygiRGVwbG95bWVudCBmYWlsZWQsIGdvdCB6ZXJvIFRhcmdldE1vZHVsZUlEIik7CiAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAvLyB3ZSBhcmUgbG9hZGluZyB0aGUgZGVwbG95ZWQgZmlsZSBhbmQgY2hlY2tpbmcgdGhhdCB0aGUgbW9kdWxlSURzIGFyZQogICAgICAgICAvLyBjb3JyZWN0CiAgICAgICAgIEFwcGxpY2F0aW9uIGFwcCA9IEFwcGxpY2F0aW9uQXJjaGl2aXN0Lm9wZW5BcmNoaXZlKG5ldyBGaWxlKHBhdGgpKTsKLSAgICAgICAgCisKICAgICAgICAgLy8gY2hlY2sgb2Ygbm9uIHJ1bm5pbmcgbW9kdWxlcwogICAgICAgICBNb2R1bGVUeXBlIG1vZFR5cGU7CiAgICAgICAgIGlmIChhcHAuaXNWaXJ0dWFsKCkpIHsKQEAgLTEyNCw0NCArMTI0LDQ0IEBACiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtb2RUeXBlID0gTW9kdWxlVHlwZS5FQVI7CiAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAvLyBub3cgd2UgbmVlZCB0byBzdGFydCB0aGUgYXBwbGljYXRpb24KICAgICAgICAgZm9yIChpbnQgaT0wO2k8bW9kdWxlSURzLmxlbmd0aDtpKyspIHsKICAgICAgICAgICAgIFRhcmdldE1vZHVsZUlEIGFUYXJnZXRNb2R1bGVJRCA9IG1vZHVsZUlEc1tpXTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyBzaG91bGQgYmUgcGFydCBvZiB0aGUgbm9uIHJ1bm5pbmcKLSAgICAgICAgICAgIFRhcmdldE1vZHVsZUlEW10gdGFyZ2V0TW9kdWxlSURzID0gZmluZEFwcGxpY2F0aW9uKGFUYXJnZXRNb2R1bGVJRC5nZXRNb2R1bGVJRCgpLCAKKyAgICAgICAgICAgIFRhcmdldE1vZHVsZUlEW10gdGFyZ2V0TW9kdWxlSURzID0gZmluZEFwcGxpY2F0aW9uKGFUYXJnZXRNb2R1bGVJRC5nZXRNb2R1bGVJRCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZFR5cGUsIEJvb2xlYW4uRkFMU0UpOwogICAgICAgICAgICAgY2hlY2socGF0aCwgYXBwLCB0YXJnZXRNb2R1bGVJRHMpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8vIHNob3VsZCBiZSBwYXJ0IG9mIHRoZSBhdmFpbGFibGUgYXBwcwotICAgICAgICAgICAgdGFyZ2V0TW9kdWxlSURzID0gZmluZEFwcGxpY2F0aW9uKGFUYXJnZXRNb2R1bGVJRC5nZXRNb2R1bGVJRCgpLCAKKyAgICAgICAgICAgIHRhcmdldE1vZHVsZUlEcyA9IGZpbmRBcHBsaWNhdGlvbihhVGFyZ2V0TW9kdWxlSUQuZ2V0TW9kdWxlSUQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RUeXBlLCBudWxsKTsKICAgICAgICAgICAgIGNoZWNrKHBhdGgsIGFwcCwgdGFyZ2V0TW9kdWxlSURzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyBub3cgd2Ugc3RhcnQgaXQuLgogICAgICAgICAgICAgc3RhcnQoYVRhcmdldE1vZHVsZUlELmdldE1vZHVsZUlEKCkpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8vIHNob3VsZCBiZSBwYXJ0IG9mIHRoZSBydW5uaW5nCi0gICAgICAgICAgICB0YXJnZXRNb2R1bGVJRHMgPSBmaW5kQXBwbGljYXRpb24oYVRhcmdldE1vZHVsZUlELmdldE1vZHVsZUlEKCksIAorICAgICAgICAgICAgdGFyZ2V0TW9kdWxlSURzID0gZmluZEFwcGxpY2F0aW9uKGFUYXJnZXRNb2R1bGVJRC5nZXRNb2R1bGVJRCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZFR5cGUsIEJvb2xlYW4uVFJVRSk7CiAgICAgICAgICAgICBjaGVjayhwYXRoLCBhcHAsIHRhcmdldE1vZHVsZUlEcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgLy8gc2hvdWxkIGJlIHBhcnQgb2YgdGhlIGF2YWlsYWJsZSBhcHBzCi0gICAgICAgICAgICB0YXJnZXRNb2R1bGVJRHMgPSBmaW5kQXBwbGljYXRpb24oYVRhcmdldE1vZHVsZUlELmdldE1vZHVsZUlEKCksIAorICAgICAgICAgICAgdGFyZ2V0TW9kdWxlSURzID0gZmluZEFwcGxpY2F0aW9uKGFUYXJnZXRNb2R1bGVJRC5nZXRNb2R1bGVJRCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZFR5cGUsIG51bGwpOwogICAgICAgICAgICAgY2hlY2socGF0aCwgYXBwLCB0YXJnZXRNb2R1bGVJRHMpOwotICAgICAgICAgICAgCisKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgCi0gICAgfSAKLSAgICAKKworICAgIH0KKwogICAgIHByaXZhdGUgYm9vbGVhbiBjaGVjayhTdHJpbmcgcGF0aCwgQXBwbGljYXRpb24gYXBwLCBUYXJnZXRNb2R1bGVJRFtdIG1vZHVsZUlEcykgewotICAgICAgICAKKwogICAgICAgICBpZiAoYXBwLmlzVmlydHVhbCgpKSB7CiAgICAgICAgICAgICBCdW5kbGVEZXNjcmlwdG9yIGJkID0gYXBwLmdldFN0YW5kYWxvbmVCdW5kbGVEZXNjcmlwdG9yKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgLy8gc3RhbmRhbG9uZSBtb2R1bGUsIHNob3VsZCBiZSBmYXN0LgogICAgICAgICAgICAgaWYgKG1vZHVsZUlEcy5sZW5ndGghPTEpIHsKICAgICAgICAgICAgICAgICAvLyB3cm9uZyBudW1iZXIuLi4KQEAgLTE3MCw0MSArMTcwLDQxIEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZm9yIChpbnQgaT0wO2k8bW9kdWxlSURzLmxlbmd0aDtpKyspIHsgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKGludCBpPTA7aTxtb2R1bGVJRHMubGVuZ3RoO2krKykgewogICAgICAgICAgICAgICAgIFRhcmdldE1vZHVsZUlEIHBhcmVudCA9IG1vZHVsZUlEc1tpXTsKICAgICAgICAgICAgICAgICBUYXJnZXQgdGFyZ2V0ID0gcGFyZW50LmdldFRhcmdldCgpOwogICAgICAgICAgICAgICAgIGxvZygiRGVwbG95ZWQgb24gIiArIHRhcmdldC5nZXROYW1lKCkgKyAiIHdpdGggbW9kdWxlIElEICIgKyBwYXJlbnQuZ2V0TW9kdWxlSUQoKSk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBub3cgbG9vayBhdCBhbGwgdGhlIGNoaWxkcmVuCiAgICAgICAgICAgICAgICAgVGFyZ2V0TW9kdWxlSURbXSBjaGlsZHJlbiA9IHBhcmVudC5nZXRDaGlsZFRhcmdldE1vZHVsZUlEKCk7CiAgICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuPT1udWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIGxvZygiRVJST1IgOiBBcHAgZnJvbSAiICsgcGF0aCArICIgaGFzICIgKyBhcHAuZ2V0QnVuZGxlRGVzY3JpcHRvcnMoKS5zaXplKCkgKwogICAgICAgICAgICAgICAgICAgICAgICAgIiBtb2R1bGVzIGJ1dCBJIGRpZG4ndCBnZXQgYW55IGNoaWxkcmVuIFRhZ2V0TW9kdWxlSUQiKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgIC8vIHNpemUgaXMgY29uc2lzdGVudCA/CiAgICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCE9YXBwLmdldEJ1bmRsZURlc2NyaXB0b3JzKCkuc2l6ZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGxvZygiRVJST1IgOiBBcHAgZnJvbSAiICsgcGF0aCArICIgaGFzICIgKyBhcHAuZ2V0QnVuZGxlRGVzY3JpcHRvcnMoKS5zaXplKCkgKwotICAgICAgICAgICAgICAgICAgICAgICAgIiBtb2R1bGVzIGJ1dCBJIGdvdCBvbmx5ICIgKyBjaGlsZHJlbi5sZW5ndGggKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICIgbW9kdWxlcyBidXQgSSBnb3Qgb25seSAiICsgY2hpbGRyZW4ubGVuZ3RoICsKICAgICAgICAgICAgICAgICAgICAgICAgICIgY2hpbGRyZW4gVGFnZXRNb2R1bGVJRCIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbG9nKCJFeHBlY3RlZCAiICsgYXBwLmdldEJ1bmRsZURlc2NyaXB0b3JzKCkuc2l6ZSgpICsgCisgICAgICAgICAgICAgICAgICAgIGxvZygiRXhwZWN0ZWQgIiArIGFwcC5nZXRCdW5kbGVEZXNjcmlwdG9ycygpLnNpemUoKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAiIGNoaWxkcmVuIFRhcmdldE1vZHVsZUlEcyBhbmQgZ290ICIgKyBjaGlsZHJlbi5sZW5ndGgpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBmb3IgKGludCBqPTA7ajxjaGlsZHJlbi5sZW5ndGg7aisrKSB7CiAgICAgICAgICAgICAgICAgICAgIFRhcmdldE1vZHVsZUlEIGFDaGlsZCA9IGNoaWxkcmVuW2pdOwogICAgICAgICAgICAgICAgICAgICBsb2coIlByb2Nlc3NpbmcgIiArIGFDaGlsZC5nZXRNb2R1bGVJRCgpKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGNoaWxkTW9kdWxlSUQgPSBhQ2hpbGQuZ2V0TW9kdWxlSUQoKTsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nW10gc3BsaXR0ZWQgPSBjaGlsZE1vZHVsZUlELnNwbGl0KCIjIik7CiAgICAgICAgICAgICAgICAgICAgIGlmIChzcGxpdHRlZC5sZW5ndGghPTIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGxvZygiVW5rbm93biBzdWIgbW9kdWxlIGlkICIgKyBjaGlsZE1vZHVsZUlEKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayB0aGF0IHBhcmVudCBUYXJnZVRNb2R1bGVJRCBpcyBjb3JyZWN0CiAgICAgICAgICAgICAgICAgICAgIGlmIChhQ2hpbGQuZ2V0UGFyZW50VGFyZ2V0TW9kdWxlSUQoKS5lcXVhbHMocGFyZW50KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCJDaGlsZCdzIHBhcmVudCBUYXJnZXRNb2R1bGVJRCBpcyBjb3JyZWN0bHkgc2V0Iik7CkBAIC0yMTIsMTQgKzIxMiwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCJDaGlsZCdzIHBhcmVudCBUYXJnZXRNb2R1bGVJRCBpcyBpbmNvcnJlY3QiKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZmlyc3QgPSBzcGxpdHRlZFswXTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0LmVxdWFscyhwYXJlbnQuZ2V0TW9kdWxlSUQoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGxvZygiQ29ycmVjdCBwYXJlbnQgbW9kdWxlIGlkIGZvciBjaGlsZCAiICsgY2hpbGRNb2R1bGVJRCk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBsb2coIkluY29ycmVjdCBwYXJlbnQgbW9kdWxlIGlkIGZvciBjaGlsZCAiICsgY2hpbGRNb2R1bGVJRCk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgLy8gbG9vayBmb3IgdGhlIHJpZ2h0IG1vZHVsZSBkZXNjcmlwdG9yLi4KICAgICAgICAgICAgICAgICAgICAgTW9kdWxlRGVzY3JpcHRvciBtZCA9IGFwcC5nZXRNb2R1bGVEZXNjcmlwdG9yQnlVcmkoc3BsaXR0ZWRbMV0pOwogICAgICAgICAgICAgICAgICAgICBpZiAobWQ9PW51bGwpIHsKQEAgLTIzMSwxMCArMjMxLDEwIEBACiAgICAgICAgICAgICAgICAgICAgIGlmIChtZC5nZXRNb2R1bGVUeXBlKCkuZXF1YWxzKE1vZHVsZVR5cGUuV0FSKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCJXZWIgbW9kdWxlIGRlcGxveWVkIGF0IDogIiArIGFDaGlsZC5nZXRXZWJVUkwoKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAvLyBpZiB3ZSBhcmUgaGVyZSwgaXQncyBnb29kICEKLSAgICAgICAgcmV0dXJuIHRydWU7ICAgICAgCi0gICAgfSAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9kZXBsb3ltZW50bWFuYWdlci9nZXRYTW9kdWxlcy9jaGlsZHRtaWQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9kZXBsb3ltZW50bWFuYWdlci9nZXRYTW9kdWxlcy9jaGlsZHRtaWQvYnVpbGQueG1sCmluZGV4IDAzODRiMGMuLjNlZWYzMTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvZGVwbG95bWVudG1hbmFnZXIvZ2V0WE1vZHVsZXMvY2hpbGR0bWlkL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L2RlcGxveW1lbnRtYW5hZ2VyL2dldFhNb2R1bGVzL2NoaWxkdG1pZC9idWlsZC54bWwKQEAgLTIwLDE5ICsyMCwxOSBAQAogCiA8IUVOVElUWSBjb21tb25CdWlsZCBTWVNURU0gIi4vLi4vLi4vLi4vLi4vY29uZmlnL2NvbW1vbi54bWwiPgogXT4KLSAKKwogPHByb2plY3QgbmFtZT0iZGVwbG95dGFyZ2V0bW9kdWxlaWQiIGRlZmF1bHQ9ImFsbCIgYmFzZWRpcj0iLiI+CiAKLSAJJmNvbW1vbkJ1aWxkOyAgICAgICAgCisgICAgICZjb21tb25CdWlsZDsKICAgICA8cHJvcGVydHkgbmFtZT0iYXJjaGl2ZWRpciIgdmFsdWU9IiR7YnVpbGR9L2FyY2hpdmVzIi8+CiAKLQk8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImluaXQiPgotICAgICAgICAgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGR9IiAvPiAgICAgICAgCi0JCTxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7ZW52LkFQU19IT01FfS9kZXZ0ZXN0cy9kZXBsb3ltZW50L3V0aWwvYnVpbGQiCi0JCQljbGFzc3BhdGg9IiR7aW5zdH0vbGliL2oyZWUuamFyOiR7aW5zdH0vbGliL2FwcHNlcnYtcnQuamFyOi4uLy4uLy4uLy4uL3V0aWwvYnVpbGQiCi0JCS8+CQkKLQk8L3RhcmdldD4KLSAgICAgICAgCisgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJpbml0Ij4KKyAgICAgICAgICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkfSIgLz4KKyAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtlbnYuQVBTX0hPTUV9L2RldnRlc3RzL2RlcGxveW1lbnQvdXRpbC9idWlsZCIKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtpbnN0fS9saWIvajJlZS5qYXI6JHtpbnN0fS9saWIvYXBwc2Vydi1ydC5qYXI6Li4vLi4vLi4vLi4vdXRpbC9idWlsZCIKKyAgICAgICAgLz4KKyAgICA8L3RhcmdldD4KKwogICAgICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLWVhciIgdW5sZXNzPSJlYXJmaWxlLmJ1aWx0Ij4KICAgICAgICAgICAgIDxlY2hvIG1lc3NhZ2U9ImZpbGUgJHtidWlsZH0vc2F2ZS93c3RvZWpiLmVhciBpcyBwcmVzZW50IDogJHtlYXJmaWxlLmJ1aWx0fSIvPgogICAgICAgICAgICAgPGFudCBkaXI9Ii4uLy4uLy4uL2Vhci93c3RvZWpiIiB0YXJnZXQ9ImFzc2VtYmxlIi8+CkBAIC00MCwyNCArNDAsMjQgQEAKICAgICAgICAgICAgIDxjb3B5IGZpbGU9IiR7YXJjaGl2ZWRpcn0vd3N0b2VqYi5lYXIiIHRvZGlyPSIke2J1aWxkfS8uLi9zYXZlIi8+CiAgICAgICAgICAgICA8Y29weSBmaWxlPSIke2FyY2hpdmVkaXJ9L3BsYW4uamFyIiB0b2Rpcj0iJHtidWlsZH0vLi4vc2F2ZSIvPgogICAgICAgICA8L3RhcmdldD4KLSAgICAgICAgCisKICAgICAgICAgPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iZGVjbGFyZS10ZXN0Ij4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWNsYXJlLXRlc3QiPgogICAgICAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZGVzY3JpcHRpb24iIHZhbHVlPSJqc3I4OC9kaXN0cmlidXRlL0NoaWxkVGFyZ2V0TW9kdWxlSUQgdGVzdCBUYXJnZXRNb2R1bGVJRCBhbmQgaXRzIGNoaWxkcmVuIHJldHVybmVkIGZyb20gZGVwbG95bWVudCIvPgotICAgICAgICAgICAgICAgIDwvYW50Y2FsbD4gICAgICAgIAorICAgICAgICAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgICAgICAgICA8YXZhaWxhYmxlIHByb3BlcnR5PSJlYXJmaWxlLmJ1aWx0IiBmaWxlPSIke2FyY2hpdmVkaXJ9L3dzdG9lamIuZWFyIi8+CiAgICAgICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXIiLz4KLQkJPGFudGNhbGwgdGFyZ2V0PSJzcGVjaWFsaXplZC5ydW4uanNyODgiPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InNwZWNpYWxpemVkLnJ1bi5qc3I4OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZGVwbG95ZXIuY2xhc3MiIHZhbHVlPSJqc3I4OC5kZXBsb3ltZW50bWFuYWdlci5nZXRYTW9kdWxlcy5jaGlsZHRtaWQuQ2hpbGRUYXJnZXRNb2R1bGVJRFRlc3RlciIvPgotCQkJPHBhcmFtIG5hbWU9ImNvbW1hbmQiIHZhbHVlPSJkZXBsb3kiLz4KLQkJCTxwYXJhbSBuYW1lPSJhcmcubGlzdCIgdmFsdWU9InRydWUgJHtidWlsZH0vLi4vc2F2ZS93c3RvZWpiLmVhciAke2J1aWxkfS8uLi9zYXZlL3BsYW4uamFyIi8+Ci0JCTwvYW50Y2FsbD4gICAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJjb21tYW5kIiB2YWx1ZT0iZGVwbG95Ii8+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiIHZhbHVlPSJ0cnVlICR7YnVpbGR9Ly4uL3NhdmUvd3N0b2VqYi5lYXIgJHtidWlsZH0vLi4vc2F2ZS9wbGFuLmphciIvPgorICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwcm9jZXNzUmVzdWx0Ij4KLSAgICAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9InJlc3VsdCIgdmFsdWU9IjAiLz4gICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJyZXN1bHQiIHZhbHVlPSIwIi8+CiAgICAgICAgICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tbW9uLnVuZGVwbG95LmFzYWRtaW4iPgogICAgICAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiIHZhbHVlPSJ3c3RvZWpiIi8+Ci0gICAgICAgICAgICAgICAgPC9hbnRjYWxsPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICA8L3RhcmdldD4gICAgICAgCi0gICAgICAgIAorICAgICAgICAgICAgICAgIDwvYW50Y2FsbD4KKyAgICAgICAgPC90YXJnZXQ+CisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvZWFyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvZWFyL2J1aWxkLnhtbAppbmRleCA2MmFiMzA0Li4zNDc5MmU4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L2Vhci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9lYXIvYnVpbGQueG1sCkBAIC0yMywxMiArMjMsMTIgQEAKIAogPHByb2plY3QgbmFtZT0iZWFyIiBkZWZhdWx0PSJhbGwiIGJhc2VkaXI9Ii4iPgogCi0JJmNvbW1vbkJ1aWxkOworICAgICZjb21tb25CdWlsZDsKIAotCTx0YXJnZXQgbmFtZT0icHJpdmF0ZS1hbGwiPgotCQk8YW50IGRpcj0id3N0b2VqYiIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS93c3RvZWpiIi8+Ci0JCTwvYW50PgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0icHJpdmF0ZS1hbGwiPgorICAgICAgICA8YW50IGRpcj0id3N0b2VqYiIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS93c3RvZWpiIi8+CisgICAgICAgIDwvYW50PgorICAgIDwvdGFyZ2V0PgogCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvU2ltcGxlSlNSODhDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9TaW1wbGVKU1I4OENsaWVudC5qYXZhCmluZGV4IGQyOGI5ZjcuLjNmNDkxNjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9TaW1wbGVKU1I4OENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9TaW1wbGVKU1I4OENsaWVudC5qYXZhCkBAIC0xOSw3ICsxOSw3IEBACiAgKgogICpQcm92aWRlcyBhY2Nlc3MgdG8gdGhlIEpTUjg4IEFQSSB0aHJvdWdoIGEgY29udmVuaWVudCBjb21tYW5kIGxpbmUuCiAgKjxwPgotICpUaGlzIGlzIGludGVuZGVkIGZvciBpbnRlcm5hbCB0ZXN0aW5nIHVzZSBvbmx5LiAKKyAqVGhpcyBpcyBpbnRlbmRlZCBmb3IgaW50ZXJuYWwgdGVzdGluZyB1c2Ugb25seS4KICAqCiAgKiBDcmVhdGVkIG9uIEphbnVhcnkgMjEsIDIwMDQsIDExOjIyIEFNCiAgKi8KQEAgLTQ0LDcgKzQ0LDcgQEAKICAqLwogcHVibGljIGNsYXNzIFNpbXBsZUpTUjg4Q2xpZW50IHsKIAotICAgIAorCiAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSjJFRV9ERVBMT1lNRU5UX01BTkFHRVIgPSAiSjJFRS1EZXBsb3ltZW50RmFjdG9yeS1JbXBsZW1lbnRhdGlvbi1DbGFzcyI7CiAKICAgICBwcml2YXRlIERlcGxveW1lbnRGYWN0b3J5IGRlcGxveW1lbnRGYWN0b3J5OwpAQCAtNTIsMTUgKzUyLDE1IEBACiAgICAgcHJpdmF0ZSBEZXBsb3ltZW50TWFuYWdlciBkZXBsb3ltZW50TWFuYWdlcjsKIAogICAgIHByaXZhdGUgU3RyaW5nIGhvc3Q7Ci0gICAgCisKICAgICBwcml2YXRlIFN0cmluZyBwb3J0OwotICAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgdXNlcjsKLSAgICAKKwogICAgIHByaXZhdGUgU3RyaW5nIHBhc3N3b3JkOwotICAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgdXJpOwotICAgIAorCiAgICAgLyoqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgU2ltcGxlSlNSODhDbGllbnQgKi8KICAgICBwdWJsaWMgU2ltcGxlSlNSODhDbGllbnQoU3RyaW5nIGhvc3QsIFN0cmluZyBwb3J0LCBTdHJpbmcgdXNlciwgU3RyaW5nIHBhc3N3b3JkKSB7CiAgICAgICAgIHRoaXMuaG9zdCA9IGhvc3Q7CkBAIC02OSw3ICs2OSw3IEBACiAgICAgICAgIHRoaXMucGFzc3dvcmQgPSBwYXNzd29yZDsKICAgICAgICAgdGhpcy51cmkgPSAiZGVwbG95ZXI6U3VuOkFwcFNlcnZlcjo6IiArIGhvc3QgKyAiOiIgKyBwb3J0OwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEBwYXJhbSBhcmdzIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzCiAgICAgICovCkBAIC03OCwxMCArNzgsMTAgQEAKICAgICAgICAgICpHZXQgcHJvcGVydGllcyBpbmRpY2F0aW5nIHRoZSB1c2VyLCBwYXNzd29yZCwgaG9zdCwgYW5kIHBvcnQuCiAgICAgICAgICAqLwogICAgICAgICBTdHJpbmcgaG9zdCA9IG51bGw7Ci0gICAgICAgIFN0cmluZyBwb3J0ID0gbnVsbDsgCi0gICAgICAgIFN0cmluZyB1c2VyID0gbnVsbDsgCisgICAgICAgIFN0cmluZyBwb3J0ID0gbnVsbDsKKyAgICAgICAgU3RyaW5nIHVzZXIgPSBudWxsOwogICAgICAgICBTdHJpbmcgcGFzc3dvcmQgPSBudWxsOwotICAgICAgICAKKwogICAgICAgICBpZiAoKChob3N0ID0gU3lzdGVtLmdldFByb3BlcnR5KCJqc3I4OGNsaWVudC5ob3N0IikpID09IG51bGwpCiAgICAgICAgICAgICB8fCAoKHBvcnQgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImpzcjg4Y2xpZW50LnBvcnQiKSkgPT0gbnVsbCkKICAgICAgICAgICAgIHx8ICgodXNlciA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgianNyODhjbGllbnQudXNlciIpKSA9PSBudWxsKQpAQCAtODksNyArODksNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgcHJvcGVydGllcyBqc3I4OGNsaWVudC5ob3N0LCBqc3I4OGNsaWVudC5wb3J0LCBqc3I4OGNsaWVudC51c2VyLCBhbmQganNyODhjbGllbnQucGFzc3dvcmQgbXVzdCBiZSBhc3NpZ25lZCIpOwogICAgICAgICAgICAgU3lzdGVtLmV4aXQoLTEpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBuZXcgU2ltcGxlSlNSODhDbGllbnQoaG9zdCwgcG9ydCwgdXNlciwgcGFzc3dvcmQpLnJ1bihhcmdzKTsKICAgICAgICAgICAgIFN5c3RlbS5leGl0KDApOwpAQCAtOTksMTkgKzk5LDE5IEBACiAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHJ1bihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgVGFyZ2V0RXhjZXB0aW9uLCBEZXBsb3ltZW50TWFuYWdlckNyZWF0aW9uRXhjZXB0aW9uIHsKICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09IDApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlNwZWNpZnkgdGhlIEpTUjg4IGNsaWVudCBjb21tYW5kIHlvdSB3YW50IHRvIGV4ZWN1dGUgYXMgdGhlIGZpcnN0IGNvbW1hbmQgbGluZSBwYXJhbWV0ZXIiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAoYXJnc1swXS5lcXVhbHMoImdldEF2YWlsYWJsZUFwcENsaWVudE1vZHVsZXMiKSApewogICAgICAgICAgICAgZ2V0QXZhaWxhYmxlTW9kdWxlcyhNb2R1bGVUeXBlLkNBUik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJVbnJlY29nbml6ZWQgSlNSODggY2xpZW50IGNvbW1hbmQgc3BlY2lmaWVkOiAiICsgYXJnc1swXSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgZ2V0QXZhaWxhYmxlTW9kdWxlcyhNb2R1bGVUeXBlIHR5cGUpIHRocm93cyBUYXJnZXRFeGNlcHRpb24sIERlcGxveW1lbnRNYW5hZ2VyQ3JlYXRpb25FeGNlcHRpb24gewogICAgICAgICBUYXJnZXQgdGFyZ2V0cyBbXSA9IGdldERlcGxveW1lbnRNYW5hZ2VyKCkuZ2V0VGFyZ2V0cygpOwogICAgICAgICBUYXJnZXRNb2R1bGVJRCBbXSBtb2R1bGVJRHMgPSBnZXREZXBsb3ltZW50TWFuYWdlcigpLmdldEF2YWlsYWJsZU1vZHVsZXModHlwZSwgdGFyZ2V0cyk7CkBAIC0xMjEsNyArMTIxLDcgQEAKICAgICAgICAgfQogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIERlcGxveW1lbnRGYWN0b3J5IGxvYWREZXBsb3ltZW50RmFjdG9yeSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb2FkaW5nIGRlcGxveW1lbnQgZmFjdG9yeSIpOwogICAgICAgICBPYmplY3QgZGVwbG95bWVudEZhY3RvcnkgPSBudWxsOwpAQCAtMTQyLDkgKzE0Miw5IEBACiAgICAgICAgICAgICB9IGNhdGNoIChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGNuZmUpIHsKICAgICAgICAgICAgICAgICBjbmZlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5leGl0KC0xKTsKLSAgICAgICAgICAgIH0gICAKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgdHJ5IHsgICAKKyAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgZGVwbG95bWVudEZhY3RvcnkgPSBmYWN0b3J5Lm5ld0luc3RhbmNlKCk7CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gaWUpIHsKICAgICAgICAgICAgICAgICBpZS5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTE1NSw4ICsxNTUsOCBAQAogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeHBlY3RlZCBpbnN0YW5jZSBvZiBEZXBsb3ltZW50RmFjdG9yeSBmcm9tIGNsYXNzIGxvYWRpbmcgb2YgIiArIGNsYXNzTmFtZSArICIgYnV0IGdvdCAiICsgZGVwbG95bWVudEZhY3RvcnkuZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKyAiIGluc3RlYWQiKTsKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmV4aXQoLTEpOwotICAgICAgICAgICAgfSAgCi0gICAgICAgICAgICAKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICAgICAgbG9nKCJGYWlsZWQgdG8gbG9hZCB0aGUgZGVwbG95bWVudCBmYWN0b3J5IHVzaW5nIFVSTCAiICsgZmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSArICIgYW5kIGNsYXNzICIgKyBjbGFzc05hbWUpOwogICAgICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwpAQCAtMTY2LDExICsxNjYsMTEgQEAKICAgICAgICAgICAgIHJldHVybiAoRGVwbG95bWVudEZhY3RvcnkpIGRlcGxveW1lbnRGYWN0b3J5OwogCiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBsb2coU3RyaW5nIG1lc3NhZ2UpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbIiArIGdldEpTUkNsaWVudE5hbWUoKSArICJdOjogIiArIG1lc3NhZ2UpOwogICAgIH0KLSAgICAKKwogICAgIHByb3RlY3RlZCBzdGF0aWMgU3RyaW5nIGdldEpTUkNsaWVudE5hbWUoKSB7CiAgICAgICAgIHJldHVybiAiU2ltcGxlSlNSODhDbGllbnQiOwogICAgIH0KQEAgLTE4MSwxNCArMTgxLDE0IEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRoaXMuZGVwbG95bWVudEZhY3Rvcnk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBEZXBsb3ltZW50TWFuYWdlciBsb2FkRGVwbG95bWVudE1hbmFnZXIoKSB0aHJvd3MgRGVwbG95bWVudE1hbmFnZXJDcmVhdGlvbkV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9hZGluZyBkZXBsb3ltZW50IG1hbmFnZXIgdXNpbmcgdXJpICIgKyB0aGlzLnVyaSArICIgdW5kZXIgdXNlciAiICsgdGhpcy51c2VyKTsKLSAgICAgICAgRGVwbG95bWVudE1hbmFnZXIgYW5zd2VyID0gZ2V0RGVwbG95bWVudEZhY3RvcnkoKS5nZXREZXBsb3ltZW50TWFuYWdlcih0aGlzLnVyaSwgdGhpcy51c2VyLCB0aGlzLnBhc3N3b3JkKTsgCisgICAgICAgIERlcGxveW1lbnRNYW5hZ2VyIGFuc3dlciA9IGdldERlcGxveW1lbnRGYWN0b3J5KCkuZ2V0RGVwbG95bWVudE1hbmFnZXIodGhpcy51cmksIHRoaXMudXNlciwgdGhpcy5wYXNzd29yZCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGVwbG95bWVudCBtYW5hZ2VyIGxvYWRlZC4iKTsKICAgICAgICAgcmV0dXJuIGFuc3dlcjsKICAgICB9Ci0gICAgCisKICAgICBwcm90ZWN0ZWQgRGVwbG95bWVudE1hbmFnZXIgZ2V0RGVwbG95bWVudE1hbmFnZXIoKSB0aHJvd3MgRGVwbG95bWVudE1hbmFnZXJDcmVhdGlvbkV4Y2VwdGlvbiB7CiAgICAgICAgIGlmICh0aGlzLmRlcGxveW1lbnRNYW5hZ2VyID09IG51bGwpIHsKICAgICAgICAgICAgIHRoaXMuZGVwbG95bWVudE1hbmFnZXIgPSBsb2FkRGVwbG95bWVudE1hbmFnZXIoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9UZXN0T3BlbkphckZpbGVXb3JrYXJvdW5kLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvVGVzdE9wZW5KYXJGaWxlV29ya2Fyb3VuZC5qYXZhCmluZGV4IDU3OTJkMWMuLmYyOWRkYzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9UZXN0T3BlbkphckZpbGVXb3JrYXJvdW5kLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL1Rlc3RPcGVuSmFyRmlsZVdvcmthcm91bmQuamF2YQpAQCAtMzMsOSArMzMsOSBAQAogICogQGF1dGhvciAgdGpxdWlubgogICovCiBwdWJsaWMgY2xhc3MgVGVzdE9wZW5KYXJGaWxlV29ya2Fyb3VuZCB7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgaGVyZSA9ICJkZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MiOwotICAgIAorCiAgICAgLyoqCiAgICAgIFZhbHVlcyB0YWtlbiBmcm9tIGNvbW1hbmQtbGluZSBhcmd1bWVudHMKICAgICAgKi8KQEAgLTQ0LDEzICs0NCwxMyBAQAogICAgIHByaXZhdGUgU3RyaW5nIHVzZXIgPSBudWxsOwogICAgIHByaXZhdGUgU3RyaW5nIHBhc3N3b3JkID0gbnVsbDsKICAgICBwcml2YXRlIFN0cmluZyB3YXJGaWxlVG9EZXBsb3kgPSBudWxsOwotICAgIAorCiAgICAgcHJpdmF0ZSBKU1I4OERlcGxveWVyIGRlcGwgPSBudWxsOwotICAgIAorCiAgICAgLyoqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgVGVzdE9wZW5KYXJGaWxlV29ya2Fyb3VuZCAqLwogICAgIHB1YmxpYyBUZXN0T3BlbkphckZpbGVXb3JrYXJvdW5kKCkgewogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBpbml0RGVwbG95ZXIoU3RyaW5nIGhvc3QsIFN0cmluZyBwb3J0LCBTdHJpbmcgdXNlciwgU3RyaW5nIHBhc3N3b3JkKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgbG9nKCJHZXR0aW5nIGFjY2VzcyB0byBKU1I4OCBkZXBsb3llciIpOwogICAgICAgICBkZXBsID0gbmV3IEpTUjg4RGVwbG95ZXIoaG9zdCwgcG9ydCwgdXNlciwgcGFzc3dvcmQpOwpAQCAtNjksNyArNjksNyBAQAogICAgICAgICAgICAgdGVzdC5mYWlsKCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgbG9nKFN0cmluZyBtZXNzYWdlKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1Rlc3RQcm9ncmVzc09iamVjdEltcGxdOjogIiArIG1lc3NhZ2UpOwogICAgIH0KQEAgLTgzLDI3ICs4MywyNyBAQAogICAgICAgICBsb2coIkZBSUxFRDogIiArIGhlcmUpOwogICAgICAgICBTeXN0ZW0uZXhpdCgtMSk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHByZXBhcmVBcmdzKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgNSkgewogICAgICAgICAgICAgbG9nKCJFeHBlY3RlZCA1IGFyZ3VtZW50cyAoaG9zdCwgcG9ydCwgdXNlciwgcGFzc3dvcmQsIHdhcikgYnV0IGZvdW5kICIgKyBhcmdzLmxlbmd0aCk7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgdGhpcy5ob3N0ID0gYXJnc1swXTsKICAgICAgICAgdGhpcy5wb3J0ID0gYXJnc1sxXTsKICAgICAgICAgdGhpcy51c2VyID0gYXJnc1syXTsKICAgICAgICAgdGhpcy5wYXNzd29yZCA9IGFyZ3NbM107CiAgICAgICAgIHRoaXMud2FyRmlsZVRvRGVwbG95ID0gYXJnc1s0XTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBydW4oU3RyaW5nW10gYXJncykgdGhyb3dzIFRocm93YWJsZSB7Ci0gICAgICAgIAorCiAgICAgICAgIC8qCiAgICAgICAgICAqUHJlcGFyZSBpbnN0YW5jZSB2YXJpYWJsZXMgZnJvbSB0aGUgY29tbWFuZC1saW5lIGFyZ3VtZW50cyBmb3IgY29udmVuaWVuY2UuCiAgICAgICAgICAqLwogICAgICAgICBwcmVwYXJlQXJncyhhcmdzKTsKLSAgICAgICAgCisKICAgICAgICAgLyoKICAgICAgICAgICpMb2NhdGUgdGhlIHdlYiBhcmNoaXZlIHRvIGRlcGxveS4KICAgICAgICAgICovCkBAIC0xMTcsMjMgKzExNywyMyBAQAogICAgICAgICAgKkluaXRpYWxpemUgdGhlIGRlcGxveWVyIGZvciB1c2UgZHVyaW5nIHRoZSB0ZXN0LgogICAgICAgICAgKi8KICAgICAgICAgaW5pdERlcGxveWVyKGhvc3QsIHBvcnQsIHVzZXIsIHBhc3N3b3JkKTsKLSAgICAgICAgCisKICAgICAgICAgLyoKICAgICAgICAgICpTdGFydCBieSBkZXBsb3lpbmcgdGhlIHdlYiBhcHAuCiAgICAgICAgICAqLwogICAgICAgICBpbnQgZmlyc3REZXBsb3lSZXN1bHQgPSBkZXBsLmRlcGxveSh3YXJGaWxlLCAvKmRlcGxveW1lbnRQbGFuICovIG51bGwsIC8qIHN0YXJ0QnlEZWZhdWx0ICovIHRydWUpOwotICAgICAgICAKKwogICAgICAgICBpZiAoZmlyc3REZXBsb3lSZXN1bHQgIT0gMCkgewogICAgICAgICAgICAgbG9nKCJGYWlsZWQgdG8gZGVwbG95IHdhciBmaWxlICIgKyB3YXJGaWxlLmdldEFic29sdXRlUGF0aCgpICsgIiB0aGUgZmlyc3QgdGltZS4iKTsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAvKgogICAgICAgICAgKk5leHQsIHVuZGVwbG95IHRoZSBzYW1lIHdlYiBhcHAuCi0gICAgICAgICAqR2V0IHRoZSBsaXN0IG9mIG1vZHVsZXMgYWN0ZWQgdXBvbiBzbyB3ZSBjYW4gc3BlY2lmeSB0aGUgY29ycmVjdCBtb2R1bGUgSUQgdG8gdW5kZXBsb3kuIAorICAgICAgICAgKkdldCB0aGUgbGlzdCBvZiBtb2R1bGVzIGFjdGVkIHVwb24gc28gd2UgY2FuIHNwZWNpZnkgdGhlIGNvcnJlY3QgbW9kdWxlIElEIHRvIHVuZGVwbG95LgogICAgICAgICAgKi8KICAgICAgICAgVGFyZ2V0TW9kdWxlSUQgW10gZmlyc3RMaXN0T2ZBcHBzID0gZGVwbC5nZXRNb3N0UmVjZW50VGFyZ2V0TW9kdWxlSURzKCk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChmaXJzdExpc3RPZkFwcHMubGVuZ3RoICE9IDEpIHsKICAgICAgICAgICAgIGxvZygiRXhwZWN0ZWQgZXhhY3RseSBvbmUgcmVzdWx0IG1vZHVsZSBmcm9tIHRoZSBkZXBsb3llciBidXQgZm91bmQgIiArIGZpcnN0TGlzdE9mQXBwcy5sZW5ndGgpOwogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaXJzdExpc3RPZkFwcHMubGVuZ3RoOyBpKyspIHsKQEAgLTE0MSwyOSArMTQxLDI5IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgIGludCBmaXJzdFVuZGVwbG95UmVzdWx0ID0gZGVwbC51bmRlcGxveShmaXJzdExpc3RPZkFwcHNbMF0uZ2V0TW9kdWxlSUQoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChmaXJzdFVuZGVwbG95UmVzdWx0ICE9IDApIHsKICAgICAgICAgICAgIGxvZygiRXJyb3IgdW5kZXBsb3lpbmcgdGhlIHdlYiBhcHBsaWNhdGlvbiB0aGUgZmlyc3QgdGltZS4iKTsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAvKgogICAgICAgICAgKk5vdywgdHJ5IHRvIGRlcGxveSB0aGUgYXBwIGFnYWluLgogICAgICAgICAgKi8KICAgICAgICAgaW50IHNlY29uZERlcGxveVJlc3VsdCA9IGRlcGwuZGVwbG95KHdhckZpbGUsIC8qZGVwbG95bWVudFBsYW4gKi8gbnVsbCwgLyogc3RhcnRCeURlZmF1bHQgKi8gdHJ1ZSk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChzZWNvbmREZXBsb3lSZXN1bHQgIT0gMCkgewogICAgICAgICAgICAgbG9nKCJGYWlsZWQgdG8gZGVwbG95IHdhciBmaWxlICIgKyB3YXJGaWxlLmdldEFic29sdXRlUGF0aCgpICsgIiB0aGUgc2Vjb25kIHRpbWUuIik7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgLyoKICAgICAgICAgICpVbmRlcGxveSB0aGUgd2ViIGFwcCBvbmUgbGFzdCB0aW1lLgogICAgICAgICAgKi8KICAgICAgICAgVGFyZ2V0TW9kdWxlSUQgW10gc2Vjb25kTGlzdE9mQXBwcyA9IGRlcGwuZ2V0TW9zdFJlY2VudFRhcmdldE1vZHVsZUlEcygpOwotICAgICAgICAKKwogICAgICAgICBpZiAoc2Vjb25kTGlzdE9mQXBwcy5sZW5ndGggIT0gMSkgewogICAgICAgICAgICAgbG9nKCJFeHBlY3RlZCBleGFjdGx5IG9uZSBhcHBsaWNhdGlvbiBmcm9tIHRoZSBkZXBsb3llciBidXQgZm91bmQgIiArIHNlY29uZExpc3RPZkFwcHMubGVuZ3RoKTsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2Vjb25kTGlzdE9mQXBwcy5sZW5ndGg7IGkrKykgewpAQCAtMTcxLDkgKzE3MSw5IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgIGludCBzZWNvbmRVbmRlcGxveVJlc3VsdCA9IGRlcGwudW5kZXBsb3koc2Vjb25kTGlzdE9mQXBwc1swXS5nZXRNb2R1bGVJRCgpKTsKLSAgICAgICAgCisKICAgICAgICAgaWYgKHNlY29uZFVuZGVwbG95UmVzdWx0ICE9IDApIHsKICAgICAgICAgICAgIGxvZygiRXJyb3IgdW5kZXBsb3lpbmcgdGhlIHdlYiBhcHBsaWNhdGlvbiB0aGUgc2Vjb25kIHRpbWUuIik7CiAgICAgICAgICAgICBmYWlsKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvVGVzdFByb2dyZXNzT2JqZWN0SW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL1Rlc3RQcm9ncmVzc09iamVjdEltcGwuamF2YQppbmRleCBlYWM0YjEwLi4yMDE3OGNmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvVGVzdFByb2dyZXNzT2JqZWN0SW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9UZXN0UHJvZ3Jlc3NPYmplY3RJbXBsLmphdmEKQEAgLTM2LDcgKzM2LDcgQEAKIC8qKgogICpNYWtlcyBzdXJlIHRoYXQgdGhlIFByb2dyZXNzT2JqZWN0SW1wbCBjbGFzcyBmdW5jdGlvbnMgY29ycmVjdGx5LgogICo8cD4KLSAqSW4gcGFydGljdWxhciwgYnVnIDQ5Nzc3NjQgcmVwb3J0ZWQgdGhhdCB0aGUgUHJvZ3Jlc3NPYmplY3RJbXBsIGNsYXNzIHdhcyBzdXNjZXB0aWJsZSB0byAKKyAqSW4gcGFydGljdWxhciwgYnVnIDQ5Nzc3NjQgcmVwb3J0ZWQgdGhhdCB0aGUgUHJvZ3Jlc3NPYmplY3RJbXBsIGNsYXNzIHdhcyBzdXNjZXB0aWJsZSB0bwogICpjb25jdXJyZW50IHVwZGF0ZSBmYWlsdXJlcyBpbiB0aGUgdmVjdG9yIHRoYXQgaG9sZHMgcmVnaXN0ZXJlZCBwcm9ncmVzcyBsaXN0ZW5lcnMuICBUaGUKICAqZmlyZVByb2dyZXNzRXZlbnQgbWV0aG9kIHdvcmtlZCB3aXRoIHRoZSB2ZWN0b3Igb2YgbGlzdGVuZXJzIGl0c2VsZiByYXRoZXIgdGhhbiBhIGNsb25lIG9mIHRoZSB2ZWN0b3IuCiAgKk9uZSBvZiB0aGUgbGlzdGVuZXJzIHVucmVnaXN0ZXJlZCBpdHNlbGYgZnJvbSB0aGUgcHJvZ3Jlc3Mgb2JqZWN0LCBzbyB3aGVuIHRoZSBpdGVyYXRvciB0cmllZCB0bwpAQCAtNDgsMjIgKzQ4LDIyIEBACiBwdWJsaWMgY2xhc3MgVGVzdFByb2dyZXNzT2JqZWN0SW1wbCB7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgaGVyZSA9ICJkZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MiOwotICAgIAorCiAgICAgLyoqCiAgICAgICpQcm92aWRlcyBhIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBwcm9ncmVzcyBvYmplY3QgZm9yIHRlc3RpbmcuICBOb3RlIHRoYXQgdGhlIGJlaGF2aW9yIGJlaW5nCiAgICAgICp0ZXN0ZWQgaXMgYWN0dWFsbHkgdGhhdCBvZiB0aGUgc3VwZXJjbGFzcyBQcm9ncmVzc09iamVjdEltcGwuCiAgICAgICovCiAgICAgcHVibGljIGNsYXNzIE15UHJvZ3Jlc3NPYmplY3RJbXBsIGV4dGVuZHMgUHJvZ3Jlc3NPYmplY3RJbXBsIHsKLSAgICAgICAKKwogICAgICAgICBwdWJsaWMgTXlQcm9ncmVzc09iamVjdEltcGwoVGFyZ2V0SW1wbCB0YXJnZXQpIHsKICAgICAgICAgICAgIHN1cGVyKHRhcmdldCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgLyoqCiAgICAgICAgICAqUmVxdWlyZWQgYnkgdGhlIGFic3RyYWN0IGNsYXNzIGRlZmluaXRpb24gYnV0IG5vdCB1c2VkIGR1cmluZyB0ZXN0aW5nLgogICAgICAgICAgKi8KICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkge30KLSAgICAgICAgCisKICAgICAgICAgLyoqCiAgICAgICAgICAqU3RhbmRzIGluIGFzIGFuIG9wZXJhdGlvbiB0aGF0IGZpcmVzIGFuIGV2ZW50IHRvIHJlZ2lzdGVyZWQgbGlzdGVuZXJzLgogICAgICAgICAgKi8KQEAgLTc2LDEzICs3NiwxMyBAQAogICAgICAgICAgICAgZmlyZVByb2dyZXNzRXZlbnQoU3RhdGVUeXBlLkNPTVBMRVRFRCwgImRvbmUiKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqQWRkcyBhIG5ldyBsaXN0ZW5lciBkdXJpbmcgdGhlIGV2ZW50IGhhbmRsaW5nLgogICAgICAqLwogICAgIHB1YmxpYyBjbGFzcyBNZWRkbGluZ0xpc3RlbmVyQWRkZXIgaW1wbGVtZW50cyBQcm9ncmVzc0xpc3RlbmVyIHsKLSAgICAgICAgCi0gICAgCisKKwogICAgICAgICBwdWJsaWMgdm9pZCBoYW5kbGVQcm9ncmVzc0V2ZW50KGphdmF4LmVudGVycHJpc2UuZGVwbG95LnNwaS5zdGF0dXMuUHJvZ3Jlc3NFdmVudCBwcm9ncmVzc0V2ZW50KSB7CiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICpNZWRkbGUgaW4gdGhlIGxpc3RlbmVyIGxpc3QgYnkgYWRkaW5nIGEgbmV3IGxpc3RlbmVyIHRvIHRoZSBsaXN0LiAgVGhpcyBzaG91bGQgdHJpZ2dlciB0aGUgZXJyb3IKQEAgLTkwLDE1ICs5MCwxNSBAQAogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBUZXN0UHJvZ3Jlc3NPYmplY3RJbXBsLnRoaXMudGhlUHJvZ3Jlc3NPYmplY3RJbXBsLmFkZFByb2dyZXNzTGlzdGVuZXIobmV3IFRlc3RQcm9ncmVzc09iamVjdEltcGwuTWVkZGxpbmdMaXN0ZW5lclJlbW92ZXIoKSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKlJlbW92ZXMgaXRzZWxmIGFzIGEgbGlzdGVuZXIgZHVyaW5nIHRoZSBldmVudCBoYW5kbGluZy4KICAgICAgKi8KICAgICBwdWJsaWMgY2xhc3MgTWVkZGxpbmdMaXN0ZW5lclJlbW92ZXIgaW1wbGVtZW50cyBQcm9ncmVzc0xpc3RlbmVyIHsKLSAgICAgICAgCi0gICAgCisKKwogICAgICAgICBwdWJsaWMgdm9pZCBoYW5kbGVQcm9ncmVzc0V2ZW50KGphdmF4LmVudGVycHJpc2UuZGVwbG95LnNwaS5zdGF0dXMuUHJvZ3Jlc3NFdmVudCBwcm9ncmVzc0V2ZW50KSB7CiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICpNZWRkbGUgaW4gdGhlIGxpc3RlbmVyIGxpc3QgYnkgcmVtb3ZpbmcgaXRzZWxmIGZyb20gdGhlIGxpc3QuICBUaGlzIHNob3VsZCB0cmlnZ2VyIHRoZSBlcnJvcgpAQCAtMTA2LDE2ICsxMDYsMTYgQEAKICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgVGVzdFByb2dyZXNzT2JqZWN0SW1wbC50aGlzLnRoZVByb2dyZXNzT2JqZWN0SW1wbC5yZW1vdmVQcm9ncmVzc0xpc3RlbmVyKHRoaXMpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgfQotICAgIAorCiAgICAgLyogTG9jYWwgcHJvZ3Jlc3Mgb2JqZWN0IGltcGxlbWVudGF0aW9uIHRvIGJlIHRlc3RlZC4gKi8KICAgICBwcml2YXRlIE15UHJvZ3Jlc3NPYmplY3RJbXBsIHRoZVByb2dyZXNzT2JqZWN0SW1wbDsKLSAgICAgICAgCisKICAgICAvKiogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBUZXN0UHJvZ3Jlc3NPYmplY3RJbXBsICovCiAgICAgcHVibGljIFRlc3RQcm9ncmVzc09iamVjdEltcGwoKSB7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQHBhcmFtIGFyZ3MgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKICAgICAgKi8KQEAgLTEyOSwxMyArMTI5LDEzIEBACiAgICAgICAgICAgICB0ZXN0LmZhaWwoKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHJ1bihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIGFkZE5ld0xpc3RlbmVyRHVyaW5nRXZlbnRIYW5kbGluZygpOwogICAgIH0KIAogICAgIC8qKgotICAgICAqIFRhbXBlciB3aXRoIHRoZSBsaXN0ZW5lciBsaXN0IGJ5IGFkZGluZyBhIG5ldyBsaXN0ZW5lciBkdXJpbmcgZXZlbnQgaGFuZGxpbmcuICAKKyAgICAgKiBUYW1wZXIgd2l0aCB0aGUgbGlzdGVuZXIgbGlzdCBieSBhZGRpbmcgYSBuZXcgbGlzdGVuZXIgZHVyaW5nIGV2ZW50IGhhbmRsaW5nLgogICAgICAqLwogICAgIHByaXZhdGUgdm9pZCBhZGROZXdMaXN0ZW5lckR1cmluZ0V2ZW50SGFuZGxpbmcoKSB7CiAgICAgICAgIC8qCkBAIC0xNDYsMTcgKzE0NiwxNyBAQAogICAgICAgICB0aGVQcm9ncmVzc09iamVjdEltcGwgPSBuZXcgTXlQcm9ncmVzc09iamVjdEltcGwodGFyZ2V0KTsKICAgICAgICAgVGVzdFByb2dyZXNzT2JqZWN0SW1wbC5NZWRkbGluZ0xpc3RlbmVyQWRkZXIgbWVkZGxpbmdMaXN0ZW5lcjEgPSBuZXcgVGVzdFByb2dyZXNzT2JqZWN0SW1wbC5NZWRkbGluZ0xpc3RlbmVyQWRkZXIoKTsKICAgICAgICAgVGVzdFByb2dyZXNzT2JqZWN0SW1wbC5NZWRkbGluZ0xpc3RlbmVyQWRkZXIgbWVkZGxpbmdMaXN0ZW5lcjIgPSBuZXcgVGVzdFByb2dyZXNzT2JqZWN0SW1wbC5NZWRkbGluZ0xpc3RlbmVyQWRkZXIoKTsKLSAgICAgICAgCisKICAgICAgICAgdGhlUHJvZ3Jlc3NPYmplY3RJbXBsLmFkZFByb2dyZXNzTGlzdGVuZXIobWVkZGxpbmdMaXN0ZW5lcjEpOwogICAgICAgICB0aGVQcm9ncmVzc09iamVjdEltcGwuYWRkUHJvZ3Jlc3NMaXN0ZW5lcihtZWRkbGluZ0xpc3RlbmVyMik7Ci0gICAgICAgIAorCiAgICAgICAgIC8qCiAgICAgICAgICAqRmlyZSBhbiBldmVudCB0aGF0IHdpbGwgY2hhbmdlIHRoZSBsaXN0ZW5lciBzZXQuCiAgICAgICAgICAqLwogICAgICAgICB0aGVQcm9ncmVzc09iamVjdEltcGwuYWN0KCk7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIGxvZyhTdHJpbmcgbWVzc2FnZSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltUZXN0UHJvZ3Jlc3NPYmplY3RJbXBsXTo6ICIgKyBtZXNzYWdlKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2J1aWxkLnhtbAppbmRleCBmYjNkODc4Li5iYmU4M2ZhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9idWlsZC54bWwKQEAgLTI0LDExICsyNCwxMSBAQAogPHByb2plY3QgbmFtZT0ibWlzY2VsbGFuZW91c1Rlc3RGb3JKU1I4OCIgZGVmYXVsdD0idXNhZ2UiIGJhc2VkaXI9Ii4iPgogCiAgICAgJmNvbW1vbkJ1aWxkOwotICAgIAorCiAgICAgPHByb3BlcnR5IG5hbWU9ImFwcENsaWVudE5hbWUiIHZhbHVlPSJhcHBjbGllbnR0ZXN0Ii8+CiAgICAgPHByb3BlcnR5IG5hbWU9ImFwcENsaWVudEphckZpbGUiIHZhbHVlPSIke2J1aWxkfS8ke2FwcENsaWVudE5hbWV9LmphciIvPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJhcHBDbGllbnRNb2R1bGVOYW1lIiB2YWx1ZT0idGVzdEFwcENsaWVudCIvPgotICAgIAorCiAgICAgPHByb3BlcnR5IG5hbWU9IndlYlNlcnZpY2VzV29ya2Fyb3VuZENoZWNrV2FyRmlsZSIgdmFsdWU9ImV4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3Byb3ZpZGVkLXdhcnMvamF4cnBjLWNvZmZlZS1kaXN0cmlidXRvci53YXIiLz4KIAogICAgIDxwYXRoIGlkPSJqc3I4OC5leGVjLmNsYXNzcGF0aCI+CkBAIC00Nyw3ICs0Nyw3IEBACiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iKi5qYXZhIgogICAgICAgICAgICAgICAgZGVidWc9Im9uIgogICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiPgotICAgICAgICAgICAgPGNsYXNzcGF0aD4gCisgICAgICAgICAgICA8Y2xhc3NwYXRoPgogICAgICAgICAgICAgICAgIDxwYXRoIHJlZmlkPSJnZnYzLmNsYXNzcGF0aCIvPgogICAgICAgICAgICAgICAgIDxwYXRoIHJlZmlkPSJ0ZXN0LmNvbXBpbGUuY2xhc3NwYXRoIi8+CiAgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIuLi8uLi91dGlsL2J1aWxkIi8+IDwhLS0gbmVlZCB0aGlzIHRvIGZpbmQgdGhlIEpTUjg4RGVwbG95ZXIgLS0+CkBAIC01Niw3ICs1Niw3IEBACiAgICAgPC90YXJnZXQ+CiAKIDwhLS0KLQlSdW4gYWxsIHRoZSB0ZXN0cy4KKyAgICBSdW4gYWxsIHRoZSB0ZXN0cy4KIC0tPgogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJjb21waWxlLGFzc2VtYmxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5UZXN0UHJvZ3Jlc3NPYmplY3RJbXBsIi8+CkBAIC04Niw3ICs4Niw3IEBACiAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IHBhdGg9IiR7YnVpbGR9Ii8+CiAgICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YVdpdGhSZXN1bHQ+Ci0gICAgICAgIAorCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icHJvY2Vzc1Jlc3VsdCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0icmVzdWx0IiB2YWx1ZT0iJHtyZXN1bHR9Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ibG9nIiB2YWx1ZT0iJHtidWlsZH0vVGVzdFByb2dyZXNzT2JqZWN0SW1wbC5sb2ciLz4KQEAgLTEwOCw3ICsxMDgsNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Jhc2VkaXJ9IiBpbmNsdWRlcz0iKiovYXBwbGljYXRpb24tY2xpZW50LnhtbCAqKi9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogICAgICAgICA8L2phcj4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDwhLS0KICAgICAgICAgVG8gdGVzdCB0aGUgYWJpbGl0eSB0byBnZXQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1vZHVsZXMgdGhyb3VnaCBKU1I4OCwgZmlyc3QgZGVwbG95IGFuIGFwcCBjbGllbnQKICAgICAgICAgKHdoaWNoIGV4cG9zZWQgYSBidWcpLCB0aGVuIHVzZSBKU1I4OCB0byByZXRyaWV2ZSBpbmZvcm1hdGlvbiBhYm91dCBhcHAgY2xpZW50IGNvbXBvbmVudHMsIHRoZW4gdW5kZXBsb3kKQEAgLTEyNSw3ICsxMjUsNyBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbW1vbi5kZXBsb3kuYXNhZG1pbiI+CiAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IiB2YWx1ZT0iLS1uYW1lICR7YXBwQ2xpZW50TW9kdWxlTmFtZX0gJHthcHBDbGllbnRKYXJGaWxlfSIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgICAgIAorCiAgICAgICAgICA8amF2YVdpdGhSZXN1bHQKICAgICAgICAgICAgIGZvcms9InRydWUiCiAgICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiCkBAIC0xNjQsMTQgKzE2NCwxNCBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImxvZyIgdmFsdWU9IiR7YnVpbGR9L0dldE1vZHVsZXNUZXN0LmxvZyIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8IS0tCi0gICAgICAgIFRoaXMgdGVzdCBjaGVja3Mgb24gYSB3b3JrYXJvdW5kIHRoYXQgYXZvaWRzIGEgYnVnIGluIEoyU0UgdGhhdCBvcGVucyBhIGphciBmaWxlIGJ1dCBuZXZlciBjbG9zZXMgaXQuICAKKyAgICAgICAgVGhpcyB0ZXN0IGNoZWNrcyBvbiBhIHdvcmthcm91bmQgdGhhdCBhdm9pZHMgYSBidWcgaW4gSjJTRSB0aGF0IG9wZW5zIGEgamFyIGZpbGUgYnV0IG5ldmVyIGNsb3NlcyBpdC4KICAgICAgICAgVGhpcyBoYXBwZW5zIGR1cmluZyB3ZWIgc2VydmljZXMgY29tcGlsYXRpb24gZHVyaW5nIGRlcGxveW1lbnQgKGluIHNvbWUgY2FzZXMpIGFuZCB0aGUgb3BlbiBqYXIgZmlsZQogICAgICAgICBwcmV2ZW50cyB0aGUgYXBwIHNlcnZlciBmcm9tIGNvbXBsZXRlbHkgdW5kZXBsb3lpbmcgdGhlIGFwcC4gIEEgbGF0ZXIgYXR0ZW1wdCB0byBkZXBsb3kgdGhlIGFwcAogICAgICAgICBhZ2FpbiBmYWlscyBiZWNhdXNlIG9mIHRoZSBvcGVuIGphciBmaWxlLiAgVGhlIGFkbWluaXN0cmF0b3IgbXVzdCBzaHV0IGRvd24gYW5kIHJlc3RhcnQgdGhlIGFwcAogICAgICAgICBzZXJ2ZXIgdG8gY2xlYXIgdGhlIG9wZW4gamFyIGFuZCBwZXJtaXQgdGhlIGxhdGVyIGRlcGxveW1lbnQgdG8gc3VjY2VlZC4KLSAgICAgICAgCisKICAgICAgICAgRGVwbG95bWVudCBoYXMgd29ya2VkIGFyb3VuZCB0aGlzIHByb2JsZW0sIGFuZCB0aGlzIHRlc3QgbWFrZXMgc3VyZSB0aGUgd29ya2Fyb3VuZCBjb250aW51ZXMgdG8gd29yay4KICAgICAtLT4KICAgICA8dGFyZ2V0IG5hbWU9InJ1bk9wZW5KYXJXb3JrYXJvdW5kVGVzdCIgZGVwZW5kcz0iaW5pdCI+CkBAIC0xODAsNyArMTgwLDcgQEAKICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDwhLS0KLSAgICAgICAgICAgIFJ1biB0aGUgdGVzdCBwcm9ncmFtIHRoYXQgZGVwbG95cywgdW5kZXBsb3lzLCBhbmQgZGVwbG95cyBhZ2Fpbi4gIAorICAgICAgICAgICAgUnVuIHRoZSB0ZXN0IHByb2dyYW0gdGhhdCBkZXBsb3lzLCB1bmRlcGxveXMsIGFuZCBkZXBsb3lzIGFnYWluLgogICAgICAgICAtLT4KICAgICAgICAgIDxqYXZhV2l0aFJlc3VsdAogICAgICAgICAgICAgZm9yaz0idHJ1ZSIKQEAgLTIxNiw3ICsyMTYsNyBAQAogICAgICAgICA8L2FudGNhbGw+CiAKICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icHJpdmF0ZS1hbGwiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1biIvPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2NvbW1vbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvY29tbW9uL2J1aWxkLnhtbAppbmRleCBlMjU4MzE2Li44OWRjYmU4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvY29tbW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvY29tbW9uL2J1aWxkLnhtbApAQCAtMTcsMjggKzE3LDI4IEBACiAtLT4KIAogPHByb2plY3QgbmFtZT0iQ29mZmVlIEJyZWFrLCBjb21tb24iIGRlZmF1bHQ9ImJ1aWxkIiBiYXNlZGlyPSIuIj4KLSAgPHRhcmdldCBuYW1lPSJpbml0Ij4gCi0gICAgICA8dHN0YW1wLz4gCi0gIDwvdGFyZ2V0PiAKKyAgPHRhcmdldCBuYW1lPSJpbml0Ij4KKyAgICAgIDx0c3RhbXAvPgorICA8L3RhcmdldD4KIAogICA8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSJidWlsZCIgLz4KICAgPHByb3BlcnR5IG5hbWU9InNyYyIgdmFsdWU9InNyYyIgLz4KLSAKLSAgPHRhcmdldCBuYW1lPSJwcmVwYXJlIiBkZXBlbmRzPSJpbml0IiAKLSAgIAlkZXNjcmlwdGlvbj0iQ3JlYXRlIGJ1aWxkIGRpcmVjdG9yaWVzLiI+IAotICAgIDxta2RpciBkaXI9IiR7YnVpbGR9IiAvPiAKLSAgPC90YXJnZXQ+IAotIAotICA8IS0tIEV4ZWN1dGFibGUgVGFyZ2V0cyAtLT4gCi0gCi0gIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0icHJlcGFyZSIgIAotICAgICBkZXNjcmlwdGlvbj0iQ29tcGlsZSAuamF2YSBmaWxlcy4iID4gCi0gICAgPGphdmFjIAotICAgICAgIHNyY2Rpcj0iJHtzcmN9IiAKLSAgICAgICBkZXN0ZGlyPSIke2J1aWxkfSIgCi0gICAgICAgaW5jbHVkZXM9IioqLyouamF2YSIgCisKKyAgPHRhcmdldCBuYW1lPSJwcmVwYXJlIiBkZXBlbmRzPSJpbml0IgorICAgICAgIGRlc2NyaXB0aW9uPSJDcmVhdGUgYnVpbGQgZGlyZWN0b3JpZXMuIj4KKyAgICA8bWtkaXIgZGlyPSIke2J1aWxkfSIgLz4KKyAgPC90YXJnZXQ+CisKKyAgPCEtLSBFeGVjdXRhYmxlIFRhcmdldHMgLS0+CisKKyAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJwcmVwYXJlIgorICAgICBkZXNjcmlwdGlvbj0iQ29tcGlsZSAuamF2YSBmaWxlcy4iID4KKyAgICA8amF2YWMKKyAgICAgICBzcmNkaXI9IiR7c3JjfSIKKyAgICAgICBkZXN0ZGlyPSIke2J1aWxkfSIKKyAgICAgICBpbmNsdWRlcz0iKiovKi5qYXZhIgogICAgICAvPgotICA8L3RhcmdldD4JICAKKyAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSIKICAgICAgZGVzY3JpcHRpb249IkNvbXBpbGVzIHNvdXJjZS4iPgpAQCAtNDksNSArNDksNSBAQAogICAgIDxkZWxldGUgZGlyPSIke2J1aWxkfSIgLz4KICAgPC90YXJnZXQ+CiAKLTwvcHJvamVjdD4gCi0gCis8L3Byb2plY3Q+CisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9jb21tb24vc3JjL2NvbS9zdW4vY2IvQWRkcmVzc0JlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9jb21tb24vc3JjL2NvbS9zdW4vY2IvQWRkcmVzc0JlYW4uamF2YQppbmRleCBiZTMwNWU3Li5mMDU4N2RkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvY29tbW9uL3NyYy9jb20vc3VuL2NiL0FkZHJlc3NCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2NvbW1vbi9zcmMvY29tL3N1bi9jYi9BZGRyZXNzQmVhbi5qYXZhCkBAIC0yNyw4ICsyNyw4IEBACiAKICAgICBwdWJsaWMgQWRkcmVzc0JlYW4oKSB7IH0KIAotICAgIHB1YmxpYyBBZGRyZXNzQmVhbihTdHJpbmcgc3RyZWV0LCBTdHJpbmcgY2l0eSwgCi0gICAgICAgIFN0cmluZyBzdGF0ZSwgU3RyaW5nIHppcCkgeyAKKyAgICBwdWJsaWMgQWRkcmVzc0JlYW4oU3RyaW5nIHN0cmVldCwgU3RyaW5nIGNpdHksCisgICAgICAgIFN0cmluZyBzdGF0ZSwgU3RyaW5nIHppcCkgewogCiAgICAgICAgIHRoaXMuc3RyZWV0ID0gc3RyZWV0OwogICAgICAgICB0aGlzLmNpdHkgPSBjaXR5OwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2NvbW1vbi9zcmMvY29tL3N1bi9jYi9DdXN0b21lckJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9jb21tb24vc3JjL2NvbS9zdW4vY2IvQ3VzdG9tZXJCZWFuLmphdmEKaW5kZXggYTlmZWI1Ny4uZjA0MmQ1MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2NvbW1vbi9zcmMvY29tL3N1bi9jYi9DdXN0b21lckJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvY29tbW9uL3NyYy9jb20vc3VuL2NiL0N1c3RvbWVyQmVhbi5qYXZhCkBAIC0yNyw4ICsyNyw4IEBACiAKICAgICBwdWJsaWMgQ3VzdG9tZXJCZWFuKCkgeyB9CiAKLSAgICBwdWJsaWMgQ3VzdG9tZXJCZWFuKFN0cmluZyBmaXJzdE5hbWUsIFN0cmluZyBsYXN0TmFtZSwgCi0gICAgICAgIFN0cmluZyBwaG9uZU51bWJlciwgU3RyaW5nIGVtYWlsQWRkcmVzcykgeyAKKyAgICBwdWJsaWMgQ3VzdG9tZXJCZWFuKFN0cmluZyBmaXJzdE5hbWUsIFN0cmluZyBsYXN0TmFtZSwKKyAgICAgICAgU3RyaW5nIHBob25lTnVtYmVyLCBTdHJpbmcgZW1haWxBZGRyZXNzKSB7CiAKICAgICAgICAgdGhpcy5maXJzdE5hbWUgPSBmaXJzdE5hbWU7CiAgICAgICAgIHRoaXMubGFzdE5hbWUgPSBsYXN0TmFtZTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9jb21tb24vc3JjL2NvbS9zdW4vY2IvRGF0ZUhlbHBlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2NvbW1vbi9zcmMvY29tL3N1bi9jYi9EYXRlSGVscGVyLmphdmEKaW5kZXggZDBhMWIyMC4uZWFmNDBiNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2NvbW1vbi9zcmMvY29tL3N1bi9jYi9EYXRlSGVscGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2NvbW1vbi9zcmMvY29tL3N1bi9jYi9EYXRlSGVscGVyLmphdmEKQEAgLTIwNSw3ICsyMDUsNyBAQAogCiAgICBwdWJsaWMgc3RhdGljIERhdGUgY2FsZW5kYXJUb0RhdGUoQ2FsZW5kYXIgY2FsKSB7CiAKLQkgICByZXR1cm4gY2FsLmdldFRpbWUoKTsKKyAgICAgICByZXR1cm4gY2FsLmdldFRpbWUoKTsKIAogICAgfSAvLyBjYWxlbmRhclRvRGF0ZQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvY29tbW9uL3NyYy9jb20vc3VuL2NiL1VSTEhlbHBlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2NvbW1vbi9zcmMvY29tL3N1bi9jYi9VUkxIZWxwZXIuamF2YQppbmRleCA2MmQ5ZDhjLi5kZTM4MWNmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvY29tbW9uL3NyYy9jb20vc3VuL2NiL1VSTEhlbHBlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9jb21tb24vc3JjL2NvbS9zdW4vY2IvVVJMSGVscGVyLmphdmEKQEAgLTE2LDcgKzE2LDcgQEAKIAogcGFja2FnZSBjb20uc3VuLmNiOwogaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLSAKKwogcHVibGljIGZpbmFsIGNsYXNzIFVSTEhlbHBlciB7CiAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRTYWFqVVJMKCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDhjZjI0NDUuLjg1OTlhODcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9qYXhycGMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogIyBUaGlzIGZpbGUgaXMgcmVmZXJlbmNlZCBieSB0aGUgYnVpbGQueG1sIGZpbGUuCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9qYXhycGMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9idWlsZC54bWwKaW5kZXggOTUwNDhhMC4uNjJhMjM2YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9idWlsZC54bWwKQEAgLTQyLDEwICs0MiwxMCBAQAogICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KICAgICA8L2ZpbGVzZXQ+CiAgIDwvcGF0aD4KLSAgCisKICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09IFBSRVBBUkUgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiAKLSAgPHRhcmdldCBuYW1lPSJwcmVwYXJlIiAKKyAgPHRhcmdldCBuYW1lPSJwcmVwYXJlIgogICAgICBkZXNjcmlwdGlvbj0iQ3JlYXRlcyB0aGUgYnVpbGQgYW5kIGRpc3QgZGlyZWN0b3JpZXMiID4KICAgICAgPGVjaG8gbWVzc2FnZT0iQ3JlYXRpbmcgdGhlIHJlcXVpcmVkIGRpcmVjdG9yaWVzLi4uLiIgLz4KICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZH0vY2xpZW50IiAvPgpAQCAtNTMsMTQgKzUzLDE0IEBACiAgICAgIDxta2RpciBkaXI9IiR7YnVpbGR9L3JlZ2lzdHJ5IiAvPgogICAgICA8bWtkaXIgZGlyPSIke2Rpc3R9IiAvPgogICAgPC90YXJnZXQ+Ci0gICAKKwogICAgPHRhcmdldCBuYW1lPSJpbml0Ij4KICAgICAgIDx0c3RhbXAvPgogICAgPC90YXJnZXQ+CiAKIAogIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT0gV1NDT01QSUxFID09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotIAorCiAgPHRhcmdldCBuYW1lPSJzZXQtd3Njb21waWxlIiA+CiAgICAgIDxjb25kaXRpb24gcHJvcGVydHk9IndzY29tcGlsZSIgdmFsdWU9IiR7d3Njb21waWxlLmRpcn0vd3Njb21waWxlLmJhdCI+CiAgICAgICAgIDxvcyBmYW1pbHk9IndpbmRvd3MiLz4KQEAgLTEwMCw4ICsxMDAsOCBAQAogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUtY29tbW9uIiBkZXBlbmRzPSJwcmVwYXJlIgogICAgICAgZGVzY3JpcHRpb249IkNvbXBpbGVzIHRoZSBjb21tb24gYmVhbnMiPgogICAgICAgPGVjaG8gbWVzc2FnZT0iQ29tcGlsaW5nIHRoZSBjb21tb24gYmVhbiBzb3VyY2UgY29kZS4uLi4iLz4KLSAgICAgIDxhbnQgYW50ZmlsZT0iLi4vY29tbW9uL2J1aWxkLnhtbCIgCi0gICAgICAgICAgIGRpcj0iLi4vY29tbW9uIiAKKyAgICAgIDxhbnQgYW50ZmlsZT0iLi4vY29tbW9uL2J1aWxkLnhtbCIKKyAgICAgICAgICAgZGlyPSIuLi9jb21tb24iCiAgICAgICAgICAgIHRhcmdldD0iYnVpbGQiPgogICAgICAgPC9hbnQ+CiAgIDwvdGFyZ2V0PgpAQCAtMTIxLDggKzEyMSw4IEBACiAgICAgICAgICA8L2ZpbGVzZXQ+CiAgICAgIDwvY29weT4KICAgPC90YXJnZXQ+Ci0gCi0gIDx0YXJnZXQgbmFtZT0iY29tcGlsZS1yZWdpc3RyeSIgZGVwZW5kcz0icHJlcGFyZSIgCisKKyAgPHRhcmdldCBuYW1lPSJjb21waWxlLXJlZ2lzdHJ5IiBkZXBlbmRzPSJwcmVwYXJlIgogICAgICAgICBkZXNjcmlwdGlvbj0iQ29tcGlsZXMgdGhlIHJlZ2lzdHJ5IHNvdXJjZSBjb2RlIiAgPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJDb21waWxpbmcgdGhlIHJlZ2lzdHJ5IHNvdXJjZSBjb2RlLi4uLiIvPgogICAgICAgPGphdmFjIHNyY2Rpcj0iJHtyZWdpc3RyeS5zcmN9IiBkZXN0ZGlyPSIke2J1aWxkfS9yZWdpc3RyeSI+CkBAIC0xMzcsMTEgKzEzNywxMSBAQAogICAgICAgPGNsYXNzcGF0aCByZWZpZD0iY29tcGlsZS5jbGFzc3BhdGgiIC8+CiAgICAgICA8Y2xhc3NwYXRoIHBhdGg9IiR7Y29tbW9ufSIgLz4KICAgICAgIDwvamF2YWM+Ci0gICAgICA8Y29weSBmaWxlPSIuLi9jb21tb24vc3JjLyR7cGFja2FnZS5wYXRofS9Db2ZmZWVCcmVhay5wcm9wZXJ0aWVzIiAKKyAgICAgIDxjb3B5IGZpbGU9Ii4uL2NvbW1vbi9zcmMvJHtwYWNrYWdlLnBhdGh9L0NvZmZlZUJyZWFrLnByb3BlcnRpZXMiCiAgICAgICAgIHRvZGlyPSIke2J1aWxkfS9yZWdpc3RyeS8ke3BhY2thZ2UucGF0aH0iIC8+CiAgIDwvdGFyZ2V0PgotICAKLSAgPHRhcmdldCBuYW1lPSJjb21waWxlLWNsaWVudCIgZGVwZW5kcz0icHJlcGFyZSIgCisKKyAgPHRhcmdldCBuYW1lPSJjb21waWxlLWNsaWVudCIgZGVwZW5kcz0icHJlcGFyZSIKICAgICAgICAgIGRlc2NyaXB0aW9uPSJDb21waWxlcyB0aGUgY2xpZW50LXNpZGUgc291cmNlIGNvZGUiICA+CiAgICAgICAgICA8ZWNobyBtZXNzYWdlPSJDb21waWxpbmcgdGhlIGNsaWVudCBzb3VyY2UgY29kZS4uLi4iLz4KICAgICAgICA8amF2YWMgc3JjZGlyPSIke2NsaWVudC5zcmN9IiBkZXN0ZGlyPSIke2J1aWxkfS9jbGllbnQiPgpAQCAtMTQ5LDEyICsxNDksMTIgQEAKICAgICAgICAgICAgPGNsYXNzcGF0aCByZWZpZD0iY29tcGlsZS5jbGFzc3BhdGgiLz4KICAgICAgICA8L2phdmFjPgogICA8L3RhcmdldD4KLSAgCisKICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09IENPUFkgJiBSRU1PVkUgPT09PT09PT09PT09PT09PT09PT09IC0tPgogCiAgIDx0YXJnZXQgbmFtZT0iY29weS1jb21tb24tc2VydmljZSIKICAgICAgZGVzY3JpcHRpb249IkNvcGllcyBjb21tb24gY2xhc3MgZmlsZXMgdG8gYnVpbGQvc2VydmljZQotICAgICAgICBiZWNhdXNlIG11bHRpcGxlIGNsYXNzcGF0aHMgZm9yIGEgd3Njb21waWxlIGNvbW1hbmQgcnVuIAorICAgICAgICBiZWNhdXNlIG11bHRpcGxlIGNsYXNzcGF0aHMgZm9yIGEgd3Njb21waWxlIGNvbW1hbmQgcnVuCiAgICAgICAgIHdpdGhpbiBhbnQgZG8gbm90IHdvcmsuIj4KICAgICAgPGVjaG8gbWVzc2FnZT0iQ29weWluZyBjb21tb24gY2xhc3Nlcy4uLi4iLz4KICAgICAgPGNvcHkgdG9kaXI9IiR7YnVpbGR9L3NlcnZlci8ke3BhY2thZ2UucGF0aH0iPgpAQCAtMTY2LDExICsxNjYsMTEgQEAKICAgICAgICBkZXNjcmlwdGlvbj0iQ29waWVzIGNvbW1vbiBjbGFzcyBmaWxlcyB0byBidWlsZC9jbGllbnQKICAgICAgICBidXQgZG9lc24ndCBjb3B5IGJlYW5zIGJlY2F1c2UgdGhleSBhcmUgY3JlYXRlZCB3LiBnZW5lcmF0ZS1zdHVicy4iPgogICAgICAgIDxlY2hvIG1lc3NhZ2U9IkNvcHlpbmcgY29tbW9uIGNsYXNzZXMuLi4uIi8+Ci0gICAgICAgPGNvcHkgZmlsZT0iLi4vY29tbW9uL2J1aWxkLyR7cGFja2FnZS5wYXRofS9EYXRlSGVscGVyLmNsYXNzIiAKKyAgICAgICA8Y29weSBmaWxlPSIuLi9jb21tb24vYnVpbGQvJHtwYWNrYWdlLnBhdGh9L0RhdGVIZWxwZXIuY2xhc3MiCiAgICAgICAgIHRvZGlyPSIke2J1aWxkfS9jbGllbnQvJHtwYWNrYWdlLnBhdGh9Ii8+Ci0gICAgPC90YXJnZXQ+IAotIAotICAgCisgICAgPC90YXJnZXQ+CisKKwogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PSBQQUNLQUdFID09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogCiAKQEAgLTE4Myw3ICsxODMsNyBAQAogICAgICAgPC9qYXI+CiAgIDwvdGFyZ2V0PgogCi0gIDx0YXJnZXQgbmFtZT0icGFja2FnZS1yZWdpc3RyeSIgCisgIDx0YXJnZXQgbmFtZT0icGFja2FnZS1yZWdpc3RyeSIKICAgICAgIGRlc2NyaXB0aW9uPSJCdWlsZHMgdGhlIEpBUiBmaWxlIHRoYXQgY29udGFpbnMgdGhlIHJlZ2lzdHJ5IHJvdXRpbmVzIj4KICAgICAgIDxlY2hvIG1lc3NhZ2U9IkJ1aWxkaW5nIHRoZSByZWdpc3RyeSBKQVIgZmlsZS4uLi4iLz4KICAgICAgIDxjb3B5IGZpbGU9IiR7cmVnaXN0cnkuc3JjfS9Db2ZmZWVSZWdpc3RyeS5wcm9wZXJ0aWVzIiB0b2Rpcj0iJHtidWlsZH0vcmVnaXN0cnkvJHtwYWNrYWdlLnBhdGh9IiAvPgpAQCAtMTkzLDM5ICsxOTMsMzkgQEAKICAgICAgIDwvamFyPgogICA8L3RhcmdldD4KIAotIAorCiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09IFJVTiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIAotICA8dGFyZ2V0IG5hbWU9InJ1bi10ZXN0LW9yZGVyIiAKKyAgPHRhcmdldCBuYW1lPSJydW4tdGVzdC1vcmRlciIKICAgICAgZGVzY3JpcHRpb249IlJ1bnMgVGVzdE9yZGVyQ2FsbGVyIj4KICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4tdGVzdC1jbGllbnQiPgogICAgICAgIDxwYXJhbSBuYW1lPSJjbGllbnQuY2xhc3MiIHZhbHVlPSJjb20uc3VuLmNiLlRlc3RPcmRlckNhbGxlciIvPgogICAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgogCi0gIDx0YXJnZXQgbmFtZT0icnVuLXRlc3QtcHJpY2UiIAorICA8dGFyZ2V0IG5hbWU9InJ1bi10ZXN0LXByaWNlIgogICAgICBkZXNjcmlwdGlvbj0iUnVucyBUZXN0UHJpY2VGZXRjaGVyIj4KICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4tdGVzdC1jbGllbnQiPgogICAgICAgIDxwYXJhbSBuYW1lPSJjbGllbnQuY2xhc3MiIHZhbHVlPSJjb20uc3VuLmNiLlRlc3RQcmljZUZldGNoZXIiLz4KICAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KIAotICA8dGFyZ2V0IG5hbWU9InJ1bi10ZXN0LWNsaWVudCIgCisgIDx0YXJnZXQgbmFtZT0icnVuLXRlc3QtY2xpZW50IgogICAgICBkZXNjcmlwdGlvbj0iUnVucyBhIHRlc3QgSkFYLVJQQyBjbGllbnQuIj4KLSAgICAgIDxqYXZhIAotICAgICAgICAgICAgZm9yaz0ib24iIAotICAgICAgICAgICAgY2xhc3NwYXRoPSJkaXN0LyR7Y2xpZW50Lmphcn0iIAorICAgICAgPGphdmEKKyAgICAgICAgICAgIGZvcms9Im9uIgorICAgICAgICAgICAgY2xhc3NwYXRoPSJkaXN0LyR7Y2xpZW50Lmphcn0iCiAgICAgICAgICAgICBjbGFzc25hbWU9IiR7Y2xpZW50LmNsYXNzfSIgPgogICAgICAgICAgICA8YXJnIHZhbHVlPSIke2VuZHBvaW50LWFkZHJlc3N9IiAvPgotICAgICAgCQkgPGNsYXNzcGF0aCByZWZpZD0icnVuLmNsYXNzcGF0aCIgLz4KKyAgICAgICAgICAgICAgIDxjbGFzc3BhdGggcmVmaWQ9InJ1bi5jbGFzc3BhdGgiIC8+CiAgICAgICA8L2phdmE+CiAgIDwvdGFyZ2V0PgogCi0gIDx0YXJnZXQgbmFtZT0icnVuLXJlZ2lzdHJ5LXB1Ymxpc2giIAorICA8dGFyZ2V0IG5hbWU9InJ1bi1yZWdpc3RyeS1wdWJsaXNoIgogICAgICBkZXNjcmlwdGlvbj0iUHVibGlzaGVzIGFuIG9yZ2FuaXphdGlvbiBpbiB0aGUgcmVnaXN0cnkgc2VydmVyLiAgTm90ZTogWW91IG11c3Qgc3RhcnQgdGhlIHJlZ2lzdHJ5IHNlcnZlciBiZWZvcmUgZXhlY3V0aW5nIHRoaXMgdGFzay4iID4KICAgICAgPGVjaG8gbWVzc2FnZT0iUnVubmluZyBPcmdQdWJsaXNoZXIuIiAvPgogICAgICA8ZWNobyBtZXNzYWdlPSJOb3RlOiBSZW1lbWJlciB0byBzdGFydCB0aGUgcmVnaXN0cnkgc2VydmVyIGJlZm9yZSBydW5uaW5nIHRoaXMgcHJvZ3JhbS4iIC8+Ci0gICAgPGphdmEgY2xhc3NuYW1lPSJjb20uc3VuLmNiLk9yZ1B1Ymxpc2hlciIgCisgICAgPGphdmEgY2xhc3NuYW1lPSJjb20uc3VuLmNiLk9yZ1B1Ymxpc2hlciIKICAgICAgIGZvcms9InllcyIKICAgICAgIGNsYXNzcGF0aD0iZGlzdC8ke3JlZ2lzdHJ5Lmphcn0iID4KICAgICAgIDxjbGFzc3BhdGggcmVmaWQ9InJ1bi5jbGFzc3BhdGgiIC8+CkBAIC0yMzMsMTEgKzIzMywxMSBAQAogICAgIDwvamF2YT4KICAgPC90YXJnZXQ+CiAKLSAgPHRhcmdldCBuYW1lPSJydW4tcmVnaXN0cnktcmVtb3ZlIiAKKyAgPHRhcmdldCBuYW1lPSJydW4tcmVnaXN0cnktcmVtb3ZlIgogICAgICBkZXNjcmlwdGlvbj0iUmVtb3ZlcyBhbiBvcmdhbml6YXRpb24gZnJvbSB0aGUgcmVnaXN0cnkuIE5vdGU6IFlvdSBtdXN0IHN0YXJ0IHRoZSByZWdpc3RyeSBzZXJ2ZXIgYmVmb3JlIGV4ZWN1dGluZyB0aGlzIHRhc2suIiA+CiAgICAgIDxlY2hvIG1lc3NhZ2U9IlJ1bm5pbmcgT3JnUmVtb3Zlci4iIC8+CiAgICAgIDxlY2hvIG1lc3NhZ2U9Ik5vdGU6IFJlbWVtYmVyIHRvIHN0YXJ0IHRoZSByZWdpc3RyeSBzZXJ2ZXIgYmVmb3JlIHJ1bm5pbmcgdGhpcyBwcm9ncmFtLiIgLz4KLSAgICA8amF2YSBjbGFzc25hbWU9ImNvbS5zdW4uY2IuT3JnUmVtb3ZlciIgCisgICAgPGphdmEgY2xhc3NuYW1lPSJjb20uc3VuLmNiLk9yZ1JlbW92ZXIiCiAgICAgICBmb3JrPSJ5ZXMiCiAgICAgICBjbGFzc3BhdGg9ImRpc3QvJHtyZWdpc3RyeS5qYXJ9OiR7Zm9vfSIgPgogICAgICAgPGNsYXNzcGF0aCByZWZpZD0icnVuLmNsYXNzcGF0aCIgLz4KQEAgLTI0NiwyOSArMjQ2LDI5IEBACiAgIDwvdGFyZ2V0PgogCiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09IEJVSUxEID09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotIAotIAotICAKLSAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtc2VydmljZSIgCisKKworCisgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXNlcnZpY2UiCiAgICAgICAgZGVwZW5kcz0iY29tcGlsZS1zZXJ2aWNlLGNvcHktY29tbW9uLXNlcnZpY2UsZ2VuZXJhdGUtd3NkbCIKICAgICAgICBkZXNjcmlwdGlvbj0iRXhlY3V0ZXMgdGhlIHRhcmdldHMgbmVlZGVkIHRvIGJ1aWxkIHRoZSBzZXJ2aWNlLiI+CiAgICAgPC90YXJnZXQ+Ci0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJidWlsZC1jbGllbnQiIAorCisgICAgPHRhcmdldCBuYW1lPSJidWlsZC1jbGllbnQiCiAgICAgICAgZGVwZW5kcz0iZ2VuZXJhdGUtc3R1YnMsY29weS1jb21tb24tY2xpZW50LGNvbXBpbGUtY2xpZW50LHBhY2thZ2UtY2xpZW50IgogICAgICAgIGRlc2NyaXB0aW9uPSJFeGVjdXRlcyB0aGUgdGFyZ2V0cyBuZWVkZWQgdG8gYnVpbGQgdGhlIGNsaWVudCBmaWxlcy4iPgogICAgIDwvdGFyZ2V0PgotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcmVnaXN0cnkiIAorCisgICAgPHRhcmdldCBuYW1lPSJidWlsZC1yZWdpc3RyeSIKICAgICAgICAgZGVwZW5kcz0iY29tcGlsZS1yZWdpc3RyeSxwYWNrYWdlLXJlZ2lzdHJ5IgogICAgICAgICBkZXNjcmlwdGlvbj0iRXhlY3V0ZXMgdGhlIHRhcmdldHMgbmVlZGVkIHRvIGJ1aWxkIHRoZSByZWdpc3RyeSBKQVIuIj4KICAgICA8L3RhcmdldD4KIAotICAKKwogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PSBVVElMID09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogCiAKLSAgPHRhcmdldCBuYW1lPSJjbGVhbiIgCisgIDx0YXJnZXQgbmFtZT0iY2xlYW4iCiAgICAgIGRlc2NyaXB0aW9uPSJSZW1vdmVzIHRoZSBidWlsZCBhbmQgZGlzdCBkaXJlY3RvcnkiPgogICAgIDxkZWxldGUgZGlyPSIke2J1aWxkfSIgLz4KICAgICA8ZGVsZXRlIGRpcj0iZGlzdCIgLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9qYXhycGMvY29uZi9jbGllbnQtc3RhcnQtd3NkbC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL2NvbmYvY2xpZW50LXN0YXJ0LXdzZGwueG1sCmluZGV4IGQxMzc3OWIuLjc4OTI2ZmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9qYXhycGMvY29uZi9jbGllbnQtc3RhcnQtd3NkbC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9jb25mL2NsaWVudC1zdGFydC13c2RsLnhtbApAQCAtMTgsNyArMTgsNyBAQAogLS0+CiAKIDxjb25maWd1cmF0aW9uCi0gCXhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+CisgICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+CiAgIDx3c2RsIGxvY2F0aW9uPSJodHRwOi8vbG9jYWxob3N0OjgwODAvamF4cnBjLWNvZmZlZS1zdXBwbGllci9qYXhycGM/V1NETCIKICAgICAgICBwYWNrYWdlTmFtZT0iY29tLnN1bi5jYiIvPgogPC9jb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9jb25mL3NlcnZlci1zdGFydC13c2RsLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9qYXhycGMvY29uZi9zZXJ2ZXItc3RhcnQtd3NkbC54bWwKaW5kZXggMzExZmRjNi4uNzg0Mjc5NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9jb25mL3NlcnZlci1zdGFydC13c2RsLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL2NvbmYvc2VydmVyLXN0YXJ0LXdzZGwueG1sCkBAIC0xOCw3ICsxOCw3IEBACiAtLT4KIAogPGNvbmZpZ3VyYXRpb24KLSAJeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheC1ycGMvcmkvY29uZmlnIj4KKyAgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheC1ycGMvcmkvY29uZmlnIj4KICAgPHdzZGwgbG9jYXRpb249ImJ1aWxkL1N1cHBsaWVyLndzZGwiCiAgICAgICAgcGFja2FnZU5hbWU9ImNvbS5zdW4uY2IiLz4KIDwvY29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9qYXhycGMvY29uZi9zdGFydC1pbnRlcmZhY2UueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9jb25mL3N0YXJ0LWludGVyZmFjZS54bWwKaW5kZXggNmMwNDVjOC4uM2MzZDY5MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9jb25mL3N0YXJ0LWludGVyZmFjZS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9jb25mL3N0YXJ0LWludGVyZmFjZS54bWwKQEAgLTE5LDEwICsxOSwxMCBAQAogCiA8Y29uZmlndXJhdGlvbgogICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4LXJwYy9yaS9jb25maWciPgotICA8c2VydmljZSAKLSAgICAgIG5hbWU9IlN1cHBsaWVyIiAKLSAgICAgIHRhcmdldE5hbWVzcGFjZT0idXJuOkZvbyIgCi0gICAgICB0eXBlTmFtZXNwYWNlPSJ1cm46Rm9vIiAKKyAgPHNlcnZpY2UKKyAgICAgIG5hbWU9IlN1cHBsaWVyIgorICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJ1cm46Rm9vIgorICAgICAgdHlwZU5hbWVzcGFjZT0idXJuOkZvbyIKICAgICAgIHBhY2thZ2VOYW1lPSJjb20uc3VuLmNiIj4KICAgICAgIDxpbnRlcmZhY2UgbmFtZT0iY29tLnN1bi5jYi5TdXBwbGllcklGIi8+CiAgICAgICA8dHlwZU1hcHBpbmdSZWdpc3RyeT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9qYXhycGMvY29uZmlnLWludGVyZmFjZS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL2NvbmZpZy1pbnRlcmZhY2UueG1sCmluZGV4IDZjMDQ1YzguLjNjM2Q2OTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9qYXhycGMvY29uZmlnLWludGVyZmFjZS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9jb25maWctaW50ZXJmYWNlLnhtbApAQCAtMTksMTAgKzE5LDEwIEBACiAKIDxjb25maWd1cmF0aW9uCiAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+Ci0gIDxzZXJ2aWNlIAotICAgICAgbmFtZT0iU3VwcGxpZXIiIAotICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJ1cm46Rm9vIiAKLSAgICAgIHR5cGVOYW1lc3BhY2U9InVybjpGb28iIAorICA8c2VydmljZQorICAgICAgbmFtZT0iU3VwcGxpZXIiCisgICAgICB0YXJnZXROYW1lc3BhY2U9InVybjpGb28iCisgICAgICB0eXBlTmFtZXNwYWNlPSJ1cm46Rm9vIgogICAgICAgcGFja2FnZU5hbWU9ImNvbS5zdW4uY2IiPgogICAgICAgPGludGVyZmFjZSBuYW1lPSJjb20uc3VuLmNiLlN1cHBsaWVySUYiLz4KICAgICAgIDx0eXBlTWFwcGluZ1JlZ2lzdHJ5PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9jb25maWctd3NkbC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL2NvbmZpZy13c2RsLnhtbAppbmRleCBkMTM3NzliLi43ODkyNmZjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL2NvbmZpZy13c2RsLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL2NvbmZpZy13c2RsLnhtbApAQCAtMTgsNyArMTgsNyBAQAogLS0+CiAKIDxjb25maWd1cmF0aW9uCi0gCXhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+CisgICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+CiAgIDx3c2RsIGxvY2F0aW9uPSJodHRwOi8vbG9jYWxob3N0OjgwODAvamF4cnBjLWNvZmZlZS1zdXBwbGllci9qYXhycGM/V1NETCIKICAgICAgICBwYWNrYWdlTmFtZT0iY29tLnN1bi5jYiIvPgogPC9jb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9zcmMvY2xpZW50L2NvbS9zdW4vY2IvT3JkZXJDYWxsZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9qYXhycGMvc3JjL2NsaWVudC9jb20vc3VuL2NiL09yZGVyQ2FsbGVyLmphdmEKaW5kZXggMzE5YTdmYy4uYThiMDc3MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9zcmMvY2xpZW50L2NvbS9zdW4vY2IvT3JkZXJDYWxsZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL3NyYy9jbGllbnQvY29tL3N1bi9jYi9PcmRlckNhbGxlci5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiAgICAgcHVibGljIE9yZGVyQ2FsbGVyKFN0cmluZyBlbmRwb2ludCkgewogCiAgICAgICAgIHRyeSB7Ci0JCSAgICBTdHViIHN0dWIgPSAoU3R1YikobmV3IFN1cHBsaWVyX0ltcGwoKS5nZXRTdXBwbGllcklGUG9ydCgpKTsKKyAgICAgICAgICAgIFN0dWIgc3R1YiA9IChTdHViKShuZXcgU3VwcGxpZXJfSW1wbCgpLmdldFN1cHBsaWVySUZQb3J0KCkpOwogICAgICAgICAgICAgLy9zdHViID0gKFN1cHBsaWVySUZfU3R1YikobmV3IFN1cHBsaWVyX0ltcGwoKS5nZXRTdXBwbGllcklGUG9ydCgpKTsKICAgICAgICAgICAgIHN0dWIuX3NldFByb3BlcnR5KAogICAgICAgICAgICAgICAgIGphdmF4LnhtbC5ycGMuU3R1Yi5FTkRQT0lOVF9BRERSRVNTX1BST1BFUlRZLApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9zcmMvY2xpZW50L2NvbS9zdW4vY2IvUHJpY2VGZXRjaGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL3NyYy9jbGllbnQvY29tL3N1bi9jYi9QcmljZUZldGNoZXIuamF2YQppbmRleCBiOTY3ZWRlLi43ZmM3MTEzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL3NyYy9jbGllbnQvY29tL3N1bi9jYi9QcmljZUZldGNoZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL3NyYy9jbGllbnQvY29tL3N1bi9jYi9QcmljZUZldGNoZXIuamF2YQpAQCAtMjEsNyArMjEsNyBAQAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUHJpY2VMaXN0QmVhbiBnZXRQcmljZUxpc3QoU3RyaW5nIGVuZHBvaW50KSB7CiAKICAgICAgICAgUHJpY2VMaXN0QmVhbiByZXN1bHQgPSBudWxsOwotICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBTdXBwbGllcklGX1N0dWIgc3R1YiA9CiAgICAgICAgICAgICAgICAgKFN1cHBsaWVySUZfU3R1YikobmV3IFN1cHBsaWVyX0ltcGwoKS5nZXRTdXBwbGllcklGUG9ydCgpKTsKQEAgLTMyLDkgKzMyLDkgQEAKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotICAgIAorCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICB9IC8vIGdldFByaWNlTGlzdCAgICAKKyAgICB9IC8vIGdldFByaWNlTGlzdAogCiB9IC8vIGNsYXNzCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL3NyYy9jbGllbnQvY29tL3N1bi9jYi9UZXN0T3JkZXJDYWxsZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9qYXhycGMvc3JjL2NsaWVudC9jb20vc3VuL2NiL1Rlc3RPcmRlckNhbGxlci5qYXZhCmluZGV4IGVlZmYzYmUuLmY1NjVkMDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9qYXhycGMvc3JjL2NsaWVudC9jb20vc3VuL2NiL1Rlc3RPcmRlckNhbGxlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9qYXhycGMvc3JjL2NsaWVudC9jb20vc3VuL2NiL1Rlc3RPcmRlckNhbGxlci5qYXZhCkBAIC0zMyw3ICszMyw3IEBACiAgICAgICAgICAgICBMaW5lSXRlbUJlYW4gaXRlbUMgPSBuZXcgTGluZUl0ZW1CZWFuKCJ3YWtldXAgY2FsbCIsIG5ldyBCaWdEZWNpbWFsKCIwLjUiKSwgbmV3IEJpZ0RlY2ltYWwoIjEwLjAwIikpOwogICAgICAgICAgICAgTGluZUl0ZW1CZWFuW10gbGluZUl0ZW1zID0ge2l0ZW1BLCBpdGVtQiwgaXRlbUN9OwogCi0gICAgICAgICAgICBPcmRlckJlYW4gb3JkZXIgPSBuZXcgT3JkZXJCZWFuKGFkZHJlc3MsIGN1c3RvbWVyLCAiMTIzIiwgbGluZUl0ZW1zLCAKKyAgICAgICAgICAgIE9yZGVyQmVhbiBvcmRlciA9IG5ldyBPcmRlckJlYW4oYWRkcmVzcywgY3VzdG9tZXIsICIxMjMiLCBsaW5lSXRlbXMsCiAgICAgICAgICAgICAgICAgbmV3IEJpZ0RlY2ltYWwoIjU1LjY3IikpOwogCiAgICAgICAgICAgICBPcmRlckNhbGxlciBvYyA9IG5ldyBPcmRlckNhbGxlcihhcmdzWzBdKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9qYXhycGMvc3JjL2NsaWVudC9jb20vc3VuL2NiL1Rlc3RQcmljZUZldGNoZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9qYXhycGMvc3JjL2NsaWVudC9jb20vc3VuL2NiL1Rlc3RQcmljZUZldGNoZXIuamF2YQppbmRleCAwMWVkMmFiLi5kNTIzZjU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL3NyYy9jbGllbnQvY29tL3N1bi9jYi9UZXN0UHJpY2VGZXRjaGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9zcmMvY2xpZW50L2NvbS9zdW4vY2IvVGVzdFByaWNlRmV0Y2hlci5qYXZhCkBAIC00MCw1ICs0MCw1IEBACiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLSAgICB9ICAgIAorICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9qYXhycGMvc3JjL3JlZ2lzdHJ5L2NvbS9zdW4vY2IvSkFYUlB1Ymxpc2hlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9zcmMvcmVnaXN0cnkvY29tL3N1bi9jYi9KQVhSUHVibGlzaGVyLmphdmEKaW5kZXggMGRlMzliNi4uYjM5Y2M5YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9zcmMvcmVnaXN0cnkvY29tL3N1bi9jYi9KQVhSUHVibGlzaGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9zcmMvcmVnaXN0cnkvY29tL3N1bi9jYi9KQVhSUHVibGlzaGVyLmphdmEKQEAgLTM5LDggKzM5LDggQEAKICAgICAvKioKICAgICAgKiBFc3RhYmxpc2hlcyBhIGNvbm5lY3Rpb24gdG8gYSByZWdpc3RyeS4KICAgICAgKgotICAgICAqIEBwYXJhbSBxdWVyeVVybAl0aGUgVVJMIG9mIHRoZSBxdWVyeSByZWdpc3RyeQotICAgICAqIEBwYXJhbSBwdWJsaXNoVXJsCXRoZSBVUkwgb2YgdGhlIHB1Ymxpc2ggcmVnaXN0cnkKKyAgICAgKiBAcGFyYW0gcXVlcnlVcmwgICAgdGhlIFVSTCBvZiB0aGUgcXVlcnkgcmVnaXN0cnkKKyAgICAgKiBAcGFyYW0gcHVibGlzaFVybCAgICB0aGUgVVJMIG9mIHRoZSBwdWJsaXNoIHJlZ2lzdHJ5CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgbWFrZUNvbm5lY3Rpb24oU3RyaW5nIHF1ZXJ5VXJsLAogICAgICAgICBTdHJpbmcgcHVibGlzaFVybCkgewpAQCAtNjMsNyArNjMsNyBAQAogICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSBjb25uZWN0aW9uLCBwYXNzaW5nIGl0IHRoZQogICAgICAgICAgICAgLy8gY29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzCiAgICAgICAgICAgICBjb250ZXh0ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgICAgICBmYWN0b3J5ID0gKENvbm5lY3Rpb25GYWN0b3J5KSAKKyAgICAgICAgICAgIGZhY3RvcnkgPSAoQ29ubmVjdGlvbkZhY3RvcnkpCiAgICAgICAgICAgICAgICAgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWlzL0pBWFIiKTsKICAgICAgICAgICAgIGZhY3Rvcnkuc2V0UHJvcGVydGllcyhwcm9wcyk7CiAgICAgICAgICAgICBjb25uZWN0aW9uID0gZmFjdG9yeS5jcmVhdGVDb25uZWN0aW9uKCk7CkBAIC0xNzEsNyArMTcxLDcgQEAKICAgICAgICAgICAgIGlzID0gYmxjbS5jcmVhdGVJbnRlcm5hdGlvbmFsU3RyaW5nCiAgICAgICAgICAgICAgICAgKGJ1bmRsZS5nZXRTdHJpbmcoInNlcnZpY2UuYmluZGluZyIpKTsKICAgICAgICAgICAgIGJpbmRpbmcuc2V0RGVzY3JpcHRpb24oaXMpOwotIAkJCQkJICBiaW5kaW5nLnNldFZhbGlkYXRlVVJJKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgYmluZGluZy5zZXRWYWxpZGF0ZVVSSShmYWxzZSk7CiAgICAgICAgICAgICBiaW5kaW5nLnNldEFjY2Vzc1VSSShlbmRwb2ludCk7CiAgICAgICAgICAgICBzZXJ2aWNlQmluZGluZ3MuYWRkKGJpbmRpbmcpOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL3NyYy9yZWdpc3RyeS9jb20vc3VuL2NiL0pBWFJSZW1vdmVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL3NyYy9yZWdpc3RyeS9jb20vc3VuL2NiL0pBWFJSZW1vdmVyLmphdmEKaW5kZXggZjE0MTg0ZC4uOTQwZTAxMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9zcmMvcmVnaXN0cnkvY29tL3N1bi9jYi9KQVhSUmVtb3Zlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9qYXhycGMvc3JjL3JlZ2lzdHJ5L2NvbS9zdW4vY2IvSkFYUlJlbW92ZXIuamF2YQpAQCAtMTYsOCArMTYsOCBAQAogCiBwYWNrYWdlIGNvbS5zdW4uY2I7CiAKLWltcG9ydCBqYXZheC54bWwucmVnaXN0cnkuKjsgCi1pbXBvcnQgamF2YXgueG1sLnJlZ2lzdHJ5LmluZm9tb2RlbC4qOyAKK2ltcG9ydCBqYXZheC54bWwucmVnaXN0cnkuKjsKK2ltcG9ydCBqYXZheC54bWwucmVnaXN0cnkuaW5mb21vZGVsLio7CiBpbXBvcnQgamF2YS5uZXQuKjsKIGltcG9ydCBqYXZhLnNlY3VyaXR5Lio7CiBpbXBvcnQgamF2YS51dGlsLio7CkBAIC0yNSw4ICsyNSw4IEBACiAKIC8qKgogICogVGhlIEpBWFJSZW1vdmVyIGNsYXNzIGNvbnNpc3RzIG9mIGEgbWFrZUNvbm5lY3Rpb24gbWV0aG9kLAotICogYSBjcmVhdGVPcmdLZXkgbWV0aG9kLCBhbmQgYW4gZXhlY3V0ZVJlbW92ZSBtZXRob2QuIEl0IAotICogZmluZHMgYW5kIGRlbGV0ZXMgdGhlIG9yZ2FuaXphdGlvbiB0aGF0IHRoZSBPcmdQdWJsaXNoZXIgCisgKiBhIGNyZWF0ZU9yZ0tleSBtZXRob2QsIGFuZCBhbiBleGVjdXRlUmVtb3ZlIG1ldGhvZC4gSXQKKyAqIGZpbmRzIGFuZCBkZWxldGVzIHRoZSBvcmdhbml6YXRpb24gdGhhdCB0aGUgT3JnUHVibGlzaGVyCiAgKiBjbGFzcyBjcmVhdGVkLgogICovCiBwdWJsaWMgY2xhc3MgSkFYUlJlbW92ZXIgewpAQCAtMzUsMzQgKzM1LDM0IEBACiAgICAgUmVnaXN0cnlTZXJ2aWNlIHJzID0gbnVsbDsKIAogICAgIHB1YmxpYyBKQVhSUmVtb3ZlcigpIHt9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBFc3RhYmxpc2hlcyBhIGNvbm5lY3Rpb24gdG8gYSByZWdpc3RyeS4KICAgICAgKgotICAgICAqIEBwYXJhbSBxdWVyeVVybAl0aGUgVVJMIG9mIHRoZSBxdWVyeSByZWdpc3RyeQotICAgICAqIEBwYXJhbSBwdWJsaXNoVXJsCXRoZSBVUkwgb2YgdGhlIHB1Ymxpc2ggcmVnaXN0cnkKKyAgICAgKiBAcGFyYW0gcXVlcnlVcmwgICAgdGhlIFVSTCBvZiB0aGUgcXVlcnkgcmVnaXN0cnkKKyAgICAgKiBAcGFyYW0gcHVibGlzaFVybCAgICB0aGUgVVJMIG9mIHRoZSBwdWJsaXNoIHJlZ2lzdHJ5CiAgICAgICovCi0gICAgcHVibGljIHZvaWQgbWFrZUNvbm5lY3Rpb24oU3RyaW5nIHF1ZXJ5VXJsLCAKKyAgICBwdWJsaWMgdm9pZCBtYWtlQ29ubmVjdGlvbihTdHJpbmcgcXVlcnlVcmwsCiAgICAgICAgIFN0cmluZyBwdWJsaXNoVXJsKSB7CiAKICAgICAgICAgQ29udGV4dCAgICAgICAgICAgY29udGV4dCA9IG51bGw7CiAgICAgICAgIENvbm5lY3Rpb25GYWN0b3J5IGZhY3RvcnkgPSBudWxsOwogICAgICAgICAvKgotICAgICAgICAgKiBEZWZpbmUgY29ubmVjdGlvbiBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMuIAotICAgICAgICAgKiBUbyBkZWxldGUsIHlvdSBuZWVkIGJvdGggdGhlIHF1ZXJ5IFVSTCBhbmQgdGhlIAorICAgICAgICAgKiBEZWZpbmUgY29ubmVjdGlvbiBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMuCisgICAgICAgICAqIFRvIGRlbGV0ZSwgeW91IG5lZWQgYm90aCB0aGUgcXVlcnkgVVJMIGFuZCB0aGUKICAgICAgICAgICogcHVibGlzaCBVUkwuCiAgICAgICAgICAqLwogICAgICAgICBQcm9wZXJ0aWVzIHByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKICAgICAgICAgcHJvcHMuc2V0UHJvcGVydHkoImphdmF4LnhtbC5yZWdpc3RyeS5xdWVyeU1hbmFnZXJVUkwiLAogICAgICAgICAgICAgcXVlcnlVcmwpOwotICAgICAgICBwcm9wcy5zZXRQcm9wZXJ0eSgiamF2YXgueG1sLnJlZ2lzdHJ5LmxpZmVDeWNsZU1hbmFnZXJVUkwiLCAKKyAgICAgICAgcHJvcHMuc2V0UHJvcGVydHkoImphdmF4LnhtbC5yZWdpc3RyeS5saWZlQ3ljbGVNYW5hZ2VyVVJMIiwKICAgICAgICAgICAgIHB1Ymxpc2hVcmwpOwogCiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAvLyBDcmVhdGUgdGhlIGNvbm5lY3Rpb24sIHBhc3NpbmcgaXQgdGhlIAorICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSBjb25uZWN0aW9uLCBwYXNzaW5nIGl0IHRoZQogICAgICAgICAgICAgLy8gY29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzCiAgICAgICAgICAgICBjb250ZXh0ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgICAgICBmYWN0b3J5ID0gKENvbm5lY3Rpb25GYWN0b3J5KSAKKyAgICAgICAgICAgIGZhY3RvcnkgPSAoQ29ubmVjdGlvbkZhY3RvcnkpCiAgICAgICAgICAgICAgICAgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWlzL0pBWFIiKTsKICAgICAgICAgICAgIGZhY3Rvcnkuc2V0UHJvcGVydGllcyhwcm9wcyk7CiAgICAgICAgICAgICBjb25uZWN0aW9uID0gZmFjdG9yeS5jcmVhdGVDb25uZWN0aW9uKCk7CkBAIC04Miw5ICs4Miw5IEBACiAgICAgICogcHJvZ3JhbSwgdmVyaWZ5aW5nIGl0IGJ5IGNoZWNraW5nIHRoYXQgdGhlIGtleSBzdHJpbmdzCiAgICAgICogbWF0Y2guCiAgICAgICoKLSAgICAgKiBAcGFyYW0ga2V5U3RyCXRoZSBrZXkgb2YgdGhlIHB1Ymxpc2hlZCBvcmdhbml6YXRpb24KKyAgICAgKiBAcGFyYW0ga2V5U3RyICAgIHRoZSBrZXkgb2YgdGhlIHB1Ymxpc2hlZCBvcmdhbml6YXRpb24KICAgICAgKgotICAgICAqIEByZXR1cm4JdGhlIGtleSBvZiB0aGUgb3JnYW5pemF0aW9uIGZvdW5kCisgICAgICogQHJldHVybiAgICB0aGUga2V5IG9mIHRoZSBvcmdhbml6YXRpb24gZm91bmQKICAgICAgKi8KICAgICBwdWJsaWMgamF2YXgueG1sLnJlZ2lzdHJ5LmluZm9tb2RlbC5LZXkgY3JlYXRlT3JnS2V5KFN0cmluZyBrZXlTdHIpIHsKIApAQCAtOTYsNyArOTYsNyBAQAogICAgICAgICAgICAgYmxjbSA9IHJzLmdldEJ1c2luZXNzTGlmZUN5Y2xlTWFuYWdlcigpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgcmVnaXN0cnkgc2VydmljZSBhbmQgIiArCiAgICAgICAgICAgICAgICAgImxpZmUgY3ljbGUgbWFuYWdlciIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIG9yZ0tleSA9IGJsY20uY3JlYXRlS2V5KGtleVN0cik7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwpAQCAtMTE0LDE5ICsxMTQsMTkgQEAKICAgICAvKioKICAgICAgKiBSZW1vdmVzIHRoZSBvcmdhbml6YXRpb24gd2l0aCB0aGUgc3BlY2lmaWVkIGtleSB2YWx1ZS4KICAgICAgKgotICAgICAqIEBwYXJhbSBrZXkJdGhlIEtleSBvZiB0aGUgb3JnYW5pemF0aW9uCisgICAgICogQHBhcmFtIGtleSAgICB0aGUgS2V5IG9mIHRoZSBvcmdhbml6YXRpb24KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBleGVjdXRlUmVtb3ZlKGphdmF4LnhtbC5yZWdpc3RyeS5pbmZvbW9kZWwuS2V5IGtleSwKICAgICAgICAgU3RyaW5nIHVzZXJuYW1lLCBTdHJpbmcgcGFzc3dvcmQpIHsKIAogICAgICAgICBCdXNpbmVzc0xpZmVDeWNsZU1hbmFnZXIgYmxjbSA9IG51bGw7Ci0gICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGJsY20gPSBycy5nZXRCdXNpbmVzc0xpZmVDeWNsZU1hbmFnZXIoKTsKIAogICAgICAgICAgICAgLy8gR2V0IGF1dGhvcml6YXRpb24gZnJvbSB0aGUgcmVnaXN0cnkKICAgICAgICAgICAgIFBhc3N3b3JkQXV0aGVudGljYXRpb24gcGFzc3dkQXV0aCA9Ci0gICAgICAgICAgICAgICAgbmV3IFBhc3N3b3JkQXV0aGVudGljYXRpb24odXNlcm5hbWUsIAorICAgICAgICAgICAgICAgIG5ldyBQYXNzd29yZEF1dGhlbnRpY2F0aW9uKHVzZXJuYW1lLAogICAgICAgICAgICAgICAgICAgICBwYXNzd29yZC50b0NoYXJBcnJheSgpKTsKIAogICAgICAgICAgICAgU2V0IGNyZWRzID0gbmV3IEhhc2hTZXQoKTsKQEAgLTE1NSw3ICsxNTUsNyBAQAogICAgICAgICAgICAgICAgIEV4Y2VwdGlvbiBleGNlcHRpb24gPSBudWxsOwogICAgICAgICAgICAgICAgIHdoaWxlIChleGNJdGVyLmhhc05leHQoKSkgewogICAgICAgICAgICAgICAgICAgICBleGNlcHRpb24gPSAoRXhjZXB0aW9uKSBleGNJdGVyLm5leHQoKTsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJFeGNlcHRpb24gb24gZGVsZXRlOiAiICsgCisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRXhjZXB0aW9uIG9uIGRlbGV0ZTogIiArCiAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbi50b1N0cmluZygpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL3NyYy9yZWdpc3RyeS9jb20vc3VuL2NiL09yZ1B1Ymxpc2hlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9zcmMvcmVnaXN0cnkvY29tL3N1bi9jYi9PcmdQdWJsaXNoZXIuamF2YQppbmRleCBmNGU0OWIwLi4xMDI0ZmQxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL3NyYy9yZWdpc3RyeS9jb20vc3VuL2NiL09yZ1B1Ymxpc2hlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9qYXhycGMvc3JjL3JlZ2lzdHJ5L2NvbS9zdW4vY2IvT3JnUHVibGlzaGVyLmphdmEKQEAgLTE2LDcgKzE2LDcgQEAKIAogcGFja2FnZSBjb20uc3VuLmNiOwogCi1pbXBvcnQgamF2YXgueG1sLnJlZ2lzdHJ5Lio7IAoraW1wb3J0IGphdmF4LnhtbC5yZWdpc3RyeS4qOwogaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKIGltcG9ydCBqYXZhLmlvLio7CiAKQEAgLTMxLDE1ICszMSwxNSBAQAogICAgICAgICBSZXNvdXJjZUJ1bmRsZSByZWdpc3RyeUJ1bmRsZSA9CiAgICAgICAgICAgIFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZSgiY29tLnN1bi5jYi5Db2ZmZWVSZWdpc3RyeSIpOwogCi0gICAgICAgIFN0cmluZyB1c2VybmFtZSA9IAorICAgICAgICBTdHJpbmcgdXNlcm5hbWUgPQogICAgICAgICAgICAgcmVnaXN0cnlCdW5kbGUuZ2V0U3RyaW5nKCJyZWdpc3RyeS51c2VybmFtZSIpOwotICAgICAgICBTdHJpbmcgcGFzc3dvcmQgPSAKKyAgICAgICAgU3RyaW5nIHBhc3N3b3JkID0KICAgICAgICAgICAgIHJlZ2lzdHJ5QnVuZGxlLmdldFN0cmluZygicmVnaXN0cnkucGFzc3dvcmQiKTsKICAgICAgICAgU3RyaW5nIGtleUZpbGUgPSByZWdpc3RyeUJ1bmRsZS5nZXRTdHJpbmcoImtleS5maWxlIik7CiAKICAgICAgICAgSkFYUlB1Ymxpc2hlciBwdWJsaXNoZXIgPSBuZXcgSkFYUlB1Ymxpc2hlcigpOwogICAgICAgICBwdWJsaXNoZXIubWFrZUNvbm5lY3Rpb24ocXVlcnlVUkwsIHB1Ymxpc2hVUkwpOwotICAgICAgICBTdHJpbmcga2V5ID0gcHVibGlzaGVyLmV4ZWN1dGVQdWJsaXNoKHVzZXJuYW1lLCAKKyAgICAgICAgU3RyaW5nIGtleSA9IHB1Ymxpc2hlci5leGVjdXRlUHVibGlzaCh1c2VybmFtZSwKICAgICAgICAgICAgIHBhc3N3b3JkLCBlbmRwb2ludCk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBGaWxlV3JpdGVyIG91dCA9IG5ldyBGaWxlV3JpdGVyKGtleUZpbGUpOwpAQCAtNTAsNSArNTAsNSBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9qYXhycGMvc3JjL3JlZ2lzdHJ5L2NvbS9zdW4vY2IvT3JnUmVtb3Zlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9zcmMvcmVnaXN0cnkvY29tL3N1bi9jYi9PcmdSZW1vdmVyLmphdmEKaW5kZXggMGUwNjY0Zi4uZmJkODc3MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9zcmMvcmVnaXN0cnkvY29tL3N1bi9jYi9PcmdSZW1vdmVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9zcmMvcmVnaXN0cnkvY29tL3N1bi9jYi9PcmdSZW1vdmVyLmphdmEKQEAgLTE3LDcgKzE3LDcgQEAKIHBhY2thZ2UgY29tLnN1bi5jYjsKIAogaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLWltcG9ydCBqYXZheC54bWwucmVnaXN0cnkuKjsgCitpbXBvcnQgamF2YXgueG1sLnJlZ2lzdHJ5Lio7CiBpbXBvcnQgamF2YXgueG1sLnJlZ2lzdHJ5LmluZm9tb2RlbC5LZXk7CiBpbXBvcnQgamF2YS5pby4qOwogCkBAIC0zNSw5ICszNSw5IEBACiAgICAgICAgIFJlc291cmNlQnVuZGxlIHJlZ2lzdHJ5QnVuZGxlID0KICAgICAgICAgICAgIFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZSgiY29tLnN1bi5jYi5Db2ZmZWVSZWdpc3RyeSIpOwogCi0gICAgICAgIFN0cmluZyB1c2VybmFtZSA9IAorICAgICAgICBTdHJpbmcgdXNlcm5hbWUgPQogICAgICAgICAgICAgcmVnaXN0cnlCdW5kbGUuZ2V0U3RyaW5nKCJyZWdpc3RyeS51c2VybmFtZSIpOwotICAgICAgICBTdHJpbmcgcGFzc3dvcmQgPSAKKyAgICAgICAgU3RyaW5nIHBhc3N3b3JkID0KICAgICAgICAgICAgIHJlZ2lzdHJ5QnVuZGxlLmdldFN0cmluZygicmVnaXN0cnkucGFzc3dvcmQiKTsKICAgICAgICAgU3RyaW5nIGtleUZpbGUgPSByZWdpc3RyeUJ1bmRsZS5nZXRTdHJpbmcoImtleS5maWxlIik7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9qYXhycGMvc3JjL3NlcnZlci9jb20vc3VuL2NiL0NvbnRleHRMaXN0ZW5lci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9zcmMvc2VydmVyL2NvbS9zdW4vY2IvQ29udGV4dExpc3RlbmVyLmphdmEKaW5kZXggMzcxZWU0My4uNmJmY2JlOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9zcmMvc2VydmVyL2NvbS9zdW4vY2IvQ29udGV4dExpc3RlbmVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9zcmMvc2VydmVyL2NvbS9zdW4vY2IvQ29udGV4dExpc3RlbmVyLmphdmEKQEAgLTE3LDcgKzE3LDcgQEAKIHBhY2thZ2UgY29tLnN1bi5jYjsKIAogaW1wb3J0IGpha2FydGEuc2VydmxldC4qOwotaW1wb3J0IGphdmF4LnhtbC5yZWdpc3RyeS4qOyAKK2ltcG9ydCBqYXZheC54bWwucmVnaXN0cnkuKjsKIGltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7CiBpbXBvcnQgamF2YS5pby4qOwogCkBAIC0zMiwxNSArMzIsMTUgQEAKICAgICAgICAgUmVzb3VyY2VCdW5kbGUgcmVnaXN0cnlCdW5kbGUgPQogICAgICAgICAgICBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoImNvbS5zdW4uY2IuQ29mZmVlUmVnaXN0cnkiKTsKIAotICAgICAgICBTdHJpbmcgdXNlcm5hbWUgPSAKKyAgICAgICAgU3RyaW5nIHVzZXJuYW1lID0KICAgICAgICAgICAgIHJlZ2lzdHJ5QnVuZGxlLmdldFN0cmluZygicmVnaXN0cnkudXNlcm5hbWUiKTsKLSAgICAgICAgU3RyaW5nIHBhc3N3b3JkID0gCisgICAgICAgIFN0cmluZyBwYXNzd29yZCA9CiAgICAgICAgICAgICByZWdpc3RyeUJ1bmRsZS5nZXRTdHJpbmcoInJlZ2lzdHJ5LnBhc3N3b3JkIik7CiAgICAgICAgIFN0cmluZyBrZXlGaWxlID0gcmVnaXN0cnlCdW5kbGUuZ2V0U3RyaW5nKCJrZXkuZmlsZSIpOwogCiAgICAgICAgIEpBWFJQdWJsaXNoZXIgcHVibGlzaGVyID0gbmV3IEpBWFJQdWJsaXNoZXIoKTsKICAgICAgICAgcHVibGlzaGVyLm1ha2VDb25uZWN0aW9uKHF1ZXJ5VVJMLCBwdWJsaXNoVVJMKTsKLSAgICAgICAgU3RyaW5nIGtleSA9IHB1Ymxpc2hlci5leGVjdXRlUHVibGlzaCh1c2VybmFtZSwgCisgICAgICAgIFN0cmluZyBrZXkgPSBwdWJsaXNoZXIuZXhlY3V0ZVB1Ymxpc2godXNlcm5hbWUsCiAgICAgICAgICAgICBwYXNzd29yZCwgZW5kcG9pbnQpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgRmlsZVdyaXRlciBvdXQgPSBuZXcgRmlsZVdyaXRlcihrZXlGaWxlKTsKQEAgLTQ5LDkgKzQ5LDkgQEAKICAgICAgICAgICAgIG91dC5jbG9zZSgpOwogICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGV4LmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgIH0gICAgIAorICAgICAgICB9CiAgICAgfQotICAgICAgCisKICAgICBwdWJsaWMgdm9pZCBjb250ZXh0RGVzdHJveWVkKFNlcnZsZXRDb250ZXh0RXZlbnQgZXZlbnQpIHsKICAgICAgICAgU3RyaW5nIGtleVN0ciA9IG51bGw7CiAKQEAgLTYxLDkgKzYxLDkgQEAKICAgICAgICAgUmVzb3VyY2VCdW5kbGUgcmVnaXN0cnlCdW5kbGUgPQogICAgICAgICAgICAgUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKCJjb20uc3VuLmNiLkNvZmZlZVJlZ2lzdHJ5Iik7CiAKLSAgICAgICAgU3RyaW5nIHVzZXJuYW1lID0gCisgICAgICAgIFN0cmluZyB1c2VybmFtZSA9CiAgICAgICAgICAgICByZWdpc3RyeUJ1bmRsZS5nZXRTdHJpbmcoInJlZ2lzdHJ5LnVzZXJuYW1lIik7Ci0gICAgICAgIFN0cmluZyBwYXNzd29yZCA9IAorICAgICAgICBTdHJpbmcgcGFzc3dvcmQgPQogICAgICAgICAgICAgcmVnaXN0cnlCdW5kbGUuZ2V0U3RyaW5nKCJyZWdpc3RyeS5wYXNzd29yZCIpOwogICAgICAgICBTdHJpbmcga2V5RmlsZSA9IHJlZ2lzdHJ5QnVuZGxlLmdldFN0cmluZygia2V5LmZpbGUiKTsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9zcmMvc2VydmVyL2NvbS9zdW4vY2IvUHJpY2VMb2FkZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9qYXhycGMvc3JjL3NlcnZlci9jb20vc3VuL2NiL1ByaWNlTG9hZGVyLmphdmEKaW5kZXggMjc1OTM5YS4uMjUyY2JlZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9zcmMvc2VydmVyL2NvbS9zdW4vY2IvUHJpY2VMb2FkZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL3NyYy9zZXJ2ZXIvY29tL3N1bi9jYi9QcmljZUxvYWRlci5qYXZhCkBAIC0yNCw5ICsyNCw5IEBACiAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFByaWNlSXRlbUJlYW5bXSBsb2FkSXRlbXMoU3RyaW5nIHByb3BzTmFtZSkgewogCi0gICAgICAgUmVzb3VyY2VCdW5kbGUgcHJpY2VCdW5kbGUgPSAKKyAgICAgICBSZXNvdXJjZUJ1bmRsZSBwcmljZUJ1bmRsZSA9CiAgICAgICAgICAgIFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZShwcm9wc05hbWUpOwotICAKKwogICAgICAgIEVudW1lcmF0aW9uIGJ1bmRsZUtleXMgPSBwcmljZUJ1bmRsZS5nZXRLZXlzKCk7CiAgICAgICAgQXJyYXlMaXN0IGtleUxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7CiAKQEAgLTM0LDE0ICszNCwxNCBAQAogICAgICAgICAgICBTdHJpbmcga2V5ID0gKFN0cmluZylidW5kbGVLZXlzLm5leHRFbGVtZW50KCk7CiAgICAgICAgICAgIFN0cmluZyB2YWx1ZSAgPSBwcmljZUJ1bmRsZS5nZXRTdHJpbmcoa2V5KTsKICAgICAgICAgICAga2V5TGlzdC5hZGQodmFsdWUpOwotICAgICAgIH0gCisgICAgICAgfQogCi0gICAgICAgUHJpY2VJdGVtQmVhbltdIGl0ZW1zID0gCisgICAgICAgUHJpY2VJdGVtQmVhbltdIGl0ZW1zID0KICAgICAgICAgICAgKFByaWNlSXRlbUJlYW5bXSlBcnJheS5uZXdJbnN0YW5jZShQcmljZUl0ZW1CZWFuLmNsYXNzLCBrZXlMaXN0LnNpemUoKSk7CiAgICAgICAgaW50IGsgPSAwOwogICAgICAgIGZvciAoSXRlcmF0b3IgaXQ9a2V5TGlzdC5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7ICkgewogICAgICAgICAgICBTdHJpbmcgcyA9IChTdHJpbmcpaXQubmV4dCgpOwotICAgICAgICAgICBpbnQgY29tbWFJbmRleCA9IHMuaW5kZXhPZigiLCIpOyAKKyAgICAgICAgICAgaW50IGNvbW1hSW5kZXggPSBzLmluZGV4T2YoIiwiKTsKICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSBzLnN1YnN0cmluZygwLCBjb21tYUluZGV4KS50cmltKCk7CiAgICAgICAgICAgIFN0cmluZyBwcmljZSA9IHMuc3Vic3RyaW5nKGNvbW1hSW5kZXggKyAxLCBzLmxlbmd0aCgpKS50cmltKCk7CiAgICAgICAgICAgIGl0ZW1zW2tdID0gbmV3IFByaWNlSXRlbUJlYW4obmFtZSwgbmV3IEJpZ0RlY2ltYWwocHJpY2UpKTsKQEAgLTQ5LDUgKzQ5LDUgQEAKICAgICAgICB9CiAKICAgICAgICByZXR1cm4gaXRlbXM7Ci0gICB9IAotfSAKKyAgIH0KK30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9qYXhycGMvc3JjL3NlcnZlci9jb20vc3VuL2NiL1N1cHBsaWVySW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9zcmMvc2VydmVyL2NvbS9zdW4vY2IvU3VwcGxpZXJJbXBsLmphdmEKaW5kZXggZjliMTYzYS4uYWMyNjViNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9zcmMvc2VydmVyL2NvbS9zdW4vY2IvU3VwcGxpZXJJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9zcmMvc2VydmVyL2NvbS9zdW4vY2IvU3VwcGxpZXJJbXBsLmphdmEKQEAgLTI1LDcgKzI1LDcgQEAKIAogICAgICAgICAgRGF0ZSB0b21vcnJvdyA9IGNvbS5zdW4uY2IuRGF0ZUhlbHBlci5hZGREYXlzKG5ldyBEYXRlKCksIDEpOwogICAgICAgICAgQ29uZmlybWF0aW9uQmVhbiBjb25maXJtYXRpb24gPQotICAgICAgICAgICAgIG5ldyBDb25maXJtYXRpb25CZWFuKG9yZGVyLmdldElkKCksIAorICAgICAgICAgICAgIG5ldyBDb25maXJtYXRpb25CZWFuKG9yZGVyLmdldElkKCksCiAgICAgICAgICAgICAgICAgIERhdGVIZWxwZXIuZGF0ZVRvQ2FsZW5kYXIodG9tb3Jyb3cpKTsKICAgICAgICAgIHJldHVybiBjb25maXJtYXRpb247CiAgICAgfQpAQCAtNDMsNyArNDMsNyBAQAogICAgICAgIERhdGUgZW5kRGF0ZSA9IERhdGVIZWxwZXIuYWRkRGF5cyh0b2RheSwgMzApOwogCiAgICAgICAgUHJpY2VJdGVtQmVhbltdIHByaWNlSXRlbXMgPSBQcmljZUxvYWRlci5sb2FkSXRlbXMocHJvcHNOYW1lKTsKLSAgICAgICBQcmljZUxpc3RCZWFuIHByaWNlTGlzdCA9IAorICAgICAgIFByaWNlTGlzdEJlYW4gcHJpY2VMaXN0ID0KICAgICAgICAgICAgbmV3IFByaWNlTGlzdEJlYW4oRGF0ZUhlbHBlci5kYXRlVG9DYWxlbmRhcih0b2RheSksCiAgICAgICAgICAgICAgICBEYXRlSGVscGVyLmRhdGVUb0NhbGVuZGFyKGVuZERhdGUpLCBwcmljZUl0ZW1zKTsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9zcmMvc2VydmVyL2NvbS9zdW4vY2IvU3VwcGxpZXJQcmljZXMucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9qYXhycGMvc3JjL3NlcnZlci9jb20vc3VuL2NiL1N1cHBsaWVyUHJpY2VzLnByb3BlcnRpZXMKaW5kZXggMjg0Y2UxMC4uZjBkNDU0MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL2pheHJwYy9zcmMvc2VydmVyL2NvbS9zdW4vY2IvU3VwcGxpZXJQcmljZXMucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2IvamF4cnBjL3NyYy9zZXJ2ZXIvY29tL3N1bi9jYi9TdXBwbGllclByaWNlcy5wcm9wZXJ0aWVzCkBAIC0xNyw1ICsxNyw1IEBACiAKIGMxPU1vY2NhLCA0LjAwCiBjMj1XYWtlIFVwIENhbGwsIDUuNTAKLWMzPUZyZW5jaCBSb2FzdCwgNS4wMCAKK2MzPUZyZW5jaCBSb2FzdCwgNS4wMFx1MDAyMAogYzQ9S29uYSwgNi41MApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NhYWovYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zYWFqL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMjY0MTI3Ni4uZTcwMjViZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NhYWovYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2Fhai9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKICMgVGhpcyBmaWxlIGNvbnRhaW5zIHByb3BlcnRpZXMgY29tbW9uIHRvIHRoZSB0dXRvcmlhbCBleGFtcGxlcyBmb3IgU0FBSi4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NhYWovYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NhYWovYnVpbGQueG1sCmluZGV4IDVlZGJkYjIuLmU5MWRhYTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zYWFqL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2Fhai9idWlsZC54bWwKQEAgLTIxLDE1ICsyMSwxNSBAQAogXT4KIAogPHByb2plY3QgbmFtZT0iU0FBSiBUdXRvcmlhbCwgQ29mZmVlIEJyZWFrIiBkZWZhdWx0PSJidWlsZCIgYmFzZWRpcj0iLiI+Ci0gIDx0YXJnZXQgbmFtZT0iaW5pdCI+IAotICAgICAgPHRzdGFtcC8+IAotICA8L3RhcmdldD4gCisgIDx0YXJnZXQgbmFtZT0iaW5pdCI+CisgICAgICA8dHN0YW1wLz4KKyAgPC90YXJnZXQ+CiAKICAgPHByb3BlcnR5IGZpbGU9Ii4uLy4uL2NvbW1vbi9idWlsZC5wcm9wZXJ0aWVzIi8+CiAgIDxwcm9wZXJ0eSBmaWxlPSJidWlsZC5wcm9wZXJ0aWVzIi8+CiAKICAgJnRhcmdldHM7Ci0gIAorCiAgIDxwYXRoIGlkPSJydW4uY2xhc3NwYXRoIj4KICAgICA8ZmlsZXNldCBkaXI9IiR7ajJlZS5ob21lfS9saWIiPgogICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KQEAgLTM5LDcgKzM5LDcgQEAKICAgICA8L2ZpbGVzZXQ+CiAgIDwvcGF0aD4KIAotICA8dGFyZ2V0IG5hbWU9InByZXBhcmUiIAorICA8dGFyZ2V0IG5hbWU9InByZXBhcmUiCiAgICAgIGRlc2NyaXB0aW9uPSJDcmVhdGVzIHRoZSBidWlsZCBhbmQgZGlzdCBkaXJlY3RvcmllcyIgPgogICAgICA8ZWNobyBtZXNzYWdlPSJDcmVhdGluZyB0aGUgcmVxdWlyZWQgZGlyZWN0b3JpZXMuLi4uIiAvPgogICAgICA8bWtkaXIgZGlyPSIke2J1aWxkfS9jbGllbnQiIC8+CkBAIC03NywxMSArNzcsMTEgQEAKICAgICAgIDxjbGFzc3BhdGggcmVmaWQ9ImNsYXNzcGF0aCIgLz4KICAgICAgIDxjbGFzc3BhdGggcGF0aD0iJHtjb21tb259IiAvPgogICAgICAgPC9qYXZhYz4KLSAgICAgIDxjb3B5IGZpbGU9Ii4uL2NvbW1vbi9zcmMvY29tL3N1bi9jYi9Db2ZmZWVCcmVhay5wcm9wZXJ0aWVzIiAKKyAgICAgIDxjb3B5IGZpbGU9Ii4uL2NvbW1vbi9zcmMvY29tL3N1bi9jYi9Db2ZmZWVCcmVhay5wcm9wZXJ0aWVzIgogICAgICAgICB0b2Rpcj0iJHtidWlsZH0vY2xpZW50L2NvbS9zdW4vY2IiIC8+CiAgIDwvdGFyZ2V0PgogCi0gIDx0YXJnZXQgbmFtZT0icGFja2FnZS1jbGllbnQiIGRlcGVuZHM9ImNvbXBpbGUtY2xpZW50IiAKKyAgPHRhcmdldCBuYW1lPSJwYWNrYWdlLWNsaWVudCIgZGVwZW5kcz0iY29tcGlsZS1jbGllbnQiCiAgICAgICBkZXNjcmlwdGlvbj0iQnVpbGRzIHRoZSBKQVIgZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBTQUFKIGNsaWVudCByb3V0aW5lcyI+CiAgICAgICA8ZWNobyBtZXNzYWdlPSJCdWlsZGluZyB0aGUgJHtjbGllbnQtamFyfSBmaWxlLi4uLiIvPgogICAgICAgPGRlbGV0ZSBmaWxlPSJkaXN0LyR7Y2xpZW50LWphcn0iIC8+CkBAIC05MiwyNCArOTIsMjQgQEAKICAgICAgIDwvamFyPgogICA8L3RhcmdldD4KIAotICA8dGFyZ2V0IG5hbWU9InJ1bi10ZXN0LW9yZGVyIj4gCisgIDx0YXJnZXQgbmFtZT0icnVuLXRlc3Qtb3JkZXIiPgogICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi10ZXN0LWNsaWVudCI+CiAgICAgICAgPHBhcmFtIG5hbWU9ImNsaWVudC1jbGFzcyIgdmFsdWU9ImNvbS5zdW4uY2IuVGVzdE9yZGVyUmVxdWVzdCIvPgogICAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgogCi0gIDx0YXJnZXQgbmFtZT0icnVuLXRlc3QtcHJpY2UiPiAKKyAgPHRhcmdldCBuYW1lPSJydW4tdGVzdC1wcmljZSI+CiAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLXRlc3QtY2xpZW50Ij4KICAgICAgICA8cGFyYW0gbmFtZT0iY2xpZW50LWNsYXNzIiB2YWx1ZT0iY29tLnN1bi5jYi5UZXN0UHJpY2VMaXN0UmVxdWVzdCIvPgogICAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgogCi0gIDx0YXJnZXQgbmFtZT0icnVuLXRlc3QtY2xpZW50IiAKKyAgPHRhcmdldCBuYW1lPSJydW4tdGVzdC1jbGllbnQiCiAgICAgIGRlc2NyaXB0aW9uPSJSdW5zIGEgdGVzdCBjbGllbnQiPgogICAgICA8ZWNobyBtZXNzYWdlPSJSdW5uaW5nIHRoZSAke2NsaWVudC1jbGFzc30gcHJvZ3JhbToiIC8+CiAgICAgIDxlY2hvIG1lc3NhZ2U9IiAiIC8+Ci0gICAgICA8amF2YSAKLSAgICAgICAgICAgIGZvcms9Im9uIiAKKyAgICAgIDxqYXZhCisgICAgICAgICAgICBmb3JrPSJvbiIKICAgICAgICAgICAgIGNsYXNzbmFtZT0iJHtjbGllbnQtY2xhc3N9Ij4KICAgICAgIDxjbGFzc3BhdGggcmVmaWQ9InJ1bi5jbGFzc3BhdGgiIC8+CiAgICAgICA8Y2xhc3NwYXRoIHBhdGg9IiR7YnVpbGR9L2NsaWVudCIgLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zYWFqL2R0ZHMvY29mZmVlLW9yZGVyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zYWFqL2R0ZHMvY29mZmVlLW9yZGVyLnhtbAppbmRleCAxMjNkNDhiLi40ZTIzMTM2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2Fhai9kdGRzL2NvZmZlZS1vcmRlci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NhYWovZHRkcy9jb2ZmZWUtb3JkZXIueG1sCkBAIC0yMyw3ICsyMyw3IEBACiAKIDxjb2ZmZWUtb3JkZXI+CiAgICAgPG9yZGVySUQ+Ci0JCSIxMjM0IgorICAgICAgICAiMTIzNCIKICAgICA8L29yZGVySUQ+CiAKICAgICA8Y3VzdG9tZXI+CkBAIC03MSw1ICs3MSw1IEBACiAgICAgPHRvdGFsPgogICAgICAgICAiMTAuOTUiCiAgICAgPC90b3RhbD4KLSAgIAorCiA8L2NvZmZlZS1vcmRlcj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zYWFqL2R0ZHMvY29uZmlybS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2Fhai9kdGRzL2NvbmZpcm0ueG1sCmluZGV4IDZjNzQwNmUuLjBkMDhjYTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zYWFqL2R0ZHMvY29uZmlybS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NhYWovZHRkcy9jb25maXJtLnhtbApAQCAtMjIsMTAgKzIyLDEwIEBACiAKIDxjb25maXJtYXRpb24+CiAgICAgPG9yZGVySUQ+Ci0JCSIxMjM0IgotCTwvb3JkZXJJRD4KKyAgICAgICAgIjEyMzQiCisgICAgPC9vcmRlcklEPgogCiAgICAgPHNoaXAtZGF0ZT4KLQkJIjAxLTAxLTIwMDEiCi0JPC9zaGlwLWRhdGU+CisgICAgICAgICIwMS0wMS0yMDAxIgorICAgIDwvc2hpcC1kYXRlPgogPC9jb25maXJtYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2Fhai9kdGRzL3ByaWNlLWxpc3QueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NhYWovZHRkcy9wcmljZS1saXN0LnhtbAppbmRleCBlZDY3ZGIyLi5mMDkwYTFlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2Fhai9kdGRzL3ByaWNlLWxpc3QueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zYWFqL2R0ZHMvcHJpY2UtbGlzdC54bWwKQEAgLTIyLDIzICsyMiwyMyBAQAogCiA8cHJpY2UtbGlzdAogICAgIDxjb2ZmZWU+Ci0JCTxjb2ZmZWUtbmFtZT4gQXJhYmljYSA8L2NvZmZlZS1uYW1lPgotCQk8cHJpY2U+IDQuNTAgPC9wcmljZT4KKyAgICAgICAgPGNvZmZlZS1uYW1lPiBBcmFiaWNhIDwvY29mZmVlLW5hbWU+CisgICAgICAgIDxwcmljZT4gNC41MCA8L3ByaWNlPgogICAgIDwvY29mZmVlPgogCiAgICAgPGNvZmZlZT4KLQkJPGNvZmZlZS1uYW1lPiBIb3VzZUJsZW5kIDwvY29mZmVlLW5hbWU+Ci0JCTxwcmljZT4gNS4wMCA8L3ByaWNlPgorICAgICAgICA8Y29mZmVlLW5hbWU+IEhvdXNlQmxlbmQgPC9jb2ZmZWUtbmFtZT4KKyAgICAgICAgPHByaWNlPiA1LjAwIDwvcHJpY2U+CiAgICAgPC9jb2ZmZWU+CiAKICAgICA8Y29mZmVlPgotCQk8Y29mZmVlLW5hbWU+IEVzcHJlc3NvIDwvY29mZmVlLW5hbWU+Ci0JCTxwcmljZT4gNS4wMCA8L3ByaWNlPgorICAgICAgICA8Y29mZmVlLW5hbWU+IEVzcHJlc3NvIDwvY29mZmVlLW5hbWU+CisgICAgICAgIDxwcmljZT4gNS4wMCA8L3ByaWNlPgogICAgIDwvY29mZmVlPgogCiAgICAgPGNvZmZlZT4KLQkJPGNvZmZlZS1uYW1lPiBEb3JhZGEgPC9jb2ZmZWUtbmFtZT4KLQkJPHByaWNlPiA2LjAwIDwvcHJpY2U+CisgICAgICAgIDxjb2ZmZWUtbmFtZT4gRG9yYWRhIDwvY29mZmVlLW5hbWU+CisgICAgICAgIDxwcmljZT4gNi4wMCA8L3ByaWNlPgogICAgIDwvY29mZmVlPgogCiA8L3ByaWNlLWxpc3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2Fhai9kdGRzL3JlcXVlc3QtcHJpY2VzLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zYWFqL2R0ZHMvcmVxdWVzdC1wcmljZXMueG1sCmluZGV4IGJjZDMzZjIuLjI0NDM0ZGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zYWFqL2R0ZHMvcmVxdWVzdC1wcmljZXMueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zYWFqL2R0ZHMvcmVxdWVzdC1wcmljZXMueG1sCkBAIC0yMiw2ICsyMiw2IEBACiAKIDxyZXF1ZXN0LXByaWNlcz4KICAgICA8cmVxdWVzdD4KLQkJIlNlbmQgY3VycmVudCBwcmljZSBsaXN0LiIKLQk8L3JlcXVlc3Q+CisgICAgICAgICJTZW5kIGN1cnJlbnQgcHJpY2UgbGlzdC4iCisgICAgPC9yZXF1ZXN0PgogPC9yZXF1ZXN0LXByaWNlcz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zYWFqL3NyYy9jb20vc3VuL2NiL0NvbmZpcm1hdGlvblNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zYWFqL3NyYy9jb20vc3VuL2NiL0NvbmZpcm1hdGlvblNlcnZsZXQuamF2YQppbmRleCA3N2ZjNTAwLi42YzY2MjcyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2Fhai9zcmMvY29tL3N1bi9jYi9Db25maXJtYXRpb25TZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NhYWovc3JjL2NvbS9zdW4vY2IvQ29uZmlybWF0aW9uU2VydmxldC5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiAKIHB1YmxpYyBjbGFzcyBDb25maXJtYXRpb25TZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewogICAgIHN0YXRpYyBNZXNzYWdlRmFjdG9yeSBmYWMgPSBudWxsOwotICAgIAorCiAgICAgc3RhdGljIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGZhYyA9IE1lc3NhZ2VGYWN0b3J5Lm5ld0luc3RhbmNlKCk7CkBAIC0zNiwxMiArMzYsMTIgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBzZXJ2bGV0Q29uZmlnKSAKKyAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgc2VydmxldENvbmZpZykKICAgICAgICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChzZXJ2bGV0Q29uZmlnKTsKICAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgZG9Qb3N0KCBIdHRwU2VydmxldFJlcXVlc3QgcmVxLCAKKworICAgIHB1YmxpYyB2b2lkIGRvUG9zdCggSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwKICAgICAgICAgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQogICAgICAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKQEAgLTU0LDI1ICs1NCwyNSBAQAogICAgICAgICAgICAgLy8gTm93IGludGVybmFsaXplIHRoZSBjb250ZW50cyBvZiBhIEhUVFAgcmVxdWVzdAogICAgICAgICAgICAgLy8gYW5kIGNyZWF0ZSBhIFNPQVBNZXNzYWdlCiAgICAgICAgICAgICBTT0FQTWVzc2FnZSBtc2cgPSBmYWMuY3JlYXRlTWVzc2FnZShoZWFkZXJzLCBpcyk7Ci0gICAgICAKKwogICAgICAgICAgICAgU09BUE1lc3NhZ2UgcmVwbHkgPSBudWxsOwogICAgICAgICAgICAgcmVwbHkgPSBvbk1lc3NhZ2UobXNnKTsKIAogICAgICAgICAgICAgaWYgKHJlcGx5ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvKiAKLSAgICAgICAgICAgICAgICAgKiBOZWVkIHRvIGNhbGwgc2F2ZUNoYW5nZXMgYmVjYXVzZSB3ZSdyZSAKLSAgICAgICAgICAgICAgICAgKiBnb2luZyB0byB1c2UgdGhlIE1pbWVIZWFkZXJzIHRvIHNldCBIVFRQIAorCisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBOZWVkIHRvIGNhbGwgc2F2ZUNoYW5nZXMgYmVjYXVzZSB3ZSdyZQorICAgICAgICAgICAgICAgICAqIGdvaW5nIHRvIHVzZSB0aGUgTWltZUhlYWRlcnMgdG8gc2V0IEhUVFAKICAgICAgICAgICAgICAgICAgKiByZXNwb25zZSBpbmZvcm1hdGlvbi4gVGhlc2UgTWltZUhlYWRlcnMKICAgICAgICAgICAgICAgICAgKiBhcmUgZ2VuZXJhdGVkIGFzIHBhcnQgb2YgdGhlIHNhdmUuCiAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgaWYgKHJlcGx5LnNhdmVSZXF1aXJlZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGx5LnNhdmVDaGFuZ2VzKCk7IAorICAgICAgICAgICAgICAgICAgICByZXBseS5zYXZlQ2hhbmdlcygpOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIHJlc3Auc2V0U3RhdHVzKEh0dHBTZXJ2bGV0UmVzcG9uc2UuU0NfT0spOwogICAgICAgICAgICAgICAgIHB1dEhlYWRlcnMocmVwbHkuZ2V0TWltZUhlYWRlcnMoKSwgcmVzcCk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gV3JpdGUgb3V0IHRoZSBtZXNzYWdlIG9uIHRoZSByZXNwb25zZSBzdHJlYW0KICAgICAgICAgICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSByZXNwLmdldE91dHB1dFN0cmVhbSgpOwogICAgICAgICAgICAgICAgIHJlcGx5LndyaXRlVG8ob3MpOwpAQCAtODIsNyArODIsNyBAQAogICAgICAgICAgICAgICAgICAgICBIdHRwU2VydmxldFJlc3BvbnNlLlNDX05PX0NPTlRFTlQpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKCJTQUFKIFBPU1QgZmFpbGVkOiAiICsgCisgICAgICAgICAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbigiU0FBSiBQT1NUIGZhaWxlZDogIiArCiAgICAgICAgICAgICAgICAgZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTk5LDE0ICs5OSwxNCBAQAogICAgICAgICAgICAgU3RyaW5nVG9rZW5pemVyIHZhbHVlcyA9CiAgICAgICAgICAgICAgICAgbmV3IFN0cmluZ1Rva2VuaXplcihoZWFkZXJWYWx1ZSwgIiwiKTsKICAgICAgICAgICAgIHdoaWxlICh2YWx1ZXMuaGFzTW9yZVRva2VucygpKSB7Ci0gICAgICAgICAgICAgICAgaGVhZGVycy5hZGRIZWFkZXIoaGVhZGVyTmFtZSwgCisgICAgICAgICAgICAgICAgaGVhZGVycy5hZGRIZWFkZXIoaGVhZGVyTmFtZSwKICAgICAgICAgICAgICAgICAgICAgdmFsdWVzLm5leHRUb2tlbigpLnRyaW0oKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGhlYWRlcnM7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgcHV0SGVhZGVycyhNaW1lSGVhZGVycyBoZWFkZXJzLCAKKyAgICBzdGF0aWMgdm9pZCBwdXRIZWFkZXJzKE1pbWVIZWFkZXJzIGhlYWRlcnMsCiAgICAgICAgICAgICBIdHRwU2VydmxldFJlc3BvbnNlIHJlcykgewogCiAgICAgICAgIEl0ZXJhdG9yIGl0ID0gaGVhZGVycy5nZXRBbGxIZWFkZXJzKCk7CkBAIC0xMTUsNyArMTE1LDcgQEAKIAogICAgICAgICAgICAgU3RyaW5nW10gdmFsdWVzID0gaGVhZGVycy5nZXRIZWFkZXIoaGVhZGVyLmdldE5hbWUoKSk7CiAgICAgICAgICAgICBpZiAodmFsdWVzLmxlbmd0aCA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgcmVzLnNldEhlYWRlcihoZWFkZXIuZ2V0TmFtZSgpLCAKKyAgICAgICAgICAgICAgICByZXMuc2V0SGVhZGVyKGhlYWRlci5nZXROYW1lKCksCiAgICAgICAgICAgICAgICAgICAgIGhlYWRlci5nZXRWYWx1ZSgpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgU3RyaW5nQnVmZmVyIGNvbmNhdCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKQEAgLTEzOSwxMCArMTM5LDEwIEBACiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIC8vIFJldHJpZXZlIG9yZGVySUQgZnJvbSBtZXNzYWdlIHJlY2VpdmVkCi0gICAgICAgICAgICBTT0FQQm9keSBzZW50U0IgPSAKKyAgICAgICAgICAgIFNPQVBCb2R5IHNlbnRTQiA9CiAgICAgICAgICAgICAgICAgbWVzc2FnZS5nZXRTT0FQUGFydCgpLmdldEVudmVsb3BlKCkuZ2V0Qm9keSgpOwogICAgICAgICAgICAgSXRlcmF0b3Igc2VudEl0ID0gc2VudFNCLmdldENoaWxkRWxlbWVudHMoKTsKLSAgICAgICAgICAgIFNPQVBCb2R5RWxlbWVudCBzZW50U0JFID0gCisgICAgICAgICAgICBTT0FQQm9keUVsZW1lbnQgc2VudFNCRSA9CiAgICAgICAgICAgICAgICAgKFNPQVBCb2R5RWxlbWVudClzZW50SXQubmV4dCgpOwogICAgICAgICAgICAgSXRlcmF0b3Igc2VudEl0MiA9IHNlbnRTQkUuZ2V0Q2hpbGRFbGVtZW50cygpOwogICAgICAgICAgICAgU09BUEVsZW1lbnQgc2VudFNFID0gKFNPQVBFbGVtZW50KXNlbnRJdDIubmV4dCgpOwpAQCAtMTU2LDkgKzE1Niw5IEBACiAgICAgICAgICAgICBTT0FQRW52ZWxvcGUgZW52ID0gc3AuZ2V0RW52ZWxvcGUoKTsKICAgICAgICAgICAgIFNPQVBCb2R5IHNiID0gZW52LmdldEJvZHkoKTsKIAotICAgICAgICAgICAgTmFtZSBuZXdCb2R5TmFtZSA9IGVudi5jcmVhdGVOYW1lKCJjb25maXJtYXRpb24iLCAKKyAgICAgICAgICAgIE5hbWUgbmV3Qm9keU5hbWUgPSBlbnYuY3JlYXRlTmFtZSgiY29uZmlybWF0aW9uIiwKICAgICAgICAgICAgICAgICAiQ29uZmlybSIsICJodHRwOi8vc29uYXRhLmNvZmZlZWJyZWFrLmNvbSIpOwotICAgICAgICAgICAgU09BUEJvZHlFbGVtZW50IGNvbmZpcm0gPSAKKyAgICAgICAgICAgIFNPQVBCb2R5RWxlbWVudCBjb25maXJtID0KICAgICAgICAgICAgICAgICBzYi5hZGRCb2R5RWxlbWVudChuZXdCb2R5TmFtZSk7CiAKICAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgb3JkZXJJRCBlbGVtZW50IGZvciBjb25maXJtYXRpb24KQEAgLTE2OSw3ICsxNjksNyBAQAogCiAgICAgICAgICAgICAvLyBDcmVhdGUgc2hpcC1kYXRlIGVsZW1lbnQKICAgICAgICAgICAgIE5hbWUgc2hpcERhdGVOYW1lID0gZW52LmNyZWF0ZU5hbWUoInNoaXAtZGF0ZSIpOwotICAgICAgICAgICAgU09BUEVsZW1lbnQgc2hpcERhdGUgPSAKKyAgICAgICAgICAgIFNPQVBFbGVtZW50IHNoaXBEYXRlID0KICAgICAgICAgICAgICAgICBjb25maXJtLmFkZENoaWxkRWxlbWVudChzaGlwRGF0ZU5hbWUpOwogCiAgICAgICAgICAgICAvLyBDcmVhdGUgdGhlIHNoaXBwaW5nIGRhdGUKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zYWFqL3NyYy9jb20vc3VuL2NiL09yZGVyUmVxdWVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NhYWovc3JjL2NvbS9zdW4vY2IvT3JkZXJSZXF1ZXN0LmphdmEKaW5kZXggYzYxMTIwMS4uNjZjMzdkMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NhYWovc3JjL2NvbS9zdW4vY2IvT3JkZXJSZXF1ZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NhYWovc3JjL2NvbS9zdW4vY2IvT3JkZXJSZXF1ZXN0LmphdmEKQEAgLTMyLDEwICszMiwxMCBAQAogICAgIH0KIAogICAgIHB1YmxpYyBDb25maXJtYXRpb25CZWFuIHBsYWNlT3JkZXIoT3JkZXJCZWFuIG9yZGVyQmVhbikgewotICAgICAgICBDb25maXJtYXRpb25CZWFuIGNiID0gbnVsbDsgICAKKyAgICAgICAgQ29uZmlybWF0aW9uQmVhbiBjYiA9IG51bGw7CiAKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIFNPQVBDb25uZWN0aW9uRmFjdG9yeSBzY2YgPSAKKyAgICAgICAgICAgIFNPQVBDb25uZWN0aW9uRmFjdG9yeSBzY2YgPQogICAgICAgICAgICAgICAgIFNPQVBDb25uZWN0aW9uRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwogICAgICAgICAgICAgU09BUENvbm5lY3Rpb24gY29uID0gc2NmLmNyZWF0ZUNvbm5lY3Rpb24oKTsKIApAQCAtNzUsNyArNzUsNyBAQAogICAgICAgICAgICAgICAgIG9yZGVyQmVhbi5nZXRDdXN0b21lcigpLmdldFBob25lTnVtYmVyKCkpOwogCiAgICAgICAgICAgICBjaGlsZE5hbWUgPSBlbnZlbG9wZS5jcmVhdGVOYW1lKCJlbWFpbC1hZGRyZXNzIik7Ci0gICAgICAgICAgICBTT0FQRWxlbWVudCBlbWFpbEFkZHJlc3MgPSAKKyAgICAgICAgICAgIFNPQVBFbGVtZW50IGVtYWlsQWRkcmVzcyA9CiAgICAgICAgICAgICAgICAgY3VzdG9tZXIuYWRkQ2hpbGRFbGVtZW50KGNoaWxkTmFtZSk7CiAgICAgICAgICAgICBlbWFpbEFkZHJlc3MuYWRkVGV4dE5vZGUoCiAgICAgICAgICAgICAgICAgb3JkZXJCZWFuLmdldEN1c3RvbWVyKCkuZ2V0RW1haWxBZGRyZXNzKCkpOwpAQCAtOTksOCArOTksOCBAQAogICAgICAgICAgICAgY2hpbGROYW1lID0gZW52ZWxvcGUuY3JlYXRlTmFtZSgiemlwIik7CiAgICAgICAgICAgICBTT0FQRWxlbWVudCB6aXAgPSBhZGRyZXNzLmFkZENoaWxkRWxlbWVudChjaGlsZE5hbWUpOwogICAgICAgICAgICAgemlwLmFkZFRleHROb2RlKG9yZGVyQmVhbi5nZXRBZGRyZXNzKCkuZ2V0WmlwKCkpOwotICAgIAotICAgICAgICAgICAgTGluZUl0ZW1CZWFuW10gbGluZUl0ZW1zPW9yZGVyQmVhbi5nZXRMaW5lSXRlbXMoKTsgICAgICAgICAgICAKKworICAgICAgICAgICAgTGluZUl0ZW1CZWFuW10gbGluZUl0ZW1zPW9yZGVyQmVhbi5nZXRMaW5lSXRlbXMoKTsKICAgICAgICAgICAgIGZvciAoaW50IGk9MDtpIDwgbGluZUl0ZW1zLmxlbmd0aDtpKyspIHsKICAgICAgICAgICAgICAgICBMaW5lSXRlbUJlYW4gbGliID0gbGluZUl0ZW1zW2ldOwogCkBAIC0xMDgsNyArMTA4LDcgQEAKICAgICAgICAgICAgICAgICBTT0FQRWxlbWVudCBsaW5lSXRlbSA9IG9yZGVyLmFkZENoaWxkRWxlbWVudChjaGlsZE5hbWUpOwogCiAgICAgICAgICAgICAgICAgY2hpbGROYW1lID0gZW52ZWxvcGUuY3JlYXRlTmFtZSgiY29mZmVlTmFtZSIpOwotICAgICAgICAgICAgICAgIFNPQVBFbGVtZW50IGNvZmZlZU5hbWUgPSAKKyAgICAgICAgICAgICAgICBTT0FQRWxlbWVudCBjb2ZmZWVOYW1lID0KICAgICAgICAgICAgICAgICAgICAgbGluZUl0ZW0uYWRkQ2hpbGRFbGVtZW50KGNoaWxkTmFtZSk7CiAgICAgICAgICAgICAgICAgY29mZmVlTmFtZS5hZGRUZXh0Tm9kZShsaWIuZ2V0Q29mZmVlTmFtZSgpKTsKIApAQCAtMTIzLDEwICsxMjMsMTAgQEAKIAogICAgICAgICAgICAgLy8gdG90YWwKICAgICAgICAgICAgIGNoaWxkTmFtZSA9IGVudmVsb3BlLmNyZWF0ZU5hbWUoInRvdGFsIik7Ci0gICAgICAgICAgICBTT0FQRWxlbWVudCB0b3RhbCA9IAorICAgICAgICAgICAgU09BUEVsZW1lbnQgdG90YWwgPQogICAgICAgICAgICAgICAgIG9yZGVyLmFkZENoaWxkRWxlbWVudChjaGlsZE5hbWUpOwotICAgICAgICAgICAgdG90YWwuYWRkVGV4dE5vZGUob3JkZXJCZWFuLmdldFRvdGFsKCkudG9TdHJpbmcoKSk7IAotICAgICAgICAgICAgICAKKyAgICAgICAgICAgIHRvdGFsLmFkZFRleHROb2RlKG9yZGVyQmVhbi5nZXRUb3RhbCgpLnRvU3RyaW5nKCkpOworCiAgICAgICAgICAgICBVUkwgZW5kcG9pbnQgPSBuZXcgVVJMKHVybCk7CiAgICAgICAgICAgICBTT0FQTWVzc2FnZSByZXBseSA9IGNvbi5jYWxsKG1zZywgZW5kcG9pbnQpOwogICAgICAgICAgICAgY29uLmNsb3NlKCk7CkBAIC0xNDUsNyArMTQ1LDcgQEAKICAgICAgICAgICAgIC8vIEdldCBzaGlwIGRhdGUKICAgICAgICAgICAgIFNPQVBFbGVtZW50IHNEYXRlID0gKFNPQVBFbGVtZW50KWJvZHlJdDIubmV4dCgpOwogICAgICAgICAgICAgU3RyaW5nIHNoaXBwaW5nRGF0ZSA9IHNEYXRlLmdldFZhbHVlKCk7Ci0gICAgICAgICAgICBTaW1wbGVEYXRlRm9ybWF0IGRmID0gCisgICAgICAgICAgICBTaW1wbGVEYXRlRm9ybWF0IGRmID0KICAgICAgICAgICAgICAgICBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgiRUVFIE1NTSBkZCBISDptbTpzcyB6IHl5eXkiKTsKICAgICAgICAgICAgIERhdGUgZGF0ZSA9IGRmLnBhcnNlKHNoaXBwaW5nRGF0ZSk7CiAgICAgICAgICAgICBDYWxlbmRhciBjYWwgPSBuZXcgR3JlZ29yaWFuQ2FsZW5kYXIoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zYWFqL3NyYy9jb20vc3VuL2NiL1ByaWNlTGlzdFJlcXVlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zYWFqL3NyYy9jb20vc3VuL2NiL1ByaWNlTGlzdFJlcXVlc3QuamF2YQppbmRleCBhM2MzMzQ0Li4yOTQ5YjEyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2Fhai9zcmMvY29tL3N1bi9jYi9QcmljZUxpc3RSZXF1ZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NhYWovc3JjL2NvbS9zdW4vY2IvUHJpY2VMaXN0UmVxdWVzdC5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiAKIHB1YmxpYyBjbGFzcyBQcmljZUxpc3RSZXF1ZXN0IHsKICAgICBTdHJpbmcgdXJsOwotICAKKwogICAgIHB1YmxpYyBQcmljZUxpc3RSZXF1ZXN0KFN0cmluZyB1cmwpewogICAgICAgICB0aGlzLnVybCA9IHVybDsKICAgICB9CkBAIC0zMiw3ICszMiw3IEBACiAgICAgcHVibGljIFByaWNlTGlzdEJlYW4gZ2V0UHJpY2VMaXN0KCkgewogICAgICAgICBQcmljZUxpc3RCZWFuIHBsYiA9IG51bGw7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBTT0FQQ29ubmVjdGlvbkZhY3Rvcnkgc2NmID0gCisgICAgICAgICAgICBTT0FQQ29ubmVjdGlvbkZhY3Rvcnkgc2NmID0KICAgICAgICAgICAgICAgICBTT0FQQ29ubmVjdGlvbkZhY3RvcnkubmV3SW5zdGFuY2UoKTsKICAgICAgICAgICAgIFNPQVBDb25uZWN0aW9uIGNvbiA9IHNjZi5jcmVhdGVDb25uZWN0aW9uKCk7CiAKQEAgLTQ0LDE0ICs0NCwxNCBAQAogICAgICAgICAgICAgU09BUEVudmVsb3BlIGVudmVsb3BlID0gcGFydC5nZXRFbnZlbG9wZSgpOwogICAgICAgICAgICAgU09BUEJvZHkgYm9keSA9IGVudmVsb3BlLmdldEJvZHkoKTsKIAotICAgICAgICAgICAgLy8gQ3JlYXRlIFNPQVBCb2R5RWxlbWVudCByZXF1ZXN0IAorICAgICAgICAgICAgLy8gQ3JlYXRlIFNPQVBCb2R5RWxlbWVudCByZXF1ZXN0CiAgICAgICAgICAgICBOYW1lIGJvZHlOYW1lID0gZW52ZWxvcGUuY3JlYXRlTmFtZSgicmVxdWVzdC1wcmljZXMiLAogICAgICAgICAgICAgICAgICJSZXF1ZXN0UHJpY2VzIiwgImh0dHA6Ly9zb25hdGEuY29mZmVlYnJlYWsuY29tIik7CiAgICAgICAgICAgICBTT0FQQm9keUVsZW1lbnQgcmVxdWVzdFByaWNlcyA9CiAgICAgICAgICAgICAgICAgYm9keS5hZGRCb2R5RWxlbWVudChib2R5TmFtZSk7Ci0gICAgICAKKwogICAgICAgICAgICAgTmFtZSByZXF1ZXN0TmFtZSA9IGVudmVsb3BlLmNyZWF0ZU5hbWUoInJlcXVlc3QiKTsKLSAgICAgICAgICAgIFNPQVBFbGVtZW50IHJlcXVlc3QgPSAKKyAgICAgICAgICAgIFNPQVBFbGVtZW50IHJlcXVlc3QgPQogICAgICAgICAgICAgICAgIHJlcXVlc3RQcmljZXMuYWRkQ2hpbGRFbGVtZW50KHJlcXVlc3ROYW1lKTsKICAgICAgICAgICAgIHJlcXVlc3QuYWRkVGV4dE5vZGUoIlNlbmQgdXBkYXRlZCBwcmljZSBsaXN0LiIpOwogCkBAIC02Niw5ICs2Niw5IEBACiAKICAgICAgICAgICAgIFZlY3RvciBsaXN0ID0gbmV3IFZlY3RvcigpOwogCi0gICAgICAgICAgICBTT0FQQm9keSByZXNwb25zZUJvZHkgPSAKKyAgICAgICAgICAgIFNPQVBCb2R5IHJlc3BvbnNlQm9keSA9CiAgICAgICAgICAgICAgICAgcmVzcG9uc2UuZ2V0U09BUFBhcnQoKS5nZXRFbnZlbG9wZSgpLmdldEJvZHkoKTsKLSAgICAgICAgICAgIEl0ZXJhdG9yIGl0MSA9IHJlc3BvbnNlQm9keS5nZXRDaGlsZEVsZW1lbnRzKCk7IAorICAgICAgICAgICAgSXRlcmF0b3IgaXQxID0gcmVzcG9uc2VCb2R5LmdldENoaWxkRWxlbWVudHMoKTsKIAogICAgICAgICAgICAgLy8gR2V0IHByaWNlLWxpc3QgZWxlbWVudAogICAgICAgICAgICAgd2hpbGUgKGl0MS5oYXNOZXh0KCkpIHsKQEAgLTkwLDcgKzkwLDcgQEAKICAgICAgICAgICAgIEFycmF5TGlzdCBpdGVtcyA9IG5ldyBBcnJheUxpc3QoKTsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlzdC5zaXplKCk7IGkgPSBpICsgMikgewogICAgICAgICAgICAgICAgIGl0ZW1zLmFkZCgKLSAgICAgICAgICAgICAgICAgICAgbmV3IFByaWNlSXRlbUJlYW4obGlzdC5lbGVtZW50QXQoaSkudG9TdHJpbmcoKSwgCisgICAgICAgICAgICAgICAgICAgIG5ldyBQcmljZUl0ZW1CZWFuKGxpc3QuZWxlbWVudEF0KGkpLnRvU3RyaW5nKCksCiAgICAgICAgICAgICAgICAgICAgIG5ldyBCaWdEZWNpbWFsKGxpc3QuZWxlbWVudEF0KGkgKyAxKS50b1N0cmluZygpKSkpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQobGlzdC5lbGVtZW50QXQoaSkgKyAiICAgICAgICAiKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obGlzdC5lbGVtZW50QXQoaSArIDEpKTsKQEAgLTk4LDkgKzk4LDkgQEAKIAogICAgICAgICAgICAgUHJpY2VJdGVtQmVhbltdIHByaWNlSXRlbXMgPSBuZXcgUHJpY2VJdGVtQmVhbltpdGVtcy5zaXplKCldOwogICAgICAgICAgICAgaW50IGk9MDsKLSAgICAgIAkJCWZvciAoSXRlcmF0b3IgaXQ9aXRlbXMuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOyApIHsKKyAgICAgICAgICAgICAgICAgIGZvciAoSXRlcmF0b3IgaXQ9aXRlbXMuaXRlcmF0b3IoKTsgaXQuaGFzTmV4dCgpOyApIHsKICAgICAgICAgICAgICAgcHJpY2VJdGVtc1tpXSA9IChQcmljZUl0ZW1CZWFuKWl0Lm5leHQoKTsKLSAgICAgICAgICAgICAgaSsrOwkKKyAgICAgICAgICAgICAgaSsrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgRGF0ZSB0b2RheSA9IG5ldyBEYXRlKCk7CiAgICAgICAgICAgICBEYXRlIGVuZERhdGUgPSBEYXRlSGVscGVyLmFkZERheXModG9kYXksIDMwKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zYWFqL3NyYy9jb20vc3VuL2NiL1ByaWNlTGlzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zYWFqL3NyYy9jb20vc3VuL2NiL1ByaWNlTGlzdFNlcnZsZXQuamF2YQppbmRleCBlYjcwZTM3Li5hZGMyODQyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2Fhai9zcmMvY29tL3N1bi9jYi9QcmljZUxpc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NhYWovc3JjL2NvbS9zdW4vY2IvUHJpY2VMaXN0U2VydmxldC5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiAKIHB1YmxpYyBjbGFzcyBQcmljZUxpc3RTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewogICAgIHN0YXRpYyBNZXNzYWdlRmFjdG9yeSBmYWMgPSBudWxsOwotICAgIAorCiAgICAgc3RhdGljIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGZhYyA9IE1lc3NhZ2VGYWN0b3J5Lm5ld0luc3RhbmNlKCk7CkBAIC0zNiwxMiArMzYsMTIgQEAKICAgICAgICAgfQogICAgIH07CiAKLSAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgc2VydmxldENvbmZpZykgCisgICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIHNlcnZsZXRDb25maWcpCiAgICAgICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoc2VydmxldENvbmZpZyk7CiAgICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCAKKworICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxLAogICAgICAgICBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCiAgICAgICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICB0cnkgewpAQCAtNTQsMzUgKzU0LDM1IEBACiAgICAgICAgICAgICAvLyBOb3cgaW50ZXJuYWxpemUgdGhlIGNvbnRlbnRzIG9mIHRoZSBIVFRQIHJlcXVlc3QKICAgICAgICAgICAgIC8vIGFuZCBjcmVhdGUgYSBTT0FQTWVzc2FnZQogICAgICAgICAgICAgU09BUE1lc3NhZ2UgbXNnID0gZmFjLmNyZWF0ZU1lc3NhZ2UoaGVhZGVycywgaXMpOwotICAgICAgCisKICAgICAgICAgICAgIFNPQVBNZXNzYWdlIHJlcGx5ID0gbnVsbDsKICAgICAgICAgICAgIHJlcGx5ID0gb25NZXNzYWdlKG1zZyk7CiAKICAgICAgICAgICAgIGlmIChyZXBseSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLyogCi0gICAgICAgICAgICAgICAgICogTmVlZCB0byBjYWxsIHNhdmVDaGFuZ2VzIGJlY2F1c2Ugd2UncmUgCi0gICAgICAgICAgICAgICAgICogZ29pbmcgdG8gdXNlIHRoZSBNaW1lSGVhZGVycyB0byBzZXQgSFRUUCAKKworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogTmVlZCB0byBjYWxsIHNhdmVDaGFuZ2VzIGJlY2F1c2Ugd2UncmUKKyAgICAgICAgICAgICAgICAgKiBnb2luZyB0byB1c2UgdGhlIE1pbWVIZWFkZXJzIHRvIHNldCBIVFRQCiAgICAgICAgICAgICAgICAgICogcmVzcG9uc2UgaW5mb3JtYXRpb24uIFRoZXNlIE1pbWVIZWFkZXJzCiAgICAgICAgICAgICAgICAgICogYXJlIGdlbmVyYXRlZCBhcyBwYXJ0IG9mIHRoZSBzYXZlLgogICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgIGlmIChyZXBseS5zYXZlUmVxdWlyZWQoKSkgewotICAgICAgICAgICAgICAgICAgICByZXBseS5zYXZlQ2hhbmdlcygpOyAKKyAgICAgICAgICAgICAgICAgICAgcmVwbHkuc2F2ZUNoYW5nZXMoKTsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICByZXNwLnNldFN0YXR1cyhIdHRwU2VydmxldFJlc3BvbnNlLlNDX09LKTsKLSAgICAgICAgICAgICAgICBwdXRIZWFkZXJzKHJlcGx5LmdldE1pbWVIZWFkZXJzKCksIHJlc3ApOyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcHV0SGVhZGVycyhyZXBseS5nZXRNaW1lSGVhZGVycygpLCByZXNwKTsKIAogICAgICAgICAgICAgICAgIC8vIFdyaXRlIG91dCB0aGUgbWVzc2FnZSBvbiB0aGUgcmVzcG9uc2Ugc3RyZWFtCiAgICAgICAgICAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gcmVzcC5nZXRPdXRwdXRTdHJlYW0oKTsKICAgICAgICAgICAgICAgICByZXBseS53cml0ZVRvKG9zKTsKLSAgICAgICAgICAgICAgICBvcy5mbHVzaCgpOyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgb3MuZmx1c2goKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgcmVzcC5zZXRTdGF0dXMoCiAgICAgICAgICAgICAgICAgICAgIEh0dHBTZXJ2bGV0UmVzcG9uc2UuU0NfTk9fQ09OVEVOVCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oIlNBQUogUE9TVCBmYWlsZWQ6ICIgKyAKKyAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKCJTQUFKIFBPU1QgZmFpbGVkOiAiICsKICAgICAgICAgICAgICAgIGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9CkBAIC05NiwxNyArOTYsMTcgQEAKICAgICAgICAgICAgIFN0cmluZyBoZWFkZXJOYW1lID0gKFN0cmluZyllbnVtLm5leHRFbGVtZW50KCk7CiAgICAgICAgICAgICBTdHJpbmcgaGVhZGVyVmFsdWUgPSByZXEuZ2V0SGVhZGVyKGhlYWRlck5hbWUpOwogCi0gICAgICAgICAgICBTdHJpbmdUb2tlbml6ZXIgdmFsdWVzID0gCisgICAgICAgICAgICBTdHJpbmdUb2tlbml6ZXIgdmFsdWVzID0KICAgICAgICAgICAgICAgICBuZXcgU3RyaW5nVG9rZW5pemVyKGhlYWRlclZhbHVlLCAiLCIpOwogICAgICAgICAgICAgd2hpbGUgKHZhbHVlcy5oYXNNb3JlVG9rZW5zKCkpIHsKLSAgICAgICAgICAgICAgICBoZWFkZXJzLmFkZEhlYWRlcihoZWFkZXJOYW1lLCAKKyAgICAgICAgICAgICAgICBoZWFkZXJzLmFkZEhlYWRlcihoZWFkZXJOYW1lLAogICAgICAgICAgICAgICAgICAgICB2YWx1ZXMubmV4dFRva2VuKCkudHJpbSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gaGVhZGVyczsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBwdXRIZWFkZXJzKE1pbWVIZWFkZXJzIGhlYWRlcnMsIAorICAgIHN0YXRpYyB2b2lkIHB1dEhlYWRlcnMoTWltZUhlYWRlcnMgaGVhZGVycywKICAgICAgICAgICAgIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzKSB7CiAKICAgICAgICAgSXRlcmF0b3IgaXQgPSBoZWFkZXJzLmdldEFsbEhlYWRlcnMoKTsKQEAgLTExNSw3ICsxMTUsNyBAQAogCiAgICAgICAgICAgICBTdHJpbmdbXSB2YWx1ZXMgPSBoZWFkZXJzLmdldEhlYWRlcihoZWFkZXIuZ2V0TmFtZSgpKTsKICAgICAgICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID09IDEpIHsKLSAgICAgICAgICAgICAgICByZXMuc2V0SGVhZGVyKGhlYWRlci5nZXROYW1lKCksIAorICAgICAgICAgICAgICAgIHJlcy5zZXRIZWFkZXIoaGVhZGVyLmdldE5hbWUoKSwKICAgICAgICAgICAgICAgICAgICAgaGVhZGVyLmdldFZhbHVlKCkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBTdHJpbmdCdWZmZXIgY29uY2F0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwpAQCAtMTU1LDQzICsxNTUsNDMgQEAKICAgICAgICAgICAgIFNPQVBFbGVtZW50IGNvZmZlZSA9IGxpc3QuYWRkQ2hpbGRFbGVtZW50KGNvZmZlZU4pOwogCiAgICAgICAgICAgICBOYW1lIGNvZmZlZU5tMSA9IGVudmVsb3BlLmNyZWF0ZU5hbWUoImNvZmZlZS1uYW1lIik7Ci0gICAgICAgICAgICBTT0FQRWxlbWVudCBjb2ZmZWVOYW1lID0gCisgICAgICAgICAgICBTT0FQRWxlbWVudCBjb2ZmZWVOYW1lID0KICAgICAgICAgICAgICAgICBjb2ZmZWUuYWRkQ2hpbGRFbGVtZW50KGNvZmZlZU5tMSk7CiAgICAgICAgICAgICBjb2ZmZWVOYW1lLmFkZFRleHROb2RlKCJBcmFiaWNhIik7CiAKICAgICAgICAgICAgIE5hbWUgcHJpY2VOYW1lMSA9IGVudmVsb3BlLmNyZWF0ZU5hbWUoInByaWNlIik7Ci0gICAgICAgICAgICBTT0FQRWxlbWVudCBwcmljZTEgPSAKLSAgICAgICAgICAgICAgICBjb2ZmZWUuYWRkQ2hpbGRFbGVtZW50KHByaWNlTmFtZTEpOyAKKyAgICAgICAgICAgIFNPQVBFbGVtZW50IHByaWNlMSA9CisgICAgICAgICAgICAgICAgY29mZmVlLmFkZENoaWxkRWxlbWVudChwcmljZU5hbWUxKTsKICAgICAgICAgICAgIHByaWNlMS5hZGRUZXh0Tm9kZSgiNC41MCIpOwogCiAgICAgICAgICAgICBOYW1lIGNvZmZlZU5tMiA9IGVudmVsb3BlLmNyZWF0ZU5hbWUoImNvZmZlZS1uYW1lIik7Ci0gICAgICAgICAgICBTT0FQRWxlbWVudCBjb2ZmZWVOYW1lMiA9IAorICAgICAgICAgICAgU09BUEVsZW1lbnQgY29mZmVlTmFtZTIgPQogICAgICAgICAgICAgICAgIGNvZmZlZS5hZGRDaGlsZEVsZW1lbnQoY29mZmVlTm0yKTsKICAgICAgICAgICAgIGNvZmZlZU5hbWUyLmFkZFRleHROb2RlKCJFc3ByZXNzbyIpOwogCiAgICAgICAgICAgICBOYW1lIHByaWNlTmFtZTIgPSBlbnZlbG9wZS5jcmVhdGVOYW1lKCJwcmljZSIpOwotICAgICAgICAgICAgU09BUEVsZW1lbnQgcHJpY2UyID0gCi0gICAgICAgICAgICAgICAgY29mZmVlLmFkZENoaWxkRWxlbWVudChwcmljZU5hbWUyKTsgCisgICAgICAgICAgICBTT0FQRWxlbWVudCBwcmljZTIgPQorICAgICAgICAgICAgICAgIGNvZmZlZS5hZGRDaGlsZEVsZW1lbnQocHJpY2VOYW1lMik7CiAgICAgICAgICAgICBwcmljZTIuYWRkVGV4dE5vZGUoIjUuMDAiKTsKIAogICAgICAgICAgICAgTmFtZSBjb2ZmZWVObTMgPSBlbnZlbG9wZS5jcmVhdGVOYW1lKCJjb2ZmZWUtbmFtZSIpOwotICAgICAgICAgICAgU09BUEVsZW1lbnQgY29mZmVlTmFtZTMgPSAKKyAgICAgICAgICAgIFNPQVBFbGVtZW50IGNvZmZlZU5hbWUzID0KICAgICAgICAgICAgICAgICBjb2ZmZWUuYWRkQ2hpbGRFbGVtZW50KGNvZmZlZU5tMyk7CiAgICAgICAgICAgICBjb2ZmZWVOYW1lMy5hZGRUZXh0Tm9kZSgiRG9yYWRhIik7CiAKICAgICAgICAgICAgIE5hbWUgcHJpY2VOYW1lMyA9IGVudmVsb3BlLmNyZWF0ZU5hbWUoInByaWNlIik7Ci0gICAgICAgICAgICBTT0FQRWxlbWVudCBwcmljZTMgPSAKLSAgICAgICAgICAgICAgICBjb2ZmZWUuYWRkQ2hpbGRFbGVtZW50KHByaWNlTmFtZTMpOyAKKyAgICAgICAgICAgIFNPQVBFbGVtZW50IHByaWNlMyA9CisgICAgICAgICAgICAgICAgY29mZmVlLmFkZENoaWxkRWxlbWVudChwcmljZU5hbWUzKTsKICAgICAgICAgICAgIHByaWNlMy5hZGRUZXh0Tm9kZSgiNi4wMCIpOwogCiAgICAgICAgICAgICBOYW1lIGNvZmZlZU5tNCA9IGVudmVsb3BlLmNyZWF0ZU5hbWUoImNvZmZlZS1uYW1lIik7Ci0gICAgICAgICAgICBTT0FQRWxlbWVudCBjb2ZmZWVOYW1lNCA9IAorICAgICAgICAgICAgU09BUEVsZW1lbnQgY29mZmVlTmFtZTQgPQogICAgICAgICAgICAgICAgIGNvZmZlZS5hZGRDaGlsZEVsZW1lbnQoY29mZmVlTm00KTsKICAgICAgICAgICAgIGNvZmZlZU5hbWU0LmFkZFRleHROb2RlKCJIb3VzZSBCbGVuZCIpOwogCiAgICAgICAgICAgICBOYW1lIHByaWNlTmFtZTQgPSBlbnZlbG9wZS5jcmVhdGVOYW1lKCJwcmljZSIpOwotICAgICAgICAgICAgU09BUEVsZW1lbnQgcHJpY2U0ID0gCi0gICAgICAgICAgICAgICAgY29mZmVlLmFkZENoaWxkRWxlbWVudChwcmljZU5hbWU0KTsgCisgICAgICAgICAgICBTT0FQRWxlbWVudCBwcmljZTQgPQorICAgICAgICAgICAgICAgIGNvZmZlZS5hZGRDaGlsZEVsZW1lbnQocHJpY2VOYW1lNCk7CiAgICAgICAgICAgICBwcmljZTQuYWRkVGV4dE5vZGUoIjUuMDAiKTsKIAogICAgICAgICAgICAgbWVzc2FnZS5zYXZlQ2hhbmdlcygpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NhYWovc3JjL2NvbS9zdW4vY2IvVGVzdE9yZGVyUmVxdWVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NhYWovc3JjL2NvbS9zdW4vY2IvVGVzdE9yZGVyUmVxdWVzdC5qYXZhCmluZGV4IGEwODdiZjkuLjc2MGJlMGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zYWFqL3NyYy9jb20vc3VuL2NiL1Rlc3RPcmRlclJlcXVlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2Fhai9zcmMvY29tL3N1bi9jYi9UZXN0T3JkZXJSZXF1ZXN0LmphdmEKQEAgLTIzLDEzICsyMywxMyBAQAogaW1wb3J0IGpha2FydGEueG1sLnNvYXAuKjsKIAogcHVibGljIGNsYXNzIFRlc3RPcmRlclJlcXVlc3QgewotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBbXSBhcmdzKSB7ICAgIAorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBbXSBhcmdzKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBTT0FQQ29ubmVjdGlvbkZhY3Rvcnkgc2NmID0gU09BUENvbm5lY3Rpb25GYWN0b3J5Lm5ld0luc3RhbmNlKCk7CiAgICAgICAgICAgICBTT0FQQ29ubmVjdGlvbiBjb24gPSBzY2YuY3JlYXRlQ29ubmVjdGlvbigpOwogCiAgICAgICAgICAgICBNZXNzYWdlRmFjdG9yeSBtZiA9IE1lc3NhZ2VGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0gICAgICAgIAorCiAgICAgICAgICAgICBTT0FQTWVzc2FnZSBtc2cgPSBtZi5jcmVhdGVNZXNzYWdlKCk7CiAKICAgICAgICAgICAgIC8vIEFjY2VzcyB0aGUgU09BQkJvZHkgb2JqZWN0CkBAIC02Niw3ICs2Niw3IEBACiAgICAgICAgICAgICBwaG9uZU51bWJlci5hZGRUZXh0Tm9kZSgiOTA4IDk4My02Nzg5Iik7CiAKICAgICAgICAgICAgIGNoaWxkTmFtZSA9IGVudmVsb3BlLmNyZWF0ZU5hbWUoImVtYWlsLWFkZHJlc3MiKTsKLSAgICAgICAgICAgIFNPQVBFbGVtZW50IGVtYWlsQWRkcmVzcyA9IAorICAgICAgICAgICAgU09BUEVsZW1lbnQgZW1haWxBZGRyZXNzID0KICAgICAgICAgICAgICAgICBjdXN0b21lci5hZGRDaGlsZEVsZW1lbnQoY2hpbGROYW1lKTsKICAgICAgICAgICAgIGVtYWlsQWRkcmVzcy5hZGRUZXh0Tm9kZSgicmFnbmlwQGFvbC5jb20iKTsKIApAQCAtODksNyArODksNyBAQAogICAgICAgICAgICAgY2hpbGROYW1lID0gZW52ZWxvcGUuY3JlYXRlTmFtZSgiemlwIik7CiAgICAgICAgICAgICBTT0FQRWxlbWVudCB6aXAgPSBhZGRyZXNzLmFkZENoaWxkRWxlbWVudChjaGlsZE5hbWUpOwogICAgICAgICAgICAgemlwLmFkZFRleHROb2RlKCI5OTk5OSIpOwotICAgIAorCiAgICAgICAgICAgICAvLyBsaW5lLWl0ZW0gMQogICAgICAgICAgICAgY2hpbGROYW1lID0gZW52ZWxvcGUuY3JlYXRlTmFtZSgibGluZS1pdGVtIik7CiAgICAgICAgICAgICBTT0FQRWxlbWVudCBsaW5lSXRlbSA9IG9yZGVyLmFkZENoaWxkRWxlbWVudChjaGlsZE5hbWUpOwpAQCAtMTIzLDcgKzEyMyw3IEBACiAgICAgICAgICAgICBjaGlsZE5hbWUgPSBlbnZlbG9wZS5jcmVhdGVOYW1lKCJ0b3RhbCIpOwogICAgICAgICAgICAgU09BUEVsZW1lbnQgdG90YWwgPSBvcmRlci5hZGRDaGlsZEVsZW1lbnQoY2hpbGROYW1lKTsKICAgICAgICAgICAgIHRvdGFsLmFkZFRleHROb2RlKCIyMS45MCIpOwotICAgIAorCiAgICAgICAgICAgICBVUkwgZW5kcG9pbnQgPSBuZXcgVVJMKAogICAgICAgICAgICAgICAgIFVSTEhlbHBlci5nZXRTYWFqVVJMKCkgKyAiL29yZGVyQ29mZmVlIik7CiAgICAgICAgICAgICBTT0FQTWVzc2FnZSByZXBseSA9IGNvbi5jYWxsKG1zZywgZW5kcG9pbnQpOwpAQCAtMTQ4LDcgKzE0OCw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25maXJtYXRpb24gZm9yIG9yZGVyICMiICsgaWQpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiWW91ciBvcmRlciB3aWxsIGJlIHNoaXBwZWQgb24gIik7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oc2hpcHBpbmdEYXRlKTsgICAgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oc2hpcHBpbmdEYXRlKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NhYWovc3JjL2NvbS9zdW4vY2IvVGVzdFByaWNlTGlzdFJlcXVlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zYWFqL3NyYy9jb20vc3VuL2NiL1Rlc3RQcmljZUxpc3RSZXF1ZXN0LmphdmEKaW5kZXggYzQ4ZjUyZS4uMTcyYmFlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NhYWovc3JjL2NvbS9zdW4vY2IvVGVzdFByaWNlTGlzdFJlcXVlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2Fhai9zcmMvY29tL3N1bi9jYi9UZXN0UHJpY2VMaXN0UmVxdWVzdC5qYXZhCkBAIC0yNiwxMSArMjYsMTEgQEAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgW10gYXJncykgewogCiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBTT0FQQ29ubmVjdGlvbkZhY3Rvcnkgc2NmID0gCisgICAgICAgICAgICBTT0FQQ29ubmVjdGlvbkZhY3Rvcnkgc2NmID0KICAgICAgICAgICAgICAgICBTT0FQQ29ubmVjdGlvbkZhY3RvcnkubmV3SW5zdGFuY2UoKTsKICAgICAgICAgICAgIFNPQVBDb25uZWN0aW9uIGNvbiA9IHNjZi5jcmVhdGVDb25uZWN0aW9uKCk7CiAKLSAgICAgCSAgICBNZXNzYWdlRmFjdG9yeSBtZiA9IE1lc3NhZ2VGYWN0b3J5Lm5ld0luc3RhbmNlKCk7CisgICAgICAgICAgICAgTWVzc2FnZUZhY3RvcnkgbWYgPSBNZXNzYWdlRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwogICAgICAgICAgICAgU09BUE1lc3NhZ2UgbXNnID0gbWYuY3JlYXRlTWVzc2FnZSgpOwogCiAgICAgICAgICAgICAvLyBBY2Nlc3MgdGhlIFNPQUJCb2R5IG9iamVjdApAQCAtMzgsMTQgKzM4LDE0IEBACiAgICAgICAgICAgICBTT0FQRW52ZWxvcGUgZW52ZWxvcGUgPSBwYXJ0LmdldEVudmVsb3BlKCk7CiAgICAgICAgICAgICBTT0FQQm9keSBib2R5ID0gZW52ZWxvcGUuZ2V0Qm9keSgpOwogCi0gICAgICAgICAgICAvLyBjcmVhdGUgU09BUEJvZHlFbGVtZW50IHJlcXVlc3QgCisgICAgICAgICAgICAvLyBjcmVhdGUgU09BUEJvZHlFbGVtZW50IHJlcXVlc3QKICAgICAgICAgICAgIE5hbWUgYm9keU5hbWUgPSBlbnZlbG9wZS5jcmVhdGVOYW1lKCJyZXF1ZXN0LXByaWNlcyIsCiAgICAgICAgICAgICAgICAgIlJlcXVlc3RQcmljZXMiLCAiaHR0cDovL3NvbmF0YS5jb2ZmZWVicmVhay5jb20iKTsKICAgICAgICAgICAgIFNPQVBCb2R5RWxlbWVudCByZXF1ZXN0UHJpY2VzID0KICAgICAgICAgICAgICAgICBib2R5LmFkZEJvZHlFbGVtZW50KGJvZHlOYW1lKTsKLSAgICAgIAorCiAgICAgICAgICAgICBOYW1lIHJlcXVlc3ROYW1lID0gZW52ZWxvcGUuY3JlYXRlTmFtZSgicmVxdWVzdCIpOwotICAgICAgICAgICAgU09BUEVsZW1lbnQgcmVxdWVzdCA9IAorICAgICAgICAgICAgU09BUEVsZW1lbnQgcmVxdWVzdCA9CiAgICAgICAgICAgICAgICAgcmVxdWVzdFByaWNlcy5hZGRDaGlsZEVsZW1lbnQocmVxdWVzdE5hbWUpOwogICAgICAgICAgICAgcmVxdWVzdC5hZGRUZXh0Tm9kZSgiU2VuZCB1cGRhdGVkIHByaWNlIGxpc3QuIik7CiAKQEAgLTYwLDkgKzYwLDkgQEAKICAgICAgICAgICAgIC8vIGdldCBjb250ZW50cyBvZiByZXNwb25zZQogICAgICAgICAgICAgVmVjdG9yIGxpc3QgPSBuZXcgVmVjdG9yKCk7CiAKLSAgICAgICAgICAgIFNPQVBCb2R5IHJlc3BvbnNlQm9keSA9IAorICAgICAgICAgICAgU09BUEJvZHkgcmVzcG9uc2VCb2R5ID0KICAgICAgICAgICAgICAgICByZXNwb25zZS5nZXRTT0FQUGFydCgpLmdldEVudmVsb3BlKCkuZ2V0Qm9keSgpOwotICAgICAgICAgICAgSXRlcmF0b3IgaXQxID0gcmVzcG9uc2VCb2R5LmdldENoaWxkRWxlbWVudHMoKTsgCisgICAgICAgICAgICBJdGVyYXRvciBpdDEgPSByZXNwb25zZUJvZHkuZ2V0Q2hpbGRFbGVtZW50cygpOwogICAgICAgICAgICAgLy8gZ2V0IHByaWNlLWxpc3QgZWxlbWVudAogICAgICAgICAgICAgd2hpbGUgKGl0MS5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgICAgICBTT0FQQm9keUVsZW1lbnQgYm9keUVsID0gKFNPQVBCb2R5RWxlbWVudClpdDEubmV4dCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NlcnZlci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NlcnZlci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGI4MzNlNDYuLmQ1MDQxNmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zZXJ2ZXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2VydmVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogYnVpbGQ9YnVpbGQKIHNyYz1zcmMKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zZXJ2ZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NlcnZlci9idWlsZC54bWwKaW5kZXggOGVkYTJmNC4uMzk1NTYyMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NlcnZlci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NlcnZlci9idWlsZC54bWwKQEAgLTIxLDkgKzIxLDkgQEAKIF0+CiAKIDxwcm9qZWN0IG5hbWU9IkNvZmZlZSBCcmVhayBTZXJ2ZXIiIGRlZmF1bHQ9ImJ1aWxkIiBiYXNlZGlyPSIuIj4KLSAgPHRhcmdldCBuYW1lPSJpbml0Ij4gCi0gICAgICA8dHN0YW1wLz4gCi0gIDwvdGFyZ2V0PiAKKyAgPHRhcmdldCBuYW1lPSJpbml0Ij4KKyAgICAgIDx0c3RhbXAvPgorICA8L3RhcmdldD4KIAogICA8cHJvcGVydHkgZmlsZT0iLi4vLi4vY29tbW9uL2J1aWxkLnByb3BlcnRpZXMiLz4KICAgPHByb3BlcnR5IGZpbGU9ImJ1aWxkLnByb3BlcnRpZXMiLz4KQEAgLTMxLDE2ICszMSwxNiBAQAogICAmdGFyZ2V0czsKIAogICA8dGFyZ2V0IG5hbWU9InByZXBhcmUiIGRlcGVuZHM9ImluaXQiCi0gICAJZGVzY3JpcHRpb249IkNyZWF0ZSBidWlsZCBkaXJlY3Rvcmllcy4iPgorICAgICAgIGRlc2NyaXB0aW9uPSJDcmVhdGUgYnVpbGQgZGlyZWN0b3JpZXMuIj4KICAgICA8bWtkaXIgZGlyPSIke2J1aWxkfSIgLz4KICAgPC90YXJnZXQ+Ci0gIAotICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJwcmVwYXJlIiAKKworICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJwcmVwYXJlIgogICAgICBkZXNjcmlwdGlvbj0iQ29tcGlsZSBDQiBzZXJ2ZXIgSmF2YSBmaWxlcyBhbmQgY29weSBERCBhbmQgc3RhdGljIGZpbGVzLiIgPgotICAgIDxqYXZhYyAKLSAgICAgIHNyY2Rpcj0iJHtzcmN9IiAKKyAgICA8amF2YWMKKyAgICAgIHNyY2Rpcj0iJHtzcmN9IgogICAgICAgZGVzdGRpcj0iJHtidWlsZH0iPgotICAgIAk8aW5jbHVkZSBuYW1lPSIqKi8qLmphdmEiIC8+CisgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqLyouamF2YSIgLz4KICAgICAgIDxjbGFzc3BhdGggcmVmaWQ9ImNsYXNzcGF0aCIgLz4KICAgICAgIDxjbGFzc3BhdGggcGF0aD0iJHtjb21tb259Oi4uL2pheHJwYy9kaXN0L2pheHJwYy1jbGllbnQuamFyOi4uL3NhYWovZGlzdC9zYWFqLWNsaWVudC5qYXIiIC8+CiAgICAgPC9qYXZhYz4KQEAgLTUyLDcgKzUyLDcgQEAKICAgICAgIDxjbGFzc3BhdGggcmVmaWQ9ImNsYXNzcGF0aCIgLz4KICAgICAgIDxjbGFzc3BhdGggcGF0aD0iJHtjb21tb259IiAvPgogICAgICAgPC9qYXZhYz4KLSAgICAgIDxjb3B5IGZpbGU9Ii4uL2NvbW1vbi9zcmMvY29tL3N1bi9jYi9Db2ZmZWVCcmVhay5wcm9wZXJ0aWVzIiAKKyAgICAgIDxjb3B5IGZpbGU9Ii4uL2NvbW1vbi9zcmMvY29tL3N1bi9jYi9Db2ZmZWVCcmVhay5wcm9wZXJ0aWVzIgogICAgICAgICB0b2Rpcj0iJHtidWlsZH0vY29tL3N1bi9jYiIgLz4KICAgICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkfSI+CiAgICAgICA8ZmlsZXNldCBkaXI9IndlYiI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2VydmVyL3NyYy9jb20vc3VuL2NiL0NoZWNrb3V0Rm9ybUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zZXJ2ZXIvc3JjL2NvbS9zdW4vY2IvQ2hlY2tvdXRGb3JtQmVhbi5qYXZhCmluZGV4IDk3OWUzYzEuLjM2MDg2NWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zZXJ2ZXIvc3JjL2NvbS9zdW4vY2IvQ2hlY2tvdXRGb3JtQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zZXJ2ZXIvc3JjL2NvbS9zdW4vY2IvQ2hlY2tvdXRGb3JtQmVhbi5qYXZhCkBAIC0zNiw3ICszNiw3IEBACiAgIHByaXZhdGUgUmV0YWlsUHJpY2VMaXN0IHJwbDsKICAgcHJpdmF0ZSBPcmRlckNvbmZpcm1hdGlvbnMgb2NzOwogICBwcml2YXRlIFJlc291cmNlQnVuZGxlIG1lc3NhZ2VzOwotICAKKwogCiAgIHB1YmxpYyBib29sZWFuIHZhbGlkYXRlKCkgewogICAgIGJvb2xlYW4gYWxsT2s9dHJ1ZTsKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICB9IGVsc2UgewogICAgICAgZXJyb3JzLnB1dCgiZmlyc3ROYW1lIiwiIik7CiAgICAgfQotICAgIAorCiAgICAgaWYgKGxhc3ROYW1lLmVxdWFscygiIikpIHsKICAgICAgIGVycm9ycy5wdXQoImxhc3ROYW1lIixtZXNzYWdlcy5nZXRTdHJpbmcoIkxhc3ROYW1lRXJyb3IiKSk7CiAgICAgICBsYXN0TmFtZT0iIjsKQEAgLTExMSwxMiArMTExLDEyIEBACiAgICAgfSBlbHNlIHsKICAgICAgIHRyeSB7CiAgICAgICAgIGludCB4ID0gSW50ZWdlci5wYXJzZUludCh6aXApOwotICAgICAgCWVycm9ycy5wdXQoInppcCIsIiIpOworICAgICAgICAgIGVycm9ycy5wdXQoInppcCIsIiIpOwogICAgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKICAgICAgICAgZXJyb3JzLnB1dCgiemlwIixtZXNzYWdlcy5nZXRTdHJpbmcoIlppcEVycm9yIikpOwogICAgICAgICB6aXA9IiI7CiAgICAgICAgIGFsbE9rPWZhbHNlOwotICAgICAgfQkKKyAgICAgIH0KICAgICB9CiAKICAgICBpZiAoQ0NOdW1iZXIuZXF1YWxzKCIiKSkgewpAQCAtMTMzLDMxICsxMzMsMzEgQEAKIAogICAgIGlmIChhbGxPaykgewogICAgICAgU3RyaW5nIG9yZGVySWQgPSBDQ051bWJlcjsKLSAgICAgICAKLSAgICAgIEFkZHJlc3NCZWFuIGFkZHJlc3MgPSAKKworICAgICAgQWRkcmVzc0JlYW4gYWRkcmVzcyA9CiAgICAgICAgIG5ldyBBZGRyZXNzQmVhbihzdHJlZXQsIGNpdHksIHN0YXRlLCB6aXApOwotICAgICAgQ3VzdG9tZXJCZWFuIGN1c3RvbWVyID0gCi0gICAgICAgIG5ldyBDdXN0b21lckJlYW4oZmlyc3ROYW1lLCBsYXN0TmFtZSwgCisgICAgICBDdXN0b21lckJlYW4gY3VzdG9tZXIgPQorICAgICAgICBuZXcgQ3VzdG9tZXJCZWFuKGZpcnN0TmFtZSwgbGFzdE5hbWUsCiAgICAgICAgICAgIigiICsgYXJlYUNvZGUrICIpICIgKyBwaG9uZU51bWJlciwgZW1haWwpOwotICAgICAgICAgIAotICAgICAgZm9yIChJdGVyYXRvciBkID0gcnBsLmdldERpc3RyaWJ1dG9ycygpLml0ZXJhdG9yKCk7IAorCisgICAgICBmb3IgKEl0ZXJhdG9yIGQgPSBycGwuZ2V0RGlzdHJpYnV0b3JzKCkuaXRlcmF0b3IoKTsKICAgICAgICAgICBkLmhhc05leHQoKTsgKSB7CiAgICAgICAgIFN0cmluZyBkaXN0cmlidXRvciA9IChTdHJpbmcpZC5uZXh0KCk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihkaXN0cmlidXRvcik7CQkJCQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZGlzdHJpYnV0b3IpOwogICAgICAgICBBcnJheUxpc3QgbGlzID0gbmV3IEFycmF5TGlzdCgpOwogICAgICAgICBCaWdEZWNpbWFsIHByaWNlID0gbmV3IEJpZ0RlY2ltYWwoIjAuMDAiKTsKICAgICAgICAgQmlnRGVjaW1hbCB0b3RhbCA9IG5ldyBCaWdEZWNpbWFsKCIwLjAwIik7Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgYyA9IGNhcnQuZ2V0SXRlbXMoKS5pdGVyYXRvcigpOyAKKyAgICAgICAgZm9yIChJdGVyYXRvciBjID0gY2FydC5nZXRJdGVtcygpLml0ZXJhdG9yKCk7CiAgICAgICAgICAgICBjLmhhc05leHQoKTsgKSB7CiAgICAgICAgICAgU2hvcHBpbmdDYXJ0SXRlbSBzY2kgPSAoU2hvcHBpbmdDYXJ0SXRlbSkgYy5uZXh0KCk7CiAgICAgICAgICAgaWYgKChzY2kuZ2V0SXRlbSgpLmdldERpc3RyaWJ1dG9yKCkpLgotICAgICAgICAgICAgICBlcXVhbHMoZGlzdHJpYnV0b3IpICYmIAorICAgICAgICAgICAgICBlcXVhbHMoZGlzdHJpYnV0b3IpICYmCiAgICAgICAgICAgICAgIHNjaS5nZXRQb3VuZHMoKS5mbG9hdFZhbHVlKCkgPiAwKSB7CiAgICAgICAgICAgICBwcmljZSA9IHNjaS5nZXRJdGVtKCkuZ2V0V2hvbGVzYWxlUHJpY2VQZXJQb3VuZCgpLgotICAgICAgICAgICAgICBtdWx0aXBseShzY2kuZ2V0UG91bmRzKCkpOwkKKyAgICAgICAgICAgICAgbXVsdGlwbHkoc2NpLmdldFBvdW5kcygpKTsKICAgICAgICAgICAgIHRvdGFsID0gdG90YWwuYWRkKHByaWNlKTsKICAgICAgICAgICAgIExpbmVJdGVtQmVhbiBsaSA9IG5ldyBMaW5lSXRlbUJlYW4oCi0gICAgICAgICAgICAgIHNjaS5nZXRJdGVtKCkuZ2V0Q29mZmVlTmFtZSgpLCBzY2kuZ2V0UG91bmRzKCksIAorICAgICAgICAgICAgICBzY2kuZ2V0SXRlbSgpLmdldENvZmZlZU5hbWUoKSwgc2NpLmdldFBvdW5kcygpLAogICAgICAgICAgICAgICBzY2kuZ2V0SXRlbSgpLmdldFdob2xlc2FsZVByaWNlUGVyUG91bmQoKSk7CiAgICAgICAgICAgICBsaXMuYWRkKGxpKTsKICAgICAgICAgICB9CkBAIC0xNjksMTIgKzE2OSwxMiBAQAogICAgICAgICAgIGxpbmVJdGVtc1tpXSA9IChMaW5lSXRlbUJlYW4pai5uZXh0KCk7CiAgICAgICAgICAgaSsrOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChsaW5lSXRlbXMubGVuZ3RoICE9IDApIHsKLSAgICAgICAgICBPcmRlckJlYW4gb3JkZXIgPSBuZXcgT3JkZXJCZWFuKGFkZHJlc3MsIGN1c3RvbWVyLCAKKyAgICAgICAgICBPcmRlckJlYW4gb3JkZXIgPSBuZXcgT3JkZXJCZWFuKGFkZHJlc3MsIGN1c3RvbWVyLAogICAgICAgICAgICAgb3JkZXJJZCwgbGluZUl0ZW1zLCB0b3RhbCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICBTdHJpbmcgU0FBSk9yZGVyVVJMID0gCisKKyAgICAgICAgICBTdHJpbmcgU0FBSk9yZGVyVVJMID0KICAgICAgICAgICAgIFVSTEhlbHBlci5nZXRTYWFqVVJMKCkgKyAiL29yZGVyQ29mZmVlIjsKICAgICAgICAgICBpZiAoZGlzdHJpYnV0b3IuZXF1YWxzKFNBQUpPcmRlclVSTCkpIHsKICAgICAgICAgICAgIE9yZGVyUmVxdWVzdCBvciA9IG5ldyBPcmRlclJlcXVlc3QoU0FBSk9yZGVyVVJMKTsKQEAgLTE4MiwxNyArMTgyLDE3IEBACiAgICAgICAgICAgfQogICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgT3JkZXJDYWxsZXIgb2NhbGxlciA9IG5ldyBPcmRlckNhbGxlcihkaXN0cmlidXRvcik7Ci0gICAgICAgICAgICBjb25maXJtYXRpb24gPSBvY2FsbGVyLnBsYWNlT3JkZXIob3JkZXIpOwkJCQkKKyAgICAgICAgICAgIGNvbmZpcm1hdGlvbiA9IG9jYWxsZXIucGxhY2VPcmRlcihvcmRlcik7CiAgICAgICAgICAgfQotICAgICAgICAgIE9yZGVyQ29uZmlybWF0aW9uIG9jID0gCisgICAgICAgICAgT3JkZXJDb25maXJtYXRpb24gb2MgPQogICAgICAgICAgICAgbmV3IE9yZGVyQ29uZmlybWF0aW9uKG9yZGVyLCBjb25maXJtYXRpb24pOwogICAgICAgICAgIG9jcy5hZGQob2MpOwotICAgICAgICB9IAorICAgICAgICB9CiAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBhbGxPazsKICAgfQotICAKKwogICBwdWJsaWMgSGFzaE1hcCBnZXRFcnJvcnMoKSB7CiAgICAgcmV0dXJuIGVycm9yczsKICAgfQpAQCAtMjIwLDcgKzIyMCw3IEBACiAgICB0aGlzLm1lc3NhZ2VzID0gbWVzc2FnZXM7CiAgICBvY3MgPSBuZXcgT3JkZXJDb25maXJtYXRpb25zKCk7CiAgIH0KLSAgCisKICAgcHVibGljIFN0cmluZyBnZXRGaXJzdE5hbWUoKSB7CiAgICAgcmV0dXJuIGZpcnN0TmFtZTsKICAgfQpAQCAtMjQwLDM4ICsyNDAsMzggQEAKICAgcHVibGljIFN0cmluZyBnZXRBcmVhQ29kZSgpIHsKICAgICByZXR1cm4gYXJlYUNvZGU7CiAgIH0KLSAgCisKICAgcHVibGljIFN0cmluZyBnZXRQaG9uZU51bWJlcigpIHsKICAgICByZXR1cm4gcGhvbmVOdW1iZXI7CiAgIH0KLSAgIAorCiAgIHB1YmxpYyBTdHJpbmcgZ2V0U3RyZWV0KCkgewogICAgIHJldHVybiBzdHJlZXQ7CiAgIH0KLSAgIAorCiAgIHB1YmxpYyBTdHJpbmcgZ2V0Q2l0eSgpIHsKICAgICByZXR1cm4gY2l0eTsKICAgfQotICAgCisKICAgcHVibGljIFN0cmluZyBnZXRTdGF0ZSgpIHsKICAgICByZXR1cm4gc3RhdGU7CiAgIH0KLSAgIAotICAKKworCiAgIHB1YmxpYyBpbnQgZ2V0Q0NPcHRpb24oKSB7CiAgICAgcmV0dXJuIENDT3B0aW9uOwogICB9Ci0gCi0gIAorCisKICAgcHVibGljIFN0cmluZyBnZXRDQ051bWJlcigpIHsKICAgICByZXR1cm4gQ0NOdW1iZXI7CiAgIH0KLSAgIAotICAKKworCiAgIHB1YmxpYyBPcmRlckNvbmZpcm1hdGlvbnMgZ2V0T3JkZXJDb25maXJtYXRpb25zKCkgewogICAgIHJldHVybiBvY3M7CiAgIH0KLSAgCisKICAgcHVibGljIHZvaWQgc2V0TWVzc2FnZXMoUmVzb3VyY2VCdW5kbGUgbWVzc2FnZXMpIHsKICAgICB0aGlzLm1lc3NhZ2VzPW1lc3NhZ2VzOwogICB9CkBAIC0yOTgsMjcgKzI5OCwyNyBAQAogICBwdWJsaWMgdm9pZCBzZXRQaG9uZU51bWJlcihTdHJpbmcgcGhvbmVOdW1iZXIpIHsKICAgICB0aGlzLnBob25lTnVtYmVyPXBob25lTnVtYmVyIDsKICAgfQotICAKKwogICBwdWJsaWMgdm9pZCBzZXRTdHJlZXQoU3RyaW5nIHN0cmVldCkgewogICAgIHRoaXMuc3RyZWV0PXN0cmVldCA7CiAgIH0KLSAgCisKICAgcHVibGljIHZvaWQgc2V0Q2l0eShTdHJpbmcgY2l0eSkgewogICAgIHRoaXMuY2l0eT1jaXR5IDsKICAgfQotICAKKwogICBwdWJsaWMgdm9pZCBzZXRTdGF0ZShTdHJpbmcgc3RhdGUpIHsKICAgICB0aGlzLnN0YXRlPXN0YXRlIDsKICAgfQotICAKKwogICBwdWJsaWMgdm9pZCBzZXRDQ09wdGlvbihpbnQgQ0NPcHRpb24pIHsKICAgICB0aGlzLkNDT3B0aW9uPUNDT3B0aW9uIDsKICAgfQogICBwdWJsaWMgdm9pZCBzZXRDQ051bWJlcihTdHJpbmcgQ0NOdW1iZXIpIHsKICAgICB0aGlzLkNDTnVtYmVyPUNDTnVtYmVyIDsKICAgfQotICAKLSAgcHVibGljIHZvaWQgc2V0RXJyb3JzKFN0cmluZyBrZXksIFN0cmluZyBtc2cpIHsJCisKKyAgcHVibGljIHZvaWQgc2V0RXJyb3JzKFN0cmluZyBrZXksIFN0cmluZyBtc2cpIHsKICAgICBlcnJvcnMucHV0KGtleSxtc2cpOwogICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zZXJ2ZXIvc3JjL2NvbS9zdW4vY2IvRGlzcGF0Y2hlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NlcnZlci9zcmMvY29tL3N1bi9jYi9EaXNwYXRjaGVyLmphdmEKaW5kZXggZGIwM2M5Zi4uN2ZiNDc0NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NlcnZlci9zcmMvY29tL3N1bi9jYi9EaXNwYXRjaGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NlcnZlci9zcmMvY29tL3N1bi9jYi9EaXNwYXRjaGVyLmphdmEKQEAgLTIyLDEyICsyMiwxMiBAQAogaW1wb3J0IGphdmEubWF0aC5CaWdEZWNpbWFsOwogCiBwdWJsaWMgY2xhc3MgRGlzcGF0Y2hlciBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKLSAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHsgICAKKyAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHsKICAgICBIdHRwU2Vzc2lvbiBzZXNzaW9uID0gcmVxdWVzdC5nZXRTZXNzaW9uKCk7CiAgICAgUmVzb3VyY2VCdW5kbGUgbWVzc2FnZXMgPSAoUmVzb3VyY2VCdW5kbGUpc2Vzc2lvbi5nZXRBdHRyaWJ1dGUoIm1lc3NhZ2VzIik7CiAgICAgaWYgKG1lc3NhZ2VzID09IG51bGwpIHsKICAgICAgICAgTG9jYWxlIGxvY2FsZT1yZXF1ZXN0LmdldExvY2FsZSgpOwotICAgICAgICBtZXNzYWdlcyA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZSgiY29tLnN1bi5jYi5tZXNzYWdlcy5DQk1lc3NhZ2VzIiwgbG9jYWxlKTsgCisgICAgICAgIG1lc3NhZ2VzID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKCJjb20uc3VuLmNiLm1lc3NhZ2VzLkNCTWVzc2FnZXMiLCBsb2NhbGUpOwogICAgICAgICBzZXNzaW9uLnNldEF0dHJpYnV0ZSgibWVzc2FnZXMiLCBtZXNzYWdlcyk7CiAgICAgfQogCkBAIC05NSw3ICs5NSw3IEBACiAgICAgICAgIGNhcnQgPSBuZXcgU2hvcHBpbmdDYXJ0KHJwbCk7CiAgICAgICAgIHNlc3Npb24uc2V0QXR0cmlidXRlKCJjYXJ0IiwgY2FydCk7CiAgICAgfQotIAorCiAgICAgaWYgKHNlbGVjdGVkU2NyZWVuLmVxdWFscygiL29yZGVyRm9ybSIpKSB7CiAgICAgICBjYXJ0LmNsZWFyKCk7CiAgICAgICBmb3IoSXRlcmF0b3IgaSA9IHJwbC5nZXRJdGVtcygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zZXJ2ZXIvc3JjL2NvbS9zdW4vY2IvSkFYUlF1ZXJ5QnlOYW1lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2VydmVyL3NyYy9jb20vc3VuL2NiL0pBWFJRdWVyeUJ5TmFtZS5qYXZhCmluZGV4IDFkN2EzZDcuLjk3M2VmZTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zZXJ2ZXIvc3JjL2NvbS9zdW4vY2IvSkFYUlF1ZXJ5QnlOYW1lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NlcnZlci9zcmMvY29tL3N1bi9jYi9KQVhSUXVlcnlCeU5hbWUuamF2YQpAQCAtMTYsMjAgKzE2LDIwIEBACiAKIHBhY2thZ2UgY29tLnN1bi5jYjsKIAotaW1wb3J0IGphdmF4LnhtbC5yZWdpc3RyeS4qOyAKLWltcG9ydCBqYXZheC54bWwucmVnaXN0cnkuaW5mb21vZGVsLio7IAoraW1wb3J0IGphdmF4LnhtbC5yZWdpc3RyeS4qOworaW1wb3J0IGphdmF4LnhtbC5yZWdpc3RyeS5pbmZvbW9kZWwuKjsKIGltcG9ydCBqYXZhLm5ldC4qOwogaW1wb3J0IGphdmEudXRpbC4qOwogCiAvKioKLSAqIFRoZSBKQVhSUXVlcnlCeU5hbWUgY2xhc3MgY29uc2lzdHMgb2YgYSBtYWluIG1ldGhvZCwgYSAKLSAqIG1ha2VDb25uZWN0aW9uIG1ldGhvZCwgYW4gZXhlY3V0ZVF1ZXJ5IG1ldGhvZCwgYW5kIHNvbWUgCi0gKiBoZWxwZXIgbWV0aG9kcy4gSXQgc2VhcmNoZXMgYSByZWdpc3RyeSBmb3IgCi0gKiBpbmZvcm1hdGlvbiBhYm91dCBvcmdhbml6YXRpb25zIHdob3NlIG5hbWVzIGNvbnRhaW4gYSAKKyAqIFRoZSBKQVhSUXVlcnlCeU5hbWUgY2xhc3MgY29uc2lzdHMgb2YgYSBtYWluIG1ldGhvZCwgYQorICogbWFrZUNvbm5lY3Rpb24gbWV0aG9kLCBhbiBleGVjdXRlUXVlcnkgbWV0aG9kLCBhbmQgc29tZQorICogaGVscGVyIG1ldGhvZHMuIEl0IHNlYXJjaGVzIGEgcmVnaXN0cnkgZm9yCisgKiBpbmZvcm1hdGlvbiBhYm91dCBvcmdhbml6YXRpb25zIHdob3NlIG5hbWVzIGNvbnRhaW4gYQogICogdXNlci1zdXBwbGllZCBzdHJpbmcuCi0gKiAKLSAqIFRvIHJ1biB0aGlzIHByb2dyYW0sIHVzZSB0aGUgY29tbWFuZCAKLSAqIAorICoKKyAqIFRvIHJ1biB0aGlzIHByb2dyYW0sIHVzZSB0aGUgY29tbWFuZAorICoKICAqICAgICBhbnQgLURxdWVyeS1zdHJpbmc9PHZhbHVlPiBydW4tcXVlcnkKICAqCiAgKiBhZnRlciBzdGFydGluZyBUb21jYXQgYW5kIFhpbmRpY2UuCkBAIC01MCw3ICs1MCw3IEBACiAgICAgICAgIH0KICAgICAgICAgU3RyaW5nIHF1ZXJ5U3RyaW5nID0gbmV3IFN0cmluZyhhcmdzWzBdKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJRdWVyeSBzdHJpbmcgaXMgIiArIHF1ZXJ5U3RyaW5nKTsKLSAgICAgICAgCisKICAgICAgICAgSkFYUlF1ZXJ5QnlOYW1lIGpxID0gbmV3IEpBWFJRdWVyeUJ5TmFtZSgpOwogCiAgICAgICAgIGNvbm5lY3Rpb24gPSBqcS5tYWtlQ29ubmVjdGlvbihxdWVyeVVSTCwgcHVibGlzaFVSTCk7CkBAIC02MSwxMSArNjEsMTEgQEAKICAgICAvKioKICAgICAgKiBFc3RhYmxpc2hlcyBhIGNvbm5lY3Rpb24gdG8gYSByZWdpc3RyeS4KICAgICAgKgotICAgICAqIEBwYXJhbSBxdWVyeVVybAl0aGUgVVJMIG9mIHRoZSBxdWVyeSByZWdpc3RyeQotICAgICAqIEBwYXJhbSBwdWJsaXNoVXJsCXRoZSBVUkwgb2YgdGhlIHB1Ymxpc2ggcmVnaXN0cnkKKyAgICAgKiBAcGFyYW0gcXVlcnlVcmwgICAgdGhlIFVSTCBvZiB0aGUgcXVlcnkgcmVnaXN0cnkKKyAgICAgKiBAcGFyYW0gcHVibGlzaFVybCAgICB0aGUgVVJMIG9mIHRoZSBwdWJsaXNoIHJlZ2lzdHJ5CiAgICAgICogQHJldHVybiB0aGUgY29ubmVjdGlvbgogICAgICAqLwotICAgIHB1YmxpYyBDb25uZWN0aW9uIG1ha2VDb25uZWN0aW9uKFN0cmluZyBxdWVyeVVybCwgCisgICAgcHVibGljIENvbm5lY3Rpb24gbWFrZUNvbm5lY3Rpb24oU3RyaW5nIHF1ZXJ5VXJsLAogICAgICAgICBTdHJpbmcgcHVibGlzaFVybCkgewogCiAgICAgICAgIC8qCkBAIC03OCwyNCArNzgsMjQgQEAKICAgICAgICAgU3RyaW5nIGh0dHBQcm94eUhvc3QgPSAiIjsKICAgICAgICAgU3RyaW5nIGh0dHBQcm94eVBvcnQgPSAiIjsKIAotICAgICAgICAvKiAKLSAgICAgICAgICogRGVmaW5lIGNvbm5lY3Rpb24gY29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzLiAKKyAgICAgICAgLyoKKyAgICAgICAgICogRGVmaW5lIGNvbm5lY3Rpb24gY29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzLgogICAgICAgICAgKiBGb3Igc2ltcGxlIHF1ZXJpZXMsIHlvdSBuZWVkIHRoZSBxdWVyeSBVUkwuCi0gICAgICAgICAqIFRvIG9idGFpbiB0aGUgY29ubmVjdGlvbiBmYWN0b3J5IGNsYXNzLCBzZXQgYSBTeXN0ZW0gCisgICAgICAgICAqIFRvIG9idGFpbiB0aGUgY29ubmVjdGlvbiBmYWN0b3J5IGNsYXNzLCBzZXQgYSBTeXN0ZW0KICAgICAgICAgICogICBwcm9wZXJ0eS4KICAgICAgICAgICovCiAgICAgICAgIFByb3BlcnRpZXMgcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOwogICAgICAgICBwcm9wcy5zZXRQcm9wZXJ0eSgiamF2YXgueG1sLnJlZ2lzdHJ5LnF1ZXJ5TWFuYWdlclVSTCIsCiAgICAgICAgICAgICBxdWVyeVVybCk7Ci0gICAgICAgIHByb3BzLnNldFByb3BlcnR5KCJjb20uc3VuLnhtbC5yZWdpc3RyeS5odHRwLnByb3h5SG9zdCIsIAorICAgICAgICBwcm9wcy5zZXRQcm9wZXJ0eSgiY29tLnN1bi54bWwucmVnaXN0cnkuaHR0cC5wcm94eUhvc3QiLAogICAgICAgICAgICAgaHR0cFByb3h5SG9zdCk7Ci0gICAgICAgIHByb3BzLnNldFByb3BlcnR5KCJjb20uc3VuLnhtbC5yZWdpc3RyeS5odHRwLnByb3h5UG9ydCIsIAorICAgICAgICBwcm9wcy5zZXRQcm9wZXJ0eSgiY29tLnN1bi54bWwucmVnaXN0cnkuaHR0cC5wcm94eVBvcnQiLAogICAgICAgICAgICAgaHR0cFByb3h5UG9ydCk7CiAKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgY29ubmVjdGlvbiwgcGFzc2luZyBpdCB0aGUgCisgICAgICAgICAgICAvLyBDcmVhdGUgdGhlIGNvbm5lY3Rpb24sIHBhc3NpbmcgaXQgdGhlCiAgICAgICAgICAgICAvLyBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMKLSAgICAgICAgICAgIENvbm5lY3Rpb25GYWN0b3J5IGZhY3RvcnkgPSAKKyAgICAgICAgICAgIENvbm5lY3Rpb25GYWN0b3J5IGZhY3RvcnkgPQogICAgICAgICAgICAgICAgIENvbm5lY3Rpb25GYWN0b3J5Lm5ld0luc3RhbmNlKCk7CiAgICAgICAgICAgICBmYWN0b3J5LnNldFByb3BlcnRpZXMocHJvcHMpOwogICAgICAgICAgICAgY29ubmVjdGlvbiA9IGZhY3RvcnkuY3JlYXRlQ29ubmVjdGlvbigpOwpAQCAtMTEwLDExICsxMTAsMTEgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY29ubmVjdGlvbjsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zICBvcmdhbml6YXRpb25zIGNvbnRhaW5pbmcgYSBzdHJpbmcuCiAgICAgICoKLSAgICAgKiBAcGFyYW0gcVN0cmluZwl0aGUgc3RyaW5nIGFyZ3VtZW50CisgICAgICogQHBhcmFtIHFTdHJpbmcgICAgdGhlIHN0cmluZyBhcmd1bWVudAogICAgICAqIEByZXR1cm4gYSBjb2xsZWN0aW9uIG9mIG9yZ2FuaXphdGlvbnMKICAgICAgKi8KICAgICBwdWJsaWMgQ29sbGVjdGlvbiBleGVjdXRlUXVlcnkoU3RyaW5nIHFTdHJpbmcpIHsKQEAgLTEzNywyNSArMTM3LDI1IEBACiAgICAgICAgICAgICAvL25hbWVQYXR0ZXJucy5hZGQoIiUiICsgcVN0cmluZyArICIlIik7CiAKICAgICAgICAgICAgIC8vIEZpbmQgdXNpbmcgdGhlIG5hbWUKLSAgICAgICAgICAgIEJ1bGtSZXNwb25zZSByZXNwb25zZSA9IAotICAgICAgICAgICAgICAgIGJxbS5maW5kT3JnYW5pemF0aW9ucyhmaW5kUXVhbGlmaWVycywgCisgICAgICAgICAgICBCdWxrUmVzcG9uc2UgcmVzcG9uc2UgPQorICAgICAgICAgICAgICAgIGJxbS5maW5kT3JnYW5pemF0aW9ucyhmaW5kUXVhbGlmaWVycywKICAgICAgICAgICAgICAgICAgICAgbmFtZVBhdHRlcm5zLCBudWxsLCBudWxsLCBudWxsLCBudWxsKTsKICAgICAgICAgICAgIG9yZ3MgPSByZXNwb25zZS5nZXRDb2xsZWN0aW9uKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0gCi0gICAgICAgIAorICAgICAgICB9CisKICAgICAgICAgcmV0dXJuIG9yZ3M7CiAgICAgfQogCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgbmFtZSB2YWx1ZSBmb3IgYSByZWdpc3RyeSBvYmplY3QuCiAgICAgICoKLSAgICAgKiBAcGFyYW0gcm8JYSBSZWdpc3RyeU9iamVjdAotICAgICAqIEByZXR1cm4JCXRoZSBTdHJpbmcgdmFsdWUKKyAgICAgKiBAcGFyYW0gcm8gICAgYSBSZWdpc3RyeU9iamVjdAorICAgICAqIEByZXR1cm4gICAgICAgIHRoZSBTdHJpbmcgdmFsdWUKICAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoUmVnaXN0cnlPYmplY3Qgcm8pIAorICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZShSZWdpc3RyeU9iamVjdCBybykKICAgICAgICAgdGhyb3dzIEpBWFJFeGNlcHRpb24gewogCiAgICAgICAgIHRyeSB7CkBAIC0xNjQsMTQgKzE2NCwxNCBAQAogICAgICAgICAgICAgcmV0dXJuICJObyBOYW1lIjsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIGRlc2NyaXB0aW9uIHZhbHVlIGZvciBhIHJlZ2lzdHJ5IG9iamVjdC4KICAgICAgKgotICAgICAqIEBwYXJhbSBybwlhIFJlZ2lzdHJ5T2JqZWN0Ci0gICAgICogQHJldHVybgkJdGhlIFN0cmluZyB2YWx1ZQorICAgICAqIEBwYXJhbSBybyAgICBhIFJlZ2lzdHJ5T2JqZWN0CisgICAgICogQHJldHVybiAgICAgICAgdGhlIFN0cmluZyB2YWx1ZQogICAgICAqLwotICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oUmVnaXN0cnlPYmplY3Qgcm8pIAorICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oUmVnaXN0cnlPYmplY3Qgcm8pCiAgICAgICAgIHRocm93cyBKQVhSRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJldHVybiByby5nZXREZXNjcmlwdGlvbigpLmdldFZhbHVlKCk7CkBAIC0xNzksMTQgKzE3OSwxNCBAQAogICAgICAgICAgICAgcmV0dXJuICJObyBEZXNjcmlwdGlvbiI7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSBrZXkgaWQgdmFsdWUgZm9yIGEgcmVnaXN0cnkgb2JqZWN0LgogICAgICAqCi0gICAgICogQHBhcmFtIHJvCWEgUmVnaXN0cnlPYmplY3QKLSAgICAgKiBAcmV0dXJuCQl0aGUgU3RyaW5nIHZhbHVlCisgICAgICogQHBhcmFtIHJvICAgIGEgUmVnaXN0cnlPYmplY3QKKyAgICAgKiBAcmV0dXJuICAgICAgICB0aGUgU3RyaW5nIHZhbHVlCiAgICAgICovCi0gICAgcHVibGljIFN0cmluZyBnZXRLZXkoUmVnaXN0cnlPYmplY3Qgcm8pIAorICAgIHB1YmxpYyBTdHJpbmcgZ2V0S2V5KFJlZ2lzdHJ5T2JqZWN0IHJvKQogICAgICAgICB0aHJvd3MgSkFYUkV4Y2VwdGlvbiB7CiAKICAgICAgICAgdHJ5IHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zZXJ2ZXIvc3JjL2NvbS9zdW4vY2IvT3JkZXJDb25maXJtYXRpb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zZXJ2ZXIvc3JjL2NvbS9zdW4vY2IvT3JkZXJDb25maXJtYXRpb24uamF2YQppbmRleCAyYjg5ZWM3Li5hOTUxNTQ5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2VydmVyL3NyYy9jb20vc3VuL2NiL09yZGVyQ29uZmlybWF0aW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NlcnZlci9zcmMvY29tL3N1bi9jYi9PcmRlckNvbmZpcm1hdGlvbi5qYXZhCkBAIC0xNSw3ICsxNSw3IEBACiAgKi8KIAogcGFja2FnZSBjb20uc3VuLmNiOwotIAorCiBwdWJsaWMgY2xhc3MgT3JkZXJDb25maXJtYXRpb24gewogCiAgIHByaXZhdGUgT3JkZXJCZWFuIG9iOwpAQCAtMjUsMTQgKzI1LDE0IEBACiAgICAgIHRoaXMub2IgPSBvYjsKICAgICAgdGhpcy5jYiA9IGNiOwogICB9Ci0gIAorCiAgIHB1YmxpYyBPcmRlckJlYW4gZ2V0T3JkZXJCZWFuKCkgewogICAgIHJldHVybiBvYjsKICAgfQotICAKKwogICBwdWJsaWMgQ29uZmlybWF0aW9uQmVhbiBnZXRDb25maXJtYXRpb25CZWFuKCkgewogICAgIHJldHVybiBjYjsKLSAgfSAKKyAgfQogfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zZXJ2ZXIvc3JjL2NvbS9zdW4vY2IvT3JkZXJDb25maXJtYXRpb25zLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2VydmVyL3NyYy9jb20vc3VuL2NiL09yZGVyQ29uZmlybWF0aW9ucy5qYXZhCmluZGV4IGJmMThmZDMuLjRlNTRiZmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zZXJ2ZXIvc3JjL2NvbS9zdW4vY2IvT3JkZXJDb25maXJtYXRpb25zLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NlcnZlci9zcmMvY29tL3N1bi9jYi9PcmRlckNvbmZpcm1hdGlvbnMuamF2YQpAQCAtMTcsMTkgKzE3LDE5IEBACiBwYWNrYWdlIGNvbS5zdW4uY2I7CiAKIGltcG9ydCBqYXZhLnV0aWwuKjsKLSAKKwogcHVibGljIGNsYXNzIE9yZGVyQ29uZmlybWF0aW9ucyB7CiAgIEFycmF5TGlzdCBpdGVtcyA9IG51bGw7CiAKICAgcHVibGljIE9yZGVyQ29uZmlybWF0aW9ucygpIHsKLSAgCWl0ZW1zID0gbmV3IEFycmF5TGlzdCgpOworICAgICAgaXRlbXMgPSBuZXcgQXJyYXlMaXN0KCk7CiAgIH0KIAogICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgYWRkKE9yZGVyQ29uZmlybWF0aW9uIG9jKSB7CiAgICAgaXRlbXMuYWRkKG9jKTsKICAgfQotICAKLSAgCisKKwogICBwdWJsaWMgc3luY2hyb25pemVkIENvbGxlY3Rpb24gZ2V0SXRlbXMoKSB7CiAgICAgICByZXR1cm4gaXRlbXM7CiAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zZXJ2ZXIvc3JjL2NvbS9zdW4vY2IvUmV0YWlsUHJpY2VMaXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2VydmVyL3NyYy9jb20vc3VuL2NiL1JldGFpbFByaWNlTGlzdC5qYXZhCmluZGV4IDM1N2M2NzEuLmY1MTcxZTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zZXJ2ZXIvc3JjL2NvbS9zdW4vY2IvUmV0YWlsUHJpY2VMaXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NlcnZlci9zcmMvY29tL3N1bi9jYi9SZXRhaWxQcmljZUxpc3QuamF2YQpAQCAtMTksOCArMTksOCBAQAogaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOwogaW1wb3J0IGphdmEubWF0aC5CaWdEZWNpbWFsOwogaW1wb3J0IGphdmEudXRpbC4qOwotaW1wb3J0IGphdmF4LnhtbC5yZWdpc3RyeS4qOyAKLWltcG9ydCBqYXZheC54bWwucmVnaXN0cnkuaW5mb21vZGVsLio7IAoraW1wb3J0IGphdmF4LnhtbC5yZWdpc3RyeS4qOworaW1wb3J0IGphdmF4LnhtbC5yZWdpc3RyeS5pbmZvbW9kZWwuKjsKIAogcHVibGljIGNsYXNzIFJldGFpbFByaWNlTGlzdCBpbXBsZW1lbnRzIFNlcmlhbGl6YWJsZSB7CiAKQEAgLTYyLDcgKzYyLDcgQEAKIAogICAgICAgICAgICAgICAvLyBHZXQgcHJpY2UgbGlzdCBmcm9tIHNlcnZpY2UgYXQgZGlzdHJpYnV0b3IgVVJJCiAgICAgICAgICAgICAgIFByaWNlTGlzdEJlYW4gcHJpY2VMaXN0ID0gUHJpY2VGZXRjaGVyLmdldFByaWNlTGlzdChkaXN0cmlidXRvcik7Ci0gICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgUHJpY2VJdGVtQmVhbltdIGl0ZW1zID0gcHJpY2VMaXN0LmdldFByaWNlSXRlbXMoKTsKICAgICAgICAgICAgICAgcmV0YWlsUHJpY2VJdGVtcyA9IG5ldyBBcnJheUxpc3QoKTsKICAgICAgICAgICAgICAgZGlzdHJpYnV0b3JzID0gbmV3IEFycmF5TGlzdCgpOwpAQCAtNzIsMTkgKzcyLDE5IEBACiAgICAgICAgICAgICAgICAgUmV0YWlsUHJpY2VJdGVtIHBpID0gbmV3IFJldGFpbFByaWNlSXRlbShpdGVtc1tpXS5nZXRDb2ZmZWVOYW1lKCksIGl0ZW1zW2ldLmdldFByaWNlUGVyUG91bmQoKSwgcHJpY2UgLCBkaXN0cmlidXRvcik7CiAgICAgICAgICAgICAgICAgcmV0YWlsUHJpY2VJdGVtcy5hZGQocGkpOwogICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGRpc3RyaWJ1dG9ycy5hZGQoZGlzdHJpYnV0b3IpOyAKKyAgICAgICAgICAgICAgZGlzdHJpYnV0b3JzLmFkZChkaXN0cmlidXRvcik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgfQogICAgICAgICAgIC8vIFByaW50IHNwYWNlciBiZXR3ZWVuIG9yZ2FuaXphdGlvbnMKICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAtLS0gIik7Ci0gICAgICAgIH0gCisgICAgICAgIH0KICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICB9IGZpbmFsbHkgIHsKICAgICAgICAgLy8gQXQgZW5kLCBjbG9zZSBjb25uZWN0aW9uIHRvIHJlZ2lzdHJ5CiAgICAgICAgIGlmIChjb25uZWN0aW9uICE9IG51bGwpIHsKICAgICAgICAgICB0cnkgewotICAgICAgICAgIAljb25uZWN0aW9uLmNsb3NlKCk7CisgICAgICAgICAgICAgIGNvbm5lY3Rpb24uY2xvc2UoKTsKICAgICAgICAgICB9IGNhdGNoIChKQVhSRXhjZXB0aW9uIGplKSB7fQogICAgICAgICB9CiAgICAgICB9CkBAIC05OSw4ICs5OSw4IEBACiAgICAgICAgIFJldGFpbFByaWNlSXRlbSBycGkgPSBuZXcgUmV0YWlsUHJpY2VJdGVtKHBpYi5nZXRDb2ZmZWVOYW1lKCksIHBpYi5nZXRQcmljZVBlclBvdW5kKCksIHByaWNlLCBTQUFKT3JkZXJVUkwpOwogICAgICAgICByZXRhaWxQcmljZUl0ZW1zLmFkZChycGkpOwogICAgICAgfQotICAgICAgZGlzdHJpYnV0b3JzLmFkZChTQUFKT3JkZXJVUkwpOyAKLSAJCX0KKyAgICAgIGRpc3RyaWJ1dG9ycy5hZGQoU0FBSk9yZGVyVVJMKTsKKyAgICAgICAgIH0KIAogICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0SXRlbXMoKSB7CiAgICAgICAgIHJldHVybiByZXRhaWxQcmljZUl0ZW1zOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NlcnZlci9zcmMvY29tL3N1bi9jYi9SZXRhaWxQcmljZUxpc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2VydmVyL3NyYy9jb20vc3VuL2NiL1JldGFpbFByaWNlTGlzdFNlcnZsZXQuamF2YQppbmRleCA5ZmQ2MjBkLi5mOWJkNTQxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2VydmVyL3NyYy9jb20vc3VuL2NiL1JldGFpbFByaWNlTGlzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2VydmVyL3NyYy9jb20vc3VuL2NiL1JldGFpbFByaWNlTGlzdFNlcnZsZXQuamF2YQpAQCAtMjQsMjMgKzI0LDIzIEBACiAgKiBUaGlzIGlzIGEgc2ltcGxlIGV4YW1wbGUgb2YgYW4gSFRUUCBTZXJ2bGV0LiAgSXQgcmVzcG9uZHMgdG8gdGhlIEdFVAogICogbWV0aG9kIG9mIHRoZSBIVFRQIHByb3RvY29sLgogICovCi1wdWJsaWMgY2xhc3MgUmV0YWlsUHJpY2VMaXN0U2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsgCitwdWJsaWMgY2xhc3MgUmV0YWlsUHJpY2VMaXN0U2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIAogICAgcHVibGljIHZvaWQgZG9HZXQgKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LAogICAgICAgICAgICAgICAgICAgICAgICBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKQogICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLSAgICAgICAKLSAgCQlIdHRwU2Vzc2lvbiBzZXNzaW9uID0gcmVxdWVzdC5nZXRTZXNzaW9uKCk7Ci0gCQkJU2VydmxldENvbnRleHQgY29udGV4dCA9IGdldFNlcnZsZXRDb250ZXh0KCk7CisKKyAgICAgICAgICBIdHRwU2Vzc2lvbiBzZXNzaW9uID0gcmVxdWVzdC5nZXRTZXNzaW9uKCk7CisgICAgICAgICAgICAgU2VydmxldENvbnRleHQgY29udGV4dCA9IGdldFNlcnZsZXRDb250ZXh0KCk7CiAgICAgICBSZXRhaWxQcmljZUxpc3QgcnBsID0gbmV3IFJldGFpbFByaWNlTGlzdCgpOwogICAgICAgY29udGV4dC5zZXRBdHRyaWJ1dGUoInJldGFpbFByaWNlTGlzdCIsIHJwbCk7CiAgICAgICBTaG9wcGluZ0NhcnQgY2FydCA9IG5ldyBTaG9wcGluZ0NhcnQocnBsKTsKICAgICAgIHNlc3Npb24uc2V0QXR0cmlidXRlKCJjYXJ0IiwgY2FydCk7CiAKICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwotICAgICAgCiAKLSAgCQkvLyB0aGVuIHdyaXRlIHRoZSBkYXRhIG9mIHRoZSByZXNwb25zZQorCisgICAgICAgICAgLy8gdGhlbiB3cml0ZSB0aGUgZGF0YSBvZiB0aGUgcmVzcG9uc2UKICAgICAgIG91dC5wcmludGxuKCI8aHRtbD48Ym9keSAgYmdjb2xvcj1cIiNmZmZmZmZcIj4iICsKICAgICAgICAgICAgICAgICAgICJSZWxvYWRlZCBwcmljZSBsaXN0LiIgKyAiPC9odG1sPjwvYm9keT4iKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2VydmVyL3NyYy9jb20vc3VuL2NiL1Nob3BwaW5nQ2FydC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NlcnZlci9zcmMvY29tL3N1bi9jYi9TaG9wcGluZ0NhcnQuamF2YQppbmRleCBhNWJkOGYxLi4yZjcxZWQ3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2VydmVyL3NyYy9jb20vc3VuL2NiL1Nob3BwaW5nQ2FydC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zZXJ2ZXIvc3JjL2NvbS9zdW4vY2IvU2hvcHBpbmdDYXJ0LmphdmEKQEAgLTIwLDE1ICsyMCwxNSBAQAogaW1wb3J0IGphdmEubWF0aC5CaWdEZWNpbWFsOwogaW1wb3J0IGNvbS5zdW4uY2IuUmV0YWlsUHJpY2VMaXN0OwogaW1wb3J0IGNvbS5zdW4uY2IuUmV0YWlsUHJpY2VJdGVtOwotIAorCiBwdWJsaWMgY2xhc3MgU2hvcHBpbmdDYXJ0IHsKICAgQXJyYXlMaXN0IGl0ZW1zID0gbnVsbDsKICAgQmlnRGVjaW1hbCB0b3RhbCA9IG5ldyBCaWdEZWNpbWFsKCIwLjAwIik7CiAgIGludCBudW1iZXJPZkl0ZW1zID0gMDsKLSAgCisKICAgcHVibGljIFNob3BwaW5nQ2FydChSZXRhaWxQcmljZUxpc3QgcnBsKSB7CiAgICAgICBpdGVtcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgIAorCiAgICAgICBmb3IoSXRlcmF0b3IgaSA9IHJwbC5nZXRJdGVtcygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApIHsKICAgICAgICAgUmV0YWlsUHJpY2VJdGVtIGl0ZW0gPSAoUmV0YWlsUHJpY2VJdGVtKSBpLm5leHQoKTsKICAgICAgICAgU2hvcHBpbmdDYXJ0SXRlbSBzY2kgPSBuZXcgU2hvcHBpbmdDYXJ0SXRlbShpdGVtLCBuZXcgQmlnRGVjaW1hbCgiMC4wIiksIG5ldyBCaWdEZWNpbWFsKCIwLjAwIikpOwpAQCAtMzYsNyArMzYsNyBAQAogICAgICAgICBudW1iZXJPZkl0ZW1zKys7CiAgICAgICB9CiAgIH0KLSAgCisKICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIGFkZCAoU2hvcHBpbmdDYXJ0SXRlbSBpdGVtKSB7CiAgICAgaXRlbXMuYWRkKGl0ZW0pOwogICAgIHRvdGFsID0gdG90YWwuYWRkKGl0ZW0uZ2V0UHJpY2UoKSkuc2V0U2NhbGUoMik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2VydmVyL3NyYy9jb20vc3VuL2NiL1Nob3BwaW5nQ2FydEl0ZW0uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zZXJ2ZXIvc3JjL2NvbS9zdW4vY2IvU2hvcHBpbmdDYXJ0SXRlbS5qYXZhCmluZGV4IGVkZWQzOWUuLjNmZTc1MTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zZXJ2ZXIvc3JjL2NvbS9zdW4vY2IvU2hvcHBpbmdDYXJ0SXRlbS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zZXJ2ZXIvc3JjL2NvbS9zdW4vY2IvU2hvcHBpbmdDYXJ0SXRlbS5qYXZhCkBAIC01MSw3ICs1MSw3IEBACiAKICAgICBwdWJsaWMgQmlnRGVjaW1hbCBnZXRQb3VuZHMoKSB7CiAgICAgICAgIHJldHVybiBwb3VuZHM7Ci0gICAgfQkJIAorICAgIH0KIAogICAgIHB1YmxpYyBCaWdEZWNpbWFsIGdldFByaWNlKCkgewogICAgICAgICByZXR1cm4gcHJpY2U7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2VydmVyL3NyYy9jb20vc3VuL2NiL3RlbXBsYXRlL0RlYnVnLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2VydmVyL3NyYy9jb20vc3VuL2NiL3RlbXBsYXRlL0RlYnVnLmphdmEKaW5kZXggOWMxNjE5ZC4uZDMzOWMwMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NlcnZlci9zcmMvY29tL3N1bi9jYi90ZW1wbGF0ZS9EZWJ1Zy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zZXJ2ZXIvc3JjL2NvbS9zdW4vY2IvdGVtcGxhdGUvRGVidWcuamF2YQpAQCAtNDMsNyArNDMsNyBAQAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBwcmludChUaHJvd2FibGUgdCwgU3RyaW5nIG1zZykgewogICAgICAgICBpZiAoZGVidWdnaW5nT24pIHsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiUmVjZWl2ZWQgdGhyb3dhYmxlIHdpdGggTWVzc2FnZTogIit0LmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAgICBpZiAobXNnICE9IG51bGwpIAorICAgICAgICAgICAgaWYgKG1zZyAhPSBudWxsKQogICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnQobXNnKTsKICAgICAgICAgICAgIHQucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zZXJ2ZXIvc3JjL2NvbS9zdW4vY2IvdGVtcGxhdGUvRGVmaW5pdGlvblRhZy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NlcnZlci9zcmMvY29tL3N1bi9jYi90ZW1wbGF0ZS9EZWZpbml0aW9uVGFnLmphdmEKaW5kZXggNjRjMzA5Mi4uY2ZhMjFjMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NlcnZlci9zcmMvY29tL3N1bi9jYi90ZW1wbGF0ZS9EZWZpbml0aW9uVGFnLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NlcnZlci9zcmMvY29tL3N1bi9jYi90ZW1wbGF0ZS9EZWZpbml0aW9uVGFnLmphdmEKQEAgLTIzLDcgKzIzLDcgQEAKIHB1YmxpYyBjbGFzcyBEZWZpbml0aW9uVGFnIGV4dGVuZHMgU2ltcGxlVGFnU3VwcG9ydCB7CiAgIHByaXZhdGUgU3RyaW5nIGRlZmluaXRpb25OYW1lID0gbnVsbDsKICAgcHJpdmF0ZSBTdHJpbmcgc2NyZWVuSWQ7Ci0gIHByaXZhdGUJSGFzaE1hcCBzY3JlZW5zID0gbnVsbDsKKyAgcHJpdmF0ZSAgICBIYXNoTWFwIHNjcmVlbnMgPSBudWxsOwogCiAgIHB1YmxpYyBEZWZpbml0aW9uVGFnKCkgewogICAgIHN1cGVyKCk7CkBAIC0zOSwxNSArMzksMTUgQEAKICAgfQogICBwdWJsaWMgdm9pZCBkb1RhZygpIHsKICAgICB0cnkgewotICAgICAJc2NyZWVucyA9IG5ldyBIYXNoTWFwKCk7CisgICAgICAgICBzY3JlZW5zID0gbmV3IEhhc2hNYXAoKTsKIAotICAgICAgCisKICAgICAgIGdldEpzcEJvZHkoKS5pbnZva2UobnVsbCk7Ci0gICAgICAKKwogICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gbmV3IERlZmluaXRpb24oKTsKICAgICAgIFBhZ2VDb250ZXh0IGNvbnRleHQgPSAoUGFnZUNvbnRleHQpZ2V0SnNwQ29udGV4dCgpOwogICAgICAgQXJyYXlMaXN0IHBhcmFtcyA9IChBcnJheUxpc3QpIHNjcmVlbnMuZ2V0KHNjcmVlbklkKTsKLSAgICAgIEl0ZXJhdG9yCWlyID0gbnVsbDsKKyAgICAgIEl0ZXJhdG9yICAgIGlyID0gbnVsbDsKICAgICAgIGlmIChwYXJhbXMgIT0gbnVsbCkgewogICAgICAgICBpciA9IHBhcmFtcy5pdGVyYXRvcigpOwogICAgICAgICB3aGlsZSAoaXIuaGFzTmV4dCgpKQpAQCAtNTYsNyArNTYsNyBAQAogICAgICAgICAvLyBwdXQgdGhlIGRlZmluaXRpb24gaW4gdGhlIHBhZ2UgY29udGV4dAogICAgICAgICBjb250ZXh0LnNldEF0dHJpYnV0ZShkZWZpbml0aW9uTmFtZSwgZGVmaW5pdGlvbiwgY29udGV4dC5BUFBMSUNBVElPTl9TQ09QRSk7CiAgICAgICB9Ci0gICAgIAllbHNlIAkgICAgICAgICAKKyAgICAgICAgIGVsc2UKICAgICAgICAgRGVidWcucHJpbnRsbigiRGVmaW5pdGlvblRhZzogcGFyYW1zIGFyZSBub3QgZGVmaW5lZC4iKTsKICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2VydmVyL3NyYy9jb20vc3VuL2NiL3RlbXBsYXRlL0luc2VydFRhZy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NlcnZlci9zcmMvY29tL3N1bi9jYi90ZW1wbGF0ZS9JbnNlcnRUYWcuamF2YQppbmRleCBhZWRkZjQyLi4wZjg2MWJiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2VydmVyL3NyYy9jb20vc3VuL2NiL3RlbXBsYXRlL0luc2VydFRhZy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zZXJ2ZXIvc3JjL2NvbS9zdW4vY2IvdGVtcGxhdGUvSW5zZXJ0VGFnLmphdmEKQEAgLTM4LDcgKzM4LDcgQEAKICAgIHB1YmxpYyB2b2lkIGRvVGFnKCkgdGhyb3dzIEpzcFRhZ0V4Y2VwdGlvbiB7CiAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gbnVsbDsKICAgICBQYXJhbWV0ZXIgcGFyYW1ldGVyID0gbnVsbDsKLSAgICBib29sZWFuIGRpcmVjdEluY2x1ZGUgPSBmYWxzZTsJCSAgICAKKyAgICBib29sZWFuIGRpcmVjdEluY2x1ZGUgPSBmYWxzZTsKICAgICBQYWdlQ29udGV4dCBjb250ZXh0ID0gKFBhZ2VDb250ZXh0KWdldEpzcENvbnRleHQoKTsKIAogICAgIC8vIGdldCB0aGUgZGVmaW5pdGlvbiBmcm9tIHRoZSBwYWdlIGNvbnRleHQKQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICAgLy8gaWYgcGFyYW1ldGVyIGlzIGRpcmVjdCwgcHJpbnQgdG8gb3V0CiAgICAgICAgIGlmIChkaXJlY3RJbmNsdWRlICYmIHBhcmFtZXRlciAgIT0gbnVsbCkKICAgICAgICAgICBjb250ZXh0LmdldE91dCgpLnByaW50KHBhcmFtZXRlci5nZXRWYWx1ZSgpKTsKLSAgICAgICAgLy8gaWYgcGFyYW1ldGVyIGlzIGluZGlyZWN0LCBpbmNsdWRlIHJlc3VsdHMgb2YgZGlzcGF0Y2hpbmcgdG8gcGFnZSAKKyAgICAgICAgLy8gaWYgcGFyYW1ldGVyIGlzIGluZGlyZWN0LCBpbmNsdWRlIHJlc3VsdHMgb2YgZGlzcGF0Y2hpbmcgdG8gcGFnZQogICAgICAgICBlbHNlIHsKICAgICAgICAgICBpZiAoKHBhcmFtZXRlciAhPSBudWxsKSAmJiAocGFyYW1ldGVyLmdldFZhbHVlKCkgIT0gIG51bGwpKQogICAgICAgICAgICAgICBjb250ZXh0LmluY2x1ZGUocGFyYW1ldGVyLmdldFZhbHVlKCkpOwpAQCAtNjIsOSArNjIsOSBAQAogICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgVGhyb3dhYmxlIHJvb3RDYXVzZSA9IG51bGw7CiAgICAgICAgICAgaWYgKGV4IGluc3RhbmNlb2YgU2VydmxldEV4Y2VwdGlvbikgewotICAgICAgCQkJcm9vdENhdXNlID0gKChTZXJ2bGV0RXhjZXB0aW9uKSBleCkuZ2V0Um9vdENhdXNlKCk7CisgICAgICAgICAgICAgICAgICByb290Q2F1c2UgPSAoKFNlcnZsZXRFeGNlcHRpb24pIGV4KS5nZXRSb290Q2F1c2UoKTsKICAgICAgICAgICB9Ci0gICAgIAkJCXRocm93IG5ldyBKc3BUYWdFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpLCByb290Q2F1c2UpOwotICAgIAl9CisgICAgICAgICAgICAgICAgIHRocm93IG5ldyBKc3BUYWdFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpLCByb290Q2F1c2UpOworICAgICAgICB9CiAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2VydmVyL3NyYy9jb20vc3VuL2NiL3RlbXBsYXRlL1BhcmFtZXRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NlcnZlci9zcmMvY29tL3N1bi9jYi90ZW1wbGF0ZS9QYXJhbWV0ZXIuamF2YQppbmRleCBiNDhhYjdkLi5lMzVjYzVjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2VydmVyL3NyYy9jb20vc3VuL2NiL3RlbXBsYXRlL1BhcmFtZXRlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zZXJ2ZXIvc3JjL2NvbS9zdW4vY2IvdGVtcGxhdGUvUGFyYW1ldGVyLmphdmEKQEAgLTI5LDcgKzI5LDcgQEAKIAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKICAgICAgICAgcmV0dXJuIG5hbWU7Ci0gICAgfSAKKyAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiBpc0RpcmVjdCgpIHsKICAgICAgICAgcmV0dXJuIGlzRGlyZWN0OwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NlcnZlci9zcmMvY29tL3N1bi9jYi90ZW1wbGF0ZS9QYXJhbWV0ZXJUYWcuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zZXJ2ZXIvc3JjL2NvbS9zdW4vY2IvdGVtcGxhdGUvUGFyYW1ldGVyVGFnLmphdmEKaW5kZXggMzZhOGU1NS4uODY4MTVjYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NlcnZlci9zcmMvY29tL3N1bi9jYi90ZW1wbGF0ZS9QYXJhbWV0ZXJUYWcuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2VydmVyL3NyYy9jb20vc3VuL2NiL3RlbXBsYXRlL1BhcmFtZXRlclRhZy5qYXZhCkBAIC0zOSw3ICszOSw3IEBACiAgICBwdWJsaWMgdm9pZCBkb1RhZygpIHsKICAgICAgIGJvb2xlYW4gaXNEaXJlY3QgPSBmYWxzZTsKIAotICAgICAgaWYgKChpc0RpcmVjdFN0cmluZyAhPSBudWxsKSAmJiAKKyAgICAgIGlmICgoaXNEaXJlY3RTdHJpbmcgIT0gbnVsbCkgJiYKICAgICAgICAgIGlzRGlyZWN0U3RyaW5nLnRvTG93ZXJDYXNlKCkuZXF1YWxzKCJ0cnVlIikpCiAgICAgICAgICBpc0RpcmVjdCA9IHRydWU7CiAKQEAgLTUwLDggKzUwLDggQEAKICAgICAgICAgICBpZiAocGFyYW1ldGVycyAhPSBudWxsKSB7CiAgICAgICAgICAgICBQYXJhbWV0ZXIgcGFyYW0gPSBuZXcgUGFyYW1ldGVyKHBhcmFtTmFtZSwgcGFyYW1WYWx1ZSwgaXNEaXJlY3QpOwogICAgICAgICAgICAgcGFyYW1ldGVycy5hZGQocGFyYW0pOwotICAgICAgICAgIH0gZWxzZSAKLSAgICAgICAgICAgIERlYnVnLnByaW50bG4oIlBhcmFtZXRlclRhZzogcGFyYW1ldGVycyBkbyBub3QgZXhpc3QuIik7ICAgICAgICAgICAgICAKKyAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIERlYnVnLnByaW50bG4oIlBhcmFtZXRlclRhZzogcGFyYW1ldGVycyBkbyBub3QgZXhpc3QuIik7CiAgICAgICAgIH0KICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICBEZWJ1Zy5wcmludGxuKCJQYXJhbWV0ZXJUYWc6IGVycm9yIGluIGRvVGFnOiAiICsgZSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2VydmVyL3NyYy9jb20vc3VuL2NiL3RlbXBsYXRlL1NjcmVlblRhZy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NiL3NlcnZlci9zcmMvY29tL3N1bi9jYi90ZW1wbGF0ZS9TY3JlZW5UYWcuamF2YQppbmRleCA3ZDU4YjFlLi5iMjExMWE3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY2Ivc2VydmVyL3NyYy9jb20vc3VuL2NiL3RlbXBsYXRlL1NjcmVlblRhZy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jYi9zZXJ2ZXIvc3JjL2NvbS9zdW4vY2IvdGVtcGxhdGUvU2NyZWVuVGFnLmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKICAgIHByaXZhdGUgQXJyYXlMaXN0IHBhcmFtZXRlcnMgPSBudWxsOwogCiAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBhcmFtZXRlcnMoKSB7Ci0gICAJCXJldHVybiBwYXJhbWV0ZXJzOworICAgICAgICAgICByZXR1cm4gcGFyYW1ldGVyczsKICAgIH0KICAgIHB1YmxpYyB2b2lkIHNldFNjcmVlbklkKFN0cmluZyBzY3JlZW5JZCkgewogICAgICAgdGhpcy5zY3JlZW5JZCA9IHNjcmVlbklkOwpAQCAtMzcsNyArMzcsNyBAQAogICAgIHBhcmFtZXRlcnMgPSBuZXcgQXJyYXlMaXN0KCk7CiAgICAgSGFzaE1hcCBzY3JlZW5zID0gKEhhc2hNYXApKChEZWZpbml0aW9uVGFnKWdldFBhcmVudCgpKS5nZXRTY3JlZW5zKCk7CiAgICAgaWYgKHNjcmVlbnMgIT0gbnVsbCkgewotICAgICAgdHJ5IHsJCisgICAgICB0cnkgewogICAgICAgICBpZiAoIXNjcmVlbnMuY29udGFpbnNLZXkoc2NyZWVuSWQpKQogICAgICAgICAgIHNjcmVlbnMucHV0KHNjcmVlbklkLCBwYXJhbWV0ZXJzKTsKICAgICAgICAgZ2V0SnNwQm9keSgpLmludm9rZShudWxsKTsKQEAgLTQ2LDYgKzQ2LDYgQEAKICAgICAgIH0KICAgICB9CiAgICAgZWxzZQotICAgIAlEZWJ1Zy5wcmludGxuKCJTY3JlZW5UYWc6IFVuYWJsZSB0byBnZXQgc2NyZWVucyBvYmplY3QuIik7CisgICAgICAgIERlYnVnLnByaW50bG4oIlNjcmVlblRhZzogVW5hYmxlIHRvIGdldCBzY3JlZW5zIG9iamVjdC4iKTsKICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NvbW1vbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NvbW1vbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGQwZjdhYmUuLjI3YmJiODUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jb21tb24vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY29tbW9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEyICsxNSwxMiBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiBqMmVlLmhvbWU9JHtTMUFTX2hvbWV9CiBzdW5vbmUuaG9tZT0ke2oyZWUuaG9tZX0KICMKLSMgVGhlIGZvbGxvd2luZyBzZXR0aW5ncyBoYXZlIGJlZW4gY29tbWVudGVkIG91dCBiZWNhdXNlIHRoZXkgYXJlIHBlcmZvcm1lZCBieSB0aGUgZGV2dGVzdHMgCisjIFRoZSBmb2xsb3dpbmcgc2V0dGluZ3MgaGF2ZSBiZWVuIGNvbW1lbnRlZCBvdXQgYmVjYXVzZSB0aGV5IGFyZSBwZXJmb3JtZWQgYnkgdGhlIGRldnRlc3RzCiAjIHNldC11cCBpbnN0ZWFkLgogIwogI2FkbWluLnBhc3N3b3JkPQpAQCAtNDEsNSArNDEsNSBAQAogI2RiLnB3ZD1wYnB1YmxpYwogdXJsLnByb3A9RGF0YWJhc2VOYW1lCiBkcy5jbGFzcz1jb20ucG9pbnRiYXNlLmpkYmMuamRiY0RhdGFTb3VyY2UKLWRiLmp2bWFyZ3M9LW1zMTZtIC1teDMybSAKK2RiLmp2bWFyZ3M9LW1zMTZtIC1teDMybVx1MDAyMAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY29tbW9uL3RhcmdldHMueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC9taXNjL2V4YW1wbGVGcm9tSjJFRVR1dG9yaWFsL2NvbW1vbi90YXJnZXRzLnhtbAppbmRleCBiZjk5NzUxLi4xZGVmOGRlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L21pc2MvZXhhbXBsZUZyb21KMkVFVHV0b3JpYWwvY29tbW9uL3RhcmdldHMueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvbWlzYy9leGFtcGxlRnJvbUoyRUVUdXRvcmlhbC9jb21tb24vdGFyZ2V0cy54bWwKQEAgLTI0LDcgKzI0LDcgQEAKIAogICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiA+CiAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGR9IiAvPgotICAgIDxkZWxldGUgZGlyPSIke2Rpc3R9IiAvPiAgICAKKyAgICA8ZGVsZXRlIGRpcj0iJHtkaXN0fSIgLz4KICAgPC90YXJnZXQ+CiAKICAgPHBhdGggaWQ9ImRiLmNsYXNzcGF0aCI+CkBAIC00NCwxOSArNDQsMTkgQEAKIAogICA8dGFyZ2V0IG5hbWU9ImFkbWluX2NvbW1hbmRfY29tbW9uIj4KICAgICA8ZWNobyBtZXNzYWdlPSJEb2luZyBhZG1pbiB0YXNrICR7YWRtaW4uY29tbWFuZH0iLz4KLSAgICA8c3VuLWFwcHNlcnYtYWRtaW4gCisgICAgPHN1bi1hcHBzZXJ2LWFkbWluCiAgICAgICBjb21tYW5kPSIke2FkbWluLmNvbW1hbmR9IgotICAgICAgdXNlcj0iJHthZG1pbi51c2VyfSIgCi0gICAgICBwYXNzd29yZD0iJHthZG1pbi5wYXNzd29yZH0iIAotICAgICAgaG9zdD0iJHthZG1pbi5ob3N0fSIgCi0gICAgICBwb3J0PSIke2FkbWluLnBvcnR9IiAKKyAgICAgIHVzZXI9IiR7YWRtaW4udXNlcn0iCisgICAgICBwYXNzd29yZD0iJHthZG1pbi5wYXNzd29yZH0iCisgICAgICBob3N0PSIke2FkbWluLmhvc3R9IgorICAgICAgcG9ydD0iJHthZG1pbi5wb3J0fSIKICAgICAgIHN1bm9uZWhvbWU9IiR7ajJlZS5ob21lfSIgLz4KICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtamRiYy1yZXNvdXJjZV9jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0iYWRtaW5fY29tbWFuZF9jb21tb24iPgogICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiCi0gICAgICAgIHZhbHVlPSJjcmVhdGUtamRiYy1yZXNvdXJjZSAKKyAgICAgICAgdmFsdWU9ImNyZWF0ZS1qZGJjLXJlc291cmNlCiAgICAgICAgICAtLWNvbm5lY3Rpb25wb29saWQgJHtjb25wb29sLm5hbWV9ICR7amRiYy5yZXNvdXJjZS5uYW1lfSIgLz4KICAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC90ZXN0ZXIvRGVwbG95ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvdGVzdGVyL0RlcGxveWVyLmphdmEKaW5kZXggNjEyYmFkNS4uOTNkOGMwNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC90ZXN0ZXIvRGVwbG95ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L3Rlc3Rlci9EZXBsb3llci5qYXZhCkBAIC0zMSwxOSArMzEsMTkgQEAKIHB1YmxpYyBjbGFzcyBEZXBsb3llciBpbXBsZW1lbnRzIFByb2dyZXNzTGlzdGVuZXIgewogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgaW5zdCBhdCAiICsgU3lzdGVtLmdldFByb3BlcnR5KCJjb20uc3VuLmFhcy5pbnN0YWxsUm9vdCIpKTsKICAgICAgICAgICAgIERlcGxveWVyIGRlcGxveWVyID0gbmV3IERlcGxveWVyKCk7CiAgICAgICAgICAgICBkZXBsb3llci5kZXBsb3koYXJncyk7Ci0JICAgIFN5c3RlbS5leGl0KDApOworICAgICAgICBTeXN0ZW0uZXhpdCgwKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIFN5c3RlbS5leGl0KC0xKTsKICAgICAgICAgfQotICAgIH0gCi0gICAgCi0gICAgCisgICAgfQorCisKICAgICBwdWJsaWMgdm9pZCBkZXBsb3koU3RyaW5nIGFyZ3NbXSkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgRGVwbG95bWVudEZhY3RvcnlJbnN0YWxsZXIuZ2V0SW5zdGFsbGVyKCk7CkBAIC01MSwzNyArNTEsMzcgQEAKICAgICAgICAgUHJvZ3Jlc3NPYmplY3QgZHBvOwogICAgICAgICBGaWxlIGFyY2hpdmUgPSBuZXcgRmlsZShhcmdzWzBdKTsKICAgICAgICAgRmlsZSBkZXBsb3ltZW50UGxhbiA9IG5ldyBGaWxlKGFyZ3NbMV0pOwotICAgICAgICAKKwogICAgICAgICBpZiAoIWRlcGxveW1lbnRQbGFuLmV4aXN0cygpKSB7CiAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXYXJuaW5nLCBkZXBsb3lpbmcgd2l0aCBudWxsIGRlcGxveW1lbnQgcGxhbiIpOwotICAgICAgICAgICAgIGRwbyA9IGRtLmRpc3RyaWJ1dGUoZG0uZ2V0VGFyZ2V0cygpLCBhcmNoaXZlLCBudWxsKTsgICAgICAgICAgCisgICAgICAgICAgICAgZHBvID0gZG0uZGlzdHJpYnV0ZShkbS5nZXRUYXJnZXRzKCksIGFyY2hpdmUsIG51bGwpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZXBsb3lpbmcgIiArIGFyY2hpdmUuZ2V0QWJzb2x1dGVQYXRoKCkgKyAiIHdpdGggcGxhbiAiICsgZGVwbG95bWVudFBsYW4uZ2V0QWJzb2x1dGVGaWxlKCkpOwotICAgICAgICAgICAgIGRwbyA9IGRtLmRpc3RyaWJ1dGUoZG0uZ2V0VGFyZ2V0cygpLCBhcmNoaXZlLCBkZXBsb3ltZW50UGxhbik7ICAgICAgICAgIAotICAgICAgICB9ICAgICAgICAgICAgCisgICAgICAgICAgICAgZHBvID0gZG0uZGlzdHJpYnV0ZShkbS5nZXRUYXJnZXRzKCksIGFyY2hpdmUsIGRlcGxveW1lbnRQbGFuKTsKKyAgICAgICAgfQogICAgICAgICBkcG8uYWRkUHJvZ3Jlc3NMaXN0ZW5lcih0aGlzKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZXBsb3ltZW50IHJldHVybmVkICIgKyBkcG8pOwogICAgICAgICBpZiAoZHBvIT1udWxsKSB7CiAgICAgICAgICAgICBEZXBsb3ltZW50U3RhdHVzIGRlcGxveW1lbnRTdGF0dXMgPSBkcG8uZ2V0RGVwbG95bWVudFN0YXR1cygpOwogICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoMjAwKTsKLSAgICAgICAgICAgIH0gd2hpbGUgKCEoZGVwbG95bWVudFN0YXR1cy5pc0NvbXBsZXRlZCgpIHx8IGRlcGxveW1lbnRTdGF0dXMuaXNGYWlsZWQoKSkpOyAgICAgICAgICAgIAorICAgICAgICAgICAgfSB3aGlsZSAoIShkZXBsb3ltZW50U3RhdHVzLmlzQ29tcGxldGVkKCkgfHwgZGVwbG95bWVudFN0YXR1cy5pc0ZhaWxlZCgpKSk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRlcGxveW1lbnQgc3RhdHVzIGlzICIgKyBkZXBsb3ltZW50U3RhdHVzKTsKICAgICAgICAgfQotICAgICAgICBUYXJnZXRNb2R1bGVJRFtdIHRhcmdldE1vZHVsZUlEcyA9IGRwby5nZXRSZXN1bHRUYXJnZXRNb2R1bGVJRHMoKTsgICAgICAgIAorICAgICAgICBUYXJnZXRNb2R1bGVJRFtdIHRhcmdldE1vZHVsZUlEcyA9IGRwby5nZXRSZXN1bHRUYXJnZXRNb2R1bGVJRHMoKTsKICAgICAgICAgZHVtcFJlc3VsdE1vZHVsZUlEcygiRGVwbG95ZWQgIiAsIGRwbyk7Ci0gICAgICAgIAorCiAvLyAgICAgICAgTW9kdWxlVHlwZSBtb2R1bGVUeXBlID0gKChTdW5UYXJnZXRNb2R1bGVJRCkgdGFyZ2V0TW9kdWxlSURzWzBdKS5nZXRNb2R1bGVUeXBlKCk7Ci0gICAgICAgIAorCiAvLyAgICAgICAgbGlzdEFwcGxpY2F0aW9ucyhkbSwgbW9kdWxlVHlwZSAsIGRtLmdldFRhcmdldHMoKSwgbnVsbCk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIGR1bXBSZXN1bHRNb2R1bGVJRHMoU3RyaW5nIHByZWZpeCwgUHJvZ3Jlc3NPYmplY3QgcG8pIHsKICAgICAgICAgVGFyZ2V0TW9kdWxlSURbXSB0YXJnZXRNb2R1bGVJRHMgPSBwby5nZXRSZXN1bHRUYXJnZXRNb2R1bGVJRHMoKTsKLSAgICAgICAgZm9yIChpbnQgaT0wO2k8dGFyZ2V0TW9kdWxlSURzLmxlbmd0aDtpKyspIHsgICAgICAgICAgICAKLSAgICAgICAgICAgIGR1bXBNb2R1bGVzSURzKHByZWZpeCwgdGFyZ2V0TW9kdWxlSURzW2ldKTsgICAgICAgICAgICAKKyAgICAgICAgZm9yIChpbnQgaT0wO2k8dGFyZ2V0TW9kdWxlSURzLmxlbmd0aDtpKyspIHsKKyAgICAgICAgICAgIGR1bXBNb2R1bGVzSURzKHByZWZpeCwgdGFyZ2V0TW9kdWxlSURzW2ldKTsKICAgICAgICAgfQotICAgIH0gICAgCisgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGR1bXBNb2R1bGVzSURzKFN0cmluZyBwcmVmaXgsIFRhcmdldE1vZHVsZUlEIHRhcmdldE1vZHVsZUlEKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihwcmVmaXggKyB0YXJnZXRNb2R1bGVJRCk7CkBAIC05MSwxMSArOTEsMTEgQEAKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBDaGlsZCAiICsgaSArICJcbiIgKyBzdWJzW2ldKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgIH0gICAgICAgIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyB2b2lkIGhhbmRsZVByb2dyZXNzRXZlbnQoamF2YXguZW50ZXJwcmlzZS5kZXBsb3kuc3BpLnN0YXR1cy5Qcm9ncmVzc0V2ZW50IHByb2dyZXNzRXZlbnQpIHsKICAgICAgICAgRGVwbG95bWVudFN0YXR1cyBkcyA9IHByb2dyZXNzRXZlbnQuZ2V0RGVwbG95bWVudFN0YXR1cygpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlY2VpdmVkIFByb2dyZXNzIEV2ZW50IHN0YXRlICIgKyBkcy5nZXRTdGF0ZSgpICsgIiBtc2cgPSAiICsgZHMuZ2V0TWVzc2FnZSgpKTsgICAgICAgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlY2VpdmVkIFByb2dyZXNzIEV2ZW50IHN0YXRlICIgKyBkcy5nZXRTdGF0ZSgpICsgIiBtc2cgPSAiICsgZHMuZ2V0TWVzc2FnZSgpKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvdGVzdGVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvdGVzdGVyL2J1aWxkLnhtbAppbmRleCAzYTk2NmU1Li42YzM2MmIxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L3Rlc3Rlci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC90ZXN0ZXIvYnVpbGQueG1sCkBAIC0yMCwyMiArMjAsMjIgQEAKIAogPCFFTlRJVFkgY29tbW9uQnVpbGQgU1lTVEVNICIuLy4uLy4uL2NvbmZpZy9jb21tb24ueG1sIj4KIF0+Ci0gIAorCiA8cHJvamVjdCBuYW1lPSJ3c3RvZWpiIiBkZWZhdWx0PSJhbGwiIGJhc2VkaXI9Ii4iPgotIAorCiAgICAgICAgICZjb21tb25CdWlsZDsKLSAKLQk8dGFyZ2V0IG5hbWU9InByZXBhcmUiIGRlcGVuZHM9ImluaXQiPgotCQk8bWtkaXIgZGlyPSIke2J1aWxkfSIgLz4KLQk8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0icHJlcGFyZSIgZGVwZW5kcz0iaW5pdCI+CisgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGR9IiAvPgorICAgIDwvdGFyZ2V0PgogCiAgICAgICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0icHJlcGFyZSI+CiAgICAgICAgICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZH0iPgotCQkgICAgPGNsYXNzcGF0aD4KLQkJICAgICAgPHBhdGhlbGVtZW50IHBhdGg9IiR7aW5zdH0vbGliL2oyZWUuamFyIi8+Ci0JCSAgICAgIDxwYXRoZWxlbWVudCBwYXRoPSIke2luc3R9L2xpYi9hcHBzZXJ2LXJ0LmphciIvPgotCQkgICAgPC9jbGFzc3BhdGg+CisgICAgICAgICAgICA8Y2xhc3NwYXRoPgorICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgcGF0aD0iJHtpbnN0fS9saWIvajJlZS5qYXIiLz4KKyAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IHBhdGg9IiR7aW5zdH0vbGliL2FwcHNlcnYtcnQuamFyIi8+CisgICAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgICAgICAgICA8L2phdmFjPgogICAgICAgICA8L3RhcmdldD4KLSAgCisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvd2FyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvd2FyL2J1aWxkLnhtbAppbmRleCAyMTI0Y2Y3Li5lM2IyYWFlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L3dhci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC93YXIvYnVpbGQueG1sCkBAIC0yMywxMiArMjMsMTIgQEAKIAogPHByb2plY3QgbmFtZT0iZWFyIiBkZWZhdWx0PSJhbGwiIGJhc2VkaXI9Ii4iPgogCi0JJmNvbW1vbkJ1aWxkOworICAgICZjb21tb25CdWlsZDsKIAotCTx0YXJnZXQgbmFtZT0icHJpdmF0ZS1hbGwiPgotCQk8YW50IGRpcj0ic2ltcGxlIiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L3NpbXBsZSIvPgotCQk8L2FudD4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIj4KKyAgICAgICAgPGFudCBkaXI9InNpbXBsZSIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9zaW1wbGUiLz4KKyAgICAgICAgPC9hbnQ+CisgICAgPC90YXJnZXQ+CiAKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvd2FyL3NpbXBsZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L3dhci9zaW1wbGUvYnVpbGQueG1sCmluZGV4IDcwNzc1ZDYuLjc1ZmU5NzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvd2FyL3NpbXBsZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9qc3I4OC93YXIvc2ltcGxlL2J1aWxkLnhtbApAQCAtMjMsNDkgKzIzLDQ5IEBACiAKIDxwcm9qZWN0IG5hbWU9ImVhciIgZGVmYXVsdD0iYWxsIiBiYXNlZGlyPSIuIj4KIAotCSZjb21tb25CdWlsZDsKKyAgICAmY29tbW9uQnVpbGQ7CiAgICAgPHByb3BlcnR5IG5hbWU9ImFyY2hpdmVkaXIiIHZhbHVlPSIke2J1aWxkfS9hcmNoaXZlcyIvPgogCi0JPHRhcmdldCBuYW1lPSJidWlsZC1kZXBsb3ltZW50LXBsYW4iPgotCQk8bWtkaXIgZGlyPSIke2J1aWxkfS9wbGFuIi8+Ci0JCTxjb3B5IGZpbGU9InN1bi13ZWIueG1sIiB0b2ZpbGU9IiR7YnVpbGR9L3BsYW4vc3VuLXdlYi54bWwiLz4KLQkJPGphciBkZXN0ZmlsZT0iJHthcmNoaXZlZGlyfS9wbGFuLmphciIgYmFzZWRpcj0iJHtidWlsZH0vcGxhbiIvPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtZGVwbG95bWVudC1wbGFuIj4KKyAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZH0vcGxhbiIvPgorICAgICAgICA8Y29weSBmaWxlPSJzdW4td2ViLnhtbCIgdG9maWxlPSIke2J1aWxkfS9wbGFuL3N1bi13ZWIueG1sIi8+CisgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXJjaGl2ZWRpcn0vcGxhbi5qYXIiIGJhc2VkaXI9IiR7YnVpbGR9L3BsYW4iLz4KKyAgICA8L3RhcmdldD4KIAotCTx0YXJnZXQgbmFtZT0iYnVpbGQtcG9ydGFibGUiPgotCQk8d2FyIGRlc3RmaWxlPSIke2FyY2hpdmVkaXJ9L3NpbXBsZS53YXIiIHdlYnhtbD0id2ViLnhtbCI+Ci0JCQk8ZmlsZXNldCBmaWxlPSJTaW1wbGVfUGFnZS5odG1sIi8+Ci0JCTwvd2FyPgotCTwvdGFyZ2V0PgorICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcG9ydGFibGUiPgorICAgICAgICA8d2FyIGRlc3RmaWxlPSIke2FyY2hpdmVkaXJ9L3NpbXBsZS53YXIiIHdlYnhtbD0id2ViLnhtbCI+CisgICAgICAgICAgICA8ZmlsZXNldCBmaWxlPSJTaW1wbGVfUGFnZS5odG1sIi8+CisgICAgICAgIDwvd2FyPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJ1bmRlcGxveSI+Ci0JCTxhbnRjYWxsIHRhcmdldD0iY29tbW9uLnJ1bi5qc3I4OCI+Ci0JCQk8cGFyYW0gbmFtZT0iY29tbWFuZCIgdmFsdWU9InVuZGVwbG95Ii8+Ci0JCQk8cGFyYW0gbmFtZT0iYXJnLmxpc3QiIHZhbHVlPSJzaW1wbGUiLz4KLQkJPC9hbnRjYWxsPgotCTwvdGFyZ2V0PiAKKyAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95Ij4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21tb24ucnVuLmpzcjg4Ij4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJjb21tYW5kIiB2YWx1ZT0idW5kZXBsb3kiLz4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIgdmFsdWU9InNpbXBsZSIvPgorICAgICAgICA8L2FudGNhbGw+CisgICAgPC90YXJnZXQ+CiAKLQk8dGFyZ2V0IG5hbWU9ImRlcGxveS10ZXN0IiBkZXBlbmRzPSJzZXRIdHRwUG9ydCI+CisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3ktdGVzdCIgZGVwZW5kcz0ic2V0SHR0cFBvcnQiPgogICAgICAgICA8bWtkaXIgZGlyPSIke2FyY2hpdmVkaXJ9Ii8+Ci0JCTxhbnRjYWxsIHRhcmdldD0iZGVjbGFyZS10ZXN0Ij4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWNsYXJlLXRlc3QiPgogICAgICAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZGVzY3JpcHRpb24iIHZhbHVlPSJqc3I4OC93YXIvc2ltcGxlIGRlcGxveSB0ZXN0Ii8+CiAgICAgICAgICAgICAgICAgPC9hbnRjYWxsPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLXBvcnRhYmxlIi8+Ci0JCTxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZGVwbG95bWVudC1wbGFuIi8+Ci0JCTxhbnRjYWxsIHRhcmdldD0iY29tbW9uLnJ1bi5qc3I4OCI+Ci0JCQk8cGFyYW0gbmFtZT0iY29tbWFuZCIgdmFsdWU9ImRlcGxveSIvPgotCQkJPHBhcmFtIG5hbWU9ImFyZy5saXN0IiB2YWx1ZT0idHJ1ZSAke2FyY2hpdmVkaXJ9L3NpbXBsZS53YXIgJHthcmNoaXZlZGlyfS9wbGFuLmphciIvPgotCQk8L2FudGNhbGw+Ci0JCTxlY2hvIG1lc3NhZ2U9ImdldHRpbmcgaHR0cDovLyR7aHR0cC5ob3N0fToke2RlcGx0ZXN0LnBvcnR9L3NpbXBsZS9TaW1wbGVfUGFnZS5odG1sIi8+Ci0JCTxjb25kaXRpb24gcHJvcGVydHk9InN1Y2Nlc3MiPgotCQkJPGh0dHAgdXJsPSJodHRwOi8vJHtodHRwLmhvc3R9OiR7ZGVwbHRlc3QucG9ydH0vc2ltcGxlL1NpbXBsZV9QYWdlLmh0bWwiLz4KLQkJPC9jb25kaXRpb24+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtcG9ydGFibGUiLz4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1kZXBsb3ltZW50LXBsYW4iLz4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21tb24ucnVuLmpzcjg4Ij4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJjb21tYW5kIiB2YWx1ZT0iZGVwbG95Ii8+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiIHZhbHVlPSJ0cnVlICR7YXJjaGl2ZWRpcn0vc2ltcGxlLndhciAke2FyY2hpdmVkaXJ9L3BsYW4uamFyIi8+CisgICAgICAgIDwvYW50Y2FsbD4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iZ2V0dGluZyBodHRwOi8vJHtodHRwLmhvc3R9OiR7ZGVwbHRlc3QucG9ydH0vc2ltcGxlL1NpbXBsZV9QYWdlLmh0bWwiLz4KKyAgICAgICAgPGNvbmRpdGlvbiBwcm9wZXJ0eT0ic3VjY2VzcyI+CisgICAgICAgICAgICA8aHR0cCB1cmw9Imh0dHA6Ly8ke2h0dHAuaG9zdH06JHtkZXBsdGVzdC5wb3J0fS9zaW1wbGUvU2ltcGxlX1BhZ2UuaHRtbCIvPgorICAgICAgICA8L2NvbmRpdGlvbj4KICAgICAgICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InRlc3RTdWNjZXNzIj48cGFyYW0gbmFtZT0ibG9nLmlkIiB2YWx1ZT0iMSIvPjwvYW50Y2FsbD4KICAgICAgICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InRlc3RGYWlsdXJlIj48cGFyYW0gbmFtZT0ibG9nLmlkIiB2YWx1ZT0iMiIvPjwvYW50Y2FsbD4KICAgICAgICAgICAgICAgICA8IS0tCi0JCTxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3kiLz4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveSIvPgogICAgICAgICAgICAgICAgIC0tPgotCTwvdGFyZ2V0PgorICAgIDwvdGFyZ2V0PgogCiAgICAgICAgIDx0YXJnZXQgbmFtZT0icmVkZXBsb3ktdGVzdCIgZGVwZW5kcz0ic2V0SHR0cFBvcnQiPgogICAgICAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVjbGFyZS10ZXN0Ij4KQEAgLTk5LDE2ICs5OSwxNiBAQAogICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZWRlcGxveS10ZXN0Ii8+CiAgICAgICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJ0ZXN0U3VjY2VzcyIgaWY9InN1Y2Nlc3MiPgorICAgIDx0YXJnZXQgbmFtZT0idGVzdFN1Y2Nlc3MiIGlmPSJzdWNjZXNzIj4KICAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icHJvY2Vzc1Jlc3VsdCI+CiAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9InJlc3VsdCIgdmFsdWU9IjAiLz4KICAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ibG9nIiB2YWx1ZT0iJHtidWlsZH0vJHtsb2cuaWR9Lm91dHB1dC5sb2ciLz4KLSAgICAgICAgICAgIDwvYW50Y2FsbD4gCi0JPC90YXJnZXQ+Ci0JPHRhcmdldCBuYW1lPSJ0ZXN0RmFpbHVyZSIgdW5sZXNzPSJzdWNjZXNzIj4KKyAgICAgICAgICAgIDwvYW50Y2FsbD4KKyAgICA8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9InRlc3RGYWlsdXJlIiB1bmxlc3M9InN1Y2Nlc3MiPgogICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwcm9jZXNzUmVzdWx0Ij4KICAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0icmVzdWx0IiB2YWx1ZT0iLTEiLz4KICAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ibG9nIiB2YWx1ZT0iJHtidWlsZH0vJHtsb2cuaWR9Lm91dHB1dC5sb2ciLz4KLSAgICAgICAgICAgIDwvYW50Y2FsbD4gCi0JPC90YXJnZXQ+CisgICAgICAgICAgICA8L2FudGNhbGw+CisgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2pzcjg4L3dhci9zaW1wbGUvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvd2FyL3NpbXBsZS93ZWIueG1sCmluZGV4IDQ1MDQ1MWYuLmI4YjkzZjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvd2FyL3NpbXBsZS93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvanNyODgvd2FyL3NpbXBsZS93ZWIueG1sCkBAIC0yMCw2ICsyMCw2IEBACiA8d2ViLWFwcCB2ZXJzaW9uPSIyLjQiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiPgogICA8ZGlzcGxheS1uYW1lPlNpbXBsaXN0aWMgV2ViIEFwcGxpY2F0aW9uPC9kaXNwbGF5LW5hbWU+CiAgIDx3ZWxjb21lLWZpbGUtbGlzdD4KLQk8d2VsY29tZS1maWxlPnNpbXBsZV9wYWdlLmh0bWw8L3dlbGNvbWUtZmlsZT4KKyAgICA8d2VsY29tZS1maWxlPnNpbXBsZV9wYWdlLmh0bWw8L3dlbGNvbWUtZmlsZT4KICAgPC93ZWxjb21lLWZpbGUtbGlzdD4KIDwvd2ViLWFwcD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvbGlmZWN5Y2xlLW1vZHVsZS9EZXBsTGlmZWN5Y2xlTW9kdWxlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L2xpZmVjeWNsZS1tb2R1bGUvRGVwbExpZmVjeWNsZU1vZHVsZS5qYXZhCmluZGV4IDc0NTM3NjEuLjIzMTIzNzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvbGlmZWN5Y2xlLW1vZHVsZS9EZXBsTGlmZWN5Y2xlTW9kdWxlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9saWZlY3ljbGUtbW9kdWxlL0RlcGxMaWZlY3ljbGVNb2R1bGUuamF2YQpAQCAtNTEsNCArNTEsNCBAQAogICAgICAgcmV0dXJuOwogICAgIH0KICAgfQotfSAKK30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvb3NnaS9zaW1wbGUvVGVzdENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9vc2dpL3NpbXBsZS9UZXN0Q2xpZW50LmphdmEKaW5kZXggOTBiMTJhZS4uNTg2OWRmOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9vc2dpL3NpbXBsZS9UZXN0Q2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9vc2dpL3NpbXBsZS9UZXN0Q2xpZW50LmphdmEKQEAgLTI5LDcgKzI5LDcgQEAKICAgICAgICAgVGVzdENsaWVudCBjbGllbnQgPSBuZXcgVGVzdENsaWVudCgpOwogICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3MpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgU3RyaW5nIHVybCA9IGFyZ3NbMF07CkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgICAgICAgICAgbG9nKCJDYXVnaHQgRVhQRUNURUQgSU9FeGNlcHRpb246ICIgKyBleCk7CiAgICAgICAgICAgICAgICAgcGFzcygpOwogICAgICAgICAgICAgfQotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvb3NnaS9zaW1wbGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9vc2dpL3NpbXBsZS9idWlsZC54bWwKaW5kZXggYjBkNGI3OS4uNDg2NTdkNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9vc2dpL3NpbXBsZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9vc2dpL3NpbXBsZS9idWlsZC54bWwKQEAgLTcwLDE2ICs3MCwxNiBAQAogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKLSAgICA8dGFyZ2V0IG5hbWU9ImVuYWJsZS5hc2FkbWluIj4gCisgICAgPHRhcmdldCBuYW1lPSJlbmFibGUuYXNhZG1pbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tbW9uLmVuYWJsZS5hc2FkbWluIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9IiR7dGVzdE5hbWV9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGlzYWJsZS5hc2FkbWluIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21tb24uZGlzYWJsZS5hc2FkbWluIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9IiR7dGVzdE5hbWV9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KQEAgLTEyOCwxMCArMTI4LDEwIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc3NlbWJsZSIvPgotICAgICAgICAKKwogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS5vc2dpLmFzYWRtaW4iLz4KIAotICAgICAgICA8IS0tIHB1dCBpbiBhIDMwcyBzbGVlcCB0aW1lIHRvIG1ha2Ugc3VyZSB0aGUgYXN5bmNocm9ub3VzIG9zZ2kgCisgICAgICAgIDwhLS0gcHV0IGluIGEgMzBzIHNsZWVwIHRpbWUgdG8gbWFrZSBzdXJlIHRoZSBhc3luY2hyb25vdXMgb3NnaQogICAgICAgICAgICAgIGRlcGxveW1lbnQgZmluaXNoZXMgYmVmb3JlIGFjY2Vzc2luZyB0aGUgYXBwbGljYXRpb24gLS0+CiAKICAgICAgICAgPHNsZWVwIHNlY29uZHM9IjMwIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3J1bl90ZXN0LnNoIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC9ydW5fdGVzdC5zaAppbmRleCBjNzYzNzkwLi43NDQzZTZjIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3J1bl90ZXN0LnNoCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvcnVuX3Rlc3Quc2gKQEAgLTU1LDcgKzU1LDcgQEAKICAgZmkKICAgIGlmIFtbICR7MX0gPSAiZGVwbG95bWVudF9jbHVzdGVyX2FsbCIgXV07IHRoZW4KICAgICAgIGNwIC1yICR7QVBTX0hPTUV9L2RldnRlc3RzL2RlcGxveW1lbnQvc2VydmVyLWxvZ3MvICR7V09SS1NQQUNFfS9yZXN1bHRzLwotICBmaSAgCisgIGZpCiAgIGVjaG8gREVQTF9UQVJHRVQgaXMgJHtERVBMX1RBUkdFVH0KIH0KIApAQCAtNzgsOCArNzgsOCBAQAogICAgICAgcHJpbnQgIiAgPHRlc3RjYXNlIGNsYXNzbmFtZT1cIkRlcGxveW1lbnRUZXN0XCIgbmFtZT1cIiIgXAogICAgICAgICBzdWJzdHIoJDIsMixpbmRleCgkMiwiZGVzY3JpcHRpb24iKS00KSBcCiAgICAgICAgIGlkIFwKLSAgICAgICAgIlwiPiIJCQotICAgICAgCisgICAgICAgICJcIj4iCisKICAgICAgICMgc2VhcmNoaW5nIGZvciBGQUlMRUQgaW4gZmllbGQgNCw1LDYKICAgICAgICMgaWYgbm90IGZvdW5kLCB0ZXN0IFBBU1NFRAogICAgICAgZmFpbHVyZT0xCkBAIC05MiwxMSArOTIsMTEgQEAKICAgICAgICAgICAgIGZhaWx1cmU9MDsKICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgIH0gCisgICAgICB9CiAgICAgICBpZiggZmFpbHVyZSA9PSAxICkgewogICAgICAgICBwcmludCAiICAgPGZhaWx1cmUgdHlwZT1cInRlc3RmYWlsdXJlXCIvPiIKICAgICAgIH0KLSAgICAgIAorCiAgICAgICBwcmludCAiICA8L3Rlc3RjYXNlPiIKICAgICAgIGlkKys7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC91dGlsL0pTUjg4RGVwbG95ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvdXRpbC9KU1I4OERlcGxveWVyLmphdmEKaW5kZXggNGY3NzgxOC4uYTFjN2FjOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC91dGlsL0pTUjg4RGVwbG95ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3V0aWwvSlNSODhEZXBsb3llci5qYXZhCkBAIC00NSwxMyArNDUsMTMgQEAKICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBKMkVFX0RFUExPWU1FTlRfTUFOQUdFUiA9CiAgICAgICAgICAgICAgICAgICAgICAgICAiSjJFRS1EZXBsb3ltZW50RmFjdG9yeS1JbXBsZW1lbnRhdGlvbi1DbGFzcyI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgTGlzdCBzeXN0ZW1BcHBzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIAorCiAgICAgLyoqIFJlY29yZCBhbGwgZXZlbnRzIGRlbGl2ZXJlZCB0byB0aGlzIGRlcGxveWVyICh3aGljaCBpcyBhbHNvIGEgcHJvZ3Jlc3MgbGlzdGVuZXIuICovCiAgICAgcHJpdmF0ZSBWZWN0b3IgcmVjZWl2ZWRFdmVudHMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgCisKICAgICAvKiogUmVjb3JkIHRoZSBUYXJnZXRNb2R1bGVJRHMgdGhhdCByZXN1bHRlZCBmcm9tIHRoZSBtb3N0IHJlY2VudCBvcGVyYXRpb24uICovCiAgICAgcHJpdmF0ZSBUYXJnZXRNb2R1bGVJRCBbXSBtb3N0UmVjZW50VGFyZ2V0TW9kdWxlSURzID0gbnVsbDsKLSAgICAKKwogICAgIC8qKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIEpTUjg4RGVwbG95ZXIgKi8KICAgICBwdWJsaWMgSlNSODhEZXBsb3llcihTdHJpbmcgdXJpLCBTdHJpbmcgdXNlciwgU3RyaW5nIHBhc3N3b3JkKSB7CiAgICAgICAgIHRoaXMudXNlciA9IHVzZXI7CkBAIC02NSwxNSArNjUsMTUgQEAKICAgICAgICAgICAgIGRtID0gRGVwbG95bWVudEZhY3RvcnlNYW5hZ2VyLmdldEluc3RhbmNlKCkuZ2V0RGVwbG95bWVudE1hbmFnZXIodXJpLCB1c2VyLCBwYXNzd29yZCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgICBTeXN0ZW0uZXhpdCgtMSk7ICAgICAgICAgICAgICAKKyAgICAgICAgICAgIFN5c3RlbS5leGl0KC0xKTsKICAgICAgICAgfQogCiAgICAgICAgIFRhcmdldFtdIGFsbFRhcmdldHMgPSBkbS5nZXRUYXJnZXRzKCk7CiAgICAgICAgIGlmIChhbGxUYXJnZXRzLmxlbmd0aCA9PSAwKSB7CiAgICAgICAgICAgICBsb2coIkNhbid0IGZpbmQgZGVwbG95bWVudCB0YXJnZXRzLi4uIik7Ci0gICAgICAgICAgICBTeXN0ZW0uZXhpdCgtMSk7ICAgICAgICAgICAgICAKKyAgICAgICAgICAgIFN5c3RlbS5leGl0KC0xKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAvLyBJZiB0ZXN0IGJlaW5nIHJ1biBvbiBFRSwgZXhjbHVkZSB0aGUgREFTIHNlcnZlciBpbnN0YW5jZSBmcm9tIHRoZSBkZXBsb3kgdGFyZ2V0cwogICAgICAgICBTdHJpbmcgdGFyZ2V0UGxhdGZvcm0gPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImRlcGxveW1lbnRUYXJnZXQiKTsKICAgICAgICAgTGlzdCBmaWx0ZXJlZFRhcmdldHMgPSBuZXcgQXJyYXlMaXN0KCk7CkBAIC0xMDUsNyArMTA1LDcgQEAKICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgZGVwbG95bWVudFN0YXR1cyA9IHBvLmdldERlcGxveW1lbnRTdGF0dXMoKTsKICAgICAgICAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoMjAwKTsKLSAgICAgICAgfSB3aGlsZSAoIShkZXBsb3ltZW50U3RhdHVzLmlzQ29tcGxldGVkKCkgfHwgZGVwbG95bWVudFN0YXR1cy5pc0ZhaWxlZCgpKSk7ICAgCisgICAgICAgIH0gd2hpbGUgKCEoZGVwbG95bWVudFN0YXR1cy5pc0NvbXBsZXRlZCgpIHx8IGRlcGxveW1lbnRTdGF0dXMuaXNGYWlsZWQoKSkpOwogICAgICAgICBsb2coIkRlcGxveW1lbnQgc3RhdHVzIGlzICIgKyBkZXBsb3ltZW50U3RhdHVzLmdldFN0YXRlKCkudG9TdHJpbmcoKSk7CiAgICAgICAgIGlmKGRlcGxveW1lbnRTdGF0dXMuaXNGYWlsZWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4oLTEpOwpAQCAtMTE0LDcgKzExNCw3IEBACiAKICAgICBwdWJsaWMgUHJvZ3Jlc3NPYmplY3QgZGVwbG95KEZpbGUgYXJjaGl2ZSwgRmlsZSBkZXBsb3ltZW50UGxhbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBzdGFydEJ5RGVmYXVsdCwgYm9vbGVhbiB1c2VTdHJlYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vZHVsZVR5cGUgdHlwZSkgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vZHVsZVR5cGUgdHlwZSkKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgUHJvZ3Jlc3NPYmplY3QgZHBvID0gbnVsbDsKQEAgLTEyMyw3ICsxMjMsNyBAQAogICAgICAgICAgICAgbG9nKCJXYXJuaW5nLCBkZXBsb3lpbmcgd2l0aCBudWxsIGRlcGxveW1lbnQgcGxhbiIpOwogICAgICAgICAgICAgaWYgKHVzZVN0cmVhbSkgewogICAgICAgICAgICAgICAgIGlmICh0eXBlID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgZHBvID0gZG0uZGlzdHJpYnV0ZSh0YXJnZXRzLCAKKyAgICAgICAgICAgICAgICAgICAgZHBvID0gZG0uZGlzdHJpYnV0ZSh0YXJnZXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEZpbGVJbnB1dFN0cmVhbShhcmNoaXZlLmdldEFic29sdXRlUGF0aCgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0xMzIsMTIgKzEzMiwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBkcG8gPSBkbS5kaXN0cmlidXRlKHRhcmdldHMsIGFyY2hpdmUsIG51bGwpOyAgICAgICAgICAKKyAgICAgICAgICAgICAgICBkcG8gPSBkbS5kaXN0cmlidXRlKHRhcmdldHMsIGFyY2hpdmUsIG51bGwpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKHVzZVN0cmVhbSkgewogICAgICAgICAgICAgICAgIGlmICh0eXBlID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgZHBvID0gZG0uZGlzdHJpYnV0ZSh0YXJnZXRzLCAKKyAgICAgICAgICAgICAgICAgICAgZHBvID0gZG0uZGlzdHJpYnV0ZSh0YXJnZXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEZpbGVJbnB1dFN0cmVhbShhcmNoaXZlLmdldEFic29sdXRlUGF0aCgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBGaWxlSW5wdXRTdHJlYW0oZGVwbG95bWVudFBsYW4uZ2V0QWJzb2x1dGVQYXRoKCkpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMTQ2LDkgKzE0Niw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRmlsZUlucHV0U3RyZWFtKGRlcGxveW1lbnRQbGFuLmdldEFic29sdXRlUGF0aCgpKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBkcG8gPSBkbS5kaXN0cmlidXRlKHRhcmdldHMsIGFyY2hpdmUsIGRlcGxveW1lbnRQbGFuKTsgICAgICAgICAgCisgICAgICAgICAgICAgICAgZHBvID0gZG0uZGlzdHJpYnV0ZSh0YXJnZXRzLCBhcmNoaXZlLCBkZXBsb3ltZW50UGxhbik7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgICAgICAgICAKKyAgICAgICAgfQogICAgICAgICBpZiAoZHBvIT1udWxsKSB7CiAgICAgICAgICAgICBkcG8uYWRkUHJvZ3Jlc3NMaXN0ZW5lcih0aGlzKTsKICAgICAgICAgICAgIGlmKHdhaXRUaWxsQ29tcGxldGUoZHBvKSAhPSAwKSB7CkBAIC0xNTYsNyArMTU2LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4obnVsbCk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIFRhcmdldE1vZHVsZUlEW10gdGFyZ2V0TW9kdWxlSURzID0gZHBvLmdldFJlc3VsdFRhcmdldE1vZHVsZUlEcygpOyAgICAgICAgCisgICAgICAgICAgICBUYXJnZXRNb2R1bGVJRFtdIHRhcmdldE1vZHVsZUlEcyA9IGRwby5nZXRSZXN1bHRUYXJnZXRNb2R1bGVJRHMoKTsKICAgICAgICAgICAgIHRoaXMubW9zdFJlY2VudFRhcmdldE1vZHVsZUlEcyA9IHRhcmdldE1vZHVsZUlEczsKICAgICAgICAgICAgIGR1bXBSZXN1bHRNb2R1bGVJRHMoIkRlcGxveWVkICIgLCBkcG8pOwogCkBAIC0xOTYsMjIgKzE5NiwyMiBAQAogICAgICAgICBQcm9ncmVzc09iamVjdCBkcG8gPSBudWxsOwogICAgICAgICBpZiAoZGVwbG95bWVudFBsYW4gPT0gbnVsbCB8fCBkZXBsb3ltZW50UGxhbi5nZXROYW1lKCkuZXF1YWxzKCJudWxsIikpIHsKICAgICAgICAgICAgIGxvZygiV2FybmluZywgcmVkZXBsb3lpbmcgd2l0aCBudWxsIGRlcGxveW1lbnQgcGxhbiIpOwotICAgICAgICAgICAgaWYgKHVzZVN0cmVhbSkgeyAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGRwbyA9IGRtLnJlZGVwbG95KG1vZHVsZXMsIAorICAgICAgICAgICAgaWYgKHVzZVN0cmVhbSkgeworICAgICAgICAgICAgICAgIGRwbyA9IGRtLnJlZGVwbG95KG1vZHVsZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRmlsZUlucHV0U3RyZWFtKGFyY2hpdmUuZ2V0QWJzb2x1dGVQYXRoKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGRwbyA9IGRtLnJlZGVwbG95KG1vZHVsZXMsIGFyY2hpdmUsIG51bGwpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKHVzZVN0cmVhbSkgeyAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGRwbyA9IGRtLnJlZGVwbG95KG1vZHVsZXMsIAorICAgICAgICAgICAgaWYgKHVzZVN0cmVhbSkgeworICAgICAgICAgICAgICAgIGRwbyA9IGRtLnJlZGVwbG95KG1vZHVsZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRmlsZUlucHV0U3RyZWFtKGFyY2hpdmUuZ2V0QWJzb2x1dGVQYXRoKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEZpbGVJbnB1dFN0cmVhbShkZXBsb3ltZW50UGxhbi5nZXRBYnNvbHV0ZVBhdGgoKSkpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBkcG8gPSBkbS5yZWRlcGxveShtb2R1bGVzLCBhcmNoaXZlLCBkZXBsb3ltZW50UGxhbik7ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRwbyA9IGRtLnJlZGVwbG95KG1vZHVsZXMsIGFyY2hpdmUsIGRlcGxveW1lbnRQbGFuKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAgICAgICAgIAorICAgICAgICB9CiAgICAgICAgIGlmIChkcG8hPW51bGwpIHsKICAgICAgICAgICAgIGRwby5hZGRQcm9ncmVzc0xpc3RlbmVyKHRoaXMpOwogICAgICAgICAgICAgaWYod2FpdFRpbGxDb21wbGV0ZShkcG8pICE9IDApIHsKQEAgLTIxOSw3ICsyMTksNyBAQAogICAgICAgICAgICAgICAgIHJldHVybihudWxsKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgVGFyZ2V0TW9kdWxlSURbXSB0YXJnZXRNb2R1bGVJRHMgPSBkcG8uZ2V0UmVzdWx0VGFyZ2V0TW9kdWxlSURzKCk7ICAgICAgICAKKyAgICAgICAgICAgIFRhcmdldE1vZHVsZUlEW10gdGFyZ2V0TW9kdWxlSURzID0gZHBvLmdldFJlc3VsdFRhcmdldE1vZHVsZUlEcygpOwogICAgICAgICAgICAgdGhpcy5tb3N0UmVjZW50VGFyZ2V0TW9kdWxlSURzID0gdGFyZ2V0TW9kdWxlSURzOwogICAgICAgICAgICAgZHVtcFJlc3VsdE1vZHVsZUlEcygiUmVkZXBsb3llZCAiICwgZHBvKTsKICAgICAgICAgfQpAQCAtMzMwLDE1ICszMzAsMTUgQEAKIAogICAgIHByb3RlY3RlZCB2b2lkIGR1bXBSZXN1bHRNb2R1bGVJRHMoU3RyaW5nIHByZWZpeCwgUHJvZ3Jlc3NPYmplY3QgcG8pIHsKICAgICAgICAgVGFyZ2V0TW9kdWxlSURbXSB0YXJnZXRNb2R1bGVJRHMgPSBwby5nZXRSZXN1bHRUYXJnZXRNb2R1bGVJRHMoKTsKLQlkdW1wTW9kdWxlc0lEcyhwcmVmaXgsIHRhcmdldE1vZHVsZUlEcyk7CisgICAgZHVtcE1vZHVsZXNJRHMocHJlZml4LCB0YXJnZXRNb2R1bGVJRHMpOwogICAgIH0KIAogICAgIHByb3RlY3RlZCB2b2lkIGR1bXBNb2R1bGVzSURzKFN0cmluZyBwcmVmaXgsIFRhcmdldE1vZHVsZUlEW10gdGFyZ2V0TW9kdWxlSURzKSB7Ci0gICAgICAgIGZvciAoaW50IGk9MDtpPHRhcmdldE1vZHVsZUlEcy5sZW5ndGg7aSsrKSB7ICAgICAgICAgICAgCi0gICAgICAgICAgICBkdW1wTW9kdWxlc0lEcyhwcmVmaXgsIHRhcmdldE1vZHVsZUlEc1tpXSk7ICAgICAgICAgICAgCisgICAgICAgIGZvciAoaW50IGk9MDtpPHRhcmdldE1vZHVsZUlEcy5sZW5ndGg7aSsrKSB7CisgICAgICAgICAgICBkdW1wTW9kdWxlc0lEcyhwcmVmaXgsIHRhcmdldE1vZHVsZUlEc1tpXSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwcm90ZWN0ZWQgdm9pZCBkdW1wTW9kdWxlc0lEcyhTdHJpbmcgcHJlZml4LCBUYXJnZXRNb2R1bGVJRCB0YXJnZXRNb2R1bGVJRCkgewogICAgICAgICBsb2cocHJlZml4ICsgdGFyZ2V0TW9kdWxlSUQpOwogICAgICAgICBUYXJnZXRNb2R1bGVJRFtdIHN1YnMgPSB0YXJnZXRNb2R1bGVJRC5nZXRDaGlsZFRhcmdldE1vZHVsZUlEKCk7CkBAIC0zNDksNyArMzQ5LDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyBUYXJnZXRNb2R1bGVJRFtdIGdldEFwcGxpY2F0aW9ucyhNb2R1bGVUeXBlIG1vZHVsZVR5cGUsIEJvb2xlYW4gcnVubmluZykgCisgICAgcHVibGljIFRhcmdldE1vZHVsZUlEW10gZ2V0QXBwbGljYXRpb25zKE1vZHVsZVR5cGUgbW9kdWxlVHlwZSwgQm9vbGVhbiBydW5uaW5nKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgVGFyZ2V0TW9kdWxlSURbXSBtb2R1bGVzID0gbnVsbDsKICAgICAgICAgaWYgKHJ1bm5pbmc9PW51bGwpIHsKQEAgLTM2Myw3ICszNjMsNyBAQAogICAgICAgICByZXR1cm4gbW9kdWxlczsKICAgICB9CiAKLSAgICBwdWJsaWMgVGFyZ2V0TW9kdWxlSURbXSBnZXRBbGxBcHBsaWNhdGlvbnMoQm9vbGVhbiBydW5uaW5nKSAKKyAgICBwdWJsaWMgVGFyZ2V0TW9kdWxlSURbXSBnZXRBbGxBcHBsaWNhdGlvbnMoQm9vbGVhbiBydW5uaW5nKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgLy9sb2coIjIyMi4gZ2V0QWxsQXBwbGljYXRpb25zLCBydW5uaW5nID0gIiArIHJ1bm5pbmcpOwogICAgICAgICBUYXJnZXRNb2R1bGVJRFtdIGVhcnMgPSBnZXRBcHBsaWNhdGlvbnMoTW9kdWxlVHlwZS5FQVIsIHJ1bm5pbmcpOwpAQCAtMzc4LDE1ICszNzgsMTUgQEAKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjYXJzLmxlbmd0aDsgaSsrKSB7IGxpc3QuYWRkKGNhcnNbaV0pOyB9CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZWpicy5sZW5ndGg7IGkrKykgeyBsaXN0LmFkZChlamJzW2ldKTsgfQogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJhcnMubGVuZ3RoOyBpKyspIHsgbGlzdC5hZGQocmFyc1tpXSk7IH0KLSAgICAKKwogICAgICAgICBUYXJnZXRNb2R1bGVJRFtdIHJlc3VsdHMgPSBuZXcgVGFyZ2V0TW9kdWxlSURbbGlzdC5zaXplKCldOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpc3Quc2l6ZSgpOyBpKyspIHsgCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlzdC5zaXplKCk7IGkrKykgewogICAgICAgICAgICAgcmVzdWx0c1tpXSA9IChUYXJnZXRNb2R1bGVJRCkgbGlzdC5nZXQoaSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CiAgICAgfQogCi0gICAgcHJvdGVjdGVkIFRhcmdldE1vZHVsZUlEW10gZmluZEFwcGxpY2F0aW9uKFN0cmluZyBtb2R1bGVJRCwgTW9kdWxlVHlwZSBtb2R1bGVUeXBlLCBCb29sZWFuIHJ1bm5pbmcpIAorICAgIHByb3RlY3RlZCBUYXJnZXRNb2R1bGVJRFtdIGZpbmRBcHBsaWNhdGlvbihTdHJpbmcgbW9kdWxlSUQsIE1vZHVsZVR5cGUgbW9kdWxlVHlwZSwgQm9vbGVhbiBydW5uaW5nKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgLyoKICAgICAgICAgICpUaGUgRGVwbG95bWVudEZhY2lsaXR5IHJlcXVpcmVzIHRoYXQgc3RhcnQsIHN0b3AsIHJlZGVwbG95LCBhbmQgdW5kZXBsb3kgcmVxdWVzdHMKQEAgLTM5OCw3ICszOTgsNyBAQAogICAgICAgICByZXR1cm4gZmlsdGVyVGFyZ2V0TW9kdWxlSURzQnlNb2R1bGUobGlzdCwgbW9kdWxlSUQpOwogICAgIH0KIAotICAgIHByb3RlY3RlZCBUYXJnZXRNb2R1bGVJRFtdIGZpbmRBcHBsaWNhdGlvbihTdHJpbmcgbW9kdWxlSUQsIEJvb2xlYW4gcnVubmluZykgCisgICAgcHJvdGVjdGVkIFRhcmdldE1vZHVsZUlEW10gZmluZEFwcGxpY2F0aW9uKFN0cmluZyBtb2R1bGVJRCwgQm9vbGVhbiBydW5uaW5nKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgLy9sb2coIjExMSB0cnlpbmcgdG8gZ2V0IGV2ZXJ5dGhpbmcsIG1vZHVsZWlkID0gIiArIG1vZHVsZUlEICsgIjsgYm9vbGVhbiA9ICIgKyBydW5uaW5nKTsKICAgICAgICAgVGFyZ2V0TW9kdWxlSURbXSBsaXN0ID0gZ2V0QWxsQXBwbGljYXRpb25zKHJ1bm5pbmcpOwpAQCAtNDI0LDEwICs0MjQsMTAgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gKFRhcmdldE1vZHVsZUlEIFtdKSh0bWlkc1RvVXNlLnRvQXJyYXkobmV3IFRhcmdldE1vZHVsZUlEW3RtaWRzVG9Vc2Uuc2l6ZSgpXSkpOwogICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBsaXN0QXBwbGljYXRpb25zKE1vZHVsZVR5cGUgbW9kdWxlVHlwZSwgQm9vbGVhbiBydW5uaW5nKSAKKworICAgIHB1YmxpYyB2b2lkIGxpc3RBcHBsaWNhdGlvbnMoTW9kdWxlVHlwZSBtb2R1bGVUeXBlLCBCb29sZWFuIHJ1bm5pbmcpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBUYXJnZXRNb2R1bGVJRFtdIG1vZHVsZXMgPSBnZXRBcHBsaWNhdGlvbnMobW9kdWxlVHlwZSwgcnVubmluZyk7IAorICAgICAgICBUYXJnZXRNb2R1bGVJRFtdIG1vZHVsZXMgPSBnZXRBcHBsaWNhdGlvbnMobW9kdWxlVHlwZSwgcnVubmluZyk7CiAgICAgICAgIGlmIChtb2R1bGVzID09IG51bGwpIHsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbW9kdWxlcy5sZW5ndGg7IGkrKykgewpAQCAtNDM2LDE0ICs0MzYsMTQgQEAKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJ1bm5pbmcuYm9vbGVhblZhbHVlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgZHVtcE1vZHVsZXNJRHMoIiAgICBSVU5OSU5HICIsIG1vZHVsZXNbaV0pOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGR1bXBNb2R1bGVzSURzKCIgICAgTk9UIFJVTk5JTkcgIiwgbW9kdWxlc1tpXSk7IAorICAgICAgICAgICAgICAgICAgICBkdW1wTW9kdWxlc0lEcygiICAgIE5PVCBSVU5OSU5HICIsIG1vZHVsZXNbaV0pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBpbnZva2VBcHBDbGllbnQoUHJvZ3Jlc3NPYmplY3QgcG8sIFRhcmdldE1vZHVsZUlEIHRhcmdldE1vZHVsZUlEKSB7Ci0gICAgICAgIFRhcmdldE1vZHVsZUlEW10gc3VicyA9IHRhcmdldE1vZHVsZUlELmdldENoaWxkVGFyZ2V0TW9kdWxlSUQoKTsgICAKKyAgICAgICAgVGFyZ2V0TW9kdWxlSURbXSBzdWJzID0gdGFyZ2V0TW9kdWxlSUQuZ2V0Q2hpbGRUYXJnZXRNb2R1bGVJRCgpOwogICAgICAgICBpZiAoc3Vicz09bnVsbCkgewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC00NTgsMjYgKzQ1OCwyNiBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgIH0gICAgCisgICAgfQogCi0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgaW50IGZpbmFsRXhpdFZhbHVlID0gMDsKIAotICAgICAgICBpZiAoYXJncy5sZW5ndGggPT0gMCB8fCAiaGVscCIuZXF1YWxzKGFyZ3NbMF0pKSB7IAotICAgICAgICAgICAgdXNhZ2UoKTsgCisgICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PSAwIHx8ICJoZWxwIi5lcXVhbHMoYXJnc1swXSkpIHsKKyAgICAgICAgICAgIHVzYWdlKCk7CiAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKICAgICAgICAgfQogICAgICAgICBpZiAoYXJncy5sZW5ndGggPCA1KSB7Ci0gICAgICAgICAgICB1c2FnZSgpOyAKKyAgICAgICAgICAgIHVzYWdlKCk7CiAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKICAgICAgICAgfQogCiAgICAgICAgIEpTUjg4RGVwbG95ZXIgZGVwbG95ZXIgPSBuZXcgSlNSODhEZXBsb3llcihhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTsKICAgICAgICAgaWYgKCJkZXBsb3kiLmVxdWFscyhhcmdzWzBdKSB8fCAiZGVwbG95LXN0cmVhbSIuZXF1YWxzKGFyZ3NbMF0pKSB7Ci0gICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPCA2KSB7IAotICAgICAgICAgICAgICAgIHVzYWdlKCk7IAorICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgNikgeworICAgICAgICAgICAgICAgIHVzYWdlKCk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLmV4aXQoMSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBib29sZWFuIHVzZVN0cmVhbSA9ICJkZXBsb3ktc3RyZWFtIi5lcXVhbHMoYXJnc1swXSk7CkBAIC01MDcsOCArNTA3LDggQEAKICAgICAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmICgiZGVwbG95LXN0cmVhbS13aXRodHlwZSIuZXF1YWxzKGFyZ3NbMF0pKSB7Ci0gICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPCA3KSB7IAotICAgICAgICAgICAgICAgIHVzYWdlKCk7IAorICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgNykgeworICAgICAgICAgICAgICAgIHVzYWdlKCk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLmV4aXQoMSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBib29sZWFuIHVzZVN0cmVhbSA9IHRydWU7CkBAIC01MTgsNyArNTE4LDcgQEAKICAgICAgICAgICAgICAgICBlcnJvcigiRmlsZSBub3QgZm91bmQgOiAiICsgaW5wdXRGaWxlLmdldFBhdGgoKSk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLmV4aXQoMSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBNb2R1bGVUeXBlIHQgPSAKKyAgICAgICAgICAgIE1vZHVsZVR5cGUgdCA9CiAgICAgICAgICAgICAgICAgTW9kdWxlVHlwZS5nZXRNb2R1bGVUeXBlKChuZXcgSW50ZWdlcihhcmdzWzZdKSkuaW50VmFsdWUoKSk7CiAgICAgICAgICAgICBGaWxlIGRlcGxveW1lbnRGaWxlID0gbnVsbDsKICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDcpIHsKQEAgLTU0MSw4ICs1NDEsOCBAQAogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKCJsaXN0Ii5lcXVhbHMoYXJnc1swXSkpIHsKIAotICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoICE9IDUpIHsgCi0gICAgICAgICAgICAgICAgdXNhZ2UoKTsgCisgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggIT0gNSkgeworICAgICAgICAgICAgICAgIHVzYWdlKCk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLmV4aXQoMCk7CiAgICAgICAgICAgICB9CiAKQEAgLTU3NCwxMSArNTc0LDExIEBACiAgICAgICAgICAgICAgICAgU3lzdGVtLmV4aXQoLTEpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKCJyZWRlcGxveSIuZXF1YWxzKGFyZ3NbMF0pIHx8ICJyZWRlcGxveS1zdHJlYW0iLmVxdWFscyhhcmdzWzBdKSkgewotICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgNikgeyAKLSAgICAgICAgICAgICAgICB1c2FnZSgpOyAKKyAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8IDYpIHsKKyAgICAgICAgICAgICAgICB1c2FnZSgpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5leGl0KC0xKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBib29sZWFuIHVzZVN0cmVhbSA9ICJyZWRlcGxveS1zdHJlYW0iLmVxdWFscyhhcmdzWzBdKTsKICAgICAgICAgICAgIGphdmEuaW8uRmlsZSBpbnB1dEZpbGUgPSBuZXcgamF2YS5pby5GaWxlKGFyZ3NbNV0pOwogICAgICAgICAgICAgaWYgKCFpbnB1dEZpbGUuZXhpc3RzKCkpIHsKQEAgLTYwOSw4ICs2MDksOCBAQAogICAgICAgICAgICAgICAgIFN5c3RlbS5leGl0KDEpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoICE9IDUpIHsgCi0gICAgICAgICAgICAgICAgdXNhZ2UoKTsgCisgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggIT0gNSkgeworICAgICAgICAgICAgICAgIHVzYWdlKCk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLmV4aXQoMSk7CiAgICAgICAgICAgICB9CiAKQEAgLTY1MSw3ICs2NTEsNyBAQAogICAgICAgICB9CiAgICAgICAgIFN5c3RlbS5leGl0KGZpbmFsRXhpdFZhbHVlKTsKICAgICB9Ci0gICAgCisKICAgICAvKiogSW52b2tlZCB3aGVuIGEgZGVwbG95bWVudCBwcm9ncmVzcyBldmVudCBvY2N1cnMuCiAgICAgICoKICAgICAgKiBAcGFyYW0gZXZlbnQgdGhlIHByb2dyZXNzIHN0YXR1cyBldmVudC4KQEAgLTY3Niw3ICs2NzYsNyBAQAogICAgICAgICBQcm9ncmVzc0V2ZW50IFtdIGFuc3dlciA9IG5ldyBQcm9ncmVzc0V2ZW50W3RoaXMucmVjZWl2ZWRFdmVudHMuc2l6ZSgpXTsKICAgICAgICAgcmV0dXJuIChQcm9ncmVzc0V2ZW50IFtdKSB0aGlzLnJlY2VpdmVkRXZlbnRzLnRvQXJyYXkoYW5zd2VyKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKkNsZWFyIHRoZSBjb2xsZWN0aW9uIG9mIHJlY2VpdmVkIGV2ZW50cyByZWNvcmRlZCBieSB0aGlzIGRlcGxveWVyLgogICAgICAqLwpAQCAtNjg3LDExICs2ODcsMTEgQEAKICAgICBwdWJsaWMgVGFyZ2V0TW9kdWxlSUQgW10gZ2V0TW9zdFJlY2VudFRhcmdldE1vZHVsZUlEcygpIHsKICAgICAgICAgcmV0dXJuIHRoaXMubW9zdFJlY2VudFRhcmdldE1vZHVsZUlEczsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBjbGVhck1vc3RSZWNlbnRUYXJnZXRNb2R1bGVJRHMoKSB7CiAgICAgICAgIHRoaXMubW9zdFJlY2VudFRhcmdldE1vZHVsZUlEcyA9IG51bGw7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIGxvYWREZXBsb3ltZW50RmFjdG9yeSgpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIEZpbGUgZmlsZSA9IG5ldyBGaWxlKFN5c3RlbS5nZXRQcm9wZXJ0eSgiY29tLnN1bi5hYXMuaW5zdGFsbFJvb3QiKQpAQCAtNzA4LDEwICs3MDgsMTAgQEAKICAgICAgICAgICAgICAgICBmYWN0b3J5PXVybENsYXNzTG9hZGVyLmxvYWRDbGFzcyhjbGFzc05hbWUpOwogICAgICAgICAgICAgfSBjYXRjaCAoQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBjbmZlKSB7CiAgICAgICAgICAgICAgICAgY25mZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgICAgIH0gICAKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgT2JqZWN0IGRmID0gbnVsbDsKLSAgICAgICAgICAgIHRyeSB7ICAgCisgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGRmID0gZmFjdG9yeS5uZXdJbnN0YW5jZSgpOwogICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGllKSB7CiAgICAgICAgICAgICAgICAgaWUucHJpbnRTdGFja1RyYWNlKCk7CkBAIC03MjAsNyArNzIwLDcgQEAKICAgICAgICAgICAgICAgICBEZXBsb3ltZW50RmFjdG9yeU1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5yZWdpc3RlckRlcGxveW1lbnRGYWN0b3J5KChEZXBsb3ltZW50RmFjdG9yeSkgZGYpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgtMSk7Ci0gICAgICAgICAgICB9ICAKKyAgICAgICAgICAgIH0KIAogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGxvZygiRmFpbGVkIHRvIGxvYWQgdGhlIGRlcGxveW1lbnQgZmFjdG9yeS4iKTsKQEAgLTc1Myw3ICs3NTMsNyBAQAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBlcnJvcihTdHJpbmcgbWVzc2FnZSkgewogICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIltKU1I4OERlcGxveWVyXTo6ICIgKyBtZXNzYWdlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgbG9hZFN5c3RlbUFwcHMoKSB7CiAgICAgICAgIHN5c3RlbUFwcHMuYWRkKCJNRWpiQXBwIik7CiAgICAgICAgIHN5c3RlbUFwcHMuYWRkKCJfX2VqYl9jb250YWluZXJfdGltZXJfYXBwIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3V0aWwvY3VzdG9tQW50VGFza3MvSmF2YVdpdGhSZXN1bHQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvdXRpbC9jdXN0b21BbnRUYXNrcy9KYXZhV2l0aFJlc3VsdC5qYXZhCmluZGV4IGZjMmZlN2EuLmEwNjE2ZGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvdXRpbC9jdXN0b21BbnRUYXNrcy9KYXZhV2l0aFJlc3VsdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvdXRpbC9jdXN0b21BbnRUYXNrcy9KYXZhV2l0aFJlc3VsdC5qYXZhCkBAIC0yMyw3ICsyMyw3IEBACiBpbXBvcnQgamF2YS5pby5GaWxlOwogCiAvKioKLSAqQ3VzdG9tIEFudCB0YXNrIHRoYXQgcnVucyBKYXZhLCBqdXN0IGxpa2UgdGhlIGJ1aWx0LWluIGphdmEgYW50IHRhc2ssIGJ1dCBzdG9yZXMgdGhlIHJlc3VsdCBvZiB0aGUgaW52b2NhdGlvbiBhcyBhIAorICpDdXN0b20gQW50IHRhc2sgdGhhdCBydW5zIEphdmEsIGp1c3QgbGlrZSB0aGUgYnVpbHQtaW4gamF2YSBhbnQgdGFzaywgYnV0IHN0b3JlcyB0aGUgcmVzdWx0IG9mIHRoZSBpbnZvY2F0aW9uIGFzIGEKICAqcHJvcGVydHkgdmFsdWUsIHdoaWNoIEFudCdzIGphdmEgdGFzayBkb2VzIG5vdCAoeWV0KSBzdXBwb3J0LgogICo8cD4KICAqRm9ydHVuYXRlbHksIHdlIG9ubHkgbmVlZCB0byBtaW5pbWFsbHkgZXh0ZW5kIHRoZSBKYXZhIGNsYXNzIGluIEFudCwgb3ZlcnJpZGluZyB0aGUgZXhlY3V0ZSBtZXRob2QgKHRvIHNldCB0aGUgcmVzdWx0IHByb3BlcnR5IGlmCkBAIC00MiwxNCArNDIsMTQgQEAKICAqIEBhdXRob3IgIHRqcXVpbm4KICAqLwogcHVibGljIGNsYXNzIEphdmFXaXRoUmVzdWx0IGV4dGVuZHMgb3JnLmFwYWNoZS50b29scy5hbnQudGFza2RlZnMuSmF2YSB7Ci0gICAgCisKICAgICAvKgogICAgICAqU3RyaW5nIGhvbGRpbmcgdGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGJlIHNldCB0byB0aGUgcmVzdWx0IHZhbHVlIG9mIHRoZSBKYXZhIGV4ZWN1dGlvbi4gIElmCiAgICAgICp0aGUgYnVpbGQueG1sIGZpbGUgZG9lcyBub3Qgc3BlY2lmeSB0aGUgcHJvcGVydHkgbmFtZSwgdGhlbiB0aGlzIHdpbGwgcmVtYWluIG51bGwgYW5kIG5vIHByb3BlcnR5CiAgICAgICp2YWx1ZSBhc3NpZ25tZW50IHdpbGwgb2NjdXIuCiAgICAgICovCiAgICAgcHJpdmF0ZSBTdHJpbmcgcmVzdWx0UHJvcGVydHkgPSBudWxsOwotICAgIAorCiAgICAgLyoKICAgICAgKlRoZSBuZXh0IHR3byBkZWNsYXJhdGlvbnMgd2VyZSBkdXBsaWNhdGVkIGZyb20gdGhlIGphdmEgdGFzaydzIHNvdXJjZSBzbyB0aGUgZHVwbGljYXRlZCBleGVjdXRlCiAgICAgICptZXRob2QgY291bGQgYmUgbW9kaWZpZWQgYXMgbGl0dGxlIGFzIHBvc3NpYmxlLgpAQCAtNjAsNyArNjAsNyBAQAogICAgIC8qKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIEphdmFXaXRoUmVzdWx0ICovCiAgICAgcHVibGljIEphdmFXaXRoUmVzdWx0KCkgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoKSB7CiAgICAgICAgIHN1cGVyLmluaXQoKTsKICAgICAgICAgLyoKQEAgLTc0LDEzICs3NCwxMyBAQAogICAgICAqIFRoZSB3b3JraW5nIGRpcmVjdG9yeSBvZiB0aGUgcHJvY2Vzcy4KICAgICAgKjxwPgogICAgICAqVGhpcyBtZXRob2Qgc2ltcGx5IG1pcnJvcnMgdGhlIHN1cGVyY2xhc3Mgc2V0RGlyIG1ldGhvZC4gIFdlIHVzZSBpdCB0byBzZXQgdGhpcyBjbGFzcydzIHByaXZhdGUgZGlyCi0gICAgICp2YXJpYWJsZSBhbmQgYWxzbyB0byBzZXQgdGhlIHN1cGVyY2xhc3MncyBwcml2YXRlIGRpciB2YXJpYWJsZS4gIAorICAgICAqdmFyaWFibGUgYW5kIGFsc28gdG8gc2V0IHRoZSBzdXBlcmNsYXNzJ3MgcHJpdmF0ZSBkaXIgdmFyaWFibGUuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RGlyKEZpbGUgZCkgewogICAgICAgICBzdXBlci5zZXREaXIoZCk7CiAgICAgICAgIHRoaXMuZGlyID0gZDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKkFzc2lnbnMgdGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIHJlY2VpdmUgdGhlIHJlc3VsdCB2YWx1ZSBmcm9tIHRoZSBKVk0gZXhlY3V0aW9uLgogICAgICAqQHBhcmFtIHJlc3VsdFByb3BlcnR5IG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGJlIGFzc2lnbmVkCkBAIC04OCw3ICs4OCw3IEBACiAgICAgcHVibGljIHZvaWQgc2V0UmVzdWx0UHJvcGVydHkoU3RyaW5nIHJlc3VsdFByb3BlcnR5KSB7CiAgICAgICAgIHRoaXMucmVzdWx0UHJvcGVydHkgPSByZXN1bHRQcm9wZXJ0eTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBJZiB0cnVlLCB0aGVuIGZhaWwgaWYgdGhlIGNvbW1hbmQgZXhpdHMgd2l0aCBhCiAgICAgICogcmV0dXJuY29kZSBvdGhlciB0aGFuIDAKQEAgLTEwMiw3ICsxMDIsNyBAQAogICAgIC8qKgogICAgICAqIERvIHRoZSBleGVjdXRpb24uCiAgICAgICo8cD4KLSAgICAgKkFsbW9zdCBhbGwgb2YgdGhpcyBjb2RlIGlzIGR1cGxpY2F0ZWQgZnJvbSB0aGUgc291cmNlIGZvciB0aGUgYnVpbGQtaW4gamF2YSBhbnQgdGFzay4gIFRoZSBkaWZmZXJlbmNlIGlzIAorICAgICAqQWxtb3N0IGFsbCBvZiB0aGlzIGNvZGUgaXMgZHVwbGljYXRlZCBmcm9tIHRoZSBzb3VyY2UgZm9yIHRoZSBidWlsZC1pbiBqYXZhIGFudCB0YXNrLiAgVGhlIGRpZmZlcmVuY2UgaXMKICAgICAgKnRoZSBsb2dpYyB0aGF0IGNoZWNrcyB3aGV0aGVyIHRoZSByZXN1bHRwcm9wZXJ0eSB2YXJpYWJsZSBoYXMgYmVlbiBzZXQgYW5kLCBpZiBzbywgYXNzaWducyBhIHZhbHVlIHRvIHRoYXQKICAgICAgKnByb3BlcnR5LgogICAgICAqLwpAQCAtMTExLDcgKzExMSw3IEBACiAKICAgICAgICAgaW50IGVyciA9IC0xOwogICAgICAgICB0cnkgewotICAgICAgICAgICAgaWYgKChlcnIgPSBleGVjdXRlSmF2YSgpKSAhPSAwKSB7IAorICAgICAgICAgICAgaWYgKChlcnIgPSBleGVjdXRlSmF2YSgpKSAhPSAwKSB7CiAgICAgICAgICAgICAgICAgaWYgKGZhaWxPbkVycm9yKSB7CiAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBCdWlsZEV4Y2VwdGlvbigiSmF2YSByZXR1cm5lZDogIiArIGVyciwgbG9jYXRpb24pOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0xMjAsNyArMTIwLDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIGRpciA9IHNhdmVkRGlyOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKklmIHRoZSByZXN1bHQgcHJvcGVydHkgd2FzIGFzc2lnbmVkIC0gbWVhbmluZyB0aGUgaW52b2tpbmcgYnVpbGQueG1sIHdhbnRzIHRvIGtub3cgdGhlCiAgICAgICAgICAgICAgKnJlc3VsdCBvZiB0aGUgSlZNIGV4ZWN1dGlvbiAtIHRoZW4gYXNzaWduIHRoZSBKVk0gcmVzdWx0IHRvIHRoZSBzcGVjaWZpZWQgcHJvcGVydHkuICBCZWNhdXNlCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3V0aWwvZGV2dGVzdHMvZGVwbG95bWVudC91dGlsL0Fubm90YXRpb25UZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3V0aWwvZGV2dGVzdHMvZGVwbG95bWVudC91dGlsL0Fubm90YXRpb25UZXN0LmphdmEKaW5kZXggOWFhNWM3ZS4uODI2ZTU2OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC91dGlsL2RldnRlc3RzL2RlcGxveW1lbnQvdXRpbC9Bbm5vdGF0aW9uVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvdXRpbC9kZXZ0ZXN0cy9kZXBsb3ltZW50L3V0aWwvQW5ub3RhdGlvblRlc3QuamF2YQpAQCAtNzAsNyArNzAsNyBAQAogICAgICAgICBmaW5hbCBTZXJ2aWNlTG9jYXRvciBzZXJ2aWNlTG9jYXRvciA9IFV0aWxzLmdldFNlcnZpY2VMb2NhdG9yKCk7CiAgICAgICAgIEdsb2JhbHMuc2V0RGVmYXVsdEhhYml0YXQoc2VydmljZUxvY2F0b3IpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBBbm5vdGF0aW9uVGVzdChTdHJpbmcgbmFtZSkgewogICAgICAgICBzdXBlcihuYW1lKTsKICAgICB9CkBAIC0xMjcsNyArMTI3LDcgQEAKICAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIkJ1bmRsZURlc2NyaXB0b3JzIGRvIG5vdCBtYXRjaC4iLAogICAgICAgICAgICAgZGMuY29tcGFyZUNvbnRlbnQoYnVuZGxlRGVzY3NbMF0sIGJ1bmRsZURlc2NzWzFdKSk7CiAgICAgfQotIAorCiAgICAgcHJvdGVjdGVkIEJ1bmRsZURlc2NyaXB0b3JbXSBwcm9jZXNzRWpiRGVzY3JpcHRvcnMoKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBwcm9jZXNzb3IuZ2VuZXJhdGVFamJKYXJYbWxGaWxlKHdvcmtEaXIpOwpAQCAtMTkwLDEzICsxOTAsMTMgQEAKICAgICAgICAgICAgICAgICBuZXcgV2ViU2VydmljZXNEZXBsb3ltZW50RGVzY3JpcHRvckZpbGUoYnVuZGxlRGVzY3NbMF0pLAogICAgICAgICAgICAgICAgIG5ldyBXZWJTZXJ2aWNlc0RlcGxveW1lbnREZXNjcmlwdG9yRmlsZShidW5kbGVEZXNjc1sxXSksCiAgICAgICAgICAgICAgICAgV0VCX0lORl9ESVIsICJ3ZWJzZXJ2aWNlcy54bWwiKTsKLSAgCisKICAgICAgICAgcmV0dXJuIGJ1bmRsZURlc2NzOwogICAgIH0KIAogICAgIHByaXZhdGUgQnVuZGxlRGVzY3JpcHRvcltdIGxvYWREZXNjcmlwdG9yRmlsZXMoCiAgICAgICAgICAgICBCdW5kbGVEZXNjcmlwdG9yIGV4cEJ1bmRsZURlc2NyaXB0b3IsCi0gICAgICAgICAgICBCdW5kbGVEZXNjcmlwdG9yIGdlbkJ1bmRsZURlc2NyaXB0b3IsIAorICAgICAgICAgICAgQnVuZGxlRGVzY3JpcHRvciBnZW5CdW5kbGVEZXNjcmlwdG9yLAogICAgICAgICAgICAgRGVwbG95bWVudERlc2NyaXB0b3JGaWxlIGV4cERmLCBEZXBsb3ltZW50RGVzY3JpcHRvckZpbGUgZ2VuRGYsCiAgICAgICAgICAgICBTdHJpbmcgbWV0YURpciwgU3RyaW5nIGRlc2NGaWxlbmFtZSkgewogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3V0aWwvZGV2dGVzdHMvZGVwbG95bWVudC91dGlsL0Rlc2NyaXB0b3JDb250ZW50Q29tcGFyYXRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC91dGlsL2RldnRlc3RzL2RlcGxveW1lbnQvdXRpbC9EZXNjcmlwdG9yQ29udGVudENvbXBhcmF0b3IuamF2YQppbmRleCA1ZmJlNTY5Li5hNjU2ZjU3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3V0aWwvZGV2dGVzdHMvZGVwbG95bWVudC91dGlsL0Rlc2NyaXB0b3JDb250ZW50Q29tcGFyYXRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvdXRpbC9kZXZ0ZXN0cy9kZXBsb3ltZW50L3V0aWwvRGVzY3JpcHRvckNvbnRlbnRDb21wYXJhdG9yLmphdmEKQEAgLTUyLDcgKzUyLDcgQEAKICAgICAgICAgICAgIH07CiAKICAgICBwcml2YXRlIHN0YXRpYyBMb2dnZXIgbG9nZ2VyID0gbnVsbDsKLSAgICAgICAgICAgICAgICAKKwogICAgIC8vIGZvciBlYXN5IGRlYnVnCiAgICAgcHJpdmF0ZSBGaWVsZCBsYXN0RmllbGQgPSBudWxsOwogCkBAIC04MCw3ICs4MCw3IEBACiAgICAgICogQHJldHVybiBib29sZWFuIHJlc3VsdCBvZiBjb21wYXJpc29uCiAgICAgICovCiAgICAgcHJpdmF0ZSBib29sZWFuIGNvbXBhcmVDb250ZW50KEZpZWxkIGZpZWxkLCBPYmplY3QgbzEsIE9iamVjdCBvMiwgU2V0IHNldCkgewotICAgICAgICBpZiAobzEgPT0gbzIgfHwgCisgICAgICAgIGlmIChvMSA9PSBvMiB8fAogICAgICAgICAgICAgICAgIGlzTnVsbEVxdWl2YWxlbnQoZmllbGQsIG8xKSAmJiBpc051bGxFcXVpdmFsZW50KGZpZWxkLCBvMikpIHsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC05MSw3ICs5MSw3IEBACiAKICAgICAgICAgICAgIGlmIChsb2dnZXIuaXNMb2dnYWJsZShMZXZlbC5GSU5FKSkgewogICAgICAgICAgICAgICAgIGxvZ2dlci5maW5lKCIuLi4gbnVsbCwgY2xhc3MgbWlzbWF0Y2ggb3IgZXhjbHVkZWQgZm9yICIgKwotICAgICAgICAgICAgICAgICAgICAoKGZpZWxkICE9IG51bGwpPyBmaWVsZCA6ICIiKSArIAorICAgICAgICAgICAgICAgICAgICAoKGZpZWxkICE9IG51bGwpPyBmaWVsZCA6ICIiKSArCiAgICAgICAgICAgICAgICAgICAgICIsIG8xID0gIiArIG8xICsgIiwgbzIgPSAiICsgbzIpOwogICAgICAgICAgICAgfQogCkBAIC0yMTIsNyArMjEyLDcgQEAKICAgICAgICAgfSBlbHNlIGlmIChvIGluc3RhbmNlb2YgQ29sbGVjdGlvbikgewogICAgICAgICAgICAgQ29sbGVjdGlvbiBjb2xsID0gKENvbGxlY3Rpb24pbzsKICAgICAgICAgICAgIHJlc3VsdCA9IChjb2xsLnNpemUoKSA9PSAwKTsKLSAgICAgICAgfSBlbHNlIGlmIChvIGluc3RhbmNlb2YgTWFwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICB9IGVsc2UgaWYgKG8gaW5zdGFuY2VvZiBNYXApIHsKIAogICAgICAgICAgICAgTWFwIG1hcCA9IChNYXApbzsKICAgICAgICAgICAgIGludCBzaXplID0gbWFwLnNpemUoKTsKQEAgLTMzMiw3ICszMzIsNyBAQAogCiAgICAgcHJpdmF0ZSB2b2lkIGluaXRMb2dnZXIoKSB7CiAgICAgICAgIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoRGVzY3JpcHRvckNvbnRlbnRDb21wYXJhdG9yLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgICAgIExldmVsIGxvZ0xldmVsID0gQm9vbGVhbi5nZXRCb29sZWFuKCJkZWJ1ZyIpID8gCisgICAgICAgIExldmVsIGxvZ0xldmVsID0gQm9vbGVhbi5nZXRCb29sZWFuKCJkZWJ1ZyIpID8KICAgICAgICAgICAgICAgICBMZXZlbC5GSU5FU1QgOiBMZXZlbC5DT05GSUc7CiAgICAgICAgIGZvciAoSGFuZGxlciBoIDogTG9nZ2VyLmdldExvZ2dlcigiIikuZ2V0SGFuZGxlcnMoKSkgewogICAgICAgICAgICAgaC5zZXRMZXZlbChsb2dMZXZlbCk7CkBAIC0zNzAsNyArMzcwLDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICghKG8gaW5zdGFuY2VvZiBSZWZlcmVuY2VQYWlyKSkgewogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0gICAgICAgCisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIFJlZmVyZW5jZVBhaXIgcmQgPSAoUmVmZXJlbmNlUGFpcilvOwogICAgICAgICAgICAgcmV0dXJuIChjMSA9PSByZC5jMSAmJiBjMiA9PSByZC5jMiB8fApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC91dGlsL2RldnRlc3RzL2RlcGxveW1lbnQvdXRpbC9Mb2dGb3JtYXR0ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvdXRpbC9kZXZ0ZXN0cy9kZXBsb3ltZW50L3V0aWwvTG9nRm9ybWF0dGVyLmphdmEKaW5kZXggMDgwOGM2Zi4uNzEyZmVlZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC91dGlsL2RldnRlc3RzL2RlcGxveW1lbnQvdXRpbC9Mb2dGb3JtYXR0ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3V0aWwvZGV2dGVzdHMvZGVwbG95bWVudC91dGlsL0xvZ0Zvcm1hdHRlci5qYXZhCkBAIC0zMSwxMSArMzEsMTEgQEAKICAqIEBhdXRob3IgZG9jaGV6CiAgKi8KIHB1YmxpYyBjbGFzcyBMb2dGb3JtYXR0ZXIgZXh0ZW5kcyBGb3JtYXR0ZXIgewotICAgIAorCiAgICAgLyoqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgTG9nRm9ybWF0dGVyICovCiAgICAgcHVibGljIExvZ0Zvcm1hdHRlcigpIHsKICAgICB9Ci0gICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZm9ybWF0KExvZ1JlY29yZCByZWNvcmQpIHsKICAgICAgICAgcmV0dXJuIHJlY29yZC5nZXRNZXNzYWdlKCkrIlxuIjsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3V0aWwvZGV2dGVzdHMvZGVwbG95bWVudC91dGlsL1N0YW5kYWxvbmVFcnJvckhhbmRsZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvdXRpbC9kZXZ0ZXN0cy9kZXBsb3ltZW50L3V0aWwvU3RhbmRhbG9uZUVycm9ySGFuZGxlci5qYXZhCmluZGV4IDNkYzA1YzQuLjY5NzdmMzkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvdXRpbC9kZXZ0ZXN0cy9kZXBsb3ltZW50L3V0aWwvU3RhbmRhbG9uZUVycm9ySGFuZGxlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvdXRpbC9kZXZ0ZXN0cy9kZXBsb3ltZW50L3V0aWwvU3RhbmRhbG9uZUVycm9ySGFuZGxlci5qYXZhCkBAIC0xOSw3ICsxOSw3IEBACiBpbXBvcnQgb3JnLmdsYXNzZmlzaC5hcGYuRXJyb3JIYW5kbGVyOwogaW1wb3J0IG9yZy5nbGFzc2Zpc2guYXBmLkFubm90YXRpb25Qcm9jZXNzb3JFeGNlcHRpb247CiBpbXBvcnQgb3JnLmdsYXNzZmlzaC5hcGYuaW1wbC5Bbm5vdGF0aW9uVXRpbHM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAvKioKICAqIFN0YW5kYWxvbmUgSW1wbGVtZW50YXRpb24gb2YgRXJyb3JIYW5kbGVyLgogICoKQEAgLTMzLDggKzMzLDggQEAKICAgICAvKioKICAgICAgKiBSZWNlaXZlIG5vdGljYXRpb24gb2YgYSBmaW5lIGVycm9yIG1lc3NhZ2UKICAgICAgKiBAcGFyYW0gYXBlIFRoZSB3YXJuaW5nIGluZm9ybWF0aW9uCi0gICAgICogQHRocm93cyBhbnkgZXhjZXB0aW9uIHRvIHN0b3AgdGhlIGFubm90YXRpb24gcHJvY2Vzc2luZyAKLSAgICAgKi8gCisgICAgICogQHRocm93cyBhbnkgZXhjZXB0aW9uIHRvIHN0b3AgdGhlIGFubm90YXRpb24gcHJvY2Vzc2luZworICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGZpbmUoQW5ub3RhdGlvblByb2Nlc3NvckV4Y2VwdGlvbiBhcGUpIHRocm93cwogICAgICAgICAgICAgQW5ub3RhdGlvblByb2Nlc3NvckV4Y2VwdGlvbiB7CiAgICAgICAgIEFubm90YXRpb25VdGlscy5nZXRMb2dnZXIoKS5maW5lKCJGaW5lIDogIiArIGFwZSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3V0aWwvZGV2dGVzdHMvZGVwbG95bWVudC91dGlsL1N0YW5kYWxvbmVQcm9jZXNzb3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvdXRpbC9kZXZ0ZXN0cy9kZXBsb3ltZW50L3V0aWwvU3RhbmRhbG9uZVByb2Nlc3Nvci5qYXZhCmluZGV4IGVlZmU2ZjkuLmI1NjVmZWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvdXRpbC9kZXZ0ZXN0cy9kZXBsb3ltZW50L3V0aWwvU3RhbmRhbG9uZVByb2Nlc3Nvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvdXRpbC9kZXZ0ZXN0cy9kZXBsb3ltZW50L3V0aWwvU3RhbmRhbG9uZVByb2Nlc3Nvci5qYXZhCkBAIC05MSw3ICs5MSw3IEBACiAgICAgcHJpdmF0ZSBNb2R1bGVUeXBlIHR5cGUgPSBudWxsOwogICAgIHByaXZhdGUgU2V0PFN0cmluZz4gY29tcENsYXNzTmFtZXMgPSBudWxsOwogICAgIHByaXZhdGUgc3RhdGljIFNlcnZpY2VMb2NhdG9yIHNlcnZpY2VMb2NhdG9yID0gbnVsbDsKLSAgICAKKwogICAgIC8qKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIFN0YW5kYWxvbmVQcm9jZXNzb3IgKi8KICAgICBwdWJsaWMgU3RhbmRhbG9uZVByb2Nlc3NvcigpIHsKICAgICAgICAgdGhpcyhNb2R1bGVUeXBlLkVKQik7CkBAIC0xMDIsNyArMTAyLDcgQEAKICAgICAgICAgaWYgKE1vZHVsZVR5cGUuRUpCLmVxdWFscyh0eXBlKSkgewogICAgICAgICAgICAgYnVuZGxlRGVzY3JpcHRvciA9IG5ldyBFamJCdW5kbGVEZXNjcmlwdG9ySW1wbCgpOwogICAgICAgICAgICAgYWVIYW5kbGVyID0gbmV3IEVqYkJ1bmRsZUNvbnRleHQoKEVqYkJ1bmRsZURlc2NyaXB0b3JJbXBsKSBidW5kbGVEZXNjcmlwdG9yKTsKLSAgICAgICAgICAgCisKICAgICAgICAgfSBlbHNlIGlmIChNb2R1bGVUeXBlLldBUi5lcXVhbHModHlwZSkpIHsKICAgICAgICAgICAgIGJ1bmRsZURlc2NyaXB0b3IgPSBuZXcgV2ViQnVuZGxlRGVzY3JpcHRvckltcGwoKTsKICAgICAgICAgICAgIGFlSGFuZGxlciA9IG5ldyBXZWJCdW5kbGVDb250ZXh0KApAQCAtMTIwLDE0ICsxMjAsMTQgQEAKICAgICBwdWJsaWMgdm9pZCBzZXRDb21wb25lbnRDbGFzc05hbWVzKFNldCBjb21wQ2xhc3NOYW1lcykgewogICAgICAgICB0aGlzLmNvbXBDbGFzc05hbWVzID0gY29tcENsYXNzTmFtZXM7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFN0YW5kYWxvbmVQcm9jZXNzb3IgcHJvY2Vzc29yID0gbmV3IFN0YW5kYWxvbmVQcm9jZXNzb3IoKTsKICAgICAgICAgcHJvY2Vzc29yLnJ1bihhcmdzKTsKICAgICAgICAgcHJvY2Vzc29yLmdlbmVyYXRlRWpiSmFyWG1sRmlsZSgiLiIpOwogICAgICAgICBwcm9jZXNzb3IuZ2VuZXJhdGVXZWJTZXJ2aWNlc1htbEZpbGUoIi4iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgaW50IHJ1bihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgZm9yIChTdHJpbmcgYXJnIDogYXJncykgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBbm5vdGF0aW9uIGxvZyBpcyBzZXQgdG8gIiArIFN5c3RlbS5nZXRQcm9wZXJ0eSgiYW5ub3RhdGlvbi5sb2ciKSk7CkBAIC0xMzUsNyArMTM1LDcgQEAKICAgICAgICAgICAgIGlmIChsb2dXaGF0IT1udWxsKSB7CiAgICAgICAgICAgICAgICAgQW5ub3RhdGlvblV0aWxzLnNldExvZ2dlclRhcmdldChsb2dXaGF0KTsKICAgICAgICAgICAgICAgICBpbml0TG9nZ2VyKCk7Ci0gICAgICAgICAgICB9ICAgICAgICAgICAgCisgICAgICAgICAgICB9CiAgICAgICAgICAgICBBbm5vdGF0aW9uVXRpbHMuZ2V0TG9nZ2VyKCkuaW5mbygicHJvY2Vzc2luZyAiICsgYXJnKTsKICAgICAgICAgICAgIEZpbGUgZiA9IG5ldyBGaWxlKGFyZyk7CiAgICAgICAgICAgICBpZiAoZi5leGlzdHMoKSkgewpAQCAtMTU3LDcgKzE1Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChFamJCdW5kbGVEZXNjcmlwdG9ySW1wbClidW5kbGVEZXNjcmlwdG9yOwogICAgICAgICAgICAgICAgICAgICAgICAgc2Nhbm5lciA9IHNlcnZpY2VMb2NhdG9yLmdldFNlcnZpY2UoRWpiSmFyU2Nhbm5lci5jbGFzcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzY2FubmVyLnByb2Nlc3MoYXJjaGl2ZSwgZWpiQnVuZGxlRGVzYywgY2xhc3NMb2FkZXIsIG51bGwpOwotICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChNb2R1bGVUeXBlLldBUi5lcXVhbHModHlwZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFdlYkJ1bmRsZURlc2NyaXB0b3Igd2ViQnVuZGxlRGVzYyA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChXZWJCdW5kbGVEZXNjcmlwdG9yKWJ1bmRsZURlc2NyaXB0b3I7CkBAIC0xNzAsMjYgKzE3MCwyNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgc2Nhbm5lciA9IHNlcnZpY2VMb2NhdG9yLmdldFNlcnZpY2UoV2FyU2Nhbm5lci5jbGFzcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzY2FubmVyLnByb2Nlc3MoYXJjaGl2ZSwgd2ViQnVuZGxlRGVzYywgY2xhc3NMb2FkZXIsIG51bGwpOwotICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChNb2R1bGVUeXBlLkNBUi5lcXVhbHModHlwZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBtYWluQ2xhc3NOYW1lID0gY29tcENsYXNzTmFtZXMuaXRlcmF0b3IoKS5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBcHBsaWNhdGlvbkNsaWVudERlc2NyaXB0b3IgYXBwQ2xpZW50RGVzYyA9IAorICAgICAgICAgICAgICAgICAgICAgICAgQXBwbGljYXRpb25DbGllbnREZXNjcmlwdG9yIGFwcENsaWVudERlc2MgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQXBwbGljYXRpb25DbGllbnREZXNjcmlwdG9yKWJ1bmRsZURlc2NyaXB0b3I7CiAgICAgICAgICAgICAgICAgICAgICAgICBhcHBDbGllbnREZXNjLnNldE1haW5DbGFzc05hbWUobWFpbkNsYXNzTmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzY2FubmVyID0gc2VydmljZUxvY2F0b3IuZ2V0U2VydmljZShBcHBDbGllbnRTY2FubmVyLmNsYXNzKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHNjYW5uZXIucHJvY2VzcyhhcmNoaXZlLCBhcHBDbGllbnREZXNjLCBjbGFzc0xvYWRlciwgbnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgQW5ub3RhdGlvblByb2Nlc3NvciBhcCA9IHNlcnZpY2VMb2NhdG9yLjxTSlNBU0ZhY3Rvcnk+Z2V0U2VydmljZShTSlNBU0ZhY3RvcnkuY2xhc3MpLmdldEFubm90YXRpb25Qcm9jZXNzb3IoZmFsc2UpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZSB1c2VyIGluZGljYXRlZCBhIGRpcmVjdG9yeSBmb3IgaGFuZGxlcnMsIHRpbWUgdG8gYWRkIHRoZSAgICAgICAgICAgICAgICAgICAgCisKKworICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgdXNlciBpbmRpY2F0ZWQgYSBkaXJlY3RvcnkgZm9yIGhhbmRsZXJzLCB0aW1lIHRvIGFkZCB0aGUKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGhhbmRsZXJzRGlyID0gU3lzdGVtLmdldFByb3BlcnR5KCJoYW5kbGVycy5kaXIiKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZXJzRGlyIT1udWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBhZGRIYW5kbGVycyhhcCwgaGFuZGxlcnNEaXIpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIFByb2Nlc3NpbmdDb250ZXh0IGN0eCA9IGFwLmNyZWF0ZUNvbnRleHQoKTsKICAgICAgICAgICAgICAgICAgICAgY3R4LnNldEVycm9ySGFuZGxlcihuZXcgU3RhbmRhbG9uZUVycm9ySGFuZGxlcigpKTsKICAgICAgICAgICAgICAgICAgICAgYnVuZGxlRGVzY3JpcHRvci5zZXRDbGFzc0xvYWRlcihzY2FubmVyLmdldENsYXNzTG9hZGVyKCkpOwpAQCAtMjIxLDEzICsyMjEsMTMgQEAKICAgICBwdWJsaWMgdm9pZCBnZW5lcmF0ZUFwcENsaWVudFhtbEZpbGUoU3RyaW5nIGRpcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKICAgICAgICAgIEFwcENsaWVudERlcGxveW1lbnREZXNjcmlwdG9yRmlsZSBhcHBDbGllbnRkZiA9IG5ldyBBcHBDbGllbnREZXBsb3ltZW50RGVzY3JpcHRvckZpbGUoKTsKICAgICAgICAgIGFwcENsaWVudGRmLndyaXRlKGJ1bmRsZURlc2NyaXB0b3IsIGRpcik7Ci0gICAgCisKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBnZW5lcmF0ZUVqYkphclhtbEZpbGUoU3RyaW5nIGRpcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKICAgICAgICAgIEVqYkRlcGxveW1lbnREZXNjcmlwdG9yRmlsZSBlamJkZiA9IG5ldyBFamJEZXBsb3ltZW50RGVzY3JpcHRvckZpbGUoKTsKICAgICAgICAgIGVqYmRmLndyaXRlKGJ1bmRsZURlc2NyaXB0b3IsIGRpcik7Ci0gICAgCisKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBnZW5lcmF0ZVdlYlhtbEZpbGUoU3RyaW5nIGRpcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKQEAgLTIzOSwxMyArMjM5LDEzIEBACiAgICAgICAgICBXZWJTZXJ2aWNlc0RlcGxveW1lbnREZXNjcmlwdG9yRmlsZSBkZGYgPSBuZXcgV2ViU2VydmljZXNEZXBsb3ltZW50RGVzY3JpcHRvckZpbGUoYnVuZGxlRGVzY3JpcHRvcik7CiAgICAgICAgICBkZGYud3JpdGUoYnVuZGxlRGVzY3JpcHRvciwgZGlyKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgYWRkSGFuZGxlcnMoQW5ub3RhdGlvblByb2Nlc3NvciBhcCwgU3RyaW5nIGhhbmRsZXJzRGlyKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGFuZGxlcnMgZGlyIHNldCBhdCAiICsgaGFuZGxlcnNEaXIpOwogICAgICAgICBEaXJlY3RvcnlTY2FubmVyIHNjYW5uZXIgPSBuZXcgRGlyZWN0b3J5U2Nhbm5lcigpOwogICAgICAgICBzY2FubmVyLnByb2Nlc3MobmV3IEZpbGUoaGFuZGxlcnNEaXIpLG51bGwsbnVsbCk7Ci0gICAgICAgIAorCiAgICAgICAgIFNldDxDbGFzcz4gZWxlbWVudHMgPSBzY2FubmVyLmdldEVsZW1lbnRzKCk7CiAgICAgICAgIGZvciAoQ2xhc3MgaGFuZGxlckNsYXNzIDogZWxlbWVudHMpIHsKICAgICAgICAgICAgIENsYXNzW10gaW50ZXJmYWNlcyA9IGhhbmRsZXJDbGFzcy5nZXRJbnRlcmZhY2VzKCk7CkBAIC0yNTMsNyArMjUzLDcgQEAKICAgICAgICAgICAgICAgICBpZiAoaW50ZXJmLmVxdWFscyhvcmcuZ2xhc3NmaXNoLmFwZi5Bbm5vdGF0aW9uSGFuZGxlci5jbGFzcykpIHsKICAgICAgICAgICAgICAgICAgICAgQW5ub3RhdGlvbkhhbmRsZXIgaGFuZGxlciA9IChBbm5vdGF0aW9uSGFuZGxlcikgaGFuZGxlckNsYXNzLm5ld0luc3RhbmNlKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChBbm5vdGF0aW9uVXRpbHMuc2hvdWxkTG9nKCJoYW5kbGVyIikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFubm90YXRpb25VdGlscy5nZXRMb2dnZXIoKS5maW5lKCJSZWdpc3RlcmluZyBoYW5kbGVyICIgKyBoYW5kbGVyQ2xhc3MgCisgICAgICAgICAgICAgICAgICAgICAgICBBbm5vdGF0aW9uVXRpbHMuZ2V0TG9nZ2VyKCkuZmluZSgiUmVnaXN0ZXJpbmcgaGFuZGxlciAiICsgaGFuZGxlckNsYXNzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGZvciB0eXBlICIgKyBoYW5kbGVyLmdldEFubm90YXRpb25UeXBlKCkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGFwLnB1c2hBbm5vdGF0aW9uSGFuZGxlcihoYW5kbGVyKTsKQEAgLTI2NCw3ICsyNjQsNyBAQAogICAgICAgICAgICAgQW5ub3RhdGlvblV0aWxzLmdldExvZ2dlcigpLnNldmVyZSgiRXhjZXB0aW9uIHdoaWxlIHJlZ2lzdGVyaW5nIGhhbmRsZXJzIDogIiArIGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBpbml0TG9nZ2VyKCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgRmlsZUhhbmRsZXIgaGFuZGxlciA9IG5ldyBGaWxlSGFuZGxlcigiYW5ub3RhdGlvbi5sb2ciKTsKQEAgLTI3NCw3ICsyNzQsNyBAQAogICAgICAgICAgICAgbG9nZ2VyLnNldExldmVsKExldmVsLkZJTkUpOwogICAgICAgICAgICAgbG9nZ2VyLmFkZEhhbmRsZXIoaGFuZGxlcik7fSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgICB9ICAgICAgIAorICAgICAgICAgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBwcmVwYXJlU2VydmljZUxvY2F0b3IoKSB7CkBAIC0yODIsNyArMjgyLDcgQEAKICAgICAgICAgICAgIC8vIEJvb3RzdHJhcCBhIGhrMiBlbnZpcm9ubWVudC4KICAgICAgICAgICAgIE1vZHVsZXNSZWdpc3RyeSByZWdpc3RyeSA9IG5ldyBTdGF0aWNNb2R1bGVzUmVnaXN0cnkoZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpKTsKICAgICAgICAgICAgIHNlcnZpY2VMb2NhdG9yID0gcmVnaXN0cnkuY3JlYXRlU2VydmljZUxvY2F0b3IoImRlZmF1bHQiKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTdGFydHVwQ29udGV4dCBzdGFydHVwQ29udGV4dCA9IG5ldyBTdGFydHVwQ29udGV4dCgpOwogCiAgICAgICAgICAgICBTZXJ2aWNlTG9jYXRvclV0aWxpdGllcy5hZGRPbmVDb25zdGFudChzZXJ2aWNlTG9jYXRvciwgc3RhcnR1cENvbnRleHQpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC91dGlsL2RldnRlc3RzL2RlcGxveW1lbnQvdXRpbC9VdGlscy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC91dGlsL2RldnRlc3RzL2RlcGxveW1lbnQvdXRpbC9VdGlscy5qYXZhCmluZGV4IDM1YjVkZGEuLjY5Y2VlMzIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvdXRpbC9kZXZ0ZXN0cy9kZXBsb3ltZW50L3V0aWwvVXRpbHMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3V0aWwvZGV2dGVzdHMvZGVwbG95bWVudC91dGlsL1V0aWxzLmphdmEKQEAgLTM0LDcgKzM0LDcgQEAKIC8qKgogICogVXRpbGl0aWVzIHRvIGNyZWF0ZSBhIGNvbmZpZ3VyZWQgSGFiaXRhdCBhbmQgY2FjaGUgdGhlbQogICoKLSAqIFNoYW1lbGVzc2x5IGNvcGllZCBmcm9tIG51Y2xldXMvdGVzdHMvdXRpbCAKKyAqIFNoYW1lbGVzc2x5IGNvcGllZCBmcm9tIG51Y2xldXMvdGVzdHMvdXRpbAogICoKICAqIEBhdXRob3IgSmVyb21lIERvY2hlegogICovCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3ZlcnNpb25pbmcvYmFzaWMtc2NlbmFyaW9zLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvdmVyc2lvbmluZy9iYXNpYy1zY2VuYXJpb3MueG1sCmluZGV4IDgwMmRiYzguLjQ0MDgzOWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvdmVyc2lvbmluZy9iYXNpYy1zY2VuYXJpb3MueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvdmVyc2lvbmluZy9iYXNpYy1zY2VuYXJpb3MueG1sCkBAIC02Nyw3ICs2Nyw3IEBACiAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3kudmVyc2lvbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJmb3JjZSIgdmFsdWU9InRydWUiLz4KICAgICAgICAgPHBhcmFtIG5hbWU9InZlcnNpb25FeHByZXNzaW9uIiB2YWx1ZT0iJHtpZGVudGlmaWVyLjJ9Ii8+Ci0JPHBhcmFtIG5hbWU9InhtbFZlcnNpb25JZGVudGlmaWVyIiB2YWx1ZT0iJHtpZGVudGlmaWVyLjF9Ii8+CisgICAgPHBhcmFtIG5hbWU9InhtbFZlcnNpb25JZGVudGlmaWVyIiB2YWx1ZT0iJHtpZGVudGlmaWVyLjF9Ii8+CiAgICAgPC9hbnRjYWxsPgogICAgIDwhLS0gdGVzdCB0aGF0IHRoZSBkZXBsb3llZCB2ZXJzaW9uIHJ1bm5pbmcgaXMgJHtpZGVudGlmaWVyLjJ9IC0tPgogICAgIDxhbnRjYWxsIHRhcmdldD0idGVzdC5yZWdpc3RyZWQiPgpAQCAtNTUxLDcgKzU1MSw3IEBACiAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4ucG9zaXRpdmUuY2x1c3Rlckluc3RhbmNlMiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJkZXNjcmlwdGlvbiIgdmFsdWU9InJvbGxpbmcudXBncmFkZSgxKSIvPgogICAgIDwvYW50Y2FsbD4KLSAgICAKKwogICAgIDwhLS0gc3dpdGNoIHRoZSAybmQgaW5zdGFuY2UgdG8gdGhlIHNwZWNpZmljIHZlcnNpb24gLS0+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJlbmFibGUudmVyc2lvbi5jbHVzdGVySW5zdGFuY2UyIj4KICAgICAgIDxwYXJhbSBuYW1lPSJ2ZXJzaW9uRXhwcmVzc2lvbiIgdmFsdWU9IiR7aWRlbnRpZmllci4xfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC92ZXJzaW9uaW5nL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3ZlcnNpb25pbmcvYnVpbGQucHJvcGVydGllcwppbmRleCBmYzMxN2ExLi42OTM2MWM4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3ZlcnNpb25pbmcvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3ZlcnNpb25pbmcvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiBxdWFsaWZpZXIuMT1BTFBIQQogaWRlbnRpZmllci4xPUFMUEhBLTEuMC4wCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3ZlcnNpb25pbmcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC92ZXJzaW9uaW5nL2J1aWxkLnhtbAppbmRleCBjNTgzM2U4Li5jMDIzNjVhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3ZlcnNpb25pbmcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvdmVyc2lvbmluZy9idWlsZC54bWwKQEAgLTM1LDcgKzM1LDcgQEAKICAgICAgIDxhbnQgZGlyPSJzaW1wbGUtdmVyc2lvbmVkLWFwcGNsaWVudCIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+CiAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkIiB2YWx1ZT0iJHtidWlsZH0vc2ltcGxlLXZlcnNpb25lZC1hcHBjbGllbnQiLz4KICAgICAgIDwvYW50PgotICAgICAgCisKICAgICAgIDwhLS0gcGxheSBzb21lIHZlcnNpb25pbmcgZGV2dGVzdHMgc2NlbmFyaW9zIHdpdGggc2ltcGxlLXZlcnNpb25lZC1lamIgLS0+CiAgICAgICA8YW50IGRpcj0ic2ltcGxlLXZlcnNpb25lZC1lamIiIHRhcmdldD0icHJpdmF0ZS1hbGwiPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9zaW1wbGUtdmVyc2lvbmVkLWVqYiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC92ZXJzaW9uaW5nL3NpbXBsZS12ZXJzaW9uZWQtYXBwY2xpZW50L3NyYy9HZXRKV1NDbGllbnRTdHVicy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC92ZXJzaW9uaW5nL3NpbXBsZS12ZXJzaW9uZWQtYXBwY2xpZW50L3NyYy9HZXRKV1NDbGllbnRTdHVicy5qYXZhCmluZGV4IGY1MmQwMGMuLmM5MmVjNzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvdmVyc2lvbmluZy9zaW1wbGUtdmVyc2lvbmVkLWFwcGNsaWVudC9zcmMvR2V0SldTQ2xpZW50U3R1YnMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3ZlcnNpb25pbmcvc2ltcGxlLXZlcnNpb25lZC1hcHBjbGllbnQvc3JjL0dldEpXU0NsaWVudFN0dWJzLmphdmEKQEAgLTQ2LDcgKzQ2LDcgQEAKICAqICJhc2FkbWluIGdldC1jbGllbnQtc3R1YnMiIGNvbW1hbmQgaXMgbm90IGF3YXJlIG9mIHRoZSBlbmFibGVkIHN0YXRlLgogICoKICAqIFRoaXMgY2xhc3MgcmV0cmlldmUgdGhlIHN0dWJzIGZyb20gdGhlIEpXUyBVUkwgb2YgdGhlIGFwcGxpY2F0aW9uLgotICogCisgKgogICogVGhlIEdsYXNzRmlzaCBzZXJ2ZXIgbm93IHVzZXMgaHR0cCBzZXNzaW9ucyB0byBtYWludGFpbgogICogc29tZSBpbXBvcnRhbnQgaW5mb3JtYXRpb24gZHVyaW5nIEphdmEgV2ViIFN0YXJ0IGxhdW5jaGVzLgogICogRm9yIHRoaXMgdGVzdCB0byB3b3JrIGl0IG5vdyBzYXZlcyB0aGUgc2Vzc2lvbiB0aGF0IGlzIHNldApAQCAtNTgsMTAgKzU4LDEwIEBACiBwdWJsaWMgY2xhc3MgR2V0SldTQ2xpZW50U3R1YnMgewogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNFU1NJT05fUFJPUEVSVFlfTkFNRSA9ICJKU0VTU0lPTklEIjsKLSAgICAKKwogICAgIFN0cmluZyBqYXZhV2ViU3RhcnRVcmw7CiAgICAgU3RyaW5nIHN0dWJzUGF0aDsKLSAgICAKKwogICAgIFN0cmluZyBzZXNzaW9uID0gbnVsbDsKIAogICAgIHB1YmxpYyBHZXRKV1NDbGllbnRTdHVicyhTdHJpbmdbXSBhcmdzKSB7CkBAIC0xODgsNyArMTg4LDcgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgU3RyaW5nIGdldFNlc3Npb24oZmluYWwgSHR0cFVSTENvbm5lY3Rpb24gYykgewogICAgICAgICBmaW5hbCBTdHJpbmcgcyA9IGMuZ2V0SGVhZGVyRmllbGQoIlNldC1Db29raWUiKTsKICAgICAgICAgbG9nKCJTZXQtQ29va2llIGZyb20gc2VydmVyIGlzICIgKyBzKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvdmVyc2lvbmluZy9zaW1wbGUtdmVyc2lvbmVkLWFwcGNsaWVudC9zcmMvU2ltcGxlVmVyc2lvbmVkQXBwQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3ZlcnNpb25pbmcvc2ltcGxlLXZlcnNpb25lZC1hcHBjbGllbnQvc3JjL1NpbXBsZVZlcnNpb25lZEFwcENsaWVudC5qYXZhCmluZGV4IGI0MDExOWQuLmEwMGNkZjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvdmVyc2lvbmluZy9zaW1wbGUtdmVyc2lvbmVkLWFwcGNsaWVudC9zcmMvU2ltcGxlVmVyc2lvbmVkQXBwQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC92ZXJzaW9uaW5nL3NpbXBsZS12ZXJzaW9uZWQtYXBwY2xpZW50L3NyYy9TaW1wbGVWZXJzaW9uZWRBcHBDbGllbnQuamF2YQpAQCAtNDEsNyArNDEsNyBAQAogICogY2xpZW50LXN0dWIgcmV0cmlldmVkIHdpdGggdGhlICJhc2FkbWluIGdldC1jbGllbnQtc3R1YnMiIGNvbW1hbmQuIEluc3RlYWQsCiAgKiB3ZSBjaG9vc2UgdG8gdXNlIHRoZSBKYXZhIFdlYiBTdGFydCBVUkwgKFtob3N0OnBvcnQvY29udGV4dFJvb3RdLCB0aGUKICAqIGNvbnRleHRyb290IGVxdWFscyB0byB0aGUgdW50YWdnZWQgaWYgbm90IHByb3ZpZGVkIGluIHRoZSBkZXBsb3ltZW50IGRlc2NyaXB0b3IpCi0gKiAKKyAqCiAgKiBUaGUgc3R1YnMgYXJlIHJldHJpZXZlZCB3aXRoIEpXUyBtZWNoYW5pc20sIGl0IGFsbG93cyB1cyB0byBjaGFuZ2UgdGhlIGVuYWJsZWQgc3RhdHVzCiAgKiBhbmQgbWFrZSBzb21lIHRlc3RzLgogICoKQEAgLTEyMCw3ICsxMjAsNyBAQAogICAgIC8qKgogICAgICAqIEBwYXJhbSBhcmdzIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzCiAgICAgICovCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeyAgICAgICAKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIFNpbXBsZVZlcnNpb25lZEFwcENsaWVudCBhcHAgPSBuZXcgU2ltcGxlVmVyc2lvbmVkQXBwQ2xpZW50KGFyZ3MpOwogICAgICAgICBhcHAuZG9UZXN0KCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC92ZXJzaW9uaW5nL3NpbXBsZS12ZXJzaW9uZWQtZWFyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvdmVyc2lvbmluZy9zaW1wbGUtdmVyc2lvbmVkLWVhci9idWlsZC54bWwKaW5kZXggYWU1ZjFmMy4uZjc3YWIyMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC92ZXJzaW9uaW5nL3NpbXBsZS12ZXJzaW9uZWQtZWFyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3ZlcnNpb25pbmcvc2ltcGxlLXZlcnNpb25lZC1lYXIvYnVpbGQueG1sCkBAIC02NiwyMCArNjYsMjAgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIiBkZXBlbmRzPSJwcmVwYXJlLHByb2Nlc3Muc2VydmxldE5hbWUiPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0ibW9kdWxlVW50YWdnZWRBcmNoaXZlIiB2YWx1ZT0iJHtidWlsZH0vJHttb2R1bGVVbnRhZ2dlZE5hbWV9LiR7bW9kdWxlUGFja2FnaW5nfSIvPgogICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7bW9kdWxlVW50YWdnZWRBcmNoaXZlfSIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0JPGFudCBkaXI9IiR7bW9kdWxlQnVpbGREaXJ9IiB0YXJnZXQ9ImNyZWF0ZS52ZXJzaW9uIiBpbmhlcml0QWxsPSJmYWxzZSI+CisgICAgPGFudCBkaXI9IiR7bW9kdWxlQnVpbGREaXJ9IiB0YXJnZXQ9ImNyZWF0ZS52ZXJzaW9uIiBpbmhlcml0QWxsPSJmYWxzZSI+CiAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZlcnNpb25FeHByZXNzaW9uIiB2YWx1ZT0iJHt2ZXJzaW9uRXhwcmVzc2lvbn0iLz4KICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ieG1sVmVyc2lvbklkZW50aWZpZXIiIHZhbHVlPSIiLz4KICAgICAgICAgPC9hbnQ+CiAgICAgICAgIDxtb3ZlIGZpbGU9IiR7YnVpbGR9LyR7c2VydmxldEFwcE5hbWV9LiR7bW9kdWxlUGFja2FnaW5nfSIgdG9maWxlPSIke21vZHVsZVVudGFnZ2VkQXJjaGl2ZX0iIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0ieG1sRmlsZSIgdmFsdWU9IiR7Z2ZERERpcn0vJHtnZkRERmlsZX0iLz4KLSAgICAJPGFudGNhbGwgdGFyZ2V0PSJnZW5lcmF0ZS54bWwuaWRlbnRpZmllciIvPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImdlbmVyYXRlLnhtbC5pZGVudGlmaWVyIi8+CiAgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXJjaGl2ZUZpbGV9Ij4KICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSJNRVRBLUlORi8qLnhtbCIvPgogICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZH0iIGluY2x1ZGVzPSIke21vZHVsZVVudGFnZ2VkTmFtZX0uJHttb2R1bGVQYWNrYWdpbmd9Ii8+CiAgICAgICAgIDwvamFyPgogICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7bW9kdWxlVW50YWdnZWRBcmNoaXZlfSIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgICAgIDwvdGFyZ2V0PgotICAgICAKKwogPCEtLQogICBDdXJyZW50bHksIG9ubHkgdGhlIHNjZW5hcmlvcyBwcm9jZXNzaW5nIHRlc3QucmVnaXN0cmVkIGFuZCB0ZXN0Lm5vdHJlZ2lzdHJlZAogICBhcmUgc3VwcG9ydGVkLgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC92ZXJzaW9uaW5nL3NpbXBsZS12ZXJzaW9uZWQtZWpiL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvdmVyc2lvbmluZy9zaW1wbGUtdmVyc2lvbmVkLWVqYi9idWlsZC54bWwKaW5kZXggZTFjNWFmNi4uOWMwYmUxYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC92ZXJzaW9uaW5nL3NpbXBsZS12ZXJzaW9uZWQtZWpiL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3ZlcnNpb25pbmcvc2ltcGxlLXZlcnNpb25lZC1lamIvYnVpbGQueG1sCkBAIC0zNyw3ICszNyw3IEBACiAgICAgLS0+CiAgICAgPHByb3BlcnR5IG5hbWU9InZlcnNpb25JbmZvcyIgdmFsdWU9InZlcnNpb24taW5mb3MucHJvcGVydGllcyIvPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0UGFja2FnZSIgdmFsdWU9InZlcnNpb25lZGVqYiIvPgotICAgICAgICAKKwogICAgIDxwcm9wZXJ0eSBuYW1lPSJnZkRERmlsZSIgdmFsdWU9ImdsYXNzZmlzaC1lamItamFyLnhtbCIvPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJnZkRERGlyIiB2YWx1ZT0iTUVUQS1JTkYiLz4KIApAQCAtNjgsMTEgKzY4LDExIEBACiAgICAgICAgICAgPGVudHJ5ICBrZXk9InZlcnNpb24uaWRlbnRpZmllciIgdmFsdWU9IiR7dmVyc2lvbkV4cHJlc3Npb259Ii8+CiAgICAgICAgIDwvcHJvcGVydHlmaWxlPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0ieG1sRmlsZSIgdmFsdWU9IiR7Z2ZERERpcn0vJHtnZkRERmlsZX0iLz4KLSAgICAJPGFudGNhbGwgdGFyZ2V0PSJnZW5lcmF0ZS54bWwuaWRlbnRpZmllciIvPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImdlbmVyYXRlLnhtbC5pZGVudGlmaWVyIi8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8IS0tIGFzc2VtYmxlOiBwYWNrYWdlIHRoZSBlamIgLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZSIgZGVwZW5kcz0iY29tcGlsZSI+ICAgICAgICAKKyAgICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthcmNoaXZlRmlsZX0iIG1hbmlmZXN0PSJNRVRBLUlORi9NQU5JRkVTVC5NRiI+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7Y2xhc3NQYXRofSIgaW5jbHVkZXM9IioqLyouY2xhc3MsICoqLyoucHJvcGVydGllcyIvPgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iTUVUQS1JTkYvKi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvdmVyc2lvbmluZy9zaW1wbGUtdmVyc2lvbmVkLWVqYi9zcmMvU2ltcGxlVmVyc2lvbmVkRWpiSW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC92ZXJzaW9uaW5nL3NpbXBsZS12ZXJzaW9uZWQtZWpiL3NyYy9TaW1wbGVWZXJzaW9uZWRFamJJbXBsLmphdmEKaW5kZXggMDAyNGU3MS4uYTgyOWY3MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC92ZXJzaW9uaW5nL3NpbXBsZS12ZXJzaW9uZWQtZWpiL3NyYy9TaW1wbGVWZXJzaW9uZWRFamJJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC92ZXJzaW9uaW5nL3NpbXBsZS12ZXJzaW9uZWQtZWpiL3NyYy9TaW1wbGVWZXJzaW9uZWRFamJJbXBsLmphdmEKQEAgLTI3LDggKzI3LDggQEAKIHB1YmxpYyBjbGFzcyBTaW1wbGVWZXJzaW9uZWRFamJJbXBsIGltcGxlbWVudHMgU2ltcGxlVmVyc2lvbmVkRWpiIHsKIAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VmVyc2lvbigpIHsKLQlQcm9wZXJ0aWVzIHByb3AgPSBuZXcgUHJvcGVydGllcygpOwotCUlucHV0U3RyZWFtIGluID0gbnVsbDsKKyAgICBQcm9wZXJ0aWVzIHByb3AgPSBuZXcgUHJvcGVydGllcygpOworICAgIElucHV0U3RyZWFtIGluID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGluID0gdGhpcy5nZXRDbGFzcygpLmdldFJlc291cmNlKCJ2ZXJzaW9uLWluZm9zLnByb3BlcnRpZXMiKS5vcGVuU3RyZWFtKCk7CiAgICAgICAgICAgICBwcm9wLmxvYWQoaW4pOwpAQCAtMzYsNiArMzYsNiBAQAogICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgTG9nZ2VyLmdldExvZ2dlcihTaW1wbGVWZXJzaW9uZWRFamJJbXBsLmNsYXNzLmdldE5hbWUoKSkubG9nKExldmVsLlNFVkVSRSwgbnVsbCwgZXgpOwogICAgICAgICB9Ci0JcmV0dXJuIHByb3AuZ2V0UHJvcGVydHkoInZlcnNpb24uaWRlbnRpZmllciIsICIiKTsKKyAgICByZXR1cm4gcHJvcC5nZXRQcm9wZXJ0eSgidmVyc2lvbi5pZGVudGlmaWVyIiwgIiIpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvdmVyc2lvbmluZy9zaW1wbGUtdmVyc2lvbmVkLXNlcnZsZXQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC92ZXJzaW9uaW5nL3NpbXBsZS12ZXJzaW9uZWQtc2VydmxldC9idWlsZC54bWwKaW5kZXggNTA2MzBhYy4uOWFlNDg4OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC92ZXJzaW9uaW5nL3NpbXBsZS12ZXJzaW9uZWQtc2VydmxldC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC92ZXJzaW9uaW5nL3NpbXBsZS12ZXJzaW9uZWQtc2VydmxldC9idWlsZC54bWwKQEAgLTcwLDExICs3MCwxMSBAQAogICAgICAgICAgIDxlbnRyeSAga2V5PSJ2ZXJzaW9uLmlkZW50aWZpZXIiIHZhbHVlPSIke3ZlcnNpb25FeHByZXNzaW9ufSIvPgogICAgICAgICA8L3Byb3BlcnR5ZmlsZT4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9InhtbEZpbGUiIHZhbHVlPSIke2dmREREaXJ9LyR7Z2ZEREZpbGV9Ii8+Ci0gICAgCTxhbnRjYWxsIHRhcmdldD0iZ2VuZXJhdGUueG1sLmlkZW50aWZpZXIiLz4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJnZW5lcmF0ZS54bWwuaWRlbnRpZmllciIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPCEtLSBhc3NlbWJsZTogcGFja2FnZSB0aGUgd2FyIGFyY2hpdmUgLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZSIgZGVwZW5kcz0iY29tcGlsZSI+ICAgICAgICAKKyAgICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPHdhciBkZXN0ZmlsZT0iJHthcmNoaXZlRmlsZX0iIHdlYnhtbD0iV0VCLUlORi93ZWIueG1sIiBtYW5pZmVzdD0iTUVUQS1JTkYvTUFOSUZFU1QuTUYiPgogICAgICAgICAgICAgPHdlYmluZiBkaXI9IldFQi1JTkYiIGluY2x1ZGVzPSJnbGFzc2Zpc2gtd2ViLnhtbCIvPgogICAgICAgICAgICAgPGNsYXNzZXMgZGlyPSIke2NsYXNzUGF0aH0iIGluY2x1ZGVzPSIqKi8qLmNsYXNzLCAqKi8qLnByb3BlcnRpZXMiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC92ZXJzaW9uaW5nL3NpbXBsZS12ZXJzaW9uZWQtc2VydmxldC9zcmMvU2ltcGxlVmVyc2lvbmVkQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3ZlcnNpb25pbmcvc2ltcGxlLXZlcnNpb25lZC1zZXJ2bGV0L3NyYy9TaW1wbGVWZXJzaW9uZWRDbGllbnQuamF2YQppbmRleCBjN2Q1NzQ5Li42YzMxMTFhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3ZlcnNpb25pbmcvc2ltcGxlLXZlcnNpb25lZC1zZXJ2bGV0L3NyYy9TaW1wbGVWZXJzaW9uZWRDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3ZlcnNpb25pbmcvc2ltcGxlLXZlcnNpb25lZC1zZXJ2bGV0L3NyYy9TaW1wbGVWZXJzaW9uZWRDbGllbnQuamF2YQpAQCAtNDIsOCArNDIsOCBAQAogICAgICAgICAgICAgdmVyc2lvbklkZW50aWZpZXIgPSAiIjsKICAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAgICAKKworICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIC8vIHRoaXMgcHJvdmlkZXMgc29tZSB1c2VmdWxsIGluZm9ybWF0aW9ucyB0byBpbnZlc3RpZ2F0ZQogICAgICAgICAgICAgbG9nKCJUZXN0OiBkZXZ0ZXN0cy9kZXBsb3ltZW50L3ZlcnNpb25pbmcvc2ltcGxlLXZlcnNpb25lZC1zZXJ2bGV0Iik7CkBAIC02Miw3ICs2Miw3IEBACiAgICAgICAgICAgICAgICAgbG9nKCJDYXVnaHQgRVhQRUNURUQgSU9FeGNlcHRpb246ICIgKyBleCk7CiAgICAgICAgICAgICAgICAgcGFzcygpOwogICAgICAgICAgICAgfQotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KQEAgLTc1LDcgKzc1LDcgQEAKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gYzEgPSAoSHR0cFVSTENvbm5lY3Rpb24pdS5vcGVuQ29ubmVjdGlvbigpOwogICAgICAgICBpbnQgY29kZSA9IGMxLmdldFJlc3BvbnNlQ29kZSgpOwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IGMxLmdldElucHV0U3RyZWFtKCk7Ci0gICAgICAgIAorCiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyIChuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKICAgICAgICAgU3RyaW5nIGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpOwogICAgICAgICByZXR1cm4gbmV3IFRlc3RSZXNwb25zZShjb2RlLCBsaW5lKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvdmVyc2lvbmluZy92ZXJzaW9uaW5nLWNvbW1vbi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3ZlcnNpb25pbmcvdmVyc2lvbmluZy1jb21tb24ueG1sCmluZGV4IGFlMDVkNjUuLjc3YzA1MTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvdmVyc2lvbmluZy92ZXJzaW9uaW5nLWNvbW1vbi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC92ZXJzaW9uaW5nL3ZlcnNpb25pbmctY29tbW9uLnhtbApAQCAtMjAwLDcgKzIwMCw3IEBACiAgIFRlc3QgdGhhdCB0aGUgZ2l2ZW4gdmVyc2lvbiBpcyByZWdpc3RyZWQgb3Igbm90IG9uIHRoZSAke3Rlc3RTZXJ2ZXJ9IHRhcmdldC4KICAgSW4gY2x1c3RlcmluZyBtb2RlLCB0aGUgZGVmYXVsdCB0YXJnZXQgdGhhdCBpcyB1c2VkIGlzICR7dGVzdENsdXN0ZXJ9LAogICBidXQgd2UgaGF2ZSBhbHNvIHRvIHRlc3QgdGhlICR7dGVzdFNlcnZlcn0gcmVmZXJlbmNlcy4KLSAgCisKICAgQHBhcmFtICR7dmVyc2lvbkV4cHJlc3Npb259IChvcHRpb25hbCkKICAgQHBhcmFtICR7ZGVzY3JpcHRpb259IChvcHRpb25hbCwgYnV0IHZlcnkgaW1wb3J0YW50IGZvciBpbnZlc3RpZ2F0aW9ucykKIC0tPgpAQCAtMjM1LDcgKzIzNSw3IEBACiAgIDxhbnRjYWxsIHRhcmdldD0idGVzdC5ub3RyZWdpc3RyZWQuY2x1c3RlciIvPgogPC90YXJnZXQ+CiAKLTwhLS0gCis8IS0tCiAgIFBST1BFUlRJRVMgUFJPQ0VTU0lORyBUQVJHRVRTLCBub3QgZGlyZWN0bHkgdXNhYmxlIGZvciBtYWtpbmcgc2NlbmFyaW9zCiAtLT4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvYXBwbWd0L2FwcG1ndHRlc3QvUGFyYW1JbmZvLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9hcHBtZ3QvYXBwbWd0dGVzdC9QYXJhbUluZm8uamF2YQppbmRleCAyNjYxNWZmLi44YWI1Y2I3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9hcHBtZ3QvYXBwbWd0dGVzdC9QYXJhbUluZm8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9hcHBtZ3QvYXBwbWd0dGVzdC9QYXJhbUluZm8uamF2YQpAQCAtMTEwLDUgKzExMCw1IEBACiAgICAgICAgIHJldHVybiBoYXNoOwogICAgIH0KIAotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9hcHBtZ3QvYXBwbWd0dGVzdC9UZXN0Q2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9hcHBtZ3QvYXBwbWd0dGVzdC9UZXN0Q2xpZW50LmphdmEKaW5kZXggNzA2ZWIzNS4uY2QyNDc0MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvYXBwbWd0L2FwcG1ndHRlc3QvVGVzdENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL2FwcG1ndC9hcHBtZ3R0ZXN0L1Rlc3RDbGllbnQuamF2YQpAQCAtOTYsNyArOTYsNyBAQAogICAgICAgICAgICAgICAgIGxvZygiQ2F1Z2h0IEVYUEVDVEVEIElPRXhjZXB0aW9uOiAiICsgZXgpOwogICAgICAgICAgICAgICAgIHBhc3MoKTsKICAgICAgICAgICAgIH0KLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9hcHBtZ3QvYXBwbWd0dGVzdC9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvYXBwbWd0L2FwcG1ndHRlc3QvVGVzdFNlcnZsZXQuamF2YQppbmRleCBjZmU0ZmY5Li43OTAwMTFlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9hcHBtZ3QvYXBwbWd0dGVzdC9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL2FwcG1ndC9hcHBtZ3R0ZXN0L1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTM0LDggKzM0LDggQEAKICAqIEBhdXRob3IgdGpxdWlubgogICovCiBwdWJsaWMgY2xhc3MgVGVzdFNlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7Ci0gICAKLSAgICAvKiogCisKKyAgICAvKioKICAgICAgKiBQcm9jZXNzZXMgcmVxdWVzdHMgZm9yIGJvdGggSFRUUCA8Y29kZT5HRVQ8L2NvZGU+IGFuZCA8Y29kZT5QT1NUPC9jb2RlPiBtZXRob2RzLgogICAgICAqIEBwYXJhbSByZXF1ZXN0IHNlcnZsZXQgcmVxdWVzdAogICAgICAqIEBwYXJhbSByZXNwb25zZSBzZXJ2bGV0IHJlc3BvbnNlCkBAIC03NSwxMyArNzUsMTMgQEAKIAogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2Uob3V0KTsKLSAgICAgICAgfSBmaW5hbGx5IHsgCisgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICBvdXQuY2xvc2UoKTsKICAgICAgICAgfQotICAgIH0gCisgICAgfQogCiAgICAgLy8gPGVkaXRvci1mb2xkIGRlZmF1bHRzdGF0ZT0iY29sbGFwc2VkIiBkZXNjPSJIdHRwU2VydmxldCBtZXRob2RzLiBDbGljayBvbiB0aGUgKyBzaWduIG9uIHRoZSBsZWZ0IHRvIGVkaXQgdGhlIGNvZGUuIj4KLSAgICAvKiogCisgICAgLyoqCiAgICAgICogSGFuZGxlcyB0aGUgSFRUUCA8Y29kZT5HRVQ8L2NvZGU+IG1ldGhvZC4KICAgICAgKiBAcGFyYW0gcmVxdWVzdCBzZXJ2bGV0IHJlcXVlc3QKICAgICAgKiBAcGFyYW0gcmVzcG9uc2Ugc2VydmxldCByZXNwb25zZQpAQCAtOTIsOSArOTIsOSBAQAogICAgIHByb3RlY3RlZCB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKQogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIHByb2Nlc3NSZXF1ZXN0KHJlcXVlc3QsIHJlc3BvbnNlKTsKLSAgICB9IAorICAgIH0KIAotICAgIC8qKiAKKyAgICAvKioKICAgICAgKiBIYW5kbGVzIHRoZSBIVFRQIDxjb2RlPlBPU1Q8L2NvZGU+IG1ldGhvZC4KICAgICAgKiBAcGFyYW0gcmVxdWVzdCBzZXJ2bGV0IHJlcXVlc3QKICAgICAgKiBAcGFyYW0gcmVzcG9uc2Ugc2VydmxldCByZXNwb25zZQpAQCAtMTA3LDcgKzEwNyw3IEBACiAgICAgICAgIHByb2Nlc3NSZXF1ZXN0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICAvKiogCisgICAgLyoqCiAgICAgICogUmV0dXJucyBhIHNob3J0IGRlc2NyaXB0aW9uIG9mIHRoZSBzZXJ2bGV0LgogICAgICAqIEByZXR1cm4gYSBTdHJpbmcgY29udGFpbmluZyBzZXJ2bGV0IGRlc2NyaXB0aW9uCiAgICAgICovCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9hcHBtZ3QvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvYXBwbWd0L2J1aWxkLnhtbAppbmRleCAzZGUxOTUwLi5jMjM5ODJmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9hcHBtZ3QvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL2FwcG1ndC9idWlsZC54bWwKQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICAgPGphciBkZXN0ZmlsZT0iJHtkZXBsb3lwbGFuLmphcn0iPgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Jhc2VkaXJ9IiBpbmNsdWRlcz0ic3VuLXdlYi54bWwiLz4KICAgICAgICAgPC9qYXI+Ci0gICAgICAgIAorCiAgICAgICAgIDx3YXIgZGVzdGZpbGU9IiR7YWxsLndhcn0iIHdlYnhtbD0id2ViLnhtbCI+CiAgICAgICAgICAgICA8d2ViaW5mIGRpcj0iLiIgaW5jbHVkZXM9InN1bi13ZWIueG1sIi8+CiAgICAgICAgICAgICA8Y2xhc3NlcyBkaXI9IiR7YnVpbGR9Ii8+CkBAIC04OSwxNiArODksMTYgQEAKICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCi0gICAgPHRhcmdldCBuYW1lPSJlbmFibGUuYXNhZG1pbiI+IAorICAgIDx0YXJnZXQgbmFtZT0iZW5hYmxlLmFzYWRtaW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbW1vbi5lbmFibGUuYXNhZG1pbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IgogICAgICAgICAgICAgICAgICAgIHZhbHVlPSIke3Rlc3ROYW1lfSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRpc2FibGUuYXNhZG1pbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tbW9uLmRpc2FibGUuYXNhZG1pbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IgogICAgICAgICAgICAgICAgICAgIHZhbHVlPSIke3Rlc3ROYW1lfSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CkBAIC0zNjgsNyArMzY4LDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJleHRyYS5hcmdzIiB2YWx1ZT0iJHtjdXN0b21pemVkLmNvbmZpZy5jbGllbnQuYXJnc30iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY2hlY2suYWRkZWQuY3VzdG9taXphdGlvbi5hbmQuc3VwcHJlc3NlZC5vcmlnaW5hbC5jb25maWciPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNoZWNrLmFkZGl0aXZlLmN1c3RvbWl6YXRpb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImxvZy5pZCIgdmFsdWU9IiR7bG9nLmlkfS4xIi8+CkBAIC0zOTEsNyArMzkxLDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJleHRyYS5hcmdzIiB2YWx1ZT0iLXBhcmFtIGJ1aWx0aW49aW4tYXBwIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY2xvYmJlciIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7cG9ydGFibGUud2FyfSIvPgogICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7YWxsLndhcn0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL2RlcGxveWRpci9UZXN0Q2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9kZXBsb3lkaXIvVGVzdENsaWVudC5qYXZhCmluZGV4IDY0Y2NiMjMuLjY0ZTJiYzQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL2RlcGxveWRpci9UZXN0Q2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvZGVwbG95ZGlyL1Rlc3RDbGllbnQuamF2YQpAQCAtMjksNyArMjksNyBAQAogICAgICAgICBUZXN0Q2xpZW50IGNsaWVudCA9IG5ldyBUZXN0Q2xpZW50KCk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoYXJncyk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBTdHJpbmcgdXJsID0gYXJnc1swXTsKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgICAgICAgICBsb2coIkNhdWdodCBFWFBFQ1RFRCBJT0V4Y2VwdGlvbjogIiArIGV4KTsKICAgICAgICAgICAgICAgICBwYXNzKCk7CiAgICAgICAgICAgICB9Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvZGVwbG95ZGlyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL2RlcGxveWRpci9idWlsZC54bWwKaW5kZXggNzRiZmJjYy4uZjVkNTY2NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvZGVwbG95ZGlyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9kZXBsb3lkaXIvYnVpbGQueG1sCkBAIC01Niw3ICs1Niw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveWRpci5hc2FkbWluIiBkZXBlbmRzPSJwcmVwYXJlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21tb24uZGVwbG95ZGlyLmFzYWRtaW4iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iJHtidWlsZH0vJHt0ZXN0TmFtZX0iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgpAQCAtNzIsNyArNzIsNyBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbW1vbi52My5yZWRlcGxveS5hc2FkbWluIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iLS1uYW1lICR7dGVzdE5hbWV9Ii8+Ci0gICAgICAgIDwvYW50Y2FsbD4gCisgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogCkBAIC04NSw3ICs4NSw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95LmFzYWRtaW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbW1vbi51bmRlcGxveS5hc2FkbWluIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9IiR7dGVzdE5hbWV9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KQEAgLTE3Miw3ICsxNzIsNyBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi5wb3NpdGl2ZS5mb28iPjxwYXJhbSBuYW1lPSJsb2cuaWQiIHZhbHVlPSI1Ii8+PC9hbnRjYWxsPgogICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWNsYXJlLXRlc3QiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImRlc2NyaXB0aW9uIiB2YWx1ZT0id2FyL2RlcGxveWRpciBUZXN0IGFzYWRtaW4gcmVkZXBsb3lkaXIgcHJlc2VydmVzIGNvbnRleHQgcm9vdCIvPgotICAgICAgICA8L2FudGNhbGw+ICAgICAgICAKKyAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlZGVwbG95ZGlyLmFzYWRtaW4iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4ucG9zaXRpdmUuZm9vIj48cGFyYW0gbmFtZT0ibG9nLmlkIiB2YWx1ZT0iNiIvPjwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWNsYXJlLXRlc3QiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvZGVwbG95ZGlyL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9kZXBsb3lkaXIvd2ViLnhtbAppbmRleCA1ODc1MDUxLi40NGViZWFkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9kZXBsb3lkaXIvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9kZXBsb3lkaXIvd2ViLnhtbApAQCAtMTgsOCArMTgsOCBAQAogLS0+CiAKIDx3ZWItYXBwIHZlcnNpb249IjIuNCIKLSAgICAgICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIiAKLSAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAorICAgICAgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiCisgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIj4KICAgPGRpc3BsYXktbmFtZT5kZXBsb3lkaXI8L2Rpc3BsYXktbmFtZT4KICAgPHNlcnZsZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9odG1sb25seS9UZXN0Q2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9odG1sb25seS9UZXN0Q2xpZW50LmphdmEKaW5kZXggNDcwMjgxYS4uNTFjMjQ3ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvaHRtbG9ubHkvVGVzdENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL2h0bWxvbmx5L1Rlc3RDbGllbnQuamF2YQpAQCAtMjksNyArMjksNyBAQAogICAgICAgICBUZXN0Q2xpZW50IGNsaWVudCA9IG5ldyBUZXN0Q2xpZW50KCk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoYXJncyk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBTdHJpbmcgdXJsID0gYXJnc1swXTsKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgICAgICAgICBsb2coIkNhdWdodCBFWFBFQ1RFRCBJT0V4Y2VwdGlvbjogIiArIGV4KTsKICAgICAgICAgICAgICAgICBwYXNzKCk7CiAgICAgICAgICAgICB9Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvaHRtbG9ubHkvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvaHRtbG9ubHkvYnVpbGQueG1sCmluZGV4IDBlMDhjYzUuLjI1MGY4MjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL2h0bWxvbmx5L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9odG1sb25seS9idWlsZC54bWwKQEAgLTc4LDE2ICs3OCwxNiBAQAogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKLSAgICA8dGFyZ2V0IG5hbWU9ImVuYWJsZS5hc2FkbWluIj4gCisgICAgPHRhcmdldCBuYW1lPSJlbmFibGUuYXNhZG1pbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tbW9uLmVuYWJsZS5hc2FkbWluIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9IiR7dGVzdE5hbWV9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGlzYWJsZS5hc2FkbWluIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21tb24uZGlzYWJsZS5hc2FkbWluIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9IiR7dGVzdE5hbWV9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KQEAgLTE3Miw3ICsxNzIsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNzZW1ibGUiLz4KLSAgICAgICAgCisKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3kuYXNhZG1pbiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi5wb3NpdGl2ZSI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ibG9nLmlkIiB2YWx1ZT0iMSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvaHRtbG9ubHkvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL2h0bWxvbmx5L3dlYi54bWwKaW5kZXggM2RmYmUyMC4uNzYzM2M5MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvaHRtbG9ubHkvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9odG1sb25seS93ZWIueG1sCkBAIC0xOCw4ICsxOCw4IEBACiAtLT4KIAogPHdlYi1hcHAgdmVyc2lvbj0iMi40IgotICAgICAgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiIAotICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCisgICAgICAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIKKyAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiPgogICA8ZGlzcGxheS1uYW1lPmh0bWxvbmx5PC9kaXNwbGF5LW5hbWU+CiAgIDx3ZWxjb21lLWZpbGUtbGlzdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL2pzcG9ubHkvVGVzdENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvanNwb25seS9UZXN0Q2xpZW50LmphdmEKaW5kZXggZmVlY2ZmMi4uYWQwYTMxOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvanNwb25seS9UZXN0Q2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvanNwb25seS9UZXN0Q2xpZW50LmphdmEKQEAgLTI5LDcgKzI5LDcgQEAKICAgICAgICAgVGVzdENsaWVudCBjbGllbnQgPSBuZXcgVGVzdENsaWVudCgpOwogICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3MpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgU3RyaW5nIHVybCA9IGFyZ3NbMF07CkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgICAgICAgICAgbG9nKCJDYXVnaHQgRVhQRUNURUQgSU9FeGNlcHRpb246ICIgKyBleCk7CiAgICAgICAgICAgICAgICAgcGFzcygpOwogICAgICAgICAgICAgfQotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL2pzcG9ubHkvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvanNwb25seS9idWlsZC54bWwKaW5kZXggNDFmZGQ4NC4uOTYwMzg0YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvanNwb25seS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvanNwb25seS9idWlsZC54bWwKQEAgLTE0MSw3ICsxNDEsNyBAQAogICAgICAgICAgICAgPGp2bWFyZyB2YWx1ZT0iLURvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0PSR7b3JiLnBvcnR9Ii8+CiAKICAgICAgICAgICAgIDxjbGFzc3BhdGg+Ci0JICAgICAgIDxwYXRoIHJlZmlkPSJnZnYzLmNsYXNzcGF0aCIvPgorICAgICAgICAgICA8cGF0aCByZWZpZD0iZ2Z2My5jbGFzc3BhdGgiLz4KICAgICAgICAgICAgICAgIDxwYXRoIGxvY2F0aW9uPSIke2J1aWxkfSIvPgogICAgICAgICAgICAgPC9jbGFzc3BhdGg+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL2pzcG9ubHkvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL2pzcG9ubHkvd2ViLnhtbAppbmRleCA3Njk3ODRlLi45NjNmZDFjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9qc3Bvbmx5L3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvanNwb25seS93ZWIueG1sCkBAIC0xOCw4ICsxOCw4IEBACiAtLT4KIAogPHdlYi1hcHAgdmVyc2lvbj0iMi40IgotICAgICAgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiIAotICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCisgICAgICAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIKKyAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiPgogICA8ZGlzcGxheS1uYW1lPmpzcG9ubHk8L2Rpc3BsYXktbmFtZT4KICAgPHdlbGNvbWUtZmlsZS1saXN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvbm9qYXJleHBhbnNpb24vVGVzdENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvbm9qYXJleHBhbnNpb24vVGVzdENsaWVudC5qYXZhCmluZGV4IGJmYzU0Y2EuLjhjYzI5NTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL25vamFyZXhwYW5zaW9uL1Rlc3RDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9ub2phcmV4cGFuc2lvbi9UZXN0Q2xpZW50LmphdmEKQEAgLTI5LDcgKzI5LDcgQEAKICAgICAgICAgVGVzdENsaWVudCBjbGllbnQgPSBuZXcgVGVzdENsaWVudCgpOwogICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3MpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgU3RyaW5nIHVybCA9IGFyZ3NbMF07CkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgICAgICAgICAgbG9nKCJDYXVnaHQgRVhQRUNURUQgSU9FeGNlcHRpb246ICIgKyBleCk7CiAgICAgICAgICAgICAgICAgcGFzcygpOwogICAgICAgICAgICAgfQotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL25vamFyZXhwYW5zaW9uL1Rlc3RQcm9wLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL25vamFyZXhwYW5zaW9uL1Rlc3RQcm9wLnhtbAppbmRleCA3Nzg4NzA0Li41N2RjMDZmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9ub2phcmV4cGFuc2lvbi9UZXN0UHJvcC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvbm9qYXJleHBhbnNpb24vVGVzdFByb3AueG1sCkBAIC0yMCwyMSArMjAsMjEgQEAKIDxwcm9qZWN0IG5hbWU9ImNoYW5nZW1lIiBkZWZhdWx0PSJhbGwiIGJhc2VkaXI9Ii4iPgogICAgIDx0YXJnZXQgbmFtZT0iYWxsIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJlbnN1cmUubm8uZmlsZSI+Ci0JCTxwYXJhbSBuYW1lPSJmaWxlIiB2YWx1ZT0iL3RpbSIvPgotCSAgPC9hbnRjYWxsPgorICAgICAgICA8cGFyYW0gbmFtZT0iZmlsZSIgdmFsdWU9Ii90aW0iLz4KKyAgICAgIDwvYW50Y2FsbD4KIAotCSAgPGFudGNhbGwgdGFyZ2V0PSJlbnN1cmUubm8uZmlsZSI+Ci0JCTxwYXJhbSBuYW1lPSJmaWxlIiB2YWx1ZT0iL3RpbS9qampqIi8+Ci0JICA8L2FudGNhbGw+CisgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVuc3VyZS5uby5maWxlIj4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImZpbGUiIHZhbHVlPSIvdGltL2pqamoiLz4KKyAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZW5zdXJlLm5vLmZpbGUiPgogICAgICAgICA8YXZhaWxhYmxlIGZpbGU9IiR7ZmlsZX0iIHByb3BlcnR5PSJyZXN1bHQiIHZhbHVlPSIxIi8+Ci0JICA8Y29uZGl0aW9uIHByb3BlcnR5PSJyZXN1bHQiIHZhbHVlPSIwIj4KLQkJPG5vdD4KLQkJCTxpc3NldCBwcm9wZXJ0eT0icmVzdWx0Ii8+Ci0JCTwvbm90PgotCSAgPC9jb25kaXRpb24+CisgICAgICA8Y29uZGl0aW9uIHByb3BlcnR5PSJyZXN1bHQiIHZhbHVlPSIwIj4KKyAgICAgICAgPG5vdD4KKyAgICAgICAgICAgIDxpc3NldCBwcm9wZXJ0eT0icmVzdWx0Ii8+CisgICAgICAgIDwvbm90PgorICAgICAgPC9jb25kaXRpb24+CiAgICAgICAgIDxlY2hvPlJlc3VsdCBmb3IgZmlsZSAke2ZpbGV9OiAke3Jlc3VsdH08L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9ub2phcmV4cGFuc2lvbi9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvbm9qYXJleHBhbnNpb24vVGVzdFNlcnZsZXQuamF2YQppbmRleCA1MTI3NjFlLi45NDc5NWNiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9ub2phcmV4cGFuc2lvbi9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL25vamFyZXhwYW5zaW9uL1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uCiAgICAgewogICAgICAgICB0cnkgewotCQkJRHVtbXlMaWIgZCA9IG5ldyBEdW1teUxpYigpOworICAgICAgICAgICAgRHVtbXlMaWIgZCA9IG5ldyBEdW1teUxpYigpOwogICAgICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7CiAgICAgICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGh0bWw+Iik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9ub2phcmV4cGFuc2lvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9ub2phcmV4cGFuc2lvbi9idWlsZC54bWwKaW5kZXggOGJmMmY2Ni4uYzNmZGY4MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvbm9qYXJleHBhbnNpb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL25vamFyZXhwYW5zaW9uL2J1aWxkLnhtbApAQCAtMTkxLDExICsxOTEsMTEgQEAKIEZpbGUgdG8gY2hlY2sgaXMgJHtmaWxlLnRvLmNoZWNrfTwvZWNobz4KICAgICAgICAgPGF2YWlsYWJsZSBmaWxlPSIke2ZpbGUudG8uY2hlY2t9IiBwcm9wZXJ0eT0icmVzdWx0IiB2YWx1ZT0iMSIvPgogICAgICAgICA8ZWNobz5BZnRlciBhdmFpbGFibGUgY2hlY2ssIHJlc3VsdCBpcyBub3cgJHtyZXN1bHR9PC9lY2hvPgotCSAgPGNvbmRpdGlvbiBwcm9wZXJ0eT0icmVzdWx0IiB2YWx1ZT0iMCI+Ci0JCTxub3Q+Ci0JCQk8aXNzZXQgcHJvcGVydHk9InJlc3VsdCIvPgotCQk8L25vdD4KLQkgIDwvY29uZGl0aW9uPgorICAgICAgPGNvbmRpdGlvbiBwcm9wZXJ0eT0icmVzdWx0IiB2YWx1ZT0iMCI+CisgICAgICAgIDxub3Q+CisgICAgICAgICAgICA8aXNzZXQgcHJvcGVydHk9InJlc3VsdCIvPgorICAgICAgICA8L25vdD4KKyAgICAgIDwvY29uZGl0aW9uPgogICAgICAgICA8ZWNobz5BZnRlciBmaW5hbCBjaGVjayBvZiByZXN1bHRzLCB2YWx1ZSBpcyBub3cgJHtyZXN1bHR9PC9lY2hvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InByb2Nlc3NSZXN1bHQiPgogICAgICAgICA8L2FudGNhbGw+CkBAIC0yNjUsNyArMjY1LDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0ieHgiIGRlcGVuZHM9ImluaXQiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJlbnN1cmUubm8uZmlsZSI+Ci0JCTxwYXJhbSBuYW1lPSJmaWxlIiB2YWx1ZT0iJHtmaWxlLnRvLmNoZWNrfSIvPgorICAgICAgICA8cGFyYW0gbmFtZT0iZmlsZSIgdmFsdWU9IiR7ZmlsZS50by5jaGVja30iLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL25vamFyZXhwYW5zaW9uL2R1bW15bGliL0R1bW15TGliLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9ub2phcmV4cGFuc2lvbi9kdW1teWxpYi9EdW1teUxpYi5qYXZhCmluZGV4IDljZDJmMGUuLjRlODY3MjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL25vamFyZXhwYW5zaW9uL2R1bW15bGliL0R1bW15TGliLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvbm9qYXJleHBhbnNpb24vZHVtbXlsaWIvRHVtbXlMaWIuamF2YQpAQCAtMTgsNyArMTgsNyBAQAogCiBwdWJsaWMgY2xhc3MgRHVtbXlMaWIgewogCi0JcHVibGljIER1bW15TGliKCkge30KKyAgICBwdWJsaWMgRHVtbXlMaWIoKSB7fQogCiAgICAgcHVibGljIFN0cmluZyBnZXREdW1teVN0cmluZygpIHsKICAgICAgICAgcmV0dXJuICJUaGlzIGlzIHRoZSBzdHJpbmcgZnJvbSBkdW1teSBsaWIiOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvbm9qYXJleHBhbnNpb24vd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL25vamFyZXhwYW5zaW9uL3dlYi54bWwKaW5kZXggMzFlYWVkNC4uNGM3NDI1OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvbm9qYXJleHBhbnNpb24vd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9ub2phcmV4cGFuc2lvbi93ZWIueG1sCkBAIC0xOCw4ICsxOCw4IEBACiAtLT4KIAogPHdlYi1hcHAgdmVyc2lvbj0iMi40IgotICAgICAgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiIAotICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCisgICAgICAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIKKyAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiPgogICA8ZGlzcGxheS1uYW1lPm5vamFyZXhwYW5zaW9uPC9kaXNwbGF5LW5hbWU+CiAgIDxzZXJ2bGV0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvc2VydmxldG9ubHkvVGVzdENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvc2VydmxldG9ubHkvVGVzdENsaWVudC5qYXZhCmluZGV4IDBmY2E3OTUuLjIxMjU4YmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL3NlcnZsZXRvbmx5L1Rlc3RDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9zZXJ2bGV0b25seS9UZXN0Q2xpZW50LmphdmEKQEAgLTMzLDcgKzMzLDcgQEAKICAgICAgICAgVGVzdENsaWVudCBjbGllbnQgPSBuZXcgVGVzdENsaWVudCgpOwogICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3MpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgU3RyaW5nIHVybCA9IGFyZ3NbMF07CkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgICAgICAgICAgbG9nKCJDYXVnaHQgRVhQRUNURUQgSU9FeGNlcHRpb246ICIgKyBleCk7CiAgICAgICAgICAgICAgICAgcGFzcygpOwogICAgICAgICAgICAgfQotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL3NlcnZsZXRvbmx5L1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9zZXJ2bGV0b25seS9UZXN0U2VydmxldC5qYXZhCmluZGV4IGIxNzM3N2MuLmU3MGUwZWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL3NlcnZsZXRvbmx5L1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvc2VydmxldG9ubHkvVGVzdFNlcnZsZXQuamF2YQpAQCAtNTEsNyArNTEsNyBAQAogICAgICAgICAgICAgICogVGhlIGZvbGxvd2luZyBsaW5lIHdpbGwgY29tcGlsZSBjb3JyZWN0bHkgb25seSB3aGVuIHRoZSBhbnQKICAgICAgICAgICAgICAqIGRldnRlc3QgaXMgcnVubmluZy4gIFRoZSBDaGFuZ2VhYmxlQ2xhc3MgY2xhc3MgaXMgZ2VuZXJhdGVkCiAgICAgICAgICAgICAgKiBieSB0aGUgYW50IHRhc2sgKHR3byBkaWZmZXJlbnQgd2F5cyBhdCB0d28gZGlmZmVyZW50IHBvaW50cwotICAgICAgICAgICAgICogaW4gdGhlIHByb2Nlc3NpbmcpLiAgCisgICAgICAgICAgICAgKiBpbiB0aGUgcHJvY2Vzc2luZykuCiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBjaGFuZ2VhYmxlVmFsdWUgPSBDaGFuZ2VhYmxlQ2xhc3MuY2hhbmdlYWJsZVZhbHVlKCk7CiAgICAgICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL3NlcnZsZXRvbmx5L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL3NlcnZsZXRvbmx5L2J1aWxkLnhtbAppbmRleCA4YjdhNzVhLi40ZDc0YWNmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9zZXJ2bGV0b25seS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvc2VydmxldG9ubHkvYnVpbGQueG1sCkBAIC02NSw4ICs2NSw4IEBACiAgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7ZGVwbG95cGxhbi5qYXJ9Ij4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtiYXNlZGlyfSIgaW5jbHVkZXM9ImdsYXNzZmlzaC13ZWIueG1sLHN1bi13ZWIueG1sIi8+CiAgICAgICAgIDwvamFyPgotICAgICAgICAKLSAgICAgICAgPCEtLSAKKworICAgICAgICA8IS0tCiAgICAgICAgICAgICAgVGhlIG1hbmlmZXN0IGluIHRoZSBuZXh0IHRhc2sgc3BlY2lmaWVzIGEgTWFpbi1DbGFzcy4gIEl0IGlzIG5vdCB1c2VkIGV4Y2VwdAogICAgICAgICAgICAgIHRvIG1ha2Ugc3VyZSB0aGUgYXBwIGNsaWVudCBzbmlmZmVyIGRvZXMgbm90IGNsYWltIHRoZSB3ZWIKICAgICAgICAgICAgICBtb2R1bGUgc2ltcGx5IGJlY2F1c2UgaXQgaGFzIGEgTWFpbi1DbGFzcyBzZXR0aW5nLgpAQCAtMTEzLDE2ICsxMTMsMTYgQEAKICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCi0gICAgPHRhcmdldCBuYW1lPSJlbmFibGUuYXNhZG1pbiI+IAorICAgIDx0YXJnZXQgbmFtZT0iZW5hYmxlLmFzYWRtaW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbW1vbi5lbmFibGUuYXNhZG1pbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IgogICAgICAgICAgICAgICAgICAgIHZhbHVlPSIke3Rlc3ROYW1lfSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRpc2FibGUuYXNhZG1pbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tbW9uLmRpc2FibGUuYXNhZG1pbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IgogICAgICAgICAgICAgICAgICAgIHZhbHVlPSIke3Rlc3ROYW1lfSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9zZXJ2bGV0b25seS93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvc2VydmxldG9ubHkvd2ViLnhtbAppbmRleCBkOTMyMWVmLi42YWY2YjRkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci9zZXJ2bGV0b25seS93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL3NlcnZsZXRvbmx5L3dlYi54bWwKQEAgLTE4LDggKzE4LDggQEAKIC0tPgogCiA8d2ViLWFwcCB2ZXJzaW9uPSIyLjQiCi0gICAgICAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIgCi0gICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKKyAgICAgICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIgorICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCI+CiAgIDxkaXNwbGF5LW5hbWU+c2VydmxldG9ubHk8L2Rpc3BsYXktbmFtZT4KICAgPHNlcnZsZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci92aXJ0dWFsc2VydmVyL1Rlc3RDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL3ZpcnR1YWxzZXJ2ZXIvVGVzdENsaWVudC5qYXZhCmluZGV4IDA2Y2ZhMTEuLmUyY2E5YzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL3ZpcnR1YWxzZXJ2ZXIvVGVzdENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL3ZpcnR1YWxzZXJ2ZXIvVGVzdENsaWVudC5qYXZhCkBAIC0yOSw3ICsyOSw3IEBACiAgICAgICAgIFRlc3RDbGllbnQgY2xpZW50ID0gbmV3IFRlc3RDbGllbnQoKTsKICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIFN0cmluZyB1cmwgPSBhcmdzWzBdOwpAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICAgICAgICAgIGxvZygiQ2F1Z2h0IEVYUEVDVEVEIElPRXhjZXB0aW9uOiAiICsgZXgpOwogICAgICAgICAgICAgICAgIHBhc3MoKTsKICAgICAgICAgICAgIH0KLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci92aXJ0dWFsc2VydmVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL3ZpcnR1YWxzZXJ2ZXIvYnVpbGQueG1sCmluZGV4IDc1OWFiYmUuLjZhZWU1NjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL3ZpcnR1YWxzZXJ2ZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL3ZpcnR1YWxzZXJ2ZXIvYnVpbGQueG1sCkBAIC0yNyw5ICsyNyw5IEBACiAKICAgICA8cHJvcGVydHkgbmFtZT0iY29udGV4dFJvb3QiIHZhbHVlPSJ3YXIiLz4KICAgICA8cHJvcGVydHkgbmFtZT0idGVzdE5hbWUiIHZhbHVlPSJ2aXJ0dWFsc2VydmVyIi8+Ci0gICAgPHByb3BlcnR5IG5hbWU9InVybDIiIAorICAgIDxwcm9wZXJ0eSBuYW1lPSJ1cmwyIgogICAgICAgICAgICAgICB2YWx1ZT0iaHR0cDovLyR7aHR0cC5ob3N0fToke2h0dHAucG9ydC4yfS8ke2NvbnRleHRSb290fS8ke3Rlc3ROYW1lfSIvPgotICAgICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icHJlcGFyZSIgZGVwZW5kcz0iaW5pdCI+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwb3J0YWJsZS53YXIiIHZhbHVlPSIke2J1aWxkfS8ke3Rlc3ROYW1lfS1wb3J0YWJsZS53YXIiLz4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImFsbC53YXIiIHZhbHVlPSIke2J1aWxkfS8ke3Rlc3ROYW1lfS53YXIiLz4KQEAgLTYxLDcgKzYxLDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLnZpcnR1YWwuc2VydmVyIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21tb24uY3JlYXRlLnZpcnR1YWwuc2VydmVyLmFzYWRtaW4iPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiCiAgICAgICAgICAgICAgICB2YWx1ZT0iLS1ob3N0cyAke2h0dHAuaG9zdH0gJHt2aXJ0dWFsLnNlcnZlci5uYW1lfSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CkBAIC04OSwxNCArODksMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95LmFzYWRtaW4iIGRlcGVuZHM9InByZXBhcmUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbW1vbi5kZXBsb3kuYXNhZG1pbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFyZy5saXN0IgogICAgICAgICAgICAgICAgICAgIHZhbHVlPSItLXZpcnR1YWxzZXJ2ZXJzICR7dmlydHVhbC5zZXJ2ZXIubmFtZX0gJHthbGwud2FyfSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95LmFzYWRtaW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbW1vbi51bmRlcGxveS5hc2FkbWluIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9IiR7dGVzdE5hbWV9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KQEAgLTE0Niw3ICsxNDYsNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJwcml2YXRlLWFsbCI+Ci0gICAgICAgIDwhLS0gdGVzdCB0aGF0IHRoZSBhcHAgaXMgZGVwbG95ZWQgdG8gdGhlIG5ld2x5IAorICAgICAgICA8IS0tIHRlc3QgdGhhdCB0aGUgYXBwIGlzIGRlcGxveWVkIHRvIHRoZSBuZXdseQogICAgICAgICAgICAgIGNyZWF0ZWQgdmlydHVhbCBzZXJ2ZXIgLS0+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVjbGFyZS10ZXN0Ij4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJkZXNjcmlwdGlvbiIgdmFsdWU9Indhci92aXJ0dWFsc2VydmVyIFRlc3QgYXNhZG1pbiBkZXBsb3kxIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci92aXJ0dWFsc2VydmVyL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci92aXJ0dWFsc2VydmVyL3dlYi54bWwKaW5kZXggNmYxNGM0ZS4uM2RmNmVhNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvdmlydHVhbHNlcnZlci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL3ZpcnR1YWxzZXJ2ZXIvd2ViLnhtbApAQCAtMTgsOCArMTgsOCBAQAogLS0+CiAKIDx3ZWItYXBwIHZlcnNpb249IjIuNCIKLSAgICAgICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIiAKLSAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAorICAgICAgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiCisgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIj4KICAgPGRpc3BsYXktbmFtZT52aXJ0dWFsc2VydmVyPC9kaXNwbGF5LW5hbWU+CiAgIDxzZXJ2bGV0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvd2ViaW5mbGliL1Rlc3RDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL3dlYmluZmxpYi9UZXN0Q2xpZW50LmphdmEKaW5kZXggYzI1MDJkOS4uYmFmOWYwMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvd2ViaW5mbGliL1Rlc3RDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci93ZWJpbmZsaWIvVGVzdENsaWVudC5qYXZhCkBAIC0yOSw3ICsyOSw3IEBACiAgICAgICAgIFRlc3RDbGllbnQgY2xpZW50ID0gbmV3IFRlc3RDbGllbnQoKTsKICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIFN0cmluZyB1cmwgPSBhcmdzWzBdOwpAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICAgICAgICAgIGxvZygiQ2F1Z2h0IEVYUEVDVEVEIElPRXhjZXB0aW9uOiAiICsgZXgpOwogICAgICAgICAgICAgICAgIHBhc3MoKTsKICAgICAgICAgICAgIH0KLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci93ZWJpbmZsaWIvVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL3dlYmluZmxpYi9UZXN0U2VydmxldC5qYXZhCmluZGV4IDUxMjc2MWUuLjk0Nzk1Y2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL3dlYmluZmxpYi9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL3dlYmluZmxpYi9UZXN0U2VydmxldC5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbgogICAgIHsKICAgICAgICAgdHJ5IHsKLQkJCUR1bW15TGliIGQgPSBuZXcgRHVtbXlMaWIoKTsKKyAgICAgICAgICAgIER1bW15TGliIGQgPSBuZXcgRHVtbXlMaWIoKTsKICAgICAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwogICAgICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxodG1sPiIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvd2ViaW5mbGliL2R1bW15bGliL0R1bW15TGliLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci93ZWJpbmZsaWIvZHVtbXlsaWIvRHVtbXlMaWIuamF2YQppbmRleCA5Y2QyZjBlLi40ZTg2NzI2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci93ZWJpbmZsaWIvZHVtbXlsaWIvRHVtbXlMaWIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci93ZWJpbmZsaWIvZHVtbXlsaWIvRHVtbXlMaWIuamF2YQpAQCAtMTgsNyArMTgsNyBAQAogCiBwdWJsaWMgY2xhc3MgRHVtbXlMaWIgewogCi0JcHVibGljIER1bW15TGliKCkge30KKyAgICBwdWJsaWMgRHVtbXlMaWIoKSB7fQogCiAgICAgcHVibGljIFN0cmluZyBnZXREdW1teVN0cmluZygpIHsKICAgICAgICAgcmV0dXJuICJUaGlzIGlzIHRoZSBzdHJpbmcgZnJvbSBkdW1teSBsaWIiOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvd2ViaW5mbGliL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci93ZWJpbmZsaWIvd2ViLnhtbAppbmRleCA5MzEzYjIzLi4yNDExNjhmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci93ZWJpbmZsaWIvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci93ZWJpbmZsaWIvd2ViLnhtbApAQCAtMTgsOCArMTgsOCBAQAogLS0+CiAKIDx3ZWItYXBwIHZlcnNpb249IjIuNCIKLSAgICAgICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIiAKLSAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAorICAgICAgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiCisgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIj4KICAgPGRpc3BsYXktbmFtZT53ZWJpbmZsaWI8L2Rpc3BsYXktbmFtZT4KICAgPHNlcnZsZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci93ZWJzZXJ2aWNlcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci93ZWJzZXJ2aWNlcy9idWlsZC54bWwKaW5kZXggNTRlNDA0Ni4uYWVmN2U4MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvd2Vic2VydmljZXMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL3dlYnNlcnZpY2VzL2J1aWxkLnhtbApAQCAtMjMsMTIgKzIzLDEyIEBACiAKIDxwcm9qZWN0IG5hbWU9IndlYnNlcnZpY2VzIiBkZWZhdWx0PSJhbGwiIGJhc2VkaXI9Ii4iPgogCi0JJmNvbW1vbkJ1aWxkOworICAgICZjb21tb25CdWlsZDsKIAotCTx0YXJnZXQgbmFtZT0icHJpdmF0ZS1hbGwiPgotCQk8YW50IGRpcj0iaGVsbG9zZXJ2aWNlIiB0YXJnZXQ9InByaXZhdGUtYWxsIj4KLQkJCTxwcm9wZXJ0eSBuYW1lPSJidWlsZCIgdmFsdWU9IiR7YnVpbGR9L2hlbGxvc2VydmljZSIvPgotCQk8L2FudD4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIj4KKyAgICAgICAgPGFudCBkaXI9ImhlbGxvc2VydmljZSIgdGFyZ2V0PSJwcml2YXRlLWFsbCI+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9oZWxsb3NlcnZpY2UiLz4KKyAgICAgICAgPC9hbnQ+CisgICAgPC90YXJnZXQ+CiAKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL3dlYnNlcnZpY2VzL2hlbGxvc2VydmljZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci93ZWJzZXJ2aWNlcy9oZWxsb3NlcnZpY2UvYnVpbGQueG1sCmluZGV4IDQ3NDBiZDUuLmNmODFjNzIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL3dlYnNlcnZpY2VzL2hlbGxvc2VydmljZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvd2Vic2VydmljZXMvaGVsbG9zZXJ2aWNlL2J1aWxkLnhtbApAQCAtMjUsNyArMjUsNyBAQAogCiAgICAgJmNvbW1vbkJ1aWxkOwogICAgIDxwcm9wZXJ0eSBuYW1lPSJhcmNoaXZlZGlyIiB2YWx1ZT0iJHtidWlsZH0vYXJjaGl2ZXMiLz4KLQkKKwogICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0TmFtZSIgdmFsdWU9IlNheUhlbGxvV1MiLz4KICAgICA8dGFyZ2V0IG5hbWU9InByZXBhcmUiIGRlcGVuZHM9ImluaXQiPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0iYmluYXJ5IiB2YWx1ZT0iJHtidWlsZH0vV0VCLUlORi9jbGFzc2VzIi8+CkBAIC0zNiwyNSArMzYsMjUgQEAKICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImFsbC53YXIiIHZhbHVlPSIke2FyY2hpdmVkaXJ9L3NheWhlbGxvLndhciIvPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0iZGVwbG95cGxhbi5qYXIiIHZhbHVlPSIke2FyY2hpdmVkaXJ9L3NheWhlbGxvLWRlcGxveXBsYW4uamFyIi8+CiAgICAgPC90YXJnZXQ+Ci0JCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9InByZXBhcmUiPgotCQk8amF2YWMgc3JjZGlyPSJoZWxsb3NlcnZpY2UiIGRlc3RkaXI9IiR7YmluYXJ5fSIKLQkJCWNsYXNzcGF0aD0iJHtpbnN0fS9saWIvajJlZS5qYXIiLz4KLQkJPGVjaG8gbWVzc2FnZT0iaW52b2tpbmcgd3Njb21waWxlIHRvIGdlbmVyYXRlIHdzZGwgZmlsZSIvPgotCQk8ZXhlYyBleGVjdXRhYmxlPSIke1dTQ09NUElMRX0iPgorICAgICAgICA8amF2YWMgc3JjZGlyPSJoZWxsb3NlcnZpY2UiIGRlc3RkaXI9IiR7YmluYXJ5fSIKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtpbnN0fS9saWIvajJlZS5qYXIiLz4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iaW52b2tpbmcgd3Njb21waWxlIHRvIGdlbmVyYXRlIHdzZGwgZmlsZSIvPgorICAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke1dTQ09NUElMRX0iPgogICAgICAgICAgICAgICAgICAgICA8YXJnIGxpbmU9Ii1kZWZpbmUgY29uZmlnLWludGVyZmFjZS54bWwgIC1kICR7YmluYXJ5fSAtbmQgJHt3c2RsfSAtY2xhc3NwYXRoICR7YmluYXJ5fSAtbWFwcGluZyAke2J1aWxkfS9tYXBwaW5nLnhtbCIvPgotCSAJPC9leGVjPgkJCQkJCisgICAgICAgICA8L2V4ZWM+CiAgICAgPC90YXJnZXQ+Ci0JCisKICAgICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIiBkZXBlbmRzPSJjb21waWxlIj4KLQkJPGNvcHkgZmlsZT0id2ViLnhtbCIgdG9kaXI9IiR7YnVpbGR9L1dFQi1JTkYiLz4KLQkJPGNvcHkgZmlsZT0id2Vic2VydmljZXMueG1sIiB0b2Rpcj0iJHtidWlsZH0vV0VCLUlORiIvPgotCQk8amFyIGRlc3RmaWxlPSIke3BvcnRhYmxlLndhcn0iIGJhc2VkaXI9IiR7YnVpbGR9Ii8+Ci0JCTxjb3B5IGZpbGU9InN1bi13ZWIueG1sIiB0b2Rpcj0iJHtidWlsZH0vV0VCLUlORiIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0JCTxqYXIgZGVzdGZpbGU9IiR7YWxsLndhcn0iIGJhc2VkaXI9IiR7YnVpbGR9Ii8+Ci0JCTxqYXIgZGVzdGZpbGU9IiR7ZGVwbG95cGxhbi5qYXJ9Ij4KLQkJICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YmFzZWRpcn0iIGluY2x1ZGVzPSJzdW4td2ViLnhtbCIvPgotCQk8L2phcj4KKyAgICAgICAgPGNvcHkgZmlsZT0id2ViLnhtbCIgdG9kaXI9IiR7YnVpbGR9L1dFQi1JTkYiLz4KKyAgICAgICAgPGNvcHkgZmlsZT0id2Vic2VydmljZXMueG1sIiB0b2Rpcj0iJHtidWlsZH0vV0VCLUlORiIvPgorICAgICAgICA8amFyIGRlc3RmaWxlPSIke3BvcnRhYmxlLndhcn0iIGJhc2VkaXI9IiR7YnVpbGR9Ii8+CisgICAgICAgIDxjb3B5IGZpbGU9InN1bi13ZWIueG1sIiB0b2Rpcj0iJHtidWlsZH0vV0VCLUlORiIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CisgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YWxsLndhcn0iIGJhc2VkaXI9IiR7YnVpbGR9Ii8+CisgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7ZGVwbG95cGxhbi5qYXJ9Ij4KKyAgICAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YmFzZWRpcn0iIGluY2x1ZGVzPSJzdW4td2ViLnhtbCIvPgorICAgICAgICA8L2phcj4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95LmFzYWRtaW4iIGRlcGVuZHM9InByZXBhcmUiPgpAQCAtNjIsMTAgKzYyLDEwIEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXJnLmxpc3QiIHZhbHVlPSItLW5hbWUgJHt0ZXN0TmFtZX0gJHthbGwud2FyfSIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InRlc3ROYW1lIiB2YWx1ZT0iJHt0ZXN0TmFtZX0iLz4KICAgICAgICAgPC9hbnRjYWxsPgotCTxlY2hvIG1lc3NhZ2U9IkNyZWF0ZSBjbGllbnQgd2Vic2VydmljZXMgYXJ0aWZhY3RzIi8+Ci0JPGV4ZWMgZXhlY3V0YWJsZT0iJHtXU0NPTVBJTEV9Ij4KLQkJPGFyZyBsaW5lPSItZ2VuOmNsaWVudCAta2VlcCAtZCAke2JpbmFyeX0gLWNsYXNzcGF0aCAke2JpbmFyeX0gY29uZmlnLWludGVyZmFjZS54bWwiLz4KLQk8L2V4ZWM+CisgICAgPGVjaG8gbWVzc2FnZT0iQ3JlYXRlIGNsaWVudCB3ZWJzZXJ2aWNlcyBhcnRpZmFjdHMiLz4KKyAgICA8ZXhlYyBleGVjdXRhYmxlPSIke1dTQ09NUElMRX0iPgorICAgICAgICA8YXJnIGxpbmU9Ii1nZW46Y2xpZW50IC1rZWVwIC1kICR7YmluYXJ5fSAtY2xhc3NwYXRoICR7YmluYXJ5fSBjb25maWctaW50ZXJmYWNlLnhtbCIvPgorICAgIDwvZXhlYz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVkZXBsb3kuYXNhZG1pbiIgZGVwZW5kcz0icHJlcGFyZSI+CkBAIC03MywxMCArNzMsMTAgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcmcubGlzdCIgdmFsdWU9Ii0tbmFtZSAke3Rlc3ROYW1lfSAke2FsbC53YXJ9Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0idGVzdE5hbWUiIHZhbHVlPSIke3Rlc3ROYW1lfSIvPgogICAgICAgICA8L2FudGNhbGw+Ci0JPGVjaG8gbWVzc2FnZT0iQ3JlYXRlIGNsaWVudCB3ZWJzZXJ2aWNlcyBhcnRpZmFjdHMiLz4KLQk8ZXhlYyBleGVjdXRhYmxlPSIke1dTQ09NUElMRX0iPgotCQk8YXJnIGxpbmU9Ii1nZW46Y2xpZW50IC1rZWVwIC1kICR7YmluYXJ5fSAtY2xhc3NwYXRoICR7YmluYXJ5fSBjb25maWctaW50ZXJmYWNlLnhtbCIvPgotCTwvZXhlYz4KKyAgICA8ZWNobyBtZXNzYWdlPSJDcmVhdGUgY2xpZW50IHdlYnNlcnZpY2VzIGFydGlmYWN0cyIvPgorICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7V1NDT01QSUxFfSI+CisgICAgICAgIDxhcmcgbGluZT0iLWdlbjpjbGllbnQgLWtlZXAgLWQgJHtiaW5hcnl9IC1jbGFzc3BhdGggJHtiaW5hcnl9IGNvbmZpZy1pbnRlcmZhY2UueG1sIi8+CisgICAgPC9leGVjPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveS5hc2FkbWluIj4KQEAgLTEzOSwxMyArMTM5LDEzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bmNsaWVudCIgZGVwZW5kcz0icHJlcGFyZSI+Ci0JPGphdmFjIHNyY2Rpcj0ic3RhdGljc3R1YmNsaWVudCIgZGVzdGRpcj0iJHtiaW5hcnl9IgotCQljbGFzc3BhdGg9IiR7aW5zdH0vbGliL2oyZWUuamFyOiR7aW5zdH0vbGliL3dlYnNlcnZpY2VzLXJ0Lmphcjoke2luc3R9L2xpYi93ZWJzZXJ2aWNlcy10b29scy5qYXIiLz4KKyAgICA8amF2YWMgc3JjZGlyPSJzdGF0aWNzdHViY2xpZW50IiBkZXN0ZGlyPSIke2JpbmFyeX0iCisgICAgICAgIGNsYXNzcGF0aD0iJHtpbnN0fS9saWIvajJlZS5qYXI6JHtpbnN0fS9saWIvd2Vic2VydmljZXMtcnQuamFyOiR7aW5zdH0vbGliL3dlYnNlcnZpY2VzLXRvb2xzLmphciIvPgogCiAgICAgICAgIDxqYXZhV2l0aFJlc3VsdAogICAgICAgICAgICAgZm9yaz0idHJ1ZSIKICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIKLSAgICAgICAgICAgIGp2bT0iJHtKQVZBfSIJCisgICAgICAgICAgICBqdm09IiR7SkFWQX0iCiAgICAgICAgICAgICBjbGFzc25hbWU9InN0YXRpY3N0dWJjbGllbnQuU2F5SGVsbG9DbGllbnQiCiAgICAgICAgICAgICBvdXRwdXQ9IiR7YnVpbGR9LyR7bG9nLmlkfS5vdXRwdXQubG9nIgogICAgICAgICAgICAgcmVzdWx0cHJvcGVydHk9InJlc3VsdCI+CkBAIC0xNjEsNyArMTYxLDcgQEAKICAgICAgICAgICAgIDxhcmcgbGluZT0iJHthcmcubGlzdH0iLz4KICAgICAgICAgPC9qYXZhV2l0aFJlc3VsdD4KIAotCSA8YW50Y2FsbCB0YXJnZXQ9InByb2Nlc3NSZXN1bHQiPgorICAgICA8YW50Y2FsbCB0YXJnZXQ9InByb2Nlc3NSZXN1bHQiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InJlc3VsdCIgdmFsdWU9IiR7cmVzdWx0fSIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImxvZyIgdmFsdWU9IiR7YnVpbGR9LyR7bG9nLmlkfS5vdXRwdXQubG9nIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL3dlYnNlcnZpY2VzL2hlbGxvc2VydmljZS9jb25maWctaW50ZXJmYWNlLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL3dlYnNlcnZpY2VzL2hlbGxvc2VydmljZS9jb25maWctaW50ZXJmYWNlLnhtbAppbmRleCBhOTlkOWMwLi44OTQ3ODlhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci93ZWJzZXJ2aWNlcy9oZWxsb3NlcnZpY2UvY29uZmlnLWludGVyZmFjZS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvd2Vic2VydmljZXMvaGVsbG9zZXJ2aWNlL2NvbmZpZy1pbnRlcmZhY2UueG1sCkBAIC0xOSwxMSArMTksMTEgQEAKIAogPGNvbmZpZ3VyYXRpb24KICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheC1ycGMvcmkvY29uZmlnIj4KLSAgPHNlcnZpY2UgCi0gICAgICBuYW1lPSJTYXlIZWxsb1NlcnZpY2UiIAotICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJ1cm46RGVwbG95bWVudFdlYlNlcnZpY2VUZXN0IiAKLSAgICAgIHR5cGVOYW1lc3BhY2U9InVybjpEZXBsb3ltZW50V2ViU2VydmljZVRlc3QiIAorICA8c2VydmljZQorICAgICAgbmFtZT0iU2F5SGVsbG9TZXJ2aWNlIgorICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJ1cm46RGVwbG95bWVudFdlYlNlcnZpY2VUZXN0IgorICAgICAgdHlwZU5hbWVzcGFjZT0idXJuOkRlcGxveW1lbnRXZWJTZXJ2aWNlVGVzdCIKICAgICAgIHBhY2thZ2VOYW1lPSJoZWxsb3NlcnZpY2UiPgogICAgICAgPGludGVyZmFjZSBuYW1lPSJoZWxsb3NlcnZpY2UuU2F5SGVsbG8iLz4KICAgPC9zZXJ2aWNlPgotPC9jb25maWd1cmF0aW9uPiAKKzwvY29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL3dlYnNlcnZpY2VzL2hlbGxvc2VydmljZS9oZWxsb3NlcnZpY2UvU2F5SGVsbG8uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL3dlYnNlcnZpY2VzL2hlbGxvc2VydmljZS9oZWxsb3NlcnZpY2UvU2F5SGVsbG8uamF2YQppbmRleCAwNzc0ZDYxLi5kMjUzMzViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci93ZWJzZXJ2aWNlcy9oZWxsb3NlcnZpY2UvaGVsbG9zZXJ2aWNlL1NheUhlbGxvLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvd2Vic2VydmljZXMvaGVsbG9zZXJ2aWNlL2hlbGxvc2VydmljZS9TYXlIZWxsby5qYXZhCkBAIC0xNSw3ICsxNSw3IEBACiAgKi8KIAogIHBhY2thZ2UgaGVsbG9zZXJ2aWNlOwotIAorCiBpbXBvcnQgamF2YS5ybWkuUmVtb3RlOwogaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIApAQCAtMjMsMTEgKzIzLDExIEBACiAgICogVGhpcyBpcyBhIG1pbmltdW0gV2ViU2VydmljZSBpbnRlcmZhY2UKICAgKi8KICAgcHVibGljIGludGVyZmFjZSBTYXlIZWxsbyAgZXh0ZW5kcyBSZW1vdGUgewotICAJCi0gIAkvKgotICAJICogQHJldHVybiBhIGhlbGxvIHN0cmluZwotICAJICovCi0gIAkgcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgbmFtZSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKLSAgCisKKyAgICAgIC8qCisgICAgICAgKiBAcmV0dXJuIGEgaGVsbG8gc3RyaW5nCisgICAgICAgKi8KKyAgICAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyBuYW1lKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworCiAgIH0KLSAgCQorCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci93ZWJzZXJ2aWNlcy9oZWxsb3NlcnZpY2UvaGVsbG9zZXJ2aWNlL1NheUhlbGxvSW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvd2Vic2VydmljZXMvaGVsbG9zZXJ2aWNlL2hlbGxvc2VydmljZS9TYXlIZWxsb0ltcGwuamF2YQppbmRleCAxM2E2YWM0Li4wNWJiMWQ1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci93ZWJzZXJ2aWNlcy9oZWxsb3NlcnZpY2UvaGVsbG9zZXJ2aWNlL1NheUhlbGxvSW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL3dlYnNlcnZpY2VzL2hlbGxvc2VydmljZS9oZWxsb3NlcnZpY2UvU2F5SGVsbG9JbXBsLmphdmEKQEAgLTIwLDkgKzIwLDkgQEAKIAogcHVibGljIGNsYXNzIFNheUhlbGxvSW1wbCBpbXBsZW1lbnRzIFNheUhlbGxvIHsKIAotCXB1YmxpYyBTdHJpbmcgbWVzc2FnZSA9IkJvbmpvdXIgIjsKKyAgICBwdWJsaWMgU3RyaW5nIG1lc3NhZ2UgPSJCb25qb3VyICI7CiAKLQlwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyBzKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLQkJcmV0dXJuIG1lc3NhZ2UgKyBzOwotCX0KLX0gCisgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgcykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CisgICAgICAgIHJldHVybiBtZXNzYWdlICsgczsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci93ZWJzZXJ2aWNlcy9oZWxsb3NlcnZpY2Uvc3RhdGljc3R1YmNsaWVudC9TYXlIZWxsb0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93YXIvd2Vic2VydmljZXMvaGVsbG9zZXJ2aWNlL3N0YXRpY3N0dWJjbGllbnQvU2F5SGVsbG9DbGllbnQuamF2YQppbmRleCA4MDEwMDY0Li5kNjFmNzhlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dhci93ZWJzZXJ2aWNlcy9oZWxsb3NlcnZpY2Uvc3RhdGljc3R1YmNsaWVudC9TYXlIZWxsb0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2FyL3dlYnNlcnZpY2VzL2hlbGxvc2VydmljZS9zdGF0aWNzdHViY2xpZW50L1NheUhlbGxvQ2xpZW50LmphdmEKQEAgLTI2LDI4ICsyNiwyOCBAQAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVuZHBvaW50IGFkZHJlc3MgPSAiICsgYXJnc1swXSk7Ci0JYm9vbGVhbiB0ZXN0UG9zaXRpdmUgPSAoQm9vbGVhbi52YWx1ZU9mKGFyZ3NbMV0pKS5ib29sZWFuVmFsdWUoKTsKKyAgICBib29sZWFuIHRlc3RQb3NpdGl2ZSA9IChCb29sZWFuLnZhbHVlT2YoYXJnc1sxXSkpLmJvb2xlYW5WYWx1ZSgpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgU3R1YiBzdHViID0gY3JlYXRlUHJveHkoKTsKICAgICAgICAgICAgIHN0dWIuX3NldFByb3BlcnR5CiAgICAgICAgICAgICAgIChqYXZheC54bWwucnBjLlN0dWIuRU5EUE9JTlRfQUREUkVTU19QUk9QRVJUWSwKLSAgICAgICAgICAgICAgIGFyZ3NbMF0pOyAKLQkJCVNheUhlbGxvIGhlbGxvID0gKFNheUhlbGxvKXN0dWI7CisgICAgICAgICAgICAgICBhcmdzWzBdKTsKKyAgICAgICAgICAgIFNheUhlbGxvIGhlbGxvID0gKFNheUhlbGxvKXN0dWI7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaGVsbG8uc2F5SGVsbG8oIkplcm9tZSAhIikpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkgICAgaWYodGVzdFBvc2l0aXZlKSB7Ci0JCWV4LnByaW50U3RhY2tUcmFjZSgpOwotCQlTeXN0ZW0uZXhpdCgtMSk7Ci0JICAgIH0gZWxzZSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiRXhjZXB0aW9uIHJlY2QgYXMgZXhwZWN0ZWQiKTsKLQkgICAgfQotCX0KLQlTeXN0ZW0uZXhpdCgwKTsKLSAgICB9ICAgIAorICAgICAgICBpZih0ZXN0UG9zaXRpdmUpIHsKKyAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIFN5c3RlbS5leGl0KC0xKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGNlcHRpb24gcmVjZCBhcyBleHBlY3RlZCIpOworICAgICAgICB9CisgICAgfQorICAgIFN5c3RlbS5leGl0KDApOworICAgIH0KIAogICAgIHByaXZhdGUgc3RhdGljIFN0dWIgY3JlYXRlUHJveHkoKSB7CiAgICAgICAgIC8vIE5vdGU6IE15SGVsbG9TZXJ2aWNlX0ltcGwgaXMgaW1wbGVtZW50YXRpb24tc3BlY2lmaWMuCi0gICAgICAgIHJldHVybiAKKyAgICAgICAgcmV0dXJuCiAgICAgICAgIChTdHViKSAobmV3IFNheUhlbGxvU2VydmljZV9JbXBsKCkuZ2V0U2F5SGVsbG9Qb3J0KCkpOwogICAgIH0KLX0gCit9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dlYnNlcnZpY2VzL2Fubm90YXRpb25zLWNvbW1vbi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9kZXBsb3ltZW50L3dlYnNlcnZpY2VzL2Fubm90YXRpb25zLWNvbW1vbi54bWwKaW5kZXggNmMxNzc0YS4uYzMxOTI4YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93ZWJzZXJ2aWNlcy9hbm5vdGF0aW9ucy1jb21tb24ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2Vic2VydmljZXMvYW5ub3RhdGlvbnMtY29tbW9uLnhtbApAQCAtMTcsMTYgKzE3LDE2IEBACiAtLT4KIAogPHByb3BlcnR5IGVudmlyb25tZW50PSJlbnYiLz4KLTxwcm9wZXJ0eSBmaWxlPSIke2Vudi5BUFNfSE9NRX0vY29uZmlnLnByb3BlcnRpZXMiLz4gICAKKzxwcm9wZXJ0eSBmaWxlPSIke2Vudi5BUFNfSE9NRX0vY29uZmlnLnByb3BlcnRpZXMiLz4KIAogPHRhcmdldCBuYW1lPSJ0ZXN0LWFsbCIgZGVwZW5kcz0iY2xlYW4iPgogICAgIDxiYXNlbmFtZSBmaWxlPSIke3NyYy1uYW1lfSIgcHJvcGVydHk9InNlcnZlciIgc3VmZml4PSIuamF2YSIvPgogICAgIDxkaXJuYW1lIGZpbGU9IiR7c3JjLW5hbWV9IiBwcm9wZXJ0eT0iZGlyZWN0b3J5Ii8+CiAgICAgPGVjaG8gbWVzc2FnZT0iU3RhcnRpbmcgVGVzdCAke2RpcmVjdG9yeX0iLz4KLSAgICA8YmFzZW5hbWUgZmlsZT0iJHtkaXJlY3Rvcnl9IiBwcm9wZXJ0eT0icGtnLW5hbWUiLz4gCisgICAgPGJhc2VuYW1lIGZpbGU9IiR7ZGlyZWN0b3J5fSIgcHJvcGVydHk9InBrZy1uYW1lIi8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3kiPgotCTxwYXJhbSBuYW1lPSJwa2ctbmFtZSIgdmFsdWU9IiR7cGtnLW5hbWV9Ii8+Ci0gICAgPC9hbnRjYWxsPiAKKyAgICA8cGFyYW0gbmFtZT0icGtnLW5hbWUiIHZhbHVlPSIke3BrZy1uYW1lfSIvPgorICAgIDwvYW50Y2FsbD4KICAgICA8Y29uZGl0aW9uIHByb3BlcnR5PSJkZXBsb3lfc3VjY2VlZGVkIj4KICAgICAgICAgPGF2YWlsYWJsZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9hdXRvZGVwbG95LyR7c2VydmVyfS5qYXJfZGVwbG95ZWQiLz4KICAgICA8L2NvbmRpdGlvbj4KQEAgLTQxLDExICs0MSwxMSBAQAogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0iY2xlYW4iPgotICAgIDxlY2hvIG1lc3NhZ2U9IkNsZWFuIGZyb20gJHthbnQuZmlsZX0iLz4gCisgICAgPGVjaG8gbWVzc2FnZT0iQ2xlYW4gZnJvbSAke2FudC5maWxlfSIvPgogICAgIDxkZWxldGUgZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMiLz4KLSAgICA8ZGVsZXRlIGRpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9hcmNoaXZlIi8+ICAgIAotICAgIDxta2RpciBkaXI9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3NlcyIvPiAgIAotICAgIDxta2RpciBkaXI9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvYXJjaGl2ZSIvPiAgIAorICAgIDxkZWxldGUgZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2FyY2hpdmUiLz4KKyAgICA8bWtkaXIgZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMiLz4KKyAgICA8bWtkaXIgZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2FyY2hpdmUiLz4KIDwvdGFyZ2V0PgogIDxwYXRoIGlkPSJjbGFzc3BhdGgiPgogCkBAIC02NywxNCArNjcsMTQgQEAKIAogPHRhcmdldCBuYW1lPSJ0ZXN0LWNvbXBpbGUiPgogICAgIDxlY2hvIG1lc3NhZ2U9IkNvbXBpbGluZyBpbnRvICR7cGtnLW5hbWV9LyR7c2VydmVyfS5jbGFzcyIvPgotICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3NlcyIgCisgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzIgogICAgICAgICBpbmNsdWRlcz0iJHtwa2ctbmFtZX0vKi5qYXZhIj4KICA8Y2xhc3NwYXRoIHJlZmlkPSJjbGFzc3BhdGgiLz4KIDwvamF2YWM+CiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJjb21waWxlLWNsaWVudCI+Ci0gICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzIiAKKyAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMiCiAgICAgICAgIGluY2x1ZGVzPSIke2NsaWVudC1zcmMtbmFtZX0iPgogICAgICAgICA8Y2xhc3NwYXRoIHJlZmlkPSJjbGFzc3BhdGgiLz4KICAgICA8L2phdmFjPgpAQCAtODMsMTUgKzgzLDE1IEBACiA8dGFyZ2V0IG5hbWU9ImJ1aWxkIj4KICAgICA8YmFzZW5hbWUgZmlsZT0iJHtzcmMtbmFtZX0iIHByb3BlcnR5PSJzZXJ2ZXIiIHN1ZmZpeD0iLmphdmEiLz4KICAgICA8ZGlybmFtZSBmaWxlPSIke3NyYy1uYW1lfSIgcHJvcGVydHk9ImRpcmVjdG9yeSIvPgotICAgIDxiYXNlbmFtZSBmaWxlPSIke2RpcmVjdG9yeX0iIHByb3BlcnR5PSJwa2ctbmFtZSIvPiAKKyAgICA8YmFzZW5hbWUgZmlsZT0iJHtkaXJlY3Rvcnl9IiBwcm9wZXJ0eT0icGtnLW5hbWUiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InRlc3QtY29tcGlsZSIvPgogICAgIDxlY2hvIG1lc3NhZ2U9IkJ1aWxkaW5nIHdpdGggcGFja2FnZSAke3BrZy1uYW1lfSIvPgogICAgIDxqYXIgZGVzdGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2F1dG9kZXBsb3kvJHtzZXJ2ZXJ9LmphciIKICAgICAgICAgYmFzZWRpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzIgogICAgICAgICBpbmNsdWRlcz0iJHtwa2ctbmFtZX0vKioiPgotCTxtZXRhaW5mIGRpcj0iJHtwa2ctbmFtZX0iCi0JCWluY2x1ZGVzPSIqLnhtbCAqKi8qLndzZGwgKiovKi54c2QiLz4KLSAgICA8L2phcj4gICAgICAgICAgICAKKyAgICA8bWV0YWluZiBkaXI9IiR7cGtnLW5hbWV9IgorICAgICAgICBpbmNsdWRlcz0iKi54bWwgKiovKi53c2RsICoqLyoueHNkIi8+CisgICAgPC9qYXI+CiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJkZXBsb3kiPgpAQCAtMTA4LDcgKzEwOCw3IEBACiA8dGFyZ2V0IG5hbWU9InVuZGVwbG95Ij4KICAgICA8YmFzZW5hbWUgZmlsZT0iJHtzcmMtbmFtZX0iIHByb3BlcnR5PSJzZXJ2ZXIiIHN1ZmZpeD0iLmphdmEiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImF1dG91bmRlcGxveS1maWxlIj4KLQk8cGFyYW0gbmFtZT0iZmlsZW5hbWUiIHZhbHVlPSIke3NlcnZlcn0uamFyIi8+CisgICAgPHBhcmFtIG5hbWU9ImZpbGVuYW1lIiB2YWx1ZT0iJHtzZXJ2ZXJ9LmphciIvPgogICAgIDwvYW50Y2FsbD4KICAgICA8Y29uZGl0aW9uIHByb3BlcnR5PSJ1bmRlcGxveV9zdWNjZWVkZWQiPgogICAgICAgICA8YXZhaWxhYmxlIGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2F1dG9kZXBsb3kvJHtzZXJ2ZXJ9Lmphcl91bmRlcGxveWVkIi8+CkBAIC0xMzEsNyArMTMxLDcgQEAKIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9InJlcG9ydCIgZGVwZW5kcz0iaW50ZXJuYWwtcmVwb3J0LXN1Y2Nlc3MsIGludGVybmFsLXJlcG9ydC1mYWlsdXJlIj4KLSAgICA8ZGVsZXRlIGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2F1dG9kZXBsb3kvJHtjbGFzcy1uYW1lfV8qIi8+ICAgIAorICAgIDxkZWxldGUgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvYXV0b2RlcGxveS8ke2NsYXNzLW5hbWV9XyoiLz4KIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9InJ1biI+CkBAIC0xNTUsNyArMTU1LDcgQEAKIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImNvbmZpZ3VyYWJsZS13c2RsLWltcG9ydCI+Ci0gICAgPGVjaG8gbWVzc2FnZT0id3NpbXBvcnRpbmcgJHtwcm90b2NvbH06Ly8ke2hvc3QtbmFtZX06JHtob3N0LXBvcnR9LyR7c2VydmVyfVNlcnZpY2UvJHtwb3J0fT9XU0RMOyBzcGVjaWFsIGFyZ3MgYXJlICR7d3NpbXBvcnQtc3BlY2lhbC1hcmdzfSIvPiAgCisgICAgPGVjaG8gbWVzc2FnZT0id3NpbXBvcnRpbmcgJHtwcm90b2NvbH06Ly8ke2hvc3QtbmFtZX06JHtob3N0LXBvcnR9LyR7c2VydmVyfVNlcnZpY2UvJHtwb3J0fT9XU0RMOyBzcGVjaWFsIGFyZ3MgYXJlICR7d3NpbXBvcnQtc3BlY2lhbC1hcmdzfSIvPgogICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL3dzaW1wb3J0Ij4KICAgICAgICAgPGFyZyBsaW5lPSIta2VlcCAtZCAke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMgJHtwcm90b2NvbH06Ly8ke2hvc3QtbmFtZX06JHtob3N0LXBvcnR9LyR7c2VydmVyfVNlcnZpY2UvJHtwb3J0fT9XU0RMIi8+CiAgICAgPC9leGVjPgpAQCAtMTY1LDEwICsxNjUsMTAgQEAKICAgICA8IS0tYmFzZW5hbWUgZmlsZT0iJHtzZXJ2ZXJ9IiBwcm9wZXJ0eT0icG9ydCIgc3VmZml4PSJFSkIiLy0tPgogICAgIDxiYXNlbmFtZSBmaWxlPSIke3NlcnZlcn0iIHByb3BlcnR5PSJwb3J0Ii8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3c2RsLWltcG9ydCI+Ci0JPHBhcmFtIG5hbWU9InNlcnZlciIgdmFsdWU9IiR7c2VydmVyfSIvPgotCTxwYXJhbSBuYW1lPSJwb3J0IiB2YWx1ZT0iJHtwb3J0fSIvPgorICAgIDxwYXJhbSBuYW1lPSJzZXJ2ZXIiIHZhbHVlPSIke3NlcnZlcn0iLz4KKyAgICA8cGFyYW0gbmFtZT0icG9ydCIgdmFsdWU9IiR7cG9ydH0iLz4KICAgICA8L2FudGNhbGw+Ci0gICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNsaWVudCIvPiAgIAorICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jbGllbnQiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuamFyLWNsaWVudC11dGlscyIvPgogPC90YXJnZXQ+CiAKQEAgLTE3OSwxMSArMTc5LDExIEBACiA8dGFyZ2V0IG5hbWU9ImludGVybmFsLXJ1biIgaWY9ImRlcGxveV9zdWNjZWVkZWQiPgogICAgIDxiYXNlbmFtZSBmaWxlPSIke2NsaWVudC1zcmMtbmFtZX0iIHByb3BlcnR5PSJjbGllbnQiIHN1ZmZpeD0iLmphdmEiLz4KICAgICA8ZGlybmFtZSBmaWxlPSIke2NsaWVudC1zcmMtbmFtZX0iIHByb3BlcnR5PSJjbGllbnQtZGlyZWN0b3J5Ii8+Ci0gICAgPGJhc2VuYW1lIGZpbGU9IiR7Y2xpZW50LWRpcmVjdG9yeX0iIHByb3BlcnR5PSJjbGllbnQtcGtnLW5hbWUiLz4gCisgICAgPGJhc2VuYW1lIGZpbGU9IiR7Y2xpZW50LWRpcmVjdG9yeX0iIHByb3BlcnR5PSJjbGllbnQtcGtnLW5hbWUiLz4KICAgICA8cHJvcGVydHkgbmFtZT0iY2xpZW50LWNsYXNzLW5hbWUiIHZhbHVlPSIke2NsaWVudC1wa2ctbmFtZX0vJHtjbGllbnR9LmNsYXNzIi8+CiAgICAgPGVjaG8gbWVzc2FnZT0iUnVubmluZyBhcHBjbGllbnQgd2l0aCAke2NsaWVudC1wa2ctbmFtZX0uJHtjbGllbnR9ICR7YXBwLWNsaWVudC1wYXJhbWV0ZXJzfSAke2FwcC1jbGllbnQtZXh0cmEtcGFyYW1ldGVyc30iLz4KICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi9hcHBjbGllbnQiIGRpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzIj4KLSAgICAgICAgPGFyZyBsaW5lPSIke2NsaWVudC1wa2ctbmFtZX0uJHtjbGllbnR9ICR7YXBwLWNsaWVudC1wYXJhbWV0ZXJzfSAke2FwcC1jbGllbnQtZXh0cmEtcGFyYW1ldGVyc30iLz4gICAgCisgICAgICAgIDxhcmcgbGluZT0iJHtjbGllbnQtcGtnLW5hbWV9LiR7Y2xpZW50fSAke2FwcC1jbGllbnQtcGFyYW1ldGVyc30gJHthcHAtY2xpZW50LWV4dHJhLXBhcmFtZXRlcnN9Ii8+CiAgICAgPC9leGVjPgogPC90YXJnZXQ+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2Vic2VydmljZXMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93ZWJzZXJ2aWNlcy9idWlsZC54bWwKaW5kZXggYjkxYWQ4YS4uZTY2MzQwNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93ZWJzZXJ2aWNlcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93ZWJzZXJ2aWNlcy9idWlsZC54bWwKQEAgLTIzLDExICsyMywxMSBAQAogCiA8cHJvamVjdCBuYW1lPSJ3ZWJzZXJ2aWNlcyIgZGVmYXVsdD0iYWxsIiBiYXNlZGlyPSIuIj4KIAotCSZjb21tb25CdWlsZDsKKyAgICAmY29tbW9uQnVpbGQ7CiAKLQk8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIj4KLQkJPGFudCBkaXI9Im5vaW5mIiB0YXJnZXQ9ImFsbCI+Ci0JCQk8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9ub2luZiIvPgotCQk8L2FudD4KLQk8L3RhcmdldD4KKyAgICA8dGFyZ2V0IG5hbWU9InByaXZhdGUtYWxsIj4KKyAgICAgICAgPGFudCBkaXI9Im5vaW5mIiB0YXJnZXQ9ImFsbCI+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQiIHZhbHVlPSIke2J1aWxkfS9ub2luZiIvPgorICAgICAgICA8L2FudD4KKyAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2Vic2VydmljZXMvbm9pbmYvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93ZWJzZXJ2aWNlcy9ub2luZi9idWlsZC54bWwKaW5kZXggMzRmMzEwYS4uMWM1MDIxZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93ZWJzZXJ2aWNlcy9ub2luZi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93ZWJzZXJ2aWNlcy9ub2luZi9idWlsZC54bWwKQEAgLTM0LDYgKzM0LDYgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0icmVwb3J0LWZhaWx1cmUiPgogICAgICAgICAgICAgPGVjaG8gbWVzc2FnZT0iVGVzdCBmYWlsZWQiLz4KLSAgICA8L3RhcmdldD4gICAJCi0gICAgCisgICAgPC90YXJnZXQ+CisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2RlcGxveW1lbnQvd2Vic2VydmljZXMvbm9pbmYvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93ZWJzZXJ2aWNlcy9ub2luZi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMjNkY2NmNy4uYWI4ZTJmNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93ZWJzZXJ2aWNlcy9ub2luZi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZGVwbG95bWVudC93ZWJzZXJ2aWNlcy9ub2luZi9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTMyLDEwICszMiwxMCBAQAogICAgICAgICBzdGF0aWMgSGVsbG9JbXBsU2VydmljZSBzZXJ2aWNlOwogCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQkgICAgc3RhdC5hZGREZXNjcmlwdGlvbigid2Vic2VydmljZXMtZWpiLW5vaW50Zi1hbm5vdGF0aW9uIik7CisgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIndlYnNlcnZpY2VzLWVqYi1ub2ludGYtYW5ub3RhdGlvbiIpOwogICAgICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKICAgICAgICAgICAgIGNsaWVudC5kb1Rlc3QoYXJncyk7Ci0JICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3ZWJzZXJ2aWNlcy1lamItbm9pbnRmLWFubm90YXRpb24iKTsKKyAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoIndlYnNlcnZpY2VzLWVqYi1ub2ludGYtYW5ub3RhdGlvbiIpOwogICAgICAgIH0KIAogICAgICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmdbXSBhcmdzKSB7CkBAIC00MywxMSArNDMsMTEgQEAKICAgICAgICAgICAgICAgICBIZWxsb0ltcGwgcG9ydCA9IHNlcnZpY2UuZ2V0SGVsbG9JbXBsUG9ydCgpOwogICAgICAgICAgICAgICAgIGZvciAoaW50IGk9MDtpPDEwO2krKykgewogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcmV0ID0gcG9ydC5zYXlIZWxsbygiQXBwc2VydmVyIFRlc3RlciAhIik7Ci0JCSAgICBpZihyZXQuaW5kZXhPZigiV2ViU3ZjVGVzdC1IZWxsbyIpID09IC0xKSB7CisgICAgICAgICAgICBpZihyZXQuaW5kZXhPZigiV2ViU3ZjVGVzdC1IZWxsbyIpID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiU2ltcGxlLUFubm90YXRpb24iLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCQkgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmV0KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYi1ub2ludGYtYW5ub3RhdGlvbiIsIHN0YXQuUEFTUyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYWxsb3dlZG1ldGhvZHMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2FsbG93ZWRtZXRob2RzL2J1aWxkLnhtbAppbmRleCBkOTQ0MjM0Li5lMTUwZWY5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYWxsb3dlZG1ldGhvZHMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9hbGxvd2VkbWV0aG9kcy9idWlsZC54bWwKQEAgLTQ3LDExICs0NywxMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+Ci0JCVVzYWdlOgotCQkJYW50IGN0eGNoZWNrIChFeGVjdXRlcyB0aGUgZWpiLWFsbG93ZWRtZXRob2RzIGN0eGNoZWNrIHRlc3QpCi0JCQlhbnQgcmVtb3ZlIChFeGVjdXRlcyB0aGUgZWpiLWFsbG93ZWRtZXRob2RzIHJlbW92ZSB0ZXN0KQotCQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamIgYWxsb3dlZG1ldGhvZHMgdGVzdHMpCi0JPC9lY2hvPgorICAgIDxlY2hvPgorICAgICAgICBVc2FnZToKKyAgICAgICAgICAgIGFudCBjdHhjaGVjayAoRXhlY3V0ZXMgdGhlIGVqYi1hbGxvd2VkbWV0aG9kcyBjdHhjaGVjayB0ZXN0KQorICAgICAgICAgICAgYW50IHJlbW92ZSAoRXhlY3V0ZXMgdGhlIGVqYi1hbGxvd2VkbWV0aG9kcyByZW1vdmUgdGVzdCkKKyAgICAgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZWpiIGFsbG93ZWRtZXRob2RzIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9hbGxvd2VkbWV0aG9kcy9jdHhjaGVjay9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2FsbG93ZWRtZXRob2RzL2N0eGNoZWNrL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMmZlMmY2NC4uYzc0NTdiNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2FsbG93ZWRtZXRob2RzL2N0eGNoZWNrL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2FsbG93ZWRtZXRob2RzL2N0eGNoZWNrL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIxICsxNSwyMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWFsbG93ZWRtZXRob2RzLWN0eGNoZWNrIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYWxsb3dlZG1ldGhvZHMvY3R4Y2hlY2svYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2FsbG93ZWRtZXRob2RzL2N0eGNoZWNrL2J1aWxkLnhtbAppbmRleCA0OTU2NTAxLi5jNjY2MmI3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYWxsb3dlZG1ldGhvZHMvY3R4Y2hlY2svYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9hbGxvd2VkbWV0aG9kcy9jdHhjaGVjay9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDEzICs0NiwxMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudCouY2xhc3MsKiovRHJpdmVyKi5jbGFzcywqKi9IZXJlTG9jYWwqLmNsYXNzLCAqKi9Mb2NhbEVudGl0eS5jbGFzcywgTG9jYWxFbnRpdHlIb21lLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLWVqYi1zcWwtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgpAQCAtNjMsMTQgKzYzLDE0IEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYWxsb3dlZG1ldGhvZHMvY3R4Y2hlY2svY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2FsbG93ZWRtZXRob2RzL2N0eGNoZWNrL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA4OTI4YzcwLi5kM2E2YmVlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYWxsb3dlZG1ldGhvZHMvY3R4Y2hlY2svY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9hbGxvd2VkbWV0aG9kcy9jdHhjaGVjay9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTM3LDExICszNywxMSBAQAogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiZWpiLWFsbG93ZWRtZXRob2RzLWN0eGNoZWNrIik7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKICAgICAgICAgbG9jYWxTbHNiR2V0RUpCT2JqZWN0KCk7CiAgICAgICAgIGxvY2FsU2xzYkdldEVKQkxvY2FsT2JqZWN0KCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYWxsb3dlZG1ldGhvZHMvY3R4Y2hlY2svZWpiL0RyaXZlckJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9hbGxvd2VkbWV0aG9kcy9jdHhjaGVjay9lamIvRHJpdmVyQmVhbi5qYXZhCmluZGV4IDI1MmFiZDUuLjkyOWNmY2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9hbGxvd2VkbWV0aG9kcy9jdHhjaGVjay9lamIvRHJpdmVyQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9hbGxvd2VkbWV0aG9kcy9jdHhjaGVjay9lamIvRHJpdmVyQmVhbi5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIGltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CiBpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7Ci1pbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOyAKK2ltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkJlYW47CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQ7CiBpbXBvcnQgamFrYXJ0YS5lamIuRUpCRXhjZXB0aW9uOwpAQCAtNjAsNyArNjAsNyBAQAogICAgICAgICAgICAgdGhyb3cgaXNlOwogICAgICAgICB9CiAgICAgfQotICAgICAgICAKKwogICAgIHB1YmxpYyB2b2lkIGxvY2FsU2xzYkdldEVKQkxvY2FsT2JqZWN0KCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwpAQCAtMTM1LDcgKzEzNSw3IEBACiAgICAgICAgICAgICB0aHJvdyBpc2U7CiAgICAgICAgIH0KICAgICB9Ci0gICAgICAgIAorCiAgICAgcHVibGljIHZvaWQgbG9jYWxFbnRpdHlHZXRFSkJMb2NhbE9iamVjdCgpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKQEAgLTE5NSw1ICsxOTUsNSBAQAogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkge30KIAogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHt9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9hbGxvd2VkbWV0aG9kcy9jdHhjaGVjay9lamIvSGVyZUxvY2FsQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2FsbG93ZWRtZXRob2RzL2N0eGNoZWNrL2VqYi9IZXJlTG9jYWxCZWFuLmphdmEKaW5kZXggNDY5NmMxNC4uNThhNmJhNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2FsbG93ZWRtZXRob2RzL2N0eGNoZWNrL2VqYi9IZXJlTG9jYWxCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2FsbG93ZWRtZXRob2RzL2N0eGNoZWNrL2VqYi9IZXJlTG9jYWxCZWFuLmphdmEKQEAgLTE4LDcgKzE4LDcgQEAKIAogaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKIGltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKLWltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247IAoraW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQmVhbjsKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dDsKIGltcG9ydCBqYWthcnRhLmVqYi5FSkJFeGNlcHRpb247CkBAIC0zMywxMSArMzMsMTEgQEAKICAgICBwdWJsaWMgSGVyZUxvY2FsQmVhbigpIHt9CiAKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlcmVMb2NhbEJlYW46OmVqYkNyZWF0ZSAhISIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVyZUxvY2FsQmVhbjo6ZWpiQ3JlYXRlICEhIik7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgc2MpIHsKLQl0aGlzLnNjID0gc2M7CisgICAgdGhpcy5zYyA9IHNjOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvU29tZXRoaW5nSGVyZSgpIHsKQEAgLTQ5LDcgKzQ5LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBhY2Nlc3NFSkJMb2NhbE9iamVjdCgpIHsKLSAgICAgICAgc2MuZ2V0RUpCTG9jYWxPYmplY3QoKTsgICAgICAKKyAgICAgICAgc2MuZ2V0RUpCTG9jYWxPYmplY3QoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBhY2Nlc3NFSkJIb21lKCkgewpAQCAtNTcsNyArNTcsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGFjY2Vzc0VKQkxvY2FsSG9tZSgpIHsKLSAgICAgICAgc2MuZ2V0RUpCTG9jYWxIb21lKCk7ICAgICAgCisgICAgICAgIHNjLmdldEVKQkxvY2FsSG9tZSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYWxsb3dlZG1ldGhvZHMvY3R4Y2hlY2svZWpiL0xvY2FsRW50aXR5LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYWxsb3dlZG1ldGhvZHMvY3R4Y2hlY2svZWpiL0xvY2FsRW50aXR5LmphdmEKaW5kZXggZjA1MjZmMC4uNzMxODI1YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2FsbG93ZWRtZXRob2RzL2N0eGNoZWNrL2VqYi9Mb2NhbEVudGl0eS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9hbGxvd2VkbWV0aG9kcy9jdHhjaGVjay9lamIvTG9jYWxFbnRpdHkuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogcHVibGljIGludGVyZmFjZSBMb2NhbEVudGl0eQogICAgIGV4dGVuZHMgRUpCTG9jYWxPYmplY3QKIHsKLSAKKwogICAvKioKICAgICogUmV0dXJucyB0aGUgTmFtZSBvZiBhIHN0dWRlbnQuCiAgICAqIGV4Y2VwdGlvbiBSZW1vdGVFeGNlcHRpb24KQEAgLTM5LDcgKzM5LDcgQEAKICAgIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpOwogCiAgICBwdWJsaWMgdm9pZCBsb2NhbEVudGl0eUdldEVKQk9iamVjdCgpOwotICAgICAgICAgIAorCiAgICBwdWJsaWMgdm9pZCBsb2NhbEVudGl0eUdldEVKQkxvY2FsT2JqZWN0KCk7CiAKICAgIHB1YmxpYyB2b2lkIGxvY2FsRW50aXR5R2V0RUpCSG9tZSgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2FsbG93ZWRtZXRob2RzL2N0eGNoZWNrL2VqYi9Mb2NhbEVudGl0eUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9hbGxvd2VkbWV0aG9kcy9jdHhjaGVjay9lamIvTG9jYWxFbnRpdHlCZWFuLmphdmEKaW5kZXggYjAxYzlhNi4uOGVkYWJmYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2FsbG93ZWRtZXRob2RzL2N0eGNoZWNrL2VqYi9Mb2NhbEVudGl0eUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYWxsb3dlZG1ldGhvZHMvY3R4Y2hlY2svZWpiL0xvY2FsRW50aXR5QmVhbi5qYXZhCkBAIC05OSw3ICs5OSw3IEBACiAgICAgICAgIGNvdXJzZUlkcyA9IG5ldyBBcnJheUxpc3QoKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgICAgICBkYXRhU291cmNlID0gCisgICAgICAgICAgICBkYXRhU291cmNlID0KICAgICAgICAgICAgICAgICAoRGF0YVNvdXJjZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2pkYmMvZGV2dGVzdERTIik7CiAgICAgICAgICAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CkBAIC0xMTIsNyArMTEyLDcgQEAKICAgICBwdWJsaWMgdm9pZCBsb2NhbEVudGl0eUdldEVKQk9iamVjdCgpIHsKICAgICAgICAgY29udGV4dC5nZXRFSkJPYmplY3QoKTsKICAgICB9Ci0gICAgICAgICAgCisKICAgICBwdWJsaWMgdm9pZCBsb2NhbEVudGl0eUdldEVKQkxvY2FsT2JqZWN0KCkgewogICAgICAgICBjb250ZXh0LmdldEVKQkxvY2FsT2JqZWN0KCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2FsbG93ZWRtZXRob2RzL2N0eGNoZWNrL2VqYi9Mb2NhbEVudGl0eUhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9hbGxvd2VkbWV0aG9kcy9jdHhjaGVjay9lamIvTG9jYWxFbnRpdHlIb21lLmphdmEKaW5kZXggYzczYTIzYS4uNzJhOTQyMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2FsbG93ZWRtZXRob2RzL2N0eGNoZWNrL2VqYi9Mb2NhbEVudGl0eUhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYWxsb3dlZG1ldGhvZHMvY3R4Y2hlY2svZWpiL0xvY2FsRW50aXR5SG9tZS5qYXZhCkBAIC0zOCw3ICszOCw3IEBACiAgICAgICogQGV4Y2VwdGlvbiB0aHJvd3MgRmluZGVyRXhjZXB0aW9uIGFuZCBSZW1vdGVFeGNlcHRpb24uCiAgICAgICoKICAgICAgKi8KLSAKLSAgICBwdWJsaWMgTG9jYWxFbnRpdHkgZmluZEJ5UHJpbWFyeUtleShTdHJpbmcgc3R1ZGVudElkKSAKKworICAgIHB1YmxpYyBMb2NhbEVudGl0eSBmaW5kQnlQcmltYXJ5S2V5KFN0cmluZyBzdHVkZW50SWQpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYWxsb3dlZG1ldGhvZHMvY3R4Y2hlY2svZWpiL0xvY2FsU3R1ZGVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2FsbG93ZWRtZXRob2RzL2N0eGNoZWNrL2VqYi9Mb2NhbFN0dWRlbnQuamF2YQppbmRleCBlYTNlMjhlLi4yN2FmY2M4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYWxsb3dlZG1ldGhvZHMvY3R4Y2hlY2svZWpiL0xvY2FsU3R1ZGVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9hbGxvd2VkbWV0aG9kcy9jdHhjaGVjay9lamIvTG9jYWxTdHVkZW50LmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKIHB1YmxpYyBpbnRlcmZhY2UgTG9jYWxTdHVkZW50CiAgICAgZXh0ZW5kcyBFSkJMb2NhbE9iamVjdAogewotIAorCiAgIC8qKgogICAgKiBSZXR1cm5zIHRoZSBOYW1lIG9mIGEgc3R1ZGVudC4KICAgICogZXhjZXB0aW9uIFJlbW90ZUV4Y2VwdGlvbgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2FsbG93ZWRtZXRob2RzL2N0eGNoZWNrL2VqYi9UaGVyZVJlbW90ZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9hbGxvd2VkbWV0aG9kcy9jdHhjaGVjay9lamIvVGhlcmVSZW1vdGVCZWFuLmphdmEKaW5kZXggODU3NTJmNi4uMGEyMzhmOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2FsbG93ZWRtZXRob2RzL2N0eGNoZWNrL2VqYi9UaGVyZVJlbW90ZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYWxsb3dlZG1ldGhvZHMvY3R4Y2hlY2svZWpiL1RoZXJlUmVtb3RlQmVhbi5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIGltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CiBpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7Ci1pbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOyAKK2ltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkJlYW47CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQ7CiBpbXBvcnQgamFrYXJ0YS5lamIuRUpCRXhjZXB0aW9uOwpAQCAtMzIsMTEgKzMyLDExIEBACiAgICAgcHVibGljIFRoZXJlUmVtb3RlQmVhbigpIHt9CiAKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFRoZXJlUmVtb3RlQmVhbjo6ZWpiQ3JlYXRlICEhIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBUaGVyZVJlbW90ZUJlYW46OmVqYkNyZWF0ZSAhISIpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7Ci0JdGhpcy5zYyA9IHNjOworICAgIHRoaXMuc2MgPSBzYzsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1NvbWV0aGluZ0hlcmUoKSB7CkBAIC00NCw3ICs0NCw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgYWNjZXNzRUpCT2JqZWN0KCkgewotICAgICAgICBzYy5nZXRFSkJPYmplY3QoKTsgICAgICAKKyAgICAgICAgc2MuZ2V0RUpCT2JqZWN0KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgYWNjZXNzRUpCTG9jYWxPYmplY3QoKSB7CkBAIC01Miw3ICs1Miw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgYWNjZXNzRUpCSG9tZSgpIHsKLSAgICAgICAgc2MuZ2V0RUpCSG9tZSgpOyAgICAgIAorICAgICAgICBzYy5nZXRFSkJIb21lKCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgYWNjZXNzRUpCTG9jYWxIb21lKCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2FsbG93ZWRtZXRob2RzL3JlbW92ZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2FsbG93ZWRtZXRob2RzL3JlbW92ZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDVmNDY1MjQuLmYzNDY4ZjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9hbGxvd2VkbWV0aG9kcy9yZW1vdmUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYWxsb3dlZG1ldGhvZHMvcmVtb3ZlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIxICsxNSwyMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWFsbG93ZWRtZXRob2RzLXJlbW92ZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2FsbG93ZWRtZXRob2RzL3JlbW92ZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYWxsb3dlZG1ldGhvZHMvcmVtb3ZlL2J1aWxkLnhtbAppbmRleCAzNTA1OTM4Li43NTE1OGNiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYWxsb3dlZG1ldGhvZHMvcmVtb3ZlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYWxsb3dlZG1ldGhvZHMvcmVtb3ZlL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTMgKzQ2LDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50Ki5jbGFzcywqKi9Ecml2ZXIqLmNsYXNzLCoqL0hlcmVMb2NhbCouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYwLDEwICs2MCwxMCBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYWxsb3dlZG1ldGhvZHMvcmVtb3ZlL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9hbGxvd2VkbWV0aG9kcy9yZW1vdmUvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDY4OGYwYjIuLjk1YTg2MTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9hbGxvd2VkbWV0aG9kcy9yZW1vdmUvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9hbGxvd2VkbWV0aG9kcy9yZW1vdmUvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CkBAIC0zNywxMSArMzcsMTEgQEAKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImVqYi1hbGxvd2VkbWV0aG9kcy1yZW1vdmUiKTsKLSAgICB9ICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2FsbG93ZWRtZXRob2RzL3JlbW92ZS9lamIvRHJpdmVyQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2FsbG93ZWRtZXRob2RzL3JlbW92ZS9lamIvRHJpdmVyQmVhbi5qYXZhCmluZGV4IDc3NGFjY2MuLjcxOGVlZTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9hbGxvd2VkbWV0aG9kcy9yZW1vdmUvZWpiL0RyaXZlckJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYWxsb3dlZG1ldGhvZHMvcmVtb3ZlL2VqYi9Ecml2ZXJCZWFuLmphdmEKQEAgLTE4LDcgKzE4LDcgQEAKIAogaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKIGltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKLWltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247IAoraW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQmVhbjsKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dDsKIGltcG9ydCBqYWthcnRhLmVqYi5FSkJFeGNlcHRpb247CkBAIC02MywxMSArNjMsMTEgQEAKIAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgICAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24ge30KIAogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkge30KIAogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHt9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9hbGxvd2VkbWV0aG9kcy9yZW1vdmUvZWpiL0hlcmVMb2NhbEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9hbGxvd2VkbWV0aG9kcy9yZW1vdmUvZWpiL0hlcmVMb2NhbEJlYW4uamF2YQppbmRleCBmZDdjMTc2Li4yZGVkMTRlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYWxsb3dlZG1ldGhvZHMvcmVtb3ZlL2VqYi9IZXJlTG9jYWxCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2FsbG93ZWRtZXRob2RzL3JlbW92ZS9lamIvSGVyZUxvY2FsQmVhbi5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIGltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CiBpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7Ci1pbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOyAKK2ltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkJlYW47CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQ7CiBpbXBvcnQgamFrYXJ0YS5lamIuRUpCRXhjZXB0aW9uOwpAQCAtMzMsMjEgKzMzLDIxIEBACiAgICAgcHVibGljIEhlcmVMb2NhbEJlYW4oKSB7fQogCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZXJlTG9jYWxCZWFuOjplamJDcmVhdGUgISEiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlcmVMb2NhbEJlYW46OmVqYkNyZWF0ZSAhISIpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7Ci0JdGhpcy5zYyA9IHNjOworICAgIHRoaXMuc2MgPSBzYzsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB0ZXN0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVyZUxvY2FsQmVhbjo6dGVzdCAhISIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVyZUxvY2FsQmVhbjo6dGVzdCAhISIpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24KICAgICB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZXJlTG9jYWxCZWFuOjplamJSZW1vdmUgISEiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlcmVMb2NhbEJlYW46OmVqYlJlbW92ZSAhISIpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkge30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9idWlsZC54bWwKaW5kZXggNWZhMjVmMS4uYTc4YjM4MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9idWlsZC54bWwKQEAgLTI5LDE1ICsyOSwxNSBAQAogICAgICZyZXBvcnRpbmc7CiAKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCI+Ci0gICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZmluZGVyIi8+ICAgICAgCisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZmluZGVyIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVhZG9ubHkiLz4KLSAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzaW1wbGUiLz4gICAgICAKLSAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzaW1wbGVfbm9wYWNrYWdlIi8+ICAgICAgIAorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InNpbXBsZSIvPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InNpbXBsZV9ub3BhY2thZ2UiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ0d29sZXZlbCIvPgotICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InR4dGVzdHMiLz4gICAgICAgCi0gICAgICAgIDxhbnRjYWxsIHRhcmdldD0idGhyZWFkX3Bvb2xfaWQiLz4gICAgICAKKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ0eHRlc3RzIi8+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idGhyZWFkX3Bvb2xfaWQiLz4KIDwhLS0gVGhlc2UgdGVzdHMgbmVlZCB0byBiZSBmaXhlZAotICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImhhbmRsZSIvPiAgICAgICAKKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJoYW5kbGUiLz4KIC0tPgogICAgIDwvdGFyZ2V0PgogCkBAIC05MSwxOSArOTEsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPgotCQlVc2FnZToKKyAgICA8ZWNobz4KKyAgICAgICAgVXNhZ2U6CiAgICAgICAgICAgICAgICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYi1ibXAgdGVzdHMpCiAKICAgICAgICAgICAgICAgICAgICAgIGFudCBmaW5kZXIKLSAgICAgICAgICAgICAgICAgICAgIGFudCBoYW5kbGUgCi0gICAgICAgICAgICAgICAgICAgICBhbnQgcmVhZG9ubHkgCi0gICAgICAgICAgICAgICAgICAgICBhbnQgc2ltcGxlIAorICAgICAgICAgICAgICAgICAgICAgYW50IGhhbmRsZQorICAgICAgICAgICAgICAgICAgICAgYW50IHJlYWRvbmx5CisgICAgICAgICAgICAgICAgICAgICBhbnQgc2ltcGxlCiAgICAgICAgICAgICAgICAgICAgICBhbnQgc2ltcGxlX25vcGFja2FnZQotICAgICAgICAgICAgICAgICAgICAgYW50IHR3b2xldmVsIAotICAgICAgICAgICAgICAgICAgICAgYW50IHR4dGVzdHMgCi0gICAgICAgICAgICAgICAgICAgICBhbnQgdGhyZWFkX3Bvb2xfaWQgCi0JCQkKLQk8L2VjaG8+CisgICAgICAgICAgICAgICAgICAgICBhbnQgdHdvbGV2ZWwKKyAgICAgICAgICAgICAgICAgICAgIGFudCB0eHRlc3RzCisgICAgICAgICAgICAgICAgICAgICBhbnQgdGhyZWFkX3Bvb2xfaWQKKworICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvZmluZGVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2ZpbmRlci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDMwY2Q5MzYuLjUwMThjMWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvZmluZGVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9maW5kZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTggKzE1LDE4IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItYm1wLWZpbmRlciIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9maW5kZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9maW5kZXIvYnVpbGQueG1sCmluZGV4IDc1Y2Y2NzQuLmQ2YTNmMGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvZmluZGVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2ZpbmRlci9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ4LDEzICs0OCwxMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqLypTdHVkZW50Ki5jbGFzcywqKi8qRW5yb2xsZXIqLmNsYXNzLCoqLypDb3Vyc2UqLmNsYXNzIiAvPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqL0NvdXJzZS5jbGFzcywqKi9FbnJvbGxlci5jbGFzcywqKi9TdHVkZW50LmNsYXNzLCoqLypIb21lKi5jbGFzcywqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLWVqYi1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CkBAIC02OCwxOCArNjgsMTggQEAKICAgICAgIC0tPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtZWpiLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICA8L2FudGNhbGw+CiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvZmluZGVyL2NsaWVudC9GaW5kZXJDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvZmluZGVyL2NsaWVudC9GaW5kZXJDbGllbnQuamF2YQppbmRleCBlZWUwNmRhLi5kMzdhZjE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2ZpbmRlci9jbGllbnQvRmluZGVyQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9maW5kZXIvY2xpZW50L0ZpbmRlckNsaWVudC5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci5TaW1wbGVSZXBvcnRlckFkYXB0ZXI7CiAKIC8qKgotICogQSBzaW1wbGUgamF2YSBjbGllbnQgd2lsbDogCisgKiBBIHNpbXBsZSBqYXZhIGNsaWVudCB3aWxsOgogICogPHVsPgogICogPGxpPkxvY2F0ZXMgdGhlIGhvbWUgaW50ZXJmYWNlIG9mIHRoZSBlbnRlcnByaXNlIGJlYW4KICAqIDxsaT5HZXRzIGEgcmVmZXJlbmNlIHRvIHRoZSByZW1vdGUgaW50ZXJmYWNlCkBAIC0zNiwxMSArMzYsMTEgQEAKICAgICBwcml2YXRlIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeyAKLSAgICAgICAgRmluZGVyQ2xpZW50IGNsaWVudCA9IG5ldyBGaW5kZXJDbGllbnQoKTsgCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBGaW5kZXJDbGllbnQgY2xpZW50ID0gbmV3IEZpbmRlckNsaWVudCgpOwogCiAgICAgICAgIC8vIHJ1biB0aGUgdGVzdHMKLSAgICAgICAgY2xpZW50LnJ1blRlc3RDbGllbnQoKTsgICAKKyAgICAgICAgY2xpZW50LnJ1blRlc3RDbGllbnQoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBydW5UZXN0Q2xpZW50KCkgewpAQCAtNjAsMTIgKzYwLDEyIEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlQ291cnNlIik7Ci0gICAgICAgICAgICBDb3Vyc2VIb21lIGNIb21lID0gCi0gICAgICAgICAgICAgICAgKENvdXJzZUhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIAorICAgICAgICAgICAgQ291cnNlSG9tZSBjSG9tZSA9CisgICAgICAgICAgICAgICAgKENvdXJzZUhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3Vyc2VIb21lLmNsYXNzKTsKICAgICAgICAgICAgIG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVTdHVkZW50Iik7Ci0gICAgICAgICAgICBTdHVkZW50SG9tZSBzSG9tZSA9IAotICAgICAgICAgICAgICAgIChTdHVkZW50SG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwgCisgICAgICAgICAgICBTdHVkZW50SG9tZSBzSG9tZSA9CisgICAgICAgICAgICAgICAgKFN0dWRlbnRIb21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0dWRlbnRIb21lLmNsYXNzKTsKIAogICAgICAgICAgICAgQ291cnNlIGludHJvID0gY0hvbWUuZmluZEJ5UHJpbWFyeUtleSgiNzc3Iik7CkBAIC03NiwxNCArNzYsMTQgQEAKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiQ2F1Z2h0IGFuIHVuZXhwZWN0ZWQgZXhjZXB0aW9uISIpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLSAgICB9IAorICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCB0ZXN0MDIoKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlQ291cnNlIik7Ci0gICAgICAgICAgICBDb3Vyc2VIb21lIGNIb21lID0gCi0gICAgICAgICAgICAgICAgKENvdXJzZUhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIAorICAgICAgICAgICAgQ291cnNlSG9tZSBjSG9tZSA9CisgICAgICAgICAgICAgICAgKENvdXJzZUhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3Vyc2VIb21lLmNsYXNzKTsKIAogICAgICAgICAgICAgQXJyYXlMaXN0IGxpc3QgPSBjSG9tZS5maW5kQWxsQ291cnNlcygpOwpAQCAtOTQsNiArOTQsNiBAQAogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJDYXVnaHQgYW4gdW5leHBlY3RlZCBleGNlcHRpb24hIik7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotICAgIH0gCisgICAgfQogCi19IAorfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9maW5kZXIvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvZmluZGVyL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggODI1ZjU3Ny4uZmVmMzcyYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9maW5kZXIvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2ZpbmRlci9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC0zMzAsNyArMzMwLDcgQEAKICAgICAgICAgPG1ldGhvZC1wYXJhbXMgLz4KICAgICAgIDwvbWV0aG9kPgogCi0gIDwhLS0gbWV0aG9kcyBmb3IgU3R1ZGVudCBFSkIgLS0+ICAgICAgCisgIDwhLS0gbWV0aG9kcyBmb3IgU3R1ZGVudCBFSkIgLS0+CiAKICAgICAgIDxtZXRob2Q+CiAgICAgICAgIDxlamItbmFtZT5GaW5kZXJTdHVkZW50QmVhbjwvZWpiLW5hbWU+CkBAIC02NzEsNiArNjcxLDYgQEAKICAgICAgIDx0cmFucy1hdHRyaWJ1dGU+Tm90U3VwcG9ydGVkPC90cmFucy1hdHRyaWJ1dGU+CiAgICAgPC9jb250YWluZXItdHJhbnNhY3Rpb24+CiAgIDwvYXNzZW1ibHktZGVzY3JpcHRvcj4KLSAgICAgIAorCiA8L2VqYi1qYXI+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvZmluZGVyL2VqYi9Db3Vyc2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvZmluZGVyL2VqYi9Db3Vyc2UuamF2YQppbmRleCAzYzNiNzM5Li4zNGJjMjA0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2ZpbmRlci9lamIvQ291cnNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9maW5kZXIvZWpiL0NvdXJzZS5qYXZhCkBAIC0yMiwyNCArMjIsMjQgQEAKIAogCiBwdWJsaWMgaW50ZXJmYWNlIENvdXJzZSBleHRlbmRzIEVKQk9iamVjdCB7Ci0gCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIGFuIGFycmF5bGlzdCBvZiBTdHVkZW50SWRzIHRha2luZyB0aGUgY291cnNlLgotICAgICAqIEBleGNlcHRpb24gUmVtb3RlRXhjZXB0aW9uIAorICAgICAqIEBleGNlcHRpb24gUmVtb3RlRXhjZXB0aW9uCiAgICAgICovCiAgICAgcHVibGljIEFycmF5TGlzdCBnZXRTdHVkZW50SWRzKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGNvdXJzZS4KLSAgICAgKiBAZXhjZXB0aW9uIFJlbW90ZUV4Y2VwdGlvbiAKLSAgICAgKiAKKyAgICAgKiBAZXhjZXB0aW9uIFJlbW90ZUV4Y2VwdGlvbgorICAgICAqCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIC8qKgogICAgICAqIFNldHMgdGhlIG5hbWUgb2YgdGhlIGNvdXJzZS4KLSAgICAgKiBAZXhjZXB0aW9uIFJlbW90ZUV4Y2VwdGlvbiAKLSAgICAgKiAKKyAgICAgKiBAZXhjZXB0aW9uIFJlbW90ZUV4Y2VwdGlvbgorICAgICAqCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9maW5kZXIvZWpiL0NvdXJzZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvZmluZGVyL2VqYi9Db3Vyc2VCZWFuLmphdmEKaW5kZXggZGFmMzRjNi4uYzY0ODFlZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9maW5kZXIvZWpiL0NvdXJzZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2ZpbmRlci9lamIvQ291cnNlQmVhbi5qYXZhCkBAIC04OSw3ICs4OSw3IEBACiAgICAgICAgICAgICAgICAgKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9qZGJjL2JtcC1maW5kZXJEQiIpOwogICAgICAgICAgICAgQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBPYmplY3Qgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL0Vucm9sbGVyIik7Ci0gICAgICAgICAgICBlbnJvbGxlckhvbWUgPSAKKyAgICAgICAgICAgIGVucm9sbGVySG9tZSA9CiAgICAgICAgICAgICAgICAgKEVucm9sbGVySG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5yb2xsZXJIb21lLmNsYXNzKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CkBAIC0yMzUsNyArMjM1LDcgQEAKICAgICAgICAgY29uLmNsb3NlKCk7CiAgICAgfQogCi0gICAgcHJpdmF0ZSBBcnJheUxpc3Qgc2VsZWN0QWxsQ291cnNlcygpIAorICAgIHByaXZhdGUgQXJyYXlMaXN0IHNlbGVjdEFsbENvdXJzZXMoKQogICAgICAgICB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKIAogICAgICAgICBTdHJpbmcgc2VsZWN0U3RhdGVtZW50ID0KQEAgLTI0Myw3ICsyNDMsNyBAQAogICAgICAgICAgICAgImZyb20gRmluZGVyRW5yb2xsbWVudCAiOwogCiAgICAgICAgIENvbm5lY3Rpb24gY29uID0gIGRhdGFTb3VyY2UuZ2V0Q29ubmVjdGlvbigpOwotICAgICAgICBTdGF0ZW1lbnQgc3RtdCA9IAorICAgICAgICBTdGF0ZW1lbnQgc3RtdCA9CiAgICAgICAgICAgICBjb24uY3JlYXRlU3RhdGVtZW50KCk7CiAKICAgICAgICAgUmVzdWx0U2V0IHJzID0gc3RtdC5leGVjdXRlUXVlcnkoc2VsZWN0U3RhdGVtZW50KTsKQEAgLTI3Niw3ICsyNzYsNyBAQAogCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAvLyBJbiBCTVAsIGNhbid0IGdldCB0aW1lciBzZXJ2aWNlIG9yIGNhbGwgdGltZXIgc2VydmljZSBtZXRob2RzCi0gICAgICAgICAgICBUaW1lclNlcnZpY2UgdHMgPSBjb250ZXh0LmdldFRpbWVyU2VydmljZSgpOyAKKyAgICAgICAgICAgIFRpbWVyU2VydmljZSB0cyA9IGNvbnRleHQuZ2V0VGltZXJTZXJ2aWNlKCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJzaG91bGQgaGF2ZSBnb3R0ZW4gdGltZXIgc2VydmljZSBtZXRob2QgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgaWxsZWdhbCBzdGF0ZSBleGNlcHRpb24gIik7CiAgICAgICAgIH0gY2F0Y2goSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlzZSkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9maW5kZXIvZWpiL0NvdXJzZUhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvZmluZGVyL2VqYi9Db3Vyc2VIb21lLmphdmEKaW5kZXggMWU1YjcxMi4uYjU4ZjJhYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9maW5kZXIvZWpiL0NvdXJzZUhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2ZpbmRlci9lamIvQ291cnNlSG9tZS5qYXZhCkBAIC0zMCwxMyArMzAsMTMgQEAKICAgICAgKi8KICAgICBwdWJsaWMgQ291cnNlIGNyZWF0ZShTdHJpbmcgY291cnNlSWQsIFN0cmluZyBuYW1lKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uLCBDcmVhdGVFeGNlcHRpb247Ci0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIGEgcmVmZXJlbmNlIHRvIHRoZSByZW1vdGUgaW50ZXJmYWNlIHRvIHRoZSBDb3Vyc2VCZWFuIG9iamVjdCBieSBQcmltYXJ5IEtleS4KICAgICAgKiBAZXhjZXB0aW9uIHRocm93cyBGaW5kZXJFeGNlcHRpb24gYW5kIFJlbW90ZUV4Y2VwdGlvbi4KICAgICAgKgogICAgICAqLwotICAgIHB1YmxpYyBDb3Vyc2UgZmluZEJ5UHJpbWFyeUtleShTdHJpbmcgY291cnNlSWQpIAorICAgIHB1YmxpYyBDb3Vyc2UgZmluZEJ5UHJpbWFyeUtleShTdHJpbmcgY291cnNlSWQpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBqYXZhLnV0aWwuQXJyYXlMaXN0IGZpbmRBbGxDb3Vyc2VzKCkKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvZmluZGVyL2VqYi9FbnJvbGxlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9maW5kZXIvZWpiL0Vucm9sbGVyLmphdmEKaW5kZXggMjZiZDAzMS4uYzE0ZDk2NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9maW5kZXIvZWpiL0Vucm9sbGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9maW5kZXIvZWpiL0Vucm9sbGVyLmphdmEKQEAgLTIxLDcgKzIxLDcgQEAKIGltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiAKIHB1YmxpYyBpbnRlcmZhY2UgRW5yb2xsZXIgZXh0ZW5kcyBFSkJPYmplY3QgewotIAorCiAgLyoqCiAgICogRW5yb2xscyBhIFN0dWRlbnQgaW4gYSBjb3Vyc2UKICAgKiBAcGFyYW0gc3R1ZGVudElkIHByaW1hcnkga2V5IG9mIHRoZSBzdHVkZW50IG9iamVjdApAQCAtNDAsNyArNDAsNyBAQAogICAgcHVibGljIHZvaWQgdW5FbnJvbGwoU3RyaW5nIHN0dWRlbnRJZCwgU3RyaW5nIGNvdXJzZUlkKQogICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKICAvKioKLSAgKiBEZWxldGVzIGEgU3R1ZGVudCAKKyAgKiBEZWxldGVzIGEgU3R1ZGVudAogICAqIEBwYXJhbSBzdHVkZW50SWQgcHJpbWFyeSBrZXkgb2YgdGhlIHN0dWRlbnQgb2JqZWN0CiAgICogQGV4Y2VwdGlvbiBSZW1vdGVFeGNlcHRpb24KICAgKi8KQEAgLTQ5LDcgKzQ5LDcgQEAKICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAvKioKLSAgKiBEZWxldGVzIGEgQ291cnNlIAorICAqIERlbGV0ZXMgYSBDb3Vyc2UKICAgKiBAcGFyYW0gY291cnNlSWQgcHJpbWFyeSBrZXkgb2YgdGhlIGNvdXJzZSBvYmplY3QKICAgKiBAZXhjZXB0aW9uIFJlbW90ZUV4Y2VwdGlvbgogICAqLwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9maW5kZXIvZWpiL0Vucm9sbGVyQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9maW5kZXIvZWpiL0Vucm9sbGVyQmVhbi5qYXZhCmluZGV4IDQ0MjkyZDcuLjQ5MzJkNzkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvZmluZGVyL2VqYi9FbnJvbGxlckJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2ZpbmRlci9lamIvRW5yb2xsZXJCZWFuLmphdmEKQEAgLTE2LDcgKzE2LDcgQEAKIAogcGFja2FnZSBjb20uc3VuLnMxYXNkZXYuZWpiLmJtcC5maW5kZXIuZWpiOwogCi1pbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOyAKK2ltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgamFrYXJ0YS5lamIuKjsKIGltcG9ydCBqYXZhLnNxbC4qOwogaW1wb3J0IGphdmF4LnNxbC4qOwpAQCAtMjYsNyArMjYsNyBAQAogaW1wb3J0IGphdmEuaW8uKjsKIAogcHVibGljIGNsYXNzIEVucm9sbGVyQmVhbiBpbXBsZW1lbnRzIFNlc3Npb25CZWFuIHsKLSAKKwogICAgIHByaXZhdGUgQ29ubmVjdGlvbiBjb247CiAgICAgcHJpdmF0ZSBTdHJpbmcgZGJOYW1lID0gImphdmE6Y29tcC9lbnYvamRiYy9ibXAtZmluZGVyREIiOwogICAgIHByaXZhdGUgU2Vzc2lvbkNvbnRleHQgY29udGV4dDsKQEAgLTYxLDcgKzYxLDcgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBEZWxldGVzIGEgU3R1ZGVudCAKKyAgICAgKiBEZWxldGVzIGEgU3R1ZGVudAogICAgICAqIEBwYXJhbSBzdHVkZW50SWQgcHJpbWFyeSBrZXkgb2YgdGhlIHN0dWRlbnQgb2JqZWN0CiAgICAgICogQGV4Y2VwdGlvbiBSZW1vdGVFeGNlcHRpb24KICAgICAgKi8KQEAgLTc0LDcgKzc0LDcgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBEZWxldGVzIGEgQ291cnNlIAorICAgICAqIERlbGV0ZXMgYSBDb3Vyc2UKICAgICAgKiBAcGFyYW0gY291cnNlSWQgcHJpbWFyeSBrZXkgb2YgdGhlIGNvdXJzZSBvYmplY3QKICAgICAgKiBAZXhjZXB0aW9uIFJlbW90ZUV4Y2VwdGlvbgogICAgICAqLwpAQCAtMTY0LDcgKzE2NCw3IEBACiAKICAgICAgICAgU3RyaW5nIGluc2VydFN0YXRlbWVudCA9CiAgICAgICAgICAgICAiaW5zZXJ0IGludG8gRmluZGVyRW5yb2xsbWVudCB2YWx1ZXMgKCA/ICwgPyApIjsKLSAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcFN0bXQgPSAKKyAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcFN0bXQgPQogICAgICAgICAgICAgY29uLnByZXBhcmVTdGF0ZW1lbnQoaW5zZXJ0U3RhdGVtZW50KTsKIAogICAgICAgICBwcmVwU3RtdC5zZXRTdHJpbmcoMSwgc3R1ZGVudElkKTsKQEAgLTE3NCw3ICsxNzQsNyBAQAogICAgICAgICBwcmVwU3RtdC5jbG9zZSgpOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBkZWxldGVFbnRyeShTdHJpbmcgc3R1ZGVudElkLCBTdHJpbmcgY291cnNlSWQpIAorICAgIHByaXZhdGUgdm9pZCBkZWxldGVFbnRyeShTdHJpbmcgc3R1ZGVudElkLCBTdHJpbmcgY291cnNlSWQpCiAgICAgICAgIHRocm93cyBTUUxFeGNlcHRpb24gewogCiAgICAgICAgIFN0cmluZyBkZWxldGVTdGF0ZW1lbnQgPQpAQCAtMjE3LDEzICsyMTcsMTMgQEAKICAgICAgICAgcHJlcFN0bXQuY2xvc2UoKTsKICAgICB9CiAKLSAgICBwcml2YXRlIEFycmF5TGlzdCBzZWxlY3RTdHVkZW50KFN0cmluZyBjb3Vyc2VJZCkgCisgICAgcHJpdmF0ZSBBcnJheUxpc3Qgc2VsZWN0U3R1ZGVudChTdHJpbmcgY291cnNlSWQpCiAgICAgICAgIHRocm93cyBTUUxFeGNlcHRpb24gewogCiAgICAgICAgIFN0cmluZyBzZWxlY3RTdGF0ZW1lbnQgPQogICAgICAgICAgICAgInNlbGVjdCBzdHVkZW50aWQgIiArCiAgICAgICAgICAgICAiZnJvbSBGaW5kZXJFbnJvbGxtZW50IHdoZXJlIGNvdXJzZWlkID0gPyAiOwotICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwcmVwU3RtdCA9IAorICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwcmVwU3RtdCA9CiAgICAgICAgICAgICBjb24ucHJlcGFyZVN0YXRlbWVudChzZWxlY3RTdGF0ZW1lbnQpOwogCiAgICAgICAgIHByZXBTdG10LnNldFN0cmluZygxLCBjb3Vyc2VJZCk7CkBAIC0yMzksMTMgKzIzOSwxMyBAQAogICAgICAgICByZXR1cm4gYTsKICAgICB9CiAKLSAgICBwcml2YXRlIEFycmF5TGlzdCBzZWxlY3RDb3Vyc2UoU3RyaW5nIHN0dWRlbnRJZCkgCisgICAgcHJpdmF0ZSBBcnJheUxpc3Qgc2VsZWN0Q291cnNlKFN0cmluZyBzdHVkZW50SWQpCiAgICAgICAgIHRocm93cyBTUUxFeGNlcHRpb24gewogCiAgICAgICAgIFN0cmluZyBzZWxlY3RTdGF0ZW1lbnQgPQogICAgICAgICAgICAgInNlbGVjdCBjb3Vyc2VpZCAiICsKICAgICAgICAgICAgICJmcm9tIEZpbmRlckVucm9sbG1lbnQgd2hlcmUgc3R1ZGVudGlkID0gPyAiOwotICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwcmVwU3RtdCA9IAorICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwcmVwU3RtdCA9CiAgICAgICAgICAgICBjb24ucHJlcGFyZVN0YXRlbWVudChzZWxlY3RTdGF0ZW1lbnQpOwogCiAgICAgICAgIHByZXBTdG10LnNldFN0cmluZygxLCBzdHVkZW50SWQpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9maW5kZXIvZWpiL1N0dWRlbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvZmluZGVyL2VqYi9TdHVkZW50LmphdmEKaW5kZXggYzBiNDE1My4uZDdmMzEyYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9maW5kZXIvZWpiL1N0dWRlbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2ZpbmRlci9lamIvU3R1ZGVudC5qYXZhCkBAIC0yMiw5ICsyMiw5IEBACiAKIAogcHVibGljIGludGVyZmFjZSBTdHVkZW50IGV4dGVuZHMgRUpCT2JqZWN0IHsKLSAKKwogICAvKioKLSAgICogUmV0dXJucyB0aGUgQ291cnNlSWRzIHRoYXQgYSBzdHVkZW50IGlzIGVucm9sbGVkIGluLiAKKyAgICogUmV0dXJucyB0aGUgQ291cnNlSWRzIHRoYXQgYSBzdHVkZW50IGlzIGVucm9sbGVkIGluLgogICAgKiBAcGFyYW0gc3R1ZGVudElkIHByaW1hcnkga2V5IG9mIHRoZSBzdHVkZW50IG9iamVjdAogICAgKiBAcGFyYW0gY291cnNlSWQgcHJpbWFyeSBrZXkgb2YgdGhlIGNvdXJzZSBvYmplY3QKICAgICogQGV4Y2VwdGlvbiBSZW1vdGVFeGNlcHRpb24KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvZmluZGVyL2VqYi9TdHVkZW50QmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9maW5kZXIvZWpiL1N0dWRlbnRCZWFuLmphdmEKaW5kZXggMzMxMGQ3Ni4uNGU3MGVjOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9maW5kZXIvZWpiL1N0dWRlbnRCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9maW5kZXIvZWpiL1N0dWRlbnRCZWFuLmphdmEKQEAgLTk4LDcgKzk4LDcgQEAKICAgICAgICAgY291cnNlSWRzID0gbmV3IEFycmF5TGlzdCgpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgICAgIGRhdGFTb3VyY2UgPSAKKyAgICAgICAgICAgIGRhdGFTb3VyY2UgPQogICAgICAgICAgICAgICAgIChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvamRiYy9ibXAtZmluZGVyREIiKTsKICAgICAgICAgICAgIENvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9FbnJvbGxlciIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9maW5kZXIvZWpiL1N0dWRlbnRIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2ZpbmRlci9lamIvU3R1ZGVudEhvbWUuamF2YQppbmRleCA0OTI1YWE5Li44ODRkYTVkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2ZpbmRlci9lamIvU3R1ZGVudEhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2ZpbmRlci9lamIvU3R1ZGVudEhvbWUuamF2YQpAQCAtMzYsNyArMzYsNyBAQAogICAgICAqIEBleGNlcHRpb24gdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiBhbmQgUmVtb3RlRXhjZXB0aW9uLgogICAgICAqCiAgICAgICovCi0gCi0gICAgcHVibGljIFN0dWRlbnQgZmluZEJ5UHJpbWFyeUtleShTdHJpbmcgc3R1ZGVudElkKSAKKworICAgIHB1YmxpYyBTdHVkZW50IGZpbmRCeVByaW1hcnlLZXkoU3RyaW5nIHN0dWRlbnRJZCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9maW5kZXIvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9maW5kZXIvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IDJhODhhMTIuLjMyMDlhYzEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvZmluZGVyL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2ZpbmRlci9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsNDUgKzEsNDUgQEAKLWNyZWF0ZSB0YWJsZSBGaW5kZXJTdHVkZW50IA0KLShzdHVkZW50aWQgdmFyY2hhcigzKSBjb25zdHJhaW50IHBrX0ZpbmRlclN0dWRlbnQgcHJpbWFyeSBrZXkgbm90IG51bGwsICANCi1uYW1lIHZhcmNoYXIoMzYpKTsNCi0NCi1pbnNlcnQgaW50byBGaW5kZXJTdHVkZW50DQotdmFsdWVzICgnMTIzJywgJ1NhbCBKb25lcycpOw0KLWluc2VydCBpbnRvIEZpbmRlclN0dWRlbnQNCi12YWx1ZXMgKCcyMjEnLCAnQWxpY2UgU21pdGgnKTsNCi1pbnNlcnQgaW50byBGaW5kZXJTdHVkZW50DQotdmFsdWVzICgnMzg4JywgJ0VsaXphYmV0aCBXaWxsaXMnKTsNCi1pbnNlcnQgaW50byBGaW5kZXJTdHVkZW50DQotdmFsdWVzICgnNDU2JywgJ0pvZSBTbWl0aCcpOw0KLQ0KLQ0KLWNyZWF0ZSB0YWJsZSBGaW5kZXJDb3Vyc2UgDQotKGNvdXJzZWlkIHZhcmNoYXIoMykgY29uc3RyYWludCBwa19GaW5kZXJDb3Vyc2UgcHJpbWFyeSBrZXkgbm90IG51bGwsICANCi1uYW1lIHZhcmNoYXIoMzYpKTsNCi0NCi1pbnNlcnQgaW50byBGaW5kZXJDb3Vyc2UNCi12YWx1ZXMgKCc5OTknLCAnQWR2YW5jZWQgSmF2YSBQcm9ncmFtbWluZycpOw0KLWluc2VydCBpbnRvIEZpbmRlckNvdXJzZQ0KLXZhbHVlcyAoJzExMScsICdKMkVFIGZvciBTbWFydCBQZW9wbGUnKTsNCi1pbnNlcnQgaW50byBGaW5kZXJDb3Vyc2UNCi12YWx1ZXMgKCczMzMnLCAnWE1MIE1hZGUgRWFzeScpOw0KLWluc2VydCBpbnRvIEZpbmRlckNvdXJzZQ0KLXZhbHVlcyAoJzc3NycsICdBbiBJbnRyb2R1Y3Rpb24gdG8gSmF2YSBQcm9ncmFtbWluZycpOw0KLQ0KLWNyZWF0ZSB0YWJsZSBGaW5kZXJFbnJvbGxtZW50DQotKHN0dWRlbnRpZCB2YXJjaGFyKDMpLCAgDQotY291cnNlaWQgdmFyY2hhcigzKSwgIA0KLWNvbnN0cmFpbnQgZmtfc3R1ZGVudGlkDQotZm9yZWlnbiBrZXkgKHN0dWRlbnRpZCkNCi1yZWZlcmVuY2VzIEZpbmRlclN0dWRlbnQoc3R1ZGVudGlkKSwNCi1jb25zdHJhaW50IGZrX2NvdXJzZWlkDQotZm9yZWlnbiBrZXkgKGNvdXJzZWlkKQ0KLXJlZmVyZW5jZXMgRmluZGVyQ291cnNlKGNvdXJzZWlkKSk7DQotDQotaW5zZXJ0IGludG8gRmluZGVyRW5yb2xsbWVudA0KLXZhbHVlcyAoJzEyMycsICc3NzcnKTsNCi1pbnNlcnQgaW50byBGaW5kZXJFbnJvbGxtZW50DQotdmFsdWVzICgnMjIxJywgJzc3NycpOw0KLWluc2VydCBpbnRvIEZpbmRlckVucm9sbG1lbnQNCi12YWx1ZXMgKCczODgnLCAnNzc3Jyk7DQotaW5zZXJ0IGludG8gRmluZGVyRW5yb2xsbWVudA0KLXZhbHVlcyAoJzQ1NicsICc3NzcnKTsNCitjcmVhdGUgdGFibGUgRmluZGVyU3R1ZGVudAorKHN0dWRlbnRpZCB2YXJjaGFyKDMpIGNvbnN0cmFpbnQgcGtfRmluZGVyU3R1ZGVudCBwcmltYXJ5IGtleSBub3QgbnVsbCwKK25hbWUgdmFyY2hhcigzNikpOworCitpbnNlcnQgaW50byBGaW5kZXJTdHVkZW50Cit2YWx1ZXMgKCcxMjMnLCAnU2FsIEpvbmVzJyk7CitpbnNlcnQgaW50byBGaW5kZXJTdHVkZW50Cit2YWx1ZXMgKCcyMjEnLCAnQWxpY2UgU21pdGgnKTsKK2luc2VydCBpbnRvIEZpbmRlclN0dWRlbnQKK3ZhbHVlcyAoJzM4OCcsICdFbGl6YWJldGggV2lsbGlzJyk7CitpbnNlcnQgaW50byBGaW5kZXJTdHVkZW50Cit2YWx1ZXMgKCc0NTYnLCAnSm9lIFNtaXRoJyk7CisKKworY3JlYXRlIHRhYmxlIEZpbmRlckNvdXJzZQorKGNvdXJzZWlkIHZhcmNoYXIoMykgY29uc3RyYWludCBwa19GaW5kZXJDb3Vyc2UgcHJpbWFyeSBrZXkgbm90IG51bGwsCituYW1lIHZhcmNoYXIoMzYpKTsKKworaW5zZXJ0IGludG8gRmluZGVyQ291cnNlCit2YWx1ZXMgKCc5OTknLCAnQWR2YW5jZWQgSmF2YSBQcm9ncmFtbWluZycpOworaW5zZXJ0IGludG8gRmluZGVyQ291cnNlCit2YWx1ZXMgKCcxMTEnLCAnSjJFRSBmb3IgU21hcnQgUGVvcGxlJyk7CitpbnNlcnQgaW50byBGaW5kZXJDb3Vyc2UKK3ZhbHVlcyAoJzMzMycsICdYTUwgTWFkZSBFYXN5Jyk7CitpbnNlcnQgaW50byBGaW5kZXJDb3Vyc2UKK3ZhbHVlcyAoJzc3NycsICdBbiBJbnRyb2R1Y3Rpb24gdG8gSmF2YSBQcm9ncmFtbWluZycpOworCitjcmVhdGUgdGFibGUgRmluZGVyRW5yb2xsbWVudAorKHN0dWRlbnRpZCB2YXJjaGFyKDMpLAorY291cnNlaWQgdmFyY2hhcigzKSwKK2NvbnN0cmFpbnQgZmtfc3R1ZGVudGlkCitmb3JlaWduIGtleSAoc3R1ZGVudGlkKQorcmVmZXJlbmNlcyBGaW5kZXJTdHVkZW50KHN0dWRlbnRpZCksCitjb25zdHJhaW50IGZrX2NvdXJzZWlkCitmb3JlaWduIGtleSAoY291cnNlaWQpCityZWZlcmVuY2VzIEZpbmRlckNvdXJzZShjb3Vyc2VpZCkpOworCitpbnNlcnQgaW50byBGaW5kZXJFbnJvbGxtZW50Cit2YWx1ZXMgKCcxMjMnLCAnNzc3Jyk7CitpbnNlcnQgaW50byBGaW5kZXJFbnJvbGxtZW50Cit2YWx1ZXMgKCcyMjEnLCAnNzc3Jyk7CitpbnNlcnQgaW50byBGaW5kZXJFbnJvbGxtZW50Cit2YWx1ZXMgKCczODgnLCAnNzc3Jyk7CitpbnNlcnQgaW50byBGaW5kZXJFbnJvbGxtZW50Cit2YWx1ZXMgKCc0NTYnLCAnNzc3Jyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2ZpbmRlci9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9maW5kZXIvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAppbmRleCAxMzZhNTU2Li4zMjZiYjY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2ZpbmRlci9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvZmluZGVyL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEsMyArMSwzIEBACi1kcm9wIHRhYmxlIEZpbmRlckVucm9sbG1lbnQ7DQotZHJvcCB0YWJsZSBGaW5kZXJTdHVkZW50Ow0KLWRyb3AgdGFibGUgRmluZGVyQ291cnNlOw0KK2Ryb3AgdGFibGUgRmluZGVyRW5yb2xsbWVudDsKK2Ryb3AgdGFibGUgRmluZGVyU3R1ZGVudDsKK2Ryb3AgdGFibGUgRmluZGVyQ291cnNlOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9oYW5kbGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9oYW5kbGUvYnVpbGQueG1sCmluZGV4IDAyMzFmYWIuLmIwOTJmYzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvaGFuZGxlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2hhbmRsZS9idWlsZC54bWwKQEAgLTI4LDExICsyOCwxMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+Ci0JCVVzYWdlOgotCQkJYW50IG1peCAoRXhlY3V0ZXMgdGhlIGVqYi1ibS1oYW5kbGUgbWl4IHRlc3RzKQotCQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamItYm1wLWhhbmRsZSB0ZXN0cykKLQk8L2VjaG8+CisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IG1peCAoRXhlY3V0ZXMgdGhlIGVqYi1ibS1oYW5kbGUgbWl4IHRlc3RzKQorICAgICAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamItYm1wLWhhbmRsZSB0ZXN0cykKKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvaGFuZGxlL21peC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9oYW5kbGUvbWl4L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYmUyYjY4MC4uOTZkMDYxYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9oYW5kbGUvbWl4L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9oYW5kbGUvbWl4L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE4ICsxNSwxOCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWJtcC1oYW5kbGUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LW1peCIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tbWl4Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9oYW5kbGUvbWl4L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvaGFuZGxlL21peC9idWlsZC54bWwKaW5kZXggZDY4MGE1NS4uNTk0MGIzZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9oYW5kbGUvbWl4L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2hhbmRsZS9taXgvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OCwxMyArNDgsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qU3R1ZGVudCouY2xhc3MsKiovKkVucm9sbGVyKi5jbGFzcywqKi8qQ291cnNlKi5jbGFzcyIgLz4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi9Db3Vyc2UuY2xhc3MsKiovRW5yb2xsZXIuY2xhc3MsKiovU3R1ZGVudC5jbGFzcywqKi8qSG9tZSouY2xhc3MsKiovKkNsaWVudCouY2xhc3MiIC8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgpAQCAtNjgsMTggKzY4LDE4IEBACiAgICAgICAtLT4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLWVqYi1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgPC9hbnRjYWxsPgogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2hhbmRsZS9taXgvY2xpZW50L0hhbmRsZUNsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9oYW5kbGUvbWl4L2NsaWVudC9IYW5kbGVDbGllbnQuamF2YQppbmRleCBlZTM2ODM1Li5hNDgxYjczIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2hhbmRsZS9taXgvY2xpZW50L0hhbmRsZUNsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvaGFuZGxlL21peC9jbGllbnQvSGFuZGxlQ2xpZW50LmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLlNpbXBsZVJlcG9ydGVyQWRhcHRlcjsKIAogLyoqCi0gKiBBIHNpbXBsZSBqYXZhIGNsaWVudCB3aWxsOiAKKyAqIEEgc2ltcGxlIGphdmEgY2xpZW50IHdpbGw6CiAgKiA8dWw+CiAgKiA8bGk+TG9jYXRlcyB0aGUgaG9tZSBpbnRlcmZhY2Ugb2YgdGhlIGVudGVycHJpc2UgYmVhbgogICogPGxpPkdldHMgYSByZWZlcmVuY2UgdG8gdGhlIHJlbW90ZSBpbnRlcmZhY2UKQEAgLTM2LDExICszNiwxMSBAQAogICAgIHByaXZhdGUgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7IAotICAgICAgICBIYW5kbGVDbGllbnQgY2xpZW50ID0gbmV3IEhhbmRsZUNsaWVudCgpOyAKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIEhhbmRsZUNsaWVudCBjbGllbnQgPSBuZXcgSGFuZGxlQ2xpZW50KCk7CiAKICAgICAgICAgLy8gcnVuIHRoZSB0ZXN0cwotICAgICAgICBjbGllbnQucnVuVGVzdENsaWVudCgpOyAgIAorICAgICAgICBjbGllbnQucnVuVGVzdENsaWVudCgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHJ1blRlc3RDbGllbnQoKSB7CkBAIC01MCwxNSArNTAsMTUgQEAKIAogICAgICAgICAgICAgQ29udGV4dCBpbml0aWFsQ3R4ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBPYmplY3Qgb2JqcmVmID0gaW5pdGlhbEN0eC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZUVucm9sbGVyIik7Ci0gICAgICAgICAgICBFbnJvbGxlckhvbWUgZW5yb2xsZXJIb21lID0gCi0gICAgICAgICAgICAgICAgKEVucm9sbGVySG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwgCisgICAgICAgICAgICBFbnJvbGxlckhvbWUgZW5yb2xsZXJIb21lID0KKyAgICAgICAgICAgICAgICAoRW5yb2xsZXJIb21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnJvbGxlckhvbWUuY2xhc3MpOwogCiAgICAgICAgICAgICB0ZXN0MDIoaW5pdGlhbEN0eCwgZW5yb2xsZXJIb21lKTsKICAgICAgICAgICAgIHRlc3QwMyhpbml0aWFsQ3R4LCBlbnJvbGxlckhvbWUpOwogICAgICAgICAgICAgdGVzdDA0KGluaXRpYWxDdHgsIGVucm9sbGVySG9tZSk7CiAgICAgICAgICAgICB0ZXN0MDUoaW5pdGlhbEN0eCwgZW5yb2xsZXJIb21lKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiSGFuZGxlQ2xpZW50Iik7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGNlcHRpb24gaW4gcnVuVGVzdENsaWVudDogIiArIGV4LnRvU3RyaW5nKCkpOwpAQCAtNzEsOCArNzEsOCBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBPYmplY3Qgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZVN0dWRlbnQiKTsKLSAgICAgICAgICAgIFN0dWRlbnRIb21lIHNIb21lID0gCi0gICAgICAgICAgICAgICAgKFN0dWRlbnRIb21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCAKKyAgICAgICAgICAgIFN0dWRlbnRIb21lIHNIb21lID0KKyAgICAgICAgICAgICAgICAoU3R1ZGVudEhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3R1ZGVudEhvbWUuY2xhc3MpOwogCiAgICAgICAgICAgICBTdHVkZW50IGRlbmlzZSA9IHNIb21lLmNyZWF0ZSgiODIzIiwgIkRlbmlzZSBTbWl0aCIpOwpAQCAtODEsOCArODEsOCBAQAogICAgICAgICAgICAgc0hvbWUuY3JlYXRlKCIzODgiLCAiQSBzbWFydCBwcm9ncmFtbWVyIik7CiAKICAgICAgICAgICAgIG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVDb3Vyc2UiKTsKLSAgICAgICAgICAgIENvdXJzZUhvbWUgY0hvbWUgPSAKLSAgICAgICAgICAgICAgICAoQ291cnNlSG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwgCisgICAgICAgICAgICBDb3Vyc2VIb21lIGNIb21lID0KKyAgICAgICAgICAgICAgICAoQ291cnNlSG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvdXJzZUhvbWUuY2xhc3MpOwogCiAgICAgICAgICAgICBDb3Vyc2UgcG93ZXIgPSBjSG9tZS5jcmVhdGUoIjIyMCIsICJQb3dlciBKMkVFIFByb2dyYW1taW5nIik7CkBAIC05MCw4ICs5MCw4IEBACiAgICAgICAgICAgICBjSG9tZS5jcmVhdGUoIjc3NyIsICJEZXNpZ24gUGF0dGVybnMiKTsKIAogICAgICAgICAgICAgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZUVucm9sbGVyIik7Ci0gICAgICAgICAgICBFbnJvbGxlckhvbWUgZUhvbWUgPSAKLSAgICAgICAgICAgICAgICAoRW5yb2xsZXJIb21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCAKKyAgICAgICAgICAgIEVucm9sbGVySG9tZSBlSG9tZSA9CisgICAgICAgICAgICAgICAgKEVucm9sbGVySG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5yb2xsZXJIb21lLmNsYXNzKTsKIAogICAgICAgICAgICAgRW5yb2xsZXIgZW5yb2xsZXIgPSBlSG9tZS5jcmVhdGUoKTsKQEAgLTExMCw3ICsxMTAsNyBAQAogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjb3Vyc2VJZCArICIgIiArIGNvdXJzZS5nZXROYW1lKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCk7Ci0gCisKICAgICAgICAgICAgIENvdXJzZSBpbnRybyA9IGNIb21lLmZpbmRCeVByaW1hcnlLZXkoIjc3NyIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGludHJvLmdldE5hbWUoKSArICI6Iik7CiAgICAgICAgICAgICBjb3Vyc2VzID0gaW50cm8uZ2V0U3R1ZGVudElkcygpOwpAQCAtMTIwLDE0ICsxMjAsMTQgQEAKICAgICAgICAgICAgICAgICBTdHVkZW50IHN0dWRlbnQgPSBzSG9tZS5maW5kQnlQcmltYXJ5S2V5KHN0dWRlbnRJZCk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHN0dWRlbnRJZCArICIgIiArIHN0dWRlbnQuZ2V0TmFtZSgpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAKKwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIkJtcCBIYW5kbGVDbGllbnQiLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJCbXAgSGFuZGxlQ2xpZW50Iiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiQ2F1Z2h0IGFuIHVuZXhwZWN0ZWQgZXhjZXB0aW9uISIpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLSAgICB9IAorICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCB0ZXN0MDIoQ29udGV4dCBpbml0aWFsQ3R4LCBFbnJvbGxlckhvbWUgZW5yb2xsZXJIb21lKSB7CiAgICAgICAgIHRyeSB7CkBAIC0xODEsNCArMTgxLDQgQEAKIAogICAgIH0KIAotfSAKK30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvaGFuZGxlL21peC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9oYW5kbGUvbWl4L2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggZDkyMjJjZC4uZTY5ZDVkNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9oYW5kbGUvbWl4L2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9oYW5kbGUvbWl4L2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTMyNSw3ICszMjUsNyBAQAogICAgICAgICA8bWV0aG9kLXBhcmFtcyAvPgogICAgICAgPC9tZXRob2Q+CiAKLSAgPCEtLSBtZXRob2RzIGZvciBTdHVkZW50IEVKQiAtLT4gICAgICAKKyAgPCEtLSBtZXRob2RzIGZvciBTdHVkZW50IEVKQiAtLT4KIAogICAgICAgPG1ldGhvZD4KICAgICAgICAgPGVqYi1uYW1lPkhhbmRsZVN0dWRlbnRCZWFuPC9lamItbmFtZT4KQEAgLTY2Niw2ICs2NjYsNiBAQAogICAgICAgPHRyYW5zLWF0dHJpYnV0ZT5Ob3RTdXBwb3J0ZWQ8L3RyYW5zLWF0dHJpYnV0ZT4KICAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgPC9hc3NlbWJseS1kZXNjcmlwdG9yPgotICAgICAgCisKIDwvZWpiLWphcj4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9oYW5kbGUvbWl4L2VqYi9Db3Vyc2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvaGFuZGxlL21peC9lamIvQ291cnNlLmphdmEKaW5kZXggMTkwN2E2NS4uOGRiOTIxNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9oYW5kbGUvbWl4L2VqYi9Db3Vyc2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2hhbmRsZS9taXgvZWpiL0NvdXJzZS5qYXZhCkBAIC0yMiwyNCArMjIsMjQgQEAKIAogCiBwdWJsaWMgaW50ZXJmYWNlIENvdXJzZSBleHRlbmRzIEVKQk9iamVjdCB7Ci0gCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIGFuIGFycmF5bGlzdCBvZiBTdHVkZW50SWRzIHRha2luZyB0aGUgY291cnNlLgotICAgICAqIEBleGNlcHRpb24gUmVtb3RlRXhjZXB0aW9uIAorICAgICAqIEBleGNlcHRpb24gUmVtb3RlRXhjZXB0aW9uCiAgICAgICovCiAgICAgcHVibGljIEFycmF5TGlzdCBnZXRTdHVkZW50SWRzKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGNvdXJzZS4KLSAgICAgKiBAZXhjZXB0aW9uIFJlbW90ZUV4Y2VwdGlvbiAKLSAgICAgKiAKKyAgICAgKiBAZXhjZXB0aW9uIFJlbW90ZUV4Y2VwdGlvbgorICAgICAqCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIC8qKgogICAgICAqIFNldHMgdGhlIG5hbWUgb2YgdGhlIGNvdXJzZS4KLSAgICAgKiBAZXhjZXB0aW9uIFJlbW90ZUV4Y2VwdGlvbiAKLSAgICAgKiAKKyAgICAgKiBAZXhjZXB0aW9uIFJlbW90ZUV4Y2VwdGlvbgorICAgICAqCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9oYW5kbGUvbWl4L2VqYi9Db3Vyc2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2hhbmRsZS9taXgvZWpiL0NvdXJzZUJlYW4uamF2YQppbmRleCAxNjg3ZDY4Li44NmM4YzgxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2hhbmRsZS9taXgvZWpiL0NvdXJzZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2hhbmRsZS9taXgvZWpiL0NvdXJzZUJlYW4uamF2YQpAQCAtMTA1LDcgKzEwNSw3IEBACiAgICAgICAgICAgICAgICAgKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9qZGJjL2JtcC1oYW5kbGUtbWl4REIiKTsKICAgICAgICAgICAgIENvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9FbnJvbGxlciIpOwotICAgICAgICAgICAgZW5yb2xsZXJIb21lID0gCisgICAgICAgICAgICBlbnJvbGxlckhvbWUgPQogICAgICAgICAgICAgICAgIChFbnJvbGxlckhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVucm9sbGVySG9tZS5jbGFzcyk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9oYW5kbGUvbWl4L2VqYi9Db3Vyc2VIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2hhbmRsZS9taXgvZWpiL0NvdXJzZUhvbWUuamF2YQppbmRleCBkMDFjNzk3Li44ZmUyM2ZmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2hhbmRsZS9taXgvZWpiL0NvdXJzZUhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2hhbmRsZS9taXgvZWpiL0NvdXJzZUhvbWUuamF2YQpAQCAtMzAsMTIgKzMwLDEyIEBACiAgICAgICovCiAgICAgcHVibGljIENvdXJzZSBjcmVhdGUoU3RyaW5nIGNvdXJzZUlkLCBTdHJpbmcgbmFtZSkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiwgQ3JlYXRlRXhjZXB0aW9uOwotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyBhIHJlZmVyZW5jZSB0byB0aGUgcmVtb3RlIGludGVyZmFjZSB0byB0aGUgQ291cnNlQmVhbiBvYmplY3QgYnkgUHJpbWFyeSBLZXkuCiAgICAgICogQGV4Y2VwdGlvbiB0aHJvd3MgRmluZGVyRXhjZXB0aW9uIGFuZCBSZW1vdGVFeGNlcHRpb24uCiAgICAgICoKICAgICAgKi8KLSAgICBwdWJsaWMgQ291cnNlIGZpbmRCeVByaW1hcnlLZXkoU3RyaW5nIGNvdXJzZUlkKSAKKyAgICBwdWJsaWMgQ291cnNlIGZpbmRCeVByaW1hcnlLZXkoU3RyaW5nIGNvdXJzZUlkKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2hhbmRsZS9taXgvZWpiL0Vucm9sbGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2hhbmRsZS9taXgvZWpiL0Vucm9sbGVyLmphdmEKaW5kZXggMGE1ODBkNC4uYzFmZTFiYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9oYW5kbGUvbWl4L2VqYi9FbnJvbGxlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvaGFuZGxlL21peC9lamIvRW5yb2xsZXIuamF2YQpAQCAtMjEsNyArMjEsNyBAQAogaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIAogcHVibGljIGludGVyZmFjZSBFbnJvbGxlciBleHRlbmRzIEVKQk9iamVjdCB7Ci0gCisKICAvKioKICAgKiBFbnJvbGxzIGEgU3R1ZGVudCBpbiBhIGNvdXJzZQogICAqIEBwYXJhbSBzdHVkZW50SWQgcHJpbWFyeSBrZXkgb2YgdGhlIHN0dWRlbnQgb2JqZWN0CkBAIC00MCw3ICs0MCw3IEBACiAgICBwdWJsaWMgdm9pZCB1bkVucm9sbChTdHJpbmcgc3R1ZGVudElkLCBTdHJpbmcgY291cnNlSWQpCiAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogIC8qKgotICAqIERlbGV0ZXMgYSBTdHVkZW50IAorICAqIERlbGV0ZXMgYSBTdHVkZW50CiAgICogQHBhcmFtIHN0dWRlbnRJZCBwcmltYXJ5IGtleSBvZiB0aGUgc3R1ZGVudCBvYmplY3QKICAgKiBAZXhjZXB0aW9uIFJlbW90ZUV4Y2VwdGlvbgogICAqLwpAQCAtNDksNyArNDksNyBAQAogICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogIC8qKgotICAqIERlbGV0ZXMgYSBDb3Vyc2UgCisgICogRGVsZXRlcyBhIENvdXJzZQogICAqIEBwYXJhbSBjb3Vyc2VJZCBwcmltYXJ5IGtleSBvZiB0aGUgY291cnNlIG9iamVjdAogICAqIEBleGNlcHRpb24gUmVtb3RlRXhjZXB0aW9uCiAgICovCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2hhbmRsZS9taXgvZWpiL0Vucm9sbGVyQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9oYW5kbGUvbWl4L2VqYi9FbnJvbGxlckJlYW4uamF2YQppbmRleCA1YzlkN2IzLi45YWYzZmU1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2hhbmRsZS9taXgvZWpiL0Vucm9sbGVyQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvaGFuZGxlL21peC9lamIvRW5yb2xsZXJCZWFuLmphdmEKQEAgLTE2LDcgKzE2LDcgQEAKIAogcGFja2FnZSBjb20uc3VuLnMxYXNkZXYuZWpiLmJtcC5oYW5kbGUubWl4LmVqYjsKIAotaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsgCitpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGpha2FydGEuZWpiLio7CiBpbXBvcnQgamF2YS5zcWwuKjsKIGltcG9ydCBqYXZheC5zcWwuKjsKQEAgLTI2LDcgKzI2LDcgQEAKIGltcG9ydCBqYXZhLmlvLio7CiAKIHB1YmxpYyBjbGFzcyBFbnJvbGxlckJlYW4gaW1wbGVtZW50cyBTZXNzaW9uQmVhbiB7Ci0gCisKICAgICBwcml2YXRlIENvbm5lY3Rpb24gY29uOwogICAgIHByaXZhdGUgU3RyaW5nIGRiTmFtZSA9ICJqYXZhOmNvbXAvZW52L2pkYmMvYm1wLWhhbmRsZS1taXhEQiI7CiAgICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBjb250ZXh0OwpAQCAtNjEsNyArNjEsNyBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIERlbGV0ZXMgYSBTdHVkZW50IAorICAgICAqIERlbGV0ZXMgYSBTdHVkZW50CiAgICAgICogQHBhcmFtIHN0dWRlbnRJZCBwcmltYXJ5IGtleSBvZiB0aGUgc3R1ZGVudCBvYmplY3QKICAgICAgKiBAZXhjZXB0aW9uIFJlbW90ZUV4Y2VwdGlvbgogICAgICAqLwpAQCAtNzQsNyArNzQsNyBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIERlbGV0ZXMgYSBDb3Vyc2UgCisgICAgICogRGVsZXRlcyBhIENvdXJzZQogICAgICAqIEBwYXJhbSBjb3Vyc2VJZCBwcmltYXJ5IGtleSBvZiB0aGUgY291cnNlIG9iamVjdAogICAgICAqIEBleGNlcHRpb24gUmVtb3RlRXhjZXB0aW9uCiAgICAgICovCkBAIC0xNDMsOCArMTQzLDggQEAKICAgICAgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJlamJQYXNzaXZhdGUgRXhjZXB0aW9uOiAiICsgZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfSBmaW5hbGx5IHsKLQkgICAgY29uID0gbnVsbDsKLQl9CisgICAgICAgIGNvbiA9IG51bGw7CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IGNvbnRleHQpIHsKQEAgLTE2Niw3ICsxNjYsNyBAQAogCiAgICAgICAgIFN0cmluZyBpbnNlcnRTdGF0ZW1lbnQgPQogICAgICAgICAgICAgImluc2VydCBpbnRvIEhhbmRsZUVucm9sbG1lbnQgdmFsdWVzICggPyAsID8gKSI7Ci0gICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHByZXBTdG10ID0gCisgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHByZXBTdG10ID0KICAgICAgICAgICAgIGNvbi5wcmVwYXJlU3RhdGVtZW50KGluc2VydFN0YXRlbWVudCk7CiAKICAgICAgICAgcHJlcFN0bXQuc2V0U3RyaW5nKDEsIHN0dWRlbnRJZCk7CkBAIC0xNzYsNyArMTc2LDcgQEAKICAgICAgICAgcHJlcFN0bXQuY2xvc2UoKTsKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgZGVsZXRlRW50cnkoU3RyaW5nIHN0dWRlbnRJZCwgU3RyaW5nIGNvdXJzZUlkKSAKKyAgICBwcml2YXRlIHZvaWQgZGVsZXRlRW50cnkoU3RyaW5nIHN0dWRlbnRJZCwgU3RyaW5nIGNvdXJzZUlkKQogICAgICAgICB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKIAogICAgICAgICBTdHJpbmcgZGVsZXRlU3RhdGVtZW50ID0KQEAgLTIxOSwxMyArMjE5LDEzIEBACiAgICAgICAgIHByZXBTdG10LmNsb3NlKCk7CiAgICAgfQogCi0gICAgcHJpdmF0ZSBBcnJheUxpc3Qgc2VsZWN0U3R1ZGVudChTdHJpbmcgY291cnNlSWQpIAorICAgIHByaXZhdGUgQXJyYXlMaXN0IHNlbGVjdFN0dWRlbnQoU3RyaW5nIGNvdXJzZUlkKQogICAgICAgICB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKIAogICAgICAgICBTdHJpbmcgc2VsZWN0U3RhdGVtZW50ID0KICAgICAgICAgICAgICJzZWxlY3Qgc3R1ZGVudGlkICIgKwogICAgICAgICAgICAgImZyb20gSGFuZGxlRW5yb2xsbWVudCB3aGVyZSBjb3Vyc2VpZCA9ID8gIjsKLSAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcFN0bXQgPSAKKyAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcFN0bXQgPQogICAgICAgICAgICAgY29uLnByZXBhcmVTdGF0ZW1lbnQoc2VsZWN0U3RhdGVtZW50KTsKIAogICAgICAgICBwcmVwU3RtdC5zZXRTdHJpbmcoMSwgY291cnNlSWQpOwpAQCAtMjQxLDEzICsyNDEsMTMgQEAKICAgICAgICAgcmV0dXJuIGE7CiAgICAgfQogCi0gICAgcHJpdmF0ZSBBcnJheUxpc3Qgc2VsZWN0Q291cnNlKFN0cmluZyBzdHVkZW50SWQpIAorICAgIHByaXZhdGUgQXJyYXlMaXN0IHNlbGVjdENvdXJzZShTdHJpbmcgc3R1ZGVudElkKQogICAgICAgICB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKIAogICAgICAgICBTdHJpbmcgc2VsZWN0U3RhdGVtZW50ID0KICAgICAgICAgICAgICJzZWxlY3QgY291cnNlaWQgIiArCiAgICAgICAgICAgICAiZnJvbSBIYW5kbGVFbnJvbGxtZW50IHdoZXJlIHN0dWRlbnRpZCA9ID8gIjsKLSAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcFN0bXQgPSAKKyAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcFN0bXQgPQogICAgICAgICAgICAgY29uLnByZXBhcmVTdGF0ZW1lbnQoc2VsZWN0U3RhdGVtZW50KTsKIAogICAgICAgICBwcmVwU3RtdC5zZXRTdHJpbmcoMSwgc3R1ZGVudElkKTsKQEAgLTMwMyw3ICszMDMsNyBAQAogICAgICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TdHVkZW50Iik7CiAgICAgICAgICAgICBTdHVkZW50SG9tZSBzdHVkZW50SG9tZSA9CiAgICAgICAgICAgICAgICAgKFN0dWRlbnRIb21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCBTdHVkZW50SG9tZS5jbGFzcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgSG9tZUhhbmRsZSBob21lSGFuZGxlID0gc3R1ZGVudEhvbWUuZ2V0SG9tZUhhbmRsZSgpOwogICAgICAgICAgICAgU3RyaW5nQnVmZmVyIHNidWYgPSBuZXcgU3RyaW5nQnVmZmVyKCJCRUdJTjogdGVzdFN0dWRlbnRIb21lSGFuZGxlIik7CiAgICAgICAgICAgICBIb21lSGFuZGxlIHJldEhvbWVIYW5kbGUgPSBkb0hvbWVIYW5kbGVUZXN0KGhvbWVIYW5kbGUsIHNidWYsICJ0ZXN0U3R1ZGVudEhvbWVIYW5kbGUiKTsKQEAgLTMyNCw3ICszMjQsNyBAQAogICAgICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TdHVkZW50Iik7CiAgICAgICAgICAgICBTdHVkZW50SG9tZSBzdHVkZW50SG9tZSA9CiAgICAgICAgICAgICAgICAgKFN0dWRlbnRIb21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCBTdHVkZW50SG9tZS5jbGFzcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU3R1ZGVudCBzdHVkZW50ID0gc3R1ZGVudEhvbWUuZmluZEJ5UHJpbWFyeUtleShzdHVkZW50SUQpOwogICAgICAgICAgICAgSGFuZGxlIGhhbmRsZSA9IHN0dWRlbnQuZ2V0SGFuZGxlKCk7CiAgICAgICAgICAgICBTdHJpbmdCdWZmZXIgc2J1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoIkJFR0lOOiB0ZXN0U3R1ZGVudEhhbmRsZSIpOwpAQCAtMzQzLDcgKzM0Myw3IEBACiAgICAgcHJpdmF0ZSBIb21lSGFuZGxlIGRvSG9tZUhhbmRsZVRlc3QoSG9tZUhhbmRsZSBoYW5kbGUsIFN0cmluZ0J1ZmZlciBzYnVmLCBTdHJpbmcgbXNnKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewotICAgICAgICAgICAgCisKICAgICAgICAgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJvcyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKICAgICAgICAgT2JqZWN0T3V0cHV0U3RyZWFtIG9vcyA9IG5ldyBPYmplY3RPdXRwdXRTdHJlYW0oYm9zKTsKICAgICAgICAgb29zLndyaXRlT2JqZWN0KGhhbmRsZSk7CkBAIC0zNjMsNyArMzYzLDcgQEAKICAgICBwcml2YXRlIEhhbmRsZSBkb0hhbmRsZVRlc3QoSGFuZGxlIGhhbmRsZSwgU3RyaW5nQnVmZmVyIHNidWYsIFN0cmluZyBtc2cpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24KICAgICB7Ci0gICAgICAgICAgICAKKwogICAgICAgICBCeXRlQXJyYXlPdXRwdXRTdHJlYW0gYm9zID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwogICAgICAgICBPYmplY3RPdXRwdXRTdHJlYW0gb29zID0gbmV3IE9iamVjdE91dHB1dFN0cmVhbShib3MpOwogICAgICAgICBvb3Mud3JpdGVPYmplY3QoaGFuZGxlKTsKQEAgLTM4MCw3ICszODAsNyBAQAogICAgICAgICByZXR1cm4gbmV3SGFuZGxlOwogICAgIH0KIAotICAgIHByaXZhdGUgYm9vbGVhbiBpc1NhbWUoSG9tZUhhbmRsZSBoMSwgSG9tZUhhbmRsZSBoMikgCisgICAgcHJpdmF0ZSBib29sZWFuIGlzU2FtZShIb21lSGFuZGxlIGgxLCBIb21lSGFuZGxlIGgyKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uCiAgICAgewogICAgICAgICBFSkJNZXRhRGF0YSBtZXRhMSA9IGgxLmdldEVKQkhvbWUoKS5nZXRFSkJNZXRhRGF0YSgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9oYW5kbGUvbWl4L2VqYi9TdHVkZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2hhbmRsZS9taXgvZWpiL1N0dWRlbnQuamF2YQppbmRleCAwODhlZWY0Li5lYzcxYjlhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2hhbmRsZS9taXgvZWpiL1N0dWRlbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2hhbmRsZS9taXgvZWpiL1N0dWRlbnQuamF2YQpAQCAtMjIsOSArMjIsOSBAQAogCiAKIHB1YmxpYyBpbnRlcmZhY2UgU3R1ZGVudCBleHRlbmRzIEVKQk9iamVjdCB7Ci0gCisKICAgLyoqCi0gICAqIFJldHVybnMgdGhlIENvdXJzZUlkcyB0aGF0IGEgc3R1ZGVudCBpcyBlbnJvbGxlZCBpbi4gCisgICAqIFJldHVybnMgdGhlIENvdXJzZUlkcyB0aGF0IGEgc3R1ZGVudCBpcyBlbnJvbGxlZCBpbi4KICAgICogQHBhcmFtIHN0dWRlbnRJZCBwcmltYXJ5IGtleSBvZiB0aGUgc3R1ZGVudCBvYmplY3QKICAgICogQHBhcmFtIGNvdXJzZUlkIHByaW1hcnkga2V5IG9mIHRoZSBjb3Vyc2Ugb2JqZWN0CiAgICAqIEBleGNlcHRpb24gUmVtb3RlRXhjZXB0aW9uCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2hhbmRsZS9taXgvZWpiL1N0dWRlbnRCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2hhbmRsZS9taXgvZWpiL1N0dWRlbnRCZWFuLmphdmEKaW5kZXggNzM2N2VmNy4uNDc3ZWJlNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9oYW5kbGUvbWl4L2VqYi9TdHVkZW50QmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvaGFuZGxlL21peC9lamIvU3R1ZGVudEJlYW4uamF2YQpAQCAtOTgsNyArOTgsNyBAQAogICAgICAgICBjb3Vyc2VJZHMgPSBuZXcgQXJyYXlMaXN0KCk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICAgICAgICAgZGF0YVNvdXJjZSA9IAorICAgICAgICAgICAgZGF0YVNvdXJjZSA9CiAgICAgICAgICAgICAgICAgKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9qZGJjL2JtcC1oYW5kbGUtbWl4REIiKTsKICAgICAgICAgICAgIENvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9FbnJvbGxlciIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9oYW5kbGUvbWl4L2VqYi9TdHVkZW50SG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9oYW5kbGUvbWl4L2VqYi9TdHVkZW50SG9tZS5qYXZhCmluZGV4IGEyNTVkY2EuLmUwOWQ2NzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvaGFuZGxlL21peC9lamIvU3R1ZGVudEhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2hhbmRsZS9taXgvZWpiL1N0dWRlbnRIb21lLmphdmEKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgKiBAZXhjZXB0aW9uIHRocm93cyBGaW5kZXJFeGNlcHRpb24gYW5kIFJlbW90ZUV4Y2VwdGlvbi4KICAgICAgKgogICAgICAqLwotIAotICAgIHB1YmxpYyBTdHVkZW50IGZpbmRCeVByaW1hcnlLZXkoU3RyaW5nIHN0dWRlbnRJZCkgCisKKyAgICBwdWJsaWMgU3R1ZGVudCBmaW5kQnlQcmltYXJ5S2V5KFN0cmluZyBzdHVkZW50SWQpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvaGFuZGxlL21peC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL2hhbmRsZS9taXgvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IDZmZGZiMmIuLmFmNDAxNWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvaGFuZGxlL21peC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9oYW5kbGUvbWl4L3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSwxNSArMSwxNSBAQAogRHJvcCB0YWJsZSBIYW5kbGVTdHVkZW50OwogY3JlYXRlIHRhYmxlIEhhbmRsZVN0dWRlbnQKLShzdHVkZW50aWQgdmFyY2hhcigzKSBwcmltYXJ5IGtleSBub3QgbnVsbCwgIAorKHN0dWRlbnRpZCB2YXJjaGFyKDMpIHByaW1hcnkga2V5IG5vdCBudWxsLAogbmFtZSB2YXJjaGFyKDM2KSk7CiAKIERyb3AgdGFibGUgSGFuZGxlQ291cnNlOwogY3JlYXRlIHRhYmxlIEhhbmRsZUNvdXJzZQotKGNvdXJzZWlkIHZhcmNoYXIoMykgcHJpbWFyeSBrZXkgbm90IG51bGwsICAKKyhjb3Vyc2VpZCB2YXJjaGFyKDMpIHByaW1hcnkga2V5IG5vdCBudWxsLAogbmFtZSB2YXJjaGFyKDM2KSk7CiAKIERyb3AgdGFibGUgSGFuZGxlRW5yb2xsbWVudDsKIGNyZWF0ZSB0YWJsZSBIYW5kbGVFbnJvbGxtZW50Ci0oY291cnNlaWQgdmFyY2hhcigzKSwgIAorKGNvdXJzZWlkIHZhcmNoYXIoMyksCiBzdHVkZW50aWQgdmFyY2hhcigzNikpOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3JlYWRvbmx5L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3JlYWRvbmx5L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZDI3M2Q4ZC4uNmU3Yzk0YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9yZWFkb25seS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvcmVhZG9ubHkvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTggKzE1LDE4IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItYm1wLXJlYWRvbmx5Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3JlYWRvbmx5L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvcmVhZG9ubHkvYnVpbGQueG1sCmluZGV4IDJiMDBkODMuLjUxMTE0MDIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvcmVhZG9ubHkvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvcmVhZG9ubHkvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OCwyMyArNDgsMjMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qU3R1ZGVudCouY2xhc3MsKiovKkVucm9sbGVyKi5jbGFzcywqKi8qQ291cnNlKi5jbGFzcyIgLz4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi9Db3Vyc2UuY2xhc3MsKiovRW5yb2xsZXIuY2xhc3MsKiovU3R1ZGVudC5jbGFzcywqKi8qSG9tZSouY2xhc3MsKiovKkNsaWVudCouY2xhc3MiIC8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgPC9hbnRjYWxsPgotICAgICAgCisKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiI+ICAgICAgICAgICAKKyAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiI+CiAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKQEAgLTczLDE0ICs3MywxNCBAQAogICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iNDAwIDEwIDUgMjUwIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtZWpiLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICA8L2FudGNhbGw+CiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvcmVhZG9ubHkvY2xpZW50L1JlYWRPbmx5Q2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3JlYWRvbmx5L2NsaWVudC9SZWFkT25seUNsaWVudC5qYXZhCmluZGV4IDJjODcwODcuLmMzOThhNDEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvcmVhZG9ubHkvY2xpZW50L1JlYWRPbmx5Q2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9yZWFkb25seS9jbGllbnQvUmVhZE9ubHlDbGllbnQuamF2YQpAQCAtMjYsNyArMjYsNyBAQAogaW1wb3J0IGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbjsKIAogLyoqCi0gKiBBIHNpbXBsZSBqYXZhIGNsaWVudCB3aWxsOiAKKyAqIEEgc2ltcGxlIGphdmEgY2xpZW50IHdpbGw6CiAgKiA8dWw+CiAgKiA8bGk+TG9jYXRlcyB0aGUgaG9tZSBpbnRlcmZhY2Ugb2YgdGhlIGVudGVycHJpc2UgYmVhbgogICogPGxpPkdldHMgYSByZWZlcmVuY2UgdG8gdGhlIHJlbW90ZSBpbnRlcmZhY2UKQEAgLTQzLDkgKzQzLDkgQEAKICAgICBwcml2YXRlIGludCBudW1QS3NfID0gMTsKICAgICBwcml2YXRlIGxvbmcgc2xlZXBUaW1lSW5NaWxsaXNfID0gMTAwOwogCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeyAKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKLSAgICAgICAgUmVhZE9ubHlDbGllbnQgY2xpZW50ID0gbmV3IFJlYWRPbmx5Q2xpZW50KCk7IAorICAgICAgICBSZWFkT25seUNsaWVudCBjbGllbnQgPSBuZXcgUmVhZE9ubHlDbGllbnQoKTsKIAogICAgICAgICBpZiggYXJncy5sZW5ndGggPT0gNCApIHsKIApAQCAtNTQsMTYgKzU0LDE2IEBACiAgICAgICAgICAgICBpbnQgbnVtUEtzID0gSW50ZWdlci5wYXJzZUludChhcmdzWzJdKTsKICAgICAgICAgICAgIGxvbmcgc2xlZXBUaW1lSW5NaWxsaXMgPSBMb25nLnBhcnNlTG9uZyhhcmdzWzNdKTsKICAgICAgICAgICAgIGNsaWVudC5ydW5UaHJlYWRUZXN0KG51bUl0ZXJhdGlvbnMsIG51bVRocmVhZHMsIG51bVBLcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsZWVwVGltZUluTWlsbGlzKTsgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsZWVwVGltZUluTWlsbGlzKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNsaWVudC5ydW5UZXN0Q2xpZW50KCk7ICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjbGllbnQucnVuVGVzdENsaWVudCgpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gcnVuIHRoZSB0ZXN0cwotICAgICAgICAKKwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHJ1blRlc3RDbGllbnQoKSB7ICAgICAgIAorICAgIHB1YmxpYyB2b2lkIHJ1blRlc3RDbGllbnQoKSB7CiAKICAgICAgICAgdHJ5ewogICAgICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVGVzdGluZyBCbXAgUmVhZE9ubHlDbGllbnQgYXBwLiIpOwpAQCAtODUsNyArODUsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHJ1blRocmVhZFRlc3QoaW50IG51bUl0ZXJhdGlvbnMsIGludCBudW1UaHJlYWRzLCBpbnQgbnVtUEtzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzbGVlcFRpbWVJbk1pbGxpcykgeyAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc2xlZXBUaW1lSW5NaWxsaXMpIHsKIAogICAgICAgICBudW1JdGVyYXRpb25zXyA9IG51bUl0ZXJhdGlvbnM7CiAgICAgICAgIG51bVRocmVhZHNfID0gbnVtVGhyZWFkczsKQEAgLTkzLDcgKzkzLDcgQEAKICAgICAgICAgc2xlZXBUaW1lSW5NaWxsaXNfID0gc2xlZXBUaW1lSW5NaWxsaXM7CiAKICAgICAgICAgdHJ5ewotICAgICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiQm1wIFJlYWRPbmx5Q2xpZW50IHRocmVhZCB0ZXN0Iik7ICAgICAgICAgICAgCisgICAgICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJCbXAgUmVhZE9ubHlDbGllbnQgdGhyZWFkIHRlc3QiKTsKICAgICAgICAgICAgIHRlc3QxMigpOwogICAgICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoIlJlYWRPbmx5Q2xpZW50Iik7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpAQCAtMTA2LDggKzEwNiw4IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlU3R1ZGVudCIpOwotICAgICAgICAgICAgU3R1ZGVudEhvbWUgc0hvbWUgPSAKLSAgICAgICAgICAgICAgICAoU3R1ZGVudEhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIAorICAgICAgICAgICAgU3R1ZGVudEhvbWUgc0hvbWUgPQorICAgICAgICAgICAgICAgIChTdHVkZW50SG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHVkZW50SG9tZS5jbGFzcyk7CiAKICAgICAgICAgICAgIHRyeSB7CkBAIC0xMTksNyArMTE5LDcgQEAKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiQm1wLVJlYWRPbmx5IFN0dWRlbnQgICAiLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiQ2F1Z2h0IGFuIGV4Y2VwdGlvbiEiKTsKICAgICAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgICAgICAgICAvL0V4cGVjdGVkIAorICAgICAgICAgICAgICAgIC8vRXhwZWN0ZWQKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHRoKSB7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkNhdWdodCBhbiB1bmV4cGVjdGVkIGV4Y2VwdGlvbiEiKTsKQEAgLTEzMyw4ICsxMzMsOCBAQAogICAgICAgICAgICAgQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBPYmplY3Qgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZUNvdXJzZSIpOwogCi0gICAgICAgICAgICBDb3Vyc2VIb21lIGNIb21lID0gCi0gICAgICAgICAgICAgICAgKENvdXJzZUhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIAorICAgICAgICAgICAgQ291cnNlSG9tZSBjSG9tZSA9CisgICAgICAgICAgICAgICAgKENvdXJzZUhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3Vyc2VIb21lLmNsYXNzKTsKIAogICAgICAgICAgICAgdHJ5IHsKQEAgLTE0Niw3ICsxNDYsNyBAQAogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJCbXAtUmVhZE9ubHkgQ291cnNlICAgICIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJDYXVnaHQgYW4gZXhjZXB0aW9uISIpOwogICAgICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAgICAgICAgIC8vRXhwZWN0ZWQgCisgICAgICAgICAgICAgICAgLy9FeHBlY3RlZAogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdGgpIHsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiQ2F1Z2h0IGFuIHVuZXhwZWN0ZWQgZXhjZXB0aW9uISIpOwpAQCAtMTYxLDggKzE2MSw4IEBACiAgICAgICAgICAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlRW5yb2xsZXIiKTsKIAotICAgICAgICAgICAgRW5yb2xsZXJIb21lIGVIb21lID0gCi0gICAgICAgICAgICAgICAgKEVucm9sbGVySG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwgCisgICAgICAgICAgICBFbnJvbGxlckhvbWUgZUhvbWUgPQorICAgICAgICAgICAgICAgIChFbnJvbGxlckhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVucm9sbGVySG9tZS5jbGFzcyk7CiAKICAgICAgICAgICAgIEVucm9sbGVyIGVucm9sbGVyID0gZUhvbWUuY3JlYXRlKCk7CkBAIC0xODAsMTUgKzE4MCwxNSBAQAogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJDYXVnaHQgYW4gdW5leHBlY3RlZCBleGNlcHRpb24hIik7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotICAgIH0gCisgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHRlc3QwNCgpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVFbnJvbGxlciIpOwogCi0gICAgICAgICAgICBFbnJvbGxlckhvbWUgZUhvbWUgPSAKLSAgICAgICAgICAgICAgICAoRW5yb2xsZXJIb21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCAKKyAgICAgICAgICAgIEVucm9sbGVySG9tZSBlSG9tZSA9CisgICAgICAgICAgICAgICAgKEVucm9sbGVySG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5yb2xsZXJIb21lLmNsYXNzKTsKIAogICAgICAgICAgICAgRW5yb2xsZXIgZW5yb2xsZXIgPSBlSG9tZS5jcmVhdGUoKTsKQEAgLTIyNyw4ICsyMjcsOCBAQAogICAgICAgICAgICAgQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBPYmplY3Qgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZUVucm9sbGVyIik7CiAKLSAgICAgICAgICAgIEVucm9sbGVySG9tZSBlSG9tZSA9IAotICAgICAgICAgICAgICAgIChFbnJvbGxlckhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIAorICAgICAgICAgICAgRW5yb2xsZXJIb21lIGVIb21lID0KKyAgICAgICAgICAgICAgICAoRW5yb2xsZXJIb21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnJvbGxlckhvbWUuY2xhc3MpOwogCiAgICAgICAgICAgICBFbnJvbGxlciBlbnJvbGxlciA9IGVIb21lLmNyZWF0ZSgpOwpAQCAtMjUwLDE3ICsyNTAsMTcgQEAKICAgICAgICAgICAgIENvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVFbnJvbGxlciIpOwogCi0gICAgICAgICAgICBFbnJvbGxlckhvbWUgZUhvbWUgPSAKLSAgICAgICAgICAgICAgICAoRW5yb2xsZXJIb21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCAKKyAgICAgICAgICAgIEVucm9sbGVySG9tZSBlSG9tZSA9CisgICAgICAgICAgICAgICAgKEVucm9sbGVySG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5yb2xsZXJIb21lLmNsYXNzKTsKIAogICAgICAgICAgICAgRW5yb2xsZXIgZW5yb2xsZXIgPSBlSG9tZS5jcmVhdGUoKTsKICAgICAgICAgICAgIGJvb2xlYW4gc3RhdHVzID0gZW5yb2xsZXIuY2FuR2V0UmVhZE9ubHlCZWFuTG9jYWxOb3RpZmllcih0cnVlKTsKICAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gdHJ1ZSkgewotICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJCbXAtUmVhZE9ubHkgU0ZTQkxvY2FsLU5ld05vdGlmaWVyICIsIAorICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJCbXAtUmVhZE9ubHkgU0ZTQkxvY2FsLU5ld05vdGlmaWVyICIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIkJtcC1SZWFkT25seSBTRlNCTG9jYWwtTmV3Tm90aWZpZXIgIiwgCisgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIkJtcC1SZWFkT25seSBTRlNCTG9jYWwtTmV3Tm90aWZpZXIgIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTI3NSwyMiArMjc1LDIyIEBACiAgICAgICAgICAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlRW5yb2xsZXIiKTsKIAotICAgICAgICAgICAgRW5yb2xsZXJIb21lIGVIb21lID0gCi0gICAgICAgICAgICAgICAgKEVucm9sbGVySG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwgCisgICAgICAgICAgICBFbnJvbGxlckhvbWUgZUhvbWUgPQorICAgICAgICAgICAgICAgIChFbnJvbGxlckhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVucm9sbGVySG9tZS5jbGFzcyk7CiAKICAgICAgICAgICAgIEVucm9sbGVyIGVucm9sbGVyID0gZUhvbWUuY3JlYXRlKCk7Ci0gICAgICAgICAgICBib29sZWFuIHN0YXR1cyA9IGVucm9sbGVyLnRlc3RSZWFkT25seUJlYW5Mb2NhbFN0dWRlbnRSZWZyZXNoKCJzdHVkZW50MCIsIAorICAgICAgICAgICAgYm9vbGVhbiBzdGF0dXMgPSBlbnJvbGxlci50ZXN0UmVhZE9ubHlCZWFuTG9jYWxTdHVkZW50UmVmcmVzaCgic3R1ZGVudDAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7CiAgICAgICAgICAgICBpZiAoc3RhdHVzID09IHRydWUpIHsKLSAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiQm1wLVJlYWRPbmx5IFNGU0JMb2NhbC1OZXdTdHVkZW50UmVmcmVzaCAiLCAKKyAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiQm1wLVJlYWRPbmx5IFNGU0JMb2NhbC1OZXdTdHVkZW50UmVmcmVzaCAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJCbXAtUmVhZE9ubHkgU0ZTQkxvY2FsLU5ld1N0dWRlbnRSZWZyZXNoICIsIAorICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJCbXAtUmVhZE9ubHkgU0ZTQkxvY2FsLU5ld1N0dWRlbnRSZWZyZXNoICIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiQm1wLVJlYWRPbmx5IFNGU0JMb2NhbE5vdGlmaWVyUmVmcmVzaCAiLCAKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJCbXAtUmVhZE9ubHkgU0ZTQkxvY2FsTm90aWZpZXJSZWZyZXNoICIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LkZBSUwpOwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJDYXVnaHQgYW4gdW5leHBlY3RlZCBleGNlcHRpb24hIik7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTMwMiwxNyArMzAyLDE3IEBACiAgICAgICAgICAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlU3R1ZGVudCIpOwogCi0gICAgICAgICAgICBTdHVkZW50SG9tZSByZWFkT25seVN0dWRlbnRIb21lID0gCi0gICAgICAgICAgICAgICAgKFN0dWRlbnRIb21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCAKKyAgICAgICAgICAgIFN0dWRlbnRIb21lIHJlYWRPbmx5U3R1ZGVudEhvbWUgPQorICAgICAgICAgICAgICAgIChTdHVkZW50SG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHVkZW50SG9tZS5jbGFzcyk7CiAgICAgICAgICAgICBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvTXV0YWJsZVN0dWRlbnQiKTsKIAotICAgICAgICAgICAgU3R1ZGVudEhvbWVNdXRhYmxlIG11dGFibGVTdHVkZW50SG9tZSA9IAotICAgICAgICAgICAgICAgIChTdHVkZW50SG9tZU11dGFibGUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIAorICAgICAgICAgICAgU3R1ZGVudEhvbWVNdXRhYmxlIG11dGFibGVTdHVkZW50SG9tZSA9CisgICAgICAgICAgICAgICAgKFN0dWRlbnRIb21lTXV0YWJsZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHVkZW50SG9tZU11dGFibGUuY2xhc3MpOwogCiAgICAgICAgICAgICBTdHVkZW50IG5ld1N0dWRlbnQgPSBtdXRhYmxlU3R1ZGVudEhvbWUuY3JlYXRlKCI5OTkiLCAiSm9lIFNjaG1vIik7Ci0gICAgICAgICAgICBTdHVkZW50IHJlYWRPbmx5U3R1ZGVudCA9IAorICAgICAgICAgICAgU3R1ZGVudCByZWFkT25seVN0dWRlbnQgPQogICAgICAgICAgICAgICAgIHJlYWRPbmx5U3R1ZGVudEhvbWUuZmluZEJ5UHJpbWFyeUtleSgiOTk5Iik7CiAgICAgICAgICAgICBTdHJpbmcgbmFtZTEgID0gbmV3U3R1ZGVudC5nZXROYW1lKCk7CiAgICAgICAgICAgICBTdHJpbmcgcmVhZE9ubHlOYW1lMSA9IHJlYWRPbmx5U3R1ZGVudC5nZXROYW1lKCk7CkBAIC0zNDMsOSArMzQzLDkgQEAKICAgICAgICAgICAgIC8vIHRvIGNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgYmVhbiBhbmQgY2FsbCBlamJMb2FkIG9uIGl0LgogICAgICAgICAgICAgLy8gU28sIG9ubHkgdXNlIG5hbWUxIGFuZCBuYW1lMiB0byBkZWNpZGUgaWYgdGVzdCBwYXNzZWQuCiAgICAgICAgICAgICBpZiAobmFtZTEuZXF1YWxzKHJlYWRPbmx5TmFtZTEpICYmIG5hbWUyLmVxdWFscyhyZWFkT25seU5hbWUyKSAmJgotICAgICAgICAgICAgICAgIG5hbWUxLmVxdWFscyhyZWFkT25seU5hbWUxVHgpICYmIAorICAgICAgICAgICAgICAgIG5hbWUxLmVxdWFscyhyZWFkT25seU5hbWUxVHgpICYmCiAgICAgICAgICAgICAgICAgbmFtZTIuZXF1YWxzKHJlYWRPbmx5TmFtZTJUeCkpIHsKLSAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiQm1wLVJlYWRPbmx5IFJlYWRNb3N0bHkgICIsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJCbXAtUmVhZE9ubHkgUmVhZE1vc3RseSAgIiwgc3RhdC5GQUlMKTsKQEAgLTM1Nyw3ICszNTcsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIkJtcC1SZWFkT25seSBSZWFkTW9zdGx5ICAiLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJDYXVnaHQgYW4gdW5leHBlY3RlZCBleGNlcHRpb24hIik7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgfSAKKyAgICAgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCB0ZXN0MTIoKSB7CkBAIC0zNjYsNyArMzY2LDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTnVtIEl0ZXJhdGlvbnMgPSAiICsgbnVtSXRlcmF0aW9uc18pOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJOdW0gVGhyZWFkcyA9ICIgKyBudW1UaHJlYWRzXyk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk51bSBQS3MgPSAiICsgbnVtUEtzXyk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNsZWVwIHRpbWUgaW4gbWlsbGlzZWNvbmRzID0gIiArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTbGVlcCB0aW1lIGluIG1pbGxpc2Vjb25kcyA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsZWVwVGltZUluTWlsbGlzXyk7CiAKICAgICAgICAgICAgIGludCBudW1Xcml0ZXJJdGVyYXRpb25zID0gbnVtSXRlcmF0aW9uc18gLyAxMDA7CkBAIC0zNzQsMzQgKzM3NCwzNCBAQAogCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk51bSB3cml0ZXIgaXRlcmF0aW9ucyA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVdyaXRlckl0ZXJhdGlvbnMpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcml0ZXIgc2xlZXAgdGltZSBpbiBtaWxsaXNlY29uZHMgPSAiICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyaXRlciBzbGVlcCB0aW1lIGluIG1pbGxpc2Vjb25kcyA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlclNsZWVwVGltZUluTWlsbGlzKTsKIAogICAgICAgICAgICAgQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBPYmplY3Qgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZVN0dWRlbnQiKTsKIAotICAgICAgICAgICAgU3R1ZGVudEhvbWUgcmVhZE9ubHlTdHVkZW50SG9tZSA9IAotICAgICAgICAgICAgICAgIChTdHVkZW50SG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwgCisgICAgICAgICAgICBTdHVkZW50SG9tZSByZWFkT25seVN0dWRlbnRIb21lID0KKyAgICAgICAgICAgICAgICAoU3R1ZGVudEhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3R1ZGVudEhvbWUuY2xhc3MpOwogICAgICAgICAgICAgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL011dGFibGVTdHVkZW50Iik7CiAKLSAgICAgICAgICAgIFN0dWRlbnRIb21lTXV0YWJsZSBtdXRhYmxlU3R1ZGVudEhvbWUgPSAKLSAgICAgICAgICAgICAgICAoU3R1ZGVudEhvbWVNdXRhYmxlKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCAKKyAgICAgICAgICAgIFN0dWRlbnRIb21lTXV0YWJsZSBtdXRhYmxlU3R1ZGVudEhvbWUgPQorICAgICAgICAgICAgICAgIChTdHVkZW50SG9tZU11dGFibGUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3R1ZGVudEhvbWVNdXRhYmxlLmNsYXNzKTsKLSAgICAgICAgICAKKwogICAgICAgICAgICAgU3R1ZGVudFtdIG5ld1N0dWRlbnRzID0gbmV3IFN0dWRlbnRbbnVtUEtzX107CiAgICAgICAgICAgICBTdHVkZW50W10gcmVhZE9ubHlTdHVkZW50cyA9IG5ldyBTdHVkZW50W251bVBLc19dOwogICAgICAgICAgICAgVGhyZWFkW10gcmVhZGVycyA9IG5ldyBUaHJlYWRbbnVtVGhyZWFkc18gKiBudW1QS3NfXTsKICAgICAgICAgICAgIFRocmVhZFtdIHdyaXRlcnMgPSBuZXcgVGhyZWFkW251bVBLc19dOwogCiAgICAgICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbnVtUEtzXzsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgbmV3U3R1ZGVudHNbaV0gPSAKKyAgICAgICAgICAgICAgICBuZXdTdHVkZW50c1tpXSA9CiAgICAgICAgICAgICAgICAgICAgIG11dGFibGVTdHVkZW50SG9tZS5jcmVhdGUoIlJlYWRlclRocmVhZCIgKyBpLCAiQUJDIiArIGkpOwotICAgICAgICAgICAgICAgIHJlYWRPbmx5U3R1ZGVudHNbaV0gPSAKKyAgICAgICAgICAgICAgICByZWFkT25seVN0dWRlbnRzW2ldID0KICAgICAgICAgICAgICAgICAgICAgcmVhZE9ubHlTdHVkZW50SG9tZS5maW5kQnlQcmltYXJ5S2V5KCJSZWFkZXJUaHJlYWQiICsgaSk7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGluZyBzdHVkZW50ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0aW5nIHN0dWRlbnQgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRPbmx5U3R1ZGVudHNbaV0uZ2V0UHJpbWFyeUtleSgpKTsKLSAgICAgICAgICAgICAgICB3cml0ZXJzW2ldID0gbmV3IFdyaXRlclRocmVhZChuZXdTdHVkZW50c1tpXSwgCisgICAgICAgICAgICAgICAgd3JpdGVyc1tpXSA9IG5ldyBXcml0ZXJUaHJlYWQobmV3U3R1ZGVudHNbaV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtV3JpdGVySXRlcmF0aW9ucywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXJTbGVlcFRpbWVJbk1pbGxpcyk7CiAgICAgICAgICAgICAgICAgZm9yKGludCBqID0gMDsgaiA8IG51bVRocmVhZHNfOyBqKyspIHsKQEAgLTQwOSwyMSArNDA5LDIxIEBACiAgICAgICAgICAgICAgICAgICAgIGludCB0aHJlYWRJbmRleCA9IGkqbnVtVGhyZWFkc18gKyBqOwogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRocmVhZCBpbmRleCA9ICIgKyB0aHJlYWRJbmRleCk7CiAgICAgICAgICAgICAgICAgICAgIHJlYWRlcnNbdGhyZWFkSW5kZXhdID0gbmV3IFJlYWRlclRocmVhZAotICAgICAgICAgICAgICAgICAgICAgICAgKHJlYWRPbmx5U3R1ZGVudHNbaV0sIG51bUl0ZXJhdGlvbnNfLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIChyZWFkT25seVN0dWRlbnRzW2ldLCBudW1JdGVyYXRpb25zXywKICAgICAgICAgICAgICAgICAgICAgICAgICBzbGVlcFRpbWVJbk1pbGxpc18pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgcmVhZGVycy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhcnRpbmcgcmVhZGVyIHRocmVhZCAiICsgaSk7CiAgICAgICAgICAgICAgICAgcmVhZGVyc1tpXS5zdGFydCgpOwotICAgICAgICAgICAgfSAgICAKLSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IHdyaXRlcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXJ0aW5nIHdyaXRlciB0aHJlYWQgIiArIGkpOwogICAgICAgICAgICAgICAgIHdyaXRlcnNbaV0uc3RhcnQoKTsKLSAgICAgICAgICAgIH0gICAgIAotICAgICAgICAgICAgCisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSm9pbmluZyBvbiAiICsgcmVhZGVycy5sZW5ndGggKyAiIHJlYWRlcnMiKTsKICAgICAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCByZWFkZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgcmVhZGVyc1tpXS5qb2luKCk7CkBAIC00MzIsOCArNDMyLDggQEAKICAgICAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCB3cml0ZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgd3JpdGVyc1tpXS5qb2luKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgCisKKwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIkJtcC1SZWFkT25seSBSZWFkZXJUaHJlYWRzICAiLCBzdGF0LlBBU1MpOwogCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlbW92aW5nIGFsbCBzdHVkZW50cyIpOwpAQCAtNDQ1LDI0ICs0NDUsMjQgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJCbXAtUmVhZE9ubHkgUmVhZGVyVGhyZWFkcyAgIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiQ2F1Z2h0IGFuIHVuZXhwZWN0ZWQgZXhjZXB0aW9uISIpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgIH0gCisgICAgICAgIH0KICAgICB9CiAKICAgICBwcml2YXRlIGNsYXNzIFJlYWRlclRocmVhZCBleHRlbmRzIFRocmVhZCB7CiAKLSAgICAgICAgU3R1ZGVudCByZWFkT25seVN0dWRlbnRfOyAgICAgICAgICAgICAgCisgICAgICAgIFN0dWRlbnQgcmVhZE9ubHlTdHVkZW50XzsKICAgICAgICAgaW50IG51bVJlYWRzXzsKICAgICAgICAgbG9uZyBzbGVlcFRpbWVJbk1pbGxpc187Ci0gICAgICAgIFN0cmluZyBzdHVkZW50UEtfOyAgICAgICAgCisgICAgICAgIFN0cmluZyBzdHVkZW50UEtfOwogCi0gICAgICAgIFJlYWRlclRocmVhZChTdHVkZW50IHJlYWRPbmx5U3R1ZGVudCwgaW50IG51bVJlYWRzLCAKKyAgICAgICAgUmVhZGVyVGhyZWFkKFN0dWRlbnQgcmVhZE9ubHlTdHVkZW50LCBpbnQgbnVtUmVhZHMsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIHNsZWVwVGltZUluTWlsbGlzKSB7Ci0gICAgICAgICAgICByZWFkT25seVN0dWRlbnRfID0gcmVhZE9ubHlTdHVkZW50OyAgICAgICAgICAgCisgICAgICAgICAgICByZWFkT25seVN0dWRlbnRfID0gcmVhZE9ubHlTdHVkZW50OwogICAgICAgICAgICAgbnVtUmVhZHNfID0gbnVtUmVhZHM7CiAgICAgICAgICAgICBzbGVlcFRpbWVJbk1pbGxpc18gPSBzbGVlcFRpbWVJbk1pbGxpczsKICAgICAgICAgfQogCi0gICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewogICAgICAgICAgICAgZm9yKCBpbnQgaSA9IDA7IGkgPCBudW1SZWFkc187IGkrKykgewogICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgIGlmKCBpID09IDAgKSB7CkBAIC00ODIsMjAgKzQ4MiwyMCBAQAogCiAgICAgcHJpdmF0ZSBjbGFzcyBXcml0ZXJUaHJlYWQgZXh0ZW5kcyBUaHJlYWQgewogCi0gICAgICAgIFN0dWRlbnQgbXV0YWJsZVN0dWRlbnRfOyAgICAgICAgICAgICAgCisgICAgICAgIFN0dWRlbnQgbXV0YWJsZVN0dWRlbnRfOwogICAgICAgICBpbnQgbnVtV3JpdGVzXzsKICAgICAgICAgbG9uZyBzbGVlcFRpbWVJbk1pbGxpc187CiAgICAgICAgIFN0cmluZyBzdHVkZW50UEtfOwogCi0gICAgICAgIFdyaXRlclRocmVhZChTdHVkZW50IG11dGFibGVTdHVkZW50LCBpbnQgbnVtV3JpdGVzLCAKKyAgICAgICAgV3JpdGVyVGhyZWFkKFN0dWRlbnQgbXV0YWJsZVN0dWRlbnQsIGludCBudW1Xcml0ZXMsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIHNsZWVwVGltZUluTWlsbGlzKSB7Ci0gICAgICAgICAgICBtdXRhYmxlU3R1ZGVudF8gPSBtdXRhYmxlU3R1ZGVudDsgICAgICAgICAgIAorICAgICAgICAgICAgbXV0YWJsZVN0dWRlbnRfID0gbXV0YWJsZVN0dWRlbnQ7CiAgICAgICAgICAgICBudW1Xcml0ZXNfID0gbnVtV3JpdGVzOwogICAgICAgICAgICAgc2xlZXBUaW1lSW5NaWxsaXNfID0gc2xlZXBUaW1lSW5NaWxsaXM7CiAgICAgICAgIH0KIAotICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IoIGludCBpID0gMDsgaSA8IG51bVdyaXRlc187IGkrKykgeyAgICAgICAgICAgICAgICAKKyAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgZm9yKCBpbnQgaSA9IDA7IGkgPCBudW1Xcml0ZXNfOyBpKyspIHsKICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICBpZiggaSA9PSAwICkgewogICAgICAgICAgICAgICAgICAgICAgICAgc3R1ZGVudFBLXyA9IChTdHJpbmcpIG11dGFibGVTdHVkZW50Xy5nZXRQcmltYXJ5S2V5KCk7CkBAIC01MTQsNCArNTE0LDQgQEAKIAogICAgIH0KIAotfSAKK30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvcmVhZG9ubHkvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvcmVhZG9ubHkvZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCBhMTkyMWZhLi45OTFhZDg0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3JlYWRvbmx5L2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9yZWFkb25seS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC0zNjgsNyArMzY4LDcgQEAKICAgICAgICAgPG1ldGhvZC1wYXJhbXMgLz4KICAgICAgIDwvbWV0aG9kPgogCi0gIDwhLS0gbWV0aG9kcyBmb3IgU3R1ZGVudCBFSkIgLS0+ICAgICAgCisgIDwhLS0gbWV0aG9kcyBmb3IgU3R1ZGVudCBFSkIgLS0+CiAKICAgICAgIDxtZXRob2Q+CiAgICAgICAgIDxlamItbmFtZT5SZWFkT25seVN0dWRlbnRCZWFuPC9lamItbmFtZT4KQEAgLTkyOSw2ICs5MjksNiBAQAogICAgICAgPHRyYW5zLWF0dHJpYnV0ZT5Ob3RTdXBwb3J0ZWQ8L3RyYW5zLWF0dHJpYnV0ZT4KICAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgPC9hc3NlbWJseS1kZXNjcmlwdG9yPgotICAgICAgCisKIDwvZWpiLWphcj4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9yZWFkb25seS9lamIvQ291cnNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3JlYWRvbmx5L2VqYi9Db3Vyc2UuamF2YQppbmRleCBlNzVlZTY0Li4wNTkwM2ZiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3JlYWRvbmx5L2VqYi9Db3Vyc2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3JlYWRvbmx5L2VqYi9Db3Vyc2UuamF2YQpAQCAtMjIsMjQgKzIyLDI0IEBACiAKIAogcHVibGljIGludGVyZmFjZSBDb3Vyc2UgZXh0ZW5kcyBFSkJPYmplY3QgewotIAorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBhbiBhcnJheWxpc3Qgb2YgU3R1ZGVudElkcyB0YWtpbmcgdGhlIGNvdXJzZS4KLSAgICAgKiBAZXhjZXB0aW9uIFJlbW90ZUV4Y2VwdGlvbiAKKyAgICAgKiBAZXhjZXB0aW9uIFJlbW90ZUV4Y2VwdGlvbgogICAgICAqLwogICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0U3R1ZGVudElkcygpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBjb3Vyc2UuCi0gICAgICogQGV4Y2VwdGlvbiBSZW1vdGVFeGNlcHRpb24gCi0gICAgICogCisgICAgICogQGV4Y2VwdGlvbiBSZW1vdGVFeGNlcHRpb24KKyAgICAgKgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBuYW1lIG9mIHRoZSBjb3Vyc2UuCi0gICAgICogQGV4Y2VwdGlvbiBSZW1vdGVFeGNlcHRpb24gCi0gICAgICogCisgICAgICogQGV4Y2VwdGlvbiBSZW1vdGVFeGNlcHRpb24KKyAgICAgKgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvcmVhZG9ubHkvZWpiL0NvdXJzZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvcmVhZG9ubHkvZWpiL0NvdXJzZUJlYW4uamF2YQppbmRleCBmNTllODZiLi5jNDY3OTM5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3JlYWRvbmx5L2VqYi9Db3Vyc2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9yZWFkb25seS9lamIvQ291cnNlQmVhbi5qYXZhCkBAIC0xMDUsNyArMTA1LDcgQEAKICAgICAgICAgICAgICAgICAoRGF0YVNvdXJjZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2pkYmMvYm1wLXJlYWRvbmx5REIiKTsKICAgICAgICAgICAgIENvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9FbnJvbGxlciIpOwotICAgICAgICAgICAgZW5yb2xsZXJIb21lID0gCisgICAgICAgICAgICBlbnJvbGxlckhvbWUgPQogICAgICAgICAgICAgICAgIChFbnJvbGxlckhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVucm9sbGVySG9tZS5jbGFzcyk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9yZWFkb25seS9lamIvQ291cnNlSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9yZWFkb25seS9lamIvQ291cnNlSG9tZS5qYXZhCmluZGV4IGE3NWUyZGYuLjgwNjBkZGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvcmVhZG9ubHkvZWpiL0NvdXJzZUhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3JlYWRvbmx5L2VqYi9Db3Vyc2VIb21lLmphdmEKQEAgLTMwLDEyICszMCwxMiBAQAogICAgICAqLwogICAgIHB1YmxpYyBDb3Vyc2UgY3JlYXRlKFN0cmluZyBjb3Vyc2VJZCwgU3RyaW5nIG5hbWUpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24sIENyZWF0ZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgYSByZWZlcmVuY2UgdG8gdGhlIHJlbW90ZSBpbnRlcmZhY2UgdG8gdGhlIENvdXJzZUJlYW4gb2JqZWN0IGJ5IFByaW1hcnkgS2V5LgogICAgICAqIEBleGNlcHRpb24gdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiBhbmQgUmVtb3RlRXhjZXB0aW9uLgogICAgICAqCiAgICAgICovCi0gICAgcHVibGljIENvdXJzZSBmaW5kQnlQcmltYXJ5S2V5KFN0cmluZyBjb3Vyc2VJZCkgCisgICAgcHVibGljIENvdXJzZSBmaW5kQnlQcmltYXJ5S2V5KFN0cmluZyBjb3Vyc2VJZCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9yZWFkb25seS9lamIvRW5yb2xsZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvcmVhZG9ubHkvZWpiL0Vucm9sbGVyLmphdmEKaW5kZXggNDhmMGZkNC4uYWFlZGY4MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9yZWFkb25seS9lamIvRW5yb2xsZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3JlYWRvbmx5L2VqYi9FbnJvbGxlci5qYXZhCkBAIC0yMSw3ICsyMSw3IEBACiBpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogCiBwdWJsaWMgaW50ZXJmYWNlIEVucm9sbGVyIGV4dGVuZHMgRUpCT2JqZWN0IHsKLSAKKwogIC8qKgogICAqIEVucm9sbHMgYSBTdHVkZW50IGluIGEgY291cnNlCiAgICogQHBhcmFtIHN0dWRlbnRJZCBwcmltYXJ5IGtleSBvZiB0aGUgc3R1ZGVudCBvYmplY3QKQEAgLTQwLDcgKzQwLDcgQEAKICAgIHB1YmxpYyB2b2lkIHVuRW5yb2xsKFN0cmluZyBzdHVkZW50SWQsIFN0cmluZyBjb3Vyc2VJZCkKICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAgLyoqCi0gICogRGVsZXRlcyBhIFN0dWRlbnQgCisgICogRGVsZXRlcyBhIFN0dWRlbnQKICAgKiBAcGFyYW0gc3R1ZGVudElkIHByaW1hcnkga2V5IG9mIHRoZSBzdHVkZW50IG9iamVjdAogICAqIEBleGNlcHRpb24gUmVtb3RlRXhjZXB0aW9uCiAgICovCkBAIC00OSw3ICs0OSw3IEBACiAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgLyoqCi0gICogRGVsZXRlcyBhIENvdXJzZSAKKyAgKiBEZWxldGVzIGEgQ291cnNlCiAgICogQHBhcmFtIGNvdXJzZUlkIHByaW1hcnkga2V5IG9mIHRoZSBjb3Vyc2Ugb2JqZWN0CiAgICogQGV4Y2VwdGlvbiBSZW1vdGVFeGNlcHRpb24KICAgKi8KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvcmVhZG9ubHkvZWpiL0Vucm9sbGVyQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9yZWFkb25seS9lamIvRW5yb2xsZXJCZWFuLmphdmEKaW5kZXggZTFkNDFjYi4uYjhkMzc3MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9yZWFkb25seS9lamIvRW5yb2xsZXJCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9yZWFkb25seS9lamIvRW5yb2xsZXJCZWFuLmphdmEKQEAgLTE2LDcgKzE2LDcgQEAKIAogcGFja2FnZSBjb20uc3VuLnMxYXNkZXYuZWpiLmJtcC5yZWFkb25seS5lamI7CiAKLWltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247IAoraW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBqYWthcnRhLmVqYi4qOwogaW1wb3J0IGphdmEuc3FsLio7CiBpbXBvcnQgamF2YXguc3FsLio7CkBAIC0yNiw3ICsyNiw3IEBACiBpbXBvcnQgamF2YS5pby4qOwogCiBwdWJsaWMgY2xhc3MgRW5yb2xsZXJCZWFuIGltcGxlbWVudHMgU2Vzc2lvbkJlYW4gewotIAorCiAgICAgcHJpdmF0ZSBDb25uZWN0aW9uIGNvbjsKICAgICBwcml2YXRlIFN0cmluZyBkYk5hbWUgPSAiamF2YTpjb21wL2Vudi9qZGJjL2JtcC1yZWFkb25seURCIjsKICAgICBwcml2YXRlIERhdGFTb3VyY2UgZHM7CkBAIC02Miw3ICs2Miw3IEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogRGVsZXRlcyBhIFN0dWRlbnQgCisgICAgICogRGVsZXRlcyBhIFN0dWRlbnQKICAgICAgKiBAcGFyYW0gc3R1ZGVudElkIHByaW1hcnkga2V5IG9mIHRoZSBzdHVkZW50IG9iamVjdAogICAgICAqIEBleGNlcHRpb24gUmVtb3RlRXhjZXB0aW9uCiAgICAgICovCkBAIC03NSw3ICs3NSw3IEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogRGVsZXRlcyBhIENvdXJzZSAKKyAgICAgKiBEZWxldGVzIGEgQ291cnNlCiAgICAgICogQHBhcmFtIGNvdXJzZUlkIHByaW1hcnkga2V5IG9mIHRoZSBjb3Vyc2Ugb2JqZWN0CiAgICAgICogQGV4Y2VwdGlvbiBSZW1vdGVFeGNlcHRpb24KICAgICAgKi8KQEAgLTEyNywxMSArMTI3LDExIEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7Ci0gICAgICAgIAorCiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkgewotICAgICAgIAorCiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgY29udGV4dCkgewpAQCAtMTQwLDE0ICsxNDAsMTQgQEAKIAogICAgIHB1YmxpYyBFbnJvbGxlckJlYW4oKSB7fQogCi0gICAgLyoqKioqKioqKioqKioqKioqKioqKioqIERhdGFiYXNlIFJvdXRpbmVzICoqKioqKioqKioqKioqKioqKioqKioqKiovICAgCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqIERhdGFiYXNlIFJvdXRpbmVzICoqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICAgICBwcml2YXRlIHZvaWQgaW5zZXJ0RW50cnkoU3RyaW5nIHN0dWRlbnRJZCwgU3RyaW5nIGNvdXJzZUlkKQogICAgICAgICB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgICAgQ29ubmVjdGlvbiBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7CiAgICAgICAgIFN0cmluZyBpbnNlcnRTdGF0ZW1lbnQgPQogICAgICAgICAgICAgImluc2VydCBpbnRvIFJlYWRPbmx5RW5yb2xsbWVudCB2YWx1ZXMgKCA/ICwgPyApIjsKLSAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcFN0bXQgPSAKKyAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcFN0bXQgPQogICAgICAgICAgICAgY29uLnByZXBhcmVTdGF0ZW1lbnQoaW5zZXJ0U3RhdGVtZW50KTsKIAogICAgICAgICBwcmVwU3RtdC5zZXRTdHJpbmcoMSwgc3R1ZGVudElkKTsKQEAgLTE1OCw3ICsxNTgsNyBAQAogICAgICAgICBjb24uY2xvc2UoKTsKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgZGVsZXRlRW50cnkoU3RyaW5nIHN0dWRlbnRJZCwgU3RyaW5nIGNvdXJzZUlkKSAKKyAgICBwcml2YXRlIHZvaWQgZGVsZXRlRW50cnkoU3RyaW5nIHN0dWRlbnRJZCwgU3RyaW5nIGNvdXJzZUlkKQogICAgICAgICB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKIAogICAgICAgICBDb25uZWN0aW9uIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKQEAgLTIwNywxNCArMjA3LDE0IEBACiAgICAgICAgIGNvbi5jbG9zZSgpOwogICAgIH0KIAotICAgIHByaXZhdGUgQXJyYXlMaXN0IHNlbGVjdFN0dWRlbnQoU3RyaW5nIGNvdXJzZUlkKSAKKyAgICBwcml2YXRlIEFycmF5TGlzdCBzZWxlY3RTdHVkZW50KFN0cmluZyBjb3Vyc2VJZCkKICAgICAgICAgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAKICAgICAgICAgQ29ubmVjdGlvbiBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7CiAgICAgICAgIFN0cmluZyBzZWxlY3RTdGF0ZW1lbnQgPQogICAgICAgICAgICAgInNlbGVjdCBzdHVkZW50aWQgIiArCiAgICAgICAgICAgICAiZnJvbSBSZWFkT25seUVucm9sbG1lbnQgd2hlcmUgY291cnNlaWQgPSA/ICI7Ci0gICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHByZXBTdG10ID0gCisgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHByZXBTdG10ID0KICAgICAgICAgICAgIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNlbGVjdFN0YXRlbWVudCk7CiAKICAgICAgICAgcHJlcFN0bXQuc2V0U3RyaW5nKDEsIGNvdXJzZUlkKTsKQEAgLTIzMSwxNCArMjMxLDE0IEBACiAgICAgICAgIHJldHVybiBhOwogICAgIH0KIAotICAgIHByaXZhdGUgQXJyYXlMaXN0IHNlbGVjdENvdXJzZShTdHJpbmcgc3R1ZGVudElkKSAKKyAgICBwcml2YXRlIEFycmF5TGlzdCBzZWxlY3RDb3Vyc2UoU3RyaW5nIHN0dWRlbnRJZCkKICAgICAgICAgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAKICAgICAgICAgQ29ubmVjdGlvbiBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7CiAgICAgICAgIFN0cmluZyBzZWxlY3RTdGF0ZW1lbnQgPQogICAgICAgICAgICAgInNlbGVjdCBjb3Vyc2VpZCAiICsKICAgICAgICAgICAgICJmcm9tIFJlYWRPbmx5RW5yb2xsbWVudCB3aGVyZSBzdHVkZW50aWQgPSA/ICI7Ci0gICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHByZXBTdG10ID0gCisgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHByZXBTdG10ID0KICAgICAgICAgICAgIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNlbGVjdFN0YXRlbWVudCk7CiAKICAgICAgICAgcHJlcFN0bXQuc2V0U3RyaW5nKDEsIHN0dWRlbnRJZCk7CkBAIC0yODMsNyArMjgzLDcgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gc3RhdHVzOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIHRlc3RSZWFkT25seUJlYW5Mb2NhbENyZWF0ZShTdHJpbmcgc3R1ZGVudElkLCBTdHJpbmcgbmFtZSkgewogICAgICAgICBib29sZWFuIHN0YXR1cyA9IGZhbHNlOwogCkBAIC0yOTMsMTMgKzI5MywxMyBAQAogCiAgICAgICAgICAgICBzdHVkZW50TG9jYWxIb21lLmNyZWF0ZShzdHVkZW50SWQsIG5hbWUpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFcnJvci4gIFNob3VsZCBoYXZlIGdvdHRlbiBDcmVhdGVFeGNlcHRpb24gaW4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIHRlc3RSZWFkT25seUJlYW5Mb2NhbENyZWF0ZSIpOyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiB0ZXN0UmVhZE9ubHlCZWFuTG9jYWxDcmVhdGUiKTsKICAgICAgICAgfSBjYXRjaChDcmVhdGVFeGNlcHRpb24gY2UpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGdvdCBDcmVhdGVFeGNlcHRpb24gd2hlbiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXR0ZW1wdGluZyB0byBjcmVhdGUgYSByZWFkLW9ubHkgYmVhbiIpOwogICAgICAgICAgICAgc3RhdHVzID0gdHJ1ZTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgdW5leHBlY3RlZCBleGNlcHRpb24gaW4gIiArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgdW5leHBlY3RlZCBleGNlcHRpb24gaW4gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3RSZWFkT25seUJlYW5Mb2NhbENyZWF0ZSIpOwogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQpAQCAtMzE2LDcgKzMxNiw3IEBACiAgICAgICAgICAgICAgICAgY29tLnN1bi5hcHBzZXJ2LmVqYi5SZWFkT25seUJlYW5Ob3RpZmllcgogICAgICAgICAgICAgICAgIG5vdGlmaWVyID0gY29tLnN1bi5hcHBzZXJ2LmVqYi5SZWFkT25seUJlYW5IZWxwZXIuCiAgICAgICAgICAgICAgICAgICAgIGdldFJlYWRPbmx5QmVhbk5vdGlmaWVyKCJqYXZhOmNvbXAvZW52L2VqYi9TdHVkZW50Iik7Ci0gICAgCisKICAgICAgICAgICAgICAgICBub3RpZmllci5yZWZyZXNoKHN0dWRlbnRJZCk7CiAgICAgICAgICAgICAgICAgc3RhdHVzID0gdHJ1ZTsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0zMjQsNyArMzI0LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIioqKioqKiogdGVzdFJlYWRPbmx5QmVhblN0dWRlbnRSZWZyZXNoICoqKioiKTsKLSAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOyAKKyAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCIqKioqKioqIHRlc3RSZWFkT25seUJlYW5TdHVkZW50UmVmcmVzaCAqKioqIik7CiAgICAgICAgIH0KIApAQCAtMzQxLDcgKzM0MSw3IEBACiAgICAgICAgICAgICAgICAgY29tLnN1bi5hcHBzZXJ2LmVqYi5SZWFkT25seUJlYW5Mb2NhbE5vdGlmaWVyCiAgICAgICAgICAgICAgICAgbm90aWZpZXIgPSBjb20uc3VuLmFwcHNlcnYuZWpiLlJlYWRPbmx5QmVhbkhlbHBlci4KICAgICAgICAgICAgICAgICAgICAgZ2V0UmVhZE9ubHlCZWFuTG9jYWxOb3RpZmllcigiamF2YTpjb21wL2Vudi9lamIvU3R1ZGVudExvY2FsIik7Ci0gICAgCisKICAgICAgICAgICAgICAgICBub3RpZmllci5yZWZyZXNoKHN0dWRlbnRJZCk7CiAgICAgICAgICAgICAgICAgc3RhdHVzID0gdHJ1ZTsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0zNDksNyArMzQ5LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIioqKioqKiogdGVzdFJlYWRPbmx5QmVhbkxvY2FsU3R1ZGVudFJlZnJlc2ggKioqKiIpOwotICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7IAorICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIioqKioqKiogdGVzdFJlYWRPbmx5QmVhbkxvY2FsU3R1ZGVudFJlZnJlc2ggKioqKiIpOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvcmVhZG9ubHkvZWpiL1N0dWRlbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvcmVhZG9ubHkvZWpiL1N0dWRlbnQuamF2YQppbmRleCAwZTUwOGIyLi5mMGJiMjdlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3JlYWRvbmx5L2VqYi9TdHVkZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9yZWFkb25seS9lamIvU3R1ZGVudC5qYXZhCkBAIC0yMiw5ICsyMiw5IEBACiAKIAogcHVibGljIGludGVyZmFjZSBTdHVkZW50IGV4dGVuZHMgRUpCT2JqZWN0IHsKLSAKKwogICAvKioKLSAgICogUmV0dXJucyB0aGUgQ291cnNlSWRzIHRoYXQgYSBzdHVkZW50IGlzIGVucm9sbGVkIGluLiAKKyAgICogUmV0dXJucyB0aGUgQ291cnNlSWRzIHRoYXQgYSBzdHVkZW50IGlzIGVucm9sbGVkIGluLgogICAgKiBAcGFyYW0gc3R1ZGVudElkIHByaW1hcnkga2V5IG9mIHRoZSBzdHVkZW50IG9iamVjdAogICAgKiBAcGFyYW0gY291cnNlSWQgcHJpbWFyeSBrZXkgb2YgdGhlIGNvdXJzZSBvYmplY3QKICAgICogQGV4Y2VwdGlvbiBSZW1vdGVFeGNlcHRpb24KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvcmVhZG9ubHkvZWpiL1N0dWRlbnRCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3JlYWRvbmx5L2VqYi9TdHVkZW50QmVhbi5qYXZhCmluZGV4IDI0NWQ0MjUuLjEyMzQ4MTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvcmVhZG9ubHkvZWpiL1N0dWRlbnRCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9yZWFkb25seS9lamIvU3R1ZGVudEJlYW4uamF2YQpAQCAtNjksMTAgKzY5LDEwIEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTm90aWZ5aW5nIHJlYWQtb25seSBiZWFuIG9mIHVwZGF0ZSB0byAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlYWQtbW9zdGx5IFN0dWRlbnQgIiArIG5hbWUpOwotICAgICAgICAgICAgICAgIFJlYWRPbmx5QmVhbk5vdGlmaWVyIHN0dWRlbnROb3RpZmllciA9IAorICAgICAgICAgICAgICAgIFJlYWRPbmx5QmVhbk5vdGlmaWVyIHN0dWRlbnROb3RpZmllciA9CiAgICAgICAgICAgICAgICAgICAgIFJlYWRPbmx5QmVhbkhlbHBlci5nZXRSZWFkT25seUJlYW5Ob3RpZmllcgogICAgICAgICAgICAgICAgICAgICAoImphdmE6Y29tcC9lbnYvZWpiL1JlYWRPbmx5U3R1ZGVudCIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIHJlYWQtb25seSB2ZXJzaW9uCiAgICAgICAgICAgICAgICAgc3R1ZGVudE5vdGlmaWVyLnJlZnJlc2goc3R1ZGVudElkKTsKICAgICAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKQEAgLTEyMyw3ICsxMjMsNyBAQAogICAgICAgICBjb3Vyc2VJZHMgPSBuZXcgQXJyYXlMaXN0KCk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICAgICAgICAgZGF0YVNvdXJjZSA9IAorICAgICAgICAgICAgZGF0YVNvdXJjZSA9CiAgICAgICAgICAgICAgICAgKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9qZGJjL2JtcC1yZWFkb25seURCIik7CiAgICAgICAgICAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvRW5yb2xsZXIiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvcmVhZG9ubHkvZWpiL1N0dWRlbnRIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3JlYWRvbmx5L2VqYi9TdHVkZW50SG9tZS5qYXZhCmluZGV4IDViOGM0OTguLmNkYTk3ZWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvcmVhZG9ubHkvZWpiL1N0dWRlbnRIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9yZWFkb25seS9lamIvU3R1ZGVudEhvbWUuamF2YQpAQCAtMzYsNyArMzYsNyBAQAogICAgICAqIEBleGNlcHRpb24gdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiBhbmQgUmVtb3RlRXhjZXB0aW9uLgogICAgICAqCiAgICAgICovCi0gCi0gICAgcHVibGljIFN0dWRlbnQgZmluZEJ5UHJpbWFyeUtleShTdHJpbmcgc3R1ZGVudElkKSAKKworICAgIHB1YmxpYyBTdHVkZW50IGZpbmRCeVByaW1hcnlLZXkoU3RyaW5nIHN0dWRlbnRJZCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9yZWFkb25seS9lamIvU3R1ZGVudExvY2FsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3JlYWRvbmx5L2VqYi9TdHVkZW50TG9jYWwuamF2YQppbmRleCA3ZDJmZDI4Li5kMDU3MDNjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3JlYWRvbmx5L2VqYi9TdHVkZW50TG9jYWwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3JlYWRvbmx5L2VqYi9TdHVkZW50TG9jYWwuamF2YQpAQCAtMjAsMTIgKzIwLDEyIEBACiBpbXBvcnQgamFrYXJ0YS5lamIuRUpCTG9jYWxPYmplY3Q7CiAKIHB1YmxpYyBpbnRlcmZhY2UgU3R1ZGVudExvY2FsIGV4dGVuZHMgRUpCTG9jYWxPYmplY3QgewotIAorCiAgIC8qKgotICAgKiBSZXR1cm5zIHRoZSBDb3Vyc2VJZHMgdGhhdCBhIHN0dWRlbnQgaXMgZW5yb2xsZWQgaW4uIAorICAgKiBSZXR1cm5zIHRoZSBDb3Vyc2VJZHMgdGhhdCBhIHN0dWRlbnQgaXMgZW5yb2xsZWQgaW4uCiAgICAqIEBwYXJhbSBzdHVkZW50SWQgcHJpbWFyeSBrZXkgb2YgdGhlIHN0dWRlbnQgb2JqZWN0CiAgICAqIEBwYXJhbSBjb3Vyc2VJZCBwcmltYXJ5IGtleSBvZiB0aGUgY291cnNlIG9iamVjdAotICAgKiAKKyAgICoKICAgICovCiAgICBwdWJsaWMgQXJyYXlMaXN0IGdldENvdXJzZUlkcygpOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3JlYWRvbmx5L2VqYi9TdHVkZW50TG9jYWxIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3JlYWRvbmx5L2VqYi9TdHVkZW50TG9jYWxIb21lLmphdmEKaW5kZXggYzc5NTg4Zi4uN2ZjYTVjMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9yZWFkb25seS9lamIvU3R1ZGVudExvY2FsSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvcmVhZG9ubHkvZWpiL1N0dWRlbnRMb2NhbEhvbWUuamF2YQpAQCAtMzYsNyArMzYsNyBAQAogICAgICAqIEBleGNlcHRpb24gdGhyb3dzIEZpbmRlckV4Y2VwdGlvbi4KICAgICAgKgogICAgICAqLwotIAotICAgIHB1YmxpYyBTdHVkZW50IGZpbmRCeVByaW1hcnlLZXkoU3RyaW5nIHN0dWRlbnRJZCkgCisKKyAgICBwdWJsaWMgU3R1ZGVudCBmaW5kQnlQcmltYXJ5S2V5KFN0cmluZyBzdHVkZW50SWQpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3JlYWRvbmx5L3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvcmVhZG9ubHkvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IGY3YWY1YzguLjdlZTlmY2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvcmVhZG9ubHkvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvcmVhZG9ubHkvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDQ1ICsxLDQ1IEBACi1jcmVhdGUgdGFibGUgUmVhZE9ubHlTdHVkZW50IA0KLShzdHVkZW50aWQgdmFyY2hhcigxNSkgY29uc3RyYWludCBwa19SZWFkT25seXN0dWRlbnQgcHJpbWFyeSBrZXkgbm90IG51bGwsICANCi1uYW1lIHZhcmNoYXIoMzYpKTsNCi0NCi1pbnNlcnQgaW50byBSZWFkT25seVN0dWRlbnQNCi12YWx1ZXMgKCdzdHVkZW50MCcsICdTdHVkZW50X0lEXzAnKTsNCi1pbnNlcnQgaW50byBSZWFkT25seVN0dWRlbnQNCi12YWx1ZXMgKCdzdHVkZW50MScsICdTdHVkZW50X0lEXzEnKTsNCi1pbnNlcnQgaW50byBSZWFkT25seVN0dWRlbnQNCi12YWx1ZXMgKCdzdHVkZW50MicsICdTdHVkZW50X0lEXzInKTsNCi1pbnNlcnQgaW50byBSZWFkT25seVN0dWRlbnQNCi12YWx1ZXMgKCdzdHVkZW50MycsICdTdHVkZW50X0lEXzMnKTsNCi1pbnNlcnQgaW50byBSZWFkT25seVN0dWRlbnQNCi12YWx1ZXMgKCdzdHVkZW50NCcsICdTdHVkZW50X0lEXzQnKTsNCi1pbnNlcnQgaW50byBSZWFkT25seVN0dWRlbnQNCi12YWx1ZXMgKCdzdHVkZW50NScsICdTdHVkZW50X0lEXzUnKTsNCi0NCi0NCi1jcmVhdGUgdGFibGUgUmVhZE9ubHlDb3Vyc2UgDQotKGNvdXJzZWlkIHZhcmNoYXIoMTUpIGNvbnN0cmFpbnQgcGtfUmVhZE9ubHljb3Vyc2UgcHJpbWFyeSBrZXkgbm90IG51bGwsICANCi1uYW1lIHZhcmNoYXIoMzYpKTsNCi0NCi1pbnNlcnQgaW50byBSZWFkT25seUNvdXJzZQ0KLXZhbHVlcyAoJ2NvdXJzZTAnLCAnQ291cnNlX0lEXzAnKTsNCi1pbnNlcnQgaW50byBSZWFkT25seUNvdXJzZQ0KLXZhbHVlcyAoJ2NvdXJzZTEnLCAnQ291cnNlX0lEXzEnKTsNCi1pbnNlcnQgaW50byBSZWFkT25seUNvdXJzZQ0KLXZhbHVlcyAoJ2NvdXJzZTInLCAnQ291cnNlX0lEXzInKTsNCi1pbnNlcnQgaW50byBSZWFkT25seUNvdXJzZQ0KLXZhbHVlcyAoJ2NvdXJzZTMnLCAnQ291cnNlX0lEXzMnKTsNCi1pbnNlcnQgaW50byBSZWFkT25seUNvdXJzZQ0KLXZhbHVlcyAoJ2NvdXJzZTQnLCAnQ291cnNlX0lEXzQnKTsNCi1pbnNlcnQgaW50byBSZWFkT25seUNvdXJzZQ0KLXZhbHVlcyAoJ2NvdXJzZTUnLCAnQ291cnNlX0lEXzUnKTsNCi0NCi1jcmVhdGUgdGFibGUgUmVhZE9ubHlFbnJvbGxtZW50DQotKHN0dWRlbnRpZCB2YXJjaGFyKDE1KSwgIA0KLWNvdXJzZWlkIHZhcmNoYXIoMTUpLCAgDQotY29uc3RyYWludCBma19zdHVkZW50aWQNCi1mb3JlaWduIGtleSAoc3R1ZGVudGlkKQ0KLXJlZmVyZW5jZXMgUmVhZE9ubHlzdHVkZW50KHN0dWRlbnRpZCksDQotY29uc3RyYWludCBma19jb3Vyc2VpZA0KLWZvcmVpZ24ga2V5IChjb3Vyc2VpZCkNCi1yZWZlcmVuY2VzIFJlYWRPbmx5Y291cnNlKGNvdXJzZWlkKSk7DQotDQorY3JlYXRlIHRhYmxlIFJlYWRPbmx5U3R1ZGVudAorKHN0dWRlbnRpZCB2YXJjaGFyKDE1KSBjb25zdHJhaW50IHBrX1JlYWRPbmx5c3R1ZGVudCBwcmltYXJ5IGtleSBub3QgbnVsbCwKK25hbWUgdmFyY2hhcigzNikpOworCitpbnNlcnQgaW50byBSZWFkT25seVN0dWRlbnQKK3ZhbHVlcyAoJ3N0dWRlbnQwJywgJ1N0dWRlbnRfSURfMCcpOworaW5zZXJ0IGludG8gUmVhZE9ubHlTdHVkZW50Cit2YWx1ZXMgKCdzdHVkZW50MScsICdTdHVkZW50X0lEXzEnKTsKK2luc2VydCBpbnRvIFJlYWRPbmx5U3R1ZGVudAordmFsdWVzICgnc3R1ZGVudDInLCAnU3R1ZGVudF9JRF8yJyk7CitpbnNlcnQgaW50byBSZWFkT25seVN0dWRlbnQKK3ZhbHVlcyAoJ3N0dWRlbnQzJywgJ1N0dWRlbnRfSURfMycpOworaW5zZXJ0IGludG8gUmVhZE9ubHlTdHVkZW50Cit2YWx1ZXMgKCdzdHVkZW50NCcsICdTdHVkZW50X0lEXzQnKTsKK2luc2VydCBpbnRvIFJlYWRPbmx5U3R1ZGVudAordmFsdWVzICgnc3R1ZGVudDUnLCAnU3R1ZGVudF9JRF81Jyk7CisKKworY3JlYXRlIHRhYmxlIFJlYWRPbmx5Q291cnNlCisoY291cnNlaWQgdmFyY2hhcigxNSkgY29uc3RyYWludCBwa19SZWFkT25seWNvdXJzZSBwcmltYXJ5IGtleSBub3QgbnVsbCwKK25hbWUgdmFyY2hhcigzNikpOworCitpbnNlcnQgaW50byBSZWFkT25seUNvdXJzZQordmFsdWVzICgnY291cnNlMCcsICdDb3Vyc2VfSURfMCcpOworaW5zZXJ0IGludG8gUmVhZE9ubHlDb3Vyc2UKK3ZhbHVlcyAoJ2NvdXJzZTEnLCAnQ291cnNlX0lEXzEnKTsKK2luc2VydCBpbnRvIFJlYWRPbmx5Q291cnNlCit2YWx1ZXMgKCdjb3Vyc2UyJywgJ0NvdXJzZV9JRF8yJyk7CitpbnNlcnQgaW50byBSZWFkT25seUNvdXJzZQordmFsdWVzICgnY291cnNlMycsICdDb3Vyc2VfSURfMycpOworaW5zZXJ0IGludG8gUmVhZE9ubHlDb3Vyc2UKK3ZhbHVlcyAoJ2NvdXJzZTQnLCAnQ291cnNlX0lEXzQnKTsKK2luc2VydCBpbnRvIFJlYWRPbmx5Q291cnNlCit2YWx1ZXMgKCdjb3Vyc2U1JywgJ0NvdXJzZV9JRF81Jyk7CisKK2NyZWF0ZSB0YWJsZSBSZWFkT25seUVucm9sbG1lbnQKKyhzdHVkZW50aWQgdmFyY2hhcigxNSksCitjb3Vyc2VpZCB2YXJjaGFyKDE1KSwKK2NvbnN0cmFpbnQgZmtfc3R1ZGVudGlkCitmb3JlaWduIGtleSAoc3R1ZGVudGlkKQorcmVmZXJlbmNlcyBSZWFkT25seXN0dWRlbnQoc3R1ZGVudGlkKSwKK2NvbnN0cmFpbnQgZmtfY291cnNlaWQKK2ZvcmVpZ24ga2V5IChjb3Vyc2VpZCkKK3JlZmVyZW5jZXMgUmVhZE9ubHljb3Vyc2UoY291cnNlaWQpKTsKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9yZWFkb25seS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9yZWFkb25seS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IDZiMGE2ZTQuLjgwNjc0OTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvcmVhZG9ubHkvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3JlYWRvbmx5L3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEsMyArMSwzIEBACi1kcm9wIHRhYmxlIFJlYWRPbmx5RW5yb2xsbWVudDsNCi1kcm9wIHRhYmxlIFJlYWRPbmx5U3R1ZGVudDsNCi1kcm9wIHRhYmxlIFJlYWRPbmx5Q291cnNlOw0KK2Ryb3AgdGFibGUgUmVhZE9ubHlFbnJvbGxtZW50OworZHJvcCB0YWJsZSBSZWFkT25seVN0dWRlbnQ7Citkcm9wIHRhYmxlIFJlYWRPbmx5Q291cnNlOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9zaW1wbGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvc2ltcGxlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggM2ZlYjM3OS4uOTY2ODA2OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9zaW1wbGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3NpbXBsZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOCArMTUsMTggQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1ibXAtc2ltcGxlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3NpbXBsZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3NpbXBsZS9idWlsZC54bWwKaW5kZXggYTc4ZmE0MC4uOTNhMjRiYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9zaW1wbGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvc2ltcGxlL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsMzQgKzQ4LDM0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi9TaW1wbGVCTVAuY2xhc3MsICoqL1NpbXBsZUJNUEhvbWUuY2xhc3MsKiovKkNsaWVudCouY2xhc3MiIC8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLWVqYi1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX3BvaW50YmFzZS5zcWwiLz4KICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9zaW1wbGUvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9zaW1wbGUvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhCmluZGV4IDVmMDc0OWUuLmU0YmRjYTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvc2ltcGxlL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3NpbXBsZS9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKQEAgLTM1LDE5ICszNSwxOSBAQAogICAgIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlRlc3RpbmcgYm1wIHNpbXBsZSBhcHAuIik7Ci0JICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBPYmplY3Qgb2JqUmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVCTVBIb21lIik7Ci0JICAgIFNpbXBsZUJNUEhvbWUgc2ltcGxlQk1QSG9tZSA9IChTaW1wbGVCTVBIb21lKQorICAgICAgICBTaW1wbGVCTVBIb21lIHNpbXBsZUJNUEhvbWUgPSAoU2ltcGxlQk1QSG9tZSkKICAgICAgICAgICAgICAgICBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ialJlZiwgU2ltcGxlQk1QSG9tZS5jbGFzcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaW50IGlkPSAoaW50KSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGFydGluZyB0ZXN0IGZvciBpZDogIiArIGlkKTsKLQkgICAgU2ltcGxlQk1QIHNpbXBsZUJNUCA9IHNpbXBsZUJNUEhvbWUuY3JlYXRlKGlkKTsKLQkgICAgc2ltcGxlQk1QLmZvbygpOwotICAgICAgICAgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhcnRpbmcgdGVzdCBmb3IgaWQ6ICIgKyBpZCk7CisgICAgICAgIFNpbXBsZUJNUCBzaW1wbGVCTVAgPSBzaW1wbGVCTVBIb21lLmNyZWF0ZShpZCk7CisgICAgICAgIHNpbXBsZUJNUC5mb28oKTsKKwogICAgICAgICAgICAgU2ltcGxlQk1QIGJlYW4gPSBzaW1wbGVCTVBIb21lLmZpbmRCeVByaW1hcnlLZXkobmV3IEludGVnZXIoaWQpKTsKLQkgICAgc2ltcGxlQk1QLmZvbygpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRvbmUgZm9yIGlkOiAiICsgaWQpOworICAgICAgICBzaW1wbGVCTVAuZm9vKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRG9uZSBmb3IgaWQ6ICIgKyBpZCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiYm1wIHNpbXBsZSIsIHN0YXQuUEFTUyk7CiAKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9zaW1wbGUvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvc2ltcGxlL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggZmFlNGU4NC4uY2ZlMGQ2OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9zaW1wbGUvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3NpbXBsZS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC01NSw2ICs1NSw2IEBACiAgICAgICA8dHJhbnMtYXR0cmlidXRlPlJlcXVpcmVkPC90cmFucy1hdHRyaWJ1dGU+CiAgICAgPC9jb250YWluZXItdHJhbnNhY3Rpb24+CiAgIDwvYXNzZW1ibHktZGVzY3JpcHRvcj4KLSAgICAgIAorCiA8L2VqYi1qYXI+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvc2ltcGxlL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3NpbXBsZS9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCmluZGV4IGI1ZWIyNmQuLmU2MTliYzkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvc2ltcGxlL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9zaW1wbGUvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQpAQCAtMzEsMTQ4ICszMSwxNDggQEAKICAgICBpbnQgaWQ7CiAKICAgICBwdWJsaWMgdm9pZCBzZXRFbnRpdHlDb250ZXh0KEVudGl0eUNvbnRleHQgZW50aXR5Q29udGV4dCkgewotCUNvbnRleHQgY29udGV4dCA9IG51bGw7Ci0JdHJ5IHsKLQkgICAgY29udGV4dCAgICA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCSAgICBkcyA9IChEYXRhU291cmNlKSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7Ci0JfSBjYXRjaCAoTmFtaW5nRXhjZXB0aW9uIGUpIHsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiY2FudCBmaW5kIGRhdGFzb3VyY2UiKTsKLQl9CisgICAgQ29udGV4dCBjb250ZXh0ID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgICBjb250ZXh0ICAgID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgIGRzID0gKERhdGFTb3VyY2UpIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKKyAgICB9IGNhdGNoIChOYW1pbmdFeGNlcHRpb24gZSkgeworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJjYW50IGZpbmQgZGF0YXNvdXJjZSIpOworICAgIH0KICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlsqKlNpbXBsZUJNUEJlYW4qKl0gRG9uZSB3aXRoIHNldEVudGl0eUNvbnRleHQuLi4uIik7CiAgICAgfQogCiAgICAgcHVibGljIEludGVnZXIgZWpiQ3JlYXRlKGludCBpKSB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsKIAotCUNvbm5lY3Rpb24gYyA9IG51bGw7Ci0gICAgIAlQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7Ci0JdHJ5IHsKLQkgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgCSAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKLQkJIklOU0VSVCBJTlRPIE9fY3VzdG9tZXIgKGNfaWQsIGNfcGhvbmUpIFZBTFVFUyAoPyw/KSIpOwotCSAgICBwcy5zZXRJbnQoMSwgaSk7Ci0JICAgIHBzLnNldFN0cmluZygyLCAiNTUwLTEyMTIiKTsKLQkgICAgaWYgKHBzLmV4ZWN1dGVVcGRhdGUoKSAhPSAxKQotCQl0aHJvdyBuZXcgQ3JlYXRlRXhjZXB0aW9uKCJEaWRudCBjcmVhdGUgZWpiIik7CisgICAgQ29ubmVjdGlvbiBjID0gbnVsbDsKKyAgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHBzID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICAgICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAorICAgICAgICAiSU5TRVJUIElOVE8gT19jdXN0b21lciAoY19pZCwgY19waG9uZSkgVkFMVUVTICg/LD8pIik7CisgICAgICAgIHBzLnNldEludCgxLCBpKTsKKyAgICAgICAgcHMuc2V0U3RyaW5nKDIsICI1NTAtMTIxMiIpOworICAgICAgICBpZiAocHMuZXhlY3V0ZVVwZGF0ZSgpICE9IDEpCisgICAgICAgIHRocm93IG5ldyBDcmVhdGVFeGNlcHRpb24oIkRpZG50IGNyZWF0ZSBlamIiKTsKICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlsqKlNpbXBsZUJNUEJlYW4qKl0gRG9uZSB3aXRoIGVqYkNyZWF0ZS4uLi4iKTsKLQl9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKLQkgICAgdGhyb3cgbmV3IENyZWF0ZUV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7Ci0JfSBmaW5hbGx5IHsgCi0JICAgIHRyeSB7Ci0JCWlmIChwcyAhPSBudWxsKQotCQkgICAgcHMuY2xvc2UoKTsKLQkJaWYgKGMgIT0gbnVsbCkKLQkJICAgIGMuY2xvc2UoKTsKLQkgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9Ci0JfQotCWlkID0gaTsKLQlyZXR1cm4gbmV3IEludGVnZXIoaSk7CisgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7CisgICAgICAgIHRocm93IG5ldyBDcmVhdGVFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOworICAgIH0gZmluYWxseSB7CisgICAgICAgIHRyeSB7CisgICAgICAgIGlmIChwcyAhPSBudWxsKQorICAgICAgICAgICAgcHMuY2xvc2UoKTsKKyAgICAgICAgaWYgKGMgIT0gbnVsbCkKKyAgICAgICAgICAgIGMuY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9CisgICAgfQorICAgIGlkID0gaTsKKyAgICByZXR1cm4gbmV3IEludGVnZXIoaSk7CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gaXNTZXJ2aWNlZEJ5KFN0cmluZyB0aHJlYWRQb29sSUQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbKipTaW1wbGVCTVBCZWFuKipdICIKLQkgICAgKyAiLiBSZXF1ZXN0IHNlcnZpY2VkIGJ5OiIgKyBUaHJlYWQuY3VycmVudFRocmVhZCgpKTsKKyAgICAgICAgKyAiLiBSZXF1ZXN0IHNlcnZpY2VkIGJ5OiIgKyBUaHJlYWQuY3VycmVudFRocmVhZCgpKTsKICAgICAgICAgU3RyaW5nIHRocmVhZElEID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCk7Ci0JcmV0dXJuICh0aHJlYWRJRC5pbmRleE9mKHRocmVhZFBvb2xJRC50b0xvd2VyQ2FzZSgpKSAhPSAtMSk7CisgICAgcmV0dXJuICh0aHJlYWRJRC5pbmRleE9mKHRocmVhZFBvb2xJRC50b0xvd2VyQ2FzZSgpKSAhPSAtMSk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZm9vKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlsqKlNpbXBsZUJNUEJlYW4qKl0gWyIKLQkgICAgKyBUaHJlYWQuY3VycmVudFRocmVhZCgpICsgIl0gRG9uZSB3aXRoIGZvby4uLi4iKTsKKyAgICAgICAgKyBUaHJlYWQuY3VycmVudFRocmVhZCgpICsgIl0gRG9uZSB3aXRoIGZvby4uLi4iKTsKICAgICB9CiAKICAgICBwdWJsaWMgSW50ZWdlciBlamJGaW5kQnlQcmltYXJ5S2V5KEludGVnZXIga2V5KSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uIHsKLQlDb25uZWN0aW9uIGMgPSBudWxsOwotICAgICAJUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOwotCXRyeSB7Ci0JICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgIAkgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCi0JCSJTRUxFQ1QgY19waG9uZSBmcm9tIE9fY3VzdG9tZXIgd2hlcmUgY19pZCA9ID8iKTsKLQkgICAgcHMuc2V0SW50KDEsIGtleS5pbnRWYWx1ZSgpKTsKLQkgICAgUmVzdWx0U2V0IHJzID0gcHMuZXhlY3V0ZVF1ZXJ5KCk7Ci0JICAgIGlmICghcnMubmV4dCgpKQotCSAgICAgICB0aHJvdyBuZXcgRmluZGVyRXhjZXB0aW9uKCJObyBjdXN0IGZvciAiICsgaWQpOwotCSAgICBTdHJpbmcgcGhvbmUgPSBycy5nZXRTdHJpbmcoMSk7Ci0JICAgIHJldHVybiBrZXk7Ci0JfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7Ci0JICAgIHRocm93IG5ldyBGaW5kZXJFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOwotCX0gZmluYWxseSB7IAotCSAgICB0cnkgewotCQlpZiAocHMgIT0gbnVsbCkKLQkJICAgIHBzLmNsb3NlKCk7Ci0JCWlmIChjICE9IG51bGwpCi0JCSAgICBjLmNsb3NlKCk7Ci0JICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQotCX0KKyAgICBDb25uZWN0aW9uIGMgPSBudWxsOworICAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgICAgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCisgICAgICAgICJTRUxFQ1QgY19waG9uZSBmcm9tIE9fY3VzdG9tZXIgd2hlcmUgY19pZCA9ID8iKTsKKyAgICAgICAgcHMuc2V0SW50KDEsIGtleS5pbnRWYWx1ZSgpKTsKKyAgICAgICAgUmVzdWx0U2V0IHJzID0gcHMuZXhlY3V0ZVF1ZXJ5KCk7CisgICAgICAgIGlmICghcnMubmV4dCgpKQorICAgICAgICAgICB0aHJvdyBuZXcgRmluZGVyRXhjZXB0aW9uKCJObyBjdXN0IGZvciAiICsgaWQpOworICAgICAgICBTdHJpbmcgcGhvbmUgPSBycy5nZXRTdHJpbmcoMSk7CisgICAgICAgIHJldHVybiBrZXk7CisgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7CisgICAgICAgIHRocm93IG5ldyBGaW5kZXJFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOworICAgIH0gZmluYWxseSB7CisgICAgICAgIHRyeSB7CisgICAgICAgIGlmIChwcyAhPSBudWxsKQorICAgICAgICAgICAgcHMuY2xvc2UoKTsKKyAgICAgICAgaWYgKGMgIT0gbnVsbCkKKyAgICAgICAgICAgIGMuY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7Ci0JQ29ubmVjdGlvbiBjID0gbnVsbDsKLSAgICAgCVByZXBhcmVkU3RhdGVtZW50IHBzID0gbnVsbDsKLQl0cnkgewotCSAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAJICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAotCQkiU0VMRUNUIGNfcGhvbmUgZnJvbSBPX2N1c3RvbWVyIHdoZXJlIGNfaWQgPSA/Iik7Ci0JICAgIHBzLnNldEludCgxLCBpZCk7Ci0JICAgIFJlc3VsdFNldCBycyA9IHBzLmV4ZWN1dGVRdWVyeSgpOwotCSAgICBpZiAoIXJzLm5leHQoKSkKLQkgICAgICAgdGhyb3cgbmV3IE5vU3VjaEVudGl0eUV4Y2VwdGlvbigiTm8gY3VzdCBmb3IgIiArIGlkKTsKLQkgICAgU3RyaW5nIHBob25lID0gcnMuZ2V0U3RyaW5nKDEpOwotCX0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAgewotCSAgICB0aHJvdyBuZXcgTm9TdWNoRW50aXR5RXhjZXB0aW9uKCJTUUwgZXhjZXB0aW9uICIgKyBlKTsKLQl9IGZpbmFsbHkgeyAKLQkgICAgdHJ5IHsKLQkJaWYgKHBzICE9IG51bGwpCi0JCSAgICBwcy5jbG9zZSgpOwotCQlpZiAoYyAhPSBudWxsKQotCQkgICAgYy5jbG9zZSgpOwotCSAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KLQl9CisgICAgQ29ubmVjdGlvbiBjID0gbnVsbDsKKyAgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHBzID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICAgICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAorICAgICAgICAiU0VMRUNUIGNfcGhvbmUgZnJvbSBPX2N1c3RvbWVyIHdoZXJlIGNfaWQgPSA/Iik7CisgICAgICAgIHBzLnNldEludCgxLCBpZCk7CisgICAgICAgIFJlc3VsdFNldCBycyA9IHBzLmV4ZWN1dGVRdWVyeSgpOworICAgICAgICBpZiAoIXJzLm5leHQoKSkKKyAgICAgICAgICAgdGhyb3cgbmV3IE5vU3VjaEVudGl0eUV4Y2VwdGlvbigiTm8gY3VzdCBmb3IgIiArIGlkKTsKKyAgICAgICAgU3RyaW5nIHBob25lID0gcnMuZ2V0U3RyaW5nKDEpOworICAgIH0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAgeworICAgICAgICB0aHJvdyBuZXcgTm9TdWNoRW50aXR5RXhjZXB0aW9uKCJTUUwgZXhjZXB0aW9uICIgKyBlKTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICB0cnkgeworICAgICAgICBpZiAocHMgIT0gbnVsbCkKKyAgICAgICAgICAgIHBzLmNsb3NlKCk7CisgICAgICAgIGlmIChjICE9IG51bGwpCisgICAgICAgICAgICBjLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQorICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJTdG9yZSgpIHsKLQlDb25uZWN0aW9uIGMgPSBudWxsOwotICAgICAJUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOwotCXRyeSB7Ci0JICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgIAkgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCi0JCSJVUERBVEUgT19jdXN0b21lciBTRVQgY19waG9uZSA9ID8gV0hFUkUgY19pZCA9ID8iKTsKLQkgICAgcHMuc2V0U3RyaW5nKDEsICI1NTAtMTIxMiIpOwotCSAgICBwcy5zZXRJbnQoMiwgaWQpOwotCSAgICBpZiAocHMuZXhlY3V0ZVVwZGF0ZSgpICE9IDEpCi0JCXRocm93IG5ldyBFSkJFeGNlcHRpb24oIkRpZG50IHN0b3JlIGVqYiIpOworICAgIENvbm5lY3Rpb24gYyA9IG51bGw7CisgICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgICAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKKyAgICAgICAgIlVQREFURSBPX2N1c3RvbWVyIFNFVCBjX3Bob25lID0gPyBXSEVSRSBjX2lkID0gPyIpOworICAgICAgICBwcy5zZXRTdHJpbmcoMSwgIjU1MC0xMjEyIik7CisgICAgICAgIHBzLnNldEludCgyLCBpZCk7CisgICAgICAgIGlmIChwcy5leGVjdXRlVXBkYXRlKCkgIT0gMSkKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiRGlkbnQgc3RvcmUgZWpiIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiWyoqU2ltcGxlQk1QQmVhbioqXSBEb25lIHdpdGggZWpiU3RvcmUuLi4uIik7Ci0JfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOwotCX0gZmluYWxseSB7IAotCSAgICB0cnkgewotCQlpZiAocHMgIT0gbnVsbCkKLQkJICAgIHBzLmNsb3NlKCk7Ci0JCWlmIChjICE9IG51bGwpCi0JCSAgICBjLmNsb3NlKCk7Ci0JICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQotCX0KKyAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgaWYgKHBzICE9IG51bGwpCisgICAgICAgICAgICBwcy5jbG9zZSgpOworICAgICAgICBpZiAoYyAhPSBudWxsKQorICAgICAgICAgICAgYy5jbG9zZSgpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgdGhyb3dzIFJlbW92ZUV4Y2VwdGlvbiB7Ci0JQ29ubmVjdGlvbiBjID0gbnVsbDsKLSAgICAgCVByZXBhcmVkU3RhdGVtZW50IHBzID0gbnVsbDsKLQl0cnkgewotCSAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAJICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAotCQkiREVMRVRFIEZST00gT19jdXN0b21lciBXSEVSRSBjX2lkID0gPyIpOwotCSAgICBwcy5zZXRJbnQoMSwgaWQpOwotCSAgICBpZiAocHMuZXhlY3V0ZVVwZGF0ZSgpICE9IDEpCi0JCXRocm93IG5ldyBSZW1vdmVFeGNlcHRpb24oIkRpZG50IHJlbW92ZSBlamIiKTsKLQl9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKLQkgICAgdGhyb3cgbmV3IFJlbW92ZUV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7Ci0JfSBmaW5hbGx5IHsgCi0JICAgIHRyeSB7Ci0JCWlmIChwcyAhPSBudWxsKQotCQkgICAgcHMuY2xvc2UoKTsKLQkJaWYgKGMgIT0gbnVsbCkKLQkJICAgIGMuY2xvc2UoKTsKLQkgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9Ci0JfQorICAgIENvbm5lY3Rpb24gYyA9IG51bGw7CisgICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgICAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKKyAgICAgICAgIkRFTEVURSBGUk9NIE9fY3VzdG9tZXIgV0hFUkUgY19pZCA9ID8iKTsKKyAgICAgICAgcHMuc2V0SW50KDEsIGlkKTsKKyAgICAgICAgaWYgKHBzLmV4ZWN1dGVVcGRhdGUoKSAhPSAxKQorICAgICAgICB0aHJvdyBuZXcgUmVtb3ZlRXhjZXB0aW9uKCJEaWRudCByZW1vdmUgZWpiIik7CisgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7CisgICAgICAgIHRocm93IG5ldyBSZW1vdmVFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOworICAgIH0gZmluYWxseSB7CisgICAgICAgIHRyeSB7CisgICAgICAgIGlmIChwcyAhPSBudWxsKQorICAgICAgICAgICAgcHMuY2xvc2UoKTsKKyAgICAgICAgaWYgKGMgIT0gbnVsbCkKKyAgICAgICAgICAgIGMuY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkge30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvc2ltcGxlL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvc2ltcGxlL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCBlNDkxNGY2Li5mMjU2MDc2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3NpbXBsZS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9zaW1wbGUvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDcgKzEsNyBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KLQ0KLUNSRUFURSBUQUJMRSBPX0N1c3RvbWVyICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOworCitDUkVBVEUgVEFCTEUgT19DdXN0b21lciAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3NpbXBsZS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9zaW1wbGUvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAppbmRleCA3MGQxZmNjLi5kODU0Yjk1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3NpbXBsZS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvc2ltcGxlL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEgKzEgQEAKLURyb3AgdGFibGUgT19DdXN0b21lcjsNCitEcm9wIHRhYmxlIE9fQ3VzdG9tZXI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3NpbXBsZV9ub3BhY2thZ2UvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvc2ltcGxlX25vcGFja2FnZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDFjZjNjNzYuLmNjOTAyNDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvc2ltcGxlX25vcGFja2FnZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvc2ltcGxlX25vcGFja2FnZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOCArMTUsMTggQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1ibXAtc2ltcGxlX25vcGFja2FnZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9zaW1wbGVfbm9wYWNrYWdlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvc2ltcGxlX25vcGFja2FnZS9idWlsZC54bWwKaW5kZXggNTlhYWJiOS4uMDViYzkzMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9zaW1wbGVfbm9wYWNrYWdlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3NpbXBsZV9ub3BhY2thZ2UvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OCwxMyArNDgsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqL1Rlc3QuY2xhc3MsICoqL1Rlc3RIb21lLmNsYXNzLCoqLypDbGllbnQqLmNsYXNzIiAvPgogICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtZWpiLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KQEAgLTY4LDIxICs2OCwyMSBAQAogICAgICAgLS0+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtZWpiLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLWVqYi1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgPC9hbnRjYWxsPgogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3NpbXBsZV9ub3BhY2thZ2UvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvc2ltcGxlX25vcGFja2FnZS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IDU4YjM0YWUuLjE2MWUzODMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvc2ltcGxlX25vcGFja2FnZS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvc2ltcGxlX25vcGFja2FnZS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC0yMCwyOCArMjAsMjggQEAKIAogPGVqYi1qYXI+CiAgICAgPGVudGVycHJpc2UtYmVhbnM+Ci0JPGVudGl0eT4KLQkgIDxlamItbmFtZT5UZXN0PC9lamItbmFtZT4KLQkgIDxob21lPlRlc3RIb21lPC9ob21lPgotCSAgPHJlbW90ZT5UZXN0PC9yZW1vdGU+Ci0JICA8ZWpiLWNsYXNzPlRlc3RCTVA8L2VqYi1jbGFzcz4KLQkgIDxwZXJzaXN0ZW5jZS10eXBlPkJlYW48L3BlcnNpc3RlbmNlLXR5cGU+Ci0JICA8cHJpbS1rZXktY2xhc3M+amF2YS5sYW5nLkludGVnZXI8L3ByaW0ta2V5LWNsYXNzPgotCSAgPHJlZW50cmFudD5GYWxzZTwvcmVlbnRyYW50PgotCSAgPHJlc291cmNlLXJlZj4KLQkgICAgPHJlcy1yZWYtbmFtZT5EYXRhU291cmNlPC9yZXMtcmVmLW5hbWU+Ci0JICAgIDxyZXMtdHlwZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvcmVzLXR5cGU+Ci0JICAgIDxyZXMtYXV0aD5Db250YWluZXI8L3Jlcy1hdXRoPgotCSAgPC9yZXNvdXJjZS1yZWY+Ci0JPC9lbnRpdHk+CisgICAgPGVudGl0eT4KKyAgICAgIDxlamItbmFtZT5UZXN0PC9lamItbmFtZT4KKyAgICAgIDxob21lPlRlc3RIb21lPC9ob21lPgorICAgICAgPHJlbW90ZT5UZXN0PC9yZW1vdGU+CisgICAgICA8ZWpiLWNsYXNzPlRlc3RCTVA8L2VqYi1jbGFzcz4KKyAgICAgIDxwZXJzaXN0ZW5jZS10eXBlPkJlYW48L3BlcnNpc3RlbmNlLXR5cGU+CisgICAgICA8cHJpbS1rZXktY2xhc3M+amF2YS5sYW5nLkludGVnZXI8L3ByaW0ta2V5LWNsYXNzPgorICAgICAgPHJlZW50cmFudD5GYWxzZTwvcmVlbnRyYW50PgorICAgICAgPHJlc291cmNlLXJlZj4KKyAgICAgICAgPHJlcy1yZWYtbmFtZT5EYXRhU291cmNlPC9yZXMtcmVmLW5hbWU+CisgICAgICAgIDxyZXMtdHlwZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvcmVzLXR5cGU+CisgICAgICAgIDxyZXMtYXV0aD5Db250YWluZXI8L3Jlcy1hdXRoPgorICAgICAgPC9yZXNvdXJjZS1yZWY+CisgICAgPC9lbnRpdHk+CiAgICAgPC9lbnRlcnByaXNlLWJlYW5zPgogICAgIDxhc3NlbWJseS1kZXNjcmlwdG9yPgogICAgICAgPGNvbnRhaW5lci10cmFuc2FjdGlvbj4KLQk8bWV0aG9kPgotCSAgPGVqYi1uYW1lPlRlc3Q8L2VqYi1uYW1lPgotCSAgPG1ldGhvZC1uYW1lPio8L21ldGhvZC1uYW1lPgotCTwvbWV0aG9kPgotCTx0cmFucy1hdHRyaWJ1dGU+UmVxdWlyZWQ8L3RyYW5zLWF0dHJpYnV0ZT4KKyAgICA8bWV0aG9kPgorICAgICAgPGVqYi1uYW1lPlRlc3Q8L2VqYi1uYW1lPgorICAgICAgPG1ldGhvZC1uYW1lPio8L21ldGhvZC1uYW1lPgorICAgIDwvbWV0aG9kPgorICAgIDx0cmFucy1hdHRyaWJ1dGU+UmVxdWlyZWQ8L3RyYW5zLWF0dHJpYnV0ZT4KICAgICAgIDwvY29udGFpbmVyLXRyYW5zYWN0aW9uPgogICAgIDwvYXNzZW1ibHktZGVzY3JpcHRvcj4KIDwvZWpiLWphcj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvc2ltcGxlX25vcGFja2FnZS9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvc2ltcGxlX25vcGFja2FnZS9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAppbmRleCAzZjc0ZTRjLi43NmU1N2U4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3NpbXBsZV9ub3BhY2thZ2UvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9zaW1wbGVfbm9wYWNrYWdlL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCkBAIC0yNCw4ICsyNCw4IEBACiAgICAgICA8ZWpiLW5hbWU+VGVzdDwvZWpiLW5hbWU+CiAgICAgICA8am5kaS1uYW1lPmVqYi9UZXN0PC9qbmRpLW5hbWU+CiAgICAgICA8cmVzb3VyY2UtcmVmPgotCTxyZXMtcmVmLW5hbWU+RGF0YVNvdXJjZTwvcmVzLXJlZi1uYW1lPgotCTxqbmRpLW5hbWU+amRiYy9fX2RlZmF1bHQ8L2puZGktbmFtZT4KKyAgICA8cmVzLXJlZi1uYW1lPkRhdGFTb3VyY2U8L3Jlcy1yZWYtbmFtZT4KKyAgICA8am5kaS1uYW1lPmpkYmMvX19kZWZhdWx0PC9qbmRpLW5hbWU+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KICAgICAgIDxwYXNzLWJ5LXJlZmVyZW5jZT5mYWxzZTwvcGFzcy1ieS1yZWZlcmVuY2U+CiAgICAgICA8aXMtcmVhZC1vbmx5LWJlYW4+ZmFsc2U8L2lzLXJlYWQtb25seS1iZWFuPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9zaW1wbGVfbm9wYWNrYWdlL2VqYi9UZXN0Qk1QLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3NpbXBsZV9ub3BhY2thZ2UvZWpiL1Rlc3RCTVAuamF2YQppbmRleCAwMjlhNTliLi5jMmY0OTg2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3NpbXBsZV9ub3BhY2thZ2UvZWpiL1Rlc3RCTVAuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3NpbXBsZV9ub3BhY2thZ2UvZWpiL1Rlc3RCTVAuamF2YQpAQCAtMjcsNDAgKzI3LDQwIEBACiAgICAgaW50IGlkOwogCiAgICAgcHVibGljIHZvaWQgc2V0RW50aXR5Q29udGV4dChFbnRpdHlDb250ZXh0IGVudGl0eUNvbnRleHQpIHsKLQlDb250ZXh0IGNvbnRleHQgPSBudWxsOwotCXRyeSB7Ci0JICAgIGNvbnRleHQgICAgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkgICAgZHMgPSAoRGF0YVNvdXJjZSkgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZSIpOwotCX0gY2F0Y2ggKE5hbWluZ0V4Y2VwdGlvbiBlKSB7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImNhbnQgZmluZCBkYXRhc291cmNlIik7Ci0JfQorICAgIENvbnRleHQgY29udGV4dCA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgY29udGV4dCAgICA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgICAgICBkcyA9IChEYXRhU291cmNlKSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7CisgICAgfSBjYXRjaCAoTmFtaW5nRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiY2FudCBmaW5kIGRhdGFzb3VyY2UiKTsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIEludGVnZXIgZWpiQ3JlYXRlKGludCBpKSB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsKIAotCUNvbm5lY3Rpb24gYyA9IG51bGw7Ci0gICAgIAlQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7Ci0JdHJ5IHsKLQkgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgCSAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKLQkJIklOU0VSVCBJTlRPIE9fY3VzdG9tZXIgKGNfaWQsIGNfcGhvbmUpIFZBTFVFUyAoPyw/KSIpOwotCSAgICBwcy5zZXRJbnQoMSwgaSk7Ci0JICAgIHBzLnNldFN0cmluZygyLCAiNTUwLTEyMTIiKTsKLQkgICAgaWYgKHBzLmV4ZWN1dGVVcGRhdGUoKSAhPSAxKQotCQl0aHJvdyBuZXcgQ3JlYXRlRXhjZXB0aW9uKCJEaWRudCBjcmVhdGUgZWpiIik7CisgICAgQ29ubmVjdGlvbiBjID0gbnVsbDsKKyAgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHBzID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICAgICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAorICAgICAgICAiSU5TRVJUIElOVE8gT19jdXN0b21lciAoY19pZCwgY19waG9uZSkgVkFMVUVTICg/LD8pIik7CisgICAgICAgIHBzLnNldEludCgxLCBpKTsKKyAgICAgICAgcHMuc2V0U3RyaW5nKDIsICI1NTAtMTIxMiIpOworICAgICAgICBpZiAocHMuZXhlY3V0ZVVwZGF0ZSgpICE9IDEpCisgICAgICAgIHRocm93IG5ldyBDcmVhdGVFeGNlcHRpb24oIkRpZG50IGNyZWF0ZSBlamIiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbVGVzdEJNUF0gRG9uZSBlamJDcmVhdGUoKS4uLi4iKTsKLQl9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKLQkgICAgdGhyb3cgbmV3IENyZWF0ZUV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7Ci0JfSBmaW5hbGx5IHsgCi0JICAgIHRyeSB7Ci0JCWlmIChwcyAhPSBudWxsKQotCQkgICAgcHMuY2xvc2UoKTsKLQkJaWYgKGMgIT0gbnVsbCkKLQkJICAgIGMuY2xvc2UoKTsKLQkgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9Ci0JfQotCWlkID0gaTsKLQlyZXR1cm4gbmV3IEludGVnZXIoaSk7CisgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7CisgICAgICAgIHRocm93IG5ldyBDcmVhdGVFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOworICAgIH0gZmluYWxseSB7CisgICAgICAgIHRyeSB7CisgICAgICAgIGlmIChwcyAhPSBudWxsKQorICAgICAgICAgICAgcHMuY2xvc2UoKTsKKyAgICAgICAgaWYgKGMgIT0gbnVsbCkKKyAgICAgICAgICAgIGMuY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9CisgICAgfQorICAgIGlkID0gaTsKKyAgICByZXR1cm4gbmV3IEludGVnZXIoaSk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZm9vKCkgewpAQCAtNjgsMTAwICs2OCwxMDAgQEAKICAgICB9CiAKICAgICBwdWJsaWMgSW50ZWdlciBlamJGaW5kQnlQcmltYXJ5S2V5KGludCBpKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uIHsKLQlDb25uZWN0aW9uIGMgPSBudWxsOwotICAgICAJUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOwotCXRyeSB7Ci0JICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgIAkgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCi0JCSJTRUxFQ1QgY19waG9uZSBmcm9tIE9fY3VzdG9tZXIgd2hlcmUgY19pZCA9ID8iKTsKLQkgICAgcHMuc2V0SW50KDEsIGkpOwotCSAgICBSZXN1bHRTZXQgcnMgPSBwcy5leGVjdXRlUXVlcnkoKTsKLQkgICAgaWYgKCFycy5uZXh0KCkpCi0JICAgICAgIHRocm93IG5ldyBGaW5kZXJFeGNlcHRpb24oIk5vIGN1c3QgZm9yICIgKyBpZCk7Ci0JICAgIFN0cmluZyBwaG9uZSA9IHJzLmdldFN0cmluZygxKTsKKyAgICBDb25uZWN0aW9uIGMgPSBudWxsOworICAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgICAgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCisgICAgICAgICJTRUxFQ1QgY19waG9uZSBmcm9tIE9fY3VzdG9tZXIgd2hlcmUgY19pZCA9ID8iKTsKKyAgICAgICAgcHMuc2V0SW50KDEsIGkpOworICAgICAgICBSZXN1bHRTZXQgcnMgPSBwcy5leGVjdXRlUXVlcnkoKTsKKyAgICAgICAgaWYgKCFycy5uZXh0KCkpCisgICAgICAgICAgIHRocm93IG5ldyBGaW5kZXJFeGNlcHRpb24oIk5vIGN1c3QgZm9yICIgKyBpZCk7CisgICAgICAgIFN0cmluZyBwaG9uZSA9IHJzLmdldFN0cmluZygxKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbVGVzdEJNUF0gRG9uZSBlamJGaW5kQnlQcmltYXJ5S2V5KCkuLi4uIik7Ci0JICAgIHJldHVybiBuZXcgSW50ZWdlcihpKTsKLQl9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKLQkgICAgdGhyb3cgbmV3IEZpbmRlckV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7Ci0JfSBmaW5hbGx5IHsgCi0JICAgIHRyeSB7Ci0JCWlmIChwcyAhPSBudWxsKQotCQkgICAgcHMuY2xvc2UoKTsKLQkJaWYgKGMgIT0gbnVsbCkKLQkJICAgIGMuY2xvc2UoKTsKLQkgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9Ci0JfQorICAgICAgICByZXR1cm4gbmV3IEludGVnZXIoaSk7CisgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7CisgICAgICAgIHRocm93IG5ldyBGaW5kZXJFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOworICAgIH0gZmluYWxseSB7CisgICAgICAgIHRyeSB7CisgICAgICAgIGlmIChwcyAhPSBudWxsKQorICAgICAgICAgICAgcHMuY2xvc2UoKTsKKyAgICAgICAgaWYgKGMgIT0gbnVsbCkKKyAgICAgICAgICAgIGMuY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7Ci0JQ29ubmVjdGlvbiBjID0gbnVsbDsKLSAgICAgCVByZXBhcmVkU3RhdGVtZW50IHBzID0gbnVsbDsKLQl0cnkgewotCSAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAJICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAotCQkiU0VMRUNUIGNfcGhvbmUgZnJvbSBPX2N1c3RvbWVyIHdoZXJlIGNfaWQgPSA/Iik7Ci0JICAgIHBzLnNldEludCgxLCBpZCk7Ci0JICAgIFJlc3VsdFNldCBycyA9IHBzLmV4ZWN1dGVRdWVyeSgpOwotCSAgICBpZiAoIXJzLm5leHQoKSkKLQkgICAgICAgdGhyb3cgbmV3IE5vU3VjaEVudGl0eUV4Y2VwdGlvbigiTm8gY3VzdCBmb3IgIiArIGlkKTsKLQkgICAgU3RyaW5nIHBob25lID0gcnMuZ2V0U3RyaW5nKDEpOworICAgIENvbm5lY3Rpb24gYyA9IG51bGw7CisgICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgICAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKKyAgICAgICAgIlNFTEVDVCBjX3Bob25lIGZyb20gT19jdXN0b21lciB3aGVyZSBjX2lkID0gPyIpOworICAgICAgICBwcy5zZXRJbnQoMSwgaWQpOworICAgICAgICBSZXN1bHRTZXQgcnMgPSBwcy5leGVjdXRlUXVlcnkoKTsKKyAgICAgICAgaWYgKCFycy5uZXh0KCkpCisgICAgICAgICAgIHRocm93IG5ldyBOb1N1Y2hFbnRpdHlFeGNlcHRpb24oIk5vIGN1c3QgZm9yICIgKyBpZCk7CisgICAgICAgIFN0cmluZyBwaG9uZSA9IHJzLmdldFN0cmluZygxKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbVGVzdEJNUF0gRG9uZSBlamJMb2FkKCkuLi4uIik7Ci0JfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7Ci0JICAgIHRocm93IG5ldyBOb1N1Y2hFbnRpdHlFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOwotCX0gZmluYWxseSB7IAotCSAgICB0cnkgewotCQlpZiAocHMgIT0gbnVsbCkKLQkJICAgIHBzLmNsb3NlKCk7Ci0JCWlmIChjICE9IG51bGwpCi0JCSAgICBjLmNsb3NlKCk7Ci0JICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQotCX0KKyAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKKyAgICAgICAgdGhyb3cgbmV3IE5vU3VjaEVudGl0eUV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgaWYgKHBzICE9IG51bGwpCisgICAgICAgICAgICBwcy5jbG9zZSgpOworICAgICAgICBpZiAoYyAhPSBudWxsKQorICAgICAgICAgICAgYy5jbG9zZSgpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiU3RvcmUoKSB7Ci0JQ29ubmVjdGlvbiBjID0gbnVsbDsKLSAgICAgCVByZXBhcmVkU3RhdGVtZW50IHBzID0gbnVsbDsKLQl0cnkgewotCSAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAJICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAotCQkiVVBEQVRFIE9fY3VzdG9tZXIgU0VUIGNfcGhvbmUgPSA/IFdIRVJFIGNfaWQgPSA/Iik7Ci0JICAgIHBzLnNldFN0cmluZygxLCAiNTUwLTEyMTIiKTsKLQkgICAgcHMuc2V0SW50KDIsIGlkKTsKLQkgICAgaWYgKHBzLmV4ZWN1dGVVcGRhdGUoKSAhPSAxKQotCQl0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJEaWRudCBzdG9yZSBlamIiKTsKKyAgICBDb25uZWN0aW9uIGMgPSBudWxsOworICAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgICAgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCisgICAgICAgICJVUERBVEUgT19jdXN0b21lciBTRVQgY19waG9uZSA9ID8gV0hFUkUgY19pZCA9ID8iKTsKKyAgICAgICAgcHMuc2V0U3RyaW5nKDEsICI1NTAtMTIxMiIpOworICAgICAgICBwcy5zZXRJbnQoMiwgaWQpOworICAgICAgICBpZiAocHMuZXhlY3V0ZVVwZGF0ZSgpICE9IDEpCisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIkRpZG50IHN0b3JlIGVqYiIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltUZXN0Qk1QXSBEb25lIGVqYlN0b3JlKCkuLi4uIik7Ci0JfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOwotCX0gZmluYWxseSB7IAotCSAgICB0cnkgewotCQlpZiAocHMgIT0gbnVsbCkKLQkJICAgIHBzLmNsb3NlKCk7Ci0JCWlmIChjICE9IG51bGwpCi0JCSAgICBjLmNsb3NlKCk7Ci0JICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQotCX0KKyAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgaWYgKHBzICE9IG51bGwpCisgICAgICAgICAgICBwcy5jbG9zZSgpOworICAgICAgICBpZiAoYyAhPSBudWxsKQorICAgICAgICAgICAgYy5jbG9zZSgpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgdGhyb3dzIFJlbW92ZUV4Y2VwdGlvbiB7Ci0JQ29ubmVjdGlvbiBjID0gbnVsbDsKLSAgICAgCVByZXBhcmVkU3RhdGVtZW50IHBzID0gbnVsbDsKLQl0cnkgewotCSAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAJICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAotCQkiREVMRVRFIEZST00gT19jdXN0b21lciBXSEVSRSBjX2lkID0gPyIpOwotCSAgICBwcy5zZXRJbnQoMSwgaWQpOwotCSAgICBpZiAocHMuZXhlY3V0ZVVwZGF0ZSgpICE9IDEpCi0JCXRocm93IG5ldyBSZW1vdmVFeGNlcHRpb24oIkRpZG50IHJlbW92ZSBlamIiKTsKLQl9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKLQkgICAgdGhyb3cgbmV3IFJlbW92ZUV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7Ci0JfSBmaW5hbGx5IHsgCi0JICAgIHRyeSB7Ci0JCWlmIChwcyAhPSBudWxsKQotCQkgICAgcHMuY2xvc2UoKTsKLQkJaWYgKGMgIT0gbnVsbCkKLQkJICAgIGMuY2xvc2UoKTsKLQkgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9Ci0JfQorICAgIENvbm5lY3Rpb24gYyA9IG51bGw7CisgICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgICAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKKyAgICAgICAgIkRFTEVURSBGUk9NIE9fY3VzdG9tZXIgV0hFUkUgY19pZCA9ID8iKTsKKyAgICAgICAgcHMuc2V0SW50KDEsIGlkKTsKKyAgICAgICAgaWYgKHBzLmV4ZWN1dGVVcGRhdGUoKSAhPSAxKQorICAgICAgICB0aHJvdyBuZXcgUmVtb3ZlRXhjZXB0aW9uKCJEaWRudCByZW1vdmUgZWpiIik7CisgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7CisgICAgICAgIHRocm93IG5ldyBSZW1vdmVFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOworICAgIH0gZmluYWxseSB7CisgICAgICAgIHRyeSB7CisgICAgICAgIGlmIChwcyAhPSBudWxsKQorICAgICAgICAgICAgcHMuY2xvc2UoKTsKKyAgICAgICAgaWYgKGMgIT0gbnVsbCkKKyAgICAgICAgICAgIGMuY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkge30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvc2ltcGxlX25vcGFja2FnZS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3NpbXBsZV9ub3BhY2thZ2Uvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IGU0OTE0ZjYuLmYyNTYwNzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvc2ltcGxlX25vcGFja2FnZS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9zaW1wbGVfbm9wYWNrYWdlL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSw3ICsxLDcgQEAKLURyb3AgdGFibGUgT19DdXN0b21lcjsNCi0NCi1DUkVBVEUgVEFCTEUgT19DdXN0b21lciAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikNCi0pOw0KLQ0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKKworQ1JFQVRFIFRBQkxFIE9fQ3VzdG9tZXIgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQorKTsKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC9zaW1wbGVfbm9wYWNrYWdlL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3NpbXBsZV9ub3BhY2thZ2Uvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAppbmRleCA3MGQxZmNjLi5kODU0Yjk1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3NpbXBsZV9ub3BhY2thZ2Uvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3NpbXBsZV9ub3BhY2thZ2Uvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbApAQCAtMSArMSBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdGhyZWFkX3Bvb2xfaWQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdGhyZWFkX3Bvb2xfaWQvYnVpbGQucHJvcGVydGllcwppbmRleCAwM2IzOTRkLi5mZjMxMDNiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3RocmVhZF9wb29sX2lkL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90aHJlYWRfcG9vbF9pZC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOCArMTUsMTggQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1ibXAtdGhyZWFkLXBvb2wtaWQiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdGhyZWFkX3Bvb2xfaWQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90aHJlYWRfcG9vbF9pZC9idWlsZC54bWwKaW5kZXggMWFlMGNjMi4uZTViOGM5YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90aHJlYWRfcG9vbF9pZC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90aHJlYWRfcG9vbF9pZC9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ4LDUyICs0OCw1MiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqLyouY2xhc3MiIC8+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovU2ltcGxlQk1QLmNsYXNzLCAqKi9TaW1wbGVCTVBIb21lLmNsYXNzLCoqLypDbGllbnQqLmNsYXNzIiAvPgogICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JPGVjaG8gbWVzc2FnZT0iYXNhZG1pbiBjcmVhdGUtdGhyZWFkcG9vbCAke2FzLnByb3BzfSBleHByZXNzLXNlcnZpY2UtdGhyZWFkLXBvb2wiLz4KLQk8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiA+Ci0JICAgIDxhcmcgbGluZT0iY3JlYXRlLXRocmVhZHBvb2wgIi8+Ci0JICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KLQkgICAgPGFyZyBsaW5lPSJleHByZXNzLXNlcnZpY2UtdGhyZWFkLXBvb2wiLz4KLQk8L2V4ZWM+Ci0JPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXNlcnZlci1pbnN0YW5jZS1jb21tb24iLz4KLQk8IS0tPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgPgotCSAgICA8YXJnIGxpbmU9InN0b3AtZG9tYWluIi8+Ci0JPC9leGVjPgotCTxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iID4KLQkgICAgPGFyZyBsaW5lPSJzdGFydC1kb21haW4iLz4KLQk8L2V4ZWM+LS0+CisgICAgPGVjaG8gbWVzc2FnZT0iYXNhZG1pbiBjcmVhdGUtdGhyZWFkcG9vbCAke2FzLnByb3BzfSBleHByZXNzLXNlcnZpY2UtdGhyZWFkLXBvb2wiLz4KKyAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiA+CisgICAgICAgIDxhcmcgbGluZT0iY3JlYXRlLXRocmVhZHBvb2wgIi8+CisgICAgICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KKyAgICAgICAgPGFyZyBsaW5lPSJleHByZXNzLXNlcnZpY2UtdGhyZWFkLXBvb2wiLz4KKyAgICA8L2V4ZWM+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXNlcnZlci1pbnN0YW5jZS1jb21tb24iLz4KKyAgICA8IS0tPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgPgorICAgICAgICA8YXJnIGxpbmU9InN0b3AtZG9tYWluIi8+CisgICAgPC9leGVjPgorICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iID4KKyAgICAgICAgPGFyZyBsaW5lPSJzdGFydC1kb21haW4iLz4KKyAgICA8L2V4ZWM+LS0+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtZWpiLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtZWpiLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICA8L2FudGNhbGw+CiAKLQk8ZWNobyBtZXNzYWdlPSJhc2FkbWluIGRlbGV0ZS10aHJlYWRwb29sICR7YXMucHJvcHN9IGV4cHJlc3Mtc2VydmljZS10aHJlYWQtcG9vbCIvPgotCTxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iID4KLQkgICAgPGFyZyBsaW5lPSJkZWxldGUtdGhyZWFkcG9vbCAiLz4KLQkgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgotCSAgICA8YXJnIGxpbmU9ImV4cHJlc3Mtc2VydmljZS10aHJlYWQtcG9vbCIvPgotCTwvZXhlYz4KLQk8YW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQtc2VydmVyLWluc3RhbmNlLWNvbW1vbiIvPgorICAgIDxlY2hvIG1lc3NhZ2U9ImFzYWRtaW4gZGVsZXRlLXRocmVhZHBvb2wgJHthcy5wcm9wc30gZXhwcmVzcy1zZXJ2aWNlLXRocmVhZC1wb29sIi8+CisgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgPgorICAgICAgICA8YXJnIGxpbmU9ImRlbGV0ZS10aHJlYWRwb29sICIvPgorICAgICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+CisgICAgICAgIDxhcmcgbGluZT0iZXhwcmVzcy1zZXJ2aWNlLXRocmVhZC1wb29sIi8+CisgICAgPC9leGVjPgorICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXItaW5zdGFuY2UtY29tbW9uIi8+CiAKICAgICAgIDwhLS0KICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamRiYy1jb21tb24iPgpAQCAtMTAyLDcgKzEwMiw3IEBACiAgICAgICA8L2FudGNhbGw+CiAgICAgICAtLT4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdGhyZWFkX3Bvb2xfaWQvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90aHJlYWRfcG9vbF9pZC9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKaW5kZXggNWU2ZWQ4Yy4uNzEzNmU0ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90aHJlYWRfcG9vbF9pZC9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90aHJlYWRfcG9vbF9pZC9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKQEAgLTM1LDE5ICszNSwxOSBAQAogICAgIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlRlc3RpbmcgYm1wIHNpbXBsZSBhcHAuIik7Ci0JICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBPYmplY3Qgb2JqUmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVCTVBIb21lIik7Ci0JICAgIFNpbXBsZUJNUEhvbWUgc2ltcGxlQk1QSG9tZSA9IChTaW1wbGVCTVBIb21lKQorICAgICAgICBTaW1wbGVCTVBIb21lIHNpbXBsZUJNUEhvbWUgPSAoU2ltcGxlQk1QSG9tZSkKICAgICAgICAgICAgICAgICBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ialJlZiwgU2ltcGxlQk1QSG9tZS5jbGFzcyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGludCBpZD0gKGludCkgU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0gCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXJ0aW5nIHRlc3QgZm9yIGlkOiAiICsgaWQpOwotIAkgICAgU2ltcGxlQk1QIHNpbXBsZUJNUCA9IHNpbXBsZUJNUEhvbWUuY3JlYXRlKGlkKTsKIAotCSAgICBib29sZWFuIHRocmVhZFBvb2xJRFRlc3RTdGF0dXMgPQotCQlzaW1wbGVCTVAuaXNTZXJ2aWNlZEJ5KCJleHByZXNzLXNlcnZpY2UtdGhyZWFkLXBvb2wiKTsKKyAgICAgICAgICAgIGludCBpZD0gKGludCkgU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXJ0aW5nIHRlc3QgZm9yIGlkOiAiICsgaWQpOworICAgICAgICAgU2ltcGxlQk1QIHNpbXBsZUJNUCA9IHNpbXBsZUJNUEhvbWUuY3JlYXRlKGlkKTsKKworICAgICAgICBib29sZWFuIHRocmVhZFBvb2xJRFRlc3RTdGF0dXMgPQorICAgICAgICBzaW1wbGVCTVAuaXNTZXJ2aWNlZEJ5KCJleHByZXNzLXNlcnZpY2UtdGhyZWFkLXBvb2wiKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJibXAgVGhyZWFkUG9vbFRlc3QiLAotCQkoKHRocmVhZFBvb2xJRFRlc3RTdGF0dXMgPT0gdHJ1ZSkgPyAgc3RhdC5QQVNTIDogc3RhdC5GQUlMKSk7CisgICAgICAgICgodGhyZWFkUG9vbElEVGVzdFN0YXR1cyA9PSB0cnVlKSA/ICBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJibXAgc2ltcGxlIiwgc3RhdC5GQUlMKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdGhyZWFkX3Bvb2xfaWQvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdGhyZWFkX3Bvb2xfaWQvZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCBmYWU0ZTg0Li5jZmUwZDY5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3RocmVhZF9wb29sX2lkL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90aHJlYWRfcG9vbF9pZC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC01NSw2ICs1NSw2IEBACiAgICAgICA8dHJhbnMtYXR0cmlidXRlPlJlcXVpcmVkPC90cmFucy1hdHRyaWJ1dGU+CiAgICAgPC9jb250YWluZXItdHJhbnNhY3Rpb24+CiAgIDwvYXNzZW1ibHktZGVzY3JpcHRvcj4KLSAgICAgIAorCiA8L2VqYi1qYXI+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdGhyZWFkX3Bvb2xfaWQvZWpiL1NpbXBsZUJNUEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdGhyZWFkX3Bvb2xfaWQvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQppbmRleCBiNWViMjZkLi5lNjE5YmM5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3RocmVhZF9wb29sX2lkL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90aHJlYWRfcG9vbF9pZC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCkBAIC0zMSwxNDggKzMxLDE0OCBAQAogICAgIGludCBpZDsKIAogICAgIHB1YmxpYyB2b2lkIHNldEVudGl0eUNvbnRleHQoRW50aXR5Q29udGV4dCBlbnRpdHlDb250ZXh0KSB7Ci0JQ29udGV4dCBjb250ZXh0ID0gbnVsbDsKLQl0cnkgewotCSAgICBjb250ZXh0ICAgID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JICAgIGRzID0gKERhdGFTb3VyY2UpIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKLQl9IGNhdGNoIChOYW1pbmdFeGNlcHRpb24gZSkgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJjYW50IGZpbmQgZGF0YXNvdXJjZSIpOwotCX0KKyAgICBDb250ZXh0IGNvbnRleHQgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIGNvbnRleHQgICAgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgZHMgPSAoRGF0YVNvdXJjZSkgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZSIpOworICAgIH0gY2F0Y2ggKE5hbWluZ0V4Y2VwdGlvbiBlKSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImNhbnQgZmluZCBkYXRhc291cmNlIik7CisgICAgfQogICAgIFN5c3RlbS5vdXQucHJpbnRsbigiWyoqU2ltcGxlQk1QQmVhbioqXSBEb25lIHdpdGggc2V0RW50aXR5Q29udGV4dC4uLi4iKTsKICAgICB9CiAKICAgICBwdWJsaWMgSW50ZWdlciBlamJDcmVhdGUoaW50IGkpIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewogCi0JQ29ubmVjdGlvbiBjID0gbnVsbDsKLSAgICAgCVByZXBhcmVkU3RhdGVtZW50IHBzID0gbnVsbDsKLQl0cnkgewotCSAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAJICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAotCQkiSU5TRVJUIElOVE8gT19jdXN0b21lciAoY19pZCwgY19waG9uZSkgVkFMVUVTICg/LD8pIik7Ci0JICAgIHBzLnNldEludCgxLCBpKTsKLQkgICAgcHMuc2V0U3RyaW5nKDIsICI1NTAtMTIxMiIpOwotCSAgICBpZiAocHMuZXhlY3V0ZVVwZGF0ZSgpICE9IDEpCi0JCXRocm93IG5ldyBDcmVhdGVFeGNlcHRpb24oIkRpZG50IGNyZWF0ZSBlamIiKTsKKyAgICBDb25uZWN0aW9uIGMgPSBudWxsOworICAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgICAgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCisgICAgICAgICJJTlNFUlQgSU5UTyBPX2N1c3RvbWVyIChjX2lkLCBjX3Bob25lKSBWQUxVRVMgKD8sPykiKTsKKyAgICAgICAgcHMuc2V0SW50KDEsIGkpOworICAgICAgICBwcy5zZXRTdHJpbmcoMiwgIjU1MC0xMjEyIik7CisgICAgICAgIGlmIChwcy5leGVjdXRlVXBkYXRlKCkgIT0gMSkKKyAgICAgICAgdGhyb3cgbmV3IENyZWF0ZUV4Y2VwdGlvbigiRGlkbnQgY3JlYXRlIGVqYiIpOwogICAgIFN5c3RlbS5vdXQucHJpbnRsbigiWyoqU2ltcGxlQk1QQmVhbioqXSBEb25lIHdpdGggZWpiQ3JlYXRlLi4uLiIpOwotCX0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAgewotCSAgICB0aHJvdyBuZXcgQ3JlYXRlRXhjZXB0aW9uKCJTUUwgZXhjZXB0aW9uICIgKyBlKTsKLQl9IGZpbmFsbHkgeyAKLQkgICAgdHJ5IHsKLQkJaWYgKHBzICE9IG51bGwpCi0JCSAgICBwcy5jbG9zZSgpOwotCQlpZiAoYyAhPSBudWxsKQotCQkgICAgYy5jbG9zZSgpOwotCSAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KLQl9Ci0JaWQgPSBpOwotCXJldHVybiBuZXcgSW50ZWdlcihpKTsKKyAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKKyAgICAgICAgdGhyb3cgbmV3IENyZWF0ZUV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgaWYgKHBzICE9IG51bGwpCisgICAgICAgICAgICBwcy5jbG9zZSgpOworICAgICAgICBpZiAoYyAhPSBudWxsKQorICAgICAgICAgICAgYy5jbG9zZSgpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KKyAgICB9CisgICAgaWQgPSBpOworICAgIHJldHVybiBuZXcgSW50ZWdlcihpKTsKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiBpc1NlcnZpY2VkQnkoU3RyaW5nIHRocmVhZFBvb2xJRCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlsqKlNpbXBsZUJNUEJlYW4qKl0gIgotCSAgICArICIuIFJlcXVlc3Qgc2VydmljZWQgYnk6IiArIFRocmVhZC5jdXJyZW50VGhyZWFkKCkpOworICAgICAgICArICIuIFJlcXVlc3Qgc2VydmljZWQgYnk6IiArIFRocmVhZC5jdXJyZW50VGhyZWFkKCkpOwogICAgICAgICBTdHJpbmcgdGhyZWFkSUQgPSBUaHJlYWQuY3VycmVudFRocmVhZCgpLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKTsKLQlyZXR1cm4gKHRocmVhZElELmluZGV4T2YodGhyZWFkUG9vbElELnRvTG93ZXJDYXNlKCkpICE9IC0xKTsKKyAgICByZXR1cm4gKHRocmVhZElELmluZGV4T2YodGhyZWFkUG9vbElELnRvTG93ZXJDYXNlKCkpICE9IC0xKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBmb28oKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiWyoqU2ltcGxlQk1QQmVhbioqXSBbIgotCSAgICArIFRocmVhZC5jdXJyZW50VGhyZWFkKCkgKyAiXSBEb25lIHdpdGggZm9vLi4uLiIpOworICAgICAgICArIFRocmVhZC5jdXJyZW50VGhyZWFkKCkgKyAiXSBEb25lIHdpdGggZm9vLi4uLiIpOwogICAgIH0KIAogICAgIHB1YmxpYyBJbnRlZ2VyIGVqYkZpbmRCeVByaW1hcnlLZXkoSW50ZWdlciBrZXkpIHRocm93cyBGaW5kZXJFeGNlcHRpb24gewotCUNvbm5lY3Rpb24gYyA9IG51bGw7Ci0gICAgIAlQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7Ci0JdHJ5IHsKLQkgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgCSAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKLQkJIlNFTEVDVCBjX3Bob25lIGZyb20gT19jdXN0b21lciB3aGVyZSBjX2lkID0gPyIpOwotCSAgICBwcy5zZXRJbnQoMSwga2V5LmludFZhbHVlKCkpOwotCSAgICBSZXN1bHRTZXQgcnMgPSBwcy5leGVjdXRlUXVlcnkoKTsKLQkgICAgaWYgKCFycy5uZXh0KCkpCi0JICAgICAgIHRocm93IG5ldyBGaW5kZXJFeGNlcHRpb24oIk5vIGN1c3QgZm9yICIgKyBpZCk7Ci0JICAgIFN0cmluZyBwaG9uZSA9IHJzLmdldFN0cmluZygxKTsKLQkgICAgcmV0dXJuIGtleTsKLQl9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKLQkgICAgdGhyb3cgbmV3IEZpbmRlckV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7Ci0JfSBmaW5hbGx5IHsgCi0JICAgIHRyeSB7Ci0JCWlmIChwcyAhPSBudWxsKQotCQkgICAgcHMuY2xvc2UoKTsKLQkJaWYgKGMgIT0gbnVsbCkKLQkJICAgIGMuY2xvc2UoKTsKLQkgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9Ci0JfQorICAgIENvbm5lY3Rpb24gYyA9IG51bGw7CisgICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgICAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKKyAgICAgICAgIlNFTEVDVCBjX3Bob25lIGZyb20gT19jdXN0b21lciB3aGVyZSBjX2lkID0gPyIpOworICAgICAgICBwcy5zZXRJbnQoMSwga2V5LmludFZhbHVlKCkpOworICAgICAgICBSZXN1bHRTZXQgcnMgPSBwcy5leGVjdXRlUXVlcnkoKTsKKyAgICAgICAgaWYgKCFycy5uZXh0KCkpCisgICAgICAgICAgIHRocm93IG5ldyBGaW5kZXJFeGNlcHRpb24oIk5vIGN1c3QgZm9yICIgKyBpZCk7CisgICAgICAgIFN0cmluZyBwaG9uZSA9IHJzLmdldFN0cmluZygxKTsKKyAgICAgICAgcmV0dXJuIGtleTsKKyAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKKyAgICAgICAgdGhyb3cgbmV3IEZpbmRlckV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgaWYgKHBzICE9IG51bGwpCisgICAgICAgICAgICBwcy5jbG9zZSgpOworICAgICAgICBpZiAoYyAhPSBudWxsKQorICAgICAgICAgICAgYy5jbG9zZSgpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHsKLQlDb25uZWN0aW9uIGMgPSBudWxsOwotICAgICAJUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOwotCXRyeSB7Ci0JICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgIAkgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCi0JCSJTRUxFQ1QgY19waG9uZSBmcm9tIE9fY3VzdG9tZXIgd2hlcmUgY19pZCA9ID8iKTsKLQkgICAgcHMuc2V0SW50KDEsIGlkKTsKLQkgICAgUmVzdWx0U2V0IHJzID0gcHMuZXhlY3V0ZVF1ZXJ5KCk7Ci0JICAgIGlmICghcnMubmV4dCgpKQotCSAgICAgICB0aHJvdyBuZXcgTm9TdWNoRW50aXR5RXhjZXB0aW9uKCJObyBjdXN0IGZvciAiICsgaWQpOwotCSAgICBTdHJpbmcgcGhvbmUgPSBycy5nZXRTdHJpbmcoMSk7Ci0JfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7Ci0JICAgIHRocm93IG5ldyBOb1N1Y2hFbnRpdHlFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOwotCX0gZmluYWxseSB7IAotCSAgICB0cnkgewotCQlpZiAocHMgIT0gbnVsbCkKLQkJICAgIHBzLmNsb3NlKCk7Ci0JCWlmIChjICE9IG51bGwpCi0JCSAgICBjLmNsb3NlKCk7Ci0JICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQotCX0KKyAgICBDb25uZWN0aW9uIGMgPSBudWxsOworICAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgICAgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCisgICAgICAgICJTRUxFQ1QgY19waG9uZSBmcm9tIE9fY3VzdG9tZXIgd2hlcmUgY19pZCA9ID8iKTsKKyAgICAgICAgcHMuc2V0SW50KDEsIGlkKTsKKyAgICAgICAgUmVzdWx0U2V0IHJzID0gcHMuZXhlY3V0ZVF1ZXJ5KCk7CisgICAgICAgIGlmICghcnMubmV4dCgpKQorICAgICAgICAgICB0aHJvdyBuZXcgTm9TdWNoRW50aXR5RXhjZXB0aW9uKCJObyBjdXN0IGZvciAiICsgaWQpOworICAgICAgICBTdHJpbmcgcGhvbmUgPSBycy5nZXRTdHJpbmcoMSk7CisgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7CisgICAgICAgIHRocm93IG5ldyBOb1N1Y2hFbnRpdHlFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOworICAgIH0gZmluYWxseSB7CisgICAgICAgIHRyeSB7CisgICAgICAgIGlmIChwcyAhPSBudWxsKQorICAgICAgICAgICAgcHMuY2xvc2UoKTsKKyAgICAgICAgaWYgKGMgIT0gbnVsbCkKKyAgICAgICAgICAgIGMuY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYlN0b3JlKCkgewotCUNvbm5lY3Rpb24gYyA9IG51bGw7Ci0gICAgIAlQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7Ci0JdHJ5IHsKLQkgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgCSAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKLQkJIlVQREFURSBPX2N1c3RvbWVyIFNFVCBjX3Bob25lID0gPyBXSEVSRSBjX2lkID0gPyIpOwotCSAgICBwcy5zZXRTdHJpbmcoMSwgIjU1MC0xMjEyIik7Ci0JICAgIHBzLnNldEludCgyLCBpZCk7Ci0JICAgIGlmIChwcy5leGVjdXRlVXBkYXRlKCkgIT0gMSkKLQkJdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiRGlkbnQgc3RvcmUgZWpiIik7CisgICAgQ29ubmVjdGlvbiBjID0gbnVsbDsKKyAgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHBzID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICAgICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAorICAgICAgICAiVVBEQVRFIE9fY3VzdG9tZXIgU0VUIGNfcGhvbmUgPSA/IFdIRVJFIGNfaWQgPSA/Iik7CisgICAgICAgIHBzLnNldFN0cmluZygxLCAiNTUwLTEyMTIiKTsKKyAgICAgICAgcHMuc2V0SW50KDIsIGlkKTsKKyAgICAgICAgaWYgKHBzLmV4ZWN1dGVVcGRhdGUoKSAhPSAxKQorICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJEaWRudCBzdG9yZSBlamIiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbKipTaW1wbGVCTVBCZWFuKipdIERvbmUgd2l0aCBlamJTdG9yZS4uLi4iKTsKLQl9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7Ci0JfSBmaW5hbGx5IHsgCi0JICAgIHRyeSB7Ci0JCWlmIChwcyAhPSBudWxsKQotCQkgICAgcHMuY2xvc2UoKTsKLQkJaWYgKGMgIT0gbnVsbCkKLQkJICAgIGMuY2xvc2UoKTsKLQkgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9Ci0JfQorICAgIH0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAgeworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJTUUwgZXhjZXB0aW9uICIgKyBlKTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICB0cnkgeworICAgICAgICBpZiAocHMgIT0gbnVsbCkKKyAgICAgICAgICAgIHBzLmNsb3NlKCk7CisgICAgICAgIGlmIChjICE9IG51bGwpCisgICAgICAgICAgICBjLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQorICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB0aHJvd3MgUmVtb3ZlRXhjZXB0aW9uIHsKLQlDb25uZWN0aW9uIGMgPSBudWxsOwotICAgICAJUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOwotCXRyeSB7Ci0JICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgIAkgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCi0JCSJERUxFVEUgRlJPTSBPX2N1c3RvbWVyIFdIRVJFIGNfaWQgPSA/Iik7Ci0JICAgIHBzLnNldEludCgxLCBpZCk7Ci0JICAgIGlmIChwcy5leGVjdXRlVXBkYXRlKCkgIT0gMSkKLQkJdGhyb3cgbmV3IFJlbW92ZUV4Y2VwdGlvbigiRGlkbnQgcmVtb3ZlIGVqYiIpOwotCX0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAgewotCSAgICB0aHJvdyBuZXcgUmVtb3ZlRXhjZXB0aW9uKCJTUUwgZXhjZXB0aW9uICIgKyBlKTsKLQl9IGZpbmFsbHkgeyAKLQkgICAgdHJ5IHsKLQkJaWYgKHBzICE9IG51bGwpCi0JCSAgICBwcy5jbG9zZSgpOwotCQlpZiAoYyAhPSBudWxsKQotCQkgICAgYy5jbG9zZSgpOwotCSAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KLQl9CisgICAgQ29ubmVjdGlvbiBjID0gbnVsbDsKKyAgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHBzID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICAgICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAorICAgICAgICAiREVMRVRFIEZST00gT19jdXN0b21lciBXSEVSRSBjX2lkID0gPyIpOworICAgICAgICBwcy5zZXRJbnQoMSwgaWQpOworICAgICAgICBpZiAocHMuZXhlY3V0ZVVwZGF0ZSgpICE9IDEpCisgICAgICAgIHRocm93IG5ldyBSZW1vdmVFeGNlcHRpb24oIkRpZG50IHJlbW92ZSBlamIiKTsKKyAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKKyAgICAgICAgdGhyb3cgbmV3IFJlbW92ZUV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgaWYgKHBzICE9IG51bGwpCisgICAgICAgICAgICBwcy5jbG9zZSgpOworICAgICAgICBpZiAoYyAhPSBudWxsKQorICAgICAgICAgICAgYy5jbG9zZSgpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7fQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90aHJlYWRfcG9vbF9pZC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3RocmVhZF9wb29sX2lkL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCBlNDkxNGY2Li5mMjU2MDc2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3RocmVhZF9wb29sX2lkL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3RocmVhZF9wb29sX2lkL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSw3ICsxLDcgQEAKLURyb3AgdGFibGUgT19DdXN0b21lcjsNCi0NCi1DUkVBVEUgVEFCTEUgT19DdXN0b21lciAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikNCi0pOw0KLQ0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKKworQ1JFQVRFIFRBQkxFIE9fQ3VzdG9tZXIgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQorKTsKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90aHJlYWRfcG9vbF9pZC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90aHJlYWRfcG9vbF9pZC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IDcwZDFmY2MuLmQ4NTRiOTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdGhyZWFkX3Bvb2xfaWQvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3RocmVhZF9wb29sX2lkL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEgKzEgQEAKLURyb3AgdGFibGUgT19DdXN0b21lcjsNCitEcm9wIHRhYmxlIE9fQ3VzdG9tZXI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3R3b2xldmVsL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3R3b2xldmVsL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMGViYTkxYi4uMGE2M2YyNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90d29sZXZlbC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHdvbGV2ZWwvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTggKzE1LDE4IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItYm1wLXR3b2xldmVsIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3R3b2xldmVsL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHdvbGV2ZWwvYnVpbGQueG1sCmluZGV4IGE4ODdmZTkuLmY2MDBjM2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHdvbGV2ZWwvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHdvbGV2ZWwvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OCwxMyArNDgsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqL1N0YXRlbGVzc0hvbWUuY2xhc3MsICoqL1N0YXRlbGVzcy5jbGFzcywqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLWVqYi1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CkBAIC02OCwyMSArNjgsMjEgQEAKICAgICAgIC0tPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLWVqYi1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX3BvaW50YmFzZS5zcWwiLz4KICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90d29sZXZlbC9jbGllbnQvVHdvTGV2ZWxDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHdvbGV2ZWwvY2xpZW50L1R3b0xldmVsQ2xpZW50LmphdmEKaW5kZXggOWU1OTJmOS4uN2EzODcxMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90d29sZXZlbC9jbGllbnQvVHdvTGV2ZWxDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3R3b2xldmVsL2NsaWVudC9Ud29MZXZlbENsaWVudC5qYXZhCkBAIC0zNSwyMSArMzUsMjEgQEAKICAgICB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJUZXN0aW5nIGJtcCB0d29sZXZlbCBhcHAuIik7Ci0JICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBPYmplY3Qgb2JqUmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TdGF0ZWxlc3NIb21lIik7Ci0JICAgIFN0YXRlbGVzc0hvbWUgc3RhdGVsZXNzSG9tZSA9IChTdGF0ZWxlc3NIb21lKQorICAgICAgICBTdGF0ZWxlc3NIb21lIHN0YXRlbGVzc0hvbWUgPSAoU3RhdGVsZXNzSG9tZSkKICAgICAgICAgICAgICAgICBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ialJlZiwgU3RhdGVsZXNzSG9tZS5jbGFzcyk7CiAKLQkgICAgU3RhdGVsZXNzIHN0YXRlbGVzcyA9IHN0YXRlbGVzc0hvbWUuY3JlYXRlKCk7Ci0gICAgICAgICAgICAKKyAgICAgICAgU3RhdGVsZXNzIHN0YXRlbGVzcyA9IHN0YXRlbGVzc0hvbWUuY3JlYXRlKCk7CisKICAgICAgICAgICAgIGludCBpZD0gKGludCkgU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhcnRpbmcgdGVzdCBmb3IgaWQ6ICIgKyBpZCk7Ci0JICAgIHN0YXRlbGVzcy5jcmVhdGVCTVAobmV3IEludGVnZXIoaWQpKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJEb25lIGZvciBpZDogIiArIGlkKTsKLSAgICAgICAgICAgIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXJ0aW5nIHRlc3QgZm9yIGlkOiAiICsgaWQrMSk7Ci0JICAgIHN0YXRlbGVzcy5jcmVhdGVCTVBBbmRUZXN0KG5ldyBJbnRlZ2VyKGlkKzEpKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJEb25lIGZvciBpZDogIiArIGlkKzEpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXJ0aW5nIHRlc3QgZm9yIGlkOiAiICsgaWQpOworICAgICAgICBzdGF0ZWxlc3MuY3JlYXRlQk1QKG5ldyBJbnRlZ2VyKGlkKSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRG9uZSBmb3IgaWQ6ICIgKyBpZCk7CisKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGFydGluZyB0ZXN0IGZvciBpZDogIiArIGlkKzEpOworICAgICAgICBzdGF0ZWxlc3MuY3JlYXRlQk1QQW5kVGVzdChuZXcgSW50ZWdlcihpZCsxKSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRG9uZSBmb3IgaWQ6ICIgKyBpZCsxKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJibXAgdHdvbGV2ZWwiLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90d29sZXZlbC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90d29sZXZlbC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IDM0ZTY1NGUuLmIyZmQ5N2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHdvbGV2ZWwvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3R3b2xldmVsL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTgwLDYgKzgwLDYgQEAKICAgICAgIDx0cmFucy1hdHRyaWJ1dGU+UmVxdWlyZWQ8L3RyYW5zLWF0dHJpYnV0ZT4KICAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgPC9hc3NlbWJseS1kZXNjcmlwdG9yPgotICAgICAgCisKIDwvZWpiLWphcj4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90d29sZXZlbC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90d29sZXZlbC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCmluZGV4IDYzMjZiNWIuLjE1YWFlMWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHdvbGV2ZWwvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3R3b2xldmVsL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKQEAgLTMxLDQxICszMSw0MSBAQAogICAgIGludCBpZDsKIAogICAgIHB1YmxpYyB2b2lkIHNldEVudGl0eUNvbnRleHQoRW50aXR5Q29udGV4dCBlbnRpdHlDb250ZXh0KSB7Ci0JQ29udGV4dCBjb250ZXh0ID0gbnVsbDsKLQl0cnkgewotCSAgICBjb250ZXh0ICAgID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JICAgIGRzID0gKERhdGFTb3VyY2UpIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKLQl9IGNhdGNoIChOYW1pbmdFeGNlcHRpb24gZSkgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJjYW50IGZpbmQgZGF0YXNvdXJjZSIpOwotCX0KKyAgICBDb250ZXh0IGNvbnRleHQgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIGNvbnRleHQgICAgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgZHMgPSAoRGF0YVNvdXJjZSkgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZSIpOworICAgIH0gY2F0Y2ggKE5hbWluZ0V4Y2VwdGlvbiBlKSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImNhbnQgZmluZCBkYXRhc291cmNlIik7CisgICAgfQogICAgIFN5c3RlbS5vdXQucHJpbnRsbigiWyoqU2ltcGxlQk1QQmVhbioqXSBEb25lIHdpdGggc2V0RW50aXR5Q29udGV4dC4uLi4iKTsKICAgICB9CiAKICAgICBwdWJsaWMgSW50ZWdlciBlamJDcmVhdGUoaW50IGkpIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewogCi0JQ29ubmVjdGlvbiBjID0gbnVsbDsKLSAgICAgCVByZXBhcmVkU3RhdGVtZW50IHBzID0gbnVsbDsKLQl0cnkgewotCSAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAJICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAotCQkiSU5TRVJUIElOVE8gT19jdXN0b21lciAoY19pZCwgY19waG9uZSkgVkFMVUVTICg/LD8pIik7Ci0JICAgIHBzLnNldEludCgxLCBpKTsKLQkgICAgcHMuc2V0U3RyaW5nKDIsICI1NTAtMTIxMiIpOwotCSAgICBpZiAocHMuZXhlY3V0ZVVwZGF0ZSgpICE9IDEpCi0JCXRocm93IG5ldyBDcmVhdGVFeGNlcHRpb24oIkRpZG50IGNyZWF0ZSBlamIiKTsKKyAgICBDb25uZWN0aW9uIGMgPSBudWxsOworICAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgICAgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCisgICAgICAgICJJTlNFUlQgSU5UTyBPX2N1c3RvbWVyIChjX2lkLCBjX3Bob25lKSBWQUxVRVMgKD8sPykiKTsKKyAgICAgICAgcHMuc2V0SW50KDEsIGkpOworICAgICAgICBwcy5zZXRTdHJpbmcoMiwgIjU1MC0xMjEyIik7CisgICAgICAgIGlmIChwcy5leGVjdXRlVXBkYXRlKCkgIT0gMSkKKyAgICAgICAgdGhyb3cgbmV3IENyZWF0ZUV4Y2VwdGlvbigiRGlkbnQgY3JlYXRlIGVqYiIpOwogICAgIFN5c3RlbS5vdXQucHJpbnRsbigiWyoqU2ltcGxlQk1QQmVhbioqXSBEb25lIHdpdGggZWpiQ3JlYXRlLi4uLiIpOwotCX0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAgewotCSAgICB0aHJvdyBuZXcgQ3JlYXRlRXhjZXB0aW9uKCJTUUwgZXhjZXB0aW9uICIgKyBlKTsKLQl9IGZpbmFsbHkgeyAKLQkgICAgdHJ5IHsKLQkJaWYgKHBzICE9IG51bGwpCi0JCSAgICBwcy5jbG9zZSgpOwotCQlpZiAoYyAhPSBudWxsKQotCQkgICAgYy5jbG9zZSgpOwotCSAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KLQl9Ci0JaWQgPSBpOwotCXJldHVybiBuZXcgSW50ZWdlcihpKTsKKyAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKKyAgICAgICAgdGhyb3cgbmV3IENyZWF0ZUV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgaWYgKHBzICE9IG51bGwpCisgICAgICAgICAgICBwcy5jbG9zZSgpOworICAgICAgICBpZiAoYyAhPSBudWxsKQorICAgICAgICAgICAgYy5jbG9zZSgpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KKyAgICB9CisgICAgaWQgPSBpOworICAgIHJldHVybiBuZXcgSW50ZWdlcihpKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBmb28oKSB7CkBAIC03Myw5OCArNzMsOTggQEAKICAgICB9CiAKICAgICBwdWJsaWMgSW50ZWdlciBlamJGaW5kQnlQcmltYXJ5S2V5KEludGVnZXIga2V5KSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uIHsKLQlDb25uZWN0aW9uIGMgPSBudWxsOwotICAgICAJUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOwotCXRyeSB7Ci0JICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgIAkgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCi0JCSJTRUxFQ1QgY19waG9uZSBmcm9tIE9fY3VzdG9tZXIgd2hlcmUgY19pZCA9ID8iKTsKLQkgICAgcHMuc2V0SW50KDEsIGtleS5pbnRWYWx1ZSgpKTsKLQkgICAgUmVzdWx0U2V0IHJzID0gcHMuZXhlY3V0ZVF1ZXJ5KCk7Ci0JICAgIGlmICghcnMubmV4dCgpKQotCSAgICAgICB0aHJvdyBuZXcgRmluZGVyRXhjZXB0aW9uKCJObyBjdXN0IGZvciAiICsgaWQpOwotCSAgICBTdHJpbmcgcGhvbmUgPSBycy5nZXRTdHJpbmcoMSk7Ci0JICAgIHJldHVybiBrZXk7Ci0JfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7Ci0JICAgIHRocm93IG5ldyBGaW5kZXJFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOwotCX0gZmluYWxseSB7IAotCSAgICB0cnkgewotCQlpZiAocHMgIT0gbnVsbCkKLQkJICAgIHBzLmNsb3NlKCk7Ci0JCWlmIChjICE9IG51bGwpCi0JCSAgICBjLmNsb3NlKCk7Ci0JICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQotCX0KKyAgICBDb25uZWN0aW9uIGMgPSBudWxsOworICAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgICAgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCisgICAgICAgICJTRUxFQ1QgY19waG9uZSBmcm9tIE9fY3VzdG9tZXIgd2hlcmUgY19pZCA9ID8iKTsKKyAgICAgICAgcHMuc2V0SW50KDEsIGtleS5pbnRWYWx1ZSgpKTsKKyAgICAgICAgUmVzdWx0U2V0IHJzID0gcHMuZXhlY3V0ZVF1ZXJ5KCk7CisgICAgICAgIGlmICghcnMubmV4dCgpKQorICAgICAgICAgICB0aHJvdyBuZXcgRmluZGVyRXhjZXB0aW9uKCJObyBjdXN0IGZvciAiICsgaWQpOworICAgICAgICBTdHJpbmcgcGhvbmUgPSBycy5nZXRTdHJpbmcoMSk7CisgICAgICAgIHJldHVybiBrZXk7CisgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7CisgICAgICAgIHRocm93IG5ldyBGaW5kZXJFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOworICAgIH0gZmluYWxseSB7CisgICAgICAgIHRyeSB7CisgICAgICAgIGlmIChwcyAhPSBudWxsKQorICAgICAgICAgICAgcHMuY2xvc2UoKTsKKyAgICAgICAgaWYgKGMgIT0gbnVsbCkKKyAgICAgICAgICAgIGMuY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7Ci0JQ29ubmVjdGlvbiBjID0gbnVsbDsKLSAgICAgCVByZXBhcmVkU3RhdGVtZW50IHBzID0gbnVsbDsKLQl0cnkgewotCSAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAJICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAotCQkiU0VMRUNUIGNfcGhvbmUgZnJvbSBPX2N1c3RvbWVyIHdoZXJlIGNfaWQgPSA/Iik7Ci0JICAgIHBzLnNldEludCgxLCBpZCk7Ci0JICAgIFJlc3VsdFNldCBycyA9IHBzLmV4ZWN1dGVRdWVyeSgpOwotCSAgICBpZiAoIXJzLm5leHQoKSkKLQkgICAgICAgdGhyb3cgbmV3IE5vU3VjaEVudGl0eUV4Y2VwdGlvbigiTm8gY3VzdCBmb3IgIiArIGlkKTsKLQkgICAgU3RyaW5nIHBob25lID0gcnMuZ2V0U3RyaW5nKDEpOwotCX0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAgewotCSAgICB0aHJvdyBuZXcgTm9TdWNoRW50aXR5RXhjZXB0aW9uKCJTUUwgZXhjZXB0aW9uICIgKyBlKTsKLQl9IGZpbmFsbHkgeyAKLQkgICAgdHJ5IHsKLQkJaWYgKHBzICE9IG51bGwpCi0JCSAgICBwcy5jbG9zZSgpOwotCQlpZiAoYyAhPSBudWxsKQotCQkgICAgYy5jbG9zZSgpOwotCSAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KLQl9CisgICAgQ29ubmVjdGlvbiBjID0gbnVsbDsKKyAgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHBzID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICAgICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAorICAgICAgICAiU0VMRUNUIGNfcGhvbmUgZnJvbSBPX2N1c3RvbWVyIHdoZXJlIGNfaWQgPSA/Iik7CisgICAgICAgIHBzLnNldEludCgxLCBpZCk7CisgICAgICAgIFJlc3VsdFNldCBycyA9IHBzLmV4ZWN1dGVRdWVyeSgpOworICAgICAgICBpZiAoIXJzLm5leHQoKSkKKyAgICAgICAgICAgdGhyb3cgbmV3IE5vU3VjaEVudGl0eUV4Y2VwdGlvbigiTm8gY3VzdCBmb3IgIiArIGlkKTsKKyAgICAgICAgU3RyaW5nIHBob25lID0gcnMuZ2V0U3RyaW5nKDEpOworICAgIH0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAgeworICAgICAgICB0aHJvdyBuZXcgTm9TdWNoRW50aXR5RXhjZXB0aW9uKCJTUUwgZXhjZXB0aW9uICIgKyBlKTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICB0cnkgeworICAgICAgICBpZiAocHMgIT0gbnVsbCkKKyAgICAgICAgICAgIHBzLmNsb3NlKCk7CisgICAgICAgIGlmIChjICE9IG51bGwpCisgICAgICAgICAgICBjLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQorICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJTdG9yZSgpIHsKLQlDb25uZWN0aW9uIGMgPSBudWxsOwotICAgICAJUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOwotCXRyeSB7Ci0JICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgIAkgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCi0JCSJVUERBVEUgT19jdXN0b21lciBTRVQgY19waG9uZSA9ID8gV0hFUkUgY19pZCA9ID8iKTsKLQkgICAgcHMuc2V0U3RyaW5nKDEsICI1NTAtMTIxMiIpOwotCSAgICBwcy5zZXRJbnQoMiwgaWQpOwotCSAgICBpZiAocHMuZXhlY3V0ZVVwZGF0ZSgpICE9IDEpCi0JCXRocm93IG5ldyBFSkJFeGNlcHRpb24oIkRpZG50IHN0b3JlIGVqYiIpOworICAgIENvbm5lY3Rpb24gYyA9IG51bGw7CisgICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgICAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKKyAgICAgICAgIlVQREFURSBPX2N1c3RvbWVyIFNFVCBjX3Bob25lID0gPyBXSEVSRSBjX2lkID0gPyIpOworICAgICAgICBwcy5zZXRTdHJpbmcoMSwgIjU1MC0xMjEyIik7CisgICAgICAgIHBzLnNldEludCgyLCBpZCk7CisgICAgICAgIGlmIChwcy5leGVjdXRlVXBkYXRlKCkgIT0gMSkKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiRGlkbnQgc3RvcmUgZWpiIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiWyoqU2ltcGxlQk1QQmVhbioqXSBEb25lIHdpdGggZWpiU3RvcmUuLi4uIik7Ci0JfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOwotCX0gZmluYWxseSB7IAotCSAgICB0cnkgewotCQlpZiAocHMgIT0gbnVsbCkKLQkJICAgIHBzLmNsb3NlKCk7Ci0JCWlmIChjICE9IG51bGwpCi0JCSAgICBjLmNsb3NlKCk7Ci0JICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQotCX0KKyAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgaWYgKHBzICE9IG51bGwpCisgICAgICAgICAgICBwcy5jbG9zZSgpOworICAgICAgICBpZiAoYyAhPSBudWxsKQorICAgICAgICAgICAgYy5jbG9zZSgpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgdGhyb3dzIFJlbW92ZUV4Y2VwdGlvbiB7Ci0JQ29ubmVjdGlvbiBjID0gbnVsbDsKLSAgICAgCVByZXBhcmVkU3RhdGVtZW50IHBzID0gbnVsbDsKLQl0cnkgewotCSAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAJICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAotCQkiREVMRVRFIEZST00gT19jdXN0b21lciBXSEVSRSBjX2lkID0gPyIpOwotCSAgICBwcy5zZXRJbnQoMSwgaWQpOwotCSAgICBpZiAocHMuZXhlY3V0ZVVwZGF0ZSgpICE9IDEpCi0JCXRocm93IG5ldyBSZW1vdmVFeGNlcHRpb24oIkRpZG50IHJlbW92ZSBlamIiKTsKLQl9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKLQkgICAgdGhyb3cgbmV3IFJlbW92ZUV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7Ci0JfSBmaW5hbGx5IHsgCi0JICAgIHRyeSB7Ci0JCWlmIChwcyAhPSBudWxsKQotCQkgICAgcHMuY2xvc2UoKTsKLQkJaWYgKGMgIT0gbnVsbCkKLQkJICAgIGMuY2xvc2UoKTsKLQkgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9Ci0JfQorICAgIENvbm5lY3Rpb24gYyA9IG51bGw7CisgICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgICAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKKyAgICAgICAgIkRFTEVURSBGUk9NIE9fY3VzdG9tZXIgV0hFUkUgY19pZCA9ID8iKTsKKyAgICAgICAgcHMuc2V0SW50KDEsIGlkKTsKKyAgICAgICAgaWYgKHBzLmV4ZWN1dGVVcGRhdGUoKSAhPSAxKQorICAgICAgICB0aHJvdyBuZXcgUmVtb3ZlRXhjZXB0aW9uKCJEaWRudCByZW1vdmUgZWpiIik7CisgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7CisgICAgICAgIHRocm93IG5ldyBSZW1vdmVFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOworICAgIH0gZmluYWxseSB7CisgICAgICAgIHRyeSB7CisgICAgICAgIGlmIChwcyAhPSBudWxsKQorICAgICAgICAgICAgcHMuY2xvc2UoKTsKKyAgICAgICAgaWYgKGMgIT0gbnVsbCkKKyAgICAgICAgICAgIGMuY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkge30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHdvbGV2ZWwvZWpiL1N0YXRlbGVzc0JlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHdvbGV2ZWwvZWpiL1N0YXRlbGVzc0JlYW4uamF2YQppbmRleCAzY2M0MDNlLi4yNjU4MzFkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3R3b2xldmVsL2VqYi9TdGF0ZWxlc3NCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90d29sZXZlbC9lamIvU3RhdGVsZXNzQmVhbi5qYXZhCkBAIC0zNCwxNCArMzQsMTQgQEAKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzZXNzaW9uQ29udGV4dCkgewogICAgICAgICB0aGlzLnNlc3Npb25Db250ZXh0ID0gc2Vzc2lvbkNvbnRleHQ7CiAKLQkgICAgQ29udGV4dCBjb250ZXh0ID0gbnVsbDsKLQkgICAgdHJ5IHsKLQkgICAgICAgIGNvbnRleHQgICAgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkgICAgICAgIE9iamVjdCBvYmpSZWYgPSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlQk1QSG9tZSIpOwotCSAgICAgICAgYm1wSG9tZSA9IChTaW1wbGVCTVBIb21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqUmVmLCBTaW1wbGVCTVBIb21lLmNsYXNzKTsKLQkgICAgfSBjYXRjaCAoTmFtaW5nRXhjZXB0aW9uIGUpIHsKLQkgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImNhbnQgZmluZCBTaW1wbGVCTVBIb21lIik7Ci0JICAgIH0KKyAgICAgICAgQ29udGV4dCBjb250ZXh0ID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGNvbnRleHQgICAgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgICAgIE9iamVjdCBvYmpSZWYgPSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlQk1QSG9tZSIpOworICAgICAgICAgICAgYm1wSG9tZSA9IChTaW1wbGVCTVBIb21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqUmVmLCBTaW1wbGVCTVBIb21lLmNsYXNzKTsKKyAgICAgICAgfSBjYXRjaCAoTmFtaW5nRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImNhbnQgZmluZCBTaW1wbGVCTVBIb21lIik7CisgICAgICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBjcmVhdGVCTVAoSW50ZWdlciBrZXkpCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3R3b2xldmVsL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHdvbGV2ZWwvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IGU0OTE0ZjYuLmYyNTYwNzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHdvbGV2ZWwvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHdvbGV2ZWwvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDcgKzEsNyBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KLQ0KLUNSRUFURSBUQUJMRSBPX0N1c3RvbWVyICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOworCitDUkVBVEUgVEFCTEUgT19DdXN0b21lciAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3R3b2xldmVsL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3R3b2xldmVsL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggNzBkMWZjYy4uZDg1NGI5NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90d29sZXZlbC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHdvbGV2ZWwvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbApAQCAtMSArMSBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHh0ZXN0cy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3R4dGVzdHMvYnVpbGQueG1sCmluZGV4IDY2ZWM1MDMuLjQ4NWZhZDcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHh0ZXN0cy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90eHRlc3RzL2J1aWxkLnhtbApAQCAtMzAsMTAgKzMwLDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6CisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgogICAgICAgICAgICAgICAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamItYm1wIHR4dGVzdHMgdGVzdHMpCi0JCQkKLQk8L2VjaG8+CisKKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3R4dGVzdHMvc2ltcGxlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3R4dGVzdHMvc2ltcGxlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYzNhYTU1ZC4uNTEzNjUyYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90eHRlc3RzL3NpbXBsZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHh0ZXN0cy9zaW1wbGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTggKzE1LDE4IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItYm1wLXR4dGVzdHMtc2ltcGxlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3R4dGVzdHMvc2ltcGxlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHh0ZXN0cy9zaW1wbGUvYnVpbGQueG1sCmluZGV4IGFjOTc2YjEuLjYwMzlkNGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHh0ZXN0cy9zaW1wbGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHh0ZXN0cy9zaW1wbGUvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OCwzNCArNDgsMzQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqL0N1c3RvbWVySW5mby5jbGFzcywgKiovU2ltcGxlQk1QLmNsYXNzLCAqKi9TaW1wbGVCTVBIb21lLmNsYXNzLCoqLypDbGllbnQqLmNsYXNzIiAvPgogICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtZWpiLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtZWpiLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICA8L2FudGNhbGw+CiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHh0ZXN0cy9zaW1wbGUvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90eHRlc3RzL3NpbXBsZS9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKaW5kZXggNmQ4YTkwNy4uMzg2NDA2ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90eHRlc3RzL3NpbXBsZS9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90eHRlc3RzL3NpbXBsZS9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKQEAgLTM1LDE5ICszNSwxOSBAQAogICAgIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlRlc3RpbmcgdHh0ZXN0cyBzaW1wbGUgYXBwLiIpOwotCSAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgT2JqZWN0IG9ialJlZiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlQk1QSG9tZSIpOwotCSAgICBTaW1wbGVCTVBIb21lIHNpbXBsZUJNUEhvbWUgPSAoU2ltcGxlQk1QSG9tZSkKKyAgICAgICAgU2ltcGxlQk1QSG9tZSBzaW1wbGVCTVBIb21lID0gKFNpbXBsZUJNUEhvbWUpCiAgICAgICAgICAgICAgICAgamF2YXgucm1pLlBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpSZWYsIFNpbXBsZUJNUEhvbWUuY2xhc3MpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGludCBpZD0gKGludCkgU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhcnRpbmcgdGVzdCBmb3IgaWQ6ICIgKyBpZCk7Ci0JICAgIFNpbXBsZUJNUCBzaW1wbGVCTVAgPSBzaW1wbGVCTVBIb21lLmNyZWF0ZShpZCk7Ci0JICAgIHNpbXBsZUJNUC5nZXRJRCgpOwotICAgICAgICAgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhcnRpbmcgdGVzdCBmb3IgaWQ6ICIgKyBpZCk7CisgICAgICAgIFNpbXBsZUJNUCBzaW1wbGVCTVAgPSBzaW1wbGVCTVBIb21lLmNyZWF0ZShpZCk7CisgICAgICAgIHNpbXBsZUJNUC5nZXRJRCgpOworCiAgICAgICAgICAgICBTaW1wbGVCTVAgYmVhbiA9IHNpbXBsZUJNUEhvbWUuZmluZEJ5UHJpbWFyeUtleShuZXcgSW50ZWdlcihpZCkpOwotCSAgICBzaW1wbGVCTVAuZ2V0SUQoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJEb25lIGZvciBpZDogIiArIGlkKTsKKyAgICAgICAgc2ltcGxlQk1QLmdldElEKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRG9uZSBmb3IgaWQ6ICIgKyBpZCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygidHh0ZXN0cyBzaW1wbGUiLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90eHRlc3RzL3NpbXBsZS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90eHRlc3RzL3NpbXBsZS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IGFmOTA4YmUuLjQ3Y2Y0MTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHh0ZXN0cy9zaW1wbGUvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3R4dGVzdHMvc2ltcGxlL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTU1LDYgKzU1LDYgQEAKICAgICAgIDx0cmFucy1hdHRyaWJ1dGU+UmVxdWlyZWQ8L3RyYW5zLWF0dHJpYnV0ZT4KICAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgPC9hc3NlbWJseS1kZXNjcmlwdG9yPgotICAgICAgCisKIDwvZWpiLWphcj4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90eHRlc3RzL3NpbXBsZS9lamIvU2ltcGxlQk1QQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90eHRlc3RzL3NpbXBsZS9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCmluZGV4IGUxNzFlYWIuLjUzMWMyZjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHh0ZXN0cy9zaW1wbGUvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3R4dGVzdHMvc2ltcGxlL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKQEAgLTM1LDEyICszNSwxMiBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oX2RlYnVnTmFtZSArICJbIiArIFRocmVhZC5jdXJyZW50VGhyZWFkKCkgKyAiXSIKICAgICAgICAgICAgICAgICArICIgRW50ZXJlZCBzZXRFbnRpdHlDb250ZXh0Li4uLiIpOwogICAgICAgICB0aGlzLmVudGl0eUNvbnRleHQgPSBlbnRpdHlDb250ZXh0OwotCSAgICB0cnkgewotCSAgICAgICAgQ29udGV4dCBjb250ZXh0ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JICAgICAgICBkcyA9IChEYXRhU291cmNlKSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7Ci0JICAgIH0gY2F0Y2ggKE5hbWluZ0V4Y2VwdGlvbiBlKSB7Ci0JICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJjYW50IGZpbmQgZGF0YXNvdXJjZSIpOwotCSAgICB9CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBDb250ZXh0IGNvbnRleHQgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgICAgIGRzID0gKERhdGFTb3VyY2UpIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKKyAgICAgICAgfSBjYXRjaCAoTmFtaW5nRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImNhbnQgZmluZCBkYXRhc291cmNlIik7CisgICAgICAgIH0KICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKF9kZWJ1Z05hbWUgKyAiWyIgKyBUaHJlYWQuY3VycmVudFRocmVhZCgpICsgIl0iCiAgICAgICAgICAgICAgICAgKyAiIERvbmUgd2l0aCBzZXRFbnRpdHlDb250ZXh0Li4uLiIpOwogICAgIH0KQEAgLTQ5LDMxICs0OSwzMSBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oX2RlYnVnTmFtZSArICJbIiArIFRocmVhZC5jdXJyZW50VGhyZWFkKCkgKyAiXSIKICAgICAgICAgICAgICAgICArICIgRW50ZXJlZCBlamJDcmVhdGUoIiArIGkgKyAiKS4uLi4iKTsKIAotCSAgICBDb25uZWN0aW9uIGMgPSBudWxsOwotICAgICAJUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOwotCSAgICB0cnkgewotCSAgICAgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgCSAgICAgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCi0JCSAgICAiSU5TRVJUIElOVE8gT19jdXN0b21lciAoY19pZCwgY19waG9uZSkgVkFMVUVTICg/LD8pIik7Ci0JICAgICAgICBwcy5zZXRJbnQoMSwgaSk7Ci0JICAgICAgICBwcy5zZXRTdHJpbmcoMiwgIlBob25lXyIgKyBpKTsKLQkgICAgICAgIGlmIChwcy5leGVjdXRlVXBkYXRlKCkgIT0gMSkgewotCQkgICAgICAgIHRocm93IG5ldyBDcmVhdGVFeGNlcHRpb24oIkRpZG50IGNyZWF0ZSBlamIiKTsKKyAgICAgICAgQ29ubmVjdGlvbiBjID0gbnVsbDsKKyAgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHBzID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgICAgICAgICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAorICAgICAgICAgICAgIklOU0VSVCBJTlRPIE9fY3VzdG9tZXIgKGNfaWQsIGNfcGhvbmUpIFZBTFVFUyAoPyw/KSIpOworICAgICAgICAgICAgcHMuc2V0SW50KDEsIGkpOworICAgICAgICAgICAgcHMuc2V0U3RyaW5nKDIsICJQaG9uZV8iICsgaSk7CisgICAgICAgICAgICBpZiAocHMuZXhlY3V0ZVVwZGF0ZSgpICE9IDEpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ3JlYXRlRXhjZXB0aW9uKCJEaWRudCBjcmVhdGUgZWpiIik7CiAgICAgICAgICAgICB9Ci0JICAgIH0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAgewotCSAgICAgICAgdGhyb3cgbmV3IENyZWF0ZUV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7Ci0JICAgIH0gZmluYWxseSB7IAotCSAgICAgICAgdHJ5IHsKLQkJICAgIGlmIChwcyAhPSBudWxsKQotCQkgICAgICAgIHBzLmNsb3NlKCk7Ci0JCSAgICBpZiAoYyAhPSBudWxsKQotCQkgICAgICAgIGMuY2xvc2UoKTsKLQkgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQotCSAgICB9Ci0JICAgIGlkID0gaTsKKyAgICAgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7CisgICAgICAgICAgICB0aHJvdyBuZXcgQ3JlYXRlRXhjZXB0aW9uKCJTUUwgZXhjZXB0aW9uICIgKyBlKTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpZiAocHMgIT0gbnVsbCkKKyAgICAgICAgICAgICAgICBwcy5jbG9zZSgpOworICAgICAgICAgICAgaWYgKGMgIT0gbnVsbCkKKyAgICAgICAgICAgICAgICBjLmNsb3NlKCk7CisgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KKyAgICAgICAgfQorICAgICAgICBpZCA9IGk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihfZGVidWdOYW1lICsgIlsiICsgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSArICJdIgogICAgICAgICAgICAgICAgICsgIiBEb25lIHdpdGggZWpiQ3JlYXRlKCIgKyBpICsgIikuLi4uIik7Ci0JICAgIHJldHVybiBuZXcgSW50ZWdlcihpKTsKKyAgICAgICAgcmV0dXJuIG5ldyBJbnRlZ2VyKGkpOwogICAgIH0KIAogICAgIHB1YmxpYyBpbnQgZ2V0SUQoKSB7CkBAIC05Miw1NiArOTIsNTYgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKF9kZWJ1Z05hbWUgKyAiWyIgKyBUaHJlYWQuY3VycmVudFRocmVhZCgpICsgIl0iCiAgICAgICAgICAgICAgICAgKyAiIEVudGVyZWQgZWpiRmluZEJ5UHJpbWFyeUtleSgiICsga2V5LmludFZhbHVlKCkgKyAiKS4uLi4iKTsKIAotCSAgICBDb25uZWN0aW9uIGMgPSBudWxsOwotICAgICAJUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOwotCSAgICB0cnkgewotCSAgICAgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgCSAgICAgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCi0JCSAgICAiU0VMRUNUIGNfcGhvbmUgZnJvbSBPX2N1c3RvbWVyIHdoZXJlIGNfaWQgPSA/Iik7Ci0JICAgICAgICBwcy5zZXRJbnQoMSwga2V5LmludFZhbHVlKCkpOwotCSAgICAgICAgUmVzdWx0U2V0IHJzID0gcHMuZXhlY3V0ZVF1ZXJ5KCk7Ci0JICAgICAgICBpZiAoIXJzLm5leHQoKSkgewotCSAgICAgICAgICAgIHRocm93IG5ldyBGaW5kZXJFeGNlcHRpb24oIk5vIGN1c3QgZm9yICIgKyBpZCk7CisgICAgICAgIENvbm5lY3Rpb24gYyA9IG51bGw7CisgICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICAgICAgICAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKKyAgICAgICAgICAgICJTRUxFQ1QgY19waG9uZSBmcm9tIE9fY3VzdG9tZXIgd2hlcmUgY19pZCA9ID8iKTsKKyAgICAgICAgICAgIHBzLnNldEludCgxLCBrZXkuaW50VmFsdWUoKSk7CisgICAgICAgICAgICBSZXN1bHRTZXQgcnMgPSBwcy5leGVjdXRlUXVlcnkoKTsKKyAgICAgICAgICAgIGlmICghcnMubmV4dCgpKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZpbmRlckV4Y2VwdGlvbigiTm8gY3VzdCBmb3IgIiArIGlkKTsKICAgICAgICAgICAgIH0KLQkgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7Ci0JICAgICAgICB0aHJvdyBuZXcgRmluZGVyRXhjZXB0aW9uKCJTUUwgZXhjZXB0aW9uICIgKyBlKTsKLQkgICAgfSBmaW5hbGx5IHsgCi0JICAgICAgICB0cnkgewotCQkgICAgaWYgKHBzICE9IG51bGwpCi0JCSAgICAgICAgcHMuY2xvc2UoKTsKLQkJICAgIGlmIChjICE9IG51bGwpCi0JCSAgICAgICAgYy5jbG9zZSgpOwotCSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9Ci0JICAgIH0KKyAgICAgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7CisgICAgICAgICAgICB0aHJvdyBuZXcgRmluZGVyRXhjZXB0aW9uKCJTUUwgZXhjZXB0aW9uICIgKyBlKTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpZiAocHMgIT0gbnVsbCkKKyAgICAgICAgICAgICAgICBwcy5jbG9zZSgpOworICAgICAgICAgICAgaWYgKGMgIT0gbnVsbCkKKyAgICAgICAgICAgICAgICBjLmNsb3NlKCk7CisgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KKyAgICAgICAgfQogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oX2RlYnVnTmFtZSArICJbIiArIFRocmVhZC5jdXJyZW50VGhyZWFkKCkgKyAiXSIKICAgICAgICAgICAgICAgICArICIgRE9ORSBlamJGaW5kQnlQcmltYXJ5S2V5KCIgKyBrZXkuaW50VmFsdWUoKSArICIpLi4uLiIpOwotCSAgICByZXR1cm4ga2V5OworICAgICAgICByZXR1cm4ga2V5OwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihfZGVidWdOYW1lICsgIlsiICsgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSArICJdIgogICAgICAgICAgICAgICAgICsgIiBFbnRlcmVkIGVqYkxvYWQoKS4uLi4iKTsKLQkgICAgQ29ubmVjdGlvbiBjID0gbnVsbDsKLSAgICAgCVByZXBhcmVkU3RhdGVtZW50IHBzID0gbnVsbDsKLQkgICAgdHJ5IHsKLQkgICAgICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgIAkgICAgICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAotCQkgICAgIlNFTEVDVCBjX3Bob25lIGZyb20gT19jdXN0b21lciB3aGVyZSBjX2lkID0gPyIpOwotCSAgICAgICAgcHMuc2V0SW50KDEsIGlkKTsKLQkgICAgICAgIFJlc3VsdFNldCBycyA9IHBzLmV4ZWN1dGVRdWVyeSgpOwotCSAgICAgICAgaWYgKCFycy5uZXh0KCkpCi0JICAgICAgICAgICAgdGhyb3cgbmV3IE5vU3VjaEVudGl0eUV4Y2VwdGlvbigiTm8gY3VzdCBmb3IgIiArIGlkKTsKLQkgICAgICAgIFN0cmluZyBwaG9uZSA9IHJzLmdldFN0cmluZygxKTsKLQkgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7Ci0JICAgICAgICB0aHJvdyBuZXcgTm9TdWNoRW50aXR5RXhjZXB0aW9uKCJTUUwgZXhjZXB0aW9uICIgKyBlKTsKLQkgICAgfSBmaW5hbGx5IHsgCi0JICAgICAgICB0cnkgewotCQkgICAgaWYgKHBzICE9IG51bGwpCi0JCSAgICAgICAgcHMuY2xvc2UoKTsKLQkJICAgIGlmIChjICE9IG51bGwpCi0JCSAgICAgICAgYy5jbG9zZSgpOwotCSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9Ci0JICAgIH0KKyAgICAgICAgQ29ubmVjdGlvbiBjID0gbnVsbDsKKyAgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHBzID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgICAgICAgICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAorICAgICAgICAgICAgIlNFTEVDVCBjX3Bob25lIGZyb20gT19jdXN0b21lciB3aGVyZSBjX2lkID0gPyIpOworICAgICAgICAgICAgcHMuc2V0SW50KDEsIGlkKTsKKyAgICAgICAgICAgIFJlc3VsdFNldCBycyA9IHBzLmV4ZWN1dGVRdWVyeSgpOworICAgICAgICAgICAgaWYgKCFycy5uZXh0KCkpCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IE5vU3VjaEVudGl0eUV4Y2VwdGlvbigiTm8gY3VzdCBmb3IgIiArIGlkKTsKKyAgICAgICAgICAgIFN0cmluZyBwaG9uZSA9IHJzLmdldFN0cmluZygxKTsKKyAgICAgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7CisgICAgICAgICAgICB0aHJvdyBuZXcgTm9TdWNoRW50aXR5RXhjZXB0aW9uKCJTUUwgZXhjZXB0aW9uICIgKyBlKTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpZiAocHMgIT0gbnVsbCkKKyAgICAgICAgICAgICAgICBwcy5jbG9zZSgpOworICAgICAgICAgICAgaWYgKGMgIT0gbnVsbCkKKyAgICAgICAgICAgICAgICBjLmNsb3NlKCk7CisgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KKyAgICAgICAgfQogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oX2RlYnVnTmFtZSArICJbIiArIFRocmVhZC5jdXJyZW50VGhyZWFkKCkgKyAiXSIKICAgICAgICAgICAgICAgICArICIgRE9ORSBlamJMb2FkKCkuLi4uIik7CiAgICAgfQpAQCAtMTQ5LDI3ICsxNDksMjcgQEAKICAgICBwdWJsaWMgdm9pZCBlamJTdG9yZSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKF9kZWJ1Z05hbWUgKyAiWyIgKyBUaHJlYWQuY3VycmVudFRocmVhZCgpICsgIl0iCiAgICAgICAgICAgICAgICAgKyAiIEVudGVyZWQgZWpiU3RvcmUoKS4uLi4iKTsKLQkgICAgQ29ubmVjdGlvbiBjID0gbnVsbDsKLSAgICAgCVByZXBhcmVkU3RhdGVtZW50IHBzID0gbnVsbDsKLQkgICAgdHJ5IHsKLQkgICAgICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgIAkgICAgICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAotCQkgICAgIlVQREFURSBPX2N1c3RvbWVyIFNFVCBjX3Bob25lID0gPyBXSEVSRSBjX2lkID0gPyIpOwotCSAgICAgICAgcHMuc2V0U3RyaW5nKDEsICI1NTAtMTIxMiIpOwotCSAgICAgICAgcHMuc2V0SW50KDIsIGlkKTsKLQkgICAgICAgIGlmIChwcy5leGVjdXRlVXBkYXRlKCkgIT0gMSkKLQkJICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIkRpZG50IHN0b3JlIGVqYiIpOworICAgICAgICBDb25uZWN0aW9uIGMgPSBudWxsOworICAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgICAgICAgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCisgICAgICAgICAgICAiVVBEQVRFIE9fY3VzdG9tZXIgU0VUIGNfcGhvbmUgPSA/IFdIRVJFIGNfaWQgPSA/Iik7CisgICAgICAgICAgICBwcy5zZXRTdHJpbmcoMSwgIjU1MC0xMjEyIik7CisgICAgICAgICAgICBwcy5zZXRJbnQoMiwgaWQpOworICAgICAgICAgICAgaWYgKHBzLmV4ZWN1dGVVcGRhdGUoKSAhPSAxKQorICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiRGlkbnQgc3RvcmUgZWpiIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlsqKlNpbXBsZUJNUEJlYW4qKl0gRG9uZSB3aXRoIGVqYlN0b3JlLi4uLiIpOwotCSAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKLQkgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOwotCSAgICB9IGZpbmFsbHkgeyAKLQkgICAgICAgIHRyeSB7Ci0JCSAgICBpZiAocHMgIT0gbnVsbCkKLQkJICAgICAgICBwcy5jbG9zZSgpOwotCQkgICAgaWYgKGMgIT0gbnVsbCkKLQkJICAgICAgICBjLmNsb3NlKCk7Ci0JICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KLQkgICAgfQorICAgICAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGlmIChwcyAhPSBudWxsKQorICAgICAgICAgICAgICAgIHBzLmNsb3NlKCk7CisgICAgICAgICAgICBpZiAoYyAhPSBudWxsKQorICAgICAgICAgICAgICAgIGMuY2xvc2UoKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQorICAgICAgICB9CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihfZGVidWdOYW1lICsgIlsiICsgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSArICJdIgogICAgICAgICAgICAgICAgICsgIiBET05FIGVqYlN0b3JlKCkuLi4uIik7CiAgICAgfQpAQCAtMTc3LDI1ICsxNzcsMjUgQEAKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB0aHJvd3MgUmVtb3ZlRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKF9kZWJ1Z05hbWUgKyAiWyIgKyBUaHJlYWQuY3VycmVudFRocmVhZCgpICsgIl0iCiAgICAgICAgICAgICAgICAgKyAiIEVudGVyZWQgZWpiUmVtb3ZlKCkuLi4uIik7Ci0JICAgIENvbm5lY3Rpb24gYyA9IG51bGw7Ci0gICAgIAlQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7Ci0JICAgIHRyeSB7Ci0JICAgICAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAJICAgICAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKLQkJICAgICJERUxFVEUgRlJPTSBPX2N1c3RvbWVyIFdIRVJFIGNfaWQgPSA/Iik7Ci0JICAgICAgICBwcy5zZXRJbnQoMSwgaWQpOwotCSAgICAgICAgaWYgKHBzLmV4ZWN1dGVVcGRhdGUoKSAhPSAxKQotCQkgICAgdGhyb3cgbmV3IFJlbW92ZUV4Y2VwdGlvbigiRGlkbnQgcmVtb3ZlIGVqYiIpOwotCSAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKLQkgICAgICAgIHRocm93IG5ldyBSZW1vdmVFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOwotCSAgICB9IGZpbmFsbHkgeyAKLQkgICAgICAgIHRyeSB7Ci0JCSAgICBpZiAocHMgIT0gbnVsbCkKLQkJICAgICAgICBwcy5jbG9zZSgpOwotCQkgICAgaWYgKGMgIT0gbnVsbCkKLQkJICAgICAgICBjLmNsb3NlKCk7Ci0JICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KLQkgICAgfQorICAgICAgICBDb25uZWN0aW9uIGMgPSBudWxsOworICAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgICAgICAgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCisgICAgICAgICAgICAiREVMRVRFIEZST00gT19jdXN0b21lciBXSEVSRSBjX2lkID0gPyIpOworICAgICAgICAgICAgcHMuc2V0SW50KDEsIGlkKTsKKyAgICAgICAgICAgIGlmIChwcy5leGVjdXRlVXBkYXRlKCkgIT0gMSkKKyAgICAgICAgICAgIHRocm93IG5ldyBSZW1vdmVFeGNlcHRpb24oIkRpZG50IHJlbW92ZSBlamIiKTsKKyAgICAgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVtb3ZlRXhjZXB0aW9uKCJTUUwgZXhjZXB0aW9uICIgKyBlKTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpZiAocHMgIT0gbnVsbCkKKyAgICAgICAgICAgICAgICBwcy5jbG9zZSgpOworICAgICAgICAgICAgaWYgKGMgIT0gbnVsbCkKKyAgICAgICAgICAgICAgICBjLmNsb3NlKCk7CisgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KKyAgICAgICAgfQogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oX2RlYnVnTmFtZSArICJbIiArIFRocmVhZC5jdXJyZW50VGhyZWFkKCkgKyAiXSIKICAgICAgICAgICAgICAgICArICIgRE9ORSBlamJSZW1vdmUoKS4uLi4iKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3R4dGVzdHMvc2ltcGxlL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHh0ZXN0cy9zaW1wbGUvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IDJjNGNiNjUuLjIzMTIwOWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHh0ZXN0cy9zaW1wbGUvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHh0ZXN0cy9zaW1wbGUvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDcgKzEsNyBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KLQ0KLUNSRUFURSBUQUJMRSBPX0N1c3RvbWVyICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDI2KQ0KLSk7DQotDQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOworCitDUkVBVEUgVEFCTEUgT19DdXN0b21lciAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMjYpCispOworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3R4dGVzdHMvc2ltcGxlL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3R4dGVzdHMvc2ltcGxlL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggNzBkMWZjYy4uZDg1NGI5NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90eHRlc3RzL3NpbXBsZS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHh0ZXN0cy9zaW1wbGUvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbApAQCAtMSArMSBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHh0ZXN0cy9zdGF0ZWxlc3MvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHh0ZXN0cy9zdGF0ZWxlc3MvYnVpbGQucHJvcGVydGllcwppbmRleCAyNGY2ODFiLi5mNDAzYzBlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3R4dGVzdHMvc3RhdGVsZXNzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90eHRlc3RzL3N0YXRlbGVzcy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMSArMTUsMjEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1ibXAtdHh0ZXN0cy1zdGF0ZWxlc3MiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHh0ZXN0cy9zdGF0ZWxlc3MvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90eHRlc3RzL3N0YXRlbGVzcy9idWlsZC54bWwKaW5kZXggYzUyNzMyMC4uMGM0NjAwMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90eHRlc3RzL3N0YXRlbGVzcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90eHRlc3RzL3N0YXRlbGVzcy9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ4LDE0ICs0OCwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovQ2xpZW50LmNsYXNzLCAqKi8qU0xTQiouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjcsNyArNjcsNyBAQAogICAgICAgICA8L2FudGNhbGw+CiAgICAgLS0+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8IS0tCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgpAQCAtNzksMTQgKzc5LDE0IEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3R4dGVzdHMvc3RhdGVsZXNzL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHh0ZXN0cy9zdGF0ZWxlc3MvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGYyOGRhMjcuLmNhNmQwMzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHh0ZXN0cy9zdGF0ZWxlc3MvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHh0ZXN0cy9zdGF0ZWxlc3MvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMiw4ICszMiw4IEBACiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcga1Rlc3ROb3RSdW4gICAgPSAiVEVTVCBOT1QgUlVOIjsKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBrVGVzdFBhc3NlZCAgICA9ICJURVNUIFBBU1NFRCI7CiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcga1Rlc3RGYWlsZWQgICAgPSAiVEVTVCBGQUlMRUQiOwotICAgIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHByaXZhdGUgU0xTQkhvbWUgaG9tZTsKQEAgLTQ2LDExICs0NiwxMSBAQAogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW3R4dGVzdHNdIERPTkUgZG9UZXN0KCkuLi4iKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoInR4dGVzdHMiKTsKLSAgICB9ICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogICAgICAgICBpbml0U0xTQigpOyAgICAgICAvL2NyZWF0ZSBNQVhfVElNRVJTCiAKQEAgLTEwNiw0ICsxMDYsNCBAQAogICAgIH0KIAogfQotICAgIAorCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3R4dGVzdHMvc3RhdGVsZXNzL2VqYi9TTFNCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3R4dGVzdHMvc3RhdGVsZXNzL2VqYi9TTFNCLmphdmEKaW5kZXggNjVkMDY2YS4uODBjYTdiYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90eHRlc3RzL3N0YXRlbGVzcy9lamIvU0xTQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHh0ZXN0cy9zdGF0ZWxlc3MvZWpiL1NMU0IuamF2YQpAQCAtMjIsNyArMjIsNyBAQAogICAgIGV4dGVuZHMgRUpCT2JqZWN0CiB7CiAKLQlwdWJsaWMgYm9vbGVhbiBkb1JvbGxiYWNrVGVzdChpbnQgaWQpCisgICAgcHVibGljIGJvb2xlYW4gZG9Sb2xsYmFja1Rlc3QoaW50IGlkKQogICAgICAgICB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIGJvb2xlYW4gZG9SZXR1cm5QYXJhbVRlc3QoaW50IGlkKQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90eHRlc3RzL3N0YXRlbGVzcy9lamIvU0xTQkVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90eHRlc3RzL3N0YXRlbGVzcy9lamIvU0xTQkVKQi5qYXZhCmluZGV4IDJkZGY5YWIuLmUyYzg1NWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHh0ZXN0cy9zdGF0ZWxlc3MvZWpiL1NMU0JFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3R4dGVzdHMvc3RhdGVsZXNzL2VqYi9TTFNCRUpCLmphdmEKQEAgLTI2LDE4ICsyNiwxOCBAQAogaW1wb3J0IGphdmF4LnJtaS5Qb3J0YWJsZVJlbW90ZU9iamVjdDsKIAogcHVibGljIGNsYXNzIFNMU0JFSkIKLSAgICBpbXBsZW1lbnRzIFNlc3Npb25CZWFuIAorICAgIGltcGxlbWVudHMgU2Vzc2lvbkJlYW4KIHsKLQlwcml2YXRlIFNlc3Npb25Db250ZXh0IHNlc3Npb25DdHg7CisgICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBzZXNzaW9uQ3R4OwogCi0JcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkge30KKyAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB7fQogCi0JcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgc2MpIHsKLQkJc2Vzc2lvbkN0eCA9IHNjOwotCX0KKyAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgeworICAgICAgICBzZXNzaW9uQ3R4ID0gc2M7CisgICAgfQogCi0JLy8gYnVzaW5lc3MgbWV0aG9kIHRvIGNyZWF0ZSBhIHRpbWVyCi0JcHVibGljIGJvb2xlYW4gZG9Sb2xsYmFja1Rlc3QoaW50IGlkKSB7CisgICAgLy8gYnVzaW5lc3MgbWV0aG9kIHRvIGNyZWF0ZSBhIHRpbWVyCisgICAgcHVibGljIGJvb2xlYW4gZG9Sb2xsYmFja1Rlc3QoaW50IGlkKSB7CiAgICAgICAgIGJvb2xlYW4gcmV0VmFsID0gZmFsc2U7CiAgICAgICAgIGJvb2xlYW4gZG9uZVJvbGxiYWNrID0gZmFsc2U7CiAgICAgICAgIHRyeSB7CkBAIC00OCw3ICs0OCw3IEBACiAKICAgICAgICAgICAgIHNlc3Npb25DdHguZ2V0VXNlclRyYW5zYWN0aW9uKCkuYmVnaW4oKTsKICAgICAgICAgICAgIGVudGl0eUhvbWUuY3JlYXRlKGlkKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvL1RoaXMgbXVzdCBiZSBub24gbnVsbAogICAgICAgICAgICAgU2ltcGxlQk1QIGVudGl0eSA9IChTaW1wbGVCTVApCiAgICAgICAgICAgICAgICAgZW50aXR5SG9tZS5maW5kQnlQcmltYXJ5S2V5KG5ldyBJbnRlZ2VyKGlkKSk7CkBAIC03OCw4ICs3OCw4IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotCQlyZXR1cm4gcmV0VmFsOwotCX0KKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiBkb1JldHVyblBhcmFtVGVzdChpbnQgaWQpIHsKIApAQCAtOTIsNyArOTIsNyBAQAogCiAgICAgICAgICAgICBzZXNzaW9uQ3R4LmdldFVzZXJUcmFuc2FjdGlvbigpLmJlZ2luKCk7CiAgICAgICAgICAgICBlbnRpdHlIb21lLmNyZWF0ZShpZCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgLy9UaGlzIG11c3QgYmUgbm9uIG51bGwKICAgICAgICAgICAgIFNpbXBsZUJNUCBlbnRpdHkgPSAoU2ltcGxlQk1QKQogICAgICAgICAgICAgICAgIGVudGl0eUhvbWUuZmluZEJ5UHJpbWFyeUtleShuZXcgSW50ZWdlcihpZCkpOwpAQCAtMTA0LDcgKzEwNCw3IEBACiAKICAgICAgICAgICAgIEN1c3RvbWVySW5mbyBjdXN0b21lckluZm8gPSBlbnRpdHkuZ2V0Q3VzdG9tZXJJbmZvKCk7CiAgICAgICAgICAgICByZXRWYWwgPSAoZm91bmRJRCA9PSBjdXN0b21lckluZm8uZ2V0Q3VzdG9tZXJJRCgpKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0aCkgewogICAgICAgICAgICAgdGgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0gZmluYWxseSB7CkBAIC0xMTQsMTMgKzExNCwxMyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLQkJcmV0dXJuIHJldFZhbDsKLQl9CisgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQogCi0JcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkge30KKyAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7fQogCi0JcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7fQorICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkge30KIAotCXB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHt9CisgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkge30KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90eHRlc3RzL3N0YXRlbGVzcy9lamIvU0xTQkhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ibXAvdHh0ZXN0cy9zdGF0ZWxlc3MvZWpiL1NMU0JIb21lLmphdmEKaW5kZXggOWMzMzJlYi4uZWE4NGUyMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2JtcC90eHRlc3RzL3N0YXRlbGVzcy9lamIvU0xTQkhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYm1wL3R4dGVzdHMvc3RhdGVsZXNzL2VqYi9TTFNCSG9tZS5qYXZhCkBAIC0yMyw2ICsyMyw2IEBACiBwdWJsaWMgaW50ZXJmYWNlIFNMU0JIb21lCiAgICAgZXh0ZW5kcyBFSkJIb21lCiB7Ci0JU0xTQiBjcmVhdGUoKQorICAgIFNMU0IgY3JlYXRlKCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiwgQ3JlYXRlRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9idWlsZC54bWwKaW5kZXggMjdjNTFjMS4uZjExNDg4MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvYnVpbGQueG1sCkBAIC00MiwxNyArNDIsMTcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYWxsIj4KIAotCTxhbnRjYWxsIHRhcmdldD0ic2V0dXAiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InRlc3QtYWxsIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJ1bnNldHVwIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXR1cCIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0idGVzdC1hbGwiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InVuc2V0dXAiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXBvcnQiLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0ibGl0ZSI+CiAKLQk8YW50Y2FsbCB0YXJnZXQ9InNldHVwIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJ0ZXN0LWxpdGUiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InVuc2V0dXAiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InNldHVwIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJ0ZXN0LWxpdGUiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InVuc2V0dXAiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXBvcnQtbGl0ZSIvPgogICAgIDwvdGFyZ2V0PgogCkBAIC04MSw3ICs4MSw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIj4KIAotCTxhbnRjYWxsIHRhcmdldD0ic3RhcnQtZGF0YWJhc2UiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InN0YXJ0LWRhdGFiYXNlIi8+CiAgICAgICAgIDxhbnQgdGFyZ2V0PSJzdGFydERvbWFpbiIvPgogICAgICAgICA8YW50IHRhcmdldD0iY2xlYW4tcmVzdWx0Ii8+CiAKQEAgLTEwOCwxNiArMTA4LDE2IEBACiAKICAgICAgICAgPGFudCBkaXI9InN0dWJzIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0idHhwcm9wIiB0YXJnZXQ9ImFsbCIvPgotICAgICAgICA8YW50IGRpcj0iZWpiYyIgdGFyZ2V0PSJhbGwiLz4gIAorICAgICAgICA8YW50IGRpcj0iZWpiYyIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9ImVqYjMwIiB0YXJnZXQ9ImFsbCIvPgotICAgICAgICA8YW50IGRpcj0ibWRiIiB0YXJnZXQ9ImFsbCIvPiAKKyAgICAgICAgPGFudCBkaXI9Im1kYiIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9ImNsaSIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9InRpbWVyIiB0YXJnZXQ9ImFsbCIvPgotICAgICAgICA8YW50IGRpcj0iYm1wIiB0YXJnZXQ9ImFsbCIvPiAgCi0gICAgICAgIDxhbnQgZGlyPSJjbXAiIHRhcmdldD0iYWxsIi8+ICAKKyAgICAgICAgPGFudCBkaXI9ImJtcCIgdGFyZ2V0PSJhbGwiLz4KKyAgICAgICAgPGFudCBkaXI9ImNtcCIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9InNmc2IiIHRhcmdldD0iYWxsIi8+Ci0gICAgICAgIDxhbnQgZGlyPSJhbGxvd2VkbWV0aG9kcyIgdGFyZ2V0PSJhbGwiLz4gCi0gICAgICAgIDxhbnQgZGlyPSJqbXMiIHRhcmdldD0iYWxsIi8+ICAKKyAgICAgICAgPGFudCBkaXI9ImFsbG93ZWRtZXRob2RzIiB0YXJnZXQ9ImFsbCIvPgorICAgICAgICA8YW50IGRpcj0iam1zIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0iZWpiMzIiIHRhcmdldD0iYWxsIi8+CiA8IS0tIGRpc2FibGUgYXMgaXQgZmFpbHMgb24gaHVkc29uIC4uLgogLS0+CkBAIC0xNTgsNyArMTU4LDcgQEAKICAgICAgICAgPGVjaG8gbWVzc2FnZT0iU3RvcHBpbmcgYXBwIHNlcnZlciBpbnN0YW5jZSIvPgogICAgICAgICA8YW50IHRhcmdldD0ic3RvcERvbWFpbiIvPgogCi0JPGFudGNhbGwgdGFyZ2V0PSJzdG9wLWRhdGFiYXNlIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJzdG9wLWRhdGFiYXNlIi8+CiAKIAogICAgICAgICA8cmVjb3JkIG5hbWU9ImVqYi5vdXRwdXQiIGFjdGlvbj0ic3RvcCIgLz4KQEAgLTE2NiwzMCArMTY2LDMwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9Im9yYl9pbnRlZ3JhdGlvbiI+Ci0gICAgICAgIDxhbnQgZGlyPSJlamIzMCIgdGFyZ2V0PSJjbGllbnR2aWV3Ii8+ICAKLSAgICAgICAgPGFudCBkaXI9ImVqYjMwIiB0YXJnZXQ9ImhlbGxvIi8+ICAKKyAgICAgICAgPGFudCBkaXI9ImVqYjMwIiB0YXJnZXQ9ImNsaWVudHZpZXciLz4KKyAgICAgICAgPGFudCBkaXI9ImVqYjMwIiB0YXJnZXQ9ImhlbGxvIi8+CiAgICAgICAgIDxhbnQgZGlyPSJlamJjIiB0YXJnZXQ9ImFsbCIvPgotICAgICAgICA8YW50IGRpcj0idHhwcm9wIiB0YXJnZXQ9ImFsbCIvPiAgCi0gICAgICAgIDxhbnQgZGlyPSJzdHVicyIgdGFyZ2V0PSJhbGwiLz4gIAotICAgICAgICA8YW50IGRpcj0iYm1wIiB0YXJnZXQ9InR4dGVzdHMiLz4gCisgICAgICAgIDxhbnQgZGlyPSJ0eHByb3AiIHRhcmdldD0iYWxsIi8+CisgICAgICAgIDxhbnQgZGlyPSJzdHVicyIgdGFyZ2V0PSJhbGwiLz4KKyAgICAgICAgPGFudCBkaXI9ImJtcCIgdGFyZ2V0PSJ0eHRlc3RzIi8+CiA8IS0tIGdyYWR1YWxseSByZWVuYWJsZSB0aGUgZXhpc3RpbmcgdGVzdHMgYXMgZmVhdHVyZXMgY29tZSBvbiBsaW5lCi0gICAgICAgIDxhbnQgZGlyPSJibXAiIHRhcmdldD0iaGFuZGxlIi8+ICAKKyAgICAgICAgPGFudCBkaXI9ImJtcCIgdGFyZ2V0PSJoYW5kbGUiLz4KIC0tPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJzdGFydC1kYXRhYmFzZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJTdGFydGluZyBkYXRhYmFzZSAtLWRicG9ydCAke2RiLnBvcnR9Ii8+Ci0JPCEtLSBzcGF3biBpcyBhZGRlZCB0byBwcmV2ZW50IGEgaGFuZyBvbiBXaW5kb3dzIC0tPgotCTxleGVjIHNwYXduPSJ0cnVlIiBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgorICAgIDwhLS0gc3Bhd24gaXMgYWRkZWQgdG8gcHJldmVudCBhIGhhbmcgb24gV2luZG93cyAtLT4KKyAgICA8ZXhlYyBzcGF3bj0idHJ1ZSIgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICAgICAgICA8YXJnIGxpbmU9InN0YXJ0LWRhdGFiYXNlIC0tZGJwb3J0ICR7ZGIucG9ydH0iLz4KLQk8L2V4ZWM+CisgICAgPC9leGVjPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJzdG9wLWRhdGFiYXNlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IlN0b3BwaW5nIGRhdGFiYXNlIC0tZGJwb3J0ICR7ZGIucG9ydH0iLz4KLQk8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgorICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CiAgICAgICAgICAgPGFyZyBsaW5lPSJzdG9wLWRhdGFiYXNlICAtLWRicG9ydCAke2RiLnBvcnR9Ii8+Ci0JPC9leGVjPgorICAgIDwvZXhlYz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVwb3J0LXJlc3VsdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtMjU4LDcgKzI1OCw3IEBACiAgICAgICAgIDxyZWNvcmQgbmFtZT0ic3R1YnMub3V0cHV0IiBhY3Rpb249InN0b3AiIC8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVwb3J0Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InRpbWVyIj4KICAgICAgICAgPHJlY29yZCBuYW1lPSJ0aW1lci5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiIC8+CiAgICAgICAgICAgICA8YW50IGRpcj0idGltZXIiIHRhcmdldD0iYWxsIi8+CkBAIC0yOTYsMjMgKzI5NiwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+Ci0JCVVzYWdlOgotCQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamIgdGVzdHMpCisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamIgdGVzdHMpCiAgICAgICAgICAgICBhbnQgb3JiX2ludGVncmF0aW9uIChFeGVjdXRlcyBhbGwgZWpiLXJlbGF0ZWQgb3JiIGludGVncmF0aW9uIHRlc3RzCiAKLQkJCWFudCBhbGxvd2VkbWV0aG9kcyAoRXhlY3V0ZXMgdGhlIGVqYiBhbGxvd2VkbWV0aG9kcyB0ZXN0cykKLQkJCWFudCBibXAgKEV4ZWN1dGVzIHRoZSBlamIgYm1wIHRlc3RzKQotCQkJYW50IGVqYmMgKEV4ZWN1dGVzIHRoZSBlamIgZWpiYyB0ZXN0cykKLQkJCWFudCBqbXMgKEV4ZWN1dGVzIHRoZSBlamIgam1zIHRlc3RzKQotCQkJYW50IG1kYiAoRXhlY3V0ZXMgdGhlIGVqYiBtZGIgdGVzdHMpCi0JCQlhbnQgc3R1YnMgKEV4ZWN1dGVzIHRoZSBlamIgc3R1YnMgdGVzdHMpCi0JCQlhbnQgdGltZXIgKEV4ZWN1dGVzIHRoZSBlamIgdGltZXIgdGVzdHMpCi0JCQlhbnQgdHhwcm9wIChFeGVjdXRlcyB0aGUgZWpiIHR4cHJvcCB0ZXN0cykKLQkJCWFudCBzZnNiIChFeGVjdXRlcyB0aGUgZWpiIHNmc2IgdGVzdHMpCi0JCQlhbnQgc3RyZXNzIChFeGVjdXRlcyB0aGUgZWpiIHN0cmVzcyB0ZXN0cykKLQkJCWFudCBlamIzMCAoRXhlY3V0ZXMgdGhlIGVqYjMwIHRlc3RzKQotCQkJYW50IGVqYjMxIChFeGVjdXRlcyB0aGUgZWpiMzEgdGVzdHMpCi0JPC9lY2hvPgorICAgICAgICAgICAgYW50IGFsbG93ZWRtZXRob2RzIChFeGVjdXRlcyB0aGUgZWpiIGFsbG93ZWRtZXRob2RzIHRlc3RzKQorICAgICAgICAgICAgYW50IGJtcCAoRXhlY3V0ZXMgdGhlIGVqYiBibXAgdGVzdHMpCisgICAgICAgICAgICBhbnQgZWpiYyAoRXhlY3V0ZXMgdGhlIGVqYiBlamJjIHRlc3RzKQorICAgICAgICAgICAgYW50IGptcyAoRXhlY3V0ZXMgdGhlIGVqYiBqbXMgdGVzdHMpCisgICAgICAgICAgICBhbnQgbWRiIChFeGVjdXRlcyB0aGUgZWpiIG1kYiB0ZXN0cykKKyAgICAgICAgICAgIGFudCBzdHVicyAoRXhlY3V0ZXMgdGhlIGVqYiBzdHVicyB0ZXN0cykKKyAgICAgICAgICAgIGFudCB0aW1lciAoRXhlY3V0ZXMgdGhlIGVqYiB0aW1lciB0ZXN0cykKKyAgICAgICAgICAgIGFudCB0eHByb3AgKEV4ZWN1dGVzIHRoZSBlamIgdHhwcm9wIHRlc3RzKQorICAgICAgICAgICAgYW50IHNmc2IgKEV4ZWN1dGVzIHRoZSBlamIgc2ZzYiB0ZXN0cykKKyAgICAgICAgICAgIGFudCBzdHJlc3MgKEV4ZWN1dGVzIHRoZSBlamIgc3RyZXNzIHRlc3RzKQorICAgICAgICAgICAgYW50IGVqYjMwIChFeGVjdXRlcyB0aGUgZWpiMzAgdGVzdHMpCisgICAgICAgICAgICBhbnQgZWpiMzEgKEV4ZWN1dGVzIHRoZSBlamIzMSB0ZXN0cykKKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xhc3Nsb2FkL2xpZmVjeWNsZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsYXNzbG9hZC9saWZlY3ljbGUvYnVpbGQucHJvcGVydGllcwppbmRleCAzMzk3ODYxLi43OTFhODA2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xhc3Nsb2FkL2xpZmVjeWNsZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGFzc2xvYWQvbGlmZWN5Y2xlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIxICsxNSwyMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWNsYXNzbG9hZC1saWZlY3ljbGUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGFzc2xvYWQvbGlmZWN5Y2xlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGFzc2xvYWQvbGlmZWN5Y2xlL2J1aWxkLnhtbAppbmRleCA1NWNkZjAyLi41NGVjNmM2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xhc3Nsb2FkL2xpZmVjeWNsZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsYXNzbG9hZC9saWZlY3ljbGUvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NywxNyArNDcsMTcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3dzZGwiCiAgICAgICAgICAgZmlsZT0iR29vZ2xlU2VhcmNoLndzZGwiLz4KLSAgICAgICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiAKLQkgZmlsZT0iR29vZ2xlTWFwcGluZy54bWwiLz4KKyAgICAgICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgorICAgICBmaWxlPSJHb29nbGVNYXBwaW5nLnhtbCIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLyoqLmNsYXNzLEdvb2dsZU1hcHBpbmcueG1sLE1FVEEtSU5GL3dzZGwvKioiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudCouY2xhc3MsKiovKkZvby5jbGFzcywqKi8qRm9vSG9tZS5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02NSwxMCArNjUsMTAgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsYXNzbG9hZC9saWZlY3ljbGUvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsYXNzbG9hZC9saWZlY3ljbGUvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDRiOTRiZjMuLmJmMjQ1MjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGFzc2xvYWQvbGlmZWN5Y2xlL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xhc3Nsb2FkL2xpZmVjeWNsZS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTM3LDMxICszNywzMSBAQAogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiZWpiLWNsYXNzbG9hZC1saWZlY3ljbGVJRCIpOwotICAgIH0gIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29raW5nIHVwIGVqYiByZWYgIik7Ci0gICAgICAgICAgICAvLyBjcmVhdGUgRUpCIHVzaW5nIGZhY3RvcnkgZnJvbSBjb250YWluZXIgCisgICAgICAgICAgICAvLyBjcmVhdGUgRUpCIHVzaW5nIGZhY3RvcnkgZnJvbSBjb250YWluZXIKICAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL2ZvbyIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvYmpyZWYgPSAiICsgb2JqcmVmKTsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTG9va2VkIHVwIGhvbWUhISIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBGb29Ib21lICBob21lID0gKEZvb0hvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93CiAgICAgICAgICAgICAgICAgKG9ianJlZiwgRm9vSG9tZS5jbGFzcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJOYXJyb3dlZCBob21lISEiKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAKKworCiAgICAgICAgICAgICBGb28gZiA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkdvdCB0aGUgRUpCISEiKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgLy8gaW52b2tlIG1ldGhvZCBvbiB0aGUgRUpCCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImludm9raW5nIGVqYiIpOwogICAgICAgICAgICAgZi5jYWxsSGVsbG8oKTsKQEAgLTc2LDggKzc2LDggQEAKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IG1haW4iICwgc3RhdC5GQUlMKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAJcmV0dXJuOworCisgICAgICAgIHJldHVybjsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGFzc2xvYWQvbGlmZWN5Y2xlL2Rlc2NyaXB0b3IvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xhc3Nsb2FkL2xpZmVjeWNsZS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IDEyYmZkZTQuLjA5NzE0NTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGFzc2xvYWQvbGlmZWN5Y2xlL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsYXNzbG9hZC9saWZlY3ljbGUvZGVzY3JpcHRvci9lamItamFyLnhtbApAQCAtMzUsNyArMzUsNyBAQAogICAgICAgICA8d3NkbC1maWxlPk1FVEEtSU5GL3dzZGwvR29vZ2xlU2VhcmNoLndzZGw8L3dzZGwtZmlsZT4KICAgICAgICAgPGpheHJwYy1tYXBwaW5nLWZpbGU+R29vZ2xlTWFwcGluZy54bWw8L2pheHJwYy1tYXBwaW5nLWZpbGU+CiAgICAgICAgIDxzZXJ2aWNlLXFuYW1lIHhtbG5zOnNlcnZpY2Vucz0idXJuOkdvb2dsZVNlYXJjaCI+c2VydmljZW5zOkdvb2dsZVNlYXJjaFNlcnZpY2UKLSAgICAgICAgPC9zZXJ2aWNlLXFuYW1lPiAgICAgICAgICAgICAgIAorICAgICAgICA8L3NlcnZpY2UtcW5hbWU+CiAgICAgICA8L3NlcnZpY2UtcmVmPgogICAgICAgPHNlcnZpY2UtcmVmPgogICAgICAgICA8ZGVzY3JpcHRpb24+Z29vZ2xlIHNlcnZpY2UgcmVmPC9kZXNjcmlwdGlvbj4KQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICAgICAgPHdzZGwtZmlsZT5NRVRBLUlORi93c2RsL0dvb2dsZVNlYXJjaC53c2RsPC93c2RsLWZpbGU+CiAgICAgICAgIDxqYXhycGMtbWFwcGluZy1maWxlPkdvb2dsZU1hcHBpbmcueG1sPC9qYXhycGMtbWFwcGluZy1maWxlPgogICAgICAgICA8c2VydmljZS1xbmFtZSB4bWxuczpzZXJ2aWNlbnM9InVybjpHb29nbGVTZWFyY2giPnNlcnZpY2VuczpHb29nbGVTZWFyY2hTZXJ2aWNlCi0gICAgICAgIDwvc2VydmljZS1xbmFtZT4gICAgICAgICAgICAgICAKKyAgICAgICAgPC9zZXJ2aWNlLXFuYW1lPgogICAgICAgPC9zZXJ2aWNlLXJlZj4KICAgICAgIDxzZWN1cml0eS1pZGVudGl0eT4KICAgICAgICAgPHVzZS1jYWxsZXItaWRlbnRpdHkvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsYXNzbG9hZC9saWZlY3ljbGUvZWpiL0RpcmVjdG9yeUNhdGVnb3J5LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xhc3Nsb2FkL2xpZmVjeWNsZS9lamIvRGlyZWN0b3J5Q2F0ZWdvcnkuamF2YQppbmRleCBlYjQ1ZDI2Li5iZWE2YTMzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xhc3Nsb2FkL2xpZmVjeWNsZS9lamIvRGlyZWN0b3J5Q2F0ZWdvcnkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xhc3Nsb2FkL2xpZmVjeWNsZS9lamIvRGlyZWN0b3J5Q2F0ZWdvcnkuamF2YQpAQCAtMjQsMjcgKzI0LDI3IEBACiBwdWJsaWMgY2xhc3MgRGlyZWN0b3J5Q2F0ZWdvcnkgewogICAgIHByb3RlY3RlZCBqYXZhLmxhbmcuU3RyaW5nIGZ1bGxWaWV3YWJsZU5hbWU7CiAgICAgcHJvdGVjdGVkIGphdmEubGFuZy5TdHJpbmcgc3BlY2lhbEVuY29kaW5nOwotICAgIAorCiAgICAgcHVibGljIERpcmVjdG9yeUNhdGVnb3J5KCkgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBEaXJlY3RvcnlDYXRlZ29yeShqYXZhLmxhbmcuU3RyaW5nIGZ1bGxWaWV3YWJsZU5hbWUsIGphdmEubGFuZy5TdHJpbmcgc3BlY2lhbEVuY29kaW5nKSB7CiAgICAgICAgIHRoaXMuZnVsbFZpZXdhYmxlTmFtZSA9IGZ1bGxWaWV3YWJsZU5hbWU7CiAgICAgICAgIHRoaXMuc3BlY2lhbEVuY29kaW5nID0gc3BlY2lhbEVuY29kaW5nOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldEZ1bGxWaWV3YWJsZU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBmdWxsVmlld2FibGVOYW1lOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldEZ1bGxWaWV3YWJsZU5hbWUoamF2YS5sYW5nLlN0cmluZyBmdWxsVmlld2FibGVOYW1lKSB7CiAgICAgICAgIHRoaXMuZnVsbFZpZXdhYmxlTmFtZSA9IGZ1bGxWaWV3YWJsZU5hbWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0U3BlY2lhbEVuY29kaW5nKCkgewogICAgICAgICByZXR1cm4gc3BlY2lhbEVuY29kaW5nOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFNwZWNpYWxFbmNvZGluZyhqYXZhLmxhbmcuU3RyaW5nIHNwZWNpYWxFbmNvZGluZykgewogICAgICAgICB0aGlzLnNwZWNpYWxFbmNvZGluZyA9IHNwZWNpYWxFbmNvZGluZzsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xhc3Nsb2FkL2xpZmVjeWNsZS9lamIvRm9vQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsYXNzbG9hZC9saWZlY3ljbGUvZWpiL0Zvb0JlYW4uamF2YQppbmRleCBhOTJiYzFiLi5iMjMxMGU3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xhc3Nsb2FkL2xpZmVjeWNsZS9lamIvRm9vQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGFzc2xvYWQvbGlmZWN5Y2xlL2VqYi9Gb29CZWFuLmphdmEKQEAgLTE4LDcgKzE4LDcgQEAKIAogaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKIGltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKLWltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247IAoraW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQmVhbjsKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dDsKIGltcG9ydCBqYWthcnRhLmVqYi5FSkJFeGNlcHRpb247CkBAIC0zNCw3ICszNCw3IEBACiAgICAgcHVibGljIEZvb0JlYW4oKSB7fQogCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vQmVhbjo6ZWpiQ3JlYXRlKCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb0JlYW46OmVqYkNyZWF0ZSgpIik7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9zZXJ2aWNlL0dvb2dsZVNlYXJjaF9lamJDcmVhdGUiKTsKQEAgLTQ4LDggKzQ4LDggQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vQmVhbjo6c2V0U2Vzc2lvbkNvbnRleHQoKSIpOwotCXRoaXMuc2MgPSBzYzsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb0JlYW46OnNldFNlc3Npb25Db250ZXh0KCkiKTsKKyAgICB0aGlzLnNjID0gc2M7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgY2FsbEhlbGxvKCkgewpAQCAtNTcsNyArNTcsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb0JlYW46OmVqYlJlbW92ZSgpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29CZWFuOjplamJSZW1vdmUoKSIpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIFNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvc2VydmljZS9Hb29nbGVTZWFyY2hfZWpiUmVtb3ZlIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xhc3Nsb2FkL2xpZmVjeWNsZS9lamIvR29vZ2xlU2VhcmNoUG9ydC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsYXNzbG9hZC9saWZlY3ljbGUvZWpiL0dvb2dsZVNlYXJjaFBvcnQuamF2YQppbmRleCBhZmQwYTY3NzUuLmJlYjA0MGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGFzc2xvYWQvbGlmZWN5Y2xlL2VqYi9Hb29nbGVTZWFyY2hQb3J0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsYXNzbG9hZC9saWZlY3ljbGUvZWpiL0dvb2dsZVNlYXJjaFBvcnQuamF2YQpAQCAtMjEsMTAgKzIxLDEwIEBACiBwYWNrYWdlIGNvbS5zdW4uczFhc2Rldi5lamIuY2xhc3Nsb2FkLmxpZmVjeWNsZTsKIAogcHVibGljIGludGVyZmFjZSBHb29nbGVTZWFyY2hQb3J0IGV4dGVuZHMgamF2YS5ybWkuUmVtb3RlIHsKLSAgICBwdWJsaWMgYnl0ZVtdIGRvR2V0Q2FjaGVkUGFnZShqYXZhLmxhbmcuU3RyaW5nIGtleSwgamF2YS5sYW5nLlN0cmluZyB1cmwpIHRocm93cyAKKyAgICBwdWJsaWMgYnl0ZVtdIGRvR2V0Q2FjaGVkUGFnZShqYXZhLmxhbmcuU3RyaW5nIGtleSwgamF2YS5sYW5nLlN0cmluZyB1cmwpIHRocm93cwogICAgICAgICAgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwotICAgIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGRvU3BlbGxpbmdTdWdnZXN0aW9uKGphdmEubGFuZy5TdHJpbmcga2V5LCBqYXZhLmxhbmcuU3RyaW5nIHBocmFzZSkgdGhyb3dzIAorICAgIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGRvU3BlbGxpbmdTdWdnZXN0aW9uKGphdmEubGFuZy5TdHJpbmcga2V5LCBqYXZhLmxhbmcuU3RyaW5nIHBocmFzZSkgdGhyb3dzCiAgICAgICAgICBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247Ci0gICAgcHVibGljIGNvbS5zdW4uczFhc2Rldi5lamIuY2xhc3Nsb2FkLmxpZmVjeWNsZS5Hb29nbGVTZWFyY2hSZXN1bHQgZG9Hb29nbGVTZWFyY2goamF2YS5sYW5nLlN0cmluZyBrZXksIGphdmEubGFuZy5TdHJpbmcgcSwgaW50IHN0YXJ0LCBpbnQgbWF4UmVzdWx0cywgYm9vbGVhbiBmaWx0ZXIsIGphdmEubGFuZy5TdHJpbmcgcmVzdHJpY3QsIGJvb2xlYW4gc2FmZVNlYXJjaCwgamF2YS5sYW5nLlN0cmluZyBsciwgamF2YS5sYW5nLlN0cmluZyBpZSwgamF2YS5sYW5nLlN0cmluZyBvZSkgdGhyb3dzIAorICAgIHB1YmxpYyBjb20uc3VuLnMxYXNkZXYuZWpiLmNsYXNzbG9hZC5saWZlY3ljbGUuR29vZ2xlU2VhcmNoUmVzdWx0IGRvR29vZ2xlU2VhcmNoKGphdmEubGFuZy5TdHJpbmcga2V5LCBqYXZhLmxhbmcuU3RyaW5nIHEsIGludCBzdGFydCwgaW50IG1heFJlc3VsdHMsIGJvb2xlYW4gZmlsdGVyLCBqYXZhLmxhbmcuU3RyaW5nIHJlc3RyaWN0LCBib29sZWFuIHNhZmVTZWFyY2gsIGphdmEubGFuZy5TdHJpbmcgbHIsIGphdmEubGFuZy5TdHJpbmcgaWUsIGphdmEubGFuZy5TdHJpbmcgb2UpIHRocm93cwogICAgICAgICAgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsYXNzbG9hZC9saWZlY3ljbGUvZWpiL0dvb2dsZVNlYXJjaFBvcnRfSW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsYXNzbG9hZC9saWZlY3ljbGUvZWpiL0dvb2dsZVNlYXJjaFBvcnRfSW1wbC5qYXZhCmluZGV4IDFhYTczZTAuLjQ3ZDczNGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGFzc2xvYWQvbGlmZWN5Y2xlL2VqYi9Hb29nbGVTZWFyY2hQb3J0X0ltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xhc3Nsb2FkL2xpZmVjeWNsZS9lamIvR29vZ2xlU2VhcmNoUG9ydF9JbXBsLmphdmEKQEAgLTE3LDIxICsxNywyMSBAQAogcGFja2FnZSBjb20uc3VuLnMxYXNkZXYuZWpiLmNsYXNzbG9hZC5saWZlY3ljbGU7CiAKIHB1YmxpYyBjbGFzcyBHb29nbGVTZWFyY2hQb3J0X0ltcGwgaW1wbGVtZW50cyBjb20uc3VuLnMxYXNkZXYuZWpiLmNsYXNzbG9hZC5saWZlY3ljbGUuR29vZ2xlU2VhcmNoUG9ydCwgamF2YS5ybWkuUmVtb3RlIHsKLSAgICBwdWJsaWMgYnl0ZVtdIGRvR2V0Q2FjaGVkUGFnZShqYXZhLmxhbmcuU3RyaW5nIGtleSwgamF2YS5sYW5nLlN0cmluZyB1cmwpIHRocm93cyAKKyAgICBwdWJsaWMgYnl0ZVtdIGRvR2V0Q2FjaGVkUGFnZShqYXZhLmxhbmcuU3RyaW5nIGtleSwgamF2YS5sYW5nLlN0cmluZyB1cmwpIHRocm93cwogICAgICAgICAgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgYnl0ZVtdIF9yZXRWYWwgPSBudWxsOwogICAgICAgICByZXR1cm4gX3JldFZhbDsKICAgICB9Ci0gICAgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZG9TcGVsbGluZ1N1Z2dlc3Rpb24oamF2YS5sYW5nLlN0cmluZyBrZXksIGphdmEubGFuZy5TdHJpbmcgcGhyYXNlKSB0aHJvd3MgCisgICAgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZG9TcGVsbGluZ1N1Z2dlc3Rpb24oamF2YS5sYW5nLlN0cmluZyBrZXksIGphdmEubGFuZy5TdHJpbmcgcGhyYXNlKSB0aHJvd3MKICAgICAgICAgIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIGphdmEubGFuZy5TdHJpbmcgX3JldFZhbCA9IG51bGw7CiAgICAgICAgIHJldHVybiBfcmV0VmFsOwogICAgIH0KLSAgICBwdWJsaWMgY29tLnN1bi5zMWFzZGV2LmVqYi5jbGFzc2xvYWQubGlmZWN5Y2xlLkdvb2dsZVNlYXJjaFJlc3VsdCBkb0dvb2dsZVNlYXJjaChqYXZhLmxhbmcuU3RyaW5nIGtleSwgamF2YS5sYW5nLlN0cmluZyBxLCBpbnQgc3RhcnQsIGludCBtYXhSZXN1bHRzLCBib29sZWFuIGZpbHRlciwgamF2YS5sYW5nLlN0cmluZyByZXN0cmljdCwgYm9vbGVhbiBzYWZlU2VhcmNoLCBqYXZhLmxhbmcuU3RyaW5nIGxyLCBqYXZhLmxhbmcuU3RyaW5nIGllLCBqYXZhLmxhbmcuU3RyaW5nIG9lKSB0aHJvd3MgCisgICAgcHVibGljIGNvbS5zdW4uczFhc2Rldi5lamIuY2xhc3Nsb2FkLmxpZmVjeWNsZS5Hb29nbGVTZWFyY2hSZXN1bHQgZG9Hb29nbGVTZWFyY2goamF2YS5sYW5nLlN0cmluZyBrZXksIGphdmEubGFuZy5TdHJpbmcgcSwgaW50IHN0YXJ0LCBpbnQgbWF4UmVzdWx0cywgYm9vbGVhbiBmaWx0ZXIsIGphdmEubGFuZy5TdHJpbmcgcmVzdHJpY3QsIGJvb2xlYW4gc2FmZVNlYXJjaCwgamF2YS5sYW5nLlN0cmluZyBsciwgamF2YS5sYW5nLlN0cmluZyBpZSwgamF2YS5sYW5nLlN0cmluZyBvZSkgdGhyb3dzCiAgICAgICAgICBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBjb20uc3VuLnMxYXNkZXYuZWpiLmNsYXNzbG9hZC5saWZlY3ljbGUuR29vZ2xlU2VhcmNoUmVzdWx0IF9yZXRWYWwgPSBudWxsOwogICAgICAgICByZXR1cm4gX3JldFZhbDsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xhc3Nsb2FkL2xpZmVjeWNsZS9lamIvR29vZ2xlU2VhcmNoUG9ydF9kb0dldENhY2hlZFBhZ2VfUmVxdWVzdFN0cnVjdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsYXNzbG9hZC9saWZlY3ljbGUvZWpiL0dvb2dsZVNlYXJjaFBvcnRfZG9HZXRDYWNoZWRQYWdlX1JlcXVlc3RTdHJ1Y3QuamF2YQppbmRleCA3Y2ZkYWNjLi4wMGVkZmY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xhc3Nsb2FkL2xpZmVjeWNsZS9lamIvR29vZ2xlU2VhcmNoUG9ydF9kb0dldENhY2hlZFBhZ2VfUmVxdWVzdFN0cnVjdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGFzc2xvYWQvbGlmZWN5Y2xlL2VqYi9Hb29nbGVTZWFyY2hQb3J0X2RvR2V0Q2FjaGVkUGFnZV9SZXF1ZXN0U3RydWN0LmphdmEKQEAgLTI0LDI3ICsyNCwyNyBAQAogcHVibGljIGNsYXNzIEdvb2dsZVNlYXJjaFBvcnRfZG9HZXRDYWNoZWRQYWdlX1JlcXVlc3RTdHJ1Y3QgewogICAgIHByb3RlY3RlZCBqYXZhLmxhbmcuU3RyaW5nIGtleTsKICAgICBwcm90ZWN0ZWQgamF2YS5sYW5nLlN0cmluZyB1cmw7Ci0gICAgCisKICAgICBwdWJsaWMgR29vZ2xlU2VhcmNoUG9ydF9kb0dldENhY2hlZFBhZ2VfUmVxdWVzdFN0cnVjdCgpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgR29vZ2xlU2VhcmNoUG9ydF9kb0dldENhY2hlZFBhZ2VfUmVxdWVzdFN0cnVjdChqYXZhLmxhbmcuU3RyaW5nIGtleSwgamF2YS5sYW5nLlN0cmluZyB1cmwpIHsKICAgICAgICAgdGhpcy5rZXkgPSBrZXk7CiAgICAgICAgIHRoaXMudXJsID0gdXJsOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldEtleSgpIHsKICAgICAgICAgcmV0dXJuIGtleTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRLZXkoamF2YS5sYW5nLlN0cmluZyBrZXkpIHsKICAgICAgICAgdGhpcy5rZXkgPSBrZXk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0VXJsKCkgewogICAgICAgICByZXR1cm4gdXJsOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFVybChqYXZhLmxhbmcuU3RyaW5nIHVybCkgewogICAgICAgICB0aGlzLnVybCA9IHVybDsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xhc3Nsb2FkL2xpZmVjeWNsZS9lamIvR29vZ2xlU2VhcmNoUG9ydF9kb0dldENhY2hlZFBhZ2VfUmVzcG9uc2VTdHJ1Y3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGFzc2xvYWQvbGlmZWN5Y2xlL2VqYi9Hb29nbGVTZWFyY2hQb3J0X2RvR2V0Q2FjaGVkUGFnZV9SZXNwb25zZVN0cnVjdC5qYXZhCmluZGV4IGFkODQxYzEuLmY4MGZkMDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGFzc2xvYWQvbGlmZWN5Y2xlL2VqYi9Hb29nbGVTZWFyY2hQb3J0X2RvR2V0Q2FjaGVkUGFnZV9SZXNwb25zZVN0cnVjdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGFzc2xvYWQvbGlmZWN5Y2xlL2VqYi9Hb29nbGVTZWFyY2hQb3J0X2RvR2V0Q2FjaGVkUGFnZV9SZXNwb25zZVN0cnVjdC5qYXZhCkBAIC0yMywxOCArMjMsMTggQEAKIAogcHVibGljIGNsYXNzIEdvb2dsZVNlYXJjaFBvcnRfZG9HZXRDYWNoZWRQYWdlX1Jlc3BvbnNlU3RydWN0IHsKICAgICBwcm90ZWN0ZWQgYnl0ZVtdIF9yZXR1cm47Ci0gICAgCisKICAgICBwdWJsaWMgR29vZ2xlU2VhcmNoUG9ydF9kb0dldENhY2hlZFBhZ2VfUmVzcG9uc2VTdHJ1Y3QoKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIEdvb2dsZVNlYXJjaFBvcnRfZG9HZXRDYWNoZWRQYWdlX1Jlc3BvbnNlU3RydWN0KGJ5dGVbXSBfcmV0dXJuKSB7CiAgICAgICAgIHRoaXMuX3JldHVybiA9IF9yZXR1cm47CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGJ5dGVbXSBnZXRfcmV0dXJuKCkgewogICAgICAgICByZXR1cm4gX3JldHVybjsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRfcmV0dXJuKGJ5dGVbXSBfcmV0dXJuKSB7CiAgICAgICAgIHRoaXMuX3JldHVybiA9IF9yZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsYXNzbG9hZC9saWZlY3ljbGUvZWpiL0dvb2dsZVNlYXJjaFBvcnRfZG9Hb29nbGVTZWFyY2hfUmVxdWVzdFN0cnVjdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsYXNzbG9hZC9saWZlY3ljbGUvZWpiL0dvb2dsZVNlYXJjaFBvcnRfZG9Hb29nbGVTZWFyY2hfUmVxdWVzdFN0cnVjdC5qYXZhCmluZGV4IDk2OGNiZmMuLjIwNmYzZTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGFzc2xvYWQvbGlmZWN5Y2xlL2VqYi9Hb29nbGVTZWFyY2hQb3J0X2RvR29vZ2xlU2VhcmNoX1JlcXVlc3RTdHJ1Y3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xhc3Nsb2FkL2xpZmVjeWNsZS9lamIvR29vZ2xlU2VhcmNoUG9ydF9kb0dvb2dsZVNlYXJjaF9SZXF1ZXN0U3RydWN0LmphdmEKQEAgLTMyLDEwICszMiwxMCBAQAogICAgIHByb3RlY3RlZCBqYXZhLmxhbmcuU3RyaW5nIGxyOwogICAgIHByb3RlY3RlZCBqYXZhLmxhbmcuU3RyaW5nIGllOwogICAgIHByb3RlY3RlZCBqYXZhLmxhbmcuU3RyaW5nIG9lOwotICAgIAorCiAgICAgcHVibGljIEdvb2dsZVNlYXJjaFBvcnRfZG9Hb29nbGVTZWFyY2hfUmVxdWVzdFN0cnVjdCgpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgR29vZ2xlU2VhcmNoUG9ydF9kb0dvb2dsZVNlYXJjaF9SZXF1ZXN0U3RydWN0KGphdmEubGFuZy5TdHJpbmcga2V5LCBqYXZhLmxhbmcuU3RyaW5nIHEsIGludCBzdGFydCwgaW50IG1heFJlc3VsdHMsIGJvb2xlYW4gZmlsdGVyLCBqYXZhLmxhbmcuU3RyaW5nIHJlc3RyaWN0LCBib29sZWFuIHNhZmVTZWFyY2gsIGphdmEubGFuZy5TdHJpbmcgbHIsIGphdmEubGFuZy5TdHJpbmcgaWUsIGphdmEubGFuZy5TdHJpbmcgb2UpIHsKICAgICAgICAgdGhpcy5rZXkgPSBrZXk7CiAgICAgICAgIHRoaXMucSA9IHE7CkBAIC00OCw4MyArNDgsODMgQEAKICAgICAgICAgdGhpcy5pZSA9IGllOwogICAgICAgICB0aGlzLm9lID0gb2U7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0S2V5KCkgewogICAgICAgICByZXR1cm4ga2V5OwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldEtleShqYXZhLmxhbmcuU3RyaW5nIGtleSkgewogICAgICAgICB0aGlzLmtleSA9IGtleTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRRKCkgewogICAgICAgICByZXR1cm4gcTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRRKGphdmEubGFuZy5TdHJpbmcgcSkgewogICAgICAgICB0aGlzLnEgPSBxOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBpbnQgZ2V0U3RhcnQoKSB7CiAgICAgICAgIHJldHVybiBzdGFydDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRTdGFydChpbnQgc3RhcnQpIHsKICAgICAgICAgdGhpcy5zdGFydCA9IHN0YXJ0OwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBpbnQgZ2V0TWF4UmVzdWx0cygpIHsKICAgICAgICAgcmV0dXJuIG1heFJlc3VsdHM7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0TWF4UmVzdWx0cyhpbnQgbWF4UmVzdWx0cykgewogICAgICAgICB0aGlzLm1heFJlc3VsdHMgPSBtYXhSZXN1bHRzOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGlzRmlsdGVyKCkgewogICAgICAgICByZXR1cm4gZmlsdGVyOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldEZpbHRlcihib29sZWFuIGZpbHRlcikgewogICAgICAgICB0aGlzLmZpbHRlciA9IGZpbHRlcjsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRSZXN0cmljdCgpIHsKICAgICAgICAgcmV0dXJuIHJlc3RyaWN0OwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFJlc3RyaWN0KGphdmEubGFuZy5TdHJpbmcgcmVzdHJpY3QpIHsKICAgICAgICAgdGhpcy5yZXN0cmljdCA9IHJlc3RyaWN0OwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGlzU2FmZVNlYXJjaCgpIHsKICAgICAgICAgcmV0dXJuIHNhZmVTZWFyY2g7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0U2FmZVNlYXJjaChib29sZWFuIHNhZmVTZWFyY2gpIHsKICAgICAgICAgdGhpcy5zYWZlU2VhcmNoID0gc2FmZVNlYXJjaDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRMcigpIHsKICAgICAgICAgcmV0dXJuIGxyOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldExyKGphdmEubGFuZy5TdHJpbmcgbHIpIHsKICAgICAgICAgdGhpcy5sciA9IGxyOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldEllKCkgewogICAgICAgICByZXR1cm4gaWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0SWUoamF2YS5sYW5nLlN0cmluZyBpZSkgewogICAgICAgICB0aGlzLmllID0gaWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0T2UoKSB7CiAgICAgICAgIHJldHVybiBvZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRPZShqYXZhLmxhbmcuU3RyaW5nIG9lKSB7CiAgICAgICAgIHRoaXMub2UgPSBvZTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xhc3Nsb2FkL2xpZmVjeWNsZS9lamIvR29vZ2xlU2VhcmNoUG9ydF9kb0dvb2dsZVNlYXJjaF9SZXNwb25zZVN0cnVjdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsYXNzbG9hZC9saWZlY3ljbGUvZWpiL0dvb2dsZVNlYXJjaFBvcnRfZG9Hb29nbGVTZWFyY2hfUmVzcG9uc2VTdHJ1Y3QuamF2YQppbmRleCBjMGI0NTAzLi4xOTRiZjkyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xhc3Nsb2FkL2xpZmVjeWNsZS9lamIvR29vZ2xlU2VhcmNoUG9ydF9kb0dvb2dsZVNlYXJjaF9SZXNwb25zZVN0cnVjdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGFzc2xvYWQvbGlmZWN5Y2xlL2VqYi9Hb29nbGVTZWFyY2hQb3J0X2RvR29vZ2xlU2VhcmNoX1Jlc3BvbnNlU3RydWN0LmphdmEKQEAgLTIzLDE4ICsyMywxOCBAQAogCiBwdWJsaWMgY2xhc3MgR29vZ2xlU2VhcmNoUG9ydF9kb0dvb2dsZVNlYXJjaF9SZXNwb25zZVN0cnVjdCB7CiAgICAgcHJvdGVjdGVkIGNvbS5zdW4uczFhc2Rldi5lamIuY2xhc3Nsb2FkLmxpZmVjeWNsZS5Hb29nbGVTZWFyY2hSZXN1bHQgX3JldHVybjsKLSAgICAKKwogICAgIHB1YmxpYyBHb29nbGVTZWFyY2hQb3J0X2RvR29vZ2xlU2VhcmNoX1Jlc3BvbnNlU3RydWN0KCkgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBHb29nbGVTZWFyY2hQb3J0X2RvR29vZ2xlU2VhcmNoX1Jlc3BvbnNlU3RydWN0KGNvbS5zdW4uczFhc2Rldi5lamIuY2xhc3Nsb2FkLmxpZmVjeWNsZS5Hb29nbGVTZWFyY2hSZXN1bHQgX3JldHVybikgewogICAgICAgICB0aGlzLl9yZXR1cm4gPSBfcmV0dXJuOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBjb20uc3VuLnMxYXNkZXYuZWpiLmNsYXNzbG9hZC5saWZlY3ljbGUuR29vZ2xlU2VhcmNoUmVzdWx0IGdldF9yZXR1cm4oKSB7CiAgICAgICAgIHJldHVybiBfcmV0dXJuOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldF9yZXR1cm4oY29tLnN1bi5zMWFzZGV2LmVqYi5jbGFzc2xvYWQubGlmZWN5Y2xlLkdvb2dsZVNlYXJjaFJlc3VsdCBfcmV0dXJuKSB7CiAgICAgICAgIHRoaXMuX3JldHVybiA9IF9yZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsYXNzbG9hZC9saWZlY3ljbGUvZWpiL0dvb2dsZVNlYXJjaFBvcnRfZG9TcGVsbGluZ1N1Z2dlc3Rpb25fUmVxdWVzdFN0cnVjdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsYXNzbG9hZC9saWZlY3ljbGUvZWpiL0dvb2dsZVNlYXJjaFBvcnRfZG9TcGVsbGluZ1N1Z2dlc3Rpb25fUmVxdWVzdFN0cnVjdC5qYXZhCmluZGV4IDIwODE0NmIuLjZmNWQyYzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGFzc2xvYWQvbGlmZWN5Y2xlL2VqYi9Hb29nbGVTZWFyY2hQb3J0X2RvU3BlbGxpbmdTdWdnZXN0aW9uX1JlcXVlc3RTdHJ1Y3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xhc3Nsb2FkL2xpZmVjeWNsZS9lamIvR29vZ2xlU2VhcmNoUG9ydF9kb1NwZWxsaW5nU3VnZ2VzdGlvbl9SZXF1ZXN0U3RydWN0LmphdmEKQEAgLTI0LDI3ICsyNCwyNyBAQAogcHVibGljIGNsYXNzIEdvb2dsZVNlYXJjaFBvcnRfZG9TcGVsbGluZ1N1Z2dlc3Rpb25fUmVxdWVzdFN0cnVjdCB7CiAgICAgcHJvdGVjdGVkIGphdmEubGFuZy5TdHJpbmcga2V5OwogICAgIHByb3RlY3RlZCBqYXZhLmxhbmcuU3RyaW5nIHBocmFzZTsKLSAgICAKKwogICAgIHB1YmxpYyBHb29nbGVTZWFyY2hQb3J0X2RvU3BlbGxpbmdTdWdnZXN0aW9uX1JlcXVlc3RTdHJ1Y3QoKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIEdvb2dsZVNlYXJjaFBvcnRfZG9TcGVsbGluZ1N1Z2dlc3Rpb25fUmVxdWVzdFN0cnVjdChqYXZhLmxhbmcuU3RyaW5nIGtleSwgamF2YS5sYW5nLlN0cmluZyBwaHJhc2UpIHsKICAgICAgICAgdGhpcy5rZXkgPSBrZXk7CiAgICAgICAgIHRoaXMucGhyYXNlID0gcGhyYXNlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldEtleSgpIHsKICAgICAgICAgcmV0dXJuIGtleTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRLZXkoamF2YS5sYW5nLlN0cmluZyBrZXkpIHsKICAgICAgICAgdGhpcy5rZXkgPSBrZXk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0UGhyYXNlKCkgewogICAgICAgICByZXR1cm4gcGhyYXNlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFBocmFzZShqYXZhLmxhbmcuU3RyaW5nIHBocmFzZSkgewogICAgICAgICB0aGlzLnBocmFzZSA9IHBocmFzZTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xhc3Nsb2FkL2xpZmVjeWNsZS9lamIvR29vZ2xlU2VhcmNoUG9ydF9kb1NwZWxsaW5nU3VnZ2VzdGlvbl9SZXNwb25zZVN0cnVjdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsYXNzbG9hZC9saWZlY3ljbGUvZWpiL0dvb2dsZVNlYXJjaFBvcnRfZG9TcGVsbGluZ1N1Z2dlc3Rpb25fUmVzcG9uc2VTdHJ1Y3QuamF2YQppbmRleCAxYjU2MDQxLi4wNTQzMmQwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xhc3Nsb2FkL2xpZmVjeWNsZS9lamIvR29vZ2xlU2VhcmNoUG9ydF9kb1NwZWxsaW5nU3VnZ2VzdGlvbl9SZXNwb25zZVN0cnVjdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGFzc2xvYWQvbGlmZWN5Y2xlL2VqYi9Hb29nbGVTZWFyY2hQb3J0X2RvU3BlbGxpbmdTdWdnZXN0aW9uX1Jlc3BvbnNlU3RydWN0LmphdmEKQEAgLTIzLDE4ICsyMywxOCBAQAogCiBwdWJsaWMgY2xhc3MgR29vZ2xlU2VhcmNoUG9ydF9kb1NwZWxsaW5nU3VnZ2VzdGlvbl9SZXNwb25zZVN0cnVjdCB7CiAgICAgcHJvdGVjdGVkIGphdmEubGFuZy5TdHJpbmcgX3JldHVybjsKLSAgICAKKwogICAgIHB1YmxpYyBHb29nbGVTZWFyY2hQb3J0X2RvU3BlbGxpbmdTdWdnZXN0aW9uX1Jlc3BvbnNlU3RydWN0KCkgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBHb29nbGVTZWFyY2hQb3J0X2RvU3BlbGxpbmdTdWdnZXN0aW9uX1Jlc3BvbnNlU3RydWN0KGphdmEubGFuZy5TdHJpbmcgX3JldHVybikgewogICAgICAgICB0aGlzLl9yZXR1cm4gPSBfcmV0dXJuOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldF9yZXR1cm4oKSB7CiAgICAgICAgIHJldHVybiBfcmV0dXJuOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldF9yZXR1cm4oamF2YS5sYW5nLlN0cmluZyBfcmV0dXJuKSB7CiAgICAgICAgIHRoaXMuX3JldHVybiA9IF9yZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsYXNzbG9hZC9saWZlY3ljbGUvZWpiL0dvb2dsZVNlYXJjaFJlc3VsdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsYXNzbG9hZC9saWZlY3ljbGUvZWpiL0dvb2dsZVNlYXJjaFJlc3VsdC5qYXZhCmluZGV4IDI0MTk4MWYuLjgzNTFhYmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGFzc2xvYWQvbGlmZWN5Y2xlL2VqYi9Hb29nbGVTZWFyY2hSZXN1bHQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xhc3Nsb2FkL2xpZmVjeWNsZS9lamIvR29vZ2xlU2VhcmNoUmVzdWx0LmphdmEKQEAgLTMzLDEwICszMywxMCBAQAogICAgIHByb3RlY3RlZCBqYXZhLmxhbmcuU3RyaW5nIHNlYXJjaFRpcHM7CiAgICAgcHJvdGVjdGVkIGNvbS5zdW4uczFhc2Rldi5lamIuY2xhc3Nsb2FkLmxpZmVjeWNsZS5EaXJlY3RvcnlDYXRlZ29yeVtdIGRpcmVjdG9yeUNhdGVnb3JpZXM7CiAgICAgcHJvdGVjdGVkIGRvdWJsZSBzZWFyY2hUaW1lOwotICAgIAorCiAgICAgcHVibGljIEdvb2dsZVNlYXJjaFJlc3VsdCgpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgR29vZ2xlU2VhcmNoUmVzdWx0KGJvb2xlYW4gZG9jdW1lbnRGaWx0ZXJpbmcsIGphdmEubGFuZy5TdHJpbmcgc2VhcmNoQ29tbWVudHMsIGludCBlc3RpbWF0ZWRUb3RhbFJlc3VsdHNDb3VudCwgYm9vbGVhbiBlc3RpbWF0ZUlzRXhhY3QsIGNvbS5zdW4uczFhc2Rldi5lamIuY2xhc3Nsb2FkLmxpZmVjeWNsZS5SZXN1bHRFbGVtZW50W10gcmVzdWx0RWxlbWVudHMsIGphdmEubGFuZy5TdHJpbmcgc2VhcmNoUXVlcnksIGludCBzdGFydEluZGV4LCBpbnQgZW5kSW5kZXgsIGphdmEubGFuZy5TdHJpbmcgc2VhcmNoVGlwcywgY29tLnN1bi5zMWFzZGV2LmVqYi5jbGFzc2xvYWQubGlmZWN5Y2xlLkRpcmVjdG9yeUNhdGVnb3J5W10gZGlyZWN0b3J5Q2F0ZWdvcmllcywgZG91YmxlIHNlYXJjaFRpbWUpIHsKICAgICAgICAgdGhpcy5kb2N1bWVudEZpbHRlcmluZyA9IGRvY3VtZW50RmlsdGVyaW5nOwogICAgICAgICB0aGlzLnNlYXJjaENvbW1lbnRzID0gc2VhcmNoQ29tbWVudHM7CkBAIC01MCw5MSArNTAsOTEgQEAKICAgICAgICAgdGhpcy5kaXJlY3RvcnlDYXRlZ29yaWVzID0gZGlyZWN0b3J5Q2F0ZWdvcmllczsKICAgICAgICAgdGhpcy5zZWFyY2hUaW1lID0gc2VhcmNoVGltZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBpc0RvY3VtZW50RmlsdGVyaW5nKCkgewogICAgICAgICByZXR1cm4gZG9jdW1lbnRGaWx0ZXJpbmc7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0RG9jdW1lbnRGaWx0ZXJpbmcoYm9vbGVhbiBkb2N1bWVudEZpbHRlcmluZykgewogICAgICAgICB0aGlzLmRvY3VtZW50RmlsdGVyaW5nID0gZG9jdW1lbnRGaWx0ZXJpbmc7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0U2VhcmNoQ29tbWVudHMoKSB7CiAgICAgICAgIHJldHVybiBzZWFyY2hDb21tZW50czsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRTZWFyY2hDb21tZW50cyhqYXZhLmxhbmcuU3RyaW5nIHNlYXJjaENvbW1lbnRzKSB7CiAgICAgICAgIHRoaXMuc2VhcmNoQ29tbWVudHMgPSBzZWFyY2hDb21tZW50czsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgaW50IGdldEVzdGltYXRlZFRvdGFsUmVzdWx0c0NvdW50KCkgewogICAgICAgICByZXR1cm4gZXN0aW1hdGVkVG90YWxSZXN1bHRzQ291bnQ7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0RXN0aW1hdGVkVG90YWxSZXN1bHRzQ291bnQoaW50IGVzdGltYXRlZFRvdGFsUmVzdWx0c0NvdW50KSB7CiAgICAgICAgIHRoaXMuZXN0aW1hdGVkVG90YWxSZXN1bHRzQ291bnQgPSBlc3RpbWF0ZWRUb3RhbFJlc3VsdHNDb3VudDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBpc0VzdGltYXRlSXNFeGFjdCgpIHsKICAgICAgICAgcmV0dXJuIGVzdGltYXRlSXNFeGFjdDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRFc3RpbWF0ZUlzRXhhY3QoYm9vbGVhbiBlc3RpbWF0ZUlzRXhhY3QpIHsKICAgICAgICAgdGhpcy5lc3RpbWF0ZUlzRXhhY3QgPSBlc3RpbWF0ZUlzRXhhY3Q7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGNvbS5zdW4uczFhc2Rldi5lamIuY2xhc3Nsb2FkLmxpZmVjeWNsZS5SZXN1bHRFbGVtZW50W10gZ2V0UmVzdWx0RWxlbWVudHMoKSB7CiAgICAgICAgIHJldHVybiByZXN1bHRFbGVtZW50czsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRSZXN1bHRFbGVtZW50cyhjb20uc3VuLnMxYXNkZXYuZWpiLmNsYXNzbG9hZC5saWZlY3ljbGUuUmVzdWx0RWxlbWVudFtdIHJlc3VsdEVsZW1lbnRzKSB7CiAgICAgICAgIHRoaXMucmVzdWx0RWxlbWVudHMgPSByZXN1bHRFbGVtZW50czsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRTZWFyY2hRdWVyeSgpIHsKICAgICAgICAgcmV0dXJuIHNlYXJjaFF1ZXJ5OwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFNlYXJjaFF1ZXJ5KGphdmEubGFuZy5TdHJpbmcgc2VhcmNoUXVlcnkpIHsKICAgICAgICAgdGhpcy5zZWFyY2hRdWVyeSA9IHNlYXJjaFF1ZXJ5OwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBpbnQgZ2V0U3RhcnRJbmRleCgpIHsKICAgICAgICAgcmV0dXJuIHN0YXJ0SW5kZXg7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0U3RhcnRJbmRleChpbnQgc3RhcnRJbmRleCkgewogICAgICAgICB0aGlzLnN0YXJ0SW5kZXggPSBzdGFydEluZGV4OwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBpbnQgZ2V0RW5kSW5kZXgoKSB7CiAgICAgICAgIHJldHVybiBlbmRJbmRleDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRFbmRJbmRleChpbnQgZW5kSW5kZXgpIHsKICAgICAgICAgdGhpcy5lbmRJbmRleCA9IGVuZEluZGV4OwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldFNlYXJjaFRpcHMoKSB7CiAgICAgICAgIHJldHVybiBzZWFyY2hUaXBzOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFNlYXJjaFRpcHMoamF2YS5sYW5nLlN0cmluZyBzZWFyY2hUaXBzKSB7CiAgICAgICAgIHRoaXMuc2VhcmNoVGlwcyA9IHNlYXJjaFRpcHM7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGNvbS5zdW4uczFhc2Rldi5lamIuY2xhc3Nsb2FkLmxpZmVjeWNsZS5EaXJlY3RvcnlDYXRlZ29yeVtdIGdldERpcmVjdG9yeUNhdGVnb3JpZXMoKSB7CiAgICAgICAgIHJldHVybiBkaXJlY3RvcnlDYXRlZ29yaWVzOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldERpcmVjdG9yeUNhdGVnb3JpZXMoY29tLnN1bi5zMWFzZGV2LmVqYi5jbGFzc2xvYWQubGlmZWN5Y2xlLkRpcmVjdG9yeUNhdGVnb3J5W10gZGlyZWN0b3J5Q2F0ZWdvcmllcykgewogICAgICAgICB0aGlzLmRpcmVjdG9yeUNhdGVnb3JpZXMgPSBkaXJlY3RvcnlDYXRlZ29yaWVzOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBkb3VibGUgZ2V0U2VhcmNoVGltZSgpIHsKICAgICAgICAgcmV0dXJuIHNlYXJjaFRpbWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0U2VhcmNoVGltZShkb3VibGUgc2VhcmNoVGltZSkgewogICAgICAgICB0aGlzLnNlYXJjaFRpbWUgPSBzZWFyY2hUaW1lOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGFzc2xvYWQvbGlmZWN5Y2xlL2VqYi9SZXN1bHRFbGVtZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xhc3Nsb2FkL2xpZmVjeWNsZS9lamIvUmVzdWx0RWxlbWVudC5qYXZhCmluZGV4IDI5MWRmODguLjMyYzc4NzkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGFzc2xvYWQvbGlmZWN5Y2xlL2VqYi9SZXN1bHRFbGVtZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsYXNzbG9hZC9saWZlY3ljbGUvZWpiL1Jlc3VsdEVsZW1lbnQuamF2YQpAQCAtMzEsMTAgKzMxLDEwIEBACiAgICAgcHJvdGVjdGVkIGphdmEubGFuZy5TdHJpbmcgaG9zdE5hbWU7CiAgICAgcHJvdGVjdGVkIGNvbS5zdW4uczFhc2Rldi5lamIuY2xhc3Nsb2FkLmxpZmVjeWNsZS5EaXJlY3RvcnlDYXRlZ29yeSBkaXJlY3RvcnlDYXRlZ29yeTsKICAgICBwcm90ZWN0ZWQgamF2YS5sYW5nLlN0cmluZyBkaXJlY3RvcnlUaXRsZTsKLSAgICAKKwogICAgIHB1YmxpYyBSZXN1bHRFbGVtZW50KCkgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBSZXN1bHRFbGVtZW50KGphdmEubGFuZy5TdHJpbmcgc3VtbWFyeSwgamF2YS5sYW5nLlN0cmluZyBVUkwsIGphdmEubGFuZy5TdHJpbmcgc25pcHBldCwgamF2YS5sYW5nLlN0cmluZyB0aXRsZSwgamF2YS5sYW5nLlN0cmluZyBjYWNoZWRTaXplLCBib29sZWFuIHJlbGF0ZWRJbmZvcm1hdGlvblByZXNlbnQsIGphdmEubGFuZy5TdHJpbmcgaG9zdE5hbWUsIGNvbS5zdW4uczFhc2Rldi5lamIuY2xhc3Nsb2FkLmxpZmVjeWNsZS5EaXJlY3RvcnlDYXRlZ29yeSBkaXJlY3RvcnlDYXRlZ29yeSwgamF2YS5sYW5nLlN0cmluZyBkaXJlY3RvcnlUaXRsZSkgewogICAgICAgICB0aGlzLnN1bW1hcnkgPSBzdW1tYXJ5OwogICAgICAgICB0aGlzLlVSTCA9IFVSTDsKQEAgLTQ2LDc1ICs0Niw3NSBAQAogICAgICAgICB0aGlzLmRpcmVjdG9yeUNhdGVnb3J5ID0gZGlyZWN0b3J5Q2F0ZWdvcnk7CiAgICAgICAgIHRoaXMuZGlyZWN0b3J5VGl0bGUgPSBkaXJlY3RvcnlUaXRsZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRTdW1tYXJ5KCkgewogICAgICAgICByZXR1cm4gc3VtbWFyeTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRTdW1tYXJ5KGphdmEubGFuZy5TdHJpbmcgc3VtbWFyeSkgewogICAgICAgICB0aGlzLnN1bW1hcnkgPSBzdW1tYXJ5OwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldFVSTCgpIHsKICAgICAgICAgcmV0dXJuIFVSTDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRVUkwoamF2YS5sYW5nLlN0cmluZyBVUkwpIHsKICAgICAgICAgdGhpcy5VUkwgPSBVUkw7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0U25pcHBldCgpIHsKICAgICAgICAgcmV0dXJuIHNuaXBwZXQ7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0U25pcHBldChqYXZhLmxhbmcuU3RyaW5nIHNuaXBwZXQpIHsKICAgICAgICAgdGhpcy5zbmlwcGV0ID0gc25pcHBldDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRUaXRsZSgpIHsKICAgICAgICAgcmV0dXJuIHRpdGxlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFRpdGxlKGphdmEubGFuZy5TdHJpbmcgdGl0bGUpIHsKICAgICAgICAgdGhpcy50aXRsZSA9IHRpdGxlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldENhY2hlZFNpemUoKSB7CiAgICAgICAgIHJldHVybiBjYWNoZWRTaXplOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldENhY2hlZFNpemUoamF2YS5sYW5nLlN0cmluZyBjYWNoZWRTaXplKSB7CiAgICAgICAgIHRoaXMuY2FjaGVkU2l6ZSA9IGNhY2hlZFNpemU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gaXNSZWxhdGVkSW5mb3JtYXRpb25QcmVzZW50KCkgewogICAgICAgICByZXR1cm4gcmVsYXRlZEluZm9ybWF0aW9uUHJlc2VudDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRSZWxhdGVkSW5mb3JtYXRpb25QcmVzZW50KGJvb2xlYW4gcmVsYXRlZEluZm9ybWF0aW9uUHJlc2VudCkgewogICAgICAgICB0aGlzLnJlbGF0ZWRJbmZvcm1hdGlvblByZXNlbnQgPSByZWxhdGVkSW5mb3JtYXRpb25QcmVzZW50OwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldEhvc3ROYW1lKCkgewogICAgICAgICByZXR1cm4gaG9zdE5hbWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0SG9zdE5hbWUoamF2YS5sYW5nLlN0cmluZyBob3N0TmFtZSkgewogICAgICAgICB0aGlzLmhvc3ROYW1lID0gaG9zdE5hbWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGNvbS5zdW4uczFhc2Rldi5lamIuY2xhc3Nsb2FkLmxpZmVjeWNsZS5EaXJlY3RvcnlDYXRlZ29yeSBnZXREaXJlY3RvcnlDYXRlZ29yeSgpIHsKICAgICAgICAgcmV0dXJuIGRpcmVjdG9yeUNhdGVnb3J5OwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldERpcmVjdG9yeUNhdGVnb3J5KGNvbS5zdW4uczFhc2Rldi5lamIuY2xhc3Nsb2FkLmxpZmVjeWNsZS5EaXJlY3RvcnlDYXRlZ29yeSBkaXJlY3RvcnlDYXRlZ29yeSkgewogICAgICAgICB0aGlzLmRpcmVjdG9yeUNhdGVnb3J5ID0gZGlyZWN0b3J5Q2F0ZWdvcnk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0RGlyZWN0b3J5VGl0bGUoKSB7CiAgICAgICAgIHJldHVybiBkaXJlY3RvcnlUaXRsZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXREaXJlY3RvcnlUaXRsZShqYXZhLmxhbmcuU3RyaW5nIGRpcmVjdG9yeVRpdGxlKSB7CiAgICAgICAgIHRoaXMuZGlyZWN0b3J5VGl0bGUgPSBkaXJlY3RvcnlUaXRsZTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xpL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGkvYnVpbGQueG1sCmluZGV4IDQ0YzEzMGQuLjRiNGRmNWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGkvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGkvYnVpbGQueG1sCkBAIC00MCwxMSArNDAsMTEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPgotCQlVc2FnZToKLQkJCWFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZWpiLWNsaSB0ZXN0cykKKyAgICA8ZWNobz4KKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYi1jbGkgdGVzdHMpCiAKLQkJCWFudCBuZWdhdGl2ZSAoRXhlY3V0ZXMgdGhlIGVqYi1jbGkgbmVnYXRpdmUgdGVzdCkKLQk8L2VjaG8+CisgICAgICAgICAgICBhbnQgbmVnYXRpdmUgKEV4ZWN1dGVzIHRoZSBlamItY2xpIG5lZ2F0aXZlIHRlc3QpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsaS9uZWdhdGl2ZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsaS9uZWdhdGl2ZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDhkMWMyODcuLjc0MmNjNWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGkvbmVnYXRpdmUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xpL25lZ2F0aXZlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1jbGktbmVnYXRpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xpL25lZ2F0aXZlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGkvbmVnYXRpdmUvYnVpbGQueG1sCmluZGV4IGYzOTQzNDEuLmE0NzhlMWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGkvbmVnYXRpdmUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGkvbmVnYXRpdmUvYnVpbGQueG1sCkBAIC00NSw3ICs0NSw3IEBACiAgICAgICAgICAgIDxhcmcgbGluZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIi8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC01NiwxOSArNTYsMTkgQEAKICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jbGllbnQiLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwbGljYXRpb24ueG1sIgogICAgICAgICAgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIiAvPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIgogICAgICAgICAgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIgLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZS1jbGllbnQiID4KLSAgICAgICAgPGphdmFjIGZvcms9InRydWUiIGluY2x1ZGVBbnRSdW50aW1lPSJmYWxzZSIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIGRlYnVnPSJ0cnVlIiAKKyAgICAgICAgPGphdmFjIGZvcms9InRydWUiIGluY2x1ZGVBbnRSdW50aW1lPSJmYWxzZSIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIGRlYnVnPSJ0cnVlIgogICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgogICAgICAgICAgICAgICAgc3JjZGlyPSIke2Vudi5BUFNfSE9NRX0vZGV2dGVzdHMvYWRtaW4vY2xpL3NyYyIgaW5jbHVkZXM9IioqLypCYXNlRGV2VGVzdC5qYXZhIj4KICAgICAgICAgPC9qYXZhYz4KLSAgICAgICAgPGphdmFjIGZvcms9InRydWUiIGluY2x1ZGVBbnRSdW50aW1lPSJmYWxzZSIgCisgICAgICAgIDxqYXZhYyBmb3JrPSJ0cnVlIiBpbmNsdWRlQW50UnVudGltZT0iZmFsc2UiCiAgICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtzMWFzdGVzdC5jbGFzc3BhdGh9IgogICAgICAgICAgICAgICAgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIGRlYnVnPSJ0cnVlIiBzcmNkaXI9ImNsaWVudCIgaW5jbHVkZXM9IioqLyouamF2YSI+CiAgICAgICAgICAgICA8Y2xhc3NwYXRoIHBhdGg9IiR7Y2xhc3NwYXRofSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsaS9uZWdhdGl2ZS9jbGllbnQvQXBwQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xpL25lZ2F0aXZlL2NsaWVudC9BcHBDbGllbnQuamF2YQppbmRleCAzNjAwYjFjLi5iNTk0OWMwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xpL25lZ2F0aXZlL2NsaWVudC9BcHBDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xpL25lZ2F0aXZlL2NsaWVudC9BcHBDbGllbnQuamF2YQpAQCAtMjMsNyArMjMsNyBAQAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuU2ltcGxlUmVwb3J0ZXJBZGFwdGVyOwogCiAvKioKLSAqIEEgc2ltcGxlIGphdmEgY2xpZW50IHdpbGw6IAorICogQSBzaW1wbGUgamF2YSBjbGllbnQgd2lsbDoKICAqIDx1bD4KICAqIDxsaT5Mb2NhdGVzIHRoZSByZW1vdGUgaW50ZXJmYWNlIG9mIHRoZSBlbnRlcnByaXNlIGJlYW4KICAqIDxsaT5JbnZva2VzIGJ1c2luZXNzIG1ldGhvZHMKQEAgLTM0LDExICszNCwxMSBAQAogICAgIHByaXZhdGUgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7IAotICAgICAgICBBcHBDbGllbnQgY2xpZW50ID0gbmV3IEFwcENsaWVudCgpOyAKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIEFwcENsaWVudCBjbGllbnQgPSBuZXcgQXBwQ2xpZW50KCk7CiAKICAgICAgICAgLy8gcnVuIHRoZSB0ZXN0cwotICAgICAgICBjbGllbnQucnVuVGVzdENsaWVudCgpOyAgIAorICAgICAgICBjbGllbnQucnVuVGVzdENsaWVudCgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHJ1blRlc3RDbGllbnQoKSB7CkBAIC01Nyw4ICs1Nyw4IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvTXlCZWFuIik7Ci0gICAgICAgICAgICBNeUJlYW5SZW1vdGVJbnRmIG15YmVhbiA9IAotICAgICAgICAgICAgICAgIChNeUJlYW5SZW1vdGVJbnRmKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCAKKyAgICAgICAgICAgIE15QmVhblJlbW90ZUludGYgbXliZWFuID0KKyAgICAgICAgICAgICAgICAoTXlCZWFuUmVtb3RlSW50ZikgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNeUJlYW5SZW1vdGVJbnRmLmNsYXNzKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW52b2NhdGlvbiByZXN1bHQ6ICIrIG15YmVhbi5nZXRDb3VudCgxKSk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiLWNsaSIsIHN0YXQuRkFJTCk7CkBAIC02Nyw1ICs2Nyw1IEBACiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oImNhdWdodCBleHBlY3RlZCBleGNlcHRpb24iKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0gICAgfSAKLX0gCisgICAgfQorfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsaS9uZWdhdGl2ZS9jbGllbnQvTmVnQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xpL25lZ2F0aXZlL2NsaWVudC9OZWdDbGllbnQuamF2YQppbmRleCBjN2FkYjEzLi44ZmZlODlhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xpL25lZ2F0aXZlL2NsaWVudC9OZWdDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xpL25lZ2F0aXZlL2NsaWVudC9OZWdDbGllbnQuamF2YQpAQCAtNTMsOSArNTMsOSBAQAogICAgICAgICAgICAgaWYgKCFyZXQucmV0dXJuVmFsdWUgJiYgcmV0LmVyci5jb250YWlucyhleHBlY3RlZEVycikpIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiLWNsaS1uZWdhdGl2ZS1kZXBsb3kiLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIAkgIHN0YXQuYWRkU3RhdHVzKCJlamItY2xpLW5lZ2F0aXZlLWRlcGxveSIsIHN0YXQuRkFJTCk7CisgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiLWNsaS1uZWdhdGl2ZS1kZXBsb3kiLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCQorCiAgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbihyZXQpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGkvbmVnYXRpdmUvZWpiL015QmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsaS9uZWdhdGl2ZS9lamIvTXlCZWFuLmphdmEKaW5kZXggMjY3MWM3MS4uZGMyMDI0NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsaS9uZWdhdGl2ZS9lamIvTXlCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsaS9uZWdhdGl2ZS9lamIvTXlCZWFuLmphdmEKQEAgLTIzLDQgKzIzLDQgQEAKICAgICBwdWJsaWMgaW50IGdldENvdW50KGludCBpKSB7CiAgICAgICAgIHJldHVybiAxICsgaTsKICAgICB9Ci19IAorfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsaS9uZWdhdGl2ZS9lamIvTXlCZWFuUmVtb3RlSW50Zi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NsaS9uZWdhdGl2ZS9lamIvTXlCZWFuUmVtb3RlSW50Zi5qYXZhCmluZGV4IGM5NzU5NTMuLmNkNjFiNzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbGkvbmVnYXRpdmUvZWpiL015QmVhblJlbW90ZUludGYuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY2xpL25lZ2F0aXZlL2VqYi9NeUJlYW5SZW1vdGVJbnRmLmphdmEKQEAgLTIxLDQgKzIxLDQgQEAKIEBSZW1vdGUKIHB1YmxpYyBpbnRlcmZhY2UgTXlCZWFuUmVtb3RlSW50ZiB7CiAgICAgcHVibGljIGludCBnZXRDb3VudChpbnQgaSk7Ci19IAorfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL2J1aWxkLnhtbAppbmRleCAxN2Q0MzRlLi5mODY1ZWE2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL2J1aWxkLnhtbApAQCAtNDYsMTEgKzQ2LDExIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgcmVhZG9ubHkgKEV4ZWN1dGVzIHRoZSBlamItY21wLXJlYWRvbmx5IHRlc3QpCi0JCQlhbnQgZWpiZmx1c2h3aXRoc3FsZXhjZXB0aW9uIChFeGVjdXRlcyB0aGUgZWpiLWNtcC1lamJmbHVzaHdpdGhzcWxleGNlcHRpb24gdGVzdCkKLQkJCWFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZWpiLWNtcCB0ZXN0cykKLQk8L2VjaG8+CisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IHJlYWRvbmx5IChFeGVjdXRlcyB0aGUgZWpiLWNtcC1yZWFkb25seSB0ZXN0KQorICAgICAgICAgICAgYW50IGVqYmZsdXNod2l0aHNxbGV4Y2VwdGlvbiAoRXhlY3V0ZXMgdGhlIGVqYi1jbXAtZWpiZmx1c2h3aXRoc3FsZXhjZXB0aW9uIHRlc3QpCisgICAgICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYi1jbXAgdGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9lamJmbHVzaHdpdGhzcWxleGNlcHRpb24vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvZWpiZmx1c2h3aXRoc3FsZXhjZXB0aW9uL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYjcxZTc5Yy4uZWJmMGRlYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9lamJmbHVzaHdpdGhzcWxleGNlcHRpb24vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL2VqYmZsdXNod2l0aHNxbGV4Y2VwdGlvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMiArMTUsMjIgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1mbHVzaC10ZXN0Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWNtcC1tYXBwaW5ncy54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1jbXAtbWFwcGluZ3MueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL2VqYmZsdXNod2l0aHNxbGV4Y2VwdGlvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL2VqYmZsdXNod2l0aHNxbGV4Y2VwdGlvbi9idWlsZC54bWwKaW5kZXggZjU0MDMyYS4uMDcyNWNjOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9lamJmbHVzaHdpdGhzcWxleGNlcHRpb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvZWpiZmx1c2h3aXRoc3FsZXhjZXB0aW9uL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTQgKzQ2LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9UZXN0SG9tZS5jbGFzcywqKi9UZXN0LmNsYXNzLCoqLypDbGllbnQqLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtZWpiLXNxbC1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CkBAIC02NCwyMyArNjQsMjMgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLWVqYi1zcWwtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX3BvaW50YmFzZS5zcWwiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGVSb3dzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CiAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kZWxldGVfdGFibGVzLnNxbCIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBhbGwKICAgICAgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9lamJmbHVzaHdpdGhzcWxleGNlcHRpb24vY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9lamJmbHVzaHdpdGhzcWxleGNlcHRpb24vY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDU5OTgyMDAuLmViMDAzMWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvZWpiZmx1c2h3aXRoc3FsZXhjZXB0aW9uL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL2VqYmZsdXNod2l0aHNxbGV4Y2VwdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogICAgIHByaXZhdGUgVGVzdCB0OwogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogCkBAIC01MCw3ICs1MCw3IEBACiAKICAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvVDEiKTsKICAgICAgICAgICAgIFRlc3RIb21lIHRob21lID0gKFRlc3RIb21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIFRlc3RIb21lLmNsYXNzKTsKLSAgICAKKwogICAgICAgICAgICAgdCA9IHRob21lLmNyZWF0ZSgpOwogICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZXggKSB7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkNsaWVudCgpOiBDYXVnaHQgYW4gZXhjZXB0aW9uOiIpOwpAQCAtNTksNyArNTksNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLSAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTVEFSVCIpOwogCkBAIC03OCw3ICs3OCw3IEBACiAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImVqYkZsdXNoIik7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIGNoZWNrQ21wMTFCZWFuKCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgdC50ZXN0QTEoKTsKQEAgLTkzLDcgKzkzLDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHQudGVzdEExV2l0aEZsdXNoKCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkExV2l0aEZsdXNoIE9LIik7Ci0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7ICAKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQTEgRkFJTEVEICIgKyBlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBjaGVja0NtcDExQmVhbiIsIHN0YXQuRkFJTCk7CkBAIC0xNTIsNyArMTUyLDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHQudGVzdEEyV2l0aEZsdXNoKCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkEyV2l0aEZsdXNoIE9LIik7Ci0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7ICAKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQTIgRkFJTEVEICIgKyBlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBjaGVja0NtcDIwQmVhbiIsIHN0YXQuRkFJTCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL2VqYmZsdXNod2l0aHNxbGV4Y2VwdGlvbi9lamIvQTFCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL2VqYmZsdXNod2l0aHNxbGV4Y2VwdGlvbi9lamIvQTFCZWFuLmphdmEKaW5kZXggYjViN2UzMi4uMGJjNWVhMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9lamJmbHVzaHdpdGhzcWxleGNlcHRpb24vZWpiL0ExQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvZWpiZmx1c2h3aXRoc3FsZXhjZXB0aW9uL2VqYi9BMUJlYW4uamF2YQpAQCAtMjAsNjQgKzIwLDY0IEBACiBpbXBvcnQgamF2YXgubmFtaW5nLio7CiAKIC8qKgotICogMS4xIGJlYW4uIAorICogMS4xIGJlYW4uCiAgKiBAYXV0aG9yIG12YXRraW5hCiAgKi8KIAogCiBwdWJsaWMgY2xhc3MgQTFCZWFuIGltcGxlbWVudHMgamFrYXJ0YS5lamIuRW50aXR5QmVhbiB7Ci0gICAgCisKICAgICBwcml2YXRlIGpha2FydGEuZWpiLkVudGl0eUNvbnRleHQgY29udGV4dDsKLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI3NldEVudGl0eUNvbnRleHQoamFrYXJ0YS5lamIuRW50aXR5Q29udGV4dCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRFbnRpdHlDb250ZXh0KGpha2FydGEuZWpiLkVudGl0eUNvbnRleHQgYUNvbnRleHQpIHsKICAgICAgICAgY29udGV4dD1hQ29udGV4dDsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiNlamJBY3RpdmF0ZSgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiUGFzc2l2YXRlKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiUmVtb3ZlKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGVidWc6IEExQmVhbiBlamJSZW1vdmUiKTsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiN1bnNldEVudGl0eUNvbnRleHQoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHVuc2V0RW50aXR5Q29udGV4dCgpIHsKICAgICAgICAgY29udGV4dD1udWxsOwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI2VqYkxvYWQoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiU3RvcmUoKQogICAgICAqLwpAQCAtOTMsOCArOTMsOCBAQAogICAgICAgICBuYW1lID0gIkFCQyI7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBlamJQb3N0Q3JlYXRlKGphdmEubGFuZy5TdHJpbmcgaWQpIHRocm93cyBqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb24geyAKKworICAgIHB1YmxpYyB2b2lkIGVqYlBvc3RDcmVhdGUoamF2YS5sYW5nLlN0cmluZyBpZCkgdGhyb3dzIGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbiB7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgcykgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9lamJmbHVzaHdpdGhzcWxleGNlcHRpb24vZWpiL0ExTG9jYWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvZWpiZmx1c2h3aXRoc3FsZXhjZXB0aW9uL2VqYi9BMUxvY2FsLmphdmEKaW5kZXggYmQ1NmY2ZC4uZWEzNGRkNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9lamJmbHVzaHdpdGhzcWxleGNlcHRpb24vZWpiL0ExTG9jYWwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL2VqYmZsdXNod2l0aHNxbGV4Y2VwdGlvbi9lamIvQTFMb2NhbC5qYXZhCkBAIC0yNCw5ICsyNCw5IEBACiAKIHB1YmxpYyBpbnRlcmZhY2UgQTFMb2NhbCBleHRlbmRzIGpha2FydGEuZWpiLkVKQkxvY2FsT2JqZWN0IHsKIAotICAgIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpOyAKKyAgICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKTsKIAotICAgIHB1YmxpYyB2b2lkIHNldE5hbWVXaXRoRmx1c2goU3RyaW5nIG5hbWUpOyAKKyAgICBwdWJsaWMgdm9pZCBzZXROYW1lV2l0aEZsdXNoKFN0cmluZyBuYW1lKTsKIAogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL2VqYmZsdXNod2l0aHNxbGV4Y2VwdGlvbi9lamIvQTFMb2NhbEhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvZWpiZmx1c2h3aXRoc3FsZXhjZXB0aW9uL2VqYi9BMUxvY2FsSG9tZS5qYXZhCmluZGV4IDkwNTc5ODIuLmE2Y2Y0MGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvZWpiZmx1c2h3aXRoc3FsZXhjZXB0aW9uL2VqYi9BMUxvY2FsSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvZWpiZmx1c2h3aXRoc3FsZXhjZXB0aW9uL2VqYi9BMUxvY2FsSG9tZS5qYXZhCkBAIC0yNCw5ICsyNCw5IEBACiAgKi8KIAogcHVibGljIGludGVyZmFjZSBBMUxvY2FsSG9tZSBleHRlbmRzIGpha2FydGEuZWpiLkVKQkxvY2FsSG9tZSB7Ci0gICAgCisKICAgICBwdWJsaWMgIEExTG9jYWwgZmluZEJ5UHJpbWFyeUtleShqYXZhLmxhbmcuU3RyaW5nIHBrKSAgdGhyb3dzIGpha2FydGEuZWpiLkZpbmRlckV4Y2VwdGlvbjsKLSAgICAKKwogICAgIHB1YmxpYyAgQTFMb2NhbCBjcmVhdGUoamF2YS5sYW5nLlN0cmluZyBpZCkgdGhyb3dzIGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbjsKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9lamJmbHVzaHdpdGhzcWxleGNlcHRpb24vZWpiL0EyQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9lamJmbHVzaHdpdGhzcWxleGNlcHRpb24vZWpiL0EyQmVhbi5qYXZhCmluZGV4IDI4Y2M2YjUuLjJhZGZiMzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvZWpiZmx1c2h3aXRoc3FsZXhjZXB0aW9uL2VqYi9BMkJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL2VqYmZsdXNod2l0aHNxbGV4Y2VwdGlvbi9lamIvQTJCZWFuLmphdmEKQEAgLTIwLDY0ICsyMCw2NCBAQAogaW1wb3J0IGphdmF4Lm5hbWluZy4qOwogCiAvKioKLSAqIDIuMCBiZWFuLiAKKyAqIDIuMCBiZWFuLgogICogQGF1dGhvciBtdmF0a2luYQogICovCiAKIAogcHVibGljIGFic3RyYWN0IGNsYXNzIEEyQmVhbiBpbXBsZW1lbnRzIGpha2FydGEuZWpiLkVudGl0eUJlYW4gewotICAgIAorCiAgICAgcHJpdmF0ZSBqYWthcnRhLmVqYi5FbnRpdHlDb250ZXh0IGNvbnRleHQ7Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiNzZXRFbnRpdHlDb250ZXh0KGpha2FydGEuZWpiLkVudGl0eUNvbnRleHQpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RW50aXR5Q29udGV4dChqYWthcnRhLmVqYi5FbnRpdHlDb250ZXh0IGFDb250ZXh0KSB7CiAgICAgICAgIGNvbnRleHQ9YUNvbnRleHQ7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiQWN0aXZhdGUoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgewotICAgICAgICAKKwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI2VqYlBhc3NpdmF0ZSgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkgewotICAgICAgICAKKwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI2VqYlJlbW92ZSgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRlYnVnOiBBMkJlYW4gZWpiUmVtb3ZlIik7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jdW5zZXRFbnRpdHlDb250ZXh0KCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCB1bnNldEVudGl0eUNvbnRleHQoKSB7CiAgICAgICAgIGNvbnRleHQ9bnVsbDsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiNlamJMb2FkKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJMb2FkKCkgewotICAgICAgICAKKwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI2VqYlN0b3JlKCkKICAgICAgKi8KQEAgLTk2LDggKzk2LDggQEAKICAgICAgICAgc2V0TmFtZSgiQUJDIik7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBlamJQb3N0Q3JlYXRlKGphdmEubGFuZy5TdHJpbmcgbmFtZSkgdGhyb3dzIGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbiB7IAorCisgICAgcHVibGljIHZvaWQgZWpiUG9zdENyZWF0ZShqYXZhLmxhbmcuU3RyaW5nIG5hbWUpIHRocm93cyBqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb24gewogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldE5hbWVXaXRoRmx1c2goamF2YS5sYW5nLlN0cmluZyBzKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL2VqYmZsdXNod2l0aHNxbGV4Y2VwdGlvbi9lamIvQTJMb2NhbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9lamJmbHVzaHdpdGhzcWxleGNlcHRpb24vZWpiL0EyTG9jYWwuamF2YQppbmRleCAwY2JjMDhmLi45YjQ2NzhkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL2VqYmZsdXNod2l0aHNxbGV4Y2VwdGlvbi9lamIvQTJMb2NhbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvZWpiZmx1c2h3aXRoc3FsZXhjZXB0aW9uL2VqYi9BMkxvY2FsLmphdmEKQEAgLTI1LDggKzI1LDggQEAKIAogcHVibGljIGludGVyZmFjZSBBMkxvY2FsIGV4dGVuZHMgamFrYXJ0YS5lamIuRUpCTG9jYWxPYmplY3QgewogCi0gICAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSk7IAotIAotICAgIHB1YmxpYyB2b2lkIHNldE5hbWVXaXRoRmx1c2goU3RyaW5nIG5hbWUpOyAKLSAKKyAgICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKTsKKworICAgIHB1YmxpYyB2b2lkIHNldE5hbWVXaXRoRmx1c2goU3RyaW5nIG5hbWUpOworCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL2VqYmZsdXNod2l0aHNxbGV4Y2VwdGlvbi9lamIvQTJMb2NhbEhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvZWpiZmx1c2h3aXRoc3FsZXhjZXB0aW9uL2VqYi9BMkxvY2FsSG9tZS5qYXZhCmluZGV4IDczOTAwM2MuLmQ2MTNmYTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvZWpiZmx1c2h3aXRoc3FsZXhjZXB0aW9uL2VqYi9BMkxvY2FsSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvZWpiZmx1c2h3aXRoc3FsZXhjZXB0aW9uL2VqYi9BMkxvY2FsSG9tZS5qYXZhCkBAIC0yNCw5ICsyNCw5IEBACiAgKi8KIAogcHVibGljIGludGVyZmFjZSBBMkxvY2FsSG9tZSBleHRlbmRzIGpha2FydGEuZWpiLkVKQkxvY2FsSG9tZSB7Ci0gICAgCisKICAgICBwdWJsaWMgIEEyTG9jYWwgZmluZEJ5UHJpbWFyeUtleShqYXZhLmxhbmcuU3RyaW5nIHBrKSAgdGhyb3dzIGpha2FydGEuZWpiLkZpbmRlckV4Y2VwdGlvbjsKLSAgICAKKwogICAgIHB1YmxpYyAgQTJMb2NhbCBjcmVhdGUoamF2YS5sYW5nLlN0cmluZyBuYW1lKSB0aHJvd3MgamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uOwotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL2VqYmZsdXNod2l0aHNxbGV4Y2VwdGlvbi9lamIvVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9lamJmbHVzaHdpdGhzcWxleGNlcHRpb24vZWpiL1Rlc3QuamF2YQppbmRleCBlNDM2NTk5Li5lMDU1YjZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL2VqYmZsdXNod2l0aHNxbGV4Y2VwdGlvbi9lamIvVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvZWpiZmx1c2h3aXRoc3FsZXhjZXB0aW9uL2VqYi9UZXN0LmphdmEKQEAgLTIwLDEzICsyMCwxMyBAQAogaW1wb3J0IGphdmEucm1pLio7CiAKIHB1YmxpYyBpbnRlcmZhY2UgVGVzdCBleHRlbmRzIEVKQk9iamVjdCB7Ci0gCisKICAgICBwdWJsaWMgdm9pZCB0ZXN0QTEoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwotICAgICAgICAKKwogICAgIHB1YmxpYyB2b2lkIHRlc3RBMVdpdGhGbHVzaCgpIHRocm93cyBSZW1vdGVFeGNlcHRpb247Ci0gICAgICAgIAorCiAgICAgcHVibGljIHZvaWQgdGVzdEEyKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKLSAgICAgICAgCisKICAgICBwdWJsaWMgdm9pZCB0ZXN0QTJXaXRoRmx1c2goKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwotICAgICAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9lamJmbHVzaHdpdGhzcWxleGNlcHRpb24vZWpiL1Rlc3RCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL2VqYmZsdXNod2l0aHNxbGV4Y2VwdGlvbi9lamIvVGVzdEJlYW4uamF2YQppbmRleCA2ODE2MmQxLi5lNzlmMWFlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL2VqYmZsdXNod2l0aHNxbGV4Y2VwdGlvbi9lamIvVGVzdEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL2VqYmZsdXNod2l0aHNxbGV4Y2VwdGlvbi9lamIvVGVzdEJlYW4uamF2YQpAQCAtMjcsMjEgKzI3LDIxIEBACiAgICAgcHJpdmF0ZSAgQTJMb2NhbCBhMmJlYW4gPSBudWxsOwogCiAgICAgLy8gU2Vzc2lvbkJlYW4gbWV0aG9kcwotIAorCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdEJlYW4gZWpiQ3JlYXRlIik7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBhMUhvbWUgPSBsb29rdXBBMSgpOwogICAgICAgICAgICAgYTJIb21lID0gbG9va3VwQTIoKTsKLSAKKwogICAgICAgICB9IGNhdGNoIChOYW1pbmdFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQotICAgIH0gICAgCi0gCisgICAgfQorCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdEJlYW4gZWpiQWN0aXZhdGUiKTsKLSAgICB9ICAgIAorICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHsKICAgICAgICAgICAgIGExSG9tZSA9IG51bGw7CkBAIC01NSwxMyArNTUsMTMgQEAKICAgICAgICAgQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvQTFGTCIpOwogICAgICAgICByZXR1cm4gKEExTG9jYWxIb21lKSBvYmpyZWY7Ci0gICAgfSAgICAKKyAgICB9CiAKICAgICBwcml2YXRlIEEyTG9jYWxIb21lIGxvb2t1cEEyKCkgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbiB7CiAgICAgICAgIENvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICBPYmplY3Qgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL0EyRkwiKTsKICAgICAgICAgcmV0dXJuIChBMkxvY2FsSG9tZSkgb2JqcmVmOwotICAgIH0gICAgCisgICAgfQogCiAgICAgU3RyaW5nIG1zZyA9ICJVcGRhdGUgc3VjY2VlZGVkIHdpdGggZmx1c2ggZW5hYmxlZCI7CiAKQEAgLTcyLDcgKzcyLDcgQEAKICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24gKGUuZ2V0TWVzc2FnZSgpLCBlKTsKICAgICAgICAgfQogCi0vL1BHLT4gICAgICAgYTFiZWFuLnNldE5hbWUoIkExMjM0NTY3ODkwMTIzNDU2Nzg5MCIpOyAKKy8vUEctPiAgICAgICBhMWJlYW4uc2V0TmFtZSgiQTEyMzQ1Njc4OTAxMjM0NTY3ODkwIik7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgdGVzdEEyKCkgewpAQCAtODEsMTQgKzgxLDE0IEBACiAgICAgICAgIH0gY2F0Y2ggKENyZWF0ZUV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbiAoZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9Ci0vL1BHLT4gICAgICAgIGEyYmVhbi5zZXROYW1lKCJBMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiKTsgCisvL1BHLT4gICAgICAgIGEyYmVhbi5zZXROYW1lKCJBMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB0ZXN0QTFXaXRoRmx1c2goKSB7CiAgICAgICAgIGJvb2xlYW4gc3VjY2VzcyA9IHRydWU7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBhMWJlYW4gPSBhMUhvbWUuY3JlYXRlKCJCMSIpOwotICAgICAgICAgICAgYTFiZWFuLnNldE5hbWVXaXRoRmx1c2goIkExMjM0NTY3ODkwMTIzNDU2Nzg5MCIpOyAKKyAgICAgICAgICAgIGExYmVhbi5zZXROYW1lV2l0aEZsdXNoKCJBMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiKTsKICAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihlLnRvU3RyaW5nKCkpOwpAQCAtMTAyLDcgKzEwMiw3IEBACiAgICAgICAgIGJvb2xlYW4gc3VjY2VzcyA9IHRydWU7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBhMmJlYW4gPSBhMkhvbWUuY3JlYXRlKCJCMiIpOwotICAgICAgICAgICAgYTJiZWFuLnNldE5hbWVXaXRoRmx1c2goIkExMjM0NTY3ODkwMTIzNDU2Nzg5MCIpOyAKKyAgICAgICAgICAgIGEyYmVhbi5zZXROYW1lV2l0aEZsdXNoKCJBMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiKTsKICAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihlLnRvU3RyaW5nKCkpOwpAQCAtMTEyLDQgKzExMiw0IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihtc2cpOwogICAgIH0KIAotfSAKK30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvZWpiZmx1c2h3aXRoc3FsZXhjZXB0aW9uL2VqYi9UZXN0SG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9lamJmbHVzaHdpdGhzcWxleGNlcHRpb24vZWpiL1Rlc3RIb21lLmphdmEKaW5kZXggNGU5MDNjYy4uY2U0ZTE4NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9lamJmbHVzaHdpdGhzcWxleGNlcHRpb24vZWpiL1Rlc3RIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9lamJmbHVzaHdpdGhzcWxleGNlcHRpb24vZWpiL1Rlc3RIb21lLmphdmEKQEAgLTIwLDYgKzIwLDYgQEAKIGltcG9ydCBqYXZhLnJtaS4qOwogCiBwdWJsaWMgaW50ZXJmYWNlIFRlc3RIb21lIGV4dGVuZHMgRUpCSG9tZSB7Ci0gCisKICAgICBUZXN0IGNyZWF0ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24sIENyZWF0ZUV4Y2VwdGlvbjsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvZWpiZmx1c2h3aXRoc3FsZXhjZXB0aW9uL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvZWpiZmx1c2h3aXRoc3FsZXhjZXB0aW9uL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCBjZDg4NDgwLi40MTMzYzNmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL2VqYmZsdXNod2l0aHNxbGV4Y2VwdGlvbi9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9lamJmbHVzaHdpdGhzcWxleGNlcHRpb24vc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDEzICsxLDEzIEBACi1Ecm9wIHRhYmxlIEExOw0KLURyb3AgdGFibGUgQTI7DQotDQotQ1JFQVRFIFRBQkxFIEExICgNCi0gICAgaWQgICAgIGNoYXIoMykgbm90IG51bGwgY29uc3RyYWludCBwa19BMV9pZCBwcmltYXJ5IGtleSwNCi0gICAgbmFtZSAgIGNoYXIoNSkNCi0pOw0KLQ0KLUNSRUFURSBUQUJMRSBBMiAoDQotICAgIGlkICAgICBjaGFyKDMpIG5vdCBudWxsIGNvbnN0cmFpbnQgcGtfQTJfaWQgcHJpbWFyeSBrZXksDQotICAgIG5hbWUgICBjaGFyKDUpDQotKTsNCi0NCitEcm9wIHRhYmxlIEExOworRHJvcCB0YWJsZSBBMjsKKworQ1JFQVRFIFRBQkxFIEExICgKKyAgICBpZCAgICAgY2hhcigzKSBub3QgbnVsbCBjb25zdHJhaW50IHBrX0ExX2lkIHByaW1hcnkga2V5LAorICAgIG5hbWUgICBjaGFyKDUpCispOworCitDUkVBVEUgVEFCTEUgQTIgKAorICAgIGlkICAgICBjaGFyKDMpIG5vdCBudWxsIGNvbnN0cmFpbnQgcGtfQTJfaWQgcHJpbWFyeSBrZXksCisgICAgbmFtZSAgIGNoYXIoNSkKKyk7CisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvZWpiZmx1c2h3aXRoc3FsZXhjZXB0aW9uL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL2VqYmZsdXNod2l0aHNxbGV4Y2VwdGlvbi9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IDgxNzY1ZGMuLmUwNjkxNzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvZWpiZmx1c2h3aXRoc3FsZXhjZXB0aW9uL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9lamJmbHVzaHdpdGhzcWxleGNlcHRpb24vc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbApAQCAtMSwyICsxLDIgQEAKLURyb3AgdGFibGUgQTE7DQotRHJvcCB0YWJsZSBBMjsNCitEcm9wIHRhYmxlIEExOworRHJvcCB0YWJsZSBBMjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcHJlc2VsZWN0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcHJlc2VsZWN0L2J1aWxkLnhtbAppbmRleCA1OTRiNGFkLi5jNjg2NzMwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3ByZXNlbGVjdC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9wcmVzZWxlY3QvYnVpbGQueG1sCkBAIC04MiwxNyArODIsMTcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPiBVc2FnZToKLQkJYW50IGN1c3RvbWVyIChFeGVjdXRlcyB0aGUgY3VzdG9tZXIgdGVzdHMpCi0JCWFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZWpiIGNtcCB0ZXN0cykKLQkJYW50IGNsZWFuIChjbGVhbnMgYWxsIHRoZSBlamIgY21wIHRlc3RzKQotCQlhbnQgYnVpbGQgKGJ1aWxkcyBhbGwgdGhlIGVqYiBjbXAgdGVzdHMpCi0JCWFudCBzZXR1cCAoc2V0cyB1cCBhbGwgcmVzb3VyY2VzIGZvciBjbXAgdGVzdHMpCi0JCWFudCBkZXBsb3kgKGRlcGxveXMgYWxsIHRoZSBlamIgY21wIGFwcHMpCi0JCWFudCBydW4gKEV4ZWN1dGVzIGFsbCB0aGUgZWpiIGNtcCB0ZXN0cykKLQkJYW50IHVuZGVwbG95ICh1bmRlcGxveXMgYWxsIHRoZSBjbXAgYXBwcykKLQkJYW50IHVuc2V0dXAgKHVuc2V0cyBhbGwgcmVzb3VyY2VzIGZvciBjbXAgdGVzdHMpCi0JPC9lY2hvPgorICAgIDxlY2hvPiBVc2FnZToKKyAgICAgICAgYW50IGN1c3RvbWVyIChFeGVjdXRlcyB0aGUgY3VzdG9tZXIgdGVzdHMpCisgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZWpiIGNtcCB0ZXN0cykKKyAgICAgICAgYW50IGNsZWFuIChjbGVhbnMgYWxsIHRoZSBlamIgY21wIHRlc3RzKQorICAgICAgICBhbnQgYnVpbGQgKGJ1aWxkcyBhbGwgdGhlIGVqYiBjbXAgdGVzdHMpCisgICAgICAgIGFudCBzZXR1cCAoc2V0cyB1cCBhbGwgcmVzb3VyY2VzIGZvciBjbXAgdGVzdHMpCisgICAgICAgIGFudCBkZXBsb3kgKGRlcGxveXMgYWxsIHRoZSBlamIgY21wIGFwcHMpCisgICAgICAgIGFudCBydW4gKEV4ZWN1dGVzIGFsbCB0aGUgZWpiIGNtcCB0ZXN0cykKKyAgICAgICAgYW50IHVuZGVwbG95ICh1bmRlcGxveXMgYWxsIHRoZSBjbXAgYXBwcykKKyAgICAgICAgYW50IHVuc2V0dXAgKHVuc2V0cyBhbGwgcmVzb3VyY2VzIGZvciBjbXAgdGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3ByZXNlbGVjdC9jdXN0b21lci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9wcmVzZWxlY3QvY3VzdG9tZXIvYnVpbGQucHJvcGVydGllcwppbmRleCAwNGYwMWViLi5kNjNhMjNlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3ByZXNlbGVjdC9jdXN0b21lci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcHJlc2VsZWN0L2N1c3RvbWVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIwICsxNSwyMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWNtcCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tY3VzdG9tZXIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWN1c3RvbWVyIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLWN1c3RvbWVyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci1jdXN0b21lci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci1jdXN0b21lci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLWN1c3RvbWVyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1jbXAtbWFwcGluZ3MueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tY21wLW1hcHBpbmdzLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImRic2NoZW1hIiB2YWx1ZT0ic3FsL1ByZXNlbGVjdFNjaGVtYS5kYnNjaGVtYSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9wcmVzZWxlY3QvY3VzdG9tZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9wcmVzZWxlY3QvY3VzdG9tZXIvYnVpbGQueG1sCmluZGV4IDcxNTU0ZGYuLjRmNzEzMzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcHJlc2VsZWN0L2N1c3RvbWVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3ByZXNlbGVjdC9jdXN0b21lci9idWlsZC54bWwKQEAgLTM1LDggKzM1LDggQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAotICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPiAgICAgCisKKyAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CiAgICAgICA8L2FudGNhbGw+CkBAIC01MCwyNyArNTAsMjcgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1jdXN0b21lci1qYXIiLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXBwY2xpZW50LWphci1jb21tb24iLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1lYXIiLz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InBhY2thZ2UtY3VzdG9tZXItamFyIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1lamJqYXItY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iJHtlamItamFyLWN1c3RvbWVyLnhtbH0iLz4KICAgICAgICAgPHBhcmFtIG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9IiR7c3VuLWVqYi1qYXItY3VzdG9tZXIueG1sfSIvPgotICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgIAorICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYi5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIuamFyIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlLWVhciI+CiAgICAgICA8ZGVsZXRlIGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LmVhciIvPgogICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+Ci0gICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPiAgICAKKyAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CiAgICAgICA8ZWFyIGVhcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIgYXBweG1sPSIke2FwcGxpY2F0aW9uLnhtbH0iPgogICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSI+CiAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KICAgICAgICAgPC9maWxlc2V0PgogICAgICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LkFQU19IT01FfS9saWIiIGluY2x1ZGVzPSJyZXBvcnRlci5qYXIiLz4KLSAgICAgIDwvZWFyPiAgICAgICAgCisgICAgICA8L2Vhcj4KICAgICA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJzcWwiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTkxLDE0ICs5MSwxNCBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVuc2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KQEAgLTEwNywxNSArMTA3LDE1IEBACiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1wZXJzaXN0ZW5jZS1yZXNvdXJjZS1jb21tb24iLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamRiYy1jb21tb24iLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVjb25maWctY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9InNxbC1jcmVhdGUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKLSAgICA8dGFyZ2V0IG5hbWU9InNxbC1kcm9wIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+ICAgCisgICAgPHRhcmdldCBuYW1lPSJzcWwtZHJvcCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX3BvaW50YmFzZS5zcWwiLz4KICAgICAgICA8L2FudGNhbGw+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3ByZXNlbGVjdC9jdXN0b21lci9jbGllbnQvUHJlc2VsZWN0Q2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3ByZXNlbGVjdC9jdXN0b21lci9jbGllbnQvUHJlc2VsZWN0Q2xpZW50LmphdmEKaW5kZXggNWRmNTAxYS4uYzFiYjc3YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9wcmVzZWxlY3QvY3VzdG9tZXIvY2xpZW50L1ByZXNlbGVjdENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcHJlc2VsZWN0L2N1c3RvbWVyL2NsaWVudC9QcmVzZWxlY3RDbGllbnQuamF2YQpAQCAtMjYsMzkgKzI2LDM5IEBACiAKIAogcHVibGljIGNsYXNzIFByZXNlbGVjdENsaWVudCB7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdHVzID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICB0cnkgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXJ0aW5nIHByZXNlbGVjdC4uLi4iKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDdXN0b21lciBCb2IgaGFzIGFkZGVkIDMgaXRlbXMgdG8gaGlzIHNob3BwaW5nIGNhcnQgOiIpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBUaGUgaXRlbXMgYXJlIDogMT4gRGFyayBDaG9jb2xhdGUgJDQwLCAyPiBNaWxrIENob2NvbGF0ZSAkMzAsIDM+IFdoaXRlIENob2NvbGF0ZSAkMjAiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGFydGluZyBwcmVzZWxlY3QuLi4uIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3VzdG9tZXIgQm9iIGhhcyBhZGRlZCAzIGl0ZW1zIHRvIGhpcyBzaG9wcGluZyBjYXJ0IDoiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgVGhlIGl0ZW1zIGFyZSA6IDE+IERhcmsgQ2hvY29sYXRlICQ0MCwgMj4gTWlsayBDaG9jb2xhdGUgJDMwLCAzPiBXaGl0ZSBDaG9jb2xhdGUgJDIwIik7CiAgICAgICAgICAgICBzdGF0dXMuYWRkRGVzY3JpcHRpb24oIlRlc3RpbmcgY21wIHByZXNlbGVjdCBhcHAuIik7CiAgICAgICAgICAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlQ3VzdG9tZXIiKTsKIAotICAgICAgICAgICAgQ3VzdG9tZXJIb21lIGhvbWUgPSAKLQkgICAgICAoQ3VzdG9tZXJIb21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIAorICAgICAgICAgICAgQ3VzdG9tZXJIb21lIGhvbWUgPQorICAgICAgICAgIChDdXN0b21lckhvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXJIb21lLmNsYXNzKTsKICAgICAgICAgICAgIEN1c3RvbWVyUmVtb3RlIG15Q3VzdG9tZXIgPSBob21lLmNyZWF0ZSgiMSIsIkJvYiIpOwogCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTGV0IHVzIHNlbGVjdCBhbGwgaXRlbXMgdGhhdCBCb2IgYm91Z2h0IHdob3NlIHByaWNlIGlzIGJlbG93ICQxMDAiKTsKLQkgICAgaW50IGl0ZW1zID0gbXlDdXN0b21lci5nZXRJdGVtc0Zvckxlc3MoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMZXQgdXMgc2VsZWN0IGFsbCBpdGVtcyB0aGF0IEJvYiBib3VnaHQgd2hvc2UgcHJpY2UgaXMgYmVsb3cgJDEwMCIpOworICAgICAgICBpbnQgaXRlbXMgPSBteUN1c3RvbWVyLmdldEl0ZW1zRm9yTGVzcygpOwogCi0JICAgIGlmIChpdGVtcyA9PSAwKSB7Ci0JICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk5vIGl0ZW1zIGF2YWlsYWJsZSBiZWxvdyAkMTAwIGZvciB0aGlzIGN1c3RvbWVyLiBlamJTdG9yZSgpIHdhcyBjYWxsZWQgYmVmb3JlIGVqYlNlbGVjdCgpIGFuZCBpdCBtb2RpZmllZCB0aGUgcHJpY2Ugb2YgZWFjaCBpdGVtIHRvICQyMDAiKTsKLQkJc3RhdHVzLmFkZFN0YXR1cygiY21wIHByZXNlbGVjdDpnZXRTb21lSW5mbyIsIHN0YXR1cy5QQVNTKTsKLQkgICAgfSBlbHNlIHsKLQkgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRm91bmQgIiArIGl0ZW1zICsgIiBpdGVtcyB3aXRoIHByaWNlIGxlc3MgdGhhbiAxMDAuIGVqYlN0b3JlIHdhcyBub3QgY2FsbGVkIGJlZm9yZSBlamJTZWxlY3QuIEhlbmNlIHRoZSBwcmljZSBvZiB0aGUgaXRlbXMgd2FzIG5vdCBtb2RpZmllZCB0byAkMjAwIik7Ci0JICAgICAgICBzdGF0dXMuYWRkU3RhdHVzKCJjbXAgcHJlc2VsZWN0OmdldFNvbWVJbmZvIiwgc3RhdHVzLkZBSUwpOwotCSAgICB9Ci0gCisgICAgICAgIGlmIChpdGVtcyA9PSAwKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk5vIGl0ZW1zIGF2YWlsYWJsZSBiZWxvdyAkMTAwIGZvciB0aGlzIGN1c3RvbWVyLiBlamJTdG9yZSgpIHdhcyBjYWxsZWQgYmVmb3JlIGVqYlNlbGVjdCgpIGFuZCBpdCBtb2RpZmllZCB0aGUgcHJpY2Ugb2YgZWFjaCBpdGVtIHRvICQyMDAiKTsKKyAgICAgICAgc3RhdHVzLmFkZFN0YXR1cygiY21wIHByZXNlbGVjdDpnZXRTb21lSW5mbyIsIHN0YXR1cy5QQVNTKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRm91bmQgIiArIGl0ZW1zICsgIiBpdGVtcyB3aXRoIHByaWNlIGxlc3MgdGhhbiAxMDAuIGVqYlN0b3JlIHdhcyBub3QgY2FsbGVkIGJlZm9yZSBlamJTZWxlY3QuIEhlbmNlIHRoZSBwcmljZSBvZiB0aGUgaXRlbXMgd2FzIG5vdCBtb2RpZmllZCB0byAkMjAwIik7CisgICAgICAgICAgICBzdGF0dXMuYWRkU3RhdHVzKCJjbXAgcHJlc2VsZWN0OmdldFNvbWVJbmZvIiwgc3RhdHVzLkZBSUwpOworICAgICAgICB9CisKICAgICAgICAgICAgIHN0YXR1cy5wcmludFN1bW1hcnkoInByZXNlbGVjdEFwcElEIik7CiAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgwKTsKICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIGV4KSB7Ci0JICAgIHN0YXR1cy5hZGRTdGF0dXMoImNtcCBwcmVzZWxlY3Q6Z2V0U29tZUluZm8iLCBzdGF0dXMuRkFJTCk7CisgICAgICAgIHN0YXR1cy5hZGRTdGF0dXMoImNtcCBwcmVzZWxlY3Q6Z2V0U29tZUluZm8iLCBzdGF0dXMuRkFJTCk7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkNhdWdodCBhbiBleGNlcHRpb24gaW4gbWFpbjogIiArIGV4LnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcHJlc2VsZWN0L2N1c3RvbWVyL2Rlc2NyaXB0b3IvZWpiLWphci1jdXN0b21lci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3ByZXNlbGVjdC9jdXN0b21lci9kZXNjcmlwdG9yL2VqYi1qYXItY3VzdG9tZXIueG1sCmluZGV4IGJmYTAzNWMuLjFiMWE3NGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcHJlc2VsZWN0L2N1c3RvbWVyL2Rlc2NyaXB0b3IvZWpiLWphci1jdXN0b21lci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9wcmVzZWxlY3QvY3VzdG9tZXIvZGVzY3JpcHRvci9lamItamFyLWN1c3RvbWVyLnhtbApAQCAtNDQsNyArNDQsNyBAQAogICAgICAgICA8ZWpiLXJlZi10eXBlPkVudGl0eTwvZWpiLXJlZi10eXBlPgogICAgICAgICA8bG9jYWwtaG9tZT5jb20uc3VuLnMxcGVxZS5lamIuY21wLnByZXNlbGVjdC5lamIuSXRlbUxvY2FsSG9tZTwvbG9jYWwtaG9tZT4KICAgICAgICAgPGxvY2FsPmNvbS5zdW4uczFwZXFlLmVqYi5jbXAucHJlc2VsZWN0LmVqYi5JdGVtTG9jYWw8L2xvY2FsPgotCTxlamItbGluaz5JdGVtPC9lamItbGluaz4KKyAgICA8ZWpiLWxpbms+SXRlbTwvZWpiLWxpbms+CiAgICAgICA8L2VqYi1sb2NhbC1yZWY+CiAgICAgICA8cXVlcnk+CiAgICAgICAgIDxxdWVyeS1tZXRob2Q+CkBAIC01NCw3ICs1NCw3IEBACiAgICAgICAgICAgPC9tZXRob2QtcGFyYW1zPgogICAgICAgICA8L3F1ZXJ5LW1ldGhvZD4KICAgICAgICAgPGVqYi1xbD5TRUxFQ1QgT0JKRUNUKGl0ZW0pIEZST00gSXRlbVNjaGVtYSBpdGVtIFdIRVJFIGl0ZW0ucHJpY2UgJmx0OyAxMDAKLQk8L2VqYi1xbD4KKyAgICA8L2VqYi1xbD4KICAgICAgIDwvcXVlcnk+CiAgICAgPC9lbnRpdHk+CiAgICAgPGVudGl0eT4KQEAgLTEwMCw4ICsxMDAsOCBAQAogICAgICAgICA8bXVsdGlwbGljaXR5Pk1hbnk8L211bHRpcGxpY2l0eT4KICAgICAgICAgPHJlbGF0aW9uc2hpcC1yb2xlLXNvdXJjZT4KICAgICAgICAgICA8ZWpiLW5hbWU+SXRlbTwvZWpiLW5hbWU+Ci0gICAgICAgIDwvcmVsYXRpb25zaGlwLXJvbGUtc291cmNlPiAgICAgICAgCi0gICAgICA8L2VqYi1yZWxhdGlvbnNoaXAtcm9sZT4gCisgICAgICAgIDwvcmVsYXRpb25zaGlwLXJvbGUtc291cmNlPgorICAgICAgPC9lamItcmVsYXRpb25zaGlwLXJvbGU+CiAgICAgPC9lamItcmVsYXRpb24+CiAgIDwvcmVsYXRpb25zaGlwcz4KICAgPGFzc2VtYmx5LWRlc2NyaXB0b3I+CkBAIC0xNjMsNyArMTYzLDcgQEAKICAgICAgICAgPG1ldGhvZC1uYW1lPmNyZWF0ZTwvbWV0aG9kLW5hbWU+CiAgICAgICAgIDxtZXRob2QtcGFyYW1zPgogICAgICAgICAgIDxtZXRob2QtcGFyYW0+amF2YS5sYW5nLlN0cmluZzwvbWV0aG9kLXBhcmFtPgotICAgICAgICAgIDxtZXRob2QtcGFyYW0+amF2YS5sYW5nLlN0cmluZzwvbWV0aG9kLXBhcmFtPiAgICAgICAgCisgICAgICAgICAgPG1ldGhvZC1wYXJhbT5qYXZhLmxhbmcuU3RyaW5nPC9tZXRob2QtcGFyYW0+CiAgICAgICAgIDwvbWV0aG9kLXBhcmFtcz4KICAgICAgIDwvbWV0aG9kPgogICAgICAgPG1ldGhvZD4KQEAgLTI2Nyw3ICsyNjcsNyBAQAogICAgIDwvY29udGFpbmVyLXRyYW5zYWN0aW9uPgogICAgIDxjb250YWluZXItdHJhbnNhY3Rpb24+CiAgICAgICA8bWV0aG9kPgotICAgICAgICA8ZWpiLW5hbWU+SXRlbTwvZWpiLW5hbWU+ICAgIAorICAgICAgICA8ZWpiLW5hbWU+SXRlbTwvZWpiLW5hbWU+CiAgICAgICAgIDxtZXRob2QtbmFtZT4qPC9tZXRob2QtbmFtZT4KICAgICAgIDwvbWV0aG9kPgogICAgICAgPHRyYW5zLWF0dHJpYnV0ZT5SZXF1aXJlZDwvdHJhbnMtYXR0cmlidXRlPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9wcmVzZWxlY3QvY3VzdG9tZXIvZWpiL0N1c3RvbWVyQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9wcmVzZWxlY3QvY3VzdG9tZXIvZWpiL0N1c3RvbWVyQmVhbi5qYXZhCmluZGV4IGZhMzdkNTYuLmI4MTdjNDYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcHJlc2VsZWN0L2N1c3RvbWVyL2VqYi9DdXN0b21lckJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3ByZXNlbGVjdC9jdXN0b21lci9lamIvQ3VzdG9tZXJCZWFuLmphdmEKQEAgLTI5LDEwICsyOSwxMCBAQAogICAgIC8vIEFjY2VzcyBtZXRob2RzIGZvciBwZXJzaXN0ZW50IGZpZWxkcwogICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0SWQoKTsKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRJZChTdHJpbmcgaWQpOwotICAgIAorCiAgICAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXROYW1lKCk7CiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSk7Ci0gIAorCiAgICAgLy8gQWNjZXNzIG1ldGhvZHMgZm9yIHJlbGF0aW9uc2hpcCBmaWVsZHMKICAgICBwdWJsaWMgYWJzdHJhY3QgQ29sbGVjdGlvbiBnZXRJdGVtcygpOwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldEl0ZW1zKENvbGxlY3Rpb24gaXRlbXMpOwpAQCAtNDQsMzkgKzQ0LDM5IEBACiAgICAgLy8gQnVzaW5lc3MgbWV0aG9kcwogICAgIHB1YmxpYyBpbnQgZ2V0SXRlbXNGb3JMZXNzKCkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uIHsKICAgICAgICAgIGludCBjb3VudCA9IDA7Ci0gICAgICAgICBDdXN0b21lckxvY2FsIGN1c3RvbWVyID0gCisgICAgICAgICBDdXN0b21lckxvY2FsIGN1c3RvbWVyID0KICAgICAgICAgICAgICAoQ3VzdG9tZXJMb2NhbCljb250ZXh0LmdldEVKQkxvY2FsT2JqZWN0KCk7Ci0JIHRyeSB7Ci0JICAgSW5pdGlhbENvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCSAgIE9iamVjdCBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlSXRlbSIpOwotCSAgIEl0ZW1Mb2NhbEhvbWUgaXRlbUhvbWUgPSAKLQkgICAgIChJdGVtTG9jYWxIb21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIAorICAgICB0cnkgeworICAgICAgIEluaXRpYWxDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICBPYmplY3Qgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZUl0ZW0iKTsKKyAgICAgICBJdGVtTG9jYWxIb21lIGl0ZW1Ib21lID0KKyAgICAgICAgIChJdGVtTG9jYWxIb21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0ZW1Mb2NhbEhvbWUuY2xhc3MpOwotCSAgIEl0ZW1Mb2NhbCBpdGVtID0gaXRlbUhvbWUuY3JlYXRlKCJEYXJrIENob2NvbGF0ZSIsICIxIiwgMjAuMDApOwotCSAgIGdldEl0ZW1zKCkuYWRkKGl0ZW0pOwotCSAgIAkgICAKLQkgICBpdGVtID0gaXRlbUhvbWUuY3JlYXRlKCJNaWxrIENob2NvbGF0ZSIsICIyIiwgMzAuMDApOwotCSAgIGdldEl0ZW1zKCkuYWRkKGl0ZW0pOworICAgICAgIEl0ZW1Mb2NhbCBpdGVtID0gaXRlbUhvbWUuY3JlYXRlKCJEYXJrIENob2NvbGF0ZSIsICIxIiwgMjAuMDApOworICAgICAgIGdldEl0ZW1zKCkuYWRkKGl0ZW0pOwogCi0JICAgaXRlbSA9IGl0ZW1Ib21lLmNyZWF0ZSgiV2hpdGUgQ2hvY29sYXRlIiwgIjMiLCA0MC4wMCk7Ci0JICAgZ2V0SXRlbXMoKS5hZGQoaXRlbSk7CisgICAgICAgaXRlbSA9IGl0ZW1Ib21lLmNyZWF0ZSgiTWlsayBDaG9jb2xhdGUiLCAiMiIsIDMwLjAwKTsKKyAgICAgICBnZXRJdGVtcygpLmFkZChpdGVtKTsKIAotCSAgIFN5c3RlbS5vdXQucHJpbnRsbigiY2FsbGluZyBlamJTZWxlY3RJdGVtc0xlc3NUaGFuMTAwLi4uIik7Ci0JICAgQ29sbGVjdGlvbiBpdGVtcyA9IGVqYlNlbGVjdEl0ZW1zTGVzc1RoYW4xMDAoY3VzdG9tZXIpOwkgICAKKyAgICAgICBpdGVtID0gaXRlbUhvbWUuY3JlYXRlKCJXaGl0ZSBDaG9jb2xhdGUiLCAiMyIsIDQwLjAwKTsKKyAgICAgICBnZXRJdGVtcygpLmFkZChpdGVtKTsKIAotCSAgIGlmIChpdGVtcyAhPSBudWxsKSB7Ci0JICAgICAgIAotCSAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ZXJhdG9yID0gaXRlbXMuaXRlcmF0b3IoKTsgaXRlcmF0b3IuaGFzTmV4dCgpOykgewotCQkgICBTeXN0ZW0ub3V0LnByaW50bG4oIkl0ZW0ucHJpY2UgPCAxMDAgOiAiICsKLQkJCQkgICAgICAoKEl0ZW1Mb2NhbClpdGVyYXRvci5uZXh0KCkpLmdldElkKCkpOwotCQkgICBjb3VudCsrOwotCSAgICAgICB9Ci0JICAgfQotCSAgIHJldHVybiBjb3VudDsKKyAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNhbGxpbmcgZWpiU2VsZWN0SXRlbXNMZXNzVGhhbjEwMC4uLiIpOworICAgICAgIENvbGxlY3Rpb24gaXRlbXMgPSBlamJTZWxlY3RJdGVtc0xlc3NUaGFuMTAwKGN1c3RvbWVyKTsKIAotCSB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7Ci0JIH0KKyAgICAgICBpZiAoaXRlbXMgIT0gbnVsbCkgeworCisgICAgICAgICAgIGZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSBpdGVtcy5pdGVyYXRvcigpOyBpdGVyYXRvci5oYXNOZXh0KCk7KSB7CisgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSXRlbS5wcmljZSA8IDEwMCA6ICIgKworICAgICAgICAgICAgICAgICAgICAgICgoSXRlbUxvY2FsKWl0ZXJhdG9yLm5leHQoKSkuZ2V0SWQoKSk7CisgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgICAgIH0KKyAgICAgICB9CisgICAgICAgcmV0dXJuIGNvdW50OworCisgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgfQogICAgIH0KIAogICAgIC8vIEVudGl0eUJlYW4gIG1ldGhvZHMKQEAgLTg1LDM0ICs4NSwzNCBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJDdXN0b21lckJlYW4gZWpiQ3JlYXRlIik7CiAgICAgICAgIHNldElkKGlkKTsKICAgICAgICAgc2V0TmFtZShuYW1lKTsKLQlyZXR1cm4gbnVsbDsKKyAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgICAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlBvc3RDcmVhdGUgKFN0cmluZyBpZCwgU3RyaW5nIG5hbWUpIHRocm93cyBDcmVhdGVFeGNlcHRpb24geyB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRFbnRpdHlDb250ZXh0KEVudGl0eUNvbnRleHQgY3R4KSB7CiAgICAgICAgIGNvbnRleHQgPSBjdHg7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgdW5zZXRFbnRpdHlDb250ZXh0KCkgewogICAgICAgICBjb250ZXh0ID0gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIkN1c3RvbWVyQmVhbiBlamJSZW1vdmUiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJMb2FkKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJDdXN0b21lckJlYW4gZWpiTG9hZCIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlN0b3JlKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJDdXN0b21lckJlYW4gZWpiU3RvcmUiKTsKIAogCiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkgeyB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9wcmVzZWxlY3QvY3VzdG9tZXIvZWpiL0N1c3RvbWVySG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9wcmVzZWxlY3QvY3VzdG9tZXIvZWpiL0N1c3RvbWVySG9tZS5qYXZhCmluZGV4IGY5YzZhMTAuLmUzZWUwYTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcHJlc2VsZWN0L2N1c3RvbWVyL2VqYi9DdXN0b21lckhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3ByZXNlbGVjdC9jdXN0b21lci9lamIvQ3VzdG9tZXJIb21lLmphdmEKQEAgLTIxLDkgKzIxLDkgQEAKIGltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiAKIHB1YmxpYyBpbnRlcmZhY2UgQ3VzdG9tZXJIb21lIGV4dGVuZHMgRUpCSG9tZSB7Ci0gICAgCisKICAgICBwdWJsaWMgQ3VzdG9tZXJSZW1vdGUgY3JlYXRlIChTdHJpbmcgaWQsIFN0cmluZyBuYW1lKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uLCBDcmVhdGVFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgQ3VzdG9tZXJSZW1vdGUgZmluZEJ5UHJpbWFyeUtleSAoU3RyaW5nIGlkKQotICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247ICAgICAKKyAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9wcmVzZWxlY3QvY3VzdG9tZXIvZWpiL0N1c3RvbWVyTG9jYWxIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3ByZXNlbGVjdC9jdXN0b21lci9lamIvQ3VzdG9tZXJMb2NhbEhvbWUuamF2YQppbmRleCA1ZDBjMmJiLi5lYjI4ZTkxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3ByZXNlbGVjdC9jdXN0b21lci9lamIvQ3VzdG9tZXJMb2NhbEhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3ByZXNlbGVjdC9jdXN0b21lci9lamIvQ3VzdG9tZXJMb2NhbEhvbWUuamF2YQpAQCAtMjAsOSArMjAsOSBAQAogaW1wb3J0IGpha2FydGEuZWpiLio7CiAKIHB1YmxpYyBpbnRlcmZhY2UgQ3VzdG9tZXJMb2NhbEhvbWUgZXh0ZW5kcyBFSkJMb2NhbEhvbWUgewotICAgIAorCiAgICAgcHVibGljIEN1c3RvbWVyTG9jYWwgY3JlYXRlIChTdHJpbmcgaWQsIFN0cmluZyBuYW1lKSB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljIEN1c3RvbWVyTG9jYWwgZmluZEJ5UHJpbWFyeUtleSAoU3RyaW5nIGlkKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9wcmVzZWxlY3QvY3VzdG9tZXIvZWpiL0l0ZW1CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3ByZXNlbGVjdC9jdXN0b21lci9lamIvSXRlbUJlYW4uamF2YQppbmRleCAzOGUyMjk0Li44OTcyNzExIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3ByZXNlbGVjdC9jdXN0b21lci9lamIvSXRlbUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3ByZXNlbGVjdC9jdXN0b21lci9lamIvSXRlbUJlYW4uamF2YQpAQCAtMjcsMTMgKzI3LDEzIEBACiAgICAgLy8gQWNjZXNzIG1ldGhvZHMgZm9yIHBlcnNpc3RlbnQgZmllbGRzCiAgICAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRJZCgpOwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldElkKFN0cmluZyBpZCk7Ci0gICAgCisKICAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldE5hbWUoKTsKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKTsKIAogICAgIHB1YmxpYyBhYnN0cmFjdCBkb3VibGUgZ2V0UHJpY2UoKTsKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRQcmljZShkb3VibGUgcHJpY2UpOwotICAKKwogCiAgICAgLy8gQnVzaW5lc3MgbWV0aG9kcwogICAgIHB1YmxpYyB2b2lkIG1vZGlmeVByaWNlKGRvdWJsZSBuZXdQcmljZSkgewpAQCAtNDcsMzkgKzQ3LDM5IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIkl0ZW1CZWFuIGVqYkNyZWF0ZSIpOwogICAgICAgICBzZXRJZChpZCk7CiAgICAgICAgIHNldE5hbWUobmFtZSk7Ci0Jc2V0UHJpY2UocHJpY2UpOwotCXJldHVybiBudWxsOworICAgIHNldFByaWNlKHByaWNlKTsKKyAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgICAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlBvc3RDcmVhdGUgKFN0cmluZyBpZCwgU3RyaW5nIG5hbWUsIGRvdWJsZSBwcmljZSkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7IH0KIAogICAgIHB1YmxpYyB2b2lkIHNldEVudGl0eUNvbnRleHQoRW50aXR5Q29udGV4dCBjdHgpIHsKICAgICAgICAgY29udGV4dCA9IGN0eDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCB1bnNldEVudGl0eUNvbnRleHQoKSB7CiAgICAgICAgIGNvbnRleHQgPSBudWxsOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiSXRlbUJlYW4gZWpiUmVtb3ZlIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiSXRlbUJlYW4gZWpiTG9hZCIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlN0b3JlKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJJdGVtQmVhbiBlamJTdG9yZSIpOwotCUl0ZW1Mb2NhbCBpdGVtID0gKEl0ZW1Mb2NhbCljb250ZXh0LmdldEVKQkxvY2FsT2JqZWN0KCk7Ci0JCi0JU3lzdGVtLm91dC5wcmludGxuKCJJdGVtIHByaWNlIGxlc3MgdGhhbiAkMTAwIDogIiArIAotCQkJICAgaXRlbS5nZXRJZCgpKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIk1vZGlmeWluZyBpdHMgcHJpY2UgdG8gJDIwMC4uLiIpOwotCWl0ZW0ubW9kaWZ5UHJpY2UoMjAwLjAwKTsKKyAgICBJdGVtTG9jYWwgaXRlbSA9IChJdGVtTG9jYWwpY29udGV4dC5nZXRFSkJMb2NhbE9iamVjdCgpOworCisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJdGVtIHByaWNlIGxlc3MgdGhhbiAkMTAwIDogIiArCisgICAgICAgICAgICAgICBpdGVtLmdldElkKCkpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTW9kaWZ5aW5nIGl0cyBwcmljZSB0byAkMjAwLi4uIik7CisgICAgaXRlbS5tb2RpZnlQcmljZSgyMDAuMDApOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHsgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7IH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcHJlc2VsZWN0L2N1c3RvbWVyL2VqYi9JdGVtSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9wcmVzZWxlY3QvY3VzdG9tZXIvZWpiL0l0ZW1Ib21lLmphdmEKaW5kZXggMTA2MWRiNi4uNDYxOTk3NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9wcmVzZWxlY3QvY3VzdG9tZXIvZWpiL0l0ZW1Ib21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9wcmVzZWxlY3QvY3VzdG9tZXIvZWpiL0l0ZW1Ib21lLmphdmEKQEAgLTIxLDkgKzIxLDkgQEAKIGltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiAKIHB1YmxpYyBpbnRlcmZhY2UgSXRlbUhvbWUgZXh0ZW5kcyBFSkJIb21lIHsKLSAgICAKKwogICAgIHB1YmxpYyBJdGVtUmVtb3RlIGNyZWF0ZSAoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgZG91YmxlIHByaWNlKSB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgSXRlbVJlbW90ZSBmaW5kQnlQcmltYXJ5S2V5IChTdHJpbmcgaWQpCi0gICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsgICAgIAorICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3ByZXNlbGVjdC9jdXN0b21lci9lamIvSXRlbUxvY2FsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3ByZXNlbGVjdC9jdXN0b21lci9lamIvSXRlbUxvY2FsLmphdmEKaW5kZXggYmVlY2QwOS4uNzkyMTAyYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9wcmVzZWxlY3QvY3VzdG9tZXIvZWpiL0l0ZW1Mb2NhbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcHJlc2VsZWN0L2N1c3RvbWVyL2VqYi9JdGVtTG9jYWwuamF2YQpAQCAtMjIsNSArMjIsNSBAQAogcHVibGljIGludGVyZmFjZSBJdGVtTG9jYWwgZXh0ZW5kcyBFSkJMb2NhbE9iamVjdCwgamF2YS5pby5TZXJpYWxpemFibGUgewogICAgIHB1YmxpYyBTdHJpbmcgZ2V0SWQoKTsKICAgICBwdWJsaWMgZG91YmxlIGdldFByaWNlKCk7Ci0gICAgcHVibGljIHZvaWQgbW9kaWZ5UHJpY2UoZG91YmxlIG5ld1ByaWNlKTsgICAgCisgICAgcHVibGljIHZvaWQgbW9kaWZ5UHJpY2UoZG91YmxlIG5ld1ByaWNlKTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcHJlc2VsZWN0L2N1c3RvbWVyL2VqYi9JdGVtTG9jYWxIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3ByZXNlbGVjdC9jdXN0b21lci9lamIvSXRlbUxvY2FsSG9tZS5qYXZhCmluZGV4IDA2YzU3Y2QuLjE5M2E4NTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcHJlc2VsZWN0L2N1c3RvbWVyL2VqYi9JdGVtTG9jYWxIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9wcmVzZWxlY3QvY3VzdG9tZXIvZWpiL0l0ZW1Mb2NhbEhvbWUuamF2YQpAQCAtMjEsOSArMjEsOSBAQAogCiAKIHB1YmxpYyBpbnRlcmZhY2UgSXRlbUxvY2FsSG9tZSBleHRlbmRzIEVKQkxvY2FsSG9tZSB7Ci0gICAgCisKICAgICBwdWJsaWMgSXRlbUxvY2FsIGNyZWF0ZSAoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgZG91YmxlIHByaWNlKSB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljIEl0ZW1Mb2NhbCBmaW5kQnlQcmltYXJ5S2V5IChTdHJpbmcgaWQpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3ByZXNlbGVjdC9jdXN0b21lci9lamIvSXRlbVJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9wcmVzZWxlY3QvY3VzdG9tZXIvZWpiL0l0ZW1SZW1vdGUuamF2YQppbmRleCA0NjU2ZTA1Li4yNmYyZDJmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3ByZXNlbGVjdC9jdXN0b21lci9lamIvSXRlbVJlbW90ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcHJlc2VsZWN0L2N1c3RvbWVyL2VqYi9JdGVtUmVtb3RlLmphdmEKQEAgLTIxLDUgKzIxLDUgQEAKIGltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiAKIHB1YmxpYyBpbnRlcmZhY2UgSXRlbVJlbW90ZSBleHRlbmRzIEVKQk9iamVjdCB7Ci0gICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3ByZXNlbGVjdC9jdXN0b21lci9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3ByZXNlbGVjdC9jdXN0b21lci9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggNjJlNjE1YS4uNWJjMDc5YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9wcmVzZWxlY3QvY3VzdG9tZXIvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcHJlc2VsZWN0L2N1c3RvbWVyL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSwyMCArMSwyMCBAQAogRFJPUCBUQUJMRSBDdXN0b21lcjsKIERST1AgVEFCTEUgSXRlbTsKIAotQ1JFQVRFIFRBQkxFIEN1c3RvbWVyIAorQ1JFQVRFIFRBQkxFIEN1c3RvbWVyCiAoCi0JQ1VTVE9NRVJfSUQgVkFSQ0hBUigyNTUpIFBSSU1BUlkgS0VZLCAKLQluYW1lIFZBUkNIQVIoMjU1KSAgCisgICAgQ1VTVE9NRVJfSUQgVkFSQ0hBUigyNTUpIFBSSU1BUlkgS0VZLAorICAgIG5hbWUgVkFSQ0hBUigyNTUpCiApOwogCiAKLUNSRUFURSBUQUJMRSBJdGVtIAorQ1JFQVRFIFRBQkxFIEl0ZW0KICgKLQlpdGVtX0lkIFZBUkNIQVIoMjU1KSBQUklNQVJZIEtFWSwgCi0JbmFtZSBWQVJDSEFSKDI1NSkgLAotCXByaWNlIERPVUJMRSBQUkVDSVNJT04gTk9UIE5VTEwgLAotCUNVU1RPTUVSX0lEIFZBUkNIQVIoMjU1KSAsCi0JRk9SRUlHTiBLRVkgKENVU1RPTUVSX0lEKSAgIFJFRkVSRU5DRVMgQ3VzdG9tZXIgKENVU1RPTUVSX0lEKQorICAgIGl0ZW1fSWQgVkFSQ0hBUigyNTUpIFBSSU1BUlkgS0VZLAorICAgIG5hbWUgVkFSQ0hBUigyNTUpICwKKyAgICBwcmljZSBET1VCTEUgUFJFQ0lTSU9OIE5PVCBOVUxMICwKKyAgICBDVVNUT01FUl9JRCBWQVJDSEFSKDI1NSkgLAorICAgIEZPUkVJR04gS0VZIChDVVNUT01FUl9JRCkgICBSRUZFUkVOQ0VTIEN1c3RvbWVyIChDVVNUT01FUl9JRCkKICk7CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9yZWFkb25seS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9yZWFkb25seS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDg3Yzg4OWIuLjk5NWNhNzIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcmVhZG9ubHkvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3JlYWRvbmx5L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIwICsxNSwyMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWNtcC1yZWFkb25seSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1jbXAtbWFwcGluZ3MueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tY21wLW1hcHBpbmdzLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImRic2NoZW1hIiB2YWx1ZT0ic3FsL3JlYWRvbmx5LmRic2NoZW1hIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3JlYWRvbmx5L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcmVhZG9ubHkvYnVpbGQueG1sCmluZGV4IGYwOGQwYTAuLjQ4ZjcwNTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcmVhZG9ubHkvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcmVhZG9ubHkvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OCwyNSArNDgsMjUgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qU3R1ZGVudCouY2xhc3MsKiovKi5kYnNjaGVtYSIgLz4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi9TdHVkZW50LmNsYXNzLCoqLypIb21lKi5jbGFzcywqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtZWpiLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+ICAgICAgICAgICAKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4gICAgICAgICAgIAorICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIApAQCAtNzUsMTAgKzc1LDEwIEBACiAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIxMDAgMTAgMSAxMDAiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVuc2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3JlYWRvbmx5L2NsaWVudC9SZWFkT25seUNsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9yZWFkb25seS9jbGllbnQvUmVhZE9ubHlDbGllbnQuamF2YQppbmRleCAwNTQ3MjE0Li40YjFjMjRmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3JlYWRvbmx5L2NsaWVudC9SZWFkT25seUNsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcmVhZG9ubHkvY2xpZW50L1JlYWRPbmx5Q2xpZW50LmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKIGltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiAKIC8qKgotICogQSBzaW1wbGUgamF2YSBjbGllbnQgd2lsbDogCisgKiBBIHNpbXBsZSBqYXZhIGNsaWVudCB3aWxsOgogICogPHVsPgogICogPGxpPkxvY2F0ZXMgdGhlIGhvbWUgaW50ZXJmYWNlIG9mIHRoZSBlbnRlcnByaXNlIGJlYW4KICAqIDxsaT5HZXRzIGEgcmVmZXJlbmNlIHRvIHRoZSByZW1vdGUgaW50ZXJmYWNlCkBAIC00NSw5ICs0NSw5IEBACiAgICAgcHJpdmF0ZSBpbnQgbnVtUEtzXyA9IDE7CiAgICAgcHJpdmF0ZSBsb25nIHNsZWVwVGltZUluTWlsbGlzXyA9IDEwMDsKIAotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsgCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCi0gICAgICAgIFJlYWRPbmx5Q2xpZW50IGNsaWVudCA9IG5ldyBSZWFkT25seUNsaWVudCgpOyAKKyAgICAgICAgUmVhZE9ubHlDbGllbnQgY2xpZW50ID0gbmV3IFJlYWRPbmx5Q2xpZW50KCk7CiAKICAgICAgICAgaWYoIGFyZ3MubGVuZ3RoID09IDQgKSB7CiAKQEAgLTU2LDIyICs1NiwyMiBAQAogICAgICAgICAgICAgaW50IG51bVBLcyA9IEludGVnZXIucGFyc2VJbnQoYXJnc1syXSk7CiAgICAgICAgICAgICBsb25nIHNsZWVwVGltZUluTWlsbGlzID0gTG9uZy5wYXJzZUxvbmcoYXJnc1szXSk7CiAgICAgICAgICAgICBjbGllbnQucnVuVGhyZWFkVGVzdChudW1JdGVyYXRpb25zLCBudW1UaHJlYWRzLCBudW1QS3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGVlcFRpbWVJbk1pbGxpcyk7ICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGVlcFRpbWVJbk1pbGxpcyk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjbGllbnQucnVuVGVzdENsaWVudCgpOyAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2xpZW50LnJ1blRlc3RDbGllbnQoKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIHJ1biB0aGUgdGVzdHMKLSAgICAgICAgCisKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBydW5UZXN0Q2xpZW50KCkgeyAgICAgICAKKyAgICBwdWJsaWMgdm9pZCBydW5UZXN0Q2xpZW50KCkgewogCiAgICAgICAgIHRyeXsKICAgICAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlRlc3RpbmcgQ21wIENNUFJlYWRPbmx5Q2xpZW50IGFwcC4iKTsKICAgICAgICAgICAgIHRlc3QxMSgpOwogCi0gICAgICAgICAgICB0ZXN0MDEoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICB0ZXN0MDEoKTsKICAgICAgICAgICAgIHRlc3QwNSgpOwogCiAgICAgICAgICAgICB0ZXN0MTIoKTsKQEAgLTgzLDcgKzgzLDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBydW5UaHJlYWRUZXN0KGludCBudW1JdGVyYXRpb25zLCBpbnQgbnVtVGhyZWFkcywgaW50IG51bVBLcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc2xlZXBUaW1lSW5NaWxsaXMpIHsgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNsZWVwVGltZUluTWlsbGlzKSB7CiAKICAgICAgICAgbnVtSXRlcmF0aW9uc18gPSBudW1JdGVyYXRpb25zOwogICAgICAgICBudW1UaHJlYWRzXyA9IG51bVRocmVhZHM7CkBAIC05MSw3ICs5MSw3IEBACiAgICAgICAgIHNsZWVwVGltZUluTWlsbGlzXyA9IHNsZWVwVGltZUluTWlsbGlzOwogCiAgICAgICAgIHRyeXsKLSAgICAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIkNtcCBDTVBSZWFkT25seUNsaWVudCB0aHJlYWQgdGVzdCIpOyAgICAgICAgICAgIAorICAgICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiQ21wIENNUFJlYWRPbmx5Q2xpZW50IHRocmVhZCB0ZXN0Iik7CiAgICAgICAgICAgICB0ZXN0MTIoKTsKICAgICAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJDTVBSZWFkT25seUNsaWVudCIpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTEwNCw4ICsxMDQsOCBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBPYmplY3Qgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZVN0dWRlbnQiKTsKLSAgICAgICAgICAgIFN0dWRlbnRIb21lIHNIb21lID0gCi0gICAgICAgICAgICAgICAgKFN0dWRlbnRIb21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCAKKyAgICAgICAgICAgIFN0dWRlbnRIb21lIHNIb21lID0KKyAgICAgICAgICAgICAgICAoU3R1ZGVudEhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3R1ZGVudEhvbWUuY2xhc3MpOwogCiAgICAgICAgICAgICB0cnkgewpAQCAtMTE4LDcgKzExOCw3IEBACiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIkNNUFJlYWRPbmx5Q2xpZW50IFN0dWRlbnQgICAiLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiQ2F1Z2h0IGFuIGV4Y2VwdGlvbiEiKTsKICAgICAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgICAgICAgICAvL0V4cGVjdGVkIAorICAgICAgICAgICAgICAgIC8vRXhwZWN0ZWQKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHRoKSB7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkNhdWdodCBhbiB1bmV4cGVjdGVkIGV4Y2VwdGlvbiEiKTsKQEAgLTEzMSw4ICsxMzEsOCBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBPYmplY3Qgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZVN0dWRlbnQiKTsKLSAgICAgICAgICAgIFN0dWRlbnRIb21lIHNIb21lID0gCi0gICAgICAgICAgICAgICAgKFN0dWRlbnRIb21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCAKKyAgICAgICAgICAgIFN0dWRlbnRIb21lIHNIb21lID0KKyAgICAgICAgICAgICAgICAoU3R1ZGVudEhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3R1ZGVudEhvbWUuY2xhc3MpOwogCiAgICAgICAgICAgICB0cnkgewpAQCAtMTQ1LDcgKzE0NSw3IEBACiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIkNNUFJlYWRPbmx5Q2xpZW50IFN0dWRlbnQgICAiLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiQ2F1Z2h0IGFuIGV4Y2VwdGlvbiEiKTsKICAgICAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgICAgICAgICAvL0V4cGVjdGVkIAorICAgICAgICAgICAgICAgIC8vRXhwZWN0ZWQKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHRoKSB7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkNhdWdodCBhbiB1bmV4cGVjdGVkIGV4Y2VwdGlvbiEiKTsKQEAgLTE3NiwyMCArMTc2LDIwIEBACiAgICAgICAgICAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlU3R1ZGVudCIpOwogCi0gICAgICAgICAgICBTdHVkZW50SG9tZSByZWFkT25seVN0dWRlbnRIb21lID0gCi0gICAgICAgICAgICAgICAgKFN0dWRlbnRIb21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCAKKyAgICAgICAgICAgIFN0dWRlbnRIb21lIHJlYWRPbmx5U3R1ZGVudEhvbWUgPQorICAgICAgICAgICAgICAgIChTdHVkZW50SG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHVkZW50SG9tZS5jbGFzcyk7CiAgICAgICAgICAgICBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvTXV0YWJsZVN0dWRlbnQiKTsKIAotICAgICAgICAgICAgU3R1ZGVudEhvbWUgbXV0YWJsZVN0dWRlbnRIb21lID0gCi0gICAgICAgICAgICAgICAgKFN0dWRlbnRIb21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCAKKyAgICAgICAgICAgIFN0dWRlbnRIb21lIG11dGFibGVTdHVkZW50SG9tZSA9CisgICAgICAgICAgICAgICAgKFN0dWRlbnRIb21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0dWRlbnRIb21lLmNsYXNzKTsKIAogICAgICAgICAgICAgU3R1ZGVudCBuZXdTdHVkZW50ID0gbXV0YWJsZVN0dWRlbnRIb21lLmNyZWF0ZSgiOTk5IiwgIkpvZSBTY2htbyIpOwogICAgICAgICAgICAgU3R1ZGVudCBuZXdTdHVkZW50MiA9IG11dGFibGVTdHVkZW50SG9tZS5jcmVhdGUoIjk5OCIsICJKaWxsIFNjaG1vIik7CiAgICAgICAgICAgICByZWFkT25seVN0dWRlbnRIb21lLnRlc3RGaW5kKCI5OTkiKTsKICAgICAgICAgICAgIHJlYWRPbmx5U3R1ZGVudEhvbWUudGVzdEZpbmQoIjk5OCIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHJlYWRPbmx5U3R1ZGVudEhvbWUudGVzdExvY2FsRmluZCgiOTk5Iik7CiAgICAgICAgICAgICByZWFkT25seVN0dWRlbnRIb21lLnRlc3RMb2NhbEZpbmQoIjk5OCIpOwogCkBAIC0xOTgsOSArMTk4LDkgQEAKICAgICAgICAgICAgIHJlYWRPbmx5U3R1ZGVudEhvbWUuZmluZEJhcigiOTk5Iik7CiAgICAgICAgICAgICByZWFkT25seVN0dWRlbnRIb21lLmZpbmRCYXIoIjk5OCIpOwogCi0gICAgICAgICAgICBTdHVkZW50IHJlYWRPbmx5U3R1ZGVudCA9IAorICAgICAgICAgICAgU3R1ZGVudCByZWFkT25seVN0dWRlbnQgPQogICAgICAgICAgICAgICAgIHJlYWRPbmx5U3R1ZGVudEhvbWUuZmluZEJ5UHJpbWFyeUtleSgiOTk5Iik7Ci0gICAgICAgICAgICBTdHVkZW50IHJlYWRPbmx5U3R1ZGVudDIgPSAKKyAgICAgICAgICAgIFN0dWRlbnQgcmVhZE9ubHlTdHVkZW50MiA9CiAgICAgICAgICAgICAgICAgcmVhZE9ubHlTdHVkZW50SG9tZS5maW5kQnlQcmltYXJ5S2V5KCI5OTgiKTsKIAogICAgICAgICAgICAgcmVhZE9ubHlTdHVkZW50SG9tZS5maW5kQnlSZW1vdGVTdHVkZW50KHJlYWRPbmx5U3R1ZGVudCk7CkBAIC0yNjIsOSArMjYyLDkgQEAKICAgICAgICAgICAgIC8vIHRvIGNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgYmVhbiBhbmQgY2FsbCBlamJMb2FkIG9uIGl0LgogICAgICAgICAgICAgLy8gU28sIG9ubHkgdXNlIG5hbWUxIGFuZCBuYW1lMiB0byBkZWNpZGUgaWYgdGVzdCBwYXNzZWQuCiAgICAgICAgICAgICBpZiAobmFtZTEuZXF1YWxzKHJlYWRPbmx5TmFtZTEpICYmIG5hbWUyLmVxdWFscyhyZWFkT25seU5hbWUyKSAmJgotICAgICAgICAgICAgICAgIG5hbWUxLmVxdWFscyhyZWFkT25seU5hbWUxVHgpICYmIAorICAgICAgICAgICAgICAgIG5hbWUxLmVxdWFscyhyZWFkT25seU5hbWUxVHgpICYmCiAgICAgICAgICAgICAgICAgbmFtZTIuZXF1YWxzKHJlYWRPbmx5TmFtZTJUeCkpIHsKLSAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiQ01QUmVhZE9ubHlDbGllbnQgUmVhZE1vc3RseSAgIiwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIkNNUFJlYWRPbmx5Q2xpZW50IFJlYWRNb3N0bHkgICIsIHN0YXQuRkFJTCk7CkBAIC0yNzYsNyArMjc2LDcgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJDTVBSZWFkT25seUNsaWVudCBSZWFkTW9zdGx5ICAiLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJDYXVnaHQgYW4gdW5leHBlY3RlZCBleGNlcHRpb24hIik7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgfSAKKyAgICAgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCB0ZXN0MTIoKSB7CkBAIC0yODUsNyArMjg1LDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTnVtIEl0ZXJhdGlvbnMgPSAiICsgbnVtSXRlcmF0aW9uc18pOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJOdW0gVGhyZWFkcyA9ICIgKyBudW1UaHJlYWRzXyk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk51bSBQS3MgPSAiICsgbnVtUEtzXyk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNsZWVwIHRpbWUgaW4gbWlsbGlzZWNvbmRzID0gIiArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTbGVlcCB0aW1lIGluIG1pbGxpc2Vjb25kcyA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsZWVwVGltZUluTWlsbGlzXyk7CiAKICAgICAgICAgICAgIGludCBudW1Xcml0ZXJJdGVyYXRpb25zID0gbnVtSXRlcmF0aW9uc18gLyAxMDA7CkBAIC0yOTMsMzAgKzI5MywzMCBAQAogCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk51bSB3cml0ZXIgaXRlcmF0aW9ucyA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVdyaXRlckl0ZXJhdGlvbnMpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcml0ZXIgc2xlZXAgdGltZSBpbiBtaWxsaXNlY29uZHMgPSAiICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyaXRlciBzbGVlcCB0aW1lIGluIG1pbGxpc2Vjb25kcyA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlclNsZWVwVGltZUluTWlsbGlzKTsKIAogICAgICAgICAgICAgQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBPYmplY3Qgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZVN0dWRlbnQiKTsKIAotICAgICAgICAgICAgU3R1ZGVudEhvbWUgcmVhZE9ubHlTdHVkZW50SG9tZSA9IAotICAgICAgICAgICAgICAgIChTdHVkZW50SG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwgCisgICAgICAgICAgICBTdHVkZW50SG9tZSByZWFkT25seVN0dWRlbnRIb21lID0KKyAgICAgICAgICAgICAgICAoU3R1ZGVudEhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3R1ZGVudEhvbWUuY2xhc3MpOwogICAgICAgICAgICAgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL011dGFibGVTdHVkZW50Iik7CiAKLSAgICAgICAgICAgIFN0dWRlbnRIb21lIG11dGFibGVTdHVkZW50SG9tZSA9IAotICAgICAgICAgICAgICAgIChTdHVkZW50SG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwgCisgICAgICAgICAgICBTdHVkZW50SG9tZSBtdXRhYmxlU3R1ZGVudEhvbWUgPQorICAgICAgICAgICAgICAgIChTdHVkZW50SG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHVkZW50SG9tZS5jbGFzcyk7Ci0gICAgICAgICAgCisKICAgICAgICAgICAgIFN0dWRlbnRbXSBuZXdTdHVkZW50cyA9IG5ldyBTdHVkZW50W251bVBLc19dOwogICAgICAgICAgICAgU3R1ZGVudFtdIHJlYWRPbmx5U3R1ZGVudHMgPSBuZXcgU3R1ZGVudFtudW1QS3NfXTsKICAgICAgICAgICAgIFRocmVhZFtdIHJlYWRlcnMgPSBuZXcgVGhyZWFkW251bVRocmVhZHNfICogbnVtUEtzX107CiAgICAgICAgICAgICBUaHJlYWRbXSB3cml0ZXJzID0gbmV3IFRocmVhZFtudW1QS3NfXTsKIAogICAgICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bVBLc187IGkrKykgewotICAgICAgICAgICAgICAgIG5ld1N0dWRlbnRzW2ldID0gCisgICAgICAgICAgICAgICAgbmV3U3R1ZGVudHNbaV0gPQogICAgICAgICAgICAgICAgICAgICBtdXRhYmxlU3R1ZGVudEhvbWUuY3JlYXRlKCJSZWFkZXJUaHJlYWQiICsgaSwgIkFCQyIgKyBpKTsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0aW5nIHN0dWRlbnQgIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRpbmcgc3R1ZGVudCAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3U3R1ZGVudHNbaV0uZ2V0UHJpbWFyeUtleSgpKTsKICAgICAgICAgICAgIH0KIApAQCAtMzI0LDkgKzMyNCw5IEBACiAgICAgICAgICAgICByZWFkT25seVN0dWRlbnRIb21lLmZpbmRGb28oKTsKIAogICAgICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bVBLc187IGkrKykgewotICAgICAgICAgICAgICAgIHJlYWRPbmx5U3R1ZGVudHNbaV0gPSAKKyAgICAgICAgICAgICAgICByZWFkT25seVN0dWRlbnRzW2ldID0KICAgICAgICAgICAgICAgICAgICAgcmVhZE9ubHlTdHVkZW50SG9tZS5maW5kQnlQcmltYXJ5S2V5KCJSZWFkZXJUaHJlYWQiICsgaSk7Ci0gICAgICAgICAgICAgICAgd3JpdGVyc1tpXSA9IG5ldyBXcml0ZXJUaHJlYWQobmV3U3R1ZGVudHNbaV0sIAorICAgICAgICAgICAgICAgIHdyaXRlcnNbaV0gPSBuZXcgV3JpdGVyVGhyZWFkKG5ld1N0dWRlbnRzW2ldLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVdyaXRlckl0ZXJhdGlvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyU2xlZXBUaW1lSW5NaWxsaXMpOwogICAgICAgICAgICAgICAgIGZvcihpbnQgaiA9IDA7IGogPCBudW1UaHJlYWRzXzsgaisrKSB7CkBAIC0zMzQsMjEgKzMzNCwyMSBAQAogICAgICAgICAgICAgICAgICAgICBpbnQgdGhyZWFkSW5kZXggPSBpKm51bVRocmVhZHNfICsgajsKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaHJlYWQgaW5kZXggPSAiICsgdGhyZWFkSW5kZXgpOwogICAgICAgICAgICAgICAgICAgICByZWFkZXJzW3RocmVhZEluZGV4XSA9IG5ldyBSZWFkZXJUaHJlYWQKLSAgICAgICAgICAgICAgICAgICAgICAgIChyZWFkT25seVN0dWRlbnRzW2ldLCBudW1JdGVyYXRpb25zXywgCisgICAgICAgICAgICAgICAgICAgICAgICAocmVhZE9ubHlTdHVkZW50c1tpXSwgbnVtSXRlcmF0aW9uc18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2xlZXBUaW1lSW5NaWxsaXNfKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IHJlYWRlcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXJ0aW5nIHJlYWRlciB0aHJlYWQgIiArIGkpOwogICAgICAgICAgICAgICAgIHJlYWRlcnNbaV0uc3RhcnQoKTsKLSAgICAgICAgICAgIH0gICAgCi0gICAgICAgICAgICAgICAgCisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCB3cml0ZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGFydGluZyB3cml0ZXIgdGhyZWFkICIgKyBpKTsKICAgICAgICAgICAgICAgICB3cml0ZXJzW2ldLnN0YXJ0KCk7Ci0gICAgICAgICAgICB9ICAgICAKLSAgICAgICAgICAgIAorICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkpvaW5pbmcgb24gIiArIHJlYWRlcnMubGVuZ3RoICsgIiByZWFkZXJzIik7CiAgICAgICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgcmVhZGVycy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgIHJlYWRlcnNbaV0uam9pbigpOwpAQCAtMzU3LDggKzM1Nyw4IEBACiAgICAgICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgd3JpdGVycy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgIHdyaXRlcnNbaV0uam9pbigpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgIAorCisKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJDTVBSZWFkT25seUNsaWVudCBSZWFkZXJUaHJlYWRzICAiLCBzdGF0LlBBU1MpOwogCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlbW92aW5nIGFsbCBzdHVkZW50cyIpOwpAQCAtMzcwLDI0ICszNzAsMjQgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJDTVBSZWFkT25seUNsaWVudCBSZWFkZXJUaHJlYWRzICAiLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJDYXVnaHQgYW4gdW5leHBlY3RlZCBleGNlcHRpb24hIik7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgfSAKKyAgICAgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgY2xhc3MgUmVhZGVyVGhyZWFkIGV4dGVuZHMgVGhyZWFkIHsKIAotICAgICAgICBTdHVkZW50IHJlYWRPbmx5U3R1ZGVudF87ICAgICAgICAgICAgICAKKyAgICAgICAgU3R1ZGVudCByZWFkT25seVN0dWRlbnRfOwogICAgICAgICBpbnQgbnVtUmVhZHNfOwogICAgICAgICBsb25nIHNsZWVwVGltZUluTWlsbGlzXzsKLSAgICAgICAgU3RyaW5nIHN0dWRlbnRQS187ICAgICAgICAKKyAgICAgICAgU3RyaW5nIHN0dWRlbnRQS187CiAKLSAgICAgICAgUmVhZGVyVGhyZWFkKFN0dWRlbnQgcmVhZE9ubHlTdHVkZW50LCBpbnQgbnVtUmVhZHMsIAorICAgICAgICBSZWFkZXJUaHJlYWQoU3R1ZGVudCByZWFkT25seVN0dWRlbnQsIGludCBudW1SZWFkcywKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc2xlZXBUaW1lSW5NaWxsaXMpIHsKLSAgICAgICAgICAgIHJlYWRPbmx5U3R1ZGVudF8gPSByZWFkT25seVN0dWRlbnQ7ICAgICAgICAgICAKKyAgICAgICAgICAgIHJlYWRPbmx5U3R1ZGVudF8gPSByZWFkT25seVN0dWRlbnQ7CiAgICAgICAgICAgICBudW1SZWFkc18gPSBudW1SZWFkczsKICAgICAgICAgICAgIHNsZWVwVGltZUluTWlsbGlzXyA9IHNsZWVwVGltZUluTWlsbGlzOwogICAgICAgICB9CiAKLSAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CiAgICAgICAgICAgICBmb3IoIGludCBpID0gMDsgaSA8IG51bVJlYWRzXzsgaSsrKSB7CiAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgaWYoIGkgPT0gMCApIHsKQEAgLTQwNywyMCArNDA3LDIwIEBACiAKICAgICBwcml2YXRlIGNsYXNzIFdyaXRlclRocmVhZCBleHRlbmRzIFRocmVhZCB7CiAKLSAgICAgICAgU3R1ZGVudCBtdXRhYmxlU3R1ZGVudF87ICAgICAgICAgICAgICAKKyAgICAgICAgU3R1ZGVudCBtdXRhYmxlU3R1ZGVudF87CiAgICAgICAgIGludCBudW1Xcml0ZXNfOwogICAgICAgICBsb25nIHNsZWVwVGltZUluTWlsbGlzXzsKICAgICAgICAgU3RyaW5nIHN0dWRlbnRQS187CiAKLSAgICAgICAgV3JpdGVyVGhyZWFkKFN0dWRlbnQgbXV0YWJsZVN0dWRlbnQsIGludCBudW1Xcml0ZXMsIAorICAgICAgICBXcml0ZXJUaHJlYWQoU3R1ZGVudCBtdXRhYmxlU3R1ZGVudCwgaW50IG51bVdyaXRlcywKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc2xlZXBUaW1lSW5NaWxsaXMpIHsKLSAgICAgICAgICAgIG11dGFibGVTdHVkZW50XyA9IG11dGFibGVTdHVkZW50OyAgICAgICAgICAgCisgICAgICAgICAgICBtdXRhYmxlU3R1ZGVudF8gPSBtdXRhYmxlU3R1ZGVudDsKICAgICAgICAgICAgIG51bVdyaXRlc18gPSBudW1Xcml0ZXM7CiAgICAgICAgICAgICBzbGVlcFRpbWVJbk1pbGxpc18gPSBzbGVlcFRpbWVJbk1pbGxpczsKICAgICAgICAgfQogCi0gICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciggaW50IGkgPSAwOyBpIDwgbnVtV3JpdGVzXzsgaSsrKSB7ICAgICAgICAgICAgICAgIAorICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICBmb3IoIGludCBpID0gMDsgaSA8IG51bVdyaXRlc187IGkrKykgewogICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgIGlmKCBpID09IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdHVkZW50UEtfID0gKFN0cmluZykgbXV0YWJsZVN0dWRlbnRfLmdldFByaW1hcnlLZXkoKTsKQEAgLTQzOSw0ICs0MzksNCBAQAogCiAgICAgfQogCi19IAorfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9yZWFkb25seS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9yZWFkb25seS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IDk3OTM2MTguLmI0YThkNDUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcmVhZG9ubHkvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3JlYWRvbmx5L2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICAgIDxzZWN1cml0eS1pZGVudGl0eT4KICAgICAgICAgPGRlc2NyaXB0aW9uPjwvZGVzY3JpcHRpb24+CiAgICAgICAgIDx1c2UtY2FsbGVyLWlkZW50aXR5PjwvdXNlLWNhbGxlci1pZGVudGl0eT4KLSAgICAgIDwvc2VjdXJpdHktaWRlbnRpdHk+ICAgICAKKyAgICAgIDwvc2VjdXJpdHktaWRlbnRpdHk+CiAgICAgICA8cXVlcnk+CiAgICAgICAgIDxkZXNjcmlwdGlvbj48L2Rlc2NyaXB0aW9uPgogICAgICAgICA8cXVlcnktbWV0aG9kPgpAQCAtMTA0LDcgKzEwNCw3IEBACiAgICAgICA8Y21wLWZpZWxkPgogICAgICAgICA8ZGVzY3JpcHRpb24+bm8gZGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgogICAgICAgICA8ZmllbGQtbmFtZT5uYW1lPC9maWVsZC1uYW1lPgotICAgICAgPC9jbXAtZmllbGQ+ICAgCisgICAgICA8L2NtcC1maWVsZD4KICAgICAgIDxwcmlta2V5LWZpZWxkPnN0dWRlbnRJZDwvcHJpbWtleS1maWVsZD4KICAgICAgIDxlamItcmVmPgogICAgICAgICA8ZWpiLXJlZi1uYW1lPmVqYi9SZWFkT25seVN0dWRlbnQ8L2VqYi1yZWYtbmFtZT4KQEAgLTExNSw3ICsxMTUsNyBAQAogICAgICAgPHNlY3VyaXR5LWlkZW50aXR5PgogICAgICAgICA8ZGVzY3JpcHRpb24+PC9kZXNjcmlwdGlvbj4KICAgICAgICAgPHVzZS1jYWxsZXItaWRlbnRpdHk+PC91c2UtY2FsbGVyLWlkZW50aXR5PgotICAgICAgPC9zZWN1cml0eS1pZGVudGl0eT4gICAgIAorICAgICAgPC9zZWN1cml0eS1pZGVudGl0eT4KICAgICAgIDxxdWVyeT4KICAgICAgICAgPGRlc2NyaXB0aW9uPjwvZGVzY3JpcHRpb24+CiAgICAgICAgIDxxdWVyeS1tZXRob2Q+CkBAIC0xNjEsMTQgKzE2MSwxNCBAQAogICAgICAgPHVuY2hlY2tlZCAvPgogICAgICAgPG1ldGhvZD4KICAgICAgICAgPGVqYi1uYW1lPlJlYWRPbmx5U3R1ZGVudEJlYW48L2VqYi1uYW1lPgotICAgICAgICA8bWV0aG9kLW5hbWU+KjwvbWV0aG9kLW5hbWU+ICAgICAgICAKKyAgICAgICAgPG1ldGhvZC1uYW1lPio8L21ldGhvZC1uYW1lPgogICAgICAgPC9tZXRob2Q+CiAgICAgICA8bWV0aG9kPgogICAgICAgICA8ZWpiLW5hbWU+U3R1ZGVudEJlYW48L2VqYi1uYW1lPgogICAgICAgICA8bWV0aG9kLW5hbWU+KjwvbWV0aG9kLW5hbWU+CiAgICAgICA8L21ldGhvZD4KICAgICA8L21ldGhvZC1wZXJtaXNzaW9uPgotICAgIAorCiA8IS0tIFN0dWRlbnQgRUpCIC0tPgogICAgIDxjb250YWluZXItdHJhbnNhY3Rpb24+CiAgICAgICA8bWV0aG9kPgpAQCAtMTgxLDcgKzE4MSw3IEBACiAgICAgICAgIDwvbWV0aG9kLXBhcmFtcz4KICAgICAgIDwvbWV0aG9kPgogICAgICAgPHRyYW5zLWF0dHJpYnV0ZT5SZXF1aXJlZDwvdHJhbnMtYXR0cmlidXRlPgotICAgIDwvY29udGFpbmVyLXRyYW5zYWN0aW9uPiAgICAKKyAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgICA8Y29udGFpbmVyLXRyYW5zYWN0aW9uPgogICAgICAgPG1ldGhvZD4KICAgICAgICAgPGVqYi1uYW1lPlJlYWRPbmx5U3R1ZGVudEJlYW48L2VqYi1uYW1lPgpAQCAtMTk5LDcgKzE5OSw3IEBACiAgICAgICAgIDxtZXRob2QtcGFyYW1zIC8+CiAgICAgICA8L21ldGhvZD4KICAgICAgIDx0cmFucy1hdHRyaWJ1dGU+UmVxdWlyZWQ8L3RyYW5zLWF0dHJpYnV0ZT4KLSAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4gICAgICAgICAgICAKKyAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgICA8Y29udGFpbmVyLXRyYW5zYWN0aW9uPgogICAgICAgPG1ldGhvZD4KICAgICAgICAgPGVqYi1uYW1lPlJlYWRPbmx5U3R1ZGVudEJlYW48L2VqYi1uYW1lPgpAQCAtMjEwLDcgKzIxMCw3IEBACiAgICAgICAgIDwvbWV0aG9kLXBhcmFtcz4KICAgICAgIDwvbWV0aG9kPgogICAgICAgPHRyYW5zLWF0dHJpYnV0ZT5SZXF1aXJlZDwvdHJhbnMtYXR0cmlidXRlPgotICAgIDwvY29udGFpbmVyLXRyYW5zYWN0aW9uPiAgICAgCisgICAgPC9jb250YWluZXItdHJhbnNhY3Rpb24+CiAgICAgIDxjb250YWluZXItdHJhbnNhY3Rpb24+CiAgICAgICA8bWV0aG9kPgogICAgICAgICA8ZWpiLW5hbWU+U3R1ZGVudEJlYW48L2VqYi1uYW1lPgpAQCAtMjI5LDggKzIyOSw4IEBACiAgICAgICAgIDxtZXRob2QtbmFtZT4qPC9tZXRob2QtbmFtZT4KICAgICAgIDwvbWV0aG9kPgogICAgICAgPHRyYW5zLWF0dHJpYnV0ZT5SZXF1aXJlZDwvdHJhbnMtYXR0cmlidXRlPgotICAgIDwvY29udGFpbmVyLXRyYW5zYWN0aW9uPiAgICAKKyAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgPC9hc3NlbWJseS1kZXNjcmlwdG9yPgotICAgICAgCisKIDwvZWpiLWphcj4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9yZWFkb25seS9kZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9yZWFkb25seS9kZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sCmluZGV4IGVmYjZjM2UuLjA3YmQ1NjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcmVhZG9ubHkvZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3JlYWRvbmx5L2Rlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwKQEAgLTE4LDcgKzE4LDcgQEAKIAogLS0+CiAKLTxzdW4tYXBwbGljYXRpb24tY2xpZW50PiAKKzxzdW4tYXBwbGljYXRpb24tY2xpZW50PgogICAgIDxlamItcmVmPgogICAgICAgPGVqYi1yZWYtbmFtZT5lamIvU2ltcGxlU3R1ZGVudDwvZWpiLXJlZi1uYW1lPgogICAgICAgPGpuZGktbmFtZT5lamIvZWpiX2NtcF9yZWFkb25seV9SZWFkT25seVN0dWRlbnQ8L2puZGktbmFtZT4KQEAgLTI2LDUgKzI2LDUgQEAKICAgICA8ZWpiLXJlZj4KICAgICAgIDxlamItcmVmLW5hbWU+ZWpiL011dGFibGVTdHVkZW50PC9lamItcmVmLW5hbWU+CiAgICAgICA8am5kaS1uYW1lPmVqYi9lamJfY21wX3JlYWRvbmx5X1N0dWRlbnQ8L2puZGktbmFtZT4KLSAgICA8L2VqYi1yZWY+ICAgCisgICAgPC9lamItcmVmPgogPC9zdW4tYXBwbGljYXRpb24tY2xpZW50PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9yZWFkb25seS9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcmVhZG9ubHkvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKaW5kZXggZDc4OTY2Zi4uY2I2OWE3ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9yZWFkb25seS9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3JlYWRvbmx5L2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCkBAIC0yMSwxMCArMjEsMTAgQEAKIAogPHN1bi1lamItamFyPgogICA8ZW50ZXJwcmlzZS1iZWFucz4KLSAgICA8bmFtZT5lamItY21wLXJlYWRvbmx5LWVqYi5qYXI8L25hbWU+ICAgCisgICAgPG5hbWU+ZWpiLWNtcC1yZWFkb25seS1lamIuamFyPC9uYW1lPgogICAgIDxlamI+CiAgICAgICA8ZWpiLW5hbWU+UmVhZE9ubHlTdHVkZW50QmVhbjwvZWpiLW5hbWU+Ci0gICAgICA8am5kaS1uYW1lPmVqYi9lamJfY21wX3JlYWRvbmx5X1JlYWRPbmx5U3R1ZGVudDwvam5kaS1uYW1lPiAgICAgICAgICAgCisgICAgICA8am5kaS1uYW1lPmVqYi9lamJfY21wX3JlYWRvbmx5X1JlYWRPbmx5U3R1ZGVudDwvam5kaS1uYW1lPgogICAgICAgPGlzLXJlYWQtb25seS1iZWFuPnRydWU8L2lzLXJlYWQtb25seS1iZWFuPgogICAgICAgPHJlZnJlc2gtcGVyaW9kLWluLXNlY29uZHM+NjA8L3JlZnJlc2gtcGVyaW9kLWluLXNlY29uZHM+CiAgICAgPC9lamI+CkBAIC0zNCw3ICszNCw3IEBACiAgICAgICA8ZWpiLXJlZj4KICAgICAgICAgPGVqYi1yZWYtbmFtZT5lamIvUmVhZE9ubHlTdHVkZW50PC9lamItcmVmLW5hbWU+CiAgICAgICAgIDxqbmRpLW5hbWU+ZWpiL2VqYl9jbXBfcmVhZG9ubHlfUmVhZE9ubHlTdHVkZW50PC9qbmRpLW5hbWU+Ci0gICAgICA8L2VqYi1yZWY+ICAgICAgICAgICAKKyAgICAgIDwvZWpiLXJlZj4KICAgICA8L2VqYj4KICAgICA8Y21wLXJlc291cmNlPgogICAgICAgIDxqbmRpLW5hbWU+amRiYy9fX2RlZmF1bHQ8L2puZGktbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcmVhZG9ubHkvZWpiL1N0dWRlbnRCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3JlYWRvbmx5L2VqYi9TdHVkZW50QmVhbi5qYXZhCmluZGV4IDg4ZjdmZTYuLjlmMmM3OWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcmVhZG9ubHkvZWpiL1N0dWRlbnRCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9yZWFkb25seS9lamIvU3R1ZGVudEJlYW4uamF2YQpAQCAtNTMsMTAgKzUzLDEwIEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTm90aWZ5aW5nIHJlYWQtb25seSBiZWFuIG9mIHVwZGF0ZSB0byAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlYWQtbW9zdGx5IFN0dWRlbnQgIiArIG5hbWUpOwotICAgICAgICAgICAgICAgIFJlYWRPbmx5QmVhbk5vdGlmaWVyIHN0dWRlbnROb3RpZmllciA9IAorICAgICAgICAgICAgICAgIFJlYWRPbmx5QmVhbk5vdGlmaWVyIHN0dWRlbnROb3RpZmllciA9CiAgICAgICAgICAgICAgICAgICAgIFJlYWRPbmx5QmVhbkhlbHBlci5nZXRSZWFkT25seUJlYW5Ob3RpZmllcgogICAgICAgICAgICAgICAgICAgICAoImphdmE6Y29tcC9lbnYvZWpiL1JlYWRPbmx5U3R1ZGVudCIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIHJlYWQtb25seSB2ZXJzaW9uCiAgICAgICAgICAgICAgICAgc3R1ZGVudE5vdGlmaWVyLnJlZnJlc2goZ2V0U3R1ZGVudElkKCkpOwogICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewpAQCAtMTIxLDEyICsxMjEsMTIgQEAKIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIybmQgcXVlcnkgb2YgIiArIHBrICsgIiB0b29rICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhZnRlcjIgLSBhZnRlcikgKyAiIG5hbm8gc2VjcyIpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJIb21lVGVzdExvY2FsRmluZChTdHJpbmcgcGspIHsKQEAgLTE0OSwxNyArMTQ5LDE3IEBACiAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiMm5kIHF1ZXJ5IG9mICIgKyBwayArICIgdG9vayAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWZ0ZXIyIC0gYWZ0ZXIpICsgIiBuYW5vIHNlY3MiKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiSG9tZVRlc3RMb2NhbFJlbW92ZShTdHJpbmcgcGspIHsKLSAgICAgICAgCi0gICAgICAgIAorCisKICAgICAgICAgU3R1ZGVudExvY2FsSG9tZSBsb2NhbEhvbWUgPSAoU3R1ZGVudExvY2FsSG9tZSkKICAgICAgICAgICAgIGNvbnRleHQuZ2V0RUpCTG9jYWxIb21lKCk7CiAKQEAgLTE4MCw3ICsxODAsNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgY2F1Z2h0IGV4Y2VwdGlvbiB3aGlsZSB0cnlpbmcgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiB0byBkbyBhIHJlbW92ZSBvbiBhIHJlYWQtb25seSBjbXAgSG9tZSIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGJvb2xlYW4gcmVtb3ZlU3VjY2VlZGVkID0gZmFsc2U7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBTdHVkZW50TG9jYWwgc3R1ZGVudCA9IGxvY2FsSG9tZS5maW5kQnlQcmltYXJ5S2V5KHBrKTsKQEAgLTIwMiwzNCArMjAyLDM0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiB0byBkbyBhIHJlbW92ZSBvbiBhIHJlYWQtb25seSBjbXAgIik7CiAgICAgICAgIH0KIAotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0dWRlbnRCZWFuLmVqYlJlbW92ZSBjYWxsZWQiKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRFbnRpdHlDb250ZXh0KEVudGl0eUNvbnRleHQgY29udGV4dCkgewotICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0OyAgICAgICAKKyAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCB1bnNldEVudGl0eUNvbnRleHQoKSB7ICAgICAKKyAgICBwdWJsaWMgdm9pZCB1bnNldEVudGl0eUNvbnRleHQoKSB7CiAgICAgICAgIHRoaXMuY29udGV4dCA9IG51bGw7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7ICAgICAKKyAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7ICAgICAgCisgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkgewogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7ICAgICAgICAKKyAgICBwdWJsaWMgdm9pZCBlamJMb2FkKCkgewogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGVqYlN0b3JlKCkgeyAgICAgICAgCisgICAgcHVibGljIHZvaWQgZWpiU3RvcmUoKSB7CiAgICAgfQotICAKIAotICAgIAorCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcmVhZG9ubHkvZWpiL1N0dWRlbnRIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3JlYWRvbmx5L2VqYi9TdHVkZW50SG9tZS5qYXZhCmluZGV4IDI5YjAyMmQuLjlmOGVjMjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcmVhZG9ubHkvZWpiL1N0dWRlbnRIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9yZWFkb25seS9lamIvU3R1ZGVudEhvbWUuamF2YQpAQCAtMzYsOCArMzYsOCBAQAogICAgICAqIEBleGNlcHRpb24gdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiBhbmQgUmVtb3RlRXhjZXB0aW9uLgogICAgICAqCiAgICAgICovCi0gCi0gICAgcHVibGljIFN0dWRlbnQgZmluZEJ5UHJpbWFyeUtleShTdHJpbmcgc3R1ZGVudElkKSAKKworICAgIHB1YmxpYyBTdHVkZW50IGZpbmRCeVByaW1hcnlLZXkoU3RyaW5nIHN0dWRlbnRJZCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIGphdmEudXRpbC5Db2xsZWN0aW9uIGZpbmRGb28oKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3JlYWRvbmx5L2VqYi9TdHVkZW50TG9jYWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcmVhZG9ubHkvZWpiL1N0dWRlbnRMb2NhbC5qYXZhCmluZGV4IDU1NWVlZDUuLjU3NGZmOWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcmVhZG9ubHkvZWpiL1N0dWRlbnRMb2NhbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcmVhZG9ubHkvZWpiL1N0dWRlbnRMb2NhbC5qYXZhCkBAIC0yMCw3ICsyMCw3IEBACiBpbXBvcnQgamFrYXJ0YS5lamIuRUpCTG9jYWxPYmplY3Q7CiAKIHB1YmxpYyBpbnRlcmZhY2UgU3R1ZGVudExvY2FsIGV4dGVuZHMgRUpCTG9jYWxPYmplY3QgewotIAorCiAgIC8qKgogICAgKiBSZXR1cm5zIHRoZSBOYW1lIG9mIGEgc3R1ZGVudC4KICAgICovCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3JlYWRvbmx5L2VqYi9TdHVkZW50TG9jYWxIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3JlYWRvbmx5L2VqYi9TdHVkZW50TG9jYWxIb21lLmphdmEKaW5kZXggNTliNjE2Ni4uMjJjNDA2NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2NtcC9yZWFkb25seS9lamIvU3R1ZGVudExvY2FsSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcmVhZG9ubHkvZWpiL1N0dWRlbnRMb2NhbEhvbWUuamF2YQpAQCAtMzYsMTEgKzM2LDExIEBACiAgICAgICogQGV4Y2VwdGlvbiB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLgogICAgICAqCiAgICAgICovCi0gCi0gICAgcHVibGljIFN0dWRlbnRMb2NhbCBmaW5kQnlQcmltYXJ5S2V5KFN0cmluZyBzdHVkZW50SWQpIAorCisgICAgcHVibGljIFN0dWRlbnRMb2NhbCBmaW5kQnlQcmltYXJ5S2V5KFN0cmluZyBzdHVkZW50SWQpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiAKIAogICAgIHB1YmxpYyBTdHVkZW50TG9jYWwgZmluZEJ5TG9jYWxTdHVkZW50KFN0dWRlbnRMb2NhbCBzdHVkZW50KSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvY21wL3JlYWRvbmx5L3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcmVhZG9ubHkvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IDkzNjVlMDEuLjZkMGU3ZjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcmVhZG9ubHkvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9jbXAvcmVhZG9ubHkvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDUgKzEsNSBAQAogQ1JFQVRFIFRBQkxFIFNUVURFTlQgKAotU1RVREVOVElEIFZBUkNIQVIoMjU2KSBOT1QgTlVMTCBQUklNQVJZIEtFWSwgCi1OQU1FIFZBUkNIQVIoMjU2KSAKK1NUVURFTlRJRCBWQVJDSEFSKDI1NikgTk9UIE5VTEwgUFJJTUFSWSBLRVksCitOQU1FIFZBUkNIQVIoMjU2KQogKQogOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9idWlsZC54bWwKaW5kZXggM2Q4NmQwNi4uZmVjMjk1MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvYnVpbGQueG1sCkBAIC00NywxMSArNDcsMTEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPgotCQlVc2FnZToKLQkJCWFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZWpiLWVlIHRlc3RzKQotCQkJYW50IG1ldGhvZGNoZWNrcG9pbnQgKEV4ZWN1dGVzIHRoZSBlamItZWUtbWV0aG9kY2hlY2twb2ludCB0ZXN0KQotCQkJYW50IHR4Y2hlY2twb2ludCAoRXhlY3V0ZXMgdGhlIGVqYi1lZS10eGNoZWNrcG9pbnQgdGVzdCkKLQk8L2VjaG8+CisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamItZWUgdGVzdHMpCisgICAgICAgICAgICBhbnQgbWV0aG9kY2hlY2twb2ludCAoRXhlY3V0ZXMgdGhlIGVqYi1lZS1tZXRob2RjaGVja3BvaW50IHRlc3QpCisgICAgICAgICAgICBhbnQgdHhjaGVja3BvaW50IChFeGVjdXRlcyB0aGUgZWpiLWVlLXR4Y2hlY2twb2ludCB0ZXN0KQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2FzeW5jdGVzdC9TRlNCRHJpdmVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2FzeW5jdGVzdC9TRlNCRHJpdmVyL2J1aWxkLnhtbAppbmRleCAzMzFjNmRlLi45NGQ0MjExIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9hc3luY3Rlc3QvU0ZTQkRyaXZlci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvYXN5bmN0ZXN0L1NGU0JEcml2ZXIvYnVpbGQueG1sCkBAIC0zMCwyNyArMzAsMjcgQEAKICAgICA8aW1wb3J0IGZpbGU9Im5icHJvamVjdC9idWlsZC1pbXBsLnhtbCIvPgogICAgIDwhLS0KIAotICAgIFRoZXJlIGV4aXN0IHNldmVyYWwgdGFyZ2V0cyB3aGljaCBhcmUgYnkgZGVmYXVsdCBlbXB0eSBhbmQgd2hpY2ggY2FuIGJlIAotICAgIHVzZWQgZm9yIGV4ZWN1dGlvbiBvZiB5b3VyIHRhc2tzLiBUaGVzZSB0YXJnZXRzIGFyZSB1c3VhbGx5IGV4ZWN1dGVkIAotICAgIGJlZm9yZSBhbmQgYWZ0ZXIgc29tZSBtYWluIHRhcmdldHMuIFRoZXkgYXJlOiAKKyAgICBUaGVyZSBleGlzdCBzZXZlcmFsIHRhcmdldHMgd2hpY2ggYXJlIGJ5IGRlZmF1bHQgZW1wdHkgYW5kIHdoaWNoIGNhbiBiZQorICAgIHVzZWQgZm9yIGV4ZWN1dGlvbiBvZiB5b3VyIHRhc2tzLiBUaGVzZSB0YXJnZXRzIGFyZSB1c3VhbGx5IGV4ZWN1dGVkCisgICAgYmVmb3JlIGFuZCBhZnRlciBzb21lIG1haW4gdGFyZ2V0cy4gVGhleSBhcmU6CiAKLSAgICAgIC1wcmUtaW5pdDogICAgICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgaW5pdGlhbGl6YXRpb24gb2YgcHJvamVjdCBwcm9wZXJ0aWVzIAotICAgICAgLXBvc3QtaW5pdDogICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGluaXRpYWxpemF0aW9uIG9mIHByb2plY3QgcHJvcGVydGllcyAKLSAgICAgIC1wcmUtY29tcGlsZTogICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgamF2YWMgY29tcGlsYXRpb24gCi0gICAgICAtcG9zdC1jb21waWxlOiAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgamF2YWMgY29tcGlsYXRpb24gCisgICAgICAtcHJlLWluaXQ6ICAgICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGluaXRpYWxpemF0aW9uIG9mIHByb2plY3QgcHJvcGVydGllcworICAgICAgLXBvc3QtaW5pdDogICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGluaXRpYWxpemF0aW9uIG9mIHByb2plY3QgcHJvcGVydGllcworICAgICAgLXByZS1jb21waWxlOiAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBqYXZhYyBjb21waWxhdGlvbgorICAgICAgLXBvc3QtY29tcGlsZTogICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGphdmFjIGNvbXBpbGF0aW9uCiAgICAgICAtcHJlLWNvbXBpbGUtc2luZ2xlOiAgICAgICBjYWxsZWQgYmVmb3JlIGphdmFjIGNvbXBpbGF0aW9uIG9mIHNpbmdsZSBmaWxlCiAgICAgICAtcG9zdC1jb21waWxlLXNpbmdsZTogICAgICBjYWxsZWQgYWZ0ZXIgamF2YWMgY29tcGlsYXRpb24gb2Ygc2luZ2xlIGZpbGUKICAgICAgIC1wcmUtY29tcGlsZS10ZXN0OiAgICAgICAgIGNhbGxlZCBiZWZvcmUgamF2YWMgY29tcGlsYXRpb24gb2YgSlVuaXQgdGVzdHMKICAgICAgIC1wb3N0LWNvbXBpbGUtdGVzdDogICAgICAgIGNhbGxlZCBhZnRlciBqYXZhYyBjb21waWxhdGlvbiBvZiBKVW5pdCB0ZXN0cwogICAgICAgLXByZS1jb21waWxlLXRlc3Qtc2luZ2xlOiAgY2FsbGVkIGJlZm9yZSBqYXZhYyBjb21waWxhdGlvbiBvZiBzaW5nbGUgSlVuaXQgdGVzdAogICAgICAgLXBvc3QtY29tcGlsZS10ZXN0LXNpbmdsZTogY2FsbGVkIGFmdGVyIGphdmFjIGNvbXBpbGF0aW9uIG9mIHNpbmdsZSBKVXVuaXQgdGVzdAotICAgICAgLXByZS1kaXN0OiAgICAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBhcmNoaXZlIGJ1aWxkaW5nIAotICAgICAgLXBvc3QtZGlzdDogICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGFyY2hpdmUgYnVpbGRpbmcgCi0gICAgICAtcG9zdC1jbGVhbjogICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgY2xlYW5pbmcgYnVpbGQgcHJvZHVjdHMgCisgICAgICAtcHJlLWRpc3Q6ICAgICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGFyY2hpdmUgYnVpbGRpbmcKKyAgICAgIC1wb3N0LWRpc3Q6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBhcmNoaXZlIGJ1aWxkaW5nCisgICAgICAtcG9zdC1jbGVhbjogICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgY2xlYW5pbmcgYnVpbGQgcHJvZHVjdHMKICAgICAgIC1wcmUtcnVuLWRlcGxveTogICAgICAgICAgIGNhbGxlZCBiZWZvcmUgZGVwbG95aW5nCiAgICAgICAtcG9zdC1ydW4tZGVwbG95OiAgICAgICAgICBjYWxsZWQgYWZ0ZXIgZGVwbG95aW5nCiAKLSAgICBFeGFtcGxlIG9mIHBsdWdpbmcgYW4gb2JmdXNjYXRvciBhZnRlciB0aGUgY29tcGlsYXRpb24gY291bGQgbG9vayBsaWtlIAorICAgIEV4YW1wbGUgb2YgcGx1Z2luZyBhbiBvYmZ1c2NhdG9yIGFmdGVyIHRoZSBjb21waWxhdGlvbiBjb3VsZCBsb29rIGxpa2UKIAogICAgICAgICA8dGFyZ2V0IG5hbWU9Ii1wb3N0LWNvbXBpbGUiPgogICAgICAgICAgICAgPG9iZnVzY2F0ZT4KQEAgLTU4LDIxICs1OCwyMSBAQAogICAgICAgICAgICAgPC9vYmZ1c2NhdGU+CiAgICAgICAgIDwvdGFyZ2V0PgogCi0gICAgRm9yIGxpc3Qgb2YgYXZhaWxhYmxlIHByb3BlcnRpZXMgY2hlY2sgdGhlIGltcG9ydGVkIAotICAgIG5icHJvamVjdC9idWlsZC1pbXBsLnhtbCBmaWxlLiAKKyAgICBGb3IgbGlzdCBvZiBhdmFpbGFibGUgcHJvcGVydGllcyBjaGVjayB0aGUgaW1wb3J0ZWQKKyAgICBuYnByb2plY3QvYnVpbGQtaW1wbC54bWwgZmlsZS4KIAogCiAgICAgT3RoZXIgd2F5IGhvdyB0byBjdXN0b21pemUgdGhlIGJ1aWxkIGlzIGJ5IG92ZXJyaWRpbmcgZXhpc3RpbmcgbWFpbiB0YXJnZXRzLgotICAgIFRoZSB0YXJnZXQgb2YgaW50ZXJlc3QgYXJlOiAKKyAgICBUaGUgdGFyZ2V0IG9mIGludGVyZXN0IGFyZToKIAogICAgICAgaW5pdC1tYWNyb2RlZi1qYXZhYzogICAgZGVmaW5lcyBtYWNybyBmb3IgamF2YWMgY29tcGlsYXRpb24KICAgICAgIGluaXQtbWFjcm9kZWYtanVuaXQ6ICAgZGVmaW5lcyBtYWNybyBmb3IganVuaXQgZXhlY3V0aW9uCiAgICAgICBpbml0LW1hY3JvZGVmLWRlYnVnOiAgICBkZWZpbmVzIG1hY3JvIGZvciBjbGFzcyBkZWJ1Z2dpbmcKICAgICAgIGRvLWRpc3Q6ICAgICAgICAgICAgICAgIGFyY2hpdmUgYnVpbGRpbmcKLSAgICAgIHJ1bjogICAgICAgICAgICAgICAgICAgIGV4ZWN1dGlvbiBvZiBwcm9qZWN0IAotICAgICAgamF2YWRvYy1idWlsZDogICAgICAgICAgamF2YWRvYyBnZW5lcmF0aW9uIAorICAgICAgcnVuOiAgICAgICAgICAgICAgICAgICAgZXhlY3V0aW9uIG9mIHByb2plY3QKKyAgICAgIGphdmFkb2MtYnVpbGQ6ICAgICAgICAgIGphdmFkb2MgZ2VuZXJhdGlvbgogCi0gICAgRXhhbXBsZSBvZiBvdmVycmlkaW5nIHRoZSB0YXJnZXQgZm9yIHByb2plY3QgZXhlY3V0aW9uIGNvdWxkIGxvb2sgbGlrZSAKKyAgICBFeGFtcGxlIG9mIG92ZXJyaWRpbmcgdGhlIHRhcmdldCBmb3IgcHJvamVjdCBleGVjdXRpb24gY291bGQgbG9vayBsaWtlCiAKICAgICAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9IjxQUk9KTkFNRT4taW1wbC5qYXIiPgogICAgICAgICAgICAgPGV4ZWMgZGlyPSJiaW4iIGV4ZWN1dGFibGU9ImxhdW5jaGVyLmV4ZSI+CkBAIC04MCwxMCArODAsMTAgQEAKICAgICAgICAgICAgIDwvZXhlYz4KICAgICAgICAgPC90YXJnZXQ+CiAKLSAgICBOb3RpY2UgdGhhdCBvdmVycmlkZGVuIHRhcmdldCBkZXBlbmRzIG9uIGphciB0YXJnZXQgYW5kIG5vdCBvbmx5IG9uIAotICAgIGNvbXBpbGUgdGFyZ2V0IGFzIHJlZ3VsYXIgcnVuIHRhcmdldCBkb2VzLiBBZ2FpbiwgZm9yIGxpc3Qgb2YgYXZhaWxhYmxlIAotICAgIHByb3BlcnRpZXMgd2hpY2ggeW91IGNhbiB1c2UgY2hlY2sgdGhlIHRhcmdldCB5b3UgYXJlIG92ZXJyaWRpbmcgaW4gCi0gICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuIAorICAgIE5vdGljZSB0aGF0IG92ZXJyaWRkZW4gdGFyZ2V0IGRlcGVuZHMgb24gamFyIHRhcmdldCBhbmQgbm90IG9ubHkgb24KKyAgICBjb21waWxlIHRhcmdldCBhcyByZWd1bGFyIHJ1biB0YXJnZXQgZG9lcy4gQWdhaW4sIGZvciBsaXN0IG9mIGF2YWlsYWJsZQorICAgIHByb3BlcnRpZXMgd2hpY2ggeW91IGNhbiB1c2UgY2hlY2sgdGhlIHRhcmdldCB5b3UgYXJlIG92ZXJyaWRpbmcgaW4KKyAgICBuYnByb2plY3QvYnVpbGQtaW1wbC54bWwgZmlsZS4KIAogICAgIC0tPgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvYXN5bmN0ZXN0L1NGU0JEcml2ZXIvbmJwcm9qZWN0L2FudC1kZXBsb3kueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvYXN5bmN0ZXN0L1NGU0JEcml2ZXIvbmJwcm9qZWN0L2FudC1kZXBsb3kueG1sCmluZGV4IDNkOTNlMTAuLmMzN2Q4NjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2FzeW5jdGVzdC9TRlNCRHJpdmVyL25icHJvamVjdC9hbnQtZGVwbG95LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9hc3luY3Rlc3QvU0ZTQkRyaXZlci9uYnByb2plY3QvYW50LWRlcGxveS54bWwKQEAgLTI1LDcgKzI1LDcgQEAKICAgICAgICAgPHRlbXBmaWxlIHByZWZpeD0iZ2Z2MyIgcHJvcGVydHk9ImdmdjMucGFzc3dvcmQuZmlsZSIgZGVzdGRpcj0iJHtqYXZhLmlvLnRtcGRpcn0iLz4gIDwhLS0gZG8gbm90IGZvcmdldCB0byBkZWxldGUgdGhpcyEgLS0+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkFTX0FETUlOX1BBU1NXT1JEPSR7Z2Z2My5wYXNzd29yZH0iIGZpbGU9IiR7Z2Z2My5wYXNzd29yZC5maWxlfSIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSItcGFyc2Utc3VuLXdlYiIgZGVwZW5kcz0iLWluaXQtY2wtZGVwbG95bWVudC1lbnYiIGlmPSJzdW4ud2ViLnByZXNlbnQiPgogICAgICAgICA8dGVtcGZpbGUgcHJlZml4PSJnZnYzIiBwcm9wZXJ0eT0idGVtcC5zdW4ud2ViIiBkZXN0ZGlyPSIke2phdmEuaW8udG1wZGlyfSIvPgogICAgICAgICA8Y29weSBmaWxlPSIke2RlcGxveS5hbnQuZG9jYmFzZS5kaXJ9L1dFQi1JTkYvc3VuLXdlYi54bWwiIHRvZmlsZT0iJHt0ZW1wLnN1bi53ZWJ9Ii8+CkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgICAgICA8cmVwbGFjZXZhbHVlPjwhW0NEQVRBWy0tPiA8c3VuLXdlYi1hcHBdXT48L3JlcGxhY2V2YWx1ZT4KICAgICAgICAgPC9yZXBsYWNlPgogICAgICAgICA8eG1scHJvcGVydHkgZmlsZT0iJHt0ZW1wLnN1bi53ZWJ9IiB2YWxpZGF0ZT0iZmFsc2UiPgotICAgICAgICA8L3htbHByb3BlcnR5PiAgICAKKyAgICAgICAgPC94bWxwcm9wZXJ0eT4KICAgICAgICAgPGRlbGV0ZSBmaWxlPSIke3RlbXAuc3VuLndlYn0iLz4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImRlcGxveS5hbnQuY2xpZW50LnVybCIgdmFsdWU9IiR7Z2Z2My51cmx9JHtzdW4td2ViLWFwcC5jb250ZXh0LXJvb3R9Ii8+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkZXBsb3kuY29udGV4dC5yb290LmFyZ3VtZW50IiB2YWx1ZT0iJmFtcDtjb250ZXh0cm9vdD0ke3N1bi13ZWItYXBwLmNvbnRleHQtcm9vdH0iLz4KQEAgLTcxLDcgKzcxLDcgQEAKICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImZ1bGwuZGVwbG95LmFudC5hcmNoaXZlIiBsb2NhdGlvbj0iJHtkZXBsb3kuYW50LmFyY2hpdmV9Ii8+CiAgICAgICAgIDxnZXQgc3JjPSIke2dmdjMuYWRtaW4udXJsfS9fX2FzYWRtaW4vZGVwbG95P3BhdGg9JHtmdWxsLmRlcGxveS5hbnQuYXJjaGl2ZX0ke2RlcGxveS5jb250ZXh0LnJvb3QuYXJndW1lbnR9JmFtcDtmb3JjZT10cnVlJmFtcDtuYW1lPSR7YW50LnByb2plY3QubmFtZX0iCiAgICAgICAgICAgICBkZXN0PSIke2dmdjMucmVzdWx0cy5maWxlfSIvPgotICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Z2Z2My5yZXN1bHRzLmZpbGV9Ii8+ICAgIAorICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Z2Z2My5yZXN1bHRzLmZpbGV9Ii8+CiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBuYW1lPSItZGVwbG95LXdpdGgtcHciIGlmPSJnZnYzLnBhc3N3b3JkIj4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iRGVwbG95aW5nICR7ZGVwbG95LmFudC5hcmNoaXZlfSIvPgpAQCAtOTEsNyArOTEsNyBAQAogICAgICAgICA8dGVtcGZpbGUgcHJlZml4PSJnZnYzIiBwcm9wZXJ0eT0iZ2Z2My5yZXN1bHRzLmZpbGUiIGRlc3RkaXI9IiR7amF2YS5pby50bXBkaXJ9Ii8+ICA8IS0tIGRvIG5vdCBmb3JnZXQgdG8gZGVsZXRlIHRoaXMhIC0tPgogICAgICAgICA8Z2V0IHNyYz0iJHtnZnYzLmFkbWluLnVybH0vX19hc2FkbWluL3VuZGVwbG95P25hbWU9JHthbnQucHJvamVjdC5uYW1lfSIKICAgICAgICAgICAgIGRlc3Q9IiR7Z2Z2My5yZXN1bHRzLmZpbGV9Ii8+Ci0gICAgICAgIDxkZWxldGUgZmlsZT0iJHtnZnYzLnJlc3VsdHMuZmlsZX0iLz4gICAgCisgICAgICAgIDxkZWxldGUgZmlsZT0iJHtnZnYzLnJlc3VsdHMuZmlsZX0iLz4KICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IG5hbWU9Ii11bmRlcGxveS13aXRoLXB3IiBpZj0iZ2Z2My5wYXNzd29yZCI+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IlVuZGVwbG95aW5nICR7ZGVwbG95LmFudC5hcmNoaXZlfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvYXN5bmN0ZXN0L1NGU0JEcml2ZXIvbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvYXN5bmN0ZXN0L1NGU0JEcml2ZXIvbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sCmluZGV4IDZkYWIzNTkuLjhhNjMxNzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2FzeW5jdGVzdC9TRlNCRHJpdmVyL25icHJvamVjdC9idWlsZC1pbXBsLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9hc3luY3Rlc3QvU0ZTQkRyaXZlci9uYnByb2plY3QvYnVpbGQtaW1wbC54bWwKQEAgLTQ3Nyw5ICs0NzcsOSBAQAogICAgIDx0YXJnZXQgbmFtZT0iLWluaXQtdGFza2RlZnMiPgogICAgICAgICA8ZmFpbCB1bmxlc3M9ImxpYnMuQ29weUxpYnMuY2xhc3NwYXRoIj4KIFRoZSBsaWJzLkNvcHlMaWJzLmNsYXNzcGF0aCBwcm9wZXJ0eSBpcyBub3Qgc2V0IHVwLgotVGhpcyBwcm9wZXJ0eSBtdXN0IHBvaW50IHRvIAorVGhpcyBwcm9wZXJ0eSBtdXN0IHBvaW50IHRvCiBvcmctbmV0YmVhbnMtbW9kdWxlcy1qYXZhLWoyc2Vwcm9qZWN0LWNvcHlsaWJzdGFzay5qYXIgZmlsZSB3aGljaCBpcyBwYXJ0Ci1vZiBOZXRCZWFucyBJREUgaW5zdGFsbGF0aW9uIGFuZCBpcyB1c3VhbGx5IGxvY2F0ZWQgYXQgCitvZiBOZXRCZWFucyBJREUgaW5zdGFsbGF0aW9uIGFuZCBpcyB1c3VhbGx5IGxvY2F0ZWQgYXQKICZsdDtuZXRiZWFuc19pbnN0YWxsYXRpb24mZ3Q7L2phdmEmbHQ7dmVyc2lvbiZndDsvYW50L2V4dHJhIGZvbGRlci4KIEVpdGhlciBvcGVuIHRoZSBwcm9qZWN0IGluIHRoZSBJREUgYW5kIG1ha2Ugc3VyZSBDb3B5TGlicyBsaWJyYXJ5CiBleGlzdHMgb3Igc2V0dXAgdGhlIHByb3BlcnR5IG1hbnVhbGx5LiBGb3IgZXhhbXBsZSBsaWtlIHRoaXM6CkBAIC04NTUsNyArODU1LDcgQEAKICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQsamF2YWRvYy1idWlsZCxqYXZhZG9jLWJyb3dzZSIgZGVzY3JpcHRpb249IkJ1aWxkIEphdmFkb2MuIiBuYW1lPSJqYXZhZG9jIi8+CiAgICAgPCEtLQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgSlVOSVQgQ09NUElMQVRJT04gU0VDVElPTgogICAgICAgICAgICAgLS0+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0LGNvbXBpbGUiIGlmPSJoYXZlLnRlc3RzIiBuYW1lPSItcHJlLXByZS1jb21waWxlLXRlc3QiPgpAQCAtODk0LDcgKzg5NCw3IEBACiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0LGNvbXBpbGUsLXByZS1wcmUtY29tcGlsZS10ZXN0LC1wcmUtY29tcGlsZS10ZXN0LXNpbmdsZSwtZG8tY29tcGlsZS10ZXN0LXNpbmdsZSwtcG9zdC1jb21waWxlLXRlc3Qtc2luZ2xlIiBuYW1lPSJjb21waWxlLXRlc3Qtc2luZ2xlIi8+CiAgICAgPCEtLQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgSlVOSVQgRVhFQ1VUSU9OIFNFQ1RJT04KICAgICAgICAgICAgIC0tPgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCIgaWY9ImhhdmUudGVzdHMiIG5hbWU9Ii1wcmUtdGVzdC1ydW4iPgpAQCAtOTIxLDcgKzkyMSw3IEBACiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0LGNvbXBpbGUtdGVzdC1zaW5nbGUsLXByZS10ZXN0LXJ1bi1zaW5nbGUsLWRvLXRlc3QtcnVuLXNpbmdsZSwtcG9zdC10ZXN0LXJ1bi1zaW5nbGUiIGRlc2NyaXB0aW9uPSJSdW4gc2luZ2xlIHVuaXQgdGVzdC4iIG5hbWU9InRlc3Qtc2luZ2xlIi8+CiAgICAgPCEtLQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgSlVOSVQgREVCVUdHSU5HIFNFQ1RJT04KICAgICAgICAgICAgIC0tPgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCxjb21waWxlLXRlc3QiIGlmPSJoYXZlLnRlc3RzIiBuYW1lPSItZGVidWctc3RhcnQtZGVidWdnZWUtdGVzdCI+CkBAIC05NDcsNyArOTQ3LDcgQEAKICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQsLXByZS1kZWJ1Zy1maXgsLWRvLWRlYnVnLWZpeC10ZXN0IiBpZj0ibmV0YmVhbnMuaG9tZSIgbmFtZT0iZGVidWctZml4LXRlc3QiLz4KICAgICA8IS0tCi0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBDTEVBTlVQIFNFQ1RJT04KICAgICAgICAgICAgIC0tPgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCIgaWY9Im5vLmRpc3QuZWFyLmRpciIgbmFtZT0iZGVwcy1jbGVhbiIgdW5sZXNzPSJuby5kZXBzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9hc3luY3Rlc3QvU0ZTQkRyaXZlci9zcmMvamF2YS9uZXQvbWF4L2VlL3Nmc2IvU0ZTQkRyaXZlclNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2FzeW5jdGVzdC9TRlNCRHJpdmVyL3NyYy9qYXZhL25ldC9tYXgvZWUvc2ZzYi9TRlNCRHJpdmVyU2VydmxldC5qYXZhCmluZGV4IGEwYjY0OWEuLmIwMzZhMjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2FzeW5jdGVzdC9TRlNCRHJpdmVyL3NyYy9qYXZhL25ldC9tYXgvZWUvc2ZzYi9TRlNCRHJpdmVyU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2FzeW5jdGVzdC9TRlNCRHJpdmVyL3NyYy9qYXZhL25ldC9tYXgvZWUvc2ZzYi9TRlNCRHJpdmVyU2VydmxldC5qYXZhCkBAIC0zOCw4ICszOCw4IEBACiAgKi8KIHB1YmxpYyBjbGFzcyBTRlNCRHJpdmVyU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIAotICAgCi0gICAgLyoqIAorCisgICAgLyoqCiAgICAgICogUHJvY2Vzc2VzIHJlcXVlc3RzIGZvciBib3RoIEhUVFAgPGNvZGU+R0VUPC9jb2RlPiBhbmQgPGNvZGU+UE9TVDwvY29kZT4gbWV0aG9kcy4KICAgICAgKiBAcGFyYW0gcmVxdWVzdCBzZXJ2bGV0IHJlcXVlc3QKICAgICAgKiBAcGFyYW0gcmVzcG9uc2Ugc2VydmxldCByZXNwb25zZQpAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxodG1sPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoZWFkPiIpOwotICAgICAgICAgICAgb3V0LnByaW50bG4oIjx0aXRsZT5TZXJ2bGV0IFNGU0JEcml2ZXJTZXJ2bGV0PC90aXRsZT4iKTsgIAorICAgICAgICAgICAgb3V0LnByaW50bG4oIjx0aXRsZT5TZXJ2bGV0IFNGU0JEcml2ZXJTZXJ2bGV0PC90aXRsZT4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L2hlYWQ+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJvZHk+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGgxPlNlcnZsZXQgU0ZTQkRyaXZlclNlcnZsZXQgYXQgIiArIHJlcXVlc3QuZ2V0Q29udGV4dFBhdGggKCkgKyAiPC9oMT4iKTsKQEAgLTc1LDEzICs3NSwxMyBAQAogCiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoMT5Gcm9tIHNlc3Npb24gU0ZTQlsxXSBOT1QgTlVMTCA/OiAiICsgKCIiICsgKHNmc2IxICE9IG51bGwpKSArICIgPC9oMT4iKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGgxPkZyb20gc2Vzc2lvbiBTRlNCWzJdIE5PVCBOVUxMPyA6ICIgKyAoIiIgKyAoc2ZzYjIgIT0gbnVsbCkpICsgIiA8L2gxPiIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmIChzZnNiMSA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgSW5pdGlhbENvbnRleHQgY3R4ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAKICAgICAgICAgICAgICAgICBzZnNiMSA9IChTaW1wbGVTZXNzaW9uQmVhbikgY3R4Lmxvb2t1cCgiamF2YTpnbG9iYWwvU0ZTQkRyaXZlci9TaW1wbGVTZXNzaW9uQmVhbiIpOwogICAgICAgICAgICAgICAgIHNmc2IyID0gKFNpbXBsZVNlc3Npb25CZWFuKSBjdHgubG9va3VwKCJqYXZhOmdsb2JhbC9TRlNCRHJpdmVyL1NpbXBsZVNlc3Npb25CZWFuIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGgxPkNyZWF0ZWQgU0ZTQlsxXTogIiArIHNmc2IxLmFzU3RyaW5nKCkgKyAiIDwvaDE+Iik7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoMT5DcmVhdGVkIFNGU0JbMl06ICIgKyBzZnNiMi5hc1N0cmluZygpICsgIiA8L2gxPiIpOwogCkBAIC0xMDksMTMgKzEwOSwxMyBAQAogICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvaHRtbD4iKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIG5tRXgpIHsKICAgICAgICAgICAgIG5tRXgucHJpbnRTdGFja1RyYWNlKG91dCk7Ci0gICAgICAgIH0gZmluYWxseSB7IAorICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgb3V0LmNsb3NlKCk7CiAgICAgICAgIH0KLSAgICB9IAorICAgIH0KIAogICAgIC8vIDxlZGl0b3ItZm9sZCBkZWZhdWx0c3RhdGU9ImNvbGxhcHNlZCIgZGVzYz0iSHR0cFNlcnZsZXQgbWV0aG9kcy4gQ2xpY2sgb24gdGhlICsgc2lnbiBvbiB0aGUgbGVmdCB0byBlZGl0IHRoZSBjb2RlLiI+Ci0gICAgLyoqIAorICAgIC8qKgogICAgICAqIEhhbmRsZXMgdGhlIEhUVFAgPGNvZGU+R0VUPC9jb2RlPiBtZXRob2QuCiAgICAgICogQHBhcmFtIHJlcXVlc3Qgc2VydmxldCByZXF1ZXN0CiAgICAgICogQHBhcmFtIHJlc3BvbnNlIHNlcnZsZXQgcmVzcG9uc2UKQEAgLTEyNiw5ICsxMjYsOSBAQAogICAgIHByb3RlY3RlZCB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKQogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIHByb2Nlc3NSZXF1ZXN0KHJlcXVlc3QsIHJlc3BvbnNlKTsKLSAgICB9IAorICAgIH0KIAotICAgIC8qKiAKKyAgICAvKioKICAgICAgKiBIYW5kbGVzIHRoZSBIVFRQIDxjb2RlPlBPU1Q8L2NvZGU+IG1ldGhvZC4KICAgICAgKiBAcGFyYW0gcmVxdWVzdCBzZXJ2bGV0IHJlcXVlc3QKICAgICAgKiBAcGFyYW0gcmVzcG9uc2Ugc2VydmxldCByZXNwb25zZQpAQCAtMTQxLDcgKzE0MSw3IEBACiAgICAgICAgIHByb2Nlc3NSZXF1ZXN0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICAvKiogCisgICAgLyoqCiAgICAgICogUmV0dXJucyBhIHNob3J0IGRlc2NyaXB0aW9uIG9mIHRoZSBzZXJ2bGV0LgogICAgICAqIEByZXR1cm4gYSBTdHJpbmcgY29udGFpbmluZyBzZXJ2bGV0IGRlc2NyaXB0aW9uCiAgICAgICovCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9hc3luY3Rlc3Qvc3JjL21haW4vamF2YS9jb20vYWNtZS9IdHRwQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9hc3luY3Rlc3Qvc3JjL21haW4vamF2YS9jb20vYWNtZS9IdHRwQ2xpZW50LmphdmEKaW5kZXggN2YzY2JlNS4uYzk4ZTMyMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvYXN5bmN0ZXN0L3NyYy9tYWluL2phdmEvY29tL2FjbWUvSHR0cENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2FzeW5jdGVzdC9zcmMvbWFpbi9qYXZhL2NvbS9hY21lL0h0dHBDbGllbnQuamF2YQpAQCAtNzIsMTAgKzcyLDEwIEBACiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIGZvciB0aGUgIiArIGkgKyAiIHRpbWUuLi4uIik7CiAgICAgICAgICAgICAgICAgdSA9IG5ldyBVUkwodXJsKTsKICAgICAgICAgICAgICAgICB1YyA9IHUub3BlbkNvbm5lY3Rpb24oKTsKLQkJZm9yIChTdHJpbmcgY29va2llIDogcmVzcG9uc2VDb29raWVzKSB7Ci0gICAgICAgICAgICAgICAgCXVjLnNldFJlcXVlc3RQcm9wZXJ0eSgiQ29va2llIiwgY29va2llKTsKKyAgICAgICAgZm9yIChTdHJpbmcgY29va2llIDogcmVzcG9uc2VDb29raWVzKSB7CisgICAgICAgICAgICAgICAgICAgIHVjLnNldFJlcXVlc3RQcm9wZXJ0eSgiQ29va2llIiwgY29va2llKTsKICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPT0+U2V0dGluZyBDb29raWU6ICIgKyBjb29raWUpOwotCQl9CisgICAgICAgIH0KICAgICAgICAgICAgICAgICB1Yy5jb25uZWN0KCk7CiAgICAgICAgICAgICAgICAgU2Vzc2lvblN0YXRlSW5mbyBpbmZvID0gZXh0cmFjdFNlc3Npb25TdGF0ZXModWMpOwogICAgICAgICAgICAgICAgIGluZm8uc2V0QWNjZXNzQ291bnQoMitpKTsKQEAgLTEwNSwxMCArMTA1LDEwIEBACiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIGZvciB0aGUgIiArIGkgKyAiIHRpbWUuLi4uIik7CiAgICAgICAgICAgICAgICAgdSA9IG5ldyBVUkwodXJsKTsKICAgICAgICAgICAgICAgICB1YyA9IHUub3BlbkNvbm5lY3Rpb24oKTsKLQkJZm9yIChTdHJpbmcgY29va2llIDogcmVzcG9uc2VDb29raWVzKSB7Ci0gICAgICAgICAgICAgICAgCXVjLnNldFJlcXVlc3RQcm9wZXJ0eSgiQ29va2llIiwgY29va2llKTsKKyAgICAgICAgZm9yIChTdHJpbmcgY29va2llIDogcmVzcG9uc2VDb29raWVzKSB7CisgICAgICAgICAgICAgICAgICAgIHVjLnNldFJlcXVlc3RQcm9wZXJ0eSgiQ29va2llIiwgY29va2llKTsKICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPT0+U2V0dGluZyBDb29raWU6ICIgKyBjb29raWUpOwotCQl9CisgICAgICAgIH0KICAgICAgICAgICAgICAgICB1Yy5jb25uZWN0KCk7CiAgICAgICAgICAgICAgICAgU2Vzc2lvblN0YXRlSW5mbyBpbmZvID0gZXh0cmFjdFNlc3Npb25TdGF0ZXModWMpOwogICAgICAgICAgICAgICAgIGluZm8uc2V0QWNjZXNzQ291bnQoNStpKTsKQEAgLTEyMSw3ICsxMjEsNyBAQAogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZhaWxlZCAiICsgaW5mbyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKIC8qCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc3RhcnRpbmcgaW5zdDEuLi4iKTsKICAgICAgICAgICAgIHByb2MgPSBSdW50aW1lLmdldFJ1bnRpbWUoKS5leGVjKEFTQURNSU4gKyAiICBzdGFydC1pbnN0YW5jZSBpbnN0MSIpOwpAQCAtMTQ2LDE0ICsxNDYsMTQgQEAKICAgICAgICAgICAgICAgICByZXNwb25zZUNvb2tpZXMuYWRkKGNvb2tpZSk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJKVVNUIFJFQUQgQ09PS0lFOiAiICsgY29va2llKTsKICAgICAgICAgICAgICAgICBpZiAoY29va2llLnN0YXJ0c1dpdGgoIkpTRVNTSU9OSUQ9IikpIHsKLQkJICAgIGpzZXNzaW9uSURDb29raWUgPSBjb29raWU7CisgICAgICAgICAgICBqc2Vzc2lvbklEQ29va2llID0gY29va2llOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGlmICh0bXBTZXNzU3RhdGUuZ2V0SnNlc3Npb25Db29raWUoKSA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0bXBTZXNzU3RhdGUuc2V0SnNlc3Npb25Db29raWUoanNlc3Npb25JRENvb2tpZSk7ICAgIAotICAgICAgICAgICAgcmVzcG9uc2VDb29raWVzLmFkZChqc2Vzc2lvbklEQ29va2llKTsgICAgCisgICAgICAgICAgICB0bXBTZXNzU3RhdGUuc2V0SnNlc3Npb25Db29raWUoanNlc3Npb25JRENvb2tpZSk7CisgICAgICAgICAgICByZXNwb25zZUNvb2tpZXMuYWRkKGpzZXNzaW9uSURDb29raWUpOwogICAgICAgICB9CiAgICAgICAgIGludCBjb2RlID0gKChIdHRwVVJMQ29ubmVjdGlvbikgdWMpLmdldFJlc3BvbnNlQ29kZSgpOwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHVjLmdldElucHV0U3RyZWFtKCk7CkBAIC0yMjAsNyArMjIwLDcgQEAKICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiBwcmV2LmdldEh0dHBDb3VudGVyKCkgPCBjdXJyZW50LmdldEh0dHBDb3VudGVyKCk7CiAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgcHJldi5nZXRFamIxQ291bnRlcigpIDwgY3VycmVudC5nZXRFamIxQ291bnRlcigpOwogICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIHByZXYuZ2V0RWpiMkNvdW50ZXIoKSA8IGN1cnJlbnQuZ2V0RWpiMkNvdW50ZXIoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9hc3luY3Rlc3Qvc3JjL3Rlc3QvamF2YS9jb20vYWNtZS9BcHBUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9hc3luY3Rlc3Qvc3JjL3Rlc3QvamF2YS9jb20vYWNtZS9BcHBUZXN0LmphdmEKaW5kZXggNTBhMTE4My4uYThhZmM2NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvYXN5bmN0ZXN0L3NyYy90ZXN0L2phdmEvY29tL2FjbWUvQXBwVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2FzeW5jdGVzdC9zcmMvdGVzdC9qYXZhL2NvbS9hY21lL0FwcFRlc3QuamF2YQpAQCAtMjMsNyArMjMsNyBAQAogLyoqCiAgKiBVbml0IHRlc3QgZm9yIHNpbXBsZSBBcHAuCiAgKi8KLXB1YmxpYyBjbGFzcyBBcHBUZXN0IAorcHVibGljIGNsYXNzIEFwcFRlc3QKICAgICBleHRlbmRzIFRlc3RDYXNlCiB7CiAgICAgLyoqCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9oYS13ZWIvU0ZTQkRyaXZlci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9oYS13ZWIvU0ZTQkRyaXZlci9idWlsZC54bWwKaW5kZXggMzMxYzZkZS4uOTRkNDIxMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvaGEtd2ViL1NGU0JEcml2ZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2hhLXdlYi9TRlNCRHJpdmVyL2J1aWxkLnhtbApAQCAtMzAsMjcgKzMwLDI3IEBACiAgICAgPGltcG9ydCBmaWxlPSJuYnByb2plY3QvYnVpbGQtaW1wbC54bWwiLz4KICAgICA8IS0tCiAKLSAgICBUaGVyZSBleGlzdCBzZXZlcmFsIHRhcmdldHMgd2hpY2ggYXJlIGJ5IGRlZmF1bHQgZW1wdHkgYW5kIHdoaWNoIGNhbiBiZSAKLSAgICB1c2VkIGZvciBleGVjdXRpb24gb2YgeW91ciB0YXNrcy4gVGhlc2UgdGFyZ2V0cyBhcmUgdXN1YWxseSBleGVjdXRlZCAKLSAgICBiZWZvcmUgYW5kIGFmdGVyIHNvbWUgbWFpbiB0YXJnZXRzLiBUaGV5IGFyZTogCisgICAgVGhlcmUgZXhpc3Qgc2V2ZXJhbCB0YXJnZXRzIHdoaWNoIGFyZSBieSBkZWZhdWx0IGVtcHR5IGFuZCB3aGljaCBjYW4gYmUKKyAgICB1c2VkIGZvciBleGVjdXRpb24gb2YgeW91ciB0YXNrcy4gVGhlc2UgdGFyZ2V0cyBhcmUgdXN1YWxseSBleGVjdXRlZAorICAgIGJlZm9yZSBhbmQgYWZ0ZXIgc29tZSBtYWluIHRhcmdldHMuIFRoZXkgYXJlOgogCi0gICAgICAtcHJlLWluaXQ6ICAgICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGluaXRpYWxpemF0aW9uIG9mIHByb2plY3QgcHJvcGVydGllcyAKLSAgICAgIC1wb3N0LWluaXQ6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBpbml0aWFsaXphdGlvbiBvZiBwcm9qZWN0IHByb3BlcnRpZXMgCi0gICAgICAtcHJlLWNvbXBpbGU6ICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGphdmFjIGNvbXBpbGF0aW9uIAotICAgICAgLXBvc3QtY29tcGlsZTogICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGphdmFjIGNvbXBpbGF0aW9uIAorICAgICAgLXByZS1pbml0OiAgICAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBpbml0aWFsaXphdGlvbiBvZiBwcm9qZWN0IHByb3BlcnRpZXMKKyAgICAgIC1wb3N0LWluaXQ6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBpbml0aWFsaXphdGlvbiBvZiBwcm9qZWN0IHByb3BlcnRpZXMKKyAgICAgIC1wcmUtY29tcGlsZTogICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgamF2YWMgY29tcGlsYXRpb24KKyAgICAgIC1wb3N0LWNvbXBpbGU6ICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBqYXZhYyBjb21waWxhdGlvbgogICAgICAgLXByZS1jb21waWxlLXNpbmdsZTogICAgICAgY2FsbGVkIGJlZm9yZSBqYXZhYyBjb21waWxhdGlvbiBvZiBzaW5nbGUgZmlsZQogICAgICAgLXBvc3QtY29tcGlsZS1zaW5nbGU6ICAgICAgY2FsbGVkIGFmdGVyIGphdmFjIGNvbXBpbGF0aW9uIG9mIHNpbmdsZSBmaWxlCiAgICAgICAtcHJlLWNvbXBpbGUtdGVzdDogICAgICAgICBjYWxsZWQgYmVmb3JlIGphdmFjIGNvbXBpbGF0aW9uIG9mIEpVbml0IHRlc3RzCiAgICAgICAtcG9zdC1jb21waWxlLXRlc3Q6ICAgICAgICBjYWxsZWQgYWZ0ZXIgamF2YWMgY29tcGlsYXRpb24gb2YgSlVuaXQgdGVzdHMKICAgICAgIC1wcmUtY29tcGlsZS10ZXN0LXNpbmdsZTogIGNhbGxlZCBiZWZvcmUgamF2YWMgY29tcGlsYXRpb24gb2Ygc2luZ2xlIEpVbml0IHRlc3QKICAgICAgIC1wb3N0LWNvbXBpbGUtdGVzdC1zaW5nbGU6IGNhbGxlZCBhZnRlciBqYXZhYyBjb21waWxhdGlvbiBvZiBzaW5nbGUgSlV1bml0IHRlc3QKLSAgICAgIC1wcmUtZGlzdDogICAgICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgYXJjaGl2ZSBidWlsZGluZyAKLSAgICAgIC1wb3N0LWRpc3Q6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBhcmNoaXZlIGJ1aWxkaW5nIAotICAgICAgLXBvc3QtY2xlYW46ICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGNsZWFuaW5nIGJ1aWxkIHByb2R1Y3RzIAorICAgICAgLXByZS1kaXN0OiAgICAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBhcmNoaXZlIGJ1aWxkaW5nCisgICAgICAtcG9zdC1kaXN0OiAgICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgYXJjaGl2ZSBidWlsZGluZworICAgICAgLXBvc3QtY2xlYW46ICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGNsZWFuaW5nIGJ1aWxkIHByb2R1Y3RzCiAgICAgICAtcHJlLXJ1bi1kZXBsb3k6ICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGRlcGxveWluZwogICAgICAgLXBvc3QtcnVuLWRlcGxveTogICAgICAgICAgY2FsbGVkIGFmdGVyIGRlcGxveWluZwogCi0gICAgRXhhbXBsZSBvZiBwbHVnaW5nIGFuIG9iZnVzY2F0b3IgYWZ0ZXIgdGhlIGNvbXBpbGF0aW9uIGNvdWxkIGxvb2sgbGlrZSAKKyAgICBFeGFtcGxlIG9mIHBsdWdpbmcgYW4gb2JmdXNjYXRvciBhZnRlciB0aGUgY29tcGlsYXRpb24gY291bGQgbG9vayBsaWtlCiAKICAgICAgICAgPHRhcmdldCBuYW1lPSItcG9zdC1jb21waWxlIj4KICAgICAgICAgICAgIDxvYmZ1c2NhdGU+CkBAIC01OCwyMSArNTgsMjEgQEAKICAgICAgICAgICAgIDwvb2JmdXNjYXRlPgogICAgICAgICA8L3RhcmdldD4KIAotICAgIEZvciBsaXN0IG9mIGF2YWlsYWJsZSBwcm9wZXJ0aWVzIGNoZWNrIHRoZSBpbXBvcnRlZCAKLSAgICBuYnByb2plY3QvYnVpbGQtaW1wbC54bWwgZmlsZS4gCisgICAgRm9yIGxpc3Qgb2YgYXZhaWxhYmxlIHByb3BlcnRpZXMgY2hlY2sgdGhlIGltcG9ydGVkCisgICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuCiAKIAogICAgIE90aGVyIHdheSBob3cgdG8gY3VzdG9taXplIHRoZSBidWlsZCBpcyBieSBvdmVycmlkaW5nIGV4aXN0aW5nIG1haW4gdGFyZ2V0cy4KLSAgICBUaGUgdGFyZ2V0IG9mIGludGVyZXN0IGFyZTogCisgICAgVGhlIHRhcmdldCBvZiBpbnRlcmVzdCBhcmU6CiAKICAgICAgIGluaXQtbWFjcm9kZWYtamF2YWM6ICAgIGRlZmluZXMgbWFjcm8gZm9yIGphdmFjIGNvbXBpbGF0aW9uCiAgICAgICBpbml0LW1hY3JvZGVmLWp1bml0OiAgIGRlZmluZXMgbWFjcm8gZm9yIGp1bml0IGV4ZWN1dGlvbgogICAgICAgaW5pdC1tYWNyb2RlZi1kZWJ1ZzogICAgZGVmaW5lcyBtYWNybyBmb3IgY2xhc3MgZGVidWdnaW5nCiAgICAgICBkby1kaXN0OiAgICAgICAgICAgICAgICBhcmNoaXZlIGJ1aWxkaW5nCi0gICAgICBydW46ICAgICAgICAgICAgICAgICAgICBleGVjdXRpb24gb2YgcHJvamVjdCAKLSAgICAgIGphdmFkb2MtYnVpbGQ6ICAgICAgICAgIGphdmFkb2MgZ2VuZXJhdGlvbiAKKyAgICAgIHJ1bjogICAgICAgICAgICAgICAgICAgIGV4ZWN1dGlvbiBvZiBwcm9qZWN0CisgICAgICBqYXZhZG9jLWJ1aWxkOiAgICAgICAgICBqYXZhZG9jIGdlbmVyYXRpb24KIAotICAgIEV4YW1wbGUgb2Ygb3ZlcnJpZGluZyB0aGUgdGFyZ2V0IGZvciBwcm9qZWN0IGV4ZWN1dGlvbiBjb3VsZCBsb29rIGxpa2UgCisgICAgRXhhbXBsZSBvZiBvdmVycmlkaW5nIHRoZSB0YXJnZXQgZm9yIHByb2plY3QgZXhlY3V0aW9uIGNvdWxkIGxvb2sgbGlrZQogCiAgICAgICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSI8UFJPSk5BTUU+LWltcGwuamFyIj4KICAgICAgICAgICAgIDxleGVjIGRpcj0iYmluIiBleGVjdXRhYmxlPSJsYXVuY2hlci5leGUiPgpAQCAtODAsMTAgKzgwLDEwIEBACiAgICAgICAgICAgICA8L2V4ZWM+CiAgICAgICAgIDwvdGFyZ2V0PgogCi0gICAgTm90aWNlIHRoYXQgb3ZlcnJpZGRlbiB0YXJnZXQgZGVwZW5kcyBvbiBqYXIgdGFyZ2V0IGFuZCBub3Qgb25seSBvbiAKLSAgICBjb21waWxlIHRhcmdldCBhcyByZWd1bGFyIHJ1biB0YXJnZXQgZG9lcy4gQWdhaW4sIGZvciBsaXN0IG9mIGF2YWlsYWJsZSAKLSAgICBwcm9wZXJ0aWVzIHdoaWNoIHlvdSBjYW4gdXNlIGNoZWNrIHRoZSB0YXJnZXQgeW91IGFyZSBvdmVycmlkaW5nIGluIAotICAgIG5icHJvamVjdC9idWlsZC1pbXBsLnhtbCBmaWxlLiAKKyAgICBOb3RpY2UgdGhhdCBvdmVycmlkZGVuIHRhcmdldCBkZXBlbmRzIG9uIGphciB0YXJnZXQgYW5kIG5vdCBvbmx5IG9uCisgICAgY29tcGlsZSB0YXJnZXQgYXMgcmVndWxhciBydW4gdGFyZ2V0IGRvZXMuIEFnYWluLCBmb3IgbGlzdCBvZiBhdmFpbGFibGUKKyAgICBwcm9wZXJ0aWVzIHdoaWNoIHlvdSBjYW4gdXNlIGNoZWNrIHRoZSB0YXJnZXQgeW91IGFyZSBvdmVycmlkaW5nIGluCisgICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuCiAKICAgICAtLT4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2hhLXdlYi9TRlNCRHJpdmVyL25icHJvamVjdC9hbnQtZGVwbG95LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2hhLXdlYi9TRlNCRHJpdmVyL25icHJvamVjdC9hbnQtZGVwbG95LnhtbAppbmRleCAzZDkzZTEwLi5jMzdkODYxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9oYS13ZWIvU0ZTQkRyaXZlci9uYnByb2plY3QvYW50LWRlcGxveS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvaGEtd2ViL1NGU0JEcml2ZXIvbmJwcm9qZWN0L2FudC1kZXBsb3kueG1sCkBAIC0yNSw3ICsyNSw3IEBACiAgICAgICAgIDx0ZW1wZmlsZSBwcmVmaXg9ImdmdjMiIHByb3BlcnR5PSJnZnYzLnBhc3N3b3JkLmZpbGUiIGRlc3RkaXI9IiR7amF2YS5pby50bXBkaXJ9Ii8+ICA8IS0tIGRvIG5vdCBmb3JnZXQgdG8gZGVsZXRlIHRoaXMhIC0tPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJBU19BRE1JTl9QQVNTV09SRD0ke2dmdjMucGFzc3dvcmR9IiBmaWxlPSIke2dmdjMucGFzc3dvcmQuZmlsZX0iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iLXBhcnNlLXN1bi13ZWIiIGRlcGVuZHM9Ii1pbml0LWNsLWRlcGxveW1lbnQtZW52IiBpZj0ic3VuLndlYi5wcmVzZW50Ij4KICAgICAgICAgPHRlbXBmaWxlIHByZWZpeD0iZ2Z2MyIgcHJvcGVydHk9InRlbXAuc3VuLndlYiIgZGVzdGRpcj0iJHtqYXZhLmlvLnRtcGRpcn0iLz4KICAgICAgICAgPGNvcHkgZmlsZT0iJHtkZXBsb3kuYW50LmRvY2Jhc2UuZGlyfS9XRUItSU5GL3N1bi13ZWIueG1sIiB0b2ZpbGU9IiR7dGVtcC5zdW4ud2VifSIvPgpAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgICAgPHJlcGxhY2V2YWx1ZT48IVtDREFUQVstLT4gPHN1bi13ZWItYXBwXV0+PC9yZXBsYWNldmFsdWU+CiAgICAgICAgIDwvcmVwbGFjZT4KICAgICAgICAgPHhtbHByb3BlcnR5IGZpbGU9IiR7dGVtcC5zdW4ud2VifSIgdmFsaWRhdGU9ImZhbHNlIj4KLSAgICAgICAgPC94bWxwcm9wZXJ0eT4gICAgCisgICAgICAgIDwveG1scHJvcGVydHk+CiAgICAgICAgIDxkZWxldGUgZmlsZT0iJHt0ZW1wLnN1bi53ZWJ9Ii8+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkZXBsb3kuYW50LmNsaWVudC51cmwiIHZhbHVlPSIke2dmdjMudXJsfSR7c3VuLXdlYi1hcHAuY29udGV4dC1yb290fSIvPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0iZGVwbG95LmNvbnRleHQucm9vdC5hcmd1bWVudCIgdmFsdWU9IiZhbXA7Y29udGV4dHJvb3Q9JHtzdW4td2ViLWFwcC5jb250ZXh0LXJvb3R9Ii8+CkBAIC03MSw3ICs3MSw3IEBACiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJmdWxsLmRlcGxveS5hbnQuYXJjaGl2ZSIgbG9jYXRpb249IiR7ZGVwbG95LmFudC5hcmNoaXZlfSIvPgogICAgICAgICA8Z2V0IHNyYz0iJHtnZnYzLmFkbWluLnVybH0vX19hc2FkbWluL2RlcGxveT9wYXRoPSR7ZnVsbC5kZXBsb3kuYW50LmFyY2hpdmV9JHtkZXBsb3kuY29udGV4dC5yb290LmFyZ3VtZW50fSZhbXA7Zm9yY2U9dHJ1ZSZhbXA7bmFtZT0ke2FudC5wcm9qZWN0Lm5hbWV9IgogICAgICAgICAgICAgZGVzdD0iJHtnZnYzLnJlc3VsdHMuZmlsZX0iLz4KLSAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2dmdjMucmVzdWx0cy5maWxlfSIvPiAgICAKKyAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2dmdjMucmVzdWx0cy5maWxlfSIvPgogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgbmFtZT0iLWRlcGxveS13aXRoLXB3IiBpZj0iZ2Z2My5wYXNzd29yZCI+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkRlcGxveWluZyAke2RlcGxveS5hbnQuYXJjaGl2ZX0iLz4KQEAgLTkxLDcgKzkxLDcgQEAKICAgICAgICAgPHRlbXBmaWxlIHByZWZpeD0iZ2Z2MyIgcHJvcGVydHk9ImdmdjMucmVzdWx0cy5maWxlIiBkZXN0ZGlyPSIke2phdmEuaW8udG1wZGlyfSIvPiAgPCEtLSBkbyBub3QgZm9yZ2V0IHRvIGRlbGV0ZSB0aGlzISAtLT4KICAgICAgICAgPGdldCBzcmM9IiR7Z2Z2My5hZG1pbi51cmx9L19fYXNhZG1pbi91bmRlcGxveT9uYW1lPSR7YW50LnByb2plY3QubmFtZX0iCiAgICAgICAgICAgICBkZXN0PSIke2dmdjMucmVzdWx0cy5maWxlfSIvPgotICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Z2Z2My5yZXN1bHRzLmZpbGV9Ii8+ICAgIAorICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Z2Z2My5yZXN1bHRzLmZpbGV9Ii8+CiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBuYW1lPSItdW5kZXBsb3ktd2l0aC1wdyIgaWY9ImdmdjMucGFzc3dvcmQiPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJVbmRlcGxveWluZyAke2RlcGxveS5hbnQuYXJjaGl2ZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2hhLXdlYi9TRlNCRHJpdmVyL25icHJvamVjdC9idWlsZC1pbXBsLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2hhLXdlYi9TRlNCRHJpdmVyL25icHJvamVjdC9idWlsZC1pbXBsLnhtbAppbmRleCA2ZGFiMzU5Li44YTYzMTczIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9oYS13ZWIvU0ZTQkRyaXZlci9uYnByb2plY3QvYnVpbGQtaW1wbC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvaGEtd2ViL1NGU0JEcml2ZXIvbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sCkBAIC00NzcsOSArNDc3LDkgQEAKICAgICA8dGFyZ2V0IG5hbWU9Ii1pbml0LXRhc2tkZWZzIj4KICAgICAgICAgPGZhaWwgdW5sZXNzPSJsaWJzLkNvcHlMaWJzLmNsYXNzcGF0aCI+CiBUaGUgbGlicy5Db3B5TGlicy5jbGFzc3BhdGggcHJvcGVydHkgaXMgbm90IHNldCB1cC4KLVRoaXMgcHJvcGVydHkgbXVzdCBwb2ludCB0byAKK1RoaXMgcHJvcGVydHkgbXVzdCBwb2ludCB0bwogb3JnLW5ldGJlYW5zLW1vZHVsZXMtamF2YS1qMnNlcHJvamVjdC1jb3B5bGlic3Rhc2suamFyIGZpbGUgd2hpY2ggaXMgcGFydAotb2YgTmV0QmVhbnMgSURFIGluc3RhbGxhdGlvbiBhbmQgaXMgdXN1YWxseSBsb2NhdGVkIGF0IAorb2YgTmV0QmVhbnMgSURFIGluc3RhbGxhdGlvbiBhbmQgaXMgdXN1YWxseSBsb2NhdGVkIGF0CiAmbHQ7bmV0YmVhbnNfaW5zdGFsbGF0aW9uJmd0Oy9qYXZhJmx0O3ZlcnNpb24mZ3Q7L2FudC9leHRyYSBmb2xkZXIuCiBFaXRoZXIgb3BlbiB0aGUgcHJvamVjdCBpbiB0aGUgSURFIGFuZCBtYWtlIHN1cmUgQ29weUxpYnMgbGlicmFyeQogZXhpc3RzIG9yIHNldHVwIHRoZSBwcm9wZXJ0eSBtYW51YWxseS4gRm9yIGV4YW1wbGUgbGlrZSB0aGlzOgpAQCAtODU1LDcgKzg1NSw3IEBACiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0LGphdmFkb2MtYnVpbGQsamF2YWRvYy1icm93c2UiIGRlc2NyaXB0aW9uPSJCdWlsZCBKYXZhZG9jLiIgbmFtZT0iamF2YWRvYyIvPgogICAgIDwhLS0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIEpVTklUIENPTVBJTEFUSU9OIFNFQ1RJT04KICAgICAgICAgICAgIC0tPgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCxjb21waWxlIiBpZj0iaGF2ZS50ZXN0cyIgbmFtZT0iLXByZS1wcmUtY29tcGlsZS10ZXN0Ij4KQEAgLTg5NCw3ICs4OTQsNyBAQAogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCxjb21waWxlLC1wcmUtcHJlLWNvbXBpbGUtdGVzdCwtcHJlLWNvbXBpbGUtdGVzdC1zaW5nbGUsLWRvLWNvbXBpbGUtdGVzdC1zaW5nbGUsLXBvc3QtY29tcGlsZS10ZXN0LXNpbmdsZSIgbmFtZT0iY29tcGlsZS10ZXN0LXNpbmdsZSIvPgogICAgIDwhLS0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIEpVTklUIEVYRUNVVElPTiBTRUNUSU9OCiAgICAgICAgICAgICAtLT4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQiIGlmPSJoYXZlLnRlc3RzIiBuYW1lPSItcHJlLXRlc3QtcnVuIj4KQEAgLTkyMSw3ICs5MjEsNyBAQAogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCxjb21waWxlLXRlc3Qtc2luZ2xlLC1wcmUtdGVzdC1ydW4tc2luZ2xlLC1kby10ZXN0LXJ1bi1zaW5nbGUsLXBvc3QtdGVzdC1ydW4tc2luZ2xlIiBkZXNjcmlwdGlvbj0iUnVuIHNpbmdsZSB1bml0IHRlc3QuIiBuYW1lPSJ0ZXN0LXNpbmdsZSIvPgogICAgIDwhLS0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIEpVTklUIERFQlVHR0lORyBTRUNUSU9OCiAgICAgICAgICAgICAtLT4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQsY29tcGlsZS10ZXN0IiBpZj0iaGF2ZS50ZXN0cyIgbmFtZT0iLWRlYnVnLXN0YXJ0LWRlYnVnZ2VlLXRlc3QiPgpAQCAtOTQ3LDcgKzk0Nyw3IEBACiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0LC1wcmUtZGVidWctZml4LC1kby1kZWJ1Zy1maXgtdGVzdCIgaWY9Im5ldGJlYW5zLmhvbWUiIG5hbWU9ImRlYnVnLWZpeC10ZXN0Ii8+CiAgICAgPCEtLQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgQ0xFQU5VUCBTRUNUSU9OCiAgICAgICAgICAgICAtLT4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQiIGlmPSJuby5kaXN0LmVhci5kaXIiIG5hbWU9ImRlcHMtY2xlYW4iIHVubGVzcz0ibm8uZGVwcyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvaGEtd2ViL1NGU0JEcml2ZXIvc3JjL2phdmEvbmV0L21heC9lZS9zZnNiL1NGU0JEcml2ZXJTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9oYS13ZWIvU0ZTQkRyaXZlci9zcmMvamF2YS9uZXQvbWF4L2VlL3Nmc2IvU0ZTQkRyaXZlclNlcnZsZXQuamF2YQppbmRleCA2ZTY2M2NlLi4zNjQzMzg5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9oYS13ZWIvU0ZTQkRyaXZlci9zcmMvamF2YS9uZXQvbWF4L2VlL3Nmc2IvU0ZTQkRyaXZlclNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9oYS13ZWIvU0ZTQkRyaXZlci9zcmMvamF2YS9uZXQvbWF4L2VlL3Nmc2IvU0ZTQkRyaXZlclNlcnZsZXQuamF2YQpAQCAtMzIsOCArMzIsOCBAQAogCiBwdWJsaWMgY2xhc3MgU0ZTQkRyaXZlclNlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAKLSAgIAotICAgIC8qKiAKKworICAgIC8qKgogICAgICAqIFByb2Nlc3NlcyByZXF1ZXN0cyBmb3IgYm90aCBIVFRQIDxjb2RlPkdFVDwvY29kZT4gYW5kIDxjb2RlPlBPU1Q8L2NvZGU+IG1ldGhvZHMuCiAgICAgICogQHBhcmFtIHJlcXVlc3Qgc2VydmxldCByZXF1ZXN0CiAgICAgICogQHBhcmFtIHJlc3BvbnNlIHNlcnZsZXQgcmVzcG9uc2UKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aHRtbD4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aGVhZD4iKTsKLSAgICAgICAgICAgIG91dC5wcmludGxuKCI8dGl0bGU+U2VydmxldCBTRlNCRHJpdmVyU2VydmxldDwvdGl0bGU+Iik7ICAKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8dGl0bGU+U2VydmxldCBTRlNCRHJpdmVyU2VydmxldDwvdGl0bGU+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9oZWFkPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxib2R5PiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoMT5TZXJ2bGV0IFNGU0JEcml2ZXJTZXJ2bGV0IGF0ICIgKyByZXF1ZXN0LmdldENvbnRleHRQYXRoICgpICsgIjwvaDE+Iik7CkBAIC02MywxMyArNjMsMTMgQEAKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L2h0bWw+Iik7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBubUV4KSB7CiAgICAgICAgICAgICBubUV4LnByaW50U3RhY2tUcmFjZShvdXQpOwotICAgICAgICB9IGZpbmFsbHkgeyAKKyAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIG91dC5jbG9zZSgpOwogICAgICAgICB9Ci0gICAgfSAKKyAgICB9CiAKICAgICAvLyA8ZWRpdG9yLWZvbGQgZGVmYXVsdHN0YXRlPSJjb2xsYXBzZWQiIGRlc2M9Ikh0dHBTZXJ2bGV0IG1ldGhvZHMuIENsaWNrIG9uIHRoZSArIHNpZ24gb24gdGhlIGxlZnQgdG8gZWRpdCB0aGUgY29kZS4iPgotICAgIC8qKiAKKyAgICAvKioKICAgICAgKiBIYW5kbGVzIHRoZSBIVFRQIDxjb2RlPkdFVDwvY29kZT4gbWV0aG9kLgogICAgICAqIEBwYXJhbSByZXF1ZXN0IHNlcnZsZXQgcmVxdWVzdAogICAgICAqIEBwYXJhbSByZXNwb25zZSBzZXJ2bGV0IHJlc3BvbnNlCkBAIC04MCw5ICs4MCw5IEBACiAgICAgcHJvdGVjdGVkIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgcHJvY2Vzc1JlcXVlc3QocmVxdWVzdCwgcmVzcG9uc2UpOwotICAgIH0gCisgICAgfQogCi0gICAgLyoqIAorICAgIC8qKgogICAgICAqIEhhbmRsZXMgdGhlIEhUVFAgPGNvZGU+UE9TVDwvY29kZT4gbWV0aG9kLgogICAgICAqIEBwYXJhbSByZXF1ZXN0IHNlcnZsZXQgcmVxdWVzdAogICAgICAqIEBwYXJhbSByZXNwb25zZSBzZXJ2bGV0IHJlc3BvbnNlCkBAIC05NSw3ICs5NSw3IEBACiAgICAgICAgIHByb2Nlc3NSZXF1ZXN0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICAvKiogCisgICAgLyoqCiAgICAgICogUmV0dXJucyBhIHNob3J0IGRlc2NyaXB0aW9uIG9mIHRoZSBzZXJ2bGV0LgogICAgICAqIEByZXR1cm4gYSBTdHJpbmcgY29udGFpbmluZyBzZXJ2bGV0IGRlc2NyaXB0aW9uCiAgICAgICovCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9oYS13ZWIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2hhLXdlYi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDdhOGYxMDQuLjMyNzFjMjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2hhLXdlYi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2hhLXdlYi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWhhLXdlYiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvaGEtd2ViL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2hhLXdlYi9idWlsZC54bWwKaW5kZXggNTNjNzYxMi4uMzhhNTdjMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvaGEtd2ViL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9oYS13ZWIvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxNiArNDIsMTYgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvcHlSZXNvdXJjZXMiLz4KQEAgLTcyLDExICs3MiwxMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC04OCwxMCArODgsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0b3JlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVtb3ZlUmVzb3VyY2VzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9oYS13ZWIvc3JjL21haW4vamF2YS9jb20vYWNtZS9IdHRwQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9oYS13ZWIvc3JjL21haW4vamF2YS9jb20vYWNtZS9IdHRwQ2xpZW50LmphdmEKaW5kZXggNjVhMTQzMC4uNWUzNjM0MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvaGEtd2ViL3NyYy9tYWluL2phdmEvY29tL2FjbWUvSHR0cENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2hhLXdlYi9zcmMvbWFpbi9qYXZhL2NvbS9hY21lL0h0dHBDbGllbnQuamF2YQpAQCAtMTE2LDcgKzExNiw3IEBACiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRmFpbGVkICIgKyBpbmZvKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQpAQCAtMTM0LDcgKzEzNCw3IEBACiAgICAgICAgIH0KIAogICAgICAgICBpZiAodG1wU2Vzc1N0YXRlLmdldEpzZXNzaW9uQ29va2llKCkgPT0gbnVsbCkgewotICAgICAgICAgICAgdG1wU2Vzc1N0YXRlLnNldEpzZXNzaW9uQ29va2llKGNvb2tpZSk7ICAgIAorICAgICAgICAgICAgdG1wU2Vzc1N0YXRlLnNldEpzZXNzaW9uQ29va2llKGNvb2tpZSk7CiAgICAgICAgIH0KICAgICAgICAgaW50IGNvZGUgPSAoKEh0dHBVUkxDb25uZWN0aW9uKSB1YykuZ2V0UmVzcG9uc2VDb2RlKCk7CiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gdWMuZ2V0SW5wdXRTdHJlYW0oKTsKQEAgLTE2OSw3ICsxNjksNyBAQAogICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIHByZXYuZ2V0SnNlc3Npb25Db29raWUoKS5lcXVhbHMoY3VycmVudC5nZXRKc2Vzc2lvbkNvb2tpZSgpKTsKIAogICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIHByZXYuZ2V0SHR0cENvdW50ZXIoKSA8IGN1cnJlbnQuZ2V0SHR0cENvdW50ZXIoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9oYS13ZWIvc3JjL3Rlc3QvamF2YS9jb20vYWNtZS9BcHBUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9oYS13ZWIvc3JjL3Rlc3QvamF2YS9jb20vYWNtZS9BcHBUZXN0LmphdmEKaW5kZXggNTBhMTE4My4uYThhZmM2NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvaGEtd2ViL3NyYy90ZXN0L2phdmEvY29tL2FjbWUvQXBwVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2hhLXdlYi9zcmMvdGVzdC9qYXZhL2NvbS9hY21lL0FwcFRlc3QuamF2YQpAQCAtMjMsNyArMjMsNyBAQAogLyoqCiAgKiBVbml0IHRlc3QgZm9yIHNpbXBsZSBBcHAuCiAgKi8KLXB1YmxpYyBjbGFzcyBBcHBUZXN0IAorcHVibGljIGNsYXNzIEFwcFRlc3QKICAgICBleHRlbmRzIFRlc3RDYXNlCiB7CiAgICAgLyoqCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9pbnN0YW5jZS1yZXN0YXJ0LXRlc3QvU0ZTQkRyaXZlci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9pbnN0YW5jZS1yZXN0YXJ0LXRlc3QvU0ZTQkRyaXZlci9idWlsZC54bWwKaW5kZXggMzMxYzZkZS4uOTRkNDIxMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvaW5zdGFuY2UtcmVzdGFydC10ZXN0L1NGU0JEcml2ZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2luc3RhbmNlLXJlc3RhcnQtdGVzdC9TRlNCRHJpdmVyL2J1aWxkLnhtbApAQCAtMzAsMjcgKzMwLDI3IEBACiAgICAgPGltcG9ydCBmaWxlPSJuYnByb2plY3QvYnVpbGQtaW1wbC54bWwiLz4KICAgICA8IS0tCiAKLSAgICBUaGVyZSBleGlzdCBzZXZlcmFsIHRhcmdldHMgd2hpY2ggYXJlIGJ5IGRlZmF1bHQgZW1wdHkgYW5kIHdoaWNoIGNhbiBiZSAKLSAgICB1c2VkIGZvciBleGVjdXRpb24gb2YgeW91ciB0YXNrcy4gVGhlc2UgdGFyZ2V0cyBhcmUgdXN1YWxseSBleGVjdXRlZCAKLSAgICBiZWZvcmUgYW5kIGFmdGVyIHNvbWUgbWFpbiB0YXJnZXRzLiBUaGV5IGFyZTogCisgICAgVGhlcmUgZXhpc3Qgc2V2ZXJhbCB0YXJnZXRzIHdoaWNoIGFyZSBieSBkZWZhdWx0IGVtcHR5IGFuZCB3aGljaCBjYW4gYmUKKyAgICB1c2VkIGZvciBleGVjdXRpb24gb2YgeW91ciB0YXNrcy4gVGhlc2UgdGFyZ2V0cyBhcmUgdXN1YWxseSBleGVjdXRlZAorICAgIGJlZm9yZSBhbmQgYWZ0ZXIgc29tZSBtYWluIHRhcmdldHMuIFRoZXkgYXJlOgogCi0gICAgICAtcHJlLWluaXQ6ICAgICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGluaXRpYWxpemF0aW9uIG9mIHByb2plY3QgcHJvcGVydGllcyAKLSAgICAgIC1wb3N0LWluaXQ6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBpbml0aWFsaXphdGlvbiBvZiBwcm9qZWN0IHByb3BlcnRpZXMgCi0gICAgICAtcHJlLWNvbXBpbGU6ICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGphdmFjIGNvbXBpbGF0aW9uIAotICAgICAgLXBvc3QtY29tcGlsZTogICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGphdmFjIGNvbXBpbGF0aW9uIAorICAgICAgLXByZS1pbml0OiAgICAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBpbml0aWFsaXphdGlvbiBvZiBwcm9qZWN0IHByb3BlcnRpZXMKKyAgICAgIC1wb3N0LWluaXQ6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBpbml0aWFsaXphdGlvbiBvZiBwcm9qZWN0IHByb3BlcnRpZXMKKyAgICAgIC1wcmUtY29tcGlsZTogICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgamF2YWMgY29tcGlsYXRpb24KKyAgICAgIC1wb3N0LWNvbXBpbGU6ICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBqYXZhYyBjb21waWxhdGlvbgogICAgICAgLXByZS1jb21waWxlLXNpbmdsZTogICAgICAgY2FsbGVkIGJlZm9yZSBqYXZhYyBjb21waWxhdGlvbiBvZiBzaW5nbGUgZmlsZQogICAgICAgLXBvc3QtY29tcGlsZS1zaW5nbGU6ICAgICAgY2FsbGVkIGFmdGVyIGphdmFjIGNvbXBpbGF0aW9uIG9mIHNpbmdsZSBmaWxlCiAgICAgICAtcHJlLWNvbXBpbGUtdGVzdDogICAgICAgICBjYWxsZWQgYmVmb3JlIGphdmFjIGNvbXBpbGF0aW9uIG9mIEpVbml0IHRlc3RzCiAgICAgICAtcG9zdC1jb21waWxlLXRlc3Q6ICAgICAgICBjYWxsZWQgYWZ0ZXIgamF2YWMgY29tcGlsYXRpb24gb2YgSlVuaXQgdGVzdHMKICAgICAgIC1wcmUtY29tcGlsZS10ZXN0LXNpbmdsZTogIGNhbGxlZCBiZWZvcmUgamF2YWMgY29tcGlsYXRpb24gb2Ygc2luZ2xlIEpVbml0IHRlc3QKICAgICAgIC1wb3N0LWNvbXBpbGUtdGVzdC1zaW5nbGU6IGNhbGxlZCBhZnRlciBqYXZhYyBjb21waWxhdGlvbiBvZiBzaW5nbGUgSlV1bml0IHRlc3QKLSAgICAgIC1wcmUtZGlzdDogICAgICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgYXJjaGl2ZSBidWlsZGluZyAKLSAgICAgIC1wb3N0LWRpc3Q6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBhcmNoaXZlIGJ1aWxkaW5nIAotICAgICAgLXBvc3QtY2xlYW46ICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGNsZWFuaW5nIGJ1aWxkIHByb2R1Y3RzIAorICAgICAgLXByZS1kaXN0OiAgICAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBhcmNoaXZlIGJ1aWxkaW5nCisgICAgICAtcG9zdC1kaXN0OiAgICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgYXJjaGl2ZSBidWlsZGluZworICAgICAgLXBvc3QtY2xlYW46ICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGNsZWFuaW5nIGJ1aWxkIHByb2R1Y3RzCiAgICAgICAtcHJlLXJ1bi1kZXBsb3k6ICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGRlcGxveWluZwogICAgICAgLXBvc3QtcnVuLWRlcGxveTogICAgICAgICAgY2FsbGVkIGFmdGVyIGRlcGxveWluZwogCi0gICAgRXhhbXBsZSBvZiBwbHVnaW5nIGFuIG9iZnVzY2F0b3IgYWZ0ZXIgdGhlIGNvbXBpbGF0aW9uIGNvdWxkIGxvb2sgbGlrZSAKKyAgICBFeGFtcGxlIG9mIHBsdWdpbmcgYW4gb2JmdXNjYXRvciBhZnRlciB0aGUgY29tcGlsYXRpb24gY291bGQgbG9vayBsaWtlCiAKICAgICAgICAgPHRhcmdldCBuYW1lPSItcG9zdC1jb21waWxlIj4KICAgICAgICAgICAgIDxvYmZ1c2NhdGU+CkBAIC01OCwyMSArNTgsMjEgQEAKICAgICAgICAgICAgIDwvb2JmdXNjYXRlPgogICAgICAgICA8L3RhcmdldD4KIAotICAgIEZvciBsaXN0IG9mIGF2YWlsYWJsZSBwcm9wZXJ0aWVzIGNoZWNrIHRoZSBpbXBvcnRlZCAKLSAgICBuYnByb2plY3QvYnVpbGQtaW1wbC54bWwgZmlsZS4gCisgICAgRm9yIGxpc3Qgb2YgYXZhaWxhYmxlIHByb3BlcnRpZXMgY2hlY2sgdGhlIGltcG9ydGVkCisgICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuCiAKIAogICAgIE90aGVyIHdheSBob3cgdG8gY3VzdG9taXplIHRoZSBidWlsZCBpcyBieSBvdmVycmlkaW5nIGV4aXN0aW5nIG1haW4gdGFyZ2V0cy4KLSAgICBUaGUgdGFyZ2V0IG9mIGludGVyZXN0IGFyZTogCisgICAgVGhlIHRhcmdldCBvZiBpbnRlcmVzdCBhcmU6CiAKICAgICAgIGluaXQtbWFjcm9kZWYtamF2YWM6ICAgIGRlZmluZXMgbWFjcm8gZm9yIGphdmFjIGNvbXBpbGF0aW9uCiAgICAgICBpbml0LW1hY3JvZGVmLWp1bml0OiAgIGRlZmluZXMgbWFjcm8gZm9yIGp1bml0IGV4ZWN1dGlvbgogICAgICAgaW5pdC1tYWNyb2RlZi1kZWJ1ZzogICAgZGVmaW5lcyBtYWNybyBmb3IgY2xhc3MgZGVidWdnaW5nCiAgICAgICBkby1kaXN0OiAgICAgICAgICAgICAgICBhcmNoaXZlIGJ1aWxkaW5nCi0gICAgICBydW46ICAgICAgICAgICAgICAgICAgICBleGVjdXRpb24gb2YgcHJvamVjdCAKLSAgICAgIGphdmFkb2MtYnVpbGQ6ICAgICAgICAgIGphdmFkb2MgZ2VuZXJhdGlvbiAKKyAgICAgIHJ1bjogICAgICAgICAgICAgICAgICAgIGV4ZWN1dGlvbiBvZiBwcm9qZWN0CisgICAgICBqYXZhZG9jLWJ1aWxkOiAgICAgICAgICBqYXZhZG9jIGdlbmVyYXRpb24KIAotICAgIEV4YW1wbGUgb2Ygb3ZlcnJpZGluZyB0aGUgdGFyZ2V0IGZvciBwcm9qZWN0IGV4ZWN1dGlvbiBjb3VsZCBsb29rIGxpa2UgCisgICAgRXhhbXBsZSBvZiBvdmVycmlkaW5nIHRoZSB0YXJnZXQgZm9yIHByb2plY3QgZXhlY3V0aW9uIGNvdWxkIGxvb2sgbGlrZQogCiAgICAgICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSI8UFJPSk5BTUU+LWltcGwuamFyIj4KICAgICAgICAgICAgIDxleGVjIGRpcj0iYmluIiBleGVjdXRhYmxlPSJsYXVuY2hlci5leGUiPgpAQCAtODAsMTAgKzgwLDEwIEBACiAgICAgICAgICAgICA8L2V4ZWM+CiAgICAgICAgIDwvdGFyZ2V0PgogCi0gICAgTm90aWNlIHRoYXQgb3ZlcnJpZGRlbiB0YXJnZXQgZGVwZW5kcyBvbiBqYXIgdGFyZ2V0IGFuZCBub3Qgb25seSBvbiAKLSAgICBjb21waWxlIHRhcmdldCBhcyByZWd1bGFyIHJ1biB0YXJnZXQgZG9lcy4gQWdhaW4sIGZvciBsaXN0IG9mIGF2YWlsYWJsZSAKLSAgICBwcm9wZXJ0aWVzIHdoaWNoIHlvdSBjYW4gdXNlIGNoZWNrIHRoZSB0YXJnZXQgeW91IGFyZSBvdmVycmlkaW5nIGluIAotICAgIG5icHJvamVjdC9idWlsZC1pbXBsLnhtbCBmaWxlLiAKKyAgICBOb3RpY2UgdGhhdCBvdmVycmlkZGVuIHRhcmdldCBkZXBlbmRzIG9uIGphciB0YXJnZXQgYW5kIG5vdCBvbmx5IG9uCisgICAgY29tcGlsZSB0YXJnZXQgYXMgcmVndWxhciBydW4gdGFyZ2V0IGRvZXMuIEFnYWluLCBmb3IgbGlzdCBvZiBhdmFpbGFibGUKKyAgICBwcm9wZXJ0aWVzIHdoaWNoIHlvdSBjYW4gdXNlIGNoZWNrIHRoZSB0YXJnZXQgeW91IGFyZSBvdmVycmlkaW5nIGluCisgICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuCiAKICAgICAtLT4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2luc3RhbmNlLXJlc3RhcnQtdGVzdC9TRlNCRHJpdmVyL25icHJvamVjdC9hbnQtZGVwbG95LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2luc3RhbmNlLXJlc3RhcnQtdGVzdC9TRlNCRHJpdmVyL25icHJvamVjdC9hbnQtZGVwbG95LnhtbAppbmRleCAzZDkzZTEwLi5jMzdkODYxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9pbnN0YW5jZS1yZXN0YXJ0LXRlc3QvU0ZTQkRyaXZlci9uYnByb2plY3QvYW50LWRlcGxveS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvaW5zdGFuY2UtcmVzdGFydC10ZXN0L1NGU0JEcml2ZXIvbmJwcm9qZWN0L2FudC1kZXBsb3kueG1sCkBAIC0yNSw3ICsyNSw3IEBACiAgICAgICAgIDx0ZW1wZmlsZSBwcmVmaXg9ImdmdjMiIHByb3BlcnR5PSJnZnYzLnBhc3N3b3JkLmZpbGUiIGRlc3RkaXI9IiR7amF2YS5pby50bXBkaXJ9Ii8+ICA8IS0tIGRvIG5vdCBmb3JnZXQgdG8gZGVsZXRlIHRoaXMhIC0tPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJBU19BRE1JTl9QQVNTV09SRD0ke2dmdjMucGFzc3dvcmR9IiBmaWxlPSIke2dmdjMucGFzc3dvcmQuZmlsZX0iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iLXBhcnNlLXN1bi13ZWIiIGRlcGVuZHM9Ii1pbml0LWNsLWRlcGxveW1lbnQtZW52IiBpZj0ic3VuLndlYi5wcmVzZW50Ij4KICAgICAgICAgPHRlbXBmaWxlIHByZWZpeD0iZ2Z2MyIgcHJvcGVydHk9InRlbXAuc3VuLndlYiIgZGVzdGRpcj0iJHtqYXZhLmlvLnRtcGRpcn0iLz4KICAgICAgICAgPGNvcHkgZmlsZT0iJHtkZXBsb3kuYW50LmRvY2Jhc2UuZGlyfS9XRUItSU5GL3N1bi13ZWIueG1sIiB0b2ZpbGU9IiR7dGVtcC5zdW4ud2VifSIvPgpAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgICAgPHJlcGxhY2V2YWx1ZT48IVtDREFUQVstLT4gPHN1bi13ZWItYXBwXV0+PC9yZXBsYWNldmFsdWU+CiAgICAgICAgIDwvcmVwbGFjZT4KICAgICAgICAgPHhtbHByb3BlcnR5IGZpbGU9IiR7dGVtcC5zdW4ud2VifSIgdmFsaWRhdGU9ImZhbHNlIj4KLSAgICAgICAgPC94bWxwcm9wZXJ0eT4gICAgCisgICAgICAgIDwveG1scHJvcGVydHk+CiAgICAgICAgIDxkZWxldGUgZmlsZT0iJHt0ZW1wLnN1bi53ZWJ9Ii8+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkZXBsb3kuYW50LmNsaWVudC51cmwiIHZhbHVlPSIke2dmdjMudXJsfSR7c3VuLXdlYi1hcHAuY29udGV4dC1yb290fSIvPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0iZGVwbG95LmNvbnRleHQucm9vdC5hcmd1bWVudCIgdmFsdWU9IiZhbXA7Y29udGV4dHJvb3Q9JHtzdW4td2ViLWFwcC5jb250ZXh0LXJvb3R9Ii8+CkBAIC03MSw3ICs3MSw3IEBACiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJmdWxsLmRlcGxveS5hbnQuYXJjaGl2ZSIgbG9jYXRpb249IiR7ZGVwbG95LmFudC5hcmNoaXZlfSIvPgogICAgICAgICA8Z2V0IHNyYz0iJHtnZnYzLmFkbWluLnVybH0vX19hc2FkbWluL2RlcGxveT9wYXRoPSR7ZnVsbC5kZXBsb3kuYW50LmFyY2hpdmV9JHtkZXBsb3kuY29udGV4dC5yb290LmFyZ3VtZW50fSZhbXA7Zm9yY2U9dHJ1ZSZhbXA7bmFtZT0ke2FudC5wcm9qZWN0Lm5hbWV9IgogICAgICAgICAgICAgZGVzdD0iJHtnZnYzLnJlc3VsdHMuZmlsZX0iLz4KLSAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2dmdjMucmVzdWx0cy5maWxlfSIvPiAgICAKKyAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2dmdjMucmVzdWx0cy5maWxlfSIvPgogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgbmFtZT0iLWRlcGxveS13aXRoLXB3IiBpZj0iZ2Z2My5wYXNzd29yZCI+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkRlcGxveWluZyAke2RlcGxveS5hbnQuYXJjaGl2ZX0iLz4KQEAgLTkxLDcgKzkxLDcgQEAKICAgICAgICAgPHRlbXBmaWxlIHByZWZpeD0iZ2Z2MyIgcHJvcGVydHk9ImdmdjMucmVzdWx0cy5maWxlIiBkZXN0ZGlyPSIke2phdmEuaW8udG1wZGlyfSIvPiAgPCEtLSBkbyBub3QgZm9yZ2V0IHRvIGRlbGV0ZSB0aGlzISAtLT4KICAgICAgICAgPGdldCBzcmM9IiR7Z2Z2My5hZG1pbi51cmx9L19fYXNhZG1pbi91bmRlcGxveT9uYW1lPSR7YW50LnByb2plY3QubmFtZX0iCiAgICAgICAgICAgICBkZXN0PSIke2dmdjMucmVzdWx0cy5maWxlfSIvPgotICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Z2Z2My5yZXN1bHRzLmZpbGV9Ii8+ICAgIAorICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Z2Z2My5yZXN1bHRzLmZpbGV9Ii8+CiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBuYW1lPSItdW5kZXBsb3ktd2l0aC1wdyIgaWY9ImdmdjMucGFzc3dvcmQiPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJVbmRlcGxveWluZyAke2RlcGxveS5hbnQuYXJjaGl2ZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2luc3RhbmNlLXJlc3RhcnQtdGVzdC9TRlNCRHJpdmVyL25icHJvamVjdC9idWlsZC1pbXBsLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2luc3RhbmNlLXJlc3RhcnQtdGVzdC9TRlNCRHJpdmVyL25icHJvamVjdC9idWlsZC1pbXBsLnhtbAppbmRleCA2ZGFiMzU5Li44YTYzMTczIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9pbnN0YW5jZS1yZXN0YXJ0LXRlc3QvU0ZTQkRyaXZlci9uYnByb2plY3QvYnVpbGQtaW1wbC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvaW5zdGFuY2UtcmVzdGFydC10ZXN0L1NGU0JEcml2ZXIvbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sCkBAIC00NzcsOSArNDc3LDkgQEAKICAgICA8dGFyZ2V0IG5hbWU9Ii1pbml0LXRhc2tkZWZzIj4KICAgICAgICAgPGZhaWwgdW5sZXNzPSJsaWJzLkNvcHlMaWJzLmNsYXNzcGF0aCI+CiBUaGUgbGlicy5Db3B5TGlicy5jbGFzc3BhdGggcHJvcGVydHkgaXMgbm90IHNldCB1cC4KLVRoaXMgcHJvcGVydHkgbXVzdCBwb2ludCB0byAKK1RoaXMgcHJvcGVydHkgbXVzdCBwb2ludCB0bwogb3JnLW5ldGJlYW5zLW1vZHVsZXMtamF2YS1qMnNlcHJvamVjdC1jb3B5bGlic3Rhc2suamFyIGZpbGUgd2hpY2ggaXMgcGFydAotb2YgTmV0QmVhbnMgSURFIGluc3RhbGxhdGlvbiBhbmQgaXMgdXN1YWxseSBsb2NhdGVkIGF0IAorb2YgTmV0QmVhbnMgSURFIGluc3RhbGxhdGlvbiBhbmQgaXMgdXN1YWxseSBsb2NhdGVkIGF0CiAmbHQ7bmV0YmVhbnNfaW5zdGFsbGF0aW9uJmd0Oy9qYXZhJmx0O3ZlcnNpb24mZ3Q7L2FudC9leHRyYSBmb2xkZXIuCiBFaXRoZXIgb3BlbiB0aGUgcHJvamVjdCBpbiB0aGUgSURFIGFuZCBtYWtlIHN1cmUgQ29weUxpYnMgbGlicmFyeQogZXhpc3RzIG9yIHNldHVwIHRoZSBwcm9wZXJ0eSBtYW51YWxseS4gRm9yIGV4YW1wbGUgbGlrZSB0aGlzOgpAQCAtODU1LDcgKzg1NSw3IEBACiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0LGphdmFkb2MtYnVpbGQsamF2YWRvYy1icm93c2UiIGRlc2NyaXB0aW9uPSJCdWlsZCBKYXZhZG9jLiIgbmFtZT0iamF2YWRvYyIvPgogICAgIDwhLS0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIEpVTklUIENPTVBJTEFUSU9OIFNFQ1RJT04KICAgICAgICAgICAgIC0tPgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCxjb21waWxlIiBpZj0iaGF2ZS50ZXN0cyIgbmFtZT0iLXByZS1wcmUtY29tcGlsZS10ZXN0Ij4KQEAgLTg5NCw3ICs4OTQsNyBAQAogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCxjb21waWxlLC1wcmUtcHJlLWNvbXBpbGUtdGVzdCwtcHJlLWNvbXBpbGUtdGVzdC1zaW5nbGUsLWRvLWNvbXBpbGUtdGVzdC1zaW5nbGUsLXBvc3QtY29tcGlsZS10ZXN0LXNpbmdsZSIgbmFtZT0iY29tcGlsZS10ZXN0LXNpbmdsZSIvPgogICAgIDwhLS0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIEpVTklUIEVYRUNVVElPTiBTRUNUSU9OCiAgICAgICAgICAgICAtLT4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQiIGlmPSJoYXZlLnRlc3RzIiBuYW1lPSItcHJlLXRlc3QtcnVuIj4KQEAgLTkyMSw3ICs5MjEsNyBAQAogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCxjb21waWxlLXRlc3Qtc2luZ2xlLC1wcmUtdGVzdC1ydW4tc2luZ2xlLC1kby10ZXN0LXJ1bi1zaW5nbGUsLXBvc3QtdGVzdC1ydW4tc2luZ2xlIiBkZXNjcmlwdGlvbj0iUnVuIHNpbmdsZSB1bml0IHRlc3QuIiBuYW1lPSJ0ZXN0LXNpbmdsZSIvPgogICAgIDwhLS0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIEpVTklUIERFQlVHR0lORyBTRUNUSU9OCiAgICAgICAgICAgICAtLT4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQsY29tcGlsZS10ZXN0IiBpZj0iaGF2ZS50ZXN0cyIgbmFtZT0iLWRlYnVnLXN0YXJ0LWRlYnVnZ2VlLXRlc3QiPgpAQCAtOTQ3LDcgKzk0Nyw3IEBACiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0LC1wcmUtZGVidWctZml4LC1kby1kZWJ1Zy1maXgtdGVzdCIgaWY9Im5ldGJlYW5zLmhvbWUiIG5hbWU9ImRlYnVnLWZpeC10ZXN0Ii8+CiAgICAgPCEtLQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgQ0xFQU5VUCBTRUNUSU9OCiAgICAgICAgICAgICAtLT4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQiIGlmPSJuby5kaXN0LmVhci5kaXIiIG5hbWU9ImRlcHMtY2xlYW4iIHVubGVzcz0ibm8uZGVwcyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvaW5zdGFuY2UtcmVzdGFydC10ZXN0L1NGU0JEcml2ZXIvc3JjL2phdmEvbmV0L21heC9lZS9zZnNiL1NGU0JEcml2ZXJTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9pbnN0YW5jZS1yZXN0YXJ0LXRlc3QvU0ZTQkRyaXZlci9zcmMvamF2YS9uZXQvbWF4L2VlL3Nmc2IvU0ZTQkRyaXZlclNlcnZsZXQuamF2YQppbmRleCBhMGI2NDlhLi5iMDM2YTI4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9pbnN0YW5jZS1yZXN0YXJ0LXRlc3QvU0ZTQkRyaXZlci9zcmMvamF2YS9uZXQvbWF4L2VlL3Nmc2IvU0ZTQkRyaXZlclNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9pbnN0YW5jZS1yZXN0YXJ0LXRlc3QvU0ZTQkRyaXZlci9zcmMvamF2YS9uZXQvbWF4L2VlL3Nmc2IvU0ZTQkRyaXZlclNlcnZsZXQuamF2YQpAQCAtMzgsOCArMzgsOCBAQAogICovCiBwdWJsaWMgY2xhc3MgU0ZTQkRyaXZlclNlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAKLSAgIAotICAgIC8qKiAKKworICAgIC8qKgogICAgICAqIFByb2Nlc3NlcyByZXF1ZXN0cyBmb3IgYm90aCBIVFRQIDxjb2RlPkdFVDwvY29kZT4gYW5kIDxjb2RlPlBPU1Q8L2NvZGU+IG1ldGhvZHMuCiAgICAgICogQHBhcmFtIHJlcXVlc3Qgc2VydmxldCByZXF1ZXN0CiAgICAgICogQHBhcmFtIHJlc3BvbnNlIHNlcnZsZXQgcmVzcG9uc2UKQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aHRtbD4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aGVhZD4iKTsKLSAgICAgICAgICAgIG91dC5wcmludGxuKCI8dGl0bGU+U2VydmxldCBTRlNCRHJpdmVyU2VydmxldDwvdGl0bGU+Iik7ICAKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8dGl0bGU+U2VydmxldCBTRlNCRHJpdmVyU2VydmxldDwvdGl0bGU+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9oZWFkPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxib2R5PiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoMT5TZXJ2bGV0IFNGU0JEcml2ZXJTZXJ2bGV0IGF0ICIgKyByZXF1ZXN0LmdldENvbnRleHRQYXRoICgpICsgIjwvaDE+Iik7CkBAIC03NSwxMyArNzUsMTMgQEAKIAogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aDE+RnJvbSBzZXNzaW9uIFNGU0JbMV0gTk9UIE5VTEwgPzogIiArICgiIiArIChzZnNiMSAhPSBudWxsKSkgKyAiIDwvaDE+Iik7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoMT5Gcm9tIHNlc3Npb24gU0ZTQlsyXSBOT1QgTlVMTD8gOiAiICsgKCIiICsgKHNmc2IyICE9IG51bGwpKSArICIgPC9oMT4iKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoc2ZzYjEgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIEluaXRpYWxDb250ZXh0IGN0eCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogCiAgICAgICAgICAgICAgICAgc2ZzYjEgPSAoU2ltcGxlU2Vzc2lvbkJlYW4pIGN0eC5sb29rdXAoImphdmE6Z2xvYmFsL1NGU0JEcml2ZXIvU2ltcGxlU2Vzc2lvbkJlYW4iKTsKICAgICAgICAgICAgICAgICBzZnNiMiA9IChTaW1wbGVTZXNzaW9uQmVhbikgY3R4Lmxvb2t1cCgiamF2YTpnbG9iYWwvU0ZTQkRyaXZlci9TaW1wbGVTZXNzaW9uQmVhbiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoMT5DcmVhdGVkIFNGU0JbMV06ICIgKyBzZnNiMS5hc1N0cmluZygpICsgIiA8L2gxPiIpOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aDE+Q3JlYXRlZCBTRlNCWzJdOiAiICsgc2ZzYjIuYXNTdHJpbmcoKSArICIgPC9oMT4iKTsKIApAQCAtMTA5LDEzICsxMDksMTMgQEAKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L2h0bWw+Iik7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBubUV4KSB7CiAgICAgICAgICAgICBubUV4LnByaW50U3RhY2tUcmFjZShvdXQpOwotICAgICAgICB9IGZpbmFsbHkgeyAKKyAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIG91dC5jbG9zZSgpOwogICAgICAgICB9Ci0gICAgfSAKKyAgICB9CiAKICAgICAvLyA8ZWRpdG9yLWZvbGQgZGVmYXVsdHN0YXRlPSJjb2xsYXBzZWQiIGRlc2M9Ikh0dHBTZXJ2bGV0IG1ldGhvZHMuIENsaWNrIG9uIHRoZSArIHNpZ24gb24gdGhlIGxlZnQgdG8gZWRpdCB0aGUgY29kZS4iPgotICAgIC8qKiAKKyAgICAvKioKICAgICAgKiBIYW5kbGVzIHRoZSBIVFRQIDxjb2RlPkdFVDwvY29kZT4gbWV0aG9kLgogICAgICAqIEBwYXJhbSByZXF1ZXN0IHNlcnZsZXQgcmVxdWVzdAogICAgICAqIEBwYXJhbSByZXNwb25zZSBzZXJ2bGV0IHJlc3BvbnNlCkBAIC0xMjYsOSArMTI2LDkgQEAKICAgICBwcm90ZWN0ZWQgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBwcm9jZXNzUmVxdWVzdChyZXF1ZXN0LCByZXNwb25zZSk7Ci0gICAgfSAKKyAgICB9CiAKLSAgICAvKiogCisgICAgLyoqCiAgICAgICogSGFuZGxlcyB0aGUgSFRUUCA8Y29kZT5QT1NUPC9jb2RlPiBtZXRob2QuCiAgICAgICogQHBhcmFtIHJlcXVlc3Qgc2VydmxldCByZXF1ZXN0CiAgICAgICogQHBhcmFtIHJlc3BvbnNlIHNlcnZsZXQgcmVzcG9uc2UKQEAgLTE0MSw3ICsxNDEsNyBAQAogICAgICAgICBwcm9jZXNzUmVxdWVzdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgLyoqIAorICAgIC8qKgogICAgICAqIFJldHVybnMgYSBzaG9ydCBkZXNjcmlwdGlvbiBvZiB0aGUgc2VydmxldC4KICAgICAgKiBAcmV0dXJuIGEgU3RyaW5nIGNvbnRhaW5pbmcgc2VydmxldCBkZXNjcmlwdGlvbgogICAgICAqLwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvaW5zdGFuY2UtcmVzdGFydC10ZXN0L3NyYy9tYWluL2phdmEvY29tL2FjbWUvSHR0cENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvaW5zdGFuY2UtcmVzdGFydC10ZXN0L3NyYy9tYWluL2phdmEvY29tL2FjbWUvSHR0cENsaWVudC5qYXZhCmluZGV4IGU5ZDM5MWIuLmY0ODc2ZjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2luc3RhbmNlLXJlc3RhcnQtdGVzdC9zcmMvbWFpbi9qYXZhL2NvbS9hY21lL0h0dHBDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9pbnN0YW5jZS1yZXN0YXJ0LXRlc3Qvc3JjL21haW4vamF2YS9jb20vYWNtZS9IdHRwQ2xpZW50LmphdmEKQEAgLTExNyw3ICsxMTcsNyBAQAogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZhaWxlZCAiICsgaW5mbyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KQEAgLTEzNSw3ICsxMzUsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgaWYgKHRtcFNlc3NTdGF0ZS5nZXRKc2Vzc2lvbkNvb2tpZSgpID09IG51bGwpIHsKLSAgICAgICAgICAgIHRtcFNlc3NTdGF0ZS5zZXRKc2Vzc2lvbkNvb2tpZShjb29raWUpOyAgICAKKyAgICAgICAgICAgIHRtcFNlc3NTdGF0ZS5zZXRKc2Vzc2lvbkNvb2tpZShjb29raWUpOwogICAgICAgICB9CiAgICAgICAgIGludCBjb2RlID0gKChIdHRwVVJMQ29ubmVjdGlvbikgdWMpLmdldFJlc3BvbnNlQ29kZSgpOwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHVjLmdldElucHV0U3RyZWFtKCk7CkBAIC0yMDIsNyArMjAyLDcgQEAKICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiBwcmV2LmdldEh0dHBDb3VudGVyKCkgPCBjdXJyZW50LmdldEh0dHBDb3VudGVyKCk7CiAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgcHJldi5nZXRFamIxQ291bnRlcigpIDwgY3VycmVudC5nZXRFamIxQ291bnRlcigpOwogICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIHByZXYuZ2V0RWpiMkNvdW50ZXIoKSA8IGN1cnJlbnQuZ2V0RWpiMkNvdW50ZXIoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9pbnN0YW5jZS1yZXN0YXJ0LXRlc3Qvc3JjL3Rlc3QvamF2YS9jb20vYWNtZS9BcHBUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9pbnN0YW5jZS1yZXN0YXJ0LXRlc3Qvc3JjL3Rlc3QvamF2YS9jb20vYWNtZS9BcHBUZXN0LmphdmEKaW5kZXggNTBhMTE4My4uYThhZmM2NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvaW5zdGFuY2UtcmVzdGFydC10ZXN0L3NyYy90ZXN0L2phdmEvY29tL2FjbWUvQXBwVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL2luc3RhbmNlLXJlc3RhcnQtdGVzdC9zcmMvdGVzdC9qYXZhL2NvbS9hY21lL0FwcFRlc3QuamF2YQpAQCAtMjMsNyArMjMsNyBAQAogLyoqCiAgKiBVbml0IHRlc3QgZm9yIHNpbXBsZSBBcHAuCiAgKi8KLXB1YmxpYyBjbGFzcyBBcHBUZXN0IAorcHVibGljIGNsYXNzIEFwcFRlc3QKICAgICBleHRlbmRzIFRlc3RDYXNlCiB7CiAgICAgLyoqCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9tZXRob2QtY2hlY2twb2ludC9TRlNCTWV0aG9kQ2hlY2twb2ludERyaXZlci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9tZXRob2QtY2hlY2twb2ludC9TRlNCTWV0aG9kQ2hlY2twb2ludERyaXZlci9idWlsZC54bWwKaW5kZXggMmFiZjU1ZC4uMDI0NTA5OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvbWV0aG9kLWNoZWNrcG9pbnQvU0ZTQk1ldGhvZENoZWNrcG9pbnREcml2ZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL21ldGhvZC1jaGVja3BvaW50L1NGU0JNZXRob2RDaGVja3BvaW50RHJpdmVyL2J1aWxkLnhtbApAQCAtMzAsMjcgKzMwLDI3IEBACiAgICAgPGltcG9ydCBmaWxlPSJuYnByb2plY3QvYnVpbGQtaW1wbC54bWwiLz4KICAgICA8IS0tCiAKLSAgICBUaGVyZSBleGlzdCBzZXZlcmFsIHRhcmdldHMgd2hpY2ggYXJlIGJ5IGRlZmF1bHQgZW1wdHkgYW5kIHdoaWNoIGNhbiBiZSAKLSAgICB1c2VkIGZvciBleGVjdXRpb24gb2YgeW91ciB0YXNrcy4gVGhlc2UgdGFyZ2V0cyBhcmUgdXN1YWxseSBleGVjdXRlZCAKLSAgICBiZWZvcmUgYW5kIGFmdGVyIHNvbWUgbWFpbiB0YXJnZXRzLiBUaGV5IGFyZTogCisgICAgVGhlcmUgZXhpc3Qgc2V2ZXJhbCB0YXJnZXRzIHdoaWNoIGFyZSBieSBkZWZhdWx0IGVtcHR5IGFuZCB3aGljaCBjYW4gYmUKKyAgICB1c2VkIGZvciBleGVjdXRpb24gb2YgeW91ciB0YXNrcy4gVGhlc2UgdGFyZ2V0cyBhcmUgdXN1YWxseSBleGVjdXRlZAorICAgIGJlZm9yZSBhbmQgYWZ0ZXIgc29tZSBtYWluIHRhcmdldHMuIFRoZXkgYXJlOgogCi0gICAgICAtcHJlLWluaXQ6ICAgICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGluaXRpYWxpemF0aW9uIG9mIHByb2plY3QgcHJvcGVydGllcyAKLSAgICAgIC1wb3N0LWluaXQ6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBpbml0aWFsaXphdGlvbiBvZiBwcm9qZWN0IHByb3BlcnRpZXMgCi0gICAgICAtcHJlLWNvbXBpbGU6ICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGphdmFjIGNvbXBpbGF0aW9uIAotICAgICAgLXBvc3QtY29tcGlsZTogICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGphdmFjIGNvbXBpbGF0aW9uIAorICAgICAgLXByZS1pbml0OiAgICAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBpbml0aWFsaXphdGlvbiBvZiBwcm9qZWN0IHByb3BlcnRpZXMKKyAgICAgIC1wb3N0LWluaXQ6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBpbml0aWFsaXphdGlvbiBvZiBwcm9qZWN0IHByb3BlcnRpZXMKKyAgICAgIC1wcmUtY29tcGlsZTogICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgamF2YWMgY29tcGlsYXRpb24KKyAgICAgIC1wb3N0LWNvbXBpbGU6ICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBqYXZhYyBjb21waWxhdGlvbgogICAgICAgLXByZS1jb21waWxlLXNpbmdsZTogICAgICAgY2FsbGVkIGJlZm9yZSBqYXZhYyBjb21waWxhdGlvbiBvZiBzaW5nbGUgZmlsZQogICAgICAgLXBvc3QtY29tcGlsZS1zaW5nbGU6ICAgICAgY2FsbGVkIGFmdGVyIGphdmFjIGNvbXBpbGF0aW9uIG9mIHNpbmdsZSBmaWxlCiAgICAgICAtcHJlLWNvbXBpbGUtdGVzdDogICAgICAgICBjYWxsZWQgYmVmb3JlIGphdmFjIGNvbXBpbGF0aW9uIG9mIEpVbml0IHRlc3RzCiAgICAgICAtcG9zdC1jb21waWxlLXRlc3Q6ICAgICAgICBjYWxsZWQgYWZ0ZXIgamF2YWMgY29tcGlsYXRpb24gb2YgSlVuaXQgdGVzdHMKICAgICAgIC1wcmUtY29tcGlsZS10ZXN0LXNpbmdsZTogIGNhbGxlZCBiZWZvcmUgamF2YWMgY29tcGlsYXRpb24gb2Ygc2luZ2xlIEpVbml0IHRlc3QKICAgICAgIC1wb3N0LWNvbXBpbGUtdGVzdC1zaW5nbGU6IGNhbGxlZCBhZnRlciBqYXZhYyBjb21waWxhdGlvbiBvZiBzaW5nbGUgSlV1bml0IHRlc3QKLSAgICAgIC1wcmUtZGlzdDogICAgICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgYXJjaGl2ZSBidWlsZGluZyAKLSAgICAgIC1wb3N0LWRpc3Q6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBhcmNoaXZlIGJ1aWxkaW5nIAotICAgICAgLXBvc3QtY2xlYW46ICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGNsZWFuaW5nIGJ1aWxkIHByb2R1Y3RzIAorICAgICAgLXByZS1kaXN0OiAgICAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBhcmNoaXZlIGJ1aWxkaW5nCisgICAgICAtcG9zdC1kaXN0OiAgICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgYXJjaGl2ZSBidWlsZGluZworICAgICAgLXBvc3QtY2xlYW46ICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGNsZWFuaW5nIGJ1aWxkIHByb2R1Y3RzCiAgICAgICAtcHJlLXJ1bi1kZXBsb3k6ICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGRlcGxveWluZwogICAgICAgLXBvc3QtcnVuLWRlcGxveTogICAgICAgICAgY2FsbGVkIGFmdGVyIGRlcGxveWluZwogCi0gICAgRXhhbXBsZSBvZiBwbHVnaW5nIGFuIG9iZnVzY2F0b3IgYWZ0ZXIgdGhlIGNvbXBpbGF0aW9uIGNvdWxkIGxvb2sgbGlrZSAKKyAgICBFeGFtcGxlIG9mIHBsdWdpbmcgYW4gb2JmdXNjYXRvciBhZnRlciB0aGUgY29tcGlsYXRpb24gY291bGQgbG9vayBsaWtlCiAKICAgICAgICAgPHRhcmdldCBuYW1lPSItcG9zdC1jb21waWxlIj4KICAgICAgICAgICAgIDxvYmZ1c2NhdGU+CkBAIC01OCwyMSArNTgsMjEgQEAKICAgICAgICAgICAgIDwvb2JmdXNjYXRlPgogICAgICAgICA8L3RhcmdldD4KIAotICAgIEZvciBsaXN0IG9mIGF2YWlsYWJsZSBwcm9wZXJ0aWVzIGNoZWNrIHRoZSBpbXBvcnRlZCAKLSAgICBuYnByb2plY3QvYnVpbGQtaW1wbC54bWwgZmlsZS4gCisgICAgRm9yIGxpc3Qgb2YgYXZhaWxhYmxlIHByb3BlcnRpZXMgY2hlY2sgdGhlIGltcG9ydGVkCisgICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuCiAKIAogICAgIE90aGVyIHdheSBob3cgdG8gY3VzdG9taXplIHRoZSBidWlsZCBpcyBieSBvdmVycmlkaW5nIGV4aXN0aW5nIG1haW4gdGFyZ2V0cy4KLSAgICBUaGUgdGFyZ2V0IG9mIGludGVyZXN0IGFyZTogCisgICAgVGhlIHRhcmdldCBvZiBpbnRlcmVzdCBhcmU6CiAKICAgICAgIGluaXQtbWFjcm9kZWYtamF2YWM6ICAgIGRlZmluZXMgbWFjcm8gZm9yIGphdmFjIGNvbXBpbGF0aW9uCiAgICAgICBpbml0LW1hY3JvZGVmLWp1bml0OiAgIGRlZmluZXMgbWFjcm8gZm9yIGp1bml0IGV4ZWN1dGlvbgogICAgICAgaW5pdC1tYWNyb2RlZi1kZWJ1ZzogICAgZGVmaW5lcyBtYWNybyBmb3IgY2xhc3MgZGVidWdnaW5nCiAgICAgICBkby1kaXN0OiAgICAgICAgICAgICAgICBhcmNoaXZlIGJ1aWxkaW5nCi0gICAgICBydW46ICAgICAgICAgICAgICAgICAgICBleGVjdXRpb24gb2YgcHJvamVjdCAKLSAgICAgIGphdmFkb2MtYnVpbGQ6ICAgICAgICAgIGphdmFkb2MgZ2VuZXJhdGlvbiAKKyAgICAgIHJ1bjogICAgICAgICAgICAgICAgICAgIGV4ZWN1dGlvbiBvZiBwcm9qZWN0CisgICAgICBqYXZhZG9jLWJ1aWxkOiAgICAgICAgICBqYXZhZG9jIGdlbmVyYXRpb24KIAotICAgIEV4YW1wbGUgb2Ygb3ZlcnJpZGluZyB0aGUgdGFyZ2V0IGZvciBwcm9qZWN0IGV4ZWN1dGlvbiBjb3VsZCBsb29rIGxpa2UgCisgICAgRXhhbXBsZSBvZiBvdmVycmlkaW5nIHRoZSB0YXJnZXQgZm9yIHByb2plY3QgZXhlY3V0aW9uIGNvdWxkIGxvb2sgbGlrZQogCiAgICAgICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSI8UFJPSk5BTUU+LWltcGwuamFyIj4KICAgICAgICAgICAgIDxleGVjIGRpcj0iYmluIiBleGVjdXRhYmxlPSJsYXVuY2hlci5leGUiPgpAQCAtODAsMTAgKzgwLDEwIEBACiAgICAgICAgICAgICA8L2V4ZWM+CiAgICAgICAgIDwvdGFyZ2V0PgogCi0gICAgTm90aWNlIHRoYXQgb3ZlcnJpZGRlbiB0YXJnZXQgZGVwZW5kcyBvbiBqYXIgdGFyZ2V0IGFuZCBub3Qgb25seSBvbiAKLSAgICBjb21waWxlIHRhcmdldCBhcyByZWd1bGFyIHJ1biB0YXJnZXQgZG9lcy4gQWdhaW4sIGZvciBsaXN0IG9mIGF2YWlsYWJsZSAKLSAgICBwcm9wZXJ0aWVzIHdoaWNoIHlvdSBjYW4gdXNlIGNoZWNrIHRoZSB0YXJnZXQgeW91IGFyZSBvdmVycmlkaW5nIGluIAotICAgIG5icHJvamVjdC9idWlsZC1pbXBsLnhtbCBmaWxlLiAKKyAgICBOb3RpY2UgdGhhdCBvdmVycmlkZGVuIHRhcmdldCBkZXBlbmRzIG9uIGphciB0YXJnZXQgYW5kIG5vdCBvbmx5IG9uCisgICAgY29tcGlsZSB0YXJnZXQgYXMgcmVndWxhciBydW4gdGFyZ2V0IGRvZXMuIEFnYWluLCBmb3IgbGlzdCBvZiBhdmFpbGFibGUKKyAgICBwcm9wZXJ0aWVzIHdoaWNoIHlvdSBjYW4gdXNlIGNoZWNrIHRoZSB0YXJnZXQgeW91IGFyZSBvdmVycmlkaW5nIGluCisgICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuCiAKICAgICAtLT4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL21ldGhvZC1jaGVja3BvaW50L1NGU0JNZXRob2RDaGVja3BvaW50RHJpdmVyL25icHJvamVjdC9hbnQtZGVwbG95LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL21ldGhvZC1jaGVja3BvaW50L1NGU0JNZXRob2RDaGVja3BvaW50RHJpdmVyL25icHJvamVjdC9hbnQtZGVwbG95LnhtbAppbmRleCAzZDkzZTEwLi5jMzdkODYxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9tZXRob2QtY2hlY2twb2ludC9TRlNCTWV0aG9kQ2hlY2twb2ludERyaXZlci9uYnByb2plY3QvYW50LWRlcGxveS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvbWV0aG9kLWNoZWNrcG9pbnQvU0ZTQk1ldGhvZENoZWNrcG9pbnREcml2ZXIvbmJwcm9qZWN0L2FudC1kZXBsb3kueG1sCkBAIC0yNSw3ICsyNSw3IEBACiAgICAgICAgIDx0ZW1wZmlsZSBwcmVmaXg9ImdmdjMiIHByb3BlcnR5PSJnZnYzLnBhc3N3b3JkLmZpbGUiIGRlc3RkaXI9IiR7amF2YS5pby50bXBkaXJ9Ii8+ICA8IS0tIGRvIG5vdCBmb3JnZXQgdG8gZGVsZXRlIHRoaXMhIC0tPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJBU19BRE1JTl9QQVNTV09SRD0ke2dmdjMucGFzc3dvcmR9IiBmaWxlPSIke2dmdjMucGFzc3dvcmQuZmlsZX0iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iLXBhcnNlLXN1bi13ZWIiIGRlcGVuZHM9Ii1pbml0LWNsLWRlcGxveW1lbnQtZW52IiBpZj0ic3VuLndlYi5wcmVzZW50Ij4KICAgICAgICAgPHRlbXBmaWxlIHByZWZpeD0iZ2Z2MyIgcHJvcGVydHk9InRlbXAuc3VuLndlYiIgZGVzdGRpcj0iJHtqYXZhLmlvLnRtcGRpcn0iLz4KICAgICAgICAgPGNvcHkgZmlsZT0iJHtkZXBsb3kuYW50LmRvY2Jhc2UuZGlyfS9XRUItSU5GL3N1bi13ZWIueG1sIiB0b2ZpbGU9IiR7dGVtcC5zdW4ud2VifSIvPgpAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgICAgPHJlcGxhY2V2YWx1ZT48IVtDREFUQVstLT4gPHN1bi13ZWItYXBwXV0+PC9yZXBsYWNldmFsdWU+CiAgICAgICAgIDwvcmVwbGFjZT4KICAgICAgICAgPHhtbHByb3BlcnR5IGZpbGU9IiR7dGVtcC5zdW4ud2VifSIgdmFsaWRhdGU9ImZhbHNlIj4KLSAgICAgICAgPC94bWxwcm9wZXJ0eT4gICAgCisgICAgICAgIDwveG1scHJvcGVydHk+CiAgICAgICAgIDxkZWxldGUgZmlsZT0iJHt0ZW1wLnN1bi53ZWJ9Ii8+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkZXBsb3kuYW50LmNsaWVudC51cmwiIHZhbHVlPSIke2dmdjMudXJsfSR7c3VuLXdlYi1hcHAuY29udGV4dC1yb290fSIvPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0iZGVwbG95LmNvbnRleHQucm9vdC5hcmd1bWVudCIgdmFsdWU9IiZhbXA7Y29udGV4dHJvb3Q9JHtzdW4td2ViLWFwcC5jb250ZXh0LXJvb3R9Ii8+CkBAIC03MSw3ICs3MSw3IEBACiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJmdWxsLmRlcGxveS5hbnQuYXJjaGl2ZSIgbG9jYXRpb249IiR7ZGVwbG95LmFudC5hcmNoaXZlfSIvPgogICAgICAgICA8Z2V0IHNyYz0iJHtnZnYzLmFkbWluLnVybH0vX19hc2FkbWluL2RlcGxveT9wYXRoPSR7ZnVsbC5kZXBsb3kuYW50LmFyY2hpdmV9JHtkZXBsb3kuY29udGV4dC5yb290LmFyZ3VtZW50fSZhbXA7Zm9yY2U9dHJ1ZSZhbXA7bmFtZT0ke2FudC5wcm9qZWN0Lm5hbWV9IgogICAgICAgICAgICAgZGVzdD0iJHtnZnYzLnJlc3VsdHMuZmlsZX0iLz4KLSAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2dmdjMucmVzdWx0cy5maWxlfSIvPiAgICAKKyAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2dmdjMucmVzdWx0cy5maWxlfSIvPgogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgbmFtZT0iLWRlcGxveS13aXRoLXB3IiBpZj0iZ2Z2My5wYXNzd29yZCI+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkRlcGxveWluZyAke2RlcGxveS5hbnQuYXJjaGl2ZX0iLz4KQEAgLTkxLDcgKzkxLDcgQEAKICAgICAgICAgPHRlbXBmaWxlIHByZWZpeD0iZ2Z2MyIgcHJvcGVydHk9ImdmdjMucmVzdWx0cy5maWxlIiBkZXN0ZGlyPSIke2phdmEuaW8udG1wZGlyfSIvPiAgPCEtLSBkbyBub3QgZm9yZ2V0IHRvIGRlbGV0ZSB0aGlzISAtLT4KICAgICAgICAgPGdldCBzcmM9IiR7Z2Z2My5hZG1pbi51cmx9L19fYXNhZG1pbi91bmRlcGxveT9uYW1lPSR7YW50LnByb2plY3QubmFtZX0iCiAgICAgICAgICAgICBkZXN0PSIke2dmdjMucmVzdWx0cy5maWxlfSIvPgotICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Z2Z2My5yZXN1bHRzLmZpbGV9Ii8+ICAgIAorICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Z2Z2My5yZXN1bHRzLmZpbGV9Ii8+CiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBuYW1lPSItdW5kZXBsb3ktd2l0aC1wdyIgaWY9ImdmdjMucGFzc3dvcmQiPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJVbmRlcGxveWluZyAke2RlcGxveS5hbnQuYXJjaGl2ZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL21ldGhvZC1jaGVja3BvaW50L1NGU0JNZXRob2RDaGVja3BvaW50RHJpdmVyL25icHJvamVjdC9idWlsZC1pbXBsLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL21ldGhvZC1jaGVja3BvaW50L1NGU0JNZXRob2RDaGVja3BvaW50RHJpdmVyL25icHJvamVjdC9idWlsZC1pbXBsLnhtbAppbmRleCA5ZDY3ODEyLi5lNzUyMjEzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9tZXRob2QtY2hlY2twb2ludC9TRlNCTWV0aG9kQ2hlY2twb2ludERyaXZlci9uYnByb2plY3QvYnVpbGQtaW1wbC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvbWV0aG9kLWNoZWNrcG9pbnQvU0ZTQk1ldGhvZENoZWNrcG9pbnREcml2ZXIvbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sCkBAIC00NzcsOSArNDc3LDkgQEAKICAgICA8dGFyZ2V0IG5hbWU9Ii1pbml0LXRhc2tkZWZzIj4KICAgICAgICAgPGZhaWwgdW5sZXNzPSJsaWJzLkNvcHlMaWJzLmNsYXNzcGF0aCI+CiBUaGUgbGlicy5Db3B5TGlicy5jbGFzc3BhdGggcHJvcGVydHkgaXMgbm90IHNldCB1cC4KLVRoaXMgcHJvcGVydHkgbXVzdCBwb2ludCB0byAKK1RoaXMgcHJvcGVydHkgbXVzdCBwb2ludCB0bwogb3JnLW5ldGJlYW5zLW1vZHVsZXMtamF2YS1qMnNlcHJvamVjdC1jb3B5bGlic3Rhc2suamFyIGZpbGUgd2hpY2ggaXMgcGFydAotb2YgTmV0QmVhbnMgSURFIGluc3RhbGxhdGlvbiBhbmQgaXMgdXN1YWxseSBsb2NhdGVkIGF0IAorb2YgTmV0QmVhbnMgSURFIGluc3RhbGxhdGlvbiBhbmQgaXMgdXN1YWxseSBsb2NhdGVkIGF0CiAmbHQ7bmV0YmVhbnNfaW5zdGFsbGF0aW9uJmd0Oy9qYXZhJmx0O3ZlcnNpb24mZ3Q7L2FudC9leHRyYSBmb2xkZXIuCiBFaXRoZXIgb3BlbiB0aGUgcHJvamVjdCBpbiB0aGUgSURFIGFuZCBtYWtlIHN1cmUgQ29weUxpYnMgbGlicmFyeQogZXhpc3RzIG9yIHNldHVwIHRoZSBwcm9wZXJ0eSBtYW51YWxseS4gRm9yIGV4YW1wbGUgbGlrZSB0aGlzOgpAQCAtODU1LDcgKzg1NSw3IEBACiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0LGphdmFkb2MtYnVpbGQsamF2YWRvYy1icm93c2UiIGRlc2NyaXB0aW9uPSJCdWlsZCBKYXZhZG9jLiIgbmFtZT0iamF2YWRvYyIvPgogICAgIDwhLS0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIEpVTklUIENPTVBJTEFUSU9OIFNFQ1RJT04KICAgICAgICAgICAgIC0tPgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCxjb21waWxlIiBpZj0iaGF2ZS50ZXN0cyIgbmFtZT0iLXByZS1wcmUtY29tcGlsZS10ZXN0Ij4KQEAgLTg5NCw3ICs4OTQsNyBAQAogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCxjb21waWxlLC1wcmUtcHJlLWNvbXBpbGUtdGVzdCwtcHJlLWNvbXBpbGUtdGVzdC1zaW5nbGUsLWRvLWNvbXBpbGUtdGVzdC1zaW5nbGUsLXBvc3QtY29tcGlsZS10ZXN0LXNpbmdsZSIgbmFtZT0iY29tcGlsZS10ZXN0LXNpbmdsZSIvPgogICAgIDwhLS0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIEpVTklUIEVYRUNVVElPTiBTRUNUSU9OCiAgICAgICAgICAgICAtLT4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQiIGlmPSJoYXZlLnRlc3RzIiBuYW1lPSItcHJlLXRlc3QtcnVuIj4KQEAgLTkyMSw3ICs5MjEsNyBAQAogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCxjb21waWxlLXRlc3Qtc2luZ2xlLC1wcmUtdGVzdC1ydW4tc2luZ2xlLC1kby10ZXN0LXJ1bi1zaW5nbGUsLXBvc3QtdGVzdC1ydW4tc2luZ2xlIiBkZXNjcmlwdGlvbj0iUnVuIHNpbmdsZSB1bml0IHRlc3QuIiBuYW1lPSJ0ZXN0LXNpbmdsZSIvPgogICAgIDwhLS0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIEpVTklUIERFQlVHR0lORyBTRUNUSU9OCiAgICAgICAgICAgICAtLT4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQsY29tcGlsZS10ZXN0IiBpZj0iaGF2ZS50ZXN0cyIgbmFtZT0iLWRlYnVnLXN0YXJ0LWRlYnVnZ2VlLXRlc3QiPgpAQCAtOTQ3LDcgKzk0Nyw3IEBACiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0LC1wcmUtZGVidWctZml4LC1kby1kZWJ1Zy1maXgtdGVzdCIgaWY9Im5ldGJlYW5zLmhvbWUiIG5hbWU9ImRlYnVnLWZpeC10ZXN0Ii8+CiAgICAgPCEtLQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgQ0xFQU5VUCBTRUNUSU9OCiAgICAgICAgICAgICAtLT4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQiIGlmPSJuby5kaXN0LmVhci5kaXIiIG5hbWU9ImRlcHMtY2xlYW4iIHVubGVzcz0ibm8uZGVwcyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvbWV0aG9kLWNoZWNrcG9pbnQvU0ZTQk1ldGhvZENoZWNrcG9pbnREcml2ZXIvc3JjL2phdmEvbmV0L21heC9lZS9zZnNiL1NGU0JEcml2ZXJTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9tZXRob2QtY2hlY2twb2ludC9TRlNCTWV0aG9kQ2hlY2twb2ludERyaXZlci9zcmMvamF2YS9uZXQvbWF4L2VlL3Nmc2IvU0ZTQkRyaXZlclNlcnZsZXQuamF2YQppbmRleCBjNDA4ZmRkLi5jMTFiYWZhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9tZXRob2QtY2hlY2twb2ludC9TRlNCTWV0aG9kQ2hlY2twb2ludERyaXZlci9zcmMvamF2YS9uZXQvbWF4L2VlL3Nmc2IvU0ZTQkRyaXZlclNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9tZXRob2QtY2hlY2twb2ludC9TRlNCTWV0aG9kQ2hlY2twb2ludERyaXZlci9zcmMvamF2YS9uZXQvbWF4L2VlL3Nmc2IvU0ZTQkRyaXZlclNlcnZsZXQuamF2YQpAQCAtMzgsOCArMzgsOCBAQAogICovCiBwdWJsaWMgY2xhc3MgU0ZTQkRyaXZlclNlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAKLSAgIAotICAgIC8qKiAKKworICAgIC8qKgogICAgICAqIFByb2Nlc3NlcyByZXF1ZXN0cyBmb3IgYm90aCBIVFRQIDxjb2RlPkdFVDwvY29kZT4gYW5kIDxjb2RlPlBPU1Q8L2NvZGU+IG1ldGhvZHMuCiAgICAgICogQHBhcmFtIHJlcXVlc3Qgc2VydmxldCByZXF1ZXN0CiAgICAgICogQHBhcmFtIHJlc3BvbnNlIHNlcnZsZXQgcmVzcG9uc2UKQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aHRtbD4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aGVhZD4iKTsKLSAgICAgICAgICAgIG91dC5wcmludGxuKCI8dGl0bGU+U2VydmxldCBTRlNCRHJpdmVyU2VydmxldDwvdGl0bGU+Iik7ICAKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8dGl0bGU+U2VydmxldCBTRlNCRHJpdmVyU2VydmxldDwvdGl0bGU+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9oZWFkPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxib2R5PiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoMT5TZXJ2bGV0IFNGU0JEcml2ZXJTZXJ2bGV0IGF0ICIgKyByZXF1ZXN0LmdldENvbnRleHRQYXRoICgpICsgIjwvaDE+Iik7CkBAIC03NiwxMyArNzYsMTMgQEAKIAogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aDE+RnJvbSBzZXNzaW9uIFNGU0JbMV0gTk9UIE5VTEwgPzogIiArICgiIiArIChzZnNiMSAhPSBudWxsKSkgKyAiIDwvaDE+Iik7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoMT5Gcm9tIHNlc3Npb24gU0ZTQlsyXSBOT1QgTlVMTD8gOiAiICsgKCIiICsgKHNmc2IyICE9IG51bGwpKSArICIgPC9oMT4iKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoc2ZzYjEgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIEluaXRpYWxDb250ZXh0IGN0eCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogCiAgICAgICAgICAgICAgICAgc2ZzYjEgPSAoU2ltcGxlU2Vzc2lvbkJlYW4pIGN0eC5sb29rdXAoImphdmE6Z2xvYmFsL1NGU0JNZXRob2RDaGVja3BvaW50RHJpdmVyL1NpbXBsZVNlc3Npb25CZWFuIik7CiAgICAgICAgICAgICAgICAgc2ZzYjIgPSAoQ2hlY2twb2ludGVkQmVhbikgY3R4Lmxvb2t1cCgiamF2YTpnbG9iYWwvU0ZTQk1ldGhvZENoZWNrcG9pbnREcml2ZXIvQ2hlY2twb2ludGVkQmVhbiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoMT5DcmVhdGVkIFNGU0JbMV06ICIgKyBzZnNiMS5hc1N0cmluZygpICsgIiA8L2gxPiIpOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aDE+Q3JlYXRlZCBTRlNCWzJdOiAiICsgc2ZzYjIuYXNTdHJpbmcoKSArICIgPC9oMT4iKTsKIApAQCAtMTEzLDEzICsxMTMsMTMgQEAKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L2h0bWw+Iik7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBubUV4KSB7CiAgICAgICAgICAgICBubUV4LnByaW50U3RhY2tUcmFjZShvdXQpOwotICAgICAgICB9IGZpbmFsbHkgeyAKKyAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIG91dC5jbG9zZSgpOwogICAgICAgICB9Ci0gICAgfSAKKyAgICB9CiAKICAgICAvLyA8ZWRpdG9yLWZvbGQgZGVmYXVsdHN0YXRlPSJjb2xsYXBzZWQiIGRlc2M9Ikh0dHBTZXJ2bGV0IG1ldGhvZHMuIENsaWNrIG9uIHRoZSArIHNpZ24gb24gdGhlIGxlZnQgdG8gZWRpdCB0aGUgY29kZS4iPgotICAgIC8qKiAKKyAgICAvKioKICAgICAgKiBIYW5kbGVzIHRoZSBIVFRQIDxjb2RlPkdFVDwvY29kZT4gbWV0aG9kLgogICAgICAqIEBwYXJhbSByZXF1ZXN0IHNlcnZsZXQgcmVxdWVzdAogICAgICAqIEBwYXJhbSByZXNwb25zZSBzZXJ2bGV0IHJlc3BvbnNlCkBAIC0xMzAsOSArMTMwLDkgQEAKICAgICBwcm90ZWN0ZWQgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBwcm9jZXNzUmVxdWVzdChyZXF1ZXN0LCByZXNwb25zZSk7Ci0gICAgfSAKKyAgICB9CiAKLSAgICAvKiogCisgICAgLyoqCiAgICAgICogSGFuZGxlcyB0aGUgSFRUUCA8Y29kZT5QT1NUPC9jb2RlPiBtZXRob2QuCiAgICAgICogQHBhcmFtIHJlcXVlc3Qgc2VydmxldCByZXF1ZXN0CiAgICAgICogQHBhcmFtIHJlc3BvbnNlIHNlcnZsZXQgcmVzcG9uc2UKQEAgLTE0NSw3ICsxNDUsNyBAQAogICAgICAgICBwcm9jZXNzUmVxdWVzdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgLyoqIAorICAgIC8qKgogICAgICAqIFJldHVybnMgYSBzaG9ydCBkZXNjcmlwdGlvbiBvZiB0aGUgc2VydmxldC4KICAgICAgKiBAcmV0dXJuIGEgU3RyaW5nIGNvbnRhaW5pbmcgc2VydmxldCBkZXNjcmlwdGlvbgogICAgICAqLwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvbWV0aG9kLWNoZWNrcG9pbnQvc3JjL21haW4vamF2YS9jb20vYWNtZS9IdHRwQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9tZXRob2QtY2hlY2twb2ludC9zcmMvbWFpbi9qYXZhL2NvbS9hY21lL0h0dHBDbGllbnQuamF2YQppbmRleCAwMTUwMmJkLi5mODQwMTk0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9tZXRob2QtY2hlY2twb2ludC9zcmMvbWFpbi9qYXZhL2NvbS9hY21lL0h0dHBDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9tZXRob2QtY2hlY2twb2ludC9zcmMvbWFpbi9qYXZhL2NvbS9hY21lL0h0dHBDbGllbnQuamF2YQpAQCAtNzIsOSArNzIsOSBAQAogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyBmb3IgdGhlICIgKyBpICsgIiB0aW1lLi4uLiIpOwogICAgICAgICAgICAgICAgIHUgPSBuZXcgVVJMKHVybCk7CiAgICAgICAgICAgICAgICAgdWMgPSB1Lm9wZW5Db25uZWN0aW9uKCk7Ci0JCWZvciAoU3RyaW5nIGNvb2tpZSA6IHJlc3BvbnNlQ29va2llcykgewotICAgICAgICAgICAgICAgIAl1Yy5zZXRSZXF1ZXN0UHJvcGVydHkoIkNvb2tpZSIsIGNvb2tpZSk7Ci0JCX0KKyAgICAgICAgZm9yIChTdHJpbmcgY29va2llIDogcmVzcG9uc2VDb29raWVzKSB7CisgICAgICAgICAgICAgICAgICAgIHVjLnNldFJlcXVlc3RQcm9wZXJ0eSgiQ29va2llIiwgY29va2llKTsKKyAgICAgICAgfQogICAgICAgICAgICAgICAgIHVjLmNvbm5lY3QoKTsKICAgICAgICAgICAgICAgICBTZXNzaW9uU3RhdGVJbmZvIGluZm8gPSBleHRyYWN0U2Vzc2lvblN0YXRlcyh1Yyk7CiAgICAgICAgICAgICAgICAgaW5mby5zZXRBY2Nlc3NDb3VudCgyK2kpOwpAQCAtMTA1LDkgKzEwNSw5IEBACiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIGZvciB0aGUgIiArIGkgKyAiIHRpbWUuLi4uIik7CiAgICAgICAgICAgICAgICAgdSA9IG5ldyBVUkwodXJsKTsKICAgICAgICAgICAgICAgICB1YyA9IHUub3BlbkNvbm5lY3Rpb24oKTsKLQkJZm9yIChTdHJpbmcgY29va2llIDogcmVzcG9uc2VDb29raWVzKSB7Ci0gICAgICAgICAgICAgICAgCXVjLnNldFJlcXVlc3RQcm9wZXJ0eSgiQ29va2llIiwgY29va2llKTsKLQkJfQorICAgICAgICBmb3IgKFN0cmluZyBjb29raWUgOiByZXNwb25zZUNvb2tpZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgdWMuc2V0UmVxdWVzdFByb3BlcnR5KCJDb29raWUiLCBjb29raWUpOworICAgICAgICB9CiAgICAgICAgICAgICAgICAgdWMuY29ubmVjdCgpOwogICAgICAgICAgICAgICAgIFNlc3Npb25TdGF0ZUluZm8gaW5mbyA9IGV4dHJhY3RTZXNzaW9uU3RhdGVzKHVjKTsKICAgICAgICAgICAgICAgICBpbmZvLnNldEFjY2Vzc0NvdW50KDUraSk7CkBAIC0xMjAsNyArMTIwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGYWlsZWQgIiArIGluZm8pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAvKgogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXN0YXJ0aW5nIGluc3QxLi4uIik7CiAgICAgICAgICAgICBwcm9jID0gUnVudGltZS5nZXRSdW50aW1lKCkuZXhlYyhBU0FETUlOICsgIiAgc3RhcnQtaW5zdGFuY2UgaW5zdDEiKTsKQEAgLTE0NCwxNCArMTQ0LDE0IEBACiAgICAgICAgICAgICAgICAgcmVzcG9uc2VDb29raWVzLmFkZChjb29raWUpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSlVTVCBSRUFEIENPT0tJRTogIiArIGNvb2tpZSk7CiAgICAgICAgICAgICAgICAgaWYgKGNvb2tpZS5zdGFydHNXaXRoKCJKU0VTU0lPTklEPSIpKSB7Ci0JCSAgICBqc2Vzc2lvbklEQ29va2llID0gY29va2llOworICAgICAgICAgICAganNlc3Npb25JRENvb2tpZSA9IGNvb2tpZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBpZiAodG1wU2Vzc1N0YXRlLmdldEpzZXNzaW9uQ29va2llKCkgPT0gbnVsbCkgewotICAgICAgICAgICAgdG1wU2Vzc1N0YXRlLnNldEpzZXNzaW9uQ29va2llKGpzZXNzaW9uSURDb29raWUpOyAgICAKLSAgICAgICAgICAgIHJlc3BvbnNlQ29va2llcy5hZGQoanNlc3Npb25JRENvb2tpZSk7ICAgIAorICAgICAgICAgICAgdG1wU2Vzc1N0YXRlLnNldEpzZXNzaW9uQ29va2llKGpzZXNzaW9uSURDb29raWUpOworICAgICAgICAgICAgcmVzcG9uc2VDb29raWVzLmFkZChqc2Vzc2lvbklEQ29va2llKTsKICAgICAgICAgfQogICAgICAgICBpbnQgY29kZSA9ICgoSHR0cFVSTENvbm5lY3Rpb24pIHVjKS5nZXRSZXNwb25zZUNvZGUoKTsKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSB1Yy5nZXRJbnB1dFN0cmVhbSgpOwpAQCAtMTcyLDIxICsxNzIsMjEgQEAKICAgICAgICAgICAgICAgICBpZiAoISAibnVsbCIuZXF1YWxzKHZhbC50cmltKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIHRtcFNlc3NTdGF0ZS5zZXRIdHRwQ291bnRlcihJbnRlZ2VyLnZhbHVlT2YodmFsLnRyaW0oKSkpOwogICAgICAgICAgICAgICAgIH0KLQkgICAgfSBlbHNlIGlmICh0b2tlbnNbMF0uc3RhcnRzV2l0aCgiPGgxPkZyb20iKSkgeworICAgICAgICB9IGVsc2UgaWYgKHRva2Vuc1swXS5zdGFydHNXaXRoKCI8aDE+RnJvbSIpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHRva2Vuc1syXS5zdGFydHNXaXRoKCJTRlNCWzFdIikpIHsKLSAgICAgICAgICAgICAgICAJQm9vbGVhbiByZXRyaWV2ZWQgPSBCb29sZWFuLnZhbHVlT2YodG9rZW5zW3Rva2Vucy5sZW5ndGggLSAyXSk7Ci0gICAgICAgICAgICAgICAgCXRtcFNlc3NTdGF0ZS5zZXRFamIxU3RhdGVOZXcoISByZXRyaWV2ZWQpOworICAgICAgICAgICAgICAgICAgICBCb29sZWFuIHJldHJpZXZlZCA9IEJvb2xlYW4udmFsdWVPZih0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDJdKTsKKyAgICAgICAgICAgICAgICAgICAgdG1wU2Vzc1N0YXRlLnNldEVqYjFTdGF0ZU5ldyghIHJldHJpZXZlZCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0b2tlbnNbMl0uc3RhcnRzV2l0aCgiU0ZTQlsyXSIpKSB7Ci0gICAgICAgICAgICAgICAgCUJvb2xlYW4gcmV0cmlldmVkID0gQm9vbGVhbi52YWx1ZU9mKHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMl0pOwotICAgICAgICAgICAgICAgIAl0bXBTZXNzU3RhdGUuc2V0RWpiMlN0YXRlTmV3KCEgcmV0cmlldmVkKTsKKyAgICAgICAgICAgICAgICAgICAgQm9vbGVhbiByZXRyaWV2ZWQgPSBCb29sZWFuLnZhbHVlT2YodG9rZW5zW3Rva2Vucy5sZW5ndGggLSAyXSk7CisgICAgICAgICAgICAgICAgICAgIHRtcFNlc3NTdGF0ZS5zZXRFamIyU3RhdGVOZXcoISByZXRyaWV2ZWQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSBpZiAodG9rZW5zWzBdLnN0YXJ0c1dpdGgoIjxoMT5SZXRyaWV2ZWQiKSkgewogICAgICAgICAgICAgICAgIGlmICh0b2tlbnNbMV0uc3RhcnRzV2l0aCgiU0ZTQlsxXSIpKSB7Ci0gICAgICAgICAgICAgICAgCWludCBzdGF0ZTEgPSBJbnRlZ2VyLnZhbHVlT2YodG9rZW5zW3Rva2Vucy5sZW5ndGggLSAyXSk7Ci0gICAgICAgICAgICAgICAgCXRtcFNlc3NTdGF0ZS5zZXRFamIxQ291bnRlcihzdGF0ZTEpOworICAgICAgICAgICAgICAgICAgICBpbnQgc3RhdGUxID0gSW50ZWdlci52YWx1ZU9mKHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMl0pOworICAgICAgICAgICAgICAgICAgICB0bXBTZXNzU3RhdGUuc2V0RWpiMUNvdW50ZXIoc3RhdGUxKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRva2Vuc1syXS5zdGFydHNXaXRoKCJTRlNCWzJdIikpIHsKLSAgICAgICAgICAgICAgICAJaW50IHN0YXRlMiA9IEludGVnZXIudmFsdWVPZih0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDJdKTsKLSAgICAgICAgICAgICAgICAJdG1wU2Vzc1N0YXRlLnNldEVqYjJDb3VudGVyKHN0YXRlMik7CisgICAgICAgICAgICAgICAgICAgIGludCBzdGF0ZTIgPSBJbnRlZ2VyLnZhbHVlT2YodG9rZW5zW3Rva2Vucy5sZW5ndGggLSAyXSk7CisgICAgICAgICAgICAgICAgICAgIHRtcFNlc3NTdGF0ZS5zZXRFamIyQ291bnRlcihzdGF0ZTIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjEzLDExICsyMTMsMTEgQEAKIAogICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIHByZXYuZ2V0SHR0cENvdW50ZXIoKSA8IGN1cnJlbnQuZ2V0SHR0cENvdW50ZXIoKTsKICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiBwcmV2LmdldEVqYjFDb3VudGVyKCkgPCBjdXJyZW50LmdldEVqYjFDb3VudGVyKCk7Ci0JICAgIGlmIChpc0ZpcnN0QWNjZXNzQWZ0ZXJGYWlsb3ZlcikgeworICAgICAgICBpZiAoaXNGaXJzdEFjY2Vzc0FmdGVyRmFpbG92ZXIpIHsKICAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgY3VycmVudC5nZXRFamIyQ291bnRlcigpID09IDM7Ci0JICAgIH0gZWxzZSB7CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIHByZXYuZ2V0RWpiMkNvdW50ZXIoKSA8IGN1cnJlbnQuZ2V0RWpiMkNvdW50ZXIoKTsKLQkgICAgfQorICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9tZXRob2QtY2hlY2twb2ludC9zcmMvdGVzdC9qYXZhL2NvbS9hY21lL0FwcFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL21ldGhvZC1jaGVja3BvaW50L3NyYy90ZXN0L2phdmEvY29tL2FjbWUvQXBwVGVzdC5qYXZhCmluZGV4IDUwYTExODMuLmE4YWZjNjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL21ldGhvZC1jaGVja3BvaW50L3NyYy90ZXN0L2phdmEvY29tL2FjbWUvQXBwVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL21ldGhvZC1jaGVja3BvaW50L3NyYy90ZXN0L2phdmEvY29tL2FjbWUvQXBwVGVzdC5qYXZhCkBAIC0yMyw3ICsyMyw3IEBACiAvKioKICAqIFVuaXQgdGVzdCBmb3Igc2ltcGxlIEFwcC4KICAqLwotcHVibGljIGNsYXNzIEFwcFRlc3QgCitwdWJsaWMgY2xhc3MgQXBwVGVzdAogICAgIGV4dGVuZHMgVGVzdENhc2UKIHsKICAgICAvKioKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL211bHRpLXJlc3RhcnQvU0ZTQkRyaXZlci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9tdWx0aS1yZXN0YXJ0L1NGU0JEcml2ZXIvYnVpbGQueG1sCmluZGV4IDMzMWM2ZGUuLjk0ZDQyMTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL211bHRpLXJlc3RhcnQvU0ZTQkRyaXZlci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvbXVsdGktcmVzdGFydC9TRlNCRHJpdmVyL2J1aWxkLnhtbApAQCAtMzAsMjcgKzMwLDI3IEBACiAgICAgPGltcG9ydCBmaWxlPSJuYnByb2plY3QvYnVpbGQtaW1wbC54bWwiLz4KICAgICA8IS0tCiAKLSAgICBUaGVyZSBleGlzdCBzZXZlcmFsIHRhcmdldHMgd2hpY2ggYXJlIGJ5IGRlZmF1bHQgZW1wdHkgYW5kIHdoaWNoIGNhbiBiZSAKLSAgICB1c2VkIGZvciBleGVjdXRpb24gb2YgeW91ciB0YXNrcy4gVGhlc2UgdGFyZ2V0cyBhcmUgdXN1YWxseSBleGVjdXRlZCAKLSAgICBiZWZvcmUgYW5kIGFmdGVyIHNvbWUgbWFpbiB0YXJnZXRzLiBUaGV5IGFyZTogCisgICAgVGhlcmUgZXhpc3Qgc2V2ZXJhbCB0YXJnZXRzIHdoaWNoIGFyZSBieSBkZWZhdWx0IGVtcHR5IGFuZCB3aGljaCBjYW4gYmUKKyAgICB1c2VkIGZvciBleGVjdXRpb24gb2YgeW91ciB0YXNrcy4gVGhlc2UgdGFyZ2V0cyBhcmUgdXN1YWxseSBleGVjdXRlZAorICAgIGJlZm9yZSBhbmQgYWZ0ZXIgc29tZSBtYWluIHRhcmdldHMuIFRoZXkgYXJlOgogCi0gICAgICAtcHJlLWluaXQ6ICAgICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGluaXRpYWxpemF0aW9uIG9mIHByb2plY3QgcHJvcGVydGllcyAKLSAgICAgIC1wb3N0LWluaXQ6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBpbml0aWFsaXphdGlvbiBvZiBwcm9qZWN0IHByb3BlcnRpZXMgCi0gICAgICAtcHJlLWNvbXBpbGU6ICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGphdmFjIGNvbXBpbGF0aW9uIAotICAgICAgLXBvc3QtY29tcGlsZTogICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGphdmFjIGNvbXBpbGF0aW9uIAorICAgICAgLXByZS1pbml0OiAgICAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBpbml0aWFsaXphdGlvbiBvZiBwcm9qZWN0IHByb3BlcnRpZXMKKyAgICAgIC1wb3N0LWluaXQ6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBpbml0aWFsaXphdGlvbiBvZiBwcm9qZWN0IHByb3BlcnRpZXMKKyAgICAgIC1wcmUtY29tcGlsZTogICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgamF2YWMgY29tcGlsYXRpb24KKyAgICAgIC1wb3N0LWNvbXBpbGU6ICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBqYXZhYyBjb21waWxhdGlvbgogICAgICAgLXByZS1jb21waWxlLXNpbmdsZTogICAgICAgY2FsbGVkIGJlZm9yZSBqYXZhYyBjb21waWxhdGlvbiBvZiBzaW5nbGUgZmlsZQogICAgICAgLXBvc3QtY29tcGlsZS1zaW5nbGU6ICAgICAgY2FsbGVkIGFmdGVyIGphdmFjIGNvbXBpbGF0aW9uIG9mIHNpbmdsZSBmaWxlCiAgICAgICAtcHJlLWNvbXBpbGUtdGVzdDogICAgICAgICBjYWxsZWQgYmVmb3JlIGphdmFjIGNvbXBpbGF0aW9uIG9mIEpVbml0IHRlc3RzCiAgICAgICAtcG9zdC1jb21waWxlLXRlc3Q6ICAgICAgICBjYWxsZWQgYWZ0ZXIgamF2YWMgY29tcGlsYXRpb24gb2YgSlVuaXQgdGVzdHMKICAgICAgIC1wcmUtY29tcGlsZS10ZXN0LXNpbmdsZTogIGNhbGxlZCBiZWZvcmUgamF2YWMgY29tcGlsYXRpb24gb2Ygc2luZ2xlIEpVbml0IHRlc3QKICAgICAgIC1wb3N0LWNvbXBpbGUtdGVzdC1zaW5nbGU6IGNhbGxlZCBhZnRlciBqYXZhYyBjb21waWxhdGlvbiBvZiBzaW5nbGUgSlV1bml0IHRlc3QKLSAgICAgIC1wcmUtZGlzdDogICAgICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgYXJjaGl2ZSBidWlsZGluZyAKLSAgICAgIC1wb3N0LWRpc3Q6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBhcmNoaXZlIGJ1aWxkaW5nIAotICAgICAgLXBvc3QtY2xlYW46ICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGNsZWFuaW5nIGJ1aWxkIHByb2R1Y3RzIAorICAgICAgLXByZS1kaXN0OiAgICAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBhcmNoaXZlIGJ1aWxkaW5nCisgICAgICAtcG9zdC1kaXN0OiAgICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgYXJjaGl2ZSBidWlsZGluZworICAgICAgLXBvc3QtY2xlYW46ICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGNsZWFuaW5nIGJ1aWxkIHByb2R1Y3RzCiAgICAgICAtcHJlLXJ1bi1kZXBsb3k6ICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGRlcGxveWluZwogICAgICAgLXBvc3QtcnVuLWRlcGxveTogICAgICAgICAgY2FsbGVkIGFmdGVyIGRlcGxveWluZwogCi0gICAgRXhhbXBsZSBvZiBwbHVnaW5nIGFuIG9iZnVzY2F0b3IgYWZ0ZXIgdGhlIGNvbXBpbGF0aW9uIGNvdWxkIGxvb2sgbGlrZSAKKyAgICBFeGFtcGxlIG9mIHBsdWdpbmcgYW4gb2JmdXNjYXRvciBhZnRlciB0aGUgY29tcGlsYXRpb24gY291bGQgbG9vayBsaWtlCiAKICAgICAgICAgPHRhcmdldCBuYW1lPSItcG9zdC1jb21waWxlIj4KICAgICAgICAgICAgIDxvYmZ1c2NhdGU+CkBAIC01OCwyMSArNTgsMjEgQEAKICAgICAgICAgICAgIDwvb2JmdXNjYXRlPgogICAgICAgICA8L3RhcmdldD4KIAotICAgIEZvciBsaXN0IG9mIGF2YWlsYWJsZSBwcm9wZXJ0aWVzIGNoZWNrIHRoZSBpbXBvcnRlZCAKLSAgICBuYnByb2plY3QvYnVpbGQtaW1wbC54bWwgZmlsZS4gCisgICAgRm9yIGxpc3Qgb2YgYXZhaWxhYmxlIHByb3BlcnRpZXMgY2hlY2sgdGhlIGltcG9ydGVkCisgICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuCiAKIAogICAgIE90aGVyIHdheSBob3cgdG8gY3VzdG9taXplIHRoZSBidWlsZCBpcyBieSBvdmVycmlkaW5nIGV4aXN0aW5nIG1haW4gdGFyZ2V0cy4KLSAgICBUaGUgdGFyZ2V0IG9mIGludGVyZXN0IGFyZTogCisgICAgVGhlIHRhcmdldCBvZiBpbnRlcmVzdCBhcmU6CiAKICAgICAgIGluaXQtbWFjcm9kZWYtamF2YWM6ICAgIGRlZmluZXMgbWFjcm8gZm9yIGphdmFjIGNvbXBpbGF0aW9uCiAgICAgICBpbml0LW1hY3JvZGVmLWp1bml0OiAgIGRlZmluZXMgbWFjcm8gZm9yIGp1bml0IGV4ZWN1dGlvbgogICAgICAgaW5pdC1tYWNyb2RlZi1kZWJ1ZzogICAgZGVmaW5lcyBtYWNybyBmb3IgY2xhc3MgZGVidWdnaW5nCiAgICAgICBkby1kaXN0OiAgICAgICAgICAgICAgICBhcmNoaXZlIGJ1aWxkaW5nCi0gICAgICBydW46ICAgICAgICAgICAgICAgICAgICBleGVjdXRpb24gb2YgcHJvamVjdCAKLSAgICAgIGphdmFkb2MtYnVpbGQ6ICAgICAgICAgIGphdmFkb2MgZ2VuZXJhdGlvbiAKKyAgICAgIHJ1bjogICAgICAgICAgICAgICAgICAgIGV4ZWN1dGlvbiBvZiBwcm9qZWN0CisgICAgICBqYXZhZG9jLWJ1aWxkOiAgICAgICAgICBqYXZhZG9jIGdlbmVyYXRpb24KIAotICAgIEV4YW1wbGUgb2Ygb3ZlcnJpZGluZyB0aGUgdGFyZ2V0IGZvciBwcm9qZWN0IGV4ZWN1dGlvbiBjb3VsZCBsb29rIGxpa2UgCisgICAgRXhhbXBsZSBvZiBvdmVycmlkaW5nIHRoZSB0YXJnZXQgZm9yIHByb2plY3QgZXhlY3V0aW9uIGNvdWxkIGxvb2sgbGlrZQogCiAgICAgICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSI8UFJPSk5BTUU+LWltcGwuamFyIj4KICAgICAgICAgICAgIDxleGVjIGRpcj0iYmluIiBleGVjdXRhYmxlPSJsYXVuY2hlci5leGUiPgpAQCAtODAsMTAgKzgwLDEwIEBACiAgICAgICAgICAgICA8L2V4ZWM+CiAgICAgICAgIDwvdGFyZ2V0PgogCi0gICAgTm90aWNlIHRoYXQgb3ZlcnJpZGRlbiB0YXJnZXQgZGVwZW5kcyBvbiBqYXIgdGFyZ2V0IGFuZCBub3Qgb25seSBvbiAKLSAgICBjb21waWxlIHRhcmdldCBhcyByZWd1bGFyIHJ1biB0YXJnZXQgZG9lcy4gQWdhaW4sIGZvciBsaXN0IG9mIGF2YWlsYWJsZSAKLSAgICBwcm9wZXJ0aWVzIHdoaWNoIHlvdSBjYW4gdXNlIGNoZWNrIHRoZSB0YXJnZXQgeW91IGFyZSBvdmVycmlkaW5nIGluIAotICAgIG5icHJvamVjdC9idWlsZC1pbXBsLnhtbCBmaWxlLiAKKyAgICBOb3RpY2UgdGhhdCBvdmVycmlkZGVuIHRhcmdldCBkZXBlbmRzIG9uIGphciB0YXJnZXQgYW5kIG5vdCBvbmx5IG9uCisgICAgY29tcGlsZSB0YXJnZXQgYXMgcmVndWxhciBydW4gdGFyZ2V0IGRvZXMuIEFnYWluLCBmb3IgbGlzdCBvZiBhdmFpbGFibGUKKyAgICBwcm9wZXJ0aWVzIHdoaWNoIHlvdSBjYW4gdXNlIGNoZWNrIHRoZSB0YXJnZXQgeW91IGFyZSBvdmVycmlkaW5nIGluCisgICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuCiAKICAgICAtLT4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL211bHRpLXJlc3RhcnQvU0ZTQkRyaXZlci9uYnByb2plY3QvYW50LWRlcGxveS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9tdWx0aS1yZXN0YXJ0L1NGU0JEcml2ZXIvbmJwcm9qZWN0L2FudC1kZXBsb3kueG1sCmluZGV4IDNkOTNlMTAuLmMzN2Q4NjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL211bHRpLXJlc3RhcnQvU0ZTQkRyaXZlci9uYnByb2plY3QvYW50LWRlcGxveS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvbXVsdGktcmVzdGFydC9TRlNCRHJpdmVyL25icHJvamVjdC9hbnQtZGVwbG95LnhtbApAQCAtMjUsNyArMjUsNyBAQAogICAgICAgICA8dGVtcGZpbGUgcHJlZml4PSJnZnYzIiBwcm9wZXJ0eT0iZ2Z2My5wYXNzd29yZC5maWxlIiBkZXN0ZGlyPSIke2phdmEuaW8udG1wZGlyfSIvPiAgPCEtLSBkbyBub3QgZm9yZ2V0IHRvIGRlbGV0ZSB0aGlzISAtLT4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iQVNfQURNSU5fUEFTU1dPUkQ9JHtnZnYzLnBhc3N3b3JkfSIgZmlsZT0iJHtnZnYzLnBhc3N3b3JkLmZpbGV9Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9Ii1wYXJzZS1zdW4td2ViIiBkZXBlbmRzPSItaW5pdC1jbC1kZXBsb3ltZW50LWVudiIgaWY9InN1bi53ZWIucHJlc2VudCI+CiAgICAgICAgIDx0ZW1wZmlsZSBwcmVmaXg9ImdmdjMiIHByb3BlcnR5PSJ0ZW1wLnN1bi53ZWIiIGRlc3RkaXI9IiR7amF2YS5pby50bXBkaXJ9Ii8+CiAgICAgICAgIDxjb3B5IGZpbGU9IiR7ZGVwbG95LmFudC5kb2NiYXNlLmRpcn0vV0VCLUlORi9zdW4td2ViLnhtbCIgdG9maWxlPSIke3RlbXAuc3VuLndlYn0iLz4KQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgICAgIDxyZXBsYWNldmFsdWU+PCFbQ0RBVEFbLS0+IDxzdW4td2ViLWFwcF1dPjwvcmVwbGFjZXZhbHVlPgogICAgICAgICA8L3JlcGxhY2U+CiAgICAgICAgIDx4bWxwcm9wZXJ0eSBmaWxlPSIke3RlbXAuc3VuLndlYn0iIHZhbGlkYXRlPSJmYWxzZSI+Ci0gICAgICAgIDwveG1scHJvcGVydHk+ICAgIAorICAgICAgICA8L3htbHByb3BlcnR5PgogICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7dGVtcC5zdW4ud2VifSIvPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0iZGVwbG95LmFudC5jbGllbnQudXJsIiB2YWx1ZT0iJHtnZnYzLnVybH0ke3N1bi13ZWItYXBwLmNvbnRleHQtcm9vdH0iLz4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImRlcGxveS5jb250ZXh0LnJvb3QuYXJndW1lbnQiIHZhbHVlPSImYW1wO2NvbnRleHRyb290PSR7c3VuLXdlYi1hcHAuY29udGV4dC1yb290fSIvPgpAQCAtNzEsNyArNzEsNyBAQAogICAgICAgICA8cHJvcGVydHkgbmFtZT0iZnVsbC5kZXBsb3kuYW50LmFyY2hpdmUiIGxvY2F0aW9uPSIke2RlcGxveS5hbnQuYXJjaGl2ZX0iLz4KICAgICAgICAgPGdldCBzcmM9IiR7Z2Z2My5hZG1pbi51cmx9L19fYXNhZG1pbi9kZXBsb3k/cGF0aD0ke2Z1bGwuZGVwbG95LmFudC5hcmNoaXZlfSR7ZGVwbG95LmNvbnRleHQucm9vdC5hcmd1bWVudH0mYW1wO2ZvcmNlPXRydWUmYW1wO25hbWU9JHthbnQucHJvamVjdC5uYW1lfSIKICAgICAgICAgICAgIGRlc3Q9IiR7Z2Z2My5yZXN1bHRzLmZpbGV9Ii8+Ci0gICAgICAgIDxkZWxldGUgZmlsZT0iJHtnZnYzLnJlc3VsdHMuZmlsZX0iLz4gICAgCisgICAgICAgIDxkZWxldGUgZmlsZT0iJHtnZnYzLnJlc3VsdHMuZmlsZX0iLz4KICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IG5hbWU9Ii1kZXBsb3ktd2l0aC1wdyIgaWY9ImdmdjMucGFzc3dvcmQiPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJEZXBsb3lpbmcgJHtkZXBsb3kuYW50LmFyY2hpdmV9Ii8+CkBAIC05MSw3ICs5MSw3IEBACiAgICAgICAgIDx0ZW1wZmlsZSBwcmVmaXg9ImdmdjMiIHByb3BlcnR5PSJnZnYzLnJlc3VsdHMuZmlsZSIgZGVzdGRpcj0iJHtqYXZhLmlvLnRtcGRpcn0iLz4gIDwhLS0gZG8gbm90IGZvcmdldCB0byBkZWxldGUgdGhpcyEgLS0+CiAgICAgICAgIDxnZXQgc3JjPSIke2dmdjMuYWRtaW4udXJsfS9fX2FzYWRtaW4vdW5kZXBsb3k/bmFtZT0ke2FudC5wcm9qZWN0Lm5hbWV9IgogICAgICAgICAgICAgZGVzdD0iJHtnZnYzLnJlc3VsdHMuZmlsZX0iLz4KLSAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2dmdjMucmVzdWx0cy5maWxlfSIvPiAgICAKKyAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2dmdjMucmVzdWx0cy5maWxlfSIvPgogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgbmFtZT0iLXVuZGVwbG95LXdpdGgtcHciIGlmPSJnZnYzLnBhc3N3b3JkIj4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iVW5kZXBsb3lpbmcgJHtkZXBsb3kuYW50LmFyY2hpdmV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9tdWx0aS1yZXN0YXJ0L1NGU0JEcml2ZXIvbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvbXVsdGktcmVzdGFydC9TRlNCRHJpdmVyL25icHJvamVjdC9idWlsZC1pbXBsLnhtbAppbmRleCA2ZGFiMzU5Li44YTYzMTczIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9tdWx0aS1yZXN0YXJ0L1NGU0JEcml2ZXIvbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL211bHRpLXJlc3RhcnQvU0ZTQkRyaXZlci9uYnByb2plY3QvYnVpbGQtaW1wbC54bWwKQEAgLTQ3Nyw5ICs0NzcsOSBAQAogICAgIDx0YXJnZXQgbmFtZT0iLWluaXQtdGFza2RlZnMiPgogICAgICAgICA8ZmFpbCB1bmxlc3M9ImxpYnMuQ29weUxpYnMuY2xhc3NwYXRoIj4KIFRoZSBsaWJzLkNvcHlMaWJzLmNsYXNzcGF0aCBwcm9wZXJ0eSBpcyBub3Qgc2V0IHVwLgotVGhpcyBwcm9wZXJ0eSBtdXN0IHBvaW50IHRvIAorVGhpcyBwcm9wZXJ0eSBtdXN0IHBvaW50IHRvCiBvcmctbmV0YmVhbnMtbW9kdWxlcy1qYXZhLWoyc2Vwcm9qZWN0LWNvcHlsaWJzdGFzay5qYXIgZmlsZSB3aGljaCBpcyBwYXJ0Ci1vZiBOZXRCZWFucyBJREUgaW5zdGFsbGF0aW9uIGFuZCBpcyB1c3VhbGx5IGxvY2F0ZWQgYXQgCitvZiBOZXRCZWFucyBJREUgaW5zdGFsbGF0aW9uIGFuZCBpcyB1c3VhbGx5IGxvY2F0ZWQgYXQKICZsdDtuZXRiZWFuc19pbnN0YWxsYXRpb24mZ3Q7L2phdmEmbHQ7dmVyc2lvbiZndDsvYW50L2V4dHJhIGZvbGRlci4KIEVpdGhlciBvcGVuIHRoZSBwcm9qZWN0IGluIHRoZSBJREUgYW5kIG1ha2Ugc3VyZSBDb3B5TGlicyBsaWJyYXJ5CiBleGlzdHMgb3Igc2V0dXAgdGhlIHByb3BlcnR5IG1hbnVhbGx5LiBGb3IgZXhhbXBsZSBsaWtlIHRoaXM6CkBAIC04NTUsNyArODU1LDcgQEAKICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQsamF2YWRvYy1idWlsZCxqYXZhZG9jLWJyb3dzZSIgZGVzY3JpcHRpb249IkJ1aWxkIEphdmFkb2MuIiBuYW1lPSJqYXZhZG9jIi8+CiAgICAgPCEtLQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgSlVOSVQgQ09NUElMQVRJT04gU0VDVElPTgogICAgICAgICAgICAgLS0+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0LGNvbXBpbGUiIGlmPSJoYXZlLnRlc3RzIiBuYW1lPSItcHJlLXByZS1jb21waWxlLXRlc3QiPgpAQCAtODk0LDcgKzg5NCw3IEBACiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0LGNvbXBpbGUsLXByZS1wcmUtY29tcGlsZS10ZXN0LC1wcmUtY29tcGlsZS10ZXN0LXNpbmdsZSwtZG8tY29tcGlsZS10ZXN0LXNpbmdsZSwtcG9zdC1jb21waWxlLXRlc3Qtc2luZ2xlIiBuYW1lPSJjb21waWxlLXRlc3Qtc2luZ2xlIi8+CiAgICAgPCEtLQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgSlVOSVQgRVhFQ1VUSU9OIFNFQ1RJT04KICAgICAgICAgICAgIC0tPgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCIgaWY9ImhhdmUudGVzdHMiIG5hbWU9Ii1wcmUtdGVzdC1ydW4iPgpAQCAtOTIxLDcgKzkyMSw3IEBACiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0LGNvbXBpbGUtdGVzdC1zaW5nbGUsLXByZS10ZXN0LXJ1bi1zaW5nbGUsLWRvLXRlc3QtcnVuLXNpbmdsZSwtcG9zdC10ZXN0LXJ1bi1zaW5nbGUiIGRlc2NyaXB0aW9uPSJSdW4gc2luZ2xlIHVuaXQgdGVzdC4iIG5hbWU9InRlc3Qtc2luZ2xlIi8+CiAgICAgPCEtLQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgSlVOSVQgREVCVUdHSU5HIFNFQ1RJT04KICAgICAgICAgICAgIC0tPgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCxjb21waWxlLXRlc3QiIGlmPSJoYXZlLnRlc3RzIiBuYW1lPSItZGVidWctc3RhcnQtZGVidWdnZWUtdGVzdCI+CkBAIC05NDcsNyArOTQ3LDcgQEAKICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQsLXByZS1kZWJ1Zy1maXgsLWRvLWRlYnVnLWZpeC10ZXN0IiBpZj0ibmV0YmVhbnMuaG9tZSIgbmFtZT0iZGVidWctZml4LXRlc3QiLz4KICAgICA8IS0tCi0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBDTEVBTlVQIFNFQ1RJT04KICAgICAgICAgICAgIC0tPgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCIgaWY9Im5vLmRpc3QuZWFyLmRpciIgbmFtZT0iZGVwcy1jbGVhbiIgdW5sZXNzPSJuby5kZXBzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9tdWx0aS1yZXN0YXJ0L1NGU0JEcml2ZXIvc3JjL2phdmEvbmV0L21heC9lZS9zZnNiL1NGU0JEcml2ZXJTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9tdWx0aS1yZXN0YXJ0L1NGU0JEcml2ZXIvc3JjL2phdmEvbmV0L21heC9lZS9zZnNiL1NGU0JEcml2ZXJTZXJ2bGV0LmphdmEKaW5kZXggYTBiNjQ5YS4uYjAzNmEyOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvbXVsdGktcmVzdGFydC9TRlNCRHJpdmVyL3NyYy9qYXZhL25ldC9tYXgvZWUvc2ZzYi9TRlNCRHJpdmVyU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL211bHRpLXJlc3RhcnQvU0ZTQkRyaXZlci9zcmMvamF2YS9uZXQvbWF4L2VlL3Nmc2IvU0ZTQkRyaXZlclNlcnZsZXQuamF2YQpAQCAtMzgsOCArMzgsOCBAQAogICovCiBwdWJsaWMgY2xhc3MgU0ZTQkRyaXZlclNlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAKLSAgIAotICAgIC8qKiAKKworICAgIC8qKgogICAgICAqIFByb2Nlc3NlcyByZXF1ZXN0cyBmb3IgYm90aCBIVFRQIDxjb2RlPkdFVDwvY29kZT4gYW5kIDxjb2RlPlBPU1Q8L2NvZGU+IG1ldGhvZHMuCiAgICAgICogQHBhcmFtIHJlcXVlc3Qgc2VydmxldCByZXF1ZXN0CiAgICAgICogQHBhcmFtIHJlc3BvbnNlIHNlcnZsZXQgcmVzcG9uc2UKQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aHRtbD4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aGVhZD4iKTsKLSAgICAgICAgICAgIG91dC5wcmludGxuKCI8dGl0bGU+U2VydmxldCBTRlNCRHJpdmVyU2VydmxldDwvdGl0bGU+Iik7ICAKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8dGl0bGU+U2VydmxldCBTRlNCRHJpdmVyU2VydmxldDwvdGl0bGU+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9oZWFkPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxib2R5PiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoMT5TZXJ2bGV0IFNGU0JEcml2ZXJTZXJ2bGV0IGF0ICIgKyByZXF1ZXN0LmdldENvbnRleHRQYXRoICgpICsgIjwvaDE+Iik7CkBAIC03NSwxMyArNzUsMTMgQEAKIAogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aDE+RnJvbSBzZXNzaW9uIFNGU0JbMV0gTk9UIE5VTEwgPzogIiArICgiIiArIChzZnNiMSAhPSBudWxsKSkgKyAiIDwvaDE+Iik7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoMT5Gcm9tIHNlc3Npb24gU0ZTQlsyXSBOT1QgTlVMTD8gOiAiICsgKCIiICsgKHNmc2IyICE9IG51bGwpKSArICIgPC9oMT4iKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoc2ZzYjEgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIEluaXRpYWxDb250ZXh0IGN0eCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogCiAgICAgICAgICAgICAgICAgc2ZzYjEgPSAoU2ltcGxlU2Vzc2lvbkJlYW4pIGN0eC5sb29rdXAoImphdmE6Z2xvYmFsL1NGU0JEcml2ZXIvU2ltcGxlU2Vzc2lvbkJlYW4iKTsKICAgICAgICAgICAgICAgICBzZnNiMiA9IChTaW1wbGVTZXNzaW9uQmVhbikgY3R4Lmxvb2t1cCgiamF2YTpnbG9iYWwvU0ZTQkRyaXZlci9TaW1wbGVTZXNzaW9uQmVhbiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoMT5DcmVhdGVkIFNGU0JbMV06ICIgKyBzZnNiMS5hc1N0cmluZygpICsgIiA8L2gxPiIpOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aDE+Q3JlYXRlZCBTRlNCWzJdOiAiICsgc2ZzYjIuYXNTdHJpbmcoKSArICIgPC9oMT4iKTsKIApAQCAtMTA5LDEzICsxMDksMTMgQEAKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L2h0bWw+Iik7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBubUV4KSB7CiAgICAgICAgICAgICBubUV4LnByaW50U3RhY2tUcmFjZShvdXQpOwotICAgICAgICB9IGZpbmFsbHkgeyAKKyAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIG91dC5jbG9zZSgpOwogICAgICAgICB9Ci0gICAgfSAKKyAgICB9CiAKICAgICAvLyA8ZWRpdG9yLWZvbGQgZGVmYXVsdHN0YXRlPSJjb2xsYXBzZWQiIGRlc2M9Ikh0dHBTZXJ2bGV0IG1ldGhvZHMuIENsaWNrIG9uIHRoZSArIHNpZ24gb24gdGhlIGxlZnQgdG8gZWRpdCB0aGUgY29kZS4iPgotICAgIC8qKiAKKyAgICAvKioKICAgICAgKiBIYW5kbGVzIHRoZSBIVFRQIDxjb2RlPkdFVDwvY29kZT4gbWV0aG9kLgogICAgICAqIEBwYXJhbSByZXF1ZXN0IHNlcnZsZXQgcmVxdWVzdAogICAgICAqIEBwYXJhbSByZXNwb25zZSBzZXJ2bGV0IHJlc3BvbnNlCkBAIC0xMjYsOSArMTI2LDkgQEAKICAgICBwcm90ZWN0ZWQgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBwcm9jZXNzUmVxdWVzdChyZXF1ZXN0LCByZXNwb25zZSk7Ci0gICAgfSAKKyAgICB9CiAKLSAgICAvKiogCisgICAgLyoqCiAgICAgICogSGFuZGxlcyB0aGUgSFRUUCA8Y29kZT5QT1NUPC9jb2RlPiBtZXRob2QuCiAgICAgICogQHBhcmFtIHJlcXVlc3Qgc2VydmxldCByZXF1ZXN0CiAgICAgICogQHBhcmFtIHJlc3BvbnNlIHNlcnZsZXQgcmVzcG9uc2UKQEAgLTE0MSw3ICsxNDEsNyBAQAogICAgICAgICBwcm9jZXNzUmVxdWVzdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgLyoqIAorICAgIC8qKgogICAgICAqIFJldHVybnMgYSBzaG9ydCBkZXNjcmlwdGlvbiBvZiB0aGUgc2VydmxldC4KICAgICAgKiBAcmV0dXJuIGEgU3RyaW5nIGNvbnRhaW5pbmcgc2VydmxldCBkZXNjcmlwdGlvbgogICAgICAqLwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvbXVsdGktcmVzdGFydC9zcmMvbWFpbi9qYXZhL2NvbS9hY21lL0h0dHBDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL211bHRpLXJlc3RhcnQvc3JjL21haW4vamF2YS9jb20vYWNtZS9IdHRwQ2xpZW50LmphdmEKaW5kZXggZmIwMjU3Ny4uYzg2YmU2YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvbXVsdGktcmVzdGFydC9zcmMvbWFpbi9qYXZhL2NvbS9hY21lL0h0dHBDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9tdWx0aS1yZXN0YXJ0L3NyYy9tYWluL2phdmEvY29tL2FjbWUvSHR0cENsaWVudC5qYXZhCkBAIC00Niw5NiArNDYsOTYgQEAKIAogICAgIHB1YmxpYyBIdHRwQ2xpZW50KFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgaG9zdCA9ICJsb2NhbGhvc3QiOwotCWNhblByb2NlZWQgPSAoYXJncy5sZW5ndGggPT0gNik7Ci0JaWYgKGNhblByb2NlZWQpIHsKKyAgICBjYW5Qcm9jZWVkID0gKGFyZ3MubGVuZ3RoID09IDYpOworICAgIGlmIChjYW5Qcm9jZWVkKSB7CiAgICAgICAgICAgICBmb3IgKGludCBpPTA7IGk8MzsgaSsrKSB7Ci0JICAgICAgICBpbnN0YW5jZU5hbWVzW2ldID0gYXJnc1syICogaV07Ci0JICAgICAgICBwb3J0W2ldID0gYXJnc1syICogaSArIDFdOworICAgICAgICAgICAgaW5zdGFuY2VOYW1lc1tpXSA9IGFyZ3NbMiAqIGldOworICAgICAgICAgICAgcG9ydFtpXSA9IGFyZ3NbMiAqIGkgKyAxXTsKICAgICAgICAgICAgIH0KLQl9CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLQlpZiAoISBjYW5Qcm9jZWVkKSB7Ci0JICAgIFN5c3RlbS5lcnIucHJpbnRsbigiVXNhZ2U6IGphdmEgLWNwIDxjcD4gY29tLmFjbWUuSHR0cENsaWVudCA8aW5zdF8wX25hbWU+IDxwb3J0MD4gIDxpbnN0XzFfbmFtZT4gPHBvcnQxPiAgPGluc3RfMl9uYW1lPiA8cG9ydDI+ICIpOworICAgIGlmICghIGNhblByb2NlZWQpIHsKKyAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJVc2FnZTogamF2YSAtY3AgPGNwPiBjb20uYWNtZS5IdHRwQ2xpZW50IDxpbnN0XzBfbmFtZT4gPHBvcnQwPiAgPGluc3RfMV9uYW1lPiA8cG9ydDE+ICA8aW5zdF8yX25hbWU+IDxwb3J0Mj4gIik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydFswXSArCiAgICAgICAgICAgICAgICAgICAgICAgICAiLyIgKyBhcHBOYW1lICsgIi8iICsgc2VydmxldE5hbWU7Ci0gICAgCisKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImludm9raW5nIHdlYmNsaWVudCBzZXJ2bGV0IGF0ICIgKyB1cmwpOwotICAgIAorCiAgICAgICAgICAgICAgICAgVVJMIHUgPSBuZXcgVVJMKHVybCk7CiAgICAgICAgICAgICAgICAgVVJMQ29ubmVjdGlvbiB1YyA9IHUub3BlbkNvbm5lY3Rpb24oKTsKLSAgICAKKwogICAgICAgICAgICAgICAgIHN0YXRlSW5mbyA9IGV4dHJhY3RTZXNzaW9uU3RhdGVzKHVjKTsKICAgICAgICAgICAgICAgICBzdGF0ZUluZm8uc2V0QWNjZXNzQ291bnQoMSk7CiAgICAgICAgICAgICAgICAganNlc3Npb25JRENvb2tpZSA9IHN0YXRlSW5mby5nZXRKc2Vzc2lvbkNvb2tpZSgpOwotICAgIAorCiAgICAgICAgICAgICAgICAgc3RvcEFuZEFjY2Vzc0FuZFN0YXJ0KGluc3RhbmNlTmFtZXNbMF0sIHBvcnRbMV0pOwogICAgICAgICAgICAgICAgIHN0b3BBbmRBY2Nlc3NBbmRTdGFydChpbnN0YW5jZU5hbWVzWzFdLCBwb3J0WzJdKTsKICAgICAgICAgICAgICAgICBzdG9wQW5kQWNjZXNzQW5kU3RhcnQoaW5zdGFuY2VOYW1lc1syXSwgcG9ydFswXSk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIH0KLQl9CisgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBzdG9wQW5kQWNjZXNzQW5kU3RhcnQoU3RyaW5nIGluc3RhbmNlLCBTdHJpbmcgcG9ydCkgewogICAgICAgICAgICAgdHJ5IHsgVGhyZWFkLnNsZWVwKDMqMTAwMCk7IH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkge30KIAotCSAgICBzdG9wSW5zdGFuY2UoaW5zdGFuY2UpOworICAgICAgICBzdG9wSW5zdGFuY2UoaW5zdGFuY2UpOwogICAgICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsKICAgICAgICAgICAgICAgICAgICAgIi8iICsgYXBwTmFtZSArICIvIiArIHNlcnZsZXROYW1lOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKiBBQ0NFU1NJTkcgVVJMIDogIiArIHVybCk7CiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7IGkrKykgewogICAgICAgICAgICAgICAgIGlmICghIGFjY2Vzc0FwcGxpY2F0aW9uKHVybCkpIHsKLQkJICAgYnJlYWs7Ci0JCX0KKyAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotCSAgICBzdGFydEluc3RhbmNlKGluc3RhbmNlKTsKKyAgICAgICAgc3RhcnRJbnN0YW5jZShpbnN0YW5jZSk7CiAgICAgICAgICAgICB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArCiAgICAgICAgICAgICAgICAgICAgICIvIiArIGFwcE5hbWUgKyAiLyIgKyBzZXJ2bGV0TmFtZTsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgaSsrKSB7CiAgICAgICAgICAgICAgICAgaWYgKCEgYWNjZXNzQXBwbGljYXRpb24odXJsKSkgewotCQkgICBicmVhazsKLQkJfQorICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICAgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBzdG9wSW5zdGFuY2UoU3RyaW5nIGluc3ROYW1lKSB7Ci0JdHJ5IHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGVjdXRpbmcgc3RvcC1pbnN0YW5jZSAiICArIGluc3ROYW1lKTsKLQkgICAgVGhyZWFkLnNsZWVwKDMgKiAxMDAwKTsKLQkgICAgUHJvY2VzcyBwcm9jID0gUnVudGltZS5nZXRSdW50aW1lKCkuZXhlYyhBU0FETUlOICsgIiAgc3RvcC1pbnN0YW5jZSAiICsgaW5zdE5hbWUpOwotCSAgICBwcm9jLndhaXRGb3IoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJQcm9jZXNzIHN0b3AtaW5zdGFuY2UgIiAgKyBpbnN0TmFtZSArICIgZmluaXNoZWQuLi4iKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkgICAgU3lzdGVtLmVyci5wcmludGxuKCJFcnJvciB3aGlsZSBzdG9wcGluZyBpbnN0YW5jZSAiICsgaW5zdE5hbWUpOwotCX0KKyAgICB0cnkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4ZWN1dGluZyBzdG9wLWluc3RhbmNlICIgICsgaW5zdE5hbWUpOworICAgICAgICBUaHJlYWQuc2xlZXAoMyAqIDEwMDApOworICAgICAgICBQcm9jZXNzIHByb2MgPSBSdW50aW1lLmdldFJ1bnRpbWUoKS5leGVjKEFTQURNSU4gKyAiICBzdG9wLWluc3RhbmNlICIgKyBpbnN0TmFtZSk7CisgICAgICAgIHByb2Mud2FpdEZvcigpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlByb2Nlc3Mgc3RvcC1pbnN0YW5jZSAiICArIGluc3ROYW1lICsgIiBmaW5pc2hlZC4uLiIpOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkVycm9yIHdoaWxlIHN0b3BwaW5nIGluc3RhbmNlICIgKyBpbnN0TmFtZSk7CisgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBzdGFydEluc3RhbmNlKFN0cmluZyBpbnN0TmFtZSkgewotCXRyeSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhlY3V0aW5nIHN0YXJ0LWluc3RhbmNlICIgICsgaW5zdE5hbWUpOwotCSAgICBQcm9jZXNzIHByb2MgPSBSdW50aW1lLmdldFJ1bnRpbWUoKS5leGVjKEFTQURNSU4gKyAiICBzdGFydC1pbnN0YW5jZSAiICsgaW5zdE5hbWUpOwotCSAgICBwcm9jLndhaXRGb3IoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJQcm9jZXNzIHN0YXJ0LWluc3RhbmNlICIgICsgaW5zdE5hbWUgKyAiIGZpbmlzaGVkLi4uIik7Ci0JICAgIFRocmVhZC5zbGVlcCgzICogMTAwMCk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRXJyb3Igd2hpbGUgc3RhcnRpbmcgaW5zdGFuY2UgIiArIGluc3ROYW1lKTsKLQl9CisgICAgdHJ5IHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGVjdXRpbmcgc3RhcnQtaW5zdGFuY2UgIiAgKyBpbnN0TmFtZSk7CisgICAgICAgIFByb2Nlc3MgcHJvYyA9IFJ1bnRpbWUuZ2V0UnVudGltZSgpLmV4ZWMoQVNBRE1JTiArICIgIHN0YXJ0LWluc3RhbmNlICIgKyBpbnN0TmFtZSk7CisgICAgICAgIHByb2Mud2FpdEZvcigpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlByb2Nlc3Mgc3RhcnQtaW5zdGFuY2UgIiAgKyBpbnN0TmFtZSArICIgZmluaXNoZWQuLi4iKTsKKyAgICAgICAgVGhyZWFkLnNsZWVwKDMgKiAxMDAwKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJFcnJvciB3aGlsZSBzdGFydGluZyBpbnN0YW5jZSAiICsgaW5zdE5hbWUpOworICAgIH0KICAgICB9CiAKICAgICBwcml2YXRlIGJvb2xlYW4gYWNjZXNzQXBwbGljYXRpb24oU3RyaW5nIHVybFN0cikgewotCXRyeSB7CisgICAgdHJ5IHsKICAgICAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKHVybFN0cik7CiAgICAgICAgICAgICBVUkxDb25uZWN0aW9uIHVjID0gdXJsLm9wZW5Db25uZWN0aW9uKCk7Ci0JICAgIGZvciAoU3RyaW5nIGNvb2tpZSA6IHJlc3BvbnNlQ29va2llcykgeworICAgICAgICBmb3IgKFN0cmluZyBjb29raWUgOiByZXNwb25zZUNvb2tpZXMpIHsKICAgICAgICAgICAgICAgICB1Yy5zZXRSZXF1ZXN0UHJvcGVydHkoIkNvb2tpZSIsIGNvb2tpZSk7Ci0JICAgIH0KKyAgICAgICAgfQogICAgICAgICAgICAgdWMuY29ubmVjdCgpOwogICAgICAgICAgICAgU2Vzc2lvblN0YXRlSW5mbyBpbmZvID0gZXh0cmFjdFNlc3Npb25TdGF0ZXModWMpOwogICAgICAgICAgICAgaW5mby5zZXRBY2Nlc3NDb3VudCgrK19hY2Nlc3NDb3VudCk7CkBAIC0xNDUsNyArMTQ1LDcgQEAKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBhc3NlZCAiICsgc3RhdGVJbmZvKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGYWlsZWQgIiArIGluZm8pOwotCQlyZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CkBAIC0xNjYsMTQgKzE2NiwxNCBAQAogICAgICAgICAgICAgICAgIHJlc3BvbnNlQ29va2llcy5hZGQoY29va2llKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkpVU1QgUkVBRCBDT09LSUU6ICIgKyBjb29raWUpOwogICAgICAgICAgICAgICAgIGlmIChjb29raWUuc3RhcnRzV2l0aCgiSlNFU1NJT05JRD0iKSkgewotCQkgICAganNlc3Npb25JRENvb2tpZSA9IGNvb2tpZTsKKyAgICAgICAgICAgIGpzZXNzaW9uSURDb29raWUgPSBjb29raWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgaWYgKHRtcFNlc3NTdGF0ZS5nZXRKc2Vzc2lvbkNvb2tpZSgpID09IG51bGwpIHsKLSAgICAgICAgICAgIHRtcFNlc3NTdGF0ZS5zZXRKc2Vzc2lvbkNvb2tpZShqc2Vzc2lvbklEQ29va2llKTsgICAgCi0gICAgICAgICAgICByZXNwb25zZUNvb2tpZXMuYWRkKGpzZXNzaW9uSURDb29raWUpOyAgICAKKyAgICAgICAgICAgIHRtcFNlc3NTdGF0ZS5zZXRKc2Vzc2lvbkNvb2tpZShqc2Vzc2lvbklEQ29va2llKTsKKyAgICAgICAgICAgIHJlc3BvbnNlQ29va2llcy5hZGQoanNlc3Npb25JRENvb2tpZSk7CiAgICAgICAgIH0KIAogICAgICAgICBpbnQgY29kZSA9ICgoSHR0cFVSTENvbm5lY3Rpb24pIHVjKS5nZXRSZXNwb25zZUNvZGUoKTsKQEAgLTI0MCw3ICsyNDAsNyBAQAogICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIHByZXYuZ2V0SHR0cENvdW50ZXIoKSA8IGN1cnJlbnQuZ2V0SHR0cENvdW50ZXIoKTsKICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiBwcmV2LmdldEVqYjFDb3VudGVyKCkgPCBjdXJyZW50LmdldEVqYjFDb3VudGVyKCk7CiAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgcHJldi5nZXRFamIyQ291bnRlcigpIDwgY3VycmVudC5nZXRFamIyQ291bnRlcigpOwotICAgICAgICAgICAgCisKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL211bHRpLXJlc3RhcnQvc3JjL3Rlc3QvamF2YS9jb20vYWNtZS9BcHBUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9tdWx0aS1yZXN0YXJ0L3NyYy90ZXN0L2phdmEvY29tL2FjbWUvQXBwVGVzdC5qYXZhCmluZGV4IDUwYTExODMuLmE4YWZjNjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL211bHRpLXJlc3RhcnQvc3JjL3Rlc3QvamF2YS9jb20vYWNtZS9BcHBUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvbXVsdGktcmVzdGFydC9zcmMvdGVzdC9qYXZhL2NvbS9hY21lL0FwcFRlc3QuamF2YQpAQCAtMjMsNyArMjMsNyBAQAogLyoqCiAgKiBVbml0IHRlc3QgZm9yIHNpbXBsZSBBcHAuCiAgKi8KLXB1YmxpYyBjbGFzcyBBcHBUZXN0IAorcHVibGljIGNsYXNzIEFwcFRlc3QKICAgICBleHRlbmRzIFRlc3RDYXNlCiB7CiAgICAgLyoqCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXIvU0ZTQkRyaXZlci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXIvU0ZTQkRyaXZlci9idWlsZC54bWwKaW5kZXggMzMxYzZkZS4uOTRkNDIxMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyL1NGU0JEcml2ZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci9TRlNCRHJpdmVyL2J1aWxkLnhtbApAQCAtMzAsMjcgKzMwLDI3IEBACiAgICAgPGltcG9ydCBmaWxlPSJuYnByb2plY3QvYnVpbGQtaW1wbC54bWwiLz4KICAgICA8IS0tCiAKLSAgICBUaGVyZSBleGlzdCBzZXZlcmFsIHRhcmdldHMgd2hpY2ggYXJlIGJ5IGRlZmF1bHQgZW1wdHkgYW5kIHdoaWNoIGNhbiBiZSAKLSAgICB1c2VkIGZvciBleGVjdXRpb24gb2YgeW91ciB0YXNrcy4gVGhlc2UgdGFyZ2V0cyBhcmUgdXN1YWxseSBleGVjdXRlZCAKLSAgICBiZWZvcmUgYW5kIGFmdGVyIHNvbWUgbWFpbiB0YXJnZXRzLiBUaGV5IGFyZTogCisgICAgVGhlcmUgZXhpc3Qgc2V2ZXJhbCB0YXJnZXRzIHdoaWNoIGFyZSBieSBkZWZhdWx0IGVtcHR5IGFuZCB3aGljaCBjYW4gYmUKKyAgICB1c2VkIGZvciBleGVjdXRpb24gb2YgeW91ciB0YXNrcy4gVGhlc2UgdGFyZ2V0cyBhcmUgdXN1YWxseSBleGVjdXRlZAorICAgIGJlZm9yZSBhbmQgYWZ0ZXIgc29tZSBtYWluIHRhcmdldHMuIFRoZXkgYXJlOgogCi0gICAgICAtcHJlLWluaXQ6ICAgICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGluaXRpYWxpemF0aW9uIG9mIHByb2plY3QgcHJvcGVydGllcyAKLSAgICAgIC1wb3N0LWluaXQ6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBpbml0aWFsaXphdGlvbiBvZiBwcm9qZWN0IHByb3BlcnRpZXMgCi0gICAgICAtcHJlLWNvbXBpbGU6ICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGphdmFjIGNvbXBpbGF0aW9uIAotICAgICAgLXBvc3QtY29tcGlsZTogICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGphdmFjIGNvbXBpbGF0aW9uIAorICAgICAgLXByZS1pbml0OiAgICAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBpbml0aWFsaXphdGlvbiBvZiBwcm9qZWN0IHByb3BlcnRpZXMKKyAgICAgIC1wb3N0LWluaXQ6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBpbml0aWFsaXphdGlvbiBvZiBwcm9qZWN0IHByb3BlcnRpZXMKKyAgICAgIC1wcmUtY29tcGlsZTogICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgamF2YWMgY29tcGlsYXRpb24KKyAgICAgIC1wb3N0LWNvbXBpbGU6ICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBqYXZhYyBjb21waWxhdGlvbgogICAgICAgLXByZS1jb21waWxlLXNpbmdsZTogICAgICAgY2FsbGVkIGJlZm9yZSBqYXZhYyBjb21waWxhdGlvbiBvZiBzaW5nbGUgZmlsZQogICAgICAgLXBvc3QtY29tcGlsZS1zaW5nbGU6ICAgICAgY2FsbGVkIGFmdGVyIGphdmFjIGNvbXBpbGF0aW9uIG9mIHNpbmdsZSBmaWxlCiAgICAgICAtcHJlLWNvbXBpbGUtdGVzdDogICAgICAgICBjYWxsZWQgYmVmb3JlIGphdmFjIGNvbXBpbGF0aW9uIG9mIEpVbml0IHRlc3RzCiAgICAgICAtcG9zdC1jb21waWxlLXRlc3Q6ICAgICAgICBjYWxsZWQgYWZ0ZXIgamF2YWMgY29tcGlsYXRpb24gb2YgSlVuaXQgdGVzdHMKICAgICAgIC1wcmUtY29tcGlsZS10ZXN0LXNpbmdsZTogIGNhbGxlZCBiZWZvcmUgamF2YWMgY29tcGlsYXRpb24gb2Ygc2luZ2xlIEpVbml0IHRlc3QKICAgICAgIC1wb3N0LWNvbXBpbGUtdGVzdC1zaW5nbGU6IGNhbGxlZCBhZnRlciBqYXZhYyBjb21waWxhdGlvbiBvZiBzaW5nbGUgSlV1bml0IHRlc3QKLSAgICAgIC1wcmUtZGlzdDogICAgICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgYXJjaGl2ZSBidWlsZGluZyAKLSAgICAgIC1wb3N0LWRpc3Q6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBhcmNoaXZlIGJ1aWxkaW5nIAotICAgICAgLXBvc3QtY2xlYW46ICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGNsZWFuaW5nIGJ1aWxkIHByb2R1Y3RzIAorICAgICAgLXByZS1kaXN0OiAgICAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBhcmNoaXZlIGJ1aWxkaW5nCisgICAgICAtcG9zdC1kaXN0OiAgICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgYXJjaGl2ZSBidWlsZGluZworICAgICAgLXBvc3QtY2xlYW46ICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGNsZWFuaW5nIGJ1aWxkIHByb2R1Y3RzCiAgICAgICAtcHJlLXJ1bi1kZXBsb3k6ICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGRlcGxveWluZwogICAgICAgLXBvc3QtcnVuLWRlcGxveTogICAgICAgICAgY2FsbGVkIGFmdGVyIGRlcGxveWluZwogCi0gICAgRXhhbXBsZSBvZiBwbHVnaW5nIGFuIG9iZnVzY2F0b3IgYWZ0ZXIgdGhlIGNvbXBpbGF0aW9uIGNvdWxkIGxvb2sgbGlrZSAKKyAgICBFeGFtcGxlIG9mIHBsdWdpbmcgYW4gb2JmdXNjYXRvciBhZnRlciB0aGUgY29tcGlsYXRpb24gY291bGQgbG9vayBsaWtlCiAKICAgICAgICAgPHRhcmdldCBuYW1lPSItcG9zdC1jb21waWxlIj4KICAgICAgICAgICAgIDxvYmZ1c2NhdGU+CkBAIC01OCwyMSArNTgsMjEgQEAKICAgICAgICAgICAgIDwvb2JmdXNjYXRlPgogICAgICAgICA8L3RhcmdldD4KIAotICAgIEZvciBsaXN0IG9mIGF2YWlsYWJsZSBwcm9wZXJ0aWVzIGNoZWNrIHRoZSBpbXBvcnRlZCAKLSAgICBuYnByb2plY3QvYnVpbGQtaW1wbC54bWwgZmlsZS4gCisgICAgRm9yIGxpc3Qgb2YgYXZhaWxhYmxlIHByb3BlcnRpZXMgY2hlY2sgdGhlIGltcG9ydGVkCisgICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuCiAKIAogICAgIE90aGVyIHdheSBob3cgdG8gY3VzdG9taXplIHRoZSBidWlsZCBpcyBieSBvdmVycmlkaW5nIGV4aXN0aW5nIG1haW4gdGFyZ2V0cy4KLSAgICBUaGUgdGFyZ2V0IG9mIGludGVyZXN0IGFyZTogCisgICAgVGhlIHRhcmdldCBvZiBpbnRlcmVzdCBhcmU6CiAKICAgICAgIGluaXQtbWFjcm9kZWYtamF2YWM6ICAgIGRlZmluZXMgbWFjcm8gZm9yIGphdmFjIGNvbXBpbGF0aW9uCiAgICAgICBpbml0LW1hY3JvZGVmLWp1bml0OiAgIGRlZmluZXMgbWFjcm8gZm9yIGp1bml0IGV4ZWN1dGlvbgogICAgICAgaW5pdC1tYWNyb2RlZi1kZWJ1ZzogICAgZGVmaW5lcyBtYWNybyBmb3IgY2xhc3MgZGVidWdnaW5nCiAgICAgICBkby1kaXN0OiAgICAgICAgICAgICAgICBhcmNoaXZlIGJ1aWxkaW5nCi0gICAgICBydW46ICAgICAgICAgICAgICAgICAgICBleGVjdXRpb24gb2YgcHJvamVjdCAKLSAgICAgIGphdmFkb2MtYnVpbGQ6ICAgICAgICAgIGphdmFkb2MgZ2VuZXJhdGlvbiAKKyAgICAgIHJ1bjogICAgICAgICAgICAgICAgICAgIGV4ZWN1dGlvbiBvZiBwcm9qZWN0CisgICAgICBqYXZhZG9jLWJ1aWxkOiAgICAgICAgICBqYXZhZG9jIGdlbmVyYXRpb24KIAotICAgIEV4YW1wbGUgb2Ygb3ZlcnJpZGluZyB0aGUgdGFyZ2V0IGZvciBwcm9qZWN0IGV4ZWN1dGlvbiBjb3VsZCBsb29rIGxpa2UgCisgICAgRXhhbXBsZSBvZiBvdmVycmlkaW5nIHRoZSB0YXJnZXQgZm9yIHByb2plY3QgZXhlY3V0aW9uIGNvdWxkIGxvb2sgbGlrZQogCiAgICAgICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSI8UFJPSk5BTUU+LWltcGwuamFyIj4KICAgICAgICAgICAgIDxleGVjIGRpcj0iYmluIiBleGVjdXRhYmxlPSJsYXVuY2hlci5leGUiPgpAQCAtODAsMTAgKzgwLDEwIEBACiAgICAgICAgICAgICA8L2V4ZWM+CiAgICAgICAgIDwvdGFyZ2V0PgogCi0gICAgTm90aWNlIHRoYXQgb3ZlcnJpZGRlbiB0YXJnZXQgZGVwZW5kcyBvbiBqYXIgdGFyZ2V0IGFuZCBub3Qgb25seSBvbiAKLSAgICBjb21waWxlIHRhcmdldCBhcyByZWd1bGFyIHJ1biB0YXJnZXQgZG9lcy4gQWdhaW4sIGZvciBsaXN0IG9mIGF2YWlsYWJsZSAKLSAgICBwcm9wZXJ0aWVzIHdoaWNoIHlvdSBjYW4gdXNlIGNoZWNrIHRoZSB0YXJnZXQgeW91IGFyZSBvdmVycmlkaW5nIGluIAotICAgIG5icHJvamVjdC9idWlsZC1pbXBsLnhtbCBmaWxlLiAKKyAgICBOb3RpY2UgdGhhdCBvdmVycmlkZGVuIHRhcmdldCBkZXBlbmRzIG9uIGphciB0YXJnZXQgYW5kIG5vdCBvbmx5IG9uCisgICAgY29tcGlsZSB0YXJnZXQgYXMgcmVndWxhciBydW4gdGFyZ2V0IGRvZXMuIEFnYWluLCBmb3IgbGlzdCBvZiBhdmFpbGFibGUKKyAgICBwcm9wZXJ0aWVzIHdoaWNoIHlvdSBjYW4gdXNlIGNoZWNrIHRoZSB0YXJnZXQgeW91IGFyZSBvdmVycmlkaW5nIGluCisgICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuCiAKICAgICAtLT4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci9TRlNCRHJpdmVyL25icHJvamVjdC9hbnQtZGVwbG95LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci9TRlNCRHJpdmVyL25icHJvamVjdC9hbnQtZGVwbG95LnhtbAppbmRleCAzZDkzZTEwLi5jMzdkODYxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXIvU0ZTQkRyaXZlci9uYnByb2plY3QvYW50LWRlcGxveS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyL1NGU0JEcml2ZXIvbmJwcm9qZWN0L2FudC1kZXBsb3kueG1sCkBAIC0yNSw3ICsyNSw3IEBACiAgICAgICAgIDx0ZW1wZmlsZSBwcmVmaXg9ImdmdjMiIHByb3BlcnR5PSJnZnYzLnBhc3N3b3JkLmZpbGUiIGRlc3RkaXI9IiR7amF2YS5pby50bXBkaXJ9Ii8+ICA8IS0tIGRvIG5vdCBmb3JnZXQgdG8gZGVsZXRlIHRoaXMhIC0tPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJBU19BRE1JTl9QQVNTV09SRD0ke2dmdjMucGFzc3dvcmR9IiBmaWxlPSIke2dmdjMucGFzc3dvcmQuZmlsZX0iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iLXBhcnNlLXN1bi13ZWIiIGRlcGVuZHM9Ii1pbml0LWNsLWRlcGxveW1lbnQtZW52IiBpZj0ic3VuLndlYi5wcmVzZW50Ij4KICAgICAgICAgPHRlbXBmaWxlIHByZWZpeD0iZ2Z2MyIgcHJvcGVydHk9InRlbXAuc3VuLndlYiIgZGVzdGRpcj0iJHtqYXZhLmlvLnRtcGRpcn0iLz4KICAgICAgICAgPGNvcHkgZmlsZT0iJHtkZXBsb3kuYW50LmRvY2Jhc2UuZGlyfS9XRUItSU5GL3N1bi13ZWIueG1sIiB0b2ZpbGU9IiR7dGVtcC5zdW4ud2VifSIvPgpAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgICAgPHJlcGxhY2V2YWx1ZT48IVtDREFUQVstLT4gPHN1bi13ZWItYXBwXV0+PC9yZXBsYWNldmFsdWU+CiAgICAgICAgIDwvcmVwbGFjZT4KICAgICAgICAgPHhtbHByb3BlcnR5IGZpbGU9IiR7dGVtcC5zdW4ud2VifSIgdmFsaWRhdGU9ImZhbHNlIj4KLSAgICAgICAgPC94bWxwcm9wZXJ0eT4gICAgCisgICAgICAgIDwveG1scHJvcGVydHk+CiAgICAgICAgIDxkZWxldGUgZmlsZT0iJHt0ZW1wLnN1bi53ZWJ9Ii8+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkZXBsb3kuYW50LmNsaWVudC51cmwiIHZhbHVlPSIke2dmdjMudXJsfSR7c3VuLXdlYi1hcHAuY29udGV4dC1yb290fSIvPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0iZGVwbG95LmNvbnRleHQucm9vdC5hcmd1bWVudCIgdmFsdWU9IiZhbXA7Y29udGV4dHJvb3Q9JHtzdW4td2ViLWFwcC5jb250ZXh0LXJvb3R9Ii8+CkBAIC03MSw3ICs3MSw3IEBACiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJmdWxsLmRlcGxveS5hbnQuYXJjaGl2ZSIgbG9jYXRpb249IiR7ZGVwbG95LmFudC5hcmNoaXZlfSIvPgogICAgICAgICA8Z2V0IHNyYz0iJHtnZnYzLmFkbWluLnVybH0vX19hc2FkbWluL2RlcGxveT9wYXRoPSR7ZnVsbC5kZXBsb3kuYW50LmFyY2hpdmV9JHtkZXBsb3kuY29udGV4dC5yb290LmFyZ3VtZW50fSZhbXA7Zm9yY2U9dHJ1ZSZhbXA7bmFtZT0ke2FudC5wcm9qZWN0Lm5hbWV9IgogICAgICAgICAgICAgZGVzdD0iJHtnZnYzLnJlc3VsdHMuZmlsZX0iLz4KLSAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2dmdjMucmVzdWx0cy5maWxlfSIvPiAgICAKKyAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2dmdjMucmVzdWx0cy5maWxlfSIvPgogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgbmFtZT0iLWRlcGxveS13aXRoLXB3IiBpZj0iZ2Z2My5wYXNzd29yZCI+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkRlcGxveWluZyAke2RlcGxveS5hbnQuYXJjaGl2ZX0iLz4KQEAgLTkxLDcgKzkxLDcgQEAKICAgICAgICAgPHRlbXBmaWxlIHByZWZpeD0iZ2Z2MyIgcHJvcGVydHk9ImdmdjMucmVzdWx0cy5maWxlIiBkZXN0ZGlyPSIke2phdmEuaW8udG1wZGlyfSIvPiAgPCEtLSBkbyBub3QgZm9yZ2V0IHRvIGRlbGV0ZSB0aGlzISAtLT4KICAgICAgICAgPGdldCBzcmM9IiR7Z2Z2My5hZG1pbi51cmx9L19fYXNhZG1pbi91bmRlcGxveT9uYW1lPSR7YW50LnByb2plY3QubmFtZX0iCiAgICAgICAgICAgICBkZXN0PSIke2dmdjMucmVzdWx0cy5maWxlfSIvPgotICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Z2Z2My5yZXN1bHRzLmZpbGV9Ii8+ICAgIAorICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Z2Z2My5yZXN1bHRzLmZpbGV9Ii8+CiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBuYW1lPSItdW5kZXBsb3ktd2l0aC1wdyIgaWY9ImdmdjMucGFzc3dvcmQiPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJVbmRlcGxveWluZyAke2RlcGxveS5hbnQuYXJjaGl2ZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci9TRlNCRHJpdmVyL25icHJvamVjdC9idWlsZC1pbXBsLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci9TRlNCRHJpdmVyL25icHJvamVjdC9idWlsZC1pbXBsLnhtbAppbmRleCAwNGUyYmQ4Li42M2NlNDM1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXIvU0ZTQkRyaXZlci9uYnByb2plY3QvYnVpbGQtaW1wbC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyL1NGU0JEcml2ZXIvbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sCkBAIC00NzcsOSArNDc3LDkgQEAKICAgICA8dGFyZ2V0IG5hbWU9Ii1pbml0LXRhc2tkZWZzIj4KICAgICAgICAgPGZhaWwgdW5sZXNzPSJsaWJzLkNvcHlMaWJzLmNsYXNzcGF0aCI+CiBUaGUgbGlicy5Db3B5TGlicy5jbGFzc3BhdGggcHJvcGVydHkgaXMgbm90IHNldCB1cC4KLVRoaXMgcHJvcGVydHkgbXVzdCBwb2ludCB0byAKK1RoaXMgcHJvcGVydHkgbXVzdCBwb2ludCB0bwogb3JnLW5ldGJlYW5zLW1vZHVsZXMtamF2YS1qMnNlcHJvamVjdC1jb3B5bGlic3Rhc2suamFyIGZpbGUgd2hpY2ggaXMgcGFydAotb2YgTmV0QmVhbnMgSURFIGluc3RhbGxhdGlvbiBhbmQgaXMgdXN1YWxseSBsb2NhdGVkIGF0IAorb2YgTmV0QmVhbnMgSURFIGluc3RhbGxhdGlvbiBhbmQgaXMgdXN1YWxseSBsb2NhdGVkIGF0CiAmbHQ7bmV0YmVhbnNfaW5zdGFsbGF0aW9uJmd0Oy9qYXZhJmx0O3ZlcnNpb24mZ3Q7L2FudC9leHRyYSBmb2xkZXIuCiBFaXRoZXIgb3BlbiB0aGUgcHJvamVjdCBpbiB0aGUgSURFIGFuZCBtYWtlIHN1cmUgQ29weUxpYnMgbGlicmFyeQogZXhpc3RzIG9yIHNldHVwIHRoZSBwcm9wZXJ0eSBtYW51YWxseS4gRm9yIGV4YW1wbGUgbGlrZSB0aGlzOgpAQCAtODYzLDcgKzg2Myw3IEBACiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0LGphdmFkb2MtYnVpbGQsamF2YWRvYy1icm93c2UiIGRlc2NyaXB0aW9uPSJCdWlsZCBKYXZhZG9jLiIgbmFtZT0iamF2YWRvYyIvPgogICAgIDwhLS0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIEpVTklUIENPTVBJTEFUSU9OIFNFQ1RJT04KICAgICAgICAgICAgIC0tPgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCxjb21waWxlIiBpZj0iaGF2ZS50ZXN0cyIgbmFtZT0iLXByZS1wcmUtY29tcGlsZS10ZXN0Ij4KQEAgLTkwMiw3ICs5MDIsNyBAQAogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCxjb21waWxlLC1wcmUtcHJlLWNvbXBpbGUtdGVzdCwtcHJlLWNvbXBpbGUtdGVzdC1zaW5nbGUsLWRvLWNvbXBpbGUtdGVzdC1zaW5nbGUsLXBvc3QtY29tcGlsZS10ZXN0LXNpbmdsZSIgbmFtZT0iY29tcGlsZS10ZXN0LXNpbmdsZSIvPgogICAgIDwhLS0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIEpVTklUIEVYRUNVVElPTiBTRUNUSU9OCiAgICAgICAgICAgICAtLT4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQiIGlmPSJoYXZlLnRlc3RzIiBuYW1lPSItcHJlLXRlc3QtcnVuIj4KQEAgLTkyOSw3ICs5MjksNyBAQAogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCxjb21waWxlLXRlc3Qtc2luZ2xlLC1wcmUtdGVzdC1ydW4tc2luZ2xlLC1kby10ZXN0LXJ1bi1zaW5nbGUsLXBvc3QtdGVzdC1ydW4tc2luZ2xlIiBkZXNjcmlwdGlvbj0iUnVuIHNpbmdsZSB1bml0IHRlc3QuIiBuYW1lPSJ0ZXN0LXNpbmdsZSIvPgogICAgIDwhLS0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIEpVTklUIERFQlVHR0lORyBTRUNUSU9OCiAgICAgICAgICAgICAtLT4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQsY29tcGlsZS10ZXN0IiBpZj0iaGF2ZS50ZXN0cyIgbmFtZT0iLWRlYnVnLXN0YXJ0LWRlYnVnZ2VlLXRlc3QiPgpAQCAtOTU1LDcgKzk1NSw3IEBACiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0LC1wcmUtZGVidWctZml4LC1kby1kZWJ1Zy1maXgtdGVzdCIgaWY9Im5ldGJlYW5zLmhvbWUiIG5hbWU9ImRlYnVnLWZpeC10ZXN0Ii8+CiAgICAgPCEtLQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgQ0xFQU5VUCBTRUNUSU9OCiAgICAgICAgICAgICAtLT4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQiIGlmPSJuby5kaXN0LmVhci5kaXIiIG5hbWU9ImRlcHMtY2xlYW4iIHVubGVzcz0ibm8uZGVwcyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyL1NGU0JEcml2ZXIvc3JjL2phdmEvbmV0L21heC9lZS9zZnNiL1NGU0JEcml2ZXJTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXIvU0ZTQkRyaXZlci9zcmMvamF2YS9uZXQvbWF4L2VlL3Nmc2IvU0ZTQkRyaXZlclNlcnZsZXQuamF2YQppbmRleCBlNDc2NTdiLi42MTcwOTY2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXIvU0ZTQkRyaXZlci9zcmMvamF2YS9uZXQvbWF4L2VlL3Nmc2IvU0ZTQkRyaXZlclNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXIvU0ZTQkRyaXZlci9zcmMvamF2YS9uZXQvbWF4L2VlL3Nmc2IvU0ZTQkRyaXZlclNlcnZsZXQuamF2YQpAQCAtMzgsOCArMzgsOCBAQAogICovCiBwdWJsaWMgY2xhc3MgU0ZTQkRyaXZlclNlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAKLSAgIAotICAgIC8qKiAKKworICAgIC8qKgogICAgICAqIFByb2Nlc3NlcyByZXF1ZXN0cyBmb3IgYm90aCBIVFRQIDxjb2RlPkdFVDwvY29kZT4gYW5kIDxjb2RlPlBPU1Q8L2NvZGU+IG1ldGhvZHMuCiAgICAgICogQHBhcmFtIHJlcXVlc3Qgc2VydmxldCByZXF1ZXN0CiAgICAgICogQHBhcmFtIHJlc3BvbnNlIHNlcnZsZXQgcmVzcG9uc2UKQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aHRtbD4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aGVhZD4iKTsKLSAgICAgICAgICAgIG91dC5wcmludGxuKCI8dGl0bGU+U2VydmxldCBTRlNCRHJpdmVyU2VydmxldDwvdGl0bGU+Iik7ICAKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8dGl0bGU+U2VydmxldCBTRlNCRHJpdmVyU2VydmxldDwvdGl0bGU+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9oZWFkPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxib2R5PiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoMT5TZXJ2bGV0IFNGU0JEcml2ZXJTZXJ2bGV0IGF0ICIgKyByZXF1ZXN0LmdldENvbnRleHRQYXRoICgpICsgIjwvaDE+Iik7CkBAIC03NiwxMyArNzYsMTMgQEAKIAogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aDE+RnJvbSBzZXNzaW9uIFNGU0JbMV0gTk9UIE5VTEwgPzogIiArICgiIiArIChzZnNiMSAhPSBudWxsKSkgKyAiIDwvaDE+Iik7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoMT5Gcm9tIHNlc3Npb24gU0ZTQlsyXSBOT1QgTlVMTD8gOiAiICsgKCIiICsgKHNmc2IyICE9IG51bGwpKSArICIgPC9oMT4iKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoc2ZzYjEgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIEluaXRpYWxDb250ZXh0IGN0eCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogCiAgICAgICAgICAgICAgICAgc2ZzYjEgPSAoU2ltcGxlU2Vzc2lvbkJlYW4pIGN0eC5sb29rdXAoImphdmE6Z2xvYmFsL1NGU0JEcml2ZXIvU2ltcGxlU2Vzc2lvbkJlYW4iKTsKICAgICAgICAgICAgICAgICBzZnNiMiA9IChTaW1wbGVTZXNzaW9uQmVhbikgY3R4Lmxvb2t1cCgiamF2YTpnbG9iYWwvU0ZTQkRyaXZlci9TaW1wbGVTZXNzaW9uQmVhbiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoMT5DcmVhdGVkIFNGU0JbMV06ICIgKyBzZnNiMS5hc1N0cmluZygpICsgIiA8L2gxPiIpOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aDE+Q3JlYXRlZCBTRlNCWzJdOiAiICsgc2ZzYjIuYXNTdHJpbmcoKSArICIgPC9oMT4iKTsKIApAQCAtMTEwLDEzICsxMTAsMTMgQEAKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L2h0bWw+Iik7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBubUV4KSB7CiAgICAgICAgICAgICBubUV4LnByaW50U3RhY2tUcmFjZShvdXQpOwotICAgICAgICB9IGZpbmFsbHkgeyAKKyAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIG91dC5jbG9zZSgpOwogICAgICAgICB9Ci0gICAgfSAKKyAgICB9CiAKICAgICAvLyA8ZWRpdG9yLWZvbGQgZGVmYXVsdHN0YXRlPSJjb2xsYXBzZWQiIGRlc2M9Ikh0dHBTZXJ2bGV0IG1ldGhvZHMuIENsaWNrIG9uIHRoZSArIHNpZ24gb24gdGhlIGxlZnQgdG8gZWRpdCB0aGUgY29kZS4iPgotICAgIC8qKiAKKyAgICAvKioKICAgICAgKiBIYW5kbGVzIHRoZSBIVFRQIDxjb2RlPkdFVDwvY29kZT4gbWV0aG9kLgogICAgICAqIEBwYXJhbSByZXF1ZXN0IHNlcnZsZXQgcmVxdWVzdAogICAgICAqIEBwYXJhbSByZXNwb25zZSBzZXJ2bGV0IHJlc3BvbnNlCkBAIC0xMjcsOSArMTI3LDkgQEAKICAgICBwcm90ZWN0ZWQgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBwcm9jZXNzUmVxdWVzdChyZXF1ZXN0LCByZXNwb25zZSk7Ci0gICAgfSAKKyAgICB9CiAKLSAgICAvKiogCisgICAgLyoqCiAgICAgICogSGFuZGxlcyB0aGUgSFRUUCA8Y29kZT5QT1NUPC9jb2RlPiBtZXRob2QuCiAgICAgICogQHBhcmFtIHJlcXVlc3Qgc2VydmxldCByZXF1ZXN0CiAgICAgICogQHBhcmFtIHJlc3BvbnNlIHNlcnZsZXQgcmVzcG9uc2UKQEAgLTE0Miw3ICsxNDIsNyBAQAogICAgICAgICBwcm9jZXNzUmVxdWVzdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgLyoqIAorICAgIC8qKgogICAgICAqIFJldHVybnMgYSBzaG9ydCBkZXNjcmlwdGlvbiBvZiB0aGUgc2VydmxldC4KICAgICAgKiBAcmV0dXJuIGEgU3RyaW5nIGNvbnRhaW5pbmcgc2VydmxldCBkZXNjcmlwdGlvbgogICAgICAqLwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyL1NpbXBsZVNGU0JEcml2ZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyL1NpbXBsZVNGU0JEcml2ZXIvYnVpbGQueG1sCmluZGV4IDU3MGM3MTIuLmQ1ZTJiZmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci9TaW1wbGVTRlNCRHJpdmVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXIvU2ltcGxlU0ZTQkRyaXZlci9idWlsZC54bWwKQEAgLTMwLDI3ICszMCwyNyBAQAogICAgIDxpbXBvcnQgZmlsZT0ibmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIi8+CiAgICAgPCEtLQogCi0gICAgVGhlcmUgZXhpc3Qgc2V2ZXJhbCB0YXJnZXRzIHdoaWNoIGFyZSBieSBkZWZhdWx0IGVtcHR5IGFuZCB3aGljaCBjYW4gYmUgCi0gICAgdXNlZCBmb3IgZXhlY3V0aW9uIG9mIHlvdXIgdGFza3MuIFRoZXNlIHRhcmdldHMgYXJlIHVzdWFsbHkgZXhlY3V0ZWQgCi0gICAgYmVmb3JlIGFuZCBhZnRlciBzb21lIG1haW4gdGFyZ2V0cy4gVGhleSBhcmU6IAorICAgIFRoZXJlIGV4aXN0IHNldmVyYWwgdGFyZ2V0cyB3aGljaCBhcmUgYnkgZGVmYXVsdCBlbXB0eSBhbmQgd2hpY2ggY2FuIGJlCisgICAgdXNlZCBmb3IgZXhlY3V0aW9uIG9mIHlvdXIgdGFza3MuIFRoZXNlIHRhcmdldHMgYXJlIHVzdWFsbHkgZXhlY3V0ZWQKKyAgICBiZWZvcmUgYW5kIGFmdGVyIHNvbWUgbWFpbiB0YXJnZXRzLiBUaGV5IGFyZToKIAotICAgICAgLXByZS1pbml0OiAgICAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBpbml0aWFsaXphdGlvbiBvZiBwcm9qZWN0IHByb3BlcnRpZXMgCi0gICAgICAtcG9zdC1pbml0OiAgICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgaW5pdGlhbGl6YXRpb24gb2YgcHJvamVjdCBwcm9wZXJ0aWVzIAotICAgICAgLXByZS1jb21waWxlOiAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBqYXZhYyBjb21waWxhdGlvbiAKLSAgICAgIC1wb3N0LWNvbXBpbGU6ICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBqYXZhYyBjb21waWxhdGlvbiAKKyAgICAgIC1wcmUtaW5pdDogICAgICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgaW5pdGlhbGl6YXRpb24gb2YgcHJvamVjdCBwcm9wZXJ0aWVzCisgICAgICAtcG9zdC1pbml0OiAgICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgaW5pdGlhbGl6YXRpb24gb2YgcHJvamVjdCBwcm9wZXJ0aWVzCisgICAgICAtcHJlLWNvbXBpbGU6ICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGphdmFjIGNvbXBpbGF0aW9uCisgICAgICAtcG9zdC1jb21waWxlOiAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgamF2YWMgY29tcGlsYXRpb24KICAgICAgIC1wcmUtY29tcGlsZS1zaW5nbGU6ICAgICAgIGNhbGxlZCBiZWZvcmUgamF2YWMgY29tcGlsYXRpb24gb2Ygc2luZ2xlIGZpbGUKICAgICAgIC1wb3N0LWNvbXBpbGUtc2luZ2xlOiAgICAgIGNhbGxlZCBhZnRlciBqYXZhYyBjb21waWxhdGlvbiBvZiBzaW5nbGUgZmlsZQogICAgICAgLXByZS1jb21waWxlLXRlc3Q6ICAgICAgICAgY2FsbGVkIGJlZm9yZSBqYXZhYyBjb21waWxhdGlvbiBvZiBKVW5pdCB0ZXN0cwogICAgICAgLXBvc3QtY29tcGlsZS10ZXN0OiAgICAgICAgY2FsbGVkIGFmdGVyIGphdmFjIGNvbXBpbGF0aW9uIG9mIEpVbml0IHRlc3RzCiAgICAgICAtcHJlLWNvbXBpbGUtdGVzdC1zaW5nbGU6ICBjYWxsZWQgYmVmb3JlIGphdmFjIGNvbXBpbGF0aW9uIG9mIHNpbmdsZSBKVW5pdCB0ZXN0CiAgICAgICAtcG9zdC1jb21waWxlLXRlc3Qtc2luZ2xlOiBjYWxsZWQgYWZ0ZXIgamF2YWMgY29tcGlsYXRpb24gb2Ygc2luZ2xlIEpVdW5pdCB0ZXN0Ci0gICAgICAtcHJlLWRpc3Q6ICAgICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGFyY2hpdmUgYnVpbGRpbmcgCi0gICAgICAtcG9zdC1kaXN0OiAgICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgYXJjaGl2ZSBidWlsZGluZyAKLSAgICAgIC1wb3N0LWNsZWFuOiAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBjbGVhbmluZyBidWlsZCBwcm9kdWN0cyAKKyAgICAgIC1wcmUtZGlzdDogICAgICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgYXJjaGl2ZSBidWlsZGluZworICAgICAgLXBvc3QtZGlzdDogICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGFyY2hpdmUgYnVpbGRpbmcKKyAgICAgIC1wb3N0LWNsZWFuOiAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBjbGVhbmluZyBidWlsZCBwcm9kdWN0cwogICAgICAgLXByZS1ydW4tZGVwbG95OiAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBkZXBsb3lpbmcKICAgICAgIC1wb3N0LXJ1bi1kZXBsb3k6ICAgICAgICAgIGNhbGxlZCBhZnRlciBkZXBsb3lpbmcKIAotICAgIEV4YW1wbGUgb2YgcGx1Z2luZyBhbiBvYmZ1c2NhdG9yIGFmdGVyIHRoZSBjb21waWxhdGlvbiBjb3VsZCBsb29rIGxpa2UgCisgICAgRXhhbXBsZSBvZiBwbHVnaW5nIGFuIG9iZnVzY2F0b3IgYWZ0ZXIgdGhlIGNvbXBpbGF0aW9uIGNvdWxkIGxvb2sgbGlrZQogCiAgICAgICAgIDx0YXJnZXQgbmFtZT0iLXBvc3QtY29tcGlsZSI+CiAgICAgICAgICAgICA8b2JmdXNjYXRlPgpAQCAtNTgsMjEgKzU4LDIxIEBACiAgICAgICAgICAgICA8L29iZnVzY2F0ZT4KICAgICAgICAgPC90YXJnZXQ+CiAKLSAgICBGb3IgbGlzdCBvZiBhdmFpbGFibGUgcHJvcGVydGllcyBjaGVjayB0aGUgaW1wb3J0ZWQgCi0gICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuIAorICAgIEZvciBsaXN0IG9mIGF2YWlsYWJsZSBwcm9wZXJ0aWVzIGNoZWNrIHRoZSBpbXBvcnRlZAorICAgIG5icHJvamVjdC9idWlsZC1pbXBsLnhtbCBmaWxlLgogCiAKICAgICBPdGhlciB3YXkgaG93IHRvIGN1c3RvbWl6ZSB0aGUgYnVpbGQgaXMgYnkgb3ZlcnJpZGluZyBleGlzdGluZyBtYWluIHRhcmdldHMuCi0gICAgVGhlIHRhcmdldCBvZiBpbnRlcmVzdCBhcmU6IAorICAgIFRoZSB0YXJnZXQgb2YgaW50ZXJlc3QgYXJlOgogCiAgICAgICBpbml0LW1hY3JvZGVmLWphdmFjOiAgICBkZWZpbmVzIG1hY3JvIGZvciBqYXZhYyBjb21waWxhdGlvbgogICAgICAgaW5pdC1tYWNyb2RlZi1qdW5pdDogICBkZWZpbmVzIG1hY3JvIGZvciBqdW5pdCBleGVjdXRpb24KICAgICAgIGluaXQtbWFjcm9kZWYtZGVidWc6ICAgIGRlZmluZXMgbWFjcm8gZm9yIGNsYXNzIGRlYnVnZ2luZwogICAgICAgZG8tZGlzdDogICAgICAgICAgICAgICAgYXJjaGl2ZSBidWlsZGluZwotICAgICAgcnVuOiAgICAgICAgICAgICAgICAgICAgZXhlY3V0aW9uIG9mIHByb2plY3QgCi0gICAgICBqYXZhZG9jLWJ1aWxkOiAgICAgICAgICBqYXZhZG9jIGdlbmVyYXRpb24gCisgICAgICBydW46ICAgICAgICAgICAgICAgICAgICBleGVjdXRpb24gb2YgcHJvamVjdAorICAgICAgamF2YWRvYy1idWlsZDogICAgICAgICAgamF2YWRvYyBnZW5lcmF0aW9uCiAKLSAgICBFeGFtcGxlIG9mIG92ZXJyaWRpbmcgdGhlIHRhcmdldCBmb3IgcHJvamVjdCBleGVjdXRpb24gY291bGQgbG9vayBsaWtlIAorICAgIEV4YW1wbGUgb2Ygb3ZlcnJpZGluZyB0aGUgdGFyZ2V0IGZvciBwcm9qZWN0IGV4ZWN1dGlvbiBjb3VsZCBsb29rIGxpa2UKIAogICAgICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iPFBST0pOQU1FPi1pbXBsLmphciI+CiAgICAgICAgICAgICA8ZXhlYyBkaXI9ImJpbiIgZXhlY3V0YWJsZT0ibGF1bmNoZXIuZXhlIj4KQEAgLTgwLDEwICs4MCwxMCBAQAogICAgICAgICAgICAgPC9leGVjPgogICAgICAgICA8L3RhcmdldD4KIAotICAgIE5vdGljZSB0aGF0IG92ZXJyaWRkZW4gdGFyZ2V0IGRlcGVuZHMgb24gamFyIHRhcmdldCBhbmQgbm90IG9ubHkgb24gCi0gICAgY29tcGlsZSB0YXJnZXQgYXMgcmVndWxhciBydW4gdGFyZ2V0IGRvZXMuIEFnYWluLCBmb3IgbGlzdCBvZiBhdmFpbGFibGUgCi0gICAgcHJvcGVydGllcyB3aGljaCB5b3UgY2FuIHVzZSBjaGVjayB0aGUgdGFyZ2V0IHlvdSBhcmUgb3ZlcnJpZGluZyBpbiAKLSAgICBuYnByb2plY3QvYnVpbGQtaW1wbC54bWwgZmlsZS4gCisgICAgTm90aWNlIHRoYXQgb3ZlcnJpZGRlbiB0YXJnZXQgZGVwZW5kcyBvbiBqYXIgdGFyZ2V0IGFuZCBub3Qgb25seSBvbgorICAgIGNvbXBpbGUgdGFyZ2V0IGFzIHJlZ3VsYXIgcnVuIHRhcmdldCBkb2VzLiBBZ2FpbiwgZm9yIGxpc3Qgb2YgYXZhaWxhYmxlCisgICAgcHJvcGVydGllcyB3aGljaCB5b3UgY2FuIHVzZSBjaGVjayB0aGUgdGFyZ2V0IHlvdSBhcmUgb3ZlcnJpZGluZyBpbgorICAgIG5icHJvamVjdC9idWlsZC1pbXBsLnhtbCBmaWxlLgogCiAgICAgLS0+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXIvU2ltcGxlU0ZTQkRyaXZlci9uYnByb2plY3QvYW50LWRlcGxveS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXIvU2ltcGxlU0ZTQkRyaXZlci9uYnByb2plY3QvYW50LWRlcGxveS54bWwKaW5kZXggM2Q5M2UxMC4uYzM3ZDg2MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyL1NpbXBsZVNGU0JEcml2ZXIvbmJwcm9qZWN0L2FudC1kZXBsb3kueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci9TaW1wbGVTRlNCRHJpdmVyL25icHJvamVjdC9hbnQtZGVwbG95LnhtbApAQCAtMjUsNyArMjUsNyBAQAogICAgICAgICA8dGVtcGZpbGUgcHJlZml4PSJnZnYzIiBwcm9wZXJ0eT0iZ2Z2My5wYXNzd29yZC5maWxlIiBkZXN0ZGlyPSIke2phdmEuaW8udG1wZGlyfSIvPiAgPCEtLSBkbyBub3QgZm9yZ2V0IHRvIGRlbGV0ZSB0aGlzISAtLT4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iQVNfQURNSU5fUEFTU1dPUkQ9JHtnZnYzLnBhc3N3b3JkfSIgZmlsZT0iJHtnZnYzLnBhc3N3b3JkLmZpbGV9Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9Ii1wYXJzZS1zdW4td2ViIiBkZXBlbmRzPSItaW5pdC1jbC1kZXBsb3ltZW50LWVudiIgaWY9InN1bi53ZWIucHJlc2VudCI+CiAgICAgICAgIDx0ZW1wZmlsZSBwcmVmaXg9ImdmdjMiIHByb3BlcnR5PSJ0ZW1wLnN1bi53ZWIiIGRlc3RkaXI9IiR7amF2YS5pby50bXBkaXJ9Ii8+CiAgICAgICAgIDxjb3B5IGZpbGU9IiR7ZGVwbG95LmFudC5kb2NiYXNlLmRpcn0vV0VCLUlORi9zdW4td2ViLnhtbCIgdG9maWxlPSIke3RlbXAuc3VuLndlYn0iLz4KQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgICAgIDxyZXBsYWNldmFsdWU+PCFbQ0RBVEFbLS0+IDxzdW4td2ViLWFwcF1dPjwvcmVwbGFjZXZhbHVlPgogICAgICAgICA8L3JlcGxhY2U+CiAgICAgICAgIDx4bWxwcm9wZXJ0eSBmaWxlPSIke3RlbXAuc3VuLndlYn0iIHZhbGlkYXRlPSJmYWxzZSI+Ci0gICAgICAgIDwveG1scHJvcGVydHk+ICAgIAorICAgICAgICA8L3htbHByb3BlcnR5PgogICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7dGVtcC5zdW4ud2VifSIvPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0iZGVwbG95LmFudC5jbGllbnQudXJsIiB2YWx1ZT0iJHtnZnYzLnVybH0ke3N1bi13ZWItYXBwLmNvbnRleHQtcm9vdH0iLz4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImRlcGxveS5jb250ZXh0LnJvb3QuYXJndW1lbnQiIHZhbHVlPSImYW1wO2NvbnRleHRyb290PSR7c3VuLXdlYi1hcHAuY29udGV4dC1yb290fSIvPgpAQCAtNzEsNyArNzEsNyBAQAogICAgICAgICA8cHJvcGVydHkgbmFtZT0iZnVsbC5kZXBsb3kuYW50LmFyY2hpdmUiIGxvY2F0aW9uPSIke2RlcGxveS5hbnQuYXJjaGl2ZX0iLz4KICAgICAgICAgPGdldCBzcmM9IiR7Z2Z2My5hZG1pbi51cmx9L19fYXNhZG1pbi9kZXBsb3k/cGF0aD0ke2Z1bGwuZGVwbG95LmFudC5hcmNoaXZlfSR7ZGVwbG95LmNvbnRleHQucm9vdC5hcmd1bWVudH0mYW1wO2ZvcmNlPXRydWUmYW1wO25hbWU9JHthbnQucHJvamVjdC5uYW1lfSIKICAgICAgICAgICAgIGRlc3Q9IiR7Z2Z2My5yZXN1bHRzLmZpbGV9Ii8+Ci0gICAgICAgIDxkZWxldGUgZmlsZT0iJHtnZnYzLnJlc3VsdHMuZmlsZX0iLz4gICAgCisgICAgICAgIDxkZWxldGUgZmlsZT0iJHtnZnYzLnJlc3VsdHMuZmlsZX0iLz4KICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IG5hbWU9Ii1kZXBsb3ktd2l0aC1wdyIgaWY9ImdmdjMucGFzc3dvcmQiPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJEZXBsb3lpbmcgJHtkZXBsb3kuYW50LmFyY2hpdmV9Ii8+CkBAIC05MSw3ICs5MSw3IEBACiAgICAgICAgIDx0ZW1wZmlsZSBwcmVmaXg9ImdmdjMiIHByb3BlcnR5PSJnZnYzLnJlc3VsdHMuZmlsZSIgZGVzdGRpcj0iJHtqYXZhLmlvLnRtcGRpcn0iLz4gIDwhLS0gZG8gbm90IGZvcmdldCB0byBkZWxldGUgdGhpcyEgLS0+CiAgICAgICAgIDxnZXQgc3JjPSIke2dmdjMuYWRtaW4udXJsfS9fX2FzYWRtaW4vdW5kZXBsb3k/bmFtZT0ke2FudC5wcm9qZWN0Lm5hbWV9IgogICAgICAgICAgICAgZGVzdD0iJHtnZnYzLnJlc3VsdHMuZmlsZX0iLz4KLSAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2dmdjMucmVzdWx0cy5maWxlfSIvPiAgICAKKyAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2dmdjMucmVzdWx0cy5maWxlfSIvPgogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgbmFtZT0iLXVuZGVwbG95LXdpdGgtcHciIGlmPSJnZnYzLnBhc3N3b3JkIj4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iVW5kZXBsb3lpbmcgJHtkZXBsb3kuYW50LmFyY2hpdmV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXIvU2ltcGxlU0ZTQkRyaXZlci9uYnByb2plY3QvYnVpbGQtaW1wbC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXIvU2ltcGxlU0ZTQkRyaXZlci9uYnByb2plY3QvYnVpbGQtaW1wbC54bWwKaW5kZXggMThjNTdkOC4uY2NiZTYwNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyL1NpbXBsZVNGU0JEcml2ZXIvbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci9TaW1wbGVTRlNCRHJpdmVyL25icHJvamVjdC9idWlsZC1pbXBsLnhtbApAQCAtNDc3LDkgKzQ3Nyw5IEBACiAgICAgPHRhcmdldCBuYW1lPSItaW5pdC10YXNrZGVmcyI+CiAgICAgICAgIDxmYWlsIHVubGVzcz0ibGlicy5Db3B5TGlicy5jbGFzc3BhdGgiPgogVGhlIGxpYnMuQ29weUxpYnMuY2xhc3NwYXRoIHByb3BlcnR5IGlzIG5vdCBzZXQgdXAuCi1UaGlzIHByb3BlcnR5IG11c3QgcG9pbnQgdG8gCitUaGlzIHByb3BlcnR5IG11c3QgcG9pbnQgdG8KIG9yZy1uZXRiZWFucy1tb2R1bGVzLWphdmEtajJzZXByb2plY3QtY29weWxpYnN0YXNrLmphciBmaWxlIHdoaWNoIGlzIHBhcnQKLW9mIE5ldEJlYW5zIElERSBpbnN0YWxsYXRpb24gYW5kIGlzIHVzdWFsbHkgbG9jYXRlZCBhdCAKK29mIE5ldEJlYW5zIElERSBpbnN0YWxsYXRpb24gYW5kIGlzIHVzdWFsbHkgbG9jYXRlZCBhdAogJmx0O25ldGJlYW5zX2luc3RhbGxhdGlvbiZndDsvamF2YSZsdDt2ZXJzaW9uJmd0Oy9hbnQvZXh0cmEgZm9sZGVyLgogRWl0aGVyIG9wZW4gdGhlIHByb2plY3QgaW4gdGhlIElERSBhbmQgbWFrZSBzdXJlIENvcHlMaWJzIGxpYnJhcnkKIGV4aXN0cyBvciBzZXR1cCB0aGUgcHJvcGVydHkgbWFudWFsbHkuIEZvciBleGFtcGxlIGxpa2UgdGhpczoKQEAgLTg2Myw3ICs4NjMsNyBAQAogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCxqYXZhZG9jLWJ1aWxkLGphdmFkb2MtYnJvd3NlIiBkZXNjcmlwdGlvbj0iQnVpbGQgSmF2YWRvYy4iIG5hbWU9ImphdmFkb2MiLz4KICAgICA8IS0tCi0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBKVU5JVCBDT01QSUxBVElPTiBTRUNUSU9OCiAgICAgICAgICAgICAtLT4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQsY29tcGlsZSIgaWY9ImhhdmUudGVzdHMiIG5hbWU9Ii1wcmUtcHJlLWNvbXBpbGUtdGVzdCI+CkBAIC05MDIsNyArOTAyLDcgQEAKICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQsY29tcGlsZSwtcHJlLXByZS1jb21waWxlLXRlc3QsLXByZS1jb21waWxlLXRlc3Qtc2luZ2xlLC1kby1jb21waWxlLXRlc3Qtc2luZ2xlLC1wb3N0LWNvbXBpbGUtdGVzdC1zaW5nbGUiIG5hbWU9ImNvbXBpbGUtdGVzdC1zaW5nbGUiLz4KICAgICA8IS0tCi0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBKVU5JVCBFWEVDVVRJT04gU0VDVElPTgogICAgICAgICAgICAgLS0+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0IiBpZj0iaGF2ZS50ZXN0cyIgbmFtZT0iLXByZS10ZXN0LXJ1biI+CkBAIC05MjksNyArOTI5LDcgQEAKICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQsY29tcGlsZS10ZXN0LXNpbmdsZSwtcHJlLXRlc3QtcnVuLXNpbmdsZSwtZG8tdGVzdC1ydW4tc2luZ2xlLC1wb3N0LXRlc3QtcnVuLXNpbmdsZSIgZGVzY3JpcHRpb249IlJ1biBzaW5nbGUgdW5pdCB0ZXN0LiIgbmFtZT0idGVzdC1zaW5nbGUiLz4KICAgICA8IS0tCi0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBKVU5JVCBERUJVR0dJTkcgU0VDVElPTgogICAgICAgICAgICAgLS0+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0LGNvbXBpbGUtdGVzdCIgaWY9ImhhdmUudGVzdHMiIG5hbWU9Ii1kZWJ1Zy1zdGFydC1kZWJ1Z2dlZS10ZXN0Ij4KQEAgLTk1NSw3ICs5NTUsNyBAQAogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCwtcHJlLWRlYnVnLWZpeCwtZG8tZGVidWctZml4LXRlc3QiIGlmPSJuZXRiZWFucy5ob21lIiBuYW1lPSJkZWJ1Zy1maXgtdGVzdCIvPgogICAgIDwhLS0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIENMRUFOVVAgU0VDVElPTgogICAgICAgICAgICAgLS0+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0IiBpZj0ibm8uZGlzdC5lYXIuZGlyIiBuYW1lPSJkZXBzLWNsZWFuIiB1bmxlc3M9Im5vLmRlcHMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci9TaW1wbGVTRlNCRHJpdmVyL3NyYy9qYXZhL25ldC9tYXgvZWUvc2ZzYi9TaW1wbGVTRlNCRHJpdmVyU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyL1NpbXBsZVNGU0JEcml2ZXIvc3JjL2phdmEvbmV0L21heC9lZS9zZnNiL1NpbXBsZVNGU0JEcml2ZXJTZXJ2bGV0LmphdmEKaW5kZXggNGE1MjlhNC4uNTMzNGMxMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyL1NpbXBsZVNGU0JEcml2ZXIvc3JjL2phdmEvbmV0L21heC9lZS9zZnNiL1NpbXBsZVNGU0JEcml2ZXJTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyL1NpbXBsZVNGU0JEcml2ZXIvc3JjL2phdmEvbmV0L21heC9lZS9zZnNiL1NpbXBsZVNGU0JEcml2ZXJTZXJ2bGV0LmphdmEKQEAgLTM4LDggKzM4LDggQEAKICAqLwogcHVibGljIGNsYXNzIFNpbXBsZVNGU0JEcml2ZXJTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewogCi0gICAKLSAgICAvKiogCisKKyAgICAvKioKICAgICAgKiBQcm9jZXNzZXMgcmVxdWVzdHMgZm9yIGJvdGggSFRUUCA8Y29kZT5HRVQ8L2NvZGU+IGFuZCA8Y29kZT5QT1NUPC9jb2RlPiBtZXRob2RzLgogICAgICAqIEBwYXJhbSByZXF1ZXN0IHNlcnZsZXQgcmVxdWVzdAogICAgICAqIEBwYXJhbSByZXNwb25zZSBzZXJ2bGV0IHJlc3BvbnNlCkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGh0bWw+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGhlYWQ+Iik7Ci0gICAgICAgICAgICBvdXQucHJpbnRsbigiPHRpdGxlPlNlcnZsZXQgU0ZTQkRyaXZlclNlcnZsZXQ8L3RpdGxlPiIpOyAgCisgICAgICAgICAgICBvdXQucHJpbnRsbigiPHRpdGxlPlNlcnZsZXQgU0ZTQkRyaXZlclNlcnZsZXQ8L3RpdGxlPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvaGVhZD4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8Ym9keT4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aDE+U2VydmxldCBTRlNCRHJpdmVyU2VydmxldCBhdCAiICsgcmVxdWVzdC5nZXRDb250ZXh0UGF0aCAoKSArICI8L2gxPiIpOwpAQCAtNzYsMTMgKzc2LDEzIEBACiAKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGgxPkZyb20gc2Vzc2lvbiBTRlNCWzFdIE5PVCBOVUxMID86ICIgKyAoIiIgKyAoc2ZzYjEgIT0gbnVsbCkpICsgIiA8L2gxPiIpOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aDE+RnJvbSBzZXNzaW9uIFNGU0JbMl0gTk9UIE5VTEw/IDogIiArICgiIiArIChzZnNiMiAhPSBudWxsKSkgKyAiIDwvaDE+Iik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKHNmc2IxID09IG51bGwpIHsKICAgICAgICAgICAgICAgICBJbml0aWFsQ29udGV4dCBjdHggPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKIAogICAgICAgICAgICAgICAgIHNmc2IxID0gKFNpbXBsZVNlc3Npb25CZWFuKSBjdHgubG9va3VwKCJqYXZhOmdsb2JhbC9TaW1wbGVTRlNCRHJpdmVyL1NpbXBsZVNlc3Npb25CZWFuIik7CiAgICAgICAgICAgICAgICAgc2ZzYjIgPSAoU2ltcGxlU2hvcHBpbmdDYXJ0QmVhbikgY3R4Lmxvb2t1cCgiamF2YTpnbG9iYWwvU2ltcGxlU0ZTQkRyaXZlci9TaW1wbGVTaG9wcGluZ0NhcnRCZWFuIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGgxPkNyZWF0ZWQgU0ZTQlsxXTogIiArIHNmc2IxLmFzU3RyaW5nKCkgKyAiIDwvaDE+Iik7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoMT5DcmVhdGVkIFNGU0JbMl06ICIgKyBzZnNiMi5hc1N0cmluZygpICsgIiA8L2gxPiIpOwogCkBAIC0xMTAsMTMgKzExMCwxMyBAQAogICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvaHRtbD4iKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIG5tRXgpIHsKICAgICAgICAgICAgIG5tRXgucHJpbnRTdGFja1RyYWNlKG91dCk7Ci0gICAgICAgIH0gZmluYWxseSB7IAorICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgb3V0LmNsb3NlKCk7CiAgICAgICAgIH0KLSAgICB9IAorICAgIH0KIAogICAgIC8vIDxlZGl0b3ItZm9sZCBkZWZhdWx0c3RhdGU9ImNvbGxhcHNlZCIgZGVzYz0iSHR0cFNlcnZsZXQgbWV0aG9kcy4gQ2xpY2sgb24gdGhlICsgc2lnbiBvbiB0aGUgbGVmdCB0byBlZGl0IHRoZSBjb2RlLiI+Ci0gICAgLyoqIAorICAgIC8qKgogICAgICAqIEhhbmRsZXMgdGhlIEhUVFAgPGNvZGU+R0VUPC9jb2RlPiBtZXRob2QuCiAgICAgICogQHBhcmFtIHJlcXVlc3Qgc2VydmxldCByZXF1ZXN0CiAgICAgICogQHBhcmFtIHJlc3BvbnNlIHNlcnZsZXQgcmVzcG9uc2UKQEAgLTEyNyw5ICsxMjcsOSBAQAogICAgIHByb3RlY3RlZCB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKQogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIHByb2Nlc3NSZXF1ZXN0KHJlcXVlc3QsIHJlc3BvbnNlKTsKLSAgICB9IAorICAgIH0KIAotICAgIC8qKiAKKyAgICAvKioKICAgICAgKiBIYW5kbGVzIHRoZSBIVFRQIDxjb2RlPlBPU1Q8L2NvZGU+IG1ldGhvZC4KICAgICAgKiBAcGFyYW0gcmVxdWVzdCBzZXJ2bGV0IHJlcXVlc3QKICAgICAgKiBAcGFyYW0gcmVzcG9uc2Ugc2VydmxldCByZXNwb25zZQpAQCAtMTQyLDcgKzE0Miw3IEBACiAgICAgICAgIHByb2Nlc3NSZXF1ZXN0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICAvKiogCisgICAgLyoqCiAgICAgICogUmV0dXJucyBhIHNob3J0IGRlc2NyaXB0aW9uIG9mIHRoZSBzZXJ2bGV0LgogICAgICAqIEByZXR1cm4gYSBTdHJpbmcgY29udGFpbmluZyBzZXJ2bGV0IGRlc2NyaXB0aW9uCiAgICAgICovCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXIvc3JjL21haW4vamF2YS9jb20vYWNtZS9IdHRwQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXIvc3JjL21haW4vamF2YS9jb20vYWNtZS9IdHRwQ2xpZW50LmphdmEKaW5kZXggYmIyMWE2Zi4uMWRmM2QzZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyL3NyYy9tYWluL2phdmEvY29tL2FjbWUvSHR0cENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci9zcmMvbWFpbi9qYXZhL2NvbS9hY21lL0h0dHBDbGllbnQuamF2YQpAQCAtNzIsMTAgKzcyLDEwIEBACiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIGZvciB0aGUgIiArIGkgKyAiIHRpbWUuLi4uIik7CiAgICAgICAgICAgICAgICAgdSA9IG5ldyBVUkwodXJsKTsKICAgICAgICAgICAgICAgICB1YyA9IHUub3BlbkNvbm5lY3Rpb24oKTsKLQkJZm9yIChTdHJpbmcgY29va2llIDogcmVzcG9uc2VDb29raWVzKSB7Ci0gICAgICAgICAgICAgICAgCXVjLnNldFJlcXVlc3RQcm9wZXJ0eSgiQ29va2llIiwgY29va2llKTsKKyAgICAgICAgZm9yIChTdHJpbmcgY29va2llIDogcmVzcG9uc2VDb29raWVzKSB7CisgICAgICAgICAgICAgICAgICAgIHVjLnNldFJlcXVlc3RQcm9wZXJ0eSgiQ29va2llIiwgY29va2llKTsKICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPT0+U2V0dGluZyBDb29raWU6ICIgKyBjb29raWUpOwotCQl9CisgICAgICAgIH0KICAgICAgICAgICAgICAgICB1Yy5jb25uZWN0KCk7CiAgICAgICAgICAgICAgICAgU2Vzc2lvblN0YXRlSW5mbyBpbmZvID0gZXh0cmFjdFNlc3Npb25TdGF0ZXModWMpOwogICAgICAgICAgICAgICAgIGluZm8uc2V0QWNjZXNzQ291bnQoMitpKTsKQEAgLTEwNSwxMCArMTA1LDEwIEBACiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIGZvciB0aGUgIiArIGkgKyAiIHRpbWUuLi4uIik7CiAgICAgICAgICAgICAgICAgdSA9IG5ldyBVUkwodXJsKTsKICAgICAgICAgICAgICAgICB1YyA9IHUub3BlbkNvbm5lY3Rpb24oKTsKLQkJZm9yIChTdHJpbmcgY29va2llIDogcmVzcG9uc2VDb29raWVzKSB7Ci0gICAgICAgICAgICAgICAgCXVjLnNldFJlcXVlc3RQcm9wZXJ0eSgiQ29va2llIiwgY29va2llKTsKKyAgICAgICAgZm9yIChTdHJpbmcgY29va2llIDogcmVzcG9uc2VDb29raWVzKSB7CisgICAgICAgICAgICAgICAgICAgIHVjLnNldFJlcXVlc3RQcm9wZXJ0eSgiQ29va2llIiwgY29va2llKTsKICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPT0+U2V0dGluZyBDb29raWU6ICIgKyBjb29raWUpOwotCQl9CisgICAgICAgIH0KICAgICAgICAgICAgICAgICB1Yy5jb25uZWN0KCk7CiAgICAgICAgICAgICAgICAgU2Vzc2lvblN0YXRlSW5mbyBpbmZvID0gZXh0cmFjdFNlc3Npb25TdGF0ZXModWMpOwogICAgICAgICAgICAgICAgIGluZm8uc2V0QWNjZXNzQ291bnQoNStpKTsKQEAgLTEyMSw3ICsxMjEsNyBAQAogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZhaWxlZCAiICsgaW5mbyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKIC8qCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc3RhcnRpbmcgaW5zdDEuLi4iKTsKICAgICAgICAgICAgIHByb2MgPSBSdW50aW1lLmdldFJ1bnRpbWUoKS5leGVjKEFTQURNSU4gKyAiICBzdGFydC1pbnN0YW5jZSBpbnN0MSIpOwpAQCAtMTQ2LDE0ICsxNDYsMTQgQEAKICAgICAgICAgICAgICAgICByZXNwb25zZUNvb2tpZXMuYWRkKGNvb2tpZSk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJKVVNUIFJFQUQgQ09PS0lFOiAiICsgY29va2llKTsKICAgICAgICAgICAgICAgICBpZiAoY29va2llLnN0YXJ0c1dpdGgoIkpTRVNTSU9OSUQ9IikpIHsKLQkJICAgIGpzZXNzaW9uSURDb29raWUgPSBjb29raWU7CisgICAgICAgICAgICBqc2Vzc2lvbklEQ29va2llID0gY29va2llOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGlmICh0bXBTZXNzU3RhdGUuZ2V0SnNlc3Npb25Db29raWUoKSA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0bXBTZXNzU3RhdGUuc2V0SnNlc3Npb25Db29raWUoanNlc3Npb25JRENvb2tpZSk7ICAgIAotICAgICAgICAgICAgcmVzcG9uc2VDb29raWVzLmFkZChqc2Vzc2lvbklEQ29va2llKTsgICAgCisgICAgICAgICAgICB0bXBTZXNzU3RhdGUuc2V0SnNlc3Npb25Db29raWUoanNlc3Npb25JRENvb2tpZSk7CisgICAgICAgICAgICByZXNwb25zZUNvb2tpZXMuYWRkKGpzZXNzaW9uSURDb29raWUpOwogICAgICAgICB9CiAgICAgICAgIGludCBjb2RlID0gKChIdHRwVVJMQ29ubmVjdGlvbikgdWMpLmdldFJlc3BvbnNlQ29kZSgpOwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHVjLmdldElucHV0U3RyZWFtKCk7CkBAIC0yMjAsNyArMjIwLDcgQEAKICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiBwcmV2LmdldEh0dHBDb3VudGVyKCkgPCBjdXJyZW50LmdldEh0dHBDb3VudGVyKCk7CiAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgcHJldi5nZXRFamIxQ291bnRlcigpIDwgY3VycmVudC5nZXRFamIxQ291bnRlcigpOwogICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIHByZXYuZ2V0RWpiMkNvdW50ZXIoKSA8IGN1cnJlbnQuZ2V0RWpiMkNvdW50ZXIoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXIvc3JjL3Rlc3QvamF2YS9jb20vYWNtZS9BcHBUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXIvc3JjL3Rlc3QvamF2YS9jb20vYWNtZS9BcHBUZXN0LmphdmEKaW5kZXggNTBhMTE4My4uYThhZmM2NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyL3NyYy90ZXN0L2phdmEvY29tL2FjbWUvQXBwVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci9zcmMvdGVzdC9qYXZhL2NvbS9hY21lL0FwcFRlc3QuamF2YQpAQCAtMjMsNyArMjMsNyBAQAogLyoqCiAgKiBVbml0IHRlc3QgZm9yIHNpbXBsZSBBcHAuCiAgKi8KLXB1YmxpYyBjbGFzcyBBcHBUZXN0IAorcHVibGljIGNsYXNzIEFwcFRlc3QKICAgICBleHRlbmRzIFRlc3RDYXNlCiB7CiAgICAgLyoqCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9idWlsZC54bWwKaW5kZXggNWUzZjMxNS4uZTY0NDhkYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL21ldGhvZGNoZWNrcG9pbnQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9tZXRob2RjaGVja3BvaW50L2J1aWxkLnhtbApAQCAtNDcsOSArNDcsOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+Ci0JCVVzYWdlOgotCQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamItZWUgdGVzdHMpCi0JPC9lY2hvPgorICAgIDxlY2hvPgorICAgICAgICBVc2FnZToKKyAgICAgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZWpiLWVlIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9tZXRob2RjaGVja3BvaW50L211bHRpL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9tdWx0aS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDc1OGRmYjguLmYxOGFlODAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9tZXRob2RjaGVja3BvaW50L211bHRpL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL21ldGhvZGNoZWNrcG9pbnQvbXVsdGkvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWUtbWV0aG9kY2hlY2twb2ludC1tdWx0aSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL21ldGhvZGNoZWNrcG9pbnQvbXVsdGkvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL21ldGhvZGNoZWNrcG9pbnQvbXVsdGkvYnVpbGQueG1sCmluZGV4IDRjNTZmYTAuLjJjYzEwY2UgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9tZXRob2RjaGVja3BvaW50L211bHRpL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9tdWx0aS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ4LDEzICs0OCwxMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudCouY2xhc3MsICoqLypTRlNCKi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KQEAgLTY5LDcgKzY5LDcgQEAKICAgICAgICAgPC9hbnRjYWxsPgogICAgIC0tPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPCEtLQogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KQEAgLTgxLDE3ICs4MSwxNyBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgogICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtZWpiLXNxbC1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9tdWx0aS9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9tdWx0aS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggYmQxZTRlZi4uMWU0YjExZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL21ldGhvZGNoZWNrcG9pbnQvbXVsdGkvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9tZXRob2RjaGVja3BvaW50L211bHRpL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjgsNyArMjgsNyBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IElOQ1JFTUVOVF9WQUwgPSA2MDAwMDsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwcml2YXRlIFNGU0JIb21lIGhvbWU7CkBAIC00NCwyMCArNDQsMjAgQEAKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlttdWx0aUNsaWVudF0gRE9ORSBkb1Rlc3QoKS4uLiIpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgibXVsdGkiKTsKLSAgICB9ICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICBjcmVhdGVTRlNCKCk7ICAgICAvL2NyZWF0ZSBTRlNCcyAKKyAgICAgICAgY3JlYXRlU0ZTQigpOyAgICAgLy9jcmVhdGUgU0ZTQnMKICAgICAgICAgaW5pdGlhbFN0YXRlVGVzdCgpOyAgICAgICAvL2FjY2VzcyB0aGUgU0ZCUwotCW5vblR4Tm9uQ2hlY2twb2ludFRlc3QoKTsKLQlub25UeENoZWNrcG9pbnRUZXN0KCk7CisgICAgbm9uVHhOb25DaGVja3BvaW50VGVzdCgpOworICAgIG5vblR4Q2hlY2twb2ludFRlc3QoKTsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgY3JlYXRlU0ZTQigpIHsKLQlTdHJpbmcgdGVzdENhc2VOYW1lID0gImVlLm11bHRpQ2xpZW50IGNyZWF0ZVNGU0IgIjsKKyAgICBTdHJpbmcgdGVzdENhc2VOYW1lID0gImVlLm11bHRpQ2xpZW50IGNyZWF0ZVNGU0IgIjsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NGU0JIb21lIik7CkBAIC02NSw5MiArNjUsOTIgQEAKICAgICAgICAgICAgICAgICAob2JqcmVmLCBTRlNCSG9tZS5jbGFzcyk7CiAgICAgICAgICAgICBzZnNiID0gKFNGU0IpIGhvbWUuY3JlYXRlKGFjY291bnROYW1lLCA0MDAwKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW211bHRpXSBJbml0YWxpemF0aW9uIGRvbmUiKTsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdENhc2VOYW1lLCBzdGF0LlBBU1MpOworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0Q2FzZU5hbWUsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICAvL3N0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgbG9jYWxFbnRpdHlHZXRFSkJPYmplY3QoLSkiICwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW211bHRpQ2xpZW50XSBFeGNlcHRpb24gaW4gaW5pdC4uLi4iKTsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RDYXNlTmFtZSwgc3RhdC5GQUlMKTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdENhc2VOYW1lLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgaW5pdGlhbFN0YXRlVGVzdCgpIHsKLQlTdHJpbmcgdGVzdENhc2VOYW1lID0gImVlLm11bHRpQ2xpZW50IGluaXRpYWxTdGF0ZVRlc3QgIjsKKyAgICBTdHJpbmcgdGVzdENhc2VOYW1lID0gImVlLm11bHRpQ2xpZW50IGluaXRpYWxTdGF0ZVRlc3QgIjsKICAgICAgICAgdHJ5IHsKLQkgICAgYm9vbGVhbiBuYW1lT0sgPSB0cnVlOwotCSAgICBuYW1lT0sgPSBhY2NvdW50TmFtZS5lcXVhbHMoc2ZzYi5nZXRBY2NvdW50SG9sZGVyTmFtZSgpKTsKLQkgICAgaW50IHByZUJhbGFuY2UgPSBzZnNiLmdldEJhbGFuY2UoKTsKLQkgICAgaW50IHByZUNoZWNrcG9pbnRlZEJhbGFuY2UgPSBzZnNiLmdldENoZWNrcG9pbnRlZEJhbGFuY2UoKTsKLQkgICAgYm9vbGVhbiBiYWxhbmNlT0sgPSAocHJlQmFsYW5jZSAhPSBwcmVDaGVja3BvaW50ZWRCYWxhbmNlKTsKLQkgICAgaWYgKCFiYWxhbmNlT0spIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKHRlc3RDYXNlTmFtZSArICIgZmFpbGluZyBiZWNhdXNlOiAiCi0JCQkrIHByZUJhbGFuY2UgKyAiID09ICIgKyBwcmVDaGVja3BvaW50ZWRCYWxhbmNlCi0JCQkrICIgZmFpbGVkIik7Ci0JICAgIH0KLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdENhc2VOYW1lLAotCQkgICAgKChuYW1lT0sgJiYgYmFsYW5jZU9LKSA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCkpOworICAgICAgICBib29sZWFuIG5hbWVPSyA9IHRydWU7CisgICAgICAgIG5hbWVPSyA9IGFjY291bnROYW1lLmVxdWFscyhzZnNiLmdldEFjY291bnRIb2xkZXJOYW1lKCkpOworICAgICAgICBpbnQgcHJlQmFsYW5jZSA9IHNmc2IuZ2V0QmFsYW5jZSgpOworICAgICAgICBpbnQgcHJlQ2hlY2twb2ludGVkQmFsYW5jZSA9IHNmc2IuZ2V0Q2hlY2twb2ludGVkQmFsYW5jZSgpOworICAgICAgICBib29sZWFuIGJhbGFuY2VPSyA9IChwcmVCYWxhbmNlICE9IHByZUNoZWNrcG9pbnRlZEJhbGFuY2UpOworICAgICAgICBpZiAoIWJhbGFuY2VPSykgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odGVzdENhc2VOYW1lICsgIiBmYWlsaW5nIGJlY2F1c2U6ICIKKyAgICAgICAgICAgICsgcHJlQmFsYW5jZSArICIgPT0gIiArIHByZUNoZWNrcG9pbnRlZEJhbGFuY2UKKyAgICAgICAgICAgICsgIiBmYWlsZWQiKTsKKyAgICAgICAgfQorICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0Q2FzZU5hbWUsCisgICAgICAgICAgICAoKG5hbWVPSyAmJiBiYWxhbmNlT0spID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKSk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0Q2FzZU5hbWUsIHN0YXQuRkFJTCk7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RDYXNlTmFtZSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIG5vblR4Tm9uQ2hlY2twb2ludFRlc3QoKSB7Ci0JU3RyaW5nIHRlc3RDYXNlTmFtZSA9ICJlZS5tdWx0aUNsaWVudCBub25UeE5vbkNoZWNrcG9pbnRUZXN0ICI7CisgICAgU3RyaW5nIHRlc3RDYXNlTmFtZSA9ICJlZS5tdWx0aUNsaWVudCBub25UeE5vbkNoZWNrcG9pbnRUZXN0ICI7CiAgICAgICAgIHRyeSB7Ci0JICAgIGludCBwcmVCYWxhbmNlID0gc2ZzYi5nZXRCYWxhbmNlKCk7Ci0JICAgIGludCBwcmVDaGVja3BvaW50ZWRCYWxhbmNlID0gc2ZzYi5nZXRDaGVja3BvaW50ZWRCYWxhbmNlKCk7Ci0JICAgIHNmc2IuaW5jcmVtZW50QmFsYW5jZShJTkNSRU1FTlRfVkFMKTsKLQkgICAgc2ZzYi5ub25UeE5vbkNoZWNrcG9pbnRlZE1ldGhvZCgpOwotCSAgICBpbnQgcG9zdEJhbGFuY2UgPSBzZnNiLmdldEJhbGFuY2UoKTsKLQkgICAgaW50IHBvc3RDaGVja3BvaW50ZWRCYWxhbmNlID0gc2ZzYi5nZXRDaGVja3BvaW50ZWRCYWxhbmNlKCk7CisgICAgICAgIGludCBwcmVCYWxhbmNlID0gc2ZzYi5nZXRCYWxhbmNlKCk7CisgICAgICAgIGludCBwcmVDaGVja3BvaW50ZWRCYWxhbmNlID0gc2ZzYi5nZXRDaGVja3BvaW50ZWRCYWxhbmNlKCk7CisgICAgICAgIHNmc2IuaW5jcmVtZW50QmFsYW5jZShJTkNSRU1FTlRfVkFMKTsKKyAgICAgICAgc2ZzYi5ub25UeE5vbkNoZWNrcG9pbnRlZE1ldGhvZCgpOworICAgICAgICBpbnQgcG9zdEJhbGFuY2UgPSBzZnNiLmdldEJhbGFuY2UoKTsKKyAgICAgICAgaW50IHBvc3RDaGVja3BvaW50ZWRCYWxhbmNlID0gc2ZzYi5nZXRDaGVja3BvaW50ZWRCYWxhbmNlKCk7CiAKLQkgICAgYm9vbGVhbiBvayA9IChwcmVCYWxhbmNlK0lOQ1JFTUVOVF9WQUw9PSBwb3N0QmFsYW5jZSkKLQkJJiYgKHByZUNoZWNrcG9pbnRlZEJhbGFuY2UgPT0gcG9zdENoZWNrcG9pbnRlZEJhbGFuY2UpOwotCSAgICBpZiAoIW9rKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbih0ZXN0Q2FzZU5hbWUgKyAiIGZhaWxpbmcgYmVjYXVzZTogIgotCQkgICAgKyAiKCIgKyBwcmVCYWxhbmNlICsgIiArICIgKyBJTkNSRU1FTlRfVkFMCi0JCSAgICArICIgPT0gIiArIHBvc3RCYWxhbmNlICsgIikiCi0JCSAgICArICIgJiYgKCIgKyBwcmVDaGVja3BvaW50ZWRCYWxhbmNlICsgIiA9PSAiCi0JCSAgICArIHBvc3RDaGVja3BvaW50ZWRCYWxhbmNlICsgIikiCi0JCSAgICArICIgZmFpbGVkIik7Ci0JICAgIH0KLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdENhc2VOYW1lLCAob2sgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpKTsKKyAgICAgICAgYm9vbGVhbiBvayA9IChwcmVCYWxhbmNlK0lOQ1JFTUVOVF9WQUw9PSBwb3N0QmFsYW5jZSkKKyAgICAgICAgJiYgKHByZUNoZWNrcG9pbnRlZEJhbGFuY2UgPT0gcG9zdENoZWNrcG9pbnRlZEJhbGFuY2UpOworICAgICAgICBpZiAoIW9rKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0ZXN0Q2FzZU5hbWUgKyAiIGZhaWxpbmcgYmVjYXVzZTogIgorICAgICAgICAgICAgKyAiKCIgKyBwcmVCYWxhbmNlICsgIiArICIgKyBJTkNSRU1FTlRfVkFMCisgICAgICAgICAgICArICIgPT0gIiArIHBvc3RCYWxhbmNlICsgIikiCisgICAgICAgICAgICArICIgJiYgKCIgKyBwcmVDaGVja3BvaW50ZWRCYWxhbmNlICsgIiA9PSAiCisgICAgICAgICAgICArIHBvc3RDaGVja3BvaW50ZWRCYWxhbmNlICsgIikiCisgICAgICAgICAgICArICIgZmFpbGVkIik7CisgICAgICAgIH0KKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdENhc2VOYW1lLCAob2sgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0Q2FzZU5hbWUsIHN0YXQuRkFJTCk7CisgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0Q2FzZU5hbWUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBub25UeENoZWNrcG9pbnRUZXN0KCkgewotCVN0cmluZyB0ZXN0Q2FzZU5hbWUgPSAiZWUubXVsdGlDbGllbnQgbm9uVHhDaGVja3BvaW50VGVzdCAiOworICAgIFN0cmluZyB0ZXN0Q2FzZU5hbWUgPSAiZWUubXVsdGlDbGllbnQgbm9uVHhDaGVja3BvaW50VGVzdCAiOwogICAgICAgICB0cnkgewotCSAgICBpbnQgcHJlQmFsYW5jZSA9IHNmc2IuZ2V0QmFsYW5jZSgpOwotCSAgICBpbnQgcHJlQ2hlY2twb2ludGVkQmFsYW5jZSA9IHNmc2IuZ2V0Q2hlY2twb2ludGVkQmFsYW5jZSgpOwotCSAgICBzZnNiLmluY3JlbWVudEJhbGFuY2UoSU5DUkVNRU5UX1ZBTCk7Ci0JICAgIHNmc2Iubm9uVHhDaGVja3BvaW50ZWRNZXRob2QoKTsKLQkgICAgaW50IHBvc3RCYWxhbmNlID0gc2ZzYi5nZXRCYWxhbmNlKCk7Ci0JICAgIGludCBwb3N0Q2hlY2twb2ludGVkQmFsYW5jZSA9IHNmc2IuZ2V0Q2hlY2twb2ludGVkQmFsYW5jZSgpOworICAgICAgICBpbnQgcHJlQmFsYW5jZSA9IHNmc2IuZ2V0QmFsYW5jZSgpOworICAgICAgICBpbnQgcHJlQ2hlY2twb2ludGVkQmFsYW5jZSA9IHNmc2IuZ2V0Q2hlY2twb2ludGVkQmFsYW5jZSgpOworICAgICAgICBzZnNiLmluY3JlbWVudEJhbGFuY2UoSU5DUkVNRU5UX1ZBTCk7CisgICAgICAgIHNmc2Iubm9uVHhDaGVja3BvaW50ZWRNZXRob2QoKTsKKyAgICAgICAgaW50IHBvc3RCYWxhbmNlID0gc2ZzYi5nZXRCYWxhbmNlKCk7CisgICAgICAgIGludCBwb3N0Q2hlY2twb2ludGVkQmFsYW5jZSA9IHNmc2IuZ2V0Q2hlY2twb2ludGVkQmFsYW5jZSgpOwogCi0JICAgIGJvb2xlYW4gb2sgPSAocHJlQmFsYW5jZStJTkNSRU1FTlRfVkFMID09IHBvc3RCYWxhbmNlKQotCQkmJiAocHJlQ2hlY2twb2ludGVkQmFsYW5jZSAhPSBwb3N0Q2hlY2twb2ludGVkQmFsYW5jZSkKLQkJJiYgKHBvc3RCYWxhbmNlID09IHBvc3RDaGVja3BvaW50ZWRCYWxhbmNlKTsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdENhc2VOYW1lLCAob2sgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpKTsKKyAgICAgICAgYm9vbGVhbiBvayA9IChwcmVCYWxhbmNlK0lOQ1JFTUVOVF9WQUwgPT0gcG9zdEJhbGFuY2UpCisgICAgICAgICYmIChwcmVDaGVja3BvaW50ZWRCYWxhbmNlICE9IHBvc3RDaGVja3BvaW50ZWRCYWxhbmNlKQorICAgICAgICAmJiAocG9zdEJhbGFuY2UgPT0gcG9zdENoZWNrcG9pbnRlZEJhbGFuY2UpOworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0Q2FzZU5hbWUsIChvayA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCkpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RDYXNlTmFtZSwgc3RhdC5GQUlMKTsKKyAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RDYXNlTmFtZSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBzbGVlcEZvcihpbnQgc2Vjb25kcykgewotCVN5c3RlbS5vdXQucHJpbnRsbigiV2FpdGluZyBmb3IgMTAgc2Vjb25kcyBiZWZvcmUgYWNjZXNzaW5nLi4uIik7Ci0JZm9yIChpbnQgaT0wOyBpPHNlY29uZHM7IGkrKykgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIgKyAoMTAgLSBpKSArICIgc2Vjb25kcyBsZWZ0Li4uIik7Ci0JICAgIHRyeSB7Ci0JCVRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoMSoxMDAwKTsKLQkgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JICAgIH0KLQl9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJXYWl0aW5nIGZvciAxMCBzZWNvbmRzIGJlZm9yZSBhY2Nlc3NpbmcuLi4iKTsKKyAgICBmb3IgKGludCBpPTA7IGk8c2Vjb25kczsgaSsrKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIiArICgxMCAtIGkpICsgIiBzZWNvbmRzIGxlZnQuLi4iKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCgxKjEwMDApOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgfQorICAgIH0KICAgICB9CiAKIH0gLy9DbGllbnR7fQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL21ldGhvZGNoZWNrcG9pbnQvbXVsdGkvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9tdWx0aS9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAppbmRleCBjMTM4ZWRlLi5jNTZmNGI2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9tdWx0aS9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9tdWx0aS9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbApAQCAtMjMsMTQgKzIzLDE0IEBACiAgICAgIDxlamI+CiAgICAgICAgIDxlamItbmFtZT5TRlNCRUpCPC9lamItbmFtZT4KICAgICAgICAgPGpuZGktbmFtZT5lamIvZWpiX2VlX21ldGhvZGNoZWNrcG9pbnRfbXVsdGlfU0ZTQjwvam5kaS1uYW1lPgotCTxjaGVja3BvaW50LWF0LWVuZC1vZi1tZXRob2Q+Ci0JICAgIDxtZXRob2Q+Ci0JCTxtZXRob2QtbmFtZT5ub25UeENoZWNrcG9pbnRlZE1ldGhvZDwvbWV0aG9kLW5hbWU+Ci0JICAgIDwvbWV0aG9kPgotCSAgICA8bWV0aG9kPgotCQk8bWV0aG9kLW5hbWU+dHhDaGVja3BvaW50ZWRNZXRob2Q8L21ldGhvZC1uYW1lPgotCSAgICA8L21ldGhvZD4KLQk8L2NoZWNrcG9pbnQtYXQtZW5kLW9mLW1ldGhvZD4KKyAgICA8Y2hlY2twb2ludC1hdC1lbmQtb2YtbWV0aG9kPgorICAgICAgICA8bWV0aG9kPgorICAgICAgICA8bWV0aG9kLW5hbWU+bm9uVHhDaGVja3BvaW50ZWRNZXRob2Q8L21ldGhvZC1uYW1lPgorICAgICAgICA8L21ldGhvZD4KKyAgICAgICAgPG1ldGhvZD4KKyAgICAgICAgPG1ldGhvZC1uYW1lPnR4Q2hlY2twb2ludGVkTWV0aG9kPC9tZXRob2QtbmFtZT4KKyAgICAgICAgPC9tZXRob2Q+CisgICAgPC9jaGVja3BvaW50LWF0LWVuZC1vZi1tZXRob2Q+CiAgICAgIDwvZWpiPgogICAgPC9lbnRlcnByaXNlLWJlYW5zPgogPC9zdW4tZWpiLWphcj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9tZXRob2RjaGVja3BvaW50L211bHRpL2VqYi9TRlNCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9tdWx0aS9lamIvU0ZTQi5qYXZhCmluZGV4IDY5YjFlMWYuLjYzNjlhYzEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9tZXRob2RjaGVja3BvaW50L211bHRpL2VqYi9TRlNCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL21ldGhvZGNoZWNrcG9pbnQvbXVsdGkvZWpiL1NGU0IuamF2YQpAQCAtMjQsMzAgKzI0LDMwIEBACiB7CiAKICAgICBwdWJsaWMgU3RyaW5nIGdldEFjY291bnRIb2xkZXJOYW1lKCkKLQl0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgaW50IGdldEJhbGFuY2UoKQotCXRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyB2b2lkIGluY3JlbWVudEJhbGFuY2UoaW50IHZhbCkKLQl0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgaW50IGdldENoZWNrcG9pbnRlZEJhbGFuY2UoKQotCXRocm93cyBSZW1vdGVFeGNlcHRpb247CSAgICAgCisgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogCiAKIAogICAgIHB1YmxpYyB2b2lkIG5vblR4Tm9uQ2hlY2twb2ludGVkTWV0aG9kKCkKLQl0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgdm9pZCBub25UeENoZWNrcG9pbnRlZE1ldGhvZCgpCi0JdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIHZvaWQgdHhOb25DaGVja3BvaW50ZWRNZXRob2QoKQotCXRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyB2b2lkIHR4Q2hlY2twb2ludGVkTWV0aG9kKCkKLQl0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9tZXRob2RjaGVja3BvaW50L211bHRpL2VqYi9TRlNCRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9tdWx0aS9lamIvU0ZTQkVKQi5qYXZhCmluZGV4IDE0OWMyY2EuLjk5MjdhYjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9tZXRob2RjaGVja3BvaW50L211bHRpL2VqYi9TRlNCRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL21ldGhvZGNoZWNrcG9pbnQvbXVsdGkvZWpiL1NGU0JFSkIuamF2YQpAQCAtMzAsMTggKzMwLDE4IEBACiBpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogCiBwdWJsaWMgY2xhc3MgU0ZTQkVKQgotICAgIGltcGxlbWVudHMgU2Vzc2lvbkJlYW4gCisgICAgaW1wbGVtZW50cyBTZXNzaW9uQmVhbgogewogCiAgICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCAgICAgICAgICAgICAgc2Vzc2lvbkN0eDsKLSAgICAKKwogICAgIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgICAgICAgICAgIGFjY291bnRIb2xkZXJOYW1lOwotICAgIHByaXZhdGUgdHJhbnNpZW50IGludAkJYmFsYW5jZTsKLSAgICBwcml2YXRlIGludAkJCQljaGVja3BvaW50ZWRCYWxhbmNlOworICAgIHByaXZhdGUgdHJhbnNpZW50IGludCAgICAgICAgYmFsYW5jZTsKKyAgICBwcml2YXRlIGludCAgICAgICAgICAgICAgICBjaGVja3BvaW50ZWRCYWxhbmNlOwogCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKFN0cmluZyBhY2NvdW50SG9sZGVyTmFtZSwgaW50IGJhbGFuY2UpIHsKICAgICAgICAgdGhpcy5hY2NvdW50SG9sZGVyTmFtZSA9IGFjY291bnRIb2xkZXJOYW1lOwotCXRoaXMuYmFsYW5jZSA9IGJhbGFuY2U7CisgICAgdGhpcy5iYWxhbmNlID0gYmFsYW5jZTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgewpAQCAtNTEsMTEgKzUxLDExIEBACiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkge30KIAogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgewotCWJhbGFuY2UgPSBjaGVja3BvaW50ZWRCYWxhbmNlOworICAgIGJhbGFuY2UgPSBjaGVja3BvaW50ZWRCYWxhbmNlOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHsKLQljaGVja3BvaW50ZWRCYWxhbmNlID0gYmFsYW5jZTsKKyAgICBjaGVja3BvaW50ZWRCYWxhbmNlID0gYmFsYW5jZTsKICAgICB9CiAKICAgICBwdWJsaWMgU3RyaW5nIGdldEFjY291bnRIb2xkZXJOYW1lKCkgewpAQCAtNjMsMTUgKzYzLDE1IEBACiAgICAgfQogCiAgICAgcHVibGljIGludCBnZXRCYWxhbmNlKCkgewotCXJldHVybiBiYWxhbmNlOworICAgIHJldHVybiBiYWxhbmNlOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGluY3JlbWVudEJhbGFuY2UoaW50IHZhbCkgewotCWJhbGFuY2UgKz0gdmFsOworICAgIGJhbGFuY2UgKz0gdmFsOwogICAgIH0KIAogICAgIHB1YmxpYyBpbnQgZ2V0Q2hlY2twb2ludGVkQmFsYW5jZSgpIHsKLQlyZXR1cm4gY2hlY2twb2ludGVkQmFsYW5jZTsKKyAgICByZXR1cm4gY2hlY2twb2ludGVkQmFsYW5jZTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBub25UeE5vbkNoZWNrcG9pbnRlZE1ldGhvZCgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9tZXRob2RjaGVja3BvaW50L211bHRpL2VqYi9TRlNCSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL21ldGhvZGNoZWNrcG9pbnQvbXVsdGkvZWpiL1NGU0JIb21lLmphdmEKaW5kZXggZjYyM2VmYi4uMjI2ZDdlZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL21ldGhvZGNoZWNrcG9pbnQvbXVsdGkvZWpiL1NGU0JIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL21ldGhvZGNoZWNrcG9pbnQvbXVsdGkvZWpiL1NGU0JIb21lLmphdmEKQEAgLTI0LDYgKzI0LDYgQEAKICAgICBleHRlbmRzIEVKQkhvbWUKIHsKICAgICBwdWJsaWMgU0ZTQiBjcmVhdGUoU3RyaW5nIGFjY291bnRIb2xkZXJOYW1lLCBpbnQgYmFsYW5jZSkKLQl0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CisgICAgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9tdWx0aS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9tdWx0aS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggNjZjNGIxMi4uODNmYjI4YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL21ldGhvZGNoZWNrcG9pbnQvbXVsdGkvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9tZXRob2RjaGVja3BvaW50L211bHRpL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSw3ICsxLDcgQEAKLURyb3AgdGFibGUgU2ltcGxlRW50aXR5Ow0KLQ0KLUNSRUFURSBUQUJMRSBTaW1wbGVFbnRpdHkgKA0KLSAgICBrZXkgICAgIGNoYXIoMTI4KSBub3QgbnVsbCwNCi0gICAgbmFtZSAgICBjaGFyKDEyOCkNCi0pOw0KLQ0KK0Ryb3AgdGFibGUgU2ltcGxlRW50aXR5OworCitDUkVBVEUgVEFCTEUgU2ltcGxlRW50aXR5ICgKKyAgICBrZXkgICAgIGNoYXIoMTI4KSBub3QgbnVsbCwKKyAgICBuYW1lICAgIGNoYXIoMTI4KQorKTsKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL21ldGhvZGNoZWNrcG9pbnQvbXVsdGkvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9tZXRob2RjaGVja3BvaW50L211bHRpL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggOTM1YzRhNi4uM2YyMWFlYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL21ldGhvZGNoZWNrcG9pbnQvbXVsdGkvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9tdWx0aS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xICsxIEBACi1Ecm9wIHRhYmxlIFNpbXBsZUVudGl0eTsNCitEcm9wIHRhYmxlIFNpbXBsZUVudGl0eTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9tZXRob2RjaGVja3BvaW50L3NpbXBsZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL21ldGhvZGNoZWNrcG9pbnQvc2ltcGxlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggODE2MmM3MC4uYzdjZTRiNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL21ldGhvZGNoZWNrcG9pbnQvc2ltcGxlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL21ldGhvZGNoZWNrcG9pbnQvc2ltcGxlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIxICsxNSwyMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVlLW1ldGhvZGNoZWNrcG9pbnQtc2ltcGxlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9zaW1wbGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL21ldGhvZGNoZWNrcG9pbnQvc2ltcGxlL2J1aWxkLnhtbAppbmRleCAzZDZiOGVjLi5hZmRmNTZhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9zaW1wbGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9tZXRob2RjaGVja3BvaW50L3NpbXBsZS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ4LDEzICs0OCwxMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudCouY2xhc3MsICoqLypTRlNCKi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KQEAgLTY5LDcgKzY5LDcgQEAKICAgICAgICAgPC9hbnRjYWxsPgogICAgIC0tPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPCEtLQogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KQEAgLTgxLDE3ICs4MSwxNyBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgogICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtZWpiLXNxbC1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9zaW1wbGUvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL21ldGhvZGNoZWNrcG9pbnQvc2ltcGxlL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBiNDIwZDgwLi5iY2IyNzhmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9zaW1wbGUvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9tZXRob2RjaGVja3BvaW50L3NpbXBsZS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHJpdmF0ZSBTRlNCSG9tZSBob21lOwpAQCAtNDQsMTMgKzQ0LDEzIEBACiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbc2ltcGxldHhDbGllbnRdIERPTkUgZG9UZXN0KCkuLi4iKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoInNpbXBsZXR4Iik7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgaW5pdFNGU0JMaXN0KCk7ICAgICAvL2NyZWF0ZSBTRlNCcyAKKyAgICAgICAgaW5pdFNGU0JMaXN0KCk7ICAgICAvL2NyZWF0ZSBTRlNCcwogICAgICAgICBhY2Nlc3NTRlNCKCk7ICAgICAgIC8vYWNjZXNzIHRoZSBTRkJTCiAKICAgICB9CkBAIC03NiwyNiArNzYsMjYgQEAKIAogICAgIHB1YmxpYyB2b2lkIGFjY2Vzc1NGU0IoKSB7CiAgICAgICAgIHRyeSB7Ci0JICAgIGJvb2xlYW4gYWN0Q291bnRPSyA9IHRydWU7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWN0aXZhdGVDb3VudFswXTogIiArIHNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpKTsKLQkgICAgYWN0Q291bnRPSyA9IHNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpID09IDA7CisgICAgICAgIGJvb2xlYW4gYWN0Q291bnRPSyA9IHRydWU7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWN0aXZhdGVDb3VudFswXTogIiArIHNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpKTsKKyAgICAgICAgYWN0Q291bnRPSyA9IHNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpID09IDA7CiAKLQkgICAgU3RyaW5nIHJldHJpZXZlZE5hbWUgPSBzZnNiLmdldE5hbWUoKTsKLQkgICAgYm9vbGVhbiBuYW1lT0sgPSBfc2ZzYlByZWZpeC5lcXVhbHNJZ25vcmVDYXNlKHJldHJpZXZlZE5hbWUpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFjdGl2YXRlQ291bnRbMV06ICIgKyBzZnNiLmdldEFjdGl2YXRlQ291bnQoKSk7Ci0JICAgIGFjdENvdW50T0sgPSAoc2ZzYi5nZXRBY3RpdmF0ZUNvdW50KCkgPT0gMSk7CisgICAgICAgIFN0cmluZyByZXRyaWV2ZWROYW1lID0gc2ZzYi5nZXROYW1lKCk7CisgICAgICAgIGJvb2xlYW4gbmFtZU9LID0gX3Nmc2JQcmVmaXguZXF1YWxzSWdub3JlQ2FzZShyZXRyaWV2ZWROYW1lKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBY3RpdmF0ZUNvdW50WzFdOiAiICsgc2ZzYi5nZXRBY3RpdmF0ZUNvdW50KCkpOworICAgICAgICBhY3RDb3VudE9LID0gKHNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpID09IDEpOwogCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWN0aXZhdGVDb3VudFsyXTogIiArIHNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpKTsKLQkgICAgc2ZzYi5nZXRQYXNzaXZhdGVDb3VudCgpOwotCSAgICBhY3RDb3VudE9LID0gKHNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpID09IDEpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFjdGl2YXRlQ291bnRbMl06ICIgKyBzZnNiLmdldEFjdGl2YXRlQ291bnQoKSk7CisgICAgICAgIHNmc2IuZ2V0UGFzc2l2YXRlQ291bnQoKTsKKyAgICAgICAgYWN0Q291bnRPSyA9IChzZnNiLmdldEFjdGl2YXRlQ291bnQoKSA9PSAxKTsKIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFjdGl2YXRlQ291bnRbM106ICIgKyBzZnNiLmdldEFjdGl2YXRlQ291bnQoKSk7Ci0JICAgIHNmc2IuZ2V0UGFzc2l2YXRlQ291bnQoKTsKLQkgICAgYWN0Q291bnRPSyA9IChzZnNiLmdldEFjdGl2YXRlQ291bnQoKSA9PSAxKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBY3RpdmF0ZUNvdW50WzNdOiAiICsgc2ZzYi5nZXRBY3RpdmF0ZUNvdW50KCkpOworICAgICAgICBzZnNiLmdldFBhc3NpdmF0ZUNvdW50KCk7CisgICAgICAgIGFjdENvdW50T0sgPSAoc2ZzYi5nZXRBY3RpdmF0ZUNvdW50KCkgPT0gMSk7CiAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJBY3RpdmF0ZUNvdW50WzRdOiAiICsgc2ZzYi5nZXRBY3RpdmF0ZUNvdW50KCkpOwotCSAgICBzZnNiLmdldFBhc3NpdmF0ZUNvdW50KCk7Ci0JICAgIGFjdENvdW50T0sgPSAoc2ZzYi5nZXRBY3RpdmF0ZUNvdW50KCkgPT0gMSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWN0aXZhdGVDb3VudFs0XTogIiArIHNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpKTsKKyAgICAgICAgc2ZzYi5nZXRQYXNzaXZhdGVDb3VudCgpOworICAgICAgICBhY3RDb3VudE9LID0gKHNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpID09IDEpOwogCiAgICAgICAgICAgICBpZiAobmFtZU9LICYmIGFjdENvdW50T0spIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IGFjY2Vzc1NGU0IgIiwgc3RhdC5QQVNTKTsKQEAgLTEwOSwxNCArMTA5LDE0IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHNsZWVwRm9yKGludCBzZWNvbmRzKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJXYWl0aW5nIGZvciAxMCBzZWNvbmRzIGJlZm9yZSBhY2Nlc3NpbmcuLi4iKTsKLQlmb3IgKGludCBpPTA7IGk8c2Vjb25kczsgaSsrKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIiArICgxMCAtIGkpICsgIiBzZWNvbmRzIGxlZnQuLi4iKTsKLQkgICAgdHJ5IHsKLQkJVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCgxKjEwMDApOwotCSAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkgICAgfQotCX0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldhaXRpbmcgZm9yIDEwIHNlY29uZHMgYmVmb3JlIGFjY2Vzc2luZy4uLiIpOworICAgIGZvciAoaW50IGk9MDsgaTxzZWNvbmRzOyBpKyspIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIiICsgKDEwIC0gaSkgKyAiIHNlY29uZHMgbGVmdC4uLiIpOworICAgICAgICB0cnkgeworICAgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDEqMTAwMCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICB9CisgICAgfQogICAgIH0KIAogfSAvL0NsaWVudHt9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9zaW1wbGUvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9zaW1wbGUvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKaW5kZXggMzk0OTA0Mi4uNDBjOTAzMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL21ldGhvZGNoZWNrcG9pbnQvc2ltcGxlL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9tZXRob2RjaGVja3BvaW50L3NpbXBsZS9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbApAQCAtMjMsMTEgKzIzLDExIEBACiAgICAgIDxlamI+CiAgICAgICAgIDxlamItbmFtZT5TRlNCRUpCPC9lamItbmFtZT4KICAgICAgICAgPGpuZGktbmFtZT5lamIvZWpiX2VlX21ldGhvZGNoZWNrcG9pbnRfc2ltcGxlX1NGU0I8L2puZGktbmFtZT4KLQk8Y2hlY2twb2ludC1hdC1lbmQtb2YtbWV0aG9kPgotCSAgICA8bWV0aG9kPgotCQk8bWV0aG9kLW5hbWU+Z2V0TmFtZTwvbWV0aG9kLW5hbWU+Ci0JICAgIDwvbWV0aG9kPgotCTwvY2hlY2twb2ludC1hdC1lbmQtb2YtbWV0aG9kPgorICAgIDxjaGVja3BvaW50LWF0LWVuZC1vZi1tZXRob2Q+CisgICAgICAgIDxtZXRob2Q+CisgICAgICAgIDxtZXRob2QtbmFtZT5nZXROYW1lPC9tZXRob2QtbmFtZT4KKyAgICAgICAgPC9tZXRob2Q+CisgICAgPC9jaGVja3BvaW50LWF0LWVuZC1vZi1tZXRob2Q+CiAgICAgIDwvZWpiPgogICAgPC9lbnRlcnByaXNlLWJlYW5zPgogPC9zdW4tZWpiLWphcj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9tZXRob2RjaGVja3BvaW50L3NpbXBsZS9lamIvU0ZTQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL21ldGhvZGNoZWNrcG9pbnQvc2ltcGxlL2VqYi9TRlNCLmphdmEKaW5kZXggY2JmZDkzMS4uMjc2N2U0YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL21ldGhvZGNoZWNrcG9pbnQvc2ltcGxlL2VqYi9TRlNCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL21ldGhvZGNoZWNrcG9pbnQvc2ltcGxlL2VqYi9TRlNCLmphdmEKQEAgLTI0LDEyICsyNCwxMiBAQAogewogCiAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLQl0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgaW50IGdldEFjdGl2YXRlQ291bnQoKQotCXRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBpbnQgZ2V0UGFzc2l2YXRlQ291bnQoKQotCXRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL21ldGhvZGNoZWNrcG9pbnQvc2ltcGxlL2VqYi9TRlNCRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9zaW1wbGUvZWpiL1NGU0JFSkIuamF2YQppbmRleCA5OGNjNzQ5Li40MzNlZmQ4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9zaW1wbGUvZWpiL1NGU0JFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9zaW1wbGUvZWpiL1NGU0JFSkIuamF2YQpAQCAtMzAsNyArMzAsNyBAQAogaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIAogcHVibGljIGNsYXNzIFNGU0JFSkIKLSAgICBpbXBsZW1lbnRzIFNlc3Npb25CZWFuIAorICAgIGltcGxlbWVudHMgU2Vzc2lvbkJlYW4KIHsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBMT0NBTF9DSElMRF9TVUZGSVggPSAiX2NoaWxkTG9jYWwiOwpAQCAtNTgsMjEgKzU4LDIxIEBACiAgICAgfQogCiAgICAgcHVibGljIGludCBnZXRBY3RpdmF0ZUNvdW50KCkgewotCXJldHVybiBhY3RpdmF0ZUNvdW50OworICAgIHJldHVybiBhY3RpdmF0ZUNvdW50OwogICAgIH0KIAogICAgIHB1YmxpYyBpbnQgZ2V0UGFzc2l2YXRlQ291bnQoKSB7Ci0JcmV0dXJuIHBhc3NpdmF0ZUNvdW50OworICAgIHJldHVybiBwYXNzaXZhdGVDb3VudDsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7fQogCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7Ci0JYWN0aXZhdGVDb3VudCsrOworICAgIGFjdGl2YXRlQ291bnQrKzsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7Ci0JcGFzc2l2YXRlQ291bnQrKzsKKyAgICBwYXNzaXZhdGVDb3VudCsrOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL21ldGhvZGNoZWNrcG9pbnQvc2ltcGxlL2VqYi9TRlNCSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL21ldGhvZGNoZWNrcG9pbnQvc2ltcGxlL2VqYi9TRlNCSG9tZS5qYXZhCmluZGV4IGEzZjRhOTcuLjZmMjJkYmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9tZXRob2RjaGVja3BvaW50L3NpbXBsZS9lamIvU0ZTQkhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9zaW1wbGUvZWpiL1NGU0JIb21lLmphdmEKQEAgLTI0LDYgKzI0LDYgQEAKICAgICBleHRlbmRzIEVKQkhvbWUKIHsKICAgICBwdWJsaWMgU0ZTQiBjcmVhdGUoU3RyaW5nIHNmc2JOYW1lKQotCXRocm93cyBDcmVhdGVFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9tZXRob2RjaGVja3BvaW50L3NpbXBsZS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9zaW1wbGUvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IDY2YzRiMTIuLjgzZmIyOGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS9tZXRob2RjaGVja3BvaW50L3NpbXBsZS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL21ldGhvZGNoZWNrcG9pbnQvc2ltcGxlL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSw3ICsxLDcgQEAKLURyb3AgdGFibGUgU2ltcGxlRW50aXR5Ow0KLQ0KLUNSRUFURSBUQUJMRSBTaW1wbGVFbnRpdHkgKA0KLSAgICBrZXkgICAgIGNoYXIoMTI4KSBub3QgbnVsbCwNCi0gICAgbmFtZSAgICBjaGFyKDEyOCkNCi0pOw0KLQ0KK0Ryb3AgdGFibGUgU2ltcGxlRW50aXR5OworCitDUkVBVEUgVEFCTEUgU2ltcGxlRW50aXR5ICgKKyAgICBrZXkgICAgIGNoYXIoMTI4KSBub3QgbnVsbCwKKyAgICBuYW1lICAgIGNoYXIoMTI4KQorKTsKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL21ldGhvZGNoZWNrcG9pbnQvc2ltcGxlL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9zaW1wbGUvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAppbmRleCA5MzVjNGE2Li4zZjIxYWViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9zaW1wbGUvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvbWV0aG9kY2hlY2twb2ludC9zaW1wbGUvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbApAQCAtMSArMSBAQAotRHJvcCB0YWJsZSBTaW1wbGVFbnRpdHk7DQorRHJvcCB0YWJsZSBTaW1wbGVFbnRpdHk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdGltZXIvYXV0b3RpbWVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdGltZXIvYXV0b3RpbWVyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYjBlYzczMC4uNDQ0YmRiYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3RpbWVyL2F1dG90aW1lci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90aW1lci9hdXRvdGltZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVlLWF1dG90aW1lciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90aW1lci9hdXRvdGltZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3RpbWVyL2F1dG90aW1lci9idWlsZC54bWwKaW5kZXggNDVhMmE0Zi4uY2NmM2QwOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3RpbWVyL2F1dG90aW1lci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3RpbWVyL2F1dG90aW1lci9idWlsZC54bWwKQEAgLTEyNiwxMSArMTI2LDExIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUtY2xpZW50IiA+Ci0gICAgICAgIDxqYXZhYyBmb3JrPSJ0cnVlIiBpbmNsdWRlQW50UnVudGltZT0iZmFsc2UiIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiBkZWJ1Zz0idHJ1ZSIgCisgICAgICAgIDxqYXZhYyBmb3JrPSJ0cnVlIiBpbmNsdWRlQW50UnVudGltZT0iZmFsc2UiIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiBkZWJ1Zz0idHJ1ZSIKICAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgICAgIHNyY2Rpcj0iJHtlbnYuQVBTX0hPTUV9L2RldnRlc3RzL2FkbWluL2NsaS9zcmMiIGluY2x1ZGVzPSIqKi8qQmFzZURldlRlc3QuamF2YSI+CiAgICAgICAgIDwvamF2YWM+Ci0gICAgICAgIDxqYXZhYyBmb3JrPSJ0cnVlIiBpbmNsdWRlQW50UnVudGltZT0iZmFsc2UiIAorICAgICAgICA8amF2YWMgZm9yaz0idHJ1ZSIgaW5jbHVkZUFudFJ1bnRpbWU9ImZhbHNlIgogICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICAgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIGRlYnVnPSJ0cnVlIiBzcmNkaXI9ImNsaWVudCIgaW5jbHVkZXM9IioqLyouamF2YSI+CiAgICAgICAgICAgICA8Y2xhc3NwYXRoIHBhdGg9IiR7Y2xhc3NwYXRofSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3RpbWVyL2F1dG90aW1lci9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdGltZXIvYXV0b3RpbWVyL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBiYjM1MjdiLi4wMzJlYzUxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdGltZXIvYXV0b3RpbWVyL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdGltZXIvYXV0b3RpbWVyL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogaW1wb3J0IGphdmEudXRpbC4qOwogCiAvKgotICogQ0xJIERldiB0ZXN0IAorICogQ0xJIERldiB0ZXN0CiAgKiBAYXV0aG9yIG12YXRraW5hCiAgKi8KIHB1YmxpYyBjbGFzcyBDbGllbnQgZXh0ZW5kcyBBZG1pbkJhc2VEZXZUZXN0IHsKQEAgLTE2NSw3ICsxNjUsNyBAQAogCiAgICAgICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IGNvbm4uZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwotICAKKwogICAgICAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOwogICAgICAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUHJvY2Vzc2luZyBsaW5lOiAiICsgbGluZSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdGltZXIvYXV0b3RpbWVyL3dhci9WZXJpZnlTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdGltZXIvYXV0b3RpbWVyL3dhci9WZXJpZnlTZXJ2bGV0LmphdmEKaW5kZXggNmYxMjQwZi4uOWNjODE3ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3RpbWVyL2F1dG90aW1lci93YXIvVmVyaWZ5U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90aW1lci9hdXRvdGltZXIvd2FyL1ZlcmlmeVNlcnZsZXQuamF2YQpAQCAtNDMsNyArNDMsNyBAQAogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcC5nZXRXcml0ZXIoKTsKLQlyZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKKyAgICByZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKIAogICAgICAgICBTdHJpbmcgcGFyYW0gPSByZXEuZ2V0UXVlcnlTdHJpbmcoKTsKICAgICAgICAgb3V0LnByaW50bG4oIjxodG1sPiIpOwpAQCAtNTIsNyArNTIsNyBAQAogICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvaGVhZD4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8Ym9keT4iKTsKICAgICAgICAgdHJ5IHsKLQkgICAgb3V0LnByaW50bG4oIlJFU1VMVDoiICsgYmVhbi50aW1lb3V0UmVjZWl2ZWQocGFyYW0pKTsKKyAgICAgICAgb3V0LnByaW50bG4oIlJFU1VMVDoiICsgYmVhbi50aW1lb3V0UmVjZWl2ZWQocGFyYW0pKTsKICAgICAgICAgfWNhdGNoKFRocm93YWJsZSBlKXsKICAgICAgICAgICAgIG91dC5wcmludGxuKCJnb3QgZXhjZXB0aW9uIik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbihlKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90aW1lci9jbGkvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90aW1lci9jbGkvYnVpbGQucHJvcGVydGllcwppbmRleCA2Zjk4NzFlLi5lZjFiNTQ4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdGltZXIvY2xpL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3RpbWVyL2NsaS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKICAgY2x1c3Rlci1uYW1lIGlzIHNldCB0byBjbHVzdGVyMSBpbiBhcHBzZXJ2LXRlc3RzL2NvbmZpZywgYW5kIHNlZW1zIGhhcmQKICAgdG8gb3ZlcnJpZGUuICBTbyBzdGlsbCB1c2UgY2x1c3RlcjEKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90aW1lci9jbGkvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3RpbWVyL2NsaS9idWlsZC54bWwKaW5kZXggNzAwNGQ1ZS4uNWY5YjQ0ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3RpbWVyL2NsaS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3RpbWVyL2NsaS9idWlsZC54bWwKQEAgLTI4LDcgKzI4LDcgQEAKIAogPHByb2plY3QgbmFtZT0iZGV2dGVzdHMuZWpiLmVlLnRpbWVyIiBkZWZhdWx0PSJ1c2FnZSIgYmFzZWRpcj0iLiI+CiAgICAgPHByb3BlcnR5IGZpbGU9ImJ1aWxkLnByb3BlcnRpZXMiLz4KLSAgICAKKwogICAgICZjb21tb25TZXR1cDsKICAgICAmY29tbW9uQnVpbGQ7CiAgICAgJmVlY29tbW9uQnVpbGQ7CkBAIC0xNDgsMTIgKzE0OCwxMiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+Ci0gICAgICAgIDxqYXZhYyBmb3JrPSJ0cnVlIiBpbmNsdWRlQW50UnVudGltZT0iZmFsc2UiIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiBkZWJ1Zz0idHJ1ZSIgCisgICAgICAgIDxqYXZhYyBmb3JrPSJ0cnVlIiBpbmNsdWRlQW50UnVudGltZT0iZmFsc2UiIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiBkZWJ1Zz0idHJ1ZSIKICAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICAgc3JjZGlyPSIke2Vudi5BUFNfSE9NRX0vZGV2dGVzdHMvYWRtaW4vY2xpL3NyYyIgaW5jbHVkZXM9IioqL0FkbWluQmFzZURldlRlc3QuamF2YSI+CiAgICAgICAgIDwvamF2YWM+CiAKLSAgICAgICAgPGphdmFjIGZvcms9InRydWUiIGluY2x1ZGVBbnRSdW50aW1lPSJmYWxzZSIgCisgICAgICAgIDxqYXZhYyBmb3JrPSJ0cnVlIiBpbmNsdWRlQW50UnVudGltZT0iZmFsc2UiCiAgICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphcjoke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiBkZWJ1Zz0idHJ1ZSIgc3JjZGlyPSJzcmMiIGluY2x1ZGVzPSIqKi8qLmphdmEiPgogICAgICAgICA8L2phdmFjPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3RpbWVyL2NsaS9zcmMvZWV0aW1lci9NaWdyYXRlVGltZXJzVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3RpbWVyL2NsaS9zcmMvZWV0aW1lci9NaWdyYXRlVGltZXJzVGVzdC5qYXZhCmluZGV4IDNlYzMwNzUuLjlkNzRlMmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90aW1lci9jbGkvc3JjL2VldGltZXIvTWlncmF0ZVRpbWVyc1Rlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdGltZXIvY2xpL3NyYy9lZXRpbWVyL01pZ3JhdGVUaW1lcnNUZXN0LmphdmEKQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgICAgICAgIG1pZ3JhdGVUaW1lcnNPdXRzaWRlQ2x1c3RlcigpOwogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgLy9hbGwgYXNzb2NpYXRlZCB0aW1lcnMgd2lsbCBiZSByZW1vdmVkIHVwb24gdW5kZXBsb3ksIGV2ZW4gaWYgc29tZQotICAgICAgICAgICAgLy9pbnN0YW5jZXMgYXJlIG9mZmxpbmUuIAorICAgICAgICAgICAgLy9pbnN0YW5jZXMgYXJlIG9mZmxpbmUuCiAgICAgICAgICAgICB1bmRlcGxveUVqYihjbHVzdGVyX25hbWUpOwogICAgICAgICB9CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CkBAIC00OCw3ICs0OCw3IEBACiAgICAgLy9mcm9tIHRoZSBzYW1lIGNsdXN0ZXIKICAgICBwdWJsaWMgdm9pZCBtaWdyYXRlVGltZXJzKCkgewogICAgICAgICBTdHJpbmcgdGVzdE5hbWUgPSAibWlncmF0ZVRpbWVycyI7Ci0gICAgICAgIAorCiAgICAgICAgIC8vbm8gYXV0b21hdGljIG1pZ3JhdGlvbiB3aGVuIHN0b3BwaW5nIGEgaW5zdGFuY2Ugc2luY2UgZ21zIGhhcyBiZWVuIGRpc2FibGVkCiAgICAgICAgIGFzYWRtaW4oInN0b3AtaW5zdGFuY2UiLCBpbnN0YW5jZV9uYW1lXzEpOwogICAgICAgICBBc2FkbWluUmV0dXJuIG91dHB1dCA9IGFzYWRtaW5XaXRoT3V0cHV0KCJtaWdyYXRlLXRpbWVycyIsIGluc3RhbmNlX25hbWVfMSk7CkBAIC03OSw3ICs3OSw3IEBACiAKICAgICBwdWJsaWMgdm9pZCBtaWdyYXRlVGltZXJzT3V0c2lkZUNsdXN0ZXIoKSB7CiAgICAgICAgIFN0cmluZyB0ZXN0TmFtZSA9ICJtaWdyYXRlVGltZXJzT3V0c2lkZUNsdXN0ZXIiOwotICAgICAgICAKKwogICAgICAgICAvL25vIGF1dG9tYXRpYyBtaWdyYXRpb24gd2hlbiBzdG9wcGluZyBhIGluc3RhbmNlIHNpbmNlIGdtcyBoYXMgYmVlbiBkaXNhYmxlZAogICAgICAgICBhc2FkbWluKCJzdG9wLWluc3RhbmNlIiwgaW5zdGFuY2VfbmFtZV8xKTsKICAgICAgICAgYXNhZG1pbigic3RhcnQtaW5zdGFuY2UiLCBpbnN0YW5jZV9uYW1lXzMpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3RpbWVyL2RvbWFpbmRlcGxveW1lbnQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90aW1lci9kb21haW5kZXBsb3ltZW50L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggODEyOTU3NS4uMThmNzRjYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3RpbWVyL2RvbWFpbmRlcGxveW1lbnQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdGltZXIvZG9tYWluZGVwbG95bWVudC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWUtZG9tYWluZGVwbG95bWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90aW1lci9kb21haW5kZXBsb3ltZW50L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90aW1lci9kb21haW5kZXBsb3ltZW50L2J1aWxkLnhtbAppbmRleCBhMzAzZWUyLi4zZWY3M2JhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdGltZXIvZG9tYWluZGVwbG95bWVudC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3RpbWVyL2RvbWFpbmRlcGxveW1lbnQvYnVpbGQueG1sCkBAIC0yMDMsMTEgKzIwMywxMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlLWNsaWVudCIgPgotICAgICAgICA8amF2YWMgZm9yaz0idHJ1ZSIgaW5jbHVkZUFudFJ1bnRpbWU9ImZhbHNlIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgZGVidWc9InRydWUiIAorICAgICAgICA8amF2YWMgZm9yaz0idHJ1ZSIgaW5jbHVkZUFudFJ1bnRpbWU9ImZhbHNlIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgZGVidWc9InRydWUiCiAgICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICAgICBzcmNkaXI9IiR7ZW52LkFQU19IT01FfS9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjIiBpbmNsdWRlcz0iKiovKkJhc2VEZXZUZXN0LmphdmEiPgogICAgICAgICA8L2phdmFjPgotICAgICAgICA8amF2YWMgZm9yaz0idHJ1ZSIgaW5jbHVkZUFudFJ1bnRpbWU9ImZhbHNlIiAKKyAgICAgICAgPGphdmFjIGZvcms9InRydWUiIGluY2x1ZGVBbnRSdW50aW1lPSJmYWxzZSIKICAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiBkZWJ1Zz0idHJ1ZSIgc3JjZGlyPSJjbGllbnQiIGluY2x1ZGVzPSIqKi8qLmphdmEiPgogICAgICAgICAgICAgPGNsYXNzcGF0aCBwYXRoPSIke2NsYXNzcGF0aH0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90aW1lci9kb21haW5kZXBsb3ltZW50L2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90aW1lci9kb21haW5kZXBsb3ltZW50L2NsaWVudC9DbGllbnQuamF2YQppbmRleCA5OTJmZTgzLi5hNmNhNTU2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdGltZXIvZG9tYWluZGVwbG95bWVudC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3RpbWVyL2RvbWFpbmRlcGxveW1lbnQvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiBpbXBvcnQgamF2YS51dGlsLio7CiAKIC8qCi0gKiBDTEkgRGV2IHRlc3QgCisgKiBDTEkgRGV2IHRlc3QKICAqIEBhdXRob3IgbXZhdGtpbmEKICAqLwogcHVibGljIGNsYXNzIENsaWVudCBleHRlbmRzIEFkbWluQmFzZURldlRlc3QgewpAQCAtMTQ4LDcgKzE0OCw3IEBACiAKICAgICAgICAgICAgIElucHV0U3RyZWFtIGlzID0gY29ubi5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICAgICAgQnVmZmVyZWRSZWFkZXIgaW5wdXQgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7Ci0gIAorCiAgICAgICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CiAgICAgICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQcm9jZXNzaW5nIGxpbmU6ICIgKyBsaW5lKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90aW1lci9kb21haW5kZXBsb3ltZW50L3dhci9WZXJpZnlTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdGltZXIvZG9tYWluZGVwbG95bWVudC93YXIvVmVyaWZ5U2VydmxldC5qYXZhCmluZGV4IGEzZWMyYjEuLmQ2MWNmN2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90aW1lci9kb21haW5kZXBsb3ltZW50L3dhci9WZXJpZnlTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3RpbWVyL2RvbWFpbmRlcGxveW1lbnQvd2FyL1ZlcmlmeVNlcnZsZXQuamF2YQpAQCAtNDMsNyArNDMsNyBAQAogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcC5nZXRXcml0ZXIoKTsKLQlyZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKKyAgICByZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKIAogICAgICAgICBvdXQucHJpbnRsbigiPGh0bWw+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGhlYWQ+Iik7CkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9oZWFkPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxib2R5PiIpOwogICAgICAgICB0cnkgewotCSAgICBvdXQucHJpbnRsbigiUkVTVUxUOiIgKyBiZWFuLmNvdW50VGltZXJzKCkpOworICAgICAgICBvdXQucHJpbnRsbigiUkVTVUxUOiIgKyBiZWFuLmNvdW50VGltZXJzKCkpOwogICAgICAgICB9Y2F0Y2goVGhyb3dhYmxlIGUpewogICAgICAgICAgICAgb3V0LnByaW50bG4oImdvdCBleGNlcHRpb24iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKGUpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3RpbWVyL2ZhaWxvdmVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdGltZXIvZmFpbG92ZXIvYnVpbGQucHJvcGVydGllcwppbmRleCBmZTY0YzFlLi43OGQ2MjEzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdGltZXIvZmFpbG92ZXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdGltZXIvZmFpbG92ZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVlLXRpbWVyLWZhaWxvdmVyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3RpbWVyL2ZhaWxvdmVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90aW1lci9mYWlsb3Zlci9idWlsZC54bWwKaW5kZXggZDUxZDk2ZS4uZGU1N2RjNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3RpbWVyL2ZhaWxvdmVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdGltZXIvZmFpbG92ZXIvYnVpbGQueG1sCkBAIC0xMzcsMTEgKzEzNywxMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlLWNsaWVudCIgPgotICAgICAgICA8amF2YWMgZm9yaz0idHJ1ZSIgaW5jbHVkZUFudFJ1bnRpbWU9ImZhbHNlIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgZGVidWc9InRydWUiIAorICAgICAgICA8amF2YWMgZm9yaz0idHJ1ZSIgaW5jbHVkZUFudFJ1bnRpbWU9ImZhbHNlIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgZGVidWc9InRydWUiCiAgICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICAgICBzcmNkaXI9IiR7ZW52LkFQU19IT01FfS9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjIiBpbmNsdWRlcz0iKiovKkJhc2VEZXZUZXN0LmphdmEiPgogICAgICAgICA8L2phdmFjPgotICAgICAgICA8amF2YWMgZm9yaz0idHJ1ZSIgaW5jbHVkZUFudFJ1bnRpbWU9ImZhbHNlIiAKKyAgICAgICAgPGphdmFjIGZvcms9InRydWUiIGluY2x1ZGVBbnRSdW50aW1lPSJmYWxzZSIKICAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiBkZWJ1Zz0idHJ1ZSIgc3JjZGlyPSJjbGllbnQiIGluY2x1ZGVzPSIqKi8qLmphdmEiPgogICAgICAgICAgICAgPGNsYXNzcGF0aCBwYXRoPSIke2NsYXNzcGF0aH0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90aW1lci9mYWlsb3Zlci9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdGltZXIvZmFpbG92ZXIvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDlkODZiNTMuLjU4MmJhMDIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90aW1lci9mYWlsb3Zlci9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3RpbWVyL2ZhaWxvdmVyL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogaW1wb3J0IGphdmEudXRpbC4qOwogCiAvKgotICogQ0xJIERldiB0ZXN0IAorICogQ0xJIERldiB0ZXN0CiAgKiBAYXV0aG9yIG12YXRraW5hCiAgKi8KIHB1YmxpYyBjbGFzcyBDbGllbnQgZXh0ZW5kcyBBZG1pbkJhc2VEZXZUZXN0IHsKQEAgLTE2NSw3ICsxNjUsNyBAQAogCiAgICAgICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IGNvbm4uZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwotICAKKwogICAgICAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOwogICAgICAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUHJvY2Vzc2luZyBsaW5lOiAiICsgbGluZSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdGltZXIvZmFpbG92ZXIvd2FyL1ZlcmlmeVNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90aW1lci9mYWlsb3Zlci93YXIvVmVyaWZ5U2VydmxldC5qYXZhCmluZGV4IDZmMTI0MGYuLjljYzgxN2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90aW1lci9mYWlsb3Zlci93YXIvVmVyaWZ5U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90aW1lci9mYWlsb3Zlci93YXIvVmVyaWZ5U2VydmxldC5qYXZhCkBAIC00Myw3ICs0Myw3IEBACiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKIAogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwLmdldFdyaXRlcigpOwotCXJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOworICAgIHJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogCiAgICAgICAgIFN0cmluZyBwYXJhbSA9IHJlcS5nZXRRdWVyeVN0cmluZygpOwogICAgICAgICBvdXQucHJpbnRsbigiPGh0bWw+Iik7CkBAIC01Miw3ICs1Miw3IEBACiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9oZWFkPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxib2R5PiIpOwogICAgICAgICB0cnkgewotCSAgICBvdXQucHJpbnRsbigiUkVTVUxUOiIgKyBiZWFuLnRpbWVvdXRSZWNlaXZlZChwYXJhbSkpOworICAgICAgICBvdXQucHJpbnRsbigiUkVTVUxUOiIgKyBiZWFuLnRpbWVvdXRSZWNlaXZlZChwYXJhbSkpOwogICAgICAgICB9Y2F0Y2goVGhyb3dhYmxlIGUpewogICAgICAgICAgICAgb3V0LnByaW50bG4oImdvdCBleGNlcHRpb24iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKGUpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3RpbWVyL2dldGFsbHRpbWVycy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3RpbWVyL2dldGFsbHRpbWVycy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGY1YzA5ZDIuLjE3YTMyNzkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90aW1lci9nZXRhbGx0aW1lcnMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdGltZXIvZ2V0YWxsdGltZXJzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lZS1nZXRhbGx0aW1lcnMiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdGltZXIvZ2V0YWxsdGltZXJzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90aW1lci9nZXRhbGx0aW1lcnMvYnVpbGQueG1sCmluZGV4IDU4NjIzZDMuLjYzZjljZDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90aW1lci9nZXRhbGx0aW1lcnMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90aW1lci9nZXRhbGx0aW1lcnMvYnVpbGQueG1sCkBAIC0xMjksMTEgKzEyOSwxMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlLWNsaWVudCIgPgotICAgICAgICA8amF2YWMgZm9yaz0idHJ1ZSIgaW5jbHVkZUFudFJ1bnRpbWU9ImZhbHNlIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgZGVidWc9InRydWUiIAorICAgICAgICA8amF2YWMgZm9yaz0idHJ1ZSIgaW5jbHVkZUFudFJ1bnRpbWU9ImZhbHNlIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgZGVidWc9InRydWUiCiAgICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICAgICBzcmNkaXI9IiR7ZW52LkFQU19IT01FfS9kZXZ0ZXN0cy9hZG1pbi9jbGkvc3JjIiBpbmNsdWRlcz0iKiovKkJhc2VEZXZUZXN0LmphdmEiPgogICAgICAgICA8L2phdmFjPgotICAgICAgICA8amF2YWMgZm9yaz0idHJ1ZSIgaW5jbHVkZUFudFJ1bnRpbWU9ImZhbHNlIiAKKyAgICAgICAgPGphdmFjIGZvcms9InRydWUiIGluY2x1ZGVBbnRSdW50aW1lPSJmYWxzZSIKICAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiBkZWJ1Zz0idHJ1ZSIgc3JjZGlyPSJjbGllbnQiIGluY2x1ZGVzPSIqKi8qLmphdmEiPgogICAgICAgICAgICAgPGNsYXNzcGF0aCBwYXRoPSIke2NsYXNzcGF0aH0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90aW1lci9nZXRhbGx0aW1lcnMvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3RpbWVyL2dldGFsbHRpbWVycy9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggYjE0MTUwYy4uY2IyMTIwOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3RpbWVyL2dldGFsbHRpbWVycy9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3RpbWVyL2dldGFsbHRpbWVycy9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTEzMyw3ICsxMzMsNyBAQAogCiAgICAgICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IGNvbm4uZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwotICAKKwogICAgICAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOwogICAgICAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUHJvY2Vzc2luZyBsaW5lOiAiICsgbGluZSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdGltZXIvZ2V0YWxsdGltZXJzL3dhci9WZXJpZnlTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdGltZXIvZ2V0YWxsdGltZXJzL3dhci9WZXJpZnlTZXJ2bGV0LmphdmEKaW5kZXggYTY1ZTI2Ny4uYWRmZWRjNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3RpbWVyL2dldGFsbHRpbWVycy93YXIvVmVyaWZ5U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90aW1lci9nZXRhbGx0aW1lcnMvd2FyL1ZlcmlmeVNlcnZsZXQuamF2YQpAQCAtNDQsNyArNDQsNyBAQAogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcC5nZXRXcml0ZXIoKTsKLQlyZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKKyAgICByZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgU3RyaW5nIHBhcmFtID0gcmVxLmdldFF1ZXJ5U3RyaW5nKCk7CiAKICAgICAgICAgb3V0LnByaW50bG4oIjxodG1sPiIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXRjbXR0eC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXRjbXR0eC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDY4MWEzODUuLjczYmEyNTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10Y210dHgvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdGNtdHR4L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIxICsxNSwyMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVlLXR4Y2hlY2twb2ludC1ibXRjbXR0eCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXRjbXR0eC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdGNtdHR4L2J1aWxkLnhtbAppbmRleCAyYjExM2FlLi5iMzliYmVhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdGNtdHR4L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdGNtdHR4L2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsMTMgKzQ4LDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50Ki5jbGFzcywgKiovKlNGU0IqLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLWVqYi1zcWwtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgpAQCAtNjksNyArNjksNyBAQAogICAgICAgICA8L2FudGNhbGw+CiAgICAgLS0+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8IS0tCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgpAQCAtODEsMTcgKzgxLDE3IEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CiAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10Y210dHgvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXRjbXR0eC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMTJlZGZmOS4uODg4N2E5ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXRjbXR0eC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXRjbXR0eC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTMwLDcgKzMwLDcgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHJpdmF0ZSBCTVRTZXNzaW9uSG9tZSBob21lOwpAQCAtNDgsMTYgKzQ4LDE2IEBACiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbYm10dHhdIERPTkUgZG9UZXN0KCkuLi4iKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImJtdHR4Iik7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgaW5pdFNGU0IoKTsgICAgIC8vY3JlYXRlIFNGU0JzIAorICAgICAgICBpbml0U0ZTQigpOyAgICAgLy9jcmVhdGUgU0ZTQnMKICAgICAgICAgbm9uVHhBY2Nlc3NDaGVjaygpOyAgICAgICAvL2FjY2VzcyB0aGUgU0ZCUwogICAgICAgICB0eEFjY2Vzc0NoZWNrKCk7ICAgICAgIC8vYWNjZXNzIHRoZSBTRkJTCi0JdHhCTVRDTVRBY2Nlc3MoKTsKKyAgICB0eEJNVENNVEFjY2VzcygpOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbml0U0ZTQigpIHsKQEAgLTg2LDE1ICs4NiwxNSBAQAogCiAgICAgcHVibGljIHZvaWQgbm9uVHhBY2Nlc3NDaGVjaygpIHsKICAgICAgICAgdHJ5IHsKLQkgICAgU3RyaW5nIHJldHJpZXZlZE5hbWUgPSBzZnNiLmdldE5hbWUoKTsKLQkgICAgYm9vbGVhbiBuYW1lT0sgPSBfc2ZzYlByZWZpeC5lcXVhbHNJZ25vcmVDYXNlKHJldHJpZXZlZE5hbWUpOwotCSAgICBib29sZWFuIGFjdENvdW50T0sgPSAoc2ZzYi5nZXRBY3RpdmF0ZUNvdW50KCkgPT0gMCk7CisgICAgICAgIFN0cmluZyByZXRyaWV2ZWROYW1lID0gc2ZzYi5nZXROYW1lKCk7CisgICAgICAgIGJvb2xlYW4gbmFtZU9LID0gX3Nmc2JQcmVmaXguZXF1YWxzSWdub3JlQ2FzZShyZXRyaWV2ZWROYW1lKTsKKyAgICAgICAgYm9vbGVhbiBhY3RDb3VudE9LID0gKHNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpID09IDApOwogCiAgICAgICAgICAgICBpZiAobmFtZU9LICYmIGFjdENvdW50T0spIHsKLQkJcmV0cmlldmVkTmFtZSA9IGNtdFNmc2IuZ2V0TmFtZSgpOwotCQluYW1lT0sgPSBfc2ZzYlByZWZpeC5lcXVhbHNJZ25vcmVDYXNlKHJldHJpZXZlZE5hbWUpOwotCQlhY3RDb3VudE9LID0gKGNtdFNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpID09IDApOwotCSAgICB9CisgICAgICAgIHJldHJpZXZlZE5hbWUgPSBjbXRTZnNiLmdldE5hbWUoKTsKKyAgICAgICAgbmFtZU9LID0gX3Nmc2JQcmVmaXguZXF1YWxzSWdub3JlQ2FzZShyZXRyaWV2ZWROYW1lKTsKKyAgICAgICAgYWN0Q291bnRPSyA9IChjbXRTZnNiLmdldEFjdGl2YXRlQ291bnQoKSA9PSAwKTsKKyAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAobmFtZU9LICYmIGFjdENvdW50T0spIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiYm10Y210dHggbm9uVHhBY2Nlc3NDaGVjayIsIHN0YXQuUEFTUyk7CkBAIC0xMDksMjEgKzEwOSwyMSBAQAogCiAgICAgcHVibGljIHZvaWQgdHhBY2Nlc3NDaGVjaygpIHsKICAgICAgICAgdHJ5IHsKLQkgICAgU3RyaW5nIHJldHJpZXZlZE5hbWUgPSBzZnNiLmdldE5hbWUoKTsKLQkgICAgc2ZzYi5zdGFydFR4KCk7Ci0JICAgIHNmc2IuaW5jcmVtZW50Q291bnQoKTsKLQkgICAgc2ZzYi5jb21taXRUeCgpOworICAgICAgICBTdHJpbmcgcmV0cmlldmVkTmFtZSA9IHNmc2IuZ2V0TmFtZSgpOworICAgICAgICBzZnNiLnN0YXJ0VHgoKTsKKyAgICAgICAgc2ZzYi5pbmNyZW1lbnRDb3VudCgpOworICAgICAgICBzZnNiLmNvbW1pdFR4KCk7CiAKLQkgICAgYm9vbGVhbiBhY3RDb3VudE9LID0gKHNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpID09IDEpOworICAgICAgICBib29sZWFuIGFjdENvdW50T0sgPSAoc2ZzYi5nZXRBY3RpdmF0ZUNvdW50KCkgPT0gMSk7CiAgICAgICAgICAgICBpZiAoYWN0Q291bnRPSykgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJibXRjbXR0eCBCTVR0eEFjY2Vzc0NoZWNrIiwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImJtdGNtdHR4IEJNVHR4QWNjZXNzQ2hlY2siLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQogCi0JICAgIGNtdFNmc2IuaW5jcmVtZW50Q291bnQoKTsKLQkgICAgaW50IHZhbCA9ICBjbXRTZnNiLmdldEFjdGl2YXRlQ291bnQoKTsKLQkgICAgYWN0Q291bnRPSyA9IChjbXRTZnNiLmdldEFjdGl2YXRlQ291bnQoKSA9PSAxKTsKKyAgICAgICAgY210U2ZzYi5pbmNyZW1lbnRDb3VudCgpOworICAgICAgICBpbnQgdmFsID0gIGNtdFNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpOworICAgICAgICBhY3RDb3VudE9LID0gKGNtdFNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpID09IDEpOwogICAgICAgICAgICAgaWYgKGFjdENvdW50T0spIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiYm10Y210dHggQ01UdHhBY2Nlc3NDaGVjayIsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMTM3LDI4ICsxMzcsMjggQEAKIAogICAgIHByaXZhdGUgdm9pZCB0eEJNVENNVEFjY2VzcygpIHsKICAgICAgICAgdHJ5IHsKLQkgICAgYm9vbGVhbiBwYXNzZWQgPSB0cnVlOworICAgICAgICBib29sZWFuIHBhc3NlZCA9IHRydWU7CiAKLQkgICAgQ01UU2Vzc2lvbiBjbXQgPSBzZnNiLmdldENNVFNlc3Npb24oKTsKKyAgICAgICAgQ01UU2Vzc2lvbiBjbXQgPSBzZnNiLmdldENNVFNlc3Npb24oKTsKIAotCSAgICBpbnQgcHJldkNvdW50ID0gc2ZzYi5nZXRBY3RpdmF0ZUNvdW50KCk7Ci0JICAgIGludCBwcmV2Q01UQ291bnQgPSBjbXQuZ2V0QWN0aXZhdGVDb3VudCgpOwotCSAgICAKLQkgICAgc2ZzYi5zdGFydFR4KCk7CisgICAgICAgIGludCBwcmV2Q291bnQgPSBzZnNiLmdldEFjdGl2YXRlQ291bnQoKTsKKyAgICAgICAgaW50IHByZXZDTVRDb3VudCA9IGNtdC5nZXRBY3RpdmF0ZUNvdW50KCk7CiAKLQkJc2ZzYi5pbmNyZW1lbnRDb3VudCgpOwotCQlwYXNzZWQgPSBwYXNzZWQgJiYgKHNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpID09IHByZXZDb3VudCk7CisgICAgICAgIHNmc2Iuc3RhcnRUeCgpOwogCi0JCXNmc2IuYWNjZXNzQ01UQmVhbigpOwotCQlwYXNzZWQgPSBwYXNzZWQgJiYgKHNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpID09IHByZXZDb3VudCk7CisgICAgICAgIHNmc2IuaW5jcmVtZW50Q291bnQoKTsKKyAgICAgICAgcGFzc2VkID0gcGFzc2VkICYmIChzZnNiLmdldEFjdGl2YXRlQ291bnQoKSA9PSBwcmV2Q291bnQpOwogCi0JCWNtdCA9IHNmc2IuZ2V0Q01UU2Vzc2lvbigpOwotCQlwYXNzZWQgPSBwYXNzZWQgJiYgKHNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpID09IHByZXZDb3VudCk7CisgICAgICAgIHNmc2IuYWNjZXNzQ01UQmVhbigpOworICAgICAgICBwYXNzZWQgPSBwYXNzZWQgJiYgKHNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpID09IHByZXZDb3VudCk7CiAKLQkgICAgc2ZzYi5jb21taXRUeCgpOworICAgICAgICBjbXQgPSBzZnNiLmdldENNVFNlc3Npb24oKTsKKyAgICAgICAgcGFzc2VkID0gcGFzc2VkICYmIChzZnNiLmdldEFjdGl2YXRlQ291bnQoKSA9PSBwcmV2Q291bnQpOwogCi0JICAgIHBhc3NlZCA9IHBhc3NlZCAmJiAoc2ZzYi5nZXRBY3RpdmF0ZUNvdW50KCkgPT0gKHByZXZDb3VudCsxKSk7Ci0JICAgIHBhc3NlZCA9IHBhc3NlZCAmJiAoY210LmdldEFjdGl2YXRlQ291bnQoKSA9PSAocHJldkNNVENvdW50KzEpKTsKKyAgICAgICAgc2ZzYi5jb21taXRUeCgpOworCisgICAgICAgIHBhc3NlZCA9IHBhc3NlZCAmJiAoc2ZzYi5nZXRBY3RpdmF0ZUNvdW50KCkgPT0gKHByZXZDb3VudCsxKSk7CisgICAgICAgIHBhc3NlZCA9IHBhc3NlZCAmJiAoY210LmdldEFjdGl2YXRlQ291bnQoKSA9PSAocHJldkNNVENvdW50KzEpKTsKIAogICAgICAgICAgICAgaWYgKHBhc3NlZCkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJibXRjbXR0eCB0eEJNVENNVEFjY2VzcyIsIHN0YXQuUEFTUyk7CkBAIC0xNzEsMTQgKzE3MSwxNCBAQAogICAgICAgICB9CiAgICAgfQogICAgIHByaXZhdGUgdm9pZCBzbGVlcEZvcihpbnQgc2Vjb25kcykgewotCVN5c3RlbS5vdXQucHJpbnRsbigiV2FpdGluZyBmb3IgMTAgc2Vjb25kcyBiZWZvcmUgYWNjZXNzaW5nLi4uIik7Ci0JZm9yIChpbnQgaT0wOyBpPHNlY29uZHM7IGkrKykgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIgKyAoMTAgLSBpKSArICIgc2Vjb25kcyBsZWZ0Li4uIik7Ci0JICAgIHRyeSB7Ci0JCVRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoMSoxMDAwKTsKLQkgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JICAgIH0KLQl9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJXYWl0aW5nIGZvciAxMCBzZWNvbmRzIGJlZm9yZSBhY2Nlc3NpbmcuLi4iKTsKKyAgICBmb3IgKGludCBpPTA7IGk8c2Vjb25kczsgaSsrKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIiArICgxMCAtIGkpICsgIiBzZWNvbmRzIGxlZnQuLi4iKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCgxKjEwMDApOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgfQorICAgIH0KICAgICB9CiAKIH0gLy9DbGllbnR7fQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXRjbXR0eC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXRjbXR0eC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IGRiNDJiNGEuLjI2NGNkNWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10Y210dHgvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdGNtdHR4L2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTM1LDcgKzM1LDcgQEAKICAgICAgICAgPGVqYi1yZWYtdHlwZT5TZXNzaW9uPC9lamItcmVmLXR5cGU+CiAgICAgICAgIDxob21lPmNvbS5zdW4uczFhc2Rldi5lamIuZWUuZWpiLkNNVFNlc3Npb25Ib21lPC9ob21lPgogICAgICAgICA8cmVtb3RlPmNvbS5zdW4uczFhc2Rldi5lamIuZWUuZWpiLkNNVFNlc3Npb248L3JlbW90ZT4KLQk8ZWpiLWxpbms+Q01UU2Vzc2lvbjwvZWpiLWxpbms+CisgICAgPGVqYi1saW5rPkNNVFNlc3Npb248L2VqYi1saW5rPgogICAgICAgPC9lamItcmVmPgogICAgICAgPHNlY3VyaXR5LWlkZW50aXR5PgogICAgICAgICA8dXNlLWNhbGxlci1pZGVudGl0eS8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdGNtdHR4L2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXRjbXR0eC9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAppbmRleCA1NTk4YjVkLi44ODgwODIzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdGNtdHR4L2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10Y210dHgvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKQEAgLTI1LDcgKzI1LDcgQEAKICAgICAgICAgPGpuZGktbmFtZT5lamIvZWpiX2VlX2JtdGNtdHR4X0JNVFNlc3Npb248L2puZGktbmFtZT4KICAgICAgICAgPGJlYW4tY2FjaGU+CiAgICAgICAgICAgICA8bWF4LWNhY2hlLXNpemU+ODwvbWF4LWNhY2hlLXNpemU+Ci0JICAgIDxyZXNpemUtcXVhbnRpdHk+NDwvcmVzaXplLXF1YW50aXR5PgorICAgICAgICA8cmVzaXplLXF1YW50aXR5PjQ8L3Jlc2l6ZS1xdWFudGl0eT4KICAgICAgICAgPC9iZWFuLWNhY2hlPgogICAgICA8L2VqYj4KICAgICAgPGVqYj4KQEAgLTMzLDcgKzMzLDcgQEAKICAgICAgICAgPGpuZGktbmFtZT5lamIvZWpiX2VlX2JtdGNtdHR4X0NNVFNlc3Npb248L2puZGktbmFtZT4KICAgICAgICAgPGJlYW4tY2FjaGU+CiAgICAgICAgICAgICA8bWF4LWNhY2hlLXNpemU+ODwvbWF4LWNhY2hlLXNpemU+Ci0JICAgIDxyZXNpemUtcXVhbnRpdHk+NDwvcmVzaXplLXF1YW50aXR5PgorICAgICAgICA8cmVzaXplLXF1YW50aXR5PjQ8L3Jlc2l6ZS1xdWFudGl0eT4KICAgICAgICAgPC9iZWFuLWNhY2hlPgogICAgICA8L2VqYj4KICAgIDwvZW50ZXJwcmlzZS1iZWFucz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10Y210dHgvZWpiL0JNVFNlc3Npb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10Y210dHgvZWpiL0JNVFNlc3Npb24uamF2YQppbmRleCA4Yjg4MzdkLi4zODViZjc0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdGNtdHR4L2VqYi9CTVRTZXNzaW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXRjbXR0eC9lamIvQk1UU2Vzc2lvbi5qYXZhCkBAIC0yNCwyOSArMjQsMjkgQEAKIHsKIAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0JdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIGludCBnZXRBY3RpdmF0ZUNvdW50KCkKLQl0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgaW50IGdldFBhc3NpdmF0ZUNvdW50KCkKLQl0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgdm9pZCBzdGFydFR4KCkKLQl0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgdm9pZCBjb21taXRUeCgpCi0JdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIHZvaWQgcm9sbGJhY2tUeCgpCi0JdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIHZvaWQgaW5jcmVtZW50Q291bnQoKQotCXRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyB2b2lkIGFjY2Vzc0NNVEJlYW4oKQotCXRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBDTVRTZXNzaW9uIGdldENNVFNlc3Npb24oKQotCXRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10Y210dHgvZWpiL0JNVFNlc3Npb25CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdGNtdHR4L2VqYi9CTVRTZXNzaW9uQmVhbi5qYXZhCmluZGV4IDBjODAxZGQuLjlhMzE5ODcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10Y210dHgvZWpiL0JNVFNlc3Npb25CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXRjbXR0eC9lamIvQk1UU2Vzc2lvbkJlYW4uamF2YQpAQCAtMzAsNyArMzAsNyBAQAogaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIAogcHVibGljIGNsYXNzIEJNVFNlc3Npb25CZWFuCi0gICAgaW1wbGVtZW50cyBTZXNzaW9uQmVhbiAKKyAgICBpbXBsZW1lbnRzIFNlc3Npb25CZWFuCiB7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9DQUxfQ0hJTERfU1VGRklYID0gIl9jaGlsZExvY2FsIjsKQEAgLTM5LDExICszOSwxMSBAQAogCiAgICAgcHJpdmF0ZSBpbnQgYWN0aXZhdGVDb3VudDsKICAgICBwcml2YXRlIGludCBwYXNzaXZhdGVDb3VudDsKLSAgICBwcml2YXRlIGludAljb3VudDsKKyAgICBwcml2YXRlIGludCAgICBjb3VudDsKIAogICAgIHByaXZhdGUgU2Vzc2lvbkNvbnRleHQgICAgICAgICAgICAgIHNlc3Npb25DdHg7CiAgICAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICAgICAgICAgICAgc2ZzYk5hbWU7Ci0gICAgcHJpdmF0ZSBVc2VyVHJhbnNhY3Rpb24JCXVzZXJUeDsKKyAgICBwcml2YXRlIFVzZXJUcmFuc2FjdGlvbiAgICAgICAgdXNlclR4OwogCiAgICAgcHJpdmF0ZSBDTVRTZXNzaW9uSG9tZSBjbXRIb21lOwogICAgIHByaXZhdGUgQ01UU2Vzc2lvbiBjbXRTZnNiOwpAQCAtNTUsMTkgKzU1LDE5IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoIkluIFNGU0IuZWpiQ3JlYXRlKCkgZm9yIG5hbWUgLT4gIiArIHNmc2JOYW1lKTsKICAgICAgICAgdGhpcy5zZnNiTmFtZSA9IHNmc2JOYW1lOwogCi0JdHJ5IHsKLQkgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkgICAgT2JqZWN0IG9ianJlZiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvQ01UU2Vzc2lvbkhvbWUiKTsKLQkgICAgY210SG9tZSA9IChDTVRTZXNzaW9uSG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3coCi0JCW9ianJlZiwgQ01UU2Vzc2lvbkhvbWUuY2xhc3MpOwotCSAgICBjbXRTZnNiID0gKENNVFNlc3Npb24pIGNtdEhvbWUuY3JlYXRlKHNmc2JOYW1lKTsKKyAgICB0cnkgeworICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgICAgICBPYmplY3Qgb2JqcmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9DTVRTZXNzaW9uSG9tZSIpOworICAgICAgICBjbXRIb21lID0gKENNVFNlc3Npb25Ib21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdygKKyAgICAgICAgb2JqcmVmLCBDTVRTZXNzaW9uSG9tZS5jbGFzcyk7CisgICAgICAgIGNtdFNmc2IgPSAoQ01UU2Vzc2lvbikgY210SG9tZS5jcmVhdGUoc2ZzYk5hbWUpOwogCi0JICAgIGZvciAoaW50IGk9MDsgaTxNQVhfU0laRTsgaSsrKSB7Ci0JCWNtdFNlc3Npb25zW2ldID0gKENNVFNlc3Npb24pIGNtdEhvbWUuY3JlYXRlKHNmc2JOYW1lICsgaSk7Ci0JICAgIH0KLQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC50b1N0cmluZygpKTsKLQl9CisgICAgICAgIGZvciAoaW50IGk9MDsgaTxNQVhfU0laRTsgaSsrKSB7CisgICAgICAgIGNtdFNlc3Npb25zW2ldID0gKENNVFNlc3Npb24pIGNtdEhvbWUuY3JlYXRlKHNmc2JOYW1lICsgaSk7CisgICAgICAgIH0KKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC50b1N0cmluZygpKTsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewpAQCAtODAsNjMgKzgwLDYzIEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc3RhcnRUeCgpIHsKLQl0cnkgewotCSAgICB1c2VyVHggPSBzZXNzaW9uQ3R4LmdldFVzZXJUcmFuc2FjdGlvbigpOwotCSAgICB1c2VyVHguYmVnaW4oKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC50b1N0cmluZygpKTsKLQl9CisgICAgdHJ5IHsKKyAgICAgICAgdXNlclR4ID0gc2Vzc2lvbkN0eC5nZXRVc2VyVHJhbnNhY3Rpb24oKTsKKyAgICAgICAgdXNlclR4LmJlZ2luKCk7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXgudG9TdHJpbmcoKSk7CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGNvbW1pdFR4KCkgewotCXRyeSB7Ci0JICAgIHVzZXJUeC5jb21taXQoKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC50b1N0cmluZygpKTsKLQl9CisgICAgdHJ5IHsKKyAgICAgICAgdXNlclR4LmNvbW1pdCgpOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LnRvU3RyaW5nKCkpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCByb2xsYmFja1R4KCkgewotCXRyeSB7Ci0JICAgIHVzZXJUeC5yb2xsYmFjaygpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LnRvU3RyaW5nKCkpOwotCX0KKyAgICB0cnkgeworICAgICAgICB1c2VyVHgucm9sbGJhY2soKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC50b1N0cmluZygpKTsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgaW5jcmVtZW50Q291bnQoKSB7Ci0JY291bnQrKzsKKyAgICBjb3VudCsrOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGFjY2Vzc0NNVEJlYW4oKQotCXRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24KKyAgICB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uCiAgICAgewotCWNtdFNmc2IuaW5jcmVtZW50Q291bnQoKTsKLQlmb3IgKGludCBpPTA7IGk8TUFYX1NJWkU7IGkrKykgewotCSAgICBjbXRTZXNzaW9uc1tpXS5pbmNyZW1lbnRDb3VudCgpOwotCX0KKyAgICBjbXRTZnNiLmluY3JlbWVudENvdW50KCk7CisgICAgZm9yIChpbnQgaT0wOyBpPE1BWF9TSVpFOyBpKyspIHsKKyAgICAgICAgY210U2Vzc2lvbnNbaV0uaW5jcmVtZW50Q291bnQoKTsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIENNVFNlc3Npb24gZ2V0Q01UU2Vzc2lvbigpIHsKLQlyZXR1cm4gY210U2ZzYjsKKyAgICByZXR1cm4gY210U2ZzYjsKICAgICB9CiAKICAgICBwdWJsaWMgaW50IGdldEFjdGl2YXRlQ291bnQoKSB7Ci0JcmV0dXJuIGFjdGl2YXRlQ291bnQ7CisgICAgcmV0dXJuIGFjdGl2YXRlQ291bnQ7CiAgICAgfQogCiAgICAgcHVibGljIGludCBnZXRQYXNzaXZhdGVDb3VudCgpIHsKLQlyZXR1cm4gcGFzc2l2YXRlQ291bnQ7CisgICAgcmV0dXJuIHBhc3NpdmF0ZUNvdW50OwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHt9CiAKICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsKLQlhY3RpdmF0ZUNvdW50Kys7CisgICAgYWN0aXZhdGVDb3VudCsrOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHsKLQlwYXNzaXZhdGVDb3VudCsrOworICAgIHBhc3NpdmF0ZUNvdW50Kys7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdGNtdHR4L2VqYi9CTVRTZXNzaW9uSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXRjbXR0eC9lamIvQk1UU2Vzc2lvbkhvbWUuamF2YQppbmRleCA1YWYxMjY5Li4yMzliYWQ2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdGNtdHR4L2VqYi9CTVRTZXNzaW9uSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10Y210dHgvZWpiL0JNVFNlc3Npb25Ib21lLmphdmEKQEAgLTI0LDYgKzI0LDYgQEAKICAgICBleHRlbmRzIEVKQkhvbWUKIHsKICAgICBwdWJsaWMgQk1UU2Vzc2lvbiBjcmVhdGUoU3RyaW5nIHNmc2JOYW1lKQotCXRocm93cyBDcmVhdGVFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10Y210dHgvZWpiL0NNVFNlc3Npb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10Y210dHgvZWpiL0NNVFNlc3Npb24uamF2YQppbmRleCA4MTA1ZTQ0Li5hMWMxZWI0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdGNtdHR4L2VqYi9DTVRTZXNzaW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXRjbXR0eC9lamIvQ01UU2Vzc2lvbi5qYXZhCkBAIC0yNCwxNSArMjQsMTUgQEAKIHsKIAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0JdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIGludCBnZXRBY3RpdmF0ZUNvdW50KCkKLQl0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgaW50IGdldFBhc3NpdmF0ZUNvdW50KCkKLQl0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgdm9pZCBpbmNyZW1lbnRDb3VudCgpCi0JdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdGNtdHR4L2VqYi9DTVRTZXNzaW9uQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXRjbXR0eC9lamIvQ01UU2Vzc2lvbkJlYW4uamF2YQppbmRleCBiNmI3OGViLi4wNmVjMWMzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdGNtdHR4L2VqYi9DTVRTZXNzaW9uQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10Y210dHgvZWpiL0NNVFNlc3Npb25CZWFuLmphdmEKQEAgLTMwLDcgKzMwLDcgQEAKIGltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiAKIHB1YmxpYyBjbGFzcyBDTVRTZXNzaW9uQmVhbgotICAgIGltcGxlbWVudHMgU2Vzc2lvbkJlYW4gCisgICAgaW1wbGVtZW50cyBTZXNzaW9uQmVhbgogewogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIExPQ0FMX0NISUxEX1NVRkZJWCA9ICJfY2hpbGRMb2NhbCI7CkBAIC0zOSw3ICszOSw3IEBACiAKICAgICBwcml2YXRlIGludCBhY3RpdmF0ZUNvdW50OwogICAgIHByaXZhdGUgaW50IHBhc3NpdmF0ZUNvdW50OwotICAgIHByaXZhdGUgaW50CWNvdW50OworICAgIHByaXZhdGUgaW50ICAgIGNvdW50OwogCiAgICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCAgICAgICAgICAgICAgc2Vzc2lvbkN0eDsKICAgICBwcml2YXRlIFN0cmluZyAgICAgICAgICAgICAgICAgICAgICBzZnNiTmFtZTsKQEAgLTU5LDI1ICs1OSwyNSBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGluY3JlbWVudENvdW50KCkgewotCWNvdW50Kys7CisgICAgY291bnQrKzsKICAgICB9CiAKICAgICBwdWJsaWMgaW50IGdldEFjdGl2YXRlQ291bnQoKSB7Ci0JcmV0dXJuIGFjdGl2YXRlQ291bnQ7CisgICAgcmV0dXJuIGFjdGl2YXRlQ291bnQ7CiAgICAgfQogCiAgICAgcHVibGljIGludCBnZXRQYXNzaXZhdGVDb3VudCgpIHsKLQlyZXR1cm4gcGFzc2l2YXRlQ291bnQ7CisgICAgcmV0dXJuIHBhc3NpdmF0ZUNvdW50OwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHt9CiAKICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsKLQlhY3RpdmF0ZUNvdW50Kys7CisgICAgYWN0aXZhdGVDb3VudCsrOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHsKLQlwYXNzaXZhdGVDb3VudCsrOworICAgIHBhc3NpdmF0ZUNvdW50Kys7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdGNtdHR4L2VqYi9DTVRTZXNzaW9uSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXRjbXR0eC9lamIvQ01UU2Vzc2lvbkhvbWUuamF2YQppbmRleCAxYjcyYzYwLi41ZTZlMTg3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdGNtdHR4L2VqYi9DTVRTZXNzaW9uSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10Y210dHgvZWpiL0NNVFNlc3Npb25Ib21lLmphdmEKQEAgLTI0LDYgKzI0LDYgQEAKICAgICBleHRlbmRzIEVKQkhvbWUKIHsKICAgICBwdWJsaWMgQ01UU2Vzc2lvbiBjcmVhdGUoU3RyaW5nIHNmc2JOYW1lKQotCXRocm93cyBDcmVhdGVFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10Y210dHgvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXRjbXR0eC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggNjZjNGIxMi4uODNmYjI4YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXRjbXR0eC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXRjbXR0eC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsNyArMSw3IEBACi1Ecm9wIHRhYmxlIFNpbXBsZUVudGl0eTsNCi0NCi1DUkVBVEUgVEFCTEUgU2ltcGxlRW50aXR5ICgNCi0gICAga2V5ICAgICBjaGFyKDEyOCkgbm90IG51bGwsDQotICAgIG5hbWUgICAgY2hhcigxMjgpDQotKTsNCi0NCitEcm9wIHRhYmxlIFNpbXBsZUVudGl0eTsKKworQ1JFQVRFIFRBQkxFIFNpbXBsZUVudGl0eSAoCisgICAga2V5ICAgICBjaGFyKDEyOCkgbm90IG51bGwsCisgICAgbmFtZSAgICBjaGFyKDEyOCkKKyk7CisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10Y210dHgvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10Y210dHgvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAppbmRleCA5MzVjNGE2Li4zZjIxYWViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdGNtdHR4L3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXRjbXR0eC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xICsxIEBACi1Ecm9wIHRhYmxlIFNpbXBsZUVudGl0eTsNCitEcm9wIHRhYmxlIFNpbXBsZUVudGl0eTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10dHgvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10dHgvYnVpbGQucHJvcGVydGllcwppbmRleCAzYzA5YmQzLi41Y2VmNzkxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdHR4L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXR0eC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMSArMTUsMjEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lZS10eGNoZWNrcG9pbnQtYm10dHgiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10dHgvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXR0eC9idWlsZC54bWwKaW5kZXggZTljNjkxNDIuLjY0YjhkNGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10dHgvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10dHgvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OCwxMyArNDgsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLyoqLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQqLmNsYXNzLCAqKi8qU0ZTQiouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtZWpiLXNxbC1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CkBAIC02OSw3ICs2OSw3IEBACiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAtLT4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDwhLS0KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CkBAIC04MSwxNyArODEsMTcgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLWVqYi1zcWwtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX3BvaW50YmFzZS5zcWwiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXR0eC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdHR4L2NsaWVudC9DbGllbnQuamF2YQppbmRleCAxYjNhZWEwLi44YWE0NWJiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdHR4L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdHR4L2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjgsNyArMjgsNyBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwcml2YXRlIEJNVFNlc3Npb25Ib21lIGhvbWU7CkBAIC00NCwxNCArNDQsMTQgQEAKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltibXR0eF0gRE9ORSBkb1Rlc3QoKS4uLiIpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiYm10dHgiKTsKLSAgICB9ICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICBpbml0U0ZTQigpOyAgICAgLy9jcmVhdGUgU0ZTQnMgCi0JY2hlY2tQZXJzaXN0ZWRGaXJzdFRpbWUoKTsKKyAgICAgICAgaW5pdFNGU0IoKTsgICAgIC8vY3JlYXRlIFNGU0JzCisgICAgY2hlY2tQZXJzaXN0ZWRGaXJzdFRpbWUoKTsKICAgICAgICAgdHhBY2Nlc3NDaGVjaygpOyAgICAgICAvL2FjY2VzcyB0aGUgU0ZCUwogICAgIH0KIApAQCAtNzYsOTYgKzc2LDk2IEBACiAKICAgICBwdWJsaWMgdm9pZCBjaGVja1BlcnNpc3RlZEZpcnN0VGltZSgpIHsKICAgICAgICAgdHJ5IHsKLQkgICAgaW50IHByZXZBY3RDb3VudCA9ICBzZnNiLmdldEFjdGl2YXRlQ291bnQoKTsKLQkgICAgaW50IG5vd0FjdENvdW50ID0gIHNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpOworICAgICAgICBpbnQgcHJldkFjdENvdW50ID0gIHNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpOworICAgICAgICBpbnQgbm93QWN0Q291bnQgPSAgc2ZzYi5nZXRBY3RpdmF0ZUNvdW50KCk7CiAKLQkgICAgc2ZzYi5zdGFydFR4KCk7Ci0JICAgIHNmc2IuZ2V0VHhOYW1lKCk7Ci0JICAgIHNmc2IuY29tbWl0VHgoKTsKKyAgICAgICAgc2ZzYi5zdGFydFR4KCk7CisgICAgICAgIHNmc2IuZ2V0VHhOYW1lKCk7CisgICAgICAgIHNmc2IuY29tbWl0VHgoKTsKIAotCSAgICBzZnNiLnN0YXJ0VHgoKTsKLQkgICAgc2ZzYi5nZXRUeE5hbWUoKTsKLQkgICAgc2ZzYi5jb21taXRUeCgpOworICAgICAgICBzZnNiLnN0YXJ0VHgoKTsKKyAgICAgICAgc2ZzYi5nZXRUeE5hbWUoKTsKKyAgICAgICAgc2ZzYi5jb21taXRUeCgpOwogCi0JICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgY2hlY2tQZXJzaXN0ZWRGaXJzdFRpbWUiCi0JCSArICIoIiArIHByZXZBY3RDb3VudCArICIgOiAiICsgbm93QWN0Q291bnQgKyAiIDogIgotCQkgKyBzZnNiLmdldEFjdGl2YXRlQ291bnQoKSArICIpIiwgc3RhdC5QQVNTKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBjaGVja1BlcnNpc3RlZEZpcnN0VGltZSIsIHN0YXQuRkFJTCk7Ci0JfQorICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IGNoZWNrUGVyc2lzdGVkRmlyc3RUaW1lIgorICAgICAgICAgKyAiKCIgKyBwcmV2QWN0Q291bnQgKyAiIDogIiArIG5vd0FjdENvdW50ICsgIiA6ICIKKyAgICAgICAgICsgc2ZzYi5nZXRBY3RpdmF0ZUNvdW50KCkgKyAiKSIsIHN0YXQuUEFTUyk7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgY2hlY2tQZXJzaXN0ZWRGaXJzdFRpbWUiLCBzdGF0LkZBSUwpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB0eEFjY2Vzc0NoZWNrKCkgewogICAgICAgICB0cnkgewotCSAgICBpbnQgcHJldkFjdENvdW50ID0gMDsKLQkgICAgaW50IG5vd0FjdENvdW50ID0gMDsKLQkgICAgCi0JICAgIHByZXZBY3RDb3VudCA9ICBzZnNiLmdldEFjdGl2YXRlQ291bnQoKTsKLQkgICAgc2ZzYi5nZXROYW1lKCk7Ci0JICAgIG5vd0FjdENvdW50ID0gIHNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpOwotCSAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IE5vblR4Tm9uQ2hlY2twb2ludGVkTWV0aG9kIgotCQkrICIgKCIgKyBwcmV2QWN0Q291bnQgKyAiID09ICIgKyBub3dBY3RDb3VudCArICIpIiwKLQkJKChwcmV2QWN0Q291bnQgPT0gbm93QWN0Q291bnQpID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKSk7CisgICAgICAgIGludCBwcmV2QWN0Q291bnQgPSAwOworICAgICAgICBpbnQgbm93QWN0Q291bnQgPSAwOwogCi0JICAgIHByZXZBY3RDb3VudCA9ICBzZnNiLmdldEFjdGl2YXRlQ291bnQoKTsKLQkgICAgc2ZzYi5jaGVja3BvaW50KCk7Ci0JICAgIG5vd0FjdENvdW50ID0gIHNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpOwotCSAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IE5vblR4Q2hlY2twb2ludGVkTWV0aG9kIgotCQkrICIgKCIgKyBwcmV2QWN0Q291bnQgKyAiICE9ICIgKyBub3dBY3RDb3VudCArICIpIiwKLQkJKChwcmV2QWN0Q291bnQgIT0gbm93QWN0Q291bnQpID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKSk7CisgICAgICAgIHByZXZBY3RDb3VudCA9ICBzZnNiLmdldEFjdGl2YXRlQ291bnQoKTsKKyAgICAgICAgc2ZzYi5nZXROYW1lKCk7CisgICAgICAgIG5vd0FjdENvdW50ID0gIHNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpOworICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IE5vblR4Tm9uQ2hlY2twb2ludGVkTWV0aG9kIgorICAgICAgICArICIgKCIgKyBwcmV2QWN0Q291bnQgKyAiID09ICIgKyBub3dBY3RDb3VudCArICIpIiwKKyAgICAgICAgKChwcmV2QWN0Q291bnQgPT0gbm93QWN0Q291bnQpID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKSk7CiAKLQkgICAgcHJldkFjdENvdW50ID0gbm93QWN0Q291bnQ7Ci0JICAgIHNmc2Iuc3RhcnRUeCgpOwotCSAgICBub3dBY3RDb3VudCA9ICBzZnNiLmdldEFjdGl2YXRlQ291bnQoKTsKLQkgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCB1dEJlZ2luQ2hlY2siCi0JCSsgIiAoIiArIHByZXZBY3RDb3VudCArICIgPT0gIiArIG5vd0FjdENvdW50ICsgIikiLAotCQkoKHByZXZBY3RDb3VudCA9PSBub3dBY3RDb3VudCkgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpKTsKKyAgICAgICAgcHJldkFjdENvdW50ID0gIHNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpOworICAgICAgICBzZnNiLmNoZWNrcG9pbnQoKTsKKyAgICAgICAgbm93QWN0Q291bnQgPSAgc2ZzYi5nZXRBY3RpdmF0ZUNvdW50KCk7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgTm9uVHhDaGVja3BvaW50ZWRNZXRob2QiCisgICAgICAgICsgIiAoIiArIHByZXZBY3RDb3VudCArICIgIT0gIiArIG5vd0FjdENvdW50ICsgIikiLAorICAgICAgICAoKHByZXZBY3RDb3VudCAhPSBub3dBY3RDb3VudCkgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpKTsKIAotCSAgICBzZnNiLmluY3JlbWVudENvdW50KCk7Ci0JICAgIG5vd0FjdENvdW50ID0gIHNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpOwotCSAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IFR4QnVzaW5lc3NNZXRob2RJbnNpZGVUeCIKLQkJKyAiICgiICsgcHJldkFjdENvdW50ICsgIiA9PSAiICsgbm93QWN0Q291bnQgKyAiKSIsCi0JCSgocHJldkFjdENvdW50ID09IG5vd0FjdENvdW50KSA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCkpOworICAgICAgICBwcmV2QWN0Q291bnQgPSBub3dBY3RDb3VudDsKKyAgICAgICAgc2ZzYi5zdGFydFR4KCk7CisgICAgICAgIG5vd0FjdENvdW50ID0gIHNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpOworICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IHV0QmVnaW5DaGVjayIKKyAgICAgICAgKyAiICgiICsgcHJldkFjdENvdW50ICsgIiA9PSAiICsgbm93QWN0Q291bnQgKyAiKSIsCisgICAgICAgICgocHJldkFjdENvdW50ID09IG5vd0FjdENvdW50KSA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCkpOwogCi0JICAgIHNmc2IuZ2V0VHhOYW1lKCk7Ci0JICAgIG5vd0FjdENvdW50ID0gIHNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpOwotCSAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IFR4TWV0aG9kSW5zaWRlVHgiCi0JCSsgIiAoIiArIHByZXZBY3RDb3VudCArICIgPT0gIiArIG5vd0FjdENvdW50ICsgIikiLAotCQkoKHByZXZBY3RDb3VudCA9PSBub3dBY3RDb3VudCkgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpKTsKKyAgICAgICAgc2ZzYi5pbmNyZW1lbnRDb3VudCgpOworICAgICAgICBub3dBY3RDb3VudCA9ICBzZnNiLmdldEFjdGl2YXRlQ291bnQoKTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBUeEJ1c2luZXNzTWV0aG9kSW5zaWRlVHgiCisgICAgICAgICsgIiAoIiArIHByZXZBY3RDb3VudCArICIgPT0gIiArIG5vd0FjdENvdW50ICsgIikiLAorICAgICAgICAoKHByZXZBY3RDb3VudCA9PSBub3dBY3RDb3VudCkgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpKTsKIAotCSAgICBzZnNiLmdldE5hbWUoKTsKLQkgICAgbm93QWN0Q291bnQgPSAgc2ZzYi5nZXRBY3RpdmF0ZUNvdW50KCk7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgTm9uVHhNZXRob2RJbnNpZGVUeCIKLQkJKyAiICgiICsgcHJldkFjdENvdW50ICsgIiA9PSAiICsgbm93QWN0Q291bnQgKyAiKSIsCi0JCSgocHJldkFjdENvdW50ID09IG5vd0FjdENvdW50KSA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCkpOworICAgICAgICBzZnNiLmdldFR4TmFtZSgpOworICAgICAgICBub3dBY3RDb3VudCA9ICBzZnNiLmdldEFjdGl2YXRlQ291bnQoKTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBUeE1ldGhvZEluc2lkZVR4IgorICAgICAgICArICIgKCIgKyBwcmV2QWN0Q291bnQgKyAiID09ICIgKyBub3dBY3RDb3VudCArICIpIiwKKyAgICAgICAgKChwcmV2QWN0Q291bnQgPT0gbm93QWN0Q291bnQpID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKSk7CiAKLQkgICAgc2ZzYi5jaGVja3BvaW50KCk7Ci0JICAgIG5vd0FjdENvdW50ID0gIHNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpOwotCSAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IGNoZWNrcG9pbnRlZE1ldGhvZEluc2lkZVR4IgotCQkrICIgKCIgKyBwcmV2QWN0Q291bnQgKyAiID09ICIgKyBub3dBY3RDb3VudCArICIpIiwKLQkJKChwcmV2QWN0Q291bnQgPT0gbm93QWN0Q291bnQpID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKSk7CisgICAgICAgIHNmc2IuZ2V0TmFtZSgpOworICAgICAgICBub3dBY3RDb3VudCA9ICBzZnNiLmdldEFjdGl2YXRlQ291bnQoKTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBOb25UeE1ldGhvZEluc2lkZVR4IgorICAgICAgICArICIgKCIgKyBwcmV2QWN0Q291bnQgKyAiID09ICIgKyBub3dBY3RDb3VudCArICIpIiwKKyAgICAgICAgKChwcmV2QWN0Q291bnQgPT0gbm93QWN0Q291bnQpID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKSk7CiAKLQkgICAgc2ZzYi5jb21taXRUeCgpOwotCSAgICBub3dBY3RDb3VudCA9ICBzZnNiLmdldEFjdGl2YXRlQ291bnQoKTsKLQkgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBjb21taXRUeENoZWNrIgotCQkrICIgKCIgKyBwcmV2QWN0Q291bnQgKyAiID09ICIgKyBub3dBY3RDb3VudCArICIpIiwKLQkJKCgocHJldkFjdENvdW50KzEpID09IG5vd0FjdENvdW50KSA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCkpOworICAgICAgICBzZnNiLmNoZWNrcG9pbnQoKTsKKyAgICAgICAgbm93QWN0Q291bnQgPSAgc2ZzYi5nZXRBY3RpdmF0ZUNvdW50KCk7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgY2hlY2twb2ludGVkTWV0aG9kSW5zaWRlVHgiCisgICAgICAgICsgIiAoIiArIHByZXZBY3RDb3VudCArICIgPT0gIiArIG5vd0FjdENvdW50ICsgIikiLAorICAgICAgICAoKHByZXZBY3RDb3VudCA9PSBub3dBY3RDb3VudCkgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpKTsKKworICAgICAgICBzZnNiLmNvbW1pdFR4KCk7CisgICAgICAgIG5vd0FjdENvdW50ID0gIHNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpOworICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IGNvbW1pdFR4Q2hlY2siCisgICAgICAgICsgIiAoIiArIHByZXZBY3RDb3VudCArICIgPT0gIiArIG5vd0FjdENvdW50ICsgIikiLAorICAgICAgICAoKChwcmV2QWN0Q291bnQrMSkgPT0gbm93QWN0Q291bnQpID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKSk7CiAKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgdHhBY2Nlc3NDaGVjayIsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgc2xlZXBGb3IoaW50IHNlY29uZHMpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIldhaXRpbmcgZm9yICIgKyBzZWNvbmRzICsgIiBzZWNvbmRzIGJlZm9yZSBhY2Nlc3NpbmcuLi4iKTsKLQlmb3IgKGludCBpPTA7IGk8c2Vjb25kczsgaSsrKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIiArIChzZWNvbmRzIC0gaSkgKyAiIHNlY29uZHMgbGVmdC4uLiIpOwotCSAgICB0cnkgewotCQlUaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDEqMTAwMCk7Ci0JICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCSAgICB9Ci0JfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2FpdGluZyBmb3IgIiArIHNlY29uZHMgKyAiIHNlY29uZHMgYmVmb3JlIGFjY2Vzc2luZy4uLiIpOworICAgIGZvciAoaW50IGk9MDsgaTxzZWNvbmRzOyBpKyspIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIiICsgKHNlY29uZHMgLSBpKSArICIgc2Vjb25kcyBsZWZ0Li4uIik7CisgICAgICAgIHRyeSB7CisgICAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoMSoxMDAwKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIH0KKyAgICB9CiAgICAgfQogCiB9IC8vQ2xpZW50e30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10dHgvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdHR4L2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCmluZGV4IGJlMTU2NjIuLjI1YWIyODIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10dHgvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXR0eC9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbApAQCAtMjUsMTYgKzI1LDE2IEBACiAgICAgICAgIDxqbmRpLW5hbWU+ZWpiL2VqYl9lZV9ibXR0eF9CTVRTZXNzaW9uPC9qbmRpLW5hbWU+CiAgICAgICAgIDxiZWFuLWNhY2hlPgogICAgICAgICAgICAgPG1heC1jYWNoZS1zaXplPjg8L21heC1jYWNoZS1zaXplPgotCSAgICA8cmVzaXplLXF1YW50aXR5PjQ8L3Jlc2l6ZS1xdWFudGl0eT4KKyAgICAgICAgPHJlc2l6ZS1xdWFudGl0eT40PC9yZXNpemUtcXVhbnRpdHk+CiAgICAgICAgIDwvYmVhbi1jYWNoZT4KLQk8Y2hlY2twb2ludC1hdC1lbmQtb2YtbWV0aG9kPgotCSAgICA8bWV0aG9kPgotCQk8bWV0aG9kLW5hbWU+Y2hlY2twb2ludDwvbWV0aG9kLW5hbWU+Ci0JICAgIDwvbWV0aG9kPgotCSAgICA8bWV0aG9kPgotCQk8bWV0aG9kLW5hbWU+Y2hlY2twb2ludDI8L21ldGhvZC1uYW1lPgotCSAgICA8L21ldGhvZD4KLQk8L2NoZWNrcG9pbnQtYXQtZW5kLW9mLW1ldGhvZD4KKyAgICA8Y2hlY2twb2ludC1hdC1lbmQtb2YtbWV0aG9kPgorICAgICAgICA8bWV0aG9kPgorICAgICAgICA8bWV0aG9kLW5hbWU+Y2hlY2twb2ludDwvbWV0aG9kLW5hbWU+CisgICAgICAgIDwvbWV0aG9kPgorICAgICAgICA8bWV0aG9kPgorICAgICAgICA8bWV0aG9kLW5hbWU+Y2hlY2twb2ludDI8L21ldGhvZC1uYW1lPgorICAgICAgICA8L21ldGhvZD4KKyAgICA8L2NoZWNrcG9pbnQtYXQtZW5kLW9mLW1ldGhvZD4KICAgICAgPC9lamI+CiAgICA8L2VudGVycHJpc2UtYmVhbnM+CiA8L3N1bi1lamItamFyPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXR0eC9lamIvQk1UU2Vzc2lvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXR0eC9lamIvQk1UU2Vzc2lvbi5qYXZhCmluZGV4IDExN2QxY2MuLmQyZGM1ZGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10dHgvZWpiL0JNVFNlc3Npb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdHR4L2VqYi9CTVRTZXNzaW9uLmphdmEKQEAgLTI0LDMzICsyNCwzMyBAQAogewogCiAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLQl0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgU3RyaW5nIGdldFR4TmFtZSgpCi0JdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIHZvaWQgY2hlY2twb2ludCgpCi0JdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIHZvaWQgY2hlY2twb2ludDIoKQotCXRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBpbnQgZ2V0QWN0aXZhdGVDb3VudCgpCi0JdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIGludCBnZXRQYXNzaXZhdGVDb3VudCgpCi0JdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIHZvaWQgc3RhcnRUeCgpCi0JdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIHZvaWQgY29tbWl0VHgoKQotCXRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyB2b2lkIHJvbGxiYWNrVHgoKQotCXRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyB2b2lkIGluY3JlbWVudENvdW50KCkKLQl0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10dHgvZWpiL0JNVFNlc3Npb25CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdHR4L2VqYi9CTVRTZXNzaW9uQmVhbi5qYXZhCmluZGV4IGFkY2MxOTguLmE4MzhhZDAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10dHgvZWpiL0JNVFNlc3Npb25CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXR0eC9lamIvQk1UU2Vzc2lvbkJlYW4uamF2YQpAQCAtMzAsNyArMzAsNyBAQAogaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIAogcHVibGljIGNsYXNzIEJNVFNlc3Npb25CZWFuCi0gICAgaW1wbGVtZW50cyBTZXNzaW9uQmVhbiAKKyAgICBpbXBsZW1lbnRzIFNlc3Npb25CZWFuCiB7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9DQUxfQ0hJTERfU1VGRklYID0gIl9jaGlsZExvY2FsIjsKQEAgLTM5LDExICszOSwxMSBAQAogCiAgICAgcHJpdmF0ZSBpbnQgYWN0aXZhdGVDb3VudDsKICAgICBwcml2YXRlIGludCBwYXNzaXZhdGVDb3VudDsKLSAgICBwcml2YXRlIGludAljb3VudDsKKyAgICBwcml2YXRlIGludCAgICBjb3VudDsKIAogICAgIHByaXZhdGUgU2Vzc2lvbkNvbnRleHQgICAgICAgICAgICAgIHNlc3Npb25DdHg7CiAgICAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICAgICAgICAgICAgc2ZzYk5hbWU7Ci0gICAgcHJpdmF0ZSBVc2VyVHJhbnNhY3Rpb24JCXVzZXJUeDsKKyAgICBwcml2YXRlIFVzZXJUcmFuc2FjdGlvbiAgICAgICAgdXNlclR4OwogCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKFN0cmluZyBzZnNiTmFtZSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCJJbiBTRlNCLmVqYkNyZWF0ZSgpIGZvciBuYW1lIC0+ICIgKyBzZnNiTmFtZSk7CkBAIC03MCw1MCArNzAsNTAgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzdGFydFR4KCkgewotCXRyeSB7Ci0JICAgIHVzZXJUeCA9IHNlc3Npb25DdHguZ2V0VXNlclRyYW5zYWN0aW9uKCk7Ci0JICAgIHVzZXJUeC5iZWdpbigpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LnRvU3RyaW5nKCkpOwotCX0KKyAgICB0cnkgeworICAgICAgICB1c2VyVHggPSBzZXNzaW9uQ3R4LmdldFVzZXJUcmFuc2FjdGlvbigpOworICAgICAgICB1c2VyVHguYmVnaW4oKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC50b1N0cmluZygpKTsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgY29tbWl0VHgoKSB7Ci0JdHJ5IHsKLQkgICAgdXNlclR4LmNvbW1pdCgpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LnRvU3RyaW5nKCkpOwotCX0KKyAgICB0cnkgeworICAgICAgICB1c2VyVHguY29tbWl0KCk7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXgudG9TdHJpbmcoKSk7CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHJvbGxiYWNrVHgoKSB7Ci0JdHJ5IHsKLQkgICAgdXNlclR4LnJvbGxiYWNrKCk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXgudG9TdHJpbmcoKSk7Ci0JfQorICAgIHRyeSB7CisgICAgICAgIHVzZXJUeC5yb2xsYmFjaygpOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LnRvU3RyaW5nKCkpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBpbmNyZW1lbnRDb3VudCgpIHsKLQljb3VudCsrOworICAgIGNvdW50Kys7CiAgICAgfQogCiAgICAgcHVibGljIGludCBnZXRBY3RpdmF0ZUNvdW50KCkgewotCXJldHVybiBhY3RpdmF0ZUNvdW50OworICAgIHJldHVybiBhY3RpdmF0ZUNvdW50OwogICAgIH0KIAogICAgIHB1YmxpYyBpbnQgZ2V0UGFzc2l2YXRlQ291bnQoKSB7Ci0JcmV0dXJuIHBhc3NpdmF0ZUNvdW50OworICAgIHJldHVybiBwYXNzaXZhdGVDb3VudDsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7fQogCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7Ci0JYWN0aXZhdGVDb3VudCsrOworICAgIGFjdGl2YXRlQ291bnQrKzsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7Ci0JcGFzc2l2YXRlQ291bnQrKzsKKyAgICBwYXNzaXZhdGVDb3VudCsrOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXR0eC9lamIvQk1UU2Vzc2lvbkhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10dHgvZWpiL0JNVFNlc3Npb25Ib21lLmphdmEKaW5kZXggNWFmMTI2OS4uMjM5YmFkNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXR0eC9lamIvQk1UU2Vzc2lvbkhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdHR4L2VqYi9CTVRTZXNzaW9uSG9tZS5qYXZhCkBAIC0yNCw2ICsyNCw2IEBACiAgICAgZXh0ZW5kcyBFSkJIb21lCiB7CiAgICAgcHVibGljIEJNVFNlc3Npb24gY3JlYXRlKFN0cmluZyBzZnNiTmFtZSkKLQl0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CisgICAgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdHR4L3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10dHgvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IDY2YzRiMTIuLjgzZmIyOGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10dHgvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10dHgvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDcgKzEsNyBAQAotRHJvcCB0YWJsZSBTaW1wbGVFbnRpdHk7DQotDQotQ1JFQVRFIFRBQkxFIFNpbXBsZUVudGl0eSAoDQotICAgIGtleSAgICAgY2hhcigxMjgpIG5vdCBudWxsLA0KLSAgICBuYW1lICAgIGNoYXIoMTI4KQ0KLSk7DQotDQorRHJvcCB0YWJsZSBTaW1wbGVFbnRpdHk7CisKK0NSRUFURSBUQUJMRSBTaW1wbGVFbnRpdHkgKAorICAgIGtleSAgICAgY2hhcigxMjgpIG5vdCBudWxsLAorICAgIG5hbWUgICAgY2hhcigxMjgpCispOworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdHR4L3NxbC9kcm9wX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2JtdHR4L3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggOTM1YzRhNi4uM2YyMWFlYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9ibXR0eC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYm10dHgvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbApAQCAtMSArMSBAQAotRHJvcCB0YWJsZSBTaW1wbGVFbnRpdHk7DQorRHJvcCB0YWJsZSBTaW1wbGVFbnRpdHk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYnVpbGQueG1sCmluZGV4IGQyODZlOTAuLjZjMzZlNjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvYnVpbGQueG1sCkBAIC01Myw5ICs1Myw5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYi1lZSB0ZXN0cykKLQk8L2VjaG8+CisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamItZWUgdGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9zaW1wbGV0eC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9zaW1wbGV0eC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDdjOWJmYTIuLjNmYzZmNjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvc2ltcGxldHgvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L3NpbXBsZXR4L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIxICsxNSwyMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVlLXR4Y2hlY2twb2ludC1zaW1wbGV0eCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9zaW1wbGV0eC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L3NpbXBsZXR4L2J1aWxkLnhtbAppbmRleCBlZjE2YTI2Li43NWM3MDA4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L3NpbXBsZXR4L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L3NpbXBsZXR4L2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsMTMgKzQ4LDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50Ki5jbGFzcywgKiovKlNGU0IqLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLWVqYi1zcWwtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgpAQCAtNjksNyArNjksNyBAQAogICAgICAgICA8L2FudGNhbGw+CiAgICAgLS0+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8IS0tCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgpAQCAtODEsMTcgKzgxLDE3IEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CiAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvc2ltcGxldHgvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9zaW1wbGV0eC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggZTM5MTdiZi4uNWYxZWJiNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9zaW1wbGV0eC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9zaW1wbGV0eC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHJpdmF0ZSBTRlNCSG9tZSBob21lOwpAQCAtNDQsMTcgKzQ0LDE3IEBACiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbc2ltcGxldHhDbGllbnRdIERPTkUgZG9UZXN0KCkuLi4iKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoInNpbXBsZXR4Iik7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgaW5pdFNGU0JMaXN0KCk7ICAgICAvL2NyZWF0ZSBTRlNCcyAKKyAgICAgICAgaW5pdFNGU0JMaXN0KCk7ICAgICAvL2NyZWF0ZSBTRlNCcwogICAgICAgICBjbXROb25UeEFjY2VzcygpOyAgICAgICAvL2FjY2VzcyB0aGUgU0ZCUwogICAgICAgICBjbXRUeEFjY2VzcygpOyAgICAgICAvL2FjY2VzcyB0aGUgU0ZCUwogICAgICAgICBjbXROb25UeEFjY2VzcyhzZnNiKTsgICAgICAgLy9hY2Nlc3MgdGhlIFNGQlMKLQlyZW1vdmVUZXN0KCk7CisgICAgcmVtb3ZlVGVzdCgpOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbml0U0ZTQkxpc3QoKSB7CkBAIC03OCwxMiArNzgsMTIgQEAKIAogICAgIHB1YmxpYyB2b2lkIGNtdFR4QWNjZXNzKCkgewogICAgICAgICB0cnkgewotCSAgICBpbnQgcHJldkNvdW50ID0gc2ZzYi5nZXRBY3RpdmF0ZUNvdW50KCk7Ci0JICAgIFN0cmluZyByZXRyaWV2ZWROYW1lID0gc2ZzYi5nZXRUeE5hbWUoKTsKLQkgICAgYm9vbGVhbiBuYW1lT0sgPSBfc2ZzYlByZWZpeC5lcXVhbHNJZ25vcmVDYXNlKHJldHJpZXZlZE5hbWUpOwotCSAgICBpbnQgbm93Q291bnQgPSBzZnNiLmdldEFjdGl2YXRlQ291bnQoKTsKLQkgICAgYm9vbGVhbiBhY3RDb3VudE9LID0gKHByZXZDb3VudCsxID09IG5vd0NvdW50KTsKLQkgICAgU3RyaW5nIG1zZyA9ICIoIiArIHByZXZDb3VudCArICIrMSA9PSAiICsgbm93Q291bnQgKyAiKSI7CisgICAgICAgIGludCBwcmV2Q291bnQgPSBzZnNiLmdldEFjdGl2YXRlQ291bnQoKTsKKyAgICAgICAgU3RyaW5nIHJldHJpZXZlZE5hbWUgPSBzZnNiLmdldFR4TmFtZSgpOworICAgICAgICBib29sZWFuIG5hbWVPSyA9IF9zZnNiUHJlZml4LmVxdWFsc0lnbm9yZUNhc2UocmV0cmlldmVkTmFtZSk7CisgICAgICAgIGludCBub3dDb3VudCA9IHNmc2IuZ2V0QWN0aXZhdGVDb3VudCgpOworICAgICAgICBib29sZWFuIGFjdENvdW50T0sgPSAocHJldkNvdW50KzEgPT0gbm93Q291bnQpOworICAgICAgICBTdHJpbmcgbXNnID0gIigiICsgcHJldkNvdW50ICsgIisxID09ICIgKyBub3dDb3VudCArICIpIjsKICAgICAgICAgICAgIGlmIChuYW1lT0sgJiYgYWN0Q291bnRPSykgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgY210VHhBY2Nlc3MgIiArIG1zZywgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC05NywxMiArOTcsMTIgQEAKIAogICAgIHB1YmxpYyB2b2lkIGNtdE5vblR4QWNjZXNzKCkgewogICAgICAgICB0cnkgewotCSAgICBpbnQgcHJldkNvdW50ID0gc2ZzYi5nZXRBY3RpdmF0ZUNvdW50KCk7Ci0JICAgIFN0cmluZyByZXRyaWV2ZWROYW1lID0gc2ZzYi5nZXROYW1lKCk7Ci0JICAgIGJvb2xlYW4gbmFtZU9LID0gX3Nmc2JQcmVmaXguZXF1YWxzSWdub3JlQ2FzZShyZXRyaWV2ZWROYW1lKTsKLQkgICAgaW50IG5vd0NvdW50ID0gc2ZzYi5nZXRBY3RpdmF0ZUNvdW50KCk7Ci0JICAgIGJvb2xlYW4gYWN0Q291bnRPSyA9IChwcmV2Q291bnQgPT0gbm93Q291bnQpOwotCSAgICBTdHJpbmcgbXNnID0gIigiICsgcHJldkNvdW50ICsgIiA9PSAiICsgbm93Q291bnQgKyAiKSI7CisgICAgICAgIGludCBwcmV2Q291bnQgPSBzZnNiLmdldEFjdGl2YXRlQ291bnQoKTsKKyAgICAgICAgU3RyaW5nIHJldHJpZXZlZE5hbWUgPSBzZnNiLmdldE5hbWUoKTsKKyAgICAgICAgYm9vbGVhbiBuYW1lT0sgPSBfc2ZzYlByZWZpeC5lcXVhbHNJZ25vcmVDYXNlKHJldHJpZXZlZE5hbWUpOworICAgICAgICBpbnQgbm93Q291bnQgPSBzZnNiLmdldEFjdGl2YXRlQ291bnQoKTsKKyAgICAgICAgYm9vbGVhbiBhY3RDb3VudE9LID0gKHByZXZDb3VudCA9PSBub3dDb3VudCk7CisgICAgICAgIFN0cmluZyBtc2cgPSAiKCIgKyBwcmV2Q291bnQgKyAiID09ICIgKyBub3dDb3VudCArICIpIjsKICAgICAgICAgICAgIGlmIChuYW1lT0sgJiYgYWN0Q291bnRPSykgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgY210Tm9uVHhBY2Nlc3MgIiArIG1zZywgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0xMTYsNjMgKzExNiw2MyBAQAogCiAgICAgcHVibGljIHZvaWQgY210Tm9uVHhBY2Nlc3MoU0ZTQiBzZnNiKSB7CiAgICAgICAgIGZvciAoaW50IGk9MDsgaTwyMDA7IGkrKykgewotCXRyeSB7Ci0JICAgIGludCBwcmV2Q291bnQgPSBzZnNiLmdldEFjdGl2YXRlQ291bnQoKTsKLQkgICAgU3RyaW5nIHJldHJpZXZlZE5hbWUgPSBzZnNiLmdldE5hbWUoKTsKLQkgICAgYm9vbGVhbiBuYW1lT0sgPSBfc2ZzYlByZWZpeC5lcXVhbHNJZ25vcmVDYXNlKHJldHJpZXZlZE5hbWUpOwotCSAgICBpbnQgbm93Q291bnQgPSBzZnNiLmdldEFjdGl2YXRlQ291bnQoKTsKLQkgICAgYm9vbGVhbiBhY3RDb3VudE9LID0gKHByZXZDb3VudCA9PSBub3dDb3VudCk7Ci0JICAgIFN0cmluZyBtc2cgPSAiKCIgKyBwcmV2Q291bnQgKyAiID09ICIgKyBub3dDb3VudCArICIpIjsKKyAgICB0cnkgeworICAgICAgICBpbnQgcHJldkNvdW50ID0gc2ZzYi5nZXRBY3RpdmF0ZUNvdW50KCk7CisgICAgICAgIFN0cmluZyByZXRyaWV2ZWROYW1lID0gc2ZzYi5nZXROYW1lKCk7CisgICAgICAgIGJvb2xlYW4gbmFtZU9LID0gX3Nmc2JQcmVmaXguZXF1YWxzSWdub3JlQ2FzZShyZXRyaWV2ZWROYW1lKTsKKyAgICAgICAgaW50IG5vd0NvdW50ID0gc2ZzYi5nZXRBY3RpdmF0ZUNvdW50KCk7CisgICAgICAgIGJvb2xlYW4gYWN0Q291bnRPSyA9IChwcmV2Q291bnQgPT0gbm93Q291bnQpOworICAgICAgICBTdHJpbmcgbXNnID0gIigiICsgcHJldkNvdW50ICsgIiA9PSAiICsgbm93Q291bnQgKyAiKSI7CiAgICAgICAgICAgICBpZiAobmFtZU9LICYmIGFjdENvdW50T0spIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IGNtdE5vblR4QWNjZXNzXzIgIiArIG1zZywgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0JCXN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgY210Tm9uVHhBY2Nlc3NfMiIsIHN0YXQuRkFJTCk7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgY210Tm9uVHhBY2Nlc3NfMiIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiWyIgKyBpICsgIl0gY210Tm9uVHhBY2Nlc3NfMiBzdGF0dXM6ICIgKyAobmFtZU9LICYmIGFjdENvdW50T0spKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbIiArIGkgKyAiXSBjbXROb25UeEFjY2Vzc18yIHN0YXR1czogIiArIChuYW1lT0sgJiYgYWN0Q291bnRPSykpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgY210Tm9uVHhBY2Nlc3NfMiIsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KLQlzbGVlcEZvcigxLCBmYWxzZSk7Ci0JfQorICAgIHNsZWVwRm9yKDEsIGZhbHNlKTsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgcmVtb3ZlVGVzdCgpIHsKLQlTRlNCIHNmc2IgPSBudWxsOwotCWJvb2xlYW4gcGFzc2VkID0gZmFsc2U7Ci0JdHJ5IHsKLQkgICAgU3RyaW5nIG15TmFtZSA9ICJfMl8iICsgX3Nmc2JQcmVmaXggKyAiXzJfIjsKLQkgICAgc2ZzYiA9IChTRlNCKSBob21lLmNyZWF0ZShteU5hbWUpOwotCSAgICBTdHJpbmcgcmV0cmlldmVkTmFtZSA9IHNmc2IuZ2V0VHhOYW1lKCk7Ci0JICAgIGJvb2xlYW4gbmFtZU9LID0gbXlOYW1lLmVxdWFsc0lnbm9yZUNhc2UocmV0cmlldmVkTmFtZSk7Ci0JICAgIHNmc2IucmVtb3ZlKCk7Ci0JICAgIHRyeSB7Ci0JCXNmc2IuZ2V0VHhOYW1lKCk7Ci0JCXBhc3NlZCA9IGZhbHNlOwkgICAgLy9FeHBlY3RpbmcgYW4gZXhjZXB0aW9uCi0JICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQlwYXNzZWQgPSB0cnVlOwotCSAgICB9CisgICAgU0ZTQiBzZnNiID0gbnVsbDsKKyAgICBib29sZWFuIHBhc3NlZCA9IGZhbHNlOworICAgIHRyeSB7CisgICAgICAgIFN0cmluZyBteU5hbWUgPSAiXzJfIiArIF9zZnNiUHJlZml4ICsgIl8yXyI7CisgICAgICAgIHNmc2IgPSAoU0ZTQikgaG9tZS5jcmVhdGUobXlOYW1lKTsKKyAgICAgICAgU3RyaW5nIHJldHJpZXZlZE5hbWUgPSBzZnNiLmdldFR4TmFtZSgpOworICAgICAgICBib29sZWFuIG5hbWVPSyA9IG15TmFtZS5lcXVhbHNJZ25vcmVDYXNlKHJldHJpZXZlZE5hbWUpOworICAgICAgICBzZnNiLnJlbW92ZSgpOworICAgICAgICB0cnkgeworICAgICAgICBzZnNiLmdldFR4TmFtZSgpOworICAgICAgICBwYXNzZWQgPSBmYWxzZTsgICAgICAgIC8vRXhwZWN0aW5nIGFuIGV4Y2VwdGlvbgorICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgcGFzc2VkID0gdHJ1ZTsKKyAgICAgICAgfQogICAgICAgICAgICAgaWYgKHBhc3NlZCkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgcmVtb3ZlVGVzdF8xICIsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewotCQlzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IHJlbW92ZVRlc3RfMSIsIHN0YXQuRkFJTCk7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgcmVtb3ZlVGVzdF8xIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KIAotCSAgICBwYXNzZWQgPSBmYWxzZTsKLQkgICAgbXlOYW1lID0gIl80XyIgKyBfc2ZzYlByZWZpeCArICJfNF8iOwotCSAgICBzZnNiID0gKFNGU0IpIGhvbWUuY3JlYXRlKG15TmFtZSk7Ci0JICAgIHJldHJpZXZlZE5hbWUgPSBzZnNiLmdldE5hbWUoKTsKLQkgICAgbmFtZU9LID0gbXlOYW1lLmVxdWFsc0lnbm9yZUNhc2UocmV0cmlldmVkTmFtZSk7Ci0JICAgIHNmc2IucmVtb3ZlKCk7Ci0JICAgIHRyeSB7Ci0JCXNmc2IuZ2V0TmFtZSgpOwotCQlwYXNzZWQgPSBmYWxzZTsJICAgIC8vRXhwZWN0aW5nIGFuIGV4Y2VwdGlvbgotCSAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJcGFzc2VkID0gdHJ1ZTsKLQkgICAgfQorICAgICAgICBwYXNzZWQgPSBmYWxzZTsKKyAgICAgICAgbXlOYW1lID0gIl80XyIgKyBfc2ZzYlByZWZpeCArICJfNF8iOworICAgICAgICBzZnNiID0gKFNGU0IpIGhvbWUuY3JlYXRlKG15TmFtZSk7CisgICAgICAgIHJldHJpZXZlZE5hbWUgPSBzZnNiLmdldE5hbWUoKTsKKyAgICAgICAgbmFtZU9LID0gbXlOYW1lLmVxdWFsc0lnbm9yZUNhc2UocmV0cmlldmVkTmFtZSk7CisgICAgICAgIHNmc2IucmVtb3ZlKCk7CisgICAgICAgIHRyeSB7CisgICAgICAgIHNmc2IuZ2V0TmFtZSgpOworICAgICAgICBwYXNzZWQgPSBmYWxzZTsgICAgICAgIC8vRXhwZWN0aW5nIGFuIGV4Y2VwdGlvbgorICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgcGFzc2VkID0gdHJ1ZTsKKyAgICAgICAgfQogICAgICAgICAgICAgaWYgKHBhc3NlZCkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgcmVtb3ZlVGVzdF8yICIsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewotCQlzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IHJlbW92ZVRlc3RfMiIsIHN0YXQuRkFJTCk7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgcmVtb3ZlVGVzdF8yIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTE4MSwyMiArMTgxLDIyIEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHNsZWVwRm9yKGludCBzZWNvbmRzKSB7Ci0Jc2xlZXBGb3Ioc2Vjb25kcywgdHJ1ZSk7CisgICAgc2xlZXBGb3Ioc2Vjb25kcywgdHJ1ZSk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHNsZWVwRm9yKGludCBzZWNvbmRzLCBib29sZWFuIHZlcmJvc2UpIHsKLQlpZiAodmVyYm9zZSkgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldhaXRpbmcgZm9yICIgKyBzZWNvbmRzICsgIiBiZWZvcmUgYWNjZXNzaW5nLi4uIik7Ci0JfQotCWZvciAoaW50IGk9MDsgaTxzZWNvbmRzOyBpKyspIHsKLQkgICAgaWYgKHZlcmJvc2UpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCIiICsgKHNlY29uZHMgLSBpKSArICIgc2Vjb25kcyBsZWZ0Li4uIik7Ci0JICAgIH0KLQkgICAgdHJ5IHsKLQkJVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCgxKjEwMDApOwotCSAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkgICAgfQotCX0KKyAgICBpZiAodmVyYm9zZSkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldhaXRpbmcgZm9yICIgKyBzZWNvbmRzICsgIiBiZWZvcmUgYWNjZXNzaW5nLi4uIik7CisgICAgfQorICAgIGZvciAoaW50IGk9MDsgaTxzZWNvbmRzOyBpKyspIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIiICsgKHNlY29uZHMgLSBpKSArICIgc2Vjb25kcyBsZWZ0Li4uIik7CisgICAgICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCgxKjEwMDApOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgfQorICAgIH0KICAgICB9CiAKIH0gLy9DbGllbnR7fQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9zaW1wbGV0eC9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvc2ltcGxldHgvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKaW5kZXggODcyZDc0Yy4uM2ZjY2RlMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9zaW1wbGV0eC9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L3NpbXBsZXR4L2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCkBAIC0yNSw4ICsyNSw4IEBACiAgICAgICAgIDxqbmRpLW5hbWU+ZWpiL2VqYl9lZV90eGNoZWNrcG9pbnRfc2ltcGxldHhfU0ZTQjwvam5kaS1uYW1lPgogICAgICAgICA8YmVhbi1jYWNoZT4KICAgICAgICAgICAgIDxtYXgtY2FjaGUtc2l6ZT44PC9tYXgtY2FjaGUtc2l6ZT4KLQkgICAgPHJlc2l6ZS1xdWFudGl0eT40PC9yZXNpemUtcXVhbnRpdHk+Ci0JICAgIDxyZW1vdmFsLXRpbWVvdXQtaW4tc2Vjb25kcz42MDwvcmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+CisgICAgICAgIDxyZXNpemUtcXVhbnRpdHk+NDwvcmVzaXplLXF1YW50aXR5PgorICAgICAgICA8cmVtb3ZhbC10aW1lb3V0LWluLXNlY29uZHM+NjA8L3JlbW92YWwtdGltZW91dC1pbi1zZWNvbmRzPgogICAgICAgICA8L2JlYW4tY2FjaGU+CiAgICAgIDwvZWpiPgogICAgPC9lbnRlcnByaXNlLWJlYW5zPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9zaW1wbGV0eC9lamIvU0ZTQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9zaW1wbGV0eC9lamIvU0ZTQi5qYXZhCmluZGV4IDUwMjg4YjUuLjkzOWMxMmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvc2ltcGxldHgvZWpiL1NGU0IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L3NpbXBsZXR4L2VqYi9TRlNCLmphdmEKQEAgLTI0LDE1ICsyNCwxNSBAQAogewogCiAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLQl0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgU3RyaW5nIGdldFR4TmFtZSgpCi0JdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIGludCBnZXRBY3RpdmF0ZUNvdW50KCkKLQl0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgaW50IGdldFBhc3NpdmF0ZUNvdW50KCkKLQl0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvc2ltcGxldHgvZWpiL1NGU0JFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvc2ltcGxldHgvZWpiL1NGU0JFSkIuamF2YQppbmRleCAyNTMxNDliLi5iNGIyMzg4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L3NpbXBsZXR4L2VqYi9TRlNCRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9zaW1wbGV0eC9lamIvU0ZTQkVKQi5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiBpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogCiBwdWJsaWMgY2xhc3MgU0ZTQkVKQgotICAgIGltcGxlbWVudHMgU2Vzc2lvbkJlYW4gCisgICAgaW1wbGVtZW50cyBTZXNzaW9uQmVhbgogewogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIExPQ0FMX0NISUxEX1NVRkZJWCA9ICJfY2hpbGRMb2NhbCI7CkBAIC02MCwyMSArNjAsMjEgQEAKICAgICB9CiAKICAgICBwdWJsaWMgaW50IGdldEFjdGl2YXRlQ291bnQoKSB7Ci0JcmV0dXJuIGFjdGl2YXRlQ291bnQ7CisgICAgcmV0dXJuIGFjdGl2YXRlQ291bnQ7CiAgICAgfQogCiAgICAgcHVibGljIGludCBnZXRQYXNzaXZhdGVDb3VudCgpIHsKLQlyZXR1cm4gcGFzc2l2YXRlQ291bnQ7CisgICAgcmV0dXJuIHBhc3NpdmF0ZUNvdW50OwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHt9CiAKICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsKLQlhY3RpdmF0ZUNvdW50Kys7CisgICAgYWN0aXZhdGVDb3VudCsrOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHsKLQlwYXNzaXZhdGVDb3VudCsrOworICAgIHBhc3NpdmF0ZUNvdW50Kys7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L3NpbXBsZXR4L2VqYi9TRlNCSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9zaW1wbGV0eC9lamIvU0ZTQkhvbWUuamF2YQppbmRleCA4MmExNWU5Li5mZThiZDQzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L3NpbXBsZXR4L2VqYi9TRlNCSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvc2ltcGxldHgvZWpiL1NGU0JIb21lLmphdmEKQEAgLTI0LDYgKzI0LDYgQEAKICAgICBleHRlbmRzIEVKQkhvbWUKIHsKICAgICBwdWJsaWMgU0ZTQiBjcmVhdGUoU3RyaW5nIHNmc2JOYW1lKQotCXRocm93cyBDcmVhdGVFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvc2ltcGxldHgvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9zaW1wbGV0eC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggNjZjNGIxMi4uODNmYjI4YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9zaW1wbGV0eC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9zaW1wbGV0eC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsNyArMSw3IEBACi1Ecm9wIHRhYmxlIFNpbXBsZUVudGl0eTsNCi0NCi1DUkVBVEUgVEFCTEUgU2ltcGxlRW50aXR5ICgNCi0gICAga2V5ICAgICBjaGFyKDEyOCkgbm90IG51bGwsDQotICAgIG5hbWUgICAgY2hhcigxMjgpDQotKTsNCi0NCitEcm9wIHRhYmxlIFNpbXBsZUVudGl0eTsKKworQ1JFQVRFIFRBQkxFIFNpbXBsZUVudGl0eSAoCisgICAga2V5ICAgICBjaGFyKDEyOCkgbm90IG51bGwsCisgICAgbmFtZSAgICBjaGFyKDEyOCkKKyk7CisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvc2ltcGxldHgvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lZS90eGNoZWNrcG9pbnQvc2ltcGxldHgvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAppbmRleCA5MzVjNGE2Li4zZjIxYWViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWUvdHhjaGVja3BvaW50L3NpbXBsZXR4L3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VlL3R4Y2hlY2twb2ludC9zaW1wbGV0eC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xICsxIEBACi1Ecm9wIHRhYmxlIFNpbXBsZUVudGl0eTsNCitEcm9wIHRhYmxlIFNpbXBsZUVudGl0eTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9hbGxvd2VkL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvYWxsb3dlZC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGQ4NzNlZTIuLmEwOTQxYjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9hbGxvd2VkL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2FsbG93ZWQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamIzMC1hbGxvd2VkIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvYWxsb3dlZC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvYWxsb3dlZC9idWlsZC54bWwKaW5kZXggNThjZWZlYi4uN2Q2MjE1OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2FsbG93ZWQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9hbGxvd2VkL2J1aWxkLnhtbApAQCAtMzUsNyArMzUsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDcsMTQgKzQ3LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovQ2xpZW50LmNsYXNzLCoqL1NsZXNzLmNsYXNzLCAqKi8qT3BlcmF0aW9uLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsMTAgKzYyLDEwIEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9hbGxvd2VkL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9hbGxvd2VkL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA4ZjQ1Y2E1Li41OTJlYTNiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvYWxsb3dlZC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2FsbG93ZWQvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNSw3ICsyNSw3IEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CkBAIC0zNCwzOSArMzQsMzkgQEAKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImVqYi1lamIzMC1hbGxvd2VkLXNlc3Npb25JRCIpOwotICAgIH0gIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBARUpCIFNsZXNzIHNsZXNzOwogCiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAgICAgICAgIHRyeSB7Ci0JICAgIHNsZXNzLnNheUhlbGxvKCk7CisgICAgICAgIHNsZXNzLnNheUhlbGxvKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgc2V0dXAiLCBzdGF0LlBBU1MpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIHNldHVwIiwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0JYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKKyAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwogCiAgICAgICAgIHRyeSB7Ci0JICAgIHJlc3VsdCA9IHNsZXNzLmxvb2t1cFVzZXJUcmFuc2FjdGlvbkZyb21CTVRCZWFuKCk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIHJlc3VsdCA9IHNsZXNzLmxvb2t1cFVzZXJUcmFuc2FjdGlvbkZyb21CTVRCZWFuKCk7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgQk1UT3BfRXgiLCBzdGF0LkZBSUwpOwotCX0KKyAgICB9CiAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBCTVRVc2VyVHgiLAotCQkocmVzdWx0ID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKSk7CisgICAgICAgIChyZXN1bHQgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpKTsKIAogICAgICAgICB0cnkgewotCSAgICByZXN1bHQgPSBzbGVzcy5sb29rdXBVc2VyVHJhbnNhY3Rpb25Gcm9tQ01UQmVhbigpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICByZXN1bHQgPSBzbGVzcy5sb29rdXBVc2VyVHJhbnNhY3Rpb25Gcm9tQ01UQmVhbigpOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIENNVE9wX0V4Iiwgc3RhdC5GQUlMKTsKLQl9CisgICAgfQogICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgQ01UVXNlclR4IiwKLQkJKHJlc3VsdCA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCkpOworICAgICAgICAocmVzdWx0ID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKSk7CiAKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9hbGxvd2VkL2VqYi9jb20vc3VuL2VqYi9kZXZ0ZXN0L1NsZXNzQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2FsbG93ZWQvZWpiL2NvbS9zdW4vZWpiL2RldnRlc3QvU2xlc3NCZWFuLmphdmEKaW5kZXggZDI2Y2QwMy4uNDY4NjJhZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2FsbG93ZWQvZWpiL2NvbS9zdW4vZWpiL2RldnRlc3QvU2xlc3NCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2FsbG93ZWQvZWpiL2NvbS9zdW4vZWpiL2RldnRlc3QvU2xlc3NCZWFuLmphdmEKQEAgLTMwLDE1ICszMCwxNSBAQAogICAgIHByaXZhdGUgQ01UT3BlcmF0aW9uIGNtdE9wOwogCiAgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbygpIHsKLQlyZXR1cm4gIkhlbGxvIjsKKyAgICByZXR1cm4gIkhlbGxvIjsKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiBsb29rdXBVc2VyVHJhbnNhY3Rpb25Gcm9tQ01UQmVhbigpIHsKLQlyZXR1cm4gY210T3AubG9va3VwVXNlclRyYW5zYWN0aW9uKCk7CisgICAgcmV0dXJuIGNtdE9wLmxvb2t1cFVzZXJUcmFuc2FjdGlvbigpOwogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIGxvb2t1cFVzZXJUcmFuc2FjdGlvbkZyb21CTVRCZWFuKCkgewotCXJldHVybiBibXRPcC5sb29rdXBVc2VyVHJhbnNhY3Rpb24oKTsKKyAgICByZXR1cm4gYm10T3AubG9va3VwVXNlclRyYW5zYWN0aW9uKCk7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2J1aWxkLnhtbAppbmRleCBiYmZkYTQzLi5mMTE3NjM4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9idWlsZC54bWwKQEAgLTI5LDEyICsyOSwxMiBAQAogICAgICZyZXBvcnRpbmc7CiAKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCI+Ci0JPCEtLS0gY3VycmVudGx5IHVzZSBTRSBjbGllbnQgLiBzd2l0Y2ggYmFjayB0byBhcHBjbGllbnQgLS0+CisgICAgPCEtLS0gY3VycmVudGx5IHVzZSBTRSBjbGllbnQgLiBzd2l0Y2ggYmFjayB0byBhcHBjbGllbnQgLS0+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYWxsb3dlZCIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsaWVudHZpZXciLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJoZWxsbyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImludGVyY2VwdG9ycyIvPgotICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InBlcnNpc3RlbmNlIi8+IAorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InBlcnNpc3RlbmNlIi8+CiAKICAgICA8L3RhcmdldD4KIApAQCAtNjksOSArNjksOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+Ci0JCVVzYWdlOgotCQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamItZWpiMzAgdGVzdHMpCi0JPC9lY2hvPgorICAgIDxlY2hvPgorICAgICAgICBVc2FnZToKKyAgICAgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZWpiLWVqYjMwIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2FkYXB0ZWQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2FkYXB0ZWQvYnVpbGQucHJvcGVydGllcwppbmRleCBkYzlkNzFjLi43NDk4OWY0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9hZGFwdGVkL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvYWRhcHRlZC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMiArMTUsMjIgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lamIzMC1jbGllbnR2aWV3LWFkYXB0ZWQiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJzZS5jbGllbnQiIHZhbHVlPSJjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmNsaWVudHZpZXcuYWRhcHRlZC5jbGllbnQuQ2xpZW50Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9hZGFwdGVkL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2FkYXB0ZWQvYnVpbGQueG1sCmluZGV4IDBmOTY0YjAuLjQzZmZjNGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2FkYXB0ZWQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2FkYXB0ZWQvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NiwxNCArNDYsMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0NvbW1vbiouY2xhc3MsKiovRHVtbXkqLmNsYXNzLCoqL0hlbGxvKi5jbGFzcywqKi9TZnVsKi5jbGFzcywqKi9TbGVzcyouY2xhc3MiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9DbGllbnQuY2xhc3MsKiovRHVtbXlTbGVzcyouY2xhc3MsKiovRHVtbXlSZW1vdGUqLmNsYXNzLCoqL0hlbGxvLmNsYXNzLCoqL1NmdWxSZW1vdGVIb21lLmNsYXNzLCoqL1NsZXNzUmVtb3RlSG9tZS5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYzLDcgKzYzLDcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuX3NlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgPGphdmEgIGZvcms9Im9uIiAKKyAgICAgICA8amF2YSAgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSIke3NlLmNsaWVudH0iPgpAQCAtNzEsMTAgKzcxLDEwIEBACiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KIAotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9hZGFwdGVkL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2FkYXB0ZWQvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGE5YTcxMmMuLjM1ODQ4OGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2FkYXB0ZWQvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2FkYXB0ZWQvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHN0YXRpYyBmaW5hbCBpbnQgTlVNX0VYVFJBX0hFTExPUyA9IDY7CkBAIC00MSwyNiArNDEsMjYgQEAKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImVqYi1lamIzMC1jbGllbnR2aWV3LWFkYXB0ZWRJRCIpOwotICAgIH0gIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKIAogICAgICAgICBTZXQ8SGVsbG8+IGhlbGxvcyA9IG5ldyBIYXNoU2V0PEhlbGxvPigpOwogCiAgICAgICAgIHRyeSB7CiAKLQkgICAgU3RyaW5nIGxvb2t1cFN0ciA9IAotCQkiamF2YTpjb21wL2Vudi9jb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmNsaWVudHZpZXcuYWRhcHRlZC5jbGllbnQuQ2xpZW50L2hyIjsKKyAgICAgICAgU3RyaW5nIGxvb2t1cFN0ciA9CisgICAgICAgICJqYXZhOmNvbXAvZW52L2NvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuY2xpZW50dmlldy5hZGFwdGVkLmNsaWVudC5DbGllbnQvaHIiOwogCi0JICAgIGlmKCBociA9PSBudWxsICkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIHN0YW5kLWFsb25lIG1vZGUiKTsKLQkJbG9va3VwU3RyID0gImVqYi9lamJfZWpiMzBfY2xpZW50dmlld19hZGFwdGVkX0hlbGxvIjsKLQkJaHIgPSAoSGVsbG8pIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cChsb29rdXBTdHIpOwotCSAgICB9CisgICAgICAgIGlmKCBociA9PSBudWxsICkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIHN0YW5kLWFsb25lIG1vZGUiKTsKKyAgICAgICAgbG9va3VwU3RyID0gImVqYi9lamJfZWpiMzBfY2xpZW50dmlld19hZGFwdGVkX0hlbGxvIjsKKyAgICAgICAgaHIgPSAoSGVsbG8pIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cChsb29rdXBTdHIpOworICAgICAgICB9CiAKICAgICAgICAgICAgIGhlbGxvcy5hZGQoaHIpOwogICAgICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKQEAgLTc2LDIzICs3NiwyMyBAQAogICAgICAgICAgICAgaW50IG51bVBhc3NpdmF0ZWRBY3RpdmF0ZWQgPSAwOwogCiAgICAgICAgICAgICBmb3IoSGVsbG8gbmV4dCA6IGhlbGxvcykgewotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgCi0JCSAgIGlmKCBuZXh0Lmhhc0JlZW5QYXNzaXZhdGVkQWN0aXZhdGVkKCkgKSB7CisKKworICAgICAgICAgICBpZiggbmV4dC5oYXNCZWVuUGFzc2l2YXRlZEFjdGl2YXRlZCgpICkgewogICAgICAgICAgICAgICAgICAgICBudW1QYXNzaXZhdGVkQWN0aXZhdGVkKys7CiAgICAgICAgICAgICAgICAgfQotCQorCiAKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJ1bm5pbmcgdGVzdCBmb3IgIiArIG5leHQpOwogICAgICAgICAgICAgICAgIC8vIGRvIHNvbWV0aGluZyByaWdodCBoZXJlCiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcblN0YXRlZnVsIFNlc3Npb24gcmVzdWx0cyAobWljcm9zZWMpOiBcdHdpdGggdHggXHRubyB0eDoiKTsKICAgICAgICAgICAgICAgICBuZXh0Lndhcm11cChDb21tb24uU1RBVEVGVUwpOwogICAgICAgICAgICAgICAgIHJ1blRlc3RzKENvbW1vbi5TVEFURUZVTCwgbmV4dCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuU3RhdGVsZXNzIFNlc3Npb24gcmVzdWx0cyAobWljcm9zZWMpOiBcdHdpdGggdHggXHRubyB0eDoiKTsKICAgICAgICAgICAgICAgICBuZXh0Lndhcm11cChDb21tb24uU1RBVEVGVUwpOwogICAgICAgICAgICAgICAgIHJ1blRlc3RzKENvbW1vbi5TVEFURUxFU1MsIG5leHQpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgbmV4dC5zaHV0ZG93bigpOwogICAgICAgICAgICAgfQogCkBAIC0xMDAsMjYgKzEwMCwyNiBAQAogICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlBhc3NpdmF0aW9uL0FjdGl2YXRpb24gY291bGQgbm90IGJlIHRlc3RlZC4gIE5vIFBhc3NpdmF0aW9uL0FjdGl2YXRpb24gb2NjdXJyZWQiKTsKICAgICAgICAgICAgIH0KIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvcy5zaXplKCkgOiAiICsgaGVsbG9zLnNpemUoKSArICIgcGFzc2l2YXRpb25Db3VudDogIiArIG51bVBhc3NpdmF0ZWRBY3RpdmF0ZWQpOwotCSAgICAKLQkgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LlBBU1MpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvcy5zaXplKCkgOiAiICsgaGVsbG9zLnNpemUoKSArICIgcGFzc2l2YXRpb25Db3VudDogIiArIG51bVBhc3NpdmF0ZWRBY3RpdmF0ZWQpOwogCi0JICAgIGJvb2xlYW4gcmVmUmVzdWx0MSA9IGhyLmNoZWNrU2xlc3NMb2NhbFJlZmVyZW5jZXMoKTsKLQkgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIGNoZWNrU2xlc3NSZWZlcmVuY2VzIiwKLQkJICAgIChyZWZSZXN1bHQxID09IHRydWUpID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LlBBU1MpOwogCi0JICAgIGJvb2xlYW4gcmVmUmVzdWx0MiA9IGhyLmNoZWNrU2Z1bExvY2FsUmVmZXJlbmNlcygpOwotCSAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgY2hlY2tTZnVsTG9jYWxSZWZlcmVuY2VzIiwKLQkJICAgIChyZWZSZXN1bHQyID09IHRydWUpID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKTsKLSAgICAgICAgICAgIAorICAgICAgICBib29sZWFuIHJlZlJlc3VsdDEgPSBoci5jaGVja1NsZXNzTG9jYWxSZWZlcmVuY2VzKCk7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBjaGVja1NsZXNzUmVmZXJlbmNlcyIsCisgICAgICAgICAgICAocmVmUmVzdWx0MSA9PSB0cnVlKSA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7CisKKyAgICAgICAgYm9vbGVhbiByZWZSZXN1bHQyID0gaHIuY2hlY2tTZnVsTG9jYWxSZWZlcmVuY2VzKCk7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBjaGVja1NmdWxMb2NhbFJlZmVyZW5jZXMiLAorICAgICAgICAgICAgKHJlZlJlc3VsdDIgPT0gdHJ1ZSkgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpOworCiAgICAgICAgICAgICBib29sZWFuIHJlZlNsZXNzUmVzdWx0ID0gaHIuY2hlY2tTbGVzc1JlbW90ZVJlZmVyZW5jZXMoKTsKLQkgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIGNoZWNrU2xlc3NSZW1vdGVSZWZlcmVuY2VzIiwKLQkJICAgIChyZWZTbGVzc1Jlc3VsdCA9PSB0cnVlKSA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIGNoZWNrU2xlc3NSZW1vdGVSZWZlcmVuY2VzIiwKKyAgICAgICAgICAgIChyZWZTbGVzc1Jlc3VsdCA9PSB0cnVlKSA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7CisKICAgICAgICAgICAgIGJvb2xlYW4gcmVmUmVzdWx0MyA9IGhyLmNoZWNrU2Z1bFJlbW90ZVJlZmVyZW5jZXMoKTsKLQkgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIGNoZWNrU2Z1bFJlbW90ZVJlZmVyZW5jZXMiLAotCQkgICAgKHJlZlJlc3VsdDMgPT0gdHJ1ZSkgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpOwotICAgICAgICAgICAgCisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBjaGVja1NmdWxSZW1vdGVSZWZlcmVuY2VzIiwKKyAgICAgICAgICAgIChyZWZSZXN1bHQzID09IHRydWUpID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKTsKKwogICAgICAgICAgICAgRHVtbXlSZW1vdGUgcmVmMSA9IGhyLmdldFNmdWxSZW1vdGVCdXNpbmVzcygxKTsKICAgICAgICAgICAgIER1bW15UmVtb3RlIHJlZjIgPSBoci5nZXRTZnVsUmVtb3RlQnVzaW5lc3MoMik7CiAgICAgICAgICAgICBib29sZWFuIHJlZlJlc3VsdDQgPSByZWYxLmVxdWFscyhyZWYxKTsKQEAgLTEzMCw3ICsxMzAsNyBAQAogICAgICAgICAgICAgYm9vbGVhbiByZWZSZXN1bHQ5ID0gaHIuY29tcGFyZVJlbW90ZVJlZnMocmVmMSwgcmVmMik7CiAgICAgICAgICAgICBib29sZWFuIHJlZlJlc3VsdDEwID0gaHIuY29tcGFyZVJlbW90ZVJlZnMocmVmMSwgaHIpOwogICAgICAgICAgICAgYm9vbGVhbiByZWZSZXN1bHQxMSA9IGhyLmNvbXBhcmVSZW1vdGVSZWZzKHJlZjEsIG51bGwpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGJvb2xlYW4gcmVmUmVzdWx0U3VtbWFyeSA9IChyZWZSZXN1bHQ0ID09IHRydWUpCiAgICAgICAgICAgICAgICAgJiYgKHJlZlJlc3VsdDUgPT0gdHJ1ZSkKICAgICAgICAgICAgICAgICAmJiAocmVmUmVzdWx0NiA9PSBmYWxzZSkKQEAgLTEzOSwzNCArMTM5LDM0IEBACiAgICAgICAgICAgICAgICAgJiYgKHJlZlJlc3VsdDkgPT0gZmFsc2UpCiAgICAgICAgICAgICAgICAgJiYgKHJlZlJlc3VsdDEwID09IGZhbHNlKQogICAgICAgICAgICAgICAgICYmIChyZWZSZXN1bHQxMSA9PSBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBjb21wYXJlUmVtb3RlUmVmZXJlbmNlcyIsCi0JCSAgICAocmVmUmVzdWx0MyA9PSB0cnVlKSA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7ICAgICAgICAKLSAgICAgICAgICAgIAorICAgICAgICAgICAgKHJlZlJlc3VsdDMgPT0gdHJ1ZSkgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpOworCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIgLCBzdGF0LkZBSUwpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgIAlyZXR1cm47CisKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIAorCiAKICAgICBwcml2YXRlIHZvaWQgcnVuVGVzdHMoaW50IHR5cGUsIEhlbGxvIGhyKQotCXRocm93cyBFeGNlcHRpb24KKyAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewotICAgICAgCisKICAgICAgICAgaHIubm90U3VwcG9ydGVkKHR5cGUsIHRydWUpOwogICAgICAgICBoci5ub3RTdXBwb3J0ZWQodHlwZSwgZmFsc2UpOwogICAgICAgICBoci5zdXBwb3J0cyh0eXBlLCB0cnVlKTsKLQloci5zdXBwb3J0cyh0eXBlLCBmYWxzZSk7CisgICAgaHIuc3VwcG9ydHModHlwZSwgZmFsc2UpOwogICAgICAgICBoci5yZXF1aXJlZCh0eXBlLCB0cnVlKTsKLQloci5yZXF1aXJlZCh0eXBlLCBmYWxzZSk7CisgICAgaHIucmVxdWlyZWQodHlwZSwgZmFsc2UpOwogICAgICAgICBoci5yZXF1aXJlc05ldyh0eXBlLCB0cnVlKTsKLQloci5yZXF1aXJlc05ldyh0eXBlLCBmYWxzZSk7CisgICAgaHIucmVxdWlyZXNOZXcodHlwZSwgZmFsc2UpOwogICAgICAgICBoci5tYW5kYXRvcnkodHlwZSwgdHJ1ZSk7Ci0JaHIubmV2ZXIodHlwZSwgZmFsc2UpOworICAgIGhyLm5ldmVyKHR5cGUsIGZhbHNlKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2FkYXB0ZWQvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9hZGFwdGVkL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCmluZGV4IDM5YTRiNzguLjE2MzU0ODYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2FkYXB0ZWQvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvYWRhcHRlZC9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbApAQCAtMjUsNyArMjUsNyBAQAogICAgICAgPGpuZGktbmFtZT5lamIvZWpiX2VqYjMwX2NsaWVudHZpZXdfYWRhcHRlZF9IZWxsbzwvam5kaS1uYW1lPgogICAgICAgPGJlYW4tY2FjaGU+CiAgICAgICAgICA8bWF4LWNhY2hlLXNpemU+NDwvbWF4LWNhY2hlLXNpemU+Ci0JIDxyZXNpemUtcXVhbnRpdHk+MTwvcmVzaXplLXF1YW50aXR5PgorICAgICA8cmVzaXplLXF1YW50aXR5PjE8L3Jlc2l6ZS1xdWFudGl0eT4KICAgICAgICAgIDxjYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz41PC9jYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4KICAgICAgIDwvYmVhbi1jYWNoZT4KICAgICA8L2VqYj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2FkYXB0ZWQvZWpiL0NvbW1vbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvYWRhcHRlZC9lamIvQ29tbW9uLmphdmEKaW5kZXggYzVjN2FlMi4uNzBiNWZiMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvYWRhcHRlZC9lamIvQ29tbW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvYWRhcHRlZC9lamIvQ29tbW9uLmphdmEKQEAgLTE4LDcgKzE4LDcgQEAKIAogaW1wb3J0IGpha2FydGEuZWpiLio7CiAKLXB1YmxpYyBpbnRlcmZhY2UgQ29tbW9uIAorcHVibGljIGludGVyZmFjZSBDb21tb24KIHsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVEFURUxFU1MgPSAwOwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUQVRFRlVMID0gMTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2FkYXB0ZWQvZWpiL0NvbW1vblJlbW90ZUxvY2FsQnVzaW5lc3NTdXBlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvYWRhcHRlZC9lamIvQ29tbW9uUmVtb3RlTG9jYWxCdXNpbmVzc1N1cGVyLmphdmEKaW5kZXggMDEwZDdlNy4uYzdlMDcyNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvYWRhcHRlZC9lamIvQ29tbW9uUmVtb3RlTG9jYWxCdXNpbmVzc1N1cGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvYWRhcHRlZC9lamIvQ29tbW9uUmVtb3RlTG9jYWxCdXNpbmVzc1N1cGVyLmphdmEKQEAgLTE2LDcgKzE2LDcgQEAKIAogcGFja2FnZSBjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmNsaWVudHZpZXcuYWRhcHRlZDsKIAotcHVibGljIGludGVyZmFjZSBDb21tb25SZW1vdGVMb2NhbEJ1c2luZXNzU3VwZXIgCitwdWJsaWMgaW50ZXJmYWNlIENvbW1vblJlbW90ZUxvY2FsQnVzaW5lc3NTdXBlcgogewogICAgIHZvaWQgc2hhcmVkUmVtb3RlTG9jYWxCdXNpbmVzc1N1cGVyKGJvb2xlYW4gZXhwZWN0VHgpOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9hZGFwdGVkL2VqYi9IZWxsby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvYWRhcHRlZC9lamIvSGVsbG8uamF2YQppbmRleCA1NWIwNTI1Li44ZTBhNGM0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9hZGFwdGVkL2VqYi9IZWxsby5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2FkYXB0ZWQvZWpiL0hlbGxvLmphdmEKQEAgLTM4LDE1ICszOCwxNSBAQAogICAgIGJvb2xlYW4gY2hlY2tTbGVzc0xvY2FsUmVmZXJlbmNlcygpOwogCiAgICAgYm9vbGVhbiBjaGVja1NmdWxMb2NhbFJlZmVyZW5jZXMoKTsKLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGNoZWNrU2xlc3NSZW1vdGVSZWZlcmVuY2VzKCk7Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja1NmdWxSZW1vdGVSZWZlcmVuY2VzKCk7CiAKICAgICBwdWJsaWMgRHVtbXlSZW1vdGUgZ2V0U2Z1bFJlbW90ZUJ1c2luZXNzKGludCBudW0pOwotICAgIAorCiAgICAgcHVibGljIER1bW15UmVtb3RlMiBnZXRTZnVsUmVtb3RlQnVzaW5lc3MyKGludCBudW0pOwotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gY29tcGFyZVJlbW90ZVJlZnMoT2JqZWN0IHJlZjEsIE9iamVjdCByZWYyKTsKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvYWRhcHRlZC9lamIvSGVsbG9FSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2FkYXB0ZWQvZWpiL0hlbGxvRUpCLmphdmEKaW5kZXggM2ExN2JjZS4uZGIxMjJlYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvYWRhcHRlZC9lamIvSGVsbG9FSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9hZGFwdGVkL2VqYi9IZWxsb0VKQi5qYXZhCkBAIC0zOCwxMyArMzgsMTMgQEAKICAgICAgICAgY29udGV4dCA9IHNjOwogICAgIH0KIAotICAgIEBFSkIgcHJpdmF0ZSBTbGVzc0J1c2luZXNzMiBzbGVzc0J1c2luZXNzMjsgICAgCisgICAgQEVKQiBwcml2YXRlIFNsZXNzQnVzaW5lc3MyIHNsZXNzQnVzaW5lc3MyOwogICAgIEBFSkIgcHJpdmF0ZSBTZnVsQnVzaW5lc3MyIHNmdWxCdXNpbmVzczI7Ci0gICAgQEVKQiBwcm90ZWN0ZWQgU2xlc3NSZW1vdGVCdXNpbmVzczIgc2xlc3NSZW1vdGVCdXNpbmVzczI7ICAgIAorICAgIEBFSkIgcHJvdGVjdGVkIFNsZXNzUmVtb3RlQnVzaW5lc3MyIHNsZXNzUmVtb3RlQnVzaW5lc3MyOwogICAgIEBFSkIgcHVibGljIFNmdWxSZW1vdGVCdXNpbmVzczIgc2Z1bFJlbW90ZUJ1c2luZXNzMjsKIAogICAgIEBFSkIgcHVibGljIFNmdWxIb21lIHNmdWxIb21lOwotICAgIHB1YmxpYyBTZnVsIHNmdWw7IAorICAgIHB1YmxpYyBTZnVsIHNmdWw7CiAKICAgICBARUpCIHB1YmxpYyBTZnVsQnVzaW5lc3Mgc2Z1bEJ1c2luZXNzOwogCkBAIC01NCw3ICs1NCw3IEBACiAgICAgQEVKQiBwdWJsaWMgU2xlc3NCdXNpbmVzcyBzbGVzc0J1c2luZXNzOwogCiAgICAgQEVKQiBwdWJsaWMgU2Z1bFJlbW90ZUhvbWUgc2Z1bFJlbW90ZUhvbWU7Ci0gICAgcHVibGljIFNmdWxSZW1vdGUgc2Z1bFJlbW90ZTsgCisgICAgcHVibGljIFNmdWxSZW1vdGUgc2Z1bFJlbW90ZTsKIAogICAgIEBFSkIgcHVibGljIFNmdWxSZW1vdGVCdXNpbmVzcyBzZnVsUmVtb3RlQnVzaW5lc3M7CiAKQEAgLTcwLDMwICs3MCwzMCBAQAogCiAgICAgamFrYXJ0YS50cmFuc2FjdGlvbi5Vc2VyVHJhbnNhY3Rpb24gdXQ7CiAKLSAgICBARUpCIHByaXZhdGUgU2xlc3NCdXNpbmVzcwlyZWZTbGVzc18xOwotICAgIEBFSkIgcHJpdmF0ZSBTbGVzc0J1c2luZXNzCXJlZlNsZXNzXzI7Ci0gICAgQEVKQiBwcml2YXRlIFNsZXNzQnVzaW5lc3MyCXJlZlNsZXNzMl8xOwotICAgIEBFSkIgcHJpdmF0ZSBTbGVzc0J1c2luZXNzMglyZWZTbGVzczJfMjsKKyAgICBARUpCIHByaXZhdGUgU2xlc3NCdXNpbmVzcyAgICByZWZTbGVzc18xOworICAgIEBFSkIgcHJpdmF0ZSBTbGVzc0J1c2luZXNzICAgIHJlZlNsZXNzXzI7CisgICAgQEVKQiBwcml2YXRlIFNsZXNzQnVzaW5lc3MyICAgIHJlZlNsZXNzMl8xOworICAgIEBFSkIgcHJpdmF0ZSBTbGVzc0J1c2luZXNzMiAgICByZWZTbGVzczJfMjsKIAotICAgIEBFSkIgcHJpdmF0ZSBTZnVsQnVzaW5lc3MJcmVmU2Z1bF8xOwotICAgIEBFSkIgcHJpdmF0ZSBTZnVsQnVzaW5lc3MJcmVmU2Z1bF8yOwotICAgIEBFSkIgcHJpdmF0ZSBTZnVsQnVzaW5lc3MyCXJlZlNmdWwyXzE7Ci0gICAgQEVKQiBwcml2YXRlIFNmdWxCdXNpbmVzczIJcmVmU2Z1bDJfMjsKLSAgICAKLSAgICBARUpCIHByaXZhdGUgRHVtbXlTbGVzc1JlbW90ZQlyZWZSZW1vdGVTbGVzc18xOwotICAgIEBFSkIgcHJpdmF0ZSBEdW1teVNsZXNzUmVtb3RlCXJlZlJlbW90ZVNsZXNzXzI7Ci0gICAgQEVKQiBwcml2YXRlIER1bW15U2xlc3NSZW1vdGUyCXJlZlJlbW90ZVNsZXNzMl8xOwotICAgIEBFSkIgcHJpdmF0ZSBEdW1teVNsZXNzUmVtb3RlMglyZWZSZW1vdGVTbGVzczJfMjsKLSAgICAKLSAgICBARUpCIHByaXZhdGUgRHVtbXlSZW1vdGUJcmVmUmVtb3RlU2Z1bF8xOwotICAgIEBFSkIgcHJpdmF0ZSBEdW1teVJlbW90ZQlyZWZSZW1vdGVTZnVsXzI7Ci0gICAgQEVKQiBwcml2YXRlIER1bW15UmVtb3RlMglyZWZSZW1vdGVTZnVsMl8xOwotICAgIEBFSkIgcHJpdmF0ZSBEdW1teVJlbW90ZTIJcmVmUmVtb3RlU2Z1bDJfMjsKKyAgICBARUpCIHByaXZhdGUgU2Z1bEJ1c2luZXNzICAgIHJlZlNmdWxfMTsKKyAgICBARUpCIHByaXZhdGUgU2Z1bEJ1c2luZXNzICAgIHJlZlNmdWxfMjsKKyAgICBARUpCIHByaXZhdGUgU2Z1bEJ1c2luZXNzMiAgICByZWZTZnVsMl8xOworICAgIEBFSkIgcHJpdmF0ZSBTZnVsQnVzaW5lc3MyICAgIHJlZlNmdWwyXzI7CisKKyAgICBARUpCIHByaXZhdGUgRHVtbXlTbGVzc1JlbW90ZSAgICByZWZSZW1vdGVTbGVzc18xOworICAgIEBFSkIgcHJpdmF0ZSBEdW1teVNsZXNzUmVtb3RlICAgIHJlZlJlbW90ZVNsZXNzXzI7CisgICAgQEVKQiBwcml2YXRlIER1bW15U2xlc3NSZW1vdGUyICAgIHJlZlJlbW90ZVNsZXNzMl8xOworICAgIEBFSkIgcHJpdmF0ZSBEdW1teVNsZXNzUmVtb3RlMiAgICByZWZSZW1vdGVTbGVzczJfMjsKKworICAgIEBFSkIgcHJpdmF0ZSBEdW1teVJlbW90ZSAgICByZWZSZW1vdGVTZnVsXzE7CisgICAgQEVKQiBwcml2YXRlIER1bW15UmVtb3RlICAgIHJlZlJlbW90ZVNmdWxfMjsKKyAgICBARUpCIHByaXZhdGUgRHVtbXlSZW1vdGUyICAgIHJlZlJlbW90ZVNmdWwyXzE7CisgICAgQEVKQiBwcml2YXRlIER1bW15UmVtb3RlMiAgICByZWZSZW1vdGVTZnVsMl8yOwogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwdWJsaWMgdm9pZCBjcmVhdGUoKSB7CiAKLQl0cnkgeworICAgIHRyeSB7CiAKICAgICAgICAgICAgIHNsZXNzQnVzaW5lc3MyLmZvbygpOwogICAgICAgICAgICAgc2Z1bEJ1c2luZXNzMi5mb28oKTsKQEAgLTExNCwxMCArMTE0LDEwIEBACiAgICAgICAgICAgICBzZnVsUmVtb3RlQnVzaW5lc3MyLmJhcigpOwogCiAgICAgICAgICAgICBzZnVsID0gc2Z1bEhvbWUuY3JlYXRlKCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRlZCBsb2NhbCBzZnVsIG9ianMgdmlhIGhvbWVzLiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0ZWQgbG9jYWwgc2Z1bCBvYmpzIHZpYSBob21lcy4iKTsKIAogICAgICAgICAgICAgc2xlc3MgPSBzbGVzc0hvbWUuY3JlYXRlKCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRlZCBsb2NhbCBzbGVzcyBvYmpzIHZpYSBob21lcy4iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGVkIGxvY2FsIHNsZXNzIG9ianMgdmlhIGhvbWVzLiIpOwogCiAgICAgICAgICAgICAvLyBUaGVyZSBhcmUgdHdvIGNyZWF0ZTxNRVRIT0Q+IG1ldGhvZHMgd2l0aCB0aGUgc2FtZSBzaWduYXR1cmUuCiAgICAgICAgICAgICAvLyBUaGUgZmlyc3QgaXMgbWFwcGVkIHRvIGFuIEBJbml0ICBtZXRob2QgdGhhdCBpZ25vcmVzIGl0cyBpbnB1dApAQCAtMTQzLDE4ICsxNDMsMTggQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgc2xlc3NSZW1vdGUgPSBzbGVzc1JlbW90ZUhvbWUuY3JlYXRlKCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRlZCByZW1vdGUgc2xlc3Mgb2JqcyB2aWEgaG9tZXMuIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRlZCByZW1vdGUgc2xlc3Mgb2JqcyB2aWEgaG9tZXMuIik7CiAKICAgICAgICAgICAgIHV0ID0gY29udGV4dC5nZXRVc2VyVHJhbnNhY3Rpb24oKTsKLQkgICAJICAgICAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIioqMSoqIHJlZlNsZXNzQnVzaW5lc3NfMSA6ICIgKyByZWZTbGVzc18xKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIioqMSoqIHJlZlNsZXNzQnVzaW5lc3NfMiA6ICIgKyByZWZTbGVzc18yKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIioqMSoqIHJlZlNsZXNzQnVzaW5lc3MyXzEgOiAiICsgcmVmU2xlc3MyXzEpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiKioxKiogcmVmU2xlc3NCdXNpbmVzczJfMiA6ICIgKyByZWZTbGVzczJfMik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCIqKjEqKiBjaGVja0xvY2FsUmVmZXJlbmNlcygpID09PiAiICsgY2hlY2tTbGVzc0xvY2FsUmVmZXJlbmNlcygpKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQorCisgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKjEqKiByZWZTbGVzc0J1c2luZXNzXzEgOiAiICsgcmVmU2xlc3NfMSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKjEqKiByZWZTbGVzc0J1c2luZXNzXzIgOiAiICsgcmVmU2xlc3NfMik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKjEqKiByZWZTbGVzc0J1c2luZXNzMl8xIDogIiArIHJlZlNsZXNzMl8xKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqMSoqIHJlZlNsZXNzQnVzaW5lc3MyXzIgOiAiICsgcmVmU2xlc3MyXzIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioxKiogY2hlY2tMb2NhbFJlZmVyZW5jZXMoKSA9PT4gIiArIGNoZWNrU2xlc3NMb2NhbFJlZmVyZW5jZXMoKSk7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KICAgICB9CiAKICAgICBAUHJlUGFzc2l2YXRlIHB1YmxpYyB2b2lkIHByZVBhc3NpdmF0ZSgpIHsKQEAgLTE2NSwxMiArMTY1LDEyIEBACiAgICAgQFBvc3RBY3RpdmF0ZSBwdWJsaWMgdm9pZCBwb3N0QWN0aXZhdGUoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9FSkI6OnBvc3RBY3RpdmF0ZSIpOwogCi0JLy8gQEBAIHRlbXBvcmFyeSB3b3JrYXJvdW5kIHVudGlsIFVzZXJUcmFuc2FjdGlvbiBzZXJpYWxpemF0aW9uIGlzIGZpeGVkCi0JdXQgPSBjb250ZXh0LmdldFVzZXJUcmFuc2FjdGlvbigpOwkKKyAgICAvLyBAQEAgdGVtcG9yYXJ5IHdvcmthcm91bmQgdW50aWwgVXNlclRyYW5zYWN0aW9uIHNlcmlhbGl6YXRpb24gaXMgZml4ZWQKKyAgICB1dCA9IGNvbnRleHQuZ2V0VXNlclRyYW5zYWN0aW9uKCk7CiAKICAgICAgICAgYWN0aXZhdGVDb3VudCsrOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNodXRkb3duKCkgdGhyb3dzIEVKQkV4Y2VwdGlvbiB7CiAKICAgICAgICAgdHJ5IHsKQEAgLTE4NSw3ICsxODUsNyBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIHNmdWxCdXNpbmVzcy5yZW1vdmUoKTsgCisgICAgICAgICAgICAgICAgc2Z1bEJ1c2luZXNzLnJlbW92ZSgpOwogICAgICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIjJuZCBzZnVsQnVzaW5lc3MgcmVtb3ZlIHNob3VsZCBoYXZlIGNhdXNlZCBleGNlcHRpb24iKTsKICAgICAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSBjYXVnaHQgZXhjZXB0aW9uIHdoZW4gYXR0ZW1wdGluZyB0byAiKwpAQCAtMTk0LDcgKzE5NCw3IEBACiAKICAgICAgICAgICAgIHNmdWwucmVtb3ZlKCk7CiAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIHNmdWwucmVtb3ZlKCk7IAorICAgICAgICAgICAgICAgIHNmdWwucmVtb3ZlKCk7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiMm5kIHNmdWwgcmVtb3ZlIHNob3VsZCBoYXZlIGNhdXNlZCBleGNlcHRpb24iKTsKICAgICAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSBjYXVnaHQgZXhjZXB0aW9uIHdoZW4gYXR0ZW1wdGluZyB0byAiKwpAQCAtMjE2LDcgKzIxNiw3IEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgc2Z1bFJlbW90ZUJ1c2luZXNzLnJlbW92ZSgpOyAKKyAgICAgICAgICAgICAgICBzZnVsUmVtb3RlQnVzaW5lc3MucmVtb3ZlKCk7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiMm5kIHNmdWxSZW1vdGVCdXNpbmVzcyByZW1vdmUgc2hvdWxkIGhhdmUgY2F1c2VkIGV4Y2VwdGlvbiIpOwogICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGNhdWdodCBleGNlcHRpb24gd2hlbiBhdHRlbXB0aW5nIHRvICIrCkBAIC0yMjUsNyArMjI1LDcgQEAKIAogICAgICAgICAgICAgc2Z1bFJlbW90ZS5yZW1vdmUoKTsKICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgc2Z1bFJlbW90ZS5yZW1vdmUoKTsgCisgICAgICAgICAgICAgICAgc2Z1bFJlbW90ZS5yZW1vdmUoKTsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCIybmQgc2Z1bFJlbW90ZSByZW1vdmUgc2hvdWxkIGhhdmUgY2F1c2VkIGV4Y2VwdGlvbiIpOwogICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGNhdWdodCBleGNlcHRpb24gd2hlbiBhdHRlbXB0aW5nIHRvICIrCkBAIC0yMzUsNyArMjM1LDcgQEAKICAgICAgICAgICAgIC8vIERvZXNuJ3QgbWF0dGVyIGhvdyBtYW55IHRpbWVzIHdlIGNhbGwgc2xlc3NSZW1vdGUgcmVtb3ZlKCkKICAgICAgICAgICAgIHNsZXNzUmVtb3RlLnJlbW92ZSgpOwogICAgICAgICAgICAgc2xlc3NSZW1vdGUucmVtb3ZlKCk7Ci0gICAgICAgICAgICAKKwogCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIEVKQkV4Y2VwdGlvbiBlamJFeCA9IG5ldyBFSkJFeGNlcHRpb24oKTsKQEAgLTI3Myw4NSArMjczLDg1IEBACiAgICAgICAgICAgICB3YXJtdXAodHlwZSwgdHJ1ZSwgZmFsc2UpOwogICAgICAgICAgICAgd2FybXVwKHR5cGUsIGZhbHNlLCB0cnVlKTsKICAgICAgICAgICAgIHdhcm11cCh0eXBlLCBmYWxzZSwgZmFsc2UpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBNZWFzdXJlIGxvb3BpbmcgYW5kIHRpbWluZyBvdmVyaGVhZCAKKworICAgICAgICAgICAgLy8gTWVhc3VyZSBsb29waW5nIGFuZCB0aW1pbmcgb3ZlcmhlYWQKICAgICAgICAgICAgIGxvbmcgYmVnaW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKICAgICAgICAgICAgIGZvciAoIGludCBpPTA7IGk8SVRFUkFUSU9OUzsgaSsrICkgewogICAgICAgICAgICAgfQogICAgICAgICAgICAgbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKICAgICAgICAgICAgIG92ZXJoZWFkID0gZW5kIC0gYmVnaW47Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgdXQgPSBjb250ZXh0LmdldFVzZXJUcmFuc2FjdGlvbigpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHRlc3RMb2NhbE9iamVjdHMoc2Z1bCwgc2xlc3MpOwogCiAgICAgICAgICAgICB0ZXN0RUpCT2JqZWN0cyhzZnVsUmVtb3RlLCBzbGVzc1JlbW90ZSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCB3YXJtdXAoaW50IHR5cGUsIGJvb2xlYW4gdHgsIGJvb2xlYW4gYnVzaW5lc3NWaWV3KSAKKyAgICBwcml2YXRlIHZvaWQgd2FybXVwKGludCB0eXBlLCBib29sZWFuIHR4LCBib29sZWFuIGJ1c2luZXNzVmlldykKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKLQkvLyBnZXQgSG90c3BvdCB3YXJtZWQgdXAJCi0JQ29tbW9uIGJlYW4gPSBwcmUodHlwZSwgdHgsIGJ1c2luZXNzVmlldyk7Ci0JQ29tbW9uUmVtb3RlIGJlYW5SZW1vdGUgPSBwcmVSZW1vdGUodHlwZSwgdHgsIGJ1c2luZXNzVmlldyk7Ci0JZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7Ci0JICAgIGJlYW4ucmVxdWlyZXNOZXcoKTsKKyAgICAvLyBnZXQgSG90c3BvdCB3YXJtZWQgdXAKKyAgICBDb21tb24gYmVhbiA9IHByZSh0eXBlLCB0eCwgYnVzaW5lc3NWaWV3KTsKKyAgICBDb21tb25SZW1vdGUgYmVhblJlbW90ZSA9IHByZVJlbW90ZSh0eXBlLCB0eCwgYnVzaW5lc3NWaWV3KTsKKyAgICBmb3IgKCBpbnQgaT0wOyBpPElURVJBVElPTlM7IGkrKyApIHsKKyAgICAgICAgYmVhbi5yZXF1aXJlc05ldygpOwogICAgICAgICAgICAgYmVhblJlbW90ZS5yZXF1aXJlc05ldygpOwotCSAgICBiZWFuLm5vdFN1cHBvcnRlZCgpOworICAgICAgICBiZWFuLm5vdFN1cHBvcnRlZCgpOwogICAgICAgICAgICAgYmVhblJlbW90ZS5ub3RTdXBwb3J0ZWQoKTsKLQl9Ci0JZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7Ci0JICAgIGJlYW4ucmVxdWlyZWQoKTsKKyAgICB9CisgICAgZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7CisgICAgICAgIGJlYW4ucmVxdWlyZWQoKTsKICAgICAgICAgICAgIGJlYW5SZW1vdGUucmVxdWlyZWQoKTsKLQkgICAgaWYgKCB0eCApIHsKLQkJYmVhbi5tYW5kYXRvcnkoKTsKKyAgICAgICAgaWYgKCB0eCApIHsKKyAgICAgICAgYmVhbi5tYW5kYXRvcnkoKTsKICAgICAgICAgICAgICAgICBiZWFuUmVtb3RlLm1hbmRhdG9yeSgpOwogICAgICAgICAgICAgfSBlbHNlIHsKLQkJYmVhbi5uZXZlcigpOworICAgICAgICBiZWFuLm5ldmVyKCk7CiAgICAgICAgICAgICAgICAgYmVhblJlbW90ZS5uZXZlcigpOwogICAgICAgICAgICAgfQotCSAgICBiZWFuLnN1cHBvcnRzKCk7CisgICAgICAgIGJlYW4uc3VwcG9ydHMoKTsKICAgICAgICAgICAgIGJlYW5SZW1vdGUuc3VwcG9ydHMoKTsKLQl9Ci0JaWYgKCB0eCApIHRyeSB7IHV0LmNvbW1pdCgpOyB9IGNhdGNoICggRXhjZXB0aW9uIGV4ICkge30KKyAgICB9CisgICAgaWYgKCB0eCApIHRyeSB7IHV0LmNvbW1pdCgpOyB9IGNhdGNoICggRXhjZXB0aW9uIGV4ICkge30KICAgICB9CiAKLSAgICBwcml2YXRlIENvbW1vbiBwcmUoaW50IHR5cGUsIGJvb2xlYW4gdHgsIGJvb2xlYW4gYnVzaW5lc3NWaWV3KSAKKyAgICBwcml2YXRlIENvbW1vbiBwcmUoaW50IHR5cGUsIGJvb2xlYW4gdHgsIGJvb2xlYW4gYnVzaW5lc3NWaWV3KQogICAgIHsKLQlpZiAoIHR4ICkgdHJ5IHsgdXQuYmVnaW4oKTsgfSBjYXRjaCAoIEV4Y2VwdGlvbiBleCApIHsKLQkJZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQorICAgIGlmICggdHggKSB0cnkgeyB1dC5iZWdpbigpOyB9IGNhdGNoICggRXhjZXB0aW9uIGV4ICkgeworICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CiAKLQlpZiAoIHR5cGUgPT0gQ29tbW9uLlNUQVRFTEVTUyApCisgICAgaWYgKCB0eXBlID09IENvbW1vbi5TVEFURUxFU1MgKQogICAgICAgICAgICAgcmV0dXJuIGJ1c2luZXNzVmlldyA/IHNsZXNzQnVzaW5lc3MgOiBzbGVzczsKLQllbHNlIAorICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiBidXNpbmVzc1ZpZXcgPyBzZnVsQnVzaW5lc3MgOiBzZnVsOwogICAgIH0KIAotICAgIHByaXZhdGUgQ29tbW9uUmVtb3RlIHByZVJlbW90ZShpbnQgdHlwZSwgYm9vbGVhbiB0eCwgYm9vbGVhbiBidXNpbmVzc1ZpZXcpIAotICAgIHsgICAgICAgCi0JaWYgKCB0eXBlID09IENvbW1vbi5TVEFURUxFU1MgKSB7Ci0JICAgIHJldHVybiBidXNpbmVzc1ZpZXcgPyBzbGVzc1JlbW90ZUJ1c2luZXNzIDogc2xlc3NSZW1vdGU7CisgICAgcHJpdmF0ZSBDb21tb25SZW1vdGUgcHJlUmVtb3RlKGludCB0eXBlLCBib29sZWFuIHR4LCBib29sZWFuIGJ1c2luZXNzVmlldykKKyAgICB7CisgICAgaWYgKCB0eXBlID09IENvbW1vbi5TVEFURUxFU1MgKSB7CisgICAgICAgIHJldHVybiBidXNpbmVzc1ZpZXcgPyBzbGVzc1JlbW90ZUJ1c2luZXNzIDogc2xlc3NSZW1vdGU7CiAgICAgICAgIH0gZWxzZSB7Ci0JICAgIHJldHVybiBidXNpbmVzc1ZpZXcgPyBzZnVsUmVtb3RlQnVzaW5lc3MgOiBzZnVsUmVtb3RlOworICAgICAgICByZXR1cm4gYnVzaW5lc3NWaWV3ID8gc2Z1bFJlbW90ZUJ1c2luZXNzIDogc2Z1bFJlbW90ZTsKICAgICAgICAgfQogICAgIH0KIAogCiAgICAgcHJpdmF0ZSBmbG9hdCBwb3N0KGxvbmcgYmVnaW4sIGxvbmcgZW5kLCBib29sZWFuIHR4KQogICAgIHsKLQlpZiAoIHR4ICkgdHJ5IHsgdXQuY29tbWl0KCk7IH0gY2F0Y2ggKCBFeGNlcHRpb24gZXggKSB7Ci0JCWV4LnByaW50U3RhY2tUcmFjZSgpOwotCSAgICB9Ci0JcmV0dXJuIChmbG9hdCkoICgoZG91YmxlKShlbmQtYmVnaW4tb3ZlcmhlYWQpKS8oKGRvdWJsZSlJVEVSQVRJT05TKSAqIDEwMDAuMCApOworICAgIGlmICggdHggKSB0cnkgeyB1dC5jb21taXQoKTsgfSBjYXRjaCAoIEV4Y2VwdGlvbiBleCApIHsKKyAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KKyAgICByZXR1cm4gKGZsb2F0KSggKChkb3VibGUpKGVuZC1iZWdpbi1vdmVyaGVhZCkpLygoZG91YmxlKUlURVJBVElPTlMpICogMTAwMC4wICk7CiAgICAgfQogCi0gICAgcHVibGljIGZsb2F0IHJlcXVpcmVzTmV3KGludCB0eXBlLCBib29sZWFuIHR4KSAKKyAgICBwdWJsaWMgZmxvYXQgcmVxdWlyZXNOZXcoaW50IHR5cGUsIGJvb2xlYW4gdHgpCiAgICAgewogICAgICAgICBsb25nIGJlZ2luID0gMDsKICAgICAgICAgbG9uZyBlbmQgPSAwOwpAQCAtMzgxLDcgKzM4MSw3IEBACiAgICAgICAgIHJldHVybiBwb3N0KGJlZ2luLCBlbmQsIHR4KTsKICAgICB9CiAKLSAgICBwdWJsaWMgZmxvYXQgbm90U3VwcG9ydGVkKGludCB0eXBlLCBib29sZWFuIHR4KSAKKyAgICBwdWJsaWMgZmxvYXQgbm90U3VwcG9ydGVkKGludCB0eXBlLCBib29sZWFuIHR4KQogICAgIHsKICAgICAgICAgbG9uZyBiZWdpbiA9IDA7CiAgICAgICAgIGxvbmcgZW5kID0gMDsKQEAgLTQwNywxMSArNDA3LDExIEBACiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwotICAgICAgICB9IAotCXJldHVybiBwb3N0KGJlZ2luLCBlbmQsIHR4KTsKKyAgICAgICAgfQorICAgIHJldHVybiBwb3N0KGJlZ2luLCBlbmQsIHR4KTsKICAgICB9CiAKLSAgICBwdWJsaWMgZmxvYXQgcmVxdWlyZWQoaW50IHR5cGUsIGJvb2xlYW4gdHgpIAorICAgIHB1YmxpYyBmbG9hdCByZXF1aXJlZChpbnQgdHlwZSwgYm9vbGVhbiB0eCkKICAgICB7CiAgICAgICAgIGxvbmcgYmVnaW4gPSAwOwogICAgICAgICBsb25nIGVuZCA9IDA7CkBAIC00MzMsMTYgKzQzMywxNiBAQAogICAgICAgICAgICAgZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7CiAgICAgICAgICAgICAgICAgYmVhblJlbW90ZUJ1c2luZXNzLnJlcXVpcmVkKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgZW5kID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwogICAgICAgICB9Ci0JcmV0dXJuIHBvc3QoYmVnaW4sIGVuZCwgdHgpOworICAgIHJldHVybiBwb3N0KGJlZ2luLCBlbmQsIHR4KTsKICAgICB9CiAKLSAgICBwdWJsaWMgZmxvYXQgbWFuZGF0b3J5KGludCB0eXBlLCBib29sZWFuIHR4KSAKKyAgICBwdWJsaWMgZmxvYXQgbWFuZGF0b3J5KGludCB0eXBlLCBib29sZWFuIHR4KQogICAgIHsKICAgICAgICAgbG9uZyBiZWdpbiA9IDA7CiAgICAgICAgIGxvbmcgZW5kID0gMDsKQEAgLTQ1MSw3ICs0NTEsNyBAQAogICAgICAgICAgICAgQ29tbW9uIGJ1c0JlYW4gPSBwcmUodHlwZSwgdHgsIHRydWUpOwogICAgICAgICAgICAgQ29tbW9uUmVtb3RlIGJlYW5SZW1vdGUgPSBwcmVSZW1vdGUodHlwZSwgdHgsIGZhbHNlKTsKICAgICAgICAgICAgIENvbW1vblJlbW90ZSBiZWFuUmVtb3RlQnVzaW5lc3MgPSBwcmVSZW1vdGUodHlwZSwgdHgsIHRydWUpOwotICAgICAgICAgICAgYmVnaW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsgICAgICAgICAgICAKKyAgICAgICAgICAgIGJlZ2luID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAgICAgICAgICAgICBmb3IgKCBpbnQgaT0wOyBpPElURVJBVElPTlM7IGkrKyApIHsKICAgICAgICAgICAgICAgICBiZWFuLm1hbmRhdG9yeSgpOwogICAgICAgICAgICAgfQpAQCAtNDcwLDcgKzQ3MCw3IEBACiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlKTsKICAgICAgICAgfQotCXJldHVybiBwb3N0KGJlZ2luLCBlbmQsIHR4KTsKKyAgICByZXR1cm4gcG9zdChiZWdpbiwgZW5kLCB0eCk7CiAgICAgfQogCiAgICAgcHVibGljIGZsb2F0IG5ldmVyKGludCB0eXBlLCBib29sZWFuIHR4KQpAQCAtNTAwLDEwICs1MDAsMTAgQEAKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwogICAgICAgICB9Ci0JcmV0dXJuIHBvc3QoYmVnaW4sIGVuZCwgdHgpOworICAgIHJldHVybiBwb3N0KGJlZ2luLCBlbmQsIHR4KTsKICAgICB9CiAKLSAgICBwdWJsaWMgZmxvYXQgc3VwcG9ydHMoaW50IHR5cGUsIGJvb2xlYW4gdHgpIAorICAgIHB1YmxpYyBmbG9hdCBzdXBwb3J0cyhpbnQgdHlwZSwgYm9vbGVhbiB0eCkKICAgICB7CiAgICAgICAgIGxvbmcgYmVnaW4gPSAwOwogICAgICAgICBsb25nIGVuZCA9IDA7CkBAIC01MzEsNyArNTMxLDcgQEAKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwogICAgICAgICB9Ci0JcmV0dXJuIHBvc3QoYmVnaW4sIGVuZCwgdHgpOworICAgIHJldHVybiBwb3N0KGJlZ2luLCBlbmQsIHR4KTsKICAgICB9CiAKICAgICAvLyBhc3N1bWVzIGxvMSBhbmQgbG8yIGFyZSBkbyBub3QgaGF2ZSBzYW1lIGNsaWVudCBpZGVudGl0eQpAQCAtNTc1LDExICs1NzUsMTEgQEAKICAgICAgICAgaWYoIG8xLmlzSWRlbnRpY2FsKG8yKSApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImlzSWRlbnRpY2FsIGZhaWxlZCIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmKCBvMi5pc0lkZW50aWNhbChvMSkgKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJpc0lkZW50aWNhbCBmYWlsZWQiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiggIW8xLmlzSWRlbnRpY2FsKG8xKSApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImlzSWRlbnRpY2FsIGZhaWxlZCIpOwogICAgICAgICB9CkBAIC02MDcsNyArNjA3LDcgQEAKICAgICAgICAgaWYoIG1kID09IG51bGwgKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJudWxsIG1kIik7CiAgICAgICAgIH0KLQlTeXN0ZW0ub3V0LnByaW50bG4oIm1kID0gIiArIG1kKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm1kID0gIiArIG1kKTsKIAogICAgICAgICBIb21lSGFuZGxlIGhoID0gaG9tZS5nZXRIb21lSGFuZGxlKCk7CiAgICAgICAgIGlmKCBoaCA9PSBudWxsICkgewpAQCAtNjMzLDE4ICs2MzMsMTggQEAKICAgICAgICAgfQogCiAgICAgICAgIG8xLmhhc2hDb2RlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICBvMi5oYXNoQ29kZSgpOwotICAgICAgICAKKwogICAgICAgICBvMS50b1N0cmluZygpOwogCiAgICAgICAgIG8yLnRvU3RyaW5nKCk7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gY2hlY2tTbGVzc0xvY2FsUmVmZXJlbmNlcygpIHsKICAgICAgICAgYm9vbGVhbiByZXN1bHQgPSAocmVmU2xlc3NfMSAhPSBudWxsKTsKLSAgICAgICAgCisKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIHJlZlNsZXNzXzEuZXF1YWxzKHJlZlNsZXNzXzEpOwogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgcmVmU2xlc3NfMS5lcXVhbHMocmVmU2xlc3NfMik7CiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAoISByZWZTbGVzc18xLmVxdWFscyhyZWZTbGVzczJfMSkpOwpAQCAtNjU1LDcgKzY1NSw3IEBACiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAoISByZWZTbGVzc18xLmVxdWFscyhzZnVsQnVzaW5lc3MpKTsKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmICghIHJlZlNsZXNzXzEuZXF1YWxzKHNmdWxSZW1vdGUpKTsKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmICghIHJlZlNsZXNzXzEuZXF1YWxzKHNmdWxSZW1vdGVIb21lKSk7Ci0gICAgICAgIAorCiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAocmVmU2xlc3NfMiAhPSBudWxsKTsKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIHJlZlNsZXNzXzIuZXF1YWxzKHJlZlNsZXNzXzEpOwogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgcmVmU2xlc3NfMi5lcXVhbHMocmVmU2xlc3NfMik7CkBAIC02NjcsNyArNjY3LDcgQEAKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmICghIHJlZlNsZXNzXzIuZXF1YWxzKHNmdWxCdXNpbmVzcykpOwogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKCEgcmVmU2xlc3NfMi5lcXVhbHMoc2Z1bFJlbW90ZSkpOwogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKCEgcmVmU2xlc3NfMi5lcXVhbHMoc2Z1bFJlbW90ZUhvbWUpKTsKLSAgICAgICAgCisKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIChyZWZTbGVzczJfMSAhPSBudWxsKTsKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIHJlZlNsZXNzMl8xLmVxdWFscyhyZWZTbGVzczJfMSk7CiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiByZWZTbGVzczJfMS5lcXVhbHMocmVmU2xlc3MyXzIpOwpAQCAtNjc5LDcgKzY3OSw3IEBACiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAoISByZWZTbGVzczJfMS5lcXVhbHMoc2Z1bEJ1c2luZXNzKSk7CiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAoISByZWZTbGVzczJfMS5lcXVhbHMoc2Z1bFJlbW90ZSkpOwogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKCEgcmVmU2xlc3MyXzEuZXF1YWxzKHNmdWxSZW1vdGVIb21lKSk7Ci0gICAgICAgIAorCiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAocmVmU2xlc3MyXzIgIT0gbnVsbCk7CiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiByZWZTbGVzczJfMi5lcXVhbHMocmVmU2xlc3MyXzIpOwogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgcmVmU2xlc3MyXzIuZXF1YWxzKHJlZlNsZXNzMl8xKTsKQEAgLTY5MSwxMyArNjkxLDEzIEBACiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAoISByZWZTbGVzczJfMi5lcXVhbHMoc2Z1bEJ1c2luZXNzKSk7CiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAoISByZWZTbGVzczJfMi5lcXVhbHMoc2Z1bFJlbW90ZSkpOwogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKCEgcmVmU2xlc3MyXzIuZXF1YWxzKHNmdWxSZW1vdGVIb21lKSk7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gY2hlY2tTZnVsTG9jYWxSZWZlcmVuY2VzKCkgewogICAgICAgICBib29sZWFuIHJlc3VsdCA9IChyZWZTZnVsXzEgIT0gbnVsbCk7Ci0gICAgICAgIAorCiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAocmVmU2Z1bF8xLmVxdWFscyhyZWZTZnVsXzEpKTsKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmICghIHJlZlNmdWxfMS5lcXVhbHMocmVmU2Z1bF8yKSk7CiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAoISByZWZTZnVsXzEuZXF1YWxzKHJlZlNmdWwyXzEpKTsKQEAgLTcwOSw3ICs3MDksNyBAQAogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKCEgcmVmU2Z1bF8xLmVxdWFscyhzZnVsUmVtb3RlKSk7CiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAoISByZWZTZnVsXzEuZXF1YWxzKHNmdWxSZW1vdGVIb21lKSk7CiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAoISByZWZTZnVsXzEuZXF1YWxzKG5ldyBPYmplY3QoKSkpOwotICAgICAgICAKKwogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKHJlZlNmdWxfMiAhPSBudWxsKTsKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmICghIHJlZlNmdWxfMi5lcXVhbHMocmVmU2Z1bF8xKSk7CiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAocmVmU2Z1bF8yLmVxdWFscyhyZWZTZnVsXzIpKTsKQEAgLTcyMiw3ICs3MjIsNyBAQAogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKCEgcmVmU2Z1bF8yLmVxdWFscyhzZnVsUmVtb3RlKSk7CiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAoISByZWZTZnVsXzIuZXF1YWxzKHNmdWxSZW1vdGVIb21lKSk7CiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAoISByZWZTZnVsXzIuZXF1YWxzKG5ldyBPYmplY3QoKSkpOwotICAgICAgICAKKwogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKHJlZlNmdWwyXzEgIT0gbnVsbCk7CiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAocmVmU2Z1bDJfMS5lcXVhbHMocmVmU2Z1bDJfMSkpOwogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKCEgcmVmU2Z1bDJfMS5lcXVhbHMocmVmU2Z1bDJfMikpOwpAQCAtNzM1LDcgKzczNSw3IEBACiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAoISByZWZTZnVsMl8xLmVxdWFscyhzZnVsUmVtb3RlKSk7CiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAoISByZWZTZnVsMl8xLmVxdWFscyhzZnVsUmVtb3RlSG9tZSkpOwogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKCEgcmVmU2Z1bDJfMS5lcXVhbHMobmV3IE9iamVjdCgpKSk7Ci0gICAgICAgIAorCiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAocmVmU2Z1bDJfMiAhPSBudWxsKTsKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIChyZWZTZnVsMl8yLmVxdWFscyhyZWZTZnVsMl8yKSk7CiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAoISByZWZTZnVsMl8yLmVxdWFscyhyZWZTZnVsMl8xKSk7CkBAIC03NTAsMTAgKzc1MCwxMCBAQAogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKCEgcmVmU2Z1bDJfMi5lcXVhbHMobmV3IE9iamVjdCgpKSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gY2hlY2tTbGVzc1JlbW90ZVJlZmVyZW5jZXMoKSB7CiAgICAgICAgIGJvb2xlYW4gcmVzdWx0ID0gKHJlZlJlbW90ZVNsZXNzXzEgIT0gbnVsbCk7Ci0gICAgICAgIAorCiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAocmVmUmVtb3RlU2xlc3NfMS5lcXVhbHMocmVmUmVtb3RlU2xlc3NfMSkpOwogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKHJlZlJlbW90ZVNsZXNzXzEuZXF1YWxzKHJlZlJlbW90ZVNsZXNzXzIpKTsKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmICghIHJlZlJlbW90ZVNsZXNzXzEuZXF1YWxzKHJlZlJlbW90ZVNsZXNzMl8xKSk7CkBAIC03NjUsNyArNzY1LDcgQEAKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmICghIHJlZlJlbW90ZVNsZXNzXzEuZXF1YWxzKHNmdWxSZW1vdGUpKTsKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmICghIHJlZlJlbW90ZVNsZXNzXzEuZXF1YWxzKHNmdWxSZW1vdGVIb21lKSk7CiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAoISByZWZSZW1vdGVTbGVzc18xLmVxdWFscyhuZXcgT2JqZWN0KCkpKTsKLSAgICAgICAgCisKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIChyZWZSZW1vdGVTbGVzc18yICE9IG51bGwpOwogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKHJlZlJlbW90ZVNsZXNzXzIuZXF1YWxzKHJlZlJlbW90ZVNsZXNzXzEpKTsKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIChyZWZSZW1vdGVTbGVzc18yLmVxdWFscyhyZWZSZW1vdGVTbGVzc18yKSk7CkBAIC03NzgsNyArNzc4LDcgQEAKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmICghIHJlZlJlbW90ZVNsZXNzXzIuZXF1YWxzKHNmdWxSZW1vdGUpKTsKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmICghIHJlZlJlbW90ZVNsZXNzXzIuZXF1YWxzKHNmdWxSZW1vdGVIb21lKSk7CiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAoISByZWZSZW1vdGVTbGVzc18yLmVxdWFscyhuZXcgT2JqZWN0KCkpKTsKLSAgICAgICAgCisKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIChyZWZSZW1vdGVTbGVzczJfMSAhPSBudWxsKTsKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIChyZWZSZW1vdGVTbGVzczJfMS5lcXVhbHMocmVmUmVtb3RlU2xlc3MyXzEpKTsKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIChyZWZSZW1vdGVTbGVzczJfMS5lcXVhbHMocmVmUmVtb3RlU2xlc3MyXzIpKTsKQEAgLTc5MSw3ICs3OTEsNyBAQAogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKCEgcmVmUmVtb3RlU2xlc3MyXzEuZXF1YWxzKHNmdWxSZW1vdGUpKTsKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmICghIHJlZlJlbW90ZVNsZXNzMl8xLmVxdWFscyhzZnVsUmVtb3RlSG9tZSkpOwogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKCEgcmVmUmVtb3RlU2xlc3MyXzEuZXF1YWxzKG5ldyBPYmplY3QoKSkpOwotICAgICAgICAKKwogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKHJlZlJlbW90ZVNsZXNzMl8yICE9IG51bGwpOwogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKHJlZlJlbW90ZVNsZXNzMl8yLmVxdWFscyhyZWZSZW1vdGVTbGVzczJfMikpOwogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKHJlZlJlbW90ZVNsZXNzMl8yLmVxdWFscyhyZWZSZW1vdGVTbGVzczJfMSkpOwpAQCAtODA2LDEwICs4MDYsMTAgQEAKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmICghIHJlZlJlbW90ZVNsZXNzMl8yLmVxdWFscyhuZXcgT2JqZWN0KCkpKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Ci0gICAgICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gY2hlY2tTZnVsUmVtb3RlUmVmZXJlbmNlcygpIHsKICAgICAgICAgYm9vbGVhbiByZXN1bHQgPSAocmVmUmVtb3RlU2Z1bF8xICE9IG51bGwpOwotICAgICAgICAKKwogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKHJlZlJlbW90ZVNmdWxfMS5lcXVhbHMocmVmUmVtb3RlU2Z1bF8xKSk7CiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAoISByZWZSZW1vdGVTZnVsXzEuZXF1YWxzKHJlZlJlbW90ZVNmdWxfMikpOwogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKCEgcmVmUmVtb3RlU2Z1bF8xLmVxdWFscyhyZWZSZW1vdGVTZnVsMl8xKSk7CkBAIC04MjEsNyArODIxLDcgQEAKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmICghIHJlZlJlbW90ZVNmdWxfMS5lcXVhbHMoc2Z1bFJlbW90ZSkpOwogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKCEgcmVmUmVtb3RlU2Z1bF8xLmVxdWFscyhzZnVsUmVtb3RlSG9tZSkpOwogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKCEgcmVmUmVtb3RlU2Z1bF8xLmVxdWFscyhuZXcgT2JqZWN0KCkpKTsKLSAgICAgICAgCisKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIChyZWZSZW1vdGVTZnVsXzIgIT0gbnVsbCk7CiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAoISByZWZSZW1vdGVTZnVsXzIuZXF1YWxzKHJlZlJlbW90ZVNmdWxfMSkpOwogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKHJlZlJlbW90ZVNmdWxfMi5lcXVhbHMocmVmUmVtb3RlU2Z1bF8yKSk7CkBAIC04MzQsNyArODM0LDcgQEAKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmICghIHJlZlJlbW90ZVNmdWxfMi5lcXVhbHMoc2Z1bFJlbW90ZSkpOwogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKCEgcmVmUmVtb3RlU2Z1bF8yLmVxdWFscyhzZnVsUmVtb3RlSG9tZSkpOwogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKCEgcmVmUmVtb3RlU2Z1bF8yLmVxdWFscyhuZXcgT2JqZWN0KCkpKTsKLSAgICAgICAgCisKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIChyZWZSZW1vdGVTZnVsMl8xICE9IG51bGwpOwogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKHJlZlJlbW90ZVNmdWwyXzEuZXF1YWxzKHJlZlJlbW90ZVNmdWwyXzEpKTsKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmICghIHJlZlJlbW90ZVNmdWwyXzEuZXF1YWxzKHJlZlJlbW90ZVNmdWwyXzIpKTsKQEAgLTg0Nyw3ICs4NDcsNyBAQAogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKCEgcmVmUmVtb3RlU2Z1bDJfMS5lcXVhbHMoc2Z1bFJlbW90ZSkpOwogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKCEgcmVmUmVtb3RlU2Z1bDJfMS5lcXVhbHMoc2Z1bFJlbW90ZUhvbWUpKTsKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmICghIHJlZlJlbW90ZVNmdWwyXzEuZXF1YWxzKG5ldyBPYmplY3QoKSkpOwotICAgICAgICAKKwogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKHJlZlJlbW90ZVNmdWwyXzIgIT0gbnVsbCk7CiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAocmVmUmVtb3RlU2Z1bDJfMi5lcXVhbHMocmVmUmVtb3RlU2Z1bDJfMikpOwogICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgKCEgcmVmUmVtb3RlU2Z1bDJfMi5lcXVhbHMocmVmUmVtb3RlU2Z1bDJfMSkpOwpAQCAtODYyLDE5ICs4NjIsMTkgQEAKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmICghIHJlZlJlbW90ZVNmdWwyXzIuZXF1YWxzKG5ldyBPYmplY3QoKSkpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBEdW1teVJlbW90ZSBnZXRTZnVsUmVtb3RlQnVzaW5lc3MoaW50IG51bSkgewogICAgICAgICByZXR1cm4gKG51bSA9PSAxKQogICAgICAgICAgICAgPyByZWZSZW1vdGVTZnVsXzEgOiByZWZSZW1vdGVTZnVsXzI7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIER1bW15UmVtb3RlMiBnZXRTZnVsUmVtb3RlQnVzaW5lc3MyKGludCBudW0pIHsKICAgICAgICAgcmV0dXJuIChudW0gPT0gMSkKICAgICAgICAgICAgID8gcmVmUmVtb3RlU2Z1bDJfMSA6IHJlZlJlbW90ZVNmdWwyXzI7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gY29tcGFyZVJlbW90ZVJlZnMoT2JqZWN0IHJlZjEsIE9iamVjdCByZWYyKSB7CiAgICAgICAgIHJldHVybiByZWYxLmVxdWFscyhyZWYyKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2FkYXB0ZWQvZWpiL1NmdWxCdXNpbmVzcy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvYWRhcHRlZC9lamIvU2Z1bEJ1c2luZXNzLmphdmEKaW5kZXggNTYyNWEzOS4uMjQ4MWQ5ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvYWRhcHRlZC9lamIvU2Z1bEJ1c2luZXNzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvYWRhcHRlZC9lamIvU2Z1bEJ1c2luZXNzLmphdmEKQEAgLTIzLDEwICsyMywxMCBAQAogICAgIC8vIHNvIGl0J3Mgbm90IGEgcHJvYmxlbSB0byBkZWZpbmUgYSBtZXRob2QgdGhhdCBoYXBwZW5zIHRvIGhhdmUgdGhlCiAgICAgLy8gc2FtZSBzaWduYXR1cmUgYXMgb25lIG9mIEVKQkxvY2FsT2JqZWN0J3MgbWV0aG9kcy4gIHJlbW92ZSgpIGlzCiAgICAgLy8gYSBsaWtlbHkgbmFtZSBmb3IgYSBtZXRob2QgdGhhdCBoYXMgQFJlbW92ZSBiZWhhdmlvciBzbyBpdCBuZWVkcwotICAgIC8vIHRvIHdvcmsuICAKKyAgICAvLyB0byB3b3JrLgogICAgIHB1YmxpYyB2b2lkIHJlbW92ZSgpOwogCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlUmV0YWluSWZFeGNlcHRpb24oYm9vbGVhbiB0aHJvd0V4Y2VwdGlvbikgCisgICAgcHVibGljIHZvaWQgcmVtb3ZlUmV0YWluSWZFeGNlcHRpb24oYm9vbGVhbiB0aHJvd0V4Y2VwdGlvbikKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBTZnVsQnVzaW5lc3MyIGdldFNmdWxCdXNpbmVzczIoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2FkYXB0ZWQvZWpiL1NmdWxFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2FkYXB0ZWQvZWpiL1NmdWxFSkIuamF2YQppbmRleCAwZTAzODU5Li4yY2MxZTMyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9hZGFwdGVkL2VqYi9TZnVsRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvYWRhcHRlZC9lamIvU2Z1bEVKQi5qYXZhCkBAIC0xMDMsNyArMTAzLDcgQEAKICAgICAgICAgLy8gSWdub3JlIGlucHV0IHBhcmFtZXRlci4gIGNsaWVudCB3aWxsIHVzZSByZXN1bHRpbmcgdW5zZXQgc3RhdGUgdG8KICAgICAgICAgLy8gZW5zdXJlIGNvcnJlY3QgbWFwcGluZyBvZiBASW5pdAogCi0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2Z1bEVKQjo6YWRhcHRlZENyZWF0ZTEoaW50IGlnbm9yZSkgbWV0aG9kLiAiIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNmdWxFSkI6OmFkYXB0ZWRDcmVhdGUxKGludCBpZ25vcmUpIG1ldGhvZC4gIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiKippZ25vcmluZyoqIHN0YXRlPSIgKyBzdGF0ZSk7CiAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYWxsZXIgcHJpbmNpcGFsID0gIiArIGN0eC5nZXRDYWxsZXJQcmluY2lwYWwoKSk7CkBAIC0xMTMsNyArMTEzLDcgQEAKICAgICBASW5pdCgiY3JlYXRlRm9vIikKICAgICBwdWJsaWMgdm9pZCBhZGFwdGVkQ3JlYXRlMihpbnQgYXJndW1lbnQxKSB7CiAgICAgICAgIHN0YXRlID0gYXJndW1lbnQxOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNmdWxFSkI6OmFkYXB0ZWRDcmVhdGUyKGludCBhcmcpIG1ldGhvZCAiIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNmdWxFSkI6OmFkYXB0ZWRDcmVhdGUyKGludCBhcmcpIG1ldGhvZCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJzdGF0ZT0iICsgc3RhdGUpOwogCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbGVyIHByaW5jaXBhbCA9ICIgKyBjdHguZ2V0Q2FsbGVyUHJpbmNpcGFsKCkpOwpAQCAtMTU0LDcgKzE1NCw3IEBACiAgICAgcHVibGljIHZvaWQgcmVtb3ZlKCkge30KIAogICAgIEBSZW1vdmUocmV0YWluSWZFeGNlcHRpb249dHJ1ZSkKLSAgICBwdWJsaWMgdm9pZCByZW1vdmVSZXRhaW5JZkV4Y2VwdGlvbihib29sZWFuIHRocm93RXhjZXB0aW9uKSAKKyAgICBwdWJsaWMgdm9pZCByZW1vdmVSZXRhaW5JZkV4Y2VwdGlvbihib29sZWFuIHRocm93RXhjZXB0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgaWYoIHRocm93RXhjZXB0aW9uICkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiZXhjZXB0aW9uIGZyb20gcmV0YWluSWZFeGNlcHRpb24uICIgKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvYWRhcHRlZC9lamIvU2Z1bFJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvYWRhcHRlZC9lamIvU2Z1bFJlbW90ZS5qYXZhCmluZGV4IGMxNTA3YzEuLjU3ZDk5YmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2FkYXB0ZWQvZWpiL1NmdWxSZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9hZGFwdGVkL2VqYi9TZnVsUmVtb3RlLmphdmEKQEAgLTIwLDcgKzIwLDcgQEAKIAogcHVibGljIGludGVyZmFjZSBTZnVsUmVtb3RlIGV4dGVuZHMgQ29tbW9uUmVtb3RlLCBFSkJPYmplY3QKIHsKLSAgIAorCiAgICAgcHVibGljIGludCBnZXRTdGF0ZSgpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2FkYXB0ZWQvZWpiL1NmdWxSZW1vdGVCdXNpbmVzcy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvYWRhcHRlZC9lamIvU2Z1bFJlbW90ZUJ1c2luZXNzLmphdmEKaW5kZXggM2U2OTE2OS4uMWFjYzc4YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvYWRhcHRlZC9lamIvU2Z1bFJlbW90ZUJ1c2luZXNzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvYWRhcHRlZC9lamIvU2Z1bFJlbW90ZUJ1c2luZXNzLmphdmEKQEAgLTIyLDE0ICsyMiwxNCBAQAogcHVibGljIGludGVyZmFjZSBTZnVsUmVtb3RlQnVzaW5lc3MgZXh0ZW5kcyBDb21tb25SZW1vdGUKIHsKIAotICAgIHB1YmxpYyB2b2lkIHJlbW92ZVJldGFpbklmRXhjZXB0aW9uKGJvb2xlYW4gdGhyb3dFeGNlcHRpb24pIAorICAgIHB1YmxpYyB2b2lkIHJlbW92ZVJldGFpbklmRXhjZXB0aW9uKGJvb2xlYW4gdGhyb3dFeGNlcHRpb24pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb247CiAKICAgICAvLyBUaGUgcmVtb3RlIGJ1c2luZXNzIGludGVyZmFjZSBoYXMgbm8gcmVsYXRpb25zaGlwIHRvIEVKQk9iamVjdAogICAgIC8vIHNvIGl0J3Mgbm90IGEgcHJvYmxlbSB0byBkZWZpbmUgYSBtZXRob2QgdGhhdCBoYXBwZW5zIHRvIGhhdmUgdGhlCiAgICAgLy8gc2FtZSBzaWduYXR1cmUgYXMgb25lIG9mIEVKQk9iamVjdCdzIG1ldGhvZHMuICByZW1vdmUoKSBpcwogICAgIC8vIGEgbGlrZWx5IG5hbWUgZm9yIGEgbWV0aG9kIHRoYXQgaGFzIEBSZW1vdmUgYmVoYXZpb3Igc28gaXQgbmVlZHMKLSAgICAvLyB0byB3b3JrLiAgCisgICAgLy8gdG8gd29yay4KICAgICBwdWJsaWMgdm9pZCByZW1vdmUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9hZGFwdGVkL2VqYi9TbGVzc0VKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvYWRhcHRlZC9lamIvU2xlc3NFSkIuamF2YQppbmRleCA2YzI1MTQ1Li43ZWQyYjc3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9hZGFwdGVkL2VqYi9TbGVzc0VKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2FkYXB0ZWQvZWpiL1NsZXNzRUpCLmphdmEKQEAgLTcwLDcgKzcwLDcgQEAKICAgICAvKioKICAgICAgKiBCdXNpbmVzcyBtZXRob2QgZGVjbGFyZWQgb24gYSBzdXBlciBpbnRlcmZhY2UgZXh0ZW5kZWQgYnkgYm90aAogICAgICAqIHJlbW90ZSBhbmQgbG9jYWwgYnVzaW5lc3MgaW50ZXJmYWNlLiAgVGVzdCB0aGF0IHR4IGF0dHJpYnV0ZSBpcwotICAgICAqIHNldCBhcHByb3ByaWF0ZWx5IGZvciBsb2NhbCB2cy4gcmVtb3RlLiAgCisgICAgICogc2V0IGFwcHJvcHJpYXRlbHkgZm9yIGxvY2FsIHZzLiByZW1vdGUuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2hhcmVkUmVtb3RlTG9jYWxCdXNpbmVzc1N1cGVyKGJvb2xlYW4gZXhwZWN0VHgpIHsKIApAQCAtNzgsMTAgKzc4LDEwIEBACiAKICAgICAgICAgdHJ5IHsKIAotICAgICAgICAgICAgLy8gUHJvcHJpZXRhcnkgd2F5IHRvIGxvb2sgdXAgdHggbWFuYWdlci4gIAorICAgICAgICAgICAgLy8gUHJvcHJpZXRhcnkgd2F5IHRvIGxvb2sgdXAgdHggbWFuYWdlci4KICAgICAgICAgICAgIFRyYW5zYWN0aW9uTWFuYWdlciB0bSA9IChUcmFuc2FjdGlvbk1hbmFnZXIpCi0JCS8vICBUT0RPIGNoZWNrIHRoaXMsIGl0IHdvcmtlZCBpblYyICAgICAgICAgICAgICBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6cG0vVHJhbnNhY3Rpb25NYW5hZ2VyIik7Ci0JCSAgICAgICAgICAgICAgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmFwcHNlcnZlci9UcmFuc2FjdGlvbk1hbmFnZXIiKTsKKyAgICAgICAgLy8gIFRPRE8gY2hlY2sgdGhpcywgaXQgd29ya2VkIGluVjIgICAgICAgICAgICAgIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpwbS9UcmFuc2FjdGlvbk1hbmFnZXIiKTsKKyAgICAgICAgICAgICAgICAgICAgICBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6YXBwc2VydmVyL1RyYW5zYWN0aW9uTWFuYWdlciIpOwogCiAgICAgICAgICAgICAvLyBVc2UgYW4gaW1wbGVtZW50YXRpb24tc3BlY2lmaWMgY2hlY2sgd2hldGhlciB0aGVyZSBpcyBhIHR4LgogICAgICAgICAgICAgLy8gQSBwb3J0YWJsZSBhcHBsaWNhdGlvbiBjb3VsZG4ndCBtYWtlIHRoaXMgY2hlY2sKQEAgLTkzLDEzICs5MywxMyBAQAogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwogICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICBpZiggZXhwZWN0VHggJiYgaGFzVHggKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSB2ZXJpZmllZCB0eCIpOwogICAgICAgICB9IGVsc2UgaWYoICFleHBlY3RUeCAmJiAhaGFzVHggKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSB2ZXJpZmllZCB0aGVyZSBpcyBubyB0eCIpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiSW52YWxpZCB0eCBzdGF0dXMuICBFeHBlY3RUeCA9ICIgKyAKKyAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIkludmFsaWQgdHggc3RhdHVzLiAgRXhwZWN0VHggPSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0VHggKyAiIGhhc1R4ID0gIiArIGhhc1R4KTsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9hZGFwdGVkL2VqYi9TbGVzc1JlbW90ZUJ1c2luZXNzMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvYWRhcHRlZC9lamIvU2xlc3NSZW1vdGVCdXNpbmVzczIuamF2YQppbmRleCAxNDgxM2Y1Li4xYzNlOTdhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9hZGFwdGVkL2VqYi9TbGVzc1JlbW90ZUJ1c2luZXNzMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2FkYXB0ZWQvZWpiL1NsZXNzUmVtb3RlQnVzaW5lc3MyLmphdmEKQEAgLTIxLDYgKzIxLDYgQEAKIHB1YmxpYyBpbnRlcmZhY2UgU2xlc3NSZW1vdGVCdXNpbmVzczIgZXh0ZW5kcyBDb21tb25SZW1vdGVMb2NhbEJ1c2luZXNzU3VwZXIKIHsKICAgICBwdWJsaWMgdm9pZCBmb28oKTsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGJhcigpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvYnVpbGQueG1sCmluZGV4IDI5MzkyZTguLmY2MjMwY2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9idWlsZC54bWwKQEAgLTYwLDkgKzYwLDkgQEAKIAogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+Ci0JCVVzYWdlOgotCQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamItZWpiMzAtY2xpZW50dmlldyB0ZXN0cykKLQk8L2VjaG8+CisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamItZWpiMzAtY2xpZW50dmlldyB0ZXN0cykKKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9jb3JlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9jb3JlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZGZiYWVmZC4uMGQ4ZmMzZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvY29yZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2NvcmUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjIgKzE1LDIyIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzAtY2xpZW50dmlldy1jb3JlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0ic2UuY2xpZW50IiB2YWx1ZT0iY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5jbGllbnR2aWV3LmNvcmUuY2xpZW50LkNsaWVudCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvY29yZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9jb3JlL2J1aWxkLnhtbAppbmRleCAxNmU5OTAxLi4zMmVmMGE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9jb3JlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9jb3JlL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTQgKzQ2LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ29tbW9uKi5jbGFzcywqKi9IZWxwZXIqLmNsYXNzLCoqL0hlbGxvKi5jbGFzcywqKi9CbXAqLmNsYXNzLCoqL1NmdWwqLmNsYXNzLCoqL1NsZXNzKi5jbGFzcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0hlbHBlciouY2xhc3MsKiovU2Z1bFJlbW90ZS5jbGFzcywqKi9TbGVzc1JlbW90ZS5jbGFzcywqKi9DbGllbnQuY2xhc3MsKiovSGVsbG8uY2xhc3MsKiovQ29tbW9uUmVtb3RlKi5jbGFzcywqKi9CbXBSZW1vdGUuY2xhc3MsKiovQm1wUmVtb3RlSG9tZSouY2xhc3MsKiovU2Z1bFJlbW90ZUhvbWUqLmNsYXNzLCoqL1NsZXNzUmVtb3RlSG9tZSouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02MywxNyArNjMsMTcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuX3NlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgPGphdmEgIGZvcms9Im9uIiAKKyAgICAgICA8amF2YSAgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSIke3NlLmNsaWVudH0iPgogICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0IiB2YWx1ZT0iJHtvcmIucG9ydH0iLz4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9jb3JlL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2NvcmUvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDQxNDYwNGQuLjAzZWViYmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2NvcmUvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2NvcmUvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNiwxMiArMjYsMTIgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgQEVKQiBwcml2YXRlIHN0YXRpYyBIZWxsbyBocjsKICAgICBARUpCIHByaXZhdGUgc3RhdGljIEJtcFJlbW90ZUhvbWUgYm1wUmVtb3RlSG9tZTsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIFNmdWxSZW1vdGVIb21lIHNmdWxSZW1vdGVIb21lOwogCiAgICAgQEVKQiBwdWJsaWMgc3RhdGljIHZvaWQgc2V0U3RhdGVmdWxSZW1vdGVIb21lKFNmdWxSZW1vdGVIb21lIHNyaCkgewpAQCAtNDAsNyArNDAsNyBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2xlc3NSZW1vdGVIb21lIHNsZXNzUmVtb3RlSG9tZTsKIAotICAgIEBFSkIoYmVhbk5hbWU9IlNsZXNzQmVhbiIpIAorICAgIEBFSkIoYmVhbk5hbWU9IlNsZXNzQmVhbiIpCiAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBzZXRTdGF0ZWxlc3NSZW1vdGVIb21lKFNsZXNzUmVtb3RlSG9tZSBzcmgpIHsKICAgICAgICAgc2xlc3NSZW1vdGVIb21lID0gc3JoOwogICAgIH0KQEAgLTUxLDI1ICs1MSwyNSBAQAogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiZWpiLWVqYjMwLWNsaWVudHZpZXctY29yZUlEIik7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKIAogICAgICAgICB0cnkgewogCi0JICAgIGlmKCBociA9PSBudWxsICkgeworICAgICAgICBpZiggaHIgPT0gbnVsbCApIHsKIAotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIHN0YW5kLWFsb25lIG1vZGUiKTsKLQkJSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkJaHIgPSAoSGVsbG8pIGljLmxvb2t1cCgiZWpiL2VqYl9lamIzMF9jbGllbnR2aWV3X2NvcmVfQ29yZUFwcCIpOwotCQlibXBSZW1vdGVIb21lID0gKEJtcFJlbW90ZUhvbWUpIGljLmxvb2t1cCgiZWpiL2VqYl9lamIzMF9jbGllbnR2aWV3X2NvcmVfQm1wIik7Ci0JCXNmdWxSZW1vdGVIb21lID0gKFNmdWxSZW1vdGVIb21lKSBpYy5sb29rdXAoImVqYi9lamJfZWpiMzBfY2xpZW50dmlld19jb3JlX1NmdWwiKTsKLQkJc2xlc3NSZW1vdGVIb21lID0gKFNsZXNzUmVtb3RlSG9tZSkgaWMubG9va3VwKCJlamIvZWpiX2VqYjMwX2NsaWVudHZpZXdfY29yZV9TbGVzcyIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIHN0YW5kLWFsb25lIG1vZGUiKTsKKyAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgaHIgPSAoSGVsbG8pIGljLmxvb2t1cCgiZWpiL2VqYl9lamIzMF9jbGllbnR2aWV3X2NvcmVfQ29yZUFwcCIpOworICAgICAgICBibXBSZW1vdGVIb21lID0gKEJtcFJlbW90ZUhvbWUpIGljLmxvb2t1cCgiZWpiL2VqYl9lamIzMF9jbGllbnR2aWV3X2NvcmVfQm1wIik7CisgICAgICAgIHNmdWxSZW1vdGVIb21lID0gKFNmdWxSZW1vdGVIb21lKSBpYy5sb29rdXAoImVqYi9lamJfZWpiMzBfY2xpZW50dmlld19jb3JlX1NmdWwiKTsKKyAgICAgICAgc2xlc3NSZW1vdGVIb21lID0gKFNsZXNzUmVtb3RlSG9tZSkgaWMubG9va3VwKCJlamIvZWpiX2VqYjMwX2NsaWVudHZpZXdfY29yZV9TbGVzcyIpOwogCi0JICAgIH0KKyAgICAgICAgfQogCiAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidGVzdGluZyBpbmplY3RlZCBCbXBSZW1vdGVIb21lIik7CkBAIC03Nyw4ICs3Nyw4IEBACiAgICAgICAgICAgICBibXBSZW1vdGUgPSBibXBSZW1vdGVIb21lLmZpbmRCeVByaW1hcnlLZXkoImNsaWVudDEiKTsKIAogICAgICAgICAgICAgRUpCTWV0YURhdGEgbWQgPSBibXBSZW1vdGVIb21lLmdldEVKQk1ldGFEYXRhKCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigibWV0YWRhdGEgPSAiICsgbWQpOwotICAgICAgICAgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibWV0YWRhdGEgPSAiICsgbWQpOworCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRlc3RpbmcgaW5qZWN0ZWQgU2xlc3NSZW1vdGVIb21lIik7CiAgICAgICAgICAgICBTbGVzc1JlbW90ZSBzbGVzc1JlbW90ZSA9IHNsZXNzUmVtb3RlSG9tZS5jcmVhdGUoKTsKICAgICAgICAgICAgIHNsZXNzUmVtb3RlLnJlcXVpcmVkKCk7CkBAIC04NiwxMiArODYsMTIgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidGVzdGluZyBpbmplY3RlZCBTZnVsUmVtb3RlSG9tZSIpOwogICAgICAgICAgICAgU2Z1bFJlbW90ZSBzZnVsUmVtb3RlID0gc2Z1bFJlbW90ZUhvbWUuY3JlYXRlU2Z1bCgpOwogICAgICAgICAgICAgc2Z1bFJlbW90ZS5yZXF1aXJlZCgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidGVzdGluZyBSZW1vdGUgMy4wIEhlbGxvIGludGYiKTsKICAgICAgICAgICAgIGhyLnRlc3RQYXNzQnlSZWYoKTsKIAotCSAgICAvLyBpbnZva2UgbWV0aG9kIG9uIHRoZSBFSkIKLQkgICAgZG9Qcm94eVRlc3QoaHIpOworICAgICAgICAvLyBpbnZva2UgbWV0aG9kIG9uIHRoZSBFSkIKKyAgICAgICAgZG9Qcm94eVRlc3QoaHIpOwogCiAgICAgICAgICAgICB0ZXN0RXhjZXB0aW9ucyhocik7CiAKQEAgLTEwMyw4ICsxMDMsOCBAQAogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiAsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgCXJldHVybjsKKworICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHRlc3RFeGNlcHRpb25zKEhlbGxvIGgpIHRocm93cyBFeGNlcHRpb24gewpAQCAtMTEzLDcgKzExMyw3IEBACiAgICAgICAgICAgICBoLnRocm93RXhjZXB0aW9uKCk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGlmKCBlLmdldENsYXNzKCkgPT0gRXhjZXB0aW9uLmNsYXNzICkgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGNhdWdodCBleGNlcHRpb24gIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGNhdWdodCBleGNlcHRpb24gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuZ2V0Q2xhc3MoKSArICIgIiArIGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgdGhyb3cgZTsKQEAgLTEyNCw3ICsxMjQsNyBAQAogICAgICAgICAgICAgaC50aHJvd0FwcEV4Y2VwdGlvbjEoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oImRpZG4ndCBnZXQgZXhjZXB0aW9uIGZvciB0ZXN0RXhjZXB0aW9uMiIpOwogICAgICAgICB9IGNhdGNoKGpha2FydGEuZWpiLkZpbmRlckV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSBjYXVnaHQgZXhjZXB0aW9uICIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGNhdWdodCBleGNlcHRpb24gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5nZXRDbGFzcygpICsgIiAiICsgZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAKQEAgLTEzMiw3ICsxMzIsNyBAQAogICAgICAgICAgICAgaC50aHJvd0FwcEV4Y2VwdGlvbjIoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oImRpZG4ndCBnZXQgZXhjZXB0aW9uIGZvciB0ZXN0RXhjZXB0aW9uMyIpOwogICAgICAgICB9IGNhdGNoKGpha2FydGEuZWpiLkZpbmRlckV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSBjYXVnaHQgZXhjZXB0aW9uICIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGNhdWdodCBleGNlcHRpb24gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5nZXRDbGFzcygpICsgIiAiICsgZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAKQEAgLTE1OCwzNiArMTU4LDM2IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgZG9Qcm94eVRlc3QoSGVsbG8gaHIpIAotCXRocm93cyBFeGNlcHRpb24KKyAgICBwcml2YXRlIHZvaWQgZG9Qcm94eVRlc3QoSGVsbG8gaHIpCisgICAgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlxuU3RhdGVmdWwgU2Vzc2lvbiByZXN1bHRzIChtaWNyb3NlYyk6IFx0d2l0aCB0eCBcdG5vIHR4OiIpOwotCWhyLndhcm11cChDb21tb24uU1RBVEVGVUwpOwotCXJ1blRlc3RzKENvbW1vbi5TVEFURUZVTCwgaHIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG5TdGF0ZWZ1bCBTZXNzaW9uIHJlc3VsdHMgKG1pY3Jvc2VjKTogXHR3aXRoIHR4IFx0bm8gdHg6Iik7CisgICAgaHIud2FybXVwKENvbW1vbi5TVEFURUZVTCk7CisgICAgcnVuVGVzdHMoQ29tbW9uLlNUQVRFRlVMLCBocik7CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlxuU3RhdGVsZXNzIFNlc3Npb24gcmVzdWx0cyAobWljcm9zZWMpOiBcdHdpdGggdHggXHRubyB0eDoiKTsKLQloci53YXJtdXAoQ29tbW9uLlNUQVRFRlVMKTsKLQlydW5UZXN0cyhDb21tb24uU1RBVEVMRVNTLCBocik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJcblN0YXRlbGVzcyBTZXNzaW9uIHJlc3VsdHMgKG1pY3Jvc2VjKTogXHR3aXRoIHR4IFx0bm8gdHg6Iik7CisgICAgaHIud2FybXVwKENvbW1vbi5TVEFURUZVTCk7CisgICAgcnVuVGVzdHMoQ29tbW9uLlNUQVRFTEVTUywgaHIpOwogCi0JU3lzdGVtLm91dC5wcmludGxuKCJcbkJNUCBFbnRpdHkgcmVzdWx0cyAobWljcm9zZWMpOiBcdFx0d2l0aCB0eCBcdG5vIHR4OiIpOwotCWhyLndhcm11cChDb21tb24uQk1QKTsKLQlydW5UZXN0cyhDb21tb24uQk1QLCBocik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJcbkJNUCBFbnRpdHkgcmVzdWx0cyAobWljcm9zZWMpOiBcdFx0d2l0aCB0eCBcdG5vIHR4OiIpOworICAgIGhyLndhcm11cChDb21tb24uQk1QKTsKKyAgICBydW5UZXN0cyhDb21tb24uQk1QLCBocik7CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHJ1blRlc3RzKGludCB0eXBlLCBIZWxsbyBocikKLQl0aHJvd3MgRXhjZXB0aW9uCisgICAgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKLSAgICAgIAorCiAgICAgICAgIGhyLm5vdFN1cHBvcnRlZCh0eXBlLCB0cnVlKTsKICAgICAgICAgaHIubm90U3VwcG9ydGVkKHR5cGUsIGZhbHNlKTsKICAgICAgICAgaHIuc3VwcG9ydHModHlwZSwgdHJ1ZSk7Ci0JaHIuc3VwcG9ydHModHlwZSwgZmFsc2UpOworICAgIGhyLnN1cHBvcnRzKHR5cGUsIGZhbHNlKTsKICAgICAgICAgaHIucmVxdWlyZWQodHlwZSwgdHJ1ZSk7Ci0JaHIucmVxdWlyZWQodHlwZSwgZmFsc2UpOworICAgIGhyLnJlcXVpcmVkKHR5cGUsIGZhbHNlKTsKICAgICAgICAgaHIucmVxdWlyZXNOZXcodHlwZSwgdHJ1ZSk7Ci0JaHIucmVxdWlyZXNOZXcodHlwZSwgZmFsc2UpOworICAgIGhyLnJlcXVpcmVzTmV3KHR5cGUsIGZhbHNlKTsKICAgICAgICAgaHIubWFuZGF0b3J5KHR5cGUsIHRydWUpOwotCWhyLm5ldmVyKHR5cGUsIGZhbHNlKTsKKyAgICBoci5uZXZlcih0eXBlLCBmYWxzZSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9jb3JlL2Rlc2NyaXB0b3IvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9jb3JlL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggZTEwMjE3MS4uMGFjMmIxMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvY29yZS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2NvcmUvZGVzY3JpcHRvci9lamItamFyLnhtbApAQCAtNDgsNyArNDgsNyBAQAogICAgIDwvc2Vzc2lvbj4KICAgICA8c2Vzc2lvbj4KICAgICAgIDxlamItbmFtZT5TZnVsQmVhbjwvZWpiLW5hbWU+Ci0gICAgICA8aG9tZT5jb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmNsaWVudHZpZXcuY29yZS5TZnVsUmVtb3RlSG9tZTwvaG9tZT4gCisgICAgICA8aG9tZT5jb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmNsaWVudHZpZXcuY29yZS5TZnVsUmVtb3RlSG9tZTwvaG9tZT4KICAgICAgIDxyZW1vdGU+Y29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5jbGllbnR2aWV3LmNvcmUuU2Z1bFJlbW90ZTwvcmVtb3RlPgogICAgICAgPGxvY2FsLWhvbWU+Y29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5jbGllbnR2aWV3LmNvcmUuU2Z1bEhvbWU8L2xvY2FsLWhvbWU+CiAgICAgICA8bG9jYWw+Y29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5jbGllbnR2aWV3LmNvcmUuU2Z1bDwvbG9jYWw+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9jb3JlL2VqYi9CbXBFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2NvcmUvZWpiL0JtcEVKQi5qYXZhCmluZGV4IGRiOTg5ZWQuLjRmYTc0MzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2NvcmUvZWpiL0JtcEVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2NvcmUvZWpiL0JtcEVKQi5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiAgICAgcHVibGljIFN0cmluZyBlamJDcmVhdGUoU3RyaW5nIHMpIHsKIAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImVjXyA9PSAiICsgZWNfKTsKLQlyZXR1cm4gczsKKyAgICByZXR1cm4gczsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJQb3N0Q3JlYXRlKFN0cmluZyBzKSB7fQpAQCAtNDcsMTAgKzQ3LDEwIEBACiAgICAgcHVibGljIHZvaWQgdW5zZXRFbnRpdHlDb250ZXh0KCkKICAgICB7fQogCi0gICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgCisgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkKICAgICB7fQogCi0gICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSAKKyAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpCiAgICAge30KIAogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpCkBAIC02Myw3ICs2Myw3IEBACiAgICAge30KIAogICAgIHB1YmxpYyBTdHJpbmcgZWpiRmluZEJ5UHJpbWFyeUtleShTdHJpbmcgcykgewotCXJldHVybiBzOworICAgIHJldHVybiBzOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHRlc3RFeGNlcHRpb24xKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CkBAIC0xMDEsNyArMTAxLDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB0ZXN0UGFzc0J5UmVmNChDb21tb25SZW1vdGUgY3IpIHsKLSAgICAgICAKKwogICAgIH0KIAogICAgIHB1YmxpYyBIZWxwZXIxIHRlc3RQYXNzQnlSZWY1KCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvY29yZS9lamIvQm1wSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvY29yZS9lamIvQm1wSG9tZS5qYXZhCmluZGV4IDI0NGZlM2UuLjlhMzY1MTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2NvcmUvZWpiL0JtcEhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9jb3JlL2VqYi9CbXBIb21lLmphdmEKQEAgLTIxLDUgKzIxLDUgQEAKIAogcHVibGljIGludGVyZmFjZSBCbXBIb21lIGV4dGVuZHMgQm1wSG9tZVN1cGVyCiB7Ci0gICAgQm1wIGZpbmRCeVByaW1hcnlLZXkoU3RyaW5nIHMpIHRocm93cyBDcmVhdGVFeGNlcHRpb247ICAgIAorICAgIEJtcCBmaW5kQnlQcmltYXJ5S2V5KFN0cmluZyBzKSB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvY29yZS9lamIvQm1wUmVtb3RlSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvY29yZS9lamIvQm1wUmVtb3RlSG9tZS5qYXZhCmluZGV4IGE5YzRiYWEuLmE0OTk5MWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2NvcmUvZWpiL0JtcFJlbW90ZUhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9jb3JlL2VqYi9CbXBSZW1vdGVIb21lLmphdmEKQEAgLTIxLDUgKzIxLDUgQEAKIAogcHVibGljIGludGVyZmFjZSBCbXBSZW1vdGVIb21lIGV4dGVuZHMgQm1wUmVtb3RlSG9tZVN1cGVyCiB7Ci0gICAgQm1wUmVtb3RlIGZpbmRCeVByaW1hcnlLZXkoU3RyaW5nIHMpIHRocm93cyBSZW1vdGVFeGNlcHRpb24sIENyZWF0ZUV4Y2VwdGlvbjsgICAgCisgICAgQm1wUmVtb3RlIGZpbmRCeVByaW1hcnlLZXkoU3RyaW5nIHMpIHRocm93cyBSZW1vdGVFeGNlcHRpb24sIENyZWF0ZUV4Y2VwdGlvbjsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2NvcmUvZWpiL0hlbGxvRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9jb3JlL2VqYi9IZWxsb0VKQi5qYXZhCmluZGV4IDdiZjc4MTQuLjJkMjA0ZjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2NvcmUvZWpiL0hlbGxvRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvY29yZS9lamIvSGVsbG9FSkIuamF2YQpAQCAtNTMsNyArNTMsNyBAQAogCiAgICAgQEVKQiBwdWJsaWMgQm1wSG9tZSBibXBIb21lOwogCi0gICAgQEVKQihiZWFuTmFtZT0iQm1wQmVhbiIpIAorICAgIEBFSkIoYmVhbk5hbWU9IkJtcEJlYW4iKQogICAgIHB1YmxpYyBCbXBIb21lU3VwZXIgYm1wSG9tZVN1cGVyOwogCiAgICAgcHJpdmF0ZSBCbXAgYm1wOwpAQCAtNjIsNyArNjIsNyBAQAogICAgIHByaXZhdGUgQm1wUmVtb3RlIGJtcFJlbW90ZTsKIAogICAgIHByaXZhdGUgbG9uZyBvdmVyaGVhZDsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBwa2V5ID0gIkEgQk1QIEJlYW4iOwogCiAgICAgQFJlc291cmNlIGpha2FydGEudHJhbnNhY3Rpb24uVXNlclRyYW5zYWN0aW9uIHV0OwpAQCAtNzAsMjcgKzcwLDI3IEBACiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwdWJsaWMgdm9pZCBjcmVhdGUoKSB7CiAKLQl0cnkgeworICAgIHRyeSB7CiAKICAgICAgICAgICAgIHNmdWwgPSBzZnVsSG9tZS5jcmVhdGVTZnVsKCk7CiAgICAgICAgICAgICBzZnVsUmVtb3RlID0gc2Z1bFJlbW90ZUhvbWUuY3JlYXRlU2Z1bCgpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0ZWQgbG9jYS9yZW1vdGUgc2Z1bCBvYmpzIHZpYSBob21lcy4iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGVkIGxvY2EvcmVtb3RlIHNmdWwgb2JqcyB2aWEgaG9tZXMuIik7CiAKICAgICAgICAgICAgIGJtcCA9IGJtcEhvbWUuY3JlYXRlKHBrZXkpOwogICAgICAgICAgICAgYm1wUmVtb3RlID0gKEJtcFJlbW90ZSkKICAgICAgICAgICAgICAgICBibXBSZW1vdGVIb21lLmZpbmRCeVByaW1hcnlLZXkocGtleSk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRlZCBCTVAgYmVhbi4iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGVkIEJNUCBiZWFuLiIpOwogCiAgICAgICAgICAgICBzbGVzcyA9IHNsZXNzSG9tZS5jcmVhdGUoKTsKICAgICAgICAgICAgIHNsZXNzUmVtb3RlID0gc2xlc3NSZW1vdGVIb21lLmNyZWF0ZSgpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0ZWQgbG9jYS9yZW1vdGUgc2xlc3Mgb2JqcyB2aWEgaG9tZXMuIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRlZCBsb2NhL3JlbW90ZSBzbGVzcyBvYmpzIHZpYSBob21lcy4iKTsKIAogCiAgICAgICAgICAgICAvLyAgICAgICAgICAgIHV0ID0gY29udGV4dC5nZXRVc2VyVHJhbnNhY3Rpb24oKTsKLQkgICAJICAgICAKLQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQorCisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgdGVzdFJlbW92ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewpAQCAtOTksNyArOTksNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGVkIEJNUCBiZWFuLiIpOwogICAgICAgICAgICAgYm1wSG9tZS5yZW1vdmUoYm1wMi5nZXRQcmltYXJ5S2V5KCkpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgcmVtb3ZlZCBsb2NhbCBlbnRpdHkgYmVhbiIpOwotICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7ICAgICAgICAgICAgCisgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwogICAgICAgICB9CkBAIC0xMjcsOSArMTI3LDkgQEAKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgKChFSkJMb2NhbE9iamVjdClzZnVsKS5yZW1vdmUoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICgoRUpCTG9jYWxPYmplY3Qpc2Z1bCkucmVtb3ZlKCk7IAorICAgICAgICAgICAgICAgICgoRUpCTG9jYWxPYmplY3Qpc2Z1bCkucmVtb3ZlKCk7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiMm5kIHNmdWwgcmVtb3ZlIHNob3VsZCBoYXZlIGNhdXNlZCBleGNlcHRpb24iKTsKICAgICAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSBjYXVnaHQgZXhjZXB0aW9uIHdoZW4gYXR0ZW1wdGluZyB0byAiKwpAQCAtMTM5LDcgKzEzOSw3IEBACiAKICAgICAgICAgICAgICgoRUpCTG9jYWxPYmplY3Qpc2xlc3MpLnJlbW92ZSgpOwogCi0gICAgICAgICAgICAoKEVKQkxvY2FsT2JqZWN0KWJtcCkucmVtb3ZlKCk7IAorICAgICAgICAgICAgKChFSkJMb2NhbE9iamVjdClibXApLnJlbW92ZSgpOwogCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIEVKQkV4Y2VwdGlvbiBlamJFeCA9IG5ldyBFSkJFeGNlcHRpb24oKTsKQEAgLTE2MCw1MiArMTYwLDUyIEBACiAgICAgcHVibGljIHZvaWQgdGhyb3dBcHBFeGNlcHRpb24yKCkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiB7CiAgICAgICAgIHRocm93IG5ldyBPYmplY3ROb3RGb3VuZEV4Y2VwdGlvbigidGhyb3dBcHBFeGNlcHRpb24yIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgd2FybXVwKGludCB0eXBlKSB7CiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHdhcm11cCh0eXBlLCB0cnVlKTsKICAgICAgICAgICAgIHdhcm11cCh0eXBlLCBmYWxzZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIE1lYXN1cmUgbG9vcGluZyBhbmQgdGltaW5nIG92ZXJoZWFkIAorCisgICAgICAgICAgICAvLyBNZWFzdXJlIGxvb3BpbmcgYW5kIHRpbWluZyBvdmVyaGVhZAogICAgICAgICAgICAgbG9uZyBiZWdpbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwogICAgICAgICAgICAgZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsb25nIGVuZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwogICAgICAgICAgICAgb3ZlcmhlYWQgPSBlbmQgLSBiZWdpbjsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTdHJpbmcgcGtleTIgPSAoU3RyaW5nKSAoKEVKQkxvY2FsT2JqZWN0KWJtcCkuZ2V0UHJpbWFyeUtleSgpOwogICAgICAgICAgICAgaWYoICFwa2V5Mi5lcXVhbHMocGtleSkgKSB7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigicGtleTIgIiArIHBrZXkyICsgIiBkb2Vzbid0IG1hdGNoICIgKyBwa2V5KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICB1dCA9IGNvbnRleHQuZ2V0VXNlclRyYW5zYWN0aW9uKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgdGVzdExvY2FsT2JqZWN0cygoKEVKQkxvY2FsT2JqZWN0KXNmdWwpLCAoKEVKQkxvY2FsT2JqZWN0KXNsZXNzKSk7CiAgICAgICAgICAgICB0ZXN0TG9jYWxPYmplY3RzKCgoRUpCTG9jYWxPYmplY3Qpc2Z1bCksICgoRUpCTG9jYWxPYmplY3QpYm1wKSk7CiAgICAgICAgICAgICB0ZXN0TG9jYWxPYmplY3RzKCgoRUpCTG9jYWxPYmplY3Qpc2xlc3MpLCgoRUpCTG9jYWxPYmplY3QpYm1wKSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgdGVzdEVKQk9iamVjdHMoc2Z1bFJlbW90ZSwgc2xlc3NSZW1vdGUpOwogICAgICAgICAgICAgdGVzdEVKQk9iamVjdHMoc2Z1bFJlbW90ZSwgYm1wUmVtb3RlKTsKICAgICAgICAgICAgIHRlc3RFSkJPYmplY3RzKHNsZXNzUmVtb3RlLCBibXBSZW1vdGUpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHRlc3ROb3RJbXBsZW1lbnRlZChzZnVsKTsKICAgICAgICAgICAgIHRlc3ROb3RJbXBsZW1lbnRlZChzbGVzcyk7CiAgICAgICAgICAgICB0ZXN0Tm90SW1wbGVtZW50ZWQoYm1wKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICB0ZXN0Tm90SW1wbGVtZW50ZWQoc2Z1bFJlbW90ZSk7CiAgICAgICAgICAgICB0ZXN0Tm90SW1wbGVtZW50ZWQoc2xlc3NSZW1vdGUpOwogICAgICAgICAgICAgdGVzdE5vdEltcGxlbWVudGVkKGJtcFJlbW90ZSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgdGVzdFJlbW92ZSgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8vIHNraXAgdGVzdEV4Y2VwdGlvbnMgZm9yIHNmc2Igc2luY2UgdGhyb3dpbmcgYSBydW50aW1lIGV4Y2VwdGlvbgogICAgICAgICAgICAgLy8gd2lsbCBjYXVzZSB0aGUgYmVhbiB0byBiZSByZW1vdmVkCiAgICAgICAgICAgICAvLyB0ZXN0RXhjZXB0aW9ucyhzZnVsKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICB0ZXN0RXhjZXB0aW9ucyhzbGVzcyk7CiAgICAgICAgICAgICB0ZXN0RXhjZXB0aW9ucyhibXApOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHRlc3RFeGNlcHRpb25zKHNsZXNzUmVtb3RlKTsKICAgICAgICAgICAgIHRlc3RFeGNlcHRpb25zKGJtcFJlbW90ZSk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKQEAgLTIxMywxNCArMjEzLDE0IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHRlc3RFeGNlcHRpb25zKENvbW1vbiBjKSB7CiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGMudGVzdEV4Y2VwdGlvbjEoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImRpZG4ndCBnZXQgZXhjZXB0aW9uIGZvciB0ZXN0RXhjZXB0aW9uMSIpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSBjYXVnaHQgZXhjZXB0aW9uICIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGNhdWdodCBleGNlcHRpb24gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5nZXRDbGFzcygpICsgIiAiICsgZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAKQEAgLTIyOCw3ICsyMjgsNyBAQAogICAgICAgICAgICAgYy50ZXN0RXhjZXB0aW9uMigpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiZGlkbid0IGdldCBleGNlcHRpb24gZm9yIHRlc3RFeGNlcHRpb24yIik7CiAgICAgICAgIH0gY2F0Y2goRUpCRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGNhdWdodCBleGNlcHRpb24gIiArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgY2F1Z2h0IGV4Y2VwdGlvbiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmdldENsYXNzKCkgKyAiICIgKyBlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KIApAQCAtMjM2LDEwICsyMzYsMTAgQEAKICAgICAgICAgICAgIGMudGVzdEV4Y2VwdGlvbjMoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImRpZG4ndCBnZXQgZXhjZXB0aW9uIGZvciB0ZXN0RXhjZXB0aW9uMyIpOwogICAgICAgICB9IGNhdGNoKEZpbmRlckV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSBjYXVnaHQgZXhjZXB0aW9uICIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGNhdWdodCBleGNlcHRpb24gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5nZXRDbGFzcygpICsgIiAiICsgZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCisKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgdGVzdEV4Y2VwdGlvbnMoQ29tbW9uUmVtb3RlIGMpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewpAQCAtMjQ4LDcgKzI0OCw3IEBACiAgICAgICAgICAgICBjLnRlc3RFeGNlcHRpb24xKCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJkaWRuJ3QgZ2V0IGV4Y2VwdGlvbiBmb3IgdGVzdEV4Y2VwdGlvbjEiKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgY2F1Z2h0IGV4Y2VwdGlvbiAiICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSBjYXVnaHQgZXhjZXB0aW9uICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuZ2V0Q2xhc3MoKSArICIgIiArIGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogCkBAIC0yNTYsNyArMjU2LDcgQEAKICAgICAgICAgICAgIGMudGVzdEV4Y2VwdGlvbjIoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImRpZG4ndCBnZXQgZXhjZXB0aW9uIGZvciB0ZXN0RXhjZXB0aW9uMiIpOwogICAgICAgICB9IGNhdGNoKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSBjYXVnaHQgZXhjZXB0aW9uICIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGNhdWdodCBleGNlcHRpb24gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5nZXRDbGFzcygpICsgIiAiICsgZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAKQEAgLTI2NCw3ICsyNjQsNyBAQAogICAgICAgICAgICAgYy50ZXN0RXhjZXB0aW9uMygpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiZGlkbid0IGdldCBleGNlcHRpb24gZm9yIHRlc3RFeGNlcHRpb24zIik7CiAgICAgICAgIH0gY2F0Y2goRmluZGVyRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGNhdWdodCBleGNlcHRpb24gIiArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgY2F1Z2h0IGV4Y2VwdGlvbiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmdldENsYXNzKCkgKyAiICIgKyBlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KIApAQCAtMjcyLDEwICsyNzIsMTAgQEAKICAgICAgICAgICAgIGMudGVzdEV4Y2VwdGlvbjQoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImRpZG4ndCBnZXQgZXhjZXB0aW9uIGZvciB0ZXN0RXhjZXB0aW9uNCIpOwogICAgICAgICB9IGNhdGNoKEZpbmRlckV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSBjYXVnaHQgZXhjZXB0aW9uICIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGNhdWdodCBleGNlcHRpb24gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5nZXRDbGFzcygpICsgIiAiICsgZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCisKICAgICB9CiAKICAgICBwdWJsaWMgT2JqZWN0IHRlc3RQYXNzQnlSZWYoKSB7CkBAIC0yODMsMTUgKzI4MywxNSBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEb2luZyBwYXNzIGJ5IHJlZiB0ZXN0cyBmb3Igc2xlc3NSZW1vdGUgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwgcGFzc2J5cmVmID0gdHJ1ZSIpOwogICAgICAgICAgICAgX3Rlc3RQYXNzQnlSZWYoc2xlc3NSZW1vdGUsIHRydWUpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRG9pbmcgcGFzcyBieSByZWYgdGVzdHMgZm9yIHNmdWxSZW1vdGUgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwgcGFzc2J5cmVmID0gZmFsc2UiKTsKICAgICAgICAgICAgIF90ZXN0UGFzc0J5UmVmKHNmdWxSZW1vdGUsIGZhbHNlKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRvaW5nIHBhc3MgYnkgcmVmIHRlc3RzIGZvciBibXBSZW1vdGUgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwgcGFzc2J5cmVmID0gZmFsc2UiKTsKICAgICAgICAgICAgIF90ZXN0UGFzc0J5UmVmKGJtcFJlbW90ZSwgZmFsc2UpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8vIHVuY29tbWVudCB0byBzZWUgZXhjZXB0aW9uIHRoYXQgaXMgdGhyb3duIHdoZW4gbm9uLXNlcmlhbGl6YWJsZQogICAgICAgICAgICAgLy8gb2JqZWN0IGlzIHBhc3NlZCBvdmVyIG5vbi1jb2xsb2NhdGVkIHJlbW90ZSBjYWxsCiAgICAgICAgICAgICAvL3JldHVybiBuZXcgSGVscGVyMigpOwpAQCAtMzAzLDkgKzMwMyw5IEBACiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBfdGVzdFBhc3NCeVJlZihDb21tb25SZW1vdGUgYywgYm9vbGVhbiBwYXNzQnlSZWYpIAorICAgIHByaXZhdGUgdm9pZCBfdGVzdFBhc3NCeVJlZihDb21tb25SZW1vdGUgYywgYm9vbGVhbiBwYXNzQnlSZWYpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBpbnQgaW50VmFsID0gMTsKICAgICAgICAgU3RyaW5nIHN0cmluZ1ZhbCA9ICJIZWxsb0VKQjo6X3Rlc3RQYXNzQnlSZWYiOwogCkBAIC0zMjEsNyArMzIxLDcgQEAKICAgICAgICAgaWYoIHBhc3NCeVJlZiApIHsKICAgICAgICAgICAgIGlmKCAoaDEuYSA9PSBpbnRWYWwpIHx8IGgxLmIuZXF1YWxzKHN0cmluZ1ZhbCkgKSB7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiaDEgbXV0YXRpb25zIG5vdCBwcmVzZW50ICIgKyBoMSk7Ci0gICAgICAgICAgICB9ICAgICAgICAgICAgCisgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiggKGgxLmEgIT0gaW50VmFsKSB8fCAhaDEuYi5lcXVhbHMoc3RyaW5nVmFsKSApIHsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJlcnJvciA6IGgxIHdhcyBtdXRhdGVkICIgKyBoMSk7CkBAIC0zMzgsMjMgKzMzOCwyMyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBZnRlciB0ZXN0UGFzc0J5UmVmMyA6ICIgKyBoMik7CiAgICAgICAgICAgICBpZiggKGgyLmEgPT0gaW50VmFsKSB8fCBoMi5iLmVxdWFscyhzdHJpbmdWYWwpICkgewogICAgICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImgyIG11dGF0aW9ucyBub3QgcHJlc2VudCAiICsgaDIpOwotICAgICAgICAgICAgfSAgIAorICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBjLnRlc3RQYXNzQnlSZWYzKGgyKTsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIDogRXhwZWN0ZWQgZXhjZXB0aW9uIHdoZW4gIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXJyb3IgOiBFeHBlY3RlZCBleGNlcHRpb24gd2hlbiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhc3Npbmcgbm9uLXNlcmlhbGl6YWJsZSBkYXRhICIgKyBoMik7Ci0gICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLyogRE9OJ1QgVFJFQVQgQVMgRkFUQUwgRVJST1IgV0hJTEUgV0UgSU5WRVNUSUdBVEUgV0hFVEhFUgogICAgICAgICAgICAgICAgICAqIFRISVMgV0FTIElOVEVOREVEIEJFSEFWSU9SIEZPUiBUSEUgT1JCCi0gICAgICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIkVycm9yIDogRXhwZWN0ZWQgZXhjZXB0aW9uIHdoZW4gIiArIAotICAgICAgICAgICAgICAgICAicGFzc2luZyBub24tc2VyaWFsaXphYmxlIGRhdGEgIiArIAorICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJFcnJvciA6IEV4cGVjdGVkIGV4Y2VwdGlvbiB3aGVuICIgKworICAgICAgICAgICAgICAgICAicGFzc2luZyBub24tc2VyaWFsaXphYmxlIGRhdGEgIiArCiAgICAgICAgICAgICAgICAgIGgyKTsKICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgfSBjYXRjaChFSkJFeGNlcHRpb24gZWpiZXgpIHsKICAgICAgICAgICAgICAgICB0aHJvdyBlamJleDsKICAgICAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhdWdodCBleHBlY3RlZCBleGNlcHRpb24gd2hlbiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYXVnaHQgZXhwZWN0ZWQgZXhjZXB0aW9uIHdoZW4gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgcGFzc2luZyBub24tc2VyaWFsaXphYmxlIGRhdGEiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS50b1N0cmluZygpKTsKICAgICAgICAgICAgIH0KQEAgLTM2OSwxNiArMzY5LDE2IEBACiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIEhlbHBlcjIgaDYgPSBjLnRlc3RQYXNzQnlSZWY2KCk7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFcnJvciA6IEV4cGVjdGVkIGV4Y2VwdGlvbiB3aGVuICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIDogRXhwZWN0ZWQgZXhjZXB0aW9uIHdoZW4gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmV0dXJuaW5nIG5vbi1zZXJpYWxpemFibGUgZGF0YSAiICsgaDYpOwotICAgICAgICAgICAgICAgIC8qIHNlZSBjb21tZW50IGZvciB0ZXN0UGFzc0J5UmVmMyBhYm92ZSAKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJFcnJvciA6IEV4cGVjdGVkIGV4Y2VwdGlvbiB3aGVuICIgKyAKKyAgICAgICAgICAgICAgICAvKiBzZWUgY29tbWVudCBmb3IgdGVzdFBhc3NCeVJlZjMgYWJvdmUKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJFcnJvciA6IEV4cGVjdGVkIGV4Y2VwdGlvbiB3aGVuICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJldHVybmluZyBub24tc2VyaWFsaXphYmxlIGRhdGEgIik7CiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIH0gY2F0Y2goRUpCRXhjZXB0aW9uIGVqYmV4KSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgZWpiZXg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgdGhyb3cgZWpiZXg7CiAgICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYXVnaHQgZXhwZWN0ZWQgZXhjZXB0aW9uIHdoZW4gIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2F1Z2h0IGV4cGVjdGVkIGV4Y2VwdGlvbiB3aGVuICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHJldHVybmluZyBub24tc2VyaWFsaXphYmxlIGRhdGEiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS50b1N0cmluZygpKTsKICAgICAgICAgICAgIH0KQEAgLTQxMCw1MiArNDEwLDUyIEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHdhcm11cChpbnQgdHlwZSwgYm9vbGVhbiB0eCkgewotCS8vIGdldCBIb3RzcG90IHdhcm1lZCB1cAkKLQlDb21tb24gYmVhbiA9IHByZSh0eXBlLCB0eCk7Ci0JZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7Ci0JICAgIGJlYW4ucmVxdWlyZXNOZXcoKTsKLQkgICAgYmVhbi5ub3RTdXBwb3J0ZWQoKTsKLQl9Ci0JZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7Ci0JICAgIGJlYW4ucmVxdWlyZWQoKTsKLQkgICAgaWYgKCB0eCApCi0JCWJlYW4ubWFuZGF0b3J5KCk7Ci0JICAgIGVsc2UKLQkJYmVhbi5uZXZlcigpOwotCSAgICBiZWFuLnN1cHBvcnRzKCk7Ci0JfQotCWlmICggdHggKSB0cnkgeyB1dC5jb21taXQoKTsgfSBjYXRjaCAoIEV4Y2VwdGlvbiBleCApIHt9CisgICAgLy8gZ2V0IEhvdHNwb3Qgd2FybWVkIHVwCisgICAgQ29tbW9uIGJlYW4gPSBwcmUodHlwZSwgdHgpOworICAgIGZvciAoIGludCBpPTA7IGk8SVRFUkFUSU9OUzsgaSsrICkgeworICAgICAgICBiZWFuLnJlcXVpcmVzTmV3KCk7CisgICAgICAgIGJlYW4ubm90U3VwcG9ydGVkKCk7CisgICAgfQorICAgIGZvciAoIGludCBpPTA7IGk8SVRFUkFUSU9OUzsgaSsrICkgeworICAgICAgICBiZWFuLnJlcXVpcmVkKCk7CisgICAgICAgIGlmICggdHggKQorICAgICAgICBiZWFuLm1hbmRhdG9yeSgpOworICAgICAgICBlbHNlCisgICAgICAgIGJlYW4ubmV2ZXIoKTsKKyAgICAgICAgYmVhbi5zdXBwb3J0cygpOworICAgIH0KKyAgICBpZiAoIHR4ICkgdHJ5IHsgdXQuY29tbWl0KCk7IH0gY2F0Y2ggKCBFeGNlcHRpb24gZXggKSB7fQogICAgIH0KIAotICAgIHByaXZhdGUgQ29tbW9uIHByZShpbnQgdHlwZSwgYm9vbGVhbiB0eCkgCisgICAgcHJpdmF0ZSBDb21tb24gcHJlKGludCB0eXBlLCBib29sZWFuIHR4KQogICAgIHsKLQlpZiAoIHR4ICkgdHJ5IHsgdXQuYmVnaW4oKTsgfSBjYXRjaCAoIEV4Y2VwdGlvbiBleCApIHt9Ci0JaWYgKCB0eXBlID09IENvbW1vbi5TVEFURUxFU1MgKQotCSAgICByZXR1cm4gc2xlc3M7Ci0JZWxzZSBpZiAoIHR5cGUgPT0gQ29tbW9uLlNUQVRFRlVMICkKLQkgICAgcmV0dXJuIHNmdWw7Ci0JZWxzZQotCSAgICByZXR1cm4gYm1wOworICAgIGlmICggdHggKSB0cnkgeyB1dC5iZWdpbigpOyB9IGNhdGNoICggRXhjZXB0aW9uIGV4ICkge30KKyAgICBpZiAoIHR5cGUgPT0gQ29tbW9uLlNUQVRFTEVTUyApCisgICAgICAgIHJldHVybiBzbGVzczsKKyAgICBlbHNlIGlmICggdHlwZSA9PSBDb21tb24uU1RBVEVGVUwgKQorICAgICAgICByZXR1cm4gc2Z1bDsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBibXA7CiAgICAgfQogCi0gICAgcHJpdmF0ZSBDb21tb25SZW1vdGUgcHJlUmVtb3RlKGludCB0eXBlLCBib29sZWFuIHR4KSAKLSAgICB7ICAgICAgIAotCWlmICggdHlwZSA9PSBDb21tb24uU1RBVEVMRVNTICkKLQkgICAgcmV0dXJuIHNsZXNzUmVtb3RlOwotCWVsc2UgaWYgKCB0eXBlID09IENvbW1vbi5TVEFURUZVTCApCi0JICAgIHJldHVybiBzZnVsUmVtb3RlOwotCWVsc2UKLQkgICAgcmV0dXJuIGJtcFJlbW90ZTsKKyAgICBwcml2YXRlIENvbW1vblJlbW90ZSBwcmVSZW1vdGUoaW50IHR5cGUsIGJvb2xlYW4gdHgpCisgICAgeworICAgIGlmICggdHlwZSA9PSBDb21tb24uU1RBVEVMRVNTICkKKyAgICAgICAgcmV0dXJuIHNsZXNzUmVtb3RlOworICAgIGVsc2UgaWYgKCB0eXBlID09IENvbW1vbi5TVEFURUZVTCApCisgICAgICAgIHJldHVybiBzZnVsUmVtb3RlOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGJtcFJlbW90ZTsKICAgICB9CiAKIAogICAgIHByaXZhdGUgZmxvYXQgcG9zdChsb25nIGJlZ2luLCBsb25nIGVuZCwgYm9vbGVhbiB0eCkKICAgICB7Ci0JaWYgKCB0eCApIHRyeSB7IHV0LmNvbW1pdCgpOyB9IGNhdGNoICggRXhjZXB0aW9uIGV4ICkge30KLQlyZXR1cm4gKGZsb2F0KSggKChkb3VibGUpKGVuZC1iZWdpbi1vdmVyaGVhZCkpLygoZG91YmxlKUlURVJBVElPTlMpICogMTAwMC4wICk7CisgICAgaWYgKCB0eCApIHRyeSB7IHV0LmNvbW1pdCgpOyB9IGNhdGNoICggRXhjZXB0aW9uIGV4ICkge30KKyAgICByZXR1cm4gKGZsb2F0KSggKChkb3VibGUpKGVuZC1iZWdpbi1vdmVyaGVhZCkpLygoZG91YmxlKUlURVJBVElPTlMpICogMTAwMC4wICk7CiAgICAgfQogCi0gICAgcHVibGljIGZsb2F0IHJlcXVpcmVzTmV3KGludCB0eXBlLCBib29sZWFuIHR4KSAKKyAgICBwdWJsaWMgZmxvYXQgcmVxdWlyZXNOZXcoaW50IHR5cGUsIGJvb2xlYW4gdHgpCiAgICAgewogICAgICAgICBsb25nIGJlZ2luID0gMDsKICAgICAgICAgbG9uZyBlbmQgPSAwOwpAQCAtNDc3LDcgKzQ3Nyw3IEBACiAgICAgICAgIHJldHVybiBwb3N0KGJlZ2luLCBlbmQsIHR4KTsKICAgICB9CiAKLSAgICBwdWJsaWMgZmxvYXQgbm90U3VwcG9ydGVkKGludCB0eXBlLCBib29sZWFuIHR4KSAKKyAgICBwdWJsaWMgZmxvYXQgbm90U3VwcG9ydGVkKGludCB0eXBlLCBib29sZWFuIHR4KQogICAgIHsKICAgICAgICAgbG9uZyBiZWdpbiA9IDA7CiAgICAgICAgIGxvbmcgZW5kID0gMDsKQEAgLTQ5NSwxMSArNDk1LDExIEBACiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwotICAgICAgICB9IAotCXJldHVybiBwb3N0KGJlZ2luLCBlbmQsIHR4KTsKKyAgICAgICAgfQorICAgIHJldHVybiBwb3N0KGJlZ2luLCBlbmQsIHR4KTsKICAgICB9CiAKLSAgICBwdWJsaWMgZmxvYXQgcmVxdWlyZWQoaW50IHR5cGUsIGJvb2xlYW4gdHgpIAorICAgIHB1YmxpYyBmbG9hdCByZXF1aXJlZChpbnQgdHlwZSwgYm9vbGVhbiB0eCkKICAgICB7CiAgICAgICAgIGxvbmcgYmVnaW4gPSAwOwogICAgICAgICBsb25nIGVuZCA9IDA7CkBAIC01MTMsMjMgKzUxMywyMyBAQAogICAgICAgICAgICAgZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7CiAgICAgICAgICAgICAgICAgYmVhblJlbW90ZS5yZXF1aXJlZCgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGVuZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlKTsKICAgICAgICAgfQotCXJldHVybiBwb3N0KGJlZ2luLCBlbmQsIHR4KTsKKyAgICByZXR1cm4gcG9zdChiZWdpbiwgZW5kLCB0eCk7CiAgICAgfQogCi0gICAgcHVibGljIGZsb2F0IG1hbmRhdG9yeShpbnQgdHlwZSwgYm9vbGVhbiB0eCkgCisgICAgcHVibGljIGZsb2F0IG1hbmRhdG9yeShpbnQgdHlwZSwgYm9vbGVhbiB0eCkKICAgICB7CiAgICAgICAgIGxvbmcgYmVnaW4gPSAwOwogICAgICAgICBsb25nIGVuZCA9IDA7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb21tb24gYmVhbiA9IHByZSh0eXBlLCB0eCk7CiAgICAgICAgICAgICBDb21tb25SZW1vdGUgYmVhblJlbW90ZSA9IHByZVJlbW90ZSh0eXBlLCB0eCk7Ci0gICAgICAgICAgICBiZWdpbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOyAgICAgICAgICAgIAorICAgICAgICAgICAgYmVnaW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKICAgICAgICAgICAgIGZvciAoIGludCBpPTA7IGk8SVRFUkFUSU9OUzsgaSsrICkgewogICAgICAgICAgICAgICAgIGJlYW4ubWFuZGF0b3J5KCk7CiAgICAgICAgICAgICB9CkBAIC01NDEsNyArNTQxLDcgQEAKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwogICAgICAgICB9Ci0JcmV0dXJuIHBvc3QoYmVnaW4sIGVuZCwgdHgpOworICAgIHJldHVybiBwb3N0KGJlZ2luLCBlbmQsIHR4KTsKICAgICB9CiAKICAgICBwdWJsaWMgZmxvYXQgbmV2ZXIoaW50IHR5cGUsIGJvb2xlYW4gdHgpCkBAIC01NjMsMTAgKzU2MywxMCBAQAogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7CiAgICAgICAgIH0KLQlyZXR1cm4gcG9zdChiZWdpbiwgZW5kLCB0eCk7CisgICAgcmV0dXJuIHBvc3QoYmVnaW4sIGVuZCwgdHgpOwogICAgIH0KIAotICAgIHB1YmxpYyBmbG9hdCBzdXBwb3J0cyhpbnQgdHlwZSwgYm9vbGVhbiB0eCkgCisgICAgcHVibGljIGZsb2F0IHN1cHBvcnRzKGludCB0eXBlLCBib29sZWFuIHR4KQogICAgIHsKICAgICAgICAgbG9uZyBiZWdpbiA9IDA7CiAgICAgICAgIGxvbmcgZW5kID0gMDsKQEAgLTU4NSw3ICs1ODUsNyBAQAogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7CiAgICAgICAgIH0KLQlyZXR1cm4gcG9zdChiZWdpbiwgZW5kLCB0eCk7CisgICAgcmV0dXJuIHBvc3QoYmVnaW4sIGVuZCwgdHgpOwogICAgIH0KIAogICAgIC8vIGFzc3VtZXMgbG8xIGFuZCBsbzIgYXJlIGRvIG5vdCBoYXZlIHNhbWUgY2xpZW50IGlkZW50aXR5CkBAIC02MjksMTEgKzYyOSwxMSBAQAogICAgICAgICBpZiggbzEuaXNJZGVudGljYWwobzIpICkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiaXNJZGVudGljYWwgZmFpbGVkIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYoIG8yLmlzSWRlbnRpY2FsKG8xKSApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImlzSWRlbnRpY2FsIGZhaWxlZCIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmKCAhbzEuaXNJZGVudGljYWwobzEpICkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiaXNJZGVudGljYWwgZmFpbGVkIik7CiAgICAgICAgIH0KQEAgLTY4NiwxMiArNjg2LDEyIEBACiAgICAgICAgIH0KIAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm8xLmhhc2hDb2RlKCkgPSAiICsgbzEuaGFzaENvZGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm8yLmhhc2hDb2RlKCkgPSAiICsgbzIuaGFzaENvZGUoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibzEudG9TdHJpbmcoKSA9ICIgKyBvMS50b1N0cmluZygpKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvMi50b1N0cmluZygpID0gIiArIG8yLnRvU3RyaW5nKCkpOwotICAgICAgICAKKwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvY29yZS9lamIvU2Z1bEVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvY29yZS9lamIvU2Z1bEVKQi5qYXZhCmluZGV4IDE1MjBjMDYuLjMxMjljOTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2NvcmUvZWpiL1NmdWxFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9jb3JlL2VqYi9TZnVsRUpCLmphdmEKQEAgLTUwLDE1ICs1MCwxNSBAQAogICAgIH0KIAogICAgIEBQcmVEZXN0cm95Ci0gICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgCi0gICAgeyAKKyAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKQorICAgIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTZnVsRUpCLmVqYlJlbW92ZSgpLiBhYm91dCB0byB0aHJvdyBleGNlcHRpb24iKTsKICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oInRlc3QgY2xlYW51cCBmb3IgY2FzZSB3aGVyZSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVqYlJlbW92ZSB0aHJvd3MgYW4gZXhjZXB0aW9uIik7CiAgICAgfQogCiAgICAgQFByZVBhc3NpdmF0ZQotICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgCisgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKQogICAgIHt9CiAKICAgICBAUG9zdEFjdGl2YXRlCkBAIC0xMTUsNyArMTE1LDcgQEAKICAgICAgICAgSGVscGVyMiBoMiA9IG5ldyBIZWxwZXIyKCk7CiAgICAgICAgIGgyLmEgPSAxOwogICAgICAgICBoMi5iID0gIlNmdWxFSkI6OnRlc3RQYXNzQnlSZWY2IjsKLSAgICAgICAgcmV0dXJuIGgyOyAgICAKKyAgICAgICAgcmV0dXJuIGgyOwogICAgIH0KIAogICAgIHB1YmxpYyBDb21tb25SZW1vdGUgdGVzdFBhc3NCeVJlZjcoKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9jb3JlL2VqYi9TbGVzc0VKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvY29yZS9lamIvU2xlc3NFSkIuamF2YQppbmRleCAzMDNhYmY1Li4zZmFmY2UzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9jb3JlL2VqYi9TbGVzc0VKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2NvcmUvZWpiL1NsZXNzRUpCLmphdmEKQEAgLTQwLDEwICs0MCwxMCBAQAogICAgICAgICBzY18gPSBzYzsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSAKKyAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKQogICAgIHt9CiAKLSAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIAorICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkKICAgICB7fQogCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkKQEAgLTcwLDcgKzcwLDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB0ZXN0UGFzc0J5UmVmMShpbnQgYSkgewotICAgICAgICAKKwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHRlc3RQYXNzQnlSZWYyKEhlbHBlcjEgaGVscGVyMSkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvZXhjZXB0aW9ucy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvZXhjZXB0aW9ucy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDg0ODc5NTYuLjBhZWM4NGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2V4Y2VwdGlvbnMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9leGNlcHRpb25zL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIyICsxNSwyMiBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMwLWNsaWVudHZpZXctZXhjZXB0aW9ucyIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9InNlLmNsaWVudCIgdmFsdWU9ImNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuY2xpZW50dmlldy5leGNlcHRpb25zLmNsaWVudC5DbGllbnQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2V4Y2VwdGlvbnMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvZXhjZXB0aW9ucy9idWlsZC54bWwKaW5kZXggMDZhYmI1My4uNWJiYWQwMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvZXhjZXB0aW9ucy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvZXhjZXB0aW9ucy9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDE0ICs0NiwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovSGVsbG8qLmNsYXNzLCoqL1NmdWwqLmNsYXNzLCoqL1NsZXNzKi5jbGFzcywqKi8qRXhjZXB0aW9uLmNsYXNzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudCouY2xhc3MsKiovSGVsbG8uY2xhc3MsKiovUypCdXNpbmVzcyouY2xhc3MsKiovKkV4Y2VwdGlvbi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYzLDE3ICs2MywxNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW5fc2UiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgIDxqYXZhICBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9IiR7c2UuY2xpZW50fSI+CiAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke29yYi5wb3J0fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2V4Y2VwdGlvbnMvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvZXhjZXB0aW9ucy9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggOGNkNzExNC4uNmViNzEwMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvZXhjZXB0aW9ucy9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvZXhjZXB0aW9ucy9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI3LDEyICsyNywxMiBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBARUpCIHN0YXRpYyBwcml2YXRlIEhlbGxvIGhyOwogCi0gICAgQEVKQiBzdGF0aWMgcHJvdGVjdGVkIFNsZXNzUmVtb3RlQnVzaW5lc3MyIHNsZXNzUmVtb3RlQnVzaW5lc3MyOyAgICAKKyAgICBARUpCIHN0YXRpYyBwcm90ZWN0ZWQgU2xlc3NSZW1vdGVCdXNpbmVzczIgc2xlc3NSZW1vdGVCdXNpbmVzczI7CiAgICAgQEVKQiBzdGF0aWMgcHVibGljIFNmdWxSZW1vdGVCdXNpbmVzczIgc2Z1bFJlbW90ZUJ1c2luZXNzMjsKIAogICAgIEBFSkIgc3RhdGljIHB1YmxpYyBTbGVzc1JlbW90ZUJ1c2luZXNzIHNsZXNzUmVtb3RlQnVzaW5lc3M7CkBAIC00NCwyOCArNDQsMjggQEAKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImVqYi1lamIzMC1jbGllbnR2aWV3LWV4Y2VwdGlvbnNJRCIpOwotICAgIH0gIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAKICAgICAgICAgdHJ5IHsKIAotCSAgICBpZiggaHIgPT0gbnVsbCApIHsKKyAgICAgICAgaWYoIGhyID09IG51bGwgKSB7CiAKLQkJU3lzdGVtLm91dC5wcmludGxuKCJJbiBzdGFuZC1hbG9uZSBtb2RlIik7Ci0JCUluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JCWhyID0gKEhlbGxvKSBpYy5sb29rdXAoImVqYi9lamJfZWpiMzBfY2xpZW50dmlld19leGNlcHRpb25zX0hlbGxvIik7Ci0JCXNmdWxSZW1vdGVCdXNpbmVzczIgPSAoU2Z1bFJlbW90ZUJ1c2luZXNzMikgaWMubG9va3VwKCJlamIvZWpiX2VqYjMwX2NsaWVudHZpZXdfZXhjZXB0aW9uc19TZnVsI2NvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuY2xpZW50dmlldy5leGNlcHRpb25zLlNmdWxSZW1vdGVCdXNpbmVzczIiKTsKLQkJc2xlc3NSZW1vdGVCdXNpbmVzczIgPSAoU2xlc3NSZW1vdGVCdXNpbmVzczIpIGljLmxvb2t1cCgiZWpiL2VqYl9lamIzMF9jbGllbnR2aWV3X2V4Y2VwdGlvbnNfU2xlc3MjY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5jbGllbnR2aWV3LmV4Y2VwdGlvbnMuU2xlc3NSZW1vdGVCdXNpbmVzczIiKTsKLQkJc2Z1bFJlbW90ZUJ1c2luZXNzID0gKFNmdWxSZW1vdGVCdXNpbmVzcykgaWMubG9va3VwKCJlamIvZWpiX2VqYjMwX2NsaWVudHZpZXdfZXhjZXB0aW9uc19TZnVsI2NvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuY2xpZW50dmlldy5leGNlcHRpb25zLlNmdWxSZW1vdGVCdXNpbmVzcyIpOwotCQlzbGVzc1JlbW90ZUJ1c2luZXNzID0gKFNsZXNzUmVtb3RlQnVzaW5lc3MpIGljLmxvb2t1cCgiZWpiL2VqYl9lamIzMF9jbGllbnR2aWV3X2V4Y2VwdGlvbnNfU2xlc3MjY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5jbGllbnR2aWV3LmV4Y2VwdGlvbnMuU2xlc3NSZW1vdGVCdXNpbmVzcyIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIHN0YW5kLWFsb25lIG1vZGUiKTsKKyAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgaHIgPSAoSGVsbG8pIGljLmxvb2t1cCgiZWpiL2VqYl9lamIzMF9jbGllbnR2aWV3X2V4Y2VwdGlvbnNfSGVsbG8iKTsKKyAgICAgICAgc2Z1bFJlbW90ZUJ1c2luZXNzMiA9IChTZnVsUmVtb3RlQnVzaW5lc3MyKSBpYy5sb29rdXAoImVqYi9lamJfZWpiMzBfY2xpZW50dmlld19leGNlcHRpb25zX1NmdWwjY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5jbGllbnR2aWV3LmV4Y2VwdGlvbnMuU2Z1bFJlbW90ZUJ1c2luZXNzMiIpOworICAgICAgICBzbGVzc1JlbW90ZUJ1c2luZXNzMiA9IChTbGVzc1JlbW90ZUJ1c2luZXNzMikgaWMubG9va3VwKCJlamIvZWpiX2VqYjMwX2NsaWVudHZpZXdfZXhjZXB0aW9uc19TbGVzcyNjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmNsaWVudHZpZXcuZXhjZXB0aW9ucy5TbGVzc1JlbW90ZUJ1c2luZXNzMiIpOworICAgICAgICBzZnVsUmVtb3RlQnVzaW5lc3MgPSAoU2Z1bFJlbW90ZUJ1c2luZXNzKSBpYy5sb29rdXAoImVqYi9lamJfZWpiMzBfY2xpZW50dmlld19leGNlcHRpb25zX1NmdWwjY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5jbGllbnR2aWV3LmV4Y2VwdGlvbnMuU2Z1bFJlbW90ZUJ1c2luZXNzIik7CisgICAgICAgIHNsZXNzUmVtb3RlQnVzaW5lc3MgPSAoU2xlc3NSZW1vdGVCdXNpbmVzcykgaWMubG9va3VwKCJlamIvZWpiX2VqYjMwX2NsaWVudHZpZXdfZXhjZXB0aW9uc19TbGVzcyNjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmNsaWVudHZpZXcuZXhjZXB0aW9ucy5TbGVzc1JlbW90ZUJ1c2luZXNzIik7CiAKLQkgICAgfQorICAgICAgICB9CiAKLQkgICAgLy8gVE9ETyBlbmFibGUgd2hlbiAgICAgICAgICAgICBoci5ydW5BY2Nlc3NEZW5pZWRFeGNlcHRpb25UZXN0KCk7CisgICAgICAgIC8vIFRPRE8gZW5hYmxlIHdoZW4gICAgICAgICAgICAgaHIucnVuQWNjZXNzRGVuaWVkRXhjZXB0aW9uVGVzdCgpOwogCiAgICAgICAgICAgICBoci5ydW5UeFJlcXVpcmVkVGVzdCgpOwogCkBAIC04OCw3ICs4OCw3IEBACiAKICAgICAgICAgcnVuQ29uY3VycmVudEFjY2Vzc1Rlc3QoKTsKIAotICAgIAlyZXR1cm47CisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgcnVuVHhSZXF1aXJlZFRlc3QoKSB7CkBAIC05OSwzMCArOTksMzAgQEAKICAgICAgICAgICAgIHNmdWxSZW1vdGVCdXNpbmVzcy5mb3JjZVRyYW5zYWN0aW9uUmVxdWlyZWRFeGNlcHRpb24oKTsKICAgICAgICAgfSBjYXRjaChFSkJUcmFuc2FjdGlvblJlcXVpcmVkRXhjZXB0aW9uIHR4cmUpIHsKICAgICAgICAgICAgIG51bUV4Kys7Ci0gICAgICAgIH0gCi0gICAgICAgIAorICAgICAgICB9CisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHNsZXNzUmVtb3RlQnVzaW5lc3MuZm9yY2VUcmFuc2FjdGlvblJlcXVpcmVkRXhjZXB0aW9uKCk7CiAgICAgICAgIH0gY2F0Y2goRUpCVHJhbnNhY3Rpb25SZXF1aXJlZEV4Y2VwdGlvbiB0eHJlKSB7Ci0gICAgICAgICAgICBudW1FeCsrOyAgICAgICAgICAgIAotICAgICAgICB9IAorICAgICAgICAgICAgbnVtRXgrKzsKKyAgICAgICAgfQogCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzZnVsUmVtb3RlQnVzaW5lc3MyLmZvcmNlVHJhbnNhY3Rpb25SZXF1aXJlZEV4Y2VwdGlvbigpOwogICAgICAgICB9IGNhdGNoKFRyYW5zYWN0aW9uUmVxdWlyZWRFeGNlcHRpb24gdHhyZSkgewogICAgICAgICAgICAgbnVtRXgrKzsKICAgICAgICAgfSBjYXRjaChSZW1vdGVFeGNlcHRpb24gZSkge30KLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHNsZXNzUmVtb3RlQnVzaW5lc3MyLmZvcmNlVHJhbnNhY3Rpb25SZXF1aXJlZEV4Y2VwdGlvbigpOwogICAgICAgICB9IGNhdGNoKFRyYW5zYWN0aW9uUmVxdWlyZWRFeGNlcHRpb24gdHhyZSkgewogICAgICAgICAgICAgbnVtRXgrKzsKICAgICAgICAgfSBjYXRjaChSZW1vdGVFeGNlcHRpb24gZSkge30KLSAgICAgICAgCisKICAgICAgICAgaWYoIG51bUV4ICE9IDQgKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiRGlkbid0IHJlY2VpdmUgYWxsIGV4cGVjdGVkICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbnMgOiAiICsgbnVtRXgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUEFTUyA6IHJ1blR4UmVxdWlyZWRUZXN0Iik7CiAgICAgICAgIH0KQEAgLTEzMSw3NSArMTMxLDc1IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgcnVuQ29uY3VycmVudEFjY2Vzc1Rlc3QoKSB7Ci0JICAgIHRyeSB7Ci0JCU15VGhyZWFkIHRocmVhZCA9IG5ldyBNeVRocmVhZChzZnVsUmVtb3RlQnVzaW5lc3MpOwotCQl0aHJlYWQuc3RhcnQoKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgTXlUaHJlYWQgdGhyZWFkID0gbmV3IE15VGhyZWFkKHNmdWxSZW1vdGVCdXNpbmVzcyk7CisgICAgICAgIHRocmVhZC5zdGFydCgpOwogCi0JCXNsZWVwRm9yKDUpOwotCQlzZnVsUmVtb3RlQnVzaW5lc3MucGluZygpOwotCQlzdGF0LmFkZFN0YXR1cygibG9jYWwgY29uY3VycmVudEFjY2Vzc1sxLjFdIiwgc3RhdC5GQUlMKTsKLQkgICAgfSBjYXRjaCAoamFrYXJ0YS5lamIuQ29uY3VycmVudEFjY2Vzc0V4Y2VwdGlvbiBjb25FeCkgewotCQlzdGF0LmFkZFN0YXR1cygibG9jYWwgY29uY3VycmVudEFjY2Vzc1sxLjFdIiwgc3RhdC5QQVNTKTsKLQkgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHRoKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQXJnZ2dnZ2c6IEdvdDogIiArIHRoKTsKLQkJc3RhdC5hZGRTdGF0dXMoImxvY2FsIGNvbmN1cnJlbnRBY2Nlc3NbMS4yXSIsIHN0YXQuRkFJTCk7Ci0JICAgIH0KKyAgICAgICAgc2xlZXBGb3IoNSk7CisgICAgICAgIHNmdWxSZW1vdGVCdXNpbmVzcy5waW5nKCk7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBjb25jdXJyZW50QWNjZXNzWzEuMV0iLCBzdGF0LkZBSUwpOworICAgICAgICB9IGNhdGNoIChqYWthcnRhLmVqYi5Db25jdXJyZW50QWNjZXNzRXhjZXB0aW9uIGNvbkV4KSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBjb25jdXJyZW50QWNjZXNzWzEuMV0iLCBzdGF0LlBBU1MpOworICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdGgpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBcmdnZ2dnZzogR290OiAiICsgdGgpOworICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgY29uY3VycmVudEFjY2Vzc1sxLjJdIiwgc3RhdC5GQUlMKTsKKyAgICAgICAgfQogCi0JICAgIHRyeSB7Ci0JCU15VGhyZWFkMiB0aHJlYWQgPSBuZXcgTXlUaHJlYWQyKHNmdWxSZW1vdGVCdXNpbmVzczIpOwotCQl0aHJlYWQuc3RhcnQoKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgTXlUaHJlYWQyIHRocmVhZCA9IG5ldyBNeVRocmVhZDIoc2Z1bFJlbW90ZUJ1c2luZXNzMik7CisgICAgICAgIHRocmVhZC5zdGFydCgpOwogCi0JCXNsZWVwRm9yKDUpOwotCQlzZnVsUmVtb3RlQnVzaW5lc3MyLnBpbmdSZW1vdGUoKTsKLQkJc3RhdC5hZGRTdGF0dXMoImxvY2FsIGNvbmN1cnJlbnRBY2Nlc3NbMi4xXSIsIHN0YXQuRkFJTCk7Ci0JICAgIH0gY2F0Y2ggKGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbiByZW1FeCkgewotCQlzdGF0LmFkZFN0YXR1cygibG9jYWwgY29uY3VycmVudEFjY2Vzc1syLjFdIiwgc3RhdC5QQVNTKTsKLQkgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHRoKSB7Ci0JCXN0YXQuYWRkU3RhdHVzKCJsb2NhbCBjb25jdXJyZW50QWNjZXNzWzIuMl0gR290OiAiICsgdGgsIHN0YXQuRkFJTCk7Ci0JICAgIH0KKyAgICAgICAgc2xlZXBGb3IoNSk7CisgICAgICAgIHNmdWxSZW1vdGVCdXNpbmVzczIucGluZ1JlbW90ZSgpOworICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgY29uY3VycmVudEFjY2Vzc1syLjFdIiwgc3RhdC5GQUlMKTsKKyAgICAgICAgfSBjYXRjaCAoamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uIHJlbUV4KSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBjb25jdXJyZW50QWNjZXNzWzIuMV0iLCBzdGF0LlBBU1MpOworICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdGgpIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIGNvbmN1cnJlbnRBY2Nlc3NbMi4yXSBHb3Q6ICIgKyB0aCwgc3RhdC5GQUlMKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGNsYXNzIE15VGhyZWFkIGV4dGVuZHMgVGhyZWFkIHsKLQlTZnVsUmVtb3RlQnVzaW5lc3Mgc2Z1bEJ1c2luZXNzOworICAgIFNmdWxSZW1vdGVCdXNpbmVzcyBzZnVsQnVzaW5lc3M7CiAKLQlNeVRocmVhZChTZnVsUmVtb3RlQnVzaW5lc3Mgc2Z1bEJ1c2luZXNzKSB7Ci0JICAgIHRoaXMuc2Z1bEJ1c2luZXNzID0gc2Z1bEJ1c2luZXNzOwotCX0KKyAgICBNeVRocmVhZChTZnVsUmVtb3RlQnVzaW5lc3Mgc2Z1bEJ1c2luZXNzKSB7CisgICAgICAgIHRoaXMuc2Z1bEJ1c2luZXNzID0gc2Z1bEJ1c2luZXNzOworICAgIH0KIAotCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkgICAgdHJ5IHsKLQkJc2Z1bEJ1c2luZXNzLnNsZWVwRm9yKDIwKTsKLQkgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHRoKSB7Ci0JCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJDb3VsZCBub3QgaW52b2tlIHdhaXRmb3IoKSBtZXRob2QiKTsKLQkgICAgfQotCX0KKyAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgIHNmdWxCdXNpbmVzcy5zbGVlcEZvcigyMCk7CisgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0aCkgeworICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiQ291bGQgbm90IGludm9rZSB3YWl0Zm9yKCkgbWV0aG9kIik7CisgICAgICAgIH0KKyAgICB9CiAgICAgfQogCiAKICAgICBjbGFzcyBNeVRocmVhZDIgZXh0ZW5kcyBUaHJlYWQgewotCVNmdWxSZW1vdGVCdXNpbmVzczIgc2Z1bEJ1c2luZXNzMjsKKyAgICBTZnVsUmVtb3RlQnVzaW5lc3MyIHNmdWxCdXNpbmVzczI7CiAKLQlNeVRocmVhZDIoU2Z1bFJlbW90ZUJ1c2luZXNzMiBzZnVsQnVzaW5lc3MyKSB7Ci0JICAgIHRoaXMuc2Z1bEJ1c2luZXNzMiA9IHNmdWxCdXNpbmVzczI7Ci0JfQorICAgIE15VGhyZWFkMihTZnVsUmVtb3RlQnVzaW5lc3MyIHNmdWxCdXNpbmVzczIpIHsKKyAgICAgICAgdGhpcy5zZnVsQnVzaW5lc3MyID0gc2Z1bEJ1c2luZXNzMjsKKyAgICB9CiAKLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JICAgIHRyeSB7Ci0JCXNmdWxCdXNpbmVzczIuc2xlZXBGb3IoMjApOwotCSAgICB9IGNhdGNoIChUaHJvd2FibGUgdGgpIHsKLQkJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkNvdWxkIG5vdCBpbnZva2Ugd2FpdGZvcigpIG1ldGhvZCIpOwotCSAgICB9Ci0JfQorICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgc2Z1bEJ1c2luZXNzMi5zbGVlcEZvcigyMCk7CisgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0aCkgeworICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiQ291bGQgbm90IGludm9rZSB3YWl0Zm9yKCkgbWV0aG9kIik7CisgICAgICAgIH0KKyAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHNsZWVwRm9yKGludCBzZWMpIHsKLQl0cnkgewotCSAgICBmb3IgKGludCBpPTAgOyBpPHNlYzsgaSsrKSB7Ci0JCVRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoMTAwMCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiWyIgKyBpICsgIi8iICsgc2VjICsgIl06IFNsZWVwaW5nLi4uLiIpOwotCSAgICB9Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JfQorICAgIHRyeSB7CisgICAgICAgIGZvciAoaW50IGk9MCA7IGk8c2VjOyBpKyspIHsKKyAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCgxMDAwKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbIiArIGkgKyAiLyIgKyBzZWMgKyAiXTogU2xlZXBpbmcuLi4uIik7CisgICAgICAgIH0KKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICB9CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9leGNlcHRpb25zL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvZXhjZXB0aW9ucy9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAppbmRleCA3NTMxYjU1Li5lOWNiNGI5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9leGNlcHRpb25zL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2V4Y2VwdGlvbnMvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKQEAgLTI1LDcgKzI1LDcgQEAKICAgICAgIDxqbmRpLW5hbWU+ZWpiL2VqYl9lamIzMF9jbGllbnR2aWV3X2V4Y2VwdGlvbnNfSGVsbG88L2puZGktbmFtZT4KICAgICAgIDxiZWFuLWNhY2hlPgogICAgICAgICAgPG1heC1jYWNoZS1zaXplPjQ8L21heC1jYWNoZS1zaXplPgotCSA8cmVzaXplLXF1YW50aXR5PjE8L3Jlc2l6ZS1xdWFudGl0eT4KKyAgICAgPHJlc2l6ZS1xdWFudGl0eT4xPC9yZXNpemUtcXVhbnRpdHk+CiAgICAgICAgICA8Y2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+NTwvY2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+CiAgICAgICA8L2JlYW4tY2FjaGU+CiAgICAgPC9lamI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9leGNlcHRpb25zL2VqYi9IZWxsb0VKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvZXhjZXB0aW9ucy9lamIvSGVsbG9FSkIuamF2YQppbmRleCAzNzA3ZDNhLi4wYzZjOWYxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9leGNlcHRpb25zL2VqYi9IZWxsb0VKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2V4Y2VwdGlvbnMvZWpiL0hlbGxvRUpCLmphdmEKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICBARUpCKG5hbWU9InNmdWxCdXNpbmVzcyIpIHB1YmxpYyBTZnVsQnVzaW5lc3Mgc2Z1bEJ1c2luZXNzOwogICAgIEBFSkIobmFtZT0ic2xlc3NCdXNpbmVzcyIpIHB1YmxpYyBTbGVzc0J1c2luZXNzIHNsZXNzQnVzaW5lc3M7CiAKLSAgICBARUpCKG5hbWU9InNsZXNzUmVtb3RlQnVzaW5lc3MyIikgcHJvdGVjdGVkIFNsZXNzUmVtb3RlQnVzaW5lc3MyIHNsZXNzUmVtb3RlQnVzaW5lc3MyOyAgICAKKyAgICBARUpCKG5hbWU9InNsZXNzUmVtb3RlQnVzaW5lc3MyIikgcHJvdGVjdGVkIFNsZXNzUmVtb3RlQnVzaW5lc3MyIHNsZXNzUmVtb3RlQnVzaW5lc3MyOwogICAgIEBFSkIobmFtZT0ic2Z1bFJlbW90ZUJ1c2luZXNzMiIpIHB1YmxpYyBTZnVsUmVtb3RlQnVzaW5lc3MyIHNmdWxSZW1vdGVCdXNpbmVzczI7CiAKICAgICBARUpCIHB1YmxpYyBTbGVzc1JlbW90ZUJ1c2luZXNzIHNsZXNzUmVtb3RlQnVzaW5lc3M7CkBAIC01NywxMiArNTcsMTIgQEAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHB1YmxpYyB2b2lkIGNyZWF0ZSgpIHsKIAotCXRyeSB7CisgICAgdHJ5IHsKICAgICAgICAgICAgIHV0ID0gY29udGV4dC5nZXRVc2VyVHJhbnNhY3Rpb24oKTsKLSAgICAgICAgICAgIAotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCSAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBzZXR1cCgpIHsKQEAgLTc0LDEwICs3NCwxMCBAQAogCiAgICAgICAgICAgICBzZnVsUmVtb3RlQnVzaW5lc3MgPSAoU2Z1bFJlbW90ZUJ1c2luZXNzKSBjb250ZXh0Lmxvb2t1cCgiY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5jbGllbnR2aWV3LmV4Y2VwdGlvbnMuSGVsbG9FSkIvc2Z1bFJlbW90ZUJ1c2luZXNzIik7CiAgICAgICAgICAgICBzbGVzc1JlbW90ZUJ1c2luZXNzID0gKFNsZXNzUmVtb3RlQnVzaW5lc3MpICBjb250ZXh0Lmxvb2t1cCgiY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5jbGllbnR2aWV3LmV4Y2VwdGlvbnMuSGVsbG9FSkIvc2xlc3NSZW1vdGVCdXNpbmVzcyIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHNmdWxSZW1vdGVCdXNpbmVzczIgPSAoU2Z1bFJlbW90ZUJ1c2luZXNzMikgY29udGV4dC5sb29rdXAoInNmdWxSZW1vdGVCdXNpbmVzczIiKTsKICAgICAgICAgICAgIHNsZXNzUmVtb3RlQnVzaW5lc3MyID0gKFNsZXNzUmVtb3RlQnVzaW5lc3MyKSAgY29udGV4dC5sb29rdXAoInNsZXNzUmVtb3RlQnVzaW5lc3MyIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CkBAIC05NCwxMyArOTQsMTMgQEAKICAgICAgICAgfSBjYXRjaChFSkJBY2Nlc3NFeGNlcHRpb24gZWFlKSB7CiAgICAgICAgICAgICAvLyB0aGlzIG1pZ2h0IGJlIHRocm93biBieSBjb250YWluZXIgYnV0IGFwcGxpY2F0aW9uCiAgICAgICAgICAgICAvLyBjYW4ndCBkZXBlbmQgb24gcmVjZWl2aW5nIHRoZSBzdWItY2xhc3MgZXhjZXB0aW9uCi0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBzcGVjaWZpYyBlamIzMCBleGNlcHRpb24gIiArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3Qgc3BlY2lmaWMgZWpiMzAgZXhjZXB0aW9uICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhZSArICIgZm9yIHNmdWxCdXNpbmVzcy5kZW5pZWQoKSIpOwogICAgICAgICAgICAgLy8gYmVhbiBtdXN0IHN0aWxsIGV4aXN0CiAgICAgICAgICAgICBzZnVsQnVzaW5lc3MuZm9vKCk7CiAgICAgICAgICAgICBudW1FeCsrOwogICAgICAgICB9IGNhdGNoKEVKQkV4Y2VwdGlvbiBlbGUpIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IHZhbGlkIGV4Y2VwdGlvbiAiICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCB2YWxpZCBleGNlcHRpb24gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlICsgIiBmb3Igc2Z1bEJ1c2luZXNzLmRlbmllZCgpIik7CiAgICAgICAgICAgICAvLyBiZWFuIG11c3Qgc3RpbGwgZXhpc3QKICAgICAgICAgICAgIHNmdWxCdXNpbmVzcy5mb28oKTsKQEAgLTExMCw3ICsxMTAsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgc2Z1bFJlbW90ZUJ1c2luZXNzLmRlbmllZCgpOwogICAgICAgICB9IGNhdGNoKEVKQkV4Y2VwdGlvbiByZSkgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgZXhwZWN0ZWQgZXhjZXB0aW9uICIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IGV4cGVjdGVkIGV4Y2VwdGlvbiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZSArICIgZm9yIHNmdWxSZW1vdGVCdXNpbmVzcy5kZW5pZWQoKSIpOwogCiAgICAgICAgICAgICAvLyBiZWFuIG11c3Qgc3RpbGwgZXhpc3QKQEAgLTEyMSw3ICsxMjEsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgc2Z1bFJlbW90ZUJ1c2luZXNzMi5kZW5pZWQoKTsKICAgICAgICAgfSBjYXRjaChSZW1vdGVFeGNlcHRpb24gcmUpIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IGV4cGVjdGVkIGV4Y2VwdGlvbiAiICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBleHBlY3RlZCBleGNlcHRpb24gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmUgKyAiIGZvciBzZnVsQnVzaW5lc3MyLmRlbmllZCgpIik7CiAKICAgICAgICAgICAgIC8vIGJlYW4gbXVzdCBzdGlsbCBleGlzdApAQCAtMTMyLDcgKzEzMiw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzbGVzc0J1c2luZXNzLmRlbmllZCgpOwogICAgICAgICB9IGNhdGNoKEVKQkV4Y2VwdGlvbiBlbGUpIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IGV4cGVjdGVkIGV4Y2VwdGlvbiAiICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBleHBlY3RlZCBleGNlcHRpb24gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlICsgIiBmb3Igc2xlc3NCdXNpbmVzcy5kZW5pZWQoKSIpOwogCiAgICAgICAgICAgICBudW1FeCsrOwpAQCAtMTQxLDcgKzE0MSw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzbGVzc1JlbW90ZUJ1c2luZXNzLmRlbmllZCgpOwogICAgICAgICB9IGNhdGNoKEVKQkV4Y2VwdGlvbiByZSkgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgZXhwZWN0ZWQgZXhjZXB0aW9uICIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IGV4cGVjdGVkIGV4Y2VwdGlvbiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZSArICIgZm9yIHNsZXNzUmVtb3RlQnVzaW5lc3MuZGVuaWVkKCkiKTsKICAgICAgICAgICAgIG51bUV4Kys7CiAgICAgICAgIH0KQEAgLTE0OSwxNSArMTQ5LDE1IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzbGVzc1JlbW90ZUJ1c2luZXNzMi5kZW5pZWQoKTsKICAgICAgICAgfSBjYXRjaChSZW1vdGVFeGNlcHRpb24gcmUpIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IGV4cGVjdGVkIGV4Y2VwdGlvbiAiICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBleHBlY3RlZCBleGNlcHRpb24gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmUgKyAiIGZvciBzbGVzc1JlbW90ZUJ1c2luZXNzMi5kZW5pZWQoKSIpOwogICAgICAgICAgICAgbnVtRXgrKzsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiggbnVtRXggIT0gNiApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJEaWRuJ3QgcmVjZWl2ZSBhbGwgZXhwZWN0ZWQgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9ucyA6ICIgKyBudW1FeCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQQVNTIDogcnVuQWNjZXNzRGVuaWVkRXhjZXB0aW9uVGVzdCIpOwogICAgICAgICB9CkBAIC0xODAsNyArMTgwLDcgQEAKIAogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgdXQuYmVnaW4oKTsKICAgICAgICAgICAgIHV0LnNldFJvbGxiYWNrT25seSgpOwpAQCAtMTg5LDcgKzE4OSw3IEBACiAgICAgICAgICAgICB0cnkgeyB1dC5yb2xsYmFjaygpOyB9IGNhdGNoKEV4Y2VwdGlvbiB0KSB7fQogICAgICAgICAgICAgbnVtRXgrKzsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkge30KLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHV0LmJlZ2luKCk7CiAgICAgICAgICAgICB1dC5zZXRSb2xsYmFja09ubHkoKTsKQEAgLTE5OCwxNCArMTk4LDE0IEBACiAgICAgICAgICAgICB0cnkgeyB1dC5yb2xsYmFjaygpOyB9IGNhdGNoKEV4Y2VwdGlvbiB0KSB7fQogICAgICAgICAgICAgbnVtRXgrKzsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkge30KLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHV0LmJlZ2luKCk7CiAgICAgICAgICAgICB1dC5zZXRSb2xsYmFja09ubHkoKTsKICAgICAgICAgICAgIHNsZXNzUmVtb3RlQnVzaW5lc3MuZm9yY2VUcmFuc2FjdGlvblJvbGxlZGJhY2tFeGNlcHRpb24oKTsKICAgICAgICAgfSBjYXRjaChFSkJUcmFuc2FjdGlvblJvbGxlZGJhY2tFeGNlcHRpb24gdHhyZSkgewogICAgICAgICAgICAgdHJ5IHsgdXQucm9sbGJhY2soKTsgfSBjYXRjaChFeGNlcHRpb24gdCkge30KLSAgICAgICAgICAgIG51bUV4Kys7ICAgICAgICAgICAgCisgICAgICAgICAgICBudW1FeCsrOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7fQogCiAgICAgICAgIHRyeSB7CkBAIC0yMTYsNyArMjE2LDcgQEAKICAgICAgICAgICAgIHRyeSB7IHV0LnJvbGxiYWNrKCk7IH0gY2F0Y2goRXhjZXB0aW9uIHQpIHt9CiAgICAgICAgICAgICBudW1FeCsrOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7fQotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgdXQuYmVnaW4oKTsKICAgICAgICAgICAgIHV0LnNldFJvbGxiYWNrT25seSgpOwpAQCAtMjI1LDE3ICsyMjUsMTcgQEAKICAgICAgICAgICAgIHRyeSB7IHV0LnJvbGxiYWNrKCk7IH0gY2F0Y2goRXhjZXB0aW9uIHQpIHt9CiAgICAgICAgICAgICBudW1FeCsrOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7fQotICAgICAgICAKKwogICAgICAgICBpZiggbnVtRXggIT0gNiApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJEaWRuJ3QgcmVjZWl2ZSBhbGwgZXhwZWN0ZWQgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9ucyA6ICIgKyBudW1FeCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQQVNTIDogcnVuVHhSb2xsZWRiYWNrVGVzdCIpOwogICAgICAgICB9CiAKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBydW5UeFJlcXVpcmVkVGVzdCgpIHsKIAogICAgICAgICBzZXR1cCgpOwpAQCAtMjQ2LDQyICsyNDYsNDIgQEAKICAgICAgICAgICAgIHNmdWxCdXNpbmVzcy5mb3JjZVRyYW5zYWN0aW9uUmVxdWlyZWRFeGNlcHRpb24oKTsKICAgICAgICAgfSBjYXRjaChFSkJUcmFuc2FjdGlvblJlcXVpcmVkRXhjZXB0aW9uIHR4cmUpIHsKICAgICAgICAgICAgIG51bUV4Kys7Ci0gICAgICAgIH0gCi0gICAgICAgIAorICAgICAgICB9CisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHNsZXNzQnVzaW5lc3MuZm9yY2VUcmFuc2FjdGlvblJlcXVpcmVkRXhjZXB0aW9uKCk7CiAgICAgICAgIH0gY2F0Y2goRUpCVHJhbnNhY3Rpb25SZXF1aXJlZEV4Y2VwdGlvbiB0eHJlKSB7CiAgICAgICAgICAgICBudW1FeCsrOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzZnVsUmVtb3RlQnVzaW5lc3MuZm9yY2VUcmFuc2FjdGlvblJlcXVpcmVkRXhjZXB0aW9uKCk7CiAgICAgICAgIH0gY2F0Y2goRUpCVHJhbnNhY3Rpb25SZXF1aXJlZEV4Y2VwdGlvbiB0eHJlKSB7CiAgICAgICAgICAgICBudW1FeCsrOwotICAgICAgICB9IAotICAgICAgICAKKyAgICAgICAgfQorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzbGVzc1JlbW90ZUJ1c2luZXNzLmZvcmNlVHJhbnNhY3Rpb25SZXF1aXJlZEV4Y2VwdGlvbigpOwogICAgICAgICB9IGNhdGNoKEVKQlRyYW5zYWN0aW9uUmVxdWlyZWRFeGNlcHRpb24gdHhyZSkgewotICAgICAgICAgICAgbnVtRXgrKzsgICAgICAgICAgICAKLSAgICAgICAgfSAKKyAgICAgICAgICAgIG51bUV4Kys7CisgICAgICAgIH0KIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgc2Z1bFJlbW90ZUJ1c2luZXNzMi5mb3JjZVRyYW5zYWN0aW9uUmVxdWlyZWRFeGNlcHRpb24oKTsKICAgICAgICAgfSBjYXRjaChUcmFuc2FjdGlvblJlcXVpcmVkRXhjZXB0aW9uIHR4cmUpIHsKICAgICAgICAgICAgIG51bUV4Kys7CiAgICAgICAgIH0gY2F0Y2goUmVtb3RlRXhjZXB0aW9uIGUpIHt9Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzbGVzc1JlbW90ZUJ1c2luZXNzMi5mb3JjZVRyYW5zYWN0aW9uUmVxdWlyZWRFeGNlcHRpb24oKTsKICAgICAgICAgfSBjYXRjaChUcmFuc2FjdGlvblJlcXVpcmVkRXhjZXB0aW9uIHR4cmUpIHsKICAgICAgICAgICAgIG51bUV4Kys7CiAgICAgICAgIH0gY2F0Y2goUmVtb3RlRXhjZXB0aW9uIGUpIHt9Ci0gICAgICAgIAorCiAgICAgICAgIGlmKCBudW1FeCAhPSA2ICkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkRpZG4ndCByZWNlaXZlIGFsbCBleHBlY3RlZCAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb25zIDogIiArIG51bUV4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBBU1MgOiBydW5UeFJlcXVpcmVkVGVzdCIpOwogICAgICAgICB9CkBAIC0yOTksMTQgKzI5OSwxNCBAQAogICAgICAgICAgICAgc2Z1bEJ1c2luZXNzLnJlbW92ZSgpOwogICAgICAgICB9IGNhdGNoKE5vU3VjaEVKQkV4Y2VwdGlvbiBuc2VlKSB7CiAgICAgICAgICAgICBudW1FeCsrOwotICAgICAgICB9IAorICAgICAgICB9CiAKLSAgICAgICAgc2Z1bFJlbW90ZUJ1c2luZXNzLnJlbW92ZSgpOyAgICAgICAgCisgICAgICAgIHNmdWxSZW1vdGVCdXNpbmVzcy5yZW1vdmUoKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHNmdWxSZW1vdGVCdXNpbmVzcy5yZW1vdmUoKTsKICAgICAgICAgfSBjYXRjaChOb1N1Y2hFSkJFeGNlcHRpb24gbnNlZSkgewogICAgICAgICAgICAgbnVtRXgrKzsKLSAgICAgICAgfSAKKyAgICAgICAgfQogCiAKICAgICAgICAgLy8gc2Z1bHJlbW90ZWJ1c2luZXNzMgpAQCAtMzIxLDExICszMjEsMTEgQEAKICAgICAgICAgfSBjYXRjaChOb1N1Y2hPYmplY3RFeGNlcHRpb24gbnNvZSkgewogICAgICAgICAgICAgbnVtRXgrKzsKICAgICAgICAgfSBjYXRjaChSZW1vdGVFeGNlcHRpb24gZSkge30KLSAgICAgICAgCisKICAgICAgICAgaWYoIG51bUV4ICE9IDMgKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiRGlkbid0IHJlY2VpdmUgYWxsIGV4cGVjdGVkICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbnMgOiAiICsgbnVtRXgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUEFTUyA6IHJ1bk5vU3VjaE9iamVjdFRlc3QiKTsKICAgICAgICAgfQpAQCAtMzQ5LDE0ICszNDksMTQgQEAKICAgICAgICAgICAgIH0gY2F0Y2goUnVudGltZUFwcEV4Y2VwdGlvbiBiKSB7CiAgICAgICAgICAgICAgICAgbnVtRXgrKzsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAKLSAgICAgICAgCisgICAgICAgIH0KKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgc2xlc3NCdXNpbmVzcy50aHJvd1J1bnRpbWVBcHBFeGNlcHRpb24oKTsKICAgICAgICAgfSBjYXRjaChSdW50aW1lQXBwRXhjZXB0aW9uIHR4cmUpIHsKICAgICAgICAgICAgIG51bUV4Kys7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHNmdWxSZW1vdGVCdXNpbmVzcy50aHJvd1J1bnRpbWVBcHBFeGNlcHRpb24oKTsKICAgICAgICAgfSBjYXRjaChSdW50aW1lQXBwRXhjZXB0aW9uIGEpIHsKQEAgLTM2OCwxMyArMzY4LDEzIEBACiAgICAgICAgICAgICB9IGNhdGNoKFJ1bnRpbWVBcHBFeGNlcHRpb24gYikgewogICAgICAgICAgICAgICAgIG51bUV4Kys7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gCi0gICAgICAgIAorICAgICAgICB9CisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHNsZXNzUmVtb3RlQnVzaW5lc3MudGhyb3dSdW50aW1lQXBwRXhjZXB0aW9uKCk7CiAgICAgICAgIH0gY2F0Y2goUnVudGltZUFwcEV4Y2VwdGlvbiB0eHJlKSB7Ci0gICAgICAgICAgICBudW1FeCsrOyAgICAgICAgICAgIAotICAgICAgICB9IAorICAgICAgICAgICAgbnVtRXgrKzsKKyAgICAgICAgfQogCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzZnVsUmVtb3RlQnVzaW5lc3MyLnRocm93UnVudGltZUFwcEV4Y2VwdGlvbigpOwpAQCAtMzg4LDE3ICszODgsMTcgQEAKICAgICAgICAgICAgICAgICBudW1FeCsrOwogICAgICAgICAgICAgfSBjYXRjaChSZW1vdGVFeGNlcHRpb24gcmUpIHt9CiAgICAgICAgIH0gY2F0Y2goUmVtb3RlRXhjZXB0aW9uIGUpIHt9Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzbGVzc1JlbW90ZUJ1c2luZXNzMi50aHJvd1J1bnRpbWVBcHBFeGNlcHRpb24oKTsKICAgICAgICAgfSBjYXRjaChSdW50aW1lQXBwRXhjZXB0aW9uIHR4cmUpIHsKICAgICAgICAgICAgIG51bUV4Kys7CiAgICAgICAgIH0gY2F0Y2goUmVtb3RlRXhjZXB0aW9uIGUpIHt9Ci0gICAgICAgIAorCiAgICAgICAgIGlmKCBudW1FeCAhPSA2ICkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkRpZG4ndCByZWNlaXZlIGFsbCBleHBlY3RlZCAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb25zIDogIiArIG51bUV4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBBU1MgOiBydW5BcHBFeGNlcHRpb25UZXN0Iik7CiAgICAgICAgIH0KQEAgLTQ1OSw4ICs0NTksOCBAQAogICAgICAgICAgICAgdHJ5IHsgdXQucm9sbGJhY2soKTsgfSBjYXRjaChFeGNlcHRpb24gdCkge30KICAgICAgICAgfQogCi0gICAgICAgIAotICAgICAgICB0cnkgeyAgICAgICAgICAgIAorCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICB1dC5iZWdpbigpOwogICAgICAgICAgICAgc2Z1bFJlbW90ZUJ1c2luZXNzLnRocm93UnVudGltZUFwcEV4Y2VwdGlvbigpOwogICAgICAgICB9IGNhdGNoKFJ1bnRpbWVBcHBFeGNlcHRpb24gYSkgewpAQCAtNDcwLDcgKzQ3MCw3IEBACiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIHRyeSB7IHV0LnJvbGxiYWNrKCk7IH0gY2F0Y2goRXhjZXB0aW9uIHQpIHt9Ci0gICAgICAgIH0gCisgICAgICAgIH0KIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgdXQuYmVnaW4oKTsKQEAgLTQ4NCw3ICs0ODQsNyBAQAogICAgICAgICAgICAgdHJ5IHsgdXQucm9sbGJhY2soKTsgfSBjYXRjaChFeGNlcHRpb24gdCkge30KICAgICAgICAgfQogCi0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICB1dC5iZWdpbigpOwogICAgICAgICAgICAgc2xlc3NSZW1vdGVCdXNpbmVzcy50aHJvd1J1bnRpbWVBcHBFeGNlcHRpb24oKTsKQEAgLTQ5NSw3ICs0OTUsNyBAQAogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICB0cnkgeyB1dC5yb2xsYmFjaygpOyB9IGNhdGNoKEV4Y2VwdGlvbiB0KSB7fQotICAgICAgICB9IAorICAgICAgICB9CiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHV0LmJlZ2luKCk7CkBAIC01NjUsNyArNTY1LDcgQEAKICAgICAgICAgaWYoIG51bUV4ICE9IDEyICkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkRpZG4ndCByZWNlaXZlIGFsbCBleHBlY3RlZCAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb25zIDogIiArIG51bUV4KTsKLSAgICAgICAKKwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQQVNTIDogcnVuUm9sbGJhY2tBcHBFeGNlcHRpb25UZXN0Iik7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2V4Y2VwdGlvbnMvZWpiL1NmdWxFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2V4Y2VwdGlvbnMvZWpiL1NmdWxFSkIuamF2YQppbmRleCAzOGY2MzU0Li4wNDFhNGQ0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9leGNlcHRpb25zL2VqYi9TZnVsRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvZXhjZXB0aW9ucy9lamIvU2Z1bEVKQi5qYXZhCkBAIC0yMyw3ICsyMyw3IEBACiAKIEBTdGF0ZWZ1bAogQEFjY2Vzc1RpbWVvdXQoMCkKLXB1YmxpYyBjbGFzcyBTZnVsRUpCIGltcGxlbWVudHMgCitwdWJsaWMgY2xhc3MgU2Z1bEVKQiBpbXBsZW1lbnRzCiAgICAgU2Z1bEJ1c2luZXNzLCBTZnVsUmVtb3RlQnVzaW5lc3MsIFNmdWxSZW1vdGVCdXNpbmVzczIKIHsKICAgICBpbnQgc3RhdGUgPSAwOwpAQCAtNTUsMTIgKzU1LDEyIEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2xlZXBGb3IoaW50IHNlYykgewotCXRyeSB7Ci0JICAgIGZvciAoaW50IGk9MCA7IGk8c2VjOyBpKyspIHsKLQkJVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCgxMDAwKTsKLQkgICAgfQotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCX0KKyAgICB0cnkgeworICAgICAgICBmb3IgKGludCBpPTAgOyBpPHNlYzsgaSsrKSB7CisgICAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoMTAwMCk7CisgICAgICAgIH0KKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgcGluZygpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2V4Y2VwdGlvbnMvZWpiL1NmdWxSZW1vdGVCdXNpbmVzcy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvZXhjZXB0aW9ucy9lamIvU2Z1bFJlbW90ZUJ1c2luZXNzLmphdmEKaW5kZXggNmMzMjQ0Ni4uM2VjYjI4MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvZXhjZXB0aW9ucy9lamIvU2Z1bFJlbW90ZUJ1c2luZXNzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvZXhjZXB0aW9ucy9lamIvU2Z1bFJlbW90ZUJ1c2luZXNzLmphdmEKQEAgLTE5LDcgKzE5LDcgQEAKIGltcG9ydCBqYWthcnRhLmVqYi5SZW1vdGU7CiAKIEBSZW1vdGUKLXB1YmxpYyBpbnRlcmZhY2UgU2Z1bFJlbW90ZUJ1c2luZXNzIAorcHVibGljIGludGVyZmFjZSBTZnVsUmVtb3RlQnVzaW5lc3MKIHsKIAogICAgIHZvaWQgZm9vKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9leGNlcHRpb25zL2VqYi9TbGVzc0J1c2luZXNzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9leGNlcHRpb25zL2VqYi9TbGVzc0J1c2luZXNzLmphdmEKaW5kZXggOTI4NGExOC4uNmE3YTE0YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvZXhjZXB0aW9ucy9lamIvU2xlc3NCdXNpbmVzcy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2V4Y2VwdGlvbnMvZWpiL1NsZXNzQnVzaW5lc3MuamF2YQpAQCAtMTYsNyArMTYsNyBAQAogCiBwYWNrYWdlIGNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuY2xpZW50dmlldy5leGNlcHRpb25zOwogCi1wdWJsaWMgaW50ZXJmYWNlIFNsZXNzQnVzaW5lc3MgCitwdWJsaWMgaW50ZXJmYWNlIFNsZXNzQnVzaW5lc3MKIHsKIAogICAgIHZvaWQgZm9yY2VUcmFuc2FjdGlvblJlcXVpcmVkRXhjZXB0aW9uKCk7CkBAIC0yNiw2ICsyNiw2IEBACiAgICAgdm9pZCB0aHJvd1J1bnRpbWVBcHBFeGNlcHRpb24oKSB0aHJvd3MgUnVudGltZUFwcEV4Y2VwdGlvbjsKIAogICAgIHZvaWQgdGhyb3dSb2xsYmFja0FwcEV4Y2VwdGlvbigpIHRocm93cyBSb2xsYmFja0FwcEV4Y2VwdGlvbjsKLSAgICAKKwogICAgIHZvaWQgZGVuaWVkKCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9leGNlcHRpb25zL2VqYi9TbGVzc1JlbW90ZUJ1c2luZXNzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvY2xpZW50dmlldy9leGNlcHRpb25zL2VqYi9TbGVzc1JlbW90ZUJ1c2luZXNzLmphdmEKaW5kZXggNmRhZGIzNS4uY2RmOTBlZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2NsaWVudHZpZXcvZXhjZXB0aW9ucy9lamIvU2xlc3NSZW1vdGVCdXNpbmVzcy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9jbGllbnR2aWV3L2V4Y2VwdGlvbnMvZWpiL1NsZXNzUmVtb3RlQnVzaW5lc3MuamF2YQpAQCAtMjAsNyArMjAsNyBAQAogaW1wb3J0IGpha2FydGEuZWpiLlJlbW90ZTsKIAogQFJlbW90ZQotcHVibGljIGludGVyZmFjZSBTbGVzc1JlbW90ZUJ1c2luZXNzIAorcHVibGljIGludGVyZmFjZSBTbGVzc1JlbW90ZUJ1c2luZXNzCiB7CiAKICAgICB2b2lkIGZvcmNlVHJhbnNhY3Rpb25SZXF1aXJlZEV4Y2VwdGlvbigpOwpAQCAtMzAsNiArMzAsNiBAQAogICAgIHZvaWQgdGhyb3dSdW50aW1lQXBwRXhjZXB0aW9uKCkgdGhyb3dzIFJ1bnRpbWVBcHBFeGNlcHRpb247CiAKICAgICB2b2lkIHRocm93Um9sbGJhY2tBcHBFeGNlcHRpb24oKSB0aHJvd3MgUm9sbGJhY2tBcHBFeGNlcHRpb247Ci0gICAgCisKICAgICB2b2lkIGRlbmllZCgpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2VlL2xvY2FsX3Nmc2IvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9lZS9sb2NhbF9zZnNiL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOTkwNTFmNi4uNTRhMWZmOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2VlL2xvY2FsX3Nmc2IvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvZWUvbG9jYWxfc2ZzYi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMyArMTUsMjMgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lamIzMC1lZS1sb2NhbF9zZnNiIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InNpbXBsZS5jbGllbnQiIHZhbHVlPSJjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmVlLmxvY2FsX3Nmc2IuY2xpZW50LlN0YW5kYWxvbmVDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzaW1wbGUuY2xpZW50MiIgdmFsdWU9ImNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuZWUubG9jYWxfc2ZzYi5jbGllbnQuU3RhbmRhbG9uZUNsaWVudDIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2VlL2xvY2FsX3Nmc2IvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2VlL2xvY2FsX3Nmc2IvYnVpbGQueG1sCmluZGV4IDAxMWRjOGUuLjQzNTEwOTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9lZS9sb2NhbF9zZnNiL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvZWUvbG9jYWxfc2ZzYi9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDE0ICs0NiwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovU2Z1bCouY2xhc3MiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9DbGllbnQuY2xhc3MsKiovU2Z1bERyaXZlci5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYxLDEwICs2MSwxMCBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvZWUvbG9jYWxfc2ZzYi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvZWUvbG9jYWxfc2ZzYi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggNmUyNThjNC4uNTMwMjY1ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2VlL2xvY2FsX3Nmc2IvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9lZS9sb2NhbF9zZnNiL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjUsMTAgKzI1LDEwIEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci5TaW1wbGVSZXBvcnRlckFkYXB0ZXI7CiAKIEBFSkIobmFtZT0iZWpiL1NmdWxEcml2ZXJSZWYiLCBiZWFuSW50ZXJmYWNlPVNmdWxEcml2ZXIuY2xhc3MsCi0JbWFwcGVkTmFtZT0iY29yYmFuYW1lOmlpb3A6bG9jYWxob3N0OjM3MDIjZWpiL1NmdWxEcml2ZXJSZWYiKQorICAgIG1hcHBlZE5hbWU9ImNvcmJhbmFtZTppaW9wOmxvY2FsaG9zdDozNzAyI2VqYi9TZnVsRHJpdmVyUmVmIikKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CkBAIC0zOCw1MiArMzgsNTIgQEAKIGxvb2t1cFVzaW5nSm5kaSgpOwogICAgICAgICAvL2NsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImVqYi1lamIzMC1lZS1sb2NhbF9zZnNiSUQiKTsKLSAgICB9ICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgfQotICAgIAorCiAgICAgQEVKQihuYW1lPSJlamIvU2Z1bERyaXZlciIsIGJlYW5JbnRlcmZhY2U9U2Z1bERyaXZlci5jbGFzcykKICAgICBwcml2YXRlIHN0YXRpYyBTZnVsRHJpdmVyIGRyaXZlcjsKIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKIAotCWRyaXZlci5pbml0aWFsaXplKCk7CisgICAgZHJpdmVyLmluaXRpYWxpemUoKTsKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnZva2luZyBzdGF0ZWxlc3MiKTsKICAgICAgICAgICAgIFN0cmluZyByZXN1bHQgPSBkcml2ZXIuc2F5SGVsbG8oKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBoZWxsbyIsCi0JCSJIZWxsbyIuZXF1YWxzKHJlc3VsdCkgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpOworICAgICAgICAiSGVsbG8iLmVxdWFscyhyZXN1bHQpID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBoZWxsbyIgLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQl0cnkgeworICAgIHRyeSB7CiAgICAgICAgICAgICBib29sZWFuIHJlc3VsdCA9IGRyaXZlci5kb1JlZkFsaWFzaW5nVGVzdCgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIFBSRV9yZWZBbGlhc2luZ1Rlc3QiLAotCQlyZXN1bHQgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpOworICAgICAgICByZXN1bHQgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpOwogCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgcmVmQWxpYXNpbmdUZXN0IiAsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCS8vZHJpdmVyLmNyZWF0ZU1hbnlTZnVsRUpCcygxNik7Ci0JLy9jcmVhdGVNYW55U2Z1bEVKQnMoMTYpOworICAgIC8vZHJpdmVyLmNyZWF0ZU1hbnlTZnVsRUpCcygxNik7CisgICAgLy9jcmVhdGVNYW55U2Z1bEVKQnMoMTYpOwogCi0Jc2xlZXBGb3IoNSk7Ci0JZHJpdmVyLmNoZWNrR2V0UmVmKCk7Ci0gICAgICAgIAotCXRyeSB7CisgICAgc2xlZXBGb3IoNSk7CisgICAgZHJpdmVyLmNoZWNrR2V0UmVmKCk7CisKKyAgICB0cnkgewogICAgICAgICAgICAgYm9vbGVhbiByZXN1bHQgPSBkcml2ZXIuZG9SZWZBbGlhc2luZ1Rlc3QoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBQT1NUX3JlZkFsaWFzaW5nVGVzdCIsCi0JCXJlc3VsdCA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7CisgICAgICAgIHJlc3VsdCA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7CiAKLQkgICAgYm9vbGVhbiBncmVldGVyVGVzdCA9IGRyaXZlci51c2VTZnVsR3JlZXRlcigpOworICAgICAgICBib29sZWFuIGdyZWV0ZXJUZXN0ID0gZHJpdmVyLnVzZVNmdWxHcmVldGVyKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgR3JlZXRlclJlZlRlc3QiLAotCQlyZXN1bHQgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpOworICAgICAgICByZXN1bHQgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpOwogCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CkBAIC05NSw1MCArOTUsNTAgQEAKIAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBzbGVlcEZvcihpbnQgc2Vjb25kcykgewotCXdoaWxlIChzZWNvbmRzLS0gPiAwKSB7Ci0JICAgIHRyeSB7IFRocmVhZC5zbGVlcCgxMDAwKTsgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7fQotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNsZWVwaW5nIGZvciAxIHNlY29uZC4gU3RpbGwgIiArIHNlY29uZHMgKyAiIHNlY29uZHMgbGVmdC4uLiIpOwotCX0KKyAgICB3aGlsZSAoc2Vjb25kcy0tID4gMCkgeworICAgICAgICB0cnkgeyBUaHJlYWQuc2xlZXAoMTAwMCk7IH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkge30KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTbGVlcGluZyBmb3IgMSBzZWNvbmQuIFN0aWxsICIgKyBzZWNvbmRzICsgIiBzZWNvbmRzIGxlZnQuLi4iKTsKKyAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBjcmVhdGVNYW55U2Z1bEVKQnMoaW50IGNvdW50KSB7Ci0Jd2hpbGUgKGNvdW50LS0gPiAwKSB7Ci0JICAgIHRyeSB7Ci0JCVNmdWxEcml2ZXIgZHIgPSAoU2Z1bERyaXZlcikgKG5ldyBJbml0aWFsQ29udGV4dCgpKS5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NmdWxEcml2ZXIiKTsKLQkJZHIuaW5pdGlhbGl6ZSgpOwotCSAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotCSAgICB9Ci0JfQorICAgIHdoaWxlIChjb3VudC0tID4gMCkgeworICAgICAgICB0cnkgeworICAgICAgICBTZnVsRHJpdmVyIGRyID0gKFNmdWxEcml2ZXIpIChuZXcgSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TZnVsRHJpdmVyIik7CisgICAgICAgIGRyLmluaXRpYWxpemUoKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQorICAgIH0KICAgICB9CiAKICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGxvb2t1cFVzaW5nSm5kaSgpIHsKLQl0cnkgeworICAgIHRyeSB7CiAKIC8qCi0JICAgIFByb3BlcnRpZXMgcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOwotCSAgICBwcm9wcy5zZXRQcm9wZXJ0eSgiamF2YS5uYW1pbmcuZmFjdG9yeS5pbml0aWFsIiwgImNvbS5zdW4uZW50ZXJwcmlzZS5uYW1pbmcuU2VyaWFsSW5pdENvbnRleHRGYWN0b3J5Iik7Ci0JICAgIHByb3BzLnNldFByb3BlcnR5KCJqYXZhLm5hbWluZy5mYWN0b3J5LnVybC5wa2dzIiwgImNvbS5zdW4uZW50ZXJwcmlzZS5uYW1pbmciKTsKLQkgICAgcHJvcHMuc2V0UHJvcGVydHkoImphdmEubmFtaW5nLmZhY3Rvcnkuc3RhdGUiLCAiY29tLnN1bi5jb3JiYS5lZS5pbXBsLnByZXNlbnRhdGlvbi5ybWkuSk5ESVN0YXRlRmFjdG9yeUltcGwiKTsKLQkgICAgcHJvcHMuc2V0UHJvcGVydHkoIm9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbEhvc3QiLCAiMTI5LjE0NS4xMzMuMTk3Iik7Ci0JICAgIHByb3BzLnNldFByb3BlcnR5KCJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0IiwgIjM3MDIiKTsKKyAgICAgICAgUHJvcGVydGllcyBwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7CisgICAgICAgIHByb3BzLnNldFByb3BlcnR5KCJqYXZhLm5hbWluZy5mYWN0b3J5LmluaXRpYWwiLCAiY29tLnN1bi5lbnRlcnByaXNlLm5hbWluZy5TZXJpYWxJbml0Q29udGV4dEZhY3RvcnkiKTsKKyAgICAgICAgcHJvcHMuc2V0UHJvcGVydHkoImphdmEubmFtaW5nLmZhY3RvcnkudXJsLnBrZ3MiLCAiY29tLnN1bi5lbnRlcnByaXNlLm5hbWluZyIpOworICAgICAgICBwcm9wcy5zZXRQcm9wZXJ0eSgiamF2YS5uYW1pbmcuZmFjdG9yeS5zdGF0ZSIsICJjb20uc3VuLmNvcmJhLmVlLmltcGwucHJlc2VudGF0aW9uLnJtaS5KTkRJU3RhdGVGYWN0b3J5SW1wbCIpOworICAgICAgICBwcm9wcy5zZXRQcm9wZXJ0eSgib3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsSG9zdCIsICIxMjkuMTQ1LjEzMy4xOTciKTsKKyAgICAgICAgcHJvcHMuc2V0UHJvcGVydHkoIm9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiLCAiMzcwMiIpOwogCi0JICAgIEluaXRpYWxDb250ZXh0IGN0eCA9IG5ldyBJbml0aWFsQ29udGV4dChwcm9wcyk7CisgICAgICAgIEluaXRpYWxDb250ZXh0IGN0eCA9IG5ldyBJbml0aWFsQ29udGV4dChwcm9wcyk7CiAqLwogCi0JICAgIEluaXRpYWxDb250ZXh0IGN0eCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCSAgICBTdHJpbmcgbmFtZSA9ICJlamIvU2Z1bERyaXZlclJlZiI7Ci0JICAgIG5hbWUgPSAiY29yYmFuYW1lOmlpb3A6MTI5LjE0NS4xMzMuMTk3OjM3MDAjIiArIG5hbWU7CisgICAgICAgIEluaXRpYWxDb250ZXh0IGN0eCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgICAgICBTdHJpbmcgbmFtZSA9ICJlamIvU2Z1bERyaXZlclJlZiI7CisgICAgICAgIG5hbWUgPSAiY29yYmFuYW1lOmlpb3A6MTI5LjE0NS4xMzMuMTk3OjM3MDAjIiArIG5hbWU7CiAKIFN5c3RlbS5vdXQucHJpbnRsbigiKioqTG9va2luZyB1cCBTZnVsRHJpdmVyLi4uIik7Ci0JICAgIFNmdWxEcml2ZXIgZHJpdmVyID0gKFNmdWxEcml2ZXIpIGN0eC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NmdWxEcml2ZXJSZWYiKTsKKyAgICAgICAgU2Z1bERyaXZlciBkcml2ZXIgPSAoU2Z1bERyaXZlcikgY3R4Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2Z1bERyaXZlclJlZiIpOwogU3lzdGVtLm91dC5wcmludGxuKCIqKipHb3QgU2Z1bERyaXZlci4uLiIpOwogLyoqLwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIExvb2t1cFVzaW5nSm5kaSIsIHN0YXQuUEFTUyk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgTG9va3VwVXNpbmdKbmRpIiwgc3RhdC5GQUlMKTsKLQkgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQorICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvZWUvbG9jYWxfc2ZzYi9lamIvU2Z1bC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2VlL2xvY2FsX3Nmc2IvZWpiL1NmdWwuamF2YQppbmRleCBkNjdlMTBjLi5kMGRhMjYxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvZWUvbG9jYWxfc2ZzYi9lamIvU2Z1bC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9lZS9sb2NhbF9zZnNiL2VqYi9TZnVsLmphdmEKQEAgLTE3LDcgKzE3LDcgQEAKIHBhY2thZ2UgY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5lZS5sb2NhbF9zZnNiOwogCiBpbXBvcnQgamFrYXJ0YS5lamIuTG9jYWw7Ci0JCisKIEBMb2NhbAogcHVibGljIGludGVyZmFjZSBTZnVsCiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvZWUvbG9jYWxfc2ZzYi9lamIvU2Z1bERyaXZlckVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2VlL2xvY2FsX3Nmc2IvZWpiL1NmdWxEcml2ZXJFSkIuamF2YQppbmRleCAwNjk2NDdlLi44NDc1ZDdjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvZWUvbG9jYWxfc2ZzYi9lamIvU2Z1bERyaXZlckVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9lZS9sb2NhbF9zZnNiL2VqYi9TZnVsRHJpdmVyRUpCLmphdmEKQEAgLTM4LDUzICszOCw1MyBAQAogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIGluaXRpYWxpemUoKSB7Ci0JYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKKyAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwogCi0JcmVmMSA9IHJlZjIgPSBjcmVhdGVTZnVsKCk7CisgICAgcmVmMSA9IHJlZjIgPSBjcmVhdGVTZnVsKCk7CiAKICAgICAgICAgcmVmMS5zZXRTZnVsUmVmKHJlZjIpOwotCXJldHVybiAocmVmMSAhPSBudWxsKTsKKyAgICByZXR1cm4gKHJlZjEgIT0gbnVsbCk7CiAgICAgfQogCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyBib29sZWFuIGRvUmVmQWxpYXNpbmdUZXN0KCkgewotCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0JZm9yIChpbnQgaT0wOyBpPDEwOyBpKyspIHsKLQkgICAgcmVmMS5pbmNyZW1lbnRDb3VudGVyKCk7Ci0JfQorICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7CisgICAgZm9yIChpbnQgaT0wOyBpPDEwOyBpKyspIHsKKyAgICAgICAgcmVmMS5pbmNyZW1lbnRDb3VudGVyKCk7CisgICAgfQogCi0JcmV0dXJuIChyZWYxLmdldENvdW50ZXIoKSA9PSByZWYyLmdldENvdW50ZXIoKSk7CisgICAgcmV0dXJuIChyZWYxLmdldENvdW50ZXIoKSA9PSByZWYyLmdldENvdW50ZXIoKSk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9DaGVja3BvaW50KCkgewogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGNoZWNrR2V0UmVmKCkgewotCVNmdWwgcmVmID0gcmVmMS5nZXRTZnVsUmVmKCk7CisgICAgU2Z1bCByZWYgPSByZWYxLmdldFNmdWxSZWYoKTsKICAgICAgICAgcmVmLmdldENvdW50ZXIoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBjcmVhdGVNYW55U2Z1bEVKQnMoaW50IGNvdW50KSB7CiAvKgotCXdoaWxlIChjb3VudC0tID4gMCkgewotCSAgICBTZnVsIHNmID0gKFNmdWwpIGNyZWF0ZVNmdWwoKTsKLQl9CisgICAgd2hpbGUgKGNvdW50LS0gPiAwKSB7CisgICAgICAgIFNmdWwgc2YgPSAoU2Z1bCkgY3JlYXRlU2Z1bCgpOworICAgIH0KICovCiAgICAgfQogCiAgICAgcHJpdmF0ZSBTZnVsIGNyZWF0ZVNmdWwoKSB7Ci0JU2Z1bCBzZnVsID0gbnVsbDsKKyAgICBTZnVsIHNmdWwgPSBudWxsOwogICAgICAgICB0cnkgewotCSAgICBJbml0aWFsQ29udGV4dCBjdHggPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkgICAgc2Z1bCA9IChTZnVsKSBjdHgubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TZnVsIik7CisgICAgICAgIEluaXRpYWxDb250ZXh0IGN0eCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgICAgICBzZnVsID0gKFNmdWwpIGN0eC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NmdWwiKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQogCi0JcmV0dXJuIHNmdWw7CisgICAgcmV0dXJuIHNmdWw7CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gdXNlU2Z1bEdyZWV0ZXIoKSB7Ci0JcmV0dXJuIChzZnVsR3JlZXRlci5nZXRDb3VudGVyKCkgPT0gcmVmMS5nZXRDb3VudGVyKCkpOworICAgIHJldHVybiAoc2Z1bEdyZWV0ZXIuZ2V0Q291bnRlcigpID09IHJlZjEuZ2V0Q291bnRlcigpKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvZWUvbG9jYWxfc2ZzYi9lamIvU2Z1bEVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2VlL2xvY2FsX3Nmc2IvZWpiL1NmdWxFSkIuamF2YQppbmRleCBjMDY0OWNiLi5kMWJmY2Q3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvZWUvbG9jYWxfc2ZzYi9lamIvU2Z1bEVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9lZS9sb2NhbF9zZnNiL2VqYi9TZnVsRUpCLmphdmEKQEAgLTIyLDcgKzIyLDcgQEAKIAogQFN0YXRlZnVsCiBwdWJsaWMgY2xhc3MgU2Z1bEVKQgotCWltcGxlbWVudHMgU2Z1bCwgU2Z1bEdyZWV0ZXIKKyAgICBpbXBsZW1lbnRzIFNmdWwsIFNmdWxHcmVldGVyCiB7CiAKICAgICBwcml2YXRlIFNmdWwgcmVmOwpAQCAtNDAsMTkgKzQwLDE5IEBACiAKICAgICBAVHJhbnNhY3Rpb25BdHRyaWJ1dGUoVHJhbnNhY3Rpb25BdHRyaWJ1dGVUeXBlLk5PVF9TVVBQT1JURUQpCiAgICAgcHVibGljIHZvaWQgaW5jcmVtZW50Q291bnRlcigpIHsKLQljb3VudGVyKys7CisgICAgY291bnRlcisrOwogICAgIH0KIAogICAgIHB1YmxpYyBpbnQgZ2V0Q291bnRlcigpIHsKLQlyZXR1cm4gY291bnRlcjsKKyAgICByZXR1cm4gY291bnRlcjsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRTZnVsUmVmKFNmdWwgcmVmKSB7Ci0JdGhpcy5yZWYgPSByZWY7CisgICAgdGhpcy5yZWYgPSByZWY7CiAgICAgfQogCiAgICAgcHVibGljIFNmdWwgZ2V0U2Z1bFJlZigpIHsKLQlyZXR1cm4gcmVmOworICAgIHJldHVybiByZWY7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvZWUvbG9jYWxfc2ZzYi9lamIvU2Z1bEdyZWV0ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9lZS9sb2NhbF9zZnNiL2VqYi9TZnVsR3JlZXRlci5qYXZhCmluZGV4IGJlZWVlZmMuLmRjZjEyYTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9lZS9sb2NhbF9zZnNiL2VqYi9TZnVsR3JlZXRlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9lZS9sb2NhbF9zZnNiL2VqYi9TZnVsR3JlZXRlci5qYXZhCkBAIC0xNyw3ICsxNyw3IEBACiBwYWNrYWdlIGNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuZWUubG9jYWxfc2ZzYjsKIAogaW1wb3J0IGpha2FydGEuZWpiLkxvY2FsOwotCQorCiBATG9jYWwKIHB1YmxpYyBpbnRlcmZhY2UgU2Z1bEdyZWV0ZXIKIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9lZS9yZW1vdGVfY2xpZW50L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvZWUvcmVtb3RlX2NsaWVudC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDE5OTc1N2EuLjY4YTgwY2MgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9lZS9yZW1vdGVfY2xpZW50L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2VlL3JlbW90ZV9jbGllbnQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzAtZWUtcmVtb3RlX2NsaWVudCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2VlL3JlbW90ZV9jbGllbnQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2VlL3JlbW90ZV9jbGllbnQvYnVpbGQueG1sCmluZGV4IDQyZjExM2MuLjkzMWI1ODIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9lZS9yZW1vdGVfY2xpZW50L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvZWUvcmVtb3RlX2NsaWVudC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDE0ICs0NiwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKi5jbGFzcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0NsaWVudC5jbGFzcywqKi9TZnVsUHJveHkuY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02MSwxMCArNjEsMTAgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2VlL3JlbW90ZV9jbGllbnQvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2VlL3JlbW90ZV9jbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGI1ZDAyMTEuLmMyYzg4ZjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9lZS9yZW1vdGVfY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvZWUvcmVtb3RlX2NsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI1LDcwICsyNSw3MCBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykKLQl0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICB0aHJvd3MgRXhjZXB0aW9uIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJlamItZWpiMzAtZWUtcmVtb3RlX3Nmc2IiKTsKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImVqYi1lamIzMC1lZS1yZW1vdGVfc2ZzYklEIik7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgIH0KLSAgICAKKwogICAgIEBFSkIKICAgICBwcml2YXRlIHN0YXRpYyBTZnVsUHJveHkgcHJveHk7CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAKIAotCWJvb2xlYW4gaW5pdGlhbGl6ZWQgPSBwcm94eS5pbml0aWFsaXplKCk7CisgICAgYm9vbGVhbiBpbml0aWFsaXplZCA9IHByb3h5LmluaXRpYWxpemUoKTsKICAgICAgICAgc3RhdC5hZGRTdGF0dXMoInJlbW90ZSBpbml0aWFsaXplIiwKLQkgICAgaW5pdGlhbGl6ZWQgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpOwotCWlmIChpbml0aWFsaXplZCkgeworICAgICAgICBpbml0aWFsaXplZCA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7CisgICAgaWYgKGluaXRpYWxpemVkKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImludm9raW5nIHN0YXRlbGVzcyIpOwogICAgICAgICAgICAgU3RyaW5nIHJlc3VsdCA9IHByb3h5LnNheUhlbGxvKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygicmVtb3RlIGhlbGxvIiwKLQkJIkhlbGxvIi5lcXVhbHMocmVzdWx0KSA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7CisgICAgICAgICJIZWxsbyIuZXF1YWxzKHJlc3VsdCkgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoInJlbW90ZSBoZWxsbyIgLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQl0cnkgewotCSAgICBmb3IgKGludCBpPTA7IGk8NTsgaSsrKSB7CisgICAgdHJ5IHsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPDU7IGkrKykgewogICAgICAgICAgICAgICAgIFN0cmluZyByZXN1bHQgPSBwcm94eS5zYXlSZW1vdGVIZWxsbygpOwogICAgICAgICAgICAgICAgIHByb3h5LmRvQ2hlY2twb2ludCgpOwotCSAgICB9Ci0JICAgIGZvciAoaW50IGk9MDsgaTw1OyBpKyspIHsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGludCBpPTA7IGk8NTsgaSsrKSB7CiAgICAgICAgICAgICAgICAgU3RyaW5nIHJlc3VsdCA9IHByb3h5LnNheVJlbW90ZUhlbGxvKCk7CiAgICAgICAgICAgICAgICAgcHJveHkuc2F5SGVsbG8oKTsKLQkgICAgfQotCSAgICBmb3IgKGludCBpPTA7IGk8NTsgaSsrKSB7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPDU7IGkrKykgewogICAgICAgICAgICAgICAgIFN0cmluZyByZXN1bHQgPSBwcm94eS5zYXlSZW1vdGVIZWxsbygpOwogICAgICAgICAgICAgICAgIHByb3h5LmRvQ2hlY2twb2ludCgpOwotCSAgICB9CisgICAgICAgIH0KICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJyZW1vdGUgcmVtb3RlX2hlbGxvIiwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJyZW1vdGUgcmVtb3RlX2hlbGxvIiAsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KLQl9CisgICAgfQogCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidGVzdCBjb21wbGV0ZSIpOwogICAgIH0KIAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBzbGVlcEZvcihpbnQgc2Vjb25kcykgewotCXdoaWxlIChzZWNvbmRzLS0gPiAwKSB7Ci0JICAgIHRyeSB7IFRocmVhZC5zbGVlcCgxMDAwKTsgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7fQotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNsZWVwaW5nIGZvciAxIHNlY29uZC4gU3RpbGwgIiArIHNlY29uZHMgKyAiIHNlY29uZHMgbGVmdC4uLiIpOwotCX0KKyAgICB3aGlsZSAoc2Vjb25kcy0tID4gMCkgeworICAgICAgICB0cnkgeyBUaHJlYWQuc2xlZXAoMTAwMCk7IH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkge30KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTbGVlcGluZyBmb3IgMSBzZWNvbmQuIFN0aWxsICIgKyBzZWNvbmRzICsgIiBzZWNvbmRzIGxlZnQuLi4iKTsKKyAgICB9CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvZWUvcmVtb3RlX2NsaWVudC9lamIvU2Z1bFByb3h5RUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvZWUvcmVtb3RlX2NsaWVudC9lamIvU2Z1bFByb3h5RUpCLmphdmEKaW5kZXggYWU0MDY3OC4uOTZkOTY3MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2VlL3JlbW90ZV9jbGllbnQvZWpiL1NmdWxQcm94eUVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9lZS9yZW1vdGVfY2xpZW50L2VqYi9TZnVsUHJveHlFSkIuamF2YQpAQCAtMjQsNTEgKzI0LDUxIEBACiAKIEBTdGF0ZWZ1bAogQEVKQihuYW1lPSJlamIvRGVsZWdhdGUiLAotCW1hcHBlZE5hbWU9ImNvcmJhbmFtZTppaW9wOmxvY2FsaG9zdDozNzAwI21hcHBlZF9qbmRpX25hbWVfZm9yX1NmdWxEcml2ZXIiLAotCWJlYW5JbnRlcmZhY2U9U2Z1bERyaXZlci5jbGFzcykKKyAgICBtYXBwZWROYW1lPSJjb3JiYW5hbWU6aWlvcDpsb2NhbGhvc3Q6MzcwMCNtYXBwZWRfam5kaV9uYW1lX2Zvcl9TZnVsRHJpdmVyIiwKKyAgICBiZWFuSW50ZXJmYWNlPVNmdWxEcml2ZXIuY2xhc3MpCiBwdWJsaWMgY2xhc3MgU2Z1bFByb3h5RUpCCi0JaW1wbGVtZW50cyBTZnVsUHJveHkgeworICAgIGltcGxlbWVudHMgU2Z1bFByb3h5IHsKIAogICAgIHByaXZhdGUgU2Z1bERyaXZlciBkZWxlZ2F0ZTsKIAogICAgIHB1YmxpYyBib29sZWFuIGluaXRpYWxpemUoKSB7CiAKIC8qCi0JdHJ5IHsKLQkgICAgSW5pdGlhbENvbnRleHQgY3R4ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JICAgIGRlbGVnYXRlID0gKFNmdWxEcml2ZXIpIGN0eC5sb29rdXAoIm1hcHBlZFNmdWxEcml2ZXJfXzNfeF9JbnRlcm5hbF9SZW1vdGVCdXNpbmVzc0hvbWVfXyIpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCSAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisgICAgdHJ5IHsKKyAgICAgICAgSW5pdGlhbENvbnRleHQgY3R4ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgIGRlbGVnYXRlID0gKFNmdWxEcml2ZXIpIGN0eC5sb29rdXAoIm1hcHBlZFNmdWxEcml2ZXJfXzNfeF9JbnRlcm5hbF9SZW1vdGVCdXNpbmVzc0hvbWVfXyIpOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CiAKLQl0cnkgewotCSAgICBJbml0aWFsQ29udGV4dCBjdHggPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkgICAgZGVsZWdhdGUgPSAoU2Z1bERyaXZlcikgY3R4Lmxvb2t1cCgibWFwcGVkU2Z1bERyaXZlciIpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCSAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisgICAgdHJ5IHsKKyAgICAgICAgSW5pdGlhbENvbnRleHQgY3R4ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgIGRlbGVnYXRlID0gKFNmdWxEcml2ZXIpIGN0eC5sb29rdXAoIm1hcHBlZFNmdWxEcml2ZXIiKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQogKi8KIAotCXRyeSB7Ci0JICAgIEluaXRpYWxDb250ZXh0IGN0eCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCSAgICBkZWxlZ2F0ZSA9IChTZnVsRHJpdmVyKSBjdHgubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9EZWxlZ2F0ZSIpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCSAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisgICAgdHJ5IHsKKyAgICAgICAgSW5pdGlhbENvbnRleHQgY3R4ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgIGRlbGVnYXRlID0gKFNmdWxEcml2ZXIpIGN0eC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL0RlbGVnYXRlIik7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KIAotCXJldHVybiAoZGVsZWdhdGUgIT0gbnVsbCk7CisgICAgcmV0dXJuIChkZWxlZ2F0ZSAhPSBudWxsKTsKICAgICB9CiAKICAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKCkgewotCXJldHVybiBkZWxlZ2F0ZS5zYXlIZWxsbygpOworICAgIHJldHVybiBkZWxlZ2F0ZS5zYXlIZWxsbygpOwogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgc2F5UmVtb3RlSGVsbG8oKSB7Ci0JcmV0dXJuIGRlbGVnYXRlLnNheVJlbW90ZUhlbGxvKCk7CisgICAgcmV0dXJuIGRlbGVnYXRlLnNheVJlbW90ZUhlbGxvKCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9DaGVja3BvaW50KCkgewotCWRlbGVnYXRlLmRvQ2hlY2twb2ludCgpOworICAgIGRlbGVnYXRlLmRvQ2hlY2twb2ludCgpOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2VlL3JlbW90ZV9zZnNiL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvZWUvcmVtb3RlX3Nmc2IvYnVpbGQucHJvcGVydGllcwppbmRleCBmMTI2NzE0Li45NTNjM2Y3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvZWUvcmVtb3RlX3Nmc2IvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvZWUvcmVtb3RlX3Nmc2IvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzAtZWUtcmVtb3RlX3Nmc2IiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9lZS9yZW1vdGVfc2ZzYi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvZWUvcmVtb3RlX3Nmc2IvYnVpbGQueG1sCmluZGV4IGI3MmMwZDkuLjM2ZWU3ODEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9lZS9yZW1vdGVfc2ZzYi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2VlL3JlbW90ZV9zZnNiL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMjEgKzQ2LDIxIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KIAotCTwhLS1idWlsZCBhbmQgcGFja2FnZSAud2FyIGZpcnN0IHNvIGl0IGRvZXNuJ3QgY29udGFpbiBlamIgYmVhbiAhLS0+Ci0JPCEtLWNsYXNzZXMgdGhhdCBoYXZlIEBTdGF0ZWxlc3MvQFN0YXRldWwgIS0tPgorICAgIDwhLS1idWlsZCBhbmQgcGFja2FnZSAud2FyIGZpcnN0IHNvIGl0IGRvZXNuJ3QgY29udGFpbiBlamIgYmVhbiAhLS0+CisgICAgPCEtLWNsYXNzZXMgdGhhdCBoYXZlIEBTdGF0ZWxlc3MvQFN0YXRldWwgIS0tPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0idHJ1ZSIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovQ2xpZW50LmNsYXNzLCoqL1NmdWxEcml2ZXIuY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02OCwxMCArNjgsMTAgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2VlL3JlbW90ZV9zZnNiL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9lZS9yZW1vdGVfc2ZzYi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggZTI4Yzk3Zi4uYTY2NjI1ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2VlL3JlbW90ZV9zZnNiL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvZWUvcmVtb3RlX3Nmc2IvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNywyMSArMjcsMjEgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJlamItZWpiMzAtZWUtcmVtb3RlX3Nmc2IiKTsKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7Ci0JLy9sb29rdXBSZW1vdGVVc2luZ0puZGkoKTsKKyAgICAvL2xvb2t1cFJlbW90ZVVzaW5nSm5kaSgpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJlamItZWpiMzAtZWUtcmVtb3RlX3Nmc2JJRCIpOwotICAgIH0gIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICB9Ci0gICAgCisKICAgICBARUpCKG5hbWU9ImVqYi9TZnVsRHJpdmVyIiwgYmVhbkludGVyZmFjZT1TZnVsRHJpdmVyLmNsYXNzKQogICAgIHByaXZhdGUgc3RhdGljIFNmdWxEcml2ZXIgZHJpdmVyOwogCkBAIC01MiwxMyArNTIsMTMgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW52b2tpbmcgc3RhdGVsZXNzIik7CiAgICAgICAgICAgICBTdHJpbmcgcmVzdWx0ID0gZHJpdmVyLnNheUhlbGxvKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygicmVtb3RlIGhlbGxvIiwKLQkJIkhlbGxvIi5lcXVhbHMocmVzdWx0KSA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7CisgICAgICAgICJIZWxsbyIuZXF1YWxzKHJlc3VsdCkgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoInJlbW90ZSBoZWxsbyIgLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQl0cnkgeworICAgIHRyeSB7CiAgICAgICAgICAgICBTdHJpbmcgcmVzdWx0ID0gZHJpdmVyLnNheVJlbW90ZUhlbGxvKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygicmVtb3RlIHJlbW90ZV9oZWxsbyIsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKQEAgLTY4LDI0ICs2OCwyNCBAQAogKi8KIAogCi0JdHJ5IHsKKyAgICB0cnkgewogICAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyAibG9jYWxob3N0IiArICI6IiArICI0ODQ4IiArCiAgICAgICAgICAgICAgICIvZWpiLWVqYjMwLWhlbGxvLXNlc3Npb24zL3NlcnZsZXQiOwogICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW52b2tpbmcgd2ViY2xpZW50IHNlcnZsZXQgYXQgIiArIHVybCk7CiAgICAgICAgICAgaW50IGNvZGUgPSBpbnZva2VTZXJ2bGV0KHVybCk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotCX0KKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQogCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidGVzdCBjb21wbGV0ZSIpOwogICAgIH0KIAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBzbGVlcEZvcihpbnQgc2Vjb25kcykgewotCXdoaWxlIChzZWNvbmRzLS0gPiAwKSB7Ci0JICAgIHRyeSB7IFRocmVhZC5zbGVlcCgxMDAwKTsgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7fQotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNsZWVwaW5nIGZvciAxIHNlY29uZC4gU3RpbGwgIiArIHNlY29uZHMgKyAiIHNlY29uZHMgbGVmdC4uLiIpOwotCX0KKyAgICB3aGlsZSAoc2Vjb25kcy0tID4gMCkgeworICAgICAgICB0cnkgeyBUaHJlYWQuc2xlZXAoMTAwMCk7IH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkge30KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTbGVlcGluZyBmb3IgMSBzZWNvbmQuIFN0aWxsICIgKyBzZWNvbmRzICsgIiBzZWNvbmRzIGxlZnQuLi4iKTsKKyAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSBpbnQgaW52b2tlU2VydmxldChTdHJpbmcgdXJsKSB0aHJvd3MgRXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9lZS9yZW1vdGVfc2ZzYi9lamIvUmVtb3RlU2Z1bC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2VlL3JlbW90ZV9zZnNiL2VqYi9SZW1vdGVTZnVsLmphdmEKaW5kZXggYjE1MDgwMC4uZTRhNzFlYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2VlL3JlbW90ZV9zZnNiL2VqYi9SZW1vdGVTZnVsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2VlL3JlbW90ZV9zZnNiL2VqYi9SZW1vdGVTZnVsLmphdmEKQEAgLTE3LDcgKzE3LDcgQEAKIHBhY2thZ2UgY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5lZS5yZW1vdGVfc2ZzYjsKIAogaW1wb3J0IGpha2FydGEuZWpiLlJlbW90ZTsKLQkKKwogQFJlbW90ZQogcHVibGljIGludGVyZmFjZSBSZW1vdGVTZnVsCiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvZWUvcmVtb3RlX3Nmc2IvZWpiL1JlbW90ZVNmdWxFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9lZS9yZW1vdGVfc2ZzYi9lamIvUmVtb3RlU2Z1bEVKQi5qYXZhCmluZGV4IDQ3ZmEwNGMuLjNkZDg1ZDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9lZS9yZW1vdGVfc2ZzYi9lamIvUmVtb3RlU2Z1bEVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9lZS9yZW1vdGVfc2ZzYi9lamIvUmVtb3RlU2Z1bEVKQi5qYXZhCkBAIC0xOSwxNCArMTksMTQgQEAKIGltcG9ydCBqYWthcnRhLmVqYi5TdGF0ZWZ1bDsKIGltcG9ydCBqYWthcnRhLmVqYi5UcmFuc2FjdGlvbkF0dHJpYnV0ZTsKIGltcG9ydCBqYWthcnRhLmVqYi5UcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGU7Ci0JCisKIEBTdGF0ZWZ1bAogcHVibGljIGNsYXNzIFJlbW90ZVNmdWxFSkIKLQlpbXBsZW1lbnRzICBSZW1vdGVTZnVsIHsKKyAgICBpbXBsZW1lbnRzICBSZW1vdGVTZnVsIHsKIAogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgU3RyaW5nIHNheU5hbWFzdGUoKSB7Ci0JcmV0dXJuICJSZW1vdGUgSGVsbG8iOworICAgIHJldHVybiAiUmVtb3RlIEhlbGxvIjsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9lZS9yZW1vdGVfc2ZzYi9lamIvU2Z1bERyaXZlckVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2VlL3JlbW90ZV9zZnNiL2VqYi9TZnVsRHJpdmVyRUpCLmphdmEKaW5kZXggZTVjNGM5MC4uOTkwNGIzNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2VlL3JlbW90ZV9zZnNiL2VqYi9TZnVsRHJpdmVyRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2VlL3JlbW90ZV9zZnNiL2VqYi9TZnVsRHJpdmVyRUpCLmphdmEKQEAgLTM5LDcgKzM5LDcgQEAKIAogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgU3RyaW5nIHNheVJlbW90ZUhlbGxvKCkgewotCXJldHVybiByZW1vdGVTZnVsLnNheU5hbWFzdGUoKTsKKyAgICByZXR1cm4gcmVtb3RlU2Z1bC5zYXlOYW1hc3RlKCk7CiAgICAgfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vYnVpbGQueG1sCmluZGV4IDYyYjk3NTguLjVkZmFiY2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL2J1aWxkLnhtbApAQCAtMzMsMTAgKzMzLDEwIEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic2Vzc2lvbjIiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXNzaW9uMmZ1bGwiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJub3BrZyIvPgotICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9Im1kYiIvPiAgCi0gICAgICAgIDxhbnRjYWxsIHRhcmdldD0ibWRiMiIvPiAgCisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ibWRiIi8+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ibWRiMiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InNlc3Npb240Ii8+Ci0gICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic2Vzc2lvbjUiLz4gCisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic2Vzc2lvbjUiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXNzaW9uMyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InNlc3Npb25fc3RhbmRhbG9uZSIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNzEsMTMgKzcxLDEzIEBACiAgICAgICAgICAgICA8YW50IGRpcj0ic2Vzc2lvbjIiIHRhcmdldD0iZGVwbG95Ii8+CiAgICAgICAgICAgICA8YW50IGRpcj0ic2Vzc2lvbjIiIHRhcmdldD0icnVuIi8+CiAKLQk8IS0tIG5lZWRzIGhhbmRsZSBzdXBwb3J0CisgICAgPCEtLSBuZWVkcyBoYW5kbGUgc3VwcG9ydAogICAgICAgICAgICAgPGFudCBkaXI9ImRjb2RlIiB0YXJnZXQ9ImJ1aWxkIi8+CiAgICAgICAgICAgICA8YW50IGRpcj0iZGNvZGUiIHRhcmdldD0iZGVwbG95Ii8+CiAgICAgICAgICAgICA8YW50IGRpcj0iZGNvZGUiIHRhcmdldD0icnVuIi8+CiAgICAgICAgICAgICA8YW50IGRpcj0iZGNvZGUiIHRhcmdldD0icnVuIi8+CiAgICAgICAgICAgICA8YW50IGRpcj0iZGNvZGUiIHRhcmdldD0idW5kZXBsb3kiLz4KLQktLT4KKyAgICAtLT4KICAgICAgICAgICAgIDxhbnQgZGlyPSJzZXNzaW9uMiIgdGFyZ2V0PSJ1bmRlcGxveSIvPgogICAgICAgICA8cmVjb3JkIG5hbWU9InNlc3Npb24yLm91dHB1dCIgYWN0aW9uPSJzdG9wIiAvPgogICAgIDwvdGFyZ2V0PgpAQCAtMTEzLDkgKzExMyw5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYi1lamIzMC1oZWxsbyB0ZXN0cykKLQk8L2VjaG8+CisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamItZWpiMzAtaGVsbG8gdGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL2Rjb2RlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vZGNvZGUvYnVpbGQucHJvcGVydGllcwppbmRleCA4MzYzNGZlLi4yMGZkZmJlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vZGNvZGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vZGNvZGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzAtaGVsbG8tZGNvZGUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9kY29kZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vZGNvZGUvYnVpbGQueG1sCmluZGV4IDgzNDAwMGQuLjExNmNmNzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9kY29kZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL2Rjb2RlL2J1aWxkLnhtbApAQCAtMzUsNyArMzUsNyBAQAogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgICA8ZGVsZXRlIGZpbGU9InNmdWxoYW5kbGUiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ3LDE0ICs0NywxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovU2Z1bCouY2xhc3MsKiovU2xlc3MqLmNsYXNzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovQ2xpZW50LmNsYXNzLCoqL1NmdWwuY2xhc3MsKiovU2Z1bEhvbWUuY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02MiwxMSArNjIsMTEgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KICAgICAgICAgPGRlbGV0ZSBmaWxlPSJzZnVsaGFuZGxlIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9kY29kZS9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vZGNvZGUvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDZlZTExZTcuLjdhMzEwOGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9kY29kZS9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL2Rjb2RlL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjUsNyArMjUsNyBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewpAQCAtMzQsMTMgKzM0LDEzIEBACiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJlamItZWpiMzAtaGVsbG8tZGNvZGVJRCIpOwotICAgIH0gIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBARUpCIFNmdWxIb21lIHNmdWxIb21lOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhBTkRMRV9GSUxFX05BTUUgPSAic2Z1bGhhbmRsZSI7CiAKICAgICBwcml2YXRlIFNmdWxbXSBzZnVscyA9IG5ldyBTZnVsWzIwXTsKQEAgLTU4LDExICs1OCwxMSBAQAogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaGFuZGxlIGZpbGUgYWxyZWFkeSBleGlzdHMuICByZWNvbnN0aXR1dGluZyBzdGF0ZWZ1bCByZWZlcmVuY2UiKTsKIAogICAgICAgICAgICAgICAgIEZpbGVJbnB1dFN0cmVhbSBmaXMgPSBuZXcgRmlsZUlucHV0U3RyZWFtKGhhbmRsZUZpbGUpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgT2JqZWN0SW5wdXRTdHJlYW0gb2lzID0gbmV3IE9iamVjdElucHV0U3RyZWFtKGZpcyk7CiAKICAgICAgICAgICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgc2Z1bHMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgSGFuZGxlIHNmdWxIYW5kbGUgPSAoSGFuZGxlKSBvaXMucmVhZE9iamVjdCgpOwogCiAgICAgICAgICAgICAgICAgICAgIHNmdWxzW2ldID0gKFNmdWwpIHNmdWxIYW5kbGUuZ2V0RUpCT2JqZWN0KCk7CkBAIC03OSwxMCArNzksMTAgQEAKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZGNvZGV3aXRoaGFuZGxlcyBtYWluIiwgc3RhdC5QQVNTKTsKIAogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaGFuZGxlIGZpbGUgZG9lc24ndCBleGlzdC4gIENyZWF0aW5nIHNmdWwiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBiZWFuIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBGaWxlT3V0cHV0U3RyZWFtIGZvcyA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKGhhbmRsZUZpbGUpOwogICAgICAgICAgICAgICAgIE9iamVjdE91dHB1dFN0cmVhbSBvb3MgPSBuZXcgT2JqZWN0T3V0cHV0U3RyZWFtKGZvcyk7CiAKQEAgLTEwMSw3ICsxMDEsNyBAQAogICAgICAgICAgICAgICAgIG9vcy5jbG9zZSgpOwogCiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0ZXN0IGNvbXBsZXRlIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZGNvZGVub2hhbmRsZXMgbWFpbiIsIHN0YXQuUEFTUyk7CiAKICAgICAgICAgICAgIH0KQEAgLTExMCw4ICsxMTAsOCBAQAogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiAsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgCXJldHVybjsKKworICAgICAgICByZXR1cm47CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vZGNvZGUvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vZGNvZGUvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKaW5kZXggNmRmZmQxZS4uYzEzYmQ5YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL2Rjb2RlL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9kY29kZS9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbApAQCAtMjQsNyArMjQsNyBAQAogICAgICAgPGVqYi1uYW1lPlNmdWxFSkI8L2VqYi1uYW1lPgogICAgICAgPGJlYW4tY2FjaGU+CiAgICAgICAgICA8bWF4LWNhY2hlLXNpemU+NDwvbWF4LWNhY2hlLXNpemU+Ci0JIDxyZXNpemUtcXVhbnRpdHk+MTwvcmVzaXplLXF1YW50aXR5PgorICAgICA8cmVzaXplLXF1YW50aXR5PjE8L3Jlc2l6ZS1xdWFudGl0eT4KICAgICAgICAgIDxjYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz41PC9jYWNoZS1pZGxlLXRpbWVvdXQtaW4tc2Vjb25kcz4KICAgICAgIDwvYmVhbi1jYWNoZT4KICAgICA8L2VqYj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9kY29kZS9lamIvU2Z1bEVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL2Rjb2RlL2VqYi9TZnVsRUpCLmphdmEKaW5kZXggYzAyYTNjMy4uZjZiNDFmYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL2Rjb2RlL2VqYi9TZnVsRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL2Rjb2RlL2VqYi9TZnVsRUpCLmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKIAogQFJlbW90ZUhvbWUoU2Z1bEhvbWUuY2xhc3MpCiBAU3RhdGVmdWwKLXB1YmxpYyBjbGFzcyBTZnVsRUpCIAorcHVibGljIGNsYXNzIFNmdWxFSkIKIHsKIAogICAgIC8vIHJlZmVyZW5jZSB0byBhIFJlbW90ZSBCdXNpbmVzcyBvYmplY3QgZnJvbSBhbm90aGVyIGFwcGxpY2F0aW9uCkBAIC0zNCw3ICszNCw3IEBACiAgICAgQEVKQihtYXBwZWROYW1lPSJlamJfZWpiMzBfaGVsbG9fc2Vzc2lvbjJfU2xlc3MiKSBjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmhlbGxvLnNlc3Npb24yLlNsZXNzUmVtb3RlSG9tZSBzbGVzc0hvbWU7CiAKICAgICBjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmhlbGxvLnNlc3Npb24yLlNsZXNzUmVtb3RlIHNsZXNzUmVtb3RlOwotICAgIAorCiAgICAgQEluaXQKICAgICBwdWJsaWMgdm9pZCBjcmVhdGUoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2Z1bEVKQjo6Y3JlYXRlIik7CkBAIC01MiwyMCArNTIsMjAgQEAKIAogICAgICAgICBzbGVzcy5oZWxsbygpOwogCi0gICAgICAgIHRyeSB7ICAgICAgICAKKyAgICAgICAgdHJ5IHsKIAogICAgICAgICAgICAgc2xlc3NSZW1vdGUuaGVsbG8oKTsKIAotICAgICAgICAgICAgY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5oZWxsby5zZXNzaW9uMi5TbGVzc1JlbW90ZSAKKyAgICAgICAgICAgIGNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaGVsbG8uc2Vzc2lvbjIuU2xlc3NSZW1vdGUKICAgICAgICAgICAgICAgICBhbm90aGVyUmVtb3RlID0gc2xlc3NIb21lLmNyZWF0ZSgpOwotICAgICAgICAKKwogICAgICAgICAgICAgYW5vdGhlclJlbW90ZS5oZWxsbygpOwogCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwogICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxlZCBzbGVzcy5oZWxsbygpIik7CiAKICAgICAgICAgcmV0dXJuICJoZWxsbyI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNDRkMTk2My4uNWQ2Mzc0NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL21kYi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9tZGIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjMgKzE1LDIzIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzAtaGVsbG8tbWRiIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9InNpbXBsZS5jbGllbnQiIHZhbHVlPSJjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmhlbGxvLm1kYi5jbGllbnQuQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJnbGFzc2Zpc2gtZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2dsYXNzZmlzaC1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL21kYi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiL2J1aWxkLnhtbAppbmRleCBiYWMyY2YwLi4wOGFkNjE3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTQgKzQ2LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9JKi5jbGFzcywqKi8qQmVhbiouY2xhc3MsKiovKkhlbGxvKiIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImNyZWF0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtNzcsMjAgKzc3LDIwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bl9zdGFuZGFsb25lY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgPGphdmEgIGZvcms9Im9uIiAKKyAgICAgICA8amF2YSAgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9tb2R1bGVzL2pha2FydGEuam1zLWFwaS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSIke3NpbXBsZS5jbGllbnR9Ij4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL21kYi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBiYWQzNmExLi5jN2RiN2IyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiL2NsaWVudC9DbGllbnQuamF2YQpAQCAtNDMsNyArNDMsNyBAQAogICAgIH0KIAogCi0gICAgQFJlc291cmNlKG5hbWU9IkZvb0NGIiwgbWFwcGVkTmFtZT0iam1zL2VqYl9lamIzMF9oZWxsb19tZGJfUUNGIikgCisgICAgQFJlc291cmNlKG5hbWU9IkZvb0NGIiwgbWFwcGVkTmFtZT0iam1zL2VqYl9lamIzMF9oZWxsb19tZGJfUUNGIikKICAgICBwcml2YXRlIHN0YXRpYyBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHF1ZXVlQ29uRmFjdG9yeTsKIAogICAgIEBSZXNvdXJjZShuYW1lPSJNc2dCZWFuUXVldWUiLCBtYXBwZWROYW1lPSJqbXMvZWpiX2VqYjMwX2hlbGxvX21kYl9JblF1ZXVlIikKQEAgLTYwLDcgKzYwLDcgQEAKIAogICAgIHByaXZhdGUgaW50IG51bU1lc3NhZ2VzID0gMjsKICAgICBwdWJsaWMgQ2xpZW50KFN0cmluZ1tdIGFyZ3MpIHsKLSAgICAgICAgCisKICAgICAgICAgaWYoIGFyZ3MubGVuZ3RoID09IDEgKSB7CiAgICAgICAgICAgICBudW1NZXNzYWdlcyA9IG5ldyBJbnRlZ2VyKGFyZ3NbMF0pLmludFZhbHVlKCk7CiAgICAgICAgIH0KQEAgLTY5LDE1ICs2OSwxNSBAQAogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogICAgICAgICB0cnkgewotCSAgICBpZiggcXVldWVDb25GYWN0b3J5ID09IG51bGwgKSB7CisgICAgICAgIGlmKCBxdWV1ZUNvbkZhY3RvcnkgPT0gbnVsbCApIHsKIAotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkphdmEgU0UgbW9kZS4uLiIpOwotCQlJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCQlxdWV1ZUNvbkZhY3RvcnkgPSAoamFrYXJ0YS5qbXMuUXVldWVDb25uZWN0aW9uRmFjdG9yeSkgaWMubG9va3VwKCJqbXMvZWpiX2VqYjMwX2hlbGxvX21kYl9RQ0YiKTsKLQkJbXNnQmVhblF1ZXVlID0gKGpha2FydGEuam1zLlF1ZXVlKSBpYy5sb29rdXAoImptcy9lamJfZWpiMzBfaGVsbG9fbWRiX0luUXVldWUiKTsKLQkJY2xpZW50UXVldWUgPSAoamFrYXJ0YS5qbXMuUXVldWUpIGljLmxvb2t1cCgiam1zL2VqYl9lamIzMF9oZWxsb19tZGJfT3V0UXVldWUiKTsKLQkJCi0JICAgIH0KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJKYXZhIFNFIG1vZGUuLi4iKTsKKyAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgcXVldWVDb25GYWN0b3J5ID0gKGpha2FydGEuam1zLlF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkpIGljLmxvb2t1cCgiam1zL2VqYl9lamIzMF9oZWxsb19tZGJfUUNGIik7CisgICAgICAgIG1zZ0JlYW5RdWV1ZSA9IChqYWthcnRhLmptcy5RdWV1ZSkgaWMubG9va3VwKCJqbXMvZWpiX2VqYjMwX2hlbGxvX21kYl9JblF1ZXVlIik7CisgICAgICAgIGNsaWVudFF1ZXVlID0gKGpha2FydGEuam1zLlF1ZXVlKSBpYy5sb29rdXAoImptcy9lamJfZWpiMzBfaGVsbG9fbWRiX091dFF1ZXVlIik7CisKKyAgICAgICAgfQogCiAgICAgICAgICAgICBzZXR1cCgpOwogICAgICAgICAgICAgZG9UZXN0KG51bU1lc3NhZ2VzKTsKQEAgLTkxLDE0ICs5MSwxNCBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldHVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIHF1ZXVlQ29uID0gcXVldWVDb25GYWN0b3J5LmNyZWF0ZVF1ZXVlQ29ubmVjdGlvbigpOwogCiAgICAgICAgIHF1ZXVlU2Vzc2lvbiA9IHF1ZXVlQ29uLmNyZWF0ZVF1ZXVlU2Vzc2lvbgotICAgICAgICAgICAgKGZhbHNlLCBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UpOyAKKyAgICAgICAgICAgIChmYWxzZSwgU2Vzc2lvbi5BVVRPX0FDS05PV0xFREdFKTsKIAogICAgICAgICAvLyBQcm9kdWNlciB3aWxsIGJlIHNwZWNpZmllZCB3aGVuIGFjdHVhbCBtc2cgaXMgc2VudC4KLSAgICAgICAgcXVldWVTZW5kZXIgPSBxdWV1ZVNlc3Npb24uY3JlYXRlU2VuZGVyKG51bGwpOyAgICAgICAgCisgICAgICAgIHF1ZXVlU2VuZGVyID0gcXVldWVTZXNzaW9uLmNyZWF0ZVNlbmRlcihudWxsKTsKIAogICAgICAgICBxdWV1ZVJlY2VpdmVyID0gcXVldWVTZXNzaW9uLmNyZWF0ZVJlY2VpdmVyKGNsaWVudFF1ZXVlKTsKIApAQCAtMTE2LDE4ICsxMTYsMTggQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHNlbmRNc2dzKGpha2FydGEuam1zLlF1ZXVlIHF1ZXVlLCBNZXNzYWdlIG1zZywgaW50IG51bSkgCisgICAgcHVibGljIHZvaWQgc2VuZE1zZ3MoamFrYXJ0YS5qbXMuUXVldWUgcXVldWUsIE1lc3NhZ2UgbXNnLCBpbnQgbnVtKQogICAgICAgICB0aHJvd3MgSk1TRXhjZXB0aW9uIHsKICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bTsgaSsrKSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlbmRpbmcgbWVzc2FnZSAiICsgaSArICIgdG8gIiArIHF1ZXVlICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlbmRpbmcgbWVzc2FnZSAiICsgaSArICIgdG8gIiArIHF1ZXVlICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGF0IHRpbWUgIiArIFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsKICAgICAgICAgICAgIHF1ZXVlU2VuZGVyLnNlbmQocXVldWUsIG1zZyk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlbnQgbWVzc2FnZSAiICsgaSArICIgdG8gIiArIHF1ZXVlICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlbnQgbWVzc2FnZSAiICsgaSArICIgdG8gIiArIHF1ZXVlICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGF0IHRpbWUgIiArIFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdChpbnQgbnVtKSAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoaW50IG51bSkKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgRGVzdGluYXRpb24gZGVzdCA9IG1zZ0JlYW5RdWV1ZTsKQEAgLTE0MSw3ICsxNDEsNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldhaXRpbmcgZm9yIHF1ZXVlIG1lc3NhZ2UiKTsKICAgICAgICAgTWVzc2FnZSByZWN2ZG1lc3NhZ2UgPSBxdWV1ZVJlY2VpdmVyLnJlY2VpdmUoVElNRU9VVCk7CiAgICAgICAgIGlmKCByZWN2ZG1lc3NhZ2UgIT0gbnVsbCApIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVjZWl2ZWQgbWVzc2FnZSA6ICIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVjZWl2ZWQgbWVzc2FnZSA6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRleHRNZXNzYWdlKXJlY3ZkbWVzc2FnZSkuZ2V0VGV4dCgpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidGltZW91dCBhZnRlciAiICsgVElNRU9VVCArICIgc2Vjb25kcyIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL21kYi9lamIvSGVsbG8xLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiL2VqYi9IZWxsbzEuamF2YQppbmRleCA4NjE1MThiLi5mY2NiYWVkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiL2VqYi9IZWxsbzEuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiL2VqYi9IZWxsbzEuamF2YQpAQCAtMTksNSArMTksNSBAQAogcHVibGljIGludGVyZmFjZSBIZWxsbzEgewogCiAgICAgcHVibGljIHZvaWQgaGVsbG8oU3RyaW5nIHMpOwotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiL2VqYi9IZWxsb1N0YXRlZnVsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiL2VqYi9IZWxsb1N0YXRlZnVsLmphdmEKaW5kZXggMTQ0ZWE4MC4uOTQ2ZmJmOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL21kYi9lamIvSGVsbG9TdGF0ZWZ1bC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9tZGIvZWpiL0hlbGxvU3RhdGVmdWwuamF2YQpAQCAtMzgsNyArMzgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnKTsKICAgICB9CiAgICAgQFByZURlc3Ryb3kgcHVibGljIHZvaWQgbXlQcmVEZXN0cm95TWV0aG9kKCkgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBSRS1ERVNUUk9ZIGNhbGxiYWNrIHJlY2VpdmVkIGluICIgKyBtc2cpOyAgICAgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUFJFLURFU1RST1kgY2FsbGJhY2sgcmVjZWl2ZWQgaW4gIiArIG1zZyk7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiL2VqYi9IZWxsb1N0YXRlbGVzcy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL21kYi9lamIvSGVsbG9TdGF0ZWxlc3MuamF2YQppbmRleCBjZjQ1OTAxLi4wYzk3ODlhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiL2VqYi9IZWxsb1N0YXRlbGVzcy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9tZGIvZWpiL0hlbGxvU3RhdGVsZXNzLmphdmEKQEAgLTIxLDcgKzIxLDcgQEAKIC8vIEhlbGxvMSBpbnRlcmZhY2UgaXMgbm90IGFubm90YXRlZCB3aXRoIEBMb2NhbC4gSWYgdGhlCiAvLyBiZWFuIG9ubHkgaW1wbGVtZW50cyBvbmUgaW50ZXJmYWNlIGl0IGlzIGFzc3VtZWQgdG8gYmUKIC8vIGEgbG9jYWwgYnVzaW5lc3MgaW50ZXJmYWNlLgotQFN0YXRlbGVzcyhkZXNjcmlwdGlvbj0ibXkgc3RhdGVsZXNzIGJlYW4gZGVzY3JpcHRpb24iKSAKK0BTdGF0ZWxlc3MoZGVzY3JpcHRpb249Im15IHN0YXRlbGVzcyBiZWFuIGRlc2NyaXB0aW9uIikKIHB1YmxpYyBjbGFzcyBIZWxsb1N0YXRlbGVzcyBpbXBsZW1lbnRzIEhlbGxvMSB7CiAKICAgICBwdWJsaWMgdm9pZCBoZWxsbyhTdHJpbmcgcykgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL21kYi9lamIvSW50ZXJjZXB0b3JBLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiL2VqYi9JbnRlcmNlcHRvckEuamF2YQppbmRleCA3MmQwNDA4Li41ODhjOTZhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiL2VqYi9JbnRlcmNlcHRvckEuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiL2VqYi9JbnRlcmNlcHRvckEuamF2YQpAQCAtMzAsNSArMzAsNSBAQAogICAgICAgICAgICAgYmVhbi5tbmFtZSA9IG0uZ2V0TmFtZSgpOwogICAgICAgICByZXR1cm4gY3R4LnByb2NlZWQoKTsKICAgICB9Ci0gICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL21kYi9lamIvTWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9tZGIvZWpiL01lc3NhZ2VCZWFuLmphdmEKaW5kZXggZTRkODVjOC4uZTZlYTQzZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL21kYi9lamIvTWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiL2VqYi9NZXNzYWdlQmVhbi5qYXZhCkBAIC00NCw4ICs0NCw4IEBACiAgICAgQEVKQiBwcml2YXRlIEhlbGxvMSBoZWxsbzE7CiAgICAgQEVKQiBwcml2YXRlIEhlbGxvMiBoZWxsbzI7CiAKLSAgICBAUmVzb3VyY2UobmFtZT0iam1zL015UXVldWVDb25uZWN0aW9uRmFjdG9yeSIsIAotICAgICAgICAgICAgICBtYXBwZWROYW1lPSJqbXMvZWpiX2VqYjMwX2hlbGxvX21kYl9RQ0YiKSAKKyAgICBAUmVzb3VyY2UobmFtZT0iam1zL015UXVldWVDb25uZWN0aW9uRmFjdG9yeSIsCisgICAgICAgICAgICAgIG1hcHBlZE5hbWU9Imptcy9lamJfZWpiMzBfaGVsbG9fbWRiX1FDRiIpCiAgICAgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxY0ZhY3Rvcnk7CiAKICAgICBTdHJpbmcgbW5hbWUgPSBudWxsOwpAQCAtNjQsNyArNjQsNyBAQAogCiAgICAgICAgIFF1ZXVlQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gbnVsbDsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxpbmcgaGVsbG8xIHN0YXRlbGVzcyBiZWFuIik7CiAgICAgICAgICAgICBoZWxsbzEuaGVsbG8oImxvY2FsIGVqYjMuMCBzdGF0ZWxlc3MiKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbGluZyBoZWxsbzIgc3RhdGVmdWwgYmVhbiIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL21kYjIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9tZGIyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNTJjNjU5Ni4uYTY2OWViMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL21kYjIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiMi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMCArMTUsMjAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lamIzMC1oZWxsby1tZGIyIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZ2xhc3NmaXNoLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9nbGFzc2Zpc2gtZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iZ2xhc3NmaXNoLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2dsYXNzZmlzaC1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJnbGFzc2Zpc2gtYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9nbGFzc2Zpc2gtYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9tZGIyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9tZGIyL2J1aWxkLnhtbAppbmRleCA1MGNmZWJlLi44NDhmYzg5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiMi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL21kYjIvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NiwxNCArNDYsMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypCZWFuKi5jbGFzcywqKi8qSGVsbG8qIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQqLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYzLDcgKzYzLDcgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iY3JlYXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC03NSwxNCArNzUsMTQgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIxIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9tZGIyL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9tZGIyL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA3ODRiY2E4Li5iM2MwNWY1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiMi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL21kYjIvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBAUmVzb3VyY2UobmFtZT0iRm9vQ0YiKSAKKyAgICBwcml2YXRlIHN0YXRpYyBAUmVzb3VyY2UobmFtZT0iRm9vQ0YiKQogICAgICAgICBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHF1ZXVlQ29uRmFjdG9yeTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CkBAIC01Miw3ICs1Miw3IEBACiAKICAgICBwcml2YXRlIGludCBudW1NZXNzYWdlcyA9IDI7CiAgICAgcHVibGljIENsaWVudChTdHJpbmdbXSBhcmdzKSB7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKCBhcmdzLmxlbmd0aCA9PSAxICkgewogICAgICAgICAgICAgbnVtTWVzc2FnZXMgPSBuZXcgSW50ZWdlcihhcmdzWzBdKS5pbnRWYWx1ZSgpOwogICAgICAgICB9CkBAIC03MywxNyArNzMsMTcgQEAKIAogICAgIHB1YmxpYyB2b2lkIHNldHVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIGNvbnRleHQgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgCisKICAgICAgICAgcXVldWVDb24gPSBxdWV1ZUNvbkZhY3RvcnkuY3JlYXRlUXVldWVDb25uZWN0aW9uKCk7CiAKICAgICAgICAgcXVldWVTZXNzaW9uID0gcXVldWVDb24uY3JlYXRlUXVldWVTZXNzaW9uCi0gICAgICAgICAgICAoZmFsc2UsIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSk7IAorICAgICAgICAgICAgKGZhbHNlLCBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UpOwogCiAgICAgICAgIC8vIFByb2R1Y2VyIHdpbGwgYmUgc3BlY2lmaWVkIHdoZW4gYWN0dWFsIG1zZyBpcyBzZW50LgotICAgICAgICBxdWV1ZVNlbmRlciA9IHF1ZXVlU2Vzc2lvbi5jcmVhdGVTZW5kZXIobnVsbCk7ICAgICAgICAKKyAgICAgICAgcXVldWVTZW5kZXIgPSBxdWV1ZVNlc3Npb24uY3JlYXRlU2VuZGVyKG51bGwpOwogCiAgICAgICAgIGNsaWVudFF1ZXVlID0gKGpha2FydGEuam1zLlF1ZXVlKQotCSAgICBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9qbXMvTXNnQmVhbkNsaWVudFF1ZXVlIik7CisgICAgICAgIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L2ptcy9Nc2dCZWFuQ2xpZW50UXVldWUiKTsKIAogICAgICAgICBxdWV1ZVJlY2VpdmVyID0gcXVldWVTZXNzaW9uLmNyZWF0ZVJlY2VpdmVyKGNsaWVudFF1ZXVlKTsKIApAQCAtMTAxLDE4ICsxMDEsMTggQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHNlbmRNc2dzKGpha2FydGEuam1zLlF1ZXVlIHF1ZXVlLCBNZXNzYWdlIG1zZywgaW50IG51bSkgCisgICAgcHVibGljIHZvaWQgc2VuZE1zZ3MoamFrYXJ0YS5qbXMuUXVldWUgcXVldWUsIE1lc3NhZ2UgbXNnLCBpbnQgbnVtKQogICAgICAgICB0aHJvd3MgSk1TRXhjZXB0aW9uIHsKICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bTsgaSsrKSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlbmRpbmcgbWVzc2FnZSAiICsgaSArICIgdG8gIiArIHF1ZXVlICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlbmRpbmcgbWVzc2FnZSAiICsgaSArICIgdG8gIiArIHF1ZXVlICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGF0IHRpbWUgIiArIFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsKICAgICAgICAgICAgIHF1ZXVlU2VuZGVyLnNlbmQocXVldWUsIG1zZyk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlbnQgbWVzc2FnZSAiICsgaSArICIgdG8gIiArIHF1ZXVlICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlbnQgbWVzc2FnZSAiICsgaSArICIgdG8gIiArIHF1ZXVlICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGF0IHRpbWUgIiArIFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmcgZGVzdE5hbWUsIGludCBudW0pIAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmcgZGVzdE5hbWUsIGludCBudW0pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogCiAgICAgICAgIERlc3RpbmF0aW9uIGRlc3QgPSAoRGVzdGluYXRpb24pIGNvbnRleHQubG9va3VwKGRlc3ROYW1lKTsKQEAgLTEyNiw3ICsxMjYsNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldhaXRpbmcgZm9yIHF1ZXVlIG1lc3NhZ2UiKTsKICAgICAgICAgTWVzc2FnZSByZWN2ZG1lc3NhZ2UgPSBxdWV1ZVJlY2VpdmVyLnJlY2VpdmUoVElNRU9VVCk7CiAgICAgICAgIGlmKCByZWN2ZG1lc3NhZ2UgIT0gbnVsbCApIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVjZWl2ZWQgbWVzc2FnZSA6ICIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVjZWl2ZWQgbWVzc2FnZSA6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRleHRNZXNzYWdlKXJlY3ZkbWVzc2FnZSkuZ2V0VGV4dCgpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidGltZW91dCBhZnRlciAiICsgVElNRU9VVCArICIgc2Vjb25kcyIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL21kYjIvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9tZGIyL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggYjE0YThjNy4uOTBmZGVmZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL21kYjIvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiMi9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC04Myw3ICs4Myw3IEBACiAgICAgICA8bWFwcGVkLW5hbWU+am1zL2VqYl9lamIzMF9oZWxsb19tZGIyX0luUXVldWU8L21hcHBlZC1uYW1lPgogICAgICAgLS0+CiAgICAgICA8bG9va3VwLW5hbWU+am1zL2VqYl9lamIzMF9oZWxsb19tZGIyX0luUXVldWU8L2xvb2t1cC1uYW1lPgotICAgICAgCisKICAgICA8L21lc3NhZ2UtZGVzdGluYXRpb24+CiAgICAgPG1lc3NhZ2UtZGVzdGluYXRpb24+CiAgICAgICA8ZGVzY3JpcHRpb24+ZGVzY3JpcHRpb24gMTwvZGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiMi9lamIvSGVsbG8xLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiMi9lamIvSGVsbG8xLmphdmEKaW5kZXggMGRmNzA1NS4uZTFkOGZhMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL21kYjIvZWpiL0hlbGxvMS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9tZGIyL2VqYi9IZWxsbzEuamF2YQpAQCAtMTksNSArMTksNSBAQAogcHVibGljIGludGVyZmFjZSBIZWxsbzEgewogCiAgICAgcHVibGljIHZvaWQgaGVsbG8oU3RyaW5nIHMpOwotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiMi9lamIvSGVsbG9TdGF0ZWZ1bC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL21kYjIvZWpiL0hlbGxvU3RhdGVmdWwuamF2YQppbmRleCA3YWZkMmI3Li5mYWE5MmY5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiMi9lamIvSGVsbG9TdGF0ZWZ1bC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9tZGIyL2VqYi9IZWxsb1N0YXRlZnVsLmphdmEKQEAgLTQwLDE0ICs0MCwxNCBAQAogICAgIH0KICAgICAvKgogICAgIEBQcmVEZXN0cm95IHB1YmxpYyB2b2lkIG15UHJlRGVzdHJveU1ldGhvZCgpIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQUkUtREVTVFJPWSBjYWxsYmFjayByZWNlaXZlZCBpbiAiICsgbXNnKTsgICAgICAgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBSRS1ERVNUUk9ZIGNhbGxiYWNrIHJlY2VpdmVkIGluICIgKyBtc2cpOwogICAgIH0KICAgICAqLwogCiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQgc2MpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1N0YXRlZnVsOnNldFNlc3Npb25Db250ZXh0Iik7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBTZXNzaW9uQ29udGV4dCBzYzIgPSAoU2Vzc2lvbkNvbnRleHQpIAorICAgICAgICAgICAgU2Vzc2lvbkNvbnRleHQgc2MyID0gKFNlc3Npb25Db250ZXh0KQogICAgICAgICAgICAgICAgIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpjb21wL0VKQkNvbnRleHQiKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IFNlc3Npb25Db250ZXh0IHZpYSBqYXZhOmNvbXAvZW52L0VKQkNvbnRleHQiKTsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL21kYjIvZWpiL0hlbGxvU3RhdGVsZXNzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiMi9lamIvSGVsbG9TdGF0ZWxlc3MuamF2YQppbmRleCBjMWI4MzkxLi40NDdjYjRhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiMi9lamIvSGVsbG9TdGF0ZWxlc3MuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiMi9lamIvSGVsbG9TdGF0ZWxlc3MuamF2YQpAQCAtMzgsOSArMzgsOSBAQAogICAgICAgICBpZiggIWluaXRpYWxpemVkICkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigibm90IGluaXRpYWxpemVkIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIZWxsb1N0YXRlbGVzczogIiArIHMpOwotICAgICAgICB0aW1lclN2Yy5jcmVhdGVUaW1lcigxLCAicXVpY2sgdGltZXIiKTsgCisgICAgICAgIHRpbWVyU3ZjLmNyZWF0ZVRpbWVyKDEsICJxdWljayB0aW1lciIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0ZWQgcXVpY2sgdGltZXIiKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9tZGIyL2VqYi9IZWxsb1N0YXRlbGVzc1N1cGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiMi9lamIvSGVsbG9TdGF0ZWxlc3NTdXBlci5qYXZhCmluZGV4IDE2MjdjNGMuLmQ0N2MyNmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9tZGIyL2VqYi9IZWxsb1N0YXRlbGVzc1N1cGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL21kYjIvZWpiL0hlbGxvU3RhdGVsZXNzU3VwZXIuamF2YQpAQCAtMzIsNyArMzIsNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU3RhdGVsZXNzU3VwZXI6bXl0aW1lb3V0bWV0aG9kIik7CiAKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIC8vIFByb3ByaWV0YXJ5IHdheSB0byBsb29rIHVwIHR4IG1hbmFnZXIuICAKKyAgICAgICAgICAgIC8vIFByb3ByaWV0YXJ5IHdheSB0byBsb29rIHVwIHR4IG1hbmFnZXIuCiAgICAgICAgICAgICBUcmFuc2FjdGlvbk1hbmFnZXIgdG0gPSAoVHJhbnNhY3Rpb25NYW5hZ2VyKQogICAgICAgICAgICAgICAgIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTphcHBzZXJ2ZXIvVHJhbnNhY3Rpb25NYW5hZ2VyIik7CiAgICAgICAgICAgICAvLyBVc2UgYW4gaW1wbGVtZW50YXRpb24tc3BlY2lmaWMgY2hlY2sgdG8gZW5zdXJlIHRoYXQgdGhlcmUKQEAgLTQzLDkgKzQzLDkgQEAKICAgICAgICAgICAgIGlmKCB0eFN0YXR1cyA9PSBTdGF0dXMuU1RBVFVTX05PX1RSQU5TQUNUSU9OICkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IHZlcmlmaWVkIHR4IGF0dHIgPSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRYX05PVF9TVVBQT1JURUQgaW4gbXl0aW1lb3V0bWV0aG9kKCkiKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIHRpbWVvdXRIYXBwZW5lZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbnZhbGlkIHR4IHN0YXR1cyBmb3IgVFhfTk9UX1NVUFBPUlRFRCIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIG1ldGhvZCAiICsgdHhTdGF0dXMpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL21kYjIvZWpiL01lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiMi9lamIvTWVzc2FnZUJlYW4uamF2YQppbmRleCA1OWZmZmE0Li41Zjg1NzQ3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiMi9lamIvTWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbWRiMi9lamIvTWVzc2FnZUJlYW4uamF2YQpAQCAtNDcsMTkgKzQ3LDE5IEBACiBpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CiAKIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKLUBNZXNzYWdlRHJpdmVuKG1lc3NhZ2VMaXN0ZW5lckludGVyZmFjZT1NZXNzYWdlTGlzdGVuZXIuY2xhc3MpIAorQE1lc3NhZ2VEcml2ZW4obWVzc2FnZUxpc3RlbmVySW50ZXJmYWNlPU1lc3NhZ2VMaXN0ZW5lci5jbGFzcykKIHB1YmxpYyBjbGFzcyBNZXNzYWdlQmVhbiBpbXBsZW1lbnRzIGpha2FydGEuZWpiLk1lc3NhZ2VEcml2ZW5CZWFuIHsKIAogICAgIEBFSkIobmFtZT0iaGVsbG8xIikgcHJpdmF0ZSBIZWxsbzEgaGVsbG8xOwogICAgIEBFSkIgcHJpdmF0ZSBIZWxsbzIgaGVsbG8yOwotICAgIAorCiAgICAgYm9vbGVhbiBvbk1lc3NhZ2VJbnRlcmNlcHRvckNhbGxlZCA9IGZhbHNlOwogICAgIGJvb2xlYW4gdGltZW91dEludGVyY2VwdG9yQ2FsbGVkID0gZmFsc2U7CiAKICAgICBAUmVzb3VyY2UgamFrYXJ0YS5lamIuTWVzc2FnZURyaXZlbkNvbnRleHQgY3R4OwogICAgIEBSZXNvdXJjZSBqYWthcnRhLmVqYi5UaW1lclNlcnZpY2UgaW5qZWN0ZWRUaW1lclNlcnZpY2U7CiAKLSAgICBAUmVzb3VyY2UobmFtZT0iam1zL015UXVldWVDb25uZWN0aW9uRmFjdG9yeSIpIAorICAgIEBSZXNvdXJjZShuYW1lPSJqbXMvTXlRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IikKICAgICAgICAgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxY0ZhY3Rvcnk7CiAKICAgICAvLyBWYWx1ZXMgZm9yIHRoZXNlIHdpbGwgYmUgc3BlY2lmaWVkIGluIHRoZSBzdGFuZGFyZCBkZXBsb3ltZW50IGRlc2NyaXB0b3IKQEAgLTgxLDcgKzgxLDcgQEAKICAgICBAUmVzb3VyY2UgaW50IGludFZhbHVlMiA9IDE7CiAgICAgQFJlc291cmNlIEludGVnZXIgaW50ZWdlclZhbHVlMiA9IG5ldyBJbnRlZ2VyKDEpOwogCi0gICAgLy8gY29ycmVzcG9uZGluZyBlbnYtZW50cnkgaXMgc3BlY2lmaWVkIGluIGVqYi1qYXIueG1sLCAKKyAgICAvLyBjb3JyZXNwb25kaW5nIGVudi1lbnRyeSBpcyBzcGVjaWZpZWQgaW4gZWpiLWphci54bWwsCiAgICAgLy8gYnV0IHRoZXJlIGlzIG5vIHZhbHVlIHNvIG5vIGluamVjdGlvbiBzaG91bGQgaGFwcGVuIGFuZAogICAgIC8vIHRoZSBkZWZhdWx0IHZhbHVlIHNob3VsZCBiZSB1c2VkLgogICAgIGludCBpbnRWYWx1ZTMgPSAzOwpAQCAtMTQzLDcgKzE0Myw3IEBACiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIndyb25nIHZhbHVlIGZvciBpbnRWYWx1ZTMgPSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludFZhbHVlMyk7Ci0gICAgICAgICAgICB9IAorICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiggc3RyaW5nVmFsdWUxLmVxdWFscygidW5kZWZpbmVkIikgfHwKICAgICAgICAgICAgICAgICAoaW50VmFsdWUxID09IDEpIHx8IChpbnRlZ2VyVmFsdWUxLmludFZhbHVlKCkgPT0gMSkgfHwKQEAgLTE2MCw4ICsxNjAsOCBAQAogICAgICAgICAgICAgICAgIChpbnRWYWx1ZTIgIT0gMSkgfHwgKGludGVnZXJWYWx1ZTIuaW50VmFsdWUoKSAhPSAxKSApIHsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJlbnYtZW50cnkgQFJlc291cmNlIG92ZXJyaWRlIGVycm9yIik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFByb3ByaWV0YXJ5IHdheSB0byBsb29rIHVwIHR4IG1hbmFnZXIuICAKKworICAgICAgICAgICAgLy8gUHJvcHJpZXRhcnkgd2F5IHRvIGxvb2sgdXAgdHggbWFuYWdlci4KICAgICAgICAgICAgIFRyYW5zYWN0aW9uTWFuYWdlciB0bSA9IChUcmFuc2FjdGlvbk1hbmFnZXIpCiAgICAgICAgICAgICAgICAgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmFwcHNlcnZlci9UcmFuc2FjdGlvbk1hbmFnZXIiKTsKICAgICAgICAgICAgIC8vIFVzZSBhbiBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYyBjaGVjayB0byBlbnN1cmUgdGhhdCB0aGVyZQpAQCAtMTc2LDcgKzE3Niw3IEBACiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiSW52YWxpZCB0eCBzdGF0dXMgZm9yIFRYX05PVF9TVVBQT1JURUQiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgbWV0aG9kICIgKyB0eFN0YXR1cyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYWxsaW5nIGhlbGxvMSBzdGF0ZWxlc3MgYmVhbiIpOwogICAgICAgICAgICAgaGVsbG8xLmhlbGxvKCJsb2NhbCBlamIzLjAgc3RhdGVsZXNzIik7CiAKQEAgLTIwMywxMSArMjAzLDExIEBACiAKIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjcmVhdGluZyB0aW1lciIpOwotICAgICAgICAgICAgVGltZXJTZXJ2aWNlIHRpbWVyU2VydmljZSA9IChUaW1lclNlcnZpY2UpIAorICAgICAgICAgICAgVGltZXJTZXJ2aWNlIHRpbWVyU2VydmljZSA9IChUaW1lclNlcnZpY2UpCiAgICAgICAgICAgICAgICAgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmNvbXAvVGltZXJTZXJ2aWNlIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIHRpbWVyU2VydmljZS5jcmVhdGVUaW1lcig3MDAwLCAiY3JlYXRlZCB0aW1lciIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIENvbGxlY3Rpb24gdGltZXJzID0gaW5qZWN0ZWRUaW1lclNlcnZpY2UuZ2V0VGltZXJzKCk7CiAgICAgICAgICAgICBpZiggdGltZXJzLnNpemUoKSAhPSAxICkgewogICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oImludmFsaWQgdGltZXIgY291bnQgPSAiICsKQEAgLTIyMiw3ICsyMjIsNyBAQAogCiAgICAgQFRpbWVvdXQgcHJpdmF0ZSB2b2lkIHRpbWVvdXQoamFrYXJ0YS5lamIuVGltZXIgdCkgewogCi0gICAgICAgIFF1ZXVlQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gbnVsbDsgICAgICAgIAorICAgICAgICBRdWV1ZUNvbm5lY3Rpb24gY29ubmVjdGlvbiA9IG51bGw7CiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gTWVzc2FnZUJlYW4uICBHb3QgdGltZW91dCBjYWxsYmFjayIpOwpAQCAtMjQ2LDcgKzI0Niw3IEBACiAKICAgICAgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAKLSAgICAgICAgICAgIC8vIFByb3ByaWV0YXJ5IHdheSB0byBsb29rIHVwIHR4IG1hbmFnZXIuICAKKyAgICAgICAgICAgIC8vIFByb3ByaWV0YXJ5IHdheSB0byBsb29rIHVwIHR4IG1hbmFnZXIuCiAgICAgICAgICAgICBUcmFuc2FjdGlvbk1hbmFnZXIgdG0gPSAoVHJhbnNhY3Rpb25NYW5hZ2VyKQogICAgICAgICAgICAgICAgIGljLmxvb2t1cCgiamF2YTphcHBzZXJ2ZXIvVHJhbnNhY3Rpb25NYW5hZ2VyIik7CiAgICAgICAgICAgICAvLyBVc2UgYW4gaW1wbGVtZW50YXRpb24tc3BlY2lmaWMgY2hlY2sgdG8gZW5zdXJlIHRoYXQgdGhlcmUKQEAgLTI4OSw5ICsyODksOSBAQAogCiAgICAgQEFyb3VuZEludm9rZQogICAgIHB1YmxpYyBPYmplY3QgaW50ZXJjZXB0KEludm9jYXRpb25Db250ZXh0IGludikKLQl0aHJvd3MgRXhjZXB0aW9uCisgICAgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlttZGJdIEludGVyY2VwdG9yIGludm9rZWQuLi4iKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlttZGJdIEludGVyY2VwdG9yIGludm9rZWQuLi4iKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJtZXRob2QgPSAiICsgaW52LmdldE1ldGhvZCgpKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJwYXJhbXMgPSAiICsgaW52LmdldFBhcmFtZXRlcnMoKSk7CiAgICAgICAgIGludCBpID0gMDsKQEAgLTMwOSw4ICszMDksOCBAQAogICAgICAgICB9CiAKIAotCU9iamVjdCBvID0gaW52LnByb2NlZWQoKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlttZGJdIEludGVyY2VwdG9yIGFmdGVyIHByb2NlZWQoKS4uLiIpOworICAgIE9iamVjdCBvID0gaW52LnByb2NlZWQoKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlttZGJdIEludGVyY2VwdG9yIGFmdGVyIHByb2NlZWQoKS4uLiIpOwogCiAgICAgICAgIHJldHVybiBvOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9ub3BrZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL25vcGtnL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMmY5NjcwNi4uMzliODljNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL25vcGtnL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL25vcGtnL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIxICsxNSwyMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMwLWhlbGxvLW5vcGtnIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbm9wa2cvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL25vcGtnL2J1aWxkLnhtbAppbmRleCA3YjM3NjkxLi4xNjk4NTYxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbm9wa2cvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9ub3BrZy9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDE0ICs0NiwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iU2Z1bCouY2xhc3MsU2xlc3MqLmNsYXNzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iQ2xpZW50LmNsYXNzLFNmdWwuY2xhc3MsU2xlc3MuY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02MSwxMCArNjEsMTAgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL25vcGtnL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9ub3BrZy9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggZmY0YWQ4Zi4uNWEwN2MzMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL25vcGtnL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbm9wa2cvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yMSw3ICsyMSw3IEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CkBAIC0zMCwxMSArMzAsMTEgQEAKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImVqYi1lamIzMC1ub3BrZy1zZXNzaW9uSUQiKTsKLSAgICB9ICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgQEVKQihtYXBwZWROYW1lPSJTZnVsIikgU2Z1bCBzZnVsOwogICAgIHByaXZhdGUgc3RhdGljIEBFSkIobWFwcGVkTmFtZT0iU2xlc3MiKSBTbGVzcyBzbGVzczsKIApAQCAtNTYsOCArNTYsOCBAQAogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiAsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgCXJldHVybjsKKworICAgICAgICByZXR1cm47CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vbm9wa2cvZWpiL1NmdWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9ub3BrZy9lamIvU2Z1bC5qYXZhCmluZGV4IDJjNDA3M2MuLmE4YWJhODcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9ub3BrZy9lamIvU2Z1bC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9ub3BrZy9lamIvU2Z1bC5qYXZhCkBAIC0xNSw3ICsxNSw3IEBACiAgKi8KIAogaW1wb3J0IGpha2FydGEuZWpiLlJlbW90ZTsKLQkKKwogQFJlbW90ZQogcHVibGljIGludGVyZmFjZSBTZnVsCiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24vYnVpbGQucHJvcGVydGllcwppbmRleCA4ZWY1MzRmLi43MjFlYTVmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIzICsxNSwyMyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMwLWhlbGxvLXNlc3Npb24iLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic2ltcGxlLmNsaWVudCIgdmFsdWU9ImNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaGVsbG8uc2Vzc2lvbi5jbGllbnQuU3RhbmRhbG9uZUNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9InNpbXBsZS5jbGllbnQyIiB2YWx1ZT0iY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5oZWxsby5zZXNzaW9uLmNsaWVudC5TdGFuZGFsb25lQ2xpZW50MiIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbi9idWlsZC54bWwKaW5kZXggYmI0N2E0Yy4uZTUzOTAxZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uL2J1aWxkLnhtbApAQCAtMzUsNyArMzUsNyBAQAogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgICA8ZGVsZXRlIGZpbGU9ImNsaWVudC9DbGllbnQuamF2YSIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxjb3B5IGZpbGU9ImNsaWVudC9DbGllbnQuamF2YS50b2tlbiIgdG9maWxlPSJjbGllbnQvQ2xpZW50LmphdmEiLz4KICAgICAgICAgPHJlcGxhY2UgZmlsZT0iY2xpZW50L0NsaWVudC5qYXZhIgpAQCAtNTEsMTQgKzUxLDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9TZnVsKi5jbGFzcywqKi9TbGVzcyouY2xhc3MiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9DbGllbnQuY2xhc3MsKiovU2Z1bC5jbGFzcywqKi9TbGVzcy5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTY5LDkgKzY5LDkgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5fc3RhbmRhbG9uZWNsaWVudDIiLz4KICAgICA8L3RhcmdldD4KIAotIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW5fc3RhbmRhbG9uZWNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgIDxqYXZhICBmb3JrPSJvbiIgCisgICAgICAgPGphdmEgIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iJHtzaW1wbGUuY2xpZW50fSI+CkBAIC04MCw3ICs4MCw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bl9zdGFuZGFsb25lY2xpZW50MiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgIDxqYXZhICBmb3JrPSJvbiIgCisgICAgICAgPGphdmEgIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iJHtzaW1wbGUuY2xpZW50Mn0iPgpAQCAtOTYsNyArOTYsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggNDEwYzcxMS4uNTI3YzBjYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24vY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjUsNyArMjUsNyBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewpAQCAtMzQsMTcgKzM0LDE3IEBACiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJlamItZWpiMzAtaGVsbG8tc2Vzc2lvbklEIik7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgIH0KIAogICAgIHByaXZhdGUgc3RhdGljIEBFSkIgU2Z1bCBzZnVsOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgQEVKQihtYXBwZWROYW1lPSJjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmhlbGxvLnNlc3Npb24uU2xlc3MiKSBTbGVzcyBzbGVzczsKIAogICAgIC8vCi0gICAgLy8gTk9URTogVG9rZW4gMzcwMCB3aWxsIGJlIHJlcGxhY2VkIGluIEBFSkIgYW5ub3RhdGlvbnMgYmVsb3cgCisgICAgLy8gTk9URTogVG9rZW4gMzcwMCB3aWxsIGJlIHJlcGxhY2VkIGluIEBFSkIgYW5ub3RhdGlvbnMgYmVsb3cKICAgICAvLyB3aXRoIHRoZSB2YWx1ZSBvZiB0aGUgcG9ydCBmcm9tIGNvbmZpZy5wcm9wZXJ0aWVzIGR1cmluZyB0aGUgYnVpbGQKICAgICAvLwogICAgIHByaXZhdGUgc3RhdGljIEBFSkIobWFwcGVkTmFtZT0iY29yYmFuYW1lOmlpb3A6bG9jYWxob3N0OjM3MDAjY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5oZWxsby5zZXNzaW9uLlNsZXNzIikgU2xlc3Mgc2xlc3MyOwpAQCAtNTgsMTIgKzU4LDEyIEBACiAgICAgICAgIHRyeSB7CiAKIC8vICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGluZyBJbml0aWFsQ29udGV4dCgpIik7Ci0vLwkgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKy8vICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogCi0vLwkgICAgb3JnLm9tZy5DT1JCQS5PUkIgb3JiID0gKG9yZy5vbWcuQ09SQkEuT1JCKSBpYy5sb29rdXAoImphdmE6Y29tcC9PUkIiKTsgCisvLyAgICAgICAgb3JnLm9tZy5DT1JCQS5PUkIgb3JiID0gKG9yZy5vbWcuQ09SQkEuT1JCKSBpYy5sb29rdXAoImphdmE6Y29tcC9PUkIiKTsKIAotLy8JICAgIFNmdWwgc2Z1bCA9IChTZnVsKSBpYy5sb29rdXAoImNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaGVsbG8uc2Vzc2lvbi5TZnVsIik7Ci0vLwkgICAgU2xlc3Mgc2xlc3MgPSAoU2xlc3MpIGljLmxvb2t1cCgiY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5oZWxsby5zZXNzaW9uLlNsZXNzIik7CisvLyAgICAgICAgU2Z1bCBzZnVsID0gKFNmdWwpIGljLmxvb2t1cCgiY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5oZWxsby5zZXNzaW9uLlNmdWwiKTsKKy8vICAgICAgICBTbGVzcyBzbGVzcyA9IChTbGVzcykgaWMubG9va3VwKCJjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmhlbGxvLnNlc3Npb24uU2xlc3MiKTsKIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnZva2luZyBzdGF0ZWZ1bCIpOwogICAgICAgICAgICAgc2Z1bC5oZWxsbygpOwpAQCAtNzEsMTEgKzcxLDExIEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImludm9raW5nIHN0YXRlbGVzcyIpOwogICAgICAgICAgICAgc2xlc3MuaGVsbG8oKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW52b2tpbmcgc3RhdGVsZXNzMiIpOwotCSAgICBzbGVzczIuaGVsbG8oKTsKKyAgICAgICAgc2xlc3MyLmhlbGxvKCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImludm9raW5nIHN0YXRlbGVzczMiKTsKLQkgICAgc2xlc3MzLmhlbGxvKCk7CisgICAgICAgIHNsZXNzMy5oZWxsbygpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnZva2luZyBzdGF0ZWxlc3M0Iik7Ci0JICAgIHNsZXNzNC5oZWxsbygpOworICAgICAgICBzbGVzczQuaGVsbG8oKTsKIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0ZXN0IGNvbXBsZXRlIik7CiAKQEAgLTg1LDggKzg1LDggQEAKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIgLCBzdGF0LkZBSUwpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgIAlyZXR1cm47CisKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24vY2xpZW50L1N0YW5kYWxvbmVDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uL2NsaWVudC9TdGFuZGFsb25lQ2xpZW50LmphdmEKaW5kZXggZDg5MWZiNy4uNzk1YjkzNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24vY2xpZW50L1N0YW5kYWxvbmVDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbi9jbGllbnQvU3RhbmRhbG9uZUNsaWVudC5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiAKIHB1YmxpYyBjbGFzcyBTdGFuZGFsb25lQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewpAQCAtMzMsMTEgKzMzLDExIEBACiAgICAgICAgIFN0YW5kYWxvbmVDbGllbnQgY2xpZW50ID0gbmV3IFN0YW5kYWxvbmVDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImVqYi1lamIzMC1oZWxsby1zZXNzaW9uc3RhbmRhbG9uZUlEIik7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIFN0YW5kYWxvbmVDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAKICAgICAgICAgdHJ5IHsKQEAgLTQ5LDcgKzQ5LDcgQEAKIAogICAgICAgICAgICAgU2Z1bCBzZnVsMiA9IChTZnVsKSBpYy5sb29rdXAKICAgICAgICAgICAgICAgICAoImNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaGVsbG8uc2Vzc2lvbi5TZnVsIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU2Z1bCBzZnVsMyA9IChTZnVsKSBpYy5sb29rdXAKICAgICAgICAgICAgICAgICAoImNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaGVsbG8uc2Vzc2lvbi5TZnVsI2NvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaGVsbG8uc2Vzc2lvbi5TZnVsIik7CiAKQEAgLTU4LDcgKzU4LDcgQEAKIAogICAgICAgICAgICAgU2xlc3Mgc2xlc3MyID0gKFNsZXNzKSBpYy5sb29rdXAKICAgICAgICAgICAgICAgICAoImNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaGVsbG8uc2Vzc2lvbi5TbGVzcyNjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmhlbGxvLnNlc3Npb24uU2xlc3MiKTsKLSAgICAgICAgICAgIAorCiAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW52b2tpbmcgc3RhdGVmdWwiKTsKICAgICAgICAgICAgIHNmdWwxLmhlbGxvKCk7CkBAIC04OCw4ICs4OCw4IEBACiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iICwgc3RhdC5GQUlMKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAJcmV0dXJuOworCisgICAgICAgIHJldHVybjsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uL2NsaWVudC9TdGFuZGFsb25lQ2xpZW50Mi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24vY2xpZW50L1N0YW5kYWxvbmVDbGllbnQyLmphdmEKaW5kZXggNGU2ZDQ3YS4uYTMxN2Y4ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24vY2xpZW50L1N0YW5kYWxvbmVDbGllbnQyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24vY2xpZW50L1N0YW5kYWxvbmVDbGllbnQyLmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKIAogcHVibGljIGNsYXNzIFN0YW5kYWxvbmVDbGllbnQyIHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewpAQCAtMzMsMzIgKzMzLDMyIEBACiAgICAgICAgIFN0YW5kYWxvbmVDbGllbnQyIGNsaWVudCA9IG5ldyBTdGFuZGFsb25lQ2xpZW50MihhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiZWpiLWVqYjMwLWhlbGxvLXNlc3Npb25zdGFuZGFsb25lMklEIik7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIFN0YW5kYWxvbmVDbGllbnQyIChTdHJpbmdbXSBhcmdzKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogCiAgICAgICAgIHRyeSB7CiAKICAgICAgICAgICAgIFByb3BlcnRpZXMgcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOwotICAgICAgICAgICAgcHJvcHMuc2V0UHJvcGVydHkoImphdmEubmFtaW5nLmZhY3RvcnkuaW5pdGlhbCIsIAorICAgICAgICAgICAgcHJvcHMuc2V0UHJvcGVydHkoImphdmEubmFtaW5nLmZhY3RvcnkuaW5pdGlhbCIsCiAgICAgICAgICAgICAgICAgICAgICJjb20uc3VuLmVudGVycHJpc2UubmFtaW5nLlNlcmlhbEluaXRDb250ZXh0RmFjdG9yeSIpOwotICAgICAgICAgICAgcHJvcHMuc2V0UHJvcGVydHkoImphdmEubmFtaW5nLmZhY3RvcnkudXJsLnBrZ3MiLCAKKyAgICAgICAgICAgIHByb3BzLnNldFByb3BlcnR5KCJqYXZhLm5hbWluZy5mYWN0b3J5LnVybC5wa2dzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb20uc3VuLmVudGVycHJpc2UubmFtaW5nIik7CiAgICAgICAgICAgICBwcm9wcy5zZXRQcm9wZXJ0eSgiamF2YS5uYW1pbmcuZmFjdG9yeS5zdGF0ZSIsCiAgICAgICAgICAgICAiY29tLnN1bi5jb3JiYS5lZS5pbXBsLnByZXNlbnRhdGlvbi5ybWkuSk5ESVN0YXRlRmFjdG9yeUltcGwiKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dChwcm9wcyk7Ci0gICAgICAgICAgICAKKwogCiAgICAgICAgICAgICBTZnVsIHNmdWwxID0gKFNmdWwpIGljLmxvb2t1cAogICAgICAgICAgICAgICAgICgiY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5oZWxsby5zZXNzaW9uLlNmdWwiKTsKIAogICAgICAgICAgICAgU2Z1bCBzZnVsMiA9IChTZnVsKSBpYy5sb29rdXAKICAgICAgICAgICAgICAgICAoImNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaGVsbG8uc2Vzc2lvbi5TZnVsIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU2Z1bCBzZnVsMyA9IChTZnVsKSBpYy5sb29rdXAKICAgICAgICAgICAgICAgICAoImNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaGVsbG8uc2Vzc2lvbi5TZnVsI2NvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaGVsbG8uc2Vzc2lvbi5TZnVsIik7CiAKQEAgLTY3LDcgKzY3LDcgQEAKIAogICAgICAgICAgICAgU2xlc3Mgc2xlc3MyID0gKFNsZXNzKSBpYy5sb29rdXAKICAgICAgICAgICAgICAgICAoImNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaGVsbG8uc2Vzc2lvbi5TbGVzcyNjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmhlbGxvLnNlc3Npb24uU2xlc3MiKTsKLSAgICAgICAgICAgIAorCiAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW52b2tpbmcgc3RhdGVmdWwiKTsKICAgICAgICAgICAgIHNmdWwxLmhlbGxvKCk7CkBAIC05Nyw4ICs5Nyw4IEBACiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iICwgc3RhdC5GQUlMKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAJcmV0dXJuOworCisgICAgICAgIHJldHVybjsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uL2VqYi9TZnVsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbi9lamIvU2Z1bC5qYXZhCmluZGV4IDgwYWY1YmEuLmRkYTk1ODcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uL2VqYi9TZnVsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24vZWpiL1NmdWwuamF2YQpAQCAtMTcsNyArMTcsNyBAQAogcGFja2FnZSBjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmhlbGxvLnNlc3Npb247CiAKIGltcG9ydCBqYWthcnRhLmVqYi5SZW1vdGU7Ci0JCisKIEBSZW1vdGUKIHB1YmxpYyBpbnRlcmZhY2UgU2Z1bAogewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjIvYnVpbGQucHJvcGVydGllcwppbmRleCA3Mjc1MDAyLi5kYjdkZjEwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzAtaGVsbG8tc2Vzc2lvbjIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjIvYnVpbGQueG1sCmluZGV4IDY2OTBiMWMuLjI3MTU3MmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTQgKzQ2LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9TbGVzcyouY2xhc3MsKiovU2Z1bCouY2xhc3MsKiovRXh0ZXJuYWxCdXNpbmVzcy5jbGFzcywqKi9Gb28qLmNsYXNzLCoqL015Q2FsbGJhY2tIYW5kbGVyLmNsYXNzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovQ2xpZW50U3VwZXIuY2xhc3MsKiovQ2xpZW50LmNsYXNzLCoqL1NsZXNzLmNsYXNzLCoqL1NsZXNzU3ViLmNsYXNzLCoqL1NmdWwuY2xhc3MsKiovRXh0ZXJuYWxCdXNpbmVzcy5jbGFzcywqKi9Gb29Ib21lLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjEsMTAgKzYxLDEwIEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjIvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGU1NTYzOTQuLjM5N2M1NDEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjksMTYgKzI5LDE2IEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci5TaW1wbGVSZXBvcnRlckFkYXB0ZXI7CiAKIAotQEVKQnMoIAotIHsgQEVKQihuYW1lPSJlamIvVHlwZUxldmVsU2xlc3MxIiwgYmVhbk5hbWU9IlNsZXNzRUpCIiwgCitARUpCcygKKyB7IEBFSkIobmFtZT0iZWpiL1R5cGVMZXZlbFNsZXNzMSIsIGJlYW5OYW1lPSJTbGVzc0VKQiIsCiAgICAgICAgYmVhbkludGVyZmFjZT1TbGVzcy5jbGFzcyksCi0gICBARUpCKG5hbWU9ImVqYi9UeXBlTGV2ZWxTbGVzczIiLCBiZWFuTmFtZT0iU2xlc3NFSkIyIiwgCisgICBARUpCKG5hbWU9ImVqYi9UeXBlTGV2ZWxTbGVzczIiLCBiZWFuTmFtZT0iU2xlc3NFSkIyIiwKICAgICAgICBiZWFuSW50ZXJmYWNlPVNsZXNzLmNsYXNzKQogIH0pCiBARUpCKG5hbWU9ImVqYi9UeXBlTGV2ZWxTbGVzczMiLCBiZWFuSW50ZXJmYWNlPVNsZXNzU3ViLmNsYXNzKQogcHVibGljIGNsYXNzIENsaWVudCBleHRlbmRzIENsaWVudFN1cGVyIHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewpAQCAtNDcsNyArNDcsNyBAQAogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiZWpiLWVqYjMwLWhlbGxvLXNlc3Npb24ySUQiKTsKLSAgICB9ICAKKyAgICB9CiAKICAgICBwcml2YXRlIHN0YXRpYyBARUpCIFNmdWwgc2Z1bDE7CiAgICAgcHJpdmF0ZSBzdGF0aWMgQEVKQiBTZnVsIHNmdWwyOwpAQCAtNTcsNyArNTcsNyBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgQEVKQihiZWFuTmFtZT0iU2xlc3NFSkIiKSBTbGVzcyBzbGVzczE7CiAKLSAgICAvLyBsaW5rZWQgdG8gU2xlc3NFSkIyIHZpYSBzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCAKKyAgICAvLyBsaW5rZWQgdG8gU2xlc3NFSkIyIHZpYSBzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbAogICAgIC8vIHNvIG5vIGJlYW5OYW1lIGRpc2FtYmlndWF0aW9uIGlzIG5lZWRlZAogICAgIHByaXZhdGUgc3RhdGljIEBFSkIgU2xlc3Mgc2xlc3MyOwogCkBAIC02NywxMSArNjcsMTEgQEAKIAogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxpbmcgc3VwZXJTbGVzczEiKTsKIAogICAgICAgICAgICAgU2xlc3Mgc3VwZXJTbGVzc0xvb2t1cCA9IChTbGVzcykgbmV3IGphdmF4Lm5hbWluZy5Jbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpjb21wL2Vudi9jb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmhlbGxvLnNlc3Npb24yLmNsaWVudC5DbGllbnRTdXBlci9zdXBlclNsZXNzMSIpOwpAQCAtOTUsNyArOTUsNyBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBzZnVsMS5kb1JlbW92ZU1ldGhvZFNlc3Npb25TeW5jVGVzdHMoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyBDYWxsIGFwcGxpY2F0aW9uLWRlZmluZWQgQFJlbW92ZSBtZXRob2QuIFRoaXMgbWV0aG9kIGhhcwogICAgICAgICAgICAgLy8gbm8gcmVsYXRpb25zaGlwIHRvIEVKQk9iamVjdC5yZW1vdmUoKS4gIEl0J3MgYSBjb2luY2lkZW5jZQogICAgICAgICAgICAgLy8gdGhhdCBpdCBoYXMgdGhlIHNhbWUgbmFtZS4KQEAgLTIzNiw3ICsyMzYsNyBAQAogICAgICAgICAgICAgaWYoIHIxLmdldElkKCkuZXF1YWxzKHIyLmdldElkKCkpICkgewogICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oInJlbW90ZSBwYXJhbSBwYXNzaW5nIGdldElkKCkgdGVzdCBmYWlsZWQiKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBzbGVzczMuaGVsbG8oKTsKICAgICAgICAgICAgIHNsZXNzMy5oZWxsbzMoKTsKIApAQCAtMjY1LDggKzI2NSw4IEBACiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iICwgc3RhdC5GQUlMKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAJcmV0dXJuOworCisgICAgICAgIHJldHVybjsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMi9lamIvRm9vLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjIvZWpiL0Zvby5qYXZhCmluZGV4IGQ4OTQ2OWQuLjM5NjY5YjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMi9lamIvRm9vLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yL2VqYi9Gb28uamF2YQpAQCAtMjUsNyArMjUsNyBAQAogCiAgICAgdm9pZCBjYWxsSGVsbG8oKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogICAgIFN0cmluZyBzYXlIZWxsbygpIHRocm93cyBSZW1vdGVFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBhc3NlcnRWYWxpZFJlbW90ZU9iamVjdChTdHJpbmcgbXNnKQotCXRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMi9lamIvTXlDYWxsYmFja0hhbmRsZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMi9lamIvTXlDYWxsYmFja0hhbmRsZXIuamF2YQppbmRleCAwZTRjM2RkLi5hYzhkNDBjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjIvZWpiL015Q2FsbGJhY2tIYW5kbGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yL2VqYi9NeUNhbGxiYWNrSGFuZGxlci5qYXZhCkBAIC0yMiw3ICsyMiw3IEBACiAKIHB1YmxpYyBjbGFzcyBNeUNhbGxiYWNrSGFuZGxlciB7CiAKLSAgICBAUHJlRGVzdHJveSAKKyAgICBAUHJlRGVzdHJveQogICAgIHB1YmxpYyB2b2lkIG15UHJlRGVzdE1ldGhvZChJbnZvY2F0aW9uQ29udGV4dCBpbnZDdHgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBNeUNhbGxiYWNrSGFuZGxlcjo6bXlQcmVEZXN0TWV0aG9kICIpOwogCkBAIC00NCw3ICs0NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhbGxiYWNrIGhhbmRsZXIiKTsKICAgICAgICAgfQogCi0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZDdHgucHJvY2VlZCgpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjIvZWpiL1NmdWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMi9lamIvU2Z1bC5qYXZhCmluZGV4IDE4MmJkYTYuLjY4ZjU3YjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMi9lamIvU2Z1bC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMi9lamIvU2Z1bC5qYXZhCkBAIC0zNywxNyArMzcsMTcgQEAKICAgICAvLyBmb3IgYSBtZXRob2QgdGhhdCBoYXMgQFJlbW92ZSBiZWhhdmlvciBzbyBpdCBuZWVkcyB0byB3b3JrLgogICAgIHB1YmxpYyB2b2lkIHJlbW92ZSgpOwogCi0gICAgLy8gQXNzb2NpYXRlZCB3aXRoIGFuIEBSZW1vdmUgbWV0aG9kIHRoYXQgaGFzIHJldGFpbklmRXhjZXB0aW9uPXRydWUuICAgIAorICAgIC8vIEFzc29jaWF0ZWQgd2l0aCBhbiBAUmVtb3ZlIG1ldGhvZCB0aGF0IGhhcyByZXRhaW5JZkV4Y2VwdGlvbj10cnVlLgogICAgIC8vIElmIGFyZ3VtZW50IGlzIHRydWUsIHRoZSBtZXRob2Qgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24sIHdoaWNoIHNob3VsZAogICAgIC8vIGtlZXAgdGhlIGJlYW4gZnJvbSBiZWluZyByZW1vdmVkLiAgSWYgYXJndW1lbnQgaXMgZmFsc2UsIHRoZSBiZWFuCiAgICAgLy8gc2hvdWxkIHN0bGwgYmUgcmVtb3ZlZC4KLSAgICBwdWJsaWMgdm9pZCByZW1vdmVSZXRhaW5JZkV4Y2VwdGlvbihib29sZWFuIHRocm93RXhjZXB0aW9uKSAKKyAgICBwdWJsaWMgdm9pZCByZW1vdmVSZXRhaW5JZkV4Y2VwdGlvbihib29sZWFuIHRocm93RXhjZXB0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uOwogCi0gICAgLy8gQXNzb2NpYXRlZCB3aXRoIGFuIEBSZW1vdmUgbWV0aG9kIHRoYXQgaGFzIHJldGFpbklmRXhjZXB0aW9uPWZhbHNlLiAgICAKKyAgICAvLyBBc3NvY2lhdGVkIHdpdGggYW4gQFJlbW92ZSBtZXRob2QgdGhhdCBoYXMgcmV0YWluSWZFeGNlcHRpb249ZmFsc2UuCiAgICAgLy8gV2hldGhlciB0aGUgYXJndW1lbnQgaXMgdHJ1ZSBvciBmYWxzZSwgdGhlIGJlYW4gc2hvdWxkIHN0aWxsIGJlCiAgICAgLy8gcmVtb3ZlZC4KLSAgICBwdWJsaWMgdm9pZCByZW1vdmVOb3RSZXRhaW5JZkV4Y2VwdGlvbihib29sZWFuIHRocm93RXhjZXB0aW9uKSAKKyAgICBwdWJsaWMgdm9pZCByZW1vdmVOb3RSZXRhaW5JZkV4Y2VwdGlvbihib29sZWFuIHRocm93RXhjZXB0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uOwogCiAgICAgLy8gQXNzb2NpYXRlZCB3aXRoIGFuIEBSZW1vdmUgbWV0aG9kIHRoYXQgaGFzIHJldGFpbklmRXhjZXB0aW9uPXRydWUKQEAgLTU1LDcgKzU1LDcgQEAKICAgICAvLyByZXRhaW5JZkV4Y2VwdGlvbiBvbmx5IGFwcGxpZXMgdG8gYXBwbGljYXRpb24gZXhjZXB0aW9ucywgc28KICAgICAvLyB0aGlzIGJlYW4gc2hvdWxkIGFsd2F5cyBiZSByZW1vdmVkLgogICAgIHB1YmxpYyB2b2lkIHJlbW92ZU1ldGhvZFRocm93U3lzRXhjZXB0aW9uKGJvb2xlYW4gdGhyb3dFeGNlcHRpb24pOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9SZW1vdmVNZXRob2RTZXNzaW9uU3luY1Rlc3RzKCk7Ci0gICAgICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjIvZWpiL1NmdWwyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjIvZWpiL1NmdWwyLmphdmEKaW5kZXggYTQyYzI0Yy4uYTg2ZTMzYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yL2VqYi9TZnVsMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMi9lamIvU2Z1bDIuamF2YQpAQCAtMjMsMTcgKzIzLDE3IEBACiB7CiAgICAgcHVibGljIFN0cmluZyBoZWxsbygpOwogCi0gICAgLy8gQXNzb2NpYXRlZCB3aXRoIGFuIEBSZW1vdmUgbWV0aG9kIHRoYXQgaGFzIHJldGFpbklmRXhjZXB0aW9uPXRydWUuICAgIAorICAgIC8vIEFzc29jaWF0ZWQgd2l0aCBhbiBAUmVtb3ZlIG1ldGhvZCB0aGF0IGhhcyByZXRhaW5JZkV4Y2VwdGlvbj10cnVlLgogICAgIC8vIElmIGFyZ3VtZW50IGlzIHRydWUsIHRoZSBtZXRob2Qgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24sIHdoaWNoIHNob3VsZAogICAgIC8vIGtlZXAgdGhlIGJlYW4gZnJvbSBiZWluZyByZW1vdmVkLiAgSWYgYXJndW1lbnQgaXMgZmFsc2UsIHRoZSBiZWFuCiAgICAgLy8gc2hvdWxkIHN0bGwgYmUgcmVtb3ZlZC4KLSAgICBwdWJsaWMgdm9pZCByZW1vdmVSZXRhaW5JZkV4Y2VwdGlvbihib29sZWFuIHRocm93RXhjZXB0aW9uKSAKKyAgICBwdWJsaWMgdm9pZCByZW1vdmVSZXRhaW5JZkV4Y2VwdGlvbihib29sZWFuIHRocm93RXhjZXB0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uOwogCi0gICAgLy8gQXNzb2NpYXRlZCB3aXRoIGFuIEBSZW1vdmUgbWV0aG9kIHRoYXQgaGFzIHJldGFpbklmRXhjZXB0aW9uPWZhbHNlLiAgICAKKyAgICAvLyBBc3NvY2lhdGVkIHdpdGggYW4gQFJlbW92ZSBtZXRob2QgdGhhdCBoYXMgcmV0YWluSWZFeGNlcHRpb249ZmFsc2UuCiAgICAgLy8gV2hldGhlciB0aGUgYXJndW1lbnQgaXMgdHJ1ZSBvciBmYWxzZSwgdGhlIGJlYW4gc2hvdWxkIHN0aWxsIGJlCiAgICAgLy8gcmVtb3ZlZC4KLSAgICBwdWJsaWMgdm9pZCByZW1vdmVOb3RSZXRhaW5JZkV4Y2VwdGlvbihib29sZWFuIHRocm93RXhjZXB0aW9uKSAKKyAgICBwdWJsaWMgdm9pZCByZW1vdmVOb3RSZXRhaW5JZkV4Y2VwdGlvbihib29sZWFuIHRocm93RXhjZXB0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uOwogCiAgICAgLy8gQXNzb2NpYXRlZCB3aXRoIGFuIEBSZW1vdmUgbWV0aG9kIHRoYXQgaGFzIHJldGFpbklmRXhjZXB0aW9uPXRydWUKQEAgLTQxLDUgKzQxLDUgQEAKICAgICAvLyByZXRhaW5JZkV4Y2VwdGlvbiBvbmx5IGFwcGxpZXMgdG8gYXBwbGljYXRpb24gZXhjZXB0aW9ucywgc28KICAgICAvLyB0aGlzIGJlYW4gc2hvdWxkIGFsd2F5cyBiZSByZW1vdmVkLgogICAgIHB1YmxpYyB2b2lkIHJlbW92ZU1ldGhvZFRocm93U3lzRXhjZXB0aW9uKGJvb2xlYW4gdGhyb3dFeGNlcHRpb24pOwotICAgICAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yL2VqYi9TZnVsRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjIvZWpiL1NmdWxFSkIuamF2YQppbmRleCAzOWU0NmQwLi5kNjFkMGMzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjIvZWpiL1NmdWxFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjIvZWpiL1NmdWxFSkIuamF2YQpAQCAtMzksMTAgKzM5LDEwIEBACiBAU3RhdGVmdWwKIEBUcmFuc2FjdGlvbk1hbmFnZW1lbnQoVHJhbnNhY3Rpb25NYW5hZ2VtZW50VHlwZS5CRUFOKQogCi1ARUpCcyggCi0geyBARUpCKG5hbWU9ImVqYi9UeXBlTGV2ZWxTbGVzczEiLCBiZWFuTmFtZT0iU2xlc3NFSkIiLCAKK0BFSkJzKAorIHsgQEVKQihuYW1lPSJlamIvVHlwZUxldmVsU2xlc3MxIiwgYmVhbk5hbWU9IlNsZXNzRUpCIiwKICAgICAgICBiZWFuSW50ZXJmYWNlPVNsZXNzLmNsYXNzKSwKLSAgIEBFSkIobmFtZT0iZWpiL1R5cGVMZXZlbFNsZXNzMiIsIGJlYW5OYW1lPSJTbGVzc0VKQjIiLCAKKyAgIEBFSkIobmFtZT0iZWpiL1R5cGVMZXZlbFNsZXNzMiIsIGJlYW5OYW1lPSJTbGVzc0VKQjIiLAogICAgICAgIGJlYW5JbnRlcmZhY2U9U2xlc3MuY2xhc3MpICwKICAgIEBFSkIobmFtZT0iZWpiL1NmdWxFSkIyIiwgYmVhbkludGVyZmFjZT1TZnVsMi5jbGFzcykKICB9KQpAQCAtNTEsNyArNTEsNyBAQAogQEVKQihuYW1lPSJlamIvVHlwZUxldmVsU2xlc3MzIiwgYmVhbkludGVyZmFjZT1TbGVzc1N1Yi5jbGFzcykKIEBSZW1vdGUoe1NmdWwuY2xhc3N9KQogLy8gZWpiIGlzIG5vdCByZXF1aXJlZCB0byBwdXQgYnVzaW5lc3MgaW50ZXJmYWNlIGluIGltcGxlbWVudHMgY2xhdXNlCi1wdWJsaWMgY2xhc3MgU2Z1bEVKQiAKK3B1YmxpYyBjbGFzcyBTZnVsRUpCCiB7CiAKICAgICBwcml2YXRlIEBSZXNvdXJjZSBTZXNzaW9uQ29udGV4dCBzYzsKQEAgLTY0LDcgKzY0LDcgQEAKICAgICBwcml2YXRlIEBFSkIoYmVhbk5hbWU9IlNsZXNzRUpCIikgdm9pZCBzZXRTbGVzczQoU2xlc3Mgc2xlc3MpIHsKICAgICAgICAgc2xlc3M0ID0gc2xlc3M7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBTbGVzcyBzbGVzczU7CiAgICAgQEVKQihiZWFuTmFtZT0iU2xlc3NFSkIyIikgdm9pZCBzZXRTbGVzczUoU2xlc3Mgc2xlc3MpIHsKICAgICAgICAgc2xlc3M1ID0gc2xlc3M7CkBAIC0xNzMsNyArMTczLDcgQEAKICAgICBwdWJsaWMgdm9pZCBmb28oaW50IGEsIFN0cmluZyBiKSB7CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIHRlc3RTbGVzc1JlZnMoU2xlc3MgczEsIFNsZXNzIHMyLCBTbGVzc1N1YiBzMykgCisgICAgcHJpdmF0ZSB2b2lkIHRlc3RTbGVzc1JlZnMoU2xlc3MgczEsIFNsZXNzIHMyLCBTbGVzc1N1YiBzMykKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgU3RyaW5nIHNsZXNzMUlkID0gczEuZ2V0SWQoKTsKQEAgLTIyMyw3ICsyMjMsNyBAQAogICAgICAgICBzMy5yb3VuZFRyaXAyKGMpOwogCiAgICAgICAgIHMzLmhlbGxvMygpOwotIAorCiAgICAgfQogCiAgICAgQFBvc3RDb25zdHJ1Y3QKQEAgLTI0Nyw3ICsyNDcsNyBAQAogICAgIH0KIAogICAgIEBSZW1vdmUocmV0YWluSWZFeGNlcHRpb249dHJ1ZSkKLSAgICBwdWJsaWMgdm9pZCByZW1vdmVSZXRhaW5JZkV4Y2VwdGlvbihib29sZWFuIHRocm93RXhjZXB0aW9uKSAKKyAgICBwdWJsaWMgdm9pZCByZW1vdmVSZXRhaW5JZkV4Y2VwdGlvbihib29sZWFuIHRocm93RXhjZXB0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKIAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNmdWxFSkIgIiArIHN0YXRlICsgIiByZW1vdmVSZXRhaW5JZkV4Y2VwdGlvbiIpOwpAQCAtMjU4LDEwICsyNTgsMTAgQEAKICAgICB9CiAKICAgICBAUmVtb3ZlCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlTm90UmV0YWluSWZFeGNlcHRpb24oYm9vbGVhbiB0aHJvd0V4Y2VwdGlvbikgCisgICAgcHVibGljIHZvaWQgcmVtb3ZlTm90UmV0YWluSWZFeGNlcHRpb24oYm9vbGVhbiB0aHJvd0V4Y2VwdGlvbikKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTZnVsRUpCICIgKyBzdGF0ZSArIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNmdWxFSkIgIiArIHN0YXRlICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZW1vdmVOb3RSZXRhaW5JZkV4Y2VwdGlvbiIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRocm93RXhjZXB0aW9uID0gIiArIHRocm93RXhjZXB0aW9uKTsKICAgICAgICAgaWYoIHRocm93RXhjZXB0aW9uICkgewpAQCAtMjcyLDcgKzI3Miw3IEBACiAgICAgQFJlbW92ZQogICAgIHB1YmxpYyB2b2lkIHJlbW92ZU1ldGhvZFRocm93U3lzRXhjZXB0aW9uKGJvb2xlYW4gdGhyb3dFeGNlcHRpb24pIHsKIAotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNmdWxFSkIgIiArIHN0YXRlICsgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2Z1bEVKQiAiICsgc3RhdGUgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlbW92ZU1ldGhvZFRocm93U3lzRXhjZXB0aW9uIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidGhyb3dFeGNlcHRpb24gPSAiICsgdGhyb3dFeGNlcHRpb24pOwogICAgICAgICBpZiggdGhyb3dFeGNlcHRpb24gKSB7CkBAIC0yOTksNyArMjk5LDcgQEAKICAgICAgICAgICAgIFNmdWxFSkIyLmJlZm9yZUNvbXBsZXRpb25DYWxsZWQgJiYKICAgICAgICAgICAgIFNmdWxFSkIyLmFmdGVyQ29tcGxldGlvbkNhbGxlZCApIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IGV4cGVjdGVkIFNlc3Npb25TeW5jaCBiZWhhdmlvciBmb3IgIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlbW92ZVJldGFpbklmRXhjZXB0aW9uKHRydWUpIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZW1vdmVSZXRhaW5JZkV4Y2VwdGlvbih0cnVlKSIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiU2Vzc2lvblN5bmNoIGZhaWx1cmUgZm9yICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVtb3ZlUmV0YWluSWZFeGNlcHRpb24odHJ1ZSkiKTsKQEAgLTMyMCwxMyArMzIwLDEzIEBACiAgICAgICAgICAgICAhU2Z1bEVKQjIuYmVmb3JlQ29tcGxldGlvbkNhbGxlZCAmJgogICAgICAgICAgICAgIVNmdWxFSkIyLmFmdGVyQ29tcGxldGlvbkNhbGxlZCApIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IGV4cGVjdGVkIFNlc3Npb25TeW5jaCBiZWhhdmlvciBmb3IgIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlbW92ZVJldGFpbklmRXhjZXB0aW9uKGZhbHNlKSIpOyAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZW1vdmVSZXRhaW5JZkV4Y2VwdGlvbihmYWxzZSkiKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIlNlc3Npb25TeW5jaCBmYWlsdXJlIGZvciAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlbW92ZVJldGFpbklmRXhjZXB0aW9uKHRydWUpIik7CiAgICAgICAgIH0KIAotICAgICAgICAKKwogCiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yL2VqYi9TZnVsRUpCMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yL2VqYi9TZnVsRUpCMi5qYXZhCmluZGV4IGIyZjlkZGYuLjZiOTNlZDUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMi9lamIvU2Z1bEVKQjIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjIvZWpiL1NmdWxFSkIyLmphdmEKQEAgLTQzLDEwICs0MywxMCBAQAogCiAgICAgLy8gdXNlIHNvbWUgcGFja2FnZS1sb2NhbCBtdXRhYmxlIHN0YXRpYyBzdGF0ZSB0byBjaGVjayB3aGV0aGVyCiAgICAgLy8gc2Vzc2lvbiBzeW5jaCBjYWxsYmFja3MgYXJlIGNhbGxlZCBjb3JyZWN0bHkgZm9yIEBSZW1vdmUgbWV0aG9kcy4KLSAgICAvLyBUaGlzIHByb3ZpZGVzIGEgc2ltcGxlIHdheSB0byBjaGVjayB0aGUgcmVzdWx0cyBzaW5jZSB0aGUgYmVhbiAKKyAgICAvLyBUaGlzIHByb3ZpZGVzIGEgc2ltcGxlIHdheSB0byBjaGVjayB0aGUgcmVzdWx0cyBzaW5jZSB0aGUgYmVhbgogICAgIC8vIGluc3RhbmNlIGlzIG5vIGxvbmdlciBhdmFpbGFibGUgdG8gdGhlIGNhbGxlci4gIFRoZSBjYWxsZXIgbXVzdAogICAgIC8vIGFsd2F5cyBhdCBtb3N0IG9uZSBTRlNCcyBvZiB0aGlzIGJlYW4gdHlwZSBhdCBhIHRpbWUgZm9yIHRoaXMKLSAgICAvLyB0byB3b3JrLiAgCisgICAgLy8gdG8gd29yay4KICAgICBzdGF0aWMgYm9vbGVhbiBhZnRlckJlZ2luQ2FsbGVkID0gZmFsc2U7CiAgICAgc3RhdGljIGJvb2xlYW4gYmVmb3JlQ29tcGxldGlvbkNhbGxlZCA9IGZhbHNlOwogICAgIHN0YXRpYyBib29sZWFuIGFmdGVyQ29tcGxldGlvbkNhbGxlZCA9IGZhbHNlOwpAQCAtNjAsNyArNjAsNyBAQAogICAgIH0KIAogICAgIEBSZW1vdmUocmV0YWluSWZFeGNlcHRpb249dHJ1ZSkKLSAgICBwdWJsaWMgdm9pZCByZW1vdmVSZXRhaW5JZkV4Y2VwdGlvbihib29sZWFuIHRocm93RXhjZXB0aW9uKSAKKyAgICBwdWJsaWMgdm9pZCByZW1vdmVSZXRhaW5JZkV4Y2VwdGlvbihib29sZWFuIHRocm93RXhjZXB0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKIAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNmdWxFSkIyICIgKwpAQCAtNzIsNyArNzIsNyBAQAogICAgIH0KIAogICAgIEBSZW1vdmUKLSAgICBwdWJsaWMgdm9pZCByZW1vdmVOb3RSZXRhaW5JZkV4Y2VwdGlvbihib29sZWFuIHRocm93RXhjZXB0aW9uKSAKKyAgICBwdWJsaWMgdm9pZCByZW1vdmVOb3RSZXRhaW5JZkV4Y2VwdGlvbihib29sZWFuIHRocm93RXhjZXB0aW9uKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKIAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNmdWxFSkIyICIgKwpAQCAtODYsNyArODYsNyBAQAogICAgIEBSZW1vdmUKICAgICBwdWJsaWMgdm9pZCByZW1vdmVNZXRob2RUaHJvd1N5c0V4Y2VwdGlvbihib29sZWFuIHRocm93RXhjZXB0aW9uKSB7CiAKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTZnVsRUpCMiAiICsgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2Z1bEVKQjIgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVtb3ZlTWV0aG9kVGhyb3dTeXNFeGNlcHRpb24iKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0aHJvd0V4Y2VwdGlvbiA9ICIgKyB0aHJvd0V4Y2VwdGlvbik7CiAgICAgICAgIGlmKCB0aHJvd0V4Y2VwdGlvbiApIHsKQEAgLTEwMCw3ICsxMDAsNyBAQAogICAgICAgICBhZnRlckJlZ2luQ2FsbGVkID0gdHJ1ZTsKICAgICAgICAgYmVmb3JlQ29tcGxldGlvbkNhbGxlZCA9IGZhbHNlOwogICAgICAgICBhZnRlckNvbXBsZXRpb25DYWxsZWQgPSBmYWxzZTsKLSAgICAgICAgCisKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTZnVsRUpCMjo6YWZ0ZXJCZWdpbigpIik7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjIvZWpiL1NsZXNzRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjIvZWpiL1NsZXNzRUpCLmphdmEKaW5kZXggOTAwZWVkMi4uM2Y4NmM2NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yL2VqYi9TbGVzc0VKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMi9lamIvU2xlc3NFSkIuamF2YQpAQCAtMzMsNyArMzMsNyBAQAogCiBAUmVtb3RlKFNsZXNzLmNsYXNzKQogQFJlbW90ZUhvbWUoU2xlc3NSZW1vdGVIb21lLmNsYXNzKQotcHVibGljIGNsYXNzIFNsZXNzRUpCIAorcHVibGljIGNsYXNzIFNsZXNzRUpCCiB7CiAgICAgQFJlc291cmNlKG5hbWU9Im51bGwiKSBTZXNzaW9uQ29udGV4dCBzYzsKIApAQCAtNjYsMTEgKzY2LDExIEBACiAgICAgfQogCiAgICAgcHVibGljIENvbGxlY3Rpb24gcm91bmRUcmlwMihDb2xsZWN0aW9uIGNvbGxlY3Rpb25PZlNsZXNzKSB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2xlc3NFSkI6OnJvdW5kVHJpcDIgIiArIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNsZXNzRUpCOjpyb3VuZFRyaXAyICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbk9mU2xlc3MpOwogICAgICAgICBpZiggY29sbGVjdGlvbk9mU2xlc3Muc2l6ZSgpID4gMCApIHsKICAgICAgICAgICAgIFNsZXNzIHNsZXNzID0gKFNsZXNzKSBjb2xsZWN0aW9uT2ZTbGVzcy5pdGVyYXRvcigpLm5leHQoKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW5wdXQgU2xlc3MuZ2V0SWQoKSA9ICIgKyBzbGVzcy5nZXRJZCgpKTsgIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnB1dCBTbGVzcy5nZXRJZCgpID0gIiArIHNsZXNzLmdldElkKCkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjb2xsZWN0aW9uT2ZTbGVzczsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjIvZWpiL1NsZXNzRUpCMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yL2VqYi9TbGVzc0VKQjIuamF2YQppbmRleCA1ZDgxZGUzLi4xZTVhODVmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjIvZWpiL1NsZXNzRUpCMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMi9lamIvU2xlc3NFSkIyLmphdmEKQEAgLTQzLDcgKzQzLDcgQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNsZXNzRUpCMjo6ZWpiQ3JlYXRlKCkiKTsgICAgICAgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNsZXNzRUpCMjo6ZWpiQ3JlYXRlKCkiKTsKICAgICAgICAgcG9zdENvbnN0cnVjdENhbGxlZCA9IHRydWU7CiAgICAgfQogCkBAIC03Miw3ICs3Miw3IEBACiAgICAgcHVibGljIFN0cmluZyBnZXRJZCgpIHsKIAogICAgICAgICB0cnkgewotICAgICAgICAgICAgLy8gUHJvcHJpZXRhcnkgd2F5IHRvIGxvb2sgdXAgdHggbWFuYWdlci4gIAorICAgICAgICAgICAgLy8gUHJvcHJpZXRhcnkgd2F5IHRvIGxvb2sgdXAgdHggbWFuYWdlci4KICAgICAgICAgICAgIFRyYW5zYWN0aW9uTWFuYWdlciB0bSA9IChUcmFuc2FjdGlvbk1hbmFnZXIpCiAgICAgICAgICAgICAgICAgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmFwcHNlcnZlci9UcmFuc2FjdGlvbk1hbmFnZXIiKTsKICAgICAgICAgICAgIC8vIFVzZSBhbiBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYyBjaGVjayB0byBlbnN1cmUgdGhhdCB0aGVyZQpAQCAtOTQsNyArOTQsNyBAQAogCiAgICAgICAgIHJldHVybiAiU2xlc3NFSkIyIjsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU2xlc3Mgcm91bmRUcmlwKFNsZXNzIHMpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTbGVzc0VKQjI6OnJvdW5kVHJpcCAiICsgcyk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW5wdXQgU2xlc3MuZ2V0SWQoKSA9ICIgKyBzLmdldElkKCkpOwpAQCAtMTAyLDEyICsxMDIsMTIgQEAKICAgICB9CiAKICAgICBwdWJsaWMgQ29sbGVjdGlvbiByb3VuZFRyaXAyKENvbGxlY3Rpb24gY29sbGVjdGlvbk9mU2xlc3MpIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTbGVzc0VKQjI6OnJvdW5kVHJpcDIgIiArIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNsZXNzRUpCMjo6cm91bmRUcmlwMiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25PZlNsZXNzKTsKIAogICAgICAgICBpZiggY29sbGVjdGlvbk9mU2xlc3Muc2l6ZSgpID4gMCApIHsKICAgICAgICAgICAgIFNsZXNzIHNsZXNzID0gKFNsZXNzKSBjb2xsZWN0aW9uT2ZTbGVzcy5pdGVyYXRvcigpLm5leHQoKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW5wdXQgU2xlc3MuZ2V0SWQoKSA9ICIgKyBzbGVzcy5nZXRJZCgpKTsgIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnB1dCBTbGVzcy5nZXRJZCgpID0gIiArIHNsZXNzLmdldElkKCkpOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZlNsZXNzOwpAQCAtMTE4LDEwICsxMTgsMTAgQEAKICAgICAgICAgc2NfID0gc2M7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgCisgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkKICAgICB7fQogCi0gICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSAKKyAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpCiAgICAge30KIAogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjIvZWpiL1NsZXNzRUpCMy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yL2VqYi9TbGVzc0VKQjMuamF2YQppbmRleCAwOTgxMWYzLi40MGM2YWY5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjIvZWpiL1NsZXNzRUpCMy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMi9lamIvU2xlc3NFSkIzLmphdmEKQEAgLTM5LDcgKzM5LDcgQEAKIAogICAgIHByaXZhdGUgQFJlc291cmNlIFNlc3Npb25Db250ZXh0IGVqYkNvbnRleHQyOwogCi0gICAgQFJlc291cmNlKHR5cGU9amFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQuY2xhc3MpIAorICAgIEBSZXNvdXJjZSh0eXBlPWpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0LmNsYXNzKQogICAgIHByaXZhdGUgRUpCQ29udGV4dCBlamJDb250ZXh0MzsKIAogICAgIHByaXZhdGUgRUpCQ29udGV4dCBlamJDb250ZXh0NDsKQEAgLTc4LDcgKzc4LDcgQEAKICAgICAgICAgcHJpdmF0ZSB2b2lkIHNldEVKQkNvbnRleHQ2KEVKQkNvbnRleHQgY29udGV4dCkgewogICAgICAgICBlamJDb250ZXh0NiA9IGNvbnRleHQ7CiAgICAgfQotICAgIAorCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwdWJsaWMgdm9pZCBhZnRlckNyZWF0ZSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTbGVzc0VKQjM6OmFmdGVyQ3JlYXRlKCkgbWFya2VkIGFzIFBvc3RDb25zdHJ1Y3QiKTsKQEAgLTEzNiwxMyArMTM2LDEzIEBACiAgICAgfQogCiAgICAgcHVibGljIENvbGxlY3Rpb24gcm91bmRUcmlwMihDb2xsZWN0aW9uIGNvbGxlY3Rpb25PZlNsZXNzKSB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2xlc3NFSkIzOjpyb3VuZFRyaXAyICIgKyAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTbGVzc0VKQjM6OnJvdW5kVHJpcDIgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uT2ZTbGVzcyk7CiAgICAgICAgIGlmKCBjb2xsZWN0aW9uT2ZTbGVzcy5zaXplKCkgPiAwICkgewogICAgICAgICAgICAgU2xlc3Mgc2xlc3MgPSAoU2xlc3MpIGNvbGxlY3Rpb25PZlNsZXNzLml0ZXJhdG9yKCkubmV4dCgpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnB1dCBTbGVzcy5nZXRJZCgpID0gIiArIHNsZXNzLmdldElkKCkpOyAgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlucHV0IFNsZXNzLmdldElkKCkgPSAiICsgc2xlc3MuZ2V0SWQoKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZlNsZXNzOwotICAgIH0gICAgCisgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjJmdWxsL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjJmdWxsL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggODM0MjljMi4uNzdkMzc3ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yZnVsbC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMmZ1bGwvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzAtaGVsbG8tc2Vzc2lvbjJmdWxsIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjJmdWxsL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMmZ1bGwvYnVpbGQueG1sCmluZGV4IDIxZjA2ZTUuLmU2MTI3ZmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMmZ1bGwvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMmZ1bGwvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NiwxNCArNDYsMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLyoqLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0NsaWVudFN1cGVyLmNsYXNzLCoqL0NsaWVudC5jbGFzcywqKi9TbGVzcy5jbGFzcywqKi9TbGVzc1N1Yi5jbGFzcywqKi9TZnVsLmNsYXNzLCoqL0V4dGVybmFsQnVzaW5lc3MuY2xhc3MsKiovRm9vSG9tZS5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYxLDEwICs2MSwxMCBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjJmdWxsL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMmZ1bGwvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDJlNjg3YjIuLjYyY2IxNzkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMmZ1bGwvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMmZ1bGwvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNiw3ICsyNiw3IEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgZXh0ZW5kcyBDbGllbnRTdXBlciB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTM1LDcgKzM1LDcgQEAKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImVqYi1lamIzMC1oZWxsby1zZXNzaW9uMmZ1bGxJRCIpOwotICAgIH0gIAorICAgIH0KIAogICAgIHByaXZhdGUgc3RhdGljIFNmdWwgc2Z1bDE7CiAgICAgcHJpdmF0ZSBzdGF0aWMgU2Z1bCBzZnVsMjsKQEAgLTQ0LDcgKzQ0LDcgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIFNsZXNzIHNsZXNzMTsKIAotICAgIC8vIGxpbmtlZCB0byBTbGVzc0VKQjIgdmlhIHN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIAorICAgIC8vIGxpbmtlZCB0byBTbGVzc0VKQjIgdmlhIHN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sCiAgICAgLy8gc28gbm8gYmVhbk5hbWUgZGlzYW1iaWd1YXRpb24gaXMgbmVlZGVkCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2xlc3Mgc2xlc3MyOwogCkBAIC01NCwxMSArNTQsMTEgQEAKIAogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxpbmcgc3VwZXJTbGVzczEiKTsKICAgICAgICAgICAgIHN1cGVyU2xlc3MxLmhlbGxvKCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxlZCBzdXBlclNsZXNzMSIpOwpAQCAtNzgsNyArNzgsNyBAQAogICAgICAgICAgICAgaWYoIGdldDEuZXF1YWxzKGdldDIpICkgewogICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlNGU0IgZ2V0IHRlc3QgZmFpbGVkIik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgLy8gQ2FsbCBhcHBsaWNhdGlvbi1kZWZpbmVkIEBSZW1vdmUgbWV0aG9kLiBUaGlzIG1ldGhvZCBoYXMKICAgICAgICAgICAgIC8vIG5vIHJlbGF0aW9uc2hpcCB0byBFSkJPYmplY3QucmVtb3ZlKCkuICBJdCdzIGEgY29pbmNpZGVuY2UKICAgICAgICAgICAgIC8vIHRoYXQgaXQgaGFzIHRoZSBzYW1lIG5hbWUuCkBAIC0xOTYsNyArMTk2LDcgQEAKICAgICAgICAgICAgIGlmKCByMS5nZXRJZCgpLmVxdWFscyhyMi5nZXRJZCgpKSApIHsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJyZW1vdGUgcGFyYW0gcGFzc2luZyBnZXRJZCgpIHRlc3QgZmFpbGVkIik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgc2xlc3MzLmhlbGxvKCk7CiAgICAgICAgICAgICBzbGVzczMuaGVsbG8zKCk7CiAKQEAgLTIyNyw4ICsyMjcsOCBAQAogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiAsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgCXJldHVybjsKKworICAgICAgICByZXR1cm47CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjJmdWxsL2Rlc2NyaXB0b3IvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjJmdWxsL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggNjkyMTZiNC4uMjA2NzZmMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yZnVsbC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMmZ1bGwvZGVzY3JpcHRvci9lamItamFyLnhtbApAQCAtMjM0LDcgKzIzNCw3IEBACiAgICAgICAgPGludGVyY2VwdG9yLWNsYXNzPmNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaGVsbG8uc2Vzc2lvbjJmdWxsLk15Q2FsbGJhY2tIYW5kbGVyPC9pbnRlcmNlcHRvci1jbGFzcz4KICAgICAgICA8cHJlLWRlc3Ryb3k+CiAgICAgICAgICA8bGlmZWN5Y2xlLWNhbGxiYWNrLW1ldGhvZD5teVByZURlc3Ryb3lNZXRob2Q8L2xpZmVjeWNsZS1jYWxsYmFjay1tZXRob2Q+Ci0gICAgICAgPC9wcmUtZGVzdHJveT4gIAorICAgICAgIDwvcHJlLWRlc3Ryb3k+CiAgICAgIDwvaW50ZXJjZXB0b3I+CiAgIDwvaW50ZXJjZXB0b3JzPgogICA8YXNzZW1ibHktZGVzY3JpcHRvcj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMmZ1bGwvZWpiL0Zvby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yZnVsbC9lamIvRm9vLmphdmEKaW5kZXggNjIxOGQzMS4uOGE1Yzc5NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yZnVsbC9lamIvRm9vLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yZnVsbC9lamIvRm9vLmphdmEKQEAgLTI1LDcgKzI1LDcgQEAKIAogICAgIHZvaWQgY2FsbEhlbGxvKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKICAgICBTdHJpbmcgc2F5SGVsbG8oKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gYXNzZXJ0VmFsaWRSZW1vdGVPYmplY3QoU3RyaW5nIG1zZykKLQl0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjJmdWxsL2VqYi9TZnVsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjJmdWxsL2VqYi9TZnVsLmphdmEKaW5kZXggMjFlZWQ4OC4uY2U5YWJmYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yZnVsbC9lamIvU2Z1bC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMmZ1bGwvZWpiL1NmdWwuamF2YQpAQCAtMzcsMTYgKzM3LDE2IEBACiAgICAgLy8gZm9yIGEgbWV0aG9kIHRoYXQgaGFzIEBSZW1vdmUgYmVoYXZpb3Igc28gaXQgbmVlZHMgdG8gd29yay4KICAgICBwdWJsaWMgdm9pZCByZW1vdmUoKTsKIAotICAgIC8vIEFzc29jaWF0ZWQgd2l0aCBhbiBAUmVtb3ZlIG1ldGhvZCB0aGF0IGhhcyByZXRhaW5JZkV4Y2VwdGlvbj10cnVlLiAgICAKKyAgICAvLyBBc3NvY2lhdGVkIHdpdGggYW4gQFJlbW92ZSBtZXRob2QgdGhhdCBoYXMgcmV0YWluSWZFeGNlcHRpb249dHJ1ZS4KICAgICAvLyBJZiBhcmd1bWVudCBpcyB0cnVlLCB0aGUgbWV0aG9kIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uLCB3aGljaCBzaG91bGQKICAgICAvLyBrZWVwIHRoZSBiZWFuIGZyb20gYmVpbmcgcmVtb3ZlZC4gIElmIGFyZ3VtZW50IGlzIGZhbHNlLCB0aGUgYmVhbgogICAgIC8vIHNob3VsZCBzdGxsIGJlIHJlbW92ZWQuCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlUmV0YWluSWZFeGNlcHRpb24oYm9vbGVhbiB0aHJvd0V4Y2VwdGlvbikgCisgICAgcHVibGljIHZvaWQgcmVtb3ZlUmV0YWluSWZFeGNlcHRpb24oYm9vbGVhbiB0aHJvd0V4Y2VwdGlvbikKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbjsKIAotICAgIC8vIEFzc29jaWF0ZWQgd2l0aCBhbiBAUmVtb3ZlIG1ldGhvZCB0aGF0IGhhcyByZXRhaW5JZkV4Y2VwdGlvbj1mYWxzZS4gICAgCisgICAgLy8gQXNzb2NpYXRlZCB3aXRoIGFuIEBSZW1vdmUgbWV0aG9kIHRoYXQgaGFzIHJldGFpbklmRXhjZXB0aW9uPWZhbHNlLgogICAgIC8vIFdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIHRydWUgb3IgZmFsc2UsIHRoZSBiZWFuIHNob3VsZCBzdGlsbCBiZQogICAgIC8vIHJlbW92ZWQuCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlTm90UmV0YWluSWZFeGNlcHRpb24oYm9vbGVhbiB0aHJvd0V4Y2VwdGlvbikgCisgICAgcHVibGljIHZvaWQgcmVtb3ZlTm90UmV0YWluSWZFeGNlcHRpb24oYm9vbGVhbiB0aHJvd0V4Y2VwdGlvbikKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbjsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMmZ1bGwvZWpiL1NmdWxFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMmZ1bGwvZWpiL1NmdWxFSkIuamF2YQppbmRleCBjZmU5NTdmLi4xMmRlYzYzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjJmdWxsL2VqYi9TZnVsRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yZnVsbC9lamIvU2Z1bEVKQi5qYXZhCkBAIC0yNSw3ICsyNSw3IEBACiBpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CiBpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CiAKLXB1YmxpYyBjbGFzcyBTZnVsRUpCIAorcHVibGljIGNsYXNzIFNmdWxFSkIKIHsKIAogICAgIHByaXZhdGUgU2Vzc2lvbkNvbnRleHQgc2M7CkBAIC0zOSw3ICszOSw3IEBACiAgICAgcHJpdmF0ZSB2b2lkIHNldFNsZXNzNChTbGVzcyBzbGVzcykgewogICAgICAgICBzbGVzczRfID0gc2xlc3M7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBTbGVzcyBzbGVzczVfOwogICAgIHZvaWQgc2V0U2xlc3M1KFNsZXNzIHNsZXNzKSB7CiAgICAgICAgIHNsZXNzNV8gPSBzbGVzczsKQEAgLTEwOCw3ICsxMDgsNyBAQAogICAgIHB1YmxpYyB2b2lkIGZvbyhpbnQgYSwgU3RyaW5nIGIpIHsKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgdGVzdFNsZXNzUmVmcyhTbGVzcyBzMSwgU2xlc3MgczIsIFNsZXNzU3ViIHMzKSAKKyAgICBwcml2YXRlIHZvaWQgdGVzdFNsZXNzUmVmcyhTbGVzcyBzMSwgU2xlc3MgczIsIFNsZXNzU3ViIHMzKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKIAogICAgICAgICBTdHJpbmcgc2xlc3MxSWQgPSBzMS5nZXRJZCgpOwpAQCAtMTU4LDcgKzE1OCw3IEBACiAgICAgICAgIHMzLnJvdW5kVHJpcDIoYyk7CiAKICAgICAgICAgczMuaGVsbG8zKCk7Ci0gCisKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBhZnRlckNyZWF0ZSgpIHsKQEAgLTE2OSw3ICsxNjksNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNmdWxFSkIgIiArIHN0YXRlICsgIiBAUmVtb3ZlIG1ldGhvZCIpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHJlbW92ZVJldGFpbklmRXhjZXB0aW9uKGJvb2xlYW4gdGhyb3dFeGNlcHRpb24pIAorICAgIHB1YmxpYyB2b2lkIHJlbW92ZVJldGFpbklmRXhjZXB0aW9uKGJvb2xlYW4gdGhyb3dFeGNlcHRpb24pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2Z1bEVKQiAiICsgc3RhdGUgKyAiIHJlbW92ZVJldGFpbklmRXhjZXB0aW9uIik7CkBAIC0xNzksMTAgKzE3OSwxMCBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlTm90UmV0YWluSWZFeGNlcHRpb24oYm9vbGVhbiB0aHJvd0V4Y2VwdGlvbikgCisgICAgcHVibGljIHZvaWQgcmVtb3ZlTm90UmV0YWluSWZFeGNlcHRpb24oYm9vbGVhbiB0aHJvd0V4Y2VwdGlvbikKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTZnVsRUpCICIgKyBzdGF0ZSArIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNmdWxFSkIgIiArIHN0YXRlICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZW1vdmVOb3RSZXRhaW5JZkV4Y2VwdGlvbiIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRocm93RXhjZXB0aW9uID0gIiArIHRocm93RXhjZXB0aW9uKTsKICAgICAgICAgaWYoIHRocm93RXhjZXB0aW9uICkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yZnVsbC9lamIvU2xlc3NFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMmZ1bGwvZWpiL1NsZXNzRUpCLmphdmEKaW5kZXggMTU2NDg2My4uNTY1MDcxNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yZnVsbC9lamIvU2xlc3NFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjJmdWxsL2VqYi9TbGVzc0VKQi5qYXZhCkBAIC0yMiw3ICsyMiw3IEBACiBpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwogaW1wb3J0IGpha2FydGEudHJhbnNhY3Rpb24uVXNlclRyYW5zYWN0aW9uOwogCi1wdWJsaWMgY2xhc3MgU2xlc3NFSkIgCitwdWJsaWMgY2xhc3MgU2xlc3NFSkIKIHsKIAogCkBAIC00NiwxMSArNDYsMTEgQEAKICAgICB9CiAKICAgICBwdWJsaWMgQ29sbGVjdGlvbiByb3VuZFRyaXAyKENvbGxlY3Rpb24gY29sbGVjdGlvbk9mU2xlc3MpIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTbGVzc0VKQjo6cm91bmRUcmlwMiAiICsgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2xlc3NFSkI6OnJvdW5kVHJpcDIgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uT2ZTbGVzcyk7CiAgICAgICAgIGlmKCBjb2xsZWN0aW9uT2ZTbGVzcy5zaXplKCkgPiAwICkgewogICAgICAgICAgICAgU2xlc3Mgc2xlc3MgPSAoU2xlc3MpIGNvbGxlY3Rpb25PZlNsZXNzLml0ZXJhdG9yKCkubmV4dCgpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnB1dCBTbGVzcy5nZXRJZCgpID0gIiArIHNsZXNzLmdldElkKCkpOyAgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlucHV0IFNsZXNzLmdldElkKCkgPSAiICsgc2xlc3MuZ2V0SWQoKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZlNsZXNzOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMmZ1bGwvZWpiL1NsZXNzRUpCMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yZnVsbC9lamIvU2xlc3NFSkIyLmphdmEKaW5kZXggOTA0MmIzMy4uZmI2ODIwMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yZnVsbC9lamIvU2xlc3NFSkIyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24yZnVsbC9lamIvU2xlc3NFSkIyLmphdmEKQEAgLTUzLDcgKzUzLDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldElkKCkgewogCiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAvLyBQcm9wcmlldGFyeSB3YXkgdG8gbG9vayB1cCB0eCBtYW5hZ2VyLiAgCisgICAgICAgICAgICAvLyBQcm9wcmlldGFyeSB3YXkgdG8gbG9vayB1cCB0eCBtYW5hZ2VyLgogICAgICAgICAgICAgVHJhbnNhY3Rpb25NYW5hZ2VyIHRtID0gKFRyYW5zYWN0aW9uTWFuYWdlcikKICAgICAgICAgICAgICAgICBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6YXBwc2VydmVyL1RyYW5zYWN0aW9uTWFuYWdlciIpOwogICAgICAgICAgICAgLy8gVXNlIGFuIGltcGxlbWVudGF0aW9uLXNwZWNpZmljIGNoZWNrIHRvIGVuc3VyZSB0aGF0IHRoZXJlCkBAIC03NSw3ICs3NSw3IEBACiAKICAgICAgICAgcmV0dXJuICJTbGVzc0VKQjIiOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTbGVzcyByb3VuZFRyaXAoU2xlc3MgcykgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNsZXNzRUpCMjo6cm91bmRUcmlwICIgKyBzKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnB1dCBTbGVzcy5nZXRJZCgpID0gIiArIHMuZ2V0SWQoKSk7CkBAIC04MywxMiArODMsMTIgQEAKICAgICB9CiAKICAgICBwdWJsaWMgQ29sbGVjdGlvbiByb3VuZFRyaXAyKENvbGxlY3Rpb24gY29sbGVjdGlvbk9mU2xlc3MpIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTbGVzc0VKQjI6OnJvdW5kVHJpcDIgIiArIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNsZXNzRUpCMjo6cm91bmRUcmlwMiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25PZlNsZXNzKTsKIAogICAgICAgICBpZiggY29sbGVjdGlvbk9mU2xlc3Muc2l6ZSgpID4gMCApIHsKICAgICAgICAgICAgIFNsZXNzIHNsZXNzID0gKFNsZXNzKSBjb2xsZWN0aW9uT2ZTbGVzcy5pdGVyYXRvcigpLm5leHQoKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW5wdXQgU2xlc3MuZ2V0SWQoKSA9ICIgKyBzbGVzcy5nZXRJZCgpKTsgIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnB1dCBTbGVzcy5nZXRJZCgpID0gIiArIHNsZXNzLmdldElkKCkpOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZlNsZXNzOwpAQCAtMTAzLDEwICsxMDMsMTAgQEAKICAgICAgICAgc2NfID0gc2M7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgCisgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkKICAgICB7fQogCi0gICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSAKKyAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpCiAgICAge30KIAogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjJmdWxsL2VqYi9TbGVzc0VKQjMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMmZ1bGwvZWpiL1NsZXNzRUpCMy5qYXZhCmluZGV4IDViYzQzNjIuLmRmM2I2ODMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMmZ1bGwvZWpiL1NsZXNzRUpCMy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMmZ1bGwvZWpiL1NsZXNzRUpCMy5qYXZhCkBAIC00OSw3ICs0OSw3IEBACiAgICAgcHJpdmF0ZSB2b2lkIHNldEVKQkNvbnRleHQ2KEVKQkNvbnRleHQgY29udGV4dCkgewogICAgICAgICBlamJDb250ZXh0Nl8gPSBjb250ZXh0OwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgaGVsbG8oKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2xlc3NFSkIzOmhlbGxvKCkiKTsKIApAQCAtOTcsMTMgKzk3LDEzIEBACiAgICAgfQogCiAgICAgcHVibGljIENvbGxlY3Rpb24gcm91bmRUcmlwMihDb2xsZWN0aW9uIGNvbGxlY3Rpb25PZlNsZXNzKSB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2xlc3NFSkIzOjpyb3VuZFRyaXAyICIgKyAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTbGVzc0VKQjM6OnJvdW5kVHJpcDIgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uT2ZTbGVzcyk7CiAgICAgICAgIGlmKCBjb2xsZWN0aW9uT2ZTbGVzcy5zaXplKCkgPiAwICkgewogICAgICAgICAgICAgU2xlc3Mgc2xlc3MgPSAoU2xlc3MpIGNvbGxlY3Rpb25PZlNsZXNzLml0ZXJhdG9yKCkubmV4dCgpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnB1dCBTbGVzcy5nZXRJZCgpID0gIiArIHNsZXNzLmdldElkKCkpOyAgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlucHV0IFNsZXNzLmdldElkKCkgPSAiICsgc2xlc3MuZ2V0SWQoKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZlNsZXNzOwotICAgIH0gICAgCisgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDk2NmUwZjguLmIxNTU2NWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMyArMTUsMjMgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lamIzMC1oZWxsby1zZXNzaW9uMyIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjMvYnVpbGQueG1sCmluZGV4IDRkNjgwZmYuLjE0N2Q0YjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24zL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTU2LDcgKzU2LDcgQEAKICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXBwY2xpZW50LWphci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQqLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+CiAKQEAgLTY5LDcgKzY5LDcgQEAKICAgICAgICAgPC9qYXI+CiAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJlamItamFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovSGVsbG8qKi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgogCkBAIC04Miw4ICs4Miw4IEBACiAgICAgICAgICAgICAgPC9maWxlc2V0PgogICAgICAgICA8L2phcj4KIAotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGUuc3FsIi8+CkBAIC05Niw3ICs5Niw3IEBACiAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtMTA2LDEwICsxMDYsMTAgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIke2h0dHAuaG9zdH0gJHtodHRwLnBvcnR9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24zL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMy9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggNDkxYzcxYi4uYTZiNDcxNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24zL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjMvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMSwzMyArMzEsMzMgQEAKIGltcG9ydCBqYWthcnRhLnBlcnNpc3RlbmNlLkVudGl0eU1hbmFnZXI7CiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewotICAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgaG9zdDsKICAgICBwcml2YXRlIFN0cmluZyBwb3J0OwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKLSAgICBAUGVyc2lzdGVuY2VVbml0IAorICAgIEBQZXJzaXN0ZW5jZVVuaXQKICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgRW50aXR5TWFuYWdlckZhY3RvcnkgZW1mMTsKIAotICAgIEBQZXJzaXN0ZW5jZVVuaXQobmFtZT0ibXllbWYiLCB1bml0TmFtZT0iZm9vIikgCisgICAgQFBlcnNpc3RlbmNlVW5pdChuYW1lPSJteWVtZiIsIHVuaXROYW1lPSJmb28iKQogICAgICAgICBwcml2YXRlIHN0YXRpYyBFbnRpdHlNYW5hZ2VyRmFjdG9yeSBlbWYyOwogCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgICAgICBob3N0ID0gKCBhcmdzLmxlbmd0aCA+IDApID8gYXJnc1swXSA6ICJsb2NhbGhvc3QiOwogICAgICAgICBwb3J0ID0gKCBhcmdzLmxlbmd0aCA+IDEpID8gYXJnc1sxXSA6ICI0ODQ4IjsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oImVqYi1lamIzMC1oZWxsby1zZXNzaW9uM2NsaWVudCIpOwogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiZWpiLWVqYjMwLWhlbGxvLXNlc3Npb24zSUQiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyBlbnYgPSBudWxsOwogICAgICAgICB0cnkgewogCkBAIC04MSwxMSArODEsMTEgQEAKICAgICAgICAgICAgIH0KIAogCi0gICAgICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyAKKyAgICAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArCiAgICAgICAgICAgICAgICAgIi9lamItZWpiMzAtaGVsbG8tc2Vzc2lvbjMvc2VydmxldCI7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImludm9raW5nIHdlYmNsaWVudCBzZXJ2bGV0IGF0ICIgKyB1cmwpOwogICAgICAgICAgICAgaW50IGNvZGUgPSBpbnZva2VTZXJ2bGV0KHVybCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYoY29kZSAhPSAyMDApIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluY29ycmVjdCByZXR1cm4gY29kZTogIiArIGNvZGUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3ZWJjbGllbnQgbWFpbiIsIHN0YXQuRkFJTCk7CkBAIC05NywxNSArOTcsMTUgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3ZWJjbGllbnQgbWFpbiIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXR1cm47Ci0gICAgICAgIAorCiAgICAgfQogCiAgICAgcHJpdmF0ZSBpbnQgaW52b2tlU2VydmxldChTdHJpbmcgdXJsKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgICAgIAorCiAgICAgICAgIFVSTCB1ID0gbmV3IFVSTCh1cmwpOwotICAgICAgICAKKwogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjMSA9IChIdHRwVVJMQ29ubmVjdGlvbil1Lm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgIGludCBjb2RlID0gYzEuZ2V0UmVzcG9uc2VDb2RlKCk7CiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gYzEuZ2V0SW5wdXRTdHJlYW0oKTsKQEAgLTExOCw2ICsxMTgsNiBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjb2RlOwogICAgIH0KLSAgICAKKwogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjMvY2xpZW50L1BlcnNvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24zL2NsaWVudC9QZXJzb24uamF2YQppbmRleCBmMGYxN2IwLi5mNzE2OGM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjMvY2xpZW50L1BlcnNvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMy9jbGllbnQvUGVyc29uLmphdmEKQEAgLTMwLDEwICszMCwxMCBAQAogICAgIHB1YmxpYyBQZXJzb24oU3RyaW5nIG5hbWUpewogICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZSBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCl7CiAgICAgICAgIHJldHVybiAiUGVyc29uOiB7IisiKG5hbWUgPSAiK25hbWUrIil9IjsKICAgICB9CiAKIH0KLSAKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24zL2VqYi9IZWxsby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24zL2VqYi9IZWxsby5qYXZhCmluZGV4IGE1ZDkzM2YuLjU0YmNjYTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMy9lamIvSGVsbG8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjMvZWpiL0hlbGxvLmphdmEKQEAgLTE5LDUgKzE5LDUgQEAKIHB1YmxpYyBpbnRlcmZhY2UgSGVsbG8gewogCiAgICAgcHVibGljIHZvaWQgaGVsbG8oKTsKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24zL2VqYi9IZWxsb0VKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24zL2VqYi9IZWxsb0VKQi5qYXZhCmluZGV4IGFmOTU3ZjAuLmY5MzgzOWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMy9lamIvSGVsbG9FSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjMvZWpiL0hlbGxvRUpCLmphdmEKQEAgLTI4LDE2ICsyOCwxNiBAQAogCiBAU3RhdGVsZXNzIHB1YmxpYyBjbGFzcyBIZWxsb0VKQiBpbXBsZW1lbnRzIEhlbGxvIHsKIAotICAgIEBQZXJzaXN0ZW5jZVVuaXQgCisgICAgQFBlcnNpc3RlbmNlVW5pdAogICAgICAgICBwcml2YXRlIEVudGl0eU1hbmFnZXJGYWN0b3J5IGVtZjE7CiAKLSAgICBAUGVyc2lzdGVuY2VVbml0KG5hbWU9Im15ZW1mIiwgdW5pdE5hbWU9ImZvbyIpIAorICAgIEBQZXJzaXN0ZW5jZVVuaXQobmFtZT0ibXllbWYiLCB1bml0TmFtZT0iZm9vIikKICAgICAgICAgcHJpdmF0ZSBFbnRpdHlNYW5hZ2VyRmFjdG9yeSBlbWYyOwogCiAgICAgQFBlcnNpc3RlbmNlQ29udGV4dAogICAgICAgICBwcml2YXRlIEVudGl0eU1hbmFnZXIgZW0xOwogCi0gICAgQFBlcnNpc3RlbmNlQ29udGV4dChuYW1lPSJteWVtIiwgdW5pdE5hbWU9ImZvbyIpIAorICAgIEBQZXJzaXN0ZW5jZUNvbnRleHQobmFtZT0ibXllbSIsIHVuaXROYW1lPSJmb28iKQogICAgICAgICBwcml2YXRlIEVudGl0eU1hbmFnZXIgZW0yOwogCiAgICAgcHVibGljIHZvaWQgaGVsbG8oKSB7CkBAIC01OSwxMSArNTksMTEgQEAKIAogICAgICAgICAgICAgICAgIEVudGl0eU1hbmFnZXIgbG9va3VwZW0yID0gKEVudGl0eU1hbmFnZXIpCiAgICAgICAgICAgICAgICAgICAgIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9teWVtIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgamFrYXJ0YS5lamIuRUpCRXhjZXB0aW9uKGUpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIZWxsb0VKQiBzdWNjZXNzZnVsIGluamVjdGlvbiBvZiBFTUYvRU0gcmVmZXJlbmNlcyEiKTsKICAgICAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMy9lamIvSGVsbG9TdGF0ZWZ1bC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24zL2VqYi9IZWxsb1N0YXRlZnVsLmphdmEKaW5kZXggZDg1NTY4YS4uNDViMGQxMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24zL2VqYi9IZWxsb1N0YXRlZnVsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24zL2VqYi9IZWxsb1N0YXRlZnVsLmphdmEKQEAgLTE5LDcgKzE5LDcgQEAKIHB1YmxpYyBpbnRlcmZhY2UgSGVsbG9TdGF0ZWZ1bCB7CiAKICAgICBwdWJsaWMgdm9pZCBoZWxsbygpOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2xlZXBGb3IoaW50IHNlYyk7CiAKICAgICBwdWJsaWMgdm9pZCBwaW5nKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjMvZWpiL0hlbGxvU3RhdGVmdWxFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMy9lamIvSGVsbG9TdGF0ZWZ1bEVKQi5qYXZhCmluZGV4IGEzZDdlOTAuLjcyNzU5NGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMy9lamIvSGVsbG9TdGF0ZWZ1bEVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMy9lamIvSGVsbG9TdGF0ZWZ1bEVKQi5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiBAQWNjZXNzVGltZW91dCgwKQogQFN0YXRlZnVsIHB1YmxpYyBjbGFzcyBIZWxsb1N0YXRlZnVsRUpCIGltcGxlbWVudHMgSGVsbG9TdGF0ZWZ1bCB7CiAKLSAgICAKKwogICAgIEBQZXJzaXN0ZW5jZUNvbnRleHQobmFtZT0ibXllbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICB1bml0TmFtZT0iZm9vIiwgdHlwZT1QZXJzaXN0ZW5jZUNvbnRleHRUeXBlLkVYVEVOREVEKQogICAgICAgICBwcml2YXRlIEVudGl0eU1hbmFnZXIgZW07CkBAIC00MiwxMiArNDIsMTIgQEAKIAogICAgIHB1YmxpYyB2b2lkIHNsZWVwRm9yKGludCBzZWMpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1N0YXRlZnVsRUpCOjpzbGVlcEZvcigpIik7Ci0JdHJ5IHsKLQkgICAgZm9yIChpbnQgaT0wIDsgaTxzZWM7IGkrKykgewotCQlUaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDEwMDApOwotCSAgICB9Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JfQorICAgIHRyeSB7CisgICAgICAgIGZvciAoaW50IGk9MCA7IGk8c2VjOyBpKyspIHsKKyAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCgxMDAwKTsKKyAgICAgICAgfQorICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgIH0KICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGaW5pc2hlZCBIZWxsb1N0YXRlZnVsRUpCOjpzbGVlcEZvcigpIik7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjMvc2VydmxldC9IZWxsby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24zL3NlcnZsZXQvSGVsbG8uamF2YQppbmRleCBhNWQ5MzNmLi41NGJjY2EwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjMvc2VydmxldC9IZWxsby5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMy9zZXJ2bGV0L0hlbGxvLmphdmEKQEAgLTE5LDUgKzE5LDUgQEAKIHB1YmxpYyBpbnRlcmZhY2UgSGVsbG8gewogCiAgICAgcHVibGljIHZvaWQgaGVsbG8oKTsKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24zL3NlcnZsZXQvSGVsbG9TdGF0ZWZ1bC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24zL3NlcnZsZXQvSGVsbG9TdGF0ZWZ1bC5qYXZhCmluZGV4IGQ4NTU2OGEuLjQ1YjBkMTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMy9zZXJ2bGV0L0hlbGxvU3RhdGVmdWwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjMvc2VydmxldC9IZWxsb1N0YXRlZnVsLmphdmEKQEAgLTE5LDcgKzE5LDcgQEAKIHB1YmxpYyBpbnRlcmZhY2UgSGVsbG9TdGF0ZWZ1bCB7CiAKICAgICBwdWJsaWMgdm9pZCBoZWxsbygpOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2xlZXBGb3IoaW50IHNlYyk7CiAKICAgICBwdWJsaWMgdm9pZCBwaW5nKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjMvc2VydmxldC9TZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjMvc2VydmxldC9TZXJ2bGV0LmphdmEKaW5kZXggNjhiYmQ1Mi4uMGM2NzA0MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb24zL3NlcnZsZXQvU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uMy9zZXJ2bGV0L1NlcnZsZXQuamF2YQpAQCAtODAsMzAgKzgwLDMwIEBACiAgICAgfQogCiAKLSAgICBAUGVyc2lzdGVuY2VVbml0IAorICAgIEBQZXJzaXN0ZW5jZVVuaXQKICAgICAgICAgcHJpdmF0ZSBFbnRpdHlNYW5hZ2VyRmFjdG9yeSBlbWYxOwogCi0gICAgQFBlcnNpc3RlbmNlVW5pdChuYW1lPSJteWVtZiIsIHVuaXROYW1lPSJmb28iKSAKKyAgICBAUGVyc2lzdGVuY2VVbml0KG5hbWU9Im15ZW1mIiwgdW5pdE5hbWU9ImZvbyIpCiAgICAgICAgIHByaXZhdGUgRW50aXR5TWFuYWdlckZhY3RvcnkgZW1mMjsKIAogICAgIEBQZXJzaXN0ZW5jZUNvbnRleHQKICAgICAgICAgcHJpdmF0ZSBFbnRpdHlNYW5hZ2VyIGVtMTsKIAotICAgIEBQZXJzaXN0ZW5jZUNvbnRleHQobmFtZT0ibXllbSIsIAorICAgIEBQZXJzaXN0ZW5jZUNvbnRleHQobmFtZT0ibXllbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICB1bml0TmFtZT0iZm9vIiwgdHlwZT1QZXJzaXN0ZW5jZUNvbnRleHRUeXBlLlRSQU5TQUNUSU9OKQogICAgICAgICBwcml2YXRlIEVudGl0eU1hbmFnZXIgZW0yOwogCiAgICAgcHVibGljIHZvaWQgIGluaXQoIFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiB3ZWJjbGllbnQ6OnNlcnZsZXQuLi4gaW5pdCgpIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2VydmljZSAoIEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEgLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3AgKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotICAgICAgICAgICAgICAgICAKKwogICAgICAgICByZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcC5nZXRXcml0ZXIoKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKIAogICAgICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKQEAgLTEyMiw3ICsxMjIsNyBAQAogCiAgICAgICAgICAgICAgICAgRW50aXR5TWFuYWdlciBsb29rdXBlbTIgPSAoRW50aXR5TWFuYWdlcikKICAgICAgICAgICAgICAgICAgICAgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L215ZW0iKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VydmxldCBzdWNjZXNzZnVsIGluamVjdGlvbiBvZiBFTUYvRU0gcmVmZXJlbmNlcyEiKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiT25lIG9yIG1vcmUgRU1GL0VNIHJlZmVyZW5jZXMiICsKQEAgLTE1MiwxNyArMTUyLDE3IEBACiAgICAgICAgICAgICBoZWxsb1N0YXRlZnVsLmhlbGxvKCk7CiAgICAgICAgICAgICBoZWxsb1N0YXRlZnVsMi5oZWxsbygpOwogCi0gICAgICAgICAgICBIZWxsbyBoZWxsb1N0YXRlbGVzczMgPSAoSGVsbG8pIAorICAgICAgICAgICAgSGVsbG8gaGVsbG9TdGF0ZWxlc3MzID0gKEhlbGxvKQogICAgICAgICAgICAgICAgIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9oZWxsb1N0YXRlbGVzczMiKTsKIAogICAgICAgICAgICAgaGVsbG9TdGF0ZWxlc3MzLmhlbGxvKCk7CiAKLSAgICAgICAgICAgIEhlbGxvIGhlbGxvU3RhdGVsZXNzNCA9IChIZWxsbykgCisgICAgICAgICAgICBIZWxsbyBoZWxsb1N0YXRlbGVzczQgPSAoSGVsbG8pCiAgICAgICAgICAgICAgICAgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2hlbGxvU3RhdGVsZXNzNCIpOwogCiAgICAgICAgICAgICBoZWxsb1N0YXRlbGVzczQuaGVsbG8oKTsKIAotICAgICAgICAgICAgSGVsbG9TdGF0ZWZ1bCBoZWxsb1N0YXRlZnVsMyA9IChIZWxsb1N0YXRlZnVsKSAKKyAgICAgICAgICAgIEhlbGxvU3RhdGVmdWwgaGVsbG9TdGF0ZWZ1bDMgPSAoSGVsbG9TdGF0ZWZ1bCkKICAgICAgICAgICAgICAgICBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvaGVsbG9TdGF0ZWZ1bDMiKTsKIAogICAgICAgICAgICAgaGVsbG9TdGF0ZWZ1bDMuaGVsbG8oKTsKQEAgLTE5NCw2NiArMTk0LDY2IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImRzNiBsb2dpbiB0aW1lb3V0ID0gIiArIGxvZ2luVGltZW91dCk7CiAKIAotCSAgICB0cnkgewotCQlNeVRocmVhZCB0aHJlYWQgPSBuZXcgTXlUaHJlYWQoaGVsbG9TdGF0ZWZ1bDIpOwotCQl0aHJlYWQuc3RhcnQoKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgTXlUaHJlYWQgdGhyZWFkID0gbmV3IE15VGhyZWFkKGhlbGxvU3RhdGVmdWwyKTsKKyAgICAgICAgdGhyZWFkLnN0YXJ0KCk7CiAKLQkJc2xlZXBGb3IoMTApOwotCQloZWxsb1N0YXRlZnVsMi5waW5nKCk7Ci0JCXRocm93IG5ldyBFSkJFeGNlcHRpb24oIkRpZCBub3QgZ2V0IENvbmN1cnJlbnRBY2Nlc3NFeGNlcHRpb24iKTsKLQkgICAgfSBjYXRjaCAoamFrYXJ0YS5lamIuQ29uY3VycmVudEFjY2Vzc0V4Y2VwdGlvbiBjb25FeCkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBleHBlY3RlZCBDb25jdXJyZW50QWNjZXNzRXhjZXB0aW9uIik7ICAgLy9FdmVyeXRoaW5nIGlzIGZpbmUKLQkgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHRoKSB7Ci0JCXRocm93IG5ldyBFSkJFeGNlcHRpb24oIkdvdCBzb21lIHdpZXJkIGV4Y2VwdGlvbjogIiArIHRoKTsKLQkgICAgfQorICAgICAgICBzbGVlcEZvcigxMCk7CisgICAgICAgIGhlbGxvU3RhdGVmdWwyLnBpbmcoKTsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiRGlkIG5vdCBnZXQgQ29uY3VycmVudEFjY2Vzc0V4Y2VwdGlvbiIpOworICAgICAgICB9IGNhdGNoIChqYWthcnRhLmVqYi5Db25jdXJyZW50QWNjZXNzRXhjZXB0aW9uIGNvbkV4KSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IGV4cGVjdGVkIENvbmN1cnJlbnRBY2Nlc3NFeGNlcHRpb24iKTsgICAvL0V2ZXJ5dGhpbmcgaXMgZmluZQorICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdGgpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiR290IHNvbWUgd2llcmQgZXhjZXB0aW9uOiAiICsgdGgpOworICAgICAgICB9CiAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigic3VjY2Vzc2Z1bGx5IGFjY2Vzc2VkIGNvbm5lY3Rpb25zIik7CiAKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8SFRNTD4gPEhFQUQ+IDxUSVRMRT4gSk1TIFNlcnZsZXQgT3V0cHV0IDwvVElUTEU+IDwvSEVBRD4gPEJPRFkgQkdDT0xPUj13aGl0ZT4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8Q0VOVEVSPiA8Rk9OVCBzaXplPSsxIENPTE9SPWJsdWU+RGF0YWJhc2VTZXJ2ZWx0IDo6IEFsbCBpbmZvcm1hdGlvbiBJIGNhbiBnaXZlIDwvRk9OVD4gPC9DRU5URVI+IDxwPiAiICk7Ci0gICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IENvbnRleHQgUGF0aCA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0Q29udGV4dFBhdGgoKSArICI8YnI+IiApOyAKLSAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gU2VydmxldCBQYXRoIDogIDwvRk9OVD4gIiArIHJlcS5nZXRTZXJ2bGV0UGF0aCgpICsgIjxicj4iICk7IAotICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBQYXRoIEluZm8gOiAgPC9GT05UPiAiICsgcmVxLmdldFBhdGhJbmZvKCkgKyAiPGJyPiIgKTsgCisgICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IENvbnRleHQgUGF0aCA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0Q29udGV4dFBhdGgoKSArICI8YnI+IiApOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBTZXJ2bGV0IFBhdGggOiAgPC9GT05UPiAiICsgcmVxLmdldFNlcnZsZXRQYXRoKCkgKyAiPGJyPiIgKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gUGF0aCBJbmZvIDogIDwvRk9OVD4gIiArIHJlcS5nZXRQYXRoSW5mbygpICsgIjxicj4iICk7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9CT0RZPiA8L0hUTUw+ICIpOwotICAgICAgICAgICAgCisKICAgICAgICAgfWNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ3ZWJjbGllbnQgc2VydmxldCB0ZXN0IGZhaWxlZCIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZXgpOwotICAgICAgICB9IAorICAgICAgICB9CiAgICAgfQogCi0gICAgCi0gICAgCisKKwogICAgIHB1YmxpYyB2b2lkICBkZXN0cm95KCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIHdlYmNsaWVudDo6c2VydmxldCBkZXN0cm95Iik7CiAgICAgfQogCiAgICAgY2xhc3MgTXlUaHJlYWQgZXh0ZW5kcyBUaHJlYWQgewotCUhlbGxvU3RhdGVmdWwgcmVmOworICAgIEhlbGxvU3RhdGVmdWwgcmVmOwogCi0JTXlUaHJlYWQoSGVsbG9TdGF0ZWZ1bCByZWYpIHsKLQkgICAgdGhpcy5yZWYgPSByZWY7Ci0JfQorICAgIE15VGhyZWFkKEhlbGxvU3RhdGVmdWwgcmVmKSB7CisgICAgICAgIHRoaXMucmVmID0gcmVmOworICAgIH0KIAotCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkgICAgdHJ5IHsKLQkJcmVmLnNsZWVwRm9yKDIwKTsKLQkgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHRoKSB7Ci0JCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJDb3VsZCBub3QgaW52b2tlIHdhaXRmb3IoKSBtZXRob2QiKTsKLQkgICAgfQotCX0KKyAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgIHJlZi5zbGVlcEZvcigyMCk7CisgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0aCkgeworICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiQ291bGQgbm90IGludm9rZSB3YWl0Zm9yKCkgbWV0aG9kIik7CisgICAgICAgIH0KKyAgICB9CiAgICAgfQogCiAKICAgICBwcml2YXRlIHZvaWQgc2xlZXBGb3IoaW50IHNlYykgewotCXRyeSB7Ci0JICAgIGZvciAoaW50IGk9MCA7IGk8c2VjOyBpKyspIHsKLQkJVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCgxMDAwKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJbIiArIGkgKyAiLyIgKyBzZWMgKyAiXTogU2xlZXBpbmcuLi4uIik7Ci0JICAgIH0KLQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQl9CisgICAgdHJ5IHsKKyAgICAgICAgZm9yIChpbnQgaT0wIDsgaTxzZWM7IGkrKykgeworICAgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDEwMDApOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlsiICsgaSArICIvIiArIHNlYyArICJdOiBTbGVlcGluZy4uLi4iKTsKKyAgICAgICAgfQorICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgIH0KICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uNC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb240L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYjBjYjg2Ny4uMjFiNjZmYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb240L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb240L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIxICsxNSwyMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMwLWhlbGxvLXNlc3Npb240Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb240L2J1aWxkLnhtbAppbmRleCA1ZWZkYmNhLi5lN2MxNjNhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uNC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDM1ICs0NiwzNSBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZWpiLWphci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL1NmdWwqLmNsYXNzLCoqL1NsZXNzKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXBwY2xpZW50LWphci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0NsaWVudC5jbGFzcywqKi9TZnVsLmNsYXNzLCoqL1NmdWwyLmNsYXNzLCoqL1NsZXNzLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iYXBwY2xpZW50Lmphcj0ke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiAgICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIgdXBkYXRlPSJ5ZXMiPgotICAgICAgICAgICAgPHppcGZpbGVzZXQgc3JjPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgCisgICAgICAgICAgICA8emlwZmlsZXNldCBzcmM9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICAgICAgICAgICAgZXhjbHVkZXM9Ik1FVEEtSU5GLyoqIi8+CiAgICAgICAgIDwvamFyPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktamFyLWNvbW1vbiIvPgogPCEtLSBEb24ndCBkZXBsb3kgY2xpZW50IGluIG9yZGVyIHRvIHRlc3QgdGhhdCBkeW5hbWljIGJ5dGUgY29kZQotZ2VuZXJhdGlvbiBpcyB3b3JraW5nLiAgCitnZW5lcmF0aW9uIGlzIHdvcmtpbmcuCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNsaWVudC1jb21tb24iLz4KIC0tPgogCiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICA8ZWNobyBtZXNzYWdlPSJhcHBjbGllbnQgLWNsaWVudCAke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnRDbGllbnQuamFyIC1uYW1lICR7YXBwbmFtZX1DbGllbnQgLXRleHRhdXRoIC11c2VyIGoyZWUgLXBhc3N3b3JkIGoyZWUgLXhtbCAke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvJHthZG1pbi5kb21haW59L2NvbmZpZy9nbGFzc2Zpc2gtYWNjLnhtbCAke2FwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzfSIvPiAgIAorICAgICAgICA8ZWNobyBtZXNzYWdlPSJhcHBjbGllbnQgLWNsaWVudCAke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnRDbGllbnQuamFyIC1uYW1lICR7YXBwbmFtZX1DbGllbnQgLXRleHRhdXRoIC11c2VyIGoyZWUgLXBhc3N3b3JkIGoyZWUgLXhtbCAke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvJHthZG1pbi5kb21haW59L2NvbmZpZy9nbGFzc2Zpc2gtYWNjLnhtbCAke2FwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzfSIvPgogICAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FQUENMSUVOVH0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CiA8IS0tIERvbid0IGRlcGxveSBjbGllbnQgaW4gb3JkZXIgdG8gdGVzdCB0aGF0IGR5bmFtaWMgYnl0ZSBjb2RlCi1nZW5lcmF0aW9uIGlzIHdvcmtpbmcuICAKK2dlbmVyYXRpb24gaXMgd29ya2luZy4KICAgICAgICAgICAgIDxhcmcgbGluZT0iLWNsaWVudAogICAgICAgICAgICAgICAgICAke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnRDbGllbnQuamFyIi8+CiAtLT4KQEAgLTg3LDE1ICs4NywxNSBAQAogICAgICAgICAgICAgPGFyZyBsaW5lPSIke2FwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzfSIvPgogICAgICAgICA8L2V4ZWM+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamFyLWNvbW1vbiIvPgogPCEtLSBEb24ndCBkZXBsb3kgY2xpZW50IGluIG9yZGVyIHRvIHRlc3QgdGhhdCBkeW5hbWljIGJ5dGUgY29kZQotZ2VuZXJhdGlvbiBpcyB3b3JraW5nLiAgCitnZW5lcmF0aW9uIGlzIHdvcmtpbmcuCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY2xpZW50LWNvbW1vbiIvPgogLS0+CiAKLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb240L2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uNC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggZjg3MjBmNy4uOTRmMzBiMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb240L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjQvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNSw3ICsyNSw3IEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CkBAIC0zNCw4ICszNCw4IEBACiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJlamItZWpiMzAtaGVsbG8tc2Vzc2lvbjRJRCIpOwotICAgIH0gIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICB9CiAKQEAgLTU3LDkgKzU3LDkgQEAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAKICAgICAgICAgdHJ5IHsKLQkgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKIAotCSAgICBzZnVsID0gKFNmdWwpIGljLmxvb2t1cCgiZWpiX2VqYjMwX2hlbGxvX3Nlc3Npb240X1NmdWwjY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5oZWxsby5zZXNzaW9uNC5TZnVsIik7CisgICAgICAgIHNmdWwgPSAoU2Z1bCkgaWMubG9va3VwKCJlamJfZWpiMzBfaGVsbG9fc2Vzc2lvbjRfU2Z1bCNjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmhlbGxvLnNlc3Npb240LlNmdWwiKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW52b2tpbmcgc3RhdGVmdWwiKTsKICAgICAgICAgICAgIFN0cmluZyBzZnVsSWQgPSAiMSI7CiAgICAgICAgICAgICBzZnVsLnNldElkKHNmdWxJZCk7CkBAIC03Myw3ICs3Myw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4cGVjdGVkIGlkICIgKyBzZnVsSWQpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZWNlaXZlZCBpZCAiICsgc2Z1bF8ySWQpOwogICAgICAgICAgICAgaWYoICFzZnVsXzJJZC5lcXVhbHMoc2Z1bElkKSApIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJzZnVsIGJlYW4gaWQgbWlzbWF0Y2ggIiArIAorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oInNmdWwgYmVhbiBpZCBtaXNtYXRjaCAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNmdWxJZCArICIgLCAiICsgc2Z1bF8ySWQpOwogICAgICAgICAgICAgfQogCkBAIC04Myw3ICs4Myw3IEBACiAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW52b2tpbmcgc3RhdGVsZXNzIik7CiAKLQkgICAgc2xlc3MgPSAoU2xlc3MpIGljLmxvb2t1cCgiY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5oZWxsby5zZXNzaW9uNC5TbGVzcyIpOworICAgICAgICBzbGVzcyA9IChTbGVzcykgaWMubG9va3VwKCJjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmhlbGxvLnNlc3Npb240LlNsZXNzIik7CiAgICAgICAgICAgICBzbGVzcy5oZWxsbygpOwogCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRlc3QgY29tcGxldGUiKTsKQEAgLTk0LDggKzk0LDggQEAKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIgLCBzdGF0LkZBSUwpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgIAlyZXR1cm47CisKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb240L2VqYi9TZnVsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjQvZWpiL1NmdWwuamF2YQppbmRleCAyNjQ0MGVjLi5kYWExYWY0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjQvZWpiL1NmdWwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjQvZWpiL1NmdWwuamF2YQpAQCAtMjksNSArMjksNSBAQAogCiAgICAgLy8gZGVmaW5lZCBvbiBib3RoIHJlbW90ZSBidXNpbmVzcyBpbnRlcmZhY2VzCiAgICAgcHVibGljIHZvaWQgc2FtZU1ldGhvZCgpOwotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjQvZWpiL1NmdWxFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uNC9lamIvU2Z1bEVKQi5qYXZhCmluZGV4IDM3NDkzZmUuLmExYzI5MWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uNC9lamIvU2Z1bEVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uNC9lamIvU2Z1bEVKQi5qYXZhCkBAIC01Myw2ICs1Myw2IEBACiAgICAgcHVibGljIHZvaWQgc2FtZU1ldGhvZCgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTZnVsRUpCOnNhbWVNZXRob2QoKSIpOwogICAgIH0KLSAgICAKKwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjQvZWpiL1NsZXNzRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjQvZWpiL1NsZXNzRUpCLmphdmEKaW5kZXggMjlmMGM3My4uOTg3OTg2MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb240L2VqYi9TbGVzc0VKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uNC9lamIvU2xlc3NFSkIuamF2YQpAQCAtMjIsNyArMjIsNyBAQAogLy8gVXNlIEBSZW1vdGUgd2l0aG91dCBwYXJhbWV0ZXJzLiAgSWYgdGhlcmUncyBvbmx5IG9uZSBhbWJpZ3VvdXMKIC8vIGludGVyZmFjZSBpbiBpbXBsZW1lbnRzIGNsYXVzZSwgaXQgd2lsbCBiZSB0cmVhdGUgYXMgQFJlbW90ZSBpbnN0ZWFkIG9mCiAvLyBATG9jYWwKLUBSZW1vdGUgIAorQFJlbW90ZQogQFN0YXRlbGVzcwogcHVibGljIGNsYXNzIFNsZXNzRUpCIGltcGxlbWVudHMgU2xlc3MKIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uNS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb241L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYjNlMTA5Ni4uNTQyMTAzMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb241L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb241L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIxICsxNSwyMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMwLWhlbGxvLXNlc3Npb241Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb241L2J1aWxkLnhtbAppbmRleCBiM2JmYzkwLi5kODhhZmZiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uNS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDI4ICs0NiwyOCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZWpiLWphci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL1NmdWwqLmNsYXNzLCoqL1NsZXNzKi5jbGFzcywqKi9NeUludGVyY2VwdG9yKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXBwY2xpZW50LWphci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0NsaWVudC5jbGFzcywqKi9TZnVsMi5jbGFzcywqKi9TbGVzczIuY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJhcHBjbGllbnQuamFyPSR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KICAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIiB1cGRhdGU9InllcyI+Ci0gICAgICAgICAgICA8emlwZmlsZXNldCBzcmM9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiAKKyAgICAgICAgICAgIDx6aXBmaWxlc2V0IHNyYz0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgICAgICAgICAgICBleGNsdWRlcz0iTUVUQS1JTkYvKioiLz4KICAgICAgICAgPC9qYXI+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qYXItY29tbW9uIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxlY2hvIG1lc3NhZ2U9ImFwcGNsaWVudCAtY2xpZW50ICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudENsaWVudC5qYXIgLW5hbWUgJHthcHBuYW1lfUNsaWVudCAtdGV4dGF1dGggLXVzZXIgajJlZSAtcGFzc3dvcmQgajJlZSAteG1sICR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy8ke2FkbWluLmRvbWFpbn0vY29uZmlnL2dsYXNzZmlzaC1hY2MueG1sICR7YXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3N9Ii8+ICAgCisgICAgICAgIDxlY2hvIG1lc3NhZ2U9ImFwcGNsaWVudCAtY2xpZW50ICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudENsaWVudC5qYXIgLW5hbWUgJHthcHBuYW1lfUNsaWVudCAtdGV4dGF1dGggLXVzZXIgajJlZSAtcGFzc3dvcmQgajJlZSAteG1sICR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy8ke2FkbWluLmRvbWFpbn0vY29uZmlnL2dsYXNzZmlzaC1hY2MueG1sICR7YXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3N9Ii8+CiAgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVBQQ0xJRU5UfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICAgICAgICAgIDxhcmcgbGluZT0iLWNsaWVudCAke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnRDbGllbnQuamFyIi8+CiAgICAgICAgICAgICA8YXJnIGxpbmU9Ii1uYW1lICR7YXBwbmFtZX1DbGllbnQiLz4KQEAgLTc4LDExICs3OCwxMSBAQAogICAgICAgICAgICAgPGFyZyBsaW5lPSIke2FwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzfSIvPgogICAgICAgICA8L2V4ZWM+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamFyLWNvbW1vbiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNsaWVudC1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb241L2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uNS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggOWNkN2ZhMi4uMzZmY2U1YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb241L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjUvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNSw3ICsyNSw3IEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CkBAIC0zNCw4ICszNCw4IEBACiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJlamItZWpiMzAtaGVsbG8tc2Vzc2lvbjVJRCIpOwotICAgIH0gIAotICAgIAorICAgIH0KKwogICAgIC8qKgogICAgICAqIFRoaXMgdGVzdCBlbnN1cmVzIHRoYXQgd2UgZG9uJ3QgYXNzdW1lIGEgcmVtb3RlIGVqYiBjbGllbnQgaGFzCiAgICAgICogYWNjZXNzIHRvIGFsbCB0aGUgY2xhc3NlcyBmb3IgYWxsIHRoZSByZW1vdGUgYnVzaW5lc3MgaW50ZXJmYWNlcyB0aGF0CkBAIC00Myw3ICs0Myw3IEBACiAgICAgICogcmVtb3RlIGJ1c2luZXNzIGludGVyZmFjZXMsIGJ1dCB0aGlzIGNsaWVudCBvbmx5IHVzZXMgU2Z1bDIgYW5kCiAgICAgICogU2xlc3MyIGFuZCBkb2VzIG5vdCBwYWNrYWdlIHRoZSBTZnVsIG9yIFNsZXNzIGNsYXNzZXMgYXQgYWxsLiBUaGUKICAgICAgKiBpbnRlcm5hbCBnZW5lcmF0ZWQgUk1JLUlJT1Agc3R1YnMgY3JlYXRlZCBhdCBydW50aW1lIHNob3VsZCBub3QKLSAgICAgKiBjYXVzZSBhbnkgY2xhc3Nsb2FkaW5nIGVycm9ycyBpbiB0aGUgY2xpZW50LiAKKyAgICAgKiBjYXVzZSBhbnkgY2xhc3Nsb2FkaW5nIGVycm9ycyBpbiB0aGUgY2xpZW50LgogICAgICAqLwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICB9CkBAIC03Myw4ICs3Myw4IEBACiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iICwgc3RhdC5GQUlMKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAJcmV0dXJuOworCisgICAgICAgIHJldHVybjsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uNS9lamIvTXlJbnRlcmNlcHRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb241L2VqYi9NeUludGVyY2VwdG9yLmphdmEKaW5kZXggZWY3NGIzYi4uZmYxMzAxMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb241L2VqYi9NeUludGVyY2VwdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb241L2VqYi9NeUludGVyY2VwdG9yLmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKICAgICAgICAgcmV0dXJuIHBvc3RDb25zdHJ1Y3RDYWxsZWQ7CiAgICAgfQogCi0gICAgQFBvc3RDb25zdHJ1Y3QgCisgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgcG9zdENvbnN0cnVjdChJbnZvY2F0aW9uQ29udGV4dCBjdHgpIHsKICAgICAgICAgcG9zdENvbnN0cnVjdENhbGxlZCA9IHRydWU7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTXlJbnRlcmNlcHRvcjo6cG9zdENvbnN0cnVjdCBjYWxsZWQiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uNS9lamIvTXlJbnRlcmNlcHRvcjIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uNS9lamIvTXlJbnRlcmNlcHRvcjIuamF2YQppbmRleCA4ZjBjOGYyLi41MDNlOWI3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbjUvZWpiL015SW50ZXJjZXB0b3IyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb241L2VqYi9NeUludGVyY2VwdG9yMi5qYXZhCkBAIC0yOSw3ICsyOSw3IEBACiAgICAgfQogCiAKLSAgICBAUG9zdENvbnN0cnVjdCAKKyAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBwb3N0Q29uc3RydWN0KEludm9jYXRpb25Db250ZXh0IGN0eCkgewogICAgICAgICBwb3N0Q29uc3RydWN0Q2FsbGVkID0gdHJ1ZTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNeUludGVyY2VwdG9yMjo6cG9zdENvbnN0cnVjdCBjYWxsZWQiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uNS9lamIvU2Z1bEVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb241L2VqYi9TZnVsRUpCLmphdmEKaW5kZXggOGRkZDFhNC4uNzlkY2NlNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb241L2VqYi9TZnVsRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb241L2VqYi9TZnVsRUpCLmphdmEKQEAgLTUwLDYgKzUwLDYgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTZnVsRUpCOmhlbGxvMigpIik7CiAgICAgICAgIHJldHVybiAiaGVsbG8yIjsKICAgICB9Ci0gICAgCisKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb25fc3RhbmRhbG9uZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb25fc3RhbmRhbG9uZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDhkMzQ0ZTAuLjM1MTY3MDMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uX3N0YW5kYWxvbmUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbl9zdGFuZGFsb25lL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIxICsxNSwyMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMwLWhlbGxvLXNlc3Npb25fc3RhbmRhbG9uZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb25fc3RhbmRhbG9uZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbl9zdGFuZGFsb25lL2J1aWxkLnhtbAppbmRleCA4MGE5NDFhLi5lY2MzM2I4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbl9zdGFuZGFsb25lL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbl9zdGFuZGFsb25lL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMjggKzQ2LDI4IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJlamItamFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovU2Z1bCouY2xhc3MsKiovU2xlc3MqLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhcHBjbGllbnQtamFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovQ2xpZW50LmNsYXNzLCoqL1NmdWwuY2xhc3MsKiovU2xlc3MuY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJhcHBjbGllbnQuamFyPSR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KICAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIiB1cGRhdGU9InllcyI+Ci0gICAgICAgICAgICA8emlwZmlsZXNldCBzcmM9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiAKKyAgICAgICAgICAgIDx6aXBmaWxlc2V0IHNyYz0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgICAgICAgICAgICBleGNsdWRlcz0iTUVUQS1JTkYvKioiLz4KICAgICAgICAgPC9qYXI+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qYXItY29tbW9uIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxlY2hvIG1lc3NhZ2U9ImFwcGNsaWVudCAtY2xpZW50ICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudENsaWVudC5qYXIgLW5hbWUgJHthcHBuYW1lfUNsaWVudCAtdGV4dGF1dGggLXVzZXIgajJlZSAtcGFzc3dvcmQgajJlZSAteG1sICR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy8ke2FkbWluLmRvbWFpbn0vY29uZmlnL2dsYXNzZmlzaC1hY2MueG1sICR7YXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3N9Ii8+ICAgCisgICAgICAgIDxlY2hvIG1lc3NhZ2U9ImFwcGNsaWVudCAtY2xpZW50ICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudENsaWVudC5qYXIgLW5hbWUgJHthcHBuYW1lfUNsaWVudCAtdGV4dGF1dGggLXVzZXIgajJlZSAtcGFzc3dvcmQgajJlZSAteG1sICR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy8ke2FkbWluLmRvbWFpbn0vY29uZmlnL2dsYXNzZmlzaC1hY2MueG1sICR7YXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3N9Ii8+CiAgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVBQQ0xJRU5UfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICAgICAgICAgIDxhcmcgbGluZT0iLWNsaWVudCAke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnRDbGllbnQuamFyIi8+CiAgICAgICAgICAgICA8YXJnIGxpbmU9Ii1uYW1lICR7YXBwbmFtZX1DbGllbnQiLz4KQEAgLTc4LDExICs3OCwxMSBAQAogICAgICAgICAgICAgPGFyZyBsaW5lPSIke2FwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzfSIvPgogICAgICAgICA8L2V4ZWM+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamFyLWNvbW1vbiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNsaWVudC1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb25fc3RhbmRhbG9uZS9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbl9zdGFuZGFsb25lL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBlZjFlYjg4Li4xM2QyNTllIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbl9zdGFuZGFsb25lL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbl9zdGFuZGFsb25lL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewpAQCAtMzMsOCArMzMsOCBAQAogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiZWpiLWVqYjMwLWhlbGxvLXNlc3Npb25fc3RhbmRhbG9uZUlEIik7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgIH0KIApAQCAtNzYsOCArNzYsOCBAQAogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiAsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgCXJldHVybjsKKworICAgICAgICByZXR1cm47CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbl9zdGFuZGFsb25lL2VqYi9TbGVzc0VKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2hlbGxvL3Nlc3Npb25fc3RhbmRhbG9uZS9lamIvU2xlc3NFSkIuamF2YQppbmRleCAyNGFkY2MyLi40NTRmMjNiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaGVsbG8vc2Vzc2lvbl9zdGFuZGFsb25lL2VqYi9TbGVzc0VKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9oZWxsby9zZXNzaW9uX3N0YW5kYWxvbmUvZWpiL1NsZXNzRUpCLmphdmEKQEAgLTM3LDEyICszNywxMiBAQAogICAgICAgICByZXR1cm4gdGltZW91dFdhc0NhbGxlZDsKICAgICB9CiAKLSAgICBAVGltZW91dCAKKyAgICBAVGltZW91dAogICAgIHByaXZhdGUgdm9pZCB0aW1lb3V0KFRpbWVyIHQpIHsKIAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIFNsZXNzRUpCOnRpbWVvdXQiKTsKICAgICAgICAgdGltZW91dFdhc0NhbGxlZCA9IHRydWU7CiAKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvYnVpbGQucHJvcGVydGllcwppbmRleCA4N2ZmYjZjLi5kNjc4YzJhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMiArMTUsMjIgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lamIzMC1pbnRlcmNlcHRvcnMtYmluZGluZ3MiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic2ltcGxlLmNsaWVudCIgdmFsdWU9ImNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaW50ZXJjZXB0b3JzLmJpbmRpbmdzLmNsaWVudC5TdGFuZGFsb25lQ2xpZW50Ii8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9idWlsZC54bWwKaW5kZXggNTg4NjQxZS4uMjAyNjdjYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDE0ICs0NiwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovU2Z1bCouY2xhc3MsKiovU2xlc3MqLmNsYXNzLCoqL0NvbW1vbiouY2xhc3MsKiovSW50ZXJjZXB0b3IqLmNsYXNzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovQ2xpZW50LmNsYXNzLCoqL1NmdWwuY2xhc3MsKiovU2xlc3MuY2xhc3MsKiovU2Z1bDIuY2xhc3MsKiovU2xlc3MzLmNsYXNzLCoqL1NsZXNzNC5jbGFzcywqKi9TbGVzczUuY2xhc3MsKiovU2xlc3M2LmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjEsMTAgKzYxLDEwIEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMzNmYTcwYS4uMjEyMGY5NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTMzLDExICszMywxMSBAQAogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiZWpiLWVqYjMwLWludGVyY2VwdG9ycy1iaW5kaW5nc0lEIik7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIEBFSkIgU2Z1bCBzZnVsOwogICAgIHByaXZhdGUgc3RhdGljIEBFSkIgU2Z1bDIgc2Z1bDI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgQEVKQiBTbGVzczMgc2xlc3MzOwpAQCAtMTAxLDEwICsxMDEsMTAgQEAKIAogICAgICAgICAgICAgc2xlc3M2LmFnKCk7CiAgICAgICAgICAgICBzbGVzczYuYWcoMSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgc2xlc3M2LmJnKCk7CiAgICAgICAgICAgICBzbGVzczYuYmcoMSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgc2xlc3M2LmNnKCk7CiAgICAgICAgICAgICBzbGVzczYuY2coMSk7CiAgICAgICAgICAgICBzbGVzczYuY2coImZvbyIsIDEuMCk7CkBAIC0xMjQsOCArMTI0LDggQEAKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIgLCBzdGF0LkZBSUwpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgIAlyZXR1cm47CisKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvQ29tbW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2VqYi9Db21tb24uamF2YQppbmRleCA4NWFkNDRmLi41OTNiMzUwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2VqYi9Db21tb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2VqYi9Db21tb24uamF2YQpAQCAtMjksMTYgKzI5LDE2IEBACiAKICAgICBzdGF0aWMgdm9pZCBhcm91bmRJbnZva2VDYWxsZWQoSW52b2NhdGlvbkNvbnRleHQgY3R4LCBTdHJpbmcgaWQpIHsKIAotICAgICAgICBMaXN0PFN0cmluZz4gaW50ZXJjZXB0b3JzID0gKExpc3Q8U3RyaW5nPikgCisgICAgICAgIExpc3Q8U3RyaW5nPiBpbnRlcmNlcHRvcnMgPSAoTGlzdDxTdHJpbmc+KQogICAgICAgICAgICAgY3R4LmdldENvbnRleHREYXRhKCkuZ2V0KElOVEVSQ0VQVE9SU19QUk9QKTsKLSAgICAgICAgCisKICAgICAgICAgaWYoIGludGVyY2VwdG9ycyA9PSBudWxsICkgewogICAgICAgICAgICAgaW50ZXJjZXB0b3JzID0gbmV3IExpbmtlZExpc3Q8U3RyaW5nPigpOwogICAgICAgICAgICAgY3R4LmdldENvbnRleHREYXRhKCkucHV0KElOVEVSQ0VQVE9SU19QUk9QLCBpbnRlcmNlcHRvcnMpOwogICAgICAgICB9CiAKICAgICAgICAgaW50ZXJjZXB0b3JzLmFkZChpZCk7Ci0gICAgICAgIAorCiAgICAgfQogCiAgICAgc3RhdGljIHZvaWQgY2hlY2tSZXN1bHRzKEludm9jYXRpb25Db250ZXh0IGN0eCkgewpAQCAtNTYsOSArNTYsOSBAQAogICAgICAgICAgICAgZm9yKCBjaGFyIG5leHRDaGFyIDogbWV0aG9kTmFtZVVwcGVyLnRvQ2hhckFycmF5KCkgKSB7CiAgICAgICAgICAgICAgICAgZXhwZWN0ZWQuYWRkKG5leHRDaGFyICsgIiIpOwogICAgICAgICAgICAgfQotICAgICAgICB9IAorICAgICAgICB9CiAKLSAgICAgICAgTGlzdDxTdHJpbmc+IGFjdHVhbCA9IChMaXN0PFN0cmluZz4pIAorICAgICAgICBMaXN0PFN0cmluZz4gYWN0dWFsID0gKExpc3Q8U3RyaW5nPikKICAgICAgICAgICAgIGN0eC5nZXRDb250ZXh0RGF0YSgpLmdldChJTlRFUkNFUFRPUlNfUFJPUCk7CiAKICAgICAgICAgU3RyaW5nIG1zZyA9ICJFeHBlY3RlZCAiICsgZXhwZWN0ZWQgKyAiIGZvciBtZXRob2QgIiArCkBAIC03NCw1ICs3NCw1IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWwgaW50ZXJjZXB0b3IgY2hhaW4gOiAiICsgbXNnKTsKICAgICAgICAgfQogICAgIH0KLSAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2VqYi9JbnRlcmNlcHRvckEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvZWpiL0ludGVyY2VwdG9yQS5qYXZhCmluZGV4IGYyNGYyOWUuLjk3OWEwYmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvZWpiL0ludGVyY2VwdG9yQS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvZWpiL0ludGVyY2VwdG9yQS5qYXZhCkBAIC0yNiw3ICsyNiw3IEBACiBwdWJsaWMgY2xhc3MgSW50ZXJjZXB0b3JBIHsKIAogICAgIEBSZXNvdXJjZSBTZXNzaW9uQ29udGV4dCBzZXNzaW9uQ3R4OwotICAgIAorCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgcG9zdENvbnN0cnVjdChJbnZvY2F0aW9uQ29udGV4dCBjdHgpIHsKICAgICAgICAgdHJ5IHsKQEAgLTM4LDcgKzM4LDcgQEAKIAogICAgIEBBcm91bmRJbnZva2UKICAgICBPYmplY3QgYXJvdW5kSW52b2tlKEludm9jYXRpb25Db250ZXh0IGN0eCkKLQkgICAgICAgIHRocm93cyBFeGNlcHRpb24geworICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgLy8gYWNjZXNzIGluamVjdGVkIGVudmlyb25tZW50IGRlcGVuZGVuY3kKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnZva2VkIGJ1c2luZXNzIGludGVyZmFjZSA9ICIgKwpAQCAtNDcsMTAgKzQ3LDEwIEBACiAgICAgICAgIC8vIGxvb2sgdXAgZWpiLXJlZiBkZWZpbmVkIHdpdGhpbiBkZWZhdWx0IGludGVyY2VwdG9yIGluIGVqYi1qYXIueG1sCiAgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgIFNsZXNzMyBzbGVzczMgPSAoU2xlc3MzKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NsZXNzMyIpOwotICAgICAgICAKLSAgICAgICAgCisKKwogICAgICAgICBDb21tb24uYXJvdW5kSW52b2tlQ2FsbGVkKGN0eCwgIkEiKTsKICAgICAgICAgcmV0dXJuIGN0eC5wcm9jZWVkKCk7CiAgICAgfQotICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvZWpiL0ludGVyY2VwdG9yQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvSW50ZXJjZXB0b3JCLmphdmEKaW5kZXggNDk3YmI5Yi4uNjg2OWZiNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvSW50ZXJjZXB0b3JCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvSW50ZXJjZXB0b3JCLmphdmEKQEAgLTMzLDkgKzMzLDkgQEAKIAogICAgIC8vIGFyb3VuZC1pbnZva2UgZGVjbGFyZWQgaW4gZWpiLWphci54bWwKICAgICBPYmplY3QgYXJvdW5kSW52b2tlKEludm9jYXRpb25Db250ZXh0IGN0eCkKLQkgICAgICAgIHRocm93cyBFeGNlcHRpb24geworICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIENvbW1vbi5hcm91bmRJbnZva2VDYWxsZWQoY3R4LCAiQiIpOwogICAgICAgICByZXR1cm4gY3R4LnByb2NlZWQoKTsKICAgICB9Ci0gICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvSW50ZXJjZXB0b3JDLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2VqYi9JbnRlcmNlcHRvckMuamF2YQppbmRleCAyMGY2ZmI2Li45NTU2ZGRhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2VqYi9JbnRlcmNlcHRvckMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2VqYi9JbnRlcmNlcHRvckMuamF2YQpAQCAtMzMsOSArMzMsOSBAQAogCiAgICAgQEFyb3VuZEludm9rZQogICAgIE9iamVjdCBhcm91bmRJbnZva2UoSW52b2NhdGlvbkNvbnRleHQgY3R4KQotCSAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgQ29tbW9uLmFyb3VuZEludm9rZUNhbGxlZChjdHgsICJDIik7CiAgICAgICAgIHJldHVybiBjdHgucHJvY2VlZCgpOwogICAgIH0KLSAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2VqYi9JbnRlcmNlcHRvckQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvZWpiL0ludGVyY2VwdG9yRC5qYXZhCmluZGV4IDdjMTY2OWIuLmQ2YzFlZjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvZWpiL0ludGVyY2VwdG9yRC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvZWpiL0ludGVyY2VwdG9yRC5qYXZhCkBAIC0zMyw5ICszMyw5IEBACiAKICAgICBAQXJvdW5kSW52b2tlCiAgICAgT2JqZWN0IGFyb3VuZEludm9rZShJbnZvY2F0aW9uQ29udGV4dCBjdHgpCi0JICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBDb21tb24uYXJvdW5kSW52b2tlQ2FsbGVkKGN0eCwgIkQiKTsKICAgICAgICAgcmV0dXJuIGN0eC5wcm9jZWVkKCk7CiAgICAgfQotICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvZWpiL0ludGVyY2VwdG9yRS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvSW50ZXJjZXB0b3JFLmphdmEKaW5kZXggMTM2ZDJjZi4uODlkNjQ0ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvSW50ZXJjZXB0b3JFLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvSW50ZXJjZXB0b3JFLmphdmEKQEAgLTMzLDkgKzMzLDkgQEAKIAogICAgIEBBcm91bmRJbnZva2UKICAgICBPYmplY3QgYXJvdW5kSW52b2tlKEludm9jYXRpb25Db250ZXh0IGN0eCkKLQkgICAgICAgIHRocm93cyBFeGNlcHRpb24geworICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIENvbW1vbi5hcm91bmRJbnZva2VDYWxsZWQoY3R4LCAiRSIpOwogICAgICAgICByZXR1cm4gY3R4LnByb2NlZWQoKTsKICAgICB9Ci0gICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvSW50ZXJjZXB0b3JGLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2VqYi9JbnRlcmNlcHRvckYuamF2YQppbmRleCA3NzJmYjQwLi5hMTY2MmY2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2VqYi9JbnRlcmNlcHRvckYuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2VqYi9JbnRlcmNlcHRvckYuamF2YQpAQCAtMzMsOSArMzMsOSBAQAogCiAgICAgQEFyb3VuZEludm9rZQogICAgIE9iamVjdCBhcm91bmRJbnZva2UoSW52b2NhdGlvbkNvbnRleHQgY3R4KQotCSAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgQ29tbW9uLmFyb3VuZEludm9rZUNhbGxlZChjdHgsICJGIik7CiAgICAgICAgIHJldHVybiBjdHgucHJvY2VlZCgpOwogICAgIH0KLSAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2VqYi9JbnRlcmNlcHRvckcuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvZWpiL0ludGVyY2VwdG9yRy5qYXZhCmluZGV4IGViNDAwYjIuLjM4OTM0YWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvZWpiL0ludGVyY2VwdG9yRy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvZWpiL0ludGVyY2VwdG9yRy5qYXZhCkBAIC0zMyw3ICszMyw3IEBACiAKICAgICBAQXJvdW5kSW52b2tlCiAgICAgT2JqZWN0IGFyb3VuZEludm9rZShJbnZvY2F0aW9uQ29udGV4dCBjdHgpCi0JICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBDb21tb24uYXJvdW5kSW52b2tlQ2FsbGVkKGN0eCwgIkciKTsKICAgICAgICAgT2JqZWN0IGluc3RhbmNlID0gY3R4LmdldFRhcmdldCgpOwogICAgICAgICBpZiggaW5zdGFuY2UgaW5zdGFuY2VvZiBTbGVzc0VKQjYgKSB7CkBAIC00MSw1ICs0MSw1IEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGN0eC5wcm9jZWVkKCk7CiAgICAgfQotICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvZWpiL1NmdWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvZWpiL1NmdWwuamF2YQppbmRleCA0MmIzZTFhLi5iOTRiZThhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2VqYi9TZnVsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvU2Z1bC5qYXZhCkBAIC0xNyw3ICsxNyw3IEBACiBwYWNrYWdlIGNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaW50ZXJjZXB0b3JzLmJpbmRpbmdzOwogCiBpbXBvcnQgamFrYXJ0YS5lamIuUmVtb3RlOwotCQorCiBAUmVtb3RlCiBwdWJsaWMgaW50ZXJmYWNlIFNmdWwKIHsKQEAgLTM4LDcgKzM4LDcgQEAKIAogICAgIHB1YmxpYyB2b2lkIGNkZWYoKTsKIAotICAgIHB1YmxpYyB2b2lkIGFiY2RlZigpOyAgICAKKyAgICBwdWJsaWMgdm9pZCBhYmNkZWYoKTsKIAogICAgIHB1YmxpYyB2b2lkIGFjYmRmZSgpOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2VqYi9TZnVsMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvU2Z1bDIuamF2YQppbmRleCAzYTEyNjg0Li5lNDcxYTUxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2VqYi9TZnVsMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvZWpiL1NmdWwyLmphdmEKQEAgLTE3LDcgKzE3LDcgQEAKIHBhY2thZ2UgY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5pbnRlcmNlcHRvcnMuYmluZGluZ3M7CiAKIGltcG9ydCBqYWthcnRhLmVqYi5SZW1vdGU7Ci0JCisKIEBSZW1vdGUKIHB1YmxpYyBpbnRlcmZhY2UgU2Z1bDIKIHsKQEAgLTI5LDYgKzI5LDYgQEAKICAgICBwdWJsaWMgdm9pZCBlZigpOwogCiAgICAgcHVibGljIHZvaWQgY2RlZigpOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgbm90aGluZygpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvU2Z1bEVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvU2Z1bEVKQi5qYXZhCmluZGV4IGE1NjVlZDguLjVkODlkMDUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvZWpiL1NmdWxFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2VqYi9TZnVsRUpCLmphdmEKQEAgLTQxLDcgKzQxLDcgQEAKIAogICAgIEBFeGNsdWRlRGVmYXVsdEludGVyY2VwdG9ycwogICAgIHB1YmxpYyB2b2lkIGNkKCkgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIFNmdWxFSkI6Y2QoKS4gIHBvc3RDb25zdHJ1Y3QgPSAiICsgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gU2Z1bEVKQjpjZCgpLiAgcG9zdENvbnN0cnVjdCA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zdENvbnN0cnVjdENhbGxlZCk7CiAKICAgICAgICAgaWYoICFwb3N0Q29uc3RydWN0Q2FsbGVkICkgewpAQCAtODIsMTYgKzgyLDE2IEBACiAgICAgQEV4Y2x1ZGVEZWZhdWx0SW50ZXJjZXB0b3JzCiAgICAgQEludGVyY2VwdG9ycyh7SW50ZXJjZXB0b3JFLmNsYXNzLCBJbnRlcmNlcHRvckYuY2xhc3N9KQogICAgIHB1YmxpYyB2b2lkIGNkZWYoKSB7fQotICAgIAorCiAgICAgQEV4Y2x1ZGVEZWZhdWx0SW50ZXJjZXB0b3JzCiAgICAgQEV4Y2x1ZGVDbGFzc0ludGVyY2VwdG9ycwogICAgIHB1YmxpYyB2b2lkIG5vdGhpbmcoKSB7fQogCi0gICAgQEludGVyY2VwdG9ycyh7SW50ZXJjZXB0b3JFLmNsYXNzLCBJbnRlcmNlcHRvckYuY2xhc3N9KSAgICAKKyAgICBASW50ZXJjZXB0b3JzKHtJbnRlcmNlcHRvckUuY2xhc3MsIEludGVyY2VwdG9yRi5jbGFzc30pCiAgICAgcHVibGljIHZvaWQgYWJjZGVmKCkge30KIAogICAgIC8vIHRvdGFsIG9yZGVyaW5nIG92ZXJyaWRkZW4gaW4gZGVwbG95bWVudCBkZXNjcmlwdG9yCi0gICAgQEludGVyY2VwdG9ycyh7SW50ZXJjZXB0b3JFLmNsYXNzLCBJbnRlcmNlcHRvckYuY2xhc3N9KSAgICAKKyAgICBASW50ZXJjZXB0b3JzKHtJbnRlcmNlcHRvckUuY2xhc3MsIEludGVyY2VwdG9yRi5jbGFzc30pCiAgICAgcHVibGljIHZvaWQgYWNiZGZlKCkge30KIAogICAgIC8vIGRlY2xhcmVkIGluIGVqYi1qYXIueG1sCkBAIC0xMDYsNSArMTA2LDUgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvZWpiL1NmdWxFSkIyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2VqYi9TZnVsRUpCMi5qYXZhCmluZGV4IGY1ZDE5ZWQuLjQ0NjQ5M2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvZWpiL1NmdWxFSkIyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvU2Z1bEVKQjIuamF2YQpAQCAtMzIsNyArMzIsNyBAQAogICAgIHByaXZhdGUgYm9vbGVhbiBhcm91bmRJbnZva2VDYWxsZWQgPSBmYWxzZTsKIAogICAgIHB1YmxpYyB2b2lkIGNkKCkgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIFNmdWxFSkI6Y2QoKS4gIGFyb3VuZEludm9rZUNhbGxlZCA9ICIgKyAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbiBTZnVsRUpCOmNkKCkuICBhcm91bmRJbnZva2VDYWxsZWQgPSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyb3VuZEludm9rZUNhbGxlZCk7CiAKICAgICAgICAgLy8gYSBsaXR0bGUgZXh0cmEgY2hlY2tpbmcgdG8gbWFrZSBzdXJlIGFyb3VuZEludm9rZSBpcyBpbnZva2VkLi4uCkBAIC01MywxMiArNTMsMTIgQEAKICAgICBARXhjbHVkZUNsYXNzSW50ZXJjZXB0b3JzCiAgICAgcHVibGljIHZvaWQgYWJlZihpbnQgaSkge30KIAotICAgIC8vIEBFeGNsdWRlRGVmYXVsdEludGVyY2VwdG9ycyBpcyBhIG5vLW9wIGhlcmUgc2luY2UgaXQgCisgICAgLy8gQEV4Y2x1ZGVEZWZhdWx0SW50ZXJjZXB0b3JzIGlzIGEgbm8tb3AgaGVyZSBzaW5jZSBpdAogICAgIC8vIHdhcyBhbHJlYWR5IGV4Y2x1ZGVkIGF0IGNsYXNzLWxldmVsCiAgICAgQEV4Y2x1ZGVEZWZhdWx0SW50ZXJjZXB0b3JzCiAgICAgQEludGVyY2VwdG9ycyh7SW50ZXJjZXB0b3JFLmNsYXNzLCBJbnRlcmNlcHRvckYuY2xhc3N9KQogICAgIHB1YmxpYyB2b2lkIGNkZWYoKSB7fQotICAgIAorCiAgICAgQEV4Y2x1ZGVDbGFzc0ludGVyY2VwdG9ycwogICAgIHB1YmxpYyB2b2lkIG5vdGhpbmcoKSB7fQogCkBAIC03NCw1ICs3NCw1IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2VqYi9TbGVzczMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvZWpiL1NsZXNzMy5qYXZhCmluZGV4IDg2MjJlZTMuLmFjMWU5M2UgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvZWpiL1NsZXNzMy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvZWpiL1NsZXNzMy5qYXZhCkBAIC0xNyw3ICsxNyw3IEBACiBwYWNrYWdlIGNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaW50ZXJjZXB0b3JzLmJpbmRpbmdzOwogCiBpbXBvcnQgamFrYXJ0YS5lamIuUmVtb3RlOwotCQorCiBAUmVtb3RlCiBwdWJsaWMgaW50ZXJmYWNlIFNsZXNzMwogewpAQCAtMzUsNyArMzUsNyBAQAogCiAgICAgcHVibGljIHZvaWQgZGNlZigpOwogCi0gICAgcHVibGljIHZvaWQgZGNiYWVmKCk7ICAgIAorICAgIHB1YmxpYyB2b2lkIGRjYmFlZigpOwogCiAgICAgcHVibGljIHZvaWQgYWJjZGVmKCk7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvZWpiL1NsZXNzNC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvU2xlc3M0LmphdmEKaW5kZXggYzhlMzkxMS4uYWJkOTgzZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvU2xlc3M0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvU2xlc3M0LmphdmEKQEAgLTE3LDcgKzE3LDcgQEAKIHBhY2thZ2UgY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5pbnRlcmNlcHRvcnMuYmluZGluZ3M7CiAKIGltcG9ydCBqYWthcnRhLmVqYi5SZW1vdGU7Ci0JCisKIEBSZW1vdGUKIHB1YmxpYyBpbnRlcmZhY2UgU2xlc3M0CiB7CkBAIC0yOSw2ICsyOSw2IEBACiAgICAgcHVibGljIHZvaWQgZWYoKTsKIAogICAgIHB1YmxpYyB2b2lkIGNiZGVmKCk7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBub3RoaW5nKCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2VqYi9TbGVzczUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvZWpiL1NsZXNzNS5qYXZhCmluZGV4IDdkMjRjZTMuLmNjNmIzZTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvZWpiL1NsZXNzNS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvZWpiL1NsZXNzNS5qYXZhCkBAIC0xNyw3ICsxNyw3IEBACiBwYWNrYWdlIGNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaW50ZXJjZXB0b3JzLmJpbmRpbmdzOwogCiBpbXBvcnQgamFrYXJ0YS5lamIuUmVtb3RlOwotCQorCiBAUmVtb3RlCiBwdWJsaWMgaW50ZXJmYWNlIFNsZXNzNQogewpAQCAtMjUsNiArMjUsNiBAQAogICAgIHB1YmxpYyB2b2lkIGFiZGMoKTsKIAogICAgIHB1YmxpYyB2b2lkIGRjZmUoKTsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIG5vdGhpbmcoKTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvZWpiL1NsZXNzNi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvU2xlc3M2LmphdmEKaW5kZXggODk5MzI3Ni4uNzM5MDEyOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvU2xlc3M2LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvU2xlc3M2LmphdmEKQEAgLTE3LDcgKzE3LDcgQEAKIHBhY2thZ2UgY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5pbnRlcmNlcHRvcnMuYmluZGluZ3M7CiAKIGltcG9ydCBqYWthcnRhLmVqYi5SZW1vdGU7Ci0JCisKIEBSZW1vdGUKIHB1YmxpYyBpbnRlcmZhY2UgU2xlc3M2CiB7CkBAIC0yOSw3ICsyOSw3IEBACiAgICAgcHVibGljIHZvaWQgYmcoKTsKIAogICAgIHB1YmxpYyB2b2lkIGJnKGludCBwYXJhbSk7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBjZygpOwogCiAgICAgcHVibGljIHZvaWQgY2coaW50IHBhcmFtKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvZWpiL1NsZXNzRUpCMy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvU2xlc3NFSkIzLmphdmEKaW5kZXggNDgwNTY2Zi4uZmE4OTQ2NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvU2xlc3NFSkIzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvU2xlc3NFSkIzLmphdmEKQEAgLTUwLDE2ICs1MCwxNiBAQAogICAgIEBFeGNsdWRlRGVmYXVsdEludGVyY2VwdG9ycwogICAgIEBJbnRlcmNlcHRvcnMoe0ludGVyY2VwdG9yRS5jbGFzcywgSW50ZXJjZXB0b3JGLmNsYXNzfSkKICAgICBwdWJsaWMgdm9pZCBkY2VmKCkge30KLSAgICAKKwogICAgIEBFeGNsdWRlRGVmYXVsdEludGVyY2VwdG9ycwogICAgIEBFeGNsdWRlQ2xhc3NJbnRlcmNlcHRvcnMKICAgICBwdWJsaWMgdm9pZCBub3RoaW5nKCkge30KIAotICAgIEBJbnRlcmNlcHRvcnMoe0ludGVyY2VwdG9yRS5jbGFzcywgSW50ZXJjZXB0b3JGLmNsYXNzfSkgICAgCisgICAgQEludGVyY2VwdG9ycyh7SW50ZXJjZXB0b3JFLmNsYXNzLCBJbnRlcmNlcHRvckYuY2xhc3N9KQogICAgIHB1YmxpYyB2b2lkIGRjYmFlZigpIHt9CiAKICAgICAvLyB0b3RhbCBvcmRlcmluZyBvdmVycmlkZGVuIGluIGRlcGxveW1lbnQgZGVzY3JpcHRvcgotICAgIEBJbnRlcmNlcHRvcnMoe0ludGVyY2VwdG9yRS5jbGFzcywgSW50ZXJjZXB0b3JGLmNsYXNzfSkgICAgCisgICAgQEludGVyY2VwdG9ycyh7SW50ZXJjZXB0b3JFLmNsYXNzLCBJbnRlcmNlcHRvckYuY2xhc3N9KQogICAgIHB1YmxpYyB2b2lkIGFiY2RlZigpIHt9CiAKICAgICAvLyBiaW5kaW5nIGRlc2NyaWJlZCBpbiBkZXBsb3ltZW50IGRlc2NyaXB0b3IKQEAgLTcxLDUgKzcxLDUgQEAKICAgICAgICAgQ29tbW9uLmNoZWNrUmVzdWx0cyhjdHgpOwogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvZWpiL1NsZXNzRUpCNC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvU2xlc3NFSkI0LmphdmEKaW5kZXggNzI0Y2NmNi4uOTg5YTRmZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvU2xlc3NFSkI0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvU2xlc3NFSkI0LmphdmEKQEAgLTM1LDcgKzM1LDcgQEAKICAgICBwcml2YXRlIGJvb2xlYW4gYXJvdW5kSW52b2tlQ2FsbGVkID0gZmFsc2U7CiAKICAgICBwdWJsaWMgdm9pZCBjYmQoKSB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gU2xlc3NFSkI0OmNiZCgpLiAgYXJvdW5kSW52b2tlQ2FsbGVkID0gIiArIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIFNsZXNzRUpCNDpjYmQoKS4gIGFyb3VuZEludm9rZUNhbGxlZCA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJvdW5kSW52b2tlQ2FsbGVkKTsKIAogICAgICAgICAvLyBhIGxpdHRsZSBleHRyYSBjaGVja2luZyB0byBtYWtlIHN1cmUgYXJvdW5kSW52b2tlIGlzIGludm9rZWQuLi4KQEAgLTU2LDEyICs1NiwxMiBAQAogICAgICAgICAgICAgICAgICAgIEludGVyY2VwdG9yRS5jbGFzcywgSW50ZXJjZXB0b3JGLmNsYXNzfSkKICAgICBwdWJsaWMgdm9pZCBhYmVmKGludCBpKSB7fQogCi0gICAgLy8gQEV4Y2x1ZGVEZWZhdWx0SW50ZXJjZXB0b3JzIGlzIGEgbm8tb3AgaGVyZSBzaW5jZSBpdCAKKyAgICAvLyBARXhjbHVkZURlZmF1bHRJbnRlcmNlcHRvcnMgaXMgYSBuby1vcCBoZXJlIHNpbmNlIGl0CiAgICAgLy8gd2FzIGFscmVhZHkgZXhjbHVkZWQgYXQgY2xhc3MtbGV2ZWwKICAgICBARXhjbHVkZURlZmF1bHRJbnRlcmNlcHRvcnMKICAgICBASW50ZXJjZXB0b3JzKHtJbnRlcmNlcHRvckUuY2xhc3MsIEludGVyY2VwdG9yRi5jbGFzc30pCiAgICAgcHVibGljIHZvaWQgY2JkZWYoKSB7fQotICAgIAorCiAgICAgQEV4Y2x1ZGVDbGFzc0ludGVyY2VwdG9ycwogICAgIHB1YmxpYyB2b2lkIG5vdGhpbmcoKSB7fQogCkBAIC03Nyw3ICs3Nyw3IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiB9Ci0gICAgCisKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvU2xlc3NFSkI1LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2VqYi9TbGVzc0VKQjUuamF2YQppbmRleCAwYTU3M2QwLi5jNjMyN2YxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2VqYi9TbGVzc0VKQjUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2JpbmRpbmdzL2VqYi9TbGVzc0VKQjUuamF2YQpAQCAtMzcsNyArMzcsNyBAQAogICAgIHByaXZhdGUgYm9vbGVhbiBhcm91bmRJbnZva2VDYWxsZWQgPSBmYWxzZTsKIAogICAgIHB1YmxpYyB2b2lkIGFiZGMoKSB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gU2xlc3NFSkI1OmFiZGMoKS4gIGFyb3VuZEludm9rZUNhbGxlZCA9ICIgKyAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbiBTbGVzc0VKQjU6YWJkYygpLiAgYXJvdW5kSW52b2tlQ2FsbGVkID0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcm91bmRJbnZva2VDYWxsZWQpOwogCiAgICAgICAgIC8vIGEgbGl0dGxlIGV4dHJhIGNoZWNraW5nIHRvIG1ha2Ugc3VyZSBhcm91bmRJbnZva2UgaXMgaW52b2tlZC4uLgpAQCAtNjgsNyArNjgsNyBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogfQotICAgIAorCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYmluZGluZ3MvZWpiL1NsZXNzRUpCNi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvU2xlc3NFSkI2LmphdmEKaW5kZXggZWQ5MDVmNi4uMjlmNTAxYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvU2xlc3NFSkI2LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9iaW5kaW5ncy9lamIvU2xlc3NFSkI2LmphdmEKQEAgLTM1LDEwICszNSwxMCBAQAogewogICAgIGJvb2xlYW4gYXJvdW5kSW52b2tlQ2FsbGVkID0gZmFsc2U7CiAKLSAgICAKKwogICAgIEBJbnRlcmNlcHRvcnMoe0ludGVyY2VwdG9yQS5jbGFzcywgSW50ZXJjZXB0b3JHLmNsYXNzfSkKICAgICBwdWJsaWMgdm9pZCBhZygpIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbiBTbGVzc0VKQjY6YWcoKS4gIGFyb3VuZEludm9rZUNhbGxlZCA9ICIgKyAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbiBTbGVzc0VKQjY6YWcoKS4gIGFyb3VuZEludm9rZUNhbGxlZCA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJvdW5kSW52b2tlQ2FsbGVkKTsKIAogICAgICAgICBpZiggIWFyb3VuZEludm9rZUNhbGxlZCApIHsKQEAgLTUwLDE3ICs1MCwxNyBAQAogICAgIHB1YmxpYyB2b2lkIGFnKGludCBwYXJhbTEpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbiBTbGVzc0VKQjY6YWcoaW50IHBhcmFtKS4gICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgImFyb3VuZEludm9rZUNhbGxlZCA9ICIgKyBhcm91bmRJbnZva2VDYWxsZWQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgaWYoIGFyb3VuZEludm9rZUNhbGxlZCApIHsKICAgICAgICAgICAgIGFyb3VuZEludm9rZUNhbGxlZCA9IGZhbHNlOwogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiYmVhbiBjbGFzcyBhcm91bmRJbnZva2Ugd2FzIGluY29ycmVjdGx5IGNhbGxlZCIpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgLy8gYmcoKSAoYnV0IG5vdCBiZyhwYXJhbSkpIG1hcmtlZCB0aHJvdWdoIGVqYi1qYXIueG1sIAorICAgIC8vIGJnKCkgKGJ1dCBub3QgYmcocGFyYW0pKSBtYXJrZWQgdGhyb3VnaCBlamItamFyLnhtbAogICAgIC8vIGFzIGhhdmluZyBpbnRlcmNlcHRvcnMgQixHCiAgICAgcHVibGljIHZvaWQgYmcoKSB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gU2xlc3NFSkI2OmJnKCkuICBhcm91bmRJbnZva2VDYWxsZWQgPSAiICsgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gU2xlc3NFSkI2OmJnKCkuICBhcm91bmRJbnZva2VDYWxsZWQgPSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyb3VuZEludm9rZUNhbGxlZCk7CiAKICAgICAgICAgaWYoICFhcm91bmRJbnZva2VDYWxsZWQgKSB7CkBAIC03Miw3ICs3Miw3IEBACiAgICAgcHVibGljIHZvaWQgYmcoaW50IHBhcmFtMSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIFNsZXNzRUpCNjpiZyhpbnQgcGFyYW0pLiAgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJvdW5kSW52b2tlQ2FsbGVkID0gIiArIGFyb3VuZEludm9rZUNhbGxlZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICBpZiggYXJvdW5kSW52b2tlQ2FsbGVkICkgewogICAgICAgICAgICAgYXJvdW5kSW52b2tlQ2FsbGVkID0gZmFsc2U7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJiZWFuIGNsYXNzIGFyb3VuZEludm9rZSB3YXMgaW5jb3JyZWN0bHkgY2FsbGVkIik7CkBAIC04Miw3ICs4Miw3IEBACiAgICAgLy8gb3ZlcmxvYWRlZCB2ZXJzaW9uIG9mIGludGVyY2VwdG9yLWJpbmRpbmcgdXNlZCBpbiBlamItamFyLnhtbCB0bwogICAgIC8vIG1hcmsgYWxsIG1ldGhvZHMgd2l0aCBuYW1lIGNnIGFzIGhhdmluZyBpbnRlcmNlcHRvcnMgQyxHCiAgICAgcHVibGljIHZvaWQgY2coKSB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gU2xlc3NFSkI2OmNnKCkuICBhcm91bmRJbnZva2VDYWxsZWQgPSAiICsgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gU2xlc3NFSkI2OmNnKCkuICBhcm91bmRJbnZva2VDYWxsZWQgPSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyb3VuZEludm9rZUNhbGxlZCk7CiAKICAgICAgICAgaWYoICFhcm91bmRJbnZva2VDYWxsZWQgKSB7CkBAIC05Miw3ICs5Miw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgY2coaW50IHBhcmFtMSkgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIFNsZXNzRUpCNjpjZyhpbnQpLiAgYXJvdW5kSW52b2tlQ2FsbGVkID0gIiArIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIFNsZXNzRUpCNjpjZyhpbnQpLiAgYXJvdW5kSW52b2tlQ2FsbGVkID0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcm91bmRJbnZva2VDYWxsZWQpOwogCiAgICAgICAgIGlmKCAhYXJvdW5kSW52b2tlQ2FsbGVkICkgewpAQCAtMTAyLDcgKzEwMiw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgY2coU3RyaW5nIHBhcmFtMSwgZG91YmxlIHBhcmFtMikgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIFNsZXNzRUpCNjpjZyhTdHJpbmcsIGRvdWJsZSkuICBhcm91bmRJbnZva2VDYWxsZWQgPSAiICsgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gU2xlc3NFSkI2OmNnKFN0cmluZywgZG91YmxlKS4gIGFyb3VuZEludm9rZUNhbGxlZCA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJvdW5kSW52b2tlQ2FsbGVkKTsKIAogICAgICAgICBpZiggIWFyb3VuZEludm9rZUNhbGxlZCApIHsKQEAgLTExMiwxMSArMTEyLDExIEBACiAgICAgfQogCiAKLSAgICAvLyBLaW5kIG9mIGxpa2UgYWcoKSwgaW4gdGhhdCBkZygpIGlzIG92ZXJsb2FkZWQsIGJ1dCBpdCdzIHRoZSAKKyAgICAvLyBLaW5kIG9mIGxpa2UgYWcoKSwgaW4gdGhhdCBkZygpIGlzIG92ZXJsb2FkZWQsIGJ1dCBpdCdzIHRoZQogICAgIC8vIHNpZ25hdHVyZSB0aGF0IGhhcyBhIHBhcmFtZXRlciB0aGF0IGlzIGFzc2lnbmVkIGludGVyY2VwdG9ycyB1c2luZwogICAgIC8vIEBJbnRlcmNlcHRvci4KICAgICBwdWJsaWMgdm9pZCBkZygpIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbiBTbGVzc0VKQjY6ZGcoKS4gIGFyb3VuZEludm9rZUNhbGxlZCA9ICIgKyAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbiBTbGVzc0VKQjY6ZGcoKS4gIGFyb3VuZEludm9rZUNhbGxlZCA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJvdW5kSW52b2tlQ2FsbGVkKTsKIAogICAgICAgICBpZiggYXJvdW5kSW52b2tlQ2FsbGVkICkgewpAQCAtMTI5LDcgKzEyOSw3IEBACiAgICAgcHVibGljIHZvaWQgZGcoaW50IHBhcmFtMSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIFNsZXNzRUpCNjpkZyhpbnQgcGFyYW0pLiAgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJvdW5kSW52b2tlQ2FsbGVkID0gIiArIGFyb3VuZEludm9rZUNhbGxlZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICBpZiggIWFyb3VuZEludm9rZUNhbGxlZCApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImJlYW4gY2xhc3MgYXJvdW5kSW52b2tlIG5vdCBjYWxsZWQiKTsKICAgICAgICAgfQpAQCAtMTQxLDcgKzE0MSw3IEBACiAgICAgLy8gTGlrZSBkZygpLCBleGNlcHQgdGhhdCBkZyhpbnQgcGFyYW0pIGlzIGFzc2lnbmVkIGl0cyBpbnRlcmNlcHRvcgogICAgIC8vIGNoYWluIHRocm91Z2ggZWpiLWphci54bWwKICAgICBwdWJsaWMgdm9pZCBlZygpIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbiBTbGVzc0VKQjY6ZWcoKS4gIGFyb3VuZEludm9rZUNhbGxlZCA9ICIgKyAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbiBTbGVzc0VKQjY6ZWcoKS4gIGFyb3VuZEludm9rZUNhbGxlZCA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJvdW5kSW52b2tlQ2FsbGVkKTsKIAogICAgICAgICBpZiggYXJvdW5kSW52b2tlQ2FsbGVkICkgewpAQCAtMTUzLDE1ICsxNTMsMTUgQEAKICAgICBwdWJsaWMgdm9pZCBlZyhpbnQgcGFyYW0xKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gU2xlc3NFSkI2OmVnKGludCBwYXJhbSkuICAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcm91bmRJbnZva2VDYWxsZWQgPSAiICsgYXJvdW5kSW52b2tlQ2FsbGVkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgIGlmKCAhYXJvdW5kSW52b2tlQ2FsbGVkICkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiYmVhbiBjbGFzcyBhcm91bmRJbnZva2Ugbm90IGNhbGxlZCIpOwogICAgICAgICB9CiAgICAgICAgIGFyb3VuZEludm9rZUNhbGxlZCA9IGZhbHNlOwogICAgIH0KIAotICAgIAorCiAKIH0KLSAgICAKKwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYnVpbGQueG1sCmluZGV4IDc3ZWMzZTkuLmFkYTI1ZTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvYnVpbGQueG1sCkBAIC0zMCw3ICszMCw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYmluZGluZ3MiLz4KLSAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXNzaW9uIi8+IAorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InNlc3Npb24iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJpbmhlcml0ZW5jZSIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9Im1kYiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjAsOSArNjAsOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+Ci0JCVVzYWdlOgotCQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamItZWpiMzAtaW50ZXJjZXB0b3JzIHRlc3RzKQotCTwvZWNobz4KKyAgICA8ZWNobz4KKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYi1lamIzMC1pbnRlcmNlcHRvcnMgdGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbmhlcml0ZW5jZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbmhlcml0ZW5jZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGVmMGY0YWYuLjNmZDk4ZTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvaW5oZXJpdGVuY2UvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE3ICsxNSwxNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMwLWludGVyY2VwdG9ycy1zZXNzaW9uIi8+CiAKLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIAotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKIAotCXZhbHVlPSJDbGllbnQiLz4KKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogCkBAIC0zNSwxNSArMzUsMTUgQEAKIAogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+CiAKLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAogCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KIAotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KIAotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbmhlcml0ZW5jZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2J1aWxkLnhtbAppbmRleCA1MzY4ZTY2Li4xN2JhYWFhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2J1aWxkLnhtbApAQCAtNTAsNyArNTAsNyBAQAogCiAgICAgPC90YXJnZXQ+CiAKLSAKKwogCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAKQEAgLTc0LDIxICs3NCwyMSBAQAogCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+CiAKLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAKICAgICAgICAgICAgICAgdmFsdWU9IioqLypFeGNlcHRpb24uY2xhc3MsKiovKkludGVyY2VwdG9yKi5jbGFzcywqKi9EdW1teSouY2xhc3MsKiovU2xlc3MqLmNsYXNzLCoqL1NmdWwqLmNsYXNzLCIvPgogCi0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qRXhjZXB0aW9uLmNsYXNzLCoqL0NsaWVudC5jbGFzcywqKi9TZnVsLmNsYXNzIi8+CiAKICAgICAgICAgPC9hbnRjYWxsPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCi0gICAgCiAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKIAogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogCkBAIC0xMDQsMTMgKzEwNCwxMyBAQAogCiAgICAgPC90YXJnZXQ+CiAKLSAKKwogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CiAKLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvaW5oZXJpdGVuY2UvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbmhlcml0ZW5jZS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggNDAzN2YwNS4uNjYwYTdkZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbmhlcml0ZW5jZS9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbmhlcml0ZW5jZS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTUzLDE0ICs1MywxNCBAQAogICAgIHByaXZhdGUgc3RhdGljIEBFSkIgU2Z1bCBzZnVsOTsKIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLQlkb1Rlc3QxKCk7Ci0JZG9UZXN0MigpOwotCWRvVGVzdDMoKTsKLQlkb1Rlc3Q0KCk7Ci0JZG9UZXN0NigpOwotCS8qKglkb1Rlc3Q3XzgoKTsgKiovIC8vIGVuYWJsZSB3aGVuIHdlIGhhdmUgcGFzc2l2YXRpb24KLQlkb1Rlc3Q5KCk7Ci0JZG9UZXN0MTAoKTsKKyAgICBkb1Rlc3QxKCk7CisgICAgZG9UZXN0MigpOworICAgIGRvVGVzdDMoKTsKKyAgICBkb1Rlc3Q0KCk7CisgICAgZG9UZXN0NigpOworICAgIC8qKiAgICBkb1Rlc3Q3XzgoKTsgKiovIC8vIGVuYWJsZSB3aGVuIHdlIGhhdmUgcGFzc2l2YXRpb24KKyAgICBkb1Rlc3Q5KCk7CisgICAgZG9UZXN0MTAoKTsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgZG9UZXN0MSgpIHsKQEAgLTY4LDkgKzY4LDkgQEAKIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnZva2luZyBzdGF0ZWZ1bCIpOwogICAgICAgICAgICAgc2Z1bC5oZWxsbygpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIisrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyIpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIisrKysrIEludGVyY2VwdG9yQ2FsbENvdW50OiAiICsgc2Z1bC5nZXRDb3VudCgpKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCIrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIrKysrKyBJbnRlcmNlcHRvckNhbGxDb3VudDogIiArIHNmdWwuZ2V0Q291bnQoKSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrIik7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgdGVzdDEiICwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTgzLDggKzgzLDggQEAKICAgICAgICAgICAgIHNmdWwudGhyb3dBcHBFeGNlcHRpb24oIlhZWiIpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIHRlc3QyIiAsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0gY2F0Y2ggKEFwcEV4Y2VwdGlvbiBhcHBFeCkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBleHBlY3RlZCBBcHBFeGNlcHRpb246ICIgKyBhcHBFeCk7Ci0gICAgICAgIAlzdGF0LmFkZFN0YXR1cygibG9jYWwgdGVzdDIiICwgc3RhdC5QQVNTKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgZXhwZWN0ZWQgQXBwRXhjZXB0aW9uOiAiICsgYXBwRXgpOworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIHRlc3QyIiAsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgdGVzdDIiICwgc3RhdC5GQUlMKTsKQEAgLTk0LDEwICs5NCwxMCBAQAogICAgIHByaXZhdGUgdm9pZCBkb1Rlc3QzKCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgU3RyaW5nIHJlc3VsdCA9IHNmdWwuY29tcHV0ZU1pZCg0LCAxMCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1Rlc3QzXTogR290OiAiICsgcmVzdWx0KTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbVGVzdDNdOiBHb3Q6ICIgKyByZXN1bHQpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIHRlc3QzIiAsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2ggKFN3YXBBcmd1bWVudHNFeGNlcHRpb24gc3dhcEV4KSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IHVuZXhwZWN0ZWQgRXhjZXB0aW9uOiAiICsgc3dhcEV4KTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgdW5leHBlY3RlZCBFeGNlcHRpb246ICIgKyBzd2FwRXgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIHRlc3QzIiAsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CkBAIC0xMDgsMTEgKzEwOCwxMSBAQAogICAgIHByaXZhdGUgdm9pZCBkb1Rlc3Q0KCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgU3RyaW5nIHJlc3VsdCA9IHNmdWwuY29tcHV0ZU1pZCgyMywgMTApOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltUZXN0NF06IEdvdDogIiArIHJlc3VsdAotCQkJICAgICsgIiBJTlNURUFEIG9mIFN3YXBBcmd1bWVudHNFeGNlcHRpb24iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbVGVzdDRdOiBHb3Q6ICIgKyByZXN1bHQKKyAgICAgICAgICAgICAgICArICIgSU5TVEVBRCBvZiBTd2FwQXJndW1lbnRzRXhjZXB0aW9uIik7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgdGVzdDQiICwgc3RhdC5GQUlMKTsKICAgICAgICAgfSBjYXRjaCAoU3dhcEFyZ3VtZW50c0V4Y2VwdGlvbiBzd2FwRXgpIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgZXhwZWN0ZWQgRXhjZXB0aW9uOiAiICsgc3dhcEV4KTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgZXhwZWN0ZWQgRXhjZXB0aW9uOiAiICsgc3dhcEV4KTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCB0ZXN0NCIgLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwpAQCAtMTI1LDcgKzEyNSw3IEBACiAgICAgICAgICAgICBzZnVsLmVhdEV4Y2VwdGlvbigpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIHRlc3Q2IiAsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgdW5leHBlY3RlZCBFeGNlcHRpb246ICIgKyBlKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgdW5leHBlY3RlZCBFeGNlcHRpb246ICIgKyBlKTsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgdGVzdDYiICwgc3RhdC5GQUlMKTsKICAgICAgICAgfQpAQCAtMTMzLDMwICsxMzMsMzAgQEAKIAogICAgIHByaXZhdGUgdm9pZCBkb1Rlc3Q3XzgoKSB7CiAgICAgICAgIHRyeSB7Ci0JICAgIGludCBzeiA9IDIwOworICAgICAgICBpbnQgc3ogPSAyMDsKICAgICAgICAgQ29udGV4dCBjdHggPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkgICAgc2Z1bC5yZXNldExpZmVjeWNsZUNhbGxiYWNrQ291bnRlcnMoKTsKLQkgICAgU2Z1bFtdIHNmdWxzID0gbmV3IFNmdWxbc3pdOwotCSAgICBmb3IgKGludCBpPTA7IGk8c3o7IGkrKykgewotICAgIAkJc2Z1bHNbaV0gPSAoU2Z1bCkgY3R4Lmxvb2t1cCgiY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5pbnRlcmNlcHRvcnMuc2Vzc2lvbi5TZnVsIik7Ci0gICAgCQlpbnQgcHJldkluZGV4ID0gKGkgPT0wKSA/IDAgOiBpLTE7Ci0gICAgCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0ZWQgc2Z1bFsiK2krIl06ICIgKyBzZnVsc1tpXSArICIgPT0+ICIKLSAgICAJCSAgICAgICAgKyBzZnVsc1twcmV2SW5kZXhdLmVxdWFscyhzZnVsc1tpXSkpOwotCQkgICAgc2Z1bHNbaV0uc2V0SUQoaSk7CisgICAgICAgIHNmdWwucmVzZXRMaWZlY3ljbGVDYWxsYmFja0NvdW50ZXJzKCk7CisgICAgICAgIFNmdWxbXSBzZnVscyA9IG5ldyBTZnVsW3N6XTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPHN6OyBpKyspIHsKKyAgICAgICAgICAgIHNmdWxzW2ldID0gKFNmdWwpIGN0eC5sb29rdXAoImNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaW50ZXJjZXB0b3JzLnNlc3Npb24uU2Z1bCIpOworICAgICAgICAgICAgaW50IHByZXZJbmRleCA9IChpID09MCkgPyAwIDogaS0xOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGVkIHNmdWxbIitpKyJdOiAiICsgc2Z1bHNbaV0gKyAiID09PiAiCisgICAgICAgICAgICAgICAgICAgICsgc2Z1bHNbcHJldkluZGV4XS5lcXVhbHMoc2Z1bHNbaV0pKTsKKyAgICAgICAgICAgIHNmdWxzW2ldLnNldElEKGkpOwogICAgICAgICAgICAgc2Z1bHNbaV0uZ2V0Q291bnQoKTsKLQkgICAgfQotCSAgICBzbGVlcEZvcigxMCk7Ci0JICAgIGZvciAoaW50IGk9MDsgaTxzejsgaSsrKSB7Ci0JICAgICAgICBzZnVsc1tpXS5nZXRDb3VudCgpOwotCSAgICB9Ci0JICAgIGludCBwYXNzaXZhdGlvbkNvdW50ID0gc2Z1bC5nZXRQcmVQYXNzaXZhdGVDYWxsYmFja0NvdW50KCk7Ci0JICAgIGludCBhY3RpdmF0aW9uQ291bnQgPSBzZnVsLmdldFBvc3RBY3RpdmF0ZUNhbGxiYWNrQ291bnQoKTsKKyAgICAgICAgfQorICAgICAgICBzbGVlcEZvcigxMCk7CisgICAgICAgIGZvciAoaW50IGk9MDsgaTxzejsgaSsrKSB7CisgICAgICAgICAgICBzZnVsc1tpXS5nZXRDb3VudCgpOworICAgICAgICB9CisgICAgICAgIGludCBwYXNzaXZhdGlvbkNvdW50ID0gc2Z1bC5nZXRQcmVQYXNzaXZhdGVDYWxsYmFja0NvdW50KCk7CisgICAgICAgIGludCBhY3RpdmF0aW9uQ291bnQgPSBzZnVsLmdldFBvc3RBY3RpdmF0ZUNhbGxiYWNrQ291bnQoKTsKIAogICAgICAgICBib29sZWFuIHN0YXR1cyA9IChwYXNzaXZhdGlvbkNvdW50ID4gMCkgJiYgKGFjdGl2YXRpb25Db3VudD4gMCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigicGFzc2l2YXRpb246ICIgKyBwYXNzaXZhdGlvbkNvdW50ICsgIjsgIgotCQkgICAgKyAiYWN0aXZhdGlvbjogIiArIGFjdGl2YXRpb25Db3VudCk7CisgICAgICAgICAgICArICJhY3RpdmF0aW9uOiAiICsgYWN0aXZhdGlvbkNvdW50KTsKICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIHRlc3Q3IiAsCi0JCSAgICAoc3RhdHVzID09IHRydWUpID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKTsKKyAgICAgICAgICAgIChzdGF0dXMgPT0gdHJ1ZSkgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpOwogCiAgICAgICAgIGJvb2xlYW4gc3RhdGVSZXN0b3JlZCA9IHRydWU7CiAgICAgICAgIGZvciAoaW50IGk9MDsgaTxzejsgaSsrKSB7CkBAIC0xNzUsNDAgKzE3NSw0MCBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdDkoKSB7Ci0JCXRyeSB7Ci0JCQlzZnVsLmlzSW50ZXJjZXB0b3JDYWxsQ291bk9LKCk7Ci0JCQlzZnVsLmlzSW50ZXJjZXB0b3JDYWxsQ291bk9LKCk7Ci0JCQlzZnVsLmlzSW50ZXJjZXB0b3JDYWxsQ291bk9LKCk7Ci0JCQlzZnVsLmlzSW50ZXJjZXB0b3JDYWxsQ291bk9LKCk7Ci0JCQlTdHJpbmcgcmVzdWx0U3RyID0gc2Z1bC5pc0ludGVyY2VwdG9yQ2FsbENvdW5PSygpOwotCQkJYm9vbGVhbiByZXN1bHQgPSAidHJ1ZSB0cnVlIHRydWUgdHJ1ZSIuZXF1YWxzKHJlc3VsdFN0cik7Ci0JCQlzdGF0LmFkZFN0YXR1cygibG9jYWwgdGVzdDkgIiAgKyByZXN1bHRTdHIgLAotCQkgICAgICAgICAgICAgICAgKHJlc3VsdCkgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJCXN0YXQuYWRkU3RhdHVzKCJsb2NhbCB0ZXN0OSIgLCBzdGF0LkZBSUwpOwotCQl9Ci0JfQorICAgICAgICB0cnkgeworICAgICAgICAgICAgc2Z1bC5pc0ludGVyY2VwdG9yQ2FsbENvdW5PSygpOworICAgICAgICAgICAgc2Z1bC5pc0ludGVyY2VwdG9yQ2FsbENvdW5PSygpOworICAgICAgICAgICAgc2Z1bC5pc0ludGVyY2VwdG9yQ2FsbENvdW5PSygpOworICAgICAgICAgICAgc2Z1bC5pc0ludGVyY2VwdG9yQ2FsbENvdW5PSygpOworICAgICAgICAgICAgU3RyaW5nIHJlc3VsdFN0ciA9IHNmdWwuaXNJbnRlcmNlcHRvckNhbGxDb3VuT0soKTsKKyAgICAgICAgICAgIGJvb2xlYW4gcmVzdWx0ID0gInRydWUgdHJ1ZSB0cnVlIHRydWUiLmVxdWFscyhyZXN1bHRTdHIpOworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIHRlc3Q5ICIgICsgcmVzdWx0U3RyICwKKyAgICAgICAgICAgICAgICAgICAgICAgIChyZXN1bHQpID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgdGVzdDkiICwgc3RhdC5GQUlMKTsKKyAgICAgICAgfQorICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdDEwKCkgewotCQl0cnkgewotCQkJU3RyaW5nIHJlc3VsdFN0ciA9IHNmdWwuaXNQb3N0Q29uc3RydWN0Q2FsbENvdW5PSygpOwotCQkJYm9vbGVhbiByZXN1bHQgPSAidHJ1ZSB0cnVlIHRydWUgdHJ1ZSIuZXF1YWxzKHJlc3VsdFN0cik7Ci0JCQlzdGF0LmFkZFN0YXR1cygibG9jYWwgdGVzdDEwICIgICsgcmVzdWx0U3RyICwKLQkJICAgICAgICAgICAgICAgIChyZXN1bHQpID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCQlzdGF0LmFkZFN0YXR1cygibG9jYWwgdGVzdDEwIiAsIHN0YXQuRkFJTCk7Ci0JCX0KLQl9CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBTdHJpbmcgcmVzdWx0U3RyID0gc2Z1bC5pc1Bvc3RDb25zdHJ1Y3RDYWxsQ291bk9LKCk7CisgICAgICAgICAgICBib29sZWFuIHJlc3VsdCA9ICJ0cnVlIHRydWUgdHJ1ZSB0cnVlIi5lcXVhbHMocmVzdWx0U3RyKTsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCB0ZXN0MTAgIiAgKyByZXN1bHRTdHIgLAorICAgICAgICAgICAgICAgICAgICAgICAgKHJlc3VsdCkgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCB0ZXN0MTAiICwgc3RhdC5GQUlMKTsKKyAgICAgICAgfQorICAgIH0KIAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBzbGVlcEZvcihpbnQgc2Vjb25kcykgewotCXdoaWxlIChzZWNvbmRzLS0gPiAwKSB7Ci0JICAgIHRyeSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiIiArIHNlY29uZHMgKyAiIGxlZnQuLi4iKTsKLQkJVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCgxMDAwKTsKLQkgICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gaW5FeCkgewotCSAgICB9Ci0JfQorICAgIHdoaWxlIChzZWNvbmRzLS0gPiAwKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIiArIHNlY29uZHMgKyAiIGxlZnQuLi4iKTsKKyAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCgxMDAwKTsKKyAgICAgICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gaW5FeCkgeworICAgICAgICB9CisgICAgfQogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbmhlcml0ZW5jZS9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvaW5oZXJpdGVuY2UvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKaW5kZXggOWJjODdjNy4uYzBiN2U3YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbmhlcml0ZW5jZS9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCkBAIC0yNCw3ICsyNCw3IEBACiAgICAgICAgIDxlamItbmFtZT5TZnVsRUpCPC9lamItbmFtZT4KICAgICAgICAgPGJlYW4tY2FjaGU+CiAgICAgICAgICAgICA8bWF4LWNhY2hlLXNpemU+NDwvbWF4LWNhY2hlLXNpemU+Ci0JICAgIDxyZXNpemUtcXVhbnRpdHk+MjwvcmVzaXplLXF1YW50aXR5PgorICAgICAgICA8cmVzaXplLXF1YW50aXR5PjI8L3Jlc2l6ZS1xdWFudGl0eT4KICAgICAgICAgPC9iZWFuLWNhY2hlPgogICAgICA8L2VqYj4KICAgIDwvZW50ZXJwcmlzZS1iZWFucz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvaW5oZXJpdGVuY2UvZWpiL0Jhc2VJbnRlcmNlcHRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbmhlcml0ZW5jZS9lamIvQmFzZUludGVyY2VwdG9yLmphdmEKaW5kZXggYzNhMDhkNi4uYWUwODk2NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbmhlcml0ZW5jZS9lamIvQmFzZUludGVyY2VwdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbmhlcml0ZW5jZS9lamIvQmFzZUludGVyY2VwdG9yLmphdmEKQEAgLTI2LDcgKzI2LDcgQEAKIGltcG9ydCBqYWthcnRhLmVqYi5Qb3N0QWN0aXZhdGU7CiAKIHB1YmxpYyBjbGFzcyBCYXNlSW50ZXJjZXB0b3IKLQlpbXBsZW1lbnRzIGphdmEuaW8uU2VyaWFsaXphYmxlIHsKKyAgICBpbXBsZW1lbnRzIGphdmEuaW8uU2VyaWFsaXphYmxlIHsKIAogICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEJBU0VfSU5URVJDRVBUT1JfTkFNRSA9ICJCYXNlSW50ZXJjZXB0b3IiOwogCkBAIC00MSw5ICs0MSw5IEBACiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBiYXNlUG9zdENvbnN0cnVjdChJbnZvY2F0aW9uQ29udGV4dCBjdHgpCi0gICAgCXRocm93cyBSdW50aW1lRXhjZXB0aW9uIHsKLQkgICAgcG9zdENvbnN0cnVjdExpc3QgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKLQkgICAgcG9zdENvbnN0cnVjdExpc3QuYWRkKEJBU0VfSU5URVJDRVBUT1JfTkFNRSk7CisgICAgICAgIHRocm93cyBSdW50aW1lRXhjZXB0aW9uIHsKKyAgICAgICAgcG9zdENvbnN0cnVjdExpc3QgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKyAgICAgICAgcG9zdENvbnN0cnVjdExpc3QuYWRkKEJBU0VfSU5URVJDRVBUT1JfTkFNRSk7CiAgICAgICAgIGN0eC5nZXRDb250ZXh0RGF0YSgpLnB1dChnZXROYW1lKCksIHRoaXMpOwogICAgICAgICBiYXNlUENDb3VudCsrOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdHR0c6IEBQb3N0Q29uc3RydWN0IGZvcjogIiArIHRoaXMuZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOwpAQCAtNTksMjQgKzU5LDI0IEBACiAKICAgICBAQXJvdW5kSW52b2tlCiAgICAgcHVibGljIE9iamVjdCBiYXNlQXJvdW5kSW52b2tlKEludm9jYXRpb25Db250ZXh0IGN0eCkKLSAgIAkJdGhyb3dzIEV4Y2VwdGlvbgorICAgICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewotCSAgICBhcm91bmRJbnZva2VMaXN0ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7Ci0JICAgIGFyb3VuZEludm9rZUxpc3QuYWRkKEJBU0VfSU5URVJDRVBUT1JfTkFNRSk7Ci0JCWN0eC5nZXRDb250ZXh0RGF0YSgpLnB1dChnZXROYW1lKCksIHRoaXMpOwotCQliYXNlQUlDb3VudCsrOwotICAgIAlyZXR1cm4gY3R4LnByb2NlZWQoKTsKKyAgICAgICAgYXJvdW5kSW52b2tlTGlzdCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworICAgICAgICBhcm91bmRJbnZva2VMaXN0LmFkZChCQVNFX0lOVEVSQ0VQVE9SX05BTUUpOworICAgICAgICBjdHguZ2V0Q29udGV4dERhdGEoKS5wdXQoZ2V0TmFtZSgpLCB0aGlzKTsKKyAgICAgICAgYmFzZUFJQ291bnQrKzsKKyAgICAgICAgcmV0dXJuIGN0eC5wcm9jZWVkKCk7CiAgICAgfQogCiAgICAgQFByZVBhc3NpdmF0ZQogICAgIHB1YmxpYyB2b2lkIHByZVBhc3NpdmF0ZShJbnZvY2F0aW9uQ29udGV4dCBjdHgpIHsKLQlwcmVQYXNzaXZhdGVDb3VudCsrOwotCX0KKyAgICBwcmVQYXNzaXZhdGVDb3VudCsrOworICAgIH0KIAogICAgIEBQb3N0QWN0aXZhdGUKICAgICBwdWJsaWMgdm9pZCBwb3N0QWN0aXZhdGUoSW52b2NhdGlvbkNvbnRleHQgY3R4KSB7Ci0JcG9zdEFjdGl2YXRlQ291bnQrKzsKLQl9CisgICAgcG9zdEFjdGl2YXRlQ291bnQrKzsKKyAgICB9CiAKIAogICAgIFN0cmluZyBnZXROYW1lKCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbmhlcml0ZW5jZS9lamIvQmFzZUxldmVsMkludGVyY2VwdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2VqYi9CYXNlTGV2ZWwySW50ZXJjZXB0b3IuamF2YQppbmRleCBlYmEzMWYzLi45YTliN2RjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2VqYi9CYXNlTGV2ZWwySW50ZXJjZXB0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2VqYi9CYXNlTGV2ZWwySW50ZXJjZXB0b3IuamF2YQpAQCAtMzAsNyArMzAsNyBAQAogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcm90ZWN0ZWQgdm9pZCBvdmVycmlkYWJsZVBvc3RDb25zdHJ1Y3RNZXRob2QoSW52b2NhdGlvbkNvbnRleHQgY3R4KQotICAgIAl0aHJvd3MgUnVudGltZUV4Y2VwdGlvbiB7CisgICAgICAgIHRocm93cyBSdW50aW1lRXhjZXB0aW9uIHsKICAgICAgICAgcG9zdENvbnN0cnVjdExpc3QuYWRkKExFVkVMMl9JTlRFUkNFUFRPUl9OQU1FKTsKICAgICAgICAgYmFzZUxldmVsMlBDQ291bnQrKzsKICAgICAgICAgdHJ5IHsKQEAgLTQ0LDggKzQ0LDggQEAKIAogICAgIEBBcm91bmRJbnZva2UKICAgICBwcm90ZWN0ZWQgT2JqZWN0IG92ZXJyaWRhYmxlQXJvdW5kSW52b2tlTWV0aG9kKEludm9jYXRpb25Db250ZXh0IGN0eCkKLSAgICAJdGhyb3dzIFRocm93YWJsZSB7Ci0JYXJvdW5kSW52b2tlTGlzdC5hZGQoTEVWRUwyX0lOVEVSQ0VQVE9SX05BTUUpOworICAgICAgICB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBhcm91bmRJbnZva2VMaXN0LmFkZChMRVZFTDJfSU5URVJDRVBUT1JfTkFNRSk7CiAgICAgICAgIGJhc2VMZXZlbDJBSUNvdW50Kys7CiAgICAgICAgIHJldHVybiBjdHgucHJvY2VlZCgpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvaW5oZXJpdGVuY2UvZWpiL0Jhc2VMaWZlY3ljbGVJbnRlcmNlcHRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbmhlcml0ZW5jZS9lamIvQmFzZUxpZmVjeWNsZUludGVyY2VwdG9yLmphdmEKaW5kZXggZjhmNzdjZi4uNDhlYzJmMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbmhlcml0ZW5jZS9lamIvQmFzZUxpZmVjeWNsZUludGVyY2VwdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbmhlcml0ZW5jZS9lamIvQmFzZUxpZmVjeWNsZUludGVyY2VwdG9yLmphdmEKQEAgLTI1LDcgKzI1LDcgQEAKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dDsKIAogcHVibGljIGNsYXNzIEJhc2VMaWZlY3ljbGVJbnRlcmNlcHRvcgotCWltcGxlbWVudHMgamF2YS5pby5TZXJpYWxpemFibGUgeworICAgIGltcGxlbWVudHMgamF2YS5pby5TZXJpYWxpemFibGUgewogCiAgICAgcHJvdGVjdGVkIGludCBiYXNlUHJlUGFzc2l2YXRlQ291bnQgPSAwOwogICAgIHByb3RlY3RlZCBpbnQgYmFzZVBvc3RBY3RpdmF0ZUNvdW50ID0gMDsKQEAgLTM2LDEyICszNiwxMiBAQAogCiAgICAgQFByZVBhc3NpdmF0ZQogICAgIHByaXZhdGUgdm9pZCBwcmVQYXNzaXZhdGUoSW52b2NhdGlvbkNvbnRleHQgY3R4KSB7Ci0JYmFzZVByZVBhc3NpdmF0ZUNvdW50Kys7CisgICAgYmFzZVByZVBhc3NpdmF0ZUNvdW50Kys7CiAgICAgfQogCiAgICAgQFBvc3RBY3RpdmF0ZQogICAgIHByaXZhdGUgdm9pZCBwb3N0QWN0aXZhdGUoSW52b2NhdGlvbkNvbnRleHQgY3R4KSB7Ci0JYmFzZVBvc3RBY3RpdmF0ZUNvdW50Kys7CisgICAgYmFzZVBvc3RBY3RpdmF0ZUNvdW50Kys7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2VqYi9EaXN0aW5jdE1ldGhvZHNJbnRlcmNlcHRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbmhlcml0ZW5jZS9lamIvRGlzdGluY3RNZXRob2RzSW50ZXJjZXB0b3IuamF2YQppbmRleCA2NTQ1YzZhLi41NWE0OWI2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2VqYi9EaXN0aW5jdE1ldGhvZHNJbnRlcmNlcHRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvaW5oZXJpdGVuY2UvZWpiL0Rpc3RpbmN0TWV0aG9kc0ludGVyY2VwdG9yLmphdmEKQEAgLTMyLDcgKzMyLDcgQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGRpc3RpbmN0UG9zdENvbnN0cnVjdChJbnZvY2F0aW9uQ29udGV4dCBjdHgpIHRocm93cyBSdW50aW1lRXhjZXB0aW9uIHsKLQlwb3N0Q29uc3RydWN0TGlzdC5hZGQoRElTVElOQ1RfSU5URVJDRVBUT1JfTkFNRSk7CisgICAgcG9zdENvbnN0cnVjdExpc3QuYWRkKERJU1RJTkNUX0lOVEVSQ0VQVE9SX05BTUUpOwogICAgICAgICBkaXN0aW5jdFBDQ291bnQrKzsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGN0eC5wcm9jZWVkKCk7CkBAIC00Niw3ICs0Niw3IEBACiAgICAgQEFyb3VuZEludm9rZQogICAgIHByaXZhdGUgT2JqZWN0IGRpc3RpbmN0TWV0aG9kSW50ZXJjZXB0b3IoSW52b2NhdGlvbkNvbnRleHQgY3R4KQogICAgICAgICAgICAgdGhyb3dzIFRocm93YWJsZSB7Ci0JYXJvdW5kSW52b2tlTGlzdC5hZGQoRElTVElOQ1RfSU5URVJDRVBUT1JfTkFNRSk7CisgICAgYXJvdW5kSW52b2tlTGlzdC5hZGQoRElTVElOQ1RfSU5URVJDRVBUT1JfTkFNRSk7CiAgICAgICAgIGRpc3RpbmN0QUlDb3VudCsrOwogICAgICAgICByZXR1cm4gY3R4LnByb2NlZWQoKTsKICAgICB9CkBAIC01NCwyOSArNTQsMjkgQEAKICAgICBwcm90ZWN0ZWQgYm9vbGVhbiBpc0FJQ291bnRPSygpIHsKICAgICAgICAgcmV0dXJuIChkaXN0aW5jdEFJQ291bnQgPT0gYmFzZUFJQ291bnQpCiAgICAgICAgICAgICAgICAgJiYgKGRpc3RpbmN0QUlDb3VudCA9PSBiYXNlTGV2ZWwyQUlDb3VudCkKLQkJCSYmIGNoZWNrRm9yQ29ycmVjdFNlcXVlbmNlKGFyb3VuZEludm9rZUxpc3QpOwotCX0KKyAgICAgICAgICAgICYmIGNoZWNrRm9yQ29ycmVjdFNlcXVlbmNlKGFyb3VuZEludm9rZUxpc3QpOworICAgIH0KIAogICAgIHByb3RlY3RlZCBib29sZWFuIGlzUG9zdENvbnN0cnVjdENhbGxDb3VuT0soKSB7CiAgICAgICAgIHJldHVybiAoZGlzdGluY3RQQ0NvdW50ID09IGJhc2VQQ0NvdW50KQogICAgICAgICAgICAgICAgICYmIChkaXN0aW5jdFBDQ291bnQgPT0gYmFzZUxldmVsMlBDQ291bnQpCi0JCQkmJiBjaGVja0ZvckNvcnJlY3RTZXF1ZW5jZShwb3N0Q29uc3RydWN0TGlzdCk7CisgICAgICAgICAgICAmJiBjaGVja0ZvckNvcnJlY3RTZXF1ZW5jZShwb3N0Q29uc3RydWN0TGlzdCk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSBib29sZWFuIGNoZWNrRm9yQ29ycmVjdFNlcXVlbmNlKExpc3Q8U3RyaW5nPiBsaXN0KSB7Ci0JYm9vbGVhbiByZXN1bHQgPSBsaXN0LnNpemUoKSA9PSAzOwotCWlmIChyZXN1bHQpIHsKLQkgICAgQkFTRV9JTlRFUkNFUFRPUl9OQU1FLmVxdWFscyhsaXN0LmdldCgwKSk7Ci0JICAgIExFVkVMMl9JTlRFUkNFUFRPUl9OQU1FLmVxdWFscyhsaXN0LmdldCgxKSk7Ci0JICAgIERJU1RJTkNUX0lOVEVSQ0VQVE9SX05BTUUuZXF1YWxzKGxpc3QuZ2V0KDIpKTsKLQl9CisgICAgYm9vbGVhbiByZXN1bHQgPSBsaXN0LnNpemUoKSA9PSAzOworICAgIGlmIChyZXN1bHQpIHsKKyAgICAgICAgQkFTRV9JTlRFUkNFUFRPUl9OQU1FLmVxdWFscyhsaXN0LmdldCgwKSk7CisgICAgICAgIExFVkVMMl9JTlRFUkNFUFRPUl9OQU1FLmVxdWFscyhsaXN0LmdldCgxKSk7CisgICAgICAgIERJU1RJTkNUX0lOVEVSQ0VQVE9SX05BTUUuZXF1YWxzKGxpc3QuZ2V0KDIpKTsKKyAgICB9CiAKLQlmb3IoU3RyaW5nIHN0ciA6IGxpc3QpIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKkRJU1RJTkNUX0lOVEVSQ0VQVE9SX1RFU1QqKjogIiArIHN0cik7Ci0JfQotCVN5c3RlbS5vdXQucHJpbnRsbigiKipESVNUSU5DVF9JTlRFUkNFUFRPUl9URVNUKio6ICIgKyByZXN1bHQpOworICAgIGZvcihTdHJpbmcgc3RyIDogbGlzdCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqRElTVElOQ1RfSU5URVJDRVBUT1JfVEVTVCoqOiAiICsgc3RyKTsKKyAgICB9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKkRJU1RJTkNUX0lOVEVSQ0VQVE9SX1RFU1QqKjogIiArIHJlc3VsdCk7CiAKLQlyZXR1cm4gcmVzdWx0OworICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgU3RyaW5nIGdldE5hbWUoKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2VqYi9EdW1teS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbmhlcml0ZW5jZS9lamIvRHVtbXkuamF2YQppbmRleCBkMjQ2OTMyLi44ODg0NDU5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2VqYi9EdW1teS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvaW5oZXJpdGVuY2UvZWpiL0R1bW15LmphdmEKQEAgLTI4LDExICsyOCwxMSBAQAogCiAKIAotCXB1YmxpYyBTdHJpbmcgaXNJbnRlcmNlcHRvckNhbGxDb3VuT0soKTsKKyAgICBwdWJsaWMgU3RyaW5nIGlzSW50ZXJjZXB0b3JDYWxsQ291bk9LKCk7CiAKIAogCi0JcHVibGljIFN0cmluZyBpc1Bvc3RDb25zdHJ1Y3RDYWxsQ291bk9LKCk7CisgICAgcHVibGljIFN0cmluZyBpc1Bvc3RDb25zdHJ1Y3RDYWxsQ291bk9LKCk7CiAKIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbmhlcml0ZW5jZS9lamIvRHVtbXlCYXNlRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2VqYi9EdW1teUJhc2VFSkIuamF2YQppbmRleCA1MjRlMjdhLi5iNDQ3ZTM0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2VqYi9EdW1teUJhc2VFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2VqYi9EdW1teUJhc2VFSkIuamF2YQpAQCAtMzQsMjIgKzM0LDIyIEBACiAgICAgcHJvdGVjdGVkIGludCBkdW1teUJhc2VBSUNvdW50ID0gMDsKICAgICBwcm90ZWN0ZWQgaW50IGR1bW15QmFzZUVKQlBvc3RDb25zdHJ1Y3RDb3VudCA9IDA7CiAKLQlAQXJvdW5kSW52b2tlCi0JcHJpdmF0ZSBPYmplY3QgZHVtbXlCYXNlQXJvdW5kSW52b2tlKEludm9jYXRpb25Db250ZXh0IGN0eCkKLQkJdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCQlhcm91bmRJbnZva2VMaXN0ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7Ci0JCQlhcm91bmRJbnZva2VMaXN0LmFkZCgiRHVtbXlCYXNlRUpCIik7Ci0JCQlkdW1teUJhc2VBSUNvdW50Kys7Ci0JCQlyZXR1cm4gY3R4LnByb2NlZWQoKTsKLQl9CisgICAgQEFyb3VuZEludm9rZQorICAgIHByaXZhdGUgT2JqZWN0IGR1bW15QmFzZUFyb3VuZEludm9rZShJbnZvY2F0aW9uQ29udGV4dCBjdHgpCisgICAgICAgIHRocm93cyBFeGNlcHRpb24geworICAgICAgICAgICAgYXJvdW5kSW52b2tlTGlzdCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworICAgICAgICAgICAgYXJvdW5kSW52b2tlTGlzdC5hZGQoIkR1bW15QmFzZUVKQiIpOworICAgICAgICAgICAgZHVtbXlCYXNlQUlDb3VudCsrOworICAgICAgICAgICAgcmV0dXJuIGN0eC5wcm9jZWVkKCk7CisgICAgfQogCiAKLQlAUG9zdENvbnN0cnVjdAorICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGR1bW15QmFzZVBvc3RDb25zdHJ1Y3QoKSB7Ci0JCXBvc3RDb25zdHJ1Y3RMaXN0ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7Ci0JCXBvc3RDb25zdHJ1Y3RMaXN0LmFkZCgiRHVtbXlCYXNlRUpCIik7Ci0JCWR1bW15QmFzZUVKQlBvc3RDb25zdHJ1Y3RDb3VudCsrOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkdHR0c6IER1bW15TGV2ZWwyRUpCLnBvc3RDb25zdHJ1Y3QgIik7Ci0JfQorICAgICAgICBwb3N0Q29uc3RydWN0TGlzdCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworICAgICAgICBwb3N0Q29uc3RydWN0TGlzdC5hZGQoIkR1bW15QmFzZUVKQiIpOworICAgICAgICBkdW1teUJhc2VFSkJQb3N0Q29uc3RydWN0Q291bnQrKzsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHR0dHOiBEdW1teUxldmVsMkVKQi5wb3N0Q29uc3RydWN0ICIpOworICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbmhlcml0ZW5jZS9lamIvRHVtbXlFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvaW5oZXJpdGVuY2UvZWpiL0R1bW15RUpCLmphdmEKaW5kZXggZjZlMjgwNC4uYWZiNThmMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbmhlcml0ZW5jZS9lamIvRHVtbXlFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2VqYi9EdW1teUVKQi5qYXZhCkBAIC0yNCwxNCArMjQsMTQgQEAKIGltcG9ydCBqYWthcnRhLmFubm90YXRpb24uUG9zdENvbnN0cnVjdDsKIAogQEludGVyY2VwdG9ycyh7Ci0JY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5pbnRlcmNlcHRvcnMuc2Vzc2lvbi5PdmVycmlkaW5nTWV0aG9kc0ludGVyY2VwdG9yLmNsYXNzLAotCWNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaW50ZXJjZXB0b3JzLnNlc3Npb24uRGlzdGluY3RNZXRob2RzSW50ZXJjZXB0b3IuY2xhc3MKKyAgICBjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmludGVyY2VwdG9ycy5zZXNzaW9uLk92ZXJyaWRpbmdNZXRob2RzSW50ZXJjZXB0b3IuY2xhc3MsCisgICAgY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5pbnRlcmNlcHRvcnMuc2Vzc2lvbi5EaXN0aW5jdE1ldGhvZHNJbnRlcmNlcHRvci5jbGFzcwogfSkKIAogQFN0YXRlbGVzcwogcHVibGljIGNsYXNzIER1bW15RUpCCi0JZXh0ZW5kcyBEdW1teUxldmVsMkVKQgotCWltcGxlbWVudHMgRHVtbXkKKyAgICBleHRlbmRzIER1bW15TGV2ZWwyRUpCCisgICAgaW1wbGVtZW50cyBEdW1teQogewogICAgIGludCBpbnRlcmNlcHRvcklkOwogICAgIHByaXZhdGUgYm9vbGVhbiBjcmVhdGVDYWxsZWQgPSBmYWxzZTsKQEAgLTQ3LDEzICs0NywxMyBAQAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJvdGVjdGVkIHZvaWQgb3ZlcnJpZGFibGVQb3N0Q29uc3RydWN0KCkKICAgICB7Ci0JcG9zdENvbnN0cnVjdExpc3QuYWRkKCJEdW1teUVKQiIpOworICAgIHBvc3RDb25zdHJ1Y3RMaXN0LmFkZCgiRHVtbXlFSkIiKTsKICAgICAgICAgY3JlYXRlQ2FsbGVkID0gdHJ1ZTsKICAgICAgICAgZHVtbXlFSkJQb3N0Q29uc3RydWN0Q291bnQrKzsKICAgICB9CiAKICAgICBwdWJsaWMgU3RyaW5nIGR1bW15KCkgewotCSAgICByZXR1cm4gIkR1bW15ISEiOworICAgICAgICByZXR1cm4gIkR1bW15ISEiOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldEludGVyY2VwdG9ySWQoaW50IHZhbCkgewpAQCAtNjYsNjMgKzY2LDYzIEBACiAKICAgICBwdWJsaWMgU3RyaW5nIGlzSW50ZXJjZXB0b3JDYWxsQ291bk9LKCkgewogCi0JCWJvb2xlYW4gYmVhbkFJUmVzdWx0ID0gKGJlYW5BSUNvdW50ID09IGR1bW15QmFzZUFJQ291bnQpCi0JCQkmJiAoYmVhbkFJQ291bnQgPT0gZHVtbXlMZXZlbDJBSUNvdW50KQotCQkJJiYgY2hlY2tBcm91bmRJbnZva2VTZXF1ZW5jZSgpOworICAgICAgICBib29sZWFuIGJlYW5BSVJlc3VsdCA9IChiZWFuQUlDb3VudCA9PSBkdW1teUJhc2VBSUNvdW50KQorICAgICAgICAgICAgJiYgKGJlYW5BSUNvdW50ID09IGR1bW15TGV2ZWwyQUlDb3VudCkKKyAgICAgICAgICAgICYmIGNoZWNrQXJvdW5kSW52b2tlU2VxdWVuY2UoKTsKIAotCQlyZXR1cm4gIiIgKyBkaXN0aW5jdEludGVyY2VwdG9yLmlzQUlDb3VudE9LKCkKLQkJCSsgIiAiICsgb3ZlcnJpZGluZ0ludGVyY2VwdG9yLmlzQUlDb3VudE9LKCkKLQkJCSsgIiAiICsgYmVhbkFJUmVzdWx0Ci0JCQkrICIgIiArICBjaGVja0Fyb3VuZEludm9rZVNlcXVlbmNlKCk7Ci0JfQorICAgICAgICByZXR1cm4gIiIgKyBkaXN0aW5jdEludGVyY2VwdG9yLmlzQUlDb3VudE9LKCkKKyAgICAgICAgICAgICsgIiAiICsgb3ZlcnJpZGluZ0ludGVyY2VwdG9yLmlzQUlDb3VudE9LKCkKKyAgICAgICAgICAgICsgIiAiICsgYmVhbkFJUmVzdWx0CisgICAgICAgICAgICArICIgIiArICBjaGVja0Fyb3VuZEludm9rZVNlcXVlbmNlKCk7CisgICAgfQogCiAKICAgICBwdWJsaWMgU3RyaW5nIGlzUG9zdENvbnN0cnVjdENhbGxDb3VuT0soKSB7CiAKLQkJYm9vbGVhbiBiZWFuUENDb3VudFJlc3VsdCA9IChkdW1teUVKQlBvc3RDb25zdHJ1Y3RDb3VudCA9PSBkdW1teUJhc2VFSkJQb3N0Q29uc3RydWN0Q291bnQpCi0JCQkmJiAoZHVtbXlMZXZlbDJFSkJQb3N0Q29uc3RydWN0Q291bnQgPT0gMCkKLQkJCSYmIGNoZWNrUG9zdENvbnN0cnVjdFNlcXVlbmNlKCk7CisgICAgICAgIGJvb2xlYW4gYmVhblBDQ291bnRSZXN1bHQgPSAoZHVtbXlFSkJQb3N0Q29uc3RydWN0Q291bnQgPT0gZHVtbXlCYXNlRUpCUG9zdENvbnN0cnVjdENvdW50KQorICAgICAgICAgICAgJiYgKGR1bW15TGV2ZWwyRUpCUG9zdENvbnN0cnVjdENvdW50ID09IDApCisgICAgICAgICAgICAmJiBjaGVja1Bvc3RDb25zdHJ1Y3RTZXF1ZW5jZSgpOwogCi0JCXJldHVybiAiIiArIGRpc3RpbmN0SW50ZXJjZXB0b3IuaXNQb3N0Q29uc3RydWN0Q2FsbENvdW5PSygpCi0JCQkrICIgIiArIG92ZXJyaWRpbmdJbnRlcmNlcHRvci5pc1Bvc3RDb25zdHJ1Y3RDYWxsQ291bk9LKCkKLQkJCSsgIiAiICsgYmVhblBDQ291bnRSZXN1bHQKLQkJCSsgIiAiICsgIGNoZWNrUG9zdENvbnN0cnVjdFNlcXVlbmNlKCk7Ci0JfQorICAgICAgICByZXR1cm4gIiIgKyBkaXN0aW5jdEludGVyY2VwdG9yLmlzUG9zdENvbnN0cnVjdENhbGxDb3VuT0soKQorICAgICAgICAgICAgKyAiICIgKyBvdmVycmlkaW5nSW50ZXJjZXB0b3IuaXNQb3N0Q29uc3RydWN0Q2FsbENvdW5PSygpCisgICAgICAgICAgICArICIgIiArIGJlYW5QQ0NvdW50UmVzdWx0CisgICAgICAgICAgICArICIgIiArICBjaGVja1Bvc3RDb25zdHJ1Y3RTZXF1ZW5jZSgpOworICAgIH0KIAogICAgIEBBcm91bmRJbnZva2UKICAgICBPYmplY3QgbXlPd25Bcm91bmRJbnZva2UoSW52b2NhdGlvbkNvbnRleHQgY3R4KQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJYXJvdW5kSW52b2tlTGlzdC5hZGQoIkR1bW15RUpCIik7Ci0JCWlmIChkaXN0aW5jdEludGVyY2VwdG9yID09IG51bGwpIHsKLQkJCSBkaXN0aW5jdEludGVyY2VwdG9yID0gKERpc3RpbmN0TWV0aG9kc0ludGVyY2VwdG9yKQotCQkJIAljdHguZ2V0Q29udGV4dERhdGEoKS5nZXQoZGlzdGluY3RBSU5hbWUpOwotCQkJIG92ZXJyaWRpbmdJbnRlcmNlcHRvciA9IChPdmVycmlkaW5nTWV0aG9kc0ludGVyY2VwdG9yKQotCQkJIAljdHguZ2V0Q29udGV4dERhdGEoKS5nZXQob3ZlcnJpZGluZ0FJTmFtZSk7Ci0JCX0KKyAgICAgICAgYXJvdW5kSW52b2tlTGlzdC5hZGQoIkR1bW15RUpCIik7CisgICAgICAgIGlmIChkaXN0aW5jdEludGVyY2VwdG9yID09IG51bGwpIHsKKyAgICAgICAgICAgICBkaXN0aW5jdEludGVyY2VwdG9yID0gKERpc3RpbmN0TWV0aG9kc0ludGVyY2VwdG9yKQorICAgICAgICAgICAgICAgICBjdHguZ2V0Q29udGV4dERhdGEoKS5nZXQoZGlzdGluY3RBSU5hbWUpOworICAgICAgICAgICAgIG92ZXJyaWRpbmdJbnRlcmNlcHRvciA9IChPdmVycmlkaW5nTWV0aG9kc0ludGVyY2VwdG9yKQorICAgICAgICAgICAgICAgICBjdHguZ2V0Q29udGV4dERhdGEoKS5nZXQob3ZlcnJpZGluZ0FJTmFtZSk7CisgICAgICAgIH0KIAotCQliZWFuQUlDb3VudCsrOworICAgICAgICBiZWFuQUlDb3VudCsrOwogICAgICAgICByZXR1cm4gY3R4LnByb2NlZWQoKTsKICAgICB9CiAKICAgICBwcml2YXRlIGJvb2xlYW4gY2hlY2tQb3N0Q29uc3RydWN0U2VxdWVuY2UoKSB7Ci0JYm9vbGVhbiByZXN1bHQgPSBwb3N0Q29uc3RydWN0TGlzdC5zaXplKCkgPT0gMjsKLQlpZiAocmVzdWx0KSB7Ci0JICAgICJEdW1teUJhc2VFSkIiLmVxdWFscyhwb3N0Q29uc3RydWN0TGlzdC5nZXQoMCkpOwotCSAgICAiRHVtbXlFSkIiLmVxdWFscyhwb3N0Q29uc3RydWN0TGlzdC5nZXQoMSkpOwotCX0KKyAgICBib29sZWFuIHJlc3VsdCA9IHBvc3RDb25zdHJ1Y3RMaXN0LnNpemUoKSA9PSAyOworICAgIGlmIChyZXN1bHQpIHsKKyAgICAgICAgIkR1bW15QmFzZUVKQiIuZXF1YWxzKHBvc3RDb25zdHJ1Y3RMaXN0LmdldCgwKSk7CisgICAgICAgICJEdW1teUVKQiIuZXF1YWxzKHBvc3RDb25zdHJ1Y3RMaXN0LmdldCgxKSk7CisgICAgfQogCi0JcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIHByaXZhdGUgYm9vbGVhbiBjaGVja0Fyb3VuZEludm9rZVNlcXVlbmNlKCkgewotCWJvb2xlYW4gcmVzdWx0ID0gYXJvdW5kSW52b2tlTGlzdC5zaXplKCkgPT0gMzsKLQlpZiAocmVzdWx0KSB7Ci0JICAgICJEdW1teUJhc2VFSkIiLmVxdWFscyhhcm91bmRJbnZva2VMaXN0LmdldCgwKSk7Ci0JICAgICJEdW1teUxldmVsMkVKQiIuZXF1YWxzKGFyb3VuZEludm9rZUxpc3QuZ2V0KDEpKTsKLQkgICAgIkR1bW15RUpCIi5lcXVhbHMoYXJvdW5kSW52b2tlTGlzdC5nZXQoMikpOwotCX0KKyAgICBib29sZWFuIHJlc3VsdCA9IGFyb3VuZEludm9rZUxpc3Quc2l6ZSgpID09IDM7CisgICAgaWYgKHJlc3VsdCkgeworICAgICAgICAiRHVtbXlCYXNlRUpCIi5lcXVhbHMoYXJvdW5kSW52b2tlTGlzdC5nZXQoMCkpOworICAgICAgICAiRHVtbXlMZXZlbDJFSkIiLmVxdWFscyhhcm91bmRJbnZva2VMaXN0LmdldCgxKSk7CisgICAgICAgICJEdW1teUVKQiIuZXF1YWxzKGFyb3VuZEludm9rZUxpc3QuZ2V0KDIpKTsKKyAgICB9CiAKLQlyZXR1cm4gcmVzdWx0OworICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2VqYi9EdW1teUxldmVsMkVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbmhlcml0ZW5jZS9lamIvRHVtbXlMZXZlbDJFSkIuamF2YQppbmRleCAxOTlhMTMyLi5hNGZjNjIyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2VqYi9EdW1teUxldmVsMkVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvaW5oZXJpdGVuY2UvZWpiL0R1bW15TGV2ZWwyRUpCLmphdmEKQEAgLTI1LDI0ICsyNSwyNCBAQAogCiAKIHB1YmxpYyBjbGFzcyBEdW1teUxldmVsMkVKQgotCWV4dGVuZHMgRHVtbXlCYXNlRUpCCisgICAgZXh0ZW5kcyBEdW1teUJhc2VFSkIKIHsKICAgICBwcm90ZWN0ZWQgaW50IGR1bW15TGV2ZWwyQUlDb3VudCA9IDA7Ci0JcHJvdGVjdGVkIGludCBkdW1teUxldmVsMkVKQlBvc3RDb25zdHJ1Y3RDb3VudCA9IDA7CisgICAgcHJvdGVjdGVkIGludCBkdW1teUxldmVsMkVKQlBvc3RDb25zdHJ1Y3RDb3VudCA9IDA7CiAKIAotCUBQb3N0Q29uc3RydWN0CisgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcm90ZWN0ZWQgdm9pZCBvdmVycmlkYWJsZVBvc3RDb25zdHJ1Y3QoKSB7Ci0JCXBvc3RDb25zdHJ1Y3RMaXN0LmFkZCgiRHVtbXlMZXZlbDJFSkIiKTsKLQkJZHVtbXlMZXZlbDJFSkJQb3N0Q29uc3RydWN0Q291bnQrKzsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJHR0dHOiBEdW1teUxldmVsMkVKQi5wb3N0Q29uc3RydWN0ICIpOwotCX0KKyAgICAgICAgcG9zdENvbnN0cnVjdExpc3QuYWRkKCJEdW1teUxldmVsMkVKQiIpOworICAgICAgICBkdW1teUxldmVsMkVKQlBvc3RDb25zdHJ1Y3RDb3VudCsrOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdHR0c6IER1bW15TGV2ZWwyRUpCLnBvc3RDb25zdHJ1Y3QgIik7CisgICAgfQogCi0JQEFyb3VuZEludm9rZQotCXByb3RlY3RlZCBPYmplY3Qgb3ZlcnJpZGFibGVBcm91bmRJbnZva2UoSW52b2NhdGlvbkNvbnRleHQgY3R4KQotCQl0aHJvd3MgRXhjZXB0aW9uIHsKLQkJCWFyb3VuZEludm9rZUxpc3QuYWRkKCJEdW1teUxldmVsMkVKQiIpOwotCQkJZHVtbXlMZXZlbDJBSUNvdW50Kys7Ci0JCQlyZXR1cm4gY3R4LnByb2NlZWQoKTsKLQl9CisgICAgQEFyb3VuZEludm9rZQorICAgIHByb3RlY3RlZCBPYmplY3Qgb3ZlcnJpZGFibGVBcm91bmRJbnZva2UoSW52b2NhdGlvbkNvbnRleHQgY3R4KQorICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIGFyb3VuZEludm9rZUxpc3QuYWRkKCJEdW1teUxldmVsMkVKQiIpOworICAgICAgICAgICAgZHVtbXlMZXZlbDJBSUNvdW50Kys7CisgICAgICAgICAgICByZXR1cm4gY3R4LnByb2NlZWQoKTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2VqYi9MaWZlY3ljbGVDYWxsYmFja0ludGVyY2VwdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2VqYi9MaWZlY3ljbGVDYWxsYmFja0ludGVyY2VwdG9yLmphdmEKaW5kZXggMDQyMWVjZS4uZmNhOTdmZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbmhlcml0ZW5jZS9lamIvTGlmZWN5Y2xlQ2FsbGJhY2tJbnRlcmNlcHRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvaW5oZXJpdGVuY2UvZWpiL0xpZmVjeWNsZUNhbGxiYWNrSW50ZXJjZXB0b3IuamF2YQpAQCAtNDIsNyArNDIsNyBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IHBvc3RBY3RpdmF0ZUNhbGxiYWNrQ291bnQgPSAwOwogCi0gICAgCisKIAogICAgIHByaXZhdGUgaW50IGludGVyY2VwdG9ySUQ7CiAKQEAgLTYwLDcgKzYwLDcgQEAKIAogICAgIHZvaWQgcHJlUGFzc2l2YXRlKEludm9jYXRpb25Db250ZXh0IGN0eCkgewogCi0JcHJlUGFzc2l2YXRlQ2FsbGJhY2tDb3VudCsrOworICAgIHByZVBhc3NpdmF0ZUNhbGxiYWNrQ291bnQrKzsKIAogICAgIH0KIApAQCAtNzAsNyArNzAsNyBAQAogCiAgICAgcHJpdmF0ZSB2b2lkIHBvc3RBY3RpdmF0ZShJbnZvY2F0aW9uQ29udGV4dCBjdHgpIHsKIAotCXBvc3RBY3RpdmF0ZUNhbGxiYWNrQ291bnQrKzsKKyAgICBwb3N0QWN0aXZhdGVDYWxsYmFja0NvdW50Kys7CiAKICAgICB9CiAKQEAgLTgwLDcgKzgwLDcgQEAKIAogICAgIE9iamVjdCBhcm91bmRJbnZva2UoSW52b2NhdGlvbkNvbnRleHQgY3R4KQogCi0JICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogCiAgICAgICAgIGlmIChjdHguZ2V0TWV0aG9kKCkuZ2V0TmFtZSgpLmVxdWFscygic2V0SUQiKSkgewogCkBAIC0xMDQsNyArMTA0LDcgQEAKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCByZXNldExpZmVjeWNsZUNhbGxiYWNrQ291bnRlcnMoKSB7CiAKLQlwcmVQYXNzaXZhdGVDYWxsYmFja0NvdW50ID0gcG9zdEFjdGl2YXRlQ2FsbGJhY2tDb3VudCA9IDA7CisgICAgcHJlUGFzc2l2YXRlQ2FsbGJhY2tDb3VudCA9IHBvc3RBY3RpdmF0ZUNhbGxiYWNrQ291bnQgPSAwOwogCiAgICAgfQogCkBAIC0xMTIsNyArMTEyLDcgQEAKIAogICAgIHB1YmxpYyBzdGF0aWMgaW50IGdldFByZVBhc3NpdmF0ZUNhbGxiYWNrQ291bnQoKSB7CiAKLQlyZXR1cm4gcHJlUGFzc2l2YXRlQ2FsbGJhY2tDb3VudDsKKyAgICByZXR1cm4gcHJlUGFzc2l2YXRlQ2FsbGJhY2tDb3VudDsKIAogICAgIH0KIApAQCAtMTIwLDExICsxMjAsMTEgQEAKIAogICAgIHB1YmxpYyBzdGF0aWMgaW50IGdldFBvc3RBY3RpdmF0ZUNhbGxiYWNrQ291bnQoKSB7CiAKLQlyZXR1cm4gcG9zdEFjdGl2YXRlQ2FsbGJhY2tDb3VudDsKKyAgICByZXR1cm4gcG9zdEFjdGl2YXRlQ2FsbGJhY2tDb3VudDsKIAogICAgIH0KIAotICAgIAorCiAKIAogCkBAIC0xMzYsNyArMTM2LDcgQEAKIAogICAgIH0KIAotICAgIAorCiAKICAgICBpbnQgZ2V0SW50ZXJjZXB0b3JJRCgpIHsKIApAQCAtMTQ0LDE3ICsxNDQsMTcgQEAKIAogICAgIH0KIAotICAgIAorCiAKICAgICBib29sZWFuIGNoZWNrSW50ZXJjZXB0b3JJRChpbnQgdmFsKSB7CiAKLSAgICAgICAgcmV0dXJuICh2YWwgPT0gaW50ZXJjZXB0b3JJRCkgJiYgCisgICAgICAgIHJldHVybiAodmFsID09IGludGVyY2VwdG9ySUQpICYmCiAKICAgICAgICAgICAgIChjb21wdXRlZEludGVyY2VwdG9ySUQgPT0gMiAqIHZhbCArIDEpOwogCiAgICAgfQogCi0gICAKKwogCiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvaW5oZXJpdGVuY2UvZWpiL092ZXJyaWRpbmdNZXRob2RzSW50ZXJjZXB0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvaW5oZXJpdGVuY2UvZWpiL092ZXJyaWRpbmdNZXRob2RzSW50ZXJjZXB0b3IuamF2YQppbmRleCBmNWY4YmYzLi4yZGNiMTY3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2VqYi9PdmVycmlkaW5nTWV0aG9kc0ludGVyY2VwdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbmhlcml0ZW5jZS9lamIvT3ZlcnJpZGluZ01ldGhvZHNJbnRlcmNlcHRvci5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiBpbXBvcnQgamFrYXJ0YS5hbm5vdGF0aW9uLlBvc3RDb25zdHJ1Y3Q7CiAKIHB1YmxpYyBjbGFzcyBPdmVycmlkaW5nTWV0aG9kc0ludGVyY2VwdG9yCi0JZXh0ZW5kcyBCYXNlTGV2ZWwySW50ZXJjZXB0b3IgeworICAgIGV4dGVuZHMgQmFzZUxldmVsMkludGVyY2VwdG9yIHsKIAogICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIE9WRVJSSURJTkdfSU5URVJDRVBUT1JfTkFNRSA9ICJPdmVycmlkaW5nSW50ZXJjZXB0b3IiOwogCkBAIC0zNCw3ICszNCw3IEBACiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByb3RlY3RlZCB2b2lkIG92ZXJyaWRhYmxlUG9zdENvbnN0cnVjdE1ldGhvZChJbnZvY2F0aW9uQ29udGV4dCBjdHgpCi0gICAgCXRocm93cyBSdW50aW1lRXhjZXB0aW9uIHsKKyAgICAgICAgdGhyb3dzIFJ1bnRpbWVFeGNlcHRpb24gewogICAgICAgICBwb3N0Q29uc3RydWN0TGlzdC5hZGQoT1ZFUlJJRElOR19JTlRFUkNFUFRPUl9OQU1FKTsKICAgICAgICAgcGNDb3VudCsrOwogICAgICAgICB0cnkgewpAQCAtNDksMzggKzQ5LDM4IEBACiAKICAgICBAQXJvdW5kSW52b2tlCiAgICAgcHJvdGVjdGVkIE9iamVjdCBvdmVycmlkYWJsZUFyb3VuZEludm9rZU1ldGhvZChJbnZvY2F0aW9uQ29udGV4dCBjdHgpCi0gICAgCXRocm93cyBUaHJvd2FibGUKKyAgICAgICAgdGhyb3dzIFRocm93YWJsZQogICAgIHsKLQlhcm91bmRJbnZva2VMaXN0LmFkZChPVkVSUklESU5HX0lOVEVSQ0VQVE9SX05BTUUpOworICAgIGFyb3VuZEludm9rZUxpc3QuYWRkKE9WRVJSSURJTkdfSU5URVJDRVBUT1JfTkFNRSk7CiAgICAgICAgIGFpQ291bnQrKzsKICAgICAgICAgcmV0dXJuIGN0eC5wcm9jZWVkKCk7CiAgICAgfQogCiAgICAgcHJvdGVjdGVkIGJvb2xlYW4gaXNBSUNvdW50T0soKSB7Ci0JCXJldHVybiAoMCA9PSBiYXNlTGV2ZWwyQUlDb3VudCkKLQkJCSYmIChhaUNvdW50ID09IGJhc2VBSUNvdW50KQotCQkJJiYgY2hlY2tGb3JDb3JyZWN0U2VxdWVuY2UoYXJvdW5kSW52b2tlTGlzdCk7Ci0JfQorICAgICAgICByZXR1cm4gKDAgPT0gYmFzZUxldmVsMkFJQ291bnQpCisgICAgICAgICAgICAmJiAoYWlDb3VudCA9PSBiYXNlQUlDb3VudCkKKyAgICAgICAgICAgICYmIGNoZWNrRm9yQ29ycmVjdFNlcXVlbmNlKGFyb3VuZEludm9rZUxpc3QpOworICAgIH0KIAotCXByb3RlY3RlZCBib29sZWFuIGlzUG9zdENvbnN0cnVjdENhbGxDb3VuT0soKSB7Ci0JCXJldHVybiAocGNDb3VudCA9PSBiYXNlUENDb3VudCkKLQkJCSYmIChiYXNlTGV2ZWwyUENDb3VudCA9PSAwKQotCQkJJiYgY2hlY2tGb3JDb3JyZWN0U2VxdWVuY2UocG9zdENvbnN0cnVjdExpc3QpOwotCX0KKyAgICBwcm90ZWN0ZWQgYm9vbGVhbiBpc1Bvc3RDb25zdHJ1Y3RDYWxsQ291bk9LKCkgeworICAgICAgICByZXR1cm4gKHBjQ291bnQgPT0gYmFzZVBDQ291bnQpCisgICAgICAgICAgICAmJiAoYmFzZUxldmVsMlBDQ291bnQgPT0gMCkKKyAgICAgICAgICAgICYmIGNoZWNrRm9yQ29ycmVjdFNlcXVlbmNlKHBvc3RDb25zdHJ1Y3RMaXN0KTsKKyAgICB9CiAKICAgICBwcml2YXRlIGJvb2xlYW4gY2hlY2tGb3JDb3JyZWN0U2VxdWVuY2UoTGlzdDxTdHJpbmc+IGxpc3QpIHsKLQlib29sZWFuIHJlc3VsdCA9IGxpc3Quc2l6ZSgpID09IDI7Ci0JaWYgKHJlc3VsdCkgewotCSAgICBCQVNFX0lOVEVSQ0VQVE9SX05BTUUuZXF1YWxzKGxpc3QuZ2V0KDApKTsKLQkgICAgT1ZFUlJJRElOR19JTlRFUkNFUFRPUl9OQU1FLmVxdWFscyhsaXN0LmdldCgxKSk7Ci0JfQotCWZvcihTdHJpbmcgc3RyIDogbGlzdCkgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqT1ZFUlJJRElOR19JTlRFUkNFUFRPUl9URVNUKio6ICIgKyBzdHIpOwotCX0KLQlTeXN0ZW0ub3V0LnByaW50bG4oIioqT1ZFUlJJRElOR19JTlRFUkNFUFRPUl9URVNUKio6ICIgKyByZXN1bHQpOworICAgIGJvb2xlYW4gcmVzdWx0ID0gbGlzdC5zaXplKCkgPT0gMjsKKyAgICBpZiAocmVzdWx0KSB7CisgICAgICAgIEJBU0VfSU5URVJDRVBUT1JfTkFNRS5lcXVhbHMobGlzdC5nZXQoMCkpOworICAgICAgICBPVkVSUklESU5HX0lOVEVSQ0VQVE9SX05BTUUuZXF1YWxzKGxpc3QuZ2V0KDEpKTsKKyAgICB9CisgICAgZm9yKFN0cmluZyBzdHIgOiBsaXN0KSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKipPVkVSUklESU5HX0lOVEVSQ0VQVE9SX1RFU1QqKjogIiArIHN0cik7CisgICAgfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKipPVkVSUklESU5HX0lOVEVSQ0VQVE9SX1RFU1QqKjogIiArIHJlc3VsdCk7CiAKIAotCXJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbmhlcml0ZW5jZS9lamIvU2Z1bC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbmhlcml0ZW5jZS9lamIvU2Z1bC5qYXZhCmluZGV4IGQwM2JmMjYuLmVjNzA0YTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvaW5oZXJpdGVuY2UvZWpiL1NmdWwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2VqYi9TZnVsLmphdmEKQEAgLTQyLDEzICs0MiwxMyBAQAogCiAgICAgcHVibGljIFN0cmluZyBjb21wdXRlTWlkKGludCBtaW4sIGludCBtYXgpCiAKLQkgICAgdGhyb3dzIFN3YXBBcmd1bWVudHNFeGNlcHRpb247CisgICAgICAgIHRocm93cyBTd2FwQXJndW1lbnRzRXhjZXB0aW9uOwogCiAKIAogICAgIHB1YmxpYyBTdHJpbmcgY2FsbER1bW15KCkKIAotCSAgICB0aHJvd3MgRXhjZXB0aW9uOworICAgICAgICB0aHJvd3MgRXhjZXB0aW9uOwogCiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbmhlcml0ZW5jZS9lamIvU2Z1bEVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbmhlcml0ZW5jZS9lamIvU2Z1bEVKQi5qYXZhCmluZGV4IGNiZWZjMTUuLjhmMjEzZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvaW5oZXJpdGVuY2UvZWpiL1NmdWxFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2VqYi9TZnVsRUpCLmphdmEKQEAgLTM4LDExICszOCwxMSBAQAogCiBASW50ZXJjZXB0b3JzKHsKIAotCUxpZmVjeWNsZUNhbGxiYWNrSW50ZXJjZXB0b3IuY2xhc3MsCisgICAgTGlmZWN5Y2xlQ2FsbGJhY2tJbnRlcmNlcHRvci5jbGFzcywKIAotCUJhc2VMaWZlY3ljbGVJbnRlcmNlcHRvci5jbGFzcworICAgIEJhc2VMaWZlY3ljbGVJbnRlcmNlcHRvci5jbGFzcwogCi0JfSkKKyAgICB9KQogCiBwdWJsaWMgY2xhc3MgU2Z1bEVKQiBpbXBsZW1lbnRzIFNmdWwKIApAQCAtODAsMTMgKzgwLDEzIEBACiAKICAgICBwcml2YXRlIE9iamVjdCBpbnRlcmNlcHRDYWxsKEludm9jYXRpb25Db250ZXh0IGN0eCkKIAotICAgCXRocm93cyBFeGNlcHRpb24KKyAgICAgICB0aHJvd3MgRXhjZXB0aW9uCiAKICAgICB7CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIioqQmVhbnMgQVJPVU5ESU5WT0tFKysgW0BBcm91bmRJbnZva2VdOiAiICsgY3R4LmdldE1ldGhvZCgpKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqQmVhbnMgQVJPVU5ESU5WT0tFKysgW0BBcm91bmRJbnZva2VdOiAiICsgY3R4LmdldE1ldGhvZCgpKTsKIAotCWNvdW50Kys7CisgICAgY291bnQrKzsKIAogICAgICAgICB0cnkgewogCkBAIC0xMTIsNyArMTEyLDcgQEAKIAogICAgIHB1YmxpYyBpbnQgZ2V0Q291bnQoKSB7CiAKLQkgICAgcmV0dXJuIGNvdW50OworICAgICAgICByZXR1cm4gY291bnQ7CiAKICAgICB9CiAKQEAgLTEzMiwxNSArMTMyLDE1IEBACiAKICAgICBwdWJsaWMgU3RyaW5nIGNvbXB1dGVNaWQoaW50IG1pbiwgaW50IG1heCkKIAotCSAgICB0aHJvd3MgU3dhcEFyZ3VtZW50c0V4Y2VwdGlvbgorICAgICAgICB0aHJvd3MgU3dhcEFyZ3VtZW50c0V4Y2VwdGlvbgogCiAgICAgewogCi0JICAgIHJldHVybiBzbGVzcy5zYXlIZWxsbygpCisgICAgICAgIHJldHVybiBzbGVzcy5zYXlIZWxsbygpCiAKLQkJICAgIAkrICIsIE1pZHBvaW50IG9mICIgKyBtaW4gKyAiLCAiICsgbWF4ICsgIjsgIgorICAgICAgICAgICAgICAgICsgIiwgTWlkcG9pbnQgb2YgIiArIG1pbiArICIsICIgKyBtYXggKyAiOyAiCiAKLQkJCSsgIHNsZXNzLmNvbXB1dGVNaWRQb2ludChtaW4sIG1heCk7CisgICAgICAgICAgICArICBzbGVzcy5jb21wdXRlTWlkUG9pbnQobWluLCBtYXgpOwogCiAgICAgfQogCkBAIC0xNDgsMTEgKzE0OCwxMSBAQAogCiAgICAgcHVibGljIFN0cmluZyBjYWxsRHVtbXkoKQogCi0JICAgIHRocm93cyBFeGNlcHRpb24KKyAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgogCiAgICAgewogCi0JICAgIHJldHVybiBkdW1teS5kdW1teSgpOworICAgICAgICByZXR1cm4gZHVtbXkuZHVtbXkoKTsKIAogICAgIH0KIApAQCAtMTc0LDcgKzE3NCw3IEBACiAKICAgICBwdWJsaWMgaW50IGdldFByZVBhc3NpdmF0ZUNhbGxiYWNrQ291bnQoKSB7CiAKLQlyZXR1cm4gTGlmZWN5Y2xlQ2FsbGJhY2tJbnRlcmNlcHRvci5nZXRQcmVQYXNzaXZhdGVDYWxsYmFja0NvdW50KCk7CisgICAgcmV0dXJuIExpZmVjeWNsZUNhbGxiYWNrSW50ZXJjZXB0b3IuZ2V0UHJlUGFzc2l2YXRlQ2FsbGJhY2tDb3VudCgpOwogCiAgICAgfQogCkBAIC0xODIsNyArMTgyLDcgQEAKIAogICAgIHB1YmxpYyBpbnQgZ2V0UG9zdEFjdGl2YXRlQ2FsbGJhY2tDb3VudCgpIHsKIAotCXJldHVybiBMaWZlY3ljbGVDYWxsYmFja0ludGVyY2VwdG9yLmdldFBvc3RBY3RpdmF0ZUNhbGxiYWNrQ291bnQoKTsKKyAgICByZXR1cm4gTGlmZWN5Y2xlQ2FsbGJhY2tJbnRlcmNlcHRvci5nZXRQb3N0QWN0aXZhdGVDYWxsYmFja0NvdW50KCk7CiAKICAgICB9CiAKQEAgLTE5MCw3ICsxOTAsNyBAQAogCiAgICAgcHVibGljIHZvaWQgcmVzZXRMaWZlY3ljbGVDYWxsYmFja0NvdW50ZXJzKCkgewogCi0JTGlmZWN5Y2xlQ2FsbGJhY2tJbnRlcmNlcHRvci5yZXNldExpZmVjeWNsZUNhbGxiYWNrQ291bnRlcnMoKTsKKyAgICBMaWZlY3ljbGVDYWxsYmFja0ludGVyY2VwdG9yLnJlc2V0TGlmZWN5Y2xlQ2FsbGJhY2tDb3VudGVycygpOwogCiAgICAgfQogCkBAIC0yMTgsNTEgKzIxOCw1MSBAQAogCiAgICAgewogCi0JCXRyeSB7CisgICAgICAgIHRyeSB7CiAKLQkJCXJldHVybiBkdW1teS5pc0ludGVyY2VwdG9yQ2FsbENvdW5PSygpOworICAgICAgICAgICAgcmV0dXJuIGR1bW15LmlzSW50ZXJjZXB0b3JDYWxsQ291bk9LKCk7CiAKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqKiIpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioiKTsKIAotCQkJZXgucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKIAotCQkJU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioiKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqIik7CiAKLQkJfQorICAgICAgICB9CiAKIAogCi0JCXJldHVybiBudWxsOworICAgICAgICByZXR1cm4gbnVsbDsKIAotCX0KKyAgICB9CiAKIAogCi0JICAgIHB1YmxpYyBTdHJpbmcgaXNQb3N0Q29uc3RydWN0Q2FsbENvdW5PSygpCisgICAgICAgIHB1YmxpYyBTdHJpbmcgaXNQb3N0Q29uc3RydWN0Q2FsbENvdW5PSygpCiAKLQkgICAgeworICAgICAgICB7CiAKLQkJCXRyeSB7CisgICAgICAgICAgICB0cnkgewogCi0JCQkJcmV0dXJuIGR1bW15LmlzUG9zdENvbnN0cnVjdENhbGxDb3VuT0soKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZHVtbXkuaXNQb3N0Q29uc3RydWN0Q2FsbENvdW5PSygpOwogCi0JCQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogCi0JCQkJU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioiKTsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqKiIpOwogCi0JCQkJZXgucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqKiIpOworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqIik7CiAKLQkJCX0KKyAgICAgICAgICAgIH0KIAogCiAKLQkJCXJldHVybiBudWxsOworICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAKLQl9CisgICAgfQogCiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbmhlcml0ZW5jZS9lamIvU2xlc3MuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvaW5oZXJpdGVuY2UvZWpiL1NsZXNzLmphdmEKaW5kZXggYTJhYjM1YS4uNWY5ODQ2NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbmhlcml0ZW5jZS9lamIvU2xlc3MuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2VqYi9TbGVzcy5qYXZhCkBAIC0zNCw3ICszNCw3IEBACiAKICAgICBwdWJsaWMgZG91YmxlIGNvbXB1dGVNaWRQb2ludChpbnQgbWluLCBpbnQgbWF4KQogCi0JICAgIHRocm93cyBTd2FwQXJndW1lbnRzRXhjZXB0aW9uOworICAgICAgICB0aHJvd3MgU3dhcEFyZ3VtZW50c0V4Y2VwdGlvbjsKIAogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2VqYi9TbGVzc0VKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbmhlcml0ZW5jZS9lamIvU2xlc3NFSkIuamF2YQppbmRleCAzMzA0YjkwLi40ZWZkNTI2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2luaGVyaXRlbmNlL2VqYi9TbGVzc0VKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvaW5oZXJpdGVuY2UvZWpiL1NsZXNzRUpCLmphdmEKQEAgLTMwLDEzICszMCwxMyBAQAogCiBwdWJsaWMgY2xhc3MgU2xlc3NFSkIKIAotCWltcGxlbWVudHMgU2xlc3MKKyAgICBpbXBsZW1lbnRzIFNsZXNzCiAKIHsKIAogICAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oKSB7CiAKLQkgICAgcmV0dXJuICJIZWxsbyI7CisgICAgICAgIHJldHVybiAiSGVsbG8iOwogCiAgICAgfQogCkBAIC00NCwxNyArNDQsMTcgQEAKIAogICAgIHB1YmxpYyBkb3VibGUgY29tcHV0ZU1pZFBvaW50KGludCBtaW4sIGludCBtYXgpCiAKLQkgICAgdGhyb3dzIFN3YXBBcmd1bWVudHNFeGNlcHRpb24KKyAgICAgICAgdGhyb3dzIFN3YXBBcmd1bWVudHNFeGNlcHRpb24KIAogICAgIHsKIAotCSAgICBpZiAobWluID4gbWF4KSB7CisgICAgICAgIGlmIChtaW4gPiBtYXgpIHsKIAotCQkgICAgdGhyb3cgbmV3IFN3YXBBcmd1bWVudHNFeGNlcHRpb24oIigiK21pbisiLCAiK21heCsiKSIpOworICAgICAgICAgICAgdGhyb3cgbmV3IFN3YXBBcmd1bWVudHNFeGNlcHRpb24oIigiK21pbisiLCAiK21heCsiKSIpOwogCi0JICAgIH0KKyAgICAgICAgfQogCi0JICAgIHJldHVybiAobWluKjEuMCttYXgpLzIuMDsKKyAgICAgICAgcmV0dXJuIChtaW4qMS4wK21heCkvMi4wOwogCiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2ludHJvL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvaW50cm8vY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGVlMjFlYTcuLmEzYTlkNTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvaW50cm8vY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvaW50cm8vY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBARUpCIFNsZXNzIHNsZXNzOwogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CkBAIC0zNiwyMyArMzYsMjMgQEAKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImVqYi1lamIzMC1pbnRlcmNlcHRvcnMtc2Vzc2lvbklEIik7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW52b2tpbmcgc2xlc3MiKTsKICAgICAgICAgICAgIFN0cmluZyByZXN1bHQxID0gc2xlc3MuY29uY2F0QW5kUmV2ZXJzZSgiPE9uZT4iLCAiPFR3bz4iKTsKICAgICAgICAgICAgIFN0cmluZyByZXN1bHQyID0gc2xlc3MuY29uY2F0QW5kUmV2ZXJzZSgiPE9uZT4iLCAiTnVsbCIpOwogICAgICAgICAgICAgU3RyaW5nIHJlc3VsdDMgPSBzbGVzcy5jb25jYXRBbmRSZXZlcnNlKCJudUxMIiwgIk51bGwiKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgOiAiICsgcmVzdWx0MSk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IDogIiArIHJlc3VsdDIpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCA6ICIgKyByZXN1bHQzKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgOiAiICsgcmVzdWx0MSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IDogIiArIHJlc3VsdDIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCA6ICIgKyByZXN1bHQzKTsKIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCA6ICIgKyBzbGVzcy5wbHVzKChieXRlKSAyLCAoc2hvcnQpIDMsIDQpKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgOiAiICsgc2xlc3MuaXNHcmVhdGVyU2hvcnQobmV3IFNob3J0KChzaG9ydCkgNSksIG5ldyBMb25nKDcpKSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IDogIiArIHNsZXNzLnBsdXMoKGJ5dGUpIDIsIChzaG9ydCkgMywgNCkpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCA6ICIgKyBzbGVzcy5pc0dyZWF0ZXJTaG9ydChuZXcgU2hvcnQoKHNob3J0KSA1KSwgbmV3IExvbmcoNykpKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCB0ZXN0MSIgLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbnRyby9lamIvQXJndW1lbnRzVmVyaWZpZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvaW50cm8vZWpiL0FyZ3VtZW50c1ZlcmlmaWVyLmphdmEKaW5kZXggMGM3NWEzNS4uNTI5NWYwOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbnRyby9lamIvQXJndW1lbnRzVmVyaWZpZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2ludHJvL2VqYi9Bcmd1bWVudHNWZXJpZmllci5qYXZhCkBAIC0yNSw3ICsyNSw3IEBACiAKICAgICBAQXJvdW5kSW52b2tlCiAgICAgcHVibGljIE9iamVjdCBpbnRlcmNlcHRDYWxsKEludm9jYXRpb25Db250ZXh0IGN0eCkKLSAgIAl0aHJvd3MgTXlCYWRFeGNlcHRpb24sIEV4Y2VwdGlvbiAKKyAgICAgICB0aHJvd3MgTXlCYWRFeGNlcHRpb24sIEV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgTWV0aG9kIG1ldGhvZCA9IGN0eC5nZXRNZXRob2QoKTsKICAgICAgICAgU3RyaW5nIG1ldGhvZE5hbWUgPSBtZXRob2QuZ2V0TmFtZSgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbnRyby9lamIvU2xlc3NFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvaW50cm8vZWpiL1NsZXNzRUpCLmphdmEKaW5kZXggYzkwNTQxNy4uN2ExZmVjOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9pbnRyby9lamIvU2xlc3NFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL2ludHJvL2VqYi9TbGVzc0VKQi5qYXZhCkBAIC0yMiwxMCArMjIsMTAgQEAKIAogQFN0YXRlbGVzcwogcHVibGljIGNsYXNzIFNsZXNzRUpCCi0JaW1wbGVtZW50cyBTbGVzcworICAgIGltcGxlbWVudHMgU2xlc3MKIHsKICAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKCkgewotCSAgICByZXR1cm4gIkhlbGxvIjsKKyAgICAgICAgcmV0dXJuICJIZWxsbyI7CiAgICAgfQogCiAgICAgQEludGVyY2VwdG9ycyhBcmd1bWVudHNWZXJpZmllci5jbGFzcykKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvbWRiL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL21kYi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDcyNDk3NmUuLmVhNWRmYzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvbWRiL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9tZGIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzAtaW50ZXJjZXB0b3JzLW1kYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9tZGIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9tZGIvYnVpbGQueG1sCmluZGV4IGZkOGNhYjAuLjIzM2I4YzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvbWRiL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL21kYi9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDE0ICs0NiwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkJlYW4qLmNsYXNzLCoqLypIZWxsbyosKiovKkludGVyY2VwdG9yKiIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImNyZWF0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtNzUsMTQgKzc1LDE0IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iMSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL21kYi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL21kYi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMmI3Y2Q2Ni4uODZhMDQ1MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9tZGIvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvbWRiL2NsaWVudC9DbGllbnQuamF2YQpAQCAtNTIsNyArNTIsNyBAQAogCiAgICAgcHJpdmF0ZSBpbnQgbnVtTWVzc2FnZXMgPSAyOwogICAgIHB1YmxpYyBDbGllbnQoU3RyaW5nW10gYXJncykgewotICAgICAgICAKKwogICAgICAgICBpZiggYXJncy5sZW5ndGggPT0gMSApIHsKICAgICAgICAgICAgIG51bU1lc3NhZ2VzID0gbmV3IEludGVnZXIoYXJnc1swXSkuaW50VmFsdWUoKTsKICAgICAgICAgfQpAQCAtNjIsMTAgKzYyLDEwIEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzZXR1cCgpOwogICAgICAgICAgICAgaWYgKGRvVGVzdCgiamF2YTpjb21wL2Vudi9qbXMvTXNnQmVhblF1ZXVlIiwgbnVtTWVzc2FnZXMpKSB7Ci0JCXN0YXQuYWRkU3RhdHVzKCJjbXQgbWFpbiIsIHN0YXQuUEFTUyk7Ci0JICAgIH0gZWxzZSB7Ci0JCXN0YXQuYWRkU3RhdHVzKCJjbXQgbWFpbiIsIHN0YXQuRkFJTCk7Ci0JICAgIH0KKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImNtdCBtYWluIiwgc3RhdC5QQVNTKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImNtdCBtYWluIiwgc3RhdC5GQUlMKTsKKyAgICAgICAgfQogICAgICAgICB9IGNhdGNoKFRocm93YWJsZSB0KSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiY210IG1haW4iLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgdC5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTc2LDE4ICs3NiwxOCBAQAogCiAgICAgcHVibGljIHZvaWQgc2V0dXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgY29udGV4dCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICAgICAKLSAgICAgICAgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxdWV1ZUNvbkZhY3RvcnkgPSAKKworICAgICAgICBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHF1ZXVlQ29uRmFjdG9yeSA9CiAgICAgICAgICAgICAoUXVldWVDb25uZWN0aW9uRmFjdG9yeSkgY29udGV4dC5sb29rdXAKICAgICAgICAgICAgICgiamF2YTpjb21wL2Vudi9Gb29DRiIpOwotICAgICAgICAgICAgCisKICAgICAgICAgcXVldWVDb24gPSBxdWV1ZUNvbkZhY3RvcnkuY3JlYXRlUXVldWVDb25uZWN0aW9uKCk7CiAKICAgICAgICAgcXVldWVTZXNzaW9uID0gcXVldWVDb24uY3JlYXRlUXVldWVTZXNzaW9uCi0gICAgICAgICAgICAoZmFsc2UsIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSk7IAorICAgICAgICAgICAgKGZhbHNlLCBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UpOwogCiAgICAgICAgIC8vIFByb2R1Y2VyIHdpbGwgYmUgc3BlY2lmaWVkIHdoZW4gYWN0dWFsIG1zZyBpcyBzZW50LgotICAgICAgICBxdWV1ZVNlbmRlciA9IHF1ZXVlU2Vzc2lvbi5jcmVhdGVTZW5kZXIobnVsbCk7ICAgICAgICAKKyAgICAgICAgcXVldWVTZW5kZXIgPSBxdWV1ZVNlc3Npb24uY3JlYXRlU2VuZGVyKG51bGwpOwogCiAgICAgICAgIGNsaWVudFF1ZXVlID0gKGpha2FydGEuam1zLlF1ZXVlKQogICAgICAgICAgICAgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvam1zL01zZ0JlYW5DbGllbnRRdWV1ZSIpOwpAQCAtMTA4LDE4ICsxMDgsMTggQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHNlbmRNc2dzKGpha2FydGEuam1zLlF1ZXVlIHF1ZXVlLCBNZXNzYWdlIG1zZywgaW50IG51bSkgCisgICAgcHVibGljIHZvaWQgc2VuZE1zZ3MoamFrYXJ0YS5qbXMuUXVldWUgcXVldWUsIE1lc3NhZ2UgbXNnLCBpbnQgbnVtKQogICAgICAgICB0aHJvd3MgSk1TRXhjZXB0aW9uIHsKICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bTsgaSsrKSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlbmRpbmcgbWVzc2FnZSAiICsgaSArICIgdG8gIiArIHF1ZXVlICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlbmRpbmcgbWVzc2FnZSAiICsgaSArICIgdG8gIiArIHF1ZXVlICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGF0IHRpbWUgIiArIFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsKICAgICAgICAgICAgIHF1ZXVlU2VuZGVyLnNlbmQocXVldWUsIG1zZyk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlbnQgbWVzc2FnZSAiICsgaSArICIgdG8gIiArIHF1ZXVlICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlbnQgbWVzc2FnZSAiICsgaSArICIgdG8gIiArIHF1ZXVlICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGF0IHRpbWUgIiArIFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyBib29sZWFuIGRvVGVzdChTdHJpbmcgZGVzdE5hbWUsIGludCBudW0pIAorICAgIHB1YmxpYyBib29sZWFuIGRvVGVzdChTdHJpbmcgZGVzdE5hbWUsIGludCBudW0pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogCiAgICAgICAgIERlc3RpbmF0aW9uIGRlc3QgPSAoRGVzdGluYXRpb24pIGNvbnRleHQubG9va3VwKGRlc3ROYW1lKTsKQEAgLTEzMyw5ICsxMzMsOSBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldhaXRpbmcgZm9yIHF1ZXVlIG1lc3NhZ2UiKTsKICAgICAgICAgTWVzc2FnZSByZWN2ZG1lc3NhZ2UgPSBxdWV1ZVJlY2VpdmVyLnJlY2VpdmUoVElNRU9VVCk7CiAgICAgICAgIGlmKCByZWN2ZG1lc3NhZ2UgIT0gbnVsbCApIHsKLQkgICAgU3RyaW5nIHJlY2VpdmVkTXNnID0gKChUZXh0TWVzc2FnZSlyZWN2ZG1lc3NhZ2UpLmdldFRleHQoKTsKKyAgICAgICAgU3RyaW5nIHJlY2VpdmVkTXNnID0gKChUZXh0TWVzc2FnZSlyZWN2ZG1lc3NhZ2UpLmdldFRleHQoKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVjZWl2ZWQgbWVzc2FnZSA6ICIgKyByZWNlaXZlZE1zZyk7Ci0JICAgIHJldHVybiByZWNlaXZlZE1zZy5lcXVhbHMoIm1kYigpIGludm9rZWQuIEludGVyY2VwdG9yIGNvdW50OiAxIik7CisgICAgICAgIHJldHVybiByZWNlaXZlZE1zZy5lcXVhbHMoIm1kYigpIGludm9rZWQuIEludGVyY2VwdG9yIGNvdW50OiAxIik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRpbWVvdXQgYWZ0ZXIgIiArIFRJTUVPVVQgKyAiIHNlY29uZHMiKTsKICAgICAgICAgICAgIHRocm93IG5ldyBKTVNFeGNlcHRpb24oInRpbWVvdXQiICsgVElNRU9VVCArICIgc2Vjb25kcyIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9tZGIvZWpiL0Jhc2VJbnRlcmNlcHRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9tZGIvZWpiL0Jhc2VJbnRlcmNlcHRvci5qYXZhCmluZGV4IGE3NTRjYzguLmMzZmU4OGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvbWRiL2VqYi9CYXNlSW50ZXJjZXB0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL21kYi9lamIvQmFzZUludGVyY2VwdG9yLmphdmEKQEAgLTI0LDE2ICsyNCwxNiBAQAogICAgIHByaXZhdGUgc3RhdGljIGludCBpbnRlcmNlcHRvckNvdW50ID0gMCA7CiAKICAgICBzdGF0aWMgaW50IGdldENvdW50KCkgewotCXJldHVybiBpbnRlcmNlcHRvckNvdW50OworICAgIHJldHVybiBpbnRlcmNlcHRvckNvdW50OwogICAgIH0KIAogICAgIEBBcm91bmRJbnZva2UKICAgICBwdWJsaWMgT2JqZWN0IGludGVyY2VwdChJbnZvY2F0aW9uQ29udGV4dCBpbnYpCi0JdGhyb3dzIEV4Y2VwdGlvbgorICAgIHRocm93cyBFeGNlcHRpb24KICAgICB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJbbWRiXSBJbnRlcmNlcHRvciBpbnZva2VkLi4uIik7Ci0JaW50ZXJjZXB0b3JDb3VudCsrOwotCXJldHVybiBpbnYucHJvY2VlZCgpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW21kYl0gSW50ZXJjZXB0b3IgaW52b2tlZC4uLiIpOworICAgIGludGVyY2VwdG9yQ291bnQrKzsKKyAgICByZXR1cm4gaW52LnByb2NlZWQoKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvbWRiL2VqYi9IZWxsbzEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvbWRiL2VqYi9IZWxsbzEuamF2YQppbmRleCAzMDk0YmZkLi40ZTg0YTk3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL21kYi9lamIvSGVsbG8xLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9tZGIvZWpiL0hlbGxvMS5qYXZhCkBAIC0xOSw1ICsxOSw1IEBACiBwdWJsaWMgaW50ZXJmYWNlIEhlbGxvMSB7CiAKICAgICBwdWJsaWMgdm9pZCBoZWxsbyhTdHJpbmcgcyk7Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvbWRiL2VqYi9IZWxsb1N0YXRlZnVsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL21kYi9lamIvSGVsbG9TdGF0ZWZ1bC5qYXZhCmluZGV4IDIzNmQyOGEuLmIzMzhmNTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvbWRiL2VqYi9IZWxsb1N0YXRlZnVsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9tZGIvZWpiL0hlbGxvU3RhdGVmdWwuamF2YQpAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnKTsKICAgICB9CiAgICAgQFByZURlc3Ryb3kgcHVibGljIHZvaWQgbXlQcmVEZXN0cm95TWV0aG9kKCkgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBSRS1ERVNUUk9ZIGNhbGxiYWNrIHJlY2VpdmVkIGluICIgKyBtc2cpOyAgICAgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUFJFLURFU1RST1kgY2FsbGJhY2sgcmVjZWl2ZWQgaW4gIiArIG1zZyk7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL21kYi9lamIvTWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvbWRiL2VqYi9NZXNzYWdlQmVhbi5qYXZhCmluZGV4IGI0ZGU5ZWQuLjdiNDI2ZmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvbWRiL2VqYi9NZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvbWRiL2VqYi9NZXNzYWdlQmVhbi5qYXZhCkBAIC01MCw3ICs1MCw3IEBACiAKICAgICAgICAgUXVldWVDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBudWxsOwogICAgICAgICB0cnkgewotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbGluZyBoZWxsbzEgc3RhdGVsZXNzIGJlYW4iKTsKICAgICAgICAgICAgIGhlbGxvMS5oZWxsbygibG9jYWwgZWpiMy4wIHN0YXRlbGVzcyIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYWxsaW5nIGhlbGxvMiBzdGF0ZWZ1bCBiZWFuIik7CkBAIC03NSw3ICs3NSw3IEBACiAgICAgICAgICAgICBRdWV1ZVNlbmRlciBzZW5kZXIgPSBzZXNzaW9uLmNyZWF0ZVNlbmRlcihxdWV1ZSk7CiAgICAgICAgICAgICBUZXh0TWVzc2FnZSB0bWVzc2FnZSA9IHNlc3Npb24uY3JlYXRlVGV4dE1lc3NhZ2UoKTsKICAgICAgICAgICAgIHRtZXNzYWdlLnNldFRleHQoIm1kYigpIGludm9rZWQuIEludGVyY2VwdG9yIGNvdW50OiAiCi0JCSAgICArIEJhc2VJbnRlcmNlcHRvci5nZXRDb3VudCgpKTsKKyAgICAgICAgICAgICsgQmFzZUludGVyY2VwdG9yLmdldENvdW50KCkpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZW5kaW5nIG1lc3NhZ2UiKTsKICAgICAgICAgICAgIHNlbmRlci5zZW5kKHRtZXNzYWdlKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibWVzc2FnZSBzZW50Iik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL3Nlc3Npb24vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvc2Vzc2lvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDMwMThlYzcuLmUyY2E3NWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvc2Vzc2lvbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvc2Vzc2lvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMSArMTUsMjEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lamIzMC1pbnRlcmNlcHRvcnMtc2Vzc2lvbiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9zZXNzaW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvc2Vzc2lvbi9idWlsZC54bWwKaW5kZXggNjE3ZGM5Ny4uM2VlYWExZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9zZXNzaW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL3Nlc3Npb24vYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NiwxNCArNDYsMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypFeGNlcHRpb24uY2xhc3MsKiovKkludGVyY2VwdG9yKi5jbGFzcywqKi9EdW1teSouY2xhc3MsKiovU2xlc3MqLmNsYXNzLCoqL1NmdWwqLmNsYXNzLCoqLypGb28uY2xhc3MsICoqL0JhciouY2xhc3MsKiovQXJndW1lbnRzVmVyaWZpZXIuY2xhc3MiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9DbGllbnQuY2xhc3MsKiovU2Z1bC5jbGFzcywqKi8qRXhjZXB0aW9uLmNsYXNzLCoqL0Fzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYxLDEwICs2MSwxMCBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL3Nlc3Npb24vY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9zZXNzaW9uL2NsaWVudC9DbGllbnQuamF2YQppbmRleCAzODg0NzExLi5jMDJmYWNjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL3Nlc3Npb24vY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvc2Vzc2lvbi9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI1LDcgKzI1LDcgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTM0LDExICszNCwxMSBAQAogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiZWpiLWVqYjMwLWludGVyY2VwdG9ycy1zZXNzaW9uSUQiKTsKLSAgICB9ICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgQEVKQiBTZnVsIHNmdWw7CiAKICAgICBwcml2YXRlIHN0YXRpYyBARUpCIFNmdWwgc2Z1bDA7CkBAIC01MywxNCArNTMsMTQgQEAKICAgICBwcml2YXRlIHN0YXRpYyBARUpCIFNmdWwgc2Z1bDk7CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0JZG9UZXN0MSgpOwotCWRvVGVzdDIoKTsKLQlkb1Rlc3QzKCk7Ci0JZG9UZXN0NCgpOwotCWRvVGVzdDUoKTsKLQlkb1Rlc3Q2KCk7CisgICAgZG9UZXN0MSgpOworICAgIGRvVGVzdDIoKTsKKyAgICBkb1Rlc3QzKCk7CisgICAgZG9UZXN0NCgpOworICAgIGRvVGVzdDUoKTsKKyAgICBkb1Rlc3Q2KCk7CiAKLQlkb1Rlc3Q3XzgoKTsKKyAgICBkb1Rlc3Q3XzgoKTsKIAogICAgICAgICBkb1Rlc3Q5KCk7CiAgICAgICAgIGRvVGVzdDEwKCk7CkBAIC03MSw5ICs3MSw5IEBACiAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW52b2tpbmcgc3RhdGVmdWwiKTsKICAgICAgICAgICAgIHNmdWwuaGVsbG8oKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCIrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysiKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCIrKysrKyBJbnRlcmNlcHRvckNhbGxDb3VudDogIiArIHNmdWwuZ2V0Q291bnQoKSk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKysrKysgSW50ZXJjZXB0b3JDYWxsQ291bnQ6ICIgKyBzZnVsLmdldENvdW50KCkpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIisrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyIpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIHRlc3QxIiAsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CkBAIC04Niw4ICs4Niw4IEBACiAgICAgICAgICAgICBzZnVsLnRocm93QXBwRXhjZXB0aW9uKCJYWVoiKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCB0ZXN0MiIgLCBzdGF0LkZBSUwpOwogICAgICAgICB9IGNhdGNoIChBcHBFeGNlcHRpb24gYXBwRXgpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJHb3QgZXhwZWN0ZWQgQXBwRXhjZXB0aW9uOiAiICsgYXBwRXgpOwotICAgICAgICAJc3RhdC5hZGRTdGF0dXMoImxvY2FsIHRlc3QyIiAsIHN0YXQuUEFTUyk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IGV4cGVjdGVkIEFwcEV4Y2VwdGlvbjogIiArIGFwcEV4KTsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCB0ZXN0MiIgLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIHRlc3QyIiAsIHN0YXQuRkFJTCk7CkBAIC05NywxMCArOTcsMTAgQEAKICAgICBwcml2YXRlIHZvaWQgZG9UZXN0MygpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFN0cmluZyByZXN1bHQgPSBzZnVsLmNvbXB1dGVNaWQoNCwgMTApOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltUZXN0M106IEdvdDogIiArIHJlc3VsdCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1Rlc3QzXTogR290OiAiICsgcmVzdWx0KTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCB0ZXN0MyIgLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoIChTd2FwQXJndW1lbnRzRXhjZXB0aW9uIHN3YXBFeCkgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCB1bmV4cGVjdGVkIEV4Y2VwdGlvbjogIiArIHN3YXBFeCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IHVuZXhwZWN0ZWQgRXhjZXB0aW9uOiAiICsgc3dhcEV4KTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCB0ZXN0MyIgLCBzdGF0LkZBSUwpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwpAQCAtMTExLDExICsxMTEsMTEgQEAKICAgICBwcml2YXRlIHZvaWQgZG9UZXN0NCgpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFN0cmluZyByZXN1bHQgPSBzZnVsLmNvbXB1dGVNaWQoMjMsIDEwKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJbVGVzdDRdOiBHb3Q6ICIgKyByZXN1bHQKLQkJCSAgICArICIgSU5TVEVBRCBvZiBTd2FwQXJndW1lbnRzRXhjZXB0aW9uIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1Rlc3Q0XTogR290OiAiICsgcmVzdWx0CisgICAgICAgICAgICAgICAgKyAiIElOU1RFQUQgb2YgU3dhcEFyZ3VtZW50c0V4Y2VwdGlvbiIpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIHRlc3Q0IiAsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0gY2F0Y2ggKFN3YXBBcmd1bWVudHNFeGNlcHRpb24gc3dhcEV4KSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IGV4cGVjdGVkIEV4Y2VwdGlvbjogIiArIHN3YXBFeCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IGV4cGVjdGVkIEV4Y2VwdGlvbjogIiArIHN3YXBFeCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgdGVzdDQiICwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTEyNiwxMSArMTI2LDExIEBACiAgICAgcHJpdmF0ZSB2b2lkIGRvVGVzdDUoKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBTdHJpbmcgcmVzdWx0ID0gc2Z1bC5jYWxsRHVtbXkoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJbVGVzdDVdOiBHb3Q6ICIgKyByZXN1bHQKLQkJCSAgICArICIgSU5TVEVBRCBvZiBDYWxsQmxvY2tlZEV4Y2VwdGlvbiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltUZXN0NV06IEdvdDogIiArIHJlc3VsdAorICAgICAgICAgICAgICAgICsgIiBJTlNURUFEIG9mIENhbGxCbG9ja2VkRXhjZXB0aW9uIik7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgdGVzdDUiICwgc3RhdC5GQUlMKTsKICAgICAgICAgfSBjYXRjaCAoQ2FsbEJsb2NrZWRFeGNlcHRpb24gY2FsbEJsa0V4KSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IGV4cGVjdGVkIEV4Y2VwdGlvbjogIiArIGNhbGxCbGtFeCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IGV4cGVjdGVkIEV4Y2VwdGlvbjogIiArIGNhbGxCbGtFeCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgdGVzdDUiICwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTE0Myw3ICsxNDMsNyBAQAogICAgICAgICAgICAgc2Z1bC5lYXRFeGNlcHRpb24oKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCB0ZXN0NiIgLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IHVuZXhwZWN0ZWQgRXhjZXB0aW9uOiAiICsgZSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IHVuZXhwZWN0ZWQgRXhjZXB0aW9uOiAiICsgZSk7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIHRlc3Q2IiAsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KQEAgLTE1MSw0MCArMTUxLDQwIEBACiAKICAgICBwcml2YXRlIHZvaWQgZG9UZXN0N184KCkgewogICAgICAgICB0cnkgewotCSAgICBpbnQgc3ogPSAyMDsKKyAgICAgICAgaW50IHN6ID0gMjA7CiAgICAgICAgIENvbnRleHQgY3R4ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JICAgIHNmdWwucmVzZXRMaWZlY3ljbGVDYWxsYmFja0NvdW50ZXJzKCk7Ci0JICAgIFNmdWxbXSBzZnVscyA9IG5ldyBTZnVsW3N6XTsKLQkgICAgZm9yIChpbnQgaT0wOyBpPHN6OyBpKyspIHsKLSAgICAJCXNmdWxzW2ldID0gKFNmdWwpIGN0eC5sb29rdXAoImNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaW50ZXJjZXB0b3JzLnNlc3Npb24uU2Z1bCIpOwotICAgIAkJaW50IHByZXZJbmRleCA9IChpID09MCkgPyAwIDogaS0xOwotICAgIAkJU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGVkIHNmdWxbIitpKyJdOiAiICsgc2Z1bHNbaV0gKyAiID09PiAiCi0gICAgCQkgICAgICAgICsgc2Z1bHNbcHJldkluZGV4XS5lcXVhbHMoc2Z1bHNbaV0pKTsKLQkJICAgIHNmdWxzW2ldLnNldElEKGkpOworICAgICAgICBzZnVsLnJlc2V0TGlmZWN5Y2xlQ2FsbGJhY2tDb3VudGVycygpOworICAgICAgICBTZnVsW10gc2Z1bHMgPSBuZXcgU2Z1bFtzel07CisgICAgICAgIGZvciAoaW50IGk9MDsgaTxzejsgaSsrKSB7CisgICAgICAgICAgICBzZnVsc1tpXSA9IChTZnVsKSBjdHgubG9va3VwKCJjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmludGVyY2VwdG9ycy5zZXNzaW9uLlNmdWwiKTsKKyAgICAgICAgICAgIGludCBwcmV2SW5kZXggPSAoaSA9PTApID8gMCA6IGktMTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRlZCBzZnVsWyIraSsiXTogIiArIHNmdWxzW2ldICsgIiA9PT4gIgorICAgICAgICAgICAgICAgICAgICArIHNmdWxzW3ByZXZJbmRleF0uZXF1YWxzKHNmdWxzW2ldKSk7CisgICAgICAgICAgICBzZnVsc1tpXS5zZXRJRChpKTsKICAgICAgICAgICAgIHNmdWxzW2ldLmdldENvdW50KCk7Ci0JICAgIH0KLQkgICAgc2xlZXBGb3IoMTApOwotCSAgICBmb3IgKGludCBpPTA7IGk8c3o7IGkrKykgewotCSAgICAgICAgc2Z1bHNbaV0uZ2V0Q291bnQoKTsKLQkgICAgfQotCSAgICBpbnQgcGFzc2l2YXRpb25Db3VudCA9IHNmdWwuZ2V0UHJlUGFzc2l2YXRlQ2FsbGJhY2tDb3VudCgpOwotCSAgICBpbnQgYWN0aXZhdGlvbkNvdW50ID0gc2Z1bC5nZXRQb3N0QWN0aXZhdGVDYWxsYmFja0NvdW50KCk7Ci0JICAgIAorICAgICAgICB9CisgICAgICAgIHNsZWVwRm9yKDEwKTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPHN6OyBpKyspIHsKKyAgICAgICAgICAgIHNmdWxzW2ldLmdldENvdW50KCk7CisgICAgICAgIH0KKyAgICAgICAgaW50IHBhc3NpdmF0aW9uQ291bnQgPSBzZnVsLmdldFByZVBhc3NpdmF0ZUNhbGxiYWNrQ291bnQoKTsKKyAgICAgICAgaW50IGFjdGl2YXRpb25Db3VudCA9IHNmdWwuZ2V0UG9zdEFjdGl2YXRlQ2FsbGJhY2tDb3VudCgpOworCiAgICAgICAgIGJvb2xlYW4gc3RhdHVzID0gKHBhc3NpdmF0aW9uQ291bnQgPiAwKSAmJiAoYWN0aXZhdGlvbkNvdW50PiAwKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJwYXNzaXZhdGlvbjogIiArIHBhc3NpdmF0aW9uQ291bnQgKyAiOyAiCi0JCSAgICArICJhY3RpdmF0aW9uOiAiICsgYWN0aXZhdGlvbkNvdW50KTsKLSAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIHRlc3Q3IiAsIAotCQkgICAgKHN0YXR1cyA9PSB0cnVlKSA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7Ci0gICAgICAgIAorICAgICAgICAgICAgKyAiYWN0aXZhdGlvbjogIiArIGFjdGl2YXRpb25Db3VudCk7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCB0ZXN0NyIgLAorICAgICAgICAgICAgKHN0YXR1cyA9PSB0cnVlKSA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7CisKICAgICAgICAgYm9vbGVhbiBzdGF0ZVJlc3RvcmVkID0gdHJ1ZTsKICAgICAgICAgZm9yIChpbnQgaT0wOyBpPHN6OyBpKyspIHsKICAgICAgICAgICAgIGJvb2xlYW4gb2sgPSBzZnVsc1tpXS5pc1N0YXRlUmVzdG9yZWQoKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigic3RhdGVSZXN0b3JlZFsiICsgaSArICJdOiIgKyBvayk7CiAgICAgICAgICAgICBzdGF0ZVJlc3RvcmVkID0gb2sgJiYgc3RhdHVzOwogICAgICAgICB9Ci0gICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCB0ZXN0OCIgLCAKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIHRlc3Q4IiAsCiAgICAgICAgICAgICAgICAgKHN0YXRlUmVzdG9yZWQgPT0gdHJ1ZSkgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpOwotICAgICAgICAKKwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCB1bmV4cGVjdGVkIEV4Y2VwdGlvbjogIiArIGUpOwogICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CkBAIC0xOTksNyArMTk5LDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdFsiICsgdGVzdE5hbWUgKyAiXTogIiArIG1hcC5nZXQodGVzdE5hbWUpKTsKICAgICAgICAgICAgIGNoZWNrU2V0UGFyYW1zU3RhdHVzID0gY2hlY2tTZXRQYXJhbXNTdGF0dXMgJiYgbWFwLmdldCh0ZXN0TmFtZSk7CiAgICAgICAgIH0KLSAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIHRlc3Q5IiAsIAorICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgdGVzdDkiICwKICAgICAgICAgICAgICAgICAoY2hlY2tTZXRQYXJhbXNTdGF0dXMgPT0gdHJ1ZSkgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpOwogICAgIH0KIApAQCAtMjIxLDE4ICsyMjEsMTggQEAKICAgICAgICAgICAgIGZhaWxlZENvdW50U3RhdHVzID0gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgdGVzdDEwICIgKyB0cnVlU3RhdHVzICsgIiA6ICIgKyBzZnVsLmdldEFzc2VydGlvbkZhaWxlZENvdW50KCkgLCAKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIHRlc3QxMCAiICsgdHJ1ZVN0YXR1cyArICIgOiAiICsgc2Z1bC5nZXRBc3NlcnRpb25GYWlsZWRDb3VudCgpICwKICAgICAgICAgICAgICAgICAoKHRydWVTdGF0dXMgJiYgZmFpbGVkQ291bnRTdGF0dXMpID09IHRydWUpID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKTsKICAgICB9CiAKICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHNsZWVwRm9yKGludCBzZWNvbmRzKSB7Ci0Jd2hpbGUgKHNlY29uZHMtLSA+IDApIHsKLQkgICAgdHJ5IHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCIiICsgc2Vjb25kcyArICIgbGVmdC4uLiIpOwotCQlUaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDEwMDApOwotCSAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBpbkV4KSB7Ci0JICAgIH0KLQl9CisgICAgd2hpbGUgKHNlY29uZHMtLSA+IDApIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIiICsgc2Vjb25kcyArICIgbGVmdC4uLiIpOworICAgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDEwMDApOworICAgICAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBpbkV4KSB7CisgICAgICAgIH0KKyAgICB9CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL3Nlc3Npb24vZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL3Nlc3Npb24vZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKaW5kZXggOWJjODdjNy4uYzBiN2U3YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9zZXNzaW9uL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvc2Vzc2lvbi9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbApAQCAtMjQsNyArMjQsNyBAQAogICAgICAgICA8ZWpiLW5hbWU+U2Z1bEVKQjwvZWpiLW5hbWU+CiAgICAgICAgIDxiZWFuLWNhY2hlPgogICAgICAgICAgICAgPG1heC1jYWNoZS1zaXplPjQ8L21heC1jYWNoZS1zaXplPgotCSAgICA8cmVzaXplLXF1YW50aXR5PjI8L3Jlc2l6ZS1xdWFudGl0eT4KKyAgICAgICAgPHJlc2l6ZS1xdWFudGl0eT4yPC9yZXNpemUtcXVhbnRpdHk+CiAgICAgICAgIDwvYmVhbi1jYWNoZT4KICAgICAgPC9lamI+CiAgICA8L2VudGVycHJpc2UtYmVhbnM+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL3Nlc3Npb24vZWpiL0FyZ3VtZW50c1ZlcmlmaWVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL3Nlc3Npb24vZWpiL0FyZ3VtZW50c1ZlcmlmaWVyLmphdmEKaW5kZXggZWZhMmY4ZC4uODA1MmVkMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9zZXNzaW9uL2VqYi9Bcmd1bWVudHNWZXJpZmllci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvc2Vzc2lvbi9lamIvQXJndW1lbnRzVmVyaWZpZXIuamF2YQpAQCAtMjUsNyArMjUsNyBAQAogCiAgICAgQEFyb3VuZEludm9rZQogICAgIHB1YmxpYyBPYmplY3QgaW50ZXJjZXB0Q2FsbChJbnZvY2F0aW9uQ29udGV4dCBjdHgpCi0gICAJdGhyb3dzIE15QmFkRXhjZXB0aW9uLCBFeGNlcHRpb24gCisgICAgICAgdGhyb3dzIE15QmFkRXhjZXB0aW9uLCBFeGNlcHRpb24KICAgICB7CiAgICAgICAgIE1ldGhvZCBtZXRob2QgPSBjdHguZ2V0TWV0aG9kKCk7CiAgICAgICAgIFN0cmluZyBtZXRob2ROYW1lID0gbWV0aG9kLmdldE5hbWUoKTsKQEAgLTUxLDcgKzUxLDcgQEAKICAgICAgICAgICAgIHBhcmFtc1swXSA9IG5ldyBMb25nKDQ1KTsKICAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFscygib2JqZWN0QXJncyIpKSB7CiAgICAgICAgICAgICBwYXJhbXMgPSBuZXcgT2JqZWN0WzBdOwotICAgICAgICB9IAorICAgICAgICB9CiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGN0eC5zZXRQYXJhbWV0ZXJzKHBhcmFtcyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL3Nlc3Npb24vZWpiL0Jhc2VJbnRlcmNlcHRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9zZXNzaW9uL2VqYi9CYXNlSW50ZXJjZXB0b3IuamF2YQppbmRleCBiMGE5M2VhLi5kMmVjZGU3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL3Nlc3Npb24vZWpiL0Jhc2VJbnRlcmNlcHRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvc2Vzc2lvbi9lamIvQmFzZUludGVyY2VwdG9yLmphdmEKQEAgLTQ0LDExICs0NCwxMSBAQAogCiAgICAgQEFyb3VuZEludm9rZQogICAgIHB1YmxpYyBPYmplY3QgaW50ZXJjZXB0Q2FsbChJbnZvY2F0aW9uQ29udGV4dCBjdHgpCi0gICAJdGhyb3dzIEV4Y2VwdGlvbiAKKyAgICAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewogICAgICAgICBPYmplY3QgcmVzdWx0ID0gbnVsbDsKLQlib29sZWFuIHNldElkID0gZmFsc2U7Ci0JYmFzZUNvdW50Kys7CisgICAgYm9vbGVhbiBzZXRJZCA9IGZhbHNlOworICAgIGJhc2VDb3VudCsrOwogICAgIGlmIChjdHguZ2V0TWV0aG9kKCkuZ2V0TmFtZSgpLmVxdWFscygic2V0SW50ZXJjZXB0b3JJZCIpKSB7CiAgICAgICAgIGphdmEudXRpbC5NYXAgbWFwID0gY3R4LmdldENvbnRleHREYXRhKCk7CiAgICAgICAgIG1hcC5wdXQoIkJhc2VJbnRlcmNlcHRvciIsIHRoaXMpOwpAQCAtNjUsMjYgKzY1LDI2IEBACiAgICAgfQogCiAgICAgcHVibGljIHN0YXRpYyBpbnQgZ2V0SW52b2NhdGlvbkNvdW50KCkgewotCSAgICByZXR1cm4gYmFzZUNvdW50OworICAgICAgICByZXR1cm4gYmFzZUNvdW50OwogICAgIH0KLSAgICAKKwogICAgIEBQcmVQYXNzaXZhdGUKICAgICBwdWJsaWMgdm9pZCBwcmVQYXNzaXZhdGUoSW52b2NhdGlvbkNvbnRleHQgY3R4KSB7Ci0JcHJlUGFzc2l2YXRlQ291bnQrKzsKLQlTeXN0ZW0ub3V0LnByaW50bG4oInByZVBhc3NpdmF0ZUNvdW50OiAiICsgcHJlUGFzc2l2YXRlQ291bnQpOworICAgIHByZVBhc3NpdmF0ZUNvdW50Kys7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJwcmVQYXNzaXZhdGVDb3VudDogIiArIHByZVBhc3NpdmF0ZUNvdW50KTsKICAgICB9CiAKICAgICBAUG9zdEFjdGl2YXRlCiAgICAgcHVibGljIHZvaWQgcG9zdEFjdGl2YXRlKEludm9jYXRpb25Db250ZXh0IGN0eCkgewotCXBvc3RBY3RpdmF0ZUNvdW50Kys7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJwb3N0QWN0aXZhdGVDb3VudDogIiArIHBvc3RBY3RpdmF0ZUNvdW50KTsKKyAgICBwb3N0QWN0aXZhdGVDb3VudCsrOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigicG9zdEFjdGl2YXRlQ291bnQ6ICIgKyBwb3N0QWN0aXZhdGVDb3VudCk7CiAgICAgfQotICAgIAorCiAgICAgLy9Tb21lIHBhY2thZ2UgcHJpdmF0ZSBtZXRob2RzIHRvIGNoZWNrIHN0YXRlCiAgICAgdm9pZCBzZXRJbnRlcmNlcHRvcklEKGludCB2YWwpIHsKICAgICAgICAgdGhpcy5pbnRlcmNlcHRvcklEID0gdmFsOwogICAgIH0KLSAgICAKKwogICAgIGludCBnZXRJbnRlcmNlcHRvcklEKCkgewogICAgICAgICBib29sZWFuIHZhbGlkID0gKGNvbXB1dGVkSW50ZXJjZXB0b3JJRCA9PSBpbnRlcmNlcHRvcklEICogMiArIDEpOwogICAgICAgICBpZiAoISB2YWxpZCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9zZXNzaW9uL2VqYi9CbG9ja2luZ0ludGVyY2VwdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL3Nlc3Npb24vZWpiL0Jsb2NraW5nSW50ZXJjZXB0b3IuamF2YQppbmRleCBlNDgwMTgyLi5kZmFhZThhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL3Nlc3Npb24vZWpiL0Jsb2NraW5nSW50ZXJjZXB0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL3Nlc3Npb24vZWpiL0Jsb2NraW5nSW50ZXJjZXB0b3IuamF2YQpAQCAtMjksNyArMjksNyBAQAogICAgIHByaXZhdGUgdm9pZCBhZnRlckNyZWF0aW9uKEludm9jYXRpb25Db250ZXh0IGN0eCkgewogCiAgICAgICAgIFN0cmluZyB2YWx1ZSA9IChTdHJpbmcpIGN0eC5nZXRDb250ZXh0RGF0YSgpLmdldCgiUG9zdENvbnN0cnVjdCIpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEJsb2NraW5nSW50ZXJjZXB0b3IuYWZ0ZXJDcmVhdGlvbiB2YWx1ZSA9ICIgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gQmxvY2tpbmdJbnRlcmNlcHRvci5hZnRlckNyZWF0aW9uIHZhbHVlID0gIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKyB2YWx1ZSk7CiAgICAgICAgIGlmKHZhbHVlID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkJhc2VJbnRlcmNlcHRvci5Qb3N0Q29uc3RydWN0ICIgKwpAQCAtNDQsMTIgKzQ0LDEyIEBACiAKICAgICBAQXJvdW5kSW52b2tlCiAgICAgcHJpdmF0ZSBPYmplY3QgaW50ZXJjZXB0Q2FsbChJbnZvY2F0aW9uQ29udGV4dCBjdHgpCi0gICAJdGhyb3dzIENhbGxCbG9ja2VkRXhjZXB0aW9uIAorICAgICAgIHRocm93cyBDYWxsQmxvY2tlZEV4Y2VwdGlvbgogICAgIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlt0ZXN0LkJsb2NraW5nSW50ZXJjZXB0b3IgQEFyb3VuZEludm9rZV06ICIgKyBjdHguZ2V0TWV0aG9kKCkpOwotCWJsb2NrQ291bnQrKzsKLQl0aHJvdyBuZXcgQ2FsbEJsb2NrZWRFeGNlcHRpb24oIkNhbGwgYmxvY2tlZCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW3Rlc3QuQmxvY2tpbmdJbnRlcmNlcHRvciBAQXJvdW5kSW52b2tlXTogIiArIGN0eC5nZXRNZXRob2QoKSk7CisgICAgYmxvY2tDb3VudCsrOworICAgIHRocm93IG5ldyBDYWxsQmxvY2tlZEV4Y2VwdGlvbigiQ2FsbCBibG9ja2VkIik7CiAgICAgfQogCi0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvc2Vzc2lvbi9lamIvRHVtbXkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvc2Vzc2lvbi9lamIvRHVtbXkuamF2YQppbmRleCBmNDQ3NDZkLi5kNDg2MTkyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL3Nlc3Npb24vZWpiL0R1bW15LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9zZXNzaW9uL2VqYi9EdW1teS5qYXZhCkBAIC0yMCw3ICsyMCw3IEBACiBwdWJsaWMgaW50ZXJmYWNlIER1bW15CiB7CiAgICAgcHVibGljIFN0cmluZyBkdW1teSgpCi0JdGhyb3dzIENhbGxCbG9ja2VkRXhjZXB0aW9uOworICAgIHRocm93cyBDYWxsQmxvY2tlZEV4Y2VwdGlvbjsKIAogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL3Nlc3Npb24vZWpiL0R1bW15RUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL3Nlc3Npb24vZWpiL0R1bW15RUpCLmphdmEKaW5kZXggODI2ZTgxZC4uYTNkNDQ3NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9zZXNzaW9uL2VqYi9EdW1teUVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvc2Vzc2lvbi9lamIvRHVtbXlFSkIuamF2YQpAQCAtMjQsMTcgKzI0LDE3IEBACiBpbXBvcnQgamFrYXJ0YS5hbm5vdGF0aW9uLlBvc3RDb25zdHJ1Y3Q7CiAKIEBJbnRlcmNlcHRvcnMoewotCWNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaW50ZXJjZXB0b3JzLnNlc3Npb24uQmFzZUludGVyY2VwdG9yLmNsYXNzLAotCWNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaW50ZXJjZXB0b3JzLnNlc3Npb24uQmxvY2tpbmdJbnRlcmNlcHRvci5jbGFzcworICAgIGNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaW50ZXJjZXB0b3JzLnNlc3Npb24uQmFzZUludGVyY2VwdG9yLmNsYXNzLAorICAgIGNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaW50ZXJjZXB0b3JzLnNlc3Npb24uQmxvY2tpbmdJbnRlcmNlcHRvci5jbGFzcwogfSkKIAogQFN0YXRlbGVzcwogcHVibGljIGNsYXNzIER1bW15RUpCCi0JaW1wbGVtZW50cyBEdW1teQorICAgIGltcGxlbWVudHMgRHVtbXkKIHsKICAgICBpbnQgaW50ZXJjZXB0b3JJZDsKICAgICBwcml2YXRlIGJvb2xlYW4gY3JlYXRlQ2FsbGVkID0gZmFsc2U7Ci0gICAgCisKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBhZnRlckNyZWF0ZSgpCiAgICAgewpAQCAtNDMsOSArNDMsOSBAQAogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgZHVtbXkoKQotCXRocm93cyBDYWxsQmxvY2tlZEV4Y2VwdGlvbgorICAgIHRocm93cyBDYWxsQmxvY2tlZEV4Y2VwdGlvbgogICAgIHsKLQkgICAgcmV0dXJuICJEdW1teSEhIjsKKyAgICAgICAgcmV0dXJuICJEdW1teSEhIjsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRJbnRlcmNlcHRvcklkKGludCB2YWwpIHsKQEAgLTU1LDEwICs1NSwxMCBAQAogCiAgICAgICAgIHRoaXMuaW50ZXJjZXB0b3JJZCA9IHZhbDsKICAgICB9Ci0gICAgCisKICAgICBAQXJvdW5kSW52b2tlCiAgICAgcHJpdmF0ZSBPYmplY3QgaW50ZXJjZXB0Q2FsbChJbnZvY2F0aW9uQ29udGV4dCBjdHgpCi0gICAgICAgIHRocm93cyBFeGNlcHRpb24geyAKKyAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiBjdHgucHJvY2VlZCgpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvc2Vzc2lvbi9lamIvRXJyb3JSZWNvdmVyeUludGVyY2VwdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL3Nlc3Npb24vZWpiL0Vycm9yUmVjb3ZlcnlJbnRlcmNlcHRvci5qYXZhCmluZGV4IDM4MzM4YWYuLmE5Mzk3MTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvc2Vzc2lvbi9lamIvRXJyb3JSZWNvdmVyeUludGVyY2VwdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9zZXNzaW9uL2VqYi9FcnJvclJlY292ZXJ5SW50ZXJjZXB0b3IuamF2YQpAQCAtMzIsMTEgKzMyLDExIEBACiAKICAgICBAQXJvdW5kSW52b2tlCiAgICAgcHVibGljIE9iamVjdCBpbnRlcmNlcHRDYWxsKEludm9jYXRpb25Db250ZXh0IGN0eCkKLSAgIAl0aHJvd3MgTXlCYWRFeGNlcHRpb24sIEFzc2VydGlvbkZhaWxlZEV4Y2VwdGlvbiwgRXhjZXB0aW9uIAorICAgICAgIHRocm93cyBNeUJhZEV4Y2VwdGlvbiwgQXNzZXJ0aW9uRmFpbGVkRXhjZXB0aW9uLCBFeGNlcHRpb24KICAgICB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBFcnJvclJFY292ZXJ5SW50ZXJjZXB0b3IiKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oInNsZXNzID0gIiArIGZvb2Jhcik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJzYyA9ICIgKyBzYyk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBFcnJvclJFY292ZXJ5SW50ZXJjZXB0b3IiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oInNsZXNzID0gIiArIGZvb2Jhcik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJzYyA9ICIgKyBzYyk7CiAKICAgICAgICAgTWV0aG9kIG1ldGhvZCA9IGN0eC5nZXRNZXRob2QoKTsKICAgICAgICAgU3RyaW5nIG1ldGhvZE5hbWUgPSBtZXRob2QuZ2V0TmFtZSgpOwpAQCAtNDYsNyArNDYsNyBAQAogCiAgICAgICAgIGlmIChtZXRob2ROYW1lLmVxdWFscygiYXNzZXJ0SWZUcnVlIikpIHsKICAgICAgICAgICAgIHBhcmFtc1swXSA9IG5ldyBCb29sZWFuKGZhbHNlKTsKLSAKKwogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBjdHguc2V0UGFyYW1ldGVycyhwYXJhbXMpOwogICAgICAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlsbEFyZ0V4KSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL3Nlc3Npb24vZWpiL0xpZmVjeWNsZUNhbGxiYWNrSW50ZXJjZXB0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvc2Vzc2lvbi9lamIvTGlmZWN5Y2xlQ2FsbGJhY2tJbnRlcmNlcHRvci5qYXZhCmluZGV4IGRmODEzMWEuLmJhMDU3MjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvc2Vzc2lvbi9lamIvTGlmZWN5Y2xlQ2FsbGJhY2tJbnRlcmNlcHRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvc2Vzc2lvbi9lamIvTGlmZWN5Y2xlQ2FsbGJhY2tJbnRlcmNlcHRvci5qYXZhCkBAIC0yOSw3ICsyOSw3IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgcHJlUGFzc2l2YXRlQ2FsbGJhY2tDb3VudCA9IDA7CiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IHBvc3RBY3RpdmF0ZUNhbGxiYWNrQ291bnQgPSAwOwotICAgIAorCiAgICAgcHJpdmF0ZSBpbnQgaW50ZXJjZXB0b3JJRDsKICAgICBwcml2YXRlIGludCBjb21wdXRlZEludGVyY2VwdG9ySUQ7CiAKQEAgLTM4LDIxICszOCwyMSBAQAogCiAgICAgQFByZVBhc3NpdmF0ZQogICAgIHZvaWQgcHJlUGFzc2l2YXRlKEludm9jYXRpb25Db250ZXh0IGN0eCkgewotCXByZVBhc3NpdmF0ZUNhbGxiYWNrQ291bnQrKzsKKyAgICBwcmVQYXNzaXZhdGVDYWxsYmFja0NvdW50Kys7CiAgICAgfQogCiAgICAgQFBvc3RBY3RpdmF0ZQogICAgIHByaXZhdGUgdm9pZCBwb3N0QWN0aXZhdGUoSW52b2NhdGlvbkNvbnRleHQgY3R4KSB7Ci0JcG9zdEFjdGl2YXRlQ2FsbGJhY2tDb3VudCsrOworICAgIHBvc3RBY3RpdmF0ZUNhbGxiYWNrQ291bnQrKzsKICAgICB9CiAKICAgICBAQXJvdW5kSW52b2tlCiAgICAgT2JqZWN0IGFyb3VuZEludm9rZShJbnZvY2F0aW9uQ29udGV4dCBjdHgpCi0JICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogCi0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBMaWZlY3ljbGVDYWxsYmFja0ludGVyY2VwdG9yOmFyb3VuZEludm9rZSgpIik7Ci0Jc2xlc3Muc2F5SGVsbG8oKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImNhbGxlciBwcmluY2lwYWwgPSAiICsgc2Vzc2lvbkN0eC5nZXRDYWxsZXJQcmluY2lwYWwoKSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBMaWZlY3ljbGVDYWxsYmFja0ludGVyY2VwdG9yOmFyb3VuZEludm9rZSgpIik7CisgICAgc2xlc3Muc2F5SGVsbG8oKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNhbGxlciBwcmluY2lwYWwgPSAiICsgc2Vzc2lvbkN0eC5nZXRDYWxsZXJQcmluY2lwYWwoKSk7CiAKICAgICAgICAgaWYgKGN0eC5nZXRNZXRob2QoKS5nZXROYW1lKCkuZXF1YWxzKCJzZXRJRCIpKSB7CiAgICAgICAgICAgICBjdHguZ2V0Q29udGV4dERhdGEoKS5wdXQoIkxpZmVjeWNsZUNhbGxiYWNrSW50ZXJjZXB0b3IiLCB0aGlzKTsKQEAgLTY1LDMwICs2NSwzMCBAQAogICAgIH0KIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCByZXNldExpZmVjeWNsZUNhbGxiYWNrQ291bnRlcnMoKSB7Ci0JcHJlUGFzc2l2YXRlQ2FsbGJhY2tDb3VudCA9IHBvc3RBY3RpdmF0ZUNhbGxiYWNrQ291bnQgPSAwOworICAgIHByZVBhc3NpdmF0ZUNhbGxiYWNrQ291bnQgPSBwb3N0QWN0aXZhdGVDYWxsYmFja0NvdW50ID0gMDsKICAgICB9CiAKICAgICBwdWJsaWMgc3RhdGljIGludCBnZXRQcmVQYXNzaXZhdGVDYWxsYmFja0NvdW50KCkgewotCXJldHVybiBwcmVQYXNzaXZhdGVDYWxsYmFja0NvdW50OworICAgIHJldHVybiBwcmVQYXNzaXZhdGVDYWxsYmFja0NvdW50OwogICAgIH0KIAogICAgIHB1YmxpYyBzdGF0aWMgaW50IGdldFBvc3RBY3RpdmF0ZUNhbGxiYWNrQ291bnQoKSB7Ci0JcmV0dXJuIHBvc3RBY3RpdmF0ZUNhbGxiYWNrQ291bnQ7CisgICAgcmV0dXJuIHBvc3RBY3RpdmF0ZUNhbGxiYWNrQ291bnQ7CiAgICAgfQotICAgIAorCiAKICAgICB2b2lkIHNldEludGVyY2VwdG9ySUQoaW50IHZhbCkgewogICAgICAgICB0aGlzLmludGVyY2VwdG9ySUQgPSB2YWw7CiAgICAgICAgIHRoaXMuY29tcHV0ZWRJbnRlcmNlcHRvcklEID0gMiAqIHZhbCArIDE7CiAgICAgfQotICAgIAorCiAgICAgaW50IGdldEludGVyY2VwdG9ySUQoKSB7CiAgICAgICAgIHJldHVybiBpbnRlcmNlcHRvcklEOwogICAgIH0KLSAgICAKKwogICAgIGJvb2xlYW4gY2hlY2tJbnRlcmNlcHRvcklEKGludCB2YWwpIHsKLSAgICAgICAgcmV0dXJuICh2YWwgPT0gaW50ZXJjZXB0b3JJRCkgJiYgCisgICAgICAgIHJldHVybiAodmFsID09IGludGVyY2VwdG9ySUQpICYmCiAgICAgICAgICAgICAoY29tcHV0ZWRJbnRlcmNlcHRvcklEID09IDIgKiB2YWwgKyAxKTsKICAgICB9Ci0gICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9zZXNzaW9uL2VqYi9TZnVsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL3Nlc3Npb24vZWpiL1NmdWwuamF2YQppbmRleCBkMjcwMzc1Li45MDZkZTIzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL3Nlc3Npb24vZWpiL1NmdWwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL3Nlc3Npb24vZWpiL1NmdWwuamF2YQpAQCAtMjcsMTcgKzI3LDE3IEBACiAgICAgcHVibGljIFN0cmluZyBoZWxsbygpOwogCiAgICAgcHVibGljIGludCBnZXRDb3VudCgpOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgdGhyb3dBcHBFeGNlcHRpb24oU3RyaW5nIG1zZykKICAgICAgICAgdGhyb3dzIEFwcEV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBTdHJpbmcgY29tcHV0ZU1pZChpbnQgbWluLCBpbnQgbWF4KQotCSAgICB0aHJvd3MgU3dhcEFyZ3VtZW50c0V4Y2VwdGlvbjsKKyAgICAgICAgdGhyb3dzIFN3YXBBcmd1bWVudHNFeGNlcHRpb247CiAKICAgICBwdWJsaWMgU3RyaW5nIGNhbGxEdW1teSgpCi0JICAgIHRocm93cyBFeGNlcHRpb247CisgICAgICAgIHRocm93cyBFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgU3RyaW5nIGVhdEV4Y2VwdGlvbigpIAorICAgIHB1YmxpYyBTdHJpbmcgZWF0RXhjZXB0aW9uKCkKICAgICAgICAgdGhyb3dzIEVhdEV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyB2b2lkICByZXNldExpZmVjeWNsZUNhbGxiYWNrQ291bnRlcnMoKTsKQEAgLTQ1LDkgKzQ1LDkgQEAKICAgICBwdWJsaWMgaW50IGdldFByZVBhc3NpdmF0ZUNhbGxiYWNrQ291bnQoKTsKIAogICAgIHB1YmxpYyBpbnQgZ2V0UG9zdEFjdGl2YXRlQ2FsbGJhY2tDb3VudCgpOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0SUQoaW50IHZhbCk7Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBpc1N0YXRlUmVzdG9yZWQoKTsKIAogICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBCb29sZWFuPiBjaGVja1NldFBhcmFtcygpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9zZXNzaW9uL2VqYi9TZnVsRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL3Nlc3Npb24vZWpiL1NmdWxFSkIuamF2YQppbmRleCA0MzgxZmVhLi5iOTcwYTRmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL3Nlc3Npb24vZWpiL1NmdWxFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL3Nlc3Npb24vZWpiL1NmdWxFSkIuamF2YQpAQCAtNDEsNyArNDEsNyBAQAogICAgIEBFSkIobmFtZT0iZm9vYmFyIikgU2xlc3MgZm9vYmFyOwogCiAgICAgcHJpdmF0ZSBpbnQgY291bnQgPSAwOwotICAgIAorCiAgICAgcHJpdmF0ZSBpbnQgaWQ7CiAgICAgcHJpdmF0ZSBMaWZlY3ljbGVDYWxsYmFja0ludGVyY2VwdG9yIGludGVyY2VwdG9yOwogCkBAIC01MiwxNyArNTIsMTcgQEAKIAogICAgIHB1YmxpYyBTdHJpbmcgaGVsbG8oKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2Z1bEVKQjpoZWxsbygpIik7Ci0Jc2xlc3Muc2F5SGVsbG8oKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImNhbGxlciBwcmluY2lwYWwgPSAiICsgc2MuZ2V0Q2FsbGVyUHJpbmNpcGFsKCkpOworICAgIHNsZXNzLnNheUhlbGxvKCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJjYWxsZXIgcHJpbmNpcGFsID0gIiArIHNjLmdldENhbGxlclByaW5jaXBhbCgpKTsKICAgICAgICAgcmV0dXJuICJoZWxsbyI7CiAgICAgfQogCiAgICAgQEFyb3VuZEludm9rZQogICAgIHByaXZhdGUgT2JqZWN0IGludGVyY2VwdENhbGwoSW52b2NhdGlvbkNvbnRleHQgY3R4KQotICAgCXRocm93cyBFeGNlcHRpb24gCisgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIioqQmVhbnMgQVJPVU5ESU5WT0tFKysgW0BBcm91bmRJbnZva2VdOiAiICsgY3R4LmdldE1ldGhvZCgpKTsKLQljb3VudCsrOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKipCZWFucyBBUk9VTkRJTlZPS0UrKyBbQEFyb3VuZEludm9rZV06ICIgKyBjdHguZ2V0TWV0aG9kKCkpOworICAgIGNvdW50Kys7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpZiAoY3R4LmdldE1ldGhvZCgpLmdldE5hbWUoKS5lcXVhbHMoInNldElEIikpIHsKICAgICAgICAgICAgICAgICBqYXZhLnV0aWwuTWFwIG1hcCA9IGN0eC5nZXRDb250ZXh0RGF0YSgpOwpAQCAtNzUsOSArNzUsOSBAQAogICAgIH0KIAogICAgIHB1YmxpYyBpbnQgZ2V0Q291bnQoKSB7Ci0JICAgIHJldHVybiBjb3VudDsKKyAgICAgICAgcmV0dXJuIGNvdW50OwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHRocm93QXBwRXhjZXB0aW9uKFN0cmluZyBtc2cpCiAgICAgICAgIHRocm93cyBBcHBFeGNlcHRpb24KICAgICB7CkBAIC04NSwxNyArODUsMTcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgU3RyaW5nIGNvbXB1dGVNaWQoaW50IG1pbiwgaW50IG1heCkKLQkgICAgdGhyb3dzIFN3YXBBcmd1bWVudHNFeGNlcHRpb24KKyAgICAgICAgdGhyb3dzIFN3YXBBcmd1bWVudHNFeGNlcHRpb24KICAgICB7Ci0JICAgIHJldHVybiBzbGVzcy5zYXlIZWxsbygpCi0JCSAgICAJKyAiLCBNaWRwb2ludCBvZiAiICsgbWluICsgIiwgIiArIG1heCArICI7ICIKLQkJCSsgIHNsZXNzLmNvbXB1dGVNaWRQb2ludChtaW4sIG1heCk7CisgICAgICAgIHJldHVybiBzbGVzcy5zYXlIZWxsbygpCisgICAgICAgICAgICAgICAgKyAiLCBNaWRwb2ludCBvZiAiICsgbWluICsgIiwgIiArIG1heCArICI7ICIKKyAgICAgICAgICAgICsgIHNsZXNzLmNvbXB1dGVNaWRQb2ludChtaW4sIG1heCk7CiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyBjYWxsRHVtbXkoKQotCSAgICB0aHJvd3MgRXhjZXB0aW9uCisgICAgICAgIHRocm93cyBFeGNlcHRpb24KICAgICB7Ci0JICAgIHJldHVybiBkdW1teS5kdW1teSgpOworICAgICAgICByZXR1cm4gZHVtbXkuZHVtbXkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgU3RyaW5nIGVhdEV4Y2VwdGlvbigpCkBAIC0xMDYsMjIgKzEwNiwyMiBAQAogICAgIH0KIAogICAgIHB1YmxpYyBpbnQgZ2V0UHJlUGFzc2l2YXRlQ2FsbGJhY2tDb3VudCgpIHsKLQlyZXR1cm4gTGlmZWN5Y2xlQ2FsbGJhY2tJbnRlcmNlcHRvci5nZXRQcmVQYXNzaXZhdGVDYWxsYmFja0NvdW50KCk7CisgICAgcmV0dXJuIExpZmVjeWNsZUNhbGxiYWNrSW50ZXJjZXB0b3IuZ2V0UHJlUGFzc2l2YXRlQ2FsbGJhY2tDb3VudCgpOwogICAgIH0KIAogICAgIHB1YmxpYyBpbnQgZ2V0UG9zdEFjdGl2YXRlQ2FsbGJhY2tDb3VudCgpIHsKLQlyZXR1cm4gTGlmZWN5Y2xlQ2FsbGJhY2tJbnRlcmNlcHRvci5nZXRQb3N0QWN0aXZhdGVDYWxsYmFja0NvdW50KCk7CisgICAgcmV0dXJuIExpZmVjeWNsZUNhbGxiYWNrSW50ZXJjZXB0b3IuZ2V0UG9zdEFjdGl2YXRlQ2FsbGJhY2tDb3VudCgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHJlc2V0TGlmZWN5Y2xlQ2FsbGJhY2tDb3VudGVycygpIHsKLQlMaWZlY3ljbGVDYWxsYmFja0ludGVyY2VwdG9yLnJlc2V0TGlmZWN5Y2xlQ2FsbGJhY2tDb3VudGVycygpOworICAgIExpZmVjeWNsZUNhbGxiYWNrSW50ZXJjZXB0b3IucmVzZXRMaWZlY3ljbGVDYWxsYmFja0NvdW50ZXJzKCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0SUQoaW50IHZhbCkgewogICAgICAgICB0aGlzLmlkID0gdmFsOwogICAgICAgICBpbnRlcmNlcHRvci5zZXRJbnRlcmNlcHRvcklEKHZhbCk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gaXNTdGF0ZVJlc3RvcmVkKCkgewogICAgICAgICByZXR1cm4gaW50ZXJjZXB0b3IuY2hlY2tJbnRlcmNlcHRvcklEKGlkKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL3Nlc3Npb24vZWpiL1NsZXNzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL3Nlc3Npb24vZWpiL1NsZXNzLmphdmEKaW5kZXggYzhiZTZlYy4uOTA0NGY4NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9zZXNzaW9uL2VqYi9TbGVzcy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvc2Vzc2lvbi9lamIvU2xlc3MuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oKTsKIAogICAgIHB1YmxpYyBkb3VibGUgY29tcHV0ZU1pZFBvaW50KGludCBtaW4sIGludCBtYXgpCi0JICAgIHRocm93cyBTd2FwQXJndW1lbnRzRXhjZXB0aW9uOworICAgICAgICB0aHJvd3MgU3dhcEFyZ3VtZW50c0V4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyB2b2lkIHNldEZvbyhGb28gZm9vKQogICAgICAgICB0aHJvd3MgTXlCYWRFeGNlcHRpb247CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL3Nlc3Npb24vZWpiL1NsZXNzRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50ZXJjZXB0b3JzL3Nlc3Npb24vZWpiL1NsZXNzRUpCLmphdmEKaW5kZXggNjEzZTU0YS4uNTJkNGI2MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludGVyY2VwdG9ycy9zZXNzaW9uL2VqYi9TbGVzc0VKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRlcmNlcHRvcnMvc2Vzc2lvbi9lamIvU2xlc3NFSkIuamF2YQpAQCAtMjMsMTkgKzIzLDE5IEBACiAvL0RlZmF1bHQgaXMgQExvY2FsCiBAU3RhdGVsZXNzCiBwdWJsaWMgY2xhc3MgU2xlc3NFSkIKLQlpbXBsZW1lbnRzIFNsZXNzCisgICAgaW1wbGVtZW50cyBTbGVzcwogewogICAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oKSB7Ci0JICAgIHJldHVybiAiSGVsbG8iOworICAgICAgICByZXR1cm4gIkhlbGxvIjsKICAgICB9CiAKICAgICBwdWJsaWMgZG91YmxlIGNvbXB1dGVNaWRQb2ludChpbnQgbWluLCBpbnQgbWF4KQotCSAgICB0aHJvd3MgU3dhcEFyZ3VtZW50c0V4Y2VwdGlvbgorICAgICAgICB0aHJvd3MgU3dhcEFyZ3VtZW50c0V4Y2VwdGlvbgogICAgIHsKLQkgICAgaWYgKG1pbiA+IG1heCkgewotCQkgICAgdGhyb3cgbmV3IFN3YXBBcmd1bWVudHNFeGNlcHRpb24oIigiK21pbisiLCAiK21heCsiKSIpOwotCSAgICB9Ci0JICAgIHJldHVybiAobWluKjEuMCttYXgpLzIuMDsKKyAgICAgICAgaWYgKG1pbiA+IG1heCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFN3YXBBcmd1bWVudHNFeGNlcHRpb24oIigiK21pbisiLCAiK21heCsiKSIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiAobWluKjEuMCttYXgpLzIuMDsKICAgICB9CiAKICAgICBASW50ZXJjZXB0b3JzKEFyZ3VtZW50c1ZlcmlmaWVyLmNsYXNzKQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludHJvL211bHRpL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50cm8vbXVsdGkvYnVpbGQucHJvcGVydGllcwppbmRleCAwY2FjMzI1Li40NTIxMzgwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50cm8vbXVsdGkvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50cm8vbXVsdGkvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJkZXZ0ZXN0LWludHJvLW11bHRpIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50cm8vbXVsdGkvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludHJvL211bHRpL2J1aWxkLnhtbAppbmRleCBmMjI5OWNkLi5hYzI0YjBlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50cm8vbXVsdGkvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRyby9tdWx0aS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDE0ICs0NiwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKi5jbGFzcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0NsaWVudC5jbGFzcywqKi9TbGVzcy5jbGFzcywqKi9TbGVzczMwLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjEsMTAgKzYxLDEwIEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRyby9tdWx0aS9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50cm8vbXVsdGkvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGY3NTYyMWMuLjAzMDRhMGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRyby9tdWx0aS9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludHJvL211bHRpL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogQEVKQihuYW1lPSJlamIvR0ciLCBiZWFuSW50ZXJmYWNlPVNsZXNzLmNsYXNzKQogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTM2LDExICszNiwxMSBAQAogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiZWpiLWVqYjMwLWFsbG93ZWQtc2Vzc2lvbklEIik7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIChuZXcgTXlUaHJlYWQoKSkuc3RhcnQoKTsKQEAgLTUwLDcgKzUwLDcgQEAKICAgICAgICAgICAgIChuZXcgTXlUaHJlYWQoKSkuc3RhcnQoKTsKICAgICAgICAgICAgIChuZXcgTXlUaHJlYWQoKSkuc3RhcnQoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJpbnRybyBzYXlIZWxsbyIsIHN0YXQuUEFTUyk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiaW50cm8gc2F5SGVsbG8iLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKQEAgLTU5LDcgKzU5LDcgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIE15VGhyZWFkIGV4dGVuZHMgVGhyZWFkIHsKICAgICAgICAgTXlUaHJlYWQoKSB7fQotICAgICAgICAKKwogICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIChuZXcgSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9HRyIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludHJvL211bHRpL2VqYi9jb20vc3VuL2VqYi9kZXZ0ZXN0L1NsZXNzMzBCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50cm8vbXVsdGkvZWpiL2NvbS9zdW4vZWpiL2RldnRlc3QvU2xlc3MzMEJlYW4uamF2YQppbmRleCAyZDM4NjUzLi5lMTU4MTg0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50cm8vbXVsdGkvZWpiL2NvbS9zdW4vZWpiL2RldnRlc3QvU2xlc3MzMEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50cm8vbXVsdGkvZWpiL2NvbS9zdW4vZWpiL2RldnRlc3QvU2xlc3MzMEJlYW4uamF2YQpAQCAtMzcsMTEgKzM3LDExIEBACiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbygpIHsKLQlyZXR1cm4gIkhlbGxvIjsKKyAgICByZXR1cm4gIkhlbGxvIjsKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiB3YXNFamJDcmVhdGVDYWxsZWQoKSB7Ci0JcmV0dXJuIGVqYkNyZWF0ZUNhbGxlZDsKKyAgICByZXR1cm4gZWpiQ3JlYXRlQ2FsbGVkOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludHJvL211bHRpL2VqYi9jb20vc3VuL2VqYi9kZXZ0ZXN0L1NsZXNzQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludHJvL211bHRpL2VqYi9jb20vc3VuL2VqYi9kZXZ0ZXN0L1NsZXNzQmVhbi5qYXZhCmluZGV4IGVlMzljZDIuLmM1MjhmMTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRyby9tdWx0aS9lamIvY29tL3N1bi9lamIvZGV2dGVzdC9TbGVzc0JlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50cm8vbXVsdGkvZWpiL2NvbS9zdW4vZWpiL2RldnRlc3QvU2xlc3NCZWFuLmphdmEKQEAgLTMyLDExICszMiwxMSBAQAogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oKSB7Ci0JcmV0dXJuICJIZWxsbyI7CisgICAgcmV0dXJuICJIZWxsbyI7CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gd2FzRWpiQ3JlYXRlQ2FsbGVkKCkgewotCXJldHVybiBlamJDcmVhdGVDYWxsZWQ7CisgICAgcmV0dXJuIGVqYkNyZWF0ZUNhbGxlZDsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRyby9zdGF0ZWxlc3MvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRyby9zdGF0ZWxlc3MvYnVpbGQucHJvcGVydGllcwppbmRleCAxOWQ0N2EwLi4xMDFiNmI4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50cm8vc3RhdGVsZXNzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludHJvL3N0YXRlbGVzcy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMSArMTUsMjEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImRldnRlc3QtaW50cm8tc3RhdGVsZXNzIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50cm8vc3RhdGVsZXNzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRyby9zdGF0ZWxlc3MvYnVpbGQueG1sCmluZGV4IDc4MmIwYmMuLjlhMDNkNDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRyby9zdGF0ZWxlc3MvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRyby9zdGF0ZWxlc3MvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NiwxNCArNDYsMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLyouY2xhc3MiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9DbGllbnQuY2xhc3MsKiovU2xlc3MuY2xhc3MsKiovU2xlc3MzMC5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYxLDEwICs2MSwxMCBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50cm8vc3RhdGVsZXNzL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRyby9zdGF0ZWxlc3MvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGRhNDdhODcuLjc4NWM4MTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRyby9zdGF0ZWxlc3MvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRyby9zdGF0ZWxlc3MvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiBARUpCKG5hbWU9ImVqYi9HRyIsIGJlYW5JbnRlcmZhY2U9U2xlc3MuY2xhc3MpCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewpAQCAtMzYsMTEgKzM2LDExIEBACiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJlamItZWpiMzAtYWxsb3dlZC1zZXNzaW9uSUQiKTsKLSAgICB9ICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgQEVKQihuYW1lPSJlamIva2siKSBTbGVzcyBzbGVzczsKIAogICAgIHByaXZhdGUgc3RhdGljIEBFSkIgU2xlc3MzMCBzbGVzczMwOwpAQCAtNDksMzkgKzQ5LDM5IEBACiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgKG5ldyBJbml0aWFsQ29udGV4dCgpKS5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL0dHIik7Ci0JICAgIHNsZXNzLnNheUhlbGxvKCk7CisgICAgICAgIHNsZXNzLnNheUhlbGxvKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiaW50cm8gc2F5SGVsbG8iLCBzdGF0LlBBU1MpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImludHJvIHNheUhlbGxvIiwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0JYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKKyAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwogCiAgICAgICAgIHRyeSB7Ci0JICAgIHJlc3VsdCA9IHNsZXNzLndhc0VqYkNyZWF0ZUNhbGxlZCgpOworICAgICAgICByZXN1bHQgPSBzbGVzcy53YXNFamJDcmVhdGVDYWxsZWQoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJpbnRybyB3YXNFamJDcmVhdGVDYWxsZWQiLAogICAgICAgICAgICAgICAgICAgICByZXN1bHQgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImludHJvIHdhc0VqYkNyZWF0ZUNhbGxlZCIsIHN0YXQuRkFJTCk7Ci0JfQorICAgIH0KIAogCiAgICAgICAgIHRyeSB7Ci0JICAgIHNsZXNzMzAuc2F5SGVsbG8oKTsKKyAgICAgICAgc2xlc3MzMC5zYXlIZWxsbygpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImludHJvIHNheUhlbGxvMzAiLCBzdGF0LlBBU1MpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImludHJvIHNheUhlbGxvMzAiLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlyZXN1bHQgPSBmYWxzZTsKKyAgICByZXN1bHQgPSBmYWxzZTsKIAogICAgICAgICB0cnkgewotCSAgICByZXN1bHQgPSBzbGVzczMwLndhc0VqYkNyZWF0ZUNhbGxlZCgpOworICAgICAgICByZXN1bHQgPSBzbGVzczMwLndhc0VqYkNyZWF0ZUNhbGxlZCgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImludHJvIHdhc0VqYkNyZWF0ZUNhbGxlZDMwIiwKICAgICAgICAgICAgICAgICAgICAgKHJlc3VsdCA9PSBmYWxzZSkgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImludHJvIHdhc0VqYkNyZWF0ZUNhbGxlZDMwIiwgc3RhdC5GQUlMKTsKLQl9CisgICAgfQogCiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludHJvL3N0YXRlbGVzcy9lamIvY29tL3N1bi9lamIvZGV2dGVzdC9TbGVzczMwQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludHJvL3N0YXRlbGVzcy9lamIvY29tL3N1bi9lamIvZGV2dGVzdC9TbGVzczMwQmVhbi5qYXZhCmluZGV4IDJkMzg2NTMuLmUxNTgxODQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRyby9zdGF0ZWxlc3MvZWpiL2NvbS9zdW4vZWpiL2RldnRlc3QvU2xlc3MzMEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50cm8vc3RhdGVsZXNzL2VqYi9jb20vc3VuL2VqYi9kZXZ0ZXN0L1NsZXNzMzBCZWFuLmphdmEKQEAgLTM3LDExICszNywxMSBAQAogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oKSB7Ci0JcmV0dXJuICJIZWxsbyI7CisgICAgcmV0dXJuICJIZWxsbyI7CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gd2FzRWpiQ3JlYXRlQ2FsbGVkKCkgewotCXJldHVybiBlamJDcmVhdGVDYWxsZWQ7CisgICAgcmV0dXJuIGVqYkNyZWF0ZUNhbGxlZDsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRyby9zdGF0ZWxlc3MvZWpiL2NvbS9zdW4vZWpiL2RldnRlc3QvU2xlc3NCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvaW50cm8vc3RhdGVsZXNzL2VqYi9jb20vc3VuL2VqYi9kZXZ0ZXN0L1NsZXNzQmVhbi5qYXZhCmluZGV4IGVlMzljZDIuLmM1MjhmMTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9pbnRyby9zdGF0ZWxlc3MvZWpiL2NvbS9zdW4vZWpiL2RldnRlc3QvU2xlc3NCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL2ludHJvL3N0YXRlbGVzcy9lamIvY29tL3N1bi9lamIvZGV2dGVzdC9TbGVzc0JlYW4uamF2YQpAQCAtMzIsMTEgKzMyLDExIEBACiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbygpIHsKLQlyZXR1cm4gIkhlbGxvIjsKKyAgICByZXR1cm4gIkhlbGxvIjsKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiB3YXNFamJDcmVhdGVDYWxsZWQoKSB7Ci0JcmV0dXJuIGVqYkNyZWF0ZUNhbGxlZDsKKyAgICByZXR1cm4gZWpiQ3JlYXRlQ2FsbGVkOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9idWlsZC54bWwKaW5kZXggYjNiZDhmZi4uNjJhM2M2OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvYnVpbGQueG1sCkBAIC04OCw5ICs4OCw5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYi1lamIzMC1wZXJzaXN0ZW5jZSB0ZXN0cykKLQk8L2VjaG8+CisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamItZWpiMzAtcGVyc2lzdGVuY2UgdGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2NvbnRleHQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9jb250ZXh0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMjc1N2IxYS4uYTg1Zjg4MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2NvbnRleHQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvY29udGV4dC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMiArMTUsMjIgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lamIzMC1wZXJzaXN0ZW5jZS1jb250ZXh0Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InNpbXBsZS5jbGllbnQiIHZhbHVlPSJjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmhlbGxvLnNlc3Npb24uY2xpZW50LlN0YW5kYWxvbmVDbGllbnQiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2NvbnRleHQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2NvbnRleHQvYnVpbGQueG1sCmluZGV4IGI2MWQ5NDcuLmUzM2Y2NGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9jb250ZXh0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvY29udGV4dC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTU4LDEwICs1OCwxMCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfS9saWIiLz4KLSAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9L2xpYi8ke2FwcG5hbWV9LWxpYi5qYXIiIAorICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vbGliLyR7YXBwbmFtZX0tbGliLmphciIKICAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgICBpbmNsdWRlcz0iKiovUGVyc29uLmNsYXNzIj4KLSAgICAgICAgPC9qYXI+ICAgICAgICAKKyAgICAgICAgPC9qYXI+CiAgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS9saWIvJHthcHBuYW1lfS1wYXIxLmphciI+CiAgICAgICAgICAgICAgPG1ldGFpbmYgZmlsZT0iZGVzY3JpcHRvci9wZXJzaXN0ZW5jZS54bWwiLz4KICAgICAgICAgPC9qYXI+CkBAIC03Miw5ICs3Miw5IEBACiAgICAgICAgICAgICAgPG1ldGFpbmYgZmlsZT0iZGVzY3JpcHRvci9wZXJzaXN0ZW5jZS54bWwiLz4KICAgICAgICAgPC9qYXI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovU2Z1bCouY2xhc3MsKiovU2xlc3MqLmNsYXNzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovQ2xpZW50LmNsYXNzLCoqL1NmdWwuY2xhc3MsKiovU2xlc3MuY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiIHVwZGF0ZT0ieWVzIgpAQCAtODIsOSArODIsOSBAQAogICAgICAgICAgICAgIGluY2x1ZGVzPSJsaWIvJHthcHBuYW1lfS1saWIuamFyLCBsaWIvJHthcHBuYW1lfS1wYXIxLmphciwgbGliLyR7YXBwbmFtZX0tcGFyMi5qYXIsIGxpYi8ke2FwcG5hbWV9LXBhcjMuamFyIj4KICAgICAgICAgPC9qYXI+CiAKLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtOTIsMTAgKzkyLDEwIEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9jb250ZXh0L2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9jb250ZXh0L2NsaWVudC9DbGllbnQuamF2YQppbmRleCBlZDNjMmIzLi45ZmVkNGVlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvY29udGV4dC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2NvbnRleHQvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHByaXZhdGUgU3RyaW5nIHBlcnNvbk5hbWU7CkBAIC0zNSw4ICszNSw4IEBACiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJlamItZWpiMzAtcGVyc2lzdGVuY2UtY29udGV4dElEIik7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHBlcnNvbk5hbWUgPSAiZHVrZSI7CkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgIH0KIAogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIEBFSkIgU2xlc3Mgc2xlc3M7CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CkBAIC04NCw4ICs4NCw4IEBACiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iICwgc3RhdC5GQUlMKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAJcmV0dXJuOworCisgICAgICAgIHJldHVybjsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9jb250ZXh0L2VqYi9QZXJzb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9jb250ZXh0L2VqYi9QZXJzb24uamF2YQppbmRleCAwZjZjN2VjLi4zNGQ0NzA4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvY29udGV4dC9lamIvUGVyc29uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2NvbnRleHQvZWpiL1BlcnNvbi5qYXZhCkBAIC0zNSw3ICszNSw3IEBACiAgICAgcHVibGljIFBlcnNvbihTdHJpbmcgbmFtZSl7CiAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKXsKICAgICAgICAgcmV0dXJuICJQZXJzb246IHsiKyIobmFtZSA9ICIrbmFtZSsiKX0iOwogICAgIH0KQEAgLTQ0LDQgKzQ0LDQgQEAKICAgICAgICAgcmV0dXJuIG5hbWU7CiAgICAgfQogfQotIAorCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvY29udGV4dC9lamIvU2xlc3NCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvY29udGV4dC9lamIvU2xlc3NCZWFuLmphdmEKaW5kZXggNGFiYmRkNi4uZTdkZmY4YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2NvbnRleHQvZWpiL1NsZXNzQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9jb250ZXh0L2VqYi9TbGVzc0JlYW4uamF2YQpAQCAtMzYsMTEgKzM2LDExIEBACiAgICAgcHJpdmF0ZSBAUGVyc2lzdGVuY2VDb250ZXh0KHVuaXROYW1lPSJlbTIiKSBFbnRpdHlNYW5hZ2VyIGVtUmVtb3ZlOwogCiAgICAgcHVibGljIHZvaWQgY3JlYXRlUGVyc29uKFN0cmluZyBuYW1lKSB7Ci0gICAgICAgIAorCiAgICAgICAgIFBlcnNvbiBwID0gbmV3IFBlcnNvbihuYW1lKTsKIAogICAgICAgICBib29sZWFuIGNvbnRhaW5zUCA9IGVtQ3JlYXRlLmNvbnRhaW5zKHApOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImJlZm9yZSBwZXJzaXN0IGNvbnRhaW5zUCA9ICIgKyBjb250YWluc1ApOyAgICAgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYmVmb3JlIHBlcnNpc3QgY29udGFpbnNQID0gIiArIGNvbnRhaW5zUCk7CiAgICAgICAgIGlmKCBjb250YWluc1AgKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJjb250YWlucygpIHNob3VsZCBiZSBmYWxzZSIpOwogICAgICAgICB9CkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndoZW4gY2FsbGluZyBjbG9zZSgpIG9uIGEgY29udGFpbmVyLW1hbmFnZWQgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVudGl0eU1hbmFnZXIiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAvLyBpc09wZW4gZG9lc24ndCBtYWtlIGFueSBzZW5zZSBvbiBhIGNvbnRhaW5lci1tYW5hZ2VkIGVudGl0eSBtYW5hZ2VyLAogICAgICAgICAvLyBidXQgaXQgc2hvdWxkbid0IHRocm93IGFuIGV4Y2VwdGlvbi4KICAgICAgICAgZW1DcmVhdGUuaXNPcGVuKCk7CkBAIC0xMTUsOCArMTE1LDggQEAKICAgICAgICAgaWYoIHJlc3VsdHMzLnNpemUoKSAhPSAxKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJ3cm9uZyBudW0gcmVzdWx0cyIpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAKKworCiAgICAgfQogCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQpAQCAtMTMzLDcgKzEzMyw3IEBACiAgICAgICAgIH0KIAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdldHRpbmcgcTEgZnJvbSBFTSIpOwotICAgICAgICBRdWVyeSBxMSA9IGVtRmluZC5jcmVhdGVRdWVyeSgiU0VMRUNUIE9CSkVDVChwKSBGUk9NIFBlcnNvbiBwIFdIRVJFIHAubmFtZT0nIiArIG5hbWUgKyAiJyIpOyAKKyAgICAgICAgUXVlcnkgcTEgPSBlbUZpbmQuY3JlYXRlUXVlcnkoIlNFTEVDVCBPQkpFQ1QocCkgRlJPTSBQZXJzb24gcCBXSEVSRSBwLm5hbWU9JyIgKyBuYW1lICsgIiciKTsKIAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4ZWN1dGluZyBxMSIpOwogICAgICAgICBQZXJzb24gcDMgPSAoUGVyc29uKSBxMS5nZXRTaW5nbGVSZXN1bHQoKTsKQEAgLTE1OSw3ICsxNTksNyBAQAogCiAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHZXR0aW5nIHEyIGZyb20gRU0iKTsKLSAgICAgICAgUXVlcnkgcTIgPSBlbUZpbmQuY3JlYXRlUXVlcnkoIlNFTEVDVCBPQkpFQ1QocCkgRlJPTSBQZXJzb24gcCBXSEVSRSBwLm5hbWU9JyIgKyBuYW1lICsgIiciKTsgCisgICAgICAgIFF1ZXJ5IHEyID0gZW1GaW5kLmNyZWF0ZVF1ZXJ5KCJTRUxFQ1QgT0JKRUNUKHApIEZST00gUGVyc29uIHAgV0hFUkUgcC5uYW1lPSciICsgbmFtZSArICInIik7CiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHEyLnNldEZpcnN0UmVzdWx0KC0xKTsKQEAgLTIxOCw3ICsyMTgsNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgZXhwZWN0ZWQgVHJhbnNhY3Rpb25SZXF1aXJlZEV4Y2VwdGlvbiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2hlbiBjYWxsaW5nIG1lcmdlIG91dHNpZGUgYSB0cmFuc2FjdGlvbiIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBlbUZpbmQucmVtb3ZlKHApOwogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigicmVtb3ZlIHNob3VsZCBoYXZlIHRocm93biBhbiBleGNlcHRpb24iKTsKQEAgLTI2Niw3ICsyNjYsNyBAQAogICAgICAgICBpZiggIW5hbWUuZXF1YWxzKHA4LmdldE5hbWUoKSkgKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJmaW5kZXIgcmVzdWx0cyBub3QgZXF1aXZhbGVudCIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIFF1ZXJ5IHE0ID0gZW1GaW5kLmNyZWF0ZU5hdGl2ZVF1ZXJ5KCJTRUxFQ1QgcC5uYW1lIEZST00gRUpCMzBfUEVSU0lTVEVOQ0VfQ09OVEVYVF9QRVJTT04gcCBXSEVSRSBwLm5hbWUgTElLRSAnIiArIG5hbWUgKyAiJyIpOwogICAgICAgICBTdHJpbmcgcDkgPSAoU3RyaW5nKSBxNC5nZXRTaW5nbGVSZXN1bHQoKTsgLy8gKChWZWN0b3IpIHE0LmdldFNpbmdsZVJlc3VsdCgpKS5lbGVtZW50QXQoMCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRm91bmQgIiArIHA5KTsKQEAgLTI3OSw3ICsyNzksNyBAQAogICAgICAgICBpZiggIW5hbWUuZXF1YWxzKHAxMCkgKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJmaW5kZXIgcmVzdWx0cyBub3QgZXF1aXZhbGVudCIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAKICAgICAgICAgUXVlcnkgcTUgPSBlbUZpbmQuY3JlYXRlTmF0aXZlUXVlcnkoIlNFTEVDVCBwLm5hbWUgRlJPTSBFSkIzMF9QRVJTSVNURU5DRV9DT05URVhUX1BFUlNPTiBwIFdIRVJFIHAubmFtZSBMSUtFICciICsgbmFtZSArICInIiwgUGVyc29uLmNsYXNzKTsKICAgICAgICAgUGVyc29uIHAxMSA9IChQZXJzb24pIHE1LmdldFNpbmdsZVJlc3VsdCgpOwpAQCAtMjk2LDcgKzI5Niw3IEBACiAgICAgICAgIH0KIAogICAgICAgICBRdWVyeSBxNiA9IGVtRmluZC5jcmVhdGVOYXRpdmVRdWVyeSgiU0VMRUNUIHAubmFtZSBGUk9NIEVKQjMwX1BFUlNJU1RFTkNFX0NPTlRFWFRfUEVSU09OIHAgV0hFUkUgcC5uYW1lIExJS0UgJyIgKyBuYW1lICsgIiciLCAiUGVyc29uU3FsTWFwcGluZyIpOwotICAgICAgICAKKwogICAgICAgICBQZXJzb24gcDEzID0gKFBlcnNvbikgcTYuZ2V0U2luZ2xlUmVzdWx0KCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRm91bmQgIiArIHAxMyk7CiAgICAgICAgIGlmKCAhbmFtZS5lcXVhbHMocDEzLmdldE5hbWUoKSkgKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzFzbHNiXzJzZnNicy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8xc2xzYl8yc2ZzYnMvYnVpbGQucHJvcGVydGllcwppbmRleCBjYWQ1ZDczLi43NzNiODM4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzFzbHNiXzJzZnNicy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fMXNsc2JfMnNmc2JzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMwLXBlcnNpc3RlbmNlLWVlbV8xc2xzYl8yc2ZzYnMiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic2ltcGxlLmNsaWVudCIgdmFsdWU9ImNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaGVsbG8uc2Vzc2lvbi5jbGllbnQuU3RhbmRhbG9uZUNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CkBAIC0yNiwxMCArMjYsMTAgQEAKIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fMXNsc2JfMnNmc2JzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fMXNsc2JfMnNmc2JzL2J1aWxkLnhtbAppbmRleCBiMjc5ZjMzLi41YmMyODdiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzFzbHNiXzJzZnNicy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8xc2xzYl8yc2ZzYnMvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC01OCwxNyArNTgsMTcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0vbGliIi8+Ci0gICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS9saWIvJHthcHBuYW1lfS1saWIuamFyIiAKKyAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9L2xpYi8ke2FwcG5hbWV9LWxpYi5qYXIiCiAgICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICAgaW5jbHVkZXM9IioqL1BlcnNvbi5jbGFzcyI+Ci0gICAgICAgIDwvamFyPiAgICAgICAgCisgICAgICAgIDwvamFyPgogICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vbGliLyR7YXBwbmFtZX0tcGFyMS5qYXIiPgogICAgICAgICAgICAgIDxtZXRhaW5mIGZpbGU9ImRlc2NyaXB0b3IvcGVyc2lzdGVuY2UueG1sIi8+CiAgICAgICAgIDwvamFyPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL1NmdWwqLmNsYXNzLCoqL1NsZXNzKi5jbGFzcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0NsaWVudC5jbGFzcywqKi9TZnVsLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIiB1cGRhdGU9InllcyIKQEAgLTc2LDkgKzc2LDkgQEAKICAgICAgICAgICAgICBpbmNsdWRlcz0ibGliLyR7YXBwbmFtZX0tbGliLmphciwgbGliLyR7YXBwbmFtZX0tcGFyMS5qYXIiPgogICAgICAgICA8L2phcj4KIAotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC04NiwxMCArODYsMTAgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8xc2xzYl8yc2ZzYnMvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8xc2xzYl8yc2ZzYnMvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDQyMDhkYTIuLjQxYmFlYzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fMXNsc2JfMnNmc2JzL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzFzbHNiXzJzZnNicy9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTUzLDE0ICs1MywxNCBAQAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKIAogICAgICAgICB0cnkgewotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSSBhbSBpbiBjbGllbnQiKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY2FsbGluZyBjcmVhdGVQZXJzb24oIiArIHBlcnNvbk5hbWUgKyAiKSIpOwogICAgICAgICAgICAgc2Z1bC5zZXROYW1lKHBlcnNvbk5hbWUpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjcmVhdGVkICIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIE1hcDxTdHJpbmcsIEJvb2xlYW4+IG1hcCA9IHNmdWwuZG9UZXN0cygpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIEl0ZXJhdG9yPFN0cmluZz4gaXRlciA9IG1hcC5rZXlTZXQoKS5pdGVyYXRvcigpOwogICAgICAgICAgICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgU3RyaW5nIHRlc3ROYW1lID0gaXRlci5uZXh0KCk7CkBAIC03Myw3ICs3Myw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIgLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLSAgICAJcmV0dXJuOworICAgICAgICByZXR1cm47CiAgICAgfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fMXNsc2JfMnNmc2JzL2VqYi9QZXJzb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fMXNsc2JfMnNmc2JzL2VqYi9QZXJzb24uamF2YQppbmRleCBmMDVmNWIyLi40YTJjYTg5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzFzbHNiXzJzZnNicy9lamIvUGVyc29uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8xc2xzYl8yc2ZzYnMvZWpiL1BlcnNvbi5qYXZhCkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgIHJldHVybiBkYXRhOwogICAgIH0KIAotICAgIEBPdmVycmlkZSAKKyAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgICAgICByZXR1cm4gIlBlcnNvbjogKG5hbWU9IiArIG5hbWUgKyAiOyBkYXRhPSAiICsgZGF0YSArICIpIjsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzFzbHNiXzJzZnNicy9lamIvU2Z1bEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fMXNsc2JfMnNmc2JzL2VqYi9TZnVsQmVhbi5qYXZhCmluZGV4IDNkZDkyZmYuLjc4ZWQzMGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fMXNsc2JfMnNmc2JzL2VqYi9TZnVsQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fMXNsc2JfMnNmc2JzL2VqYi9TZnVsQmVhbi5qYXZhCkBAIC0zNCwyNyArMzQsMjcgQEAKIGltcG9ydCBqYWthcnRhLmVqYi5FSkJFeGNlcHRpb247CiAKIEBTdGF0ZWZ1bAotQEVKQihuYW1lPSJlamIvU2Z1bEJlYW4iLCAKK0BFSkIobmFtZT0iZWpiL1NmdWxCZWFuIiwKICAgICAgICAgYmVhbkludGVyZmFjZT1jb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLnBlcnNpc3RlbmNlLmVlbV8xc2xzYl8yc2ZzYnMuU2Z1bERlbGVnYXRlLmNsYXNzKQogCiBwdWJsaWMgY2xhc3MgU2Z1bEJlYW4KICAgICBpbXBsZW1lbnRzIFNmdWwgewogCiAgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKLSAgICAKKwogICAgIHByaXZhdGUgQEVKQiBTZnVsRGVsZWdhdGUgZGVsZWdhdGU7CiAKICAgICBwcml2YXRlIEBFSkIgU2xlc3Mgc2xlc3M7Ci0gICAgCisKICAgICBwcml2YXRlIEBQZXJzaXN0ZW5jZUNvbnRleHQodW5pdE5hbWU9ImxpYi9lamItZWpiMzAtcGVyc2lzdGVuY2UtZWVtXzFzbHNiXzJzZnNicy1wYXIxLmphciNlbSIsCi0gICAgICAgICAgICAgICAgdHlwZT1QZXJzaXN0ZW5jZUNvbnRleHRUeXBlLkVYVEVOREVEKSAKKyAgICAgICAgICAgICAgICB0eXBlPVBlcnNpc3RlbmNlQ29udGV4dFR5cGUuRVhURU5ERUQpCiAgICAgICAgICAgICBFbnRpdHlNYW5hZ2VyIGV4dGVuZGVkRU07Ci0gCisKICAgICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBTdHJpbmcgbG9va3VwTmFtZSA9ICJqYXZhOmNvbXAvZW52L2VqYi9TZnVsQmVhbiI7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgSW5pdGlhbENvbnRleHQgaW5pdEN0eCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgZGVsZWdhdGUgPSAoU2Z1bERlbGVnYXRlKSBpbml0Q3R4Lmxvb2t1cChsb29rdXBOYW1lKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CkBAIC02NCw3ICs2NCw3IEBACiAKICAgICBwdWJsaWMgTWFwPFN0cmluZywgQm9vbGVhbj4gZG9UZXN0cygpIHsKICAgICAgICAgUGVyc29uIHBlcnNvbiA9IG5ldyBQZXJzb24obmFtZSk7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyBkZWxlZ2F0ZU5hbWUgPSAiZGVsZ25hbWVfIiArIG5hbWU7CiAgICAgICAgIFN0cmluZyBkZWxlZ2F0ZURhdGE9ICJkZWxnZGF0YTogIiArIG5hbWU7CiAKQEAgLTEwMSw3ICsxMDEsNyBAQAogICAgICAgICAgICAgcGVlck9wU3RhdHVzID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBtYXAucHV0KCJwZWVyRm91bmRNZSAoLXZlIHRlc3QpIiwgcGVlck9wU3RhdHVzKTsKLSAgICAgICAgCisKICAgICAgICAgbWFwLnB1dCgiZGVsZWdhdGVSZW1vdmVkTWUiLAogICAgICAgICAgICAgICAgIGRlbGVnYXRlLnJlbW92ZShuYW1lKSk7CiAKQEAgLTExNSw3ICsxMTUsNyBAQAogCiAgICAgICAgIG1hcC5wdXQoImlDYW5ub3RGaW5kTWUgKC12ZSB0ZXN0KSIsCiAgICAgICAgICAgICAoZmluZChuYW1lKSA9PSBudWxsKSk7Ci0gICAgICAgIAorCiAgICAgICAgIG1hcC5wdXQoInJlbW92ZWREZWxlZ2F0ZSIsCiAgICAgICAgICAgICByZW1vdmVQZXJzb24oZGVsZWdhdGVOYW1lKSk7CiAKQEAgLTEyNiw3ICsxMjYsNyBAQAogICAgICAgICAgICAgcGVlck9wU3RhdHVzID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBtYXAucHV0KCJwZWVyQ2Fubm90ZmluZERlbGVnYXRlICgtdmUgdGVzdCkiLCBwZWVyT3BTdGF0dXMpOwotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgcGVlck5hbWUgPSAiX3BlZXJfbmFtZV8iICsgbmFtZTsKICAgICAgICAgU3RyaW5nIHBlZXJEYXRhID0gIl9wZWVyX2RhdGFfIiArIG5hbWU7CiAKQEAgLTE2NCw1ICsxNjQsNSBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiByZW1vdmVkOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8xc2xzYl8yc2ZzYnMvZWpiL1NmdWxEZWxlZ2F0ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8xc2xzYl8yc2ZzYnMvZWpiL1NmdWxEZWxlZ2F0ZS5qYXZhCmluZGV4IDM2MWMyYTEuLmY1OWU4YmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fMXNsc2JfMnNmc2JzL2VqYi9TZnVsRGVsZWdhdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzFzbHNiXzJzZnNicy9lamIvU2Z1bERlbGVnYXRlLmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKICAgICBQZXJzb24gZmluZChTdHJpbmcgbmFtZSk7CiAKICAgICBib29sZWFuIHJlbW92ZShTdHJpbmcgbmFtZSk7Ci0gICAgCisKICAgICBFbnRpdHlNYW5hZ2VyIGdldEVNKCk7CiAKICAgICBTZnVsUGVlciBnZXRTZnVsUGVlcigpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8xc2xzYl8yc2ZzYnMvZWpiL1NmdWxEZWxlZ2F0ZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fMXNsc2JfMnNmc2JzL2VqYi9TZnVsRGVsZWdhdGVCZWFuLmphdmEKaW5kZXggZmNmMmYxYy4uMTc0ZGVmOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8xc2xzYl8yc2ZzYnMvZWpiL1NmdWxEZWxlZ2F0ZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzFzbHNiXzJzZnNicy9lamIvU2Z1bERlbGVnYXRlQmVhbi5qYXZhCkBAIC00MSwxMSArNDEsMTEgQEAKICAgICBwdWJsaWMgRW50aXR5TWFuYWdlciBnZXRFTSgpIHsKICAgICAgICAgcmV0dXJuIGV4dGVuZGVkRU07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFBlcnNvbiBjcmVhdGUoU3RyaW5nIG5hbWUsIFN0cmluZyBkYXRhKSB7CiAKICAgICAgICAgUGVyc29uIHAgPSBuZXcgUGVyc29uKG5hbWUsIGRhdGEpOwotICAgICAgICAKKwogICAgICAgICBleHRlbmRlZEVNLnBlcnNpc3QocCk7CiAgICAgICAgIHJldHVybiBwOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fMXNsc2JfMnNmc2JzL2VqYi9TZnVsUGVlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8xc2xzYl8yc2ZzYnMvZWpiL1NmdWxQZWVyLmphdmEKaW5kZXggYzQzZjI4Ny4uYmUyYjA1NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8xc2xzYl8yc2ZzYnMvZWpiL1NmdWxQZWVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8xc2xzYl8yc2ZzYnMvZWpiL1NmdWxQZWVyLmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKICAgICBQZXJzb24gZmluZChTdHJpbmcgbmFtZSk7CiAKICAgICBib29sZWFuIHJlbW92ZShTdHJpbmcgbmFtZSk7Ci0gICAgCisKICAgICBFbnRpdHlNYW5hZ2VyIGdldEVNKCk7CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fMXNsc2JfMnNmc2JzL2VqYi9TZnVsUGVlckJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fMXNsc2JfMnNmc2JzL2VqYi9TZnVsUGVlckJlYW4uamF2YQppbmRleCBkMWY2NDA3Li4xYjlkZGEyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzFzbHNiXzJzZnNicy9lamIvU2Z1bFBlZXJCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8xc2xzYl8yc2ZzYnMvZWpiL1NmdWxQZWVyQmVhbi5qYXZhCkBAIC0zNywxMSArMzcsMTEgQEAKICAgICBwdWJsaWMgRW50aXR5TWFuYWdlciBnZXRFTSgpIHsKICAgICAgICAgcmV0dXJuIGV4dGVuZGVkRU07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFBlcnNvbiBjcmVhdGUoU3RyaW5nIG5hbWUsIFN0cmluZyBkYXRhKSB7CiAKICAgICAgICAgUGVyc29uIHAgPSBuZXcgUGVyc29uKG5hbWUsIGRhdGEpOwotICAgICAgICAKKwogICAgICAgICBleHRlbmRlZEVNLnBlcnNpc3QocCk7CiAgICAgICAgIHJldHVybiBwOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fMXNsc2JfMnNmc2JzL3NxbC9jcmVhdGUuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8xc2xzYl8yc2ZzYnMvc3FsL2NyZWF0ZS5zcWwKaW5kZXggNmQ2Y2VkMy4uYTE3NjFjZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8xc2xzYl8yc2ZzYnMvc3FsL2NyZWF0ZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8xc2xzYl8yc2ZzYnMvc3FsL2NyZWF0ZS5zcWwKQEAgLTEsNCArMSw0IEBACi1DUkVBVEUgVEFCTEUgRUpCMzBfUEVSU0lTVEVOQ0VfRUVNXzFTTFNCXzJTRlNCU19QRVJTT04gKA0KLSAgICBOQU1FIFZBUkNIQVIoMjU2KSBOT1QgTlVMTCBQUklNQVJZIEtFWSwNCi0gICAgREFUQSBWQVJDSEFSKDI1NikNCi0pOw0KK0NSRUFURSBUQUJMRSBFSkIzMF9QRVJTSVNURU5DRV9FRU1fMVNMU0JfMlNGU0JTX1BFUlNPTiAoCisgICAgTkFNRSBWQVJDSEFSKDI1NikgTk9UIE5VTEwgUFJJTUFSWSBLRVksCisgICAgREFUQSBWQVJDSEFSKDI1NikKKyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzFzbHNiXzJzZnNicy9zcWwvZHJvcC5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzFzbHNiXzJzZnNicy9zcWwvZHJvcC5zcWwKaW5kZXggOGM5ZTVjNC4uOWMyM2E1YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8xc2xzYl8yc2ZzYnMvc3FsL2Ryb3Auc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fMXNsc2JfMnNmc2JzL3NxbC9kcm9wLnNxbApAQCAtMSArMSBAQAotRFJPUCBUQUJMRSBFSkIzMF9QRVJTSVNURU5DRV9FRU1fMVNMU0JfMlNGU0JTX1BFUlNPTjsNCitEUk9QIFRBQkxFIEVKQjMwX1BFUlNJU1RFTkNFX0VFTV8xU0xTQl8yU0ZTQlNfUEVSU09OOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8zc2ZzYnMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fM3Nmc2JzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZjUxY2Y2ZS4uMDc3Nzc2MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8zc2ZzYnMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzNzZnNicy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lamIzMC1wZXJzaXN0ZW5jZS1lZW1fM3Nmc2JzIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InNpbXBsZS5jbGllbnQiIHZhbHVlPSJjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmhlbGxvLnNlc3Npb24uY2xpZW50LlN0YW5kYWxvbmVDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgdmFsdWU9IkNsaWVudCIvPgpAQCAtMjYsMTAgKzI2LDEwIEBACiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzNzZnNicy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzNzZnNicy9idWlsZC54bWwKaW5kZXggYTFlNzhjMy4uNTU1ZWY4YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8zc2ZzYnMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fM3Nmc2JzL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNTgsMTcgKzU4LDE3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9L2xpYiIvPgotICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vbGliLyR7YXBwbmFtZX0tbGliLmphciIgCisgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS9saWIvJHthcHBuYW1lfS1saWIuamFyIgogICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgogICAgICAgICAgICAgIGluY2x1ZGVzPSIqKi9QZXJzb24uY2xhc3MiPgotICAgICAgICA8L2phcj4gICAgICAgIAorICAgICAgICA8L2phcj4KICAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9L2xpYi8ke2FwcG5hbWV9LXBhcjEuamFyIj4KICAgICAgICAgICAgICA8bWV0YWluZiBmaWxlPSJkZXNjcmlwdG9yL3BlcnNpc3RlbmNlLnhtbCIvPgogICAgICAgICA8L2phcj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9TZnVsKi5jbGFzcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0NsaWVudC5jbGFzcywqKi9TZnVsLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIiB1cGRhdGU9InllcyIKQEAgLTc2LDkgKzc2LDkgQEAKICAgICAgICAgICAgICBpbmNsdWRlcz0ibGliLyR7YXBwbmFtZX0tbGliLmphciwgbGliLyR7YXBwbmFtZX0tcGFyMS5qYXIiPgogICAgICAgICA8L2phcj4KIAotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC04NiwxMCArODYsMTAgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8zc2ZzYnMvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8zc2ZzYnMvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDQ5OGZjNWUuLjcxYzczYjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fM3Nmc2JzL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzNzZnNicy9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTUzLDE0ICs1MywxNCBAQAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKIAogICAgICAgICB0cnkgewotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSSBhbSBpbiBjbGllbnQiKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY2FsbGluZyBjcmVhdGVQZXJzb24oIiArIHBlcnNvbk5hbWUgKyAiKSIpOwogICAgICAgICAgICAgc2Z1bC5zZXROYW1lKHBlcnNvbk5hbWUpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjcmVhdGVkICIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIE1hcDxTdHJpbmcsIEJvb2xlYW4+IG1hcCA9IHNmdWwuZG9UZXN0cygpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIEl0ZXJhdG9yPFN0cmluZz4gaXRlciA9IG1hcC5rZXlTZXQoKS5pdGVyYXRvcigpOwogICAgICAgICAgICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgU3RyaW5nIHRlc3ROYW1lID0gaXRlci5uZXh0KCk7CkBAIC03Myw3ICs3Myw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIgLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLSAgICAJcmV0dXJuOworICAgICAgICByZXR1cm47CiAgICAgfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fM3Nmc2JzL2VqYi9QZXJzb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fM3Nmc2JzL2VqYi9QZXJzb24uamF2YQppbmRleCAzYzI5NThlLi5lMmNmMGM2YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8zc2ZzYnMvZWpiL1BlcnNvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fM3Nmc2JzL2VqYi9QZXJzb24uamF2YQpAQCAtNDIsNyArNDIsNyBAQAogICAgICAgICB0aGlzLmRhdGEgPSBkYXRhOwogICAgIH0KIAotICAgIEBPdmVycmlkZSAKKyAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgICAgICByZXR1cm4gIlBlcnNvbjogKG5hbWU9IiArIG5hbWUgKyAiOyBkYXRhPSAiICsgZGF0YSArICIpIjsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzNzZnNicy9lamIvU2Z1bEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fM3Nmc2JzL2VqYi9TZnVsQmVhbi5qYXZhCmluZGV4IDdhNWRhYjkuLmY5YmMzYTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fM3Nmc2JzL2VqYi9TZnVsQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fM3Nmc2JzL2VqYi9TZnVsQmVhbi5qYXZhCkBAIC0zNCwyNSArMzQsMjUgQEAKIGltcG9ydCBqYWthcnRhLmVqYi5FSkJFeGNlcHRpb247CiAKIEBTdGF0ZWZ1bAotQEVKQihuYW1lPSJlamIvU2Z1bEJlYW4iLCAKK0BFSkIobmFtZT0iZWpiL1NmdWxCZWFuIiwKICAgICAgICAgYmVhbkludGVyZmFjZT1jb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLnBlcnNpc3RlbmNlLmVlbV8zc2ZzYnMuU2Z1bERlbGVnYXRlLmNsYXNzKQogCiBwdWJsaWMgY2xhc3MgU2Z1bEJlYW4KICAgICBpbXBsZW1lbnRzIFNmdWwgewogCiAgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKLSAgICAKKwogICAgIHByaXZhdGUgQEVKQiBTZnVsRGVsZWdhdGUgZGVsZWdhdGU7Ci0gICAgCisKICAgICBwcml2YXRlIEBQZXJzaXN0ZW5jZUNvbnRleHQodW5pdE5hbWU9ImxpYi9lamItZWpiMzAtcGVyc2lzdGVuY2UtZWVtXzNzZnNicy1wYXIxLmphciNlbSIsCi0gICAgICAgICAgICAgICAgdHlwZT1QZXJzaXN0ZW5jZUNvbnRleHRUeXBlLkVYVEVOREVEKSAKKyAgICAgICAgICAgICAgICB0eXBlPVBlcnNpc3RlbmNlQ29udGV4dFR5cGUuRVhURU5ERUQpCiAgICAgICAgICAgICBFbnRpdHlNYW5hZ2VyIGV4dGVuZGVkRU07Ci0gCisKICAgICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBTdHJpbmcgbG9va3VwTmFtZSA9ICJqYXZhOmNvbXAvZW52L2VqYi9TZnVsQmVhbiI7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgSW5pdGlhbENvbnRleHQgaW5pdEN0eCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgZGVsZWdhdGUgPSAoU2Z1bERlbGVnYXRlKSBpbml0Q3R4Lmxvb2t1cChsb29rdXBOYW1lKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CkBAIC02Miw3ICs2Miw3IEBACiAKICAgICBwdWJsaWMgTWFwPFN0cmluZywgQm9vbGVhbj4gZG9UZXN0cygpIHsKICAgICAgICAgUGVyc29uIHBlcnNvbiA9IG5ldyBQZXJzb24obmFtZSk7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyBkZWxlZ2F0ZU5hbWUgPSAiZGVsZ25hbWVfIiArIG5hbWU7CiAgICAgICAgIFN0cmluZyBkZWxlZ2F0ZURhdGE9ICJkZWxnZGF0YTogIiArIG5hbWU7CiAKQEAgLTg4LDcgKzg4LDcgQEAKIAogICAgICAgICBtYXAucHV0KCJwZWVyRm91bmRNZSIsCiAgICAgICAgICAgICAgICAgKHBlZXIuZmluZChuYW1lKSAhPSBudWxsKSk7Ci0gICAgICAgIAorCiAgICAgICAgIG1hcC5wdXQoImRlbGVnYXRlUmVtb3ZlZE1lIiwKICAgICAgICAgICAgICAgICBkZWxlZ2F0ZS5yZW1vdmUobmFtZSkpOwogCkBAIC05NywxMyArOTcsMTMgQEAKIAogICAgICAgICBtYXAucHV0KCJpQ2Fubm90RmluZE1lICgtdmUgdGVzdCkiLAogICAgICAgICAgICAgKGZpbmQobmFtZSkgPT0gbnVsbCkpOwotICAgICAgICAKKwogICAgICAgICBtYXAucHV0KCJyZW1vdmVkRGVsZWdhdGUiLAogICAgICAgICAgICAgcmVtb3ZlUGVyc29uKGRlbGVnYXRlTmFtZSkpOwogCiAgICAgICAgIG1hcC5wdXQoInBlZXJDYW5ub3RmaW5kRGVsZWdhdGUgKC12ZSB0ZXN0KSIsCiAgICAgICAgICAgICAoISBwZWVyLnJlbW92ZShkZWxlZ2F0ZU5hbWUpKSk7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyBwZWVyTmFtZSA9ICJfcGVlcl9uYW1lXyIgKyBuYW1lOwogICAgICAgICBTdHJpbmcgcGVlckRhdGEgPSAiX3BlZXJfZGF0YV8iICsgbmFtZTsKIApAQCAtMTM2LDUgKzEzNiw1IEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJlbW92ZWQ7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzNzZnNicy9lamIvU2Z1bERlbGVnYXRlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzNzZnNicy9lamIvU2Z1bERlbGVnYXRlLmphdmEKaW5kZXggMGY0NTgwNy4uNzdhMDQ1YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8zc2ZzYnMvZWpiL1NmdWxEZWxlZ2F0ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fM3Nmc2JzL2VqYi9TZnVsRGVsZWdhdGUuamF2YQpAQCAtMjgsNyArMjgsNyBAQAogICAgIFBlcnNvbiBmaW5kKFN0cmluZyBuYW1lKTsKIAogICAgIGJvb2xlYW4gcmVtb3ZlKFN0cmluZyBuYW1lKTsKLSAgICAKKwogICAgIEVudGl0eU1hbmFnZXIgZ2V0RU0oKTsKIAogICAgIFNmdWxQZWVyIGdldFNmdWxQZWVyKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzNzZnNicy9lamIvU2Z1bERlbGVnYXRlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8zc2ZzYnMvZWpiL1NmdWxEZWxlZ2F0ZUJlYW4uamF2YQppbmRleCA3Y2IzNzExLi44ZWY0NTE1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzNzZnNicy9lamIvU2Z1bERlbGVnYXRlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fM3Nmc2JzL2VqYi9TZnVsRGVsZWdhdGVCZWFuLmphdmEKQEAgLTQxLDExICs0MSwxMSBAQAogICAgIHB1YmxpYyBFbnRpdHlNYW5hZ2VyIGdldEVNKCkgewogICAgICAgICByZXR1cm4gZXh0ZW5kZWRFTTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgUGVyc29uIGNyZWF0ZShTdHJpbmcgbmFtZSwgU3RyaW5nIGRhdGEpIHsKIAogICAgICAgICBQZXJzb24gcCA9IG5ldyBQZXJzb24obmFtZSwgZGF0YSk7Ci0gICAgICAgIAorCiAgICAgICAgIGV4dGVuZGVkRU0ucGVyc2lzdChwKTsKICAgICAgICAgcmV0dXJuIHA7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8zc2ZzYnMvZWpiL1NmdWxQZWVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzNzZnNicy9lamIvU2Z1bFBlZXIuamF2YQppbmRleCBhZTA1MWQ1Li5iMTliY2RiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzNzZnNicy9lamIvU2Z1bFBlZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzNzZnNicy9lamIvU2Z1bFBlZXIuamF2YQpAQCAtMjgsNyArMjgsNyBAQAogICAgIFBlcnNvbiBmaW5kKFN0cmluZyBuYW1lKTsKIAogICAgIGJvb2xlYW4gcmVtb3ZlKFN0cmluZyBuYW1lKTsKLSAgICAKKwogICAgIEVudGl0eU1hbmFnZXIgZ2V0RU0oKTsKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8zc2ZzYnMvZWpiL1NmdWxQZWVyQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8zc2ZzYnMvZWpiL1NmdWxQZWVyQmVhbi5qYXZhCmluZGV4IDY2NzhhYzkuLjgyNDdmYzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fM3Nmc2JzL2VqYi9TZnVsUGVlckJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzNzZnNicy9lamIvU2Z1bFBlZXJCZWFuLmphdmEKQEAgLTM3LDExICszNywxMSBAQAogICAgIHB1YmxpYyBFbnRpdHlNYW5hZ2VyIGdldEVNKCkgewogICAgICAgICByZXR1cm4gZXh0ZW5kZWRFTTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgUGVyc29uIGNyZWF0ZShTdHJpbmcgbmFtZSwgU3RyaW5nIGRhdGEpIHsKIAogICAgICAgICBQZXJzb24gcCA9IG5ldyBQZXJzb24obmFtZSwgZGF0YSk7Ci0gICAgICAgIAorCiAgICAgICAgIGV4dGVuZGVkRU0ucGVyc2lzdChwKTsKICAgICAgICAgcmV0dXJuIHA7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8zc2ZzYnMvc3FsL2NyZWF0ZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzNzZnNicy9zcWwvY3JlYXRlLnNxbAppbmRleCBmODI5ZTU2Li44MDljNWFiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzNzZnNicy9zcWwvY3JlYXRlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzNzZnNicy9zcWwvY3JlYXRlLnNxbApAQCAtMSw0ICsxLDQgQEAKLUNSRUFURSBUQUJMRSBFSkIzMF9QRVJTSVNURU5DRV9FRU1fM1NGU0JTX1BFUlNPTiAoDQotICAgIE5BTUUgVkFSQ0hBUigyNTYpIE5PVCBOVUxMIFBSSU1BUlkgS0VZLA0KLSAgICBEQVRBIFZBUkNIQVIoMjU2KQ0KLSk7DQorQ1JFQVRFIFRBQkxFIEVKQjMwX1BFUlNJU1RFTkNFX0VFTV8zU0ZTQlNfUEVSU09OICgKKyAgICBOQU1FIFZBUkNIQVIoMjU2KSBOT1QgTlVMTCBQUklNQVJZIEtFWSwKKyAgICBEQVRBIFZBUkNIQVIoMjU2KQorKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fM3Nmc2JzL3NxbC9kcm9wLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fM3Nmc2JzL3NxbC9kcm9wLnNxbAppbmRleCAwYWM4M2MyLi42ZmY1NzBjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtXzNzZnNicy9zcWwvZHJvcC5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV8zc2ZzYnMvc3FsL2Ryb3Auc3FsCkBAIC0xICsxIEBACi1EUk9QIFRBQkxFIEVKQjMwX1BFUlNJU1RFTkNFX0VFTV8zU0ZTQlNfUEVSU09OOw0KK0RST1AgVEFCTEUgRUpCMzBfUEVSU0lTVEVOQ0VfRUVNXzNTRlNCU19QRVJTT047CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtX2FkYXB0ZWQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fYWRhcHRlZC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDg5MmUyOTQuLmJhMWY1MWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fYWRhcHRlZC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fYWRhcHRlZC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lamIzMC1wZXJzaXN0ZW5jZS1lZW1fYWRhcHRlZCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzaW1wbGUuY2xpZW50IiB2YWx1ZT0iY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5oZWxsby5zZXNzaW9uLmNsaWVudC5TdGFuZGFsb25lQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJDbGllbnQiLz4KQEAgLTI2LDEwICsyNiwxMCBAQAogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV9hZGFwdGVkL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fYWRhcHRlZC9idWlsZC54bWwKaW5kZXggNjhmYzlhZC4uZTM1MWVhNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV9hZGFwdGVkL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtX2FkYXB0ZWQvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC01OCwxNyArNTgsMTcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0vbGliIi8+Ci0gICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS9saWIvJHthcHBuYW1lfS1saWIuamFyIiAKKyAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9L2xpYi8ke2FwcG5hbWV9LWxpYi5qYXIiCiAgICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICAgaW5jbHVkZXM9IioqL1BlcnNvbi5jbGFzcyI+Ci0gICAgICAgIDwvamFyPiAgICAgICAgCisgICAgICAgIDwvamFyPgogICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vbGliLyR7YXBwbmFtZX0tcGFyMS5qYXIiPgogICAgICAgICAgICAgIDxtZXRhaW5mIGZpbGU9ImRlc2NyaXB0b3IvcGVyc2lzdGVuY2UueG1sIi8+CiAgICAgICAgIDwvamFyPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL1NmdWwqLmNsYXNzLCAqKi9BZGFwdGVkTG9jYWxIb21lLmNsYXNzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovQ2xpZW50LmNsYXNzLCoqL1NmdWwuY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiIHVwZGF0ZT0ieWVzIgpAQCAtNzYsOSArNzYsOSBAQAogICAgICAgICAgICAgIGluY2x1ZGVzPSJsaWIvJHthcHBuYW1lfS1saWIuamFyLCBsaWIvJHthcHBuYW1lfS1wYXIxLmphciI+CiAgICAgICAgIDwvamFyPgogCi0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTg2LDEwICs4NiwxMCBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtX2FkYXB0ZWQvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV9hZGFwdGVkL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA0NDBhY2UxLi5lMTEzNmM5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtX2FkYXB0ZWQvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fYWRhcHRlZC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTUzLDEzICs1MywxMyBAQAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKIAogICAgICAgICB0cnkgewotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSSBhbSBpbiBjbGllbnQiKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY2FsbGluZyBzZXROYW1lKCIgKyBwZXJzb25OYW1lICsgIikiKTsKICAgICAgICAgICAgIHNmdWwuc2V0TmFtZShwZXJzb25OYW1lKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBNYXA8U3RyaW5nLCBCb29sZWFuPiBtYXAgPSBzZnVsLmRvVGVzdHMoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBJdGVyYXRvcjxTdHJpbmc+IGl0ZXIgPSBtYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsKICAgICAgICAgICAgIHdoaWxlIChpdGVyLmhhc05leHQoKSkgewogICAgICAgICAgICAgICAgIFN0cmluZyB0ZXN0TmFtZSA9IGl0ZXIubmV4dCgpOwpAQCAtNzIsNyArNzIsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iICwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0gICAgCXJldHVybjsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtX2FkYXB0ZWQvZWpiL1BlcnNvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV9hZGFwdGVkL2VqYi9QZXJzb24uamF2YQppbmRleCA3NjAzYzdkLi42ZmJjYmQxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtX2FkYXB0ZWQvZWpiL1BlcnNvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fYWRhcHRlZC9lamIvUGVyc29uLmphdmEKQEAgLTQyLDcgKzQyLDcgQEAKICAgICAgICAgdGhpcy5kYXRhID0gZGF0YTsKICAgICB9CiAKLSAgICBAT3ZlcnJpZGUgCisgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKICAgICAgICAgcmV0dXJuICJQZXJzb246IChuYW1lPSIgKyBuYW1lICsgIjsgZGF0YT0gIiArIGRhdGEgKyAiKSI7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV9hZGFwdGVkL2VqYi9TZnVsQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV9hZGFwdGVkL2VqYi9TZnVsQmVhbi5qYXZhCmluZGV4IGM0ZmU1NDYuLjgzY2EyYWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fYWRhcHRlZC9lamIvU2Z1bEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtX2FkYXB0ZWQvZWpiL1NmdWxCZWFuLmphdmEKQEAgLTQwLDIyICs0MCwyMiBAQAogICAgIGltcGxlbWVudHMgU2Z1bCB7CiAKICAgICBwcml2YXRlIFN0cmluZyBuYW1lOwotICAgIAorCiAgICAgQEVKQiBwcml2YXRlIEFkYXB0ZWRMb2NhbEhvbWUgaG9tZTsKIAogICAgIHByaXZhdGUgU2Z1bERlbGVnYXRlIGRlbGVnYXRlOwotICAgIAorCiAgICAgcHJpdmF0ZSBAUGVyc2lzdGVuY2VDb250ZXh0KHVuaXROYW1lPSJsaWIvZWpiLWVqYjMwLXBlcnNpc3RlbmNlLWVlbV9hZGFwdGVkLXBhcjEuamFyI2VtIiwKLSAgICAgICAgICAgICAgICB0eXBlPVBlcnNpc3RlbmNlQ29udGV4dFR5cGUuRVhURU5ERUQpIAorICAgICAgICAgICAgICAgIHR5cGU9UGVyc2lzdGVuY2VDb250ZXh0VHlwZS5FWFRFTkRFRCkKICAgICAgICAgICAgIEVudGl0eU1hbmFnZXIgZXh0ZW5kZWRFTTsKLSAKKwogICAgIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICB9CiAKICAgICBwdWJsaWMgTWFwPFN0cmluZywgQm9vbGVhbj4gZG9UZXN0cygpIHsKICAgICAgICAgUGVyc29uIHBlcnNvbiA9IG5ldyBQZXJzb24obmFtZSk7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyBkZWxlZ2F0ZU5hbWUgPSAiZGVsZ25hbWVfIiArIG5hbWU7CiAgICAgICAgIFN0cmluZyBkZWxlZ2F0ZURhdGE9ICJkZWxnZGF0YTogIiArIG5hbWU7CiAgICAgICAgIHRyeSB7CkBAIC02OSwxMSArNjksMTEgQEAKIAogICAgICAgICBleHRlbmRlZEVNLnBlcnNpc3QocGVyc29uKTsKICAgICAgICAgUGVyc29uIGZvdW5kUGVyc29uID0gZGVsZWdhdGUuZmluZChuYW1lKTsKLSAgICAgICAgCisKICAgICAgICAgYm9vbGVhbiBkZWxlZ2F0ZVJlbW92ZWRNZSA9IGRlbGVnYXRlLnJlbW92ZShuYW1lKTsKLSAgICAgICAgCisKICAgICAgICAgYm9vbGVhbiByZW1vdmVkRGVsZWdhdGUgPSByZW1vdmVQZXJzb24oZGVsZWdhdGVOYW1lKTsKLSAgICAgICAgCisKICAgICAgICAgTWFwPFN0cmluZywgQm9vbGVhbj4gbWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBCb29sZWFuPigpOwogICAgICAgICBtYXAucHV0KCJmaW5kRGVsZWdhdGVDcmVhdGVkUGVyc29uIiwgKGRQZXJzb24gIT0gbnVsbCkpOwogICAgICAgICBtYXAucHV0KCJkZWxlZ2F0ZUZvdW5kTWUiLCAoZm91bmRQZXJzb24gIT0gbnVsbCkpOwpAQCAtMTAxLDUgKzEwMSw1IEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJlbW92ZWQ7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtX2FkYXB0ZWQvZWpiL1NmdWxEZWxlZ2F0ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV9hZGFwdGVkL2VqYi9TZnVsRGVsZWdhdGUuamF2YQppbmRleCBlMmNkODhmLi5hY2M1ZWY1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtX2FkYXB0ZWQvZWpiL1NmdWxEZWxlZ2F0ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fYWRhcHRlZC9lamIvU2Z1bERlbGVnYXRlLmphdmEKQEAgLTMwLDcgKzMwLDcgQEAKICAgICBQZXJzb24gZmluZChTdHJpbmcgbmFtZSk7CiAKICAgICBib29sZWFuIHJlbW92ZShTdHJpbmcgbmFtZSk7Ci0gICAgCisKICAgICBFbnRpdHlNYW5hZ2VyIGdldEVNKCk7CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fYWRhcHRlZC9lamIvU2Z1bERlbGVnYXRlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV9hZGFwdGVkL2VqYi9TZnVsRGVsZWdhdGVCZWFuLmphdmEKaW5kZXggZjI1ODYxNy4uMTAwZWY2YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV9hZGFwdGVkL2VqYi9TZnVsRGVsZWdhdGVCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV9hZGFwdGVkL2VqYi9TZnVsRGVsZWdhdGVCZWFuLmphdmEKQEAgLTQzLDcgKzQzLDcgQEAKICAgICBwdWJsaWMgRW50aXR5TWFuYWdlciBnZXRFTSgpIHsKICAgICAgICAgcmV0dXJuIGV4dGVuZGVkRU07CiAgICAgfQotICAgIAorCiAgICAgQEluaXQKICAgICBwdWJsaWMgdm9pZCBjcmVhdGVEZWxlZ2F0ZShTdHJpbmcgbmFtZSwgU3RyaW5nIGRhdGEpIHsKICAgICB9CkBAIC01NSw3ICs1NSw3IEBACiAgICAgcHVibGljIFBlcnNvbiBjcmVhdGVQZXJzb24oU3RyaW5nIG5hbWUsIFN0cmluZyBkYXRhKSB7CiAKICAgICAgICAgUGVyc29uIHBlcnNvbiA9IG5ldyBQZXJzb24obmFtZSwgZGF0YSk7Ci0gICAgICAgIAorCiAgICAgICAgIGV4dGVuZGVkRU0ucGVyc2lzdChwZXJzb24pOwogICAgICAgICByZXR1cm4gcGVyc29uOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fYWRhcHRlZC9zcWwvY3JlYXRlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fYWRhcHRlZC9zcWwvY3JlYXRlLnNxbAppbmRleCA2MTg0MmYxLi44NWE4ZGIwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtX2FkYXB0ZWQvc3FsL2NyZWF0ZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV9hZGFwdGVkL3NxbC9jcmVhdGUuc3FsCkBAIC0xLDQgKzEsNCBAQAotQ1JFQVRFIFRBQkxFIEVKQjMwX1BFUlNJU1RFTkNFX0VFTV9BREFQVEVEX1BFUlNPTiAoDQotICAgIE5BTUUgVkFSQ0hBUigyNTYpIE5PVCBOVUxMIFBSSU1BUlkgS0VZLA0KLSAgICBEQVRBIFZBUkNIQVIoMjU2KQ0KLSk7DQorQ1JFQVRFIFRBQkxFIEVKQjMwX1BFUlNJU1RFTkNFX0VFTV9BREFQVEVEX1BFUlNPTiAoCisgICAgTkFNRSBWQVJDSEFSKDI1NikgTk9UIE5VTEwgUFJJTUFSWSBLRVksCisgICAgREFUQSBWQVJDSEFSKDI1NikKKyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtX2FkYXB0ZWQvc3FsL2Ryb3Auc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV9hZGFwdGVkL3NxbC9kcm9wLnNxbAppbmRleCBmZGM5MTI4Li43NjlkZDM4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtX2FkYXB0ZWQvc3FsL2Ryb3Auc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1fYWRhcHRlZC9zcWwvZHJvcC5zcWwKQEAgLTEgKzEgQEAKLURST1AgVEFCTEUgRUpCMzBfUEVSU0lTVEVOQ0VfRUVNX0FEQVBURURfUEVSU09OOw0KK0RST1AgVEFCTEUgRUpCMzBfUEVSU0lTVEVOQ0VfRUVNX0FEQVBURURfUEVSU09OOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV9pbmplY3Rpb24vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1faW5qZWN0aW9uL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMzhlZWE2OS4uNmVmYjMxZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV9pbmplY3Rpb24vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtX2luamVjdGlvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lamIzMC1wZXJzaXN0ZW5jZS1lZW1faW5qZWN0aW9uIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InNpbXBsZS5jbGllbnQiIHZhbHVlPSJjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmhlbGxvLnNlc3Npb24uY2xpZW50LlN0YW5kYWxvbmVDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgdmFsdWU9IkNsaWVudCIvPgpAQCAtMjYsMTAgKzI2LDEwIEBACiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtX2luamVjdGlvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtX2luamVjdGlvbi9idWlsZC54bWwKaW5kZXggZmU3YzYzNy4uNTIwOWI4NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV9pbmplY3Rpb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1faW5qZWN0aW9uL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNTgsMTcgKzU4LDE3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9L2xpYiIvPgotICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vbGliLyR7YXBwbmFtZX0tbGliLmphciIgCisgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS9saWIvJHthcHBuYW1lfS1saWIuamFyIgogICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgogICAgICAgICAgICAgIGluY2x1ZGVzPSIqKi9QZXJzb24uY2xhc3MiPgotICAgICAgICA8L2phcj4gICAgICAgIAorICAgICAgICA8L2phcj4KICAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9L2xpYi8ke2FwcG5hbWV9LXBhcjEuamFyIj4KICAgICAgICAgICAgICA8bWV0YWluZiBmaWxlPSJkZXNjcmlwdG9yL3BlcnNpc3RlbmNlLnhtbCIvPgogICAgICAgICA8L2phcj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9TZnVsKi5jbGFzcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0NsaWVudC5jbGFzcywqKi9TZnVsLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIiB1cGRhdGU9InllcyIKQEAgLTc2LDkgKzc2LDkgQEAKICAgICAgICAgICAgICBpbmNsdWRlcz0ibGliLyR7YXBwbmFtZX0tbGliLmphciwgbGliLyR7YXBwbmFtZX0tcGFyMS5qYXIiPgogICAgICAgICA8L2phcj4KIAotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC04NiwxMCArODYsMTAgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV9pbmplY3Rpb24vY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV9pbmplY3Rpb24vY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGVhZTUwZTcuLmJlZGI1NzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1faW5qZWN0aW9uL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtX2luamVjdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTUzLDE0ICs1MywxNCBAQAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKIAogICAgICAgICB0cnkgewotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSSBhbSBpbiBjbGllbnQiKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY2FsbGluZyBjcmVhdGVQZXJzb24oIiArIHBlcnNvbk5hbWUgKyAiKSIpOwogICAgICAgICAgICAgc2Z1bC5zZXROYW1lKHBlcnNvbk5hbWUpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjcmVhdGVkICIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIE1hcDxTdHJpbmcsIEJvb2xlYW4+IG1hcCA9IHNmdWwuZG9UZXN0cygpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIEl0ZXJhdG9yPFN0cmluZz4gaXRlciA9IG1hcC5rZXlTZXQoKS5pdGVyYXRvcigpOwogICAgICAgICAgICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgU3RyaW5nIHRlc3ROYW1lID0gaXRlci5uZXh0KCk7CkBAIC03Myw3ICs3Myw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIgLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLSAgICAJcmV0dXJuOworICAgICAgICByZXR1cm47CiAgICAgfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1faW5qZWN0aW9uL2VqYi9QZXJzb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1faW5qZWN0aW9uL2VqYi9QZXJzb24uamF2YQppbmRleCA2ODNmNWEzLi42YTk1Zjg0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtX2luamVjdGlvbi9lamIvUGVyc29uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV9pbmplY3Rpb24vZWpiL1BlcnNvbi5qYXZhCkBAIC00NSw3ICs0NSw3IEBACiAgICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7CiAgICAgfQogCi0gICAgQE92ZXJyaWRlIAorICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICAgICAgIHJldHVybiAiUGVyc29uOiAobmFtZT0iICsgbmFtZSArICI7IGRhdGE9ICIgKyBkYXRhICsgIikiOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1faW5qZWN0aW9uL2VqYi9TZnVsQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV9pbmplY3Rpb24vZWpiL1NmdWxCZWFuLmphdmEKaW5kZXggOGVlZjk4Ni4uYTA4ZTljMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV9pbmplY3Rpb24vZWpiL1NmdWxCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV9pbmplY3Rpb24vZWpiL1NmdWxCZWFuLmphdmEKQEAgLTM0LDI1ICszNCwyNSBAQAogaW1wb3J0IGpha2FydGEuZWpiLkVKQkV4Y2VwdGlvbjsKIAogQFN0YXRlZnVsCi1ARUpCKG5hbWU9ImVqYi9TZnVsQmVhbiIsIAorQEVKQihuYW1lPSJlamIvU2Z1bEJlYW4iLAogICAgICAgICBiZWFuSW50ZXJmYWNlPWNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAucGVyc2lzdGVuY2UuZWVtX2luamVjdGlvbi5TZnVsRGVsZWdhdGUuY2xhc3MpCiAKIHB1YmxpYyBjbGFzcyBTZnVsQmVhbgogICAgIGltcGxlbWVudHMgU2Z1bCB7CiAKICAgICBwcml2YXRlIFN0cmluZyBuYW1lOwotICAgIAorCiAgICAgcHJpdmF0ZSBARUpCIFNmdWxEZWxlZ2F0ZSBkZWxlZ2F0ZTsKLSAgICAKKwogICAgIHByaXZhdGUgQFBlcnNpc3RlbmNlQ29udGV4dCh1bml0TmFtZT0ibGliL2VqYi1lamIzMC1wZXJzaXN0ZW5jZS1lZW1faW5qZWN0aW9uLXBhcjEuamFyI2VtIiwKLSAgICAgICAgICAgICAgICB0eXBlPVBlcnNpc3RlbmNlQ29udGV4dFR5cGUuRVhURU5ERUQpIAorICAgICAgICAgICAgICAgIHR5cGU9UGVyc2lzdGVuY2VDb250ZXh0VHlwZS5FWFRFTkRFRCkKICAgICAgICAgICAgIEVudGl0eU1hbmFnZXIgZXh0ZW5kZWRFTTsKLSAKKwogICAgIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFN0cmluZyBsb29rdXBOYW1lID0gImphdmE6Y29tcC9lbnYvZWpiL1NmdWxCZWFuIjsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBJbml0aWFsQ29udGV4dCBpbml0Q3R4ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBkZWxlZ2F0ZSA9IChTZnVsRGVsZWdhdGUpIGluaXRDdHgubG9va3VwKGxvb2t1cE5hbWUpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTYyLDcgKzYyLDcgQEAKIAogICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBCb29sZWFuPiBkb1Rlc3RzKCkgewogICAgICAgICBQZXJzb24gcGVyc29uID0gbmV3IFBlcnNvbihuYW1lKTsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIGRlbGVnYXRlTmFtZSA9ICJkZWxnbmFtZV8iICsgbmFtZTsKICAgICAgICAgU3RyaW5nIGRlbGVnYXRlRGF0YT0gImRlbGdkYXRhOiAiICsgbmFtZTsKICAgICAgICAgZGVsZWdhdGUuY3JlYXRlKGRlbGVnYXRlTmFtZSwgZGVsZWdhdGVEYXRhKTsKQEAgLTcxLDExICs3MSwxMSBAQAogCiAgICAgICAgIGV4dGVuZGVkRU0ucGVyc2lzdChwZXJzb24pOwogICAgICAgICBQZXJzb24gZm91bmRQZXJzb24gPSBkZWxlZ2F0ZS5maW5kKG5hbWUpOwotICAgICAgICAKKwogICAgICAgICBib29sZWFuIGRlbGVnYXRlUmVtb3ZlZE1lID0gZGVsZWdhdGUucmVtb3ZlKG5hbWUpOwotICAgICAgICAKKwogICAgICAgICBib29sZWFuIHJlbW92ZWREZWxlZ2F0ZSA9IHJlbW92ZVBlcnNvbihkZWxlZ2F0ZU5hbWUpOwotICAgICAgICAKKwogICAgICAgICBNYXA8U3RyaW5nLCBCb29sZWFuPiBtYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIEJvb2xlYW4+KCk7CiAgICAgICAgIG1hcC5wdXQoImZpbmREZWxlZ2F0ZUNyZWF0ZWRQZXJzb24iLCAoZFBlcnNvbiAhPSBudWxsKSk7CiAgICAgICAgIG1hcC5wdXQoImRlbGVnYXRlRm91bmRNZSIsIChmb3VuZFBlcnNvbiAhPSBudWxsKSk7CkBAIC0xMDMsNSArMTAzLDUgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVtb3ZlZDsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1faW5qZWN0aW9uL2VqYi9TZnVsRGVsZWdhdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1faW5qZWN0aW9uL2VqYi9TZnVsRGVsZWdhdGUuamF2YQppbmRleCA1YjcyYzczLi42NzI4ZjhlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtX2luamVjdGlvbi9lamIvU2Z1bERlbGVnYXRlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV9pbmplY3Rpb24vZWpiL1NmdWxEZWxlZ2F0ZS5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAgICAgUGVyc29uIGZpbmQoU3RyaW5nIG5hbWUpOwogCiAgICAgYm9vbGVhbiByZW1vdmUoU3RyaW5nIG5hbWUpOwotICAgIAorCiAgICAgRW50aXR5TWFuYWdlciBnZXRFTSgpOwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtX2luamVjdGlvbi9lamIvU2Z1bERlbGVnYXRlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV9pbmplY3Rpb24vZWpiL1NmdWxEZWxlZ2F0ZUJlYW4uamF2YQppbmRleCA1MmY5MjBjLi5mNDkwYTE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtX2luamVjdGlvbi9lamIvU2Z1bERlbGVnYXRlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1faW5qZWN0aW9uL2VqYi9TZnVsRGVsZWdhdGVCZWFuLmphdmEKQEAgLTM3LDEyICszNywxMiBAQAogICAgIHB1YmxpYyBFbnRpdHlNYW5hZ2VyIGdldEVNKCkgewogICAgICAgICByZXR1cm4gZXh0ZW5kZWRFTTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgUGVyc29uIGNyZWF0ZShTdHJpbmcgbmFtZSwgU3RyaW5nIGRhdGEpIHsKIAogICAgICAgICBQZXJzb24gcCA9IG5ldyBQZXJzb24obmFtZSk7CiAgICAgICAgIHAuc2V0RGF0YShkYXRhKTsKLSAgICAgICAgCisKICAgICAgICAgZXh0ZW5kZWRFTS5wZXJzaXN0KHApOwogICAgICAgICByZXR1cm4gcDsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtX2luamVjdGlvbi9zcWwvY3JlYXRlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1faW5qZWN0aW9uL3NxbC9jcmVhdGUuc3FsCmluZGV4IGZhNjA3NDIuLmMwYWI0M2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1faW5qZWN0aW9uL3NxbC9jcmVhdGUuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1faW5qZWN0aW9uL3NxbC9jcmVhdGUuc3FsCkBAIC0xLDQgKzEsNCBAQAotQ1JFQVRFIFRBQkxFIEVKQjMwX1BFUlNJU1RFTkNFX0VFTV9JTkpFQ1RJT05fUEVSU09OICgNCi0gICAgTkFNRSBWQVJDSEFSKDI1NikgTk9UIE5VTEwgUFJJTUFSWSBLRVksDQotICAgIERBVEEgVkFSQ0hBUigyNTYpDQotKTsNCitDUkVBVEUgVEFCTEUgRUpCMzBfUEVSU0lTVEVOQ0VfRUVNX0lOSkVDVElPTl9QRVJTT04gKAorICAgIE5BTUUgVkFSQ0hBUigyNTYpIE5PVCBOVUxMIFBSSU1BUlkgS0VZLAorICAgIERBVEEgVkFSQ0hBUigyNTYpCispOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV9pbmplY3Rpb24vc3FsL2Ryb3Auc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbV9pbmplY3Rpb24vc3FsL2Ryb3Auc3FsCmluZGV4IDVlYjEzNmYuLmQwMTJjNjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1faW5qZWN0aW9uL3NxbC9kcm9wLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtX2luamVjdGlvbi9zcWwvZHJvcC5zcWwKQEAgLTEgKzEgQEAKLURST1AgVEFCTEUgRUpCMzBfUEVSU0lTVEVOQ0VfRUVNX0lOSkVDVElPTl9QRVJTT047DQorRFJPUCBUQUJMRSBFSkIzMF9QRVJTSVNURU5DRV9FRU1fSU5KRUNUSU9OX1BFUlNPTjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1wYXNzaXZhdGlvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXBhc3NpdmF0aW9uL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggY2MzOGViZS4uYjcyYTc5MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXBhc3NpdmF0aW9uL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXBhc3NpdmF0aW9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMwLXBlcnNpc3RlbmNlLWVlbXBhc3NpdmF0aW9uIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InNpbXBsZS5jbGllbnQiIHZhbHVlPSJjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLmhlbGxvLnNlc3Npb24uY2xpZW50LlN0YW5kYWxvbmVDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgdmFsdWU9IkNsaWVudCIvPgpAQCAtMjYsMTAgKzI2LDEwIEBACiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtcGFzc2l2YXRpb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXBhc3NpdmF0aW9uL2J1aWxkLnhtbAppbmRleCA4ZWQ0NDA2Li40NTc3NGEzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtcGFzc2l2YXRpb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1wYXNzaXZhdGlvbi9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTU4LDE3ICs1OCwxNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfS9saWIiLz4KLSAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9L2xpYi8ke2FwcG5hbWV9LWxpYi5qYXIiIAorICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vbGliLyR7YXBwbmFtZX0tbGliLmphciIKICAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgICBpbmNsdWRlcz0iKiovUGVyc29uLmNsYXNzIj4KLSAgICAgICAgPC9qYXI+ICAgICAgICAKKyAgICAgICAgPC9qYXI+CiAgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS9saWIvJHthcHBuYW1lfS1wYXIxLmphciI+CiAgICAgICAgICAgICAgPG1ldGFpbmYgZmlsZT0iZGVzY3JpcHRvci9wZXJzaXN0ZW5jZS54bWwiLz4KICAgICAgICAgPC9qYXI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovU2Z1bCouY2xhc3MsKiovU2xlc3MqLmNsYXNzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovQ2xpZW50LmNsYXNzLCoqL1NmdWwuY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiIHVwZGF0ZT0ieWVzIgpAQCAtNzYsOSArNzYsOSBAQAogICAgICAgICAgICAgIGluY2x1ZGVzPSJsaWIvJHthcHBuYW1lfS1saWIuamFyLCBsaWIvJHthcHBuYW1lfS1wYXIxLmphciI+CiAgICAgICAgIDwvamFyPgogCi0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTg2LDEwICs4NiwxMCBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtcGFzc2l2YXRpb24vZWpiL3NyYy9jb20vc3VuL3MxYXNkZXYvZWpiMzAvZWVtcGFzc2l2YXRpb24vU2Z1bC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXBhc3NpdmF0aW9uL2VqYi9zcmMvY29tL3N1bi9zMWFzZGV2L2VqYjMwL2VlbXBhc3NpdmF0aW9uL1NmdWwuamF2YQppbmRleCA3YWU0NDgyLi5kMDBiYmNiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtcGFzc2l2YXRpb24vZWpiL3NyYy9jb20vc3VuL3MxYXNkZXYvZWpiMzAvZWVtcGFzc2l2YXRpb24vU2Z1bC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1wYXNzaXZhdGlvbi9lamIvc3JjL2NvbS9zdW4vczFhc2Rldi9lamIzMC9lZW1wYXNzaXZhdGlvbi9TZnVsLmphdmEKQEAgLTI2LDcgKzI2LDcgQEAKICAgICB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpOwogCiAgICAgTWFwPFN0cmluZywgQm9vbGVhbj4gZG9UZXN0cyhTdHJpbmcgcHJlZml4KTsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGNyZWF0ZVNmdWxEZWxlZ2F0ZXMoKTsKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXBhc3NpdmF0aW9uL2VqYi9zcmMvY29tL3N1bi9zMWFzZGV2L2VqYjMwL2VlbXBhc3NpdmF0aW9uL1NmdWxCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtcGFzc2l2YXRpb24vZWpiL3NyYy9jb20vc3VuL3MxYXNkZXYvZWpiMzAvZWVtcGFzc2l2YXRpb24vU2Z1bEJlYW4uamF2YQppbmRleCA0M2VjYTkwLi5hZTk2MjA1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtcGFzc2l2YXRpb24vZWpiL3NyYy9jb20vc3VuL3MxYXNkZXYvZWpiMzAvZWVtcGFzc2l2YXRpb24vU2Z1bEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtcGFzc2l2YXRpb24vZWpiL3NyYy9jb20vc3VuL3MxYXNkZXYvZWpiMzAvZWVtcGFzc2l2YXRpb24vU2Z1bEJlYW4uamF2YQpAQCAtNTAsNyArNTAsNyBAQAogICAgICAgICAgICAgU3RyaW5nIGxvb2t1cE5hbWUgPSAiamF2YTpjb21wL2Vudi9lamIvU2Z1bEJlYW4iOwogICAgICAgICAgICAgSW5pdGlhbENvbnRleHQgaW5pdEN0eCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgZGVsZWdhdGUgPSAoU2Z1bERlbGVnYXRlKSBpbml0Q3R4Lmxvb2t1cChsb29rdXBOYW1lKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqRUVNIERlbGVnYXRlOiAiICsgZXh0ZW5kZWRFTS5nZXREZWxlZ2F0ZSgpLmdldENsYXNzKCkuZ2V0TmFtZSgpKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4KTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1wYXNzaXZhdGlvbi9lamIvc3JjL2NvbS9zdW4vczFhc2Rldi9lamIzMC9lZW1wYXNzaXZhdGlvbi9TZnVsRGVsZWdhdGVCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtcGFzc2l2YXRpb24vZWpiL3NyYy9jb20vc3VuL3MxYXNkZXYvZWpiMzAvZWVtcGFzc2l2YXRpb24vU2Z1bERlbGVnYXRlQmVhbi5qYXZhCmluZGV4IDg3NjZlYzkuLmU2Njk2YWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1wYXNzaXZhdGlvbi9lamIvc3JjL2NvbS9zdW4vczFhc2Rldi9lamIzMC9lZW1wYXNzaXZhdGlvbi9TZnVsRGVsZWdhdGVCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXBhc3NpdmF0aW9uL2VqYi9zcmMvY29tL3N1bi9zMWFzZGV2L2VqYjMwL2VlbXBhc3NpdmF0aW9uL1NmdWxEZWxlZ2F0ZUJlYW4uamF2YQpAQCAtOTMsNyArOTMsNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqZWpiUEFTU0lWQVRFKCkgY2FsbGVkLi4uIik7CiAgICAgICAgIHBhc3NpdmF0aW9uQ291bnQrKzsKICAgICB9Ci0gICAgCisKICAgICBAUG9zdEFjdGl2YXRlCiAgICAgcHVibGljIHZvaWQgcG9zdEFjdGl2YXRlKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqZWpiQWN0aXZhdGUoKSBjYWxsZWQuLi4iKTsKQEAgLTEwMyw3ICsxMDMsNyBAQAogICAgIHB1YmxpYyBpbnQgZ2V0UGFzc2l2YXRpb25Db3VudCgpIHsKICAgICAgICAgcmV0dXJuIHBhc3NpdmF0aW9uQ291bnQ7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGludCBnZXRBY3RpdmF0aW9uQ291bnQoKSB7CiAgICAgICAgIHJldHVybiBhY3RpdmF0ZUNvdW50OwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1wYXNzaXZhdGlvbi9zcWwvY3JlYXRlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1wYXNzaXZhdGlvbi9zcWwvY3JlYXRlLnNxbAppbmRleCA3OTg1MzQwLi4wYmI2YmJkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtcGFzc2l2YXRpb24vc3FsL2NyZWF0ZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXBhc3NpdmF0aW9uL3NxbC9jcmVhdGUuc3FsCkBAIC0xLDQgKzEsNCBAQAotQ1JFQVRFIFRBQkxFIEVKQjMwX1BFUlNJU1RFTkNFX0VFTVBBU1NJVkFUSU9OX1BFUlNPTiAoDQotICAgIE5BTUUgVkFSQ0hBUigyNTYpIE5PVCBOVUxMIFBSSU1BUlkgS0VZLA0KLSAgICBEQVRBIFZBUkNIQVIoMjU2KQ0KLSk7DQorQ1JFQVRFIFRBQkxFIEVKQjMwX1BFUlNJU1RFTkNFX0VFTVBBU1NJVkFUSU9OX1BFUlNPTiAoCisgICAgTkFNRSBWQVJDSEFSKDI1NikgTk9UIE5VTEwgUFJJTUFSWSBLRVksCisgICAgREFUQSBWQVJDSEFSKDI1NikKKyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtcGFzc2l2YXRpb24vc3FsL2Ryb3Auc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXBhc3NpdmF0aW9uL3NxbC9kcm9wLnNxbAppbmRleCA2ZDhjNjdmLi4zNjY3NWVmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtcGFzc2l2YXRpb24vc3FsL2Ryb3Auc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1wYXNzaXZhdGlvbi9zcWwvZHJvcC5zcWwKQEAgLTEgKzEgQEAKLURST1AgVEFCTEUgRUpCMzBfUEVSU0lTVEVOQ0VfRUVNUEFTU0lWQVRJT05fUEVSU09OOw0KK0RST1AgVEFCTEUgRUpCMzBfUEVSU0lTVEVOQ0VfRUVNUEFTU0lWQVRJT05fUEVSU09OOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXByb3BhZ2F0aW9uL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtcHJvcGFnYXRpb24vYnVpbGQucHJvcGVydGllcwppbmRleCA5OGQ3OGNjLi4zZjc5MDc5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtcHJvcGFnYXRpb24vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtcHJvcGFnYXRpb24vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzAtcGVyc2lzdGVuY2UtZWVtcHJvcGFnYXRpb24iLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic2ltcGxlLmNsaWVudCIgdmFsdWU9ImNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaGVsbG8uc2Vzc2lvbi5jbGllbnQuU3RhbmRhbG9uZUNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CkBAIC0yNiwxMCArMjYsMTAgQEAKIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1wcm9wYWdhdGlvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtcHJvcGFnYXRpb24vYnVpbGQueG1sCmluZGV4IDY5YmUzN2MuLmVmYmRmNWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1wcm9wYWdhdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXByb3BhZ2F0aW9uL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNTgsMTcgKzU4LDE3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9L2xpYiIvPgotICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vbGliLyR7YXBwbmFtZX0tbGliLmphciIgCisgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS9saWIvJHthcHBuYW1lfS1saWIuamFyIgogICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgogICAgICAgICAgICAgIGluY2x1ZGVzPSIqKi9QZXJzb24uY2xhc3MiPgotICAgICAgICA8L2phcj4gICAgICAgIAorICAgICAgICA8L2phcj4KICAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9L2xpYi8ke2FwcG5hbWV9LXBhcjEuamFyIj4KICAgICAgICAgICAgICA8bWV0YWluZiBmaWxlPSJkZXNjcmlwdG9yL3BlcnNpc3RlbmNlLnhtbCIvPgogICAgICAgICA8L2phcj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9TZnVsKi5jbGFzcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0NsaWVudC5jbGFzcywqKi9TZnVsLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIiB1cGRhdGU9InllcyIKQEAgLTc2LDkgKzc2LDkgQEAKICAgICAgICAgICAgICBpbmNsdWRlcz0ibGliLyR7YXBwbmFtZX0tbGliLmphciwgbGliLyR7YXBwbmFtZX0tcGFyMS5qYXIiPgogICAgICAgICA8L2phcj4KIAotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC04NiwxMCArODYsMTAgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXByb3BhZ2F0aW9uL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1wcm9wYWdhdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMzM1YTYyMy4uYzcwNmQxOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXByb3BhZ2F0aW9uL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtcHJvcGFnYXRpb24vY2xpZW50L0NsaWVudC5qYXZhCkBAIC01MywxNCArNTMsMTQgQEAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkkgYW0gaW4gY2xpZW50Iik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNhbGxpbmcgY3JlYXRlUGVyc29uKCIgKyBwZXJzb25OYW1lICsgIikiKTsKICAgICAgICAgICAgIHNmdWwuc2V0TmFtZShwZXJzb25OYW1lKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY3JlYXRlZCAiKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBNYXA8U3RyaW5nLCBCb29sZWFuPiBtYXAgPSBzZnVsLmRvVGVzdHMoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBJdGVyYXRvcjxTdHJpbmc+IGl0ZXIgPSBtYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsKICAgICAgICAgICAgIHdoaWxlIChpdGVyLmhhc05leHQoKSkgewogICAgICAgICAgICAgICAgIFN0cmluZyB0ZXN0TmFtZSA9IGl0ZXIubmV4dCgpOwpAQCAtNzMsNyArNzMsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iICwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0gICAgCXJldHVybjsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtcHJvcGFnYXRpb24vZWpiL1BlcnNvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXByb3BhZ2F0aW9uL2VqYi9QZXJzb24uamF2YQppbmRleCA0YzE2NmQ1Li4yYTBlZmYyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtcHJvcGFnYXRpb24vZWpiL1BlcnNvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1wcm9wYWdhdGlvbi9lamIvUGVyc29uLmphdmEKQEAgLTQyLDcgKzQyLDcgQEAKICAgICAgICAgdGhpcy5kYXRhID0gZGF0YTsKICAgICB9CiAKLSAgICBAT3ZlcnJpZGUgCisgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKICAgICAgICAgcmV0dXJuICJQZXJzb246IChuYW1lPSIgKyBuYW1lICsgIjsgZGF0YT0gIiArIGRhdGEgKyAiKSI7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXByb3BhZ2F0aW9uL2VqYi9TZnVsQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXByb3BhZ2F0aW9uL2VqYi9TZnVsQmVhbi5qYXZhCmluZGV4IDA2ZTJjYjUuLjlhZDE2ZTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1wcm9wYWdhdGlvbi9lamIvU2Z1bEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtcHJvcGFnYXRpb24vZWpiL1NmdWxCZWFuLmphdmEKQEAgLTM0LDI3ICszNCwyNyBAQAogaW1wb3J0IGpha2FydGEuZWpiLkVKQkV4Y2VwdGlvbjsKIAogQFN0YXRlZnVsCi1ARUpCKG5hbWU9ImVqYi9TZnVsQmVhbiIsIAorQEVKQihuYW1lPSJlamIvU2Z1bEJlYW4iLAogICAgICAgICBiZWFuSW50ZXJmYWNlPWNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAucGVyc2lzdGVuY2UuZWVtcHJvcGFnYXRpb24uU2Z1bERlbGVnYXRlLmNsYXNzKQogCiBwdWJsaWMgY2xhc3MgU2Z1bEJlYW4KICAgICBpbXBsZW1lbnRzIFNmdWwgewogCiAgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKLSAgICAKKwogICAgIC8vcHJpdmF0ZSBARUpCIFNmdWxEZWxlZ2F0ZSBkZWxlZ2F0ZTsKLSAgICAKKwogICAgIHByaXZhdGUgQFBlcnNpc3RlbmNlQ29udGV4dCh1bml0TmFtZT0ibGliL2VqYi1lamIzMC1wZXJzaXN0ZW5jZS1lZW1wcm9wYWdhdGlvbi1wYXIxLmphciNlbSIsCi0gICAgICAgICAgICAgICAgdHlwZT1QZXJzaXN0ZW5jZUNvbnRleHRUeXBlLkVYVEVOREVEKSAKKyAgICAgICAgICAgICAgICB0eXBlPVBlcnNpc3RlbmNlQ29udGV4dFR5cGUuRVhURU5ERUQpCiAgICAgICAgICAgICBFbnRpdHlNYW5hZ2VyIGV4dGVuZGVkRU07Ci0gCisKICAgICBwcml2YXRlIFNmdWxEZWxlZ2F0ZSBkZWxlZ2F0ZTsKIAogICAgIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFN0cmluZyBsb29rdXBOYW1lID0gImphdmE6Y29tcC9lbnYvZWpiL1NmdWxCZWFuIjsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBJbml0aWFsQ29udGV4dCBpbml0Q3R4ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBkZWxlZ2F0ZSA9IChTZnVsRGVsZWdhdGUpIGluaXRDdHgubG9va3VwKGxvb2t1cE5hbWUpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTY0LDcgKzY0LDcgQEAKIAogICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBCb29sZWFuPiBkb1Rlc3RzKCkgewogICAgICAgICBQZXJzb24gcGVyc29uID0gbmV3IFBlcnNvbihuYW1lKTsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIGRlbGVnYXRlTmFtZSA9ICJkZWxnbmFtZV8iICsgbmFtZTsKICAgICAgICAgU3RyaW5nIGRlbGVnYXRlRGF0YT0gImRlbGdkYXRhOiAiICsgbmFtZTsKICAgICAgICAgZGVsZWdhdGUuY3JlYXRlKGRlbGVnYXRlTmFtZSwgZGVsZWdhdGVEYXRhKTsKQEAgLTczLDExICs3MywxMSBAQAogCiAgICAgICAgIGV4dGVuZGVkRU0ucGVyc2lzdChwZXJzb24pOwogICAgICAgICBQZXJzb24gZm91bmRQZXJzb24gPSBkZWxlZ2F0ZS5maW5kKG5hbWUpOwotICAgICAgICAKKwogICAgICAgICBib29sZWFuIGRlbGVnYXRlUmVtb3ZlZE1lID0gZGVsZWdhdGUucmVtb3ZlKG5hbWUpOwotICAgICAgICAKKwogICAgICAgICBib29sZWFuIHJlbW92ZWREZWxlZ2F0ZSA9IHJlbW92ZVBlcnNvbihkZWxlZ2F0ZU5hbWUpOwotICAgICAgICAKKwogICAgICAgICBNYXA8U3RyaW5nLCBCb29sZWFuPiBtYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIEJvb2xlYW4+KCk7CiAgICAgICAgIG1hcC5wdXQoImZpbmREZWxlZ2F0ZUNyZWF0ZWRQZXJzb24iLCAoZFBlcnNvbiAhPSBudWxsKSk7CiAgICAgICAgIG1hcC5wdXQoImRlbGVnYXRlRm91bmRNZSIsIChmb3VuZFBlcnNvbiAhPSBudWxsKSk7CkBAIC0xMDUsNSArMTA1LDUgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVtb3ZlZDsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1wcm9wYWdhdGlvbi9lamIvU2Z1bERlbGVnYXRlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtcHJvcGFnYXRpb24vZWpiL1NmdWxEZWxlZ2F0ZS5qYXZhCmluZGV4IGUzMjkyYWMuLmM2MmYzMzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1wcm9wYWdhdGlvbi9lamIvU2Z1bERlbGVnYXRlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXByb3BhZ2F0aW9uL2VqYi9TZnVsRGVsZWdhdGUuamF2YQpAQCAtMjgsNyArMjgsNyBAQAogICAgIFBlcnNvbiBmaW5kKFN0cmluZyBuYW1lKTsKIAogICAgIGJvb2xlYW4gcmVtb3ZlKFN0cmluZyBuYW1lKTsKLSAgICAKKwogICAgIEVudGl0eU1hbmFnZXIgZ2V0RU0oKTsKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXByb3BhZ2F0aW9uL2VqYi9TZnVsRGVsZWdhdGVCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtcHJvcGFnYXRpb24vZWpiL1NmdWxEZWxlZ2F0ZUJlYW4uamF2YQppbmRleCBhNDk1ZTk4Li5jNGE3ZGUyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtcHJvcGFnYXRpb24vZWpiL1NmdWxEZWxlZ2F0ZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtcHJvcGFnYXRpb24vZWpiL1NmdWxEZWxlZ2F0ZUJlYW4uamF2YQpAQCAtMzcsMTEgKzM3LDExIEBACiAgICAgcHVibGljIEVudGl0eU1hbmFnZXIgZ2V0RU0oKSB7CiAgICAgICAgIHJldHVybiBleHRlbmRlZEVNOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBQZXJzb24gY3JlYXRlKFN0cmluZyBuYW1lLCBTdHJpbmcgZGF0YSkgewogCiAgICAgICAgIFBlcnNvbiBwID0gbmV3IFBlcnNvbihuYW1lLCBkYXRhKTsKLSAgICAgICAgCisKICAgICAgICAgZXh0ZW5kZWRFTS5wZXJzaXN0KHApOwogICAgICAgICByZXR1cm4gcDsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtcHJvcGFnYXRpb24vc3FsL2NyZWF0ZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtcHJvcGFnYXRpb24vc3FsL2NyZWF0ZS5zcWwKaW5kZXggNmY3YTA1OS4uZmFmZDVlYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXByb3BhZ2F0aW9uL3NxbC9jcmVhdGUuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1wcm9wYWdhdGlvbi9zcWwvY3JlYXRlLnNxbApAQCAtMSw0ICsxLDQgQEAKLUNSRUFURSBUQUJMRSBFSkIzMF9QRVJTSVNURU5DRV9FRU1QUk9QQUdBVElPTl9QRVJTT04gKA0KLSAgICBOQU1FIFZBUkNIQVIoMjU2KSBOT1QgTlVMTCBQUklNQVJZIEtFWSwNCi0gICAgREFUQSBWQVJDSEFSKDI1NikNCi0pOw0KK0NSRUFURSBUQUJMRSBFSkIzMF9QRVJTSVNURU5DRV9FRU1QUk9QQUdBVElPTl9QRVJTT04gKAorICAgIE5BTUUgVkFSQ0hBUigyNTYpIE5PVCBOVUxMIFBSSU1BUlkgS0VZLAorICAgIERBVEEgVkFSQ0hBUigyNTYpCispOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXByb3BhZ2F0aW9uL3NxbC9kcm9wLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1wcm9wYWdhdGlvbi9zcWwvZHJvcC5zcWwKaW5kZXggZTQ0M2MzZS4uNDE5Y2E2MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXByb3BhZ2F0aW9uL3NxbC9kcm9wLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtcHJvcGFnYXRpb24vc3FsL2Ryb3Auc3FsCkBAIC0xICsxIEBACi1EUk9QIFRBQkxFIEVKQjMwX1BFUlNJU1RFTkNFX0VFTVBST1BBR0FUSU9OX1BFUlNPTjsNCitEUk9QIFRBQkxFIEVKQjMwX1BFUlNJU1RFTkNFX0VFTVBST1BBR0FUSU9OX1BFUlNPTjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1zZnNicGFzc2l2YXRpb24vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1zZnNicGFzc2l2YXRpb24vYnVpbGQucHJvcGVydGllcwppbmRleCBiNzY4M2RmLi5jMTQzZjJjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtc2ZzYnBhc3NpdmF0aW9uL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXNmc2JwYXNzaXZhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lamIzMC1wZXJzaXN0ZW5jZS1lZW1zZnNicGFzc2l2YXRpb24iLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic2ltcGxlLmNsaWVudCIgdmFsdWU9ImNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuaGVsbG8uc2Vzc2lvbi5jbGllbnQuU3RhbmRhbG9uZUNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CkBAIC0yNiwxMCArMjYsMTAgQEAKIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1zZnNicGFzc2l2YXRpb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXNmc2JwYXNzaXZhdGlvbi9idWlsZC54bWwKaW5kZXggMjdiYTcxNS4uZWFmM2I2NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXNmc2JwYXNzaXZhdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXNmc2JwYXNzaXZhdGlvbi9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTU4LDE3ICs1OCwxNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfS9saWIiLz4KLSAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9L2xpYi8ke2FwcG5hbWV9LWxpYi5qYXIiIAorICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vbGliLyR7YXBwbmFtZX0tbGliLmphciIKICAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgICBpbmNsdWRlcz0iKiovUGVyc29uLmNsYXNzIj4KLSAgICAgICAgPC9qYXI+ICAgICAgICAKKyAgICAgICAgPC9qYXI+CiAgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS9saWIvJHthcHBuYW1lfS1wYXIxLmphciI+CiAgICAgICAgICAgICAgPG1ldGFpbmYgZmlsZT0iZGVzY3JpcHRvci9wZXJzaXN0ZW5jZS54bWwiLz4KICAgICAgICAgPC9qYXI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovU2Z1bCouY2xhc3MiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9DbGllbnQuY2xhc3MsKiovU2Z1bC5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIgdXBkYXRlPSJ5ZXMiCkBAIC03Niw5ICs3Niw5IEBACiAgICAgICAgICAgICAgaW5jbHVkZXM9ImxpYi8ke2FwcG5hbWV9LWxpYi5qYXIsIGxpYi8ke2FwcG5hbWV9LXBhcjEuamFyIj4KICAgICAgICAgPC9qYXI+CiAKLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtODYsMTAgKzg2LDEwIEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1zZnNicGFzc2l2YXRpb24vZWpiL3NyYy9jb20vc3VuL3MxYXNkZXYvZWpiMzAvZWVtc2ZzYnBhc3NpdmF0aW9uL1NmdWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1zZnNicGFzc2l2YXRpb24vZWpiL3NyYy9jb20vc3VuL3MxYXNkZXYvZWpiMzAvZWVtc2ZzYnBhc3NpdmF0aW9uL1NmdWwuamF2YQppbmRleCAwNThiMjAzLi42MGRlMDA5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtc2ZzYnBhc3NpdmF0aW9uL2VqYi9zcmMvY29tL3N1bi9zMWFzZGV2L2VqYjMwL2VlbXNmc2JwYXNzaXZhdGlvbi9TZnVsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXNmc2JwYXNzaXZhdGlvbi9lamIvc3JjL2NvbS9zdW4vczFhc2Rldi9lamIzMC9lZW1zZnNicGFzc2l2YXRpb24vU2Z1bC5qYXZhCkBAIC0yNyw0ICsyNyw0IEBACiAKICAgICBNYXA8U3RyaW5nLCBCb29sZWFuPiBkb1Rlc3RzKFN0cmluZyBwcmVmaXgpOwogCi19IAorfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXNmc2JwYXNzaXZhdGlvbi9zcWwvY3JlYXRlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1zZnNicGFzc2l2YXRpb24vc3FsL2NyZWF0ZS5zcWwKaW5kZXggNzk4NTM0MC4uMGJiNmJiZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2VlbXNmc2JwYXNzaXZhdGlvbi9zcWwvY3JlYXRlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtc2ZzYnBhc3NpdmF0aW9uL3NxbC9jcmVhdGUuc3FsCkBAIC0xLDQgKzEsNCBAQAotQ1JFQVRFIFRBQkxFIEVKQjMwX1BFUlNJU1RFTkNFX0VFTVBBU1NJVkFUSU9OX1BFUlNPTiAoDQotICAgIE5BTUUgVkFSQ0hBUigyNTYpIE5PVCBOVUxMIFBSSU1BUlkgS0VZLA0KLSAgICBEQVRBIFZBUkNIQVIoMjU2KQ0KLSk7DQorQ1JFQVRFIFRBQkxFIEVKQjMwX1BFUlNJU1RFTkNFX0VFTVBBU1NJVkFUSU9OX1BFUlNPTiAoCisgICAgTkFNRSBWQVJDSEFSKDI1NikgTk9UIE5VTEwgUFJJTUFSWSBLRVksCisgICAgREFUQSBWQVJDSEFSKDI1NikKKyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZWVtc2ZzYnBhc3NpdmF0aW9uL3NxbC9kcm9wLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1zZnNicGFzc2l2YXRpb24vc3FsL2Ryb3Auc3FsCmluZGV4IDZkOGM2N2YuLjM2Njc1ZWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1zZnNicGFzc2l2YXRpb24vc3FsL2Ryb3Auc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9lZW1zZnNicGFzc2l2YXRpb24vc3FsL2Ryb3Auc3FsCkBAIC0xICsxIEBACi1EUk9QIFRBQkxFIEVKQjMwX1BFUlNJU1RFTkNFX0VFTVBBU1NJVkFUSU9OX1BFUlNPTjsNCitEUk9QIFRBQkxFIEVKQjMwX1BFUlNJU1RFTkNFX0VFTVBBU1NJVkFUSU9OX1BFUlNPTjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9leHRlbmRlZGVtL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZXh0ZW5kZWRlbS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGZjNjk4NjguLmMzNGU3M2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9leHRlbmRlZGVtL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2V4dGVuZGVkZW0vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzAtcGVyc2lzdGVuY2UtZXh0ZW5kZWRlbSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzaW1wbGUuY2xpZW50IiB2YWx1ZT0iY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMC5oZWxsby5zZXNzaW9uLmNsaWVudC5TdGFuZGFsb25lQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJDbGllbnQiLz4KQEAgLTI2LDEwICsyNiwxMCBAQAogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2V4dGVuZGVkZW0vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2V4dGVuZGVkZW0vYnVpbGQueG1sCmluZGV4IDQ5ZDBhODUuLmYwZTg5ZWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9leHRlbmRlZGVtL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZXh0ZW5kZWRlbS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTU4LDEwICs1OCwxMCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfS9saWIiLz4KLSAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9L2xpYi8ke2FwcG5hbWV9LWxpYi5qYXIiIAorICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vbGliLyR7YXBwbmFtZX0tbGliLmphciIKICAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgICBpbmNsdWRlcz0iKiovUGVyc29uLmNsYXNzIj4KLSAgICAgICAgPC9qYXI+ICAgICAgICAKKyAgICAgICAgPC9qYXI+CiAgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS9saWIvJHthcHBuYW1lfS1wYXIxLmphciI+CiAgICAgICAgICAgICAgPG1ldGFpbmYgZmlsZT0iZGVzY3JpcHRvci9wZXJzaXN0ZW5jZS54bWwiLz4KICAgICAgICAgPC9qYXI+CkBAIC02OSw5ICs2OSw5IEBACiAgICAgICAgICAgICAgPG1ldGFpbmYgZmlsZT0iZGVzY3JpcHRvci9wZXJzaXN0ZW5jZS54bWwiLz4KICAgICAgICAgPC9qYXI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovU2Z1bCouY2xhc3MiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9DbGllbnQuY2xhc3MsKiovU2Z1bC5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIgdXBkYXRlPSJ5ZXMiCkBAIC03OSw5ICs3OSw5IEBACiAgICAgICAgICAgICAgaW5jbHVkZXM9ImxpYi8ke2FwcG5hbWV9LWxpYi5qYXIsIGxpYi8ke2FwcG5hbWV9LXBhcjEuamFyLCBsaWIvJHthcHBuYW1lfS1wYXIzLmphciI+CiAgICAgICAgIDwvamFyPgogCi0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTg5LDEwICs4OSwxMCBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZXh0ZW5kZWRlbS9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZXh0ZW5kZWRlbS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggYTM5NTJiOC4uNjkxZmM0YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2V4dGVuZGVkZW0vY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9leHRlbmRlZGVtL2NsaWVudC9DbGllbnQuamF2YQpAQCAtODQsMTQgKzg0LDE0IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgc3RhdHVzTm9uVHhGaW5kUGVyc29uIiwgKHN0YXR1c05vblR4RmluZFBlcnNvbikgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIHN0YXR1c05vblR4RmluZFBlcnNvbjIiLCAoc3RhdHVzTm9uVHhGaW5kUGVyc29uMikgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIHN0YXR1c1JlbW92ZVBlcnNvbiIsIChzdGF0dXNSZW1vdmVQZXJzb24pID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKTsKLQkJCXN0YXQuYWRkU3RhdHVzKCJsb2NhbCBzdGF0dXNSZWZyZXNoUGVyc29uIiwgKHN0YXR1c1JlZnJlc2hQZXJzb24pID8gc3RhdC5GQUlMIDogc3RhdC5QQVNTKTsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBzdGF0dXNSZWZyZXNoUGVyc29uIiwgKHN0YXR1c1JlZnJlc2hQZXJzb24pID8gc3RhdC5GQUlMIDogc3RhdC5QQVNTKTsKIAogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iICwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0gICAgCXJldHVybjsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZXh0ZW5kZWRlbS9zcWwvY3JlYXRlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9leHRlbmRlZGVtL3NxbC9jcmVhdGUuc3FsCmluZGV4IDZjYTgyODQuLjgyNzUyNWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9leHRlbmRlZGVtL3NxbC9jcmVhdGUuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9leHRlbmRlZGVtL3NxbC9jcmVhdGUuc3FsCkBAIC0xLDQgKzEsNCBAQAotQ1JFQVRFIFRBQkxFIEVKQjMwX1BFUlNJU1RFTkNFX0VYVEVOREVERU1fUEVSU09OICgNCi1OQU1FIFZBUkNIQVIoMjU2KSBOT1QgTlVMTCBQUklNQVJZIEtFWQ0KLSkNCi07DQorQ1JFQVRFIFRBQkxFIEVKQjMwX1BFUlNJU1RFTkNFX0VYVEVOREVERU1fUEVSU09OICgKK05BTUUgVkFSQ0hBUigyNTYpIE5PVCBOVUxMIFBSSU1BUlkgS0VZCispCis7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZXh0ZW5kZWRlbS9zcWwvZHJvcC5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvZXh0ZW5kZWRlbS9zcWwvZHJvcC5zcWwKaW5kZXggMTRiN2U0ZC4uY2Q3ZDA1MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL2V4dGVuZGVkZW0vc3FsL2Ryb3Auc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS9leHRlbmRlZGVtL3NxbC9kcm9wLnNxbApAQCAtMSArMSBAQAotRFJPUCBUQUJMRSBFSkIzMF9QRVJTSVNURU5DRV9FWFRFTkRFREVNX1BFUlNPTjsNCitEUk9QIFRBQkxFIEVKQjMwX1BFUlNJU1RFTkNFX0VYVEVOREVERU1fUEVSU09OOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL3R4X3Byb3BhZ2F0aW9uL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvdHhfcHJvcGFnYXRpb24vYnVpbGQucHJvcGVydGllcwppbmRleCA1ZDc4MjMzLi4yOTk1NTliIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvdHhfcHJvcGFnYXRpb24vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvdHhfcHJvcGFnYXRpb24vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzAtcGVyc2lzdGVuY2UtdHhfcHJvcGFnYXRpb24iLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic2ltcGxlLmNsaWVudCIgdmFsdWU9ImNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAucGVyc2lzdGVuY2UudHhfcHJvcGFnYXRpb24uY2xpZW50LkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CkBAIC0yNiwxMCArMjYsMTAgQEAKIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS90eF9wcm9wYWdhdGlvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvdHhfcHJvcGFnYXRpb24vYnVpbGQueG1sCmluZGV4IGI5NzYyN2IuLmRmNmRkOGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS90eF9wcm9wYWdhdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL3R4X3Byb3BhZ2F0aW9uL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNTEsNyArNTEsNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UudHlwZSIgdmFsdWU9ImphdmF4LnNxbC5YQURhdGFTb3VyY2UiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL3hhIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4gCisgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiLz4KICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKICAgICAgICAgICAgICAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLXhhLXBvb2wucHJvcGVydHkuY29ubmVjdGlvbkF0dHJpYnV0ZXM9O2NyZWF0ZT10cnVlIi8+CkBAIC04MSwxNyArODEsMTcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0vbGliIi8+Ci0gICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS9saWIvJHthcHBuYW1lfS1saWIuamFyIiAKKyAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9L2xpYi8ke2FwcG5hbWV9LWxpYi5qYXIiCiAgICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICAgaW5jbHVkZXM9IioqL1BlcnNvbi5jbGFzcyI+Ci0gICAgICAgIDwvamFyPiAgICAgICAgCisgICAgICAgIDwvamFyPgogICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vbGliLyR7YXBwbmFtZX0tcGFyMS5qYXIiPgogICAgICAgICAgICAgIDxtZXRhaW5mIGZpbGU9ImRlc2NyaXB0b3IvcGVyc2lzdGVuY2UueG1sIi8+CiAgICAgICAgIDwvamFyPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL1NmdWwqLmNsYXNzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovQ2xpZW50LmNsYXNzLCoqL1NmdWwuY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiIHVwZGF0ZT0ieWVzIgpAQCAtOTksOSArOTksOSBAQAogICAgICAgICAgICAgIGluY2x1ZGVzPSJsaWIvJHthcHBuYW1lfS1saWIuamFyLCBsaWIvJHthcHBuYW1lfS1wYXIxLmphciI+CiAgICAgICAgIDwvamFyPgogCi0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTExMCwxMCArMTEwLDEwIEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1zdGFuZGFsb25lIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS90eF9wcm9wYWdhdGlvbi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvdHhfcHJvcGFnYXRpb24vY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDVjMGIyMzQuLmRjMjExODUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS90eF9wcm9wYWdhdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL3R4X3Byb3BhZ2F0aW9uL2NsaWVudC9DbGllbnQuamF2YQpAQCAtNjQsNyArNjQsNyBAQAogICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBzID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiSSBhbSBpbiBjbGllbnQiKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBVc2VyVHJhbnNhY3Rpb24gdXR4ID0gKFVzZXJUcmFuc2FjdGlvbikobmV3IGphdmF4Lm5hbWluZy5Jbml0aWFsQ29udGV4dCgpKS5sb29rdXAoImphdmE6Y29tcC9Vc2VyVHJhbnNhY3Rpb24iKTsKICAgICAgICAgICAgIGRzID0gKERhdGFTb3VyY2UpKG5ldyBqYXZheC5uYW1pbmcuSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJqZGJjL3hhIik7CiAKQEAgLTc4LDcgKzc4LDcgQEAKIAogICAgICAgICAgICAgdXR4LmJlZ2luKCk7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oInV0eC5iZWdpbiBjYWxsZWQgIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgY29ubmVjdGlvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKICAgICAgICAgICAgIHMgPSBjb25uZWN0aW9uLnByZXBhcmVTdGF0ZW1lbnQoImluc2VydCBpbnRvIEVKQjMwX1BFUlNJU1RFTkNFX0VFTV9JTkpFQ1RJT05fUEVSU09OIHZhbHVlcygnMScsICcxJykiKTsKICAgICAgICAgICAgIHMuZXhlY3V0ZSgpOwpAQCAtOTQsNyArOTQsNyBAQAogICAgICAgICAgICAgICAgIHV0eC5yb2xsYmFjaygpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigidXR4LnJvbGxiYWNrIGNhbGxlZCAiKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBJdGVyYXRvcjxTdHJpbmc+IGl0ZXIgPSBtYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsKICAgICAgICAgICAgIHdoaWxlIChpdGVyLmhhc05leHQoKSkgewogICAgICAgICAgICAgICAgIFN0cmluZyB0ZXN0TmFtZSA9IGl0ZXIubmV4dCgpOwpAQCAtMTI1LDcgKzEyNSw3IEBACiAKICAgICAgICAgfQogCi0gICAgCXJldHVybjsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvdHhfcHJvcGFnYXRpb24vZWpiL1BlcnNvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL3R4X3Byb3BhZ2F0aW9uL2VqYi9QZXJzb24uamF2YQppbmRleCAxNDM1OGZmLi45NTJjYmVjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvdHhfcHJvcGFnYXRpb24vZWpiL1BlcnNvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS90eF9wcm9wYWdhdGlvbi9lamIvUGVyc29uLmphdmEKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICAgICAgdGhpcy5kYXRhID0gZGF0YTsKICAgICB9CiAKLSAgICBAT3ZlcnJpZGUgCisgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKICAgICAgICAgcmV0dXJuICJQZXJzb246IChuYW1lPSIgKyBuYW1lICsgIjsgZGF0YT0gIiArIGRhdGEgKyAiKSI7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL3R4X3Byb3BhZ2F0aW9uL2VqYi9TZnVsQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL3R4X3Byb3BhZ2F0aW9uL2VqYi9TZnVsQmVhbi5qYXZhCmluZGV4IDNkNGYzMGIuLjRiMjRkZjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS90eF9wcm9wYWdhdGlvbi9lamIvU2Z1bEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvdHhfcHJvcGFnYXRpb24vZWpiL1NmdWxCZWFuLmphdmEKQEAgLTM0LDI1ICszNCwyNSBAQAogaW1wb3J0IGpha2FydGEuZWpiLkVKQkV4Y2VwdGlvbjsKIAogQFN0YXRlZnVsCi1ARUpCKG5hbWU9ImVqYi9TZnVsQmVhbiIsIAorQEVKQihuYW1lPSJlamIvU2Z1bEJlYW4iLAogICAgICAgICBiZWFuSW50ZXJmYWNlPWNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAucGVyc2lzdGVuY2UudHhfcHJvcGFnYXRpb24uU2Z1bERlbGVnYXRlLmNsYXNzKQogCiBwdWJsaWMgY2xhc3MgU2Z1bEJlYW4KICAgICBpbXBsZW1lbnRzIFNmdWwgewogCiAgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKLSAgICAKKwogICAgIHByaXZhdGUgQEVKQiBTZnVsRGVsZWdhdGUgZGVsZWdhdGU7Ci0gICAgCisKICAgICBwcml2YXRlIEBQZXJzaXN0ZW5jZUNvbnRleHQodW5pdE5hbWU9ImxpYi9lamItZWpiMzAtcGVyc2lzdGVuY2UtdHhfcHJvcGFnYXRpb24tcGFyMS5qYXIjZW0iLAotICAgICAgICAgICAgICAgIHR5cGU9UGVyc2lzdGVuY2VDb250ZXh0VHlwZS5FWFRFTkRFRCkgCisgICAgICAgICAgICAgICAgdHlwZT1QZXJzaXN0ZW5jZUNvbnRleHRUeXBlLkVYVEVOREVEKQogICAgICAgICAgICAgRW50aXR5TWFuYWdlciBleHRlbmRlZEVNOwotIAorCiAgICAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkgewogICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgU3RyaW5nIGxvb2t1cE5hbWUgPSAiamF2YTpjb21wL2Vudi9lamIvU2Z1bEJlYW4iOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIEluaXRpYWxDb250ZXh0IGluaXRDdHggPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIGRlbGVnYXRlID0gKFNmdWxEZWxlZ2F0ZSkgaW5pdEN0eC5sb29rdXAobG9va3VwTmFtZSk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpAQCAtNjIsNyArNjIsNyBAQAogCiAgICAgcHVibGljIE1hcDxTdHJpbmcsIEJvb2xlYW4+IGRvVGVzdHMoKSB7CiAgICAgICAgIFBlcnNvbiBwZXJzb24gPSBuZXcgUGVyc29uKG5hbWUpOwotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgZGVsZWdhdGVOYW1lID0gImRlbGduYW1lXyIgKyBuYW1lOwogICAgICAgICBTdHJpbmcgZGVsZWdhdGVEYXRhPSAiZGVsZ2RhdGE6ICIgKyBuYW1lOwogICAgICAgICBkZWxlZ2F0ZS5jcmVhdGUoZGVsZWdhdGVOYW1lLCBkZWxlZ2F0ZURhdGEpOwpAQCAtNzEsOCArNzEsOCBAQAogCiAgICAgICAgIGV4dGVuZGVkRU0ucGVyc2lzdChwZXJzb24pOwogICAgICAgICBQZXJzb24gZm91bmRQZXJzb24gPSBkZWxlZ2F0ZS5maW5kKG5hbWUpOwotICAgICAgICAKLSAgICAgICAgCisKKwogICAgICAgICBNYXA8U3RyaW5nLCBCb29sZWFuPiBtYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIEJvb2xlYW4+KCk7CiAgICAgICAgIG1hcC5wdXQoImZpbmREZWxlZ2F0ZUNyZWF0ZWRQZXJzb24iLCAoZFBlcnNvbiAhPSBudWxsKSk7CiAgICAgICAgIG1hcC5wdXQoImRlbGVnYXRlRm91bmRNZSIsIChmb3VuZFBlcnNvbiAhPSBudWxsKSk7CkBAIC0xMDAsNSArMTAwLDUgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVtb3ZlZDsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS90eF9wcm9wYWdhdGlvbi9lamIvU2Z1bERlbGVnYXRlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvdHhfcHJvcGFnYXRpb24vZWpiL1NmdWxEZWxlZ2F0ZS5qYXZhCmluZGV4IDYyZDIwOTcuLjMzN2E0M2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS90eF9wcm9wYWdhdGlvbi9lamIvU2Z1bERlbGVnYXRlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL3R4X3Byb3BhZ2F0aW9uL2VqYi9TZnVsRGVsZWdhdGUuamF2YQpAQCAtMjgsNyArMjgsNyBAQAogICAgIFBlcnNvbiBmaW5kKFN0cmluZyBuYW1lKTsKIAogICAgIGJvb2xlYW4gcmVtb3ZlKFN0cmluZyBuYW1lKTsKLSAgICAKKwogICAgIEVudGl0eU1hbmFnZXIgZ2V0RU0oKTsKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL3R4X3Byb3BhZ2F0aW9uL2VqYi9TZnVsRGVsZWdhdGVCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvdHhfcHJvcGFnYXRpb24vZWpiL1NmdWxEZWxlZ2F0ZUJlYW4uamF2YQppbmRleCA4YTk2ZTIwLi5mN2E3YWFkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvdHhfcHJvcGFnYXRpb24vZWpiL1NmdWxEZWxlZ2F0ZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvdHhfcHJvcGFnYXRpb24vZWpiL1NmdWxEZWxlZ2F0ZUJlYW4uamF2YQpAQCAtMzcsMTIgKzM3LDEyIEBACiAgICAgcHVibGljIEVudGl0eU1hbmFnZXIgZ2V0RU0oKSB7CiAgICAgICAgIHJldHVybiBleHRlbmRlZEVNOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBQZXJzb24gY3JlYXRlKFN0cmluZyBuYW1lLCBTdHJpbmcgZGF0YSkgewogCiAgICAgICAgIFBlcnNvbiBwID0gbmV3IFBlcnNvbihuYW1lKTsKICAgICAgICAgcC5zZXREYXRhKGRhdGEpOwotICAgICAgICAKKwogICAgICAgICBleHRlbmRlZEVNLnBlcnNpc3QocCk7CiAgICAgICAgIHJldHVybiBwOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS90eF9wcm9wYWdhdGlvbi9zcWwvY3JlYXRlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS90eF9wcm9wYWdhdGlvbi9zcWwvY3JlYXRlLnNxbAppbmRleCBmYTYwNzQyLi5jMGFiNDNmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvdHhfcHJvcGFnYXRpb24vc3FsL2NyZWF0ZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL3R4X3Byb3BhZ2F0aW9uL3NxbC9jcmVhdGUuc3FsCkBAIC0xLDQgKzEsNCBAQAotQ1JFQVRFIFRBQkxFIEVKQjMwX1BFUlNJU1RFTkNFX0VFTV9JTkpFQ1RJT05fUEVSU09OICgNCi0gICAgTkFNRSBWQVJDSEFSKDI1NikgTk9UIE5VTEwgUFJJTUFSWSBLRVksDQotICAgIERBVEEgVkFSQ0hBUigyNTYpDQotKTsNCitDUkVBVEUgVEFCTEUgRUpCMzBfUEVSU0lTVEVOQ0VfRUVNX0lOSkVDVElPTl9QRVJTT04gKAorICAgIE5BTUUgVkFSQ0hBUigyNTYpIE5PVCBOVUxMIFBSSU1BUlkgS0VZLAorICAgIERBVEEgVkFSQ0hBUigyNTYpCispOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL3R4X3Byb3BhZ2F0aW9uL3NxbC9kcm9wLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMC9wZXJzaXN0ZW5jZS90eF9wcm9wYWdhdGlvbi9zcWwvZHJvcC5zcWwKaW5kZXggNWViMTM2Zi4uZDAxMmM2OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMwL3BlcnNpc3RlbmNlL3R4X3Byb3BhZ2F0aW9uL3NxbC9kcm9wLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzAvcGVyc2lzdGVuY2UvdHhfcHJvcGFnYXRpb24vc3FsL2Ryb3Auc3FsCkBAIC0xICsxIEBACi1EUk9QIFRBQkxFIEVKQjMwX1BFUlNJU1RFTkNFX0VFTV9JTkpFQ1RJT05fUEVSU09OOw0KK0RST1AgVEFCTEUgRUpCMzBfUEVSU0lTVEVOQ0VfRUVNX0lOSkVDVElPTl9QRVJTT047CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvYXN5bmNocm9ub3VzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9hc3luY2hyb25vdXMvYnVpbGQueG1sCmluZGV4IDE5NWMyZWYuLmY1NTlkY2MgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9hc3luY2hyb25vdXMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9hc3luY2hyb25vdXMvYnVpbGQueG1sCkBAIC00Niw5ICs0Niw5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYi1lamIzMS1hc3luY2hyb25vdXMgdGVzdHMpCi0JPC9lY2hvPgorICAgIDxlY2hvPgorICAgICAgICBVc2FnZToKKyAgICAgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZWpiLWVqYjMxLWFzeW5jaHJvbm91cyB0ZXN0cykKKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvYXN5bmNocm9ub3VzL2xvY2FsYW5kcmVtb3RlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvYXN5bmNocm9ub3VzL2xvY2FsYW5kcmVtb3RlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNzczZDY5OS4uZjVmMmZjOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2FzeW5jaHJvbm91cy9sb2NhbGFuZHJlbW90ZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9hc3luY2hyb25vdXMvbG9jYWxhbmRyZW1vdGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTIgKzE1LDEyIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzEtYXN5bmNocm9ub3VzLWxvY2FsYW5kcmVtb3RlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAKLTxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz5cdTAwMjAKKzxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic2UuY2xpZW50IiB2YWx1ZT0iY29tLmFjbWUuQ2xpZW50Ii8+Ci0JCisKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2FzeW5jaHJvbm91cy9sb2NhbGFuZHJlbW90ZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvYXN5bmNocm9ub3VzL2xvY2FsYW5kcmVtb3RlL2J1aWxkLnhtbAppbmRleCAwNWZkNTE4Li4wMTFiYTU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvYXN5bmNocm9ub3VzL2xvY2FsYW5kcmVtb3RlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvYXN5bmNocm9ub3VzL2xvY2FsYW5kcmVtb3RlL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTIgKzQ2LDEyIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJlamItamFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qYXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC01OSw5ICs1OSw5IEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5fc2UiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuX3NlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgPGphdmEgIGZvcms9Im9uIiAKKyAgICAgICA8amF2YSAgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSIke3NlLmNsaWVudH0iPgpAQCAtNzMsNyArNzMsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWphci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2FzeW5jaHJvbm91cy9sb2NhbGFuZHJlbW90ZS9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvYXN5bmNocm9ub3VzL2xvY2FsYW5kcmVtb3RlL2NsaWVudC9DbGllbnQuamF2YQppbmRleCAxYTdmZDgyLi4wNDEzYjA2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvYXN5bmNocm9ub3VzL2xvY2FsYW5kcmVtb3RlL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvYXN5bmNocm9ub3VzL2xvY2FsYW5kcmVtb3RlL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjgsNyArMjgsNyBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgYXBwTmFtZTsKQEAgLTM5LDQyICszOSw0MiBAQAogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewogCi0JYXBwTmFtZSA9IGFyZ3NbMF07IAotCXN0YXQuYWRkRGVzY3JpcHRpb24oYXBwTmFtZSk7Ci0JQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7ICAgICAgIAotICAgICAgICBjbGllbnQuZG9UZXN0KCk7CQorICAgIGFwcE5hbWUgPSBhcmdzWzBdOworICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oYXBwTmFtZSk7CisgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CisgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoYXBwTmFtZSArICJJRCIpOwogICAgIH0KIAogICAgIHB1YmxpYyBDbGllbnQoU3RyaW5nW10gYXJncykgewotCW51bSA9IEludGVnZXIudmFsdWVPZihhcmdzWzFdKTsKKyAgICBudW0gPSBJbnRlZ2VyLnZhbHVlT2YoYXJnc1sxXSk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogCi0JdHJ5IHsKKyAgICB0cnkgewogCi0JICAKLQkgICAgcmVtb3RlQXN5bmMgPSAoUmVtb3RlQXN5bmMpIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpnbG9iYWwvIiArIGFwcE5hbWUgKyAiL1NpbmdsZXRvbkJlYW4hY29tLmFjbWUuUmVtb3RlQXN5bmMiKTsKLQkgICAgRnV0dXJlPFN0cmluZz4gZnV0dXJlID0gcmVtb3RlQXN5bmMuaGVsbG8oIkJvYiIpOwotCSAgICAKLQkgICAgYm9vbGVhbiBpc0RvbmUgPSBmdXR1cmUuaXNEb25lKCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaXNEb25lID0gIiArIGlzRG9uZSk7CiAKLQkgICAgU3RyaW5nIHJlc3VsdCA9IGZ1dHVyZS5nZXQoKTsKKyAgICAgICAgcmVtb3RlQXN5bmMgPSAoUmVtb3RlQXN5bmMpIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpnbG9iYWwvIiArIGFwcE5hbWUgKyAiL1NpbmdsZXRvbkJlYW4hY29tLmFjbWUuUmVtb3RlQXN5bmMiKTsKKyAgICAgICAgRnV0dXJlPFN0cmluZz4gZnV0dXJlID0gcmVtb3RlQXN5bmMuaGVsbG8oIkJvYiIpOwogCi0JICAgIGlmKCAhZnV0dXJlLmlzRG9uZSgpICkgewotCQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiaXNEb25lIHNob3VsZCBoYXZlIGJlZW4gdHJ1ZSIpOwotCSAgICB9Ci0JICAgIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlbW90ZSBiZWFuIHNheXMgIiArIHJlc3VsdCk7Ci0JCQotCSAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuUEFTUyk7CisgICAgICAgIGJvb2xlYW4gaXNEb25lID0gZnV0dXJlLmlzRG9uZSgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlzRG9uZSA9ICIgKyBpc0RvbmUpOwogCi0JfSBjYXRjaChFeGNlcHRpb24gZSkgewotCSAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuRkFJTCk7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQorICAgICAgICBTdHJpbmcgcmVzdWx0ID0gZnV0dXJlLmdldCgpOworCisgICAgICAgIGlmKCAhZnV0dXJlLmlzRG9uZSgpICkgeworICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiaXNEb25lIHNob3VsZCBoYXZlIGJlZW4gdHJ1ZSIpOworICAgICAgICB9CisKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZW1vdGUgYmVhbiBzYXlzICIgKyByZXN1bHQpOworCisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5QQVNTKTsKKworICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LkZBSUwpOworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KICAgICB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2FzeW5jaHJvbm91cy9sb2NhbGFuZHJlbW90ZS9lamIvU2luZ2xldG9uQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2FzeW5jaHJvbm91cy9sb2NhbGFuZHJlbW90ZS9lamIvU2luZ2xldG9uQmVhbi5qYXZhCmluZGV4IDY5M2ExMjIuLmVmNjA5ZDMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9hc3luY2hyb25vdXMvbG9jYWxhbmRyZW1vdGUvZWpiL1NpbmdsZXRvbkJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvYXN5bmNocm9ub3VzL2xvY2FsYW5kcmVtb3RlL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKQEAgLTMyLDE0ICszMiwxNCBAQAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHVibGljIHZvaWQgaW5pdCgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOjppbml0KCkiKTsKLQlGdXR1cmU8U3RyaW5nPiBmdXR1cmUgPSBtZUxvY2FsLmhlbGxvKCJpbml0Iik7CisgICAgRnV0dXJlPFN0cmluZz4gZnV0dXJlID0gbWVMb2NhbC5oZWxsbygiaW5pdCIpOwogCiAgICAgfQogCiAgICAgQEFzeW5jaHJvbm91cwogICAgIHB1YmxpYyBGdXR1cmU8U3RyaW5nPiBoZWxsbyhTdHJpbmcgbmFtZSkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6aGVsbG8oICIgKyBuYW1lICsgIikiKTsKLQlyZXR1cm4gbmV3IEFzeW5jUmVzdWx0PFN0cmluZz4oIkhlbGxvLCAiICsgbmFtZSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOjpoZWxsbyggIiArIG5hbWUgKyAiKSIpOworICAgIHJldHVybiBuZXcgQXN5bmNSZXN1bHQ8U3RyaW5nPigiSGVsbG8sICIgKyBuYW1lKTsKICAgICB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2FzeW5jaHJvbm91cy9sb2NhbGFuZHJlbW90ZS9lamIvU3VwZXJBc3luYy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2FzeW5jaHJvbm91cy9sb2NhbGFuZHJlbW90ZS9lamIvU3VwZXJBc3luYy5qYXZhCmluZGV4IGE4ZThjYjAuLjc5N2FiMWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9hc3luY2hyb25vdXMvbG9jYWxhbmRyZW1vdGUvZWpiL1N1cGVyQXN5bmMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvYXN5bmNocm9ub3VzL2xvY2FsYW5kcmVtb3RlL2VqYi9TdXBlckFzeW5jLmphdmEKQEAgLTE5LDYgKzE5LDYgQEAKIGltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC4qOwogaW1wb3J0IGpha2FydGEuZWpiLio7CiAKLXB1YmxpYyBpbnRlcmZhY2UgU3VwZXJBc3luYyB7IAorcHVibGljIGludGVyZmFjZSBTdXBlckFzeW5jIHsKICAgICBwdWJsaWMgRnV0dXJlPFN0cmluZz4gaGVsbG8oU3RyaW5nIG5hbWUpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2FzeW5jaHJvbm91cy9yZW1vdGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9hc3luY2hyb25vdXMvcmVtb3RlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOTc4MDE4MC4uN2MxNTU0ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2FzeW5jaHJvbm91cy9yZW1vdGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvYXN5bmNocm9ub3VzL3JlbW90ZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMiArMTUsMTIgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lamIzMS1hc3luY2hyb25vdXMtcmVtb3RlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAKLTxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz5cdTAwMjAKKzxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic2UuY2xpZW50IiB2YWx1ZT0iY29tLmFjbWUuQ2xpZW50Ii8+Ci0JCisKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2FzeW5jaHJvbm91cy9yZW1vdGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2FzeW5jaHJvbm91cy9yZW1vdGUvYnVpbGQueG1sCmluZGV4IDc1ZTVmZDMuLmU5ZWVmY2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9hc3luY2hyb25vdXMvcmVtb3RlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvYXN5bmNocm9ub3VzL3JlbW90ZS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDEyICs0NiwxMiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZWpiLWphci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktamFyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNTksOSArNTksOSBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuX3NlIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bl9zZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgIDxqYXZhICBmb3JrPSJvbiIgCisgICAgICAgPGphdmEgIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iJHtzZS5jbGllbnR9Ij4KQEAgLTczLDcgKzczLDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qYXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9hc3luY2hyb25vdXMvcmVtb3RlL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9hc3luY2hyb25vdXMvcmVtb3RlL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA5N2VjZGMzLi45ZjE1MWI4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvYXN5bmNocm9ub3VzL3JlbW90ZS9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2FzeW5jaHJvbm91cy9yZW1vdGUvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBhcHBOYW1lOwpAQCAtNDYsMjQxICs0NiwyNDEgQEAKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKIAotCWFwcE5hbWUgPSBhcmdzWzBdOyAKLQlzdGF0LmFkZERlc2NyaXB0aW9uKGFwcE5hbWUpOwotCUNsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOyAgICAgICAKLSAgICAgICAgY2xpZW50LmRvVGVzdCgpOwkKKyAgICBhcHBOYW1lID0gYXJnc1swXTsKKyAgICBzdGF0LmFkZERlc2NyaXB0aW9uKGFwcE5hbWUpOworICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOworICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KGFwcE5hbWUgKyAiSUQiKTsKICAgICB9CiAKICAgICBwdWJsaWMgQ2xpZW50KFN0cmluZ1tdIGFyZ3MpIHsKLQludW0gPSBJbnRlZ2VyLnZhbHVlT2YoYXJnc1sxXSk7CisgICAgbnVtID0gSW50ZWdlci52YWx1ZU9mKGFyZ3NbMV0pOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKIAotCXRyeSB7CisgICAgdHJ5IHsKIAotCSAgICBzdGF0ZWZ1bEJlYW4gPSAoUmVtb3RlQXN5bmMyKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6Z2xvYmFsLyIgKyBhcHBOYW1lICsgIi9TdGF0ZWZ1bEJlYW4hY29tLmFjbWUuUmVtb3RlQXN5bmMyIik7Ci0JICAgIHN0YXRlZnVsQmVhbkxlZ2FjeVJlbW90ZSA9IChSZW1vdGVBc3luYzMpIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpnbG9iYWwvIiArIGFwcE5hbWUgKyAiL1N0YXRlZnVsQmVhbiFjb20uYWNtZS5SZW1vdGVBc3luYzMiKTsKLQkgICAgc3RhdGVmdWxCZWFuTGVnYWN5UmVtb3RlMiA9IChSZW1vdGVBc3luYzMpIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpnbG9iYWwvIiArIGFwcE5hbWUgKyAiL1N0YXRlZnVsQmVhbiFjb20uYWNtZS5SZW1vdGVBc3luYzMiKTsKKyAgICAgICAgc3RhdGVmdWxCZWFuID0gKFJlbW90ZUFzeW5jMikgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmdsb2JhbC8iICsgYXBwTmFtZSArICIvU3RhdGVmdWxCZWFuIWNvbS5hY21lLlJlbW90ZUFzeW5jMiIpOworICAgICAgICBzdGF0ZWZ1bEJlYW5MZWdhY3lSZW1vdGUgPSAoUmVtb3RlQXN5bmMzKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6Z2xvYmFsLyIgKyBhcHBOYW1lICsgIi9TdGF0ZWZ1bEJlYW4hY29tLmFjbWUuUmVtb3RlQXN5bmMzIik7CisgICAgICAgIHN0YXRlZnVsQmVhbkxlZ2FjeVJlbW90ZTIgPSAoUmVtb3RlQXN5bmMzKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6Z2xvYmFsLyIgKyBhcHBOYW1lICsgIi9TdGF0ZWZ1bEJlYW4hY29tLmFjbWUuUmVtb3RlQXN5bmMzIik7CiAKLQkgICAgRnV0dXJlPFN0cmluZz4gZnV0dXJlU2Z1bCA9IHN0YXRlZnVsQmVhbi5oZWxsb0FzeW5jKCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVmdWwgYmVhbiBzYXlzICIgKyBmdXR1cmVTZnVsLmdldCgpKTsKKyAgICAgICAgRnV0dXJlPFN0cmluZz4gZnV0dXJlU2Z1bCA9IHN0YXRlZnVsQmVhbi5oZWxsb0FzeW5jKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVmdWwgYmVhbiBzYXlzICIgKyBmdXR1cmVTZnVsLmdldCgpKTsKIAotCSAgICBmdXR1cmVTZnVsID0gc3RhdGVmdWxCZWFuLnJlbW92ZUFmdGVyQ2FsbGluZygpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlZnVsIGJlYW4gcmVtb3ZlZCBzdGF0dXMgPSAiICsgZnV0dXJlU2Z1bC5nZXQoKSk7CisgICAgICAgIGZ1dHVyZVNmdWwgPSBzdGF0ZWZ1bEJlYW4ucmVtb3ZlQWZ0ZXJDYWxsaW5nKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVmdWwgYmVhbiByZW1vdmVkIHN0YXR1cyA9ICIgKyBmdXR1cmVTZnVsLmdldCgpKTsKIAotCSAgICBib29sZWFuIGdvdFNmdWxFeGNlcHRpb24gPSBmYWxzZTsKLQkgICAgdHJ5IHsKLQkJZnV0dXJlU2Z1bCA9IHN0YXRlZnVsQmVhbi5oZWxsb0FzeW5jKCk7ICAgIAotCSAgICB9IGNhdGNoKE5vU3VjaEVKQkV4Y2VwdGlvbiBuc2VlKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiR290IG5zZWUgZnJvbSBoZWxsb0FzeW5jIik7Ci0JCWdvdFNmdWxFeGNlcHRpb24gPSB0cnVlOwotCSAgICB9CisgICAgICAgIGJvb2xlYW4gZ290U2Z1bEV4Y2VwdGlvbiA9IGZhbHNlOworICAgICAgICB0cnkgeworICAgICAgICBmdXR1cmVTZnVsID0gc3RhdGVmdWxCZWFuLmhlbGxvQXN5bmMoKTsKKyAgICAgICAgfSBjYXRjaChOb1N1Y2hFSkJFeGNlcHRpb24gbnNlZSkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBuc2VlIGZyb20gaGVsbG9Bc3luYyIpOworICAgICAgICBnb3RTZnVsRXhjZXB0aW9uID0gdHJ1ZTsKKyAgICAgICAgfQogCi0JICAgIHRyeSB7Ci0JCWlmKCAhZ290U2Z1bEV4Y2VwdGlvbiApIHsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigicmV0dXJuIHZhbHVlID0gIiArIGZ1dHVyZVNmdWwuZ2V0KCkpOwotCQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiU2hvdWxkIGhhdmUgZ290dGVuIGV4Y2VwdGlvbiIpOwotCQl9Ci0JICAgIH0gY2F0Y2goRXhlY3V0aW9uRXhjZXB0aW9uIGVlKSB7Ci0JCWlmKCBlZS5nZXRDYXVzZSgpIGluc3RhbmNlb2YgTm9TdWNoRUpCRXhjZXB0aW9uICkgewotCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgY2F1Z2h0IE5vU3VjaEVKQkV4Y2VwdGlvbiB3aGVuICIgKwotCQkJCSAgICAgICAiYWNjZXNzaW5nIHNmdWwgYmVhbiBhc3luY2hyb25vdXNseSBhZnRlciByZW1vdmFsIik7Ci0JCX0gZWxzZSB7Ci0JCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJ3cm9uZyBleGNlcHRpb24gZHVyaW5nIHNmc2IgYWNjZXNzIGFmdGVyIHJlbW92YWwiLAotCQkJCQkgICBlZSk7Ci0JCX0KLQkgICAgfQotCSAgICAKLQkgICAgdHJ5IHsKLQkJRnV0dXJlPFN0cmluZz4gZiA9IHN0YXRlZnVsQmVhbkxlZ2FjeVJlbW90ZS50aHJvd0V4Y2VwdGlvbigiamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uIik7Ci0JCVN0cmluZyByZXN1bHQgPSBmLmdldCgpOwotCQl0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJEaWRuJ3QgZ2V0IENyZWF0ZUV4Y2VwdGlvbiIpOwotCSAgICB9IGNhdGNoKEV4ZWN1dGlvbkV4Y2VwdGlvbiBlZSkgewotCQlpZiggZWUuZ2V0Q2F1c2UoKSBpbnN0YW5jZW9mIENyZWF0ZUV4Y2VwdGlvbiApIHsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIENyZWF0ZUV4Y2VwdGlvbiIpOwotCQl9IGVsc2UgewotCQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigid3JvbmcgZXhjZXB0aW9uIHJlY2VpdmVkIiwKLQkJCQkJICAgZWUpOwotCQl9Ci0JICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgaWYoICFnb3RTZnVsRXhjZXB0aW9uICkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJyZXR1cm4gdmFsdWUgPSAiICsgZnV0dXJlU2Z1bC5nZXQoKSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJTaG91bGQgaGF2ZSBnb3R0ZW4gZXhjZXB0aW9uIik7CisgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaChFeGVjdXRpb25FeGNlcHRpb24gZWUpIHsKKyAgICAgICAgaWYoIGVlLmdldENhdXNlKCkgaW5zdGFuY2VvZiBOb1N1Y2hFSkJFeGNlcHRpb24gKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSBjYXVnaHQgTm9TdWNoRUpCRXhjZXB0aW9uIHdoZW4gIiArCisgICAgICAgICAgICAgICAgICAgICAgICJhY2Nlc3Npbmcgc2Z1bCBiZWFuIGFzeW5jaHJvbm91c2x5IGFmdGVyIHJlbW92YWwiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIndyb25nIGV4Y2VwdGlvbiBkdXJpbmcgc2ZzYiBhY2Nlc3MgYWZ0ZXIgcmVtb3ZhbCIsCisgICAgICAgICAgICAgICAgICAgICAgIGVlKTsKKyAgICAgICAgfQorICAgICAgICB9CiAKLQkgICAgdHJ5IHsKLQkJRnV0dXJlPFN0cmluZz4gZiA9IHN0YXRlZnVsQmVhbkxlZ2FjeVJlbW90ZS50aHJvd0V4Y2VwdGlvbigiamFrYXJ0YS5lamIuRUpCRXhjZXB0aW9uIik7Ci0JCVN0cmluZyByZXN1bHQgPSBmLmdldCgpOwotCQl0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJEaWRuJ3QgZ2V0IEVKQkV4Y2VwdGlvbiIpOwotCSAgICB9IGNhdGNoKEV4ZWN1dGlvbkV4Y2VwdGlvbiBlZSkgewotCQlpZiggZWUuZ2V0Q2F1c2UoKSBpbnN0YW5jZW9mIFJlbW90ZUV4Y2VwdGlvbiApIHsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIFJlbW90ZUV4Y2VwdGlvbiIpOwotCQl9IGVsc2UgewotCQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigid3JvbmcgZXhjZXB0aW9uIHJlY2VpdmVkIiwKLQkJCQkJICAgZWUpOwotCQl9Ci0JICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgRnV0dXJlPFN0cmluZz4gZiA9IHN0YXRlZnVsQmVhbkxlZ2FjeVJlbW90ZS50aHJvd0V4Y2VwdGlvbigiamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uIik7CisgICAgICAgIFN0cmluZyByZXN1bHQgPSBmLmdldCgpOworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJEaWRuJ3QgZ2V0IENyZWF0ZUV4Y2VwdGlvbiIpOworICAgICAgICB9IGNhdGNoKEV4ZWN1dGlvbkV4Y2VwdGlvbiBlZSkgeworICAgICAgICBpZiggZWUuZ2V0Q2F1c2UoKSBpbnN0YW5jZW9mIENyZWF0ZUV4Y2VwdGlvbiApIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIENyZWF0ZUV4Y2VwdGlvbiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigid3JvbmcgZXhjZXB0aW9uIHJlY2VpdmVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgZWUpOworICAgICAgICB9CisgICAgICAgIH0KIAotCSAgICAKLQkgICAgdHJ5IHsKLQkJRnV0dXJlPFN0cmluZz4gZiA9IHN0YXRlZnVsQmVhbkxlZ2FjeVJlbW90ZTIucmVtb3ZlQWZ0ZXJDYWxsaW5nKCk7Ci0JCVN0cmluZyByZXN1bHQgPSBmLmdldCgpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oInJlc3VsdCBvZiByZW1vdmVBZnRlckNhbGxpbmcgPSAiICsgcmVzdWx0KTsKLQkgICAgfSBjYXRjaChFeGVjdXRpb25FeGNlcHRpb24gZWUpIHsKLQkJdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiZ290IHVuZXhwZWN0ZWQgZXhjZXB0aW9uIiwgZWUpOwotCSAgICB9CisgICAgICAgIHRyeSB7CisgICAgICAgIEZ1dHVyZTxTdHJpbmc+IGYgPSBzdGF0ZWZ1bEJlYW5MZWdhY3lSZW1vdGUudGhyb3dFeGNlcHRpb24oImpha2FydGEuZWpiLkVKQkV4Y2VwdGlvbiIpOworICAgICAgICBTdHJpbmcgcmVzdWx0ID0gZi5nZXQoKTsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiRGlkbid0IGdldCBFSkJFeGNlcHRpb24iKTsKKyAgICAgICAgfSBjYXRjaChFeGVjdXRpb25FeGNlcHRpb24gZWUpIHsKKyAgICAgICAgaWYoIGVlLmdldENhdXNlKCkgaW5zdGFuY2VvZiBSZW1vdGVFeGNlcHRpb24gKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSByZWNlaXZlZCBSZW1vdGVFeGNlcHRpb24iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIndyb25nIGV4Y2VwdGlvbiByZWNlaXZlZCIsCisgICAgICAgICAgICAgICAgICAgICAgIGVlKTsKKyAgICAgICAgfQorICAgICAgICB9CiAKLQkgICAgdHJ5IHsKLQkJRnV0dXJlPFN0cmluZz4gZiA9IHN0YXRlZnVsQmVhbkxlZ2FjeVJlbW90ZTIuaGVsbG9Bc3luYygpOwotCQlTdHJpbmcgcmVzdWx0ID0gZi5nZXQoKTsKLQkJdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiRGlkbid0IGdldCBSZW1vdGVFeGNlcHRpb24iKTsKLQkgICAgfSBjYXRjaChFeGVjdXRpb25FeGNlcHRpb24gZWUpIHsKLQkJaWYoIGVlLmdldENhdXNlKCkgaW5zdGFuY2VvZiBOb1N1Y2hPYmplY3RFeGNlcHRpb24gKSB7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSByZWNlaXZlZCBSZW1vdGVFeGNlcHRpb24iKTsKLQkJfSBlbHNlIHsKLQkJICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIndyb25nIGV4Y2VwdGlvbiByZWNlaXZlZCIsCi0JCQkJCSAgIGVlKTsKLQkJfQotCSAgICB9IGNhdGNoKE5vU3VjaE9iamVjdEV4Y2VwdGlvbiBuc29lKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIE5vU3VjaE9iamVjdEV4Y2VwdGlvbiIpOwotCSAgICB9Ci0JICAKLQkgICAgcmVtb3RlQXN5bmMgPSAoUmVtb3RlQXN5bmMpIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpnbG9iYWwvIiArIGFwcE5hbWUgKyAiL1NpbmdsZXRvbkJlYW4iKTsKLQkgICAgcmVtb3RlQXN5bmMuc3RhcnRUZXN0KCk7CiAKLQkgICAgRXhlY3V0b3JTZXJ2aWNlIGV4ZWN1dG9yID0gRXhlY3V0b3JzLm5ld0NhY2hlZFRocmVhZFBvb2woKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgRnV0dXJlPFN0cmluZz4gZiA9IHN0YXRlZnVsQmVhbkxlZ2FjeVJlbW90ZTIucmVtb3ZlQWZ0ZXJDYWxsaW5nKCk7CisgICAgICAgIFN0cmluZyByZXN1bHQgPSBmLmdldCgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInJlc3VsdCBvZiByZW1vdmVBZnRlckNhbGxpbmcgPSAiICsgcmVzdWx0KTsKKyAgICAgICAgfSBjYXRjaChFeGVjdXRpb25FeGNlcHRpb24gZWUpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiZ290IHVuZXhwZWN0ZWQgZXhjZXB0aW9uIiwgZWUpOworICAgICAgICB9CiAKLQkgICAgaW50IG51bUZpcmVBbmRGb3JnZXRzID0gbnVtOwotCSAgICBmb3IoaW50IGkgPSAwOyBpIDwgbnVtRmlyZUFuZEZvcmdldHM7IGkrKykgewotCQlleGVjdXRvci5leGVjdXRlKCBuZXcgRmlyZUFuZEZvcmdldCgpICk7Ci0JICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgRnV0dXJlPFN0cmluZz4gZiA9IHN0YXRlZnVsQmVhbkxlZ2FjeVJlbW90ZTIuaGVsbG9Bc3luYygpOworICAgICAgICBTdHJpbmcgcmVzdWx0ID0gZi5nZXQoKTsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiRGlkbid0IGdldCBSZW1vdGVFeGNlcHRpb24iKTsKKyAgICAgICAgfSBjYXRjaChFeGVjdXRpb25FeGNlcHRpb24gZWUpIHsKKyAgICAgICAgaWYoIGVlLmdldENhdXNlKCkgaW5zdGFuY2VvZiBOb1N1Y2hPYmplY3RFeGNlcHRpb24gKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSByZWNlaXZlZCBSZW1vdGVFeGNlcHRpb24iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIndyb25nIGV4Y2VwdGlvbiByZWNlaXZlZCIsCisgICAgICAgICAgICAgICAgICAgICAgIGVlKTsKKyAgICAgICAgfQorICAgICAgICB9IGNhdGNoKE5vU3VjaE9iamVjdEV4Y2VwdGlvbiBuc29lKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIE5vU3VjaE9iamVjdEV4Y2VwdGlvbiIpOworICAgICAgICB9CiAKLQkgICAgQ2FuY2VsQWZ0ZXJBbHJlYWR5RG9uZSBjYWQgPSBuZXcgQ2FuY2VsQWZ0ZXJBbHJlYWR5RG9uZSgpOwotCSAgICBleGVjdXRvci5leGVjdXRlKCBjYWQgKTsKKyAgICAgICAgcmVtb3RlQXN5bmMgPSAoUmVtb3RlQXN5bmMpIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpnbG9iYWwvIiArIGFwcE5hbWUgKyAiL1NpbmdsZXRvbkJlYW4iKTsKKyAgICAgICAgcmVtb3RlQXN5bmMuc3RhcnRUZXN0KCk7CiAKLQkgICAgUHJvY2Vzc0FzeW5jIHBBc3luY3NbXSA9IG5ldyBQcm9jZXNzQXN5bmNbbnVtXTsKLQkgICAgZm9yKGludCBpID0gMDsgaSA8IHBBc3luY3MubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgRXhlY3V0b3JTZXJ2aWNlIGV4ZWN1dG9yID0gRXhlY3V0b3JzLm5ld0NhY2hlZFRocmVhZFBvb2woKTsKIAotCQlpZiggKCBpICUgMiApID09IDAgKSB7Ci0JCSAgICBwQXN5bmNzW2ldID0gbmV3IFByb2Nlc3NBc3luYyhpLCAxLCAzLCBmYWxzZSk7Ci0JCX0gZWxzZSB7Ci0JCSAgICBwQXN5bmNzW2ldID0gbmV3IFByb2Nlc3NBc3luYyhpLCAxLCAzLCB0cnVlKTsKLQkJfQorICAgICAgICBpbnQgbnVtRmlyZUFuZEZvcmdldHMgPSBudW07CisgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW1GaXJlQW5kRm9yZ2V0czsgaSsrKSB7CisgICAgICAgIGV4ZWN1dG9yLmV4ZWN1dGUoIG5ldyBGaXJlQW5kRm9yZ2V0KCkgKTsKKyAgICAgICAgfQogCi0JCWV4ZWN1dG9yLmV4ZWN1dGUoIHBBc3luY3NbaV0gKTsKLQkgICAgfQorICAgICAgICBDYW5jZWxBZnRlckFscmVhZHlEb25lIGNhZCA9IG5ldyBDYW5jZWxBZnRlckFscmVhZHlEb25lKCk7CisgICAgICAgIGV4ZWN1dG9yLmV4ZWN1dGUoIGNhZCApOwogCi0JICAgIGV4ZWN1dG9yLnNodXRkb3duKCk7CisgICAgICAgIFByb2Nlc3NBc3luYyBwQXN5bmNzW10gPSBuZXcgUHJvY2Vzc0FzeW5jW251bV07CisgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBwQXN5bmNzLmxlbmd0aDsgaSsrKSB7CiAKLQkgICAgZXhlY3V0b3IuYXdhaXRUZXJtaW5hdGlvbigxNSwgVGltZVVuaXQuU0VDT05EUyk7CisgICAgICAgIGlmKCAoIGkgJSAyICkgPT0gMCApIHsKKyAgICAgICAgICAgIHBBc3luY3NbaV0gPSBuZXcgUHJvY2Vzc0FzeW5jKGksIDEsIDMsIGZhbHNlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBBc3luY3NbaV0gPSBuZXcgUHJvY2Vzc0FzeW5jKGksIDEsIDMsIHRydWUpOworICAgICAgICB9CiAKLQkgICAgaWYoICFjYWQuc3VjY2VzcyApIHsKLQkJdGhyb3cgbmV3IEV4Y2VwdGlvbigiQ2FuY2VsIGFmdGVyIGFscmVhZHkgZG9uZSBmYWlsZWQiKTsKLQkgICAgfQorICAgICAgICBleGVjdXRvci5leGVjdXRlKCBwQXN5bmNzW2ldICk7CisgICAgICAgIH0KIAotCSAgICBmb3IoaW50IGkgPSAwOyBpIDwgcEFzeW5jcy5sZW5ndGg7IGkrKykgewotCQlQcm9jZXNzQXN5bmMgcGEgPSBwQXN5bmNzW2ldOwotCQlpZiggIXBhLnN1Y2Nlc3MoKSApIHsKLQkJICAgIHRocm93IG5ldyBFeGNlcHRpb24ocGEuZmFpbHVyZU1zZyk7Ci0JCX0KLQkgICAgfQorICAgICAgICBleGVjdXRvci5zaHV0ZG93bigpOwogCi0JICAgIGludCBmZkNvdW50ID0gIHJlbW90ZUFzeW5jLmdldEZpcmVBbmRGb3JnZXRDb3VudCgpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZpcmVBbmRGb3JnZXQgY291bnQgPSAiICsgZmZDb3VudCArICIgZXhwZWN0ZWQgPSAiICsgCi0JCQkgICAgICAgbnVtRmlyZUFuZEZvcmdldHMpOwotCSAgICBpZiggZmZDb3VudCAhPSBudW1GaXJlQW5kRm9yZ2V0cykgewotCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCJudW1GaXJlQW5kRm9yZ2V0IG1pc21hdGNoIik7Ci0JICAgIH0KKyAgICAgICAgZXhlY3V0b3IuYXdhaXRUZXJtaW5hdGlvbigxNSwgVGltZVVuaXQuU0VDT05EUyk7CiAKLQkgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LlBBU1MpOworICAgICAgICBpZiggIWNhZC5zdWNjZXNzICkgeworICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJDYW5jZWwgYWZ0ZXIgYWxyZWFkeSBkb25lIGZhaWxlZCIpOworICAgICAgICB9CiAKLQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5GQUlMKTsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBwQXN5bmNzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIFByb2Nlc3NBc3luYyBwYSA9IHBBc3luY3NbaV07CisgICAgICAgIGlmKCAhcGEuc3VjY2VzcygpICkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihwYS5mYWlsdXJlTXNnKTsKKyAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaW50IGZmQ291bnQgPSAgcmVtb3RlQXN5bmMuZ2V0RmlyZUFuZEZvcmdldENvdW50KCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRmlyZUFuZEZvcmdldCBjb3VudCA9ICIgKyBmZkNvdW50ICsgIiBleHBlY3RlZCA9ICIgKworICAgICAgICAgICAgICAgICAgIG51bUZpcmVBbmRGb3JnZXRzKTsKKyAgICAgICAgaWYoIGZmQ291bnQgIT0gbnVtRmlyZUFuZEZvcmdldHMpIHsKKyAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigibnVtRmlyZUFuZEZvcmdldCBtaXNtYXRjaCIpOworICAgICAgICB9CisKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LlBBU1MpOworCisgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuRkFJTCk7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQogICAgIH0KIAogICAgIGNsYXNzIEZpcmVBbmRGb3JnZXQgaW1wbGVtZW50cyBSdW5uYWJsZSB7Ci0JcHVibGljIHZvaWQgcnVuKCkgewotCSAgICByZW1vdGVBc3luYy5maXJlQW5kRm9yZ2V0KCk7Ci0JfQorICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgcmVtb3RlQXN5bmMuZmlyZUFuZEZvcmdldCgpOworICAgIH0KICAgICB9CiAKICAgICBjbGFzcyBDYW5jZWxBZnRlckFscmVhZHlEb25lIGltcGxlbWVudHMgUnVubmFibGUgewotCWJvb2xlYW4gc3VjY2VzcyA9IGZhbHNlOwotCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkgICAgdHJ5IHsKLQkJLy8gYXN5YyBtZXRob2QgdGhhdCByZXR1cm5zIGltbWVkaWF0ZWx5LgotCQkvLyBTbGVlcCBmb3IgYSBiaXQgc28gdGhhdCBpdCdzIGxpa2VseSBhbHJlYWR5Ci0JCS8vIGRvbmUgYnkgdGhlIHRpbWUgd2UgY2FsbCBjYW5jZWwuICBUaGlzIHNob3VsZAotCQkvLyBleGVyY2lzZSB0aGUgcGF0aCB0aGF0IHRoZSByZXN1bHQgcGlnZ3ktYmFja3MKLQkJLy8gb24gdGhlIHJldHVybiBvZiB0aGUgY2FuY2VsIGNhbGwuCi0JCUZ1dHVyZTxTdHJpbmc+IGZ1dHVyZSA9IHJlbW90ZUFzeW5jLmhlbGxvQXN5bmMoKTsKLQkJVGhyZWFkLnNsZWVwKDIwMDApOwotCQlmdXR1cmUuY2FuY2VsKHRydWUpOwotCQlTdHJpbmcgcmVzdWx0ID0gZnV0dXJlLmdldCgpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oImNhbmNlbCBhZnRlciBkb25lID0gIiArIHJlc3VsdCk7Ci0JCXN1Y2Nlc3MgPSB0cnVlOwotCSAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIH0KLQl9CisgICAgYm9vbGVhbiBzdWNjZXNzID0gZmFsc2U7CisgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICB0cnkgeworICAgICAgICAvLyBhc3ljIG1ldGhvZCB0aGF0IHJldHVybnMgaW1tZWRpYXRlbHkuCisgICAgICAgIC8vIFNsZWVwIGZvciBhIGJpdCBzbyB0aGF0IGl0J3MgbGlrZWx5IGFscmVhZHkKKyAgICAgICAgLy8gZG9uZSBieSB0aGUgdGltZSB3ZSBjYWxsIGNhbmNlbC4gIFRoaXMgc2hvdWxkCisgICAgICAgIC8vIGV4ZXJjaXNlIHRoZSBwYXRoIHRoYXQgdGhlIHJlc3VsdCBwaWdneS1iYWNrcworICAgICAgICAvLyBvbiB0aGUgcmV0dXJuIG9mIHRoZSBjYW5jZWwgY2FsbC4KKyAgICAgICAgRnV0dXJlPFN0cmluZz4gZnV0dXJlID0gcmVtb3RlQXN5bmMuaGVsbG9Bc3luYygpOworICAgICAgICBUaHJlYWQuc2xlZXAoMjAwMCk7CisgICAgICAgIGZ1dHVyZS5jYW5jZWwodHJ1ZSk7CisgICAgICAgIFN0cmluZyByZXN1bHQgPSBmdXR1cmUuZ2V0KCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY2FuY2VsIGFmdGVyIGRvbmUgPSAiICsgcmVzdWx0KTsKKyAgICAgICAgc3VjY2VzcyA9IHRydWU7CisgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQorICAgIH0KIAogICAgIH0KIAogICAgIGNsYXNzIFByb2Nlc3NBc3luYyBpbXBsZW1lbnRzIFJ1bm5hYmxlIHsKLQlpbnQgaWQ7Ci0JaW50IGludGVydmFsOwotCWludCBudW1JbnRlcnZhbHM7Ci0JYm9vbGVhbiBjYW5jZWw7CisgICAgaW50IGlkOworICAgIGludCBpbnRlcnZhbDsKKyAgICBpbnQgbnVtSW50ZXJ2YWxzOworICAgIGJvb2xlYW4gY2FuY2VsOwogCi0JYm9vbGVhbiBjYW5jZWxsZWQ7Ci0JYm9vbGVhbiBjb21wbGV0ZWQ7CisgICAgYm9vbGVhbiBjYW5jZWxsZWQ7CisgICAgYm9vbGVhbiBjb21wbGV0ZWQ7CiAKLQlTdHJpbmcgZmFpbHVyZU1zZzsKLQlUaHJvd2FibGUgZXhjZXB0aW9uOworICAgIFN0cmluZyBmYWlsdXJlTXNnOworICAgIFRocm93YWJsZSBleGNlcHRpb247CiAKLQlwdWJsaWMgUHJvY2Vzc0FzeW5jKGludCBpLCBpbnQgaW50ZXJ2YWwsIGludCBudW1JbnRlcnZhbHMsIGJvb2xlYW4gY2FuY2VsKSB7Ci0JICAgIHRoaXMuaWQgPSBpOwotCSAgICB0aGlzLmludGVydmFsID0gaW50ZXJ2YWw7Ci0JICAgIHRoaXMubnVtSW50ZXJ2YWxzID0gbnVtSW50ZXJ2YWxzOwotCSAgICB0aGlzLmNhbmNlbCA9IGNhbmNlbDsKLQl9Ci0JcHVibGljIHZvaWQgcnVuKCkgewotCSAgICB0cnkgewotCQlGdXR1cmU8SW50ZWdlcj4gZnV0dXJlID0gCi0JCSAgICByZW1vdGVBc3luYy5wcm9jZXNzQXN5bmMoaW50ZXJ2YWwsIG51bUludGVydmFscyk7Ci0JCWlmKCBjYW5jZWwgKSB7Ci0JCSAgICBmdXR1cmUuY2FuY2VsKHRydWUpOwotCQl9IAorICAgIHB1YmxpYyBQcm9jZXNzQXN5bmMoaW50IGksIGludCBpbnRlcnZhbCwgaW50IG51bUludGVydmFscywgYm9vbGVhbiBjYW5jZWwpIHsKKyAgICAgICAgdGhpcy5pZCA9IGk7CisgICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBpbnRlcnZhbDsKKyAgICAgICAgdGhpcy5udW1JbnRlcnZhbHMgPSBudW1JbnRlcnZhbHM7CisgICAgICAgIHRoaXMuY2FuY2VsID0gY2FuY2VsOworICAgIH0KKyAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgIEZ1dHVyZTxJbnRlZ2VyPiBmdXR1cmUgPQorICAgICAgICAgICAgcmVtb3RlQXN5bmMucHJvY2Vzc0FzeW5jKGludGVydmFsLCBudW1JbnRlcnZhbHMpOworICAgICAgICBpZiggY2FuY2VsICkgeworICAgICAgICAgICAgZnV0dXJlLmNhbmNlbCh0cnVlKTsKKyAgICAgICAgfQogCi0JCUludGVnZXIgcmVzdWx0ID0gZnV0dXJlLmdldCgpOworICAgICAgICBJbnRlZ2VyIHJlc3VsdCA9IGZ1dHVyZS5nZXQoKTsKIAotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlByb2Nlc3NBc3luYyByZXN1bHQgOiAiICsgcmVzdWx0KTsKLQkJY29tcGxldGVkID0gdHJ1ZTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQcm9jZXNzQXN5bmMgcmVzdWx0IDogIiArIHJlc3VsdCk7CisgICAgICAgIGNvbXBsZXRlZCA9IHRydWU7CiAKLQkgICAgfSBjYXRjaChFeGVjdXRpb25FeGNlcHRpb24gZWUpIHsKLQkJZXhjZXB0aW9uID0gZWUuZ2V0Q2F1c2UoKTsKLQkJaWYoIGV4Y2VwdGlvbi5nZXRDbGFzcygpLmdldE5hbWUoKS5lcXVhbHMoImphdmEubGFuZy5FeGNlcHRpb24iKSApIHsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUHJvY2Vzc0FzeW5jIHN1Y2Nlc2Z1bGx5IGNhbmNlbGxlZCIpOwotCQkgICAgY2FuY2VsbGVkID0gdHJ1ZTsKLQkJfQotCSAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JCWV4Y2VwdGlvbiA9IGU7IAotCSAgICB9Ci0JfQorICAgICAgICB9IGNhdGNoKEV4ZWN1dGlvbkV4Y2VwdGlvbiBlZSkgeworICAgICAgICBleGNlcHRpb24gPSBlZS5nZXRDYXVzZSgpOworICAgICAgICBpZiggZXhjZXB0aW9uLmdldENsYXNzKCkuZ2V0TmFtZSgpLmVxdWFscygiamF2YS5sYW5nLkV4Y2VwdGlvbiIpICkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQcm9jZXNzQXN5bmMgc3VjY2VzZnVsbHkgY2FuY2VsbGVkIik7CisgICAgICAgICAgICBjYW5jZWxsZWQgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZXhjZXB0aW9uID0gZTsKKyAgICAgICAgfQorICAgIH0KIAotCXB1YmxpYyBib29sZWFuIHN1Y2Nlc3MoKSB7Ci0JICAgIGJvb2xlYW4gc3VjY2VlZGVkID0gdHJ1ZTsKLQkgICAgaWYgKGNhbmNlbCAmJiAhY2FuY2VsbGVkKSB7Ci0JCXN1Y2NlZWRlZCA9IGZhbHNlOwotCQlmYWlsdXJlTXNnID0gInBhc3luYyAiICsgaWQgKyAiIHdhcyBub3QgY2FuY2VsbGVkIHN1Y2Nlc3NmdWxseSI7Ci0JICAgIH0gZWxzZSBpZiggIWNhbmNlbCAmJiAhY29tcGxldGVkICkgewotCQlzdWNjZWVkZWQgPSBmYWxzZTsKLQkJZmFpbHVyZU1zZyA9ICJwYXN5bmMgIiArIGlkICsgIiBkaWQgbm90IGNvbXBsZXRlIHN1Y2Nlc3NmdWxseSI7Ci0JICAgIH0KKyAgICBwdWJsaWMgYm9vbGVhbiBzdWNjZXNzKCkgeworICAgICAgICBib29sZWFuIHN1Y2NlZWRlZCA9IHRydWU7CisgICAgICAgIGlmIChjYW5jZWwgJiYgIWNhbmNlbGxlZCkgeworICAgICAgICBzdWNjZWVkZWQgPSBmYWxzZTsKKyAgICAgICAgZmFpbHVyZU1zZyA9ICJwYXN5bmMgIiArIGlkICsgIiB3YXMgbm90IGNhbmNlbGxlZCBzdWNjZXNzZnVsbHkiOworICAgICAgICB9IGVsc2UgaWYoICFjYW5jZWwgJiYgIWNvbXBsZXRlZCApIHsKKyAgICAgICAgc3VjY2VlZGVkID0gZmFsc2U7CisgICAgICAgIGZhaWx1cmVNc2cgPSAicGFzeW5jICIgKyBpZCArICIgZGlkIG5vdCBjb21wbGV0ZSBzdWNjZXNzZnVsbHkiOworICAgICAgICB9CiAKLQkgICAgcmV0dXJuIHN1Y2NlZWRlZDsKLQl9CisgICAgICAgIHJldHVybiBzdWNjZWVkZWQ7CisgICAgfQogCiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvYXN5bmNocm9ub3VzL3JlbW90ZS9lamIvUmVtb3RlQXN5bmMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9hc3luY2hyb25vdXMvcmVtb3RlL2VqYi9SZW1vdGVBc3luYy5qYXZhCmluZGV4IDYzNTQ2MTIuLmQyMTAyNWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9hc3luY2hyb25vdXMvcmVtb3RlL2VqYi9SZW1vdGVBc3luYy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9hc3luY2hyb25vdXMvcmVtb3RlL2VqYi9SZW1vdGVBc3luYy5qYXZhCkBAIC0yNSwxNCArMjUsMTQgQEAKICAgICB2b2lkIHN0YXJ0VGVzdCgpOwogCiAgICAgdm9pZCBmaXJlQW5kRm9yZ2V0KCk7Ci0gICAgCisKICAgICBwdWJsaWMgaW50IGdldEZpcmVBbmRGb3JnZXRDb3VudCgpOwogCiAgICAgRnV0dXJlPFN0cmluZz4gaGVsbG9Bc3luYygpOwogCi0gICAgRnV0dXJlPEludGVnZXI+IHByb2Nlc3NBc3luYyhpbnQgc2xlZXBJbnRlcnZhbCwgaW50IG51bUludGVydmFscykgCi0JdGhyb3dzIEV4Y2VwdGlvbjsKKyAgICBGdXR1cmU8SW50ZWdlcj4gcHJvY2Vzc0FzeW5jKGludCBzbGVlcEludGVydmFsLCBpbnQgbnVtSW50ZXJ2YWxzKQorICAgIHRocm93cyBFeGNlcHRpb247CiAKLQkKKwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvYXN5bmNocm9ub3VzL3JlbW90ZS9lamIvUmVtb3RlQXN5bmMzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvYXN5bmNocm9ub3VzL3JlbW90ZS9lamIvUmVtb3RlQXN5bmMzLmphdmEKaW5kZXggM2M3NjI4My4uMTc1YWUwNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2FzeW5jaHJvbm91cy9yZW1vdGUvZWpiL1JlbW90ZUFzeW5jMy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9hc3luY2hyb25vdXMvcmVtb3RlL2VqYi9SZW1vdGVBc3luYzMuamF2YQpAQCAtMjQsOSArMjQsOSBAQAogCiAKICAgICBwdWJsaWMgRnV0dXJlPFN0cmluZz4gaGVsbG9Bc3luYygpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgRnV0dXJlPFN0cmluZz4gcmVtb3ZlQWZ0ZXJDYWxsaW5nKCkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIHB1YmxpYyBGdXR1cmU8U3RyaW5nPiB0aHJvd0V4Y2VwdGlvbihTdHJpbmcgZXhjZXB0aW9uKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uLCBDcmVhdGVFeGNlcHRpb247Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9hc3luY2hyb25vdXMvcmVtb3RlL2VqYi9TaW5nbGV0b25CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvYXN5bmNocm9ub3VzL3JlbW90ZS9lamIvU2luZ2xldG9uQmVhbi5qYXZhCmluZGV4IGIzZDg2MjA3Li41YmJiNzBiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvYXN5bmNocm9ub3VzL3JlbW90ZS9lamIvU2luZ2xldG9uQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9hc3luY2hyb25vdXMvcmVtb3RlL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKQEAgLTQwLDU4ICs0MCw1OCBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHN0YXJ0VGVzdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImluIFNpbmdsZXRvbkJlYW46OnN0YXJ0VGVzdCgpIik7Ci0JLy8gcmVzZXQgc3RhdGUKLQlmaXJlQW5kRm9yZ2V0Q291bnQgPSBuZXcgQXRvbWljSW50ZWdlcigpOwotCXJldHVybjsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIFNpbmdsZXRvbkJlYW46OnN0YXJ0VGVzdCgpIik7CisgICAgLy8gcmVzZXQgc3RhdGUKKyAgICBmaXJlQW5kRm9yZ2V0Q291bnQgPSBuZXcgQXRvbWljSW50ZWdlcigpOworICAgIHJldHVybjsKICAgICB9CiAKICAgICBAQXN5bmNocm9ub3VzCiAgICAgcHVibGljIHZvaWQgZmlyZUFuZEZvcmdldCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46OmZpcmVBbmRGb3JnZXQoKSIpOwotCWZpcmVBbmRGb3JnZXRDb3VudC5pbmNyZW1lbnRBbmRHZXQoKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46OmZpcmVBbmRGb3JnZXQoKSIpOworICAgIGZpcmVBbmRGb3JnZXRDb3VudC5pbmNyZW1lbnRBbmRHZXQoKTsKICAgICB9CiAKICAgICBwdWJsaWMgaW50IGdldEZpcmVBbmRGb3JnZXRDb3VudCgpIHsKLQlyZXR1cm4gZmlyZUFuZEZvcmdldENvdW50LmdldCgpOworICAgIHJldHVybiBmaXJlQW5kRm9yZ2V0Q291bnQuZ2V0KCk7CiAgICAgfQogCiAgICAgQEFzeW5jaHJvbm91cwogICAgIHB1YmxpYyBGdXR1cmU8U3RyaW5nPiBoZWxsb0FzeW5jKCkgewotCXJldHVybiBuZXcgQXN5bmNSZXN1bHQ8U3RyaW5nPigiaGVsbG8sIHdvcmxkXG4iKTsKKyAgICByZXR1cm4gbmV3IEFzeW5jUmVzdWx0PFN0cmluZz4oImhlbGxvLCB3b3JsZFxuIik7CiAgICAgfQogCiAgICAgQEFzeW5jaHJvbm91cwotICAgIHB1YmxpYyBGdXR1cmU8SW50ZWdlcj4gcHJvY2Vzc0FzeW5jKGludCBzbGVlcEludGVydmFsLCBpbnQgbnVtSW50ZXJ2YWxzKSAKKyAgICBwdWJsaWMgRnV0dXJlPEludGVnZXI+IHByb2Nlc3NBc3luYyhpbnQgc2xlZXBJbnRlcnZhbCwgaW50IG51bUludGVydmFscykKICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLQlpbnQgbWUgPSBwcm9jZXNzQXN5bmNDb3VudC5pbmNyZW1lbnRBbmRHZXQoKTsKLQlib29sZWFuIGNhbmNlbGxlZCA9IGZhbHNlOwotCWludCBpID0gMDsKLQl3aGlsZShpIDwgbnVtSW50ZXJ2YWxzKSB7Ci0JICAgIGkrKzsKLQkgICAgaWYoIHNlc3Npb25DdHgud2FzQ2FuY2VsQ2FsbGVkKCkgKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQ2FuY2VsbGluZyBwcm9jZXNzQXN5bmMgIiArIG1lICsgIiBhZnRlciAiICsKLQkJCQkgICBpICsgIiBpbnRlcnZhbHMiKTsKLQkJY2FuY2VsbGVkID0gdHJ1ZTsKLQkJYnJlYWs7Ci0JICAgIH0KLQkgICAgdHJ5IHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJTbGVlcGluZyBmb3IgIiArIGkgKyAidGggdGltZSBpbiBwcm9jZXNzQXN5bmMgIiArCi0JCQkJICAgbWUpOwotCQlUaHJlYWQuc2xlZXAoc2xlZXBJbnRlcnZhbCAqIDEwMDApOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIldva2UgdXAgZm9yICIgKyBpICsgInRoIHRpbWUgaW4gcHJvY2Vzc0FzeW5jICIgKwotCQkJCSAgIG1lKTsKLQkgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewotCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwotCSAgICB9Ci0JfQotCQotCWlmKCBjYW5jZWxsZWQgKSB7Ci0JICAgIHRocm93IG5ldyBFeGNlcHRpb24oIkNhbmNlbGxlZCBwcm9jZXNzQXN5bmMgIiArIG1lKTsKLQl9CisgICAgaW50IG1lID0gcHJvY2Vzc0FzeW5jQ291bnQuaW5jcmVtZW50QW5kR2V0KCk7CisgICAgYm9vbGVhbiBjYW5jZWxsZWQgPSBmYWxzZTsKKyAgICBpbnQgaSA9IDA7CisgICAgd2hpbGUoaSA8IG51bUludGVydmFscykgeworICAgICAgICBpKys7CisgICAgICAgIGlmKCBzZXNzaW9uQ3R4Lndhc0NhbmNlbENhbGxlZCgpICkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhbmNlbGxpbmcgcHJvY2Vzc0FzeW5jICIgKyBtZSArICIgYWZ0ZXIgIiArCisgICAgICAgICAgICAgICAgICAgaSArICIgaW50ZXJ2YWxzIik7CisgICAgICAgIGNhbmNlbGxlZCA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHRyeSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2xlZXBpbmcgZm9yICIgKyBpICsgInRoIHRpbWUgaW4gcHJvY2Vzc0FzeW5jICIgKworICAgICAgICAgICAgICAgICAgIG1lKTsKKyAgICAgICAgVGhyZWFkLnNsZWVwKHNsZWVwSW50ZXJ2YWwgKiAxMDAwKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXb2tlIHVwIGZvciAiICsgaSArICJ0aCB0aW1lIGluIHByb2Nlc3NBc3luYyAiICsKKyAgICAgICAgICAgICAgICAgICBtZSk7CisgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlKTsKKyAgICAgICAgfQorICAgIH0KIAotCXJldHVybiBuZXcgQXN5bmNSZXN1bHQ8SW50ZWdlcj4obnVtSW50ZXJ2YWxzKTsKKyAgICBpZiggY2FuY2VsbGVkICkgeworICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJDYW5jZWxsZWQgcHJvY2Vzc0FzeW5jICIgKyBtZSk7CisgICAgfQorCisgICAgcmV0dXJuIG5ldyBBc3luY1Jlc3VsdDxJbnRlZ2VyPihudW1JbnRlcnZhbHMpOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvYXN5bmNocm9ub3VzL3JlbW90ZS9lamIvU3RhdGVmdWxCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvYXN5bmNocm9ub3VzL3JlbW90ZS9lamIvU3RhdGVmdWxCZWFuLmphdmEKaW5kZXggOTA4OTEzMS4uYTQzMTlmNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2FzeW5jaHJvbm91cy9yZW1vdGUvZWpiL1N0YXRlZnVsQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9hc3luY2hyb25vdXMvcmVtb3RlL2VqYi9TdGF0ZWZ1bEJlYW4uamF2YQpAQCAtMzUsMjUgKzM1LDI1IEBACiAKICAgICBAQXN5bmNocm9ub3VzCiAgICAgcHVibGljIEZ1dHVyZTxTdHJpbmc+IGhlbGxvQXN5bmMoKSB7Ci0JcmV0dXJuIG5ldyBBc3luY1Jlc3VsdDxTdHJpbmc+KCJoZWxsbywgd29ybGRcbiIpOworICAgIHJldHVybiBuZXcgQXN5bmNSZXN1bHQ8U3RyaW5nPigiaGVsbG8sIHdvcmxkXG4iKTsKICAgICB9CiAKICAgICBAQXN5bmNocm9ub3VzCiAgICAgQFJlbW92ZQogICAgIHB1YmxpYyBGdXR1cmU8U3RyaW5nPiByZW1vdmVBZnRlckNhbGxpbmcoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWZ1bEJlYW46OnJlbW92ZUFmdGVyQ2FsbGluZygpIik7Ci0JcmV0dXJuIG5ldyBBc3luY1Jlc3VsdDxTdHJpbmc+KCJyZW1vdmVkIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWZ1bEJlYW46OnJlbW92ZUFmdGVyQ2FsbGluZygpIik7CisgICAgcmV0dXJuIG5ldyBBc3luY1Jlc3VsdDxTdHJpbmc+KCJyZW1vdmVkIik7CiAgICAgfQogCiAgICAgQEFzeW5jaHJvbm91cwotCXB1YmxpYyBGdXR1cmU8U3RyaW5nPiB0aHJvd0V4Y2VwdGlvbihTdHJpbmcgZXhjZXB0aW9uKSB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsKLQlpZiggZXhjZXB0aW9uLmVxdWFscygiamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uIikgKSB7Ci0JICAgIHRocm93IG5ldyBDcmVhdGVFeGNlcHRpb24oKTsKLQl9IGVsc2UgaWYgKCBleGNlcHRpb24uZXF1YWxzKCJqYWthcnRhLmVqYi5FSkJFeGNlcHRpb24iKSApIHsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigpOwotCX0KKyAgICBwdWJsaWMgRnV0dXJlPFN0cmluZz4gdGhyb3dFeGNlcHRpb24oU3RyaW5nIGV4Y2VwdGlvbikgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7CisgICAgaWYoIGV4Y2VwdGlvbi5lcXVhbHMoImpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbiIpICkgeworICAgICAgICB0aHJvdyBuZXcgQ3JlYXRlRXhjZXB0aW9uKCk7CisgICAgfSBlbHNlIGlmICggZXhjZXB0aW9uLmVxdWFscygiamFrYXJ0YS5lamIuRUpCRXhjZXB0aW9uIikgKSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oKTsKKyAgICB9CiAKLQlyZXR1cm4gbmV3IEFzeW5jUmVzdWx0PFN0cmluZz4oInVuc3VwcG9ydGVkIGV4Y2VwdGlvbiB0eXBlIik7CisgICAgcmV0dXJuIG5ldyBBc3luY1Jlc3VsdDxTdHJpbmc+KCJ1bnN1cHBvcnRlZCBleGNlcHRpb24gdHlwZSIpOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvYXN5bmNocm9ub3VzL3RocmVhZHBvb2xjb25maWcvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9hc3luY2hyb25vdXMvdGhyZWFkcG9vbGNvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGYyMTFlNjQuLjBiN2M5M2MgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9hc3luY2hyb25vdXMvdGhyZWFkcG9vbGNvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9hc3luY2hyb25vdXMvdGhyZWFkcG9vbGNvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMyArMTUsMTMgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lamIzMS1hc3luY2hyb25vdXMtdGhyZWFkcG9vbGNvbmZpZyIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gCi08cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgICAKLTxwcm9wZXJ0eSBuYW1lPSJudW1PZkludm9jYXRpb25zIiB2YWx1ZT0iMTAwIi8+ICAgIAotPHByb3BlcnR5IG5hbWU9Im1heFBvb2xTaXplIiB2YWx1ZT0iMzIiLz4gICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPlx1MDAyMAorPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICBcdTAwMjAKKzxwcm9wZXJ0eSBuYW1lPSJudW1PZkludm9jYXRpb25zIiB2YWx1ZT0iMTAwIi8+ICAgXHUwMDIwCis8cHJvcGVydHkgbmFtZT0ibWF4UG9vbFNpemUiIHZhbHVlPSIzMiIvPiAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InNlLmNsaWVudCIgdmFsdWU9InRlc3QuQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZ2xhc3NmaXNoLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9nbGFzc2Zpc2gtZWpiLWphci54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9hc3luY2hyb25vdXMvdGhyZWFkcG9vbGNvbmZpZy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvYXN5bmNocm9ub3VzL3RocmVhZHBvb2xjb25maWcvYnVpbGQueG1sCmluZGV4IDhkMmEyM2MuLjkyYmI4YmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9hc3luY2hyb25vdXMvdGhyZWFkcG9vbGNvbmZpZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2FzeW5jaHJvbm91cy90aHJlYWRwb29sY29uZmlnL2J1aWxkLnhtbApAQCAtMjksMTUgKzI5LDE1IEBACiAgICAgJmNvbW1vbkJ1aWxkOwogICAgICZ0ZXN0cHJvcGVydGllczsKIAotICAgIDwhLS0gbm90ZSB0aGF0IHdlIGRvbid0IHVuZGVwbG95IGFzIHBhcnQgb2YgYWxsIHRhcmdldCBzbyAKKyAgICA8IS0tIG5vdGUgdGhhdCB3ZSBkb24ndCB1bmRlcGxveSBhcyBwYXJ0IG9mIGFsbCB0YXJnZXQgc28KICAgICB0aGF0IHRvcC1sZXZlbCBidWlsZCBzY3JpcHQgY2FuIHJ1biByZW1vdGUyIGZpcnN0IC0tPgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLGRlcGxveSxydW4sIHVuZGVwbG95Ii8+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ5LDEyICs0OSwxMiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZWpiLWphci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0hlbGxvKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qYXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw5ICs2Miw5IEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5fc2UiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuX3NlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgPGphdmEgIGZvcms9Im9uIiAKKyAgICAgICA8amF2YSAgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSIke3NlLmNsaWVudH0iPgpAQCAtNzUsNyArNzUsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWphci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2FzeW5jaHJvbm91cy90aHJlYWRwb29sY29uZmlnL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9hc3luY2hyb25vdXMvdGhyZWFkcG9vbGNvbmZpZy9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMGQ4MGFlYi4uODYyNmZmYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2FzeW5jaHJvbm91cy90aHJlYWRwb29sY29uZmlnL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvYXN5bmNocm9ub3VzL3RocmVhZHBvb2xjb25maWcvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRocmVhZE5hbWVQcmVmaXggPSAiX19lamItdGhyZWFkLXBvb2wiOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JYXBwTmFtZSA9IGFyZ3NbMF07IAorICAgIGFwcE5hbWUgPSBhcmdzWzBdOwogICAgICAgICBpZihhcmdzLmxlbmd0aCA+PSAyKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIG51bU9mSW52b2NhdGlvbnMgPSBJbnRlZ2VyLnBhcnNlSW50KGFyZ3NbMV0pOwpAQCAtNDQsOSArNDQsOSBAQAogICAgICAgICAgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsgIC8vaWdub3JlCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLQlzdGF0LmFkZERlc2NyaXB0aW9uKGFwcE5hbWUpOwotCUNsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7ICAgICAgIAotICAgICAgICBjbGllbnQuZG9UZXN0KCk7CQorICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oYXBwTmFtZSk7CisgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKKyAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShhcHBOYW1lICsgIklEIik7CiAgICAgfQogCkBAIC02NCw3ICs2NCw3IEBACiAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW1PZkludm9jYXRpb25zOyBpKyspIHsKICAgICAgICAgICAgIHJlc3VsdHMuYWRkKGhlbGxvQmVhbi5nZXRUaHJlYWROYW1lSWQoKSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgZm9yKEZ1dHVyZTxTdHJpbmc+IGYgOiByZXN1bHRzKSB7CiAgICAgICAgICAgICBTdHJpbmcgcyA9IGYuZ2V0KCk7CiAgICAgICAgICAgICBTdHJpbmcgdGhyZWFkTmFtZSA9IHMuc3BsaXQoIiAiKVswXTsKQEAgLTc2LDcgKzc2LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk51bWJlciBvZiByZXN1bHRzOiAiICsgcmVzdWx0cy5zaXplKCkpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFsbCAiICsgYWNjZXB0YWJsZVRocmVhZE5hbWVzLnNpemUoKSArIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFsbCAiICsgYWNjZXB0YWJsZVRocmVhZE5hbWVzLnNpemUoKSArCiAgICAgICAgICAgICAiIGFjY2VwdGFibGUgdGhyZWFkIG5hbWVzOiAiICsgYWNjZXB0YWJsZVRocmVhZE5hbWVzKTsKICAgICAgICAgc3RhdC5hZGRTdGF0dXMoYXBwTmFtZSwgKGZhaWxlZCA/IHN0YXQuRkFJTDogc3RhdC5QQVNTKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2FzeW5jaHJvbm91cy90aHJlYWRwb29sY29uZmlnL2VqYi9IZWxsb0JlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9hc3luY2hyb25vdXMvdGhyZWFkcG9vbGNvbmZpZy9lamIvSGVsbG9CZWFuLmphdmEKaW5kZXggNDRjNTE0MS4uMGI5NzQzYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2FzeW5jaHJvbm91cy90aHJlYWRwb29sY29uZmlnL2VqYi9IZWxsb0JlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvYXN5bmNocm9ub3VzL3RocmVhZHBvb2xjb25maWcvZWpiL0hlbGxvQmVhbi5qYXZhCkBAIC0zMSw2ICszMSw2IEBACiAgICAgICAgIH0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKICAgICAgICAgfQogICAgICAgICBUaHJlYWQgdGggPSBUaHJlYWQuY3VycmVudFRocmVhZCgpOwotCXJldHVybiBuZXcgQXN5bmNSZXN1bHQ8U3RyaW5nPih0aC5nZXROYW1lKCkgKyAiICIgKyBTeXN0ZW0uaWRlbnRpdHlIYXNoQ29kZSh0aCkpOworICAgIHJldHVybiBuZXcgQXN5bmNSZXN1bHQ8U3RyaW5nPih0aC5nZXROYW1lKCkgKyAiICIgKyBTeXN0ZW0uaWRlbnRpdHlIYXNoQ29kZSh0aCkpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvYnVpbGQueG1sCmluZGV4IDVhMTA4OWMuLjc4ODNiNWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2J1aWxkLnhtbApAQCAtOTIsOSArOTIsOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+Ci0JCVVzYWdlOgotCQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamItZWpiMzEgdGVzdHMpCi0JPC9lY2hvPgorICAgIDxlY2hvPgorICAgICAgICBVc2FnZToKKyAgICAgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZWpiLWVqYjMxIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2J1aWxkLnhtbAppbmRleCAxNzNiODVkLi44Y2MwMmExIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvYnVpbGQueG1sCkBAIC03MCw5ICs3MCw5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYi1lamIzMS1lamJsaXRlIHRlc3RzKQotCTwvZWNobz4KKyAgICA8ZWNobz4KKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYi1lamIzMS1lamJsaXRlIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2dlbmVyaWNzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9nZW5lcmljcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDg2N2JhMGUuLjc4MjY1ZjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2dlbmVyaWNzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvZ2VuZXJpY3MvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzEtZWpibGl0ZS1nZW5lcmljcyIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPlx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InNlLmNsaWVudCIgdmFsdWU9ImNvbS5zdW4uczFhcy5kZXZ0ZXN0cy5lamIuZ2VuZXJpY3MuQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIke21vZHVsZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2dlbmVyaWNzL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2dlbmVyaWNzL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA2NTA3OGRmLi42MTllZmZjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9nZW5lcmljcy9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvZ2VuZXJpY3MvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yOCwxMSArMjgsMTEgQEAKICAqIGlzc3VlIDE3MjM1IERlcGVuZGVuY3kgSW5qZWN0aW9uIGRvZXNuJ3Qgd29yayBmb3Igb3ZlcmxvYWRlZCBtZXRob2RzIGFjY2VwdGluZyBnZW5lcmljLXR5cGUgcGFyYW1ldGVyCiAgKiBETyBOT1QgVEVTVDogaXNzdWUgMTYzNzIgTm90IGFibGUgdG8gbWFrZSB0b1N0cmluZygpIGEgZmluYWwgbWV0aG9kIGluIEVKQiB3aXRoIG5vLWludGVyZmFjZSB2aWV3CiAgKiB2ZXJpZmllZCBpbiBUeXBlVmFyaWFibGVCZWFuCi0gKiAKKyAqCiAgKi8KIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBhcHBOYW1lOwpAQCAtNDAsNDMgKzQwLDQzIEBACiAgICAgcHJpdmF0ZSBTdHJpbmcgcG9ydDsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKLQlhcHBOYW1lID0gYXJnc1swXTsKLQlzdGF0LmFkZERlc2NyaXB0aW9uKGFwcE5hbWUpOwotCUNsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOyAgICAgICAKLSAgICAgICAgY2xpZW50LmRvVGVzdCgpOwkKKyAgICBhcHBOYW1lID0gYXJnc1swXTsKKyAgICBzdGF0LmFkZERlc2NyaXB0aW9uKGFwcE5hbWUpOworICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOworICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KGFwcE5hbWUgKyAiSUQiKTsKICAgICB9CiAKICAgICBwdWJsaWMgQ2xpZW50KFN0cmluZ1tdIGFyZ3MpIHsKLQlob3N0ID0gYXJnc1sxXTsKKyAgICBob3N0ID0gYXJnc1sxXTsKICAgICAgICAgcG9ydCA9IGFyZ3NbMl07CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotCXRyeSB7Ci0JICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIAorICAgIHRyeSB7CisgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArCiAgICAgICAgICAgICAgICAgIi8iICsgYXBwTmFtZSArICIvVGVzdFNlcnZsZXQiOwogCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImludm9raW5nIHdlYmNsaWVudCBzZXJ2bGV0IGF0ICIgKyB1cmwpOwogCi0JICAgIFVSTCB1ID0gbmV3IFVSTCh1cmwpOwotICAgICAgICAKLQkgICAgSHR0cFVSTENvbm5lY3Rpb24gYzEgPSAoSHR0cFVSTENvbm5lY3Rpb24pdS5vcGVuQ29ubmVjdGlvbigpOwotCSAgICBpbnQgY29kZSA9IGMxLmdldFJlc3BvbnNlQ29kZSgpOwotCSAgICBJbnB1dFN0cmVhbSBpcyA9IGMxLmdldElucHV0U3RyZWFtKCk7Ci0JICAgIEJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyIChuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKLQkgICAgU3RyaW5nIGxpbmUgPSBudWxsOwotCSAgICB3aGlsZSgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpCi0JCVN5c3RlbS5vdXQucHJpbnRsbihsaW5lKTsKLQkgICAgaWYoY29kZSAhPSAyMDApIHsKLQkJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkluY29ycmVjdCByZXR1cm4gY29kZTogIiArIGNvZGUpOwotCSAgICB9Ci0JICAgIAotCSAgICBzdGF0LmFkZFN0YXR1cyhhcHBOYW1lLCBzdGF0LlBBU1MpOworICAgICAgICBVUkwgdSA9IG5ldyBVUkwodXJsKTsKIAotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoYXBwTmFtZSwgc3RhdC5GQUlMKTsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGMxID0gKEh0dHBVUkxDb25uZWN0aW9uKXUub3BlbkNvbm5lY3Rpb24oKTsKKyAgICAgICAgaW50IGNvZGUgPSBjMS5nZXRSZXNwb25zZUNvZGUoKTsKKyAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBjMS5nZXRJbnB1dFN0cmVhbSgpOworICAgICAgICBCdWZmZXJlZFJlYWRlciBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlciAobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CisgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKKyAgICAgICAgd2hpbGUoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obGluZSk7CisgICAgICAgIGlmKGNvZGUgIT0gMjAwKSB7CisgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJJbmNvcnJlY3QgcmV0dXJuIGNvZGU6ICIgKyBjb2RlKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXQuYWRkU3RhdHVzKGFwcE5hbWUsIHN0YXQuUEFTUyk7CisKKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKGFwcE5hbWUsIHN0YXQuRkFJTCk7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2dlbmVyaWNzL3dhci9BYnN0cmFjdEJhc2VFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2dlbmVyaWNzL3dhci9BYnN0cmFjdEJhc2VFSkIuamF2YQppbmRleCAzZDYxYjcxLi5jZjdjYTYzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9nZW5lcmljcy93YXIvQWJzdHJhY3RCYXNlRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvZ2VuZXJpY3Mvd2FyL0Fic3RyYWN0QmFzZUVKQi5qYXZhCkBAIC01MSw0ICs1MSw0IEBACiAgICAgYWJzdHJhY3QgcHVibGljIHZvaWQgZG9Tb21ldGhpbmc1KExpc3Q8VD4gdCk7CiAKICAgICBhYnN0cmFjdCBwdWJsaWMgdm9pZCBkb1NvbWV0aGluZzYoTGlzdDxMaXN0PFQ+PiB0KTsKLX0gCit9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9nZW5lcmljcy93YXIvVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2dlbmVyaWNzL3dhci9UZXN0U2VydmxldC5qYXZhCmluZGV4IDQyOWE3OTMuLjAyZWI5MzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2dlbmVyaWNzL3dhci9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2dlbmVyaWNzL3dhci9UZXN0U2VydmxldC5qYXZhCkBAIC00Myw3ICs0Myw3IEBACiAgICAgICAgIHRlc3RCZWFuLmRvU29tZXRoaW5nNShudWxsKTsKICAgICAgICAgdGVzdEJlYW4uZG9Tb21ldGhpbmc2KG51bGwpOwogICAgICAgICBvdXQucHJpbnRsbih0ZXN0QmVhbi5oZWxsbygpKTsKLSAgICAgICAgb3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSBjYWxsZWQgbWV0aG9kcyBvbiAiICsgdGVzdEJlYW4pOyAKKyAgICAgICAgb3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSBjYWxsZWQgbWV0aG9kcyBvbiAiICsgdGVzdEJlYW4pOwogCiAgICAgICAgIG91dC5wcmludGxuKHR5cGVWYXJpYWJsZUJlYW4uaGVsbG8oInNvbWUgdGV4dCIpKTsKICAgICAgICAgb3V0LnByaW50bG4odHlwZVZhcmlhYmxlQmVhbi5oZWxsbygxMCkpOwpAQCAtNjIsNCArNjIsNCBAQAogICAgICAgICBwcm9jZXNzUmVxdWVzdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogfQotICAgICAgICAKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGUyYTZhYmEuLjBiNDAxYjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEzICsxNSwxMyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMxLWVqYmxpdGUtamF2YW1vZHVsZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gCi08cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+XHUwMDIwCis8cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InNlLmNsaWVudCIgdmFsdWU9ImNvbS5hY21lLkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iJHttb2R1bGV9Ii8+Ci0JCisKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL2J1aWxkLnhtbAppbmRleCBkNTQ0MzlhLi41ODg3YjQxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9IndhciIvPgpAQCAtNDgsOSArNDgsOSBAQAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9ImZhbHNlIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTU4LDkgKzU4LDkgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bl9zZSIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW5fc2UiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgIDxqYXZhICBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9IiR7c2UuY2xpZW50fSI+CkBAIC03Miw3ICs3Miw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGMyOThhNGIuLmMxOGNkZTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNiw3ICsyNiw3IEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBhcHBOYW1lOwpAQCAtMzQsNDYgKzM0LDQ2IEBACiAgICAgcHJpdmF0ZSBTdHJpbmcgcG9ydDsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKLQlhcHBOYW1lID0gYXJnc1swXTsKLQlzdGF0LmFkZERlc2NyaXB0aW9uKGFwcE5hbWUpOwotCUNsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOyAgICAgICAKLSAgICAgICAgY2xpZW50LmRvVGVzdCgpOwkKKyAgICBhcHBOYW1lID0gYXJnc1swXTsKKyAgICBzdGF0LmFkZERlc2NyaXB0aW9uKGFwcE5hbWUpOworICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOworICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KGFwcE5hbWUgKyAiSUQiKTsKICAgICB9CiAKICAgICBwdWJsaWMgQ2xpZW50KFN0cmluZ1tdIGFyZ3MpIHsKLQlob3N0ID0gYXJnc1sxXTsKKyAgICBob3N0ID0gYXJnc1sxXTsKICAgICAgICAgcG9ydCA9IGFyZ3NbMl07CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogCi0JdHJ5IHsKKyAgICB0cnkgewogCi0JICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIAorICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKwogICAgICAgICAgICAgICAgICIvIiArIGFwcE5hbWUgKyAiL0hlbGxvU2VydmxldCI7CiAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW52b2tpbmcgd2ViY2xpZW50IHNlcnZsZXQgYXQgIiArIHVybCk7CiAKLQkgICAgVVJMIHUgPSBuZXcgVVJMKHVybCk7Ci0gICAgICAgIAotCSAgICBIdHRwVVJMQ29ubmVjdGlvbiBjMSA9IChIdHRwVVJMQ29ubmVjdGlvbil1Lm9wZW5Db25uZWN0aW9uKCk7Ci0JICAgIGludCBjb2RlID0gYzEuZ2V0UmVzcG9uc2VDb2RlKCk7Ci0JICAgIElucHV0U3RyZWFtIGlzID0gYzEuZ2V0SW5wdXRTdHJlYW0oKTsKLQkgICAgQnVmZmVyZWRSZWFkZXIgaW5wdXQgPSBuZXcgQnVmZmVyZWRSZWFkZXIgKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwotCSAgICBTdHJpbmcgbGluZSA9IG51bGw7Ci0JICAgIHdoaWxlKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkKLQkJU3lzdGVtLm91dC5wcmludGxuKGxpbmUpOwotCSAgICBpZihjb2RlICE9IDIwMCkgewotCQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiSW5jb3JyZWN0IHJldHVybiBjb2RlOiAiICsgY29kZSk7Ci0JICAgIH0KLQkgICAgCi0JICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5QQVNTKTsKKyAgICAgICAgVVJMIHUgPSBuZXcgVVJMKHVybCk7CiAKLQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5GQUlMKTsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGMxID0gKEh0dHBVUkxDb25uZWN0aW9uKXUub3BlbkNvbm5lY3Rpb24oKTsKKyAgICAgICAgaW50IGNvZGUgPSBjMS5nZXRSZXNwb25zZUNvZGUoKTsKKyAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBjMS5nZXRJbnB1dFN0cmVhbSgpOworICAgICAgICBCdWZmZXJlZFJlYWRlciBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlciAobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CisgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKKyAgICAgICAgd2hpbGUoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obGluZSk7CisgICAgICAgIGlmKGNvZGUgIT0gMjAwKSB7CisgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJJbmNvcnJlY3QgcmV0dXJuIGNvZGU6ICIgKyBjb2RlKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5QQVNTKTsKKworICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LkZBSUwpOworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KICAgICB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvQmFyTWFuYWdlZEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvd2FyL0Jhck1hbmFnZWRCZWFuLmphdmEKaW5kZXggZDFkZjNmNi4uNGFlNzEyOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvQmFyTWFuYWdlZEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL3dhci9CYXJNYW5hZ2VkQmVhbi5qYXZhCkBAIC0yOSw3ICsyOSw3IEBACiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gQmFyTWFuYWdlZEJlYW46OmluaXQoKSAiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEJhck1hbmFnZWRCZWFuOjppbml0KCkgIik7CiAgICAgfQogCiAgICBwdWJsaWMgdm9pZCBiYXIoKSB7CkBAIC0zOSwxMiArMzksMTIgQEAKIAogICAgIEBQcmVEZXN0cm95CiAgICAgcHJpdmF0ZSB2b2lkIGRlc3Ryb3koKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBCYXJNYW5hZ2VkQmVhbjo6ZGVzdHJveSgpICIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gQmFyTWFuYWdlZEJlYW46OmRlc3Ryb3koKSAiKTsKICAgICB9CiAKICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotCXJldHVybiAiQmFyTWFuYWdlZEJlYW4gdGhpcyA9ICIgKyBzdXBlci50b1N0cmluZygpICsgCi0JICAgICIgcyA9ICIgKyBzICsgIiAsIGRzID0gIiArIGRzOworICAgIHJldHVybiAiQmFyTWFuYWdlZEJlYW4gdGhpcyA9ICIgKyBzdXBlci50b1N0cmluZygpICsKKyAgICAgICAgIiBzID0gIiArIHMgKyAiICwgZHMgPSAiICsgZHM7CiAKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvd2FyL0Zvb01hbmFnZWRCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL3dhci9Gb29NYW5hZ2VkQmVhbi5qYXZhCmluZGV4IDM3YmRiODAuLmM2NDY0NGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvd2FyL0Zvb01hbmFnZWRCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvRm9vTWFuYWdlZEJlYW4uamF2YQpAQCAtMzYsMjAgKzM2LDIwIEBACiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vTWFuYWdlZEJlYW46OmluaXQoKSAiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb01hbmFnZWRCZWFuOjppbml0KCkgIik7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZm9vKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vTWFuYWdlZEJlYW46OmZvbygpICIpOwotCWJtYi5iYXIoKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb01hbmFnZWRCZWFuOjpmb28oKSAiKTsKKyAgICBibWIuYmFyKCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZm9vYmFyKFN0cmluZyBzKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJmb29iYXI6OnMgPSAiICsgcyk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJmb29iYXI6OnMgPSAiICsgcyk7CiAgICAgfQogCiAgICAgcHVibGljIE9iamVjdCBnZXRUaGlzKCkgewotCXJldHVybiB0aGlzOworICAgIHJldHVybiB0aGlzOwogICAgIH0KIAogICAgIHB1YmxpYyBpbnQgcmV0dXJuSW50Tm9FeGNlcHRpb25zKCkgeyByZXR1cm4gMTsgfQpAQCAtNjgsMTkgKzY4LDE5IEBACiAKICAgICBAUHJlRGVzdHJveQogICAgIHByaXZhdGUgdm9pZCBkZXN0cm95KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vTWFuYWdlZEJlYW46OmRlc3Ryb3koKSAiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb01hbmFnZWRCZWFuOjpkZXN0cm95KCkgIik7CiAgICAgfQogCiAKICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotCXJldHVybiAiRm9vTWFuYWdlZEJlYW4gdGhpcyA9ICIgKyBzdXBlci50b1N0cmluZygpICsgCisgICAgcmV0dXJuICJGb29NYW5hZ2VkQmVhbiB0aGlzID0gIiArIHN1cGVyLnRvU3RyaW5nKCkgKwogICAgICAgICAgICAgICAgICIgcyA9ICIgKyBzICsgIiAsIGJtYiA9ICIgKyBibWIgKyAiICwgZW0gPSAiICsgZW07CiAgICAgfQogCiAgICAgQEFyb3VuZEludm9rZQogICAgIHB1YmxpYyBPYmplY3QgYXJvdW5kKEludm9jYXRpb25Db250ZXh0IGMpIHRocm93cyBFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vTWFuYWdlZEJlYW46OmFyb3VuZCgpICIpOwotCXJldHVybiBjLnByb2NlZWQoKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb01hbmFnZWRCZWFuOjphcm91bmQoKSAiKTsKKyAgICByZXR1cm4gYy5wcm9jZWVkKCk7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL3dhci9IZWxsb1NlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvd2FyL0hlbGxvU2VydmxldC5qYXZhCmluZGV4IDc4Mjc3ZDIuLjhkMjdhZjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvd2FyL0hlbGxvU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvd2FyL0hlbGxvU2VydmxldC5qYXZhCkBAIC03Myw5MSArNzMsOTEgQEAKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKIAotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TZXJ2bGV0Ojppbml0Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NlcnZsZXQ6OmluaXQiKTsKIAotCXRyeSB7Ci0JICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JICAgIHNiMiA9IChTaW5nbGV0b25CZWFuKSBpYy5sb29rdXAoImphdmE6bW9kdWxlL1NpbmdsZXRvbkJlYW4iKTsKLQkgICAgc2IzID0gKFNpbmdsZXRvbkJlYW4pIGljLmxvb2t1cCgiamF2YTptb2R1bGUvU2luZ2xldG9uQmVhbiFjb20uYWNtZS5TaW5nbGV0b25CZWFuIik7CisgICAgdHJ5IHsKKyAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgc2IyID0gKFNpbmdsZXRvbkJlYW4pIGljLmxvb2t1cCgiamF2YTptb2R1bGUvU2luZ2xldG9uQmVhbiIpOworICAgICAgICBzYjMgPSAoU2luZ2xldG9uQmVhbikgaWMubG9va3VwKCJqYXZhOm1vZHVsZS9TaW5nbGV0b25CZWFuIWNvbS5hY21lLlNpbmdsZXRvbkJlYW4iKTsKIAotCSAgICBzYjQgPSAoU2luZ2xldG9uQmVhbikgaWMubG9va3VwKCJqYXZhOm1vZHVsZS9FUzEiKTsKLQkgICAgc2I1ID0gKFNpbmdsZXRvbkJlYW4pIGljLmxvb2t1cCgiamF2YTptb2R1bGUvZW52L0VTMiIpOworICAgICAgICBzYjQgPSAoU2luZ2xldG9uQmVhbikgaWMubG9va3VwKCJqYXZhOm1vZHVsZS9FUzEiKTsKKyAgICAgICAgc2I1ID0gKFNpbmdsZXRvbkJlYW4pIGljLmxvb2t1cCgiamF2YTptb2R1bGUvZW52L0VTMiIpOwogCi0JICAgIHNsc2IgPSAoU3RhdGVsZXNzQmVhbikgaWMubG9va3VwKCJqYXZhOm1vZHVsZS9TdGF0ZWxlc3NCZWFuIik7Ci0JICAgIHNsc2IyID0gKFN0YXRlbGVzc0JlYW4pIGljLmxvb2t1cCgiamF2YTphcHAvZWpiLWVqYjMxLWVqYmxpdGUtamF2YW1vZHVsZS13ZWIvU3RhdGVsZXNzQmVhbiIpOwotCSAgICBzbHNiMyA9IChTdGF0ZWxlc3NCZWFuKSBpYy5sb29rdXAoImphdmE6YXBwL2VqYi1lamIzMS1lamJsaXRlLWphdmFtb2R1bGUtd2ViL1N0YXRlbGVzc0JlYW4hY29tLmFjbWUuU3RhdGVsZXNzQmVhbiIpOworICAgICAgICBzbHNiID0gKFN0YXRlbGVzc0JlYW4pIGljLmxvb2t1cCgiamF2YTptb2R1bGUvU3RhdGVsZXNzQmVhbiIpOworICAgICAgICBzbHNiMiA9IChTdGF0ZWxlc3NCZWFuKSBpYy5sb29rdXAoImphdmE6YXBwL2VqYi1lamIzMS1lamJsaXRlLWphdmFtb2R1bGUtd2ViL1N0YXRlbGVzc0JlYW4iKTsKKyAgICAgICAgc2xzYjMgPSAoU3RhdGVsZXNzQmVhbikgaWMubG9va3VwKCJqYXZhOmFwcC9lamItZWpiMzEtZWpibGl0ZS1qYXZhbW9kdWxlLXdlYi9TdGF0ZWxlc3NCZWFuIWNvbS5hY21lLlN0YXRlbGVzc0JlYW4iKTsKIAotCSAgICBzbHNiNCA9IChTdGF0ZWxlc3NCZWFuKSBpYy5sb29rdXAoImphdmE6YXBwL0VMMSIpOwotCSAgICBzbHNiNSA9IChTdGF0ZWxlc3NCZWFuKSBpYy5sb29rdXAoImphdmE6YXBwL2Vudi9FTDIiKTsKKyAgICAgICAgc2xzYjQgPSAoU3RhdGVsZXNzQmVhbikgaWMubG9va3VwKCJqYXZhOmFwcC9FTDEiKTsKKyAgICAgICAgc2xzYjUgPSAoU3RhdGVsZXNzQmVhbikgaWMubG9va3VwKCJqYXZhOmFwcC9lbnYvRUwyIik7CiAKLQkgICAgZm9vNCA9IChGb29NYW5hZ2VkQmVhbikgCi0JCWljLmxvb2t1cCgiamF2YTptb2R1bGUvZm9vbWFuYWdlZGJlYW4iKTsKKyAgICAgICAgZm9vNCA9IChGb29NYW5hZ2VkQmVhbikKKyAgICAgICAgaWMubG9va3VwKCJqYXZhOm1vZHVsZS9mb29tYW5hZ2VkYmVhbiIpOwogCi0JICAgIGZvbzUgPSAoRm9vTWFuYWdlZEJlYW4pIAotCQlpYy5sb29rdXAoImphdmE6YXBwL2VqYi1lamIzMS1lamJsaXRlLWphdmFtb2R1bGUtd2ViL2Zvb21hbmFnZWRiZWFuIik7CisgICAgICAgIGZvbzUgPSAoRm9vTWFuYWdlZEJlYW4pCisgICAgICAgIGljLmxvb2t1cCgiamF2YTphcHAvZWpiLWVqYjMxLWVqYmxpdGUtamF2YW1vZHVsZS13ZWIvZm9vbWFuYWdlZGJlYW4iKTsKIAotCSAgICBmb282ID0gKEZvb01hbmFnZWRCZWFuKQotCQlpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZm9vMnJlZiIpOworICAgICAgICBmb282ID0gKEZvb01hbmFnZWRCZWFuKQorICAgICAgICBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZm9vMnJlZiIpOwogCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTXkgQXBwTmFtZSA9ICIgKyAKLQkJCSAgICAgICBpYy5sb29rdXAoImphdmE6YXBwL0FwcE5hbWUiKSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTXkgQXBwTmFtZSA9ICIgKworICAgICAgICAgICAgICAgICAgIGljLmxvb2t1cCgiamF2YTphcHAvQXBwTmFtZSIpKTsKIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk15IE1vZHVsZU5hbWUgPSAiICsgCi0JCQkgICAgICAgaWMubG9va3VwKCJqYXZhOm1vZHVsZS9Nb2R1bGVOYW1lIikpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk15IE1vZHVsZU5hbWUgPSAiICsKKyAgICAgICAgICAgICAgICAgICBpYy5sb29rdXAoImphdmE6bW9kdWxlL01vZHVsZU5hbWUiKSk7CiAKLQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUpOwotCX0KKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUpOworICAgIH0KICAgICB9CiAKICAgICBAT3ZlcnJpZGUKICAgICBwcm90ZWN0ZWQgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKIAotCXJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOworICAgIHJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwLmdldFdyaXRlcigpOwogCi0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NlcnZsZXQ6OmRvR2V0Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NlcnZsZXQ6OmRvR2V0Iik7CiAKLQlmb28uZm9vYmFyKCJmb29iYXIiKTsKKyAgICBmb28uZm9vYmFyKCJmb29iYXIiKTsKIAotCXNpbXBsZVNpbmdsZXRvbi5oZWxsbygpOworICAgIHNpbXBsZVNpbmdsZXRvbi5oZWxsbygpOwogCi0Jc2ltcGxlU3RhdGVsZXNzLmhlbGxvKCk7Ci0Jc2ltcGxlU3RhdGVsZXNzMi5oZWxsbygpOworICAgIHNpbXBsZVN0YXRlbGVzcy5oZWxsbygpOworICAgIHNpbXBsZVN0YXRlbGVzczIuaGVsbG8oKTsKIAotCXNiMi5oZWxsbygpOworICAgIHNiMi5oZWxsbygpOwogCi0Jc2IzLmhlbGxvKCk7CisgICAgc2IzLmhlbGxvKCk7CiAKLQlzYjQuaGVsbG8oKTsKKyAgICBzYjQuaGVsbG8oKTsKIAotCXNiNS5oZWxsbygpOworICAgIHNiNS5oZWxsbygpOwogCi0Jc2xzYi5oZWxsbygpOworICAgIHNsc2IuaGVsbG8oKTsKIAotCXNsc2IyLmhlbGxvKCk7CisgICAgc2xzYjIuaGVsbG8oKTsKIAotCXNsc2IzLmhlbGxvKCk7CisgICAgc2xzYjMuaGVsbG8oKTsKIAotCXNsc2I0LmhlbGxvKCk7CisgICAgc2xzYjQuaGVsbG8oKTsKIAotCXNsc2I1LmhlbGxvKCk7CisgICAgc2xzYjUuaGVsbG8oKTsKIAotCWZvby5mb28oKTsKLQlmb28uZm9vYmFyKCJmb29iYXIiKTsKLQlmb28yLmZvbygpOwotCWZvbzMuZm9vKCk7Ci0JZm9vNC5mb28oKTsKLQlmb281LmZvbygpOwkKLQlmb282LmZvbygpOworICAgIGZvby5mb28oKTsKKyAgICBmb28uZm9vYmFyKCJmb29iYXIiKTsKKyAgICBmb28yLmZvbygpOworICAgIGZvbzMuZm9vKCk7CisgICAgZm9vNC5mb28oKTsKKyAgICBmb281LmZvbygpOworICAgIGZvbzYuZm9vKCk7CiAKLQlvdXQucHJpbnRsbigiPEhUTUw+IDxIRUFEPiA8VElUTEU+IEpNUyBTZXJ2bGV0IE91dHB1dCA8L1RJVExFPiA8L0hFQUQ+IDxCT0RZIEJHQ09MT1I9d2hpdGU+Iik7CisgICAgb3V0LnByaW50bG4oIjxIVE1MPiA8SEVBRD4gPFRJVExFPiBKTVMgU2VydmxldCBPdXRwdXQgPC9USVRMRT4gPC9IRUFEPiA8Qk9EWSBCR0NPTE9SPXdoaXRlPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxDRU5URVI+IDxGT05UIHNpemU9KzEgQ09MT1I9Ymx1ZT5EYXRhYmFzZVNlcnZlbHQgOjogQWxsIGluZm9ybWF0aW9uIEkgY2FuIGdpdmUgPC9GT05UPiA8L0NFTlRFUj4gPHA+ICIgKTsKLSAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gQ29udGV4dCBQYXRoIDogIDwvRk9OVD4gIiArIHJlcS5nZXRDb250ZXh0UGF0aCgpICsgIjxicj4iICk7IAotICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBTZXJ2bGV0IFBhdGggOiAgPC9GT05UPiAiICsgcmVxLmdldFNlcnZsZXRQYXRoKCkgKyAiPGJyPiIgKTsgCi0gICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IFBhdGggSW5mbyA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0UGF0aEluZm8oKSArICI8YnI+IiApOyAKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gQ29udGV4dCBQYXRoIDogIDwvRk9OVD4gIiArIHJlcS5nZXRDb250ZXh0UGF0aCgpICsgIjxicj4iICk7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IFNlcnZsZXQgUGF0aCA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0U2VydmxldFBhdGgoKSArICI8YnI+IiApOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBQYXRoIEluZm8gOiAgPC9GT05UPiAiICsgcmVxLmdldFBhdGhJbmZvKCkgKyAiPGJyPiIgKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L0JPRFk+IDwvSFRNTD4gIik7CiAKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL3dhci9JbnRlcmNlcHRvckEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvd2FyL0ludGVyY2VwdG9yQS5qYXZhCmluZGV4IDZlMTUxNjYuLjk3MDNiY2MgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvd2FyL0ludGVyY2VwdG9yQS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvd2FyL0ludGVyY2VwdG9yQS5qYXZhCkBAIC0zMywyNCArMzMsMjQgQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoSW52b2NhdGlvbkNvbnRleHQgYykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBJbnRlcmNlcHRvckE6OmluaXQoKSAiKTsKLQljLnByb2NlZWQoKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEludGVyY2VwdG9yQTo6aW5pdCgpICIpOworICAgIGMucHJvY2VlZCgpOwogICAgIH0KIAogCiAgICAgQEFyb3VuZEludm9rZQogICAgIHB1YmxpYyBPYmplY3Qgcm91bmRJbnZva2UoSW52b2NhdGlvbkNvbnRleHQgYykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBJbnRlcmNlcHRvckE6OnJvdW5kSW52b2tlKCkgIik7Ci0JaWYoIGMuZ2V0UGFyYW1ldGVycygpLmxlbmd0aCA+IDAgKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigicGFyYW0gMSA9ICIgKyBjLmdldFBhcmFtZXRlcnMoKVswXSk7Ci0JfQotCXJldHVybiBjLnByb2NlZWQoKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEludGVyY2VwdG9yQTo6cm91bmRJbnZva2UoKSAiKTsKKyAgICBpZiggYy5nZXRQYXJhbWV0ZXJzKCkubGVuZ3RoID4gMCApIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJwYXJhbSAxID0gIiArIGMuZ2V0UGFyYW1ldGVycygpWzBdKTsKKyAgICB9CisgICAgcmV0dXJuIGMucHJvY2VlZCgpOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CiAgICAgcHJpdmF0ZSB2b2lkIGRlc3Ryb3koSW52b2NhdGlvbkNvbnRleHQgYykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBJbnRlcmNlcHRvcjo6ZGVzdHJveSgpICIpOwotCWMucHJvY2VlZCgpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSW50ZXJjZXB0b3I6OmRlc3Ryb3koKSAiKTsKKyAgICBjLnByb2NlZWQoKTsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvd2FyL0ludGVyY2VwdG9yQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvSW50ZXJjZXB0b3JCLmphdmEKaW5kZXggYzY0MzYzNy4uNTVlMDNmZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvSW50ZXJjZXB0b3JCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvSW50ZXJjZXB0b3JCLmphdmEKQEAgLTI4LDM2ICsyOCwzNiBAQAogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdChJbnZvY2F0aW9uQ29udGV4dCBjKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEludGVyY2VwdG9yQjo6aW5pdCgpICIpOwotCWMucHJvY2VlZCgpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSW50ZXJjZXB0b3JCOjppbml0KCkgIik7CisgICAgYy5wcm9jZWVkKCk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0JcHVibGljIE9iamVjdCByb3VuZEludm9rZShJbnZvY2F0aW9uQ29udGV4dCBjKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiU2hvdWxkIG5vdCByZWFjaCBoZXJlIik7CisgICAgcHVibGljIE9iamVjdCByb3VuZEludm9rZShJbnZvY2F0aW9uQ29udGV4dCBjKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiU2hvdWxkIG5vdCByZWFjaCBoZXJlIik7CiAgICAgfQogCiAgICAgQEFyb3VuZEludm9rZQogICAgIHByaXZhdGUgT2JqZWN0IGFyb3VuZEludm9rZShJbnZvY2F0aW9uQ29udGV4dCBjKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEludGVyY2VwdG9yQjo6YXJvdW5kSW52b2tlKCkgIik7Ci0JYy5nZXRDb250ZXh0RGF0YSgpLnB1dCgiZm9vIiwgImJhciIpOwotCU9iamVjdCByZXR1cm5WYWx1ZSA9IGMucHJvY2VlZCgpOwotCQotCVN0cmluZyBmb29iYXIgPSAoU3RyaW5nKSBjLmdldENvbnRleHREYXRhKCkuZ2V0KCJmb29iYXIiKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImZvb2JhciBmcm9tIGNvbnRleHQgZGF0YSA9ICIgKyBmb29iYXIpOwotCWlmKCBmb29iYXIgPT0gbnVsbCApIHsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiaW52YWxpZCBjb250ZXh0IGRhdGEiKTsKLQl9Ci0JCi0JYy5nZXRDb250ZXh0RGF0YSgpLmNsZWFyKCk7Ci0JCi0JcmV0dXJuIHJldHVyblZhbHVlOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSW50ZXJjZXB0b3JCOjphcm91bmRJbnZva2UoKSAiKTsKKyAgICBjLmdldENvbnRleHREYXRhKCkucHV0KCJmb28iLCAiYmFyIik7CisgICAgT2JqZWN0IHJldHVyblZhbHVlID0gYy5wcm9jZWVkKCk7CisKKyAgICBTdHJpbmcgZm9vYmFyID0gKFN0cmluZykgYy5nZXRDb250ZXh0RGF0YSgpLmdldCgiZm9vYmFyIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJmb29iYXIgZnJvbSBjb250ZXh0IGRhdGEgPSAiICsgZm9vYmFyKTsKKyAgICBpZiggZm9vYmFyID09IG51bGwgKSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImludmFsaWQgY29udGV4dCBkYXRhIik7CisgICAgfQorCisgICAgYy5nZXRDb250ZXh0RGF0YSgpLmNsZWFyKCk7CisKKyAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKICAgICBwcml2YXRlIHZvaWQgZGVzdHJveShJbnZvY2F0aW9uQ29udGV4dCBjKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEludGVyY2VwdG9yQjo6ZGVzdHJveSgpICIpOwotCWMucHJvY2VlZCgpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSW50ZXJjZXB0b3JCOjpkZXN0cm95KCkgIik7CisgICAgYy5wcm9jZWVkKCk7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL3dhci9JbnRlcmNlcHRvclN1cGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL3dhci9JbnRlcmNlcHRvclN1cGVyLmphdmEKaW5kZXggNGFkYmQwMy4uMWI5MzI1ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvSW50ZXJjZXB0b3JTdXBlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvd2FyL0ludGVyY2VwdG9yU3VwZXIuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogCiAgICAgQEFyb3VuZEludm9rZQogICAgIHByb3RlY3RlZCBPYmplY3Qgcm91bmRJbnZva2UoSW52b2NhdGlvbkNvbnRleHQgYykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlNob3VsZCBub3QgcmVhY2ggaGVyZSIpOworICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJTaG91bGQgbm90IHJlYWNoIGhlcmUiKTsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvd2FyL01hbmFnZWRTdXBlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvTWFuYWdlZFN1cGVyLmphdmEKaW5kZXggNWIwZGY1OC4uMTEzYjI4MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvTWFuYWdlZFN1cGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvTWFuYWdlZFN1cGVyLmphdmEKQEAgLTMwLDI0ICszMCwyNCBAQAogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIE1hbmFnZWRTdXBlcjo6aW5pdCgpICIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gTWFuYWdlZFN1cGVyOjppbml0KCkgIik7CiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKICAgICBwcml2YXRlIHZvaWQgZGVzdHJveSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIE1hbmFnZWRTdXBlcjo6ZGVzdHJveSgpICIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gTWFuYWdlZFN1cGVyOjpkZXN0cm95KCkgIik7CiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQlyZXR1cm4gIk1hbmFnZWRTdXBlciB0aGlzID0gIiArIHN1cGVyLnRvU3RyaW5nKCkgKyAKLQkgICAgIiBzID0gIiArIHMgKyAiICwgZHMgPSAiICsgZHM7CisgICAgcmV0dXJuICJNYW5hZ2VkU3VwZXIgdGhpcyA9ICIgKyBzdXBlci50b1N0cmluZygpICsKKyAgICAgICAgIiBzID0gIiArIHMgKyAiICwgZHMgPSAiICsgZHM7CiAKICAgICB9CiAKICAgQEFyb3VuZEludm9rZQogICAgIHB1YmxpYyBPYmplY3QgYXJvdW5kU3VwZXIoSW52b2NhdGlvbkNvbnRleHQgYykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBNYW5hZ2VkU3VwZXI6OmFyb3VuZFN1cGVyKCkgIik7Ci0JcmV0dXJuIGMucHJvY2VlZCgpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gTWFuYWdlZFN1cGVyOjphcm91bmRTdXBlcigpICIpOworICAgIHJldHVybiBjLnByb2NlZWQoKTsKICAgICB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvU2luZ2xldG9uQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvU2luZ2xldG9uQmVhbi5qYXZhCmluZGV4IDM5NGZmY2UuLjlhYzViZjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvd2FyL1NpbmdsZXRvbkJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL3dhci9TaW5nbGV0b25CZWFuLmphdmEKQEAgLTM0LDcgKzM0LDcgQEAKIEBTaW5nbGV0b24KIEBMb2NhbEJlYW4KIHB1YmxpYyBjbGFzcyBTaW5nbGV0b25CZWFuIGltcGxlbWVudHMgamF2YS51dGlsLk9ic2VydmVyIHsKLSAgCisKIAogICAgIEBFSkIgcHJpdmF0ZSAgU2luZ2xldG9uQmVhbiBtZTsKIApAQCAtNTEsNzEgKzUxLDcxIEBACiAgICAgcHJpdmF0ZSBTdGF0ZWxlc3NCZWFuIHNsc2IzOwogICAgIHByaXZhdGUgU3RhdGVsZXNzQmVhbiBzbHNiNDsKICAgICBwcml2YXRlIFN0YXRlbGVzc0JlYW4gc2xzYjU7Ci0JCisKICAgICBwdWJsaWMgdm9pZCB1cGRhdGUoamF2YS51dGlsLk9ic2VydmFibGUgYSxqYXZhLmxhbmcuT2JqZWN0IGIpICB7fQogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdCgpIHsKIAotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjppbml0KCkgbWUgPSAiICsgbWUpOwotCQotCWlmKCBzZXNzaW9uQ3R4LmdldENvbnRleHREYXRhKCkgPT0gbnVsbCApIHsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigibnVsbCBjb250ZXh0IGRhdGEiKTsKLQl9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOmluaXQoKSBtZSA9ICIgKyBtZSk7CiAKLQl0cnkgewotCSAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgIGlmKCBzZXNzaW9uQ3R4LmdldENvbnRleHREYXRhKCkgPT0gbnVsbCApIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigibnVsbCBjb250ZXh0IGRhdGEiKTsKKyAgICB9CiAKLQkgICAgLy8gTG9va3VwIHNpbXBsZSBmb3JtIG9mIHBvcnRhYmxlIEpOREkgbmFtZSAKLQkgICAgU3RhdGVsZXNzQmVhbiBzdGF0ZWxlc3MgPSAoU3RhdGVsZXNzQmVhbikgCi0JCWljLmxvb2t1cCgiamF2YTptb2R1bGUvU3RhdGVsZXNzQmVhbiIpOworICAgIHRyeSB7CisgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAKLQkgICAgc3RhdGVsZXNzLmhlbGxvKCk7CisgICAgICAgIC8vIExvb2t1cCBzaW1wbGUgZm9ybSBvZiBwb3J0YWJsZSBKTkRJIG5hbWUKKyAgICAgICAgU3RhdGVsZXNzQmVhbiBzdGF0ZWxlc3MgPSAoU3RhdGVsZXNzQmVhbikKKyAgICAgICAgaWMubG9va3VwKCJqYXZhOm1vZHVsZS9TdGF0ZWxlc3NCZWFuIik7CiAKLQkgICAgLy8gTG9va3VwIGZ1bGx5LXF1YWxpZmllZCBmb3JtIG9mIHBvcnRhYmxlIEpOREkgbmFtZQotCSAgICBTdGF0ZWxlc3NCZWFuIHN0YXRlbGVzczIgPSAoU3RhdGVsZXNzQmVhbikgCi0JCWljLmxvb2t1cCgiamF2YTptb2R1bGUvU3RhdGVsZXNzQmVhbiFjb20uYWNtZS5TdGF0ZWxlc3NCZWFuIik7CisgICAgICAgIHN0YXRlbGVzcy5oZWxsbygpOwogCi0JICAgIHN0YXRlbGVzczIuaGVsbG8oKTsKKyAgICAgICAgLy8gTG9va3VwIGZ1bGx5LXF1YWxpZmllZCBmb3JtIG9mIHBvcnRhYmxlIEpOREkgbmFtZQorICAgICAgICBTdGF0ZWxlc3NCZWFuIHN0YXRlbGVzczIgPSAoU3RhdGVsZXNzQmVhbikKKyAgICAgICAgaWMubG9va3VwKCJqYXZhOm1vZHVsZS9TdGF0ZWxlc3NCZWFuIWNvbS5hY21lLlN0YXRlbGVzc0JlYW4iKTsKIAotCSAgICBzYjIgPSAoU2luZ2xldG9uQmVhbikgaWMubG9va3VwKCJqYXZhOm1vZHVsZS9TaW5nbGV0b25CZWFuIik7Ci0JICAgIHNiMyA9IChTaW5nbGV0b25CZWFuKSBpYy5sb29rdXAoImphdmE6bW9kdWxlL1NpbmdsZXRvbkJlYW4hY29tLmFjbWUuU2luZ2xldG9uQmVhbiIpOworICAgICAgICBzdGF0ZWxlc3MyLmhlbGxvKCk7CiAKLQkgICAgc2I0ID0gKFNpbmdsZXRvbkJlYW4pIGljLmxvb2t1cCgiamF2YTptb2R1bGUvRVMxIik7Ci0JICAgIHNiNSA9IChTaW5nbGV0b25CZWFuKSBpYy5sb29rdXAoImphdmE6bW9kdWxlL2Vudi9FUzIiKTsKKyAgICAgICAgc2IyID0gKFNpbmdsZXRvbkJlYW4pIGljLmxvb2t1cCgiamF2YTptb2R1bGUvU2luZ2xldG9uQmVhbiIpOworICAgICAgICBzYjMgPSAoU2luZ2xldG9uQmVhbikgaWMubG9va3VwKCJqYXZhOm1vZHVsZS9TaW5nbGV0b25CZWFuIWNvbS5hY21lLlNpbmdsZXRvbkJlYW4iKTsKIAotCSAgICBzbHNiID0gKFN0YXRlbGVzc0JlYW4pIGljLmxvb2t1cCgiamF2YTptb2R1bGUvU3RhdGVsZXNzQmVhbiIpOwotCSAgICBzbHNiMiA9IChTdGF0ZWxlc3NCZWFuKSBpYy5sb29rdXAoImphdmE6YXBwL2VqYi1lamIzMS1lamJsaXRlLWphdmFtb2R1bGUtd2ViL1N0YXRlbGVzc0JlYW4iKTsKLQkgICAgc2xzYjMgPSAoU3RhdGVsZXNzQmVhbikgaWMubG9va3VwKCJqYXZhOmFwcC9lamItZWpiMzEtZWpibGl0ZS1qYXZhbW9kdWxlLXdlYi9TdGF0ZWxlc3NCZWFuIWNvbS5hY21lLlN0YXRlbGVzc0JlYW4iKTsKKyAgICAgICAgc2I0ID0gKFNpbmdsZXRvbkJlYW4pIGljLmxvb2t1cCgiamF2YTptb2R1bGUvRVMxIik7CisgICAgICAgIHNiNSA9IChTaW5nbGV0b25CZWFuKSBpYy5sb29rdXAoImphdmE6bW9kdWxlL2Vudi9FUzIiKTsKIAotCSAgICBzbHNiNCA9IChTdGF0ZWxlc3NCZWFuKSBpYy5sb29rdXAoImphdmE6YXBwL0VMMSIpOwotCSAgICBzbHNiNSA9IChTdGF0ZWxlc3NCZWFuKSBpYy5sb29rdXAoImphdmE6YXBwL2Vudi9FTDIiKTsKKyAgICAgICAgc2xzYiA9IChTdGF0ZWxlc3NCZWFuKSBpYy5sb29rdXAoImphdmE6bW9kdWxlL1N0YXRlbGVzc0JlYW4iKTsKKyAgICAgICAgc2xzYjIgPSAoU3RhdGVsZXNzQmVhbikgaWMubG9va3VwKCJqYXZhOmFwcC9lamItZWpiMzEtZWpibGl0ZS1qYXZhbW9kdWxlLXdlYi9TdGF0ZWxlc3NCZWFuIik7CisgICAgICAgIHNsc2IzID0gKFN0YXRlbGVzc0JlYW4pIGljLmxvb2t1cCgiamF2YTphcHAvZWpiLWVqYjMxLWVqYmxpdGUtamF2YW1vZHVsZS13ZWIvU3RhdGVsZXNzQmVhbiFjb20uYWNtZS5TdGF0ZWxlc3NCZWFuIik7CiAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJNeSBBcHBOYW1lID0gIiArIAotCQkJICAgICAgIGljLmxvb2t1cCgiamF2YTphcHAvQXBwTmFtZSIpKTsKKyAgICAgICAgc2xzYjQgPSAoU3RhdGVsZXNzQmVhbikgaWMubG9va3VwKCJqYXZhOmFwcC9FTDEiKTsKKyAgICAgICAgc2xzYjUgPSAoU3RhdGVsZXNzQmVhbikgaWMubG9va3VwKCJqYXZhOmFwcC9lbnYvRUwyIik7CiAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJNeSBNb2R1bGVOYW1lID0gIiArIAotCQkJICAgICAgIGljLmxvb2t1cCgiamF2YTptb2R1bGUvTW9kdWxlTmFtZSIpKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNeSBBcHBOYW1lID0gIiArCisgICAgICAgICAgICAgICAgICAgaWMubG9va3VwKCJqYXZhOmFwcC9BcHBOYW1lIikpOwogCi0JfSBjYXRjaChOYW1pbmdFeGNlcHRpb24gbmUpIHsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihuZSk7Ci0JfQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk15IE1vZHVsZU5hbWUgPSAiICsKKyAgICAgICAgICAgICAgICAgICBpYy5sb29rdXAoImphdmE6bW9kdWxlL01vZHVsZU5hbWUiKSk7CisKKyAgICB9IGNhdGNoKE5hbWluZ0V4Y2VwdGlvbiBuZSkgeworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKG5lKTsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgaGVsbG8oKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOmhlbGxvKCkiKTsKLQlpZiggc2Vzc2lvbkN0eC5nZXRDb250ZXh0RGF0YSgpID09IG51bGwgKSB7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIm51bGwgY29udGV4dCBkYXRhIik7Ci0JfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjpoZWxsbygpIik7CisgICAgaWYoIHNlc3Npb25DdHguZ2V0Q29udGV4dERhdGEoKSA9PSBudWxsICkgeworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJudWxsIGNvbnRleHQgZGF0YSIpOworICAgIH0KIAogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CiAgICAgcHJpdmF0ZSB2b2lkIGRlc3Ryb3koKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOmRlc3Ryb3koKSIpOwotCWlmKCBzZXNzaW9uQ3R4LmdldENvbnRleHREYXRhKCkgPT0gbnVsbCApIHsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigibnVsbCBjb250ZXh0IGRhdGEiKTsKLQl9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOmRlc3Ryb3koKSIpOworICAgIGlmKCBzZXNzaW9uQ3R4LmdldENvbnRleHREYXRhKCkgPT0gbnVsbCApIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigibnVsbCBjb250ZXh0IGRhdGEiKTsKKyAgICB9CiAKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvd2FyL1N0YXRlZnVsQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvU3RhdGVmdWxCZWFuLmphdmEKaW5kZXggOWRjZjk3OS4uZjkxZTkxOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvU3RhdGVmdWxCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvU3RhdGVmdWxCZWFuLmphdmEKQEAgLTI5LDIxICsyOSwyMSBAQAogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlZnVsQmVhbjppbml0KCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlZnVsQmVhbjppbml0KCkiKTsKICAgICB9CiAKICAgICBAUHJlUGFzc2l2YXRlCiAgICAgcHJpdmF0ZSB2b2lkIHByZVBhc3MoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWZ1bEJlYW46cHJlUGFzc2l2YXRlKCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlZnVsQmVhbjpwcmVQYXNzaXZhdGUoKSIpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGhlbGxvKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVmdWxCZWFuOjpoZWxsbygpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWZ1bEJlYW46OmhlbGxvKCkiKTsKICAgICB9CiAKICAgICBAUHJlRGVzdHJveQogICAgIHByaXZhdGUgdm9pZCBkZXN0cm95KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVmdWxCZWFuOmRlc3Ryb3koKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVmdWxCZWFuOmRlc3Ryb3koKSIpOwogICAgIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL3dhci9TdGF0ZWxlc3NCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXZhbW9kdWxlL3dhci9TdGF0ZWxlc3NCZWFuLmphdmEKaW5kZXggZjYxNDhhNS4uZTU5YTM4YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF2YW1vZHVsZS93YXIvU3RhdGVsZXNzQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2phdmFtb2R1bGUvd2FyL1N0YXRlbGVzc0JlYW4uamF2YQpAQCAtMjksOCArMjksOCBAQAogQFN0YXRlbGVzcwogQEludGVyY2VwdG9ycyhJbnRlcmNlcHRvckIuY2xhc3MpCiBwdWJsaWMgY2xhc3MgU3RhdGVsZXNzQmVhbiB7Ci0gICAgCi0gICAgQFJlc291cmNlIAorCisgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBzZXNzaW9uQ3R4OwogCiAgICAgQFJlc291cmNlKG1hcHBlZE5hbWU9ImphdmE6bW9kdWxlL2Zvb21hbmFnZWRiZWFuIikKQEAgLTQ0LDY0ICs0NCw2NCBAQAogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlbGVzc0JlYW46aW5pdCgpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWxlc3NCZWFuOmluaXQoKSIpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGhlbGxvKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVsZXNzQmVhbjo6aGVsbG8oKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVsZXNzQmVhbjo6aGVsbG8oKSIpOwogCi0JTWFwPFN0cmluZywgT2JqZWN0PiBjdHhEYXRhID0gc2Vzc2lvbkN0eC5nZXRDb250ZXh0RGF0YSgpOwotCVN0cmluZyBmb29jdHggPSAoU3RyaW5nKSBjdHhEYXRhLmdldCgiZm9vIik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJmb28gZnJvbSBjb250ZXh0IGRhdGEgPSAiICsgZm9vY3R4KTsKLQlpZiggZm9vY3R4ID09IG51bGwgKSB7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImludmFsaWQgY29udGV4dCBkYXRhIik7Ci0JfQotCWN0eERhdGEucHV0KCJmb29iYXIiLCAiZm9vYmFyIik7CisgICAgTWFwPFN0cmluZywgT2JqZWN0PiBjdHhEYXRhID0gc2Vzc2lvbkN0eC5nZXRDb250ZXh0RGF0YSgpOworICAgIFN0cmluZyBmb29jdHggPSAoU3RyaW5nKSBjdHhEYXRhLmdldCgiZm9vIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJmb28gZnJvbSBjb250ZXh0IGRhdGEgPSAiICsgZm9vY3R4KTsKKyAgICBpZiggZm9vY3R4ID09IG51bGwgKSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImludmFsaWQgY29udGV4dCBkYXRhIik7CisgICAgfQorICAgIGN0eERhdGEucHV0KCJmb29iYXIiLCAiZm9vYmFyIik7CiAKLQlGb29NYW5hZ2VkQmVhbiBmbWIgPSAoRm9vTWFuYWdlZEJlYW4pIAotCSAgICBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTptb2R1bGUvZm9vbWFuYWdlZGJlYW4iKTsKKyAgICBGb29NYW5hZ2VkQmVhbiBmbWIgPSAoRm9vTWFuYWdlZEJlYW4pCisgICAgICAgIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOm1vZHVsZS9mb29tYW5hZ2VkYmVhbiIpOwogCi0JLy8gTWFrZSBzdXJlIGRlcGVuZGVuY2llcyBkZWNsYXJlZCBpbiBqYXZhOmNvbXAgYXJlIHZpc2libGUKLQkvLyB2aWEgZXF1aXZhbGVudCBqYXZhOm1vZHVsZSBlbnRyaWVzIHNpbmNlIHRoaXMgaXMgYSAKLQkvLyAud2FyCi0JU2Vzc2lvbkNvbnRleHQgc2Vzc2lvbkN0eDIgPSAoU2Vzc2lvbkNvbnRleHQpCi0JICAgIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOm1vZHVsZS9lbnYvY29tLmFjbWUuU3RhdGVsZXNzQmVhbi9zZXNzaW9uQ3R4Iik7CisgICAgLy8gTWFrZSBzdXJlIGRlcGVuZGVuY2llcyBkZWNsYXJlZCBpbiBqYXZhOmNvbXAgYXJlIHZpc2libGUKKyAgICAvLyB2aWEgZXF1aXZhbGVudCBqYXZhOm1vZHVsZSBlbnRyaWVzIHNpbmNlIHRoaXMgaXMgYQorICAgIC8vIC53YXIKKyAgICBTZXNzaW9uQ29udGV4dCBzZXNzaW9uQ3R4MiA9IChTZXNzaW9uQ29udGV4dCkKKyAgICAgICAgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6bW9kdWxlL2Vudi9jb20uYWNtZS5TdGF0ZWxlc3NCZWFuL3Nlc3Npb25DdHgiKTsKIAotCVNpbmdsZXRvbkJlYW4gc2luZ2xldG9uMiA9IChTaW5nbGV0b25CZWFuKQotCSAgICBzZXNzaW9uQ3R4Mi5sb29rdXAoImphdmE6bW9kdWxlL2Vudi9zdGF0ZWxlc3Mvc2luZ2xldG9ucmVmIik7CisgICAgU2luZ2xldG9uQmVhbiBzaW5nbGV0b24yID0gKFNpbmdsZXRvbkJlYW4pCisgICAgICAgIHNlc3Npb25DdHgyLmxvb2t1cCgiamF2YTptb2R1bGUvZW52L3N0YXRlbGVzcy9zaW5nbGV0b25yZWYiKTsKIAotCS8vIExvb2t1cCBhIGNvbXAgZW52IGRlcGVuZGVuY3kgZGVjbGFyZWQgYnkgYW5vdGhlciBlamIgaW4gdGhlIC53YXIKLQlTaW5nbGV0b25CZWFuIHNpbmdsZXRvbjMgPSAoU2luZ2xldG9uQmVhbikKLQkgICAgc2Vzc2lvbkN0eDIubG9va3VwKCJqYXZhOmNvbXAvZW52L2NvbS5hY21lLlNpbmdsZXRvbkJlYW4vbWUiKTsKKyAgICAvLyBMb29rdXAgYSBjb21wIGVudiBkZXBlbmRlbmN5IGRlY2xhcmVkIGJ5IGFub3RoZXIgZWpiIGluIHRoZSAud2FyCisgICAgU2luZ2xldG9uQmVhbiBzaW5nbGV0b24zID0gKFNpbmdsZXRvbkJlYW4pCisgICAgICAgIHNlc3Npb25DdHgyLmxvb2t1cCgiamF2YTpjb21wL2Vudi9jb20uYWNtZS5TaW5nbGV0b25CZWFuL21lIik7CiAKLQkvLyBMb29rdXAgYSBjb21wIGVudiBkZXBlbmRlbmN5IGRlY2xhcmVkIGJ5IGEgc2VydmxldAotCUZvb01hbmFnZWRCZWFuIGZtYlNlcnZsZXQgPSAoRm9vTWFuYWdlZEJlYW4pCi0JICAgIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOmNvbXAvZW52L2ZvbzJyZWYiKTsKLQlGb29NYW5hZ2VkQmVhbiBmbWJTZXJ2bGV0MiA9IChGb29NYW5hZ2VkQmVhbikKLQkgICAgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6bW9kdWxlL2Vudi9mb28ycmVmIik7CisgICAgLy8gTG9va3VwIGEgY29tcCBlbnYgZGVwZW5kZW5jeSBkZWNsYXJlZCBieSBhIHNlcnZsZXQKKyAgICBGb29NYW5hZ2VkQmVhbiBmbWJTZXJ2bGV0ID0gKEZvb01hbmFnZWRCZWFuKQorICAgICAgICBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9mb28ycmVmIik7CisgICAgRm9vTWFuYWdlZEJlYW4gZm1iU2VydmxldDIgPSAoRm9vTWFuYWdlZEJlYW4pCisgICAgICAgIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOm1vZHVsZS9lbnYvZm9vMnJlZiIpOwogCi0JLy8gRW5zdXJlIHRoYXQgZWFjaCBpbmplY3RlZCBvciBsb29rZWQgdXAgbWFuYWdlZCBiZWFuIAotCS8vIGluc3RhbmNlIGlzIHVuaXF1ZQotCU9iamVjdCBmb29UaGlzID0gZm9vLmdldFRoaXMoKTsKLQlPYmplY3QgZm9vMlRoaXMgPSBmb28yLmdldFRoaXMoKTsKLQlPYmplY3QgZm1iVGhpcyA9IGZtYi5nZXRUaGlzKCk7CisgICAgLy8gRW5zdXJlIHRoYXQgZWFjaCBpbmplY3RlZCBvciBsb29rZWQgdXAgbWFuYWdlZCBiZWFuCisgICAgLy8gaW5zdGFuY2UgaXMgdW5pcXVlCisgICAgT2JqZWN0IGZvb1RoaXMgPSBmb28uZ2V0VGhpcygpOworICAgIE9iamVjdCBmb28yVGhpcyA9IGZvbzIuZ2V0VGhpcygpOworICAgIE9iamVjdCBmbWJUaGlzID0gZm1iLmdldFRoaXMoKTsKIAotCVN5c3RlbS5vdXQucHJpbnRsbigiZm9vVGhpcyA9ICIgKyBmb29UaGlzKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImZvbzJUaGlzID0gIiArIGZvbzJUaGlzKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImZtYlRoaXMgPSAiICsgZm1iVGhpcyk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJmbWJTZXJ2bGV0ID0gIiArIGZtYlNlcnZsZXQpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiZm1iU2VydmxldDIgPSAiICsgZm1iU2VydmxldDIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZm9vVGhpcyA9ICIgKyBmb29UaGlzKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZvbzJUaGlzID0gIiArIGZvbzJUaGlzKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZtYlRoaXMgPSAiICsgZm1iVGhpcyk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJmbWJTZXJ2bGV0ID0gIiArIGZtYlNlcnZsZXQpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZm1iU2VydmxldDIgPSAiICsgZm1iU2VydmxldDIpOwogCi0JaWYoICggZm9vVGhpcyA9PSBmb28yVGhpcyApIHx8ICggZm9vVGhpcyA9PSBmbWJUaGlzICApIHx8Ci0JICAgICggZm9vMlRoaXMgPT0gZm1iVGhpcyApICkgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJNYW5hZ2VkIGJlYW4gaW5zdGFuY2VzIG5vdCB1bmlxdWUiKTsKLQl9CisgICAgaWYoICggZm9vVGhpcyA9PSBmb28yVGhpcyApIHx8ICggZm9vVGhpcyA9PSBmbWJUaGlzICApIHx8CisgICAgICAgICggZm9vMlRoaXMgPT0gZm1iVGhpcyApICkgeworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJNYW5hZ2VkIGJlYW4gaW5zdGFuY2VzIG5vdCB1bmlxdWUiKTsKKyAgICB9CiAKICAgICB9CiAKICAgICBAUHJlRGVzdHJveQogICAgIHByaXZhdGUgdm9pZCBkZXN0cm95KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVsZXNzQmVhbjpkZXN0cm95KCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlbGVzc0JlYW46ZGVzdHJveSgpIik7CiAgICAgfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2pheHJzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXhycy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDIxMWQyYzQuLjUyY2M1YzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2pheHJzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF4cnMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTMgKzE1LDEzIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzEtZWpibGl0ZS1qYXhycyIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gCi08cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+XHUwMDIwCis8cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InNlLmNsaWVudCIgdmFsdWU9ImNvbS5hY21lLkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iJHttb2R1bGV9Ii8+Ci0JCisKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF4cnMvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF4cnMvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGMyOThhNGIuLmMxOGNkZTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2pheHJzL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXhycy9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI2LDcgKzI2LDcgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGFwcE5hbWU7CkBAIC0zNCw0NiArMzQsNDYgQEAKICAgICBwcml2YXRlIFN0cmluZyBwb3J0OwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewotCWFwcE5hbWUgPSBhcmdzWzBdOwotCXN0YXQuYWRkRGVzY3JpcHRpb24oYXBwTmFtZSk7Ci0JQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7ICAgICAgIAotICAgICAgICBjbGllbnQuZG9UZXN0KCk7CQorICAgIGFwcE5hbWUgPSBhcmdzWzBdOworICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oYXBwTmFtZSk7CisgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CisgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoYXBwTmFtZSArICJJRCIpOwogICAgIH0KIAogICAgIHB1YmxpYyBDbGllbnQoU3RyaW5nW10gYXJncykgewotCWhvc3QgPSBhcmdzWzFdOworICAgIGhvc3QgPSBhcmdzWzFdOwogICAgICAgICBwb3J0ID0gYXJnc1syXTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAKLQl0cnkgeworICAgIHRyeSB7CiAKLQkgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgCisgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArCiAgICAgICAgICAgICAgICAgIi8iICsgYXBwTmFtZSArICIvSGVsbG9TZXJ2bGV0IjsKIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnZva2luZyB3ZWJjbGllbnQgc2VydmxldCBhdCAiICsgdXJsKTsKIAotCSAgICBVUkwgdSA9IG5ldyBVUkwodXJsKTsKLSAgICAgICAgCi0JICAgIEh0dHBVUkxDb25uZWN0aW9uIGMxID0gKEh0dHBVUkxDb25uZWN0aW9uKXUub3BlbkNvbm5lY3Rpb24oKTsKLQkgICAgaW50IGNvZGUgPSBjMS5nZXRSZXNwb25zZUNvZGUoKTsKLQkgICAgSW5wdXRTdHJlYW0gaXMgPSBjMS5nZXRJbnB1dFN0cmVhbSgpOwotCSAgICBCdWZmZXJlZFJlYWRlciBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlciAobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7Ci0JICAgIFN0cmluZyBsaW5lID0gbnVsbDsKLQkgICAgd2hpbGUoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKQotCQlTeXN0ZW0ub3V0LnByaW50bG4obGluZSk7Ci0JICAgIGlmKGNvZGUgIT0gMjAwKSB7Ci0JCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJJbmNvcnJlY3QgcmV0dXJuIGNvZGU6ICIgKyBjb2RlKTsKLQkgICAgfQotCSAgICAKLQkgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LlBBU1MpOworICAgICAgICBVUkwgdSA9IG5ldyBVUkwodXJsKTsKIAotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LkZBSUwpOwotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCX0KKyAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gYzEgPSAoSHR0cFVSTENvbm5lY3Rpb24pdS5vcGVuQ29ubmVjdGlvbigpOworICAgICAgICBpbnQgY29kZSA9IGMxLmdldFJlc3BvbnNlQ29kZSgpOworICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IGMxLmdldElucHV0U3RyZWFtKCk7CisgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyIChuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKKyAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOworICAgICAgICB3aGlsZSgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihsaW5lKTsKKyAgICAgICAgaWYoY29kZSAhPSAyMDApIHsKKyAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkluY29ycmVjdCByZXR1cm4gY29kZTogIiArIGNvZGUpOworICAgICAgICB9CisKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LlBBU1MpOworCisgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuRkFJTCk7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQogICAgIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXhycy93YXIvQ29udGV4dExpc3RlbmVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXhycy93YXIvQ29udGV4dExpc3RlbmVyLmphdmEKaW5kZXggYjVmMGZhNC4uMjMwZjRkNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF4cnMvd2FyL0NvbnRleHRMaXN0ZW5lci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2pheHJzL3dhci9Db250ZXh0TGlzdGVuZXIuamF2YQpAQCAtMzAsNTMgKzMwLDUzIEBACiAKICAgICBwdWJsaWMgdm9pZCBjb250ZXh0SW5pdGlhbGl6ZWQoU2VydmxldENvbnRleHRFdmVudCBzY2UpIHsKIAotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gQ29udGV4dExpc3RlbmVyOjpjb250ZXh0SW5pdGlhbGl6ZWQiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIENvbnRleHRMaXN0ZW5lcjo6Y29udGV4dEluaXRpYWxpemVkIik7CiAKLQl0cnkgeworICAgIHRyeSB7CiAKLQkgICAgRm9vTWFuYWdlZEJlYW4gZiA9IChGb29NYW5hZ2VkQmVhbikKLQkJbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOm1vZHVsZS9Gb29NYW5hZ2VkQmVhbiIpOwotCSAgICBmLmhlbGxvKCk7CisgICAgICAgIEZvb01hbmFnZWRCZWFuIGYgPSAoRm9vTWFuYWdlZEJlYW4pCisgICAgICAgIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTptb2R1bGUvRm9vTWFuYWdlZEJlYW4iKTsKKyAgICAgICAgZi5oZWxsbygpOwogCi0JICAgIE9iamVjdCBqYXhyc0VqYkdsdWUgPSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6b3JnLmdsYXNzZmlzaC5lamIuY29udGFpbmVyLmludGVyY2VwdG9yX2JpbmRpbmdfc3BpIik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiamF4cnNFamJHbHVlID0gIiArIGpheHJzRWpiR2x1ZSk7Ci0JICAgIE1ldGhvZCBtID0gamF4cnNFamJHbHVlLmdldENsYXNzKCkuZ2V0TWV0aG9kKCJyZWdpc3RlckludGVyY2VwdG9yIiwgamF2YS5sYW5nLk9iamVjdC5jbGFzcyk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigicmVnaXN0ZXIgaW50ZXJjZXB0b3IgbWV0aG9kID0gIiArIG0pOworICAgICAgICBPYmplY3QgamF4cnNFamJHbHVlID0gbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOm9yZy5nbGFzc2Zpc2guZWpiLmNvbnRhaW5lci5pbnRlcmNlcHRvcl9iaW5kaW5nX3NwaSIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImpheHJzRWpiR2x1ZSA9ICIgKyBqYXhyc0VqYkdsdWUpOworICAgICAgICBNZXRob2QgbSA9IGpheHJzRWpiR2x1ZS5nZXRDbGFzcygpLmdldE1ldGhvZCgicmVnaXN0ZXJJbnRlcmNlcHRvciIsIGphdmEubGFuZy5PYmplY3QuY2xhc3MpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInJlZ2lzdGVyIGludGVyY2VwdG9yIG1ldGhvZCA9ICIgKyBtKTsKIAotCSAgICBtLmludm9rZShqYXhyc0VqYkdsdWUsIG5ldyBjb20uc3VuLmplcnNleS5KZXJzZXlJbnRlcmNlcHRvcigpKTsKKyAgICAgICAgbS5pbnZva2UoamF4cnNFamJHbHVlLCBuZXcgY29tLnN1bi5qZXJzZXkuSmVyc2V5SW50ZXJjZXB0b3IoKSk7CiAKIAotCSAgICAvLyBUZXN0IEluamVjdGlvbk1hbmFnZXIgbWFuYWdlZCBiZWFuIGZ1bmN0aW9uYWxpdHkKLQkgICAgT2JqZWN0IGluamVjdGlvbk1nciA9IG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiY29tLnN1bi5lbnRlcnByaXNlLmNvbnRhaW5lci5jb21tb24uc3BpLnV0aWwuSW5qZWN0aW9uTWFuYWdlciIpOwotCSAgICBNZXRob2QgY3JlYXRlTWFuYWdlZE1ldGhvZCA9IGluamVjdGlvbk1nci5nZXRDbGFzcygpLmdldE1ldGhvZCgiY3JlYXRlTWFuYWdlZE9iamVjdCIsIGphdmEubGFuZy5DbGFzcy5jbGFzcyk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY3JlYXRlIG1hbmFnZWQgb2JqZWN0IG1ldGhvZCA9ICIgKyBjcmVhdGVNYW5hZ2VkTWV0aG9kKTsKLQkgICAgRm9vTWFuYWdlZEJlYW4gZjIgPSAoRm9vTWFuYWdlZEJlYW4pIGNyZWF0ZU1hbmFnZWRNZXRob2QuaW52b2tlKGluamVjdGlvbk1nciwgRm9vTWFuYWdlZEJlYW4uY2xhc3MpOwotCSAgICBmMi5oZWxsbygpOwotCSAgICBmMi5hc3NlcnRJbnRlcmNlcHRvckJpbmRpbmcoKTsKKyAgICAgICAgLy8gVGVzdCBJbmplY3Rpb25NYW5hZ2VyIG1hbmFnZWQgYmVhbiBmdW5jdGlvbmFsaXR5CisgICAgICAgIE9iamVjdCBpbmplY3Rpb25NZ3IgPSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImNvbS5zdW4uZW50ZXJwcmlzZS5jb250YWluZXIuY29tbW9uLnNwaS51dGlsLkluamVjdGlvbk1hbmFnZXIiKTsKKyAgICAgICAgTWV0aG9kIGNyZWF0ZU1hbmFnZWRNZXRob2QgPSBpbmplY3Rpb25NZ3IuZ2V0Q2xhc3MoKS5nZXRNZXRob2QoImNyZWF0ZU1hbmFnZWRPYmplY3QiLCBqYXZhLmxhbmcuQ2xhc3MuY2xhc3MpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNyZWF0ZSBtYW5hZ2VkIG9iamVjdCBtZXRob2QgPSAiICsgY3JlYXRlTWFuYWdlZE1ldGhvZCk7CisgICAgICAgIEZvb01hbmFnZWRCZWFuIGYyID0gKEZvb01hbmFnZWRCZWFuKSBjcmVhdGVNYW5hZ2VkTWV0aG9kLmludm9rZShpbmplY3Rpb25NZ3IsIEZvb01hbmFnZWRCZWFuLmNsYXNzKTsKKyAgICAgICAgZjIuaGVsbG8oKTsKKyAgICAgICAgZjIuYXNzZXJ0SW50ZXJjZXB0b3JCaW5kaW5nKCk7CiAKLQkgICAgTWV0aG9kIGRlc3Ryb3lNYW5hZ2VkTWV0aG9kID0gaW5qZWN0aW9uTWdyLmdldENsYXNzKCkuZ2V0TWV0aG9kKCJkZXN0cm95TWFuYWdlZE9iamVjdCIsIGphdmEubGFuZy5PYmplY3QuY2xhc3MpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oImRlc3Ryb3kgbWFuYWdlZCBvYmplY3QgbWV0aG9kID0gIiArIGRlc3Ryb3lNYW5hZ2VkTWV0aG9kKTsKLQkgICAgZGVzdHJveU1hbmFnZWRNZXRob2QuaW52b2tlKGluamVjdGlvbk1nciwgZjIpOworICAgICAgICBNZXRob2QgZGVzdHJveU1hbmFnZWRNZXRob2QgPSBpbmplY3Rpb25NZ3IuZ2V0Q2xhc3MoKS5nZXRNZXRob2QoImRlc3Ryb3lNYW5hZ2VkT2JqZWN0IiwgamF2YS5sYW5nLk9iamVjdC5jbGFzcyk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZGVzdHJveSBtYW5hZ2VkIG9iamVjdCBtZXRob2QgPSAiICsgZGVzdHJveU1hbmFnZWRNZXRob2QpOworICAgICAgICBkZXN0cm95TWFuYWdlZE1ldGhvZC5pbnZva2UoaW5qZWN0aW9uTWdyLCBmMik7CiAKLQkgICAgIEZvb05vbk1hbmFnZWRCZWFuIG5vbkYgPSAoRm9vTm9uTWFuYWdlZEJlYW4pIGNyZWF0ZU1hbmFnZWRNZXRob2QuaW52b2tlKGluamVjdGlvbk1nciwgRm9vTm9uTWFuYWdlZEJlYW4uY2xhc3MpOwotCSAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGb29Ob25NYW5hZ2VkQmVhbiA9ICIgKyBub25GKTsKLQkgICAgIG5vbkYuaGVsbG8oKTsKLQkgICAgIGRlc3Ryb3lNYW5hZ2VkTWV0aG9kLmludm9rZShpbmplY3Rpb25NZ3IsIG5vbkYpOwotCSAgICAKLQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQorICAgICAgICAgRm9vTm9uTWFuYWdlZEJlYW4gbm9uRiA9IChGb29Ob25NYW5hZ2VkQmVhbikgY3JlYXRlTWFuYWdlZE1ldGhvZC5pbnZva2UoaW5qZWN0aW9uTWdyLCBGb29Ob25NYW5hZ2VkQmVhbi5jbGFzcyk7CisgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZvb05vbk1hbmFnZWRCZWFuID0gIiArIG5vbkYpOworICAgICAgICAgbm9uRi5oZWxsbygpOworICAgICAgICAgZGVzdHJveU1hbmFnZWRNZXRob2QuaW52b2tlKGluamVjdGlvbk1nciwgbm9uRik7CisKKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQogCiAgICAgfQogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwdWJsaWMgdm9pZCBwYygpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIENvbnRleHRMaXN0ZW5lcjo6cG9zdENvbnN0cnVjdCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gQ29udGV4dExpc3RlbmVyOjpwb3N0Q29uc3RydWN0Iik7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgY29udGV4dERlc3Ryb3llZChTZXJ2bGV0Q29udGV4dEV2ZW50IHNjZSkgewogCi0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBDb250ZXh0TGlzdGVuZXI6OmNvbnRleHREZXN0cm95ZWQiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIENvbnRleHRMaXN0ZW5lcjo6Y29udGV4dERlc3Ryb3llZCIpOwogCiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXhycy93YXIvRm9vTWFuYWdlZEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2pheHJzL3dhci9Gb29NYW5hZ2VkQmVhbi5qYXZhCmluZGV4IGIyNWI1YjMuLjA5Y2ZmY2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2pheHJzL3dhci9Gb29NYW5hZ2VkQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2pheHJzL3dhci9Gb29NYW5hZ2VkQmVhbi5qYXZhCkBAIC0zMSwyMyArMzEsMjMgQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29NYW5hZ2VkQmVhbjppbml0KCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb01hbmFnZWRCZWFuOmluaXQoKSIpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGhlbGxvKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vTWFuYWdlZEJlYW46OmhlbGxvKCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb01hbmFnZWRCZWFuOjpoZWxsbygpIik7CiAgICAgfQogCiAKICAgICBwdWJsaWMgdm9pZCBhc3NlcnRJbnRlcmNlcHRvckJpbmRpbmcoKSB7Ci0JaWYoICFpbnRlcmNlcHRvcldhc0hlcmUgKSB7Ci0JICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJpbnRlcmNlcHRvciB3YXMgbm90IGhlcmUiKTsKLQl9CisgICAgaWYoICFpbnRlcmNlcHRvcldhc0hlcmUgKSB7CisgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJpbnRlcmNlcHRvciB3YXMgbm90IGhlcmUiKTsKKyAgICB9CiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKICAgICBwcml2YXRlIHZvaWQgZGVzdHJveSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb01hbmFnZWRCZWFuOmRlc3Ryb3koKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vTWFuYWdlZEJlYW46ZGVzdHJveSgpIik7CiAgICAgfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2pheHJzL3dhci9Gb29Ob25NYW5hZ2VkQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF4cnMvd2FyL0Zvb05vbk1hbmFnZWRCZWFuLmphdmEKaW5kZXggMDlkY2IyMi4uM2M3MDZjYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF4cnMvd2FyL0Zvb05vbk1hbmFnZWRCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF4cnMvd2FyL0Zvb05vbk1hbmFnZWRCZWFuLmphdmEKQEAgLTI0LDI1ICsyNCwyNSBAQAogCiBwdWJsaWMgY2xhc3MgRm9vTm9uTWFuYWdlZEJlYW4gewogCi0gICAgQFJlc291cmNlIAorICAgIEBSZXNvdXJjZQogICAgIHByaXZhdGUgVXNlclRyYW5zYWN0aW9uIHV0OwogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdCgpIHsKLQlpZiggdXQgPT0gbnVsbCApIHsKLQkgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigidXQgaXMgbnVsbCIpOwotCX0KKyAgICBpZiggdXQgPT0gbnVsbCApIHsKKyAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigidXQgaXMgbnVsbCIpOworICAgIH0KIAotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vTm9uTWFuYWdlZEJlYW46aW5pdCgpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29Ob25NYW5hZ2VkQmVhbjppbml0KCkiKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBoZWxsbygpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb05vbk1hbmFnZWRCZWFuOjpoZWxsbygpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29Ob25NYW5hZ2VkQmVhbjo6aGVsbG8oKSIpOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CiAgICAgcHJpdmF0ZSB2b2lkIGRlc3Ryb3koKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29Ob25NYW5hZ2VkQmVhbjpkZXN0cm95KCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb05vbk1hbmFnZWRCZWFuOmRlc3Ryb3koKSIpOwogICAgIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXhycy93YXIvSGVsbG9TZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXhycy93YXIvSGVsbG9TZXJ2bGV0LmphdmEKaW5kZXggNGZiNTMyOC4uZTEyZDM3MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF4cnMvd2FyL0hlbGxvU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2pheHJzL3dhci9IZWxsb1NlcnZsZXQuamF2YQpAQCAtNDQsMzcgKzQ0LDM3IEBACiAgICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU2VydmxldDo6aW5pdCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TZXJ2bGV0Ojppbml0Iik7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCiAgICAgcHJvdGVjdGVkIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAKLQlyZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKKyAgICByZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcC5nZXRXcml0ZXIoKTsKIAotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TZXJ2bGV0Ojpkb0dldCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TZXJ2bGV0Ojpkb0dldCIpOwogCi0Jc2ltcGxlU2luZ2xldG9uLmhlbGxvKCk7Ci0Jc2ltcGxlU3RhdGVsZXNzLmhlbGxvKCk7CisgICAgc2ltcGxlU2luZ2xldG9uLmhlbGxvKCk7CisgICAgc2ltcGxlU3RhdGVsZXNzLmhlbGxvKCk7CiAKLQlzaW1wbGVTaW5nbGV0b24uYXNzZXJ0SW50ZXJjZXB0b3JCaW5kaW5nKCk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJTaW5nbGV0b24gaW50ZXJjZXB0b3IgYmluZGluZyBhc3NlcnRlZCIpOworICAgIHNpbXBsZVNpbmdsZXRvbi5hc3NlcnRJbnRlcmNlcHRvckJpbmRpbmcoKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNpbmdsZXRvbiBpbnRlcmNlcHRvciBiaW5kaW5nIGFzc2VydGVkIik7CiAKLQlzaW1wbGVTdGF0ZWxlc3MuYXNzZXJ0SW50ZXJjZXB0b3JCaW5kaW5nKCk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZWxlc3MgaW50ZXJjZXB0b3IgYmluZGluZyBhc3NlcnRlZCIpOworICAgIHNpbXBsZVN0YXRlbGVzcy5hc3NlcnRJbnRlcmNlcHRvckJpbmRpbmcoKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlbGVzcyBpbnRlcmNlcHRvciBiaW5kaW5nIGFzc2VydGVkIik7CiAKLQlmb29NYW5hZ2VkQmVhbi5hc3NlcnRJbnRlcmNlcHRvckJpbmRpbmcoKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkZvb01hbmFnZWRCZWFuIGludGVyY2VwdG9yIGJpbmRpbmcgYXNzZXJ0ZWQiKTsKLQlmb29NYW5hZ2VkQmVhbi5oZWxsbygpOworICAgIGZvb01hbmFnZWRCZWFuLmFzc2VydEludGVyY2VwdG9yQmluZGluZygpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRm9vTWFuYWdlZEJlYW4gaW50ZXJjZXB0b3IgYmluZGluZyBhc3NlcnRlZCIpOworICAgIGZvb01hbmFnZWRCZWFuLmhlbGxvKCk7CiAKIAotCW91dC5wcmludGxuKCI8SFRNTD4gPEhFQUQ+IDxUSVRMRT4gSk1TIFNlcnZsZXQgT3V0cHV0IDwvVElUTEU+IDwvSEVBRD4gPEJPRFkgQkdDT0xPUj13aGl0ZT4iKTsKKyAgICBvdXQucHJpbnRsbigiPEhUTUw+IDxIRUFEPiA8VElUTEU+IEpNUyBTZXJ2bGV0IE91dHB1dCA8L1RJVExFPiA8L0hFQUQ+IDxCT0RZIEJHQ09MT1I9d2hpdGU+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPENFTlRFUj4gPEZPTlQgc2l6ZT0rMSBDT0xPUj1ibHVlPkRhdGFiYXNlU2VydmVsdCA6OiBBbGwgaW5mb3JtYXRpb24gSSBjYW4gZ2l2ZSA8L0ZPTlQ+IDwvQ0VOVEVSPiA8cD4gIiApOwotICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBDb250ZXh0IFBhdGggOiAgPC9GT05UPiAiICsgcmVxLmdldENvbnRleHRQYXRoKCkgKyAiPGJyPiIgKTsgCi0gICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IFNlcnZsZXQgUGF0aCA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0U2VydmxldFBhdGgoKSArICI8YnI+IiApOyAKLSAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gUGF0aCBJbmZvIDogIDwvRk9OVD4gIiArIHJlcS5nZXRQYXRoSW5mbygpICsgIjxicj4iICk7IAorICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBDb250ZXh0IFBhdGggOiAgPC9GT05UPiAiICsgcmVxLmdldENvbnRleHRQYXRoKCkgKyAiPGJyPiIgKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gU2VydmxldCBQYXRoIDogIDwvRk9OVD4gIiArIHJlcS5nZXRTZXJ2bGV0UGF0aCgpICsgIjxicj4iICk7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IFBhdGggSW5mbyA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0UGF0aEluZm8oKSArICI8YnI+IiApOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvQk9EWT4gPC9IVE1MPiAiKTsKIAogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2pheHJzL3dhci9JbnRlcmNlcHRvckEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2pheHJzL3dhci9JbnRlcmNlcHRvckEuamF2YQppbmRleCA3Y2E3NTI5Li41OWM5NzgzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXhycy93YXIvSW50ZXJjZXB0b3JBLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF4cnMvd2FyL0ludGVyY2VwdG9yQS5qYXZhCkBAIC0yOCwyMSArMjgsMjEgQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoSW52b2NhdGlvbkNvbnRleHQgYykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBJbnRlcmNlcHRvckE6OmluaXQoKSAiKTsKLQljLnByb2NlZWQoKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEludGVyY2VwdG9yQTo6aW5pdCgpICIpOworICAgIGMucHJvY2VlZCgpOwogICAgIH0KIAogCiAgICAgQEFyb3VuZEludm9rZQogICAgIHByaXZhdGUgT2JqZWN0IHJvdW5kSW52b2tlKEludm9jYXRpb25Db250ZXh0IGMpIHRocm93cyBFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSW50ZXJjZXB0b3JBOjphcm91bmRJbnZva2UoKSAiKTsKLQlyZXR1cm4gYy5wcm9jZWVkKCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBJbnRlcmNlcHRvckE6OmFyb3VuZEludm9rZSgpICIpOworICAgIHJldHVybiBjLnByb2NlZWQoKTsKICAgICB9CiAKICAgICBAUHJlRGVzdHJveQogICAgIHByaXZhdGUgdm9pZCBkZXN0cm95KEludm9jYXRpb25Db250ZXh0IGMpIHRocm93cyBFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSW50ZXJjZXB0b3JBOjpkZXN0cm95KCkgIik7Ci0JYy5wcm9jZWVkKCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBJbnRlcmNlcHRvckE6OmRlc3Ryb3koKSAiKTsKKyAgICBjLnByb2NlZWQoKTsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2pheHJzL3dhci9KZXJzZXlJbnRlcmNlcHRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF4cnMvd2FyL0plcnNleUludGVyY2VwdG9yLmphdmEKaW5kZXggYTE3ODY1MC4uMmRlZDA0MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF4cnMvd2FyL0plcnNleUludGVyY2VwdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF4cnMvd2FyL0plcnNleUludGVyY2VwdG9yLmphdmEKQEAgLTI4LDI0ICsyOCwyNCBAQAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoSW52b2NhdGlvbkNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKLQlPYmplY3QgYmVhbkluc3RhbmNlID0gY29udGV4dC5nZXRUYXJnZXQoKTsKKyAgICBPYmplY3QgYmVhbkluc3RhbmNlID0gY29udGV4dC5nZXRUYXJnZXQoKTsKIAotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSmVyc2V5SW50ZXJjZXB0b3I6OmluaXQoKSA6ICIgKyAKLQkJCSAgIGJlYW5JbnN0YW5jZSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBKZXJzZXlJbnRlcmNlcHRvcjo6aW5pdCgpIDogIiArCisgICAgICAgICAgICAgICBiZWFuSW5zdGFuY2UpOwogCiAKLQlpZiggYmVhbkluc3RhbmNlIGluc3RhbmNlb2YgU2luZ2xldG9uQmVhbiApIHsKLQkgICAgKChTaW5nbGV0b25CZWFuKSBiZWFuSW5zdGFuY2UpLmludGVyY2VwdG9yV2FzSGVyZSA9IHRydWU7Ci0JfSBlbHNlIGlmKCBiZWFuSW5zdGFuY2UgaW5zdGFuY2VvZiBTdGF0ZWxlc3NCZWFuICkgewotCSAgICAoKFN0YXRlbGVzc0JlYW4pIGJlYW5JbnN0YW5jZSkuaW50ZXJjZXB0b3JXYXNIZXJlID0gdHJ1ZTsKLQl9IGVsc2UgaWYoIGJlYW5JbnN0YW5jZSBpbnN0YW5jZW9mIEZvb01hbmFnZWRCZWFuICkgewotCSAgICAoKEZvb01hbmFnZWRCZWFuKSBiZWFuSW5zdGFuY2UpLmludGVyY2VwdG9yV2FzSGVyZSA9IHRydWU7Ci0JfQorICAgIGlmKCBiZWFuSW5zdGFuY2UgaW5zdGFuY2VvZiBTaW5nbGV0b25CZWFuICkgeworICAgICAgICAoKFNpbmdsZXRvbkJlYW4pIGJlYW5JbnN0YW5jZSkuaW50ZXJjZXB0b3JXYXNIZXJlID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYoIGJlYW5JbnN0YW5jZSBpbnN0YW5jZW9mIFN0YXRlbGVzc0JlYW4gKSB7CisgICAgICAgICgoU3RhdGVsZXNzQmVhbikgYmVhbkluc3RhbmNlKS5pbnRlcmNlcHRvcldhc0hlcmUgPSB0cnVlOworICAgIH0gZWxzZSBpZiggYmVhbkluc3RhbmNlIGluc3RhbmNlb2YgRm9vTWFuYWdlZEJlYW4gKSB7CisgICAgICAgICgoRm9vTWFuYWdlZEJlYW4pIGJlYW5JbnN0YW5jZSkuaW50ZXJjZXB0b3JXYXNIZXJlID0gdHJ1ZTsKKyAgICB9CiAKLQkvLyAuLi4KKyAgICAvLyAuLi4KIAotCS8vIEludm9rZSBuZXh0IGludGVyY2VwdG9yIGluIGNoYWluCi0JY29udGV4dC5wcm9jZWVkKCk7CisgICAgLy8gSW52b2tlIG5leHQgaW50ZXJjZXB0b3IgaW4gY2hhaW4KKyAgICBjb250ZXh0LnByb2NlZWQoKTsKIAogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF4cnMvd2FyL1NpbmdsZXRvbkJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2pheHJzL3dhci9TaW5nbGV0b25CZWFuLmphdmEKaW5kZXggZDM4MjI1Ni4uOTIzYTU1YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF4cnMvd2FyL1NpbmdsZXRvbkJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXhycy93YXIvU2luZ2xldG9uQmVhbi5qYXZhCkBAIC0zOSw0MSArMzksNDEgQEAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0KCkgewogCi0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOmluaXQoKSAiKTsKLQkKLQl0cnkgewotCSAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjppbml0KCkgIik7CiAKLQkgICAgLy8gTG9va3VwIHNpbXBsZSBmb3JtIG9mIHBvcnRhYmxlIEpOREkgbmFtZSAKLQkgICAgIHN0YXRlbGVzcyA9IChTdGF0ZWxlc3NCZWFuKSAKLQkJaWMubG9va3VwKCJqYXZhOm1vZHVsZS9TdGF0ZWxlc3NCZWFuIik7CisgICAgdHJ5IHsKKyAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKIAotCSAgICAgc3RhdGVsZXNzLmhlbGxvKCk7CisgICAgICAgIC8vIExvb2t1cCBzaW1wbGUgZm9ybSBvZiBwb3J0YWJsZSBKTkRJIG5hbWUKKyAgICAgICAgIHN0YXRlbGVzcyA9IChTdGF0ZWxlc3NCZWFuKQorICAgICAgICBpYy5sb29rdXAoImphdmE6bW9kdWxlL1N0YXRlbGVzc0JlYW4iKTsKIAotCSAgICAvLyBMb29rdXAgZnVsbHktcXVhbGlmaWVkIGZvciBvZiBwb3J0YWJsZSBKTkRJIG5hbWUKLQkgICAgc3RhdGVsZXNzMiA9IChTdGF0ZWxlc3NCZWFuKSAKLQkJaWMubG9va3VwKCJqYXZhOm1vZHVsZS9TdGF0ZWxlc3NCZWFuIWNvbS5hY21lLlN0YXRlbGVzc0JlYW4iKTsKLQkgIAotCX0gY2F0Y2goTmFtaW5nRXhjZXB0aW9uIG5lKSB7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24obmUpOwotCX0KKyAgICAgICAgIHN0YXRlbGVzcy5oZWxsbygpOworCisgICAgICAgIC8vIExvb2t1cCBmdWxseS1xdWFsaWZpZWQgZm9yIG9mIHBvcnRhYmxlIEpOREkgbmFtZQorICAgICAgICBzdGF0ZWxlc3MyID0gKFN0YXRlbGVzc0JlYW4pCisgICAgICAgIGljLmxvb2t1cCgiamF2YTptb2R1bGUvU3RhdGVsZXNzQmVhbiFjb20uYWNtZS5TdGF0ZWxlc3NCZWFuIik7CisKKyAgICB9IGNhdGNoKE5hbWluZ0V4Y2VwdGlvbiBuZSkgeworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKG5lKTsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgaGVsbG8oKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOmhlbGxvKCkiKTsKLQlzdGF0ZWxlc3MuaGVsbG8oKTsKLQlzdGF0ZWxlc3MyLmhlbGxvKCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOmhlbGxvKCkiKTsKKyAgICBzdGF0ZWxlc3MuaGVsbG8oKTsKKyAgICBzdGF0ZWxlc3MyLmhlbGxvKCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgYXNzZXJ0SW50ZXJjZXB0b3JCaW5kaW5nKCkgewotCWlmKCAhaW50ZXJjZXB0b3JXYXNIZXJlICkgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJpbnRlcmNlcHRvciB3YXMgbm90IGhlcmUiKTsKLQl9CisgICAgaWYoICFpbnRlcmNlcHRvcldhc0hlcmUgKSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImludGVyY2VwdG9yIHdhcyBub3QgaGVyZSIpOworICAgIH0KICAgICB9CiAKICAgICBAUHJlRGVzdHJveQogICAgIHByaXZhdGUgdm9pZCBkZXN0cm95KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjpkZXN0cm95KCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46ZGVzdHJveSgpIik7CiAgICAgfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2pheHJzL3dhci9TdGF0ZWxlc3NCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9qYXhycy93YXIvU3RhdGVsZXNzQmVhbi5qYXZhCmluZGV4IGIxMGUzNGMuLmU3NjRjNDUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL2pheHJzL3dhci9TdGF0ZWxlc3NCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvamF4cnMvd2FyL1N0YXRlbGVzc0JlYW4uamF2YQpAQCAtMzEsMjMgKzMxLDIzIEBACiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVsZXNzQmVhbjppbml0KCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlbGVzc0JlYW46aW5pdCgpIik7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgaGVsbG8oKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWxlc3NCZWFuOjpoZWxsbygpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWxlc3NCZWFuOjpoZWxsbygpIik7CiAgICAgfQogCiAKICAgICBwdWJsaWMgdm9pZCBhc3NlcnRJbnRlcmNlcHRvckJpbmRpbmcoKSB7Ci0JaWYoICFpbnRlcmNlcHRvcldhc0hlcmUgKSB7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImludGVyY2VwdG9yIHdhcyBub3QgaGVyZSIpOwotCX0KKyAgICBpZiggIWludGVyY2VwdG9yV2FzSGVyZSApIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiaW50ZXJjZXB0b3Igd2FzIG5vdCBoZXJlIik7CisgICAgfQogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CiAgICAgcHJpdmF0ZSB2b2lkIGRlc3Ryb3koKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWxlc3NCZWFuOmRlc3Ryb3koKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVsZXNzQmVhbjpkZXN0cm95KCkiKTsKICAgICB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvbWFuYWdlZGJlYW4vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL21hbmFnZWRiZWFuL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMTQ3NDc0ZS4uNmIyY2M4OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvbWFuYWdlZGJlYW4vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9tYW5hZ2VkYmVhbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMyArMTUsMTMgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lamIzMS1lamJsaXRlLW1hbmFnZWRiZWFuIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAKLTxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz5cdTAwMjAKKzxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic2UuY2xpZW50IiB2YWx1ZT0iY29tLmFjbWUuQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIke21vZHVsZX0iLz4KLQkKKwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9tYW5hZ2VkYmVhbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9tYW5hZ2VkYmVhbi9idWlsZC54bWwKaW5kZXggYjZhM2UzNi4uOWYzMjVhYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvbWFuYWdlZGJlYW4vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL21hbmFnZWRiZWFuL2J1aWxkLnhtbApAQCAtMzQsMTEgKzM0LDExIEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0id2FyIi8+Ci0gICAgICAgIDwvYW50Y2FsbD4gICAgCisgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgpAQCAtNDgsOSArNDgsOSBAQAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY2xpZW50Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTU4LDkgKzU4LDkgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bl9zZSIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW5fc2UiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgIDxqYXZhICBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9IiR7c2UuY2xpZW50fSI+CkBAIC03Miw3ICs3Miw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9tYW5hZ2VkYmVhbi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9tYW5hZ2VkYmVhbi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggYzI5OGE0Yi4uYzE4Y2RlMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvbWFuYWdlZGJlYW4vY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL21hbmFnZWRiZWFuL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjYsNyArMjYsNyBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgYXBwTmFtZTsKQEAgLTM0LDQ2ICszNCw0NiBAQAogICAgIHByaXZhdGUgU3RyaW5nIHBvcnQ7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7Ci0JYXBwTmFtZSA9IGFyZ3NbMF07Ci0Jc3RhdC5hZGREZXNjcmlwdGlvbihhcHBOYW1lKTsKLQlDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsgICAgICAgCi0gICAgICAgIGNsaWVudC5kb1Rlc3QoKTsJCisgICAgYXBwTmFtZSA9IGFyZ3NbMF07CisgICAgc3RhdC5hZGREZXNjcmlwdGlvbihhcHBOYW1lKTsKKyAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKKyAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShhcHBOYW1lICsgIklEIik7CiAgICAgfQogCiAgICAgcHVibGljIENsaWVudChTdHJpbmdbXSBhcmdzKSB7Ci0JaG9zdCA9IGFyZ3NbMV07CisgICAgaG9zdCA9IGFyZ3NbMV07CiAgICAgICAgIHBvcnQgPSBhcmdzWzJdOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKIAotCXRyeSB7CisgICAgdHJ5IHsKIAotCSAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyAKKyAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsKICAgICAgICAgICAgICAgICAiLyIgKyBhcHBOYW1lICsgIi9IZWxsb1NlcnZsZXQiOwogCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImludm9raW5nIHdlYmNsaWVudCBzZXJ2bGV0IGF0ICIgKyB1cmwpOwogCi0JICAgIFVSTCB1ID0gbmV3IFVSTCh1cmwpOwotICAgICAgICAKLQkgICAgSHR0cFVSTENvbm5lY3Rpb24gYzEgPSAoSHR0cFVSTENvbm5lY3Rpb24pdS5vcGVuQ29ubmVjdGlvbigpOwotCSAgICBpbnQgY29kZSA9IGMxLmdldFJlc3BvbnNlQ29kZSgpOwotCSAgICBJbnB1dFN0cmVhbSBpcyA9IGMxLmdldElucHV0U3RyZWFtKCk7Ci0JICAgIEJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyIChuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKLQkgICAgU3RyaW5nIGxpbmUgPSBudWxsOwotCSAgICB3aGlsZSgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpCi0JCVN5c3RlbS5vdXQucHJpbnRsbihsaW5lKTsKLQkgICAgaWYoY29kZSAhPSAyMDApIHsKLQkJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkluY29ycmVjdCByZXR1cm4gY29kZTogIiArIGNvZGUpOwotCSAgICB9Ci0JICAgIAotCSAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuUEFTUyk7CisgICAgICAgIFVSTCB1ID0gbmV3IFVSTCh1cmwpOwogCi0JfSBjYXRjaChFeGNlcHRpb24gZSkgewotCSAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuRkFJTCk7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQorICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjMSA9IChIdHRwVVJMQ29ubmVjdGlvbil1Lm9wZW5Db25uZWN0aW9uKCk7CisgICAgICAgIGludCBjb2RlID0gYzEuZ2V0UmVzcG9uc2VDb2RlKCk7CisgICAgICAgIElucHV0U3RyZWFtIGlzID0gYzEuZ2V0SW5wdXRTdHJlYW0oKTsKKyAgICAgICAgQnVmZmVyZWRSZWFkZXIgaW5wdXQgPSBuZXcgQnVmZmVyZWRSZWFkZXIgKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOworICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CisgICAgICAgIHdoaWxlKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGxpbmUpOworICAgICAgICBpZihjb2RlICE9IDIwMCkgeworICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiSW5jb3JyZWN0IHJldHVybiBjb2RlOiAiICsgY29kZSk7CisgICAgICAgIH0KKworICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuUEFTUyk7CisKKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5GQUlMKTsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CiAgICAgfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL21hbmFnZWRiZWFuL3dhci9Gb28uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL21hbmFnZWRiZWFuL3dhci9Gb28uamF2YQppbmRleCAzODNhZjNkLi5iZTNkMTQwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9tYW5hZ2VkYmVhbi93YXIvRm9vLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvbWFuYWdlZGJlYW4vd2FyL0Zvby5qYXZhCkBAIC0yMiw3ICsyMiw3IEBACiBwdWJsaWMgY2xhc3MgRm9vIHsKIAogCi0gICAgQFJlc291cmNlIE1hbmFnZWRCZWFuMUludCBtOyAKLSAgICAKKyAgICBAUmVzb3VyY2UgTWFuYWdlZEJlYW4xSW50IG07CisKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvbWFuYWdlZGJlYW4vd2FyL0hlbGxvU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvbWFuYWdlZGJlYW4vd2FyL0hlbGxvU2VydmxldC5qYXZhCmluZGV4IDgwZTdlOGMuLmViNTM0YjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL21hbmFnZWRiZWFuL3dhci9IZWxsb1NlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9tYW5hZ2VkYmVhbi93YXIvSGVsbG9TZXJ2bGV0LmphdmEKQEAgLTM2LDEwMyArMzYsMTAzIEBACiBAV2ViU2VydmxldCh1cmxQYXR0ZXJucz0iL0hlbGxvU2VydmxldCIsIGxvYWRPblN0YXJ0dXA9MSkKIHB1YmxpYyBjbGFzcyBIZWxsb1NlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAKLSAgICBAUmVzb3VyY2UgICAgCisgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBNYW5hZ2VkQmVhbkV4dHJhIG1iRXh0cmE7CiAKIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TZXJ2bGV0Ojppbml0Iik7Ci0JbWJFeHRyYS5oZWxsbygpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TZXJ2bGV0Ojppbml0Iik7CisgICAgbWJFeHRyYS5oZWxsbygpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQogICAgIHByb3RlY3RlZCB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogCi0JcmVzcC5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CisgICAgcmVzcC5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3AuZ2V0V3JpdGVyKCk7CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU2VydmxldDo6ZG9HZXQiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU2VydmxldDo6ZG9HZXQiKTsKIAotCWludCBudW1JdGVyID0gMjsKKyAgICBpbnQgbnVtSXRlciA9IDI7CiAKLQl0cnkgeworICAgIHRyeSB7CiAKLQkgICAgZG9UZXN0KG51bUl0ZXIsICJqYXZhOm1vZHVsZS9NYW5hZ2VkQmVhbk5vSW50IiwgMCwgIiIpOwotCSAgICBkb1Rlc3QobnVtSXRlciwgImphdmE6bW9kdWxlL01hbmFnZWRCZWFuMUludCIsIG51bUl0ZXIsICJBIik7Ci0JICAgIGRvVGVzdChudW1JdGVyLCAiamF2YTptb2R1bGUvTWFuYWdlZEJlYW4ySW50IiwgbnVtSXRlcioyLCAiQUIiKTsKLQkgICAgZG9UZXN0KG51bUl0ZXIsICJqYXZhOm1vZHVsZS9NYW5hZ2VkQmVhbjJJbnRQbHVzQmVhbiIsIG51bUl0ZXIqMiwgIkFCTSIpOwotCSAgICBkb1Rlc3QobnVtSXRlciwgImphdmE6bW9kdWxlL01hbmFnZWRCZWFuTm9JbnRQbHVzQmVhbiIsIDAsICJNIik7CisgICAgICAgIGRvVGVzdChudW1JdGVyLCAiamF2YTptb2R1bGUvTWFuYWdlZEJlYW5Ob0ludCIsIDAsICIiKTsKKyAgICAgICAgZG9UZXN0KG51bUl0ZXIsICJqYXZhOm1vZHVsZS9NYW5hZ2VkQmVhbjFJbnQiLCBudW1JdGVyLCAiQSIpOworICAgICAgICBkb1Rlc3QobnVtSXRlciwgImphdmE6bW9kdWxlL01hbmFnZWRCZWFuMkludCIsIG51bUl0ZXIqMiwgIkFCIik7CisgICAgICAgIGRvVGVzdChudW1JdGVyLCAiamF2YTptb2R1bGUvTWFuYWdlZEJlYW4ySW50UGx1c0JlYW4iLCBudW1JdGVyKjIsICJBQk0iKTsKKyAgICAgICAgZG9UZXN0KG51bUl0ZXIsICJqYXZhOm1vZHVsZS9NYW5hZ2VkQmVhbk5vSW50UGx1c0JlYW4iLCAwLCAiTSIpOwogCi0JICAgIGRvVGVzdChudW1JdGVyLCAiamF2YTptb2R1bGUvTWFuYWdlZEJlYW4ySW50RXhjbHVkZUNsYXNzIiwgbnVtSXRlcioyLCAiIik7CisgICAgICAgIGRvVGVzdChudW1JdGVyLCAiamF2YTptb2R1bGUvTWFuYWdlZEJlYW4ySW50RXhjbHVkZUNsYXNzIiwgbnVtSXRlcioyLCAiIik7CiAKLQkgICAgZG9UZXN0KG51bUl0ZXIsICJqYXZhOm1vZHVsZS9NYW5hZ2VkQmVhbjFDbGFzczFNZXRob2RMZXZlbEludCIsIG51bUl0ZXIqMSwgIkJBIik7CisgICAgICAgIGRvVGVzdChudW1JdGVyLCAiamF2YTptb2R1bGUvTWFuYWdlZEJlYW4xQ2xhc3MxTWV0aG9kTGV2ZWxJbnQiLCBudW1JdGVyKjEsICJCQSIpOwogCi0JICAgIGRvVGVzdChudW1JdGVyLCAiamF2YTptb2R1bGUvTWFuYWdlZEJlYW4xTWV0aG9kTGV2ZWxJbnRFeGNsdWRlQ2xhc3MiLAotCQkgICBudW1JdGVyKjEsICJBIik7CisgICAgICAgIGRvVGVzdChudW1JdGVyLCAiamF2YTptb2R1bGUvTWFuYWdlZEJlYW4xTWV0aG9kTGV2ZWxJbnRFeGNsdWRlQ2xhc3MiLAorICAgICAgICAgICBudW1JdGVyKjEsICJBIik7CiAKLQkgICAgZG9UZXN0KG51bUl0ZXIsICJqYXZhOm1vZHVsZS9NYW5hZ2VkQmVhbjJNZXRob2RMZXZlbEludCIsIDAsICJBQiIpOwotCSAgICAKLQotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7Ci0JfQotCSAgICAKKyAgICAgICAgZG9UZXN0KG51bUl0ZXIsICJqYXZhOm1vZHVsZS9NYW5hZ2VkQmVhbjJNZXRob2RMZXZlbEludCIsIDAsICJBQiIpOwogCiAKLQlvdXQucHJpbnRsbigiPEhUTUw+IDxIRUFEPiA8VElUTEU+IEpNUyBTZXJ2bGV0IE91dHB1dCA8L1RJVExFPiA8L0hFQUQ+IDxCT0RZIEJHQ09MT1I9d2hpdGU+Iik7CisgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKKyAgICB9CisKKworCisgICAgb3V0LnByaW50bG4oIjxIVE1MPiA8SEVBRD4gPFRJVExFPiBKTVMgU2VydmxldCBPdXRwdXQgPC9USVRMRT4gPC9IRUFEPiA8Qk9EWSBCR0NPTE9SPXdoaXRlPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxDRU5URVI+IDxGT05UIHNpemU9KzEgQ09MT1I9Ymx1ZT5EYXRhYmFzZVNlcnZlbHQgOjogQWxsIGluZm9ybWF0aW9uIEkgY2FuIGdpdmUgPC9GT05UPiA8L0NFTlRFUj4gPHA+ICIgKTsKLSAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gQ29udGV4dCBQYXRoIDogIDwvRk9OVD4gIiArIHJlcS5nZXRDb250ZXh0UGF0aCgpICsgIjxicj4iICk7IAotICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBTZXJ2bGV0IFBhdGggOiAgPC9GT05UPiAiICsgcmVxLmdldFNlcnZsZXRQYXRoKCkgKyAiPGJyPiIgKTsgCi0gICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IFBhdGggSW5mbyA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0UGF0aEluZm8oKSArICI8YnI+IiApOyAKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gQ29udGV4dCBQYXRoIDogIDwvRk9OVD4gIiArIHJlcS5nZXRDb250ZXh0UGF0aCgpICsgIjxicj4iICk7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IFNlcnZsZXQgUGF0aCA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0U2VydmxldFBhdGgoKSArICI8YnI+IiApOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBQYXRoIEluZm8gOiAgPC9GT05UPiAiICsgcmVxLmdldFBhdGhJbmZvKCkgKyAiPGJyPiIgKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L0JPRFk+IDwvSFRNTD4gIik7CiAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgZG9UZXN0KGludCBudW1JdGVyLCBTdHJpbmcgbG9va3VwLCBpbnQgbnVtSW50ZXJjZXB0b3JzLAotCQkJU3RyaW5nIGFyb3VuZEludm9rZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgICAgICBTdHJpbmcgYXJvdW5kSW52b2tlKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAotCVN5c3RlbS5vdXQucHJpbnRsbigiVGVzdCAiICsgbG9va3VwICsgIiBFeHBlY3QgbnVtSW5zdGFuY2VzID0gIiArIG51bUl0ZXIgKyAKLQkJCSAgICIgLCBudW1JbnRlcmNlcHRvcnMgPSAiICsgbnVtSW50ZXJjZXB0b3JzICsgCi0JCQkgICAiICwgYXJvdW5kSW52b2tlID0gIiArIGFyb3VuZEludm9rZSk7Ci0JZm9yKGludCBpID0gMDsgaSA8IG51bUl0ZXI7IGkrKykgewotCSAgICBNYW5hZ2VkQmVhblN1cGVyIG1iID0gKE1hbmFnZWRCZWFuU3VwZXIpIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cChsb29rdXApOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdCAiICsgbG9va3VwICsgIiBFeHBlY3QgbnVtSW5zdGFuY2VzID0gIiArIG51bUl0ZXIgKworICAgICAgICAgICAgICAgIiAsIG51bUludGVyY2VwdG9ycyA9ICIgKyBudW1JbnRlcmNlcHRvcnMgKworICAgICAgICAgICAgICAgIiAsIGFyb3VuZEludm9rZSA9ICIgKyBhcm91bmRJbnZva2UpOworICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW1JdGVyOyBpKyspIHsKKyAgICAgICAgTWFuYWdlZEJlYW5TdXBlciBtYiA9IChNYW5hZ2VkQmVhblN1cGVyKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAobG9va3VwKTsKIAotCSAgICB0cnkgewotCQltYi50aHJvd0FwcEV4Y2VwdGlvbigpOwotCQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiRXhwZWN0ZWQgQXBwRXhjZXB0aW9uICwgZ290IG5vdGhpbmciKTsKLQkgICAgfSBjYXRjaChBcHBFeGNlcHRpb24gYWUpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgY2F1Z2h0IEFwcEV4Y2VwdGlvbiIpOwotCSAgICB9IGNhdGNoKFRocm93YWJsZSB0KSB7Ci0JCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJFeHBlY3RlZCBBcHBFeGNlcHRpb24gLCBnb3QgIiArIHQsIHQpOwotCSAgICB9CisgICAgICAgIHRyeSB7CisgICAgICAgIG1iLnRocm93QXBwRXhjZXB0aW9uKCk7CisgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJFeHBlY3RlZCBBcHBFeGNlcHRpb24gLCBnb3Qgbm90aGluZyIpOworICAgICAgICB9IGNhdGNoKEFwcEV4Y2VwdGlvbiBhZSkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSBjYXVnaHQgQXBwRXhjZXB0aW9uIik7CisgICAgICAgIH0gY2F0Y2goVGhyb3dhYmxlIHQpIHsKKyAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkV4cGVjdGVkIEFwcEV4Y2VwdGlvbiAsIGdvdCAiICsgdCwgdCk7CisgICAgICAgIH0KIAotCSAgICB0cnkgewotCQltYi50aHJvd0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigpOwotCQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiRXhwZWN0ZWQgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uICwgZ290IG5vdGhpbmciKTsKLQkgICAgfSBjYXRjaChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWFlKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGNhdWdodCBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iKTsKLQkgICAgfSBjYXRjaChUaHJvd2FibGUgdCkgewotCQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiRXhwZWN0ZWQgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uICwgZ290ICIgKyB0LCB0KTsKLQkgICAgfQorICAgICAgICB0cnkgeworICAgICAgICBtYi50aHJvd0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigpOworICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiRXhwZWN0ZWQgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uICwgZ290IG5vdGhpbmciKTsKKyAgICAgICAgfSBjYXRjaChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWFlKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGNhdWdodCBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iKTsKKyAgICAgICAgfSBjYXRjaChUaHJvd2FibGUgdCkgeworICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiRXhwZWN0ZWQgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uICwgZ290ICIgKyB0LCB0KTsKKyAgICAgICAgfQogCi0JICAgIGlmKCBpID09ICAobnVtSXRlciAtIDEpICkgewotCQlpbnQgYWN0dWFsTnVtSW5zdCA9ICBtYi5nZXROdW1JbnN0YW5jZXMoKTsKLQkJaW50IGFjdHVhbE51bUludGVyID0gIG1iLmdldE51bUludGVyY2VwdG9ySW5zdGFuY2VzKCk7Ci0JCVN0cmluZyBhY3R1YWxBcm91bmQgPSBtYi5nZXRBcm91bmRJbnZva2VTZXF1ZW5jZSgpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oImFjdHVhbCBudW0gSW5zdGFuY2VzID0gIiArIGFjdHVhbE51bUluc3QpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oImFjdHVhbCBudW0gSW50ZXJjZXB0b3JzID0gIiArIGFjdHVhbE51bUludGVyKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJhY3R1YWwgYXJvdW5kIGludm9rZSBzZXF1ZW5jZSA9ICIgKyBhY3R1YWxBcm91bmQpOworICAgICAgICBpZiggaSA9PSAgKG51bUl0ZXIgLSAxKSApIHsKKyAgICAgICAgaW50IGFjdHVhbE51bUluc3QgPSAgbWIuZ2V0TnVtSW5zdGFuY2VzKCk7CisgICAgICAgIGludCBhY3R1YWxOdW1JbnRlciA9ICBtYi5nZXROdW1JbnRlcmNlcHRvckluc3RhbmNlcygpOworICAgICAgICBTdHJpbmcgYWN0dWFsQXJvdW5kID0gbWIuZ2V0QXJvdW5kSW52b2tlU2VxdWVuY2UoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJhY3R1YWwgbnVtIEluc3RhbmNlcyA9ICIgKyBhY3R1YWxOdW1JbnN0KTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJhY3R1YWwgbnVtIEludGVyY2VwdG9ycyA9ICIgKyBhY3R1YWxOdW1JbnRlcik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYWN0dWFsIGFyb3VuZCBpbnZva2Ugc2VxdWVuY2UgPSAiICsgYWN0dWFsQXJvdW5kKTsKIAotCQlpZiggKCBhY3R1YWxOdW1JbnN0ICE9IG51bUl0ZXIgKSB8fCAoYWN0dWFsTnVtSW50ZXIgIT0gbnVtSW50ZXJjZXB0b3JzKSB8fAotCQkgICAgIWFjdHVhbEFyb3VuZC5lcXVhbHMoYXJvdW5kSW52b2tlKSApIHsKLQkJICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJhY3R1YWwgcmVzdWx0cyBmYWlsdXJlIGZvciAiICsgbG9va3VwKTsKLQkJfSAKLQkgICAgfQorICAgICAgICBpZiggKCBhY3R1YWxOdW1JbnN0ICE9IG51bUl0ZXIgKSB8fCAoYWN0dWFsTnVtSW50ZXIgIT0gbnVtSW50ZXJjZXB0b3JzKSB8fAorICAgICAgICAgICAgIWFjdHVhbEFyb3VuZC5lcXVhbHMoYXJvdW5kSW52b2tlKSApIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJhY3R1YWwgcmVzdWx0cyBmYWlsdXJlIGZvciAiICsgbG9va3VwKTsKKyAgICAgICAgfQorICAgICAgICB9CiAKLQl9CisgICAgfQogICAgIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9tYW5hZ2VkYmVhbi93YXIvSW50ZXJjZXB0b3JBLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9tYW5hZ2VkYmVhbi93YXIvSW50ZXJjZXB0b3JBLmphdmEKaW5kZXggMDEwZjVhYi4uYmJmYTVmYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvbWFuYWdlZGJlYW4vd2FyL0ludGVyY2VwdG9yQS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL21hbmFnZWRiZWFuL3dhci9JbnRlcmNlcHRvckEuamF2YQpAQCAtMzMsMjcgKzMzLDI3IEBACiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0KEludm9jYXRpb25Db250ZXh0IGMpIHRocm93cyBFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSW50ZXJjZXB0b3JBOjppbml0KCkgIik7Ci0JKChNYW5hZ2VkQmVhblN1cGVyKWMuZ2V0VGFyZ2V0KCkpLm5ld0ludGVyY2VwdG9ySW5zdGFuY2UoKTsKLQljLnByb2NlZWQoKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEludGVyY2VwdG9yQTo6aW5pdCgpICIpOworICAgICgoTWFuYWdlZEJlYW5TdXBlciljLmdldFRhcmdldCgpKS5uZXdJbnRlcmNlcHRvckluc3RhbmNlKCk7CisgICAgYy5wcm9jZWVkKCk7CiAgICAgfQogCiAKICAgICBAQXJvdW5kSW52b2tlCiAgICAgcHJpdmF0ZSBPYmplY3Qgcm91bmRJbnZva2UoSW52b2NhdGlvbkNvbnRleHQgYykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBJbnRlcmNlcHRvckE6OmFyb3VuZEludm9rZSgpICIpOwotCWlmKCBjLmdldE1ldGhvZCgpLmdldE5hbWUoKS5lcXVhbHMoImdldEFyb3VuZEludm9rZVNlcXVlbmNlIikgKSB7Ci0JICAgIFN0cmluZyByZXN1bHQgPSAoU3RyaW5nKSBjLnByb2NlZWQoKTsKLQkgICAgcmV0dXJuICJBIiArIHJlc3VsdDsKLQl9IGVsc2UgewotCSAgICByZXR1cm4gYy5wcm9jZWVkKCk7Ci0JfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSW50ZXJjZXB0b3JBOjphcm91bmRJbnZva2UoKSAiKTsKKyAgICBpZiggYy5nZXRNZXRob2QoKS5nZXROYW1lKCkuZXF1YWxzKCJnZXRBcm91bmRJbnZva2VTZXF1ZW5jZSIpICkgeworICAgICAgICBTdHJpbmcgcmVzdWx0ID0gKFN0cmluZykgYy5wcm9jZWVkKCk7CisgICAgICAgIHJldHVybiAiQSIgKyByZXN1bHQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIGMucHJvY2VlZCgpOworICAgIH0KICAgICB9CiAKICAgICBAUHJlRGVzdHJveQogICAgIHByaXZhdGUgdm9pZCBkZXN0cm95KEludm9jYXRpb25Db250ZXh0IGMpIHRocm93cyBFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSW50ZXJjZXB0b3JBOjpkZXN0cm95KCkgIik7Ci0JYy5wcm9jZWVkKCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBJbnRlcmNlcHRvckE6OmRlc3Ryb3koKSAiKTsKKyAgICBjLnByb2NlZWQoKTsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL21hbmFnZWRiZWFuL3dhci9JbnRlcmNlcHRvckIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL21hbmFnZWRiZWFuL3dhci9JbnRlcmNlcHRvckIuamF2YQppbmRleCBjY2ViNzlmLi5mNmRiZmE0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9tYW5hZ2VkYmVhbi93YXIvSW50ZXJjZXB0b3JCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvbWFuYWdlZGJlYW4vd2FyL0ludGVyY2VwdG9yQi5qYXZhCkBAIC0zMywyNyArMzMsMjcgQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoSW52b2NhdGlvbkNvbnRleHQgYykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBJbnRlcmNlcHRvckI6OmluaXQoKSAiKTsKLQkoKE1hbmFnZWRCZWFuU3VwZXIpYy5nZXRUYXJnZXQoKSkubmV3SW50ZXJjZXB0b3JJbnN0YW5jZSgpOwotCWMucHJvY2VlZCgpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSW50ZXJjZXB0b3JCOjppbml0KCkgIik7CisgICAgKChNYW5hZ2VkQmVhblN1cGVyKWMuZ2V0VGFyZ2V0KCkpLm5ld0ludGVyY2VwdG9ySW5zdGFuY2UoKTsKKyAgICBjLnByb2NlZWQoKTsKICAgICB9CiAKIAogICAgIEBBcm91bmRJbnZva2UKICAgICBwcml2YXRlIE9iamVjdCByb3VuZEludm9rZShJbnZvY2F0aW9uQ29udGV4dCBjKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEludGVyY2VwdG9yQjo6YXJvdW5kSW52b2tlKCkgIik7Ci0JaWYoIGMuZ2V0TWV0aG9kKCkuZ2V0TmFtZSgpLmVxdWFscygiZ2V0QXJvdW5kSW52b2tlU2VxdWVuY2UiKSApIHsKLQkgICAgU3RyaW5nIHJlc3VsdCA9IChTdHJpbmcpIGMucHJvY2VlZCgpOwotCSAgICByZXR1cm4gIkIiICsgcmVzdWx0OwotCX0gZWxzZSB7Ci0JICAgIHJldHVybiBjLnByb2NlZWQoKTsKLQl9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBJbnRlcmNlcHRvckI6OmFyb3VuZEludm9rZSgpICIpOworICAgIGlmKCBjLmdldE1ldGhvZCgpLmdldE5hbWUoKS5lcXVhbHMoImdldEFyb3VuZEludm9rZVNlcXVlbmNlIikgKSB7CisgICAgICAgIFN0cmluZyByZXN1bHQgPSAoU3RyaW5nKSBjLnByb2NlZWQoKTsKKyAgICAgICAgcmV0dXJuICJCIiArIHJlc3VsdDsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gYy5wcm9jZWVkKCk7CisgICAgfQogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CiAgICAgcHJpdmF0ZSB2b2lkIGRlc3Ryb3koSW52b2NhdGlvbkNvbnRleHQgYykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBJbnRlcmNlcHRvckI6OmRlc3Ryb3koKSAiKTsKLQljLnByb2NlZWQoKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEludGVyY2VwdG9yQjo6ZGVzdHJveSgpICIpOworICAgIGMucHJvY2VlZCgpOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvbWFuYWdlZGJlYW4vd2FyL0ludGVyY2VwdG9yU3VwZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL21hbmFnZWRiZWFuL3dhci9JbnRlcmNlcHRvclN1cGVyLmphdmEKaW5kZXggNzI4MGNmNi4uMjRjYzQ5MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvbWFuYWdlZGJlYW4vd2FyL0ludGVyY2VwdG9yU3VwZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9tYW5hZ2VkYmVhbi93YXIvSW50ZXJjZXB0b3JTdXBlci5qYXZhCkBAIC0yNiwyMCArMjYsMjAgQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoSW52b2NhdGlvbkNvbnRleHQgYykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBJbnRlcmNlcHRvclN1cGVyOjppbml0KCkgIik7Ci0JYy5wcm9jZWVkKCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBJbnRlcmNlcHRvclN1cGVyOjppbml0KCkgIik7CisgICAgYy5wcm9jZWVkKCk7CiAgICAgfQogCiAgICAgQEFyb3VuZEludm9rZQogICAgIHByaXZhdGUgT2JqZWN0IHJvdW5kSW52b2tlKEludm9jYXRpb25Db250ZXh0IGMpIHRocm93cyBFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSW50ZXJjZXB0b3JTdXBlcjo6YXJvdW5kSW52b2tlKCkgIik7Ci0JcmV0dXJuIGMucHJvY2VlZCgpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSW50ZXJjZXB0b3JTdXBlcjo6YXJvdW5kSW52b2tlKCkgIik7CisgICAgcmV0dXJuIGMucHJvY2VlZCgpOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CiAgICAgcHJpdmF0ZSB2b2lkIGRlc3Ryb3koSW52b2NhdGlvbkNvbnRleHQgYykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBJbnRlcmNlcHRvclN1cGVyOjpkZXN0cm95KCkgIik7Ci0JYy5wcm9jZWVkKCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBJbnRlcmNlcHRvclN1cGVyOjpkZXN0cm95KCkgIik7CisgICAgYy5wcm9jZWVkKCk7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9tYW5hZ2VkYmVhbi93YXIvTWFuYWdlZEJlYW4xQ2xhc3MxTWV0aG9kTGV2ZWxJbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL21hbmFnZWRiZWFuL3dhci9NYW5hZ2VkQmVhbjFDbGFzczFNZXRob2RMZXZlbEludC5qYXZhCmluZGV4IGVhYTgxMGYuLjZjNDkwNzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL21hbmFnZWRiZWFuL3dhci9NYW5hZ2VkQmVhbjFDbGFzczFNZXRob2RMZXZlbEludC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL21hbmFnZWRiZWFuL3dhci9NYW5hZ2VkQmVhbjFDbGFzczFNZXRob2RMZXZlbEludC5qYXZhCkBAIC0zMSwyNiArMzEsMjYgQEAKICAgICBwcml2YXRlIFN0cmluZyBhcm91bmRJbnZva2UgPSAiIjsKIAogICAgIHB1YmxpYyB2b2lkIG5ld0ludGVyY2VwdG9ySW5zdGFuY2UoKSB7Ci0JbnVtSW50ZXJjZXB0b3JJbnN0YW5jZXMrKzsKKyAgICBudW1JbnRlcmNlcHRvckluc3RhbmNlcysrOwogICAgIH0KIAogICAgIHB1YmxpYyBpbnQgZ2V0TnVtSW5zdGFuY2VzKCkgewotCXJldHVybiBudW1JbnN0YW5jZXM7CisgICAgcmV0dXJuIG51bUluc3RhbmNlczsKICAgICB9CiAKICAgICBwdWJsaWMgaW50IGdldE51bUludGVyY2VwdG9ySW5zdGFuY2VzKCkgewotCXJldHVybiBudW1JbnRlcmNlcHRvckluc3RhbmNlczsKKyAgICByZXR1cm4gbnVtSW50ZXJjZXB0b3JJbnN0YW5jZXM7CiAgICAgfQogCiAgICAgQEludGVyY2VwdG9ycyh7SW50ZXJjZXB0b3JBLmNsYXNzfSkKICAgICBwdWJsaWMgU3RyaW5nIGdldEFyb3VuZEludm9rZVNlcXVlbmNlKCkgewotCXJldHVybiAiIjsKKyAgICByZXR1cm4gIiI7CiAgICAgfQogCiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0KCkgewotCW51bUluc3RhbmNlcysrOworICAgIG51bUluc3RhbmNlcysrOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9tYW5hZ2VkYmVhbi93YXIvTWFuYWdlZEJlYW4xSW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9tYW5hZ2VkYmVhbi93YXIvTWFuYWdlZEJlYW4xSW50LmphdmEKaW5kZXggMzZlZDI1MC4uOGYwMzY0MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvbWFuYWdlZGJlYW4vd2FyL01hbmFnZWRCZWFuMUludC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL21hbmFnZWRiZWFuL3dhci9NYW5hZ2VkQmVhbjFJbnQuamF2YQpAQCAtMjksMjAgKzI5LDIwIEBACiAgICAgc3RhdGljIHByaXZhdGUgaW50IG51bUludGVyY2VwdG9ySW5zdGFuY2VzID0gMDsKIAogICAgIHB1YmxpYyB2b2lkIG5ld0ludGVyY2VwdG9ySW5zdGFuY2UoKSB7Ci0JbnVtSW50ZXJjZXB0b3JJbnN0YW5jZXMrKzsKKyAgICBudW1JbnRlcmNlcHRvckluc3RhbmNlcysrOwogICAgIH0KIAogICAgIHB1YmxpYyBpbnQgZ2V0TnVtSW5zdGFuY2VzKCkgewotCXJldHVybiBudW1JbnN0YW5jZXM7CisgICAgcmV0dXJuIG51bUluc3RhbmNlczsKICAgICB9CiAKICAgICBwdWJsaWMgaW50IGdldE51bUludGVyY2VwdG9ySW5zdGFuY2VzKCkgewotCXJldHVybiBudW1JbnRlcmNlcHRvckluc3RhbmNlczsKKyAgICByZXR1cm4gbnVtSW50ZXJjZXB0b3JJbnN0YW5jZXM7CiAgICAgfQotICAgCisKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0KCkgewotCW51bUluc3RhbmNlcysrOworICAgIG51bUluc3RhbmNlcysrOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9tYW5hZ2VkYmVhbi93YXIvTWFuYWdlZEJlYW4xTWV0aG9kTGV2ZWxJbnRFeGNsdWRlQ2xhc3MuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL21hbmFnZWRiZWFuL3dhci9NYW5hZ2VkQmVhbjFNZXRob2RMZXZlbEludEV4Y2x1ZGVDbGFzcy5qYXZhCmluZGV4IGVlY2FkYzAuLjkzYjgyOGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL21hbmFnZWRiZWFuL3dhci9NYW5hZ2VkQmVhbjFNZXRob2RMZXZlbEludEV4Y2x1ZGVDbGFzcy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL21hbmFnZWRiZWFuL3dhci9NYW5hZ2VkQmVhbjFNZXRob2RMZXZlbEludEV4Y2x1ZGVDbGFzcy5qYXZhCkBAIC0zMiwyNyArMzIsMjcgQEAKICAgICBwcml2YXRlIFN0cmluZyBhcm91bmRJbnZva2UgPSAiIjsKIAogICAgIHB1YmxpYyB2b2lkIG5ld0ludGVyY2VwdG9ySW5zdGFuY2UoKSB7Ci0JbnVtSW50ZXJjZXB0b3JJbnN0YW5jZXMrKzsKKyAgICBudW1JbnRlcmNlcHRvckluc3RhbmNlcysrOwogICAgIH0KIAogICAgIHB1YmxpYyBpbnQgZ2V0TnVtSW5zdGFuY2VzKCkgewotCXJldHVybiBudW1JbnN0YW5jZXM7CisgICAgcmV0dXJuIG51bUluc3RhbmNlczsKICAgICB9CiAKICAgICBwdWJsaWMgaW50IGdldE51bUludGVyY2VwdG9ySW5zdGFuY2VzKCkgewotCXJldHVybiBudW1JbnRlcmNlcHRvckluc3RhbmNlczsKKyAgICByZXR1cm4gbnVtSW50ZXJjZXB0b3JJbnN0YW5jZXM7CiAgICAgfQogCiAgICAgQEludGVyY2VwdG9ycyh7SW50ZXJjZXB0b3JBLmNsYXNzfSkKICAgICBARXhjbHVkZUNsYXNzSW50ZXJjZXB0b3JzCiAgICAgcHVibGljIFN0cmluZyBnZXRBcm91bmRJbnZva2VTZXF1ZW5jZSgpIHsKLQlyZXR1cm4gIiI7CisgICAgcmV0dXJuICIiOwogICAgIH0KIAogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdCgpIHsKLQludW1JbnN0YW5jZXMrKzsKKyAgICBudW1JbnN0YW5jZXMrKzsKICAgICB9CiAKICAgICBAUHJlRGVzdHJveQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvbWFuYWdlZGJlYW4vd2FyL01hbmFnZWRCZWFuMkludC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvbWFuYWdlZGJlYW4vd2FyL01hbmFnZWRCZWFuMkludC5qYXZhCmluZGV4IDU4YTBiNmIuLmQ2NzYyZWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL21hbmFnZWRiZWFuL3dhci9NYW5hZ2VkQmVhbjJJbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9tYW5hZ2VkYmVhbi93YXIvTWFuYWdlZEJlYW4ySW50LmphdmEKQEAgLTMxLDIyICszMSwyMiBAQAogICAgIHByaXZhdGUgU3RyaW5nIGFyb3VuZEludm9rZSA9ICIiOwogCiAgICAgcHVibGljIHZvaWQgbmV3SW50ZXJjZXB0b3JJbnN0YW5jZSgpIHsKLQludW1JbnRlcmNlcHRvckluc3RhbmNlcysrOworICAgIG51bUludGVyY2VwdG9ySW5zdGFuY2VzKys7CiAgICAgfQogCiAgICAgcHVibGljIGludCBnZXROdW1JbnN0YW5jZXMoKSB7Ci0JcmV0dXJuIG51bUluc3RhbmNlczsKKyAgICByZXR1cm4gbnVtSW5zdGFuY2VzOwogICAgIH0KIAogICAgIHB1YmxpYyBpbnQgZ2V0TnVtSW50ZXJjZXB0b3JJbnN0YW5jZXMoKSB7Ci0JcmV0dXJuIG51bUludGVyY2VwdG9ySW5zdGFuY2VzOworICAgIHJldHVybiBudW1JbnRlcmNlcHRvckluc3RhbmNlczsKICAgICB9CiAKLSAgIAorCiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0KCkgewotCW51bUluc3RhbmNlcysrOworICAgIG51bUluc3RhbmNlcysrOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9tYW5hZ2VkYmVhbi93YXIvTWFuYWdlZEJlYW4ySW50RXhjbHVkZUNsYXNzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9tYW5hZ2VkYmVhbi93YXIvTWFuYWdlZEJlYW4ySW50RXhjbHVkZUNsYXNzLmphdmEKaW5kZXggNGY4NjQ2Yy4uNDYxZDM2NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvbWFuYWdlZGJlYW4vd2FyL01hbmFnZWRCZWFuMkludEV4Y2x1ZGVDbGFzcy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL21hbmFnZWRiZWFuL3dhci9NYW5hZ2VkQmVhbjJJbnRFeGNsdWRlQ2xhc3MuamF2YQpAQCAtMjAsNyArMjAsNyBAQAogaW1wb3J0IGpha2FydGEuaW50ZXJjZXB0b3IuSW50ZXJjZXB0b3JzOwogaW1wb3J0IGpha2FydGEuaW50ZXJjZXB0b3IuQXJvdW5kSW52b2tlOwogaW1wb3J0IGpha2FydGEuaW50ZXJjZXB0b3IuSW52b2NhdGlvbkNvbnRleHQ7Ci1pbXBvcnQgamFrYXJ0YS5pbnRlcmNlcHRvci5FeGNsdWRlQ2xhc3NJbnRlcmNlcHRvcnM7IAoraW1wb3J0IGpha2FydGEuaW50ZXJjZXB0b3IuRXhjbHVkZUNsYXNzSW50ZXJjZXB0b3JzOwogCiBATWFuYWdlZEJlYW4oIk1hbmFnZWRCZWFuMkludEV4Y2x1ZGVDbGFzcyIpCiAgICAgQEludGVyY2VwdG9ycyh7SW50ZXJjZXB0b3JBLmNsYXNzLCBJbnRlcmNlcHRvckIuY2xhc3N9KQpAQCAtMzIsMjUgKzMyLDI1IEBACiAgICAgcHJpdmF0ZSBTdHJpbmcgYXJvdW5kSW52b2tlID0gIiI7CiAKICAgICBwdWJsaWMgdm9pZCBuZXdJbnRlcmNlcHRvckluc3RhbmNlKCkgewotCW51bUludGVyY2VwdG9ySW5zdGFuY2VzKys7CisgICAgbnVtSW50ZXJjZXB0b3JJbnN0YW5jZXMrKzsKICAgICB9CiAKICAgICBwdWJsaWMgaW50IGdldE51bUluc3RhbmNlcygpIHsKLQlyZXR1cm4gbnVtSW5zdGFuY2VzOworICAgIHJldHVybiBudW1JbnN0YW5jZXM7CiAgICAgfQogCiAgICAgcHVibGljIGludCBnZXROdW1JbnRlcmNlcHRvckluc3RhbmNlcygpIHsKLQlyZXR1cm4gbnVtSW50ZXJjZXB0b3JJbnN0YW5jZXM7CisgICAgcmV0dXJuIG51bUludGVyY2VwdG9ySW5zdGFuY2VzOwogICAgIH0KIAogICAgIEBFeGNsdWRlQ2xhc3NJbnRlcmNlcHRvcnMKICAgICBwdWJsaWMgU3RyaW5nIGdldEFyb3VuZEludm9rZVNlcXVlbmNlKCkgewotCXJldHVybiAiIjsKKyAgICByZXR1cm4gIiI7CiAgICAgfQogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdCgpIHsKLQludW1JbnN0YW5jZXMrKzsKKyAgICBudW1JbnN0YW5jZXMrKzsKICAgICB9CiAKICAgICBAUHJlRGVzdHJveQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvbWFuYWdlZGJlYW4vd2FyL01hbmFnZWRCZWFuMkludFBsdXNCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9tYW5hZ2VkYmVhbi93YXIvTWFuYWdlZEJlYW4ySW50UGx1c0JlYW4uamF2YQppbmRleCAwZmVlM2RlLi5kYWExMzViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9tYW5hZ2VkYmVhbi93YXIvTWFuYWdlZEJlYW4ySW50UGx1c0JlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9tYW5hZ2VkYmVhbi93YXIvTWFuYWdlZEJlYW4ySW50UGx1c0JlYW4uamF2YQpAQCAtMzEsMzEgKzMxLDMxIEBACiAgICAgcHJpdmF0ZSBTdHJpbmcgYXJvdW5kSW52b2tlID0gIiI7CiAKICAgICBwdWJsaWMgdm9pZCBuZXdJbnRlcmNlcHRvckluc3RhbmNlKCkgewotCW51bUludGVyY2VwdG9ySW5zdGFuY2VzKys7CisgICAgbnVtSW50ZXJjZXB0b3JJbnN0YW5jZXMrKzsKICAgICB9CiAKICAgICBwdWJsaWMgaW50IGdldE51bUluc3RhbmNlcygpIHsKLQlyZXR1cm4gbnVtSW5zdGFuY2VzOworICAgIHJldHVybiBudW1JbnN0YW5jZXM7CiAgICAgfQogCiAgICAgcHVibGljIGludCBnZXROdW1JbnRlcmNlcHRvckluc3RhbmNlcygpIHsKLQlyZXR1cm4gbnVtSW50ZXJjZXB0b3JJbnN0YW5jZXM7CisgICAgcmV0dXJuIG51bUludGVyY2VwdG9ySW5zdGFuY2VzOwogICAgIH0KIAogICAgICBAQXJvdW5kSW52b2tlCiAgICAgcHJpdmF0ZSBPYmplY3Qgcm91bmRJbnZva2UoSW52b2NhdGlvbkNvbnRleHQgYykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBNYW5hZ2VkQmVhbjJJbnRQbHVzQmVhbjo6cm91bmRJbnZva2UoKSAiKTsKLQlpZiggYy5nZXRNZXRob2QoKS5nZXROYW1lKCkuZXF1YWxzKCJnZXRBcm91bmRJbnZva2VTZXF1ZW5jZSIpICkgewotCSAgICBTdHJpbmcgcmVzdWx0ID0gKFN0cmluZykgYy5wcm9jZWVkKCk7Ci0JICAgIHJldHVybiAiTSIgKyByZXN1bHQ7Ci0JfSBlbHNlIHsKLQkgICAgcmV0dXJuIGMucHJvY2VlZCgpOwotCX0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIE1hbmFnZWRCZWFuMkludFBsdXNCZWFuOjpyb3VuZEludm9rZSgpICIpOworICAgIGlmKCBjLmdldE1ldGhvZCgpLmdldE5hbWUoKS5lcXVhbHMoImdldEFyb3VuZEludm9rZVNlcXVlbmNlIikgKSB7CisgICAgICAgIFN0cmluZyByZXN1bHQgPSAoU3RyaW5nKSBjLnByb2NlZWQoKTsKKyAgICAgICAgcmV0dXJuICJNIiArIHJlc3VsdDsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gYy5wcm9jZWVkKCk7CisgICAgfQogICAgIH0KIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0JbnVtSW5zdGFuY2VzKys7CisgICAgbnVtSW5zdGFuY2VzKys7CiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL21hbmFnZWRiZWFuL3dhci9NYW5hZ2VkQmVhbjJNZXRob2RMZXZlbEludC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvbWFuYWdlZGJlYW4vd2FyL01hbmFnZWRCZWFuMk1ldGhvZExldmVsSW50LmphdmEKaW5kZXggYWNiMzIzYS4uMDVkZDU1YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvbWFuYWdlZGJlYW4vd2FyL01hbmFnZWRCZWFuMk1ldGhvZExldmVsSW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvbWFuYWdlZGJlYW4vd2FyL01hbmFnZWRCZWFuMk1ldGhvZExldmVsSW50LmphdmEKQEAgLTMwLDI2ICszMCwyNiBAQAogICAgIHByaXZhdGUgU3RyaW5nIGFyb3VuZEludm9rZSA9ICIiOwogCiAgICAgcHVibGljIHZvaWQgbmV3SW50ZXJjZXB0b3JJbnN0YW5jZSgpIHsKLQludW1JbnRlcmNlcHRvckluc3RhbmNlcysrOworICAgIG51bUludGVyY2VwdG9ySW5zdGFuY2VzKys7CiAgICAgfQogCiAgICAgcHVibGljIGludCBnZXROdW1JbnN0YW5jZXMoKSB7Ci0JcmV0dXJuIG51bUluc3RhbmNlczsKKyAgICByZXR1cm4gbnVtSW5zdGFuY2VzOwogICAgIH0KIAogICAgIHB1YmxpYyBpbnQgZ2V0TnVtSW50ZXJjZXB0b3JJbnN0YW5jZXMoKSB7Ci0JcmV0dXJuIG51bUludGVyY2VwdG9ySW5zdGFuY2VzOworICAgIHJldHVybiBudW1JbnRlcmNlcHRvckluc3RhbmNlczsKICAgICB9CiAKICAgICBASW50ZXJjZXB0b3JzKHtJbnRlcmNlcHRvckEuY2xhc3MsIEludGVyY2VwdG9yQi5jbGFzc30pCiAgICAgcHVibGljIFN0cmluZyBnZXRBcm91bmRJbnZva2VTZXF1ZW5jZSgpIHsKLQlyZXR1cm4gIiI7CisgICAgcmV0dXJuICIiOwogICAgIH0KIAogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdCgpIHsKLQludW1JbnN0YW5jZXMrKzsKKyAgICBudW1JbnN0YW5jZXMrKzsKICAgICB9CiAKICAgICBAUHJlRGVzdHJveQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvbWFuYWdlZGJlYW4vd2FyL01hbmFnZWRCZWFuTm9JbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL21hbmFnZWRiZWFuL3dhci9NYW5hZ2VkQmVhbk5vSW50LmphdmEKaW5kZXggNTMxM2E4ZC4uMzMzYjdiYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvbWFuYWdlZGJlYW4vd2FyL01hbmFnZWRCZWFuTm9JbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9tYW5hZ2VkYmVhbi93YXIvTWFuYWdlZEJlYW5Ob0ludC5qYXZhCkBAIC0yNSwxMiArMjUsMTIgQEAKICAgICBzdGF0aWMgcHJpdmF0ZSBpbnQgbnVtSW5zdGFuY2VzID0gMDsKIAogICAgIHB1YmxpYyBpbnQgZ2V0TnVtSW5zdGFuY2VzKCkgewotCXJldHVybiBudW1JbnN0YW5jZXM7CisgICAgcmV0dXJuIG51bUluc3RhbmNlczsKICAgICB9CiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0KCkgewotCW51bUluc3RhbmNlcysrOworICAgIG51bUluc3RhbmNlcysrOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9tYW5hZ2VkYmVhbi93YXIvTWFuYWdlZEJlYW5Ob0ludFBsdXNCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9tYW5hZ2VkYmVhbi93YXIvTWFuYWdlZEJlYW5Ob0ludFBsdXNCZWFuLmphdmEKaW5kZXggZDAwZDg3YS4uYzIzZjFmYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvbWFuYWdlZGJlYW4vd2FyL01hbmFnZWRCZWFuTm9JbnRQbHVzQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL21hbmFnZWRiZWFuL3dhci9NYW5hZ2VkQmVhbk5vSW50UGx1c0JlYW4uamF2YQpAQCAtMzAsMzEgKzMwLDMxIEBACiAgICAgcHJpdmF0ZSBTdHJpbmcgYXJvdW5kSW52b2tlID0gIiI7CiAKICAgICBwdWJsaWMgdm9pZCBuZXdJbnRlcmNlcHRvckluc3RhbmNlKCkgewotCW51bUludGVyY2VwdG9ySW5zdGFuY2VzKys7CisgICAgbnVtSW50ZXJjZXB0b3JJbnN0YW5jZXMrKzsKICAgICB9CiAKICAgICBwdWJsaWMgaW50IGdldE51bUluc3RhbmNlcygpIHsKLQlyZXR1cm4gbnVtSW5zdGFuY2VzOworICAgIHJldHVybiBudW1JbnN0YW5jZXM7CiAgICAgfQogCiAgICAgcHVibGljIGludCBnZXROdW1JbnRlcmNlcHRvckluc3RhbmNlcygpIHsKLQlyZXR1cm4gbnVtSW50ZXJjZXB0b3JJbnN0YW5jZXM7CisgICAgcmV0dXJuIG51bUludGVyY2VwdG9ySW5zdGFuY2VzOwogICAgIH0KIAogICAgICBAQXJvdW5kSW52b2tlCiAgICAgcHJpdmF0ZSBPYmplY3Qgcm91bmRJbnZva2UoSW52b2NhdGlvbkNvbnRleHQgYykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBNYW5hZ2VkQmVhbk5vSW50UGx1c0JlYW46OnJvdW5kSW52b2tlKCkgIik7Ci0JaWYoIGMuZ2V0TWV0aG9kKCkuZ2V0TmFtZSgpLmVxdWFscygiZ2V0QXJvdW5kSW52b2tlU2VxdWVuY2UiKSApIHsKLQkgICAgU3RyaW5nIHJlc3VsdCA9IChTdHJpbmcpIGMucHJvY2VlZCgpOwotCSAgICByZXR1cm4gIk0iICsgcmVzdWx0OwotCX0gZWxzZSB7Ci0JICAgIHJldHVybiBjLnByb2NlZWQoKTsKLQl9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBNYW5hZ2VkQmVhbk5vSW50UGx1c0JlYW46OnJvdW5kSW52b2tlKCkgIik7CisgICAgaWYoIGMuZ2V0TWV0aG9kKCkuZ2V0TmFtZSgpLmVxdWFscygiZ2V0QXJvdW5kSW52b2tlU2VxdWVuY2UiKSApIHsKKyAgICAgICAgU3RyaW5nIHJlc3VsdCA9IChTdHJpbmcpIGMucHJvY2VlZCgpOworICAgICAgICByZXR1cm4gIk0iICsgcmVzdWx0OworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBjLnByb2NlZWQoKTsKKyAgICB9CiAgICAgfQogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdCgpIHsKLQludW1JbnN0YW5jZXMrKzsKKyAgICBudW1JbnN0YW5jZXMrKzsKICAgICB9CiAKICAgICBAUHJlRGVzdHJveQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvbWFuYWdlZGJlYW4vd2FyL01hbmFnZWRCZWFuU3VwZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL21hbmFnZWRiZWFuL3dhci9NYW5hZ2VkQmVhblN1cGVyLmphdmEKaW5kZXggNzM1OWMyMC4uNDhiY2Y1ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvbWFuYWdlZGJlYW4vd2FyL01hbmFnZWRCZWFuU3VwZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9tYW5hZ2VkYmVhbi93YXIvTWFuYWdlZEJlYW5TdXBlci5qYXZhCkBAIC0yNywxMiArMjcsMTIgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldEFyb3VuZEludm9rZVNlcXVlbmNlKCkgeyByZXR1cm4gIiI7IH0KIAogICAgIHB1YmxpYyBTdHJpbmcgdGhyb3dBcHBFeGNlcHRpb24oKSB0aHJvd3MgQXBwRXhjZXB0aW9uIHsKLQl0aHJvdyBuZXcgQXBwRXhjZXB0aW9uKCk7CisgICAgdGhyb3cgbmV3IEFwcEV4Y2VwdGlvbigpOwogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgdGhyb3dJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKSB7Ci0JdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigpOworICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKICAgICB9CiAKLQkJCQkJICAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvc2luaXRjYWxsZWpiL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9zaW5pdGNhbGxlamIvYnVpbGQucHJvcGVydGllcwppbmRleCBlMWFiNWNjLi5iMzQ5YTZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9zaW5pdGNhbGxlamIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9zaW5pdGNhbGxlamIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTMgKzE1LDEzIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzEtZWpibGl0ZS1zaW5pdGNhbGxlamIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+IAotPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPlx1MDAyMAorPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzZS5jbGllbnQiIHZhbHVlPSJjb20uYWNtZS5DbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9IiR7bW9kdWxlfSIvPgotCQorCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL3Npbml0Y2FsbGVqYi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9zaW5pdGNhbGxlamIvYnVpbGQueG1sCmluZGV4IDIwOGNkZTIuLmY5ZmYwMzkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL3Npbml0Y2FsbGVqYi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvc2luaXRjYWxsZWpiL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9IndhciIvPgpAQCAtNDgsOSArNDgsOSBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjbGllbnQiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNTgsOSArNTgsOSBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuX3NlIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bl9zZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgIDxqYXZhICBmb3JrPSJvbiIgCisgICAgICAgPGphdmEgIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iJHtzZS5jbGllbnR9Ij4KQEAgLTcyLDcgKzcyLDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL3Npbml0Y2FsbGVqYi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9zaW5pdGNhbGxlamIvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGMyOThhNGIuLmMxOGNkZTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL3Npbml0Y2FsbGVqYi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvc2luaXRjYWxsZWpiL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjYsNyArMjYsNyBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgYXBwTmFtZTsKQEAgLTM0LDQ2ICszNCw0NiBAQAogICAgIHByaXZhdGUgU3RyaW5nIHBvcnQ7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7Ci0JYXBwTmFtZSA9IGFyZ3NbMF07Ci0Jc3RhdC5hZGREZXNjcmlwdGlvbihhcHBOYW1lKTsKLQlDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsgICAgICAgCi0gICAgICAgIGNsaWVudC5kb1Rlc3QoKTsJCisgICAgYXBwTmFtZSA9IGFyZ3NbMF07CisgICAgc3RhdC5hZGREZXNjcmlwdGlvbihhcHBOYW1lKTsKKyAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKKyAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShhcHBOYW1lICsgIklEIik7CiAgICAgfQogCiAgICAgcHVibGljIENsaWVudChTdHJpbmdbXSBhcmdzKSB7Ci0JaG9zdCA9IGFyZ3NbMV07CisgICAgaG9zdCA9IGFyZ3NbMV07CiAgICAgICAgIHBvcnQgPSBhcmdzWzJdOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKIAotCXRyeSB7CisgICAgdHJ5IHsKIAotCSAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyAKKyAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsKICAgICAgICAgICAgICAgICAiLyIgKyBhcHBOYW1lICsgIi9IZWxsb1NlcnZsZXQiOwogCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImludm9raW5nIHdlYmNsaWVudCBzZXJ2bGV0IGF0ICIgKyB1cmwpOwogCi0JICAgIFVSTCB1ID0gbmV3IFVSTCh1cmwpOwotICAgICAgICAKLQkgICAgSHR0cFVSTENvbm5lY3Rpb24gYzEgPSAoSHR0cFVSTENvbm5lY3Rpb24pdS5vcGVuQ29ubmVjdGlvbigpOwotCSAgICBpbnQgY29kZSA9IGMxLmdldFJlc3BvbnNlQ29kZSgpOwotCSAgICBJbnB1dFN0cmVhbSBpcyA9IGMxLmdldElucHV0U3RyZWFtKCk7Ci0JICAgIEJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyIChuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKLQkgICAgU3RyaW5nIGxpbmUgPSBudWxsOwotCSAgICB3aGlsZSgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpCi0JCVN5c3RlbS5vdXQucHJpbnRsbihsaW5lKTsKLQkgICAgaWYoY29kZSAhPSAyMDApIHsKLQkJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkluY29ycmVjdCByZXR1cm4gY29kZTogIiArIGNvZGUpOwotCSAgICB9Ci0JICAgIAotCSAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuUEFTUyk7CisgICAgICAgIFVSTCB1ID0gbmV3IFVSTCh1cmwpOwogCi0JfSBjYXRjaChFeGNlcHRpb24gZSkgewotCSAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuRkFJTCk7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQorICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjMSA9IChIdHRwVVJMQ29ubmVjdGlvbil1Lm9wZW5Db25uZWN0aW9uKCk7CisgICAgICAgIGludCBjb2RlID0gYzEuZ2V0UmVzcG9uc2VDb2RlKCk7CisgICAgICAgIElucHV0U3RyZWFtIGlzID0gYzEuZ2V0SW5wdXRTdHJlYW0oKTsKKyAgICAgICAgQnVmZmVyZWRSZWFkZXIgaW5wdXQgPSBuZXcgQnVmZmVyZWRSZWFkZXIgKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOworICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CisgICAgICAgIHdoaWxlKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGxpbmUpOworICAgICAgICBpZihjb2RlICE9IDIwMCkgeworICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiSW5jb3JyZWN0IHJldHVybiBjb2RlOiAiICsgY29kZSk7CisgICAgICAgIH0KKworICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuUEFTUyk7CisKKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5GQUlMKTsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CiAgICAgfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL3Npbml0Y2FsbGVqYi93YXIvQ29udGV4dExpc3RlbmVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9zaW5pdGNhbGxlamIvd2FyL0NvbnRleHRMaXN0ZW5lci5qYXZhCmluZGV4IDhiOGE0MzQuLjczZTBjMmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL3Npbml0Y2FsbGVqYi93YXIvQ29udGV4dExpc3RlbmVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvc2luaXRjYWxsZWpiL3dhci9Db250ZXh0TGlzdGVuZXIuamF2YQpAQCAtMzMsMjAgKzMzLDIwIEBACiAKICAgICBwdWJsaWMgdm9pZCBjb250ZXh0SW5pdGlhbGl6ZWQoU2VydmxldENvbnRleHRFdmVudCBzY2UpIHsKIAotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gQ29udGV4dExpc3RlbmVyOjpjb250ZXh0SW5pdGlhbGl6ZWQiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIENvbnRleHRMaXN0ZW5lcjo6Y29udGV4dEluaXRpYWxpemVkIik7CiAKLQlzaW1wbGVTdGF0ZWxlc3MuaGVsbG8oKTsKKyAgICBzaW1wbGVTdGF0ZWxlc3MuaGVsbG8oKTsKIAogICAgIH0KIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHVibGljIHZvaWQgcGMoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBDb250ZXh0TGlzdGVuZXI6OnBvc3RDb25zdHJ1Y3QiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIENvbnRleHRMaXN0ZW5lcjo6cG9zdENvbnN0cnVjdCIpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGNvbnRleHREZXN0cm95ZWQoU2VydmxldENvbnRleHRFdmVudCBzY2UpIHsKIAotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gQ29udGV4dExpc3RlbmVyOjpjb250ZXh0RGVzdHJveWVkIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBDb250ZXh0TGlzdGVuZXI6OmNvbnRleHREZXN0cm95ZWQiKTsKIAogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvc2luaXRjYWxsZWpiL3dhci9IZWxsb1NlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL3Npbml0Y2FsbGVqYi93YXIvSGVsbG9TZXJ2bGV0LmphdmEKaW5kZXggN2FlODc1Zi4uMGNhYjNhYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvc2luaXRjYWxsZWpiL3dhci9IZWxsb1NlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9zaW5pdGNhbGxlamIvd2FyL0hlbGxvU2VydmxldC5qYXZhCkBAIC00Niw1OSArNDYsNTkgQEAKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKIAotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TZXJ2bGV0Ojppbml0Iik7Ci0Jc2ltcGxlU2luZ2xldG9uLmhlbGxvKCk7Ci0Jc2ltcGxlU3RhdGVsZXNzLmhlbGxvKCk7Ci0Jc2ltcGxlU3RhdGVmdWwuaGVsbG8oKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU2VydmxldDo6aW5pdCIpOworICAgIHNpbXBsZVNpbmdsZXRvbi5oZWxsbygpOworICAgIHNpbXBsZVN0YXRlbGVzcy5oZWxsbygpOworICAgIHNpbXBsZVN0YXRlZnVsLmhlbGxvKCk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCiAgICAgcHJvdGVjdGVkIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAKLQlyZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKKyAgICByZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcC5nZXRXcml0ZXIoKTsKIAotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TZXJ2bGV0Ojpkb0dldCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TZXJ2bGV0Ojpkb0dldCIpOwogCi0Jc2ltcGxlU2luZ2xldG9uLmhlbGxvKCk7CisgICAgc2ltcGxlU2luZ2xldG9uLmhlbGxvKCk7CiAKLQl0cnkgewotCSAgICBzaW1wbGVTdGF0ZWxlc3MuaGVsbG9QYWNrYWdlKCk7Ci0JICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJFeHBlY3RlZCBleGNlcHRpb24gd2hlbiBjYWxsaW5nIHBhY2thZ2UtcHJpdmF0ZSBtZXRob2QiKTsKLQl9IGNhdGNoKEVKQkV4Y2VwdGlvbiBlKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGdvdCBleGNlcHRpb24gd2hlbiBjYWxsaW5nIHBhY2thZ2UgcHJpdmF0ZSBtZXRob2Qgb24gbm8taW50ZXJmYWNlIHZpZXciKTsKLQl9CisgICAgdHJ5IHsKKyAgICAgICAgc2ltcGxlU3RhdGVsZXNzLmhlbGxvUGFja2FnZSgpOworICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiRXhwZWN0ZWQgZXhjZXB0aW9uIHdoZW4gY2FsbGluZyBwYWNrYWdlLXByaXZhdGUgbWV0aG9kIik7CisgICAgfSBjYXRjaChFSkJFeGNlcHRpb24gZSkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSBnb3QgZXhjZXB0aW9uIHdoZW4gY2FsbGluZyBwYWNrYWdlIHByaXZhdGUgbWV0aG9kIG9uIG5vLWludGVyZmFjZSB2aWV3Iik7CisgICAgfQogCi0JdHJ5IHsKLQkgICAgc2ltcGxlU3RhdGVsZXNzLmhlbGxvUHJvdGVjdGVkKCk7Ci0JICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJFeHBlY3RlZCBleGNlcHRpb24gd2hlbiBjYWxsaW5nIHByb3RlY3RlZCBtZXRob2QiKTsKLQl9IGNhdGNoKEVKQkV4Y2VwdGlvbiBlKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGdvdCBleGNlcHRpb24gd2hlbiBjYWxsaW5nIHByb3RlY3RlZCBtZXRob2Qgb24gbm8taW50ZXJmYWNlIHZpZXciKTsKLQl9CisgICAgdHJ5IHsKKyAgICAgICAgc2ltcGxlU3RhdGVsZXNzLmhlbGxvUHJvdGVjdGVkKCk7CisgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJFeHBlY3RlZCBleGNlcHRpb24gd2hlbiBjYWxsaW5nIHByb3RlY3RlZCBtZXRob2QiKTsKKyAgICB9IGNhdGNoKEVKQkV4Y2VwdGlvbiBlKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGdvdCBleGNlcHRpb24gd2hlbiBjYWxsaW5nIHByb3RlY3RlZCBtZXRob2Qgb24gbm8taW50ZXJmYWNlIHZpZXciKTsKKyAgICB9CiAKLQl0cnkgewotCSAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCSAgICBmb3IgKE5hbWluZ0VudW1lcmF0aW9uPEJpbmRpbmc+IGUgPSBpYy5saXN0QmluZGluZ3MoImphdmE6Y29tcC9lbnYiKTsgZS5oYXNNb3JlKCk7ICkgeworICAgIHRyeSB7CisgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgIGZvciAoTmFtaW5nRW51bWVyYXRpb248QmluZGluZz4gZSA9IGljLmxpc3RCaW5kaW5ncygiamF2YTpjb21wL2VudiIpOyBlLmhhc01vcmUoKTsgKSB7CiAgICAgICAgICAgICAgICAgIEJpbmRpbmcgYiA9IGUubmV4dCgpOy8vIGphdmE6Y29tcC9lbnYveHh4CiAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgbmFtZSA9IGIuZ2V0TmFtZSgpLnN1YnN0cmluZygiamF2YTpjb21wL2Vudi8iLmxlbmd0aCgpKTsKICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGNsID0gYi5nZXRDbGFzc05hbWUoKTsKICAgICAgICAgICAgICAgICAgZmluYWwgT2JqZWN0IG8gPSBiLmdldE9iamVjdCgpOwotCQkgU3lzdGVtLm91dC5wcmludGxuKCJiaW5kaW5nID0gIiArIGIgKyAiICwgbmFtZSA9ICIgKyBuYW1lICsgIiAsIGNsID0gIiArIGNsICsgIiAsIG9iamVjdCA9ICIgKyBvKTsKLQkJIGlmKCAhYi5nZXROYW1lKCkuc3RhcnRzV2l0aCgiamF2YTpjb21wL2VudiIpICkgewotCQkgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJpbnZhbGlkIHJldHVybmVkIGVudiBlbnRyeSBwcmVmaXgiKTsKLQkJIH0KLQkgICAgfQotCSAgICAvLyBhc3N1bWVzIDI5OSBlbmFibGVkIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpjb21wL0JlYW5NYW5hZ2VyIik7Ci0JfSBjYXRjaChFeGNlcHRpb24gZSkgewotCSAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlKTsKLQl9CisgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImJpbmRpbmcgPSAiICsgYiArICIgLCBuYW1lID0gIiArIG5hbWUgKyAiICwgY2wgPSAiICsgY2wgKyAiICwgb2JqZWN0ID0gIiArIG8pOworICAgICAgICAgaWYoICFiLmdldE5hbWUoKS5zdGFydHNXaXRoKCJqYXZhOmNvbXAvZW52IikgKSB7CisgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oImludmFsaWQgcmV0dXJuZWQgZW52IGVudHJ5IHByZWZpeCIpOworICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIGFzc3VtZXMgMjk5IGVuYWJsZWQgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmNvbXAvQmVhbk1hbmFnZXIiKTsKKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUpOworICAgIH0KIAotCW91dC5wcmludGxuKCI8SFRNTD4gPEhFQUQ+IDxUSVRMRT4gSk1TIFNlcnZsZXQgT3V0cHV0IDwvVElUTEU+IDwvSEVBRD4gPEJPRFkgQkdDT0xPUj13aGl0ZT4iKTsKKyAgICBvdXQucHJpbnRsbigiPEhUTUw+IDxIRUFEPiA8VElUTEU+IEpNUyBTZXJ2bGV0IE91dHB1dCA8L1RJVExFPiA8L0hFQUQ+IDxCT0RZIEJHQ09MT1I9d2hpdGU+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPENFTlRFUj4gPEZPTlQgc2l6ZT0rMSBDT0xPUj1ibHVlPkRhdGFiYXNlU2VydmVsdCA6OiBBbGwgaW5mb3JtYXRpb24gSSBjYW4gZ2l2ZSA8L0ZPTlQ+IDwvQ0VOVEVSPiA8cD4gIiApOwotICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBDb250ZXh0IFBhdGggOiAgPC9GT05UPiAiICsgcmVxLmdldENvbnRleHRQYXRoKCkgKyAiPGJyPiIgKTsgCi0gICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IFNlcnZsZXQgUGF0aCA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0U2VydmxldFBhdGgoKSArICI8YnI+IiApOyAKLSAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gUGF0aCBJbmZvIDogIDwvRk9OVD4gIiArIHJlcS5nZXRQYXRoSW5mbygpICsgIjxicj4iICk7IAorICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBDb250ZXh0IFBhdGggOiAgPC9GT05UPiAiICsgcmVxLmdldENvbnRleHRQYXRoKCkgKyAiPGJyPiIgKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gU2VydmxldCBQYXRoIDogIDwvRk9OVD4gIiArIHJlcS5nZXRTZXJ2bGV0UGF0aCgpICsgIjxicj4iICk7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IFBhdGggSW5mbyA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0UGF0aEluZm8oKSArICI8YnI+IiApOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvQk9EWT4gPC9IVE1MPiAiKTsKIAogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL3Npbml0Y2FsbGVqYi93YXIvU2ltcGxlU2luZ2xldG9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9zaW5pdGNhbGxlamIvd2FyL1NpbXBsZVNpbmdsZXRvbi5qYXZhCmluZGV4IDBkNzMyOGIuLjg1MTYwMTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL3Npbml0Y2FsbGVqYi93YXIvU2ltcGxlU2luZ2xldG9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvc2luaXRjYWxsZWpiL3dhci9TaW1wbGVTaW5nbGV0b24uamF2YQpAQCAtMjUsNDIgKzI1LDQyIEBACiBAU3RhcnR1cAogcHVibGljIGNsYXNzIFNpbXBsZVNpbmdsZXRvbiB7CiAKLSAgICBAUmVzb3VyY2UgCisgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBzZXNzaW9uQ3R4OwogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdCgpIHsKLQkgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW1wbGVTaW5nbGV0b246aW5pdCgpIik7CisgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2ltcGxlU2luZ2xldG9uOmluaXQoKSIpOwogCi0JIHRyeSB7Ci0JICAgICBTaW1wbGVTdGF0ZWxlc3Mgc3MgPSAoU2ltcGxlU3RhdGVsZXNzKQotCQkgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6YXBwL2Vudi9zbHJlZiIpOwotCSAgICAgc3MuaGVsbG8oKTsKLQkgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGxvb2tlZCB1cCB3ZWItY29tcG9uZW50IGRlZmluZWQgZW52aXJvbm1lbnQgZGVwZW5kZW5jeSBmcm9tIEBTdGFydHVwIFNpbmdsZXRvbiBAUG9zdENvbnN0cnVjdCIpOwotCSB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwotCSB9CisgICAgIHRyeSB7CisgICAgICAgICBTaW1wbGVTdGF0ZWxlc3Mgc3MgPSAoU2ltcGxlU3RhdGVsZXNzKQorICAgICAgICAgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6YXBwL2Vudi9zbHJlZiIpOworICAgICAgICAgc3MuaGVsbG8oKTsKKyAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGxvb2tlZCB1cCB3ZWItY29tcG9uZW50IGRlZmluZWQgZW52aXJvbm1lbnQgZGVwZW5kZW5jeSBmcm9tIEBTdGFydHVwIFNpbmdsZXRvbiBAUG9zdENvbnN0cnVjdCIpOworICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOworICAgICB9CiAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBoZWxsbygpIHsKLQkgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW1wbGVTaW5nbGV0b246aGVsbG8oKSIpOwotCSB0cnkgewotCSAgICAgU2ltcGxlU3RhdGVsZXNzIHNzID0gKFNpbXBsZVN0YXRlbGVzcykKLQkJIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOmFwcC9lbnYvc2xyZWYiKTsKLQkgICAgIHNzLmhlbGxvKCk7CisgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2ltcGxlU2luZ2xldG9uOmhlbGxvKCkiKTsKKyAgICAgdHJ5IHsKKyAgICAgICAgIFNpbXBsZVN0YXRlbGVzcyBzcyA9IChTaW1wbGVTdGF0ZWxlc3MpCisgICAgICAgICBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTphcHAvZW52L3NscmVmIik7CisgICAgICAgICBzcy5oZWxsbygpOwogCi0JICAgICAvLyBhc3N1bWVzIDI5OSBlbmFibGVkIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpjb21wL0JlYW5NYW5hZ2VyIik7Ci0JIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7Ci0JIH0KKyAgICAgICAgIC8vIGFzc3VtZXMgMjk5IGVuYWJsZWQgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmNvbXAvQmVhbk1hbmFnZXIiKTsKKyAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlKTsKKyAgICAgfQogICAgIH0KIAogICAgICBAUHJlRGVzdHJveQogICAgICBwcml2YXRlIHZvaWQgZGVzdHJveSgpIHsKLQkgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW1wbGVTaW5nbGV0b246ZGVzdHJveSgpIik7CisgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2ltcGxlU2luZ2xldG9uOmRlc3Ryb3koKSIpOwogICAgICB9CiAKLSAgICAKKwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9zaW5pdGNhbGxlamIvd2FyL1NpbXBsZVN0YXRlZnVsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9zaW5pdGNhbGxlamIvd2FyL1NpbXBsZVN0YXRlZnVsLmphdmEKaW5kZXggOWM1MTliOS4uYWQ3MGJkOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvc2luaXRjYWxsZWpiL3dhci9TaW1wbGVTdGF0ZWZ1bC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL3Npbml0Y2FsbGVqYi93YXIvU2ltcGxlU3RhdGVmdWwuamF2YQpAQCAtMjQsMTggKzI0LDE4IEBACiAKICAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0JIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2ltcGxlU3RhdGVmdWw6aW5pdCgpIik7CisgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2ltcGxlU3RhdGVmdWw6aW5pdCgpIik7CiAgICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGhlbGxvKCkgewotCSBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbXBsZVN0YXRlZnVsOmhlbGxvKCkiKTsKKyAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW1wbGVTdGF0ZWZ1bDpoZWxsbygpIik7CiAgICAgfQogCiAgICAgIEBQcmVEZXN0cm95CiAgICAgIHByaXZhdGUgdm9pZCBkZXN0cm95KCkgewotCSBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbXBsZVN0YXRlZnVsOmRlc3Ryb3koKSIpOworICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbXBsZVN0YXRlZnVsOmRlc3Ryb3koKSIpOwogICAgICB9CiAKLSAgICAKKwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9zaW5pdGNhbGxlamIvd2FyL1NpbXBsZVN0YXRlbGVzcy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VqYmxpdGUvc2luaXRjYWxsZWpiL3dhci9TaW1wbGVTdGF0ZWxlc3MuamF2YQppbmRleCAwNjZkMTViLi5iMmI1OWEwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZWpibGl0ZS9zaW5pdGNhbGxlamIvd2FyL1NpbXBsZVN0YXRlbGVzcy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lamJsaXRlL3Npbml0Y2FsbGVqYi93YXIvU2ltcGxlU3RhdGVsZXNzLmphdmEKQEAgLTI0LDI2ICsyNCwyNiBAQAogCiAgICAgIEBQb3N0Q29uc3RydWN0CiAgICAgIHByaXZhdGUgdm9pZCBpbml0KCkgewotCSBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbXBsZVN0YXRlbGVzczppbml0KCkiKTsKKyAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW1wbGVTdGF0ZWxlc3M6aW5pdCgpIik7CiAgICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGhlbGxvKCkgewotCSBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbXBsZVN0YXRlbGVzczpoZWxsbygpIik7CisgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2ltcGxlU3RhdGVsZXNzOmhlbGxvKCkiKTsKICAgICB9CiAKICAgICBwcm90ZWN0ZWQgdm9pZCBoZWxsb1Byb3RlY3RlZCgpIHsKLQkgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW1wbGVTdGF0ZWxlc3M6aGVsbG9Qcm90ZWN0ZWQoKSIpOworICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbXBsZVN0YXRlbGVzczpoZWxsb1Byb3RlY3RlZCgpIik7CiAgICAgfQogCiAgICAgdm9pZCBoZWxsb1BhY2thZ2UoKSB7Ci0JIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2ltcGxlU3RhdGVsZXNzOmhlbGxvUGFja2FnZSgpIik7CisgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2ltcGxlU3RhdGVsZXNzOmhlbGxvUGFja2FnZSgpIik7CiAgICAgfQogCiAgICAgIEBQcmVEZXN0cm95CiAgICAgIHByaXZhdGUgdm9pZCBkZXN0cm95KCkgewotCSBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbXBsZVN0YXRlbGVzczpkZXN0cm95KCkiKTsKKyAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW1wbGVTdGF0ZWxlc3M6ZGVzdHJveSgpIik7CiAgICAgIH0KIAotICAgIAorCiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9iYXNpYy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2Jhc2ljL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYTc0YzNjYi4uNzYwNGY1MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2Jhc2ljL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2Jhc2ljL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMxLWVtYmVkZGVkLWJhc2ljIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAKLTxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz5cdTAwMjAKKzxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic2UuY2xpZW50IiB2YWx1ZT0iY29tLmFjbWUuQ2xpZW50Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvYmFzaWMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2Jhc2ljL2J1aWxkLnhtbAppbmRleCBjMGY1ODQ3Li4xY2ZmOTlkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvYmFzaWMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9iYXNpYy9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ5LDI0ICs0OSwyNCBAQAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8IS0tIHBhY2thZ2Ugb3Vyc2VsdmVzIHRvIGluY2x1ZGUgcGVyc2lzdGVuY2UueG1sIC0tPgogICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KLSAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIuamFyIiAKLSAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgCisgICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphciIKKyAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgICB1cGRhdGU9InRydWUiCiAgICAgICAgICAgICAgaW5jbHVkZXMgPSIqKi9TKi5jbGFzcyI+CiAgICAgICAgICAgICAgPG1ldGFpbmYgZGlyPSJkZXNjcmlwdG9yIj4KICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9ImVqYi1qYXIueG1sIi8+CiAgICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJwZXJzaXN0ZW5jZS54bWwiLz4KLSAgICAgICAgICAgICA8L21ldGFpbmY+IAorICAgICAgICAgICAgIDwvbWV0YWluZj4KICAgICAgICAgPC9qYXI+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5fc2UiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuX3NlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgPGVjaG8gbWVzc2FnZT0iUnVubmluZyB3aXRoICR7ZW1iZWRkZWQuY2xhc3NwYXRofSBpbiBjbGFzc3BhdGgiLz4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgIDxqYXZhICBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphcjoke2VtYmVkZGVkLmNsYXNzcGF0aH06JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iJHtzZS5jbGllbnR9Ij4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9iYXNpYy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvYmFzaWMvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGZjMDhkZjguLjdjMGU0NDMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9iYXNpYy9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2Jhc2ljL2NsaWVudC9DbGllbnQuamF2YQpAQCAtODUsNyArODUsNyBAQAogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiY3JlYXRlIGNvbnRhaW5lciB3aXRoIGEgd3JvbmcgcHJvdmlkZXIiLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfQotICAgICAgICB9IGNhdGNoIChFSkJFeGNlcHRpb24gZSkgeyAKKyAgICAgICAgfSBjYXRjaCAoRUpCRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiPT0+IENhdWdodCBleHBlY3RlZDogIiArIGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJjcmVhdGUgY29udGFpbmVyIHdpdGggYSB3cm9uZyBwcm92aWRlciIsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0KQEAgLTEyOCw3ICsxMjgsNyBAQAogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJjcmVhdGUgY29udGFpbmVyIHdpdGhvdXQgY2xvc2luZyB0aGUgY3VycmVudCIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCI9PT4gRVJST1I6IENyZWF0ZWQgYW5vdGhlciBjb250YWluZXIgd2l0aG91dCBjbG9zaW5nIHRoZSBjdXJyZW50Li4uIik7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gY2F0Y2ggKEVKQkV4Y2VwdGlvbiBlKSB7IAorICAgICAgICB9IGNhdGNoIChFSkJFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCI9PT4gQ2F1Z2h0IGV4cGVjdGVkOiAiICsgZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImNyZWF0ZSBjb250YWluZXIgd2l0aG91dCBjbG9zaW5nIHRoZSBjdXJyZW50Iiwgc3RhdC5QQVNTKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2Jhc2ljL2VqYi9TaW1wbGVFbnRpdHkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9iYXNpYy9lamIvU2ltcGxlRW50aXR5LmphdmEKaW5kZXggOTU5YjU1Ni4uMDY4OWJlZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2Jhc2ljL2VqYi9TaW1wbGVFbnRpdHkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvYmFzaWMvZWpiL1NpbXBsZUVudGl0eS5qYXZhCkBAIC0zMSwzNSArMzEsMzUgQEAKICAgICBATmFtZWRRdWVyeShuYW1lID0gIlNpbXBsZUVudGl0eS5maW5kQWxsIiwgcXVlcnkgPSAic2VsZWN0IGUgZnJvbSBTaW1wbGVFbnRpdHkgZSIpCiB9KQogcHVibGljIGNsYXNzIFNpbXBsZUVudGl0eSB7Ci0gICAgCi0gICAgQElkIAorCisgICAgQElkCiAgICAgQEdlbmVyYXRlZFZhbHVlCiAgICAgcHJpdmF0ZSBpbnQgaWQ7CiAgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKIAogICAgIEBPbmVUb09uZShjYXNjYWRlPVBFUlNJU1QsIGZldGNoPUxBWlkpCiAgICAgcHJpdmF0ZSBTaW1wbGVSZWxhdGVkIHJlbGF0ZWQ7Ci0gICAgCisKICAgICBwdWJsaWMgU2ltcGxlRW50aXR5KFN0cmluZyBuYW1lKSB7CiAgICAgICAgIHNldE5hbWUobmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFNpbXBsZUVudGl0eSgpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CiAgICAgICAgIHJldHVybiBuYW1lOwogICAgIH0KICAgICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFNpbXBsZVJlbGF0ZWQgZ2V0UmVsYXRlZCgpIHsKICAgICAgICAgcmV0dXJuIHJlbGF0ZWQ7CiAgICAgfQogICAgIHB1YmxpYyB2b2lkIHNldFJlbGF0ZWQoU2ltcGxlUmVsYXRlZCByZWxhdGVkKSB7CiAgICAgICAgIHRoaXMucmVsYXRlZCA9IHJlbGF0ZWQ7CiAgICAgfQotICAgIAotICAgIAorCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9iYXNpYy9lamIvU2ltcGxlUmVsYXRlZC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2Jhc2ljL2VqYi9TaW1wbGVSZWxhdGVkLmphdmEKaW5kZXggOWFiZjk4Zi4uNjFjNDQ5NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2Jhc2ljL2VqYi9TaW1wbGVSZWxhdGVkLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2Jhc2ljL2VqYi9TaW1wbGVSZWxhdGVkLmphdmEKQEAgLTI3LDM0ICsyNywzNCBAQAogCiBARW50aXR5CiBwdWJsaWMgY2xhc3MgU2ltcGxlUmVsYXRlZCB7Ci0gICAgCi0gICAgQElkIAorCisgICAgQElkCiAgICAgQEdlbmVyYXRlZFZhbHVlCiAgICAgcHJpdmF0ZSBpbnQgaWQ7CiAgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKIAogICAgIEBPbmVUb09uZShmZXRjaD1MQVpZKQogICAgIHByaXZhdGUgU2ltcGxlRW50aXR5IGVudGl0eTsKLSAgICAKKwogICAgIHB1YmxpYyBTaW1wbGVSZWxhdGVkKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIHNldE5hbWUobmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFNpbXBsZVJlbGF0ZWQoKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewogICAgICAgICByZXR1cm4gbmFtZTsKICAgICB9CiAgICAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkgewogICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTaW1wbGVFbnRpdHkgZ2V0RW50aXR5KCkgewogICAgICAgICByZXR1cm4gZW50aXR5OwogICAgIH0KICAgICBwdWJsaWMgdm9pZCBzZXRFbnRpdHkoU2ltcGxlRW50aXR5IGVudGl0eSkgewogICAgICAgICB0aGlzLmVudGl0eSA9IGVudGl0eTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9iYXNpYy9lamIvU2luZ2xldG9uQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2Jhc2ljL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKaW5kZXggY2EyNzg0Zi4uYzkyMzYxOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2Jhc2ljL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2Jhc2ljL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKQEAgLTE3LDE0ICsxNywxNCBAQAogcGFja2FnZSBvcmcuZ2xhc3NmaXNoLnRlc3RzLmVqYi5zYW1wbGU7CiAKIGltcG9ydCBqYWthcnRhLmVqYi5TaW5nbGV0b247Ci1pbXBvcnQgamFrYXJ0YS5lamIuU3RhcnR1cDsgCitpbXBvcnQgamFrYXJ0YS5lamIuU3RhcnR1cDsKIGltcG9ydCBqYWthcnRhLmFubm90YXRpb24uUHJlRGVzdHJveTsKIGltcG9ydCBqYWthcnRhLmFubm90YXRpb24uUG9zdENvbnN0cnVjdDsKIAogLyoqCiAgKiBAYXV0aG9yIE1hcmluYSBWYXRraW5hCiAgKi8KLUBTaW5nbGV0b24gCitAU2luZ2xldG9uCiBAU3RhcnR1cAogcHVibGljIGNsYXNzIFNpbmdsZXRvbkJlYW4gewogCkBAIC0zMiw3ICszMiw3IEBACiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiZHMgPSAiICsgZHMpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZHMgPSAiICsgZHMpOwogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgZm9vKCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9idWlsZC54bWwKaW5kZXggNDRmN2FkZi4uZDFlMjZiYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvYnVpbGQueG1sCkBAIC05MSw3ICs5MSw3IEBACiAgICAgICAgIDwhLS0gVGhlc2UgdGVzdHMgcmVxdWlyZSBGdWxsIFByb2ZpbGUgLS0+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ibW9kdWxld2l0aGFwcG5hbWUiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ0d29tb2R1bGVzIi8+Ci0gICAgICAgIDxhbnRjYWxsIHRhcmdldD0idHdvbW9kdWxlc3dpdGhsaWJzIi8+IAorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InR3b21vZHVsZXN3aXRobGlicyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVqYmFuZHdhciIvPgogICAgICAgICA8IS0tIFRoZXNlIDIgdGVzdHMgd2lsbCBzdG9wIGRvbWFpbiB0byBydW4gLS0+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ibWRiIi8+CkBAIC0xMTgsNyArMTE4LDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idGltZXJ0ZXN0Ij4KICAgICAgICAgPHJlY29yZCBuYW1lPSJ0aW1lcnRlc3Qub3V0cHV0IiBhY3Rpb249InN0YXJ0IiAvPgotCTxlY2hvPlJ1bm5pbmcgdGltZXJ0ZXN0IHRhcmdldCAke3RpbWVyLnRlc3QudHlwZX0gPC9lY2hvPgorICAgIDxlY2hvPlJ1bm5pbmcgdGltZXJ0ZXN0IHRhcmdldCAke3RpbWVyLnRlc3QudHlwZX0gPC9lY2hvPgogICAgICAgICAgICAgPGFudCBkaXI9InRpbWVydGVzdCIgdGFyZ2V0PSIke3RpbWVyLnRlc3QudHlwZX0iLz4KICAgICAgICAgPHJlY29yZCBuYW1lPSJ0aW1lcnRlc3Qub3V0cHV0IiBhY3Rpb249InN0b3AiIC8+CiAgICAgPC90YXJnZXQ+CkBAIC0xOTAsOSArMTkwLDkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPgotCQlVc2FnZToKLQkJCWFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZWpiLWVqYjMxLWVtYmVkZGVkIHRlc3RzKQotCTwvZWNobz4KKyAgICA8ZWNobz4KKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYi1lamIzMS1lbWJlZGRlZCB0ZXN0cykKKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvZGF0YXNvdXJjZWRlZi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2RhdGFzb3VyY2VkZWYvYnVpbGQucHJvcGVydGllcwppbmRleCA3NGM0YjA0Li5mYmRhMjFmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvZGF0YXNvdXJjZWRlZi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9kYXRhc291cmNlZGVmL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMxLWVtYmVkZGVkLWRhdGFzb3VyY2VkZWYiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+IAotPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPlx1MDAyMAorPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzZS5jbGllbnQiIHZhbHVlPSJjb20uYWNtZS5DbGllbnQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9kYXRhc291cmNlZGVmL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9kYXRhc291cmNlZGVmL2J1aWxkLnhtbAppbmRleCA2MjYzZTI2Li43ZDNiYmJiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvZGF0YXNvdXJjZWRlZi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2RhdGFzb3VyY2VkZWYvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OSwyNCArNDksMjQgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPCEtLSBwYWNrYWdlIG91cnNlbHZlcyB0byBpbmNsdWRlIHBlcnNpc3RlbmNlLnhtbCAtLT4KICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+Ci0gICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphciIgCi0gICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIAorICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXIiCisgICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICAgdXBkYXRlPSJ0cnVlIgogICAgICAgICAgICAgIGluY2x1ZGVzID0iKiovUyouY2xhc3MiPgogICAgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iZGVzY3JpcHRvciI+CiAgICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJlamItamFyLnhtbCIvPgogICAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icGVyc2lzdGVuY2UueG1sIi8+Ci0gICAgICAgICAgICAgPC9tZXRhaW5mPiAKKyAgICAgICAgICAgICA8L21ldGFpbmY+CiAgICAgICAgIDwvamFyPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuX3NlIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bl9zZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgIDxlY2hvIG1lc3NhZ2U9IlJ1bm5pbmcgd2l0aCAke2VtYmVkZGVkLmNsYXNzcGF0aH0gaW4gY2xhc3NwYXRoIi8+Ci0gICAgICAgPGphdmEgIGZvcms9Im9uIiAKKyAgICAgICA8amF2YSAgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXI6JHtlbWJlZGRlZC5jbGFzc3BhdGh9OiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9IiR7c2UuY2xpZW50fSI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvZGF0YXNvdXJjZWRlZi9lamIvU2ltcGxlRW50aXR5LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvZGF0YXNvdXJjZWRlZi9lamIvU2ltcGxlRW50aXR5LmphdmEKaW5kZXggOTU5YjU1Ni4uMDY4OWJlZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2RhdGFzb3VyY2VkZWYvZWpiL1NpbXBsZUVudGl0eS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9kYXRhc291cmNlZGVmL2VqYi9TaW1wbGVFbnRpdHkuamF2YQpAQCAtMzEsMzUgKzMxLDM1IEBACiAgICAgQE5hbWVkUXVlcnkobmFtZSA9ICJTaW1wbGVFbnRpdHkuZmluZEFsbCIsIHF1ZXJ5ID0gInNlbGVjdCBlIGZyb20gU2ltcGxlRW50aXR5IGUiKQogfSkKIHB1YmxpYyBjbGFzcyBTaW1wbGVFbnRpdHkgewotICAgIAotICAgIEBJZCAKKworICAgIEBJZAogICAgIEBHZW5lcmF0ZWRWYWx1ZQogICAgIHByaXZhdGUgaW50IGlkOwogICAgIHByaXZhdGUgU3RyaW5nIG5hbWU7CiAKICAgICBAT25lVG9PbmUoY2FzY2FkZT1QRVJTSVNULCBmZXRjaD1MQVpZKQogICAgIHByaXZhdGUgU2ltcGxlUmVsYXRlZCByZWxhdGVkOwotICAgIAorCiAgICAgcHVibGljIFNpbXBsZUVudGl0eShTdHJpbmcgbmFtZSkgewogICAgICAgICBzZXROYW1lKG5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTaW1wbGVFbnRpdHkoKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewogICAgICAgICByZXR1cm4gbmFtZTsKICAgICB9CiAgICAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkgewogICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTaW1wbGVSZWxhdGVkIGdldFJlbGF0ZWQoKSB7CiAgICAgICAgIHJldHVybiByZWxhdGVkOwogICAgIH0KICAgICBwdWJsaWMgdm9pZCBzZXRSZWxhdGVkKFNpbXBsZVJlbGF0ZWQgcmVsYXRlZCkgewogICAgICAgICB0aGlzLnJlbGF0ZWQgPSByZWxhdGVkOwogICAgIH0KLSAgICAKLSAgICAKKworCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvZGF0YXNvdXJjZWRlZi9lamIvU2ltcGxlUmVsYXRlZC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2RhdGFzb3VyY2VkZWYvZWpiL1NpbXBsZVJlbGF0ZWQuamF2YQppbmRleCA5YWJmOThmLi42MWM0NDk1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvZGF0YXNvdXJjZWRlZi9lamIvU2ltcGxlUmVsYXRlZC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9kYXRhc291cmNlZGVmL2VqYi9TaW1wbGVSZWxhdGVkLmphdmEKQEAgLTI3LDM0ICsyNywzNCBAQAogCiBARW50aXR5CiBwdWJsaWMgY2xhc3MgU2ltcGxlUmVsYXRlZCB7Ci0gICAgCi0gICAgQElkIAorCisgICAgQElkCiAgICAgQEdlbmVyYXRlZFZhbHVlCiAgICAgcHJpdmF0ZSBpbnQgaWQ7CiAgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKIAogICAgIEBPbmVUb09uZShmZXRjaD1MQVpZKQogICAgIHByaXZhdGUgU2ltcGxlRW50aXR5IGVudGl0eTsKLSAgICAKKwogICAgIHB1YmxpYyBTaW1wbGVSZWxhdGVkKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIHNldE5hbWUobmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFNpbXBsZVJlbGF0ZWQoKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewogICAgICAgICByZXR1cm4gbmFtZTsKICAgICB9CiAgICAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkgewogICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTaW1wbGVFbnRpdHkgZ2V0RW50aXR5KCkgewogICAgICAgICByZXR1cm4gZW50aXR5OwogICAgIH0KICAgICBwdWJsaWMgdm9pZCBzZXRFbnRpdHkoU2ltcGxlRW50aXR5IGVudGl0eSkgewogICAgICAgICB0aGlzLmVudGl0eSA9IGVudGl0eTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9lamJhbmR3YXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9lamJhbmR3YXIvYnVpbGQucHJvcGVydGllcwppbmRleCBkNGJiMzFhLi40MjYxN2NhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvZWpiYW5kd2FyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2VqYmFuZHdhci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMSArMTUsMTEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lamIzMS1lbWJlZGRlZC1lamJ3YW5kd2FyIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAKLTxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0td2ViIi8+ICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz5cdTAwMjAKKzxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0td2ViIi8+ICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0icGVyc2lzdGVuY2UueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9wZXJzaXN0ZW5jZS54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvZWpiYW5kd2FyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9lamJhbmR3YXIvYnVpbGQueG1sCmluZGV4IDA0ZDhhM2YuLjY2OGEwNGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9lamJhbmR3YXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9lamJhbmR3YXIvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC04NCwxNSArODQsMTUgQEAKICAgICAgICAgPC9kZWxldGU+CiAKICAgICAgICAgPG1vdmUgZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wIiB0b2ZpbGU9IiR7YXNzZW1ibGUuZGlyfS90bXAiLz4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bl93YXIiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5fZGlyIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bl93YXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgIDxqYXZhICBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tb3RoZXIuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXI6JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tcHUuamFyOiR7ZW1iZWRkZWQuY2xhc3NwYXRofToke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSIke3NlLmNsaWVudH0iPgpAQCAtMTAzLDcgKzEwMyw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJydW5fZGlyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9L290aGVyIi8+CiAgICAgICAgPHVuemlwIHNyYz0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tb3RoZXIuamFyIiBkZXN0PSIke2Fzc2VtYmxlLmRpcn0vb3RoZXIiLz4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgIDxqYXZhICBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHthc3NlbWJsZS5kaXJ9L3RtcDoke2Fzc2VtYmxlLmRpcn0vb3RoZXI6JHtlbWJlZGRlZC5jbGFzc3BhdGh9OiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9IiR7c2UuY2xpZW50fSI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvZWpiYW5kd2FyL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9lamJhbmR3YXIvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IGI2MjAzOTUuLjQ3ZDlhMTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9lamJhbmR3YXIvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9lamJhbmR3YXIvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0xOSw2ICsxOSw2IEBACiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzNfMC54c2QiCi0gICAgICB2ZXJzaW9uPSIzLjAiPiAKKyAgICAgIHZlcnNpb249IjMuMCI+CiAgIDxtb2R1bGUtbmFtZT5zYW1wbGU8L21vZHVsZS1uYW1lPgogPC93ZWItYXBwPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2VqYmFuZHdhci9lamIvU2ltcGxlRW50aXR5LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvZWpiYW5kd2FyL2VqYi9TaW1wbGVFbnRpdHkuamF2YQppbmRleCBiMmJkMjUwLi4yODVkODMzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvZWpiYW5kd2FyL2VqYi9TaW1wbGVFbnRpdHkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvZWpiYW5kd2FyL2VqYi9TaW1wbGVFbnRpdHkuamF2YQpAQCAtMzEsOCArMzEsOCBAQAogICAgIEBOYW1lZFF1ZXJ5KG5hbWUgPSAiU2ltcGxlRW50aXR5LmZpbmRBbGwiLCBxdWVyeSA9ICJzZWxlY3QgZSBmcm9tIFNpbXBsZUVudGl0eSBlIikKIH0pCiBwdWJsaWMgY2xhc3MgU2ltcGxlRW50aXR5IHsKLSAgICAKLSAgICBASWQgCisKKyAgICBASWQKICAgICBAR2VuZXJhdGVkVmFsdWUKICAgICBwcml2YXRlIGludCBpZDsKICAgICBwcml2YXRlIFN0cmluZyBuYW1lOwpAQCAtNDAsMTUgKzQwLDE1IEBACiAgICAgcHVibGljIFNpbXBsZUVudGl0eShTdHJpbmcgbmFtZSkgewogICAgICAgICBzZXROYW1lKG5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTaW1wbGVFbnRpdHkoKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewogICAgICAgICByZXR1cm4gbmFtZTsKICAgICB9CiAgICAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkgewogICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2VqYmlud2FyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvZWpiaW53YXIvYnVpbGQucHJvcGVydGllcwppbmRleCA1YWExMzY1Li5iNWQxYTYzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvZWpiaW53YXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvZWpiaW53YXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTEgKzE1LDExIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzEtZW1iZWRkZWQtZWpid2lud2FyIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAKLTxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0td2ViIi8+ICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz5cdTAwMjAKKzxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0td2ViIi8+ICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0icGVyc2lzdGVuY2UueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9wZXJzaXN0ZW5jZS54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvZWpiaW53YXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2VqYmlud2FyL2J1aWxkLnhtbAppbmRleCAwZjM1Y2ZkLi44ODgzNTc4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvZWpiaW53YXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9lamJpbndhci9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTc1LDE1ICs3NSwxNSBAQAogICAgICAgICA8L2RlbGV0ZT4KIAogICAgICAgICA8bW92ZSBmaWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAiIHRvZmlsZT0iJHthc3NlbWJsZS5kaXJ9L3RtcCIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuX3dhciIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bl9kaXIiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuX3dhciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgIDxqYXZhICBmb3JrPSJvbiIgCisgICAgICAgPGphdmEgIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXB1Lmphcjoke2VtYmVkZGVkLmNsYXNzcGF0aH06JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iJHtzZS5jbGllbnR9Ij4KQEAgLTkzLDcgKzkzLDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0icnVuX3dhcl9pbnN0YWxsZWRfaW5zdGFuY2UiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJzdGFydC1kYXRhYmFzZSIvPgotICAgICAgIDxqYXZhICBmb3JrPSJvbiIgCisgICAgICAgPGphdmEgIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXB1Lmphcjoke2VtYmVkZGVkLmNsYXNzcGF0aH06JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iJHtzZS5jbGllbnR9Ij4KQEAgLTExNCw3ICsxMTQsNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW5fZGlyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgPGphdmEgIGZvcms9Im9uIiAKKyAgICAgICA8amF2YSAgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7YXNzZW1ibGUuZGlyfS90bXA6JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tcHUuamFyOiR7ZW1iZWRkZWQuY2xhc3NwYXRofToke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSIke3NlLmNsaWVudH0iPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2VqYmlud2FyL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9lamJpbndhci9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggYjYyMDM5NS4uNDdkOWExNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2VqYmlud2FyL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvZWpiaW53YXIvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0xOSw2ICsxOSw2IEBACiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzNfMC54c2QiCi0gICAgICB2ZXJzaW9uPSIzLjAiPiAKKyAgICAgIHZlcnNpb249IjMuMCI+CiAgIDxtb2R1bGUtbmFtZT5zYW1wbGU8L21vZHVsZS1uYW1lPgogPC93ZWItYXBwPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2VqYmlud2FyL2VqYi9TaW1wbGVFbnRpdHkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9lamJpbndhci9lamIvU2ltcGxlRW50aXR5LmphdmEKaW5kZXggYjJiZDI1MC4uMjg1ZDgzMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2VqYmlud2FyL2VqYi9TaW1wbGVFbnRpdHkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvZWpiaW53YXIvZWpiL1NpbXBsZUVudGl0eS5qYXZhCkBAIC0zMSw4ICszMSw4IEBACiAgICAgQE5hbWVkUXVlcnkobmFtZSA9ICJTaW1wbGVFbnRpdHkuZmluZEFsbCIsIHF1ZXJ5ID0gInNlbGVjdCBlIGZyb20gU2ltcGxlRW50aXR5IGUiKQogfSkKIHB1YmxpYyBjbGFzcyBTaW1wbGVFbnRpdHkgewotICAgIAotICAgIEBJZCAKKworICAgIEBJZAogICAgIEBHZW5lcmF0ZWRWYWx1ZQogICAgIHByaXZhdGUgaW50IGlkOwogICAgIHByaXZhdGUgU3RyaW5nIG5hbWU7CkBAIC00MCwxNSArNDAsMTUgQEAKICAgICBwdWJsaWMgU2ltcGxlRW50aXR5KFN0cmluZyBuYW1lKSB7CiAgICAgICAgIHNldE5hbWUobmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFNpbXBsZUVudGl0eSgpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CiAgICAgICAgIHJldHVybiBuYW1lOwogICAgIH0KICAgICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvZW1iZWRhc3luYy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2VtYmVkYXN5bmMvYnVpbGQucHJvcGVydGllcwppbmRleCAwMjA4OWVlLi4yMjZlZjBhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvZW1iZWRhc3luYy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9lbWJlZGFzeW5jL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMxLWZ1bGwtZW1iZWRhc3luYyIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gCi08cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+XHUwMDIwCis8cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InNlLmNsaWVudCIgdmFsdWU9ImNvbS5hY21lLkNsaWVudCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2VtYmVkYXN5bmMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2VtYmVkYXN5bmMvYnVpbGQueG1sCmluZGV4IDhmYTk1ZDguLjhjOTUxMjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9lbWJlZGFzeW5jL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvZW1iZWRhc3luYy9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDEwICs0NiwxMCBAQAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KLQk8Y29weSBmaWxlPSJkZXNjcmlwdG9yL2JlYW5zLnhtbCIgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+Ci0JPCEtLQotICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXIiIAotICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiAKKyAgICA8Y29weSBmaWxlPSJkZXNjcmlwdG9yL2JlYW5zLnhtbCIgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CisgICAgPCEtLQorICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXIiCisgICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICAgdXBkYXRlPSJ0cnVlIgogICAgICAgICAgICAgIGluY2x1ZGVzID0iKiovKi5jbGFzcyI+CiAgICAgICAgIDwvamFyPgpAQCAtNTcsMTUgKzU3LDE1IEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNsaWVudCIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5fc2UiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuX3NlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgPGVjaG8gbWVzc2FnZT0iUnVubmluZyB3aXRoICR7ZW1iZWRkZWQuY2xhc3NwYXRofSBpbiBjbGFzc3BhdGgiLz4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgIDxqYXZhICBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbWJlZGRlZC5jbGFzc3BhdGh9OiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9IiR7c2UuY2xpZW50fSI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvZW1iZWRhc3luYy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvZW1iZWRhc3luYy9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggY2RiMGQyOS4uZDBhNDRkMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2VtYmVkYXN5bmMvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9lbWJlZGFzeW5jL2NsaWVudC9DbGllbnQuamF2YQpAQCAtNTAsNDYgKzUwLDQ2IEBACiAgICAgICAgIC8vIG9rIG5vdyBsZXQncyBsb29rIHVwIHRoZSBFSkIuLi4KICAgICAgICAgQ29udGV4dCBpYyA9IGMuZ2V0Q29udGV4dCgpOwogICAgICAgICB0cnkgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNsZWVwaW5nIGZvciBhIHNlY29uZC4uLiIpOwotCSAgICBUaHJlYWQuc2xlZXAoMTAwMCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2xlZXBpbmcgZm9yIGEgc2Vjb25kLi4uIik7CisgICAgICAgIFRocmVhZC5zbGVlcCgxMDAwKTsKIAotCSAgICBTaW5nbGV0b25CZWFuIHNiID0gKFNpbmdsZXRvbkJlYW4pIGljLgotCQlsb29rdXAoImphdmE6Z2xvYmFsL2NsYXNzZXMvU2luZ2xldG9uQmVhbiFjb20uYWNtZS5TaW5nbGV0b25CZWFuIik7Ci0JICAgIHNiLmhlbGxvKCk7CisgICAgICAgIFNpbmdsZXRvbkJlYW4gc2IgPSAoU2luZ2xldG9uQmVhbikgaWMuCisgICAgICAgIGxvb2t1cCgiamF2YTpnbG9iYWwvY2xhc3Nlcy9TaW5nbGV0b25CZWFuIWNvbS5hY21lLlNpbmdsZXRvbkJlYW4iKTsKKyAgICAgICAgc2IuaGVsbG8oKTsKIAotCSAgICBTdGF0ZWZ1bEJlYW4gc2ZUaW1lb3V0ID0gKFN0YXRlZnVsQmVhbikgaWMuCi0JCWxvb2t1cCgiamF2YTpnbG9iYWwvY2xhc3Nlcy9TdGF0ZWZ1bEJlYW4iKTsKLQkgICAgU3RhdGVmdWxCZWFuMiBzZk5vVGltZW91dCA9IChTdGF0ZWZ1bEJlYW4yKSBpYy4KLQkJbG9va3VwKCJqYXZhOmdsb2JhbC9jbGFzc2VzL1N0YXRlZnVsQmVhbjIiKTsKLQkgICAgc2ZUaW1lb3V0LmhlbGxvKCk7Ci0JICAgIHNmTm9UaW1lb3V0LmhlbGxvKCk7CisgICAgICAgIFN0YXRlZnVsQmVhbiBzZlRpbWVvdXQgPSAoU3RhdGVmdWxCZWFuKSBpYy4KKyAgICAgICAgbG9va3VwKCJqYXZhOmdsb2JhbC9jbGFzc2VzL1N0YXRlZnVsQmVhbiIpOworICAgICAgICBTdGF0ZWZ1bEJlYW4yIHNmTm9UaW1lb3V0ID0gKFN0YXRlZnVsQmVhbjIpIGljLgorICAgICAgICBsb29rdXAoImphdmE6Z2xvYmFsL2NsYXNzZXMvU3RhdGVmdWxCZWFuMiIpOworICAgICAgICBzZlRpbWVvdXQuaGVsbG8oKTsKKyAgICAgICAgc2ZOb1RpbWVvdXQuaGVsbG8oKTsKIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNsZWVwaW5nIHRvIHdhaXQgZm9yIHNmIGJlYW4gdG8gYmUgcmVtb3ZlZCAuLi4iKTsKLQkgICAgVGhyZWFkLnNsZWVwKDcwMDApOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldha2luZyB1cCAsIGNoZWNraW5nIHNmIGJlYW4gZXhpc3RlbmNlIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2xlZXBpbmcgdG8gd2FpdCBmb3Igc2YgYmVhbiB0byBiZSByZW1vdmVkIC4uLiIpOworICAgICAgICBUaHJlYWQuc2xlZXAoNzAwMCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2FraW5nIHVwICwgY2hlY2tpbmcgc2YgYmVhbiBleGlzdGVuY2UiKTsKIAotCSAgICB0cnkgewotCQlzZlRpbWVvdXQuaGVsbG8oKTsKLQkJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlN0YXRlZnVsVGltZW91dCgwKSBiZWFuIHNob3VsZCBoYXZlIHRpbWVkIG91dCIpOwotCSAgICB9IGNhdGNoKEVKQkV4Y2VwdGlvbiBlKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVmdWwgYmVhbiBzdWNjZXNzZnVsbHkgdGltZWQgb3V0Iik7Ci0JICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgc2ZUaW1lb3V0LmhlbGxvKCk7CisgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJTdGF0ZWZ1bFRpbWVvdXQoMCkgYmVhbiBzaG91bGQgaGF2ZSB0aW1lZCBvdXQiKTsKKyAgICAgICAgfSBjYXRjaChFSkJFeGNlcHRpb24gZSkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlZnVsIGJlYW4gc3VjY2Vzc2Z1bGx5IHRpbWVkIG91dCIpOworICAgICAgICB9CiAKLQkgICAgc2ZOb1RpbWVvdXQuaGVsbG8oKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZWZ1bCBiZWFuIHdpdGggbG9uZ2VyIHRpbWVvdXQgaXMgc3RpbGwgYXJvdW5kIik7CisgICAgICAgIHNmTm9UaW1lb3V0LmhlbGxvKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVmdWwgYmVhbiB3aXRoIGxvbmdlciB0aW1lb3V0IGlzIHN0aWxsIGFyb3VuZCIpOwogCi0JICAgIC8qKgotCSAgICBIZWxsb1JlbW90ZSBociA9IChIZWxsb1JlbW90ZSkgaWMuCi0JCWxvb2t1cCgiamF2YTpnbG9iYWwvY2xhc3Nlcy9TaW5nbGV0b25CZWFuIWNvbS5hY21lLkhlbGxvUmVtb3RlIik7Ci0JICAgIGhyLmhlbGxvKCk7Ci0JICAgICovCisgICAgICAgIC8qKgorICAgICAgICBIZWxsb1JlbW90ZSBociA9IChIZWxsb1JlbW90ZSkgaWMuCisgICAgICAgIGxvb2t1cCgiamF2YTpnbG9iYWwvY2xhc3Nlcy9TaW5nbGV0b25CZWFuIWNvbS5hY21lLkhlbGxvUmVtb3RlIik7CisgICAgICAgIGhyLmhlbGxvKCk7CisgICAgICAgICovCiAKLQkgICAgaWYoIHNiLmdldFBhc3NlZCgpICkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oImdldFBhc3NlZCgpIHJldHVybmVkIHRydWUiKTsKLQkJc3RhdC5hZGRTdGF0dXMoImVtYmVkZGVkIGFzeW5jIHRlc3QiLCBzdGF0LlBBU1MpOwotCSAgICB9IGVsc2UgewotCQl0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJnZXRQYXNzZWQoKSByZXR1cm5lZCBmYWxzZSIpOwotCSAgICB9CisgICAgICAgIGlmKCBzYi5nZXRQYXNzZWQoKSApIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJnZXRQYXNzZWQoKSByZXR1cm5lZCB0cnVlIik7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlbWJlZGRlZCBhc3luYyB0ZXN0Iiwgc3RhdC5QQVNTKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiZ2V0UGFzc2VkKCkgcmV0dXJuZWQgZmFsc2UiKTsKKyAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVtYmVkZGVkIGFzeW5jIHRlc3QiLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFUlJPUiBjYWxsaW5nIEVKQjoiKTsKQEAgLTk3LDggKzk3LDggQEAKICAgICAgICAgfQogCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2xvc2luZyBjb250YWluZXIiKTsKLQkKLQljLmNsb3NlKCk7CisKKyAgICBjLmNsb3NlKCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRG9uZSBDbG9zaW5nIGNvbnRhaW5lciIpOwogCiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2VtYmVkYXN5bmMvZWpiL1NpbmdsZXRvbkJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9lbWJlZGFzeW5jL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKaW5kZXggMWFkNDE0Zi4uNjA2ZTI1YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2VtYmVkYXN5bmMvZWpiL1NpbmdsZXRvbkJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvZW1iZWRhc3luYy9lamIvU2luZ2xldG9uQmVhbi5qYXZhCkBAIC0zOSwzNiArMzksMzYgQEAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHB1YmxpYyB2b2lkIGluaXQoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6aW5pdCgpIik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJUaHJlYWQgPSAiICsgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSk7Ci0JbWUuZm9vQXN5bmMoKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRocmVhZCA9ICIgKyBUaHJlYWQuY3VycmVudFRocmVhZCgpKTsKKyAgICBtZS5mb29Bc3luYygpOwogCi0JdHJ5IHsKLQkJQmVhbk1hbmFnZXIgYmVhbk1nciA9IChCZWFuTWFuYWdlcikKLQkJICAgIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpjb21wL0JlYW5NYW5hZ2VyIik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgcmV0cmlldmVkIGJlYW4gbWFuYWdlciAiICsKLQkJCSAgIGJlYW5NZ3IgKyAiIGZvciBKQ0RJIGVuYWJsZWQgYXBwIik7Ci0JfSBjYXRjaChFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwotCX0KLQkKKyAgICB0cnkgeworICAgICAgICBCZWFuTWFuYWdlciBiZWFuTWdyID0gKEJlYW5NYW5hZ2VyKQorICAgICAgICAgICAgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmNvbXAvQmVhbk1hbmFnZXIiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSByZXRyaWV2ZWQgYmVhbiBtYW5hZ2VyICIgKworICAgICAgICAgICAgICAgYmVhbk1nciArICIgZm9yIEpDREkgZW5hYmxlZCBhcHAiKTsKKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7CisgICAgfQorCiAKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGhlbGxvKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6aGVsbG8oKSIpOwotCXJldHVybiAiaGVsbG8sIHdvcmxkIVxuIjsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46OmhlbGxvKCkiKTsKKyAgICByZXR1cm4gImhlbGxvLCB3b3JsZCFcbiI7CiAgICAgfQogCiAgICAgQEFzeW5jaHJvbm91cwogICAgIHB1YmxpYyB2b2lkIGZvb0FzeW5jKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6Zm9vQXN5bmMoKSIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiVGhyZWFkID0gIiArIFRocmVhZC5jdXJyZW50VGhyZWFkKCkpOwotCWdvdEFzeW5jQ2FsbCA9IHRydWU7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOjpmb29Bc3luYygpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaHJlYWQgPSAiICsgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSk7CisgICAgZ290QXN5bmNDYWxsID0gdHJ1ZTsKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiBnZXRQYXNzZWQoKSB7Ci0JcmV0dXJuIGdvdEFzeW5jQ2FsbDsKKyAgICByZXR1cm4gZ290QXN5bmNDYWxsOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvZW1iZWRhc3luYy9lamIvU3RhdGVmdWxCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvZW1iZWRhc3luYy9lamIvU3RhdGVmdWxCZWFuLmphdmEKaW5kZXggOTg1NTBkYi4uMzQ1NjhkNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2VtYmVkYXN5bmMvZWpiL1N0YXRlZnVsQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9lbWJlZGFzeW5jL2VqYi9TdGF0ZWZ1bEJlYW4uamF2YQpAQCAtMjYsOCArMjYsOCBAQAogcHVibGljIGNsYXNzIFN0YXRlZnVsQmVhbiB7CiAKICAgICBASW5qZWN0Ci0JcHVibGljIFN0YXRlZnVsQmVhbihTaW5nbGV0b25CZWFuIHNpbmcpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlZnVsQmVhbiBjdG9yIHNpbmcgPSAiICsgc2luZyk7CisgICAgcHVibGljIFN0YXRlZnVsQmVhbihTaW5nbGV0b25CZWFuIHNpbmcpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlZnVsQmVhbiBjdG9yIHNpbmcgPSAiICsgc2luZyk7CiAgICAgfQogCiAgICAgQFBvc3RDb25zdHJ1Y3QKQEAgLTM2LDcgKzM2LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBoZWxsbygpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlZnVsQmVhbjo6aGVsbG8oKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVmdWxCZWFuOjpoZWxsbygpIik7CiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9lbWJlZGFzeW5jL2VqYi9TdGF0ZWZ1bEJlYW4yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvZW1iZWRhc3luYy9lamIvU3RhdGVmdWxCZWFuMi5qYXZhCmluZGV4IGFlMjc2N2YuLmMxYTJmZDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9lbWJlZGFzeW5jL2VqYi9TdGF0ZWZ1bEJlYW4yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2VtYmVkYXN5bmMvZWpiL1N0YXRlZnVsQmVhbjIuamF2YQpAQCAtMzAsNyArMzAsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGhlbGxvKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVmdWxCZWFuMjo6aGVsbG8oKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVmdWxCZWFuMjo6aGVsbG8oKSIpOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvZW1iZWRkZWQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2VtYmVkZGVkLnhtbAppbmRleCA1YzVmMmFhLi40OGQ3NzVmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvZW1iZWRkZWQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9lbWJlZGRlZC54bWwKQEAgLTI3LDcgKzI3LDcgQEAKIAogPGNvbmRpdGlvbiBwcm9wZXJ0eT0idWJlci5qYXIiIHZhbHVlPSIke3ViZXIuamFyLnJlcG99L3JlcG9zaXRvcnkvb3JnL2dsYXNzZmlzaC9leHRyYXMvZ2xhc3NmaXNoLWVtYmVkZGVkLWFsbC8zLjEtU05BUFNIT1QvZ2xhc3NmaXNoLWVtYmVkZGVkLWFsbC0zLjEtU05BUFNIT1QuamFyIj4KICAgICA8YW5kPgotICAJPGlzc2V0IHByb3BlcnR5PSJ1YmVyLm1vZGUiLz4KKyAgICAgIDxpc3NldCBwcm9wZXJ0eT0idWJlci5tb2RlIi8+CiAgICAgICAgIDxub3Q+CiAgICAgICAgICAgPGlzc2V0IHByb3BlcnR5PSJ1YmVyLmphciIvPgogICAgICAgICA8L25vdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9qYXhycy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2pheHJzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMTI1N2ZlNC4uMDFkMTBjMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2pheHJzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2pheHJzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDExICsxNSwxMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMxLWVtYmVkZGVkLWpheHJzIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAKLTxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0td2ViIi8+ICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz5cdTAwMjAKKzxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0td2ViIi8+ICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0icGVyc2lzdGVuY2UueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9wZXJzaXN0ZW5jZS54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvamF4cnMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2pheHJzL2J1aWxkLnhtbAppbmRleCA5NGY0OWNiLi44MzJhZWZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvamF4cnMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9qYXhycy9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtdXRpbCIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KQEAgLTc1LDI1ICs3NSwyNSBAQAogICAgICAgICA8L2RlbGV0ZT4KIAogICAgICAgICA8bW92ZSBmaWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAiIHRvZmlsZT0iJHthc3NlbWJsZS5kaXJ9L3RtcCIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuX2VqYiIvPgogPCEtLSBEb2Vzbid0IHdvcmsKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5fcmVzdCIvPgogLS0+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bl9lamIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5fd2FyX2VqYiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bl9kaXJfZWpiIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bl9yZXN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuX3dhcl9yZXN0Ii8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuX2Rpcl9yZXN0Ii8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bl93YXJfZWpiIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuX3Rlc3QiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InRlc3QtcGF0aCIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIiLz4KQEAgLTEwMSw3ICsxMDEsNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InBhY2thZ2luZyIgdmFsdWU9IndhciIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bl93YXJfcmVzdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bl90ZXN0Ij4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0LXBhdGgiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIi8+CkBAIC0xMDksNyArMTA5LDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJwYWNrYWdpbmciIHZhbHVlPSJ3YXIiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW5fZGlyX2VqYiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bl90ZXN0Ij4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0LXBhdGgiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vdG1wIi8+CkBAIC0xMTcsNyArMTE3LDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJwYWNrYWdpbmciIHZhbHVlPSJkaXIiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW5fZGlyX3Jlc3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5fdGVzdCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0idGVzdC1wYXRoIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9L3RtcCIvPgpAQCAtMTI1LDkgKzEyNSw5IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0icGFja2FnaW5nIiB2YWx1ZT0iZGlyIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuX3Rlc3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgIDxqYXZhICBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHt0ZXN0LXBhdGh9OiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXB1Lmphcjoke2VtYmVkZGVkLmNsYXNzcGF0aH06JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iJHtzZS5jbGllbnR9Ij4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9qYXhycy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvamF4cnMvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGVlNWUwOTUuLmFmNzM5MWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9qYXhycy9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2pheHJzL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMTI4LDcgKzEyOCw3IEBACiAgICAgICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICB9ICAgCisgICAgICAgIH0KICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIkVKQiBlbWJlZGRlZCAiICsgYXBwTmFtZSArICIgRUpCIiwgKHBhc3MpPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi4uLi4uLi4uLi5GSU5JU0hFRCB0ZXN0Iik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2pheHJzL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9qYXhycy9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggYWU4YThhMS4uMTYyYmIwZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2pheHJzL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvamF4cnMvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0xOSw3ICsxOSw3IEBACiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzNfMC54c2QiCi0gICAgICB2ZXJzaW9uPSIzLjAiPiAKKyAgICAgIHZlcnNpb249IjMuMCI+CiAgIDxtb2R1bGUtbmFtZT5zYW1wbGU8L21vZHVsZS1uYW1lPgogICA8c2VydmxldD4KICAgICA8c2VydmxldC1uYW1lPmpha2FydGEud3MucnMuY29yZS5BcHBsaWNhdGlvbjwvc2VydmxldC1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2pheHJzL2VqYi9TaW1wbGVFbnRpdHkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9qYXhycy9lamIvU2ltcGxlRW50aXR5LmphdmEKaW5kZXggYjJiZDI1MC4uMjg1ZDgzMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL2pheHJzL2VqYi9TaW1wbGVFbnRpdHkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvamF4cnMvZWpiL1NpbXBsZUVudGl0eS5qYXZhCkBAIC0zMSw4ICszMSw4IEBACiAgICAgQE5hbWVkUXVlcnkobmFtZSA9ICJTaW1wbGVFbnRpdHkuZmluZEFsbCIsIHF1ZXJ5ID0gInNlbGVjdCBlIGZyb20gU2ltcGxlRW50aXR5IGUiKQogfSkKIHB1YmxpYyBjbGFzcyBTaW1wbGVFbnRpdHkgewotICAgIAotICAgIEBJZCAKKworICAgIEBJZAogICAgIEBHZW5lcmF0ZWRWYWx1ZQogICAgIHByaXZhdGUgaW50IGlkOwogICAgIHByaXZhdGUgU3RyaW5nIG5hbWU7CkBAIC00MCwxNSArNDAsMTUgQEAKICAgICBwdWJsaWMgU2ltcGxlRW50aXR5KFN0cmluZyBuYW1lKSB7CiAgICAgICAgIHNldE5hbWUobmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFNpbXBsZUVudGl0eSgpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CiAgICAgICAgIHJldHVybiBuYW1lOwogICAgIH0KICAgICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbWFuaWZlc3Rvbmx5L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbWFuaWZlc3Rvbmx5L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOTZmYzE4MS4uZTE2ODUwNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21hbmlmZXN0b25seS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tYW5pZmVzdG9ubHkvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzEtZW1iZWRkZWQtbWFuaWZlc3Rvbmx5Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAKLTxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz5cdTAwMjAKKzxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic2UuY2xpZW50IiB2YWx1ZT0iY29tLmFjbWUuQ2xpZW50Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbWFuaWZlc3Rvbmx5L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tYW5pZmVzdG9ubHkvYnVpbGQueG1sCmluZGV4IDRjZTVhODIuLjNhNzZkYzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tYW5pZmVzdG9ubHkvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tYW5pZmVzdG9ubHkvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OSwyNCArNDksMjQgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPCEtLSBwYWNrYWdlIG91cnNlbHZlcyB0byBpbmNsdWRlIHBlcnNpc3RlbmNlLnhtbCAtLT4KICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+Ci0gICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tcHUuamFyIiAKLSAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgCisgICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tcHUuamFyIgorICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgogICAgICAgICAgICAgIHVwZGF0ZT0idHJ1ZSIKICAgICAgICAgICAgICBpbmNsdWRlcyA9IioqL1NpbXBsZUVudGl0eS5jbGFzcywqKi9TaW1wbGVSZWxhdGVkLmNsYXNzIj4KICAgICAgICAgICAgICA8bWV0YWluZiBkaXI9ImRlc2NyaXB0b3IiPgogICAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icGVyc2lzdGVuY2UueG1sIi8+Ci0gICAgICAgICAgICAgPC9tZXRhaW5mPiAKKyAgICAgICAgICAgICA8L21ldGFpbmY+CiAgICAgICAgIDwvamFyPgotICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXIiIAotICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiAKKyAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIuamFyIgorICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgogICAgICAgICAgICAgIHVwZGF0ZT0idHJ1ZSIKICAgICAgICAgICAgICBpbmNsdWRlcyA9IioqLypFamIuY2xhc3MsKiovKkJlYW4uY2xhc3MiPgogICAgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iZGVzY3JpcHRvciI+CiAgICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJlamItamFyLnhtbCIvPgotICAgICAgICAgICAgIDwvbWV0YWluZj4gCisgICAgICAgICAgICAgPC9tZXRhaW5mPgogICAgICAgICA8L2phcj4KLSAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIiAKLSAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgCisgICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIKKyAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgICB1cGRhdGU9InRydWUiCiAgICAgICAgICAgICAgaW5jbHVkZXMgPSIqKi8qQ2xpZW50LmNsYXNzIj4KICAgICAgICAgPC9qYXI+CkBAIC03NSwxNSArNzUsMTUgQEAKICAgICAgICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJDbGFzcy1QYXRoIiB2YWx1ZT0iZmlsZToke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIuamFyIGZpbGU6JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciBmaWxlOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIi8+CiAgICAgICAgICAgICAgPC9tYW5pZmVzdD4KICAgICAgICAgPC9qYXI+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5fc2UiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuX3NlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgPGVjaG8gbWVzc2FnZT0iUnVubmluZyB3aXRoICR7ZW1iZWRkZWQuY2xhc3NwYXRofSBpbiBjbGFzc3BhdGgiLz4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgIDxqYXZhICBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tYWxsLmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1wdS5qYXI6JHtlbWJlZGRlZC5jbGFzc3BhdGh9IgogICAgICAgICAgICAgICBjbGFzc25hbWU9IiR7c2UuY2xpZW50fSI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbWFuaWZlc3Rvbmx5L2VqYi9TaW1wbGVFbnRpdHkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tYW5pZmVzdG9ubHkvZWpiL1NpbXBsZUVudGl0eS5qYXZhCmluZGV4IDk1OWI1NTYuLjA2ODliZWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tYW5pZmVzdG9ubHkvZWpiL1NpbXBsZUVudGl0eS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tYW5pZmVzdG9ubHkvZWpiL1NpbXBsZUVudGl0eS5qYXZhCkBAIC0zMSwzNSArMzEsMzUgQEAKICAgICBATmFtZWRRdWVyeShuYW1lID0gIlNpbXBsZUVudGl0eS5maW5kQWxsIiwgcXVlcnkgPSAic2VsZWN0IGUgZnJvbSBTaW1wbGVFbnRpdHkgZSIpCiB9KQogcHVibGljIGNsYXNzIFNpbXBsZUVudGl0eSB7Ci0gICAgCi0gICAgQElkIAorCisgICAgQElkCiAgICAgQEdlbmVyYXRlZFZhbHVlCiAgICAgcHJpdmF0ZSBpbnQgaWQ7CiAgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKIAogICAgIEBPbmVUb09uZShjYXNjYWRlPVBFUlNJU1QsIGZldGNoPUxBWlkpCiAgICAgcHJpdmF0ZSBTaW1wbGVSZWxhdGVkIHJlbGF0ZWQ7Ci0gICAgCisKICAgICBwdWJsaWMgU2ltcGxlRW50aXR5KFN0cmluZyBuYW1lKSB7CiAgICAgICAgIHNldE5hbWUobmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFNpbXBsZUVudGl0eSgpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CiAgICAgICAgIHJldHVybiBuYW1lOwogICAgIH0KICAgICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFNpbXBsZVJlbGF0ZWQgZ2V0UmVsYXRlZCgpIHsKICAgICAgICAgcmV0dXJuIHJlbGF0ZWQ7CiAgICAgfQogICAgIHB1YmxpYyB2b2lkIHNldFJlbGF0ZWQoU2ltcGxlUmVsYXRlZCByZWxhdGVkKSB7CiAgICAgICAgIHRoaXMucmVsYXRlZCA9IHJlbGF0ZWQ7CiAgICAgfQotICAgIAotICAgIAorCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tYW5pZmVzdG9ubHkvZWpiL1NpbXBsZVJlbGF0ZWQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tYW5pZmVzdG9ubHkvZWpiL1NpbXBsZVJlbGF0ZWQuamF2YQppbmRleCA5YWJmOThmLi42MWM0NDk1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbWFuaWZlc3Rvbmx5L2VqYi9TaW1wbGVSZWxhdGVkLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21hbmlmZXN0b25seS9lamIvU2ltcGxlUmVsYXRlZC5qYXZhCkBAIC0yNywzNCArMjcsMzQgQEAKIAogQEVudGl0eQogcHVibGljIGNsYXNzIFNpbXBsZVJlbGF0ZWQgewotICAgIAotICAgIEBJZCAKKworICAgIEBJZAogICAgIEBHZW5lcmF0ZWRWYWx1ZQogICAgIHByaXZhdGUgaW50IGlkOwogICAgIHByaXZhdGUgU3RyaW5nIG5hbWU7CiAKICAgICBAT25lVG9PbmUoZmV0Y2g9TEFaWSkKICAgICBwcml2YXRlIFNpbXBsZUVudGl0eSBlbnRpdHk7Ci0gICAgCisKICAgICBwdWJsaWMgU2ltcGxlUmVsYXRlZChTdHJpbmcgbmFtZSkgewogICAgICAgICBzZXROYW1lKG5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTaW1wbGVSZWxhdGVkKCkgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKICAgICAgICAgcmV0dXJuIG5hbWU7CiAgICAgfQogICAgIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU2ltcGxlRW50aXR5IGdldEVudGl0eSgpIHsKICAgICAgICAgcmV0dXJuIGVudGl0eTsKICAgICB9CiAgICAgcHVibGljIHZvaWQgc2V0RW50aXR5KFNpbXBsZUVudGl0eSBlbnRpdHkpIHsKICAgICAgICAgdGhpcy5lbnRpdHkgPSBlbnRpdHk7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbWFuaWZlc3Rvbmx5L2VqYi9TaW5nbGV0b25CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbWFuaWZlc3Rvbmx5L2VqYi9TaW5nbGV0b25CZWFuLmphdmEKaW5kZXggY2EyNzg0Zi4uYzkyMzYxOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21hbmlmZXN0b25seS9lamIvU2luZ2xldG9uQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tYW5pZmVzdG9ubHkvZWpiL1NpbmdsZXRvbkJlYW4uamF2YQpAQCAtMTcsMTQgKzE3LDE0IEBACiBwYWNrYWdlIG9yZy5nbGFzc2Zpc2gudGVzdHMuZWpiLnNhbXBsZTsKIAogaW1wb3J0IGpha2FydGEuZWpiLlNpbmdsZXRvbjsKLWltcG9ydCBqYWthcnRhLmVqYi5TdGFydHVwOyAKK2ltcG9ydCBqYWthcnRhLmVqYi5TdGFydHVwOwogaW1wb3J0IGpha2FydGEuYW5ub3RhdGlvbi5QcmVEZXN0cm95OwogaW1wb3J0IGpha2FydGEuYW5ub3RhdGlvbi5Qb3N0Q29uc3RydWN0OwogCiAvKioKICAqIEBhdXRob3IgTWFyaW5hIFZhdGtpbmEKICAqLwotQFNpbmdsZXRvbiAKK0BTaW5nbGV0b24KIEBTdGFydHVwCiBwdWJsaWMgY2xhc3MgU2luZ2xldG9uQmVhbiB7CiAKQEAgLTMyLDcgKzMyLDcgQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJkcyA9ICIgKyBkcyk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJkcyA9ICIgKyBkcyk7CiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyBmb28oKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbWRiL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbWRiL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMDA0OTBkOS4uYzBkMTBkOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21kYi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tZGIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzEtZW1iZWRkZWQtbWRiIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAKLTxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz5cdTAwMjAKKzxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic2UuY2xpZW50IiB2YWx1ZT0iY29tLmFjbWUuQ2xpZW50Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbWRiL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tZGIvYnVpbGQueG1sCmluZGV4IDlkODA5YWUuLmIzOTYzNWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tZGIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tZGIvYnVpbGQueG1sCkBAIC0zOCw3ICszOCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC01MSwxNCArNTEsMTQgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPCEtLSBwYWNrYWdlIG91cnNlbHZlcyB0byBpbmNsdWRlIHBlcnNpc3RlbmNlLnhtbCAtLT4KICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+Ci0gICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphciIgCi0gICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIAorICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXIiCisgICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICAgdXBkYXRlPSJ0cnVlIgogICAgICAgICAgICAgIGluY2x1ZGVzID0iKiovUyouY2xhc3MiPgogICAgICAgICA8L2phcj4KICAgICAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L29yZyIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iLi4uU3RhcnRpbmcgREFTIHRvIGNyZWF0ZSBKTVMgcmVzb3VyY2VzLi4uLiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InN0YXJ0RG9tYWluIi8+CkBAIC05MSw4ICs5MSw4IEBACiAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzdG9wRG9tYWluIi8+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkRvbWFpbiBoYXMgYmVlZCBTVE9QUEVEIHRvIHJ1biB0aGUgdGVzdCIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0idW5zZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSIuLi5TdGFydGluZyBEQVMgdG8gZGVsZXRlIEpNUyByZXNvdXJjZXMuLi4uIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic3RhcnREb21haW4iLz4KQEAgLTEyMCwxNSArMTIwLDE1IEBACiAgICAgICAgIDwhLS0gU2hvdWxkIGRvbWFpbiBiZSBzdG9wcGVkPyAtLT4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzdG9wRG9tYWluIi8+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkRvbWFpbiBoYXMgYmVlZCBTVE9QUEVEIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5fc2UiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuX3NlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgPGVjaG8gbWVzc2FnZT0iUnVubmluZyB3aXRoICR7ZW1iZWRkZWQuY2xhc3NwYXRofSBpbiBjbGFzc3BhdGgiLz4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgIDxqYXZhICBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphcjoke2VtYmVkZGVkLmNsYXNzcGF0aH06JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iJHtzZS5jbGllbnR9Ij4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tb2R1bGV3aXRoYXBwbmFtZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhhcHBuYW1lL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZDgxYzQxYS4uMjQ2NGEzYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhhcHBuYW1lL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhhcHBuYW1lL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMxLWVtYmVkZGVkLW1vZHVsZXdpdGhhcHBuYW1lIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAKLTxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz5cdTAwMjAKKzxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic2UuY2xpZW50IiB2YWx1ZT0iY29tLmFjbWUuQ2xpZW50Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aGFwcG5hbWUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhhcHBuYW1lL2J1aWxkLnhtbAppbmRleCAzZDU1Yjk3Li5lNDQ4ZTY2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aGFwcG5hbWUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tb2R1bGV3aXRoYXBwbmFtZS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtdXRpbCIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KQEAgLTUwLDMxICs1MCwzMSBAQAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8IS0tIHBhY2thZ2Ugb3Vyc2VsdmVzIHRvIGluY2x1ZGUgcGVyc2lzdGVuY2UueG1sIC0tPgogICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KLSAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIuamFyIiAKLSAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgCisgICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphciIKKyAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgICB1cGRhdGU9InRydWUiCiAgICAgICAgICAgICAgaW5jbHVkZXMgPSIqKi8qRWpiLmNsYXNzLCoqLypCZWFuLmNsYXNzIj4KICAgICAgICAgICAgICA8bWV0YWluZiBkaXI9ImRlc2NyaXB0b3IiPgogICAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iZWpiLWphci54bWwiLz4KLSAgICAgICAgICAgICA8L21ldGFpbmY+IAorICAgICAgICAgICAgIDwvbWV0YWluZj4KICAgICAgICAgPC9qYXI+Ci0gICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tcHUuamFyIiAKLSAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgCisgICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tcHUuamFyIgorICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgogICAgICAgICAgICAgIHVwZGF0ZT0idHJ1ZSIKICAgICAgICAgICAgICBpbmNsdWRlcyA9IioqL1NpbXBsZUVudGl0eS5jbGFzcywqKi9TaW1wbGVSZWxhdGVkLmNsYXNzIj4KICAgICAgICAgICAgICA8bWV0YWluZiBkaXI9ImRlc2NyaXB0b3IiPgogICAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icGVyc2lzdGVuY2UueG1sIi8+Ci0gICAgICAgICAgICAgPC9tZXRhaW5mPiAKKyAgICAgICAgICAgICA8L21ldGFpbmY+CiAgICAgICAgIDwvamFyPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuX3NlIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bl9zZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgIDxlY2hvIG1lc3NhZ2U9IlJ1bm5pbmcgd2l0aCAke2VtYmVkZGVkLmNsYXNzcGF0aH0gaW4gY2xhc3NwYXRoIi8+Ci0gICAgICAgPGphdmEgIGZvcms9Im9uIiAKKyAgICAgICA8amF2YSAgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXI6JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tcHUuamFyOiR7ZW1iZWRkZWQuY2xhc3NwYXRofToke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSIke3NlLmNsaWVudH0iPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhhcHBuYW1lL2VqYi9TaW1wbGVFbnRpdHkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tb2R1bGV3aXRoYXBwbmFtZS9lamIvU2ltcGxlRW50aXR5LmphdmEKaW5kZXggOTU5YjU1Ni4uMDY4OWJlZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhhcHBuYW1lL2VqYi9TaW1wbGVFbnRpdHkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aGFwcG5hbWUvZWpiL1NpbXBsZUVudGl0eS5qYXZhCkBAIC0zMSwzNSArMzEsMzUgQEAKICAgICBATmFtZWRRdWVyeShuYW1lID0gIlNpbXBsZUVudGl0eS5maW5kQWxsIiwgcXVlcnkgPSAic2VsZWN0IGUgZnJvbSBTaW1wbGVFbnRpdHkgZSIpCiB9KQogcHVibGljIGNsYXNzIFNpbXBsZUVudGl0eSB7Ci0gICAgCi0gICAgQElkIAorCisgICAgQElkCiAgICAgQEdlbmVyYXRlZFZhbHVlCiAgICAgcHJpdmF0ZSBpbnQgaWQ7CiAgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKIAogICAgIEBPbmVUb09uZShjYXNjYWRlPVBFUlNJU1QsIGZldGNoPUxBWlkpCiAgICAgcHJpdmF0ZSBTaW1wbGVSZWxhdGVkIHJlbGF0ZWQ7Ci0gICAgCisKICAgICBwdWJsaWMgU2ltcGxlRW50aXR5KFN0cmluZyBuYW1lKSB7CiAgICAgICAgIHNldE5hbWUobmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFNpbXBsZUVudGl0eSgpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CiAgICAgICAgIHJldHVybiBuYW1lOwogICAgIH0KICAgICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFNpbXBsZVJlbGF0ZWQgZ2V0UmVsYXRlZCgpIHsKICAgICAgICAgcmV0dXJuIHJlbGF0ZWQ7CiAgICAgfQogICAgIHB1YmxpYyB2b2lkIHNldFJlbGF0ZWQoU2ltcGxlUmVsYXRlZCByZWxhdGVkKSB7CiAgICAgICAgIHRoaXMucmVsYXRlZCA9IHJlbGF0ZWQ7CiAgICAgfQotICAgIAotICAgIAorCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tb2R1bGV3aXRoYXBwbmFtZS9lamIvU2ltcGxlUmVsYXRlZC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhhcHBuYW1lL2VqYi9TaW1wbGVSZWxhdGVkLmphdmEKaW5kZXggOWFiZjk4Zi4uNjFjNDQ5NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhhcHBuYW1lL2VqYi9TaW1wbGVSZWxhdGVkLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhhcHBuYW1lL2VqYi9TaW1wbGVSZWxhdGVkLmphdmEKQEAgLTI3LDM0ICsyNywzNCBAQAogCiBARW50aXR5CiBwdWJsaWMgY2xhc3MgU2ltcGxlUmVsYXRlZCB7Ci0gICAgCi0gICAgQElkIAorCisgICAgQElkCiAgICAgQEdlbmVyYXRlZFZhbHVlCiAgICAgcHJpdmF0ZSBpbnQgaWQ7CiAgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKIAogICAgIEBPbmVUb09uZShmZXRjaD1MQVpZKQogICAgIHByaXZhdGUgU2ltcGxlRW50aXR5IGVudGl0eTsKLSAgICAKKwogICAgIHB1YmxpYyBTaW1wbGVSZWxhdGVkKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIHNldE5hbWUobmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFNpbXBsZVJlbGF0ZWQoKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewogICAgICAgICByZXR1cm4gbmFtZTsKICAgICB9CiAgICAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkgewogICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTaW1wbGVFbnRpdHkgZ2V0RW50aXR5KCkgewogICAgICAgICByZXR1cm4gZW50aXR5OwogICAgIH0KICAgICBwdWJsaWMgdm9pZCBzZXRFbnRpdHkoU2ltcGxlRW50aXR5IGVudGl0eSkgewogICAgICAgICB0aGlzLmVudGl0eSA9IGVudGl0eTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tb2R1bGV3aXRoYXBwbmFtZS9lamIvU2luZ2xldG9uQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhhcHBuYW1lL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKaW5kZXggY2EyNzg0Zi4uYzkyMzYxOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhhcHBuYW1lL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhhcHBuYW1lL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKQEAgLTE3LDE0ICsxNywxNCBAQAogcGFja2FnZSBvcmcuZ2xhc3NmaXNoLnRlc3RzLmVqYi5zYW1wbGU7CiAKIGltcG9ydCBqYWthcnRhLmVqYi5TaW5nbGV0b247Ci1pbXBvcnQgamFrYXJ0YS5lamIuU3RhcnR1cDsgCitpbXBvcnQgamFrYXJ0YS5lamIuU3RhcnR1cDsKIGltcG9ydCBqYWthcnRhLmFubm90YXRpb24uUHJlRGVzdHJveTsKIGltcG9ydCBqYWthcnRhLmFubm90YXRpb24uUG9zdENvbnN0cnVjdDsKIAogLyoqCiAgKiBAYXV0aG9yIE1hcmluYSBWYXRraW5hCiAgKi8KLUBTaW5nbGV0b24gCitAU2luZ2xldG9uCiBAU3RhcnR1cAogcHVibGljIGNsYXNzIFNpbmdsZXRvbkJlYW4gewogCkBAIC0zMiw3ICszMiw3IEBACiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiZHMgPSAiICsgZHMpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZHMgPSAiICsgZHMpOwogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgZm9vKCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhpbmhlcml0YW5jZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhpbmhlcml0YW5jZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGVkOWI0OWYuLjRhMzQ4OGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tb2R1bGV3aXRoaW5oZXJpdGFuY2UvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aGluaGVyaXRhbmNlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMxLWVtYmVkZGVkLW1vZHVsZXdpdGhpbmhlcml0YW5jZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gCi08cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+XHUwMDIwCis8cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InNlLmNsaWVudCIgdmFsdWU9ImNvbS5hY21lLkNsaWVudCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhpbmhlcml0YW5jZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aGluaGVyaXRhbmNlL2J1aWxkLnhtbAppbmRleCA0YWZlNGM3Li5kMGFhNWExIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aGluaGVyaXRhbmNlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aGluaGVyaXRhbmNlL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDksMzYgKzQ5LDM2IEBACiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDwhLS0gcGFja2FnZSBvdXJzZWx2ZXMgdG8gaW5jbHVkZSBwZXJzaXN0ZW5jZS54bWwgLS0+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgotICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXIiIAotICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiAKKyAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIuamFyIgorICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgogICAgICAgICAgICAgIHVwZGF0ZT0idHJ1ZSIKICAgICAgICAgICAgICBpbmNsdWRlcyA9IioqLypFamIuY2xhc3MsKiovKkJlYW4uY2xhc3MiPgogICAgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iZGVzY3JpcHRvciI+CiAgICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJlamItamFyLnhtbCIvPgotICAgICAgICAgICAgIDwvbWV0YWluZj4gCisgICAgICAgICAgICAgPC9tZXRhaW5mPgogICAgICAgICA8L2phcj4KLSAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1wdS5qYXIiIAotICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiAKKyAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1wdS5qYXIiCisgICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICAgdXBkYXRlPSJ0cnVlIgogICAgICAgICAgICAgIGluY2x1ZGVzID0iKiovU2ltcGxlRW50aXR5LmNsYXNzLCoqL1NpbXBsZVJlbGF0ZWQuY2xhc3MiPgogICAgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iZGVzY3JpcHRvciI+CiAgICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJwZXJzaXN0ZW5jZS54bWwiLz4KLSAgICAgICAgICAgICA8L21ldGFpbmY+IAorICAgICAgICAgICAgIDwvbWV0YWluZj4KICAgICAgICAgPC9qYXI+CiAgICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tYmFzZS5qYXIiCiAgICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICAgdXBkYXRlPSJ0cnVlIgogICAgICAgICAgICAgIGluY2x1ZGVzID0iKiovU2ltcGxlQmFzZS5jbGFzcywqKi9TaW1wbGVJbnRlcmZhY2UuY2xhc3MiPgogICAgICAgICA8L2phcj4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bl9zZSIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW5fc2UiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICA8ZWNobyBtZXNzYWdlPSJSdW5uaW5nIHdpdGggJHtlbWJlZGRlZC5jbGFzc3BhdGh9IGluIGNsYXNzcGF0aCIvPgotICAgICAgIDxqYXZhICBmb3JrPSJvbiIgCisgICAgICAgPGphdmEgIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXB1Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1iYXNlLmphcjoke2VtYmVkZGVkLmNsYXNzcGF0aH06JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iJHtzZS5jbGllbnR9Ij4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tb2R1bGV3aXRoaW5oZXJpdGFuY2UvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhpbmhlcml0YW5jZS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMzA1MzhlMy4uOWQ2M2MyMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhpbmhlcml0YW5jZS9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhpbmhlcml0YW5jZS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTc2LDcgKzc2LDcgQEAKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiRUpCIGVtYmVkZGVkIGNyZWF0ZSBjb250YWluZXIiLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRlZCBhbm90aGVyIGNvbnRhaW5lciB3aXRob3V0IGNsb3NpbmcgdGhlIGN1cnJlbnQuLi4iKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSBjYXRjaCAoRUpCRXhjZXB0aW9uIGUpIHsgCisgICAgICAgIH0gY2F0Y2ggKEVKQkV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhdWdodCBleHBlY3RlZDogIiArIGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJFSkIgZW1iZWRkZWQgY3JlYXRlIGNvbnRhaW5lciIsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tb2R1bGV3aXRoaW5oZXJpdGFuY2UvZWpiL1NpbXBsZUVudGl0eS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhpbmhlcml0YW5jZS9lamIvU2ltcGxlRW50aXR5LmphdmEKaW5kZXggOTU5YjU1Ni4uMDY4OWJlZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhpbmhlcml0YW5jZS9lamIvU2ltcGxlRW50aXR5LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhpbmhlcml0YW5jZS9lamIvU2ltcGxlRW50aXR5LmphdmEKQEAgLTMxLDM1ICszMSwzNSBAQAogICAgIEBOYW1lZFF1ZXJ5KG5hbWUgPSAiU2ltcGxlRW50aXR5LmZpbmRBbGwiLCBxdWVyeSA9ICJzZWxlY3QgZSBmcm9tIFNpbXBsZUVudGl0eSBlIikKIH0pCiBwdWJsaWMgY2xhc3MgU2ltcGxlRW50aXR5IHsKLSAgICAKLSAgICBASWQgCisKKyAgICBASWQKICAgICBAR2VuZXJhdGVkVmFsdWUKICAgICBwcml2YXRlIGludCBpZDsKICAgICBwcml2YXRlIFN0cmluZyBuYW1lOwogCiAgICAgQE9uZVRvT25lKGNhc2NhZGU9UEVSU0lTVCwgZmV0Y2g9TEFaWSkKICAgICBwcml2YXRlIFNpbXBsZVJlbGF0ZWQgcmVsYXRlZDsKLSAgICAKKwogICAgIHB1YmxpYyBTaW1wbGVFbnRpdHkoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgc2V0TmFtZShuYW1lKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU2ltcGxlRW50aXR5KCkgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKICAgICAgICAgcmV0dXJuIG5hbWU7CiAgICAgfQogICAgIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU2ltcGxlUmVsYXRlZCBnZXRSZWxhdGVkKCkgewogICAgICAgICByZXR1cm4gcmVsYXRlZDsKICAgICB9CiAgICAgcHVibGljIHZvaWQgc2V0UmVsYXRlZChTaW1wbGVSZWxhdGVkIHJlbGF0ZWQpIHsKICAgICAgICAgdGhpcy5yZWxhdGVkID0gcmVsYXRlZDsKICAgICB9Ci0gICAgCi0gICAgCisKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhpbmhlcml0YW5jZS9lamIvU2ltcGxlUmVsYXRlZC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhpbmhlcml0YW5jZS9lamIvU2ltcGxlUmVsYXRlZC5qYXZhCmluZGV4IDlhYmY5OGYuLjYxYzQ0OTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tb2R1bGV3aXRoaW5oZXJpdGFuY2UvZWpiL1NpbXBsZVJlbGF0ZWQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aGluaGVyaXRhbmNlL2VqYi9TaW1wbGVSZWxhdGVkLmphdmEKQEAgLTI3LDM0ICsyNywzNCBAQAogCiBARW50aXR5CiBwdWJsaWMgY2xhc3MgU2ltcGxlUmVsYXRlZCB7Ci0gICAgCi0gICAgQElkIAorCisgICAgQElkCiAgICAgQEdlbmVyYXRlZFZhbHVlCiAgICAgcHJpdmF0ZSBpbnQgaWQ7CiAgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKIAogICAgIEBPbmVUb09uZShmZXRjaD1MQVpZKQogICAgIHByaXZhdGUgU2ltcGxlRW50aXR5IGVudGl0eTsKLSAgICAKKwogICAgIHB1YmxpYyBTaW1wbGVSZWxhdGVkKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIHNldE5hbWUobmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFNpbXBsZVJlbGF0ZWQoKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewogICAgICAgICByZXR1cm4gbmFtZTsKICAgICB9CiAgICAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkgewogICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTaW1wbGVFbnRpdHkgZ2V0RW50aXR5KCkgewogICAgICAgICByZXR1cm4gZW50aXR5OwogICAgIH0KICAgICBwdWJsaWMgdm9pZCBzZXRFbnRpdHkoU2ltcGxlRW50aXR5IGVudGl0eSkgewogICAgICAgICB0aGlzLmVudGl0eSA9IGVudGl0eTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tb2R1bGV3aXRoaW5oZXJpdGFuY2UvZWpiL1NpbmdsZXRvbkJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tb2R1bGV3aXRoaW5oZXJpdGFuY2UvZWpiL1NpbmdsZXRvbkJlYW4uamF2YQppbmRleCBjYTI3ODRmLi5jOTIzNjE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aGluaGVyaXRhbmNlL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhpbmhlcml0YW5jZS9lamIvU2luZ2xldG9uQmVhbi5qYXZhCkBAIC0xNywxNCArMTcsMTQgQEAKIHBhY2thZ2Ugb3JnLmdsYXNzZmlzaC50ZXN0cy5lamIuc2FtcGxlOwogCiBpbXBvcnQgamFrYXJ0YS5lamIuU2luZ2xldG9uOwotaW1wb3J0IGpha2FydGEuZWpiLlN0YXJ0dXA7IAoraW1wb3J0IGpha2FydGEuZWpiLlN0YXJ0dXA7CiBpbXBvcnQgamFrYXJ0YS5hbm5vdGF0aW9uLlByZURlc3Ryb3k7CiBpbXBvcnQgamFrYXJ0YS5hbm5vdGF0aW9uLlBvc3RDb25zdHJ1Y3Q7CiAKIC8qKgogICogQGF1dGhvciBNYXJpbmEgVmF0a2luYQogICovCi1AU2luZ2xldG9uIAorQFNpbmdsZXRvbgogQFN0YXJ0dXAKIHB1YmxpYyBjbGFzcyBTaW5nbGV0b25CZWFuIHsKIApAQCAtMzIsNyArMzIsNyBAQAogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImRzID0gIiArIGRzKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImRzID0gIiArIGRzKTsKICAgICB9CiAKICAgICBwdWJsaWMgU3RyaW5nIGZvbygpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tb2R1bGV3aXRobGlicy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhsaWJzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYjdiYWI4ZC4uNDI2YTU4NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhsaWJzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhsaWJzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMxLWVtYmVkZGVkLW1vZHVsZXdpdGhsaWJzIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAKLTxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz5cdTAwMjAKKzxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic2UuY2xpZW50IiB2YWx1ZT0iY29tLmFjbWUuQ2xpZW50Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aGxpYnMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhsaWJzL2J1aWxkLnhtbAppbmRleCA4YzM2NjQ3Li5jMTI2NjRlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aGxpYnMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tb2R1bGV3aXRobGlicy9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ5LDM2ICs0OSwzNiBAQAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8IS0tIHBhY2thZ2Ugb3Vyc2VsdmVzIHRvIGluY2x1ZGUgcGVyc2lzdGVuY2UueG1sIC0tPgogICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KLSAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIuamFyIiAKLSAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgCisgICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphciIKKyAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgICB1cGRhdGU9InRydWUiCiAgICAgICAgICAgICAgaW5jbHVkZXMgPSIqKi8qRWpiLmNsYXNzLCoqLypCZWFuLmNsYXNzIj4KICAgICAgICAgICAgICA8bWV0YWluZiBkaXI9ImRlc2NyaXB0b3IiPgogICAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iZWpiLWphci54bWwiLz4KLSAgICAgICAgICAgICA8L21ldGFpbmY+IAorICAgICAgICAgICAgIDwvbWV0YWluZj4KICAgICAgICAgPC9qYXI+Ci0gICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tcHUuamFyIiAKLSAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgCisgICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tcHUuamFyIgorICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgogICAgICAgICAgICAgIHVwZGF0ZT0idHJ1ZSIKICAgICAgICAgICAgICBpbmNsdWRlcyA9IioqL1NpbXBsZUVudGl0eS5jbGFzcywqKi9TaW1wbGVSZWxhdGVkLmNsYXNzIj4KICAgICAgICAgICAgICA8bWV0YWluZiBkaXI9ImRlc2NyaXB0b3IiPgogICAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icGVyc2lzdGVuY2UueG1sIi8+Ci0gICAgICAgICAgICAgPC9tZXRhaW5mPiAKKyAgICAgICAgICAgICA8L21ldGFpbmY+CiAgICAgICAgIDwvamFyPgogICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWJhc2UuamFyIgogICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgogICAgICAgICAgICAgIHVwZGF0ZT0idHJ1ZSIKICAgICAgICAgICAgICBpbmNsdWRlcyA9IioqL1NpbXBsZUJhc2UuY2xhc3MsKiovU2ltcGxlSW50ZXJmYWNlLmNsYXNzIj4KICAgICAgICAgPC9qYXI+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5fc2UiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuX3NlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgPGVjaG8gbWVzc2FnZT0iUnVubmluZyB3aXRoICR7ZW1iZWRkZWQuY2xhc3NwYXRofSBpbiBjbGFzc3BhdGgiLz4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgIDxqYXZhICBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1wdS5qYXI6JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tYmFzZS5qYXI6JHtlbWJlZGRlZC5jbGFzc3BhdGh9OiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9IiR7c2UuY2xpZW50fSI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aGxpYnMvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhsaWJzL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA3MzVmZWY2Li42ZWFlYTdlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aGxpYnMvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tb2R1bGV3aXRobGlicy9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTc2LDcgKzc2LDcgQEAKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiRUpCIGVtYmVkZGVkIGNyZWF0ZSBjb250YWluZXIiLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRlZCBhbm90aGVyIGNvbnRhaW5lciB3aXRob3V0IGNsb3NpbmcgdGhlIGN1cnJlbnQuLi4iKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSBjYXRjaCAoRUpCRXhjZXB0aW9uIGUpIHsgCisgICAgICAgIH0gY2F0Y2ggKEVKQkV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhdWdodCBleHBlY3RlZDogIiArIGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJFSkIgZW1iZWRkZWQgY3JlYXRlIGNvbnRhaW5lciIsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tb2R1bGV3aXRobGlicy9lamIvU2ltcGxlRW50aXR5LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aGxpYnMvZWpiL1NpbXBsZUVudGl0eS5qYXZhCmluZGV4IDk1OWI1NTYuLjA2ODliZWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tb2R1bGV3aXRobGlicy9lamIvU2ltcGxlRW50aXR5LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhsaWJzL2VqYi9TaW1wbGVFbnRpdHkuamF2YQpAQCAtMzEsMzUgKzMxLDM1IEBACiAgICAgQE5hbWVkUXVlcnkobmFtZSA9ICJTaW1wbGVFbnRpdHkuZmluZEFsbCIsIHF1ZXJ5ID0gInNlbGVjdCBlIGZyb20gU2ltcGxlRW50aXR5IGUiKQogfSkKIHB1YmxpYyBjbGFzcyBTaW1wbGVFbnRpdHkgewotICAgIAotICAgIEBJZCAKKworICAgIEBJZAogICAgIEBHZW5lcmF0ZWRWYWx1ZQogICAgIHByaXZhdGUgaW50IGlkOwogICAgIHByaXZhdGUgU3RyaW5nIG5hbWU7CiAKICAgICBAT25lVG9PbmUoY2FzY2FkZT1QRVJTSVNULCBmZXRjaD1MQVpZKQogICAgIHByaXZhdGUgU2ltcGxlUmVsYXRlZCByZWxhdGVkOwotICAgIAorCiAgICAgcHVibGljIFNpbXBsZUVudGl0eShTdHJpbmcgbmFtZSkgewogICAgICAgICBzZXROYW1lKG5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTaW1wbGVFbnRpdHkoKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewogICAgICAgICByZXR1cm4gbmFtZTsKICAgICB9CiAgICAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkgewogICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTaW1wbGVSZWxhdGVkIGdldFJlbGF0ZWQoKSB7CiAgICAgICAgIHJldHVybiByZWxhdGVkOwogICAgIH0KICAgICBwdWJsaWMgdm9pZCBzZXRSZWxhdGVkKFNpbXBsZVJlbGF0ZWQgcmVsYXRlZCkgewogICAgICAgICB0aGlzLnJlbGF0ZWQgPSByZWxhdGVkOwogICAgIH0KLSAgICAKLSAgICAKKworCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aGxpYnMvZWpiL1NpbXBsZVJlbGF0ZWQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tb2R1bGV3aXRobGlicy9lamIvU2ltcGxlUmVsYXRlZC5qYXZhCmluZGV4IDlhYmY5OGYuLjYxYzQ0OTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tb2R1bGV3aXRobGlicy9lamIvU2ltcGxlUmVsYXRlZC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tb2R1bGV3aXRobGlicy9lamIvU2ltcGxlUmVsYXRlZC5qYXZhCkBAIC0yNywzNCArMjcsMzQgQEAKIAogQEVudGl0eQogcHVibGljIGNsYXNzIFNpbXBsZVJlbGF0ZWQgewotICAgIAotICAgIEBJZCAKKworICAgIEBJZAogICAgIEBHZW5lcmF0ZWRWYWx1ZQogICAgIHByaXZhdGUgaW50IGlkOwogICAgIHByaXZhdGUgU3RyaW5nIG5hbWU7CiAKICAgICBAT25lVG9PbmUoZmV0Y2g9TEFaWSkKICAgICBwcml2YXRlIFNpbXBsZUVudGl0eSBlbnRpdHk7Ci0gICAgCisKICAgICBwdWJsaWMgU2ltcGxlUmVsYXRlZChTdHJpbmcgbmFtZSkgewogICAgICAgICBzZXROYW1lKG5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTaW1wbGVSZWxhdGVkKCkgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKICAgICAgICAgcmV0dXJuIG5hbWU7CiAgICAgfQogICAgIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU2ltcGxlRW50aXR5IGdldEVudGl0eSgpIHsKICAgICAgICAgcmV0dXJuIGVudGl0eTsKICAgICB9CiAgICAgcHVibGljIHZvaWQgc2V0RW50aXR5KFNpbXBsZUVudGl0eSBlbnRpdHkpIHsKICAgICAgICAgdGhpcy5lbnRpdHkgPSBlbnRpdHk7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aGxpYnMvZWpiL1NpbmdsZXRvbkJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tb2R1bGV3aXRobGlicy9lamIvU2luZ2xldG9uQmVhbi5qYXZhCmluZGV4IGNhMjc4NGYuLmM5MjM2MTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tb2R1bGV3aXRobGlicy9lamIvU2luZ2xldG9uQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tb2R1bGV3aXRobGlicy9lamIvU2luZ2xldG9uQmVhbi5qYXZhCkBAIC0xNywxNCArMTcsMTQgQEAKIHBhY2thZ2Ugb3JnLmdsYXNzZmlzaC50ZXN0cy5lamIuc2FtcGxlOwogCiBpbXBvcnQgamFrYXJ0YS5lamIuU2luZ2xldG9uOwotaW1wb3J0IGpha2FydGEuZWpiLlN0YXJ0dXA7IAoraW1wb3J0IGpha2FydGEuZWpiLlN0YXJ0dXA7CiBpbXBvcnQgamFrYXJ0YS5hbm5vdGF0aW9uLlByZURlc3Ryb3k7CiBpbXBvcnQgamFrYXJ0YS5hbm5vdGF0aW9uLlBvc3RDb25zdHJ1Y3Q7CiAKIC8qKgogICogQGF1dGhvciBNYXJpbmEgVmF0a2luYQogICovCi1AU2luZ2xldG9uIAorQFNpbmdsZXRvbgogQFN0YXJ0dXAKIHB1YmxpYyBjbGFzcyBTaW5nbGV0b25CZWFuIHsKIApAQCAtMzIsNyArMzIsNyBAQAogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImRzID0gIiArIGRzKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImRzID0gIiArIGRzKTsKICAgICB9CiAKICAgICBwdWJsaWMgU3RyaW5nIGZvbygpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tb2R1bGV3aXRobWFuaWZlc3QvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tb2R1bGV3aXRobWFuaWZlc3QvYnVpbGQucHJvcGVydGllcwppbmRleCBjYmMxZTQ2Li4zMWE4MmQwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aG1hbmlmZXN0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhtYW5pZmVzdC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lamIzMS1lbWJlZGRlZC1tb2R1bGV3aXRobWFuaWZlc3QiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+IAotPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPlx1MDAyMAorPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzZS5jbGllbnQiIHZhbHVlPSJjb20uYWNtZS5DbGllbnQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tb2R1bGV3aXRobWFuaWZlc3QvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhtYW5pZmVzdC9idWlsZC54bWwKaW5kZXggMmE5MjY4OC4uZTNiNmE3NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhtYW5pZmVzdC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhtYW5pZmVzdC9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ5LDM0ICs0OSwzNCBAQAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8IS0tIHBhY2thZ2Ugb3Vyc2VsdmVzIHRvIGluY2x1ZGUgcGVyc2lzdGVuY2UueG1sIC0tPgogICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KLSAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1wdS5qYXIiIAotICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiAKKyAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1wdS5qYXIiCisgICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICAgdXBkYXRlPSJ0cnVlIgogICAgICAgICAgICAgIGluY2x1ZGVzID0iKiovU2ltcGxlRW50aXR5LmNsYXNzLCoqL1NpbXBsZVJlbGF0ZWQuY2xhc3MiPgogICAgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iZGVzY3JpcHRvciI+CiAgICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJwZXJzaXN0ZW5jZS54bWwiLz4KLSAgICAgICAgICAgICA8L21ldGFpbmY+IAorICAgICAgICAgICAgIDwvbWV0YWluZj4KICAgICAgICAgPC9qYXI+Ci0gICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphciIgCi0gICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIAorICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXIiCisgICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICAgdXBkYXRlPSJ0cnVlIgogICAgICAgICAgICAgIGluY2x1ZGVzID0iKiovKkVqYi5jbGFzcywqKi8qQmVhbi5jbGFzcyI+CiAgICAgICAgICAgICAgPG1ldGFpbmYgZGlyPSJkZXNjcmlwdG9yIj4KICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9ImVqYi1qYXIueG1sIi8+Ci0gICAgICAgICAgICAgPC9tZXRhaW5mPiAKKyAgICAgICAgICAgICA8L21ldGFpbmY+CiAgICAgICAgICAgICAgPG1hbmlmZXN0PgogICAgICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9IkNsYXNzLVBhdGgiIHZhbHVlPSJmaWxlOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXB1LmphciIvPgogICAgICAgICAgICAgIDwvbWFuaWZlc3Q+CiAgICAgICAgIDwvamFyPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuX3NlIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bl9zZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgIDxlY2hvIG1lc3NhZ2U9IlJ1bm5pbmcgd2l0aCAke2VtYmVkZGVkLmNsYXNzcGF0aH0gaW4gY2xhc3NwYXRoIi8+Ci0gICAgICAgPGphdmEgIGZvcms9Im9uIiAKKyAgICAgICA8amF2YSAgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXI6JHtlbWJlZGRlZC5jbGFzc3BhdGh9OiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9IiR7c2UuY2xpZW50fSI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aG1hbmlmZXN0L2VqYi9TaW1wbGVFbnRpdHkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tb2R1bGV3aXRobWFuaWZlc3QvZWpiL1NpbXBsZUVudGl0eS5qYXZhCmluZGV4IDk1OWI1NTYuLjA2ODliZWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tb2R1bGV3aXRobWFuaWZlc3QvZWpiL1NpbXBsZUVudGl0eS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tb2R1bGV3aXRobWFuaWZlc3QvZWpiL1NpbXBsZUVudGl0eS5qYXZhCkBAIC0zMSwzNSArMzEsMzUgQEAKICAgICBATmFtZWRRdWVyeShuYW1lID0gIlNpbXBsZUVudGl0eS5maW5kQWxsIiwgcXVlcnkgPSAic2VsZWN0IGUgZnJvbSBTaW1wbGVFbnRpdHkgZSIpCiB9KQogcHVibGljIGNsYXNzIFNpbXBsZUVudGl0eSB7Ci0gICAgCi0gICAgQElkIAorCisgICAgQElkCiAgICAgQEdlbmVyYXRlZFZhbHVlCiAgICAgcHJpdmF0ZSBpbnQgaWQ7CiAgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKIAogICAgIEBPbmVUb09uZShjYXNjYWRlPVBFUlNJU1QsIGZldGNoPUxBWlkpCiAgICAgcHJpdmF0ZSBTaW1wbGVSZWxhdGVkIHJlbGF0ZWQ7Ci0gICAgCisKICAgICBwdWJsaWMgU2ltcGxlRW50aXR5KFN0cmluZyBuYW1lKSB7CiAgICAgICAgIHNldE5hbWUobmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFNpbXBsZUVudGl0eSgpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CiAgICAgICAgIHJldHVybiBuYW1lOwogICAgIH0KICAgICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFNpbXBsZVJlbGF0ZWQgZ2V0UmVsYXRlZCgpIHsKICAgICAgICAgcmV0dXJuIHJlbGF0ZWQ7CiAgICAgfQogICAgIHB1YmxpYyB2b2lkIHNldFJlbGF0ZWQoU2ltcGxlUmVsYXRlZCByZWxhdGVkKSB7CiAgICAgICAgIHRoaXMucmVsYXRlZCA9IHJlbGF0ZWQ7CiAgICAgfQotICAgIAotICAgIAorCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tb2R1bGV3aXRobWFuaWZlc3QvZWpiL1NpbXBsZVJlbGF0ZWQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tb2R1bGV3aXRobWFuaWZlc3QvZWpiL1NpbXBsZVJlbGF0ZWQuamF2YQppbmRleCA5YWJmOThmLi42MWM0NDk1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aG1hbmlmZXN0L2VqYi9TaW1wbGVSZWxhdGVkLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhtYW5pZmVzdC9lamIvU2ltcGxlUmVsYXRlZC5qYXZhCkBAIC0yNywzNCArMjcsMzQgQEAKIAogQEVudGl0eQogcHVibGljIGNsYXNzIFNpbXBsZVJlbGF0ZWQgewotICAgIAotICAgIEBJZCAKKworICAgIEBJZAogICAgIEBHZW5lcmF0ZWRWYWx1ZQogICAgIHByaXZhdGUgaW50IGlkOwogICAgIHByaXZhdGUgU3RyaW5nIG5hbWU7CiAKICAgICBAT25lVG9PbmUoZmV0Y2g9TEFaWSkKICAgICBwcml2YXRlIFNpbXBsZUVudGl0eSBlbnRpdHk7Ci0gICAgCisKICAgICBwdWJsaWMgU2ltcGxlUmVsYXRlZChTdHJpbmcgbmFtZSkgewogICAgICAgICBzZXROYW1lKG5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTaW1wbGVSZWxhdGVkKCkgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKICAgICAgICAgcmV0dXJuIG5hbWU7CiAgICAgfQogICAgIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU2ltcGxlRW50aXR5IGdldEVudGl0eSgpIHsKICAgICAgICAgcmV0dXJuIGVudGl0eTsKICAgICB9CiAgICAgcHVibGljIHZvaWQgc2V0RW50aXR5KFNpbXBsZUVudGl0eSBlbnRpdHkpIHsKICAgICAgICAgdGhpcy5lbnRpdHkgPSBlbnRpdHk7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aG1hbmlmZXN0L2VqYi9TaW5nbGV0b25CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvbW9kdWxld2l0aG1hbmlmZXN0L2VqYi9TaW5nbGV0b25CZWFuLmphdmEKaW5kZXggY2EyNzg0Zi4uYzkyMzYxOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL21vZHVsZXdpdGhtYW5pZmVzdC9lamIvU2luZ2xldG9uQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9tb2R1bGV3aXRobWFuaWZlc3QvZWpiL1NpbmdsZXRvbkJlYW4uamF2YQpAQCAtMTcsMTQgKzE3LDE0IEBACiBwYWNrYWdlIG9yZy5nbGFzc2Zpc2gudGVzdHMuZWpiLnNhbXBsZTsKIAogaW1wb3J0IGpha2FydGEuZWpiLlNpbmdsZXRvbjsKLWltcG9ydCBqYWthcnRhLmVqYi5TdGFydHVwOyAKK2ltcG9ydCBqYWthcnRhLmVqYi5TdGFydHVwOwogaW1wb3J0IGpha2FydGEuYW5ub3RhdGlvbi5QcmVEZXN0cm95OwogaW1wb3J0IGpha2FydGEuYW5ub3RhdGlvbi5Qb3N0Q29uc3RydWN0OwogCiAvKioKICAqIEBhdXRob3IgTWFyaW5hIFZhdGtpbmEKICAqLwotQFNpbmdsZXRvbiAKK0BTaW5nbGV0b24KIEBTdGFydHVwCiBwdWJsaWMgY2xhc3MgU2luZ2xldG9uQmVhbiB7CiAKQEAgLTMyLDcgKzMyLDcgQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJkcyA9ICIgKyBkcyk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJkcyA9ICIgKyBkcyk7CiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyBmb28oKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvcHJvZmlsZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3Byb2ZpbGUvYnVpbGQucHJvcGVydGllcwppbmRleCAwNjRmNGI4Li42ZDAyMzA5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvcHJvZmlsZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9wcm9maWxlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMxLWVtYmVkZGVkLXByb2ZpbGUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+IAotPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPlx1MDAyMAorPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzZS5jbGllbnQiIHZhbHVlPSJjb20uYWNtZS5DbGllbnQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9wcm9maWxlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9wcm9maWxlL2J1aWxkLnhtbAppbmRleCAyOGIwNWE3Li40NjRiM2ZjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvcHJvZmlsZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3Byb2ZpbGUvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OSwyMSArNDksMjEgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPCEtLSBwYWNrYWdlIG91cnNlbHZlcyB0byBpbmNsdWRlIHBlcnNpc3RlbmNlLnhtbCAtLT4KICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+Ci0gICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphciIgCi0gICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIAorICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXIiCisgICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICAgdXBkYXRlPSJ0cnVlIgogICAgICAgICAgICAgIGluY2x1ZGVzID0iKiovUyouY2xhc3MiPgogICAgICAgICA8L2phcj4KICAgICAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L29yZyIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuX3NlIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bl9zZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgIDxlY2hvIG1lc3NhZ2U9IlJ1bm5pbmcgd2l0aCAke2VtYmVkZGVkLmNsYXNzcGF0aH0gaW4gY2xhc3NwYXRoIi8+Ci0gICAgICAgPGphdmEgIGZvcms9Im9uIiAKKyAgICAgICA8amF2YSAgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXI6JHtlbWJlZGRlZC5jbGFzc3BhdGh9OiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9IiR7c2UuY2xpZW50fSI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvcmVtb3RlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvcmVtb3RlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOTIxNTk2ZC4uY2NkNDgwOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3JlbW90ZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9yZW1vdGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzEtZW1iZWRkZWQtcmVtb3RlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAKLTxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz5cdTAwMjAKKzxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic2UuY2xpZW50IiB2YWx1ZT0iY29tLmFjbWUuQ2xpZW50Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvcmVtb3RlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9yZW1vdGUvYnVpbGQueG1sCmluZGV4IGU3ZTg2NWYuLjAxY2VkYzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9yZW1vdGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9yZW1vdGUvYnVpbGQueG1sCkBAIC0zOCw3ICszOCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC01MSwyOCArNTEsMjggQEAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPCEtLSBwYWNrYWdlIG91cnNlbHZlcyB0byBpbmNsdWRlIHBlcnNpc3RlbmNlLnhtbCAtLT4KICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+Ci0gICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphciIgCi0gICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIAorICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXIiCisgICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICAgdXBkYXRlPSJ0cnVlIgogICAgICAgICAgICAgIGluY2x1ZGVzID0iKiovUyouY2xhc3MiPgogICAgICAgICA8L2phcj4KICAgICAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L29yZyIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic3RvcERvbWFpbiIvPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJEb21haW4gaGFzIGJlZWQgU1RPUFBFRCB0byBydW4gdGhlIHRlc3QiLz4KIAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bl9zZSIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0id2FybiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJEb21haW4gd2FzIFNUT1BQRUQgdG8gcnVuIHRoZSB0ZXN0Ii8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bl9zZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgIDxlY2hvIG1lc3NhZ2U9IlJ1bm5pbmcgd2l0aCAke2VtYmVkZGVkLmNsYXNzcGF0aH0gaW4gY2xhc3NwYXRoIi8+Ci0gICAgICAgPGphdmEgIGZvcms9Im9uIiAKKyAgICAgICA8amF2YSAgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXI6JHtlbWJlZGRlZC5jbGFzc3BhdGh9OiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9IiR7c2UuY2xpZW50fSI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvc2tpcGphci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3NraXBqYXIvYnVpbGQucHJvcGVydGllcwppbmRleCBhZGUzYTliLi4yNTI3ZjNhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvc2tpcGphci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9za2lwamFyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMxLWVtYmVkZGVkLXNraXBqYXIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+IAotPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPlx1MDAyMAorPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzZS5jbGllbnQiIHZhbHVlPSJjb20uYWNtZS5DbGllbnQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9za2lwamFyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9za2lwamFyL2J1aWxkLnhtbAppbmRleCAwMjllOGFlLi5hYjcxMWJlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvc2tpcGphci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3NraXBqYXIvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OSwzNyArNDksMzcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPCEtLSBwYWNrYWdlIG91cnNlbHZlcyB0byBpbmNsdWRlIHBlcnNpc3RlbmNlLnhtbCAtLT4KICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+Ci0gICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphciIgCi0gICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIAorICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXIiCisgICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICAgdXBkYXRlPSJ0cnVlIgogICAgICAgICAgICAgIGluY2x1ZGVzID0iKiovKkVqYi5jbGFzcywqKi8qQmVhbi5jbGFzcyI+CiAgICAgICAgICAgICAgPG1ldGFpbmYgZGlyPSJkZXNjcmlwdG9yIj4KICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9ImVqYi1qYXIueG1sIi8+Ci0gICAgICAgICAgICAgPC9tZXRhaW5mPiAKKyAgICAgICAgICAgICA8L21ldGFpbmY+CiAgICAgICAgIDwvamFyPgotICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXB1LmphciIgCi0gICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIAorICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXB1LmphciIKKyAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgICB1cGRhdGU9InRydWUiCiAgICAgICAgICAgICAgaW5jbHVkZXMgPSIqKi9TaW1wbGVFbnRpdHkuY2xhc3MsKiovU2ltcGxlUmVsYXRlZC5jbGFzcyI+CiAgICAgICAgICAgICAgPG1ldGFpbmYgZGlyPSJkZXNjcmlwdG9yIj4KICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InBlcnNpc3RlbmNlLnhtbCIvPgotICAgICAgICAgICAgIDwvbWV0YWluZj4gCisgICAgICAgICAgICAgPC9tZXRhaW5mPgogICAgICAgICA8L2phcj4KICAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIgogICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICB1cGRhdGU9InRydWUiIGluY2x1ZGVzID0iKiovKi5jbGFzcyIKICAgICAgICAgICAgIG1hbmlmZXN0PSIuL21hbmlmZXN0L01BTklGRVNULk1GIj4KICAgICAgICAgPC9qYXI+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5fc2UiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5fc2VfdW5wYWNrZWQiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuX3NlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgPGVjaG8gbWVzc2FnZT0iUnVubmluZyB3aXRoICR7ZW1iZWRkZWQuY2xhc3NwYXRofSBpbiBjbGFzc3BhdGgiLz4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgIDxqYXZhICBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXB1Lmphcjoke2VtYmVkZGVkLmNsYXNzcGF0aH06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iJHtzZS5jbGllbnR9Ij4KQEAgLTkxLDcgKzkxLDcgQEAKICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnRkaXIiLz4KICAgICAgICAgPHVuemlwIHNyYz0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIgZGVzdD0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50ZGlyIi8+CiAgICAgICAgPGVjaG8gbWVzc2FnZT0iUnVubmluZyB3aXRoICR7ZW1iZWRkZWQuY2xhc3NwYXRofSBpbiBjbGFzc3BhdGgiLz4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgIDxqYXZhICBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50ZGlyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXI6JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tcHUuamFyOiR7ZW1iZWRkZWQuY2xhc3NwYXRofToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSIke3NlLmNsaWVudH0iPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3NraXBqYXIvZWpiL1NpbXBsZUVudGl0eS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3NraXBqYXIvZWpiL1NpbXBsZUVudGl0eS5qYXZhCmluZGV4IDk1OWI1NTYuLjA2ODliZWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9za2lwamFyL2VqYi9TaW1wbGVFbnRpdHkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvc2tpcGphci9lamIvU2ltcGxlRW50aXR5LmphdmEKQEAgLTMxLDM1ICszMSwzNSBAQAogICAgIEBOYW1lZFF1ZXJ5KG5hbWUgPSAiU2ltcGxlRW50aXR5LmZpbmRBbGwiLCBxdWVyeSA9ICJzZWxlY3QgZSBmcm9tIFNpbXBsZUVudGl0eSBlIikKIH0pCiBwdWJsaWMgY2xhc3MgU2ltcGxlRW50aXR5IHsKLSAgICAKLSAgICBASWQgCisKKyAgICBASWQKICAgICBAR2VuZXJhdGVkVmFsdWUKICAgICBwcml2YXRlIGludCBpZDsKICAgICBwcml2YXRlIFN0cmluZyBuYW1lOwogCiAgICAgQE9uZVRvT25lKGNhc2NhZGU9UEVSU0lTVCwgZmV0Y2g9TEFaWSkKICAgICBwcml2YXRlIFNpbXBsZVJlbGF0ZWQgcmVsYXRlZDsKLSAgICAKKwogICAgIHB1YmxpYyBTaW1wbGVFbnRpdHkoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgc2V0TmFtZShuYW1lKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU2ltcGxlRW50aXR5KCkgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKICAgICAgICAgcmV0dXJuIG5hbWU7CiAgICAgfQogICAgIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU2ltcGxlUmVsYXRlZCBnZXRSZWxhdGVkKCkgewogICAgICAgICByZXR1cm4gcmVsYXRlZDsKICAgICB9CiAgICAgcHVibGljIHZvaWQgc2V0UmVsYXRlZChTaW1wbGVSZWxhdGVkIHJlbGF0ZWQpIHsKICAgICAgICAgdGhpcy5yZWxhdGVkID0gcmVsYXRlZDsKICAgICB9Ci0gICAgCi0gICAgCisKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3NraXBqYXIvZWpiL1NpbXBsZVJlbGF0ZWQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9za2lwamFyL2VqYi9TaW1wbGVSZWxhdGVkLmphdmEKaW5kZXggOWFiZjk4Zi4uNjFjNDQ5NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3NraXBqYXIvZWpiL1NpbXBsZVJlbGF0ZWQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvc2tpcGphci9lamIvU2ltcGxlUmVsYXRlZC5qYXZhCkBAIC0yNywzNCArMjcsMzQgQEAKIAogQEVudGl0eQogcHVibGljIGNsYXNzIFNpbXBsZVJlbGF0ZWQgewotICAgIAotICAgIEBJZCAKKworICAgIEBJZAogICAgIEBHZW5lcmF0ZWRWYWx1ZQogICAgIHByaXZhdGUgaW50IGlkOwogICAgIHByaXZhdGUgU3RyaW5nIG5hbWU7CiAKICAgICBAT25lVG9PbmUoZmV0Y2g9TEFaWSkKICAgICBwcml2YXRlIFNpbXBsZUVudGl0eSBlbnRpdHk7Ci0gICAgCisKICAgICBwdWJsaWMgU2ltcGxlUmVsYXRlZChTdHJpbmcgbmFtZSkgewogICAgICAgICBzZXROYW1lKG5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTaW1wbGVSZWxhdGVkKCkgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKICAgICAgICAgcmV0dXJuIG5hbWU7CiAgICAgfQogICAgIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU2ltcGxlRW50aXR5IGdldEVudGl0eSgpIHsKICAgICAgICAgcmV0dXJuIGVudGl0eTsKICAgICB9CiAgICAgcHVibGljIHZvaWQgc2V0RW50aXR5KFNpbXBsZUVudGl0eSBlbnRpdHkpIHsKICAgICAgICAgdGhpcy5lbnRpdHkgPSBlbnRpdHk7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvc2tpcGphci9lamIvU2luZ2xldG9uQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3NraXBqYXIvZWpiL1NpbmdsZXRvbkJlYW4uamF2YQppbmRleCBjYTI3ODRmLi5jOTIzNjE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvc2tpcGphci9lamIvU2luZ2xldG9uQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC9za2lwamFyL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKQEAgLTE3LDE0ICsxNywxNCBAQAogcGFja2FnZSBvcmcuZ2xhc3NmaXNoLnRlc3RzLmVqYi5zYW1wbGU7CiAKIGltcG9ydCBqYWthcnRhLmVqYi5TaW5nbGV0b247Ci1pbXBvcnQgamFrYXJ0YS5lamIuU3RhcnR1cDsgCitpbXBvcnQgamFrYXJ0YS5lamIuU3RhcnR1cDsKIGltcG9ydCBqYWthcnRhLmFubm90YXRpb24uUHJlRGVzdHJveTsKIGltcG9ydCBqYWthcnRhLmFubm90YXRpb24uUG9zdENvbnN0cnVjdDsKIAogLyoqCiAgKiBAYXV0aG9yIE1hcmluYSBWYXRraW5hCiAgKi8KLUBTaW5nbGV0b24gCitAU2luZ2xldG9uCiBAU3RhcnR1cAogcHVibGljIGNsYXNzIFNpbmdsZXRvbkJlYW4gewogCkBAIC0zMiw3ICszMiw3IEBACiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiZHMgPSAiICsgZHMpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZHMgPSAiICsgZHMpOwogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgZm9vKCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3Rlc3RjbG9zZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3Rlc3RjbG9zZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDRmMDA5ZjguLmQwZmRmNDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC90ZXN0Y2xvc2UvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdGVzdGNsb3NlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMxLWVtYmVkZGVkLXRlc3RjbG9zZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gCi08cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+XHUwMDIwCis8cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InNlLmNsaWVudCIgdmFsdWU9ImNvbS5hY21lLkNsaWVudCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3Rlc3RjbG9zZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdGVzdGNsb3NlL2J1aWxkLnhtbAppbmRleCBiYTBjYTQyLi45YjQ0YmVmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdGVzdGNsb3NlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdGVzdGNsb3NlL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDksMjQgKzQ5LDI0IEBACiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDwhLS0gcGFja2FnZSBvdXJzZWx2ZXMgdG8gaW5jbHVkZSBwZXJzaXN0ZW5jZS54bWwgLS0+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgotICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXIiIAotICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiAKKyAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIuamFyIgorICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgogICAgICAgICAgICAgIHVwZGF0ZT0idHJ1ZSIKICAgICAgICAgICAgICBpbmNsdWRlcyA9IioqL1MqLmNsYXNzIj4KICAgICAgICAgICAgICA8bWV0YWluZiBkaXI9ImRlc2NyaXB0b3IiPgogICAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icGVyc2lzdGVuY2UueG1sIi8+Ci0gICAgICAgICAgICAgPC9tZXRhaW5mPiAKKyAgICAgICAgICAgICA8L21ldGFpbmY+CiAgICAgICAgIDwvamFyPgogICAgICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vb3JnIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5fc2UiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuX3NlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgPGVjaG8gbWVzc2FnZT0iUnVubmluZyB3aXRoICR7ZW1iZWRkZWQuY2xhc3NwYXRofSBpbiBjbGFzc3BhdGgiLz4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgIDxqYXZhICBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphcjoke2VtYmVkZGVkLmNsYXNzcGF0aH06JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iJHtzZS5jbGllbnR9Ij4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC90ZXN0Y2xvc2UvZWpiL1NpbXBsZUVudGl0eS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3Rlc3RjbG9zZS9lamIvU2ltcGxlRW50aXR5LmphdmEKaW5kZXggMGE0MTU0Ni4uNjdiNmYxNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3Rlc3RjbG9zZS9lamIvU2ltcGxlRW50aXR5LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3Rlc3RjbG9zZS9lamIvU2ltcGxlRW50aXR5LmphdmEKQEAgLTMxLDggKzMxLDggQEAKICAgICBATmFtZWRRdWVyeShuYW1lID0gIlNpbXBsZUVudGl0eS5maW5kQWxsIiwgcXVlcnkgPSAic2VsZWN0IGUgZnJvbSBTaW1wbGVFbnRpdHkgZSIpCiB9KQogcHVibGljIGNsYXNzIFNpbXBsZUVudGl0eSB7Ci0gICAgCi0gICAgQElkIAorCisgICAgQElkCiAgICAgQEdlbmVyYXRlZFZhbHVlCiAgICAgcHJpdmF0ZSBpbnQgaWQ7CiAgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKQEAgLTQwLDEwICs0MCwxMCBAQAogICAgIHB1YmxpYyBTaW1wbGVFbnRpdHkoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgc2V0TmFtZShuYW1lKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU2ltcGxlRW50aXR5KCkgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKICAgICAgICAgcmV0dXJuIG5hbWU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3RpbWVydGVzdC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3RpbWVydGVzdC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGJkNDQ0OTAuLmM5MmE5YjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC90aW1lcnRlc3QvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdGltZXJ0ZXN0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMxLWVtYmVkZGVkLXRpbWVydGVzdCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gCi08cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+XHUwMDIwCis8cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InNlLmNsaWVudCIgdmFsdWU9ImNvbS5hY21lLkNsaWVudCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3RpbWVydGVzdC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdGltZXJ0ZXN0L2J1aWxkLnhtbAppbmRleCA0MWRlZjdkLi4xY2FjZmE2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdGltZXJ0ZXN0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdGltZXJ0ZXN0L2J1aWxkLnhtbApAQCAtMzcsNyArMzcsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNTAsMjkgKzUwLDI5IEBACiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDwhLS0gcGFja2FnZSBvdXJzZWx2ZXMgdG8gaW5jbHVkZSBwZXJzaXN0ZW5jZS54bWwgLS0+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgotICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXIiIAotICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiAKKyAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIuamFyIgorICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgogICAgICAgICAgICAgIHVwZGF0ZT0idHJ1ZSIKICAgICAgICAgICAgICBpbmNsdWRlcyA9IioqL1MqLmNsYXNzIj4KICAgICAgICAgPC9qYXI+CiAgICAgICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9vcmciLz4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bl9zZSI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0icGVyc2lzdGVudCIgdmFsdWU9InRydWUiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4tbm9uLXBlcnNpc3RlbnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5fc2UiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InBlcnNpc3RlbnQiIHZhbHVlPSJmYWxzZSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bl9zZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgIDxlY2hvIG1lc3NhZ2U9IlJ1bm5pbmcgd2l0aCAke2VtYmVkZGVkLmNsYXNzcGF0aH0gaW4gY2xhc3NwYXRoIi8+Ci0gICAgICAgPGphdmEgIGZvcms9Im9uIiAKKyAgICAgICA8amF2YSAgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXI6JHtlbWJlZGRlZC5jbGFzc3BhdGh9OiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9IiR7c2UuY2xpZW50fSI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdHdvY29udGFpbmVycy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3R3b2NvbnRhaW5lcnMvYnVpbGQucHJvcGVydGllcwppbmRleCAzMmJhOTY0Li42OTNhNThhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdHdvY29udGFpbmVycy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC90d29jb250YWluZXJzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMxLWVtYmVkZGVkLXR3b2MiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+IAotPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPlx1MDAyMAorPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzZS5jbGllbnQiIHZhbHVlPSJjb20uYWNtZS5DbGllbnQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC90d29jb250YWluZXJzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC90d29jb250YWluZXJzL2J1aWxkLnhtbAppbmRleCBhZmUwOGE3Li41NDI4ZjNkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdHdvY29udGFpbmVycy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3R3b2NvbnRhaW5lcnMvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OSwyNCArNDksMjQgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPCEtLSBwYWNrYWdlIG91cnNlbHZlcyB0byBpbmNsdWRlIHBlcnNpc3RlbmNlLnhtbCAtLT4KICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+Ci0gICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphciIgCi0gICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIAorICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXIiCisgICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICAgdXBkYXRlPSJ0cnVlIgogICAgICAgICAgICAgIGluY2x1ZGVzID0iKiovUyouY2xhc3MiPgogICAgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iZGVzY3JpcHRvciI+CiAgICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJlamItamFyLnhtbCIvPgogICAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0icGVyc2lzdGVuY2UueG1sIi8+Ci0gICAgICAgICAgICAgPC9tZXRhaW5mPiAKKyAgICAgICAgICAgICA8L21ldGFpbmY+CiAgICAgICAgIDwvamFyPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuX3NlIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bl9zZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgIDxlY2hvIG1lc3NhZ2U9IlJ1bm5pbmcgd2l0aCAke2VtYmVkZGVkLmNsYXNzcGF0aH0gaW4gY2xhc3NwYXRoIi8+Ci0gICAgICAgPGphdmEgIGZvcms9Im9uIiAKKyAgICAgICA8amF2YSAgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXI6JHtlbWJlZGRlZC5jbGFzc3BhdGh9OiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9IiR7c2UuY2xpZW50fSI+CkBAIC03NCw3ICs3NCw3IEBACiAgICAgICAgICAgICA8anZtYXJnIHZhbHVlPSItWGRlYnVnIi8+CiAgICAgICAgICAgICA8anZtYXJnIHZhbHVlPSItWHJ1bmpkd3A6dHJhbnNwb3J0PWR0X3NvY2tldCxzZXJ2ZXI9eSxzdXNwZW5kPXksYWRkcmVzcz04MDg1Ii8+CiAtLT4KLQkJICAgPGFyZyBsaW5lPSIke2puZGlyb290fSIvPgorICAgICAgICAgICA8YXJnIGxpbmU9IiR7am5kaXJvb3R9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3R3b2NvbnRhaW5lcnMvZWpiL1NpbXBsZUVudGl0eS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3R3b2NvbnRhaW5lcnMvZWpiL1NpbXBsZUVudGl0eS5qYXZhCmluZGV4IGIyYmQyNTAuLjI4NWQ4MzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC90d29jb250YWluZXJzL2VqYi9TaW1wbGVFbnRpdHkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdHdvY29udGFpbmVycy9lamIvU2ltcGxlRW50aXR5LmphdmEKQEAgLTMxLDggKzMxLDggQEAKICAgICBATmFtZWRRdWVyeShuYW1lID0gIlNpbXBsZUVudGl0eS5maW5kQWxsIiwgcXVlcnkgPSAic2VsZWN0IGUgZnJvbSBTaW1wbGVFbnRpdHkgZSIpCiB9KQogcHVibGljIGNsYXNzIFNpbXBsZUVudGl0eSB7Ci0gICAgCi0gICAgQElkIAorCisgICAgQElkCiAgICAgQEdlbmVyYXRlZFZhbHVlCiAgICAgcHJpdmF0ZSBpbnQgaWQ7CiAgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKQEAgLTQwLDE1ICs0MCwxNSBAQAogICAgIHB1YmxpYyBTaW1wbGVFbnRpdHkoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgc2V0TmFtZShuYW1lKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU2ltcGxlRW50aXR5KCkgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKICAgICAgICAgcmV0dXJuIG5hbWU7CiAgICAgfQogICAgIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC90d29tb2R1bGVzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdHdvbW9kdWxlcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDBmMGUxYTEuLmQ2M2JkNzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC90d29tb2R1bGVzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3R3b21vZHVsZXMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzEtZW1iZWRkZWQtdHdvLW1vZHVsZXMiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+IAotPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPlx1MDAyMAorPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzZS5jbGllbnQiIHZhbHVlPSJjb20uYWNtZS5DbGllbnQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC90d29tb2R1bGVzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC90d29tb2R1bGVzL2J1aWxkLnhtbAppbmRleCAyNmNhYzk0Li40MjlmNGI0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdHdvbW9kdWxlcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3R3b21vZHVsZXMvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OSwzMCArNDksMzAgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPCEtLSBwYWNrYWdlIG91cnNlbHZlcyB0byBpbmNsdWRlIHBlcnNpc3RlbmNlLnhtbCAtLT4KICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+Ci0gICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiMS5qYXIiIAotICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiAKKyAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIxLmphciIKKyAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgICB1cGRhdGU9InRydWUiCiAgICAgICAgICAgICAgaW5jbHVkZXMgPSIqKi9TaW1wbGUqLmNsYXNzIj4KICAgICAgICAgICAgICA8bWV0YWluZiBkaXI9ImRlc2NyaXB0b3IiPgogICAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iZWpiLWphci54bWwiLz4KICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InBlcnNpc3RlbmNlLnhtbCIvPgotICAgICAgICAgICAgIDwvbWV0YWluZj4gCisgICAgICAgICAgICAgPC9tZXRhaW5mPgogICAgICAgICA8L2phcj4KLSAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIyLmphciIgCi0gICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIAorICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYjIuamFyIgorICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgogICAgICAgICAgICAgIHVwZGF0ZT0idHJ1ZSIKICAgICAgICAgICAgICBpbmNsdWRlcyA9IioqL1NpbmdsZXRvbkJlYW4uY2xhc3MiPgogICAgICAgICA8L2phcj4KICAgICAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L29yZyIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuX3NlIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bl9zZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgIDxlY2hvIG1lc3NhZ2U9IlJ1bm5pbmcgd2l0aCAke2VtYmVkZGVkLmNsYXNzcGF0aH0gaW4gY2xhc3NwYXRoIi8+Ci0gICAgICAgPGphdmEgIGZvcms9Im9uIiAKKyAgICAgICA8amF2YSAgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYjEuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYjIuamFyOiR7ZW1iZWRkZWQuY2xhc3NwYXRofToke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSIke3NlLmNsaWVudH0iPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3R3b21vZHVsZXMvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3R3b21vZHVsZXMvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDRlNTJlZDMuLjNhMTNkMWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC90d29tb2R1bGVzL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdHdvbW9kdWxlcy9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTgwLDcgKzgwLDcgQEAKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiRUpCIGVtYmVkZGVkIG1vZHVsZSAxIiwgc3RhdC5GQUlMKTsKICAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgIGlmIChjICE9IG51bGwpIAorICAgICAgICAgICAgaWYgKGMgIT0gbnVsbCkKICAgICAgICAgICAgICAgICBjLmNsb3NlKCk7CiAgICAgICAgIH0KICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIuLi4uLi4uLi4uRklOSVNIRUQgMiBtb2R1bGVzIEVtYmVkZGVkIHRlc3QiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC90d29tb2R1bGVzL2VqYi9TaW1wbGVFbnRpdHkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC90d29tb2R1bGVzL2VqYi9TaW1wbGVFbnRpdHkuamF2YQppbmRleCA5NTliNTU2Li4wNjg5YmVlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdHdvbW9kdWxlcy9lamIvU2ltcGxlRW50aXR5LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3R3b21vZHVsZXMvZWpiL1NpbXBsZUVudGl0eS5qYXZhCkBAIC0zMSwzNSArMzEsMzUgQEAKICAgICBATmFtZWRRdWVyeShuYW1lID0gIlNpbXBsZUVudGl0eS5maW5kQWxsIiwgcXVlcnkgPSAic2VsZWN0IGUgZnJvbSBTaW1wbGVFbnRpdHkgZSIpCiB9KQogcHVibGljIGNsYXNzIFNpbXBsZUVudGl0eSB7Ci0gICAgCi0gICAgQElkIAorCisgICAgQElkCiAgICAgQEdlbmVyYXRlZFZhbHVlCiAgICAgcHJpdmF0ZSBpbnQgaWQ7CiAgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKIAogICAgIEBPbmVUb09uZShjYXNjYWRlPVBFUlNJU1QsIGZldGNoPUxBWlkpCiAgICAgcHJpdmF0ZSBTaW1wbGVSZWxhdGVkIHJlbGF0ZWQ7Ci0gICAgCisKICAgICBwdWJsaWMgU2ltcGxlRW50aXR5KFN0cmluZyBuYW1lKSB7CiAgICAgICAgIHNldE5hbWUobmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFNpbXBsZUVudGl0eSgpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CiAgICAgICAgIHJldHVybiBuYW1lOwogICAgIH0KICAgICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFNpbXBsZVJlbGF0ZWQgZ2V0UmVsYXRlZCgpIHsKICAgICAgICAgcmV0dXJuIHJlbGF0ZWQ7CiAgICAgfQogICAgIHB1YmxpYyB2b2lkIHNldFJlbGF0ZWQoU2ltcGxlUmVsYXRlZCByZWxhdGVkKSB7CiAgICAgICAgIHRoaXMucmVsYXRlZCA9IHJlbGF0ZWQ7CiAgICAgfQotICAgIAotICAgIAorCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC90d29tb2R1bGVzL2VqYi9TaW1wbGVSZWxhdGVkLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdHdvbW9kdWxlcy9lamIvU2ltcGxlUmVsYXRlZC5qYXZhCmluZGV4IDlhYmY5OGYuLjYxYzQ0OTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC90d29tb2R1bGVzL2VqYi9TaW1wbGVSZWxhdGVkLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3R3b21vZHVsZXMvZWpiL1NpbXBsZVJlbGF0ZWQuamF2YQpAQCAtMjcsMzQgKzI3LDM0IEBACiAKIEBFbnRpdHkKIHB1YmxpYyBjbGFzcyBTaW1wbGVSZWxhdGVkIHsKLSAgICAKLSAgICBASWQgCisKKyAgICBASWQKICAgICBAR2VuZXJhdGVkVmFsdWUKICAgICBwcml2YXRlIGludCBpZDsKICAgICBwcml2YXRlIFN0cmluZyBuYW1lOwogCiAgICAgQE9uZVRvT25lKGZldGNoPUxBWlkpCiAgICAgcHJpdmF0ZSBTaW1wbGVFbnRpdHkgZW50aXR5OwotICAgIAorCiAgICAgcHVibGljIFNpbXBsZVJlbGF0ZWQoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgc2V0TmFtZShuYW1lKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU2ltcGxlUmVsYXRlZCgpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CiAgICAgICAgIHJldHVybiBuYW1lOwogICAgIH0KICAgICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFNpbXBsZUVudGl0eSBnZXRFbnRpdHkoKSB7CiAgICAgICAgIHJldHVybiBlbnRpdHk7CiAgICAgfQogICAgIHB1YmxpYyB2b2lkIHNldEVudGl0eShTaW1wbGVFbnRpdHkgZW50aXR5KSB7CiAgICAgICAgIHRoaXMuZW50aXR5ID0gZW50aXR5OwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3R3b21vZHVsZXMvZWpiL1NpbmdsZXRvbkJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC90d29tb2R1bGVzL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKaW5kZXggMjgwOTIzYy4uZTgwZjlmNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3R3b21vZHVsZXMvZWpiL1NpbmdsZXRvbkJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdHdvbW9kdWxlcy9lamIvU2luZ2xldG9uQmVhbi5qYXZhCkBAIC0xNyw4ICsxNyw4IEBACiBwYWNrYWdlIG9yZy5nbGFzc2Zpc2gudGVzdHMuZWpiLnNhbXBsZTsKIAogaW1wb3J0IGpha2FydGEuZWpiLlNpbmdsZXRvbjsKLWltcG9ydCBqYWthcnRhLmVqYi5TdGFydHVwOyAKLWltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dDsgCitpbXBvcnQgamFrYXJ0YS5lamIuU3RhcnR1cDsKK2ltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dDsKIGltcG9ydCBqYWthcnRhLmFubm90YXRpb24uUmVzb3VyY2U7CiBpbXBvcnQgamFrYXJ0YS5hbm5vdGF0aW9uLlByZURlc3Ryb3k7CiBpbXBvcnQgamFrYXJ0YS5hbm5vdGF0aW9uLnNlY3VyaXR5LlBlcm1pdEFsbDsKQEAgLTI4LDcgKzI4LDcgQEAKIC8qKgogICogQGF1dGhvciBNYXJpbmEgVmF0a2luYQogICovCi1AU2luZ2xldG9uIAorQFNpbmdsZXRvbgogQFN0YXJ0dXAKIHB1YmxpYyBjbGFzcyBTaW5nbGV0b25CZWFuIHsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3R3b21vZHVsZXN3aXRobGlicy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3R3b21vZHVsZXN3aXRobGlicy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDA0OTY3N2UuLmQzM2QxYjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC90d29tb2R1bGVzd2l0aGxpYnMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdHdvbW9kdWxlc3dpdGhsaWJzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMxLWVtYmVkZGVkLXR3by1tb2R1bGVzLXdpdGgtbGlicyIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gCi08cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+XHUwMDIwCis8cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InNlLmNsaWVudCIgdmFsdWU9ImNvbS5hY21lLkNsaWVudCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3R3b21vZHVsZXN3aXRobGlicy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdHdvbW9kdWxlc3dpdGhsaWJzL2J1aWxkLnhtbAppbmRleCAzZDBkMmZkLi4xNmU3OTUyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdHdvbW9kdWxlc3dpdGhsaWJzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdHdvbW9kdWxlc3dpdGhsaWJzL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNTQsMzUgKzU0LDM1IEBACiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1qYXJzIj4KICAgICAgICAgPCEtLSBwYWNrYWdlIG91cnNlbHZlcyB0byBpbmNsdWRlIHBlcnNpc3RlbmNlLnhtbCAtLT4KICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+Ci0gICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiMS5qYXIiIAotICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiAKKyAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIxLmphciIKKyAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgICB1cGRhdGU9InRydWUiCiAgICAgICAgICAgICAgaW5jbHVkZXMgPSIqKi8qRWpiLmNsYXNzIj4KICAgICAgICAgICAgICA8bWV0YWluZiBkaXI9ImRlc2NyaXB0b3IiPgogICAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iZWpiLWphci54bWwiLz4KLSAgICAgICAgICAgICA8L21ldGFpbmY+IAorICAgICAgICAgICAgIDwvbWV0YWluZj4KICAgICAgICAgPC9qYXI+Ci0gICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tcHUxLmphciIgCi0gICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIAorICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXB1MS5qYXIiCisgICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICAgdXBkYXRlPSJ0cnVlIgogICAgICAgICAgICAgIGluY2x1ZGVzID0iKiovU2ltcGxlRW50aXR5LmNsYXNzLCoqL1NpbXBsZVJlbGF0ZWQuY2xhc3MiPgogICAgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iZGVzY3JpcHRvciI+CiAgICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJwZXJzaXN0ZW5jZS54bWwiLz4KLSAgICAgICAgICAgICA8L21ldGFpbmY+IAorICAgICAgICAgICAgIDwvbWV0YWluZj4KICAgICAgICAgPC9qYXI+Ci0gICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tYmFzZS5qYXIiIAotICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiAKKyAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1iYXNlLmphciIKKyAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgICB1cGRhdGU9InRydWUiCiAgICAgICAgICAgICAgaW5jbHVkZXMgPSIqKi9TaW1wbGVCYXNlLmNsYXNzLCoqL1NpbXBsZUludGVyZmFjZS5jbGFzcyI+CiAgICAgICAgIDwvamFyPgotICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYjIuamFyIiAKLSAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgCisgICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiMi5qYXIiCisgICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICAgdXBkYXRlPSJ0cnVlIgogICAgICAgICAgICAgIGluY2x1ZGVzID0iKiovU2luZ2xldG9uQmVhbi5jbGFzcyI+CiAgICAgICAgIDwvamFyPgogICAgICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vb3JnIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtZGlycyI+CiAgICAgICAgIDwhLS0gcGFja2FnZSBvdXJzZWx2ZXMgdG8gaW5jbHVkZSBwZXJzaXN0ZW5jZS54bWwgLS0+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYjEvY2xhc3NlcyIvPgpAQCAtOTcsMTYgKzk3LDE2IEBACiAgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYjIvY2xhc3NlcyIvPgogICAgICAgICA8dW56aXAgc3JjPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIyLmphciIgZGVzdD0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiMi9jbGFzc2VzIi8+CiAKLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bl9zZV9qYXJzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuX3NlX2RpcnMiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuX3NlX2phcnMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICA8ZWNobyBtZXNzYWdlPSJSdW5uaW5nIHdpdGggJHtlbWJlZGRlZC5jbGFzc3BhdGh9IGluIGNsYXNzcGF0aCIvPgotICAgICAgIDxqYXZhICBmb3JrPSJvbiIgCisgICAgICAgPGphdmEgIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIxLmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIyLmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1iYXNlLmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1wdTEuamFyOiR7ZW1iZWRkZWQuY2xhc3NwYXRofToke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSIke3NlLmNsaWVudH0iPgpAQCAtMTIyLDcgKzEyMiw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bl9zZV9kaXJzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgPGVjaG8gbWVzc2FnZT0iUnVubmluZyB3aXRoICR7ZW1iZWRkZWQuY2xhc3NwYXRofSBpbiBjbGFzc3BhdGgiLz4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgIDxqYXZhICBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiMi9jbGFzc2VzOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYjEvY2xhc3Nlczoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1iYXNlL2NsYXNzZXM6JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tcHUxOiR7ZW1iZWRkZWQuY2xhc3NwYXRofToke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSIke3NlLmNsaWVudH0iPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3R3b21vZHVsZXN3aXRobGlicy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdHdvbW9kdWxlc3dpdGhsaWJzL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA1OGFiNWYwLi45MjAzODA4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdHdvbW9kdWxlc3dpdGhsaWJzL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdHdvbW9kdWxlc3dpdGhsaWJzL2NsaWVudC9DbGllbnQuamF2YQpAQCAtOTcsNyArOTcsNyBAQAogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJFSkIgZW1iZWRkZWQgbW9kdWxlIDEiLCBzdGF0LkZBSUwpOwogICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgaWYgKGMgIT0gbnVsbCkgCisgICAgICAgICAgICBpZiAoYyAhPSBudWxsKQogICAgICAgICAgICAgICAgIGMuY2xvc2UoKTsKICAgICAgICAgfQogICAgICAgICBzdGF0LmFkZFN0YXR1cygiRUpCIGVtYmVkZGVkIG1vZHVsZSAxIiwgc3RhdC5QQVNTKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC90d29tb2R1bGVzd2l0aGxpYnMvZWpiL1NpbXBsZUVudGl0eS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3R3b21vZHVsZXN3aXRobGlicy9lamIvU2ltcGxlRW50aXR5LmphdmEKaW5kZXggOTU5YjU1Ni4uMDY4OWJlZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3R3b21vZHVsZXN3aXRobGlicy9lamIvU2ltcGxlRW50aXR5LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3R3b21vZHVsZXN3aXRobGlicy9lamIvU2ltcGxlRW50aXR5LmphdmEKQEAgLTMxLDM1ICszMSwzNSBAQAogICAgIEBOYW1lZFF1ZXJ5KG5hbWUgPSAiU2ltcGxlRW50aXR5LmZpbmRBbGwiLCBxdWVyeSA9ICJzZWxlY3QgZSBmcm9tIFNpbXBsZUVudGl0eSBlIikKIH0pCiBwdWJsaWMgY2xhc3MgU2ltcGxlRW50aXR5IHsKLSAgICAKLSAgICBASWQgCisKKyAgICBASWQKICAgICBAR2VuZXJhdGVkVmFsdWUKICAgICBwcml2YXRlIGludCBpZDsKICAgICBwcml2YXRlIFN0cmluZyBuYW1lOwogCiAgICAgQE9uZVRvT25lKGNhc2NhZGU9UEVSU0lTVCwgZmV0Y2g9TEFaWSkKICAgICBwcml2YXRlIFNpbXBsZVJlbGF0ZWQgcmVsYXRlZDsKLSAgICAKKwogICAgIHB1YmxpYyBTaW1wbGVFbnRpdHkoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgc2V0TmFtZShuYW1lKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU2ltcGxlRW50aXR5KCkgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKICAgICAgICAgcmV0dXJuIG5hbWU7CiAgICAgfQogICAgIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU2ltcGxlUmVsYXRlZCBnZXRSZWxhdGVkKCkgewogICAgICAgICByZXR1cm4gcmVsYXRlZDsKICAgICB9CiAgICAgcHVibGljIHZvaWQgc2V0UmVsYXRlZChTaW1wbGVSZWxhdGVkIHJlbGF0ZWQpIHsKICAgICAgICAgdGhpcy5yZWxhdGVkID0gcmVsYXRlZDsKICAgICB9Ci0gICAgCi0gICAgCisKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3R3b21vZHVsZXN3aXRobGlicy9lamIvU2ltcGxlUmVsYXRlZC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3R3b21vZHVsZXN3aXRobGlicy9lamIvU2ltcGxlUmVsYXRlZC5qYXZhCmluZGV4IDlhYmY5OGYuLjYxYzQ0OTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC90d29tb2R1bGVzd2l0aGxpYnMvZWpiL1NpbXBsZVJlbGF0ZWQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdHdvbW9kdWxlc3dpdGhsaWJzL2VqYi9TaW1wbGVSZWxhdGVkLmphdmEKQEAgLTI3LDM0ICsyNywzNCBAQAogCiBARW50aXR5CiBwdWJsaWMgY2xhc3MgU2ltcGxlUmVsYXRlZCB7Ci0gICAgCi0gICAgQElkIAorCisgICAgQElkCiAgICAgQEdlbmVyYXRlZFZhbHVlCiAgICAgcHJpdmF0ZSBpbnQgaWQ7CiAgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKIAogICAgIEBPbmVUb09uZShmZXRjaD1MQVpZKQogICAgIHByaXZhdGUgU2ltcGxlRW50aXR5IGVudGl0eTsKLSAgICAKKwogICAgIHB1YmxpYyBTaW1wbGVSZWxhdGVkKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIHNldE5hbWUobmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFNpbXBsZVJlbGF0ZWQoKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewogICAgICAgICByZXR1cm4gbmFtZTsKICAgICB9CiAgICAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkgewogICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTaW1wbGVFbnRpdHkgZ2V0RW50aXR5KCkgewogICAgICAgICByZXR1cm4gZW50aXR5OwogICAgIH0KICAgICBwdWJsaWMgdm9pZCBzZXRFbnRpdHkoU2ltcGxlRW50aXR5IGVudGl0eSkgewogICAgICAgICB0aGlzLmVudGl0eSA9IGVudGl0eTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC90d29tb2R1bGVzd2l0aGxpYnMvZWpiL1NpbmdsZXRvbkJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC90d29tb2R1bGVzd2l0aGxpYnMvZWpiL1NpbmdsZXRvbkJlYW4uamF2YQppbmRleCAyODA5MjNjLi5lODBmOWY2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdHdvbW9kdWxlc3dpdGhsaWJzL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3R3b21vZHVsZXN3aXRobGlicy9lamIvU2luZ2xldG9uQmVhbi5qYXZhCkBAIC0xNyw4ICsxNyw4IEBACiBwYWNrYWdlIG9yZy5nbGFzc2Zpc2gudGVzdHMuZWpiLnNhbXBsZTsKIAogaW1wb3J0IGpha2FydGEuZWpiLlNpbmdsZXRvbjsKLWltcG9ydCBqYWthcnRhLmVqYi5TdGFydHVwOyAKLWltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dDsgCitpbXBvcnQgamFrYXJ0YS5lamIuU3RhcnR1cDsKK2ltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dDsKIGltcG9ydCBqYWthcnRhLmFubm90YXRpb24uUmVzb3VyY2U7CiBpbXBvcnQgamFrYXJ0YS5hbm5vdGF0aW9uLlByZURlc3Ryb3k7CiBpbXBvcnQgamFrYXJ0YS5hbm5vdGF0aW9uLnNlY3VyaXR5LlBlcm1pdEFsbDsKQEAgLTI4LDcgKzI4LDcgQEAKIC8qKgogICogQGF1dGhvciBNYXJpbmEgVmF0a2luYQogICovCi1AU2luZ2xldG9uIAorQFNpbmdsZXRvbgogQFN0YXJ0dXAKIHB1YmxpYyBjbGFzcyBTaW5nbGV0b25CZWFuIHsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3V0aWwvc3JjL1ppcFV0aWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9lbWJlZGRlZC91dGlsL3NyYy9aaXBVdGlsLmphdmEKaW5kZXggOTM5MzNkMS4uN2RkNWJhYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2VtYmVkZGVkL3V0aWwvc3JjL1ppcFV0aWwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZW1iZWRkZWQvdXRpbC9zcmMvWmlwVXRpbC5qYXZhCkBAIC00Myw3ICs0Myw3IEBACiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CiAgICAgfQotICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCB2b2lkIHppcChGaWxlIGRpcmVjdG9yeSwgRmlsZSBiYXNlLCBaaXBPdXRwdXRTdHJlYW0gem9zKSB0aHJvd3MgSU9FeGNlcHRpb24gewogICAgICAgICBGaWxlW10gZmlsZXMgPSBkaXJlY3RvcnkubGlzdEZpbGVzKCk7CiAgICAgICAgIGJ5dGVbXSBidWZmZXIgPSBuZXcgYnl0ZVs4MTkyXTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2J1aWxkLnhtbAppbmRleCA0Nzg3NDAwLi41YmViYjQxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvYnVpbGQueG1sCkBAIC05Nyw5ICs5Nyw5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYi1lamIzMS1mdWxsIHRlc3RzKQotCTwvZWNobz4KKyAgICA8ZWNobz4KKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYi1lamIzMS1mdWxsIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Rpc2FibGVfbm9ucG9ydGFibGVfam5kaS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZGlzYWJsZV9ub25wb3J0YWJsZV9qbmRpL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOGVjMjA3YS4uYzZmMDRjMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZGlzYWJsZV9ub25wb3J0YWJsZV9qbmRpL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZGlzYWJsZV9ub25wb3J0YWJsZV9qbmRpL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDExICsxNSwxMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMxLWZ1bGwtZGlzYWJsZV9ub25wb3J0YWJsZV9qbmRpIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAKLTxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz5cdTAwMjAKKzxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic2UuY2xpZW50IiB2YWx1ZT0iY29tLmFjbWUuQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZ2xhc3NmaXNoLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9nbGFzc2Zpc2gtZWpiLWphci54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Rpc2FibGVfbm9ucG9ydGFibGVfam5kaS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9kaXNhYmxlX25vbnBvcnRhYmxlX2puZGkvYnVpbGQueG1sCmluZGV4IGZmZWI0MGEuLmUxNGQyOWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Rpc2FibGVfbm9ucG9ydGFibGVfam5kaS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZGlzYWJsZV9ub25wb3J0YWJsZV9qbmRpL2J1aWxkLnhtbApAQCAtMjksMTUgKzI5LDE1IEBACiAgICAgJmNvbW1vbkJ1aWxkOwogICAgICZ0ZXN0cHJvcGVydGllczsKIAotICAgIDwhLS0gbm90ZSB0aGF0IHdlIGRvbid0IHVuZGVwbG95IGFzIHBhcnQgb2YgYWxsIHRhcmdldCBzbyAKKyAgICA8IS0tIG5vdGUgdGhhdCB3ZSBkb24ndCB1bmRlcGxveSBhcyBwYXJ0IG9mIGFsbCB0YXJnZXQgc28KICAgICB0aGF0IHRvcC1sZXZlbCBidWlsZCBzY3JpcHQgY2FuIHJ1biByZW1vdGUyIGZpcnN0IC0tPgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLGRlcGxveSxydW4sIHVuZGVwbG95Ii8+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ5LDEyICs0OSwxMiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZWpiLWphci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0hlbGxvKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qYXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw5ICs2Miw5IEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5fc2UiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuX3NlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgPGphdmEgIGZvcms9Im9uIiAKKyAgICAgICA8amF2YSAgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSIke3NlLmNsaWVudH0iPgpAQCAtNzUsNyArNzUsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWphci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZGlzYWJsZV9ub25wb3J0YWJsZV9qbmRpL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Rpc2FibGVfbm9ucG9ydGFibGVfam5kaS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggYWEzZDc5MS4uOTgxNmFhZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZGlzYWJsZV9ub25wb3J0YWJsZV9qbmRpL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9kaXNhYmxlX25vbnBvcnRhYmxlX2puZGkvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yMyw3ICsyMyw3IEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBhcHBOYW1lOwpAQCAtMzIsMTAgKzMyLDEwIEBACiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7CiAKLQlhcHBOYW1lID0gYXJnc1swXTsgCi0Jc3RhdC5hZGREZXNjcmlwdGlvbihhcHBOYW1lKTsKLQlDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsgICAgICAgCi0gICAgICAgIGNsaWVudC5kb1Rlc3QoKTsJCisgICAgYXBwTmFtZSA9IGFyZ3NbMF07CisgICAgc3RhdC5hZGREZXNjcmlwdGlvbihhcHBOYW1lKTsKKyAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKKyAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShhcHBOYW1lICsgIklEIik7CiAgICAgfQogCkBAIC00NCw5ICs0NCw5IEBACiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogICAgICAgICBib29sZWFuIGZhaWxlZCA9IGZhbHNlOwogICAgICAgICBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKLQl0cnkgeworICAgIHRyeSB7CiAgICAgICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCSAgICAvLyBub24tcG9ydGFibGUgZ2xvYmFsCisgICAgICAgIC8vIG5vbi1wb3J0YWJsZSBnbG9iYWwKICAgICAgICAgICAgIGZvcihTdHJpbmcgcyA6IG5vblBvcnRhYmxlSm5kaU5hbWVzKSB7CiAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgc2IuYXBwZW5kKCJBYm91dCB0byBsb29rdXAgIiArIHMpOwpAQCAtNTgsOSArNTgsOSBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzYik7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCJkaXNhYmxlX25vbnBvcnRhYmxlX2puZGkiLCAoZmFpbGVkID8gc3RhdC5GQUlMOiBzdGF0LlBBU1MpKTsKLQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQorICAgICAgICBzdGF0LmFkZFN0YXR1cygiZGlzYWJsZV9ub25wb3J0YWJsZV9qbmRpIiwgKGZhaWxlZCA/IHN0YXQuRkFJTDogc3RhdC5QQVNTKSk7CisgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9kaXNhYmxlX25vbnBvcnRhYmxlX2puZGkvZWpiL0hlbGxvQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZGlzYWJsZV9ub25wb3J0YWJsZV9qbmRpL2VqYi9IZWxsb0JlYW4uamF2YQppbmRleCA2MTBmN2E0Li5iNTdmYmJhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9kaXNhYmxlX25vbnBvcnRhYmxlX2puZGkvZWpiL0hlbGxvQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Rpc2FibGVfbm9ucG9ydGFibGVfam5kaS9lamIvSGVsbG9CZWFuLmphdmEKQEAgLTIyLDcgKzIyLDcgQEAKIEBTdGF0ZWxlc3MobWFwcGVkTmFtZT0iSEgiKQogcHVibGljIGNsYXNzIEhlbGxvQmVhbiBpbXBsZW1lbnRzIEhlbGxvIHsKICAgICBwdWJsaWMgU3RyaW5nIGhlbGxvKCkgewotCXJldHVybiAiaGVsbG8sIHdvcmxkXG4iOworICAgIHJldHVybiAiaGVsbG8sIHdvcmxkXG4iOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZWFyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9lYXIvYnVpbGQucHJvcGVydGllcwppbmRleCBkMGQyY2FkLi45YjE5M2U2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9lYXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9lYXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzEtZnVsbC1lYXIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic2UuY2xpZW50IiB2YWx1ZT0iY29tLmFjbWUuQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZWFyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Vhci9idWlsZC54bWwKaW5kZXggNzU3YjJiMi4uYjEwZjQzOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZWFyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9lYXIvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0id2FyIi8+CkBAIC00Niw4ICs0Niw4IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAotCTxqYXZhYyBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgc3JjZGlyPSJjbGllbnQiIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiBkZWJ1Zz0ib24iIGZhaWxvbmVycm9yPSJ0cnVlIj4KLQkgCisgICAgPGphdmFjIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiBzcmNkaXI9ImNsaWVudCIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIGRlYnVnPSJvbiIgZmFpbG9uZXJyb3I9InRydWUiPgorCiAgICAgICAgIDwvamF2YWM+CiA8IS0tCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgpAQCAtNjIsMTUgKzYyLDE1IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiB2YWx1ZT0iKiovRm9vLmNsYXNzLCoqL0hlbGxvLmNsYXNzLCoqL0hlbGxvUmVtb3RlLmNsYXNzLCoqL1NpbmdsZXRvbiouY2xhc3MsKiovSGVsbG9TdGF0ZWxlc3MuY2xhc3MsKiovSGVsbG9TaW5nbGV0b24uY2xhc3MsKiovRm9vTWFuYWdlZEJlYW4uY2xhc3MsKiovQmFyTWFuYWdlZEJlYW4uY2xhc3MsICoqL0Zvb0Jhck1hbmFnZWRCZWFuLmNsYXNzLCAqKi9NYW5hZ2VkU3VwZXIuY2xhc3MsICoqL0ludGVyY2VwdG9yKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZWFyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgIDxqYXZhICBmb3JrPSJvbiIgCisgICAgICAgPGphdmEgIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iJHtzZS5jbGllbnR9Ij4KQEAgLTc5LDEwICs3OSwxMCBAQAogICAgICAgICAgICA8YXJnIGxpbmU9IiR7aHR0cC5wb3J0fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Vhci9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9lYXIvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDBhOWM1ZDUuLjBlOGVkMmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Vhci9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZWFyL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgYXBwTmFtZTsKQEAgLTM4LDUwICszOCw1MCBAQAogICAgIHByaXZhdGUgc3RhdGljIEludGVnZXIgYXBwTGV2ZWxWaWFMb29rdXA7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7Ci0JYXBwTmFtZSA9IGFyZ3NbMF07Ci0Jc3RhdC5hZGREZXNjcmlwdGlvbihhcHBOYW1lKTsKLQlDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsgICAgICAgCi0gICAgICAgIGNsaWVudC5kb1Rlc3QoKTsJCisgICAgYXBwTmFtZSA9IGFyZ3NbMF07CisgICAgc3RhdC5hZGREZXNjcmlwdGlvbihhcHBOYW1lKTsKKyAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKKyAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShhcHBOYW1lICsgIklEIik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJhcHBMZXZlbFZpYUxvb2t1cCA9ICciICsKLQkJCSAgIGFwcExldmVsVmlhTG9va3VwICsgIiciKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImFwcExldmVsVmlhTG9va3VwID0gJyIgKworICAgICAgICAgICAgICAgYXBwTGV2ZWxWaWFMb29rdXAgKyAiJyIpOwogICAgIH0KIAogICAgIHB1YmxpYyBDbGllbnQoU3RyaW5nW10gYXJncykgewotCWhvc3QgPSBhcmdzWzFdOworICAgIGhvc3QgPSBhcmdzWzFdOwogICAgICAgICBwb3J0ID0gYXJnc1syXTsKICAgICB9CiAKLSAgIAorCiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAKLQl0cnkgeworICAgIHRyeSB7CiAKLQkgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgCisgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArCiAgICAgICAgICAgICAgICAgIi8iICsgYXBwTmFtZSArICIvSGVsbG9TZXJ2bGV0IjsKIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnZva2luZyB3ZWJjbGllbnQgc2VydmxldCBhdCAiICsgdXJsKTsKIAotCSAgICBVUkwgdSA9IG5ldyBVUkwodXJsKTsKLSAgICAgICAgCi0JICAgIEh0dHBVUkxDb25uZWN0aW9uIGMxID0gKEh0dHBVUkxDb25uZWN0aW9uKXUub3BlbkNvbm5lY3Rpb24oKTsKLQkgICAgaW50IGNvZGUgPSBjMS5nZXRSZXNwb25zZUNvZGUoKTsKLQkgICAgSW5wdXRTdHJlYW0gaXMgPSBjMS5nZXRJbnB1dFN0cmVhbSgpOwotCSAgICBCdWZmZXJlZFJlYWRlciBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlciAobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7Ci0JICAgIFN0cmluZyBsaW5lID0gbnVsbDsKLQkgICAgd2hpbGUoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKQotCQlTeXN0ZW0ub3V0LnByaW50bG4obGluZSk7Ci0JICAgIGlmKGNvZGUgIT0gMjAwKSB7Ci0JCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJJbmNvcnJlY3QgcmV0dXJuIGNvZGU6ICIgKyBjb2RlKTsKLQkgICAgfQotCSAgICAKLQkgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LlBBU1MpOworICAgICAgICBVUkwgdSA9IG5ldyBVUkwodXJsKTsKIAotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LkZBSUwpOwotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCX0KKyAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gYzEgPSAoSHR0cFVSTENvbm5lY3Rpb24pdS5vcGVuQ29ubmVjdGlvbigpOworICAgICAgICBpbnQgY29kZSA9IGMxLmdldFJlc3BvbnNlQ29kZSgpOworICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IGMxLmdldElucHV0U3RyZWFtKCk7CisgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyIChuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKKyAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOworICAgICAgICB3aGlsZSgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihsaW5lKTsKKyAgICAgICAgaWYoY29kZSAhPSAyMDApIHsKKyAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkluY29ycmVjdCByZXR1cm4gY29kZTogIiArIGNvZGUpOworICAgICAgICB9CisKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LlBBU1MpOworCisgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuRkFJTCk7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQogICAgIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9lYXIvZWpiL0Jhck1hbmFnZWRCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9lYXIvZWpiL0Jhck1hbmFnZWRCZWFuLmphdmEKaW5kZXggNGQ4Y2EwZi4uMDA2NzQ2NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZWFyL2VqYi9CYXJNYW5hZ2VkQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Vhci9lamIvQmFyTWFuYWdlZEJlYW4uamF2YQpAQCAtMjksNyArMjksNyBAQAogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEJhck1hbmFnZWRCZWFuOjppbml0KCkgIiArIHRoaXMpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gQmFyTWFuYWdlZEJlYW46OmluaXQoKSAiICsgdGhpcyk7CiAgICAgfQogCiAgICBwdWJsaWMgdm9pZCBiYXIoKSB7CkBAIC0zOSwxMiArMzksMTIgQEAKIAogICAgIEBQcmVEZXN0cm95CiAgICAgcHJpdmF0ZSB2b2lkIGRlc3Ryb3koKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBCYXJNYW5hZ2VkQmVhbjo6ZGVzdHJveSgpICIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gQmFyTWFuYWdlZEJlYW46OmRlc3Ryb3koKSAiKTsKICAgICB9CiAKICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotCXJldHVybiAiQmFyTWFuYWdlZEJlYW4gdGhpcyA9ICIgKyBzdXBlci50b1N0cmluZygpICsgCi0JICAgICIgcyA9ICIgKyBzICsgIiAsIGRzID0gIiArIGRzOworICAgIHJldHVybiAiQmFyTWFuYWdlZEJlYW4gdGhpcyA9ICIgKyBzdXBlci50b1N0cmluZygpICsKKyAgICAgICAgIiBzID0gIiArIHMgKyAiICwgZHMgPSAiICsgZHM7CiAKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Vhci9lamIvRm9vQmFyTWFuYWdlZEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Vhci9lamIvRm9vQmFyTWFuYWdlZEJlYW4uamF2YQppbmRleCA5NzA1MjNmLi40OTQ3ZjE2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9lYXIvZWpiL0Zvb0Jhck1hbmFnZWRCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZWFyL2VqYi9Gb29CYXJNYW5hZ2VkQmVhbi5qYXZhCkBAIC0yMywxMiArMjMsMTIgQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29CYXJNYW5hZ2VkQmVhbjo6aW5pdCgpICIgKyB0aGlzKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb0Jhck1hbmFnZWRCZWFuOjppbml0KCkgIiArIHRoaXMpOwogICAgIH0KLSAgICAKKwogICAgIEBQcmVEZXN0cm95CiAgICAgcHJpdmF0ZSB2b2lkIGRlc3Ryb3koKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29CYXJNYW5hZ2VkQmVhbjo6ZGVzdHJveSgpICIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vQmFyTWFuYWdlZEJlYW46OmRlc3Ryb3koKSAiKTsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Vhci9lamIvRm9vTWFuYWdlZEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Vhci9lamIvRm9vTWFuYWdlZEJlYW4uamF2YQppbmRleCBmZjFhNDUzLi5mMDQxMWE1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9lYXIvZWpiL0Zvb01hbmFnZWRCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZWFyL2VqYi9Gb29NYW5hZ2VkQmVhbi5qYXZhCkBAIC0zNiwzMyArMzYsMzMgQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29NYW5hZ2VkQmVhbjo6aW5pdCgpICIgKyB0aGlzKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb01hbmFnZWRCZWFuOjppbml0KCkgIiArIHRoaXMpOwogICAgIH0KLSAgICAKKwogCiAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotCXJldHVybiAic29tZW1hbmFnZWRiZWFuIjsKKyAgICByZXR1cm4gInNvbWVtYW5hZ2VkYmVhbiI7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZm9vKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vTWFuYWdlZEJlYW46OmZvbygpICIpOwotCWJtYi5iYXIoKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb01hbmFnZWRCZWFuOjpmb28oKSAiKTsKKyAgICBibWIuYmFyKCk7CiAgICAgfQogCiAgICAgcHVibGljIE9iamVjdCBnZXRUaGlzKCkgewotCXJldHVybiB0aGlzOworICAgIHJldHVybiB0aGlzOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CiAgICAgcHJpdmF0ZSB2b2lkIGRlc3Ryb3koKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29NYW5hZ2VkQmVhbjo6ZGVzdHJveSgpICIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vTWFuYWdlZEJlYW46OmRlc3Ryb3koKSAiKTsKICAgICB9CiAKIAogICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JcmV0dXJuICJGb29NYW5hZ2VkQmVhbiB0aGlzID0gIiArIHN1cGVyLnRvU3RyaW5nKCkgKyAKLQkJCSAgICIgcyA9ICIgKyBzICsgIiAsIG9yYiA9ICIgKyBvcmIgKyAKLQkgICAgIiAsIGJtYiA9ICIgKyBibWIgKyAiICwgZW0gPSAiICsgZW07CisgICAgcmV0dXJuICJGb29NYW5hZ2VkQmVhbiB0aGlzID0gIiArIHN1cGVyLnRvU3RyaW5nKCkgKworICAgICAgICAgICAgICAgIiBzID0gIiArIHMgKyAiICwgb3JiID0gIiArIG9yYiArCisgICAgICAgICIgLCBibWIgPSAiICsgYm1iICsgIiAsIGVtID0gIiArIGVtOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZWFyL2VqYi9IZWxsb1NpbmdsZXRvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZWFyL2VqYi9IZWxsb1NpbmdsZXRvbi5qYXZhCmluZGV4IDlmNjZkMDEuLmI5ZGQ0YTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Vhci9lamIvSGVsbG9TaW5nbGV0b24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9lYXIvZWpiL0hlbGxvU2luZ2xldG9uLmphdmEKQEAgLTM5LDkgKzM5LDkgQEAKICAgICBAUmVzb3VyY2UobmFtZT0iamF2YTptb2R1bGUvZW52L01PUkIyIikKICAgICBwcml2YXRlIE9SQiBvcmI7CiAKLSAgICBAUmVzb3VyY2UgCisgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBGb29NYW5hZ2VkQmVhbiBmb287Ci0gICAgCisKICAgICBAUmVzb3VyY2UobmFtZT0iZm9vMnJlZiIsIG1hcHBlZE5hbWU9ImphdmE6bW9kdWxlL3NvbWVtYW5hZ2VkYmVhbiIpCiAgICAgcHJpdmF0ZSBGb29NYW5hZ2VkQmVhbiBmb28yOwogCkBAIC01OSw1OSArNTksNTkgQEAKIAogICAgIEBFSkIobmFtZT0iamF2YTphcHAvZW52L2FwcExldmVsRWpiUmVmIikKICAgICBwcml2YXRlIEhlbGxvIGhlbGxvOwotICAgIAorCiAgICAgU3RyaW5nIGFwcE5hbWU7CiAgICAgU3RyaW5nIG1vZHVsZU5hbWU7CiAKLSAgICBAUG9zdENvbnN0cnVjdCAgICAKKyAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG9TaW5nbGV0b246OmluaXQoKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG9TaW5nbGV0b246OmluaXQoKSIpOwogCi0JU3lzdGVtLm91dC5wcmludGxuKCJteVN0cmluZyA9ICciICsgbXlTdHJpbmcgKyAiJyIpOwotCWlmKCAobXlTdHJpbmcgPT0gbnVsbCkgfHwgIShteVN0cmluZy5lcXVhbHMoIm15U3RyaW5nIikgKSApIHsKLQkgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkludmFsaWQgdmFsdWUgIiArIG15U3RyaW5nICsgIiBmb3IgbXlTdHJpbmciKTsKLQl9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJteVN0cmluZyA9ICciICsgbXlTdHJpbmcgKyAiJyIpOworICAgIGlmKCAobXlTdHJpbmcgPT0gbnVsbCkgfHwgIShteVN0cmluZy5lcXVhbHMoIm15U3RyaW5nIikgKSApIHsKKyAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkludmFsaWQgdmFsdWUgIiArIG15U3RyaW5nICsgIiBmb3IgbXlTdHJpbmciKTsKKyAgICB9CiAKLQlhcHBOYW1lID0gKFN0cmluZykgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6YXBwL0FwcE5hbWUiKTsKLQltb2R1bGVOYW1lID0gKFN0cmluZykgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6bW9kdWxlL01vZHVsZU5hbWUiKTsKKyAgICBhcHBOYW1lID0gKFN0cmluZykgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6YXBwL0FwcE5hbWUiKTsKKyAgICBtb2R1bGVOYW1lID0gKFN0cmluZykgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6bW9kdWxlL01vZHVsZU5hbWUiKTsKIAotCU9SQiBvcmIxID0gKE9SQikgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6bW9kdWxlL01PUkIxIik7Ci0JT1JCIG9yYjIgPSAoT1JCKSBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTptb2R1bGUvZW52L01PUkIyIik7CisgICAgT1JCIG9yYjEgPSAoT1JCKSBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTptb2R1bGUvTU9SQjEiKTsKKyAgICBPUkIgb3JiMiA9IChPUkIpIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOm1vZHVsZS9lbnYvTU9SQjIiKTsKIAotCVN5c3RlbS5vdXQucHJpbnRsbigiQXBwTmFtZSA9ICIgKyBhcHBOYW1lKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIk1vZHVsZU5hbWUgPSAiICsgbW9kdWxlTmFtZSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJBcHBOYW1lID0gIiArIGFwcE5hbWUpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTW9kdWxlTmFtZSA9ICIgKyBtb2R1bGVOYW1lKTsKIAotCWZvbzQgPSAoRm9vTWFuYWdlZEJlYW4pIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOm1vZHVsZS9zb21lbWFuYWdlZGJlYW4iKTsKLQlmb281ID0gKEZvb01hbmFnZWRCZWFuKSBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTphcHAvIiArIG1vZHVsZU5hbWUgKwotCQkJCQkJICAiL3NvbWVtYW5hZ2VkYmVhbiIpOwotCWZvbzYgPSAoRm9vKSBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTphcHAvIiArIG1vZHVsZU5hbWUgKwotCQkJCQkJICAiL3NvbWVtYW5hZ2VkYmVhbiIpOwotCWZvbzcgPSAoRm9vTWFuYWdlZEJlYW4pIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOmNvbXAvZW52L2ZvbzJyZWYiKTsKLQlmb284ID0gKEZvbykgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6Y29tcC9lbnYvZm9vM3JlZiIpOworICAgIGZvbzQgPSAoRm9vTWFuYWdlZEJlYW4pIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOm1vZHVsZS9zb21lbWFuYWdlZGJlYW4iKTsKKyAgICBmb281ID0gKEZvb01hbmFnZWRCZWFuKSBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTphcHAvIiArIG1vZHVsZU5hbWUgKworICAgICAgICAgICAgICAgICAgICAgICAgICAiL3NvbWVtYW5hZ2VkYmVhbiIpOworICAgIGZvbzYgPSAoRm9vKSBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTphcHAvIiArIG1vZHVsZU5hbWUgKworICAgICAgICAgICAgICAgICAgICAgICAgICAiL3NvbWVtYW5hZ2VkYmVhbiIpOworICAgIGZvbzcgPSAoRm9vTWFuYWdlZEJlYW4pIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOmNvbXAvZW52L2ZvbzJyZWYiKTsKKyAgICBmb284ID0gKEZvbykgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6Y29tcC9lbnYvZm9vM3JlZiIpOwogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgaGVsbG8oKSB7Ci0JCi0JU3lzdGVtLm91dC5wcmludGxuKCJIZWxsb1NpbmdsZXRvbjo6aGVsbG8oKSIpOworCisgICAgU3lzdGVtLm91dC5wcmludGxuKCJIZWxsb1NpbmdsZXRvbjo6aGVsbG8oKSIpOwogCiAKLQlmb28uZm9vKCk7Ci0JZm9vMi5mb28oKTsKLQlmb28zLmZvbygpOworICAgIGZvby5mb28oKTsKKyAgICBmb28yLmZvbygpOworICAgIGZvbzMuZm9vKCk7CiAKLQlmb280LmZvbygpOwotCWZvbzUuZm9vKCk7Ci0JZm9vNi5mb28oKTsKLQlmb283LmZvbygpOwotICAgICAgCWZvbzguZm9vKCk7CisgICAgZm9vNC5mb28oKTsKKyAgICBmb281LmZvbygpOworICAgIGZvbzYuZm9vKCk7CisgICAgZm9vNy5mb28oKTsKKyAgICAgICAgICBmb284LmZvbygpOwogCi0JcmV0dXJuICJoZWxsbywgd29ybGQhXG4iOworICAgIHJldHVybiAiaGVsbG8sIHdvcmxkIVxuIjsKICAgICB9CiAKIAogICAgIEBQcmVEZXN0cm95CiAgICAgcHJpdmF0ZSB2b2lkIGRlc3Ryb3koKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJIZWxsb1NpbmdsZXRvbjo6ZGVzdHJveSgpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJIZWxsb1NpbmdsZXRvbjo6ZGVzdHJveSgpIik7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9lYXIvZWpiL0hlbGxvU3RhdGVsZXNzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9lYXIvZWpiL0hlbGxvU3RhdGVsZXNzLmphdmEKaW5kZXggMzUwNDc3MS4uMThmNTVlYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZWFyL2VqYi9IZWxsb1N0YXRlbGVzcy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Vhci9lamIvSGVsbG9TdGF0ZWxlc3MuamF2YQpAQCAtMzAsNyArMzAsNyBAQAogCiAgICAgQFJlc291cmNlKG5hbWU9ImphdmE6bW9kdWxlL01PUkIxIikKICAgICBwcml2YXRlIE9SQiBvcmI7Ci0gICAgCisKICAgICBARUpCKG5hbWU9Imxvb2t1cHJlZjEiLCBsb29rdXA9ImphdmE6YXBwL2Vudi9BUzEiKQogICAgIHByaXZhdGUgSGVsbG8gbG9va3VwcmVmMTsKIApAQCAtNDEsNTEgKzQxLDUxIEBACiAgICAgcHJpdmF0ZSBIZWxsb1JlbW90ZSBsb29rdXByZWYzOwogCiAgICAgLy8gZGVjbGFyZSBjb21wb25lbnQtbGV2ZWwgZGVwZW5kZW5jeSB1c2luZyBmdWxseS1xdWFsaWZpZWQKLSAgICAvLyBqYXZhOmNvbXAvZW52IGZvcm0uICAKKyAgICAvLyBqYXZhOmNvbXAvZW52IGZvcm0uCiAgICAgQFJlc291cmNlKG5hbWU9ImphdmE6Y29tcC9lbnYvZm9vIikgU2Vzc2lvbkNvbnRleHQgc2Vzc2lvbkN0eDsKIAotICAgIEBQb3N0Q29uc3RydWN0IAorICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJIZWxsb1N0YXRlbGVzczo6aW5pdCgpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJIZWxsb1N0YXRlbGVzczo6aW5pdCgpIik7CiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyBoZWxsbygpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU3RhdGVsZXNzOjpoZWxsbygpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1N0YXRlbGVzczo6aGVsbG8oKSIpOwogCi0JU3RyaW5nIGFwcE5hbWUgPSAoU3RyaW5nKSBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTphcHAvQXBwTmFtZSIpOwotCVN0cmluZyBtb2R1bGVOYW1lID0gKFN0cmluZykgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6bW9kdWxlL01vZHVsZU5hbWUiKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkFwcE5hbWUgPSAiICsgYXBwTmFtZSk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJNb2R1bGVOYW1lID0gIiArIG1vZHVsZU5hbWUpOworICAgIFN0cmluZyBhcHBOYW1lID0gKFN0cmluZykgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6YXBwL0FwcE5hbWUiKTsKKyAgICBTdHJpbmcgbW9kdWxlTmFtZSA9IChTdHJpbmcpIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOm1vZHVsZS9Nb2R1bGVOYW1lIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJBcHBOYW1lID0gIiArIGFwcE5hbWUpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTW9kdWxlTmFtZSA9ICIgKyBtb2R1bGVOYW1lKTsKIAotCU9SQiBvcmIxID0gKE9SQikgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6bW9kdWxlL01PUkIxIik7Ci0JT1JCIG9yYjIgPSAoT1JCKSBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTptb2R1bGUvZW52L01PUkIyIik7CisgICAgT1JCIG9yYjEgPSAoT1JCKSBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTptb2R1bGUvTU9SQjEiKTsKKyAgICBPUkIgb3JiMiA9IChPUkIpIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOm1vZHVsZS9lbnYvTU9SQjIiKTsKIAotCUhlbGxvIHMxID0gKEhlbGxvKSBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTpnbG9iYWwvIiArCi0JCQkJCSAgIGFwcE5hbWUgKyAiLyIgKwotCQkJCQkgICBtb2R1bGVOYW1lICsgIi8iICsKLQkJCQkJICAgIkhlbGxvU2luZ2xldG9uIik7CisgICAgSGVsbG8gczEgPSAoSGVsbG8pIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOmdsb2JhbC8iICsKKyAgICAgICAgICAgICAgICAgICAgICAgYXBwTmFtZSArICIvIiArCisgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZU5hbWUgKyAiLyIgKworICAgICAgICAgICAgICAgICAgICAgICAiSGVsbG9TaW5nbGV0b24iKTsKIAotCUhlbGxvIHMyID0gKEhlbGxvKSBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTphcHAvIiArCi0JCQkJCQkJIG1vZHVsZU5hbWUgKyAiLyIgKwotCQkJCQkJCSAiSGVsbG9TaW5nbGV0b24iKTsKKyAgICBIZWxsbyBzMiA9IChIZWxsbykgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6YXBwLyIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVOYW1lICsgIi8iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbGxvU2luZ2xldG9uIik7CiAKLQkvLyBSZWx5IG9uIGRlZmF1bHQgdG8gcmVzb2x2ZSAiamF2YTpjb21wL2Vudi8gZGVjbGFyZWQgcmVzb3VyY2UKLQlTZXNzaW9uQ29udGV4dCBzYzEgPSAoU2Vzc2lvbkNvbnRleHQpCi0JICAgIHNlc3Npb25DdHgubG9va3VwKCJmb28iKTsKKyAgICAvLyBSZWx5IG9uIGRlZmF1bHQgdG8gcmVzb2x2ZSAiamF2YTpjb21wL2Vudi8gZGVjbGFyZWQgcmVzb3VyY2UKKyAgICBTZXNzaW9uQ29udGV4dCBzYzEgPSAoU2Vzc2lvbkNvbnRleHQpCisgICAgICAgIHNlc3Npb25DdHgubG9va3VwKCJmb28iKTsKIAotCVNlc3Npb25Db250ZXh0IHNjMiA9IChTZXNzaW9uQ29udGV4dCkKLQkgICAgc2MxLmxvb2t1cCgiamF2YTpjb21wL2Vudi9mb28iKTsKKyAgICBTZXNzaW9uQ29udGV4dCBzYzIgPSAoU2Vzc2lvbkNvbnRleHQpCisgICAgICAgIHNjMS5sb29rdXAoImphdmE6Y29tcC9lbnYvZm9vIik7CiAKLQlJbnRlZ2VyIGVudkVudHJ5ID0gKEludGVnZXIpCi0JICAgIHNjMS5sb29rdXAoImphdmE6YXBwL2Vudi92YWx1ZTEiKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImphdmE6YXAvZW52L3ZhbHVlMSA9ICIgKyBlbnZFbnRyeSk7CisgICAgSW50ZWdlciBlbnZFbnRyeSA9IChJbnRlZ2VyKQorICAgICAgICBzYzEubG9va3VwKCJqYXZhOmFwcC9lbnYvdmFsdWUxIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJqYXZhOmFwL2Vudi92YWx1ZTEgPSAiICsgZW52RW50cnkpOwogCi0JcmV0dXJuICJoZWxsbywgd29ybGQhXG4iOworICAgIHJldHVybiAiaGVsbG8sIHdvcmxkIVxuIjsKICAgICB9CiAKICAgICBAUHJlRGVzdHJveQogICAgIHByaXZhdGUgdm9pZCBkZXN0cm95KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG9TdGF0ZWxlc3M6OmRlc3Ryb3koKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG9TdGF0ZWxlc3M6OmRlc3Ryb3koKSIpOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZWFyL2VqYi9JbnRlcmNlcHRvckEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Vhci9lamIvSW50ZXJjZXB0b3JBLmphdmEKaW5kZXggNzMwN2NhZS4uZjU5YWZkNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZWFyL2VqYi9JbnRlcmNlcHRvckEuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9lYXIvZWpiL0ludGVyY2VwdG9yQS5qYXZhCkBAIC0zNSwyMSArMzUsMjEgQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoSW52b2NhdGlvbkNvbnRleHQgYykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBJbnRlcmNlcHRvckE6OmluaXQoKSAiKTsKLQljLnByb2NlZWQoKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEludGVyY2VwdG9yQTo6aW5pdCgpICIpOworICAgIGMucHJvY2VlZCgpOwogICAgIH0KIAogCiAgICAgQEFyb3VuZEludm9rZQogICAgIHB1YmxpYyBPYmplY3Qgcm91bmRJbnZva2UoSW52b2NhdGlvbkNvbnRleHQgYykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBJbnRlcmNlcHRvckE6OnJvdW5kSW52b2tlKCkgIik7Ci0JcmV0dXJuIGMucHJvY2VlZCgpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSW50ZXJjZXB0b3JBOjpyb3VuZEludm9rZSgpICIpOworICAgIHJldHVybiBjLnByb2NlZWQoKTsKICAgICB9CiAKICAgICBAUHJlRGVzdHJveQogICAgIHByaXZhdGUgdm9pZCBkZXN0cm95KEludm9jYXRpb25Db250ZXh0IGMpIHRocm93cyBFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSW50ZXJjZXB0b3I6OmRlc3Ryb3koKSAiKTsKLQljLnByb2NlZWQoKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEludGVyY2VwdG9yOjpkZXN0cm95KCkgIik7CisgICAgYy5wcm9jZWVkKCk7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9lYXIvZWpiL0ludGVyY2VwdG9yU3VwZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Vhci9lamIvSW50ZXJjZXB0b3JTdXBlci5qYXZhCmluZGV4IDRhZGJkMDMuLjFiOTMyNWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Vhci9lamIvSW50ZXJjZXB0b3JTdXBlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Vhci9lamIvSW50ZXJjZXB0b3JTdXBlci5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiAKICAgICBAQXJvdW5kSW52b2tlCiAgICAgcHJvdGVjdGVkIE9iamVjdCByb3VuZEludm9rZShJbnZvY2F0aW9uQ29udGV4dCBjKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiU2hvdWxkIG5vdCByZWFjaCBoZXJlIik7CisgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlNob3VsZCBub3QgcmVhY2ggaGVyZSIpOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZWFyL2VqYi9NYW5hZ2VkU3VwZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Vhci9lamIvTWFuYWdlZFN1cGVyLmphdmEKaW5kZXggZGUxZTM1YS4uNGI2ZTBkMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZWFyL2VqYi9NYW5hZ2VkU3VwZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9lYXIvZWpiL01hbmFnZWRTdXBlci5qYXZhCkBAIC0yOCwxNyArMjgsMTcgQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBNYW5hZ2VkU3VwZXI6OmluaXQoKSAiICsgdGhpcyk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBNYW5hZ2VkU3VwZXI6OmluaXQoKSAiICsgdGhpcyk7CiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKICAgICBwcml2YXRlIHZvaWQgZGVzdHJveSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIE1hbmFnZWRTdXBlcjo6ZGVzdHJveSgpICIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gTWFuYWdlZFN1cGVyOjpkZXN0cm95KCkgIik7CiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLQlyZXR1cm4gIk1hbmFnZWRTdXBlciB0aGlzID0gIiArIHN1cGVyLnRvU3RyaW5nKCkgKyAKLQkgICAgIiBzID0gIiArIHMgKyAiICwgZHMgPSAiICsgZHM7CisgICAgcmV0dXJuICJNYW5hZ2VkU3VwZXIgdGhpcyA9ICIgKyBzdXBlci50b1N0cmluZygpICsKKyAgICAgICAgIiBzID0gIiArIHMgKyAiICwgZHMgPSAiICsgZHM7CiAKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Vhci9lamIvU2luZ2xldG9uMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZWFyL2VqYi9TaW5nbGV0b24yLmphdmEKaW5kZXggNTNlY2QxNi4uNjI4Zjc0NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZWFyL2VqYi9TaW5nbGV0b24yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZWFyL2VqYi9TaW5nbGV0b24yLmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKICAgICBwdWJsaWMgdm9pZCBpbml0KCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW4yOjppbml0KCkiKTsKICAgICB9Ci0gICAgCisKICAgICBAUHJlRGVzdHJveQogICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjI6OmRlc3Ryb3koKSIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZWFyL2VqYi9TaW5nbGV0b24zLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9lYXIvZWpiL1NpbmdsZXRvbjMuamF2YQppbmRleCA2NDQ5ZjdhLi5hMzZiYmU3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9lYXIvZWpiL1NpbmdsZXRvbjMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9lYXIvZWpiL1NpbmdsZXRvbjMuamF2YQpAQCAtMjgsNyArMjgsNyBAQAogICAgIHB1YmxpYyB2b2lkIGluaXQoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjM6OmluaXQoKSIpOwogICAgIH0KLSAgICAKKwogICAgIEBQcmVEZXN0cm95CiAgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuMzo6ZGVzdHJveSgpIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9lYXIvZWpiL1NpbmdsZXRvbjQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Vhci9lamIvU2luZ2xldG9uNC5qYXZhCmluZGV4IDQzZTY0OWEuLmI2ZTIwNGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Vhci9lamIvU2luZ2xldG9uNC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Vhci9lamIvU2luZ2xldG9uNC5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiAgICAgcHVibGljIHZvaWQgaW5pdCgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuNDo6aW5pdCgpIik7CiAgICAgfQotICAgIAorCiAgICAgQFByZURlc3Ryb3kKICAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW40OjpkZXN0cm95KCkiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Vhci93YXIvRm9vMk1hbmFnZWRCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9lYXIvd2FyL0ZvbzJNYW5hZ2VkQmVhbi5qYXZhCmluZGV4IDliZmM4YjAuLmM0NTdkMWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Vhci93YXIvRm9vMk1hbmFnZWRCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZWFyL3dhci9Gb28yTWFuYWdlZEJlYW4uamF2YQpAQCAtMzMsMjggKzMzLDI4IEBACiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vMk1hbmFnZWRCZWFuOjppbml0KCkgIiArIHRoaXMpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vMk1hbmFnZWRCZWFuOjppbml0KCkgIiArIHRoaXMpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvbzJNYW5hZ2VkQmVhbjo6Zm9vKCkgIik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb28yTWFuYWdlZEJlYW46OmZvbygpIHRlc3RpbmcgQEVKQjogIiArIHMuaGVsbG8oKSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb28yTWFuYWdlZEJlYW46OmZvbygpICIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vMk1hbmFnZWRCZWFuOjpmb28oKSB0ZXN0aW5nIEBFSkI6ICIgKyBzLmhlbGxvKCkpOwogICAgIH0KIAogICAgIHB1YmxpYyBPYmplY3QgZ2V0VGhpcygpIHsKLQlyZXR1cm4gdGhpczsKKyAgICByZXR1cm4gdGhpczsKICAgICB9CiAKICAgICBAUHJlRGVzdHJveQogICAgIHByaXZhdGUgdm9pZCBkZXN0cm95KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vMk1hbmFnZWRCZWFuOjpkZXN0cm95KCkgIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb28yTWFuYWdlZEJlYW46OmRlc3Ryb3koKSAiKTsKICAgICB9CiAKIAogICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JcmV0dXJuICJGb28yTWFuYWdlZEJlYW4gdGhpcyA9ICIgKyAKLQkJCSAgICIgcyA9ICIgKyBzICsgIiAsIG9yYiA9ICIgKyBvcmIgKyAKLQkgICAgIiAsIGVtID0gIiArIGVtOworICAgIHJldHVybiAiRm9vMk1hbmFnZWRCZWFuIHRoaXMgPSAiICsKKyAgICAgICAgICAgICAgICIgcyA9ICIgKyBzICsgIiAsIG9yYiA9ICIgKyBvcmIgKworICAgICAgICAiICwgZW0gPSAiICsgZW07CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9lYXIvd2FyL0Zvb0Jhck1hbmFnZWRCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9lYXIvd2FyL0Zvb0Jhck1hbmFnZWRCZWFuLmphdmEKaW5kZXggOTcwNTIzZi4uNDk0N2YxNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZWFyL3dhci9Gb29CYXJNYW5hZ2VkQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Vhci93YXIvRm9vQmFyTWFuYWdlZEJlYW4uamF2YQpAQCAtMjMsMTIgKzIzLDEyIEBACiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vQmFyTWFuYWdlZEJlYW46OmluaXQoKSAiICsgdGhpcyk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29CYXJNYW5hZ2VkQmVhbjo6aW5pdCgpICIgKyB0aGlzKTsKICAgICB9Ci0gICAgCisKICAgICBAUHJlRGVzdHJveQogICAgIHByaXZhdGUgdm9pZCBkZXN0cm95KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vQmFyTWFuYWdlZEJlYW46OmRlc3Ryb3koKSAiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb0Jhck1hbmFnZWRCZWFuOjpkZXN0cm95KCkgIik7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9lYXIvd2FyL0hlbGxvUy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZWFyL3dhci9IZWxsb1MuamF2YQppbmRleCBmOWY5NTRlLi5iYTIwMTM2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9lYXIvd2FyL0hlbGxvUy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Vhci93YXIvSGVsbG9TLmphdmEKQEAgLTM0LDcgKzM0LDcgQEAKIAogICAgIEBQcmVEZXN0cm95CiAgICAgcHJpdmF0ZSB2b2lkIGRlc3Ryb3koKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJIZWxsb1M6OmRlc3Ryb3koKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG9TOjpkZXN0cm95KCkiKTsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Vhci93YXIvSGVsbG9TMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZWFyL3dhci9IZWxsb1MyLmphdmEKaW5kZXggYWI2YzE5Zi4uNTM2Mjg0NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZWFyL3dhci9IZWxsb1MyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZWFyL3dhci9IZWxsb1MyLmphdmEKQEAgLTMyLDcgKzMyLDcgQEAKIAogICAgIEBQcmVEZXN0cm95CiAgICAgcHJpdmF0ZSB2b2lkIGRlc3Ryb3koKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJIZWxsb1MyOjpkZXN0cm95KCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvUzI6OmRlc3Ryb3koKSIpOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZWFyL3dhci9IZWxsb1NlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2Vhci93YXIvSGVsbG9TZXJ2bGV0LmphdmEKaW5kZXggNTIxMjgzMi4uM2NlMTliNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvZWFyL3dhci9IZWxsb1NlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9lYXIvd2FyL0hlbGxvU2VydmxldC5qYXZhCkBAIC02Myw5ICs2Myw5IEBACiAgICAgcHJpdmF0ZSBIZWxsb1JlbW90ZSBzdGF0ZWxlc3MxOwogICAgIHByaXZhdGUgSGVsbG9SZW1vdGUgc3RhdGVsZXNzMjsKIAotICAgIEBSZXNvdXJjZSAKKyAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIEZvbzJNYW5hZ2VkQmVhbiBmb287Ci0gICAgCisKICAgICBAUmVzb3VyY2UobmFtZT0iZm9vMnJlZiIsIG1hcHBlZE5hbWU9ImphdmE6bW9kdWxlL3NvbWVtYW5hZ2VkYmVhbiIpCiAgICAgcHJpdmF0ZSBGb28yTWFuYWdlZEJlYW4gZm9vMjsKIApAQCAtODIsMTEyICs4MiwxMTIgQEAKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKIAotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TZXJ2bGV0Ojppbml0Iik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJteVN0cmluZyA9ICciICsgbXlTdHJpbmcgKyAiJyIpOwotCWlmKCAobXlTdHJpbmcgPT0gbnVsbCkgfHwgIShteVN0cmluZy5lcXVhbHMoIm15U3RyaW5nIikgKSApIHsKLQkgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkludmFsaWQgdmFsdWUgIiArIG15U3RyaW5nICsgIiBmb3IgbXlTdHJpbmciKTsKLQl9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NlcnZsZXQ6OmluaXQiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm15U3RyaW5nID0gJyIgKyBteVN0cmluZyArICInIik7CisgICAgaWYoIChteVN0cmluZyA9PSBudWxsKSB8fCAhKG15U3RyaW5nLmVxdWFscygibXlTdHJpbmciKSApICkgeworICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiSW52YWxpZCB2YWx1ZSAiICsgbXlTdHJpbmcgKyAiIGZvciBteVN0cmluZyIpOworICAgIH0KIAogICAgIH0KIAogICAgIEBPdmVycmlkZQogICAgIHByb3RlY3RlZCB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TZXJ2bGV0Ojpkb0dldCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TZXJ2bGV0Ojpkb0dldCIpOwogCi0JcmVzcC5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CisgICAgcmVzcC5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3AuZ2V0V3JpdGVyKCk7CiAKIAotCXRyeSB7Ci0JICAgIAotCSAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgIHRyeSB7CiAKLQkgICAgU3RyaW5nIGFwcE5hbWUgPSAoU3RyaW5nKSBpYy5sb29rdXAoImphdmE6YXBwL0FwcE5hbWUiKTsKLQkgICAgU3RyaW5nIG1vZHVsZU5hbWUgPSAoU3RyaW5nKSBpYy5sb29rdXAoImphdmE6bW9kdWxlL01vZHVsZU5hbWUiKTsKKyAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKIAotCSAgICAvLyBsb29rdXAgdmlhIGludGVybWVkaWF0ZSBjb250ZXh0IAotCSAgICBDb250ZXh0IGFwcEN0eCA9IChDb250ZXh0KSBpYy5sb29rdXAoImphdmE6YXBwIik7Ci0JICAgIENvbnRleHQgYXBwQ3R4RW52ID0gKENvbnRleHQpIGFwcEN0eC5sb29rdXAoImVudiIpOwotCSAgICBzdGF0ZWxlc3MyID0gKEhlbGxvUmVtb3RlKSBhcHBDdHhFbnYubG9va3VwKCJBUzIiKTsKLQkgICAgTmFtaW5nRW51bWVyYXRpb248QmluZGluZz4gYmluZGluZ3MgPSBhcHBDdHhFbnYubGlzdEJpbmRpbmdzKCIiKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJqYXZhOmFwcC9lbnYvIGJpbmRpbmdzICIpOwotCSAgICB3aGlsZShiaW5kaW5ncy5oYXNNb3JlKCkpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJiaW5kaW5nIDogIiArIGJpbmRpbmdzLm5leHQoKS5nZXROYW1lKCkpOwotCSAgICB9CisgICAgICAgIFN0cmluZyBhcHBOYW1lID0gKFN0cmluZykgaWMubG9va3VwKCJqYXZhOmFwcC9BcHBOYW1lIik7CisgICAgICAgIFN0cmluZyBtb2R1bGVOYW1lID0gKFN0cmluZykgaWMubG9va3VwKCJqYXZhOm1vZHVsZS9Nb2R1bGVOYW1lIik7CisKKyAgICAgICAgLy8gbG9va3VwIHZpYSBpbnRlcm1lZGlhdGUgY29udGV4dAorICAgICAgICBDb250ZXh0IGFwcEN0eCA9IChDb250ZXh0KSBpYy5sb29rdXAoImphdmE6YXBwIik7CisgICAgICAgIENvbnRleHQgYXBwQ3R4RW52ID0gKENvbnRleHQpIGFwcEN0eC5sb29rdXAoImVudiIpOworICAgICAgICBzdGF0ZWxlc3MyID0gKEhlbGxvUmVtb3RlKSBhcHBDdHhFbnYubG9va3VwKCJBUzIiKTsKKyAgICAgICAgTmFtaW5nRW51bWVyYXRpb248QmluZGluZz4gYmluZGluZ3MgPSBhcHBDdHhFbnYubGlzdEJpbmRpbmdzKCIiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJqYXZhOmFwcC9lbnYvIGJpbmRpbmdzICIpOworICAgICAgICB3aGlsZShiaW5kaW5ncy5oYXNNb3JlKCkpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJiaW5kaW5nIDogIiArIGJpbmRpbmdzLm5leHQoKS5nZXROYW1lKCkpOworICAgICAgICB9CiAKIAotCSAgICBmb280ID0gKEZvbzJNYW5hZ2VkQmVhbikgaWMubG9va3VwKCJqYXZhOm1vZHVsZS9zb21lbWFuYWdlZGJlYW4iKTsKLQkgICAgZm9vNSA9IChGb28yTWFuYWdlZEJlYW4pIGljLmxvb2t1cCgiamF2YTphcHAvIiArIG1vZHVsZU5hbWUgKwotCQkJCQkJICAiL3NvbWVtYW5hZ2VkYmVhbiIpOwotCSAgICBmb282ID0gKEZvbykgaWMubG9va3VwKCJqYXZhOmFwcC9lamItZWpiMzEtZnVsbC1lYXItZWpiL3NvbWVtYW5hZ2VkYmVhbiIpOwotCSAgICBmb283ID0gKEZvbzJNYW5hZ2VkQmVhbikgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2ZvbzJyZWYiKTsKLQkgICAgZm9vOCA9IChGb28pIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9mb28zcmVmIik7CisgICAgICAgIGZvbzQgPSAoRm9vMk1hbmFnZWRCZWFuKSBpYy5sb29rdXAoImphdmE6bW9kdWxlL3NvbWVtYW5hZ2VkYmVhbiIpOworICAgICAgICBmb281ID0gKEZvbzJNYW5hZ2VkQmVhbikgaWMubG9va3VwKCJqYXZhOmFwcC8iICsgbW9kdWxlTmFtZSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICIvc29tZW1hbmFnZWRiZWFuIik7CisgICAgICAgIGZvbzYgPSAoRm9vKSBpYy5sb29rdXAoImphdmE6YXBwL2VqYi1lamIzMS1mdWxsLWVhci1lamIvc29tZW1hbmFnZWRiZWFuIik7CisgICAgICAgIGZvbzcgPSAoRm9vMk1hbmFnZWRCZWFuKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZm9vMnJlZiIpOworICAgICAgICBmb284ID0gKEZvbykgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2ZvbzNyZWYiKTsKIAogCi0JICAgIHNpbmdsZXRvbjEgPSAoSGVsbG8pIGljLmxvb2t1cCgiamF2YTptb2R1bGUvbTEiKTsKKyAgICAgICAgc2luZ2xldG9uMSA9IChIZWxsbykgaWMubG9va3VwKCJqYXZhOm1vZHVsZS9tMSIpOwogCi0JICAgIC8vIHN0YW5kYXJkIGphdmE6YXBwIG5hbWUgZm9yIGVqYiAKLQkgICAgc2luZ2xldG9uMiA9IChIZWxsbykgaWMubG9va3VwKCJqYXZhOmFwcC9lamItZWpiMzEtZnVsbC1lYXItZWpiL0hlbGxvU2luZ2xldG9uIik7CisgICAgICAgIC8vIHN0YW5kYXJkIGphdmE6YXBwIG5hbWUgZm9yIGVqYgorICAgICAgICBzaW5nbGV0b24yID0gKEhlbGxvKSBpYy5sb29rdXAoImphdmE6YXBwL2VqYi1lamIzMS1mdWxsLWVhci1lamIvSGVsbG9TaW5nbGV0b24iKTsKIAotCSAgICBzaW5nbGV0b24zID0gKEhlbGxvKSBpYy5sb29rdXAoImphdmE6Z2xvYmFsLyIgKyBhcHBOYW1lICsgIi9lamItZWpiMzEtZnVsbC1lYXItZWpiL0hlbGxvU2luZ2xldG9uIik7CisgICAgICAgIHNpbmdsZXRvbjMgPSAoSGVsbG8pIGljLmxvb2t1cCgiamF2YTpnbG9iYWwvIiArIGFwcE5hbWUgKyAiL2VqYi1lamIzMS1mdWxsLWVhci1lamIvSGVsbG9TaW5nbGV0b24iKTsKIAotCSAgICAvLyBsb29rdXAgc29tZSBqYXZhOmFwcCBkZWZpbmVkIGJ5IGVqYi1qYXIKLQkgICAgc2luZ2xldG9uNCA9IChIZWxsbykgaWMubG9va3VwKCJqYXZhOmFwcC9lbnYvQVMxIik7CisgICAgICAgIC8vIGxvb2t1cCBzb21lIGphdmE6YXBwIGRlZmluZWQgYnkgZWpiLWphcgorICAgICAgICBzaW5nbGV0b240ID0gKEhlbGxvKSBpYy5sb29rdXAoImphdmE6YXBwL2Vudi9BUzEiKTsKIAotCSAgICAvLyBnbG9iYWwgZGVwZW5kZW5jeQotCSAgICBzaW5nbGV0b241ID0gKEhlbGxvKSBpYy5sb29rdXAoImphdmE6Z2xvYmFsL0dTMSIpOworICAgICAgICAvLyBnbG9iYWwgZGVwZW5kZW5jeQorICAgICAgICBzaW5nbGV0b241ID0gKEhlbGxvKSBpYy5sb29rdXAoImphdmE6Z2xvYmFsL0dTMSIpOwogCiAKLQkgICAgc3RhdGVsZXNzMSA9IChIZWxsb1JlbW90ZSkgaWMubG9va3VwKCJqYXZhOmFwcC9lbnYvQVMyIik7CisgICAgICAgIHN0YXRlbGVzczEgPSAoSGVsbG9SZW1vdGUpIGljLmxvb2t1cCgiamF2YTphcHAvZW52L0FTMiIpOwogCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTXkgQXBwTmFtZSA9ICIgKyAKLQkJCSAgICAgICBpYy5sb29rdXAoImphdmE6YXBwL0FwcE5hbWUiKSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTXkgQXBwTmFtZSA9ICIgKworICAgICAgICAgICAgICAgICAgIGljLmxvb2t1cCgiamF2YTphcHAvQXBwTmFtZSIpKTsKIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk15IE1vZHVsZU5hbWUgPSAiICsgCi0JCQkgICAgICAgaWMubG9va3VwKCJqYXZhOm1vZHVsZS9Nb2R1bGVOYW1lIikpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk15IE1vZHVsZU5hbWUgPSAiICsKKyAgICAgICAgICAgICAgICAgICBpYy5sb29rdXAoImphdmE6bW9kdWxlL01vZHVsZU5hbWUiKSk7CiAKIAogCi0JICAgIHRyeSB7Ci0JCW9yZy5vbWcuQ09SQkEuT1JCIG9yYiA9IChvcmcub21nLkNPUkJBLk9SQikgaWMubG9va3VwKCJqYXZhOm1vZHVsZS9NT1JCMSIpOwotCQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiU2hvdWxkIGhhdmUgZ290dGVuIG5hbWluZyBleGNlcHRpb24iKTsKLQkgICAgfSBjYXRjaChOYW1pbmdFeGNlcHRpb24gbmUpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgd2FzICpub3QqIGFibGUgdG8gc2VlIGVqYi1qYXIgbW9kdWxlLWxldmVsIGRlcGVuZGVuY3kiKTsKLQkgICAgfQorICAgICAgICB0cnkgeworICAgICAgICBvcmcub21nLkNPUkJBLk9SQiBvcmIgPSAob3JnLm9tZy5DT1JCQS5PUkIpIGljLmxvb2t1cCgiamF2YTptb2R1bGUvTU9SQjEiKTsKKyAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlNob3VsZCBoYXZlIGdvdHRlbiBuYW1pbmcgZXhjZXB0aW9uIik7CisgICAgICAgIH0gY2F0Y2goTmFtaW5nRXhjZXB0aW9uIG5lKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IHdhcyAqbm90KiBhYmxlIHRvIHNlZSBlamItamFyIG1vZHVsZS1sZXZlbCBkZXBlbmRlbmN5Iik7CisgICAgICAgIH0KIAotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KIAotCWZvby5mb28oKTsKLQlmb28yLmZvbygpOwotCWZvbzMuZm9vKCk7CisgICAgZm9vLmZvbygpOworICAgIGZvbzIuZm9vKCk7CisgICAgZm9vMy5mb28oKTsKIAotCWZvbzQuZm9vKCk7Ci0JZm9vNS5mb28oKTsKLQlmb282LmZvbygpOwotCWZvbzcuZm9vKCk7Ci0gICAgICAJZm9vOC5mb28oKTsKKyAgICBmb280LmZvbygpOworICAgIGZvbzUuZm9vKCk7CisgICAgZm9vNi5mb28oKTsKKyAgICBmb283LmZvbygpOworICAgICAgICAgIGZvbzguZm9vKCk7CiAKLQltMS5oZWxsbygpOwotCWExLmhlbGxvKCk7Ci0JYTIuaGVsbG8oKTsKLQlzaW5nbGV0b24xLmhlbGxvKCk7Ci0Jc2luZ2xldG9uMi5oZWxsbygpOwotCXNpbmdsZXRvbjMuaGVsbG8oKTsKLQlzaW5nbGV0b240LmhlbGxvKCk7Ci0Jc2luZ2xldG9uNS5oZWxsbygpOworICAgIG0xLmhlbGxvKCk7CisgICAgYTEuaGVsbG8oKTsKKyAgICBhMi5oZWxsbygpOworICAgIHNpbmdsZXRvbjEuaGVsbG8oKTsKKyAgICBzaW5nbGV0b24yLmhlbGxvKCk7CisgICAgc2luZ2xldG9uMy5oZWxsbygpOworICAgIHNpbmdsZXRvbjQuaGVsbG8oKTsKKyAgICBzaW5nbGV0b241LmhlbGxvKCk7CiAKLQlzdGF0ZWxlc3MxLmhlbGxvKCk7Ci0Jc3RhdGVsZXNzMi5oZWxsbygpOworICAgIHN0YXRlbGVzczEuaGVsbG8oKTsKKyAgICBzdGF0ZWxlc3MyLmhlbGxvKCk7CiAKIAotICAgICAgIAlvdXQucHJpbnRsbigiPEhUTUw+IDxIRUFEPiA8VElUTEU+IEpNUyBTZXJ2bGV0IE91dHB1dCA8L1RJVExFPiA8L0hFQUQ+IDxCT0RZIEJHQ09MT1I9d2hpdGU+Iik7CisgICAgICAgICAgIG91dC5wcmludGxuKCI8SFRNTD4gPEhFQUQ+IDxUSVRMRT4gSk1TIFNlcnZsZXQgT3V0cHV0IDwvVElUTEU+IDwvSEVBRD4gPEJPRFkgQkdDT0xPUj13aGl0ZT4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8Q0VOVEVSPiA8Rk9OVCBzaXplPSsxIENPTE9SPWJsdWU+RGF0YWJhc2VTZXJ2ZWx0IDo6IEFsbCBpbmZvcm1hdGlvbiBJIGNhbiBnaXZlIDwvRk9OVD4gPC9DRU5URVI+IDxwPiAiICk7Ci0gICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IENvbnRleHQgUGF0aCA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0Q29udGV4dFBhdGgoKSArICI8YnI+IiApOyAKLSAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gU2VydmxldCBQYXRoIDogIDwvRk9OVD4gIiArIHJlcS5nZXRTZXJ2bGV0UGF0aCgpICsgIjxicj4iICk7IAotICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBQYXRoIEluZm8gOiAgPC9GT05UPiAiICsgcmVxLmdldFBhdGhJbmZvKCkgKyAiPGJyPiIgKTsgCisgICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IENvbnRleHQgUGF0aCA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0Q29udGV4dFBhdGgoKSArICI8YnI+IiApOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBTZXJ2bGV0IFBhdGggOiAgPC9GT05UPiAiICsgcmVxLmdldFNlcnZsZXRQYXRoKCkgKyAiPGJyPiIgKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gUGF0aCBJbmZvIDogIDwvRk9OVD4gIiArIHJlcS5nZXRQYXRoSW5mbygpICsgIjxicj4iICk7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9CT0RZPiA8L0hUTUw+ICIpOwogCiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYWYxY2ViOC4uNGIxNDcwYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMiArMTUsMTIgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lamIzMS1mdWxsLWpjZGlmdWxsIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAKLTxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz5cdTAwMjAKKzxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic2UuY2xpZW50IiB2YWx1ZT0iY29tLmFjbWUuQ2xpZW50Ii8+Ci0JCisKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvYnVpbGQueG1sCmluZGV4IDAxNDgxMWUuLmU3YmRlNDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICAgIDxqYXZhYyBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbW9kdWxlcy93ZWxkLW9zZ2ktYnVuZGxlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIHNyY2Rpcj0iZWpiIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgZGVidWc9Im9uIiBmYWlsb25lcnJvcj0idHJ1ZSIgaW5jbHVkZWFudHJ1bnRpbWU9ImZhbHNlIiA+CkBAIC00MywyMyArNDMsMjMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVqYi1qYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLQk8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXIiIAotICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiAKKyAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXIiCisgICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICAgdXBkYXRlPSJ0cnVlIj4KICAgICAgICAgICAgICA8bWV0YWluZiBkaXI9ImRlc2NyaXB0b3IiPgogICAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iYmVhbnMueG1sIi8+Ci0gICAgICAgICAgICAgPC9tZXRhaW5mPiAKKyAgICAgICAgICAgICA8L21ldGFpbmY+CiAgICAgICAgIDwvamFyPgotCTwhLS0gZG8gY2xpZW50IGNvbXBpbGUgYWZ0ZXIgc28gdGhlIGNsYXNzZXMgYXJlbid0IHBhcnQgb2YgZWpiLWphciAtLT4KKyAgICA8IS0tIGRvIGNsaWVudCBjb21waWxlIGFmdGVyIHNvIHRoZSBjbGFzc2VzIGFyZW4ndCBwYXJ0IG9mIGVqYi1qYXIgLS0+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNsaWVudCIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qYXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Nyw5ICs2Nyw5IEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5fc2UiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuX3NlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgPGphdmEgIGZvcms9Im9uIiAKKyAgICAgICA8amF2YSAgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSIke3NlLmNsaWVudH0iPgpAQCAtODEsNyArODEsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWphci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGE3NjFkMjkuLjUwOWIxNzUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI2LDM3ICsyNiwzNyBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgYXBwTmFtZTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKIAotCWFwcE5hbWUgPSBhcmdzWzBdOyAKLQlzdGF0LmFkZERlc2NyaXB0aW9uKGFwcE5hbWUpOwotCUNsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOyAgICAgICAKLSAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzWzFdKTsJCisgICAgYXBwTmFtZSA9IGFyZ3NbMF07CisgICAgc3RhdC5hZGREZXNjcmlwdGlvbihhcHBOYW1lKTsKKyAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKKyAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzWzFdKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoYXBwTmFtZSArICJJRCIpOwogICAgIH0KIAotICAgIHB1YmxpYyBDbGllbnQoU3RyaW5nW10gYXJncykgewkKKyAgICBwdWJsaWMgQ2xpZW50KFN0cmluZ1tdIGFyZ3MpIHsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nIG90aGVyQXBwKSB7CiAKLQl0cnkgeworICAgIHRyeSB7CiAKLQkgICAgU2luZ2xldG9uUmVtb3RlIHNpbmdsZXRvbiA9IChTaW5nbGV0b25SZW1vdGUpIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpnbG9iYWwvIiArIGFwcE5hbWUgKyAiL1NpbmdsZXRvbkJlYW4iKTsKKyAgICAgICAgU2luZ2xldG9uUmVtb3RlIHNpbmdsZXRvbiA9IChTaW5nbGV0b25SZW1vdGUpIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpnbG9iYWwvIiArIGFwcE5hbWUgKyAiL1NpbmdsZXRvbkJlYW4iKTsKIAotCSAgICBzaW5nbGV0b24uaGVsbG8oKTsKKyAgICAgICAgc2luZ2xldG9uLmhlbGxvKCk7CiAKLQkgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LlBBU1MpOworICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuUEFTUyk7CiAKLQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5GQUlMKTsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuRkFJTCk7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQogCiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9lamIvQmFyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9lamIvQmFyLmphdmEKaW5kZXggYzk3ODE3OC4uZThmMWI5ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL0Jhci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9CYXIuamF2YQpAQCAtMjksNyArMjksNyBAQAogICAgIEBSZXNvdXJjZShuYW1lPSJqZGJjL19fZGVmYXVsdCIpIGphdmF4LnNxbC5EYXRhU291cmNlIGRzOwogCiAgICAgcHVibGljIEJhcigpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkNvbnN0cnVjdGVkOjpCYXIiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbnN0cnVjdGVkOjpCYXIiKTsKICAgICB9CiAKICAgICBAUG9zdENvbnN0cnVjdApAQCAtNDYsNyArNDYsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JcmV0dXJuICJCYXIiOworICAgIHJldHVybiAiQmFyIjsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9CYXIyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9lamIvQmFyMi5qYXZhCmluZGV4IDViZWQ1YzIuLjk3MjVlNWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9CYXIyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL0JhcjIuamF2YQpAQCAtMTksMTEgKzE5LDExIEBACiBwdWJsaWMgY2xhc3MgQmFyMiB7CiAKICAgICBwdWJsaWMgQmFyMigpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkNvbnN0cnVjdGVkOjpCYXIyIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25zdHJ1Y3RlZDo6QmFyMiIpOwogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JcmV0dXJuICJCYXIyIjsKKyAgICByZXR1cm4gIkJhcjIiOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL0RlcGVuZGVudFdpdGhJbmplY3RlZERhdGFTb3VyY2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9EZXBlbmRlbnRXaXRoSW5qZWN0ZWREYXRhU291cmNlLmphdmEKaW5kZXggNjc1NDVlMi4uMjM0NThmYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL0RlcGVuZGVudFdpdGhJbmplY3RlZERhdGFTb3VyY2UuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9lamIvRGVwZW5kZW50V2l0aEluamVjdGVkRGF0YVNvdXJjZS5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAgICAgcHJpdmF0ZSBqYXZheC5zcWwuRGF0YVNvdXJjZSBkczsKIAogICAgIHB1YmxpYyBEZXBlbmRlbnRXaXRoSW5qZWN0ZWREYXRhU291cmNlKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiQ29uc3RydWN0ZWQ6OkRlcGVuZGVudFdpdGhJbmplY3RlZERhdGFTb3VyY2UiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbnN0cnVjdGVkOjpEZXBlbmRlbnRXaXRoSW5qZWN0ZWREYXRhU291cmNlIik7CiAgICAgfQogCiAgICAgQFBvc3RDb25zdHJ1Y3QKQEAgLTQwLDcgKzQwLDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotCXJldHVybiAiRGVwZW5kZW50V2l0aEluamVjdGVkRGF0YVNvdXJjZSI7CisgICAgcmV0dXJuICJEZXBlbmRlbnRXaXRoSW5qZWN0ZWREYXRhU291cmNlIjsKICAgICB9CiAKICAgICAvKioKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9Gb28uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9Gb28uamF2YQppbmRleCBlMDJhMzA2Li45OGU1OTZhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9lamIvRm9vLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL0Zvby5qYXZhCkBAIC0yNiwxMiArMjYsMTIgQEAKICAgICBpbnQgaWQgPSAwOwogCiAgICAgcHVibGljIEZvbygpIHsKLQlpZCA9IGNvdW50OwotCWNvdW50Kys7CisgICAgaWQgPSBjb3VudDsKKyAgICBjb3VudCsrOwogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JcmV0dXJuICJGb28iICsgaWQ7CisgICAgcmV0dXJuICJGb28iICsgaWQ7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9lamIvRm9vTWFuYWdlZEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9Gb29NYW5hZ2VkQmVhbi5qYXZhCmluZGV4IDBkMmI4MzAuLjM3MzlkNDUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9Gb29NYW5hZ2VkQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9Gb29NYW5hZ2VkQmVhbi5qYXZhCkBAIC0zNSwyNyArMzUsMjcgQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29NYW5hZ2VkQmVhbjppbml0KCkiKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIm9yYiA9ICIgKyBvcmIpOwotCWlmKCBvcmIgPT0gbnVsbCApIHsKLQkgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIm51bGwgb3JiIik7Ci0JfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vTWFuYWdlZEJlYW46aW5pdCgpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJvcmIgPSAiICsgb3JiKTsKKyAgICBpZiggb3JiID09IG51bGwgKSB7CisgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJudWxsIG9yYiIpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBoZWxsbygpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb01hbmFnZWRCZWFuOjpoZWxsbygpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29NYW5hZ2VkQmVhbjo6aGVsbG8oKSIpOwogICAgIH0KIAogCiAgICAgcHVibGljIHZvaWQgYXNzZXJ0SW50ZXJjZXB0b3JCaW5kaW5nKCkgewotCWlmKCAhaW50ZXJjZXB0b3JXYXNIZXJlICkgewotCSAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiaW50ZXJjZXB0b3Igd2FzIG5vdCBoZXJlIik7Ci0JfQorICAgIGlmKCAhaW50ZXJjZXB0b3JXYXNIZXJlICkgeworICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiaW50ZXJjZXB0b3Igd2FzIG5vdCBoZXJlIik7CisgICAgfQogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CiAgICAgcHJpdmF0ZSB2b2lkIGRlc3Ryb3koKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29NYW5hZ2VkQmVhbjpkZXN0cm95KCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb01hbmFnZWRCZWFuOmRlc3Ryb3koKSIpOwogICAgIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9lamIvRm9vTm9uTWFuYWdlZEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9Gb29Ob25NYW5hZ2VkQmVhbi5qYXZhCmluZGV4IDk0ZmZjOTYuLjU4YWYwNzkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9Gb29Ob25NYW5hZ2VkQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9Gb29Ob25NYW5hZ2VkQmVhbi5qYXZhCkBAIC0yOSwyMCArMjksMjAgQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29Ob25NYW5hZ2VkQmVhbjppbml0KCkiKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIm9yYiA9ICIgKyBvcmIpOwotCWlmKCBvcmIgPT0gbnVsbCApIHsKLQkgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIm51bGwgb3JiIik7Ci0JfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vTm9uTWFuYWdlZEJlYW46aW5pdCgpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJvcmIgPSAiICsgb3JiKTsKKyAgICBpZiggb3JiID09IG51bGwgKSB7CisgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJudWxsIG9yYiIpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBoZWxsbygpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb05vbk1hbmFnZWRCZWFuOjpoZWxsbygpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29Ob25NYW5hZ2VkQmVhbjo6aGVsbG8oKSIpOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CiAgICAgcHJpdmF0ZSB2b2lkIGRlc3Ryb3koKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29Ob25NYW5hZ2VkQmVhbjpkZXN0cm95KCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb05vbk1hbmFnZWRCZWFuOmRlc3Ryb3koKSIpOwogICAgIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9lamIvSW50ZXJjZXB0b3JBLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9lamIvSW50ZXJjZXB0b3JBLmphdmEKaW5kZXggYjZmMDNlYy4uODMxMWMwMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL0ludGVyY2VwdG9yQS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9JbnRlcmNlcHRvckEuamF2YQpAQCAtMjYsMjUgKzI2LDI1IEBACiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0KEludm9jYXRpb25Db250ZXh0IGMpIHRocm93cyBFeGNlcHRpb24gewotCVN5c3RlbS5lcnIucHJpbnRsbigiSW4gSW50ZXJjZXB0b3JBOjppbml0KCkgIik7Ci0JYy5wcm9jZWVkKCk7CisgICAgU3lzdGVtLmVyci5wcmludGxuKCJJbiBJbnRlcmNlcHRvckE6OmluaXQoKSAiKTsKKyAgICBjLnByb2NlZWQoKTsKICAgICB9CiAKIAogICAgIEBBcm91bmRJbnZva2UKICAgICBwcml2YXRlIE9iamVjdCByb3VuZEludm9rZShJbnZvY2F0aW9uQ29udGV4dCBjKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQlTeXN0ZW0uZXJyLnByaW50bG4oIj09PT4gSW4gSW50ZXJjZXB0b3JBOjphcm91bmRJbnZva2UoKSAiKTsKKyAgICBTeXN0ZW0uZXJyLnByaW50bG4oIj09PT4gSW4gSW50ZXJjZXB0b3JBOjphcm91bmRJbnZva2UoKSAiKTsKICAgICAgICAgaWYgKChjLmdldFRhcmdldCgpIGluc3RhbmNlb2YgU3RhdGVsZXNzQmVhbikgJiYgYy5nZXRNZXRob2QoKS5nZXROYW1lKCkuZXF1YWxzKCJoZWxsbyIpKSB7CiAgICAgICAgICAgICBTdGF0ZWxlc3NCZWFuIHNiID0gKFN0YXRlbGVzc0JlYW4pYy5nZXRUYXJnZXQoKTsKICAgICAgICAgICAgIHNiLmludGVyY2VwdG9yQ2FsbGVkKDApOwogICAgICAgICB9Ci0JcmV0dXJuIGMucHJvY2VlZCgpOworICAgIHJldHVybiBjLnByb2NlZWQoKTsKICAgICB9CiAKICAgICBAUHJlRGVzdHJveQogICAgIHByaXZhdGUgdm9pZCBkZXN0cm95KEludm9jYXRpb25Db250ZXh0IGMpIHRocm93cyBFeGNlcHRpb24gewotCVN5c3RlbS5lcnIucHJpbnRsbigiSW4gSW50ZXJjZXB0b3JBOjpkZXN0cm95KCkgIik7Ci0JYy5wcm9jZWVkKCk7CisgICAgU3lzdGVtLmVyci5wcmludGxuKCJJbiBJbnRlcmNlcHRvckE6OmRlc3Ryb3koKSAiKTsKKyAgICBjLnByb2NlZWQoKTsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9TZW50ZW5jZVBhcnNlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL1NlbnRlbmNlUGFyc2VyLmphdmEKaW5kZXggZDQwMWNjZS4uMTE2OGVhYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL1NlbnRlbmNlUGFyc2VyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL1NlbnRlbmNlUGFyc2VyLmphdmEKQEAgLTE5LDEyICsxOSwxMiBAQAogaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiAKLXB1YmxpYyBjbGFzcyBTZW50ZW5jZVBhcnNlciAgCi17IAotICAgCi0gICBwdWJsaWMgTGlzdDxTdHJpbmc+IHBhcnNlKFN0cmluZyB0ZXh0KSAKK3B1YmxpYyBjbGFzcyBTZW50ZW5jZVBhcnNlcgoreworCisgICBwdWJsaWMgTGlzdDxTdHJpbmc+IHBhcnNlKFN0cmluZyB0ZXh0KQogICAgewogICAgICAgcmV0dXJuIEFycmF5cy5hc0xpc3QoIHRleHQuc3BsaXQoIlsuP10iKSApOwogICAgfQotICAgCi19IAorCit9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9lamIvU2VudGVuY2VUcmFuc2xhdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9lamIvU2VudGVuY2VUcmFuc2xhdG9yLmphdmEKaW5kZXggNzZmMDc3My4uYTRkZDkyYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL1NlbnRlbmNlVHJhbnNsYXRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9TZW50ZW5jZVRyYW5zbGF0b3IuamF2YQpAQCAtMTksMTIgKzE5LDEyIEBACiBpbXBvcnQgamFrYXJ0YS5lamIuU3RhdGVsZXNzOwogCiBAU3RhdGVsZXNzCi1wdWJsaWMgY2xhc3MgU2VudGVuY2VUcmFuc2xhdG9yIGltcGxlbWVudHMgVHJhbnNsYXRvciAKLXsgCi0gICAKLSAgIHB1YmxpYyBTdHJpbmcgdHJhbnNsYXRlKFN0cmluZyBzZW50ZW5jZSkgCi0gICB7IAotICAgICAgcmV0dXJuICJMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCI7IAorcHVibGljIGNsYXNzIFNlbnRlbmNlVHJhbnNsYXRvciBpbXBsZW1lbnRzIFRyYW5zbGF0b3IKK3sKKworICAgcHVibGljIFN0cmluZyB0cmFuc2xhdGUoU3RyaW5nIHNlbnRlbmNlKQorICAgeworICAgICAgcmV0dXJuICJMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCI7CiAgICB9Ci0gICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL1NpbmdsZXRvbkJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKaW5kZXggOGQ4NTNhMi4uMDhkMGRhYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL1NpbmdsZXRvbkJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9lamIvU2luZ2xldG9uQmVhbi5qYXZhCkBAIC0zOCwxNCArMzgsMTQgQEAKIAogICAgIEBJbmplY3QKICAgICBwcml2YXRlIEV2ZW50PFNvbWVFdmVudD4gc29tZUV2ZW50OwotICAgIAorCiAgICAgQEluamVjdCBGb28gZm9vOwogCiAgICAgQEVKQgotCXByaXZhdGUgU3RhdGVsZXNzTG9jYWwgc3RhdGVsZXNzRUU7CisgICAgcHJpdmF0ZSBTdGF0ZWxlc3NMb2NhbCBzdGF0ZWxlc3NFRTsKIAogICAgIEBJbmplY3QKLQlwcml2YXRlIFN0YXRlbGVzc0xvY2FsMiBzbDI7CisgICAgcHJpdmF0ZSBTdGF0ZWxlc3NMb2NhbDIgc2wyOwogCiAgICAgQEluamVjdCBwcml2YXRlIFRyYW5zbGF0b3JDb250cm9sbGVyIHRjOwogCkBAIC01NCw1MiArNTQsNTIgQEAKIAogICAgIEBSZXNvdXJjZQogICAgIHByaXZhdGUgQmVhbk1hbmFnZXIgYmVhbk1hbmFnZXJJbmplY3Q7Ci0gICAgCisKICAgICBAUmVzb3VyY2UgU2Vzc2lvbkNvbnRleHQgc2VzQ3R4OwogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwdWJsaWMgdm9pZCBpbml0KCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46OmluaXQoKSIpOwotCWlmKCBiZWFuTWFuYWdlckluamVjdCA9PSBudWxsICkgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJCZWFuTWFuYWdlciBpcyBudWxsIik7Ci0JfQotCVN5c3RlbS5vdXQucHJpbnRsbigiQmVhbiBtYW5hZ2VyIGluamVjdCA9ICIgKyBiZWFuTWFuYWdlckluamVjdCk7Ci0JdGVzdElNQ3JlYXRlRGVzdHJveU1PKCk7CisgICAgaWYoIGJlYW5NYW5hZ2VySW5qZWN0ID09IG51bGwgKSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIkJlYW5NYW5hZ2VyIGlzIG51bGwiKTsKKyAgICB9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJCZWFuIG1hbmFnZXIgaW5qZWN0ID0gIiArIGJlYW5NYW5hZ2VySW5qZWN0KTsKKyAgICB0ZXN0SU1DcmVhdGVEZXN0cm95TU8oKTsKIAogCi0JU3lzdGVtLm91dC5wcmludGxuKCJTZW5kaW5nIHNvbWUgZXZlbnQuLi4iKTsKLQlzb21lRXZlbnQuZmlyZSggbmV3IFNvbWVFdmVudCgyKSApOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VuZGluZyBzb21lIGV2ZW50Li4uIik7CisgICAgc29tZUV2ZW50LmZpcmUoIG5ldyBTb21lRXZlbnQoMikgKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBoZWxsbygpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46OmhlbGxvKCkgIiArIGZvbyk7Ci0Jc3RhdGVsZXNzRUUuaGVsbG8oKTsKLQlzbDIuaGVsbG8oKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46OmhlbGxvKCkgIiArIGZvbyk7CisgICAgc3RhdGVsZXNzRUUuaGVsbG8oKTsKKyAgICBzbDIuaGVsbG8oKTsKIAotCWZtYi5oZWxsbygpOwotCQotCUJlYW5NYW5hZ2VyIGJlYW5NZ3IgPSAoQmVhbk1hbmFnZXIpCi0JICAgIHNlc0N0eC5sb29rdXAoImphdmE6Y29tcC9CZWFuTWFuYWdlciIpOworICAgIGZtYi5oZWxsbygpOworCisgICAgQmVhbk1hbmFnZXIgYmVhbk1nciA9IChCZWFuTWFuYWdlcikKKyAgICAgICAgc2VzQ3R4Lmxvb2t1cCgiamF2YTpjb21wL0JlYW5NYW5hZ2VyIik7CiAKIAotCVN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCBiZWFuIG1hbmFnZXIgIiArCi0JCQkgICBiZWFuTWdyICsgIiBmb3IgSkNESSBlbmFibGVkIGFwcCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCBiZWFuIG1hbmFnZXIgIiArCisgICAgICAgICAgICAgICBiZWFuTWdyICsgIiBmb3IgSkNESSBlbmFibGVkIGFwcCIpOwogCi0JLyoqCi0JU3RhdGVmdWxCZWFuIHNiID0gKFN0YXRlZnVsQmVhbikgc2VzQ3R4Lmxvb2t1cCgiamF2YTptb2R1bGUvU3RhdGVmdWxCZWFuIik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuIHNiID0gIiArIHNiKTsKLQlzYi5oZWxsbygpOwotCSoqLworICAgIC8qKgorICAgIFN0YXRlZnVsQmVhbiBzYiA9IChTdGF0ZWZ1bEJlYW4pIHNlc0N0eC5sb29rdXAoImphdmE6bW9kdWxlL1N0YXRlZnVsQmVhbiIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbiBzYiA9ICIgKyBzYik7CisgICAgc2IuaGVsbG8oKTsKKyAgICAqKi8KIAogICAgIH0KIAogICAgIEBTY2hlZHVsZShzZWNvbmQ9IiovMTAiLCBtaW51dGU9IioiLCBob3VyPSIqIikKLQlwcml2YXRlIHZvaWQgdGltZW91dCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46OnRpbWVvdXQoKSAiICsgZm9vKTsKKyAgICBwcml2YXRlIHZvaWQgdGltZW91dCgpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46OnRpbWVvdXQoKSAiICsgZm9vKTsKIAotCVN5c3RlbS5vdXQucHJpbnRsbigidGMuZ2V0VGV4dCgpID0gIiArIHRjLmdldFRleHQoKSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0Yy5nZXRUZXh0KCkgPSAiICsgdGMuZ2V0VGV4dCgpKTsKIAotCXN0YXRlbGVzc0VFLmhlbGxvKCk7CisgICAgc3RhdGVsZXNzRUUuaGVsbG8oKTsKICAgICB9CiAKICAgICBAUHJlRGVzdHJveQpAQCAtMTA5LDI5ICsxMDksMjkgQEAKIAogICAgIHByaXZhdGUgdm9pZCB0ZXN0SU1DcmVhdGVEZXN0cm95TU8oKSB7CiAKLQl0cnkgeworICAgIHRyeSB7CiAKLQkgICAgLy8gVGVzdCBJbmplY3Rpb25NYW5hZ2VyIG1hbmFnZWQgYmVhbiBmdW5jdGlvbmFsaXR5Ci0JICAgIE9iamVjdCBpbmplY3Rpb25NZ3IgPSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImNvbS5zdW4uZW50ZXJwcmlzZS5jb250YWluZXIuY29tbW9uLnNwaS51dGlsLkluamVjdGlvbk1hbmFnZXIiKTsKLQkgICAgTWV0aG9kIGNyZWF0ZU1hbmFnZWRNZXRob2QgPSBpbmplY3Rpb25NZ3IuZ2V0Q2xhc3MoKS5nZXRNZXRob2QoImNyZWF0ZU1hbmFnZWRPYmplY3QiLCBqYXZhLmxhbmcuQ2xhc3MuY2xhc3MpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNyZWF0ZSBtYW5hZ2VkIG9iamVjdCBtZXRob2QgPSAiICsgY3JlYXRlTWFuYWdlZE1ldGhvZCk7Ci0JICAgIEZvb01hbmFnZWRCZWFuIGYyID0gKEZvb01hbmFnZWRCZWFuKSBjcmVhdGVNYW5hZ2VkTWV0aG9kLmludm9rZShpbmplY3Rpb25NZ3IsIEZvb01hbmFnZWRCZWFuLmNsYXNzKTsKLQkgICAgZjIuaGVsbG8oKTsKLQkKLQotCSAgICBNZXRob2QgZGVzdHJveU1hbmFnZWRNZXRob2QgPSBpbmplY3Rpb25NZ3IuZ2V0Q2xhc3MoKS5nZXRNZXRob2QoImRlc3Ryb3lNYW5hZ2VkT2JqZWN0IiwgamF2YS5sYW5nLk9iamVjdC5jbGFzcyk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZGVzdHJveSBtYW5hZ2VkIG9iamVjdCBtZXRob2QgPSAiICsgZGVzdHJveU1hbmFnZWRNZXRob2QpOwotCSAgICBkZXN0cm95TWFuYWdlZE1ldGhvZC5pbnZva2UoaW5qZWN0aW9uTWdyLCBmMik7Ci0KLQkgICAgIEZvb05vbk1hbmFnZWRCZWFuIG5vbkYgPSAoRm9vTm9uTWFuYWdlZEJlYW4pIGNyZWF0ZU1hbmFnZWRNZXRob2QuaW52b2tlKGluamVjdGlvbk1nciwgRm9vTm9uTWFuYWdlZEJlYW4uY2xhc3MpOwotCSAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGb29Ob25NYW5hZ2VkQmVhbiA9ICIgKyBub25GKTsKLQkgICAgIG5vbkYuaGVsbG8oKTsKLQkgICAgIGRlc3Ryb3lNYW5hZ2VkTWV0aG9kLmludm9rZShpbmplY3Rpb25NZ3IsIG5vbkYpOworICAgICAgICAvLyBUZXN0IEluamVjdGlvbk1hbmFnZXIgbWFuYWdlZCBiZWFuIGZ1bmN0aW9uYWxpdHkKKyAgICAgICAgT2JqZWN0IGluamVjdGlvbk1nciA9IG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiY29tLnN1bi5lbnRlcnByaXNlLmNvbnRhaW5lci5jb21tb24uc3BpLnV0aWwuSW5qZWN0aW9uTWFuYWdlciIpOworICAgICAgICBNZXRob2QgY3JlYXRlTWFuYWdlZE1ldGhvZCA9IGluamVjdGlvbk1nci5nZXRDbGFzcygpLmdldE1ldGhvZCgiY3JlYXRlTWFuYWdlZE9iamVjdCIsIGphdmEubGFuZy5DbGFzcy5jbGFzcyk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY3JlYXRlIG1hbmFnZWQgb2JqZWN0IG1ldGhvZCA9ICIgKyBjcmVhdGVNYW5hZ2VkTWV0aG9kKTsKKyAgICAgICAgRm9vTWFuYWdlZEJlYW4gZjIgPSAoRm9vTWFuYWdlZEJlYW4pIGNyZWF0ZU1hbmFnZWRNZXRob2QuaW52b2tlKGluamVjdGlvbk1nciwgRm9vTWFuYWdlZEJlYW4uY2xhc3MpOworICAgICAgICBmMi5oZWxsbygpOwogCiAKLQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7Ci0JfQorICAgICAgICBNZXRob2QgZGVzdHJveU1hbmFnZWRNZXRob2QgPSBpbmplY3Rpb25NZ3IuZ2V0Q2xhc3MoKS5nZXRNZXRob2QoImRlc3Ryb3lNYW5hZ2VkT2JqZWN0IiwgamF2YS5sYW5nLk9iamVjdC5jbGFzcyk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZGVzdHJveSBtYW5hZ2VkIG9iamVjdCBtZXRob2QgPSAiICsgZGVzdHJveU1hbmFnZWRNZXRob2QpOworICAgICAgICBkZXN0cm95TWFuYWdlZE1ldGhvZC5pbnZva2UoaW5qZWN0aW9uTWdyLCBmMik7CisKKyAgICAgICAgIEZvb05vbk1hbmFnZWRCZWFuIG5vbkYgPSAoRm9vTm9uTWFuYWdlZEJlYW4pIGNyZWF0ZU1hbmFnZWRNZXRob2QuaW52b2tlKGluamVjdGlvbk1nciwgRm9vTm9uTWFuYWdlZEJlYW4uY2xhc3MpOworICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGb29Ob25NYW5hZ2VkQmVhbiA9ICIgKyBub25GKTsKKyAgICAgICAgIG5vbkYuaGVsbG8oKTsKKyAgICAgICAgIGRlc3Ryb3lNYW5hZ2VkTWV0aG9kLmludm9rZShpbmplY3Rpb25NZ3IsIG5vbkYpOworCisKKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7CisgICAgfQogCiAKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9lamIvU2luZ2xldG9uQmVhbjIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9TaW5nbGV0b25CZWFuMi5qYXZhCmluZGV4IDUzODk5ZTMuLjczNmM0ODYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9TaW5nbGV0b25CZWFuMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9TaW5nbGV0b25CZWFuMi5qYXZhCkBAIC00MCwxNSArNDAsMTUgQEAKIAogICAgIEBJbmplY3QKICAgICBwdWJsaWMgU2luZ2xldG9uQmVhbjIoRXZlbnQ8U29tZUV2ZW50PiBzZSkgewotCXNvbWVFdmVudCA9IHNlOwotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjIgc29tZUV2ZW50ID0gIiArIHNvbWVFdmVudCk7Ci0JCisgICAgc29tZUV2ZW50ID0gc2U7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuMiBzb21lRXZlbnQgPSAiICsgc29tZUV2ZW50KTsKKwogICAgIH0KIAogICAgIEBJbmplY3QgRm9vIGZvbzsKIAogICAgIEBFSkIKLQlwcml2YXRlIFN0YXRlbGVzc0xvY2FsIHN0YXRlbGVzc0VFOworICAgIHByaXZhdGUgU3RhdGVsZXNzTG9jYWwgc3RhdGVsZXNzRUU7CiAKICAgICBASW5qZWN0IHByaXZhdGUgVHJhbnNsYXRvckNvbnRyb2xsZXIgdGM7CiAKQEAgLTU5LDQ1ICs1OSw0NSBAQAogCiAgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBCZWFuTWFuYWdlciBiZWFuTWFuYWdlckluamVjdDsKLSAgICAKKwogICAgIEBSZXNvdXJjZSBTZXNzaW9uQ29udGV4dCBzZXNDdHg7CiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHB1YmxpYyB2b2lkIGluaXQoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjI6OmluaXQoKSIpOwotCWlmKCBiZWFuTWFuYWdlckluamVjdCA9PSBudWxsICkgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJCZWFuTWFuYWdlciBpcyBudWxsIik7Ci0JfQotCVN5c3RlbS5vdXQucHJpbnRsbigiQmVhbiBtYW5hZ2VyIGluamVjdCA9ICIgKyBiZWFuTWFuYWdlckluamVjdCk7Ci0JdGVzdElNQ3JlYXRlRGVzdHJveU1PKCk7Ci0JdGVzdFNpbmdsZXRvbldpdGhJbmplY3Rpb25Db25zdHJ1Y3RvcigpOworICAgIGlmKCBiZWFuTWFuYWdlckluamVjdCA9PSBudWxsICkgeworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJCZWFuTWFuYWdlciBpcyBudWxsIik7CisgICAgfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmVhbiBtYW5hZ2VyIGluamVjdCA9ICIgKyBiZWFuTWFuYWdlckluamVjdCk7CisgICAgdGVzdElNQ3JlYXRlRGVzdHJveU1PKCk7CisgICAgdGVzdFNpbmdsZXRvbldpdGhJbmplY3Rpb25Db25zdHJ1Y3RvcigpOwogCi0JU3lzdGVtLm91dC5wcmludGxuKCJTZW5kaW5nIHNvbWUgZXZlbnQuLi4iKTsKLQlzb21lRXZlbnQuZmlyZSggbmV3IFNvbWVFdmVudCgyKSApOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VuZGluZyBzb21lIGV2ZW50Li4uIik7CisgICAgc29tZUV2ZW50LmZpcmUoIG5ldyBTb21lRXZlbnQoMikgKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBoZWxsbygpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW4yOjpoZWxsbygpICIgKyBmb28pOwotCXN0YXRlbGVzc0VFLmhlbGxvKCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuMjo6aGVsbG8oKSAiICsgZm9vKTsKKyAgICBzdGF0ZWxlc3NFRS5oZWxsbygpOwogCi0JZm1iLmhlbGxvKCk7Ci0JCi0JQmVhbk1hbmFnZXIgYmVhbk1nciA9IChCZWFuTWFuYWdlcikKLQkgICAgc2VzQ3R4Lmxvb2t1cCgiamF2YTpjb21wL0JlYW5NYW5hZ2VyIik7Ci0JCi0JU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgcmV0cmlldmVkIGJlYW4gbWFuYWdlciAiICsKLQkJCSAgIGJlYW5NZ3IgKyAiIGZvciBKQ0RJIGVuYWJsZWQgYXBwIik7Ci0JCQkgICAKKyAgICBmbWIuaGVsbG8oKTsKKworICAgIEJlYW5NYW5hZ2VyIGJlYW5NZ3IgPSAoQmVhbk1hbmFnZXIpCisgICAgICAgIHNlc0N0eC5sb29rdXAoImphdmE6Y29tcC9CZWFuTWFuYWdlciIpOworCisgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgcmV0cmlldmVkIGJlYW4gbWFuYWdlciAiICsKKyAgICAgICAgICAgICAgIGJlYW5NZ3IgKyAiIGZvciBKQ0RJIGVuYWJsZWQgYXBwIik7CisKIAogICAgIH0KIAogICAgIEBTY2hlZHVsZShzZWNvbmQ9IiovMTAiLCBtaW51dGU9IioiLCBob3VyPSIqIikKLQlwcml2YXRlIHZvaWQgdGltZW91dCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46OnRpbWVvdXQoKSAiICsgZm9vKTsKKyAgICBwcml2YXRlIHZvaWQgdGltZW91dCgpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46OnRpbWVvdXQoKSAiICsgZm9vKTsKIAotCVN5c3RlbS5vdXQucHJpbnRsbigidGMuZ2V0VGV4dCgpID0gIiArIHRjLmdldFRleHQoKSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0Yy5nZXRUZXh0KCkgPSAiICsgdGMuZ2V0VGV4dCgpKTsKIAotCXN0YXRlbGVzc0VFLmhlbGxvKCk7CisgICAgc3RhdGVsZXNzRUUuaGVsbG8oKTsKICAgICB9CiAKICAgICBAUHJlRGVzdHJveQpAQCAtMTA3LDI5ICsxMDcsMjkgQEAKIAogICAgIHByaXZhdGUgdm9pZCB0ZXN0SU1DcmVhdGVEZXN0cm95TU8oKSB7CiAKLQl0cnkgeworICAgIHRyeSB7CiAKLQkgICAgLy8gVGVzdCBJbmplY3Rpb25NYW5hZ2VyIG1hbmFnZWQgYmVhbiBmdW5jdGlvbmFsaXR5Ci0JICAgIE9iamVjdCBpbmplY3Rpb25NZ3IgPSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImNvbS5zdW4uZW50ZXJwcmlzZS5jb250YWluZXIuY29tbW9uLnNwaS51dGlsLkluamVjdGlvbk1hbmFnZXIiKTsKLQkgICAgTWV0aG9kIGNyZWF0ZU1hbmFnZWRNZXRob2QgPSBpbmplY3Rpb25NZ3IuZ2V0Q2xhc3MoKS5nZXRNZXRob2QoImNyZWF0ZU1hbmFnZWRPYmplY3QiLCBqYXZhLmxhbmcuQ2xhc3MuY2xhc3MpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNyZWF0ZSBtYW5hZ2VkIG9iamVjdCBtZXRob2QgPSAiICsgY3JlYXRlTWFuYWdlZE1ldGhvZCk7Ci0JICAgIEZvb01hbmFnZWRCZWFuIGYyID0gKEZvb01hbmFnZWRCZWFuKSBjcmVhdGVNYW5hZ2VkTWV0aG9kLmludm9rZShpbmplY3Rpb25NZ3IsIEZvb01hbmFnZWRCZWFuLmNsYXNzKTsKLQkgICAgZjIuaGVsbG8oKTsKLQkKLQotCSAgICBNZXRob2QgZGVzdHJveU1hbmFnZWRNZXRob2QgPSBpbmplY3Rpb25NZ3IuZ2V0Q2xhc3MoKS5nZXRNZXRob2QoImRlc3Ryb3lNYW5hZ2VkT2JqZWN0IiwgamF2YS5sYW5nLk9iamVjdC5jbGFzcyk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZGVzdHJveSBtYW5hZ2VkIG9iamVjdCBtZXRob2QgPSAiICsgZGVzdHJveU1hbmFnZWRNZXRob2QpOwotCSAgICBkZXN0cm95TWFuYWdlZE1ldGhvZC5pbnZva2UoaW5qZWN0aW9uTWdyLCBmMik7Ci0KLQkgICAgIEZvb05vbk1hbmFnZWRCZWFuIG5vbkYgPSAoRm9vTm9uTWFuYWdlZEJlYW4pIGNyZWF0ZU1hbmFnZWRNZXRob2QuaW52b2tlKGluamVjdGlvbk1nciwgRm9vTm9uTWFuYWdlZEJlYW4uY2xhc3MpOwotCSAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGb29Ob25NYW5hZ2VkQmVhbiA9ICIgKyBub25GKTsKLQkgICAgIG5vbkYuaGVsbG8oKTsKLQkgICAgIGRlc3Ryb3lNYW5hZ2VkTWV0aG9kLmludm9rZShpbmplY3Rpb25NZ3IsIG5vbkYpOworICAgICAgICAvLyBUZXN0IEluamVjdGlvbk1hbmFnZXIgbWFuYWdlZCBiZWFuIGZ1bmN0aW9uYWxpdHkKKyAgICAgICAgT2JqZWN0IGluamVjdGlvbk1nciA9IG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiY29tLnN1bi5lbnRlcnByaXNlLmNvbnRhaW5lci5jb21tb24uc3BpLnV0aWwuSW5qZWN0aW9uTWFuYWdlciIpOworICAgICAgICBNZXRob2QgY3JlYXRlTWFuYWdlZE1ldGhvZCA9IGluamVjdGlvbk1nci5nZXRDbGFzcygpLmdldE1ldGhvZCgiY3JlYXRlTWFuYWdlZE9iamVjdCIsIGphdmEubGFuZy5DbGFzcy5jbGFzcyk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY3JlYXRlIG1hbmFnZWQgb2JqZWN0IG1ldGhvZCA9ICIgKyBjcmVhdGVNYW5hZ2VkTWV0aG9kKTsKKyAgICAgICAgRm9vTWFuYWdlZEJlYW4gZjIgPSAoRm9vTWFuYWdlZEJlYW4pIGNyZWF0ZU1hbmFnZWRNZXRob2QuaW52b2tlKGluamVjdGlvbk1nciwgRm9vTWFuYWdlZEJlYW4uY2xhc3MpOworICAgICAgICBmMi5oZWxsbygpOwogCiAKLQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7Ci0JfQorICAgICAgICBNZXRob2QgZGVzdHJveU1hbmFnZWRNZXRob2QgPSBpbmplY3Rpb25NZ3IuZ2V0Q2xhc3MoKS5nZXRNZXRob2QoImRlc3Ryb3lNYW5hZ2VkT2JqZWN0IiwgamF2YS5sYW5nLk9iamVjdC5jbGFzcyk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZGVzdHJveSBtYW5hZ2VkIG9iamVjdCBtZXRob2QgPSAiICsgZGVzdHJveU1hbmFnZWRNZXRob2QpOworICAgICAgICBkZXN0cm95TWFuYWdlZE1ldGhvZC5pbnZva2UoaW5qZWN0aW9uTWdyLCBmMik7CisKKyAgICAgICAgIEZvb05vbk1hbmFnZWRCZWFuIG5vbkYgPSAoRm9vTm9uTWFuYWdlZEJlYW4pIGNyZWF0ZU1hbmFnZWRNZXRob2QuaW52b2tlKGluamVjdGlvbk1nciwgRm9vTm9uTWFuYWdlZEJlYW4uY2xhc3MpOworICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGb29Ob25NYW5hZ2VkQmVhbiA9ICIgKyBub25GKTsKKyAgICAgICAgIG5vbkYuaGVsbG8oKTsKKyAgICAgICAgIGRlc3Ryb3lNYW5hZ2VkTWV0aG9kLmludm9rZShpbmplY3Rpb25NZ3IsIG5vbkYpOworCisKKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7CisgICAgfQogCiAKICAgICB9CkBAIC0xMzcsMTYgKzEzNywxNiBAQAogCiAgICAgcHJpdmF0ZSB2b2lkIHRlc3RTaW5nbGV0b25XaXRoSW5qZWN0aW9uQ29uc3RydWN0b3IoKSB7CiAKLQl0cnkgeworICAgIHRyeSB7CiAKLQkgICAgU2luZ2xldG9uQmVhbkEgYj0gKFNpbmdsZXRvbkJlYW5BKSBzZXNDdHgubG9va3VwKCJqYXZhOm1vZHVsZS9TaW5nbGV0b25CZWFuQSIpOworICAgICAgICBTaW5nbGV0b25CZWFuQSBiPSAoU2luZ2xldG9uQmVhbkEpIHNlc0N0eC5sb29rdXAoImphdmE6bW9kdWxlL1NpbmdsZXRvbkJlYW5BIik7CiAgICAgICAgICAgICBpZiAoYi5nZXRCYXIoKSA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiQmFyIGlzIG51bGwiKTsKICAgICAgICAgICAgIH0KIAotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlKTsKLQl9CisgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOworICAgIH0KIAogCiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL1NpbmdsZXRvbkJlYW5BLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9lamIvU2luZ2xldG9uQmVhbkEuamF2YQppbmRleCBmMzI5YzRjLi5hOTZiNzBmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9lamIvU2luZ2xldG9uQmVhbkEuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9lamIvU2luZ2xldG9uQmVhbkEuamF2YQpAQCAtMjgsNyArMjgsNyBAQAogCiAgICAgQmFyIGJhcjsKIAotICAgIEBJbmplY3QgCisgICAgQEluamVjdAogICAgIHB1YmxpYyBTaW5nbGV0b25CZWFuQShCYXIgYmFyKSB7CiAgICAgICAgIHRoaXMuYmFyID0gYmFyOwogICAgIH0KQEAgLTM2LDEwICszNiwxMCBAQAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHVibGljIHZvaWQgaW5pdCgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuQTo6aW5pdCgpIik7Ci0JaWYoIGJhciA9PSBudWxsICkgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJiYXIgaXMgbnVsbCIpOwotCX0KLQlTeXN0ZW0ub3V0LnByaW50bG4oImJhciBpbmplY3QgPSAiICsgYmFyKTsKKyAgICBpZiggYmFyID09IG51bGwgKSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImJhciBpcyBudWxsIik7CisgICAgfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYmFyIGluamVjdCA9ICIgKyBiYXIpOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9lamIvU2luZ2xldG9uU3RhcnR1cFdpdGhJbmplY3RlZERlcGVuZGVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL1NpbmdsZXRvblN0YXJ0dXBXaXRoSW5qZWN0ZWREZXBlbmRlbnQuamF2YQppbmRleCA5YmY5YzRlLi4wNTgxMzE0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9lamIvU2luZ2xldG9uU3RhcnR1cFdpdGhJbmplY3RlZERlcGVuZGVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9TaW5nbGV0b25TdGFydHVwV2l0aEluamVjdGVkRGVwZW5kZW50LmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKICAgICBASW5qZWN0CiAgICAgcHVibGljIFNpbmdsZXRvblN0YXJ0dXBXaXRoSW5qZWN0ZWREZXBlbmRlbnQoRGVwZW5kZW50V2l0aEluamVjdGVkRGF0YVNvdXJjZSBzZXJ2aWNlKSB7CiAgICAgICAgIHRoaXMuc2VydmljZSA9IHNlcnZpY2U7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJDb25zdHJ1Y3RlZDo6U2luZ2xldG9uU3RhcnR1cFdpdGhJbmplY3RlZERlcGVuZGVudCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29uc3RydWN0ZWQ6OlNpbmdsZXRvblN0YXJ0dXBXaXRoSW5qZWN0ZWREZXBlbmRlbnQiKTsKICAgICB9CiAKICAgICBAUG9zdENvbnN0cnVjdApAQCAtNDEsNyArNDEsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JcmV0dXJuICJTaW5nbGV0b25TdGFydHVwV2l0aEluamVjdGVkRGVwZW5kZW50IjsKKyAgICByZXR1cm4gIlNpbmdsZXRvblN0YXJ0dXBXaXRoSW5qZWN0ZWREZXBlbmRlbnQiOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL1NvbWVFdmVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL1NvbWVFdmVudC5qYXZhCmluZGV4IDhiNDE3ZmMuLjU4NGNhYWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9Tb21lRXZlbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9lamIvU29tZUV2ZW50LmphdmEKQEAgLTIwLDExICsyMCwxMSBAQAogCiAgICAgcHJpdmF0ZSBpbnQgc29tZUludDsKIAotICAgIHB1YmxpYyBTb21lRXZlbnQoaW50IGkpIHsgCi0Jc29tZUludCA9IGk7CisgICAgcHVibGljIFNvbWVFdmVudChpbnQgaSkgeworICAgIHNvbWVJbnQgPSBpOwogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JcmV0dXJuICIiICsgc29tZUludDsKKyAgICByZXR1cm4gIiIgKyBzb21lSW50OwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9TdGF0ZWxlc3NCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9lamIvU3RhdGVsZXNzQmVhbi5qYXZhCmluZGV4IDJkNTJjMmEuLjk2Nzg4MzEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9TdGF0ZWxlc3NCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL1N0YXRlbGVzc0JlYW4uamF2YQpAQCAtNDAsMTggKzQwLDE4IEBACiAgICAgQEluamVjdCBGb28gZm9vOwogCiAgICAgQFBvc3RDb25zdHJ1Y3QKLQlwdWJsaWMgdm9pZCBpbml0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVsZXNzQmVhbjo6aW5pdCgpIik7CisgICAgcHVibGljIHZvaWQgaW5pdCgpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlbGVzc0JlYW46OmluaXQoKSIpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHByb2Nlc3NTb21lRXZlbnQoQE9ic2VydmVzIFNvbWVFdmVudCBldmVudCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVsZXNzQmVhbjo6cHJvY2Vzc1NvbWVFdmVudCAiICsKLQkJCSAgIGV2ZW50KTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlbGVzc0JlYW46OnByb2Nlc3NTb21lRXZlbnQgIiArCisgICAgICAgICAgICAgICBldmVudCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgaGVsbG8oKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWxlc3NCZWFuOjpoZWxsbygpICIgKwotCQkJICAgZm9vKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlbGVzc0JlYW46OmhlbGxvKCkgIiArCisgICAgICAgICAgICAgICBmb28pOwogICAgICAgICBpZiAoaW50ZXJjZXB0b3JJZHMuc2l6ZSgpICE9IDIpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIldyb25nIG51bWJlciBvZiBpbnRlcmNlcHRvcnMgd2VyZSBjYWxsZWQ6IGV4cGVjdGVkIDIsIGdvdCAiICsgaW50ZXJjZXB0b3JJZHMuc2l6ZSgpKTsKICAgICAgICAgfSBlbHNlIGlmIChpbnRlcmNlcHRvcklkcy5nZXQoMCkgIT0gMCB8fCBpbnRlcmNlcHRvcklkcy5nZXQoMSkgIT0gMSkgewpAQCAtNjQsMTUgKzY0LDE1IEBACiAgICAgQEV4Y2x1ZGVDbGFzc0ludGVyY2VwdG9ycwogICAgIEBFeGNsdWRlRGVmYXVsdEludGVyY2VwdG9ycwogICAgIHB1YmxpYyB2b2lkIGludGVyY2VwdG9yQ2FsbGVkKGludCBpZCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVsZXNzQmVhbjo6aW50ZXJjZXB0b3JDYWxsZWQoKSAiICsgaWQpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVsZXNzQmVhbjo6aW50ZXJjZXB0b3JDYWxsZWQoKSAiICsgaWQpOwogICAgICAgICBpbnRlcmNlcHRvcklkcy5hZGQoaWQpOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95Ci0JcHVibGljIHZvaWQgZGVzdHJveSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlbGVzc0JlYW46OmRlc3Ryb3koKSIpOworICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWxlc3NCZWFuOjpkZXN0cm95KCkiKTsKICAgICB9CiAKLSAgICAKKwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9lamIvU3RhdGVsZXNzQmVhbjIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9TdGF0ZWxlc3NCZWFuMi5qYXZhCmluZGV4IDkxZjIwNWQuLmQzNmQyYjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9TdGF0ZWxlc3NCZWFuMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9TdGF0ZWxlc3NCZWFuMi5qYXZhCkBAIC0yOSwyNyArMjksMjcgQEAKICAgICBwcml2YXRlIEZvbyBmb287CiAKICAgICBASW5qZWN0Ci0JcHVibGljIFN0YXRlbGVzc0JlYW4yKEZvbyBmLCBGb28gc3IpIHsKLQlmb28gPSBmOwotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVsZXNzQmVhbjIoKSAgZm9vID0gIiArIGZvbyArIAotCQkJICAgIiBzciA9ICIgKyBzcik7CisgICAgcHVibGljIFN0YXRlbGVzc0JlYW4yKEZvbyBmLCBGb28gc3IpIHsKKyAgICBmb28gPSBmOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVsZXNzQmVhbjIoKSAgZm9vID0gIiArIGZvbyArCisgICAgICAgICAgICAgICAiIHNyID0gIiArIHNyKTsKICAgICB9CiAKICAgICBAUG9zdENvbnN0cnVjdAotCXB1YmxpYyB2b2lkIGluaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWxlc3NCZWFuMjo6aW5pdCgpIik7CisgICAgcHVibGljIHZvaWQgaW5pdCgpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlbGVzc0JlYW4yOjppbml0KCkiKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBoZWxsbygpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlbGVzc0JlYW4yOjpoZWxsbygpICIgKwotCQkJICAgZm9vKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlbGVzc0JlYW4yOjpoZWxsbygpICIgKworICAgICAgICAgICAgICAgZm9vKTsKICAgICB9CiAKICAgICBAUHJlRGVzdHJveQotCXB1YmxpYyB2b2lkIGRlc3Ryb3koKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWxlc3NCZWFuMjo6ZGVzdHJveSgpIik7CisgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlbGVzc0JlYW4yOjpkZXN0cm95KCkiKTsKICAgICB9CiAKLSAgICAKKwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9lamIvVGV4dFRyYW5zbGF0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9UZXh0VHJhbnNsYXRvci5qYXZhCmluZGV4IDc2MTBiYmYuLjFkNzdlYzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9UZXh0VHJhbnNsYXRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9UZXh0VHJhbnNsYXRvci5qYXZhCkBAIC0yMiwyNSArMjIsMjUgQEAKIGltcG9ydCBqYWthcnRhLmluamVjdC5JbmplY3Q7CiAKIHB1YmxpYyBjbGFzcyBUZXh0VHJhbnNsYXRvciBpbXBsZW1lbnRzIFNlcmlhbGl6YWJsZQoteyAKLSAgIHByaXZhdGUgU2VudGVuY2VQYXJzZXIgc2VudGVuY2VQYXJzZXI7IAotICAgCit7CisgICBwcml2YXRlIFNlbnRlbmNlUGFyc2VyIHNlbnRlbmNlUGFyc2VyOworCiAgICBARUpCIFRyYW5zbGF0b3IgdHJhbnNsYXRvcjsKLSAgIAorCiAgICBASW5qZWN0Ci0gICBwdWJsaWMgVGV4dFRyYW5zbGF0b3IoU2VudGVuY2VQYXJzZXIgc2VudGVuY2VQYXJzZXIpIAotICAgeyAKLSAgICAgIHRoaXMuc2VudGVuY2VQYXJzZXIgPSBzZW50ZW5jZVBhcnNlcjsgIAorICAgcHVibGljIFRleHRUcmFuc2xhdG9yKFNlbnRlbmNlUGFyc2VyIHNlbnRlbmNlUGFyc2VyKQorICAgeworICAgICAgdGhpcy5zZW50ZW5jZVBhcnNlciA9IHNlbnRlbmNlUGFyc2VyOwogICAgfQotICAgCi0gICBwdWJsaWMgU3RyaW5nIHRyYW5zbGF0ZShTdHJpbmcgdGV4dCkgCi0gICB7IAotICAgICAgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7IAotICAgICAgZm9yIChTdHJpbmcgc2VudGVuY2U6IHNlbnRlbmNlUGFyc2VyLnBhcnNlKHRleHQpKSAKLSAgICAgIHsgCi0gICAgICAgICBzYi5hcHBlbmQodHJhbnNsYXRvci50cmFuc2xhdGUoc2VudGVuY2UpKS5hcHBlbmQoIi4gIik7IAotICAgICAgfSAKLSAgICAgIHJldHVybiBzYi50b1N0cmluZygpLnRyaW0oKTsgCisKKyAgIHB1YmxpYyBTdHJpbmcgdHJhbnNsYXRlKFN0cmluZyB0ZXh0KQorICAgeworICAgICAgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisgICAgICBmb3IgKFN0cmluZyBzZW50ZW5jZTogc2VudGVuY2VQYXJzZXIucGFyc2UodGV4dCkpCisgICAgICB7CisgICAgICAgICBzYi5hcHBlbmQodHJhbnNsYXRvci50cmFuc2xhdGUoc2VudGVuY2UpKS5hcHBlbmQoIi4gIik7CisgICAgICB9CisgICAgICByZXR1cm4gc2IudG9TdHJpbmcoKS50cmltKCk7CiAgICB9Ci0gICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL1RyYW5zbGF0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9UcmFuc2xhdG9yLmphdmEKaW5kZXggMDU3ODMwYy4uYWY0OWE0MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL1RyYW5zbGF0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9lamIvVHJhbnNsYXRvci5qYXZhCkBAIC0xOCwxMCArMTgsMTAgQEAKIAogaW1wb3J0IGpha2FydGEuZWpiLkxvY2FsOwogCi1ATG9jYWwgCi1wdWJsaWMgaW50ZXJmYWNlIFRyYW5zbGF0b3IgCi17IAorQExvY2FsCitwdWJsaWMgaW50ZXJmYWNlIFRyYW5zbGF0b3IKK3sKIAogICAgcHVibGljIFN0cmluZyB0cmFuc2xhdGUoU3RyaW5nIHNlbnRlbmNlKTsKLSAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9lamIvVHJhbnNsYXRvckNvbnRyb2xsZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9UcmFuc2xhdG9yQ29udHJvbGxlci5qYXZhCmluZGV4IGEzMjkxMDYuLjU1NTZhODggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9UcmFuc2xhdG9yQ29udHJvbGxlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9UcmFuc2xhdG9yQ29udHJvbGxlci5qYXZhCkBAIC0xOCwxNSArMTgsMTUgQEAKIAogcHVibGljIGludGVyZmFjZSBUcmFuc2xhdG9yQ29udHJvbGxlcgogewotICAgCisKICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpOwotICAgCisKICAgIHB1YmxpYyB2b2lkIHNldFRleHQoU3RyaW5nIHRleHQpOwotICAgCisKICAgIHB1YmxpYyB2b2lkIHRyYW5zbGF0ZSgpOwotICAgCisKICAgIHB1YmxpYyBTdHJpbmcgZ2V0VHJhbnNsYXRlZFRleHQoKTsKLSAgIAorCiAgICBwdWJsaWMgdm9pZCByZW1vdmUoKTsKLSAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9lamIvVHJhbnNsYXRvckNvbnRyb2xsZXIyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9lamIvVHJhbnNsYXRvckNvbnRyb2xsZXIyLmphdmEKaW5kZXggM2IxMDFkNC4uMDA3ZTI2OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL1RyYW5zbGF0b3JDb250cm9sbGVyMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9UcmFuc2xhdG9yQ29udHJvbGxlcjIuamF2YQpAQCAtMTgsNyArMTgsNyBAQAogCiBwdWJsaWMgaW50ZXJmYWNlIFRyYW5zbGF0b3JDb250cm9sbGVyMgogewotICAgCisKICAgICBwdWJsaWMgdm9pZCBmb28oKTsKLSAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9lamIvVHJhbnNsYXRvckNvbnRyb2xsZXJCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9qY2RpZnVsbC9lamIvVHJhbnNsYXRvckNvbnRyb2xsZXJCZWFuLmphdmEKaW5kZXggOTc3NTBlZS4uMjA5YjUyMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvamNkaWZ1bGwvZWpiL1RyYW5zbGF0b3JDb250cm9sbGVyQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL2pjZGlmdWxsL2VqYi9UcmFuc2xhdG9yQ29udHJvbGxlckJlYW4uamF2YQpAQCAtMjUsNDIgKzI1LDQyIEBACiBAU3RhdGVmdWwKIEBSZXF1ZXN0U2NvcGVkCiBATmFtZWQoInRyYW5zbGF0b3IiKQotICAgIHB1YmxpYyBjbGFzcyBUcmFuc2xhdG9yQ29udHJvbGxlckJlYW4gaW1wbGVtZW50cyBUcmFuc2xhdG9yQ29udHJvbGxlciAsIFRyYW5zbGF0b3JDb250cm9sbGVyMiAKKyAgICBwdWJsaWMgY2xhc3MgVHJhbnNsYXRvckNvbnRyb2xsZXJCZWFuIGltcGxlbWVudHMgVHJhbnNsYXRvckNvbnRyb2xsZXIgLCBUcmFuc2xhdG9yQ29udHJvbGxlcjIKIHsKLSAgIAorCiAgICBASW5qZWN0CiAgICBwcml2YXRlIFRleHRUcmFuc2xhdG9yIHRyYW5zbGF0b3I7Ci0gICAKKwogICAgcHJpdmF0ZSBTdHJpbmcgaW5wdXRUZXh0OwotICAgCisKICAgIHByaXZhdGUgU3RyaW5nIHRyYW5zbGF0ZWRUZXh0OwotICAgCisKICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpCiAgICB7CiAgICAgICByZXR1cm4gaW5wdXRUZXh0OwogICAgfQotICAgCisKICAgIHB1YmxpYyB2b2lkIHNldFRleHQoU3RyaW5nIHRleHQpCiAgICB7CiAgICAgICB0aGlzLmlucHV0VGV4dCA9IHRleHQ7CiAgICB9Ci0gICAKKwogICAgcHVibGljIHZvaWQgdHJhbnNsYXRlKCkKICAgIHsKICAgICAgIHRyYW5zbGF0ZWRUZXh0ID0gdHJhbnNsYXRvci50cmFuc2xhdGUoaW5wdXRUZXh0KTsKICAgIH0KLSAgIAorCiAgICBwdWJsaWMgU3RyaW5nIGdldFRyYW5zbGF0ZWRUZXh0KCkKICAgIHsKICAgICAgIHJldHVybiB0cmFuc2xhdGVkVGV4dDsKICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGZvbygpIHt9Ci0gICAKKwogICAgQFJlbW92ZQogICAgcHVibGljIHZvaWQgcmVtb3ZlKCkKICAgIHsKLSAgICAgIAorCiAgICB9Ci0gICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcGFzc2FjdC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcGFzc2FjdC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGIyNjdlYWQuLmJmN2FkMjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Bhc3NhY3QvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9wYXNzYWN0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEzICsxNSwxMyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMxLWZ1bGwtcGFzc2FjdCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gCi08cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+XHUwMDIwCis8cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic2UuY2xpZW50IiB2YWx1ZT0iY29tLmFjbWUuQ2xpZW50Ii8+Ci0JCisKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcGFzc2FjdC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9wYXNzYWN0L2J1aWxkLnhtbAppbmRleCBjYjA1MWViLi4xODFiYjA2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9wYXNzYWN0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9wYXNzYWN0L2J1aWxkLnhtbApAQCAtMjksMTUgKzI5LDE1IEBACiAgICAgJmNvbW1vbkJ1aWxkOwogICAgICZ0ZXN0cHJvcGVydGllczsKIAotICAgIDwhLS0gbm90ZSB0aGF0IHdlIGRvbid0IHVuZGVwbG95IGFzIHBhcnQgb2YgYWxsIHRhcmdldCBzbyAKKyAgICA8IS0tIG5vdGUgdGhhdCB3ZSBkb24ndCB1bmRlcGxveSBhcyBwYXJ0IG9mIGFsbCB0YXJnZXQgc28KICAgICB0aGF0IHRvcC1sZXZlbCBidWlsZCBzY3JpcHQgY2FuIHJ1biByZW1vdGUyIGZpcnN0IC0tPgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLGRlcGxveSxydW4sdW5kZXBsb3kiLz4KIAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDksMTIgKzQ5LDEyIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJlamItamFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qYXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw5ICs2Miw5IEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5fc2UiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuX3NlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgPGphdmEgIGZvcms9Im9uIiAKKyAgICAgICA8amF2YSAgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSIke3NlLmNsaWVudH0iPgpAQCAtNzUsNyArNzUsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWphci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcGFzc2FjdC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9wYXNzYWN0L2NsaWVudC9DbGllbnQuamF2YQppbmRleCAwZTU0OTljLi40YTkwMTRjMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcGFzc2FjdC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcGFzc2FjdC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTMxLDE3ICszMSwxNyBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgYXBwTmFtZTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKIAotCWFwcE5hbWUgPSBhcmdzWzBdOyAKLQlzdGF0LmFkZERlc2NyaXB0aW9uKGFwcE5hbWUpOwotCUNsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOyAgICAgICAKLSAgICAgICAgY2xpZW50LmRvVGVzdCgpOwkKKyAgICBhcHBOYW1lID0gYXJnc1swXTsKKyAgICBzdGF0LmFkZERlc2NyaXB0aW9uKGFwcE5hbWUpOworICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOworICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KGFwcE5hbWUgKyAiSUQiKTsKICAgICB9CiAKQEAgLTQ5LDQ0ICs0OSw0NCBAQAogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogCi0JdHJ5IHsKLQkgICAgaW50IG51bUhlbGxvcyA9IDg7IC8vIDggaXMgdGhlIGJhdGNoIHNpemUsIHNvIDggc2hvdWxkIGJlIGd1YXJhbnRlZWQgdG8gYmUgcGFzaXZhdGVkCisgICAgdHJ5IHsKKyAgICAgICAgaW50IG51bUhlbGxvcyA9IDg7IC8vIDggaXMgdGhlIGJhdGNoIHNpemUsIHNvIDggc2hvdWxkIGJlIGd1YXJhbnRlZWQgdG8gYmUgcGFzaXZhdGVkCiAKLQkgICAgSGVsbG9bXSBoZWxsb3MgPSBuZXcgSGVsbG9bbnVtSGVsbG9zXTsKLQkgICAgaW50IHBhc3NpdmF0aW9uQ291bnQgPSAwOworICAgICAgICBIZWxsb1tdIGhlbGxvcyA9IG5ldyBIZWxsb1tudW1IZWxsb3NdOworICAgICAgICBpbnQgcGFzc2l2YXRpb25Db3VudCA9IDA7CiAKLQkgICAgZm9yKGludCBpID0gMDsgaSA8IG51bUhlbGxvczsgaSsrKSB7Ci0JCQotCQloZWxsb3NbaV0gPSAoSGVsbG8pIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpnbG9iYWwvIithcHBOYW1lKyIvSGVsbG9CZWFuIik7Ci0JCWhlbGxvc1tpXS5oZWxsbygpOwotCSAgICB9CisgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW1IZWxsb3M7IGkrKykgewogCi0JICAgIHRyeSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiV2FpdGluZyBmb3IgcGFzc2l2YXRpb24uLi4iKTsKLQkJVGhyZWFkLnNsZWVwKDIwMDAwKTsKLQkgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewotCQllLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICB9CisgICAgICAgIGhlbGxvc1tpXSA9IChIZWxsbykgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmdsb2JhbC8iK2FwcE5hbWUrIi9IZWxsb0JlYW4iKTsKKyAgICAgICAgaGVsbG9zW2ldLmhlbGxvKCk7CisgICAgICAgIH0KIAotCSAgICBmb3IoaW50IGkgPSAwOyBpIDwgbnVtSGVsbG9zOyBpKyspIHsKLQkJCi0JCWhlbGxvc1tpXS5oZWxsbygpOwotCQlpZiggaGVsbG9zW2ldLnBhc3NpdmF0ZWRBbmRBY3RpdmF0ZWQoKSApIHsKLQkJICAgIHBhc3NpdmF0aW9uQ291bnQrKzsKLQkJfQotCSAgICB9CisgICAgICAgIHRyeSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2FpdGluZyBmb3IgcGFzc2l2YXRpb24uLi4iKTsKKyAgICAgICAgVGhyZWFkLnNsZWVwKDIwMDAwKTsKKyAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CiAKLQkgICAgaWYoIHBhc3NpdmF0aW9uQ291bnQgIT0gbnVtSGVsbG9zICkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlBhc3NpdmF0aW9uIGZhaWxlZCAtLSBjb3VudCA9ICIgKyBwYXNzaXZhdGlvbkNvdW50ICsgIiBpbnN0ZWFkIG9mIGV4cGVjdGVkICIgKyBudW1IZWxsb3MpOwotCQl0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJwYXNzaXZhdGlvbiBmYWlsZWQiKTsKLQkgICAgfQorICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbnVtSGVsbG9zOyBpKyspIHsKIAotCSAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuUEFTUyk7CisgICAgICAgIGhlbGxvc1tpXS5oZWxsbygpOworICAgICAgICBpZiggaGVsbG9zW2ldLnBhc3NpdmF0ZWRBbmRBY3RpdmF0ZWQoKSApIHsKKyAgICAgICAgICAgIHBhc3NpdmF0aW9uQ291bnQrKzsKKyAgICAgICAgfQorICAgICAgICB9CiAKLQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5GQUlMKTsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisgICAgICAgIGlmKCBwYXNzaXZhdGlvbkNvdW50ICE9IG51bUhlbGxvcyApIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQYXNzaXZhdGlvbiBmYWlsZWQgLS0gY291bnQgPSAiICsgcGFzc2l2YXRpb25Db3VudCArICIgaW5zdGVhZCBvZiBleHBlY3RlZCAiICsgbnVtSGVsbG9zKTsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigicGFzc2l2YXRpb24gZmFpbGVkIik7CisgICAgICAgIH0KKworICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuUEFTUyk7CisKKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5GQUlMKTsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CiAKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Bhc3NhY3QvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9wYXNzYWN0L2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCmluZGV4IGI3M2VmNzQuLjliZTM0NDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Bhc3NhY3QvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcGFzc2FjdC9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbApAQCAtMjQsNyArMjQsNyBAQAogICAgICAgPGVqYi1uYW1lPkhlbGxvQmVhbjwvZWpiLW5hbWU+CiAgICAgICA8YmVhbi1jYWNoZT4KICAgICAgICAgIDxtYXgtY2FjaGUtc2l6ZT40PC9tYXgtY2FjaGUtc2l6ZT4KLQkgPHJlc2l6ZS1xdWFudGl0eT4xPC9yZXNpemUtcXVhbnRpdHk+CisgICAgIDxyZXNpemUtcXVhbnRpdHk+MTwvcmVzaXplLXF1YW50aXR5PgogICAgICAgICAgPGNhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPjQ8L2NhY2hlLWlkbGUtdGltZW91dC1pbi1zZWNvbmRzPgogICAgICAgPC9iZWFuLWNhY2hlPgogICAgIDwvZWpiPgpAQCAtMzIsNyArMzIsNyBAQAogICAgICAgPGVqYi1uYW1lPlN0YXRlZnVsTm9JbnRmPC9lamItbmFtZT4KICAgICAgIDxiZWFuLWNhY2hlPgogICAgICAgICAgPG1heC1jYWNoZS1zaXplPjQ8L21heC1jYWNoZS1zaXplPgotCSA8cmVzaXplLXF1YW50aXR5PjE8L3Jlc2l6ZS1xdWFudGl0eT4KKyAgICAgPHJlc2l6ZS1xdWFudGl0eT4xPC9yZXNpemUtcXVhbnRpdHk+CiAgICAgICAgICA8Y2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+MzwvY2FjaGUtaWRsZS10aW1lb3V0LWluLXNlY29uZHM+CiAgICAgICA8L2JlYW4tY2FjaGU+CiAgICAgPC9lamI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9wYXNzYWN0L2VqYi9IZWxsb0JlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Bhc3NhY3QvZWpiL0hlbGxvQmVhbi5qYXZhCmluZGV4IGIwZGY0ZWYuLjQ2YjM1YjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Bhc3NhY3QvZWpiL0hlbGxvQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Bhc3NhY3QvZWpiL0hlbGxvQmVhbi5qYXZhCkBAIC0zMiw3ICszMiw3IEBACiAgICAgcHJpdmF0ZSBib29sZWFuIGFjdGl2YXRlZCA9IGZhbHNlOwogCiAgICAgQEVKQiBwcml2YXRlIFNpbmdsZXRvbk5vSW50ZiBzaW5nbGV0b25Ob0ludGY7Ci0gICAKKwogICAgIEBFSkIgcHJpdmF0ZSBTaW5nbGV0b25NdWx0aUludGYgc2luZ2xldG9uTXVsdGlJbnRmOwogCiAgICAgQEVKQiBwcml2YXRlIExvY2FsMSBsb2NhbDE7CkBAIC01MCw1MCArNTAsNTAgQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHVibGljIHZvaWQgaW5pdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvQmVhbjo6aW5pdCgpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb0JlYW46OmluaXQoKSIpOwogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgaGVsbG8oKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb0JlYW46OmhlbGxvKCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvQmVhbjo6aGVsbG8oKSIpOwogU3lzdGVtLm91dC5wcmludGxuKCIrKysgc2Vzc2lvbkN0eCB0eXBlOiAiICsgc2Vzc2lvbkN0eC5nZXRDbGFzcygpKTsKIAotCVN0YXRlZnVsRXhwaXJhdGlvbiBzZSA9IChTdGF0ZWZ1bEV4cGlyYXRpb24pIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOm1vZHVsZS9TdGF0ZWZ1bEV4cGlyYXRpb24iKTsKLQlzZS5oZWxsbygpOworICAgIFN0YXRlZnVsRXhwaXJhdGlvbiBzZSA9IChTdGF0ZWZ1bEV4cGlyYXRpb24pIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOm1vZHVsZS9TdGF0ZWZ1bEV4cGlyYXRpb24iKTsKKyAgICBzZS5oZWxsbygpOwogCi0Jc2luZ2xldG9uTm9JbnRmLmhlbGxvKCk7Ci0Jc2luZ2xldG9uTXVsdGlJbnRmLmhlbGxvKCk7Ci0JbG9jYWwxLmhlbGxvKCk7Ci0JbG9jYWwyLmhlbGxvKCk7Ci0JcmVtb3RlMS5oZWxsbygpOwotCXJlbW90ZTIuaGVsbG8oKTsKLQlzdGF0ZWxlc3NOb0ludGYuaGVsbG8oKTsKLQlzdGF0ZWZ1bE5vSW50Zi5oZWxsbygpOworICAgIHNpbmdsZXRvbk5vSW50Zi5oZWxsbygpOworICAgIHNpbmdsZXRvbk11bHRpSW50Zi5oZWxsbygpOworICAgIGxvY2FsMS5oZWxsbygpOworICAgIGxvY2FsMi5oZWxsbygpOworICAgIHJlbW90ZTEuaGVsbG8oKTsKKyAgICByZW1vdGUyLmhlbGxvKCk7CisgICAgc3RhdGVsZXNzTm9JbnRmLmhlbGxvKCk7CisgICAgc3RhdGVmdWxOb0ludGYuaGVsbG8oKTsKIAotCXJldHVybiAiaGVsbG8sIHdvcmxkXG4iOworICAgIHJldHVybiAiaGVsbG8sIHdvcmxkXG4iOwogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIHBhc3NpdmF0ZWRBbmRBY3RpdmF0ZWQoKSB7Ci0JcmV0dXJuIHBhc3NpdmF0ZWQgJiYgYWN0aXZhdGVkOworICAgIHJldHVybiBwYXNzaXZhdGVkICYmIGFjdGl2YXRlZDsKICAgICB9CiAKICAgICBAUHJlUGFzc2l2YXRlCiAgICAgcHVibGljIHZvaWQgcHJlUGFzcygpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvQmVhbjo6cHJlUGFzcygpIik7Ci0JcGFzc2l2YXRlZCA9IHRydWU7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb0JlYW46OnByZVBhc3MoKSIpOworICAgIHBhc3NpdmF0ZWQgPSB0cnVlOwogICAgIH0KIAogICAgIEBQb3N0QWN0aXZhdGUKICAgICBwdWJsaWMgdm9pZCBwb3N0QWN0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9CZWFuOjpwb3N0QWN0KCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvQmVhbjo6cG9zdEFjdCgpIik7CiAgICAgICAgIGhlbGxvKCk7Ci0JYWN0aXZhdGVkID0gdHJ1ZTsKKyAgICBhY3RpdmF0ZWQgPSB0cnVlOwogICAgIH0KLSAgICAKKwogCiAKICAgICBAUHJlRGVzdHJveQogICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb0JlYW46OmRlc3Ryb3koKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9CZWFuOjpkZXN0cm95KCkiKTsKICAgICB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcGFzc2FjdC9lamIvTm9uU2VyaWFsaXphYmxlSW50ZXJjZXB0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Bhc3NhY3QvZWpiL05vblNlcmlhbGl6YWJsZUludGVyY2VwdG9yLmphdmEKaW5kZXggNDJiNzhlMy4uZDc3NWE0NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcGFzc2FjdC9lamIvTm9uU2VyaWFsaXphYmxlSW50ZXJjZXB0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9wYXNzYWN0L2VqYi9Ob25TZXJpYWxpemFibGVJbnRlcmNlcHRvci5qYXZhCkBAIC0yNywyNiArMjcsMjYgQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoSW52b2NhdGlvbkNvbnRleHQgYykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBOb25TZXJpYWxpemFibGVJbnRlcmNlcHRvcjo6aW5pdCgpICIpOwotCWkgPSAxMDsKLQljLnByb2NlZWQoKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIE5vblNlcmlhbGl6YWJsZUludGVyY2VwdG9yOjppbml0KCkgIik7CisgICAgaSA9IDEwOworICAgIGMucHJvY2VlZCgpOwogICAgIH0KIAogICAgIEBBcm91bmRJbnZva2UKLQlwdWJsaWMgT2JqZWN0IGRvQUkoSW52b2NhdGlvbkNvbnRleHQgYykgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgcHVibGljIE9iamVjdCBkb0FJKEludm9jYXRpb25Db250ZXh0IGMpIHRocm93cyBFeGNlcHRpb24gewogCi0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBkb0FJICwgaSA9ICIgKyBpKTsKLQlpZiggaSAhPSAxMCApIHsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiV3JvbmcgdmFsdWUgb2YgaW50ZXJjZXB0b3Igc3RhdGUgPSAiICsKLQkJCQkgICBpKTsKLQl9Ci0JcmV0dXJuIGMucHJvY2VlZCgpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gZG9BSSAsIGkgPSAiICsgaSk7CisgICAgaWYoIGkgIT0gMTAgKSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIldyb25nIHZhbHVlIG9mIGludGVyY2VwdG9yIHN0YXRlID0gIiArCisgICAgICAgICAgICAgICAgICAgaSk7CisgICAgfQorICAgIHJldHVybiBjLnByb2NlZWQoKTsKICAgICB9CiAKICAgICBAUHJlRGVzdHJveQogICAgIHByaXZhdGUgdm9pZCBkZXN0cm95KEludm9jYXRpb25Db250ZXh0IGMpIHRocm93cyBFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gTm9uU2VyaWFsaXphYmxlSW50ZXJjZXB0b3I6OmRlc3Ryb3koKSAiKTsKLQljLnByb2NlZWQoKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIE5vblNlcmlhbGl6YWJsZUludGVyY2VwdG9yOjpkZXN0cm95KCkgIik7CisgICAgYy5wcm9jZWVkKCk7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9wYXNzYWN0L2VqYi9TaW5nbGV0b25NdWx0aUludGYuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Bhc3NhY3QvZWpiL1NpbmdsZXRvbk11bHRpSW50Zi5qYXZhCmluZGV4IDQyZTlmOTQuLjFiZjUxYTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Bhc3NhY3QvZWpiL1NpbmdsZXRvbk11bHRpSW50Zi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Bhc3NhY3QvZWpiL1NpbmdsZXRvbk11bHRpSW50Zi5qYXZhCkBAIC0zMSwxOCArMzEsMTggQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHVibGljIHZvaWQgaW5pdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbk11bHRpSW50Zjo6aW5pdCgpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25NdWx0aUludGY6OmluaXQoKSIpOwogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgaGVsbG8oKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25NdWx0aUludGY6OmhlbGxvKCkgaW52b2tlZCBieSAiICsKLQkJCSAgIHNlc3Npb25DdHguZ2V0SW52b2tlZEJ1c2luZXNzSW50ZXJmYWNlKCkpOwotCXJldHVybiAiaGVsbG8sIHdvcmxkXG4iOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uTXVsdGlJbnRmOjpoZWxsbygpIGludm9rZWQgYnkgIiArCisgICAgICAgICAgICAgICBzZXNzaW9uQ3R4LmdldEludm9rZWRCdXNpbmVzc0ludGVyZmFjZSgpKTsKKyAgICByZXR1cm4gImhlbGxvLCB3b3JsZFxuIjsKICAgICB9CiAKICAgICBAUHJlRGVzdHJveQogICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25NdWx0aUludGY6OmRlc3Ryb3koKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uTXVsdGlJbnRmOjpkZXN0cm95KCkiKTsKICAgICB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcGFzc2FjdC9lamIvU2luZ2xldG9uTm9JbnRmLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9wYXNzYWN0L2VqYi9TaW5nbGV0b25Ob0ludGYuamF2YQppbmRleCAwZDUzYWRiLi5hYTgzZTUzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9wYXNzYWN0L2VqYi9TaW5nbGV0b25Ob0ludGYuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9wYXNzYWN0L2VqYi9TaW5nbGV0b25Ob0ludGYuamF2YQpAQCAtMjUsMTcgKzI1LDE3IEBACiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHB1YmxpYyB2b2lkIGluaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25Ob0ludGY6OmluaXQoKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uTm9JbnRmOjppbml0KCkiKTsKICAgICB9CiAKICAgICBwdWJsaWMgU3RyaW5nIGhlbGxvKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uTm9JbnRmOjpoZWxsbygpIik7Ci0JcmV0dXJuICJoZWxsbywgd29ybGRcbiI7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25Ob0ludGY6OmhlbGxvKCkiKTsKKyAgICByZXR1cm4gImhlbGxvLCB3b3JsZFxuIjsKICAgICB9CiAKICAgICBAUHJlRGVzdHJveQogICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25Ob0ludGY6OmRlc3Ryb3koKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uTm9JbnRmOjpkZXN0cm95KCkiKTsKICAgICB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcGFzc2FjdC9lamIvU3RhdGVmdWxFeHBpcmF0aW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9wYXNzYWN0L2VqYi9TdGF0ZWZ1bEV4cGlyYXRpb24uamF2YQppbmRleCA3NzE0ZTBiLi4xZTQxYzlkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9wYXNzYWN0L2VqYi9TdGF0ZWZ1bEV4cGlyYXRpb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9wYXNzYWN0L2VqYi9TdGF0ZWZ1bEV4cGlyYXRpb24uamF2YQpAQCAtMjYsMTcgKzI2LDE3IEBACiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHB1YmxpYyB2b2lkIGluaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWZ1bEV4cGlyYXRpb246OmluaXQoKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVmdWxFeHBpcmF0aW9uOjppbml0KCkiKTsKICAgICB9CiAKICAgICBwdWJsaWMgU3RyaW5nIGhlbGxvKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVmdWxFeHBpcmF0aW9uOjpoZWxsbygpIik7Ci0JcmV0dXJuICJoZWxsbywgd29ybGRcbiI7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWZ1bEV4cGlyYXRpb246OmhlbGxvKCkiKTsKKyAgICByZXR1cm4gImhlbGxvLCB3b3JsZFxuIjsKICAgICB9CiAKICAgICBAUHJlRGVzdHJveQogICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWZ1bEV4cGlyYXRpb246OmRlc3Ryb3koKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVmdWxFeHBpcmF0aW9uOjpkZXN0cm95KCkiKTsKICAgICB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcGFzc2FjdC9lamIvU3RhdGVmdWxOb0ludGYuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Bhc3NhY3QvZWpiL1N0YXRlZnVsTm9JbnRmLmphdmEKaW5kZXggODVhMzg3NC4uOTMzNDlhOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcGFzc2FjdC9lamIvU3RhdGVmdWxOb0ludGYuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9wYXNzYWN0L2VqYi9TdGF0ZWZ1bE5vSW50Zi5qYXZhCkBAIC0yNywyMiArMjcsMjIgQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHVibGljIHZvaWQgaW5pdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlZnVsTm9JbnRmOjppbml0KCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlZnVsTm9JbnRmOjppbml0KCkiKTsKICAgICB9CiAKICAgICBwdWJsaWMgU3RyaW5nIGhlbGxvKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVmdWxOb0ludGY6OmhlbGxvKCkiKTsKLQlyZXR1cm4gImhlbGxvLCB3b3JsZFxuIjsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlZnVsTm9JbnRmOjpoZWxsbygpIik7CisgICAgcmV0dXJuICJoZWxsbywgd29ybGRcbiI7CiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKICAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVmdWxOb0ludGY6OmRlc3Ryb3koKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVmdWxOb0ludGY6OmRlc3Ryb3koKSIpOwogICAgIH0KIAogICAgIEBQcmVQYXNzaXZhdGUKICAgICBwdWJsaWMgdm9pZCBwYXNzaXZhdGUoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWZ1bE5vSW50Zjo6cGFzc2l2YXRlKCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlZnVsTm9JbnRmOjpwYXNzaXZhdGUoKSIpOwogICAgIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9wYXNzYWN0L2VqYi9TdGF0ZWxlc3NOb0ludGYuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Bhc3NhY3QvZWpiL1N0YXRlbGVzc05vSW50Zi5qYXZhCmluZGV4IGMwODI3NTQuLjYwODk3M2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Bhc3NhY3QvZWpiL1N0YXRlbGVzc05vSW50Zi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Bhc3NhY3QvZWpiL1N0YXRlbGVzc05vSW50Zi5qYXZhCkBAIC0yNSwxNyArMjUsMTcgQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHVibGljIHZvaWQgaW5pdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlbGVzc05vSW50Zjo6aW5pdCgpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWxlc3NOb0ludGY6OmluaXQoKSIpOwogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgaGVsbG8oKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWxlc3NOb0ludGY6OmhlbGxvKCkiKTsKLQlyZXR1cm4gImhlbGxvLCB3b3JsZFxuIjsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlbGVzc05vSW50Zjo6aGVsbG8oKSIpOworICAgIHJldHVybiAiaGVsbG8sIHdvcmxkXG4iOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CiAgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlbGVzc05vSW50Zjo6ZGVzdHJveSgpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWxlc3NOb0ludGY6OmRlc3Ryb3koKSIpOwogICAgIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9yZW1vdGUxL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9yZW1vdGUxL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYjI2YTUzMS4uMDMyZmEyZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcmVtb3RlMS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3JlbW90ZTEvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTIgKzE1LDEyIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzEtZnVsbC1yZW1vdGUxIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAKLTxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz5cdTAwMjAKKzxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic2UuY2xpZW50IiB2YWx1ZT0iY29tLmFjbWUuQ2xpZW50Ii8+Ci0JCisKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcmVtb3RlMS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9yZW1vdGUxL2J1aWxkLnhtbAppbmRleCA3Y2MzZTBlLi43ZTkyMTVjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9yZW1vdGUxL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9yZW1vdGUxL2J1aWxkLnhtbApAQCAtMjksMTUgKzI5LDE1IEBACiAgICAgJmNvbW1vbkJ1aWxkOwogICAgICZ0ZXN0cHJvcGVydGllczsKIAotICAgIDwhLS0gbm90ZSB0aGF0IHdlIGRvbid0IHVuZGVwbG95IGFzIHBhcnQgb2YgYWxsIHRhcmdldCBzbyAKKyAgICA8IS0tIG5vdGUgdGhhdCB3ZSBkb24ndCB1bmRlcGxveSBhcyBwYXJ0IG9mIGFsbCB0YXJnZXQgc28KICAgICB0aGF0IHRvcC1sZXZlbCBidWlsZCBzY3JpcHQgY2FuIHJ1biByZW1vdGUyIGZpcnN0IC0tPgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLGRlcGxveSxydW4iLz4KIAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDksMTIgKzQ5LDEyIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJlamItamFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovQmxhaC5jbGFzcywqKi9TaW5nbGV0b24qLmNsYXNzLCoqL0hlbGxvKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qYXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw5ICs2Miw5IEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5fc2UiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuX3NlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgPGphdmEgIGZvcms9Im9uIiAKKyAgICAgICA8amF2YSAgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSIke3NlLmNsaWVudH0iPgpAQCAtNzUsNyArNzUsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWphci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcmVtb3RlMS9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9yZW1vdGUxL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBmNjFiYmQyLi4zZTUxMTM1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9yZW1vdGUxL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9yZW1vdGUxL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzEsMTcgKzMxLDE3IEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBhcHBOYW1lOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewogCi0JYXBwTmFtZSA9IGFyZ3NbMF07IAotCXN0YXQuYWRkRGVzY3JpcHRpb24oYXBwTmFtZSk7Ci0JQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7ICAgICAgIAotICAgICAgICBjbGllbnQuZG9UZXN0KCk7CQorICAgIGFwcE5hbWUgPSBhcmdzWzBdOworICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oYXBwTmFtZSk7CisgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CisgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoYXBwTmFtZSArICJJRCIpOwogICAgIH0KIApAQCAtNDksMTQ0ICs0OSwxNDQgQEAKIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKIAotCXRyeSB7CisgICAgdHJ5IHsKIAotCSAgICAvKioKLQkgICAgT2JqZWN0IG89IChIZWxsb0hvbWUpIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiY29yYmFuYW1lOmlpb3A6bG9jYWxob3N0OjM3MDAjSEgiKTsKLQkgICAgSGVsbG9Ib21lIGhlbGxvSG9tZUNvcmJhTmFtZSA9IChIZWxsb0hvbWUpCi0JCWphdmF4LnJtaS5Qb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cobywgSGVsbG9Ib21lLmNsYXNzKTsKLQkgICAgY2FsbEhvbWUoaGVsbG9Ib21lQ29yYmFOYW1lKTsKLQkgICAgKi8KKyAgICAgICAgLyoqCisgICAgICAgIE9iamVjdCBvPSAoSGVsbG9Ib21lKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImNvcmJhbmFtZTppaW9wOmxvY2FsaG9zdDozNzAwI0hIIik7CisgICAgICAgIEhlbGxvSG9tZSBoZWxsb0hvbWVDb3JiYU5hbWUgPSAoSGVsbG9Ib21lKQorICAgICAgICBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG8sIEhlbGxvSG9tZS5jbGFzcyk7CisgICAgICAgIGNhbGxIb21lKGhlbGxvSG9tZUNvcmJhTmFtZSk7CisgICAgICAgICovCiAKLQkgICAgSGVsbG9Ib21lIGhlbGxvSG9tZSA9IChIZWxsb0hvbWUpIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpnbG9iYWwvIiArIGFwcE5hbWUgKyAiL0hlbGxvQmVhbiFjb20uYWNtZS5IZWxsb0hvbWUiKTsKLQkgICAgY2FsbEhvbWUoaGVsbG9Ib21lKTsKKyAgICAgICAgSGVsbG9Ib21lIGhlbGxvSG9tZSA9IChIZWxsb0hvbWUpIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpnbG9iYWwvIiArIGFwcE5hbWUgKyAiL0hlbGxvQmVhbiFjb20uYWNtZS5IZWxsb0hvbWUiKTsKKyAgICAgICAgY2FsbEhvbWUoaGVsbG9Ib21lKTsKIAotCSAgICBIZWxsbyBoZWxsbyA9IChIZWxsbykgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJISCNjb20uYWNtZS5IZWxsbyIpOworICAgICAgICBIZWxsbyBoZWxsbyA9IChIZWxsbykgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJISCNjb20uYWNtZS5IZWxsbyIpOwogCi0JICAgIC8vIEBAQCBUT0RPIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va3VwIHZpYSBhcHAtZGVmaW5lZCBnbG9iYWwgbmFtZSIpOwotCSAgICAvLyBAQEAgTm90IGltcGxlbWVudGVkIHlldCBAQEAgSGVsbG8gaGVsbG9nID0gKEhlbGxvKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6Z2xvYmFsL0hCR2xvYmFsIik7CisgICAgICAgIC8vIEBAQCBUT0RPIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va3VwIHZpYSBhcHAtZGVmaW5lZCBnbG9iYWwgbmFtZSIpOworICAgICAgICAvLyBAQEAgTm90IGltcGxlbWVudGVkIHlldCBAQEAgSGVsbG8gaGVsbG9nID0gKEhlbGxvKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6Z2xvYmFsL0hCR2xvYmFsIik7CiAKLQkgICAgRnV0dXJlPFN0cmluZz4gZnV0dXJlID0gaGVsbG8uaGVsbG9Bc3luYygpOwkgICAKLQkgICAgCi0JICAgIC8vICJtZW1vcnkgbGVhayIgZG9uJ3QgY2FsbCBnZXQgb24gYXN5bmMgdGhhdCByZXR1cm5zIGEgZnV0dXJlCi0JICAgIC8vIEF0IHRoZSBsZWFzdCBzaG91bGQgYmUgY2xlYW5lZCB1cCBhdCBjb250YWluZXIgc2h1dGRvd24gYnV0Ci0JICAgIC8vIGJ1dCBwb3NzaWJseSBzb29uZXIKLQkgICAgaGVsbG8uaGVsbG9Bc3luYygpOwotCSAgICBoZWxsby5oZWxsb0FzeW5jKCk7Ci0JICAgIGhlbGxvLmhlbGxvQXN5bmMoKTsKKyAgICAgICAgRnV0dXJlPFN0cmluZz4gZnV0dXJlID0gaGVsbG8uaGVsbG9Bc3luYygpOwogCi0JICAgIGhlbGxvLmZpcmVBbmRGb3JnZXQoKTsJICAgCi0JICAgCi0JICAgIHRyeSB7Ci0JCVN0cmluZyByZXN1bHQgPSBmdXR1cmUuZ2V0KCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiaGVsbG9Bc3luYygpIHNheXMgOiAiICsgcmVzdWx0KTsKLQkgICAgfSBjYXRjaChFeGVjdXRpb25FeGNlcHRpb24gZSkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBhc3luYyBFeGVjdXRpb25FeGNlcHRpb24uIENhdXNlIGlzICIgKwotCQkJCSAgIGUuZ2V0Q2F1c2UoKS5nZXRNZXNzYWdlKCkpOwotCQllLmdldENhdXNlKCkucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIH0KKyAgICAgICAgLy8gIm1lbW9yeSBsZWFrIiBkb24ndCBjYWxsIGdldCBvbiBhc3luYyB0aGF0IHJldHVybnMgYSBmdXR1cmUKKyAgICAgICAgLy8gQXQgdGhlIGxlYXN0IHNob3VsZCBiZSBjbGVhbmVkIHVwIGF0IGNvbnRhaW5lciBzaHV0ZG93biBidXQKKyAgICAgICAgLy8gYnV0IHBvc3NpYmx5IHNvb25lcgorICAgICAgICBoZWxsby5oZWxsb0FzeW5jKCk7CisgICAgICAgIGhlbGxvLmhlbGxvQXN5bmMoKTsKKyAgICAgICAgaGVsbG8uaGVsbG9Bc3luYygpOwogCi0JICAgIEZ1dHVyZTxTdHJpbmc+IGZ1dHVyZVRPID0gaGVsbG8uYXN5bmNCbG9jayg1KTsJICAgIAotCSAgICAvLyBUZXN0IHRpbWVvdXQKLQkgICAgdHJ5IHsKKyAgICAgICAgaGVsbG8uZmlyZUFuZEZvcmdldCgpOwogCi0JCVN0cmluZyByZXN1bHQgPSBmdXR1cmVUTy5nZXQoMSwgVGltZVVuaXQuTUlMTElTRUNPTkRTKTsKLQkJdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiU2hvdWxkIGhhdmUgdGltZWQgb3V0Iik7Ci0JICAgIH0gY2F0Y2goVGltZW91dEV4Y2VwdGlvbiB0b2UpIHsKLQkJdHJ5IHsKLQkJICAgIFN0cmluZyByZXN1bHQgPSBmdXR1cmVUTy5nZXQoKTsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYXN5bmNCbG9jaygpIHNheXMgOiAiICsgcmVzdWx0KTsKLQkJfSBjYXRjaChFeGNlcHRpb24gZSkgewotCQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlKTsKLQkJfQotCSAgICB9IGNhdGNoKEV4ZWN1dGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiR290IGFzeW5jIEV4ZWN1dGlvbkV4Y2VwdGlvbi4gQ2F1c2UgaXMgIiArCi0JCQkJICAgZS5nZXRDYXVzZSgpLmdldE1lc3NhZ2UoKSk7Ci0JCWUuZ2V0Q2F1c2UoKS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgfQotCSAKLQkgICAgRnV0dXJlPFN0cmluZz4gZnV0dXJlRXhjZXB0aW9uID0gCi0JCWhlbGxvLmFzeW5jVGhyb3dFeGNlcHRpb24oImpha2FydGEuZWpiLkNvbmN1cnJlbnRBY2Nlc3NUaW1lb3V0RXhjZXB0aW9uIik7Ci0JICAgIHRyeSB7Ci0JCVN0cmluZyByZXN1bHQgPSBmdXR1cmVFeGNlcHRpb24uZ2V0KCk7Ci0JCXRocm93IG5ldyBFSkJFeGNlcHRpb24oIlNob3VsZCBoYXZlIGdvdHRlbiBleGNlcHRpb24iKTsKLQkgICAgfSBjYXRjaChFeGVjdXRpb25FeGNlcHRpb24gZSkgewotCQlpZiggZS5nZXRDYXVzZSgpIGluc3RhbmNlb2YgamFrYXJ0YS5lamIuQ29uY3VycmVudEFjY2Vzc1RpbWVvdXRFeGNlcHRpb24pIHsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IGNvcnJlY3QgYXN5bmMgZXhjZXB0aW9uLiBDYXVzZSBpcyAiICsKLQkJCQkgICAgICAgZS5nZXRDYXVzZSgpLmdldE1lc3NhZ2UoKSk7Ci0JCX0gZWxzZSB7Ci0JCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJ3cm9uZyBleGNlcHRpb24iLCBlKTsKLQkJfQotCSAgICB9CisgICAgICAgIHRyeSB7CisgICAgICAgIFN0cmluZyByZXN1bHQgPSBmdXR1cmUuZ2V0KCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaGVsbG9Bc3luYygpIHNheXMgOiAiICsgcmVzdWx0KTsKKyAgICAgICAgfSBjYXRjaChFeGVjdXRpb25FeGNlcHRpb24gZSkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBhc3luYyBFeGVjdXRpb25FeGNlcHRpb24uIENhdXNlIGlzICIgKworICAgICAgICAgICAgICAgICAgIGUuZ2V0Q2F1c2UoKS5nZXRNZXNzYWdlKCkpOworICAgICAgICBlLmdldENhdXNlKCkucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KIAotCSAgICBGdXR1cmU8U3RyaW5nPiBmdXR1cmVDYW5jZWwgPSBudWxsOwotCSAgICB0cnkgewotCQlmdXR1cmVDYW5jZWwgPSBoZWxsby5hc3luY0NhbmNlbCg1KTsKLQkJZnV0dXJlQ2FuY2VsLmNhbmNlbCh0cnVlKTsKLQkJZnV0dXJlQ2FuY2VsLmdldCgpOwkKLQkJdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiU2hvdWxkIGhhdmUgZ290dGVuIGV4Y2VwdGlvbiIpOwotCSAgICB9IGNhdGNoKEV4ZWN1dGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCWlmKCBlLmdldENhdXNlKCkuZ2V0Q2xhc3MoKS5nZXROYW1lKCkuZXF1YWxzKCJqYXZhLmxhbmcuRXhjZXB0aW9uIikpIHsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IGNvcnJlY3QgYXN5bmMgZXhjZXB0aW9uLiBDYXVzZSBpcyAiICsKLQkJCQkgICAgICAgZS5nZXRDYXVzZSgpLmdldE1lc3NhZ2UoKSk7Ci0JCX0gZWxzZSB7Ci0JCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJ3cm9uZyBleGNlcHRpb24iLCBlKTsKLQkJfQotCSAgICB9CisgICAgICAgIEZ1dHVyZTxTdHJpbmc+IGZ1dHVyZVRPID0gaGVsbG8uYXN5bmNCbG9jayg1KTsKKyAgICAgICAgLy8gVGVzdCB0aW1lb3V0CisgICAgICAgIHRyeSB7CiAKLQkgICAgdHJ5IHsKLQkJaGVsbG8udGhyb3dFeGNlcHRpb24oImpha2FydGEuZWpiLkNvbmN1cnJlbnRBY2Nlc3NFeGNlcHRpb24iKTsKLQkJdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiZXhwZWN0ZWQgYW4gZXhjZXB0aW9uIik7Ci0JICAgIH0gY2F0Y2goQ29uY3VycmVudEFjY2Vzc0V4Y2VwdGlvbiBjYWUpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJHb3QgZXhwZWN0ZWQgIiArIGNhZSk7Ci0JICAgIH0KKyAgICAgICAgU3RyaW5nIHJlc3VsdCA9IGZ1dHVyZVRPLmdldCgxLCBUaW1lVW5pdC5NSUxMSVNFQ09ORFMpOworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJTaG91bGQgaGF2ZSB0aW1lZCBvdXQiKTsKKyAgICAgICAgfSBjYXRjaChUaW1lb3V0RXhjZXB0aW9uIHRvZSkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgU3RyaW5nIHJlc3VsdCA9IGZ1dHVyZVRPLmdldCgpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJhc3luY0Jsb2NrKCkgc2F5cyA6ICIgKyByZXN1bHQpOworICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOworICAgICAgICB9CisgICAgICAgIH0gY2F0Y2goRXhlY3V0aW9uRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgYXN5bmMgRXhlY3V0aW9uRXhjZXB0aW9uLiBDYXVzZSBpcyAiICsKKyAgICAgICAgICAgICAgICAgICBlLmdldENhdXNlKCkuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgZS5nZXRDYXVzZSgpLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CiAKLQkgICAgdHJ5IHsKLQkJaGVsbG8udGhyb3dFeGNlcHRpb24oImpha2FydGEuZWpiLkNvbmN1cnJlbnRBY2Nlc3NUaW1lb3V0RXhjZXB0aW9uIik7Ci0JCXRocm93IG5ldyBFSkJFeGNlcHRpb24oImV4cGVjdGVkIGFuIGV4Y2VwdGlvbiIpOwotCSAgICB9IGNhdGNoKENvbmN1cnJlbnRBY2Nlc3NUaW1lb3V0RXhjZXB0aW9uIGNhdCkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBleHBlY3RlZCAiICsgY2F0KTsKLQkgICAgfQorICAgICAgICBGdXR1cmU8U3RyaW5nPiBmdXR1cmVFeGNlcHRpb24gPQorICAgICAgICBoZWxsby5hc3luY1Rocm93RXhjZXB0aW9uKCJqYWthcnRhLmVqYi5Db25jdXJyZW50QWNjZXNzVGltZW91dEV4Y2VwdGlvbiIpOworICAgICAgICB0cnkgeworICAgICAgICBTdHJpbmcgcmVzdWx0ID0gZnV0dXJlRXhjZXB0aW9uLmdldCgpOworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJTaG91bGQgaGF2ZSBnb3R0ZW4gZXhjZXB0aW9uIik7CisgICAgICAgIH0gY2F0Y2goRXhlY3V0aW9uRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgaWYoIGUuZ2V0Q2F1c2UoKSBpbnN0YW5jZW9mIGpha2FydGEuZWpiLkNvbmN1cnJlbnRBY2Nlc3NUaW1lb3V0RXhjZXB0aW9uKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBjb3JyZWN0IGFzeW5jIGV4Y2VwdGlvbi4gQ2F1c2UgaXMgIiArCisgICAgICAgICAgICAgICAgICAgICAgIGUuZ2V0Q2F1c2UoKS5nZXRNZXNzYWdlKCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigid3JvbmcgZXhjZXB0aW9uIiwgZSk7CisgICAgICAgIH0KKyAgICAgICAgfQogCi0JICAgIHRyeSB7Ci0JCWhlbGxvLnRocm93RXhjZXB0aW9uKCJqYWthcnRhLmVqYi5JbGxlZ2FsTG9vcGJhY2tFeGNlcHRpb24iKTsKLQkJdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiZXhwZWN0ZWQgYW4gZXhjZXB0aW9uIik7Ci0JICAgIH0gY2F0Y2goSWxsZWdhbExvb3BiYWNrRXhjZXB0aW9uIGlsZSkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBleHBlY3RlZCAiICsgaWxlKTsKLQkgICAgfQorICAgICAgICBGdXR1cmU8U3RyaW5nPiBmdXR1cmVDYW5jZWwgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICBmdXR1cmVDYW5jZWwgPSBoZWxsby5hc3luY0NhbmNlbCg1KTsKKyAgICAgICAgZnV0dXJlQ2FuY2VsLmNhbmNlbCh0cnVlKTsKKyAgICAgICAgZnV0dXJlQ2FuY2VsLmdldCgpOworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJTaG91bGQgaGF2ZSBnb3R0ZW4gZXhjZXB0aW9uIik7CisgICAgICAgIH0gY2F0Y2goRXhlY3V0aW9uRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgaWYoIGUuZ2V0Q2F1c2UoKS5nZXRDbGFzcygpLmdldE5hbWUoKS5lcXVhbHMoImphdmEubGFuZy5FeGNlcHRpb24iKSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgY29ycmVjdCBhc3luYyBleGNlcHRpb24uIENhdXNlIGlzICIgKworICAgICAgICAgICAgICAgICAgICAgICBlLmdldENhdXNlKCkuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIndyb25nIGV4Y2VwdGlvbiIsIGUpOworICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB0cnkgeworICAgICAgICBoZWxsby50aHJvd0V4Y2VwdGlvbigiamFrYXJ0YS5lamIuQ29uY3VycmVudEFjY2Vzc0V4Y2VwdGlvbiIpOworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJleHBlY3RlZCBhbiBleGNlcHRpb24iKTsKKyAgICAgICAgfSBjYXRjaChDb25jdXJyZW50QWNjZXNzRXhjZXB0aW9uIGNhZSkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBleHBlY3RlZCAiICsgY2FlKTsKKyAgICAgICAgfQorCisgICAgICAgIHRyeSB7CisgICAgICAgIGhlbGxvLnRocm93RXhjZXB0aW9uKCJqYWthcnRhLmVqYi5Db25jdXJyZW50QWNjZXNzVGltZW91dEV4Y2VwdGlvbiIpOworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJleHBlY3RlZCBhbiBleGNlcHRpb24iKTsKKyAgICAgICAgfSBjYXRjaChDb25jdXJyZW50QWNjZXNzVGltZW91dEV4Y2VwdGlvbiBjYXQpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgZXhwZWN0ZWQgIiArIGNhdCk7CisgICAgICAgIH0KKworICAgICAgICB0cnkgeworICAgICAgICBoZWxsby50aHJvd0V4Y2VwdGlvbigiamFrYXJ0YS5lamIuSWxsZWdhbExvb3BiYWNrRXhjZXB0aW9uIik7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImV4cGVjdGVkIGFuIGV4Y2VwdGlvbiIpOworICAgICAgICB9IGNhdGNoKElsbGVnYWxMb29wYmFja0V4Y2VwdGlvbiBpbGUpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgZXhwZWN0ZWQgIiArIGlsZSk7CisgICAgICAgIH0KIAogCi0JICAgIC8vIEZ1bGx5LXF1YWxpZmllZCBwb3J0YWJsZSBnbG9iYWwKLQkgICAgSGVsbG9Ib21lIGhlbGxvSG9tZTIgPSAoSGVsbG9Ib21lKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6Z2xvYmFsLyIgKyBhcHBOYW1lICsgIi9IZWxsb0JlYW4hY29tLmFjbWUuSGVsbG9Ib21lIik7Ci0JICAgIGNhbGxIb21lKGhlbGxvSG9tZTIpOworICAgICAgICAvLyBGdWxseS1xdWFsaWZpZWQgcG9ydGFibGUgZ2xvYmFsCisgICAgICAgIEhlbGxvSG9tZSBoZWxsb0hvbWUyID0gKEhlbGxvSG9tZSkgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmdsb2JhbC8iICsgYXBwTmFtZSArICIvSGVsbG9CZWFuIWNvbS5hY21lLkhlbGxvSG9tZSIpOworICAgICAgICBjYWxsSG9tZShoZWxsb0hvbWUyKTsKIAotCSAgICBIZWxsbyBoZWxsbzIgPSAoSGVsbG8pIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpnbG9iYWwvIiArIGFwcE5hbWUgKyAiL0hlbGxvQmVhbiFjb20uYWNtZS5IZWxsbyIpOwotCSAgICBjYWxsQnVzSG9tZShoZWxsbzIpOworICAgICAgICBIZWxsbyBoZWxsbzIgPSAoSGVsbG8pIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpnbG9iYWwvIiArIGFwcE5hbWUgKyAiL0hlbGxvQmVhbiFjb20uYWNtZS5IZWxsbyIpOworICAgICAgICBjYWxsQnVzSG9tZShoZWxsbzIpOwogCi0JICAgIC8vIG5vbi1wb3J0YWJsZSBnbG9iYWwKLQkgICAgSGVsbG9Ib21lIGhlbGxvSG9tZTUgPSAoSGVsbG9Ib21lKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoIkhIIik7Ci0JICAgIGNhbGxIb21lKGhlbGxvSG9tZTUpOworICAgICAgICAvLyBub24tcG9ydGFibGUgZ2xvYmFsCisgICAgICAgIEhlbGxvSG9tZSBoZWxsb0hvbWU1ID0gKEhlbGxvSG9tZSkgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJISCIpOworICAgICAgICBjYWxsSG9tZShoZWxsb0hvbWU1KTsKIAotCSAgICBIZWxsbyBoZWxsbzUgPSAoSGVsbG8pIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiSEgjY29tLmFjbWUuSGVsbG8iKTsKLQkgICAgY2FsbEJ1c0hvbWUoaGVsbG81KTsKKyAgICAgICAgSGVsbG8gaGVsbG81ID0gKEhlbGxvKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoIkhII2NvbS5hY21lLkhlbGxvIik7CisgICAgICAgIGNhbGxCdXNIb21lKGhlbGxvNSk7CiAKLQkgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LlBBU1MpOworICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuUEFTUyk7CiAKLQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5GQUlMKTsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuRkFJTCk7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQogCiAgICAgfQogCiAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBjYWxsSG9tZShIZWxsb0hvbWUgaG9tZSkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JLy8JSGVsbG9Ib21lIGhvbWUgPSAoSGVsbG9Ib21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqLCBIZWxsb0hvbWUuY2xhc3MpOwotCUhlbGxvUmVtb3RlIGhyID0gaG9tZS5jcmVhdGUoKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIjIueCBIZWxsb1JlbW90ZS5oZWxsbygpIHNheXMgIiArIGhyLmhlbGxvKCkpOworICAgIC8vICAgIEhlbGxvSG9tZSBob21lID0gKEhlbGxvSG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9iaiwgSGVsbG9Ib21lLmNsYXNzKTsKKyAgICBIZWxsb1JlbW90ZSBociA9IGhvbWUuY3JlYXRlKCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIyLnggSGVsbG9SZW1vdGUuaGVsbG8oKSBzYXlzICIgKyBoci5oZWxsbygpKTsKICAgICB9CiAKICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGNhbGxCdXNIb21lKEhlbGxvIGgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvLmhlbGxvKCkgc2F5cyAiICsgaC5oZWxsbygpKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvLmhlbGxvKCkgc2F5cyAiICsgaC5oZWxsbygpKTsKICAgICB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcmVtb3RlMS9jbGllbnQvQ2xpZW50Mi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcmVtb3RlMS9jbGllbnQvQ2xpZW50Mi5qYXZhCmluZGV4IDliYjg3ZWYuLjgzMGNlMzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3JlbW90ZTEvY2xpZW50L0NsaWVudDIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9yZW1vdGUxL2NsaWVudC9DbGllbnQyLmphdmEKQEAgLTIzLDI5ICsyMywyOSBAQAogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewogCi0JU3RyaW5nIGhvc3Q7Ci0JIFN0cmluZyBwb3J0OworICAgIFN0cmluZyBob3N0OworICAgICBTdHJpbmcgcG9ydDsKIAotCXRyeSB7Ci0JICAgIFByb3BlcnRpZXMgcCA9IG5ldyBQcm9wZXJ0aWVzKCk7Ci0JICAgIGlmKCBhcmdzLmxlbmd0aCA+IDAgKSB7Ci0JCWhvc3QgPSBhcmdzWzBdOwotCQlwLnB1dCgib3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsSG9zdCIsIGhvc3QpOwotCSAgICB9CisgICAgdHJ5IHsKKyAgICAgICAgUHJvcGVydGllcyBwID0gbmV3IFByb3BlcnRpZXMoKTsKKyAgICAgICAgaWYoIGFyZ3MubGVuZ3RoID4gMCApIHsKKyAgICAgICAgaG9zdCA9IGFyZ3NbMF07CisgICAgICAgIHAucHV0KCJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxIb3N0IiwgaG9zdCk7CisgICAgICAgIH0KIAotCSAgICBpZiggYXJncy5sZW5ndGggPiAxICkgewotCQlwb3J0ID0gYXJnc1sxXTsKLQkJcC5wdXQoIm9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiLCBwb3J0KTsKLQkgICAgfQorICAgICAgICBpZiggYXJncy5sZW5ndGggPiAxICkgeworICAgICAgICBwb3J0ID0gYXJnc1sxXTsKKyAgICAgICAgcC5wdXQoIm9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiLCBwb3J0KTsKKyAgICAgICAgfQogCi0JICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KHApOwotCSAgICBIZWxsbyBoID0gKEhlbGxvKSBpYy5sb29rdXAoIkhII2NvbS5hY21lLkhlbGxvIik7Ci0JICAgIGguaGVsbG8oKTsKKyAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQocCk7CisgICAgICAgIEhlbGxvIGggPSAoSGVsbG8pIGljLmxvb2t1cCgiSEgjY29tLmFjbWUuSGVsbG8iKTsKKyAgICAgICAgaC5oZWxsbygpOwogCiAKLQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQorICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CiAKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3JlbW90ZTEvZWpiL0hlbGxvLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9yZW1vdGUxL2VqYi9IZWxsby5qYXZhCmluZGV4IDgwZWFhMzEuLjNlZGUwNmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3JlbW90ZTEvZWpiL0hlbGxvLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcmVtb3RlMS9lamIvSGVsbG8uamF2YQpAQCAtMzAsMTAgKzMwLDEwIEBACiAKICAgICAvLyBtYXJrZWQgYXN5bmMgb24gYmVhbiBjbGFzcwogICAgIHZvaWQgZmlyZUFuZEZvcmdldCgpOwotCQorCiAgICAgRnV0dXJlPFN0cmluZz4gYXN5bmNUaHJvd0V4Y2VwdGlvbihTdHJpbmcgZXhjZXB0aW9uVHlwZSk7CiAKICAgICBGdXR1cmU8U3RyaW5nPiBhc3luY0NhbmNlbChpbnQgc2Vjb25kcykgdGhyb3dzIEV4Y2VwdGlvbjsKLSAgICAKKwogICAgIHZvaWQgdGhyb3dFeGNlcHRpb24oU3RyaW5nIGV4Y2VwdGlvblR5cGUpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcmVtb3RlMS9lamIvSGVsbG9CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9yZW1vdGUxL2VqYi9IZWxsb0JlYW4uamF2YQppbmRleCBlZWMzNTIzLi5iMzFkNmUxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9yZW1vdGUxL2VqYi9IZWxsb0JlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9yZW1vdGUxL2VqYi9IZWxsb0JlYW4uamF2YQpAQCAtNTEsODMgKzUxLDgzIEBACiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHB1YmxpYyB2b2lkIGluaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb0JlYW46OmluaXQoKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9CZWFuOjppbml0KCkiKTsKICAgICB9CiAKICAgICBwdWJsaWMgU3RyaW5nIGhlbGxvKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9CZWFuOjpoZWxsbygpIik7Ci0JcmV0dXJuICJoZWxsbywgd29ybGRcbiI7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb0JlYW46OmhlbGxvKCkiKTsKKyAgICByZXR1cm4gImhlbGxvLCB3b3JsZFxuIjsKICAgICB9CiAKICAgICBAQXN5bmNocm9ub3VzCiAgICAgcHVibGljIEZ1dHVyZTxTdHJpbmc+IGhlbGxvQXN5bmMoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb0JlYW46OmhlbGxvQXN5bmMoKSIpOwotCXJldHVybiBuZXcgQXN5bmNSZXN1bHQ8U3RyaW5nPigiaGVsbywgYXN5bmMgd29ybGQhXG4iKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvQmVhbjo6aGVsbG9Bc3luYygpIik7CisgICAgcmV0dXJuIG5ldyBBc3luY1Jlc3VsdDxTdHJpbmc+KCJoZWxvLCBhc3luYyB3b3JsZCFcbiIpOwogICAgIH0KIAogICAgIEBBc3luY2hyb25vdXMKICAgICBwdWJsaWMgRnV0dXJlPFN0cmluZz4gYXN5bmNCbG9jayhpbnQgc2Vjb25kcykgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9CZWFuOjphc3luY0Jsb2NrIik7Ci0Jc2xlZXAoc2Vjb25kcyk7Ci0JcmV0dXJuIG5ldyBBc3luY1Jlc3VsdDxTdHJpbmc+KCJibG9ja2VkIHN1Y2Nlc3NmdWxseSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9CZWFuOjphc3luY0Jsb2NrIik7CisgICAgc2xlZXAoc2Vjb25kcyk7CisgICAgcmV0dXJuIG5ldyBBc3luY1Jlc3VsdDxTdHJpbmc+KCJibG9ja2VkIHN1Y2Nlc3NmdWxseSIpOwogICAgIH0KIAotICAgIEBBc3luY2hyb25vdXMgCisgICAgQEFzeW5jaHJvbm91cwogICAgIHB1YmxpYyB2b2lkIGZpcmVBbmRGb3JnZXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb0JlYW46OmZpcmVBbmRGb3JnZXQoKSIpOwotCXNsZWVwKDUpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9CZWFuOjpmaXJlQW5kRm9yZ2V0KCkiKTsKKyAgICBzbGVlcCg1KTsKICAgICB9Ci0JCisKICAgICBAQXN5bmNocm9ub3VzCiAgICAgcHVibGljIEZ1dHVyZTxTdHJpbmc+IGFzeW5jVGhyb3dFeGNlcHRpb24oU3RyaW5nIGV4Y2VwdGlvblR5cGUpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvQmVhbjo6YXN5bmNUaHJvd0V4Y2VwdGlvbiIpOwotCXRocm93RXhjZXB0aW9uKGV4Y2VwdGlvblR5cGUpOwotCXJldHVybiBuZXcgQXN5bmNSZXN1bHQ8U3RyaW5nPigic2hvdWxkIGhhdmUgdGhyb3duIGV4Y2VwdGlvbiIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9CZWFuOjphc3luY1Rocm93RXhjZXB0aW9uIik7CisgICAgdGhyb3dFeGNlcHRpb24oZXhjZXB0aW9uVHlwZSk7CisgICAgcmV0dXJuIG5ldyBBc3luY1Jlc3VsdDxTdHJpbmc+KCJzaG91bGQgaGF2ZSB0aHJvd24gZXhjZXB0aW9uIik7CiAgICAgfQogCiAgICAgQEFzeW5jaHJvbm91cwogICAgIHB1YmxpYyBGdXR1cmU8U3RyaW5nPiBhc3luY0NhbmNlbChpbnQgc2Vjb25kcykgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvQmVhbjo6YXN5bmNDYW5jZWwiKTsKLQlzbGVlcChzZWNvbmRzKTsKLQlpZiggc2Vzc2lvbkN0eC53YXNDYW5jZWxDYWxsZWQoKSApIHsKLQkgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiQ2FuY2VsZWQgYWZ0ZXIgIiArIHNlY29uZHMgKyAiIHNlY29uZHMiKTsKLQl9Ci0JcmV0dXJuIG5ldyBBc3luY1Jlc3VsdDxTdHJpbmc+KCJhc3luY0NhbmNlbCgpIHNob3VsZCBoYXZlIGJlZW4gY2FuY2VsbGVkIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb0JlYW46OmFzeW5jQ2FuY2VsIik7CisgICAgc2xlZXAoc2Vjb25kcyk7CisgICAgaWYoIHNlc3Npb25DdHgud2FzQ2FuY2VsQ2FsbGVkKCkgKSB7CisgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIkNhbmNlbGVkIGFmdGVyICIgKyBzZWNvbmRzICsgIiBzZWNvbmRzIik7CisgICAgfQorICAgIHJldHVybiBuZXcgQXN5bmNSZXN1bHQ8U3RyaW5nPigiYXN5bmNDYW5jZWwoKSBzaG91bGQgaGF2ZSBiZWVuIGNhbmNlbGxlZCIpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHRocm93RXhjZXB0aW9uKFN0cmluZyBleGNlcHRpb25UeXBlKSB7Ci0JaWYoIGV4Y2VwdGlvblR5cGUuZXF1YWxzKCJqYWthcnRhLmVqYi5FSkJFeGNlcHRpb24iKSApIHsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleGNlcHRpb25UeXBlKTsKLQl9IGVsc2UgaWYoIGV4Y2VwdGlvblR5cGUuZXF1YWxzKCJqYWthcnRhLmVqYi5Db25jdXJyZW50QWNjZXNzRXhjZXB0aW9uIikgKSB7Ci0JICAgIHRocm93IG5ldyBDb25jdXJyZW50QWNjZXNzRXhjZXB0aW9uKGV4Y2VwdGlvblR5cGUpOwotCX0gZWxzZSBpZiggZXhjZXB0aW9uVHlwZS5lcXVhbHMoImpha2FydGEuZWpiLkNvbmN1cnJlbnRBY2Nlc3NUaW1lb3V0RXhjZXB0aW9uIikgKSB7Ci0JICAgIHRocm93IG5ldyBDb25jdXJyZW50QWNjZXNzVGltZW91dEV4Y2VwdGlvbihleGNlcHRpb25UeXBlKTsKLQl9IGVsc2UgaWYoIGV4Y2VwdGlvblR5cGUuZXF1YWxzKCJqYWthcnRhLmVqYi5JbGxlZ2FsTG9vcGJhY2tFeGNlcHRpb24iKSApIHsKLQkgICAgdGhyb3cgbmV3IElsbGVnYWxMb29wYmFja0V4Y2VwdGlvbihleGNlcHRpb25UeXBlKTsKLQl9CisgICAgaWYoIGV4Y2VwdGlvblR5cGUuZXF1YWxzKCJqYWthcnRhLmVqYi5FSkJFeGNlcHRpb24iKSApIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleGNlcHRpb25UeXBlKTsKKyAgICB9IGVsc2UgaWYoIGV4Y2VwdGlvblR5cGUuZXF1YWxzKCJqYWthcnRhLmVqYi5Db25jdXJyZW50QWNjZXNzRXhjZXB0aW9uIikgKSB7CisgICAgICAgIHRocm93IG5ldyBDb25jdXJyZW50QWNjZXNzRXhjZXB0aW9uKGV4Y2VwdGlvblR5cGUpOworICAgIH0gZWxzZSBpZiggZXhjZXB0aW9uVHlwZS5lcXVhbHMoImpha2FydGEuZWpiLkNvbmN1cnJlbnRBY2Nlc3NUaW1lb3V0RXhjZXB0aW9uIikgKSB7CisgICAgICAgIHRocm93IG5ldyBDb25jdXJyZW50QWNjZXNzVGltZW91dEV4Y2VwdGlvbihleGNlcHRpb25UeXBlKTsKKyAgICB9IGVsc2UgaWYoIGV4Y2VwdGlvblR5cGUuZXF1YWxzKCJqYWthcnRhLmVqYi5JbGxlZ2FsTG9vcGJhY2tFeGNlcHRpb24iKSApIHsKKyAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxMb29wYmFja0V4Y2VwdGlvbihleGNlcHRpb25UeXBlKTsKKyAgICB9CiAKLQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKGV4Y2VwdGlvblR5cGUpOworICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oZXhjZXB0aW9uVHlwZSk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHNsZWVwKGludCBzZWNvbmRzKSB7CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvQmVhbjo6c2xlZXBpbmcgZm9yICIgKyBzZWNvbmRzICsgCi0JCQkgICAic2Vjb25kcyIpOwotCXRyeSB7Ci0JICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoc2Vjb25kcyAqIDEwMDApOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvQmVhbjo6d29rZSB1cCBmcm9tICIgKyBzZWNvbmRzICsgCi0JCQkgICAgICAgInNlY29uZCBzbGVlcCIpOwotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb0JlYW46OnNsZWVwaW5nIGZvciAiICsgc2Vjb25kcyArCisgICAgICAgICAgICAgICAic2Vjb25kcyIpOworICAgIHRyeSB7CisgICAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoc2Vjb25kcyAqIDEwMDApOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvQmVhbjo6d29rZSB1cCBmcm9tICIgKyBzZWNvbmRzICsKKyAgICAgICAgICAgICAgICAgICAic2Vjb25kIHNsZWVwIik7CisgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KIAogICAgIH0KIAogCiAgICAgQFByZURlc3Ryb3kKICAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9CZWFuOjpkZXN0cm95KCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvQmVhbjo6ZGVzdHJveSgpIik7CiAgICAgfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3JlbW90ZTEvZWpiL1NpbmdsZXRvbkJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3JlbW90ZTEvZWpiL1NpbmdsZXRvbkJlYW4uamF2YQppbmRleCAzN2IxMjY1Li5jNjc4YmRjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9yZW1vdGUxL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcmVtb3RlMS9lamIvU2luZ2xldG9uQmVhbi5qYXZhCkBAIC0zMiw1NiArMzIsNTYgQEAKICAgICBwdWJsaWMgdm9pZCBpbml0KCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46OmluaXQoKSIpOwogCi0JdHJ5IHsKLQkgICAgSGVsbG9SZW1vdGUgaHIgPSBoZWxsb0hvbWUuY3JlYXRlKCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG9oZWxsb1JlbW90ZS5oZWxsbygpIHNheXMgIiArIGhyLmhlbGxvKCkpOworICAgIHRyeSB7CisgICAgICAgIEhlbGxvUmVtb3RlIGhyID0gaGVsbG9Ib21lLmNyZWF0ZSgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvaGVsbG9SZW1vdGUuaGVsbG8oKSBzYXlzICIgKyBoci5oZWxsbygpKTsKIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvLmhlbGxvKCkgc2F5cyAiICsgaGVsbG8uaGVsbG8oKSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG8uaGVsbG8oKSBzYXlzICIgKyBoZWxsby5oZWxsbygpKTsKIAotCSAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogCi0JICAgIFNlc3Npb25Db250ZXh0IGN0eCA9IChTZXNzaW9uQ29udGV4dCkgCi0JCWljLmxvb2t1cCgiamF2YTptb2R1bGUvZW52L3Nlc0N0eCIpOworICAgICAgICBTZXNzaW9uQ29udGV4dCBjdHggPSAoU2Vzc2lvbkNvbnRleHQpCisgICAgICAgIGljLmxvb2t1cCgiamF2YTptb2R1bGUvZW52L3Nlc0N0eCIpOwogCi0JICAgIFNpbmdsZXRvbkJlYW4gbWUgPSAoU2luZ2xldG9uQmVhbikKLQkJaWMubG9va3VwKCJqYXZhOmFwcC9lamItZWpiMzEtZnVsbC1yZW1vdGUxLWVqYi9TaW5nbGV0b25CZWFuIik7Ci0JICAgIAotCSAgICBTaW5nbGV0b25CZWFuIG1lVG9vID0gKFNpbmdsZXRvbkJlYW4pCi0JCWljLmxvb2t1cCgiamF2YTphcHAvZWpiLWVqYjMxLWZ1bGwtcmVtb3RlMS1lamIvU2luZ2xldG9uQmVhbiFjb20uYWNtZS5TaW5nbGV0b25CZWFuIik7CisgICAgICAgIFNpbmdsZXRvbkJlYW4gbWUgPSAoU2luZ2xldG9uQmVhbikKKyAgICAgICAgaWMubG9va3VwKCJqYXZhOmFwcC9lamItZWpiMzEtZnVsbC1yZW1vdGUxLWVqYi9TaW5nbGV0b25CZWFuIik7CiAKLQkgICAgSGVsbG8gbTEgPSAoSGVsbG8pIGljLmxvb2t1cCgiamF2YTptb2R1bGUvZW52L00xIik7CisgICAgICAgIFNpbmdsZXRvbkJlYW4gbWVUb28gPSAoU2luZ2xldG9uQmVhbikKKyAgICAgICAgaWMubG9va3VwKCJqYXZhOmFwcC9lamItZWpiMzEtZnVsbC1yZW1vdGUxLWVqYi9TaW5nbGV0b25CZWFuIWNvbS5hY21lLlNpbmdsZXRvbkJlYW4iKTsKIAotCSAgICBIZWxsb0hvbWUgbTIgPSAoSGVsbG9Ib21lKSBjdHgubG9va3VwKCJqYXZhOm1vZHVsZS9NMiIpOworICAgICAgICBIZWxsbyBtMSA9IChIZWxsbykgaWMubG9va3VwKCJqYXZhOm1vZHVsZS9lbnYvTTEiKTsKIAotCSAgICBIZWxsbyBhMSA9IChIZWxsbykgY3R4Lmxvb2t1cCgiamF2YTphcHAvZW52L0ExIik7CisgICAgICAgIEhlbGxvSG9tZSBtMiA9IChIZWxsb0hvbWUpIGN0eC5sb29rdXAoImphdmE6bW9kdWxlL00yIik7CiAKLQkgICAgSGVsbG9Ib21lIGEyID0gKEhlbGxvSG9tZSkgaWMubG9va3VwKCJqYXZhOmFwcC9BMiIpOworICAgICAgICBIZWxsbyBhMSA9IChIZWxsbykgY3R4Lmxvb2t1cCgiamF2YTphcHAvZW52L0ExIik7CiAKLQkgICAgdHJ5IHsKLQkJaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L0MxIik7Ci0JCXRocm93IG5ldyBFSkJFeGNlcHRpb24oIkV4cGVjdGVkIGV4Y2VwdGlvbiBhY2Nlc3NpbmcgcHJpdmF0ZSBjb21wb25lbnQgZW52aXJvbm1lbnQgZW50cnkgb2YgSGVsbG9CZWFuIik7Ci0JICAgIH0gY2F0Y2goTmFtaW5nRXhjZXB0aW9uIGUpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgZGlkICpub3QqIGZpbmQgSGVsbG9CZWFuIHByaXZhdGUgY29tcG9uZW50IGVudmlyb25tZW50IGRlcGVuZGVuY3kiKTsKLQkgICAgfQorICAgICAgICBIZWxsb0hvbWUgYTIgPSAoSGVsbG9Ib21lKSBpYy5sb29rdXAoImphdmE6YXBwL0EyIik7CiAKLQkgICAgdHJ5IHsKLQkJaWMubG9va3VwKCJqYXZhOmNvbXAvQzEiKTsKLQkJdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiRXhwZWN0ZWQgZXhjZXB0aW9uIGFjY2Vzc2luZyBwcml2YXRlIGNvbXBvbmVudCBlbnZpcm9ubWVudCBlbnRyeSBvZiBIZWxsb0JlYW4iKTsKLQkgICAgfSBjYXRjaChOYW1pbmdFeGNlcHRpb24gZSkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSBkaWQgKm5vdCogZmluZCBIZWxsb0JlYW4gcHJpdmF0ZSBjb21wb25lbnQgZW52aXJvbm1lbnQgZGVwZW5kZW5jeSIpOwotCSAgICB9CisgICAgICAgIHRyeSB7CisgICAgICAgIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9DMSIpOworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJFeHBlY3RlZCBleGNlcHRpb24gYWNjZXNzaW5nIHByaXZhdGUgY29tcG9uZW50IGVudmlyb25tZW50IGVudHJ5IG9mIEhlbGxvQmVhbiIpOworICAgICAgICB9IGNhdGNoKE5hbWluZ0V4Y2VwdGlvbiBlKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGRpZCAqbm90KiBmaW5kIEhlbGxvQmVhbiBwcml2YXRlIGNvbXBvbmVudCBlbnZpcm9ubWVudCBkZXBlbmRlbmN5Iik7CisgICAgICAgIH0KIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk15IEFwcE5hbWUgPSAiICsgCi0JCQkgICAgICAgY3R4Lmxvb2t1cCgiamF2YTphcHAvQXBwTmFtZSIpKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgaWMubG9va3VwKCJqYXZhOmNvbXAvQzEiKTsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiRXhwZWN0ZWQgZXhjZXB0aW9uIGFjY2Vzc2luZyBwcml2YXRlIGNvbXBvbmVudCBlbnZpcm9ubWVudCBlbnRyeSBvZiBIZWxsb0JlYW4iKTsKKyAgICAgICAgfSBjYXRjaChOYW1pbmdFeGNlcHRpb24gZSkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSBkaWQgKm5vdCogZmluZCBIZWxsb0JlYW4gcHJpdmF0ZSBjb21wb25lbnQgZW52aXJvbm1lbnQgZGVwZW5kZW5jeSIpOworICAgICAgICB9CiAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJNeSBNb2R1bGVOYW1lID0gIiArIAotCQkJICAgICAgIGN0eC5sb29rdXAoImphdmE6bW9kdWxlL01vZHVsZU5hbWUiKSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTXkgQXBwTmFtZSA9ICIgKworICAgICAgICAgICAgICAgICAgIGN0eC5sb29rdXAoImphdmE6YXBwL0FwcE5hbWUiKSk7CiAKLQkJCSAgICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNeSBNb2R1bGVOYW1lID0gIiArCisgICAgICAgICAgICAgICAgICAgY3R4Lmxvb2t1cCgiamF2YTptb2R1bGUvTW9kdWxlTmFtZSIpKTsKIAotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigic2luZ2xldG9uIGluaXQgZXJyb3IiICwgZSk7Ci0JfQorCisKKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oInNpbmdsZXRvbiBpbml0IGVycm9yIiAsIGUpOworICAgIH0KIAogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcmVtb3RlMi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcmVtb3RlMi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDhjOTdhNzIuLjFmOGY1YzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3JlbW90ZTIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9yZW1vdGUyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEyICsxNSwxMiBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMxLWZ1bGwtcmVtb3RlMiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gCi08cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+XHUwMDIwCis8cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InNlLmNsaWVudCIgdmFsdWU9ImNvbS5hY21lLkNsaWVudCIvPgotCQorCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3JlbW90ZTIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcmVtb3RlMi9idWlsZC54bWwKaW5kZXggMmRmYmFhOC4uZTIxZmRhOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcmVtb3RlMi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcmVtb3RlMi9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDEyICs0NiwxMiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZWpiLWphci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktamFyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNTksOSArNTksOSBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuX3NlIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bl9zZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgIDxqYXZhICBmb3JrPSJvbiIgCisgICAgICAgPGphdmEgIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iJHtzZS5jbGllbnR9Ij4KQEAgLTczLDcgKzczLDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qYXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3JlbW90ZTIvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcmVtb3RlMi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggOWNhZDAwOS4uNGY2N2I2MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcmVtb3RlMi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcmVtb3RlMi9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI2LDQyICsyNiw0MiBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgYXBwTmFtZTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKIAotCWFwcE5hbWUgPSBhcmdzWzBdOyAKLQlzdGF0LmFkZERlc2NyaXB0aW9uKGFwcE5hbWUpOwotCUNsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOyAgICAgICAKLSAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzWzFdKTsJCisgICAgYXBwTmFtZSA9IGFyZ3NbMF07CisgICAgc3RhdC5hZGREZXNjcmlwdGlvbihhcHBOYW1lKTsKKyAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKKyAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzWzFdKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoYXBwTmFtZSArICJJRCIpOwogICAgIH0KIAotICAgIHB1YmxpYyBDbGllbnQoU3RyaW5nW10gYXJncykgewkKKyAgICBwdWJsaWMgQ2xpZW50KFN0cmluZ1tdIGFyZ3MpIHsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nIG90aGVyQXBwKSB7CiAKLQl0cnkgeworICAgIHRyeSB7CiAKLQkgICAgSGVsbG8gaEdsb2JhbCA9ICAoSGVsbG8pIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpnbG9iYWwvSEJHbG9iYWwiKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJoR2xvYmFsID0gIiArIGhHbG9iYWwpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oImhHbG9iYWwgaGVsbG8gPSAiICsgaEdsb2JhbC5oZWxsbygpKTsKKyAgICAgICAgSGVsbG8gaEdsb2JhbCA9ICAoSGVsbG8pIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpnbG9iYWwvSEJHbG9iYWwiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJoR2xvYmFsID0gIiArIGhHbG9iYWwpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImhHbG9iYWwgaGVsbG8gPSAiICsgaEdsb2JhbC5oZWxsbygpKTsKIAotCSAgICBTaW5nbGV0b25SZW1vdGUgc2luZ2xldG9uID0gKFNpbmdsZXRvblJlbW90ZSkgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmdsb2JhbC8iICsgYXBwTmFtZSArICIvU2luZ2xldG9uQmVhbiIpOworICAgICAgICBTaW5nbGV0b25SZW1vdGUgc2luZ2xldG9uID0gKFNpbmdsZXRvblJlbW90ZSkgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmdsb2JhbC8iICsgYXBwTmFtZSArICIvU2luZ2xldG9uQmVhbiIpOwogCi0JICAgIC8vIHBhc3MgbmFtZSBvZiByZW1vdGVzdGF0ZWxlc3MgYXBwCi0JICAgIHNpbmdsZXRvbi5kb1Rlc3Qob3RoZXJBcHApOworICAgICAgICAvLyBwYXNzIG5hbWUgb2YgcmVtb3Rlc3RhdGVsZXNzIGFwcAorICAgICAgICBzaW5nbGV0b24uZG9UZXN0KG90aGVyQXBwKTsKIAotCSAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuUEFTUyk7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5QQVNTKTsKIAotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LkZBSUwpOwotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCX0KKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5GQUlMKTsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CiAKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3JlbW90ZTIvZWpiL0hlbGxvLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9yZW1vdGUyL2VqYi9IZWxsby5qYXZhCmluZGV4IDgwZWFhMzEuLjNlZGUwNmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3JlbW90ZTIvZWpiL0hlbGxvLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcmVtb3RlMi9lamIvSGVsbG8uamF2YQpAQCAtMzAsMTAgKzMwLDEwIEBACiAKICAgICAvLyBtYXJrZWQgYXN5bmMgb24gYmVhbiBjbGFzcwogICAgIHZvaWQgZmlyZUFuZEZvcmdldCgpOwotCQorCiAgICAgRnV0dXJlPFN0cmluZz4gYXN5bmNUaHJvd0V4Y2VwdGlvbihTdHJpbmcgZXhjZXB0aW9uVHlwZSk7CiAKICAgICBGdXR1cmU8U3RyaW5nPiBhc3luY0NhbmNlbChpbnQgc2Vjb25kcykgdGhyb3dzIEV4Y2VwdGlvbjsKLSAgICAKKwogICAgIHZvaWQgdGhyb3dFeGNlcHRpb24oU3RyaW5nIGV4Y2VwdGlvblR5cGUpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcmVtb3RlMi9lamIvU2luZ2xldG9uQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcmVtb3RlMi9lamIvU2luZ2xldG9uQmVhbi5qYXZhCmluZGV4IDA2YWM0M2UuLmYyOWIwZGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3JlbW90ZTIvZWpiL1NpbmdsZXRvbkJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9yZW1vdGUyL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKQEAgLTM2LDcgKzM2LDcgQEAKICAgICBARUpCKG5hbWU9ImhlbGxvaG9tZXJlZiIsIG1hcHBlZE5hbWU9IkhIIikgSGVsbG9Ib21lIGhlbGxvSG9tZTsKIAogICAgIEBFSkIobmFtZT0iaGVsbG9yZWYyIiwgbG9va3VwPSJISCNjb20uYWNtZS5IZWxsbyIpIEhlbGxvIGhlbGxvMjsKLSAgICBARUpCKG5hbWU9ImhlbGxvaG9tZXJlZjIiLCBsb29rdXA9IkhIIikgSGVsbG9Ib21lIGhlbGxvSG9tZTI7IAorICAgIEBFSkIobmFtZT0iaGVsbG9ob21lcmVmMiIsIGxvb2t1cD0iSEgiKSBIZWxsb0hvbWUgaGVsbG9Ib21lMjsKIAogICAgIEBFSkIgUmVtb3RlQXN5bmMgc3RhdGVmdWxCZWFuOwogCkBAIC01MCwxOTIgKzUwLDE5MiBAQAogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZyB0YXJnZXRBcHBOYW1lKSB7CiAKLQl0cnkgeworICAgIHRyeSB7CiAKLQkgICAgSGVsbG8gaEdsb2JhbCA9IChIZWxsbykgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmdsb2JhbC9IQkdsb2JhbCIpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oImhHbG9iYWwgPSAiICsgaEdsb2JhbCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaEdsb2JhbCBoZWxsbyA9ICIgKyBoR2xvYmFsLmhlbGxvKCkpOworICAgICAgICBIZWxsbyBoR2xvYmFsID0gKEhlbGxvKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6Z2xvYmFsL0hCR2xvYmFsIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaEdsb2JhbCA9ICIgKyBoR2xvYmFsKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJoR2xvYmFsIGhlbGxvID0gIiArIGhHbG9iYWwuaGVsbG8oKSk7CiAKLQkgICAgIEZ1dHVyZTxTdHJpbmc+IGZ1dHVyZVNmdWwgPSBzdGF0ZWZ1bEJlYW4uaGVsbG9Bc3luYygpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlZnVsIGJlYW4gc2F5cyAiICsgZnV0dXJlU2Z1bC5nZXQoKSk7CisgICAgICAgICBGdXR1cmU8U3RyaW5nPiBmdXR1cmVTZnVsID0gc3RhdGVmdWxCZWFuLmhlbGxvQXN5bmMoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZWZ1bCBiZWFuIHNheXMgIiArIGZ1dHVyZVNmdWwuZ2V0KCkpOwogCi0JICAgIGZ1dHVyZVNmdWwgPSBzdGF0ZWZ1bEJlYW4ucmVtb3ZlQWZ0ZXJDYWxsaW5nKCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVmdWwgYmVhbiByZW1vdmVkIHN0YXR1cyA9ICIgKyBmdXR1cmVTZnVsLmdldCgpKTsKKyAgICAgICAgZnV0dXJlU2Z1bCA9IHN0YXRlZnVsQmVhbi5yZW1vdmVBZnRlckNhbGxpbmcoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZWZ1bCBiZWFuIHJlbW92ZWQgc3RhdHVzID0gIiArIGZ1dHVyZVNmdWwuZ2V0KCkpOwogCi0JICAgIGJvb2xlYW4gZ290U2Z1bEV4Y2VwdGlvbiA9IGZhbHNlOwotCSAgICB0cnkgewotCQlmdXR1cmVTZnVsID0gc3RhdGVmdWxCZWFuLmhlbGxvQXN5bmMoKTsgICAgCi0JICAgIH0gY2F0Y2goTm9TdWNoRUpCRXhjZXB0aW9uIG5zZWUpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJHb3QgbnNlZSBmcm9tIGhlbGxvQXN5bmMiKTsKLQkJZ290U2Z1bEV4Y2VwdGlvbiA9IHRydWU7Ci0JICAgIH0KKyAgICAgICAgYm9vbGVhbiBnb3RTZnVsRXhjZXB0aW9uID0gZmFsc2U7CisgICAgICAgIHRyeSB7CisgICAgICAgIGZ1dHVyZVNmdWwgPSBzdGF0ZWZ1bEJlYW4uaGVsbG9Bc3luYygpOworICAgICAgICB9IGNhdGNoKE5vU3VjaEVKQkV4Y2VwdGlvbiBuc2VlKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IG5zZWUgZnJvbSBoZWxsb0FzeW5jIik7CisgICAgICAgIGdvdFNmdWxFeGNlcHRpb24gPSB0cnVlOworICAgICAgICB9CiAKLQkgICAgdHJ5IHsKLQkJaWYoICFnb3RTZnVsRXhjZXB0aW9uICkgewotCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJyZXR1cm4gdmFsdWUgPSAiICsgZnV0dXJlU2Z1bC5nZXQoKSk7Ci0JCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJTaG91bGQgaGF2ZSBnb3R0ZW4gZXhjZXB0aW9uIik7Ci0JCX0KLQkgICAgfSBjYXRjaChFeGVjdXRpb25FeGNlcHRpb24gZWUpIHsKLQkJaWYoIGVlLmdldENhdXNlKCkgaW5zdGFuY2VvZiBOb1N1Y2hFSkJFeGNlcHRpb24gKSB7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSBjYXVnaHQgTm9TdWNoRUpCRXhjZXB0aW9uIHdoZW4gIiArCi0JCQkJICAgICAgICJhY2Nlc3Npbmcgc2Z1bCBiZWFuIGFzeW5jaHJvbm91c2x5IGFmdGVyIHJlbW92YWwiKTsKLQkJfSBlbHNlIHsKLQkJICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIndyb25nIGV4Y2VwdGlvbiBkdXJpbmcgc2ZzYiBhY2Nlc3MgYWZ0ZXIgcmVtb3ZhbCIsCi0JCQkJCSAgIGVlKTsKLQkJfQotCSAgICB9CisgICAgICAgIHRyeSB7CisgICAgICAgIGlmKCAhZ290U2Z1bEV4Y2VwdGlvbiApIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigicmV0dXJuIHZhbHVlID0gIiArIGZ1dHVyZVNmdWwuZ2V0KCkpOworICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiU2hvdWxkIGhhdmUgZ290dGVuIGV4Y2VwdGlvbiIpOworICAgICAgICB9CisgICAgICAgIH0gY2F0Y2goRXhlY3V0aW9uRXhjZXB0aW9uIGVlKSB7CisgICAgICAgIGlmKCBlZS5nZXRDYXVzZSgpIGluc3RhbmNlb2YgTm9TdWNoRUpCRXhjZXB0aW9uICkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgY2F1Z2h0IE5vU3VjaEVKQkV4Y2VwdGlvbiB3aGVuICIgKworICAgICAgICAgICAgICAgICAgICAgICAiYWNjZXNzaW5nIHNmdWwgYmVhbiBhc3luY2hyb25vdXNseSBhZnRlciByZW1vdmFsIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJ3cm9uZyBleGNlcHRpb24gZHVyaW5nIHNmc2IgYWNjZXNzIGFmdGVyIHJlbW92YWwiLAorICAgICAgICAgICAgICAgICAgICAgICBlZSk7CisgICAgICAgIH0KKyAgICAgICAgfQogCi0JICAgIFN0cmluZyB0YXJnZXRBcHBKbmRpUHJlZml4ID0gImphdmE6Z2xvYmFsLyIgKyB0YXJnZXRBcHBOYW1lICsgIi8iOworICAgICAgICBTdHJpbmcgdGFyZ2V0QXBwSm5kaVByZWZpeCA9ICJqYXZhOmdsb2JhbC8iICsgdGFyZ2V0QXBwTmFtZSArICIvIjsKIAotCSAgICBIZWxsb0hvbWUgaGVsbG9Ib21lUEdsb2JhbCA9IChIZWxsb0hvbWUpIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCh0YXJnZXRBcHBKbmRpUHJlZml4ICsgIkhlbGxvQmVhbiFjb20uYWNtZS5IZWxsb0hvbWUiKTsKKyAgICAgICAgSGVsbG9Ib21lIGhlbGxvSG9tZVBHbG9iYWwgPSAoSGVsbG9Ib21lKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAodGFyZ2V0QXBwSm5kaVByZWZpeCArICJIZWxsb0JlYW4hY29tLmFjbWUuSGVsbG9Ib21lIik7CiAKIAotCSAgICBPUkIgb3JiID0gKE9SQikgc2VzQ3R4Lmxvb2t1cCgiamF2YTpjb21wL09SQiIpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9yYiA9ICIgKyBvcmIpOwotCSAgICBPUkIgb3JiMiA9IChPUkIpIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpjb21wL09SQiIpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9yYjIgPSAiICsgb3JiMik7CisgICAgICAgIE9SQiBvcmIgPSAoT1JCKSBzZXNDdHgubG9va3VwKCJqYXZhOmNvbXAvT1JCIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigib3JiID0gIiArIG9yYik7CisgICAgICAgIE9SQiBvcmIyID0gKE9SQikgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmNvbXAvT1JCIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigib3JiMiA9ICIgKyBvcmIyKTsKIAogCi0JICAgIEZ1dHVyZTxTdHJpbmc+IGZ1dHVyZSA9IGhlbGxvLmhlbGxvQXN5bmMoKTsJICAgCi0JICAgIAotCSAgICAvLyAibWVtb3J5IGxlYWsiIGRvbid0IGNhbGwgZ2V0IG9uIGFzeW5jIHRoYXQgcmV0dXJucyBhIGZ1dHVyZQotCSAgICAvLyBBdCB0aGUgbGVhc3Qgc2hvdWxkIGJlIGNsZWFuZWQgdXAgYXQgY29udGFpbmVyIHNodXRkb3duIGJ1dAotCSAgICAvLyBidXQgcG9zc2libHkgc29vbmVyCi0JICAgIGhlbGxvLmhlbGxvQXN5bmMoKTsKLQkgICAgaGVsbG8uaGVsbG9Bc3luYygpOwotCSAgICBoZWxsby5oZWxsb0FzeW5jKCk7CisgICAgICAgIEZ1dHVyZTxTdHJpbmc+IGZ1dHVyZSA9IGhlbGxvLmhlbGxvQXN5bmMoKTsKKworICAgICAgICAvLyAibWVtb3J5IGxlYWsiIGRvbid0IGNhbGwgZ2V0IG9uIGFzeW5jIHRoYXQgcmV0dXJucyBhIGZ1dHVyZQorICAgICAgICAvLyBBdCB0aGUgbGVhc3Qgc2hvdWxkIGJlIGNsZWFuZWQgdXAgYXQgY29udGFpbmVyIHNodXRkb3duIGJ1dAorICAgICAgICAvLyBidXQgcG9zc2libHkgc29vbmVyCisgICAgICAgIGhlbGxvLmhlbGxvQXN5bmMoKTsKKyAgICAgICAgaGVsbG8uaGVsbG9Bc3luYygpOworICAgICAgICBoZWxsby5oZWxsb0FzeW5jKCk7CiAKIAotCSAgICBoZWxsby5maXJlQW5kRm9yZ2V0KCk7CSAgIAotCSAgIAotCSAgICB0cnkgewotCQlTdHJpbmcgcmVzdWx0ID0gZnV0dXJlLmdldCgpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oImhlbGxvQXN5bmMoKSBzYXlzIDogIiArIHJlc3VsdCk7Ci0JICAgIH0gY2F0Y2goRXhlY3V0aW9uRXhjZXB0aW9uIGUpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJHb3QgYXN5bmMgRXhlY3V0aW9uRXhjZXB0aW9uLiBDYXVzZSBpcyAiICsKLQkJCQkgICBlLmdldENhdXNlKCkuZ2V0TWVzc2FnZSgpKTsKLQkJZS5nZXRDYXVzZSgpLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICB9CisgICAgICAgIGhlbGxvLmZpcmVBbmRGb3JnZXQoKTsKIAotCSAgICBGdXR1cmU8U3RyaW5nPiBmdXR1cmVUTyA9IGhlbGxvLmFzeW5jQmxvY2soNSk7CSAgICAKLQkgICAgLy8gVGVzdCB0aW1lb3V0Ci0JICAgIHRyeSB7CisgICAgICAgIHRyeSB7CisgICAgICAgIFN0cmluZyByZXN1bHQgPSBmdXR1cmUuZ2V0KCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaGVsbG9Bc3luYygpIHNheXMgOiAiICsgcmVzdWx0KTsKKyAgICAgICAgfSBjYXRjaChFeGVjdXRpb25FeGNlcHRpb24gZSkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBhc3luYyBFeGVjdXRpb25FeGNlcHRpb24uIENhdXNlIGlzICIgKworICAgICAgICAgICAgICAgICAgIGUuZ2V0Q2F1c2UoKS5nZXRNZXNzYWdlKCkpOworICAgICAgICBlLmdldENhdXNlKCkucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KIAotCQlTdHJpbmcgcmVzdWx0ID0gZnV0dXJlVE8uZ2V0KDEsIFRpbWVVbml0Lk1JTExJU0VDT05EUyk7Ci0JCXRocm93IG5ldyBFSkJFeGNlcHRpb24oIlNob3VsZCBoYXZlIHRpbWVkIG91dCIpOwotCSAgICB9IGNhdGNoKFRpbWVvdXRFeGNlcHRpb24gdG9lKSB7Ci0JCXRyeSB7Ci0JCSAgICBTdHJpbmcgcmVzdWx0ID0gZnV0dXJlVE8uZ2V0KCk7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oImFzeW5jQmxvY2soKSBzYXlzIDogIiArIHJlc3VsdCk7Ci0JCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkJICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7Ci0JCX0KLQkgICAgfSBjYXRjaChFeGVjdXRpb25FeGNlcHRpb24gZSkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBhc3luYyBFeGVjdXRpb25FeGNlcHRpb24uIENhdXNlIGlzICIgKwotCQkJCSAgIGUuZ2V0Q2F1c2UoKS5nZXRNZXNzYWdlKCkpOwotCQllLmdldENhdXNlKCkucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIH0KLQkgCi0JICAgIEZ1dHVyZTxTdHJpbmc+IGZ1dHVyZUV4Y2VwdGlvbiA9IAotCQloZWxsby5hc3luY1Rocm93RXhjZXB0aW9uKCJqYWthcnRhLmVqYi5Db25jdXJyZW50QWNjZXNzVGltZW91dEV4Y2VwdGlvbiIpOwotCSAgICB0cnkgewotCQlTdHJpbmcgcmVzdWx0ID0gZnV0dXJlRXhjZXB0aW9uLmdldCgpOwotCQl0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJTaG91bGQgaGF2ZSBnb3R0ZW4gZXhjZXB0aW9uIik7Ci0JICAgIH0gY2F0Y2goRXhlY3V0aW9uRXhjZXB0aW9uIGUpIHsKLQkJaWYoIGUuZ2V0Q2F1c2UoKSBpbnN0YW5jZW9mIGpha2FydGEuZWpiLkNvbmN1cnJlbnRBY2Nlc3NUaW1lb3V0RXhjZXB0aW9uKSB7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBjb3JyZWN0IGFzeW5jIGV4Y2VwdGlvbi4gQ2F1c2UgaXMgIiArCi0JCQkJICAgICAgIGUuZ2V0Q2F1c2UoKS5nZXRNZXNzYWdlKCkpOwotCQl9IGVsc2UgewotCQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigid3JvbmcgZXhjZXB0aW9uIiwgZSk7Ci0JCX0KLQkgICAgfQorICAgICAgICBGdXR1cmU8U3RyaW5nPiBmdXR1cmVUTyA9IGhlbGxvLmFzeW5jQmxvY2soNSk7CisgICAgICAgIC8vIFRlc3QgdGltZW91dAorICAgICAgICB0cnkgewogCi0JICAgIEZ1dHVyZTxTdHJpbmc+IGZ1dHVyZUNhbmNlbCA9IG51bGw7Ci0JICAgIHRyeSB7Ci0JCWZ1dHVyZUNhbmNlbCA9IGhlbGxvLmFzeW5jQ2FuY2VsKDUpOwotCQlmdXR1cmVDYW5jZWwuY2FuY2VsKHRydWUpOwotCQlmdXR1cmVDYW5jZWwuZ2V0KCk7CQotCQl0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJTaG91bGQgaGF2ZSBnb3R0ZW4gZXhjZXB0aW9uIik7Ci0JICAgIH0gY2F0Y2goRXhlY3V0aW9uRXhjZXB0aW9uIGUpIHsKLQkJaWYoIGUuZ2V0Q2F1c2UoKS5nZXRDbGFzcygpLmdldE5hbWUoKS5lcXVhbHMoImphdmEubGFuZy5FeGNlcHRpb24iKSkgewotCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgY29ycmVjdCBhc3luYyBleGNlcHRpb24uIENhdXNlIGlzICIgKwotCQkJCSAgICAgICBlLmdldENhdXNlKCkuZ2V0TWVzc2FnZSgpKTsKLQkJfSBlbHNlIHsKLQkJICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIndyb25nIGV4Y2VwdGlvbiIsIGUpOwotCQl9Ci0JICAgIH0KKyAgICAgICAgU3RyaW5nIHJlc3VsdCA9IGZ1dHVyZVRPLmdldCgxLCBUaW1lVW5pdC5NSUxMSVNFQ09ORFMpOworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJTaG91bGQgaGF2ZSB0aW1lZCBvdXQiKTsKKyAgICAgICAgfSBjYXRjaChUaW1lb3V0RXhjZXB0aW9uIHRvZSkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgU3RyaW5nIHJlc3VsdCA9IGZ1dHVyZVRPLmdldCgpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJhc3luY0Jsb2NrKCkgc2F5cyA6ICIgKyByZXN1bHQpOworICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOworICAgICAgICB9CisgICAgICAgIH0gY2F0Y2goRXhlY3V0aW9uRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgYXN5bmMgRXhlY3V0aW9uRXhjZXB0aW9uLiBDYXVzZSBpcyAiICsKKyAgICAgICAgICAgICAgICAgICBlLmdldENhdXNlKCkuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgZS5nZXRDYXVzZSgpLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CiAKLQkgICAgLy8gaW5qZWN0ZWQKLQkgICAgY2FsbEhvbWUoaGVsbG9Ib21lKTsKLQkgICAgY2FsbEJ1c0hvbWUoaGVsbG8pOworICAgICAgICBGdXR1cmU8U3RyaW5nPiBmdXR1cmVFeGNlcHRpb24gPQorICAgICAgICBoZWxsby5hc3luY1Rocm93RXhjZXB0aW9uKCJqYWthcnRhLmVqYi5Db25jdXJyZW50QWNjZXNzVGltZW91dEV4Y2VwdGlvbiIpOworICAgICAgICB0cnkgeworICAgICAgICBTdHJpbmcgcmVzdWx0ID0gZnV0dXJlRXhjZXB0aW9uLmdldCgpOworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJTaG91bGQgaGF2ZSBnb3R0ZW4gZXhjZXB0aW9uIik7CisgICAgICAgIH0gY2F0Y2goRXhlY3V0aW9uRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgaWYoIGUuZ2V0Q2F1c2UoKSBpbnN0YW5jZW9mIGpha2FydGEuZWpiLkNvbmN1cnJlbnRBY2Nlc3NUaW1lb3V0RXhjZXB0aW9uKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBjb3JyZWN0IGFzeW5jIGV4Y2VwdGlvbi4gQ2F1c2UgaXMgIiArCisgICAgICAgICAgICAgICAgICAgICAgIGUuZ2V0Q2F1c2UoKS5nZXRNZXNzYWdlKCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigid3JvbmcgZXhjZXB0aW9uIiwgZSk7CisgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEZ1dHVyZTxTdHJpbmc+IGZ1dHVyZUNhbmNlbCA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgIGZ1dHVyZUNhbmNlbCA9IGhlbGxvLmFzeW5jQ2FuY2VsKDUpOworICAgICAgICBmdXR1cmVDYW5jZWwuY2FuY2VsKHRydWUpOworICAgICAgICBmdXR1cmVDYW5jZWwuZ2V0KCk7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIlNob3VsZCBoYXZlIGdvdHRlbiBleGNlcHRpb24iKTsKKyAgICAgICAgfSBjYXRjaChFeGVjdXRpb25FeGNlcHRpb24gZSkgeworICAgICAgICBpZiggZS5nZXRDYXVzZSgpLmdldENsYXNzKCkuZ2V0TmFtZSgpLmVxdWFscygiamF2YS5sYW5nLkV4Y2VwdGlvbiIpKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBjb3JyZWN0IGFzeW5jIGV4Y2VwdGlvbi4gQ2F1c2UgaXMgIiArCisgICAgICAgICAgICAgICAgICAgICAgIGUuZ2V0Q2F1c2UoKS5nZXRNZXNzYWdlKCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigid3JvbmcgZXhjZXB0aW9uIiwgZSk7CisgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIGluamVjdGVkCisgICAgICAgIGNhbGxIb21lKGhlbGxvSG9tZSk7CisgICAgICAgIGNhbGxCdXNIb21lKGhlbGxvKTsKIAogCi0JICAgIHRyeSB7Ci0JCWhlbGxvLnRocm93RXhjZXB0aW9uKCJqYWthcnRhLmVqYi5Db25jdXJyZW50QWNjZXNzRXhjZXB0aW9uIik7Ci0JCXRocm93IG5ldyBFSkJFeGNlcHRpb24oImV4cGVjdGVkIGFuIGV4Y2VwdGlvbiIpOwotCSAgICB9IGNhdGNoKENvbmN1cnJlbnRBY2Nlc3NFeGNlcHRpb24gY2FlKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiR290IGV4cGVjdGVkICIgKyBjYWUpOwotCSAgICB9CisgICAgICAgIHRyeSB7CisgICAgICAgIGhlbGxvLnRocm93RXhjZXB0aW9uKCJqYWthcnRhLmVqYi5Db25jdXJyZW50QWNjZXNzRXhjZXB0aW9uIik7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImV4cGVjdGVkIGFuIGV4Y2VwdGlvbiIpOworICAgICAgICB9IGNhdGNoKENvbmN1cnJlbnRBY2Nlc3NFeGNlcHRpb24gY2FlKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IGV4cGVjdGVkICIgKyBjYWUpOworICAgICAgICB9CiAKLQkgICAgdHJ5IHsKLQkJaGVsbG8udGhyb3dFeGNlcHRpb24oImpha2FydGEuZWpiLkNvbmN1cnJlbnRBY2Nlc3NUaW1lb3V0RXhjZXB0aW9uIik7Ci0JCXRocm93IG5ldyBFSkJFeGNlcHRpb24oImV4cGVjdGVkIGFuIGV4Y2VwdGlvbiIpOwotCSAgICB9IGNhdGNoKENvbmN1cnJlbnRBY2Nlc3NUaW1lb3V0RXhjZXB0aW9uIGNhdCkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBleHBlY3RlZCAiICsgY2F0KTsKLQkgICAgfQorICAgICAgICB0cnkgeworICAgICAgICBoZWxsby50aHJvd0V4Y2VwdGlvbigiamFrYXJ0YS5lamIuQ29uY3VycmVudEFjY2Vzc1RpbWVvdXRFeGNlcHRpb24iKTsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiZXhwZWN0ZWQgYW4gZXhjZXB0aW9uIik7CisgICAgICAgIH0gY2F0Y2goQ29uY3VycmVudEFjY2Vzc1RpbWVvdXRFeGNlcHRpb24gY2F0KSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IGV4cGVjdGVkICIgKyBjYXQpOworICAgICAgICB9CiAKLQkgICAgdHJ5IHsKLQkJaGVsbG8udGhyb3dFeGNlcHRpb24oImpha2FydGEuZWpiLklsbGVnYWxMb29wYmFja0V4Y2VwdGlvbiIpOwotCQl0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJleHBlY3RlZCBhbiBleGNlcHRpb24iKTsKLQkgICAgfSBjYXRjaChJbGxlZ2FsTG9vcGJhY2tFeGNlcHRpb24gaWxlKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiR290IGV4cGVjdGVkICIgKyBpbGUpOwotCSAgICB9CisgICAgICAgIHRyeSB7CisgICAgICAgIGhlbGxvLnRocm93RXhjZXB0aW9uKCJqYWthcnRhLmVqYi5JbGxlZ2FsTG9vcGJhY2tFeGNlcHRpb24iKTsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiZXhwZWN0ZWQgYW4gZXhjZXB0aW9uIik7CisgICAgICAgIH0gY2F0Y2goSWxsZWdhbExvb3BiYWNrRXhjZXB0aW9uIGlsZSkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBleHBlY3RlZCAiICsgaWxlKTsKKyAgICAgICAgfQogCiAKLQkgICAgLy8gRnVsbHktcXVhbGlmaWVkIHBvcnRhYmxlIGdsb2JhbAotCSAgICBIZWxsb0hvbWUgaGVsbG9Ib21lMiA9IChIZWxsb0hvbWUpIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCh0YXJnZXRBcHBKbmRpUHJlZml4ICsgIkhlbGxvQmVhbiFjb20uYWNtZS5IZWxsb0hvbWUiKTsKLQkgICAgY2FsbEhvbWUoaGVsbG9Ib21lMik7CisgICAgICAgIC8vIEZ1bGx5LXF1YWxpZmllZCBwb3J0YWJsZSBnbG9iYWwKKyAgICAgICAgSGVsbG9Ib21lIGhlbGxvSG9tZTIgPSAoSGVsbG9Ib21lKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAodGFyZ2V0QXBwSm5kaVByZWZpeCArICJIZWxsb0JlYW4hY29tLmFjbWUuSGVsbG9Ib21lIik7CisgICAgICAgIGNhbGxIb21lKGhlbGxvSG9tZTIpOwogCi0JICAgIEhlbGxvIGhlbGxvMiA9IChIZWxsbykgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKHRhcmdldEFwcEpuZGlQcmVmaXggKyAiSGVsbG9CZWFuIWNvbS5hY21lLkhlbGxvIik7Ci0JICAgIGNhbGxCdXNIb21lKGhlbGxvMik7CisgICAgICAgIEhlbGxvIGhlbGxvMiA9IChIZWxsbykgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKHRhcmdldEFwcEpuZGlQcmVmaXggKyAiSGVsbG9CZWFuIWNvbS5hY21lLkhlbGxvIik7CisgICAgICAgIGNhbGxCdXNIb21lKGhlbGxvMik7CiAKLQkgICAgLy8gRnVsbHktcXVhbGlmaWVkIHBvcnRhYmxlIGdsb2JhbCB2aWEgc2VzaW9uIGNvbnRleHQKLQkgICAgSGVsbG9Ib21lIGhlbGxvSG9tZTMgPSAoSGVsbG9Ib21lKSBzZXNDdHgubG9va3VwKHRhcmdldEFwcEpuZGlQcmVmaXggKyAiSGVsbG9CZWFuIWNvbS5hY21lLkhlbGxvSG9tZSIpOwotCSAgICBjYWxsSG9tZShoZWxsb0hvbWUzKTsKKyAgICAgICAgLy8gRnVsbHktcXVhbGlmaWVkIHBvcnRhYmxlIGdsb2JhbCB2aWEgc2VzaW9uIGNvbnRleHQKKyAgICAgICAgSGVsbG9Ib21lIGhlbGxvSG9tZTMgPSAoSGVsbG9Ib21lKSBzZXNDdHgubG9va3VwKHRhcmdldEFwcEpuZGlQcmVmaXggKyAiSGVsbG9CZWFuIWNvbS5hY21lLkhlbGxvSG9tZSIpOworICAgICAgICBjYWxsSG9tZShoZWxsb0hvbWUzKTsKIAotCSAgICBIZWxsbyBoZWxsbzMgPSAoSGVsbG8pIHNlc0N0eC5sb29rdXAodGFyZ2V0QXBwSm5kaVByZWZpeCArICJIZWxsb0JlYW4hY29tLmFjbWUuSGVsbG8iKTsKLQkgICAgY2FsbEJ1c0hvbWUoaGVsbG8zKTsKKyAgICAgICAgSGVsbG8gaGVsbG8zID0gKEhlbGxvKSBzZXNDdHgubG9va3VwKHRhcmdldEFwcEpuZGlQcmVmaXggKyAiSGVsbG9CZWFuIWNvbS5hY21lLkhlbGxvIik7CisgICAgICAgIGNhbGxCdXNIb21lKGhlbGxvMyk7CiAKLQkgICAgLy8gZWpiLXJlZgotCSAgICBIZWxsb0hvbWUgaGVsbG9Ib21lNCA9IChIZWxsb0hvbWUpIHNlc0N0eC5sb29rdXAoImphdmE6Y29tcC9lbnYvaGVsbG9ob21lcmVmIik7Ci0JICAgIGNhbGxIb21lKGhlbGxvSG9tZTQpOworICAgICAgICAvLyBlamItcmVmCisgICAgICAgIEhlbGxvSG9tZSBoZWxsb0hvbWU0ID0gKEhlbGxvSG9tZSkgc2VzQ3R4Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9oZWxsb2hvbWVyZWYiKTsKKyAgICAgICAgY2FsbEhvbWUoaGVsbG9Ib21lNCk7CiAKLQkgICAgSGVsbG8gaGVsbG80ID0gKEhlbGxvKSBzZXNDdHgubG9va3VwKCJqYXZhOmNvbXAvZW52L2hlbGxvcmVmIik7Ci0JICAgIGNhbGxCdXNIb21lKGhlbGxvNCk7Ci0JICAgIAotCSAgICAvLyBub24tcG9ydGFibGUgZ2xvYmFsCi0JICAgIEhlbGxvSG9tZSBoZWxsb0hvbWU1ID0gKEhlbGxvSG9tZSkgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJISCIpOwotCSAgICBjYWxsSG9tZShoZWxsb0hvbWU1KTsKKyAgICAgICAgSGVsbG8gaGVsbG80ID0gKEhlbGxvKSBzZXNDdHgubG9va3VwKCJqYXZhOmNvbXAvZW52L2hlbGxvcmVmIik7CisgICAgICAgIGNhbGxCdXNIb21lKGhlbGxvNCk7CiAKLQkgICAgSGVsbG8gaGVsbG81ID0gKEhlbGxvKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoIkhII2NvbS5hY21lLkhlbGxvIik7Ci0JICAgIGNhbGxCdXNIb21lKGhlbGxvNSk7CisgICAgICAgIC8vIG5vbi1wb3J0YWJsZSBnbG9iYWwKKyAgICAgICAgSGVsbG9Ib21lIGhlbGxvSG9tZTUgPSAoSGVsbG9Ib21lKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoIkhIIik7CisgICAgICAgIGNhbGxIb21lKGhlbGxvSG9tZTUpOworCisgICAgICAgIEhlbGxvIGhlbGxvNSA9IChIZWxsbykgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJISCNjb20uYWNtZS5IZWxsbyIpOworICAgICAgICBjYWxsQnVzSG9tZShoZWxsbzUpOwogCiAKLQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oInRlc3QgZmFpbGVkIiwgZSk7Ci0JfQorICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigidGVzdCBmYWlsZWQiLCBlKTsKKyAgICB9CiAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgY2FsbEhvbWUoSGVsbG9Ib21lIGhvbWUpIHRocm93cyBFeGNlcHRpb24gewotCS8vCUhlbGxvSG9tZSBob21lID0gKEhlbGxvSG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9iaiwgSGVsbG9Ib21lLmNsYXNzKTsKLQlIZWxsb1JlbW90ZSBociA9IGhvbWUuY3JlYXRlKCk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCIyLnggSGVsbG9SZW1vdGUuaGVsbG8oKSBzYXlzICIgKyBoci5oZWxsbygpKTsKKyAgICAvLyAgICBIZWxsb0hvbWUgaG9tZSA9IChIZWxsb0hvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmosIEhlbGxvSG9tZS5jbGFzcyk7CisgICAgSGVsbG9SZW1vdGUgaHIgPSBob21lLmNyZWF0ZSgpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiMi54IEhlbGxvUmVtb3RlLmhlbGxvKCkgc2F5cyAiICsgaHIuaGVsbG8oKSk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGNhbGxCdXNIb21lKEhlbGxvIGgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvLmhlbGxvKCkgc2F5cyAiICsgaC5oZWxsbygpKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvLmhlbGxvKCkgc2F5cyAiICsgaC5oZWxsbygpKTsKICAgICB9CiAKICAgICBAUHJlRGVzdHJveQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvcmVtb3RlMi9lamIvU3RhdGVmdWxCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9yZW1vdGUyL2VqYi9TdGF0ZWZ1bEJlYW4uamF2YQppbmRleCAwNDc0MDYyLi45OGU1ZmJlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9yZW1vdGUyL2VqYi9TdGF0ZWZ1bEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9yZW1vdGUyL2VqYi9TdGF0ZWZ1bEJlYW4uamF2YQpAQCAtMzUsMTQgKzM1LDE0IEBACiAKICAgICBAQXN5bmNocm9ub3VzCiAgICAgcHVibGljIEZ1dHVyZTxTdHJpbmc+IGhlbGxvQXN5bmMoKSB7Ci0JcmV0dXJuIG5ldyBBc3luY1Jlc3VsdDxTdHJpbmc+KCJoZWxsbywgd29ybGRcbiIpOworICAgIHJldHVybiBuZXcgQXN5bmNSZXN1bHQ8U3RyaW5nPigiaGVsbG8sIHdvcmxkXG4iKTsKICAgICB9CiAKICAgICBAQXN5bmNocm9ub3VzCiAgICAgQFJlbW92ZQogICAgIHB1YmxpYyBGdXR1cmU8U3RyaW5nPiByZW1vdmVBZnRlckNhbGxpbmcoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWZ1bEJlYW46OnJlbW92ZUFmdGVyQ2FsbGluZygpIik7Ci0JcmV0dXJuIG5ldyBBc3luY1Jlc3VsdDxTdHJpbmc+KCJyZW1vdmVkIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWZ1bEJlYW46OnJlbW92ZUFmdGVyQ2FsbGluZygpIik7CisgICAgcmV0dXJuIG5ldyBBc3luY1Jlc3VsdDxTdHJpbmc+KCJyZW1vdmVkIik7CiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3NjaGVtYS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvc2NoZW1hL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNzkyYTlkNS4uZjU3Yzc3NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvc2NoZW1hL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvc2NoZW1hL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE0ICsxNSwxNCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMxLWZ1bGwtc2NoZW1hIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAKLTxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9ImVqYm1vZHVsZW5hbWUiLz4gIAotPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPiAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPlx1MDAyMAorPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iZWpibW9kdWxlbmFtZSIvPiBcdTAwMjAKKzxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4gXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzZS5jbGllbnQiIHZhbHVlPSJjb20uYWNtZS5DbGllbnQiLz4KLQkKKwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9zY2hlbWEvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvc2NoZW1hL2J1aWxkLnhtbAppbmRleCA1ZGYwOWNmLi4zNjA1ZDUwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9zY2hlbWEvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3NjaGVtYS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDEyICs0NiwxMiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZWpiLWphci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktamFyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNTksOSArNTksOSBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuX3NlIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bl9zZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgIDxqYXZhICBmb3JrPSJvbiIgCisgICAgICAgPGphdmEgIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iJHtzZS5jbGllbnR9Ij4KQEAgLTc0LDcgKzc0LDcgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImRlcGxveWVkYXBwLm5hbWUiIHZhbHVlPSJlamJtb2R1bGVuYW1lIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvc2NoZW1hL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3NjaGVtYS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMDAyODk1Mi4uMTcyMjZkMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvc2NoZW1hL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9zY2hlbWEvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNiw1MyArMjYsNTMgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGFwcE5hbWU7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7CiAKLQlhcHBOYW1lID0gYXJnc1swXTsgCi0Jc3RhdC5hZGREZXNjcmlwdGlvbihhcHBOYW1lKTsKLQlDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsgICAgCi0JY2xpZW50LmRvVGVzdCgpOworICAgIGFwcE5hbWUgPSBhcmdzWzBdOworICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oYXBwTmFtZSk7CisgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CisgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShhcHBOYW1lICsgIklEIik7CiAgICAgfQogCi0gICAgcHVibGljIENsaWVudChTdHJpbmdbXSBhcmdzKSB7CQorICAgIHB1YmxpYyBDbGllbnQoU3RyaW5nW10gYXJncykgewogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKIAotCXRyeSB7CisgICAgdHJ5IHsKIAotCSAgICBSZW1vdGVTaW5nbGV0b24gc2luZ2xldG9uID0gKFJlbW90ZVNpbmdsZXRvbikgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmdsb2JhbC8iICsgYXBwTmFtZSArICIvU2luZ2xldG9uQmVhbiFjb20uYWNtZS5SZW1vdGVTaW5nbGV0b24iKTsKKyAgICAgICAgUmVtb3RlU2luZ2xldG9uIHNpbmdsZXRvbiA9IChSZW1vdGVTaW5nbGV0b24pIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpnbG9iYWwvIiArIGFwcE5hbWUgKyAiL1NpbmdsZXRvbkJlYW4hY29tLmFjbWUuUmVtb3RlU2luZ2xldG9uIik7CiAKLQkgICAgLy8gQWxzbyBtYWtlIHN1cmUgd2UgY2FuIGxvb2sgaXQgdXAgdmlhIHRoZSBwcm9kdWN0LXNwZWNpZmljCi0JICAgIC8vIGdsb2JhbCBKTkRJIG5hbWUgc3BlY2lmaWVkIHZpYSBlamItamFyLnhtbAotCSAgICBSZW1vdGVTaW5nbGV0b24gc2luZ2xldG9uMiA9IChSZW1vdGVTaW5nbGV0b24pIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiZWpiX2VqYjMxX2Z1bGxfc2NoZW1hX1NpbmdsZXRvblJlbW90ZSIpOworICAgICAgICAvLyBBbHNvIG1ha2Ugc3VyZSB3ZSBjYW4gbG9vayBpdCB1cCB2aWEgdGhlIHByb2R1Y3Qtc3BlY2lmaWMKKyAgICAgICAgLy8gZ2xvYmFsIEpOREkgbmFtZSBzcGVjaWZpZWQgdmlhIGVqYi1qYXIueG1sCisgICAgICAgIFJlbW90ZVNpbmdsZXRvbiBzaW5nbGV0b24yID0gKFJlbW90ZVNpbmdsZXRvbikgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJlamJfZWpiMzFfZnVsbF9zY2hlbWFfU2luZ2xldG9uUmVtb3RlIik7CiAKLQkgICAgaW50IHNsZWVwU2Vjb25kcyA9IDEwOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNsZWVwaW5nIGZvciAiICsgc2xlZXBTZWNvbmRzICsgIiBzZWNvbmRzIGJlZm9yZSBjaGVja2luZyAiICsKLQkJCSAgICAgICAicmVzdWx0cy4uLiIpOwotCSAgICAvLyB3YWl0IGEgZmV3IHNlY29uZHMgZm9yIHRpbWVvdXQgdG8gaGFwcGVuCi0JICAgIFRocmVhZC5zbGVlcChzbGVlcFNlY29uZHMgKiAxMDAwKTsKKyAgICAgICAgaW50IHNsZWVwU2Vjb25kcyA9IDEwOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNsZWVwaW5nIGZvciAiICsgc2xlZXBTZWNvbmRzICsgIiBzZWNvbmRzIGJlZm9yZSBjaGVja2luZyAiICsKKyAgICAgICAgICAgICAgICAgICAicmVzdWx0cy4uLiIpOworICAgICAgICAvLyB3YWl0IGEgZmV3IHNlY29uZHMgZm9yIHRpbWVvdXQgdG8gaGFwcGVuCisgICAgICAgIFRocmVhZC5zbGVlcChzbGVlcFNlY29uZHMgKiAxMDAwKTsKIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldva2UgdXAiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXb2tlIHVwIik7CiAKLQkgICAgYm9vbGVhbiB0ZXN0UmVzdWx0ID0gc2luZ2xldG9uLmdldFRlc3RSZXN1bHQoKTsKKyAgICAgICAgYm9vbGVhbiB0ZXN0UmVzdWx0ID0gc2luZ2xldG9uLmdldFRlc3RSZXN1bHQoKTsKIAotCSAgICBpZiggIXRlc3RSZXN1bHQgKSB7Ci0JCXRocm93IG5ldyBFSkJFeGNlcHRpb24oInRlc3RSZXN1bHQgPSBmYWxzZSIpOwotCSAgICB9IAorICAgICAgICBpZiggIXRlc3RSZXN1bHQgKSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oInRlc3RSZXN1bHQgPSBmYWxzZSIpOworICAgICAgICB9CiAKLQkgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LlBBU1MpOworICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuUEFTUyk7CiAKLQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5GQUlMKTsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuRkFJTCk7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQogCiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9zY2hlbWEvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3NjaGVtYS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IDk0YjAzODMuLjBhZDIxMjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3NjaGVtYS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3NjaGVtYS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC0yNCwxMCArMjQsMTAgQEAKICAgICA8ZW50ZXJwcmlzZS1iZWFucz4KICAgICAgIDxzZXNzaW9uPgogICAgICAgICA8ZWpiLW5hbWU+U2luZ2xldG9uQmVhbjwvZWpiLW5hbWU+Ci0JPGxvY2FsLWJlYW4vPgotCTxlamItY2xhc3M+Y29tLmFjbWUuU2luZ2xldG9uQmVhbjwvZWpiLWNsYXNzPgotCTxzZXNzaW9uLXR5cGU+U2luZ2xldG9uPC9zZXNzaW9uLXR5cGU+Ci0JPHRpbWVyPgorICAgIDxsb2NhbC1iZWFuLz4KKyAgICA8ZWpiLWNsYXNzPmNvbS5hY21lLlNpbmdsZXRvbkJlYW48L2VqYi1jbGFzcz4KKyAgICA8c2Vzc2lvbi10eXBlPlNpbmdsZXRvbjwvc2Vzc2lvbi10eXBlPgorICAgIDx0aW1lcj4KICAgICAgICAgICA8ZGVzY3JpcHRpb24+U2FtcGxlIHRpbWVyPC9kZXNjcmlwdGlvbj4KICAgICAgICAgICA8c2NoZWR1bGU+CiAgICAgICAgICAgICA8c2Vjb25kPjE8L3NlY29uZD4KQEAgLTM2LDEzMiArMzYsMTMyIEBACiAgICAgICAgICAgICA8ZGF5LW9mLW1vbnRoPkxhc3QgVHVlPC9kYXktb2YtbW9udGg+CiAgICAgICAgICAgICA8bW9udGg+RmViPC9tb250aD4KICAgICAgICAgICAgIDx5ZWFyPjIwMTA8L3llYXI+Ci0JICA8L3NjaGVkdWxlPgorICAgICAgPC9zY2hlZHVsZT4KICAgICAgICAgICA8c3RhcnQ+MjAwMi0xMC0xMFQxMjowMDowMDwvc3RhcnQ+CiAgICAgICAgICAgPGVuZD4yMDAyLTEwLTEwVDEyOjAwOjAwPC9lbmQ+CiAgICAgICAgICAgPHRpbWVvdXQtbWV0aG9kPgogICAgICAgICAgICAgPG1ldGhvZC1uYW1lPm15dGltZW91dDI8L21ldGhvZC1uYW1lPgotCSAgPC90aW1lb3V0LW1ldGhvZD4KKyAgICAgIDwvdGltZW91dC1tZXRob2Q+CiAgICAgICAgICAgPHBlcnNpc3RlbnQ+ZmFsc2U8L3BlcnNpc3RlbnQ+CiAgICAgICAgICAgPHRpbWV6b25lPkFtZXJpY2EvTmV3X1lvcms8L3RpbWV6b25lPgogICAgICAgICAgIDxpbmZvPnNvbWUgaW5mbzwvaW5mbz4KLQk8L3RpbWVyPgotCTx0aW1lcj4KKyAgICA8L3RpbWVyPgorICAgIDx0aW1lcj4KICAgICAgICAgICA8ZGVzY3JpcHRpb24+U2FtcGxlIHRpbWVyMTwvZGVzY3JpcHRpb24+CiAgICAgICAgICAgPHNjaGVkdWxlPgogICAgICAgICAgICAgPHNlY29uZD4qLzI8L3NlY29uZD4KICAgICAgICAgICAgIDxtaW51dGU+KjwvbWludXRlPgogICAgICAgICAgICAgPGhvdXI+KjwvaG91cj4KLQkgIDwvc2NoZWR1bGU+CisgICAgICA8L3NjaGVkdWxlPgogICAgICAgICAgIDx0aW1lb3V0LW1ldGhvZD4KICAgICAgICAgICAgIDxtZXRob2QtbmFtZT5teXRpbWVvdXQxPC9tZXRob2QtbmFtZT4KLQkgIDwvdGltZW91dC1tZXRob2Q+CisgICAgICA8L3RpbWVvdXQtbWV0aG9kPgogICAgICAgICAgIDxwZXJzaXN0ZW50PmZhbHNlPC9wZXJzaXN0ZW50PgogICAgICAgICAgIDx0aW1lem9uZT5BbWVyaWNhL05ld19Zb3JrPC90aW1lem9uZT4KICAgICAgICAgICA8aW5mbz5zb21lIGluZm88L2luZm8+Ci0JPC90aW1lcj4KLQk8dGltZXI+CisgICAgPC90aW1lcj4KKyAgICA8dGltZXI+CiAgICAgICAgICAgPGRlc2NyaXB0aW9uPlNhbXBsZSB0aW1lcjI8L2Rlc2NyaXB0aW9uPgogICAgICAgICAgIDxzY2hlZHVsZT4KICAgICAgICAgICAgIDxzZWNvbmQ+Ki83PC9zZWNvbmQ+CiAgICAgICAgICAgICA8bWludXRlPio8L21pbnV0ZT4KICAgICAgICAgICAgIDxob3VyPio8L2hvdXI+CiAgICAgICAgICAgICA8ZGF5LW9mLW1vbnRoPio8L2RheS1vZi1tb250aD4KLQkgIDwvc2NoZWR1bGU+CisgICAgICA8L3NjaGVkdWxlPgogICAgICAgICAgIDx0aW1lb3V0LW1ldGhvZD4KICAgICAgICAgICAgIDxtZXRob2QtbmFtZT5teXRpbWVvdXQ8L21ldGhvZC1uYW1lPgotCSAgICA8bWV0aG9kLXBhcmFtcz4KLQkgICAgICA8bWV0aG9kLXBhcmFtPmpha2FydGEuZWpiLlRpbWVyPC9tZXRob2QtcGFyYW0+Ci0JICAgIDwvbWV0aG9kLXBhcmFtcz4KLQkgIDwvdGltZW91dC1tZXRob2Q+CisgICAgICAgIDxtZXRob2QtcGFyYW1zPgorICAgICAgICAgIDxtZXRob2QtcGFyYW0+amFrYXJ0YS5lamIuVGltZXI8L21ldGhvZC1wYXJhbT4KKyAgICAgICAgPC9tZXRob2QtcGFyYW1zPgorICAgICAgPC90aW1lb3V0LW1ldGhvZD4KICAgICAgICAgICA8cGVyc2lzdGVudD50cnVlPC9wZXJzaXN0ZW50PgogICAgICAgICAgIDxpbmZvPmluZm88L2luZm8+Ci0JPC90aW1lcj4KLQk8aW5pdC1vbi1zdGFydHVwPnRydWU8L2luaXQtb24tc3RhcnR1cD4KLQk8Y29uY3VycmVuY3ktbWFuYWdlbWVudC10eXBlPkJlYW48L2NvbmN1cnJlbmN5LW1hbmFnZW1lbnQtdHlwZT4KLQk8Y29uY3VycmVudC1tZXRob2Q+Ci0JICA8bWV0aG9kPgorICAgIDwvdGltZXI+CisgICAgPGluaXQtb24tc3RhcnR1cD50cnVlPC9pbml0LW9uLXN0YXJ0dXA+CisgICAgPGNvbmN1cnJlbmN5LW1hbmFnZW1lbnQtdHlwZT5CZWFuPC9jb25jdXJyZW5jeS1tYW5hZ2VtZW50LXR5cGU+CisgICAgPGNvbmN1cnJlbnQtbWV0aG9kPgorICAgICAgPG1ldGhvZD4KICAgICAgICAgICAgIDxtZXRob2QtbmFtZT5mb288L21ldGhvZC1uYW1lPgotCSAgPC9tZXRob2Q+CisgICAgICA8L21ldGhvZD4KICAgICAgICAgICA8bG9jaz5Xcml0ZTwvbG9jaz4KICAgICAgICAgICA8YWNjZXNzLXRpbWVvdXQ+Ci0JICAgIDx0aW1lb3V0PjE5ODc2PC90aW1lb3V0PgotCSAgICA8dW5pdD5TZWNvbmRzPC91bml0PgotCSAgPC9hY2Nlc3MtdGltZW91dD4KLQk8L2NvbmN1cnJlbnQtbWV0aG9kPgotCTxkZXBlbmRzLW9uPgorICAgICAgICA8dGltZW91dD4xOTg3NjwvdGltZW91dD4KKyAgICAgICAgPHVuaXQ+U2Vjb25kczwvdW5pdD4KKyAgICAgIDwvYWNjZXNzLXRpbWVvdXQ+CisgICAgPC9jb25jdXJyZW50LW1ldGhvZD4KKyAgICA8ZGVwZW5kcy1vbj4KICAgICAgICAgICA8ZWpiLW5hbWU+U2luZ2xldG9uQmVhbjI8L2VqYi1uYW1lPgotCTwvZGVwZW5kcy1vbj4KLQk8YXN5bmMtbWV0aG9kPgotCSAgPG1ldGhvZC1uYW1lPmZvbzwvbWV0aG9kLW5hbWU+Ci0JPC9hc3luYy1tZXRob2Q+CisgICAgPC9kZXBlbmRzLW9uPgorICAgIDxhc3luYy1tZXRob2Q+CisgICAgICA8bWV0aG9kLW5hbWU+Zm9vPC9tZXRob2QtbmFtZT4KKyAgICA8L2FzeW5jLW1ldGhvZD4KICAgICAgICAgPGVqYi1yZWY+CiAgICAgICAgICAgPGVqYi1yZWYtbmFtZT5lamIvbG9va3VwMTwvZWpiLXJlZi1uYW1lPgogICAgICAgICAgIDxlamItcmVmLXR5cGU+U2Vzc2lvbjwvZWpiLXJlZi10eXBlPgogICAgICAgICAgIDxyZW1vdGU+Y29tLmFjbWUuUmVtb3RlU2luZ2xldG9uPC9yZW1vdGU+Ci0JICA8bG9va3VwLW5hbWU+amF2YTptb2R1bGUvU2luZ2xldG9uQmVhbiFjb20uYWNtZS5SZW1vdGVTaW5nbGV0b248L2xvb2t1cC1uYW1lPgorICAgICAgPGxvb2t1cC1uYW1lPmphdmE6bW9kdWxlL1NpbmdsZXRvbkJlYW4hY29tLmFjbWUuUmVtb3RlU2luZ2xldG9uPC9sb29rdXAtbmFtZT4KICAgICAgICAgPC9lamItcmVmPgogICAgICAgICA8ZWpiLWxvY2FsLXJlZj4KICAgICAgICAgICA8ZWpiLXJlZi1uYW1lPmVqYi9sb29rdXAyPC9lamItcmVmLW5hbWU+CiAgICAgICAgICAgPGVqYi1yZWYtdHlwZT5TZXNzaW9uPC9lamItcmVmLXR5cGU+CiAgICAgICAgICAgPGxvY2FsPmNvbS5hY21lLlNpbmdsZXRvbkJlYW4yPC9sb2NhbD4KLQkgIDxsb29rdXAtbmFtZT5qYXZhOm1vZHVsZS9TaW5nbGV0b25CZWFuMjwvbG9va3VwLW5hbWU+CisgICAgICA8bG9va3VwLW5hbWU+amF2YTptb2R1bGUvU2luZ2xldG9uQmVhbjI8L2xvb2t1cC1uYW1lPgogICAgICAgICA8L2VqYi1sb2NhbC1yZWY+CiAgICAgICA8L3Nlc3Npb24+CiAgICAgICA8c2Vzc2lvbj4KICAgICAgICAgPGVqYi1uYW1lPlNpbmdsZXRvbkJlYW4yPC9lamItbmFtZT4KLQk8bG9jYWwtYmVhbi8+Ci0JPGVqYi1jbGFzcz5jb20uYWNtZS5TaW5nbGV0b25CZWFuMjwvZWpiLWNsYXNzPgotCTxzZXNzaW9uLXR5cGU+U2luZ2xldG9uPC9zZXNzaW9uLXR5cGU+Ci0JPHRpbWVyPgorICAgIDxsb2NhbC1iZWFuLz4KKyAgICA8ZWpiLWNsYXNzPmNvbS5hY21lLlNpbmdsZXRvbkJlYW4yPC9lamItY2xhc3M+CisgICAgPHNlc3Npb24tdHlwZT5TaW5nbGV0b248L3Nlc3Npb24tdHlwZT4KKyAgICA8dGltZXI+CiAgICAgICAgICAgPGRlc2NyaXB0aW9uPlNhbXBsZSB0aW1lcjwvZGVzY3JpcHRpb24+CiAgICAgICAgICAgPHNjaGVkdWxlPgogICAgICAgICAgICAgPG1pbnV0ZT4qPC9taW51dGU+Ci0JICA8L3NjaGVkdWxlPgorICAgICAgPC9zY2hlZHVsZT4KICAgICAgICAgICA8dGltZW91dC1tZXRob2Q+CiAgICAgICAgICAgICA8bWV0aG9kLW5hbWU+bXlUaW1lb3V0PC9tZXRob2QtbmFtZT4KLQkgIDwvdGltZW91dC1tZXRob2Q+Ci0JPC90aW1lcj4KLQk8Y29uY3VycmVudC1tZXRob2Q+Ci0JICA8bWV0aG9kPgorICAgICAgPC90aW1lb3V0LW1ldGhvZD4KKyAgICA8L3RpbWVyPgorICAgIDxjb25jdXJyZW50LW1ldGhvZD4KKyAgICAgIDxtZXRob2Q+CiAgICAgICAgICAgICA8bWV0aG9kLW5hbWU+Zm9vPC9tZXRob2QtbmFtZT4KLQkgIDwvbWV0aG9kPgorICAgICAgPC9tZXRob2Q+CiAgICAgICAgICAgPGxvY2s+V3JpdGU8L2xvY2s+CiAgICAgICAgICAgPGFjY2Vzcy10aW1lb3V0PgotCSAgICA8dGltZW91dD41PC90aW1lb3V0PgotCSAgICA8dW5pdD5TZWNvbmRzPC91bml0PgotCSAgPC9hY2Nlc3MtdGltZW91dD4KLQk8L2NvbmN1cnJlbnQtbWV0aG9kPgorICAgICAgICA8dGltZW91dD41PC90aW1lb3V0PgorICAgICAgICA8dW5pdD5TZWNvbmRzPC91bml0PgorICAgICAgPC9hY2Nlc3MtdGltZW91dD4KKyAgICA8L2NvbmN1cnJlbnQtbWV0aG9kPgogICAgICAgIDxjb25jdXJyZW50LW1ldGhvZD4KLQkgIDxtZXRob2Q+CisgICAgICA8bWV0aG9kPgogICAgICAgICAgICAgPG1ldGhvZC1uYW1lPmZvbzI8L21ldGhvZC1uYW1lPgotCSAgPC9tZXRob2Q+CisgICAgICA8L21ldGhvZD4KICAgICAgICAgICA8bG9jaz5SZWFkPC9sb2NrPgotCTwvY29uY3VycmVudC1tZXRob2Q+CisgICAgPC9jb25jdXJyZW50LW1ldGhvZD4KICAgICAgICA8Y29uY3VycmVudC1tZXRob2Q+Ci0JICA8bWV0aG9kPgorICAgICAgPG1ldGhvZD4KICAgICAgICAgICAgIDxtZXRob2QtbmFtZT5mb29Bc3luYzwvbWV0aG9kLW5hbWU+CiAgICAgICAgICAgICA8bWV0aG9kLXBhcmFtcz4KICAgICAgICAgICAgIDxtZXRob2QtcGFyYW0+aW50PC9tZXRob2QtcGFyYW0+Ci0JICA8L21ldGhvZC1wYXJhbXM+Ci0JICA8L21ldGhvZD4KKyAgICAgIDwvbWV0aG9kLXBhcmFtcz4KKyAgICAgIDwvbWV0aG9kPgogICAgICAgICAgIDxsb2NrPlJlYWQ8L2xvY2s+Ci0JPC9jb25jdXJyZW50LW1ldGhvZD4KLQk8YXN5bmMtbWV0aG9kPgotCSAgPG1ldGhvZC1uYW1lPmZvb0FzeW5jPC9tZXRob2QtbmFtZT4KKyAgICA8L2NvbmN1cnJlbnQtbWV0aG9kPgorICAgIDxhc3luYy1tZXRob2Q+CisgICAgICA8bWV0aG9kLW5hbWU+Zm9vQXN5bmM8L21ldGhvZC1uYW1lPgogICAgICAgICAgIDxtZXRob2QtcGFyYW1zPgogICAgICAgICAgICAgPG1ldGhvZC1wYXJhbT5pbnQ8L21ldGhvZC1wYXJhbT4KLQkgIDwvbWV0aG9kLXBhcmFtcz4KLQk8L2FzeW5jLW1ldGhvZD4KKyAgICAgIDwvbWV0aG9kLXBhcmFtcz4KKyAgICA8L2FzeW5jLW1ldGhvZD4KICAgICAgICAgPHRyYW5zYWN0aW9uLXR5cGU+Q29udGFpbmVyPC90cmFuc2FjdGlvbi10eXBlPgogICAgICAgICA8cG9zdC1jb25zdHJ1Y3Q+CiAgICAgICAgICAgPGxpZmVjeWNsZS1jYWxsYmFjay1jbGFzcz5jb20uYWNtZS5TaW5nbGV0b25CZWFuMjwvbGlmZWN5Y2xlLWNhbGxiYWNrLWNsYXNzPgogICAgICAgICAgIDxsaWZlY3ljbGUtY2FsbGJhY2stbWV0aG9kPmluaXQ8L2xpZmVjeWNsZS1jYWxsYmFjay1tZXRob2Q+Ci0JPC9wb3N0LWNvbnN0cnVjdD4KKyAgICA8L3Bvc3QtY29uc3RydWN0PgogICAgICAgICA8cHJlLWRlc3Ryb3k+CiAgICAgICAgICAgPGxpZmVjeWNsZS1jYWxsYmFjay1jbGFzcz5jb20uYWNtZS5TaW5nbGV0b25CZWFuMjwvbGlmZWN5Y2xlLWNhbGxiYWNrLWNsYXNzPgogICAgICAgICAgIDxsaWZlY3ljbGUtY2FsbGJhY2stbWV0aG9kPmRlc3Ryb3k8L2xpZmVjeWNsZS1jYWxsYmFjay1tZXRob2Q+Ci0JPC9wcmUtZGVzdHJveT4KKyAgICA8L3ByZS1kZXN0cm95PgogICAgICAgPC9zZXNzaW9uPgogICAgICAgPHNlc3Npb24+CiAgICAgICAgIDxlamItbmFtZT5TdGF0ZWxlc3NCZWFuPC9lamItbmFtZT4KQEAgLTE3MCw3ICsxNzAsNyBAQAogICAgICAgICA8L2FzeW5jLW1ldGhvZD4KICAgICAgIDwvc2Vzc2lvbj4KICAgICAgIDxzZXNzaW9uPgotCSA8ZWpiLW5hbWU+TXVsdGlCZWFuPC9lamItbmFtZT4KKyAgICAgPGVqYi1uYW1lPk11bHRpQmVhbjwvZWpiLW5hbWU+CiAgICAgICAgICAgIDxlbnYtZW50cnk+CiAgICAgICAgICAgIDxlbnYtZW50cnktbmFtZT5tdWx0aTwvZW52LWVudHJ5LW5hbWU+CiAgICAgICAgICAgIDxlbnYtZW50cnktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9lbnYtZW50cnktdHlwZT4KQEAgLTE3OSw5ICsxNzksOSBAQAogICAgICAgPC9zZXNzaW9uPgogICAgICAgPHNlc3Npb24+CiAgICAgICAgIDxlamItbmFtZT5NdWx0aUJlYW4yPC9lamItbmFtZT4KLQk8bG9jYWwtYmVhbi8+Ci0JPGVqYi1jbGFzcz5jb20uYWNtZS5NdWx0aUJlYW48L2VqYi1jbGFzcz4KLQk8c2Vzc2lvbi10eXBlPlNpbmdsZXRvbjwvc2Vzc2lvbi10eXBlPgorICAgIDxsb2NhbC1iZWFuLz4KKyAgICA8ZWpiLWNsYXNzPmNvbS5hY21lLk11bHRpQmVhbjwvZWpiLWNsYXNzPgorICAgIDxzZXNzaW9uLXR5cGU+U2luZ2xldG9uPC9zZXNzaW9uLXR5cGU+CiAgICAgICAgICAgIDxlbnYtZW50cnk+CiAgICAgICAgICAgIDxlbnYtZW50cnktbmFtZT5tdWx0aTwvZW52LWVudHJ5LW5hbWU+CiAgICAgICAgICAgIDxlbnYtZW50cnktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9lbnYtZW50cnktdHlwZT4KQEAgLTE5MCw5ICsxOTAsOSBAQAogICAgICAgPC9zZXNzaW9uPgogICAgICAgPHNlc3Npb24+CiAgICAgICAgIDxlamItbmFtZT5NdWx0aUJlYW4zPC9lamItbmFtZT4KLQk8bG9jYWwtYmVhbi8+Ci0JPGVqYi1jbGFzcz5jb20uYWNtZS5NdWx0aUJlYW48L2VqYi1jbGFzcz4KLQk8c2Vzc2lvbi10eXBlPlNpbmdsZXRvbjwvc2Vzc2lvbi10eXBlPgorICAgIDxsb2NhbC1iZWFuLz4KKyAgICA8ZWpiLWNsYXNzPmNvbS5hY21lLk11bHRpQmVhbjwvZWpiLWNsYXNzPgorICAgIDxzZXNzaW9uLXR5cGU+U2luZ2xldG9uPC9zZXNzaW9uLXR5cGU+CiAgICAgICAgICAgIDxlbnYtZW50cnk+CiAgICAgICAgICAgIDxlbnYtZW50cnktbmFtZT5tdWx0aTwvZW52LWVudHJ5LW5hbWU+CiAgICAgICAgICAgIDxlbnYtZW50cnktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9lbnYtZW50cnktdHlwZT4KQEAgLTIwMiwzMSArMjAyLDMxIEBACiAKICAgICAgIDxzZXNzaW9uPgogICAgICAgICA8ZWpiLW5hbWU+U3RhdGVmdWxCZWFuPC9lamItbmFtZT4KLQk8bG9jYWwtYmVhbi8+Ci0JPGVqYi1jbGFzcz5jb20uYWNtZS5TdGF0ZWZ1bEJlYW48L2VqYi1jbGFzcz4KLQk8c2Vzc2lvbi10eXBlPlN0YXRlZnVsPC9zZXNzaW9uLXR5cGU+Ci0JPHN0YXRlZnVsLXRpbWVvdXQ+Ci0JICAgPHRpbWVvdXQ+MTAwMTwvdGltZW91dD4KKyAgICA8bG9jYWwtYmVhbi8+CisgICAgPGVqYi1jbGFzcz5jb20uYWNtZS5TdGF0ZWZ1bEJlYW48L2VqYi1jbGFzcz4KKyAgICA8c2Vzc2lvbi10eXBlPlN0YXRlZnVsPC9zZXNzaW9uLXR5cGU+CisgICAgPHN0YXRlZnVsLXRpbWVvdXQ+CisgICAgICAgPHRpbWVvdXQ+MTAwMTwvdGltZW91dD4KICAgICAgICAgICAgPHVuaXQ+TWludXRlczwvdW5pdD4KLQk8L3N0YXRlZnVsLXRpbWVvdXQ+Ci0JPGNvbmN1cnJlbmN5LW1hbmFnZW1lbnQtdHlwZT5Db250YWluZXI8L2NvbmN1cnJlbmN5LW1hbmFnZW1lbnQtdHlwZT4KLQk8YXN5bmMtbWV0aG9kPgotCSAgPG1ldGhvZC1uYW1lPmZvbzwvbWV0aG9kLW5hbWU+Ci0JPC9hc3luYy1tZXRob2Q+CisgICAgPC9zdGF0ZWZ1bC10aW1lb3V0PgorICAgIDxjb25jdXJyZW5jeS1tYW5hZ2VtZW50LXR5cGU+Q29udGFpbmVyPC9jb25jdXJyZW5jeS1tYW5hZ2VtZW50LXR5cGU+CisgICAgPGFzeW5jLW1ldGhvZD4KKyAgICAgIDxtZXRob2QtbmFtZT5mb288L21ldGhvZC1uYW1lPgorICAgIDwvYXN5bmMtbWV0aG9kPgogICAgICAgICA8YWZ0ZXItYmVnaW4tbWV0aG9kPgotCSAgPG1ldGhvZC1uYW1lPmFmdGVyQmVnaW48L21ldGhvZC1uYW1lPgotCTwvYWZ0ZXItYmVnaW4tbWV0aG9kPgorICAgICAgPG1ldGhvZC1uYW1lPmFmdGVyQmVnaW48L21ldGhvZC1uYW1lPgorICAgIDwvYWZ0ZXItYmVnaW4tbWV0aG9kPgogICAgICAgICA8YmVmb3JlLWNvbXBsZXRpb24tbWV0aG9kPgotCSAgPG1ldGhvZC1uYW1lPmJlZm9yZUNvbXBsZXRpb248L21ldGhvZC1uYW1lPgotCTwvYmVmb3JlLWNvbXBsZXRpb24tbWV0aG9kPgorICAgICAgPG1ldGhvZC1uYW1lPmJlZm9yZUNvbXBsZXRpb248L21ldGhvZC1uYW1lPgorICAgIDwvYmVmb3JlLWNvbXBsZXRpb24tbWV0aG9kPgogICAgICAgICA8YWZ0ZXItY29tcGxldGlvbi1tZXRob2Q+Ci0JICA8bWV0aG9kLW5hbWU+YWZ0ZXJDb21wbGV0aW9uPC9tZXRob2QtbmFtZT4KKyAgICAgIDxtZXRob2QtbmFtZT5hZnRlckNvbXBsZXRpb248L21ldGhvZC1uYW1lPgogICAgICAgICAgIDxtZXRob2QtcGFyYW1zPgogICAgICAgICAgICAgPG1ldGhvZC1wYXJhbT5ib29sZWFuPC9tZXRob2QtcGFyYW0+Ci0JICA8L21ldGhvZC1wYXJhbXM+Ci0JPC9hZnRlci1jb21wbGV0aW9uLW1ldGhvZD4KKyAgICAgIDwvbWV0aG9kLXBhcmFtcz4KKyAgICA8L2FmdGVyLWNvbXBsZXRpb24tbWV0aG9kPgogICAgICAgPC9zZXNzaW9uPgotICAgICAgCisKICAgICA8L2VudGVycHJpc2UtYmVhbnM+CiAgIDxhc3NlbWJseS1kZXNjcmlwdG9yPgogICAgIDxjb250YWluZXItdHJhbnNhY3Rpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9zY2hlbWEvZWpiL0RhdGVUaW1lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9zY2hlbWEvZWpiL0RhdGVUaW1lLmphdmEKaW5kZXggMjE1OTNlZC4uNTNhYjZmOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvc2NoZW1hL2VqYi9EYXRlVGltZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3NjaGVtYS9lamIvRGF0ZVRpbWUuamF2YQpAQCAtMTksMzggKzE5LDM4IEBACiAKIHB1YmxpYyBjbGFzcyBEYXRlVGltZSB7CiAKLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAotCVN0cmluZyB4c2REYXRlVGltZSA9IGFyZ3NbMF07CisgICAgU3RyaW5nIHhzZERhdGVUaW1lID0gYXJnc1swXTsKIAotCVN5c3RlbS5vdXQucHJpbnRsbigiQ29udmVydGluZyB4c2REYXRlVGltZSAiICsgeHNkRGF0ZVRpbWUgKyAiIC4uLiIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29udmVydGluZyB4c2REYXRlVGltZSAiICsgeHNkRGF0ZVRpbWUgKyAiIC4uLiIpOwogCi0JdHJ5IHsKLQkgICAgRGF0YXR5cGVGYWN0b3J5IGZhY3RvcnkgPSBEYXRhdHlwZUZhY3RvcnkubmV3SW5zdGFuY2UoKTsKKyAgICB0cnkgeworICAgICAgICBEYXRhdHlwZUZhY3RvcnkgZmFjdG9yeSA9IERhdGF0eXBlRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwogCi0JICAgIFhNTEdyZWdvcmlhbkNhbGVuZGFyIHhtbEdyZWcgPSBmYWN0b3J5Lm5ld1hNTEdyZWdvcmlhbkNhbGVuZGFyKHhzZERhdGVUaW1lKTsKKyAgICAgICAgWE1MR3JlZ29yaWFuQ2FsZW5kYXIgeG1sR3JlZyA9IGZhY3RvcnkubmV3WE1MR3JlZ29yaWFuQ2FsZW5kYXIoeHNkRGF0ZVRpbWUpOwogCi0JICAgIEdyZWdvcmlhbkNhbGVuZGFyIGdyZWcgPSB4bWxHcmVnLnRvR3JlZ29yaWFuQ2FsZW5kYXIoKTsKKyAgICAgICAgR3JlZ29yaWFuQ2FsZW5kYXIgZ3JlZyA9IHhtbEdyZWcudG9HcmVnb3JpYW5DYWxlbmRhcigpOwogCi0JICAgIERhdGUgZGF0ZSA9IGdyZWcuZ2V0VGltZSgpOworICAgICAgICBEYXRlIGRhdGUgPSBncmVnLmdldFRpbWUoKTsKIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRhdGUgPSAiICsgZGF0ZSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGF0ZSA9ICIgKyBkYXRlKTsKIAotCSAgICBHcmVnb3JpYW5DYWxlbmRhciByZXZlcnNlQ2FsZW5kYXIgPSBuZXcgR3JlZ29yaWFuQ2FsZW5kYXIoKTsKLQkgICAgcmV2ZXJzZUNhbGVuZGFyLnNldFRpbWUoZGF0ZSk7CisgICAgICAgIEdyZWdvcmlhbkNhbGVuZGFyIHJldmVyc2VDYWxlbmRhciA9IG5ldyBHcmVnb3JpYW5DYWxlbmRhcigpOworICAgICAgICByZXZlcnNlQ2FsZW5kYXIuc2V0VGltZShkYXRlKTsKIAogCi0JICAgIFhNTEdyZWdvcmlhbkNhbGVuZGFyIHJldmVyc2VYbWxHcmVnID0gCi0JCWZhY3RvcnkubmV3WE1MR3JlZ29yaWFuQ2FsZW5kYXIocmV2ZXJzZUNhbGVuZGFyKTsKKyAgICAgICAgWE1MR3JlZ29yaWFuQ2FsZW5kYXIgcmV2ZXJzZVhtbEdyZWcgPQorICAgICAgICBmYWN0b3J5Lm5ld1hNTEdyZWdvcmlhbkNhbGVuZGFyKHJldmVyc2VDYWxlbmRhcik7CiAKLQkgICAgU3RyaW5nIHJldmVyc2VYc2REYXRlVGltZSA9IHJldmVyc2VYbWxHcmVnLnRvWE1MRm9ybWF0KCk7CisgICAgICAgIFN0cmluZyByZXZlcnNlWHNkRGF0ZVRpbWUgPSByZXZlcnNlWG1sR3JlZy50b1hNTEZvcm1hdCgpOwogCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmFjayB0byB4c2REYXRlVGltZSA9ICIgKyByZXZlcnNlWHNkRGF0ZVRpbWUpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJhY2sgdG8geHNkRGF0ZVRpbWUgPSAiICsgcmV2ZXJzZVhzZERhdGVUaW1lKTsKIAotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KIAogCiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvc2NoZW1hL2VqYi9NdWx0aUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3NjaGVtYS9lamIvTXVsdGlCZWFuLmphdmEKaW5kZXggOWE1NGU4Yy4uNTlmYWUwNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvc2NoZW1hL2VqYi9NdWx0aUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9zY2hlbWEvZWpiL011bHRpQmVhbi5qYXZhCkBAIC0yNywzNiArMjcsMzYgQEAKICAgICBAUmVzb3VyY2UobmFtZT0ibXVsdGkiKQogICAgIHByaXZhdGUgU3RyaW5nIG11bHRpOwogCi0gICAgQFBvc3RDb25zdHJ1Y3QgCisgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIGluaXQoKSIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigibXVsdGkgPSAiICsgbXVsdGkpOwotCXRyeSB7Ci0JICAgIFN0cmluZyBtdWx0aUxvb2t1cCA9IChTdHJpbmcpCi0JCW5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpjb21wL2Vudi9tdWx0aSIpOwotCSAgICBpZiggIW11bHRpLmVxdWFscyhtdWx0aUxvb2t1cCkgKSB7Ci0JCXRocm93IG5ldyBFSkJFeGNlcHRpb24oIk5vbi1tYXRjaGluZyB2YWx1ZXMgb2YgbXVsdGkiICsgCi0JCQkJICAgICAgIG11bHRpICsgIiA6ICIgKyBtdWx0aUxvb2t1cCk7Ci0JICAgIH0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIGluaXQoKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigibXVsdGkgPSAiICsgbXVsdGkpOworICAgIHRyeSB7CisgICAgICAgIFN0cmluZyBtdWx0aUxvb2t1cCA9IChTdHJpbmcpCisgICAgICAgIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpjb21wL2Vudi9tdWx0aSIpOworICAgICAgICBpZiggIW11bHRpLmVxdWFscyhtdWx0aUxvb2t1cCkgKSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIk5vbi1tYXRjaGluZyB2YWx1ZXMgb2YgbXVsdGkiICsKKyAgICAgICAgICAgICAgICAgICAgICAgbXVsdGkgKyAiIDogIiArIG11bHRpTG9va3VwKTsKKyAgICAgICAgfQogCi0JfSBjYXRjaChFeGNlcHRpb24gZSkgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwotCX0KKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgZm9vKCkgewotCXRyeSB7Ci0JICAgIFN0cmluZyBtdWx0aUxvb2t1cCA9IChTdHJpbmcpCi0JCW5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpjb21wL2Vudi9tdWx0aSIpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm11bHRpTG9va3VwID0gIiArIG11bHRpTG9va3VwKTsKLQkgICAgaWYoICFtdWx0aS5lcXVhbHMobXVsdGlMb29rdXApICkgewotCQl0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJOb24tbWF0Y2hpbmcgdmFsdWVzIG9mIG11bHRpIiArIAotCQkJCSAgICAgICBtdWx0aSArICIgOiAiICsgbXVsdGlMb29rdXApOwotCSAgICB9Ci0JfSBjYXRjaChFeGNlcHRpb24gZSkgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwotCX0KLQlyZXR1cm4gbXVsdGk7CisgICAgdHJ5IHsKKyAgICAgICAgU3RyaW5nIG11bHRpTG9va3VwID0gKFN0cmluZykKKyAgICAgICAgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmNvbXAvZW52L211bHRpIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibXVsdGlMb29rdXAgPSAiICsgbXVsdGlMb29rdXApOworICAgICAgICBpZiggIW11bHRpLmVxdWFscyhtdWx0aUxvb2t1cCkgKSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIk5vbi1tYXRjaGluZyB2YWx1ZXMgb2YgbXVsdGkiICsKKyAgICAgICAgICAgICAgICAgICAgICAgbXVsdGkgKyAiIDogIiArIG11bHRpTG9va3VwKTsKKyAgICAgICAgfQorICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlKTsKKyAgICB9CisgICAgcmV0dXJuIG11bHRpOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvc2NoZW1hL2VqYi9TaW5nbGV0b25CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9zY2hlbWEvZWpiL1NpbmdsZXRvbkJlYW4uamF2YQppbmRleCBkZTJkMmRjLi4wYjQ1MjE1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9zY2hlbWEvZWpiL1NpbmdsZXRvbkJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9zY2hlbWEvZWpiL1NpbmdsZXRvbkJlYW4uamF2YQpAQCAtMzEsNyArMzEsNyBAQAogcHVibGljIGNsYXNzIFNpbmdsZXRvbkJlYW4gaW1wbGVtZW50cyBSZW1vdGVTaW5nbGV0b24gewogCiAKLSAgICBARUpCIAorICAgIEBFSkIKICAgICBwcml2YXRlIFN0YXRlZnVsQmVhbiBzZjsKIAogICAgIEBSZXNvdXJjZQpAQCAtNDQsOTMgKzQ0LDkzIEBACiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6aW5pdCgpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOjppbml0KCkiKTsKIAotCS8vIENhbGwgYSBtZXRob2QgbWFya2VkIGFzIGFzeW5jIGluIC54bWwuICBUaGlzIHdvdWxkIGJsb2NrCi0JLy8gaWYgaXQncyBub3QgY29ycmVjdGx5IGlkZW50aWZpZWQgYXMgYW4gYXN5bmMgbWV0aG9kIHNpbmNlCi0JLy8gd2UncmUgbm90IG91dCBvZiBQb3N0Q29uc3RydWN0IHlldC4KLQltZS5mb28oKTsKKyAgICAvLyBDYWxsIGEgbWV0aG9kIG1hcmtlZCBhcyBhc3luYyBpbiAueG1sLiAgVGhpcyB3b3VsZCBibG9jaworICAgIC8vIGlmIGl0J3Mgbm90IGNvcnJlY3RseSBpZGVudGlmaWVkIGFzIGFuIGFzeW5jIG1ldGhvZCBzaW5jZQorICAgIC8vIHdlJ3JlIG5vdCBvdXQgb2YgUG9zdENvbnN0cnVjdCB5ZXQuCisgICAgbWUuZm9vKCk7CiAKLQlTaW5nbGV0b25CZWFuMiBzYjIgPSAoU2luZ2xldG9uQmVhbjIpIAotCSAgICBjdHgubG9va3VwKCJqYXZhOm1vZHVsZS9TaW5nbGV0b25CZWFuMiIpOworICAgIFNpbmdsZXRvbkJlYW4yIHNiMiA9IChTaW5nbGV0b25CZWFuMikKKyAgICAgICAgY3R4Lmxvb2t1cCgiamF2YTptb2R1bGUvU2luZ2xldG9uQmVhbjIiKTsKIAotCS8vIENhbGwgcmVhZC1sb2NrIGFzeW5jIG1ldGhvZCBhbmQgaGF2ZSBpdCBzbGVlcCBmb3IgYSBsaXR0bGUKLQkvLyB3aGlsZQotCXNiMi5mb29Bc3luYygxMCk7CisgICAgLy8gQ2FsbCByZWFkLWxvY2sgYXN5bmMgbWV0aG9kIGFuZCBoYXZlIGl0IHNsZWVwIGZvciBhIGxpdHRsZQorICAgIC8vIHdoaWxlCisgICAgc2IyLmZvb0FzeW5jKDEwKTsKIAotCS8vIFNsZWVwIGZvciBhIHNob3J0IHRpbWUgdG8gYWxsb3cgZW5vdWdoIHRpbWUgZm9yIGZvb0FzeW5jKCkgdG8KLQkvLyBibG9jawotCXRyeSB7Ci0JICAgIFRocmVhZC5zbGVlcCgxMDAwKTsKLQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQorICAgIC8vIFNsZWVwIGZvciBhIHNob3J0IHRpbWUgdG8gYWxsb3cgZW5vdWdoIHRpbWUgZm9yIGZvb0FzeW5jKCkgdG8KKyAgICAvLyBibG9jaworICAgIHRyeSB7CisgICAgICAgIFRocmVhZC5zbGVlcCgxMDAwKTsKKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQogCi0JLy8gQ2FsbCBhIHN5Y2hyb25vdXMgd3JpdGUtbG9jayBtZXRob2Qgd2l0aCBhIC54bWwgc3BlY2lmaWVkCi0JLy8gdGltZW91dCB0aGF0J3MgbGVzcyB0aGFuIHRoZSBmb29Bc3luYyBzbGVlcCB0aW1lCi0JdHJ5IHsKLQkgICAgc2IyLmZvbygpOwotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJTaG91bGQgaGF2ZSBnb3R0ZW4gdGltZW91dCBleGNlcHRpb24iKTsKLQl9IGNhdGNoKENvbmN1cnJlbnRBY2Nlc3NUaW1lb3V0RXhjZXB0aW9uIGNhdGUpIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgZXhwZWN0ZWQgdGltZW91dCBleGNlcHRpb24iKTsKLQl9CisgICAgLy8gQ2FsbCBhIHN5Y2hyb25vdXMgd3JpdGUtbG9jayBtZXRob2Qgd2l0aCBhIC54bWwgc3BlY2lmaWVkCisgICAgLy8gdGltZW91dCB0aGF0J3MgbGVzcyB0aGFuIHRoZSBmb29Bc3luYyBzbGVlcCB0aW1lCisgICAgdHJ5IHsKKyAgICAgICAgc2IyLmZvbygpOworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJTaG91bGQgaGF2ZSBnb3R0ZW4gdGltZW91dCBleGNlcHRpb24iKTsKKyAgICB9IGNhdGNoKENvbmN1cnJlbnRBY2Nlc3NUaW1lb3V0RXhjZXB0aW9uIGNhdGUpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgZXhwZWN0ZWQgdGltZW91dCBleGNlcHRpb24iKTsKKyAgICB9CiAKLQlSZW1vdGVTaW5nbGV0b24gbG9va3VwMSA9IChSZW1vdGVTaW5nbGV0b24pCi0JICAgIGN0eC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL2xvb2t1cDEiKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImxvb2t1cDEgPSAiICsgbG9va3VwMSk7CisgICAgUmVtb3RlU2luZ2xldG9uIGxvb2t1cDEgPSAoUmVtb3RlU2luZ2xldG9uKQorICAgICAgICBjdHgubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9sb29rdXAxIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJsb29rdXAxID0gIiArIGxvb2t1cDEpOwogCi0JU2luZ2xldG9uQmVhbjIgbG9va3VwMiA9IChTaW5nbGV0b25CZWFuMikKLQkgICAgY3R4Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvbG9va3VwMiIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigibG9va3VwMiA9ICIgKyBsb29rdXAyKTsKKyAgICBTaW5nbGV0b25CZWFuMiBsb29rdXAyID0gKFNpbmdsZXRvbkJlYW4yKQorICAgICAgICBjdHgubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9sb29rdXAyIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJsb29rdXAyID0gIiArIGxvb2t1cDIpOwogCi0JLy8gTm93IGNhbGwgYSBzeW5jaHJvbm91cyByZWFkLWxvY2sgbWV0aG9kLiAgVGhpcyBzaG91bGQganVzdAotCS8vIHByb2NlZWQuCi0Jc2IyLmZvbzIoKTsKKyAgICAvLyBOb3cgY2FsbCBhIHN5bmNocm9ub3VzIHJlYWQtbG9jayBtZXRob2QuICBUaGlzIHNob3VsZCBqdXN0CisgICAgLy8gcHJvY2VlZC4KKyAgICBzYjIuZm9vMigpOwogCi0Jc2YuZm9vKCk7CisgICAgc2YuZm9vKCk7CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkxlYXZpbmcgU2luZ2xldG9uQmVhbjo6aW5pdCgpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJMZWF2aW5nIFNpbmdsZXRvbkJlYW46OmluaXQoKSIpOwogICAgIH0KIAogICAgIEBBY2Nlc3NUaW1lb3V0KHZhbHVlPTEwLCB1bml0PVRpbWVVbml0LkRBWVMpCiAgICAgcHVibGljIHZvaWQgZm9vKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6Zm9vKCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46OmZvbygpIik7CiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKICAgICBwcml2YXRlIHZvaWQgZGVzdHJveSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46OmRlc3Ryb3koKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6ZGVzdHJveSgpIik7CiAgICAgfQogCiAgICAgQFNjaGVkdWxlKHNlY29uZD0iMSIsIG1pbnV0ZT0iKiIsIGhvdXI9IioiLCBwZXJzaXN0ZW50PWZhbHNlKQogICAgIHByaXZhdGUgdm9pZCBteXRpbWVvdXQoVGltZXIgdCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6bXl0aW1lb3V0LCBpbmZvID0gIiArIHQuZ2V0SW5mbygpICsgInQgPSAiICsgCi0JCQkgICB0LmdldFNjaGVkdWxlKCkpOwkKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46Om15dGltZW91dCwgaW5mbyA9ICIgKyB0LmdldEluZm8oKSArICJ0ID0gIiArCisgICAgICAgICAgICAgICB0LmdldFNjaGVkdWxlKCkpOwogCi0JdHJ5IHsKLQkgICAgdC5nZXRIYW5kbGUoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgZ290IGhhbmRsZSBmb3IgcGVyc2lzdGVudCB0aW1lciIpOwotCX0gY2F0Y2goSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUpIHsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlKTsKLQl9CisgICAgdHJ5IHsKKyAgICAgICAgdC5nZXRIYW5kbGUoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgZ290IGhhbmRsZSBmb3IgcGVyc2lzdGVudCB0aW1lciIpOworICAgIH0gY2F0Y2goSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlKTsKKyAgICB9CiAKLQlpZiggdC5nZXRJbmZvKCkuZXF1YWxzKCJpbmZvIikgJiYgdC5pc1BlcnNpc3RlbnQoKSAmJiB0LmlzQ2FsZW5kYXJUaW1lcigpICkgewotCSAgICBnb3RUaW1lb3V0ID0gdHJ1ZTsKLQl9IGVsc2UgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJUaW1lciBtZXRhZGF0YSBkb2Vzbid0IG1hdGNoIGRlc2NyaXB0b3IgIiArIHQpOwotCX0KKyAgICBpZiggdC5nZXRJbmZvKCkuZXF1YWxzKCJpbmZvIikgJiYgdC5pc1BlcnNpc3RlbnQoKSAmJiB0LmlzQ2FsZW5kYXJUaW1lcigpICkgeworICAgICAgICBnb3RUaW1lb3V0ID0gdHJ1ZTsKKyAgICB9IGVsc2UgeworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJUaW1lciBtZXRhZGF0YSBkb2Vzbid0IG1hdGNoIGRlc2NyaXB0b3IgIiArIHQpOworICAgIH0KICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgbXl0aW1lb3V0MigpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46Om15dGltZW91dCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6bXl0aW1lb3V0Iik7CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIG15dGltZW91dDEoVGltZXIgdCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6bXl0aW1lb3V0MSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6bXl0aW1lb3V0MSIpOwogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIGdldFRlc3RSZXN1bHQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOjp0ZXN0UGFzc2VkIik7Ci0JcmV0dXJuIGdvdFRpbWVvdXQ7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOjp0ZXN0UGFzc2VkIik7CisgICAgcmV0dXJuIGdvdFRpbWVvdXQ7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvc2NoZW1hL2VqYi9TaW5nbGV0b25CZWFuMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvc2NoZW1hL2VqYi9TaW5nbGV0b25CZWFuMi5qYXZhCmluZGV4IDQ5YzBiNmUuLjg5NDYwYTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3NjaGVtYS9lamIvU2luZ2xldG9uQmVhbjIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9zY2hlbWEvZWpiL1NpbmdsZXRvbkJlYW4yLmphdmEKQEAgLTIxLDEwICsyMSwxMCBAQAogICAgIHByaXZhdGUgaW50IGluaXRUeCA9IC0xOwogCiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuMjo6aW5pdCgpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuMjo6aW5pdCgpIik7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBqYXZheC5uYW1pbmcuSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgamF2YXgubmFtaW5nLkluaXRpYWxDb250ZXh0KCk7Ci0JICAgIGpha2FydGEudHJhbnNhY3Rpb24uVHJhbnNhY3Rpb25TeW5jaHJvbml6YXRpb25SZWdpc3RyeSB0ciA9IAorICAgICAgICBqYWthcnRhLnRyYW5zYWN0aW9uLlRyYW5zYWN0aW9uU3luY2hyb25pemF0aW9uUmVnaXN0cnkgdHIgPQogICAgICAgICAgICAgICAgICAoamFrYXJ0YS50cmFuc2FjdGlvbi5UcmFuc2FjdGlvblN5bmNocm9uaXphdGlvblJlZ2lzdHJ5KQogICAgICAgICAgICAgICAgICBpYy5sb29rdXAoImphdmE6Y29tcC9UcmFuc2FjdGlvblN5bmNocm9uaXphdGlvblJlZ2lzdHJ5Iik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW4yOjppbml0KCkgdHggc3RhdHVzOiAiICsgdHIuZ2V0VHJhbnNhY3Rpb25TdGF0dXMoKSk7CkBAIC0zNSwzMiArMzUsMzIgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBmb28oKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuMjo6Zm9vKCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW4yOjpmb28oKSIpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGZvbzIoKSB7IAotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjI6OmZvbzIoKSIpOworICAgIHB1YmxpYyB2b2lkIGZvbzIoKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuMjo6Zm9vMigpIik7CiAgICAgICAgIGlmIChpbml0VHggIT0gNikKICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJpbml0VHggaXMgIiArIGluaXRUeCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZm9vQXN5bmMoaW50IHNsZWVwU2Vjb25kcykgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjI6OmZvb0FzeW5jKCkgU2xlZXBpbmcgZm9yICIgKwotCQkJICAgc2xlZXBTZWNvbmRzICsgIiBzZWNvbmRzLi4uIik7Ci0JdHJ5IHsKLQkgICAgVGhyZWFkLnNsZWVwKHNsZWVwU2Vjb25kcyAqIDEwMDApOwotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9Ci0JU3lzdGVtLm91dC5wcmludGxuKCJmb29Bc3luYygpIGF3b2tlIGZyb20gU2xlZXAiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW4yOjpmb29Bc3luYygpIFNsZWVwaW5nIGZvciAiICsKKyAgICAgICAgICAgICAgIHNsZWVwU2Vjb25kcyArICIgc2Vjb25kcy4uLiIpOworICAgIHRyeSB7CisgICAgICAgIFRocmVhZC5zbGVlcChzbGVlcFNlY29uZHMgKiAxMDAwKTsKKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZm9vQXN5bmMoKSBhd29rZSBmcm9tIFNsZWVwIik7CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGRlc3Ryb3koKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuMjo6ZGVzdHJveSgpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuMjo6ZGVzdHJveSgpIik7CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIG15VGltZW91dCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlbjI6Om15VGltZW91dCgpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZW4yOjpteVRpbWVvdXQoKSIpOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvc2NoZW1hL2VqYi9TdGF0ZWZ1bEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3NjaGVtYS9lamIvU3RhdGVmdWxCZWFuLmphdmEKaW5kZXggNmU3YjllNy4uNzE5MjM4MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvc2NoZW1hL2VqYi9TdGF0ZWZ1bEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9zY2hlbWEvZWpiL1N0YXRlZnVsQmVhbi5qYXZhCkBAIC0yMSwyNyArMjEsMjcgQEAKIAogcHVibGljIGNsYXNzIFN0YXRlZnVsQmVhbiB7CiAKLSAgICBARUpCIHByaXZhdGUgU3RhdGVsZXNzQmVhbiBzbHNiOyAgICAKKyAgICBARUpCIHByaXZhdGUgU3RhdGVsZXNzQmVhbiBzbHNiOwogCiAgICAgcHVibGljIHZvaWQgZm9vKCkgewogCi0Jc2xzYi5mb28oKTsKLQkKKyAgICBzbHNiLmZvbygpOworCiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgYWZ0ZXJCZWdpbigpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlZnVsQmVhbjo6YWZ0ZXJCZWdpbiIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVmdWxCZWFuOjphZnRlckJlZ2luIik7CiAgICAgfQogCiAKICAgICBwcml2YXRlIHZvaWQgYmVmb3JlQ29tcGxldGlvbigpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlZnVsQmVhbjo6YmVmb3JlQ29tcGxldGlvbiIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVmdWxCZWFuOjpiZWZvcmVDb21wbGV0aW9uIik7CiAgICAgfQogCiAKICAgICB2b2lkIGFmdGVyQ29tcGxldGlvbihib29sZWFuIGNvbW1pdHRlZCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVmdWxCZWFuOjphZnRlckNvbXBsZXRpb24gYyA9ICIgKwotCQkJICAgY29tbWl0dGVkKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlZnVsQmVhbjo6YWZ0ZXJDb21wbGV0aW9uIGMgPSAiICsKKyAgICAgICAgICAgICAgIGNvbW1pdHRlZCk7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9zY2hlbWEvZWpiL1N0YXRlbGVzc0JlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3NjaGVtYS9lamIvU3RhdGVsZXNzQmVhbi5qYXZhCmluZGV4IGQxMzQ1ODIuLmU4ZDRlZTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3NjaGVtYS9lamIvU3RhdGVsZXNzQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3NjaGVtYS9lamIvU3RhdGVsZXNzQmVhbi5qYXZhCkBAIC0yNywyMyArMjcsMjMgQEAKIAogICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKIAotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVsZXNzQmVhbjo6Zm9vIik7Ci0JCQotICAgICAgIAlTdHJpbmcgbXVsdGkxU3RyID0gbXVsdGkxLmZvbygpOwotCVN0cmluZyBtdWx0aTJTdHIgPSBtdWx0aTIuZm9vKCk7Ci0JU3RyaW5nIG11bHRpM1N0ciA9IG11bHRpMy5mb28oKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlbGVzc0JlYW46OmZvbyIpOwogCi0gICAgICAgCVN5c3RlbS5vdXQucHJpbnRsbigibXVsdGkxID0gIiArIG11bHRpMVN0cik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJtdWx0aTIgPSAiICsgbXVsdGkyU3RyKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIm11bHRpMyA9ICIgKyBtdWx0aTNTdHIpOworICAgICAgICAgICBTdHJpbmcgbXVsdGkxU3RyID0gbXVsdGkxLmZvbygpOworICAgIFN0cmluZyBtdWx0aTJTdHIgPSBtdWx0aTIuZm9vKCk7CisgICAgU3RyaW5nIG11bHRpM1N0ciA9IG11bHRpMy5mb28oKTsKIAotCWlmKCAvKiohbXVsdGkxU3RyLmVxdWFscygiMSIpIHx8ICoqLwotCSAgICAhbXVsdGkyU3RyLmVxdWFscygiMiIpIHx8Ci0JICAgICFtdWx0aTNTdHIuZXF1YWxzKCIzIikgKSB7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIkludmFsaWQgbXVsdGkgdmFsdWVzIik7CisgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibXVsdGkxID0gIiArIG11bHRpMVN0cik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJtdWx0aTIgPSAiICsgbXVsdGkyU3RyKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm11bHRpMyA9ICIgKyBtdWx0aTNTdHIpOwogCi0JfQotCQorICAgIGlmKCAvKiohbXVsdGkxU3RyLmVxdWFscygiMSIpIHx8ICoqLworICAgICAgICAhbXVsdGkyU3RyLmVxdWFscygiMiIpIHx8CisgICAgICAgICFtdWx0aTNTdHIuZXF1YWxzKCIzIikgKSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIkludmFsaWQgbXVsdGkgdmFsdWVzIik7CisKKyAgICB9CisKIAogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvc2ZzYnNjbmMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Nmc2JzY25jL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYzUxMDI2MC4uMjE0N2NhNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvc2ZzYnNjbmMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9zZnNic2NuYy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMiArMTUsMTIgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lamIzMS1mdWxsLXNmc2JzY25jIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAKLTxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz5cdTAwMjAKKzxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic2UuY2xpZW50IiB2YWx1ZT0iY29tLmFjbWUuQ2xpZW50Ii8+Ci0JCisKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvc2ZzYnNjbmMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvc2ZzYnNjbmMvYnVpbGQueG1sCmluZGV4IDk5MzY3ZmIuLjYxYWQ2NDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Nmc2JzY25jL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9zZnNic2NuYy9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDEyICs0NiwxMiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZWpiLWphci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktamFyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNTksOSArNTksOSBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuX3NlIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bl9zZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgIDxqYXZhICBmb3JrPSJvbiIgCisgICAgICAgPGphdmEgIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iJHtzZS5jbGllbnR9Ij4KQEAgLTczLDcgKzczLDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qYXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Nmc2JzY25jL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Nmc2JzY25jL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA2OTQyYTRjLi4zNDkyNjdiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9zZnNic2NuYy9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvc2ZzYnNjbmMvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBhcHBOYW1lOwpAQCAtNDMsMTIxICs0MywxMjEgQEAKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKIAotCWFwcE5hbWUgPSBhcmdzWzBdOyAKLQlzdGF0LmFkZERlc2NyaXB0aW9uKGFwcE5hbWUpOwotCUNsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOyAgICAgICAKLSAgICAgICAgY2xpZW50LmRvVGVzdCgpOwkKKyAgICBhcHBOYW1lID0gYXJnc1swXTsKKyAgICBzdGF0LmFkZERlc2NyaXB0aW9uKGFwcE5hbWUpOworICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOworICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KGFwcE5hbWUgKyAiSUQiKTsKICAgICB9CiAKICAgICBwdWJsaWMgQ2xpZW50KFN0cmluZ1tdIGFyZ3MpIHsKLQludW0gPSBJbnRlZ2VyLnZhbHVlT2YoYXJnc1sxXSk7CisgICAgbnVtID0gSW50ZWdlci52YWx1ZU9mKGFyZ3NbMV0pOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKIAotCXRyeSB7CisgICAgdHJ5IHsKIAotCSAgICBzZXJpYWxpemVkQmVhbiA9IChTdGF0ZWZ1bENuY1N1cGVySW50ZikgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmdsb2JhbC8iICsgYXBwTmFtZSArICIvU3RhdGVmdWxCZWFuU2VyaWFsaXplZCFjb20uYWNtZS5TdGF0ZWZ1bENuY1JlbW90ZSIpOworICAgICAgICBzZXJpYWxpemVkQmVhbiA9IChTdGF0ZWZ1bENuY1N1cGVySW50ZikgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmdsb2JhbC8iICsgYXBwTmFtZSArICIvU3RhdGVmdWxCZWFuU2VyaWFsaXplZCFjb20uYWNtZS5TdGF0ZWZ1bENuY1JlbW90ZSIpOwogCi0JICAgIG5vblNlcmlhbGl6ZWRCZWFuID0gKFN0YXRlZnVsQ25jU3VwZXJJbnRmKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6Z2xvYmFsLyIgKyBhcHBOYW1lICsgIi9TdGF0ZWZ1bEJlYW5Ob3RTZXJpYWxpemVkIWNvbS5hY21lLlN0YXRlZnVsQ25jUmVtb3RlIik7CisgICAgICAgIG5vblNlcmlhbGl6ZWRCZWFuID0gKFN0YXRlZnVsQ25jU3VwZXJJbnRmKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6Z2xvYmFsLyIgKyBhcHBOYW1lICsgIi9TdGF0ZWZ1bEJlYW5Ob3RTZXJpYWxpemVkIWNvbS5hY21lLlN0YXRlZnVsQ25jUmVtb3RlIik7CiAKIAotCSAgICBub25TZXJpYWxpemVkQmVhbi5zbGVlcCgzKTsKKyAgICAgICAgbm9uU2VyaWFsaXplZEJlYW4uc2xlZXAoMyk7CiAKIAotCSAgICB0cnkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlNsZWVwIGEgc21hbGwgYW1vdW50IHRvIG1ha2Ugc3VyZSB0aGUgYXN5bmMgbWV0aG9kIiArCi0JCQkJICAgImlzIGRpc3BhdGNoZWQgYmVmb3JlIHdlIG1ha2UgdGhlIG5leHQgY2FsbC4uLiIpOwotCQlUaHJlYWQuc2xlZXAoNTAwKTsKLQkJbm9uU2VyaWFsaXplZEJlYW4uaGVsbG8oKTsKLQkJdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiRGlkIG5vdCByZWNlaXZlIGNvbmN1cnJlbnQgYWNjZXNzIGV4Y2VwdGlvbiIpOwotCSAgICB9IGNhdGNoKENvbmN1cnJlbnRBY2Nlc3NFeGNlcHRpb24gY2FlKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIGNvbmN1cnJlbnQgYWNjZXNzIGV4Y2VwdGlvbiBmb3IgIiArCi0JCQkJICAgIiBjb25jdXJyZW50IGFjY2VzcyBhdHRlbXB0IG9uIG5vbi1zZXJpYWxpemVkIHNmc2IiKTsKLQkgICAgfQorICAgICAgICB0cnkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNsZWVwIGEgc21hbGwgYW1vdW50IHRvIG1ha2Ugc3VyZSB0aGUgYXN5bmMgbWV0aG9kIiArCisgICAgICAgICAgICAgICAgICAgImlzIGRpc3BhdGNoZWQgYmVmb3JlIHdlIG1ha2UgdGhlIG5leHQgY2FsbC4uLiIpOworICAgICAgICBUaHJlYWQuc2xlZXAoNTAwKTsKKyAgICAgICAgbm9uU2VyaWFsaXplZEJlYW4uaGVsbG8oKTsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiRGlkIG5vdCByZWNlaXZlIGNvbmN1cnJlbnQgYWNjZXNzIGV4Y2VwdGlvbiIpOworICAgICAgICB9IGNhdGNoKENvbmN1cnJlbnRBY2Nlc3NFeGNlcHRpb24gY2FlKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIGNvbmN1cnJlbnQgYWNjZXNzIGV4Y2VwdGlvbiBmb3IgIiArCisgICAgICAgICAgICAgICAgICAgIiBjb25jdXJyZW50IGFjY2VzcyBhdHRlbXB0IG9uIG5vbi1zZXJpYWxpemVkIHNmc2IiKTsKKyAgICAgICAgfQogCi0JICAgIHRyeSB7Ci0JCXNlcmlhbGl6ZWRCZWFuLnNsZWVwKDMpOwotCQl0cnkgewotCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJTbGVlcCBhIHNtYWxsIGFtb3VudCB0byBtYWtlIHN1cmUgdGhlIGFzeW5jIG1ldGhvZCIgKwotCQkJCSAgICJpcyBkaXNwYXRjaGVkIGJlZm9yZSB3ZSBtYWtlIHRoZSBuZXh0IGNhbGwuLi4iKTsKLQkJICAgIFRocmVhZC5zbGVlcCgxMDApOwotCQkgICAgc2VyaWFsaXplZEJlYW4uaGVsbG9XYWl0KCk7Ci0JCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJTaG91bGQgaGF2ZSByZWNlaXZlZCB0aW1lb3V0IGV4Y2VwdGlvbiIpOwotCQl9IGNhdGNoKENvbmN1cnJlbnRBY2Nlc3NUaW1lb3V0RXhjZXB0aW9uIGNhdGUpIHsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIHRpbWVvdXQgZXhjZXB0aW9uIik7Ci0JCX0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgc2VyaWFsaXplZEJlYW4uc2xlZXAoMyk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNsZWVwIGEgc21hbGwgYW1vdW50IHRvIG1ha2Ugc3VyZSB0aGUgYXN5bmMgbWV0aG9kIiArCisgICAgICAgICAgICAgICAgICAgImlzIGRpc3BhdGNoZWQgYmVmb3JlIHdlIG1ha2UgdGhlIG5leHQgY2FsbC4uLiIpOworICAgICAgICAgICAgVGhyZWFkLnNsZWVwKDEwMCk7CisgICAgICAgICAgICBzZXJpYWxpemVkQmVhbi5oZWxsb1dhaXQoKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIlNob3VsZCBoYXZlIHJlY2VpdmVkIHRpbWVvdXQgZXhjZXB0aW9uIik7CisgICAgICAgIH0gY2F0Y2goQ29uY3VycmVudEFjY2Vzc1RpbWVvdXRFeGNlcHRpb24gY2F0ZSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgcmVjZWl2ZWQgdGltZW91dCBleGNlcHRpb24iKTsKKyAgICAgICAgfQogCi0JCVN5c3RlbS5vdXQucHJpbnRsbigiQXR0ZW1wdCBsb29wYmFjayBjYWxsIik7Ci0JCXNlcmlhbGl6ZWRCZWFuLmF0dGVtcHRMb29wYmFjaygpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkF0dGVtcHQgbG9vcGJhY2sgY2FsbCIpOworICAgICAgICBzZXJpYWxpemVkQmVhbi5hdHRlbXB0TG9vcGJhY2soKTsKIAotCQkvLyBJbnZva2luZyB0aGUgc2FtZSBiZWFuIG11c3Qgc3RpbGwgd29yayBzaW5jZSB0aGUgY29uY3VycmVudCBhY2Nlc3MKLQkJLy8gZXhjZXB0aW9ucyBkbyBub3QgcmVzdWx0IGluIHRoZSBiZWFuIGJlaW5nIGRlc3Ryb3llZAotCQlTdHJpbmcgcmVzdWx0ID0gc2VyaWFsaXplZEJlYW4uaGVsbG8oKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJTZXJpYWxpemVkIGJlYW4gc2F5cyAiICsgcmVzdWx0KTsKKyAgICAgICAgLy8gSW52b2tpbmcgdGhlIHNhbWUgYmVhbiBtdXN0IHN0aWxsIHdvcmsgc2luY2UgdGhlIGNvbmN1cnJlbnQgYWNjZXNzCisgICAgICAgIC8vIGV4Y2VwdGlvbnMgZG8gbm90IHJlc3VsdCBpbiB0aGUgYmVhbiBiZWluZyBkZXN0cm95ZWQKKyAgICAgICAgU3RyaW5nIHJlc3VsdCA9IHNlcmlhbGl6ZWRCZWFuLmhlbGxvKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VyaWFsaXplZCBiZWFuIHNheXMgIiArIHJlc3VsdCk7CiAKLQkgICAgfSBjYXRjaChDb25jdXJyZW50QWNjZXNzRXhjZXB0aW9uIGNhZSkgewotCQkgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiU2hvdWxkbid0IGhhdmUgcmVjZWl2ZWQgY29uY3VycmVudCBhY2Nlc3MgZXhjZXB0aW9uIik7Ci0JICAgIH0KKyAgICAgICAgfSBjYXRjaChDb25jdXJyZW50QWNjZXNzRXhjZXB0aW9uIGNhZSkgeworICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiU2hvdWxkbid0IGhhdmUgcmVjZWl2ZWQgY29uY3VycmVudCBhY2Nlc3MgZXhjZXB0aW9uIik7CisgICAgICAgIH0KIAotCSAgICBub25TZXJpYWxpemVkQmVhbi5hdHRlbXB0TG9vcGJhY2soKTsKKyAgICAgICAgbm9uU2VyaWFsaXplZEJlYW4uYXR0ZW1wdExvb3BiYWNrKCk7CiAKLQkgICAgcmVtb3RlQXN5bmMgPSAoUmVtb3RlQXN5bmMpIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpnbG9iYWwvIiArIGFwcE5hbWUgKyAiL1NpbmdsZXRvbkJlYW4iKTsKLQkgICAgcmVtb3RlQXN5bmMuc3RhcnRUZXN0KCk7Ci0JICAgIAotCSAgICBFeGVjdXRvclNlcnZpY2UgZXhlY3V0b3IgPSBFeGVjdXRvcnMubmV3Q2FjaGVkVGhyZWFkUG9vbCgpOworICAgICAgICByZW1vdGVBc3luYyA9IChSZW1vdGVBc3luYykgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmdsb2JhbC8iICsgYXBwTmFtZSArICIvU2luZ2xldG9uQmVhbiIpOworICAgICAgICByZW1vdGVBc3luYy5zdGFydFRlc3QoKTsKIAotCSAgICBJbmNyZW1lbnRDb3VudCBpY3NbXSA9IG5ldyBJbmNyZW1lbnRDb3VudFtudW1dOwotCSAgICBmb3IoaW50IGkgPSAwOyBpIDwgaWNzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIEV4ZWN1dG9yU2VydmljZSBleGVjdXRvciA9IEV4ZWN1dG9ycy5uZXdDYWNoZWRUaHJlYWRQb29sKCk7CiAKLQkJaWNzW2ldID0gbmV3IEluY3JlbWVudENvdW50KCk7CisgICAgICAgIEluY3JlbWVudENvdW50IGljc1tdID0gbmV3IEluY3JlbWVudENvdW50W251bV07CisgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBpY3MubGVuZ3RoOyBpKyspIHsKIAotCQlleGVjdXRvci5leGVjdXRlKCBpY3NbaV0gKTsKLQkgICAgfQorICAgICAgICBpY3NbaV0gPSBuZXcgSW5jcmVtZW50Q291bnQoKTsKIAotCSAgICBleGVjdXRvci5zaHV0ZG93bigpOworICAgICAgICBleGVjdXRvci5leGVjdXRlKCBpY3NbaV0gKTsKKyAgICAgICAgfQogCi0JICAgIGV4ZWN1dG9yLmF3YWl0VGVybWluYXRpb24oMTUsIFRpbWVVbml0LlNFQ09ORFMpOworICAgICAgICBleGVjdXRvci5zaHV0ZG93bigpOwogCi0JICAgIGludCBjb3VudCA9IHNlcmlhbGl6ZWRCZWFuLmdldENvdW50KCk7CisgICAgICAgIGV4ZWN1dG9yLmF3YWl0VGVybWluYXRpb24oMTUsIFRpbWVVbml0LlNFQ09ORFMpOwogCi0JICAgIGlmKCBjb3VudCA9PSBudW0gKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiVG90YWwgY291bnQgb2YgIiArIGNvdW50ICsgIiBpbnZvY2F0aW9ucyBpcyBjb3JyZWN0Iik7Ci0JICAgIH0gZWxzZSB7Ci0JCXRocm93IG5ldyBFSkJFeGNlcHRpb24oIldyb25nIGNvdW50IHRvdGFsID0gIiArIGNvdW50KTsKLQkgICAgfQorICAgICAgICBpbnQgY291bnQgPSBzZXJpYWxpemVkQmVhbi5nZXRDb3VudCgpOwogCi0JICAgIC8vIE5vdyBwdXQgdGhlIGJlYW4gdG8gc2xlZXAgYW5kIG1ha2UgYSBibG9ja2luZyAybmQgY2FsbC4gIFRoZSBmaXJzdCBtZXRob2QKLQkgICAgLy8gaXMgYSBAUmVtb3ZlIG1ldGhvZCBzbyB3aGVuIHRoZSBibG9ja2luZyBjYWxsIGF3YWtlcyB3ZSBzaG91bGQgZ2V0IHRoZQotCSAgICAvLyBhcHByb3ByaWF0ZSBleGNlcHRpb24uCi0JICAgIHNlcmlhbGl6ZWRCZWFuLnNsZWVwQW5kUmVtb3ZlKDMpOworICAgICAgICBpZiggY291bnQgPT0gbnVtICkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRvdGFsIGNvdW50IG9mICIgKyBjb3VudCArICIgaW52b2NhdGlvbnMgaXMgY29ycmVjdCIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJXcm9uZyBjb3VudCB0b3RhbCA9ICIgKyBjb3VudCk7CisgICAgICAgIH0KIAotCSAgICB0cnkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlNsZWVwIGEgc21hbGwgYW1vdW50IHRvIG1ha2Ugc3VyZSB0aGUgYXN5bmMgbWV0aG9kIiArCi0JCQkJICAgImlzIGRpc3BhdGNoZWQgYmVmb3JlIHdlIG1ha2UgdGhlIG5leHQgY2FsbC4uLiIpOwotCQlUaHJlYWQuc2xlZXAoMTAwKTsKLQkJc2VyaWFsaXplZEJlYW4uaGVsbG8oKTsKLQkJdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiRGlkIG5vdCByZWNlaXZlIE5vU3VjaEVKQkV4Y2VwdGlvbiIpOwotCSAgICB9IGNhdGNoKE5vU3VjaEVKQkV4Y2VwdGlvbiBuc2UpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgcmVjZWl2ZWQgTm9TdWNoRUpCRXhjZXB0aW9uIGZvciAiICsKLQkJCQkgICAiIGNvbmN1cnJlbnQgYWNjZXNzIGF0dGVtcHQgb24gcmVtb3ZlZCBzZnNiIik7Ci0JICAgIH0KKyAgICAgICAgLy8gTm93IHB1dCB0aGUgYmVhbiB0byBzbGVlcCBhbmQgbWFrZSBhIGJsb2NraW5nIDJuZCBjYWxsLiAgVGhlIGZpcnN0IG1ldGhvZAorICAgICAgICAvLyBpcyBhIEBSZW1vdmUgbWV0aG9kIHNvIHdoZW4gdGhlIGJsb2NraW5nIGNhbGwgYXdha2VzIHdlIHNob3VsZCBnZXQgdGhlCisgICAgICAgIC8vIGFwcHJvcHJpYXRlIGV4Y2VwdGlvbi4KKyAgICAgICAgc2VyaWFsaXplZEJlYW4uc2xlZXBBbmRSZW1vdmUoMyk7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTbGVlcCBhIHNtYWxsIGFtb3VudCB0byBtYWtlIHN1cmUgdGhlIGFzeW5jIG1ldGhvZCIgKworICAgICAgICAgICAgICAgICAgICJpcyBkaXNwYXRjaGVkIGJlZm9yZSB3ZSBtYWtlIHRoZSBuZXh0IGNhbGwuLi4iKTsKKyAgICAgICAgVGhyZWFkLnNsZWVwKDEwMCk7CisgICAgICAgIHNlcmlhbGl6ZWRCZWFuLmhlbGxvKCk7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIkRpZCBub3QgcmVjZWl2ZSBOb1N1Y2hFSkJFeGNlcHRpb24iKTsKKyAgICAgICAgfSBjYXRjaChOb1N1Y2hFSkJFeGNlcHRpb24gbnNlKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIE5vU3VjaEVKQkV4Y2VwdGlvbiBmb3IgIiArCisgICAgICAgICAgICAgICAgICAgIiBjb25jdXJyZW50IGFjY2VzcyBhdHRlbXB0IG9uIHJlbW92ZWQgc2ZzYiIpOworICAgICAgICB9CiAKIAotCSAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuUEFTUyk7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5QQVNTKTsKIAotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LkZBSUwpOwotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCX0KKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5GQUlMKTsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CiAgICAgfQogCiAKICAgICAgY2xhc3MgSW5jcmVtZW50Q291bnQgaW1wbGVtZW50cyBSdW5uYWJsZSB7Ci0JcHVibGljIHZvaWQgcnVuKCkgewotCSAgICBzZXJpYWxpemVkQmVhbi5pbmNyZW1lbnRDb3VudCgxKTsKLQl9CisgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICBzZXJpYWxpemVkQmVhbi5pbmNyZW1lbnRDb3VudCgxKTsKKyAgICB9CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9zZnNic2NuYy9lamIvUmVtb3RlQXN5bmMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Nmc2JzY25jL2VqYi9SZW1vdGVBc3luYy5qYXZhCmluZGV4IDk3YTI0YzguLmFjM2U4NWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Nmc2JzY25jL2VqYi9SZW1vdGVBc3luYy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Nmc2JzY25jL2VqYi9SZW1vdGVBc3luYy5qYXZhCkBAIC0yNCw2ICsyNCw2IEBACiAKICAgICB2b2lkIHN0YXJ0VGVzdCgpOwogCi0gICAgCisKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvc2ZzYnNjbmMvZWpiL1NpbmdsZXRvbkJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Nmc2JzY25jL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKaW5kZXggZWY0YjcxZi4uM2E5YTFjYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvc2ZzYnNjbmMvZWpiL1NpbmdsZXRvbkJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9zZnNic2NuYy9lamIvU2luZ2xldG9uQmVhbi5qYXZhCkBAIC0zOSw5ICszOSw5IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc3RhcnRUZXN0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiaW4gU2luZ2xldG9uQmVhbjo6c3RhcnRUZXN0KCkiKTsKLQkvLyByZXNldCBzdGF0ZQotCXJldHVybjsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIFNpbmdsZXRvbkJlYW46OnN0YXJ0VGVzdCgpIik7CisgICAgLy8gcmVzZXQgc3RhdGUKKyAgICByZXR1cm47CiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Nmc2JzY25jL2VqYi9TdGF0ZWZ1bEJlYW5Ob3RTZXJpYWxpemVkLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9zZnNic2NuYy9lamIvU3RhdGVmdWxCZWFuTm90U2VyaWFsaXplZC5qYXZhCmluZGV4IDM1ZjYyZDMuLjg0ZjU2YWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Nmc2JzY25jL2VqYi9TdGF0ZWZ1bEJlYW5Ob3RTZXJpYWxpemVkLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvc2ZzYnNjbmMvZWpiL1N0YXRlZnVsQmVhbk5vdFNlcmlhbGl6ZWQuamF2YQpAQCAtMzksMzEgKzM5LDMxIEBACiAKICAgICBAQXN5bmNocm9ub3VzCiAgICAgcHVibGljIHZvaWQgc2xlZXAoaW50IHNlY29uZHMpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlZnVsQmVhbk5vdFNlcmlhbGl6ZWQ6OmFzeW5jU2xlZXAiKTsKLQl0cnkgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNsZWVwaW5nIGZvciAiICsgc2Vjb25kcyArICIgc2Vjb25kcy4uLiIpOwotCSAgICBUaHJlYWQuc2xlZXAoc2Vjb25kcyAqIDEwMDApOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldva2UgdXAgZnJvbSBzbGVlcCIpOwotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlKTsKLQl9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWZ1bEJlYW5Ob3RTZXJpYWxpemVkOjphc3luY1NsZWVwIik7CisgICAgdHJ5IHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTbGVlcGluZyBmb3IgIiArIHNlY29uZHMgKyAiIHNlY29uZHMuLi4iKTsKKyAgICAgICAgVGhyZWFkLnNsZWVwKHNlY29uZHMgKiAxMDAwKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXb2tlIHVwIGZyb20gc2xlZXAiKTsKKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7CisgICAgfQogICAgIH0KIAogICAgICBwdWJsaWMgU3RyaW5nIGhlbGxvKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVmdWxCZWFuTm90U2VyaWFsaXplZDo6aGVsbG8iKTsKLQlyZXR1cm4gImhlbGxvLCB3b3JsZCFcbiI7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWZ1bEJlYW5Ob3RTZXJpYWxpemVkOjpoZWxsbyIpOworICAgIHJldHVybiAiaGVsbG8sIHdvcmxkIVxuIjsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBhdHRlbXB0TG9vcGJhY2soKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWZ1bEJlYW5Ob3RTZXJpYWxpemVkOjphdHRlbXB0TG9vcGJhY2siKTsKLQlTdGF0ZWZ1bENuY1N1cGVySW50ZiBtZSA9IHNlc3Npb25DdHguZ2V0QnVzaW5lc3NPYmplY3QoU3RhdGVmdWxDbmNMb2NhbC5jbGFzcyk7Ci0JdHJ5IHsKLQkgICAgbWUuaGVsbG8oKTsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiU2hvdWxkIGhhdmUgcmVjZWl2ZWQgY29uY3VycmVudCBhY2Nlc3MgZXgiKTsKLQl9IGNhdGNoKENvbmN1cnJlbnRBY2Nlc3NFeGNlcHRpb24gY2FlKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIGNvbmN1cmVudCBhY2Nlc3MgZXhjZXB0aW9uIik7Ci0JfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVmdWxCZWFuTm90U2VyaWFsaXplZDo6YXR0ZW1wdExvb3BiYWNrIik7CisgICAgU3RhdGVmdWxDbmNTdXBlckludGYgbWUgPSBzZXNzaW9uQ3R4LmdldEJ1c2luZXNzT2JqZWN0KFN0YXRlZnVsQ25jTG9jYWwuY2xhc3MpOworICAgIHRyeSB7CisgICAgICAgIG1lLmhlbGxvKCk7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIlNob3VsZCBoYXZlIHJlY2VpdmVkIGNvbmN1cnJlbnQgYWNjZXNzIGV4Iik7CisgICAgfSBjYXRjaChDb25jdXJyZW50QWNjZXNzRXhjZXB0aW9uIGNhZSkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSByZWNlaXZlZCBjb25jdXJlbnQgYWNjZXNzIGV4Y2VwdGlvbiIpOworICAgIH0KICAgICB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvc2ZzYnNjbmMvZWpiL1N0YXRlZnVsQmVhblNlcmlhbGl6ZWQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3Nmc2JzY25jL2VqYi9TdGF0ZWZ1bEJlYW5TZXJpYWxpemVkLmphdmEKaW5kZXggODRmOWUzOC4uYWJiNzcwNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvc2ZzYnNjbmMvZWpiL1N0YXRlZnVsQmVhblNlcmlhbGl6ZWQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9zZnNic2NuYy9lamIvU3RhdGVmdWxCZWFuU2VyaWFsaXplZC5qYXZhCkBAIC0zMiwxNCArMzIsMTQgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBhdHRlbXB0TG9vcGJhY2soKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWZ1bEJlYW5TZXJpYWxpemVkOjphdHRlbXB0TG9vcGJhY2siKTsKLQlTdGF0ZWZ1bENuY1N1cGVySW50ZiBtZSA9IHNlc3Npb25DdHguZ2V0QnVzaW5lc3NPYmplY3QoU3RhdGVmdWxDbmNMb2NhbC5jbGFzcyk7Ci0JdHJ5IHsKLQkgICAgbWUuaGVsbG8oKTsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiU2hvdWxkIGhhdmUgcmVjZWl2ZWQgbG9vcGJhY2sgZXgiKTsKLQl9IGNhdGNoKElsbGVnYWxMb29wYmFja0V4Y2VwdGlvbiBpbGUpIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgcmVjZWl2ZWQgbG9vcGJhY2sgZXhjZXB0aW9uIik7Ci0JfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVmdWxCZWFuU2VyaWFsaXplZDo6YXR0ZW1wdExvb3BiYWNrIik7CisgICAgU3RhdGVmdWxDbmNTdXBlckludGYgbWUgPSBzZXNzaW9uQ3R4LmdldEJ1c2luZXNzT2JqZWN0KFN0YXRlZnVsQ25jTG9jYWwuY2xhc3MpOworICAgIHRyeSB7CisgICAgICAgIG1lLmhlbGxvKCk7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIlNob3VsZCBoYXZlIHJlY2VpdmVkIGxvb3BiYWNrIGV4Iik7CisgICAgfSBjYXRjaChJbGxlZ2FsTG9vcGJhY2tFeGNlcHRpb24gaWxlKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIGxvb3BiYWNrIGV4Y2VwdGlvbiIpOworICAgIH0KICAgICB9CiAKICAgICBAUHJlRGVzdHJveQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvc2ZzYnNjbmMvZWpiL1N0YXRlZnVsQmVhblN1cGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9zZnNic2NuYy9lamIvU3RhdGVmdWxCZWFuU3VwZXIuamF2YQppbmRleCA1OWM0ZjlmLi4xNjQyMDI0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9zZnNic2NuYy9lamIvU3RhdGVmdWxCZWFuU3VwZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9zZnNic2NuYy9lamIvU3RhdGVmdWxCZWFuU3VwZXIuamF2YQpAQCAtMjksNjMgKzI5LDYzIEBACiAKICAgICBAQWNjZXNzVGltZW91dCgtMSkKICAgICAgcHVibGljIFN0cmluZyBoZWxsbygpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlZnVsQmVhblN1cGVyOjpoZWxsbyIpOwotCXJldHVybiAiaGVsbG8sIHdvcmxkIVxuIjsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlZnVsQmVhblN1cGVyOjpoZWxsbyIpOworICAgIHJldHVybiAiaGVsbG8sIHdvcmxkIVxuIjsKICAgICB9CiAKICAgICBAQWNjZXNzVGltZW91dCh2YWx1ZT0xMDAsIHVuaXQ9VGltZVVuaXQuTkFOT1NFQ09ORFMpCiAgICAgcHVibGljIFN0cmluZyBoZWxsb1dhaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWZ1bEJlYW5TdXBlcjo6aGVsbG9XYWl0Iik7Ci0JcmV0dXJuICJoZWxsbywgd29ybGQhXG4iOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVmdWxCZWFuU3VwZXI6OmhlbGxvV2FpdCIpOworICAgIHJldHVybiAiaGVsbG8sIHdvcmxkIVxuIjsKICAgICB9Ci0gICAgCisKICAgICBAQXN5bmNocm9ub3VzCiAgICAgcHVibGljIEZ1dHVyZTxTdHJpbmc+IGhlbGxvQXN5bmMoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWZ1bEJlYW5TdXBlcjo6aGVsbG9Bc3luYyIpOwotCXJldHVybiBuZXcgQXN5bmNSZXN1bHQ8U3RyaW5nPigiaGVsbG8iKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlZnVsQmVhblN1cGVyOjpoZWxsb0FzeW5jIik7CisgICAgcmV0dXJuIG5ldyBBc3luY1Jlc3VsdDxTdHJpbmc+KCJoZWxsbyIpOwogICAgIH0KIAogICAgIEBBc3luY2hyb25vdXMKICAgICBwdWJsaWMgdm9pZCBmaXJlQW5kRm9yZ2V0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVmdWxCZWFuU3VwZXI6OmZpcmVBbmRGb3JnZXQiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlZnVsQmVhblN1cGVyOjpmaXJlQW5kRm9yZ2V0Iik7CiAgICAgfQogCiAgICAgQEFzeW5jaHJvbm91cwogICAgIHB1YmxpYyB2b2lkIHNsZWVwKGludCBzZWNvbmRzKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWZ1bEJlYW5TdXBlcjo6YXN5bmNTbGVlcCIpOwotCXRyeSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2xlZXBpbmcgZm9yICIgKyBzZWNvbmRzICsgIiBzZWNvbmRzLi4uIik7Ci0JICAgIFRocmVhZC5zbGVlcChzZWNvbmRzICogMTAwMCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV29rZSB1cCBmcm9tIHNsZWVwIik7Ci0JfSBjYXRjaChFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwotCX0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlZnVsQmVhblN1cGVyOjphc3luY1NsZWVwIik7CisgICAgdHJ5IHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTbGVlcGluZyBmb3IgIiArIHNlY29uZHMgKyAiIHNlY29uZHMuLi4iKTsKKyAgICAgICAgVGhyZWFkLnNsZWVwKHNlY29uZHMgKiAxMDAwKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXb2tlIHVwIGZyb20gc2xlZXAiKTsKKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7CisgICAgfQogICAgIH0KIAogICAgIEBBc3luY2hyb25vdXMKICAgICBAUmVtb3ZlCiAgICAgcHVibGljIHZvaWQgc2xlZXBBbmRSZW1vdmUoaW50IHNlY29uZHMpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlZnVsQmVhblN1cGVyOjpzbGVlcEFuZFJlbW92ZSIpOwotCXRyeSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2xlZXBpbmcgZm9yICIgKyBzZWNvbmRzICsgIiBzZWNvbmRzLi4uIik7Ci0JICAgIFRocmVhZC5zbGVlcChzZWNvbmRzICogMTAwMCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV29rZSB1cCBmcm9tIHNsZWVwLiBJIHdpbGwgbm93IGJlIHJlbW92ZWQuLi4iKTsKLQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7Ci0JfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU3RhdGVmdWxCZWFuU3VwZXI6OnNsZWVwQW5kUmVtb3ZlIik7CisgICAgdHJ5IHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTbGVlcGluZyBmb3IgIiArIHNlY29uZHMgKyAiIHNlY29uZHMuLi4iKTsKKyAgICAgICAgVGhyZWFkLnNsZWVwKHNlY29uZHMgKiAxMDAwKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXb2tlIHVwIGZyb20gc2xlZXAuIEkgd2lsbCBub3cgYmUgcmVtb3ZlZC4uLiIpOworICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlKTsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgaW5jcmVtZW50Q291bnQoaW50IHNlY29uZHMpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlZnVsQmVhblN1cGVyOjppbmNyZW1lbnRDb3VudCgiICsgc2Vjb25kcyArICIpIik7Ci0JLy8gaW5jcmVtZW50IGNvdW50IGJ1dCB3YWl0IGEgYml0IHRvIHRyeSBmb3JjZSBzZXJpYWxpemF0aW9uCi0Jc2xlZXAoc2Vjb25kcyk7Ci0JY291bnQrKzsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkNvdW50ID0gIiArIGNvdW50KTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlZnVsQmVhblN1cGVyOjppbmNyZW1lbnRDb3VudCgiICsgc2Vjb25kcyArICIpIik7CisgICAgLy8gaW5jcmVtZW50IGNvdW50IGJ1dCB3YWl0IGEgYml0IHRvIHRyeSBmb3JjZSBzZXJpYWxpemF0aW9uCisgICAgc2xlZXAoc2Vjb25kcyk7CisgICAgY291bnQrKzsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvdW50ID0gIiArIGNvdW50KTsKICAgICB9CiAKICAgICBwdWJsaWMgaW50IGdldENvdW50KCkgewotCXJldHVybiBjb3VudDsKKyAgICByZXR1cm4gY291bnQ7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvc2ZzYnNjbmMvZWpiL1N0YXRlZnVsQ25jU3VwZXJJbnRmLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9zZnNic2NuYy9lamIvU3RhdGVmdWxDbmNTdXBlckludGYuamF2YQppbmRleCBlMjQ4MjgzLi5hYTkxZDc0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9zZnNic2NuYy9lamIvU3RhdGVmdWxDbmNTdXBlckludGYuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC9zZnNic2NuYy9lamIvU3RhdGVmdWxDbmNTdXBlckludGYuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgaGVsbG8oKTsKIAogICAgIHB1YmxpYyBTdHJpbmcgaGVsbG9XYWl0KCk7Ci0gIAorCiAgICAgcHVibGljIEZ1dHVyZTxTdHJpbmc+IGhlbGxvQXN5bmMoKTsKIAogICAgIHB1YmxpYyB2b2lkIGZpcmVBbmRGb3JnZXQoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3dlYmFuZGVqYi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvd2ViYW5kZWpiL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMDMyOTg5Mi4uZDc5MWZkMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvd2ViYW5kZWpiL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvd2ViYW5kZWpiL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEzICsxNSwxMyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMxLWZ1bGwtd2ViZWpiIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAKLTxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz5cdTAwMjAKKzxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXN9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzZS5jbGllbnQiIHZhbHVlPSJjb20uYWNtZS5DbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9IiR7bW9kdWxlfSIvPgotCQorCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3dlYmFuZGVqYi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC93ZWJhbmRlamIvYnVpbGQueG1sCmluZGV4IGI4N2MzYTQuLjM5YmMxNDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3dlYmFuZGVqYi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvd2ViYW5kZWpiL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9IndhciIvPgpAQCAtNDgsOSArNDgsOSBAQAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9ImZhbHNlIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTU4LDkgKzU4LDkgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bl9zZSIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW5fc2UiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgIDxqYXZhICBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9IiR7c2UuY2xpZW50fSI+CkBAIC03Miw3ICs3Miw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC93ZWJhbmRlamIvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvd2ViYW5kZWpiL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBjMjk4YTRiLi5jMThjZGUzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC93ZWJhbmRlamIvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3dlYmFuZGVqYi9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI2LDcgKzI2LDcgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGFwcE5hbWU7CkBAIC0zNCw0NiArMzQsNDYgQEAKICAgICBwcml2YXRlIFN0cmluZyBwb3J0OwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewotCWFwcE5hbWUgPSBhcmdzWzBdOwotCXN0YXQuYWRkRGVzY3JpcHRpb24oYXBwTmFtZSk7Ci0JQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7ICAgICAgIAotICAgICAgICBjbGllbnQuZG9UZXN0KCk7CQorICAgIGFwcE5hbWUgPSBhcmdzWzBdOworICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oYXBwTmFtZSk7CisgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CisgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoYXBwTmFtZSArICJJRCIpOwogICAgIH0KIAogICAgIHB1YmxpYyBDbGllbnQoU3RyaW5nW10gYXJncykgewotCWhvc3QgPSBhcmdzWzFdOworICAgIGhvc3QgPSBhcmdzWzFdOwogICAgICAgICBwb3J0ID0gYXJnc1syXTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAKLQl0cnkgeworICAgIHRyeSB7CiAKLQkgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgCisgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArCiAgICAgICAgICAgICAgICAgIi8iICsgYXBwTmFtZSArICIvSGVsbG9TZXJ2bGV0IjsKIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnZva2luZyB3ZWJjbGllbnQgc2VydmxldCBhdCAiICsgdXJsKTsKIAotCSAgICBVUkwgdSA9IG5ldyBVUkwodXJsKTsKLSAgICAgICAgCi0JICAgIEh0dHBVUkxDb25uZWN0aW9uIGMxID0gKEh0dHBVUkxDb25uZWN0aW9uKXUub3BlbkNvbm5lY3Rpb24oKTsKLQkgICAgaW50IGNvZGUgPSBjMS5nZXRSZXNwb25zZUNvZGUoKTsKLQkgICAgSW5wdXRTdHJlYW0gaXMgPSBjMS5nZXRJbnB1dFN0cmVhbSgpOwotCSAgICBCdWZmZXJlZFJlYWRlciBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlciAobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7Ci0JICAgIFN0cmluZyBsaW5lID0gbnVsbDsKLQkgICAgd2hpbGUoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKQotCQlTeXN0ZW0ub3V0LnByaW50bG4obGluZSk7Ci0JICAgIGlmKGNvZGUgIT0gMjAwKSB7Ci0JCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJJbmNvcnJlY3QgcmV0dXJuIGNvZGU6ICIgKyBjb2RlKTsKLQkgICAgfQotCSAgICAKLQkgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LlBBU1MpOworICAgICAgICBVUkwgdSA9IG5ldyBVUkwodXJsKTsKIAotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LkZBSUwpOwotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCX0KKyAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gYzEgPSAoSHR0cFVSTENvbm5lY3Rpb24pdS5vcGVuQ29ubmVjdGlvbigpOworICAgICAgICBpbnQgY29kZSA9IGMxLmdldFJlc3BvbnNlQ29kZSgpOworICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IGMxLmdldElucHV0U3RyZWFtKCk7CisgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyIChuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKKyAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOworICAgICAgICB3aGlsZSgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihsaW5lKTsKKyAgICAgICAgaWYoY29kZSAhPSAyMDApIHsKKyAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkluY29ycmVjdCByZXR1cm4gY29kZTogIiArIGNvZGUpOworICAgICAgICB9CisKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LlBBU1MpOworCisgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuRkFJTCk7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQogICAgIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC93ZWJhbmRlamIvd2FyL0hlbGxvU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvd2ViYW5kZWpiL3dhci9IZWxsb1NlcnZsZXQuamF2YQppbmRleCAwM2NkYzg3Li4wYjkxN2NjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC93ZWJhbmRlamIvd2FyL0hlbGxvU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3dlYmFuZGVqYi93YXIvSGVsbG9TZXJ2bGV0LmphdmEKQEAgLTQ5LDY4ICs0OSw2OCBAQAogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwogCi0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NlcnZsZXQ6OmluaXQiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU2VydmxldDo6aW5pdCIpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQogICAgIHByb3RlY3RlZCB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TZXJ2bGV0Ojpkb0dldCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TZXJ2bGV0Ojpkb0dldCIpOwogCi0JcmVzcC5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CisgICAgcmVzcC5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3AuZ2V0V3JpdGVyKCk7CiAKLQl0cnkgewotCSAgICBIZWxsb1N0YXRlZnVsIHNmdWwgPSAoSGVsbG9TdGF0ZWZ1bCkgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmNvbXAvZW52L2hlbGxvU3RhdGVmdWwiKTsKLQkgICAgc2Z1bC5oZWxsbygpOwotCSAgICBoZWxsby5mb28oKTsKLQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQorICAgIHRyeSB7CisgICAgICAgIEhlbGxvU3RhdGVmdWwgc2Z1bCA9IChIZWxsb1N0YXRlZnVsKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6Y29tcC9lbnYvaGVsbG9TdGF0ZWZ1bCIpOworICAgICAgICBzZnVsLmhlbGxvKCk7CisgICAgICAgIGhlbGxvLmZvbygpOworICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlJlbW90ZSBpbnRmIGJlYW4gc2F5cyAiICsKLQkJCSAgIGhlbGxvUmVtb3RlLmhlbGxvKCkpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVtb3RlIGludGYgYmVhbiBzYXlzICIgKworICAgICAgICAgICAgICAgaGVsbG9SZW1vdGUuaGVsbG8oKSk7CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxpbmcgdGVzdE5vV2FpdC4gVGhpcyBvbmUgc2hvdWxkIHdvcmsgc2luY2UgaXQncyBub3QgYSBjb25jdXJyZW50IGludm9jYXRpb24iKTsKLQlzaW5nbGV0b24udGVzdE5vV2FpdCgpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbGluZyB0ZXN0Tm9XYWl0LiBUaGlzIG9uZSBzaG91bGQgd29yayBzaW5jZSBpdCdzIG5vdCBhIGNvbmN1cnJlbnQgaW52b2NhdGlvbiIpOworICAgIHNpbmdsZXRvbi50ZXN0Tm9XYWl0KCk7CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGwgYXN5bmMgd2FpdCwgdGhlbiBzbGVlcCBhIGJpdCB0byBtYWtlIHN1cmUgaXQgdGFrZXMgYWZmZWN0Iik7Ci0Jc2luZ2xldG9uLmFzeW5jV2FpdCgxKTsKLQl0cnkgewotCSAgICAvLyBTbGVlcCBhIGJpdCB0byBtYWtlIHN1cmUgYXN5bmMgY2FsbCBwcm9jZXNzZXMgYmVmb3JlIHdlIHByb2NlZWQKLQkgICAgVGhyZWFkLnNsZWVwKDEwMCk7Ci0JfSBjYXRjaChFeGNlcHRpb24gZSkgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oZSk7Ci0JfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbCBhc3luYyB3YWl0LCB0aGVuIHNsZWVwIGEgYml0IHRvIG1ha2Ugc3VyZSBpdCB0YWtlcyBhZmZlY3QiKTsKKyAgICBzaW5nbGV0b24uYXN5bmNXYWl0KDEpOworICAgIHRyeSB7CisgICAgICAgIC8vIFNsZWVwIGEgYml0IHRvIG1ha2Ugc3VyZSBhc3luYyBjYWxsIHByb2Nlc3NlcyBiZWZvcmUgd2UgcHJvY2VlZAorICAgICAgICBUaHJlYWQuc2xlZXAoMTAwKTsKKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihlKTsKKyAgICB9CiAKLQl0cnkgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxpbmcgdGVzdE5vV2FpdCIpOwotCSAgICBzaW5nbGV0b24udGVzdE5vV2FpdCgpOwotCSAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiRXhwZWN0ZWQgQ29uY3VycmVudEFjY2Vzc0V4Y2VwdGlvbiIpOwotCX0gY2F0Y2goQ29uY3VycmVudEFjY2Vzc1RpbWVvdXRFeGNlcHRpb24gY2F0ZSkgewotCSAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiRXhwZWN0ZWQgQ29uY3VycmVudEFjY2Vzc0V4Y2VwdGlvbiIpOwotCX0gY2F0Y2goQ29uY3VycmVudEFjY2Vzc0V4Y2VwdGlvbiBjYWUpIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgZXhwZWN0ZWQgZXhjZXB0aW9uIGZvciBjb25jdXJyZW50IGFjY2VzcyBvbiBtZXRob2Qgd2l0aCAwIHdhaXQiKTsKLQl9CisgICAgdHJ5IHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYWxsaW5nIHRlc3ROb1dhaXQiKTsKKyAgICAgICAgc2luZ2xldG9uLnRlc3ROb1dhaXQoKTsKKyAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkV4cGVjdGVkIENvbmN1cnJlbnRBY2Nlc3NFeGNlcHRpb24iKTsKKyAgICB9IGNhdGNoKENvbmN1cnJlbnRBY2Nlc3NUaW1lb3V0RXhjZXB0aW9uIGNhdGUpIHsKKyAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkV4cGVjdGVkIENvbmN1cnJlbnRBY2Nlc3NFeGNlcHRpb24iKTsKKyAgICB9IGNhdGNoKENvbmN1cnJlbnRBY2Nlc3NFeGNlcHRpb24gY2FlKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IGV4cGVjdGVkIGV4Y2VwdGlvbiBmb3IgY29uY3VycmVudCBhY2Nlc3Mgb24gbWV0aG9kIHdpdGggMCB3YWl0Iik7CisgICAgfQogCi0Jc2luZ2xldG9uLndhaXQoMTApOworICAgIHNpbmdsZXRvbi53YWl0KDEwKTsKIAotCXNpbmdsZXRvbi5yZWVudHJhbnRSZWFkV3JpdGUoKTsKKyAgICBzaW5nbGV0b24ucmVlbnRyYW50UmVhZFdyaXRlKCk7CiAKLQlzaW5nbGV0b24uY2FsbFNpbmcyV2l0aFR4QW5kUm9sbGJhY2soKTsKLQlzaW5nbGV0b24uaGVsbG8oKTsKKyAgICBzaW5nbGV0b24uY2FsbFNpbmcyV2l0aFR4QW5kUm9sbGJhY2soKTsKKyAgICBzaW5nbGV0b24uaGVsbG8oKTsKIAotCXNpbmdsZXRvbi5yZWFkKCk7Ci0Jc2luZ2xldG9uLndyaXRlKCk7Ci0Jc2luZ2xldG9uLnJlZW50cmFudFJlYWRSZWFkKCk7Ci0Jc2luZ2xldG9uLnJlZW50cmFudFdyaXRlV3JpdGUoKTsKLQlzaW5nbGV0b24ucmVlbnRyYW50V3JpdGVSZWFkKCk7CisgICAgc2luZ2xldG9uLnJlYWQoKTsKKyAgICBzaW5nbGV0b24ud3JpdGUoKTsKKyAgICBzaW5nbGV0b24ucmVlbnRyYW50UmVhZFJlYWQoKTsKKyAgICBzaW5nbGV0b24ucmVlbnRyYW50V3JpdGVXcml0ZSgpOworICAgIHNpbmdsZXRvbi5yZWVudHJhbnRXcml0ZVJlYWQoKTsKIAotICAgICAgIAlvdXQucHJpbnRsbigiPEhUTUw+IDxIRUFEPiA8VElUTEU+IEpNUyBTZXJ2bGV0IE91dHB1dCA8L1RJVExFPiA8L0hFQUQ+IDxCT0RZIEJHQ09MT1I9d2hpdGU+Iik7CisgICAgICAgICAgIG91dC5wcmludGxuKCI8SFRNTD4gPEhFQUQ+IDxUSVRMRT4gSk1TIFNlcnZsZXQgT3V0cHV0IDwvVElUTEU+IDwvSEVBRD4gPEJPRFkgQkdDT0xPUj13aGl0ZT4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8Q0VOVEVSPiA8Rk9OVCBzaXplPSsxIENPTE9SPWJsdWU+RGF0YWJhc2VTZXJ2ZWx0IDo6IEFsbCBpbmZvcm1hdGlvbiBJIGNhbiBnaXZlIDwvRk9OVD4gPC9DRU5URVI+IDxwPiAiICk7Ci0gICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IENvbnRleHQgUGF0aCA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0Q29udGV4dFBhdGgoKSArICI8YnI+IiApOyAKLSAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gU2VydmxldCBQYXRoIDogIDwvRk9OVD4gIiArIHJlcS5nZXRTZXJ2bGV0UGF0aCgpICsgIjxicj4iICk7IAotICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBQYXRoIEluZm8gOiAgPC9GT05UPiAiICsgcmVxLmdldFBhdGhJbmZvKCkgKyAiPGJyPiIgKTsgCisgICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IENvbnRleHQgUGF0aCA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0Q29udGV4dFBhdGgoKSArICI8YnI+IiApOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBTZXJ2bGV0IFBhdGggOiAgPC9GT05UPiAiICsgcmVxLmdldFNlcnZsZXRQYXRoKCkgKyAiPGJyPiIgKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gUGF0aCBJbmZvIDogIDwvRk9OVD4gIiArIHJlcS5nZXRQYXRoSW5mbygpICsgIjxicj4iICk7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9CT0RZPiA8L0hUTUw+ICIpOwogCiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvd2ViYW5kZWpiL3dhci9IZWxsb1NpbmdsZXRvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvd2ViYW5kZWpiL3dhci9IZWxsb1NpbmdsZXRvbi5qYXZhCmluZGV4IDA2ODM3MGMuLjE5ZDIyYjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3dlYmFuZGVqYi93YXIvSGVsbG9TaW5nbGV0b24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC93ZWJhbmRlamIvd2FyL0hlbGxvU2luZ2xldG9uLmphdmEKQEAgLTI2LDcgKzI2LDcgQEAKIEBBY2Nlc3NUaW1lb3V0KHZhbHVlPTEwLCB1bml0PVRpbWVVbml0LlNFQ09ORFMpCiBwdWJsaWMgY2xhc3MgSGVsbG9TaW5nbGV0b24gZXh0ZW5kcyBTdXBlcjEgIHsKIAotICAgIEBFSkIgCisgICAgQEVKQgogICAgIEhlbGxvIGhlbGxvOwogCiAgICAgQEVKQgpAQCAtMzUsMTQ2ICszNSwxNDYgQEAKICAgICBARUpCCiAgICAgcHJpdmF0ZSBIZWxsb1NpbmdsZXRvbjIgc2luZzI7CiAKLSAgICBAUmVzb3VyY2UgCisgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBzZXNDdHg7Ci0gICAgCisKICAgICBwcml2YXRlIEhlbGxvU2luZ2xldG9uIG1lOwogCi0gICAgQFBvc3RDb25zdHJ1Y3QgICAgCisgICAgQFBvc3RDb25zdHJ1Y3QKICAgICAvL0BUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwcml2YXRlIHZvaWQgaW5pdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvU2luZ2xldG9uOjppbml0KCkiKTsKLQltZSA9IHNlc0N0eC5nZXRCdXNpbmVzc09iamVjdChIZWxsb1NpbmdsZXRvbi5jbGFzcyk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJIZWxsb1NpbmdsZXRvbjo6aW5pdCgpIik7CisgICAgbWUgPSBzZXNDdHguZ2V0QnVzaW5lc3NPYmplY3QoSGVsbG9TaW5nbGV0b24uY2xhc3MpOwogCi0JVGltZXJTZXJ2aWNlIHRzID0gc2VzQ3R4LmdldFRpbWVyU2VydmljZSgpOwotCXRzLmNyZWF0ZVRpbWVyKDIwMDAsICIiKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0ZWQgdGltZXIgaW4gSGVsbG9TaW5nbGV0b24iKTsKKyAgICBUaW1lclNlcnZpY2UgdHMgPSBzZXNDdHguZ2V0VGltZXJTZXJ2aWNlKCk7CisgICAgdHMuY3JlYXRlVGltZXIoMjAwMCwgIiIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRlZCB0aW1lciBpbiBIZWxsb1NpbmdsZXRvbiIpOwogCi0Jc2xzYi5oZWxsbygpOworICAgIHNsc2IuaGVsbG8oKTsKIAotCXNsc2IuaGVsbG9Bc3luYygpOworICAgIHNsc2IuaGVsbG9Bc3luYygpOwogCi0JLy90aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJmb3JjZSBQb3N0Q29uc3RydWN0IGZhaWx1cmUiKTsKKyAgICAvL3Rocm93IG5ldyBFSkJFeGNlcHRpb24oImZvcmNlIFBvc3RDb25zdHJ1Y3QgZmFpbHVyZSIpOwogICAgIH0KIAogICAgIEBUaW1lb3V0CiAgICAgQExvY2soTG9ja1R5cGUuV1JJVEUpCiAgICAgcHVibGljIHZvaWQgdGltZW91dChUaW1lciB0KSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NpbmdsZXRvbjo6dGltZW91dCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TaW5nbGV0b246OnRpbWVvdXQiKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBjYWxsU2luZzJXaXRoVHhBbmRSb2xsYmFjaygpIHsKLQkvLyBDYWxsIFNpbmdsZXRvbiAyIHdpdGggYSB0cmFuc2FjdGlvbgotCS8vIElmIGl0J3MgaW5pdGlhbGl6ZWQgbGF6aWx5IGFzIGEgc2lkZS1lZmZlY3Qgb2YgdGhpcwotCS8vIGludm9jYXRpb24sIHRoZSBmYWN0IHRoYXQgd2Ugcm9sbGJhY2sgb3VyIHRyYW5zYWN0aW9uCi0JLy8gc2hvdWxkIG5vdCBpbXBhY3QgYW55IHRyYW5zYWN0aW9uYWwgd29yayBwZXJmb3JtZWQgaW4KLQkvLyBpdHMgQ01UL1RYX1JFUVVJUkVEIGNvbnN0cnVjdG9yLgotCXRyeSB7Ci0JICAgIC8vIEV4ZWN1dGVzIGluIGl0cyBvd24gdHJhbnNhY3Rpb24gYnV0IHRocm93cyBhIHJ1bnRpbWUgZXhjZXB0aW9uLgotCSAgICBzaW5nMi5oZWxsbzEoKTsKLQl9IGNhdGNoKEVKQkV4Y2VwdGlvbiBlKSB7Ci0JICAgIC8vIENhdGNoIHRoZSBydW50aW1lIGV4Y2VwdGlvbiBzbyBpdCBkb2Vzbid0IGFmZmVjdCB0aGUgY2xpZW50Ci0JICAgIC8vIHR4ICh5ZXQpCi0JfQorICAgIC8vIENhbGwgU2luZ2xldG9uIDIgd2l0aCBhIHRyYW5zYWN0aW9uCisgICAgLy8gSWYgaXQncyBpbml0aWFsaXplZCBsYXppbHkgYXMgYSBzaWRlLWVmZmVjdCBvZiB0aGlzCisgICAgLy8gaW52b2NhdGlvbiwgdGhlIGZhY3QgdGhhdCB3ZSByb2xsYmFjayBvdXIgdHJhbnNhY3Rpb24KKyAgICAvLyBzaG91bGQgbm90IGltcGFjdCBhbnkgdHJhbnNhY3Rpb25hbCB3b3JrIHBlcmZvcm1lZCBpbgorICAgIC8vIGl0cyBDTVQvVFhfUkVRVUlSRUQgY29uc3RydWN0b3IuCisgICAgdHJ5IHsKKyAgICAgICAgLy8gRXhlY3V0ZXMgaW4gaXRzIG93biB0cmFuc2FjdGlvbiBidXQgdGhyb3dzIGEgcnVudGltZSBleGNlcHRpb24uCisgICAgICAgIHNpbmcyLmhlbGxvMSgpOworICAgIH0gY2F0Y2goRUpCRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgLy8gQ2F0Y2ggdGhlIHJ1bnRpbWUgZXhjZXB0aW9uIHNvIGl0IGRvZXNuJ3QgYWZmZWN0IHRoZSBjbGllbnQKKyAgICAgICAgLy8gdHggKHlldCkKKyAgICB9CiAKLQkvLyBNYWtlIHN1cmUgd2UgY2FuIHN0aWxsIGNhbGwgdGhlIHNpbmdsZXRvbiBhZnRlciBhCi0JLy8gcnVudGltZSBleGNlcHRpb24KLQlzaW5nMi5oZWxsbzIoKTsKKyAgICAvLyBNYWtlIHN1cmUgd2UgY2FuIHN0aWxsIGNhbGwgdGhlIHNpbmdsZXRvbiBhZnRlciBhCisgICAgLy8gcnVudGltZSBleGNlcHRpb24KKyAgICBzaW5nMi5oZWxsbzIoKTsKIAotCXNlc0N0eC5zZXRSb2xsYmFja09ubHkoKTsKKyAgICBzZXNDdHguc2V0Um9sbGJhY2tPbmx5KCk7CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkV4aXRpbmcgSGVsbG9TaW5nbGV0b246OmNhbGxTaW5nMldpdGhUeEFuZFJvbGxiYWNrIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGl0aW5nIEhlbGxvU2luZ2xldG9uOjpjYWxsU2luZzJXaXRoVHhBbmRSb2xsYmFjayIpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHdhaXQoaW50IHNlY29uZHMpIHsKLQl0cnkgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU2luZ2xldG9uOjp3YWl0LiBTbGVlcGluZyB3aXRoIGxvY2suLi4iKTsKLQkgICAgVGhyZWFkLnNsZWVwKHNlY29uZHMgKiAxMDAwKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJBd2FrZSBpbiBIZWxsb1NpbmdsZXRvbjo6d2FpdC4gUmVsZWFzaW5nIGxvY2suLi4iKTsKLQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbihlKTsKLQl9CisgICAgdHJ5IHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NpbmdsZXRvbjo6d2FpdC4gU2xlZXBpbmcgd2l0aCBsb2NrLi4uIik7CisgICAgICAgIFRocmVhZC5zbGVlcChzZWNvbmRzICogMTAwMCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQXdha2UgaW4gSGVsbG9TaW5nbGV0b246OndhaXQuIFJlbGVhc2luZyBsb2NrLi4uIik7CisgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZSk7CisgICAgfQogICAgIH0KIAogICAgIEBBc3luY2hyb25vdXMKICAgICBwdWJsaWMgdm9pZCBhc3luY1dhaXQoaW50IHNlY29uZHMpIHsKLQltZS53YWl0KHNlY29uZHMpOworICAgIG1lLndhaXQoc2Vjb25kcyk7CiAgICAgfQogCiAgICAgQEFjY2Vzc1RpbWVvdXQodmFsdWU9NSwgdW5pdD1UaW1lVW5pdC5NSUxMSVNFQ09ORFMpCiAgICAgcHVibGljIFN0cmluZyBoZWxsbygpIHsKLQkKLQlTeXN0ZW0ub3V0LnByaW50bG4oImdldCBpbnZva2VkIGludGVyZmFjZSA9ICIgKyAKLQkJCSAgIHNlc0N0eC5nZXRJbnZva2VkQnVzaW5lc3NJbnRlcmZhY2UoKSk7CiAKLQlIZWxsb1N0YXRlZnVsIHNmdWwgPSAoSGVsbG9TdGF0ZWZ1bCkgc2VzQ3R4Lmxvb2t1cCgiaGVsbG9TdGF0ZWZ1bCIpOwotCXNmdWwuaGVsbG8oKTsKLQloZWxsby5mb28oKTsKLQlzZnVsLmdvb2RieWUoKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImdldCBpbnZva2VkIGludGVyZmFjZSA9ICIgKworICAgICAgICAgICAgICAgc2VzQ3R4LmdldEludm9rZWRCdXNpbmVzc0ludGVyZmFjZSgpKTsKIAotCXJldHVybiAiaGVsbG8sIHdvcmxkIVxuIjsKKyAgICBIZWxsb1N0YXRlZnVsIHNmdWwgPSAoSGVsbG9TdGF0ZWZ1bCkgc2VzQ3R4Lmxvb2t1cCgiaGVsbG9TdGF0ZWZ1bCIpOworICAgIHNmdWwuaGVsbG8oKTsKKyAgICBoZWxsby5mb28oKTsKKyAgICBzZnVsLmdvb2RieWUoKTsKKworICAgIHJldHVybiAiaGVsbG8sIHdvcmxkIVxuIjsKICAgICB9CiAKICAgICBATG9jayhMb2NrVHlwZS5SRUFEKQogICAgIHB1YmxpYyB2b2lkIHJlYWQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NpbmdsZXRvbjo6cmVhZCgpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NpbmdsZXRvbjo6cmVhZCgpIik7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgd3JpdGUoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NpbmdsZXRvbjo6d3JpdGUoKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TaW5nbGV0b246OndyaXRlKCkiKTsKICAgICB9CiAKICAgICBATG9jayhMb2NrVHlwZS5SRUFEKQogICAgIHB1YmxpYyB2b2lkIHJlZW50cmFudFJlYWRSZWFkKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TaW5nbGV0b246OlJlZW50cmFudFJlYWRSZWFkKCkiKTsKLQltZS5yZWFkKCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NpbmdsZXRvbjo6UmVlbnRyYW50UmVhZFJlYWQoKSIpOworICAgIG1lLnJlYWQoKTsKICAgICB9CiAKICAgICBATG9jayhMb2NrVHlwZS5SRUFEKQogICAgIHB1YmxpYyB2b2lkIHJlZW50cmFudFJlYWRXcml0ZSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU2luZ2xldG9uOjpSZWVudHJhbnRSZWFkV3JpdGUoKSIpOwotCXRyeSB7Ci0JICAgIG1lLndyaXRlKCk7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIkV4cGVjdGVkIGlsbGVnYWwgbG9vcGJhY2sgZXhjZXB0aW9uIik7Ci0JfSBjYXRjaChJbGxlZ2FsTG9vcGJhY2tFeGNlcHRpb24gaWxlKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGNhdXNlZCBpbGxlZ2FsIGxvb3BiYWNrIik7Ci0JfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TaW5nbGV0b246OlJlZW50cmFudFJlYWRXcml0ZSgpIik7CisgICAgdHJ5IHsKKyAgICAgICAgbWUud3JpdGUoKTsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiRXhwZWN0ZWQgaWxsZWdhbCBsb29wYmFjayBleGNlcHRpb24iKTsKKyAgICB9IGNhdGNoKElsbGVnYWxMb29wYmFja0V4Y2VwdGlvbiBpbGUpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgY2F1c2VkIGlsbGVnYWwgbG9vcGJhY2siKTsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgcmVlbnRyYW50V3JpdGVSZWFkKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TaW5nbGV0b246OlJlZW50cmFudFdyaXRlUmVhZCgpIik7Ci0JbWUucmVhZCgpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TaW5nbGV0b246OlJlZW50cmFudFdyaXRlUmVhZCgpIik7CisgICAgbWUucmVhZCgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHJlZW50cmFudFdyaXRlV3JpdGUoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NpbmdsZXRvbjo6UmVlbnRyYW50V3JpdGVXcml0ZSgpIik7Ci0JbWUud3JpdGUoKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU2luZ2xldG9uOjpSZWVudHJhbnRXcml0ZVdyaXRlKCkiKTsKKyAgICBtZS53cml0ZSgpOwogICAgIH0KIAogICAgIEBBY2Nlc3NUaW1lb3V0KDApCiAgICAgcHVibGljIHZvaWQgdGVzdE5vV2FpdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU2luZ2xldG9uOjp0ZXN0Tm9XYWl0Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NpbmdsZXRvbjo6dGVzdE5vV2FpdCIpOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHByaXZhdGUgdm9pZCBkZXN0cm95KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG9TaW5nbGV0b246OmRlc3Ryb3koKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG9TaW5nbGV0b246OmRlc3Ryb3koKSIpOwogICAgIH0KIAogfQogCiAKIAotIAorCiAvKgogICAgIEBMb2NrKExvY2tUeXBlLldSSVRFKQogICBjbGFzcyBTdXBlcjIgewogCi0JQExvY2soTG9ja1R5cGUuUkVBRCkKLQlwdWJsaWMgdm9pZCBzdXBlcjIoKSB7fQorICAgIEBMb2NrKExvY2tUeXBlLlJFQUQpCisgICAgcHVibGljIHZvaWQgc3VwZXIyKCkge30KIAotCXB1YmxpYyB2b2lkIHN1cGVyMjIoKSB7fQorICAgIHB1YmxpYyB2b2lkIHN1cGVyMjIoKSB7fQogCiAgICAgfQogKi8KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3dlYmFuZGVqYi93YXIvSGVsbG9TaW5nbGV0b24yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC93ZWJhbmRlamIvd2FyL0hlbGxvU2luZ2xldG9uMi5qYXZhCmluZGV4IDE3YWY5NGYuLjA1OTMxYmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3dlYmFuZGVqYi93YXIvSGVsbG9TaW5nbGV0b24yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvd2ViYW5kZWpiL3dhci9IZWxsb1NpbmdsZXRvbjIuamF2YQpAQCAtMjgsNTEgKzI4LDUxIEBACiAgICAgLy9AUmVzb3VyY2UKICAgICAvLyAgICBwcml2YXRlIFVzZXJUcmFuc2FjdGlvbiB1dDsKIAotICAgIEBSZXNvdXJjZSAKKyAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IHNlc0N0eDsKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHVibGljIHZvaWQgaW5pdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU2luZ2xldG9uMjo6aW5pdCgpIik7Ci0JVXNlclRyYW5zYWN0aW9uIHV0ID0gc2VzQ3R4LmdldFVzZXJUcmFuc2FjdGlvbigpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TaW5nbGV0b24yOjppbml0KCkiKTsKKyAgICBVc2VyVHJhbnNhY3Rpb24gdXQgPSBzZXNDdHguZ2V0VXNlclRyYW5zYWN0aW9uKCk7CiAgICAgICAgIHRyeSB7Ci0JICAgdXQuYmVnaW4oKTsKLQkgICBUaW1lclNlcnZpY2UgdHMgPSBzZXNDdHguZ2V0VGltZXJTZXJ2aWNlKCk7Ci0JICAgdHMuY3JlYXRlVGltZXIoMjAwMCwgIiIpOwotCSAgIHV0LmNvbW1pdCgpOworICAgICAgIHV0LmJlZ2luKCk7CisgICAgICAgVGltZXJTZXJ2aWNlIHRzID0gc2VzQ3R4LmdldFRpbWVyU2VydmljZSgpOworICAgICAgIHRzLmNyZWF0ZVRpbWVyKDIwMDAsICIiKTsKKyAgICAgICB1dC5jb21taXQoKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewotCSAgICB0cnkgewotCQl1dC5yb2xsYmFjaygpOwotCSAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlMSkgeyBlMS5wcmludFN0YWNrVHJhY2UoKTsgfQotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICB9IAotCS8vdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiSGVsbG9TaW5nbGV0b24yIDo6IGZvcmNlIGluaXQgZmFpbHVyZSIpOworICAgICAgICB0cnkgeworICAgICAgICB1dC5yb2xsYmFjaygpOworICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlMSkgeyBlMS5wcmludFN0YWNrVHJhY2UoKTsgfQorICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CisgICAgLy90aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJIZWxsb1NpbmdsZXRvbjIgOjogZm9yY2UgaW5pdCBmYWlsdXJlIik7CiAgICAgfQogCi0gICAgQFByZURlc3Ryb3kgCisgICAgQFByZURlc3Ryb3kKICAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TaW5nbGV0b24yOjpkZXN0cm95Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NpbmdsZXRvbjI6OmRlc3Ryb3kiKTsKICAgICB9CiAKLSAgICBAVGltZW91dCAKKyAgICBAVGltZW91dAogICAgIHB1YmxpYyB2b2lkIHRpbWVvdXQoVGltZXIgdCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TaW5nbGV0b24yOjp0aW1lb3V0Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NpbmdsZXRvbjI6OnRpbWVvdXQiKTsKICAgICB9CiAKICAgICAvL0BTY2hlZHVsZShzZWNvbmQ9IjE1IiwgbWludXRlPSIqIiwgcGVyc2lzdGVudD1mYWxzZSkKICAgICBwdWJsaWMgdm9pZCByZWZyZXNoKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TaW5nbGV0b24yOnJlZnJlc2goKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TaW5nbGV0b24yOnJlZnJlc2goKSIpOwogCiAgICAgfQogCiAgICAgLy9AVHJhbnNhY3Rpb25BdHRyaWJ1dGUoVHJhbnNhY3Rpb25BdHRyaWJ1dGVUeXBlLlJFUVVJUkVTX05FVykKICAgICBwdWJsaWMgdm9pZCBoZWxsbzEoKSB7Ci0JdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiSGVsbG9TaW5nbGV0b24yOjpoZWxsbzEgLS0gZm9yY2UgYnVzaW5lc3MgbWV0aG9kIHJ1bnRpbWUgZXhjZXB0aW9uIik7Ci0JLy9TeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU2luZ2xldG9uMjpoZWxsbzEoKSIpOworICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIkhlbGxvU2luZ2xldG9uMjo6aGVsbG8xIC0tIGZvcmNlIGJ1c2luZXNzIG1ldGhvZCBydW50aW1lIGV4Y2VwdGlvbiIpOworICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NpbmdsZXRvbjI6aGVsbG8xKCkiKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBoZWxsbzIoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NpbmdsZXRvbjI6aGVsbG8yKCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU2luZ2xldG9uMjpoZWxsbzIoKSIpOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvd2ViYW5kZWpiL3dhci9IZWxsb1N0YXRlZnVsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC93ZWJhbmRlamIvd2FyL0hlbGxvU3RhdGVmdWwuamF2YQppbmRleCBkOTA4ZDE0Li4wMWVlOWZiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC93ZWJhbmRlamIvd2FyL0hlbGxvU3RhdGVmdWwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC93ZWJhbmRlamIvd2FyL0hlbGxvU3RhdGVmdWwuamF2YQpAQCAtMzYsMjYgKzM2LDI2IEBACiAgICAgLy8gaW52YWxpZCAgICBARUpCIGphdmEudXRpbC5PYnNlcnZhYmxlIHNmMjI7CiAKIAotICAgIEBQb3N0Q29uc3RydWN0IAorICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJIZWxsb1N0YXRlZnVsOjppbml0KCkiKTsKLSAgICAgICAJbWUgPSBzZXNDdHguZ2V0QnVzaW5lc3NPYmplY3QoSGVsbG9TdGF0ZWZ1bC5jbGFzcyk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJIZWxsb1N0YXRlZnVsOjppbml0KCkiKTsKKyAgICAgICAgICAgbWUgPSBzZXNDdHguZ2V0QnVzaW5lc3NPYmplY3QoSGVsbG9TdGF0ZWZ1bC5jbGFzcyk7CiAgICAgfQogCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5SRVFVSVJFU19ORVcpCiAgICAgcHVibGljIFN0cmluZyBoZWxsbygpIHsKLQkKLQlTeXN0ZW0ub3V0LnByaW50bG4oImdldCBpbnZva2VkIGludGVyZmFjZSA9ICIgKyAKLQkJICAgICAJc2VzQ3R4LmdldEludm9rZWRCdXNpbmVzc0ludGVyZmFjZSgpICk7Ci0JCi0Jc2YyLmhlbGxvKCk7Ci0Jc2YyLmdvb2RieWUoKTsKIAotCXJldHVybiAiaGVsbG8sIHdvcmxkIVxuIjsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImdldCBpbnZva2VkIGludGVyZmFjZSA9ICIgKworICAgICAgICAgICAgICAgICBzZXNDdHguZ2V0SW52b2tlZEJ1c2luZXNzSW50ZXJmYWNlKCkgKTsKKworICAgIHNmMi5oZWxsbygpOworICAgIHNmMi5nb29kYnllKCk7CisKKyAgICByZXR1cm4gImhlbGxvLCB3b3JsZCFcbiI7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZm9vKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TdGF0ZWZ1bDo6Zm9vIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1N0YXRlZnVsOjpmb28iKTsKICAgICB9CiAKICAgICBAUmVtb3ZlCkBAIC02MywyMyArNjMsMjMgQEAKIAogICAgIEBQcmVEZXN0cm95CiAgICAgcHJpdmF0ZSB2b2lkIGRlc3Ryb3koKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJIZWxsb1N0YXRlZnVsOjpkZXN0cm95KCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvU3RhdGVmdWw6OmRlc3Ryb3koKSIpOwogICAgIH0KIAogICAgIEBBZnRlckJlZ2luCi0JcHJpdmF0ZSB2b2lkIGFmdGVyQmVnaW4oKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1N0YXRlZnVsOjphZnRlckJlZ2luKCkiKTsKKyAgICBwcml2YXRlIHZvaWQgYWZ0ZXJCZWdpbigpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU3RhdGVmdWw6OmFmdGVyQmVnaW4oKSIpOwogICAgIH0KIAogICAgIEBCZWZvcmVDb21wbGV0aW9uCi0JcHJvdGVjdGVkIHZvaWQgYmVmb3JlQ29tcGxldGlvbigpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU3RhdGVmdWw6OmJlZm9yZUNvbXBsZXRpb24oKSIpOworICAgIHByb3RlY3RlZCB2b2lkIGJlZm9yZUNvbXBsZXRpb24oKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1N0YXRlZnVsOjpiZWZvcmVDb21wbGV0aW9uKCkiKTsKICAgICB9CiAKICAgICBAQWZ0ZXJDb21wbGV0aW9uCiAgICAgdm9pZCBhZnRlckNvbXBsZXRpb24oYm9vbGVhbiBjb21taXR0ZWQpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU3RhdGVmdWw6OmFmdGVyQ29tcGxldGlvbigpLiBDb21taXR0ZWQgPSAiICsKLQkJCSAgIGNvbW1pdHRlZCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1N0YXRlZnVsOjphZnRlckNvbXBsZXRpb24oKS4gQ29tbWl0dGVkID0gIiArCisgICAgICAgICAgICAgICBjb21taXR0ZWQpOwogICAgIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC93ZWJhbmRlamIvd2FyL0hlbGxvU3RhdGVmdWwyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC93ZWJhbmRlamIvd2FyL0hlbGxvU3RhdGVmdWwyLmphdmEKaW5kZXggYmVkMjE5NC4uN2ExOGU2NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvd2ViYW5kZWpiL3dhci9IZWxsb1N0YXRlZnVsMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3dlYmFuZGVqYi93YXIvSGVsbG9TdGF0ZWZ1bDIuamF2YQpAQCAtMjMsMTQgKzIzLDE0IEBACiBATG9jYWxCZWFuCiBwdWJsaWMgY2xhc3MgSGVsbG9TdGF0ZWZ1bDIgaW1wbGVtZW50cyBqYXZhLnV0aWwuT2JzZXJ2ZXIgewogCi0gICAgQFBvc3RDb25zdHJ1Y3QgCisgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvU3RhdGVmdWwyOjppbml0KCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvU3RhdGVmdWwyOjppbml0KCkiKTsKICAgICB9CiAKICAgICBwdWJsaWMgU3RyaW5nIGhlbGxvKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TdGF0ZWZ1bDI6OmhlbGxvKCkiKTsJCi0JcmV0dXJuICJoZWxsbywgd29ybGQhXG4iOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TdGF0ZWZ1bDI6OmhlbGxvKCkiKTsKKyAgICByZXR1cm4gImhlbGxvLCB3b3JsZCFcbiI7CiAgICAgfQogCiAKQEAgLTM5LDEyICszOSwxMiBAQAogCiAgICAgQFByZURlc3Ryb3kKICAgICBwcml2YXRlIHZvaWQgZGVzdHJveSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvU3RhdGVmdWwyOjpkZXN0cm95KCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvU3RhdGVmdWwyOjpkZXN0cm95KCkiKTsKICAgICB9CiAKICAgICAvLyBub3QgcGFydCBvZiBwdWJsaWMgaW50ZXJmYWNlCiAgICAgcHVibGljIHZvaWQgdXBkYXRlKGphdmEudXRpbC5PYnNlcnZhYmxlIG8sIE9iamVjdCBhKSB7Ci0JdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigic2hvdWxkbid0IGJlIGludm9rZWQgYnkgY2xpZW50Iik7CisgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigic2hvdWxkbid0IGJlIGludm9rZWQgYnkgY2xpZW50Iik7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC93ZWJhbmRlamIvd2FyL0hlbGxvU3RhdGVsZXNzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC93ZWJhbmRlamIvd2FyL0hlbGxvU3RhdGVsZXNzLmphdmEKaW5kZXggODcxODk4MS4uNDRjZTQ5YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvd2ViYW5kZWpiL3dhci9IZWxsb1N0YXRlbGVzcy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3dlYmFuZGVqYi93YXIvSGVsbG9TdGF0ZWxlc3MuamF2YQpAQCAtMjMsMjQgKzIzLDI0IEBACiBATG9jYWxCZWFuCiBwdWJsaWMgY2xhc3MgSGVsbG9TdGF0ZWxlc3MgaW1wbGVtZW50cyBIZWxsb1JlbW90ZSB7CiAKLSAgICBAUG9zdENvbnN0cnVjdCAKKyAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG9TdGF0ZWxlc3M6OmluaXQoKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG9TdGF0ZWxlc3M6OmluaXQoKSIpOwogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgaGVsbG8oKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1N0YXRlbGVzczo6aGVsbG8oKSIpOwkKLQlyZXR1cm4gImhlbGxvLCB3b3JsZCFcbiI7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1N0YXRlbGVzczo6aGVsbG8oKSIpOworICAgIHJldHVybiAiaGVsbG8sIHdvcmxkIVxuIjsKICAgICB9CiAKICAgICBAQXN5bmNocm9ub3VzCiAgICAgcHVibGljIHZvaWQgaGVsbG9Bc3luYygpIHsKLSAgICAJU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1N0YXRlbGVzczo6aGVsbG9Bc3luYygpIik7CSAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1N0YXRlbGVzczo6aGVsbG9Bc3luYygpIik7CiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKICAgICBwcml2YXRlIHZvaWQgZGVzdHJveSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvU3RhdGVsZXNzOjpkZXN0cm95KCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvU3RhdGVsZXNzOjpkZXN0cm95KCkiKTsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3dlYmFuZGVqYi93YXIvU3VwZXIxLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvZnVsbC93ZWJhbmRlamIvd2FyL1N1cGVyMS5qYXZhCmluZGV4IDA0ZjEwYmQuLjVhYjM3OWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9mdWxsL3dlYmFuZGVqYi93YXIvU3VwZXIxLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL2Z1bGwvd2ViYW5kZWpiL3dhci9TdXBlcjEuamF2YQpAQCAtMjQsMTUgKzI0LDE1IEBACiBATG9jayhMb2NrVHlwZS5SRUFEKQogcHVibGljICAgY2xhc3MgU3VwZXIxIC8qZXh0ZW5kcyBTdXBlcjIqLyB7CiAKLQlwdWJsaWMgdm9pZCBzdXBlcjEoKSB7fQorICAgIHB1YmxpYyB2b2lkIHN1cGVyMSgpIHt9CiAKLQlATG9jayhMb2NrVHlwZS5XUklURSkKLQlwdWJsaWMgdm9pZCBzdXBlcjExKCkge30KKyAgICBATG9jayhMb2NrVHlwZS5XUklURSkKKyAgICBwdWJsaWMgdm9pZCBzdXBlcjExKCkge30KIAogICAgICAgICBAQWNjZXNzVGltZW91dCh2YWx1ZT00NDU0NCwgdW5pdD1UaW1lVW5pdC5IT1VSUykKLQlwcml2YXRlIHZvaWQgZm9vYmFyKCkge30KKyAgICBwcml2YXRlIHZvaWQgZm9vYmFyKCkge30KIAogICAgICAgICBAQWNjZXNzVGltZW91dCh2YWx1ZT00NDU0NCwgdW5pdD1UaW1lVW5pdC5IT1VSUykKLQkgICAgcHVibGljIFN0cmluZyBoZWxsbygpIHsgcmV0dXJuICIiOyB9CisgICAgICAgIHB1YmxpYyBTdHJpbmcgaGVsbG8oKSB7IHJldHVybiAiIjsgfQogCiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NlY3VyaXR5L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zZWN1cml0eS9idWlsZC54bWwKaW5kZXggZDAxYTM5MC4uZmQ2NzgzOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NlY3VyaXR5L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2VjdXJpdHkvYnVpbGQueG1sCkBAIC0zOSw5ICszOSw5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYi1lamIzMS1zZWN1cml0eSB0ZXN0cykKLQk8L2VjaG8+CisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamItZWpiMzEtc2VjdXJpdHkgdGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NlY3VyaXR5L3NpbXBsZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NlY3VyaXR5L3NpbXBsZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDM1NDQ4OGYuLjAyMWFjY2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zZWN1cml0eS9zaW1wbGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2VjdXJpdHkvc2ltcGxlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIxICsxNSwyMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMxLXNlY3VyaXR5LXNpbXBsZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gCi08cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+XHUwMDIwCis8cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InNlLmNsaWVudCIgdmFsdWU9ImNvbS5hY21lLkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCiAgICAgICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogCiAKLQkKKwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2VjdXJpdHkvc2ltcGxlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zZWN1cml0eS9zaW1wbGUvYnVpbGQueG1sCmluZGV4IDU1OGUzZDIuLmJjYzUwZWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zZWN1cml0eS9zaW1wbGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zZWN1cml0eS9zaW1wbGUvYnVpbGQueG1sCkBAIC0zNSwxMyArMzUsMTMgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KICAgICAgICAgPC9hbnRjYWxsPgotCTxqYXZhYyBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgc3JjZGlyPSJjbGllbnQiIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiBkZWJ1Zz0ib24iIGZhaWxvbmVycm9yPSJ0cnVlIj4KLQkgCisgICAgPGphdmFjIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiBzcmNkaXI9ImNsaWVudCIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIGRlYnVnPSJvbiIgZmFpbG9uZXJyb3I9InRydWUiPgorCiAgICAgICAgIDwvamF2YWM+CiAgICAgPC90YXJnZXQ+CiAKQEAgLTY5LDE1ICs2OSwxNSBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAotCQkgICB2YWx1ZT0iKiovU2luZ2xldG9uKi5jbGFzcywqKi9IZWxsbyouY2xhc3MiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCisgICAgICAgICAgIHZhbHVlPSIqKi9TaW5nbGV0b24qLmNsYXNzLCoqL0hlbGxvKi5jbGFzcyIvPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovQ2xpZW50LmNsYXNzLCoqL0Zvb01hbmFnZWRCZWFuKi5jbGFzcywqKi9IZWxsbyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTg1LDcgKzg1LDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0icnVuX2JvYiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FQUENMSUVOVH0iIGZhaWxvbmVycm9yPSJmYWxzZSI+Ci0JICAgIDxlbnYga2V5PSJBUFBDUEFUSCIgZmlsZT0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiLz4KKyAgICAgICAgPGVudiBrZXk9IkFQUENQQVRIIiBmaWxlPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIvPgogCiAgICAgICAgICAgICA8YXJnIGxpbmU9Ii1jbGllbnQKICAgICAgICAgICAgICAgICAgJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHBDbGllbnQuamFyIi8+CkBAIC0xMDAsNyArMTAwLDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0icnVuX21hcnkiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBUFBDTElFTlR9IiBmYWlsb25lcnJvcj0iZmFsc2UiPgotCSAgICA8ZW52IGtleT0iQVBQQ1BBVEgiIGZpbGU9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIi8+CisgICAgICAgIDxlbnYga2V5PSJBUFBDUEFUSCIgZmlsZT0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiLz4KIAogICAgICAgICAgICAgPGFyZyBsaW5lPSItY2xpZW50CiAgICAgICAgICAgICAgICAgICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwQ2xpZW50LmphciIvPgpAQCAtMTEyLDkgKzExMiw5IEBACiAgICAgICAgIDwvZXhlYz4KIAogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW5fc2UiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgIDxqYXZhICBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9IiR7c2UuY2xpZW50fSI+CkBAIC0xMjYsNyArMTI2LDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NlY3VyaXR5L3NpbXBsZS9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2VjdXJpdHkvc2ltcGxlL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA5OTMyMGMwLi41NzQ1YWI4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2VjdXJpdHkvc2ltcGxlL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2VjdXJpdHkvc2ltcGxlL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzAsNyArMzAsNyBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgYXBwTmFtZTsKQEAgLTU0LDE5ICs1NCwxOSBAQAogICAgIHN0YXRpYyBTdHJpbmcgYXBwTmFtZUw7CiAKIAotICAgIEBFSkIobG9va3VwPSJqYXZhOmFwcC9lbnYvZm9yYXBwY2xpZW50IikgCisgICAgQEVKQihsb29rdXA9ImphdmE6YXBwL2Vudi9mb3JhcHBjbGllbnQiKQogICAgIHN0YXRpYyBIZWxsbyBoZWxsbzM7CiAKLSAgICBARUpCKG1hcHBlZE5hbWU9ImphdmE6YXBwL2VqYi1lamIzMS1zZWN1cml0eS1zaW1wbGUtZWpiL1NpbmdsZXRvbkJlYW4hY29tLmFjbWUuSGVsbG8iKSAKKyAgICBARUpCKG1hcHBlZE5hbWU9ImphdmE6YXBwL2VqYi1lamIzMS1zZWN1cml0eS1zaW1wbGUtZWpiL1NpbmdsZXRvbkJlYW4hY29tLmFjbWUuSGVsbG8iKQogICAgIHN0YXRpYyBIZWxsbyBoZWxsbzQ7CiAKLSAgICBARUpCKG5hbWU9ImphdmE6YXBwL2Vudi9hcHBjbGllbnRkZWZpbmVkZWpicmVmMSIpIAorICAgIEBFSkIobmFtZT0iamF2YTphcHAvZW52L2FwcGNsaWVudGRlZmluZWRlamJyZWYxIikKICAgICBzdGF0aWMgSGVsbG8gaGVsbG81OwogCi0gICAgQEVKQihuYW1lPSJqYXZhOmFwcC9hcHBjbGllbnRkZWZpbmVkZWpicmVmMiIpIAorICAgIEBFSkIobmFtZT0iamF2YTphcHAvYXBwY2xpZW50ZGVmaW5lZGVqYnJlZjIiKQogICAgIHN0YXRpYyBIZWxsbyBoZWxsbzY7CiAKLSAgICBARUpCKG5hbWU9ImphdmE6Z2xvYmFsL2FwcGNsaWVudGRlZmluZWRlamJyZWYzIikgCisgICAgQEVKQihuYW1lPSJqYXZhOmdsb2JhbC9hcHBjbGllbnRkZWZpbmVkZWpicmVmMyIpCiAgICAgc3RhdGljIEhlbGxvIGhlbGxvNzsKIAogICAgIEBSZXNvdXJjZShuYW1lPSJqYXZhOmFwcC9lbnYvZW52ZW50cnkxIikKQEAgLTg1LDU0ICs4NSw1NCBAQAogCiAgQFBvc3RDb25zdHJ1Y3QKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgaW5pdCgpIHsKLQl0cnkgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIGluaXQoKSIpOworICAgIHRyeSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gaW5pdCgpIik7CiAKLQkgICAgYXBwQ2xpZW50ID0gdHJ1ZTsKKyAgICAgICAgYXBwQ2xpZW50ID0gdHJ1ZTsKIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFwcE5hbWUgPSAiICsgYXBwTmFtZUwpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk1vZHVsZU5hbWUgPSAiICsgbW9kdWxlTmFtZSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQXBwTmFtZSA9ICIgKyBhcHBOYW1lTCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTW9kdWxlTmFtZSA9ICIgKyBtb2R1bGVOYW1lKTsKIAotCSAgICBmb29NYi5oZWxsbygpOwotCSAgICBmb29NYjIuaGVsbG8oKTsKLQkgICAgZm9vTWIzLmhlbGxvKCk7CisgICAgICAgIGZvb01iLmhlbGxvKCk7CisgICAgICAgIGZvb01iMi5oZWxsbygpOworICAgICAgICBmb29NYjMuaGVsbG8oKTsKIAotCSAgICBJbnRlZ2VyIGVudkVudHJ5ID0gKEludGVnZXIpCi0JCW5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTphcHAvZW52L3ZhbHVlMSIpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oImphdmE6YXBwL2Vudi92YWx1ZTEgPSAiICsgZW52RW50cnkpOwotCQotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oImphdmE6YXBwL2Vudi9lbnZlbnRyeTEgPSAiICsgZW52RW50cnkxKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJqYXZhOmdsb2JhbC9lbnZlbnRyeTIgPSAiICsgZW52RW50cnkyKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJqYXZhOmdsb2JhbC9lbnZlbnRyeTMgPSAiICsgZW52RW50cnkzKTsKLQkgICAgaWYoIChlbnZFbnRyeTMgPT0gbnVsbCkgfHwgZW52RW50cnkzLmludFZhbHVlKCkgIT0gMTgzMzggKSB7Ci0JCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJpbnZhbGlkIGVudmVudHJ5MyB2YWx1ZSIpOwotCSAgICB9Ci0JICAgIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oImphdmE6Z2xvYmFsL2VudmVudHJ5NCA9ICIgKyBlbnZFbnRyeTQpOwotCSAgICBpZiggKGVudkVudHJ5NCA9PSBudWxsKSB8fCBlbnZFbnRyeTQuaW50VmFsdWUoKSAhPSAxODMzOCApIHsKLQkJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oImludmFsaWQgZW52ZW50cnk0IHZhbHVlIik7Ci0JICAgIH0KKyAgICAgICAgSW50ZWdlciBlbnZFbnRyeSA9IChJbnRlZ2VyKQorICAgICAgICBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6YXBwL2Vudi92YWx1ZTEiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJqYXZhOmFwcC9lbnYvdmFsdWUxID0gIiArIGVudkVudHJ5KTsKIAotCSAgICBGb29NYW5hZ2VkQmVhbiBmbWJsID0gKEZvb01hbmFnZWRCZWFuKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6bW9kdWxlL0Zvb01hbmFnZWRCZWFuIik7Ci0JICAgIGZtYmwuaGVsbG8oKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJqYXZhOmFwcC9lbnYvZW52ZW50cnkxID0gIiArIGVudkVudHJ5MSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiamF2YTpnbG9iYWwvZW52ZW50cnkyID0gIiArIGVudkVudHJ5Mik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiamF2YTpnbG9iYWwvZW52ZW50cnkzID0gIiArIGVudkVudHJ5Myk7CisgICAgICAgIGlmKCAoZW52RW50cnkzID09IG51bGwpIHx8IGVudkVudHJ5My5pbnRWYWx1ZSgpICE9IDE4MzM4ICkgeworICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiaW52YWxpZCBlbnZlbnRyeTMgdmFsdWUiKTsKKyAgICAgICAgfQogCi0JICAgICBGb29NYW5hZ2VkQmVhbiBmbWJsMiA9IChGb29NYW5hZ2VkQmVhbikgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmFwcC9lamItZWpiMzEtc2VjdXJpdHktc2ltcGxlLWNsaWVudC9Gb29NYW5hZ2VkQmVhbiIpOwotCSAgICBmbWJsMi5oZWxsbygpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImphdmE6Z2xvYmFsL2VudmVudHJ5NCA9ICIgKyBlbnZFbnRyeTQpOworICAgICAgICBpZiggKGVudkVudHJ5NCA9PSBudWxsKSB8fCBlbnZFbnRyeTQuaW50VmFsdWUoKSAhPSAxODMzOCApIHsKKyAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oImludmFsaWQgZW52ZW50cnk0IHZhbHVlIik7CisgICAgICAgIH0KIAotCX0gY2F0Y2goTmFtaW5nRXhjZXB0aW9uIGUpIHsKLQkgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7Ci0JfQorICAgICAgICBGb29NYW5hZ2VkQmVhbiBmbWJsID0gKEZvb01hbmFnZWRCZWFuKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6bW9kdWxlL0Zvb01hbmFnZWRCZWFuIik7CisgICAgICAgIGZtYmwuaGVsbG8oKTsKKworICAgICAgICAgRm9vTWFuYWdlZEJlYW4gZm1ibDIgPSAoRm9vTWFuYWdlZEJlYW4pIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTphcHAvZWpiLWVqYjMxLXNlY3VyaXR5LXNpbXBsZS1jbGllbnQvRm9vTWFuYWdlZEJlYW4iKTsKKyAgICAgICAgZm1ibDIuaGVsbG8oKTsKKworICAgIH0gY2F0Y2goTmFtaW5nRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKICAgICAgICAgZm9yIChTdHJpbmcgYXJnIDogYXJncykgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBcmc6ICIgKyBhcmcpOwogICAgICAgICB9Ci0JYXBwTmFtZSA9IGFyZ3NbMF07Ci0JcHJpbmNpcGFsID0gYXJnc1sxXTsKLQlzdGF0LmFkZERlc2NyaXB0aW9uKGFwcE5hbWUpOwotCUNsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOyAgICAgICAKLSAgICAgICAgY2xpZW50LmRvVGVzdCgpOwkKKyAgICBhcHBOYW1lID0gYXJnc1swXTsKKyAgICBwcmluY2lwYWwgPSBhcmdzWzFdOworICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oYXBwTmFtZSk7CisgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CisgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoYXBwTmFtZSArICJJRCIpOwogICAgIH0KIApAQCAtMTQwLDE1NiArMTQwLDE1NiBAQAogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogCi0JU3lzdGVtLm91dC5wcmludGxuKCJFeGVjdXRpbmcgdGVzdCB3aXRoIHVzZXIgcHJpbmNpcGFsICIgKyBwcmluY2lwYWwpOwotCWJvb2xlYW4gaGF2ZVBlcm1pc3Npb24gPSBwcmluY2lwYWwuZXF1YWxzKCJib2IiKTsKLQlpZiggaGF2ZVBlcm1pc3Npb24gKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhwZWN0aW5nIHBlcm1pc3Npb24gdG8gYWNjZXNzIHByb3RlY3RlZCBtZXRob2RzIik7Ci0JfSBlbHNlIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJOT1QgZXhwZWN0aW5nIHBlcm1pc3Npb24gdG8gYWNjZXNzIHByb3RlY3RlZCBtZXRob2RzIik7Ci0JfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhlY3V0aW5nIHRlc3Qgd2l0aCB1c2VyIHByaW5jaXBhbCAiICsgcHJpbmNpcGFsKTsKKyAgICBib29sZWFuIGhhdmVQZXJtaXNzaW9uID0gcHJpbmNpcGFsLmVxdWFscygiYm9iIik7CisgICAgaWYoIGhhdmVQZXJtaXNzaW9uICkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4cGVjdGluZyBwZXJtaXNzaW9uIHRvIGFjY2VzcyBwcm90ZWN0ZWQgbWV0aG9kcyIpOworICAgIH0gZWxzZSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTk9UIGV4cGVjdGluZyBwZXJtaXNzaW9uIHRvIGFjY2VzcyBwcm90ZWN0ZWQgbWV0aG9kcyIpOworICAgIH0KIAogCi0JU3RyaW5nIHJlc3VsdHM7CisgICAgU3RyaW5nIHJlc3VsdHM7CiAKLQl0cnkgewotCSAgICAKLQkgICAgLyoqCi0JICAgIGlmKCAhYXBwQ2xpZW50ICkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNFIGNsaWVudC4gIFVzaW5nIHByb2dyYW1tYXRpYyBsb2dpbiIpOwotCQlQcm9ncmFtbWF0aWNMb2dpbiBwbSA9IG5ldyBQcm9ncmFtbWF0aWNMb2dpbigpOwotCQlwbS5sb2dpbigibWFyeSIsICJtb2IiLCAiZGVmYXVsdCIsIHRydWUpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlByb2dyYW1tYXRpYyBsb2dpbiBzdWNjZWVkZWQiKTsKLQkJCi0JICAgIH0KLQkgICAgKi8KKyAgICB0cnkgewogCi0JICAgIC8vCSAgICBQcm9ncmFtbWF0aWNMb2dpbiBsb2dpbiA9IG5ldyBjb20uc3VuLmFwcHNlcnYuc2VjdXJpdHkuYXBpLlByb2dyYW1tYXRpY0xvZ2luKCk7Ci0JICAgIAotCSAgICBpZiggaGVsbG8gPT0gbnVsbCApIHsKLQkJaGVsbG8gPSAoSGVsbG8pIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpnbG9iYWwvZWpiLWVqYjMxLXNlY3VyaXR5LXNpbXBsZUFwcC9lamItZWpiMzEtc2VjdXJpdHktc2ltcGxlLWVqYi9TaW5nbGV0b25CZWFuIWNvbS5hY21lLkhlbGxvIik7Ci0JICAgIH0gZWxzZSB7Ci0JCS8vIEluIGFuIGFwcGNsaWVudC4gIAotCQlIZWxsbyBoZWxsbzIgPSAoSGVsbG8pIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTphcHAvZW52L2ZvcmFwcGNsaWVudCIpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oImphdmE6YXBwL2Vudi9mb3JhcHBjbGllbnQgbG9va3VwID0gIiArIGhlbGxvMik7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiaGVsbG8zID0gIiArIGhlbGxvMyk7CisgICAgICAgIC8qKgorICAgICAgICBpZiggIWFwcENsaWVudCApIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTRSBjbGllbnQuICBVc2luZyBwcm9ncmFtbWF0aWMgbG9naW4iKTsKKyAgICAgICAgUHJvZ3JhbW1hdGljTG9naW4gcG0gPSBuZXcgUHJvZ3JhbW1hdGljTG9naW4oKTsKKyAgICAgICAgcG0ubG9naW4oIm1hcnkiLCAibW9iIiwgImRlZmF1bHQiLCB0cnVlKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQcm9ncmFtbWF0aWMgbG9naW4gc3VjY2VlZGVkIik7CiAKLQkJSGVsbG8gaGVsbG81ID0gKEhlbGxvKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6YXBwL2VqYi1lamIzMS1zZWN1cml0eS1zaW1wbGUtZWpiL1NpbmdsZXRvbkJlYW4hY29tLmFjbWUuSGVsbG8iKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJoZWxsbzQgPSAiICsgaGVsbG80KTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJoZWxsbzUgPSAiICsgaGVsbG81KTsKLQkJU3RyaW5nIGVudiA9IChTdHJpbmcpIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTphcHAvZW52ZW50cnlmb3JhcHBjbGllbnQiKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJqYXZhOmFwcCBlbnYgZW50cnkgPSAiICsgZW52KTsKLQkgICAgfQorICAgICAgICB9CisgICAgICAgICovCiAKLQkgICAgYm9vbGVhbiBwYXNzOworICAgICAgICAvLyAgICAgICAgUHJvZ3JhbW1hdGljTG9naW4gbG9naW4gPSBuZXcgY29tLnN1bi5hcHBzZXJ2LnNlY3VyaXR5LmFwaS5Qcm9ncmFtbWF0aWNMb2dpbigpOwogCi0JICAgIHRyeSB7Ci0JCWhlbGxvLnByb3RlY3RlZFN5bmNSZW1vdGUoKTsKLQkJcGFzcyA9IGhhdmVQZXJtaXNzaW9uOyAKLQkgICAgfSBjYXRjaChFSkJBY2Nlc3NFeGNlcHRpb24gZSkgewotCQlwYXNzID0gIWhhdmVQZXJtaXNzaW9uOwotCSAgICB9Ci0JICAgIAorICAgICAgICBpZiggaGVsbG8gPT0gbnVsbCApIHsKKyAgICAgICAgaGVsbG8gPSAoSGVsbG8pIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpnbG9iYWwvZWpiLWVqYjMxLXNlY3VyaXR5LXNpbXBsZUFwcC9lamItZWpiMzEtc2VjdXJpdHktc2ltcGxlLWVqYi9TaW5nbGV0b25CZWFuIWNvbS5hY21lLkhlbGxvIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEluIGFuIGFwcGNsaWVudC4KKyAgICAgICAgSGVsbG8gaGVsbG8yID0gKEhlbGxvKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6YXBwL2Vudi9mb3JhcHBjbGllbnQiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJqYXZhOmFwcC9lbnYvZm9yYXBwY2xpZW50IGxvb2t1cCA9ICIgKyBoZWxsbzIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImhlbGxvMyA9ICIgKyBoZWxsbzMpOwogCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigicGFzcyA9ICIgKyBwYXNzKTsKKyAgICAgICAgSGVsbG8gaGVsbG81ID0gKEhlbGxvKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6YXBwL2VqYi1lamIzMS1zZWN1cml0eS1zaW1wbGUtZWpiL1NpbmdsZXRvbkJlYW4hY29tLmFjbWUuSGVsbG8iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJoZWxsbzQgPSAiICsgaGVsbG80KTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJoZWxsbzUgPSAiICsgaGVsbG81KTsKKyAgICAgICAgU3RyaW5nIGVudiA9IChTdHJpbmcpIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTphcHAvZW52ZW50cnlmb3JhcHBjbGllbnQiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJqYXZhOmFwcCBlbnYgZW50cnkgPSAiICsgZW52KTsKKyAgICAgICAgfQogCi0JICAgIHRyeSB7Ci0JCWhlbGxvLnVucHJvdGVjdGVkU3luY1JlbW90ZSgpOwotCQlwYXNzID0gdHJ1ZTsKLQkgICAgfSBjYXRjaChFSkJBY2Nlc3NFeGNlcHRpb24gZSkgewotCQlwYXNzID0gZmFsc2U7Ci0JICAgIH0KKyAgICAgICAgYm9vbGVhbiBwYXNzOworCisgICAgICAgIHRyeSB7CisgICAgICAgIGhlbGxvLnByb3RlY3RlZFN5bmNSZW1vdGUoKTsKKyAgICAgICAgcGFzcyA9IGhhdmVQZXJtaXNzaW9uOworICAgICAgICB9IGNhdGNoKEVKQkFjY2Vzc0V4Y2VwdGlvbiBlKSB7CisgICAgICAgIHBhc3MgPSAhaGF2ZVBlcm1pc3Npb247CisgICAgICAgIH0KIAogCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigicGFzcyA9ICIgKyBwYXNzKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJwYXNzID0gIiArIHBhc3MpOwogCi0JICAgIHRyeSB7Ci0JCUZ1dHVyZTxPYmplY3Q+IGZ1dHVyZSA9IGhlbGxvLnByb3RlY3RlZEFzeW5jUmVtb3RlKCk7Ci0JCU9iamVjdCBvYmogPSBmdXR1cmUuZ2V0KCk7Ci0JCXBhc3MgPSBoYXZlUGVybWlzc2lvbjsKLQkJCi0JICAgIH0gY2F0Y2goRXhlY3V0aW9uRXhjZXB0aW9uIGVlKSB7Ci0JCWlmKCBlZS5nZXRDYXVzZSgpIGluc3RhbmNlb2YgRUpCQWNjZXNzRXhjZXB0aW9uICkgewotCQkgICAgcGFzcyA9ICFoYXZlUGVybWlzc2lvbjsKLQkJfSBlbHNlIHsKLQkJICAgIHBhc3MgPSBmYWxzZTsKLQkJfQotCSAgICB9CisgICAgICAgIHRyeSB7CisgICAgICAgIGhlbGxvLnVucHJvdGVjdGVkU3luY1JlbW90ZSgpOworICAgICAgICBwYXNzID0gdHJ1ZTsKKyAgICAgICAgfSBjYXRjaChFSkJBY2Nlc3NFeGNlcHRpb24gZSkgeworICAgICAgICBwYXNzID0gZmFsc2U7CisgICAgICAgIH0KIAogCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigicGFzcyA9ICIgKyBwYXNzKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJwYXNzID0gIiArIHBhc3MpOworCisgICAgICAgIHRyeSB7CisgICAgICAgIEZ1dHVyZTxPYmplY3Q+IGZ1dHVyZSA9IGhlbGxvLnByb3RlY3RlZEFzeW5jUmVtb3RlKCk7CisgICAgICAgIE9iamVjdCBvYmogPSBmdXR1cmUuZ2V0KCk7CisgICAgICAgIHBhc3MgPSBoYXZlUGVybWlzc2lvbjsKKworICAgICAgICB9IGNhdGNoKEV4ZWN1dGlvbkV4Y2VwdGlvbiBlZSkgeworICAgICAgICBpZiggZWUuZ2V0Q2F1c2UoKSBpbnN0YW5jZW9mIEVKQkFjY2Vzc0V4Y2VwdGlvbiApIHsKKyAgICAgICAgICAgIHBhc3MgPSAhaGF2ZVBlcm1pc3Npb247CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwYXNzID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgfQogCiAKLQkgICAgdHJ5IHsKLQkJRnV0dXJlPE9iamVjdD4gZnV0dXJlID0gaGVsbG8udW5wcm90ZWN0ZWRBc3luY1JlbW90ZSgpOwotCQlPYmplY3Qgb2JqID0gZnV0dXJlLmdldCgpOwotCQlwYXNzID0gdHJ1ZTsKLQkgICAgfSBjYXRjaChFeGVjdXRpb25FeGNlcHRpb24gZWUpIHsKLQkJcGFzcyA9IGZhbHNlOwotCSAgICB9CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigicGFzcyA9ICIgKyBwYXNzKTsKKworCisgICAgICAgIHRyeSB7CisgICAgICAgIEZ1dHVyZTxPYmplY3Q+IGZ1dHVyZSA9IGhlbGxvLnVucHJvdGVjdGVkQXN5bmNSZW1vdGUoKTsKKyAgICAgICAgT2JqZWN0IG9iaiA9IGZ1dHVyZS5nZXQoKTsKKyAgICAgICAgcGFzcyA9IHRydWU7CisgICAgICAgIH0gY2F0Y2goRXhlY3V0aW9uRXhjZXB0aW9uIGVlKSB7CisgICAgICAgIHBhc3MgPSBmYWxzZTsKKyAgICAgICAgfQogCiAKIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oInBhc3MgPSAiICsgcGFzcyk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigicGFzcyA9ICIgKyBwYXNzKTsKIAogCi0JICAgIHRyeSB7Ci0JCWhlbGxvLnRlc3RQcm90ZWN0ZWRTeW5jTG9jYWwoKTsKLQkJcGFzcyA9IGhhdmVQZXJtaXNzaW9uOwotCSAgICB9ICBjYXRjaChFSkJBY2Nlc3NFeGNlcHRpb24gZSkgewotCQlwYXNzID0gIWhhdmVQZXJtaXNzaW9uOwotCSAgICB9CisgICAgICAgIHRyeSB7CisgICAgICAgIGhlbGxvLnRlc3RQcm90ZWN0ZWRTeW5jTG9jYWwoKTsKKyAgICAgICAgcGFzcyA9IGhhdmVQZXJtaXNzaW9uOworICAgICAgICB9ICBjYXRjaChFSkJBY2Nlc3NFeGNlcHRpb24gZSkgeworICAgICAgICBwYXNzID0gIWhhdmVQZXJtaXNzaW9uOworICAgICAgICB9CiAKIAogCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigicGFzcyA9ICIgKyBwYXNzKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJwYXNzID0gIiArIHBhc3MpOwogCiAKLQkgICAgdHJ5IHsKLQkJaGVsbG8udGVzdFVucHJvdGVjdGVkU3luY0xvY2FsKCk7Ci0JCXBhc3MgPSB0cnVlOwotCSAgICB9ICBjYXRjaChFeGNlcHRpb24gZSkgewotCQlwYXNzID0gZmFsc2U7Ci0JICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgaGVsbG8udGVzdFVucHJvdGVjdGVkU3luY0xvY2FsKCk7CisgICAgICAgIHBhc3MgPSB0cnVlOworICAgICAgICB9ICBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICBwYXNzID0gZmFsc2U7CisgICAgICAgIH0KIAogCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigicGFzcyA9ICIgKyBwYXNzKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJwYXNzID0gIiArIHBhc3MpOwogCiAKLQkgICAgdHJ5IHsKLQkJaGVsbG8udGVzdFByb3RlY3RlZEFzeW5jTG9jYWwoKTsKLQkJcGFzcyA9IGhhdmVQZXJtaXNzaW9uOwotCSAgICB9ICBjYXRjaChFSkJBY2Nlc3NFeGNlcHRpb24gZSkgewotCQlwYXNzID0gIWhhdmVQZXJtaXNzaW9uOwotCSAgICB9CisgICAgICAgIHRyeSB7CisgICAgICAgIGhlbGxvLnRlc3RQcm90ZWN0ZWRBc3luY0xvY2FsKCk7CisgICAgICAgIHBhc3MgPSBoYXZlUGVybWlzc2lvbjsKKyAgICAgICAgfSAgY2F0Y2goRUpCQWNjZXNzRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgcGFzcyA9ICFoYXZlUGVybWlzc2lvbjsKKyAgICAgICAgfQogCiAKIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oInBhc3MgPSAiICsgcGFzcyk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigicGFzcyA9ICIgKyBwYXNzKTsKIAotCSAgICB0cnkgewotCQloZWxsby50ZXN0VW5wcm90ZWN0ZWRBc3luY0xvY2FsKCk7Ci0JCXBhc3MgPSB0cnVlOwotCSAgICB9ICBjYXRjaChFeGNlcHRpb24gZSkgewotCQlwYXNzID0gZmFsc2U7Ci0JICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgaGVsbG8udGVzdFVucHJvdGVjdGVkQXN5bmNMb2NhbCgpOworICAgICAgICBwYXNzID0gdHJ1ZTsKKyAgICAgICAgfSAgY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgcGFzcyA9IGZhbHNlOworICAgICAgICB9CiAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJwYXNzID0gIiArIHBhc3MpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInBhc3MgPSAiICsgcGFzcyk7CiAKLQkgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LlBBU1MpOworICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuUEFTUyk7CiAKLQl9IGNhdGNoKE5hbWluZ0V4Y2VwdGlvbiBuZSkgewotCSAgICAKLQkgICAgaWYoIGFwcENsaWVudCApIHsKLQkJc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LkZBSUwpOwotCSAgICB9IGVsc2UgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBleHBlY3RlZCBzZWN1cml0eSBmYWlsdXJlIGR1cmluZyBsb29rdXAgZm9yIG5vbi1hdXRoZW50aWNhdGVkIFNFIGNsaWVudCIpOwotCQlzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuUEFTUyk7Ci0JICAgIH0KKyAgICB9IGNhdGNoKE5hbWluZ0V4Y2VwdGlvbiBuZSkgewogCi0JfSBjYXRjaChFeGNlcHRpb24gZSkgewotCSAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuRkFJTCk7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQorICAgICAgICBpZiggYXBwQ2xpZW50ICkgeworICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuRkFJTCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IGV4cGVjdGVkIHNlY3VyaXR5IGZhaWx1cmUgZHVyaW5nIGxvb2t1cCBmb3Igbm9uLWF1dGhlbnRpY2F0ZWQgU0UgY2xpZW50Iik7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5QQVNTKTsKKyAgICAgICAgfQorCisgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuRkFJTCk7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQogICAgIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2VjdXJpdHkvc2ltcGxlL2NsaWVudC9Gb29NYW5hZ2VkQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NlY3VyaXR5L3NpbXBsZS9jbGllbnQvRm9vTWFuYWdlZEJlYW4uamF2YQppbmRleCAyY2M3ZTY2Li5hZWUyY2VmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2VjdXJpdHkvc2ltcGxlL2NsaWVudC9Gb29NYW5hZ2VkQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zZWN1cml0eS9zaW1wbGUvY2xpZW50L0Zvb01hbmFnZWRCZWFuLmphdmEKQEAgLTMxLDIxICszMSwyMSBAQAogICBAUmVzb3VyY2UKICAgcHJpdmF0ZSBGb29NYW5hZ2VkQmVhbjIgZm1iMjsKIAotICBAUG9zdENvbnN0cnVjdCAKKyAgQFBvc3RDb25zdHJ1Y3QKICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7CiAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29NYW5hZ2VkQmVhbjo6aW5pdCgpIik7CiAgICAgU3lzdGVtLm91dC5wcmludGxuKCJhcHBOYW1lID0gIiArIGFwcE5hbWUpOwogICAgIGZtYjIuaGVsbG8oKTsKIAotICB9IAorICB9CiAKICAgICBwdWJsaWMgdm9pZCBoZWxsbygpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb01hbmFnZWRCZWFuOjpoZWxsbygpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29NYW5hZ2VkQmVhbjo6aGVsbG8oKSIpOwogICAgIH0KLSAgICAKKwogICAgIEBQcmVEZXN0cm95Ci0JcHJpdmF0ZSB2b2lkIGRlc3Ryb3koKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29NYW5hZ2VkQmVhbjo6ZGVzdHJveSgpIik7CisgICAgcHJpdmF0ZSB2b2lkIGRlc3Ryb3koKSB7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29NYW5hZ2VkQmVhbjo6ZGVzdHJveSgpIik7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2VjdXJpdHkvc2ltcGxlL2NsaWVudC9Gb29NYW5hZ2VkQmVhbjIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zZWN1cml0eS9zaW1wbGUvY2xpZW50L0Zvb01hbmFnZWRCZWFuMi5qYXZhCmluZGV4IDJiYzdmM2IuLjg0ODExMjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zZWN1cml0eS9zaW1wbGUvY2xpZW50L0Zvb01hbmFnZWRCZWFuMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zZWN1cml0eS9zaW1wbGUvY2xpZW50L0Zvb01hbmFnZWRCZWFuMi5qYXZhCkBAIC0yOCwyNiArMjgsMjYgQEAKICAgU3RyaW5nIGFwcE5hbWU7CiAKICAgICBAUmVzb3VyY2UobmFtZT0iamF2YTptb2R1bGUvZW52L2ZtYkFwcE5hbWUiLCBsb29rdXA9ImphdmE6YXBwL0FwcE5hbWUiKQotCVN0cmluZyBhcHBOYW1lMjsKKyAgICBTdHJpbmcgYXBwTmFtZTI7CiAKICAgICBAUmVzb3VyY2UobG9va3VwPSJqYXZhOm1vZHVsZS9lbnYvZm1iQXBwTmFtZSIpCi0JU3RyaW5nIGFwcE5hbWUzOworICAgIFN0cmluZyBhcHBOYW1lMzsKIAotICBAUG9zdENvbnN0cnVjdCAKKyAgQFBvc3RDb25zdHJ1Y3QKICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7CiAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29NYW5hZ2VkQmVhbjI6OmluaXQoKSIpOwogICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYXBwTmFtZSA9ICIgKyBhcHBOYW1lKTsKICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImFwcE5hbWUyID0gIiArIGFwcE5hbWUyKTsKICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImFwcE5hbWUzID0gIiArIGFwcE5hbWUzKTsKLSAgfSAKKyAgfQogCiAgICAgcHVibGljIHZvaWQgaGVsbG8oKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29NYW5hZ2VkQmVhbjI6OmhlbGxvKCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb01hbmFnZWRCZWFuMjo6aGVsbG8oKSIpOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95Ci0JcHJpdmF0ZSB2b2lkIGRlc3Ryb3koKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29NYW5hZ2VkQmVhbjI6OmRlc3Ryb3koKSIpOworICAgIHByaXZhdGUgdm9pZCBkZXN0cm95KCkgeworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vTWFuYWdlZEJlYW4yOjpkZXN0cm95KCkiKTsKICAgICB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NlY3VyaXR5L3NpbXBsZS9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2VjdXJpdHkvc2ltcGxlL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbAppbmRleCA4OWJjZWUxLi45YjdlYjRlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2VjdXJpdHkvc2ltcGxlL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2VjdXJpdHkvc2ltcGxlL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbApAQCAtMzEsNyArMzEsNyBAQAogICAgPGVudi1lbnRyeT4KICAgICAgICAgIDxlbnYtZW50cnktbmFtZT5lbnZFbnRyeTM8L2Vudi1lbnRyeS1uYW1lPgogICAgICAgICAgPGVudi1lbnRyeS10eXBlPmphdmEubGFuZy5JbnRlZ2VyPC9lbnYtZW50cnktdHlwZT4KLQkgPGxvb2t1cC1uYW1lPmphdmE6YXBwL2Vudi92YWx1ZTE8L2xvb2t1cC1uYW1lPgorICAgICA8bG9va3VwLW5hbWU+amF2YTphcHAvZW52L3ZhbHVlMTwvbG9va3VwLW5hbWU+CiAgICAgICAgPC9lbnYtZW50cnk+CiAKIDwvYXBwbGljYXRpb24tY2xpZW50PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NlY3VyaXR5L3NpbXBsZS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NlY3VyaXR5L3NpbXBsZS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IDgwNzlmYmQuLjRiNGZiZDcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zZWN1cml0eS9zaW1wbGUvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2VjdXJpdHkvc2ltcGxlL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTIzLDcgKzIzLDcgQEAKICAgPGVudGVycHJpc2UtYmVhbnM+CiAgICAgICA8c2Vzc2lvbj4KICAgICAgICAgPGVqYi1uYW1lPlNpbmdsZXRvbkJlYW48L2VqYi1uYW1lPgotICAgICAgCisKICAgICAgICAgPGVudi1lbnRyeT4KICAgICAgICAgIDxlbnYtZW50cnktbmFtZT5qYXZhOmFwcC9lbnZlbnRyeWZvcmFwcGNsaWVudDwvZW52LWVudHJ5LW5hbWU+CiAgICAgICAgICA8ZW52LWVudHJ5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvZW52LWVudHJ5LXR5cGU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2VjdXJpdHkvc2ltcGxlL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NlY3VyaXR5L3NpbXBsZS9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAppbmRleCAxZTk1OGFiLi5lYzJkZjUxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2VjdXJpdHkvc2ltcGxlL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zZWN1cml0eS9zaW1wbGUvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKQEAgLTIxLDEwICsyMSwxMCBAQAogPHN1bi1lamItamFyPgogICAgIDxzZWN1cml0eS1yb2xlLW1hcHBpbmc+CiAgICAgICA8cm9sZS1uYW1lPmZvbzwvcm9sZS1uYW1lPgotICAgICAgPHByaW5jaXBhbC1uYW1lPmJvYjwvcHJpbmNpcGFsLW5hbWU+ICAKKyAgICAgIDxwcmluY2lwYWwtbmFtZT5ib2I8L3ByaW5jaXBhbC1uYW1lPgogICAgIDwvc2VjdXJpdHktcm9sZS1tYXBwaW5nPgogICAgIDxzZWN1cml0eS1yb2xlLW1hcHBpbmc+CiAgICAgICA8cm9sZS1uYW1lPmJhcjwvcm9sZS1uYW1lPgotICAgICAgPHByaW5jaXBhbC1uYW1lPm1hcnk8L3ByaW5jaXBhbC1uYW1lPiAgCisgICAgICA8cHJpbmNpcGFsLW5hbWU+bWFyeTwvcHJpbmNpcGFsLW5hbWU+CiAgICAgPC9zZWN1cml0eS1yb2xlLW1hcHBpbmc+CiA8L3N1bi1lamItamFyPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NlY3VyaXR5L3NpbXBsZS9lamIvU2luZ2xldG9uQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NlY3VyaXR5L3NpbXBsZS9lamIvU2luZ2xldG9uQmVhbi5qYXZhCmluZGV4IDU4ZDE0ODguLjdmMWU0M2MgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zZWN1cml0eS9zaW1wbGUvZWpiL1NpbmdsZXRvbkJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2VjdXJpdHkvc2ltcGxlL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKQEAgLTQzLDI3ICs0MywyNyBAQAogICAgIHB1YmxpYyB2b2lkIGluaXQoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6aW5pdCgpIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigib3JiID0gIiArIG9yYik7Ci0JaWYoIG9yYiA9PSBudWxsICkgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJudWxsIE9SQiIpOwotCX0KKyAgICBpZiggb3JiID09IG51bGwgKSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIm51bGwgT1JCIik7CisgICAgfQogCi0JSGVsbG8gbWVWaWFBcHBDbGllbnREZWZpbmVkRGVwZW5kZW5jeSA9IChIZWxsbykKLQkgICAgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6YXBwL2Vudi9hcHBjbGllbnRkZWZpbmVkZWpicmVmMSIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigibWVWaWFBcHBDbGllbnREZWZpbmVkRGVwZW5kZW5jeSA9IiArCi0JCQkgICBtZVZpYUFwcENsaWVudERlZmluZWREZXBlbmRlbmN5KTsKLQlIZWxsbyBtZVZpYUFwcENsaWVudERlZmluZWREZXBlbmRlbmN5MiA9IChIZWxsbykKLQkgICAgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6YXBwL2FwcGNsaWVudGRlZmluZWRlamJyZWYyIik7CisgICAgSGVsbG8gbWVWaWFBcHBDbGllbnREZWZpbmVkRGVwZW5kZW5jeSA9IChIZWxsbykKKyAgICAgICAgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6YXBwL2Vudi9hcHBjbGllbnRkZWZpbmVkZWpicmVmMSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigibWVWaWFBcHBDbGllbnREZWZpbmVkRGVwZW5kZW5jeSA9IiArCisgICAgICAgICAgICAgICBtZVZpYUFwcENsaWVudERlZmluZWREZXBlbmRlbmN5KTsKKyAgICBIZWxsbyBtZVZpYUFwcENsaWVudERlZmluZWREZXBlbmRlbmN5MiA9IChIZWxsbykKKyAgICAgICAgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6YXBwL2FwcGNsaWVudGRlZmluZWRlamJyZWYyIik7CiAKLQlIZWxsbyBtZVZpYUFwcENsaWVudERlZmluZWREZXBlbmRlbmN5MyA9IChIZWxsbykKLQkgICAgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6Z2xvYmFsL2FwcGNsaWVudGRlZmluZWRlamJyZWYzIik7CisgICAgSGVsbG8gbWVWaWFBcHBDbGllbnREZWZpbmVkRGVwZW5kZW5jeTMgPSAoSGVsbG8pCisgICAgICAgIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOmdsb2JhbC9hcHBjbGllbnRkZWZpbmVkZWpicmVmMyIpOwogCi0JU3RyaW5nIGFwcExldmVsRW52RW50cnkgPSAoU3RyaW5nKQotCSAgICBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTphcHAvZW52L2VudmVudHJ5MSIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiYXBwTGV2ZWxFbnZFbnRyeSA9ICIgKyBhcHBMZXZlbEVudkVudHJ5KTsKKyAgICBTdHJpbmcgYXBwTGV2ZWxFbnZFbnRyeSA9IChTdHJpbmcpCisgICAgICAgIHNlc3Npb25DdHgubG9va3VwKCJqYXZhOmFwcC9lbnYvZW52ZW50cnkxIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJhcHBMZXZlbEVudkVudHJ5ID0gIiArIGFwcExldmVsRW52RW50cnkpOwogCi0JU3RyaW5nIGdsb2JhbExldmVsRW52RW50cnkgPSAoU3RyaW5nKQotCSAgICBzZXNzaW9uQ3R4Lmxvb2t1cCgiamF2YTpnbG9iYWwvZW52ZW50cnkyIik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJnbG9iYWxMZXZlbEVudkVudHJ5ID0gIiArIGdsb2JhbExldmVsRW52RW50cnkpOworICAgIFN0cmluZyBnbG9iYWxMZXZlbEVudkVudHJ5ID0gKFN0cmluZykKKyAgICAgICAgc2Vzc2lvbkN0eC5sb29rdXAoImphdmE6Z2xvYmFsL2VudmVudHJ5MiIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZ2xvYmFsTGV2ZWxFbnZFbnRyeSA9ICIgKyBnbG9iYWxMZXZlbEVudkVudHJ5KTsKIAogICAgIH0KIApAQCAtNzEsMTExICs3MSwxMTEgQEAKIAogICAgIEBSb2xlc0FsbG93ZWQoImZvbyIpCiAgICAgcHVibGljIHZvaWQgcHJvdGVjdGVkU3luY1JlbW90ZSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46OnByb3RlY3RlZFN5bmNSZW1vdGUgY3AgPSAiICsKLQkJCSAgIHNlc3Npb25DdHguZ2V0Q2FsbGVyUHJpbmNpcGFsKCkgICsgIiAsICIgKwotCQkJICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOjpwcm90ZWN0ZWRTeW5jUmVtb3RlIGNwID0gIiArCisgICAgICAgICAgICAgICBzZXNzaW9uQ3R4LmdldENhbGxlclByaW5jaXBhbCgpICArICIgLCAiICsKKyAgICAgICAgICAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkpOwogICAgIH0KICAgICBAUGVybWl0QWxsCiAgICAgcHVibGljIHZvaWQgdW5wcm90ZWN0ZWRTeW5jUmVtb3RlKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6dW5wcm90ZWN0ZWRTeW5jUmVtb3RlIGNwID0gIiArCi0JCQkgICBzZXNzaW9uQ3R4LmdldENhbGxlclByaW5jaXBhbCgpICArICIgLCAiICsKLQkJCSAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6dW5wcm90ZWN0ZWRTeW5jUmVtb3RlIGNwID0gIiArCisgICAgICAgICAgICAgICBzZXNzaW9uQ3R4LmdldENhbGxlclByaW5jaXBhbCgpICArICIgLCAiICsKKyAgICAgICAgICAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkpOwogICAgIH0KIAogICAgIEBSb2xlc0FsbG93ZWQoImZvbyIpCiAgICAgQEFzeW5jaHJvbm91cwogICAgIHB1YmxpYyBGdXR1cmU8T2JqZWN0PiBwcm90ZWN0ZWRBc3luY1JlbW90ZSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46OnByb3RlY3RlZEFzeW5jUmVtb3RlIGNwID0gIiArCi0JCQkgICBzZXNzaW9uQ3R4LmdldENhbGxlclByaW5jaXBhbCgpICArICIgLCAiICsKLQkJCSAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkpOwotCXJldHVybiBuZXcgQXN5bmNSZXN1bHQ8T2JqZWN0PihuZXcgU3RyaW5nKCkpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6cHJvdGVjdGVkQXN5bmNSZW1vdGUgY3AgPSAiICsKKyAgICAgICAgICAgICAgIHNlc3Npb25DdHguZ2V0Q2FsbGVyUHJpbmNpcGFsKCkgICsgIiAsICIgKworICAgICAgICAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSk7CisgICAgcmV0dXJuIG5ldyBBc3luY1Jlc3VsdDxPYmplY3Q+KG5ldyBTdHJpbmcoKSk7CiAgICAgfQogCiAgICAgQEFzeW5jaHJvbm91cwogICAgIEBQZXJtaXRBbGwKICAgICBwdWJsaWMgRnV0dXJlPE9iamVjdD4gdW5wcm90ZWN0ZWRBc3luY1JlbW90ZSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46OnVucHJvdGVjdGVkQXN5bmNSZW1vdGUgY3AgPSAiICsKLQkJCSAgIHNlc3Npb25DdHguZ2V0Q2FsbGVyUHJpbmNpcGFsKCkgICsgIiAsICIgKwotCQkJICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSk7Ci0JcmV0dXJuIG5ldyBBc3luY1Jlc3VsdDxPYmplY3Q+KG5ldyBTdHJpbmcoKSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOjp1bnByb3RlY3RlZEFzeW5jUmVtb3RlIGNwID0gIiArCisgICAgICAgICAgICAgICBzZXNzaW9uQ3R4LmdldENhbGxlclByaW5jaXBhbCgpICArICIgLCAiICsKKyAgICAgICAgICAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkpOworICAgIHJldHVybiBuZXcgQXN5bmNSZXN1bHQ8T2JqZWN0PihuZXcgU3RyaW5nKCkpOwogICAgIH0KIAogICAgIEBSb2xlc0FsbG93ZWQoImZvbyIpCiAgICAgQEFzeW5jaHJvbm91cwogICAgIHB1YmxpYyBGdXR1cmU8T2JqZWN0PiBwcm90ZWN0ZWRBc3luY0xvY2FsKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6cHJvdGVjdGVkQXN5bmNMb2NhbCBjcCA9ICIgKwotCQkJICAgc2Vzc2lvbkN0eC5nZXRDYWxsZXJQcmluY2lwYWwoKSAgKyAiICwgIiArCi0JCQkgICBUaHJlYWQuY3VycmVudFRocmVhZCgpKTsKLQlyZXR1cm4gbmV3IEFzeW5jUmVzdWx0PE9iamVjdD4obmV3IFN0cmluZygpKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46OnByb3RlY3RlZEFzeW5jTG9jYWwgY3AgPSAiICsKKyAgICAgICAgICAgICAgIHNlc3Npb25DdHguZ2V0Q2FsbGVyUHJpbmNpcGFsKCkgICsgIiAsICIgKworICAgICAgICAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSk7CisgICAgcmV0dXJuIG5ldyBBc3luY1Jlc3VsdDxPYmplY3Q+KG5ldyBTdHJpbmcoKSk7CiAgICAgfQogCiAgICAgQEFzeW5jaHJvbm91cwogICAgIEBQZXJtaXRBbGwKICAgICBwdWJsaWMgRnV0dXJlPE9iamVjdD4gdW5wcm90ZWN0ZWRBc3luY0xvY2FsKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6dW5wcm90ZWN0ZWRBc3luY0xvY2FsIGNwID0gIiArCi0JCQkgICBzZXNzaW9uQ3R4LmdldENhbGxlclByaW5jaXBhbCgpICArICIgLCAiICsKLQkJCSAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkpOwotCXJldHVybiBuZXcgQXN5bmNSZXN1bHQ8T2JqZWN0PihuZXcgU3RyaW5nKCkpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6dW5wcm90ZWN0ZWRBc3luY0xvY2FsIGNwID0gIiArCisgICAgICAgICAgICAgICBzZXNzaW9uQ3R4LmdldENhbGxlclByaW5jaXBhbCgpICArICIgLCAiICsKKyAgICAgICAgICAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkpOworICAgIHJldHVybiBuZXcgQXN5bmNSZXN1bHQ8T2JqZWN0PihuZXcgU3RyaW5nKCkpOwogICAgIH0KIAogICAgIEBSb2xlc0FsbG93ZWQoImZvbyIpCiAgICAgcHVibGljIHZvaWQgcHJvdGVjdGVkU3luY0xvY2FsKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6cHJvdGVjdGVkU3luY0xvY2FsIGNwID0gIiArCi0JCQkgICBzZXNzaW9uQ3R4LmdldENhbGxlclByaW5jaXBhbCgpICArICIgLCAiICsKLQkJCSAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkpOwotCXJldHVybjsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46OnByb3RlY3RlZFN5bmNMb2NhbCBjcCA9ICIgKworICAgICAgICAgICAgICAgc2Vzc2lvbkN0eC5nZXRDYWxsZXJQcmluY2lwYWwoKSAgKyAiICwgIiArCisgICAgICAgICAgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpKTsKKyAgICByZXR1cm47CiAgICAgfQogCi0gICAgCisKICAgICBAUGVybWl0QWxsCiAgICAgcHVibGljIHZvaWQgdW5wcm90ZWN0ZWRTeW5jTG9jYWwoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOjp1bnByb3RlY3RlZFN5bmNMb2NhbCBjcCA9ICIgKwotCQkJICAgc2Vzc2lvbkN0eC5nZXRDYWxsZXJQcmluY2lwYWwoKSAgKyAiICwgIiArCi0JCQkgICBUaHJlYWQuY3VycmVudFRocmVhZCgpKTsKLQlyZXR1cm4gOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6dW5wcm90ZWN0ZWRTeW5jTG9jYWwgY3AgPSAiICsKKyAgICAgICAgICAgICAgIHNlc3Npb25DdHguZ2V0Q2FsbGVyUHJpbmNpcGFsKCkgICsgIiAsICIgKworICAgICAgICAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSk7CisgICAgcmV0dXJuIDsKICAgICB9CiAKICAgICBAUGVybWl0QWxsCiAgICAgcHVibGljIHZvaWQgdGVzdFByb3RlY3RlZFN5bmNMb2NhbCgpIHsKLQltZS5wcm90ZWN0ZWRTeW5jTG9jYWwoKTsKKyAgICBtZS5wcm90ZWN0ZWRTeW5jTG9jYWwoKTsKICAgICB9CiAKICAgICBAUGVybWl0QWxsCiAgICAgcHVibGljIHZvaWQgdGVzdFByb3RlY3RlZEFzeW5jTG9jYWwoKSB7Ci0JdHJ5IHsKLQkgICAgRnV0dXJlPE9iamVjdD4gZnV0dXJlID0gbWUucHJvdGVjdGVkQXN5bmNMb2NhbCgpOwotCSAgICBPYmplY3Qgb2JqID0gZnV0dXJlLmdldCgpOwotCX0gY2F0Y2goRXhjZXB0aW9uIGVlKSB7Ci0JICAgIGlmKCBlZS5nZXRDYXVzZSgpIGluc3RhbmNlb2YgRUpCQWNjZXNzRXhjZXB0aW9uKSB7Ci0JCXRocm93IChFSkJBY2Nlc3NFeGNlcHRpb24pIGVlLmdldENhdXNlKCk7Ci0JICAgIH0KLQl9CisgICAgdHJ5IHsKKyAgICAgICAgRnV0dXJlPE9iamVjdD4gZnV0dXJlID0gbWUucHJvdGVjdGVkQXN5bmNMb2NhbCgpOworICAgICAgICBPYmplY3Qgb2JqID0gZnV0dXJlLmdldCgpOworICAgIH0gY2F0Y2goRXhjZXB0aW9uIGVlKSB7CisgICAgICAgIGlmKCBlZS5nZXRDYXVzZSgpIGluc3RhbmNlb2YgRUpCQWNjZXNzRXhjZXB0aW9uKSB7CisgICAgICAgIHRocm93IChFSkJBY2Nlc3NFeGNlcHRpb24pIGVlLmdldENhdXNlKCk7CisgICAgICAgIH0KKyAgICB9CiAgICAgfQogCiAgICAgQFBlcm1pdEFsbAogICAgIHB1YmxpYyB2b2lkIHRlc3RVbnByb3RlY3RlZFN5bmNMb2NhbCgpIHsKLQltZS51bnByb3RlY3RlZFN5bmNMb2NhbCgpOworICAgIG1lLnVucHJvdGVjdGVkU3luY0xvY2FsKCk7CiAKICAgICB9CiAKICAgICBAUGVybWl0QWxsCiAgICAgcHVibGljIHZvaWQgdGVzdFVucHJvdGVjdGVkQXN5bmNMb2NhbCgpIHsKLQl0cnkgewotCSAgICBGdXR1cmU8T2JqZWN0PiBmdXR1cmUgPSBtZS51bnByb3RlY3RlZEFzeW5jTG9jYWwoKTsKLQkgICAgT2JqZWN0IG9iaiA9IGZ1dHVyZS5nZXQoKTsKLQkgICAgLy8gU3VjY2VzcwotCX0gY2F0Y2goRXhjZXB0aW9uIGVlKSB7Ci0JICAgIHRocm93IChFSkJFeGNlcHRpb24pIG5ldyBFSkJFeGNlcHRpb24oIkdvdCB1bmV4cGVjdGVkIGV4Y2VwdGlvbiIpLmluaXRDYXVzZShlZS5nZXRDYXVzZSgpKTsKLQl9CisgICAgdHJ5IHsKKyAgICAgICAgRnV0dXJlPE9iamVjdD4gZnV0dXJlID0gbWUudW5wcm90ZWN0ZWRBc3luY0xvY2FsKCk7CisgICAgICAgIE9iamVjdCBvYmogPSBmdXR1cmUuZ2V0KCk7CisgICAgICAgIC8vIFN1Y2Nlc3MKKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlZSkgeworICAgICAgICB0aHJvdyAoRUpCRXhjZXB0aW9uKSBuZXcgRUpCRXhjZXB0aW9uKCJHb3QgdW5leHBlY3RlZCBleGNlcHRpb24iKS5pbml0Q2F1c2UoZWUuZ2V0Q2F1c2UoKSk7CiAgICAgfQotICAgIAorICAgIH0KKwogCiAKICAgICBAUHJlRGVzdHJveQogICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6ZGVzdHJveSgpIik7CiAgICAgfQotICAgIAorCiAKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL2J1aWxkLnhtbAppbmRleCAxZjg0ZjgxLi4xYzhkYzdmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL2J1aWxkLnhtbApAQCAtNjAsOSArNjAsOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+Ci0JCVVzYWdlOgotCQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamItZWpiMzEtc2luZ2xldG9uIHRlc3RzKQotCTwvZWNobz4KKyAgICA8ZWNobz4KKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYi1lamIzMS1zaW5nbGV0b24gdGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi9jYWNoZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi9jYWNoZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDRmMTIzZjUuLmUzYTU1MGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vY2FjaGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL2NhY2hlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEyICsxNSwxMiBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMxLXNpbmdsZXRvbi1jYWNoZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gCi08cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+XHUwMDIwCis8cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InNlLmNsaWVudCIgdmFsdWU9ImNvbS5hY21lLkNsaWVudCIvPgotCQorCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vY2FjaGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi9jYWNoZS9idWlsZC54bWwKaW5kZXggMzM3ODNkNC4uMjlhM2MxOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi9jYWNoZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi9jYWNoZS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDEyICs0NiwxMiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZWpiLWphci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0NhY2hlKi5jbGFzcywqKi9TaW5nbGV0b24qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWphci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTU5LDkgKzU5LDkgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bl9zZSIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW5fc2UiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgIDxqYXZhICBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9IiR7c2UuY2xpZW50fSI+CkBAIC03Miw3ICs3Miw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamFyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL2NhY2hlL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vY2FjaGUvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDMxZWQ4MzcuLjQyZGUyMWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vY2FjaGUvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vY2FjaGUvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNiwxNyArMjYsMTcgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGFwcE5hbWU7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7CiAKLQlhcHBOYW1lID0gYXJnc1swXTsgCi0Jc3RhdC5hZGREZXNjcmlwdGlvbihhcHBOYW1lKTsKLQlDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsgICAgICAgCi0gICAgICAgIGNsaWVudC5kb1Rlc3QoKTsJCisgICAgYXBwTmFtZSA9IGFyZ3NbMF07CisgICAgc3RhdC5hZGREZXNjcmlwdGlvbihhcHBOYW1lKTsKKyAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKKyAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShhcHBOYW1lICsgIklEIik7CiAgICAgfQogCkBAIC00NCwyNyArNDQsMjcgQEAKIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKIAotCXRyeSB7CisgICAgdHJ5IHsKIAotCSAgICBDYWNoZVJlbW90ZSBjYWNoZSA9IChDYWNoZVJlbW90ZSkgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmdsb2JhbC8iICsgYXBwTmFtZSArICIvQ2FjaGVCZWFuIWNvbS5hY21lLkNhY2hlUmVtb3RlIik7CisgICAgICAgIENhY2hlUmVtb3RlIGNhY2hlID0gKENhY2hlUmVtb3RlKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6Z2xvYmFsLyIgKyBhcHBOYW1lICsgIi9DYWNoZUJlYW4hY29tLmFjbWUuQ2FjaGVSZW1vdGUiKTsKIAotCSAgICAvLyBzbGVlcCBmb3IgYSBmZXcgc2Vjb25kCi0JICAgIGludCBzbGVlcCA9IDExOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldhaXRpbmcgIiArIHNsZWVwICsgIiBzZWNvbmRzIGZvciBjYWNoZSByZWZyZXNoLi4uIik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKExvd2VyIHRoaXMgdmFsdWUgb25jZSBtaW5pbXVtIHRpbWVvdXQgaXMgMSBzZWMpIik7Ci0JICAgIFRocmVhZC5zbGVlcChzbGVlcCAqIDEwMDApOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldha2luZyB1cCBmcm9tIHNsZWVwLiBOb3cgY2hlY2sgY2FjaGUiKTsKLQkgICAgCi0JICAgIGludCBudW1SZWZyZXNoZXMgPSBjYWNoZS5jaGVja0NhY2hlKCk7Ci0JICAgIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk51bSByZWZyZXNoZXMgPSAiICsgbnVtUmVmcmVzaGVzKTsKKyAgICAgICAgLy8gc2xlZXAgZm9yIGEgZmV3IHNlY29uZAorICAgICAgICBpbnQgc2xlZXAgPSAxMTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXYWl0aW5nICIgKyBzbGVlcCArICIgc2Vjb25kcyBmb3IgY2FjaGUgcmVmcmVzaC4uLiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIihMb3dlciB0aGlzIHZhbHVlIG9uY2UgbWluaW11bSB0aW1lb3V0IGlzIDEgc2VjKSIpOworICAgICAgICBUaHJlYWQuc2xlZXAoc2xlZXAgKiAxMDAwKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXYWtpbmcgdXAgZnJvbSBzbGVlcC4gTm93IGNoZWNrIGNhY2hlIik7CiAKLQkgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5QQVNTKTsKKyAgICAgICAgaW50IG51bVJlZnJlc2hlcyA9IGNhY2hlLmNoZWNrQ2FjaGUoKTsKIAotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LkZBSUwpOwotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCX0KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJOdW0gcmVmcmVzaGVzID0gIiArIG51bVJlZnJlc2hlcyk7CisKKyAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5QQVNTKTsKKworICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LkZBSUwpOworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KICAgICB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi9jYWNoZS9lamIvQ2FjaGVCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL2NhY2hlL2VqYi9DYWNoZUJlYW4uamF2YQppbmRleCBkMTY0YjEzLi43ZjkxOGZmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL2NhY2hlL2VqYi9DYWNoZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL2NhY2hlL2VqYi9DYWNoZUJlYW4uamF2YQpAQCAtNDAsMTYgKzQwLDE2IEBACiAgICAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICAgICBwcml2YXRlIHZvaWQgaW5pdCgpIHsKICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBDYWNoZTppbml0KCkiKTsKLQkgICAgICBtZSA9IHNlc0N0eC5nZXRCdXNpbmVzc09iamVjdChDYWNoZUJlYW4uY2xhc3MpOwotCSAgICAgIG1lLnJ1bkFzeW5jKCk7Ci0JICAgICAgdHJ5IHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJCbG9ja2luZyAyIHNlY3MgaW4gaW5pdCIpOwotCQlUaHJlYWQuc2xlZXAoMTUwMCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiV2FraW5nIHVwIGZyb20gc2xlZXAgaW4gaW5pdC4uLiIpOwotCSAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIH0KLQkgICAgICBmaW5pc2hlZEluaXQgPSB0cnVlOworICAgICAgICAgIG1lID0gc2VzQ3R4LmdldEJ1c2luZXNzT2JqZWN0KENhY2hlQmVhbi5jbGFzcyk7CisgICAgICAgICAgbWUucnVuQXN5bmMoKTsKKyAgICAgICAgICB0cnkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJsb2NraW5nIDIgc2VjcyBpbiBpbml0Iik7CisgICAgICAgIFRocmVhZC5zbGVlcCgxNTAwKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXYWtpbmcgdXAgZnJvbSBzbGVlcCBpbiBpbml0Li4uIik7CisgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQorICAgICAgICAgIGZpbmlzaGVkSW5pdCA9IHRydWU7CiAgICAgICAgfQogCiAgICAgQEFzeW5jaHJvbm91cwpAQCAtNTcsNTUgKzU3LDU1IEBACiAKICAgICBwdWJsaWMgaW50IGNoZWNrQ2FjaGUoKSB7CiAKLQlpZiggZmFpbHVyZSApIHsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihmYWlsdXJlTXNnKTsKLQl9CisgICAgaWYoIGZhaWx1cmUgKSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZmFpbHVyZU1zZyk7CisgICAgfQogCi0JaW50IHJlZnJlc2hlcyA9IHJlZnJlc2hDb3VudC5pbnRWYWx1ZSgpOwotCWlmKCByZWZyZXNoZXMgPT0gMCApIHsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigibm8gcmVmcmVzaGVzIik7Ci0JfQorICAgIGludCByZWZyZXNoZXMgPSByZWZyZXNoQ291bnQuaW50VmFsdWUoKTsKKyAgICBpZiggcmVmcmVzaGVzID09IDAgKSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIm5vIHJlZnJlc2hlcyIpOworICAgIH0KIAotCVN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bCBjYWNoZSBjaGVjayB0b3RhbCByZWZyZXNoZXMgPSAiICsgcmVmcmVzaGVzKTsKLQlyZXR1cm4gcmVmcmVzaGVzOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bCBjYWNoZSBjaGVjayB0b3RhbCByZWZyZXNoZXMgPSAiICsgcmVmcmVzaGVzKTsKKyAgICByZXR1cm4gcmVmcmVzaGVzOwogICAgIH0KIAogICAgICAgIEBTY2hlZHVsZShzZWNvbmQ9IiovMSIsIG1pbnV0ZT0iKiIsIGhvdXI9IioiLCBwZXJzaXN0ZW50PWZhbHNlKQogICAgICAgIHByaXZhdGUgdm9pZCByZWZyZXNoKCkgewotCSAgIGludCBjb3VudCA9IHJlZnJlc2hDb3VudC5pbmNyZW1lbnRBbmRHZXQoKTsKLQkgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIENhY2hlOnJlZnJlc2goKSBudW0gcmVmcmVzaGVzID0gIiArIGNvdW50KTsKKyAgICAgICBpbnQgY291bnQgPSByZWZyZXNoQ291bnQuaW5jcmVtZW50QW5kR2V0KCk7CisgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBDYWNoZTpyZWZyZXNoKCkgbnVtIHJlZnJlc2hlcyA9ICIgKyBjb3VudCk7CiAgICAgICAgfQogCiAgICAgICAgQFByZURlc3Ryb3kKICAgICAgICBwcml2YXRlIHZvaWQgZGVzdHJveSgpIHsKLQkgICBzaHV0ZG93biA9IHRydWU7CisgICAgICAgc2h1dGRvd24gPSB0cnVlOwogICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIENhY2hlOmRlc3Ryb3koKSIpOwogICAgICAgIH0KIAogICAgIEBBc3luY2hyb25vdXMKICAgICBwdWJsaWMgdm9pZCBydW5Bc3luYygpIHsKIAotCWlmKCAhZmluaXNoZWRJbml0ICkgewotCSAgICBmYWlsdXJlID0gdHJ1ZTsKLQkgICAgZmFpbHVyZU1zZyA9ICJBc3luYyBjYWxsZWQgYmVmb3JlIGluaXQgZmluaXNoZWQiOwotCX0KLQotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uOjpydW4oKSIpOwotCi0Jd2hpbGUoIXNodXRkb3duKSB7Ci0KLQkgICAgdHJ5IHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJHb2luZyB0byBzbGVlcC4uLiIpOwotCQlUaHJlYWQuc2xlZXAoNTAwMCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiV2FraW5nIHVwIGZyb20gc2xlZXAuLi4iKTsKLQkgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewotCQllLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICB9Ci0JfQotCi0JU3lzdGVtLm91dC5wcmludGxuKCJFeGl0aW5nIENhY2hlOjpydW4oKSBkdWUgdG8gc2h1dGRvd24iKTsKLQlyZXR1cm47CisgICAgaWYoICFmaW5pc2hlZEluaXQgKSB7CisgICAgICAgIGZhaWx1cmUgPSB0cnVlOworICAgICAgICBmYWlsdXJlTXNnID0gIkFzeW5jIGNhbGxlZCBiZWZvcmUgaW5pdCBmaW5pc2hlZCI7CiAgICAgfQotICAgICAgIAorCisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b246OnJ1bigpIik7CisKKyAgICB3aGlsZSghc2h1dGRvd24pIHsKKworICAgICAgICB0cnkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvaW5nIHRvIHNsZWVwLi4uIik7CisgICAgICAgIFRocmVhZC5zbGVlcCg1MDAwKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXYWtpbmcgdXAgZnJvbSBzbGVlcC4uLiIpOworICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4aXRpbmcgQ2FjaGU6OnJ1bigpIGR1ZSB0byBzaHV0ZG93biIpOworICAgIHJldHVybjsKKyAgICB9CisKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi9oZWxsby9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi9oZWxsby9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGY3Mjk0NTQuLjU3M2VmMmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vaGVsbG8vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL2hlbGxvL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEzICsxNSwxMyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMxLXNpbmdsZXRvbi1oZWxsbyIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gCi08cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+XHUwMDIwCis8cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InNlLmNsaWVudCIgdmFsdWU9ImNvbS5hY21lLkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9InBlcnNpc3RlbmNlLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvcGVyc2lzdGVuY2UueG1sIi8+Ci0JCisKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi9oZWxsby9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL2hlbGxvL2J1aWxkLnhtbAppbmRleCBiNzJhNDBmLi4xYTg0MzNlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL2hlbGxvL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL2hlbGxvL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMjQgKzQ2LDI0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJlamItamFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovRm9vKi5jbGFzcywqKi9TaW5nbGV0b24qLmNsYXNzLCoqL0hlbGxvKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InN0YXJ0RGVyYnkiLz4KICAgICAgICAgPHNsZWVwIG1pbnV0ZXM9IjIiLz4KLSAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktamFyLWNvbW1vbiIvPiAgICAgICAKKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktamFyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5fc2UiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuX3NlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgPGphdmEgIGZvcms9Im9uIiAKKyAgICAgICA8amF2YSAgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvYXBwc2Vydi1ydC5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iJHtzZS5jbGllbnR9Ij4KQEAgLTc1LDcgKzc1LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamFyLWNvbW1vbiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InN0b3BEZXJieSIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL2hlbGxvL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vaGVsbG8vY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGM2OGUwNDMuLmZjZWI0MDIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vaGVsbG8vY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vaGVsbG8vY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yOSwxNyArMjksMTcgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGFwcE5hbWU7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7CiAKLQlhcHBOYW1lID0gYXJnc1swXTsgCi0Jc3RhdC5hZGREZXNjcmlwdGlvbihhcHBOYW1lKTsKLQlDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsgICAgICAgCi0gICAgICAgIGNsaWVudC5kb1Rlc3QoKTsJCisgICAgYXBwTmFtZSA9IGFyZ3NbMF07CisgICAgc3RhdC5hZGREZXNjcmlwdGlvbihhcHBOYW1lKTsKKyAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKKyAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShhcHBOYW1lICsgIklEIik7CiAgICAgfQogCkBAIC00NywzNyArNDcsMzcgQEAKIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKIAotCXRyeSB7CisgICAgdHJ5IHsKIAotCSAgICAvLyBFbnN1cmUgdGhhdCBNRUpCIGlzIHJlZ2lzdGVyZWQgdW5kZXIgYWxsIHRocmVlIG9mIGl0cyBKTkRJIG5hbWVzCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2luZyB1cCBNRUpCIEhvbWVzIik7Ci0JICAgIE1hbmFnZW1lbnRIb21lIG1oMU9iaiA9IChNYW5hZ2VtZW50SG9tZSkgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJlamIvbWdtdC9NRUpCIik7Ci0JICAgIE1hbmFnZW1lbnRIb21lIG1oMk9iaiA9IChNYW5hZ2VtZW50SG9tZSkgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmdsb2JhbC9tZWpiL01FSkJCZWFuIik7Ci0JICAgIE1hbmFnZW1lbnRIb21lIG1oM09iaiA9IChNYW5hZ2VtZW50SG9tZSkgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmdsb2JhbC9tZWpiL01FSkJCZWFuIWphdmF4Lm1hbmFnZW1lbnQuajJlZS5NYW5hZ2VtZW50SG9tZSIpOworICAgICAgICAvLyBFbnN1cmUgdGhhdCBNRUpCIGlzIHJlZ2lzdGVyZWQgdW5kZXIgYWxsIHRocmVlIG9mIGl0cyBKTkRJIG5hbWVzCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2luZyB1cCBNRUpCIEhvbWVzIik7CisgICAgICAgIE1hbmFnZW1lbnRIb21lIG1oMU9iaiA9IChNYW5hZ2VtZW50SG9tZSkgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJlamIvbWdtdC9NRUpCIik7CisgICAgICAgIE1hbmFnZW1lbnRIb21lIG1oMk9iaiA9IChNYW5hZ2VtZW50SG9tZSkgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmdsb2JhbC9tZWpiL01FSkJCZWFuIik7CisgICAgICAgIE1hbmFnZW1lbnRIb21lIG1oM09iaiA9IChNYW5hZ2VtZW50SG9tZSkgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmdsb2JhbC9tZWpiL01FSkJCZWFuIWphdmF4Lm1hbmFnZW1lbnQuajJlZS5NYW5hZ2VtZW50SG9tZSIpOwogCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigibWVqYiBob21lIG9iaiAxID0gIiArIG1oMU9iaik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigibWVqYiBob21lIG9iaiAyID0gIiArIG1oMk9iaik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigibWVqYiBob21lIG9iaiAzID0gIiArIG1oM09iaik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibWVqYiBob21lIG9iaiAxID0gIiArIG1oMU9iaik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibWVqYiBob21lIG9iaiAyID0gIiArIG1oMk9iaik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibWVqYiBob21lIG9iaiAzID0gIiArIG1oM09iaik7CiAKLQkgICAgSGVsbG8gaGVsbG8gPSAoSGVsbG8pIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpnbG9iYWwvIiArIGFwcE5hbWUgKyAiL1NpbmdsZXRvbkJlYW4iKTsKKyAgICAgICAgSGVsbG8gaGVsbG8gPSAoSGVsbG8pIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpnbG9iYWwvIiArIGFwcE5hbWUgKyAiL1NpbmdsZXRvbkJlYW4iKTsKIAogCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2luZ2xldG9uIHNheXMgOiAiICsgaGVsbG8uaGVsbG8oKSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2luZ2xldG9uIHNheXMgOiAiICsgaGVsbG8uaGVsbG8oKSk7CiAgICAgICAgICAgICBoZWxsby5hc3luYygpOwogCi0JICAgIHRyeSB7Ci0JCWhlbGxvLnRlc3RfRXJyX29yKCJmb28iLCAiYmFyIik7Ci0JCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJFeHBlY3RlZCBFSkJFeGNlcHRpb24iKTsKLQkgICAgfSBjYXRjaChFSkJFeGNlcHRpb24gZSkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBleHBlY3RlZCBFSkJFeGNlcHRpb24gYWZ0ZXIgamF2YS5sYW5nLkVycm9yIHRocm93biBmcm9tIGVqYiIpOwotCSAgICB9CisgICAgICAgIHRyeSB7CisgICAgICAgIGhlbGxvLnRlc3RfRXJyX29yKCJmb28iLCAiYmFyIik7CisgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJFeHBlY3RlZCBFSkJFeGNlcHRpb24iKTsKKyAgICAgICAgfSBjYXRjaChFSkJFeGNlcHRpb24gZSkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBleHBlY3RlZCBFSkJFeGNlcHRpb24gYWZ0ZXIgamF2YS5sYW5nLkVycm9yIHRocm93biBmcm9tIGVqYiIpOworICAgICAgICB9CiAKLQkgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5QQVNTKTsKKyAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5QQVNTKTsKIAotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LkZBSUwpOwotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCX0KKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5GQUlMKTsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CiAgICAgfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vaGVsbG8vY2xpZW50L0NsaWVudDIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vaGVsbG8vY2xpZW50L0NsaWVudDIuamF2YQppbmRleCA5YmI4N2VmLi44MzBjZTMzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL2hlbGxvL2NsaWVudC9DbGllbnQyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi9oZWxsby9jbGllbnQvQ2xpZW50Mi5qYXZhCkBAIC0yMywyOSArMjMsMjkgQEAKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKIAotCVN0cmluZyBob3N0OwotCSBTdHJpbmcgcG9ydDsKKyAgICBTdHJpbmcgaG9zdDsKKyAgICAgU3RyaW5nIHBvcnQ7CiAKLQl0cnkgewotCSAgICBQcm9wZXJ0aWVzIHAgPSBuZXcgUHJvcGVydGllcygpOwotCSAgICBpZiggYXJncy5sZW5ndGggPiAwICkgewotCQlob3N0ID0gYXJnc1swXTsKLQkJcC5wdXQoIm9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbEhvc3QiLCBob3N0KTsKLQkgICAgfQorICAgIHRyeSB7CisgICAgICAgIFByb3BlcnRpZXMgcCA9IG5ldyBQcm9wZXJ0aWVzKCk7CisgICAgICAgIGlmKCBhcmdzLmxlbmd0aCA+IDAgKSB7CisgICAgICAgIGhvc3QgPSBhcmdzWzBdOworICAgICAgICBwLnB1dCgib3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsSG9zdCIsIGhvc3QpOworICAgICAgICB9CiAKLQkgICAgaWYoIGFyZ3MubGVuZ3RoID4gMSApIHsKLQkJcG9ydCA9IGFyZ3NbMV07Ci0JCXAucHV0KCJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0IiwgcG9ydCk7Ci0JICAgIH0KKyAgICAgICAgaWYoIGFyZ3MubGVuZ3RoID4gMSApIHsKKyAgICAgICAgcG9ydCA9IGFyZ3NbMV07CisgICAgICAgIHAucHV0KCJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0IiwgcG9ydCk7CisgICAgICAgIH0KIAotCSAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dChwKTsKLQkgICAgSGVsbG8gaCA9IChIZWxsbykgaWMubG9va3VwKCJISCNjb20uYWNtZS5IZWxsbyIpOwotCSAgICBoLmhlbGxvKCk7CisgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KHApOworICAgICAgICBIZWxsbyBoID0gKEhlbGxvKSBpYy5sb29rdXAoIkhII2NvbS5hY21lLkhlbGxvIik7CisgICAgICAgIGguaGVsbG8oKTsKIAogCi0JfSBjYXRjaChFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCX0KKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQogCiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL2hlbGxvL2VqYi9Gb29FbnRpdHkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vaGVsbG8vZWpiL0Zvb0VudGl0eS5qYXZhCmluZGV4IDJiZGQyYWIuLjhmNDRjOTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vaGVsbG8vZWpiL0Zvb0VudGl0eS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vaGVsbG8vZWpiL0Zvb0VudGl0eS5qYXZhCkBAIC0yNCw4ICsyNCw4IEBACiAKIEBFbnRpdHkKIHB1YmxpYyBjbGFzcyBGb29FbnRpdHkgewotICAgIAotICAgIEBJZCAKKworICAgIEBJZAogICAgIEBHZW5lcmF0ZWRWYWx1ZQogICAgIHByaXZhdGUgaW50IGlkOwogICAgIHByaXZhdGUgU3RyaW5nIG5hbWU7CkBAIC0zMywxMCArMzMsMTAgQEAKICAgICBwdWJsaWMgRm9vRW50aXR5KFN0cmluZyBuYW1lKSB7CiAgICAgICAgIHNldE5hbWUobmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIEZvb0VudGl0eSgpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CiAgICAgICAgIHJldHVybiBuYW1lOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vaGVsbG8vZWpiL1NpbmdsZXRvbkJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vaGVsbG8vZWpiL1NpbmdsZXRvbkJlYW4uamF2YQppbmRleCA2MWI3MmYxLi5jMjNmN2NiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL2hlbGxvL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi9oZWxsby9lamIvU2luZ2xldG9uQmVhbi5qYXZhCkBAIC01NCw3ICs1NCw3IEBACiAgICAgTWFuYWdlbWVudEhvbWUgbUhvbWUyOwogICAgICovCiAKLSAgICAKKwogCiAKICAgICAvL01FSkJIb21lIG1Ib21lMjsKQEAgLTYzLDMwICs2MywzMCBAQAogICAgIHB1YmxpYyB2b2lkIGluaXQoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6aW5pdCgpIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigib3JiID0gIiArIG9yYik7Ci0JaWYoIG9yYiA9PSBudWxsICkgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJudWxsIE9SQiIpOwotCX0KLQl0cnkgewotCSAgICAvLyBzYW1lIHByb2JsZW0gTWFuYWdlbWVudEhvbWUgbUhvbWVMID0gKE1hbmFnZW1lbnRIb21lKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6Y29tcC9lbnYvbWVqYiIpOwotCSAgICAvLyBzYW1lIHByb2JsZW0gTWFuYWdlbWVudEhvbWUgbUhvbWVMMiA9IChNYW5hZ2VtZW50SG9tZSkgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmdsb2JhbC9tZWpiL01FSkJCZWFuIik7Ci0JICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigibUhvbWVMID0gIiArIG1Ib21lTCk7Ci0JICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigibUhvbWVMMiA9ICIgKyBtSG9tZUwyKTsKLQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7Ci0JfQorICAgIGlmKCBvcmIgPT0gbnVsbCApIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigibnVsbCBPUkIiKTsKKyAgICB9CisgICAgdHJ5IHsKKyAgICAgICAgLy8gc2FtZSBwcm9ibGVtIE1hbmFnZW1lbnRIb21lIG1Ib21lTCA9IChNYW5hZ2VtZW50SG9tZSkgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmNvbXAvZW52L21lamIiKTsKKyAgICAgICAgLy8gc2FtZSBwcm9ibGVtIE1hbmFnZW1lbnRIb21lIG1Ib21lTDIgPSAoTWFuYWdlbWVudEhvbWUpIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpnbG9iYWwvbWVqYi9NRUpCQmVhbiIpOworICAgICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oIm1Ib21lTCA9ICIgKyBtSG9tZUwpOworICAgICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oIm1Ib21lTDIgPSAiICsgbUhvbWVMMik7CisgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOworICAgIH0KIAotCS8vIFN5c3RlbS5vdXQucHJpbnRsbigibUhvbWUxID0gIiArIG1Ib21lMSk7Ci0JLy8JU3lzdGVtLm91dC5wcmludGxuKCJtSG9tZTIgPSAiICsgbUhvbWUyKTsKKyAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oIm1Ib21lMSA9ICIgKyBtSG9tZTEpOworICAgIC8vICAgIFN5c3RlbS5vdXQucHJpbnRsbigibUhvbWUyID0gIiArIG1Ib21lMik7CiAKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGhlbGxvKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6aGVsbG8oKSIpOwotCXJldHVybiAiaGVsbG8sIHdvcmxkIVxuIjsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46OmhlbGxvKCkiKTsKKyAgICByZXR1cm4gImhlbGxvLCB3b3JsZCFcbiI7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgdGVzdF9FcnJfb3IoU3RyaW5nIHMxLCBTdHJpbmcgczIpIHsKLQl0aHJvdyBuZXcgRXJyb3IoInRlc3QgamF2YS5sYW5nLkVycm9yIik7CisgICAgdGhyb3cgbmV3IEVycm9yKCJ0ZXN0IGphdmEubGFuZy5FcnJvciIpOwogICAgIH0KIAogICAgIEBBc3luY2hyb25vdXMKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vbXVsdGktbW9kdWxlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL211bHRpLW1vZHVsZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGRkZGFiNmUuLjhjZmFmNjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vbXVsdGktbW9kdWxlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi9tdWx0aS1tb2R1bGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTYgKzE1LDE2IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzEtc2luZ2xldG9uLW11bHRpbW9kdWxlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+XHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic2UuY2xpZW50IiB2YWx1ZT0iY29tLnN1bi5kZXZ0ZXN0LmNsaWVudC5DbGllbnQiLz4KIAogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vbXVsdGktbW9kdWxlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vbXVsdGktbW9kdWxlL2J1aWxkLnhtbAppbmRleCBlODUxYzVhLi4wN2QzMTg4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL211bHRpLW1vZHVsZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi9tdWx0aS1tb2R1bGUvYnVpbGQueG1sCkBAIC0zMCwxNCArMzAsMTQgQEAKICAgICAmdGVzdHByb3BlcnRpZXM7CiAKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQsZGVwbG95Ij4KLQk8YW50Y2FsbCB0YXJnZXQ9InJ1biIvPgotCTxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4iLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgogICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ5LDc3ICs0OSw3NyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDwhLS0gcGFja2FnZSBvdXJzZWx2ZXMgdG8gaW5jbHVkZSBwZXJzaXN0ZW5jZS54bWwgLS0+Ci0JPGVjaG8gbWVzc2FnZT0iQXNzZW1ibGUgZGlyOiAke2Fzc2VtYmxlLmRpcn0gIi8+CisgICAgPGVjaG8gbWVzc2FnZT0iQXNzZW1ibGUgZGlyOiAke2Fzc2VtYmxlLmRpcn0gIi8+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgotICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXIiIAotICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiAKKyAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIuamFyIgorICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgogICAgICAgICAgICAgIHVwZGF0ZT0idHJ1ZSIKICAgICAgICAgICAgICBpbmNsdWRlcyA9IioqLypUcmFja2VyLmNsYXNzLCAqKi9Jbml0T3JkZXJUcmFja2VyQmVhbi5jbGFzcyI+CiAgICAgICAgIDwvamFyPgotICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYjEuamFyIiAKLSAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgCisgICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiMS5qYXIiCisgICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICAgdXBkYXRlPSJ0cnVlIgogICAgICAgICAgICAgIGluY2x1ZGVzID0iKiovKk1vZDEuY2xhc3MsICoqL0xvY2FsSW5pdFRyYWNrZXIuY2xhc3MiPgogICAgICAgICA8L2phcj4KLSAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIyLmphciIgCi0gICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIAorICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYjIuamFyIgorICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgogICAgICAgICAgICAgIHVwZGF0ZT0idHJ1ZSIKICAgICAgICAgICAgICBpbmNsdWRlcyA9IioqLypNb2QyLmNsYXNzLCAqKi9Mb2NhbEluaXRUcmFja2VyLmNsYXNzIj4KICAgICAgICAgPC9qYXI+Ci0gICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIgCi0gICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIAorICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiCisgICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICAgdXBkYXRlPSJ0cnVlIgotCSAgICAgbWFuaWZlc3Q9Ii4vY2xpZW50L01BTklGRVNULk1GIgorICAgICAgICAgbWFuaWZlc3Q9Ii4vY2xpZW50L01BTklGRVNULk1GIgogICAgICAgICAgICAgIGluY2x1ZGVzID0iKiovKlRyYWNrZXIuY2xhc3MsICoqLypDbGllbnQuY2xhc3MiPgogICAgICAgICA8L2phcj4KIAogPCEtLQogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2UtYXBwY2xpZW50amFyLWNvbW1vbiI+Ci0gICAgCQk8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiAKLSAgICAgIAkJCXZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgotICAgIAkJPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5qYXIiIAotICAgICAgCQkJdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4vc3BhY2Uvd29yay92My9hcHBzZXJ2LXRlc3RzL2J1aWxkL21vZHVsZS9hcmNoaXZlL2VqYi1lamIzMS1zaW5nbGV0b24tbXVsdGltb2R1bGUtZWpiLmphcgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIKKyAgICAgICAgICAgICAgICAgIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5qYXIiCisgICAgICAgICAgICAgICAgICB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPi9zcGFjZS93b3JrL3YzL2FwcHNlcnYtdGVzdHMvYnVpbGQvbW9kdWxlL2FyY2hpdmUvZWpiLWVqYjMxLXNpbmdsZXRvbi1tdWx0aW1vZHVsZS1lamIuamFyCiAgICAgICAgIDwvYW50Y2FsbD4KIC0tPgotICAJPGRlbGV0ZSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS5lYXIiLz4KLSAgCTxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgotICAJPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4gICAKLSAgCTxjb3B5IGZpbGU9IiR7YXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiICAJZmFpbG9uZXJyb3I9ImZhbHNlIi8+IAotICAJPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiPiAKLSAgICAJPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgotICAgICAgCTxpbmNsdWRlIG5hbWU9IiplamIuamFyIi8+Ci0gICAgICAJPGluY2x1ZGUgbmFtZT0iKmVqYjEuamFyIi8+Ci0gICAgICAJPGluY2x1ZGUgbmFtZT0iKmVqYjIuamFyIi8+Ci0gICAgICAJPGluY2x1ZGUgbmFtZT0iKmNsaWVudC5qYXIiLz4KLSAgICAJPC9maWxlc2V0PgotICAgIAk8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ij4KLQkJPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotCQk8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiLz4KLSAgICAJPC9maWxlc2V0PgotICAgIAk8ZmlsZXNldCBkaXI9IiR7ZW52LkFQU19IT01FfSIgaW5jbHVkZXM9ImxpYi9yZXBvcnRlci5qYXIiLz4KLSAgCTwvamFyPiAgICAgICAgCisgICAgICA8ZGVsZXRlIGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LmVhciIvPgorICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+CisgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgorICAgICAgPGNvcHkgZmlsZT0iJHthcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KKyAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIj4KKyAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgorICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IiplamIuamFyIi8+CisgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKmVqYjEuamFyIi8+CisgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKmVqYjIuamFyIi8+CisgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKmNsaWVudC5qYXIiLz4KKyAgICAgICAgPC9maWxlc2V0PgorICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ij4KKyAgICAgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgorICAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiLz4KKyAgICAgICAgPC9maWxlc2V0PgorICAgICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LkFQU19IT01FfSIgaW5jbHVkZXM9ImxpYi9yZXBvcnRlci5qYXIiLz4KKyAgICAgIDwvamFyPgogCi0gICAgPC90YXJnZXQ+ICAgICAKLSAgICAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJidWlsZCI+CiAgIDxwcm9wZXJ0eSBuYW1lPSJkZXBsb3llZC5hcHAiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiLz4KICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICA8YXJnIGxpbmU9ImRlcGxveSIvPgogICAgIDxhcmcgbGluZT0iLS1mb3JjZT10cnVlIi8+Ci0gICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPiAgICAKKyAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+CiAgICAgPGFyZyBsaW5lPSIke2RlcGxveWVkLmFwcH0iLz4KICAgPC9leGVjPgogICA8ZWNobyBtZXNzYWdlPSJEZXBsb3ltZW50IG9uIHRhcmdldCBzZXJ2ZXIgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0gc3VjY2Vzc2Z1bCIvPgotICAgICAgICAKLSAgICA8L3RhcmdldD4gCisKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuX3NlIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bl9zZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgIDxlY2hvIG1lc3NhZ2U9InNlLmNsaWVudDogJHtzZS5jbGllbnR9Ii8+Ci0gICAgICAgPGphdmEgIGZvcms9Im9uIiAKKyAgICAgICA8amF2YSAgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXI6JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50Lmphcjoke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vbXVsdGktbW9kdWxlL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vbXVsdGktbW9kdWxlL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBlNDYwY2JmLi41NjQ2OTk1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL211bHRpLW1vZHVsZS9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi9tdWx0aS1tb2R1bGUvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMSwyMyArMzEsMjMgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmdbXSBCRUFOX05BTUVTID0gbmV3IFN0cmluZ1tdIHsKLQkJIm9yZy5nbGFzc2Zpc2guZGV2dGVzdC5lamIzMS5zaW5nbGV0b24ubXVsdGltb2R1bGUuc2VydmxldC5Jbml0T3JkZXJUcmFja2VyQmVhbiIsCi0JCSJvcmcuZ2xhc3NmaXNoLmRldnRlc3QuZWpiMzEuc2luZ2xldG9uLm11bHRpbW9kdWxlLm1vZDEuQmVhbkFfTW9kMSIsCi0JCSJvcmcuZ2xhc3NmaXNoLmRldnRlc3QuZWpiMzEuc2luZ2xldG9uLm11bHRpbW9kdWxlLm1vZDEuUm9vdEJlYW5fTW9kMSIsCi0JCSJvcmcuZ2xhc3NmaXNoLmRldnRlc3QuZWpiMzEuc2luZ2xldG9uLm11bHRpbW9kdWxlLm1vZDIuQmVhbkFfTW9kMiIsCi0JCSJvcmcuZ2xhc3NmaXNoLmRldnRlc3QuZWpiMzEuc2luZ2xldG9uLm11bHRpbW9kdWxlLm1vZDIuUm9vdEJlYW5fTW9kMiIKLQl9OworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZ1tdIEJFQU5fTkFNRVMgPSBuZXcgU3RyaW5nW10geworICAgICAgICAib3JnLmdsYXNzZmlzaC5kZXZ0ZXN0LmVqYjMxLnNpbmdsZXRvbi5tdWx0aW1vZHVsZS5zZXJ2bGV0LkluaXRPcmRlclRyYWNrZXJCZWFuIiwKKyAgICAgICAgIm9yZy5nbGFzc2Zpc2guZGV2dGVzdC5lamIzMS5zaW5nbGV0b24ubXVsdGltb2R1bGUubW9kMS5CZWFuQV9Nb2QxIiwKKyAgICAgICAgIm9yZy5nbGFzc2Zpc2guZGV2dGVzdC5lamIzMS5zaW5nbGV0b24ubXVsdGltb2R1bGUubW9kMS5Sb290QmVhbl9Nb2QxIiwKKyAgICAgICAgIm9yZy5nbGFzc2Zpc2guZGV2dGVzdC5lamIzMS5zaW5nbGV0b24ubXVsdGltb2R1bGUubW9kMi5CZWFuQV9Nb2QyIiwKKyAgICAgICAgIm9yZy5nbGFzc2Zpc2guZGV2dGVzdC5lamIzMS5zaW5nbGV0b24ubXVsdGltb2R1bGUubW9kMi5Sb290QmVhbl9Nb2QyIgorICAgIH07CiAKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5JVF9PUkRFUl9CRUFOID0gQkVBTl9OQU1FU1swXTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5JVF9PUkRFUl9CRUFOID0gQkVBTl9OQU1FU1swXTsKIAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCRUFOX01PRDEgPSBCRUFOX05BTUVTWzFdOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCRUFOX01PRDEgPSBCRUFOX05BTUVTWzFdOwogCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFJPT1QxID0gQkVBTl9OQU1FU1syXTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUk9PVDEgPSBCRUFOX05BTUVTWzJdOwogCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJFQU5fTU9EMiA9IEJFQU5fTkFNRVNbM107CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJFQU5fTU9EMiA9IEJFQU5fTkFNRVNbM107CiAKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUk9PVDIgPSBCRUFOX05BTUVTWzRdOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBST09UMiA9IEJFQU5fTkFNRVNbNF07CiAKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKQEAgLTY1LDM3ICs2NSwzNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCB0ZXN0KCkgewotCXRyeSB7Ci0gCi0JCVN0cmluZyBsb29rdXBOYW1lID0gImphdmE6Z2xvYmFsL2VqYi1lamIzMS1zaW5nbGV0b24tbXVsdGltb2R1bGVBcHAvZWpiLWVqYjMxLXNpbmdsZXRvbi1tdWx0aW1vZHVsZS1lamIvSW5pdE9yZGVyVHJhY2tlckJlYW4hb3JnLmdsYXNzZmlzaC5kZXZ0ZXN0LmVqYjMxLnNpbmdsZXRvbi5tdWx0aW1vZHVsZS5zZXJ2bGV0LlJlbW90ZUluaXRUcmFja2VyIjsKLQkJU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIioqKiAiICsgbG9va3VwTmFtZSArICIgKioqIik7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiKTsKLQkJdHJhY2tlciA9IChSZW1vdGVJbml0VHJhY2tlcikgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKGxvb2t1cE5hbWUpOwotCSAgICAKLQkJTWFwPFN0cmluZywgSW50ZWdlcj4gaW5pdE9yZGVyID0gdHJhY2tlci5nZXRJbml0aWFsaXplZE5hbWVzKCk7Ci0JCWJvb2xlYW4gcmVzdWx0ID0gaW5pdE9yZGVyLnNpemUoKSA9PSBCRUFOX05BTUVTLmxlbmd0aDsKKyAgICB0cnkgewogCi0JCWludCBiMW0xID0gaW5pdE9yZGVyLmdldChCRUFOX01PRDEpOwotCQlpbnQgYjJtMiA9IGluaXRPcmRlci5nZXQoQkVBTl9NT0QyKTsKLQkJaW50IHJvb3QxID0gaW5pdE9yZGVyLmdldChST09UMSk7Ci0JCWludCByb290MiA9IGluaXRPcmRlci5nZXQoUk9PVDIpOworICAgICAgICBTdHJpbmcgbG9va3VwTmFtZSA9ICJqYXZhOmdsb2JhbC9lamItZWpiMzEtc2luZ2xldG9uLW11bHRpbW9kdWxlQXBwL2VqYi1lamIzMS1zaW5nbGV0b24tbXVsdGltb2R1bGUtZWpiL0luaXRPcmRlclRyYWNrZXJCZWFuIW9yZy5nbGFzc2Zpc2guZGV2dGVzdC5lamIzMS5zaW5nbGV0b24ubXVsdGltb2R1bGUuc2VydmxldC5SZW1vdGVJbml0VHJhY2tlciI7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKiogIiArIGxvb2t1cE5hbWUgKyAiICoqKiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIik7CisgICAgICAgIHRyYWNrZXIgPSAoUmVtb3RlSW5pdFRyYWNrZXIpIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cChsb29rdXBOYW1lKTsKIAotCQlib29sZWFuIHRlc3QxID0gYjFtMSA8IHJvb3QxOwotCQlib29sZWFuIHRlc3QyID0gcm9vdDEgPCByb290MjsKLQkJYm9vbGVhbiB0ZXN0MyA9IGIybTIgPCByb290MjsKLQkJZm9yIChTdHJpbmcga2V5IDogaW5pdE9yZGVyLmtleVNldCgpKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oa2V5ICsgIjogIiArIGluaXRPcmRlci5nZXQoa2V5KSk7Ci0JCX0KKyAgICAgICAgTWFwPFN0cmluZywgSW50ZWdlcj4gaW5pdE9yZGVyID0gdHJhY2tlci5nZXRJbml0aWFsaXplZE5hbWVzKCk7CisgICAgICAgIGJvb2xlYW4gcmVzdWx0ID0gaW5pdE9yZGVyLnNpemUoKSA9PSBCRUFOX05BTUVTLmxlbmd0aDsKIAotCQlyZXN1bHQgPSByZXN1bHQgJiYgdGVzdDEgJiYgdGVzdDIgJiYgdGVzdDM7CisgICAgICAgIGludCBiMW0xID0gaW5pdE9yZGVyLmdldChCRUFOX01PRDEpOworICAgICAgICBpbnQgYjJtMiA9IGluaXRPcmRlci5nZXQoQkVBTl9NT0QyKTsKKyAgICAgICAgaW50IHJvb3QxID0gaW5pdE9yZGVyLmdldChST09UMSk7CisgICAgICAgIGludCByb290MiA9IGluaXRPcmRlci5nZXQoUk9PVDIpOwogCi0gICAgICAgIAlzdGF0LmFkZFN0YXR1cygiRUpCIHNpbmdsZXRvbi1jcm9zcy1tb2R1bGUtZGVwZW5kZW5jeSIsCi0JCQkocmVzdWx0ID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKSk7Ci0JfSBjYXRjaCAoVGhyb3dhYmxlIHRoKSB7Ci0JCXRoLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAJc3RhdC5hZGRTdGF0dXMoIkVKQiBzaW5nbGV0b24tY3Jvc3MtbW9kdWxlLWRlcGVuZGVuY3kiLCBzdGF0LkZBSUwpOwotCX0KKyAgICAgICAgYm9vbGVhbiB0ZXN0MSA9IGIxbTEgPCByb290MTsKKyAgICAgICAgYm9vbGVhbiB0ZXN0MiA9IHJvb3QxIDwgcm9vdDI7CisgICAgICAgIGJvb2xlYW4gdGVzdDMgPSBiMm0yIDwgcm9vdDI7CisgICAgICAgIGZvciAoU3RyaW5nIGtleSA6IGluaXRPcmRlci5rZXlTZXQoKSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGtleSArICI6ICIgKyBpbml0T3JkZXIuZ2V0KGtleSkpOworICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIHRlc3QxICYmIHRlc3QyICYmIHRlc3QzOworCisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiRUpCIHNpbmdsZXRvbi1jcm9zcy1tb2R1bGUtZGVwZW5kZW5jeSIsCisgICAgICAgICAgICAocmVzdWx0ID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKSk7CisgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHRoKSB7CisgICAgICAgIHRoLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIkVKQiBzaW5nbGV0b24tY3Jvc3MtbW9kdWxlLWRlcGVuZGVuY3kiLCBzdGF0LkZBSUwpOworICAgIH0KICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vbXVsdGktbW9kdWxlL2VqYi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvZGV2dGVzdC9lamIzMS9zaW5nbGV0b24vbW9kMS9Sb290QmVhbl9Nb2QxLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL211bHRpLW1vZHVsZS9lamIvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL2RldnRlc3QvZWpiMzEvc2luZ2xldG9uL21vZDEvUm9vdEJlYW5fTW9kMS5qYXZhCmluZGV4IGYxMGI2MmYuLjg5OWJkZDMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vbXVsdGktbW9kdWxlL2VqYi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvZGV2dGVzdC9lamIzMS9zaW5nbGV0b24vbW9kMS9Sb290QmVhbl9Nb2QxLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi9tdWx0aS1tb2R1bGUvZWpiL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9kZXZ0ZXN0L2VqYjMxL3NpbmdsZXRvbi9tb2QxL1Jvb3RCZWFuX01vZDEuamF2YQpAQCAtNDYsNSArNDYsNSBAQAogICAgIHB1YmxpYyB2b2lkIGFmdGVySW5pdCgpIHsKICAgICAgICAgdHJhY2tlci5hZGQodGhpcy5nZXRDbGFzcygpLmdldE5hbWUoKSk7CiAgICAgfQotIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL211bHRpLW1vZHVsZS9lamIvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL2RldnRlc3QvZWpiMzEvc2luZ2xldG9uL21vZDIvQmVhbkFfTW9kMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi9tdWx0aS1tb2R1bGUvZWpiL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9kZXZ0ZXN0L2VqYjMxL3NpbmdsZXRvbi9tb2QyL0JlYW5BX01vZDIuamF2YQppbmRleCBiOTY4NjhmLi5hOGU4MDEwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL211bHRpLW1vZHVsZS9lamIvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL2RldnRlc3QvZWpiMzEvc2luZ2xldG9uL21vZDIvQmVhbkFfTW9kMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vbXVsdGktbW9kdWxlL2VqYi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvZGV2dGVzdC9lamIzMS9zaW5nbGV0b24vbW9kMi9CZWFuQV9Nb2QyLmphdmEKQEAgLTM3LDEwICszNywxMCBAQAogCiAgICAgQEVKQgogICAgIExvY2FsSW5pdFRyYWNrZXIgdHJhY2tlcjsKLSAgICAKKwogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHVibGljIHZvaWQgYWZ0ZXJJbml0KCkgewogICAgICAgICB0cmFja2VyLmFkZCh0aGlzLmdldENsYXNzKCkuZ2V0TmFtZSgpKTsKICAgICB9Ci0gCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vbXVsdGktbW9kdWxlL2VqYi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvZGV2dGVzdC9lamIzMS9zaW5nbGV0b24vbW9kMi9Sb290QmVhbl9Nb2QyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL211bHRpLW1vZHVsZS9lamIvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL2RldnRlc3QvZWpiMzEvc2luZ2xldG9uL21vZDIvUm9vdEJlYW5fTW9kMi5qYXZhCmluZGV4IGE5NzM4YjEuLjJjOTgwOGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vbXVsdGktbW9kdWxlL2VqYi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvZGV2dGVzdC9lamIzMS9zaW5nbGV0b24vbW9kMi9Sb290QmVhbl9Nb2QyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi9tdWx0aS1tb2R1bGUvZWpiL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9kZXZ0ZXN0L2VqYjMxL3NpbmdsZXRvbi9tb2QyL1Jvb3RCZWFuX01vZDIuamF2YQpAQCAtNDcsNSArNDcsNSBAQAogICAgIHB1YmxpYyB2b2lkIGFmdGVySW5pdCgpIHsKICAgICAgICAgdHJhY2tlci5hZGQodGhpcy5nZXRDbGFzcygpLmdldE5hbWUoKSk7CiAgICAgfQotIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL211bHRpLW1vZHVsZS9lamIvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL2RldnRlc3QvZWpiMzEvc2luZ2xldG9uL3NlcnZsZXQvTG9jYWxJbml0VHJhY2tlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi9tdWx0aS1tb2R1bGUvZWpiL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9kZXZ0ZXN0L2VqYjMxL3NpbmdsZXRvbi9zZXJ2bGV0L0xvY2FsSW5pdFRyYWNrZXIuamF2YQppbmRleCBkZDQ5YjRkLi5jZjMwNmViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL211bHRpLW1vZHVsZS9lamIvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL2RldnRlc3QvZWpiMzEvc2luZ2xldG9uL3NlcnZsZXQvTG9jYWxJbml0VHJhY2tlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vbXVsdGktbW9kdWxlL2VqYi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvZGV2dGVzdC9lamIzMS9zaW5nbGV0b24vc2VydmxldC9Mb2NhbEluaXRUcmFja2VyLmphdmEKQEAgLTIyLDcgKzIyLDcgQEAKIAogQExvY2FsCiBwdWJsaWMgaW50ZXJmYWNlIExvY2FsSW5pdFRyYWNrZXIgewotICAgIAorCiAgICAgcHVibGljIHZvaWQgYWRkKFN0cmluZyBlbnRyeSk7CiAKICAgICBwdWJsaWMgTWFwPFN0cmluZywgSW50ZWdlcj4gZ2V0SW5pdGlhbGl6ZWROYW1lcygpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi90aHJlZW1vZHVsZXMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vdGhyZWVtb2R1bGVzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOTcxZTEyZi4uYzk4NDFkZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi90aHJlZW1vZHVsZXMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL3RocmVlbW9kdWxlcy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNiArMTUsMTYgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lamIzMS1zaW5nbGV0b24tdGhyZWVtb2R1bGVzIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+XHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic2UuY2xpZW50IiB2YWx1ZT0iY29tLnN1bi5kZXZ0ZXN0LmNsaWVudC5DbGllbnQiLz4KIAogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vdGhyZWVtb2R1bGVzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vdGhyZWVtb2R1bGVzL2J1aWxkLnhtbAppbmRleCBiYTc4N2U1Li5lOTQyM2VjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL3RocmVlbW9kdWxlcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi90aHJlZW1vZHVsZXMvYnVpbGQueG1sCkBAIC0zMCwxNCArMzAsMTQgQEAKICAgICAmdGVzdHByb3BlcnRpZXM7CiAKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQsZGVwbG95Ij4KLQk8YW50Y2FsbCB0YXJnZXQ9InJ1biIvPgotCTxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4iLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgogICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ5LDc3ICs0OSw3NyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDwhLS0gcGFja2FnZSBvdXJzZWx2ZXMgdG8gaW5jbHVkZSBwZXJzaXN0ZW5jZS54bWwgLS0+Ci0JPGVjaG8gbWVzc2FnZT0iQXNzZW1ibGUgZGlyOiAke2Fzc2VtYmxlLmRpcn0gIi8+CisgICAgPGVjaG8gbWVzc2FnZT0iQXNzZW1ibGUgZGlyOiAke2Fzc2VtYmxlLmRpcn0gIi8+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgotICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXIiIAotICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiAKKyAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIuamFyIgorICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgogICAgICAgICAgICAgIHVwZGF0ZT0idHJ1ZSIKICAgICAgICAgICAgICBpbmNsdWRlcyA9IioqLypUcmFja2VyLmNsYXNzLCAqKi9Jbml0T3JkZXJUcmFja2VyQmVhbi5jbGFzcyI+CiAgICAgICAgIDwvamFyPgotICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYjEuamFyIiAKLSAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgCisgICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiMS5qYXIiCisgICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICAgdXBkYXRlPSJ0cnVlIgogICAgICAgICAgICAgIGluY2x1ZGVzID0iKiovKk1vZDEuY2xhc3MsICoqL0xvY2FsSW5pdFRyYWNrZXIuY2xhc3MiPgogICAgICAgICA8L2phcj4KLSAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIyLmphciIgCi0gICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIAorICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYjIuamFyIgorICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgogICAgICAgICAgICAgIHVwZGF0ZT0idHJ1ZSIKICAgICAgICAgICAgICBpbmNsdWRlcyA9IioqLypNb2QyLmNsYXNzLCAqKi9Mb2NhbEluaXRUcmFja2VyLmNsYXNzIj4KICAgICAgICAgPC9qYXI+Ci0gICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIgCi0gICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIAorICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiCisgICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICAgdXBkYXRlPSJ0cnVlIgotCSAgICAgbWFuaWZlc3Q9Ii4vY2xpZW50L01BTklGRVNULk1GIgorICAgICAgICAgbWFuaWZlc3Q9Ii4vY2xpZW50L01BTklGRVNULk1GIgogICAgICAgICAgICAgIGluY2x1ZGVzID0iKiovKlRyYWNrZXIuY2xhc3MsICoqLypDbGllbnQuY2xhc3MiPgogICAgICAgICA8L2phcj4KIAogPCEtLQogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2UtYXBwY2xpZW50amFyLWNvbW1vbiI+Ci0gICAgCQk8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiAKLSAgICAgIAkJCXZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgotICAgIAkJPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5qYXIiIAotICAgICAgCQkJdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4vc3BhY2Uvd29yay92My9hcHBzZXJ2LXRlc3RzL2J1aWxkL21vZHVsZS9hcmNoaXZlL2VqYi1lamIzMS1zaW5nbGV0b24tdGhyZWVtb2R1bGVzLWVqYi5qYXIKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiCisgICAgICAgICAgICAgICAgICB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuamFyIgorICAgICAgICAgICAgICAgICAgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4vc3BhY2Uvd29yay92My9hcHBzZXJ2LXRlc3RzL2J1aWxkL21vZHVsZS9hcmNoaXZlL2VqYi1lamIzMS1zaW5nbGV0b24tdGhyZWVtb2R1bGVzLWVqYi5qYXIKICAgICAgICAgPC9hbnRjYWxsPgogLS0+Ci0gIAk8ZGVsZXRlIGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LmVhciIvPgotICAJPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+Ci0gIAk8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPiAgIAotICAJPGNvcHkgZmlsZT0iJHthcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIgIAlmYWlsb25lcnJvcj0iZmFsc2UiLz4gCi0gIAk8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciI+IAotICAgIAk8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSI+Ci0gICAgICAJPGluY2x1ZGUgbmFtZT0iKmVqYi5qYXIiLz4KLSAgICAgIAk8aW5jbHVkZSBuYW1lPSIqZWpiMS5qYXIiLz4KLSAgICAgIAk8aW5jbHVkZSBuYW1lPSIqZWpiMi5qYXIiLz4KLSAgICAgIAk8aW5jbHVkZSBuYW1lPSIqY2xpZW50LmphciIvPgotICAgIAk8L2ZpbGVzZXQ+Ci0gICAgCTxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iPgotCQk8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci0JCTxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIvPgotICAgIAk8L2ZpbGVzZXQ+Ci0gICAgCTxmaWxlc2V0IGRpcj0iJHtlbnYuQVBTX0hPTUV9IiBpbmNsdWRlcz0ibGliL3JlcG9ydGVyLmphciIvPgotICAJPC9qYXI+ICAgICAgICAKKyAgICAgIDxkZWxldGUgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0uZWFyIi8+CisgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KKyAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CisgICAgICA8Y29weSBmaWxlPSIke2FwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIiAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiPgorICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSI+CisgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKmVqYi5qYXIiLz4KKyAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqZWpiMS5qYXIiLz4KKyAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqZWpiMi5qYXIiLz4KKyAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqY2xpZW50LmphciIvPgorICAgICAgICA8L2ZpbGVzZXQ+CisgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iPgorICAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIi8+CisgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIvPgorICAgICAgICA8L2ZpbGVzZXQ+CisgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuQVBTX0hPTUV9IiBpbmNsdWRlcz0ibGliL3JlcG9ydGVyLmphciIvPgorICAgICAgPC9qYXI+CiAKLSAgICA8L3RhcmdldD4gICAgIAotICAgICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImJ1aWxkIj4KICAgPHByb3BlcnR5IG5hbWU9ImRlcGxveWVkLmFwcCIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIvPgogICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgIDxhcmcgbGluZT0iZGVwbG95Ii8+CiAgICAgPGFyZyBsaW5lPSItLWZvcmNlPXRydWUiLz4KLSAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+ICAgIAorICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KICAgICA8YXJnIGxpbmU9IiR7ZGVwbG95ZWQuYXBwfSIvPgogICA8L2V4ZWM+CiAgIDxlY2hvIG1lc3NhZ2U9IkRlcGxveW1lbnQgb24gdGFyZ2V0IHNlcnZlciAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSBzdWNjZXNzZnVsIi8+Ci0gICAgICAgIAotICAgIDwvdGFyZ2V0PiAKKworICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5fc2UiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuX3NlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgPGVjaG8gbWVzc2FnZT0ic2UuY2xpZW50OiAke3NlLmNsaWVudH0iLz4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgIDxqYXZhICBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi90aHJlZW1vZHVsZXMvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi90aHJlZW1vZHVsZXMvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGFlYjM4YzQuLmFkODg4MDAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vdGhyZWVtb2R1bGVzL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL3RocmVlbW9kdWxlcy9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTMzLDEzICszMywxMyBAQAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKIAotCXByaXZhdGUgc3RhdGljIFN0cmluZ1tdIEVYUEVDVEVEX09SREVSID0gbmV3IFN0cmluZ1tdIHsKLQkJIm9yZy5nbGFzc2Zpc2guZGV2dGVzdC5lamIzMS5zaW5nbGV0b24uc2VydmxldC5Jbml0T3JkZXJUcmFja2VyQmVhbiIsCi0JCSJvcmcuZ2xhc3NmaXNoLmRldnRlc3QuZWpiMzEuc2luZ2xldG9uLm1vZDEuQmVhbkFfTW9kMSIsCi0JCSJvcmcuZ2xhc3NmaXNoLmRldnRlc3QuZWpiMzEuc2luZ2xldG9uLm1vZDEuUm9vdEJlYW5fTW9kMSIsCi0JCSJvcmcuZ2xhc3NmaXNoLmRldnRlc3QuZWpiMzEuc2luZ2xldG9uLm1vZDIuQmVhbkFfTW9kMiIsCi0JCSJvcmcuZ2xhc3NmaXNoLmRldnRlc3QuZWpiMzEuc2luZ2xldG9uLm1vZDIuUm9vdEJlYW5fTW9kMiIKLQl9OworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZ1tdIEVYUEVDVEVEX09SREVSID0gbmV3IFN0cmluZ1tdIHsKKyAgICAgICAgIm9yZy5nbGFzc2Zpc2guZGV2dGVzdC5lamIzMS5zaW5nbGV0b24uc2VydmxldC5Jbml0T3JkZXJUcmFja2VyQmVhbiIsCisgICAgICAgICJvcmcuZ2xhc3NmaXNoLmRldnRlc3QuZWpiMzEuc2luZ2xldG9uLm1vZDEuQmVhbkFfTW9kMSIsCisgICAgICAgICJvcmcuZ2xhc3NmaXNoLmRldnRlc3QuZWpiMzEuc2luZ2xldG9uLm1vZDEuUm9vdEJlYW5fTW9kMSIsCisgICAgICAgICJvcmcuZ2xhc3NmaXNoLmRldnRlc3QuZWpiMzEuc2luZ2xldG9uLm1vZDIuQmVhbkFfTW9kMiIsCisgICAgICAgICJvcmcuZ2xhc3NmaXNoLmRldnRlc3QuZWpiMzEuc2luZ2xldG9uLm1vZDIuUm9vdEJlYW5fTW9kMiIKKyAgICB9OwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CkBAIC01NywyOCArNTcsMjggQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgdGVzdCgpIHsKLQl0cnkgewotIAotCQlTdHJpbmcgbG9va3VwTmFtZSA9ICJqYXZhOmdsb2JhbC9lamItZWpiMzEtc2luZ2xldG9uLXRocmVlbW9kdWxlc0FwcC9lamItZWpiMzEtc2luZ2xldG9uLXRocmVlbW9kdWxlcy1lamIvSW5pdE9yZGVyVHJhY2tlckJlYW4hb3JnLmdsYXNzZmlzaC5kZXZ0ZXN0LmVqYjMxLnNpbmdsZXRvbi5zZXJ2bGV0LlJlbW90ZUluaXRUcmFja2VyIjsKLQkJU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIioqKiAiICsgbG9va3VwTmFtZSArICIgKioqIik7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiKTsKLQkJdHJhY2tlciA9IChSZW1vdGVJbml0VHJhY2tlcikgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKGxvb2t1cE5hbWUpOwotCSAgICAKLQkJTGlzdDxTdHJpbmc+IGFjdHVhbExpc3QgPSB0cmFja2VyLmdldEluaXRpYWxpemVkTmFtZXMoKTsKLQkJYm9vbGVhbiByZXN1bHQgPSBhY3R1YWxMaXN0LnNpemUoKSA9PSBFWFBFQ1RFRF9PUkRFUi5sZW5ndGg7Ci0JCWZvciAoaW50IGk9MDsgaTxFWFBFQ1RFRF9PUkRFUi5sZW5ndGg7IGkrKykgewotCQkJaWYgKCEgRVhQRUNURURfT1JERVJbaV0uZXF1YWxzKGFjdHVhbExpc3QuZ2V0KGkpKSkgewotCQkJCXJlc3VsdCA9IGZhbHNlOwotCQkJfQotCQl9CisgICAgdHJ5IHsKKworICAgICAgICBTdHJpbmcgbG9va3VwTmFtZSA9ICJqYXZhOmdsb2JhbC9lamItZWpiMzEtc2luZ2xldG9uLXRocmVlbW9kdWxlc0FwcC9lamItZWpiMzEtc2luZ2xldG9uLXRocmVlbW9kdWxlcy1lamIvSW5pdE9yZGVyVHJhY2tlckJlYW4hb3JnLmdsYXNzZmlzaC5kZXZ0ZXN0LmVqYjMxLnNpbmdsZXRvbi5zZXJ2bGV0LlJlbW90ZUluaXRUcmFja2VyIjsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKiAiICsgbG9va3VwTmFtZSArICIgKioqIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiKTsKKyAgICAgICAgdHJhY2tlciA9IChSZW1vdGVJbml0VHJhY2tlcikgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKGxvb2t1cE5hbWUpOworCisgICAgICAgIExpc3Q8U3RyaW5nPiBhY3R1YWxMaXN0ID0gdHJhY2tlci5nZXRJbml0aWFsaXplZE5hbWVzKCk7CisgICAgICAgIGJvb2xlYW4gcmVzdWx0ID0gYWN0dWFsTGlzdC5zaXplKCkgPT0gRVhQRUNURURfT1JERVIubGVuZ3RoOworICAgICAgICBmb3IgKGludCBpPTA7IGk8RVhQRUNURURfT1JERVIubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGlmICghIEVYUEVDVEVEX09SREVSW2ldLmVxdWFscyhhY3R1YWxMaXN0LmdldChpKSkpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogU3lzdGVtLm91dC5wcmludGxuKGFjdHVhbExpc3QpOwotICAgICAgICAJc3RhdC5hZGRTdGF0dXMoIkVKQiBzaW5nbGV0b24tdGhyZWUtbW9kdWxlLWRlcGVuZGVuY3kiLAotCQkJKHJlc3VsdCA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCkpOwotCX0gY2F0Y2ggKFRocm93YWJsZSB0aCkgewotCQl0aC5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgCXN0YXQuYWRkU3RhdHVzKCJFSkIgc2luZ2xldG9uLXRocmVlLW1vZHVsZS1kZXBlbmRlbmN5Iiwgc3RhdC5GQUlMKTsKLQl9CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiRUpCIHNpbmdsZXRvbi10aHJlZS1tb2R1bGUtZGVwZW5kZW5jeSIsCisgICAgICAgICAgICAocmVzdWx0ID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKSk7CisgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHRoKSB7CisgICAgICAgIHRoLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIkVKQiBzaW5nbGV0b24tdGhyZWUtbW9kdWxlLWRlcGVuZGVuY3kiLCBzdGF0LkZBSUwpOworICAgIH0KICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vdGhyZWVtb2R1bGVzL2VqYi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvZGV2dGVzdC9lamIzMS9zaW5nbGV0b24vbW9kMS9Sb290QmVhbl9Nb2QxLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL3RocmVlbW9kdWxlcy9lamIvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL2RldnRlc3QvZWpiMzEvc2luZ2xldG9uL21vZDEvUm9vdEJlYW5fTW9kMS5qYXZhCmluZGV4IDFmZGM4ZTAuLjY4MWQwNDEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vdGhyZWVtb2R1bGVzL2VqYi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvZGV2dGVzdC9lamIzMS9zaW5nbGV0b24vbW9kMS9Sb290QmVhbl9Nb2QxLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi90aHJlZW1vZHVsZXMvZWpiL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9kZXZ0ZXN0L2VqYjMxL3NpbmdsZXRvbi9tb2QxL1Jvb3RCZWFuX01vZDEuamF2YQpAQCAtNDYsNSArNDYsNSBAQAogICAgIHB1YmxpYyB2b2lkIGFmdGVySW5pdCgpIHsKICAgICAgICAgdHJhY2tlci5hZGQodGhpcy5nZXRDbGFzcygpLmdldE5hbWUoKSk7CiAgICAgfQotIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL3RocmVlbW9kdWxlcy9lamIvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL2RldnRlc3QvZWpiMzEvc2luZ2xldG9uL21vZDIvQmVhbkFfTW9kMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi90aHJlZW1vZHVsZXMvZWpiL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9kZXZ0ZXN0L2VqYjMxL3NpbmdsZXRvbi9tb2QyL0JlYW5BX01vZDIuamF2YQppbmRleCAyYjYwMjk1Li4zOTA5Y2M0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL3RocmVlbW9kdWxlcy9lamIvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL2RldnRlc3QvZWpiMzEvc2luZ2xldG9uL21vZDIvQmVhbkFfTW9kMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vdGhyZWVtb2R1bGVzL2VqYi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvZGV2dGVzdC9lamIzMS9zaW5nbGV0b24vbW9kMi9CZWFuQV9Nb2QyLmphdmEKQEAgLTM3LDEwICszNywxMCBAQAogCiAgICAgQEVKQgogICAgIExvY2FsSW5pdFRyYWNrZXIgdHJhY2tlcjsKLSAgICAKKwogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHVibGljIHZvaWQgYWZ0ZXJJbml0KCkgewogICAgICAgICB0cmFja2VyLmFkZCh0aGlzLmdldENsYXNzKCkuZ2V0TmFtZSgpKTsKICAgICB9Ci0gCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vdGhyZWVtb2R1bGVzL2VqYi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvZGV2dGVzdC9lamIzMS9zaW5nbGV0b24vbW9kMi9Sb290QmVhbl9Nb2QyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL3RocmVlbW9kdWxlcy9lamIvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL2RldnRlc3QvZWpiMzEvc2luZ2xldG9uL21vZDIvUm9vdEJlYW5fTW9kMi5qYXZhCmluZGV4IDkwMGQyMTEuLjY3Nzg3Y2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vdGhyZWVtb2R1bGVzL2VqYi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvZGV2dGVzdC9lamIzMS9zaW5nbGV0b24vbW9kMi9Sb290QmVhbl9Nb2QyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi90aHJlZW1vZHVsZXMvZWpiL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9kZXZ0ZXN0L2VqYjMxL3NpbmdsZXRvbi9tb2QyL1Jvb3RCZWFuX01vZDIuamF2YQpAQCAtNDcsNSArNDcsNSBAQAogICAgIHB1YmxpYyB2b2lkIGFmdGVySW5pdCgpIHsKICAgICAgICAgdHJhY2tlci5hZGQodGhpcy5nZXRDbGFzcygpLmdldE5hbWUoKSk7CiAgICAgfQotIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL3RocmVlbW9kdWxlcy9lamIvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL2RldnRlc3QvZWpiMzEvc2luZ2xldG9uL3NlcnZsZXQvTG9jYWxJbml0VHJhY2tlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3NpbmdsZXRvbi90aHJlZW1vZHVsZXMvZWpiL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9kZXZ0ZXN0L2VqYjMxL3NpbmdsZXRvbi9zZXJ2bGV0L0xvY2FsSW5pdFRyYWNrZXIuamF2YQppbmRleCBhMmNjZGQ4Li5kNDFiZDBjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvc2luZ2xldG9uL3RocmVlbW9kdWxlcy9lamIvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL2RldnRlc3QvZWpiMzEvc2luZ2xldG9uL3NlcnZsZXQvTG9jYWxJbml0VHJhY2tlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS9zaW5nbGV0b24vdGhyZWVtb2R1bGVzL2VqYi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvZGV2dGVzdC9lamIzMS9zaW5nbGV0b24vc2VydmxldC9Mb2NhbEluaXRUcmFja2VyLmphdmEKQEAgLTIyLDcgKzIyLDcgQEAKIAogQExvY2FsCiBwdWJsaWMgaW50ZXJmYWNlIExvY2FsSW5pdFRyYWNrZXIgewotICAgIAorCiAgICAgcHVibGljIHZvaWQgYWRkKFN0cmluZyBlbnRyeSk7CiAKICAgICBwdWJsaWMgTGlzdCBnZXRJbml0aWFsaXplZE5hbWVzKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZWNjZjJlNy4uZWQ3YmVmMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvYXJvdW5kdGltZW91dC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2Fyb3VuZHRpbWVvdXQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjIgKzE1LDIyIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzEtYXJvdW5kdGltZW91dCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzaW1wbGUuY2xpZW50IiB2YWx1ZT0iY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMS5hcm91bmR0aW1lb3V0LmNsaWVudC5TdGFuZGFsb25lQ2xpZW50Ii8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2Fyb3VuZHRpbWVvdXQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvYXJvdW5kdGltZW91dC9idWlsZC54bWwKaW5kZXggYjEzMGZhNy4uYWE5YjAzMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvYXJvdW5kdGltZW91dC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvYXJvdW5kdGltZW91dC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDE0ICs0NiwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovU2Z1bCouY2xhc3MsKiovU2xlc3MqLmNsYXNzLCoqL0NvbW1vbiouY2xhc3MsKiovSW50ZXJjZXB0b3IqLmNsYXNzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovQ2xpZW50LmNsYXNzLCoqL1NmdWwuY2xhc3MsKiovU2xlc3MuY2xhc3MsKiovU2Z1bDIuY2xhc3MsKiovU2xlc3MzLmNsYXNzLCoqL1NsZXNzNC5jbGFzcywqKi9TbGVzczUuY2xhc3MsKiovU2xlc3M2LmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjEsMTAgKzYxLDEwIEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2Fyb3VuZHRpbWVvdXQvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvYXJvdW5kdGltZW91dC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggOGI3ZTM0Zi4uNDhjYWFjNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvYXJvdW5kdGltZW91dC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvYXJvdW5kdGltZW91dC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI1LDcgKzI1LDcgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24gewpAQCAtMzYsMTEgKzM2LDExIEBACiAgICAgICAgIFRocmVhZC5zbGVlcCg3MDAwKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiZWpiLWVqYjMxLWFyb3VuZHRpbWVvdXRJRCIpOwotICAgIH0gIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBARUpCIFNsZXNzMyBzbGVzczM7CiAgICAgcHJpdmF0ZSBzdGF0aWMgQEVKQiBTbGVzczQgc2xlc3M0OwogICAgIHByaXZhdGUgc3RhdGljIEBFSkIgU2xlc3M1IHNsZXNzNTsKQEAgLTgxLDggKzgxLDggQEAKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIgLCBzdGF0LkZBSUwpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgIAlyZXR1cm47CisKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvYXJvdW5kdGltZW91dC9lamIvQ29tbW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2VqYi9Db21tb24uamF2YQppbmRleCBiNmViM2E3Li5mYWYyYTFmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2VqYi9Db21tb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2VqYi9Db21tb24uamF2YQpAQCAtMzYsMTYgKzM2LDE2IEBACiAKICAgICBzdGF0aWMgdm9pZCBhcm91bmRUaW1lb3V0Q2FsbGVkKEludm9jYXRpb25Db250ZXh0IGN0eCwgU3RyaW5nIGlkKSB7CiAKLSAgICAgICAgTGlzdDxTdHJpbmc+IGFyb3VuZHRpbWVvdXQgPSAoTGlzdDxTdHJpbmc+KSAKKyAgICAgICAgTGlzdDxTdHJpbmc+IGFyb3VuZHRpbWVvdXQgPSAoTGlzdDxTdHJpbmc+KQogICAgICAgICAgICAgY3R4LmdldENvbnRleHREYXRhKCkuZ2V0KElOVEVSQ0VQVE9SU19QUk9QKTsKLSAgICAgICAgCisKICAgICAgICAgaWYoIGFyb3VuZHRpbWVvdXQgPT0gbnVsbCApIHsKICAgICAgICAgICAgIGFyb3VuZHRpbWVvdXQgPSBuZXcgTGlua2VkTGlzdDxTdHJpbmc+KCk7CiAgICAgICAgICAgICBjdHguZ2V0Q29udGV4dERhdGEoKS5wdXQoSU5URVJDRVBUT1JTX1BST1AsIGFyb3VuZHRpbWVvdXQpOwogICAgICAgICB9CiAKICAgICAgICAgYXJvdW5kdGltZW91dC5hZGQoaWQpOwotICAgICAgICAKKwogICAgIH0KIAogICAgIHN0YXRpYyB2b2lkIGNoZWNrUmVzdWx0cyhJbnZvY2F0aW9uQ29udGV4dCBjdHgpIHsKQEAgLTgyLDkgKzgyLDkgQEAKICAgICAgICAgICAgIGZvciggY2hhciBuZXh0Q2hhciA6IG1ldGhvZE5hbWVVcHBlci50b0NoYXJBcnJheSgpICkgewogICAgICAgICAgICAgICAgIGV4cGVjdGVkLmFkZChuZXh0Q2hhciArICIiKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAKKyAgICAgICAgfQogCi0gICAgICAgIExpc3Q8U3RyaW5nPiBhY3R1YWwgPSAoTGlzdDxTdHJpbmc+KSAKKyAgICAgICAgTGlzdDxTdHJpbmc+IGFjdHVhbCA9IChMaXN0PFN0cmluZz4pCiAgICAgICAgICAgICBjdHguZ2V0Q29udGV4dERhdGEoKS5nZXQoSU5URVJDRVBUT1JTX1BST1ApOwogCiAgICAgICAgIFN0cmluZyBtc2cgPSAiRXhwZWN0ZWQgIiArIGV4cGVjdGVkICsgIiBmb3IgbWV0aG9kICIgKwpAQCAtMTAxLDcgKzEwMSw3IEBACiAgICAgICAgIH0KICAgICAgICAgY2FsbHMuYWRkKGluZm8pOwogICAgIH0KLSAgIAorCiAgICAgc3RhdGljIHZvaWQgY2hlY2tSZXN1bHRzKFN0cmluZyBzMCwgaW50IGV4cGVjdGVkKSB7CiAgICAgICAgIExpc3Q8U3RyaW5nPiByZXN1bHRzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CiAgICAgICAgIGZvciAoU3RyaW5nIHMgOiBjYWxscykgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvYXJvdW5kdGltZW91dC9lamIvSW50ZXJjZXB0b3JBLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2VqYi9JbnRlcmNlcHRvckEuamF2YQppbmRleCA2OTk2NDBiLi5jY2ViZjVlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2VqYi9JbnRlcmNlcHRvckEuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2VqYi9JbnRlcmNlcHRvckEuamF2YQpAQCAtMjYsNyArMjYsNyBAQAogcHVibGljIGNsYXNzIEludGVyY2VwdG9yQSB7CiAKICAgICBAUmVzb3VyY2UgU2Vzc2lvbkNvbnRleHQgc2Vzc2lvbkN0eDsKLSAgICAKKwogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIHBvc3RDb25zdHJ1Y3QoSW52b2NhdGlvbkNvbnRleHQgY3R4KSB7CiAgICAgICAgIHRyeSB7CkBAIC0zOCw3ICszOCw3IEBACiAKICAgICBAQXJvdW5kVGltZW91dAogICAgIE9iamVjdCBhcm91bmRUaW1lb3V0KEludm9jYXRpb25Db250ZXh0IGN0eCkKLQkgICAgICAgIHRocm93cyBFeGNlcHRpb24geworICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKIC8qKgogICAgICAgICAvLyBhY2Nlc3MgaW5qZWN0ZWQgZW52aXJvbm1lbnQgZGVwZW5kZW5jeQpAQCAtNDksMTAgKzQ5LDEwIEBACiAgICAgICAgIC8vIGxvb2sgdXAgZWpiLXJlZiBkZWZpbmVkIHdpdGhpbiBkZWZhdWx0IGludGVyY2VwdG9yIGluIGVqYi1qYXIueG1sCiAgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgIFNsZXNzMyBzbGVzczMgPSAoU2xlc3MzKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NsZXNzMyIpOwotICAgICAgICAKLSAgICAgICAgCisKKwogICAgICAgICBDb21tb24uYXJvdW5kVGltZW91dENhbGxlZChjdHgsICJBIik7CiAgICAgICAgIHJldHVybiBjdHgucHJvY2VlZCgpOwogICAgIH0KLSAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2VqYi9JbnRlcmNlcHRvckIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2Fyb3VuZHRpbWVvdXQvZWpiL0ludGVyY2VwdG9yQi5qYXZhCmluZGV4IDc0MTQ1MmQuLjY5MDkzZTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2Fyb3VuZHRpbWVvdXQvZWpiL0ludGVyY2VwdG9yQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2Fyb3VuZHRpbWVvdXQvZWpiL0ludGVyY2VwdG9yQi5qYXZhCkBAIC0zMiw5ICszMiw5IEBACiAKICAgICAvLyBhcm91bmQtdGltZW91dCBkZWNsYXJlZCBpbiBlamItamFyLnhtbAogICAgIE9iamVjdCBhcm91bmRUaW1lb3V0KEludm9jYXRpb25Db250ZXh0IGN0eCkKLQkgICAgICAgIHRocm93cyBFeGNlcHRpb24geworICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIENvbW1vbi5hcm91bmRUaW1lb3V0Q2FsbGVkKGN0eCwgIkIiKTsKICAgICAgICAgcmV0dXJuIGN0eC5wcm9jZWVkKCk7CiAgICAgfQotICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2Fyb3VuZHRpbWVvdXQvZWpiL0ludGVyY2VwdG9yQy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvYXJvdW5kdGltZW91dC9lamIvSW50ZXJjZXB0b3JDLmphdmEKaW5kZXggZDAxNWI5Yi4uODJmOGU0NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvYXJvdW5kdGltZW91dC9lamIvSW50ZXJjZXB0b3JDLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvYXJvdW5kdGltZW91dC9lamIvSW50ZXJjZXB0b3JDLmphdmEKQEAgLTMzLDkgKzMzLDkgQEAKIAogICAgIEBBcm91bmRUaW1lb3V0CiAgICAgT2JqZWN0IGFyb3VuZFRpbWVvdXQoSW52b2NhdGlvbkNvbnRleHQgY3R4KQotCSAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgQ29tbW9uLmFyb3VuZFRpbWVvdXRDYWxsZWQoY3R4LCAiQyIpOwogICAgICAgICByZXR1cm4gY3R4LnByb2NlZWQoKTsKICAgICB9Ci0gICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvYXJvdW5kdGltZW91dC9lamIvSW50ZXJjZXB0b3JELmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2VqYi9JbnRlcmNlcHRvckQuamF2YQppbmRleCAxMDRlZjhlLi43M2YyMTIwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2VqYi9JbnRlcmNlcHRvckQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2VqYi9JbnRlcmNlcHRvckQuamF2YQpAQCAtMzUsNyArMzUsNyBAQAogICAgIEBBcm91bmRUaW1lb3V0CiAgICAgQEFyb3VuZEludm9rZQogICAgIE9iamVjdCBhcm91bmRBbGwoSW52b2NhdGlvbkNvbnRleHQgY3R4KQotCSAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgQ29tbW9uLmFyb3VuZFRpbWVvdXRDYWxsZWQoY3R4LCAiRCIpOwogICAgICAgICBPYmplY3QgaW5zdGFuY2UgPSBjdHguZ2V0VGFyZ2V0KCk7CiAgICAgICAgIGlmKCBpbnN0YW5jZSBpbnN0YW5jZW9mIFNsZXNzRUpCNSApIHsKQEAgLTQ0LDUgKzQ0LDUgQEAKIAogICAgICAgICByZXR1cm4gY3R4LnByb2NlZWQoKTsKICAgICB9Ci0gICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvYXJvdW5kdGltZW91dC9lamIvSW50ZXJjZXB0b3JFLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2VqYi9JbnRlcmNlcHRvckUuamF2YQppbmRleCA1NmNiMGNmLi5hYTNkNWIxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2VqYi9JbnRlcmNlcHRvckUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2VqYi9JbnRlcmNlcHRvckUuamF2YQpAQCAtMzMsOSArMzMsOSBAQAogCiAgICAgQEFyb3VuZFRpbWVvdXQKICAgICBPYmplY3QgYXJvdW5kVGltZW91dChJbnZvY2F0aW9uQ29udGV4dCBjdHgpCi0JICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBDb21tb24uYXJvdW5kVGltZW91dENhbGxlZChjdHgsICJFIik7CiAgICAgICAgIHJldHVybiBjdHgucHJvY2VlZCgpOwogICAgIH0KLSAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2VqYi9JbnRlcmNlcHRvckYuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2Fyb3VuZHRpbWVvdXQvZWpiL0ludGVyY2VwdG9yRi5qYXZhCmluZGV4IDM0YzkxYWIuLmVhNGI4OTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2Fyb3VuZHRpbWVvdXQvZWpiL0ludGVyY2VwdG9yRi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2Fyb3VuZHRpbWVvdXQvZWpiL0ludGVyY2VwdG9yRi5qYXZhCkBAIC0zMyw5ICszMyw5IEBACiAKICAgICBAQXJvdW5kVGltZW91dAogICAgIE9iamVjdCBhcm91bmRUaW1lb3V0KEludm9jYXRpb25Db250ZXh0IGN0eCkKLQkgICAgICAgIHRocm93cyBFeGNlcHRpb24geworICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIENvbW1vbi5hcm91bmRUaW1lb3V0Q2FsbGVkKGN0eCwgIkYiKTsKICAgICAgICAgcmV0dXJuIGN0eC5wcm9jZWVkKCk7CiAgICAgfQotICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2Fyb3VuZHRpbWVvdXQvZWpiL0ludGVyY2VwdG9yRy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvYXJvdW5kdGltZW91dC9lamIvSW50ZXJjZXB0b3JHLmphdmEKaW5kZXggYzc0N2ZjMS4uNGYzNWFmOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvYXJvdW5kdGltZW91dC9lamIvSW50ZXJjZXB0b3JHLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvYXJvdW5kdGltZW91dC9lamIvSW50ZXJjZXB0b3JHLmphdmEKQEAgLTM0LDcgKzM0LDcgQEAKIAogICAgIEBBcm91bmRUaW1lb3V0CiAgICAgT2JqZWN0IGFyb3VuZFRpbWVvdXQoSW52b2NhdGlvbkNvbnRleHQgY3R4KQotCSAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgQ29tbW9uLmFyb3VuZFRpbWVvdXRDYWxsZWQoY3R4LCAiRyIpOwogICAgICAgICBPYmplY3QgaW5zdGFuY2UgPSBjdHguZ2V0VGFyZ2V0KCk7CiAgICAgICAgIGlmKCBpbnN0YW5jZSBpbnN0YW5jZW9mIFNsZXNzRUpCNiApIHsKQEAgLTQzLDEwICs0MywxMCBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjdHgucHJvY2VlZCgpOwogICAgIH0KLSAgIAorCiAgICAgQEFyb3VuZEludm9rZQogICAgIE9iamVjdCBhcm91bmRJbnZva2UoSW52b2NhdGlvbkNvbnRleHQgY3R4KQotCSAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgT2JqZWN0IGluc3RhbmNlID0gY3R4LmdldFRhcmdldCgpOwogICAgICAgICBpZiggaW5zdGFuY2UgaW5zdGFuY2VvZiBTbGVzc0VKQjYgKSB7CiAgICAgICAgICAgICAoKFNsZXNzRUpCNikgaW5zdGFuY2UpLmFyb3VuZFRpbWVvdXRDYWxsZWQgPSBmYWxzZTsKQEAgLTU0LDUgKzU0LDUgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY3R4LnByb2NlZWQoKTsKICAgICB9Ci0gICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvYXJvdW5kdGltZW91dC9lamIvU2xlc3MzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2VqYi9TbGVzczMuamF2YQppbmRleCBjZmM0ZTEwLi5hZjYxY2I1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2VqYi9TbGVzczMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2VqYi9TbGVzczMuamF2YQpAQCAtMTcsNyArMTcsNyBAQAogcGFja2FnZSBjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMxLmFyb3VuZHRpbWVvdXQ7CiAKIGltcG9ydCBqYWthcnRhLmVqYi5SZW1vdGU7Ci0JCisKIEBSZW1vdGUKIHB1YmxpYyBpbnRlcmZhY2UgU2xlc3MzCiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2VqYi9TbGVzczQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2Fyb3VuZHRpbWVvdXQvZWpiL1NsZXNzNC5qYXZhCmluZGV4IDViNTZhYTYuLjE0YTk2MWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2Fyb3VuZHRpbWVvdXQvZWpiL1NsZXNzNC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2Fyb3VuZHRpbWVvdXQvZWpiL1NsZXNzNC5qYXZhCkBAIC0xNyw3ICsxNyw3IEBACiBwYWNrYWdlIGNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzEuYXJvdW5kdGltZW91dDsKIAogaW1wb3J0IGpha2FydGEuZWpiLlJlbW90ZTsKLQkKKwogQFJlbW90ZQogcHVibGljIGludGVyZmFjZSBTbGVzczQKIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2Fyb3VuZHRpbWVvdXQvZWpiL1NsZXNzNS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvYXJvdW5kdGltZW91dC9lamIvU2xlc3M1LmphdmEKaW5kZXggNGZjYjMxZS4uYzIzMzI5NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvYXJvdW5kdGltZW91dC9lamIvU2xlc3M1LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvYXJvdW5kdGltZW91dC9lamIvU2xlc3M1LmphdmEKQEAgLTE3LDcgKzE3LDcgQEAKIHBhY2thZ2UgY29tLnN1bi5zMWFzZGV2LmVqYi5lamIzMS5hcm91bmR0aW1lb3V0OwogCiBpbXBvcnQgamFrYXJ0YS5lamIuUmVtb3RlOwotCQorCiBAUmVtb3RlCiBwdWJsaWMgaW50ZXJmYWNlIFNsZXNzNQogewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvYXJvdW5kdGltZW91dC9lamIvU2xlc3M2LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2VqYi9TbGVzczYuamF2YQppbmRleCA3N2Y5NGRiLi4wZWFhNDU5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2VqYi9TbGVzczYuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2VqYi9TbGVzczYuamF2YQpAQCAtMTcsNyArMTcsNyBAQAogcGFja2FnZSBjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMxLmFyb3VuZHRpbWVvdXQ7CiAKIGltcG9ydCBqYWthcnRhLmVqYi5SZW1vdGU7Ci0JCisKIEBSZW1vdGUKIHB1YmxpYyBpbnRlcmZhY2UgU2xlc3M2CiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2VqYi9TbGVzc0VKQjMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2Fyb3VuZHRpbWVvdXQvZWpiL1NsZXNzRUpCMy5qYXZhCmluZGV4IDAxOGNmOTIuLmEyZjBkNTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2Fyb3VuZHRpbWVvdXQvZWpiL1NsZXNzRUpCMy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2Fyb3VuZHRpbWVvdXQvZWpiL1NsZXNzRUpCMy5qYXZhCkBAIC02MSwxOCArNjEsMTggQEAKICAgICBASW50ZXJjZXB0b3JzKHtJbnRlcmNlcHRvckUuY2xhc3MsIEludGVyY2VwdG9yRi5jbGFzc30pCiAgICAgQFNjaGVkdWxlKHNlY29uZD0iKiIsIG1pbnV0ZT0iKiIsIGhvdXI9IioiLCBpbmZvPSJTbGVzc0VKQjMtZGNlZiIpCiAgICAgcHJpdmF0ZSB2b2lkIGRjZWYoKSB7fQotICAgIAorCiAgICAgQEV4Y2x1ZGVEZWZhdWx0SW50ZXJjZXB0b3JzCiAgICAgQEV4Y2x1ZGVDbGFzc0ludGVyY2VwdG9ycwogICAgIEBTY2hlZHVsZShzZWNvbmQ9IioiLCBtaW51dGU9IioiLCBob3VyPSIqIiwgaW5mbz0iU2xlc3NFSkIzLW5vdGhpbmciKQogICAgIHByaXZhdGUgdm9pZCBub3RoaW5nKCkge30KIAotICAgIEBJbnRlcmNlcHRvcnMoe0ludGVyY2VwdG9yRS5jbGFzcywgSW50ZXJjZXB0b3JGLmNsYXNzfSkgICAgCisgICAgQEludGVyY2VwdG9ycyh7SW50ZXJjZXB0b3JFLmNsYXNzLCBJbnRlcmNlcHRvckYuY2xhc3N9KQogICAgIEBTY2hlZHVsZShzZWNvbmQ9IioiLCBtaW51dGU9IioiLCBob3VyPSIqIiwgaW5mbz0iU2xlc3NFSkIzLWRjYmFlZiIpCiAgICAgcHJpdmF0ZSB2b2lkIGRjYmFlZigpIHt9CiAKICAgICAvLyB0b3RhbCBvcmRlcmluZyBvdmVycmlkZGVuIGluIGRlcGxveW1lbnQgZGVzY3JpcHRvcgotICAgIEBJbnRlcmNlcHRvcnMoe0ludGVyY2VwdG9yRS5jbGFzcywgSW50ZXJjZXB0b3JGLmNsYXNzfSkgICAgCisgICAgQEludGVyY2VwdG9ycyh7SW50ZXJjZXB0b3JFLmNsYXNzLCBJbnRlcmNlcHRvckYuY2xhc3N9KQogICAgIEBTY2hlZHVsZShzZWNvbmQ9IioiLCBtaW51dGU9IioiLCBob3VyPSIqIiwgaW5mbz0iU2xlc3NFSkIzLWFiY2RlZiIpCiAgICAgcHJpdmF0ZSB2b2lkIGFiY2RlZigpIHt9CiAKQEAgLTkxLDcgKzkxLDcgQEAKICAgICAgICAgQ29tbW9uLmNoZWNrUmVzdWx0cyhjdHgpOwogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICBAQXJvdW5kSW52b2tlCiAgICAgcHJpdmF0ZSBPYmplY3QgYXJvdW5kSW52b2tlKEludm9jYXRpb25Db250ZXh0IGN0eCkgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKQEAgLTEwMSw3ICsxMDEsNyBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjdHgucHJvY2VlZCgpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHZlcmlmeSgpIHsKICAgICAgICAgQ29tbW9uLmNoZWNrUmVzdWx0cygiU2xlc3NFSkIzIiwgRVhQRUNURUQpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2Fyb3VuZHRpbWVvdXQvZWpiL1NsZXNzRUpCNC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvYXJvdW5kdGltZW91dC9lamIvU2xlc3NFSkI0LmphdmEKaW5kZXggODEyYmU5OS4uMzlmYmRlZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvYXJvdW5kdGltZW91dC9lamIvU2xlc3NFSkI0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvYXJvdW5kdGltZW91dC9lamIvU2xlc3NFSkI0LmphdmEKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICAvLyBhcm91bmRUaW1lb3V0IHNob3VsZCBiZSBzdGlsbCBmYWxzZSwgYW5kIGV4Y2VwdGlvbiBpcyBleHBlY3RlZC4KICAgICBAU2NoZWR1bGUoc2Vjb25kPSIqIiwgbWludXRlPSIqIiwgaG91cj0iKiIsIGluZm89IlNsZXNzRUpCNC1jYmQiKQogICAgIHB1YmxpYyB2b2lkIGNiZCgpIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbiBTbGVzc0VKQjQ6Y2JkKCkuICBhcm91bmRUaW1lb3V0Q2FsbGVkID0gIiArIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIFNsZXNzRUpCNDpjYmQoKS4gIGFyb3VuZFRpbWVvdXRDYWxsZWQgPSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyb3VuZFRpbWVvdXRDYWxsZWQpOwogCiAgICAgICAgIC8vIGEgbGl0dGxlIGV4dHJhIGNoZWNraW5nIHRvIG1ha2Ugc3VyZSBhcm91bmRUaW1lb3V0IGlzIGludm9rZWQuLi4KQEAgLTY4LDEzICs2OCwxMyBAQAogICAgIEBTY2hlZHVsZShzZWNvbmQ9IioiLCBtaW51dGU9IioiLCBob3VyPSIqIiwgaW5mbz0iU2xlc3NFSkI0LWFiZWYiKQogICAgIHB1YmxpYyB2b2lkIGFiZWYoVGltZXIgdCkge30KIAotICAgIC8vIEBFeGNsdWRlRGVmYXVsdEludGVyY2VwdG9ycyBpcyBhIG5vLW9wIGhlcmUgc2luY2UgaXQgCisgICAgLy8gQEV4Y2x1ZGVEZWZhdWx0SW50ZXJjZXB0b3JzIGlzIGEgbm8tb3AgaGVyZSBzaW5jZSBpdAogICAgIC8vIHdhcyBhbHJlYWR5IGV4Y2x1ZGVkIGF0IGNsYXNzLWxldmVsCiAgICAgQEV4Y2x1ZGVEZWZhdWx0SW50ZXJjZXB0b3JzCiAgICAgQEludGVyY2VwdG9ycyh7SW50ZXJjZXB0b3JFLmNsYXNzLCBJbnRlcmNlcHRvckYuY2xhc3N9KQogICAgIEBTY2hlZHVsZShzZWNvbmQ9IioiLCBtaW51dGU9IioiLCBob3VyPSIqIiwgaW5mbz0iU2xlc3NFSkI0LWNiZGVmIikKICAgICBwdWJsaWMgdm9pZCBjYmRlZigpIHt9Ci0gICAgCisKICAgICBARXhjbHVkZUNsYXNzSW50ZXJjZXB0b3JzCiAgICAgQFNjaGVkdWxlKHNlY29uZD0iKiIsIG1pbnV0ZT0iKiIsIGhvdXI9IioiLCBpbmZvPSJTbGVzc0VKQjQtbm90aGluZyIpCiAgICAgcHVibGljIHZvaWQgbm90aGluZygpIHt9CkBAIC05MSw3ICs5MSw3IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgdmVyaWZ5KCkgewogICAgICAgICBDb21tb24uY2hlY2tSZXN1bHRzKCJTbGVzc0VKQjQiLCBFWFBFQ1RFRCk7CiAgICAgICAgIENvbGxlY3Rpb248VGltZXI+IHRpbWVycyA9IHRpbWVyU3ZjLmdldFRpbWVycygpOwpAQCAtMTAwLDUgKzEwMCw1IEBACiAgICAgICAgIGFyb3VuZFRpbWVvdXRDYWxsZWQgPSBmYWxzZTsKICAgICB9CiB9Ci0gICAgCisKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvYXJvdW5kdGltZW91dC9lamIvU2xlc3NFSkI1LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2VqYi9TbGVzc0VKQjUuamF2YQppbmRleCBlYmRhMWJhLi44MWU4NDRjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2VqYi9TbGVzc0VKQjUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2VqYi9TbGVzc0VKQjUuamF2YQpAQCAtNDAsMTggKzQwLDE4IEBACiAKICAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQgRVhQRUNURUQgPSAzOwogCi0gICAgLy8gQ2FsbGVkIGFzIGEgdGltZW91dCBhbmQgdGhyb3VnaCBpbnRlcmZhY2UuIEluZGVyY2VwdG9yRCB3aWxsIAorICAgIC8vIENhbGxlZCBhcyBhIHRpbWVvdXQgYW5kIHRocm91Z2ggaW50ZXJmYWNlLiBJbmRlcmNlcHRvckQgd2lsbAogICAgIC8vIHNldCBhcm91bmRBbGxDYWxsZWQgdG8gdHJ1ZSBlaXRoZXIgd2F5LgogICAgIEBTY2hlZHVsZShzZWNvbmQ9IioiLCBtaW51dGU9IioiLCBob3VyPSIqIiwgaW5mbz0iU2xlc3NFSkI1LWFiZGMiKQogICAgIHB1YmxpYyB2b2lkIGFiZGMoKSB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gU2xlc3NFSkI1OmFiZGMoKS4gIGFyb3VuZFRpbWVvdXRDYWxsZWQgPSAiICsgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gU2xlc3NFSkI1OmFiZGMoKS4gIGFyb3VuZFRpbWVvdXRDYWxsZWQgPSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyb3VuZFRpbWVvdXRDYWxsZWQpOwogCiAgICAgICAgIC8vIGEgbGl0dGxlIGV4dHJhIGNoZWNraW5nIHRvIG1ha2Ugc3VyZSBBcm91bmRUaW1lb3V0IGlzIGludm9rZWQuLi4KICAgICAgICAgaWYoICFhcm91bmRUaW1lb3V0Q2FsbGVkICkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiYmVhbiBjbGFzcyBhcm91bmRUaW1lb3V0IG5vdCBjYWxsZWQiKTsKICAgICAgICAgfQotICAgICAgICAvLyBFbm91Z2ggaWYgaXQgaXMgc2V0IG9uY2UgdG8gdHJ1ZS4gT3RoZXJ3aXNlIGEgdGltZXIgY2FuIGJlIGV4ZWN1dGVkIAorICAgICAgICAvLyBFbm91Z2ggaWYgaXQgaXMgc2V0IG9uY2UgdG8gdHJ1ZS4gT3RoZXJ3aXNlIGEgdGltZXIgY2FuIGJlIGV4ZWN1dGVkCiAgICAgICAgIC8vIGJldHdlZW4gdmVyaWZ5KCkgYW5kIGRpcmVjdCBjYWxsIHRvIHRoaXMgbWV0aG9kIHRocm91Z2ggdGhlIGludGVyZmFjZQogICAgICAgICAvLyBhcm91bmRUaW1lb3V0Q2FsbGVkID0gZmFsc2U7CiAKQEAgLTg0LDExICs4NCwxMSBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHZlcmlmeSgpIHsKICAgICAgICAgQ29tbW9uLmNoZWNrUmVzdWx0cygiU2xlc3NFSkI1IiwgRVhQRUNURUQpOwogICAgICAgICBhcm91bmRUaW1lb3V0Q2FsbGVkID0gdHJ1ZTsKICAgICB9CiB9Ci0gICAgCisKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvYXJvdW5kdGltZW91dC9lamIvU2xlc3NFSkI2LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2VqYi9TbGVzc0VKQjYuamF2YQppbmRleCBiNjJhOTc2Li42OWJmODA1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2VqYi9TbGVzc0VKQjYuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2VqYi9TbGVzc0VKQjYuamF2YQpAQCAtNDQsOSArNDQsOSBAQAogCiAgICAgLy8gQ2FsbGVkIGFzIGEgdGltZW91dCBvbmx5LiBJbnRlcmNlcHRvckcgaGFzIDIgc2VwYXJhdGUgYXJvdW5kWFhYIGNhbGxzLgogICAgIEBJbnRlcmNlcHRvcnMoe0ludGVyY2VwdG9yQS5jbGFzcywgSW50ZXJjZXB0b3JHLmNsYXNzfSkKLSAgICBAU2NoZWR1bGUoc2Vjb25kPSIqIiwgbWludXRlPSIqIiwgaG91cj0iKiIsIGluZm89IlNsZXNzRUpCNi1hZyIpICAgIAorICAgIEBTY2hlZHVsZShzZWNvbmQ9IioiLCBtaW51dGU9IioiLCBob3VyPSIqIiwgaW5mbz0iU2xlc3NFSkI2LWFnIikKICAgICBwdWJsaWMgdm9pZCBhZygpIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbiBTbGVzc0VKQjY6YWcoKS4gIGFyb3VuZFRpbWVvdXRDYWxsZWQgPSAiICsgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gU2xlc3NFSkI2OmFnKCkuICBhcm91bmRUaW1lb3V0Q2FsbGVkID0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcm91bmRUaW1lb3V0Q2FsbGVkKTsKIAogICAgICAgICBpZiggIWFyb3VuZFRpbWVvdXRDYWxsZWQgKSB7CkBAIC02MCwxMSArNjAsMTEgQEAKICAgICAgICAgQ29tbW9uLnN0b3JlUmVzdWx0KCJTbGVzc0VKQjYtYWciKTsKICAgICB9CiAKLSAgICBAU2NoZWR1bGUoc2Vjb25kPSIqIiwgbWludXRlPSIqIiwgaG91cj0iKiIsIGluZm89IlNsZXNzRUpCNl9UaW1lci1hZyIpICAgIAorICAgIEBTY2hlZHVsZShzZWNvbmQ9IioiLCBtaW51dGU9IioiLCBob3VyPSIqIiwgaW5mbz0iU2xlc3NFSkI2X1RpbWVyLWFnIikKICAgICBwdWJsaWMgdm9pZCBhZyhUaW1lciB0KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gU2xlc3NFSkI2OmFnKFRpbWVyIHQpLiAgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJvdW5kVGltZW91dENhbGxlZCA9ICIgKyBhcm91bmRUaW1lb3V0Q2FsbGVkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgIGlmKCBhcm91bmRUaW1lb3V0Q2FsbGVkICkgewogICAgICAgICAgICAgYXJvdW5kVGltZW91dENhbGxlZCA9IGZhbHNlOwogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiYmVhbiBjbGFzcyBhcm91bmRUaW1lb3V0IHdhcyBpbmNvcnJlY3RseSBjYWxsZWQiKTsKQEAgLTc2LDExICs3NiwxMSBAQAogICAgICAgICBDb21tb24uc3RvcmVSZXN1bHQoIlNsZXNzRUpCNl9UaW1lci1hZyIpOwogICAgIH0KIAotICAgIC8vIGJnKCkgKGJ1dCBub3QgYmcocGFyYW0pKSBtYXJrZWQgdGhyb3VnaCBlamItamFyLnhtbCAKKyAgICAvLyBiZygpIChidXQgbm90IGJnKHBhcmFtKSkgbWFya2VkIHRocm91Z2ggZWpiLWphci54bWwKICAgICAvLyBhcyBoYXZpbmcgYXJvdW5kdGltZW91dCBCLEcKLSAgICBAU2NoZWR1bGUoc2Vjb25kPSIqIiwgbWludXRlPSIqIiwgaG91cj0iKiIsIGluZm89IlNsZXNzRUpCNi1iZyIpICAgIAorICAgIEBTY2hlZHVsZShzZWNvbmQ9IioiLCBtaW51dGU9IioiLCBob3VyPSIqIiwgaW5mbz0iU2xlc3NFSkI2LWJnIikKICAgICBwdWJsaWMgdm9pZCBiZygpIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbiBTbGVzc0VKQjY6YmcoKS4gIGFyb3VuZFRpbWVvdXRDYWxsZWQgPSAiICsgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gU2xlc3NFSkI2OmJnKCkuICBhcm91bmRUaW1lb3V0Q2FsbGVkID0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcm91bmRUaW1lb3V0Q2FsbGVkKTsKIAogICAgICAgICBpZiggIWFyb3VuZFRpbWVvdXRDYWxsZWQgKSB7CkBAIC05NCwxMSArOTQsMTEgQEAKICAgICAgICAgQ29tbW9uLnN0b3JlUmVzdWx0KCJTbGVzc0VKQjYtYmciKTsKICAgICB9CiAKLSAgICBAU2NoZWR1bGUoc2Vjb25kPSIqIiwgbWludXRlPSIqIiwgaG91cj0iKiIsIGluZm89IlNsZXNzRUpCNl9UaW1lci1iZyIpICAgIAorICAgIEBTY2hlZHVsZShzZWNvbmQ9IioiLCBtaW51dGU9IioiLCBob3VyPSIqIiwgaW5mbz0iU2xlc3NFSkI2X1RpbWVyLWJnIikKICAgICBwdWJsaWMgdm9pZCBiZyhUaW1lciB0KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gU2xlc3NFSkI2OmJnKFRpbWVyIHQpLiAgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJvdW5kVGltZW91dENhbGxlZCA9ICIgKyBhcm91bmRUaW1lb3V0Q2FsbGVkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgIGlmKCBhcm91bmRUaW1lb3V0Q2FsbGVkICkgewogICAgICAgICAgICAgYXJvdW5kVGltZW91dENhbGxlZCA9IGZhbHNlOwogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiYmVhbiBjbGFzcyBhcm91bmRUaW1lb3V0IHdhcyBpbmNvcnJlY3RseSBjYWxsZWQiKTsKQEAgLTExMiw5ICsxMTIsOSBAQAogCiAgICAgLy8gb3ZlcmxvYWRlZCB2ZXJzaW9uIG9mIGludGVyY2VwdG9yLWJpbmRpbmcgdXNlZCBpbiBlamItamFyLnhtbCB0bwogICAgIC8vIG1hcmsgYWxsIG1ldGhvZHMgd2l0aCBuYW1lIGNnIGFzIGhhdmluZyBhcm91bmR0aW1lb3V0IEMsRwotICAgIEBTY2hlZHVsZShzZWNvbmQ9IioiLCBtaW51dGU9IioiLCBob3VyPSIqIiwgaW5mbz0iU2xlc3NFSkI2LWNnIikgICAgCisgICAgQFNjaGVkdWxlKHNlY29uZD0iKiIsIG1pbnV0ZT0iKiIsIGhvdXI9IioiLCBpbmZvPSJTbGVzc0VKQjYtY2ciKQogICAgIHB1YmxpYyB2b2lkIGNnKCkgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIFNsZXNzRUpCNjpjZygpLiAgYXJvdW5kVGltZW91dENhbGxlZCA9ICIgKyAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbiBTbGVzc0VKQjY6Y2coKS4gIGFyb3VuZFRpbWVvdXRDYWxsZWQgPSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyb3VuZFRpbWVvdXRDYWxsZWQpOwogCiAgICAgICAgIGlmKCAhYXJvdW5kVGltZW91dENhbGxlZCApIHsKQEAgLTEyOCw5ICsxMjgsOSBAQAogICAgICAgICBDb21tb24uc3RvcmVSZXN1bHQoIlNsZXNzRUpCNi1jZyIpOwogICAgIH0KIAotICAgIEBTY2hlZHVsZShzZWNvbmQ9IioiLCBtaW51dGU9IioiLCBob3VyPSIqIiwgaW5mbz0iU2xlc3NFSkI2X1RpbWVyLWNnIikgICAgCisgICAgQFNjaGVkdWxlKHNlY29uZD0iKiIsIG1pbnV0ZT0iKiIsIGhvdXI9IioiLCBpbmZvPSJTbGVzc0VKQjZfVGltZXItY2ciKQogICAgIHB1YmxpYyB2b2lkIGNnKFRpbWVyIHQpIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbiBTbGVzc0VKQjY6Y2coVGltZXIgdCkuICBhcm91bmRUaW1lb3V0Q2FsbGVkID0gIiArIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIFNsZXNzRUpCNjpjZyhUaW1lciB0KS4gIGFyb3VuZFRpbWVvdXRDYWxsZWQgPSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyb3VuZFRpbWVvdXRDYWxsZWQpOwogCiAgICAgICAgIGlmKCAhYXJvdW5kVGltZW91dENhbGxlZCApIHsKQEAgLTE0NCwxMiArMTQ0LDEyIEBACiAgICAgICAgIENvbW1vbi5zdG9yZVJlc3VsdCgiU2xlc3NFSkI2X1RpbWVyLWNnIik7CiAgICAgfQogCi0gICAgLy8gS2luZCBvZiBsaWtlIGFnKCksIGluIHRoYXQgZGcoKSBpcyBvdmVybG9hZGVkLCBidXQgaXQncyB0aGUgCisgICAgLy8gS2luZCBvZiBsaWtlIGFnKCksIGluIHRoYXQgZGcoKSBpcyBvdmVybG9hZGVkLCBidXQgaXQncyB0aGUKICAgICAvLyBzaWduYXR1cmUgdGhhdCBoYXMgYSBwYXJhbWV0ZXIgdGhhdCBpcyBhc3NpZ25lZCBhcm91bmR0aW1lb3V0IHVzaW5nCiAgICAgLy8gQEludGVyY2VwdG9yLgotICAgIEBTY2hlZHVsZShzZWNvbmQ9IioiLCBtaW51dGU9IioiLCBob3VyPSIqIiwgaW5mbz0iU2xlc3NFSkI2LWRnIikgICAgCisgICAgQFNjaGVkdWxlKHNlY29uZD0iKiIsIG1pbnV0ZT0iKiIsIGhvdXI9IioiLCBpbmZvPSJTbGVzc0VKQjYtZGciKQogICAgIHB1YmxpYyB2b2lkIGRnKCkgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIFNsZXNzRUpCNjpkZygpLiAgYXJvdW5kVGltZW91dENhbGxlZCA9ICIgKyAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbiBTbGVzc0VKQjY6ZGcoKS4gIGFyb3VuZFRpbWVvdXRDYWxsZWQgPSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyb3VuZFRpbWVvdXRDYWxsZWQpOwogCiAgICAgICAgIGlmKCBhcm91bmRUaW1lb3V0Q2FsbGVkICkgewpAQCAtMTY0LDExICsxNjQsMTEgQEAKICAgICB9CiAKICAgICBASW50ZXJjZXB0b3JzKHtJbnRlcmNlcHRvckQuY2xhc3MsIEludGVyY2VwdG9yRy5jbGFzc30pCi0gICAgQFNjaGVkdWxlKHNlY29uZD0iKiIsIG1pbnV0ZT0iKiIsIGhvdXI9IioiLCBpbmZvPSJTbGVzc0VKQjZfVGltZXItZGciKSAgICAKKyAgICBAU2NoZWR1bGUoc2Vjb25kPSIqIiwgbWludXRlPSIqIiwgaG91cj0iKiIsIGluZm89IlNsZXNzRUpCNl9UaW1lci1kZyIpCiAgICAgcHVibGljIHZvaWQgZGcoVGltZXIgdCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIFNsZXNzRUpCNjpkZyhUaW1lciB0KS4gICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgImFyb3VuZFRpbWVvdXRDYWxsZWQgPSAiICsgYXJvdW5kVGltZW91dENhbGxlZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICBpZiggIWFyb3VuZFRpbWVvdXRDYWxsZWQgKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJiZWFuIGNsYXNzIGFyb3VuZFRpbWVvdXQgbm90IGNhbGxlZCIpOwogICAgICAgICB9CkBAIC0xODQsOSArMTg0LDkgQEAKIAogICAgIC8vIExpa2UgZGcoKSwgZXhjZXB0IHRoYXQgZGcoVGltZXIgdCkgaXMgYXNzaWduZWQgaXRzIGludGVyY2VwdG9yCiAgICAgLy8gY2hhaW4gdGhyb3VnaCBlamItamFyLnhtbAotICAgIEBTY2hlZHVsZShzZWNvbmQ9IioiLCBtaW51dGU9IioiLCBob3VyPSIqIiwgaW5mbz0iU2xlc3NFSkI2LWVnIikgICAgCisgICAgQFNjaGVkdWxlKHNlY29uZD0iKiIsIG1pbnV0ZT0iKiIsIGhvdXI9IioiLCBpbmZvPSJTbGVzc0VKQjYtZWciKQogICAgIHB1YmxpYyB2b2lkIGVnKCkgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIFNsZXNzRUpCNjplZygpLiAgYXJvdW5kVGltZW91dENhbGxlZCA9ICIgKyAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbiBTbGVzc0VKQjY6ZWcoKS4gIGFyb3VuZFRpbWVvdXRDYWxsZWQgPSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyb3VuZFRpbWVvdXRDYWxsZWQpOwogCiAgICAgICAgIGlmKCBhcm91bmRUaW1lb3V0Q2FsbGVkICkgewpAQCAtMjA0LDcgKzIwNCw3IEBACiAgICAgLy8gMiBzZXBhcmF0ZSBhcm91bmRYWFggY2FsbHMuCiAgICAgQEludGVyY2VwdG9ycyh7SW50ZXJjZXB0b3JBLmNsYXNzLCBJbnRlcmNlcHRvckcuY2xhc3N9KQogICAgIHB1YmxpYyB2b2lkIG5vYXJvdW5kdGltZW91dCgpIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbiBTbGVzc0VKQjY6bm9hcm91bmR0aW1lb3V0KCkuICBhcm91bmRUaW1lb3V0Q2FsbGVkID0gIiArIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIFNsZXNzRUpCNjpub2Fyb3VuZHRpbWVvdXQoKS4gIGFyb3VuZFRpbWVvdXRDYWxsZWQgPSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyb3VuZFRpbWVvdXRDYWxsZWQpOwogCiAgICAgICAgIGlmKCBhcm91bmRUaW1lb3V0Q2FsbGVkICkgewpAQCAtMjE3LDExICsyMTcsMTEgQEAKICAgICAgICAgYXJvdW5kSW52b2tlQ2FsbGVkID0gZmFsc2U7CiAgICAgfQogCi0gICAgQFNjaGVkdWxlKHNlY29uZD0iKiIsIG1pbnV0ZT0iKiIsIGhvdXI9IioiLCBpbmZvPSJTbGVzc0VKQjZfVGltZXItZWciKSAgICAKKyAgICBAU2NoZWR1bGUoc2Vjb25kPSIqIiwgbWludXRlPSIqIiwgaG91cj0iKiIsIGluZm89IlNsZXNzRUpCNl9UaW1lci1lZyIpCiAgICAgcHVibGljIHZvaWQgZWcoVGltZXIgdCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIFNsZXNzRUpCNjplZyhUaW1lciB0KS4gICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgImFyb3VuZFRpbWVvdXRDYWxsZWQgPSAiICsgYXJvdW5kVGltZW91dENhbGxlZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICBpZiggIWFyb3VuZFRpbWVvdXRDYWxsZWQgKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJiZWFuIGNsYXNzIGFyb3VuZFRpbWVvdXQgbm90IGNhbGxlZCIpOwogICAgICAgICB9CkBAIC0yMzksNSArMjM5LDUgQEAKICAgICB9CiAKIH0KLSAgICAKKwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9hcm91bmR0aW1lb3V0L2VqYi9TbGVzc0VKQjcuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2Fyb3VuZHRpbWVvdXQvZWpiL1NsZXNzRUpCNy5qYXZhCmluZGV4IDg3YjUxMDcuLjI2NGI4YTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2Fyb3VuZHRpbWVvdXQvZWpiL1NsZXNzRUpCNy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2Fyb3VuZHRpbWVvdXQvZWpiL1NsZXNzRUpCNy5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiBAU3RhdGVsZXNzCiBARXhjbHVkZURlZmF1bHRJbnRlcmNlcHRvcnMKIEBJbnRlcmNlcHRvcnMoe0ludGVyY2VwdG9yRC5jbGFzcywgSW50ZXJjZXB0b3JDLmNsYXNzfSkKLXB1YmxpYyBjbGFzcyBTbGVzc0VKQjcgCitwdWJsaWMgY2xhc3MgU2xlc3NFSkI3CiB7CiAKICAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQgRVhQRUNURUQgPSAxOwpAQCAtNTIsNyArNTIsNyBAQAogICAgICAgICBDb21tb24uc3RvcmVSZXN1bHQoIlNsZXNzRUpCNy1kYyIpOwogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICBAQXJvdW5kSW52b2tlCiAgICAgcHJpdmF0ZSBPYmplY3QgYXJvdW5kSW52b2tlKEludm9jYXRpb25Db250ZXh0IGN0eCkgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKQEAgLTYxLDcgKzYxLDcgQEAKIAogICAgICAgICByZXR1cm4gY3R4LnByb2NlZWQoKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCB2ZXJpZnkoKSB7CiAgICAgICAgIENvbW1vbi5jaGVja1Jlc3VsdHMoIlNsZXNzRUpCNyIsIEVYUEVDVEVEKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9idWlsZC54bWwKaW5kZXggY2Q0MWMxMC4uNDkzNTJhOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2J1aWxkLnhtbApAQCAtOTAsMTcgKzkwLDE3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYi10aW1lciB0ZXN0cykKKyAgICA8ZWNobz4KKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYi10aW1lciB0ZXN0cykKIAotCQkJYW50IG5vbnBlcnNpc3RlbnR0aW1lciAoRXhlY3V0ZXMgdGhlIG5vbi1wZXJzaXN0ZW50IGVqYi10aW1lciB0ZXN0KQotCQkJYW50IHNjaGVkdWxlX2V4cCAoRXhlY3V0ZXMgdGhlIHNjaGVkdWxlX2V4cCBlamItdGltZXIgdGVzdCkKLQkJCWFudCBzY2hlZHVsZV9hbm4gKEV4ZWN1dGVzIHRoZSBzY2hlZHVsZV9hbm4gZWpiLXRpbWVyIHRlc3QpCi0JCQlhbnQgc2NoZWR1bGVfb25fZWpiX3RpbWVvdXQgKEV4ZWN1dGVzIHRoZSBzY2hlZHVsZV9vbl9lamJfdGltZW91dCBlamItdGltZXIgdGVzdCkKLQkJCWFudCBhcm91bmR0aW1lb3V0IChFeGVjdXRlcyB0aGUgYXJvdW5kdGltZW91dCBlamItdGltZXIgdGVzdCkKLQkJCWFudCBtZGIgKEV4ZWN1dGVzIHRoZSBtZGIgZWpiLXRpbWVyIHRlc3QpCisgICAgICAgICAgICBhbnQgbm9ucGVyc2lzdGVudHRpbWVyIChFeGVjdXRlcyB0aGUgbm9uLXBlcnNpc3RlbnQgZWpiLXRpbWVyIHRlc3QpCisgICAgICAgICAgICBhbnQgc2NoZWR1bGVfZXhwIChFeGVjdXRlcyB0aGUgc2NoZWR1bGVfZXhwIGVqYi10aW1lciB0ZXN0KQorICAgICAgICAgICAgYW50IHNjaGVkdWxlX2FubiAoRXhlY3V0ZXMgdGhlIHNjaGVkdWxlX2FubiBlamItdGltZXIgdGVzdCkKKyAgICAgICAgICAgIGFudCBzY2hlZHVsZV9vbl9lamJfdGltZW91dCAoRXhlY3V0ZXMgdGhlIHNjaGVkdWxlX29uX2VqYl90aW1lb3V0IGVqYi10aW1lciB0ZXN0KQorICAgICAgICAgICAgYW50IGFyb3VuZHRpbWVvdXQgKEV4ZWN1dGVzIHRoZSBhcm91bmR0aW1lb3V0IGVqYi10aW1lciB0ZXN0KQorICAgICAgICAgICAgYW50IG1kYiAoRXhlY3V0ZXMgdGhlIG1kYiBlamItdGltZXIgdGVzdCkKIAotCTwvZWNobz4KKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9rZWVwc3RhdGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2tlZXBzdGF0ZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGJmMzg0MTcuLjcwYzk2OWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2tlZXBzdGF0ZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2tlZXBzdGF0ZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNSArMTUsMTUgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi10aW1lci1rZWVwc3RhdGUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2tlZXBzdGF0ZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9rZWVwc3RhdGUvYnVpbGQueG1sCmluZGV4IGNmMjM5ODkuLjRlMGJiODAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2tlZXBzdGF0ZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEva2VlcHN0YXRlL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDksOCArNDksOCBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiB2YWx1ZT0iKiovS2VlcFN0YXRlKi5jbGFzcyIgLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgdmFsdWU9IioqL0NsaWVudC5jbGFzcywqKi9LZWVwU3RhdGVJRi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJGaXJzdCB0aW1lIGRlcGxveSBzdWNjZWVkZWQuIiAvPgpAQCAtOTAsMTAgKzkwLDEwIEBACiAgICAgICAgICAgICAgIHZhbHVlPSItLWZvcmNlPXRydWUgLS1rZWVwc3RhdGU9JHtrZWVwc3RhdGV9IC0tcmV0cmlldmUgJHthc3NlbWJsZS5kaXJ9ICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciAiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEva2VlcHN0YXRlL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL2tlZXBzdGF0ZS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggYjFkODVmZS4uYmQ3OTdiMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEva2VlcHN0YXRlL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9rZWVwc3RhdGUvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNiw3ICsyNiw3IEBACiAKICAgICBARUpCIHByaXZhdGUgc3RhdGljIEtlZXBTdGF0ZUlGIGJlYW47CiAKLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7IAorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKICAgICAgICAgYm9vbGVhbiBrZWVwU3RhdGUgPSBCb29sZWFuLnZhbHVlT2YoYXJnc1swXSk7CiAgICAgICAgIFN0cmluZyB0ZXN0TmFtZSA9ICJlamIzMS10aW1lci1rZWVwc3RhdGUtIiArIGtlZXBTdGF0ZTsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbih0ZXN0TmFtZSk7CkBAIC00MSw3ICs0MSw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIHRlc3RLZWVwU3RhdGUoYm9vbGVhbiBrZWVwU3RhdGUpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBTdHJpbmcgcmVzdWx0ID0gYmVhbi52ZXJpZnlUaW1lcnMoa2VlcFN0YXRlKTsgICAgICAgIAorICAgICAgICBTdHJpbmcgcmVzdWx0ID0gYmVhbi52ZXJpZnlUaW1lcnMoa2VlcFN0YXRlKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0ZXN0S2VlcFN0YXRlVHJ1ZSByZXN1bHQ6ICIgKyByZXN1bHQpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEva2VlcHN0YXRlL2VqYi9LZWVwU3RhdGVCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9rZWVwc3RhdGUvZWpiL0tlZXBTdGF0ZUJlYW4uamF2YQppbmRleCAwYTBhMDhhLi45MjJhMTE0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9rZWVwc3RhdGUvZWpiL0tlZXBTdGF0ZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9rZWVwc3RhdGUvZWpiL0tlZXBTdGF0ZUJlYW4uamF2YQpAQCAtMjMsOSArMjMsOSBAQAogQFNpbmdsZXRvbgogcHVibGljIGNsYXNzIEtlZXBTdGF0ZUJlYW4gaW1wbGVtZW50cyBLZWVwU3RhdGVJRiB7CiAgICAgcHJpdmF0ZSBMaXN0PFN0cmluZz4gaW5mb3MgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKLSAgICAKKwogICAgIC8qKgotICAgICAqIGtlZXBzdGF0ZSBpcyBwYXNzZWQgZnJvbSBidWlsZC54bWwgdG8gYXBwY2xpZW50IGFzIGFwcGxpY2F0aW9uIGFyZ3MsIGFuZCB0byB0aGlzIAorICAgICAqIGtlZXBzdGF0ZSBpcyBwYXNzZWQgZnJvbSBidWlsZC54bWwgdG8gYXBwY2xpZW50IGFzIGFwcGxpY2F0aW9uIGFyZ3MsIGFuZCB0byB0aGlzCiAgICAgICogYnVzaW5lc3MgbWV0aG9kLiBUaGUgdGVzdCBFQVIgYXBwIGlzIGRlcGxveWVkIG9uY2UgZmlyc3QsIHRoZW4gS2VlcFN0YXRlSUYuSU5GTwogICAgICAqIGlzIG1vZGlmaWVkLCByZWJ1aWxkLCBhbmQgcmVkZXBsb3llZC4gIElmIHJlZGVwbG95ZWQgd2l0aCBrZWVwc3RhdGUgdHJ1ZSwgbm8gbmV3CiAgICAgICogYXV0byB0aW1lcnMgYXJlIGNyZWF0ZWQsIGFuZCBleGlzdGluZyB0aW1lcnMgYXJlIGNhcnJpZWQgb3Zlci4gIFNvIHRoZXNlIHRpbWVycwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvbWRiL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9tZGIvYnVpbGQucHJvcGVydGllcwppbmRleCAyOTM0ODBkLi40NGYxNGMxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9tZGIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9tZGIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTEgKzE1LDExIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzEtdGltZXIzMS1tZGIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+IAotPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPlx1MDAyMAorPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzZS5jbGllbnQiIHZhbHVlPSJjb20uYWNtZS5DbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL21kYi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9tZGIvYnVpbGQueG1sCmluZGV4IGRhYjJiNDEzLi5iNjQxM2JjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9tZGIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL21kYi9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDEyICs0NiwxMiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZWpiLWphci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0ludGVyY2VwdG9yKi5jbGFzcywqKi9TaW5nbGV0b24qLmNsYXNzLCoqL01lc3NhZ2VCZWFuLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWphci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTY1LDE2ICs2NSwxNiBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJjcmVhdGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCi0gCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bl9zZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgIDxqYXZhICBmb3JrPSJvbiIgCisgICAgICAgPGphdmEgIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iJHtzZS5jbGllbnR9Ij4KQEAgLTg1LDcgKzg1LDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qYXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL21kYi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9tZGIvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDdjNjg2OWUuLjcxZWZmZmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL21kYi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvbWRiL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjYsMTcgKzI2LDE3IEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBhcHBOYW1lOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewogCi0JYXBwTmFtZSA9IGFyZ3NbMF07IAotCXN0YXQuYWRkRGVzY3JpcHRpb24oYXBwTmFtZSk7Ci0JQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7ICAgICAgIAotICAgICAgICBjbGllbnQuZG9UZXN0KCk7CQorICAgIGFwcE5hbWUgPSBhcmdzWzBdOworICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oYXBwTmFtZSk7CisgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CisgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoYXBwTmFtZSArICJJRCIpOwogICAgIH0KIApAQCAtNDQsMjkgKzQ0LDI5IEBACiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAKLQl0cnkgeworICAgIHRyeSB7CiAKLQkgICAgU2luZ2xldG9uUmVtb3RlIHNpbmdsZXRvbiA9IChTaW5nbGV0b25SZW1vdGUpIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpnbG9iYWwvIiArIGFwcE5hbWUgKyAiL1NpbmdsZXRvbkJlYW4hY29tLmFjbWUuU2luZ2xldG9uUmVtb3RlIik7CisgICAgICAgIFNpbmdsZXRvblJlbW90ZSBzaW5nbGV0b24gPSAoU2luZ2xldG9uUmVtb3RlKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6Z2xvYmFsLyIgKyBhcHBOYW1lICsgIi9TaW5nbGV0b25CZWFuIWNvbS5hY21lLlNpbmdsZXRvblJlbW90ZSIpOwogCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2FpdGluZyBhIGZldyBzZWNvbmRzIGZvciB0aW1lciBjYWxsYmFjay4uLiIpOwotCSAgICB0cnkgewotCQlUaHJlYWQuc2xlZXAoNDAwMCk7Ci0JICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgfQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldhaXRpbmcgYSBmZXcgc2Vjb25kcyBmb3IgdGltZXIgY2FsbGJhY2suLi4iKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgVGhyZWFkLnNsZWVwKDQwMDApOworICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3QgcGFzc2VkID0gIiArIHNpbmdsZXRvbi5nZXRUZXN0UGFzc2VkKCkpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3QgcGFzc2VkID0gIiArIHNpbmdsZXRvbi5nZXRUZXN0UGFzc2VkKCkpOwogCi0JICAgIGlmKCBzaW5nbGV0b24uZ2V0VGVzdFBhc3NlZCgpICkgewotCQlzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuUEFTUyk7Ci0JICAgIH0gZWxzZSB7Ci0JCXN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5GQUlMKTsKLQkgICAgfQorICAgICAgICBpZiggc2luZ2xldG9uLmdldFRlc3RQYXNzZWQoKSApIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LlBBU1MpOworICAgICAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuRkFJTCk7CisgICAgICAgIH0KIAotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LkZBSUwpOwotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCX0KKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5GQUlMKTsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CiAgICAgfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL21kYi9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL21kYi9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAppbmRleCBjOWIyMjVkLi42OTE1Y2QwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9tZGIvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvbWRiL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCkBAIC0yMSw2ICsyMSw2IEBACiA8c3VuLWVqYi1qYXI+CiAgICAgPHNlY3VyaXR5LXJvbGUtbWFwcGluZz4KICAgICAgIDxyb2xlLW5hbWU+Zm9vPC9yb2xlLW5hbWU+Ci0gICAgICA8cHJpbmNpcGFsLW5hbWU+Ym9iPC9wcmluY2lwYWwtbmFtZT4gIAorICAgICAgPHByaW5jaXBhbC1uYW1lPmJvYjwvcHJpbmNpcGFsLW5hbWU+CiAgICAgPC9zZWN1cml0eS1yb2xlLW1hcHBpbmc+CiA8L3N1bi1lamItamFyPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvbWRiL2VqYi9JbnRlcmNlcHRvckEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL21kYi9lamIvSW50ZXJjZXB0b3JBLmphdmEKaW5kZXggYjM1YTI0NS4uZWU3OWE0MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvbWRiL2VqYi9JbnRlcmNlcHRvckEuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9tZGIvZWpiL0ludGVyY2VwdG9yQS5qYXZhCkBAIC0zMSw1ICszMSw1IEBACiAgICAgICAgICAgICBiZWFuLm1uYW1lID0gbS5nZXROYW1lKCk7CiAgICAgICAgIHJldHVybiBjdHgucHJvY2VlZCgpOwogICAgIH0KLSAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9tZGIvZWpiL01lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9tZGIvZWpiL01lc3NhZ2VCZWFuLmphdmEKaW5kZXggYWQxOGRmYy4uYWE3MzA5NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvbWRiL2VqYi9NZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL21kYi9lamIvTWVzc2FnZUJlYW4uamF2YQpAQCAtNDAsNTAgKzQwLDUwIEBACiAKICAgICBTdHJpbmcgbW5hbWU7CiAKLSAgICBARUpCIAorICAgIEBFSkIKICAgICBwcml2YXRlIFNpbmdsZXRvbkJlYW4gc2luZ2xldG9uOwogCiAgICAgQFJlc291cmNlCi0JcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7Ci0gICAgIAorICAgIHByaXZhdGUgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjOworCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwdWJsaWMgdm9pZCBpbml0KCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIE1lc3NhZ2VCZWFuOjppbml0KCkiKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBNZXNzYWdlQmVhbjo6b25NZXNzYWdlKCkiKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImdldENhbGxlclByaW5jaXBhbCA9ICIgKyBtZGMuZ2V0Q2FsbGVyUHJpbmNpcGFsKCkpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gTWVzc2FnZUJlYW46Om9uTWVzc2FnZSgpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJnZXRDYWxsZXJQcmluY2lwYWwgPSAiICsgbWRjLmdldENhbGxlclByaW5jaXBhbCgpKTsKICAgICAgICAgdmVyaWZ5TWV0aG9kTmFtZSgib25NZXNzYWdlIik7CiAgICAgfQogCiAgICAgQFNjaGVkdWxlKHNlY29uZD0iKi8xIiwgbWludXRlPSIqIiwgaG91cj0iKiIpCiAgICAgcHJpdmF0ZSB2b2lkIG9uVGltZW91dCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIE1lc3NhZ2VCZWFuOjpvblRpbWVvdXQoKSIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiZ2V0Q2FsbGVyUHJpbmNpcGFsID0gIiArIG1kYy5nZXRDYWxsZXJQcmluY2lwYWwoKSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBNZXNzYWdlQmVhbjo6b25UaW1lb3V0KCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImdldENhbGxlclByaW5jaXBhbCA9ICIgKyBtZGMuZ2V0Q2FsbGVyUHJpbmNpcGFsKCkpOwogCiAgICAgICAgIHZlcmlmeU1ldGhvZE5hbWUoIm9uVGltZW91dCIpOwotCXRyeSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSXNDYWxsZXJJblJvbGUoJ2ZvbycpPSAiICsgCi0JCQkgICAgICAgbWRjLmlzQ2FsbGVySW5Sb2xlKCJmb28iKSk7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIkV4cGVjdGluZyBJbGxlZ2FsU3RhdGVFWGNlcHRpb24gZm9yIGNhbGwgdG8gaXNDYWxsZXJJblJvbGUoKSBmcm9tIHRpbWVyIGNhbGxiYWNrIik7Ci0JfSBjYXRjaChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gaXNlKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIGV4Y2VwdGlvbiBmb3IgaW52b2NhdGlvbiBvZiBpc0NhbGxlckluUm9sZSBmcm9tIHRpbWVyIGNhbGxiYWNrIik7Ci0JfQotCSAgICAKKyAgICB0cnkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIklzQ2FsbGVySW5Sb2xlKCdmb28nKT0gIiArCisgICAgICAgICAgICAgICAgICAgbWRjLmlzQ2FsbGVySW5Sb2xlKCJmb28iKSk7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIkV4cGVjdGluZyBJbGxlZ2FsU3RhdGVFWGNlcHRpb24gZm9yIGNhbGwgdG8gaXNDYWxsZXJJblJvbGUoKSBmcm9tIHRpbWVyIGNhbGxiYWNrIik7CisgICAgfSBjYXRjaChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gaXNlKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIGV4Y2VwdGlvbiBmb3IgaW52b2NhdGlvbiBvZiBpc0NhbGxlckluUm9sZSBmcm9tIHRpbWVyIGNhbGxiYWNrIik7CisgICAgfQorCiAgICAgICAgIGlmIChzaW5nbGV0b24uZ2V0QXJvdW5kVGltZW91dENhbGxlZChudWxsKSkgewotCSAgICBzaW5nbGV0b24udGVzdDFQYXNzZWQoKTsKKyAgICAgICAgc2luZ2xldG9uLnRlc3QxUGFzc2VkKCk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgb25ERFRpbWVvdXQoVGltZXIgdCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gTWVzc2FnZUJlYW46Om9uRERUaW1lb3V0KCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIE1lc3NhZ2VCZWFuOjpvbkREVGltZW91dCgpIik7CiAgICAgICAgIGlmIChzaW5nbGV0b24uZ2V0QXJvdW5kVGltZW91dENhbGxlZCgoU3RyaW5nKXQuZ2V0SW5mbygpKSkgewotCSAgICBzaW5nbGV0b24udGVzdDJQYXNzZWQoKTsKKyAgICAgICAgc2luZ2xldG9uLnRlc3QyUGFzc2VkKCk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICAKKwogICAgIEBQcmVEZXN0cm95CiAgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBNZXNzYWdlQmVhbjo6ZGVzdHJveSgpIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9tZGIvZWpiL1NpbmdsZXRvbkJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL21kYi9lamIvU2luZ2xldG9uQmVhbi5qYXZhCmluZGV4IDY0OTQwOTYuLjQ2Y2Q4NDEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL21kYi9lamIvU2luZ2xldG9uQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL21kYi9lamIvU2luZ2xldG9uQmVhbi5qYXZhCkBAIC0zNiwxNyArMzYsMTcgQEAKICAgICBwdWJsaWMgdm9pZCBpbml0KCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46OmluaXQoKSIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHRlc3QxUGFzc2VkKCkgewotCXBhc3NlZDEgPSB0cnVlOworICAgIHBhc3NlZDEgPSB0cnVlOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHRlc3QyUGFzc2VkKCkgewotCXBhc3NlZDIgPSB0cnVlOworICAgIHBhc3NlZDIgPSB0cnVlOwogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIGdldFRlc3RQYXNzZWQoKSB7Ci0JcmV0dXJuIHBhc3NlZDEgJiYgcGFzc2VkMjsKKyAgICByZXR1cm4gcGFzc2VkMSAmJiBwYXNzZWQyOwogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIGdldEFyb3VuZFRpbWVvdXRDYWxsZWQoU3RyaW5nIHMpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL21ldGhvZGludGYvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL21ldGhvZGludGYvYnVpbGQucHJvcGVydGllcwppbmRleCA5ZmMwODQyLi40NTE0ZTEyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9tZXRob2RpbnRmL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvbWV0aG9kaW50Zi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi10aW1lci1tZXRob2RpbnRmIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InNlLmNsaWVudCIgdmFsdWU9ImNsaWVudC50aW1lcjMxLm1ldGhvZGludGYuQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9tZXRob2RpbnRmL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL21ldGhvZGludGYvYnVpbGQueG1sCmluZGV4IGRhZTZmNGYuLjJmMWIwMzQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL21ldGhvZGludGYvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL21ldGhvZGludGYvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktamFyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjUsMTAgKzY1LDEwIEBACiAgICAgICAgICAgIDxhcmcgbGluZT0iJHtqbmRpcm9vdH0iLz4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWphci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvbWV0aG9kaW50Zi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9tZXRob2RpbnRmL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA5M2MxNTdjLi43NjFlNWRlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9tZXRob2RpbnRmL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9tZXRob2RpbnRmL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjUsMTIgKzI1LDEyIEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIEluaXRpYWxDb250ZXh0IGNvbnRleHQ7CiAKLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7IAorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiZWpiMzEtdGltZXItbWV0aG9kaW50ZiIpOwogCiAgICAgICAgIHRyeSB7CkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldhaXRpbmcgdGltZXJzIHRvIGV4cGlyZSBmb3Igc2NoZWR1bGVfYW5uIHRpbWVyIHRlc3QiKTsKICAgICAgICAgICAgIFRocmVhZC5zbGVlcCg4MDAwKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVmVyaWZ5aW5nIHRpbWVycyB0cmFuc2FjdGlvbiBzdGF0dXMiKTsKLSAgICAgICAgICAgIGJvb2xlYW4gcGFzcyA9IGJlYW4udmVyaWZ5VGltZXJzKCk7IAorICAgICAgICAgICAgYm9vbGVhbiBwYXNzID0gYmVhbi52ZXJpZnlUaW1lcnMoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJtZXRob2RpbnRmOiAiLCAoKHBhc3MpPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpICk7CiAKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvbm9ucGVyc2lzdGVudHRpbWVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9ub25wZXJzaXN0ZW50dGltZXIvYnVpbGQucHJvcGVydGllcwppbmRleCAwOGVhNWY4Li5mY2I2ZmMyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9ub25wZXJzaXN0ZW50dGltZXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9ub25wZXJzaXN0ZW50dGltZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItdGltZXItbm9ucGVyc2lzdGVudHRpbWVyIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9ub25wZXJzaXN0ZW50dGltZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvbm9ucGVyc2lzdGVudHRpbWVyL2J1aWxkLnhtbAppbmRleCBhMDFlNzBlLi5lYjNkMmRlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9ub25wZXJzaXN0ZW50dGltZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL25vbnBlcnNpc3RlbnR0aW1lci9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDE0ICs0NiwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iY29tL3N1bi9zMWFzZGV2L2VqYjMxL3RpbWVyL25vbnBlcnNpc3RlbnR0aW1lci8qKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50Ki5jbGFzcywqKi9TdGF0ZWZ1bFdyYXBwZXIuY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjMsNyArNjMsNyBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJjcmVhdGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTczLDE0ICs3MywxNCBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvbm9ucGVyc2lzdGVudHRpbWVyL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL25vbnBlcnNpc3RlbnR0aW1lci9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMGEzNTdmMS4uNjA1OTExMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvbm9ucGVyc2lzdGVudHRpbWVyL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9ub25wZXJzaXN0ZW50dGltZXIvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNSwxNCArMjUsMTQgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgSW5pdGlhbENvbnRleHQgY29udGV4dDsKIAogICAgIEBFSkIgcHJpdmF0ZSBzdGF0aWMgU3RhdGVmdWxXcmFwcGVyIHdyYXBwZXI7CiAKLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7IAorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKICAgICAgICAgYm9vbGVhbiBkb0ptcyA9IGZhbHNlOyAvLyBUT0RPIChhcmdzLmxlbmd0aCA9PSAxKSAmJiAoYXJnc1swXS5lcXVhbHNJZ25vcmVDYXNlKCJqbXMiKSk7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiZWpiMzEtdGltZXItbm9ucGVyc2lzdGVudHRpbWVyIik7CkBAIC01NCwyMiArNTQsMjIgQEAKICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIkZvbzogZWpicy9Gb29fQk1UIiwgKHJlc3VsdCk/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7CiAKIAotCS8qKiBUT0RPCisgICAgLyoqIFRPRE8KICAgICAgICAgcmVzdWx0ID0gd3JhcHBlci5kb01lc3NhZ2VEcml2ZW5UZXN0KCJqbXMvVGltZXJNREJRdWV1ZV9DTVQiLCBkb0ptcyk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTWVzc2FnZS1kcml2ZW4gdGVzdCBqbXMvVGltZXJNREJRdWV1ZV9DTVQiIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk1lc3NhZ2UtZHJpdmVuIHRlc3Qgam1zL1RpbWVyTURCUXVldWVfQ01UIgogICAgICAgICAgICAgICAgICsgKChyZXN1bHQpPyAiIHBhc3NlZCEhIiA6ICJmYWlsZWQhISIpKTsKLSAgICAgICAgc3RhdC5hZGRTdGF0dXMoIk1lc3NhZ2UtZHJpdmVuIHRlc3Q6IGptcy9UaW1lck1EQlF1ZXVlX0NNVCIsIAorICAgICAgICBzdGF0LmFkZFN0YXR1cygiTWVzc2FnZS1kcml2ZW4gdGVzdDogam1zL1RpbWVyTURCUXVldWVfQ01UIiwKICAgICAgICAgICAgICAgICAocmVzdWx0KT8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKTsKIAogICAgICAgICByZXN1bHQgPSB3cmFwcGVyLmRvTWVzc2FnZURyaXZlblRlc3QoImptcy9UaW1lck1EQlF1ZXVlX0JNVCIsIGRvSm1zKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNZXNzYWdlLWRyaXZlbiB0ZXN0IGptcy9UaW1lck1EQlF1ZXVlX0JNVCIgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTWVzc2FnZS1kcml2ZW4gdGVzdCBqbXMvVGltZXJNREJRdWV1ZV9CTVQiCiAgICAgICAgICAgICAgICAgKyAoKHJlc3VsdCk/ICIgcGFzc2VkISEiIDogImZhaWxlZCEhIikpOwotICAgICAgICBzdGF0LmFkZFN0YXR1cygiTWVzc2FnZS1kcml2ZW4gdGVzdDogam1zL1RpbWVyTURCUXVldWVfQk1UIiwgCisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJNZXNzYWdlLWRyaXZlbiB0ZXN0OiBqbXMvVGltZXJNREJRdWV1ZV9CTVQiLAogICAgICAgICAgICAgICAgIChyZXN1bHQpPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpOwotCSoqLworICAgICoqLwogCiAgICAgICAgIHRyeSB7Ci0JICAgICB3cmFwcGVyLnJlbW92ZUZvbygpOworICAgICAgICAgd3JhcHBlci5yZW1vdmVGb28oKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvbm9ucGVyc2lzdGVudHRpbWVyL2Rlc2NyaXB0b3IvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9ub25wZXJzaXN0ZW50dGltZXIvZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCA1NjJiZTcxLi5kYzhmZjMwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9ub25wZXJzaXN0ZW50dGltZXIvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9ub25wZXJzaXN0ZW50dGltZXIvZGVzY3JpcHRvci9lamItamFyLnhtbApAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICA8cmVzLWF1dGg+Q29udGFpbmVyPC9yZXMtYXV0aD4KICAgICAgICAgPHJlcy1zaGFyaW5nLXNjb3BlPlNoYXJlYWJsZTwvcmVzLXNoYXJpbmctc2NvcGU+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KLSAgICAgIDxtZXNzYWdlLWRlc3RpbmF0aW9uLXJlZj4gICAgICAgCisgICAgICA8bWVzc2FnZS1kZXN0aW5hdGlvbi1yZWY+CiAgICAgICAgIDxkZXNjcmlwdGlvbj50aW1lcnRlc3QgZGVzdGluYXRpb248L2Rlc2NyaXB0aW9uPgogICAgICAgICA8bWVzc2FnZS1kZXN0aW5hdGlvbi1yZWYtbmFtZT5qbXMvTXlRdWV1ZTwvbWVzc2FnZS1kZXN0aW5hdGlvbi1yZWYtbmFtZT4KICAgICAgICAgPG1lc3NhZ2UtZGVzdGluYXRpb24tdHlwZT5qYWthcnRhLmptcy5RdWV1ZTwvbWVzc2FnZS1kZXN0aW5hdGlvbi10eXBlPgpAQCAtNjcsNyArNjcsNyBAQAogICAgICAgICA8cmVzLWF1dGg+Q29udGFpbmVyPC9yZXMtYXV0aD4KICAgICAgICAgPHJlcy1zaGFyaW5nLXNjb3BlPlNoYXJlYWJsZTwvcmVzLXNoYXJpbmctc2NvcGU+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KLSAgICAgIDxtZXNzYWdlLWRlc3RpbmF0aW9uLXJlZj4gICAgICAgCisgICAgICA8bWVzc2FnZS1kZXN0aW5hdGlvbi1yZWY+CiAgICAgICAgIDxkZXNjcmlwdGlvbj50aW1lcnRlc3QgZGVzdGluYXRpb248L2Rlc2NyaXB0aW9uPgogICAgICAgICA8bWVzc2FnZS1kZXN0aW5hdGlvbi1yZWYtbmFtZT5qbXMvTXlRdWV1ZTwvbWVzc2FnZS1kZXN0aW5hdGlvbi1yZWYtbmFtZT4KICAgICAgICAgPG1lc3NhZ2UtZGVzdGluYXRpb24tdHlwZT5qYWthcnRhLmptcy5RdWV1ZTwvbWVzc2FnZS1kZXN0aW5hdGlvbi10eXBlPgpAQCAtOTYsNyArOTYsNyBAQAogICAgICAgICA8cmVzLWF1dGg+Q29udGFpbmVyPC9yZXMtYXV0aD4KICAgICAgICAgPHJlcy1zaGFyaW5nLXNjb3BlPlNoYXJlYWJsZTwvcmVzLXNoYXJpbmctc2NvcGU+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KLSAgICAgIDxtZXNzYWdlLWRlc3RpbmF0aW9uLXJlZj4gICAgICAgCisgICAgICA8bWVzc2FnZS1kZXN0aW5hdGlvbi1yZWY+CiAgICAgICAgIDxkZXNjcmlwdGlvbj50aW1lcnRlc3QgZGVzdGluYXRpb248L2Rlc2NyaXB0aW9uPgogICAgICAgICA8bWVzc2FnZS1kZXN0aW5hdGlvbi1yZWYtbmFtZT5qbXMvTXlRdWV1ZTwvbWVzc2FnZS1kZXN0aW5hdGlvbi1yZWYtbmFtZT4KICAgICAgICAgPG1lc3NhZ2UtZGVzdGluYXRpb24tdHlwZT5qYWthcnRhLmptcy5RdWV1ZTwvbWVzc2FnZS1kZXN0aW5hdGlvbi10eXBlPgpAQCAtMTI4LDcgKzEyOCw3IEBACiAgICAgICAgIDxyZXMtYXV0aD5Db250YWluZXI8L3Jlcy1hdXRoPgogICAgICAgICA8cmVzLXNoYXJpbmctc2NvcGU+U2hhcmVhYmxlPC9yZXMtc2hhcmluZy1zY29wZT4KICAgICAgIDwvcmVzb3VyY2UtcmVmPgotICAgICAgPG1lc3NhZ2UtZGVzdGluYXRpb24tcmVmPiAgICAgICAKKyAgICAgIDxtZXNzYWdlLWRlc3RpbmF0aW9uLXJlZj4KICAgICAgICAgPGRlc2NyaXB0aW9uPnRpbWVydGVzdCBkZXN0aW5hdGlvbjwvZGVzY3JpcHRpb24+CiAgICAgICAgIDxtZXNzYWdlLWRlc3RpbmF0aW9uLXJlZi1uYW1lPmptcy9NeVF1ZXVlPC9tZXNzYWdlLWRlc3RpbmF0aW9uLXJlZi1uYW1lPgogICAgICAgICA8bWVzc2FnZS1kZXN0aW5hdGlvbi10eXBlPmpha2FydGEuam1zLlF1ZXVlPC9tZXNzYWdlLWRlc3RpbmF0aW9uLXR5cGU+CkBAIC0xNjAsNyArMTYwLDcgQEAKICAgICAgICAgPHJlcy1hdXRoPkNvbnRhaW5lcjwvcmVzLWF1dGg+CiAgICAgICAgIDxyZXMtc2hhcmluZy1zY29wZT5TaGFyZWFibGU8L3Jlcy1zaGFyaW5nLXNjb3BlPgogICAgICAgPC9yZXNvdXJjZS1yZWY+Ci0gICAgICA8bWVzc2FnZS1kZXN0aW5hdGlvbi1yZWY+ICAgICAgIAorICAgICAgPG1lc3NhZ2UtZGVzdGluYXRpb24tcmVmPgogICAgICAgICA8ZGVzY3JpcHRpb24+dGltZXJ0ZXN0IGRlc3RpbmF0aW9uPC9kZXNjcmlwdGlvbj4KICAgICAgICAgPG1lc3NhZ2UtZGVzdGluYXRpb24tcmVmLW5hbWU+am1zL015UXVldWU8L21lc3NhZ2UtZGVzdGluYXRpb24tcmVmLW5hbWU+CiAgICAgICAgIDxtZXNzYWdlLWRlc3RpbmF0aW9uLXR5cGU+amFrYXJ0YS5qbXMuUXVldWU8L21lc3NhZ2UtZGVzdGluYXRpb24tdHlwZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL25vbnBlcnNpc3RlbnR0aW1lci9lamIvQXBwSW5mby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvbm9ucGVyc2lzdGVudHRpbWVyL2VqYi9BcHBJbmZvLmphdmEKaW5kZXggZTNiZTdkYy4uN2NkMGQxNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvbm9ucGVyc2lzdGVudHRpbWVyL2VqYi9BcHBJbmZvLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvbm9ucGVyc2lzdGVudHRpbWVyL2VqYi9BcHBJbmZvLmphdmEKQEAgLTI4LDYgKzI4LDYgQEAKIAogICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQogICAgIHsKLQlyZXR1cm4gZm9vOworICAgIHJldHVybiBmb287CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvbm9ucGVyc2lzdGVudHRpbWVyL2VqYi9Gb29FSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL25vbnBlcnNpc3RlbnR0aW1lci9lamIvRm9vRUpCLmphdmEKaW5kZXggNzMxZGI2OS4uZjFhMmE0YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvbm9ucGVyc2lzdGVudHRpbWVyL2VqYi9Gb29FSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9ub25wZXJzaXN0ZW50dGltZXIvZWpiL0Zvb0VKQi5qYXZhCkBAIC0zMyw3ICszMyw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb0VKQjo6ZWpiVGltZW91dCAtLT4gIiArIHQuZ2V0SW5mbygpKTsKICAgICAgICAgICAgIGlmICh0LmlzUGVyc2lzdGVudCgpKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJGb29FSkI6OmVqYlRpbWVvdXQgLT4gIiAKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiRm9vRUpCOjplamJUaW1lb3V0IC0+ICIKICAgICAgICAgICAgICAgICAgICAgICAgKyB0LmdldEluZm8oKSArICIgaXMgUEVSU0lTVEVOVCEhISIpOwogICAgICAgICB9IGNhdGNoKFJ1bnRpbWVFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJnb3QgZXhjZXB0aW9uIHdoaWxlIGNhbGxpbmcgZ2V0SW5mbyIpOwpAQCAtNTIsNyArNTIsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7Ci0JdGhpcy5zYyA9IHNjOworICAgIHRoaXMuc2MgPSBzYzsKICAgICAgICAgc2V0Q29udGV4dChzYyk7CiAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29FSkI6OnNldFNlc3Npb25Db250ZXh0Iik7CkBAIC02NCw3ICs2NCw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIEVKQkV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBlamJub25wZXJzaXN0ZW50dGltZXIuRm9vOjplamJDcmVhdGUgISEiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIGVqYm5vbnBlcnNpc3RlbnR0aW1lci5Gb286OmVqYkNyZWF0ZSAhISIpOwogICAgICAgICBzZXR1cEptc0Nvbm5lY3Rpb24oKTsKICAgICAgICAgY2hlY2tHZXRTZXRSb2xsYmFja09ubHkoImVqYkNyZWF0ZSIsIGZhbHNlKTsKICAgICAgICAgY2hlY2tDYWxsZXJTZWN1cml0eUFjY2VzcygiZWpiQ3JlYXRlIiwgZmFsc2UpOwpAQCAtODgsNiArODgsNiBAQAogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHsKICAgICB9CiAKLSAgICAKKwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9ub25wZXJzaXN0ZW50dGltZXIvZWpiL01lc3NhZ2VEcml2ZW5FSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL25vbnBlcnNpc3RlbnR0aW1lci9lamIvTWVzc2FnZURyaXZlbkVKQi5qYXZhCmluZGV4IGE0MWNkY2UuLmJiNTIyNzQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL25vbnBlcnNpc3RlbnR0aW1lci9lamIvTWVzc2FnZURyaXZlbkVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL25vbnBlcnNpc3RlbnR0aW1lci9lamIvTWVzc2FnZURyaXZlbkVKQi5qYXZhCkBAIC0xOSw3ICsxOSw3IEBACiBpbXBvcnQgamFrYXJ0YS5qbXMuKjsKIGltcG9ydCBqYWthcnRhLmVqYi4qOwogCi1wdWJsaWMgY2xhc3MgTWVzc2FnZURyaXZlbkVKQiBleHRlbmRzIFRpbWVyU3R1ZmZJbXBsIAorcHVibGljIGNsYXNzIE1lc3NhZ2VEcml2ZW5FSkIgZXh0ZW5kcyBUaW1lclN0dWZmSW1wbAogICAgIGltcGxlbWVudHMgTWVzc2FnZURyaXZlbkJlYW4sIFRpbWVkT2JqZWN0LCBNZXNzYWdlTGlzdGVuZXIgewogICAgIHByaXZhdGUgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjOwogCkBAIC0zNiw3ICszNiw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlY2VpdmVkIG1lc3NhZ2UgIiArIGluZm8gKyAiICwgcmVkZWxpdmVyZWQgPSAiICsgcmVkZWxpdmVyZWQpOwogCiAgICAgICAgICAgICBpZiAoaW5mby5lcXVhbHMoInRlc3QxIikgKSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBvbk1lc3NhZ2UgOiBHb3QgdCBmb3IgdGltZXIgPSAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBvbk1lc3NhZ2UgOiBHb3QgdCBmb3IgdGltZXIgPSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5nZXRJbmZvKCkpOwogICAgICAgICAgICAgICAgIGRvVGltZXJTdHVmZigib25NZXNzYWdlIiwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgZ2V0SW5mbyh0KTsKQEAgLTQ0LDkgKzQ0LDkgQEAKICAgICAgICAgICAgICAgICBnZXRUaW1lUmVtYWluaW5nVGVzdDIoNSwgdCk7CiAKICAgICAgICAgICAgICAgICBjYW5jZWxUaW1lcih0KTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGNyZWF0ZVRpbWVyQW5kQ2FuY2VsKDEwMDAwMDAwKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIFRpbWVyIHQxID0gY3JlYXRlVGltZXIoMTAwMDAwMCwgIm1lc3NhZ2Vkcml2ZW5lamIiKTsKICAgICAgICAgICAgICAgICBjYW5jZWxUaW1lcih0MSk7CiAgICAgICAgICAgICAgICAgVGltZXIgdDIgPSBjcmVhdGVUaW1lcigxMDAwMCwgIm1lc3NhZ2Vkcml2ZW5lamIiKTsKQEAgLTU3LDcgKzU3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgaWYoIGlzQk1UKCkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxUaW1lcih0KTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbFRpbWVyQW5kUm9sbGJhY2sodCk7ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsVGltZXJBbmRSb2xsYmFjayh0KTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSBpZiggaW5mby5lcXVhbHMoInRlc3QzIikgKSB7CkBAIC03OSw4ICs3OSw4IEBACiAgICAgICAgICAgICAgICAgY2FuY2VsVGltZXIodCk7CiAgICAgICAgICAgICAgICAgVGltZXIgY3RhciA9IGNyZWF0ZVRpbWVyKDEsIDEsICJjYW5jZWxUaW1lckFuZFJvbGxiYWNrIik7CiAgICAgICAgICAgICAgICAgY2FuY2VsVGltZXIoY3Rhcik7Ci0gICAgICAgICAgICB9IAotICAgICAgICAgICAgCisgICAgICAgICAgICB9CisKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQpAQCAtOTAsNyArOTAsNyBAQAogICAgICAgICBjaGVja0NhbGxlclNlY3VyaXR5QWNjZXNzKCJlamJUaW1lb3V0IiwgZmFsc2UpOwogCiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIE1lc3NhZ2VEcml2ZW5FSkI6OmVqYlRpbWVvdXQgLS0+ICIgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIE1lc3NhZ2VEcml2ZW5FSkI6OmVqYlRpbWVvdXQgLS0+ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHQuZ2V0SW5mbygpKTsKICAgICAgICAgfSBjYXRjaChSdW50aW1lRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZ290IGV4Y2VwdGlvbiB3aGlsZSBjYWxsaW5nIGdldEluZm8iKTsKQEAgLTEwOSw5ICsxMDksOSBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldE1lc3NhZ2VEcml2ZW5Db250ZXh0KE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYykgewotCXRoaXMubWRjID0gbWRjOworICAgIHRoaXMubWRjID0gbWRjOwogICAgICAgICBzZXRDb250ZXh0KG1kYyk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBlamJub25wZXJzaXN0ZW50dGltZXIuTWVzc2FnZURyaXZlbkVKQjo6c2V0TWVzc2FnZURyaXZlbkNvbnRleHQgISEiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIGVqYm5vbnBlcnNpc3RlbnR0aW1lci5NZXNzYWdlRHJpdmVuRUpCOjpzZXRNZXNzYWdlRHJpdmVuQ29udGV4dCAhISIpOwogICAgICAgICBjaGVja0NhbGxlclNlY3VyaXR5QWNjZXNzKCJzZXRNZXNzYWdlRHJpdmVuQ29udGV4dCIsIGZhbHNlKTsKIAogICAgICAgICBnZXRUaW1lclNlcnZpY2UoInNldE1lc3NhZ2VEcml2ZW5Db250ZXh0IiwgZmFsc2UpOwpAQCAtMTE5LDcgKzExOSw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIEVKQkV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBlamJub25wZXJzaXN0ZW50dGltZXIuTWVzc2FnZURyaXZlbkVKQjo6ZWpiQ3JlYXRlICEhIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBlamJub25wZXJzaXN0ZW50dGltZXIuTWVzc2FnZURyaXZlbkVKQjo6ZWpiQ3JlYXRlICEhIik7CiAgICAgICAgIHNldHVwSm1zQ29ubmVjdGlvbigpOwogICAgICAgICBjaGVja0dldFNldFJvbGxiYWNrT25seSgiZWpiQ3JlYXRlIiwgZmFsc2UpOwogICAgICAgICBjaGVja0NhbGxlclNlY3VyaXR5QWNjZXNzKCJlamJDcmVhdGUiLCBmYWxzZSk7CkBAIC0xMjgsNyArMTI4LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBlamJub25wZXJzaXN0ZW50dGltZXIuTWVzc2FnZURyaXZlbkVKQjo6ZWpiUmVtb3ZlICEhIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBlamJub25wZXJzaXN0ZW50dGltZXIuTWVzc2FnZURyaXZlbkVKQjo6ZWpiUmVtb3ZlICEhIik7CiAgICAgICAgIGNoZWNrQ2FsbGVyU2VjdXJpdHlBY2Nlc3MoImVqYlJlbW92ZSIsIGZhbHNlKTsKICAgICAgICAgY2hlY2tHZXRTZXRSb2xsYmFja09ubHkoImVqYlJlbW92ZSIsIGZhbHNlKTsKICAgICAgICAgZ2V0VGltZXJTZXJ2aWNlKCJlamJSZW1vdmUiLCB0cnVlKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL25vbnBlcnNpc3RlbnR0aW1lci9lamIvU3RhdGVmdWxXcmFwcGVySW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvbm9ucGVyc2lzdGVudHRpbWVyL2VqYi9TdGF0ZWZ1bFdyYXBwZXJJbXBsLmphdmEKaW5kZXggMzdlZjk3Yy4uNGM3ZTA4OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvbm9ucGVyc2lzdGVudHRpbWVyL2VqYi9TdGF0ZWZ1bFdyYXBwZXJJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvbm9ucGVyc2lzdGVudHRpbWVyL2VqYi9TdGF0ZWZ1bFdyYXBwZXJJbXBsLmphdmEKQEAgLTM4LDE5ICszOCwxOSBAQAogICAgIHByaXZhdGUgUXVldWVTZW5kZXIgcXVldWVTZW5kZXI7CiAgICAgKi8KIAotICAgIHB1YmxpYyBib29sZWFuIGRvTWVzc2FnZURyaXZlblRlc3QoU3RyaW5nIGpuZGlOYW1lLCAKKyAgICBwdWJsaWMgYm9vbGVhbiBkb01lc3NhZ2VEcml2ZW5UZXN0KFN0cmluZyBqbmRpTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gam1zKSB7CiAgICAgICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0JLyoqCisgICAgLyoqCiAgICAgICAgIGlmKCBqbXMgKSB7IHJldHVybjsgfQogCiAgICAgICAgIHRyeSB7CiBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqUEctPiBpbiBkb01lc3NhZ2VEcml2ZW5UZXN0KCkgZm9yIGpuZGlOYW1lID0gIiArIGpuZGlOYW1lICk7Ci0gICAgICAgICAgIAorCiAgICAgICAgICAgICBzZXR1cChzZXR1cCk7CiBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqUEctPiBpbiBkb01lc3NhZ2VEcml2ZW5UZXN0KCkgYWZ0ZXIgc2V0dXAiKTsKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkgICAgIFF1ZXVlIG1lc3NhZ2VEcml2ZW5EZXN0ID0gKFF1ZXVlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvIiArIGpuZGlOYW1lKTsKKyAgICAgICAgIFF1ZXVlIG1lc3NhZ2VEcml2ZW5EZXN0ID0gKFF1ZXVlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvIiArIGpuZGlOYW1lKTsKIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEb2luZyBtZXNzYWdlIGRyaXZlbiB0ZXN0cyBmb3IiICsgam5kaU5hbWUpOwogCkBAIC02OCw3ICs2OCw3IEBACiAgICAgICAgICAgICBsb25nIHNsZWVwVGltZSA9IDMwMDAwOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTbGVlcGluZyBmb3IgIiArIHNsZWVwVGltZSAvIDEwMDAgKyAiIHNlY29uZHMiKTsKICAgICAgICAgICAgIFRocmVhZC5zbGVlcChzbGVlcFRpbWUpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8vIGF0IHRoaXMgcG9pbnQsIGFsbCBmb28gdGltZXJzIHNob3VsZCBoYXZlIGJlZW4gY2FuY2VsbGVkCiAgICAgICAgICAgICAvLyBieSB0aGUgbWVzc2FnZSBiZWFuLgogICAgICAgICAgICAgZm9vLmFzc2VydE5vVGltZXJzKCk7CkBAIC03OSwyNyArNzksMjcgQEAKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIGNsZWFudXAoKTsKICAgICAgICAgfQotCSoqLworICAgICoqLwogCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHNldHVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JLyoqCisgICAgLyoqCiAvL1BHLT4gICAgICAgIGNvbnRleHQgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgCi0gICAgICAgIFRvcGljQ29ubmVjdGlvbkZhY3RvcnkgdG9waWNDb25GYWN0b3J5ID0gCisKKyAgICAgICAgVG9waWNDb25uZWN0aW9uRmFjdG9yeSB0b3BpY0NvbkZhY3RvcnkgPQogICAgICAgICAgICAgKFRvcGljQ29ubmVjdGlvbkZhY3RvcnkpIGNvbnRleHQubG9va3VwCiAgICAgICAgICAgICAgICAgKCJqYXZhOmNvbXAvZW52L2ptcy9NeVRvcGljQ29ubmVjdGlvbkZhY3RvcnkiKTsKLSAgICAgICAgICAgICAgICAKKwogU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKlBHLT4gc2V0dXAoKTogYWZ0ZXIgIGxvb2t1cCIpOwogICAgICAgICB0b3BpY0NvbiA9IHRvcGljQ29uRmFjdG9yeS5jcmVhdGVUb3BpY0Nvbm5lY3Rpb24oKTsKIAogU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKlBHLT4gc2V0dXAoKTogYWZ0ZXIgIGNyZWF0ZVRvcGljQ29ubmVjdGlvbiIpOwotICAgICAgICB0b3BpY1Nlc3Npb24gPSAKKyAgICAgICAgdG9waWNTZXNzaW9uID0KICAgICAgICAgICAgIHRvcGljQ29uLmNyZWF0ZVRvcGljU2Vzc2lvbihmYWxzZSwgU2Vzc2lvbi5BVVRPX0FDS05PV0xFREdFKTsKIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKipQRy0+IHNldHVwKCk6IGFmdGVyICBjcmVhdGVUb3BpY1Nlc3Npb24iKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIC8vIFByb2R1Y2VyIHdpbGwgYmUgc3BlY2lmaWVkIHdoZW4gYWN0dWFsIG1zZyBpcyBwdWJsaXNoZWQuCiAgICAgICAgIHRvcGljUHVibGlzaGVyID0gdG9waWNTZXNzaW9uLmNyZWF0ZVB1Ymxpc2hlcihudWxsKTsKIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKipQRy0+IHNldHVwKCk6IGFmdGVyIGNyZWF0ZVB1Ymxpc2hlciIpOwpAQCAtMTA3LDI1ICsxMDcsMjUgQEAKICAgICAgICAgdG9waWNDb24uc3RhcnQoKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKlBHLT4gc2V0dXAoKTogYWZ0ZXIgc3RhcnQiKTsKIAotICAgICAgICBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHF1ZXVlQ29uRmFjdG9yeSA9IAorICAgICAgICBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHF1ZXVlQ29uRmFjdG9yeSA9CiAgICAgICAgICAgICAoUXVldWVDb25uZWN0aW9uRmFjdG9yeSkgY29udGV4dC5sb29rdXAKICAgICAgICAgICAgICgiamF2YTpjb21wL2Vudi9qbXMvTXlRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5Iik7CiAKICAgICAgICAgcXVldWVDb24gPSBxdWV1ZUNvbkZhY3RvcnkuY3JlYXRlUXVldWVDb25uZWN0aW9uKCk7CiAKICAgICAgICAgcXVldWVTZXNzaW9uID0gcXVldWVDb24uY3JlYXRlUXVldWVTZXNzaW9uCi0gICAgICAgICAgICAoZmFsc2UsIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSk7IAorICAgICAgICAgICAgKGZhbHNlLCBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UpOwogCiAgICAgICAgIC8vIFByb2R1Y2VyIHdpbGwgYmUgc3BlY2lmaWVkIHdoZW4gYWN0dWFsIG1zZyBpcyBzZW50LgotICAgICAgICBxdWV1ZVNlbmRlciA9IHF1ZXVlU2Vzc2lvbi5jcmVhdGVTZW5kZXIobnVsbCk7ICAgICAgICAKKyAgICAgICAgcXVldWVTZW5kZXIgPSBxdWV1ZVNlc3Npb24uY3JlYXRlU2VuZGVyKG51bGwpOwogCiAgICAgICAgIHF1ZXVlQ29uLnN0YXJ0KCk7Ci0JKiovCisgICAgKiovCiAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgY2xlYW51cCgpIHsKLQkvKioKKyAgICAvKioKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGlmKCB0b3BpY0NvbiAhPSBudWxsICkgewogICAgICAgICAgICAgICAgIHRvcGljQ29uLmNsb3NlKCk7CkBAIC0xMzksNyArMTM5LDcgQEAKICAgICAgICAgKiovCiAgICAgfQogICAgIC8qKgotICAgIHB1YmxpYyB2b2lkIHB1Ymxpc2hNc2dzKFRvcGljIHRvcGljLCBNZXNzYWdlIG1zZywgaW50IG51bSkgCisgICAgcHVibGljIHZvaWQgcHVibGlzaE1zZ3MoVG9waWMgdG9waWMsIE1lc3NhZ2UgbXNnLCBpbnQgbnVtKQogICAgICAgICB0aHJvd3MgSk1TRXhjZXB0aW9uIHsKICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bTsgaSsrKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlB1Ymxpc2hpbmcgbWVzc2FnZSAiICsgaSArICIgdG8gIiArIHRvcGljKTsKQEAgLTE0Nyw3ICsxNDcsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgc2VuZE1zZ3MoUXVldWUgcXVldWUsIE1lc3NhZ2UgbXNnLCBpbnQgbnVtKSAKKyAgICBwdWJsaWMgdm9pZCBzZW5kTXNncyhRdWV1ZSBxdWV1ZSwgTWVzc2FnZSBtc2csIGludCBudW0pCiAgICAgICAgIHRocm93cyBKTVNFeGNlcHRpb24gewogICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUHVibGlzaGluZyBtZXNzYWdlICIgKyBpICsgIiB0byAiICsgcXVldWUpOwpAQCAtMTk2LDM3ICsxOTYsMzcgQEAKIAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImRvVGVzdCgpOiBjcmVhdGluZyB0aGUgdGltZXIiKTsKICAgICAgICAgVGltZXIgdGltZXIgPSB0aW1lclN0dWZmLmNyZWF0ZVRpbWVyKDEsIDEpOwotICAgICAgICAKKwogICAgICAgICAvLwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImRvVGVzdCgpOiBjcmVhdGluZyB0aGUgdGltZXIyIik7CiAgICAgICAgIFRpbWVyIHRpbWVyMiA9IHRpbWVyU3R1ZmYuY3JlYXRlVGltZXIoMTAwMDAsIDEwMDAwKTsKLSAgICAgICAgCisKICAgICAgICAgLy8KICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJkb1Rlc3QoKTogY3JlYXRpbmcgdGhlIHRpbWVyMyIpOwogICAgICAgICBUaW1lciB0aW1lcjMgPSB0aW1lclN0dWZmLmNyZWF0ZVRpbWVyKG5ldyBEYXRlKCkpOwotICAgICAgICAKKwogICAgICAgICAvLwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImRvVGVzdCgpOiBjcmVhdGluZyB0aGUgdGltZXI0Iik7CiAgICAgICAgIFRpbWVyIHRpbWVyNCA9IHRpbWVyU3R1ZmYuY3JlYXRlVGltZXIobmV3IERhdGUobmV3IERhdGUoKS5nZXRUaW1lKCkgKyAyMDAwKSk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZG9UZXN0KCk6IGNyZWF0aW5nIHRoZSB0aW1lcjUiKTsKICAgICAgICAgVGltZXIgdGltZXI1ID0gdGltZXJTdHVmZi5jcmVhdGVUaW1lcihuZXcgRGF0ZShuZXcgRGF0ZSgpLmdldFRpbWUoKSArIDIwMDAwKSwgMTAwMDApOwogCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZG9UZXN0KCk6IGNyZWF0aW5nIHRoZSBjcmVhdGVUaW1lckFuZFJvbGxiYWNrIik7CiAgICAgICAgIHRpbWVyU3R1ZmYuY3JlYXRlVGltZXJBbmRSb2xsYmFjaygyMDAwMCk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZG9UZXN0KCk6IGNyZWF0aW5nIHRoZSBjcmVhdGVUaW1lckFuZENhbmNlbCIpOwogICAgICAgICB0aW1lclN0dWZmLmNyZWF0ZVRpbWVyQW5kQ2FuY2VsKDIwMDAwKTsKLSAgICAgICAgCisKICAgICAgICAgLy8gQEBAIHJlZXZhbHVhdGUgZG91YmxlIGNhbmNlbCBsb2dpYwogICAgICAgICAvL3RpbWVyU3R1ZmYuY3JlYXRlVGltZXJBbmRDYW5jZWxBbmRDYW5jZWwoMjAwMDApOwotICAgICAgICAKKwogICAgICAgICAvLwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImRvVGVzdCgpOiBjcmVhdGluZyB0aGUgY3JlYXRlVGltZXJBbmRDYW5jZWxBbmRSb2xsYmFjayIpOwogICAgICAgICB0aW1lclN0dWZmLmNyZWF0ZVRpbWVyQW5kQ2FuY2VsQW5kUm9sbGJhY2soMjAwMDApOwotICAgICAgICAKKwogICAgICAgICAvLwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImRvVGVzdCgpOiBjcmVhdGluZyB0aGUgY2FuY2VsVGltZXIodGltZXIyKSIpOwogICAgICAgICB0aW1lclN0dWZmLmNhbmNlbFRpbWVyKHRpbWVyMik7CkBAIC0yMzcsMTggKzIzNywxOCBAQAogICAgICAgICB0aW1lclN0dWZmLmNhbmNlbFRpbWVyQW5kUm9sbGJhY2sodGltZXI1KTsKICAgICAgICAgLy8gQEBAIHJlZXZhbHVhdGUgZG91YmxlIGNhbmNlbCBsb2dpYwogICAgICAgICAvL3RpbWVyU3R1ZmYuY2FuY2VsVGltZXJBbmRDYW5jZWxBbmRSb2xsYmFjayh0aW1lcjYpOwotICAgICAgICAKLSAgICAgICAgVGltZXIgdGltZXI3ID0gCisKKyAgICAgICAgVGltZXIgdGltZXI3ID0KICAgICAgICAgICAgIHRpbWVyU3R1ZmYuY3JlYXRlVGltZXIoMSwgMSwgImNhbmNlbFRpbWVyIik7Ci0gICAgICAgIFRpbWVyIHRpbWVyOCA9IAorICAgICAgICBUaW1lciB0aW1lcjggPQogICAgICAgICAgICAgdGltZXJTdHVmZi5jcmVhdGVUaW1lcigxLCAxLCAiY2FuY2VsVGltZXJBbmRSb2xsYmFjayIpOwotICAgICAgICBUaW1lciB0aW1lcjkgPSAgICAgICAgIAorICAgICAgICBUaW1lciB0aW1lcjkgPQogICAgICAgICAgICAgdGltZXJTdHVmZi5jcmVhdGVUaW1lcigxLCAiY2FuY2VsVGltZXJBbmRSb2xsYmFjayIpOwogCiAgICAgICAgIFRpbWVyIHRpbWVyMTEgPSB0aW1lclN0dWZmLmdldFRpbWVSZW1haW5pbmdUZXN0MSgyMCk7CiAgICAgICAgIHRpbWVyU3R1ZmYuZ2V0VGltZVJlbWFpbmluZ1Rlc3QyKDIwLCB0aW1lcjExKTsKICAgICAgICAgdGltZXJTdHVmZi5nZXRUaW1lUmVtYWluaW5nVGVzdDIoMjAsIHRpbWVyKTsKLSAgICAgICAgCisKICAgICAgICAgVGltZXIgdGltZXIxMiA9IHRpbWVyU3R1ZmYuZ2V0TmV4dFRpbWVvdXRUZXN0MSgyMCk7CiAgICAgICAgIHRpbWVyU3R1ZmYuZ2V0TmV4dFRpbWVvdXRUZXN0MigyMCwgdGltZXIxMik7CiAgICAgICAgIHRpbWVyU3R1ZmYuZ2V0TmV4dFRpbWVvdXRUZXN0MigyMCwgdGltZXIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvbm9ucGVyc2lzdGVudHRpbWVyL2VqYi9UaW1lclN0dWZmLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9ub25wZXJzaXN0ZW50dGltZXIvZWpiL1RpbWVyU3R1ZmYuamF2YQppbmRleCBiMDc3MGU1Li4yYWEyNTFmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9ub25wZXJzaXN0ZW50dGltZXIvZWpiL1RpbWVyU3R1ZmYuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9ub25wZXJzaXN0ZW50dGltZXIvZWpiL1RpbWVyU3R1ZmYuamF2YQpAQCAtNjUsMTEgKzY1LDExIEBACiAgICAgdm9pZCBhc3NlcnRUaW1lck5vdEFjdGl2ZShUaW1lciB0aW1lcikgdGhyb3dzIEV4Y2VwdGlvbjsKIAogICAgIHZvaWQgc2VuZE1lc3NhZ2VBbmRDcmVhdGVUaW1lcigpIHRocm93cyAgRXhjZXB0aW9uOwotICAgIHZvaWQgcmVjdk1lc3NhZ2VBbmRDcmVhdGVUaW1lcihib29sZWFuIGV4cGVjdE1lc3NhZ2UpIAorICAgIHZvaWQgcmVjdk1lc3NhZ2VBbmRDcmVhdGVUaW1lcihib29sZWFuIGV4cGVjdE1lc3NhZ2UpCiAgICAgICAgIHRocm93cyAgRXhjZXB0aW9uOwotICAgIHZvaWQgc2VuZE1lc3NhZ2VBbmRDcmVhdGVUaW1lckFuZFJvbGxiYWNrKCkgCisgICAgdm9pZCBzZW5kTWVzc2FnZUFuZENyZWF0ZVRpbWVyQW5kUm9sbGJhY2soKQogICAgICAgICB0aHJvd3MgIEV4Y2VwdGlvbjsKLSAgICB2b2lkIHJlY3ZNZXNzYWdlQW5kQ3JlYXRlVGltZXJBbmRSb2xsYmFjayhib29sZWFuIGV4cGVjdE1lc3NhZ2UpIAorICAgIHZvaWQgcmVjdk1lc3NhZ2VBbmRDcmVhdGVUaW1lckFuZFJvbGxiYWNrKGJvb2xlYW4gZXhwZWN0TWVzc2FnZSkKICAgICAgICAgdGhyb3dzICBFeGNlcHRpb247CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvbm9ucGVyc2lzdGVudHRpbWVyL2VqYi9UaW1lclN0dWZmSW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvbm9ucGVyc2lzdGVudHRpbWVyL2VqYi9UaW1lclN0dWZmSW1wbC5qYXZhCmluZGV4IDEyNjc0NTEuLjY1YzE3ZmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL25vbnBlcnNpc3RlbnR0aW1lci9lamIvVGltZXJTdHVmZkltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9ub25wZXJzaXN0ZW50dGltZXIvZWpiL1RpbWVyU3R1ZmZJbXBsLmphdmEKQEAgLTMzLDE0ICszMywxNCBAQAogaW1wb3J0IGpha2FydGEuam1zLlRleHRNZXNzYWdlOwogCiBwdWJsaWMgY2xhc3MgVGltZXJTdHVmZkltcGwgaW1wbGVtZW50cyBUaW1lclN0dWZmIHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBUWF9DTVQgPSAwOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBUWF9CTVQgPSAxOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBUWF9VTlNQRUNJRklFRCA9IDI7Ci0gICAgCisKICAgICBwcml2YXRlIEVKQkNvbnRleHQgY29udGV4dF87CiAgICAgcHJpdmF0ZSBpbnQgdHhNb2RlID0gVFhfQ01UOwotICAgIAorCiAgICAgcHJpdmF0ZSBRdWV1ZSBxdWV1ZTsKICAgICBwcml2YXRlIFF1ZXVlU2Vzc2lvbiBzZXNzaW9uOwogICAgIHByaXZhdGUgUXVldWVDb25uZWN0aW9uIGNvbm5lY3Rpb247CkBAIC02MCwxMiArNjAsMTIgQEAKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgdHhNb2RlID0gVFhfVU5TUEVDSUZJRUQ7CiAgICAgICAgICAgICB9Ci0JICAgIC8qKiBUT0RPCisgICAgICAgIC8qKiBUT0RPCiAgICAgICAgICAgICBxdWV1ZSA9IChRdWV1ZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2ptcy9NeVF1ZXVlIik7CiAKLSAgICAgICAgICAgIHFjRmFjdG9yeSA9IChRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5KSAKKyAgICAgICAgICAgIHFjRmFjdG9yeSA9IChRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5KQogICAgICAgICAgICAgICAgIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9qbXMvTXlRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5Iik7Ci0JICAgICoqLworICAgICAgICAqKi8KIAogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwpAQCAtNzUsNyArNzUsNyBAQAogICAgIHByb3RlY3RlZCBib29sZWFuIGlzQ01UKCkgeyByZXR1cm4gdHhNb2RlID09IFRYX0NNVDsgfQogICAgIHByb3RlY3RlZCBib29sZWFuIGlzQk1UKCkgeyByZXR1cm4gdHhNb2RlID09IFRYX0JNVDsgfQogICAgIHByb3RlY3RlZCBib29sZWFuIGlzVHhVbnNwZWNpZmllZCgpIHsgcmV0dXJuIHR4TW9kZSA9PSBUWF9VTlNQRUNJRklFRDsgfQotICAgIAorCiAgICAgcHVibGljIFRpbWVyIGNyZWF0ZVRpbWVyKGxvbmcgZHVyYXRpb24sIFN0cmluZyBpbmZvKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgVGltZXJTZXJ2aWNlIHRzID0gY29udGV4dF8uZ2V0VGltZXJTZXJ2aWNlKCk7CiAgICAgICAgIFRpbWVyIHQgPSB0cy5jcmVhdGVTaW5nbGVBY3Rpb25UaW1lcihkdXJhdGlvbiwgbmV3IFRpbWVyQ29uZmlnKGluZm8sIGZhbHNlKSk7CkBAIC04NiwzMCArODYsMzAgQEAKICAgICAgICAgcmV0dXJuIGNyZWF0ZVRpbWVyKGR1cmF0aW9uLCAiY3JlYXRlVGltZXI8bG9uZz4iICsgZHVyYXRpb24pOwogICAgIH0KIAotICAgIHB1YmxpYyBUaW1lciBjcmVhdGVUaW1lcihsb25nIGluaXRpYWxEdXJhdGlvbiwgbG9uZyBpbnRlcnZhbCkgCisgICAgcHVibGljIFRpbWVyIGNyZWF0ZVRpbWVyKGxvbmcgaW5pdGlhbER1cmF0aW9uLCBsb25nIGludGVydmFsKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVRpbWVyKGluaXRpYWxEdXJhdGlvbiwgaW50ZXJ2YWwsIAorICAgICAgICByZXR1cm4gY3JlYXRlVGltZXIoaW5pdGlhbER1cmF0aW9uLCBpbnRlcnZhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjcmVhdGVUaW1lcjxsb25nLCBsb25nPiIgKyBpbml0aWFsRHVyYXRpb24gKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwiICsgaW50ZXJ2YWwpOwogICAgIH0KIAotICAgIHB1YmxpYyBUaW1lciBjcmVhdGVUaW1lcihsb25nIGluaXRpYWxEdXJhdGlvbiwgbG9uZyBpbnRlcnZhbCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBpbmZvKSAKKyAgICBwdWJsaWMgVGltZXIgY3JlYXRlVGltZXIobG9uZyBpbml0aWFsRHVyYXRpb24sIGxvbmcgaW50ZXJ2YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBpbmZvKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgaWYoIGlzQk1UKCkgKSB7CiAgICAgICAgICAgICBjb250ZXh0Xy5nZXRVc2VyVHJhbnNhY3Rpb24oKS5iZWdpbigpOwogICAgICAgICB9CiAgICAgICAgIFRpbWVyU2VydmljZSB0cyA9IGNvbnRleHRfLmdldFRpbWVyU2VydmljZSgpOwotICAgICAgICBUaW1lciB0ID0gdHMuY3JlYXRlSW50ZXJ2YWxUaW1lcihpbml0aWFsRHVyYXRpb24sIGludGVydmFsLCAKKyAgICAgICAgVGltZXIgdCA9IHRzLmNyZWF0ZUludGVydmFsVGltZXIoaW5pdGlhbER1cmF0aW9uLCBpbnRlcnZhbCwKICAgICAgICAgICAgICAgICAgICAgbmV3IFRpbWVyQ29uZmlnKG5ldyBBcHBJbmZvKGluZm8pLCBmYWxzZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgaWYoIGlzQk1UKCkgKSB7CiAgICAgICAgICAgICBjb250ZXh0Xy5nZXRVc2VyVHJhbnNhY3Rpb24oKS5jb21taXQoKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdDsKICAgICB9CiAKLSAgICBwdWJsaWMgVGltZXIgY3JlYXRlVGltZXIoRGF0ZSBleHBpcmF0aW9uVGltZSkgCisgICAgcHVibGljIFRpbWVyIGNyZWF0ZVRpbWVyKERhdGUgZXhwaXJhdGlvblRpbWUpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBUaW1lclNlcnZpY2UgdHMgPSBjb250ZXh0Xy5nZXRUaW1lclNlcnZpY2UoKTsKICAgICAgICAgaWYoIGlzQk1UKCkgKSB7CkBAIC0xMjAsNyArMTIwLDcgQEAKICAgICAgICAgLy8gVGhpcyBzaG91bGQgaGFwcGVuIHZlcnkgcmFyZWx5IHNpbmNlIGNvbnRhaW5lciBwdXRzIHRoZSBicmFrZXMKICAgICAgICAgLy8gb24gYSBiaXQgYnkgYWRkaW5nIGEgZmV3IHNlY29uZHMgaWYsIHVwb24gY3JlYXRpb24sIHRoZSBleHBpcmF0aW9uCiAgICAgICAgIC8vIHRpbWUgaGFzIGFscmVhZHkgcGFzc2VkLgotICAgICAgICBUaW1lciB0ID0gdHMuY3JlYXRlU2luZ2xlQWN0aW9uVGltZXIoZXhwaXJhdGlvblRpbWUsIAorICAgICAgICBUaW1lciB0ID0gdHMuY3JlYXRlU2luZ2xlQWN0aW9uVGltZXIoZXhwaXJhdGlvblRpbWUsCiAgICAgICAgICAgICAgICAgbmV3IFRpbWVyQ29uZmlnKCJjcmVhdGVUaW1lcjxEYXRlPiIgKyBleHBpcmF0aW9uVGltZSwgZmFsc2UpKTsKICAgICAgICAgaWYoIGlzQk1UKCkgKSB7CiAgICAgICAgICAgICBjb250ZXh0Xy5nZXRVc2VyVHJhbnNhY3Rpb24oKS5jb21taXQoKTsKQEAgLTEyOCwxNCArMTI4LDE0IEBACiAgICAgICAgIHJldHVybiB0OwogICAgIH0KIAotICAgIHB1YmxpYyBUaW1lciBjcmVhdGVUaW1lcihEYXRlIGV4cGlyYXRpb25UaW1lLCBsb25nIGludGVydmFsKSAKKyAgICBwdWJsaWMgVGltZXIgY3JlYXRlVGltZXIoRGF0ZSBleHBpcmF0aW9uVGltZSwgbG9uZyBpbnRlcnZhbCkKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgaWYoIGlzQk1UKCkgKSB7CiAgICAgICAgICAgICBjb250ZXh0Xy5nZXRVc2VyVHJhbnNhY3Rpb24oKS5iZWdpbigpOwogICAgICAgICB9CiAgICAgICAgIFRpbWVyU2VydmljZSB0cyA9IGNvbnRleHRfLmdldFRpbWVyU2VydmljZSgpOwotICAgICAgICBUaW1lciB0ID0gdHMuY3JlYXRlSW50ZXJ2YWxUaW1lcihleHBpcmF0aW9uVGltZSwgaW50ZXJ2YWwsIAorICAgICAgICBUaW1lciB0ID0gdHMuY3JlYXRlSW50ZXJ2YWxUaW1lcihleHBpcmF0aW9uVGltZSwgaW50ZXJ2YWwsCiAgICAgICAgICAgICAgICAgbmV3IFRpbWVyQ29uZmlnKCJjcmVhdGVUaW1lcjxEYXRlLCBsb25nPiIgKyBleHBpcmF0aW9uVGltZSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLCIgKyBpbnRlcnZhbCwgZmFsc2UpKTsKICAgICAgICAgaWYoIGlzQk1UKCkgKSB7CkBAIC0xNTEsNyArMTUxLDcgQEAKICAgICAgICAgICAgIGNvbnRleHRfLmdldFVzZXJUcmFuc2FjdGlvbigpLmJlZ2luKCk7CiAgICAgICAgIH0KICAgICAgICAgVGltZXJTZXJ2aWNlIHRzID0gY29udGV4dF8uZ2V0VGltZXJTZXJ2aWNlKCk7Ci0gICAgICAgIFRpbWVyIHQgPSB0cy5jcmVhdGVTaW5nbGVBY3Rpb25UaW1lcihkdXJhdGlvbiwgCisgICAgICAgIFRpbWVyIHQgPSB0cy5jcmVhdGVTaW5nbGVBY3Rpb25UaW1lcihkdXJhdGlvbiwKICAgICAgICAgICAgICAgICBuZXcgVGltZXJDb25maWcoImNyZWF0ZVRpbWVyQW5kUm9sbGJhY2siICsgZHVyYXRpb24sIGZhbHNlKSk7CiAgICAgICAgIGlmKCBpc0JNVCgpICkgewogICAgICAgICAgICAgY29udGV4dF8uZ2V0VXNlclRyYW5zYWN0aW9uKCkucm9sbGJhY2soKTsKQEAgLTE2NSw3ICsxNjUsNyBAQAogICAgICAgICAgICAgY29udGV4dF8uZ2V0VXNlclRyYW5zYWN0aW9uKCkuYmVnaW4oKTsKICAgICAgICAgfQogICAgICAgICBUaW1lclNlcnZpY2UgdHMgPSBjb250ZXh0Xy5nZXRUaW1lclNlcnZpY2UoKTsKLSAgICAgICAgVGltZXIgdCA9IHRzLmNyZWF0ZVNpbmdsZUFjdGlvblRpbWVyKGR1cmF0aW9uLCAKKyAgICAgICAgVGltZXIgdCA9IHRzLmNyZWF0ZVNpbmdsZUFjdGlvblRpbWVyKGR1cmF0aW9uLAogICAgICAgICAgICAgICAgIG5ldyBUaW1lckNvbmZpZygiY3JlYXRlVGltZXJBbmRDYW5jZWwiICsgZHVyYXRpb24sIGZhbHNlKSk7CiAgICAgICAgIHQuY2FuY2VsKCk7CiAgICAgICAgIGlmKCBpc0JNVCgpICkgewpAQCAtMTc1LDEyICsxNzUsMTIgQEAKIAogICAgIHB1YmxpYyB2b2lkIGNyZWF0ZVRpbWVyQW5kQ2FuY2VsQW5kQ2FuY2VsKGxvbmcgZHVyYXRpb24pIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBpZiggaXNUeFVuc3BlY2lmaWVkKCkgKSB7Ci0gICAgICAgICAgICByZXR1cm47IAorICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9IGVsc2UgaWYoIGlzQk1UKCkgKSB7CiAgICAgICAgICAgICBjb250ZXh0Xy5nZXRVc2VyVHJhbnNhY3Rpb24oKS5iZWdpbigpOwogICAgICAgICB9CiAgICAgICAgIFRpbWVyU2VydmljZSB0cyA9IGNvbnRleHRfLmdldFRpbWVyU2VydmljZSgpOwotICAgICAgICBUaW1lciB0ID0gdHMuY3JlYXRlU2luZ2xlQWN0aW9uVGltZXIoZHVyYXRpb24sIAorICAgICAgICBUaW1lciB0ID0gdHMuY3JlYXRlU2luZ2xlQWN0aW9uVGltZXIoZHVyYXRpb24sCiAgICAgICAgICAgICAgICAgbmV3IFRpbWVyQ29uZmlnKCJjcmVhdGVUaW1lckFuZENhbmNlbEFuZENhbmNlbCIrIGR1cmF0aW9uLCBmYWxzZSkpOwogICAgICAgICB0LmNhbmNlbCgpOwogICAgICAgICB0LmNhbmNlbCgpOwpAQCAtMTg5LDcgKzE4OSw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBjcmVhdGVUaW1lckFuZENhbmNlbEFuZFJvbGxiYWNrKGxvbmcgZHVyYXRpb24pIAorICAgIHB1YmxpYyB2b2lkIGNyZWF0ZVRpbWVyQW5kQ2FuY2VsQW5kUm9sbGJhY2sobG9uZyBkdXJhdGlvbikKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKCBpc1R4VW5zcGVjaWZpZWQoKSApIHsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE5Nyw3ICsxOTcsNyBAQAogICAgICAgICAgICAgY29udGV4dF8uZ2V0VXNlclRyYW5zYWN0aW9uKCkuYmVnaW4oKTsKICAgICAgICAgfQogICAgICAgICBUaW1lclNlcnZpY2UgdHMgPSBjb250ZXh0Xy5nZXRUaW1lclNlcnZpY2UoKTsKLSAgICAgICAgVGltZXIgdCA9IHRzLmNyZWF0ZVNpbmdsZUFjdGlvblRpbWVyKGR1cmF0aW9uLCAKKyAgICAgICAgVGltZXIgdCA9IHRzLmNyZWF0ZVNpbmdsZUFjdGlvblRpbWVyKGR1cmF0aW9uLAogICAgICAgICAgICAgICAgIG5ldyBUaW1lckNvbmZpZygiY3JlYXRlVGltZXJBbmRDYW5jZWxBbmRSb2xsYmFjayIgKyBkdXJhdGlvbiwgZmFsc2UpKTsKICAgICAgICAgdC5jYW5jZWwoKTsKICAgICAgICAgaWYoIGlzQk1UKCkgKSB7CkBAIC0yNDIsOCArMjQyLDggQEAKICAgICAgICAgICAgIGNvbnRleHRfLmdldFVzZXJUcmFuc2FjdGlvbigpLmNvbW1pdCgpOwogICAgICAgICB9CiAgICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIGNhbmNlbFRpbWVyQW5kUm9sbGJhY2soVGltZXIgdGltZXIpIAorCisgICAgcHVibGljIHZvaWQgY2FuY2VsVGltZXJBbmRSb2xsYmFjayhUaW1lciB0aW1lcikKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKCBpc1R4VW5zcGVjaWZpZWQoKSApIHsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTI1OCw3ICsyNTgsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgY2FuY2VsVGltZXJBbmRDYW5jZWxBbmRSb2xsYmFjayhUaW1lciB0aW1lcikgCisgICAgcHVibGljIHZvaWQgY2FuY2VsVGltZXJBbmRDYW5jZWxBbmRSb2xsYmFjayhUaW1lciB0aW1lcikKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKCBpc1R4VW5zcGVjaWZpZWQoKSApIHsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTMwOCw3ICszMDgsNyBAQAogICAgICAgICAgICAgLy8gc3VjY2VzcwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJlbW90ZUV4Y2VwdGlvbigiZ2V0VGltZXJzIGZhaWx1cmUiKTsKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgVGltZXIgZ2V0VGltZVJlbWFpbmluZ1Rlc3QxKGludCBudW1JdGVyYXRpb25zKSB0aHJvd3MgRXhjZXB0aW9uIHsKQEAgLTMxNiw3ICszMTYsNyBAQAogICAgICAgICAgICAgY29udGV4dF8uZ2V0VXNlclRyYW5zYWN0aW9uKCkuYmVnaW4oKTsKICAgICAgICAgfQogICAgICAgICBUaW1lclNlcnZpY2UgdHMgPSBjb250ZXh0Xy5nZXRUaW1lclNlcnZpY2UoKTsKLSAgICAgICAgVGltZXIgdCA9IHRzLmNyZWF0ZUludGVydmFsVGltZXIoMSwgMSwgCisgICAgICAgIFRpbWVyIHQgPSB0cy5jcmVhdGVJbnRlcnZhbFRpbWVyKDEsIDEsCiAgICAgICAgICAgICAgICAgbmV3IFRpbWVyQ29uZmlnKCJnZXRUaW1lUmVtYWluaW5nVGVzdDEiLCBmYWxzZSkpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlbWFpbmluZyB0aW1lcyBmb3IgIiArIHQuZ2V0SW5mbygpKTsKICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bUl0ZXJhdGlvbnM7IGkrKykgewpAQCAtMzQ1LDcgKzM0NSw3IEBACiAgICAgICAgICAgICBjb250ZXh0Xy5nZXRVc2VyVHJhbnNhY3Rpb24oKS5iZWdpbigpOwogICAgICAgICB9CiAgICAgICAgIFRpbWVyU2VydmljZSB0cyA9IGNvbnRleHRfLmdldFRpbWVyU2VydmljZSgpOwotICAgICAgICBUaW1lciB0ID0gdHMuY3JlYXRlSW50ZXJ2YWxUaW1lcigxLCAxLCAKKyAgICAgICAgVGltZXIgdCA9IHRzLmNyZWF0ZUludGVydmFsVGltZXIoMSwgMSwKICAgICAgICAgICAgICAgICBuZXcgVGltZXJDb25maWcoImdldE5leHRUaW1lb3V0VGVzdDEiLCBmYWxzZSkpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlbWFpbmluZyB0aW1lcyBmb3IgIiArIHQuZ2V0SW5mbygpKTsKICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bUl0ZXJhdGlvbnM7IGkrKykgewpAQCAtMzY5LDcgKzM2OSw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvLyBNYWtlIHN1cmUgdGhlcmUgYXJlIG5vIGFjdGl2ZSB0aW1lcnMuICAKKyAgICAvLyBNYWtlIHN1cmUgdGhlcmUgYXJlIG5vIGFjdGl2ZSB0aW1lcnMuCiAgICAgcHVibGljIHZvaWQgYXNzZXJ0Tm9UaW1lcnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgY2hlY2tDYWxsZXJTZWN1cml0eUFjY2VzcygiYXNzZXJ0Tm9UaW1lcnMiLCB0cnVlKTsKICAgICAgICAgVGltZXJTZXJ2aWNlIHRzID0gY29udGV4dF8uZ2V0VGltZXJTZXJ2aWNlKCk7CkBAIC0zNzksMTEgKzM3OSwxMSBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgYXNzZXJ0VGltZXJOb3RBY3RpdmUoVGltZXIgdGltZXIpIAorICAgIHB1YmxpYyB2b2lkIGFzc2VydFRpbWVyTm90QWN0aXZlKFRpbWVyIHRpbWVyKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHRpbWVyLmdldFRpbWVSZW1haW5pbmcoKTsKLSAgICAgICAgICAgIHRocm93IAorICAgICAgICAgICAgdGhyb3cKICAgICAgICAgICAgICAgICBuZXcgRXhjZXB0aW9uKCJhc3NlcnRUaW1lck5vdEFjdGl2ZSBjYWxsZWQgd2l0aCBhY3RpdmUgdGltZXIiKTsKICAgICAgICAgfSBjYXRjaChOb1N1Y2hPYmplY3RMb2NhbEV4Y2VwdGlvbiBuc29sZSkgewogICAgICAgICAgICAgLy8gY2F1Z2h0IGV4cGVjdGVkIGV4Y2VwdGlvbgpAQCAtMzkyLDEwICszOTIsMTAgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyBTZXJpYWxpemFibGUgZ2V0SW5mb05vRXJyb3IoVGltZXIgdGltZXIpIAorICAgIHB1YmxpYyBTZXJpYWxpemFibGUgZ2V0SW5mb05vRXJyb3IoVGltZXIgdGltZXIpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICByZXR1cm4gZ2V0SW5mbyh0aW1lciwgZmFsc2UpOwotICAgICAgICAKKwogICAgIH0KIAogICAgIHB1YmxpYyBTZXJpYWxpemFibGUgZ2V0SW5mbyhUaW1lciB0aW1lcikgdGhyb3dzIEV4Y2VwdGlvbiB7CkBAIC00NDYsMTggKzQ0NiwxOCBAQAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgcmVjdk1lc3NhZ2VBbmRDcmVhdGVUaW1lcihib29sZWFuIGV4cGVjdE1lc3NhZ2UpIAorICAgIHB1YmxpYyB2b2lkIHJlY3ZNZXNzYWdlQW5kQ3JlYXRlVGltZXIoYm9vbGVhbiBleHBlY3RNZXNzYWdlKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgaWYoIGlzVHhVbnNwZWNpZmllZCgpICkgewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYoIGlzQk1UKCkgKSB7CiAgICAgICAgICAgICAgICAgY29udGV4dF8uZ2V0VXNlclRyYW5zYWN0aW9uKCkuYmVnaW4oKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmVjdk1lc3NhZ2VBbmRDcmVhdGVUaW1lcigicmVjdk1lc3NhZ2VBbmRDcmVhdGVUaW1lciIsIAorICAgICAgICAgICAgcmVjdk1lc3NhZ2VBbmRDcmVhdGVUaW1lcigicmVjdk1lc3NhZ2VBbmRDcmVhdGVUaW1lciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdE1lc3NhZ2UpOwogCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKQEAgLTQ3MSw3ICs0NzEsNyBAQAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgcmVjdk1lc3NhZ2VBbmRDcmVhdGVUaW1lckFuZFJvbGxiYWNrKGJvb2xlYW4gZXhwZWN0TWVzc2FnZSkgCisgICAgcHVibGljIHZvaWQgcmVjdk1lc3NhZ2VBbmRDcmVhdGVUaW1lckFuZFJvbGxiYWNrKGJvb2xlYW4gZXhwZWN0TWVzc2FnZSkKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgaWYoIGlzVHhVbnNwZWNpZmllZCgpICkgewpAQCAtNTExLDcgKzUxMSw3IEBACiAgICAgICAgICAgICBUaW1lciB0ID0gdHMuY3JlYXRlU2luZ2xlQWN0aW9uVGltZXIoMSwgbmV3IFRpbWVyQ29uZmlnKHRpbWVyTmFtZSwgZmFsc2UpKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgdGhyb3cgZTsKLSAgICAgICAgfSAKKyAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC01MjIsMTEgKzUyMiwxMSBAQAogICAgICAgICAgICAgUXVldWVSZWNlaXZlciByZWNlaXZlciA9IHNlc3Npb24uY3JlYXRlUmVjZWl2ZXIocXVldWUpOwogICAgICAgICAgICAgLy8gU2VuZCBhIG1lc3NhZ2UuCiAgICAgICAgICAgICBUZXh0TWVzc2FnZSBtZXNzYWdlID0gKFRleHRNZXNzYWdlKSByZWNlaXZlci5yZWNlaXZlTm9XYWl0KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYoIG1lc3NhZ2UgPT0gbnVsbCApIHsKICAgICAgICAgICAgICAgICBpZiggZXhwZWN0TWVzc2FnZSApIHsKICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlbW90ZUV4Y2VwdGlvbigiRXhwZWN0aW5nIG1lc3NhZ2UgaW4gIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlY3ZNZXNzYWdlQW5kQ3JlYXRlVGltZXJBbmRSb2xsYmFjayIpOyAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlY3ZNZXNzYWdlQW5kQ3JlYXRlVGltZXJBbmRSb2xsYmFjayIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYoICFleHBlY3RNZXNzYWdlICkgewpAQCAtNTM0LDEyICs1MzQsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmdldFRleHQoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFRpbWVyU2VydmljZSB0cyA9IGNvbnRleHRfLmdldFRpbWVyU2VydmljZSgpOwogICAgICAgICAgICAgVGltZXIgdCA9IHRzLmNyZWF0ZVNpbmdsZUFjdGlvblRpbWVyKDEsIG5ldyBUaW1lckNvbmZpZyh0aW1lck5hbWUsIGZhbHNlKSk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIHRocm93IGU7Ci0gICAgICAgIH0gCisgICAgICAgIH0KIAogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNjI1LDcgKzYyNSw3IEBACiAgICAgICAgICAgICAgICAgY29udGV4dF8uZ2V0VXNlclRyYW5zYWN0aW9uKCkuYmVnaW4oKTsKICAgICAgICAgICAgICAgICB0eFN0YXJ0ZWQgPSB0cnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgVGltZXIgdCA9IHRzLmNyZWF0ZUludGVydmFsVGltZXIoMSwgMSwgCisgICAgICAgICAgICBUaW1lciB0ID0gdHMuY3JlYXRlSW50ZXJ2YWxUaW1lcigxLCAxLAogICAgICAgICAgICAgICAgICAgICBuZXcgVGltZXJDb25maWcoImRvVGltZXJTdHVmZl8iICsgbWV0aG9kLCBmYWxzZSkpOwogICAgICAgICAgICAgdC5jYW5jZWwoKTsKICAgICAgICAgICAgIGlmKCAhYWxsb3dlZCApIHsKQEAgLTY4OCw3ICs2ODgsNyBAQAogICAgICAgICAgICAgfSBjYXRjaChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gZSkgeyB9CiAgICAgICAgICAgICBnZXRUaW1lclNlcnZpY2UoImVqYlRpbWVvdXQiLCB0cnVlKTsKICAgICAgICAgICAgIGRvVGltZXJTdHVmZigiZWpiVGltZW91dCIsIHRydWUpOwotICAgICAgICB9IAorICAgICAgICB9CiAgICAgfQogCiAgICAgcHJvdGVjdGVkIHZvaWQgY2hlY2tDYWxsZXJTZWN1cml0eUFjY2VzcyhTdHJpbmcgbWV0aG9kLCBib29sZWFuIGFsbG93ZWQpIHsKQEAgLTczMCwxOSArNzMwLDE5IEBACiAKIAogICAgIHByb3RlY3RlZCB2b2lkIHNldHVwSm1zQ29ubmVjdGlvbigpIHsKLQkvKiogVE9ETwotCQorICAgIC8qKiBUT0RPCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBjb25uZWN0aW9uID0gcWNGYWN0b3J5LmNyZWF0ZVF1ZXVlQ29ubmVjdGlvbigpOwogICAgICAgICAgICAgc2Vzc2lvbiA9IGNvbm5lY3Rpb24uY3JlYXRlUXVldWVTZXNzaW9uKHRydWUsIDApOwogICAgICAgICAgICAgY29ubmVjdGlvbi5zdGFydCgpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7IGUucHJpbnRTdGFja1RyYWNlKCk7IH0KLQkqLworICAgICovCiAgICAgfQogCiAgICAgcHJvdGVjdGVkIHZvaWQgY2xlYW51cCgpIHsKLQkvKiogVE9ETworICAgIC8qKiBUT0RPCiAgICAgICAgIGlmKCBjb25uZWN0aW9uICE9IG51bGwgKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uY2xvc2UoKTsKQEAgLTc1MSw3ICs3NTEsNyBAQAogICAgICAgICAgICAgICAgIGptc2UucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLQkqKi8KKyAgICAqKi8KICAgICB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvcmVzY2hlZHVsZV9hZnRlcl9mYWlsdXJlcy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvcmVzY2hlZHVsZV9hZnRlcl9mYWlsdXJlcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDcxZGQxYTEuLjY5ODlmMDYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL3Jlc2NoZWR1bGVfYWZ0ZXJfZmFpbHVyZXMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9yZXNjaGVkdWxlX2FmdGVyX2ZhaWx1cmVzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEzICsxNSwxMyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLXRpbWVyLXJlc2NoZWR1bGUtYWZ0ZXItZmFpbHVyZXMiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9yZXNjaGVkdWxlX2FmdGVyX2ZhaWx1cmVzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL3Jlc2NoZWR1bGVfYWZ0ZXJfZmFpbHVyZXMvYnVpbGQueG1sCmluZGV4IDQyZjczYzIuLmZkZDg1Y2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL3Jlc2NoZWR1bGVfYWZ0ZXJfZmFpbHVyZXMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL3Jlc2NoZWR1bGVfYWZ0ZXJfZmFpbHVyZXMvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OCwyMCArNDgsMjAgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL1N0bGVzKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9DbGllbnQuY2xhc3MsKiovU3RsZXMuY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJyZXNldCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0icmVzZXQtdmFsdWUiIHZhbHVlPSJ0cnVlIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJyZXNldCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgpAQCAtNzQsMTMgKzc0LDEzIEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CiAgICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9InJlc2V0Ij4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJyZXNldC12YWx1ZSIgdmFsdWU9IiIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL3Jlc2NoZWR1bGVfYWZ0ZXJfZmFpbHVyZXMvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvcmVzY2hlZHVsZV9hZnRlcl9mYWlsdXJlcy9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggN2RkZWFlMS4uN2IwMzc5ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvcmVzY2hlZHVsZV9hZnRlcl9mYWlsdXJlcy9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvcmVzY2hlZHVsZV9hZnRlcl9mYWlsdXJlcy9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTIzLDI1ICsyMywyNSBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBJbml0aWFsQ29udGV4dCBjb250ZXh0OwogCiAgICAgQEVKQiBwcml2YXRlIHN0YXRpYyBTdGxlcyBiZWFuOwogCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgeyAKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiZWpiMzEtdGltZXItcmVzY2hlZHVsZV9hZnRlcl9mYWlsdXJlcyIpOwogCiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRpbmcgdGltZXJzIGZvciByZXNjaGVkdWxlX2FmdGVyX2ZhaWx1cmVzIHRpbWVyIHRlc3QiKTsKLSAgICAgICAgICAgIGJlYW4uY3JlYXRlVGltZXJzKCk7IAorICAgICAgICAgICAgYmVhbi5jcmVhdGVUaW1lcnMoKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2FpdGluZyBzb21lIHRpbWUgZm9yIHRpbWVycyB0byBmYWlsIGFuZCBiZSByZXNjaGVkdWxlZCBmb3IgcmVzY2hlZHVsZV9hZnRlcl9mYWlsdXJlcyB0aW1lciB0ZXN0Iik7CiAgICAgICAgICAgICBUaHJlYWQuc2xlZXAoMjQwMDApOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJWZXJpZnlpbmcgdGltZXJzIGZvciByZXNjaGVkdWxlX2FmdGVyX2ZhaWx1cmVzIHRpbWVyIHRlc3QiKTsKLSAgICAgICAgICAgIGJlYW4udmVyaWZ5VGltZXJzKCk7IAorICAgICAgICAgICAgYmVhbi52ZXJpZnlUaW1lcnMoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJyZXNjaGVkdWxlX2FmdGVyX2ZhaWx1cmVzOiAiLCBzdGF0LlBBU1MgKTsKIAogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9zY2hlZHVsZV9hbm4vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL3NjaGVkdWxlX2Fubi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDcwM2MzYTkuLmUzYzIzZjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL3NjaGVkdWxlX2Fubi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL3NjaGVkdWxlX2Fubi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNiArMTUsMTYgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi10aW1lci1zY2hlZHVsZS1hbm4iLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9zY2hlZHVsZV9hbm4vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvc2NoZWR1bGVfYW5uL2J1aWxkLnhtbAppbmRleCBmZmRmNzFhLi44OTQwMGE1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9zY2hlZHVsZV9hbm4vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL3NjaGVkdWxlX2Fubi9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDE0ICs0NiwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovU3RsZXMqLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0NsaWVudC5jbGFzcywqKi9TdGxlcy5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02MSwxMCArNjEsMTAgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvc2NoZWR1bGVfYW5uL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL3NjaGVkdWxlX2Fubi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggZWI2MmJjNC4uYjlmN2Y4NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvc2NoZWR1bGVfYW5uL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9zY2hlZHVsZV9hbm4vY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yMywxNCArMjMsMTQgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgSW5pdGlhbENvbnRleHQgY29udGV4dDsKIAogICAgIEBFSkIgcHJpdmF0ZSBzdGF0aWMgU3RsZXMgYmVhbjsKIAotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsgCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewogICAgICAgICBib29sZWFuIGRvSm1zID0gZmFsc2U7IC8vIFRPRE8gKGFyZ3MubGVuZ3RoID09IDEpICYmIChhcmdzWzBdLmVxdWFsc0lnbm9yZUNhc2UoImptcyIpKTsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJlamIzMS10aW1lci1zY2hlZHVsZV9hbm4iKTsKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2FpdGluZyB0aW1lcnMgdG8gZXhwaXJlIGZvciBzY2hlZHVsZV9hbm4gdGltZXIgdGVzdCIpOwogICAgICAgICAgICAgVGhyZWFkLnNsZWVwKDEyMDAwKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVmVyaWZ5aW5nIHRpbWVycyBmb3Igc2NoZWR1bGVfYW5uIHRpbWVyIHRlc3QiKTsKLSAgICAgICAgICAgIGJlYW4udmVyaWZ5VGltZXJzKCk7IAorICAgICAgICAgICAgYmVhbi52ZXJpZnlUaW1lcnMoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJzY2hlZHVsZV9hbm46ICIsIHN0YXQuUEFTUyApOwogCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL3NjaGVkdWxlX2Fubi9lamIvU3RsZXNFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL3NjaGVkdWxlX2Fubi9lamIvU3RsZXNFSkIuamF2YQppbmRleCBlY2JmMjZhLi5kZGNjZTY2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9zY2hlZHVsZV9hbm4vZWpiL1N0bGVzRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvc2NoZWR1bGVfYW5uL2VqYi9TdGxlc0VKQi5qYXZhCkBAIC0xMDcsNyArMTA3LDcgQEAKICAgICAgICAgICAgICAgICBlcnJvcnMuYWRkKGluZm8pOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmICghZXhwZWN0ZWRfY2FsbGVycy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTWlzc2VkIGluZm8gY291bnQ6ICIgKyBleHBlY3RlZF9jYWxsZXJzLnNpemUoKSk7CiAgICAgICAgICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CkBAIC0xMzQsMTIgKzEzNCwxMiBAQAogICAgICAgICAgICAgZm9yIChTdHJpbmcgZSA6IGVycm9ycykgewogICAgICAgICAgICAgICAgIHNiLmFwcGVuZCgiIiArIGUpLmFwcGVuZCgiLCAiKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIkludGVybmFsIGVycm9yOiBTY2hlZHVsZUV4cHJlc3Npb25zIGZvciBpbmZvczogIiAKKyAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIkludGVybmFsIGVycm9yOiBTY2hlZHVsZUV4cHJlc3Npb25zIGZvciBpbmZvczogIgogICAgICAgICAgICAgICAgICAgICArIHNiLnRvU3RyaW5nKCkgKyAiIHdlcmUgbm90IGF2YWlsYWJsZSBhdCB2ZXJpZnkhIik7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAodGltZXJTdmMuZ2V0VGltZXJzKCkuc2l6ZSgpICE9IDApIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIkFmdGVyIGNlbmNlbCwgdGltZXJTdmMuZ2V0VGltZXJzKCkuc2l6ZSgpID0gIiAKKyAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIkFmdGVyIGNlbmNlbCwgdGltZXJTdmMuZ2V0VGltZXJzKCkuc2l6ZSgpID0gIgogICAgICAgICAgICAgICAgICAgICArIHRpbWVyU3ZjLmdldFRpbWVycygpLnNpemUoKSk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9zY2hlZHVsZV9leHAvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL3NjaGVkdWxlX2V4cC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDkxOWU4MTEuLmY0ZWIyMWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL3NjaGVkdWxlX2V4cC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL3NjaGVkdWxlX2V4cC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNSArMTUsMTUgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi10aW1lci1zY2hlZHVsZS1leHAiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9zY2hlZHVsZV9leHAvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvc2NoZWR1bGVfZXhwL2J1aWxkLnhtbAppbmRleCA3NjUxMDQ4Li45ODk5ZDhjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9zY2hlZHVsZV9leHAvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL3NjaGVkdWxlX2V4cC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDE0ICs0NiwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovU3RsZXMqLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0NsaWVudC5jbGFzcywqKi9TdGxlcy5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02MSwxMCArNjEsMTAgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvc2NoZWR1bGVfZXhwL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL3NjaGVkdWxlX2V4cC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggNjIzMzg3ZC4uZmMyNjI0OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvc2NoZWR1bGVfZXhwL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9zY2hlZHVsZV9leHAvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNSwxNCArMjUsMTQgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgSW5pdGlhbENvbnRleHQgY29udGV4dDsKIAogICAgIEBFSkIgcHJpdmF0ZSBzdGF0aWMgU3RsZXMgYmVhbjsKIAotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsgCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewogICAgICAgICBib29sZWFuIGRvSm1zID0gZmFsc2U7IC8vIFRPRE8gKGFyZ3MubGVuZ3RoID09IDEpICYmIChhcmdzWzBdLmVxdWFsc0lnbm9yZUNhc2UoImptcyIpKTsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJlamIzMS10aW1lci1zY2hlZHVsZV9leHAiKTsKQEAgLTQwLDExICs0MCwxMSBAQAogCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0aW5nIHRpbWVycyBmb3Igc2NoZWR1bGVfZXhwIHRpbWVyIHRlc3QiKTsKLSAgICAgICAgICAgIGJlYW4uY3JlYXRlVGltZXJzKCk7IAorICAgICAgICAgICAgYmVhbi5jcmVhdGVUaW1lcnMoKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2FpdGluZyB0aW1lcnMgdG8gZXhwaXJlIGZvciBzY2hlZHVsZV9leHAgdGltZXIgdGVzdCIpOwogICAgICAgICAgICAgVGhyZWFkLnNsZWVwKDEyMDAwKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVmVyaWZ5aW5nIHRpbWVycyBmb3Igc2NoZWR1bGVfZXhwIHRpbWVyIHRlc3QiKTsKLSAgICAgICAgICAgIGJlYW4udmVyaWZ5VGltZXJzKCk7IAorICAgICAgICAgICAgYmVhbi52ZXJpZnlUaW1lcnMoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJzY2hlZHVsZV9leHA6ICIsIHN0YXQuUEFTUyApOwogCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL3NjaGVkdWxlX2V4cC9lamIvU3RsZXNFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL3NjaGVkdWxlX2V4cC9lamIvU3RsZXNFSkIuamF2YQppbmRleCA1MWU5ZmE3Li5mNWY5MGIwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9zY2hlZHVsZV9leHAvZWpiL1N0bGVzRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvc2NoZWR1bGVfZXhwL2VqYi9TdGxlc0VKQi5qYXZhCkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgIGV4cGVjdGVkX2NhbGxlcnMuYWRkKCIiICsgdGMuZ2V0SW5mbygpKTsKIAogICAgICAgICBpbnQgZGF5T2ZXZWVrID0gKG5vdy5nZXQoQ2FsZW5kYXIuREFZX09GX1dFRUspIC0gMSk7IC8vIFNVTiBpcyAxCi0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY3JlYXRlVGltZXJzKCk6IGNyZWF0aW5nIHRpbWVyIHdpdGggZGF5T2ZXZWVrPXRvZGF5LXRvZGF5ICgiIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNyZWF0ZVRpbWVycygpOiBjcmVhdGluZyB0aW1lciB3aXRoIGRheU9mV2Vlaz10b2RheS10b2RheSAoIgogICAgICAgICAgICAgICAgICsgZGF5T2ZXZWVrICsgIi0iICsgZGF5T2ZXZWVrICsgIikgIik7CiAgICAgICAgIHNlID0gbmV3IFNjaGVkdWxlRXhwcmVzc2lvbigpLnNlY29uZCgiMiAvICAgIDUiKS5taW51dGUoIioiKS5ob3VyKCIqIikuCiAgICAgICAgICAgICAgICAgZGF5T2ZXZWVrKCIiICsgZGF5T2ZXZWVrKyIgLSAgIiArIGRheU9mV2Vlayk7CkBAIC03Nyw3ICs3Nyw3IEBACiAgICAgICAgICAgICBzZWNvbmQgLT0gNjA7CiAgICAgICAgIH0KIAotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNyZWF0ZVRpbWVycygpOiBjcmVhdGluZyB0aW1lciB3aXRoIHNlY29uZD0iICsgKHNlY29uZCArIDUpIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNyZWF0ZVRpbWVycygpOiBjcmVhdGluZyB0aW1lciB3aXRoIHNlY29uZD0iICsgKHNlY29uZCArIDUpCiAgICAgICAgICAgICAgICAgKyAiLCBob3VyPSIgKyBzICk7CiAgICAgICAgIHNlID0gbmV3IFNjaGVkdWxlRXhwcmVzc2lvbigpLnNlY29uZChzZWNvbmQgKyA1KS5taW51dGUoIioiKS5ob3VyKHMpOwogCkBAIC0xNzQsNyArMTc0LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHQuY2FuY2VsKCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKCFleHBlY3RlZF9jYWxsZXJzLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgICAgICAgICAgZm9yIChTdHJpbmcgYyA6IGV4cGVjdGVkX2NhbGxlcnMpIHsKQEAgLTE5OSwxMiArMTk5LDEyIEBACiAgICAgICAgICAgICBmb3IgKFN0cmluZyBlIDogZXJyb3JzKSB7CiAgICAgICAgICAgICAgICAgc2IuYXBwZW5kKCIiICsgZSkuYXBwZW5kKCIsICIpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiSW50ZXJuYWwgZXJyb3I6IFNjaGVkdWxlRXhwcmVzc2lvbnMgZm9yIGluZm9zOiAiIAorICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiSW50ZXJuYWwgZXJyb3I6IFNjaGVkdWxlRXhwcmVzc2lvbnMgZm9yIGluZm9zOiAiCiAgICAgICAgICAgICAgICAgICAgICsgc2IudG9TdHJpbmcoKSArICIgd2VyZSBub3QgYXZhaWxhYmxlIGF0IHZlcmlmeSEiKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICh0aW1lclN2Yy5nZXRUaW1lcnMoKS5zaXplKCkgIT0gMCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiQWZ0ZXIgY2VuY2VsLCB0aW1lclN2Yy5nZXRUaW1lcnMoKS5zaXplKCkgPSAiIAorICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiQWZ0ZXIgY2VuY2VsLCB0aW1lclN2Yy5nZXRUaW1lcnMoKS5zaXplKCkgPSAiCiAgICAgICAgICAgICAgICAgICAgICsgdGltZXJTdmMuZ2V0VGltZXJzKCkuc2l6ZSgpKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL3NjaGVkdWxlX29uX2VqYl90aW1lb3V0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9zY2hlZHVsZV9vbl9lamJfdGltZW91dC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDgxYTlmN2QuLjUxMzJmMmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL3NjaGVkdWxlX29uX2VqYl90aW1lb3V0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvc2NoZWR1bGVfb25fZWpiX3RpbWVvdXQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTYgKzE1LDE2IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItdGltZXItc2NoZWR1bGUtb24tZWpiLXRpbWVvdXQiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9zY2hlZHVsZV9vbl9lamJfdGltZW91dC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9zY2hlZHVsZV9vbl9lamJfdGltZW91dC9idWlsZC54bWwKaW5kZXggOTJiZDU1My4uNzkwNTkyZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvc2NoZWR1bGVfb25fZWpiX3RpbWVvdXQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL3NjaGVkdWxlX29uX2VqYl90aW1lb3V0L2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTQgKzQ2LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9TdGxlcyouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovQ2xpZW50LmNsYXNzLCoqL1N0bGVzLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYxLDEwICs2MSwxMCBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9zY2hlZHVsZV9vbl9lamJfdGltZW91dC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9zY2hlZHVsZV9vbl9lamJfdGltZW91dC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggOTlhZTQ4My4uNTYxZDE0YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvc2NoZWR1bGVfb25fZWpiX3RpbWVvdXQvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL3NjaGVkdWxlX29uX2VqYl90aW1lb3V0L2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzIsMTQgKzMyLDE0IEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIEluaXRpYWxDb250ZXh0IGNvbnRleHQ7CiAKICAgICBARUpCIHByaXZhdGUgc3RhdGljIFN0bGVzIGJlYW47CiAKLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7IAorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiZWpiMzEtdGltZXItc2NoZWR1bGVfb25fZWpiX3RpbWVvdXQiKTsKIAogCkBAIC00OCw3ICs0OCw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldhaXRpbmcgdGltZXJzIHRvIGV4cGlyZSBmb3Igc2NoZWR1bGVfb25fZWpiX3RpbWVvdXQgdGltZXIgdGVzdCIpOwogICAgICAgICAgICAgVGhyZWFkLnNsZWVwKDIwMDApOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJWZXJpZnlpbmcgdGltZXJzIGZvciBzY2hlZHVsZV9vbl9lamJfdGltZW91dCB0aW1lciB0ZXN0Iik7Ci0gICAgICAgICAgICBiZWFuLnZlcmlmeVRpbWVycygpOyAKKyAgICAgICAgICAgIGJlYW4udmVyaWZ5VGltZXJzKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygic2NoZWR1bGVfb25fZWpiX3RpbWVvdXQ6ICIsIHN0YXQuUEFTUyApOwogCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL3NjaGVkdWxlX29uX2VqYl90aW1lb3V0L2Rlc2NyaXB0b3IvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzEvdGltZXIzMS9zY2hlZHVsZV9vbl9lamJfdGltZW91dC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IDQ4ZThjYTQuLjI2ZDlhYzUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL3NjaGVkdWxlX29uX2VqYl90aW1lb3V0L2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvc2NoZWR1bGVfb25fZWpiX3RpbWVvdXQvZGVzY3JpcHRvci9lamItamFyLnhtbApAQCAtMTksNyArMTksNyBAQAogPGVqYi1qYXIgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotICAgICAgCSAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL2VqYi1qYXJfM18xLnhzZCIKKyAgICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS9lamItamFyXzNfMS54c2QiCiAgICAgICAgICB2ZXJzaW9uPSIzLjEiPgogICAgIDxlbnRlcnByaXNlLWJlYW5zPgogICAgICAgICA8c2Vzc2lvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMS90aW1lcjMxL3NjaGVkdWxlX29uX2VqYl90aW1lb3V0L2VqYi9TdGxlc0VKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvc2NoZWR1bGVfb25fZWpiX3RpbWVvdXQvZWpiL1N0bGVzRUpCLmphdmEKaW5kZXggOTUzZGE5NC4uMmVmNWZmOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvc2NoZWR1bGVfb25fZWpiX3RpbWVvdXQvZWpiL1N0bGVzRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMxL3RpbWVyMzEvc2NoZWR1bGVfb25fZWpiX3RpbWVvdXQvZWpiL1N0bGVzRUpCLmphdmEKQEAgLTQ4LDkgKzQ4LDkgQEAKIAogICAgIHB1YmxpYyB2b2lkIHZlcmlmeVRpbWVycygpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBpZiAoIXRpbWVycy5jb250YWlucygiVGltZXIwMSIpKQotICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiVGltZXIwMSBoYWRuJ3QgZmlyZWQiKTsgCisgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJUaW1lcjAxIGhhZG4ndCBmaXJlZCIpOwogICAgICAgICBpZiAoIXRpbWVycy5jb250YWlucygiVGltZXIwMCIpKQotICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiVGltZXIwMCBoYWRuJ3QgZmlyZWQiKTsgCisgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJUaW1lcjAwIGhhZG4ndCBmaXJlZCIpOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9idWlsZC54bWwKaW5kZXggY2NiODY1Yy4uOWVlYjMxZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvYnVpbGQueG1sCkBAIC0xMDUsMTAgKzEwNSwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+Ci0JCVVzYWdlOgotCQkJYW50IGFsbCAoRXhlY3V0ZXMgc2V0IG9mIGVqYi1lamIzMiB0ZXN0cyBpbiBhIGZ1bGwgcHJvZmlsZSkKLQkJCWFudCBsaXRlIChFeGVjdXRlcyBzZXQgb2YgdGhlIGVqYi1lamIzMiB0ZXN0cyBpbiBhIGxpdGUgcHJvZmlsZSkKLQk8L2VjaG8+CisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgc2V0IG9mIGVqYi1lamIzMiB0ZXN0cyBpbiBhIGZ1bGwgcHJvZmlsZSkKKyAgICAgICAgICAgIGFudCBsaXRlIChFeGVjdXRlcyBzZXQgb2YgdGhlIGVqYi1lamIzMiB0ZXN0cyBpbiBhIGxpdGUgcHJvZmlsZSkKKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvZWpibGl0ZS9hc3luYy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VqYmxpdGUvYXN5bmMvYnVpbGQucHJvcGVydGllcwppbmRleCBhY2JkZWQ5Li5lOWY2ZDllIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvZWpibGl0ZS9hc3luYy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lamJsaXRlL2FzeW5jL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEzICsxNSwxMyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMyLWVqYmxpdGUtYXN5bmMiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+IAotPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPlx1MDAyMAorPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzZS5jbGllbnQiIHZhbHVlPSJjb20uYWNtZS5DbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9IiR7bW9kdWxlfSIvPgotCQorCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lamJsaXRlL2FzeW5jL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lamJsaXRlL2FzeW5jL2J1aWxkLnhtbAppbmRleCA5NWMwZWIzLi44MDI2NWIxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvZWpibGl0ZS9hc3luYy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VqYmxpdGUvYXN5bmMvYnVpbGQueG1sCkBAIC0zNCwxMSArMzQsMTEgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJ3YXIiLz4KLSAgICAgICAgPC9hbnRjYWxsPiAgICAKKyAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CkBAIC00OCw5ICs0OCw5IEBACiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjbGllbnQiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNTgsOSArNTgsOSBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuX3NlIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bl9zZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgIDxqYXZhICBmb3JrPSJvbiIgCisgICAgICAgPGphdmEgIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iJHtzZS5jbGllbnR9Ij4KQEAgLTcyLDcgKzcyLDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lamJsaXRlL2FzeW5jL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lamJsaXRlL2FzeW5jL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBjMjk4YTRiLi5jMThjZGUzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvZWpibGl0ZS9hc3luYy9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VqYmxpdGUvYXN5bmMvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNiw3ICsyNiw3IEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBhcHBOYW1lOwpAQCAtMzQsNDYgKzM0LDQ2IEBACiAgICAgcHJpdmF0ZSBTdHJpbmcgcG9ydDsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKLQlhcHBOYW1lID0gYXJnc1swXTsKLQlzdGF0LmFkZERlc2NyaXB0aW9uKGFwcE5hbWUpOwotCUNsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOyAgICAgICAKLSAgICAgICAgY2xpZW50LmRvVGVzdCgpOwkKKyAgICBhcHBOYW1lID0gYXJnc1swXTsKKyAgICBzdGF0LmFkZERlc2NyaXB0aW9uKGFwcE5hbWUpOworICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOworICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KGFwcE5hbWUgKyAiSUQiKTsKICAgICB9CiAKICAgICBwdWJsaWMgQ2xpZW50KFN0cmluZ1tdIGFyZ3MpIHsKLQlob3N0ID0gYXJnc1sxXTsKKyAgICBob3N0ID0gYXJnc1sxXTsKICAgICAgICAgcG9ydCA9IGFyZ3NbMl07CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogCi0JdHJ5IHsKKyAgICB0cnkgewogCi0JICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIAorICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKwogICAgICAgICAgICAgICAgICIvIiArIGFwcE5hbWUgKyAiL0hlbGxvU2VydmxldCI7CiAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW52b2tpbmcgd2ViY2xpZW50IHNlcnZsZXQgYXQgIiArIHVybCk7CiAKLQkgICAgVVJMIHUgPSBuZXcgVVJMKHVybCk7Ci0gICAgICAgIAotCSAgICBIdHRwVVJMQ29ubmVjdGlvbiBjMSA9IChIdHRwVVJMQ29ubmVjdGlvbil1Lm9wZW5Db25uZWN0aW9uKCk7Ci0JICAgIGludCBjb2RlID0gYzEuZ2V0UmVzcG9uc2VDb2RlKCk7Ci0JICAgIElucHV0U3RyZWFtIGlzID0gYzEuZ2V0SW5wdXRTdHJlYW0oKTsKLQkgICAgQnVmZmVyZWRSZWFkZXIgaW5wdXQgPSBuZXcgQnVmZmVyZWRSZWFkZXIgKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwotCSAgICBTdHJpbmcgbGluZSA9IG51bGw7Ci0JICAgIHdoaWxlKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkKLQkJU3lzdGVtLm91dC5wcmludGxuKGxpbmUpOwotCSAgICBpZihjb2RlICE9IDIwMCkgewotCQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiSW5jb3JyZWN0IHJldHVybiBjb2RlOiAiICsgY29kZSk7Ci0JICAgIH0KLQkgICAgCi0JICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5QQVNTKTsKKyAgICAgICAgVVJMIHUgPSBuZXcgVVJMKHVybCk7CiAKLQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5GQUlMKTsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGMxID0gKEh0dHBVUkxDb25uZWN0aW9uKXUub3BlbkNvbm5lY3Rpb24oKTsKKyAgICAgICAgaW50IGNvZGUgPSBjMS5nZXRSZXNwb25zZUNvZGUoKTsKKyAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBjMS5nZXRJbnB1dFN0cmVhbSgpOworICAgICAgICBCdWZmZXJlZFJlYWRlciBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlciAobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CisgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKKyAgICAgICAgd2hpbGUoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obGluZSk7CisgICAgICAgIGlmKGNvZGUgIT0gMjAwKSB7CisgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJJbmNvcnJlY3QgcmV0dXJuIGNvZGU6ICIgKyBjb2RlKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5QQVNTKTsKKworICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LkZBSUwpOworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KICAgICB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VqYmxpdGUvYXN5bmMvd2FyL0hlbGxvU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VqYmxpdGUvYXN5bmMvd2FyL0hlbGxvU2VydmxldC5qYXZhCmluZGV4IDcyMDViNzAuLjg0YTgzMTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lamJsaXRlL2FzeW5jL3dhci9IZWxsb1NlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvZWpibGl0ZS9hc3luYy93YXIvSGVsbG9TZXJ2bGV0LmphdmEKQEAgLTM1LDcgKzM1LDcgQEAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU2VydmxldDo6aW5pdCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TZXJ2bGV0Ojppbml0Iik7CiAgICAgfQogCiAgICAgQEVKQiBTaW5nbGV0b25CZWFuIHNiOwpAQCAtNDYsMTMgKzQ2LDEzIEBACiAgICAgcHJvdGVjdGVkIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAKLQlyZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKKyAgICByZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcC5nZXRXcml0ZXIoKTsKIAotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TZXJ2bGV0Ojpkb0dldCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TZXJ2bGV0Ojpkb0dldCIpOwogCiAKLQl0cnkgeworICAgIHRyeSB7CiAKICAgICAgICAgICAgIHNiLmhlbGxvKCk7CiAKQEAgLTgwLDE4ICs4MCwxOCBAQAogICAgICAgICAgICAgfQogCiAKLQl9IGNhdGNoKFJ1bnRpbWVFeGNlcHRpb24gZSkgewotCSAgICB0aHJvdyBlOwotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7CisgICAgfSBjYXRjaChSdW50aW1lRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgdGhyb3cgZTsKKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOwogICAgICAgIH0KIAogCi0Jb3V0LnByaW50bG4oIjxIVE1MPiA8SEVBRD4gPFRJVExFPiBKTVMgU2VydmxldCBPdXRwdXQgPC9USVRMRT4gPC9IRUFEPiA8Qk9EWSBCR0NPTE9SPXdoaXRlPiIpOworICAgIG91dC5wcmludGxuKCI8SFRNTD4gPEhFQUQ+IDxUSVRMRT4gSk1TIFNlcnZsZXQgT3V0cHV0IDwvVElUTEU+IDwvSEVBRD4gPEJPRFkgQkdDT0xPUj13aGl0ZT4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8Q0VOVEVSPiA8Rk9OVCBzaXplPSsxIENPTE9SPWJsdWU+RGF0YWJhc2VTZXJ2ZWx0IDo6IEFsbCBpbmZvcm1hdGlvbiBJIGNhbiBnaXZlIDwvRk9OVD4gPC9DRU5URVI+IDxwPiAiICk7Ci0gICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IENvbnRleHQgUGF0aCA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0Q29udGV4dFBhdGgoKSArICI8YnI+IiApOyAKLSAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gU2VydmxldCBQYXRoIDogIDwvRk9OVD4gIiArIHJlcS5nZXRTZXJ2bGV0UGF0aCgpICsgIjxicj4iICk7IAotICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBQYXRoIEluZm8gOiAgPC9GT05UPiAiICsgcmVxLmdldFBhdGhJbmZvKCkgKyAiPGJyPiIgKTsgCisgICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IENvbnRleHQgUGF0aCA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0Q29udGV4dFBhdGgoKSArICI8YnI+IiApOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBTZXJ2bGV0IFBhdGggOiAgPC9GT05UPiAiICsgcmVxLmdldFNlcnZsZXRQYXRoKCkgKyAiPGJyPiIgKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gUGF0aCBJbmZvIDogIDwvRk9OVD4gIiArIHJlcS5nZXRQYXRoSW5mbygpICsgIjxicj4iICk7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9CT0RZPiA8L0hUTUw+ICIpOwogCiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VqYmxpdGUvYXN5bmMvd2FyL1NpbmdsZXRvbkJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lamJsaXRlL2FzeW5jL3dhci9TaW5nbGV0b25CZWFuLmphdmEKaW5kZXggNGQ2YTUzYy4uOTYwMDRhNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VqYmxpdGUvYXN5bmMvd2FyL1NpbmdsZXRvbkJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvZWpibGl0ZS9hc3luYy93YXIvU2luZ2xldG9uQmVhbi5qYXZhCkBAIC0zNywyNCArMzcsMjQgQEAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHB1YmxpYyB2b2lkIGluaXQoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6aW5pdCgpIik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJUaHJlYWQgPSAiICsgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSk7Ci0JbWUuZm9vQXN5bmMoKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRocmVhZCA9ICIgKyBUaHJlYWQuY3VycmVudFRocmVhZCgpKTsKKyAgICBtZS5mb29Bc3luYygpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgaGVsbG8oKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOjpoZWxsbygpIik7Ci0JcmV0dXJuICJoZWxsbywgd29ybGQhXG4iOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6aGVsbG8oKSIpOworICAgIHJldHVybiAiaGVsbG8sIHdvcmxkIVxuIjsKICAgICB9CiAKICAgICBAQXN5bmNocm9ub3VzCiAgICAgcHVibGljIHZvaWQgZm9vQXN5bmMoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOjpmb29Bc3luYygpIik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJUaHJlYWQgPSAiICsgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSk7Ci0JZ290QXN5bmNDYWxsID0gdHJ1ZTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46OmZvb0FzeW5jKCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRocmVhZCA9ICIgKyBUaHJlYWQuY3VycmVudFRocmVhZCgpKTsKKyAgICBnb3RBc3luY0NhbGwgPSB0cnVlOwogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIGdldFBhc3NlZCgpIHsKLQlyZXR1cm4gZ290QXN5bmNDYWxsOworICAgIHJldHVybiBnb3RBc3luY0NhbGw7CiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lamJsaXRlL2FzeW5jL3dhci9TdGF0ZWZ1bEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lamJsaXRlL2FzeW5jL3dhci9TdGF0ZWZ1bEJlYW4uamF2YQppbmRleCAzYTkyMzU5Li5lNDZjN2EzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvZWpibGl0ZS9hc3luYy93YXIvU3RhdGVmdWxCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VqYmxpdGUvYXN5bmMvd2FyL1N0YXRlZnVsQmVhbi5qYXZhCkBAIC0yOSw3ICsyOSw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgaGVsbG8oKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZWZ1bEJlYW46OmhlbGxvKCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlZnVsQmVhbjo6aGVsbG8oKSIpOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvZWpibGl0ZS9hc3luYy93YXIvU3RhdGVmdWxCZWFuMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VqYmxpdGUvYXN5bmMvd2FyL1N0YXRlZnVsQmVhbjIuamF2YQppbmRleCBhZTI3NjdmLi5jMWEyZmQ5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvZWpibGl0ZS9hc3luYy93YXIvU3RhdGVmdWxCZWFuMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lamJsaXRlL2FzeW5jL3dhci9TdGF0ZWZ1bEJlYW4yLmphdmEKQEAgLTMwLDcgKzMwLDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBoZWxsbygpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlZnVsQmVhbjI6OmhlbGxvKCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFN0YXRlZnVsQmVhbjI6OmhlbGxvKCkiKTsKICAgICB9CiAKICAgICBAUHJlRGVzdHJveQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VqYmxpdGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VqYmxpdGUvYnVpbGQueG1sCmluZGV4IDAxMWJhNDUuLmZlMjRiYWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lamJsaXRlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvZWpibGl0ZS9idWlsZC54bWwKQEAgLTQ2LDkgKzQ2LDkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPgotCQlVc2FnZToKLQkJCWFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZWpiLWVqYjMyLWVqYmxpdGUgdGVzdHMpCi0JPC9lY2hvPgorICAgIDxlY2hvPgorICAgICAgICBVc2FnZToKKyAgICAgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZWpiLWVqYjMyLWVqYmxpdGUgdGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VqYmxpdGUvbm9ucGVyc2lzdGVudHRpbWVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvZWpibGl0ZS9ub25wZXJzaXN0ZW50dGltZXIvYnVpbGQucHJvcGVydGllcwppbmRleCA5NWQ1ZjI3Li4xODJjN2E3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvZWpibGl0ZS9ub25wZXJzaXN0ZW50dGltZXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvZWpibGl0ZS9ub25wZXJzaXN0ZW50dGltZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTMgKzE1LDEzIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzItZWpibGl0ZS10aW1lciIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gCi08cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+XHUwMDIwCis8cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InNlLmNsaWVudCIgdmFsdWU9ImNvbS5hY21lLkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iJHttb2R1bGV9Ii8+Ci0JCisKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VqYmxpdGUvbm9ucGVyc2lzdGVudHRpbWVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lamJsaXRlL25vbnBlcnNpc3RlbnR0aW1lci9idWlsZC54bWwKaW5kZXggZDhjN2Q0Ny4uODhjNzZkNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VqYmxpdGUvbm9ucGVyc2lzdGVudHRpbWVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvZWpibGl0ZS9ub25wZXJzaXN0ZW50dGltZXIvYnVpbGQueG1sCkBAIC0zNCwxMSArMzQsMTEgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJ3YXIiLz4KLSAgICAgICAgPC9hbnRjYWxsPiAgICAKKyAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CkBAIC00OCw5ICs0OCw5IEBACiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjbGllbnQiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNTgsOSArNTgsOSBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuX3NlIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bl9zZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgIDxqYXZhICBmb3JrPSJvbiIgCisgICAgICAgPGphdmEgIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iJHtzZS5jbGllbnR9Ij4KQEAgLTcyLDcgKzcyLDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lamJsaXRlL25vbnBlcnNpc3RlbnR0aW1lci9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvZWpibGl0ZS9ub25wZXJzaXN0ZW50dGltZXIvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGMyOThhNGIuLmMxOGNkZTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lamJsaXRlL25vbnBlcnNpc3RlbnR0aW1lci9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VqYmxpdGUvbm9ucGVyc2lzdGVudHRpbWVyL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjYsNyArMjYsNyBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgYXBwTmFtZTsKQEAgLTM0LDQ2ICszNCw0NiBAQAogICAgIHByaXZhdGUgU3RyaW5nIHBvcnQ7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7Ci0JYXBwTmFtZSA9IGFyZ3NbMF07Ci0Jc3RhdC5hZGREZXNjcmlwdGlvbihhcHBOYW1lKTsKLQlDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsgICAgICAgCi0gICAgICAgIGNsaWVudC5kb1Rlc3QoKTsJCisgICAgYXBwTmFtZSA9IGFyZ3NbMF07CisgICAgc3RhdC5hZGREZXNjcmlwdGlvbihhcHBOYW1lKTsKKyAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKKyAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShhcHBOYW1lICsgIklEIik7CiAgICAgfQogCiAgICAgcHVibGljIENsaWVudChTdHJpbmdbXSBhcmdzKSB7Ci0JaG9zdCA9IGFyZ3NbMV07CisgICAgaG9zdCA9IGFyZ3NbMV07CiAgICAgICAgIHBvcnQgPSBhcmdzWzJdOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKIAotCXRyeSB7CisgICAgdHJ5IHsKIAotCSAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyAKKyAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsKICAgICAgICAgICAgICAgICAiLyIgKyBhcHBOYW1lICsgIi9IZWxsb1NlcnZsZXQiOwogCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImludm9raW5nIHdlYmNsaWVudCBzZXJ2bGV0IGF0ICIgKyB1cmwpOwogCi0JICAgIFVSTCB1ID0gbmV3IFVSTCh1cmwpOwotICAgICAgICAKLQkgICAgSHR0cFVSTENvbm5lY3Rpb24gYzEgPSAoSHR0cFVSTENvbm5lY3Rpb24pdS5vcGVuQ29ubmVjdGlvbigpOwotCSAgICBpbnQgY29kZSA9IGMxLmdldFJlc3BvbnNlQ29kZSgpOwotCSAgICBJbnB1dFN0cmVhbSBpcyA9IGMxLmdldElucHV0U3RyZWFtKCk7Ci0JICAgIEJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyIChuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKLQkgICAgU3RyaW5nIGxpbmUgPSBudWxsOwotCSAgICB3aGlsZSgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpCi0JCVN5c3RlbS5vdXQucHJpbnRsbihsaW5lKTsKLQkgICAgaWYoY29kZSAhPSAyMDApIHsKLQkJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkluY29ycmVjdCByZXR1cm4gY29kZTogIiArIGNvZGUpOwotCSAgICB9Ci0JICAgIAotCSAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuUEFTUyk7CisgICAgICAgIFVSTCB1ID0gbmV3IFVSTCh1cmwpOwogCi0JfSBjYXRjaChFeGNlcHRpb24gZSkgewotCSAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuRkFJTCk7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQorICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjMSA9IChIdHRwVVJMQ29ubmVjdGlvbil1Lm9wZW5Db25uZWN0aW9uKCk7CisgICAgICAgIGludCBjb2RlID0gYzEuZ2V0UmVzcG9uc2VDb2RlKCk7CisgICAgICAgIElucHV0U3RyZWFtIGlzID0gYzEuZ2V0SW5wdXRTdHJlYW0oKTsKKyAgICAgICAgQnVmZmVyZWRSZWFkZXIgaW5wdXQgPSBuZXcgQnVmZmVyZWRSZWFkZXIgKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOworICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CisgICAgICAgIHdoaWxlKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGxpbmUpOworICAgICAgICBpZihjb2RlICE9IDIwMCkgeworICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiSW5jb3JyZWN0IHJldHVybiBjb2RlOiAiICsgY29kZSk7CisgICAgICAgIH0KKworICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuUEFTUyk7CisKKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5GQUlMKTsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CiAgICAgfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lamJsaXRlL25vbnBlcnNpc3RlbnR0aW1lci93YXIvQXBwSW5mby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VqYmxpdGUvbm9ucGVyc2lzdGVudHRpbWVyL3dhci9BcHBJbmZvLmphdmEKaW5kZXggMGU3ODY0Yy4uZGEzMTY0MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VqYmxpdGUvbm9ucGVyc2lzdGVudHRpbWVyL3dhci9BcHBJbmZvLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VqYmxpdGUvbm9ucGVyc2lzdGVudHRpbWVyL3dhci9BcHBJbmZvLmphdmEKQEAgLTI4LDYgKzI4LDYgQEAKIAogICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQogICAgIHsKLQlyZXR1cm4gZm9vOworICAgIHJldHVybiBmb287CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VqYmxpdGUvbm9ucGVyc2lzdGVudHRpbWVyL3dhci9Gb29CTVQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lamJsaXRlL25vbnBlcnNpc3RlbnR0aW1lci93YXIvRm9vQk1ULmphdmEKaW5kZXggNWYxMmJmZi4uMDhkNWUwOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VqYmxpdGUvbm9ucGVyc2lzdGVudHRpbWVyL3dhci9Gb29CTVQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvZWpibGl0ZS9ub25wZXJzaXN0ZW50dGltZXIvd2FyL0Zvb0JNVC5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb0JNVDo6VGltZW91dCAtLT4gIiArIHQuZ2V0SW5mbygpKTsKICAgICAgICAgICAgIGlmICh0LmlzUGVyc2lzdGVudCgpKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJGb29CTVQ6OlRpbWVvdXQgLT4gIiAKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiRm9vQk1UOjpUaW1lb3V0IC0+ICIKICAgICAgICAgICAgICAgICAgICAgICAgKyB0LmdldEluZm8oKSArICIgaXMgUEVSU0lTVEVOVCEhISIpOwogICAgICAgICB9IGNhdGNoKFJ1bnRpbWVFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJnb3QgZXhjZXB0aW9uIHdoaWxlIGNhbGxpbmcgZ2V0SW5mbyIpOwpAQCAtNTEsNyArNTEsNyBAQAogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdCgpIHRocm93cyBFSkJFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gZWpibGl0ZS50aW1lci5Gb286OmluaXQgISEiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIGVqYmxpdGUudGltZXIuRm9vOjppbml0ICEhIik7CiAgICAgICAgIGlzQk1UID0gdHJ1ZTsKICAgICAgICAgc2V0Q29udGV4dChzYyk7CiAgICAgICAgIGdldFRpbWVyU2VydmljZSgiaW5pdCIsIHRydWUpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VqYmxpdGUvbm9ucGVyc2lzdGVudHRpbWVyL3dhci9Gb29DTVQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lamJsaXRlL25vbnBlcnNpc3RlbnR0aW1lci93YXIvRm9vQ01ULmphdmEKaW5kZXggY2Y5NDM3ZS4uMDM1N2EyYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VqYmxpdGUvbm9ucGVyc2lzdGVudHRpbWVyL3dhci9Gb29DTVQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvZWpibGl0ZS9ub25wZXJzaXN0ZW50dGltZXIvd2FyL0Zvb0NNVC5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb0NNVDo6VGltZW91dCAtLT4gIiArIHQuZ2V0SW5mbygpKTsKICAgICAgICAgICAgIGlmICh0LmlzUGVyc2lzdGVudCgpKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJGb29DTVQ6OlRpbWVvdXQgLT4gIiAKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiRm9vQ01UOjpUaW1lb3V0IC0+ICIKICAgICAgICAgICAgICAgICAgICAgICAgKyB0LmdldEluZm8oKSArICIgaXMgUEVSU0lTVEVOVCEhISIpOwogICAgICAgICB9IGNhdGNoKFJ1bnRpbWVFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJnb3QgZXhjZXB0aW9uIHdoaWxlIGNhbGxpbmcgZ2V0SW5mbyIpOwpAQCAtNTAsNyArNTAsNyBAQAogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdCgpIHRocm93cyBFSkJFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gZWpibGl0ZS50aW1lci5Gb286OmluaXQgISEiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIGVqYmxpdGUudGltZXIuRm9vOjppbml0ICEhIik7CiAgICAgICAgIHNldENvbnRleHQoc2MpOwogICAgICAgICBnZXRUaW1lclNlcnZpY2UoImluaXQiLCB0cnVlKTsKICAgICAgICAgZG9UaW1lclN0dWZmKCJpbml0IiwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VqYmxpdGUvbm9ucGVyc2lzdGVudHRpbWVyL3dhci9IZWxsb1NlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lamJsaXRlL25vbnBlcnNpc3RlbnR0aW1lci93YXIvSGVsbG9TZXJ2bGV0LmphdmEKaW5kZXggNTFjMmRhOS4uZGUwOWI0MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VqYmxpdGUvbm9ucGVyc2lzdGVudHRpbWVyL3dhci9IZWxsb1NlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvZWpibGl0ZS9ub25wZXJzaXN0ZW50dGltZXIvd2FyL0hlbGxvU2VydmxldC5qYXZhCkBAIC0zNiw0NiArMzYsNDYgQEAKIEBXZWJTZXJ2bGV0KHVybFBhdHRlcm5zPSIvSGVsbG9TZXJ2bGV0IiwgbG9hZE9uU3RhcnR1cD0xKQogcHVibGljIGNsYXNzIEhlbGxvU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIAotICAgIEBFSkIgICAgCisgICAgQEVKQgogICAgIHByaXZhdGUgU3RhdGVmdWxXcmFwcGVyIHdyYXBwZXI7CiAKIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TZXJ2bGV0Ojppbml0Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NlcnZsZXQ6OmluaXQiKTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKICAgICBwcm90ZWN0ZWQgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKIAotCXJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOworICAgIHJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwLmdldFdyaXRlcigpOwogCi0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NlcnZsZXQ6OmRvR2V0Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NlcnZsZXQ6OmRvR2V0Iik7CiAKIAotCXRyeSB7CisgICAgdHJ5IHsKIAogICAgICAgICAgICAgYm9vbGVhbiByZXN1bHQgPSB3cmFwcGVyLmRvRm9vVGVzdCh0cnVlKTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0KSAKKyAgICAgICAgICAgIGlmICghcmVzdWx0KQogICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJCTVQgZmFpbGVkIik7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1NlcnZsZXQ6OkJNVCBwYXNzZWQiKTsKIAogICAgICAgICAgICAgcmVzdWx0ID0gd3JhcHBlci5kb0Zvb1Rlc3QoZmFsc2UpOwotICAgICAgICAgICAgaWYgKCFyZXN1bHQpIAorICAgICAgICAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkNNVCBmYWlsZWQiKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU2VydmxldDo6Q01UIHBhc3NlZCIpOwotCSAgICAKIAotCX0gY2F0Y2goUnVudGltZUV4Y2VwdGlvbiBlKSB7Ci0JICAgIHRocm93IGU7Ci0JfSBjYXRjaChFeGNlcHRpb24gZSkgewotCSAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKLQl9IGZpbmFsbHkgeworCisgICAgfSBjYXRjaChSdW50aW1lRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgdGhyb3cgZTsKKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOworICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICB3cmFwcGVyLnJlbW92ZUZvbygpOwogICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewpAQCAtODQsMTEgKzg0LDExIEBACiAgICAgICAgfQogCiAKLQlvdXQucHJpbnRsbigiPEhUTUw+IDxIRUFEPiA8VElUTEU+IEpNUyBTZXJ2bGV0IE91dHB1dCA8L1RJVExFPiA8L0hFQUQ+IDxCT0RZIEJHQ09MT1I9d2hpdGU+Iik7CisgICAgb3V0LnByaW50bG4oIjxIVE1MPiA8SEVBRD4gPFRJVExFPiBKTVMgU2VydmxldCBPdXRwdXQgPC9USVRMRT4gPC9IRUFEPiA8Qk9EWSBCR0NPTE9SPXdoaXRlPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxDRU5URVI+IDxGT05UIHNpemU9KzEgQ09MT1I9Ymx1ZT5EYXRhYmFzZVNlcnZlbHQgOjogQWxsIGluZm9ybWF0aW9uIEkgY2FuIGdpdmUgPC9GT05UPiA8L0NFTlRFUj4gPHA+ICIgKTsKLSAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gQ29udGV4dCBQYXRoIDogIDwvRk9OVD4gIiArIHJlcS5nZXRDb250ZXh0UGF0aCgpICsgIjxicj4iICk7IAotICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBTZXJ2bGV0IFBhdGggOiAgPC9GT05UPiAiICsgcmVxLmdldFNlcnZsZXRQYXRoKCkgKyAiPGJyPiIgKTsgCi0gICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IFBhdGggSW5mbyA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0UGF0aEluZm8oKSArICI8YnI+IiApOyAKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gQ29udGV4dCBQYXRoIDogIDwvRk9OVD4gIiArIHJlcS5nZXRDb250ZXh0UGF0aCgpICsgIjxicj4iICk7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IFNlcnZsZXQgUGF0aCA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0U2VydmxldFBhdGgoKSArICI8YnI+IiApOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBQYXRoIEluZm8gOiAgPC9GT05UPiAiICsgcmVxLmdldFBhdGhJbmZvKCkgKyAiPGJyPiIgKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L0JPRFk+IDwvSFRNTD4gIik7CiAKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvZWpibGl0ZS9ub25wZXJzaXN0ZW50dGltZXIvd2FyL1N0YXRlZnVsV3JhcHBlckltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lamJsaXRlL25vbnBlcnNpc3RlbnR0aW1lci93YXIvU3RhdGVmdWxXcmFwcGVySW1wbC5qYXZhCmluZGV4IGQ4MzExNmEuLjgzZDMwYzUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lamJsaXRlL25vbnBlcnNpc3RlbnR0aW1lci93YXIvU3RhdGVmdWxXcmFwcGVySW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lamJsaXRlL25vbnBlcnNpc3RlbnR0aW1lci93YXIvU3RhdGVmdWxXcmFwcGVySW1wbC5qYXZhCkBAIC01NywzNyArNTcsMzcgQEAKIAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImRvVGVzdCgpOiBjcmVhdGluZyB0aGUgdGltZXIiKTsKICAgICAgICAgVGltZXIgdGltZXIgPSB0aW1lclN0dWZmLmNyZWF0ZVRpbWVyKDEsIDEpOwotICAgICAgICAKKwogICAgICAgICAvLwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImRvVGVzdCgpOiBjcmVhdGluZyB0aGUgdGltZXIyIik7CiAgICAgICAgIFRpbWVyIHRpbWVyMiA9IHRpbWVyU3R1ZmYuY3JlYXRlVGltZXIoMTAwMDAsIDEwMDAwKTsKLSAgICAgICAgCisKICAgICAgICAgLy8KICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJkb1Rlc3QoKTogY3JlYXRpbmcgdGhlIHRpbWVyMyIpOwogICAgICAgICBUaW1lciB0aW1lcjMgPSB0aW1lclN0dWZmLmNyZWF0ZVRpbWVyKG5ldyBEYXRlKCkpOwotICAgICAgICAKKwogICAgICAgICAvLwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImRvVGVzdCgpOiBjcmVhdGluZyB0aGUgdGltZXI0Iik7CiAgICAgICAgIFRpbWVyIHRpbWVyNCA9IHRpbWVyU3R1ZmYuY3JlYXRlVGltZXIobmV3IERhdGUobmV3IERhdGUoKS5nZXRUaW1lKCkgKyAyMDAwKSk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZG9UZXN0KCk6IGNyZWF0aW5nIHRoZSB0aW1lcjUiKTsKICAgICAgICAgVGltZXIgdGltZXI1ID0gdGltZXJTdHVmZi5jcmVhdGVUaW1lcihuZXcgRGF0ZShuZXcgRGF0ZSgpLmdldFRpbWUoKSArIDIwMDAwKSwgMTAwMDApOwogCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZG9UZXN0KCk6IGNyZWF0aW5nIHRoZSBjcmVhdGVUaW1lckFuZFJvbGxiYWNrIik7CiAgICAgICAgIHRpbWVyU3R1ZmYuY3JlYXRlVGltZXJBbmRSb2xsYmFjaygyMDAwMCk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZG9UZXN0KCk6IGNyZWF0aW5nIHRoZSBjcmVhdGVUaW1lckFuZENhbmNlbCIpOwogICAgICAgICB0aW1lclN0dWZmLmNyZWF0ZVRpbWVyQW5kQ2FuY2VsKDIwMDAwKTsKLSAgICAgICAgCisKICAgICAgICAgLy8gQEBAIHJlZXZhbHVhdGUgZG91YmxlIGNhbmNlbCBsb2dpYwogICAgICAgICAvL3RpbWVyU3R1ZmYuY3JlYXRlVGltZXJBbmRDYW5jZWxBbmRDYW5jZWwoMjAwMDApOwotICAgICAgICAKKwogICAgICAgICAvLwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImRvVGVzdCgpOiBjcmVhdGluZyB0aGUgY3JlYXRlVGltZXJBbmRDYW5jZWxBbmRSb2xsYmFjayIpOwogICAgICAgICB0aW1lclN0dWZmLmNyZWF0ZVRpbWVyQW5kQ2FuY2VsQW5kUm9sbGJhY2soMjAwMDApOwotICAgICAgICAKKwogICAgICAgICAvLwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImRvVGVzdCgpOiBjcmVhdGluZyB0aGUgY2FuY2VsVGltZXIodGltZXIyKSIpOwogICAgICAgICB0aW1lclN0dWZmLmNhbmNlbFRpbWVyKHRpbWVyMik7CkBAIC05OCwxOCArOTgsMTggQEAKICAgICAgICAgdGltZXJTdHVmZi5jYW5jZWxUaW1lckFuZFJvbGxiYWNrKHRpbWVyNSk7CiAgICAgICAgIC8vIEBAQCByZWV2YWx1YXRlIGRvdWJsZSBjYW5jZWwgbG9naWMKICAgICAgICAgLy90aW1lclN0dWZmLmNhbmNlbFRpbWVyQW5kQ2FuY2VsQW5kUm9sbGJhY2sodGltZXI2KTsKLSAgICAgICAgCi0gICAgICAgIFRpbWVyIHRpbWVyNyA9IAorCisgICAgICAgIFRpbWVyIHRpbWVyNyA9CiAgICAgICAgICAgICB0aW1lclN0dWZmLmNyZWF0ZVRpbWVyKDEsIDEsICJjYW5jZWxUaW1lciIpOwotICAgICAgICBUaW1lciB0aW1lcjggPSAKKyAgICAgICAgVGltZXIgdGltZXI4ID0KICAgICAgICAgICAgIHRpbWVyU3R1ZmYuY3JlYXRlVGltZXIoMSwgMSwgImNhbmNlbFRpbWVyQW5kUm9sbGJhY2siKTsKLSAgICAgICAgVGltZXIgdGltZXI5ID0gICAgICAgICAKKyAgICAgICAgVGltZXIgdGltZXI5ID0KICAgICAgICAgICAgIHRpbWVyU3R1ZmYuY3JlYXRlVGltZXIoMSwgImNhbmNlbFRpbWVyQW5kUm9sbGJhY2siKTsKIAogICAgICAgICBUaW1lciB0aW1lcjExID0gdGltZXJTdHVmZi5nZXRUaW1lUmVtYWluaW5nVGVzdDEoMjApOwogICAgICAgICB0aW1lclN0dWZmLmdldFRpbWVSZW1haW5pbmdUZXN0MigyMCwgdGltZXIxMSk7CiAgICAgICAgIHRpbWVyU3R1ZmYuZ2V0VGltZVJlbWFpbmluZ1Rlc3QyKDIwLCB0aW1lcik7Ci0gICAgICAgIAorCiAgICAgICAgIFRpbWVyIHRpbWVyMTIgPSB0aW1lclN0dWZmLmdldE5leHRUaW1lb3V0VGVzdDEoMjApOwogICAgICAgICB0aW1lclN0dWZmLmdldE5leHRUaW1lb3V0VGVzdDIoMjAsIHRpbWVyMTIpOwogICAgICAgICB0aW1lclN0dWZmLmdldE5leHRUaW1lb3V0VGVzdDIoMjAsIHRpbWVyKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lamJsaXRlL25vbnBlcnNpc3RlbnR0aW1lci93YXIvVGltZXJTdHVmZkltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lamJsaXRlL25vbnBlcnNpc3RlbnR0aW1lci93YXIvVGltZXJTdHVmZkltcGwuamF2YQppbmRleCA5ZDc1MDY4Li4wNzIyYmM4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvZWpibGl0ZS9ub25wZXJzaXN0ZW50dGltZXIvd2FyL1RpbWVyU3R1ZmZJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VqYmxpdGUvbm9ucGVyc2lzdGVudHRpbWVyL3dhci9UaW1lclN0dWZmSW1wbC5qYXZhCkBAIC0yNiwxMiArMjYsMTIgQEAKIGltcG9ydCBqYWthcnRhLmVqYi4qOwogCiBwdWJsaWMgY2xhc3MgVGltZXJTdHVmZkltcGwgaW1wbGVtZW50cyBUaW1lclN0dWZmIHsKLSAgICAKKwogICAgIHByaXZhdGUgRUpCQ29udGV4dCBjb250ZXh0XzsKICAgICBwcm90ZWN0ZWQgYm9vbGVhbiBpc0JNVCA9IGZhbHNlOwogCiAgICAgcHJvdGVjdGVkIGJvb2xlYW4gY2FuY2VsQXV0b21hdGljVGltZXIgPSBmYWxzZTsKLSAgICAKKwogICAgIHB1YmxpYyBUaW1lclN0dWZmSW1wbCgpIHt9CiAKICAgICBwcm90ZWN0ZWQgdm9pZCBzZXRDb250ZXh0KEVKQkNvbnRleHQgY29udGV4dCkgewpAQCAtNDAsNyArNDAsNyBAQAogCiAgICAgLy8gWFhYIC0gVE9ETwogICAgIHByb3RlY3RlZCBib29sZWFuIGlzVHhVbnNwZWNpZmllZCgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgCisKICAgICBwdWJsaWMgVGltZXIgY3JlYXRlVGltZXIobG9uZyBkdXJhdGlvbiwgU3RyaW5nIGluZm8pIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBUaW1lclNlcnZpY2UgdHMgPSBjb250ZXh0Xy5nZXRUaW1lclNlcnZpY2UoKTsKICAgICAgICAgVGltZXIgdCA9IHRzLmNyZWF0ZVNpbmdsZUFjdGlvblRpbWVyKGR1cmF0aW9uLCBuZXcgVGltZXJDb25maWcoaW5mbywgZmFsc2UpKTsKQEAgLTUxLDMwICs1MSwzMCBAQAogICAgICAgICByZXR1cm4gY3JlYXRlVGltZXIoZHVyYXRpb24sICJjcmVhdGVUaW1lcjxsb25nPiIgKyBkdXJhdGlvbik7CiAgICAgfQogCi0gICAgcHVibGljIFRpbWVyIGNyZWF0ZVRpbWVyKGxvbmcgaW5pdGlhbER1cmF0aW9uLCBsb25nIGludGVydmFsKSAKKyAgICBwdWJsaWMgVGltZXIgY3JlYXRlVGltZXIobG9uZyBpbml0aWFsRHVyYXRpb24sIGxvbmcgaW50ZXJ2YWwpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICByZXR1cm4gY3JlYXRlVGltZXIoaW5pdGlhbER1cmF0aW9uLCBpbnRlcnZhbCwgCisgICAgICAgIHJldHVybiBjcmVhdGVUaW1lcihpbml0aWFsRHVyYXRpb24sIGludGVydmFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgImNyZWF0ZVRpbWVyPGxvbmcsIGxvbmc+IiArIGluaXRpYWxEdXJhdGlvbiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLCIgKyBpbnRlcnZhbCk7CiAgICAgfQogCi0gICAgcHVibGljIFRpbWVyIGNyZWF0ZVRpbWVyKGxvbmcgaW5pdGlhbER1cmF0aW9uLCBsb25nIGludGVydmFsLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGluZm8pIAorICAgIHB1YmxpYyBUaW1lciBjcmVhdGVUaW1lcihsb25nIGluaXRpYWxEdXJhdGlvbiwgbG9uZyBpbnRlcnZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGluZm8pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBpZiggaXNCTVQgKSB7CiAgICAgICAgICAgICBjb250ZXh0Xy5nZXRVc2VyVHJhbnNhY3Rpb24oKS5iZWdpbigpOwogICAgICAgICB9CiAgICAgICAgIFRpbWVyU2VydmljZSB0cyA9IGNvbnRleHRfLmdldFRpbWVyU2VydmljZSgpOwotICAgICAgICBUaW1lciB0ID0gdHMuY3JlYXRlSW50ZXJ2YWxUaW1lcihpbml0aWFsRHVyYXRpb24sIGludGVydmFsLCAKKyAgICAgICAgVGltZXIgdCA9IHRzLmNyZWF0ZUludGVydmFsVGltZXIoaW5pdGlhbER1cmF0aW9uLCBpbnRlcnZhbCwKICAgICAgICAgICAgICAgICAgICAgbmV3IFRpbWVyQ29uZmlnKG5ldyBBcHBJbmZvKGluZm8pLCBmYWxzZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgaWYoIGlzQk1UICkgewogICAgICAgICAgICAgY29udGV4dF8uZ2V0VXNlclRyYW5zYWN0aW9uKCkuY29tbWl0KCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHQ7CiAgICAgfQogCi0gICAgcHVibGljIFRpbWVyIGNyZWF0ZVRpbWVyKERhdGUgZXhwaXJhdGlvblRpbWUpIAorICAgIHB1YmxpYyBUaW1lciBjcmVhdGVUaW1lcihEYXRlIGV4cGlyYXRpb25UaW1lKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgVGltZXJTZXJ2aWNlIHRzID0gY29udGV4dF8uZ2V0VGltZXJTZXJ2aWNlKCk7CiAgICAgICAgIGlmKCBpc0JNVCApIHsKQEAgLTg1LDcgKzg1LDcgQEAKICAgICAgICAgLy8gVGhpcyBzaG91bGQgaGFwcGVuIHZlcnkgcmFyZWx5IHNpbmNlIGNvbnRhaW5lciBwdXRzIHRoZSBicmFrZXMKICAgICAgICAgLy8gb24gYSBiaXQgYnkgYWRkaW5nIGEgZmV3IHNlY29uZHMgaWYsIHVwb24gY3JlYXRpb24sIHRoZSBleHBpcmF0aW9uCiAgICAgICAgIC8vIHRpbWUgaGFzIGFscmVhZHkgcGFzc2VkLgotICAgICAgICBUaW1lciB0ID0gdHMuY3JlYXRlU2luZ2xlQWN0aW9uVGltZXIoZXhwaXJhdGlvblRpbWUsIAorICAgICAgICBUaW1lciB0ID0gdHMuY3JlYXRlU2luZ2xlQWN0aW9uVGltZXIoZXhwaXJhdGlvblRpbWUsCiAgICAgICAgICAgICAgICAgbmV3IFRpbWVyQ29uZmlnKCJjcmVhdGVUaW1lcjxEYXRlPiIgKyBleHBpcmF0aW9uVGltZSwgZmFsc2UpKTsKICAgICAgICAgaWYoIGlzQk1UICkgewogICAgICAgICAgICAgY29udGV4dF8uZ2V0VXNlclRyYW5zYWN0aW9uKCkuY29tbWl0KCk7CkBAIC05MywxNCArOTMsMTQgQEAKICAgICAgICAgcmV0dXJuIHQ7CiAgICAgfQogCi0gICAgcHVibGljIFRpbWVyIGNyZWF0ZVRpbWVyKERhdGUgZXhwaXJhdGlvblRpbWUsIGxvbmcgaW50ZXJ2YWwpIAorICAgIHB1YmxpYyBUaW1lciBjcmVhdGVUaW1lcihEYXRlIGV4cGlyYXRpb25UaW1lLCBsb25nIGludGVydmFsKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKIAogICAgICAgICBpZiggaXNCTVQgKSB7CiAgICAgICAgICAgICBjb250ZXh0Xy5nZXRVc2VyVHJhbnNhY3Rpb24oKS5iZWdpbigpOwogICAgICAgICB9CiAgICAgICAgIFRpbWVyU2VydmljZSB0cyA9IGNvbnRleHRfLmdldFRpbWVyU2VydmljZSgpOwotICAgICAgICBUaW1lciB0ID0gdHMuY3JlYXRlSW50ZXJ2YWxUaW1lcihleHBpcmF0aW9uVGltZSwgaW50ZXJ2YWwsIAorICAgICAgICBUaW1lciB0ID0gdHMuY3JlYXRlSW50ZXJ2YWxUaW1lcihleHBpcmF0aW9uVGltZSwgaW50ZXJ2YWwsCiAgICAgICAgICAgICAgICAgbmV3IFRpbWVyQ29uZmlnKCJjcmVhdGVUaW1lcjxEYXRlLCBsb25nPiIgKyBleHBpcmF0aW9uVGltZSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLCIgKyBpbnRlcnZhbCwgZmFsc2UpKTsKICAgICAgICAgaWYoIGlzQk1UICkgewpAQCAtMTE2LDcgKzExNiw3IEBACiAgICAgICAgICAgICBjb250ZXh0Xy5nZXRVc2VyVHJhbnNhY3Rpb24oKS5iZWdpbigpOwogICAgICAgICB9CiAgICAgICAgIFRpbWVyU2VydmljZSB0cyA9IGNvbnRleHRfLmdldFRpbWVyU2VydmljZSgpOwotICAgICAgICBUaW1lciB0ID0gdHMuY3JlYXRlU2luZ2xlQWN0aW9uVGltZXIoZHVyYXRpb24sIAorICAgICAgICBUaW1lciB0ID0gdHMuY3JlYXRlU2luZ2xlQWN0aW9uVGltZXIoZHVyYXRpb24sCiAgICAgICAgICAgICAgICAgbmV3IFRpbWVyQ29uZmlnKCJjcmVhdGVUaW1lckFuZFJvbGxiYWNrIiArIGR1cmF0aW9uLCBmYWxzZSkpOwogICAgICAgICBpZiggaXNCTVQgKSB7CiAgICAgICAgICAgICBjb250ZXh0Xy5nZXRVc2VyVHJhbnNhY3Rpb24oKS5yb2xsYmFjaygpOwpAQCAtMTMwLDcgKzEzMCw3IEBACiAgICAgICAgICAgICBjb250ZXh0Xy5nZXRVc2VyVHJhbnNhY3Rpb24oKS5iZWdpbigpOwogICAgICAgICB9CiAgICAgICAgIFRpbWVyU2VydmljZSB0cyA9IGNvbnRleHRfLmdldFRpbWVyU2VydmljZSgpOwotICAgICAgICBUaW1lciB0ID0gdHMuY3JlYXRlU2luZ2xlQWN0aW9uVGltZXIoZHVyYXRpb24sIAorICAgICAgICBUaW1lciB0ID0gdHMuY3JlYXRlU2luZ2xlQWN0aW9uVGltZXIoZHVyYXRpb24sCiAgICAgICAgICAgICAgICAgbmV3IFRpbWVyQ29uZmlnKCJjcmVhdGVUaW1lckFuZENhbmNlbCIgKyBkdXJhdGlvbiwgZmFsc2UpKTsKICAgICAgICAgdC5jYW5jZWwoKTsKICAgICAgICAgaWYoIGlzQk1UICkgewpAQCAtMTQwLDEyICsxNDAsMTIgQEAKIAogICAgIHB1YmxpYyB2b2lkIGNyZWF0ZVRpbWVyQW5kQ2FuY2VsQW5kQ2FuY2VsKGxvbmcgZHVyYXRpb24pIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBpZiggaXNUeFVuc3BlY2lmaWVkKCkgKSB7Ci0gICAgICAgICAgICByZXR1cm47IAorICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9IGVsc2UgaWYoIGlzQk1UICkgewogICAgICAgICAgICAgY29udGV4dF8uZ2V0VXNlclRyYW5zYWN0aW9uKCkuYmVnaW4oKTsKICAgICAgICAgfQogICAgICAgICBUaW1lclNlcnZpY2UgdHMgPSBjb250ZXh0Xy5nZXRUaW1lclNlcnZpY2UoKTsKLSAgICAgICAgVGltZXIgdCA9IHRzLmNyZWF0ZVNpbmdsZUFjdGlvblRpbWVyKGR1cmF0aW9uLCAKKyAgICAgICAgVGltZXIgdCA9IHRzLmNyZWF0ZVNpbmdsZUFjdGlvblRpbWVyKGR1cmF0aW9uLAogICAgICAgICAgICAgICAgIG5ldyBUaW1lckNvbmZpZygiY3JlYXRlVGltZXJBbmRDYW5jZWxBbmRDYW5jZWwiKyBkdXJhdGlvbiwgZmFsc2UpKTsKICAgICAgICAgdC5jYW5jZWwoKTsKICAgICAgICAgdC5jYW5jZWwoKTsKQEAgLTE1NCw3ICsxNTQsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgY3JlYXRlVGltZXJBbmRDYW5jZWxBbmRSb2xsYmFjayhsb25nIGR1cmF0aW9uKSAKKyAgICBwdWJsaWMgdm9pZCBjcmVhdGVUaW1lckFuZENhbmNlbEFuZFJvbGxiYWNrKGxvbmcgZHVyYXRpb24pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBpZiggaXNUeFVuc3BlY2lmaWVkKCkgKSB7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNjIsNyArMTYyLDcgQEAKICAgICAgICAgICAgIGNvbnRleHRfLmdldFVzZXJUcmFuc2FjdGlvbigpLmJlZ2luKCk7CiAgICAgICAgIH0KICAgICAgICAgVGltZXJTZXJ2aWNlIHRzID0gY29udGV4dF8uZ2V0VGltZXJTZXJ2aWNlKCk7Ci0gICAgICAgIFRpbWVyIHQgPSB0cy5jcmVhdGVTaW5nbGVBY3Rpb25UaW1lcihkdXJhdGlvbiwgCisgICAgICAgIFRpbWVyIHQgPSB0cy5jcmVhdGVTaW5nbGVBY3Rpb25UaW1lcihkdXJhdGlvbiwKICAgICAgICAgICAgICAgICBuZXcgVGltZXJDb25maWcoImNyZWF0ZVRpbWVyQW5kQ2FuY2VsQW5kUm9sbGJhY2siICsgZHVyYXRpb24sIGZhbHNlKSk7CiAgICAgICAgIHQuY2FuY2VsKCk7CiAgICAgICAgIGlmKCBpc0JNVCApIHsKQEAgLTIxMiw4ICsyMTIsOCBAQAogICAgICAgICAgICAgY29udGV4dF8uZ2V0VXNlclRyYW5zYWN0aW9uKCkuY29tbWl0KCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgY2FuY2VsVGltZXJBbmRSb2xsYmFjayhUaW1lciB0aW1lcikgCisKKyAgICBwdWJsaWMgdm9pZCBjYW5jZWxUaW1lckFuZFJvbGxiYWNrKFRpbWVyIHRpbWVyKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgaWYoIGlzVHhVbnNwZWNpZmllZCgpICkgewogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjI4LDcgKzIyOCw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBjYW5jZWxUaW1lckFuZENhbmNlbEFuZFJvbGxiYWNrKFRpbWVyIHRpbWVyKSAKKyAgICBwdWJsaWMgdm9pZCBjYW5jZWxUaW1lckFuZENhbmNlbEFuZFJvbGxiYWNrKFRpbWVyIHRpbWVyKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgaWYoIGlzVHhVbnNwZWNpZmllZCgpICkgewogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjc4LDcgKzI3OCw3IEBACiAgICAgICAgICAgICAvLyBzdWNjZXNzCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVtb3RlRXhjZXB0aW9uKCJnZXRUaW1lcnMgZmFpbHVyZSIpOwotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyBUaW1lciBnZXRUaW1lUmVtYWluaW5nVGVzdDEoaW50IG51bUl0ZXJhdGlvbnMpIHRocm93cyBFeGNlcHRpb24gewpAQCAtMjg2LDcgKzI4Niw3IEBACiAgICAgICAgICAgICBjb250ZXh0Xy5nZXRVc2VyVHJhbnNhY3Rpb24oKS5iZWdpbigpOwogICAgICAgICB9CiAgICAgICAgIFRpbWVyU2VydmljZSB0cyA9IGNvbnRleHRfLmdldFRpbWVyU2VydmljZSgpOwotICAgICAgICBUaW1lciB0ID0gdHMuY3JlYXRlSW50ZXJ2YWxUaW1lcigxLCAxLCAKKyAgICAgICAgVGltZXIgdCA9IHRzLmNyZWF0ZUludGVydmFsVGltZXIoMSwgMSwKICAgICAgICAgICAgICAgICBuZXcgVGltZXJDb25maWcoImdldFRpbWVSZW1haW5pbmdUZXN0MSIsIGZhbHNlKSk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVtYWluaW5nIHRpbWVzIGZvciAiICsgdC5nZXRJbmZvKCkpOwogICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbnVtSXRlcmF0aW9uczsgaSsrKSB7CkBAIC0zMTUsNyArMzE1LDcgQEAKICAgICAgICAgICAgIGNvbnRleHRfLmdldFVzZXJUcmFuc2FjdGlvbigpLmJlZ2luKCk7CiAgICAgICAgIH0KICAgICAgICAgVGltZXJTZXJ2aWNlIHRzID0gY29udGV4dF8uZ2V0VGltZXJTZXJ2aWNlKCk7Ci0gICAgICAgIFRpbWVyIHQgPSB0cy5jcmVhdGVJbnRlcnZhbFRpbWVyKDEsIDEsIAorICAgICAgICBUaW1lciB0ID0gdHMuY3JlYXRlSW50ZXJ2YWxUaW1lcigxLCAxLAogICAgICAgICAgICAgICAgIG5ldyBUaW1lckNvbmZpZygiZ2V0TmV4dFRpbWVvdXRUZXN0MSIsIGZhbHNlKSk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVtYWluaW5nIHRpbWVzIGZvciAiICsgdC5nZXRJbmZvKCkpOwogICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbnVtSXRlcmF0aW9uczsgaSsrKSB7CkBAIC0zMzksNyArMzM5LDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gYWN0aXZlIHRpbWVycy4gIAorICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gYWN0aXZlIHRpbWVycy4KICAgICBwdWJsaWMgdm9pZCBhc3NlcnROb1RpbWVycygpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBUaW1lclNlcnZpY2UgdHMgPSBjb250ZXh0Xy5nZXRUaW1lclNlcnZpY2UoKTsKICAgICAgICAgQ29sbGVjdGlvbiB0aW1lcnM9IHRzLmdldFRpbWVycygpOwpAQCAtMzQ4LDExICszNDgsMTEgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGFzc2VydFRpbWVyTm90QWN0aXZlKFRpbWVyIHRpbWVyKSAKKyAgICBwdWJsaWMgdm9pZCBhc3NlcnRUaW1lck5vdEFjdGl2ZShUaW1lciB0aW1lcikKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICB0aW1lci5nZXRUaW1lUmVtYWluaW5nKCk7Ci0gICAgICAgICAgICB0aHJvdyAKKyAgICAgICAgICAgIHRocm93CiAgICAgICAgICAgICAgICAgbmV3IEV4Y2VwdGlvbigiYXNzZXJ0VGltZXJOb3RBY3RpdmUgY2FsbGVkIHdpdGggYWN0aXZlIHRpbWVyIik7CiAgICAgICAgIH0gY2F0Y2goTm9TdWNoT2JqZWN0TG9jYWxFeGNlcHRpb24gbnNvbGUpIHsKICAgICAgICAgICAgIC8vIGNhdWdodCBleHBlY3RlZCBleGNlcHRpb24KQEAgLTM2MSwxMCArMzYxLDEwIEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwdWJsaWMgU2VyaWFsaXphYmxlIGdldEluZm9Ob0Vycm9yKFRpbWVyIHRpbWVyKSAKKyAgICBwdWJsaWMgU2VyaWFsaXphYmxlIGdldEluZm9Ob0Vycm9yKFRpbWVyIHRpbWVyKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIGdldEluZm8odGltZXIsIGZhbHNlKTsKLSAgICAgICAgCisKICAgICB9CiAKICAgICBwdWJsaWMgU2VyaWFsaXphYmxlIGdldEluZm8oVGltZXIgdGltZXIpIHRocm93cyBFeGNlcHRpb24gewpAQCAtNDUyLDcgKzQ1Miw3IEBACiAgICAgICAgICAgICAgICAgY29udGV4dF8uZ2V0VXNlclRyYW5zYWN0aW9uKCkuYmVnaW4oKTsKICAgICAgICAgICAgICAgICB0eFN0YXJ0ZWQgPSB0cnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgVGltZXIgdCA9IHRzLmNyZWF0ZUludGVydmFsVGltZXIoMSwgMSwgCisgICAgICAgICAgICBUaW1lciB0ID0gdHMuY3JlYXRlSW50ZXJ2YWxUaW1lcigxLCAxLAogICAgICAgICAgICAgICAgICAgICBuZXcgVGltZXJDb25maWcoImRvVGltZXJTdHVmZl8iICsgbWV0aG9kLCBmYWxzZSkpOwogICAgICAgICAgICAgdC5jYW5jZWwoKTsKICAgICAgICAgICAgIGlmKCAhYWxsb3dlZCApIHsKQEAgLTUyMSw3ICs1MjEsNyBAQAogICAgICAgICAgICAgfSBjYXRjaChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gZSkgeyB9CiAgICAgICAgICAgICBnZXRUaW1lclNlcnZpY2UoIlRpbWVvdXQiLCB0cnVlKTsKICAgICAgICAgICAgIGRvVGltZXJTdHVmZigiVGltZW91dCIsIHRydWUpOwotICAgICAgICB9IAorICAgICAgICB9CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvZW1iZWRkZWQvYXV0b2Nsb3NlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvZW1iZWRkZWQvYXV0b2Nsb3NlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZjgxNGY0NC4uZDBjYWEzZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VtYmVkZGVkL2F1dG9jbG9zZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lbWJlZGRlZC9hdXRvY2xvc2UvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzItZW1iZWRkZWQtYXV0b2Nsb3NlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAKLTxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz5cdTAwMjAKKzxwcm9wZXJ0eSBuYW1lPSJqbmRpcm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0tZWpiIi8+ICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic2UuY2xpZW50IiB2YWx1ZT0iY29tLmFjbWUuQ2xpZW50Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvZW1iZWRkZWQvYXV0b2Nsb3NlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lbWJlZGRlZC9hdXRvY2xvc2UvYnVpbGQueG1sCmluZGV4IDk2NjdhMDIuLjY1OWFmOTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lbWJlZGRlZC9hdXRvY2xvc2UvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lbWJlZGRlZC9hdXRvY2xvc2UvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OSwyMSArNDksMjEgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPCEtLSBwYWNrYWdlIG91cnNlbHZlcyB0byBpbmNsdWRlIHBlcnNpc3RlbmNlLnhtbCAtLT4KICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+Ci0gICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphciIgCi0gICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIAorICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXIiCisgICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICAgdXBkYXRlPSJ0cnVlIgogICAgICAgICAgICAgIGluY2x1ZGVzID0iKiovUyouY2xhc3MiPgogICAgICAgICA8L2phcj4KICAgICAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L29yZyIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuX3NlIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bl9zZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgIDxlY2hvIG1lc3NhZ2U9IlJ1bm5pbmcgd2l0aCAke2VtYmVkZGVkLmNsYXNzcGF0aH0gaW4gY2xhc3NwYXRoIi8+Ci0gICAgICAgPGphdmEgIGZvcms9Im9uIiAKKyAgICAgICA8amF2YSAgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXI6JHtlbWJlZGRlZC5jbGFzc3BhdGh9OiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9IiR7c2UuY2xpZW50fSI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvZW1iZWRkZWQvYXV0b2Nsb3NlL2VqYi9TaW1wbGVFamIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lbWJlZGRlZC9hdXRvY2xvc2UvZWpiL1NpbXBsZUVqYi5qYXZhCmluZGV4IDIyMWY3MmUuLjU2M2U2MDUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lbWJlZGRlZC9hdXRvY2xvc2UvZWpiL1NpbXBsZUVqYi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lbWJlZGRlZC9hdXRvY2xvc2UvZWpiL1NpbXBsZUVqYi5qYXZhCkBAIC0zNSw1ICszNSw1IEBACiAgICAgcHJpdmF0ZSB2b2lkIG9uRGVzdHJveSgpIHsKICAgICAgICAgeC5hZGQoIj09PT09ZGVzdHJveWVkPT09PT0iKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lbWJlZGRlZC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvZW1iZWRkZWQvYnVpbGQueG1sCmluZGV4IDZmNmFhMzEuLjkyMGY2YjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9lbWJlZGRlZC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2VtYmVkZGVkL2J1aWxkLnhtbApAQCAtODksOSArODksOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+Ci0JCVVzYWdlOgotCQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamItZWpiMzEtZW1iZWRkZWQgdGVzdHMpCi0JPC9lY2hvPgorICAgIDxlY2hvPgorICAgICAgICBVc2FnZToKKyAgICAgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZWpiLWVqYjMxLWVtYmVkZGVkIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvYXJvdW5kY29uc3RydWN0L2Fubm90YXRpb24vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvYXJvdW5kY29uc3RydWN0L2Fubm90YXRpb24vYnVpbGQucHJvcGVydGllcwppbmRleCA0Y2IzZWVjLi5lYTU0YjlkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2Fyb3VuZGNvbnN0cnVjdC9hbm5vdGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9hcm91bmRjb25zdHJ1Y3QvYW5ub3RhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw5ICsxNSw5IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItYXJvdW5kLWNvbnN0cnVjdC1hbm4iLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic2UuY2xpZW50IiB2YWx1ZT0iY29tLmFjbWUuQ2xpZW50Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2Fyb3VuZGNvbnN0cnVjdC9hbm5vdGF0aW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvYXJvdW5kY29uc3RydWN0L2Fubm90YXRpb24vYnVpbGQueG1sCmluZGV4IDA4MDYxNTUuLmM0ZTRkN2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvYXJvdW5kY29uc3RydWN0L2Fubm90YXRpb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvYXJvdW5kY29uc3RydWN0L2Fubm90YXRpb24vYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC01MCw4ICs1MCw4IEBACiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9JbnRlcmNlcHRvciouY2xhc3MsKiovUyouY2xhc3MsKiovQiouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qYXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02NSwxMCArNjUsMTAgQEAKICAgICAgICAgICAgPGFyZyBsaW5lPSIke2FwcG5hbWV9LWVqYiIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamFyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2Fyb3VuZGNvbnN0cnVjdC9hbm5vdGF0aW9uL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvYXJvdW5kY29uc3RydWN0L2Fubm90YXRpb24vY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGI1YmRjNDAuLjFiMThmN2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvYXJvdW5kY29uc3RydWN0L2Fubm90YXRpb24vY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvYXJvdW5kY29uc3RydWN0L2Fubm90YXRpb24vY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNCwyMSArMjQsMjEgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAJcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKLSAgCQluZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CisgICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KKyAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgYXBwTmFtZTsKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgYXBwTmFtZTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CiAKLQlhcHBOYW1lID0gYXJnc1swXTsKKyAgICBhcHBOYW1lID0gYXJnc1swXTsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKGFwcE5hbWUpOwogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKLSAgIAljbGllbnQuZG9UZXN0KCk7CisgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShhcHBOYW1lICsgIklEIik7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9hcm91bmRjb25zdHJ1Y3QvYW5ub3RhdGlvbi9lamIvU2Z1bEVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9hcm91bmRjb25zdHJ1Y3QvYW5ub3RhdGlvbi9lamIvU2Z1bEVKQi5qYXZhCmluZGV4IDExZDMyOTIuLmU0ZGFiNTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvYXJvdW5kY29uc3RydWN0L2Fubm90YXRpb24vZWpiL1NmdWxFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2Fyb3VuZGNvbnN0cnVjdC9hbm5vdGF0aW9uL2VqYi9TZnVsRUpCLmphdmEKQEAgLTM0LDcgKzM0LDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGhlbGxvKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNmdWxFSkI6aGVsbG8oKSIpOwogICAgICAgICB2ZXJpZnkoIlNmdWxFSkIiKTsKLQlyZXR1cm4gc2xlc3Muc2F5SGVsbG8oKTsKKyAgICByZXR1cm4gc2xlc3Muc2F5SGVsbG8oKTsKICAgICB9CiAKICAgICBAUmVtb3ZlCkBAIC00NCw3ICs0NCw3IEBACiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0MCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIioqU2Z1bEVKQiBQb3N0Q29uc3RydWN0Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKlNmdWxFSkIgUG9zdENvbnN0cnVjdCIpOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9hcm91bmRjb25zdHJ1Y3QvYW5ub3RhdGlvbi9lamIvU2luZ2xldG9uQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9hcm91bmRjb25zdHJ1Y3QvYW5ub3RhdGlvbi9lamIvU2luZ2xldG9uQmVhbi5qYXZhCmluZGV4IDcxNzY0MDIuLmNmMDMyOWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvYXJvdW5kY29uc3RydWN0L2Fubm90YXRpb24vZWpiL1NpbmdsZXRvbkJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2Fyb3VuZGNvbnN0cnVjdC9hbm5vdGF0aW9uL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKQEAgLTMzLDEyICszMywxMiBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46OmluaXQoKSIpOwogICAgICAgICBzZnVsLmhlbGxvKCk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBoZWxsbygpIHsKICAgICAgICAgdmVyaWZ5KCJTaW5nbGV0b25CZWFuIik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOjpoZWxsbygpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOjpoZWxsbygpIik7CiAgICAgICAgIHNmdWwucmVtb3ZlKCk7Ci0JcmV0dXJuICJoZWxsbywgd29ybGQhXG4iOworICAgIHJldHVybiAiaGVsbG8sIHdvcmxkIVxuIjsKICAgICB9CiAKICAgICBAUHJlRGVzdHJveQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9hcm91bmRjb25zdHJ1Y3QvYW5ub3RhdGlvbi9lamIvU29tZU1hbmFnZWRCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2Fyb3VuZGNvbnN0cnVjdC9hbm5vdGF0aW9uL2VqYi9Tb21lTWFuYWdlZEJlYW4uamF2YQppbmRleCAwOWUzYWZhLi43ZDkxMjkxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2Fyb3VuZGNvbnN0cnVjdC9hbm5vdGF0aW9uL2VqYi9Tb21lTWFuYWdlZEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2Fyb3VuZGNvbnN0cnVjdC9hbm5vdGF0aW9uL2VqYi9Tb21lTWFuYWdlZEJlYW4uamF2YQpAQCAtMzMsMTggKzMzLDE4IEBACiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU29tZU1hbmFnZWRCZWFuOjppbml0KCkgIiArIHRoaXMpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU29tZU1hbmFnZWRCZWFuOjppbml0KCkgIiArIHRoaXMpOwogICAgIH0KLSAgICAKKwogCiAgICAgcHVibGljIHZvaWQgZm9vKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU29tZU1hbmFnZWRCZWFuOjpmb28oKSAiKTsKLQl2ZXJpZnlBKCJTb21lTWFuYWdlZEJlYW4iKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNvbWVNYW5hZ2VkQmVhbjo6Zm9vKCkgIik7CisgICAgdmVyaWZ5QSgiU29tZU1hbmFnZWRCZWFuIik7CiAgICAgICAgIGlmIChvcmIgPT0gbnVsbCkgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlNvbWVNYW5hZ2VkQmVhbjogT1JCIGlzIG51bGwiKTsKICAgICB9CiAKICAgICBAUHJlRGVzdHJveQogICAgIHByaXZhdGUgdm9pZCBkZXN0cm95KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU29tZU1hbmFnZWRCZWFuOjpkZXN0cm95KCkgIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTb21lTWFuYWdlZEJlYW46OmRlc3Ryb3koKSAiKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2Fyb3VuZGNvbnN0cnVjdC9hbm5vdGF0aW9uL2VqYi9Tb21lTWFuYWdlZEJlYW4yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2Fyb3VuZGNvbnN0cnVjdC9hbm5vdGF0aW9uL2VqYi9Tb21lTWFuYWdlZEJlYW4yLmphdmEKaW5kZXggZGRlMWM0My4uZmRiMDRjMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9hcm91bmRjb25zdHJ1Y3QvYW5ub3RhdGlvbi9lamIvU29tZU1hbmFnZWRCZWFuMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvYXJvdW5kY29uc3RydWN0L2Fubm90YXRpb24vZWpiL1NvbWVNYW5hZ2VkQmVhbjIuamF2YQpAQCAtMzIsMTcgKzMyLDE3IEBACiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU29tZU1hbmFnZWRCZWFuMjo6aW5pdCgpICIgKyB0aGlzKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNvbWVNYW5hZ2VkQmVhbjI6OmluaXQoKSAiICsgdGhpcyk7CiAgICAgfQotICAgIAorCiAKICAgICBwdWJsaWMgdm9pZCBmb28oKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTb21lTWFuYWdlZEJlYW4yOjpmb28oKSAiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNvbWVNYW5hZ2VkQmVhbjI6OmZvbygpICIpOwogICAgICAgICBpZiAob3JiID09IG51bGwpIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJTb21lTWFuYWdlZEJlYW4yOiBPUkIgaXMgbnVsbCIpOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CiAgICAgcHJpdmF0ZSB2b2lkIGRlc3Ryb3koKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTb21lTWFuYWdlZEJlYW4yOjpkZXN0cm95KCkgIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTb21lTWFuYWdlZEJlYW4yOjpkZXN0cm95KCkgIik7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9hcm91bmRjb25zdHJ1Y3QvYW5ub3RhdGlvbi9lamIvU29tZU1hbmFnZWRCZWFuMy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9hcm91bmRjb25zdHJ1Y3QvYW5ub3RhdGlvbi9lamIvU29tZU1hbmFnZWRCZWFuMy5qYXZhCmluZGV4IGRmZTA4ZmEuLjZiYjFjOTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvYXJvdW5kY29uc3RydWN0L2Fubm90YXRpb24vZWpiL1NvbWVNYW5hZ2VkQmVhbjMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2Fyb3VuZGNvbnN0cnVjdC9hbm5vdGF0aW9uL2VqYi9Tb21lTWFuYWdlZEJlYW4zLmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKICAgICBAUmVzb3VyY2UgT1JCIG9yYjsKIAogICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNvbWVNYW5hZ2VkQmVhbjM6OmZvbygpICIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU29tZU1hbmFnZWRCZWFuMzo6Zm9vKCkgIik7CiAgICAgICAgIGlmIChvcmIgPT0gbnVsbCkgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlNvbWVNYW5hZ2VkQmVhbjM6IE9SQiBpcyBudWxsIik7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2Fyb3VuZGNvbnN0cnVjdC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2Fyb3VuZGNvbnN0cnVjdC9idWlsZC54bWwKaW5kZXggMzA3ZjY1ZS4uYWRjMmQ0MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9hcm91bmRjb25zdHJ1Y3QvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvYXJvdW5kY29uc3RydWN0L2J1aWxkLnhtbApAQCAtNDYsOSArNDYsOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+Ci0JCVVzYWdlOgotCQkJYW50IGFsbCAoRXhlY3V0ZXMgc2V0IG9mIGVqYi1lamIzMi1hcm91bmRjb25zdHJ1Y3QgdGVzdHMpCi0JPC9lY2hvPgorICAgIDxlY2hvPgorICAgICAgICBVc2FnZToKKyAgICAgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIHNldCBvZiBlamItZWpiMzItYXJvdW5kY29uc3RydWN0IHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvYXJvdW5kY29uc3RydWN0L2Rlc2NyaXB0b3IvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvYXJvdW5kY29uc3RydWN0L2Rlc2NyaXB0b3IvYnVpbGQucHJvcGVydGllcwppbmRleCBhNzI5YTdkLi4wYTQ3OWM4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2Fyb3VuZGNvbnN0cnVjdC9kZXNjcmlwdG9yL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9hcm91bmRjb25zdHJ1Y3QvZGVzY3JpcHRvci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1hcm91bmQtY29uc3RydWN0LWRlc2NyIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvcnMvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzZS5jbGllbnQiIHZhbHVlPSJjb20uYWNtZS5DbGllbnQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvYXJvdW5kY29uc3RydWN0L2Rlc2NyaXB0b3IvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9hcm91bmRjb25zdHJ1Y3QvZGVzY3JpcHRvci9idWlsZC54bWwKaW5kZXggOTI4NjVlOC4uOTE2MzQwZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9hcm91bmRjb25zdHJ1Y3QvZGVzY3JpcHRvci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9hcm91bmRjb25zdHJ1Y3QvZGVzY3JpcHRvci9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ4LDExICs0OCwxMSBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVqYi1qYXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0ludGVyY2VwdG9yKi5jbGFzcywqKi9TKi5jbGFzcywqKi9CKi5jbGFzcyIvPgotCSAgICA8cGFyYW0gbmFtZT0iYmVhbnMueG1sIiB2YWx1ZT0iZGVzY3JpcHRvcnMvYmVhbnMueG1sIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJiZWFucy54bWwiIHZhbHVlPSJkZXNjcmlwdG9ycy9iZWFucy54bWwiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qYXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02NiwxMCArNjYsMTAgQEAKICAgICAgICAgICAgPGFyZyBsaW5lPSIke2FwcG5hbWV9LWVqYiIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamFyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2Fyb3VuZGNvbnN0cnVjdC9kZXNjcmlwdG9yL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvYXJvdW5kY29uc3RydWN0L2Rlc2NyaXB0b3IvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGI1YmRjNDAuLjFiMThmN2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvYXJvdW5kY29uc3RydWN0L2Rlc2NyaXB0b3IvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvYXJvdW5kY29uc3RydWN0L2Rlc2NyaXB0b3IvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNCwyMSArMjQsMjEgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAJcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKLSAgCQluZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CisgICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KKyAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgYXBwTmFtZTsKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgYXBwTmFtZTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CiAKLQlhcHBOYW1lID0gYXJnc1swXTsKKyAgICBhcHBOYW1lID0gYXJnc1swXTsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKGFwcE5hbWUpOwogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKLSAgIAljbGllbnQuZG9UZXN0KCk7CisgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShhcHBOYW1lICsgIklEIik7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9hcm91bmRjb25zdHJ1Y3QvZGVzY3JpcHRvci9lamIvU2Z1bEVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9hcm91bmRjb25zdHJ1Y3QvZGVzY3JpcHRvci9lamIvU2Z1bEVKQi5qYXZhCmluZGV4IDdiZTcxMzguLjA2ODZjYzUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvYXJvdW5kY29uc3RydWN0L2Rlc2NyaXB0b3IvZWpiL1NmdWxFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2Fyb3VuZGNvbnN0cnVjdC9kZXNjcmlwdG9yL2VqYi9TZnVsRUpCLmphdmEKQEAgLTMzLDcgKzMzLDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGhlbGxvKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNmdWxFSkI6aGVsbG8oKSIpOwogICAgICAgICB2ZXJpZnkoIlNmdWxFSkIiKTsKLQlyZXR1cm4gc2xlc3Muc2F5SGVsbG8oKTsKKyAgICByZXR1cm4gc2xlc3Muc2F5SGVsbG8oKTsKICAgICB9CiAKICAgICBAUmVtb3ZlCkBAIC00Myw3ICs0Myw3IEBACiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0MCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIioqU2Z1bEVKQiBQb3N0Q29uc3RydWN0Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKlNmdWxFSkIgUG9zdENvbnN0cnVjdCIpOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9hcm91bmRjb25zdHJ1Y3QvZGVzY3JpcHRvci9lamIvU2luZ2xldG9uQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9hcm91bmRjb25zdHJ1Y3QvZGVzY3JpcHRvci9lamIvU2luZ2xldG9uQmVhbi5qYXZhCmluZGV4IDM1YTI4OTMuLmJjY2UyMGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvYXJvdW5kY29uc3RydWN0L2Rlc2NyaXB0b3IvZWpiL1NpbmdsZXRvbkJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2Fyb3VuZGNvbnN0cnVjdC9kZXNjcmlwdG9yL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKQEAgLTMyLDEyICszMiwxMiBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46OmluaXQoKSIpOwogICAgICAgICBzZnVsLmhlbGxvKCk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBoZWxsbygpIHsKICAgICAgICAgdmVyaWZ5KCJTaW5nbGV0b25CZWFuIik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOjpoZWxsbygpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOjpoZWxsbygpIik7CiAgICAgICAgIHNmdWwucmVtb3ZlKCk7Ci0JcmV0dXJuICJoZWxsbywgd29ybGQhXG4iOworICAgIHJldHVybiAiaGVsbG8sIHdvcmxkIVxuIjsKICAgICB9CiAKICAgICBAUHJlRGVzdHJveQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9hcm91bmRjb25zdHJ1Y3QvZGVzY3JpcHRvci9lamIvU29tZU1hbmFnZWRCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2Fyb3VuZGNvbnN0cnVjdC9kZXNjcmlwdG9yL2VqYi9Tb21lTWFuYWdlZEJlYW4uamF2YQppbmRleCA1OGZlMmE2Li4zYzk3ZWQ3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2Fyb3VuZGNvbnN0cnVjdC9kZXNjcmlwdG9yL2VqYi9Tb21lTWFuYWdlZEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2Fyb3VuZGNvbnN0cnVjdC9kZXNjcmlwdG9yL2VqYi9Tb21lTWFuYWdlZEJlYW4uamF2YQpAQCAtMjksMTggKzI5LDE4IEBACiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU29tZU1hbmFnZWRCZWFuOjppbml0KCkgIiArIHRoaXMpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU29tZU1hbmFnZWRCZWFuOjppbml0KCkgIiArIHRoaXMpOwogICAgIH0KLSAgICAKKwogCiAgICAgcHVibGljIHZvaWQgZm9vKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU29tZU1hbmFnZWRCZWFuOjpmb28oKSAiKTsKLQkvLyB2ZXJpZnkoIlNvbWVNYW5hZ2VkQmVhbiIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU29tZU1hbmFnZWRCZWFuOjpmb28oKSAiKTsKKyAgICAvLyB2ZXJpZnkoIlNvbWVNYW5hZ2VkQmVhbiIpOwogICAgICAgICBpZiAob3JiID09IG51bGwpIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJTb21lTWFuYWdlZEJlYW46IE9SQiBpcyBudWxsIik7CiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKICAgICBwcml2YXRlIHZvaWQgZGVzdHJveSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNvbWVNYW5hZ2VkQmVhbjo6ZGVzdHJveSgpICIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU29tZU1hbmFnZWRCZWFuOjpkZXN0cm95KCkgIik7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2J1aWxkLnhtbAppbmRleCBjZjMyMDI4Li41M2MzM2E4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2J1aWxkLnhtbApAQCAtNTMsOSArNTMsOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+Ci0JCVVzYWdlOgotCQkJYW50IGFsbCAoRXhlY3V0ZXMgc2V0IG9mIGVqYi1lamIzMi1pbnRlcmNlcHRvcnMgdGVzdHMpCi0JPC9lY2hvPgorICAgIDxlY2hvPgorICAgICAgICBVc2FnZToKKyAgICAgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIHNldCBvZiBlamItZWpiMzItaW50ZXJjZXB0b3JzIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9jb25zdHJ1Y3Rvci1sZXZlbC9hbm5vdGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZTM1YmZlYS4uYjRiZjdiOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9jb25zdHJ1Y3Rvci1sZXZlbC9hbm5vdGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9jb25zdHJ1Y3Rvci1sZXZlbC9hbm5vdGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDkgKzE1LDkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1jb25zdHJ1Y3Rvci1sZXZlbC1hbm4iLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic2UuY2xpZW50IiB2YWx1ZT0iY29tLmFjbWUuQ2xpZW50Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2NvbnN0cnVjdG9yLWxldmVsL2Fubm90YXRpb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9jb25zdHJ1Y3Rvci1sZXZlbC9hbm5vdGF0aW9uL2J1aWxkLnhtbAppbmRleCA2YTQxMmRkLi5hNzNmYmM1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2NvbnN0cnVjdG9yLWxldmVsL2Fubm90YXRpb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTUwLDggKzUwLDggQEAKICAgICAgICAgICAgICAgdmFsdWU9IioqL0ludGVyY2VwdG9yKi5jbGFzcywqKi9TKi5jbGFzcywqKi9CKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWphci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTY1LDEwICs2NSwxMCBAQAogICAgICAgICAgICA8YXJnIGxpbmU9IiR7YXBwbmFtZX0tZWpiIi8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qYXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2NvbnN0cnVjdG9yLWxldmVsL2Fubm90YXRpb24vY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGI1YmRjNDAuLjFiMThmN2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9jb25zdHJ1Y3Rvci1sZXZlbC9hbm5vdGF0aW9uL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjQsMjEgKzI0LDIxIEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gCXByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCi0gIAkJbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOworICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CisgICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGFwcE5hbWU7CisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGFwcE5hbWU7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewogCi0JYXBwTmFtZSA9IGFyZ3NbMF07CisgICAgYXBwTmFtZSA9IGFyZ3NbMF07CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbihhcHBOYW1lKTsKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7Ci0gICAJY2xpZW50LmRvVGVzdCgpOworICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoYXBwTmFtZSArICJJRCIpOwotICAgIH0gIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9lamIvQmFzZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9lamIvQmFzZUJlYW4uamF2YQppbmRleCA2ZmIxY2Y5Li4xZDA5ODRlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2NvbnN0cnVjdG9yLWxldmVsL2Fubm90YXRpb24vZWpiL0Jhc2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9jb25zdHJ1Y3Rvci1sZXZlbC9hbm5vdGF0aW9uL2VqYi9CYXNlQmVhbi5qYXZhCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgIGlmIChtZXRob2QgPT0gbnVsbCkgewogICAgICAgICAgICAgaWYgKG5hbWUgIT0gbnVsbCkgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkluICIgKyBnZXRDbGFzcygpLmdldE5hbWUoKSArICIgZXhwZWN0ZWQgbWV0aG9kIG5hbWU6ICIgKyBuYW1lICsgIiBnb3QgbnVsbCIpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKCFtZXRob2QuZ2V0TmFtZSgpLmVxdWFscyhuYW1lKSkgCisgICAgICAgICAgICBpZiAoIW1ldGhvZC5nZXROYW1lKCkuZXF1YWxzKG5hbWUpKQogICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJJbiAiICsgZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKyAiIGV4cGVjdGVkIG1ldGhvZCBuYW1lOiAiICsgbmFtZSArICIgZ290OiAiICsgbWV0aG9kLmdldE5hbWUoKSk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2NvbnN0cnVjdG9yLWxldmVsL2Fubm90YXRpb24vZWpiL1NmdWxFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9lamIvU2Z1bEVKQi5qYXZhCmluZGV4IDU4MjQyMWYuLjIwOGU2MWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9lamIvU2Z1bEVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9lamIvU2Z1bEVKQi5qYXZhCkBAIC0zOCw3ICszOCw3IEBACiAgICAgcHVibGljIFN0cmluZyBoZWxsbygpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTZnVsRUpCOmhlbGxvKCkiKTsKICAgICAgICAgdmVyaWZ5KCJTZnVsRUpCIik7Ci0JcmV0dXJuIHNsZXNzLnNheUhlbGxvKCk7CisgICAgcmV0dXJuIHNsZXNzLnNheUhlbGxvKCk7CiAgICAgfQogCiAgICAgQEludGVyY2VwdG9ycyhJbnRlcmNlcHRvckEuY2xhc3MpCkBAIC00OSw3ICs0OSw3IEBACiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0MCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIioqU2Z1bEVKQiBQb3N0Q29uc3RydWN0Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKlNmdWxFSkIgUG9zdENvbnN0cnVjdCIpOwogICAgICAgICB2ZXJpZnlNZXRob2QobnVsbCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2NvbnN0cnVjdG9yLWxldmVsL2Fubm90YXRpb24vZWpiL1NpbmdsZXRvbkJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9lamIvU2luZ2xldG9uQmVhbi5qYXZhCmluZGV4IDM2NDIyN2IuLmYwYWIwMGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9lamIvU2luZ2xldG9uQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9lamIvU2luZ2xldG9uQmVhbi5qYXZhCkBAIC0zOCwxMyArMzgsMTMgQEAKICAgICAgICAgdmVyaWZ5TWV0aG9kKCJpbml0Iik7CiAgICAgICAgIHNmdWwuaGVsbG8oKTsKICAgICB9Ci0gICAgCisKICAgICBASW50ZXJjZXB0b3JzKEludGVyY2VwdG9yQy5jbGFzcykKICAgICBwdWJsaWMgU3RyaW5nIGhlbGxvKCkgewogICAgICAgICB2ZXJpZnlBQl9BQygiU2luZ2xldG9uQmVhbiIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6aGVsbG8oKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6aGVsbG8oKSIpOwogICAgICAgICBzZnVsLnJlbW92ZSgpOwotCXJldHVybiAiaGVsbG8sIHdvcmxkIVxuIjsKKyAgICByZXR1cm4gImhlbGxvLCB3b3JsZCFcbiI7CiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9lamIvU29tZU1hbmFnZWRCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2NvbnN0cnVjdG9yLWxldmVsL2Fubm90YXRpb24vZWpiL1NvbWVNYW5hZ2VkQmVhbi5qYXZhCmluZGV4IDAxMzhkNzIuLjE4ZGZlNGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9lamIvU29tZU1hbmFnZWRCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9jb25zdHJ1Y3Rvci1sZXZlbC9hbm5vdGF0aW9uL2VqYi9Tb21lTWFuYWdlZEJlYW4uamF2YQpAQCAtMzUsMTQgKzM1LDE0IEBACiAKICAgICBASW50ZXJjZXB0b3JzKEludGVyY2VwdG9yQS5jbGFzcykKICAgICBwdWJsaWMgdm9pZCBmb28oKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTb21lTWFuYWdlZEJlYW46OmZvbygpICIpOwotCXZlcmlmeUEoIlNvbWVNYW5hZ2VkQmVhbiIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU29tZU1hbmFnZWRCZWFuOjpmb28oKSAiKTsKKyAgICB2ZXJpZnlBKCJTb21lTWFuYWdlZEJlYW4iKTsKICAgICAgICAgaWYgKG9yYiA9PSBudWxsKSB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiU29tZU1hbmFnZWRCZWFuOiBPUkIgaXMgbnVsbCIpOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CiAgICAgcHJpdmF0ZSB2b2lkIGRlc3Ryb3koKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTb21lTWFuYWdlZEJlYW46OmRlc3Ryb3koKSAiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNvbWVNYW5hZ2VkQmVhbjo6ZGVzdHJveSgpICIpOwogICAgICAgICB2ZXJpZnlNZXRob2QoImRlc3Ryb3kiKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2NvbnN0cnVjdG9yLWxldmVsL2Fubm90YXRpb24vZWpiL1NvbWVNYW5hZ2VkQmVhbjIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9lamIvU29tZU1hbmFnZWRCZWFuMi5qYXZhCmluZGV4IGRiOGE4YzcuLmIwOWJmMGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9lamIvU29tZU1hbmFnZWRCZWFuMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9lamIvU29tZU1hbmFnZWRCZWFuMi5qYXZhCkBAIC0zNSwxMyArMzUsMTMgQEAKIAogICAgIEBJbnRlcmNlcHRvcnMoSW50ZXJjZXB0b3JBLmNsYXNzKQogICAgIHB1YmxpYyB2b2lkIGZvbzIoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTb21lTWFuYWdlZEJlYW4yOjpmb28yKCkgIik7Ci0JdmVyaWZ5QUNfQUMoIlNvbWVNYW5hZ2VkQmVhbjIiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNvbWVNYW5hZ2VkQmVhbjI6OmZvbzIoKSAiKTsKKyAgICB2ZXJpZnlBQ19BQygiU29tZU1hbmFnZWRCZWFuMiIpOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CiAgICAgcHJpdmF0ZSB2b2lkIGRlc3Ryb3koKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTb21lTWFuYWdlZEJlYW4yOjpkZXN0cm95KCkgIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTb21lTWFuYWdlZEJlYW4yOjpkZXN0cm95KCkgIik7CiAgICAgICAgIHZlcmlmeU1ldGhvZCgiZGVzdHJveSIpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9lamIvU29tZU1hbmFnZWRCZWFuMy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9jb25zdHJ1Y3Rvci1sZXZlbC9hbm5vdGF0aW9uL2VqYi9Tb21lTWFuYWdlZEJlYW4zLmphdmEKaW5kZXggNDYyMjM1Mi4uYjFlYzM4YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9jb25zdHJ1Y3Rvci1sZXZlbC9hbm5vdGF0aW9uL2VqYi9Tb21lTWFuYWdlZEJlYW4zLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9jb25zdHJ1Y3Rvci1sZXZlbC9hbm5vdGF0aW9uL2VqYi9Tb21lTWFuYWdlZEJlYW4zLmphdmEKQEAgLTM2LDE4ICszNiwxOCBAQAogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdDMoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTb21lTWFuYWdlZEJlYW4zOjppbml0MygpICIgKyB0aGlzKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNvbWVNYW5hZ2VkQmVhbjM6OmluaXQzKCkgIiArIHRoaXMpOwogICAgIH0KLSAgICAKKwogCiAgICAgQEludGVyY2VwdG9ycyhJbnRlcmNlcHRvckEuY2xhc3MpCiAgICAgcHVibGljIHZvaWQgZm9vMygpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNvbWVNYW5hZ2VkQmVhbjM6OmZvbzMoKSAiKTsKLQl2ZXJpZnlBKCJTb21lTWFuYWdlZEJlYW4zIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTb21lTWFuYWdlZEJlYW4zOjpmb28zKCkgIik7CisgICAgdmVyaWZ5QSgiU29tZU1hbmFnZWRCZWFuMyIpOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CiAgICAgcHJpdmF0ZSB2b2lkIGRlc3Ryb3koKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTb21lTWFuYWdlZEJlYW4zOjpkZXN0cm95KCkgIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTb21lTWFuYWdlZEJlYW4zOjpkZXN0cm95KCkgIik7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9jb25zdHJ1Y3Rvci1sZXZlbC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2NvbnN0cnVjdG9yLWxldmVsL2J1aWxkLnhtbAppbmRleCBhNjY3ZTZiLi4xYzFhOTc0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2NvbnN0cnVjdG9yLWxldmVsL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2NvbnN0cnVjdG9yLWxldmVsL2J1aWxkLnhtbApAQCAtNDYsOSArNDYsOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+Ci0JCVVzYWdlOgotCQkJYW50IGFsbCAoRXhlY3V0ZXMgc2V0IG9mIGVqYi1lamIzMi1tZXRob2QtY29uc3RydWN0b3ItbGV2ZWwgdGVzdHMpCi0JPC9lY2hvPgorICAgIDxlY2hvPgorICAgICAgICBVc2FnZToKKyAgICAgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIHNldCBvZiBlamItZWpiMzItbWV0aG9kLWNvbnN0cnVjdG9yLWxldmVsIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvY29uc3RydWN0b3ItbGV2ZWwvZGVzY3JpcHRvci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9jb25zdHJ1Y3Rvci1sZXZlbC9kZXNjcmlwdG9yL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYTUyMTY1Ny4uYmZmOTkyMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9jb25zdHJ1Y3Rvci1sZXZlbC9kZXNjcmlwdG9yL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9jb25zdHJ1Y3Rvci1sZXZlbC9kZXNjcmlwdG9yL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWNvbnN0cnVjdG9yLWxldmVsLWRlc2NyIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvcnMvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzZS5jbGllbnQiIHZhbHVlPSJjb20uYWNtZS5DbGllbnQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvY29uc3RydWN0b3ItbGV2ZWwvZGVzY3JpcHRvci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2NvbnN0cnVjdG9yLWxldmVsL2Rlc2NyaXB0b3IvYnVpbGQueG1sCmluZGV4IDk2MDMxZWIuLjI4MjBmYmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvY29uc3RydWN0b3ItbGV2ZWwvZGVzY3JpcHRvci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9jb25zdHJ1Y3Rvci1sZXZlbC9kZXNjcmlwdG9yL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNTEsOCArNTEsOCBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImJlYW5zLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3JzL2JlYW5zLnhtbCIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWphci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTY2LDEwICs2NiwxMCBAQAogICAgICAgICAgICA8YXJnIGxpbmU9IiR7YXBwbmFtZX0tZWpiIi8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qYXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvY29uc3RydWN0b3ItbGV2ZWwvZGVzY3JpcHRvci9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2NvbnN0cnVjdG9yLWxldmVsL2Rlc2NyaXB0b3IvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGI1YmRjNDAuLjFiMThmN2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvY29uc3RydWN0b3ItbGV2ZWwvZGVzY3JpcHRvci9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9jb25zdHJ1Y3Rvci1sZXZlbC9kZXNjcmlwdG9yL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjQsMjEgKzI0LDIxIEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gCXByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCi0gIAkJbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOworICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CisgICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGFwcE5hbWU7CisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGFwcE5hbWU7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewogCi0JYXBwTmFtZSA9IGFyZ3NbMF07CisgICAgYXBwTmFtZSA9IGFyZ3NbMF07CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbihhcHBOYW1lKTsKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7Ci0gICAJY2xpZW50LmRvVGVzdCgpOworICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoYXBwTmFtZSArICJJRCIpOwotICAgIH0gIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvY29uc3RydWN0b3ItbGV2ZWwvZGVzY3JpcHRvci9lamIvQmFzZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvY29uc3RydWN0b3ItbGV2ZWwvZGVzY3JpcHRvci9lamIvQmFzZUJlYW4uamF2YQppbmRleCA1Y2ZkNjJlLi40YWQ0ZDlhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2NvbnN0cnVjdG9yLWxldmVsL2Rlc2NyaXB0b3IvZWpiL0Jhc2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9jb25zdHJ1Y3Rvci1sZXZlbC9kZXNjcmlwdG9yL2VqYi9CYXNlQmVhbi5qYXZhCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgIGlmIChtZXRob2QgPT0gbnVsbCkgewogICAgICAgICAgICAgaWYgKG5hbWUgIT0gbnVsbCkgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkluICIgKyBnZXRDbGFzcygpLmdldE5hbWUoKSArICIgZXhwZWN0ZWQgbWV0aG9kIG5hbWU6ICIgKyBuYW1lICsgIiBnb3QgbnVsbCIpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKCFtZXRob2QuZ2V0TmFtZSgpLmVxdWFscyhuYW1lKSkgCisgICAgICAgICAgICBpZiAoIW1ldGhvZC5nZXROYW1lKCkuZXF1YWxzKG5hbWUpKQogICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJJbiAiICsgZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKyAiIGV4cGVjdGVkIG1ldGhvZCBuYW1lOiAiICsgbmFtZSArICIgZ290OiAiICsgbWV0aG9kLmdldE5hbWUoKSk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2NvbnN0cnVjdG9yLWxldmVsL2Rlc2NyaXB0b3IvZWpiL1NmdWxFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvY29uc3RydWN0b3ItbGV2ZWwvZGVzY3JpcHRvci9lamIvU2Z1bEVKQi5qYXZhCmluZGV4IGZmYjU4NGQuLjBiNzdjMTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvY29uc3RydWN0b3ItbGV2ZWwvZGVzY3JpcHRvci9lamIvU2Z1bEVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvY29uc3RydWN0b3ItbGV2ZWwvZGVzY3JpcHRvci9lamIvU2Z1bEVKQi5qYXZhCkBAIC0zNSw3ICszNSw3IEBACiAgICAgcHVibGljIFN0cmluZyBoZWxsbygpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTZnVsRUpCOmhlbGxvKCkiKTsKICAgICAgICAgdmVyaWZ5KCJTZnVsRUpCIik7Ci0JcmV0dXJuIHNsZXNzLnNheUhlbGxvKCk7CisgICAgcmV0dXJuIHNsZXNzLnNheUhlbGxvKCk7CiAgICAgfQogCiAgICAgQFJlbW92ZQpAQCAtNDUsNyArNDUsNyBAQAogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdDAoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCIqKlNmdWxFSkIgUG9zdENvbnN0cnVjdCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKipTZnVsRUpCIFBvc3RDb25zdHJ1Y3QiKTsKICAgICAgICAgdmVyaWZ5TWV0aG9kKG51bGwpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9jb25zdHJ1Y3Rvci1sZXZlbC9kZXNjcmlwdG9yL2VqYi9TaW5nbGV0b25CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2NvbnN0cnVjdG9yLWxldmVsL2Rlc2NyaXB0b3IvZWpiL1NpbmdsZXRvbkJlYW4uamF2YQppbmRleCBjMTlkNGE5Li4zNzczNzM4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2NvbnN0cnVjdG9yLWxldmVsL2Rlc2NyaXB0b3IvZWpiL1NpbmdsZXRvbkJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2NvbnN0cnVjdG9yLWxldmVsL2Rlc2NyaXB0b3IvZWpiL1NpbmdsZXRvbkJlYW4uamF2YQpAQCAtMzYsMTIgKzM2LDEyIEBACiAgICAgICAgIHZlcmlmeU1ldGhvZCgiaW5pdCIpOwogICAgICAgICBzZnVsLmhlbGxvKCk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBoZWxsbygpIHsKICAgICAgICAgdmVyaWZ5QUJfQUMoIlNpbmdsZXRvbkJlYW4iKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46OmhlbGxvKCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46OmhlbGxvKCkiKTsKICAgICAgICAgc2Z1bC5yZW1vdmUoKTsKLQlyZXR1cm4gImhlbGxvLCB3b3JsZCFcbiI7CisgICAgcmV0dXJuICJoZWxsbywgd29ybGQhXG4iOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2dldF9tZXRob2RfbGMvYW5ub3RhdGlvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9nZXRfbWV0aG9kX2xjL2Fubm90YXRpb24vYnVpbGQucHJvcGVydGllcwppbmRleCA5YzMzOThmLi5hZDllMmU2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2dldF9tZXRob2RfbGMvYW5ub3RhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvZ2V0X21ldGhvZF9sYy9hbm5vdGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDkgKzE1LDkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1nZXQtbWV0aG9kLWxjLWFubiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzZS5jbGllbnQiIHZhbHVlPSJjb20uYWNtZS5DbGllbnQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvZ2V0X21ldGhvZF9sYy9hbm5vdGF0aW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvZ2V0X21ldGhvZF9sYy9hbm5vdGF0aW9uL2J1aWxkLnhtbAppbmRleCAzZTBiY2FlLi5jM2U3OTEyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2dldF9tZXRob2RfbGMvYW5ub3RhdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9nZXRfbWV0aG9kX2xjL2Fubm90YXRpb24vYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC01MCw4ICs1MCw4IEBACiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9JbnRlcmNlcHRvciouY2xhc3MsKiovUyouY2xhc3MsKiovQiouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qYXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02NSwxMCArNjUsMTAgQEAKICAgICAgICAgICAgPGFyZyBsaW5lPSIke2FwcG5hbWV9LWVqYiIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamFyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2dldF9tZXRob2RfbGMvYW5ub3RhdGlvbi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2dldF9tZXRob2RfbGMvYW5ub3RhdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggYjViZGM0MC4uMWIxOGY3YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9nZXRfbWV0aG9kX2xjL2Fubm90YXRpb24vY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvZ2V0X21ldGhvZF9sYy9hbm5vdGF0aW9uL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjQsMjEgKzI0LDIxIEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gCXByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCi0gIAkJbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOworICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CisgICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGFwcE5hbWU7CisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGFwcE5hbWU7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewogCi0JYXBwTmFtZSA9IGFyZ3NbMF07CisgICAgYXBwTmFtZSA9IGFyZ3NbMF07CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbihhcHBOYW1lKTsKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7Ci0gICAJY2xpZW50LmRvVGVzdCgpOworICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoYXBwTmFtZSArICJJRCIpOwotICAgIH0gIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvZ2V0X21ldGhvZF9sYy9hbm5vdGF0aW9uL2VqYi9CYXNlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9nZXRfbWV0aG9kX2xjL2Fubm90YXRpb24vZWpiL0Jhc2VCZWFuLmphdmEKaW5kZXggMDAzYjQxNi4uOWY4NDYyYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9nZXRfbWV0aG9kX2xjL2Fubm90YXRpb24vZWpiL0Jhc2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9nZXRfbWV0aG9kX2xjL2Fubm90YXRpb24vZWpiL0Jhc2VCZWFuLmphdmEKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICAgICAgaWYgKG1ldGhvZCA9PSBudWxsKSB7CiAgICAgICAgICAgICBpZiAobmFtZSAhPSBudWxsKSB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiSW4gIiArIGdldENsYXNzKCkuZ2V0TmFtZSgpICsgIiBleHBlY3RlZCBtZXRob2QgbmFtZTogIiArIG5hbWUgKyAiIGdvdCBudWxsIik7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIW1ldGhvZC5nZXROYW1lKCkuZXF1YWxzKG5hbWUpKSAKKyAgICAgICAgICAgIGlmICghbWV0aG9kLmdldE5hbWUoKS5lcXVhbHMobmFtZSkpCiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkluICIgKyBnZXRDbGFzcygpLmdldE5hbWUoKSArICIgZXhwZWN0ZWQgbWV0aG9kIG5hbWU6ICIgKyBuYW1lICsgIiBnb3Q6ICIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvZ2V0X21ldGhvZF9sYy9hbm5vdGF0aW9uL2VqYi9TZnVsRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2dldF9tZXRob2RfbGMvYW5ub3RhdGlvbi9lamIvU2Z1bEVKQi5qYXZhCmluZGV4IDZlZjAyOGUuLmU5YjVkNzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvZ2V0X21ldGhvZF9sYy9hbm5vdGF0aW9uL2VqYi9TZnVsRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9nZXRfbWV0aG9kX2xjL2Fubm90YXRpb24vZWpiL1NmdWxFSkIuamF2YQpAQCAtMzksNyArMzksNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNmdWxFSkI6aGVsbG8oKSIpOwogICAgICAgICB2ZXJpZnlBQl9BQygiU2Z1bEVKQiIpOwogICAgICAgICB2ZXJpZnlCX1BDKCJTZnVsRUpCIik7Ci0JcmV0dXJuIHNsZXNzLnNheUhlbGxvKCk7CisgICAgcmV0dXJuIHNsZXNzLnNheUhlbGxvKCk7CiAgICAgfQogCiAgICAgQEludGVyY2VwdG9ycyhJbnRlcmNlcHRvckEuY2xhc3MpCkBAIC01MCw3ICs1MCw3IEBACiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0MCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIioqU2Z1bEVKQiBQb3N0Q29uc3RydWN0Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKlNmdWxFSkIgUG9zdENvbnN0cnVjdCIpOwogICAgICAgICB2ZXJpZnlNZXRob2QobnVsbCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2dldF9tZXRob2RfbGMvYW5ub3RhdGlvbi9lamIvU2luZ2xldG9uQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9nZXRfbWV0aG9kX2xjL2Fubm90YXRpb24vZWpiL1NpbmdsZXRvbkJlYW4uamF2YQppbmRleCA5YjE1Njk0Li5jMjIzYTY0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2dldF9tZXRob2RfbGMvYW5ub3RhdGlvbi9lamIvU2luZ2xldG9uQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvZ2V0X21ldGhvZF9sYy9hbm5vdGF0aW9uL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKQEAgLTM4LDE0ICszOCwxNCBAQAogICAgICAgICB2ZXJpZnlNZXRob2QoImluaXQiKTsKICAgICAgICAgc2Z1bC5oZWxsbygpOwogICAgIH0KLSAgICAKKwogICAgIEBJbnRlcmNlcHRvcnMoSW50ZXJjZXB0b3JDLmNsYXNzKQogICAgIHB1YmxpYyBTdHJpbmcgaGVsbG8oKSB7CiAgICAgICAgIHZlcmlmeUFCX0FDKCJTaW5nbGV0b25CZWFuIik7CiAgICAgICAgIHZlcmlmeUFfUEMoIlNpbmdsZXRvbkJlYW4iKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46OmhlbGxvKCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46OmhlbGxvKCkiKTsKICAgICAgICAgc2Z1bC5yZW1vdmUoKTsKLQlyZXR1cm4gImhlbGxvLCB3b3JsZCFcbiI7CisgICAgcmV0dXJuICJoZWxsbywgd29ybGQhXG4iOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2dldF9tZXRob2RfbGMvYW5ub3RhdGlvbi9lamIvU29tZU1hbmFnZWRCZWFuQmFzZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9nZXRfbWV0aG9kX2xjL2Fubm90YXRpb24vZWpiL1NvbWVNYW5hZ2VkQmVhbkJhc2UuamF2YQppbmRleCA1NjJkOGRiLi42N2QzNWZlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2dldF9tZXRob2RfbGMvYW5ub3RhdGlvbi9lamIvU29tZU1hbmFnZWRCZWFuQmFzZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvZ2V0X21ldGhvZF9sYy9hbm5vdGF0aW9uL2VqYi9Tb21lTWFuYWdlZEJlYW5CYXNlLmphdmEKQEAgLTMxLDIzICszMSwyMyBAQAogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNvbWVNYW5hZ2VkQmVhbjo6aW5pdCgpICIgKyB0aGlzKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNvbWVNYW5hZ2VkQmVhbjo6aW5pdCgpICIgKyB0aGlzKTsKICAgICAgICAgdmVyaWZ5TWV0aG9kKG51bGwpOwogICAgIH0KLSAgICAKKwogCiAgICAgQEludGVyY2VwdG9ycyhJbnRlcmNlcHRvckEuY2xhc3MpCiAgICAgcHVibGljIHZvaWQgZm9vKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU29tZU1hbmFnZWRCZWFuOjpmb28oKSAiKTsKLQl2ZXJpZnlBX0FDKCJTb21lTWFuYWdlZEJlYW4iKTsKLQl2ZXJpZnlBX0FJKCJTb21lTWFuYWdlZEJlYW4iKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNvbWVNYW5hZ2VkQmVhbjo6Zm9vKCkgIik7CisgICAgdmVyaWZ5QV9BQygiU29tZU1hbmFnZWRCZWFuIik7CisgICAgdmVyaWZ5QV9BSSgiU29tZU1hbmFnZWRCZWFuIik7CiAgICAgICAgIGFpID0gZmFsc2U7CiAgICAgICAgIGlmIChvcmIgPT0gbnVsbCkgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlNvbWVNYW5hZ2VkQmVhbjogT1JCIGlzIG51bGwiKTsKICAgICB9CiAKICAgICBAUHJlRGVzdHJveQogICAgIHByaXZhdGUgdm9pZCBkZXN0cm95KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU29tZU1hbmFnZWRCZWFuOjpkZXN0cm95KCkgIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTb21lTWFuYWdlZEJlYW46OmRlc3Ryb3koKSAiKTsKICAgICAgICAgdmVyaWZ5TWV0aG9kKG51bGwpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvZ2V0X21ldGhvZF9sYy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2dldF9tZXRob2RfbGMvYnVpbGQueG1sCmluZGV4IDMyZjk1MzguLjAwZjE4ZTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvZ2V0X21ldGhvZF9sYy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9nZXRfbWV0aG9kX2xjL2J1aWxkLnhtbApAQCAtNDYsOSArNDYsOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+Ci0JCVVzYWdlOgotCQkJYW50IGFsbCAoRXhlY3V0ZXMgc2V0IG9mIGVqYi1lamIzMi1nZXRfbWV0aG9kX2xjIHRlc3RzKQotCTwvZWNobz4KKyAgICA8ZWNobz4KKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBzZXQgb2YgZWpiLWVqYjMyLWdldF9tZXRob2RfbGMgdGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9nZXRfbWV0aG9kX2xjL2Rlc2NyaXB0b3IvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvZ2V0X21ldGhvZF9sYy9kZXNjcmlwdG9yL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMDA0NTc0Ny4uYmRjZjdmYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9nZXRfbWV0aG9kX2xjL2Rlc2NyaXB0b3IvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2dldF9tZXRob2RfbGMvZGVzY3JpcHRvci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1nZXQtbWV0aG9kLWxjLWRlc2NyIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvcnMvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzZS5jbGllbnQiIHZhbHVlPSJjb20uYWNtZS5DbGllbnQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvZ2V0X21ldGhvZF9sYy9kZXNjcmlwdG9yL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvZ2V0X21ldGhvZF9sYy9kZXNjcmlwdG9yL2J1aWxkLnhtbAppbmRleCBmMWE4N2U2Li4yNDBlMzgxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2dldF9tZXRob2RfbGMvZGVzY3JpcHRvci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9nZXRfbWV0aG9kX2xjL2Rlc2NyaXB0b3IvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC01MSw4ICs1MSw4IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYmVhbnMueG1sIiB2YWx1ZT0iZGVzY3JpcHRvcnMvYmVhbnMueG1sIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktamFyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjYsMTAgKzY2LDEwIEBACiAgICAgICAgICAgIDxhcmcgbGluZT0iJHthcHBuYW1lfS1lamIiLz4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWphci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9nZXRfbWV0aG9kX2xjL2Rlc2NyaXB0b3IvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9nZXRfbWV0aG9kX2xjL2Rlc2NyaXB0b3IvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGI1YmRjNDAuLjFiMThmN2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvZ2V0X21ldGhvZF9sYy9kZXNjcmlwdG9yL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2dldF9tZXRob2RfbGMvZGVzY3JpcHRvci9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI0LDIxICsyNCwyMSBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotIAlwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAotICAJCW5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKKyAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQorICAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAotCXByaXZhdGUgc3RhdGljIFN0cmluZyBhcHBOYW1lOworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBhcHBOYW1lOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKIAotCWFwcE5hbWUgPSBhcmdzWzBdOworICAgIGFwcE5hbWUgPSBhcmdzWzBdOwogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oYXBwTmFtZSk7CiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwotICAgCWNsaWVudC5kb1Rlc3QoKTsKKyAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KGFwcE5hbWUgKyAiSUQiKTsKLSAgICB9ICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2dldF9tZXRob2RfbGMvZGVzY3JpcHRvci9lamIvQmFzZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvZ2V0X21ldGhvZF9sYy9kZXNjcmlwdG9yL2VqYi9CYXNlQmVhbi5qYXZhCmluZGV4IDY1ZmI3OTcuLjE5ZDFlMmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvZ2V0X21ldGhvZF9sYy9kZXNjcmlwdG9yL2VqYi9CYXNlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvZ2V0X21ldGhvZF9sYy9kZXNjcmlwdG9yL2VqYi9CYXNlQmVhbi5qYXZhCkBAIC00Miw3ICs0Miw3IEBACiAgICAgICAgIGlmIChtZXRob2QgPT0gbnVsbCkgewogICAgICAgICAgICAgaWYgKG5hbWUgIT0gbnVsbCkgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkluICIgKyBnZXRDbGFzcygpLmdldE5hbWUoKSArICIgZXhwZWN0ZWQgbWV0aG9kIG5hbWU6ICIgKyBuYW1lICsgIiBnb3QgbnVsbCIpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKCFtZXRob2QuZ2V0TmFtZSgpLmVxdWFscyhuYW1lKSkgCisgICAgICAgICAgICBpZiAoIW1ldGhvZC5nZXROYW1lKCkuZXF1YWxzKG5hbWUpKQogICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJJbiAiICsgZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKyAiIGV4cGVjdGVkIG1ldGhvZCBuYW1lOiAiICsgbmFtZSArICIgZ290OiAiICsgbWV0aG9kLmdldE5hbWUoKSk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2dldF9tZXRob2RfbGMvZGVzY3JpcHRvci9lamIvU2Z1bEVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9nZXRfbWV0aG9kX2xjL2Rlc2NyaXB0b3IvZWpiL1NmdWxFSkIuamF2YQppbmRleCA2ZjE4MWIwLi43MWUwYjI5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2dldF9tZXRob2RfbGMvZGVzY3JpcHRvci9lamIvU2Z1bEVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvZ2V0X21ldGhvZF9sYy9kZXNjcmlwdG9yL2VqYi9TZnVsRUpCLmphdmEKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTZnVsRUpCOmhlbGxvKCkiKTsKICAgICAgICAgdmVyaWZ5Ql9BQygiU2Z1bEVKQiIpOwogICAgICAgICB2ZXJpZnlCX1BDKCJTZnVsRUpCIik7Ci0JcmV0dXJuIHNsZXNzLnNheUhlbGxvKCk7CisgICAgcmV0dXJuIHNsZXNzLnNheUhlbGxvKCk7CiAgICAgfQogCiAgICAgQFJlbW92ZQpAQCAtNDYsNyArNDYsNyBAQAogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdDAoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCIqKlNmdWxFSkIgUG9zdENvbnN0cnVjdCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKipTZnVsRUpCIFBvc3RDb25zdHJ1Y3QiKTsKICAgICAgICAgdmVyaWZ5TWV0aG9kKG51bGwpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9nZXRfbWV0aG9kX2xjL2Rlc2NyaXB0b3IvZWpiL1NpbmdsZXRvbkJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvZ2V0X21ldGhvZF9sYy9kZXNjcmlwdG9yL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKaW5kZXggYTZiMTBjNy4uZmZkMmY5NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9nZXRfbWV0aG9kX2xjL2Rlc2NyaXB0b3IvZWpiL1NpbmdsZXRvbkJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2dldF9tZXRob2RfbGMvZGVzY3JpcHRvci9lamIvU2luZ2xldG9uQmVhbi5qYXZhCkBAIC0zNCwxNCArMzQsMTQgQEAKICAgICAgICAgdmVyaWZ5TWV0aG9kKCJpbml0Iik7CiAgICAgICAgIHNmdWwuaGVsbG8oKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGhlbGxvKCkgewogICAgICAgICB2ZXJpZnlBX0FDKCJTaW5nbGV0b25CZWFuIik7CiAgICAgICAgIC8vdmVyaWZ5QUJfQUMoIlNpbmdsZXRvbkJlYW4iKTsKICAgICAgICAgdmVyaWZ5QV9QQygiU2luZ2xldG9uQmVhbiIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6aGVsbG8oKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6aGVsbG8oKSIpOwogICAgICAgICBzZnVsLnJlbW92ZSgpOwotCXJldHVybiAiaGVsbG8sIHdvcmxkIVxuIjsKKyAgICByZXR1cm4gImhlbGxvLCB3b3JsZCFcbiI7CiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWluaGVyaXRhbmNlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1pbmhlcml0YW5jZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGMwZjBjNGIuLmExNDg3MzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWluaGVyaXRhbmNlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtaW5oZXJpdGFuY2UvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsOSArMTUsOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWludGVyY2VwdG9ycy1pbmhlcml0YW5jZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzZS5jbGllbnQiIHZhbHVlPSJjb20uYWNtZS5DbGllbnQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWluaGVyaXRhbmNlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWluaGVyaXRhbmNlL2J1aWxkLnhtbAppbmRleCBlYTM2ZGM1Li5mMzYzMzAyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1pbmhlcml0YW5jZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtaW5oZXJpdGFuY2UvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC01MCw4ICs1MCw4IEBACiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9JbnRlcmNlcHRvciouY2xhc3MsKiovUyouY2xhc3MsKiovQiouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qYXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02NSwxMCArNjUsMTAgQEAKICAgICAgICAgICAgPGFyZyBsaW5lPSIke2FwcG5hbWV9LWVqYiIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamFyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1pbmhlcml0YW5jZS9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1pbmhlcml0YW5jZS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggYjViZGM0MC4uMWIxOGY3YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtaW5oZXJpdGFuY2UvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWluaGVyaXRhbmNlL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjQsMjEgKzI0LDIxIEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gCXByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCi0gIAkJbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOworICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CisgICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGFwcE5hbWU7CisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGFwcE5hbWU7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewogCi0JYXBwTmFtZSA9IGFyZ3NbMF07CisgICAgYXBwTmFtZSA9IGFyZ3NbMF07CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbihhcHBOYW1lKTsKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7Ci0gICAJY2xpZW50LmRvVGVzdCgpOworICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoYXBwTmFtZSArICJJRCIpOwotICAgIH0gIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWluaGVyaXRhbmNlL2VqYi9CYXNlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtaW5oZXJpdGFuY2UvZWpiL0Jhc2VCZWFuLmphdmEKaW5kZXggY2E3YWI0NS4uMzNlYWQ4ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtaW5oZXJpdGFuY2UvZWpiL0Jhc2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtaW5oZXJpdGFuY2UvZWpiL0Jhc2VCZWFuLmphdmEKQEAgLTI5LDIwICsyOSwyMCBAQAogCiAgICAgQEFyb3VuZEludm9rZQogICAgIHByaXZhdGUgT2JqZWN0IGludGVyY2VwdENhbGwoSW52b2NhdGlvbkNvbnRleHQgY3R4KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIioqQmFzZUJlYW4gQVJPVU5ELUlOVk9LRSsrIFtAQXJvdW5kSW52b2tlXTogIiArIGN0eC5nZXRNZXRob2QoKSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKkJhc2VCZWFuIEFST1VORC1JTlZPS0UrKyBbQEFyb3VuZEludm9rZV06ICIgKyBjdHguZ2V0TWV0aG9kKCkpOwogICAgICAgICBhaSA9IHRydWU7CiAgICAgICAgIHJldHVybiBjdHgucHJvY2VlZCgpOwogICAgIH0KIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCIqKkJhc2VCZWFuIFBvc3RDb25zdHJ1Y3QiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqQmFzZUJlYW4gUG9zdENvbnN0cnVjdCIpOwogICAgICAgICBwYyA9IHRydWU7CiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKICAgICBwcml2YXRlIHZvaWQgZGVzdHJveSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIioqQmFzZUJlYW4gUHJlRGVzdHJveSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKipCYXNlQmVhbiBQcmVEZXN0cm95Iik7CiAgICAgICAgIHBkID0gdHJ1ZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWluaGVyaXRhbmNlL2VqYi9TZnVsRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1pbmhlcml0YW5jZS9lamIvU2Z1bEVKQi5qYXZhCmluZGV4IDE3MWRlYTEuLmY0Nzk3N2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWluaGVyaXRhbmNlL2VqYi9TZnVsRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtaW5oZXJpdGFuY2UvZWpiL1NmdWxFSkIuamF2YQpAQCAtMzMsNyArMzMsNyBAQAogCiAgICAgcHVibGljIFN0cmluZyBoZWxsbygpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTZnVsRUpCOmhlbGxvKCkiKTsKLQlyZXR1cm4gc2xlc3Muc2F5SGVsbG8oKTsKKyAgICByZXR1cm4gc2xlc3Muc2F5SGVsbG8oKTsKICAgICB9CiAKICAgICBAUmVtb3ZlCkBAIC00Myw3ICs0Myw3IEBACiAKICAgICBAQXJvdW5kSW52b2tlCiAgICAgcHJpdmF0ZSBPYmplY3QgaW50ZXJjZXB0Q2FsbDAoSW52b2NhdGlvbkNvbnRleHQgY3R4KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIioqU2Z1bEVKQiBBUk9VTkQtSU5WT0tFKysgW0BBcm91bmRJbnZva2VdOiAiICsgY3R4LmdldE1ldGhvZCgpKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqU2Z1bEVKQiBBUk9VTkQtSU5WT0tFKysgW0BBcm91bmRJbnZva2VdOiAiICsgY3R4LmdldE1ldGhvZCgpKTsKICAgICAgICAgaWYgKCFhaSkgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkJhc2VCZWFuIHdhcyBub3QgY2FsbGVkIik7CiAgICAgICAgIGFpID0gZmFsc2U7IC8vcmVzZXQKICAgICAgICAgcmV0dXJuIGN0eC5wcm9jZWVkKCk7CkBAIC01MSwxNCArNTEsMTQgQEAKIAogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQwKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiKipTZnVsRUpCIFBvc3RDb25zdHJ1Y3QiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqU2Z1bEVKQiBQb3N0Q29uc3RydWN0Iik7CiAgICAgICAgIGlmICghcGMpIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJCYXNlQmVhbiB3YXMgbm90IGNhbGxlZCIpOwogICAgICAgICBwYyA9IGZhbHNlOyAvL3Jlc2V0CiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKICAgICBwcml2YXRlIHZvaWQgZGVzdHJveTAoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCIqKlNmdWxFSkIgUHJlRGVzdHJveSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKipTZnVsRUpCIFByZURlc3Ryb3kiKTsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWluaGVyaXRhbmNlL2VqYi9TaW5nbGV0b25CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2ludGVyY2VwdG9ycy1pbmhlcml0YW5jZS9lamIvU2luZ2xldG9uQmVhbi5qYXZhCmluZGV4IDhhNTMzNjAuLjJlZmU3MjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWluaGVyaXRhbmNlL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtaW5oZXJpdGFuY2UvZWpiL1NpbmdsZXRvbkJlYW4uamF2YQpAQCAtMzMsMTEgKzMzLDExIEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6aW5pdCgpIik7CiAgICAgICAgIHNmdWwuaGVsbG8oKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGhlbGxvKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6aGVsbG8oKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2luZ2xldG9uQmVhbjo6aGVsbG8oKSIpOwogICAgICAgICBzZnVsLnJlbW92ZSgpOwotCXJldHVybiAiaGVsbG8sIHdvcmxkIVxuIjsKKyAgICByZXR1cm4gImhlbGxvLCB3b3JsZCFcbiI7CiAgICAgfQogCiAgICAgQFByZURlc3Ryb3kKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvaW50ZXJjZXB0b3JzLWluaGVyaXRhbmNlL2VqYi9TbGVzc0VKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtaW5oZXJpdGFuY2UvZWpiL1NsZXNzRUpCLmphdmEKaW5kZXggMTY4ZWJjMi4uNzAyMzY2NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtaW5oZXJpdGFuY2UvZWpiL1NsZXNzRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9pbnRlcmNlcHRvcnMtaW5oZXJpdGFuY2UvZWpiL1NsZXNzRUpCLmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKIEBJbnRlcmNlcHRvcnMoSW50ZXJjZXB0b3JBLmNsYXNzKQogcHVibGljIGNsYXNzIFNsZXNzRUpCIGV4dGVuZHMgQmFzZUJlYW4gaW1wbGVtZW50cyBTbGVzcyB7CiAgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbygpIHsKLQkgICAgcmV0dXJuICJIZWxsbyI7CisgICAgICAgIHJldHVybiAiSGVsbG8iOwogICAgIH0KIAogICAgIEBBcm91bmRJbnZva2UKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvbGMtbWV0aG9kLWNvbnN0cnVjdG9yLWxldmVsL2Fubm90YXRpb24vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvbGMtbWV0aG9kLWNvbnN0cnVjdG9yLWxldmVsL2Fubm90YXRpb24vYnVpbGQucHJvcGVydGllcwppbmRleCA0YzFkODBiLi45YTA2NWMzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2xjLW1ldGhvZC1jb25zdHJ1Y3Rvci1sZXZlbC9hbm5vdGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9sYy1tZXRob2QtY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw5ICsxNSw5IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItbWV0aG9kLWNvbnN0cnVjdG9yLWxldmVsLWFubiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzZS5jbGllbnQiIHZhbHVlPSJjb20uYWNtZS5DbGllbnQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvbGMtbWV0aG9kLWNvbnN0cnVjdG9yLWxldmVsL2Fubm90YXRpb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9sYy1tZXRob2QtY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9idWlsZC54bWwKaW5kZXggZGFjZDM5My4uMzU2OGQxNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9sYy1tZXRob2QtY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9sYy1tZXRob2QtY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTUwLDggKzUwLDggQEAKICAgICAgICAgICAgICAgdmFsdWU9IioqL0ludGVyY2VwdG9yKi5jbGFzcywqKi9TKi5jbGFzcywqKi9CKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWphci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTY1LDEwICs2NSwxMCBAQAogICAgICAgICAgICA8YXJnIGxpbmU9IiR7YXBwbmFtZX0tZWpiIi8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qYXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvbGMtbWV0aG9kLWNvbnN0cnVjdG9yLWxldmVsL2Fubm90YXRpb24vY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9sYy1tZXRob2QtY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggODNmZDA3My4uZDI4Y2U1ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9sYy1tZXRob2QtY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9sYy1tZXRob2QtY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI0LDIxICsyNCwyMSBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotIAlwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAotICAJCW5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKKyAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQorICAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAotCXByaXZhdGUgc3RhdGljIFN0cmluZyBhcHBOYW1lOworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBhcHBOYW1lOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKIAotCWFwcE5hbWUgPSBhcmdzWzBdOworICAgIGFwcE5hbWUgPSBhcmdzWzBdOwogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oYXBwTmFtZSk7CiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwotICAgCWNsaWVudC5kb1Rlc3QoKTsKKyAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KGFwcE5hbWUgKyAiSUQiKTsKLSAgICB9ICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2xjLW1ldGhvZC1jb25zdHJ1Y3Rvci1sZXZlbC9hbm5vdGF0aW9uL2VqYi9CYXNlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9sYy1tZXRob2QtY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9lamIvQmFzZUJlYW4uamF2YQppbmRleCBmNzc1MTRiLi42OWU1YmFjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2xjLW1ldGhvZC1jb25zdHJ1Y3Rvci1sZXZlbC9hbm5vdGF0aW9uL2VqYi9CYXNlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvbGMtbWV0aG9kLWNvbnN0cnVjdG9yLWxldmVsL2Fubm90YXRpb24vZWpiL0Jhc2VCZWFuLmphdmEKQEAgLTQyLDcgKzQyLDcgQEAKICAgICAgICAgaWYgKG1ldGhvZCA9PSBudWxsKSB7CiAgICAgICAgICAgICBpZiAobmFtZSAhPSBudWxsKSB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiSW4gIiArIGdldENsYXNzKCkuZ2V0TmFtZSgpICsgIiBleHBlY3RlZCBtZXRob2QgbmFtZTogIiArIG5hbWUgKyAiIGdvdCBudWxsIik7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIW1ldGhvZC5nZXROYW1lKCkuZXF1YWxzKG5hbWUpKSAKKyAgICAgICAgICAgIGlmICghbWV0aG9kLmdldE5hbWUoKS5lcXVhbHMobmFtZSkpCiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkluICIgKyBnZXRDbGFzcygpLmdldE5hbWUoKSArICIgZXhwZWN0ZWQgbWV0aG9kIG5hbWU6ICIgKyBuYW1lICsgIiBnb3Q6ICIgKyBtZXRob2QuZ2V0TmFtZSgpKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvbGMtbWV0aG9kLWNvbnN0cnVjdG9yLWxldmVsL2Fubm90YXRpb24vZWpiL1NmdWxFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvbGMtbWV0aG9kLWNvbnN0cnVjdG9yLWxldmVsL2Fubm90YXRpb24vZWpiL1NmdWxFSkIuamF2YQppbmRleCA0NWFjM2IwLi5lYTNiN2JlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2xjLW1ldGhvZC1jb25zdHJ1Y3Rvci1sZXZlbC9hbm5vdGF0aW9uL2VqYi9TZnVsRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9sYy1tZXRob2QtY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9lamIvU2Z1bEVKQi5qYXZhCkBAIC0zOCw3ICszOCw3IEBACiAgICAgcHVibGljIFN0cmluZyBoZWxsbygpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTZnVsRUpCOmhlbGxvKCkiKTsKICAgICAgICAgdmVyaWZ5KCJTZnVsRUpCIik7Ci0JcmV0dXJuIHNsZXNzLnNheUhlbGxvKCk7CisgICAgcmV0dXJuIHNsZXNzLnNheUhlbGxvKCk7CiAgICAgfQogCiAgICAgQEludGVyY2VwdG9ycyhJbnRlcmNlcHRvckEuY2xhc3MpCkBAIC01MCw3ICs1MCw3IEBACiAgICAgQEludGVyY2VwdG9ycyhJbnRlcmNlcHRvckEuY2xhc3MpCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdDAoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCIqKlNmdWxFSkIgUG9zdENvbnN0cnVjdCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKipTZnVsRUpCIFBvc3RDb25zdHJ1Y3QiKTsKICAgICAgICAgdmVyaWZ5TWV0aG9kKCJpbml0MCIpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9sYy1tZXRob2QtY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9lamIvU2luZ2xldG9uQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9sYy1tZXRob2QtY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9lamIvU2luZ2xldG9uQmVhbi5qYXZhCmluZGV4IDllMWI0NTQuLmZhNzQ5MTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvbGMtbWV0aG9kLWNvbnN0cnVjdG9yLWxldmVsL2Fubm90YXRpb24vZWpiL1NpbmdsZXRvbkJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2xjLW1ldGhvZC1jb25zdHJ1Y3Rvci1sZXZlbC9hbm5vdGF0aW9uL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKQEAgLTM5LDE0ICszOSwxNCBAQAogICAgICAgICB2ZXJpZnlNZXRob2QoImluaXQiKTsKICAgICAgICAgc2Z1bC5oZWxsbygpOwogICAgIH0KLSAgICAKKwogICAgIEBJbnRlcmNlcHRvcnMoSW50ZXJjZXB0b3JDLmNsYXNzKQogICAgIHB1YmxpYyBTdHJpbmcgaGVsbG8oKSB7CiAgICAgICAgIHZlcmlmeUFCX0FDKCJTaW5nbGV0b25CZWFuIik7CiAgICAgICAgIHZlcmlmeUFDX1BDKCJTaW5nbGV0b25CZWFuIik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOjpoZWxsbygpIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW5nbGV0b25CZWFuOjpoZWxsbygpIik7CiAgICAgICAgIHNmdWwucmVtb3ZlKCk7Ci0JcmV0dXJuICJoZWxsbywgd29ybGQhXG4iOworICAgIHJldHVybiAiaGVsbG8sIHdvcmxkIVxuIjsKICAgICB9CiAKICAgICBASW50ZXJjZXB0b3JzKEludGVyY2VwdG9yQi5jbGFzcykKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvbGMtbWV0aG9kLWNvbnN0cnVjdG9yLWxldmVsL2Fubm90YXRpb24vZWpiL1NvbWVNYW5hZ2VkQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9sYy1tZXRob2QtY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9lamIvU29tZU1hbmFnZWRCZWFuLmphdmEKaW5kZXggZDVjMDYxYi4uYzVkYmYzYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9sYy1tZXRob2QtY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9lamIvU29tZU1hbmFnZWRCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9sYy1tZXRob2QtY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9lamIvU29tZU1hbmFnZWRCZWFuLmphdmEKQEAgLTM2LDIyICszNiwyMiBAQAogICAgIEBJbnRlcmNlcHRvcnMoSW50ZXJjZXB0b3JBLmNsYXNzKQogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTb21lTWFuYWdlZEJlYW46OmluaXQoKSAiICsgdGhpcyk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTb21lTWFuYWdlZEJlYW46OmluaXQoKSAiICsgdGhpcyk7CiAgICAgICAgIHZlcmlmeU1ldGhvZCgiaW5pdCIpOwogICAgIH0KLSAgICAKKwogCiAgICAgQEludGVyY2VwdG9ycyhJbnRlcmNlcHRvckEuY2xhc3MpCiAgICAgcHVibGljIHZvaWQgZm9vKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU29tZU1hbmFnZWRCZWFuOjpmb28oKSAiKTsKLQl2ZXJpZnlBKCJTb21lTWFuYWdlZEJlYW4iKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNvbWVNYW5hZ2VkQmVhbjo6Zm9vKCkgIik7CisgICAgdmVyaWZ5QSgiU29tZU1hbmFnZWRCZWFuIik7CiAgICAgICAgIGlmIChvcmIgPT0gbnVsbCkgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlNvbWVNYW5hZ2VkQmVhbjogT1JCIGlzIG51bGwiKTsKICAgICB9CiAKICAgICBASW50ZXJjZXB0b3JzKEludGVyY2VwdG9yQS5jbGFzcykKICAgICBAUHJlRGVzdHJveQogICAgIHByaXZhdGUgdm9pZCBkZXN0cm95KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU29tZU1hbmFnZWRCZWFuOjpkZXN0cm95KCkgIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTb21lTWFuYWdlZEJlYW46OmRlc3Ryb3koKSAiKTsKICAgICAgICAgdmVyaWZ5TWV0aG9kKCJkZXN0cm95Iik7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9sYy1tZXRob2QtY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9lamIvU29tZU1hbmFnZWRCZWFuMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9sYy1tZXRob2QtY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9lamIvU29tZU1hbmFnZWRCZWFuMi5qYXZhCmluZGV4IDE0YmVlMjAuLmJkMGNjNjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvbGMtbWV0aG9kLWNvbnN0cnVjdG9yLWxldmVsL2Fubm90YXRpb24vZWpiL1NvbWVNYW5hZ2VkQmVhbjIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2xjLW1ldGhvZC1jb25zdHJ1Y3Rvci1sZXZlbC9hbm5vdGF0aW9uL2VqYi9Tb21lTWFuYWdlZEJlYW4yLmphdmEKQEAgLTM3LDIxICszNywyMSBAQAogICAgIEBJbnRlcmNlcHRvcnMoSW50ZXJjZXB0b3JBLmNsYXNzKQogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHJpdmF0ZSB2b2lkIGluaXQyKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU29tZU1hbmFnZWRCZWFuMjo6aW5pdDIoKSAiICsgdGhpcyk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTb21lTWFuYWdlZEJlYW4yOjppbml0MigpICIgKyB0aGlzKTsKICAgICAgICAgdmVyaWZ5TWV0aG9kKCJpbml0MiIpOwogICAgIH0KLSAgICAKKwogCiAgICAgQEludGVyY2VwdG9ycyhJbnRlcmNlcHRvckEuY2xhc3MpCiAgICAgcHVibGljIHZvaWQgZm9vMigpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNvbWVNYW5hZ2VkQmVhbjI6OmZvbzIoKSAiKTsKLQl2ZXJpZnlBQ19BQygiU29tZU1hbmFnZWRCZWFuMiIpOwotCXZlcmlmeUFfUEMoIlNvbWVNYW5hZ2VkQmVhbjIiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNvbWVNYW5hZ2VkQmVhbjI6OmZvbzIoKSAiKTsKKyAgICB2ZXJpZnlBQ19BQygiU29tZU1hbmFnZWRCZWFuMiIpOworICAgIHZlcmlmeUFfUEMoIlNvbWVNYW5hZ2VkQmVhbjIiKTsKICAgICB9CiAKICAgICBAUHJlRGVzdHJveQogICAgIHByaXZhdGUgdm9pZCBkZXN0cm95KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU29tZU1hbmFnZWRCZWFuMjo6ZGVzdHJveSgpICIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU29tZU1hbmFnZWRCZWFuMjo6ZGVzdHJveSgpICIpOwogICAgICAgICB2ZXJpZnlNZXRob2QoImRlc3Ryb3kiKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2xjLW1ldGhvZC1jb25zdHJ1Y3Rvci1sZXZlbC9hbm5vdGF0aW9uL2VqYi9Tb21lTWFuYWdlZEJlYW4zLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2xjLW1ldGhvZC1jb25zdHJ1Y3Rvci1sZXZlbC9hbm5vdGF0aW9uL2VqYi9Tb21lTWFuYWdlZEJlYW4zLmphdmEKaW5kZXggNTJkMzA3Yy4uNTA1ZTY1MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9sYy1tZXRob2QtY29uc3RydWN0b3ItbGV2ZWwvYW5ub3RhdGlvbi9lamIvU29tZU1hbmFnZWRCZWFuMy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvbGMtbWV0aG9kLWNvbnN0cnVjdG9yLWxldmVsL2Fubm90YXRpb24vZWpiL1NvbWVNYW5hZ2VkQmVhbjMuamF2YQpAQCAtMzcsMjEgKzM3LDIxIEBACiAgICAgQEludGVyY2VwdG9ycyhJbnRlcmNlcHRvckEuY2xhc3MpCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwcml2YXRlIHZvaWQgaW5pdDMoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTb21lTWFuYWdlZEJlYW4zOjppbml0MygpICIgKyB0aGlzKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNvbWVNYW5hZ2VkQmVhbjM6OmluaXQzKCkgIiArIHRoaXMpOwogICAgICAgICB2ZXJpZnlNZXRob2QoImluaXQzIik7CiAgICAgfQotICAgIAorCiAKICAgICBASW50ZXJjZXB0b3JzKEludGVyY2VwdG9yQS5jbGFzcykKICAgICBwdWJsaWMgdm9pZCBmb28zKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU29tZU1hbmFnZWRCZWFuMzo6Zm9vMygpICIpOwotCXZlcmlmeUFfQUMoIlNvbWVNYW5hZ2VkQmVhbjMiKTsKLQl2ZXJpZnlBQ19QQygiU29tZU1hbmFnZWRCZWFuMyIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU29tZU1hbmFnZWRCZWFuMzo6Zm9vMygpICIpOworICAgIHZlcmlmeUFfQUMoIlNvbWVNYW5hZ2VkQmVhbjMiKTsKKyAgICB2ZXJpZnlBQ19QQygiU29tZU1hbmFnZWRCZWFuMyIpOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CiAgICAgcHJpdmF0ZSB2b2lkIGRlc3Ryb3koKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTb21lTWFuYWdlZEJlYW4zOjpkZXN0cm95KCkgIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTb21lTWFuYWdlZEJlYW4zOjpkZXN0cm95KCkgIik7CiAgICAgICAgIHZlcmlmeU1ldGhvZCgiZGVzdHJveSIpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvbGMtbWV0aG9kLWNvbnN0cnVjdG9yLWxldmVsL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvbGMtbWV0aG9kLWNvbnN0cnVjdG9yLWxldmVsL2J1aWxkLnhtbAppbmRleCBhNjY3ZTZiLi4xYzFhOTc0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2xjLW1ldGhvZC1jb25zdHJ1Y3Rvci1sZXZlbC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9sYy1tZXRob2QtY29uc3RydWN0b3ItbGV2ZWwvYnVpbGQueG1sCkBAIC00Niw5ICs0Niw5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgYWxsIChFeGVjdXRlcyBzZXQgb2YgZWpiLWVqYjMyLW1ldGhvZC1jb25zdHJ1Y3Rvci1sZXZlbCB0ZXN0cykKLQk8L2VjaG8+CisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgc2V0IG9mIGVqYi1lamIzMi1tZXRob2QtY29uc3RydWN0b3ItbGV2ZWwgdGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9sYy1tZXRob2QtY29uc3RydWN0b3ItbGV2ZWwvZGVzY3JpcHRvci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9sYy1tZXRob2QtY29uc3RydWN0b3ItbGV2ZWwvZGVzY3JpcHRvci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDA5ZWU1ODEuLmY1ZDZjYWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvbGMtbWV0aG9kLWNvbnN0cnVjdG9yLWxldmVsL2Rlc2NyaXB0b3IvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2xjLW1ldGhvZC1jb25zdHJ1Y3Rvci1sZXZlbC9kZXNjcmlwdG9yL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLW1ldGhvZC1jb25zdHJ1Y3Rvci1sZXZlbC1kZXNjciIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3JzL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic2UuY2xpZW50IiB2YWx1ZT0iY29tLmFjbWUuQ2xpZW50Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2xjLW1ldGhvZC1jb25zdHJ1Y3Rvci1sZXZlbC9kZXNjcmlwdG9yL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvbGMtbWV0aG9kLWNvbnN0cnVjdG9yLWxldmVsL2Rlc2NyaXB0b3IvYnVpbGQueG1sCmluZGV4IDAyZmEyNWIuLjZjZjI4NTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvbGMtbWV0aG9kLWNvbnN0cnVjdG9yLWxldmVsL2Rlc2NyaXB0b3IvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvbGMtbWV0aG9kLWNvbnN0cnVjdG9yLWxldmVsL2Rlc2NyaXB0b3IvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC01MSw4ICs1MSw4IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYmVhbnMueG1sIiB2YWx1ZT0iZGVzY3JpcHRvcnMvYmVhbnMueG1sIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktamFyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjYsMTAgKzY2LDEwIEBACiAgICAgICAgICAgIDxhcmcgbGluZT0iJHthcHBuYW1lfS1lamIiLz4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWphci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9sYy1tZXRob2QtY29uc3RydWN0b3ItbGV2ZWwvZGVzY3JpcHRvci9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2xjLW1ldGhvZC1jb25zdHJ1Y3Rvci1sZXZlbC9kZXNjcmlwdG9yL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA4M2ZkMDczLi5kMjhjZTVlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2xjLW1ldGhvZC1jb25zdHJ1Y3Rvci1sZXZlbC9kZXNjcmlwdG9yL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2xjLW1ldGhvZC1jb25zdHJ1Y3Rvci1sZXZlbC9kZXNjcmlwdG9yL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjQsMjEgKzI0LDIxIEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gCXByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCi0gIAkJbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOworICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CisgICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGFwcE5hbWU7CisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGFwcE5hbWU7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewogCi0JYXBwTmFtZSA9IGFyZ3NbMF07CisgICAgYXBwTmFtZSA9IGFyZ3NbMF07CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbihhcHBOYW1lKTsKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7Ci0gICAJY2xpZW50LmRvVGVzdCgpOworICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoYXBwTmFtZSArICJJRCIpOwotICAgIH0gIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvbGMtbWV0aG9kLWNvbnN0cnVjdG9yLWxldmVsL2Rlc2NyaXB0b3IvZWpiL0Jhc2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2xjLW1ldGhvZC1jb25zdHJ1Y3Rvci1sZXZlbC9kZXNjcmlwdG9yL2VqYi9CYXNlQmVhbi5qYXZhCmluZGV4IDY1ZmI3OTcuLjE5ZDFlMmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvbGMtbWV0aG9kLWNvbnN0cnVjdG9yLWxldmVsL2Rlc2NyaXB0b3IvZWpiL0Jhc2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9sYy1tZXRob2QtY29uc3RydWN0b3ItbGV2ZWwvZGVzY3JpcHRvci9lamIvQmFzZUJlYW4uamF2YQpAQCAtNDIsNyArNDIsNyBAQAogICAgICAgICBpZiAobWV0aG9kID09IG51bGwpIHsKICAgICAgICAgICAgIGlmIChuYW1lICE9IG51bGwpIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJJbiAiICsgZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKyAiIGV4cGVjdGVkIG1ldGhvZCBuYW1lOiAiICsgbmFtZSArICIgZ290IG51bGwiKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICghbWV0aG9kLmdldE5hbWUoKS5lcXVhbHMobmFtZSkpIAorICAgICAgICAgICAgaWYgKCFtZXRob2QuZ2V0TmFtZSgpLmVxdWFscyhuYW1lKSkKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiSW4gIiArIGdldENsYXNzKCkuZ2V0TmFtZSgpICsgIiBleHBlY3RlZCBtZXRob2QgbmFtZTogIiArIG5hbWUgKyAiIGdvdDogIiArIG1ldGhvZC5nZXROYW1lKCkpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9sYy1tZXRob2QtY29uc3RydWN0b3ItbGV2ZWwvZGVzY3JpcHRvci9lamIvU2Z1bEVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9sYy1tZXRob2QtY29uc3RydWN0b3ItbGV2ZWwvZGVzY3JpcHRvci9lamIvU2Z1bEVKQi5qYXZhCmluZGV4IDAxNTRhM2EuLjA2ZGM0N2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvbGMtbWV0aG9kLWNvbnN0cnVjdG9yLWxldmVsL2Rlc2NyaXB0b3IvZWpiL1NmdWxFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2xjLW1ldGhvZC1jb25zdHJ1Y3Rvci1sZXZlbC9kZXNjcmlwdG9yL2VqYi9TZnVsRUpCLmphdmEKQEAgLTM1LDcgKzM1LDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGhlbGxvKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNmdWxFSkI6aGVsbG8oKSIpOwogICAgICAgICB2ZXJpZnkoIlNmdWxFSkIiKTsKLQlyZXR1cm4gc2xlc3Muc2F5SGVsbG8oKTsKKyAgICByZXR1cm4gc2xlc3Muc2F5SGVsbG8oKTsKICAgICB9CiAKICAgICBAUmVtb3ZlCkBAIC00NSw3ICs0NSw3IEBACiAKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHByaXZhdGUgdm9pZCBpbml0MCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIioqU2Z1bEVKQiBQb3N0Q29uc3RydWN0Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKlNmdWxFSkIgUG9zdENvbnN0cnVjdCIpOwogICAgICAgICB2ZXJpZnlNZXRob2QoImluaXQwIik7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2xjLW1ldGhvZC1jb25zdHJ1Y3Rvci1sZXZlbC9kZXNjcmlwdG9yL2VqYi9TaW5nbGV0b25CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZXJjZXB0b3JzL2xjLW1ldGhvZC1jb25zdHJ1Y3Rvci1sZXZlbC9kZXNjcmlwdG9yL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKaW5kZXggYzFlNjU1Yi4uMWE5YTFlYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGVyY2VwdG9ycy9sYy1tZXRob2QtY29uc3RydWN0b3ItbGV2ZWwvZGVzY3JpcHRvci9lamIvU2luZ2xldG9uQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRlcmNlcHRvcnMvbGMtbWV0aG9kLWNvbnN0cnVjdG9yLWxldmVsL2Rlc2NyaXB0b3IvZWpiL1NpbmdsZXRvbkJlYW4uamF2YQpAQCAtMzYsMTMgKzM2LDEzIEBACiAgICAgICAgIHZlcmlmeU1ldGhvZCgiaW5pdCIpOwogICAgICAgICBzZnVsLmhlbGxvKCk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBoZWxsbygpIHsKICAgICAgICAgdmVyaWZ5QUJfQUMoIlNpbmdsZXRvbkJlYW4iKTsKICAgICAgICAgdmVyaWZ5QUNfUEMoIlNpbmdsZXRvbkJlYW4iKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46OmhlbGxvKCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbmdsZXRvbkJlYW46OmhlbGxvKCkiKTsKICAgICAgICAgc2Z1bC5yZW1vdmUoKTsKLQlyZXR1cm4gImhlbGxvLCB3b3JsZCFcbiI7CisgICAgcmV0dXJuICJoZWxsbywgd29ybGQhXG4iOwogICAgIH0KIAogICAgIEBQcmVEZXN0cm95CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZmNlcy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGZjZXMvYnVpbGQucHJvcGVydGllcwppbmRleCAzM2Q3MjFiLi44MmNmNjk0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZmNlcy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRmY2VzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiMzItaW50cmZhY2VzIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InNlLmNsaWVudCIgdmFsdWU9ImNsaWVudC5pbnRyZmFjZXMuQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRmY2VzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9pbnRmY2VzL2J1aWxkLnhtbAppbmRleCA4ZTE0YzhkLi44YjZkOTQ0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvaW50ZmNlcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL2ludGZjZXMvYnVpbGQueG1sCkBAIC0zNCwxMiArMzQsMTIgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4scHJlY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgICAgIDxqYXZhYyBmb3JrPSJ0cnVlIiBpbmNsdWRlQW50UnVudGltZT0iZmFsc2UiIAorICAgICAgICA8amF2YWMgZm9yaz0idHJ1ZSIgaW5jbHVkZUFudFJ1bnRpbWU9ImZhbHNlIgogICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7czFhcy5jbGFzc3BhdGh9IgogICAgICAgICAgICAgICAgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIGRlYnVnPSJ0cnVlIiBzcmNkaXI9ImNsaWVudCIgaW5jbHVkZXM9IioqLyouamF2YSI+CiAgICAgICAgICAgICA8Y2xhc3NwYXRoIHBhdGg9IiR7Y2xhc3NwYXRofSIvPgpAQCAtNzMsNyArNzMsNyBAQAogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtODUsNyArODUsNyBAQAogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJjbGllbnQudHlwZSIgdmFsdWU9ImRlcGxveS1mYWlsIiAvPgotCQkJCQkJPHBhcmFtIG5hbWU9ImVqYi5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIuamFyIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiLmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXIiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJpbmRleCIgdmFsdWU9IjEiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1uZWciPgpAQCAtOTQsNyArOTQsNyBAQAogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJjbGllbnQudHlwZSIgdmFsdWU9ImRlcGxveS1mYWlsIiAvPgotCQkJCQkJPHBhcmFtIG5hbWU9ImVqYi5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIuamFyIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiLmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXIiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJpbmRleCIgdmFsdWU9IjIiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KQEAgLTExMCwxMCArMTEwLDEwIEBACiAgICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke29yYi5wb3J0fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9tZXRob2RpbnRmL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvbWV0aG9kaW50Zi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDIzMWZhZjMuLjM5M2ZkYTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9tZXRob2RpbnRmL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL21ldGhvZGludGYvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamIzMi1tZXRob2RpbnRmIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InNlLmNsaWVudCIgdmFsdWU9ImNsaWVudC5tZXRob2RpbnRmLkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL21ldGhvZGludGYvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL21ldGhvZGludGYvYnVpbGQueG1sCmluZGV4IDY2MWU3ODcuLmRjODk4ZWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9tZXRob2RpbnRmL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvbWV0aG9kaW50Zi9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTUxLDcgKzUxLDcgQEAKICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qYXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02NSwxMCArNjUsMTAgQEAKICAgICAgICAgICAgPGFyZyBsaW5lPSIke2puZGlyb290fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamFyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvbWV0aG9kaW50Zi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvbWV0aG9kaW50Zi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMGY2MmQ0MS4uMWFmMmIxYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL21ldGhvZGludGYvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9tZXRob2RpbnRmL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjUsMTIgKzI1LDEyIEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIEluaXRpYWxDb250ZXh0IGNvbnRleHQ7CiAKLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7IAorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiZWpiMzItbWV0aG9kaW50ZiIpOwogCiAgICAgICAgIHRyeSB7CkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgICAgICBzdGZ1bC50ZXN0KCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldhaXRpbmcgdGltZXIgdG8gZXhwaXJlIHRvIHZlcmlmeSB0aGUgcmVzdWx0cyIpOwogICAgICAgICAgICAgVGhyZWFkLnNsZWVwKDMwMDApOwotICAgICAgICAgICAgYm9vbGVhbiBwYXNzID0gc3RsZXMudmVyaWZ5KCkgJiYgc3RmdWwudmVyaWZ5KCk7IAorICAgICAgICAgICAgYm9vbGVhbiBwYXNzID0gc3RsZXMudmVyaWZ5KCkgJiYgc3RmdWwudmVyaWZ5KCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiMzItbWV0aG9kaW50ZjogIiwgKChwYXNzKT8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKSApOwogCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9tZXRob2RpbnRmL2VqYi9TaW5nbGV0b25CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvbWV0aG9kaW50Zi9lamIvU2luZ2xldG9uQmVhbi5qYXZhCmluZGV4IDgxMzg3MmMuLmE2YTQ2MTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9tZXRob2RpbnRmL2VqYi9TaW5nbGV0b25CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL21ldGhvZGludGYvZWpiL1NpbmdsZXRvbkJlYW4uamF2YQpAQCAtNDIsNyArNDIsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIHZlcmlmeVJlc3VsdCgpIHsKLQlyZXR1cm4gX3BjICYmIF9pbnRmOworICAgIHJldHVybiBfcGMgJiYgX2ludGY7CiAgICAgfQogCiAgICAgQEFyb3VuZEludm9rZQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS9idWlsZC54bWwKaW5kZXggY2FkMzgxNC4uMjZhMzM5NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvYnVpbGQueG1sCkBAIC0zOSw5ICszOSw5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgYWxsIChFeGVjdXRlcyBzZXQgb2YgZWpiLWVqYjMyLXBlcnNpc3RlbmNlIHRlc3RzKQotCTwvZWNobz4KKyAgICA8ZWNobz4KKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBzZXQgb2YgZWpiLWVqYjMyLXBlcnNpc3RlbmNlIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL2J1aWxkLnhtbAppbmRleCBhNjgyOWMyLi41MDYyYzVlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvYnVpbGQueG1sCkBAIC03NCw5ICs3NCw5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgYWxsIChFeGVjdXRlcyBzZXQgb2YgZWpiLWVqYjMyLXBlcnNpc3RlbmNlLXVuc3luY2hyb25pemVkUEMgdGVzdHMpCi0JPC9lY2hvPgorICAgIDxlY2hvPgorICAgICAgICBVc2FnZToKKyAgICAgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIHNldCBvZiBlamItZWpiMzItcGVyc2lzdGVuY2UtdW5zeW5jaHJvbml6ZWRQQyB0ZXN0cykKKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy9kaXNhbGxvd2VkX21ldGhvZHMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL2Rpc2FsbG93ZWRfbWV0aG9kcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGFmZmI1NzYuLjdkYTJjMWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL2Rpc2FsbG93ZWRfbWV0aG9kcy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL2Rpc2FsbG93ZWRfbWV0aG9kcy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ1bnN5bmNocGNfZGlzYWxsb3dlZF9tZXRob2RzIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvZGlzYWxsb3dlZF9tZXRob2RzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL2Rpc2FsbG93ZWRfbWV0aG9kcy9idWlsZC54bWwKaW5kZXggNjAyNzJlMi4uMDZlOWY4MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvZGlzYWxsb3dlZF9tZXRob2RzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy9kaXNhbGxvd2VkX21ldGhvZHMvYnVpbGQueG1sCkBAIC00NiwxNyArNDYsMTcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0vbGliIi8+Ci0gICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS9saWIvJHthcHBuYW1lfS1saWIuamFyIiAKKyAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9L2xpYi8ke2FwcG5hbWV9LWxpYi5qYXIiCiAgICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICAgaW5jbHVkZXM9IioqL1BlcnNvbi5jbGFzcyI+Ci0gICAgICAgIDwvamFyPiAgICAgICAgCisgICAgICAgIDwvamFyPgogICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vbGliLyR7YXBwbmFtZX0tcGFyLmphciI+CiAgICAgICAgICAgICAgPG1ldGFpbmYgZmlsZT0iZGVzY3JpcHRvci9wZXJzaXN0ZW5jZS54bWwiLz4KICAgICAgICAgPC9qYXI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkJlYW4uY2xhc3MsKiovVGVzdGVyLmNsYXNzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovQ2xpZW50LmNsYXNzLCoqL1Rlc3Rlci5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIgdXBkYXRlPSJ5ZXMiCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy9kaXNhbGxvd2VkX21ldGhvZHMvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvZGlzYWxsb3dlZF9tZXRob2RzL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBlM2EwNjkyLi5iNTI0NWMzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy9kaXNhbGxvd2VkX21ldGhvZHMvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL2Rpc2FsbG93ZWRfbWV0aG9kcy9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJIGFtIGluIGNsaWVudCIpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgTWFwPFN0cmluZywgQm9vbGVhbj4gcmVzdWx0TWFwID0gc2xlc3NCZWFuLmRvVGVzdCgpOwogICAgICAgICAgICAgZm9yIChFbnRyeTxTdHJpbmcsIEJvb2xlYW4+IGVudHJ5IDogcmVzdWx0TWFwLmVudHJ5U2V0KCkpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL2Rpc2FsbG93ZWRfbWV0aG9kcy9lamIvUGVyc29uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy9kaXNhbGxvd2VkX21ldGhvZHMvZWpiL1BlcnNvbi5qYXZhCmluZGV4IDgzNDcwZTMuLjY0MjNjMWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL2Rpc2FsbG93ZWRfbWV0aG9kcy9lamIvUGVyc29uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvZGlzYWxsb3dlZF9tZXRob2RzL2VqYi9QZXJzb24uamF2YQpAQCAtMjQsNyArMjQsNyBAQAogCiAgICAgQElkCiAgICAgcHJpdmF0ZSBpbnQgaWQ7Ci0gICAgCisKICAgICBwcml2YXRlIFN0cmluZyBuYW1lOwogCiAgICAgcHVibGljIFBlcnNvbigpIHsKQEAgLTMzLDcgKzMzLDcgQEAKICAgICBwdWJsaWMgUGVyc29uKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFBlcnNvbihpbnQgaWQpIHsKICAgICAgICAgdGhpcy5pZCA9IGlkOwogICAgIH0KQEAgLTQyLDcgKzQyLDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgICAgICByZXR1cm4gIlBlcnNvbjogeyIgKyAiKG5hbWUgPSAiICsgbmFtZSArICIpfSI7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGludCBnZXRJZCgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMuaWQ7CiAgICAgfQpAQCAtNTAsNyArNTAsNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKICAgICAgICAgcmV0dXJuIG5hbWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkgewogICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL2Rpc2FsbG93ZWRfbWV0aG9kcy9lamIvU2xlc3NCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy9kaXNhbGxvd2VkX21ldGhvZHMvZWpiL1NsZXNzQmVhbi5qYXZhCmluZGV4IDgyZTFiNmIuLmU1MWQ0YzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL2Rpc2FsbG93ZWRfbWV0aG9kcy9lamIvU2xlc3NCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvZGlzYWxsb3dlZF9tZXRob2RzL2VqYi9TbGVzc0JlYW4uamF2YQpAQCAtMzIsMTUgKzMyLDE1IEBACiAgICAgQFBlcnNpc3RlbmNlQ29udGV4dCh1bml0TmFtZT0ibGliL3Vuc3luY2hwY19kaXNhbGxvd2VkX21ldGhvZHMtcGFyLmphciNlbSIsCiAgICAgICAgICAgICBzeW5jaHJvbml6YXRpb249U3luY2hyb25pemF0aW9uVHlwZS5VTlNZTkNIUk9OSVpFRCkKICAgICBFbnRpdHlNYW5hZ2VyIGVtOwotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIE1hcDxTdHJpbmcsIEJvb2xlYW4+IGRvVGVzdCgpIHsKICAgICAgICAgTWFwPFN0cmluZywgQm9vbGVhbj4gcmVzdWx0TWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBCb29sZWFuPigpOwotICAgICAgICAKKwogICAgICAgICAvKgogICAgICAgICAgKiBTUEVDOiBUaGUgYXBwbGljYXRpb24ncyB1c2Ugb2YgcXVlcmllcyB3aXRoIHBlc3NpbWlzdGljIGxvY2tzLAotICAgICAgICAgKiBidWxrIHVwZGF0ZSBvciBkZWxldGUgcXVlcmllcywgZXRjLiByZXN1bHQgaW4gdGhlIHByb3ZpZGVyIAotICAgICAgICAgKiB0aHJvd2luZyB0aGUgVHJhbnNhY3Rpb25SZXF1aXJlZEV4Y2VwdGlvbi4gCisgICAgICAgICAqIGJ1bGsgdXBkYXRlIG9yIGRlbGV0ZSBxdWVyaWVzLCBldGMuIHJlc3VsdCBpbiB0aGUgcHJvdmlkZXIKKyAgICAgICAgICogdGhyb3dpbmcgdGhlIFRyYW5zYWN0aW9uUmVxdWlyZWRFeGNlcHRpb24uCiAgICAgICAgICAqLwogICAgICAgICAvL1F1ZXJ5IHdpdGggcGVzc2ltaXN0aWMgbG9ja3MKICAgICAgICAgUXVlcnkgcXVlcnkgPSBlbS5jcmVhdGVRdWVyeSgiU0VMRUNUIE9CSkVDVChwKSBGUk9NIFBlcnNvbiBwIFdIRVJFIHAubmFtZT0nVG9tJyIpOwpAQCAtNTYsNyArNTYsNyBAQAogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHJlc3VsdE1hcC5wdXQoIlRlc3RQZXNzaW1pc3RpY0xvY2tRdWVyeSIsIGZhbHNlKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAvL0J1bGsgdXBkYXRlCiAgICAgICAgIFF1ZXJ5IHVwZGF0ZVF1ZXJ5ID0gZW0uY3JlYXRlUXVlcnkoIlVQREFURSBQZXJzb24gcCBTRVQgcC5uYW1lPSdKaW0nIFdIRVJFIHAuaWQgPiAxMDAiKTsKICAgICAgICAgdHJ5IHsKQEAgLTcwLDcgKzcwLDcgQEAKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICByZXN1bHRNYXAucHV0KCJUZXN0QnVsa1VwZGF0ZSIsIGZhbHNlKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAvL0J1bGsgZGVsZXRlCiAgICAgICAgIFF1ZXJ5IGRlbGV0ZVF1ZXJ5ID0gZW0uY3JlYXRlUXVlcnkoIkRFTEVURSBGUk9NIFBlcnNvbiBwIFdIRVJFIHAubmFtZSA9ICdKaW0nIik7CiAgICAgICAgIHRyeSB7CkBAIC04NCwxMiArODQsMTIgQEAKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICByZXN1bHRNYXAucHV0KCJUZXN0QnVsa0RlbGV0ZSIsIGZhbHNlKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgCisKKwogICAgICAgICAvKgotICAgICAgICAgKiBTUEVDOiBUaGUgYXBwbGljYXRpb24gaXMgcGVybWl0dGVkIHRvIGludm9rZSB0aGUgcGVyc2lzdCwgbWVyZ2UsIHJlbW92ZSwgCi0gICAgICAgICAqIGFuZCByZWZyZXNoIGVudGl0eSBsaWZlY3ljbGUgb3BlcmF0aW9ucyBvbiBhbiBlbnRpdHkgbWFuYWdlciBvZiB0eXBlIAotICAgICAgICAgKiBTeW5jaHJvbml6YXRpb25UeXBlLlVOU1lOQ0hST05JWkVEIGluZGVwZW5kZW50IG9mIHdoZXRoZXIgdGhlIAorICAgICAgICAgKiBTUEVDOiBUaGUgYXBwbGljYXRpb24gaXMgcGVybWl0dGVkIHRvIGludm9rZSB0aGUgcGVyc2lzdCwgbWVyZ2UsIHJlbW92ZSwKKyAgICAgICAgICogYW5kIHJlZnJlc2ggZW50aXR5IGxpZmVjeWNsZSBvcGVyYXRpb25zIG9uIGFuIGVudGl0eSBtYW5hZ2VyIG9mIHR5cGUKKyAgICAgICAgICogU3luY2hyb25pemF0aW9uVHlwZS5VTlNZTkNIUk9OSVpFRCBpbmRlcGVuZGVudCBvZiB3aGV0aGVyIHRoZQogICAgICAgICAgKiBwZXJzaXN0ZW5jZSBjb250ZXh0IGlzIGpvaW5lZCB0byB0aGUgY3VycmVudCB0cmFuc2FjdGlvbi4KICAgICAgICAgICovCiAgICAgICAgIFBlcnNvbiBwZXJzb24yID0gbmV3IFBlcnNvbigiSmFjayIpOwpAQCAtMTAwLDcgKzEwMCw3IEBACiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgcmVzdWx0TWFwLnB1dCgiVGVzdFBlcnNpc3QiLCBmYWxzZSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGVtLm1lcmdlKG5ldyBQZXJzb24oIkxpbHkiKSk7CiAgICAgICAgICAgICByZXN1bHRNYXAucHV0KCJUZXN0TWVyZ2UiLCB0cnVlKTsKQEAgLTEwOCw3ICsxMDgsNyBAQAogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHJlc3VsdE1hcC5wdXQoIlRlc3RNZXJnZSIsIGZhbHNlKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBQZXJzb24gcGVyc29uMyA9IGVtLmZpbmQoUGVyc29uLmNsYXNzLCAyKTsKICAgICAgICAgcGVyc29uMy5zZXROYW1lKCJMdWN5MiIpOwogICAgICAgICB0cnkgewpAQCAtMTE4LDcgKzExOCw3IEBACiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgcmVzdWx0TWFwLnB1dCgiVGVzdFJlZnJlc2giLCBmYWxzZSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGVtLnJlbW92ZShwZXJzb24yKTsKICAgICAgICAgICAgIHJlc3VsdE1hcC5wdXQoIlRlc3RSZW1vdmUiLCB0cnVlKTsKQEAgLTEyNiw3ICsxMjYsNyBAQAogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHJlc3VsdE1hcC5wdXQoIlRlc3RSZW1vdmUiLCBmYWxzZSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIHJlc3VsdE1hcDsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy9leHRlbmRlZHNjb3BlX2Nyb3NzX3Nmc2IvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL2V4dGVuZGVkc2NvcGVfY3Jvc3Nfc2ZzYi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGFiYWUxMTQuLmQ5MGRlOTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL2V4dGVuZGVkc2NvcGVfY3Jvc3Nfc2ZzYi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL2V4dGVuZGVkc2NvcGVfY3Jvc3Nfc2ZzYi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ1bnN5bmNwY19leHRlbmRlZHNjb3BlX2Nyb3NzX3Nmc2IiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy9leHRlbmRlZHNjb3BlX2Nyb3NzX3Nmc2IvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvZXh0ZW5kZWRzY29wZV9jcm9zc19zZnNiL2J1aWxkLnhtbAppbmRleCBmMGZhYzc2Li4xZTdkZjBmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy9leHRlbmRlZHNjb3BlX2Nyb3NzX3Nmc2IvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL2V4dGVuZGVkc2NvcGVfY3Jvc3Nfc2ZzYi9idWlsZC54bWwKQEAgLTQ2LDE3ICs0NiwxNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfS9saWIiLz4KLSAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9L2xpYi8ke2FwcG5hbWV9LWxpYi5qYXIiIAorICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vbGliLyR7YXBwbmFtZX0tbGliLmphciIKICAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgICBpbmNsdWRlcz0iKiovUGVyc29uLmNsYXNzIj4KLSAgICAgICAgPC9qYXI+ICAgICAgICAKKyAgICAgICAgPC9qYXI+CiAgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS9saWIvJHthcHBuYW1lfS1wYXIuamFyIj4KICAgICAgICAgICAgICA8bWV0YWluZiBmaWxlPSJkZXNjcmlwdG9yL3BlcnNpc3RlbmNlLnhtbCIvPgogICAgICAgICA8L2phcj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qRmluZGVyKi5jbGFzcywqKi8qeW5jaFBDKi5jbGFzcywqKi9UZXN0ZXIuY2xhc3MiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9DbGllbnQuY2xhc3MsKiovVGVzdGVyLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIiB1cGRhdGU9InllcyIKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL2V4dGVuZGVkc2NvcGVfY3Jvc3Nfc2ZzYi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy9leHRlbmRlZHNjb3BlX2Nyb3NzX3Nmc2IvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDY1YTJhYmMuLmEwY2U2ZWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL2V4dGVuZGVkc2NvcGVfY3Jvc3Nfc2ZzYi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvZXh0ZW5kZWRzY29wZV9jcm9zc19zZnNiL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogICAgICAgICAgICAgImFwcHNlcnYtdGVzdHMiKTsKICAgICBARUpCKGJlYW5OYW1lID0gIlRDMVNmc2JXaXRoVW5zeW5jaFBDIikKICAgICBwcml2YXRlIHN0YXRpYyBUZXN0ZXIgdEMxU2ZzYldpdGhVbnN5bmNoUEM7Ci0gICAgCisKICAgICBARUpCKGJlYW5OYW1lID0gIlRDMlNmc2JXaXRoU3luY2hQQyIpCiAgICAgcHJpdmF0ZSBzdGF0aWMgVGVzdGVyIHRDMlNmc2JXaXRoU3luY2hQQzsKIApAQCAtNDEsMTMgKzQxLDEzIEBACiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJIGFtIGluIGNsaWVudCIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbGluZyBTRlNCV2l0aFVuc3luY2hQQy5kb1Rlc3QiKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJUZXN0Q2FzZTFfZXh0ZW5kZWRTY29wZVNmc2JXaXRoVW5zeW5jUENJbnZva2VTZnNiV2l0aFN5bmNoUEMiLCB0QzFTZnNiV2l0aFVuc3luY2hQQy5kb1Rlc3QoKSA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYWxsaW5nIFRDMl9TRlNCV2l0aFN5bmNoUEMuZG9UZXN0Iik7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiVGVzdENhc2UyX2V4dGVuZGVkU2NvcGVTZnNiV2l0aFN5bmNQQ0ludm9rZVNmc2JXaXRoVW5zeW5jaFBDIiwgdEMyU2ZzYldpdGhTeW5jaFBDLmRvVGVzdCgpID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRvVGVzdCBtZXRob2QgZW5kcyIpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL2V4dGVuZGVkc2NvcGVfY3Jvc3Nfc2ZzYi9lamIvVEMxU2ZzYldpdGhTeW5jaFBDLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy9leHRlbmRlZHNjb3BlX2Nyb3NzX3Nmc2IvZWpiL1RDMVNmc2JXaXRoU3luY2hQQy5qYXZhCmluZGV4IGM4NTUwOTIuLjI1ZWUwMGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL2V4dGVuZGVkc2NvcGVfY3Jvc3Nfc2ZzYi9lamIvVEMxU2ZzYldpdGhTeW5jaFBDLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvZXh0ZW5kZWRzY29wZV9jcm9zc19zZnNiL2VqYi9UQzFTZnNiV2l0aFN5bmNoUEMuamF2YQpAQCAtMzQsMTcgKzM0LDE3IEBACiAgICAgICAgICAgICBzeW5jaHJvbml6YXRpb24gPSBTeW5jaHJvbml6YXRpb25UeXBlLlNZTkNIUk9OSVpFRCwKICAgICAgICAgICAgIHR5cGUgPSBQZXJzaXN0ZW5jZUNvbnRleHRUeXBlLkVYVEVOREVEKQogICAgIEVudGl0eU1hbmFnZXIgZW07Ci0gICAgCisKICAgICAvL0BPdmVycmlkZQogICAgIHB1YmxpYyBQZXJzb24gZmluZFBlcnNvbihTdHJpbmcgbmFtZSkgewogICAgICAgICBQZXJzb24gcCA9IGVtLmZpbmQoUGVyc29uLmNsYXNzLCBuYW1lKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiRmluZCBwZXJzaW9uICIgKyBwKTsKICAgICAgICAgcmV0dXJuIHA7CiAgICAgfQotICAgIAorCiAgICAgQEluaXQKICAgICBwdWJsaWMgdm9pZCBjcmVhdGVGaW5kZXIoKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy9leHRlbmRlZHNjb3BlX2Nyb3NzX3Nmc2IvZWpiL1RDMVNmc2JXaXRoVW5zeW5jaFBDLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy9leHRlbmRlZHNjb3BlX2Nyb3NzX3Nmc2IvZWpiL1RDMVNmc2JXaXRoVW5zeW5jaFBDLmphdmEKaW5kZXggNmM0OGM5MC4uZmNhMWNhNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvZXh0ZW5kZWRzY29wZV9jcm9zc19zZnNiL2VqYi9UQzFTZnNiV2l0aFVuc3luY2hQQy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL2V4dGVuZGVkc2NvcGVfY3Jvc3Nfc2ZzYi9lamIvVEMxU2ZzYldpdGhVbnN5bmNoUEMuamF2YQpAQCAtMzAsMTAgKzMwLDEwIEBACiAgICAgICAgICAgICBzeW5jaHJvbml6YXRpb24gPSBTeW5jaHJvbml6YXRpb25UeXBlLlVOU1lOQ0hST05JWkVELAogICAgICAgICAgICAgdHlwZSA9IFBlcnNpc3RlbmNlQ29udGV4dFR5cGUuRVhURU5ERUQpCiAgICAgRW50aXR5TWFuYWdlciBlbTsKLSAgICAKKwogICAgIEBFSkIgcHJpdmF0ZSBUQzFGaW5kZXJIb21lIGZpbmRlckhvbWU7CiAgICAgcHJpdmF0ZSBUQzFGaW5kZXIgZmluZGVyTG9jYWxPYmplY3Q7Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBkb1Rlc3QoKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAvLyBTaG91bGQgdGhyb3cgRUpCRXhjZXB0aW9uIGhlcmUKQEAgLTUxLDYgKzUxLDYgQEAKICAgICAgICAgICAgIC8vIFVuZXhwZWN0ZWQgZXhjZXB0aW9uCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy9leHRlbmRlZHNjb3BlX2Nyb3NzX3Nmc2IvZWpiL1RDMlNmc2JXaXRoU3luY2hQQy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvZXh0ZW5kZWRzY29wZV9jcm9zc19zZnNiL2VqYi9UQzJTZnNiV2l0aFN5bmNoUEMuamF2YQppbmRleCA5NjI4MDY1Li5hYmUyZWQ3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy9leHRlbmRlZHNjb3BlX2Nyb3NzX3Nmc2IvZWpiL1RDMlNmc2JXaXRoU3luY2hQQy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL2V4dGVuZGVkc2NvcGVfY3Jvc3Nfc2ZzYi9lamIvVEMyU2ZzYldpdGhTeW5jaFBDLmphdmEKQEAgLTMwLDEwICszMCwxMCBAQAogICAgICAgICAgICAgc3luY2hyb25pemF0aW9uID0gU3luY2hyb25pemF0aW9uVHlwZS5TWU5DSFJPTklaRUQsCiAgICAgICAgICAgICB0eXBlID0gUGVyc2lzdGVuY2VDb250ZXh0VHlwZS5FWFRFTkRFRCkKICAgICBFbnRpdHlNYW5hZ2VyIGVtOwotICAgIAorCiAgICAgQEVKQiBwcml2YXRlIFRDMkZpbmRlckhvbWUgZmluZGVySG9tZTsKICAgICBwcml2YXRlIFRDMkZpbmRlciBmaW5kZXJMb2NhbE9iamVjdDsKLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGRvVGVzdCgpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIC8vIFNob3VsZCB0aHJvdyBFSkJFeGNlcHRpb24gaGVyZQpAQCAtNTEsNiArNTEsNiBAQAogICAgICAgICAgICAgLy8gVW5leHBlY3RlZCBleGNlcHRpb24KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL2V4dGVuZGVkc2NvcGVfY3Jvc3Nfc2ZzYi9lamIvVEMyU2ZzYldpdGhVbnN5bmNoUEMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL2V4dGVuZGVkc2NvcGVfY3Jvc3Nfc2ZzYi9lamIvVEMyU2ZzYldpdGhVbnN5bmNoUEMuamF2YQppbmRleCAwNWRlY2I0Li4zMTM2ZmIxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy9leHRlbmRlZHNjb3BlX2Nyb3NzX3Nmc2IvZWpiL1RDMlNmc2JXaXRoVW5zeW5jaFBDLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvZXh0ZW5kZWRzY29wZV9jcm9zc19zZnNiL2VqYi9UQzJTZnNiV2l0aFVuc3luY2hQQy5qYXZhCkBAIC0zMSwxNiArMzEsMTYgQEAKICAgICAgICAgICAgIHN5bmNocm9uaXphdGlvbiA9IFN5bmNocm9uaXphdGlvblR5cGUuVU5TWU5DSFJPTklaRUQsCiAgICAgICAgICAgICB0eXBlID0gUGVyc2lzdGVuY2VDb250ZXh0VHlwZS5FWFRFTkRFRCkKICAgICBFbnRpdHlNYW5hZ2VyIGVtOwotICAgIAorCiAgICAgLy9AT3ZlcnJpZGUKICAgICBwdWJsaWMgUGVyc29uIGZpbmRQZXJzb24oU3RyaW5nIG5hbWUpIHsKICAgICAgICAgUGVyc29uIHAgPSBlbS5maW5kKFBlcnNvbi5jbGFzcywgbmFtZSk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIkZpbmQgcGVyc2lvbiAiICsgcCk7CiAgICAgICAgIHJldHVybiBwOwogICAgIH0KLSAgICAKKwogICAgIEBJbml0CiAgICAgcHVibGljIHZvaWQgY3JlYXRlRmluZGVyKCkgewotICAgICAgICAKKwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3JvbGxiYWNrX25vdGNsZWFyX3Vuc3luY2hQQy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvcm9sbGJhY2tfbm90Y2xlYXJfdW5zeW5jaFBDL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMTBiYjJlZS4uMjczMTAxZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvcm9sbGJhY2tfbm90Y2xlYXJfdW5zeW5jaFBDL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvcm9sbGJhY2tfbm90Y2xlYXJfdW5zeW5jaFBDL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InVuc3luY2hwY19yb2xsYmFja19ub3RjbGVhcl91bnN5bmNoUEMiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy9yb2xsYmFja19ub3RjbGVhcl91bnN5bmNoUEMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvcm9sbGJhY2tfbm90Y2xlYXJfdW5zeW5jaFBDL2J1aWxkLnhtbAppbmRleCAxYWQzMGZiLi43MjAxYzE3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy9yb2xsYmFja19ub3RjbGVhcl91bnN5bmNoUEMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3JvbGxiYWNrX25vdGNsZWFyX3Vuc3luY2hQQy9idWlsZC54bWwKQEAgLTQ2LDE3ICs0NiwxNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfS9saWIiLz4KLSAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9L2xpYi8ke2FwcG5hbWV9LWxpYi5qYXIiIAorICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vbGliLyR7YXBwbmFtZX0tbGliLmphciIKICAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgICBpbmNsdWRlcz0iKiovUGVyc29uLmNsYXNzIj4KLSAgICAgICAgPC9qYXI+ICAgICAgICAKKyAgICAgICAgPC9qYXI+CiAgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS9saWIvJHthcHBuYW1lfS1wYXIuamFyIj4KICAgICAgICAgICAgICA8bWV0YWluZiBmaWxlPSJkZXNjcmlwdG9yL3BlcnNpc3RlbmNlLnhtbCIvPgogICAgICAgICA8L2phcj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQmVhbi5jbGFzcywqKi9UZXN0ZXIuY2xhc3MiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9DbGllbnQuY2xhc3MsKiovVGVzdGVyLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIiB1cGRhdGU9InllcyIKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3JvbGxiYWNrX25vdGNsZWFyX3Vuc3luY2hQQy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy9yb2xsYmFja19ub3RjbGVhcl91bnN5bmNoUEMvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDBhZjRjZmYuLmM1ZmQyYTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3JvbGxiYWNrX25vdGNsZWFyX3Vuc3luY2hQQy9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvcm9sbGJhY2tfbm90Y2xlYXJfdW5zeW5jaFBDL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzcsNyArMzcsNyBAQAogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkkgYW0gaW4gY2xpZW50Iik7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiVGVzdFVuc3luY2hQQ0lzQ0xlYXJlZEFmdGVyUm9sbGJhY2siLCBzbGVzc0JlYW4uZG9UZXN0KCkgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvcm9sbGJhY2tfbm90Y2xlYXJfdW5zeW5jaFBDL2VqYi9QZXJzb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3JvbGxiYWNrX25vdGNsZWFyX3Vuc3luY2hQQy9lamIvUGVyc29uLmphdmEKaW5kZXggNDljZWNjMy4uY2ExMmRlMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvcm9sbGJhY2tfbm90Y2xlYXJfdW5zeW5jaFBDL2VqYi9QZXJzb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy9yb2xsYmFja19ub3RjbGVhcl91bnN5bmNoUEMvZWpiL1BlcnNvbi5qYXZhCkBAIC0zNiwxMSArMzYsMTEgQEAKICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgICAgICByZXR1cm4gIlBlcnNvbjogeyIgKyAiKG5hbWUgPSAiICsgbmFtZSArICIpfSI7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewogICAgICAgICByZXR1cm4gbmFtZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvcm9sbGJhY2tfbm90Y2xlYXJfdW5zeW5jaFBDL2VqYi9TbGVzc0JlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3JvbGxiYWNrX25vdGNsZWFyX3Vuc3luY2hQQy9lamIvU2xlc3NCZWFuLmphdmEKaW5kZXggMTM4ZDFjYi4uZmNhZGFlZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvcm9sbGJhY2tfbm90Y2xlYXJfdW5zeW5jaFBDL2VqYi9TbGVzc0JlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy9yb2xsYmFja19ub3RjbGVhcl91bnN5bmNoUEMvZWpiL1NsZXNzQmVhbi5qYXZhCkBAIC0zMCwyNiArMzAsMjYgQEAKICAgICBAUGVyc2lzdGVuY2VDb250ZXh0KHVuaXROYW1lPSJsaWIvdW5zeW5jaHBjX3JvbGxiYWNrX25vdGNsZWFyX3Vuc3luY2hQQy1wYXIuamFyI2VtIiwKICAgICAgICAgICAgIHN5bmNocm9uaXphdGlvbj1TeW5jaHJvbml6YXRpb25UeXBlLlVOU1lOQ0hST05JWkVEKQogICAgIEVudGl0eU1hbmFnZXIgZW07Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgYm9vbGVhbiBkb1Rlc3QoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSSBhbSBpbiBTbGVzc0JlYW4uZG9UZXN0Iik7Ci0gICAgICAgIAorCiAgICAgICAgIFVzZXJUcmFuc2FjdGlvbiB1dHggPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgdXR4ID0gKFVzZXJUcmFuc2FjdGlvbikobmV3IGphdmF4Lm5hbWluZy5Jbml0aWFsQ29udGV4dCgpKS5sb29rdXAoImphdmE6Y29tcC9Vc2VyVHJhbnNhY3Rpb24iKTsKICAgICAgICAgICAgIHV0eC5iZWdpbigpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFBlcnNvbiBwZXJzb24gPSBuZXcgUGVyc29uKCJUb20iKTsKICAgICAgICAgICAgIGVtLnBlcnNpc3QocGVyc29uKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvL0xldCB1bnN5bmNocm9uaXplZCBQQyBqb2luIHRoZSB0cmFuc2FjdGlvbjsKICAgICAgICAgICAgIGVtLmpvaW5UcmFuc2FjdGlvbigpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRG9lcyBQQyBjb250YWluIHBlcnNvbiBiZWZvcmUgcm9sbGJhY2s6ICIgKyBlbS5jb250YWlucyhwZXJzb24pKTsKICAgICAgICAgICAgIHV0eC5yb2xsYmFjaygpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEb2VzIFBDIGNvbnRhaW4gcGVyc29uIGFmdGVyIHJvbGxiYWNrOiAiICsgZW0uY29udGFpbnMocGVyc29uKSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgcmV0dXJuICEoZW0uY29udGFpbnMocGVyc29uKSk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvdHhzY29wZV9zeW5jdHlwZV9taXNtYXRjaC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvdHhzY29wZV9zeW5jdHlwZV9taXNtYXRjaC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDViZTYzOTkuLmQ4YmFjNjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3R4c2NvcGVfc3luY3R5cGVfbWlzbWF0Y2gvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy90eHNjb3BlX3N5bmN0eXBlX21pc21hdGNoL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InVuc3luY3BjX3R4c2NvcGVfc3luY3R5cGVfbWlzbWF0Y2giLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy90eHNjb3BlX3N5bmN0eXBlX21pc21hdGNoL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3R4c2NvcGVfc3luY3R5cGVfbWlzbWF0Y2gvYnVpbGQueG1sCmluZGV4IDEyOTZjNjkuLjA0ZWY5OGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3R4c2NvcGVfc3luY3R5cGVfbWlzbWF0Y2gvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3R4c2NvcGVfc3luY3R5cGVfbWlzbWF0Y2gvYnVpbGQueG1sCkBAIC00NiwxNyArNDYsMTcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0vbGliIi8+Ci0gICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS9saWIvJHthcHBuYW1lfS1saWIuamFyIiAKKyAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9L2xpYi8ke2FwcG5hbWV9LWxpYi5qYXIiCiAgICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICAgaW5jbHVkZXM9IioqL1BlcnNvbi5jbGFzcyI+Ci0gICAgICAgIDwvamFyPiAgICAgICAgCisgICAgICAgIDwvamFyPgogICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vbGliLyR7YXBwbmFtZX0tcGFyLmphciI+CiAgICAgICAgICAgICAgPG1ldGFpbmYgZmlsZT0iZGVzY3JpcHRvci9wZXJzaXN0ZW5jZS54bWwiLz4KICAgICAgICAgPC9qYXI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovRmluZGVyLmNsYXNzLCoqLyp5bmNoUEMqLmNsYXNzLCoqL1Rlc3Rlci5jbGFzcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0NsaWVudC5jbGFzcywqKi9UZXN0ZXIuY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiIHVwZGF0ZT0ieWVzIgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvdHhzY29wZV9zeW5jdHlwZV9taXNtYXRjaC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy90eHNjb3BlX3N5bmN0eXBlX21pc21hdGNoL2NsaWVudC9DbGllbnQuamF2YQppbmRleCAwY2MzYmU5Li44MmRjMzVmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy90eHNjb3BlX3N5bmN0eXBlX21pc21hdGNoL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy90eHNjb3BlX3N5bmN0eXBlX21pc21hdGNoL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjcsMTMgKzI3LDEzIEBACiAgICAgICAgICAgICAiYXBwc2Vydi10ZXN0cyIpOwogICAgIEBFSkIoYmVhbk5hbWUgPSAiVEMxU2ZzYldpdGhVbnN5bmNoUEMiKQogICAgIHByaXZhdGUgc3RhdGljIFRlc3RlciB0QzFTZnNiV2l0aFVuc3luY2hQQzsKLSAgICAKKwogICAgIEBFSkIoYmVhbk5hbWUgPSAiVEMyU2xzYldpdGhVbnN5bmNoUEMiKQogICAgIHByaXZhdGUgc3RhdGljIFRlc3RlciB0QzJTbHNiV2l0aFVuc3luY2hQQzsKLSAgICAKKwogICAgIEBFSkIoYmVhbk5hbWUgPSAiVEMzU2xzYldpdGhTeW5jaFBDIikKICAgICBwcml2YXRlIHN0YXRpYyBUZXN0ZXIgdEMzU2xzYldpdGhTeW5jaFBDOwotICAgIAorCiAgICAgQEVKQihiZWFuTmFtZSA9ICJUQzRTbHNiV2l0aFN5bmNoUEMiKQogICAgIHByaXZhdGUgc3RhdGljIFRlc3RlciB0QzRTbHNiV2l0aFN5bmNoUEM7CiAKQEAgLTQ3LDE5ICs0NywxOSBAQAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSSBhbSBpbiBjbGllbnQiKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxpbmcgdEMxX1NGU0JXaXRoVW5zeW5jaFBDLmRvVGVzdCIpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIlRlc3RDYXNlMV9zZnNiV2l0aFVuc3luY1BDSW52b2tlU2xzYldpdGhTeW5jaFBDIiwgdEMxU2ZzYldpdGhVbnN5bmNoUEMuZG9UZXN0KCkgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbGluZyB0QzJfU0xTQldpdGhVbnN5bmNoUEMuZG9UZXN0Iik7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiVGVzdENhc2UyX3Nsc2JXaXRoVW5zeW5jUENJbnZva2VTbHNiV2l0aFN5bmNoUEMiLCB0QzJTbHNiV2l0aFVuc3luY2hQQy5kb1Rlc3QoKSA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYWxsaW5nIHRDM19TTFNCV2l0aFN5bmNoUEMuZG9UZXN0Iik7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiVGVzdENhc2UzX3Nsc2JXaXRoU3luY1BDSW52b2tlU2xzYldpdGhVbnN5bmNoUEMiLCB0QzNTbHNiV2l0aFN5bmNoUEMuZG9UZXN0KCkgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbGluZyB0QzRfU0xTQldpdGhTeW5jaFBDLmRvVGVzdCIpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIlRlc3RDYXNlNF9zbHNiV2l0aFN5bmNQQ0ludm9rZVNmc2JXaXRoVW5zeW5jaFBDIiwgdEM0U2xzYldpdGhTeW5jaFBDLmRvVGVzdCgpID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRvVGVzdCBtZXRob2QgZW5kcyIpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3R4c2NvcGVfc3luY3R5cGVfbWlzbWF0Y2gvZWpiL1RDMVNmc2JXaXRoVW5zeW5jaFBDLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy90eHNjb3BlX3N5bmN0eXBlX21pc21hdGNoL2VqYi9UQzFTZnNiV2l0aFVuc3luY2hQQy5qYXZhCmluZGV4IGNjZTI1MDQuLjg0YTMzNzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3R4c2NvcGVfc3luY3R5cGVfbWlzbWF0Y2gvZWpiL1RDMVNmc2JXaXRoVW5zeW5jaFBDLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvdHhzY29wZV9zeW5jdHlwZV9taXNtYXRjaC9lamIvVEMxU2ZzYldpdGhVbnN5bmNoUEMuamF2YQpAQCAtMjksMTcgKzI5LDE3IEBACiAgICAgQFBlcnNpc3RlbmNlQ29udGV4dCh1bml0TmFtZT0ibGliL3Vuc3luY3BjX3R4c2NvcGVfc3luY3R5cGVfbWlzbWF0Y2gtcGFyLmphciNlbSIsCiAgICAgICAgICAgICBzeW5jaHJvbml6YXRpb24gPSBTeW5jaHJvbml6YXRpb25UeXBlLlVOU1lOQ0hST05JWkVEKQogICAgIEVudGl0eU1hbmFnZXIgZW07Ci0gICAgCisKICAgICBARUpCKGJlYW5OYW1lID0gIlNsc2JXaXRoU3luY2hQQyIpCiAgICAgRmluZGVyIGZpbmRlcjsKIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBib29sZWFuIGRvVGVzdCgpIHsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIC8vRklYTUU6IGEgd29ya2Fyb3VuZCB0byBpbml0aWF0ZSBKYXZhRUVUcmFuc2FjdGlvbkltcGwudHhFbnRpdHlNYW5hZ2VyTWFwLCAKKyAgICAgICAgICAgIC8vRklYTUU6IGEgd29ya2Fyb3VuZCB0byBpbml0aWF0ZSBKYXZhRUVUcmFuc2FjdGlvbkltcGwudHhFbnRpdHlNYW5hZ2VyTWFwLAogICAgICAgICAgICAgLy9zbyB0aGF0IHRoZSBjdXJyZW50IFBDIHdpbGwgYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50IFRYLgogICAgICAgICAgICAgZW0uZmluZChQZXJzb24uY2xhc3MsICJUb20iKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkkgYW0gaW4gVEMxU2ZzYldpdGhVbnN5bmNoUEMuZG9UZXN0Iik7CiAgICAgICAgICAgICAvL2V4cGVjdCBleGNlcHRpb24gdGhyb3duIGZyb20gZmluZGVyLmZpbmRQZXJzb24KICAgICAgICAgICAgIGZpbmRlci5maW5kUGVyc29uKCJUb20iKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3R4c2NvcGVfc3luY3R5cGVfbWlzbWF0Y2gvZWpiL1RDMlNsc2JXaXRoVW5zeW5jaFBDLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy90eHNjb3BlX3N5bmN0eXBlX21pc21hdGNoL2VqYi9UQzJTbHNiV2l0aFVuc3luY2hQQy5qYXZhCmluZGV4IDVkODQ0ZGYuLjcyMGMwZjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3R4c2NvcGVfc3luY3R5cGVfbWlzbWF0Y2gvZWpiL1RDMlNsc2JXaXRoVW5zeW5jaFBDLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvdHhzY29wZV9zeW5jdHlwZV9taXNtYXRjaC9lamIvVEMyU2xzYldpdGhVbnN5bmNoUEMuamF2YQpAQCAtMjksMTcgKzI5LDE3IEBACiAgICAgQFBlcnNpc3RlbmNlQ29udGV4dCh1bml0TmFtZT0ibGliL3Vuc3luY3BjX3R4c2NvcGVfc3luY3R5cGVfbWlzbWF0Y2gtcGFyLmphciNlbSIsCiAgICAgICAgICAgICBzeW5jaHJvbml6YXRpb24gPSBTeW5jaHJvbml6YXRpb25UeXBlLlVOU1lOQ0hST05JWkVEKQogICAgIEVudGl0eU1hbmFnZXIgZW07Ci0gICAgCi0gICAgQEVKQihiZWFuTmFtZSA9ICJTbHNiV2l0aFN5bmNoUEMiKSAKKworICAgIEBFSkIoYmVhbk5hbWUgPSAiU2xzYldpdGhTeW5jaFBDIikKICAgICBGaW5kZXIgZmluZGVyOwotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGJvb2xlYW4gZG9UZXN0KCkgewogICAgICAgICB0cnkgewotICAgICAgICAgICAgLy9GSVhNRTogYSB3b3JrYXJvdW5kIHRvIGluaXRpYXRlIEphdmFFRVRyYW5zYWN0aW9uSW1wbC50eEVudGl0eU1hbmFnZXJNYXAsIAorICAgICAgICAgICAgLy9GSVhNRTogYSB3b3JrYXJvdW5kIHRvIGluaXRpYXRlIEphdmFFRVRyYW5zYWN0aW9uSW1wbC50eEVudGl0eU1hbmFnZXJNYXAsCiAgICAgICAgICAgICAvL3NvIHRoYXQgdGhlIGN1cnJlbnQgUEMgd2lsbCBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIGN1cnJlbnQgVFguCiAgICAgICAgICAgICBlbS5maW5kKFBlcnNvbi5jbGFzcywgIlRvbSIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSSBhbSBpbiBUQzJTbHNiV2l0aFVuc3luY2hQQy5kb1Rlc3QiKTsKICAgICAgICAgICAgIC8vZXhwZWN0IGV4Y2VwdGlvbiB0aHJvd24gZnJvbSBmaW5kZXIuZmluZFBlcnNvbgogICAgICAgICAgICAgZmluZGVyLmZpbmRQZXJzb24oIlRvbSIpOwpAQCAtNTYsNiArNTYsNiBAQAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3R4c2NvcGVfc3luY3R5cGVfbWlzbWF0Y2gvZWpiL1RDM1Nsc2JXaXRoU3luY2hQQy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvdHhzY29wZV9zeW5jdHlwZV9taXNtYXRjaC9lamIvVEMzU2xzYldpdGhTeW5jaFBDLmphdmEKaW5kZXggM2E3NGUxZS4uZDQxOWY1OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvdHhzY29wZV9zeW5jdHlwZV9taXNtYXRjaC9lamIvVEMzU2xzYldpdGhTeW5jaFBDLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvdHhzY29wZV9zeW5jdHlwZV9taXNtYXRjaC9lamIvVEMzU2xzYldpdGhTeW5jaFBDLmphdmEKQEAgLTI0LDE0ICsyNCwxNCBAQAogCiBAU3RhdGVsZXNzCiBwdWJsaWMgY2xhc3MgVEMzU2xzYldpdGhTeW5jaFBDIGltcGxlbWVudHMgVGVzdGVyewotICAgIAorCiAgICAgQFBlcnNpc3RlbmNlQ29udGV4dCh1bml0TmFtZT0ibGliL3Vuc3luY3BjX3R4c2NvcGVfc3luY3R5cGVfbWlzbWF0Y2gtcGFyLmphciNlbSIsCiAgICAgICAgICAgICBzeW5jaHJvbml6YXRpb24gPSBTeW5jaHJvbml6YXRpb25UeXBlLlNZTkNIUk9OSVpFRCkKICAgICBFbnRpdHlNYW5hZ2VyIGVtOwotICAgIAotICAgIEBFSkIoYmVhbk5hbWUgPSAiVEMzU2xzYldpdGhVblN5bmNoUEMiKSAKKworICAgIEBFSkIoYmVhbk5hbWUgPSAiVEMzU2xzYldpdGhVblN5bmNoUEMiKQogICAgIEZpbmRlciBmaW5kZXI7Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgYm9vbGVhbiBkb1Rlc3QoKSB7CiAgICAgICAgIHRyeSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy90eHNjb3BlX3N5bmN0eXBlX21pc21hdGNoL2VqYi9UQzNTbHNiV2l0aFVuU3luY2hQQy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvdHhzY29wZV9zeW5jdHlwZV9taXNtYXRjaC9lamIvVEMzU2xzYldpdGhVblN5bmNoUEMuamF2YQppbmRleCA5MDg1NDgxLi40MjU0ZGRmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy90eHNjb3BlX3N5bmN0eXBlX21pc21hdGNoL2VqYi9UQzNTbHNiV2l0aFVuU3luY2hQQy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3R4c2NvcGVfc3luY3R5cGVfbWlzbWF0Y2gvZWpiL1RDM1Nsc2JXaXRoVW5TeW5jaFBDLmphdmEKQEAgLTIzLDcgKzIzLDcgQEAKIAogQFN0YXRlbGVzcwogcHVibGljIGNsYXNzIFRDM1Nsc2JXaXRoVW5TeW5jaFBDIGltcGxlbWVudHMgRmluZGVyewotICAgIAorCiAgICAgQFBlcnNpc3RlbmNlQ29udGV4dCh1bml0TmFtZT0ibGliL3Vuc3luY3BjX3R4c2NvcGVfc3luY3R5cGVfbWlzbWF0Y2gtcGFyLmphciNlbSIsCiAgICAgICAgICAgICBzeW5jaHJvbml6YXRpb24gPSBTeW5jaHJvbml6YXRpb25UeXBlLlVOU1lOQ0hST05JWkVEKQogICAgIEVudGl0eU1hbmFnZXIgZW07CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy90eHNjb3BlX3N5bmN0eXBlX21pc21hdGNoL2VqYi9UQzRTZnNiV2l0aFVuc3luY2hQQy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvdHhzY29wZV9zeW5jdHlwZV9taXNtYXRjaC9lamIvVEM0U2ZzYldpdGhVbnN5bmNoUEMuamF2YQppbmRleCAyMDg0ZDdkLi4yOWQwNGMyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy90eHNjb3BlX3N5bmN0eXBlX21pc21hdGNoL2VqYi9UQzRTZnNiV2l0aFVuc3luY2hQQy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3R4c2NvcGVfc3luY3R5cGVfbWlzbWF0Y2gvZWpiL1RDNFNmc2JXaXRoVW5zeW5jaFBDLmphdmEKQEAgLTIzLDcgKzIzLDcgQEAKIAogQFN0YXRlZnVsCiBwdWJsaWMgY2xhc3MgVEM0U2ZzYldpdGhVbnN5bmNoUEMgaW1wbGVtZW50cyBGaW5kZXJ7Ci0gICAgCisKICAgICBAUGVyc2lzdGVuY2VDb250ZXh0KHVuaXROYW1lPSJsaWIvdW5zeW5jcGNfdHhzY29wZV9zeW5jdHlwZV9taXNtYXRjaC1wYXIuamFyI2VtIiwKICAgICAgICAgICAgIHN5bmNocm9uaXphdGlvbiA9IFN5bmNocm9uaXphdGlvblR5cGUuVU5TWU5DSFJPTklaRUQpCiAgICAgRW50aXR5TWFuYWdlciBlbTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3R4c2NvcGVfc3luY3R5cGVfbWlzbWF0Y2gvZWpiL1RDNFNsc2JXaXRoU3luY2hQQy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvdHhzY29wZV9zeW5jdHlwZV9taXNtYXRjaC9lamIvVEM0U2xzYldpdGhTeW5jaFBDLmphdmEKaW5kZXggZDUwYzcwZC4uMzI2NTA3ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvdHhzY29wZV9zeW5jdHlwZV9taXNtYXRjaC9lamIvVEM0U2xzYldpdGhTeW5jaFBDLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvdHhzY29wZV9zeW5jdHlwZV9taXNtYXRjaC9lamIvVEM0U2xzYldpdGhTeW5jaFBDLmphdmEKQEAgLTI4LDEwICsyOCwxMCBAQAogICAgIEBQZXJzaXN0ZW5jZUNvbnRleHQodW5pdE5hbWU9ImxpYi91bnN5bmNwY190eHNjb3BlX3N5bmN0eXBlX21pc21hdGNoLXBhci5qYXIjZW0iLAogICAgICAgICAgICAgc3luY2hyb25pemF0aW9uID0gU3luY2hyb25pemF0aW9uVHlwZS5TWU5DSFJPTklaRUQpCiAgICAgRW50aXR5TWFuYWdlciBlbTsKLSAgICAKKwogICAgIEBFSkIoYmVhbk5hbWUgPSAiVEM0U2ZzYldpdGhVbnN5bmNoUEMiKQogICAgIEZpbmRlciBmaW5kZXI7Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgYm9vbGVhbiBkb1Rlc3QoKSB7CiAgICAgICAgIHRyeSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy91bnN5bmNocGNfZmx1c2gvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3Vuc3luY2hwY19mbHVzaC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDgwZDA5NDguLjQyMjE2M2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3Vuc3luY2hwY19mbHVzaC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3Vuc3luY2hwY19mbHVzaC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ1bnN5bmNocGNfZmx1c2giLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy91bnN5bmNocGNfZmx1c2gvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvdW5zeW5jaHBjX2ZsdXNoL2J1aWxkLnhtbAppbmRleCA3N2UyODhjLi4wNWJlNzZmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy91bnN5bmNocGNfZmx1c2gvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3Vuc3luY2hwY19mbHVzaC9idWlsZC54bWwKQEAgLTQ2LDE3ICs0NiwxNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfS9saWIiLz4KLSAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9L2xpYi8ke2FwcG5hbWV9LWxpYi5qYXIiIAorICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vbGliLyR7YXBwbmFtZX0tbGliLmphciIKICAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgICBpbmNsdWRlcz0iKiovUGVyc29uLmNsYXNzIj4KLSAgICAgICAgPC9qYXI+ICAgICAgICAKKyAgICAgICAgPC9qYXI+CiAgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS9saWIvJHthcHBuYW1lfS1wYXIuamFyIj4KICAgICAgICAgICAgICA8bWV0YWluZiBmaWxlPSJkZXNjcmlwdG9yL3BlcnNpc3RlbmNlLnhtbCIvPgogICAgICAgICA8L2phcj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qeW5jaFBDKi5jbGFzcywqKi9UZXN0ZXIuY2xhc3MiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9DbGllbnQuY2xhc3MsKiovVGVzdGVyLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIiB1cGRhdGU9InllcyIKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3Vuc3luY2hwY19mbHVzaC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy91bnN5bmNocGNfZmx1c2gvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDZlZDlmZjguLjIwMDY2OWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3Vuc3luY2hwY19mbHVzaC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvdW5zeW5jaHBjX2ZsdXNoL2NsaWVudC9DbGllbnQuamF2YQpAQCAtNDAsMjIgKzQwLDIyIEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkkgYW0gaW4gY2xpZW50Iik7CiAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbGluZyBTTFNCV2l0aFVuc3luY2hQQy5mbHVzaEJlZm9yZUpvaW4iKTsKLSAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJGbHVzaFVuc3luY1BDQmVmb3JlSm9pbiIsIHNMU0JXaXRoVW5zeW5jaFBDLmZsdXNoQmVmb3JlSm9pbigpID8gCisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiRmx1c2hVbnN5bmNQQ0JlZm9yZUpvaW4iLCBzTFNCV2l0aFVuc3luY2hQQy5mbHVzaEJlZm9yZUpvaW4oKSA/CiAgICAgICAgICAgICAgICAgICAgIHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYWxsaW5nIFNMU0JXaXRoVW5zeW5jaFBDLmZsdXNoQWZ0ZXJKb2luIik7Ci0gICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiRmx1c2hVbnN5bmNQQ0FmdGVySm9pbiIsIHNMU0JXaXRoVW5zeW5jaFBDLmZsdXNoQWZ0ZXJKb2luKCkgPyAKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJGbHVzaFVuc3luY1BDQWZ0ZXJKb2luIiwgc0xTQldpdGhVbnN5bmNoUEMuZmx1c2hBZnRlckpvaW4oKSA/CiAgICAgICAgICAgICAgICAgICBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvKiBTUEVDOiBJZiB0aGUgZmx1c2ggbWV0aG9kIGlzIG5vdCBleHBsaWNpdGx5IGludm9rZWQsIHRoZSBwZXJzaXN0ZW5jZSBwcm92aWRlciAKLSAgICAgICAgICAgICAqIG1heSBkZWZlciBmbHVzaGluZyB1bnRpbCBjb21taXQgdGltZSBkZXBlbmRpbmcgb24gdGhlIG9wZXJhdGlvbnMgaW52b2tlZCBhbmQgCisKKyAgICAgICAgICAgIC8qIFNQRUM6IElmIHRoZSBmbHVzaCBtZXRob2QgaXMgbm90IGV4cGxpY2l0bHkgaW52b2tlZCwgdGhlIHBlcnNpc3RlbmNlIHByb3ZpZGVyCisgICAgICAgICAgICAgKiBtYXkgZGVmZXIgZmx1c2hpbmcgdW50aWwgY29tbWl0IHRpbWUgZGVwZW5kaW5nIG9uIHRoZSBvcGVyYXRpb25zIGludm9rZWQgYW5kCiAgICAgICAgICAgICAgKiB0aGUgZmx1c2ggbW9kZSBzZXR0aW5nIGluIGVmZmVjdC4KICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYWxsaW5nIFNMU0JXaXRoVW5zeW5jaFBDLkF1dG9GbHVzaEJ5UHJvdmlkZXIiKTsKICAgICAgICAgICAgIHNMU0JXaXRoVW5zeW5jaFBDLmF1dG9GbHVzaEJ5UHJvdmlkZXIoIlRvbTMiKTsKLSAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJBdXRvRmx1c2hCeVByb3ZpZGVyIiwgc0xTQldpdGhVbnN5bmNoUEMuaXNQZXJzb25Gb3VuZCgiVG9tMyIpID8gCisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiQXV0b0ZsdXNoQnlQcm92aWRlciIsIHNMU0JXaXRoVW5zeW5jaFBDLmlzUGVyc29uRm91bmQoIlRvbTMiKSA/CiAgICAgICAgICAgICAgICAgICAgIHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEb1Rlc3QgbWV0aG9kIGVuZHMiKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy91bnN5bmNocGNfZmx1c2gvZWpiL1NMU0JXaXRoVW5zeW5jaFBDLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy91bnN5bmNocGNfZmx1c2gvZWpiL1NMU0JXaXRoVW5zeW5jaFBDLmphdmEKaW5kZXggYjgwY2MzYy4uZWI1MGU4OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvdW5zeW5jaHBjX2ZsdXNoL2VqYi9TTFNCV2l0aFVuc3luY2hQQy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3Vuc3luY2hwY19mbHVzaC9lamIvU0xTQldpdGhVbnN5bmNoUEMuamF2YQpAQCAtMzIsMTAgKzMyLDEwIEBACiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGJvb2xlYW4gZmx1c2hCZWZvcmVKb2luKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkkgYW0gaW4gZmx1c2hCZWZvcmVKb2luIik7Ci0gICAgICAgIAorCiAgICAgICAgIFBlcnNvbiBwID0gbmV3IFBlcnNvbigiVG9tIik7CiAgICAgICAgIGVtLnBlcnNpc3QocCk7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlzIGpvbmluZWQgYmVmb3JlIGZsdXNoOiAiICsgZW0uaXNKb2luZWRUb1RyYW5zYWN0aW9uKCkpOwogICAgICAgICAgICAgLy9mbHVzaCBiZWZvcmUgdGhlIHVuc3luY2hyb25pemVkIFBDIGpvaW4gdHJhbnNhY3Rpb24KQEAgLTQzLDcgKzQzLDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZmx1c2hlZCB3aXRoIG5vIGV4Y2VwdGlvbnMgdGhyb3duIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0gY2F0Y2ggKFRyYW5zYWN0aW9uUmVxdWlyZWRFeGNlcHRpb24gdHJlKSB7Ci0gICAgICAgICAgICAvKiBTUEVDOiBBIHBlcnNpc3RlbmNlIGNvbnRleHQgb2YgdHlwZSBTeW5jaHJvbml6YXRpb25UeXBlLlVOU1lOQ0hST05JWkVEIG11c3QgCisgICAgICAgICAgICAvKiBTUEVDOiBBIHBlcnNpc3RlbmNlIGNvbnRleHQgb2YgdHlwZSBTeW5jaHJvbml6YXRpb25UeXBlLlVOU1lOQ0hST05JWkVEIG11c3QKICAgICAgICAgICAgICAqIG5vdCBiZSBmbHVzaGVkIHRvIHRoZSBkYXRhYmFzZSB1bmxlc3MgaXQgaXMgam9pbmVkIHRvIGEgdHJhbnNhY3Rpb24KICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgLy9FeHBlY3RlZCBleGNlcHRpb24gdGhyb3duCkBAIC01NCw3ICs1NCw3IEBACiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgYm9vbGVhbiBmbHVzaEFmdGVySm9pbigpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJIGFtIGluIGZsdXNoQWZ0ZXJKb2luIik7CkBAIC02Nyw4ICs2Nyw4IEBACiAgICAgICAgIGVtLmpvaW5UcmFuc2FjdGlvbigpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpcyBqb25pbmVkIGJlZm9yZSBmbHVzaDogIiArIGVtLmlzSm9pbmVkVG9UcmFuc2FjdGlvbigpKTsKLSAgICAgICAgICAgIC8qIFNQRUM6IEFmdGVyIHRoZSBwZXJzaXN0ZW5jZSBjb250ZXh0IGhhcyBiZWVuIGpvaW5lZCB0byBhIHRyYW5zYWN0aW9uLCAKLSAgICAgICAgICAgICAqIGNoYW5nZXMgaW4gYSBwZXJzaXN0ZW5jZSBjb250ZXh0IGNhbiBiZSBmbHVzaGVkIHRvIHRoZSBkYXRhYmFzZSBleHBsaWNpdGx5IAorICAgICAgICAgICAgLyogU1BFQzogQWZ0ZXIgdGhlIHBlcnNpc3RlbmNlIGNvbnRleHQgaGFzIGJlZW4gam9pbmVkIHRvIGEgdHJhbnNhY3Rpb24sCisgICAgICAgICAgICAgKiBjaGFuZ2VzIGluIGEgcGVyc2lzdGVuY2UgY29udGV4dCBjYW4gYmUgZmx1c2hlZCB0byB0aGUgZGF0YWJhc2UgZXhwbGljaXRseQogICAgICAgICAgICAgICogYnkgdGhlIGFwcGxpY2F0aW9uCiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIGVtLmZsdXNoKCk7CkBAIC03OSwxOSArNzksMTkgQEAKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIGF1dG9GbHVzaEJ5UHJvdmlkZXIoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJIGFtIGluIGF1dG9GbHVzaEJ5UHJvdmlkZXIiKTsKLSAgICAgICAgCisKICAgICAgICAgUGVyc29uIHAgPSBuZXcgUGVyc29uKG5hbWUpOwogICAgICAgICBlbS5wZXJzaXN0KHApOwotICAgICAgICAKKwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlzIGpvbmluZWQgYmVmb3JlIGpvaW5UcmFuc2FjdGlvbjogIiArIGVtLmlzSm9pbmVkVG9UcmFuc2FjdGlvbigpKTsKICAgICAgICAgLy9Kb2luIHRyYW5zYWN0aW9uCiAgICAgICAgIGVtLmpvaW5UcmFuc2FjdGlvbigpOwogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBib29sZWFuIGlzUGVyc29uRm91bmQoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJIGFtIGluIGlzUGVyc29uRm91bmQiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3Vuc3luY2hwY19mbHVzaC9lamIvVGVzdGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy91bnN5bmNocGNfZmx1c2gvZWpiL1Rlc3Rlci5qYXZhCmluZGV4IGMzYTA0OGIuLjZjNzZjNDcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3Vuc3luY2hwY19mbHVzaC9lamIvVGVzdGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvdW5zeW5jaHBjX2ZsdXNoL2VqYi9UZXN0ZXIuamF2YQpAQCAtMjEsMTAgKzIxLDEwIEBACiBAUmVtb3RlCiBwdWJsaWMgaW50ZXJmYWNlIFRlc3RlciB7CiAgICAgcHVibGljIGJvb2xlYW4gZmx1c2hCZWZvcmVKb2luKCk7Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBmbHVzaEFmdGVySm9pbigpOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgYXV0b0ZsdXNoQnlQcm92aWRlcihTdHJpbmcgbmFtZSk7Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBpc1BlcnNvbkZvdW5kKFN0cmluZyBuYW1lKTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3VzZV9ub25qdGFkYXRhc291cmNlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy91c2Vfbm9uanRhZGF0YXNvdXJjZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDA4ZmJmMmMuLjMyNTNjZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3VzZV9ub25qdGFkYXRhc291cmNlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvdXNlX25vbmp0YWRhdGFzb3VyY2UvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0idW5zeW5jaHBjX3VzZV9ub25qdGFkYXRhc291cmNlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvdXNlX25vbmp0YWRhdGFzb3VyY2UvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvdXNlX25vbmp0YWRhdGFzb3VyY2UvYnVpbGQueG1sCmluZGV4IGM0ZGExODAuLmUyOWE1MDUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3VzZV9ub25qdGFkYXRhc291cmNlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy91c2Vfbm9uanRhZGF0YXNvdXJjZS9idWlsZC54bWwKQEAgLTQ2LDE3ICs0NiwxNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfS9saWIiLz4KLSAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9L2xpYi8ke2FwcG5hbWV9LWxpYi5qYXIiIAorICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vbGliLyR7YXBwbmFtZX0tbGliLmphciIKICAgICAgICAgICAgICBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgICBpbmNsdWRlcz0iKiovUGVyc29uLmNsYXNzIj4KLSAgICAgICAgPC9qYXI+ICAgICAgICAKKyAgICAgICAgPC9qYXI+CiAgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS9saWIvJHthcHBuYW1lfS1wYXIuamFyIj4KICAgICAgICAgICAgICA8bWV0YWluZiBmaWxlPSJkZXNjcmlwdG9yL3BlcnNpc3RlbmNlLnhtbCIvPgogICAgICAgICA8L2phcj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQmVhbi5jbGFzcywqKi9UZXN0ZXIuY2xhc3MiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9DbGllbnQuY2xhc3MsKiovVGVzdGVyLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIiB1cGRhdGU9InllcyIKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3VzZV9ub25qdGFkYXRhc291cmNlL2VqYi9QZXJzb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3VzZV9ub25qdGFkYXRhc291cmNlL2VqYi9QZXJzb24uamF2YQppbmRleCBhYmE2YTM0Li5jNmZlMWVlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy91c2Vfbm9uanRhZGF0YXNvdXJjZS9lamIvUGVyc29uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvdXNlX25vbmp0YWRhdGFzb3VyY2UvZWpiL1BlcnNvbi5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiAKICAgICBASWQKICAgICBwcml2YXRlIGludCBpZDsKLSAgICAKKwogICAgIHByaXZhdGUgU3RyaW5nIG5hbWU7CiAKICAgICBwdWJsaWMgUGVyc29uKCkgewpAQCAtMzgsNyArMzgsNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICAgICAgIHJldHVybiAiUGVyc29uOiB7IiArICIobmFtZSA9ICIgKyBuYW1lICsgIil9IjsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgaW50IGdldElkKCkgewogICAgICAgICByZXR1cm4gdGhpcy5pZDsKICAgICB9CkBAIC00Niw3ICs0Niw3IEBACiAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewogICAgICAgICByZXR1cm4gbmFtZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvdXNlX25vbmp0YWRhdGFzb3VyY2UvZWpiL1NmdWxCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy91c2Vfbm9uanRhZGF0YXNvdXJjZS9lamIvU2Z1bEJlYW4uamF2YQppbmRleCA1YjQ1NWIxLi5iOTJhZTJlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy91c2Vfbm9uanRhZGF0YXNvdXJjZS9lamIvU2Z1bEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy91c2Vfbm9uanRhZGF0YXNvdXJjZS9lamIvU2Z1bEJlYW4uamF2YQpAQCAtMjgsMTggKzI4LDE4IEBACiBAU3RhdGVmdWwKIHB1YmxpYyBjbGFzcyBTZnVsQmVhbiB7CiAgICAgQFBlcnNpc3RlbmNlQ29udGV4dCh1bml0TmFtZT0ibGliL3Vuc3luY2hwY191c2Vfbm9uanRhZGF0YXNvdXJjZS1wYXIuamFyI2VtIiwKLSAgICAgICAgICAgIHR5cGU9UGVyc2lzdGVuY2VDb250ZXh0VHlwZS5FWFRFTkRFRCwgCisgICAgICAgICAgICB0eXBlPVBlcnNpc3RlbmNlQ29udGV4dFR5cGUuRVhURU5ERUQsCiAgICAgICAgICAgICBzeW5jaHJvbml6YXRpb249U3luY2hyb25pemF0aW9uVHlwZS5VTlNZTkNIUk9OSVpFRCkKICAgICBFbnRpdHlNYW5hZ2VyIGVtOwotICAgIAorCiAgICAgcHVibGljIFBlcnNvbiB0ZXN0VXNpbmdOb25KVEFEYXRhU291cmNlKE1hcDxTdHJpbmcsIEJvb2xlYW4+IHJlc3VsdE1hcCkgewogICAgICAgICBQZXJzb24gcCA9IGVtLmZpbmQoUGVyc29uLmNsYXNzLCAxKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJIGFtIGluIHRlc3RVc2luZ05vbkpUQURhdGFTb3VyY2UsIGFuZCBwZXJzb24gbmFtZSBpcyAiICsgcC5nZXROYW1lKCkpOwogICAgICAgICByZXN1bHRNYXAucHV0KCJlcXVhbHNDdXJyZW50TmFtZSIsIHAuZ2V0TmFtZSgpLmVxdWFscygiY3VycmVudE5hbWUiKSk7CiAgICAgICAgIHJldHVybiBwOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIHRlc3RSb2xsQmFja0RvZXNOb3RDbGVhclVuc3luY2hQQyhQZXJzb24gcGVyc29uKSB7Ci0gICAgICAgICByZXR1cm4gKGVtLmNvbnRhaW5zKHBlcnNvbikgJiYgcGVyc29uLmdldE5hbWUoKSAhPSAibmV3TmFtZSIpOyAKKyAgICAgICAgIHJldHVybiAoZW0uY29udGFpbnMocGVyc29uKSAmJiBwZXJzb24uZ2V0TmFtZSgpICE9ICJuZXdOYW1lIik7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvdXNlX25vbmp0YWRhdGFzb3VyY2UvZWpiL1NsZXNzQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3BlcnNpc3RlbmNlL3Vuc3luY2hyb25pemVkUEMvdXNlX25vbmp0YWRhdGFzb3VyY2UvZWpiL1NsZXNzQmVhbi5qYXZhCmluZGV4IGViNjU3OGIuLmNmMzYxYzUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9wZXJzaXN0ZW5jZS91bnN5bmNocm9uaXplZFBDL3VzZV9ub25qdGFkYXRhc291cmNlL2VqYi9TbGVzc0JlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvcGVyc2lzdGVuY2UvdW5zeW5jaHJvbml6ZWRQQy91c2Vfbm9uanRhZGF0YXNvdXJjZS9lamIvU2xlc3NCZWFuLmphdmEKQEAgLTMxLDE0ICszMSwxNCBAQAogaW1wb3J0IGpha2FydGEudHJhbnNhY3Rpb24uVXNlclRyYW5zYWN0aW9uOwogCiBAU3RhdGVsZXNzCi1ARUpCKG5hbWU9ImVqYi9TZnVsQmVhbiIsIAorQEVKQihuYW1lPSJlamIvU2Z1bEJlYW4iLAogYmVhbkludGVyZmFjZT1jb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMyLnBlcnNpc3RlbmNlLnVuc3luY2hyb25pemVkUEMudXNlX25vbmp0YWRhdGFzb3VyY2UuZWpiLlNmdWxCZWFuLmNsYXNzKQogQFRyYW5zYWN0aW9uTWFuYWdlbWVudChUcmFuc2FjdGlvbk1hbmFnZW1lbnRUeXBlLkJFQU4pCiBwdWJsaWMgY2xhc3MgU2xlc3NCZWFuIGltcGxlbWVudHMgVGVzdGVyewotICAgIAorCiAgICAgcHVibGljIE1hcDxTdHJpbmcsIEJvb2xlYW4+IGRvVGVzdCgpIHsKICAgICAgICAgTWFwPFN0cmluZywgQm9vbGVhbj4gcmVzdWx0TWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBCb29sZWFuPigpOwotICAgICAgICAKKwogICAgICAgICBEYXRhU291cmNlIGRzID0gbnVsbDsKICAgICAgICAgQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKICAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOwpAQCAtNDgsMjMgKzQ4LDIzIEBACiAKICAgICAgICAgICAgIHV0eCA9IChVc2VyVHJhbnNhY3Rpb24pKG5ldyBqYXZheC5uYW1pbmcuSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJqYXZhOmNvbXAvVXNlclRyYW5zYWN0aW9uIik7CiAgICAgICAgICAgICBkcyA9IChEYXRhU291cmNlKShuZXcgamF2YXgubmFtaW5nLkluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiamF2YTpjb21wL0RlZmF1bHREYXRhU291cmNlIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgdXR4LmJlZ2luKCk7CiAgICAgICAgICAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwogICAgICAgICAgICAgcHMgPSBjb25uLnByZXBhcmVTdGF0ZW1lbnQoIlVwZGF0ZSBFSkIzMl9QRVJTSVNURU5DRV9DT05URVhUX1BFUlNPTiBzZXQgbmFtZSA9ICduZXdOYW1lJyB3aGVyZSBpZCA9IDEiKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTdHJpbmcgbG9va3VwTmFtZSA9ICJqYXZhOmNvbXAvZW52L2VqYi9TZnVsQmVhbiI7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgSW5pdGlhbENvbnRleHQgaW5pdEN0eCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgU2Z1bEJlYW4gc2Z1bEJlYW4gPSAoU2Z1bEJlYW4pIGluaXRDdHgubG9va3VwKGxvb2t1cE5hbWUpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFBlcnNvbiBwZXJzb24gPSBzZnVsQmVhbi50ZXN0VXNpbmdOb25KVEFEYXRhU291cmNlKHJlc3VsdE1hcCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgdXR4LnJvbGxiYWNrKCk7CiAgICAgICAgICAgICB1dHggPSBudWxsOwogICAgICAgICAgICAgcmVzdWx0TWFwLnB1dCgidGVzdFJvbGxCYWNrRG9lc05vdENsZWFyVW5zeW5jaFBDIiwgc2Z1bEJlYW4udGVzdFJvbGxCYWNrRG9lc05vdENsZWFyVW5zeW5jaFBDKHBlcnNvbikpOwogCi0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEb1Rlc3QgbWV0aG9kIGVuZHMiKTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHRNYXA7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvc2ZzYi9iYXNpYy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3Nmc2IvYmFzaWMvYnVpbGQucHJvcGVydGllcwppbmRleCA5NWI1Y2QzLi4yMzI0MTJjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvc2ZzYi9iYXNpYy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9zZnNiL2Jhc2ljL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEzICsxNSwxMyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMyLXNmc2ItYmFzaWMiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+IAotPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPlx1MDAyMAorPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzZS5jbGllbnQiIHZhbHVlPSJjb20uYWNtZS5DbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJwZXJzaXN0ZW5jZS54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3BlcnNpc3RlbmNlLnhtbCIvPgotCQorCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9zZnNiL2Jhc2ljL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9zZnNiL2Jhc2ljL2J1aWxkLnhtbAppbmRleCBjZmI5MjZmLi40ZTRlNmU2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvc2ZzYi9iYXNpYy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3Nmc2IvYmFzaWMvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NiwxMiArNDYsMTIgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVqYi1qYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9Gb28qLmNsYXNzLCoqL0hlbGwqLmNsYXNzLCoqL1MqLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWphci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTU5LDkgKzU5LDkgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bl9zZSIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW5fc2UiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgIDxqYXZhICBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9hcHBzZXJ2LXJ0Lmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSIke3NlLmNsaWVudH0iPgpAQCAtNzIsNyArNzIsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWphci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3Nmc2IvYmFzaWMvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3Nmc2IvYmFzaWMvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGU3NWJmYjcuLjQ4ZDAzNjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9zZnNiL2Jhc2ljL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvc2ZzYi9iYXNpYy9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI5LDE3ICsyOSwxNyBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgYXBwTmFtZTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKIAotCWFwcE5hbWUgPSBhcmdzWzBdOyAKLQlzdGF0LmFkZERlc2NyaXB0aW9uKGFwcE5hbWUpOwotCUNsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOyAgICAgICAKLSAgICAgICAgY2xpZW50LmRvVGVzdCgpOwkKKyAgICBhcHBOYW1lID0gYXJnc1swXTsKKyAgICBzdGF0LmFkZERlc2NyaXB0aW9uKGFwcE5hbWUpOworICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOworICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KGFwcE5hbWUgKyAiSUQiKTsKICAgICB9CiAKQEAgLTQ3LDI2ICs0NywyNiBAQAogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogCi0JdHJ5IHsKKyAgICB0cnkgewogCi0JICAgIEhlbGxvIGJlYW4gPSAoSGVsbG8pIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpnbG9iYWwvIiArIGFwcE5hbWUgKyAiL1NGU0IhY29tLmFjbWUuSGVsbG8iKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJTRlNCIHRlc3QgOiAiICsgYmVhbi50ZXN0KCJCQVIiLCAxKSk7CisgICAgICAgIEhlbGxvIGJlYW4gPSAoSGVsbG8pIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpnbG9iYWwvIiArIGFwcE5hbWUgKyAiL1NGU0IhY29tLmFjbWUuSGVsbG8iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTRlNCIHRlc3QgOiAiICsgYmVhbi50ZXN0KCJCQVIiLCAxKSk7CiAgICAgICAgICAgICBiZWFuLnRlc3RSZW1vdmUoKTsKIAotCSAgICBiZWFuID0gKEhlbGxvKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6Z2xvYmFsLyIgKyBhcHBOYW1lICsgIi9TRlNCIWNvbS5hY21lLkhlbGxvIik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU0ZTQiB0ZXN0IGRlc3Ryb3llZDogIiArIGJlYW4udGVzdCgiRk9PIiwgMSkpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNGU0IgdGVzdCBhZ2FpbjogIiArIGJlYW4udGVzdCgiQkFSIiwgMikpOworICAgICAgICBiZWFuID0gKEhlbGxvKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6Z2xvYmFsLyIgKyBhcHBOYW1lICsgIi9TRlNCIWNvbS5hY21lLkhlbGxvIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU0ZTQiB0ZXN0IGRlc3Ryb3llZDogIiArIGJlYW4udGVzdCgiRk9PIiwgMSkpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNGU0IgdGVzdCBhZ2FpbjogIiArIGJlYW4udGVzdCgiQkFSIiwgMikpOwogCi0JICAgIEhlbGxvMiBiZWFuMiA9IChIZWxsbzIpIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpnbG9iYWwvIiArIGFwcE5hbWUgKyAiL1NMU0IiKTsKKyAgICAgICAgSGVsbG8yIGJlYW4yID0gKEhlbGxvMikgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmdsb2JhbC8iICsgYXBwTmFtZSArICIvU0xTQiIpOwogICAgICAgICAgICAgYmVhbjIudGVzdFJlbW92ZSgpOwogCiAKLQkgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5QQVNTKTsKKyAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5QQVNTKTsKIAotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LkZBSUwpOwotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCX0KKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5GQUlMKTsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CiAgICAgfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9zZnNiL2Jhc2ljL2VqYi9Gb29FbnRpdHkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9zZnNiL2Jhc2ljL2VqYi9Gb29FbnRpdHkuamF2YQppbmRleCAyYmRkMmFiLi44ZjQ0Yzk2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvc2ZzYi9iYXNpYy9lamIvRm9vRW50aXR5LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3Nmc2IvYmFzaWMvZWpiL0Zvb0VudGl0eS5qYXZhCkBAIC0yNCw4ICsyNCw4IEBACiAKIEBFbnRpdHkKIHB1YmxpYyBjbGFzcyBGb29FbnRpdHkgewotICAgIAotICAgIEBJZCAKKworICAgIEBJZAogICAgIEBHZW5lcmF0ZWRWYWx1ZQogICAgIHByaXZhdGUgaW50IGlkOwogICAgIHByaXZhdGUgU3RyaW5nIG5hbWU7CkBAIC0zMywxMCArMzMsMTAgQEAKICAgICBwdWJsaWMgRm9vRW50aXR5KFN0cmluZyBuYW1lKSB7CiAgICAgICAgIHNldE5hbWUobmFtZSk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIEZvb0VudGl0eSgpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CiAgICAgICAgIHJldHVybiBuYW1lOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9zZnNiL2Jhc2ljL2VqYi9TRlNCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvc2ZzYi9iYXNpYy9lamIvU0ZTQi5qYXZhCmluZGV4IGE5OTZhMDUuLmU3NTMyNWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9zZnNiL2Jhc2ljL2VqYi9TRlNCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3Nmc2IvYmFzaWMvZWpiL1NGU0IuamF2YQpAQCAtMzksMTYgKzM5LDE2IEBACiAgICAgICAgIGVtLnBlcnNpc3QoZmUpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRvbmUgU0ZTQjo6aW5pdCgpIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyB0ZXN0KFN0cmluZyB2YWx1ZSwgaW50IGNvdW50KSB0aHJvd3MgRUpCRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNGU0I6OnRlc3QoKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU0ZTQjo6dGVzdCgpIik7CiAgICAgICAgIFF1ZXJ5IHEgPSBlbS5jcmVhdGVRdWVyeSgiU0VMRUNUIGYgRlJPTSBGb29FbnRpdHkgZiBXSEVSRSBmLm5hbWU9Om5hbWUiKTsKICAgICAgICAgcS5zZXRQYXJhbWV0ZXIoIm5hbWUiLCB2YWx1ZSk7Ci0gICAgICAgIGphdmEudXRpbC5MaXN0IHJlc3VsdCA9IHEuZ2V0UmVzdWx0TGlzdCgpOyAKLSAgICAgICAgaWYgKHJlc3VsdC5zaXplKCkgIT0gY291bnQpIAorICAgICAgICBqYXZhLnV0aWwuTGlzdCByZXN1bHQgPSBxLmdldFJlc3VsdExpc3QoKTsKKyAgICAgICAgaWYgKHJlc3VsdC5zaXplKCkgIT0gY291bnQpCiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJFUlJPUjogRm91bmQgIiArIHJlc3VsdC5zaXplKCkgKyAiIEZvb0VudGl0eSBuYW1lZCAiICsgdmFsdWUgKyAiLCBub3QgZXhwZWN0ZWQgIiArIGNvdW50KTsKIAotCXJldHVybiAiRm91bmQgIiArIHJlc3VsdC5zaXplKCkgKyAiIEZvb0VudGl0eSBuYW1lZCAiICsgdmFsdWU7CisgICAgcmV0dXJuICJGb3VuZCAiICsgcmVzdWx0LnNpemUoKSArICIgRm9vRW50aXR5IG5hbWVkICIgKyB2YWx1ZTsKICAgICB9CiAKICAgICBAUmVtb3ZlCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvc2ZzYi9iYXNpYy9lamIvU0xTQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3Nmc2IvYmFzaWMvZWpiL1NMU0IuamF2YQppbmRleCA5ZGYxZDg2Li42NWJmZTNkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvc2ZzYi9iYXNpYy9lamIvU0xTQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9zZnNiL2Jhc2ljL2VqYi9TTFNCLmphdmEKQEAgLTI2LDEzICsyNiwxMyBAQAogCiAgICAgcHVibGljIHZvaWQgdGVzdFJlbW92ZSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTTFNCOjp0ZXN0UmVtb3ZlKCkiKTsKLQliZWFuLnRlc3QoIlhZWiIsIDApOworICAgIGJlYW4udGVzdCgiWFlaIiwgMCk7CiAgICAgICAgIGJlYW4udGVzdFJlbW92ZSgpOwogICAgICAgICB0cnkgewotICAgICAgICAJYmVhbi5mb28oKTsKLSAgICAgICAgCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJSZW1vdmVkIGJlYW4gZ290IGludm9rZWQhIik7CisgICAgICAgICAgICBiZWFuLmZvbygpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlJlbW92ZWQgYmVhbiBnb3QgaW52b2tlZCEiKTsKICAgICAgICAgfSBjYXRjaChOb1N1Y2hFSkJFeGNlcHRpb24gbnNlKSB7Ci0gICAgICAgIAlTeXN0ZW0ub3V0LnByaW50bG4oIlNGU0IgaGFzIGJlZW4gcmVtb3ZlZCwgc3Vic2VxdWVudCBpbnZvY2F0aW9uIGdvdCBleGNlcHRpb24iKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU0ZTQiBoYXMgYmVlbiByZW1vdmVkLCBzdWJzZXF1ZW50IGludm9jYXRpb24gZ290IGV4Y2VwdGlvbiIpOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvc2ZzYi9iYXNpYy9lamIvU3VwZXJTRlNCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvc2ZzYi9iYXNpYy9lamIvU3VwZXJTRlNCLmphdmEKaW5kZXggNjVkNjcwMy4uNjc1OGE3OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3Nmc2IvYmFzaWMvZWpiL1N1cGVyU0ZTQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9zZnNiL2Jhc2ljL2VqYi9TdXBlclNGU0IuamF2YQpAQCAtMTcsNyArMTcsNyBAQAogcGFja2FnZSBjb20uYWNtZTsKIAogcHVibGljIGNsYXNzIFN1cGVyU0ZTQiB7Ci0JcHVibGljIHZvaWQgZm9vKCkgewotCQlyZXR1cm47Ci0JfQorICAgIHB1YmxpYyB2b2lkIGZvbygpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9zZnNiL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9zZnNiL2J1aWxkLnhtbAppbmRleCAwZjdiMWNlLi5lYmI2ZjIwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvc2ZzYi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3Nmc2IvYnVpbGQueG1sCkBAIC01Myw5ICs1Myw5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgYWxsIChFeGVjdXRlcyBzZXQgb2YgZWpiLWVqYjMyLXNmc2IgdGVzdHMpCi0JPC9lY2hvPgorICAgIDxlY2hvPgorICAgICAgICBVc2FnZToKKyAgICAgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIHNldCBvZiBlamItZWpiMzItc2ZzYiB0ZXN0cykKKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvc2ZzYi9kZXNjcmlwdG9yL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvc2ZzYi9kZXNjcmlwdG9yL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZjMxZDFkNS4uOTcwZWY4NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3Nmc2IvZGVzY3JpcHRvci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9zZnNiL2Rlc2NyaXB0b3IvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTQgKzE1LDE0IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItZWpiMzItc2ZzYi1kZXNjciIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gCi08cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+XHUwMDIwCis8cHJvcGVydHkgbmFtZT0iam5kaXJvb3QiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPiAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InNlLmNsaWVudCIgdmFsdWU9ImNvbS5hY21lLkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9InBlcnNpc3RlbmNlLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvcGVyc2lzdGVuY2UueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+Ci0JCisKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3Nmc2IvZGVzY3JpcHRvci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvc2ZzYi9kZXNjcmlwdG9yL2J1aWxkLnhtbAppbmRleCAwYmY2NjJkLi45N2U1N2JiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvc2ZzYi9kZXNjcmlwdG9yL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvc2ZzYi9kZXNjcmlwdG9yL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTIgKzQ2LDEyIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJlamItamFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovRm9vKi5jbGFzcywqKi9IZWxsby5jbGFzcywqKi9TRlNCLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWphci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTU5LDkgKzU5LDkgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bl9zZSIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW5fc2UiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgIDxqYXZhICBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9hcHBzZXJ2LXJ0Lmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSIke3NlLmNsaWVudH0iPgpAQCAtNzIsNyArNzIsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWphci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3Nmc2IvZGVzY3JpcHRvci9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvc2ZzYi9kZXNjcmlwdG9yL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBiMDliNjNmLi4xMjhlM2Y5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvc2ZzYi9kZXNjcmlwdG9yL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvc2ZzYi9kZXNjcmlwdG9yL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjksMTcgKzI5LDE3IEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBhcHBOYW1lOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewogCi0JYXBwTmFtZSA9IGFyZ3NbMF07IAotCXN0YXQuYWRkRGVzY3JpcHRpb24oYXBwTmFtZSk7Ci0JQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7ICAgICAgIAotICAgICAgICBjbGllbnQuZG9UZXN0KCk7CQorICAgIGFwcE5hbWUgPSBhcmdzWzBdOworICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oYXBwTmFtZSk7CisgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CisgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoYXBwTmFtZSArICJJRCIpOwogICAgIH0KIApAQCAtNDcsMjIgKzQ3LDIyIEBACiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAKLQl0cnkgeworICAgIHRyeSB7CiAKLQkgICAgSGVsbG8gYmVhbiA9IChIZWxsbykgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmdsb2JhbC8iICsgYXBwTmFtZSArICIvU0ZTQiIpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNGU0IgdGVzdCA6ICIgKyBiZWFuLnRlc3QoIkJBUiIsIDEpKTsKKyAgICAgICAgSGVsbG8gYmVhbiA9IChIZWxsbykgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmdsb2JhbC8iICsgYXBwTmFtZSArICIvU0ZTQiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNGU0IgdGVzdCA6ICIgKyBiZWFuLnRlc3QoIkJBUiIsIDEpKTsKICAgICAgICAgICAgIGJlYW4udGVzdFJlbW92ZSgpOwogCi0JICAgIGJlYW4gPSAoSGVsbG8pIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpnbG9iYWwvIiArIGFwcE5hbWUgKyAiL1NGU0IiKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJTRlNCIHRlc3QgZGVzdHJveWVkOiAiICsgYmVhbi50ZXN0KCJGT08iLCAxKSk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU0ZTQiB0ZXN0IGFnYWluOiAiICsgYmVhbi50ZXN0KCJCQVIiLCAyKSk7CisgICAgICAgIGJlYW4gPSAoSGVsbG8pIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpnbG9iYWwvIiArIGFwcE5hbWUgKyAiL1NGU0IiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTRlNCIHRlc3QgZGVzdHJveWVkOiAiICsgYmVhbi50ZXN0KCJGT08iLCAxKSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU0ZTQiB0ZXN0IGFnYWluOiAiICsgYmVhbi50ZXN0KCJCQVIiLCAyKSk7CiAKLQkgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5QQVNTKTsKKyAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5QQVNTKTsKIAotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsIG1haW4iLCBzdGF0LkZBSUwpOwotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCX0KKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbCBtYWluIiwgc3RhdC5GQUlMKTsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CiAgICAgfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9zZnNiL2Rlc2NyaXB0b3IvZWpiL0Zvb0VudGl0eS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3Nmc2IvZGVzY3JpcHRvci9lamIvRm9vRW50aXR5LmphdmEKaW5kZXggMmJkZDJhYi4uOGY0NGM5NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3Nmc2IvZGVzY3JpcHRvci9lamIvRm9vRW50aXR5LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3Nmc2IvZGVzY3JpcHRvci9lamIvRm9vRW50aXR5LmphdmEKQEAgLTI0LDggKzI0LDggQEAKIAogQEVudGl0eQogcHVibGljIGNsYXNzIEZvb0VudGl0eSB7Ci0gICAgCi0gICAgQElkIAorCisgICAgQElkCiAgICAgQEdlbmVyYXRlZFZhbHVlCiAgICAgcHJpdmF0ZSBpbnQgaWQ7CiAgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKQEAgLTMzLDEwICszMywxMCBAQAogICAgIHB1YmxpYyBGb29FbnRpdHkoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgc2V0TmFtZShuYW1lKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgRm9vRW50aXR5KCkgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKICAgICAgICAgcmV0dXJuIG5hbWU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3Nmc2IvZGVzY3JpcHRvci9lamIvU0ZTQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3Nmc2IvZGVzY3JpcHRvci9lamIvU0ZTQi5qYXZhCmluZGV4IGE3NGVmMjEuLjNkNGMzY2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9zZnNiL2Rlc2NyaXB0b3IvZWpiL1NGU0IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvc2ZzYi9kZXNjcmlwdG9yL2VqYi9TRlNCLmphdmEKQEAgLTM0LDE2ICszNCwxNiBAQAogICAgICAgICBlbS5wZXJzaXN0KGZlKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEb25lIFNGU0I6OmluaXQoKSIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgdGVzdChTdHJpbmcgdmFsdWUsIGludCBjb3VudCkgdGhyb3dzIEVKQkV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTRlNCOjp0ZXN0KCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNGU0I6OnRlc3QoKSIpOwogICAgICAgICBRdWVyeSBxID0gZW0uY3JlYXRlUXVlcnkoIlNFTEVDVCBmIEZST00gRm9vRW50aXR5IGYgV0hFUkUgZi5uYW1lPTpuYW1lIik7CiAgICAgICAgIHEuc2V0UGFyYW1ldGVyKCJuYW1lIiwgdmFsdWUpOwotICAgICAgICBqYXZhLnV0aWwuTGlzdCByZXN1bHQgPSBxLmdldFJlc3VsdExpc3QoKTsgCi0gICAgICAgIGlmIChyZXN1bHQuc2l6ZSgpICE9IGNvdW50KSAKKyAgICAgICAgamF2YS51dGlsLkxpc3QgcmVzdWx0ID0gcS5nZXRSZXN1bHRMaXN0KCk7CisgICAgICAgIGlmIChyZXN1bHQuc2l6ZSgpICE9IGNvdW50KQogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiRVJST1I6IEZvdW5kICIgKyByZXN1bHQuc2l6ZSgpICsgIiBGb29FbnRpdHkgbmFtZWQgIiArIHZhbHVlICsgIiwgbm90IGV4cGVjdGVkICIgKyBjb3VudCk7CiAKLQlyZXR1cm4gIkZvdW5kICIgKyByZXN1bHQuc2l6ZSgpICsgIiBGb29FbnRpdHkgbmFtZWQgIiArIHZhbHVlOworICAgIHJldHVybiAiRm91bmQgIiArIHJlc3VsdC5zaXplKCkgKyAiIEZvb0VudGl0eSBuYW1lZCAiICsgdmFsdWU7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgdGVzdFJlbW92ZSgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9zZnNiL2xpZmVjeWNsZV9jYl90eGF0dHIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9zZnNiL2xpZmVjeWNsZV9jYl90eGF0dHIvYnVpbGQucHJvcGVydGllcwppbmRleCBiNWFjOTk1Li5lZGE0YTg1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvc2ZzYi9saWZlY3ljbGVfY2JfdHhhdHRyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3Nmc2IvbGlmZWN5Y2xlX2NiX3R4YXR0ci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMiArMTUsMTIgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lamIzMi1zZnNiLWxpZmVjeWNsZV9jYl90eGF0dHIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+IAotPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPlx1MDAyMAorPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzZS5jbGllbnQiIHZhbHVlPSJjb20uYWNtZS5DbGllbnQiLz4KLQkKKwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvc2ZzYi9saWZlY3ljbGVfY2JfdHhhdHRyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9zZnNiL2xpZmVjeWNsZV9jYl90eGF0dHIvYnVpbGQueG1sCmluZGV4IDA5MzBlZWMuLjZjODdhZjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9zZnNiL2xpZmVjeWNsZV9jYl90eGF0dHIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9zZnNiL2xpZmVjeWNsZV9jYl90eGF0dHIvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NiwxMiArNDYsMTIgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVqYi1qYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9IKi5jbGFzcywqKi9TKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qYXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC01OSw5ICs1OSw5IEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5fc2UiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuX3NlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgPGphdmEgIGZvcms9Im9uIiAKKyAgICAgICA8amF2YSAgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvYXBwc2Vydi1ydC5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iJHtzZS5jbGllbnR9Ij4KQEAgLTcyLDcgKzcyLDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qYXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9zZnNiL2xpZmVjeWNsZV9jYl90eGF0dHIvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3Nmc2IvbGlmZWN5Y2xlX2NiX3R4YXR0ci9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggNWJmYTRkYi4uMThiMTRhYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3Nmc2IvbGlmZWN5Y2xlX2NiX3R4YXR0ci9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3Nmc2IvbGlmZWN5Y2xlX2NiX3R4YXR0ci9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI5LDE3ICsyOSwxNyBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgYXBwTmFtZTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKIAotICAgICAgICBhcHBOYW1lID0gYXJnc1swXTsgCisgICAgICAgIGFwcE5hbWUgPSBhcmdzWzBdOwogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKGFwcE5hbWUpOwotICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsgICAgICAgCi0gICAgICAgIGNsaWVudC5kb1Rlc3QoKTsJCisgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOworICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KGFwcE5hbWUgKyAiSUQiKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9zZnNiL2xpZmVjeWNsZV9jYl90eGF0dHIvZWpiL1NGU0IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9zZnNiL2xpZmVjeWNsZV9jYl90eGF0dHIvZWpiL1NGU0IuamF2YQppbmRleCAxYmNmNzMwLi5lYzQ1MTc1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvc2ZzYi9saWZlY3ljbGVfY2JfdHhhdHRyL2VqYi9TRlNCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3Nmc2IvbGlmZWN5Y2xlX2NiX3R4YXR0ci9lamIvU0ZTQi5qYXZhCkBAIC0zNCw5ICszNCw5IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU0ZTQjo6aW5pdCgpIik7CiAobmV3IEV4Y2VwdGlvbigiaW5pdCIpKS5wcmludFN0YWNrVHJhY2UoKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIHRlc3QoKSB0aHJvd3MgRUpCRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNGU0I6OnRlc3QoKSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU0ZTQjo6dGVzdCgpIik7CiAgICAgICAgIHJldHVybiAiU0ZTQiI7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvc2ZzYi9saWZlY3ljbGVfY2JfdHhhdHRyL2VqYi9TRlNCMS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3Nmc2IvbGlmZWN5Y2xlX2NiX3R4YXR0ci9lamIvU0ZTQjEuamF2YQppbmRleCA2OGI1NDNkLi42ZmJlNmNlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvc2ZzYi9saWZlY3ljbGVfY2JfdHhhdHRyL2VqYi9TRlNCMS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9zZnNiL2xpZmVjeWNsZV9jYl90eGF0dHIvZWpiL1NGU0IxLmphdmEKQEAgLTMzLDkgKzMzLDkgQEAKICAgICBwdWJsaWMgdm9pZCBpbml0KCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNGU0IxOjppbml0KCkiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIHRlc3QoKSB0aHJvd3MgRUpCRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNGU0IxOjp0ZXN0KCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNGU0IxOjp0ZXN0KCkiKTsKICAgICAgICAgcmV0dXJuICJTRlNCMSI7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvc2ZzYi9saWZlY3ljbGVfY2JfdHhhdHRyL2VqYi9TRlNCMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3Nmc2IvbGlmZWN5Y2xlX2NiX3R4YXR0ci9lamIvU0ZTQjIuamF2YQppbmRleCBlN2I5ZTdkLi44MDUyMmEwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvc2ZzYi9saWZlY3ljbGVfY2JfdHhhdHRyL2VqYi9TRlNCMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi9zZnNiL2xpZmVjeWNsZV9jYl90eGF0dHIvZWpiL1NGU0IyLmphdmEKQEAgLTMzLDkgKzMzLDkgQEAKICAgICBwdWJsaWMgdm9pZCBpbml0KCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNGU0IyOjppbml0KCkiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIHRlc3QoKSB0aHJvd3MgRUpCRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNGU0IyOjp0ZXN0KCkiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNGU0IyOjp0ZXN0KCkiKTsKICAgICAgICAgcmV0dXJuICJTRlNCMiI7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvdGltZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3RpbWVyL2J1aWxkLnhtbAppbmRleCAxOWYyYmVkLi42NzYyYjQ2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvdGltZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi90aW1lci9idWlsZC54bWwKQEAgLTQ4LDEzICs0OCwxMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+Ci0JCVVzYWdlOgotCQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamItdGltZXIgdGVzdHMpCisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamItdGltZXIgdGVzdHMpCiAKLQkJCWFudCBnZXRhbGx0aW1lcnMgKEV4ZWN1dGVzIHRoZSBnZXRBbGxUaW1lcnMgZWpiLXRpbWVyIHRlc3QpCi0JCQlhbnQgb3BhbGxvd2VkIChFeGVjdXRlcyB0aGUgb3BlcmF0aW9uIGFsbG93ZWQgZWpiLXRpbWVyIHRlc3QpCisgICAgICAgICAgICBhbnQgZ2V0YWxsdGltZXJzIChFeGVjdXRlcyB0aGUgZ2V0QWxsVGltZXJzIGVqYi10aW1lciB0ZXN0KQorICAgICAgICAgICAgYW50IG9wYWxsb3dlZCAoRXhlY3V0ZXMgdGhlIG9wZXJhdGlvbiBhbGxvd2VkIGVqYi10aW1lciB0ZXN0KQogCi0JPC9lY2hvPgorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi90aW1lci9nZXRhbGx0aW1lcnMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi90aW1lci9nZXRhbGx0aW1lcnMvYnVpbGQucHJvcGVydGllcwppbmRleCBjMGY1OTQ2Li5jOWU4N2RmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvdGltZXIvZ2V0YWxsdGltZXJzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3RpbWVyL2dldGFsbHRpbWVycy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNCArMTUsMTQgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi10aW1lci1nZXRhbGx0aW1lcnMiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImdsYXNzZmlzaC1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZ2xhc3NmaXNoLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvdGltZXIvZ2V0YWxsdGltZXJzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi90aW1lci9nZXRhbGx0aW1lcnMvYnVpbGQueG1sCmluZGV4IGU3ZmIyNzkuLjI0MjEzMGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi90aW1lci9nZXRhbGx0aW1lcnMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi90aW1lci9nZXRhbGx0aW1lcnMvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC02MCw5ICs2MCw5IEBACiAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgdmFsdWU9IioqL0NsaWVudC5jbGFzcywqKi8qVGltZW91dC5jbGFzcyIgLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZWFyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC03MCwxMCArNzAsMTAgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3RpbWVyL2dldGFsbHRpbWVycy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvdGltZXIvZ2V0YWxsdGltZXJzL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBlMzljNzA3Li42MWIwZjBhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvdGltZXIvZ2V0YWxsdGltZXJzL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvdGltZXIvZ2V0YWxsdGltZXJzL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjMsNyArMjMsNyBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBJbml0aWFsQ29udGV4dCBjb250ZXh0OwpAQCAtMzMsNyArMzMsNyBAQAogICAgIEBFSkIobG9va3VwID0gImphdmE6YXBwL2VqYi10aW1lci1nZXRhbGx0aW1lcnMtZWpiMi9TdGxlc05vblRpbWVvdXRFSkIiKQogICAgIHByaXZhdGUgc3RhdGljIFN0bGVzTm9uVGltZW91dCBzdGxlc05vblRpbWVvdXQ7CiAKLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7IAorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiZWpiMzItdGltZXItZ2V0YWxsdGltZXJzIik7CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3RpbWVyL2dldGFsbHRpbWVycy9lamIvU3RsZXNOb25UaW1lb3V0RUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvdGltZXIvZ2V0YWxsdGltZXJzL2VqYi9TdGxlc05vblRpbWVvdXRFSkIuamF2YQppbmRleCBhMGY2NGYwLi41Y2FhMGRkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvdGltZXIvZ2V0YWxsdGltZXJzL2VqYi9TdGxlc05vblRpbWVvdXRFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvdGltZXIvZ2V0YWxsdGltZXJzL2VqYi9TdGxlc05vblRpbWVvdXRFSkIuamF2YQpAQCAtNjUsNyArNjUsNyBAQAogICAgICAgICAgICAgICAgIGVycm9ycy5hZGQoaW5mbyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKHRzLnNpemUoKSAhPSBleHBlY3RlZF9pbmZvcy5zaXplKCkpIHsKICAgICAgICAgICAgIHByaW50VGltZXJJbmZvcyh0cyk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJ0aW1lclN2Yy5nZXRBbGxUaW1lcnMoKS5zaXplKCkgPSAiCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvdGltZXIvb3BhbGxvd2VkL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvdGltZXIvb3BhbGxvd2VkL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNzVhMDY3OS4uZGY0MTY0NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3RpbWVyL29wYWxsb3dlZC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi90aW1lci9vcGFsbG93ZWQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTUgKzE1LDE1IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItdGltZXItb3BhbGxvd2VkIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iY29tLmFjbWUuZWpiMzIudGltZXIub3BhbGxvd2VkLkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZ2xhc3NmaXNoLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9nbGFzc2Zpc2gtZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9ImFwcGNsaWVudCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3RpbWVyL29wYWxsb3dlZC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvdGltZXIvb3BhbGxvd2VkL2J1aWxkLnhtbAppbmRleCBkYjUwMjQ3Li4wN2JmN2VjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvdGltZXIvb3BhbGxvd2VkL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvdGltZXIvb3BhbGxvd2VkL2J1aWxkLnhtbApAQCAtMzQsMTkgKzM0LDE5IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPCEtLXRoaXMgaXMgdHJpY2t5IHNpbmNlIHdlYmNsaWVudC13YXItY29tbW9uIHNpbXBseSBwYWNrYWdlIGFsbCBjbGFzc2VzIHVuZGVyICR7d2FyLmNsYXNzZXN9CiAgICAgICAgIGFuZCB3ZSBuZWVkIHJlbW90ZS9sb2NhbCBpbnRlcmZhY2UgaW4gdGhlIHdhci0tPgotCQkJCTxjb3B5IHRvZGlyPSJ3YXIiPgotICAgIAkJCQk8ZmlsZXNldCBkaXI9ImVqYiIgaW5jbHVkZXM9IioqLypUaW1lb3V0LmphdmEsKiovKlRpbWVvdXRMb2NhbC5qYXZhIi8+Ci0gIAkJCTwvY29weT4KKyAgICAgICAgICAgICAgICA8Y29weSB0b2Rpcj0id2FyIj4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSJlamIiIGluY2x1ZGVzPSIqKi8qVGltZW91dC5qYXZhLCoqLypUaW1lb3V0TG9jYWwuamF2YSIvPgorICAgICAgICAgICAgICA8L2NvcHk+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9IndhciIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxkZWxldGU+Ci0gICAgCQkJCTxmaWxlc2V0IGRpcj0id2FyIiBpbmNsdWRlcz0iKiovKlRpbWVvdXQuamF2YSwqKi8qVGltZW91dExvY2FsLmphdmEiLz4KLSAgCQkJPC9kZWxldGU+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0id2FyIiBpbmNsdWRlcz0iKiovKlRpbWVvdXQuamF2YSwqKi8qVGltZW91dExvY2FsLmphdmEiLz4KKyAgICAgICAgICAgICAgPC9kZWxldGU+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ0cnVlIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KQEAgLTY5LDU4ICs2OSw1OCBAQAogICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIHZhbHVlPSIqKi9DbGllbnQuY2xhc3MsKiovKlRpbWVvdXQuY2xhc3MiIC8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgogCi0JICA8IS0tcnVuLWFwcGNsaWVudCAmIHJ1bi1qc2VjbGllbnQgYXJlIGJsb2NrZWQgYnkgSklSQTE5NTQ2LS0+CisgICAgICA8IS0tcnVuLWFwcGNsaWVudCAmIHJ1bi1qc2VjbGllbnQgYXJlIGJsb2NrZWQgYnkgSklSQTE5NTQ2LS0+CiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9InJ1bi1wb2pvLCBydW4td2ViYXBwLCBydW4tbWFuYWdlZGJlYW4iLz4KIAotCSAgPHRhcmdldCBuYW1lPSJydW4tYXBwY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+Ci0JICA8L3RhcmdldD4KLQkgICAgICAKLQkgIDx0YXJnZXQgbmFtZT0icnVuLWpzZWNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgPHRhcmdldCBuYW1lPSJydW4tYXBwY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CisgICAgICA8L3RhcmdldD4KKworICAgICAgPHRhcmdldCBuYW1lPSJydW4tanNlY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4tY2xpZW50Ij4KICAgICAgICAgIDxwYXJhbSBuYW1lPSJjbGllbnQudHlwZSIgdmFsdWU9ImpzZUNsaWVudCIgLz4KICAgICAgIDwvYW50Y2FsbD4KLQkgIDwvdGFyZ2V0PgorICAgICAgPC90YXJnZXQ+CiAKLQkgIDx0YXJnZXQgbmFtZT0icnVuLWNsaWVudCI+Ci0gICAgICAgPGphdmEgIGZvcms9Im9uIiAKKyAgICAgIDx0YXJnZXQgbmFtZT0icnVuLWNsaWVudCI+CisgICAgICAgPGphdmEgIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iJHt0ZXN0LmNsaWVudH0iPgotCQkJCQkgPHN5c3Byb3BlcnR5IGtleT0ib3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydCIgdmFsdWU9IiR7b3JiLnBvcnR9Ii8+CisgICAgICAgICAgICAgICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0IiB2YWx1ZT0iJHtvcmIucG9ydH0iLz4KICAgICAgICAgICAgPGFyZyBsaW5lPSIke2NsaWVudC50eXBlfSIvPgogICAgICAgICAgICA8YXJnIGxpbmU9IiR7aHR0cC5wb3J0fSIvPgogICAgICAgICA8L2phdmE+Ci0JICA8L3RhcmdldD4KKyAgICAgIDwvdGFyZ2V0PgogCi0JICA8dGFyZ2V0IG5hbWU9InJ1bi1wb2pvIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CisgICAgICA8dGFyZ2V0IG5hbWU9InJ1bi1wb2pvIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4tY2xpZW50Ij4KICAgICAgICAgIDxwYXJhbSBuYW1lPSJjbGllbnQudHlwZSIgdmFsdWU9InBvam8iIC8+CiAgICAgICA8L2FudGNhbGw+Ci0JICA8L3RhcmdldD4KKyAgICAgIDwvdGFyZ2V0PgogCi0JICA8dGFyZ2V0IG5hbWU9InJ1bi13ZWJhcHAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgIDx0YXJnZXQgbmFtZT0icnVuLXdlYmFwcCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLWNsaWVudCI+CiAgICAgICAgICA8cGFyYW0gbmFtZT0iY2xpZW50LnR5cGUiIHZhbHVlPSJ3ZWJhcHAiIC8+CiAgICAgICA8L2FudGNhbGw+Ci0JICA8L3RhcmdldD4KKyAgICAgIDwvdGFyZ2V0PgogCi0JICA8dGFyZ2V0IG5hbWU9InJ1bi1tYW5hZ2VkYmVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgPHRhcmdldCBuYW1lPSJydW4tbWFuYWdlZGJlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi1jbGllbnQiPgogICAgICAgICAgPHBhcmFtIG5hbWU9ImNsaWVudC50eXBlIiB2YWx1ZT0ibWFuYWdlZGJlYW4iIC8+CiAgICAgICA8L2FudGNhbGw+Ci0JICA8L3RhcmdldD4KKyAgICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvdGltZXIvb3BhbGxvd2VkL2VqYi9TaW5nbGV0b25UaW1lb3V0RUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvdGltZXIvb3BhbGxvd2VkL2VqYi9TaW5nbGV0b25UaW1lb3V0RUpCLmphdmEKaW5kZXggMDQ1MjM0Yy4uMDA4OWZmMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3RpbWVyL29wYWxsb3dlZC9lamIvU2luZ2xldG9uVGltZW91dEVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi90aW1lci9vcGFsbG93ZWQvZWpiL1NpbmdsZXRvblRpbWVvdXRFSkIuamF2YQpAQCAtMzEsOSArMzEsOSBAQAogcHVibGljIGNsYXNzIFNpbmdsZXRvblRpbWVvdXRFSkIgaW1wbGVtZW50cyBTaW5nbGV0b25UaW1lb3V0TG9jYWwsIFNpbmdsZXRvblRpbWVvdXQgewogICAgIEBSZXNvdXJjZQogICAgIFRpbWVyU2VydmljZSB0czsKLSAgICAKKwogICAgIFRpbWVyIHQ7Ci0gICAgCisKICAgICBwdWJsaWMgVGltZXJIYW5kbGUgY3JlYXRlVGltZXIoU3RyaW5nIGluZm8pIHsKICAgICAgICAgYm9vbGVhbiBjcmVhdGVkID0gZmFsc2U7CiAgICAgICAgIGZvcihUaW1lciB0aW1lcjp0cy5nZXRUaW1lcnMoKSkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3RpbWVyL29wYWxsb3dlZC93YXIvVmVyaWZ5U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYjMyL3RpbWVyL29wYWxsb3dlZC93YXIvVmVyaWZ5U2VydmxldC5qYXZhCmluZGV4IDRiNTg5NGIuLmVkNTE1MTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamIzMi90aW1lci9vcGFsbG93ZWQvd2FyL1ZlcmlmeVNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiMzIvdGltZXIvb3BhbGxvd2VkL3dhci9WZXJpZnlTZXJ2bGV0LmphdmEKQEAgLTQyLDcgKzQyLDcgQEAKICAgICAgICAgU3RyaW5nIHR5cGUgPSByZXEuZ2V0UXVlcnlTdHJpbmcoKTsKIAogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwLmdldFdyaXRlcigpOwotICAgIAlyZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKKyAgICAgICAgcmVzcC5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAKICAgICAgICAgb3V0LnByaW50bG4oIjxodG1sPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoZWFkPiIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYmMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYmMvYnVpbGQueG1sCmluZGV4IDJjM2FmNWIuLjBmODdlMGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamJjL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiYy9idWlsZC54bWwKQEAgLTUzLDEzICs1MywxMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+Ci0JCVVzYWdlOgotCQkJYW50IGVxdWFscyAoRXhlY3V0ZXMgdGhlIGVqYi1lamJjIGVxdWFscyB0ZXN0KQotCQkJYW50IHJlZGVmIChFeGVjdXRlcyB0aGUgZWpiLWVqYmMgcmVkZWYgdGVzdCkKLQkJCWFudCBzYW1laW1wbCAoRXhlY3V0ZXMgdGhlIGVqYi1lamJjIHNhbWVpbXBsCisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IGVxdWFscyAoRXhlY3V0ZXMgdGhlIGVqYi1lamJjIGVxdWFscyB0ZXN0KQorICAgICAgICAgICAgYW50IHJlZGVmIChFeGVjdXRlcyB0aGUgZWpiLWVqYmMgcmVkZWYgdGVzdCkKKyAgICAgICAgICAgIGFudCBzYW1laW1wbCAoRXhlY3V0ZXMgdGhlIGVqYi1lamJjIHNhbWVpbXBsCiB0ZXN0KQotCQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamItZWpiYyB0ZXN0cykKLQk8L2VjaG8+CisgICAgICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYi1lamJjIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamJjL2VxdWFscy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYmMvZXF1YWxzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNWIyMzNkYi4uMzNlMWZjYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYmMvZXF1YWxzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYmMvZXF1YWxzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIxICsxNSwyMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYmMtZXF1YWxzIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiYy9lcXVhbHMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYmMvZXF1YWxzL2J1aWxkLnhtbAppbmRleCBhYjc1MGFhLi5jMDYwOTlhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiYy9lcXVhbHMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamJjL2VxdWFscy9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDE0ICs0NiwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudCouY2xhc3MsKiovSGVsbG8uY2xhc3MsKiovSGVsbG9Ib21lLmNsYXNzLCoqLypGb28qLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYxLDE3ICs2MSwxNyBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamJjL2VxdWFscy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiYy9lcXVhbHMvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDM5N2E1NTMuLjQ1NGU5M2UgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamJjL2VxdWFscy9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYmMvZXF1YWxzL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzIsNyArMzIsNyBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewpAQCAtNDEsMjIgKzQxLDIyIEBACiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJlamItZWpiYy1lcXVhbHNJRCIpOwotICAgIH0gIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29raW5nIHVwIGVqYiByZWYgIik7Ci0gICAgICAgICAgICAvLyBjcmVhdGUgRUpCIHVzaW5nIGZhY3RvcnkgZnJvbSBjb250YWluZXIgCisgICAgICAgICAgICAvLyBjcmVhdGUgRUpCIHVzaW5nIGZhY3RvcnkgZnJvbSBjb250YWluZXIKICAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL2ZvbyIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvYmpyZWYgPSAiICsgb2JqcmVmKTsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTG9va2VkIHVwIGhvbWUhISIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBGb29Ib21lICBob21lID0gKEZvb0hvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93CiAgICAgICAgICAgICAgICAgKG9ianJlZiwgRm9vSG9tZS5jbGFzcyk7CiAKQEAgLTY1LDEzICs2NSwxMyBAQAogICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHN0dWJzIGZvciBzdXBlciBjbGFzcyBhcmUgYXZhaWxhYmxlIHRvIGNsaWVudAogICAgICAgICAgICAgRm9vSG9tZVN1cGVyIGhvbWVTdXBlciA9IChGb29Ib21lU3VwZXIpCiAgICAgICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwgRm9vSG9tZVN1cGVyLmNsYXNzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIk5hcnJvd2VkIEZvb0hvbWVTdXBlciEhIik7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgCisKKwogICAgICAgICAgICAgRm9vIGYgPSBob21lLmNyZWF0ZSgpOwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJHb3QgdGhlIEVKQiEhIik7Ci0gICAgICAgICAgICBmLmNhbGxIZWxsbygpOyAgICAgICAgICAgIAorICAgICAgICAgICAgZi5jYWxsSGVsbG8oKTsKIAogICAgICAgICAgICAgRm9vU3VwZXIgZjIgPSBob21lLmNyZWF0ZSgpOwogICAgICAgICAgICAgZjIubG91aWUoKTsKQEAgLTgyLDEwICs4MiwxMCBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBtYWluIiAsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXRyeSB7CisgICAgdHJ5IHsKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKIAotICAgICAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyIAorICAgICAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyCiAgICAgICAgICAgICBPYmplY3Qgb2JqcmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9oZWxsbyIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvYmpyZWYgPSAiICsgb2JqcmVmKTsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTG9va2VkIHVwIGhvbWUhISIpOwpAQCAtOTMsMzAgKzkzLDMwIEBACiAKICAgICAgICAgICAgIEhlbGxvSG9tZSAgaG9tZSA9IChIZWxsb0hvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93CiAgICAgICAgICAgICAgICAgKG9ianJlZiwgSGVsbG9Ib21lLmNsYXNzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIk5hcnJvd2VkIGhvbWUhISIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBIZWxsbyBociA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkdvdCB0aGUgRUpCISEiKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnZva2luZyBoZWxsbyBlamIiKTsKIAogICAgICAgICAgICAgU3RyaW5nIHNhaWQgPSBoci5zYXlIZWxsbygpOwogCiAgICAgICAgICAgICBTdHJpbmcgcmVzdWx0ID0gaHIuYXNzZXJ0VmFsaWRSZW1vdGVPYmplY3QoKTsKICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkgewotCQlzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IGFzc2VydFZhbGlkUmVtb3RlT2JqZWN0Iiwgc3RhdC5QQVNTKTsKLQkgICAgfSBlbHNlIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJhc3NlcnRWYWxpZFJlbW90ZU9iamVjdDogIiArIHJlc3VsdCk7Ci0JCXN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgYXNzZXJ0VmFsaWRSZW1vdGVPYmplY3QiLCBzdGF0LkZBSUwpOwotCSAgICB9CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgYXNzZXJ0VmFsaWRSZW1vdGVPYmplY3QiLCBzdGF0LlBBU1MpOworICAgICAgICB9IGVsc2UgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImFzc2VydFZhbGlkUmVtb3RlT2JqZWN0OiAiICsgcmVzdWx0KTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBhc3NlcnRWYWxpZFJlbW90ZU9iamVjdCIsIHN0YXQuRkFJTCk7CisgICAgICAgIH0KIAogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBhc3NlcnRWYWxpZFJlbW90ZU9iamVjdCIgLCBzdGF0LkZBSUwpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgIAlyZXR1cm47CisKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYmMvZXF1YWxzL2VqYi9Gb28uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamJjL2VxdWFscy9lamIvRm9vLmphdmEKaW5kZXggOGYxYzlkMi4uNDRiNmYwNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYmMvZXF1YWxzL2VqYi9Gb28uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiYy9lcXVhbHMvZWpiL0Zvby5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiBwdWJsaWMgaW50ZXJmYWNlIEZvbyBleHRlbmRzIEVKQk9iamVjdCwgRm9vU3VwZXIsIGphdmEucm1pLlJlbW90ZSB7CiAgICAgdm9pZCBjYWxsSGVsbG8oKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogICAgIFN0cmluZyBzYXlIZWxsbygpIHRocm93cyBSZW1vdGVFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBhc3NlcnRWYWxpZFJlbW90ZU9iamVjdChTdHJpbmcgbXNnKQotCXRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamJjL2VxdWFscy9lamIvRm9vQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYmMvZXF1YWxzL2VqYi9Gb29CZWFuLmphdmEKaW5kZXggNTU1ZmU0OC4uMDY0Njk5NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYmMvZXF1YWxzL2VqYi9Gb29CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYmMvZXF1YWxzL2VqYi9Gb29CZWFuLmphdmEKQEAgLTE4LDcgKzE4LDcgQEAKIAogaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKIGltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKLWltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247IAoraW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQmVhbjsKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dDsKIGltcG9ydCBqYWthcnRhLmVqYi5FSkJFeGNlcHRpb247CkBAIC0zMywxMSArMzMsMTEgQEAKICAgICBwdWJsaWMgRm9vQmVhbigpIHt9CiAKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb0JlYW46OmVqYkNyZWF0ZSAhISIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vQmVhbjo6ZWpiQ3JlYXRlICEhIik7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgc2MpIHsKLQl0aGlzLnNjID0gc2M7CisgICAgdGhpcy5zYyA9IHNjOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGxvdWllKCkgeyBTeXN0ZW0ub3V0LnByaW50bG4oImx1aWdpIGx1aWdpIik7IH0KQEAgLTY5LDIyICs2OSwyMiBAQAogICAgICAgICAgICAgRm9vTG9jYWxIb21lIGZvb0xvY2FsSG9tZSA9IChGb29Mb2NhbEhvbWUpCiAgICAgICAgICAgICAgICAgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9tZWxvY2FsIik7CiAgICAgICAgICAgICBGb29Mb2NhbCBtZUxvY2FsID0gZm9vTG9jYWxIb21lLmNyZWF0ZSgpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tpbmcgdXAgZWpiIHJlZiBoZWxsbyAiKTsKLSAgICAgICAgICAgIC8vIGNyZWF0ZSBFSkIgdXNpbmcgZmFjdG9yeSBmcm9tIGNvbnRhaW5lciAKKyAgICAgICAgICAgIC8vIGNyZWF0ZSBFSkIgdXNpbmcgZmFjdG9yeSBmcm9tIGNvbnRhaW5lcgogICAgICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvaGVsbG8iKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigib2JqcmVmID0gIiArIG9ianJlZik7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkxvb2tlZCB1cCBob21lISEiKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgSGVsbG9Ib21lICBob21lID0gKEhlbGxvSG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cKICAgICAgICAgICAgICAgICAob2JqcmVmLCBIZWxsb0hvbWUuY2xhc3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTmFycm93ZWQgaG9tZSEhIik7CiAgICAgICAgICAgICBIZWxsbyBociA9IGhvbWUuY3JlYXRlKCk7CiAKIAogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJHb3QgdGhlIEVKQiEhIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW52b2tpbmcgaGVsbG8gZWpiIik7CiAKICAgICAgICAgICAgIGhyLnNheUhlbGxvKCk7CkBAIC05OCwxMCArOTgsMTAgQEAKICAgICAgICAgICAgIEhlbGxvTG9jYWxIb21lICBsb2NhbEhvbWUgPSAoSGVsbG9Mb2NhbEhvbWUpCiAgICAgICAgICAgICAgICAgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9oZWxsb2xvY2FsIik7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkxvb2tlZCB1cCBob21lISEiKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgSGVsbG9Mb2NhbCBobCA9IGxvY2FsSG9tZS5jcmVhdGUoKTsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiR290IHRoZSBFSkIhISIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImludm9raW5nIGhlbGxvIGVqYiIpOwogCiAgICAgICAgICAgICBobC5zYXlIZWxsbygpOwpAQCAtMTEyLDcgKzExMiw3IEBACiAgICAgICAgICAgICAvLwogCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tpbmcgdXAgZWpiIHJlZiBoZWxsbyAiKTsKLSAgICAgICAgICAgIC8vIGNyZWF0ZSBFSkIgdXNpbmcgZmFjdG9yeSBmcm9tIGNvbnRhaW5lciAKKyAgICAgICAgICAgIC8vIGNyZWF0ZSBFSkIgdXNpbmcgZmFjdG9yeSBmcm9tIGNvbnRhaW5lcgogICAgICAgICAgICAgb2JqcmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9oZWxsbzIiKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigib2JqcmVmID0gIiArIG9ianJlZik7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkxvb2tlZCB1cCBob21lISEiKTsKQEAgLTEyMCwxMiArMTIwLDEyIEBACiAKICAgICAgICAgICAgIEhlbGxvSG9tZSAgaG9tZTIgPSAoSGVsbG9Ib21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdwogICAgICAgICAgICAgICAgIChvYmpyZWYsIEhlbGxvSG9tZS5jbGFzcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJOYXJyb3dlZCBob21lISEiKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgSGVsbG8gaHIyID0gaG9tZTIuY3JlYXRlKCk7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkdvdCB0aGUgRUpCISEiKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnZva2luZyBoZWxsbyBlamIiKTsKIAogICAgICAgICAgICAgU3RyaW5nIHNhaWQgPSBocjIuc2F5SGVsbG8oKTsKQEAgLTEzNywxMCArMTM3LDEwIEBACiAgICAgICAgICAgICBIZWxsb0xvY2FsSG9tZSAgbG9jYWxIb21lMiA9IChIZWxsb0xvY2FsSG9tZSkKICAgICAgICAgICAgICAgICBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL2hlbGxvbG9jYWwyIik7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkxvb2tlZCB1cCBob21lISEiKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgSGVsbG9Mb2NhbCBobDIgPSBsb2NhbEhvbWUyLmNyZWF0ZSgpOwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJHb3QgdGhlIEVKQiEhIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW52b2tpbmcgaGVsbG8yIGVqYiIpOwogCiAgICAgICAgICAgICBTdHJpbmcgc2FpZExvY2FsID0gaGwyLnNheUhlbGxvKCk7CkBAIC0xNTUsNyArMTU1LDcgQEAKICAgICAgICAgICAgIH0KIAogCi0gICAgICAgICAgICBjb20uc3VuLmVqYi5Db250YWluZXIgY29udCA9IAorICAgICAgICAgICAgY29tLnN1bi5lamIuQ29udGFpbmVyIGNvbnQgPQogICAgICAgICAgICAgICAgICgoY29tLnN1bi5lamIuY29udGFpbmVycy5FSkJDb250ZXh0SW1wbCkgc2MpLmdldENvbnRhaW5lcigpOwogCiAgICAgICAgICAgICAvLwpAQCAtMjgxLDIyICsyODEsMjIgQEAKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29raW5nIHVwIGVqYiByZWYgaGVsbG8gIik7Ci0gICAgICAgICAgICAvLyBjcmVhdGUgRUpCIHVzaW5nIGZhY3RvcnkgZnJvbSBjb250YWluZXIgCisgICAgICAgICAgICAvLyBjcmVhdGUgRUpCIHVzaW5nIGZhY3RvcnkgZnJvbSBjb250YWluZXIKICAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL2hlbGxvIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9ianJlZiA9ICIgKyBvYmpyZWYpOwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJMb29rZWQgdXAgaG9tZSEhIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIEhlbGxvSG9tZSAgaG9tZSA9IChIZWxsb0hvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93CiAgICAgICAgICAgICAgICAgKG9ianJlZiwgSGVsbG9Ib21lLmNsYXNzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIk5hcnJvd2VkIGhvbWUhISIpOwogICAgICAgICAgICAgSGVsbG8gaHIgPSBob21lLmNyZWF0ZSgpOwogCi0JICAgIHJldHVybiAoaHIuYXNzZXJ0VmFsaWRSZW1vdGVPYmplY3QoKSA9PSBudWxsKQotCQk/IHRydWU6IGZhbHNlOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4KTsKLQl9CisgICAgICAgIHJldHVybiAoaHIuYXNzZXJ0VmFsaWRSZW1vdGVPYmplY3QoKSA9PSBudWxsKQorICAgICAgICA/IHRydWU6IGZhbHNlOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4KTsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyBhc3NlcnRWYWxpZFJlbW90ZU9iamVjdCgpICB7CkBAIC0zMDYsMTAgKzMwNiwxMCBAQAogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogCiAgICAgICAgICAgICBPYmplY3Qgb2JqcmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9oZWxsbzIiKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgSGVsbG9Ib21lICBob21lID0gKEhlbGxvSG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cKICAgICAgICAgICAgICAgICAob2JqcmVmLCBIZWxsb0hvbWUuY2xhc3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIEhlbGxvIGhyMiA9IGhvbWUuY3JlYXRlKCk7CiAKICAgICAgICAgICAgIGhyMi5zYXlIZWxsbygpOwpAQCAtMzE3LDcgKzMxNyw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInN1Y2Nlc3NmdWxseSBpbnZva2VkIHNheUhlbGxvKCkgZWpiMiIpOwogCiAgICAgICAgICAgICAvLwotICAgICAgICAgICAgY29tLnN1bi5lamIuQ29udGFpbmVyIGNvbnQgPSAKKyAgICAgICAgICAgIGNvbS5zdW4uZWpiLkNvbnRhaW5lciBjb250ID0KICAgICAgICAgICAgICAgICAoKGNvbS5zdW4uZWpiLmNvbnRhaW5lcnMuRUpCQ29udGV4dEltcGwpIHNjKS5nZXRDb250YWluZXIoKTsKIAogICAgICAgICAgICAgLy8KQEAgLTMzNiw4ICszMzYsOCBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBjb250LmFzc2VydFZhbGlkUmVtb3RlT2JqZWN0KGhvbWUpOwogICAgICAgICAgICAgICAgIFN0cmluZyBzdHIgPSAiQ29tcGFyaXNvbiBvZiAoZWpibyBhbmQgaG9tZSkgc2hvdWxkIGhhdmUgZmFpbGVkIjsKLQkJU3lzdGVtLm91dC5wcmludGxuKHN0cik7Ci0JCXJldHVybiBzdHI7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzdHIpOworICAgICAgICByZXR1cm4gc3RyOwogICAgICAgICAgICAgfSBjYXRjaChqYWthcnRhLmVqYi5FSkJFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYXNzZXJ0VmFsaWRSZW1vdGVPYmplY3Q6IFN1Y2Nlc3NmdWxseSBjYXVnaHQgZXhwZWN0ZWQgZXhjZXB0aW9uOiIgKyBlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICB9CkBAIC0zNDUsOCArMzQ1LDggQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgY29udC5hc3NlcnRWYWxpZFJlbW90ZU9iamVjdChudWxsKTsKICAgICAgICAgICAgICAgICBTdHJpbmcgc3RyID0gIkNvbXBhcmlzb24gb2YgKGVqYm8gYW5kIG51bGwpIHNob3VsZCBoYXZlIGZhaWxlZCI7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbihzdHIpOwotCQlyZXR1cm4gc3RyOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oc3RyKTsKKyAgICAgICAgcmV0dXJuIHN0cjsKICAgICAgICAgICAgIH0gY2F0Y2goamFrYXJ0YS5lamIuRUpCRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImFzc2VydFZhbGlkUmVtb3RlT2JqZWN0OiBTdWNjZXNzZnVsbHkgY2F1Z2h0IGV4cGVjdGVkIGV4Y2VwdGlvbjoiICsgZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgfQpAQCAtMzU0LDggKzM1NCw4IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGNvbnQuYXNzZXJ0VmFsaWRSZW1vdGVPYmplY3QodGhpcyk7CiAgICAgICAgICAgICAgICAgU3RyaW5nIHN0ciA9ICJDb21wYXJpc29uIG9mIChlamJvIGFuZCBiZWFuKSBzaG91bGQgaGF2ZSBmYWlsZWQiOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oc3RyKTsKLQkJcmV0dXJuIHN0cjsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHN0cik7CisgICAgICAgIHJldHVybiBzdHI7CiAgICAgICAgICAgICB9IGNhdGNoKGpha2FydGEuZWpiLkVKQkV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJhc3NlcnRWYWxpZFJlbW90ZU9iamVjdDogU3VjY2Vzc2Z1bGx5IGNhdWdodCBleHBlY3RlZCBleGNlcHRpb246IiArIGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIH0KQEAgLTM2MywxOCArMzYzLDE4IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGNvbnQuYXNzZXJ0VmFsaWRSZW1vdGVPYmplY3QoaHIyKTsKICAgICAgICAgICAgICAgICBTdHJpbmcgc3RyID0gIkNvbXBhcmlzb24gb2YgKGVqYm8gYW5kIGVqYm9fZnJvbV9kaWZmX2NvbnRhaW5lcikgc2hvdWxkIGhhdmUgZmFpbGVkIjsKLQkJU3lzdGVtLm91dC5wcmludGxuKHN0cik7Ci0JCXJldHVybiBzdHI7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzdHIpOworICAgICAgICByZXR1cm4gc3RyOwogICAgICAgICAgICAgfSBjYXRjaChqYWthcnRhLmVqYi5FSkJFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYXNzZXJ0VmFsaWRSZW1vdGVPYmplY3Q6IFN1Y2Nlc3NmdWxseSBjYXVnaHQgZXhwZWN0ZWQgZXhjZXB0aW9uOiIgKyBlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICB9CiAKIAotCSAgICByZXR1cm4gbnVsbDsKLQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIHJldHVybiAiQ2F1Z2h0IHVuZXhwZWN0ZWQgZXhjZXB0aW9uOiAiICsgZXgudG9TdHJpbmcoKTsKLQl9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuICJDYXVnaHQgdW5leHBlY3RlZCBleGNlcHRpb246ICIgKyBleC50b1N0cmluZygpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHt9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiYy9lcXVhbHMvZWpiL0Zvb0hvbWVTdXBlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYmMvZXF1YWxzL2VqYi9Gb29Ib21lU3VwZXIuamF2YQppbmRleCBhYmI0ZGQ1Li40MTUyZTYyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiYy9lcXVhbHMvZWpiL0Zvb0hvbWVTdXBlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamJjL2VxdWFscy9lamIvRm9vSG9tZVN1cGVyLmphdmEKQEAgLTIwLDUgKzIwLDUgQEAKIGltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiAKIHB1YmxpYyBpbnRlcmZhY2UgRm9vSG9tZVN1cGVyIGV4dGVuZHMgamF2YS5ybWkuUmVtb3RlIHsKLSAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiYy9lcXVhbHMvZWpiL0hlbGxvLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiYy9lcXVhbHMvZWpiL0hlbGxvLmphdmEKaW5kZXggYjRlYjk0Zi4uY2VkYTZkNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYmMvZXF1YWxzL2VqYi9IZWxsby5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamJjL2VxdWFscy9lamIvSGVsbG8uamF2YQpAQCAtMjcsNiArMjcsNiBAQAogICAgIFN0cmluZyBzYXlIZWxsbygpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBTdHJpbmcgYXNzZXJ0VmFsaWRSZW1vdGVPYmplY3QoKQotCXRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYmMvcmVkZWYvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamJjL3JlZGVmL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZmFhNjk0My4uMzBkZGQzNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYmMvcmVkZWYvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiYy9yZWRlZi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMSArMTUsMjEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lamJjLXJlZGVmIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiYy9yZWRlZi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiYy9yZWRlZi9idWlsZC54bWwKaW5kZXggMjA1NWRhMC4uMDRjMjcyZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYmMvcmVkZWYvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamJjL3JlZGVmL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTQgKzQ2LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50Ki5jbGFzcywqKi8qRm9vKi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02MSwxMCArNjEsMTAgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYmMvcmVkZWYvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYmMvcmVkZWYvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDRhOGNlMTguLmU4OGU1YTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamJjL3JlZGVmL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiYy9yZWRlZi9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTM3LDMxICszNywzMSBAQAogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiZWpiLWVqYmMtcmVkZWZJRCIpOwotICAgIH0gIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29raW5nIHVwIGVqYiByZWYgIik7Ci0gICAgICAgICAgICAvLyBjcmVhdGUgRUpCIHVzaW5nIGZhY3RvcnkgZnJvbSBjb250YWluZXIgCisgICAgICAgICAgICAvLyBjcmVhdGUgRUpCIHVzaW5nIGZhY3RvcnkgZnJvbSBjb250YWluZXIKICAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL2ZvbyIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvYmpyZWYgPSAiICsgb2JqcmVmKTsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTG9va2VkIHVwIGhvbWUhISIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBGb29Ib21lICBob21lID0gKEZvb0hvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93CiAgICAgICAgICAgICAgICAgKG9ianJlZiwgRm9vSG9tZS5jbGFzcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJOYXJyb3dlZCBob21lISEiKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAKKworCiAgICAgICAgICAgICBGb28gZiA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkdvdCB0aGUgRUpCISEiKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgLy8gaW52b2tlIG1ldGhvZCBvbiB0aGUgRUpCCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImludm9raW5nIGVqYiIpOwogICAgICAgICAgICAgZi5jYWxsSGVsbG8oKTsKQEAgLTc1LDggKzc1LDggQEAKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IG1haW4iICwgc3RhdC5GQUlMKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAJcmV0dXJuOworCisgICAgICAgIHJldHVybjsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamJjL3JlZGVmL2VqYi9Gb29CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiYy9yZWRlZi9lamIvRm9vQmVhbi5qYXZhCmluZGV4IDcxNTgwYzkuLjI4YjU2NWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamJjL3JlZGVmL2VqYi9Gb29CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYmMvcmVkZWYvZWpiL0Zvb0JlYW4uamF2YQpAQCAtMTgsNyArMTgsNyBAQAogCiBpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwogaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOwotaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsgCitpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25CZWFuOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0OwogaW1wb3J0IGpha2FydGEuZWpiLkVKQkV4Y2VwdGlvbjsKQEAgLTMzLDExICszMywxMSBAQAogICAgIHB1YmxpYyBGb29CZWFuKCkge30KIAogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vQmVhbjo6ZWpiQ3JlYXRlICEhIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29CZWFuOjplamJDcmVhdGUgISEiKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgewotCXRoaXMuc2MgPSBzYzsKKyAgICB0aGlzLnNjID0gc2M7CiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbygpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamJjL3JlZGVmL2VqYi9Gb29Ib21lU3VwZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamJjL3JlZGVmL2VqYi9Gb29Ib21lU3VwZXIuamF2YQppbmRleCBlYjA1MzBjLi42NDJiZDljIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiYy9yZWRlZi9lamIvRm9vSG9tZVN1cGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYmMvcmVkZWYvZWpiL0Zvb0hvbWVTdXBlci5qYXZhCkBAIC0yMyw2ICsyMyw2IEBACiAKIAogcHVibGljIGludGVyZmFjZSBGb29Ib21lU3VwZXIgZXh0ZW5kcyBSZW1vdGUgewotICAgCisKICAgICBGb28gY3JlYXRlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiwgQ3JlYXRlRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYmMvc2FtZWltcGwvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamJjL3NhbWVpbXBsL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZmRjZTkzOS4uMDQzYmIyNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYmMvc2FtZWltcGwvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiYy9zYW1laW1wbC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMSArMTUsMjEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1lamJjLXNhbWVpbXBsIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiYy9zYW1laW1wbC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiYy9zYW1laW1wbC9idWlsZC54bWwKaW5kZXggNmU3M2ZkOC4uOGNhN2U0ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYmMvc2FtZWltcGwvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamJjL3NhbWVpbXBsL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTQgKzQ2LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50Ki5jbGFzcywqKi8qRm9vLmNsYXNzLCoqLypGb29Ib21lLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYxLDEwICs2MSwxMCBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiYy9zYW1laW1wbC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiYy9zYW1laW1wbC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggOWI1ZjNlOC4uNmNkYzQ0YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYmMvc2FtZWltcGwvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamJjL3NhbWVpbXBsL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjgsNyArMjgsNyBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewpAQCAtMzcsMzEgKzM3LDMxIEBACiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJlamItZWpiYy1zYW1laW1wbElEIik7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tpbmcgdXAgZWpiIHJlZiAiKTsKLSAgICAgICAgICAgIC8vIGNyZWF0ZSBFSkIgdXNpbmcgZmFjdG9yeSBmcm9tIGNvbnRhaW5lciAKKyAgICAgICAgICAgIC8vIGNyZWF0ZSBFSkIgdXNpbmcgZmFjdG9yeSBmcm9tIGNvbnRhaW5lcgogICAgICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvZm9vIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9ianJlZiA9ICIgKyBvYmpyZWYpOwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJMb29rZWQgdXAgaG9tZSEhIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIEZvb0hvbWUgIGhvbWUgPSAoRm9vSG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cKICAgICAgICAgICAgICAgICAob2JqcmVmLCBGb29Ib21lLmNsYXNzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIk5hcnJvd2VkIGhvbWUhISIpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIAorCisKICAgICAgICAgICAgIEZvbyBmID0gaG9tZS5jcmVhdGUoKTsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiR290IHRoZSBFSkIhISIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyBpbnZva2UgbWV0aG9kIG9uIHRoZSBFSkIKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW52b2tpbmcgZWpiIik7CiAgICAgICAgICAgICBmLmNhbGxIZWxsbygpOwpAQCAtNzMsOCArNzMsOCBAQAogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgbWFpbiIgLCBzdGF0LkZBSUwpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgIAlyZXR1cm47CisKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYmMvc2FtZWltcGwvZWpiL0Zvb0JlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9lamJjL3NhbWVpbXBsL2VqYi9Gb29CZWFuLmphdmEKaW5kZXggNGI3MDVlZS4uYjYxYjczOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2VqYmMvc2FtZWltcGwvZWpiL0Zvb0JlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvZWpiYy9zYW1laW1wbC9lamIvRm9vQmVhbi5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIGltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CiBpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7Ci1pbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOyAKK2ltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkJlYW47CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQ7CiBpbXBvcnQgamFrYXJ0YS5lamIuRUpCRXhjZXB0aW9uOwpAQCAtMzMsMTEgKzMzLDExIEBACiAgICAgcHVibGljIEZvb0JlYW4oKSB7fQogCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29CZWFuOjplamJDcmVhdGUgISEiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb0JlYW46OmVqYkNyZWF0ZSAhISIpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7Ci0JdGhpcy5zYyA9IHNjOworICAgIHRoaXMuc2MgPSBzYzsKICAgICB9CiAKICAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKCkgewpAQCAtNjIsMjEgKzYyLDIxIEBACiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAKICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2luZyB1cCBlamIgcmVmIGhlbGxvICIpOwotICAgICAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyIAorICAgICAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyCiAgICAgICAgICAgICBPYmplY3Qgb2JqcmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9oZWxsbyIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvYmpyZWYgPSAiICsgb2JqcmVmKTsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTG9va2VkIHVwIGhvbWUhISIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBIZWxsb0hvbWUgIGhvbWUgPSAoSGVsbG9Ib21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdwogICAgICAgICAgICAgICAgIChvYmpyZWYsIEhlbGxvSG9tZS5jbGFzcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJOYXJyb3dlZCBob21lISEiKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgSGVsbG8gaHIgPSBob21lLmNyZWF0ZSgpOwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJHb3QgdGhlIEVKQiEhIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW52b2tpbmcgaGVsbG8gZWpiIik7CiAKICAgICAgICAgICAgIGhyLnNheUhlbGxvKCk7CkBAIC05MCwxMCArOTAsMTAgQEAKICAgICAgICAgICAgIEhlbGxvTG9jYWxIb21lICBsb2NhbEhvbWUgPSAoSGVsbG9Mb2NhbEhvbWUpCiAgICAgICAgICAgICAgICAgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9oZWxsb2xvY2FsIik7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkxvb2tlZCB1cCBob21lISEiKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgSGVsbG9Mb2NhbCBobCA9IGxvY2FsSG9tZS5jcmVhdGUoKTsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiR290IHRoZSBFSkIhISIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImludm9raW5nIGhlbGxvIGVqYiIpOwogCiAgICAgICAgICAgICBobC5zYXlIZWxsbygpOwpAQCAtMTA0LDE5ICsxMDQsMTkgQEAKICAgICAgICAgICAgIC8vCiAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2luZyB1cCBlamIgcmVmIGhlbGxvICIpOwotICAgICAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyIAorICAgICAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyCiAgICAgICAgICAgICBvYmpyZWYgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL2hlbGxvMiIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvYmpyZWYgPSAiICsgb2JqcmVmKTsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTG9va2VkIHVwIGhvbWUhISIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBIZWxsb0hvbWUgIGhvbWUyID0gKEhlbGxvSG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cKICAgICAgICAgICAgICAgICAob2JqcmVmLCBIZWxsb0hvbWUuY2xhc3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTmFycm93ZWQgaG9tZSEhIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIEhlbGxvIGhyMiA9IGhvbWUyLmNyZWF0ZSgpOwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJHb3QgdGhlIEVKQiEhIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW52b2tpbmcgaGVsbG8gZWpiIik7CiAKICAgICAgICAgICAgIFN0cmluZyBzYWlkID0gaHIyLnNheUhlbGxvKCk7CkBAIC0xMjgsMTAgKzEyOCwxMCBAQAogICAgICAgICAgICAgSGVsbG9Mb2NhbEhvbWUgIGxvY2FsSG9tZTIgPSAoSGVsbG9Mb2NhbEhvbWUpCiAgICAgICAgICAgICAgICAgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9oZWxsb2xvY2FsMiIpOwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJMb29rZWQgdXAgaG9tZSEhIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIEhlbGxvTG9jYWwgaGwyID0gbG9jYWxIb21lMi5jcmVhdGUoKTsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiR290IHRoZSBFSkIhISIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImludm9raW5nIGhlbGxvMiBlamIiKTsKIAogICAgICAgICAgICAgU3RyaW5nIHNhaWRMb2NhbCA9IGhsMi5zYXlIZWxsbygpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2ptcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvam1zL2J1aWxkLnhtbAppbmRleCA2YzFlYTMyLi40NmFiY2QwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvam1zL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvam1zL2J1aWxkLnhtbApAQCAtNDUsMTEgKzQ1LDExIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgam1zZWpiIChFeGVjdXRlcyB0aGUgZWpiLWptcyBqbXNlamIgdGVzdCkKLQkJCWFudCBqbXNlamIyIChFeGVjdXRlcyB0aGUgZWpiLWptcyBqbXNlamIyIHRlc3QpCi0JCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYi1qbXMgdGVzdHMpCi0JPC9lY2hvPgorICAgIDxlY2hvPgorICAgICAgICBVc2FnZToKKyAgICAgICAgICAgIGFudCBqbXNlamIgKEV4ZWN1dGVzIHRoZSBlamItam1zIGptc2VqYiB0ZXN0KQorICAgICAgICAgICAgYW50IGptc2VqYjIgKEV4ZWN1dGVzIHRoZSBlamItam1zIGptc2VqYjIgdGVzdCkKKyAgICAgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZWpiLWptcyB0ZXN0cykKKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvam1zL2ptc2VqYi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2ptcy9qbXNlamIvYnVpbGQucHJvcGVydGllcwppbmRleCA2MjczOWRhLi5hMmZhODViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvam1zL2ptc2VqYi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9qbXMvam1zZWpiL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIxICsxNSwyMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWptcy1qbXNlamIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9qbXMvam1zZWpiL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9qbXMvam1zZWpiL2J1aWxkLnhtbAppbmRleCAwY2RjNmE2Li44NWEzYzM4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvam1zL2ptc2VqYi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2ptcy9qbXNlamIvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NiwxNCArNDYsMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0hlbGxvKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50Ki5jbGFzcywqKi9IZWxsb0hvbWUuY2xhc3MsKiovSGVsbG8uY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjMsNyArNjMsNyBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJjcmVhdGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTczLDE0ICs3MywxNCBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2ptcy9qbXNlamIvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2ptcy9qbXNlamIvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDU4OWM0ZjMuLjhjYzIxYmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9qbXMvam1zZWpiL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvam1zL2ptc2VqYi9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLlNpbXBsZVJlcG9ydGVyQWRhcHRlcjsKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CkBAIC0zMywxMSArMzMsMTEgQEAKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImVqYi1tZGItam1zZWpiSUQiKTsKLSAgICB9ICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogCiAgICAgICAgIFN0cmluZyBlamJOYW1lc1tdID0geyAiZWpicy9oZWxsb2JtdCIsICJlamJzL2hlbGxvY210IiB9OwpAQCAtNDUsNTYgKzQ1LDU2IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgZWpiTmFtZXMubGVuZ3RoOyBpKysgKSB7CiAgICAgICAgICAgICAgICAgZWpiTmFtZSA9IGVqYk5hbWVzW2ldOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29raW5nIHVwIGVqYiByZWYgIiArIGVqYk5hbWUpOwotICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBFSkIgdXNpbmcgZmFjdG9yeSBmcm9tIGNvbnRhaW5lciAKKyAgICAgICAgICAgICAgICAvLyBjcmVhdGUgRUpCIHVzaW5nIGZhY3RvcnkgZnJvbSBjb250YWluZXIKICAgICAgICAgICAgICAgICAvLyBqYXZhLmxhbmcuT2JqZWN0IG9ianJlZiA9IGljLmxvb2t1cCgiaGVsbG9BcHAvSGVsbG8iKTsKICAgICAgICAgICAgICAgICBqYXZhLmxhbmcuT2JqZWN0IG9ianJlZiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi8iK2VqYk5hbWUpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tZWpiIHN0dWItLS0iICsgb2JqcmVmLmdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKSk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS1lamIgY2xhc3NuYW1lLS0tIiArIG9ianJlZi5nZXRDbGFzcygpLmdldE5hbWUoKSk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS1IZWxsb0hvbWUtLS0iICsgSGVsbG9Ib21lLmNsYXNzLmdldENsYXNzTG9hZGVyKCkpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTG9va2VkIHVwIGhvbWUhISIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgSGVsbG9Ib21lICBob21lID0gKEhlbGxvSG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3coCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqcmVmLCBIZWxsb0hvbWUuY2xhc3MpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTmFycm93ZWQgaG9tZSEhIik7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgCisKKwogICAgICAgICAgICAgICAgIEhlbGxvIGhyID0gaG9tZS5jcmVhdGUoaGVsbG9TdHIpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiR290IHRoZSBFSkIhISIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gaW52b2tlIG1ldGhvZCBvbiB0aGUgRUpCCiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBc2tpbmcgZWpiIHRvIHNlbmQgYSBtZXNzYWdlIik7CiAgICAgICAgICAgICAgICAgU3RyaW5nIG1zZ1RleHQgPSAiTG9vayBtYSwgSSByZWNlaXZlZCBhIEpNUyBtZXNzYWdlISEhIjsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAgU3RyaW5nIHJlc3VsdCA9IGhyLnNlbmRNZXNzYWdlMShtc2dUZXh0KTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc3VsdCBmcm9tIHNlbmRNZXNzYWdlID0gIiArIHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBc2tpbmcgZWpiIHRvIHJlY2VpdmUgYSBtZXNzYWdlIik7CiAgICAgICAgICAgICAgICAgaHIucmVjZWl2ZU1lc3NhZ2UxKCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLwogICAgICAgICAgICAgICAgIHJlc3VsdCA9IGhyLnNlbmRNZXNzYWdlMihtc2dUZXh0KTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc3VsdCBmcm9tIHNlbmRNZXNzYWdlID0gIiArIHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBc2tpbmcgZWpiIHRvIHJlY2VpdmUgYSBtZXNzYWdlIik7CiAgICAgICAgICAgICAgICAgaHIucmVjZWl2ZU1lc3NhZ2UyKCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLwogICAgICAgICAgICAgICAgIHJlc3VsdCA9IGhyLnNlbmRNZXNzYWdlMyhtc2dUZXh0KTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc3VsdCBmcm9tIHNlbmRNZXNzYWdlID0gIiArIHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBc2tpbmcgZWpiIHRvIHJlY2VpdmUgYSBtZXNzYWdlIik7CiAgICAgICAgICAgICAgICAgaHIucmVjZWl2ZU1lc3NhZ2UzKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLyogIGNvbW1lbnQgb3V0IAorCisgICAgICAgICAgICAgICAgLyogIGNvbW1lbnQgb3V0CiAgICAgICAgICAgICAgICAgaHIuc2VuZE1lc3NhZ2U0UGFydDEobXNnVGV4dCk7CiAgICAgICAgICAgICAgICAgaHIuc2VuZE1lc3NhZ2U0UGFydDIobXNnVGV4dCk7CiAKICAgICAgICAgICAgICAgICBoci5yZWNlaXZlTWVzc2FnZTRQYXJ0MSgpOwogICAgICAgICAgICAgICAgIGhyLnJlY2VpdmVNZXNzYWdlNFBhcnQyKCk7CiAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGhyLnNlbmRBbmRSZWNlaXZlTWVzc2FnZSgpOwogCiAgICAgICAgICAgICAgICAgaHIuc2VuZEFuZFJlY2VpdmVSb2xsYmFjaygpOwpAQCAtMTAzLDE1ICsxMDMsMTUgQEAKICAgICAgICAgICAgICAgICBoci5zZW5kTWVzc2FnZVJvbGxiYWNrKG1zZ1RleHQgKyAicm9sbGJhY2siKTsKICAgICAgICAgICAgICAgICBoci5yZWNlaXZlTWVzc2FnZVJvbGxiYWNrKCk7CiAKLSAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiam1zZWpiICIgKyBlamJOYW1lLCAKKyAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiam1zZWpiICIgKyBlamJOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiam1zZWpiICIgKyBlamJOYW1lLCBzdGF0LkZBSUwpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgIAlyZXR1cm47CisKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGZpbmFsIHN0YXRpYyBTdHJpbmcgaGVsbG9TdHIgPSAiSGVsbG8gV29ybGQhIjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9qbXMvam1zZWpiL2VqYi9IZWxsb0JlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9qbXMvam1zZWpiL2VqYi9IZWxsb0JlYW4uamF2YQppbmRleCA3ZTdmNGQ2Li45ZDAzOWE0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvam1zL2ptc2VqYi9lamIvSGVsbG9CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2ptcy9qbXNlamIvZWpiL0hlbGxvQmVhbi5qYXZhCkBAIC0xNiw3ICsxNiw3IEBACiAKIHBhY2thZ2UgY29tLnN1bi5zMWFzZGV2LmVqYi5qbXMuam1zZWpiOwogCi1pbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOyAKK2ltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkJlYW47CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQ7CiBpbXBvcnQgamFrYXJ0YS5lamIuRUpCRXhjZXB0aW9uOwpAQCAtMzUsNyArMzUsNyBAQAogICAgIHB1YmxpYyBIZWxsb0JlYW4oKSB7fQogCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKFN0cmluZyBzdHIpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gZWpiQ3JlYXRlICEhIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBlamJDcmVhdGUgISEiKTsKICAgICAgICAgdGhpcy5zdHIgPSBzdHI7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb250ZXh0IGNvbnRleHQgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKQEAgLTQ3LDEzICs0NywxMyBAQAogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG9FSkIgaGFzIENPTlRBSU5FUiBNQU5BR0VEIFRYIik7CiAgICAgICAgICAgICB9CiAKLQkgICAgU3RyaW5nIG5hbWUgPSAoU3RyaW5nKSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi91c2VyIik7Ci0JICAgIERvdWJsZSBkID0gKERvdWJsZSkgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvbnVtYmVyIik7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvIEVKQiAtIHNheWluZyBoZWxsbyB0byAiICsgbmFtZSArIAotCQkJICAgICIsbnVtYmVyIGlzICIgKyBkKTsKKyAgICAgICAgU3RyaW5nIG5hbWUgPSAoU3RyaW5nKSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi91c2VyIik7CisgICAgICAgIERvdWJsZSBkID0gKERvdWJsZSkgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvbnVtYmVyIik7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvIEVKQiAtIHNheWluZyBoZWxsbyB0byAiICsgbmFtZSArCisgICAgICAgICAgICAgICAgIixudW1iZXIgaXMgIiArIGQpOwogICAgICAgICAgICAgcXVldWUgPSAoUXVldWUpIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L2ptcy9RdWV1ZU5hbWUiKTsKIAotICAgICAgICAgICAgcWNGYWN0b3J5ID0gCisgICAgICAgICAgICBxY0ZhY3RvcnkgPQogICAgICAgICAgICAgICAgIChRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5KSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9qbXMvTXlRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5Iik7CiAKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewpAQCAtMTAwLDcgKzEwMCw3IEBACiAgICAgICAgICAgICAgICAgc2MuZ2V0VXNlclRyYW5zYWN0aW9uKCkuY29tbWl0KCk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIE5vdyBtYWtlIHN1cmUgdGhhdCBldmVuIHRob3VnaCB0aGUgZ2xvYmFsIHRyYW5zYWN0aW9uIAorICAgICAgICAgICAgLy8gTm93IG1ha2Ugc3VyZSB0aGF0IGV2ZW4gdGhvdWdoIHRoZSBnbG9iYWwgdHJhbnNhY3Rpb24KICAgICAgICAgICAgIC8vIGlzIG92ZXIsIGNhbGxpbmcgY29tbWl0IHJlc3VsdHMgaW4gYW4gZXhjZXB0aW9uLgogICAgICAgICAgICAgLy8gc2luY2Ugd2UncmUgaW4gYW4gZWpiLgogICAgICAgICAgICAgdHJ5IHsKQEAgLTE1Miw3ICsxNTIsNyBAQAogICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKGpha2FydGEuam1zLkpNU0V4Y2VwdGlvbiBqMikgewogICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEpNU0V4Y2VwdGlvbigiR290IHdyb25nIGptc2V4Y2VwdGlvbiIpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLmdldE1lc3NhZ2VMaXN0ZW5lcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEpNU0V4Y2VwdGlvbgpAQCAtMTg2LDcgKzE4Niw3IEBACiAgICAgICAgICAgICBRdWV1ZVNlc3Npb24gc2Vzc2lvbiA9IGNvbm5lY3Rpb24uY3JlYXRlUXVldWVTZXNzaW9uKHRydWUsIDApOwogCiAgICAgICAgICAgICBzZW5kTWVzc2FnZUludGVybmFsKHNlc3Npb24sIG1zZyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgc2Vzc2lvbi5jbG9zZSgpOwogCiAgICAgICAgICAgICBpZiggYmVhbk1hbmFnZWRUeCApIHsKQEAgLTIxMyw3ICsyMTMsNyBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIENyZWF0ZSBhIHNlc3Npb24gYW5kIHN0b3JlIGl0IGFzIHBhcnQgb2YgCisgICAgICogQ3JlYXRlIGEgc2Vzc2lvbiBhbmQgc3RvcmUgaXQgYXMgcGFydCBvZgogICAgICAqIHRoZSBlamIncyBzdGF0ZS4gIFRoZW4gc2VuZCBhIG1lc3NhZ2UuCiAgICAgICogQ29ycmVzcG9uZGluZyByZWN2IG1ldGhvZCB3aWxsIGNsb3NlIHRoZSBzZXNzaW9uLgogICAgICAqLwpAQCAtMjQ3LDcgKzI0Nyw3IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gbmUpIHt9CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwotICAgICAgICB9IAorICAgICAgICB9CiAgICAgICAgIHJldHVybiBtc2c7CiAgICAgfQogCkBAIC0yNTksNyArMjU5LDcgQEAKICAgICAgICAgUXVldWVDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgY29ubmVjdGlvbiA9IHFjRmFjdG9yeS5jcmVhdGVRdWV1ZUNvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgUXVldWVTZXNzaW9uIHNlc3Npb24gPSBjb25uZWN0aW9uLmNyZWF0ZVF1ZXVlU2Vzc2lvbih0cnVlLCAwKTsKIAogICAgICAgICAgICAgaWYoIGJlYW5NYW5hZ2VkVHggKSB7CkBAIC0zMDIsNyArMzAyLDcgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY29ubmVjdGlvbiA9IHFjRmFjdG9yeS5jcmVhdGVRdWV1ZUNvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgUXVldWVTZXNzaW9uIHNlc3Npb24gPSBjb25uZWN0aW9uLmNyZWF0ZVF1ZXVlU2Vzc2lvbih0cnVlLCAwKTsKIAogICAgICAgICAgICAgY29ubmVjdGlvbi5zdGFydCgpOwpAQCAtMzc0LDcgKzM3NCw3IEBACiAgICAgLyoqCiAgICAgICogU2VuZCBhIG1lc3NhZ2UgYnV0IGRvbid0IGNvbW1pdC4gIHNlbmRNZXNzYWdlUGFydDIKICAgICAgKiB3aWxsIGNvbW1pdC4gIFRoaXMgbWV0aG9kIHdpbGwgb25seSB3b3JrIHdpdGgKLSAgICAgKiB3aGVuIGJlYW4gaGFzIGJlYW4gbWFuYWdlZCB0eC4gIAorICAgICAqIHdoZW4gYmVhbiBoYXMgYmVhbiBtYW5hZ2VkIHR4LgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgc2VuZE1lc3NhZ2U0UGFydDEoU3RyaW5nIG1zZykgdGhyb3dzIEVKQkV4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7CkBAIC0zODYsNyArMzg2LDcgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgc2F2ZWRDb25uZWN0aW9uID0gcWNGYWN0b3J5LmNyZWF0ZVF1ZXVlQ29ubmVjdGlvbigpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBzYXZlZFNlc3Npb24gPSBzYXZlZENvbm5lY3Rpb24uY3JlYXRlUXVldWVTZXNzaW9uKHRydWUsIDApOwogICAgICAgICAgICAgc2VuZE1lc3NhZ2VJbnRlcm5hbChzYXZlZFNlc3Npb24sIG1zZyk7CiAKQEAgLTQwNCw3ICs0MDQsNyBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIG5lKSB7fQogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlKTsKLSAgICAgICAgfSAKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gbXNnOwogICAgIH0KIApAQCAtNDM0LDcgKzQzNCw3IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gbmUpIHt9CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwotICAgICAgICB9IAorICAgICAgICB9CiAgICAgICAgIHJldHVybiBtc2c7CiAgICAgfQogCkBAIC00NDcsOSArNDQ3LDkgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gc2VuZE1lc3NhZ2VSb2xsYmFjayIpOwogICAgICAgICAgICAgaWYoIGJlYW5NYW5hZ2VkVHggKSB7CiAgICAgICAgICAgICAgICAgc2MuZ2V0VXNlclRyYW5zYWN0aW9uKCkuYmVnaW4oKTsKLSAgICAgICAgICAgIH0gCisgICAgICAgICAgICB9CiAgICAgICAgICAgICBzYXZlZENvbm5lY3Rpb24gPSBxY0ZhY3RvcnkuY3JlYXRlUXVldWVDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIHNhdmVkU2Vzc2lvbiA9IHNhdmVkQ29ubmVjdGlvbi5jcmVhdGVRdWV1ZVNlc3Npb24odHJ1ZSwgMCk7CiAgICAgICAgICAgICBzZW5kTWVzc2FnZUludGVybmFsKHNhdmVkU2Vzc2lvbiwgbXNnKTsKIApAQCAtNDczLDcgKzQ3Myw3IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gbmUpIHt9CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwotICAgICAgICB9IAorICAgICAgICB9CiAgICAgICAgIHJldHVybiBtc2c7CiAgICAgfQogCkBAIC00ODksNyArNDg5LDcgQEAKICAgICAgICAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IHJlY2VpdmVyLnJlY2VpdmVOb1dhaXQoKTsKIAogICAgICAgICAgICAgaWYoIG1lc3NhZ2UgIT0gbnVsbCApIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJTaG91bGRuJ3QgaGF2ZSBnb3R0ZW4gbXNnICIgKyAKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJTaG91bGRuJ3QgaGF2ZSBnb3R0ZW4gbXNnICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IERJRE4nVCByZWNlaXZlIG1zZyIpOwpAQCAtNTEwLDcgKzUxMCw3IEBACiAgICAgLyoqCiAgICAgICogUmVjZWl2ZSBhIG1lc3NhZ2UgYnV0IGRvbid0IGNvbW1pdC4gIHJlY3ZNZXNzYWdlUGFydDIKICAgICAgKiB3aWxsIGNvbW1pdC4gIFRoaXMgbWV0aG9kIHdpbGwgb25seSB3b3JrIHdpdGgKLSAgICAgKiB3aGVuIGJlYW4gaGFzIGJlYW4gbWFuYWdlZCB0eC4gIAorICAgICAqIHdoZW4gYmVhbiBoYXMgYmVhbiBtYW5hZ2VkIHR4LgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJlY2VpdmVNZXNzYWdlNFBhcnQxKCkgdGhyb3dzIEVKQkV4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7CkBAIC01MjAsNyArNTIwLDcgQEAKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInNraXBwaW5nIHJlY3ZNZXNzYWdlNFBhcnQxIGIvYyBvZiBDTVQiKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgc2F2ZWRDb25uZWN0aW9uLnN0YXJ0KCk7CiAgICAgICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPSByZWN2TWVzc2FnZUludGVybmFsKHNhdmVkU2Vzc2lvbik7CiAKQEAgLTUzOCw5ICs1MzgsOSBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIG5lKSB7fQogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlKTsKLSAgICAgICAgfSAKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbW1pdCB0aGUgcmVjZWl2ZSB0aGF0IHdhcyBkb25lIGluIHJlY3ZNZXNzYWdlUGFydDEKICAgICAgKi8KQEAgLTU4NiwyMSArNTg2LDIxIEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGNvbm5lY3Rpb24gPSBxY0ZhY3RvcnkuY3JlYXRlUXVldWVDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIFF1ZXVlU2Vzc2lvbiBzZXNzaW9uID0gY29ubmVjdGlvbi5jcmVhdGVRdWV1ZVNlc3Npb24odHJ1ZSwgMCk7CiAKICAgICAgICAgICAgIFN0cmluZyBtc2dUZXh0ID0gInNlbmRhbmRyZWNlaXZlIjsKICAgICAgICAgICAgIHNlbmRNZXNzYWdlSW50ZXJuYWwoc2Vzc2lvbiwgbXNnVGV4dCk7CiAgICAgICAgICAgICBzYy5nZXRVc2VyVHJhbnNhY3Rpb24oKS5jb21taXQoKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VudCBtZXNzYWdlICIgKyBtc2dUZXh0KTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLwogCiAgICAgICAgICAgICBjb25uZWN0aW9uLnN0YXJ0KCk7CiAgICAgICAgICAgICBzYy5nZXRVc2VyVHJhbnNhY3Rpb24oKS5iZWdpbigpOwogICAgICAgICAgICAgcmVjdk1lc3NhZ2VJbnRlcm5hbChzZXNzaW9uKTsKICAgICAgICAgICAgIHNjLmdldFVzZXJUcmFuc2FjdGlvbigpLmNvbW1pdCgpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHRyeSB7CkBAIC02MzEsNyArNjMxLDcgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY29ubmVjdGlvbiA9IHFjRmFjdG9yeS5jcmVhdGVRdWV1ZUNvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgUXVldWVTZXNzaW9uIHNlc3Npb24gPSBjb25uZWN0aW9uLmNyZWF0ZVF1ZXVlU2Vzc2lvbih0cnVlLCAwKTsKIAogICAgICAgICAgICAgU3RyaW5nIG1zZ1RleHQgPSAic2VuZGFuZHJlY2VpdmVyb2xsYmFjayI7CkBAIC02ODUsNyArNjg1LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgewotCXRoaXMuc2MgPSBzYzsKKyAgICB0aGlzLnNjID0gc2M7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7fQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2ptcy9qbXNlamIyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvam1zL2ptc2VqYjIvYnVpbGQucHJvcGVydGllcwppbmRleCA5MjI5MzJlLi4xNDUxMjc1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvam1zL2ptc2VqYjIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvam1zL2ptc2VqYjIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItam1zLWptc2VqYjIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9qbXMvam1zZWpiMi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvam1zL2ptc2VqYjIvYnVpbGQueG1sCmluZGV4IGYyMmMyNGYuLjMzZmJiMGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9qbXMvam1zZWpiMi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2ptcy9qbXNlamIyL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTQgKzQ2LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9IZWxsbyouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudCouY2xhc3MsKiovSGVsbG9Ib21lLmNsYXNzLCoqL0hlbGxvLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYzLDcgKzYzLDcgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iY3JlYXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC03MywxNCArNzMsMTQgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9qbXMvam1zZWpiMi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvam1zL2ptc2VqYjIvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGQyOTgxMjkuLjJkN2ZkZmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9qbXMvam1zZWpiMi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2ptcy9qbXNlamIyL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuU2ltcGxlUmVwb3J0ZXJBZGFwdGVyOwogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTMzLDQzICszMyw0MyBAQAogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiZWpiLW1kYi1qbXNlamIySUQiKTsKLSAgICB9ICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogCiAgICAgICAgIFN0cmluZyBlamJOYW1lID0gImVqYnMvaGVsbG9ibXQiOwogCiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29raW5nIHVwIGVqYiByZWYgIiArIGVqYk5hbWUpOwotICAgICAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyIAorICAgICAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyCiAKICAgICAgICAgICAgIGphdmEubGFuZy5PYmplY3Qgb2JqcmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52LyIrZWpiTmFtZSk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLWVqYiBzdHViLS0tIiArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS1lamIgc3R1Yi0tLSIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ianJlZi5nZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS1lamIgY2xhc3NuYW1lLS0tIiArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS1lamIgY2xhc3NuYW1lLS0tIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqcmVmLmdldENsYXNzKCkuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tSGVsbG9Ib21lLS0tIiArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS1IZWxsb0hvbWUtLS0iICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIZWxsb0hvbWUuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKSk7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkxvb2tlZCB1cCBob21lISEiKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBIZWxsb0hvbWUgIGhvbWUgPSAoSGVsbG9Ib21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdwogICAgICAgICAgICAgICAgIChvYmpyZWYsIEhlbGxvSG9tZS5jbGFzcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJOYXJyb3dlZCBob21lISEiKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgSGVsbG8gaHIgPSBob21lLmNyZWF0ZShoZWxsb1N0cik7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkdvdCB0aGUgRUpCISEiKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgLy8gaW52b2tlIG1ldGhvZCBvbiB0aGUgRUpCCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFza2luZyBlamIgdG8gc2VuZCBhIG1lc3NhZ2UiKTsKICAgICAgICAgICAgIFN0cmluZyBtc2dUZXh0ID0gInRoaXMgaXMgdGhlIGVqYi1qbXMtam1zZWpiMiB0ZXN0IjsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTdHJpbmcgcmVzdWx0ID0gaHIuc2VuZE1lc3NhZ2VOb0NvbW1pdFBhcnQxKG1zZ1RleHQpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXN1bHQgZnJvbSBzZW5kTWVzc2FnZSA9ICIgKyByZXN1bHQpOwogCkBAIC04Miw4ICs4Miw4IEBACiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImptc2VqYjIgIiArIGVqYk5hbWUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgCXJldHVybjsKKworICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgZmluYWwgc3RhdGljIFN0cmluZyBoZWxsb1N0ciA9ICJIZWxsbyBXb3JsZCEiOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2ptcy9qbXNlamIyL2VqYi9IZWxsb0JlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9qbXMvam1zZWpiMi9lamIvSGVsbG9CZWFuLmphdmEKaW5kZXggMjBhZWVlYi4uZWM0NzdjNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL2ptcy9qbXNlamIyL2VqYi9IZWxsb0JlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvam1zL2ptc2VqYjIvZWpiL0hlbGxvQmVhbi5qYXZhCkBAIC0xNiw3ICsxNiw3IEBACiAKIHBhY2thZ2UgY29tLnN1bi5zMWFzZGV2LmVqYi5qbXMuam1zZWpiMjsKIAotaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsgCitpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25CZWFuOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0OwogaW1wb3J0IGpha2FydGEuZWpiLkVKQkV4Y2VwdGlvbjsKQEAgLTM0LDcgKzM0LDcgQEAKICAgICBwdWJsaWMgSGVsbG9CZWFuKCkge30KIAogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZShTdHJpbmcgc3RyKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIGVqYkNyZWF0ZSAhISIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gZWpiQ3JlYXRlICEhIik7CiAgICAgICAgIHRoaXMuc3RyID0gc3RyOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ29udGV4dCBjb250ZXh0ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CkBAIC00Myw3ICs0Myw3IEBACiAKICAgICAgICAgICAgIHF1ZXVlID0gKFF1ZXVlKSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9qbXMvUXVldWVOYW1lIik7CiAKLSAgICAgICAgICAgIHFjRmFjdG9yeSA9IChRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5KSAKKyAgICAgICAgICAgIHFjRmFjdG9yeSA9IChRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5KQogICAgICAgICAgICAgICAgIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L2ptcy9NeVF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkiKTsKIAogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CkBAIC03NSw3ICs3NSw3IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gTk9URSA6IGxlYXZlIGNvbm5lY3Rpb24gYW5kIHNlc3Npb24gb3Blbi4gIHRoZXkgd2lsbCBiZSAKKyAgICAgICAgLy8gTk9URSA6IGxlYXZlIGNvbm5lY3Rpb24gYW5kIHNlc3Npb24gb3Blbi4gIHRoZXkgd2lsbCBiZQogICAgICAgICAvLyByZS1lbmxpc3RlZCB3aGVuIHRoZSBuZXh0IGJ1c2luZXNzIG1ldGhvZCBpcyBjYWxsZWQgc2luY2UKICAgICAgICAgLy8gdGhlIHRyYW5zYWN0aW9uIGlzIHN0aWxsIGFjdGl2ZS4KIApAQCAtMTIyLDcgKzEyMiw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgc2VuZE1lc3NhZ2VJbnRlcm5hbChRdWV1ZVNlc3Npb24gc2Vzc2lvbiwgU3RyaW5nIG1zZykgCisgICAgcHJpdmF0ZSB2b2lkIHNlbmRNZXNzYWdlSW50ZXJuYWwoUXVldWVTZXNzaW9uIHNlc3Npb24sIFN0cmluZyBtc2cpCiAgICAgICAgIHRocm93cyBKTVNFeGNlcHRpb24gewogICAgICAgICAvLyBDcmVhdGUgYSBtZXNzYWdlIHByb2R1Y2VyLgogICAgICAgICBRdWV1ZVNlbmRlciBzZW5kZXIgPSBzZXNzaW9uLmNyZWF0ZVNlbmRlcihxdWV1ZSk7CkBAIC0xMzMsNyArMTMzLDcgQEAKICAgICAgICAgc2VuZGVyLnNlbmQobWVzc2FnZSk7CiAgICAgfQogCi0gICAgcHJpdmF0ZSBNZXNzYWdlIHJlY3ZNZXNzYWdlSW50ZXJuYWwoUXVldWVTZXNzaW9uIHNlc3Npb24pIAorICAgIHByaXZhdGUgTWVzc2FnZSByZWN2TWVzc2FnZUludGVybmFsKFF1ZXVlU2Vzc2lvbiBzZXNzaW9uKQogICAgICAgICB0aHJvd3MgSk1TRXhjZXB0aW9uIHsKICAgICAgICAgLy8gQ3JlYXRlIGEgbWVzc2FnZSBjb25zdW1lcgogICAgICAgICBRdWV1ZVJlY2VpdmVyIHJlY2VpdmVyID0gc2Vzc2lvbi5jcmVhdGVSZWNlaXZlcihxdWV1ZSk7CkBAIC0xNDMsNyArMTQzLDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgewotCXRoaXMuc2MgPSBzYzsKKyAgICB0aGlzLnNjID0gc2M7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7fQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL21kYi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvbWRiL2J1aWxkLnhtbAppbmRleCA0ZmRhOWU0Li40YjE0YjE0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvbWRiL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvbWRiL2J1aWxkLnhtbApAQCAtMzAsOSArMzAsOSBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiPgogCi0gICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY210Ii8+IAotICAgICAgIDxhbnRjYWxsIHRhcmdldD0ibXNnYmVhbiIvPiAKLSAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InNpbmdsZXRvbiIvPiAKKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbXQiLz4KKyAgICAgICA8YW50Y2FsbCB0YXJnZXQ9Im1zZ2JlYW4iLz4KKyAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InNpbmdsZXRvbiIvPgogCiAgICAgPC90YXJnZXQ+CiAKQEAgLTU1LDEyICs1NSwxMiBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+Ci0JCVVzYWdlOgotCQkJYW50IGNtdCAoRXhlY3V0ZXMgdGhlIGVqYi1tZGIgY210IHRlc3QpCi0JCQlhbnQgbXNnYmVhbiAoRXhlY3V0ZXMgdGhlIGVqYi1tZGIgbXNnYmVhbiB0ZXN0KQotCQkJYW50IHNpbmdsZXRvbiAoRXhlY3V0ZXMgdGhlIGVqYi1tZGIgc2luZ2xldG9uIHRlc3QpCi0JCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYi1tZGIgdGVzdHMpCi0JPC9lY2hvPgorICAgIDxlY2hvPgorICAgICAgICBVc2FnZToKKyAgICAgICAgICAgIGFudCBjbXQgKEV4ZWN1dGVzIHRoZSBlamItbWRiIGNtdCB0ZXN0KQorICAgICAgICAgICAgYW50IG1zZ2JlYW4gKEV4ZWN1dGVzIHRoZSBlamItbWRiIG1zZ2JlYW4gdGVzdCkKKyAgICAgICAgICAgIGFudCBzaW5nbGV0b24gKEV4ZWN1dGVzIHRoZSBlamItbWRiIHNpbmdsZXRvbiB0ZXN0KQorICAgICAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamItbWRiIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9tZGIvY210L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvbWRiL2NtdC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDJiYjQzYjkuLmNhYTg5NDIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9tZGIvY210L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL21kYi9jbXQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItbWRiLWNtdCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL21kYi9jbXQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL21kYi9jbXQvYnVpbGQueG1sCmluZGV4IDViOWIyMDcuLmRmZmZmMjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9tZGIvY210L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvbWRiL2NtdC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDE0ICs0NiwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkJlYW4qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQqLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYzLDcgKzYzLDcgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iY3JlYXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC03NSwxNCArNzUsMTQgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIxIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9tZGIvY210L2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9tZGIvY210L2NsaWVudC9DbGllbnQuamF2YQppbmRleCBlYzAzMWUwLi5jYmI4ZDA5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvbWRiL2NtdC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL21kYi9jbXQvY2xpZW50L0NsaWVudC5qYXZhCkBAIC01MSw3ICs1MSw3IEBACiAKICAgICBwcml2YXRlIGludCBudW1NZXNzYWdlcyA9IDI7CiAgICAgcHVibGljIENsaWVudChTdHJpbmdbXSBhcmdzKSB7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKCBhcmdzLmxlbmd0aCA9PSAxICkgewogICAgICAgICAgICAgbnVtTWVzc2FnZXMgPSBuZXcgSW50ZWdlcihhcmdzWzBdKS5pbnRWYWx1ZSgpOwogICAgICAgICB9CkBAIC02MCw5ICs2MCw5IEBACiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgc2V0dXAoKTsKLQkgICAgZG9UZXN0KCJqbXMvZWpiX21kYl9jbXRfSW5RdWV1ZSIsIG51bU1lc3NhZ2VzKTsKLQkgICAgLy8gQEBAIG1lc3NhZ2UtZGVzdGluYXRpb24tcmVmIHN1cHBvcnQKLQkgICAgLy8gb1Rlc3QoImphdmE6Y29tcC9lbnYvam1zL01zZ0JlYW5RdWV1ZSIsIG51bU1lc3NhZ2VzKTsKKyAgICAgICAgZG9UZXN0KCJqbXMvZWpiX21kYl9jbXRfSW5RdWV1ZSIsIG51bU1lc3NhZ2VzKTsKKyAgICAgICAgLy8gQEBAIG1lc3NhZ2UtZGVzdGluYXRpb24tcmVmIHN1cHBvcnQKKyAgICAgICAgLy8gb1Rlc3QoImphdmE6Y29tcC9lbnYvam1zL01zZ0JlYW5RdWV1ZSIsIG51bU1lc3NhZ2VzKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJjbXQgbWFpbiIsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2goVGhyb3dhYmxlIHQpIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJjbXQgbWFpbiIsIHN0YXQuRkFJTCk7CkBAIC03NCwzMSArNzQsMzEgQEAKIAogICAgIHB1YmxpYyB2b2lkIHNldHVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIGNvbnRleHQgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgCi0gICAgICAgIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcXVldWVDb25GYWN0b3J5ID0gCisKKyAgICAgICAgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxdWV1ZUNvbkZhY3RvcnkgPQogICAgICAgICAgICAgKFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkpIGNvbnRleHQubG9va3VwCiAgICAgICAgICAgICAoImphdmE6Y29tcC9lbnYvRm9vQ0YiKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIHF1ZXVlQ29uID0gcXVldWVDb25GYWN0b3J5LmNyZWF0ZVF1ZXVlQ29ubmVjdGlvbigpOwogCiAgICAgICAgIHF1ZXVlU2Vzc2lvbiA9IHF1ZXVlQ29uLmNyZWF0ZVF1ZXVlU2Vzc2lvbgotICAgICAgICAgICAgKGZhbHNlLCBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UpOyAKKyAgICAgICAgICAgIChmYWxzZSwgU2Vzc2lvbi5BVVRPX0FDS05PV0xFREdFKTsKIAogICAgICAgICAvLyBQcm9kdWNlciB3aWxsIGJlIHNwZWNpZmllZCB3aGVuIGFjdHVhbCBtc2cgaXMgc2VudC4KLSAgICAgICAgcXVldWVTZW5kZXIgPSBxdWV1ZVNlc3Npb24uY3JlYXRlU2VuZGVyKG51bGwpOyAgICAgICAgCisgICAgICAgIHF1ZXVlU2VuZGVyID0gcXVldWVTZXNzaW9uLmNyZWF0ZVNlbmRlcihudWxsKTsKIAogICAgICAgICBxdWV1ZUNvbi5zdGFydCgpOwogCiAgICAgICAgIC8qCi0gICAgICAgIFRvcGljQ29ubmVjdGlvbkZhY3RvcnkgdG9waWNDb25GYWN0b3J5ID0gCisgICAgICAgIFRvcGljQ29ubmVjdGlvbkZhY3RvcnkgdG9waWNDb25GYWN0b3J5ID0KICAgICAgICAgICAgIChUb3BpY0Nvbm5lY3Rpb25GYWN0b3J5KSBjb250ZXh0Lmxvb2t1cAogICAgICAgICAgICAgKCJqbXMvVG9waWNDb25uZWN0aW9uRmFjdG9yeSIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgIHRvcGljQ29uID0gdG9waWNDb25GYWN0b3J5LmNyZWF0ZVRvcGljQ29ubmVjdGlvbigpOwogCi0gICAgICAgIHRvcGljU2Vzc2lvbiA9IAorICAgICAgICB0b3BpY1Nlc3Npb24gPQogICAgICAgICAgICAgdG9waWNDb24uY3JlYXRlVG9waWNTZXNzaW9uKGZhbHNlLCBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UpOwotICAgICAgICAgICAgCisKICAgICAgICAgLy8gUHJvZHVjZXIgd2lsbCBiZSBzcGVjaWZpZWQgd2hlbiBhY3R1YWwgbXNnIGlzIHB1Ymxpc2hlZC4KICAgICAgICAgdG9waWNQdWJsaXNoZXIgPSB0b3BpY1Nlc3Npb24uY3JlYXRlUHVibGlzaGVyKG51bGwpOwogICAgICAgICAqLwpAQCAtMTE0LDE4ICsxMTQsMTggQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHNlbmRNc2dzKGpha2FydGEuam1zLlF1ZXVlIHF1ZXVlLCBNZXNzYWdlIG1zZywgaW50IG51bSkgCisgICAgcHVibGljIHZvaWQgc2VuZE1zZ3MoamFrYXJ0YS5qbXMuUXVldWUgcXVldWUsIE1lc3NhZ2UgbXNnLCBpbnQgbnVtKQogICAgICAgICB0aHJvd3MgSk1TRXhjZXB0aW9uIHsKICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bTsgaSsrKSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlbmRpbmcgbWVzc2FnZSAiICsgaSArICIgdG8gIiArIHF1ZXVlICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlbmRpbmcgbWVzc2FnZSAiICsgaSArICIgdG8gIiArIHF1ZXVlICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGF0IHRpbWUgIiArIFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsKICAgICAgICAgICAgIHF1ZXVlU2VuZGVyLnNlbmQocXVldWUsIG1zZyk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlbnQgbWVzc2FnZSAiICsgaSArICIgdG8gIiArIHF1ZXVlICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlbnQgbWVzc2FnZSAiICsgaSArICIgdG8gIiArIHF1ZXVlICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGF0IHRpbWUgIiArIFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHNlbmRNc2dzKFRvcGljIHRvcGljLCBNZXNzYWdlIG1zZywgaW50IG51bSkgCisgICAgcHVibGljIHZvaWQgc2VuZE1zZ3MoVG9waWMgdG9waWMsIE1lc3NhZ2UgbXNnLCBpbnQgbnVtKQogICAgICAgICB0aHJvd3MgSk1TRXhjZXB0aW9uIHsKICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bTsgaSsrKSB7CiAgICAgICAgICAgICAvLyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUHVibGlzaGluZyBtZXNzYWdlICIgKyBpICsgIiB0byAiICsgcXVldWUpOwpAQCAtMTM0LDExICsxMzQsMTEgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmcgZGVzdE5hbWUsIGludCBudW0pIAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmcgZGVzdE5hbWUsIGludCBudW0pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogCiAgICAgICAgIERlc3RpbmF0aW9uIGRlc3QgPSAoRGVzdGluYXRpb24pIGNvbnRleHQubG9va3VwKGRlc3ROYW1lKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IHF1ZXVlU2Vzc2lvbi5jcmVhdGVUZXh0TWVzc2FnZShkZXN0TmFtZSk7CiAgICAgICAgIC8vICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPSB0b3BpY1Nlc3Npb24uY3JlYXRlVGV4dE1lc3NhZ2UoZGVzdE5hbWUpOwogICAgICAgICBtZXNzYWdlLnNldEJvb2xlYW5Qcm9wZXJ0eSgiZmxhZyIsIHRydWUpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL21kYi9jbXQvZWpiL01lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvbWRiL2NtdC9lamIvTWVzc2FnZUJlYW4uamF2YQppbmRleCAwMTU0ZTIyLi42MWVhM2M0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvbWRiL2NtdC9lamIvTWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvbWRiL2NtdC9lamIvTWVzc2FnZUJlYW4uamF2YQpAQCAtMjEsNyArMjEsNyBAQAogaW1wb3J0IGpha2FydGEuZWpiLio7CiBpbXBvcnQgamF2YXgubmFtaW5nLio7CiAKLXB1YmxpYyBjbGFzcyBNZXNzYWdlQmVhbiAgCitwdWJsaWMgY2xhc3MgTWVzc2FnZUJlYW4KICAgICBpbXBsZW1lbnRzIE1lc3NhZ2VEcml2ZW5CZWFuLCBNZXNzYWdlTGlzdGVuZXIgewogICAgIHByaXZhdGUgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjOwogCkBAIC02NiwxNiArNjYsMTYgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRNZXNzYWdlRHJpdmVuQ29udGV4dChNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGMpIHsKLQl0aGlzLm1kYyA9IG1kYzsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIE1lc3NhZ2VEcml2ZW5FSkI6OnNldE1lc3NhZ2VEcml2ZW5Db250ZXh0ICEhIik7CisgICAgdGhpcy5tZGMgPSBtZGM7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBNZXNzYWdlRHJpdmVuRUpCOjpzZXRNZXNzYWdlRHJpdmVuQ29udGV4dCAhISIpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gTWVzc2FnZURyaXZlbkVKQjo6ZWpiQ3JlYXRlICEhIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBNZXNzYWdlRHJpdmVuRUpCOjplamJDcmVhdGUgISEiKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBNZXNzYWdlRHJpdmVuRUpCOjplamJSZW1vdmUgISEiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIE1lc3NhZ2VEcml2ZW5FSkI6OmVqYlJlbW92ZSAhISIpOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL21kYi9tc2diZWFuL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvbWRiL21zZ2JlYW4vYnVpbGQucHJvcGVydGllcwppbmRleCBkMmQ5MGZlLi4wMmRkNzg5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvbWRiL21zZ2JlYW4vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvbWRiL21zZ2JlYW4vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItbWRiLW1zZ2JlYW4iLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9tZGIvbXNnYmVhbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvbWRiL21zZ2JlYW4vYnVpbGQueG1sCmluZGV4IDMyMjE1M2MuLmU4NWE1NmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9tZGIvbXNnYmVhbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL21kYi9tc2diZWFuL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTQgKzQ2LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQqLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLWVqYi1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CkBAIC03NiwxNyArNzYsMTcgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLWVqYi1zcWwtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9tZGIvbXNnYmVhbi9jbGllbnQvSGVsbG9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9tZGIvbXNnYmVhbi9jbGllbnQvSGVsbG9DbGllbnQuamF2YQppbmRleCAxMDUyMDY5Li45YjQwNGNjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvbWRiL21zZ2JlYW4vY2xpZW50L0hlbGxvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL21kYi9tc2diZWFuL2NsaWVudC9IZWxsb0NsaWVudC5qYXZhCkBAIC02OCw3ICs2OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQkZBTFNFLCAgLy8gamRiYwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJGQUxTRSB9IH07ICAvLyByb2xsYmFjawogCi0gICAgT2JqZWN0W11bXSBvbmVQaGFzZUNvbW1pdFRlc3RzID0geyAKKyAgICBPYmplY3RbXVtdIG9uZVBoYXNlQ29tbWl0VGVzdHMgPSB7CiAgICAgICAgIHsgImptcy9xdWV1ZV9jbXQiLCAgIEJGQUxTRSwgQkZBTFNFLCBCRkFMU0UgfSwKICAgICAgICAgeyAiam1zL3RvcGljX2NtdCIsICAgQkZBTFNFLCBCRkFMU0UsIEJGQUxTRSB9LAogCkBAIC03OSw3ICs3OSw3IEBACiAgICAgICAgIHsgImptcy90b3BpY19ibXQiLCAgIEJGQUxTRSwgQlRSVUUsICBCRkFMU0UgfSwKICAgICB9OwogCi0gICAgT2JqZWN0W11bXSB0d29QaGFzZUNvbW1pdFRlc3RzID0geyAKKyAgICBPYmplY3RbXVtdIHR3b1BoYXNlQ29tbWl0VGVzdHMgPSB7CiAgICAgICAgIHsgImptcy9xdWV1ZV9jbXQiLCAgIEJGQUxTRSwgQlRSVUUsICBCRkFMU0UgfSwKICAgICAgICAgeyAiam1zL3RvcGljX2NtdCIsICAgQkZBTFNFLCBCVFJVRSwgIEJGQUxTRSB9LAogCkBAIC05MiwyMSArOTIsMjEgQEAKICAgICAgICAgeyAiam1zL3F1ZXVlX2NtdCIsICAgQlRSVUUsICBCVFJVRSwgIEJGQUxTRSB9LAogICAgICAgICB7ICJqbXMvdG9waWNfY210IiwgICBCVFJVRSwgIEJUUlVFLCAgQkZBTFNFIH0sCiAgICAgfTsKLSAgICAKLSAgICBPYmplY3RbXVtdIHJvbGxiYWNrVGVzdHMgPSB7IAorCisgICAgT2JqZWN0W11bXSByb2xsYmFja1Rlc3RzID0gewogCiAgICAgICAgIHsgImptcy9xdWV1ZV9jbXQiLCAgIEJUUlVFLCAgQkZBTFNFLCAgQlRSVUUgfSwKICAgICAgICAgeyAiam1zL3RvcGljX2NtdCIsICAgQlRSVUUsICBCRkFMU0UsICBCVFJVRSB9LAotCQorCiAgICAgICAgIHsgImptcy9xdWV1ZV9jbXQiLCAgIEJUUlVFLCAgQlRSVUUsICAgQlRSVUUgfSwKICAgICAgICAgeyAiam1zL3RvcGljX2NtdCIsICAgQlRSVUUsICBCVFJVRSwgICBCVFJVRSB9LAotCQorCiAgICAgICAgIHsgImptcy9xdWV1ZV9jbXQiLCAgIEJGQUxTRSwgQkZBTFNFLCAgQlRSVUUgfSwKICAgICAgICAgeyAiam1zL3RvcGljX2NtdCIsICAgQkZBTFNFLCBCRkFMU0UsICBCVFJVRSB9LAotCQorCiAgICAgICAgIHsgImptcy9xdWV1ZV9jbXQiLCAgIEJUUlVFLCAgQkZBTFNFLCAgQlRSVUUgfSwKLSAgICAgICAgeyAiam1zL3RvcGljX2NtdCIsICAgQlRSVUUsICBCRkFMU0UsICBCVFJVRSB9LCAgICAgICAgCi0gICAgICAgIAorICAgICAgICB7ICJqbXMvdG9waWNfY210IiwgICBCVFJVRSwgIEJGQUxTRSwgIEJUUlVFIH0sCisKICAgICB9OwogCiAKQEAgLTExOSwxMCArMTE5LDEwIEBACiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAgICAgICAgIGludCBudW1JdGVyID0gMTA7Ci0gICAgICAgIGlmKGFyZ3MubGVuZ3RoID09IDAgfHwgKGFyZ3MubGVuZ3RoID4gMCAmJiAKKyAgICAgICAgaWYoYXJncy5sZW5ndGggPT0gMCB8fCAoYXJncy5sZW5ndGggPiAwICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1swXS5lcXVhbHMoIjFwYyIgKSkgKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJ1bm5pbmcgMSBwaGFzZSBjb21taXQgbXNnYmVhbiB0ZXN0cyIpOwotICAgICAgICAgICAgbnVtSXRlciA9IChhcmdzLmxlbmd0aCA+PSAyKSA/IAorICAgICAgICAgICAgbnVtSXRlciA9IChhcmdzLmxlbmd0aCA+PSAyKSA/CiAgICAgICAgICAgICAgICAgSW50ZWdlci5wYXJzZUludChhcmdzWzFdKSA6IG51bUl0ZXI7CiAgICAgICAgICAgICBkb1Rlc3RzKG9uZVBoYXNlQ29tbWl0VGVzdHMsIG51bUl0ZXIpOwogICAgICAgICB9IGVsc2UgaWYoIGFyZ3NbMF0uZXF1YWxzKCIycGMiKSApIHsKQEAgLTE0MywyMiArMTQzLDIyIEBACiAgICAgICAgICAgICBkb1Rlc3RzKG9uZVBoYXNlQ29tbWl0VGVzdHMsIG51bUl0ZXIpOwogICAgICAgICAgICAgZG9UZXN0cyh0d29QaGFzZUNvbW1pdFRlc3RzLCBudW1JdGVyKTsKICAgICAgICAgICAgIGRvVGVzdHMobG9jYWxUeFRlc3RzLCBudW1JdGVyKTsKLQkgICAgZG9UZXN0cyhyb2xsYmFja1Rlc3RzLCBudW1JdGVyKTsKKyAgICAgICAgZG9UZXN0cyhyb2xsYmFja1Rlc3RzLCBudW1JdGVyKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHVzZXJTcGVjaWZpZWRUeFRlc3RbMF1bMF0gPSBhcmdzWzBdOwogICAgICAgICAgICAgbnVtSXRlciA9IEludGVnZXIucGFyc2VJbnQoYXJnc1sxXSk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJ1bm5pbmcgIiArIHVzZXJTcGVjaWZpZWRUeFRlc3RbMF1bMF0pOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJOdW0gaXRlcmF0aW9ucyA9ICIgKyBudW1JdGVyKTsKICAgICAgICAgICAgIGlmKCBhcmdzLmxlbmd0aCA9PSAzICkgewotICAgICAgICAgICAgICAgIHVzZXJTcGVjaWZpZWRUeFRlc3RbMF1bMV0gPSAKKyAgICAgICAgICAgICAgICB1c2VyU3BlY2lmaWVkVHhUZXN0WzBdWzFdID0KICAgICAgICAgICAgICAgICAgICAgbmV3IEJvb2xlYW4oYXJnc1syXS5pbmRleE9mKCJyZXBseSIpICE9IC0xKTsKLSAgICAgICAgICAgICAgICB1c2VyU3BlY2lmaWVkVHhUZXN0WzBdWzJdID0gCisgICAgICAgICAgICAgICAgdXNlclNwZWNpZmllZFR4VGVzdFswXVsyXSA9CiAgICAgICAgICAgICAgICAgICAgIG5ldyBCb29sZWFuKChhcmdzWzJdLmluZGV4T2YoImpkYmMiKSAhPSAtMSkpOwotICAgICAgICAgICAgICAgIHVzZXJTcGVjaWZpZWRUeFRlc3RbMF1bM10gPSAKKyAgICAgICAgICAgICAgICB1c2VyU3BlY2lmaWVkVHhUZXN0WzBdWzNdID0KICAgICAgICAgICAgICAgICAgICAgbmV3IEJvb2xlYW4oKGFyZ3NbMl0uaW5kZXhPZigicm9sbGJhY2siKSAhPSAtMSkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZG9UZXN0cyh1c2VyU3BlY2lmaWVkVHhUZXN0LCBudW1JdGVyKTsKLSAgICAgICAgfSAKKyAgICAgICAgfQogCiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xNjcsNyArMTY3LDcgQEAKICAgICAgICAgaWYgKG51bUl0ZXIgPiAyMCkgewogICAgICAgICAgICAgVElNRU9VVCA9IFRJTUVPVVQgKiAoaW50KShudW1JdGVyIC8gMTApOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgU3RyaW5nIGRlc3ROYW1lID0gImphdmE6Y29tcC9lbnYvIiArIChTdHJpbmcpIHRlc3RzW2ldWzBdOwogICAgICAgICAgICAgYm9vbGVhbiBleHBlY3RSZXBseSA9ICgoQm9vbGVhbil0ZXN0c1tpXVsxXSkuYm9vbGVhblZhbHVlKCk7CkBAIC0xNzgsMTEgKzE3OCwxMSBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBzZXR1cCgpOwogICAgICAgICAgICAgICAgIGRvVGVzdChkZXN0TmFtZSwgbnVtSXRlciwgZXhwZWN0UmVwbHksIGpkYmMsIHJvbGxiYWNrKTsKLSAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0LCBzdGF0LlBBU1MpOyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0LCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBjYXRjaChUaHJvd2FibGUgdCkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2F1Z2h0IHVuZXhwZWN0ZWQgZXhjZXB0aW9uICIgKyB0KTsKICAgICAgICAgICAgICAgICB0LnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3QsIHN0YXQuRkFJTCk7ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3QsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgICAgIGNsZWFudXAoKTsKQEAgLTE5MywzNyArMTkzLDM3IEBACiAKICAgICBwdWJsaWMgdm9pZCBzZXR1cCgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBjb250ZXh0ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgIAotICAgICAgICBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHF1ZXVlQ29uRmFjdG9yeSA9IAorCisgICAgICAgIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcXVldWVDb25GYWN0b3J5ID0KICAgICAgICAgICAgIChRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5KSBjb250ZXh0Lmxvb2t1cAogICAgICAgICAgICAgKCJqYXZhOmNvbXAvZW52L2ptcy9RQ0YiKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIHF1ZXVlQ29uID0gcXVldWVDb25GYWN0b3J5LmNyZWF0ZVF1ZXVlQ29ubmVjdGlvbigpOwogCiAgICAgICAgIHF1ZXVlU2Vzc2lvbiA9IHF1ZXVlQ29uLmNyZWF0ZVF1ZXVlU2Vzc2lvbgotICAgICAgICAgICAgKGZhbHNlLCBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UpOyAKKyAgICAgICAgICAgIChmYWxzZSwgU2Vzc2lvbi5BVVRPX0FDS05PV0xFREdFKTsKIAogICAgICAgICAvLyBQcm9kdWNlciB3aWxsIGJlIHNwZWNpZmllZCB3aGVuIGFjdHVhbCBtc2cgaXMgc2VudC4KLSAgICAgICAgcXVldWVTZW5kZXIgPSBxdWV1ZVNlc3Npb24uY3JlYXRlU2VuZGVyKG51bGwpOyAgICAgICAgCisgICAgICAgIHF1ZXVlU2VuZGVyID0gcXVldWVTZXNzaW9uLmNyZWF0ZVNlbmRlcihudWxsKTsKIAotICAgICAgICBjbGllbnRRdWV1ZSA9IChqYWthcnRhLmptcy5RdWV1ZSkgCisgICAgICAgIGNsaWVudFF1ZXVlID0gKGpha2FydGEuam1zLlF1ZXVlKQogICAgICAgICAgICAgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvam1zL2NsaWVudF9xdWV1ZSIpOwogCiAgICAgICAgIHF1ZXVlUmVjZWl2ZXIgPSBxdWV1ZVNlc3Npb24uY3JlYXRlUmVjZWl2ZXIoY2xpZW50UXVldWUpOwogCi0gICAgICAgIFRvcGljQ29ubmVjdGlvbkZhY3RvcnkgdG9waWNDb25GYWN0b3J5ID0gCisgICAgICAgIFRvcGljQ29ubmVjdGlvbkZhY3RvcnkgdG9waWNDb25GYWN0b3J5ID0KICAgICAgICAgICAgIChUb3BpY0Nvbm5lY3Rpb25GYWN0b3J5KSBjb250ZXh0Lmxvb2t1cAogICAgICAgICAgICAgKCJqYXZhOmNvbXAvZW52L2ptcy9UQ0YiKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICB0b3BpY0NvbiA9IHRvcGljQ29uRmFjdG9yeS5jcmVhdGVUb3BpY0Nvbm5lY3Rpb24oKTsKIAotICAgICAgICB0b3BpY1Nlc3Npb24gPSAKKyAgICAgICAgdG9waWNTZXNzaW9uID0KICAgICAgICAgICAgIHRvcGljQ29uLmNyZWF0ZVRvcGljU2Vzc2lvbihmYWxzZSwgU2Vzc2lvbi5BVVRPX0FDS05PV0xFREdFKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIC8vIFByb2R1Y2VyIHdpbGwgYmUgc3BlY2lmaWVkIHdoZW4gYWN0dWFsIG1zZyBpcyBwdWJsaXNoZWQuCiAgICAgICAgIHRvcGljUHVibGlzaGVyID0gdG9waWNTZXNzaW9uLmNyZWF0ZVB1Ymxpc2hlcihudWxsKTsKIAotICAgICAgICBjbGllbnRUb3BpYyA9IChUb3BpYykgCisgICAgICAgIGNsaWVudFRvcGljID0gKFRvcGljKQogICAgICAgICAgICAgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvam1zL2NsaWVudF90b3BpYyIpOwogCiAgICAgICAgIHRvcGljU3Vic2NyaWJlciA9IHRvcGljU2Vzc2lvbi5jcmVhdGVTdWJzY3JpYmVyKGNsaWVudFRvcGljKTsKQEAgLTI0OSw3ICsyNDksNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgc2VuZE1zZ3MoamFrYXJ0YS5qbXMuUXVldWUgcXVldWUsIE1lc3NhZ2UgbXNnLCBpbnQgbnVtKSAKKyAgICBwdWJsaWMgdm9pZCBzZW5kTXNncyhqYWthcnRhLmptcy5RdWV1ZSBxdWV1ZSwgTWVzc2FnZSBtc2csIGludCBudW0pCiAgICAgICAgIHRocm93cyBKTVNFeGNlcHRpb24gewogICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VuZGluZyBtZXNzYWdlICIgKyBpICsgIiB0byAiICsgcXVldWUpOwpAQCAtMjU3LDcgKzI1Nyw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBwdWJsaXNoTXNncyhUb3BpYyB0b3BpYywgTWVzc2FnZSBtc2csIGludCBudW0pIAorICAgIHB1YmxpYyB2b2lkIHB1Ymxpc2hNc2dzKFRvcGljIHRvcGljLCBNZXNzYWdlIG1zZywgaW50IG51bSkKICAgICAgICAgdGhyb3dzIEpNU0V4Y2VwdGlvbiB7CiAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW07IGkrKykgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQdWJsaXNoaW5nIG1lc3NhZ2UgIiArIGkgKyAiIHRvICIgKyB0b3BpYyk7CkBAIC0yNzAsNyArMjcwLDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2FpdGluZyBmb3IgcXVldWUgbWVzc2FnZSAiICsgKGkrMSkgKyAiIG9mICIgKyBudW0pOwogICAgICAgICAgICAgTWVzc2FnZSByZWN2ZG1lc3NhZ2UgPSBxdWV1ZVJlY2VpdmVyLnJlY2VpdmUoVElNRU9VVCk7CiAgICAgICAgICAgICBpZiggcmVjdmRtZXNzYWdlICE9IG51bGwgKSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZWNlaXZlZCBtZXNzYWdlIDogIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVjZWl2ZWQgbWVzc2FnZSA6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRleHRNZXNzYWdlKXJlY3ZkbWVzc2FnZSkuZ2V0VGV4dCgpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0aW1lb3V0IGFmdGVyICIgKyBUSU1FT1VUICsgIiBzZWNvbmRzIik7CkBAIC0yODQsNyArMjg0LDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2FpdGluZyBmb3IgdG9waWMgbWVzc2FnZSAiICsgKGkrMSkgKyAiIG9mICIgKyBudW0pOwogICAgICAgICAgICAgTWVzc2FnZSByZWN2ZG1lc3NhZ2UgPSB0b3BpY1N1YnNjcmliZXIucmVjZWl2ZShUSU1FT1VUKTsKICAgICAgICAgICAgIGlmKCByZWN2ZG1lc3NhZ2UgIT0gbnVsbCApIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlY2VpdmVkIG1lc3NhZ2UgOiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZWNlaXZlZCBtZXNzYWdlIDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVGV4dE1lc3NhZ2UpcmVjdmRtZXNzYWdlKS5nZXRUZXh0KCkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRpbWVvdXQgYWZ0ZXIgIiArIFRJTUVPVVQgKyAiIHNlY29uZHMiKTsKQEAgLTI5MywxMSArMjkzLDExIEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvKiogCisgICAgLyoqCiAgICAgICogR2VuZXJhdGUgdGVzdG5hbWUuIChUcnkgdG8ga2VlcCBzeW5jaGVkIHdpdGggdGFyZ2V0IG5hbWVzIGluIE1ha2VmaWxlLikKICAgICAgKi8KLSAgICBwcml2YXRlIFN0cmluZyBnZW5lcmF0ZVRlc3ROYW1lKFN0cmluZyBkZXN0TmFtZSwgYm9vbGVhbiBkb0pkYmMsIAotCQkJCSAgICBib29sZWFuIGV4cGVjdFJlcGx5LCBib29sZWFuIHJvbGxiYWNrRW5hYmxlZCkgCisgICAgcHJpdmF0ZSBTdHJpbmcgZ2VuZXJhdGVUZXN0TmFtZShTdHJpbmcgZGVzdE5hbWUsIGJvb2xlYW4gZG9KZGJjLAorICAgICAgICAgICAgICAgICAgICBib29sZWFuIGV4cGVjdFJlcGx5LCBib29sZWFuIHJvbGxiYWNrRW5hYmxlZCkKICAgICB7CiAgICAgICAgIFN0cmluZyB0ZXN0TmFtZSA9IGRlc3ROYW1lLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgIGlmIChkb0pkYmMpIHsKQEAgLTMxNywyNyArMzE3LDI3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZyBkZXN0TmFtZSwgaW50IG51bUl0ZXIsIGJvb2xlYW4gZXhwZWN0UmVwbHksCi0gICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gZG9KZGJjLCBib29sZWFuIHJvbGxiYWNrRW5hYmxlZCkgCi0gICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIAorICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGRvSmRiYywgYm9vbGVhbiByb2xsYmFja0VuYWJsZWQpCisKKyAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKLSAgICAgICAgU3RyaW5nIHRlc3ROYW1lID0gCisgICAgICAgIFN0cmluZyB0ZXN0TmFtZSA9CiAgICAgICAgICAgICBnZW5lcmF0ZVRlc3ROYW1lKGRlc3ROYW1lLCBkb0pkYmMsIGV4cGVjdFJlcGx5LCByb2xsYmFja0VuYWJsZWQpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgRGVzdGluYXRpb24gZGVzdCA9IChEZXN0aW5hdGlvbikgY29udGV4dC5sb29rdXAoZGVzdE5hbWUpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGJvb2xlYW4gcG9pbnRUb1BvaW50ID0gZGVzdCBpbnN0YW5jZW9mIGpha2FydGEuam1zLlF1ZXVlOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmVnaW5uaW5nIHRlc3QgOiAiICsgdGVzdE5hbWUpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFRpbWVyLnN0YXJ0KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYoIHBvaW50VG9Qb2ludCApIHsKLSAgICAgICAgICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPSAKKyAgICAgICAgICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPQogICAgICAgICAgICAgICAgICAgICBxdWV1ZVNlc3Npb24uY3JlYXRlVGV4dE1lc3NhZ2UoZGVzdE5hbWUpOwogICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2V0Qm9vbGVhblByb3BlcnR5KCJkb0pkYmMiLCBkb0pkYmMpOwogICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2V0Qm9vbGVhblByb3BlcnR5KCJyb2xsYmFja0VuYWJsZWQiLCByb2xsYmFja0VuYWJsZWQpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLyogYWlkIGlkZW50aWZ5aW5nIHdoYXQgdGVzdCBtZXNzYWdlIGlzIGFzc29jaWF0ZWQgd2l0aCBvbiBKTVMgc2VydmVyIHNpZGUuCiAgICAgICAgICAgICAgICAgICogKEpNUyBSSSBNZXNzYWdlIEltcGxlbWVudGF0aW9uIHRvU3RyaW5nKCkgd2lsbCBwcmludCB0aGlzIHByb3BlcnR5IGlmIGl0CiAgICAgICAgICAgICAgICAgICogIGlzIHNldC4pCkBAIC0zNDgsMTEgKzM0OCwxMSBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBzZW5kTXNncygoamFrYXJ0YS5qbXMuUXVldWUpIGRlc3QsIG1lc3NhZ2UsIG51bUl0ZXIpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPSAKKyAgICAgICAgICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPQogICAgICAgICAgICAgICAgICAgICB0b3BpY1Nlc3Npb24uY3JlYXRlVGV4dE1lc3NhZ2UoZGVzdE5hbWUpOwogICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2V0Qm9vbGVhblByb3BlcnR5KCJkb0pkYmMiLCBkb0pkYmMpOwogICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2V0Qm9vbGVhblByb3BlcnR5KCJyb2xsYmFja0VuYWJsZWQiLCByb2xsYmFja0VuYWJsZWQpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLyogYWlkIGlkZW50aWZ5aW5nIHdoYXQgdGVzdCBtZXNzYWdlIGlzIGFzc29jaWF0ZWQgd2l0aCBvbiBKTVMgc2VydmVyIHNpZGUuCiAgICAgICAgICAgICAgICAgICogKEpNUyBSSSBNZXNzYWdlIEltcGxlbWVudGF0aW9uIHRvU3RyaW5nKCkgd2lsbCBwcmludCB0aGlzIHByb3BlcnR5IGlmIGl0CiAgICAgICAgICAgICAgICAgICogIGlzIHNldC4pCkBAIC0zNjMsNyArMzYzLDcgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcHVibGlzaE1zZ3MoKFRvcGljKSBkZXN0LCBtZXNzYWdlLCBudW1JdGVyKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiggZXhwZWN0UmVwbHkgKSB7CiAgICAgICAgICAgICAgICAgaWYoIHBvaW50VG9Qb2ludCApIHsKICAgICAgICAgICAgICAgICAgICAgcmVjdlF1ZXVlTXNncyhudW1JdGVyKTsKQEAgLTM3MSwzOCArMzcxLDM4IEBACiAgICAgICAgICAgICAgICAgICAgIHJlY3ZUb3BpY01zZ3MobnVtSXRlcik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGxvbmcgdGltZSA9IFRpbWVyLnN0b3AoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVuZCB0ZXN0IDogIiArIHRlc3ROYW1lICsgIi4gVGltZSA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpbWVyLmZvcm1hdCh0aW1lKSArICIgLT4gIiArICh0aW1lL251bUl0ZXIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIG1zZWMvbXNnICgiICsgbnVtSXRlciArICIgbXNncykiKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBleGNlcHRpb24gIiArIGUgKyAiIGluIHRlc3QgIiArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGV4Y2VwdGlvbiAiICsgZSArICIgaW4gdGVzdCAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0TmFtZSk7CiAgICAgICAgICAgICB0aHJvdyBlOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLy8gaGVscGVyIGNsYXNzIGZvciB0aW1pbmcgdGhlIHRlc3RzCiAgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgVGltZXIgewogICAgICAgICBzdGF0aWMgbG9uZyBzdGFydFRpbWU7Ci0gICAgICAgIAorCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzdGFydCgpIHsKICAgICAgICAgICAgIHN0YXJ0VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgbG9uZyBzdG9wKCkgewogICAgICAgICAgICAgcmV0dXJuIFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gc3RhcnRUaW1lOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIC8qKgogICAgICAgICAgKiBSZXR1cm5zIGEgc3RyaW5nIHRoYXQgb3V0cHV0cyB0aW1lIGluIGFuCiAgICAgICAgICAqIGVhc2lseSByZWFkYWJsZSBmb3JtYXQuCiAgICAgICAgICAqLwogICAgICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBmb3JtYXQobG9uZyB0aW1lSW4pIHsKICAgICAgICAgICAgIGRvdWJsZSBmb28gPSAoKGRvdWJsZSl0aW1lSW4pLzEwMDA7Ci0gICAgICAgICAgICBsb25nIHRpbWUgPSBNYXRoLnJvdW5kKGZvbyk7IAorICAgICAgICAgICAgbG9uZyB0aW1lID0gTWF0aC5yb3VuZChmb28pOwogICAgICAgICAgICAgU3RyaW5nIHJldCA9IG51bGw7CiAgICAgICAgICAgICBpZiAodGltZSA8IDYwKSB7CiAgICAgICAgICAgICAgICAgcmV0ID0gdGltZSArICIgc2Vjb25kcyI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvbWRiL21zZ2JlYW4vZWpiL01zZ0JlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9tZGIvbXNnYmVhbi9lamIvTXNnQmVhbi5qYXZhCmluZGV4IDU5ZGE5MGQuLjVjMDJmMjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9tZGIvbXNnYmVhbi9lamIvTXNnQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9tZGIvbXNnYmVhbi9lamIvTXNnQmVhbi5qYXZhCkBAIC02MiwyMCArNjIsMjAgQEAKICAgICAgICAgICAgIGNvbnRleHQgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIGJlYW5NYW5hZ2VkVHggPSAoKEJvb2xlYW4pIGNvbnRleHQubG9va3VwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiamF2YTpjb21wL2Vudi9iZWFuTWFuYWdlZFR4IikpLmJvb2xlYW5WYWx1ZSgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmKCBiZWFuTWFuYWdlZFR4ICkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQkVBTiBNQU5BR0VEIFRSQU5TQUNUSU9OUyIpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNPTlRBSU5FUiBNQU5BR0VEIFRSQU5TQUNUSU9OUyIpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBkYXRhU291cmNlID0gKERhdGFTb3VyY2UpIAorCisgICAgICAgICAgICBkYXRhU291cmNlID0gKERhdGFTb3VyY2UpCiAgICAgICAgICAgICAgICAgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvamRiYy9BY2NvdW50REIiKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyBDcmVhdGUgYSBRdWV1ZSBTZXNzaW9uLgotICAgICAgICAgICAgcXVldWVDb25GYWN0b3J5ID0gKFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkpIAorICAgICAgICAgICAgcXVldWVDb25GYWN0b3J5ID0gKFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkpCiAgICAgICAgICAgICAgICAgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvam1zL015UXVldWVDb25uZWN0aW9uRmFjdG9yeSIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHRvcGljQ29uRmFjdG9yeSA9IChUb3BpY0Nvbm5lY3Rpb25GYWN0b3J5KQogICAgICAgICAgICAgICAgIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L2ptcy9NeVRvcGljQ29ubmVjdGlvbkZhY3RvcnkiKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewpAQCAtOTEsMTYgKzkxLDE2IEBACiAgICAgICAgICAgICBTdHJpbmcgbWVzc2FnZUlEID0gcmVjdk1zZy5nZXRKTVNNZXNzYWdlSUQoKTsKIAogICAgICAgICAgICAgYm9vbGVhbiBkb0ptcyA9IChyZWN2TXNnLmdldEpNU1JlcGx5VG8oKSAhPSBudWxsKTsKLSAgICAgICAgICAgIGJvb2xlYW4gZG9KZGJjID0gCisgICAgICAgICAgICBib29sZWFuIGRvSmRiYyA9CiAgICAgICAgICAgICAgICAgcmVjdk1zZy5nZXRCb29sZWFuUHJvcGVydHkoImRvSmRiYyIpOwotICAgICAgICAgICAgYm9vbGVhbiByb2xsYmFja0VuYWJsZWQgPSAKKyAgICAgICAgICAgIGJvb2xlYW4gcm9sbGJhY2tFbmFibGVkID0KICAgICAgICAgICAgICAgICByZWN2TXNnLmdldEJvb2xlYW5Qcm9wZXJ0eSgicm9sbGJhY2tFbmFibGVkIik7CiAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gTXNnQmVhbjo6b25NZXNzYWdlKCkgOiAiICsgbWVzc2FnZUlEKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiamRiYyBlbmFibGVkIDogIiArIGRvSmRiYyArICIgLCAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiam1zIHJlcGx5IGVuYWJsZWQgOiAiICsgZG9KbXMgKyAiICwgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJvbGxiYWNrIGVuYWJsZWQgOiAiICsgcm9sbGJhY2tFbmFibGVkKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiggYmVhbk1hbmFnZWRUeCApIHsKICAgICAgICAgICAgICAgICBtZGMuZ2V0VXNlclRyYW5zYWN0aW9uKCkuYmVnaW4oKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiggcm9sbGJhY2tFbmFibGVkICkgewpAQCAtMTExLDcgKzExMSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJidXQgcmVkZWxpdmVyZWQgZmxhZyBub3Qgc2V0IiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgOiAiICsgcmVjdk1zZyk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCByZWRlbGl2ZXJlZCBtZXNzYWdlICIgKyAKKyAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IHJlZGVsaXZlcmVkIG1lc3NhZ2UgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZUlEKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTEyMywxMiArMTIzLDEyIEBACiAgICAgICAgICAgICAgICAgbWRjLmdldFVzZXJUcmFuc2FjdGlvbigpLmNvbW1pdCgpOwogICAgICAgICAgICAgfSBlbHNlIGlmKCByb2xsYmFja0VuYWJsZWQgKSB7CiAgICAgICAgICAgICAgICAgaWYoIHJlY3ZNc2cuZ2V0Sk1TUmVkZWxpdmVyZWQoKSApIHsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgcmVkZWxpdmVyZWQgbWVzc2FnZSAiICsgCisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IHJlZGVsaXZlcmVkIG1lc3NhZ2UgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlSUQpOwogICAgICAgICAgICAgICAgICAgICAvLyBubyBtb3JlIHJvbGxiYWNrcyAtLSBjb250YWluZXIgd2lsbCBjb21taXQgdHgKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICByb2xsYmFja01lc3NhZ2VzLmFkZChyZWN2TXNnKTsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSb2xsaW5nIGJhY2sgbWVzc2FnZSAiICsgCisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUm9sbGluZyBiYWNrIG1lc3NhZ2UgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlSUQpOwogICAgICAgICAgICAgICAgICAgICBtZGMuc2V0Um9sbGJhY2tPbmx5KCk7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTQwLDEzICsxNDAsMTMgQEAKICAgICB9CiAKICAgICBwcm90ZWN0ZWQgdm9pZCBkb1N0dWZmKGJvb2xlYW4gZG9KZGJjLCBNZXNzYWdlIHJlY3ZNc2cpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBEZXN0aW5hdGlvbiByZXBseVRvID0gcmVjdk1zZy5nZXRKTVNSZXBseVRvKCk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKCByZXBseVRvICE9IG51bGwgKSB7CiAgICAgICAgICAgICBkb0ptc1N0dWZmKHJlcGx5VG8sIHJlY3ZNc2cpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmKCBkb0pkYmMpIHsKICAgICAgICAgICAgIGRvSmRiY1N0dWZmKCk7CiAgICAgICAgIH0KQEAgLTE3OCw0MSArMTc4LDQxIEBACiAKICAgICAgICAgUXVldWVDb25uZWN0aW9uIHF1ZXVlQ29uID0gbnVsbDsKICAgICAgICAgVG9waWNDb25uZWN0aW9uIHRvcGljQ29uID0gbnVsbDsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiggcmVwbHlUbyBpbnN0YW5jZW9mIFF1ZXVlICkgewogICAgICAgICAgICAgICAgIHF1ZXVlQ29uID0gcXVldWVDb25GYWN0b3J5LmNyZWF0ZVF1ZXVlQ29ubmVjdGlvbigpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gcGFyYW1ldGVycyB0byBjcmVhdGVRdWV1ZVNlc3Npb24gYXJlIGlnbm9yZWQgd2hlbiB0aGVyZQogICAgICAgICAgICAgICAgIC8vIGlzIGEgdHggY29udGV4dC4gIElmIHRoZXJlJ3MgYSBDTVQgdW5zcGVjaWZpZWQgdHggY29udGV4dCwKLSAgICAgICAgICAgICAgICAvLyBlLmcuIENNVCBOb3RTdXBwb3J0ZWQsIGptcyBhY3Rpdml0eSBtdXN0IGJlIGNvZGVkIAorICAgICAgICAgICAgICAgIC8vIGUuZy4gQ01UIE5vdFN1cHBvcnRlZCwgam1zIGFjdGl2aXR5IG11c3QgYmUgY29kZWQKICAgICAgICAgICAgICAgICAvLyBpbiBhIGRlZmVuc2l2ZSB3YXkgc2luY2UgdGhlIGNvbnRhaW5lciBoYXMgYSBsb3Qgb2YgbGVld2F5Ci0gICAgICAgICAgICAgICAgLy8gaW4gaG93IGl0IHBlcmZvcm1zIHRoZSB3b3JrLiAgCisgICAgICAgICAgICAgICAgLy8gaW4gaG93IGl0IHBlcmZvcm1zIHRoZSB3b3JrLgogICAgICAgICAgICAgICAgIFF1ZXVlU2Vzc2lvbiBxdWV1ZVNlc3Npb24gPSBxdWV1ZUNvbi4KICAgICAgICAgICAgICAgICAgICAgY3JlYXRlUXVldWVTZXNzaW9uKGZhbHNlLCBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgUXVldWVTZW5kZXIgc2VuZGVyICA9IHF1ZXVlU2Vzc2lvbi4KICAgICAgICAgICAgICAgICAgICAgY3JlYXRlU2VuZGVyKChRdWV1ZSlyZXBseVRvKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIFRleHRNZXNzYWdlIHNlbmRNc2cgPSBxdWV1ZVNlc3Npb24uY3JlYXRlVGV4dE1lc3NhZ2UoKTsKICAgICAgICAgICAgICAgICBzZW5kTXNnLnNldFRleHQoIlJlcGx5IGZvciAiICsgKChUZXh0TWVzc2FnZSlyZWN2TXNnKS5nZXRUZXh0KCkgKyAiICIgKyByZWN2TXNnLmdldEpNU01lc3NhZ2VJRCgpKTsKICAgICAgICAgICAgICAgICBzZW5kZXIuc2VuZChzZW5kTXNnKTsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlbnQgcmVwbHkgIiArIHNlbmRNc2cgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlbnQgcmVwbHkgIiArIHNlbmRNc2cgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHRvICIgKyByZXBseVRvKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgdG9waWNDb24gPSB0b3BpY0NvbkZhY3RvcnkuY3JlYXRlVG9waWNDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBUb3BpY1Nlc3Npb24gdG9waWNTZXNzaW9uID0gdG9waWNDb24uCiAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZVRvcGljU2Vzc2lvbihmYWxzZSwgU2Vzc2lvbi5BVVRPX0FDS05PV0xFREdFKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIFRvcGljUHVibGlzaGVyIHB1Ymxpc2hlciA9CiAgICAgICAgICAgICAgICAgICAgIHRvcGljU2Vzc2lvbi5jcmVhdGVQdWJsaXNoZXIoKFRvcGljKXJlcGx5VG8pOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgVGV4dE1lc3NhZ2Ugc2VuZE1zZyA9IHRvcGljU2Vzc2lvbi5jcmVhdGVUZXh0TWVzc2FnZSgpOwogICAgICAgICAgICAgICAgIHNlbmRNc2cuc2V0VGV4dCgiUmVwbHkgZm9yICIgKyAoKFRleHRNZXNzYWdlKXJlY3ZNc2cpLmdldFRleHQoKSArICIgIiArIHJlY3ZNc2cuZ2V0Sk1TTWVzc2FnZUlEKCkpOwogICAgICAgICAgICAgICAgIHB1Ymxpc2hlci5wdWJsaXNoKHNlbmRNc2cpOwotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUHVibGlzaGVkIHJlcGx5ICIgKyBzZW5kTXNnICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQdWJsaXNoZWQgcmVwbHkgIiArIHNlbmRNc2cgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHRvICIgKyByZXBseVRvKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaChKTVNFeGNlcHRpb24gam1zZSkgewpAQCAtMjMwLDEwICsyMzAsMTAgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAgICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRNZXNzYWdlRHJpdmVuQ29udGV4dChNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGMpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBNc2dCZWFuOjpzZXRNZXNzYWdlRHJpdmVuQ29udGV4dCgpISEiKTsKLQl0aGlzLm1kYyA9IG1kYzsKKyAgICB0aGlzLm1kYyA9IG1kYzsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvbWRiL21zZ2JlYW4vZWpiL09wZXJhdGlvblRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9tZGIvbXNnYmVhbi9lamIvT3BlcmF0aW9uVGVzdC5qYXZhCmluZGV4IDEzYWQzMjguLjM0ODcyZTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9tZGIvbXNnYmVhbi9lamIvT3BlcmF0aW9uVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9tZGIvbXNnYmVhbi9lamIvT3BlcmF0aW9uVGVzdC5qYXZhCkBAIC0yMyw3ICsyMyw3IEBACiAKIC8qKgogICogVGVzdHMgbWF0cml4IG9mIG9wZXJhdGlvbnMgY2FsbGFibGUgZnJvbSB0aGUgZGlmZmVyZW50Ci0gKiBtZXRob2RzIGluIGEgbWVzc2FnZS1kcml2ZW4gYmVhbi4gIAorICogbWV0aG9kcyBpbiBhIG1lc3NhZ2UtZHJpdmVuIGJlYW4uCiAgKi8KIHB1YmxpYyBjbGFzcyBPcGVyYXRpb25UZXN0IHsKIApAQCAtMzgsMTggKzM4LDE4IEBACiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSVNfQ0FMTEVSX0lOX1JPTEUgPSA1OwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFVF9FSkJfSE9NRSA9IDY7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVVNFUl9UWF9CRUdJTiA9IDc7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVVNFUl9UWF9DT01NSVQgPSA4OyAKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVU0VSX1RYX0NPTU1JVCA9IDg7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVVNFUl9UWF9ST0xMQkFDSyA9IDk7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTlVNX09QRVJBVElPTlMgPSAxMDsKLSAgICAKKwogICAgIC8vIE9QRVJBVElPTiBTRVRTIChUYWJsZSA5LCBTZWN0aW9uIDEzLjUuMSBFSkIgMi4wKQotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW5bXVtdIE9QRVJBVElPTl9TRVRTID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbltdW10gT1BFUkFUSU9OX1NFVFMgPQogICAgIHsKLSAgICAgICAgeyBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsICBmYWxzZSwgIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlIH0sIAorICAgICAgICB7IGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgIGZhbHNlLCAgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UgfSwKICAgICAgICAgeyB0cnVlLCAgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsICBmYWxzZSwgIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlIH0sCiAgICAgICAgIHsgdHJ1ZSwgIHRydWUsICBmYWxzZSwgZmFsc2UsIGZhbHNlLCAgZmFsc2UsICBmYWxzZSwgdHJ1ZSwgIHRydWUsICB0cnVlICB9LAogICAgICAgICB7IHRydWUsICBmYWxzZSwgZmFsc2UsIHRydWUsICB0cnVlLCAgIGZhbHNlLCAgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UgfSwKLSAgICAgICAgeyB0cnVlLCAgdHJ1ZSwgIGZhbHNlLCBmYWxzZSwgZmFsc2UsICBmYWxzZSwgIGZhbHNlLCB0cnVlLCAgdHJ1ZSwgIHRydWUgIH0gCisgICAgICAgIHsgdHJ1ZSwgIHRydWUsICBmYWxzZSwgZmFsc2UsIGZhbHNlLCAgZmFsc2UsICBmYWxzZSwgdHJ1ZSwgIHRydWUsICB0cnVlICB9CiAgICAgfTsKIAogICAgIC8vIFRyYW5zYWN0aW9uIHR5cGVzCkBAIC02Miw4ICs2Miw4IEBACiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRUpCX0NSRUFURSAgPSAyOwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVKQl9SRU1PVkUgPSAzOwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9OX01FU1NBR0UgPSA0OwotICAgCi0gICAgLy8gCisKKyAgICAvLwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBPUEVSQVRJT05fU0VUX01BVFJJWFtdW10gPQogICAgIHsKICAgICAgICAgeyAwLCAxLCAxLCAxLCAzIH0sCkBAIC04MiwxMSArODIsMTEgQEAKIAogICAgICAgICBib29sZWFuW10gdGVzdFJlc3VsdHMgPSBuZXcgYm9vbGVhbltOVU1fT1BFUkFUSU9OU107CiAKLSAgICAgICAgZm9yKGludCBvcGVyYXRpb24gPSAwOyBvcGVyYXRpb24gPCBOVU1fT1BFUkFUSU9OUzsgb3BlcmF0aW9uKyspIHsgICAgICAgICAgICAKKyAgICAgICAgZm9yKGludCBvcGVyYXRpb24gPSAwOyBvcGVyYXRpb24gPCBOVU1fT1BFUkFUSU9OUzsgb3BlcmF0aW9uKyspIHsKICAgICAgICAgICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIHN3aXRjaChvcGVyYXRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBFTlZfQUNDRVNTIDogCisgICAgICAgICAgICAgICAgICAgIGNhc2UgRU5WX0FDQ0VTUyA6CiAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBkb0VudkFjY2VzcygpOyBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBVU0VSX1RYX0FDQ0VTUyA6CiAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBkb1VzZXJUeEFjY2VzcygpOyBicmVhazsKQEAgLTEyNyw3ICsxMjcsNyBAQAogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFjdHVhbCByZXN1bHQgICA6ICIgKyByZXN1bHQpOwogCiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgICAgIAorICAgICAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSBib29sZWFuIGRvRW52QWNjZXNzKCkgdGhyb3dzIFRocm93YWJsZSB7CkBAIC0xMzUsNyArMTM1LDcgQEAKICAgICAgICAgQ29udGV4dCBlbnYgPSAoQ29udGV4dCkgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYiKTsKICAgICAgICAgU3RyaW5nICBlbnZWYXIgPSAoU3RyaW5nKSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9FbnZWYXIiKTsKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSAgICAKKyAgICB9CiAKICAgICBwcml2YXRlIGJvb2xlYW4gZG9Vc2VyVHhBY2Nlc3MoKSB0aHJvd3MgVGhyb3dhYmxlIHsKICAgICAgICAgVXNlclRyYW5zYWN0aW9uIHVzZXJUeCA9IG1kYy5nZXRVc2VyVHJhbnNhY3Rpb24oKTsKQEAgLTE0Niw3ICsxNDYsNyBAQAogICAgICAgICBtZGMuZ2V0Q2FsbGVyUHJpbmNpcGFsKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAKKwogICAgIHByaXZhdGUgYm9vbGVhbiBkb0dldFJvbGxiYWNrT25seSgpIHRocm93cyBUaHJvd2FibGUgewogICAgICAgICBtZGMuZ2V0Um9sbGJhY2tPbmx5KCk7CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTg3LDYgKzE4Nyw2IEBACiAgICAgICAgIHVzZXJUeC5iZWdpbigpOwogICAgICAgICB1c2VyVHgucm9sbGJhY2soKTsKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSAgICAKKyAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9tZGIvbXNnYmVhbi9lamIvT3BlcmF0aW9uVGVzdE1zZ0JlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9tZGIvbXNnYmVhbi9lamIvT3BlcmF0aW9uVGVzdE1zZ0JlYW4uamF2YQppbmRleCA5ZGRlZjBlLi43MzFkNmVmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvbWRiL21zZ2JlYW4vZWpiL09wZXJhdGlvblRlc3RNc2dCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL21kYi9tc2diZWFuL2VqYi9PcGVyYXRpb25UZXN0TXNnQmVhbi5qYXZhCkBAIC0yMiw3ICsyMiw3IEBACiBpbXBvcnQgamFrYXJ0YS5qbXMuTWVzc2FnZUxpc3RlbmVyOwogaW1wb3J0IGphdmF4Lm5hbWluZy4qOwogCi1wdWJsaWMgY2xhc3MgT3BlcmF0aW9uVGVzdE1zZ0JlYW4gaW1wbGVtZW50cyBNZXNzYWdlRHJpdmVuQmVhbiwgCitwdWJsaWMgY2xhc3MgT3BlcmF0aW9uVGVzdE1zZ0JlYW4gaW1wbGVtZW50cyBNZXNzYWdlRHJpdmVuQmVhbiwKICAgICBNZXNzYWdlTGlzdGVuZXIgewogCiAgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGMgPSBudWxsOwpAQCAtMzksNyArMzksNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIE9wZXJhdGlvblRlc3RNc2dCZWFuOjplamJDcmVhdGUoKSAhISIpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ29udGV4dCBjb250ZXh0ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgICAgICBiZWFuTWFuYWdlZFR4ID0gCisgICAgICAgICAgICBiZWFuTWFuYWdlZFR4ID0KICAgICAgICAgICAgICAgICAoKEJvb2xlYW4pIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L2JlYW5NYW5hZ2VkVHgiKSkuYm9vbGVhblZhbHVlKCk7CiAKICAgICAgICAgICAgIGlmKCBiZWFuTWFuYWdlZFR4ICkgewpAQCAtNTUsNyArNTUsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIHJlY3ZNc2cpIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBPcGVyYXRpb25UZXN0TXNnQmVhbjo6b25NZXNzYWdlKCkgOiAiIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIE9wZXJhdGlvblRlc3RNc2dCZWFuOjpvbk1lc3NhZ2UoKSA6ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgcmVjdk1zZyk7CiAKICAgICAgICAgcnVuVGVzdChPcGVyYXRpb25UZXN0Lk9OX01FU1NBR0UpOwpAQCAtNjQsNyArNjQsNyBAQAogICAgIHB1YmxpYyB2b2lkIHNldE1lc3NhZ2VEcml2ZW5Db250ZXh0KE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYykgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4KICAgICAgICAgICAgICgiSW4gT3BlcmF0aW9uVGVzdE1zZ0JlYW46OnNldE1lc3NhZ2VEcml2ZW5Db250ZXh0KCkhISIpOwotCXRoaXMubWRjID0gbWRjOworICAgIHRoaXMubWRjID0gbWRjOwogICAgICAgICBydW5UZXN0KE9wZXJhdGlvblRlc3QuU0VUX0NPTlRFWFQpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL21kYi9zaW5nbGV0b24vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9tZGIvc2luZ2xldG9uL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNjk3MzNiZC4uYjA2ZDQxNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL21kYi9zaW5nbGV0b24vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvbWRiL3NpbmdsZXRvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMSArMTUsMjEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1tZGItc2luZ2xldG9uIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZ2xhc3NmaXNoLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZ2xhc3NmaXNoLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImdsYXNzZmlzaC1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZ2xhc3NmaXNoLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImdsYXNzZmlzaC1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9nbGFzc2Zpc2gtYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iZ2xhc3NmaXNoLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvZ2xhc3NmaXNoLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvbWRiL3NpbmdsZXRvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvbWRiL3NpbmdsZXRvbi9idWlsZC54bWwKaW5kZXggMTYxMmM0MC4uMWYxNjYzNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL21kYi9zaW5nbGV0b24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9tZGIvc2luZ2xldG9uL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTQgKzQ2LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQmVhbiouY2xhc3MsICoqLypJRi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50Ki5jbGFzcywgKiovKklGLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYzLDcgKzYzLDcgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iY3JlYXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC03NSwxNCArNzUsMTQgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIxIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9tZGIvc2luZ2xldG9uL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9tZGIvc2luZ2xldG9uL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBjOTE4ZTliLi5jYTIyZGQ2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvbWRiL3NpbmdsZXRvbi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL21kYi9zaW5nbGV0b24vY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNiw3ICsyNiw3IEBACiAKIC8qKgogICogVGVzdHMgZm9yIGh0dHA6Ly9qYXZhLm5ldC9qaXJhL2Jyb3dzZS9HTEFTU0ZJU0gtMTMwMDQgKFN1cHBvcnQgTURCIHNpbmdsZXRvbikuCi0gKiBUaGUgdGVzdCBlamIgamFyIGlzIGNvbmZpZ3VyZWQgd2l0aCBwcm9wZXJ0eSBzaW5nbGV0b24tYmVhbi1wb29sPXRydWUgaW4gCisgKiBUaGUgdGVzdCBlamIgamFyIGlzIGNvbmZpZ3VyZWQgd2l0aCBwcm9wZXJ0eSBzaW5nbGV0b24tYmVhbi1wb29sPXRydWUgaW4KICAqIHN1bi1lamItamFyLnhtbC4gIFRoaXMgdGVzdCBjbGllbnQgY2FsbHMgZm9vVGVzdCBhbmQgZG9UZXN0KC4uLik6CiAgKiBmb29UZXN0OiB2ZXJpZnkgdGhlIHN0YXRlbGVzcyBiZWFuIEZvb0JlYW4gaXMgc2luZ2xlIGluc3RhbmNlOwogICogZG9UZXN0KC4uKTogdmVyaWZ5IHRoZSBtZGIgTWVzc2FnZUJlYW4gaXMgc2luZ2xlIGluc3RhbmNlLgpAQCAtNTksNyArNTksNyBAQAogICAgIHByaXZhdGUgc3RhdGljIEZvb1JlbW90ZUlGIGZvbzsKIAogICAgIHB1YmxpYyBDbGllbnQoU3RyaW5nW10gYXJncykgewotICAgICAgICAKKwogICAgICAgICBpZiggYXJncy5sZW5ndGggPT0gMSApIHsKICAgICAgICAgICAgIG51bU1lc3NhZ2VzID0gbmV3IEludGVnZXIoYXJnc1swXSkuaW50VmFsdWUoKTsKICAgICAgICAgfQpAQCAtNjgsNyArNjgsNyBAQAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHNldHVwKCk7Ci0JICAgIGRvVGVzdCgiam1zL2VqYl9tZGJfc2luZ2xldG9uX0luUXVldWUiLCBudW1NZXNzYWdlcyk7CisgICAgICAgIGRvVGVzdCgiam1zL2VqYl9tZGJfc2luZ2xldG9uX0luUXVldWUiLCBudW1NZXNzYWdlcyk7CiAgICAgICAgICAgICBmb29UZXN0KCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygic2luZ2xldG9uIG1haW4iLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoKFRocm93YWJsZSB0KSB7CkBAIC0xMDQsOCArMTA0LDggQEAKICAgICAgICAgY29udGV4dCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHF1ZXVlQ29uRmFjdG9yeSA9IChRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5KSBjb250ZXh0Lmxvb2t1cCAoImphdmE6Y29tcC9lbnYvRm9vQ0YiKTsKICAgICAgICAgcXVldWVDb24gPSBxdWV1ZUNvbkZhY3RvcnkuY3JlYXRlUXVldWVDb25uZWN0aW9uKCk7Ci0gICAgICAgIHF1ZXVlU2Vzc2lvbiA9IHF1ZXVlQ29uLmNyZWF0ZVF1ZXVlU2Vzc2lvbihmYWxzZSwgU2Vzc2lvbi5BVVRPX0FDS05PV0xFREdFKTsgCi0gICAgICAgIHF1ZXVlU2VuZGVyID0gcXVldWVTZXNzaW9uLmNyZWF0ZVNlbmRlcihudWxsKTsgICAgICAgIAorICAgICAgICBxdWV1ZVNlc3Npb24gPSBxdWV1ZUNvbi5jcmVhdGVRdWV1ZVNlc3Npb24oZmFsc2UsIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSk7CisgICAgICAgIHF1ZXVlU2VuZGVyID0gcXVldWVTZXNzaW9uLmNyZWF0ZVNlbmRlcihudWxsKTsKICAgICAgICAgcXVldWVDb24uc3RhcnQoKTsKICAgICB9CiAKQEAgLTExOSwyMCArMTE5LDIwIEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBzZW5kTXNncyhqYWthcnRhLmptcy5RdWV1ZSBxdWV1ZSwgTWVzc2FnZSBtc2csIGludCBudW0pIAorICAgIHB1YmxpYyB2b2lkIHNlbmRNc2dzKGpha2FydGEuam1zLlF1ZXVlIHF1ZXVlLCBNZXNzYWdlIG1zZywgaW50IG51bSkKICAgICAgICAgdGhyb3dzIEpNU0V4Y2VwdGlvbiB7CiAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW07IGkrKykgewotICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIlNlbmRpbmcgbWVzc2FnZSAiICsgaSArICIgdG8gIiArIHF1ZXVlICsgCisgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiU2VuZGluZyBtZXNzYWdlICIgKyBpICsgIiB0byAiICsgcXVldWUgKwogICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgIiBhdCB0aW1lICIgKyBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSk7CiAgICAgICAgICAgICBxdWV1ZVNlbmRlci5zZW5kKHF1ZXVlLCBtc2cpOwotICAgICAgICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oIlNlbnQgbWVzc2FnZSAiICsgaSArICIgdG8gIiArIHF1ZXVlICsgCisgICAgICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigiU2VudCBtZXNzYWdlICIgKyBpICsgIiB0byAiICsgcXVldWUgKwogICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIiBhdCB0aW1lICIgKyBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nIGRlc3ROYW1lLCBpbnQgbnVtKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgRGVzdGluYXRpb24gZGVzdCA9IChEZXN0aW5hdGlvbikgY29udGV4dC5sb29rdXAoZGVzdE5hbWUpOwotICAgICAgICAgICAgCisKICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bU9mQ2FsbHM7IGkrKykgewogICAgICAgICAgICAgTWVzc2FnZSBtZXNzYWdlID0gcXVldWVTZXNzaW9uLmNyZWF0ZVRleHRNZXNzYWdlKGRlc3ROYW1lKTsKICAgICAgICAgICAgIC8vICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPSB0b3BpY1Nlc3Npb24uY3JlYXRlVGV4dE1lc3NhZ2UoZGVzdE5hbWUpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3BlcmYvbG9jYWwvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL2xvY2FsL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOGQ0OTM4ZC4uZDMzY2U5YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3BlcmYvbG9jYWwvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi9sb2NhbC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMSArMTUsMjEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1wZXJmLWxvY2FsIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi9sb2NhbC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi9sb2NhbC9idWlsZC54bWwKaW5kZXggYTk3ZTgzYS4uMzczYzA4YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3BlcmYvbG9jYWwvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL2xvY2FsL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTQgKzQ2LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYxLDEwICs2MSwxMCBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi9sb2NhbC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi9sb2NhbC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggNDZhZGE5NC4uZmFkYzYyOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3BlcmYvbG9jYWwvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL2xvY2FsL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewpAQCAtMzYsMzIgKzM2LDMyIEBACiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJlamItcGVyZi1sb2NhbElEIik7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKIAogICAgICAgICB0cnkgewogCi0JICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogCi0JICAgIC8vIGNyZWF0ZSBFSkIgdXNpbmcgZmFjdG9yeSBmcm9tIGNvbnRhaW5lciAKLQkgICAgamF2YS5sYW5nLk9iamVjdCBvYmpyZWYgPSAKKyAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyCisgICAgICAgIGphdmEubGFuZy5PYmplY3Qgb2JqcmVmID0KICAgICAgICAgICAgICAgICBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1BlcmZvcm1hbmNlQXBwIik7CiAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29rZWQgdXAgaG9tZSEhIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2VkIHVwIGhvbWUhISIpOwogCi0JICAgIEhlbGxvSG9tZSAgaG9tZSA9IChIZWxsb0hvbWUpCisgICAgICAgIEhlbGxvSG9tZSAgaG9tZSA9IChIZWxsb0hvbWUpCiAgICAgICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwgSGVsbG9Ib21lLmNsYXNzKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJOYXJyb3dlZCBob21lISEiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJOYXJyb3dlZCBob21lISEiKTsKIAotCSAgICBIZWxsbyBociA9IGhvbWUuY3JlYXRlKCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IHRoZSBFSkIhISIpOworICAgICAgICBIZWxsbyBociA9IGhvbWUuY3JlYXRlKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IHRoZSBFSkIhISIpOwogCi0JICAgIC8vIGludm9rZSBtZXRob2Qgb24gdGhlIEVKQgotCSAgICBkb1BlcmZUZXN0KGhyLCB0cnVlKTsKKyAgICAgICAgLy8gaW52b2tlIG1ldGhvZCBvbiB0aGUgRUpCCisgICAgICAgIGRvUGVyZlRlc3QoaHIsIHRydWUpOwogICAgICAgICAgICAgZG9QZXJmVGVzdChociwgZmFsc2UpOwogCiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIsIHN0YXQuUEFTUyk7CkBAIC03MCw2NiArNzAsNjYgQEAKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIgLCBzdGF0LkZBSUwpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgIAlyZXR1cm47CisKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBkb1BlcmZUZXN0KEhlbGxvIGhyLCBib29sZWFuIGxvY2FsKSAKLQl0aHJvd3MgRXhjZXB0aW9uCisgICAgcHJpdmF0ZSB2b2lkIGRvUGVyZlRlc3QoSGVsbG8gaHIsIGJvb2xlYW4gbG9jYWwpCisgICAgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlxuU3RhdGVmdWwgU2Vzc2lvbiByZXN1bHRzIChtaWNyb3NlYyk6IFx0d2l0aCB0eCBcdG5vIHR4OiIpOwotCWhyLndhcm11cChDb21tb24uU1RBVEVGVUwsIGxvY2FsKTsKLQlydW5UZXN0cyhDb21tb24uU1RBVEVGVUwsIGhyLCBsb2NhbCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJcblN0YXRlZnVsIFNlc3Npb24gcmVzdWx0cyAobWljcm9zZWMpOiBcdHdpdGggdHggXHRubyB0eDoiKTsKKyAgICBoci53YXJtdXAoQ29tbW9uLlNUQVRFRlVMLCBsb2NhbCk7CisgICAgcnVuVGVzdHMoQ29tbW9uLlNUQVRFRlVMLCBociwgbG9jYWwpOwogCi0JU3lzdGVtLm91dC5wcmludGxuKCJcblN0YXRlbGVzcyBTZXNzaW9uIHJlc3VsdHMgKG1pY3Jvc2VjKTogXHR3aXRoIHR4IFx0bm8gdHg6Iik7Ci0JaHIud2FybXVwKENvbW1vbi5TVEFURUZVTCwgbG9jYWwpOwotCXJ1blRlc3RzKENvbW1vbi5TVEFURUxFU1MsIGhyLCBsb2NhbCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJcblN0YXRlbGVzcyBTZXNzaW9uIHJlc3VsdHMgKG1pY3Jvc2VjKTogXHR3aXRoIHR4IFx0bm8gdHg6Iik7CisgICAgaHIud2FybXVwKENvbW1vbi5TVEFURUZVTCwgbG9jYWwpOworICAgIHJ1blRlc3RzKENvbW1vbi5TVEFURUxFU1MsIGhyLCBsb2NhbCk7CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlxuQk1QIEVudGl0eSByZXN1bHRzIChtaWNyb3NlYyk6IFx0XHR3aXRoIHR4IFx0bm8gdHg6Iik7Ci0JaHIud2FybXVwKENvbW1vbi5CTVAsIGxvY2FsKTsKLQlydW5UZXN0cyhDb21tb24uQk1QLCBociwgbG9jYWwpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG5CTVAgRW50aXR5IHJlc3VsdHMgKG1pY3Jvc2VjKTogXHRcdHdpdGggdHggXHRubyB0eDoiKTsKKyAgICBoci53YXJtdXAoQ29tbW9uLkJNUCwgbG9jYWwpOworICAgIHJ1blRlc3RzKENvbW1vbi5CTVAsIGhyLCBsb2NhbCk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHJ1blRlc3RzKGludCB0eXBlLCBIZWxsbyBociwgYm9vbGVhbiBsb2NhbCkKLQl0aHJvd3MgRXhjZXB0aW9uCisgICAgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0aW5nICIgKyAobG9jYWwgPyAiIExvY2FsICIgOiAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0aW5nICIgKyAobG9jYWwgPyAiIExvY2FsICIgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIENvbGxvY2F0ZWQgUmVtb3RlICIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwZXJmb3JtYW5jZS4uLiIpOwogCiAgICAgICAgIGlmKCBsb2NhbCApIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibm90U3VwcG9ydGVkIDogXHRcdFx0XHQiIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJub3RTdXBwb3J0ZWQgOiBcdFx0XHRcdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGhyLm5vdFN1cHBvcnRlZCh0eXBlLCB0cnVlKSArICJcdFx0IiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBoci5ub3RTdXBwb3J0ZWQodHlwZSwgZmFsc2UpICk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInN1cHBvcnRzIDogXHRcdFx0XHQiIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJzdXBwb3J0cyA6IFx0XHRcdFx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgaHIuc3VwcG9ydHModHlwZSwgdHJ1ZSkgKyAiXHRcdCIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgaHIuc3VwcG9ydHModHlwZSwgZmFsc2UpICk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInJlcXVpcmVkIDogXHRcdFx0XHQiIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJyZXF1aXJlZCA6IFx0XHRcdFx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgaHIucmVxdWlyZWQodHlwZSwgdHJ1ZSkgKyAiXHRcdCIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgaHIucmVxdWlyZWQodHlwZSwgZmFsc2UpICk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInJlcXVpcmVzTmV3IDogXHRcdFx0XHQiIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJyZXF1aXJlc05ldyA6IFx0XHRcdFx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgaHIucmVxdWlyZXNOZXcodHlwZSwgdHJ1ZSkgKyAiXHRcdCIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgaHIucmVxdWlyZXNOZXcodHlwZSwgZmFsc2UpICk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm1hbmRhdG9yeSA6IFx0XHRcdFx0IiAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibWFuZGF0b3J5IDogXHRcdFx0XHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBoci5tYW5kYXRvcnkodHlwZSwgdHJ1ZSkpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJuZXZlciA6IFx0XHRcdFx0XHRcdCIgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm5ldmVyIDogXHRcdFx0XHRcdFx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgaHIubmV2ZXIodHlwZSwgZmFsc2UpICk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm5vdFN1cHBvcnRlZCA6IFx0XHRcdFx0IiAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibm90U3VwcG9ydGVkIDogXHRcdFx0XHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBoci5ub3RTdXBwb3J0ZWRSZW1vdGUodHlwZSwgdHJ1ZSkgKyAiXHRcdCIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgaHIubm90U3VwcG9ydGVkUmVtb3RlKHR5cGUsIGZhbHNlKSApOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJzdXBwb3J0cyA6IFx0XHRcdFx0IiAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigic3VwcG9ydHMgOiBcdFx0XHRcdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGhyLnN1cHBvcnRzUmVtb3RlKHR5cGUsIHRydWUpICsgIlx0XHQiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGhyLnN1cHBvcnRzUmVtb3RlKHR5cGUsIGZhbHNlKSApOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJyZXF1aXJlZCA6IFx0XHRcdFx0IiAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigicmVxdWlyZWQgOiBcdFx0XHRcdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGhyLnJlcXVpcmVkUmVtb3RlKHR5cGUsIHRydWUpICsgIlx0XHQiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGhyLnJlcXVpcmVkUmVtb3RlKHR5cGUsIGZhbHNlKSApOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJyZXF1aXJlc05ldyA6IFx0XHRcdFx0IiAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigicmVxdWlyZXNOZXcgOiBcdFx0XHRcdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGhyLnJlcXVpcmVzTmV3UmVtb3RlKHR5cGUsIHRydWUpICsgIlx0XHQiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGhyLnJlcXVpcmVzTmV3UmVtb3RlKHR5cGUsIGZhbHNlKSApOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJtYW5kYXRvcnkgOiBcdFx0XHRcdCIgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm1hbmRhdG9yeSA6IFx0XHRcdFx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgaHIubWFuZGF0b3J5UmVtb3RlKHR5cGUsIHRydWUpKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibmV2ZXIgOiBcdFx0XHRcdFx0XHQiIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJuZXZlciA6IFx0XHRcdFx0XHRcdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGhyLm5ldmVyUmVtb3RlKHR5cGUsIGZhbHNlKSApOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3BlcmYvbG9jYWwvZWpiL0JtcEVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3BlcmYvbG9jYWwvZWpiL0JtcEVKQi5qYXZhCmluZGV4IGNiYzI4Y2MuLmJhYWJlNGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL2xvY2FsL2VqYi9CbXBFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi9sb2NhbC9lamIvQm1wRUpCLmphdmEKQEAgLTIzLDcgKzIzLDcgQEAKICAgICBwdWJsaWMgQm1wRUpCKCl7fQogCiAgICAgcHVibGljIFN0cmluZyBlamJDcmVhdGUoU3RyaW5nIHMpIHsKLQlyZXR1cm4gczsKKyAgICByZXR1cm4gczsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJQb3N0Q3JlYXRlKFN0cmluZyBzKSB7fQpAQCAtNDEsMTAgKzQxLDEwIEBACiAgICAgcHVibGljIHZvaWQgdW5zZXRFbnRpdHlDb250ZXh0KCkKICAgICB7fQogCi0gICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgCisgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkKICAgICB7fQogCi0gICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSAKKyAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpCiAgICAge30KIAogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpCkBAIC01Nyw2ICs1Nyw2IEBACiAgICAge30KIAogICAgIHB1YmxpYyBTdHJpbmcgZWpiRmluZEJ5UHJpbWFyeUtleShTdHJpbmcgcykgewotCXJldHVybiBzOworICAgIHJldHVybiBzOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL2xvY2FsL2VqYi9CbXBSZW1vdGVIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi9sb2NhbC9lamIvQm1wUmVtb3RlSG9tZS5qYXZhCmluZGV4IDVkZWM2MGMuLjc2ZGJjYjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL2xvY2FsL2VqYi9CbXBSZW1vdGVIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3BlcmYvbG9jYWwvZWpiL0JtcFJlbW90ZUhvbWUuamF2YQpAQCAtMjIsNSArMjIsNSBAQAogcHVibGljIGludGVyZmFjZSBCbXBSZW1vdGVIb21lIGV4dGVuZHMgRUpCSG9tZQogewogICAgIEJtcFJlbW90ZSBjcmVhdGUoU3RyaW5nIHMpIHRocm93cyBSZW1vdGVFeGNlcHRpb24sIENyZWF0ZUV4Y2VwdGlvbjsKLSAgICBCbXBSZW1vdGUgZmluZEJ5UHJpbWFyeUtleShTdHJpbmcgcykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiwgQ3JlYXRlRXhjZXB0aW9uOyAgICAKKyAgICBCbXBSZW1vdGUgZmluZEJ5UHJpbWFyeUtleShTdHJpbmcgcykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiwgQ3JlYXRlRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3BlcmYvbG9jYWwvZWpiL0hlbGxvRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi9sb2NhbC9lamIvSGVsbG9FSkIuamF2YQppbmRleCAyOGIwMjJhLi5mYzhmMTNmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi9sb2NhbC9lamIvSGVsbG9FSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi9sb2NhbC9lamIvSGVsbG9FSkIuamF2YQpAQCAtNDYsMTAgKzQ2LDEwIEBACiAKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB7CiAKLQl0cnkgeworICAgIHRyeSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk51bSBpdGVyYXRpb25zIHNldCB0byAiICsgSVRFUkFUSU9OUyk7CiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JICAgIFNmdWxIb21lIHNmdWxIb21lID0gKFNmdWxIb21lKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NmdWwiKTsKKyAgICAgICAgU2Z1bEhvbWUgc2Z1bEhvbWUgPSAoU2Z1bEhvbWUpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2Z1bCIpOwogICAgICAgICAgICAgc2Z1bCA9IHNmdWxIb21lLmNyZWF0ZSgpOwogCiAKQEAgLTU3LDE5ICs1NywxOSBAQAogICAgICAgICAgICAgc2Z1bFJlbW90ZUhvbWUgPSAoU2Z1bFJlbW90ZUhvbWUpCiAgICAgICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9iaiwgU2Z1bFJlbW90ZUhvbWUuY2xhc3MpOwogICAgICAgICAgICAgc2Z1bFJlbW90ZSA9IHNmdWxSZW1vdGVIb21lLmNyZWF0ZSgpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0ZWQgU3RhdGVmdWwgYmVhbi4iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGVkIFN0YXRlZnVsIGJlYW4uIik7CiAKLQkgICAJICAgICAKLQkgICAgU2xlc3NIb21lIHNsZXNzSG9tZSA9IChTbGVzc0hvbWUpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2xlc3MiKTsKKworICAgICAgICBTbGVzc0hvbWUgc2xlc3NIb21lID0gKFNsZXNzSG9tZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TbGVzcyIpOwogICAgICAgICAgICAgc2xlc3MgPSBzbGVzc0hvbWUuY3JlYXRlKCk7CiAgICAgICAgICAgICBvYmogPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NsZXNzUmVtb3RlIik7CiAgICAgICAgICAgICBzbGVzc1JlbW90ZUhvbWUgPSAoU2xlc3NSZW1vdGVIb21lKQogICAgICAgICAgICAgICAgIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmosIFNsZXNzUmVtb3RlSG9tZS5jbGFzcyk7CiAgICAgICAgICAgICBzbGVzc1JlbW90ZSA9IHNsZXNzUmVtb3RlSG9tZS5jcmVhdGUoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGVkIFN0YXRlbGVzcyBiZWFuLiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0ZWQgU3RhdGVsZXNzIGJlYW4uIik7CiAKIAotCSAgICBCbXBIb21lIGJtcEhvbWUgPSAoQm1wSG9tZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9CbXAiKTsKKyAgICAgICAgQm1wSG9tZSBibXBIb21lID0gKEJtcEhvbWUpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvQm1wIik7CiAgICAgICAgICAgICBTdHJpbmcgcGtleSA9ICJBIEJNUCBCZWFuIjsKICAgICAgICAgICAgIGJtcCA9IGJtcEhvbWUuY3JlYXRlKHBrZXkpOwogICAgICAgICAgICAgb2JqID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9CbXBSZW1vdGUiKTsKQEAgLTc3LDE0ICs3NywxNCBAQAogICAgICAgICAgICAgICAgIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmosIEJtcFJlbW90ZUhvbWUuY2xhc3MpOwogICAgICAgICAgICAgYm1wUmVtb3RlID0gKEJtcFJlbW90ZSkKICAgICAgICAgICAgICAgICBibXBSZW1vdGVIb21lLmZpbmRCeVByaW1hcnlLZXkocGtleSk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRlZCBCTVAgYmVhbi4iKTsKLQkgICAJICAgICAKLQkgICAgdXQgPSBjb250ZXh0LmdldFVzZXJUcmFuc2FjdGlvbigpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0ZWQgQk1QIGJlYW4uIik7CiAKLQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJjb3VsZG4ndCBnZXQgc2Z1bCBiZWFuIik7Ci0JICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotCX0KKyAgICAgICAgdXQgPSBjb250ZXh0LmdldFVzZXJUcmFuc2FjdGlvbigpOworCisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY291bGRuJ3QgZ2V0IHNmdWwgYmVhbiIpOworICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CiAgICAgfQogCiAKQEAgLTk3LDIyNCArOTcsMjI0IEBACiAgICAgICAgICAgICB3YXJtdXBSZW1vdGUodHlwZSwgZmFsc2UpOwogICAgICAgICB9CiAKLQkvLyBNZWFzdXJlIGxvb3BpbmcgYW5kIHRpbWluZyBvdmVyaGVhZCAKLQlsb25nIGJlZ2luID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7Ci0JfQotCWxvbmcgZW5kID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0Jb3ZlcmhlYWQgPSBlbmQgLSBiZWdpbjsKKyAgICAvLyBNZWFzdXJlIGxvb3BpbmcgYW5kIHRpbWluZyBvdmVyaGVhZAorICAgIGxvbmcgYmVnaW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICBmb3IgKCBpbnQgaT0wOyBpPElURVJBVElPTlM7IGkrKyApIHsKKyAgICB9CisgICAgbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICBvdmVyaGVhZCA9IGVuZCAtIGJlZ2luOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCB3YXJtdXBMb2NhbChpbnQgdHlwZSwgYm9vbGVhbiB0eCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JLy8gZ2V0IEhvdHNwb3Qgd2FybWVkIHVwCQotCUNvbW1vbiBiZWFuID0gcHJlTG9jYWwodHlwZSwgdHgpOwotCWZvciAoIGludCBpPTA7IGk8SVRFUkFUSU9OUzsgaSsrICkgewotCSAgICBiZWFuLnJlcXVpcmVzTmV3KCk7Ci0JICAgIGJlYW4ubm90U3VwcG9ydGVkKCk7Ci0JfQotCWZvciAoIGludCBpPTA7IGk8SVRFUkFUSU9OUzsgaSsrICkgewotCSAgICBiZWFuLnJlcXVpcmVkKCk7Ci0JICAgIGlmICggdHggKQotCQliZWFuLm1hbmRhdG9yeSgpOwotCSAgICBlbHNlCi0JCWJlYW4ubmV2ZXIoKTsKLQkgICAgYmVhbi5zdXBwb3J0cygpOwotCX0KLQlpZiAoIHR4ICkgdHJ5IHsgdXQuY29tbWl0KCk7IH0gY2F0Y2ggKCBFeGNlcHRpb24gZXggKSB7CisgICAgLy8gZ2V0IEhvdHNwb3Qgd2FybWVkIHVwCisgICAgQ29tbW9uIGJlYW4gPSBwcmVMb2NhbCh0eXBlLCB0eCk7CisgICAgZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7CisgICAgICAgIGJlYW4ucmVxdWlyZXNOZXcoKTsKKyAgICAgICAgYmVhbi5ub3RTdXBwb3J0ZWQoKTsKKyAgICB9CisgICAgZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7CisgICAgICAgIGJlYW4ucmVxdWlyZWQoKTsKKyAgICAgICAgaWYgKCB0eCApCisgICAgICAgIGJlYW4ubWFuZGF0b3J5KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgYmVhbi5uZXZlcigpOworICAgICAgICBiZWFuLnN1cHBvcnRzKCk7CisgICAgfQorICAgIGlmICggdHggKSB0cnkgeyB1dC5jb21taXQoKTsgfSBjYXRjaCAoIEV4Y2VwdGlvbiBleCApIHsKICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCB3YXJtdXBSZW1vdGUoaW50IHR5cGUsIGJvb2xlYW4gdHgpIHRocm93cyBFeGNlcHRpb24gewotCS8vIGdldCBIb3RzcG90IHdhcm1lZCB1cAkKLQlDb21tb25SZW1vdGUgYmVhbiA9IHByZVJlbW90ZSh0eXBlLCB0eCk7Ci0JZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7Ci0JICAgIGJlYW4ucmVxdWlyZXNOZXcoKTsKLQkgICAgYmVhbi5ub3RTdXBwb3J0ZWQoKTsKLQl9Ci0JZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7Ci0JICAgIGJlYW4ucmVxdWlyZWQoKTsKLQkgICAgaWYgKCB0eCApCi0JCWJlYW4ubWFuZGF0b3J5KCk7Ci0JICAgIGVsc2UKLQkJYmVhbi5uZXZlcigpOwotCSAgICBiZWFuLnN1cHBvcnRzKCk7Ci0JfQotCWlmICggdHggKSB0cnkgeyB1dC5jb21taXQoKTsgfSBjYXRjaCAoIEV4Y2VwdGlvbiBleCApIHsKKyAgICAvLyBnZXQgSG90c3BvdCB3YXJtZWQgdXAKKyAgICBDb21tb25SZW1vdGUgYmVhbiA9IHByZVJlbW90ZSh0eXBlLCB0eCk7CisgICAgZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7CisgICAgICAgIGJlYW4ucmVxdWlyZXNOZXcoKTsKKyAgICAgICAgYmVhbi5ub3RTdXBwb3J0ZWQoKTsKKyAgICB9CisgICAgZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7CisgICAgICAgIGJlYW4ucmVxdWlyZWQoKTsKKyAgICAgICAgaWYgKCB0eCApCisgICAgICAgIGJlYW4ubWFuZGF0b3J5KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgYmVhbi5uZXZlcigpOworICAgICAgICBiZWFuLnN1cHBvcnRzKCk7CisgICAgfQorICAgIGlmICggdHggKSB0cnkgeyB1dC5jb21taXQoKTsgfSBjYXRjaCAoIEV4Y2VwdGlvbiBleCApIHsKICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHByaXZhdGUgQ29tbW9uIHByZUxvY2FsKGludCB0eXBlLCBib29sZWFuIHR4KSAKKyAgICBwcml2YXRlIENvbW1vbiBwcmVMb2NhbChpbnQgdHlwZSwgYm9vbGVhbiB0eCkKICAgICB7Ci0JaWYgKCB0eCApIHRyeSB7IHV0LmJlZ2luKCk7IH0gY2F0Y2ggKCBFeGNlcHRpb24gZXggKSB7CisgICAgaWYgKCB0eCApIHRyeSB7IHV0LmJlZ2luKCk7IH0gY2F0Y2ggKCBFeGNlcHRpb24gZXggKSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotCWlmICggdHlwZSA9PSBDb21tb24uU1RBVEVMRVNTICkKLQkgICAgcmV0dXJuIHNsZXNzOwotCWVsc2UgaWYgKCB0eXBlID09IENvbW1vbi5TVEFURUZVTCApCi0JICAgIHJldHVybiBzZnVsOwotCWVsc2UKLQkgICAgcmV0dXJuIGJtcDsKKyAgICBpZiAoIHR5cGUgPT0gQ29tbW9uLlNUQVRFTEVTUyApCisgICAgICAgIHJldHVybiBzbGVzczsKKyAgICBlbHNlIGlmICggdHlwZSA9PSBDb21tb24uU1RBVEVGVUwgKQorICAgICAgICByZXR1cm4gc2Z1bDsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBibXA7CiAgICAgfQogCi0gICAgcHJpdmF0ZSBDb21tb25SZW1vdGUgcHJlUmVtb3RlKGludCB0eXBlLCBib29sZWFuIHR4KSAKKyAgICBwcml2YXRlIENvbW1vblJlbW90ZSBwcmVSZW1vdGUoaW50IHR5cGUsIGJvb2xlYW4gdHgpCiAgICAgewotCWlmICggdHggKSB0cnkgeyB1dC5iZWdpbigpOyB9IGNhdGNoICggRXhjZXB0aW9uIGV4ICkgeworICAgIGlmICggdHggKSB0cnkgeyB1dC5iZWdpbigpOyB9IGNhdGNoICggRXhjZXB0aW9uIGV4ICkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLQlpZiAoIHR5cGUgPT0gQ29tbW9uLlNUQVRFTEVTUyApCi0JICAgIHJldHVybiBzbGVzc1JlbW90ZTsKLQllbHNlIGlmICggdHlwZSA9PSBDb21tb24uU1RBVEVGVUwgKQotCSAgICByZXR1cm4gc2Z1bFJlbW90ZTsKLQllbHNlCi0JICAgIHJldHVybiBibXBSZW1vdGU7CisgICAgaWYgKCB0eXBlID09IENvbW1vbi5TVEFURUxFU1MgKQorICAgICAgICByZXR1cm4gc2xlc3NSZW1vdGU7CisgICAgZWxzZSBpZiAoIHR5cGUgPT0gQ29tbW9uLlNUQVRFRlVMICkKKyAgICAgICAgcmV0dXJuIHNmdWxSZW1vdGU7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gYm1wUmVtb3RlOwogICAgIH0KIAogCiAgICAgcHJpdmF0ZSBmbG9hdCBwb3N0KGxvbmcgYmVnaW4sIGxvbmcgZW5kLCBib29sZWFuIHR4KQogICAgIHsKLQlpZiAoIHR4ICkgdHJ5IHsgdXQuY29tbWl0KCk7IH0gY2F0Y2ggKCBFeGNlcHRpb24gZXggKSB7CisgICAgaWYgKCB0eCApIHRyeSB7IHV0LmNvbW1pdCgpOyB9IGNhdGNoICggRXhjZXB0aW9uIGV4ICkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLQlyZXR1cm4gKGZsb2F0KSggKChkb3VibGUpKGVuZC1iZWdpbi1vdmVyaGVhZCkpLygoZG91YmxlKUlURVJBVElPTlMpICogMTAwMC4wICk7CisgICAgcmV0dXJuIChmbG9hdCkoICgoZG91YmxlKShlbmQtYmVnaW4tb3ZlcmhlYWQpKS8oKGRvdWJsZSlJVEVSQVRJT05TKSAqIDEwMDAuMCApOwogICAgIH0KIAotICAgIHB1YmxpYyBmbG9hdCByZXF1aXJlc05ldyhpbnQgdHlwZSwgYm9vbGVhbiB0eCkgCisgICAgcHVibGljIGZsb2F0IHJlcXVpcmVzTmV3KGludCB0eXBlLCBib29sZWFuIHR4KQogICAgIHsKLQlDb21tb24gYmVhbiA9IHByZUxvY2FsKHR5cGUsIHR4KTsKLQlsb25nIGJlZ2luID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7Ci0JICAgIGJlYW4ucmVxdWlyZXNOZXcoKTsKLQl9Ci0JbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQlyZXR1cm4gcG9zdChiZWdpbiwgZW5kLCB0eCk7CisgICAgQ29tbW9uIGJlYW4gPSBwcmVMb2NhbCh0eXBlLCB0eCk7CisgICAgbG9uZyBiZWdpbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgIGZvciAoIGludCBpPTA7IGk8SVRFUkFUSU9OUzsgaSsrICkgeworICAgICAgICBiZWFuLnJlcXVpcmVzTmV3KCk7CisgICAgfQorICAgIGxvbmcgZW5kID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgcmV0dXJuIHBvc3QoYmVnaW4sIGVuZCwgdHgpOwogICAgIH0KIAotICAgIHB1YmxpYyBmbG9hdCBub3RTdXBwb3J0ZWQoaW50IHR5cGUsIGJvb2xlYW4gdHgpIAorICAgIHB1YmxpYyBmbG9hdCBub3RTdXBwb3J0ZWQoaW50IHR5cGUsIGJvb2xlYW4gdHgpCiAgICAgewotCUNvbW1vbiBiZWFuID0gcHJlTG9jYWwodHlwZSwgdHgpOwotCWxvbmcgYmVnaW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQlmb3IgKCBpbnQgaT0wOyBpPElURVJBVElPTlM7IGkrKyApIHsKLQkgICAgYmVhbi5ub3RTdXBwb3J0ZWQoKTsKLQl9Ci0JbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQlyZXR1cm4gcG9zdChiZWdpbiwgZW5kLCB0eCk7CisgICAgQ29tbW9uIGJlYW4gPSBwcmVMb2NhbCh0eXBlLCB0eCk7CisgICAgbG9uZyBiZWdpbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgIGZvciAoIGludCBpPTA7IGk8SVRFUkFUSU9OUzsgaSsrICkgeworICAgICAgICBiZWFuLm5vdFN1cHBvcnRlZCgpOworICAgIH0KKyAgICBsb25nIGVuZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgIHJldHVybiBwb3N0KGJlZ2luLCBlbmQsIHR4KTsKICAgICB9CiAKLSAgICBwdWJsaWMgZmxvYXQgcmVxdWlyZWQoaW50IHR5cGUsIGJvb2xlYW4gdHgpIAorICAgIHB1YmxpYyBmbG9hdCByZXF1aXJlZChpbnQgdHlwZSwgYm9vbGVhbiB0eCkKICAgICB7Ci0JQ29tbW9uIGJlYW4gPSBwcmVMb2NhbCh0eXBlLCB0eCk7Ci0JbG9uZyBiZWdpbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCWZvciAoIGludCBpPTA7IGk8SVRFUkFUSU9OUzsgaSsrICkgewotCSAgICBiZWFuLnJlcXVpcmVkKCk7Ci0JfQotCWxvbmcgZW5kID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JcmV0dXJuIHBvc3QoYmVnaW4sIGVuZCwgdHgpOworICAgIENvbW1vbiBiZWFuID0gcHJlTG9jYWwodHlwZSwgdHgpOworICAgIGxvbmcgYmVnaW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICBmb3IgKCBpbnQgaT0wOyBpPElURVJBVElPTlM7IGkrKyApIHsKKyAgICAgICAgYmVhbi5yZXF1aXJlZCgpOworICAgIH0KKyAgICBsb25nIGVuZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgIHJldHVybiBwb3N0KGJlZ2luLCBlbmQsIHR4KTsKICAgICB9CiAKLSAgICBwdWJsaWMgZmxvYXQgbWFuZGF0b3J5KGludCB0eXBlLCBib29sZWFuIHR4KSAKKyAgICBwdWJsaWMgZmxvYXQgbWFuZGF0b3J5KGludCB0eXBlLCBib29sZWFuIHR4KQogICAgIHsKLQlDb21tb24gYmVhbiA9IHByZUxvY2FsKHR5cGUsIHR4KTsKLQlsb25nIGJlZ2luID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7Ci0JICAgIGJlYW4ubWFuZGF0b3J5KCk7Ci0JfQotCWxvbmcgZW5kID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JcmV0dXJuIHBvc3QoYmVnaW4sIGVuZCwgdHgpOworICAgIENvbW1vbiBiZWFuID0gcHJlTG9jYWwodHlwZSwgdHgpOworICAgIGxvbmcgYmVnaW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICBmb3IgKCBpbnQgaT0wOyBpPElURVJBVElPTlM7IGkrKyApIHsKKyAgICAgICAgYmVhbi5tYW5kYXRvcnkoKTsKKyAgICB9CisgICAgbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICByZXR1cm4gcG9zdChiZWdpbiwgZW5kLCB0eCk7CiAgICAgfQogCi0gICAgcHVibGljIGZsb2F0IG5ldmVyKGludCB0eXBlLCBib29sZWFuIHR4KSAKKyAgICBwdWJsaWMgZmxvYXQgbmV2ZXIoaW50IHR5cGUsIGJvb2xlYW4gdHgpCiAgICAgewotCUNvbW1vbiBiZWFuID0gcHJlTG9jYWwodHlwZSwgdHgpOwotCWxvbmcgYmVnaW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQlmb3IgKCBpbnQgaT0wOyBpPElURVJBVElPTlM7IGkrKyApIHsKLQkgICAgYmVhbi5uZXZlcigpOwotCX0KLQlsb25nIGVuZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCXJldHVybiBwb3N0KGJlZ2luLCBlbmQsIHR4KTsKKyAgICBDb21tb24gYmVhbiA9IHByZUxvY2FsKHR5cGUsIHR4KTsKKyAgICBsb25nIGJlZ2luID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7CisgICAgICAgIGJlYW4ubmV2ZXIoKTsKKyAgICB9CisgICAgbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICByZXR1cm4gcG9zdChiZWdpbiwgZW5kLCB0eCk7CiAgICAgfQogCi0gICAgcHVibGljIGZsb2F0IHN1cHBvcnRzKGludCB0eXBlLCBib29sZWFuIHR4KSAKKyAgICBwdWJsaWMgZmxvYXQgc3VwcG9ydHMoaW50IHR5cGUsIGJvb2xlYW4gdHgpCiAgICAgewotCUNvbW1vbiBiZWFuID0gcHJlTG9jYWwodHlwZSwgdHgpOwotCWxvbmcgYmVnaW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQlmb3IgKCBpbnQgaT0wOyBpPElURVJBVElPTlM7IGkrKyApIHsKLQkgICAgYmVhbi5zdXBwb3J0cygpOwotCX0KLQlsb25nIGVuZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCXJldHVybiBwb3N0KGJlZ2luLCBlbmQsIHR4KTsKKyAgICBDb21tb24gYmVhbiA9IHByZUxvY2FsKHR5cGUsIHR4KTsKKyAgICBsb25nIGJlZ2luID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7CisgICAgICAgIGJlYW4uc3VwcG9ydHMoKTsKKyAgICB9CisgICAgbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICByZXR1cm4gcG9zdChiZWdpbiwgZW5kLCB0eCk7CiAgICAgfQogCiAKICAgICBwdWJsaWMgZmxvYXQgcmVxdWlyZXNOZXdSZW1vdGUoaW50IHR5cGUsIGJvb2xlYW4gdHgpIHRocm93cyBFeGNlcHRpb24KICAgICB7Ci0JQ29tbW9uUmVtb3RlIGJlYW4gPSBwcmVSZW1vdGUodHlwZSwgdHgpOwotCWxvbmcgYmVnaW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQlmb3IgKCBpbnQgaT0wOyBpPElURVJBVElPTlM7IGkrKyApIHsKLQkgICAgYmVhbi5yZXF1aXJlc05ldygpOwotCX0KLQlsb25nIGVuZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCXJldHVybiBwb3N0KGJlZ2luLCBlbmQsIHR4KTsKKyAgICBDb21tb25SZW1vdGUgYmVhbiA9IHByZVJlbW90ZSh0eXBlLCB0eCk7CisgICAgbG9uZyBiZWdpbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgIGZvciAoIGludCBpPTA7IGk8SVRFUkFUSU9OUzsgaSsrICkgeworICAgICAgICBiZWFuLnJlcXVpcmVzTmV3KCk7CisgICAgfQorICAgIGxvbmcgZW5kID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgcmV0dXJuIHBvc3QoYmVnaW4sIGVuZCwgdHgpOwogICAgIH0KIAogICAgIHB1YmxpYyBmbG9hdCBub3RTdXBwb3J0ZWRSZW1vdGUoaW50IHR5cGUsIGJvb2xlYW4gdHgpIHRocm93cyBFeGNlcHRpb24KICAgICB7Ci0JQ29tbW9uUmVtb3RlIGJlYW4gPSBwcmVSZW1vdGUodHlwZSwgdHgpOwotCWxvbmcgYmVnaW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQlmb3IgKCBpbnQgaT0wOyBpPElURVJBVElPTlM7IGkrKyApIHsKLQkgICAgYmVhbi5ub3RTdXBwb3J0ZWQoKTsKLQl9Ci0JbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQlyZXR1cm4gcG9zdChiZWdpbiwgZW5kLCB0eCk7CisgICAgQ29tbW9uUmVtb3RlIGJlYW4gPSBwcmVSZW1vdGUodHlwZSwgdHgpOworICAgIGxvbmcgYmVnaW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICBmb3IgKCBpbnQgaT0wOyBpPElURVJBVElPTlM7IGkrKyApIHsKKyAgICAgICAgYmVhbi5ub3RTdXBwb3J0ZWQoKTsKKyAgICB9CisgICAgbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICByZXR1cm4gcG9zdChiZWdpbiwgZW5kLCB0eCk7CiAgICAgfQogCiAgICAgcHVibGljIGZsb2F0IHJlcXVpcmVkUmVtb3RlKGludCB0eXBlLCBib29sZWFuIHR4KSB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewotCUNvbW1vblJlbW90ZSBiZWFuID0gcHJlUmVtb3RlKHR5cGUsIHR4KTsKLQlsb25nIGJlZ2luID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7Ci0JICAgIGJlYW4ucmVxdWlyZWQoKTsKLQl9Ci0JbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQlyZXR1cm4gcG9zdChiZWdpbiwgZW5kLCB0eCk7CisgICAgQ29tbW9uUmVtb3RlIGJlYW4gPSBwcmVSZW1vdGUodHlwZSwgdHgpOworICAgIGxvbmcgYmVnaW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICBmb3IgKCBpbnQgaT0wOyBpPElURVJBVElPTlM7IGkrKyApIHsKKyAgICAgICAgYmVhbi5yZXF1aXJlZCgpOworICAgIH0KKyAgICBsb25nIGVuZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgIHJldHVybiBwb3N0KGJlZ2luLCBlbmQsIHR4KTsKICAgICB9CiAKICAgICBwdWJsaWMgZmxvYXQgbWFuZGF0b3J5UmVtb3RlKGludCB0eXBlLCBib29sZWFuIHR4KSB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewotCUNvbW1vblJlbW90ZSBiZWFuID0gcHJlUmVtb3RlKHR5cGUsIHR4KTsKLQlsb25nIGJlZ2luID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7Ci0JICAgIGJlYW4ubWFuZGF0b3J5KCk7Ci0JfQotCWxvbmcgZW5kID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JcmV0dXJuIHBvc3QoYmVnaW4sIGVuZCwgdHgpOworICAgIENvbW1vblJlbW90ZSBiZWFuID0gcHJlUmVtb3RlKHR5cGUsIHR4KTsKKyAgICBsb25nIGJlZ2luID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7CisgICAgICAgIGJlYW4ubWFuZGF0b3J5KCk7CisgICAgfQorICAgIGxvbmcgZW5kID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgcmV0dXJuIHBvc3QoYmVnaW4sIGVuZCwgdHgpOwogICAgIH0KIAogICAgIHB1YmxpYyBmbG9hdCBuZXZlclJlbW90ZShpbnQgdHlwZSwgYm9vbGVhbiB0eCkgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKLQlDb21tb25SZW1vdGUgYmVhbiA9IHByZVJlbW90ZSh0eXBlLCB0eCk7Ci0JbG9uZyBiZWdpbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCWZvciAoIGludCBpPTA7IGk8SVRFUkFUSU9OUzsgaSsrICkgewotCSAgICBiZWFuLm5ldmVyKCk7Ci0JfQotCWxvbmcgZW5kID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JcmV0dXJuIHBvc3QoYmVnaW4sIGVuZCwgdHgpOworICAgIENvbW1vblJlbW90ZSBiZWFuID0gcHJlUmVtb3RlKHR5cGUsIHR4KTsKKyAgICBsb25nIGJlZ2luID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7CisgICAgICAgIGJlYW4ubmV2ZXIoKTsKKyAgICB9CisgICAgbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICByZXR1cm4gcG9zdChiZWdpbiwgZW5kLCB0eCk7CiAgICAgfQogCiAgICAgcHVibGljIGZsb2F0IHN1cHBvcnRzUmVtb3RlKGludCB0eXBlLCBib29sZWFuIHR4KSB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewotCUNvbW1vblJlbW90ZSBiZWFuID0gcHJlUmVtb3RlKHR5cGUsIHR4KTsKLQlsb25nIGJlZ2luID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7Ci0JICAgIGJlYW4uc3VwcG9ydHMoKTsKLQl9Ci0JbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQlyZXR1cm4gcG9zdChiZWdpbiwgZW5kLCB0eCk7CisgICAgQ29tbW9uUmVtb3RlIGJlYW4gPSBwcmVSZW1vdGUodHlwZSwgdHgpOworICAgIGxvbmcgYmVnaW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICBmb3IgKCBpbnQgaT0wOyBpPElURVJBVElPTlM7IGkrKyApIHsKKyAgICAgICAgYmVhbi5zdXBwb3J0cygpOworICAgIH0KKyAgICBsb25nIGVuZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgIHJldHVybiBwb3N0KGJlZ2luLCBlbmQsIHR4KTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgewotCWNvbnRleHQgPSBzYzsKKyAgICBjb250ZXh0ID0gc2M7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkge30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL2xvY2FsL2VqYi9TZnVsRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi9sb2NhbC9lamIvU2Z1bEVKQi5qYXZhCmluZGV4IGJkYjQ0YjEuLjM0Y2Q1MDYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL2xvY2FsL2VqYi9TZnVsRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3BlcmYvbG9jYWwvZWpiL1NmdWxFSkIuamF2YQpAQCAtMzQsMTAgKzM0LDEwIEBACiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgc2MpCiAgICAge30KIAotICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIAorICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpCiAgICAge30KIAotICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgCisgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKQogICAgIHt9CiAKICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3BlcmYvbG9jYWwvZWpiL1NsZXNzRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi9sb2NhbC9lamIvU2xlc3NFSkIuamF2YQppbmRleCBjZjViN2QwLi44NGU1ODRhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi9sb2NhbC9lamIvU2xlc3NFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi9sb2NhbC9lamIvU2xlc3NFSkIuamF2YQpAQCAtMzQsMTAgKzM0LDEwIEBACiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgc2MpCiAgICAge30KIAotICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIAorICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpCiAgICAge30KIAotICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgCisgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKQogICAgIHt9CiAKICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3BlcmYvbG9jYWwyL0NvbXBhcmUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL2xvY2FsMi9Db21wYXJlLmphdmEKaW5kZXggYTg5ZDM2OS4uZTZjN2IwYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3BlcmYvbG9jYWwyL0NvbXBhcmUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi9sb2NhbDIvQ29tcGFyZS5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAKICAgICAgICAgRmlsZSBmaWxlMSA9IG5ldyBGaWxlKGZpbGUxTmFtZSk7CiAgICAgICAgIEZpbGUgZmlsZTIgPSBuZXcgRmlsZShmaWxlMk5hbWUpOwotICAgICAgICAKKwogICAgICAgICBmbG9hdCBhbGxSZXN1bHRzID0gMDsKICAgICAgICAgaW50IHRvdGFsUmVzdWx0cyA9IDA7CiAKQEAgLTM5LDE2ICszOSwxNiBAQAogCiAgICAgICAgICAgICBMaW5lTnVtYmVyUmVhZGVyIHJlYWRlcjIgPSBuZXcgTGluZU51bWJlclJlYWRlcgogICAgICAgICAgICAgICAgIChuZXcgRmlsZVJlYWRlcihmaWxlMikpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN0cmluZyBuZXh0TGluZTEgPSByZWFkZXIxLnJlYWRMaW5lKCk7CiAKICAgICAgICAgICAgIHdoaWxlKG5leHRMaW5lMSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgU3RyaW5nIG5leHRMaW5lMiA9IHJlYWRlcjIucmVhZExpbmUoKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBTdHJpbmdUb2tlbml6ZXIgdG9rZW5pemVyMSA9IAorCisgICAgICAgICAgICAgICAgU3RyaW5nVG9rZW5pemVyIHRva2VuaXplcjEgPQogICAgICAgICAgICAgICAgICAgICBuZXcgU3RyaW5nVG9rZW5pemVyKG5leHRMaW5lMSk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nVG9rZW5pemVyIHRva2VuaXplcjIgPSAKLSAgICAgICAgICAgICAgICAgICAgbmV3IFN0cmluZ1Rva2VuaXplcihuZXh0TGluZTIpOyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBTdHJpbmdUb2tlbml6ZXIgdG9rZW5pemVyMiA9CisgICAgICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdUb2tlbml6ZXIobmV4dExpbmUyKTsKICAgICAgICAgICAgICAgICBTdHJpbmdCdWZmZXIgY2F0ZWdvcnkgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICAgICAgICAgICAgICAgYm9vbGVhbiB0eCA9IHRydWU7CiAgICAgICAgICAgICAgICAgaW50IG51bVJlc3VsdHMgPSAwOwpAQCAtODIsNyArODIsNyBAQAogCiAgICAgICAgICAgICAgICAgbmV4dExpbmUxID0gcmVhZGVyMS5yZWFkTGluZSgpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigpOwotICAgICAgICAgICAgfSAKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0b3RhbCByZXN1bHRzID0gIiArIHRvdGFsUmVzdWx0cyk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImF2ZyBwY2cgZGlmID0gIiArIGFsbFJlc3VsdHMgLyB0b3RhbFJlc3VsdHMpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3BlcmYvbG9jYWwyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi9sb2NhbDIvYnVpbGQucHJvcGVydGllcwppbmRleCA5MzkwYTUxLi5lYzJkMDE1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi9sb2NhbDIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi9sb2NhbDIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItcGVyZi1sb2NhbDIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL2xvY2FsMi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi9sb2NhbDIvYnVpbGQueG1sCmluZGV4IGE3ODBiNzUuLmU4NWMxNGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL2xvY2FsMi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3BlcmYvbG9jYWwyL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTQgKzQ2LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYzLDEwICs2MywxMCBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IjUwMDAwIDEwIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3BlcmYvbG9jYWwyL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL2xvY2FsMi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMzgwNWUwMy4uZDVkMjBhMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3BlcmYvbG9jYWwyL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi9sb2NhbDIvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHByaXZhdGUgaW50IG51bUl0ZXJhdGlvbnMgPSA1MDAwMDA7CkBAIC00MSwxNiArNDEsMTYgQEAKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImVqYi1wZXJmLWxvY2FsMklEIik7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgICAgICBpZiAoYXJncy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICBudW1JdGVyYXRpb25zID0gSW50ZWdlci5wYXJzZUludChhcmdzWzBdKTsKICAgICAgICAgICAgIG51bVRocmVhZHMgPSBJbnRlZ2VyLnBhcnNlSW50KGFyZ3NbMV0pOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogCiAgICAgICAgIHRyeSB7CkBAIC01OCwyNiArNTgsMjYgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTnVtIGl0ZXJhdGlvbnMgc2V0IHRvICIgKyBudW1JdGVyYXRpb25zKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTnVtIHRocmVhZHMgc2V0IHRvICIgKyBudW1UaHJlYWRzKTsKIAotCSAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKIAotCSAgICAvLyBjcmVhdGUgRUpCIHVzaW5nIGZhY3RvcnkgZnJvbSBjb250YWluZXIgCi0JICAgIGphdmEubGFuZy5PYmplY3Qgb2JqcmVmID0gCisgICAgICAgIC8vIGNyZWF0ZSBFSkIgdXNpbmcgZmFjdG9yeSBmcm9tIGNvbnRhaW5lcgorICAgICAgICBqYXZhLmxhbmcuT2JqZWN0IG9ianJlZiA9CiAgICAgICAgICAgICAgICAgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9QZXJmb3JtYW5jZUFwcCIpOwogCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2VkIHVwIGhvbWUhISIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tlZCB1cCBob21lISEiKTsKIAotCSAgICBIZWxsb0hvbWUgIGhvbWUgPSAoSGVsbG9Ib21lKQorICAgICAgICBIZWxsb0hvbWUgIGhvbWUgPSAoSGVsbG9Ib21lKQogICAgICAgICAgICAgICAgIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIEhlbGxvSG9tZS5jbGFzcyk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTmFycm93ZWQgaG9tZSEhIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTmFycm93ZWQgaG9tZSEhIik7CiAKICAgICAgICAgICAgIGhlbGxvcyA9IG5ldyBIZWxsb1tudW1UaHJlYWRzXTsKICAgICAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW1UaHJlYWRzOyBpKyspIHsKICAgICAgICAgICAgICAgICBoZWxsb3NbaV0gPSBob21lLmNyZWF0ZShudW1JdGVyYXRpb25zKTsKICAgICAgICAgICAgIH0KLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgdGhlIEVKQiEhIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IHRoZSBFSkIhISIpOwogCi0JICAgIC8vIGludm9rZSBtZXRob2Qgb24gdGhlIEVKQgotCSAgICBkb1BlcmZUZXN0KCk7CisgICAgICAgIC8vIGludm9rZSBtZXRob2Qgb24gdGhlIEVKQgorICAgICAgICBkb1BlcmZUZXN0KCk7CiAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbDIgbWFpbiIsIHN0YXQuUEFTUyk7CiAKQEAgLTg1LDYxICs4NSw2MSBAQAogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbDIgbWFpbiIgLCBzdGF0LkZBSUwpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgIAlyZXR1cm47CisKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBkb1BlcmZUZXN0KCkgCi0JdGhyb3dzIEV4Y2VwdGlvbgorICAgIHByaXZhdGUgdm9pZCBkb1BlcmZUZXN0KCkKKyAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewotCVN5c3RlbS5vdXQucHJpbnRsbigiXG5TdGF0ZWZ1bCBTZXNzaW9uIHJlc3VsdHMgKG1pY3Jvc2VjKTogXHR3aXRoIHR4IFx0bm8gdHg6Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJcblN0YXRlZnVsIFNlc3Npb24gcmVzdWx0cyAobWljcm9zZWMpOiBcdHdpdGggdHggXHRubyB0eDoiKTsKICAgICAgICAgaGVsbG9zWzBdLndhcm11cChDb21tb24uU1RBVEVGVUwpOwotICAgICAgICAKLQlydW5UZXN0cyhDb21tb24uU1RBVEVGVUwpOwogCi0JU3lzdGVtLm91dC5wcmludGxuKCJcblN0YXRlbGVzcyBTZXNzaW9uIHJlc3VsdHMgKG1pY3Jvc2VjKTogXHR3aXRoIHR4IFx0bm8gdHg6Iik7CisgICAgcnVuVGVzdHMoQ29tbW9uLlNUQVRFRlVMKTsKKworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG5TdGF0ZWxlc3MgU2Vzc2lvbiByZXN1bHRzIChtaWNyb3NlYyk6IFx0d2l0aCB0eCBcdG5vIHR4OiIpOwogCiAgICAgICAgIGhlbGxvc1swXS53YXJtdXAoQ29tbW9uLlNUQVRFTEVTUyk7Ci0JcnVuVGVzdHMoQ29tbW9uLlNUQVRFTEVTUyk7CisgICAgcnVuVGVzdHMoQ29tbW9uLlNUQVRFTEVTUyk7CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlxuQk1QIEVudGl0eSByZXN1bHRzIChtaWNyb3NlYyk6IFx0XHR3aXRoIHR4IFx0bm8gdHg6Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJcbkJNUCBFbnRpdHkgcmVzdWx0cyAobWljcm9zZWMpOiBcdFx0d2l0aCB0eCBcdG5vIHR4OiIpOwogICAgICAgICBoZWxsb3NbMF0ud2FybXVwKENvbW1vbi5CTVApOwogCi0JcnVuVGVzdHMoQ29tbW9uLkJNUCk7CisgICAgcnVuVGVzdHMoQ29tbW9uLkJNUCk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHJ1blRlc3RzKGludCB0eXBlKQotCXRocm93cyBFeGNlcHRpb24KKyAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewogCi0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY2FyIG5vIHR4ICAgIDogXHRcdFx0XHQiIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNhciBubyB0eCAgICA6IFx0XHRcdFx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBydW5UZXN0KHR5cGUsIEludm9rZVR5cGUuQ0FSLCBmYWxzZSkpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm5vdFN1cHBvcnRlZCA6IFx0XHRcdFx0IiAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJub3RTdXBwb3J0ZWQgOiBcdFx0XHRcdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgcnVuVGVzdCh0eXBlLCBJbnZva2VUeXBlLk5PVF9TVVBQT1JURUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSkgKyAiXHRcdCIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBydW5UZXN0KHR5cGUsIEludm9rZVR5cGUuTk9UX1NVUFBPUlRFRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSkpOwogCi0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigic3VwcG9ydHMgOiBcdFx0XHRcdCIgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigic3VwcG9ydHMgOiBcdFx0XHRcdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgcnVuVGVzdCh0eXBlLCBJbnZva2VUeXBlLlNVUFBPUlRTLCB0cnVlKSArICJcdFx0IiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHJ1blRlc3QodHlwZSwgSW52b2tlVHlwZS5TVVBQT1JUUywgZmFsc2UpICk7CiAKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJyZXF1aXJlZCA6IFx0XHRcdFx0IiAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJyZXF1aXJlZCA6IFx0XHRcdFx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBydW5UZXN0KHR5cGUsIEludm9rZVR5cGUuUkVRVUlSRUQsdHJ1ZSkgKyAiXHRcdCIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBydW5UZXN0KHR5cGUsIEludm9rZVR5cGUuUkVRVUlSRUQsIGZhbHNlKSApOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInJlcXVpcmVzTmV3IDogXHRcdFx0XHQiIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInJlcXVpcmVzTmV3IDogXHRcdFx0XHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHJ1blRlc3QodHlwZSwgSW52b2tlVHlwZS5SRVFVSVJFU19ORVcsIHRydWUpICsgIlx0XHQiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgcnVuVGVzdCh0eXBlLCBJbnZva2VUeXBlLlJFUVVJUkVTX05FVywgZmFsc2UpICk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibWFuZGF0b3J5IDogXHRcdFx0XHQiIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm1hbmRhdG9yeSA6IFx0XHRcdFx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBydW5UZXN0KHR5cGUsIEludm9rZVR5cGUuTUFOREFUT1JZLCB0cnVlKSk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibmV2ZXIgOiBcdFx0XHRcdFx0XHQiIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm5ldmVyIDogXHRcdFx0XHRcdFx0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBydW5UZXN0KHR5cGUsIEludm9rZVR5cGUuTkVWRVIsIGZhbHNlKSApOwogCiAgICAgfQogCiAgICAgcHJpdmF0ZSBmbG9hdCBydW5UZXN0KGludCB0eXBlLCBJbnZva2VUeXBlIGludm9rZVR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiB0eCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIEludm9rZVRocmVhZFtdIHRocmVhZHMgPSBuZXcgSW52b2tlVGhyZWFkW251bVRocmVhZHNdOwogICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbnVtVGhyZWFkczsgaSsrKSB7CiAgICAgICAgICAgICB0aHJlYWRzW2ldID0gbmV3IEludm9rZVRocmVhZChpbnZva2VUeXBlLCB0eXBlLCBoZWxsb3NbaV0sIHR4KTsKQEAgLTE1Nyw3ICsxNTcsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIHRvdGFsIC8gbnVtVGhyZWFkczsKLSAgICAgICAgCisKICAgICB9CiAKICAgICBlbnVtIEludm9rZVR5cGUgewpAQCAtMTkyLDUwICsxOTIsNTAgQEAKIAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBzd2l0Y2goaW52b2tlVHlwZSkgewotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGNhc2UgQ0FSIDoKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0VGltZSA9IGludm9rZVRhcmdldC5jcmVhdGVBY2Nlc3NSZW1vdmUKICAgICAgICAgICAgICAgICAgICAgICAgIChpbnZva2VCZWFuVHlwZSwgaW52b2tlVHgpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBjYXNlIE5PVF9TVVBQT1JURUQgOgogICAgICAgICAgICAgICAgICAgICByZXN1bHRUaW1lID0gaW52b2tlVGFyZ2V0Lm5vdFN1cHBvcnRlZAogICAgICAgICAgICAgICAgICAgICAgICAgKGludm9rZUJlYW5UeXBlLCBpbnZva2VUeCk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGNhc2UgU1VQUE9SVFMgOgogICAgICAgICAgICAgICAgICAgICByZXN1bHRUaW1lID0gaW52b2tlVGFyZ2V0LnN1cHBvcnRzCiAgICAgICAgICAgICAgICAgICAgICAgICAoaW52b2tlQmVhblR5cGUsIGludm9rZVR4KTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgY2FzZSBSRVFVSVJFRCA6CiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFRpbWUgPSBpbnZva2VUYXJnZXQucmVxdWlyZWQKICAgICAgICAgICAgICAgICAgICAgICAgIChpbnZva2VCZWFuVHlwZSwgaW52b2tlVHgpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIAorCisKICAgICAgICAgICAgICAgICBjYXNlIFJFUVVJUkVTX05FVyA6CiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFRpbWUgPSBpbnZva2VUYXJnZXQucmVxdWlyZXNOZXcKICAgICAgICAgICAgICAgICAgICAgICAgIChpbnZva2VCZWFuVHlwZSwgaW52b2tlVHgpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIAorCisKICAgICAgICAgICAgICAgICBjYXNlIE1BTkRBVE9SWSA6CiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFRpbWUgPSBpbnZva2VUYXJnZXQubWFuZGF0b3J5CiAgICAgICAgICAgICAgICAgICAgICAgICAoaW52b2tlQmVhblR5cGUsIGludm9rZVR4KTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAKKworCiAgICAgICAgICAgICAgICAgY2FzZSBORVZFUiA6CiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFRpbWUgPSBpbnZva2VUYXJnZXQubmV2ZXIKICAgICAgICAgICAgICAgICAgICAgICAgIChpbnZva2VCZWFuVHlwZSwgaW52b2tlVHgpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi9sb2NhbDIvZWpiL0JtcEVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3BlcmYvbG9jYWwyL2VqYi9CbXBFSkIuamF2YQppbmRleCAyMTgzYjI5Li41ZTgwZTBhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi9sb2NhbDIvZWpiL0JtcEVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL2xvY2FsMi9lamIvQm1wRUpCLmphdmEKQEAgLTIzLDcgKzIzLDcgQEAKICAgICBwdWJsaWMgQm1wRUpCKCl7fQogCiAgICAgcHVibGljIFN0cmluZyBlamJDcmVhdGUoU3RyaW5nIHMpIHsKLQlyZXR1cm4gczsKKyAgICByZXR1cm4gczsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJQb3N0Q3JlYXRlKFN0cmluZyBzKSB7fQpAQCAtNDEsMTAgKzQxLDEwIEBACiAgICAgcHVibGljIHZvaWQgdW5zZXRFbnRpdHlDb250ZXh0KCkKICAgICB7fQogCi0gICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgCisgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkKICAgICB7fQogCi0gICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSAKKyAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpCiAgICAge30KIAogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpCkBAIC01Nyw2ICs1Nyw2IEBACiAgICAge30KIAogICAgIHB1YmxpYyBTdHJpbmcgZWpiRmluZEJ5UHJpbWFyeUtleShTdHJpbmcgcykgewotCXJldHVybiBzOworICAgIHJldHVybiBzOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL2xvY2FsMi9lamIvSGVsbG9FSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL2xvY2FsMi9lamIvSGVsbG9FSkIuamF2YQppbmRleCA5OTNiZTNjLi5iNzMxMzQ5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi9sb2NhbDIvZWpiL0hlbGxvRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3BlcmYvbG9jYWwyL2VqYi9IZWxsb0VKQi5qYXZhCkBAIC00Myw0NiArNDMsNDYgQEAKIAogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZShpbnQgbnVtSXRlcmF0aW9ucykgewogCi0JdHJ5IHsKKyAgICB0cnkgewogICAgICAgICAgICAgaXRlcmF0aW9ucyA9IG51bUl0ZXJhdGlvbnM7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk51bSBpdGVyYXRpb25zIHNldCB0byAiICsgaXRlcmF0aW9ucyk7CiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JICAgIHNmdWxIb21lID0gKFNmdWxIb21lKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NmdWwiKTsKKyAgICAgICAgc2Z1bEhvbWUgPSAoU2Z1bEhvbWUpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2Z1bCIpOwogICAgICAgICAgICAgc2Z1bCA9IHNmdWxIb21lLmNyZWF0ZSgpOwogCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRlZCBTdGF0ZWZ1bCBiZWFuLiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0ZWQgU3RhdGVmdWwgYmVhbi4iKTsKIAotCSAgIAkgICAgIAotCSAgICBzbGVzc0hvbWUgPSAoU2xlc3NIb21lKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NsZXNzIik7CisKKyAgICAgICAgc2xlc3NIb21lID0gKFNsZXNzSG9tZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TbGVzcyIpOwogICAgICAgICAgICAgc2xlc3MgPSBzbGVzc0hvbWUuY3JlYXRlKCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRlZCBTdGF0ZWxlc3MgYmVhbi4iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGVkIFN0YXRlbGVzcyBiZWFuLiIpOwogCiAKLQkgICAgYm1wSG9tZSA9IChCbXBIb21lKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL0JtcCIpOwotICAgICAgICAgICAgCisgICAgICAgIGJtcEhvbWUgPSAoQm1wSG9tZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9CbXAiKTsKKwogICAgICAgICAgICAgYm1wID0gYm1wSG9tZS5jcmVhdGUocGtleSk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRlZCBCTVAgYmVhbi4iKTsKLQkgICAJICAgICAKLQkgICAgdXQgPSBjb250ZXh0LmdldFVzZXJUcmFuc2FjdGlvbigpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0ZWQgQk1QIGJlYW4uIik7CiAKLQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJjb3VsZG4ndCBnZXQgc2Z1bCBiZWFuIik7Ci0JICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotCX0KKyAgICAgICAgdXQgPSBjb250ZXh0LmdldFVzZXJUcmFuc2FjdGlvbigpOworCisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY291bGRuJ3QgZ2V0IHNmdWwgYmVhbiIpOworICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CiAgICAgfQogCiAKLSAgICBwdWJsaWMgZmxvYXQgY3JlYXRlQWNjZXNzUmVtb3ZlKGludCB0eXBlLCBib29sZWFuIHR4KSAKKyAgICBwdWJsaWMgZmxvYXQgY3JlYXRlQWNjZXNzUmVtb3ZlKGludCB0eXBlLCBib29sZWFuIHR4KQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKIAotICAgICAgIAlsb25nIGJlZ2luID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgICAgICAgIGxvbmcgYmVnaW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKIAogICAgICAgICBmb3IgKCBpbnQgaT0wOyBpPGl0ZXJhdGlvbnM7IGkrKyApIHsKICAgICAgICAgICAgIENvbW1vbiBiZWFuID0gcHJlTG9jYWwodHlwZSwgdHgsIHRydWUpOwogICAgICAgICAgICAgYmVhbi5yZXF1aXJlZCgpOwogICAgICAgICAgICAgYmVhbi5yZW1vdmUoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBsb25nIGVuZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwogICAgICAgICByZXR1cm4gcG9zdChiZWdpbiwgZW5kLCBmYWxzZSk7CiAgICAgfQpAQCAtOTEsNDIgKzkxLDQyIEBACiAgICAgICAgIHdhcm11cExvY2FsKHR5cGUsIHRydWUpOwogICAgICAgICB3YXJtdXBMb2NhbCh0eXBlLCBmYWxzZSk7CiAKLQkvLyBNZWFzdXJlIGxvb3BpbmcgYW5kIHRpbWluZyBvdmVyaGVhZCAKLQlsb25nIGJlZ2luID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JZm9yICggaW50IGk9MDsgaTxpdGVyYXRpb25zOyBpKysgKSB7Ci0JfQotCWxvbmcgZW5kID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0Jb3ZlcmhlYWQgPSBlbmQgLSBiZWdpbjsKKyAgICAvLyBNZWFzdXJlIGxvb3BpbmcgYW5kIHRpbWluZyBvdmVyaGVhZAorICAgIGxvbmcgYmVnaW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICBmb3IgKCBpbnQgaT0wOyBpPGl0ZXJhdGlvbnM7IGkrKyApIHsKKyAgICB9CisgICAgbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICBvdmVyaGVhZCA9IGVuZCAtIGJlZ2luOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCB3YXJtdXBMb2NhbChpbnQgdHlwZSwgYm9vbGVhbiB0eCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JLy8gZ2V0IEhvdHNwb3Qgd2FybWVkIHVwCQotCUNvbW1vbiBiZWFuID0gcHJlTG9jYWwodHlwZSwgdHgpOwotCWZvciAoIGludCBpPTA7IGk8aXRlcmF0aW9uczsgaSsrICkgewotCSAgICBiZWFuLnJlcXVpcmVzTmV3KCk7Ci0JICAgIGJlYW4ubm90U3VwcG9ydGVkKCk7Ci0JfQotCWZvciAoIGludCBpPTA7IGk8aXRlcmF0aW9uczsgaSsrICkgewotCSAgICBiZWFuLnJlcXVpcmVkKCk7Ci0JICAgIGlmICggdHggKQotCQliZWFuLm1hbmRhdG9yeSgpOwotCSAgICBlbHNlCi0JCWJlYW4ubmV2ZXIoKTsKLQkgICAgYmVhbi5zdXBwb3J0cygpOwotCX0KLQlpZiAoIHR4ICkgdHJ5IHsgdXQuY29tbWl0KCk7IH0gY2F0Y2ggKCBFeGNlcHRpb24gZXggKSB7CisgICAgLy8gZ2V0IEhvdHNwb3Qgd2FybWVkIHVwCisgICAgQ29tbW9uIGJlYW4gPSBwcmVMb2NhbCh0eXBlLCB0eCk7CisgICAgZm9yICggaW50IGk9MDsgaTxpdGVyYXRpb25zOyBpKysgKSB7CisgICAgICAgIGJlYW4ucmVxdWlyZXNOZXcoKTsKKyAgICAgICAgYmVhbi5ub3RTdXBwb3J0ZWQoKTsKKyAgICB9CisgICAgZm9yICggaW50IGk9MDsgaTxpdGVyYXRpb25zOyBpKysgKSB7CisgICAgICAgIGJlYW4ucmVxdWlyZWQoKTsKKyAgICAgICAgaWYgKCB0eCApCisgICAgICAgIGJlYW4ubWFuZGF0b3J5KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgYmVhbi5uZXZlcigpOworICAgICAgICBiZWFuLnN1cHBvcnRzKCk7CisgICAgfQorICAgIGlmICggdHggKSB0cnkgeyB1dC5jb21taXQoKTsgfSBjYXRjaCAoIEV4Y2VwdGlvbiBleCApIHsKICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHByaXZhdGUgQ29tbW9uIHByZUxvY2FsKGludCB0eXBlLCBib29sZWFuIHR4KSAKKyAgICBwcml2YXRlIENvbW1vbiBwcmVMb2NhbChpbnQgdHlwZSwgYm9vbGVhbiB0eCkKICAgICB7CiAgICAgICAgIHJldHVybiBwcmVMb2NhbCh0eXBlLCB0eCwgZmFsc2UpOwogICAgIH0KIAotICAgIHByaXZhdGUgQ29tbW9uIHByZUxvY2FsKGludCB0eXBlLCBib29sZWFuIHR4LCBib29sZWFuIGNyZWF0ZU5ldykgCisgICAgcHJpdmF0ZSBDb21tb24gcHJlTG9jYWwoaW50IHR5cGUsIGJvb2xlYW4gdHgsIGJvb2xlYW4gY3JlYXRlTmV3KQogICAgIHsKLQlpZiAoIHR4ICkgdHJ5IHsgdXQuYmVnaW4oKTsgfSBjYXRjaCAoIEV4Y2VwdGlvbiBleCApIHsKKyAgICBpZiAoIHR4ICkgdHJ5IHsgdXQuYmVnaW4oKTsgfSBjYXRjaCAoIEV4Y2VwdGlvbiBleCApIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CiAgICAgICAgIHRyeSB7CkBAIC0xNDQsODIgKzE0NCw4MiBAQAogCiAgICAgcHJpdmF0ZSBmbG9hdCBwb3N0KGxvbmcgYmVnaW4sIGxvbmcgZW5kLCBib29sZWFuIHR4KQogICAgIHsKLQlpZiAoIHR4ICkgdHJ5IHsgdXQuY29tbWl0KCk7IH0gY2F0Y2ggKCBFeGNlcHRpb24gZXggKSB7CisgICAgaWYgKCB0eCApIHRyeSB7IHV0LmNvbW1pdCgpOyB9IGNhdGNoICggRXhjZXB0aW9uIGV4ICkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLQlyZXR1cm4gKGZsb2F0KSggKChkb3VibGUpKGVuZC1iZWdpbi1vdmVyaGVhZCkpLygoZG91YmxlKWl0ZXJhdGlvbnMpICogMTAwMC4wICk7CisgICAgcmV0dXJuIChmbG9hdCkoICgoZG91YmxlKShlbmQtYmVnaW4tb3ZlcmhlYWQpKS8oKGRvdWJsZSlpdGVyYXRpb25zKSAqIDEwMDAuMCApOwogICAgIH0KIAotICAgIHB1YmxpYyBmbG9hdCByZXF1aXJlc05ldyhpbnQgdHlwZSwgYm9vbGVhbiB0eCkgCisgICAgcHVibGljIGZsb2F0IHJlcXVpcmVzTmV3KGludCB0eXBlLCBib29sZWFuIHR4KQogICAgIHsKLQlDb21tb24gYmVhbiA9IHByZUxvY2FsKHR5cGUsIHR4KTsKLQlsb25nIGJlZ2luID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JZm9yICggaW50IGk9MDsgaTxpdGVyYXRpb25zOyBpKysgKSB7Ci0JICAgIGJlYW4ucmVxdWlyZXNOZXcoKTsKLQl9Ci0JbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQlyZXR1cm4gcG9zdChiZWdpbiwgZW5kLCB0eCk7CisgICAgQ29tbW9uIGJlYW4gPSBwcmVMb2NhbCh0eXBlLCB0eCk7CisgICAgbG9uZyBiZWdpbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgIGZvciAoIGludCBpPTA7IGk8aXRlcmF0aW9uczsgaSsrICkgeworICAgICAgICBiZWFuLnJlcXVpcmVzTmV3KCk7CisgICAgfQorICAgIGxvbmcgZW5kID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgcmV0dXJuIHBvc3QoYmVnaW4sIGVuZCwgdHgpOwogICAgIH0KIAotICAgIHB1YmxpYyBmbG9hdCBub3RTdXBwb3J0ZWQoaW50IHR5cGUsIGJvb2xlYW4gdHgpIAorICAgIHB1YmxpYyBmbG9hdCBub3RTdXBwb3J0ZWQoaW50IHR5cGUsIGJvb2xlYW4gdHgpCiAgICAgewotCUNvbW1vbiBiZWFuID0gcHJlTG9jYWwodHlwZSwgdHgpOwotCWxvbmcgYmVnaW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQlmb3IgKCBpbnQgaT0wOyBpPGl0ZXJhdGlvbnM7IGkrKyApIHsKLQkgICAgYmVhbi5ub3RTdXBwb3J0ZWQoKTsKLQl9Ci0JbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQlyZXR1cm4gcG9zdChiZWdpbiwgZW5kLCB0eCk7CisgICAgQ29tbW9uIGJlYW4gPSBwcmVMb2NhbCh0eXBlLCB0eCk7CisgICAgbG9uZyBiZWdpbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgIGZvciAoIGludCBpPTA7IGk8aXRlcmF0aW9uczsgaSsrICkgeworICAgICAgICBiZWFuLm5vdFN1cHBvcnRlZCgpOworICAgIH0KKyAgICBsb25nIGVuZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgIHJldHVybiBwb3N0KGJlZ2luLCBlbmQsIHR4KTsKICAgICB9CiAKLSAgICBwdWJsaWMgZmxvYXQgcmVxdWlyZWQoaW50IHR5cGUsIGJvb2xlYW4gdHgpIAorICAgIHB1YmxpYyBmbG9hdCByZXF1aXJlZChpbnQgdHlwZSwgYm9vbGVhbiB0eCkKICAgICB7Ci0JQ29tbW9uIGJlYW4gPSBwcmVMb2NhbCh0eXBlLCB0eCk7Ci0JbG9uZyBiZWdpbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCWZvciAoIGludCBpPTA7IGk8aXRlcmF0aW9uczsgaSsrICkgewotCSAgICBiZWFuLnJlcXVpcmVkKCk7Ci0JfQotCWxvbmcgZW5kID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JcmV0dXJuIHBvc3QoYmVnaW4sIGVuZCwgdHgpOworICAgIENvbW1vbiBiZWFuID0gcHJlTG9jYWwodHlwZSwgdHgpOworICAgIGxvbmcgYmVnaW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICBmb3IgKCBpbnQgaT0wOyBpPGl0ZXJhdGlvbnM7IGkrKyApIHsKKyAgICAgICAgYmVhbi5yZXF1aXJlZCgpOworICAgIH0KKyAgICBsb25nIGVuZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgIHJldHVybiBwb3N0KGJlZ2luLCBlbmQsIHR4KTsKICAgICB9CiAKLSAgICBwdWJsaWMgZmxvYXQgbWFuZGF0b3J5KGludCB0eXBlLCBib29sZWFuIHR4KSAKKyAgICBwdWJsaWMgZmxvYXQgbWFuZGF0b3J5KGludCB0eXBlLCBib29sZWFuIHR4KQogICAgIHsKLQlDb21tb24gYmVhbiA9IHByZUxvY2FsKHR5cGUsIHR4KTsKLQlsb25nIGJlZ2luID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JZm9yICggaW50IGk9MDsgaTxpdGVyYXRpb25zOyBpKysgKSB7Ci0JICAgIGJlYW4ubWFuZGF0b3J5KCk7Ci0JfQotCWxvbmcgZW5kID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JcmV0dXJuIHBvc3QoYmVnaW4sIGVuZCwgdHgpOworICAgIENvbW1vbiBiZWFuID0gcHJlTG9jYWwodHlwZSwgdHgpOworICAgIGxvbmcgYmVnaW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICBmb3IgKCBpbnQgaT0wOyBpPGl0ZXJhdGlvbnM7IGkrKyApIHsKKyAgICAgICAgYmVhbi5tYW5kYXRvcnkoKTsKKyAgICB9CisgICAgbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICByZXR1cm4gcG9zdChiZWdpbiwgZW5kLCB0eCk7CiAgICAgfQogCi0gICAgcHVibGljIGZsb2F0IG5ldmVyKGludCB0eXBlLCBib29sZWFuIHR4KSAKKyAgICBwdWJsaWMgZmxvYXQgbmV2ZXIoaW50IHR5cGUsIGJvb2xlYW4gdHgpCiAgICAgewotCUNvbW1vbiBiZWFuID0gcHJlTG9jYWwodHlwZSwgdHgpOwotCWxvbmcgYmVnaW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQlmb3IgKCBpbnQgaT0wOyBpPGl0ZXJhdGlvbnM7IGkrKyApIHsKLQkgICAgYmVhbi5uZXZlcigpOwotCX0KLQlsb25nIGVuZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCXJldHVybiBwb3N0KGJlZ2luLCBlbmQsIHR4KTsKKyAgICBDb21tb24gYmVhbiA9IHByZUxvY2FsKHR5cGUsIHR4KTsKKyAgICBsb25nIGJlZ2luID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgZm9yICggaW50IGk9MDsgaTxpdGVyYXRpb25zOyBpKysgKSB7CisgICAgICAgIGJlYW4ubmV2ZXIoKTsKKyAgICB9CisgICAgbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICByZXR1cm4gcG9zdChiZWdpbiwgZW5kLCB0eCk7CiAgICAgfQogCi0gICAgcHVibGljIGZsb2F0IHN1cHBvcnRzKGludCB0eXBlLCBib29sZWFuIHR4KSAKKyAgICBwdWJsaWMgZmxvYXQgc3VwcG9ydHMoaW50IHR5cGUsIGJvb2xlYW4gdHgpCiAgICAgewotCUNvbW1vbiBiZWFuID0gcHJlTG9jYWwodHlwZSwgdHgpOwotCWxvbmcgYmVnaW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQlmb3IgKCBpbnQgaT0wOyBpPGl0ZXJhdGlvbnM7IGkrKyApIHsKLQkgICAgYmVhbi5zdXBwb3J0cygpOwotCX0KLQlsb25nIGVuZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCXJldHVybiBwb3N0KGJlZ2luLCBlbmQsIHR4KTsKKyAgICBDb21tb24gYmVhbiA9IHByZUxvY2FsKHR5cGUsIHR4KTsKKyAgICBsb25nIGJlZ2luID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgZm9yICggaW50IGk9MDsgaTxpdGVyYXRpb25zOyBpKysgKSB7CisgICAgICAgIGJlYW4uc3VwcG9ydHMoKTsKKyAgICB9CisgICAgbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICByZXR1cm4gcG9zdChiZWdpbiwgZW5kLCB0eCk7CiAgICAgfQogCiAKIAogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7Ci0JY29udGV4dCA9IHNjOworICAgIGNvbnRleHQgPSBzYzsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7fQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3BlcmYvbG9jYWwyL2VqYi9TZnVsRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi9sb2NhbDIvZWpiL1NmdWxFSkIuamF2YQppbmRleCAzNjQ4Yzg2Li44ZjI2N2Y0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi9sb2NhbDIvZWpiL1NmdWxFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi9sb2NhbDIvZWpiL1NmdWxFSkIuamF2YQpAQCAtMzQsMTAgKzM0LDEwIEBACiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgc2MpCiAgICAge30KIAotICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIAorICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpCiAgICAge30KIAotICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgCisgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKQogICAgIHt9CiAKICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3BlcmYvbG9jYWwyL2VqYi9TbGVzc0VKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3BlcmYvbG9jYWwyL2VqYi9TbGVzc0VKQi5qYXZhCmluZGV4IDkyMzI4Y2IuLmI4MTk5ZDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL2xvY2FsMi9lamIvU2xlc3NFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi9sb2NhbDIvZWpiL1NsZXNzRUpCLmphdmEKQEAgLTM0LDEwICszNCwxMCBAQAogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKQogICAgIHt9CiAKLSAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSAKKyAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKQogICAgIHt9CiAKLSAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIAorICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkKICAgICB7fQogCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL3RpbWVyMS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3BlcmYvdGltZXIxL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggN2RiOWE1My4uY2IyNjc3OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3BlcmYvdGltZXIxL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3BlcmYvdGltZXIxL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIxICsxNSwyMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLXBlcmYtdGltZXIxIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi90aW1lcjEvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3BlcmYvdGltZXIxL2J1aWxkLnhtbAppbmRleCAxYTgwY2MwLi5mMDhlOTBkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi90aW1lcjEvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL3RpbWVyMS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDE0ICs0NiwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudCouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjMsNyArNjMsNyBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJjcmVhdGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTc1LDE0ICs3NSwxNCBAQAogICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIxIDEwMDAiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3BlcmYvdGltZXIxL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL3RpbWVyMS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggZjg5ZWY4OC4uMzQzMDkxYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3BlcmYvdGltZXIxL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi90aW1lcjEvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNyw5ICsyNyw5IEBACiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcga1Rlc3ROb3RSdW4gICAgPSAiVEVTVCBOT1QgUlVOIjsKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBrVGVzdFBhc3NlZCAgICA9ICJURVNUIFBBU1NFRCI7CiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcga1Rlc3RGYWlsZWQgICAgPSAiVEVTVCBGQUlMRUQiOwotICAgIAotICAgIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisKKworICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgQEVKQiBUaW1lclNlc3Npb24gdGltZXJTZXNzaW9uOwpAQCAtMzcsNyArMzcsNyBAQAogICAgIHByaXZhdGUgc3RhdGljIEBSZXNvdXJjZShtYXBwZWROYW1lPSJqbXMvZWpiX3BlcmZfdGltZXIxX1RRQ0YiKQogICAgICAgICBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHFjRmFjdG9yeTsKIAotICAgIHByaXZhdGUgc3RhdGljIEBSZXNvdXJjZShtYXBwZWROYW1lPSJqbXMvZWpiX3BlcmZfdGltZXIxX1RRdWV1ZSIpIAorICAgIHByaXZhdGUgc3RhdGljIEBSZXNvdXJjZShtYXBwZWROYW1lPSJqbXMvZWpiX3BlcmZfdGltZXIxX1RRdWV1ZSIpCiAgICAgICAgIFF1ZXVlIHF1ZXVlOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewpAQCAtNTYsMzAgKzU2LDMwIEBACiAKICAgICBwdWJsaWMgU3RyaW5nIGRvVGVzdChpbnQgaW50ZXJ2YWwsIGludCBtYXhUaW1lb3V0cykgewogICAgICAgICBTdHJpbmcgcmVzdWx0ID0ga1Rlc3RQYXNzZWQ7Ci0gICAgICAgIFF1ZXVlQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gbnVsbDsgCisgICAgICAgIFF1ZXVlQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gbnVsbDsKIAogICAgICAgICB0aW1lclNlc3Npb24uY3JlYXRlVGltZXIoaW50ZXJ2YWwsIG1heFRpbWVvdXRzKTsKIAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0aW5nIHBlcmlvZGljIHRpbWVyIHdpdGggaW50ZXJ2YWwgb2YgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnZhbCArICIgbWlsbGlzZWNvbmRzLiIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk1heCB0aW1lb3V0cyA9ICIgKyBtYXhUaW1lb3V0cyk7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBjb25uZWN0aW9uID0gcWNGYWN0b3J5LmNyZWF0ZVF1ZXVlQ29ubmVjdGlvbigpOwotICAgICAgICAgICAgUXVldWVTZXNzaW9uIHNlc3Npb24gPSAKKyAgICAgICAgICAgIFF1ZXVlU2Vzc2lvbiBzZXNzaW9uID0KICAgICAgICAgICAgICAgICBjb25uZWN0aW9uLmNyZWF0ZVF1ZXVlU2Vzc2lvbihmYWxzZSwgU2Vzc2lvbi5BVVRPX0FDS05PV0xFREdFKTsKICAgICAgICAgICAgIFF1ZXVlUmVjZWl2ZXIgcmVjZWl2ZXIgPSBzZXNzaW9uLmNyZWF0ZVJlY2VpdmVyKHF1ZXVlKTsKICAgICAgICAgICAgIGNvbm5lY3Rpb24uc3RhcnQoKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2FpdGluZyBmb3IgbWVzc2FnZSIpOwogICAgICAgICAgICAgTWVzc2FnZSBtZXNzYWdlID0gcmVjZWl2ZXIucmVjZWl2ZSgpOwogICAgICAgICAgICAgVGV4dE1lc3NhZ2UgdGV4dE1zZyA9IChUZXh0TWVzc2FnZSltZXNzYWdlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIChtZXNzYWdlID09IG51bGwpIHx8IAorCisgICAgICAgICAgICBpZiAoIChtZXNzYWdlID09IG51bGwpIHx8CiAgICAgICAgICAgICAgICAgICghIHRleHRNc2cuZ2V0VGV4dCgpLmVxdWFscygiZWpiVGltZW91dCgpIGludm9rZWQiKSkpCiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiUmVjZWl2ZWQgYSBudWxsIG1lc3NhZ2UgLi4uIFRpbWVPdXQgZmFpbGVkISEiKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTWVzc2FnZSA6ICIgKyBtZXNzYWdlKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgCisKKwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoInRpbWVyMSAiLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL3RpbWVyMS9lamIvVGltZXJTZXNzaW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi90aW1lcjEvZWpiL1RpbWVyU2Vzc2lvbi5qYXZhCmluZGV4IDFhZTg0Y2MuLmVlNDIwZTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL3RpbWVyMS9lamIvVGltZXJTZXNzaW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3BlcmYvdGltZXIxL2VqYi9UaW1lclNlc3Npb24uamF2YQpAQCAtMjIsNiArMjIsNiBAQAogcHVibGljIGludGVyZmFjZSBUaW1lclNlc3Npb24gewogCiAgICAgcHVibGljIHZvaWQgY3JlYXRlVGltZXIoaW50IGludGVydmFsSW5NaWxsaXMsIGludCBudW1UaW1lb3V0cyk7Ci0gICAgCisKIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3BlcmYvdGltZXIxL2VqYi9UaW1lclNlc3Npb25FSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9wZXJmL3RpbWVyMS9lamIvVGltZXJTZXNzaW9uRUpCLmphdmEKaW5kZXggYjRiMDFkMC4uYjMxZTMxYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3BlcmYvdGltZXIxL2VqYi9UaW1lclNlc3Npb25FSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcGVyZi90aW1lcjEvZWpiL1RpbWVyU2Vzc2lvbkVKQi5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiAgICAgcHJpdmF0ZSBRdWV1ZUNvbm5lY3Rpb24gY29ubmVjdGlvbjsKIAogICAgIHByaXZhdGUgUXVldWVTZXNzaW9uIHNlc3Npb247Ci0gICAgCisKICAgICBAUmVzb3VyY2UobWFwcGVkTmFtZT0iam1zL2VqYl9wZXJmX3RpbWVyMV9UUXVldWUiKQogICAgIHByaXZhdGUgUXVldWUgcXVldWU7CiAKQEAgLTU4LDcgKzU4LDcgQEAKICAgICBwdWJsaWMgdm9pZCBlamJUaW1lb3V0KFRpbWVyIHRpbWVyKSB7CiAKICAgICAgICAgdGltZW91dENvdW50Kys7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKCB0aW1lb3V0Q291bnQgPD0gbWF4VGltZW91dHMgKSB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTc0LDcgKzc0LDcgQEAKIAogICAgICAgICAgICAgY29ubmVjdGlvbiA9IHFjRmFjdG9yeS5jcmVhdGVRdWV1ZUNvbm5lY3Rpb24oKTsKIAotICAgICAgICAgICAgUXVldWVTZXNzaW9uIHNlc3Npb24gPSAKKyAgICAgICAgICAgIFF1ZXVlU2Vzc2lvbiBzZXNzaW9uID0KICAgICAgICAgICAgICAgICBjb25uZWN0aW9uLmNyZWF0ZVF1ZXVlU2Vzc2lvbih0cnVlLCBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UpOwogICAgICAgICAgICAgc2VuZGVyICA9IHNlc3Npb24uY3JlYXRlU2VuZGVyKHF1ZXVlKTsKIApAQCAtOTYsNyArOTYsNyBAQAogICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB9Ci0JfQorICAgIH0KIAogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3BvbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcG9tLnhtbAppbmRleCBiYjU5NTAxLi5jZDc5NDBjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcG9tLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcG9tLnhtbApAQCAtMjcsNyArMjcsNyBAQAogICAgIDxncm91cElkPm9yZy5nbGFzc2Zpc2gubWFpbi50ZXN0czwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD50ZXN0czwvYXJ0aWZhY3RJZD4KICAgICA8cGFja2FnaW5nPnBvbTwvcGFja2FnaW5nPgotICAgIDxuYW1lPkdsYXNzRmlzaCBkZXZ0ZXN0cyBlamI8L25hbWU+ICAKKyAgICA8bmFtZT5HbGFzc0Zpc2ggZGV2dGVzdHMgZWpiPC9uYW1lPgogICAgIDxtb2R1bGVzPgogICAgICAgICA8IS0tIG1vZHVsZT5xdWlja2xvb2s8L21vZHVsZSAtLT4KICAgICA8L21vZHVsZXM+CkBAIC00NCwxMyArNDQsMTMgQEAKICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1hbnRydW4tcGx1Z2luPC9hcnRpZmFjdElkPgogICAgICAgICAgIDx2ZXJzaW9uPjEuODwvdmVyc2lvbj4KICAgICAgICAgICA8ZGVwZW5kZW5jaWVzPgotCSAgICA8ZGVwZW5kZW5jeT4KLQkgICAgICA8Z3JvdXBJZD5jb20uc3VuPC9ncm91cElkPgotCSAgICAgIDxhcnRpZmFjdElkPnRvb2xzPC9hcnRpZmFjdElkPgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICA8Z3JvdXBJZD5jb20uc3VuPC9ncm91cElkPgorICAgICAgICAgIDxhcnRpZmFjdElkPnRvb2xzPC9hcnRpZmFjdElkPgogICAgICAgICAgICAgICA8dmVyc2lvbj4xLjguMDwvdmVyc2lvbj4KLQkgICAgICA8c2NvcGU+c3lzdGVtPC9zY29wZT4KLQkgICAgICA8c3lzdGVtUGF0aD4ke2Vudi5KQVZBX0hPTUV9L2xpYi90b29scy5qYXI8L3N5c3RlbVBhdGg+Ci0JICAgPC9kZXBlbmRlbmN5PiAgICAgCisgICAgICAgICAgPHNjb3BlPnN5c3RlbTwvc2NvcGU+CisgICAgICAgICAgPHN5c3RlbVBhdGg+JHtlbnYuSkFWQV9IT01FfS9saWIvdG9vbHMuamFyPC9zeXN0ZW1QYXRoPgorICAgICAgIDwvZGVwZW5kZW5jeT4KICAgICAgICAgIDwvZGVwZW5kZW5jaWVzPgogICAgICAgICAgIDxleGVjdXRpb25zPgogICAgICAgICAgICAgPGV4ZWN1dGlvbj4KQEAgLTU4LDggKzU4LDggQEAKICAgICAgICAgICAgICAgPHBoYXNlPnRlc3Q8L3BoYXNlPgogICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KICAgICAgICAgICAgICAgICA8dGFyZ2V0IG5hbWU9ImFudFRlc3RzIj4KLSAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0TW9kcyIgdmFsdWU9ImFsbCIvPiAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImFudC1jb250cmliLXBhdGgiIHZhbHVlPSIke21hdmVuLmRlcGVuZGVuY3kuYW50LWNvbnRyaWIuYW50LWNvbnRyaWIuamFyLnBhdGh9Ii8+ICAKKyAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0TW9kcyIgdmFsdWU9ImFsbCIvPgorICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImFudC1jb250cmliLXBhdGgiIHZhbHVlPSIke21hdmVuLmRlcGVuZGVuY3kuYW50LWNvbnRyaWIuYW50LWNvbnRyaWIuamFyLnBhdGh9Ii8+CiAgICAgICAgICAgICAgICAgICAgIDxhbnQgYW50ZmlsZT0iYnVpbGQueG1sIiB0YXJnZXQ9ImFudFRlc3RzIi8+CiAgICAgICAgICAgICAgICAgPC90YXJnZXQ+CiAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KQEAgLTcyLDcgKzcyLDcgQEAKICAgICAgICAgICAgICAgPHBoYXNlPmNsZWFuPC9waGFzZT4KICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CiAgICAgICAgICAgICAgICAgPHRhcmdldCBuYW1lPSJjbGVhbi1yZXN1bHQiPgotICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImFudC1jb250cmliLXBhdGgiIHZhbHVlPSIke21hdmVuLmRlcGVuZGVuY3kuYW50LWNvbnRyaWIuYW50LWNvbnRyaWIuamFyLnBhdGh9Ii8+ICAKKyAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJhbnQtY29udHJpYi1wYXRoIiB2YWx1ZT0iJHttYXZlbi5kZXBlbmRlbmN5LmFudC1jb250cmliLmFudC1jb250cmliLmphci5wYXRofSIvPgogICAgICAgICAgICAgICAgICAgPGFudCBhbnRmaWxlPSJidWlsZC54bWwiIHRhcmdldD0iY2xlYW4tcmVzdWx0Ii8+CiAgICAgICAgICAgICAgICAgPC90YXJnZXQ+CiAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ydW5fdGVzdC5zaCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9ydW5fdGVzdC5zaAppbmRleCA1OTUxZTg0Li5mYzYxZWZjIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvcnVuX3Rlc3Quc2gKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3J1bl90ZXN0LnNoCkBAIC0xNywyODQgKzE3LDI4NCBAQAogCiB0ZXN0X3J1bl9lamIoKXsKIAotCXJtIC1yZiAke1MxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xCi0JY2QgJHtBUFNfSE9NRX0KLQllY2hvICJBU19BRE1JTl9QQVNTV09SRD0iID4gdGVtcHB3ZAotCWNhdCAke0FQU19IT01FfS90ZW1wcHdkCisgICAgcm0gLXJmICR7UzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEKKyAgICBjZCAke0FQU19IT01FfQorICAgIGVjaG8gIkFTX0FETUlOX1BBU1NXT1JEPSIgPiB0ZW1wcHdkCisgICAgY2F0ICR7QVBTX0hPTUV9L3RlbXBwd2QKIAotCUFETUlOX1BPUlQ9NDU3MDcKLQlKTVNfUE9SVD00NTcwOAotCUpNWF9QT1JUPTQ1NzA5Ci0JT1JCX1BPUlQ9NDU3MTAKLQlTU0xfUE9SVD00NTcxMQotCUlOU1RBTkNFX1BPUlQ9NDU3MTIKLQlBTFRFUk5BVEVfUE9SVD00NTcxMwotCU9SQl9TU0xfUE9SVD00NTcxNAotCU9SQl9TU0xfTVVUVUFMQVVUSF9QT1JUPTQ1NzE1Ci0JREJfUE9SVD00NTcxNgotCURCX1BPUlRfMj00NTcxNworICAgIEFETUlOX1BPUlQ9NDU3MDcKKyAgICBKTVNfUE9SVD00NTcwOAorICAgIEpNWF9QT1JUPTQ1NzA5CisgICAgT1JCX1BPUlQ9NDU3MTAKKyAgICBTU0xfUE9SVD00NTcxMQorICAgIElOU1RBTkNFX1BPUlQ9NDU3MTIKKyAgICBBTFRFUk5BVEVfUE9SVD00NTcxMworICAgIE9SQl9TU0xfUE9SVD00NTcxNAorICAgIE9SQl9TU0xfTVVUVUFMQVVUSF9QT1JUPTQ1NzE1CisgICAgREJfUE9SVD00NTcxNgorICAgIERCX1BPUlRfMj00NTcxNwogCi0JJHtTMUFTX0hPTUV9L2Jpbi9hc2FkbWluIFwKLQkJLS11c2VyIGFub255bW91cyBcCi0JCS0tcGFzc3dvcmRmaWxlICR7QVBTX0hPTUV9L3RlbXBwd2QgXAotCQljcmVhdGUtZG9tYWluIFwKLQkJCS0tYWRtaW5wb3J0ICR7QURNSU5fUE9SVH0gXAotCQkJLS1kb21haW5wcm9wZXJ0aWVzIGptcy5wb3J0PSR7Sk1TX1BPUlR9OmRvbWFpbi5qbXhQb3J0PSR7Sk1YX1BPUlR9Om9yYi5saXN0ZW5lci5wb3J0PSR7T1JCX1BPUlR9Omh0dHAuc3NsLnBvcnQ9JHtTU0xfUE9SVH06b3JiLnNzbC5wb3J0PSR7T1JCX1NTTF9QT1JUfTpvcmIubXV0dWFsYXV0aC5wb3J0PSR7T1JCX1NTTF9NVVRVQUxBVVRIX1BPUlR9IFwKLQkJCS0taW5zdGFuY2Vwb3J0ICR7SU5TVEFOQ0VfUE9SVH0gXAotCQkJZG9tYWluMQorICAgICR7UzFBU19IT01FfS9iaW4vYXNhZG1pbiBcCisgICAgICAgIC0tdXNlciBhbm9ueW1vdXMgXAorICAgICAgICAtLXBhc3N3b3JkZmlsZSAke0FQU19IT01FfS90ZW1wcHdkIFwKKyAgICAgICAgY3JlYXRlLWRvbWFpbiBcCisgICAgICAgICAgICAtLWFkbWlucG9ydCAke0FETUlOX1BPUlR9IFwKKyAgICAgICAgICAgIC0tZG9tYWlucHJvcGVydGllcyBqbXMucG9ydD0ke0pNU19QT1JUfTpkb21haW4uam14UG9ydD0ke0pNWF9QT1JUfTpvcmIubGlzdGVuZXIucG9ydD0ke09SQl9QT1JUfTpodHRwLnNzbC5wb3J0PSR7U1NMX1BPUlR9Om9yYi5zc2wucG9ydD0ke09SQl9TU0xfUE9SVH06b3JiLm11dHVhbGF1dGgucG9ydD0ke09SQl9TU0xfTVVUVUFMQVVUSF9QT1JUfSBcCisgICAgICAgICAgICAtLWluc3RhbmNlcG9ydCAke0lOU1RBTkNFX1BPUlR9IFwKKyAgICAgICAgICAgIGRvbWFpbjEKIAotCSMgQ3JlYXRlCi0JZWNobyAiYWRtaW4uZG9tYWluPWRvbWFpbjEKLQlhZG1pbi5kb21haW4uZGlyPVwke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMKLQlhZG1pbi5wb3J0PSR7QURNSU5fUE9SVH0KLQlhZG1pbi51c2VyPWFub255bW91cwotCWFkbWluLmhvc3Q9bG9jYWxob3N0Ci0JaHR0cC5wb3J0PSR7SU5TVEFOQ0VfUE9SVH0KLQlodHRwcy5wb3J0PSR7U1NMX1BPUlR9Ci0JaHR0cC5ob3N0PWxvY2FsaG9zdAotCWh0dHAuYWRkcmVzcz0xMjcuMC4wLjEKLQlodHRwLmFsdGVybmF0ZS5wb3J0PSR7QUxURVJOQVRFX1BPUlR9Ci0Jb3JiLnBvcnQ9JHtPUkJfUE9SVH0KLQlhZG1pbi5wYXNzd29yZD0KLQlzc2wucGFzc3dvcmQ9Y2hhbmdlaXQKLQltYXN0ZXIucGFzc3dvcmQ9Y2hhbmdlaXQKLQlhZG1pbi5wYXNzd29yZC5maWxlPVwke2Vudi5BUFNfSE9NRX0vY29uZmlnL2FkbWlucGFzc3dvcmQudHh0Ci0JYXBwc2VydmVyLmluc3RhbmNlLm5hbWU9c2VydmVyCi0JY29uZmlnLmRvdHRlZG5hbWUucHJlZml4PXNlcnZlcgotCXJlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeD1kb21haW4ucmVzb3VyY2VzCi0JcmVzdWx0cy5tYWlsaG9zdD1sb2NhbGhvc3QKLQlyZXN1bHRzLm1haWxlcj1RTFRlc3RzRm9yUEVJbnN0YWxsT3JEQVNJbkVFSW5zdGFsbEBzdW4uY29tCi0JcmVzdWx0cy5tYWlsZWU9eW91cm5hbWVAc3VuLmNvbQotCWF1dG9kZXBsb3kuZGlyPVwke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvXCR7YWRtaW4uZG9tYWlufS9hdXRvZGVwbG95Ci0JcHJlY29tcGlsZWpzcD10cnVlCi0JanZtLm1heHBlcm1zaXplPTE5Mm0KLQlhcHBzZXJ2ZXIuaW5zdGFuY2UuZGlyPVwke2FkbWluLmRvbWFpbi5kaXJ9L1wke2FkbWluLmRvbWFpbn0iID4gY29uZmlnLnByb3BlcnRpZXMKKyAgICAjIENyZWF0ZQorICAgIGVjaG8gImFkbWluLmRvbWFpbj1kb21haW4xCisgICAgYWRtaW4uZG9tYWluLmRpcj1cJHtlbnYuUzFBU19IT01FfS9kb21haW5zCisgICAgYWRtaW4ucG9ydD0ke0FETUlOX1BPUlR9CisgICAgYWRtaW4udXNlcj1hbm9ueW1vdXMKKyAgICBhZG1pbi5ob3N0PWxvY2FsaG9zdAorICAgIGh0dHAucG9ydD0ke0lOU1RBTkNFX1BPUlR9CisgICAgaHR0cHMucG9ydD0ke1NTTF9QT1JUfQorICAgIGh0dHAuaG9zdD1sb2NhbGhvc3QKKyAgICBodHRwLmFkZHJlc3M9MTI3LjAuMC4xCisgICAgaHR0cC5hbHRlcm5hdGUucG9ydD0ke0FMVEVSTkFURV9QT1JUfQorICAgIG9yYi5wb3J0PSR7T1JCX1BPUlR9CisgICAgYWRtaW4ucGFzc3dvcmQ9CisgICAgc3NsLnBhc3N3b3JkPWNoYW5nZWl0CisgICAgbWFzdGVyLnBhc3N3b3JkPWNoYW5nZWl0CisgICAgYWRtaW4ucGFzc3dvcmQuZmlsZT1cJHtlbnYuQVBTX0hPTUV9L2NvbmZpZy9hZG1pbnBhc3N3b3JkLnR4dAorICAgIGFwcHNlcnZlci5pbnN0YW5jZS5uYW1lPXNlcnZlcgorICAgIGNvbmZpZy5kb3R0ZWRuYW1lLnByZWZpeD1zZXJ2ZXIKKyAgICByZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXg9ZG9tYWluLnJlc291cmNlcworICAgIHJlc3VsdHMubWFpbGhvc3Q9bG9jYWxob3N0CisgICAgcmVzdWx0cy5tYWlsZXI9UUxUZXN0c0ZvclBFSW5zdGFsbE9yREFTSW5FRUluc3RhbGxAc3VuLmNvbQorICAgIHJlc3VsdHMubWFpbGVlPXlvdXJuYW1lQHN1bi5jb20KKyAgICBhdXRvZGVwbG95LmRpcj1cJHtlbnYuUzFBU19IT01FfS9kb21haW5zL1wke2FkbWluLmRvbWFpbn0vYXV0b2RlcGxveQorICAgIHByZWNvbXBpbGVqc3A9dHJ1ZQorICAgIGp2bS5tYXhwZXJtc2l6ZT0xOTJtCisgICAgYXBwc2VydmVyLmluc3RhbmNlLmRpcj1cJHthZG1pbi5kb21haW4uZGlyfS9cJHthZG1pbi5kb21haW59IiA+IGNvbmZpZy5wcm9wZXJ0aWVzCiAKLQkoanBzIHxncmVwIE1haW4gfGN1dCAtZjEgLWQiICIgfCB4YXJncyBraWxsIC05ICA+IC9kZXYvbnVsbCAyPiYxKSB8fCB0cnVlCisgICAgKGpwcyB8Z3JlcCBNYWluIHxjdXQgLWYxIC1kIiAiIHwgeGFyZ3Mga2lsbCAtOSAgPiAvZGV2L251bGwgMj4mMSkgfHwgdHJ1ZQogCi0JY2QgJHtTMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9jb25maWcvCi0Jc2VkICJzLzE1MjcvJHtEQl9QT1JUfS9nIiBkb21haW4ueG1sID4gZG9tYWluLnhtbC5yZXBsYWNlZAotCW12IGRvbWFpbi54bWwucmVwbGFjZWQgZG9tYWluLnhtbAotCWdyZXAgUG9ydE51bWJlciBkb21haW4ueG1sCisgICAgY2QgJHtTMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9jb25maWcvCisgICAgc2VkICJzLzE1MjcvJHtEQl9QT1JUfS9nIiBkb21haW4ueG1sID4gZG9tYWluLnhtbC5yZXBsYWNlZAorICAgIG12IGRvbWFpbi54bWwucmVwbGFjZWQgZG9tYWluLnhtbAorICAgIGdyZXAgUG9ydE51bWJlciBkb21haW4ueG1sCiAKLQljZCAke0FQU19IT01FfS9jb25maWcKLQkocm0gZGVyYnkucHJvcGVydGllcy5yZXBsYWNlZCAgPiAvZGV2L251bGwgMj4mMSkgfHwgdHJ1ZQotCXNlZCAicy8xNTI3LyR7REJfUE9SVH0vZyIgZGVyYnkucHJvcGVydGllcyA+IGRlcmJ5LnByb3BlcnRpZXMucmVwbGFjZWQKLQlybSBkZXJieS5wcm9wZXJ0aWVzCi0Jc2VkICJzLzE1MjgvJHtEQl9QT1JUXzJ9L2ciIGRlcmJ5LnByb3BlcnRpZXMucmVwbGFjZWQgPiBkZXJieS5wcm9wZXJ0aWVzCi0JY2F0IGRlcmJ5LnByb3BlcnRpZXMKLQlybSAtcmYgJHtBUFNfSE9NRX0vdGVzdF9yZXN1bHRzKgotCWNkICR7QVBTX0hPTUV9L2RldnRlc3RzL2VqYgotCXJtIGNvdW50LnR4dCB8fCB0cnVlCisgICAgY2QgJHtBUFNfSE9NRX0vY29uZmlnCisgICAgKHJtIGRlcmJ5LnByb3BlcnRpZXMucmVwbGFjZWQgID4gL2Rldi9udWxsIDI+JjEpIHx8IHRydWUKKyAgICBzZWQgInMvMTUyNy8ke0RCX1BPUlR9L2ciIGRlcmJ5LnByb3BlcnRpZXMgPiBkZXJieS5wcm9wZXJ0aWVzLnJlcGxhY2VkCisgICAgcm0gZGVyYnkucHJvcGVydGllcworICAgIHNlZCAicy8xNTI4LyR7REJfUE9SVF8yfS9nIiBkZXJieS5wcm9wZXJ0aWVzLnJlcGxhY2VkID4gZGVyYnkucHJvcGVydGllcworICAgIGNhdCBkZXJieS5wcm9wZXJ0aWVzCisgICAgcm0gLXJmICR7QVBTX0hPTUV9L3Rlc3RfcmVzdWx0cyoKKyAgICBjZCAke0FQU19IT01FfS9kZXZ0ZXN0cy9lamIKKyAgICBybSBjb3VudC50eHQgfHwgdHJ1ZQogCi0JYW50ICR7VEFSR0VUfSByZXBvcnQtcmVzdWx0IC1EZGIucG9ydD0ke0RCX1BPUlR9IC1EZGIucG9ydC4yPSR7REJfUE9SVF8yfSB8dGVlICRURVNUX1JVTl9MT0cKKyAgICBhbnQgJHtUQVJHRVR9IHJlcG9ydC1yZXN1bHQgLURkYi5wb3J0PSR7REJfUE9SVH0gLURkYi5wb3J0LjI9JHtEQl9QT1JUXzJ9IHx0ZWUgJFRFU1RfUlVOX0xPRwogfQogCiB0ZXN0X3J1bl9lamJfd2ViKCl7CiAKLQlybSAtcmYgJFMxQVNfSE9NRS9kb21haW5zL2RvbWFpbjEKKyAgICBybSAtcmYgJFMxQVNfSE9NRS9kb21haW5zL2RvbWFpbjEKIAotCWV4cG9ydCBBRE1JTl9QT1JUPTQ1NzA3IFwKLQkJCQkgSk1TX1BPUlQ9NDU3MDggXAotCQkJCSBKTVhfUE9SVD00NTcwOSBcCi0JCQkJIE9SQl9QT1JUPTQ1NzEwIFwKLQkJCQkgU1NMX1BPUlQ9NDU3MTEgXAotCQkJCSBJTlNUQU5DRV9QT1JUPTQ1NzEyIFwKLQkJCQkgSU5TVEFOQ0VfSFRUUFNfUE9SVD00NTcxOCBcCi0JCQkJIElOU1RBTkNFX1BPUlRfMj00NTcxOSBcCi0JCQkJIElOU1RBTkNFX1BPUlRfMz00NTcyMCBcCi0JCQkJIEFMVEVSTkFURV9QT1JUPTQ1NzEzIFwKLQkJCQkgT1JCX1NTTF9QT1JUPTQ1NzE0IFwKLQkJCQkgT1JCX1NTTF9NVVRVQUxBVVRIX1BPUlQ9NDU3MTUgXAotCQkJCSBEQl9QT1JUPTQ1NzE2IFwKLQkJCQkgREJfUE9SVF8yPTQ1NzE3Ci0JZW52CisgICAgZXhwb3J0IEFETUlOX1BPUlQ9NDU3MDcgXAorICAgICAgICAgICAgICAgICBKTVNfUE9SVD00NTcwOCBcCisgICAgICAgICAgICAgICAgIEpNWF9QT1JUPTQ1NzA5IFwKKyAgICAgICAgICAgICAgICAgT1JCX1BPUlQ9NDU3MTAgXAorICAgICAgICAgICAgICAgICBTU0xfUE9SVD00NTcxMSBcCisgICAgICAgICAgICAgICAgIElOU1RBTkNFX1BPUlQ9NDU3MTIgXAorICAgICAgICAgICAgICAgICBJTlNUQU5DRV9IVFRQU19QT1JUPTQ1NzE4IFwKKyAgICAgICAgICAgICAgICAgSU5TVEFOQ0VfUE9SVF8yPTQ1NzE5IFwKKyAgICAgICAgICAgICAgICAgSU5TVEFOQ0VfUE9SVF8zPTQ1NzIwIFwKKyAgICAgICAgICAgICAgICAgQUxURVJOQVRFX1BPUlQ9NDU3MTMgXAorICAgICAgICAgICAgICAgICBPUkJfU1NMX1BPUlQ9NDU3MTQgXAorICAgICAgICAgICAgICAgICBPUkJfU1NMX01VVFVBTEFVVEhfUE9SVD00NTcxNSBcCisgICAgICAgICAgICAgICAgIERCX1BPUlQ9NDU3MTYgXAorICAgICAgICAgICAgICAgICBEQl9QT1JUXzI9NDU3MTcKKyAgICBlbnYKIAotCWNkICR7QVBTX0hPTUV9CisgICAgY2QgJHtBUFNfSE9NRX0KIAotCWVjaG8gIkFTX0FETUlOX1BBU1NXT1JEPSIgPiB0ZW1wcHdkCi0JY2F0ICR7QVBTX0hPTUV9L3RlbXBwd2QKLQkke1MxQVNfSE9NRX0vYmluL2FzYWRtaW4gXAotCQktLXVzZXIgYW5vbnltb3VzIFwKLQkJLS1wYXNzd29yZGZpbGUgJHtBUFNfSE9NRX0vdGVtcHB3ZCBcCi0JCWNyZWF0ZS1kb21haW4gXAotCQkJLS1hZG1pbnBvcnQgJHtBRE1JTl9QT1JUfSBcCi0JCQktLWRvbWFpbnByb3BlcnRpZXMgam1zLnBvcnQ9JHtKTVNfUE9SVH06ZG9tYWluLmpteFBvcnQ9JHtKTVhfUE9SVH06b3JiLmxpc3RlbmVyLnBvcnQ9JHtPUkJfUE9SVH06aHR0cC5zc2wucG9ydD0ke1NTTF9QT1JUfTpvcmIuc3NsLnBvcnQ9JHtPUkJfU1NMX1BPUlR9Om9yYi5tdXR1YWxhdXRoLnBvcnQ9JHtPUkJfU1NMX01VVFVBTEFVVEhfUE9SVH0gXAotCQkJLS1pbnN0YW5jZXBvcnQgJHtJTlNUQU5DRV9QT1JUfSBcCi0JCQlkb21haW4xCisgICAgZWNobyAiQVNfQURNSU5fUEFTU1dPUkQ9IiA+IHRlbXBwd2QKKyAgICBjYXQgJHtBUFNfSE9NRX0vdGVtcHB3ZAorICAgICR7UzFBU19IT01FfS9iaW4vYXNhZG1pbiBcCisgICAgICAgIC0tdXNlciBhbm9ueW1vdXMgXAorICAgICAgICAtLXBhc3N3b3JkZmlsZSAke0FQU19IT01FfS90ZW1wcHdkIFwKKyAgICAgICAgY3JlYXRlLWRvbWFpbiBcCisgICAgICAgICAgICAtLWFkbWlucG9ydCAke0FETUlOX1BPUlR9IFwKKyAgICAgICAgICAgIC0tZG9tYWlucHJvcGVydGllcyBqbXMucG9ydD0ke0pNU19QT1JUfTpkb21haW4uam14UG9ydD0ke0pNWF9QT1JUfTpvcmIubGlzdGVuZXIucG9ydD0ke09SQl9QT1JUfTpodHRwLnNzbC5wb3J0PSR7U1NMX1BPUlR9Om9yYi5zc2wucG9ydD0ke09SQl9TU0xfUE9SVH06b3JiLm11dHVhbGF1dGgucG9ydD0ke09SQl9TU0xfTVVUVUFMQVVUSF9QT1JUfSBcCisgICAgICAgICAgICAtLWluc3RhbmNlcG9ydCAke0lOU1RBTkNFX1BPUlR9IFwKKyAgICAgICAgICAgIGRvbWFpbjEKIAotCSMgQ3JlYXRlCi0JZWNobyAiYWRtaW4uZG9tYWluPWRvbWFpbjEKLQlhZG1pbi5kb21haW4uZGlyPVwke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMKLQlhZG1pbi5wb3J0PSR7QURNSU5fUE9SVH0KLQlhZG1pbi51c2VyPWFub255bW91cwotCWFkbWluLmhvc3Q9bG9jYWxob3N0Ci0JaHR0cC5wb3J0PSR7SU5TVEFOQ0VfUE9SVH0KLQlodHRwcy5wb3J0PSR7U1NMX1BPUlR9Ci0JaHR0cC5ob3N0PWxvY2FsaG9zdAotCWh0dHAuYWRkcmVzcz0xMjcuMC4wLjEKLQlodHRwLmFsdGVybmF0ZS5wb3J0PSR7QUxURVJOQVRFX1BPUlR9Ci0Jb3JiLnBvcnQ9JHtPUkJfUE9SVH0KLQlhZG1pbi5wYXNzd29yZD0KLQlzc2wucGFzc3dvcmQ9Y2hhbmdlaXQKLQltYXN0ZXIucGFzc3dvcmQ9Y2hhbmdlaXQKLQlhZG1pbi5wYXNzd29yZC5maWxlPVwke2Vudi5BUFNfSE9NRX0vY29uZmlnL2FkbWlucGFzc3dvcmQudHh0Ci0JYXBwc2VydmVyLmluc3RhbmNlLm5hbWU9c2VydmVyCi0JY29uZmlnLmRvdHRlZG5hbWUucHJlZml4PXNlcnZlcgotCXJlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeD1kb21haW4ucmVzb3VyY2VzCi0JcmVzdWx0cy5tYWlsaG9zdD1sb2NhbGhvc3QKLQlyZXN1bHRzLm1haWxlcj1RTFRlc3RzRm9yUEVJbnN0YWxsT3JEQVNJbkVFSW5zdGFsbEBzdW4uY29tCi0JcmVzdWx0cy5tYWlsZWU9eW91cm5hbWVAc3VuLmNvbQotCWF1dG9kZXBsb3kuZGlyPVwke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvXCR7YWRtaW4uZG9tYWlufS9hdXRvZGVwbG95Ci0JcHJlY29tcGlsZWpzcD10cnVlCi0JanZtLm1heHBlcm1zaXplPTE5Mm0KLQlhcHBzZXJ2ZXIuaW5zdGFuY2UuZGlyPVwke2FkbWluLmRvbWFpbi5kaXJ9L1wke2FkbWluLmRvbWFpbn0iID4gY29uZmlnLnByb3BlcnRpZXMKKyAgICAjIENyZWF0ZQorICAgIGVjaG8gImFkbWluLmRvbWFpbj1kb21haW4xCisgICAgYWRtaW4uZG9tYWluLmRpcj1cJHtlbnYuUzFBU19IT01FfS9kb21haW5zCisgICAgYWRtaW4ucG9ydD0ke0FETUlOX1BPUlR9CisgICAgYWRtaW4udXNlcj1hbm9ueW1vdXMKKyAgICBhZG1pbi5ob3N0PWxvY2FsaG9zdAorICAgIGh0dHAucG9ydD0ke0lOU1RBTkNFX1BPUlR9CisgICAgaHR0cHMucG9ydD0ke1NTTF9QT1JUfQorICAgIGh0dHAuaG9zdD1sb2NhbGhvc3QKKyAgICBodHRwLmFkZHJlc3M9MTI3LjAuMC4xCisgICAgaHR0cC5hbHRlcm5hdGUucG9ydD0ke0FMVEVSTkFURV9QT1JUfQorICAgIG9yYi5wb3J0PSR7T1JCX1BPUlR9CisgICAgYWRtaW4ucGFzc3dvcmQ9CisgICAgc3NsLnBhc3N3b3JkPWNoYW5nZWl0CisgICAgbWFzdGVyLnBhc3N3b3JkPWNoYW5nZWl0CisgICAgYWRtaW4ucGFzc3dvcmQuZmlsZT1cJHtlbnYuQVBTX0hPTUV9L2NvbmZpZy9hZG1pbnBhc3N3b3JkLnR4dAorICAgIGFwcHNlcnZlci5pbnN0YW5jZS5uYW1lPXNlcnZlcgorICAgIGNvbmZpZy5kb3R0ZWRuYW1lLnByZWZpeD1zZXJ2ZXIKKyAgICByZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXg9ZG9tYWluLnJlc291cmNlcworICAgIHJlc3VsdHMubWFpbGhvc3Q9bG9jYWxob3N0CisgICAgcmVzdWx0cy5tYWlsZXI9UUxUZXN0c0ZvclBFSW5zdGFsbE9yREFTSW5FRUluc3RhbGxAc3VuLmNvbQorICAgIHJlc3VsdHMubWFpbGVlPXlvdXJuYW1lQHN1bi5jb20KKyAgICBhdXRvZGVwbG95LmRpcj1cJHtlbnYuUzFBU19IT01FfS9kb21haW5zL1wke2FkbWluLmRvbWFpbn0vYXV0b2RlcGxveQorICAgIHByZWNvbXBpbGVqc3A9dHJ1ZQorICAgIGp2bS5tYXhwZXJtc2l6ZT0xOTJtCisgICAgYXBwc2VydmVyLmluc3RhbmNlLmRpcj1cJHthZG1pbi5kb21haW4uZGlyfS9cJHthZG1pbi5kb21haW59IiA+IGNvbmZpZy5wcm9wZXJ0aWVzCiAKLQkoanBzIHxncmVwIE1haW4gfGN1dCAtZjEgLWQiICIgfCB4YXJncyBraWxsIC05ICA+IC9kZXYvbnVsbCAyPiYxKSB8fCB0cnVlCisgICAgKGpwcyB8Z3JlcCBNYWluIHxjdXQgLWYxIC1kIiAiIHwgeGFyZ3Mga2lsbCAtOSAgPiAvZGV2L251bGwgMj4mMSkgfHwgdHJ1ZQogCi0JY2QgJHtTMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9jb25maWcvCi0Jc2VkICJzLzE1MjcvJHtEQl9QT1JUfS9nIiBkb21haW4ueG1sID4gZG9tYWluLnhtbC5yZXBsYWNlZAotCW12IGRvbWFpbi54bWwucmVwbGFjZWQgZG9tYWluLnhtbAotCWdyZXAgUG9ydE51bWJlciBkb21haW4ueG1sCisgICAgY2QgJHtTMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9jb25maWcvCisgICAgc2VkICJzLzE1MjcvJHtEQl9QT1JUfS9nIiBkb21haW4ueG1sID4gZG9tYWluLnhtbC5yZXBsYWNlZAorICAgIG12IGRvbWFpbi54bWwucmVwbGFjZWQgZG9tYWluLnhtbAorICAgIGdyZXAgUG9ydE51bWJlciBkb21haW4ueG1sCiAKLQljZCAke0FQU19IT01FfS9jb25maWcKLQkocm0gZGVyYnkucHJvcGVydGllcy5yZXBsYWNlZCAgPiAvZGV2L251bGwgMj4mMSkgfHwgdHJ1ZQotCXNlZCAicy8xNTI3LyR7REJfUE9SVH0vZyIgZGVyYnkucHJvcGVydGllcyA+IGRlcmJ5LnByb3BlcnRpZXMucmVwbGFjZWQKLQlybSBkZXJieS5wcm9wZXJ0aWVzCi0Jc2VkICJzLzE1MjgvJHtEQl9QT1JUXzJ9L2ciIGRlcmJ5LnByb3BlcnRpZXMucmVwbGFjZWQgPiBkZXJieS5wcm9wZXJ0aWVzCi0JY2F0IGRlcmJ5LnByb3BlcnRpZXMKLQljZCAke0FQU19IT01FfS9kZXZ0ZXN0cy9lamIKLQlybSBjb3VudC50eHQgfHwgdHJ1ZQotCWFudCAke1RBUkdFVH0gcmVwb3J0LXJlc3VsdCAtRGRiLnBvcnQ9JHtEQl9QT1JUfSAtRGRiLnBvcnQuMj0ke0RCX1BPUlRfMn0gfHRlZSAkVEVTVF9SVU5fTE9HCi0JY2F0ICR7UzFBU19IT01FfS9kYXRhYmFzZXMvZGVyYnkubG9nCi0JZWdyZXAgJ0RJRCBOT1QgUlVOPSAqMCcgY291bnQudHh0IHx8IHRydWUKKyAgICBjZCAke0FQU19IT01FfS9jb25maWcKKyAgICAocm0gZGVyYnkucHJvcGVydGllcy5yZXBsYWNlZCAgPiAvZGV2L251bGwgMj4mMSkgfHwgdHJ1ZQorICAgIHNlZCAicy8xNTI3LyR7REJfUE9SVH0vZyIgZGVyYnkucHJvcGVydGllcyA+IGRlcmJ5LnByb3BlcnRpZXMucmVwbGFjZWQKKyAgICBybSBkZXJieS5wcm9wZXJ0aWVzCisgICAgc2VkICJzLzE1MjgvJHtEQl9QT1JUXzJ9L2ciIGRlcmJ5LnByb3BlcnRpZXMucmVwbGFjZWQgPiBkZXJieS5wcm9wZXJ0aWVzCisgICAgY2F0IGRlcmJ5LnByb3BlcnRpZXMKKyAgICBjZCAke0FQU19IT01FfS9kZXZ0ZXN0cy9lamIKKyAgICBybSBjb3VudC50eHQgfHwgdHJ1ZQorICAgIGFudCAke1RBUkdFVH0gcmVwb3J0LXJlc3VsdCAtRGRiLnBvcnQ9JHtEQl9QT1JUfSAtRGRiLnBvcnQuMj0ke0RCX1BPUlRfMn0gfHRlZSAkVEVTVF9SVU5fTE9HCisgICAgY2F0ICR7UzFBU19IT01FfS9kYXRhYmFzZXMvZGVyYnkubG9nCisgICAgZWdyZXAgJ0RJRCBOT1QgUlVOPSAqMCcgY291bnQudHh0IHx8IHRydWUKIH0KIAogCiB0ZXN0X3J1bl9lamJfdGltZXJfY2x1c3RlcigpewogCi0Jcm0gLXJmICR7UzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEKKyAgICBybSAtcmYgJHtTMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMQogCi0JZXhwb3J0IEFETUlOX1BPUlQ9NDU3MDcgXAotCQkJCSBKTVNfUE9SVD00NTcwOCBcCi0JCQkJIEpNWF9QT1JUPTQ1NzA5IFwKLQkJCQkgT1JCX1BPUlQ9NDU3MTAgXAotCQkJCSBTU0xfUE9SVD00NTcxMSBcCi0JCQkJIElOU1RBTkNFX1BPUlQ9NDU3MTIgXAotCQkJCSBJTlNUQU5DRV9IVFRQX1BPUlQ9NDU3MjEgXAotCQkJCSBJTlNUQU5DRV9IVFRQU19QT1JUPTQ1NzE4IFwKLQkJCQkgSU5TVEFOQ0VfUE9SVF8yPTQ1NzE5IFwKLQkJCQkgSU5TVEFOQ0VfUE9SVF8zPTQ1NzIwIFwKLQkJCQkgQUxURVJOQVRFX1BPUlQ9NDU3MTMgXAotCQkJCSBPUkJfU1NMX1BPUlQ9NDU3MTQgXAotCQkJCSBPUkJfU1NMX01VVFVBTEFVVEhfUE9SVD00NTcxNSBcCi0JCQkJIERCX1BPUlQ9NDU3MTYgXAotCQkJCSBEQl9QT1JUXzI9NDU3MTcKLQllbnYKKyAgICBleHBvcnQgQURNSU5fUE9SVD00NTcwNyBcCisgICAgICAgICAgICAgICAgIEpNU19QT1JUPTQ1NzA4IFwKKyAgICAgICAgICAgICAgICAgSk1YX1BPUlQ9NDU3MDkgXAorICAgICAgICAgICAgICAgICBPUkJfUE9SVD00NTcxMCBcCisgICAgICAgICAgICAgICAgIFNTTF9QT1JUPTQ1NzExIFwKKyAgICAgICAgICAgICAgICAgSU5TVEFOQ0VfUE9SVD00NTcxMiBcCisgICAgICAgICAgICAgICAgIElOU1RBTkNFX0hUVFBfUE9SVD00NTcyMSBcCisgICAgICAgICAgICAgICAgIElOU1RBTkNFX0hUVFBTX1BPUlQ9NDU3MTggXAorICAgICAgICAgICAgICAgICBJTlNUQU5DRV9QT1JUXzI9NDU3MTkgXAorICAgICAgICAgICAgICAgICBJTlNUQU5DRV9QT1JUXzM9NDU3MjAgXAorICAgICAgICAgICAgICAgICBBTFRFUk5BVEVfUE9SVD00NTcxMyBcCisgICAgICAgICAgICAgICAgIE9SQl9TU0xfUE9SVD00NTcxNCBcCisgICAgICAgICAgICAgICAgIE9SQl9TU0xfTVVUVUFMQVVUSF9QT1JUPTQ1NzE1IFwKKyAgICAgICAgICAgICAgICAgREJfUE9SVD00NTcxNiBcCisgICAgICAgICAgICAgICAgIERCX1BPUlRfMj00NTcxNworICAgIGVudgogCi0JY2QgJHtBUFNfSE9NRX0KKyAgICBjZCAke0FQU19IT01FfQogCi0JZWNobyAiQVNfQURNSU5fUEFTU1dPUkQ9IiA+IHRlbXBwd2QKLQljYXQgJHtBUFNfSE9NRX0vdGVtcHB3ZAotCSR7UzFBU19IT01FfS9iaW4vYXNhZG1pbiBcCi0JCS0tdXNlciBhbm9ueW1vdXMgXAotCQktLXBhc3N3b3JkZmlsZSAke0FQU19IT01FfS90ZW1wcHdkIFwKLQkJY3JlYXRlLWRvbWFpbiBcCi0JCQktLWFkbWlucG9ydCAke0FETUlOX1BPUlR9IFwKLQkJCS0tZG9tYWlucHJvcGVydGllcyBqbXMucG9ydD0ke0pNU19QT1JUfTpkb21haW4uam14UG9ydD0ke0pNWF9QT1JUfTpvcmIubGlzdGVuZXIucG9ydD0ke09SQl9QT1JUfTpodHRwLnNzbC5wb3J0PSR7U1NMX1BPUlR9Om9yYi5zc2wucG9ydD0ke09SQl9TU0xfUE9SVH06b3JiLm11dHVhbGF1dGgucG9ydD0ke09SQl9TU0xfTVVUVUFMQVVUSF9QT1JUfSBcCi0JCQktLWluc3RhbmNlcG9ydCAke0lOU1RBTkNFX1BPUlR9IFwKLQkJCWRvbWFpbjEKKyAgICBlY2hvICJBU19BRE1JTl9QQVNTV09SRD0iID4gdGVtcHB3ZAorICAgIGNhdCAke0FQU19IT01FfS90ZW1wcHdkCisgICAgJHtTMUFTX0hPTUV9L2Jpbi9hc2FkbWluIFwKKyAgICAgICAgLS11c2VyIGFub255bW91cyBcCisgICAgICAgIC0tcGFzc3dvcmRmaWxlICR7QVBTX0hPTUV9L3RlbXBwd2QgXAorICAgICAgICBjcmVhdGUtZG9tYWluIFwKKyAgICAgICAgICAgIC0tYWRtaW5wb3J0ICR7QURNSU5fUE9SVH0gXAorICAgICAgICAgICAgLS1kb21haW5wcm9wZXJ0aWVzIGptcy5wb3J0PSR7Sk1TX1BPUlR9OmRvbWFpbi5qbXhQb3J0PSR7Sk1YX1BPUlR9Om9yYi5saXN0ZW5lci5wb3J0PSR7T1JCX1BPUlR9Omh0dHAuc3NsLnBvcnQ9JHtTU0xfUE9SVH06b3JiLnNzbC5wb3J0PSR7T1JCX1NTTF9QT1JUfTpvcmIubXV0dWFsYXV0aC5wb3J0PSR7T1JCX1NTTF9NVVRVQUxBVVRIX1BPUlR9IFwKKyAgICAgICAgICAgIC0taW5zdGFuY2Vwb3J0ICR7SU5TVEFOQ0VfUE9SVH0gXAorICAgICAgICAgICAgZG9tYWluMQogCi0JIyBDcmVhdGUKLQllY2hvICJhZG1pbi5kb21haW49ZG9tYWluMQotCWFkbWluLmRvbWFpbi5kaXI9XCR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucwotCWFkbWluLnBvcnQ9JHtBRE1JTl9QT1JUfQotCWFkbWluLnVzZXI9YW5vbnltb3VzCi0JYWRtaW4uaG9zdD1sb2NhbGhvc3QKLQlodHRwLnBvcnQ9JHtJTlNUQU5DRV9QT1JUfQotCWh0dHBzLnBvcnQ9JHtTU0xfUE9SVH0KLQlpbnN0YW5jZS5odHRwLnBvcnQ9JHtJTlNUQU5DRV9IVFRQX1BPUlR9Ci0JaW5zdGFuY2UuaHR0cHMucG9ydD0ke0lOU1RBTkNFX0hUVFBTX1BPUlR9Ci0JaHR0cC5ob3N0PWxvY2FsaG9zdAotCWh0dHAuYWRkcmVzcz0xMjcuMC4wLjEKLQlodHRwLmFsdGVybmF0ZS5wb3J0PSR7QUxURVJOQVRFX1BPUlR9Ci0Jb3JiLnBvcnQ9JHtPUkJfUE9SVH0KLQlhZG1pbi5wYXNzd29yZD0KLQlzc2wucGFzc3dvcmQ9Y2hhbmdlaXQKLQltYXN0ZXIucGFzc3dvcmQ9Y2hhbmdlaXQKLQlhZG1pbi5wYXNzd29yZC5maWxlPVwke2Vudi5BUFNfSE9NRX0vY29uZmlnL2FkbWlucGFzc3dvcmQudHh0Ci0JYXBwc2VydmVyLmluc3RhbmNlLm5hbWU9c2VydmVyCi0JY29uZmlnLmRvdHRlZG5hbWUucHJlZml4PXNlcnZlcgotCXJlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeD1kb21haW4ucmVzb3VyY2VzCi0JcmVzdWx0cy5tYWlsaG9zdD1sb2NhbGhvc3QKLQlyZXN1bHRzLm1haWxlcj1RTFRlc3RzRm9yUEVJbnN0YWxsT3JEQVNJbkVFSW5zdGFsbEBzdW4uY29tCi0JcmVzdWx0cy5tYWlsZWU9eW91cm5hbWVAc3VuLmNvbQotCWF1dG9kZXBsb3kuZGlyPVwke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvXCR7YWRtaW4uZG9tYWlufS9hdXRvZGVwbG95Ci0JcHJlY29tcGlsZWpzcD10cnVlCi0JanZtLm1heHBlcm1zaXplPTE5Mm0KLQlhcHBzZXJ2ZXIuaW5zdGFuY2UuZGlyPVwke2FkbWluLmRvbWFpbi5kaXJ9L1wke2FkbWluLmRvbWFpbn0iID4gY29uZmlnLnByb3BlcnRpZXMKKyAgICAjIENyZWF0ZQorICAgIGVjaG8gImFkbWluLmRvbWFpbj1kb21haW4xCisgICAgYWRtaW4uZG9tYWluLmRpcj1cJHtlbnYuUzFBU19IT01FfS9kb21haW5zCisgICAgYWRtaW4ucG9ydD0ke0FETUlOX1BPUlR9CisgICAgYWRtaW4udXNlcj1hbm9ueW1vdXMKKyAgICBhZG1pbi5ob3N0PWxvY2FsaG9zdAorICAgIGh0dHAucG9ydD0ke0lOU1RBTkNFX1BPUlR9CisgICAgaHR0cHMucG9ydD0ke1NTTF9QT1JUfQorICAgIGluc3RhbmNlLmh0dHAucG9ydD0ke0lOU1RBTkNFX0hUVFBfUE9SVH0KKyAgICBpbnN0YW5jZS5odHRwcy5wb3J0PSR7SU5TVEFOQ0VfSFRUUFNfUE9SVH0KKyAgICBodHRwLmhvc3Q9bG9jYWxob3N0CisgICAgaHR0cC5hZGRyZXNzPTEyNy4wLjAuMQorICAgIGh0dHAuYWx0ZXJuYXRlLnBvcnQ9JHtBTFRFUk5BVEVfUE9SVH0KKyAgICBvcmIucG9ydD0ke09SQl9QT1JUfQorICAgIGFkbWluLnBhc3N3b3JkPQorICAgIHNzbC5wYXNzd29yZD1jaGFuZ2VpdAorICAgIG1hc3Rlci5wYXNzd29yZD1jaGFuZ2VpdAorICAgIGFkbWluLnBhc3N3b3JkLmZpbGU9XCR7ZW52LkFQU19IT01FfS9jb25maWcvYWRtaW5wYXNzd29yZC50eHQKKyAgICBhcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZT1zZXJ2ZXIKKyAgICBjb25maWcuZG90dGVkbmFtZS5wcmVmaXg9c2VydmVyCisgICAgcmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4PWRvbWFpbi5yZXNvdXJjZXMKKyAgICByZXN1bHRzLm1haWxob3N0PWxvY2FsaG9zdAorICAgIHJlc3VsdHMubWFpbGVyPVFMVGVzdHNGb3JQRUluc3RhbGxPckRBU0luRUVJbnN0YWxsQHN1bi5jb20KKyAgICByZXN1bHRzLm1haWxlZT15b3VybmFtZUBzdW4uY29tCisgICAgYXV0b2RlcGxveS5kaXI9XCR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9cJHthZG1pbi5kb21haW59L2F1dG9kZXBsb3kKKyAgICBwcmVjb21waWxlanNwPXRydWUKKyAgICBqdm0ubWF4cGVybXNpemU9MTkybQorICAgIGFwcHNlcnZlci5pbnN0YW5jZS5kaXI9XCR7YWRtaW4uZG9tYWluLmRpcn0vXCR7YWRtaW4uZG9tYWlufSIgPiBjb25maWcucHJvcGVydGllcwogCi0JKGpwcyB8Z3JlcCBNYWluIHxjdXQgLWYxIC1kIiAiIHwgeGFyZ3Mga2lsbCAtOSAgPiAvZGV2L251bGwgMj4mMSkgfHwgdHJ1ZQorICAgIChqcHMgfGdyZXAgTWFpbiB8Y3V0IC1mMSAtZCIgIiB8IHhhcmdzIGtpbGwgLTkgID4gL2Rldi9udWxsIDI+JjEpIHx8IHRydWUKIAotCWNkICR7UzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvY29uZmlnLwotCXNlZCAicy8xNTI3LyR7REJfUE9SVH0vZyIgZG9tYWluLnhtbCA+IGRvbWFpbi54bWwucmVwbGFjZWQKLQltdiBkb21haW4ueG1sLnJlcGxhY2VkIGRvbWFpbi54bWwKLQlncmVwIFBvcnROdW1iZXIgZG9tYWluLnhtbAorICAgIGNkICR7UzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvY29uZmlnLworICAgIHNlZCAicy8xNTI3LyR7REJfUE9SVH0vZyIgZG9tYWluLnhtbCA+IGRvbWFpbi54bWwucmVwbGFjZWQKKyAgICBtdiBkb21haW4ueG1sLnJlcGxhY2VkIGRvbWFpbi54bWwKKyAgICBncmVwIFBvcnROdW1iZXIgZG9tYWluLnhtbAogCi0JY2QgJHtBUFNfSE9NRX0vY29uZmlnCi0JKHJtIGRlcmJ5LnByb3BlcnRpZXMucmVwbGFjZWQgID4gL2Rldi9udWxsIDI+JjEpIHx8IHRydWUKLQlzZWQgInMvMTUyNy8ke0RCX1BPUlR9L2ciIGRlcmJ5LnByb3BlcnRpZXMgPiBkZXJieS5wcm9wZXJ0aWVzLnJlcGxhY2VkCi0Jcm0gZGVyYnkucHJvcGVydGllcwotCXNlZCAicy8xNTI4LyR7REJfUE9SVF8yfS9nIiBkZXJieS5wcm9wZXJ0aWVzLnJlcGxhY2VkID4gZGVyYnkucHJvcGVydGllcwotCWNhdCBkZXJieS5wcm9wZXJ0aWVzCisgICAgY2QgJHtBUFNfSE9NRX0vY29uZmlnCisgICAgKHJtIGRlcmJ5LnByb3BlcnRpZXMucmVwbGFjZWQgID4gL2Rldi9udWxsIDI+JjEpIHx8IHRydWUKKyAgICBzZWQgInMvMTUyNy8ke0RCX1BPUlR9L2ciIGRlcmJ5LnByb3BlcnRpZXMgPiBkZXJieS5wcm9wZXJ0aWVzLnJlcGxhY2VkCisgICAgcm0gZGVyYnkucHJvcGVydGllcworICAgIHNlZCAicy8xNTI4LyR7REJfUE9SVF8yfS9nIiBkZXJieS5wcm9wZXJ0aWVzLnJlcGxhY2VkID4gZGVyYnkucHJvcGVydGllcworICAgIGNhdCBkZXJieS5wcm9wZXJ0aWVzCiAKLQlwdXNoZCAke0FQU19IT01FfS9kZXZ0ZXN0cy9lamIvZWUvdGltZXIKKyAgICBwdXNoZCAke0FQU19IT01FfS9kZXZ0ZXN0cy9lamIvZWUvdGltZXIKIAotCWFudCAke1RBUkdFVH0gfHRlZSAke1RFU1RfUlVOX0xPR30KLQlhbnRTdGF0dXM9JHs/fQotCWFudCBkZXYtcmVwb3J0CisgICAgYW50ICR7VEFSR0VUfSB8dGVlICR7VEVTVF9SVU5fTE9HfQorICAgIGFudFN0YXR1cz0kez99CisgICAgYW50IGRldi1yZXBvcnQKIH0KIAogZ2V0X3Rlc3RfdGFyZ2V0KCl7Ci0JY2FzZSAkMSBpbgotCQllamJfYWxsfGVqYl90aW1lcl9jbHVzdGVyX2FsbCApCi0JCQlUQVJHRVQ9YWxsIDs7Ci0JCWVqYl93ZWJfYWxsKQotCQkJVEFSR0VUPWxpdGUgOzsKKyAgICBjYXNlICQxIGluCisgICAgICAgIGVqYl9hbGx8ZWpiX3RpbWVyX2NsdXN0ZXJfYWxsICkKKyAgICAgICAgICAgIFRBUkdFVD1hbGwgOzsKKyAgICAgICAgZWpiX3dlYl9hbGwpCisgICAgICAgICAgICBUQVJHRVQ9bGl0ZSA7OwogICAgICogKQogICAgICAgVEFSR0VUPSQxIDs7Ci0JZXNhYwotCWV4cG9ydCBUQVJHRVQKKyAgICBlc2FjCisgICAgZXhwb3J0IFRBUkdFVAogfQogCiAKIHJ1bl90ZXN0X2lkKCl7Ci0JaWYgW1sgJHsxfSA9ICJlamJfd2ViX2FsbCIgXV07IHRoZW4KLQkJdW56aXBfdGVzdF9yZXNvdXJjZXMgJHtXT1JLU1BBQ0V9L2J1bmRsZXMvd2ViLnppcAotCWVsc2UKLQkJdW56aXBfdGVzdF9yZXNvdXJjZXMgJHtXT1JLU1BBQ0V9L2J1bmRsZXMvZ2xhc3NmaXNoLnppcAotCWZpCi0JZG5hbWU9YHB3ZGAKLQljZCBgZGlybmFtZSAkezB9YAotCXRlc3RfaW5pdAotCWdldF90ZXN0X3RhcmdldCAkezF9Ci0JaWYgW1sgJHsxfSA9ICJlamJfYWxsIiB8fCAkezF9ID0gImVqYl9ncm91cCIqIF1dOyB0aGVuCi0JCXRlc3RfcnVuX2VqYgotCWVsaWYgW1sgJHsxfSA9ICJlamJfdGltZXJfY2x1c3Rlcl9hbGwiIF1dOyB0aGVuCi0JCXRlc3RfcnVuX2VqYl90aW1lcl9jbHVzdGVyCi0JZWxpZiBbWyAkezF9ID0gImVqYl93ZWJfYWxsIiBdXTsgdGhlbgotCQl0ZXN0X3J1bl9lamJfd2ViCi0JZWxzZQotCQllY2hvICJJbnZhbGlkIFRlc3QgSUQiCi0JCWV4aXQgMQotCWZpCi0JY2hlY2tfc3VjY2Vzc2Z1bF9ydW4KKyAgICBpZiBbWyAkezF9ID0gImVqYl93ZWJfYWxsIiBdXTsgdGhlbgorICAgICAgICB1bnppcF90ZXN0X3Jlc291cmNlcyAke1dPUktTUEFDRX0vYnVuZGxlcy93ZWIuemlwCisgICAgZWxzZQorICAgICAgICB1bnppcF90ZXN0X3Jlc291cmNlcyAke1dPUktTUEFDRX0vYnVuZGxlcy9nbGFzc2Zpc2guemlwCisgICAgZmkKKyAgICBkbmFtZT1gcHdkYAorICAgIGNkIGBkaXJuYW1lICR7MH1gCisgICAgdGVzdF9pbml0CisgICAgZ2V0X3Rlc3RfdGFyZ2V0ICR7MX0KKyAgICBpZiBbWyAkezF9ID0gImVqYl9hbGwiIHx8ICR7MX0gPSAiZWpiX2dyb3VwIiogXV07IHRoZW4KKyAgICAgICAgdGVzdF9ydW5fZWpiCisgICAgZWxpZiBbWyAkezF9ID0gImVqYl90aW1lcl9jbHVzdGVyX2FsbCIgXV07IHRoZW4KKyAgICAgICAgdGVzdF9ydW5fZWpiX3RpbWVyX2NsdXN0ZXIKKyAgICBlbGlmIFtbICR7MX0gPSAiZWpiX3dlYl9hbGwiIF1dOyB0aGVuCisgICAgICAgIHRlc3RfcnVuX2VqYl93ZWIKKyAgICBlbHNlCisgICAgICAgIGVjaG8gIkludmFsaWQgVGVzdCBJRCIKKyAgICAgICAgZXhpdCAxCisgICAgZmkKKyAgICBjaGVja19zdWNjZXNzZnVsX3J1bgogICBnZW5lcmF0ZV9qdW5pdF9yZXBvcnQgJHsxfQogICBjaGFuZ2VfanVuaXRfcmVwb3J0X2NsYXNzX25hbWVzCiB9CiAKIGxpc3RfdGVzdF9pZHMoKXsKLQllY2hvIGVqYl9hbGwgZWpiX3RpbWVyX2NsdXN0ZXJfYWxsIGVqYl93ZWJfYWxsIGVqYl9ncm91cF8xIGVqYl9ncm91cF8yIGVqYl9ncm91cF8zCisgICAgZWNobyBlamJfYWxsIGVqYl90aW1lcl9jbHVzdGVyX2FsbCBlamJfd2ViX2FsbCBlamJfZ3JvdXBfMSBlamJfZ3JvdXBfMiBlamJfZ3JvdXBfMwogfQogCiBPUFQ9JHsxfQpAQCAtMzAyLDkgKzMwMiw5IEBACiBzb3VyY2UgYGRpcm5hbWUgJHswfWAvLi4vLi4vLi4vY29tbW9uX3Rlc3Quc2gKIAogY2FzZSAke09QVH0gaW4KLQlsaXN0X3Rlc3RfaWRzICkKLQkJbGlzdF90ZXN0X2lkczs7Ci0JcnVuX3Rlc3RfaWQgKQotCQl0cmFwICJjb3B5X3Rlc3RfYXJ0aWZhY3RzICR7VEVTVF9JRH0iIEVYSVQKLQkJcnVuX3Rlc3RfaWQgJHtURVNUX0lEfSA7OworICAgIGxpc3RfdGVzdF9pZHMgKQorICAgICAgICBsaXN0X3Rlc3RfaWRzOzsKKyAgICBydW5fdGVzdF9pZCApCisgICAgICAgIHRyYXAgImNvcHlfdGVzdF9hcnRpZmFjdHMgJHtURVNUX0lEfSIgRVhJVAorICAgICAgICBydW5fdGVzdF9pZCAke1RFU1RfSUR9IDs7CiBlc2FjCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9idWlsZC54bWwKaW5kZXggZWM3NDU1MC4uOTc0ZjY2NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2J1aWxkLnhtbApAQCAtNDcsMTEgKzQ3LDExIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYi1zZnNiIHRlc3RzKQotCQkJYW50IHBhc3NpdmF0ZWFjdGl2YXRlIChFeGVjdXRlcyB0aGUgZWpiLXNmc2ItcGFzc2l2YXRlYWN0aXZhdGUgdGVzdCkKLQkJCWFudCBjYWNoZU5QRSAoRXhlY3V0ZXMgdGhlIGVqYi1zZnNiLWNhY2hlTlBFIHRlc3QpCi0JPC9lY2hvPgorICAgIDxlY2hvPgorICAgICAgICBVc2FnZToKKyAgICAgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZWpiLXNmc2IgdGVzdHMpCisgICAgICAgICAgICBhbnQgcGFzc2l2YXRlYWN0aXZhdGUgKEV4ZWN1dGVzIHRoZSBlamItc2ZzYi1wYXNzaXZhdGVhY3RpdmF0ZSB0ZXN0KQorICAgICAgICAgICAgYW50IGNhY2hlTlBFIChFeGVjdXRlcyB0aGUgZWpiLXNmc2ItY2FjaGVOUEUgdGVzdCkKKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9jYWNoZU5QRS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvY2FjaGVOUEUvYnVpbGQucHJvcGVydGllcwppbmRleCBhODg0NWU0Li42Y2FkNDA0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9jYWNoZU5QRS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2NhY2hlTlBFL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIxICsxNSwyMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLXNmc2ItY2FjaGVOUEUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2NhY2hlTlBFL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2NhY2hlTlBFL2J1aWxkLnhtbAppbmRleCA5NzFmOWM2Li41ZmQ5YTQ3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9jYWNoZU5QRS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvY2FjaGVOUEUvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OCwxMyArNDgsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLyoqLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQqLmNsYXNzLCAqKi8qU0ZTQiouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogPCEtLQogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtZWpiLXNxbC1jb21tb24iPgpAQCAtNzEsNyArNzEsNyBAQAogICAgICAgICA8L2FudGNhbGw+CiAgICAgLS0+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8IS0tCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgpAQCAtODksMTggKzg5LDE4IEBACiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCi0gCisKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLWVqYi1zcWwtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX3BvaW50YmFzZS5zcWwiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvY2FjaGVOUEUvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvY2FjaGVOUEUvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDdjZjVlOGUuLjViNjk0OGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2NhY2hlTlBFL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9jYWNoZU5QRS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTM0LDggKzM0LDggQEAKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBrVGVzdE5vdFJ1biAgICA9ICJURVNUIE5PVCBSVU4iOwogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGtUZXN0UGFzc2VkICAgID0gIlRFU1QgUEFTU0VEIjsKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBrVGVzdEZhaWxlZCAgICA9ICJURVNUIEZBSUxFRCI7Ci0gICAgCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKworICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHJpdmF0ZSBBcnJheUxpc3Qgc2ZzYkxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7CkBAIC01MCwxMyArNTAsMTMgQEAKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltjYWNoZU5QRUNsaWVudF0gRE9ORSBkb1Rlc3QoKS4uLiIpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiY2FjaGVOUEUiKTsKLSAgICB9ICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICBpbml0U0ZTQkxpc3QoMCw0KTsgICAgIC8vY3JlYXRlIFNGU0JzIAorICAgICAgICBpbml0U0ZTQkxpc3QoMCw0KTsgICAgIC8vY3JlYXRlIFNGU0JzCiAKICAgICAgICAgZm9yKCBpbnQgaiA9IDA7IGogPCA0MDA7IGorKykgewogICAgICAgICAgICAgYWNjZXNzU0ZTQigwLDMsNSk7CkBAIC02NywxMyArNjcsMTMgQEAKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4ICkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICggIkV4Y2VwdGlvbiBjYXVnaHQgOiAiICsgZXggKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICB9IAorICAgICAgICB9CiAKICAgICAgICAgcmVtb3ZlU0ZTQigzKTsKICAgICAgICAgcmVtb3ZlU0ZTQigyKTsKICAgICAgICAgYWNjZXNzU0ZTQigxLDQsNSk7CiAKLSAgICAgICAgaW5pdFNGU0JMaXN0KDUsMjApOyAgICAgLy9jcmVhdGUgU0ZTQnMgCisgICAgICAgIGluaXRTRlNCTGlzdCg1LDIwKTsgICAgIC8vY3JlYXRlIFNGU0JzCiAKICAgICB9CiAKQEAgLTEwOSw3ICsxMDksNyBAQAogICAgICAgICAgICAgZm9yICg7IGkgPCBNQVhTRlNCUzsgaT1pK3N0ZXApIHsKICAgICAgICAgICAgICAgICBTRlNCIHNmc2IgPSAoU0ZTQikgc2ZzYkxpc3QuZ2V0KGkpOwogICAgICAgICAgICAgICAgIFN0cmluZyBzZnNiTmFtZSA9IHNmc2IuZ2V0TmFtZSgpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgYm9vbGVhbiBzZXNzaW9uQ3R4VGVzdCA9IHNmc2IuY2hlY2tTZXNzaW9uQ29udGV4dCgpOwogICAgICAgICAgICAgICAgIGJvb2xlYW4gaW5pdGlhbEN0eFRlc3QgPSBzZnNiLmNoZWNrSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgICAgICBib29sZWFuIGVudGl0eUhvbWVUZXN0ID0gc2ZzYi5jaGVja0VudGl0eUhvbWUoKTsKQEAgLTEyMCwxMSArMTIwLDExIEBACiAgICAgICAgICAgICAgICAgYm9vbGVhbiBoYW5kbGVUZXN0ID0gc2ZzYi5jaGVja0hhbmRsZSgpOwogICAgICAgICAgICAgICAgIGJvb2xlYW4gdXRUZXN0ID0gc2ZzYi5jaGVja1VzZXJUcmFuc2FjdGlvbigpOwogCi0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBhY2Nlc3NTRlNCOiBmb3IgYmVhbiAtPiAiICsgc2ZzYk5hbWUgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBhY2Nlc3NTRlNCOiBmb3IgYmVhbiAtPiAiICsgc2ZzYk5hbWUKICAgICAgICAgICAgICAgICAgICAgKyAiOyAiICsgc2Vzc2lvbkN0eFRlc3QgKyAiOyAiICsgaW5pdGlhbEN0eFRlc3QKICAgICAgICAgICAgICAgICAgICAgKyAiOyAiICsgZW50aXR5SG9tZVRlc3QgKyAiOyAiICsgZW50aXR5TG9jYWxIb21lVGVzdAogICAgICAgICAgICAgICAgICAgICArICI7ICIgKyBlbnRpdHlSZW1vdGVUZXN0ICsgIjsgIiArIGVudGl0eUxvY2FsVGVzdAotICAgICAgICAgICAgICAgICAgICArICI7ICIgKyBob21lSGFuZGxlVGVzdCArICI7ICIgKyBoYW5kbGVUZXN0IAorICAgICAgICAgICAgICAgICAgICArICI7ICIgKyBob21lSGFuZGxlVGVzdCArICI7ICIgKyBoYW5kbGVUZXN0CiAgICAgICAgICAgICAgICAgICAgICsgIjsgIiArIHV0VGVzdCk7CiAKICAgICAgICAgICAgICAgICBwYXNzZWQgPSBzZXNzaW9uQ3R4VGVzdCAmJiBpbml0aWFsQ3R4VGVzdApAQCAtMTM2LDcgKzEzNiw3IEBACiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAKICAgICAgICAgICAgIGlmIChwYXNzZWQpIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IGFjY2Vzc1NGU0JzIiwgc3RhdC5QQVNTKTsKQEAgLTE1OSw3ICsxNTksNyBAQAogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IHJlbW92ZVNGU0JzIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfSAKKyAgICAgICAgfQogCiAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgcmVtb3ZlU0ZTQnMiLCBzdGF0LlBBU1MpOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9jYWNoZU5QRS9lamIvU0ZTQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvY2FjaGVOUEUvZWpiL1NGU0IuamF2YQppbmRleCBmOWRlNzdjLi40MmE0MWE0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9jYWNoZU5QRS9lamIvU0ZTQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2NhY2hlTlBFL2VqYi9TRlNCLmphdmEKQEAgLTIzLDM1ICsyMywzNSBAQAogICAgIGV4dGVuZHMgRUpCT2JqZWN0CiB7CiAKLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLQlwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UoKQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0TWVzc2FnZSgpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja1Nlc3Npb25Db250ZXh0KCkKLSAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsgICAgICAgCisgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja0luaXRpYWxDb250ZXh0KCkKLSAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsgICAgICAgCisgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja0VudGl0eUhvbWUoKQotICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOyAgICAgICAKKyAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBib29sZWFuIGNoZWNrRW50aXR5TG9jYWxIb21lKCkKLSAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsgICAgICAgCisgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja0VudGl0eVJlbW90ZVJlZigpCi0gICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247ICAgICAgIAorICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIGJvb2xlYW4gY2hlY2tFbnRpdHlMb2NhbFJlZigpCi0gICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247ICAgICAgIAorICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIGJvb2xlYW4gY2hlY2tIb21lSGFuZGxlKCkKLSAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsgICAgICAgCisgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja0hhbmRsZSgpCi0gICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247ICAgICAgIAorICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIGJvb2xlYW4gY2hlY2tVc2VyVHJhbnNhY3Rpb24oKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvY2FjaGVOUEUvZWpiL1NGU0JFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2NhY2hlTlBFL2VqYi9TRlNCRUpCLmphdmEKaW5kZXggMTBjZTM1NC4uM2MyMWIzZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvY2FjaGVOUEUvZWpiL1NGU0JFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9jYWNoZU5QRS9lamIvU0ZTQkVKQi5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiBpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogCiBwdWJsaWMgY2xhc3MgU0ZTQkVKQgotICAgIGltcGxlbWVudHMgU2Vzc2lvbkJlYW4gCisgICAgaW1wbGVtZW50cyBTZXNzaW9uQmVhbgogewogICAgIHByaXZhdGUgQ29udGV4dCBlbnZDdHg7CiAgICAgcHJpdmF0ZSBDb250ZXh0IGVudlN1YkN0eDsKQEAgLTY0LDcgKzY0LDcgQEAKIAogICAgICAgICAgICAgaG9tZUhhbmRsZSA9IGVudGl0eUhvbWUuZ2V0SG9tZUhhbmRsZSgpOwogICAgICAgICAgICAgaGFuZGxlID0gZW50aXR5UmVtb3RlLmdldEhhbmRsZSgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHVzZXJUcmFuc2FjdGlvbjEgPSBzZXNzaW9uQ3R4LmdldFVzZXJUcmFuc2FjdGlvbigpOwogICAgICAgICAgICAgdXNlclRyYW5zYWN0aW9uMiA9IChVc2VyVHJhbnNhY3Rpb24pIG5ldyBJbml0aWFsQ29udGV4dCgpLgogICAgICAgICAgICAgICAgIGxvb2t1cCgiamF2YTpjb21wL1VzZXJUcmFuc2FjdGlvbiIpOwpAQCAtMTczLDcgKzE3Myw3IEBACiAgICAgcHVibGljIGJvb2xlYW4gY2hlY2tVc2VyVHJhbnNhY3Rpb24oKSB7CiAgICAgICAgIGJvb2xlYW4gc3RhdHVzID0KICAgICAgICAgICAgICgodXNlclRyYW5zYWN0aW9uMSAhPSBudWxsKSAmJiAodXNlclRyYW5zYWN0aW9uMiAhPSBudWxsKSk7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpZiggc3RhdHVzICkgewogICAgICAgICAgICAgICAgIHVzZXJUcmFuc2FjdGlvbjEuYmVnaW4oKTsKQEAgLTIwNSw3ICsyMDUsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG9rKSB7CiAgICAgICAgICAgICAgICAgZmllbGROYW1lID0gImphdmE6IjsKLSAgICAgICAgICAgICAgICBvayA9ICggKGphdmFDdHggIT0gbnVsbCkgJiYgCisgICAgICAgICAgICAgICAgb2sgPSAoIChqYXZhQ3R4ICE9IG51bGwpICYmCiAgICAgICAgICAgICAgICAgICAgICAgIGphdmFDdHguZ2V0TmFtZUluTmFtZXNwYWNlKCkuZXF1YWxzKGZpZWxkTmFtZSkgKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChvaykgewpAQCAtMjE3LDcgKzIxNyw3IEBACiAgICAgICAgICAgICAgICAgZmllbGROYW1lID0gImphdmE6Y29tcC9lbnYiOwogICAgICAgICAgICAgICAgIG9rID0gKCAoZW52Q3R4ICE9IG51bGwpICYmCiAgICAgICAgICAgICAgICAgICAgICAgIGVudkN0eC5nZXROYW1lSW5OYW1lc3BhY2UoKS5lcXVhbHMoZmllbGROYW1lKSApOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAob2spIHsKICAgICAgICAgICAgICAgICBmaWVsZE5hbWUgPSAiamF2YTpjb21wL2Vudi9lamIiOwpAQCAtMjI2LDcgKzIyNiw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAob2spIHsKICAgICAgICAgICAgICAgICBmaWVsZE5hbWUgPSAiZW52LWVudHJ5IjsKLSAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIFN0cmluZyB2YWx1ZTEgPSAoU3RyaW5nKQogICAgICAgICAgICAgICAgICAgICBpbml0aWFsQ3R4Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9UYWdWYWx1ZSIpOwogICAgICAgICAgICAgICAgIFN0cmluZyB2YWx1ZTIgPSAoU3RyaW5nKSBlbnZDdHgubG9va3VwKCJUYWdWYWx1ZSIpOwpAQCAtMjM4LDkgKzIzOCw5IEBACiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIG9rID0gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgdGhpcy5tZXNzYWdlID0gKG9rKSA/IG51bGwgOiAoZmllbGROYW1lICsgIiBub3QgcmVzdG9yZWQgcHJvcGVybHkiKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIG9rOwogICAgIH0KIApAQCAtMjY4LDcgKzI2OCw3IEBACiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCJcblx0SW4gU0ZTQi5lamJSZW1vdmUoKSBmb3IgbmFtZSAtPiAiICsgc2ZzYk5hbWUpOwogICAgICAgICB0cnkgewotICAgICAgICAgICAgZW50aXR5UmVtb3RlLnJlbW92ZSgpOyAKKyAgICAgICAgICAgIGVudGl0eVJlbW90ZS5yZW1vdmUoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvY2FjaGVOUEUvZWpiL1NGU0JIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9jYWNoZU5QRS9lamIvU0ZTQkhvbWUuamF2YQppbmRleCAyYTQ1N2ViLi5iYjNmZDRjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9jYWNoZU5QRS9lamIvU0ZTQkhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9jYWNoZU5QRS9lamIvU0ZTQkhvbWUuamF2YQpAQCAtMjMsNiArMjMsNiBAQAogcHVibGljIGludGVyZmFjZSBTRlNCSG9tZQogICAgIGV4dGVuZHMgRUpCSG9tZQogewotCXB1YmxpYyBTRlNCIGNyZWF0ZShTdHJpbmcgc2ZzYk5hbWUpCisgICAgcHVibGljIFNGU0IgY3JlYXRlKFN0cmluZyBzZnNiTmFtZSkKICAgICAgICAgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvY2FjaGVOUEUvZWpiL1NpbXBsZUVudGl0eUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2NhY2hlTlBFL2VqYi9TaW1wbGVFbnRpdHlCZWFuLmphdmEKaW5kZXggYjlhNzNkMC4uMTI1MWY5MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvY2FjaGVOUEUvZWpiL1NpbXBsZUVudGl0eUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9jYWNoZU5QRS9lamIvU2ltcGxlRW50aXR5QmVhbi5qYXZhCkBAIC01Niw4ICs1Niw4IEBACiAgICAgICAgIENvbm5lY3Rpb24gYyA9IG51bGw7CiAgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHBzID0gbnVsbDsKICAgICAgICAgdHJ5IHsKLQkgICAgICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgIAkgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCisgICAgICAgICAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICAgICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAogICAgICAgICAgICAgICAgICJJTlNFUlQgSU5UTyBTaW1wbGVFbnRpdHkgKGtleWlkLCBuYW1lKSBWQUxVRVMgKD8sPykiKTsKICAgICAgICAgICAgIHBzLnNldFN0cmluZygxLCBrZXkpOwogICAgICAgICAgICAgcHMuc2V0U3RyaW5nKDIsIG5hbWUpOwpAQCAtNjgsNyArNjgsNyBAQAogICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICAgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgQ3JlYXRlRXhjZXB0aW9uKCJTUUwgZXhjZXB0aW9uICIgKyBlKTsKLSAgICAgICAgfSBmaW5hbGx5IHsgCisgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGlmIChwcyAhPSBudWxsKQogICAgICAgICAgICAgICAgICAgICBwcy5jbG9zZSgpOwpAQCAtOTQsMTAgKzk0LDEwIEBACiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb24KICAgICB7CiAgICAgICAgIENvbm5lY3Rpb24gYyA9IG51bGw7Ci0gICAgIAlQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7Ci0JICAgIHRyeSB7Ci0JICAgICAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAJICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAorICAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgICAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKICAgICAgICAgICAgICAgICAiU0VMRUNUIGtleWlkIGZyb20gU2ltcGxlRW50aXR5IHdoZXJlIGtleWlkID0gPyIpOwogICAgICAgICAgICAgcHMuc2V0U3RyaW5nKDEsIGtleSk7CiAgICAgICAgICAgICBSZXN1bHRTZXQgcnMgPSBwcy5leGVjdXRlUXVlcnkoKTsKQEAgLTEwNyw3ICsxMDcsNyBAQAogICAgICAgICAgICAgcmV0dXJuIGtleTsKICAgICAgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRmluZGVyRXhjZXB0aW9uKCJTUUwgZXhjZXB0aW9uICIgKyBlKTsKLSAgICAgICAgfSBmaW5hbGx5IHsgCisgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGlmIChwcyAhPSBudWxsKQogICAgICAgICAgICAgICAgICAgICBwcy5jbG9zZSgpOwpAQCAtMTI1LDY4ICsxMjUsNjggQEAKICAgICAgICAgICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAogICAgICAgICAgICAgICAgICJTRUxFQ1QgbmFtZSBmcm9tIFNpbXBsZUVudGl0eSB3aGVyZSBrZXlpZCA9ID8iKTsKICAgICAgICAgICAgIHBzLnNldFN0cmluZygxLCBrZXkpOwotCSAgICBSZXN1bHRTZXQgcnMgPSBwcy5leGVjdXRlUXVlcnkoKTsKLQkgICAgaWYgKCFycy5uZXh0KCkpCi0JICAgICAgIHRocm93IG5ldyBOb1N1Y2hFbnRpdHlFeGNlcHRpb24oIk5vIGN1c3QgZm9yICIgKyBrZXkpOwotCSAgICB0aGlzLm5hbWUgPSBycy5nZXRTdHJpbmcoMSk7Ci0JfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7Ci0JICAgIHRocm93IG5ldyBOb1N1Y2hFbnRpdHlFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOwotCX0gZmluYWxseSB7IAotCSAgICB0cnkgewotCQlpZiAocHMgIT0gbnVsbCkKLQkJICAgIHBzLmNsb3NlKCk7Ci0JCWlmIChjICE9IG51bGwpCi0JCSAgICBjLmNsb3NlKCk7Ci0JICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQotCX0KKyAgICAgICAgUmVzdWx0U2V0IHJzID0gcHMuZXhlY3V0ZVF1ZXJ5KCk7CisgICAgICAgIGlmICghcnMubmV4dCgpKQorICAgICAgICAgICB0aHJvdyBuZXcgTm9TdWNoRW50aXR5RXhjZXB0aW9uKCJObyBjdXN0IGZvciAiICsga2V5KTsKKyAgICAgICAgdGhpcy5uYW1lID0gcnMuZ2V0U3RyaW5nKDEpOworICAgIH0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAgeworICAgICAgICB0aHJvdyBuZXcgTm9TdWNoRW50aXR5RXhjZXB0aW9uKCJTUUwgZXhjZXB0aW9uICIgKyBlKTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICB0cnkgeworICAgICAgICBpZiAocHMgIT0gbnVsbCkKKyAgICAgICAgICAgIHBzLmNsb3NlKCk7CisgICAgICAgIGlmIChjICE9IG51bGwpCisgICAgICAgICAgICBjLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQorICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJTdG9yZSgpIHsKLQlDb25uZWN0aW9uIGMgPSBudWxsOwotICAgICAJUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOwotCXRyeSB7Ci0JICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgIAkgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCi0JCSJVUERBVEUgU2ltcGxlRW50aXR5IFNFVCBuYW1lID0gPyBXSEVSRSBrZXlpZCA9ID8iKTsKLQkgICAgcHMuc2V0U3RyaW5nKDEsIG5hbWUpOwotCSAgICBwcy5zZXRTdHJpbmcoMiwga2V5KTsKLQkgICAgaWYgKHBzLmV4ZWN1dGVVcGRhdGUoKSAhPSAxKQotCQl0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJEaWRudCBzdG9yZSBlamIiKTsKLQl9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7Ci0JfSBmaW5hbGx5IHsgCi0JICAgIHRyeSB7Ci0JCWlmIChwcyAhPSBudWxsKQotCQkgICAgcHMuY2xvc2UoKTsKLQkJaWYgKGMgIT0gbnVsbCkKLQkJICAgIGMuY2xvc2UoKTsKLQkgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9Ci0JfQorICAgIENvbm5lY3Rpb24gYyA9IG51bGw7CisgICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgICAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKKyAgICAgICAgIlVQREFURSBTaW1wbGVFbnRpdHkgU0VUIG5hbWUgPSA/IFdIRVJFIGtleWlkID0gPyIpOworICAgICAgICBwcy5zZXRTdHJpbmcoMSwgbmFtZSk7CisgICAgICAgIHBzLnNldFN0cmluZygyLCBrZXkpOworICAgICAgICBpZiAocHMuZXhlY3V0ZVVwZGF0ZSgpICE9IDEpCisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIkRpZG50IHN0b3JlIGVqYiIpOworICAgIH0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAgeworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJTUUwgZXhjZXB0aW9uICIgKyBlKTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICB0cnkgeworICAgICAgICBpZiAocHMgIT0gbnVsbCkKKyAgICAgICAgICAgIHBzLmNsb3NlKCk7CisgICAgICAgIGlmIChjICE9IG51bGwpCisgICAgICAgICAgICBjLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQorICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB0aHJvd3MgUmVtb3ZlRXhjZXB0aW9uIHsKLQlDb25uZWN0aW9uIGMgPSBudWxsOwotICAgICAJUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOwotCXRyeSB7CisgICAgQ29ubmVjdGlvbiBjID0gbnVsbDsKKyAgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHBzID0gbnVsbDsKKyAgICB0cnkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbKipTaW1wbGVFbnRpdHlCZWFuKipdIGVqYlJlbW92ZSBjYWxsZWQgZm9yIGtleSA9ICIgKyB0aGlzLmtleSk7Ci0JICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgIAkgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCi0JCSJERUxFVEUgRlJPTSBTaW1wbGVFbnRpdHkgV0hFUkUga2V5aWQgPSA/Iik7Ci0JICAgIHBzLnNldFN0cmluZygxLCBuYW1lKTsKLQkgICAgaWYgKHBzLmV4ZWN1dGVVcGRhdGUoKSAhPSAxKQotCQl0aHJvdyBuZXcgUmVtb3ZlRXhjZXB0aW9uKCJEaWRudCByZW1vdmUgZWpiIik7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlsqKlNpbXBsZUVudGl0eUJlYW4qKl0gZWpiUmVtb3ZlIGZvciBrZXkgPSAiIAorICAgICAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICAgICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAorICAgICAgICAiREVMRVRFIEZST00gU2ltcGxlRW50aXR5IFdIRVJFIGtleWlkID0gPyIpOworICAgICAgICBwcy5zZXRTdHJpbmcoMSwgbmFtZSk7CisgICAgICAgIGlmIChwcy5leGVjdXRlVXBkYXRlKCkgIT0gMSkKKyAgICAgICAgdGhyb3cgbmV3IFJlbW92ZUV4Y2VwdGlvbigiRGlkbnQgcmVtb3ZlIGVqYiIpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbKipTaW1wbGVFbnRpdHlCZWFuKipdIGVqYlJlbW92ZSBmb3Iga2V5ID0gIgogICAgICAgICAgICAgICAgICsgdGhpcy5rZXkgKyAiIHN1Y2NlZWRlZCIpOwotCX0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAgewotCSAgICB0aHJvdyBuZXcgUmVtb3ZlRXhjZXB0aW9uKCJTUUwgZXhjZXB0aW9uICIgKyBlKTsKLQl9IGZpbmFsbHkgeyAKLQkgICAgdHJ5IHsKLQkJaWYgKHBzICE9IG51bGwpCi0JCSAgICBwcy5jbG9zZSgpOwotCQlpZiAoYyAhPSBudWxsKQotCQkgICAgYy5jbG9zZSgpOwotCSAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KLQl9CisgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7CisgICAgICAgIHRocm93IG5ldyBSZW1vdmVFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOworICAgIH0gZmluYWxseSB7CisgICAgICAgIHRyeSB7CisgICAgICAgIGlmIChwcyAhPSBudWxsKQorICAgICAgICAgICAgcHMuY2xvc2UoKTsKKyAgICAgICAgaWYgKGMgIT0gbnVsbCkKKyAgICAgICAgICAgIGMuY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvY2FjaGVOUEUvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvY2FjaGVOUEUvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IGIxNGM3MzYuLjc0YjE2ODYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2NhY2hlTlBFL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9jYWNoZU5QRS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsNyArMSw3IEBACi1Ecm9wIHRhYmxlIFNpbXBsZUVudGl0eTsNCi0NCi1DUkVBVEUgVEFCTEUgU2ltcGxlRW50aXR5ICgNCi0gICAga2V5aWQgICAgIGNoYXIoMjApIG5vdCBudWxsLA0KLSAgICBuYW1lICAgIGNoYXIoMjApDQotKTsNCi0NCitEcm9wIHRhYmxlIFNpbXBsZUVudGl0eTsKKworQ1JFQVRFIFRBQkxFIFNpbXBsZUVudGl0eSAoCisgICAga2V5aWQgICAgIGNoYXIoMjApIG5vdCBudWxsLAorICAgIG5hbWUgICAgY2hhcigyMCkKKyk7CisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2NhY2hlTlBFL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9jYWNoZU5QRS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IDkzNWM0YTYuLjNmMjFhZWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2NhY2hlTlBFL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvY2FjaGVOUEUvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbApAQCAtMSArMSBAQAotRHJvcCB0YWJsZSBTaW1wbGVFbnRpdHk7DQorRHJvcCB0YWJsZSBTaW1wbGVFbnRpdHk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGQ3NDFhNmIuLmY4NDU5NGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMSArMTUsMjEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1zZnNiLWtlZXBzdGF0ZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9idWlsZC54bWwKaW5kZXggNGNkN2YyNy4uMjAwZDNjZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OCwxMyArNDgsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLyoqLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQqLmNsYXNzLCAqKi8qU0ZTQiouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtZWpiLXNxbC1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CkBAIC02OSw3ICs2OSw3IEBACiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAtLT4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDwhLS0KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CkBAIC04MSwxNyArODEsMTcgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLWVqYi1zcWwtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX3BvaW50YmFzZS5zcWwiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMDJkNGNlYy4uMGUwMmQ1MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zNCw4ICszNCw4IEBACiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcga1Rlc3ROb3RSdW4gICAgPSAiVEVTVCBOT1QgUlVOIjsKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBrVGVzdFBhc3NlZCAgICA9ICJURVNUIFBBU1NFRCI7CiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcga1Rlc3RGYWlsZWQgICAgPSAiVEVTVCBGQUlMRUQiOwotICAgIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCAgICBNQVhfU0ZTQlMgPSA0MDsKQEAgLTUzLDIzICs1MywyMyBAQAogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW2tlZXBzdGF0ZUNsaWVudF0gRE9ORSBkb1Rlc3QoKS4uLiIpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgia2VlcHN0YXRlIik7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgaW5pdFNGU0JMaXN0KCk7ICAgICAvL2NyZWF0ZSBTRlNCcyAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJXYWl0aW5nIGZvciAxNSBzZWNvbmRzIGJlZm9yZSBhY2Nlc3NpbmcuLi4iKTsKLQkgICAgZm9yIChpbnQgaT0wOyBpPDE1OyBpKyspIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCIiICsgKDE1IC0gaSkgKyAiIHNlY29uZHMgbGVmdC4uLiIpOwotCQl0cnkgewotCQkgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCgxKjEwMDApOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJfQotCSAgICB9CisgICAgICAgIGluaXRTRlNCTGlzdCgpOyAgICAgLy9jcmVhdGUgU0ZTQnMKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXYWl0aW5nIGZvciAxNSBzZWNvbmRzIGJlZm9yZSBhY2Nlc3NpbmcuLi4iKTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPDE1OyBpKyspIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIiICsgKDE1IC0gaSkgKyAiIHNlY29uZHMgbGVmdC4uLiIpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCgxKjEwMDApOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgfQorICAgICAgICB9CiAgICAgICAgIGFjY2Vzc1NGU0IoKTsgICAgICAgLy9hY2Nlc3MgdGhlIFNGQlMKLQlyZW1vdmVUZXN0KCk7CisgICAgcmVtb3ZlVGVzdCgpOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbml0U0ZTQkxpc3QoKSB7CkBAIC05OSwyMSArOTksMjEgQEAKIAogICAgIHB1YmxpYyB2b2lkIGFjY2Vzc1NGU0IoKSB7CiAgICAgICAgIHRyeSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2FpdGluZyBmb3IgMTAgc2Vjb25kcyBiZWZvcmUgYWNjZXNzaW5nLi4uIik7Ci0JICAgIGZvciAoaW50IGk9MDsgaTwxMDsgaSsrKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiIiArICgxMCAtIGkpICsgIiBzZWNvbmRzIGxlZnQuLi4iKTsKLQkJdHJ5IHsKLQkJICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoMSoxMDAwKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCX0KLQkgICAgfQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldhaXRpbmcgZm9yIDEwIHNlY29uZHMgYmVmb3JlIGFjY2Vzc2luZy4uLiIpOworICAgICAgICBmb3IgKGludCBpPTA7IGk8MTA7IGkrKykgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIgKyAoMTAgLSBpKSArICIgc2Vjb25kcyBsZWZ0Li4uIik7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDEqMTAwMCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICB9CisgICAgICAgIH0KIAogICAgICAgICAgICAgYm9vbGVhbiBwYXNzZWQgPSB0cnVlOwogICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgTUFYX1NGU0JTOyBpKyspIHsKICAgICAgICAgICAgICAgICBTRlNCIHNmc2IgPSAoU0ZTQikgc2ZzYkxpc3QuZ2V0KGkpOwogICAgICAgICAgICAgICAgIFN0cmluZyBzZnNiTmFtZSA9IF9zZnNiUHJlZml4K2k7Ci0JCVN0cmluZyByZXRyaWV2ZWROYW1lID0gc2ZzYi5nZXROYW1lKCk7Ci0gICAgICAgICAgICAgICAgCisgICAgICAgIFN0cmluZyByZXRyaWV2ZWROYW1lID0gc2ZzYi5nZXROYW1lKCk7CisKICAgICAgICAgICAgICAgICBib29sZWFuIHNlc3Npb25DdHhUZXN0ID0gc2ZzYi5jaGVja1Nlc3Npb25Db250ZXh0KCk7CiAgICAgICAgICAgICAgICAgYm9vbGVhbiBpbml0aWFsQ3R4VGVzdCA9IHNmc2IuY2hlY2tJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgICAgIGJvb2xlYW4gZW50aXR5SG9tZVRlc3QgPSBzZnNiLmNoZWNrRW50aXR5SG9tZSgpOwpAQCAtMTIzLDMzICsxMjMsMzMgQEAKICAgICAgICAgICAgICAgICBib29sZWFuIGhvbWVIYW5kbGVUZXN0ID0gc2ZzYi5jaGVja0hvbWVIYW5kbGUoKTsKICAgICAgICAgICAgICAgICBib29sZWFuIGhhbmRsZVRlc3QgPSBzZnNiLmNoZWNrSGFuZGxlKCk7CiAgICAgICAgICAgICAgICAgYm9vbGVhbiB1dFRlc3QgPSBzZnNiLmNoZWNrVXNlclRyYW5zYWN0aW9uKCk7Ci0JCWJvb2xlYW4gYWN0aXZhdGlvblRlc3QgPSAoc2ZzYi5nZXRBY3RpdmF0aW9uQ291bnQoKSAhPSAwKTsKLQkJYm9vbGVhbiBwYXNzaXZhdGlvblRlc3QgPSAoc2ZzYi5nZXRQYXNzaXZhdGlvbkNvdW50KCkgIT0gMCk7CisgICAgICAgIGJvb2xlYW4gYWN0aXZhdGlvblRlc3QgPSAoc2ZzYi5nZXRBY3RpdmF0aW9uQ291bnQoKSAhPSAwKTsKKyAgICAgICAgYm9vbGVhbiBwYXNzaXZhdGlvblRlc3QgPSAoc2ZzYi5nZXRQYXNzaXZhdGlvbkNvdW50KCkgIT0gMCk7CiAKLQkJaW50IGFjdENvdW50ID0gc2ZzYi5nZXRBY3RpdmF0aW9uQ291bnQoKTsKLQkJaW50IHBhc0NvdW50ID0gc2ZzYi5nZXRQYXNzaXZhdGlvbkNvdW50KCk7CisgICAgICAgIGludCBhY3RDb3VudCA9IHNmc2IuZ2V0QWN0aXZhdGlvbkNvdW50KCk7CisgICAgICAgIGludCBwYXNDb3VudCA9IHNmc2IuZ2V0UGFzc2l2YXRpb25Db3VudCgpOwogCiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTRlNCWyIgKyBpICsgIi8iICsgTUFYX1NGU0JTICsgIl06ICIgKyBzZXNzaW9uQ3R4VGVzdCArICI7ICIgKyBpbml0aWFsQ3R4VGVzdAogICAgICAgICAgICAgICAgICAgICArICI7ICIgKyBlbnRpdHlIb21lVGVzdCArICI7ICIgKyBlbnRpdHlMb2NhbEhvbWVUZXN0CiAgICAgICAgICAgICAgICAgICAgICsgIjsgIiArIGVudGl0eVJlbW90ZVRlc3QgKyAiOyAiICsgZW50aXR5TG9jYWxUZXN0Ci0gICAgICAgICAgICAgICAgICAgICsgIjsgIiArIGhvbWVIYW5kbGVUZXN0ICsgIjsgIiArIGhhbmRsZVRlc3QgCisgICAgICAgICAgICAgICAgICAgICsgIjsgIiArIGhvbWVIYW5kbGVUZXN0ICsgIjsgIiArIGhhbmRsZVRlc3QKICAgICAgICAgICAgICAgICAgICAgKyAiOyAiICsgdXRUZXN0Ci0JCSAgICArICI7ICIgKyBhY3RpdmF0aW9uVGVzdCArICIgKCIgKyBhY3RDb3VudCArICIpIgotCQkgICAgKyAiOyAiICsgcGFzc2l2YXRpb25UZXN0ICsgIiAoIiArIHBhc0NvdW50ICsgIikiCi0JCSk7CisgICAgICAgICAgICArICI7ICIgKyBhY3RpdmF0aW9uVGVzdCArICIgKCIgKyBhY3RDb3VudCArICIpIgorICAgICAgICAgICAgKyAiOyAiICsgcGFzc2l2YXRpb25UZXN0ICsgIiAoIiArIHBhc0NvdW50ICsgIikiCisgICAgICAgICk7CiAKICAgICAgICAgICAgICAgICBwYXNzZWQgPSBzZXNzaW9uQ3R4VGVzdCAmJiBpbml0aWFsQ3R4VGVzdAogICAgICAgICAgICAgICAgICAgICAmJiBlbnRpdHlIb21lVGVzdCAmJiBlbnRpdHlMb2NhbEhvbWVUZXN0CiAgICAgICAgICAgICAgICAgICAgICYmIGVudGl0eVJlbW90ZVRlc3QgJiYgZW50aXR5TG9jYWxUZXN0CiAgICAgICAgICAgICAgICAgICAgICYmIGhvbWVIYW5kbGVUZXN0ICYmIGhhbmRsZVRlc3QgJiYgdXRUZXN0Ci0JCSAgICAmJiBhY3RpdmF0aW9uVGVzdCAmJiBwYXNzaXZhdGlvblRlc3Q7CisgICAgICAgICAgICAmJiBhY3RpdmF0aW9uVGVzdCAmJiBwYXNzaXZhdGlvblRlc3Q7CiAKIC8qCiAgICAgICAgICAgICAgICAgaWYgKCEgcGFzc2VkKSB7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICovCi0JCXNmc2Iuc2xlZXBGb3JTZWNvbmRzKDIpOworICAgICAgICBzZnNiLnNsZWVwRm9yU2Vjb25kcygyKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHBhc3NlZCkgewpAQCAtMTYzLDQ0ICsxNjMsNDQgQEAKICAgICAgICAgICAgICAgICBTdHJpbmcgc2ZzYk5hbWUgPSBfc2ZzYlByZWZpeCtpOwogCiAgICAgICAgICAgICAgICAgc2ZzYi5tYWtlU3RhdGVOb25TZXJpYWxpemFibGUoKTsKLQkgICAgfQorICAgICAgICB9CiAKLQkgICAgLy9DcmVhdGluZyB0aGVzZSBtYW55IFNGU0JzIHNob3VsZCBmb3JjZSBwYXNzaXZhdGlvbiBvZiB0aGUgYWJvdmUKLQkgICAgLy8Jbm9uLXNlcmlhbGl6YWJsZSBiZWFucworICAgICAgICAvL0NyZWF0aW5nIHRoZXNlIG1hbnkgU0ZTQnMgc2hvdWxkIGZvcmNlIHBhc3NpdmF0aW9uIG9mIHRoZSBhYm92ZQorICAgICAgICAvLyAgICBub24tc2VyaWFsaXphYmxlIGJlYW5zCiAgICAgICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBNQVhfU0ZTQlM7IGkrKykgewotCQlob21lLmNyZWF0ZShfc2ZzYlByZWZpeCArIChpKzEpKjEwMDApOwotCSAgICB9CisgICAgICAgIGhvbWUuY3JlYXRlKF9zZnNiUHJlZml4ICsgKGkrMSkqMTAwMCk7CisgICAgICAgIH0KIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldhaXRpbmcgZm9yIDEwIHNlY29uZHMgZm9yIHBhc3NpdmF0aW9uIHRvIGNvbXBsZXRlLi4uIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2FpdGluZyBmb3IgMTAgc2Vjb25kcyBmb3IgcGFzc2l2YXRpb24gdG8gY29tcGxldGUuLi4iKTsKIAotCSAgICBmb3IgKGludCBpPTA7IGk8MTA7IGkrKykgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIiIgKyAoMTAgLSBpKSArICIgc2Vjb25kcyBsZWZ0Li4uIik7Ci0JCXRyeSB7Ci0JCSAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDEqMTAwMCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQl9Ci0JICAgIH0KKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPDEwOyBpKyspIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIiICsgKDEwIC0gaSkgKyAiIHNlY29uZHMgbGVmdC4uLiIpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCgxKjEwMDApOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgfQorICAgICAgICB9CiAKICAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IE1BWF9TRlNCUzsgaSsrKSB7CiAgICAgICAgICAgICAgICAgU0ZTQiBzZnNiID0gKFNGU0IpIHNmc2JMaXN0LmdldChpKTsKICAgICAgICAgICAgICAgICBTdHJpbmcgc2ZzYk5hbWUgPSBfc2ZzYlByZWZpeCtpOwogCiAgICAgICAgICAgICAgICAgdHJ5IHsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnQoIkV4cGVjdGluZyBleGNlcHRpb24gZm9yOiAiICsgc2ZzYk5hbWUpOwotCQkgICAgU3RyaW5nIG5tID0gc2ZzYi5nZXROYW1lKCk7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVSUk9SLiBEaWRuJ3QgZ2V0IGV4cGVjdGVkIGV4Y2VwdGlvbi4gIgotCQkJICAgICsgIkdvdDogIiArIG5tKTsKLQkJICAgIHBhc3NlZCA9IGZhbHNlOwotCQkgICAgYnJlYWs7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJbKipHb3QgRXhjZXB0aW9uKipdIik7Ci0JCX0KLQkgICAgfQotCSAgICBpZiAocGFzc2VkKSB7Ci0JCXN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgbm9uLXNlcmlhbGl6YWJsZS1zdGF0ZSIsIHN0YXQuUEFTUyk7Ci0JICAgIH0gZWxzZSB7Ci0JCXN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgbm9uLXNlcmlhbGl6YWJsZS1zdGF0ZSIsIHN0YXQuRkFJTCk7Ci0JICAgIH0KKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIkV4cGVjdGluZyBleGNlcHRpb24gZm9yOiAiICsgc2ZzYk5hbWUpOworICAgICAgICAgICAgU3RyaW5nIG5tID0gc2ZzYi5nZXROYW1lKCk7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVSUk9SLiBEaWRuJ3QgZ2V0IGV4cGVjdGVkIGV4Y2VwdGlvbi4gIgorICAgICAgICAgICAgICAgICsgIkdvdDogIiArIG5tKTsKKyAgICAgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbKipHb3QgRXhjZXB0aW9uKipdIik7CisgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAocGFzc2VkKSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgbm9uLXNlcmlhbGl6YWJsZS1zdGF0ZSIsIHN0YXQuUEFTUyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgbm9uLXNlcmlhbGl6YWJsZS1zdGF0ZSIsIHN0YXQuRkFJTCk7CisgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IGFjY2Vzc1NGU0IiLCBzdGF0LkZBSUwpOwogCkBAIC0yMDksMjYgKzIwOSwyNiBAQAogCiAKICAgICBwdWJsaWMgdm9pZCByZW1vdmVUZXN0KCkgewotCVNGU0Igc2ZzYiA9IG51bGw7Ci0JdHJ5IHsKLQkgICAgU3RyaW5nIG15TmFtZSA9ICJfMl8iICsgX3Nmc2JQcmVmaXggKyAiXzJfIjsKLQkgICAgc2ZzYiA9IChTRlNCKSBob21lLmNyZWF0ZShteU5hbWUpOwotCSAgICBTdHJpbmcgcmV0cmlldmVkTmFtZSA9IHNmc2IuZ2V0TmFtZSgpOwotCSAgICBib29sZWFuIG5hbWVPSyA9IG15TmFtZS5lcXVhbHNJZ25vcmVDYXNlKHJldHJpZXZlZE5hbWUpOwotCSAgICBib29sZWFuIGdvdEV4Y2VwdGlvbiA9IGZhbHNlOwotCSAgICBzZnNiLnJlbW92ZSgpOwotCSAgICB0cnkgewotCQlzZnNiLmdldE5hbWUoKTsKLQkJZ290RXhjZXB0aW9uID0gZmFsc2U7CSAgICAvL0V4cGVjdGluZyBhbiBleGNlcHRpb24KLQkgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCWdvdEV4Y2VwdGlvbiA9IHRydWU7Ci0JICAgIH0KKyAgICBTRlNCIHNmc2IgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIFN0cmluZyBteU5hbWUgPSAiXzJfIiArIF9zZnNiUHJlZml4ICsgIl8yXyI7CisgICAgICAgIHNmc2IgPSAoU0ZTQikgaG9tZS5jcmVhdGUobXlOYW1lKTsKKyAgICAgICAgU3RyaW5nIHJldHJpZXZlZE5hbWUgPSBzZnNiLmdldE5hbWUoKTsKKyAgICAgICAgYm9vbGVhbiBuYW1lT0sgPSBteU5hbWUuZXF1YWxzSWdub3JlQ2FzZShyZXRyaWV2ZWROYW1lKTsKKyAgICAgICAgYm9vbGVhbiBnb3RFeGNlcHRpb24gPSBmYWxzZTsKKyAgICAgICAgc2ZzYi5yZW1vdmUoKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgc2ZzYi5nZXROYW1lKCk7CisgICAgICAgIGdvdEV4Y2VwdGlvbiA9IGZhbHNlOyAgICAgICAgLy9FeHBlY3RpbmcgYW4gZXhjZXB0aW9uCisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICBnb3RFeGNlcHRpb24gPSB0cnVlOworICAgICAgICB9CiAKLQkgICAgU3RyaW5nIHJlc3VsdFN0ciA9ICIoIiArIG5hbWVPSyArICIgQEBAICIgKyBnb3RFeGNlcHRpb24gKyAiKSI7CisgICAgICAgIFN0cmluZyByZXN1bHRTdHIgPSAiKCIgKyBuYW1lT0sgKyAiIEBAQCAiICsgZ290RXhjZXB0aW9uICsgIikiOwogICAgICAgICAgICAgaWYgKG5hbWVPSyAmJiBnb3RFeGNlcHRpb24pIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IHJlbW92ZVRlc3QgIiArIHJlc3VsdFN0ciwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0JCXN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgcmVtb3ZlVGVzdCAiICsgcmVzdWx0U3RyLCBzdGF0LkZBSUwpOworICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IHJlbW92ZVRlc3QgIiArIHJlc3VsdFN0ciwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAppbmRleCA0NzhkNDQ5Li4xZjBiYmRkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCkBAIC0yOSw3ICsyOSw3IEBACiAgICAgICAgIDwvZWpiLXJlZj4KICAgICAgICAgPGJlYW4tY2FjaGU+CiAgICAgICAgICAgICA8bWF4LWNhY2hlLXNpemU+ODwvbWF4LWNhY2hlLXNpemU+Ci0JICAgIDxyZXNpemUtcXVhbnRpdHk+NDwvcmVzaXplLXF1YW50aXR5PgorICAgICAgICA8cmVzaXplLXF1YW50aXR5PjQ8L3Jlc2l6ZS1xdWFudGl0eT4KICAgICAgICAgPC9iZWFuLWNhY2hlPgogICAgICA8L2VqYj4KICAgICAgPGVqYj4KQEAgLTQ3LDEwICs0NywxMCBAQAogICAgICAgICAgICAgPHJlcy1yZWYtbmFtZT5qZGJjL0RhdGFTb3VyY2U8L3Jlcy1yZWYtbmFtZT4KICAgICAgICAgICAgIDxqbmRpLW5hbWU+amRiYy9fX2RlZmF1bHQ8L2puZGktbmFtZT4KICAgICAgICAgPC9yZXNvdXJjZS1yZWY+Ci0JPGJlYW4tcG9vbD4KLQkgICAgPHN0ZWFkeS1wb29sLXNpemU+NDwvc3RlYWR5LXBvb2wtc2l6ZT4KLQkgICAgPG1heC1wb29sLXNpemU+MTc8L21heC1wb29sLXNpemU+Ci0JPC9iZWFuLXBvb2w+CisgICAgPGJlYW4tcG9vbD4KKyAgICAgICAgPHN0ZWFkeS1wb29sLXNpemU+NDwvc3RlYWR5LXBvb2wtc2l6ZT4KKyAgICAgICAgPG1heC1wb29sLXNpemU+MTc8L21heC1wb29sLXNpemU+CisgICAgPC9iZWFuLXBvb2w+CiAgICAgIDwvZWpiPgogICAgPC9lbnRlcnByaXNlLWJlYW5zPgogPC9zdW4tZWpiLWphcj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9lamIvU0ZTQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2VqYi9TRlNCLmphdmEKaW5kZXggNWU2OTdjZC4uMzJjYThiYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2VqYi9TRlNCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2VqYi9TRlNCLmphdmEKQEAgLTI0LDM3ICsyNCwzNyBAQAogewogCiAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLQl0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgdm9pZCBjcmVhdGVTRlNCQ2hpbGQoKSAKLQl0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHB1YmxpYyB2b2lkIGNyZWF0ZVNGU0JDaGlsZCgpCisgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TWVzc2FnZSgpCi0JdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIGJvb2xlYW4gY2hlY2tTZXNzaW9uQ29udGV4dCgpCi0gICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247ICAgICAgIAorICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIGJvb2xlYW4gY2hlY2tJbml0aWFsQ29udGV4dCgpCi0gICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247ICAgICAgIAorICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIGJvb2xlYW4gY2hlY2tFbnRpdHlIb21lKCkKLSAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsgICAgICAgCisgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja0VudGl0eUxvY2FsSG9tZSgpCi0gICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247ICAgICAgIAorICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIGJvb2xlYW4gY2hlY2tFbnRpdHlSZW1vdGVSZWYoKQotICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOyAgICAgICAKKyAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBib29sZWFuIGNoZWNrRW50aXR5TG9jYWxSZWYoKQotICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOyAgICAgICAKKyAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBib29sZWFuIGNoZWNrSG9tZUhhbmRsZSgpCi0gICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247ICAgICAgIAorICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIGJvb2xlYW4gY2hlY2tIYW5kbGUoKQotICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOyAgICAgICAKKyAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBib29sZWFuIGNoZWNrVXNlclRyYW5zYWN0aW9uKCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKQEAgLTYzLDE3ICs2MywxNyBAQAogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIGludCBnZXRBY3RpdmF0aW9uQ291bnQoKQotCXRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBpbnQgZ2V0UGFzc2l2YXRpb25Db3VudCgpCi0JdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIHZvaWQgbWFrZVN0YXRlTm9uU2VyaWFsaXphYmxlKCkKLQl0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgdm9pZCBzbGVlcEZvclNlY29uZHMoaW50IHNlYykKLQl0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgdm9pZCB1bnVzZWRNZXRob2QoKQotCXRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9lamIvU0ZTQkVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2VqYi9TRlNCRUpCLmphdmEKaW5kZXggNmYwNmRlYy4uNDJmNGZkMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2VqYi9TRlNCRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2VqYi9TRlNCRUpCLmphdmEKQEAgLTMwLDcgKzMwLDcgQEAKIGltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiAKIHB1YmxpYyBjbGFzcyBTRlNCRUpCCi0gICAgaW1wbGVtZW50cyBTZXNzaW9uQmVhbiAKKyAgICBpbXBsZW1lbnRzIFNlc3Npb25CZWFuCiB7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9DQUxfQ0hJTERfU1VGRklYID0gIl9jaGlsZExvY2FsIjsKQEAgLTUxLDcgKzUxLDcgQEAKICAgICBwcml2YXRlIFNpbXBsZUVudGl0eUxvY2FsSG9tZSAgICAgICBlbnRpdHlMb2NhbEhvbWU7CiAgICAgcHJpdmF0ZSBTaW1wbGVFbnRpdHlMb2NhbCAgICAgICAgICAgZW50aXR5TG9jYWw7CiAgICAgcHJpdmF0ZSBTRlNCSG9tZSAgICAgICAgICAgICAgICAgICAgc2ZzYkhvbWU7Ci0gICAgcHJpdmF0ZSBTRlNCICAgICAgICAgICAgICAgICAgICAgICAgc2ZzYlJlbW90ZTsgICAgCisgICAgcHJpdmF0ZSBTRlNCICAgICAgICAgICAgICAgICAgICAgICAgc2ZzYlJlbW90ZTsKICAgICBwcml2YXRlIFNGU0JMb2NhbEhvbWUgICAgICAgICAgICAgICBzZnNiTG9jYWxIb21lOwogICAgIHByaXZhdGUgU0ZTQkxvY2FsICAgICAgICAgICAgICAgICAgIHNmc2JMb2NhbDsKIApAQCAtNjAsOSArNjAsOSBAQAogICAgIHByaXZhdGUgVXNlclRyYW5zYWN0aW9uICAgICAgICAgICAgIHVzZXJUcmFuc2FjdGlvbjE7CiAgICAgcHJpdmF0ZSBVc2VyVHJhbnNhY3Rpb24gICAgICAgICAgICAgdXNlclRyYW5zYWN0aW9uMjsKIAotICAgIHByaXZhdGUgaW50CQkJCWFjdGl2YXRpb25Db3VudDsKLSAgICBwcml2YXRlIGludAkJCQlwYXNzaXZhdGlvbkNvdW50OwotICAgIHByaXZhdGUgT2JqZWN0CQkJbm9uU2VyaWFsaXphYmxlU3RhdGU7CisgICAgcHJpdmF0ZSBpbnQgICAgICAgICAgICAgICAgYWN0aXZhdGlvbkNvdW50OworICAgIHByaXZhdGUgaW50ICAgICAgICAgICAgICAgIHBhc3NpdmF0aW9uQ291bnQ7CisgICAgcHJpdmF0ZSBPYmplY3QgICAgICAgICAgICBub25TZXJpYWxpemFibGVTdGF0ZTsKIAogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZShTdHJpbmcgc2ZzYk5hbWUpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICgiSW4gU0ZTQi5lamJDcmVhdGUoKSBmb3IgbmFtZSAtPiAiICsgc2ZzYk5hbWUpOwpAQCAtNzUsMTAgKzc1LDEwIEBACiAKICAgICAgICAgICAgIHNmc2JIb21lID0gKFNGU0JIb21lKSBzZXNzaW9uQ3R4LmdldEVKQkhvbWUoKTsKICAgICAgICAgICAgIHNmc2JMb2NhbEhvbWUgPSAoU0ZTQkxvY2FsSG9tZSkgc2Vzc2lvbkN0eC5nZXRFSkJMb2NhbEhvbWUoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBob21lSGFuZGxlID0gZW50aXR5SG9tZS5nZXRIb21lSGFuZGxlKCk7CiAgICAgICAgICAgICBoYW5kbGUgPSBlbnRpdHlSZW1vdGUuZ2V0SGFuZGxlKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgdXNlclRyYW5zYWN0aW9uMSA9IHNlc3Npb25DdHguZ2V0VXNlclRyYW5zYWN0aW9uKCk7CiAgICAgICAgICAgICB1c2VyVHJhbnNhY3Rpb24yID0gKFVzZXJUcmFuc2FjdGlvbikgbmV3IEluaXRpYWxDb250ZXh0KCkuCiAgICAgICAgICAgICAgICAgbG9va3VwKCJqYXZhOmNvbXAvVXNlclRyYW5zYWN0aW9uIik7CkBAIC05OCwxNSArOTgsMTUgQEAKICAgICAgICAgICAgIHNmc2JSZW1vdGUgPSBzZnNiSG9tZS5jcmVhdGUoc2ZzYk5hbWUgKyAiIF9jaGlsZCIpOwogICAgICAgICAgICAgc2ZzYkxvY2FsID0gc2ZzYkxvY2FsSG9tZS5jcmVhdGUoc2ZzYk5hbWUgKyBMT0NBTF9DSElMRF9TVUZGSVgpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIEVKQkV4Y2VwdGlvbiBleCA9IG5ldyBFSkJFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwotCSAgICBleC5pbml0Q2F1c2UoZSk7CisgICAgICAgIEVKQkV4Y2VwdGlvbiBleCA9IG5ldyBFSkJFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworICAgICAgICBleC5pbml0Q2F1c2UoZSk7CiAgICAgICAgICAgICB0aHJvdyBleDsKICAgICAgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIGNoZWNrU0ZTQkNoaWxkKCkgewogICAgICAgICBTdHJpbmcgY2hpbGROYW1lID0gc2ZzYkxvY2FsLmdldE5hbWUoKTsKLSAgICAgICAgYm9vbGVhbiBzdGF0dXMgPSBjaGlsZE5hbWUuZXF1YWxzKHNmc2JOYW1lICsgTE9DQUxfQ0hJTERfU1VGRklYKTsgICAgICAgCisgICAgICAgIGJvb2xlYW4gc3RhdHVzID0gY2hpbGROYW1lLmVxdWFscyhzZnNiTmFtZSArIExPQ0FMX0NISUxEX1NVRkZJWCk7CiAgICAgICAgIHJldHVybiBzdGF0dXM7CiAgICAgfQogCkBAIC0yMDMsNyArMjAzLDcgQEAKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja1VzZXJUcmFuc2FjdGlvbigpIHsKICAgICAgICAgYm9vbGVhbiBzdGF0dXMgPQogICAgICAgICAgICAgKCh1c2VyVHJhbnNhY3Rpb24xICE9IG51bGwpICYmICh1c2VyVHJhbnNhY3Rpb24yICE9IG51bGwpKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGlmKCBzdGF0dXMgKSB7CiAgICAgICAgICAgICAgICAgdXNlclRyYW5zYWN0aW9uMS5iZWdpbigpOwpAQCAtMjM1LDcgKzIzNSw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAob2spIHsKICAgICAgICAgICAgICAgICBmaWVsZE5hbWUgPSAiamF2YToiOwotICAgICAgICAgICAgICAgIG9rID0gKCAoamF2YUN0eCAhPSBudWxsKSAmJiAKKyAgICAgICAgICAgICAgICBvayA9ICggKGphdmFDdHggIT0gbnVsbCkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgamF2YUN0eC5nZXROYW1lSW5OYW1lc3BhY2UoKS5lcXVhbHMoZmllbGROYW1lKSApOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG9rKSB7CkBAIC0yNDcsNyArMjQ3LDcgQEAKICAgICAgICAgICAgICAgICBmaWVsZE5hbWUgPSAiamF2YTpjb21wL2VudiI7CiAgICAgICAgICAgICAgICAgb2sgPSAoIChlbnZDdHggIT0gbnVsbCkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgZW52Q3R4LmdldE5hbWVJbk5hbWVzcGFjZSgpLmVxdWFscyhmaWVsZE5hbWUpICk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChvaykgewogICAgICAgICAgICAgICAgIGZpZWxkTmFtZSA9ICJqYXZhOmNvbXAvZW52L2VqYiI7CkBAIC0yNTYsNyArMjU2LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChvaykgewogICAgICAgICAgICAgICAgIGZpZWxkTmFtZSA9ICJlbnYtZW50cnkiOwotICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgU3RyaW5nIHZhbHVlMSA9IChTdHJpbmcpCiAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxDdHgubG9va3VwKCJqYXZhOmNvbXAvZW52L1RhZ1ZhbHVlIik7CiAgICAgICAgICAgICAgICAgU3RyaW5nIHZhbHVlMiA9IChTdHJpbmcpIGVudkN0eC5sb29rdXAoIlRhZ1ZhbHVlIik7CkBAIC0yNjgsOSArMjY4LDkgQEAKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgb2sgPSBmYWxzZTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICB0aGlzLm1lc3NhZ2UgPSAob2spID8gbnVsbCA6IChmaWVsZE5hbWUgKyAiIG5vdCByZXN0b3JlZCBwcm9wZXJseSIpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gb2s7CiAgICAgfQogCkBAIC0yNzksMjIgKzI3OSwyMiBAQAogICAgIH0KIAogICAgIHB1YmxpYyBpbnQgZ2V0QWN0aXZhdGlvbkNvdW50KCkgewotCXJldHVybiB0aGlzLmFjdGl2YXRpb25Db3VudDsKKyAgICByZXR1cm4gdGhpcy5hY3RpdmF0aW9uQ291bnQ7CiAgICAgfQogCiAgICAgcHVibGljIGludCBnZXRQYXNzaXZhdGlvbkNvdW50KCkgewotCXJldHVybiB0aGlzLnBhc3NpdmF0aW9uQ291bnQ7CisgICAgcmV0dXJuIHRoaXMucGFzc2l2YXRpb25Db3VudDsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBtYWtlU3RhdGVOb25TZXJpYWxpemFibGUoKSB7Ci0Jbm9uU2VyaWFsaXphYmxlU3RhdGUgPSBuZXcgT2JqZWN0KCk7CisgICAgbm9uU2VyaWFsaXphYmxlU3RhdGUgPSBuZXcgT2JqZWN0KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2xlZXBGb3JTZWNvbmRzKGludCBzZWMpIHsKLQl0cnkgewotCSAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKHNlYyAqIDEwMDApOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCX0KKyAgICB0cnkgeworICAgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKHNlYyAqIDEwMDApOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB1bnVzZWRNZXRob2QoKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvZWpiL1NGU0JIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvZWpiL1NGU0JIb21lLmphdmEKaW5kZXggZmEzNDYzOC4uYTQwZTY4ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2VqYi9TRlNCSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9lamIvU0ZTQkhvbWUuamF2YQpAQCAtMjMsNiArMjMsNiBAQAogcHVibGljIGludGVyZmFjZSBTRlNCSG9tZQogICAgIGV4dGVuZHMgRUpCSG9tZQogewotCXB1YmxpYyBTRlNCIGNyZWF0ZShTdHJpbmcgc2ZzYk5hbWUpCisgICAgcHVibGljIFNGU0IgY3JlYXRlKFN0cmluZyBzZnNiTmFtZSkKICAgICAgICAgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2VqYi9TRlNCTG9jYWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9lamIvU0ZTQkxvY2FsLmphdmEKaW5kZXggNzZjZTg4MS4uOGRlZmFlNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2VqYi9TRlNCTG9jYWwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvZWpiL1NGU0JMb2NhbC5qYXZhCkBAIC0yMSw1ICsyMSw1IEBACiBwdWJsaWMgaW50ZXJmYWNlIFNGU0JMb2NhbAogICAgIGV4dGVuZHMgRUpCTG9jYWxPYmplY3QKIHsKLSAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKTsJCisgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvZWpiL1NGU0JMb2NhbEhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9lamIvU0ZTQkxvY2FsSG9tZS5qYXZhCmluZGV4IDA1MDJhMTIuLjQ3N2M4MzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9lamIvU0ZTQkxvY2FsSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9lamIvU0ZTQkxvY2FsSG9tZS5qYXZhCkBAIC0yMiw2ICsyMiw2IEBACiBwdWJsaWMgaW50ZXJmYWNlIFNGU0JMb2NhbEhvbWUKICAgICBleHRlbmRzIEVKQkxvY2FsSG9tZQogewotCXB1YmxpYyBTRlNCTG9jYWwgY3JlYXRlKFN0cmluZyBzZnNiTmFtZSkKKyAgICBwdWJsaWMgU0ZTQkxvY2FsIGNyZWF0ZShTdHJpbmcgc2ZzYk5hbWUpCiAgICAgICAgICAgICB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2VqYi9TaW1wbGVFbnRpdHlCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvZWpiL1NpbXBsZUVudGl0eUJlYW4uamF2YQppbmRleCA0ZTU2MTJjLi44NDEzNzhiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvZWpiL1NpbXBsZUVudGl0eUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvZWpiL1NpbXBsZUVudGl0eUJlYW4uamF2YQpAQCAtNTYsOCArNTYsOCBAQAogICAgICAgICBDb25uZWN0aW9uIGMgPSBudWxsOwogICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7CiAgICAgICAgIHRyeSB7Ci0JICAgICAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAJICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAorICAgICAgICAgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgICAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKICAgICAgICAgICAgICAgICAiSU5TRVJUIElOVE8gU2ltcGxlRW50aXR5IChrZXlpZCwgbmFtZSkgVkFMVUVTICg/LD8pIik7CiAgICAgICAgICAgICBwcy5zZXRTdHJpbmcoMSwga2V5KTsKICAgICAgICAgICAgIHBzLnNldFN0cmluZygyLCBuYW1lKTsKQEAgLTY4LDcgKzY4LDcgQEAKICAgICAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgICAgIH0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAgewogICAgICAgICAgICAgdGhyb3cgbmV3IENyZWF0ZUV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7Ci0gICAgICAgIH0gZmluYWxseSB7IAorICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBpZiAocHMgIT0gbnVsbCkKICAgICAgICAgICAgICAgICAgICAgcHMuY2xvc2UoKTsKQEAgLTk0LDEwICs5NCwxMCBAQAogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uCiAgICAgewogICAgICAgICBDb25uZWN0aW9uIGMgPSBudWxsOwotICAgICAJUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOwotCSAgICB0cnkgewotCSAgICAgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgCSAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKKyAgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHBzID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgICAgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCiAgICAgICAgICAgICAgICAgIlNFTEVDVCBrZXlpZCBmcm9tIFNpbXBsZUVudGl0eSB3aGVyZSBrZXlpZCA9ID8iKTsKICAgICAgICAgICAgIHBzLnNldFN0cmluZygxLCBrZXkpOwogICAgICAgICAgICAgUmVzdWx0U2V0IHJzID0gcHMuZXhlY3V0ZVF1ZXJ5KCk7CkBAIC0xMDcsNyArMTA3LDcgQEAKICAgICAgICAgICAgIHJldHVybiBrZXk7CiAgICAgICAgIH0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAgewogICAgICAgICAgICAgdGhyb3cgbmV3IEZpbmRlckV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7Ci0gICAgICAgIH0gZmluYWxseSB7IAorICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBpZiAocHMgIT0gbnVsbCkKICAgICAgICAgICAgICAgICAgICAgcHMuY2xvc2UoKTsKQEAgLTEyNSw2NSArMTI1LDY1IEBACiAgICAgICAgICAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKICAgICAgICAgICAgICAgICAiU0VMRUNUIG5hbWUgZnJvbSBTaW1wbGVFbnRpdHkgd2hlcmUga2V5aWQgPSA/Iik7CiAgICAgICAgICAgICBwcy5zZXRTdHJpbmcoMSwga2V5KTsKLQkgICAgUmVzdWx0U2V0IHJzID0gcHMuZXhlY3V0ZVF1ZXJ5KCk7Ci0JICAgIGlmICghcnMubmV4dCgpKQotCSAgICAgICB0aHJvdyBuZXcgTm9TdWNoRW50aXR5RXhjZXB0aW9uKCJObyBjdXN0IGZvciAiICsga2V5KTsKLQkgICAgdGhpcy5uYW1lID0gcnMuZ2V0U3RyaW5nKDEpOwotCX0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAgewotCSAgICB0aHJvdyBuZXcgTm9TdWNoRW50aXR5RXhjZXB0aW9uKCJTUUwgZXhjZXB0aW9uICIgKyBlKTsKLQl9IGZpbmFsbHkgeyAKLQkgICAgdHJ5IHsKLQkJaWYgKHBzICE9IG51bGwpCi0JCSAgICBwcy5jbG9zZSgpOwotCQlpZiAoYyAhPSBudWxsKQotCQkgICAgYy5jbG9zZSgpOwotCSAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KLQl9CisgICAgICAgIFJlc3VsdFNldCBycyA9IHBzLmV4ZWN1dGVRdWVyeSgpOworICAgICAgICBpZiAoIXJzLm5leHQoKSkKKyAgICAgICAgICAgdGhyb3cgbmV3IE5vU3VjaEVudGl0eUV4Y2VwdGlvbigiTm8gY3VzdCBmb3IgIiArIGtleSk7CisgICAgICAgIHRoaXMubmFtZSA9IHJzLmdldFN0cmluZygxKTsKKyAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKKyAgICAgICAgdGhyb3cgbmV3IE5vU3VjaEVudGl0eUV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgaWYgKHBzICE9IG51bGwpCisgICAgICAgICAgICBwcy5jbG9zZSgpOworICAgICAgICBpZiAoYyAhPSBudWxsKQorICAgICAgICAgICAgYy5jbG9zZSgpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiU3RvcmUoKSB7Ci0JQ29ubmVjdGlvbiBjID0gbnVsbDsKLSAgICAgCVByZXBhcmVkU3RhdGVtZW50IHBzID0gbnVsbDsKLQl0cnkgewotCSAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAJICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAotCQkiVVBEQVRFIFNpbXBsZUVudGl0eSBTRVQgbmFtZSA9ID8gV0hFUkUga2V5aWQgPSA/Iik7Ci0JICAgIHBzLnNldFN0cmluZygxLCBuYW1lKTsKLQkgICAgcHMuc2V0U3RyaW5nKDIsIGtleSk7Ci0JICAgIGlmIChwcy5leGVjdXRlVXBkYXRlKCkgIT0gMSkKLQkJdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiRGlkbnQgc3RvcmUgZWpiIik7Ci0JfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOwotCX0gZmluYWxseSB7IAotCSAgICB0cnkgewotCQlpZiAocHMgIT0gbnVsbCkKLQkJICAgIHBzLmNsb3NlKCk7Ci0JCWlmIChjICE9IG51bGwpCi0JCSAgICBjLmNsb3NlKCk7Ci0JICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQotCX0KKyAgICBDb25uZWN0aW9uIGMgPSBudWxsOworICAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgICAgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCisgICAgICAgICJVUERBVEUgU2ltcGxlRW50aXR5IFNFVCBuYW1lID0gPyBXSEVSRSBrZXlpZCA9ID8iKTsKKyAgICAgICAgcHMuc2V0U3RyaW5nKDEsIG5hbWUpOworICAgICAgICBwcy5zZXRTdHJpbmcoMiwga2V5KTsKKyAgICAgICAgaWYgKHBzLmV4ZWN1dGVVcGRhdGUoKSAhPSAxKQorICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJEaWRudCBzdG9yZSBlamIiKTsKKyAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgaWYgKHBzICE9IG51bGwpCisgICAgICAgICAgICBwcy5jbG9zZSgpOworICAgICAgICBpZiAoYyAhPSBudWxsKQorICAgICAgICAgICAgYy5jbG9zZSgpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgdGhyb3dzIFJlbW92ZUV4Y2VwdGlvbiB7Ci0JQ29ubmVjdGlvbiBjID0gbnVsbDsKLSAgICAgCVByZXBhcmVkU3RhdGVtZW50IHBzID0gbnVsbDsKLQl0cnkgewotCSAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAJICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAotCQkiREVMRVRFIEZST00gU2ltcGxlRW50aXR5IFdIRVJFIGtleWlkID0gPyIpOwotCSAgICBwcy5zZXRTdHJpbmcoMSwgbmFtZSk7Ci0JICAgIGlmIChwcy5leGVjdXRlVXBkYXRlKCkgIT0gMSkKLQkJdGhyb3cgbmV3IFJlbW92ZUV4Y2VwdGlvbigiRGlkbnQgcmVtb3ZlIGVqYiIpOwotCX0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAgewotCSAgICB0aHJvdyBuZXcgUmVtb3ZlRXhjZXB0aW9uKCJTUUwgZXhjZXB0aW9uICIgKyBlKTsKLQl9IGZpbmFsbHkgeyAKLQkgICAgdHJ5IHsKLQkJaWYgKHBzICE9IG51bGwpCi0JCSAgICBwcy5jbG9zZSgpOwotCQlpZiAoYyAhPSBudWxsKQotCQkgICAgYy5jbG9zZSgpOwotCSAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KLQl9CisgICAgQ29ubmVjdGlvbiBjID0gbnVsbDsKKyAgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHBzID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICAgICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAorICAgICAgICAiREVMRVRFIEZST00gU2ltcGxlRW50aXR5IFdIRVJFIGtleWlkID0gPyIpOworICAgICAgICBwcy5zZXRTdHJpbmcoMSwgbmFtZSk7CisgICAgICAgIGlmIChwcy5leGVjdXRlVXBkYXRlKCkgIT0gMSkKKyAgICAgICAgdGhyb3cgbmV3IFJlbW92ZUV4Y2VwdGlvbigiRGlkbnQgcmVtb3ZlIGVqYiIpOworICAgIH0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAgeworICAgICAgICB0aHJvdyBuZXcgUmVtb3ZlRXhjZXB0aW9uKCJTUUwgZXhjZXB0aW9uICIgKyBlKTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICB0cnkgeworICAgICAgICBpZiAocHMgIT0gbnVsbCkKKyAgICAgICAgICAgIHBzLmNsb3NlKCk7CisgICAgICAgIGlmIChjICE9IG51bGwpCisgICAgICAgICAgICBjLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQorICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9saXN0ZW5lci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2xpc3RlbmVyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZDcwODcxOS4uNDEzODdhYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2xpc3RlbmVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2xpc3RlbmVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIxICsxNSwyMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLXNmc2ItbGlmZWN5Y2xlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvbGlzdGVuZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2xpc3RlbmVyL2J1aWxkLnhtbAppbmRleCA5YTE0YzVhLi43NDZiYTk1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvbGlzdGVuZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9saXN0ZW5lci9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ4LDEzICs0OCwxMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudCouY2xhc3MsICoqLypTRlNCKi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KQEAgLTY5LDcgKzY5LDcgQEAKICAgICAgICAgPC9hbnRjYWxsPgogICAgIC0tPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPCEtLQogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KQEAgLTgxLDE3ICs4MSwxNyBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgogICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtZWpiLXNxbC1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvbGlzdGVuZXIvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2xpc3RlbmVyL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA0ZjE4MmFlLi45ZWU3NzA2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvbGlzdGVuZXIvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9saXN0ZW5lci9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTMzLDggKzMzLDggQEAKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBrVGVzdE5vdFJ1biAgICA9ICJURVNUIE5PVCBSVU4iOwogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGtUZXN0UGFzc2VkICAgID0gIlRFU1QgUEFTU0VEIjsKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBrVGVzdEZhaWxlZCAgICA9ICJURVNUIEZBSUxFRCI7Ci0gICAgCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKworICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50ICAgIE1BWF9TRlNCUyA9IDI0OwpAQCAtNTIsMTUgKzUyLDE1IEBACiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbbGZUcmFkaXRpb25hbF0gRE9ORSBkb1Rlc3QoKS4uLiIpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgicGFzc2l2YXRlYWN0aXZhdGUiKTsKLSAgICB9ICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICBpbml0U0ZTQkxpc3QoKTsgICAgIC8vY3JlYXRlIFNGU0JzIAorICAgICAgICBpbml0U0ZTQkxpc3QoKTsgICAgIC8vY3JlYXRlIFNGU0JzCiAgICAgICAgIGFjY2Vzc1NGU0IoKTsgICAgICAgLy9hY2Nlc3MgdGhlIFNGQlMKLQlyZW1vdmVUZXN0KCk7CisgICAgcmVtb3ZlVGVzdCgpOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbml0U0ZTQkxpc3QoKSB7CkBAIC05MCw0NyArOTAsNDcgQEAKIAogICAgIHB1YmxpYyB2b2lkIGFjY2Vzc1NGU0IoKSB7CiAgICAgICAgIHRyeSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2FpdGluZyBmb3IgMTAgc2Vjb25kcyBiZWZvcmUgYWNjZXNzaW5nLi4uIik7Ci0JICAgIGZvciAoaW50IGk9MDsgaTwxMDsgaSsrKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiIiArICgxMCAtIGkpICsgIiBzZWNvbmRzIGxlZnQuLi4iKTsKLQkJdHJ5IHsKLQkJICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoMSoxMDAwKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCX0KLQkgICAgfQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldhaXRpbmcgZm9yIDEwIHNlY29uZHMgYmVmb3JlIGFjY2Vzc2luZy4uLiIpOworICAgICAgICBmb3IgKGludCBpPTA7IGk8MTA7IGkrKykgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIgKyAoMTAgLSBpKSArICIgc2Vjb25kcyBsZWZ0Li4uIik7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDEqMTAwMCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICB9CisgICAgICAgIH0KIAogICAgICAgICAgICAgYm9vbGVhbiBwYXNzZWQgPSB0cnVlOwogICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgTUFYX1NGU0JTOyBpKyspIHsKICAgICAgICAgICAgICAgICB0cnkgewotCQlTRlNCIHNmc2IgPSAoU0ZTQikgc2ZzYkxpc3QuZ2V0KGkpOworICAgICAgICBTRlNCIHNmc2IgPSAoU0ZTQikgc2ZzYkxpc3QuZ2V0KGkpOwogICAgICAgICAgICAgICAgIFN0cmluZyBzZnNiTmFtZSA9IF9zZnNiUHJlZml4K2k7Ci0JCVN0cmluZyByZXRyaWV2ZWROYW1lID0gc2ZzYi5nZXROYW1lKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgYm9vbGVhbiBvayA9IHNmc2IuaXNPSyhzZnNiTmFtZSk7Ci0JCWludCBhY3RDb3VudCA9IHNmc2IuZ2V0QWN0aXZhdGlvbkNvdW50KCk7Ci0JCWludCBwYXNDb3VudCA9IHNmc2IuZ2V0UGFzc2l2YXRpb25Db3VudCgpOworICAgICAgICBTdHJpbmcgcmV0cmlldmVkTmFtZSA9IHNmc2IuZ2V0TmFtZSgpOwogCi0JCWJvb2xlYW4gYWN0aXZhdGlvblRlc3QgPSAoYWN0Q291bnQgIT0gMCk7Ci0JCWJvb2xlYW4gcGFzc2l2YXRpb25UZXN0ID0gKHBhc0NvdW50ICE9IDApOworICAgICAgICAgICAgICAgIGJvb2xlYW4gb2sgPSBzZnNiLmlzT0soc2ZzYk5hbWUpOworICAgICAgICBpbnQgYWN0Q291bnQgPSBzZnNiLmdldEFjdGl2YXRpb25Db3VudCgpOworICAgICAgICBpbnQgcGFzQ291bnQgPSBzZnNiLmdldFBhc3NpdmF0aW9uQ291bnQoKTsKKworICAgICAgICBib29sZWFuIGFjdGl2YXRpb25UZXN0ID0gKGFjdENvdW50ICE9IDApOworICAgICAgICBib29sZWFuIHBhc3NpdmF0aW9uVGVzdCA9IChwYXNDb3VudCAhPSAwKTsKIAogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmVhblsiICsgaSArICIvIiArIE1BWF9TRlNCUyArICJdIG5hbWU6ICIgKyBzZnNiTmFtZQotCQkgICAgKyAiOyByZXRyaWV2ZWROYW1lOiAiICsgcmV0cmlldmVkTmFtZQotCQkgICAgKyAiOyBvazogIiArIG9rCi0JCSAgICArICI7ICIgKyBhY3RpdmF0aW9uVGVzdCArICIgKCIgKyBhY3RDb3VudCArICIpIgotCQkgICAgKyAiOyAiICsgcGFzc2l2YXRpb25UZXN0ICsgIiAoIiArIHBhc0NvdW50ICsgIikiCi0JCSk7CisgICAgICAgICAgICArICI7IHJldHJpZXZlZE5hbWU6ICIgKyByZXRyaWV2ZWROYW1lCisgICAgICAgICAgICArICI7IG9rOiAiICsgb2sKKyAgICAgICAgICAgICsgIjsgIiArIGFjdGl2YXRpb25UZXN0ICsgIiAoIiArIGFjdENvdW50ICsgIikiCisgICAgICAgICAgICArICI7ICIgKyBwYXNzaXZhdGlvblRlc3QgKyAiICgiICsgcGFzQ291bnQgKyAiKSIKKyAgICAgICAgKTsKIAogICAgICAgICAgICAgICAgIHBhc3NlZCA9IHBhc3NlZCAmIHNmc2JOYW1lLmVxdWFscyhyZXRyaWV2ZWROYW1lKQogICAgICAgICAgICAgICAgICAgICAmJiBvawotCQkgICAgJiYgYWN0aXZhdGlvblRlc3QgJiYgcGFzc2l2YXRpb25UZXN0OworICAgICAgICAgICAgJiYgYWN0aXZhdGlvblRlc3QgJiYgcGFzc2l2YXRpb25UZXN0OwogCiAgICAgICAgICAgICAgICAgaWYgKCEgcGFzc2VkKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotCQlzZnNiLnNsZWVwRm9yU2Vjb25kcygxKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJlYW5bIiArIGkgKyAiXSBHb3QgZXhjZXB0aW9uOiAiICsgZXgpOwotCQl9CisgICAgICAgIHNmc2Iuc2xlZXBGb3JTZWNvbmRzKDEpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmVhblsiICsgaSArICJdIEdvdCBleGNlcHRpb246ICIgKyBleCk7CisgICAgICAgIH0KICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHBhc3NlZCkgewpAQCAtMTQ0LDQ0ICsxNDQsNDQgQEAKICAgICAgICAgICAgICAgICBTdHJpbmcgc2ZzYk5hbWUgPSBfc2ZzYlByZWZpeCtpOwogCiAgICAgICAgICAgICAgICAgc2ZzYi5tYWtlU3RhdGVOb25TZXJpYWxpemFibGUoKTsKLQkgICAgfQorICAgICAgICB9CiAKLQkgICAgLy9DcmVhdGluZyB0aGVzZSBtYW55IFNGU0JzIHNob3VsZCBmb3JjZSBwYXNzaXZhdGlvbiBvZiB0aGUgYWJvdmUKLQkgICAgLy8Jbm9uLXNlcmlhbGl6YWJsZSBiZWFucworICAgICAgICAvL0NyZWF0aW5nIHRoZXNlIG1hbnkgU0ZTQnMgc2hvdWxkIGZvcmNlIHBhc3NpdmF0aW9uIG9mIHRoZSBhYm92ZQorICAgICAgICAvLyAgICBub24tc2VyaWFsaXphYmxlIGJlYW5zCiAgICAgICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBNQVhfU0ZTQlM7IGkrKykgewotCQlob21lLmNyZWF0ZShfc2ZzYlByZWZpeCArIChpKzEpKjEwMDApOwotCSAgICB9CisgICAgICAgIGhvbWUuY3JlYXRlKF9zZnNiUHJlZml4ICsgKGkrMSkqMTAwMCk7CisgICAgICAgIH0KIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldhaXRpbmcgZm9yIDEwIHNlY29uZHMgZm9yIHBhc3NpdmF0aW9uIHRvIGNvbXBsZXRlLi4uIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2FpdGluZyBmb3IgMTAgc2Vjb25kcyBmb3IgcGFzc2l2YXRpb24gdG8gY29tcGxldGUuLi4iKTsKIAotCSAgICBmb3IgKGludCBpPTA7IGk8MTA7IGkrKykgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIiIgKyAoMTAgLSBpKSArICIgc2Vjb25kcyBsZWZ0Li4uIik7Ci0JCXRyeSB7Ci0JCSAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDEqMTAwMCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQl9Ci0JICAgIH0KKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPDEwOyBpKyspIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIiICsgKDEwIC0gaSkgKyAiIHNlY29uZHMgbGVmdC4uLiIpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCgxKjEwMDApOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgfQorICAgICAgICB9CiAKICAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IE1BWF9TRlNCUzsgaSsrKSB7CiAgICAgICAgICAgICAgICAgU0ZTQiBzZnNiID0gKFNGU0IpIHNmc2JMaXN0LmdldChpKTsKICAgICAgICAgICAgICAgICBTdHJpbmcgc2ZzYk5hbWUgPSBfc2ZzYlByZWZpeCtpOwogCiAgICAgICAgICAgICAgICAgdHJ5IHsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnQoIkV4cGVjdGluZyBleGNlcHRpb24gZm9yOiAiICsgc2ZzYk5hbWUpOwotCQkgICAgU3RyaW5nIG5tID0gc2ZzYi5nZXROYW1lKCk7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVSUk9SLiBEaWRuJ3QgZ2V0IGV4cGVjdGVkIGV4Y2VwdGlvbi4gIgotCQkJICAgICsgIkdvdDogIiArIG5tKTsKLQkJICAgIHBhc3NlZCA9IGZhbHNlOwotCQkgICAgYnJlYWs7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJbKipHb3QgRXhjZXB0aW9uKipdIik7Ci0JCX0KLQkgICAgfQotCSAgICBpZiAocGFzc2VkKSB7Ci0JCXN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgbm9uLXNlcmlhbGl6YWJsZS1zdGF0ZSIsIHN0YXQuUEFTUyk7Ci0JICAgIH0gZWxzZSB7Ci0JCXN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgbm9uLXNlcmlhbGl6YWJsZS1zdGF0ZSIsIHN0YXQuRkFJTCk7Ci0JICAgIH0KKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIkV4cGVjdGluZyBleGNlcHRpb24gZm9yOiAiICsgc2ZzYk5hbWUpOworICAgICAgICAgICAgU3RyaW5nIG5tID0gc2ZzYi5nZXROYW1lKCk7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVSUk9SLiBEaWRuJ3QgZ2V0IGV4cGVjdGVkIGV4Y2VwdGlvbi4gIgorICAgICAgICAgICAgICAgICsgIkdvdDogIiArIG5tKTsKKyAgICAgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbKipHb3QgRXhjZXB0aW9uKipdIik7CisgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAocGFzc2VkKSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgbm9uLXNlcmlhbGl6YWJsZS1zdGF0ZSIsIHN0YXQuUEFTUyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgbm9uLXNlcmlhbGl6YWJsZS1zdGF0ZSIsIHN0YXQuRkFJTCk7CisgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IGFjY2Vzc1NGU0IiLCBzdGF0LkZBSUwpOwogCkBAIC0xOTAsMjggKzE5MCwyOCBAQAogCiAKICAgICBwdWJsaWMgdm9pZCByZW1vdmVUZXN0KCkgewotCVNGU0Igc2ZzYiA9IG51bGw7Ci0JdHJ5IHsKLQkgICAgU3RyaW5nIG15TmFtZSA9ICJfMl8iICsgX3Nmc2JQcmVmaXggKyAiXzJfIjsKLQkgICAgc2ZzYiA9IChTRlNCKSBob21lLmNyZWF0ZShteU5hbWUpOwotCSAgICBTdHJpbmcgcmV0cmlldmVkTmFtZSA9IHNmc2IuZ2V0TmFtZSgpOwotCSAgICBib29sZWFuIG5hbWVPSyA9IG15TmFtZS5lcXVhbHNJZ25vcmVDYXNlKHJldHJpZXZlZE5hbWUpOwotCSAgICBib29sZWFuIGdvdEV4Y2VwdGlvbiA9IGZhbHNlOwotCSAgICBzZnNiLnJlbW92ZSgpOwotCSAgICBFeGNlcHRpb24gZXhjZXAgPSBudWxsOwotCSAgICB0cnkgewotCQlzZnNiLmdldE5hbWUoKTsKLQkJZ290RXhjZXB0aW9uID0gZmFsc2U7CSAgICAvL0V4cGVjdGluZyBhbiBleGNlcHRpb24KLQkgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCWdvdEV4Y2VwdGlvbiA9IHRydWU7Ci0JCWV4Y2VwID0gZXg7Ci0JICAgIH0KKyAgICBTRlNCIHNmc2IgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIFN0cmluZyBteU5hbWUgPSAiXzJfIiArIF9zZnNiUHJlZml4ICsgIl8yXyI7CisgICAgICAgIHNmc2IgPSAoU0ZTQikgaG9tZS5jcmVhdGUobXlOYW1lKTsKKyAgICAgICAgU3RyaW5nIHJldHJpZXZlZE5hbWUgPSBzZnNiLmdldE5hbWUoKTsKKyAgICAgICAgYm9vbGVhbiBuYW1lT0sgPSBteU5hbWUuZXF1YWxzSWdub3JlQ2FzZShyZXRyaWV2ZWROYW1lKTsKKyAgICAgICAgYm9vbGVhbiBnb3RFeGNlcHRpb24gPSBmYWxzZTsKKyAgICAgICAgc2ZzYi5yZW1vdmUoKTsKKyAgICAgICAgRXhjZXB0aW9uIGV4Y2VwID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgc2ZzYi5nZXROYW1lKCk7CisgICAgICAgIGdvdEV4Y2VwdGlvbiA9IGZhbHNlOyAgICAgICAgLy9FeHBlY3RpbmcgYW4gZXhjZXB0aW9uCisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICBnb3RFeGNlcHRpb24gPSB0cnVlOworICAgICAgICBleGNlcCA9IGV4OworICAgICAgICB9CiAKLQkgICAgU3RyaW5nIHJlc3VsdFN0ciA9ICIoIiArIG5hbWVPSyArICIgQEBAICIgKyBnb3RFeGNlcHRpb24gKyAiKSI7CisgICAgICAgIFN0cmluZyByZXN1bHRTdHIgPSAiKCIgKyBuYW1lT0sgKyAiIEBAQCAiICsgZ290RXhjZXB0aW9uICsgIikiOwogICAgICAgICAgICAgaWYgKG5hbWVPSyAmJiBnb3RFeGNlcHRpb24pIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IHJlbW92ZVRlc3QgIiArIHJlc3VsdFN0ciwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0JCXN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgcmVtb3ZlVGVzdCAiICsgcmVzdWx0U3RyLCBzdGF0LkZBSUwpOworICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IHJlbW92ZVRlc3QgIiArIHJlc3VsdFN0ciwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9saXN0ZW5lci9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9saXN0ZW5lci9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAppbmRleCA5ZWNmMDAxLi4zZjZlMWE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvbGlzdGVuZXIvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2xpc3RlbmVyL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCkBAIC0yNSw3ICsyNSw3IEBACiAgICAgICAgIDxqbmRpLW5hbWU+ZWpiL2VqYl9zZnNiX2xpZmVjeWNsZV9TRlNCPC9qbmRpLW5hbWU+CiAgICAgICAgIDxiZWFuLWNhY2hlPgogICAgICAgICAgICAgPG1heC1jYWNoZS1zaXplPjg8L21heC1jYWNoZS1zaXplPgotCSAgICA8cmVzaXplLXF1YW50aXR5PjQ8L3Jlc2l6ZS1xdWFudGl0eT4KKyAgICAgICAgPHJlc2l6ZS1xdWFudGl0eT40PC9yZXNpemUtcXVhbnRpdHk+CiAgICAgICAgIDwvYmVhbi1jYWNoZT4KICAgICAgPC9lamI+CiAgICA8L2VudGVycHJpc2UtYmVhbnM+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvbGlzdGVuZXIvZWpiL1NGU0IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9saXN0ZW5lci9lamIvU0ZTQi5qYXZhCmluZGV4IDlhMTE0ODguLjJiZjlmZmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9saXN0ZW5lci9lamIvU0ZTQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9saXN0ZW5lci9lamIvU0ZTQi5qYXZhCkBAIC0yNCwyMyArMjQsMjMgQEAKIHsKIAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0JdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIGludCBnZXRBY3RpdmF0aW9uQ291bnQoKQotCXRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBpbnQgZ2V0UGFzc2l2YXRpb25Db3VudCgpCi0JdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIHZvaWQgbWFrZVN0YXRlTm9uU2VyaWFsaXphYmxlKCkKLQl0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgdm9pZCBzbGVlcEZvclNlY29uZHMoaW50IHNlYykKLQl0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgYm9vbGVhbiBpc09LKFN0cmluZyBuYW1lKQotCXRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyB2b2lkIHVudXNlZE1ldGhvZCgpCi0JdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2xpc3RlbmVyL2VqYi9TRlNCRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvbGlzdGVuZXIvZWpiL1NGU0JFSkIuamF2YQppbmRleCA4MzhhNWFmLi44ZTg2MDMzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvbGlzdGVuZXIvZWpiL1NGU0JFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvbGlzdGVuZXIvZWpiL1NGU0JFSkIuamF2YQpAQCAtMzIsNyArMzIsNyBAQAogQENhbGxiYWNrTGlzdGVuZXIoImNvbS5zdW4uczFhc2Rldi5lamIuZWpiMzAuc2ZzYi5saWZlY3ljbGUuZWpiLkxpZmVjeWNsZUxpc3RlbmVyIikKIEBTdGF0ZWZ1bAogcHVibGljIGNsYXNzIFNGU0JFSkIKLSAgICBpbXBsZW1lbnRzIFNlc3Npb25CZWFuIAorICAgIGltcGxlbWVudHMgU2Vzc2lvbkJlYW4KIHsKIAogICAgIHByaXZhdGUgQ29udGV4dCBlbnZDdHg7CkBAIC00OCw3ICs0OCw3IEBACiAgICAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICAgICAgICAgICAgc2ZzYk5hbWU7CiAgICAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICAgICAgICAgICAgICAgZW52RW50cnlUYWdWYWx1ZTsKICAgICBwcml2YXRlIFNGU0JIb21lICAgICAgICAgICAgICAgICAgICBzZnNiSG9tZTsKLSAgICBwcml2YXRlIFNGU0IgICAgICAgICAgICAgICAgICAgICAgICBzZnNiUmVtb3RlOyAgICAKKyAgICBwcml2YXRlIFNGU0IgICAgICAgICAgICAgICAgICAgICAgICBzZnNiUmVtb3RlOwogICAgIHByaXZhdGUgU0ZTQkxvY2FsSG9tZSAgICAgICAgICAgICAgIHNmc2JMb2NhbEhvbWU7CiAgICAgcHJpdmF0ZSBTRlNCTG9jYWwgICAgICAgICAgICAgICAgICAgc2ZzYkxvY2FsOwogCkBAIC01Nyw5ICs1Nyw5IEBACiAgICAgcHJpdmF0ZSBVc2VyVHJhbnNhY3Rpb24gICAgICAgICAgICAgdXNlclRyYW5zYWN0aW9uMTsKICAgICBwcml2YXRlIFVzZXJUcmFuc2FjdGlvbiAgICAgICAgICAgICB1c2VyVHJhbnNhY3Rpb24yOwogCi0gICAgcHJpdmF0ZSBpbnQJCQkJYWN0aXZhdGlvbkNvdW50OwotICAgIHByaXZhdGUgaW50CQkJCXBhc3NpdmF0aW9uQ291bnQ7Ci0gICAgcHJpdmF0ZSBPYmplY3QJCQlub25TZXJpYWxpemFibGVTdGF0ZTsKKyAgICBwcml2YXRlIGludCAgICAgICAgICAgICAgICBhY3RpdmF0aW9uQ291bnQ7CisgICAgcHJpdmF0ZSBpbnQgICAgICAgICAgICAgICAgcGFzc2l2YXRpb25Db3VudDsKKyAgICBwcml2YXRlIE9iamVjdCAgICAgICAgICAgIG5vblNlcmlhbGl6YWJsZVN0YXRlOwogCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKFN0cmluZyBzZnNiTmFtZSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCJJbiBTRlNCLmVqYkNyZWF0ZSgpIGZvciBuYW1lIC0+ICIgKyBzZnNiTmFtZSk7CkBAIC02OCwxMyArNjgsMTMgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHNmc2JIb21lID0gKFNGU0JIb21lKSBzZXNzaW9uQ3R4LmdldEVKQkhvbWUoKTsKICAgICAgICAgICAgIHNmc2JMb2NhbEhvbWUgPSAoU0ZTQkxvY2FsSG9tZSkgc2Vzc2lvbkN0eC5nZXRFSkJMb2NhbEhvbWUoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBob21lSGFuZGxlID0gc2ZzYkhvbWUuZ2V0SG9tZUhhbmRsZSgpOwogICAgICAgICAgICAgaGFuZGxlID0gc2Vzc2lvbkN0eC5nZXRFSkJPYmplY3QoKS5nZXRIYW5kbGUoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICB1c2VyVHJhbnNhY3Rpb24xID0gc2Vzc2lvbkN0eC5nZXRVc2VyVHJhbnNhY3Rpb24oKTsKICAgICAgICAgICAgIHVzZXJUcmFuc2FjdGlvbjIgPSAoVXNlclRyYW5zYWN0aW9uKSBuZXcgSW5pdGlhbENvbnRleHQoKS4KLQkgICAgbG9va3VwKCJqYXZhOmNvbXAvVXNlclRyYW5zYWN0aW9uIik7CisgICAgICAgIGxvb2t1cCgiamF2YTpjb21wL1VzZXJUcmFuc2FjdGlvbiIpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgLy9UT0RPCkBAIC0xMzMsNyArMTMzLDcgQEAKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja1VzZXJUcmFuc2FjdGlvbigpIHsKICAgICAgICAgYm9vbGVhbiBzdGF0dXMgPQogICAgICAgICAgICAgKCh1c2VyVHJhbnNhY3Rpb24xICE9IG51bGwpICYmICh1c2VyVHJhbnNhY3Rpb24yICE9IG51bGwpKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGlmKCBzdGF0dXMgKSB7CiAgICAgICAgICAgICAgICAgdXNlclRyYW5zYWN0aW9uMS5iZWdpbigpOwpAQCAtMTg0LDkgKzE4NCw5IEBACiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIG9rID0gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgdGhpcy5tZXNzYWdlID0gKG9rKSA/IG51bGwgOiAoZmllbGROYW1lICsgIiBub3QgcmVzdG9yZWQgcHJvcGVybHkiKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIG9rOwogICAgIH0KIApAQCAtMTk1LDIyICsxOTUsMjIgQEAKICAgICB9CiAKICAgICBwdWJsaWMgaW50IGdldEFjdGl2YXRpb25Db3VudCgpIHsKLQlyZXR1cm4gdGhpcy5hY3RpdmF0aW9uQ291bnQ7CisgICAgcmV0dXJuIHRoaXMuYWN0aXZhdGlvbkNvdW50OwogICAgIH0KIAogICAgIHB1YmxpYyBpbnQgZ2V0UGFzc2l2YXRpb25Db3VudCgpIHsKLQlyZXR1cm4gdGhpcy5wYXNzaXZhdGlvbkNvdW50OworICAgIHJldHVybiB0aGlzLnBhc3NpdmF0aW9uQ291bnQ7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgbWFrZVN0YXRlTm9uU2VyaWFsaXphYmxlKCkgewotCW5vblNlcmlhbGl6YWJsZVN0YXRlID0gbmV3IE9iamVjdCgpOworICAgIG5vblNlcmlhbGl6YWJsZVN0YXRlID0gbmV3IE9iamVjdCgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNsZWVwRm9yU2Vjb25kcyhpbnQgc2VjKSB7Ci0JdHJ5IHsKLQkgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcChzZWMgKiAxMDAwKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQl9CisgICAgdHJ5IHsKKyAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcChzZWMgKiAxMDAwKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgdW51c2VkTWV0aG9kKCkgewpAQCAtMjMyLDcgKzIzMiw3IEBACiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkge30KIAogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgewotCXRocm93IG5ldyBFSkJFeGNlcHRpb24oIkNvbnRhaW5lciBjYWxsZWQgZWpiQWN0aXZhdGU/Pz8/PyIpOworICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIkNvbnRhaW5lciBjYWxsZWQgZWpiQWN0aXZhdGU/Pz8/PyIpOwogICAgIH0KIAogICAgIHZvaWQgcG9zdEFjdGl2YXRlKCkgewpAQCAtMjQwLDcgKzI0MCw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkgewotCXRocm93IG5ldyBFSkJFeGNlcHRpb24oIkNvbnRhaW5lciBjYWxsZWQgZWpiUGFzc2l2YXRlPz8/Pz8iKTsKKyAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJDb250YWluZXIgY2FsbGVkIGVqYlBhc3NpdmF0ZT8/Pz8/Iik7CiAgICAgfQogCiAgICAgQFByZVBhc3NpdmF0ZQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2xpc3RlbmVyL2VqYi9TRlNCTG9jYWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9saXN0ZW5lci9lamIvU0ZTQkxvY2FsLmphdmEKaW5kZXggODc3MTViZS4uYjIzNDBiMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2xpc3RlbmVyL2VqYi9TRlNCTG9jYWwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvbGlzdGVuZXIvZWpiL1NGU0JMb2NhbC5qYXZhCkBAIC0yMSw1ICsyMSw1IEBACiBwdWJsaWMgaW50ZXJmYWNlIFNGU0JMb2NhbAogICAgIGV4dGVuZHMgRUpCTG9jYWxPYmplY3QKIHsKLSAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKTsJCisgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvbGlzdGVuZXIvZWpiL1NGU0JMb2NhbEhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9saXN0ZW5lci9lamIvU0ZTQkxvY2FsSG9tZS5qYXZhCmluZGV4IGI4OGRjMmQuLjQxNTBiYTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9saXN0ZW5lci9lamIvU0ZTQkxvY2FsSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9saXN0ZW5lci9lamIvU0ZTQkxvY2FsSG9tZS5qYXZhCkBAIC0yMiw2ICsyMiw2IEBACiBwdWJsaWMgaW50ZXJmYWNlIFNGU0JMb2NhbEhvbWUKICAgICBleHRlbmRzIEVKQkxvY2FsSG9tZQogewotCXB1YmxpYyBTRlNCTG9jYWwgY3JlYXRlKFN0cmluZyBzZnNiTmFtZSkKKyAgICBwdWJsaWMgU0ZTQkxvY2FsIGNyZWF0ZShTdHJpbmcgc2ZzYk5hbWUpCiAgICAgICAgICAgICB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2xpc3RlbmVyL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9saXN0ZW5lci9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggNjZjNGIxMi4uODNmYjI4YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL2xpc3RlbmVyL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvbGlzdGVuZXIvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDcgKzEsNyBAQAotRHJvcCB0YWJsZSBTaW1wbGVFbnRpdHk7DQotDQotQ1JFQVRFIFRBQkxFIFNpbXBsZUVudGl0eSAoDQotICAgIGtleSAgICAgY2hhcigxMjgpIG5vdCBudWxsLA0KLSAgICBuYW1lICAgIGNoYXIoMTI4KQ0KLSk7DQotDQorRHJvcCB0YWJsZSBTaW1wbGVFbnRpdHk7CisKK0NSRUFURSBUQUJMRSBTaW1wbGVFbnRpdHkgKAorICAgIGtleSAgICAgY2hhcigxMjgpIG5vdCBudWxsLAorICAgIG5hbWUgICAgY2hhcigxMjgpCispOworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvbGlzdGVuZXIvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9saXN0ZW5lci9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IDkzNWM0YTYuLjNmMjFhZWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9saXN0ZW5lci9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9saXN0ZW5lci9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xICsxIEBACi1Ecm9wIHRhYmxlIFNpbXBsZUVudGl0eTsNCitEcm9wIHRhYmxlIFNpbXBsZUVudGl0eTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9rZWVwc3RhdGUvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IDFhZDYxODcuLjU5YmY3OWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSw3ICsxLDcgQEAKLURyb3AgdGFibGUgU2ltcGxlRW50aXR5Ow0KLQ0KLUNSRUFURSBUQUJMRSBTaW1wbGVFbnRpdHkgKA0KLSAgICBrZXlpZCAgICAgY2hhcigxMjgpIG5vdCBudWxsLA0KLSAgICBuYW1lICAgIGNoYXIoMTI4KQ0KLSk7DQotDQorRHJvcCB0YWJsZSBTaW1wbGVFbnRpdHk7CisKK0NSRUFURSBUQUJMRSBTaW1wbGVFbnRpdHkgKAorICAgIGtleWlkICAgICBjaGFyKDEyOCkgbm90IG51bGwsCisgICAgbmFtZSAgICBjaGFyKDEyOCkKKyk7CisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL2tlZXBzdGF0ZS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggOTM1YzRhNi4uM2YyMWFlYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Iva2VlcHN0YXRlL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEgKzEgQEAKLURyb3AgdGFibGUgU2ltcGxlRW50aXR5Ow0KK0Ryb3AgdGFibGUgU2ltcGxlRW50aXR5OwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMmE2YjhhNC4uOWU5NjFmYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMSArMTUsMjEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1zZnNiLXBhc3NpdmF0ZWFjdGl2YXRlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9idWlsZC54bWwKaW5kZXggMmY4NjhjYS4uZDNhNjc2NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsMTMgKzQ4LDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50Ki5jbGFzcywgKiovKlNGU0IqLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLWVqYi1zcWwtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgpAQCAtNjksNyArNjksNyBAQAogICAgICAgICA8L2FudGNhbGw+CiAgICAgLS0+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8IS0tCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgpAQCAtODEsMTcgKzgxLDE3IEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CiAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA4YzIyOTU2Li4zYjNmNWM2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMyw4ICszMyw4IEBACiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcga1Rlc3ROb3RSdW4gICAgPSAiVEVTVCBOT1QgUlVOIjsKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBrVGVzdFBhc3NlZCAgICA9ICJURVNUIFBBU1NFRCI7CiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcga1Rlc3RGYWlsZWQgICAgPSAiVEVTVCBGQUlMRUQiOwotICAgIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCAgICBNQVhfU0ZTQlMgPSA0MDsKQEAgLTUyLDE1ICs1MiwxNSBAQAogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW3Bhc3NpdmF0ZWFjdGl2YXRlQ2xpZW50XSBET05FIGRvVGVzdCgpLi4uIik7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJwYXNzaXZhdGVhY3RpdmF0ZSIpOwotICAgIH0gIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIGluaXRTRlNCTGlzdCgpOyAgICAgLy9jcmVhdGUgU0ZTQnMgCisgICAgICAgIGluaXRTRlNCTGlzdCgpOyAgICAgLy9jcmVhdGUgU0ZTQnMKICAgICAgICAgYWNjZXNzU0ZTQigpOyAgICAgICAvL2FjY2VzcyB0aGUgU0ZCUwotCXJlbW92ZVRlc3QoKTsKKyAgICByZW1vdmVUZXN0KCk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGluaXRTRlNCTGlzdCgpIHsKQEAgLTkwLDIxICs5MCwyMSBAQAogCiAgICAgcHVibGljIHZvaWQgYWNjZXNzU0ZTQigpIHsKICAgICAgICAgdHJ5IHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJXYWl0aW5nIGZvciAxMCBzZWNvbmRzIGJlZm9yZSBhY2Nlc3NpbmcuLi4iKTsKLQkgICAgZm9yIChpbnQgaT0wOyBpPDEwOyBpKyspIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCIiICsgKDEwIC0gaSkgKyAiIHNlY29uZHMgbGVmdC4uLiIpOwotCQl0cnkgewotCQkgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCgxKjEwMDApOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJfQotCSAgICB9CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2FpdGluZyBmb3IgMTAgc2Vjb25kcyBiZWZvcmUgYWNjZXNzaW5nLi4uIik7CisgICAgICAgIGZvciAoaW50IGk9MDsgaTwxMDsgaSsrKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIiArICgxMCAtIGkpICsgIiBzZWNvbmRzIGxlZnQuLi4iKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoMSoxMDAwKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIH0KKyAgICAgICAgfQogCiAgICAgICAgICAgICBib29sZWFuIHBhc3NlZCA9IHRydWU7CiAgICAgICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBNQVhfU0ZTQlM7IGkrKykgewogICAgICAgICAgICAgICAgIFNGU0Igc2ZzYiA9IChTRlNCKSBzZnNiTGlzdC5nZXQoaSk7CiAgICAgICAgICAgICAgICAgU3RyaW5nIHNmc2JOYW1lID0gX3Nmc2JQcmVmaXgraTsKLQkJU3RyaW5nIHJldHJpZXZlZE5hbWUgPSBzZnNiLmdldE5hbWUoKTsKLSAgICAgICAgICAgICAgICAKKyAgICAgICAgU3RyaW5nIHJldHJpZXZlZE5hbWUgPSBzZnNiLmdldE5hbWUoKTsKKwogICAgICAgICAgICAgICAgIGJvb2xlYW4gc2Vzc2lvbkN0eFRlc3QgPSBzZnNiLmNoZWNrU2Vzc2lvbkNvbnRleHQoKTsKICAgICAgICAgICAgICAgICBib29sZWFuIGluaXRpYWxDdHhUZXN0ID0gc2ZzYi5jaGVja0luaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICAgICAgYm9vbGVhbiBlbnRpdHlIb21lVGVzdCA9IHNmc2IuY2hlY2tFbnRpdHlIb21lKCk7CkBAIC0xMTQsMzIgKzExNCwzMiBAQAogICAgICAgICAgICAgICAgIGJvb2xlYW4gaG9tZUhhbmRsZVRlc3QgPSBzZnNiLmNoZWNrSG9tZUhhbmRsZSgpOwogICAgICAgICAgICAgICAgIGJvb2xlYW4gaGFuZGxlVGVzdCA9IHNmc2IuY2hlY2tIYW5kbGUoKTsKICAgICAgICAgICAgICAgICBib29sZWFuIHV0VGVzdCA9IHNmc2IuY2hlY2tVc2VyVHJhbnNhY3Rpb24oKTsKLQkJYm9vbGVhbiBhY3RpdmF0aW9uVGVzdCA9IChzZnNiLmdldEFjdGl2YXRpb25Db3VudCgpICE9IDApOwotCQlib29sZWFuIHBhc3NpdmF0aW9uVGVzdCA9IChzZnNiLmdldFBhc3NpdmF0aW9uQ291bnQoKSAhPSAwKTsKKyAgICAgICAgYm9vbGVhbiBhY3RpdmF0aW9uVGVzdCA9IChzZnNiLmdldEFjdGl2YXRpb25Db3VudCgpICE9IDApOworICAgICAgICBib29sZWFuIHBhc3NpdmF0aW9uVGVzdCA9IChzZnNiLmdldFBhc3NpdmF0aW9uQ291bnQoKSAhPSAwKTsKIAotCQlpbnQgYWN0Q291bnQgPSBzZnNiLmdldEFjdGl2YXRpb25Db3VudCgpOwotCQlpbnQgcGFzQ291bnQgPSBzZnNiLmdldFBhc3NpdmF0aW9uQ291bnQoKTsKKyAgICAgICAgaW50IGFjdENvdW50ID0gc2ZzYi5nZXRBY3RpdmF0aW9uQ291bnQoKTsKKyAgICAgICAgaW50IHBhc0NvdW50ID0gc2ZzYi5nZXRQYXNzaXZhdGlvbkNvdW50KCk7CiAKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oc2Vzc2lvbkN0eFRlc3QgKyAiOyAiICsgaW5pdGlhbEN0eFRlc3QKICAgICAgICAgICAgICAgICAgICAgKyAiOyAiICsgZW50aXR5SG9tZVRlc3QgKyAiOyAiICsgZW50aXR5TG9jYWxIb21lVGVzdAogICAgICAgICAgICAgICAgICAgICArICI7ICIgKyBlbnRpdHlSZW1vdGVUZXN0ICsgIjsgIiArIGVudGl0eUxvY2FsVGVzdAotICAgICAgICAgICAgICAgICAgICArICI7ICIgKyBob21lSGFuZGxlVGVzdCArICI7ICIgKyBoYW5kbGVUZXN0IAorICAgICAgICAgICAgICAgICAgICArICI7ICIgKyBob21lSGFuZGxlVGVzdCArICI7ICIgKyBoYW5kbGVUZXN0CiAgICAgICAgICAgICAgICAgICAgICsgIjsgIiArIHV0VGVzdAotCQkgICAgKyAiOyAiICsgYWN0aXZhdGlvblRlc3QgKyAiICgiICsgYWN0Q291bnQgKyAiKSIKLQkJICAgICsgIjsgIiArIHBhc3NpdmF0aW9uVGVzdCArICIgKCIgKyBwYXNDb3VudCArICIpIgotCQkpOworICAgICAgICAgICAgKyAiOyAiICsgYWN0aXZhdGlvblRlc3QgKyAiICgiICsgYWN0Q291bnQgKyAiKSIKKyAgICAgICAgICAgICsgIjsgIiArIHBhc3NpdmF0aW9uVGVzdCArICIgKCIgKyBwYXNDb3VudCArICIpIgorICAgICAgICApOwogCiAgICAgICAgICAgICAgICAgcGFzc2VkID0gc2Vzc2lvbkN0eFRlc3QgJiYgaW5pdGlhbEN0eFRlc3QKICAgICAgICAgICAgICAgICAgICAgJiYgZW50aXR5SG9tZVRlc3QgJiYgZW50aXR5TG9jYWxIb21lVGVzdAogICAgICAgICAgICAgICAgICAgICAmJiBlbnRpdHlSZW1vdGVUZXN0ICYmIGVudGl0eUxvY2FsVGVzdAogICAgICAgICAgICAgICAgICAgICAmJiBob21lSGFuZGxlVGVzdCAmJiBoYW5kbGVUZXN0ICYmIHV0VGVzdAotCQkgICAgJiYgYWN0aXZhdGlvblRlc3QgJiYgcGFzc2l2YXRpb25UZXN0OworICAgICAgICAgICAgJiYgYWN0aXZhdGlvblRlc3QgJiYgcGFzc2l2YXRpb25UZXN0OwogCiAgICAgICAgICAgICAgICAgaWYgKCEgcGFzc2VkKSB7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KIAotCQlzZnNiLnNsZWVwRm9yU2Vjb25kcygyKTsKKyAgICAgICAgc2ZzYi5zbGVlcEZvclNlY29uZHMoMik7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChwYXNzZWQpIHsKQEAgLTE1Myw0NCArMTUzLDQ0IEBACiAgICAgICAgICAgICAgICAgU3RyaW5nIHNmc2JOYW1lID0gX3Nmc2JQcmVmaXgraTsKIAogICAgICAgICAgICAgICAgIHNmc2IubWFrZVN0YXRlTm9uU2VyaWFsaXphYmxlKCk7Ci0JICAgIH0KKyAgICAgICAgfQogCi0JICAgIC8vQ3JlYXRpbmcgdGhlc2UgbWFueSBTRlNCcyBzaG91bGQgZm9yY2UgcGFzc2l2YXRpb24gb2YgdGhlIGFib3ZlCi0JICAgIC8vCW5vbi1zZXJpYWxpemFibGUgYmVhbnMKKyAgICAgICAgLy9DcmVhdGluZyB0aGVzZSBtYW55IFNGU0JzIHNob3VsZCBmb3JjZSBwYXNzaXZhdGlvbiBvZiB0aGUgYWJvdmUKKyAgICAgICAgLy8gICAgbm9uLXNlcmlhbGl6YWJsZSBiZWFucwogICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgTUFYX1NGU0JTOyBpKyspIHsKLQkJaG9tZS5jcmVhdGUoX3Nmc2JQcmVmaXggKyAoaSsxKSoxMDAwKTsKLQkgICAgfQorICAgICAgICBob21lLmNyZWF0ZShfc2ZzYlByZWZpeCArIChpKzEpKjEwMDApOworICAgICAgICB9CiAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJXYWl0aW5nIGZvciAxMCBzZWNvbmRzIGZvciBwYXNzaXZhdGlvbiB0byBjb21wbGV0ZS4uLiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldhaXRpbmcgZm9yIDEwIHNlY29uZHMgZm9yIHBhc3NpdmF0aW9uIHRvIGNvbXBsZXRlLi4uIik7CiAKLQkgICAgZm9yIChpbnQgaT0wOyBpPDEwOyBpKyspIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCIiICsgKDEwIC0gaSkgKyAiIHNlY29uZHMgbGVmdC4uLiIpOwotCQl0cnkgewotCQkgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCgxKjEwMDApOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJfQotCSAgICB9CisgICAgICAgIGZvciAoaW50IGk9MDsgaTwxMDsgaSsrKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIiArICgxMCAtIGkpICsgIiBzZWNvbmRzIGxlZnQuLi4iKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoMSoxMDAwKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIH0KKyAgICAgICAgfQogCiAgICAgICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBNQVhfU0ZTQlM7IGkrKykgewogICAgICAgICAgICAgICAgIFNGU0Igc2ZzYiA9IChTRlNCKSBzZnNiTGlzdC5nZXQoaSk7CiAgICAgICAgICAgICAgICAgU3RyaW5nIHNmc2JOYW1lID0gX3Nmc2JQcmVmaXgraTsKIAogICAgICAgICAgICAgICAgIHRyeSB7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50KCJFeHBlY3RpbmcgZXhjZXB0aW9uIGZvcjogIiArIHNmc2JOYW1lKTsKLQkJICAgIFN0cmluZyBubSA9IHNmc2IuZ2V0TmFtZSgpOwotCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJFUlJPUi4gRGlkbid0IGdldCBleHBlY3RlZCBleGNlcHRpb24uICIKLQkJCSAgICArICJHb3Q6ICIgKyBubSk7Ci0JCSAgICBwYXNzZWQgPSBmYWxzZTsKLQkJICAgIGJyZWFrOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiWyoqR290IEV4Y2VwdGlvbioqXSIpOwotCQl9Ci0JICAgIH0KLQkgICAgaWYgKHBhc3NlZCkgewotCQlzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IG5vbi1zZXJpYWxpemFibGUtc3RhdGUiLCBzdGF0LlBBU1MpOwotCSAgICB9IGVsc2UgewotCQlzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IG5vbi1zZXJpYWxpemFibGUtc3RhdGUiLCBzdGF0LkZBSUwpOwotCSAgICB9CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJFeHBlY3RpbmcgZXhjZXB0aW9uIGZvcjogIiArIHNmc2JOYW1lKTsKKyAgICAgICAgICAgIFN0cmluZyBubSA9IHNmc2IuZ2V0TmFtZSgpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFUlJPUi4gRGlkbid0IGdldCBleHBlY3RlZCBleGNlcHRpb24uICIKKyAgICAgICAgICAgICAgICArICJHb3Q6ICIgKyBubSk7CisgICAgICAgICAgICBwYXNzZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiWyoqR290IEV4Y2VwdGlvbioqXSIpOworICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBhc3NlZCkgeworICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IG5vbi1zZXJpYWxpemFibGUtc3RhdGUiLCBzdGF0LlBBU1MpOworICAgICAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IG5vbi1zZXJpYWxpemFibGUtc3RhdGUiLCBzdGF0LkZBSUwpOworICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBhY2Nlc3NTRlNCIiwgc3RhdC5GQUlMKTsKIApAQCAtMTk5LDMzICsxOTksMzMgQEAKIAogCiAgICAgcHVibGljIHZvaWQgcmVtb3ZlVGVzdCgpIHsKLQlTRlNCIHNmc2IgPSBudWxsOwotCXRyeSB7Ci0JICAgIFN0cmluZyBteU5hbWUgPSAiXzJfIiArIF9zZnNiUHJlZml4ICsgIl8yXyI7Ci0JICAgIHNmc2IgPSAoU0ZTQikgaG9tZS5jcmVhdGUobXlOYW1lKTsKLQkgICAgU3RyaW5nIHJldHJpZXZlZE5hbWUgPSBzZnNiLmdldE5hbWUoKTsKLQkgICAgYm9vbGVhbiBuYW1lT0sgPSBteU5hbWUuZXF1YWxzSWdub3JlQ2FzZShyZXRyaWV2ZWROYW1lKTsKLQkgICAgYm9vbGVhbiBnb3RFeGNlcHRpb24gPSBmYWxzZTsKKyAgICBTRlNCIHNmc2IgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIFN0cmluZyBteU5hbWUgPSAiXzJfIiArIF9zZnNiUHJlZml4ICsgIl8yXyI7CisgICAgICAgIHNmc2IgPSAoU0ZTQikgaG9tZS5jcmVhdGUobXlOYW1lKTsKKyAgICAgICAgU3RyaW5nIHJldHJpZXZlZE5hbWUgPSBzZnNiLmdldE5hbWUoKTsKKyAgICAgICAgYm9vbGVhbiBuYW1lT0sgPSBteU5hbWUuZXF1YWxzSWdub3JlQ2FzZShyZXRyaWV2ZWROYW1lKTsKKyAgICAgICAgYm9vbGVhbiBnb3RFeGNlcHRpb24gPSBmYWxzZTsKIAogICAgICAgICAgICAgLy8gVGVzdCBCTVQgU0ZTQiByZW1vdmUgY2FsbGVkIGluIGEgdHJhbnNhY3Rpb24KLSAgICAgICAgICAgIGpha2FydGEudHJhbnNhY3Rpb24uVXNlclRyYW5zYWN0aW9uIHV0ID0gKGpha2FydGEudHJhbnNhY3Rpb24uVXNlclRyYW5zYWN0aW9uKSAKKyAgICAgICAgICAgIGpha2FydGEudHJhbnNhY3Rpb24uVXNlclRyYW5zYWN0aW9uIHV0ID0gKGpha2FydGEudHJhbnNhY3Rpb24uVXNlclRyYW5zYWN0aW9uKQogICAgICAgICAgICAgICAgICAgICAgKG5ldyBJbml0aWFsQ29udGV4dCgpKS5sb29rdXAoImphdmE6Y29tcC9Vc2VyVHJhbnNhY3Rpb24iKTsKICAgICAgICAgICAgIHV0LmJlZ2luKCk7Ci0JICAgIHNmc2IucmVtb3ZlKCk7CisgICAgICAgIHNmc2IucmVtb3ZlKCk7CiAgICAgICAgICAgICB1dC5jb21taXQoKTsKLQkgICAgdHJ5IHsKLQkJc2ZzYi5nZXROYW1lKCk7Ci0JCWdvdEV4Y2VwdGlvbiA9IGZhbHNlOwkgICAgLy9FeHBlY3RpbmcgYW4gZXhjZXB0aW9uCi0JICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQlnb3RFeGNlcHRpb24gPSB0cnVlOwotCSAgICB9CisgICAgICAgIHRyeSB7CisgICAgICAgIHNmc2IuZ2V0TmFtZSgpOworICAgICAgICBnb3RFeGNlcHRpb24gPSBmYWxzZTsgICAgICAgIC8vRXhwZWN0aW5nIGFuIGV4Y2VwdGlvbgorICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgZ290RXhjZXB0aW9uID0gdHJ1ZTsKKyAgICAgICAgfQogCi0JICAgIFN0cmluZyByZXN1bHRTdHIgPSAiKCIgKyBuYW1lT0sgKyAiIEBAQCAiICsgZ290RXhjZXB0aW9uICsgIikiOworICAgICAgICBTdHJpbmcgcmVzdWx0U3RyID0gIigiICsgbmFtZU9LICsgIiBAQEAgIiArIGdvdEV4Y2VwdGlvbiArICIpIjsKICAgICAgICAgICAgIGlmIChuYW1lT0sgJiYgZ290RXhjZXB0aW9uKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCByZW1vdmVUZXN0ICIgKyByZXN1bHRTdHIsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiPT09PT09PiBGQUlMIGJlY2F1c2U6IG5hbWVPSzogIiArIG5hbWVPSyArICIgZ290RXhjZXB0aW9uOiAiICsgZ290RXhjZXB0aW9uKTsKLQkJc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCByZW1vdmVUZXN0ICIgKyByZXN1bHRTdHIsIHN0YXQuRkFJTCk7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgcmVtb3ZlVGVzdCAiICsgcmVzdWx0U3RyLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQogCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAppbmRleCAzMWM5NzFiLi5jMjlhZjMxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbApAQCAtMjksNyArMjksNyBAQAogICAgICAgICA8L2VqYi1yZWY+CiAgICAgICAgIDxiZWFuLWNhY2hlPgogICAgICAgICAgICAgPG1heC1jYWNoZS1zaXplPjg8L21heC1jYWNoZS1zaXplPgotCSAgICA8cmVzaXplLXF1YW50aXR5PjQ8L3Jlc2l6ZS1xdWFudGl0eT4KKyAgICAgICAgPHJlc2l6ZS1xdWFudGl0eT40PC9yZXNpemUtcXVhbnRpdHk+CiAgICAgICAgIDwvYmVhbi1jYWNoZT4KICAgICAgPC9lamI+CiAgICAgIDxlamI+CkBAIC00NywxMCArNDcsMTAgQEAKICAgICAgICAgICAgIDxyZXMtcmVmLW5hbWU+amRiYy9EYXRhU291cmNlPC9yZXMtcmVmLW5hbWU+CiAgICAgICAgICAgICA8am5kaS1uYW1lPmpkYmMvX19kZWZhdWx0PC9qbmRpLW5hbWU+CiAgICAgICAgIDwvcmVzb3VyY2UtcmVmPgotCTxiZWFuLXBvb2w+Ci0JICAgIDxzdGVhZHktcG9vbC1zaXplPjQ8L3N0ZWFkeS1wb29sLXNpemU+Ci0JICAgIDxtYXgtcG9vbC1zaXplPjE3PC9tYXgtcG9vbC1zaXplPgotCTwvYmVhbi1wb29sPgorICAgIDxiZWFuLXBvb2w+CisgICAgICAgIDxzdGVhZHktcG9vbC1zaXplPjQ8L3N0ZWFkeS1wb29sLXNpemU+CisgICAgICAgIDxtYXgtcG9vbC1zaXplPjE3PC9tYXgtcG9vbC1zaXplPgorICAgIDwvYmVhbi1wb29sPgogICAgICA8L2VqYj4KICAgIDwvZW50ZXJwcmlzZS1iZWFucz4KIDwvc3VuLWVqYi1qYXI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9lamIvU0ZTQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvZWpiL1NGU0IuamF2YQppbmRleCAyYjRhMjExLi5kNjAyYWNhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9lamIvU0ZTQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2VqYi9TRlNCLmphdmEKQEAgLTI0LDM3ICsyNCwzNyBAQAogewogCiAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLQl0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgdm9pZCBjcmVhdGVTRlNCQ2hpbGQoKSAKLQl0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHB1YmxpYyB2b2lkIGNyZWF0ZVNGU0JDaGlsZCgpCisgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TWVzc2FnZSgpCi0JdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIGJvb2xlYW4gY2hlY2tTZXNzaW9uQ29udGV4dCgpCi0gICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247ICAgICAgIAorICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIGJvb2xlYW4gY2hlY2tJbml0aWFsQ29udGV4dCgpCi0gICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247ICAgICAgIAorICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIGJvb2xlYW4gY2hlY2tFbnRpdHlIb21lKCkKLSAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsgICAgICAgCisgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja0VudGl0eUxvY2FsSG9tZSgpCi0gICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247ICAgICAgIAorICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIGJvb2xlYW4gY2hlY2tFbnRpdHlSZW1vdGVSZWYoKQotICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOyAgICAgICAKKyAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBib29sZWFuIGNoZWNrRW50aXR5TG9jYWxSZWYoKQotICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOyAgICAgICAKKyAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBib29sZWFuIGNoZWNrSG9tZUhhbmRsZSgpCi0gICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247ICAgICAgIAorICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIGJvb2xlYW4gY2hlY2tIYW5kbGUoKQotICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOyAgICAgICAKKyAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBib29sZWFuIGNoZWNrVXNlclRyYW5zYWN0aW9uKCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKQEAgLTYzLDE3ICs2MywxNyBAQAogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIGludCBnZXRBY3RpdmF0aW9uQ291bnQoKQotCXRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBpbnQgZ2V0UGFzc2l2YXRpb25Db3VudCgpCi0JdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIHZvaWQgbWFrZVN0YXRlTm9uU2VyaWFsaXphYmxlKCkKLQl0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgdm9pZCBzbGVlcEZvclNlY29uZHMoaW50IHNlYykKLQl0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgdm9pZCB1bnVzZWRNZXRob2QoKQotCXRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2VqYi9TRlNCRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9lamIvU0ZTQkVKQi5qYXZhCmluZGV4IGRmMWE0NmQuLmQ4N2VkODEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2VqYi9TRlNCRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvZWpiL1NGU0JFSkIuamF2YQpAQCAtMzAsNyArMzAsNyBAQAogaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIAogcHVibGljIGNsYXNzIFNGU0JFSkIKLSAgICBpbXBsZW1lbnRzIFNlc3Npb25CZWFuIAorICAgIGltcGxlbWVudHMgU2Vzc2lvbkJlYW4KIHsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBMT0NBTF9DSElMRF9TVUZGSVggPSAiX2NoaWxkTG9jYWwiOwpAQCAtNTEsNyArNTEsNyBAQAogICAgIHByaXZhdGUgU2ltcGxlRW50aXR5TG9jYWxIb21lICAgICAgIGVudGl0eUxvY2FsSG9tZTsKICAgICBwcml2YXRlIFNpbXBsZUVudGl0eUxvY2FsICAgICAgICAgICBlbnRpdHlMb2NhbDsKICAgICBwcml2YXRlIFNGU0JIb21lICAgICAgICAgICAgICAgICAgICBzZnNiSG9tZTsKLSAgICBwcml2YXRlIFNGU0IgICAgICAgICAgICAgICAgICAgICAgICBzZnNiUmVtb3RlOyAgICAKKyAgICBwcml2YXRlIFNGU0IgICAgICAgICAgICAgICAgICAgICAgICBzZnNiUmVtb3RlOwogICAgIHByaXZhdGUgU0ZTQkxvY2FsSG9tZSAgICAgICAgICAgICAgIHNmc2JMb2NhbEhvbWU7CiAgICAgcHJpdmF0ZSBTRlNCTG9jYWwgICAgICAgICAgICAgICAgICAgc2ZzYkxvY2FsOwogCkBAIC02MCw5ICs2MCw5IEBACiAgICAgcHJpdmF0ZSBVc2VyVHJhbnNhY3Rpb24gICAgICAgICAgICAgdXNlclRyYW5zYWN0aW9uMTsKICAgICBwcml2YXRlIFVzZXJUcmFuc2FjdGlvbiAgICAgICAgICAgICB1c2VyVHJhbnNhY3Rpb24yOwogCi0gICAgcHJpdmF0ZSBpbnQJCQkJYWN0aXZhdGlvbkNvdW50OwotICAgIHByaXZhdGUgaW50CQkJCXBhc3NpdmF0aW9uQ291bnQ7Ci0gICAgcHJpdmF0ZSBPYmplY3QJCQlub25TZXJpYWxpemFibGVTdGF0ZTsKKyAgICBwcml2YXRlIGludCAgICAgICAgICAgICAgICBhY3RpdmF0aW9uQ291bnQ7CisgICAgcHJpdmF0ZSBpbnQgICAgICAgICAgICAgICAgcGFzc2l2YXRpb25Db3VudDsKKyAgICBwcml2YXRlIE9iamVjdCAgICAgICAgICAgIG5vblNlcmlhbGl6YWJsZVN0YXRlOwogCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKFN0cmluZyBzZnNiTmFtZSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCJJbiBTRlNCLmVqYkNyZWF0ZSgpIGZvciBuYW1lIC0+ICIgKyBzZnNiTmFtZSk7CkBAIC03NSwxMCArNzUsMTAgQEAKIAogICAgICAgICAgICAgc2ZzYkhvbWUgPSAoU0ZTQkhvbWUpIHNlc3Npb25DdHguZ2V0RUpCSG9tZSgpOwogICAgICAgICAgICAgc2ZzYkxvY2FsSG9tZSA9IChTRlNCTG9jYWxIb21lKSBzZXNzaW9uQ3R4LmdldEVKQkxvY2FsSG9tZSgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGhvbWVIYW5kbGUgPSBlbnRpdHlIb21lLmdldEhvbWVIYW5kbGUoKTsKICAgICAgICAgICAgIGhhbmRsZSA9IGVudGl0eVJlbW90ZS5nZXRIYW5kbGUoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICB1c2VyVHJhbnNhY3Rpb24xID0gc2Vzc2lvbkN0eC5nZXRVc2VyVHJhbnNhY3Rpb24oKTsKICAgICAgICAgICAgIHVzZXJUcmFuc2FjdGlvbjIgPSAoVXNlclRyYW5zYWN0aW9uKSBuZXcgSW5pdGlhbENvbnRleHQoKS4KICAgICAgICAgICAgICAgICBsb29rdXAoImphdmE6Y29tcC9Vc2VyVHJhbnNhY3Rpb24iKTsKQEAgLTk4LDE1ICs5OCwxNSBAQAogICAgICAgICAgICAgc2ZzYlJlbW90ZSA9IHNmc2JIb21lLmNyZWF0ZShzZnNiTmFtZSArICIgX2NoaWxkIik7CiAgICAgICAgICAgICBzZnNiTG9jYWwgPSBzZnNiTG9jYWxIb21lLmNyZWF0ZShzZnNiTmFtZSArIExPQ0FMX0NISUxEX1NVRkZJWCk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkgICAgRUpCRXhjZXB0aW9uIGV4ID0gbmV3IEVKQkV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7Ci0JICAgIGV4LmluaXRDYXVzZShlKTsKKyAgICAgICAgRUpCRXhjZXB0aW9uIGV4ID0gbmV3IEVKQkV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIGV4LmluaXRDYXVzZShlKTsKICAgICAgICAgICAgIHRocm93IGV4OwogICAgICAgICB9CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gY2hlY2tTRlNCQ2hpbGQoKSB7CiAgICAgICAgIFN0cmluZyBjaGlsZE5hbWUgPSBzZnNiTG9jYWwuZ2V0TmFtZSgpOwotICAgICAgICBib29sZWFuIHN0YXR1cyA9IGNoaWxkTmFtZS5lcXVhbHMoc2ZzYk5hbWUgKyBMT0NBTF9DSElMRF9TVUZGSVgpOyAgICAgICAKKyAgICAgICAgYm9vbGVhbiBzdGF0dXMgPSBjaGlsZE5hbWUuZXF1YWxzKHNmc2JOYW1lICsgTE9DQUxfQ0hJTERfU1VGRklYKTsKICAgICAgICAgcmV0dXJuIHN0YXR1czsKICAgICB9CiAKQEAgLTIwMyw3ICsyMDMsNyBAQAogICAgIHB1YmxpYyBib29sZWFuIGNoZWNrVXNlclRyYW5zYWN0aW9uKCkgewogICAgICAgICBib29sZWFuIHN0YXR1cyA9CiAgICAgICAgICAgICAoKHVzZXJUcmFuc2FjdGlvbjEgIT0gbnVsbCkgJiYgKHVzZXJUcmFuc2FjdGlvbjIgIT0gbnVsbCkpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgaWYoIHN0YXR1cyApIHsKICAgICAgICAgICAgICAgICB1c2VyVHJhbnNhY3Rpb24xLmJlZ2luKCk7CkBAIC0yMzUsNyArMjM1LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChvaykgewogICAgICAgICAgICAgICAgIGZpZWxkTmFtZSA9ICJqYXZhOiI7Ci0gICAgICAgICAgICAgICAgb2sgPSAoIChqYXZhQ3R4ICE9IG51bGwpICYmIAorICAgICAgICAgICAgICAgIG9rID0gKCAoamF2YUN0eCAhPSBudWxsKSAmJgogICAgICAgICAgICAgICAgICAgICAgICBqYXZhQ3R4LmdldE5hbWVJbk5hbWVzcGFjZSgpLmVxdWFscyhmaWVsZE5hbWUpICk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAob2spIHsKQEAgLTI0Nyw3ICsyNDcsNyBAQAogICAgICAgICAgICAgICAgIGZpZWxkTmFtZSA9ICJqYXZhOmNvbXAvZW52IjsKICAgICAgICAgICAgICAgICBvayA9ICggKGVudkN0eCAhPSBudWxsKSAmJgogICAgICAgICAgICAgICAgICAgICAgICBlbnZDdHguZ2V0TmFtZUluTmFtZXNwYWNlKCkuZXF1YWxzKGZpZWxkTmFtZSkgKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG9rKSB7CiAgICAgICAgICAgICAgICAgZmllbGROYW1lID0gImphdmE6Y29tcC9lbnYvZWpiIjsKQEAgLTI1Niw3ICsyNTYsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG9rKSB7CiAgICAgICAgICAgICAgICAgZmllbGROYW1lID0gImVudi1lbnRyeSI7Ci0gICAgICAgICAgCisKICAgICAgICAgICAgICAgICBTdHJpbmcgdmFsdWUxID0gKFN0cmluZykKICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbEN0eC5sb29rdXAoImphdmE6Y29tcC9lbnYvVGFnVmFsdWUiKTsKICAgICAgICAgICAgICAgICBTdHJpbmcgdmFsdWUyID0gKFN0cmluZykgZW52Q3R4Lmxvb2t1cCgiVGFnVmFsdWUiKTsKQEAgLTI2OCw5ICsyNjgsOSBAQAogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBvayA9IGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHRoaXMubWVzc2FnZSA9IChvaykgPyBudWxsIDogKGZpZWxkTmFtZSArICIgbm90IHJlc3RvcmVkIHByb3Blcmx5Iik7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBvazsKICAgICB9CiAKQEAgLTI3OSwyMiArMjc5LDIyIEBACiAgICAgfQogCiAgICAgcHVibGljIGludCBnZXRBY3RpdmF0aW9uQ291bnQoKSB7Ci0JcmV0dXJuIHRoaXMuYWN0aXZhdGlvbkNvdW50OworICAgIHJldHVybiB0aGlzLmFjdGl2YXRpb25Db3VudDsKICAgICB9CiAKICAgICBwdWJsaWMgaW50IGdldFBhc3NpdmF0aW9uQ291bnQoKSB7Ci0JcmV0dXJuIHRoaXMucGFzc2l2YXRpb25Db3VudDsKKyAgICByZXR1cm4gdGhpcy5wYXNzaXZhdGlvbkNvdW50OwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIG1ha2VTdGF0ZU5vblNlcmlhbGl6YWJsZSgpIHsKLQlub25TZXJpYWxpemFibGVTdGF0ZSA9IG5ldyBPYmplY3QoKTsKKyAgICBub25TZXJpYWxpemFibGVTdGF0ZSA9IG5ldyBPYmplY3QoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzbGVlcEZvclNlY29uZHMoaW50IHNlYykgewotCXRyeSB7Ci0JICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoc2VjICogMTAwMCk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JfQorICAgIHRyeSB7CisgICAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoc2VjICogMTAwMCk7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHVudXNlZE1ldGhvZCgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2VqYi9TRlNCSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvZWpiL1NGU0JIb21lLmphdmEKaW5kZXggNGM2MzZiMy4uNGVhMmVhZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvZWpiL1NGU0JIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvZWpiL1NGU0JIb21lLmphdmEKQEAgLTIzLDYgKzIzLDYgQEAKIHB1YmxpYyBpbnRlcmZhY2UgU0ZTQkhvbWUKICAgICBleHRlbmRzIEVKQkhvbWUKIHsKLQlwdWJsaWMgU0ZTQiBjcmVhdGUoU3RyaW5nIHNmc2JOYW1lKQorICAgIHB1YmxpYyBTRlNCIGNyZWF0ZShTdHJpbmcgc2ZzYk5hbWUpCiAgICAgICAgIHRocm93cyBDcmVhdGVFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2VqYi9TRlNCTG9jYWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2VqYi9TRlNCTG9jYWwuamF2YQppbmRleCBiNTRhY2E3Li5hYzhhNzQ5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9lamIvU0ZTQkxvY2FsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvZWpiL1NGU0JMb2NhbC5qYXZhCkBAIC0yMSw1ICsyMSw1IEBACiBwdWJsaWMgaW50ZXJmYWNlIFNGU0JMb2NhbAogICAgIGV4dGVuZHMgRUpCTG9jYWxPYmplY3QKIHsKLSAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKTsJCisgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9lamIvU0ZTQkxvY2FsSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvZWpiL1NGU0JMb2NhbEhvbWUuamF2YQppbmRleCBjOTFjYjlkLi40YWZiNjhhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9lamIvU0ZTQkxvY2FsSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2VqYi9TRlNCTG9jYWxIb21lLmphdmEKQEAgLTIyLDYgKzIyLDYgQEAKIHB1YmxpYyBpbnRlcmZhY2UgU0ZTQkxvY2FsSG9tZQogICAgIGV4dGVuZHMgRUpCTG9jYWxIb21lCiB7Ci0JcHVibGljIFNGU0JMb2NhbCBjcmVhdGUoU3RyaW5nIHNmc2JOYW1lKQorICAgIHB1YmxpYyBTRlNCTG9jYWwgY3JlYXRlKFN0cmluZyBzZnNiTmFtZSkKICAgICAgICAgICAgIHRocm93cyBDcmVhdGVFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9lamIvU2ltcGxlRW50aXR5QmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvZWpiL1NpbXBsZUVudGl0eUJlYW4uamF2YQppbmRleCBjOWU0ZWNhLi43MGJkNjkyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9lamIvU2ltcGxlRW50aXR5QmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2VqYi9TaW1wbGVFbnRpdHlCZWFuLmphdmEKQEAgLTU2LDggKzU2LDggQEAKICAgICAgICAgQ29ubmVjdGlvbiBjID0gbnVsbDsKICAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOwogICAgICAgICB0cnkgewotCSAgICAgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgCSAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKKyAgICAgICAgICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgICAgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCiAgICAgICAgICAgICAgICAgIklOU0VSVCBJTlRPIFNpbXBsZUVudGl0eSAoa2V5aWQsIG5hbWUpIFZBTFVFUyAoPyw/KSIpOwogICAgICAgICAgICAgcHMuc2V0U3RyaW5nKDEsIGtleSk7CiAgICAgICAgICAgICBwcy5zZXRTdHJpbmcoMiwgbmFtZSk7CkBAIC02OCw3ICs2OCw3IEBACiAgICAgICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgICAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKICAgICAgICAgICAgIHRocm93IG5ldyBDcmVhdGVFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOwotICAgICAgICB9IGZpbmFsbHkgeyAKKyAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgaWYgKHBzICE9IG51bGwpCiAgICAgICAgICAgICAgICAgICAgIHBzLmNsb3NlKCk7CkBAIC05NCwxMCArOTQsMTAgQEAKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgQ29ubmVjdGlvbiBjID0gbnVsbDsKLSAgICAgCVByZXBhcmVkU3RhdGVtZW50IHBzID0gbnVsbDsKLQkgICAgdHJ5IHsKLQkgICAgICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgIAkgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCisgICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICAgICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAogICAgICAgICAgICAgICAgICJTRUxFQ1Qga2V5aWQgZnJvbSBTaW1wbGVFbnRpdHkgd2hlcmUga2V5aWQgPSA/Iik7CiAgICAgICAgICAgICBwcy5zZXRTdHJpbmcoMSwga2V5KTsKICAgICAgICAgICAgIFJlc3VsdFNldCBycyA9IHBzLmV4ZWN1dGVRdWVyeSgpOwpAQCAtMTA3LDcgKzEwNyw3IEBACiAgICAgICAgICAgICByZXR1cm4ga2V5OwogICAgICAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKICAgICAgICAgICAgIHRocm93IG5ldyBGaW5kZXJFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOwotICAgICAgICB9IGZpbmFsbHkgeyAKKyAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgaWYgKHBzICE9IG51bGwpCiAgICAgICAgICAgICAgICAgICAgIHBzLmNsb3NlKCk7CkBAIC0xMjUsNjUgKzEyNSw2NSBAQAogICAgICAgICAgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCiAgICAgICAgICAgICAgICAgIlNFTEVDVCBuYW1lIGZyb20gU2ltcGxlRW50aXR5IHdoZXJlIGtleWlkID0gPyIpOwogICAgICAgICAgICAgcHMuc2V0U3RyaW5nKDEsIGtleSk7Ci0JICAgIFJlc3VsdFNldCBycyA9IHBzLmV4ZWN1dGVRdWVyeSgpOwotCSAgICBpZiAoIXJzLm5leHQoKSkKLQkgICAgICAgdGhyb3cgbmV3IE5vU3VjaEVudGl0eUV4Y2VwdGlvbigiTm8gY3VzdCBmb3IgIiArIGtleSk7Ci0JICAgIHRoaXMubmFtZSA9IHJzLmdldFN0cmluZygxKTsKLQl9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKLQkgICAgdGhyb3cgbmV3IE5vU3VjaEVudGl0eUV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7Ci0JfSBmaW5hbGx5IHsgCi0JICAgIHRyeSB7Ci0JCWlmIChwcyAhPSBudWxsKQotCQkgICAgcHMuY2xvc2UoKTsKLQkJaWYgKGMgIT0gbnVsbCkKLQkJICAgIGMuY2xvc2UoKTsKLQkgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9Ci0JfQorICAgICAgICBSZXN1bHRTZXQgcnMgPSBwcy5leGVjdXRlUXVlcnkoKTsKKyAgICAgICAgaWYgKCFycy5uZXh0KCkpCisgICAgICAgICAgIHRocm93IG5ldyBOb1N1Y2hFbnRpdHlFeGNlcHRpb24oIk5vIGN1c3QgZm9yICIgKyBrZXkpOworICAgICAgICB0aGlzLm5hbWUgPSBycy5nZXRTdHJpbmcoMSk7CisgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7CisgICAgICAgIHRocm93IG5ldyBOb1N1Y2hFbnRpdHlFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOworICAgIH0gZmluYWxseSB7CisgICAgICAgIHRyeSB7CisgICAgICAgIGlmIChwcyAhPSBudWxsKQorICAgICAgICAgICAgcHMuY2xvc2UoKTsKKyAgICAgICAgaWYgKGMgIT0gbnVsbCkKKyAgICAgICAgICAgIGMuY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYlN0b3JlKCkgewotCUNvbm5lY3Rpb24gYyA9IG51bGw7Ci0gICAgIAlQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7Ci0JdHJ5IHsKLQkgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgCSAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKLQkJIlVQREFURSBTaW1wbGVFbnRpdHkgU0VUIG5hbWUgPSA/IFdIRVJFIGtleWlkID0gPyIpOwotCSAgICBwcy5zZXRTdHJpbmcoMSwgbmFtZSk7Ci0JICAgIHBzLnNldFN0cmluZygyLCBrZXkpOwotCSAgICBpZiAocHMuZXhlY3V0ZVVwZGF0ZSgpICE9IDEpCi0JCXRocm93IG5ldyBFSkJFeGNlcHRpb24oIkRpZG50IHN0b3JlIGVqYiIpOwotCX0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJTUUwgZXhjZXB0aW9uICIgKyBlKTsKLQl9IGZpbmFsbHkgeyAKLQkgICAgdHJ5IHsKLQkJaWYgKHBzICE9IG51bGwpCi0JCSAgICBwcy5jbG9zZSgpOwotCQlpZiAoYyAhPSBudWxsKQotCQkgICAgYy5jbG9zZSgpOwotCSAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KLQl9CisgICAgQ29ubmVjdGlvbiBjID0gbnVsbDsKKyAgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHBzID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICAgICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAorICAgICAgICAiVVBEQVRFIFNpbXBsZUVudGl0eSBTRVQgbmFtZSA9ID8gV0hFUkUga2V5aWQgPSA/Iik7CisgICAgICAgIHBzLnNldFN0cmluZygxLCBuYW1lKTsKKyAgICAgICAgcHMuc2V0U3RyaW5nKDIsIGtleSk7CisgICAgICAgIGlmIChwcy5leGVjdXRlVXBkYXRlKCkgIT0gMSkKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiRGlkbnQgc3RvcmUgZWpiIik7CisgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOworICAgIH0gZmluYWxseSB7CisgICAgICAgIHRyeSB7CisgICAgICAgIGlmIChwcyAhPSBudWxsKQorICAgICAgICAgICAgcHMuY2xvc2UoKTsKKyAgICAgICAgaWYgKGMgIT0gbnVsbCkKKyAgICAgICAgICAgIGMuY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHRocm93cyBSZW1vdmVFeGNlcHRpb24gewotCUNvbm5lY3Rpb24gYyA9IG51bGw7Ci0gICAgIAlQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7Ci0JdHJ5IHsKLQkgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgCSAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKLQkJIkRFTEVURSBGUk9NIFNpbXBsZUVudGl0eSBXSEVSRSBrZXlpZCA9ID8iKTsKLQkgICAgcHMuc2V0U3RyaW5nKDEsIG5hbWUpOwotCSAgICBpZiAocHMuZXhlY3V0ZVVwZGF0ZSgpICE9IDEpCi0JCXRocm93IG5ldyBSZW1vdmVFeGNlcHRpb24oIkRpZG50IHJlbW92ZSBlamIiKTsKLQl9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKLQkgICAgdGhyb3cgbmV3IFJlbW92ZUV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7Ci0JfSBmaW5hbGx5IHsgCi0JICAgIHRyeSB7Ci0JCWlmIChwcyAhPSBudWxsKQotCQkgICAgcHMuY2xvc2UoKTsKLQkJaWYgKGMgIT0gbnVsbCkKLQkJICAgIGMuY2xvc2UoKTsKLQkgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9Ci0JfQorICAgIENvbm5lY3Rpb24gYyA9IG51bGw7CisgICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgICAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKKyAgICAgICAgIkRFTEVURSBGUk9NIFNpbXBsZUVudGl0eSBXSEVSRSBrZXlpZCA9ID8iKTsKKyAgICAgICAgcHMuc2V0U3RyaW5nKDEsIG5hbWUpOworICAgICAgICBpZiAocHMuZXhlY3V0ZVVwZGF0ZSgpICE9IDEpCisgICAgICAgIHRocm93IG5ldyBSZW1vdmVFeGNlcHRpb24oIkRpZG50IHJlbW92ZSBlamIiKTsKKyAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKKyAgICAgICAgdGhyb3cgbmV3IFJlbW92ZUV4Y2VwdGlvbigiU1FMIGV4Y2VwdGlvbiAiICsgZSk7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgaWYgKHBzICE9IG51bGwpCisgICAgICAgICAgICBwcy5jbG9zZSgpOworICAgICAgICBpZiAoYyAhPSBudWxsKQorICAgICAgICAgICAgYy5jbG9zZSgpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9saXN0ZW5lci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvbGlzdGVuZXIvYnVpbGQucHJvcGVydGllcwppbmRleCBkNzA4NzE5Li40MTM4N2FjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9saXN0ZW5lci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2xpc3RlbmVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIxICsxNSwyMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLXNmc2ItbGlmZWN5Y2xlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9saXN0ZW5lci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9saXN0ZW5lci9idWlsZC54bWwKaW5kZXggOWExNGM1YS4uNzQ2YmE5NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvbGlzdGVuZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2xpc3RlbmVyL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsMTMgKzQ4LDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50Ki5jbGFzcywgKiovKlNGU0IqLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLWVqYi1zcWwtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgpAQCAtNjksNyArNjksNyBAQAogICAgICAgICA8L2FudGNhbGw+CiAgICAgLS0+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8IS0tCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgpAQCAtODEsMTcgKzgxLDE3IEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CiAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1lamItc3FsLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2xpc3RlbmVyL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2xpc3RlbmVyL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA2YzFjNjNhLi4wNThiYzc4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9saXN0ZW5lci9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvbGlzdGVuZXIvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zNCw4ICszNCw4IEBACiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcga1Rlc3ROb3RSdW4gICAgPSAiVEVTVCBOT1QgUlVOIjsKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBrVGVzdFBhc3NlZCAgICA9ICJURVNUIFBBU1NFRCI7CiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcga1Rlc3RGYWlsZWQgICAgPSAiVEVTVCBGQUlMRUQiOwotICAgIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCAgICBNQVhfU0ZTQlMgPSAyNDsKQEAgLTUzLDE1ICs1MywxNSBAQAogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW2xmVHJhZGl0aW9uYWxdIERPTkUgZG9UZXN0KCkuLi4iKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoInBhc3NpdmF0ZWFjdGl2YXRlIik7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgaW5pdFNGU0JMaXN0KCk7ICAgICAvL2NyZWF0ZSBTRlNCcyAKKyAgICAgICAgaW5pdFNGU0JMaXN0KCk7ICAgICAvL2NyZWF0ZSBTRlNCcwogICAgICAgICBhY2Nlc3NTRlNCKCk7ICAgICAgIC8vYWNjZXNzIHRoZSBTRkJTCi0JcmVtb3ZlVGVzdCgpOworICAgIHJlbW92ZVRlc3QoKTsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW5pdFNGU0JMaXN0KCkgewpAQCAtOTEsNDcgKzkxLDQ3IEBACiAKICAgICBwdWJsaWMgdm9pZCBhY2Nlc3NTRlNCKCkgewogICAgICAgICB0cnkgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldhaXRpbmcgZm9yIDEwIHNlY29uZHMgYmVmb3JlIGFjY2Vzc2luZy4uLiIpOwotCSAgICBmb3IgKGludCBpPTA7IGk8MTA7IGkrKykgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIiIgKyAoMTAgLSBpKSArICIgc2Vjb25kcyBsZWZ0Li4uIik7Ci0JCXRyeSB7Ci0JCSAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNsZWVwKDEqMTAwMCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQl9Ci0JICAgIH0KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXYWl0aW5nIGZvciAxMCBzZWNvbmRzIGJlZm9yZSBhY2Nlc3NpbmcuLi4iKTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPDEwOyBpKyspIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIiICsgKDEwIC0gaSkgKyAiIHNlY29uZHMgbGVmdC4uLiIpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCgxKjEwMDApOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgfQorICAgICAgICB9CiAKICAgICAgICAgICAgIGJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKICAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IE1BWF9TRlNCUzsgaSsrKSB7CiAgICAgICAgICAgICAgICAgdHJ5IHsKLQkJU0ZTQiBzZnNiID0gKFNGU0IpIHNmc2JMaXN0LmdldChpKTsKKyAgICAgICAgU0ZTQiBzZnNiID0gKFNGU0IpIHNmc2JMaXN0LmdldChpKTsKICAgICAgICAgICAgICAgICBTdHJpbmcgc2ZzYk5hbWUgPSBfc2ZzYlByZWZpeCtpOwotCQlTdHJpbmcgcmV0cmlldmVkTmFtZSA9IHNmc2IuZ2V0TmFtZSgpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGJvb2xlYW4gb2sgPSBzZnNiLmlzT0soc2ZzYk5hbWUpOwotCQlpbnQgYWN0Q291bnQgPSBzZnNiLmdldEFjdGl2YXRpb25Db3VudCgpOwotCQlpbnQgcGFzQ291bnQgPSBzZnNiLmdldFBhc3NpdmF0aW9uQ291bnQoKTsKKyAgICAgICAgU3RyaW5nIHJldHJpZXZlZE5hbWUgPSBzZnNiLmdldE5hbWUoKTsKIAotCQlib29sZWFuIGFjdGl2YXRpb25UZXN0ID0gKGFjdENvdW50ICE9IDApOwotCQlib29sZWFuIHBhc3NpdmF0aW9uVGVzdCA9IChwYXNDb3VudCAhPSAwKTsKKyAgICAgICAgICAgICAgICBib29sZWFuIG9rID0gc2ZzYi5pc09LKHNmc2JOYW1lKTsKKyAgICAgICAgaW50IGFjdENvdW50ID0gc2ZzYi5nZXRBY3RpdmF0aW9uQ291bnQoKTsKKyAgICAgICAgaW50IHBhc0NvdW50ID0gc2ZzYi5nZXRQYXNzaXZhdGlvbkNvdW50KCk7CisKKyAgICAgICAgYm9vbGVhbiBhY3RpdmF0aW9uVGVzdCA9IChhY3RDb3VudCAhPSAwKTsKKyAgICAgICAgYm9vbGVhbiBwYXNzaXZhdGlvblRlc3QgPSAocGFzQ291bnQgIT0gMCk7CiAKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJlYW5bIiArIGkgKyAiLyIgKyBNQVhfU0ZTQlMgKyAiXSBuYW1lOiAiICsgc2ZzYk5hbWUKLQkJICAgICsgIjsgcmV0cmlldmVkTmFtZTogIiArIHJldHJpZXZlZE5hbWUKLQkJICAgICsgIjsgb2s6ICIgKyBvawotCQkgICAgKyAiOyAiICsgYWN0aXZhdGlvblRlc3QgKyAiICgiICsgYWN0Q291bnQgKyAiKSIKLQkJICAgICsgIjsgIiArIHBhc3NpdmF0aW9uVGVzdCArICIgKCIgKyBwYXNDb3VudCArICIpIgotCQkpOworICAgICAgICAgICAgKyAiOyByZXRyaWV2ZWROYW1lOiAiICsgcmV0cmlldmVkTmFtZQorICAgICAgICAgICAgKyAiOyBvazogIiArIG9rCisgICAgICAgICAgICArICI7ICIgKyBhY3RpdmF0aW9uVGVzdCArICIgKCIgKyBhY3RDb3VudCArICIpIgorICAgICAgICAgICAgKyAiOyAiICsgcGFzc2l2YXRpb25UZXN0ICsgIiAoIiArIHBhc0NvdW50ICsgIikiCisgICAgICAgICk7CiAKICAgICAgICAgICAgICAgICBwYXNzZWQgPSBwYXNzZWQgJiBzZnNiTmFtZS5lcXVhbHMocmV0cmlldmVkTmFtZSkKICAgICAgICAgICAgICAgICAgICAgJiYgb2sKLQkJICAgICYmIGFjdGl2YXRpb25UZXN0ICYmIHBhc3NpdmF0aW9uVGVzdDsKKyAgICAgICAgICAgICYmIGFjdGl2YXRpb25UZXN0ICYmIHBhc3NpdmF0aW9uVGVzdDsKIAogICAgICAgICAgICAgICAgIGlmICghIHBhc3NlZCkgewogICAgICAgICAgICAgICAgICAgICAvL2JyZWFrOwogICAgICAgICAgICAgICAgIH0KLQkJc2ZzYi5zbGVlcEZvclNlY29uZHMoMSk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJCZWFuWyIgKyBpICsgIl0gR290IGV4Y2VwdGlvbjogIiArIGV4KTsKLQkJfQorICAgICAgICBzZnNiLnNsZWVwRm9yU2Vjb25kcygxKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJlYW5bIiArIGkgKyAiXSBHb3QgZXhjZXB0aW9uOiAiICsgZXgpOworICAgICAgICB9CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChwYXNzZWQpIHsKQEAgLTE0NSw0NCArMTQ1LDQ0IEBACiAgICAgICAgICAgICAgICAgU3RyaW5nIHNmc2JOYW1lID0gX3Nmc2JQcmVmaXgraTsKIAogICAgICAgICAgICAgICAgIHNmc2IubWFrZVN0YXRlTm9uU2VyaWFsaXphYmxlKCk7Ci0JICAgIH0KKyAgICAgICAgfQogCi0JICAgIC8vQ3JlYXRpbmcgdGhlc2UgbWFueSBTRlNCcyBzaG91bGQgZm9yY2UgcGFzc2l2YXRpb24gb2YgdGhlIGFib3ZlCi0JICAgIC8vCW5vbi1zZXJpYWxpemFibGUgYmVhbnMKKyAgICAgICAgLy9DcmVhdGluZyB0aGVzZSBtYW55IFNGU0JzIHNob3VsZCBmb3JjZSBwYXNzaXZhdGlvbiBvZiB0aGUgYWJvdmUKKyAgICAgICAgLy8gICAgbm9uLXNlcmlhbGl6YWJsZSBiZWFucwogICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgTUFYX1NGU0JTOyBpKyspIHsKLQkJaG9tZS5jcmVhdGUoX3Nmc2JQcmVmaXggKyAoaSsxKSoxMDAwKTsKLQkgICAgfQorICAgICAgICBob21lLmNyZWF0ZShfc2ZzYlByZWZpeCArIChpKzEpKjEwMDApOworICAgICAgICB9CiAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJXYWl0aW5nIGZvciAxMCBzZWNvbmRzIGZvciBwYXNzaXZhdGlvbiB0byBjb21wbGV0ZS4uLiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldhaXRpbmcgZm9yIDEwIHNlY29uZHMgZm9yIHBhc3NpdmF0aW9uIHRvIGNvbXBsZXRlLi4uIik7CiAKLQkgICAgZm9yIChpbnQgaT0wOyBpPDEwOyBpKyspIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCIiICsgKDEwIC0gaSkgKyAiIHNlY29uZHMgbGVmdC4uLiIpOwotCQl0cnkgewotCQkgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCgxKjEwMDApOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJfQotCSAgICB9CisgICAgICAgIGZvciAoaW50IGk9MDsgaTwxMDsgaSsrKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIiArICgxMCAtIGkpICsgIiBzZWNvbmRzIGxlZnQuLi4iKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoMSoxMDAwKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIH0KKyAgICAgICAgfQogCiAgICAgICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBNQVhfU0ZTQlM7IGkrKykgewogICAgICAgICAgICAgICAgIFNGU0Igc2ZzYiA9IChTRlNCKSBzZnNiTGlzdC5nZXQoaSk7CiAgICAgICAgICAgICAgICAgU3RyaW5nIHNmc2JOYW1lID0gX3Nmc2JQcmVmaXgraTsKIAogICAgICAgICAgICAgICAgIHRyeSB7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50KCJFeHBlY3RpbmcgZXhjZXB0aW9uIGZvcjogIiArIHNmc2JOYW1lKTsKLQkJICAgIFN0cmluZyBubSA9IHNmc2IuZ2V0TmFtZSgpOwotCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJFUlJPUi4gRGlkbid0IGdldCBleHBlY3RlZCBleGNlcHRpb24uICIKLQkJCSAgICArICJHb3Q6ICIgKyBubSk7Ci0JCSAgICBwYXNzZWQgPSBmYWxzZTsKLQkJICAgIGJyZWFrOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiWyoqR290IEV4Y2VwdGlvbioqXSIpOwotCQl9Ci0JICAgIH0KLQkgICAgaWYgKHBhc3NlZCkgewotCQlzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IG5vbi1zZXJpYWxpemFibGUtc3RhdGUiLCBzdGF0LlBBU1MpOwotCSAgICB9IGVsc2UgewotCQlzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IG5vbi1zZXJpYWxpemFibGUtc3RhdGUiLCBzdGF0LkZBSUwpOwotCSAgICB9CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJFeHBlY3RpbmcgZXhjZXB0aW9uIGZvcjogIiArIHNmc2JOYW1lKTsKKyAgICAgICAgICAgIFN0cmluZyBubSA9IHNmc2IuZ2V0TmFtZSgpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFUlJPUi4gRGlkbid0IGdldCBleHBlY3RlZCBleGNlcHRpb24uICIKKyAgICAgICAgICAgICAgICArICJHb3Q6ICIgKyBubSk7CisgICAgICAgICAgICBwYXNzZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiWyoqR290IEV4Y2VwdGlvbioqXSIpOworICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBhc3NlZCkgeworICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IG5vbi1zZXJpYWxpemFibGUtc3RhdGUiLCBzdGF0LlBBU1MpOworICAgICAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IG5vbi1zZXJpYWxpemFibGUtc3RhdGUiLCBzdGF0LkZBSUwpOworICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBhY2Nlc3NTRlNCIiwgc3RhdC5GQUlMKTsKIApAQCAtMTkxLDI5ICsxOTEsMjkgQEAKIAogCiAgICAgcHVibGljIHZvaWQgcmVtb3ZlVGVzdCgpIHsKLQlTRlNCIHNmc2IgPSBudWxsOwotCXRyeSB7Ci0JICAgIFN0cmluZyBteU5hbWUgPSAiXzJfIiArIF9zZnNiUHJlZml4ICsgIl8yXyI7Ci0JICAgIHNmc2IgPSAoU0ZTQikgaG9tZS5jcmVhdGUobXlOYW1lKTsKLQkgICAgU3RyaW5nIHJldHJpZXZlZE5hbWUgPSBzZnNiLmdldE5hbWUoKTsKLQkgICAgYm9vbGVhbiBuYW1lT0sgPSBteU5hbWUuZXF1YWxzSWdub3JlQ2FzZShyZXRyaWV2ZWROYW1lKTsKLQkgICAgYm9vbGVhbiBnb3RFeGNlcHRpb24gPSBmYWxzZTsKLQkgICAgc2ZzYi5yZW1vdmUoKTsKLQkgICAgRXhjZXB0aW9uIGV4Y2VwID0gbnVsbDsKLQkgICAgdHJ5IHsKLQkJc2ZzYi5nZXROYW1lKCk7Ci0JCWdvdEV4Y2VwdGlvbiA9IGZhbHNlOwkgICAgLy9FeHBlY3RpbmcgYW4gZXhjZXB0aW9uCi0JICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQlnb3RFeGNlcHRpb24gPSB0cnVlOwotCQlleGNlcCA9IGV4OwotCSAgICB9CisgICAgU0ZTQiBzZnNiID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgICBTdHJpbmcgbXlOYW1lID0gIl8yXyIgKyBfc2ZzYlByZWZpeCArICJfMl8iOworICAgICAgICBzZnNiID0gKFNGU0IpIGhvbWUuY3JlYXRlKG15TmFtZSk7CisgICAgICAgIFN0cmluZyByZXRyaWV2ZWROYW1lID0gc2ZzYi5nZXROYW1lKCk7CisgICAgICAgIGJvb2xlYW4gbmFtZU9LID0gbXlOYW1lLmVxdWFsc0lnbm9yZUNhc2UocmV0cmlldmVkTmFtZSk7CisgICAgICAgIGJvb2xlYW4gZ290RXhjZXB0aW9uID0gZmFsc2U7CisgICAgICAgIHNmc2IucmVtb3ZlKCk7CisgICAgICAgIEV4Y2VwdGlvbiBleGNlcCA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgIHNmc2IuZ2V0TmFtZSgpOworICAgICAgICBnb3RFeGNlcHRpb24gPSBmYWxzZTsgICAgICAgIC8vRXhwZWN0aW5nIGFuIGV4Y2VwdGlvbgorICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgZ290RXhjZXB0aW9uID0gdHJ1ZTsKKyAgICAgICAgZXhjZXAgPSBleDsKKyAgICAgICAgfQogCi0JICAgIFN0cmluZyByZXN1bHRTdHIgPSAiKCIgKyBuYW1lT0sgKyAiIEBAQCAiICsgZ290RXhjZXB0aW9uICsgIikiOworICAgICAgICBTdHJpbmcgcmVzdWx0U3RyID0gIigiICsgbmFtZU9LICsgIiBAQEAgIiArIGdvdEV4Y2VwdGlvbiArICIpIjsKICAgICAgICAgICAgIGlmIChuYW1lT0sgJiYgZ290RXhjZXB0aW9uKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCByZW1vdmVUZXN0ICIgKyByZXN1bHRTdHIsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiPT09PT09PiBGQUlMIDIgYmVjYXVzZTogbmFtZU9LOiAiICsgbmFtZU9LICsgIiBnb3RFeGNlcHRpb246ICIgKyBnb3RFeGNlcHRpb24pOwotCQlzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IHJlbW92ZVRlc3QgIiArIHJlc3VsdFN0ciwgc3RhdC5GQUlMKTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCByZW1vdmVUZXN0ICIgKyByZXN1bHRTdHIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9saXN0ZW5lci9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2xpc3RlbmVyL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCmluZGV4IDllY2YwMDEuLjNmNmUxYTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2xpc3RlbmVyL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2xpc3RlbmVyL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCkBAIC0yNSw3ICsyNSw3IEBACiAgICAgICAgIDxqbmRpLW5hbWU+ZWpiL2VqYl9zZnNiX2xpZmVjeWNsZV9TRlNCPC9qbmRpLW5hbWU+CiAgICAgICAgIDxiZWFuLWNhY2hlPgogICAgICAgICAgICAgPG1heC1jYWNoZS1zaXplPjg8L21heC1jYWNoZS1zaXplPgotCSAgICA8cmVzaXplLXF1YW50aXR5PjQ8L3Jlc2l6ZS1xdWFudGl0eT4KKyAgICAgICAgPHJlc2l6ZS1xdWFudGl0eT40PC9yZXNpemUtcXVhbnRpdHk+CiAgICAgICAgIDwvYmVhbi1jYWNoZT4KICAgICAgPC9lamI+CiAgICA8L2VudGVycHJpc2UtYmVhbnM+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9saXN0ZW5lci9lamIvU0ZTQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvbGlzdGVuZXIvZWpiL1NGU0IuamF2YQppbmRleCA5YTExNDg4Li4yYmY5ZmZmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9saXN0ZW5lci9lamIvU0ZTQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2xpc3RlbmVyL2VqYi9TRlNCLmphdmEKQEAgLTI0LDIzICsyNCwyMyBAQAogewogCiAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLQl0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgaW50IGdldEFjdGl2YXRpb25Db3VudCgpCi0JdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIGludCBnZXRQYXNzaXZhdGlvbkNvdW50KCkKLQl0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgdm9pZCBtYWtlU3RhdGVOb25TZXJpYWxpemFibGUoKQotCXRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyB2b2lkIHNsZWVwRm9yU2Vjb25kcyhpbnQgc2VjKQotCXRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBib29sZWFuIGlzT0soU3RyaW5nIG5hbWUpCi0JdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIHZvaWQgdW51c2VkTWV0aG9kKCkKLQl0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9saXN0ZW5lci9lamIvU0ZTQkVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvbGlzdGVuZXIvZWpiL1NGU0JFSkIuamF2YQppbmRleCA4MzhhNWFmLi44ZTg2MDMzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9saXN0ZW5lci9lamIvU0ZTQkVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2xpc3RlbmVyL2VqYi9TRlNCRUpCLmphdmEKQEAgLTMyLDcgKzMyLDcgQEAKIEBDYWxsYmFja0xpc3RlbmVyKCJjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLnNmc2IubGlmZWN5Y2xlLmVqYi5MaWZlY3ljbGVMaXN0ZW5lciIpCiBAU3RhdGVmdWwKIHB1YmxpYyBjbGFzcyBTRlNCRUpCCi0gICAgaW1wbGVtZW50cyBTZXNzaW9uQmVhbiAKKyAgICBpbXBsZW1lbnRzIFNlc3Npb25CZWFuCiB7CiAKICAgICBwcml2YXRlIENvbnRleHQgZW52Q3R4OwpAQCAtNDgsNyArNDgsNyBAQAogICAgIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgICAgICAgICAgIHNmc2JOYW1lOwogICAgIHByaXZhdGUgU3RyaW5nICAgICAgICAgICAgICAgICAgICAgIGVudkVudHJ5VGFnVmFsdWU7CiAgICAgcHJpdmF0ZSBTRlNCSG9tZSAgICAgICAgICAgICAgICAgICAgc2ZzYkhvbWU7Ci0gICAgcHJpdmF0ZSBTRlNCICAgICAgICAgICAgICAgICAgICAgICAgc2ZzYlJlbW90ZTsgICAgCisgICAgcHJpdmF0ZSBTRlNCICAgICAgICAgICAgICAgICAgICAgICAgc2ZzYlJlbW90ZTsKICAgICBwcml2YXRlIFNGU0JMb2NhbEhvbWUgICAgICAgICAgICAgICBzZnNiTG9jYWxIb21lOwogICAgIHByaXZhdGUgU0ZTQkxvY2FsICAgICAgICAgICAgICAgICAgIHNmc2JMb2NhbDsKIApAQCAtNTcsOSArNTcsOSBAQAogICAgIHByaXZhdGUgVXNlclRyYW5zYWN0aW9uICAgICAgICAgICAgIHVzZXJUcmFuc2FjdGlvbjE7CiAgICAgcHJpdmF0ZSBVc2VyVHJhbnNhY3Rpb24gICAgICAgICAgICAgdXNlclRyYW5zYWN0aW9uMjsKIAotICAgIHByaXZhdGUgaW50CQkJCWFjdGl2YXRpb25Db3VudDsKLSAgICBwcml2YXRlIGludAkJCQlwYXNzaXZhdGlvbkNvdW50OwotICAgIHByaXZhdGUgT2JqZWN0CQkJbm9uU2VyaWFsaXphYmxlU3RhdGU7CisgICAgcHJpdmF0ZSBpbnQgICAgICAgICAgICAgICAgYWN0aXZhdGlvbkNvdW50OworICAgIHByaXZhdGUgaW50ICAgICAgICAgICAgICAgIHBhc3NpdmF0aW9uQ291bnQ7CisgICAgcHJpdmF0ZSBPYmplY3QgICAgICAgICAgICBub25TZXJpYWxpemFibGVTdGF0ZTsKIAogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZShTdHJpbmcgc2ZzYk5hbWUpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICgiSW4gU0ZTQi5lamJDcmVhdGUoKSBmb3IgbmFtZSAtPiAiICsgc2ZzYk5hbWUpOwpAQCAtNjgsMTMgKzY4LDEzIEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzZnNiSG9tZSA9IChTRlNCSG9tZSkgc2Vzc2lvbkN0eC5nZXRFSkJIb21lKCk7CiAgICAgICAgICAgICBzZnNiTG9jYWxIb21lID0gKFNGU0JMb2NhbEhvbWUpIHNlc3Npb25DdHguZ2V0RUpCTG9jYWxIb21lKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaG9tZUhhbmRsZSA9IHNmc2JIb21lLmdldEhvbWVIYW5kbGUoKTsKICAgICAgICAgICAgIGhhbmRsZSA9IHNlc3Npb25DdHguZ2V0RUpCT2JqZWN0KCkuZ2V0SGFuZGxlKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgdXNlclRyYW5zYWN0aW9uMSA9IHNlc3Npb25DdHguZ2V0VXNlclRyYW5zYWN0aW9uKCk7CiAgICAgICAgICAgICB1c2VyVHJhbnNhY3Rpb24yID0gKFVzZXJUcmFuc2FjdGlvbikgbmV3IEluaXRpYWxDb250ZXh0KCkuCi0JICAgIGxvb2t1cCgiamF2YTpjb21wL1VzZXJUcmFuc2FjdGlvbiIpOworICAgICAgICBsb29rdXAoImphdmE6Y29tcC9Vc2VyVHJhbnNhY3Rpb24iKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIC8vVE9ETwpAQCAtMTMzLDcgKzEzMyw3IEBACiAgICAgcHVibGljIGJvb2xlYW4gY2hlY2tVc2VyVHJhbnNhY3Rpb24oKSB7CiAgICAgICAgIGJvb2xlYW4gc3RhdHVzID0KICAgICAgICAgICAgICgodXNlclRyYW5zYWN0aW9uMSAhPSBudWxsKSAmJiAodXNlclRyYW5zYWN0aW9uMiAhPSBudWxsKSk7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpZiggc3RhdHVzICkgewogICAgICAgICAgICAgICAgIHVzZXJUcmFuc2FjdGlvbjEuYmVnaW4oKTsKQEAgLTE4NCw5ICsxODQsOSBAQAogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBvayA9IGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHRoaXMubWVzc2FnZSA9IChvaykgPyBudWxsIDogKGZpZWxkTmFtZSArICIgbm90IHJlc3RvcmVkIHByb3Blcmx5Iik7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBvazsKICAgICB9CiAKQEAgLTE5NSwyMiArMTk1LDIyIEBACiAgICAgfQogCiAgICAgcHVibGljIGludCBnZXRBY3RpdmF0aW9uQ291bnQoKSB7Ci0JcmV0dXJuIHRoaXMuYWN0aXZhdGlvbkNvdW50OworICAgIHJldHVybiB0aGlzLmFjdGl2YXRpb25Db3VudDsKICAgICB9CiAKICAgICBwdWJsaWMgaW50IGdldFBhc3NpdmF0aW9uQ291bnQoKSB7Ci0JcmV0dXJuIHRoaXMucGFzc2l2YXRpb25Db3VudDsKKyAgICByZXR1cm4gdGhpcy5wYXNzaXZhdGlvbkNvdW50OwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIG1ha2VTdGF0ZU5vblNlcmlhbGl6YWJsZSgpIHsKLQlub25TZXJpYWxpemFibGVTdGF0ZSA9IG5ldyBPYmplY3QoKTsKKyAgICBub25TZXJpYWxpemFibGVTdGF0ZSA9IG5ldyBPYmplY3QoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzbGVlcEZvclNlY29uZHMoaW50IHNlYykgewotCXRyeSB7Ci0JICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoc2VjICogMTAwMCk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JfQorICAgIHRyeSB7CisgICAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoc2VjICogMTAwMCk7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHVudXNlZE1ldGhvZCgpIHsKQEAgLTIzMiw3ICsyMzIsNyBAQAogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHt9CiAKICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsKLQl0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJDb250YWluZXIgY2FsbGVkIGVqYkFjdGl2YXRlPz8/Pz8iKTsKKyAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJDb250YWluZXIgY2FsbGVkIGVqYkFjdGl2YXRlPz8/Pz8iKTsKICAgICB9CiAKICAgICB2b2lkIHBvc3RBY3RpdmF0ZSgpIHsKQEAgLTI0MCw3ICsyNDAsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHsKLQl0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJDb250YWluZXIgY2FsbGVkIGVqYlBhc3NpdmF0ZT8/Pz8/Iik7CisgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiQ29udGFpbmVyIGNhbGxlZCBlamJQYXNzaXZhdGU/Pz8/PyIpOwogICAgIH0KIAogICAgIEBQcmVQYXNzaXZhdGUKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2xpc3RlbmVyL2VqYi9TRlNCTG9jYWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2xpc3RlbmVyL2VqYi9TRlNCTG9jYWwuamF2YQppbmRleCA4NzcxNWJlLi5iMjM0MGIyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9saXN0ZW5lci9lamIvU0ZTQkxvY2FsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvbGlzdGVuZXIvZWpiL1NGU0JMb2NhbC5qYXZhCkBAIC0yMSw1ICsyMSw1IEBACiBwdWJsaWMgaW50ZXJmYWNlIFNGU0JMb2NhbAogICAgIGV4dGVuZHMgRUpCTG9jYWxPYmplY3QKIHsKLSAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKTsJCisgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9saXN0ZW5lci9lamIvU0ZTQkxvY2FsSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvbGlzdGVuZXIvZWpiL1NGU0JMb2NhbEhvbWUuamF2YQppbmRleCBiODhkYzJkLi40MTUwYmE3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9saXN0ZW5lci9lamIvU0ZTQkxvY2FsSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2xpc3RlbmVyL2VqYi9TRlNCTG9jYWxIb21lLmphdmEKQEAgLTIyLDYgKzIyLDYgQEAKIHB1YmxpYyBpbnRlcmZhY2UgU0ZTQkxvY2FsSG9tZQogICAgIGV4dGVuZHMgRUpCTG9jYWxIb21lCiB7Ci0JcHVibGljIFNGU0JMb2NhbCBjcmVhdGUoU3RyaW5nIHNmc2JOYW1lKQorICAgIHB1YmxpYyBTRlNCTG9jYWwgY3JlYXRlKFN0cmluZyBzZnNiTmFtZSkKICAgICAgICAgICAgIHRocm93cyBDcmVhdGVFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9saXN0ZW5lci9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9saXN0ZW5lci9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggNjZjNGIxMi4uODNmYjI4YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvbGlzdGVuZXIvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2xpc3RlbmVyL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSw3ICsxLDcgQEAKLURyb3AgdGFibGUgU2ltcGxlRW50aXR5Ow0KLQ0KLUNSRUFURSBUQUJMRSBTaW1wbGVFbnRpdHkgKA0KLSAgICBrZXkgICAgIGNoYXIoMTI4KSBub3QgbnVsbCwNCi0gICAgbmFtZSAgICBjaGFyKDEyOCkNCi0pOw0KLQ0KK0Ryb3AgdGFibGUgU2ltcGxlRW50aXR5OworCitDUkVBVEUgVEFCTEUgU2ltcGxlRW50aXR5ICgKKyAgICBrZXkgICAgIGNoYXIoMTI4KSBub3QgbnVsbCwKKyAgICBuYW1lICAgIGNoYXIoMTI4KQorKTsKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvbGlzdGVuZXIvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL2xpc3RlbmVyL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggOTM1YzRhNi4uM2YyMWFlYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvbGlzdGVuZXIvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9saXN0ZW5lci9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xICsxIEBACi1Ecm9wIHRhYmxlIFNpbXBsZUVudGl0eTsNCitEcm9wIHRhYmxlIFNpbXBsZUVudGl0eTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCAxYWQ2MTg3Li41OWJmNzllIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDcgKzEsNyBAQAotRHJvcCB0YWJsZSBTaW1wbGVFbnRpdHk7DQotDQotQ1JFQVRFIFRBQkxFIFNpbXBsZUVudGl0eSAoDQotICAgIGtleWlkICAgICBjaGFyKDEyOCkgbm90IG51bGwsDQotICAgIG5hbWUgICAgY2hhcigxMjgpDQotKTsNCi0NCitEcm9wIHRhYmxlIFNpbXBsZUVudGl0eTsKKworQ1JFQVRFIFRBQkxFIFNpbXBsZUVudGl0eSAoCisgICAga2V5aWQgICAgIGNoYXIoMTI4KSBub3QgbnVsbCwKKyAgICBuYW1lICAgIGNoYXIoMTI4KQorKTsKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3Bhc3NpdmF0ZWFjdGl2YXRlL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggOTM1YzRhNi4uM2YyMWFlYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2IvcGFzc2l2YXRlYWN0aXZhdGUvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9wYXNzaXZhdGVhY3RpdmF0ZS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xICsxIEBACi1Ecm9wIHRhYmxlIFNpbXBsZUVudGl0eTsNCitEcm9wIHRhYmxlIFNpbXBsZUVudGl0eTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3N0cmVzcy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Ivc3RyZXNzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMTIwODQ0Ni4uOTgzYTU0NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Ivc3RyZXNzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Ivc3RyZXNzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIyICsxNSwyMiBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLXNmc2Itc3RyZXNzIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0ibG9hZGdlbmVyYXRvci5jbGllbnQiIHZhbHVlPSJjb20uc3VuLnMxYXNkZXYuZWpiLnNmc2Iuc3RyZXNzLmNsaWVudC5Mb2FkR2VuZXJhdG9yIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9zdHJlc3MvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Ivc3RyZXNzL2J1aWxkLnhtbAppbmRleCA4NDEzMmQwLi5jZWRlMzBmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9zdHJlc3MvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3N0cmVzcy9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ4LDEzICs0OCwxMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudCouY2xhc3MsICoqLypMb2FkKi5jbGFzcyAqKi8qU0ZTQiouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iYnVpbGQsaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtZWpiLXNxbC1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CkBAIC02OSw3ICs2OSw3IEBACiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAtLT4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDwhLS0KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CkBAIC04MSwxMyArODEsMTMgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLWVqYi1zcWwtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX3BvaW50YmFzZS5zcWwiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW5sb2FkZ2VuZXJhdG9yIj4KICAgICAgICA8amF2YSAgZm9yaz0idHJ1ZSIgZmFpbG9uZXJyb3I9InRydWUiCkBAIC05Nyw3ICs5Nyw3IEBACiAgICAgICAgICAgIDxhcmcgdmFsdWU9ImVqYi9lamJfc2ZzYl9zdHJlc3NfU3RyZXNzU0ZTQkhvbWUiLz4KICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtpY3R4LnByb3BzfSIvPgogICAgICAgICA8L2phdmE+Ci0gICAgPC90YXJnZXQ+ICAgICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuX2Nvc25hbWluZyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmxvYWRnZW5lcmF0b3IiPgpAQCAtMTA4LDcgKzEwOCw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9zdHJlc3MvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Ivc3RyZXNzL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBkNjE1NzFiLi5lMWZjZjkyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9zdHJlc3MvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3N0cmVzcy9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTM0LDggKzM0LDggQEAKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBrVGVzdE5vdFJ1biAgICA9ICJURVNUIE5PVCBSVU4iOwogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGtUZXN0UGFzc2VkICAgID0gIlRFU1QgUEFTU0VEIjsKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBrVGVzdEZhaWxlZCAgICA9ICJURVNUIEZBSUxFRCI7Ci0gICAgCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKworICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50ICAgIE1BWF9TRlNCUyA9IDQwOwpAQCAtNTAsMTMgKzUwLDEzIEBACiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbc3RyZXNzQ2xpZW50XSBET05FIGRvVGVzdCgpLi4uIik7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJzdHJlc3MiKTsKLSAgICB9ICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICBpbml0U0ZTQkxpc3QoKTsgICAgIC8vY3JlYXRlIFNGU0JzIAorICAgICAgICBpbml0U0ZTQkxpc3QoKTsgICAgIC8vY3JlYXRlIFNGU0JzCiAgICAgICAgIGFjY2Vzc1NGU0IoKTsgICAgICAgLy9hY2Nlc3MgdGhlIFNGQlMKIAogICAgIH0KQEAgLTkyLDcgKzkyLDcgQEAKICAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IE1BWF9TRlNCUzsgaSsrKSB7CiAgICAgICAgICAgICAgICAgU3RyZXNzU0ZTQiBzZnNiID0gKFN0cmVzc1NGU0IpIHNmc2JMaXN0LmdldChpKTsKICAgICAgICAgICAgICAgICBTdHJpbmcgc2ZzYk5hbWUgPSAiU0ZTQl8iK2k7Ci0gICAgICAgICAgICAgICAgCisKIAogICAgICAgICAgICAgICAgIHBhc3NlZCA9IHNmc2IuZG9Xb3JrKChsb25nKSAyMDAwKTsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Ivc3RyZXNzL2NsaWVudC9Mb2FkR2VuZXJhdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9zdHJlc3MvY2xpZW50L0xvYWRHZW5lcmF0b3IuamF2YQppbmRleCA3MjVkMmM0Li5kZjI1NjcxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9zdHJlc3MvY2xpZW50L0xvYWRHZW5lcmF0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9zdHJlc3MvY2xpZW50L0xvYWRHZW5lcmF0b3IuamF2YQpAQCAtMjgsMjcgKzI4LDI3IEBACiAKIHB1YmxpYyBjbGFzcyBMb2FkR2VuZXJhdG9yIHsKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9Ci0gICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsgICAgCi0gICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHByb3BzRmlsZU5hbWUgPSAKLQkiL2V4cG9ydC9ob21lL3MxYXMvY3RzL3dzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Ivc3RyZXNzL2NsaWVudC9qbmRpLnByb3BlcnRpZXMiOworICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHByb3BzRmlsZU5hbWUgPQorICAgICIvZXhwb3J0L2hvbWUvczFhcy9jdHMvd3MvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9zdHJlc3MvY2xpZW50L2puZGkucHJvcGVydGllcyI7CiAKICAgICBwcml2YXRlIENvbnRleHQgY3R4OwogICAgIHByaXZhdGUgU3RyZXNzU0ZTQkhvbWUgaG9tZTsKIAogICAgIHB1YmxpYyBMb2FkR2VuZXJhdG9yKFN0cmluZ1tdIGFyZ3MpCi0JdGhyb3dzIEV4Y2VwdGlvbgorICAgIHRocm93cyBFeGNlcHRpb24KICAgICB7Ci0JU3RyaW5nIGpuZGlOYW1lID0gYXJnc1swXTsKLQljdHggPSBnZXRDb250ZXh0KGFyZ3NbMV0pOyAgICAKKyAgICBTdHJpbmcgam5kaU5hbWUgPSBhcmdzWzBdOworICAgIGN0eCA9IGdldENvbnRleHQoYXJnc1sxXSk7CiAKLQlPYmplY3QgcmVmID0gY3R4Lmxvb2t1cChqbmRpTmFtZSk7Ci0JdGhpcy5ob21lID0gKFN0cmVzc1NGU0JIb21lKSAKLQkgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KHJlZiwgU3RyZXNzU0ZTQkhvbWUuY2xhc3MpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiTG9hZEdlbmVyYXRvciBnb3QgaG9tZTogIiArIGhvbWUuZ2V0Q2xhc3MoKSk7CisgICAgT2JqZWN0IHJlZiA9IGN0eC5sb29rdXAoam5kaU5hbWUpOworICAgIHRoaXMuaG9tZSA9IChTdHJlc3NTRlNCSG9tZSkKKyAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KHJlZiwgU3RyZXNzU0ZTQkhvbWUuY2xhc3MpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9hZEdlbmVyYXRvciBnb3QgaG9tZTogIiArIGhvbWUuZ2V0Q2xhc3MoKSk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSBJbml0aWFsQ29udGV4dCBnZXRDb250ZXh0KFN0cmluZyBwcm9wc0ZpbGVOYW1lKQotCXRocm93cyBFeGNlcHRpb24KKyAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICAgewogICAgICAgICBJbml0aWFsQ29udGV4dCBpYzsKIApAQCAtNjYsMjEgKzY2LDIxIEBACiAKIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLQlmb3IgKGludCBpPTA7IGk8MTA7IGkrKykgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0aW5nIFN0cmVzc1NGU0JDbGllbnRbIiArIGkgKyAiXSIpOwotCSAgICBTdHJpbmcgY2xpZW50TmFtZSA9ICJjbGllbnQtIitpOwotCSAgICBTdHJlc3NTRlNCQ2xpZW50IGNsaWVudCA9IG5ldyBTdHJlc3NTRlNCQ2xpZW50KGNsaWVudE5hbWUsCi0JCSAgICBob21lLCAxMCk7Ci0JfQorICAgIGZvciAoaW50IGk9MDsgaTwxMDsgaSsrKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRpbmcgU3RyZXNzU0ZTQkNsaWVudFsiICsgaSArICJdIik7CisgICAgICAgIFN0cmluZyBjbGllbnROYW1lID0gImNsaWVudC0iK2k7CisgICAgICAgIFN0cmVzc1NGU0JDbGllbnQgY2xpZW50ID0gbmV3IFN0cmVzc1NGU0JDbGllbnQoY2xpZW50TmFtZSwKKyAgICAgICAgICAgIGhvbWUsIDEwKTsKKyAgICB9CiAgICAgfQogCiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHRyeSB7Ci0JICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oImVqYi1zZnNiLXN0cmVzcyIpOwotCSAgICBMb2FkR2VuZXJhdG9yIGdlbmVyYXRvciA9IG5ldyBMb2FkR2VuZXJhdG9yKGFyZ3MpOwotCSAgICBnZW5lcmF0b3IuZG9UZXN0KCk7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCJlamItc2ZzYi1zdHJlc3MgbWFpbiIsIHN0YXQuUEFTUyk7CisgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oImVqYi1zZnNiLXN0cmVzcyIpOworICAgICAgICBMb2FkR2VuZXJhdG9yIGdlbmVyYXRvciA9IG5ldyBMb2FkR2VuZXJhdG9yKGFyZ3MpOworICAgICAgICBnZW5lcmF0b3IuZG9UZXN0KCk7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamItc2ZzYi1zdHJlc3MgbWFpbiIsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiLXNmc2Itc3RyZXNzIG1haW4iLCBzdGF0LkZBSUwpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Ivc3RyZXNzL2NsaWVudC9TdHJlc3NTRlNCQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9zdHJlc3MvY2xpZW50L1N0cmVzc1NGU0JDbGllbnQuamF2YQppbmRleCBjNjM1ODQ5Li5iYmZhNWQwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9zdHJlc3MvY2xpZW50L1N0cmVzc1NGU0JDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9zdHJlc3MvY2xpZW50L1N0cmVzc1NGU0JDbGllbnQuamF2YQpAQCAtMzMsNDEgKzMzLDQxIEBACiAgICAgaW1wbGVtZW50cyBSdW5uYWJsZQogewogCi0gICAgU3RyaW5nCSAgICBuYW1lOworICAgIFN0cmluZyAgICAgICAgbmFtZTsKICAgICBTdHJlc3NTRlNCSG9tZSAgaG9tZTsKLSAgICBBcnJheUxpc3QJICAgIGxpc3Q7Ci0gICAgaW50CQkgICAgbWF4QWN0aXZlQ291bnQ7Ci0gICAgYm9vbGVhbgkgICAgc3VjY2VzcyA9IHRydWU7Ci0gICAgaW50CQkgICAgbWF4SXRlciA9IDU7Ci0gICAgVGhyZWFkCSAgICB0aHJlYWQ7CisgICAgQXJyYXlMaXN0ICAgICAgICBsaXN0OworICAgIGludCAgICAgICAgICAgIG1heEFjdGl2ZUNvdW50OworICAgIGJvb2xlYW4gICAgICAgIHN1Y2Nlc3MgPSB0cnVlOworICAgIGludCAgICAgICAgICAgIG1heEl0ZXIgPSA1OworICAgIFRocmVhZCAgICAgICAgdGhyZWFkOwogCiAgICAgcHVibGljIFN0cmVzc1NGU0JDbGllbnQoU3RyaW5nIG5hbWUsCi0JICAgIFN0cmVzc1NGU0JIb21lIGhvbWUsIGludCBtYXhBY3RpdmVDb3VudCkKKyAgICAgICAgU3RyZXNzU0ZTQkhvbWUgaG9tZSwgaW50IG1heEFjdGl2ZUNvdW50KQogICAgIHsKLQl0aHJlYWQgPSBuZXcgVGhyZWFkKHRoaXMsIG5hbWUpOwotCXRoaXMubmFtZSA9IG5hbWU7Ci0JdGhpcy5ob21lID0gaG9tZTsKLQl0aGlzLm1heEFjdGl2ZUNvdW50ID0gbWF4QWN0aXZlQ291bnQ7Ci0JdGhpcy5saXN0ID0gbmV3IEFycmF5TGlzdChtYXhBY3RpdmVDb3VudCk7Ci0JdGhyZWFkLnN0YXJ0KCk7CisgICAgdGhyZWFkID0gbmV3IFRocmVhZCh0aGlzLCBuYW1lKTsKKyAgICB0aGlzLm5hbWUgPSBuYW1lOworICAgIHRoaXMuaG9tZSA9IGhvbWU7CisgICAgdGhpcy5tYXhBY3RpdmVDb3VudCA9IG1heEFjdGl2ZUNvdW50OworICAgIHRoaXMubGlzdCA9IG5ldyBBcnJheUxpc3QobWF4QWN0aXZlQ291bnQpOworICAgIHRocmVhZC5zdGFydCgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlN0cmVzc1NGU0JDbGllbnQ6ICIgKyBuYW1lICsgIiBzdGFydGVkLi4uLiIpOwotCXRyeSB7Ci0JICAgIGZvciAoaW50IGk9MDsgaTxtYXhBY3RpdmVDb3VudDsgaSsrKSB7Ci0JCWxpc3QuYWRkKGhvbWUuY3JlYXRlKG5hbWUrIi0iK2kpKTsKLQkgICAgfQotCSAgICBmb3IgKGludCBjb3VudCA9IDA7IGNvdW50IDwgbWF4SXRlcjsgY291bnQrKykgewotCQlmb3IgKGludCBpPTA7IGk8bWF4QWN0aXZlQ291bnQ7IGkrKykgewotCQkgICAgU3RyZXNzU0ZTQiBzZnNiID0gKFN0cmVzc1NGU0IpIGxpc3QuZ2V0KGkpOwotCQkgICAgc2ZzYi5waW5nKCk7Ci0JCX0KLQkgICAgfQotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCSAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgc3VjY2VzcyA9IGZhbHNlOwotCX0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0cmVzc1NGU0JDbGllbnQ6ICIgKyBuYW1lICsgIiBzdGFydGVkLi4uLiIpOworICAgIHRyeSB7CisgICAgICAgIGZvciAoaW50IGk9MDsgaTxtYXhBY3RpdmVDb3VudDsgaSsrKSB7CisgICAgICAgIGxpc3QuYWRkKGhvbWUuY3JlYXRlKG5hbWUrIi0iK2kpKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGludCBjb3VudCA9IDA7IGNvdW50IDwgbWF4SXRlcjsgY291bnQrKykgeworICAgICAgICBmb3IgKGludCBpPTA7IGk8bWF4QWN0aXZlQ291bnQ7IGkrKykgeworICAgICAgICAgICAgU3RyZXNzU0ZTQiBzZnNiID0gKFN0cmVzc1NGU0IpIGxpc3QuZ2V0KGkpOworICAgICAgICAgICAgc2ZzYi5waW5nKCk7CisgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAgIH0KICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3N0cmVzcy9lamIvU3RyZXNzU0ZTQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Ivc3RyZXNzL2VqYi9TdHJlc3NTRlNCLmphdmEKaW5kZXggZmE2MmJiZi4uZDJkY2E0YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Ivc3RyZXNzL2VqYi9TdHJlc3NTRlNCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Ivc3RyZXNzL2VqYi9TdHJlc3NTRlNCLmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKIHsKIAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0JdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIGJvb2xlYW4gaGFzU2FtZU5hbWUoU3RyaW5nIG5hbWUpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9zdHJlc3MvZWpiL1N0cmVzc1NGU0JCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9zdHJlc3MvZWpiL1N0cmVzc1NGU0JCZWFuLmphdmEKaW5kZXggNjNkODcyMS4uNDY3OWUzMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Ivc3RyZXNzL2VqYi9TdHJlc3NTRlNCQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3N0cmVzcy9lamIvU3RyZXNzU0ZTQkJlYW4uamF2YQpAQCAtMzAsNyArMzAsNyBAQAogaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIAogcHVibGljIGNsYXNzIFN0cmVzc1NGU0JCZWFuCi0gICAgaW1wbGVtZW50cyBTZXNzaW9uQmVhbiAKKyAgICBpbXBsZW1lbnRzIFNlc3Npb25CZWFuCiB7CiAgICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCAgICAgICAgICAgICAgc2Vzc2lvbkN0eDsKICAgICBwcml2YXRlIENvbnRleHQgICAgICAgICAgICAgICAgICAgICBpbml0aWFsQ3R4OwpAQCAtNTIsNyArNTIsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIGRvV29yayhsb25nIG1pbGxpcykgewotCXJldHVybiB0cnVlOworICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9zdHJlc3MvZWpiL1N0cmVzc1NGU0JIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9zdHJlc3MvZWpiL1N0cmVzc1NGU0JIb21lLmphdmEKaW5kZXggNzU4YzJhYS4uMWZmOTJjZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Ivc3RyZXNzL2VqYi9TdHJlc3NTRlNCSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3N0cmVzcy9lamIvU3RyZXNzU0ZTQkhvbWUuamF2YQpAQCAtMjQsNSArMjQsNSBAQAogICAgIGV4dGVuZHMgRUpCSG9tZQogewogICAgIHB1YmxpYyBTdHJlc3NTRlNCIGNyZWF0ZShTdHJpbmcgc2ZzYk5hbWUpCi0JdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOworICAgIHRocm93cyBDcmVhdGVFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3N0cmVzcy9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9zdHJlc3Mvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IDg1MDRjM2UuLjU4MzQyZDUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3N0cmVzcy9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Nmc2Ivc3RyZXNzL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSw3ICsxLDcgQEAKLURyb3AgdGFibGUgU3RyZXNzRW50aXR5Ow0KLQ0KLUNSRUFURSBUQUJMRSBTdHJlc3NFbnRpdHkgKA0KLSAgICBrZXkgICAgIGNoYXIoMjApIG5vdCBudWxsLA0KLSAgICBuYW1lICAgIGNoYXIoMjApDQotKTsNCi0NCitEcm9wIHRhYmxlIFN0cmVzc0VudGl0eTsKKworQ1JFQVRFIFRBQkxFIFN0cmVzc0VudGl0eSAoCisgICAga2V5ICAgICBjaGFyKDIwKSBub3QgbnVsbCwKKyAgICBuYW1lICAgIGNoYXIoMjApCispOworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc2ZzYi9zdHJlc3Mvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3N0cmVzcy9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IGVhMDU0ODcuLjJhMTgxN2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3N0cmVzcy9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zZnNiL3N0cmVzcy9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xICsxIEBACi1Ecm9wIHRhYmxlIFN0cmVzc0VudGl0eTsNCitEcm9wIHRhYmxlIFN0cmVzc0VudGl0eTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHJlc3MvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0cmVzcy9idWlsZC54bWwKaW5kZXggNGQ0NzUyZC4uMmUwNTFiYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0cmVzcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0cmVzcy9idWlsZC54bWwKQEAgLTM3LDExICszNywxMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+Ci0JCVVzYWdlOgotCQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamItc2ZzYiB0ZXN0cykKLQkJCWFudCBwYXNzaXZhdGVhY3RpdmF0ZSAoRXhlY3V0ZXMgdGhlIGVqYi1zZnNiLXBhc3NpdmF0ZWFjdGl2YXRlIHRlc3QpCi0JCQlhbnQgc2ZzYmNhY2hlIChFeGVjdXRlcyB0aGUgZWpiLXNmc2Itc2ZzYmNhY2hlIHRlc3QpCi0JPC9lY2hvPgorICAgIDxlY2hvPgorICAgICAgICBVc2FnZToKKyAgICAgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZWpiLXNmc2IgdGVzdHMpCisgICAgICAgICAgICBhbnQgcGFzc2l2YXRlYWN0aXZhdGUgKEV4ZWN1dGVzIHRoZSBlamItc2ZzYi1wYXNzaXZhdGVhY3RpdmF0ZSB0ZXN0KQorICAgICAgICAgICAgYW50IHNmc2JjYWNoZSAoRXhlY3V0ZXMgdGhlIGVqYi1zZnNiLXNmc2JjYWNoZSB0ZXN0KQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHJlc3MvcGFzc2l2YXRlYWN0aXZhdGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHJlc3MvcGFzc2l2YXRlYWN0aXZhdGUvYnVpbGQucHJvcGVydGllcwppbmRleCA2MGNlZWExLi4zOGRmNmZmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3RyZXNzL3Bhc3NpdmF0ZWFjdGl2YXRlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0cmVzcy9wYXNzaXZhdGVhY3RpdmF0ZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMSArMTUsMjEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1zdHJlc3MtcGFzc2l2YXRlYWN0aXZhdGUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHJlc3MvcGFzc2l2YXRlYWN0aXZhdGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0cmVzcy9wYXNzaXZhdGVhY3RpdmF0ZS9idWlsZC54bWwKaW5kZXggYWFlZWE2MC4uMTA1NDcwZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0cmVzcy9wYXNzaXZhdGVhY3RpdmF0ZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0cmVzcy9wYXNzaXZhdGVhY3RpdmF0ZS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ4LDE0ICs0OCwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudCouY2xhc3MsICoqLypTRlNCKi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Nyw3ICs2Nyw3IEBACiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAtLT4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDwhLS0KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CkBAIC03OSwxNCArNzksMTQgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHJlc3MvcGFzc2l2YXRlYWN0aXZhdGUvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0cmVzcy9wYXNzaXZhdGVhY3RpdmF0ZS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMmNlOGEwYi4uNGI0MjE4ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0cmVzcy9wYXNzaXZhdGVhY3RpdmF0ZS9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0cmVzcy9wYXNzaXZhdGVhY3RpdmF0ZS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTM0LDggKzM0LDggQEAKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBrVGVzdE5vdFJ1biAgICA9ICJURVNUIE5PVCBSVU4iOwogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGtUZXN0UGFzc2VkICAgID0gIlRFU1QgUEFTU0VEIjsKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBrVGVzdEZhaWxlZCAgICA9ICJURVNUIEZBSUxFRCI7Ci0gICAgCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKworICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50ICAgIE1BWF9TRlNCUyA9IDYwMDsKQEAgLTUwLDEzICs1MCwxMyBAQAogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW3Bhc3NpdmF0ZWFjdGl2YXRlQ2xpZW50XSBET05FIGRvVGVzdCgpLi4uIik7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJwYXNzaXZhdGVhY3RpdmF0ZSIpOwotICAgIH0gIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIGluaXRTRlNCTGlzdCgpOyAgICAgLy9jcmVhdGUgU0ZTQnMgCisgICAgICAgIGluaXRTRlNCTGlzdCgpOyAgICAgLy9jcmVhdGUgU0ZTQnMKICAgICAgICAgYWNjZXNzU0ZTQigpOyAgICAgICAvL2FjY2VzcyB0aGUgU0ZCUwogCiAgICAgfQpAQCAtOTIsNyArOTIsNyBAQAogICAgICAgICAgICAgICAgIFNGU0Igc2ZzYiA9IChTRlNCKSBzZnNiTGlzdC5nZXQoaSk7CiAgICAgICAgICAgICAgICAgU3RyaW5nIHNmc2JOYW1lID0gc2ZzYi5nZXROYW1lKCk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgYWNjZXNzZWQgU0ZTQiBiZWFuIGZvcjogIiArIHNmc2JOYW1lKTsKLSAgICAKKwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgYWNjZXNzU0ZTQiIsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0cmVzcy9wYXNzaXZhdGVhY3RpdmF0ZS9lamIvU0ZTQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0cmVzcy9wYXNzaXZhdGVhY3RpdmF0ZS9lamIvU0ZTQi5qYXZhCmluZGV4IDM1ZmJmMDguLjA0OWJlODYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHJlc3MvcGFzc2l2YXRlYWN0aXZhdGUvZWpiL1NGU0IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3RyZXNzL3Bhc3NpdmF0ZWFjdGl2YXRlL2VqYi9TRlNCLmphdmEKQEAgLTIzLDcgKzIzLDcgQEAKICAgICBleHRlbmRzIEVKQk9iamVjdAogewogCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCkKKyAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHJlc3MvcGFzc2l2YXRlYWN0aXZhdGUvZWpiL1NGU0JFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHJlc3MvcGFzc2l2YXRlYWN0aXZhdGUvZWpiL1NGU0JFSkIuamF2YQppbmRleCA4YjJlYzFkLi5jOTllZWJlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3RyZXNzL3Bhc3NpdmF0ZWFjdGl2YXRlL2VqYi9TRlNCRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0cmVzcy9wYXNzaXZhdGVhY3RpdmF0ZS9lamIvU0ZTQkVKQi5qYXZhCkBAIC0yNiwxMyArMjYsMTMgQEAKIGltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiAKIHB1YmxpYyBjbGFzcyBTRlNCRUpCCi0gICAgaW1wbGVtZW50cyBTZXNzaW9uQmVhbiAKKyAgICBpbXBsZW1lbnRzIFNlc3Npb25CZWFuCiB7Ci0JcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBjb250ZXh0OworICAgIHByaXZhdGUgU2Vzc2lvbkNvbnRleHQgY29udGV4dDsKICAgICBwcml2YXRlIFN0cmluZyBzZnNiTmFtZTsKICAgICBwcml2YXRlIENvbnRleHQgaW5pdGlhbEN0eDsKIAotCXB1YmxpYyB2b2lkIGVqYkNyZWF0ZShTdHJpbmcgc2ZzYk5hbWUpIHsKKyAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoU3RyaW5nIHNmc2JOYW1lKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoIkluIFNGU0IuZWpiQ3JlYXRlKCkgZm9yIG5hbWUgLT4gIiArIHNmc2JOYW1lKTsKICAgICAgICAgdGhpcy5zZnNiTmFtZSA9IHNmc2JOYW1lOwogICAgIH0KQEAgLTQxLDIyICs0MSwyMiBAQAogICAgICAgICByZXR1cm4gdGhpcy5zZnNiTmFtZTsKICAgICB9CiAKLQlwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgewotCQl0aGlzLmNvbnRleHQgPSBzYzsKKyAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgeworICAgICAgICB0aGlzLmNvbnRleHQgPSBzYzsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHRoaXMuaW5pdGlhbEN0eCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdGgpIHsKICAgICAgICAgICAgIHRoLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0JfQorICAgIH0KIAotCXB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHt9CisgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkge30KIAotCXB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgeworICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCJJbiBTRlNCLmVqYkFjdGl2YXRlKCkgZm9yIG5hbWUgLT4gIiArIHNmc2JOYW1lKTsKICAgICB9CiAKLQlwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7CisgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCJJbiBTRlNCLmVqYlBhc3NpdmF0ZSgpIGZvciBuYW1lIC0+ICIgKyBzZnNiTmFtZSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0cmVzcy9wYXNzaXZhdGVhY3RpdmF0ZS9lamIvU0ZTQkhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHJlc3MvcGFzc2l2YXRlYWN0aXZhdGUvZWpiL1NGU0JIb21lLmphdmEKaW5kZXggN2ViZjVjMy4uM2FjZjc3MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0cmVzcy9wYXNzaXZhdGVhY3RpdmF0ZS9lamIvU0ZTQkhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3RyZXNzL3Bhc3NpdmF0ZWFjdGl2YXRlL2VqYi9TRlNCSG9tZS5qYXZhCkBAIC0yMyw2ICsyMyw2IEBACiBwdWJsaWMgaW50ZXJmYWNlIFNGU0JIb21lCiAgICAgZXh0ZW5kcyBFSkJIb21lCiB7Ci0JcHVibGljIFNGU0IgY3JlYXRlKFN0cmluZyBzZnNiTmFtZSkKKyAgICBwdWJsaWMgU0ZTQiBjcmVhdGUoU3RyaW5nIHNmc2JOYW1lKQogICAgICAgICB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3RyZXNzL3Nmc2JjYWNoZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0cmVzcy9zZnNiY2FjaGUvYnVpbGQucHJvcGVydGllcwppbmRleCA5ODg3NTEwLi5mMzlkOWU4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3RyZXNzL3Nmc2JjYWNoZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHJlc3Mvc2ZzYmNhY2hlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIxICsxNSwyMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLXN0cmVzcy1zZnNiY2FjaGUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHJlc3Mvc2ZzYmNhY2hlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHJlc3Mvc2ZzYmNhY2hlL2J1aWxkLnhtbAppbmRleCA3ODQwMjNiLi42NjQ0NDc3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3RyZXNzL3Nmc2JjYWNoZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0cmVzcy9zZnNiY2FjaGUvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OCwxNCArNDgsMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLyoqLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQqLmNsYXNzLCAqKi8qU0ZTQiouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjcsNyArNjcsNyBAQAogICAgICAgICA8L2FudGNhbGw+CiAgICAgLS0+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8IS0tCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgpAQCAtNzksMTQgKzc5LDE0IEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3RyZXNzL3Nmc2JjYWNoZS9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3RyZXNzL3Nmc2JjYWNoZS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggYWYzYzAxOC4uZTE0NTRhYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0cmVzcy9zZnNiY2FjaGUvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHJlc3Mvc2ZzYmNhY2hlL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzQsOCArMzQsOCBAQAogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGtUZXN0Tm90UnVuICAgID0gIlRFU1QgTk9UIFJVTiI7CiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcga1Rlc3RQYXNzZWQgICAgPSAiVEVTVCBQQVNTRUQiOwogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGtUZXN0RmFpbGVkICAgID0gIlRFU1QgRkFJTEVEIjsKLSAgICAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgICAgTUFYX1NGU0JTID0gNjAwOwpAQCAtNTAsMTMgKzUwLDEzIEBACiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbc2ZzYmNhY2hlQ2xpZW50XSBET05FIGRvVGVzdCgpLi4uIik7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJzZnNiY2FjaGUiKTsKLSAgICB9ICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgIAorCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW3Nmc2JjYWNoZUNsaWVudF0gSW5zaWRlIGluaXQuLi4uIik7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CkBAIC02Niw3ICs2Niw3IEBACiAKICAgICAgICAgICAgIC8vQ3JlYXRpbmcgdGhlc2UgbWFueSBTRlNCcyB3aWxsIGNhdXNlIHBhc3NpdmF0aW9uCiAgICAgICAgICAgICBTRlNCIHNmc2IgPSAoU0ZTQikgaG9tZS5jcmVhdGUoIlNGU0JfIik7Ci0gICAKKwogICAgICAgICAgICAgc2ZzYi5nZXROYW1lKCk7CiAKICAgICAgICAgICAgIHNmc2IucmVtb3ZlKCk7CkBAIC05Nyw2ICs5Nyw2IEBACiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBhY2Nlc3NTRlNCIiwgc3RhdC5GQUlMKTsKICAgICAgICAgfQotICAgIH0gICAgICAgICAgICAgICAgIAorICAgIH0KIAogfSAvL0NsaWVudHt9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3RyZXNzL3Nmc2JjYWNoZS9lamIvU0ZTQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0cmVzcy9zZnNiY2FjaGUvZWpiL1NGU0IuamF2YQppbmRleCAwYmE0MDQwLi4wYTNmODMzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3RyZXNzL3Nmc2JjYWNoZS9lamIvU0ZTQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHJlc3Mvc2ZzYmNhY2hlL2VqYi9TRlNCLmphdmEKQEAgLTIzLDcgKzIzLDcgQEAKICAgICBleHRlbmRzIEVKQk9iamVjdAogewogCi0JcHVibGljIFN0cmluZyBnZXROYW1lKCkKKyAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHJlc3Mvc2ZzYmNhY2hlL2VqYi9TRlNCRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3RyZXNzL3Nmc2JjYWNoZS9lamIvU0ZTQkVKQi5qYXZhCmluZGV4IGYwZjFlMTQuLjY3MWJhNjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHJlc3Mvc2ZzYmNhY2hlL2VqYi9TRlNCRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0cmVzcy9zZnNiY2FjaGUvZWpiL1NGU0JFSkIuamF2YQpAQCAtMjYsMTMgKzI2LDEzIEBACiBpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogCiBwdWJsaWMgY2xhc3MgU0ZTQkVKQgotICAgIGltcGxlbWVudHMgU2Vzc2lvbkJlYW4gCisgICAgaW1wbGVtZW50cyBTZXNzaW9uQmVhbgogewotCXByaXZhdGUgU2Vzc2lvbkNvbnRleHQgY29udGV4dDsKKyAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IGNvbnRleHQ7CiAgICAgcHJpdmF0ZSBTdHJpbmcgc2ZzYk5hbWU7CiAgICAgcHJpdmF0ZSBDb250ZXh0IGluaXRpYWxDdHg7CiAKLQlwdWJsaWMgdm9pZCBlamJDcmVhdGUoU3RyaW5nIHNmc2JOYW1lKSB7CisgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKFN0cmluZyBzZnNiTmFtZSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCJJbiBTRlNCLmVqYkNyZWF0ZSgpIGZvciBuYW1lIC0+ICIgKyBzZnNiTmFtZSk7CiAgICAgICAgIHRoaXMuc2ZzYk5hbWUgPSBzZnNiTmFtZTsKICAgICB9CkBAIC00MSwyMiArNDEsMjIgQEAKICAgICAgICAgcmV0dXJuIHRoaXMuc2ZzYk5hbWU7CiAgICAgfQogCi0JcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgc2MpIHsKLQkJdGhpcy5jb250ZXh0ID0gc2M7CisgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgc2MpIHsKKyAgICAgICAgdGhpcy5jb250ZXh0ID0gc2M7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICB0aGlzLmluaXRpYWxDdHggPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHRoKSB7CiAgICAgICAgICAgICB0aC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotCX0KKyAgICB9CiAKLQlwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7fQorICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHt9CiAKLQlwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsKKyAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICgiSW4gU0ZTQi5lamJBY3RpdmF0ZSgpIGZvciBuYW1lIC0+ICIgKyBzZnNiTmFtZSk7CiAgICAgfQogCi0JcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkgeworICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICgiSW4gU0ZTQi5lamJQYXNzaXZhdGUoKSBmb3IgbmFtZSAtPiAiICsgc2ZzYk5hbWUpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHJlc3Mvc2ZzYmNhY2hlL2VqYi9TRlNCSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0cmVzcy9zZnNiY2FjaGUvZWpiL1NGU0JIb21lLmphdmEKaW5kZXggNmJhMDk0YS4uYzQ1OTM1MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0cmVzcy9zZnNiY2FjaGUvZWpiL1NGU0JIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0cmVzcy9zZnNiY2FjaGUvZWpiL1NGU0JIb21lLmphdmEKQEAgLTIzLDYgKzIzLDYgQEAKIHB1YmxpYyBpbnRlcmZhY2UgU0ZTQkhvbWUKICAgICBleHRlbmRzIEVKQkhvbWUKIHsKLQlwdWJsaWMgU0ZTQiBjcmVhdGUoU3RyaW5nIHNmc2JOYW1lKQorICAgIHB1YmxpYyBTRlNCIGNyZWF0ZShTdHJpbmcgc2ZzYk5hbWUpCiAgICAgICAgIHRocm93cyBDcmVhdGVFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9hcHBjbGllbnQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9hcHBjbGllbnQvYnVpbGQucHJvcGVydGllcwppbmRleCA0N2UxOGRiLi42ZjIxNTI3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvYXBwY2xpZW50L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL2FwcGNsaWVudC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOSArMTUsMTkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1zdHVicy1hcHBjbGllbnQiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvYXBwY2xpZW50L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9hcHBjbGllbnQvYnVpbGQueG1sCmluZGV4IGFhNmE1Y2IuLmY4NjM5MTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9hcHBjbGllbnQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9hcHBjbGllbnQvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY2xpZW50Ii8+CkBAIC00MywxMyArNDMsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFwcGNsaWVudC1qYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50Ki5jbGFzcywqKi8qSGVsbG8uY2xhc3MsKiovKkhlbGxvSG9tZS5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNTcsMTAgKzU3LDEwIEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9hcHBjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL2FwcGNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMGVlYmMyOC4uMGExMjA0NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL2FwcGNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL2FwcGNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTM3LDMxICszNywzMSBAQAogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiZWpiLXN0dWJzLWFwcGNsaWVudElEIik7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tpbmcgdXAgZWpiIHJlZiAiKTsKLSAgICAgICAgICAgIC8vIGNyZWF0ZSBFSkIgdXNpbmcgZmFjdG9yeSBmcm9tIGNvbnRhaW5lciAKKyAgICAgICAgICAgIC8vIGNyZWF0ZSBFSkIgdXNpbmcgZmFjdG9yeSBmcm9tIGNvbnRhaW5lcgogICAgICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvaGVsbG8iKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigib2JqcmVmID0gIiArIG9ianJlZik7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkxvb2tlZCB1cCBob21lISEiKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgSGVsbG9Ib21lICBob21lID0gKEhlbGxvSG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cKICAgICAgICAgICAgICAgICAob2JqcmVmLCBIZWxsb0hvbWUuY2xhc3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTmFycm93ZWQgaG9tZSEhIik7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgCisKKwogICAgICAgICAgICAgSGVsbG8gaHIgPSBob21lLmNyZWF0ZSgpOwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJHb3QgdGhlIEVKQiEhIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8vIGludm9rZSBtZXRob2Qgb24gdGhlIEVKQgogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnZva2luZyBlamIiKTsKICAgICAgICAgICAgIGhyLnNheUhlbGxvKCk7CkBAIC03Myw4ICs3Myw4IEBACiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImFwcGNsaWVudCBtYWluIiAsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgCXJldHVybjsKKworICAgICAgICByZXR1cm47CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL2J1aWxkLnhtbAppbmRleCBkMDNjMTdmLi5hODQ5NTAxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9idWlsZC54bWwKQEAgLTMzLDcgKzMzLDcgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzdHVic2VyIi8+CiAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJlamJhcHAiLz4KLSAgICAgICAgPCEtLSBzdGFuZGFsb25lY2xpZW50IG11c3QgYmUgZXhlY3V0ZWQgcmlnaHQgYWZ0ZXIgZWpiYXBwIAorICAgICAgICA8IS0tIHN0YW5kYWxvbmVjbGllbnQgbXVzdCBiZSBleGVjdXRlZCByaWdodCBhZnRlciBlamJhcHAKICAgICAgICAgICAgICB0byBiZSBhYmxlIHRvIHVzZSB0aGUgZ2VuZXJhdGVkIHN0dWJzIGZyb20gdGhlIGFwcCBjbGllbnQKICAgICAgICAgLS0+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic3RhbmRhbG9uZWNsaWVudCIvPgpAQCAtOTIsMTQgKzkyLDE0IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgZWpiYXBwIChFeGVjdXRlcyB0aGUgZWpiLXN0dWJzIGVqYmFwcCB0ZXN0KQotCQkJYW50IGVqYmNsaWVudCAoRXhlY3V0ZXMgdGhlIGVqYi1zdHVicyBlamJjbGllbnQgdGVzdCkKLQkJCWFudCBhcHBjbGllbnQgKEV4ZWN1dGVzIHRoZSBlamItc3R1YnMgYXBwY2xpZW50IHRlc3QpCi0JCQlhbnQgd2ViY2xpZW50IChFeGVjdXRlcyB0aGUgZWpiLXN0dWJzIHdlYmNsaWVudCB0ZXN0KQorICAgIDxlY2hvPgorICAgICAgICBVc2FnZToKKyAgICAgICAgICAgIGFudCBlamJhcHAgKEV4ZWN1dGVzIHRoZSBlamItc3R1YnMgZWpiYXBwIHRlc3QpCisgICAgICAgICAgICBhbnQgZWpiY2xpZW50IChFeGVjdXRlcyB0aGUgZWpiLXN0dWJzIGVqYmNsaWVudCB0ZXN0KQorICAgICAgICAgICAgYW50IGFwcGNsaWVudCAoRXhlY3V0ZXMgdGhlIGVqYi1zdHVicyBhcHBjbGllbnQgdGVzdCkKKyAgICAgICAgICAgIGFudCB3ZWJjbGllbnQgKEV4ZWN1dGVzIHRoZSBlamItc3R1YnMgd2ViY2xpZW50IHRlc3QpCiAgICAgICAgICAgICAgICAgICAgICAgICBhbnQgcHJveHkgKEV4ZWN1dGVzIHRoZSBlamItc3R1YnMgcHJveHkgdGVzdCkKLQkJCWFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZWpiLXN0dWJzIHRlc3RzKQotCTwvZWNobz4KKyAgICAgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZWpiLXN0dWJzIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9lamJhcHAvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9lamJhcHAvYnVpbGQucHJvcGVydGllcwppbmRleCA1ZDkwZGE2Li41NWY0MDBlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvZWpiYXBwL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL2VqYmFwcC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMSArMTUsMjEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1zdHVicy1lamJhcHAiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL2VqYmFwcC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvZWpiYXBwL2J1aWxkLnhtbAppbmRleCAwOTFmYzhhLi42N2ZhOWIzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvZWpiYXBwL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvZWpiYXBwL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNTQsMjYgKzU0LDI2IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiB2YWx1ZT0iKiovSGVsbG8qLmNsYXNzLCoqL0R1bW15Ki5jbGFzcyIvPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLSAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiLmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXIiLz4gICAgICAgICAgICAgICAKKyAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiLmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXIiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2UtZWpiamFyLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiB2YWx1ZT0iKiovRm9vKi5jbGFzcywqKi9IZWxsby5jbGFzcywqKi9IZWxsb0hvbWUuY2xhc3MiLz4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sLmVqYmNsaWVudCIvPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbC5lamJjbGllbnQiLz4KLSAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiLmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi1lamJjbGllbnQuamFyIi8+ICAgICAgICAgICAgICAgCisgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYi5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamItZWpiY2xpZW50LmphciIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXBwY2xpZW50LWphci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQqLmNsYXNzLCoqLypGb28uY2xhc3MsKiovKkZvb0hvbWUuY2xhc3MsKiovKkhlbGxvLmNsYXNzLCoqLypIZWxsb0hvbWUuY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InRydWUiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXMucHJvcHMiIHZhbHVlPSIke2FzLnByb3BzfSAtLWdlbmVyYXRlcm1pc3R1YnM9dHJ1ZSIvPgpAQCAtODUsMTAgKzg1LDEwIEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iJHtodHRwLmhvc3R9ICR7aHR0cC5wb3J0fSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9lamJhcHAvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL2VqYmFwcC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggYTllOTdjNC4uZWE2NTA3YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL2VqYmFwcC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL2VqYmFwcC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTMyLDcgKzMyLDcgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTQxLDM4ICs0MSwzOCBAQAogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiZWpiLXN0dWJzLWVqYmFwcElEIik7Ci0gICAgfSAgCisgICAgfQogCiAgICAgcHJpdmF0ZSBTdHJpbmcgaG9zdDsKICAgICBwcml2YXRlIFN0cmluZyBwb3J0OwotICAgIAorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgICAgICBob3N0ID0gKCBhcmdzLmxlbmd0aCA+IDApID8gYXJnc1swXSA6ICJsb2NhbGhvc3QiOwogICAgICAgICBwb3J0ID0gKCBhcmdzLmxlbmd0aCA+IDEpID8gYXJnc1sxXSA6ICI0ODQ4IjsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAKICAgICAgICAgQ29udGV4dCBpYyA9IG51bGw7CiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29raW5nIHVwIGVqYmFwcCBlamIgcmVmICIpOwotICAgICAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyIAorICAgICAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyCiAgICAgICAgICAgICBPYmplY3Qgb2JqcmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9oZWxsbyIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvYmpyZWYgPSAiICsgb2JqcmVmKTsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTG9va2VkIHVwIGhvbWUhISIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBIZWxsb0hvbWUgIGhvbWUgPSAoSGVsbG9Ib21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdwogICAgICAgICAgICAgICAgIChvYmpyZWYsIEhlbGxvSG9tZS5jbGFzcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJOYXJyb3dlZCBob21lISEiKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAKKworCiAgICAgICAgICAgICBIZWxsbyBociA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkdvdCB0aGUgRUpCISEiKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgLy8gaW52b2tlIG1ldGhvZCBvbiB0aGUgRUpCCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImludm9raW5nIGVqYiIpOwogICAgICAgICAgICAgaHIuc2F5SGVsbG8oKTsKQEAgLTg2LDIwICs4NiwyMCBAQAogCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29raW5nIHVwIGVqYmNsaWVudCAgZWpicmVmICIpOwotICAgICAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyIAorICAgICAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyCiAgICAgICAgICAgICBPYmplY3Qgb2JqcmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9oZWxsb19lamJjbGllbnQiKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigib2JqcmVmID0gIiArIG9ianJlZik7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkxvb2tlZCB1cCBob21lISEiKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgRm9vSG9tZSAgZm9vSG9tZSA9IChGb29Ib21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdwogICAgICAgICAgICAgICAgIChvYmpyZWYsIEZvb0hvbWUuY2xhc3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTmFycm93ZWQgaG9tZSEhIik7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgCisKKwogICAgICAgICAgICAgRm9vIGZvbyA9IGZvb0hvbWUuY3JlYXRlKCk7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkdvdCB0aGUgRUpCISEiKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgLy8gaW52b2tlIG1ldGhvZCBvbiB0aGUgRUpCCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImludm9raW5nIGVqYiIpOwogICAgICAgICAgICAgZm9vLmNhbGxIZWxsbygpOwpAQCAtMTEzLDExICsxMTMsMTEgQEAKICAgICAgICAgfQogCiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyAKKyAgICAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArCiAgICAgICAgICAgICAgICAgIi9lamItc3R1YnMtZWpiYXBwL3NlcnZsZXQiOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnZva2luZyB3ZWJjbGllbnQgc2VydmxldCBhdCAiICsgdXJsKTsKICAgICAgICAgICAgIGludCBjb2RlID0gaW52b2tlU2VydmxldCh1cmwpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmKGNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbmNvcnJlY3QgcmV0dXJuIGNvZGU6ICIgKyBjb2RlKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiYXBwIHdlYmNsaWVudCIsIHN0YXQuRkFJTCk7CkBAIC0xMjksMTQgKzEyOSwxNCBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmFwcCB3ZWJjbGllbnQiLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgCXJldHVybjsKKworICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgcHJpdmF0ZSBpbnQgaW52b2tlU2VydmxldChTdHJpbmcgdXJsKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgICAgIAorCiAgICAgICAgIFVSTCB1ID0gbmV3IFVSTCh1cmwpOwotICAgICAgICAKKwogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjMSA9IChIdHRwVVJMQ29ubmVjdGlvbil1Lm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgIGludCBjb2RlID0gYzEuZ2V0UmVzcG9uc2VDb2RlKCk7CiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gYzEuZ2V0SW5wdXRTdHJlYW0oKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9lamJhcHAvZWpiL0R1bW15TUVKQkJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9lamJhcHAvZWpiL0R1bW15TUVKQkJlYW4uamF2YQppbmRleCA3ZDM4OTIxLi4yODdiMzRlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvZWpiYXBwL2VqYi9EdW1teU1FSkJCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL2VqYmFwcC9lamIvRHVtbXlNRUpCQmVhbi5qYXZhCkBAIC0xNyw3ICsxNyw3IEBACiBwYWNrYWdlIGNvbS5zdW4uczFhc2Rldi5lamIuc3R1YnMuZWpiYXBwOwogCiBpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7Ci1pbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOyAKK2ltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkJlYW47CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQ7CiBpbXBvcnQgamFrYXJ0YS5lamIuRUpCRXhjZXB0aW9uOwpAQCAtMzQsMTEgKzM0LDExIEBACiAgICAgcHVibGljIER1bW15TUVKQkJlYW4oKSB7fQogCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBEdW1teU1FSkJCZWFuOjplamJDcmVhdGUgISEiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIER1bW15TUVKQkJlYW46OmVqYkNyZWF0ZSAhISIpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7Ci0JdGhpcy5zYyA9IHNjOworICAgIHRoaXMuc2MgPSBzYzsKICAgICB9CiAKICAgICBwdWJsaWMgU2V0IHF1ZXJ5TmFtZXMoT2JqZWN0TmFtZSBuYW1lLCBRdWVyeUV4cCBxdWVyeSkgewpAQCAtNTEsMzQgKzUxLDM0IEBACiAKICAgICBwdWJsaWMgSW50ZWdlciBnZXRNQmVhbkNvdW50KCkgewogCi0gICAgICAgIC8vIEludm9raW5nIHRoaXMgbWV0aG9kIGZyb20gYW5vdGhlciBhcHAgd2lsbCB2ZXJpZnkgdGhhdCAKKyAgICAgICAgLy8gSW52b2tpbmcgdGhpcyBtZXRob2QgZnJvbSBhbm90aGVyIGFwcCB3aWxsIHZlcmlmeSB0aGF0CiAgICAgICAgIC8vIHRoZSBjb250ZXh0IGNsYXNzIGxvYWRlciBmb3IgdGhpcyBhcHAgaXMgc2V0IGFwcHJvcHJpYXRlbHkgZHVyaW5nCiAgICAgICAgIC8vIHRoZSBpbnZvY2F0aW9uLiAgIFRoZSBqYXZheC5tYW5hZ2VtZW50LmoyZWUgYXBpcyBhcmUgcGFja2FnZWQKICAgICAgICAgLy8gYXMgcGFydCBvZiB0aGUgc2VydmVyJ3MgY2xhc3NwYXRoLiAgVGhhdCBtYXRjaGVzIHRoZSBiZWhhdmlvciBvZgogICAgICAgICAvLyBCdWcgNjM0MjQ5NSwgd2hpY2ggc2hvd2VkIHRoYXQgdGhlIGNvbnRleHQgY2xhc3MgbG9hZGVyIHdhcyBzdGlsbAogICAgICAgICAvLyBzZXQgdG8gdGhlIGNhbGxpbmcgYXBwbGljYXRpb24gd2hlbiB0aGUgSG9tZS9SZW1vdGUgaW50ZXJmYWNlcyB3ZXJlCi0gICAgICAgIC8vIGxvYWRlZCBmcm9tIGFib3ZlIHRoZSBhcHBsaWNhdGlvbiBjbGFzc2xvYWRlciBsZXZlbC4gIAorICAgICAgICAvLyBsb2FkZWQgZnJvbSBhYm92ZSB0aGUgYXBwbGljYXRpb24gY2xhc3Nsb2FkZXIgbGV2ZWwuCiAgICAgICAgIC8vCiAgICAgICAgIC8vIENhbGxpbmcgZ2V0Q2xhc3NMb2FkZXIgdGVzdHMgdGhhdCB0aGUgY29udGV4dCBjbGFzc2xvYWRlciBpcyBzZXQKICAgICAgICAgLy8gYXBwcm9wcmlhdGVseSBiZWNhdXNlIG9mIHRoZSBzZWN1cml0eSByZXF1aXJlbWVudHMgdGhhdCBKMlNFCiAgICAgICAgIC8vIGltcG9zZXMgb24gcmVxdWVzdGluZyBhIGNsYXNzIGxvYWRlci4gIEJ5IGRlZmF1bHQgYXBwbGljYXRpb24gY29kZQotICAgICAgICAvLyBpbiB0aGUgYXBwc2VydmVyIGRvZXMgbm90IGhhdmUgdGhlIFJ1bnRpbWVQZXJtaXNzaW9uIAorICAgICAgICAvLyBpbiB0aGUgYXBwc2VydmVyIGRvZXMgbm90IGhhdmUgdGhlIFJ1bnRpbWVQZXJtaXNzaW9uCiAgICAgICAgIC8vICJnZXRDbGFzc0xvYWRlciIuICAgSW4gdGhhdCBjYXNlLCByZXF1ZXN0aW5nIGEgY2xhc3MgbG9hZGVyIGlzIG9ubHkKLSAgICAgICAgLy8gYWxsb3dlZCBpZiB0aGUgcmV0dXJuZWQgY2xhc3MgbG9hZGVyIG1hdGNoZXMgdGhlIHJlcXVlc3RpbmcgCi0gICAgICAgIC8vIGNsYXNzJyBjbGFzcyBsb2FkZXIob3IgaXMgYSBjaGlsZCBvZiBpdCkuICBTbywgaWYgdGhlIGNvbnRleHQgCi0gICAgICAgIC8vIGNsYXNzIGxvYWRlciBpcyBzdGlsbCBpbmNvcnJlY3RseSBzZXQgdG8gdGhlIGNhbGxpbmcgYXBwJ3MgCisgICAgICAgIC8vIGFsbG93ZWQgaWYgdGhlIHJldHVybmVkIGNsYXNzIGxvYWRlciBtYXRjaGVzIHRoZSByZXF1ZXN0aW5nCisgICAgICAgIC8vIGNsYXNzJyBjbGFzcyBsb2FkZXIob3IgaXMgYSBjaGlsZCBvZiBpdCkuICBTbywgaWYgdGhlIGNvbnRleHQKKyAgICAgICAgLy8gY2xhc3MgbG9hZGVyIGlzIHN0aWxsIGluY29ycmVjdGx5IHNldCB0byB0aGUgY2FsbGluZyBhcHAncwogICAgICAgICAvLyBjbGFzcyBsb2FkZXIsIHRoZSBjYWxsIHRvIGdldENvbnRleHRDbGFzc0xvYWRlcigpIHNob3VsZCB0aHJvdwotICAgICAgICAvLyBhIHNlY3VyaXR5IGV4Y2VwdGlvbi4gICAKKyAgICAgICAgLy8gYSBzZWN1cml0eSBleGNlcHRpb24uCiAKICAgICAgICAgLy8gVGhlIGFkdmFudGFnZSB0byB3cml0aW5nIHRoZSB0ZXN0IHVzaW5nCiAgICAgICAgIC8vIGphdmF4Lm1hbmFnZW1lbnQgQVBJcyBhbmQgdGhpcyBiZWhhdmlvciBpcyBpdCB3aWxsIHdvcmsgb24gYW4KICAgICAgICAgLy8gb3V0LW9mLXRoZS1ib3ggaW5zdGFsbGF0aW9uIG9mIHRoZSBhcHBzZXJ2ZXIuICBObyBhZGRpdGlvbnMgdG8gdGhlCiAgICAgICAgIC8vIHNlcnZlcidzIGNsYXNzcGF0aCBvciB0aGUgZGVmYXVsdCBzZXJ2ZXIucG9saWN5IGZpbGUgYXJlIG5lZWRlZC4KLSAgICAgICAgCisKIAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIER1bW15RUpCQmVhbjo6Z2V0TUJlYW5Db3VudCgpIik7CiAKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNeSBjbGFzc2xvYWRlciA9ICIgKyAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNeSBjbGFzc2xvYWRlciA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgRHVtbXlNRUpCQmVhbi5jbGFzcy5nZXRDbGFzc0xvYWRlcigpKTsKIAogICAgICAgICAvLyBUaGlzIHNob3VsZCBmYWlsIHdpdGggYSBzZWN1cml0eSBleGNlcHRpb24gaWYgdGhlIGNhbGxlciBpcyBpbgpAQCAtODYsNyArODYsNyBAQAogICAgICAgICAvLyBsb2FkZXIgaXMgc3RpbGwgaW5jb3JyZWN0bHkgc2V0IHRvIHRoZSBjYWxsZXIgYXBwJ3MgY2xhc3Nsb2FkZXIuCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY29udGV4dCBjbGFzcyBsb2FkZXIgPSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0Q29udGV4dENsYXNzTG9hZGVyKCkpOwotICAgICAgICAKKwogCiAgICAgICAgIHJldHVybiBuZXcgSW50ZWdlcigwKTsKICAgICB9CkBAIC0xMzAsNCArMTMwLDQgQEAKIAogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHt9CiB9Ci0JCQkgICAgICAqLworICAgICAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9lamJhcHAvZWpiL0Zvb0JlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9lamJhcHAvZWpiL0Zvb0JlYW4uamF2YQppbmRleCAxNTgxZWM2Li45ODIyODNkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvZWpiYXBwL2VqYi9Gb29CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL2VqYmFwcC9lamIvRm9vQmVhbi5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIGltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CiBpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7Ci1pbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOyAKK2ltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkJlYW47CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQ7CiBpbXBvcnQgamFrYXJ0YS5lamIuRUpCRXhjZXB0aW9uOwpAQCAtMzQsMTMgKzM0LDEzIEBACiAgICAgcHVibGljIEZvb0JlYW4oKSB7fQogCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29CZWFuOjplamJDcmVhdGUgISEiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb0JlYW46OmVqYkNyZWF0ZSAhISIpOwogCiAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgewotCXRoaXMuc2MgPSBzYzsKKyAgICB0aGlzLnNjID0gc2M7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgY2FsbEhlbGxvKCkgIHsKQEAgLTQ4LDIxICs0OCwyMSBAQAogCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2luZyB1cCBlamIgcmVmICIpOwotICAgICAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyIAorICAgICAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyCiAgICAgICAgICAgICBPYmplY3Qgb2JqcmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9oZWxsbyIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvYmpyZWYgPSAiICsgb2JqcmVmKTsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTG9va2VkIHVwIGhvbWUhISIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBIZWxsb0hvbWUgIGhvbWUgPSAoSGVsbG9Ib21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdwogICAgICAgICAgICAgICAgIChvYmpyZWYsIEhlbGxvSG9tZS5jbGFzcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJOYXJyb3dlZCBob21lISEiKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgSGVsbG8gaHIgPSBob21lLmNyZWF0ZSgpOwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJHb3QgdGhlIEVKQiEhIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8vIGludm9rZSBtZXRob2Qgb24gdGhlIEVKQgogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnZva2luZyBlamIiKTsKICAgICAgICAgICAgIGhyLnNheUhlbGxvKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvZWpiYXBwL2VqYi9IZWxsb0JlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9lamJhcHAvZWpiL0hlbGxvQmVhbi5qYXZhCmluZGV4IDM4ZjAzN2QuLmQwYTBjNGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9lamJhcHAvZWpiL0hlbGxvQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9lamJhcHAvZWpiL0hlbGxvQmVhbi5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIGltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CiBpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7Ci1pbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOyAKK2ltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkJlYW47CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQ7CiBpbXBvcnQgamFrYXJ0YS5lamIuRUpCRXhjZXB0aW9uOwpAQCAtMzEsMTEgKzMxLDExIEBACiAgICAgcHVibGljIEhlbGxvQmVhbigpIHt9CiAKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvQmVhbjo6ZWpiQ3JlYXRlICEhIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb0JlYW46OmVqYkNyZWF0ZSAhISIpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7Ci0JdGhpcy5zYyA9IHNjOworICAgIHRoaXMuc2MgPSBzYzsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzYXlIZWxsbygpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9lamJhcHAvc2VydmxldC9TZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvZWpiYXBwL3NlcnZsZXQvU2VydmxldC5qYXZhCmluZGV4IDgzMTg4NmYuLmJjMWJjNzQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9lamJhcHAvc2VydmxldC9TZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL2VqYmFwcC9zZXJ2bGV0L1NlcnZsZXQuamF2YQpAQCAtMjYsMzcgKzI2LDM3IEBACiBpbXBvcnQgY29tLnN1bi5zMWFzZGV2LmVqYi5zdHVicy5lamJhcHAuSGVsbG9Ib21lOwogCiBwdWJsaWMgY2xhc3MgU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKLSAgICAKKwogCiAgICAgcHVibGljIHZvaWQgIGluaXQoIFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBlamJhcHA6OnNlcnZsZXQuLi4gaW5pdCgpIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2VydmljZSAoIEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEgLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3AgKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotICAgICAgICAgICAgICAgICAKKwogICAgICAgICByZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcC5nZXRXcml0ZXIoKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKIAogICAgICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKIAogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tpbmcgdXAgZWpiIHJlZiAiKTsKLSAgICAgICAgICAgIC8vIGNyZWF0ZSBFSkIgdXNpbmcgZmFjdG9yeSBmcm9tIGNvbnRhaW5lciAKKyAgICAgICAgICAgIC8vIGNyZWF0ZSBFSkIgdXNpbmcgZmFjdG9yeSBmcm9tIGNvbnRhaW5lcgogICAgICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvaGVsbG8iKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigib2JqcmVmID0gIiArIG9ianJlZik7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkxvb2tlZCB1cCBob21lISEiKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgSGVsbG9Ib21lICBob21lID0gKEhlbGxvSG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cKICAgICAgICAgICAgICAgICAob2JqcmVmLCBIZWxsb0hvbWUuY2xhc3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTmFycm93ZWQgaG9tZSEhIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIEhlbGxvIGhyID0gaG9tZS5jcmVhdGUoKTsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiR290IHRoZSBFSkIhISIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyBpbnZva2UgbWV0aG9kIG9uIHRoZSBFSkIKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW52b2tpbmcgZWpiIik7CiAgICAgICAgICAgICBoci5zYXlIZWxsbygpOwpAQCAtNjUsMjIgKzY1LDIyIEBACiAKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8SFRNTD4gPEhFQUQ+IDxUSVRMRT4gSk1TIFNlcnZsZXQgT3V0cHV0IDwvVElUTEU+IDwvSEVBRD4gPEJPRFkgQkdDT0xPUj13aGl0ZT4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8Q0VOVEVSPiA8Rk9OVCBzaXplPSsxIENPTE9SPWJsdWU+RGF0YWJhc2VTZXJ2ZWx0IDo6IEFsbCBpbmZvcm1hdGlvbiBJIGNhbiBnaXZlIDwvRk9OVD4gPC9DRU5URVI+IDxwPiAiICk7Ci0gICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IENvbnRleHQgUGF0aCA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0Q29udGV4dFBhdGgoKSArICI8YnI+IiApOyAKLSAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gU2VydmxldCBQYXRoIDogIDwvRk9OVD4gIiArIHJlcS5nZXRTZXJ2bGV0UGF0aCgpICsgIjxicj4iICk7IAotICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBQYXRoIEluZm8gOiAgPC9GT05UPiAiICsgcmVxLmdldFBhdGhJbmZvKCkgKyAiPGJyPiIgKTsgCisgICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IENvbnRleHQgUGF0aCA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0Q29udGV4dFBhdGgoKSArICI8YnI+IiApOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBTZXJ2bGV0IFBhdGggOiAgPC9GT05UPiAiICsgcmVxLmdldFNlcnZsZXRQYXRoKCkgKyAiPGJyPiIgKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gUGF0aCBJbmZvIDogIDwvRk9OVD4gIiArIHJlcS5nZXRQYXRoSW5mbygpICsgIjxicj4iICk7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9CT0RZPiA8L0hUTUw+ICIpOwotICAgICAgICAgICAgCisKICAgICAgICAgfWNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ3ZWJjbGllbnQgc2VydmxldCB0ZXN0IGZhaWxlZCIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZXgpOwotICAgICAgICB9IAorICAgICAgICB9CiAgICAgfQogCi0gICAgCi0gICAgCisKKwogICAgIHB1YmxpYyB2b2lkICBkZXN0cm95KCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIHdlYmNsaWVudDo6c2VydmxldCBkZXN0cm95Iik7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvZWpiY2xpZW50L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvZWpiY2xpZW50L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYjczZmYyMC4uZmI4Y2M4YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL2VqYmNsaWVudC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9lamJjbGllbnQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItc3R1YnMtZWpiY2xpZW50Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvZWpiY2xpZW50L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9lamJjbGllbnQvYnVpbGQueG1sCmluZGV4IGUyMGRjZDcuLmUxZDNlMjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9lamJjbGllbnQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9lamJjbGllbnQvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NiwzMCArNDYsMzAgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KLSAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vaGVsbG9fbGlicmFyeS5qYXIiIAotICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIAorICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS9oZWxsb19saWJyYXJ5LmphciIKKyAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgogICAgICAgICAgICAgaW5jbHVkZXMgPSIqKi9IZWxsbyouY2xhc3MiPgotICAgICAgIDwvamFyPiAgICAKKyAgICAgICA8L2phcj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhcHBjbGllbnQtamFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQqLmNsYXNzLCoqLypGb28uY2xhc3MsKiovKkZvb0hvbWUuY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphciIgCi0gICAgICAgICAgICAgdXBkYXRlPSJ0cnVlIiBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgCisgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXIiCisgICAgICAgICAgICAgdXBkYXRlPSJ0cnVlIiBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgICBpbmNsdWRlcyA9IioqL0ZvbyouY2xhc3MiPgogICAgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iLi9kZXNjcmlwdG9yIj4KICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9ImVqYi1qYXIueG1sIi8+CiAgICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJzdW4tZWpiLWphci54bWwiLz4KICAgICAgICAgICAgICA8L21ldGFpbmY+CiAgICAgICAgICAgICAgPG1hbmlmZXN0PgotICAgICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJDbGFzcy1QYXRoIiAKKyAgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iQ2xhc3MtUGF0aCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9ImhlbGxvX2xpYnJhcnkuamFyIi8+CiAgICAgICAgICAgICAgPC9tYW5pZmVzdD4KLSAgICAgICAgPC9qYXI+ICAKKyAgICAgICAgPC9qYXI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZWFyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC03NywxMCArNzcsMTAgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL2VqYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvZWpiY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQppbmRleCA3MjJhMDUzLi5iYTZmYjYzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvZWpiY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvZWpiY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjgsNyArMjgsNyBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewpAQCAtMzcsMzEgKzM3LDMxIEBACiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJlamItc3R1YnMtZWpiY2xpZW50SUQiKTsKLSAgICB9ICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2luZyB1cCBlamIgcmVmICIpOwotICAgICAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyIAorICAgICAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyCiAgICAgICAgICAgICBPYmplY3Qgb2JqcmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9mb28iKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigib2JqcmVmID0gIiArIG9ianJlZik7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkxvb2tlZCB1cCBob21lISEiKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgRm9vSG9tZSAgaG9tZSA9IChGb29Ib21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdwogICAgICAgICAgICAgICAgIChvYmpyZWYsIEZvb0hvbWUuY2xhc3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTmFycm93ZWQgaG9tZSEhIik7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgCisKKwogICAgICAgICAgICAgRm9vIGYgPSBob21lLmNyZWF0ZSgpOwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJHb3QgdGhlIEVKQiEhIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8vIGludm9rZSBtZXRob2Qgb24gdGhlIEVKQgogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnZva2luZyBlamIiKTsKICAgICAgICAgICAgIGYuY2FsbEhlbGxvKCk7CkBAIC03Myw4ICs3Myw4IEBACiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBtYWluIiAsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgCXJldHVybjsKKworICAgICAgICByZXR1cm47CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvZWpiY2xpZW50L2VqYi9Gb29CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvZWpiY2xpZW50L2VqYi9Gb29CZWFuLmphdmEKaW5kZXggYzYyNzA2NC4uMTFjMzIxNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL2VqYmNsaWVudC9lamIvRm9vQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9lamJjbGllbnQvZWpiL0Zvb0JlYW4uamF2YQpAQCAtMTgsNyArMTgsNyBAQAogCiBpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwogaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOwotaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsgCitpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25CZWFuOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0OwogaW1wb3J0IGpha2FydGEuZWpiLkVKQkV4Y2VwdGlvbjsKQEAgLTM0LDExICszNCwxMSBAQAogICAgIHB1YmxpYyBGb29CZWFuKCkge30KIAogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vQmVhbjo6ZWpiQ3JlYXRlICEhIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29CZWFuOjplamJDcmVhdGUgISEiKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgewotCXRoaXMuc2MgPSBzYzsKKyAgICB0aGlzLnNjID0gc2M7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgY2FsbEhlbGxvKCkgIHsKQEAgLTQ2LDIxICs0NiwyMSBAQAogCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2luZyB1cCBlamIgcmVmICIpOwotICAgICAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyIAorICAgICAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyCiAgICAgICAgICAgICBPYmplY3Qgb2JqcmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9oZWxsbyIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvYmpyZWYgPSAiICsgb2JqcmVmKTsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTG9va2VkIHVwIGhvbWUhISIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBIZWxsb0hvbWUgIGhvbWUgPSAoSGVsbG9Ib21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdwogICAgICAgICAgICAgICAgIChvYmpyZWYsIEhlbGxvSG9tZS5jbGFzcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJOYXJyb3dlZCBob21lISEiKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgSGVsbG8gaHIgPSBob21lLmNyZWF0ZSgpOwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJHb3QgdGhlIEVKQiEhIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8vIGludm9rZSBtZXRob2Qgb24gdGhlIEVKQgogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnZva2luZyBlamIiKTsKICAgICAgICAgICAgIGhyLnNheUhlbGxvKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvcHJveHkvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9wcm94eS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGMyOTU3OWUuLmI0NWJiODkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9wcm94eS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9wcm94eS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMSArMTUsMjEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1zdHVicy1wcm94eSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3Byb3h5L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9wcm94eS9idWlsZC54bWwKaW5kZXggMzdmOGVhOC4uMmU3MmFiOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3Byb3h5L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvcHJveHkvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NiwxNCArNDYsMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLyoqLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0hlbGxvSG9tZS5jbGFzcywqKi9IZWxsby5jbGFzcywqKi8qQ2xpZW50Ki5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYxLDEwICs2MSwxMCBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvcHJveHkvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3Byb3h5L2NsaWVudC9DbGllbnQuamF2YQppbmRleCBiNmZkNDM4Li5hYzVjMjFmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvcHJveHkvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9wcm94eS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTM2LDM0ICszNiwzNCBAQAogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiZWpiLXN0dWJzLXByb3h5SUQiKTsKLSAgICB9ICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogCiAgICAgICAgIHRyeSB7CiAKLQkgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAKLQkgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyIAotCSAgICBqYXZhLmxhbmcuT2JqZWN0IG9ianJlZiA9IAorICAgICAgICAvLyBjcmVhdGUgRUpCIHVzaW5nIGZhY3RvcnkgZnJvbSBjb250YWluZXIKKyAgICAgICAgamF2YS5sYW5nLk9iamVjdCBvYmpyZWYgPQogICAgICAgICAgICAgICAgIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvUHJveHlBcHAiKTsKIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tlZCB1cCBob21lISEiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29rZWQgdXAgaG9tZSEhIik7CiAKLQkgICAgSGVsbG9Ib21lICBob21lID0gKEhlbGxvSG9tZSkKKyAgICAgICAgSGVsbG9Ib21lICBob21lID0gKEhlbGxvSG9tZSkKICAgICAgICAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCBIZWxsb0hvbWUuY2xhc3MpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk5hcnJvd2VkIGhvbWUhISIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk5hcnJvd2VkIGhvbWUhISIpOwogCi0JICAgIEhlbGxvIGhyID0gaG9tZS5jcmVhdGUoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgdGhlIEVKQiEhIik7CisgICAgICAgIEhlbGxvIGhyID0gaG9tZS5jcmVhdGUoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgdGhlIEVKQiEhIik7CiAKICAgICAgICAgICAgIGhyLnRlc3RQYXNzQnlSZWYoKTsKIAotCSAgICAvLyBpbnZva2UgbWV0aG9kIG9uIHRoZSBFSkIKLQkgICAgZG9Qcm94eVRlc3QoaHIpOworICAgICAgICAvLyBpbnZva2UgbWV0aG9kIG9uIHRoZSBFSkIKKyAgICAgICAgZG9Qcm94eVRlc3QoaHIpOwogCiAgICAgICAgICAgICB0ZXN0RXhjZXB0aW9ucyhocik7CiAKQEAgLTc1LDggKzc1LDggQEAKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIgLCBzdGF0LkZBSUwpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgIAlyZXR1cm47CisKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCB0ZXN0RXhjZXB0aW9ucyhIZWxsbyBoKSB0aHJvd3MgRXhjZXB0aW9uIHsKQEAgLTg1LDcgKzg1LDcgQEAKICAgICAgICAgICAgIGgudGhyb3dFeGNlcHRpb24oKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgaWYoIGUuZ2V0Q2xhc3MoKSA9PSBFeGNlcHRpb24uY2xhc3MgKSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgY2F1Z2h0IGV4Y2VwdGlvbiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgY2F1Z2h0IGV4Y2VwdGlvbiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5nZXRDbGFzcygpICsgIiAiICsgZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICB0aHJvdyBlOwpAQCAtOTYsNyArOTYsNyBAQAogICAgICAgICAgICAgaC50aHJvd0FwcEV4Y2VwdGlvbjEoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oImRpZG4ndCBnZXQgZXhjZXB0aW9uIGZvciB0ZXN0RXhjZXB0aW9uMiIpOwogICAgICAgICB9IGNhdGNoKGpha2FydGEuZWpiLkZpbmRlckV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSBjYXVnaHQgZXhjZXB0aW9uICIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGNhdWdodCBleGNlcHRpb24gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5nZXRDbGFzcygpICsgIiAiICsgZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAKQEAgLTEwNCw3ICsxMDQsNyBAQAogICAgICAgICAgICAgaC50aHJvd0FwcEV4Y2VwdGlvbjIoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oImRpZG4ndCBnZXQgZXhjZXB0aW9uIGZvciB0ZXN0RXhjZXB0aW9uMyIpOwogICAgICAgICB9IGNhdGNoKGpha2FydGEuZWpiLkZpbmRlckV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSBjYXVnaHQgZXhjZXB0aW9uICIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGNhdWdodCBleGNlcHRpb24gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5nZXRDbGFzcygpICsgIiAiICsgZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAKQEAgLTEzMCwzNiArMTMwLDM2IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgZG9Qcm94eVRlc3QoSGVsbG8gaHIpIAotCXRocm93cyBFeGNlcHRpb24KKyAgICBwcml2YXRlIHZvaWQgZG9Qcm94eVRlc3QoSGVsbG8gaHIpCisgICAgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlxuU3RhdGVmdWwgU2Vzc2lvbiByZXN1bHRzIChtaWNyb3NlYyk6IFx0d2l0aCB0eCBcdG5vIHR4OiIpOwotCWhyLndhcm11cChDb21tb24uU1RBVEVGVUwpOwotCXJ1blRlc3RzKENvbW1vbi5TVEFURUZVTCwgaHIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG5TdGF0ZWZ1bCBTZXNzaW9uIHJlc3VsdHMgKG1pY3Jvc2VjKTogXHR3aXRoIHR4IFx0bm8gdHg6Iik7CisgICAgaHIud2FybXVwKENvbW1vbi5TVEFURUZVTCk7CisgICAgcnVuVGVzdHMoQ29tbW9uLlNUQVRFRlVMLCBocik7CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlxuU3RhdGVsZXNzIFNlc3Npb24gcmVzdWx0cyAobWljcm9zZWMpOiBcdHdpdGggdHggXHRubyB0eDoiKTsKLQloci53YXJtdXAoQ29tbW9uLlNUQVRFRlVMKTsKLQlydW5UZXN0cyhDb21tb24uU1RBVEVMRVNTLCBocik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJcblN0YXRlbGVzcyBTZXNzaW9uIHJlc3VsdHMgKG1pY3Jvc2VjKTogXHR3aXRoIHR4IFx0bm8gdHg6Iik7CisgICAgaHIud2FybXVwKENvbW1vbi5TVEFURUZVTCk7CisgICAgcnVuVGVzdHMoQ29tbW9uLlNUQVRFTEVTUywgaHIpOwogCi0JU3lzdGVtLm91dC5wcmludGxuKCJcbkJNUCBFbnRpdHkgcmVzdWx0cyAobWljcm9zZWMpOiBcdFx0d2l0aCB0eCBcdG5vIHR4OiIpOwotCWhyLndhcm11cChDb21tb24uQk1QKTsKLQlydW5UZXN0cyhDb21tb24uQk1QLCBocik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJcbkJNUCBFbnRpdHkgcmVzdWx0cyAobWljcm9zZWMpOiBcdFx0d2l0aCB0eCBcdG5vIHR4OiIpOworICAgIGhyLndhcm11cChDb21tb24uQk1QKTsKKyAgICBydW5UZXN0cyhDb21tb24uQk1QLCBocik7CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHJ1blRlc3RzKGludCB0eXBlLCBIZWxsbyBocikKLQl0aHJvd3MgRXhjZXB0aW9uCisgICAgdGhyb3dzIEV4Y2VwdGlvbgogICAgIHsKLSAgICAgIAorCiAgICAgICAgIGhyLm5vdFN1cHBvcnRlZCh0eXBlLCB0cnVlKTsKICAgICAgICAgaHIubm90U3VwcG9ydGVkKHR5cGUsIGZhbHNlKTsKICAgICAgICAgaHIuc3VwcG9ydHModHlwZSwgdHJ1ZSk7Ci0JaHIuc3VwcG9ydHModHlwZSwgZmFsc2UpOworICAgIGhyLnN1cHBvcnRzKHR5cGUsIGZhbHNlKTsKICAgICAgICAgaHIucmVxdWlyZWQodHlwZSwgdHJ1ZSk7Ci0JaHIucmVxdWlyZWQodHlwZSwgZmFsc2UpOworICAgIGhyLnJlcXVpcmVkKHR5cGUsIGZhbHNlKTsKICAgICAgICAgaHIucmVxdWlyZXNOZXcodHlwZSwgdHJ1ZSk7Ci0JaHIucmVxdWlyZXNOZXcodHlwZSwgZmFsc2UpOworICAgIGhyLnJlcXVpcmVzTmV3KHR5cGUsIGZhbHNlKTsKICAgICAgICAgaHIubWFuZGF0b3J5KHR5cGUsIHRydWUpOwotCWhyLm5ldmVyKHR5cGUsIGZhbHNlKTsKKyAgICBoci5uZXZlcih0eXBlLCBmYWxzZSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvcHJveHkvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9wcm94eS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IDliODRlMTMuLjYzODk5NjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9wcm94eS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9wcm94eS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC0xMDEsNyArMTAxLDcgQEAKICAgICA8L3Nlc3Npb24+CiAgICAgPHNlc3Npb24+CiAgICAgICA8ZWpiLW5hbWU+U2Z1bEJlYW48L2VqYi1uYW1lPgotICAgICAgPGhvbWU+Y29tLnN1bi5zMWFzZGV2LmVqYi5zdHVicy5wcm94eS5TZnVsUmVtb3RlSG9tZTwvaG9tZT4gCisgICAgICA8aG9tZT5jb20uc3VuLnMxYXNkZXYuZWpiLnN0dWJzLnByb3h5LlNmdWxSZW1vdGVIb21lPC9ob21lPgogICAgICAgPHJlbW90ZT5jb20uc3VuLnMxYXNkZXYuZWpiLnN0dWJzLnByb3h5LlNmdWxSZW1vdGU8L3JlbW90ZT4KICAgICAgIDxsb2NhbC1ob21lPmNvbS5zdW4uczFhc2Rldi5lamIuc3R1YnMucHJveHkuU2Z1bEhvbWU8L2xvY2FsLWhvbWU+CiAgICAgICA8bG9jYWw+Y29tLnN1bi5zMWFzZGV2LmVqYi5zdHVicy5wcm94eS5TZnVsPC9sb2NhbD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9wcm94eS9lamIvQm1wRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvcHJveHkvZWpiL0JtcEVKQi5qYXZhCmluZGV4IGVkNDgwYjUuLjA0Y2U1ZDMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9wcm94eS9lamIvQm1wRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3Byb3h5L2VqYi9CbXBFSkIuamF2YQpAQCAtMjUsNyArMjUsNyBAQAogICAgIHB1YmxpYyBCbXBFSkIoKXt9CiAKICAgICBwdWJsaWMgU3RyaW5nIGVqYkNyZWF0ZShTdHJpbmcgcykgewotCXJldHVybiBzOworICAgIHJldHVybiBzOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYlBvc3RDcmVhdGUoU3RyaW5nIHMpIHt9CkBAIC00NSwxMCArNDUsMTAgQEAKICAgICBwdWJsaWMgdm9pZCB1bnNldEVudGl0eUNvbnRleHQoKQogICAgIHt9CiAKLSAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSAKKyAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKQogICAgIHt9CiAKLSAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIAorICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkKICAgICB7fQogCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkKQEAgLTYxLDcgKzYxLDcgQEAKICAgICB7fQogCiAgICAgcHVibGljIFN0cmluZyBlamJGaW5kQnlQcmltYXJ5S2V5KFN0cmluZyBzKSB7Ci0JcmV0dXJuIHM7CisgICAgcmV0dXJuIHM7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgdGVzdEV4Y2VwdGlvbjEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKQEAgLTk5LDcgKzk5LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB0ZXN0UGFzc0J5UmVmNChDb21tb25SZW1vdGUgY3IpIHsKLSAgICAgICAKKwogICAgIH0KIAogICAgIHB1YmxpYyBIZWxwZXIxIHRlc3RQYXNzQnlSZWY1KCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3Byb3h5L2VqYi9CbXBIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvcHJveHkvZWpiL0JtcEhvbWUuamF2YQppbmRleCAzZTRjYjdkLi5hZmM5NTJmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvcHJveHkvZWpiL0JtcEhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvcHJveHkvZWpiL0JtcEhvbWUuamF2YQpAQCAtMjIsNSArMjIsNSBAQAogcHVibGljIGludGVyZmFjZSBCbXBIb21lIGV4dGVuZHMgRUpCTG9jYWxIb21lCiB7CiAgICAgQm1wIGNyZWF0ZShTdHJpbmcgcykgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbjsKLSAgICBCbXAgZmluZEJ5UHJpbWFyeUtleShTdHJpbmcgcykgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbjsgICAgCisgICAgQm1wIGZpbmRCeVByaW1hcnlLZXkoU3RyaW5nIHMpIHRocm93cyBDcmVhdGVFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvcHJveHkvZWpiL0JtcFJlbW90ZUhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9wcm94eS9lamIvQm1wUmVtb3RlSG9tZS5qYXZhCmluZGV4IGMzZjI5ZmMuLjdkOTQzOTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9wcm94eS9lamIvQm1wUmVtb3RlSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9wcm94eS9lamIvQm1wUmVtb3RlSG9tZS5qYXZhCkBAIC0yMiw1ICsyMiw1IEBACiBwdWJsaWMgaW50ZXJmYWNlIEJtcFJlbW90ZUhvbWUgZXh0ZW5kcyBFSkJIb21lCiB7CiAgICAgQm1wUmVtb3RlIGNyZWF0ZShTdHJpbmcgcykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiwgQ3JlYXRlRXhjZXB0aW9uOwotICAgIEJtcFJlbW90ZSBmaW5kQnlQcmltYXJ5S2V5KFN0cmluZyBzKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uLCBDcmVhdGVFeGNlcHRpb247ICAgIAorICAgIEJtcFJlbW90ZSBmaW5kQnlQcmltYXJ5S2V5KFN0cmluZyBzKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uLCBDcmVhdGVFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvcHJveHkvZWpiL0hlbGxvRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvcHJveHkvZWpiL0hlbGxvRUpCLmphdmEKaW5kZXggNDg5NmZmYS4uMTk3ZGFlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3Byb3h5L2VqYi9IZWxsb0VKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9wcm94eS9lamIvSGVsbG9FSkIuamF2YQpAQCAtNDIsNyArNDIsNyBAQAogICAgIHByaXZhdGUgQm1wUmVtb3RlSG9tZSBibXBSZW1vdGVIb21lOwogCiAgICAgcHJpdmF0ZSBsb25nIG92ZXJoZWFkOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIHBrZXkgPSAiQSBCTVAgQmVhbiI7CiAKICAgICBqYWthcnRhLnRyYW5zYWN0aW9uLlVzZXJUcmFuc2FjdGlvbiB1dDsKQEAgLTUxLDcgKzUxLDcgQEAKIAogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHsKIAotCXRyeSB7CisgICAgdHJ5IHsKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKIAogICAgICAgICAgICAgQ29udGV4dCBpYzEgPSAoQ29udGV4dCkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52Iik7CkBAIC02MCwyNyArNjAsMjcgQEAKIAogICAgICAgICAgICAgQ29udGV4dCBpYzIgPSAoQ29udGV4dCkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYiIpOwogICAgICAgICAgICAgU3RyaW5nIGljMk5hbWUgPSBpYzIuZ2V0TmFtZUluTmFtZXNwYWNlKCk7Ci0gICAgICAgICAgICBDb250ZXh0IGljMl8gPSAoQ29udGV4dCkgaWMubG9va3VwKGljMk5hbWUpOyAgICAgICAgICAgIAorICAgICAgICAgICAgQ29udGV4dCBpYzJfID0gKENvbnRleHQpIGljLmxvb2t1cChpYzJOYW1lKTsKIAotCSAgICBzZnVsSG9tZSA9IChTZnVsSG9tZSkgaWMyXy5sb29rdXAoIlNmdWwiKTsKKyAgICAgICAgc2Z1bEhvbWUgPSAoU2Z1bEhvbWUpIGljMl8ubG9va3VwKCJTZnVsIik7CiAgICAgICAgICAgICBzZnVsID0gc2Z1bEhvbWUuY3JlYXRlKCk7CiAgICAgICAgICAgICBPYmplY3Qgb2JqID0gaWMyXy5sb29rdXAoIlNmdWxSZW1vdGUiKTsKICAgICAgICAgICAgIHNmdWxSZW1vdGVIb21lID0gKFNmdWxSZW1vdGVIb21lKQogICAgICAgICAgICAgICAgIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmosIFNmdWxSZW1vdGVIb21lLmNsYXNzKTsKICAgICAgICAgICAgIHNmdWxSZW1vdGUgPSBzZnVsUmVtb3RlSG9tZS5jcmVhdGUoKTsKIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0ZWQgU3RhdGVmdWwgYmVhbi4iKTsKLQkgICAJICAgICAKLQkgICAgc2xlc3NIb21lID0gKFNsZXNzSG9tZSkgaWMxXy5sb29rdXAoImVqYi9TbGVzcyIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0ZWQgU3RhdGVmdWwgYmVhbi4iKTsKKworICAgICAgICBzbGVzc0hvbWUgPSAoU2xlc3NIb21lKSBpYzFfLmxvb2t1cCgiZWpiL1NsZXNzIik7CiAgICAgICAgICAgICBzbGVzcyA9IHNsZXNzSG9tZS5jcmVhdGUoKTsKICAgICAgICAgICAgIG9iaiA9IGljMl8ubG9va3VwKCJTbGVzc1JlbW90ZSIpOwogICAgICAgICAgICAgc2xlc3NSZW1vdGVIb21lID0gKFNsZXNzUmVtb3RlSG9tZSkKICAgICAgICAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqLCBTbGVzc1JlbW90ZUhvbWUuY2xhc3MpOwogICAgICAgICAgICAgc2xlc3NSZW1vdGUgPSBzbGVzc1JlbW90ZUhvbWUuY3JlYXRlKCk7CiAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGVkIFN0YXRlbGVzcyBiZWFuLiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0ZWQgU3RhdGVsZXNzIGJlYW4uIik7CiAKLQkgICAgYm1wSG9tZSA9IChCbXBIb21lKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL0JtcCIpOworICAgICAgICBibXBIb21lID0gKEJtcEhvbWUpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvQm1wIik7CiAKICAgICAgICAgICAgIGJtcCA9IGJtcEhvbWUuY3JlYXRlKHBrZXkpOwogICAgICAgICAgICAgb2JqID0gaWMyXy5sb29rdXAoIkJtcFJlbW90ZSIpOwpAQCAtODksMTQgKzg5LDE0IEBACiAgICAgICAgICAgICBibXBSZW1vdGUgPSAoQm1wUmVtb3RlKQogICAgICAgICAgICAgICAgIGJtcFJlbW90ZUhvbWUuZmluZEJ5UHJpbWFyeUtleShwa2V5KTsKIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0ZWQgQk1QIGJlYW4uIik7Ci0JICAgCSAgICAgCi0JICAgIHV0ID0gY29udGV4dC5nZXRVc2VyVHJhbnNhY3Rpb24oKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGVkIEJNUCBiZWFuLiIpOwogCi0JfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY291bGRuJ3QgZ2V0IGFsbCBiZWFucyIpOwotCSAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisgICAgICAgIHV0ID0gY29udGV4dC5nZXRVc2VyVHJhbnNhY3Rpb24oKTsKKworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNvdWxkbid0IGdldCBhbGwgYmVhbnMiKTsKKyAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCB0ZXN0UmVtb3ZlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CkBAIC0xMDUsNyArMTA1LDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRlZCBCTVAgYmVhbi4iKTsKICAgICAgICAgICAgIGJtcEhvbWUucmVtb3ZlKGJtcDIuZ2V0UHJpbWFyeUtleSgpKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IHJlbW92ZWQgbG9jYWwgZW50aXR5IGJlYW4iKTsKLSAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeyAgICAgICAgICAgIAorICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlKTsKICAgICAgICAgfQpAQCAtMTMwLDcgKzEzMCw3IEBACiAgICAgICAgICAgICAvLyBzdWNjZXNzCiAgICAgICAgIH0KIAotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgRUpCT2JqZWN0IGJtcFJlbW90ZTIgPSBibXBSZW1vdGVIb21lLmNyZWF0ZSgiZm9vYmFyMiIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGVkIEJNUCBiZWFuLiIpOwpAQCAtMTc0LDkgKzE3NCw5IEBACiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHNmdWwucmVtb3ZlKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBzZnVsLnJlbW92ZSgpOyAKKyAgICAgICAgICAgICAgICBzZnVsLnJlbW92ZSgpOwogICAgICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIjJuZCBzZnVsIHJlbW92ZSBzaG91bGQgaGF2ZSBjYXVzZWQgZXhjZXB0aW9uIik7CiAgICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgY2F1Z2h0IGV4Y2VwdGlvbiB3aGVuIGF0dGVtcHRpbmcgdG8gIisKQEAgLTE4Niw3ICsxODYsNyBAQAogCiAgICAgICAgICAgICBzbGVzcy5yZW1vdmUoKTsKIAotICAgICAgICAgICAgYm1wLnJlbW92ZSgpOyAKKyAgICAgICAgICAgIGJtcC5yZW1vdmUoKTsKIAogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwpAQCAtMjA4LDI5ICsyMDgsMjkgQEAKICAgICBwdWJsaWMgdm9pZCB0aHJvd0FwcEV4Y2VwdGlvbjIoKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uIHsKICAgICAgICAgdGhyb3cgbmV3IE9iamVjdE5vdEZvdW5kRXhjZXB0aW9uKCJ0aHJvd0FwcEV4Y2VwdGlvbjIiKTsKICAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgd2FybXVwKGludCB0eXBlKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQl3YXJtdXAodHlwZSwgdHJ1ZSk7Ci0Jd2FybXVwKHR5cGUsIGZhbHNlKTsKIAotCS8vIE1lYXN1cmUgbG9vcGluZyBhbmQgdGltaW5nIG92ZXJoZWFkIAotCWxvbmcgYmVnaW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQlmb3IgKCBpbnQgaT0wOyBpPElURVJBVElPTlM7IGkrKyApIHsKLQl9Ci0JbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQlvdmVyaGVhZCA9IGVuZCAtIGJlZ2luOworICAgIHB1YmxpYyB2b2lkIHdhcm11cChpbnQgdHlwZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgd2FybXVwKHR5cGUsIHRydWUpOworICAgIHdhcm11cCh0eXBlLCBmYWxzZSk7CisKKyAgICAvLyBNZWFzdXJlIGxvb3BpbmcgYW5kIHRpbWluZyBvdmVyaGVhZAorICAgIGxvbmcgYmVnaW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICBmb3IgKCBpbnQgaT0wOyBpPElURVJBVElPTlM7IGkrKyApIHsKKyAgICB9CisgICAgbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICBvdmVyaGVhZCA9IGVuZCAtIGJlZ2luOwogCiAgICAgICAgIFN0cmluZyBwa2V5MiA9IChTdHJpbmcpIGJtcC5nZXRQcmltYXJ5S2V5KCk7CiAgICAgICAgIGlmKCAhcGtleTIuZXF1YWxzKHBrZXkpICkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigicGtleTIgIiArIHBrZXkyICsgIiBkb2Vzbid0IG1hdGNoICIgKyBwa2V5KTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICB1dCA9IGNvbnRleHQuZ2V0VXNlclRyYW5zYWN0aW9uKCk7Ci0gICAgICAgIAorCiAgICAgICAgIHRlc3RMb2NhbE9iamVjdHMoc2Z1bCwgc2xlc3MpOwogICAgICAgICB0ZXN0TG9jYWxPYmplY3RzKHNmdWwsIGJtcCk7CiAgICAgICAgIHRlc3RMb2NhbE9iamVjdHMoc2xlc3MsIGJtcCk7Ci0gICAgICAgIAorCiAgICAgICAgIHRlc3RFSkJPYmplY3RzKHNmdWxSZW1vdGUsIHNsZXNzUmVtb3RlKTsKICAgICAgICAgdGVzdEVKQk9iamVjdHMoc2Z1bFJlbW90ZSwgYm1wUmVtb3RlKTsKICAgICAgICAgdGVzdEVKQk9iamVjdHMoc2xlc3NSZW1vdGUsIGJtcFJlbW90ZSk7CkBAIC0yNTksMTQgKzI1OSwxNCBAQAogICAgICAgICB0ZXN0RXhjZXB0aW9ucyhzbGVzc1JlbW90ZSk7CiAgICAgICAgIHRlc3RFeGNlcHRpb25zKGJtcFJlbW90ZSk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHRlc3RFeGNlcHRpb25zKENvbW1vbiBjKSB7CiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGMudGVzdEV4Y2VwdGlvbjEoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImRpZG4ndCBnZXQgZXhjZXB0aW9uIGZvciB0ZXN0RXhjZXB0aW9uMSIpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSBjYXVnaHQgZXhjZXB0aW9uICIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGNhdWdodCBleGNlcHRpb24gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5nZXRDbGFzcygpICsgIiAiICsgZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAKQEAgLTI3NCw3ICsyNzQsNyBAQAogICAgICAgICAgICAgYy50ZXN0RXhjZXB0aW9uMigpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiZGlkbid0IGdldCBleGNlcHRpb24gZm9yIHRlc3RFeGNlcHRpb24yIik7CiAgICAgICAgIH0gY2F0Y2goRUpCRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGNhdWdodCBleGNlcHRpb24gIiArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgY2F1Z2h0IGV4Y2VwdGlvbiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmdldENsYXNzKCkgKyAiICIgKyBlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KIApAQCAtMjgyLDEwICsyODIsMTAgQEAKICAgICAgICAgICAgIGMudGVzdEV4Y2VwdGlvbjMoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImRpZG4ndCBnZXQgZXhjZXB0aW9uIGZvciB0ZXN0RXhjZXB0aW9uMyIpOwogICAgICAgICB9IGNhdGNoKEZpbmRlckV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSBjYXVnaHQgZXhjZXB0aW9uICIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGNhdWdodCBleGNlcHRpb24gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5nZXRDbGFzcygpICsgIiAiICsgZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCisKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgdGVzdEV4Y2VwdGlvbnMoQ29tbW9uUmVtb3RlIGMpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewpAQCAtMjk0LDcgKzI5NCw3IEBACiAgICAgICAgICAgICBjLnRlc3RFeGNlcHRpb24xKCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJkaWRuJ3QgZ2V0IGV4Y2VwdGlvbiBmb3IgdGVzdEV4Y2VwdGlvbjEiKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgY2F1Z2h0IGV4Y2VwdGlvbiAiICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSBjYXVnaHQgZXhjZXB0aW9uICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuZ2V0Q2xhc3MoKSArICIgIiArIGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogCkBAIC0zMDIsNyArMzAyLDcgQEAKICAgICAgICAgICAgIGMudGVzdEV4Y2VwdGlvbjIoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImRpZG4ndCBnZXQgZXhjZXB0aW9uIGZvciB0ZXN0RXhjZXB0aW9uMiIpOwogICAgICAgICB9IGNhdGNoKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSBjYXVnaHQgZXhjZXB0aW9uICIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGNhdWdodCBleGNlcHRpb24gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5nZXRDbGFzcygpICsgIiAiICsgZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAKQEAgLTMxMCw3ICszMTAsNyBAQAogICAgICAgICAgICAgYy50ZXN0RXhjZXB0aW9uMygpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiZGlkbid0IGdldCBleGNlcHRpb24gZm9yIHRlc3RFeGNlcHRpb24zIik7CiAgICAgICAgIH0gY2F0Y2goRmluZGVyRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGNhdWdodCBleGNlcHRpb24gIiArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgY2F1Z2h0IGV4Y2VwdGlvbiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmdldENsYXNzKCkgKyAiICIgKyBlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KIApAQCAtMzE4LDEwICszMTgsMTAgQEAKICAgICAgICAgICAgIGMudGVzdEV4Y2VwdGlvbjQoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImRpZG4ndCBnZXQgZXhjZXB0aW9uIGZvciB0ZXN0RXhjZXB0aW9uNCIpOwogICAgICAgICB9IGNhdGNoKEZpbmRlckV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSBjYXVnaHQgZXhjZXB0aW9uICIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGNhdWdodCBleGNlcHRpb24gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5nZXRDbGFzcygpICsgIiAiICsgZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCisKICAgICB9CiAKICAgICBwdWJsaWMgT2JqZWN0IHRlc3RQYXNzQnlSZWYoKSB0aHJvd3MgRXhjZXB0aW9uIHsKQEAgLTM0Myw5ICszNDMsOSBAQAogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgX3Rlc3RQYXNzQnlSZWYoQ29tbW9uUmVtb3RlIGMsIGJvb2xlYW4gcGFzc0J5UmVmKSAKKyAgICBwcml2YXRlIHZvaWQgX3Rlc3RQYXNzQnlSZWYoQ29tbW9uUmVtb3RlIGMsIGJvb2xlYW4gcGFzc0J5UmVmKQogICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIGludCBpbnRWYWwgPSAxOwogICAgICAgICBTdHJpbmcgc3RyaW5nVmFsID0gIkhlbGxvRUpCOjpfdGVzdFBhc3NCeVJlZiI7CiAKQEAgLTM2MSw3ICszNjEsNyBAQAogICAgICAgICBpZiggcGFzc0J5UmVmICkgewogICAgICAgICAgICAgaWYoIChoMS5hID09IGludFZhbCkgfHwgaDEuYi5lcXVhbHMoc3RyaW5nVmFsKSApIHsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJoMSBtdXRhdGlvbnMgbm90IHByZXNlbnQgIiArIGgxKTsKLSAgICAgICAgICAgIH0gICAgICAgICAgICAKKyAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmKCAoaDEuYSAhPSBpbnRWYWwpIHx8ICFoMS5iLmVxdWFscyhzdHJpbmdWYWwpICkgewogICAgICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImVycm9yIDogaDEgd2FzIG11dGF0ZWQgIiArIGgxKTsKQEAgLTM3OCwyMyArMzc4LDIzIEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFmdGVyIHRlc3RQYXNzQnlSZWYzIDogIiArIGgyKTsKICAgICAgICAgICAgIGlmKCAoaDIuYSA9PSBpbnRWYWwpIHx8IGgyLmIuZXF1YWxzKHN0cmluZ1ZhbCkgKSB7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiaDIgbXV0YXRpb25zIG5vdCBwcmVzZW50ICIgKyBoMik7Ci0gICAgICAgICAgICB9ICAgCisgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGMudGVzdFBhc3NCeVJlZjMoaDIpOwotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXJyb3IgOiBFeHBlY3RlZCBleGNlcHRpb24gd2hlbiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFcnJvciA6IEV4cGVjdGVkIGV4Y2VwdGlvbiB3aGVuICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFzc2luZyBub24tc2VyaWFsaXphYmxlIGRhdGEgIiArIGgyKTsKLSAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvKiBET04nVCBUUkVBVCBBUyBGQVRBTCBFUlJPUiBXSElMRSBXRSBJTlZFU1RJR0FURSBXSEVUSEVSCiAgICAgICAgICAgICAgICAgICogVEhJUyBXQVMgSU5URU5ERUQgQkVIQVZJT1IgRk9SIFRIRSBPUkIKLSAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiRXJyb3IgOiBFeHBlY3RlZCBleGNlcHRpb24gd2hlbiAiICsgCi0gICAgICAgICAgICAgICAgICJwYXNzaW5nIG5vbi1zZXJpYWxpemFibGUgZGF0YSAiICsgCisgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIkVycm9yIDogRXhwZWN0ZWQgZXhjZXB0aW9uIHdoZW4gIiArCisgICAgICAgICAgICAgICAgICJwYXNzaW5nIG5vbi1zZXJpYWxpemFibGUgZGF0YSAiICsKICAgICAgICAgICAgICAgICAgaDIpOwogICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICB9IGNhdGNoKEVKQkV4Y2VwdGlvbiBlamJleCkgewogICAgICAgICAgICAgICAgIHRocm93IGVqYmV4OwogICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2F1Z2h0IGV4cGVjdGVkIGV4Y2VwdGlvbiB3aGVuICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhdWdodCBleHBlY3RlZCBleGNlcHRpb24gd2hlbiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBwYXNzaW5nIG5vbi1zZXJpYWxpemFibGUgZGF0YSIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgfQpAQCAtNDA5LDE2ICs0MDksMTYgQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgSGVscGVyMiBoNiA9IGMudGVzdFBhc3NCeVJlZjYoKTsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIDogRXhwZWN0ZWQgZXhjZXB0aW9uIHdoZW4gIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXJyb3IgOiBFeHBlY3RlZCBleGNlcHRpb24gd2hlbiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5pbmcgbm9uLXNlcmlhbGl6YWJsZSBkYXRhICIgKyBoNik7Ci0gICAgICAgICAgICAgICAgLyogc2VlIGNvbW1lbnQgZm9yIHRlc3RQYXNzQnlSZWYzIGFib3ZlIAotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIkVycm9yIDogRXhwZWN0ZWQgZXhjZXB0aW9uIHdoZW4gIiArIAorICAgICAgICAgICAgICAgIC8qIHNlZSBjb21tZW50IGZvciB0ZXN0UGFzc0J5UmVmMyBhYm92ZQorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIkVycm9yIDogRXhwZWN0ZWQgZXhjZXB0aW9uIHdoZW4gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmV0dXJuaW5nIG5vbi1zZXJpYWxpemFibGUgZGF0YSAiKTsKICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgfSBjYXRjaChFSkJFeGNlcHRpb24gZWpiZXgpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBlamJleDsgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB0aHJvdyBlamJleDsKICAgICAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhdWdodCBleHBlY3RlZCBleGNlcHRpb24gd2hlbiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYXVnaHQgZXhwZWN0ZWQgZXhjZXB0aW9uIHdoZW4gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgcmV0dXJuaW5nIG5vbi1zZXJpYWxpemFibGUgZGF0YSIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgfQpAQCAtNDUwLDE0NCArNDUwLDE0NCBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCB3YXJtdXAoaW50IHR5cGUsIGJvb2xlYW4gdHgpIHRocm93cyBFeGNlcHRpb24gewotCS8vIGdldCBIb3RzcG90IHdhcm1lZCB1cAkKLQlDb21tb24gYmVhbiA9IHByZSh0eXBlLCB0eCk7Ci0JZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7Ci0JICAgIGJlYW4ucmVxdWlyZXNOZXcoKTsKLQkgICAgYmVhbi5ub3RTdXBwb3J0ZWQoKTsKLQl9Ci0JZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7Ci0JICAgIGJlYW4ucmVxdWlyZWQoKTsKLQkgICAgaWYgKCB0eCApCi0JCWJlYW4ubWFuZGF0b3J5KCk7Ci0JICAgIGVsc2UKLQkJYmVhbi5uZXZlcigpOwotCSAgICBiZWFuLnN1cHBvcnRzKCk7Ci0JfQotCWlmICggdHggKSB0cnkgeyB1dC5jb21taXQoKTsgfSBjYXRjaCAoIEV4Y2VwdGlvbiBleCApIHt9CisgICAgLy8gZ2V0IEhvdHNwb3Qgd2FybWVkIHVwCisgICAgQ29tbW9uIGJlYW4gPSBwcmUodHlwZSwgdHgpOworICAgIGZvciAoIGludCBpPTA7IGk8SVRFUkFUSU9OUzsgaSsrICkgeworICAgICAgICBiZWFuLnJlcXVpcmVzTmV3KCk7CisgICAgICAgIGJlYW4ubm90U3VwcG9ydGVkKCk7CisgICAgfQorICAgIGZvciAoIGludCBpPTA7IGk8SVRFUkFUSU9OUzsgaSsrICkgeworICAgICAgICBiZWFuLnJlcXVpcmVkKCk7CisgICAgICAgIGlmICggdHggKQorICAgICAgICBiZWFuLm1hbmRhdG9yeSgpOworICAgICAgICBlbHNlCisgICAgICAgIGJlYW4ubmV2ZXIoKTsKKyAgICAgICAgYmVhbi5zdXBwb3J0cygpOworICAgIH0KKyAgICBpZiAoIHR4ICkgdHJ5IHsgdXQuY29tbWl0KCk7IH0gY2F0Y2ggKCBFeGNlcHRpb24gZXggKSB7fQogICAgIH0KIAotICAgIHByaXZhdGUgQ29tbW9uIHByZShpbnQgdHlwZSwgYm9vbGVhbiB0eCkgCisgICAgcHJpdmF0ZSBDb21tb24gcHJlKGludCB0eXBlLCBib29sZWFuIHR4KQogICAgIHsKLQlpZiAoIHR4ICkgdHJ5IHsgdXQuYmVnaW4oKTsgfSBjYXRjaCAoIEV4Y2VwdGlvbiBleCApIHt9Ci0JaWYgKCB0eXBlID09IENvbW1vbi5TVEFURUxFU1MgKQotCSAgICByZXR1cm4gc2xlc3M7Ci0JZWxzZSBpZiAoIHR5cGUgPT0gQ29tbW9uLlNUQVRFRlVMICkKLQkgICAgcmV0dXJuIHNmdWw7Ci0JZWxzZQotCSAgICByZXR1cm4gYm1wOworICAgIGlmICggdHggKSB0cnkgeyB1dC5iZWdpbigpOyB9IGNhdGNoICggRXhjZXB0aW9uIGV4ICkge30KKyAgICBpZiAoIHR5cGUgPT0gQ29tbW9uLlNUQVRFTEVTUyApCisgICAgICAgIHJldHVybiBzbGVzczsKKyAgICBlbHNlIGlmICggdHlwZSA9PSBDb21tb24uU1RBVEVGVUwgKQorICAgICAgICByZXR1cm4gc2Z1bDsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBibXA7CiAgICAgfQogCi0gICAgcHJpdmF0ZSBDb21tb25SZW1vdGUgcHJlUmVtb3RlKGludCB0eXBlLCBib29sZWFuIHR4KSAKLSAgICB7ICAgICAgIAotCWlmICggdHlwZSA9PSBDb21tb24uU1RBVEVMRVNTICkKLQkgICAgcmV0dXJuIHNsZXNzUmVtb3RlOwotCWVsc2UgaWYgKCB0eXBlID09IENvbW1vbi5TVEFURUZVTCApCi0JICAgIHJldHVybiBzZnVsUmVtb3RlOwotCWVsc2UKLQkgICAgcmV0dXJuIGJtcFJlbW90ZTsKKyAgICBwcml2YXRlIENvbW1vblJlbW90ZSBwcmVSZW1vdGUoaW50IHR5cGUsIGJvb2xlYW4gdHgpCisgICAgeworICAgIGlmICggdHlwZSA9PSBDb21tb24uU1RBVEVMRVNTICkKKyAgICAgICAgcmV0dXJuIHNsZXNzUmVtb3RlOworICAgIGVsc2UgaWYgKCB0eXBlID09IENvbW1vbi5TVEFURUZVTCApCisgICAgICAgIHJldHVybiBzZnVsUmVtb3RlOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGJtcFJlbW90ZTsKICAgICB9CiAKIAogICAgIHByaXZhdGUgZmxvYXQgcG9zdChsb25nIGJlZ2luLCBsb25nIGVuZCwgYm9vbGVhbiB0eCkKICAgICB7Ci0JaWYgKCB0eCApIHRyeSB7IHV0LmNvbW1pdCgpOyB9IGNhdGNoICggRXhjZXB0aW9uIGV4ICkge30KLQlyZXR1cm4gKGZsb2F0KSggKChkb3VibGUpKGVuZC1iZWdpbi1vdmVyaGVhZCkpLygoZG91YmxlKUlURVJBVElPTlMpICogMTAwMC4wICk7CisgICAgaWYgKCB0eCApIHRyeSB7IHV0LmNvbW1pdCgpOyB9IGNhdGNoICggRXhjZXB0aW9uIGV4ICkge30KKyAgICByZXR1cm4gKGZsb2F0KSggKChkb3VibGUpKGVuZC1iZWdpbi1vdmVyaGVhZCkpLygoZG91YmxlKUlURVJBVElPTlMpICogMTAwMC4wICk7CiAgICAgfQogCiAgICAgcHVibGljIGZsb2F0IHJlcXVpcmVzTmV3KGludCB0eXBlLCBib29sZWFuIHR4KSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uCiAgICAgewotCUNvbW1vbiBiZWFuID0gcHJlKHR5cGUsIHR4KTsKKyAgICBDb21tb24gYmVhbiA9IHByZSh0eXBlLCB0eCk7CiAgICAgICAgIENvbW1vblJlbW90ZSBiZWFuUmVtb3RlID0gcHJlUmVtb3RlKHR5cGUsIHR4KTsKLQlsb25nIGJlZ2luID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7Ci0JICAgIGJlYW4ucmVxdWlyZXNOZXcoKTsKLQl9CisgICAgbG9uZyBiZWdpbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgIGZvciAoIGludCBpPTA7IGk8SVRFUkFUSU9OUzsgaSsrICkgeworICAgICAgICBiZWFuLnJlcXVpcmVzTmV3KCk7CisgICAgfQogICAgICAgICBmb3IgKCBpbnQgaT0wOyBpPElURVJBVElPTlM7IGkrKyApIHsKLQkgICAgYmVhblJlbW90ZS5yZXF1aXJlc05ldygpOwotCX0KLQlsb25nIGVuZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCXJldHVybiBwb3N0KGJlZ2luLCBlbmQsIHR4KTsKKyAgICAgICAgYmVhblJlbW90ZS5yZXF1aXJlc05ldygpOworICAgIH0KKyAgICBsb25nIGVuZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgIHJldHVybiBwb3N0KGJlZ2luLCBlbmQsIHR4KTsKICAgICB9CiAKICAgICBwdWJsaWMgZmxvYXQgbm90U3VwcG9ydGVkKGludCB0eXBlLCBib29sZWFuIHR4KSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uCiAgICAgewotCUNvbW1vbiBiZWFuID0gcHJlKHR5cGUsIHR4KTsKKyAgICBDb21tb24gYmVhbiA9IHByZSh0eXBlLCB0eCk7CiAgICAgICAgIENvbW1vblJlbW90ZSBiZWFuUmVtb3RlID0gcHJlUmVtb3RlKHR5cGUsIHR4KTsKLQlsb25nIGJlZ2luID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7Ci0JICAgIGJlYW4ubm90U3VwcG9ydGVkKCk7Ci0JfQorICAgIGxvbmcgYmVnaW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICBmb3IgKCBpbnQgaT0wOyBpPElURVJBVElPTlM7IGkrKyApIHsKKyAgICAgICAgYmVhbi5ub3RTdXBwb3J0ZWQoKTsKKyAgICB9CiAgICAgICAgIGZvciAoIGludCBpPTA7IGk8SVRFUkFUSU9OUzsgaSsrICkgewotCSAgICBiZWFuUmVtb3RlLm5vdFN1cHBvcnRlZCgpOwotCX0KLQlsb25nIGVuZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCXJldHVybiBwb3N0KGJlZ2luLCBlbmQsIHR4KTsKKyAgICAgICAgYmVhblJlbW90ZS5ub3RTdXBwb3J0ZWQoKTsKKyAgICB9CisgICAgbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICByZXR1cm4gcG9zdChiZWdpbiwgZW5kLCB0eCk7CiAgICAgfQogCiAgICAgcHVibGljIGZsb2F0IHJlcXVpcmVkKGludCB0eXBlLCBib29sZWFuIHR4KSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uCiAgICAgewotCUNvbW1vbiBiZWFuID0gcHJlKHR5cGUsIHR4KTsKKyAgICBDb21tb24gYmVhbiA9IHByZSh0eXBlLCB0eCk7CiAgICAgICAgIENvbW1vblJlbW90ZSBiZWFuUmVtb3RlID0gcHJlUmVtb3RlKHR5cGUsIHR4KTsKLQlsb25nIGJlZ2luID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7Ci0JICAgIGJlYW4ucmVxdWlyZWQoKTsKLQl9Ci0JZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7Ci0JICAgIGJlYW5SZW1vdGUucmVxdWlyZWQoKTsKLQl9CisgICAgbG9uZyBiZWdpbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgIGZvciAoIGludCBpPTA7IGk8SVRFUkFUSU9OUzsgaSsrICkgeworICAgICAgICBiZWFuLnJlcXVpcmVkKCk7CisgICAgfQorICAgIGZvciAoIGludCBpPTA7IGk8SVRFUkFUSU9OUzsgaSsrICkgeworICAgICAgICBiZWFuUmVtb3RlLnJlcXVpcmVkKCk7CisgICAgfQogCi0JbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQlyZXR1cm4gcG9zdChiZWdpbiwgZW5kLCB0eCk7CisgICAgbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICByZXR1cm4gcG9zdChiZWdpbiwgZW5kLCB0eCk7CiAgICAgfQogCiAgICAgcHVibGljIGZsb2F0IG1hbmRhdG9yeShpbnQgdHlwZSwgYm9vbGVhbiB0eCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbgogICAgIHsKLQlDb21tb24gYmVhbiA9IHByZSh0eXBlLCB0eCk7CisgICAgQ29tbW9uIGJlYW4gPSBwcmUodHlwZSwgdHgpOwogICAgICAgICBDb21tb25SZW1vdGUgYmVhblJlbW90ZSA9IHByZVJlbW90ZSh0eXBlLCB0eCk7Ci0JbG9uZyBiZWdpbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCWZvciAoIGludCBpPTA7IGk8SVRFUkFUSU9OUzsgaSsrICkgewotCSAgICBiZWFuLm1hbmRhdG9yeSgpOwotCX0KLQlmb3IgKCBpbnQgaT0wOyBpPElURVJBVElPTlM7IGkrKyApIHsKLQkgICAgYmVhblJlbW90ZS5tYW5kYXRvcnkoKTsKLQl9Ci0JbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQlyZXR1cm4gcG9zdChiZWdpbiwgZW5kLCB0eCk7CisgICAgbG9uZyBiZWdpbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgIGZvciAoIGludCBpPTA7IGk8SVRFUkFUSU9OUzsgaSsrICkgeworICAgICAgICBiZWFuLm1hbmRhdG9yeSgpOworICAgIH0KKyAgICBmb3IgKCBpbnQgaT0wOyBpPElURVJBVElPTlM7IGkrKyApIHsKKyAgICAgICAgYmVhblJlbW90ZS5tYW5kYXRvcnkoKTsKKyAgICB9CisgICAgbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICByZXR1cm4gcG9zdChiZWdpbiwgZW5kLCB0eCk7CiAgICAgfQogCiAgICAgcHVibGljIGZsb2F0IG5ldmVyKGludCB0eXBlLCBib29sZWFuIHR4KSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uCiAgICAgewotCUNvbW1vbiBiZWFuID0gcHJlKHR5cGUsIHR4KTsKKyAgICBDb21tb24gYmVhbiA9IHByZSh0eXBlLCB0eCk7CiAgICAgICAgIENvbW1vblJlbW90ZSBiZWFuUmVtb3RlID0gcHJlUmVtb3RlKHR5cGUsIHR4KTsKLQlsb25nIGJlZ2luID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7Ci0JICAgIGJlYW4ubmV2ZXIoKTsKLQl9Ci0JZm9yICggaW50IGk9MDsgaTxJVEVSQVRJT05TOyBpKysgKSB7Ci0JICAgIGJlYW5SZW1vdGUubmV2ZXIoKTsKLQl9Ci0JbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQlyZXR1cm4gcG9zdChiZWdpbiwgZW5kLCB0eCk7CisgICAgbG9uZyBiZWdpbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgIGZvciAoIGludCBpPTA7IGk8SVRFUkFUSU9OUzsgaSsrICkgeworICAgICAgICBiZWFuLm5ldmVyKCk7CisgICAgfQorICAgIGZvciAoIGludCBpPTA7IGk8SVRFUkFUSU9OUzsgaSsrICkgeworICAgICAgICBiZWFuUmVtb3RlLm5ldmVyKCk7CisgICAgfQorICAgIGxvbmcgZW5kID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgcmV0dXJuIHBvc3QoYmVnaW4sIGVuZCwgdHgpOwogICAgIH0KIAogICAgIHB1YmxpYyBmbG9hdCBzdXBwb3J0cyhpbnQgdHlwZSwgYm9vbGVhbiB0eCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbgogICAgIHsKLQlDb21tb24gYmVhbiA9IHByZSh0eXBlLCB0eCk7CisgICAgQ29tbW9uIGJlYW4gPSBwcmUodHlwZSwgdHgpOwogICAgICAgICBDb21tb25SZW1vdGUgYmVhblJlbW90ZSA9IHByZVJlbW90ZSh0eXBlLCB0eCk7Ci0JbG9uZyBiZWdpbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCWZvciAoIGludCBpPTA7IGk8SVRFUkFUSU9OUzsgaSsrICkgewotCSAgICBiZWFuLnN1cHBvcnRzKCk7Ci0JfQotCWZvciAoIGludCBpPTA7IGk8SVRFUkFUSU9OUzsgaSsrICkgewotCSAgICBiZWFuUmVtb3RlLnN1cHBvcnRzKCk7Ci0JfQotCWxvbmcgZW5kID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JcmV0dXJuIHBvc3QoYmVnaW4sIGVuZCwgdHgpOworICAgIGxvbmcgYmVnaW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICBmb3IgKCBpbnQgaT0wOyBpPElURVJBVElPTlM7IGkrKyApIHsKKyAgICAgICAgYmVhbi5zdXBwb3J0cygpOworICAgIH0KKyAgICBmb3IgKCBpbnQgaT0wOyBpPElURVJBVElPTlM7IGkrKyApIHsKKyAgICAgICAgYmVhblJlbW90ZS5zdXBwb3J0cygpOworICAgIH0KKyAgICBsb25nIGVuZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgIHJldHVybiBwb3N0KGJlZ2luLCBlbmQsIHR4KTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgewotCWNvbnRleHQgPSBzYzsKKyAgICBjb250ZXh0ID0gc2M7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkge30KQEAgLTYzNywxMSArNjM3LDExIEBACiAgICAgICAgIGlmKCBvMS5pc0lkZW50aWNhbChvMikgKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJpc0lkZW50aWNhbCBmYWlsZWQiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiggbzIuaXNJZGVudGljYWwobzEpICkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiaXNJZGVudGljYWwgZmFpbGVkIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYoICFvMS5pc0lkZW50aWNhbChvMSkgKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJpc0lkZW50aWNhbCBmYWlsZWQiKTsKICAgICAgICAgfQpAQCAtNjk0LDEyICs2OTQsMTIgQEAKICAgICAgICAgfQogCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibzEuaGFzaENvZGUoKSA9ICIgKyBvMS5oYXNoQ29kZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibzIuaGFzaENvZGUoKSA9ICIgKyBvMi5oYXNoQ29kZSgpKTsKLSAgICAgICAgCisKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvMS50b1N0cmluZygpID0gIiArIG8xLnRvU3RyaW5nKCkpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm8yLnRvU3RyaW5nKCkgPSAiICsgbzIudG9TdHJpbmcoKSk7Ci0gICAgICAgIAorCiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvcHJveHkvZWpiL1NmdWxFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9wcm94eS9lamIvU2Z1bEVKQi5qYXZhCmluZGV4IGU0MTY5MTUuLjIxZDk4NTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9wcm94eS9lamIvU2Z1bEVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9wcm94eS9lamIvU2Z1bEVKQi5qYXZhCkBAIC0zOSwxNCArMzksMTQgQEAKICAgICAgICAgc2NfID0gc2M7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgCi0gICAgeyAKKyAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKQorICAgIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTZnVsRUpCLmVqYlJlbW92ZSgpLiBhYm91dCB0byB0aHJvdyBleGNlcHRpb24iKTsKICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oInRlc3QgY2xlYW51cCBmb3IgY2FzZSB3aGVyZSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVqYlJlbW92ZSB0aHJvd3MgYW4gZXhjZXB0aW9uIik7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSAKKyAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpCiAgICAge30KIAogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpCkBAIC0xMDIsNyArMTAyLDcgQEAKICAgICAgICAgSGVscGVyMiBoMiA9IG5ldyBIZWxwZXIyKCk7CiAgICAgICAgIGgyLmEgPSAxOwogICAgICAgICBoMi5iID0gIlNmdWxFSkI6OnRlc3RQYXNzQnlSZWY2IjsKLSAgICAgICAgcmV0dXJuIGgyOyAgICAKKyAgICAgICAgcmV0dXJuIGgyOwogICAgIH0KIAogICAgIHB1YmxpYyBDb21tb25SZW1vdGUgdGVzdFBhc3NCeVJlZjcoKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvcHJveHkvZWpiL1NsZXNzRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvcHJveHkvZWpiL1NsZXNzRUpCLmphdmEKaW5kZXggOWJlMDUzZS4uYWU2ZTBjYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3Byb3h5L2VqYi9TbGVzc0VKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9wcm94eS9lamIvU2xlc3NFSkIuamF2YQpAQCAtNDAsMTAgKzQwLDEwIEBACiAgICAgICAgIHNjXyA9IHNjOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIAorICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpCiAgICAge30KIAotICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgCisgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKQogICAgIHt9CiAKICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKQpAQCAtNzAsNyArNzAsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHRlc3RQYXNzQnlSZWYxKGludCBhKSB7Ci0gICAgICAgIAorCiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgdGVzdFBhc3NCeVJlZjIoSGVscGVyMSBoZWxwZXIxKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvc3RhbmRhbG9uZWNsaWVudC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3N0YW5kYWxvbmVjbGllbnQvYnVpbGQucHJvcGVydGllcwppbmRleCBhODAyMzMzLi5kNjhlYjFkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvc3RhbmRhbG9uZWNsaWVudC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9zdGFuZGFsb25lY2xpZW50L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9InRlc3QubmFtZSIgdmFsdWU9ImNvbS5zdW4uczFhc2Rldi5lamIuc3R1YnMuc3RhbmRhbG9uZWNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9InNpbXBsZS5jbGllbnQiIHZhbHVlPSIke3Rlc3QubmFtZX0uU2ltcGxlQ2xpZW50Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvc3RhbmRhbG9uZWNsaWVudC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvc3RhbmRhbG9uZWNsaWVudC9idWlsZC54bWwKaW5kZXggNGY5ZjE1MS4uYjEzMTQwZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3N0YW5kYWxvbmVjbGllbnQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9zdGFuZGFsb25lY2xpZW50L2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CiAgICAgICAgPGVjaG8gbWVzc2FnZT0iY29tbW9uLnhtbDogQ29tcGlsaW5nIHRlc3Qgc291cmNlIGZpbGVzIiBsZXZlbD0idmVyYm9zZSIvPgpAQCAtNDIsMTEgKzQyLDExIEBACiAgICAgICAgICAgICAgIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7czFhc3Rlc3QuY2xhc3NwYXRofToke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgICAgZGVidWc9Im9uIgotICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIvPiAgICAgICAgCisgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bmNsaWVudF9ub292ZXJyaWRlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgPGphdmEgIGZvcms9Im9uIiAKKyAgICAgICA8amF2YSAgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2oyZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHthc3NlbWJsZS5kaXJ9L2VqYi1zdHVicy1lamJhcHBBcHBDbGllbnQvZWpiLXN0dWJzLWVqYmFwcC1jbGllbnRDbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICBjbGFzc25hbWU9IiR7c2ltcGxlLmNsaWVudH0iPgpAQCAtNTUsNyArNTUsNyBAQAogICAgICAgICAgICA8YXJnIHZhbHVlPSJlamIvZWpiX3N0dWJzX2VqYmFwcF9IZWxsb0JlYW4iLz4KICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtpYy5wcm9wc30iLz4KICAgICAgICAgPC9qYXZhPgotICAgIDwvdGFyZ2V0PiAgICAgCisgICAgPC90YXJnZXQ+CiAKIDwhLS1UaGlzIHRhcmdldCBpcyB1c2VkIHRvIHRlc3QgdGhhdCB1c2luZyBuby1hcmcgSW5pdGlhbENvbnRleHQgYW5kCiAgICAgbm90IHNldHRpbmcgYW55IHZtIHBhcmFtcyB3aWxsIHN0aWxsIHdvcmssIGFzc3VtaW5nIHRoZSBkZWZhdWx0CkBAIC02MywxMyArNjMsMTMgQEAKICAgICB0ZXN0cyBydW4gYi9jIG9mIHRoZSBwb3J0IGNoYW5nZSBwb3NzaWJpbGl0eS4gIEhvd2V2ZXIsIGlmIHRoZQogICAgIGRlZmF1bHQgcG9ydCBvZiAzNzAwIGlzIHNldCwgdGhpcyB0ZXN0IHNob3VsZCB3b3JrLiAgIC0tPgogICAgIDx0YXJnZXQgbmFtZT0icnVuY2xpZW50X3NldG5vdGhpbmciIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgIDxqYXZhICBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvajJlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke2Fzc2VtYmxlLmRpcn0vZWpiLXN0dWJzLWVqYmFwcEFwcENsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iJHtzaW1wbGUuY2xpZW50fSI+CiAgICAgICAgICAgIDxhcmcgdmFsdWU9ImVqYi9lamJfc3R1YnNfZWpiYXBwX0hlbGxvQmVhbiIvPgogICAgICAgICA8L2phdmE+Ci0gICAgPC90YXJnZXQ+ICAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW5fZGVmYXVsdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudF9ub292ZXJyaWRlIj4KQEAgLTk0LDcgKzk0LDcgQEAKIAogCiAgICAgPHRhcmdldCBuYW1lPSJydW5jbGllbnRfd2l0aG92ZXJyaWRlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgPGphdmEgIGZvcms9Im9uIiAKKyAgICAgICA8amF2YSAgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2oyZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHthc3NlbWJsZS5kaXJ9L2VqYi1zdHVicy1lamJhcHBBcHBDbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICBjbGFzc25hbWU9IiR7c2ltcGxlLmNsaWVudH0iPgpAQCAtMTA1LDcgKzEwNSw3IEBACiAgICAgICAgICAgIDxhcmcgdmFsdWU9ImVqYi9lamJfc3R1YnNfZWpiYXBwX0hlbGxvQmVhbiIvPgogICAgICAgICAgICA8YXJnIHZhbHVlPSJqbmRpLnByb3BlcnRpZXMuczFhczhfZGVmYXVsdCIvPgogICAgICAgICA8L2phdmE+Ci0gICAgPC90YXJnZXQ+ICAgICAKKyAgICA8L3RhcmdldD4KIAogCiAgICAgPHRhcmdldCBuYW1lPSJydW5fY29zbmFtaW5nX292ZXJyaWRlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvc3RhbmRhbG9uZWNsaWVudC9jbGllbnQvQnRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9zdGFuZGFsb25lY2xpZW50L2NsaWVudC9CdGVzdC5qYXZhCmluZGV4IDc1ZDBmMDUuLmNlMGE4NWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9zdGFuZGFsb25lY2xpZW50L2NsaWVudC9CdGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9zdGFuZGFsb25lY2xpZW50L2NsaWVudC9CdGVzdC5qYXZhCkBAIC0zNSwxMyArMzUsMTMgQEAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQogICAgIHsKICAgICAgICB0cnkgewotICAgICAgICAgICAvLyBTdGVwIDE6ICBJdCBpcyBpbXBvcnRhbnQgdG8gY2FsbCBpbml0YWlsaXplU3lzdGVtUHJvcGVydGllcyB0byAKLSAgICAgICAgICAgLy8gYXZvaWQgcHJvYmxlbXMgd2l0aCBzd2l0Y2hpbmcgT1JCcyBiZXR3ZWVuIEoyU0UgYW5kIEFwcFNlcnZlci4gCi0gICAgICAgICAgIC8vIFRoZXNlIGFyZSBzeXN0ZW0gcHJvcGVydGllcyB0aGF0IG5lZWRzIHRvIGJlIHJ1biBvbmNlIG9yIHRoZXNlIAorICAgICAgICAgICAvLyBTdGVwIDE6ICBJdCBpcyBpbXBvcnRhbnQgdG8gY2FsbCBpbml0YWlsaXplU3lzdGVtUHJvcGVydGllcyB0bworICAgICAgICAgICAvLyBhdm9pZCBwcm9ibGVtcyB3aXRoIHN3aXRjaGluZyBPUkJzIGJldHdlZW4gSjJTRSBhbmQgQXBwU2VydmVyLgorICAgICAgICAgICAvLyBUaGVzZSBhcmUgc3lzdGVtIHByb3BlcnRpZXMgdGhhdCBuZWVkcyB0byBiZSBydW4gb25jZSBvciB0aGVzZQogICAgICAgICAgICAvLyBwcm9wZXJ0aWVzIGNhbiBiZSBwYXNzZWQgdGhyb3VnaCAtRCBmbGFncwogICAgICAgICAgICBpbml0aWFsaXplU3lzdGVtUHJvcGVydGllcyggKTsKLSAgICAgICAgCi0gICAgICAgICAgIC8vIFN0ZXAgMjogTm93IGRvIHRoZSBFSkIgbG9va3VwLCBhbmQgY2FsbCB0aGUgbWV0aG9kcyBvbiB0aGUgCisKKyAgICAgICAgICAgLy8gU3RlcCAyOiBOb3cgZG8gdGhlIEVKQiBsb29rdXAsIGFuZCBjYWxsIHRoZSBtZXRob2RzIG9uIHRoZQogICAgICAgICAgICAvLyBNZXRhZGF0YSBPYmplY3QKICAgICAgICAgICAgZ2V0Q29udGV4dCgpOwogCkBAIC00OSw5ICs0OSw5IEBACiAgICAgICAgICAgIEVKQkhvbWUgaG9tZSA9IGdldEhvbWUoIGJvdW5kT2JqICk7CiAgICAgICAgICAgIGdldE1ldGFEYXRhKCBob21lICk7CiAKLSAgICAgICAgICAgLy8gU3RlcCAzOiAgUmVwZWF0IFN0ZXAgMiBhcyBtYW55IHRpbWVzIGFzIG5lZWRlZC4gQWx0aG91Z2ggdGhlIAorICAgICAgICAgICAvLyBTdGVwIDM6ICBSZXBlYXQgU3RlcCAyIGFzIG1hbnkgdGltZXMgYXMgbmVlZGVkLiBBbHRob3VnaCB0aGUKICAgICAgICAgICAgLy8gYWR2aXNlIGlzIHRvIHBhc3MgImphdmF4Lm5hbWluZy5DT1JCQS5PUkIiIHByb3BlcnR5Ci0gICAgICAgICAgIC8vIHRvIGF2b2lkIGh1Z2UgbWVtb3J5IGZvb3RwcmludCBkdWUgdG8gbmV3IGluaXRpYWxDb250ZXh0cy4gCisgICAgICAgICAgIC8vIHRvIGF2b2lkIGh1Z2UgbWVtb3J5IGZvb3RwcmludCBkdWUgdG8gbmV3IGluaXRpYWxDb250ZXh0cy4KICAgICAgICAgICAgLy8gUmVtZW1iZXIgZXZlcnkgbmV3IEluaXRpYWxDb250ZXh0IHdpbGwgaW5pdGlhbGl6ZSBhIG5ldyBPUkIKICAgICAgICAgICAgLy8gd2hpY2ggaXMgdmVyeSBleHBlbnNpdmUgbWVtb3J5IHdpc2UuCiAvKlBHLT4KQEAgLTY0LDcgKzY0LDcgQEAKICAgICAgICAgICAgICAgIGdldE1ldGFEYXRhKCBob21lICk7CiAgICAgICAgICB9CiAqLwotICAgICAgICAgICAKKwogICAgICAgIH0gY2F0Y2ggKCBFeGNlcHRpb24gZSApIHsKICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSggKTsKICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIGUgKTsKQEAgLTczLDE2ICs3MywxNiBAQAogCiAKICAgICAvLyBJbml0aWFsaXplIHRvIHVzZSBTVU4gT05FIEFwcFNlcnZlciA3IE9SQiBhbmQgVXRpbERlbGVnYXRlCi0gICAgLy8gTk9URTogQWxsIHRoZXNlIGFyZSBPTUcgc3RhbmRhcmQgcHJvcGVydGllcyBwcm92aWRlZCB0byBwbHVnIGluIGFuIE9SQiAKKyAgICAvLyBOT1RFOiBBbGwgdGhlc2UgYXJlIE9NRyBzdGFuZGFyZCBwcm9wZXJ0aWVzIHByb3ZpZGVkIHRvIHBsdWcgaW4gYW4gT1JCCiAgICAgLy8gdG8gSkRLCiAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBpbml0aWFsaXplU3lzdGVtUHJvcGVydGllcyggKSB7CiAgICAgICAgIFN5c3RlbS5zZXRQcm9wZXJ0eSggIm9yZy5vbWcuQ09SQkEuT1JCQ2xhc3MiLAogICAgICAgICAgICAgImNvbS5zdW4uY29yYmEuZWUuaW1wbC5vcmIuT1JCSW1wbCIgKTsKLSAgICAgICAgU3lzdGVtLnNldFByb3BlcnR5KCAiamF2YXgucm1pLkNPUkJBLlV0aWxDbGFzcyIsIAorICAgICAgICBTeXN0ZW0uc2V0UHJvcGVydHkoICJqYXZheC5ybWkuQ09SQkEuVXRpbENsYXNzIiwKICAgICAgICAgICAgICJjb20uc3VuLmNvcmJhLmVlLmltcGwuamF2YXgucm1pLkNPUkJBLlV0aWwiICk7CiAKICAgICAgICAgU3lzdGVtLnNldFByb3BlcnR5KCAiamF2YXgucm1pLkNPUkJBLlN0dWJDbGFzcyIsCi0gICAgICAgICAgICAiY29tLnN1bi5jb3JiYS5lZS5pbXBsLmphdmF4LnJtaS5DT1JCQS5TdHViRGVsZWdhdGVJbXBsIik7ICAKKyAgICAgICAgICAgICJjb20uc3VuLmNvcmJhLmVlLmltcGwuamF2YXgucm1pLkNPUkJBLlN0dWJEZWxlZ2F0ZUltcGwiKTsKICAgICAgICAgU3lzdGVtLnNldFByb3BlcnR5KCAiamF2YXgucm1pLkNPUkJBLlBvcnRhYmxlUmVtb3RlQ2xhc3MiLAogICAgICAgICAgICAgImNvbS5zdW4uY29yYmEuZWUuaW1wbC5qYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3QiKTsKICAgICB9CkBAIC05MSwyNCArOTEsMjQgQEAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgZ2V0Q29udGV4dCgpCiAgICAgewogICAgICAgICBQcm9wZXJ0aWVzIF9wcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7Ci0gICAgICAgIF9wcm9wcy5wdXQoQ29udGV4dC5JTklUSUFMX0NPTlRFWFRfRkFDVE9SWSwgCisgICAgICAgIF9wcm9wcy5wdXQoQ29udGV4dC5JTklUSUFMX0NPTlRFWFRfRkFDVE9SWSwKICAgICAgICAgICAgICJvcmcuZ2xhc3NmaXNoLmpuZGkuY29zbmFtaW5nLkNOQ3R4RmFjdG9yeSIpOwogICAgICAgICBfcHJvcHMucHV0KENvbnRleHQuUFJPVklERVJfVVJMLCAiaWlvcDovL2FjaHVtYmE6MzcwMCIpOwogCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBfY29udGV4dCA9IG5ldyBJbml0aWFsQ29udGV4dChfcHJvcHMpOwogICAgICAgICB9IGNhdGNoKE5hbWluZ0V4Y2VwdGlvbiBuZSkgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0ZXN0IC0gJ25ldyBJbml0aWFsQ29udGV4dCgpJyIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidGVzdCAtICduZXcgSW5pdGlhbENvbnRleHQoKSciICsKICAgICAgICAgICAgICAgICAidGhyZXcgdGhpczogdHlwZSgiICsgbmUuZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKwogICAgICAgICAgICAgICAgICIpLCBtc2coIiArIG5lLmdldE1lc3NhZ2UoKSArICIpIik7CiAgICAgICAgICAgICBUaHJvd2FibGUgcm9vdENhdXNlID0gbmUuZ2V0Um9vdENhdXNlKCk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRlc3QuaW5pdGlhbENvbnRleHQgLSIgKyAKLSAgICAgICAgICAgICAgICAicm9vdCBjYXVzZSBvZiBwcmV2aW91cyBleGNlcHRpb246ICIgKyAidHlwZSgiICsgCi0gICAgICAgICAgICAgICAgcm9vdENhdXNlLmdldENsYXNzKCkuZ2V0TmFtZSgpICsgIiksIG1zZygiICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRlc3QuaW5pdGlhbENvbnRleHQgLSIgKworICAgICAgICAgICAgICAgICJyb290IGNhdXNlIG9mIHByZXZpb3VzIGV4Y2VwdGlvbjogIiArICJ0eXBlKCIgKworICAgICAgICAgICAgICAgIHJvb3RDYXVzZS5nZXRDbGFzcygpLmdldE5hbWUoKSArICIpLCBtc2coIiArCiAgICAgICAgICAgICAgICAgcm9vdENhdXNlLmdldE1lc3NhZ2UoKSArICIpIik7CiAgICAgICAgIH0KICAgICB9Ci0gCisKIAogICAgIC8vRG9Mb29rdXAKIApAQCAtMTE4LDEyICsxMTgsMTIgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGJvdW5kT2JqID0gX2NvbnRleHQubG9va3VwKGluTmFtZSk7CiAgICAgICAgIH0gY2F0Y2goTmFtaW5nRXhjZXB0aW9uIG5lKSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRlc3QgLSAnbG9va3VwKCknIiArICJ0aHJldyB0aGlzOiB0eXBlKCIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidGVzdCAtICdsb29rdXAoKSciICsgInRocmV3IHRoaXM6IHR5cGUoIiArCiAgICAgICAgICAgICAgICAgbmUuZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKyAiKSwgbXNnKCIgKyBuZS5nZXRNZXNzYWdlKCkgKyAiKSIpOwogICAgICAgICAgICAgVGhyb3dhYmxlIHJvb3RDYXVzZSA9IG5lLmdldFJvb3RDYXVzZSgpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0ZXN0Lmxvb2t1cCAtIiArIAotICAgICAgICAgICAgICAgICJyb290IGNhdXNlIG9mIHByZXZpb3VzIGV4Y2VwdGlvbjogIiArICJ0eXBlKCIgKyAKLSAgICAgICAgICAgICAgICByb290Q2F1c2UuZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKyAiKSwgbXNnKCIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidGVzdC5sb29rdXAgLSIgKworICAgICAgICAgICAgICAgICJyb290IGNhdXNlIG9mIHByZXZpb3VzIGV4Y2VwdGlvbjogIiArICJ0eXBlKCIgKworICAgICAgICAgICAgICAgIHJvb3RDYXVzZS5nZXRDbGFzcygpLmdldE5hbWUoKSArICIpLCBtc2coIiArCiAgICAgICAgICAgICAgICAgcm9vdENhdXNlLmdldE1lc3NhZ2UoKSArICIpIik7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGJvdW5kT2JqOwpAQCAtMTQ2LDExICsxNDYsMTEgQEAKICAgICAgICAgRUpCTWV0YURhdGEgbWV0YT1udWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgbWV0YSA9IGZvcm1hbGJvdW5kSG9tZS5nZXRFSkJNZXRhRGF0YSgpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAibWV0YS5nZXRDbGFzcygpLmdldE5hbWUoKSA9ICIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIm1ldGEuZ2V0Q2xhc3MoKS5nZXROYW1lKCkgPSAiICsKICAgICAgICAgICAgICAgICBtZXRhLmdldENsYXNzKCkuZ2V0TmFtZSgpICk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIG5lKSB7CiAgICAgICAgICAgICBuZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidGVzdCAtICdtZXRhZGF0YSgpJyIgKyAidGhyZXcgdGhpczogdHlwZSgiICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRlc3QgLSAnbWV0YWRhdGEoKSciICsgInRocmV3IHRoaXM6IHR5cGUoIiArCiAgICAgICAgICAgICAgICAgbmUuZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKyAiKSwgbXNnKCIgKyBuZS5nZXRNZXNzYWdlKCkgKyAiKSIpOwogICAgICAgICB9CiAgICAgICAgIGlmKG1ldGEgIT0gbnVsbCkKQEAgLTE2MSw4ICsxNjEsOCBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICB0ZW1wQ2xhc3MgPSBtZXRhLmdldEhvbWVJbnRlcmZhY2VDbGFzcygpOwogICAgICAgICAgICAgfSBjYXRjaChFcnJvciBlKSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAKLSAgICAgICAgICAgICAgICAgICAgImZvdW5kIEVKQiBIb21lLG1ldGEuZ2V0SG9tZUludGVyZmFjZUNsYXNzKCkgIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigKKyAgICAgICAgICAgICAgICAgICAgImZvdW5kIEVKQiBIb21lLG1ldGEuZ2V0SG9tZUludGVyZmFjZUNsYXNzKCkgIiArCiAgICAgICAgICAgICAgICAgICAgIGUuZ2V0TWVzc2FnZSgpICk7CiAgICAgICAgICAgICAgICAgdGVtcENsYXNzID0gbnVsbDsKICAgICAgICAgICAgIH0KQEAgLTE3MSw2ICsxNzEsNiBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIb21lSW50ZWZhY2UiK3RlbXBDbGFzcyk7CiAgICAgICAgICAgICBtZXRhID0gbnVsbDsKICAgICAgICAgfQotICAgIH0gCisgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvc3RhbmRhbG9uZWNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvc3RhbmRhbG9uZWNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggZmQ3NzQzMy4uNjVlNDhjOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3N0YW5kYWxvbmVjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9zdGFuZGFsb25lY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzQsNTYgKzM0LDU2IEBACiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAogICAgIHByaXZhdGUgQ29udGV4dCBpYzsKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJlamItc3R1YnMtc3RhbmRhbG9uZWNsaWVudCIpOwogCi0gICAgICAgIC8vIFN0ZXAgMTogIEl0IGlzIGltcG9ydGFudCB0byBjYWxsIGluaXRhaWxpemVTeXN0ZW1Qcm9wZXJ0aWVzIHRvIAotICAgICAgICAvLyBhdm9pZCBwcm9ibGVtcyB3aXRoIHN3aXRjaGluZyBPUkJzIGJldHdlZW4gSjJTRSBhbmQgQXBwU2VydmVyLiAKLSAgICAgICAgLy8gVGhlc2UgYXJlIHN5c3RlbSBwcm9wZXJ0aWVzIHRoYXQgbmVlZHMgdG8gYmUgcnVuIG9uY2Ugb3IgdGhlc2UgCisgICAgICAgIC8vIFN0ZXAgMTogIEl0IGlzIGltcG9ydGFudCB0byBjYWxsIGluaXRhaWxpemVTeXN0ZW1Qcm9wZXJ0aWVzIHRvCisgICAgICAgIC8vIGF2b2lkIHByb2JsZW1zIHdpdGggc3dpdGNoaW5nIE9SQnMgYmV0d2VlbiBKMlNFIGFuZCBBcHBTZXJ2ZXIuCisgICAgICAgIC8vIFRoZXNlIGFyZSBzeXN0ZW0gcHJvcGVydGllcyB0aGF0IG5lZWRzIHRvIGJlIHJ1biBvbmNlIG9yIHRoZXNlCiAgICAgICAgIC8vIHByb3BlcnRpZXMgY2FuIGJlIHBhc3NlZCB0aHJvdWdoIC1EIGZsYWdzCiAvL1BHLT4gICAgICAgIGluaXRpYWxpemVTeXN0ZW1Qcm9wZXJ0aWVzKCApOwotICAgICAgICAKKwogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiZWpiLXN0dWJzLXN0YW5kYWxvbmVjbGllbnRJRCIpOwotICAgIH0gIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHNldHVwSW5pdGlhbENvbnRleHQoICJhY2h1bWJhIiAsICIzNzAwIiApOyAgCisgICAgICAgICAgICBzZXR1cEluaXRpYWxDb250ZXh0KCAiYWNodW1iYSIgLCAiMzcwMCIgKTsKIC8vICAgICAgICAgIGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAKIAogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKAotICAgICAgICAgICAgICAgICAgInN0YW5kYWxvbmVjbGllbnQuQ2xpZW50KCksIEV4Y2VwdGlvbiB3aGVuIHNldHRpbmcgIiArIAorICAgICAgICAgICAgICAgICAgInN0YW5kYWxvbmVjbGllbnQuQ2xpZW50KCksIEV4Y2VwdGlvbiB3aGVuIHNldHRpbmcgIiArCiAgICAgICAgICAgICAgICAgICAidXAgdGhlIEluaXRpYWxDb250ZXh0IGVudmlyb25tZW50Iik7CiAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgfSAKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKIAogICAgICAgICB0cnkgewogCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tpbmcgdXAgZWpiIHJlZiAiKTsKLSAgICAgICAgICAgIC8vIGNyZWF0ZSBFSkIgdXNpbmcgZmFjdG9yeSBmcm9tIGNvbnRhaW5lciAKKyAgICAgICAgICAgIC8vIGNyZWF0ZSBFSkIgdXNpbmcgZmFjdG9yeSBmcm9tIGNvbnRhaW5lcgogICAgICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGljLmxvb2t1cCgiZWpiL2VqYl9zdHVic19lamJhcHBfSGVsbG9CZWFuIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9ianJlZiA9ICIgKyBvYmpyZWYpOwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJMb29rZWQgdXAgaG9tZSEhIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIEhlbGxvSG9tZSAgaG9tZSA9IChIZWxsb0hvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93CiAgICAgICAgICAgICAgICAgKG9ianJlZiwgSGVsbG9Ib21lLmNsYXNzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIk5hcnJvd2VkIGhvbWUhISIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBIZWxsbyBociA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkdvdCB0aGUgRUpCISEiKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgLy8gaW52b2tlIG1ldGhvZCBvbiB0aGUgRUpCCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImludm9raW5nIGVqYiIpOwogICAgICAgICAgICAgaHIuc2F5SGVsbG8oKTsKQEAgLTEwOCwzMyArMTA4LDMzIEBACiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoInN0YW5kYWxvbmVjbGllbnQgbWFpbiIgLCBzdGF0LkZBSUwpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgIAlyZXR1cm47CisKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBzZXR1cEluaXRpYWxDb250ZXh0KCBTdHJpbmcgaG9zdCwgU3RyaW5nIHBvcnQgKSAKLSAgICB0aHJvd3MgRXhjZXB0aW9uIAorICAgIHByaXZhdGUgdm9pZCBzZXR1cEluaXRpYWxDb250ZXh0KCBTdHJpbmcgaG9zdCwgU3RyaW5nIHBvcnQgKQorICAgIHRocm93cyBFeGNlcHRpb24KICAgICB7CiAgICAgICAgIFByb3BlcnRpZXMgZW52ID0gbmV3IFByb3BlcnRpZXMoKTsKIAogICAgICAgICBlbnYucHV0KCBDb250ZXh0LklOSVRJQUxfQ09OVEVYVF9GQUNUT1JZLCAiY29tLnN1bi5lbnRlcnByaXNlLm5hbWluZy5TZXJpYWxJbml0Q29udGV4dEZhY3RvcnkiKTsKLSAgICAgICAgCisKICAgICAgICAgZW52LnB1dCggQ29udGV4dC5QUk9WSURFUl9VUkwsICJpaW9wOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICk7CiAKICAgICAgICAgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoIGVudiApOwogICAgIH0KIAogICAgIC8vIEluaXRpYWxpemUgdG8gdXNlIFNVTiBPTkUgQXBwU2VydmVyIDcgT1JCIGFuZCBVdGlsRGVsZWdhdGUKLSAgICAvLyBOT1RFOiBBbGwgdGhlc2UgYXJlIE9NRyBzdGFuZGFyZCBwcm9wZXJ0aWVzIHByb3ZpZGVkIHRvIHBsdWcgaW4gYW4gT1JCIAorICAgIC8vIE5PVEU6IEFsbCB0aGVzZSBhcmUgT01HIHN0YW5kYXJkIHByb3BlcnRpZXMgcHJvdmlkZWQgdG8gcGx1ZyBpbiBhbiBPUkIKICAgICAvLyB0byBKREsKICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGluaXRpYWxpemVTeXN0ZW1Qcm9wZXJ0aWVzKCApIHsKICAgICAgICAgU3lzdGVtLnNldFByb3BlcnR5KCAib3JnLm9tZy5DT1JCQS5PUkJDbGFzcyIsCiAgICAgICAgICAgICAgImNvbS5zdW4uY29yYmEuZWUuaW1wbC5vcmIuT1JCSW1wbCIgKTsKLSAgICAgICAgU3lzdGVtLnNldFByb3BlcnR5KCAiamF2YXgucm1pLkNPUkJBLlV0aWxDbGFzcyIsIAorICAgICAgICBTeXN0ZW0uc2V0UHJvcGVydHkoICJqYXZheC5ybWkuQ09SQkEuVXRpbENsYXNzIiwKICAgICAgICAgICAgICAiY29tLnN1bi5jb3JiYS5lZS5pbXBsLmphdmF4LnJtaS5DT1JCQS5VdGlsIiApOwogCiAgICAgICAgIFN5c3RlbS5zZXRQcm9wZXJ0eSggImphdmF4LnJtaS5DT1JCQS5TdHViQ2xhc3MiLAotICAgICAgICAgICAgICJjb20uc3VuLmNvcmJhLmVlLmltcGwuamF2YXgucm1pLkNPUkJBLlN0dWJEZWxlZ2F0ZUltcGwiKTsgIAorICAgICAgICAgICAgICJjb20uc3VuLmNvcmJhLmVlLmltcGwuamF2YXgucm1pLkNPUkJBLlN0dWJEZWxlZ2F0ZUltcGwiKTsKICAgICAgICAgU3lzdGVtLnNldFByb3BlcnR5KCAiamF2YXgucm1pLkNPUkJBLlBvcnRhYmxlUmVtb3RlQ2xhc3MiLAogICAgICAgICAgICAgICJjb20uc3VuLmNvcmJhLmVlLmltcGwuamF2YXgucm1pLlBvcnRhYmxlUmVtb3RlT2JqZWN0Iik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3N0YW5kYWxvbmVjbGllbnQvY2xpZW50L1NpbXBsZUNsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3N0YW5kYWxvbmVjbGllbnQvY2xpZW50L1NpbXBsZUNsaWVudC5qYXZhCmluZGV4IDJiM2E0MGMuLjNlYTA3YzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9zdGFuZGFsb25lY2xpZW50L2NsaWVudC9TaW1wbGVDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvc3RhbmRhbG9uZWNsaWVudC9jbGllbnQvU2ltcGxlQ2xpZW50LmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKIAogcHVibGljIGNsYXNzIFNpbXBsZUNsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTQ3LDggKzQ3LDggQEAKICAgICAgICAgfQogCiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJlamItc3R1YnMtc3RhbmRhbG9uZWNsaWVudCIpOwotICAgIH0gIAotICAgIAorICAgIH0KKwogICAgIHByaXZhdGUgU3RyaW5nIGpuZGlOYW1lOwogICAgIHByaXZhdGUgU3RyaW5nIHByb3BzRmlsZU5hbWU7CiAKQEAgLTU4LDcgKzU4LDcgQEAKIAogICAgICAgICBpZiggKGFyZ3MubGVuZ3RoID4gMSkgJiYgKGFyZ3NbMV0ubGVuZ3RoKCkgPiAwKSApIHsKICAgICAgICAgICAgIHByb3BzRmlsZU5hbWUgPSBhcmdzWzFdOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVc2luZyBwcm9wcyBmaWxlICIgKyBwcm9wc0ZpbGVOYW1lICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVzaW5nIHByb3BzIGZpbGUgIiArIHByb3BzRmlsZU5hbWUgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgZm9yIEluaXRpYWxDb250ZXh0Iik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVzaW5nIG5vLWFyZyBJbml0aWFsQ29udGV4dCIpOwpAQCAtNzUsOSArNzUsOSBAQAogICAgICAgICAgICAgUHJvcGVydGllcyBwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7CiAgICAgICAgICAgICBGaWxlSW5wdXRTdHJlYW0gZmlzID0gbmV3IEZpbGVJbnB1dFN0cmVhbShwcm9wc0ZpbGVOYW1lKTsKICAgICAgICAgICAgIHByb3BzLmxvYWQoZmlzKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJVc2luZyBwcm9wcyA9ICIgKyBwcm9wcyk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVXNpbmcgcHJvcHMgPSAiICsgcHJvcHMpOwogICAgICAgICAgICAgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQocHJvcHMpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oImljID0gIiArIGljKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpYyA9ICIgKyBpYyk7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gaWM7CkBAIC04Niw0NyArODYsNDcgQEAKICAgICBwcml2YXRlIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgQ29udGV4dCBpYyA9IGdldENvbnRleHQoKTsKLSAgICAgICAgCisKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29raW5nIHVwIGdsb2JhbCBqbmRpIG5hbWUgPSAiICsgam5kaU5hbWUpOwotICAgICAgICAvLyBjcmVhdGUgRUpCIHVzaW5nIGZhY3RvcnkgZnJvbSBjb250YWluZXIgCisgICAgICAgIC8vIGNyZWF0ZSBFSkIgdXNpbmcgZmFjdG9yeSBmcm9tIGNvbnRhaW5lcgogICAgICAgICBPYmplY3Qgb2JqcmVmID0gaWMubG9va3VwKGpuZGlOYW1lKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvYmpyZWYgPSAiICsgb2JqcmVmKTsKICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJMb29rZWQgdXAgaG9tZSEhIik7Ci0gICAgICAgIAorCiAgICAgICAgIEhlbGxvSG9tZSAgaG9tZSA9IChIZWxsb0hvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93CiAgICAgICAgICAgICAob2JqcmVmLCBIZWxsb0hvbWUuY2xhc3MpOwotICAgICAgICAKKwogICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIk5hcnJvd2VkIGhvbWUhISIpOwotICAgICAgICAKKwogICAgICAgICBIZWxsbyBociA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiR290IHRoZSBFSkIhISIpOwotICAgICAgICAKKwogICAgICAgICAvLyBpbnZva2UgbWV0aG9kIG9uIHRoZSBFSkIKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnZva2luZyBlamIiKTsKICAgICAgICAgaHIuc2F5SGVsbG8oKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJzdWNjZXNzZnVsbHkgaW52b2tlZCBlamIiKTsKLSAgICAgICAgCi0gICAgICAgIEVKQk1ldGFEYXRhIG1kID0gaG9tZS5nZXRFSkJNZXRhRGF0YSgpOyAgICAgICAgICAgIAorCisgICAgICAgIEVKQk1ldGFEYXRhIG1kID0gaG9tZS5nZXRFSkJNZXRhRGF0YSgpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBFSkIgbWV0YSBkYXRhID0gIiArIG1kKTsKLSAgICAgICAgCi0gICAgICAgIEVKQk1ldGFEYXRhIG1kMiA9IGhvbWUuZ2V0RUpCTWV0YURhdGEoKTsgICAgICAgICAgICAKKworICAgICAgICBFSkJNZXRhRGF0YSBtZDIgPSBob21lLmdldEVKQk1ldGFEYXRhKCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IEVKQiBtZXRhIGRhdGEgYWdhaW4gPSAiICsgbWQyKTsKLSAgICAgICAgCisKICAgICAgICAgSG9tZUhhbmRsZSBob21lSGFuZGxlID0gaG9tZS5nZXRIb21lSGFuZGxlKCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IEhvbWUgSGFuZGxlIik7CiAgICAgICAgIEhlbGxvSG9tZSBob21lMiA9IChIZWxsb0hvbWUpIGhvbWVIYW5kbGUuZ2V0RUpCSG9tZSgpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbnZlcnRlZCBIb21lIEhhbmRsZSBiYWNrIHRvIEhlbGxvSG9tZSIpOwotICAgICAgICBFSkJNZXRhRGF0YSBtZDMgPSBob21lMi5nZXRFSkJNZXRhRGF0YSgpOyAgICAgICAgICAgIAorICAgICAgICBFSkJNZXRhRGF0YSBtZDMgPSBob21lMi5nZXRFSkJNZXRhRGF0YSgpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBFSkIgbWV0YSBkYXRhIGEgM3JkIHRpbWUgPSAiICsgbWQzKTsKLSAgICAgICAgCisKICAgICAgICAgSGFuZGxlIGhlbGxvSGFuZGxlID0gaHIuZ2V0SGFuZGxlKCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IGhlbGxvIEhhbmRsZSIpOwogICAgICAgICBIZWxsbyBoZWxsbzIgPSAoSGVsbG8pIGhlbGxvSGFuZGxlLmdldEVKQk9iamVjdCgpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbnZlcnRlZCBIZWxsbyBIYW5kbGUgYmFjayB0byBIZWxsbyIpOwogICAgICAgICBoZWxsbzIuc2F5SGVsbG8oKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJzdWNjZXNzZnVsbHkgaW52b2tlZCBlamIgYWdhaW4iKTsKLSAgICAgICAgCi0gICAgCXJldHVybjsKKworICAgICAgICByZXR1cm47CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvc3R1YmNvdW50L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvc3R1YmNvdW50L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYjM4MDdiOS4uYTJhZWZiYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3N0dWJjb3VudC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9zdHViY291bnQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsOSArMTUsOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLXN0dWJzLXN0dWJjb3VudC1lamIxLmphciIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImVqYiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3N0dWJjb3VudC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvc3R1YmNvdW50L2J1aWxkLnhtbAppbmRleCA1MWNlNjczLi40NDA4NGI2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvc3R1YmNvdW50L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvc3R1YmNvdW50L2J1aWxkLnhtbApAQCAtMzQsMjkgKzM0LDI5IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+Ci0gICAgICAgIDwvYW50Y2FsbD4gICAgICAKKyAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ibXlidWlsZCI+CiAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJidWlsZG51bSIgdmFsdWU9IjEiLz4KLSAgICAgICAgPC9hbnRjYWxsPiAgICAgIAorICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ibXlidWlsZCI+CiAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJidWlsZG51bSIgdmFsdWU9IjIiLz4KLSAgICAgICAgPC9hbnRjYWxsPiAgICAgIAorICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ibXlidWlsZCI+CiAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJidWlsZG51bSIgdmFsdWU9IjMiLz4KLSAgICAgICAgPC9hbnRjYWxsPiAgICAgIAorICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ibXlidWlsZCI+CiAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJidWlsZG51bSIgdmFsdWU9IjUiLz4KLSAgICAgICAgPC9hbnRjYWxsPiAgICAgIAorICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ibXlidWlsZCI+CiAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJidWlsZG51bSIgdmFsdWU9IjEwIi8+Ci0gICAgICAgIDwvYW50Y2FsbD4gICAgICAKKyAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJteWJ1aWxkIiA+CkBAIC02OCwyOCArNjgsMjggQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphciR7YnVpbGRudW19LnhtbCIvPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamIuamFyIgogICAgICAgICAgICAgICAgICB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9L2VqYi1zdHVicy1zdHViY291bnQke2J1aWxkbnVtfS1lamIuamFyIi8+Ci08L2FudGNhbGw+ICAgICAgICAKLSAgICA8L3RhcmdldD4gCi0gICAgCis8L2FudGNhbGw+CisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ibXlkZXBsb3kiPgogICAgICAgICAgICA8cGFyYW0gbmFtZT0iYnVpbGRudW0iIHZhbHVlPSIxIi8+Ci0gICAgICAgIDwvYW50Y2FsbD4gICAgICAKKyAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9Im15ZGVwbG95Ij4KICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImJ1aWxkbnVtIiB2YWx1ZT0iMiIvPgotICAgICAgICA8L2FudGNhbGw+ICAgICAgCisgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJteWRlcGxveSI+CiAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJidWlsZG51bSIgdmFsdWU9IjMiLz4KLSAgICAgICAgPC9hbnRjYWxsPiAgICAgIAorICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ibXlkZXBsb3kiPgogICAgICAgICAgICA8cGFyYW0gbmFtZT0iYnVpbGRudW0iIHZhbHVlPSI1Ii8+Ci0gICAgICAgIDwvYW50Y2FsbD4gICAgICAKKyAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9Im15ZGVwbG95Ij4KICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImJ1aWxkbnVtIiB2YWx1ZT0iMTAiLz4KLSAgICAgICAgPC9hbnRjYWxsPiAgICAgIAorICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKLSAgICA8dGFyZ2V0IG5hbWU9Im15ZGVwbG95IiAKKyAgICA8dGFyZ2V0IG5hbWU9Im15ZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qYXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iZWpiLXN0dWJzLXN0dWJjb3VudCR7YnVpbGRudW19Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvc3R1YmNvdW50L2Rlc2NyaXB0b3IvZWpiLWphcjIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3N0dWJjb3VudC9kZXNjcmlwdG9yL2VqYi1qYXIyLnhtbAppbmRleCBkMzQ2YTYwLi4wMTRmNDc3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvc3R1YmNvdW50L2Rlc2NyaXB0b3IvZWpiLWphcjIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9zdHViY291bnQvZGVzY3JpcHRvci9lamItamFyMi54bWwKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICAgIDxzZWN1cml0eS1pZGVudGl0eT4KICAgICAgICAgPHVzZS1jYWxsZXItaWRlbnRpdHkvPgogICAgICAgPC9zZWN1cml0eS1pZGVudGl0eT4KLSAgICA8L3Nlc3Npb24+ICAgCisgICAgPC9zZXNzaW9uPgogICA8L2VudGVycHJpc2UtYmVhbnM+CiAgIDxhc3NlbWJseS1kZXNjcmlwdG9yPgogICA8L2Fzc2VtYmx5LWRlc2NyaXB0b3I+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvc3R1YmNvdW50L2VqYi9Gb29CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvc3R1YmNvdW50L2VqYi9Gb29CZWFuLmphdmEKaW5kZXggMTQ0ZDQ0OC4uZWQyZTkyMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3N0dWJjb3VudC9lamIvRm9vQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9zdHViY291bnQvZWpiL0Zvb0JlYW4uamF2YQpAQCAtMTgsNyArMTgsNyBAQAogCiBpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwogaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOwotaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsgCitpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25CZWFuOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0OwogaW1wb3J0IGpha2FydGEuZWpiLkVKQkV4Y2VwdGlvbjsKQEAgLTMyLDE0ICszMiwxNCBAQAogICAgIHB1YmxpYyBGb29CZWFuKCkge30KIAogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vQmVhbjo6ZWpiQ3JlYXRlICEhIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29CZWFuOjplamJDcmVhdGUgISEiKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgewotCXRoaXMuc2MgPSBzYzsKKyAgICB0aGlzLnNjID0gc2M7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgc2F5Rm9vKCkgIHsgICAgICAgCisgICAgcHVibGljIHZvaWQgc2F5Rm9vKCkgIHsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHt9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvc3R1YnNlci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3N0dWJzZXIvYnVpbGQucHJvcGVydGllcwppbmRleCBmM2VmNDQxLi44ODgyNGE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvc3R1YnNlci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9zdHVic2VyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIyICsxNSwyMiBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLXN0dWJzLXN0dWJzZXIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJzZS5jbGllbnQiIHZhbHVlPSJjb20uc3VuLnMxYXNkZXYuZWpiLnN0dWJzLnN0dWJzZXIuY2xpZW50LkNsaWVudCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3N0dWJzZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3N0dWJzZXIvYnVpbGQueG1sCmluZGV4IDM5OTBhZTguLmY2MDI0NGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9zdHVic2VyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvc3R1YnNlci9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgIDxkZWxldGUgZmlsZT0iaG9tZWhhbmRsZSIvPgogICAgICAgPGRlbGV0ZSBmaWxlPSJmb29oYW5kbGUiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ4LDI2ICs0OCwyNiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudCouY2xhc3MsKiovKkZvby5jbGFzcywqKi8qRm9vSG9tZS5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KLQk8IS0tIHRlbXBvcmFyaWx5IGNvbW1lbnQgb3V0IHRlc3QgdGhhdCByZWNvbnN0aXR1dGVzIGhhbmRsZSBmcm9tIGZpbGUuICAKKyAgICA8IS0tIHRlbXBvcmFyaWx5IGNvbW1lbnQgb3V0IHRlc3QgdGhhdCByZWNvbnN0aXR1dGVzIGhhbmRsZSBmcm9tIGZpbGUuCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuX2hhbmRsZSIvPgotCS0tPgorICAgIC0tPgogICAgIDwvdGFyZ2V0PgogCi0gCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bl9oYW5kbGUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iaGFuZGxlIi8+CkBAIC04MCw3ICs4MCw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bl9zZV9ub2hhbmRsZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgIDxqYXZhICBmb3JrPSJvbiIgCisgICAgICAgPGphdmEgIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iJHtzZS5jbGllbnR9Ij4KQEAgLTg4LDE3ICs4OCwxNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW5fc2VfaGFuZGxlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgPGphdmEgIGZvcms9Im9uIiAKKyAgICAgICA8amF2YSAgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSIke3NlLmNsaWVudH0iPgotCSA8YXJnIGxpbmU9ImhhbmRsZSIvPgorICAgICA8YXJnIGxpbmU9ImhhbmRsZSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9zdHVic2VyL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9zdHVic2VyL2NsaWVudC9DbGllbnQuamF2YQppbmRleCAxNTdiYjhkLi43YmE2NzZiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvc3R1YnNlci9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3N0dWJzZXIvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMSwxOSArMzEsMTkgQEAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSE9NRV9IQU5ETEVfRklMRSA9ICJob21laGFuZGxlIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9PX0hBTkRMRV9GSUxFID0gImZvb2hhbmRsZSI7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKIAotCVN5c3RlbS5vdXQucHJpbnRsbigiY3AgPSAiICsgU3lzdGVtLmdldFByb3BlcnR5KCJqYXZhLmNsYXNzLnBhdGgiKSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJjcCA9ICIgKyBTeXN0ZW0uZ2V0UHJvcGVydHkoImphdmEuY2xhc3MucGF0aCIpKTsKIAogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImFyZ3MubGVuZ3RoID0gIiArIGFyZ3MubGVuZ3RoKTsKLQlmb3IoaW50IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oImFyZyAiICsgaSArICIgPSAiICsgYXJnc1swXSk7Ci0JfQotCQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYXJncy5sZW5ndGggPSAiICsgYXJncy5sZW5ndGgpOworICAgIGZvcihpbnQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYXJnICIgKyBpICsgIiA9ICIgKyBhcmdzWzBdKTsKKyAgICB9CisKIAogICAgICAgICBpZiggYXJncy5sZW5ndGggPT0gMSkgewogICAgICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiZWpiLXN0dWJzLXN0dWJzZXIyIik7CkBAIC01NCwzNSArNTQsMzUgQEAKICAgICAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJlamItc3R1YnMtc3R1YnNlcjFJRCIpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgIH0gIAotICAgIAorCisgICAgfQorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvUmVzdGFydFRlc3QoKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAvLyB3aGVuIHdlIGxvb2t1cCBhIEZvb0hvbWUgKmJlZm9yZSogZGVzZXJpYWxpemluZyB0aGUgaG9tZSByZWZlcmVuY2UsCiAgICAgICAgICAgICAvLyBldmVyeXRoaW5nIHdvcmtzCi0JICAgIC8vIEBAQAorICAgICAgICAvLyBAQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWRkaW5nIGxvb2t1cCBiZWZvcmUgcmVjb25zdGl0dXRpb24gLi4uIik7CiAgICAgICAgICAgICBsb29rdXBIb21lKCk7CiAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQXR0ZW1wdGluZyB0byByZWNvbnN0cnVjdCBmb28gaGFuZGxlIik7Ci0JICAgIEhhbmRsZSBmaCA9IChIYW5kbGUpIHJlYWRGcm9tRmlsZShGT09fSEFORExFX0ZJTEUpOworICAgICAgICBIYW5kbGUgZmggPSAoSGFuZGxlKSByZWFkRnJvbUZpbGUoRk9PX0hBTkRMRV9GSUxFKTsKICAgICAgICAgICAgIEZvbyBmID0gKEZvbykgZmguZ2V0RUpCT2JqZWN0KCk7Ci0JICAgIGYuY2FsbEhlbGxvKCk7Ci0JICAgIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oInN1Y2Nlc3NmdWxseSBpbnZva2VkIGZvbyB2aWEgcmVjb25zaXR1dGVkIGhhbmRsZSIpOworICAgICAgICBmLmNhbGxIZWxsbygpOworCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigic3VjY2Vzc2Z1bGx5IGludm9rZWQgZm9vIHZpYSByZWNvbnNpdHV0ZWQgaGFuZGxlIik7CiAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQXR0ZW1wdGluZyB0byByZWNvbnN0cnVjdCBob21lIGhhbmRsZSBhcyBmaXJzdCIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgb3BlcmF0aW9uIGluIGNsaWVudCIpOwogICAgICAgICAgICAgSG9tZUhhbmRsZSBoaCA9IChIb21lSGFuZGxlKSByZWFkRnJvbUZpbGUoSE9NRV9IQU5ETEVfRklMRSk7CiAgICAgICAgICAgICBpbnZva2UoKEZvb0hvbWUpIGhoLmdldEVKQkhvbWUoKSk7CiAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJzdWNjZXNzZnVsbHkgaW52b2tlZCBlamIgdmlhIHJlY29uc2l0dXRlZCBob21lIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigic3VjY2Vzc2Z1bGx5IGludm9rZWQgZWpiIHZpYSByZWNvbnNpdHV0ZWQgaG9tZSIpOwogCi0JICAgIAorCiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IHJlc3RhcnQyIiwgc3RhdC5QQVNTKTsKIAogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CkBAIC05OCwxMCArOTgsMTAgQEAKIAogCiAgICAgICAgICAgICBGb29Ib21lICBob21lID0gbG9va3VwSG9tZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTmFycm93ZWQgaG9tZSEhIik7Ci0gICAgICAgICAgICAKLQkgICAKKworCiAKICAgICAgICAgICAgIC8vIGNyZWF0ZSBob21lIGhhbmRsZQogICAgICAgICAgICAgSG9tZUhhbmRsZSBoaCA9IGhvbWUuZ2V0SG9tZUhhbmRsZSgpOwpAQCAtMTEyLDEyICsxMTIsMTIgQEAKICAgICAgICAgICAgIEZvbyBmID0gaW52b2tlKGhvbWUpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJzdWNjZXNzZnVsbHkgaW52b2tlZCBlamIgdmlhIHJlY29uc2l0dXRlZCBob21lIik7CiAKLQkgICAgLy8gY3JlYXRlIFNGU0IgaW5zdGFuY2UgaGFuZGxlIGZpbGUKKyAgICAgICAgLy8gY3JlYXRlIFNGU0IgaW5zdGFuY2UgaGFuZGxlIGZpbGUKICAgICAgICAgICAgIEhhbmRsZSBmaCA9IGYuZ2V0SGFuZGxlKCk7CiAgICAgICAgICAgICBzZXJpYWxpemVUb0ZpbGUoRk9PX0hBTkRMRV9GSUxFLCBmaCk7CiAgICAgICAgICAgICBIYW5kbGUgZmgyID0gKEhhbmRsZSkgcmVhZEZyb21GaWxlKEZPT19IQU5ETEVfRklMRSk7CiAgICAgICAgICAgICBGb28gZjIgPSAoRm9vKSBmaDIuZ2V0RUpCT2JqZWN0KCk7Ci0JICAgIGYyLmNhbGxIZWxsbygpOworICAgICAgICBmMi5jYWxsSGVsbG8oKTsKIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJzdWNjZXNzZnVsbHkgaW52b2tlZCBlamIiKTsKIApAQCAtMTI3LDM3ICsxMjcsMzcgQEAKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiY2xpZW50IG1haW4iICwgc3RhdC5GQUlMKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAJcmV0dXJuOworCisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBwcml2YXRlIEZvb0hvbWUgbG9va3VwSG9tZSgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29raW5nIHVwIGVqYiByZWYgIik7Ci0gICAgICAgIC8vIGNyZWF0ZSBFSkIgdXNpbmcgZmFjdG9yeSBmcm9tIGNvbnRhaW5lciAKKyAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyCiAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpYy5sb29rdXAoImphdmE6Z2xvYmFsL2VqYi1zdHVicy1zdHVic2VyQXBwL2VqYi1zdHVicy1zdHVic2VyLWVqYi9Gb29CZWFuIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigib2JqcmVmID0gIiArIG9ianJlZik7CiAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTG9va2VkIHVwIGhvbWUhISIpOwotICAgICAgICAKKwogICAgICAgICBGb29Ib21lICBob21lID0gKEZvb0hvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93CiAgICAgICAgICAgICAob2JqcmVmLCBGb29Ib21lLmNsYXNzKTsKLSAgICAgICAgCisKICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJOYXJyb3dlZCBob21lISEiKTsKIAogICAgICAgICByZXR1cm4gaG9tZTsKICAgICB9Ci0gICAgICAgICAgICAKKwogICAgIHByaXZhdGUgRm9vIGludm9rZShGb29Ib21lIGZvb0hvbWUpIHRocm93cyBFeGNlcHRpb24gewogCiAgICAgICAgIEZvbyBmID0gZm9vSG9tZS5jcmVhdGUoKTsKICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJHb3QgdGhlIEVKQiEhIik7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIGludm9rZSBtZXRob2Qgb24gdGhlIEVKQgogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImludm9raW5nIGVqYiIpOwogICAgICAgICBmLmNhbGxIZWxsbygpOwogCi0JcmV0dXJuIGY7CisgICAgcmV0dXJuIGY7CiAKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9zdHVic2VyL2VqYi9Gb29CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvc3R1YnNlci9lamIvRm9vQmVhbi5qYXZhCmluZGV4IDIyMTQzZjkuLmI3MGEwNzQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9zdHVic2VyL2VqYi9Gb29CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3N0dWJzZXIvZWpiL0Zvb0JlYW4uamF2YQpAQCAtMTksNyArMTksNyBAQAogaW1wb3J0IGphdmEudXRpbC5EYXRlOwogaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwogaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOwotaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsgCitpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25CZWFuOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0OwogaW1wb3J0IGpha2FydGEuZWpiLkVKQkV4Y2VwdGlvbjsKQEAgLTM2LDIwICszNiwyMCBAQAogICAgIHB1YmxpYyBGb29CZWFuKCkge30KIAogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vQmVhbjo6ZWpiQ3JlYXRlICEhIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29CZWFuOjplamJDcmVhdGUgISEiKTsKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tpbmcgdXAgZWpiIHJlZiAiKTsKLSAgICAgICAgICAgIC8vIGNyZWF0ZSBFSkIgdXNpbmcgZmFjdG9yeSBmcm9tIGNvbnRhaW5lciAKKyAgICAgICAgICAgIC8vIGNyZWF0ZSBFSkIgdXNpbmcgZmFjdG9yeSBmcm9tIGNvbnRhaW5lcgogICAgICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvaGVsbG8iKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigib2JqcmVmID0gIiArIG9ianJlZik7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkxvb2tlZCB1cCBob21lISEiKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgaGVsbG9Ib21lID0gKEhlbGxvSG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cKICAgICAgICAgICAgICAgICAob2JqcmVmLCBIZWxsb0hvbWUuY2xhc3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTmFycm93ZWQgaG9tZSEhIik7CiAKICAgICAgICAgICAgIGhlbGxvID0gaGVsbG9Ib21lLmNyZWF0ZSgpOwpAQCAtNjQsMTQgKzY0LDE0IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgc2MpIHsKLQl0aGlzLnNjID0gc2M7CisgICAgdGhpcy5zYyA9IHNjOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGNhbGxIZWxsbygpICB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gRm9vQmVhbjo6Y2FsbEhlbGxvKCkiKTsKIAogICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBoZWxsby5zYXlIZWxsbygpOwogCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInN1Y2Nlc3NmdWxseSBpbnZva2VkIGVqYiIpOwpAQCAtODQsNyArODQsNyBAQAogICAgICAgICAgICAgdGhyb3cgaXNlOwogICAgICAgICB9CiAKLSAgICAgICAgCisKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHt9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvc3R1YnNlci9lamIvSGVsbG9CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvc3R1YnNlci9lamIvSGVsbG9CZWFuLmphdmEKaW5kZXggODcxM2ViYS4uMDNkNmM4NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3N0dWJzZXIvZWpiL0hlbGxvQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy9zdHVic2VyL2VqYi9IZWxsb0JlYW4uamF2YQpAQCAtMTgsNyArMTgsNyBAQAogCiBpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwogaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOwotaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsgCitpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25CZWFuOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0OwogaW1wb3J0IGpha2FydGEuZWpiLkVKQkV4Y2VwdGlvbjsKQEAgLTMxLDExICszMSwxMSBAQAogICAgIHB1YmxpYyBIZWxsb0JlYW4oKSB7fQogCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb0JlYW46OmVqYkNyZWF0ZSAhISIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9CZWFuOjplamJDcmVhdGUgISEiKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgewotCXRoaXMuc2MgPSBzYzsKKyAgICB0aGlzLnNjID0gc2M7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2F5SGVsbG8oKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvd2ViY2xpZW50L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvd2ViY2xpZW50L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggODQxNWQ1ZS4uOWEyODI1OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3dlYmNsaWVudC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy93ZWJjbGllbnQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjMgKzE1LDIzIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItc3R1YnMtd2ViY2xpZW50Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3dlYmNsaWVudC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvd2ViY2xpZW50L2J1aWxkLnhtbAppbmRleCAyYzBjZGI2Li5jYjBiOGUwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvd2ViY2xpZW50L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvd2ViY2xpZW50L2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ2LDE2ICs0NiwxNiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXBwY2xpZW50LWphci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQqLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ0cnVlIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJlYXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTY1LDEwICs2NSwxMCBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IiR7aHR0cC5ob3N0fSAke2h0dHAucG9ydH0iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDhmYzM0OTIuLjg0YzNjYzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci5TaW1wbGVSZXBvcnRlckFkYXB0ZXI7CiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewotICAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgaG9zdDsKICAgICBwcml2YXRlIFN0cmluZyBwb3J0OwogCkBAIC0zNSwyMyArMzUsMjMgQEAKICAgICAgICAgaG9zdCA9ICggYXJncy5sZW5ndGggPiAwKSA/IGFyZ3NbMF0gOiAibG9jYWxob3N0IjsKICAgICAgICAgcG9ydCA9ICggYXJncy5sZW5ndGggPiAxKSA/IGFyZ3NbMV0gOiAiNDg0OCI7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJlamItc3R1YnMtd2ViY2xpZW50Iik7CiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJlamItc3R1YnMtd2ViY2xpZW50SUQiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyBlbnYgPSBudWxsOwogICAgICAgICB0cnkgewotICAgICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgCisgICAgICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKwogICAgICAgICAgICAgICAgICIvZWpiLXN0dWJzLXdlYmNsaWVudC9zZXJ2bGV0IjsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW52b2tpbmcgd2ViY2xpZW50IHNlcnZsZXQgYXQgIiArIHVybCk7CiAgICAgICAgICAgICBpbnQgY29kZSA9IGludm9rZVNlcnZsZXQodXJsKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZihjb2RlICE9IDIwMCkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW5jb3JyZWN0IHJldHVybiBjb2RlOiAiICsgY29kZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndlYmNsaWVudCBtYWluIiwgc3RhdC5GQUlMKTsKQEAgLTYzLDE1ICs2MywxNSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndlYmNsaWVudCBtYWluIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybjsKLSAgICAgICAgCisKICAgICB9CiAKICAgICBwcml2YXRlIGludCBpbnZva2VTZXJ2bGV0KFN0cmluZyB1cmwpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAgICAgCisKICAgICAgICAgVVJMIHUgPSBuZXcgVVJMKHVybCk7Ci0gICAgICAgIAorCiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGMxID0gKEh0dHBVUkxDb25uZWN0aW9uKXUub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgaW50IGNvZGUgPSBjMS5nZXRSZXNwb25zZUNvZGUoKTsKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBjMS5nZXRJbnB1dFN0cmVhbSgpOwpAQCAtODQsNiArODQsNiBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjb2RlOwogICAgIH0KLSAgICAKKwogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvd2ViY2xpZW50L2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy93ZWJjbGllbnQvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDdkMzY4NTUuLmIyODg3OGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy93ZWJjbGllbnQvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy93ZWJjbGllbnQvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPGhvbWU+Y29tLnN1bi5zMWFzZGV2LmVqYi5zdHVicy5lamJhcHAuSGVsbG9Ib21lPC9ob21lPgogICAgIDxyZW1vdGU+Y29tLnN1bi5zMWFzZGV2LmVqYi5zdHVicy5lamJhcHAuSGVsbG88L3JlbW90ZT4KICAgPC9lamItcmVmPgotPCEtLSAKKzwhLS0KICA8ZWpiLXJlZj4KICAgICA8ZWpiLXJlZi1uYW1lPmVqYi9kdW1teW1lamI8L2VqYi1yZWYtbmFtZT4KICAgICA8ZWpiLXJlZi10eXBlPlNlc3Npb248L2VqYi1yZWYtdHlwZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy93ZWJjbGllbnQvc2VydmxldC9TZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvc3R1YnMvd2ViY2xpZW50L3NlcnZsZXQvU2VydmxldC5qYXZhCmluZGV4IGFmOWViYjMuLjA1ZGZmZWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi9zdHVicy93ZWJjbGllbnQvc2VydmxldC9TZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3N0dWJzL3dlYmNsaWVudC9zZXJ2bGV0L1NlcnZsZXQuamF2YQpAQCAtMjksMjkgKzI5LDI5IEBACiAvL2ltcG9ydCBqYXZheC5tYW5hZ2VtZW50LmoyZWUuTWFuYWdlbWVudDsKIAogcHVibGljIGNsYXNzIFNlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7Ci0gICAgCisKIAogICAgIHB1YmxpYyB2b2lkICBpbml0KCBTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gd2ViY2xpZW50OjpzZXJ2bGV0Li4uIGluaXQoKSIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlcnZpY2UgKCBIdHRwU2VydmxldFJlcXVlc3QgcmVxICwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwICkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLSAgICAgICAgICAgICAgICAgCisKICAgICAgICAgcmVzcC5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3AuZ2V0V3JpdGVyKCk7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAKICAgICAgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2tpcHBpbmcgbWVqYiB0ZXN0IGZvciBub3cuICBORUVEIFRPIFJFRU5BQkxFIik7Ci0JICAgIC8vICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYWxsaW5nIER1bW15TUVKQkJlYW4iKTsKKyAgICAgICAgLy8gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxpbmcgRHVtbXlNRUpCQmVhbiIpOwogCi0JICAgIC8qIFRPRE8gcmVlbmFibGUgb25jZSBqYXZheC5tYW5hZ2VtZW50IGNsYXNzZXMgYXJlIGF2YWlsYWJsZQorICAgICAgICAvKiBUT0RPIHJlZW5hYmxlIG9uY2UgamF2YXgubWFuYWdlbWVudCBjbGFzc2VzIGFyZSBhdmFpbGFibGUKICAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL2R1bW15bWVqYiIpOwotICAgICAgICAgICAgTWFuYWdlbWVudEhvbWUgbUhvbWUgPSAoTWFuYWdlbWVudEhvbWUpIAorICAgICAgICAgICAgTWFuYWdlbWVudEhvbWUgbUhvbWUgPSAoTWFuYWdlbWVudEhvbWUpCiAgICAgICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwgTWFuYWdlbWVudEhvbWUuY2xhc3MpOwogICAgICAgICAgICAgTWFuYWdlbWVudCBkdW1teU1lamIgPSBtSG9tZS5jcmVhdGUoKTsKIApAQCAtNTksMjIgKzU5LDIyIEBACiAgICAgICAgICAgICBkdW1teU1lamIuZ2V0TUJlYW5Db3VudCgpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJkdW1teSBtZWpiIHRlc3Qgc3VjY2Vzc2Z1bCIpOwogCi0JICAgICovCisgICAgICAgICovCiAKICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29raW5nIHVwIGVqYiByZWYgIik7Ci0gICAgICAgICAgICAvLyBjcmVhdGUgRUpCIHVzaW5nIGZhY3RvcnkgZnJvbSBjb250YWluZXIgCi0JICAgIE9iamVjdCBvYmpyZWYyID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9oZWxsbyIpOworICAgICAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyCisgICAgICAgIE9iamVjdCBvYmpyZWYyID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9oZWxsbyIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvYmpyZWYgPSAiICsgb2JqcmVmMik7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkxvb2tlZCB1cCBob21lISEiKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgSGVsbG9Ib21lICBob21lID0gKEhlbGxvSG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cKICAgICAgICAgICAgICAgICAob2JqcmVmMiwgSGVsbG9Ib21lLmNsYXNzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIk5hcnJvd2VkIGhvbWUhISIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBIZWxsbyBociA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkdvdCB0aGUgRUpCISEiKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgLy8gaW52b2tlIG1ldGhvZCBvbiB0aGUgRUpCCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImludm9raW5nIGVqYiIpOwogICAgICAgICAgICAgaHIuc2F5SGVsbG8oKTsKQEAgLTgzLDIyICs4MywyMiBAQAogCiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPEhUTUw+IDxIRUFEPiA8VElUTEU+IEpNUyBTZXJ2bGV0IE91dHB1dCA8L1RJVExFPiA8L0hFQUQ+IDxCT0RZIEJHQ09MT1I9d2hpdGU+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPENFTlRFUj4gPEZPTlQgc2l6ZT0rMSBDT0xPUj1ibHVlPkRhdGFiYXNlU2VydmVsdCA6OiBBbGwgaW5mb3JtYXRpb24gSSBjYW4gZ2l2ZSA8L0ZPTlQ+IDwvQ0VOVEVSPiA8cD4gIiApOwotICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBDb250ZXh0IFBhdGggOiAgPC9GT05UPiAiICsgcmVxLmdldENvbnRleHRQYXRoKCkgKyAiPGJyPiIgKTsgCi0gICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IFNlcnZsZXQgUGF0aCA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0U2VydmxldFBhdGgoKSArICI8YnI+IiApOyAKLSAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gUGF0aCBJbmZvIDogIDwvRk9OVD4gIiArIHJlcS5nZXRQYXRoSW5mbygpICsgIjxicj4iICk7IAorICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBDb250ZXh0IFBhdGggOiAgPC9GT05UPiAiICsgcmVxLmdldENvbnRleHRQYXRoKCkgKyAiPGJyPiIgKTsKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gU2VydmxldCBQYXRoIDogIDwvRk9OVD4gIiArIHJlcS5nZXRTZXJ2bGV0UGF0aCgpICsgIjxicj4iICk7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IFBhdGggSW5mbyA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0UGF0aEluZm8oKSArICI8YnI+IiApOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvQk9EWT4gPC9IVE1MPiAiKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH1jYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigid2ViY2xpZW50IHNlcnZsZXQgdGVzdCBmYWlsZWQiKTsKICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGV4KTsKLSAgICAgICAgfSAKKyAgICAgICAgfQogICAgIH0KIAotICAgIAotICAgIAorCisKICAgICBwdWJsaWMgdm9pZCAgZGVzdHJveSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbiB3ZWJjbGllbnQ6OnNlcnZsZXQgZGVzdHJveSIpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Rlc3RzL2NhY2hlL0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3Rlc3RzL2NhY2hlL0NsaWVudC5qYXZhCmluZGV4IDUwNjIxM2UuLjc5MGM1YjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90ZXN0cy9jYWNoZS9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGVzdHMvY2FjaGUvQ2xpZW50LmphdmEKQEAgLTIyLDcgKzIyLDcgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBTdHJpbmcgY2FjaGVOYW1lOyAKKyAgICBTdHJpbmcgY2FjaGVOYW1lOwogICAgIGludCAgICBjYWNoZVNpemUsIHJlc2l6ZVF1YW50aXR5OwogICAgIGxvbmcgICBpZGxlVGltZW91dDsgLy8gaWRsZVRpbWVvdXQgdmFsdWUgaW4gbWlsbGlzZWNvbmRzCiAgICAgZmxvYXQgIGxvYWRGYWN0b3I7CkBAIC02OSwxMSArNjksMTEgQEAKICAgICAgICAgICAgIGNyZWF0ZU9iamVjdHMoKTsKICAgICAgICAgICAgIGFkZENhY2hlRW50cmllcygpOwogICAgICAgICAgICAgaWYgKCBkZWJ1ZyApCi0gICAgICAgICAgICAgICAgZGlzcGxheUNhY2hlRW50cmllcyggIkRpc3BsYXkgaXRlbXMgaW4gY2FjaGUgYWZ0ZXIgYWRkaW5nIiApOyAKKyAgICAgICAgICAgICAgICBkaXNwbGF5Q2FjaGVFbnRyaWVzKCAiRGlzcGxheSBpdGVtcyBpbiBjYWNoZSBhZnRlciBhZGRpbmciICk7CiAKICAgICAgICAgICAgIHJlbW92ZUNhY2hlRW50cmllcygpOwogICAgICAgICAgICAgaWYgKCBkZWJ1ZyApCi0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiVG90YWwgaXRlbXMgaW4gY2FjaGUgKCIgKyBjYWNoZU5hbWUgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJUb3RhbCBpdGVtcyBpbiBjYWNoZSAoIiArIGNhY2hlTmFtZSArCiAgICAgICAgICAgICAgICAgICAgICIpIGFmdGVyIHJlbW92ZSBjYWxsID0gIiArIGdldEVudHJ5Q291bnQoKSApOwogCiAgICAgICAgICAgICBhZGRDYWNoZUVudHJpZXMoKTsKQEAgLTk5LDcgKzk5LDcgQEAKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJcblxuSW4gY3JlYXRlQ2FjaGUgb2YgQ2FjaGUoIiArIGNhY2hlTmFtZSArICIpIiApOwogICAgICAgICAgICAgaWYgKCBjYWNoZVNpemUgPD0gMCAmJiBpZGxlVGltZW91dCA8PSAwICkgewogICAgICAgICAgICAgICAgIGlmICggZGVidWcgKQotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJcdFx0Q3JlYXRpbmcgQmFzZUNhY2hlIGZvciBjYWNoZVNpemUgPSAiICsgY2FjaGVTaXplICsgCisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIlx0XHRDcmVhdGluZyBCYXNlQ2FjaGUgZm9yIGNhY2hlU2l6ZSA9ICIgKyBjYWNoZVNpemUgKwogICAgICAgICAgICAgICAgICAgICAgICAgIiA6cmVzaXplUXVhbnRpdHkgPSAiICsgcmVzaXplUXVhbnRpdHkgKyAiIDo6bG9hZEZhY3RvciA9ICIgKyBsb2FkRmFjdG9yICk7CiAgICAgICAgICAgICAgICAgY2FjaGUgPSBuZXcgQmFzZUNhY2hlKCk7CiAgICAgICAgICAgICAgICAgY2FjaGUuaW5pdCggREVGQVVMVF9DQUNIRV9TSVpFLCBERUZBVUxUX0xPQURfRkFDVE9SLCBudWxsICk7CkBAIC0xMDgsNyArMTA4LDcgQEAKICAgICAgICAgICAgICAgICBMcnVDYWNoZSBscnUgPSBuZXcgTHJ1Q2FjaGUoIERFRkFVTFRfQ0FDSEVfU0laRSk7CiAgICAgICAgICAgICAgICAgY2FsY3VsYXRlTG9hZEZhY3RvcigpOwogICAgICAgICAgICAgICAgIGlmICggZGVidWcgKQotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJcdFx0Q3JlYXRpbmcgTHJ1Q2FjaGUgZm9yIGNhY2hlU2l6ZSA9ICIgKyBjYWNoZVNpemUgKyAKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiXHRcdENyZWF0aW5nIExydUNhY2hlIGZvciBjYWNoZVNpemUgPSAiICsgY2FjaGVTaXplICsKICAgICAgICAgICAgICAgICAgICAgICAgICIgOnJlc2l6ZVF1YW50aXR5ID0gIiArIHJlc2l6ZVF1YW50aXR5ICsgIiA6OmxvYWRGYWN0b3IgPSAiICsgbG9hZEZhY3RvciApOwogICAgICAgICAgICAgICAgIGxydS5pbml0KCBjYWNoZVNpemUsIGlkbGVUaW1lb3V0LCBsb2FkRmFjdG9yLCBudWxsICk7CiAgICAgICAgICAgICAgICAgY2FjaGUgPSBscnU7CkBAIC0xMjUsNyArMTI1LDcgQEAKICAgICAgICAgZm9yKCBpbnQgaSA9IDA7IGkgPCBNQVhfVEVTVF9FTlRSSUVTOyBpKysgKSB7CiAgICAgICAgICAgICBkdW1teXNbaV0gPSBuZXcgRHVtbXlPYmplY3QoIGkgKTsKICAgICAgICAgfQotICAgIH0gLy9jcmVhdGVPYmplY3RzKCkgCisgICAgfSAvL2NyZWF0ZU9iamVjdHMoKQogCiAgICAgcHJpdmF0ZSB2b2lkIGFkZENhY2hlRW50cmllcygpIHsKICAgICAgICAgT2JqZWN0IG9iajsKQEAgLTE3NiwxMyArMTc2LDEzIEBACiAgICAgICAgIH0KICAgICB9IC8vRHVtbXlPYmplY3R7fQogCi0gICAgY2xhc3MgRXhwaXJlZEl0ZW1UYXNrIAorICAgIGNsYXNzIEV4cGlyZWRJdGVtVGFzawogICAgICAgICBleHRlbmRzIGphdmEudXRpbC5UaW1lclRhc2sgewotICAgICAgICAKKwogICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAgICBjYWNoZS50cmltRXhwaXJlZEVudHJpZXMoIHJlc2l6ZVF1YW50aXR5ICk7IAorICAgICAgICAgICAgY2FjaGUudHJpbUV4cGlyZWRFbnRyaWVzKCByZXNpemVRdWFudGl0eSApOwogICAgICAgICB9Ci0gICAgfSAvL0V4cGlyZWRJdGVtVGFzayAKKyAgICB9IC8vRXhwaXJlZEl0ZW1UYXNrCiAKIAogCkBAIC0yNjUsMjIgKzI2NSwyMiBAQAogICAgICAgICB9CiAKICAgICAgICAgaWYgKCBkZWJ1ZyApIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICgKICAgICAgICAgICAgICAgICAiXG5cbkxpc3QgYWxsIHRoZSBpdGVtcyBpbiBhbGwgdGhlIGNhY2hlcyB0byBlbnN1cmUgdGhhdCB0aGUgaWRsZSB0aW1lb3V0IHdvcmtzIGNvcnJlY3RseSIgKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCAiXHRcdCBUb3RhbCBpdGVtcyBpbiBjYWNoZSAoYzApID0gIiArIGMwLmdldEVudHJ5Q291bnQoKSApOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICggIlx0XHQgVG90YWwgaXRlbXMgaW4gY2FjaGUgKGMxKSA9ICIgKyBjMS5nZXRFbnRyeUNvdW50KCkgKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoICJcdFx0IFRvdGFsIGl0ZW1zIGluIGNhY2hlIChjMikgPSAiICsgYzIuZ2V0RW50cnlDb3VudCgpICk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCAiXHRcdCBUb3RhbCBpdGVtcyBpbiBjYWNoZSAoYzMpID0gIiArIGMzLmdldEVudHJ5Q291bnQoKSApOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICggIlx0XHQgVG90YWwgaXRlbXMgaW4gY2FjaGUgKGM0KSA9ICIgKyBjNC5nZXRFbnRyeUNvdW50KCkgKTsKIAotICAgICAgICAgICAgYzAuZGlzcGxheUNhY2hlRW50cmllcyggIkxpc3QgaXRlbXMgaW4gY2FjaGUgYWZ0ZXIgdGltZW91dCAiICk7IAotICAgICAgICAgICAgYzEuZGlzcGxheUNhY2hlRW50cmllcyggIkxpc3QgaXRlbXMgaW4gY2FjaGUgYWZ0ZXIgdGltZW91dCAiICk7IAotICAgICAgICAgICAgYzIuZGlzcGxheUNhY2hlRW50cmllcyggIkxpc3QgaXRlbXMgaW4gY2FjaGUgYWZ0ZXIgdGltZW91dCAiICk7IAotICAgICAgICAgICAgYzMuZGlzcGxheUNhY2hlRW50cmllcyggIkxpc3QgaXRlbXMgaW4gY2FjaGUgYWZ0ZXIgdGltZW91dCAiICk7IAotICAgICAgICAgICAgYzQuZGlzcGxheUNhY2hlRW50cmllcyggIkxpc3QgaXRlbXMgaW4gY2FjaGUgYWZ0ZXIgdGltZW91dCAiICk7IAorICAgICAgICAgICAgYzAuZGlzcGxheUNhY2hlRW50cmllcyggIkxpc3QgaXRlbXMgaW4gY2FjaGUgYWZ0ZXIgdGltZW91dCAiICk7CisgICAgICAgICAgICBjMS5kaXNwbGF5Q2FjaGVFbnRyaWVzKCAiTGlzdCBpdGVtcyBpbiBjYWNoZSBhZnRlciB0aW1lb3V0ICIgKTsKKyAgICAgICAgICAgIGMyLmRpc3BsYXlDYWNoZUVudHJpZXMoICJMaXN0IGl0ZW1zIGluIGNhY2hlIGFmdGVyIHRpbWVvdXQgIiApOworICAgICAgICAgICAgYzMuZGlzcGxheUNhY2hlRW50cmllcyggIkxpc3QgaXRlbXMgaW4gY2FjaGUgYWZ0ZXIgdGltZW91dCAiICk7CisgICAgICAgICAgICBjNC5kaXNwbGF5Q2FjaGVFbnRyaWVzKCAiTGlzdCBpdGVtcyBpbiBjYWNoZSBhZnRlciB0aW1lb3V0ICIgKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBzdWNjZXNzID0gMDsKICAgICAgICAgZmFpbHVyZSA9IDA7CiAKQEAgLTMxOCw3ICszMTgsNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCAiXG5BY3R1YWwgICBmYWlsdXJlIGNvdW50ID0gIiAgKyBmYWlsdXJlICk7CiAKICAgICAgICAgdGltZXIuY2FuY2VsKCk7Ci0gICAgICAgIAorCiAgICAgfSAvL21haW4oKQogCiB9IC8vQ2xpZW50IHt9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL2J1aWxkLnhtbAppbmRleCA2YmRhNDllLi5lODgxYjFhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9idWlsZC54bWwKQEAgLTYxLDE2ICs2MSwxNiBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+Ci0JCVVzYWdlOgotCQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamItdGltZXIgdGVzdHMpCisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamItdGltZXIgdGVzdHMpCiAKLQkJCWFudCBtZGJ0aW1lciAoRXhlY3V0ZXMgdGhlIGVqYi10aW1lciBtZGJ0aW1lcgorICAgICAgICAgICAgYW50IG1kYnRpbWVyIChFeGVjdXRlcyB0aGUgZWpiLXRpbWVyIG1kYnRpbWVyCiAKLQkJCWFudCBzZXNzaW9udGltZXIgKEV4ZWN1dGVzIHRoZSBlamItdGltZXIgc2Vzc2lvbnRpbWVyIHRlc3QpCi0JCQlhbnQgdGltZXJ0ZXN0cyAoRXhlY3V0ZXMgdGhlIGVqYi10aW1lciB0aW1lcnRlc3RzIHRlc3QpCi0JCQlhbnQgdGltZXJzZXJpYWxpemF0aW9uIChFeGVjdXRlcyB0aGUgZWpiLXRpbWVyIHNlcmlhbGl6YXRpb24gdGVzdCkKKyAgICAgICAgICAgIGFudCBzZXNzaW9udGltZXIgKEV4ZWN1dGVzIHRoZSBlamItdGltZXIgc2Vzc2lvbnRpbWVyIHRlc3QpCisgICAgICAgICAgICBhbnQgdGltZXJ0ZXN0cyAoRXhlY3V0ZXMgdGhlIGVqYi10aW1lciB0aW1lcnRlc3RzIHRlc3QpCisgICAgICAgICAgICBhbnQgdGltZXJzZXJpYWxpemF0aW9uIChFeGVjdXRlcyB0aGUgZWpiLXRpbWVyIHNlcmlhbGl6YXRpb24gdGVzdCkKIAotCTwvZWNobz4KKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvbWRidGltZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9tZGJ0aW1lci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDgwNGM3NGYuLjMxODE2YTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9tZGJ0aW1lci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9tZGJ0aW1lci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMSArMTUsMjEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi10aW1lci1tZGJ0aW1lciIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL21kYnRpbWVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9tZGJ0aW1lci9idWlsZC54bWwKaW5kZXggNGQ2MmM5Yy4uYTU5YTA2NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL21kYnRpbWVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvbWRidGltZXIvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NiwxNCArNDYsMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypCZWFuKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImNyZWF0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtNzUsMTQgKzc1LDE0IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iMSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvbWRidGltZXIvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL21kYnRpbWVyL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA2ZGVmNGEzLi5jNTMyZGM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvbWRidGltZXIvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9tZGJ0aW1lci9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTQ2LDcgKzQ2LDcgQEAKIAogICAgIHByaXZhdGUgaW50IG51bU1lc3NhZ2VzID0gMjsKICAgICBwdWJsaWMgQ2xpZW50KFN0cmluZ1tdIGFyZ3MpIHsKLSAgICAgICAgCisKICAgICAgICAgaWYoIGFyZ3MubGVuZ3RoID09IDEgKSB7CiAgICAgICAgICAgICBudW1NZXNzYWdlcyA9IG5ldyBJbnRlZ2VyKGFyZ3NbMF0pLmludFZhbHVlKCk7CiAgICAgICAgIH0KQEAgLTY3LDIwICs2NywyMCBAQAogCiAgICAgcHVibGljIHZvaWQgc2V0dXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgY29udGV4dCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICAgICAKLSAgICAgICAgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxdWV1ZUNvbkZhY3RvcnkgPSAKKworICAgICAgICBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHF1ZXVlQ29uRmFjdG9yeSA9CiAgICAgICAgICAgICAoUXVldWVDb25uZWN0aW9uRmFjdG9yeSkgY29udGV4dC5sb29rdXAKICAgICAgICAgICAgICgiamF2YTpjb21wL2Vudi9Gb29DRiIpOwogCiAgICAgICAgIHF1ZXVlQ29uID0gcXVldWVDb25GYWN0b3J5LmNyZWF0ZVF1ZXVlQ29ubmVjdGlvbigpOwogCiAgICAgICAgIHF1ZXVlU2Vzc2lvbiA9IHF1ZXVlQ29uLmNyZWF0ZVF1ZXVlU2Vzc2lvbgotICAgICAgICAgICAgKGZhbHNlLCBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UpOyAKKyAgICAgICAgICAgIChmYWxzZSwgU2Vzc2lvbi5BVVRPX0FDS05PV0xFREdFKTsKIAogICAgICAgICB0YXJnZXREZXN0ID0gKGpha2FydGEuam1zLlF1ZXVlKSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9qbXMvTXNnQmVhblF1ZXVlIik7CiAKICAgICAgICAgLy8gUHJvZHVjZXIgd2lsbCBiZSBzcGVjaWZpZWQgd2hlbiBhY3R1YWwgbXNnIGlzIHNlbnQuCi0gICAgICAgIHF1ZXVlU2VuZGVyID0gcXVldWVTZXNzaW9uLmNyZWF0ZVNlbmRlcih0YXJnZXREZXN0KTsgICAgICAgIAorICAgICAgICBxdWV1ZVNlbmRlciA9IHF1ZXVlU2Vzc2lvbi5jcmVhdGVTZW5kZXIodGFyZ2V0RGVzdCk7CiAKICAgICAgICAgY2xpZW50RGVzdCA9IChqYWthcnRhLmptcy5RdWV1ZSkgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvam1zL0NsaWVudFF1ZXVlIik7CiAKQEAgLTEwMSw3ICsxMDEsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgc2VuZE1zZyhNZXNzYWdlIG1zZykgCisgICAgcHVibGljIHZvaWQgc2VuZE1zZyhNZXNzYWdlIG1zZykKICAgICAgICAgdGhyb3dzIEpNU0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VuZGluZyBtZXNzYWdlIHRvICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgYXQgdGltZSAiICsgU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkpOwpAQCAtMTE0LDcgKzExNCw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2FpdGluZyBmb3IgcXVldWUgbWVzc2FnZSAiKTsKICAgICAgICAgTWVzc2FnZSByZWN2ZG1lc3NhZ2UgPSBxdWV1ZVJlY2VpdmVyLnJlY2VpdmUodGltZW91dCk7CiAgICAgICAgIGlmKCByZWN2ZG1lc3NhZ2UgIT0gbnVsbCApIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVjZWl2ZWQgbWVzc2FnZSA6ICIgKyByZWN2ZG1lc3NhZ2UgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVjZWl2ZWQgbWVzc2FnZSA6ICIgKyByZWN2ZG1lc3NhZ2UgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgYXQgIiArIG5ldyBEYXRlKCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0aW1lb3V0IGFmdGVyICIgKyB0aW1lb3V0ICsgIiBzZWNvbmRzIik7CkBAIC0xMzEsMTEgKzEzMSwxMSBAQAogCiAgICAgICAgIE9iamVjdE1lc3NhZ2UgcmVjdk1zZzEgPSAoT2JqZWN0TWVzc2FnZSkgcmVjdlF1ZXVlTXNnKDIwMDAwKTsKICAgICAgICAgRGF0ZSBjYW5jZWxsYXRpb24gPSAoRGF0ZSkgcmVjdk1zZzEuZ2V0T2JqZWN0KCk7Ci0gICAgICAgIAorCiAgICAgICAgIERhdGUgbm93ID0gbmV3IERhdGUoKTsKLSAgICAgICAgCisKICAgICAgICAgLy8gd2FpdCBmb3IgbWVzc2FnZSBhZnRlciB0aW1lciBpcyBjYW5jZWxsZWQgKHBsdXMgc29tZSBidWZmZXIgdGltZSkKLSAgICAgICAgbG9uZyB3YWl0ID0gbm93LmJlZm9yZShjYW5jZWxsYXRpb24pID8gCisgICAgICAgIGxvbmcgd2FpdCA9IG5vdy5iZWZvcmUoY2FuY2VsbGF0aW9uKSA/CiAgICAgICAgICAgICAoY2FuY2VsbGF0aW9uLmdldFRpbWUoKSAtIG5vdy5nZXRUaW1lKCkpICsgMzAwMDAgOiAwOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRpbWVyIHdpbGwgYmUgY2FuY2VsbGVkIGFmdGVyICIgKyBjYW5jZWxsYXRpb24pOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldhaXRpbmcgZm9yIGNhbmNlbGxhdGlvbiBub3RpZmljYXRpb24gdW50aWwgIiArCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvbWRidGltZXIvZWpiL01lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvbWRidGltZXIvZWpiL01lc3NhZ2VCZWFuLmphdmEKaW5kZXggYmE4OTVlZC4uMTRlNTg5ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL21kYnRpbWVyL2VqYi9NZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9tZGJ0aW1lci9lamIvTWVzc2FnZUJlYW4uamF2YQpAQCAtMjIsNyArMjIsNyBAQAogaW1wb3J0IGphdmF4Lm5hbWluZy4qOwogaW1wb3J0IGphdmEudXRpbC5EYXRlOwogCi1wdWJsaWMgY2xhc3MgTWVzc2FnZUJlYW4gIAorcHVibGljIGNsYXNzIE1lc3NhZ2VCZWFuCiAgICAgaW1wbGVtZW50cyBNZXNzYWdlRHJpdmVuQmVhbiwgTWVzc2FnZUxpc3RlbmVyLFRpbWVkT2JqZWN0IHsKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VuZGluZyBtZXNzYWdlICIgKyBtZXNzYWdlKTsKICAgICAgICAgICAgICAgICBzZW5kZXIuc2VuZChtZXNzYWdlKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm1lc3NhZ2Ugc2VudCIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICB9IGNhdGNoKE5hbWluZ0V4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIH0KQEAgLTkwLDcgKzkwLDcgQEAKICAgICAgICAgICAgIERhdGUgbm93ID0gbmV3IERhdGUoKTsKICAgICAgICAgICAgIERhdGUgZXhwaXJlID0gbmV3IERhdGUobm93LmdldFRpbWUoKSArIDI1MDAwKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRpbmcgcGVyaW9kaWMgdGltZXIgYXQgIiArIG5vdyk7Ci0gICAgICAgICAgICBUaW1lciB0ID0gbWRjLmdldFRpbWVyU2VydmljZSgpLmNyZWF0ZVRpbWVyKDEwMDAwLCAxMDAwMCwgCisgICAgICAgICAgICBUaW1lciB0ID0gbWRjLmdldFRpbWVyU2VydmljZSgpLmNyZWF0ZVRpbWVyKDEwMDAwLCAxMDAwMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwaXJlKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGltZXIgd2lsbCBiZSBjYW5jZWxsZWQgb24gZmlyc3QgZXhwaXJhdGlvbiBhZnRlciAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBpcmUpOwpAQCAtMTAwLDcgKzEwMCw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlbmRpbmcgbWVzc2FnZSAiICsgb3V0TWVzc2FnZSk7CiAgICAgICAgICAgICBzZW5kZXIuc2VuZChvdXRNZXNzYWdlKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibWVzc2FnZSBzZW50Iik7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImdvdCBleGNlcHRpb24gaW4gbWVzc2FnZSBiZWFuIik7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwpAQCAtMTE3LDE2ICsxMTcsMTYgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRNZXNzYWdlRHJpdmVuQ29udGV4dChNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGMpIHsKLQl0aGlzLm1kYyA9IG1kYzsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIE1lc3NhZ2VEcml2ZW5FSkI6OnNldE1lc3NhZ2VEcml2ZW5Db250ZXh0ICEhIik7CisgICAgdGhpcy5tZGMgPSBtZGM7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBNZXNzYWdlRHJpdmVuRUpCOjpzZXRNZXNzYWdlRHJpdmVuQ29udGV4dCAhISIpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gTWVzc2FnZURyaXZlbkVKQjo6ZWpiQ3JlYXRlICEhIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBNZXNzYWdlRHJpdmVuRUpCOjplamJDcmVhdGUgISEiKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBNZXNzYWdlRHJpdmVuRUpCOjplamJSZW1vdmUgISEiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIE1lc3NhZ2VEcml2ZW5FSkI6OmVqYlJlbW92ZSAhISIpOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Jlc3RvcmUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9yZXN0b3JlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggODg4MzZhMi4uNGMzM2E2MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Jlc3RvcmUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvcmVzdG9yZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMSArMTUsMjEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi10aW1lci1yZXN0b3JlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvcmVzdG9yZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvcmVzdG9yZS9idWlsZC54bWwKaW5kZXggYzZjYzgyYy4uZTcyNzc5OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Jlc3RvcmUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9yZXN0b3JlL2J1aWxkLnhtbApAQCAtMzUsNyArMzUsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDcsMTQgKzQ3LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02NCw3ICs2NCw3IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImNyZWF0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtNzgsMTQgKzc4LDE0IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0icmVzdG9yZSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvcmVzdG9yZS9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvcmVzdG9yZS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggZmU1YzVjMC4uZjA2YTZiYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Jlc3RvcmUvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9yZXN0b3JlL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzEsOSArMzEsOSBAQAogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGtUZXN0Tm90UnVuICAgID0gIlRFU1QgTk9UIFJVTiI7CiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcga1Rlc3RQYXNzZWQgICAgPSAiVEVTVCBQQVNTRUQiOwogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGtUZXN0RmFpbGVkICAgID0gIlRFU1QgRkFJTEVEIjsKLSAgICAKLSAgICAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorCisKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIFN0cmluZyBqbmRpTmFtZSA9ICJlamIvZWpiX3RpbWVyX3Nlc3Npb250aW1lcl9UaW1lclNlc3Npb24iOwpAQCAtNTUsMTIgKzU1LDEyIEBACiAKICAgICAgICAgaWYoIGFyZ3MubGVuZ3RoID09IDEpIHsKICAgICAgICAgICAgIGFmdGVyUmVzdGFydCA9IGFyZ3NbMF0uZXF1YWxzSWdub3JlQ2FzZSgicmVzdG9yZSIpOwotICAgICAgICB9IAorICAgICAgICB9CiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyBkb1Rlc3QoKSB7CiAgICAgICAgIFN0cmluZyByZXN1bHQgPSBrVGVzdFBhc3NlZDsKLSAgICAgICAgUXVldWVDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBudWxsOyAKKyAgICAgICAgUXVldWVDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBudWxsOwogICAgICAgICBUaW1lclNlc3Npb24gcmVtb3RlT2JqID0gbnVsbDsKIAogICAgICAgICBTdHJpbmcgdGVzdE5hbWUgPSBqbmRpTmFtZTsKQEAgLTY4LDE4ICs2OCwxOCBAQAogCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29raW5nIHVwIGVqYiByZWYgIiArIGVqYk5hbWUpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEb2luZyB0aW1lciB0ZXN0IGZvciAiICsgam5kaU5hbWUpOwogCiAKICAgICAgICAgICAgIGphdmEubGFuZy5PYmplY3Qgb2JqcmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52LyIgKyBlamJOYW1lKTsKIAotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS1lamIgc3R1Yi0tLSIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tZWpiIHN0dWItLS0iICsKICAgICAgICAgICAgICAgICBvYmpyZWYuZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tZWpiIGNsYXNzbmFtZS0tLSIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tZWpiIGNsYXNzbmFtZS0tLSIgKwogICAgICAgICAgICAgICAgIG9ianJlZi5nZXRDbGFzcygpLmdldE5hbWUoKSk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLVRpbWVyU2Vzc2lvbkhvbWUtLS0iICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLVRpbWVyU2Vzc2lvbkhvbWUtLS0iICsKICAgICAgICAgICAgICAgICBUaW1lclNlc3Npb25Ib21lLmNsYXNzLmdldENsYXNzTG9hZGVyKCkpOwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJMb29rZWQgdXAgaG9tZSEhIik7CiAKQEAgLTg3LDcgKzg3LDcgQEAKIAogICAgICAgICAgICAgVGltZXJTZXNzaW9uSG9tZSBob21lID0gKFRpbWVyU2Vzc2lvbkhvbWUpCiAgICAgICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwgVGltZXJTZXNzaW9uSG9tZS5jbGFzcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgcmVtb3RlT2JqID0gaG9tZS5jcmVhdGUoKTsKICAgICAgICAgICAgIFN0cmluZyBvdGhlclNlcnZlcjEgPSAiZm9vIjsKIApAQCAtOTYsNTkgKzk2LDU5IEBACiAgICAgICAgICAgICAgICAgdGVzdE5hbWUgPSAiYWZ0ZXJSZXN0YXJ0IjsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk1pZ3JhdGluZyB0aW1lcnMgZnJvbSAiICsgb3RoZXJTZXJ2ZXIxKTsKICAgICAgICAgICAgICAgICByZW1vdGVPYmoubWlncmF0ZVRpbWVyc0Zyb20ob3RoZXJTZXJ2ZXIxKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHJlbW90ZU9iai5jcmVhdGVUaW1lcig1MDAwLCAwLCAidGltZXIxIik7CiAgICAgICAgICAgICAgICAgcmVtb3RlT2JqLmNyZWF0ZVRpbWVyKDMwMDAwLCAwLCAidGltZXIyIik7CiAgICAgICAgICAgICAgICAgcmVtb3RlT2JqLmNyZWF0ZVRpbWVyKDYwMDAwMDAwLCAwLCAidGltZXIzIik7CiAgICAgICAgICAgICAgICAgcmVtb3RlT2JqLmNyZWF0ZVRpbWVyKDUwMDAsIDEyMDAwLCAidGltZXI0Iik7CiAgICAgICAgICAgICAgICAgcmVtb3RlT2JqLmNyZWF0ZVRpbWVyKDUwMDAsIDMwMDAwLCAidGltZXI1Iik7Ci0gICAgICAgICAgICAgICAgcmVtb3RlT2JqLmNyZWF0ZVRpbWVyKDUwMDAsIDEwMDAwMDAwMCwgInRpbWVyNiIpOyAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcmVtb3RlT2JqLmNyZWF0ZVRpbWVyKDUwMDAsIDEwMDAwMDAwMCwgInRpbWVyNiIpOworCiAgICAgICAgICAgICAgICAgLy8gc2ltdWxhdGUgY3JlYXRpb24gb2YgdGltZXJzIHdpdGhpbiBhbm90aGVyIHNlcnZlcgogICAgICAgICAgICAgICAgIC8vIGluc3RhbmNlLiAgbm9uZSBvZiB0aGVzZSBzaG91bGQgdGltZW91dCB1bnRpbCB3ZQogICAgICAgICAgICAgICAgIC8vIGRvIGEgbWlncmF0aW9uCi0gICAgICAgICAgICAgICAgCisKIAogICAgICAgICAgICAgICAgIHJlbW90ZU9iai5jcmVhdGVUaW1lckluT3RoZXJTZXJ2ZXIKICAgICAgICAgICAgICAgICAgICAgKG90aGVyU2VydmVyMSwgIm90aGVyX3RpbWVyNyIsCi0gICAgICAgICAgICAgICAgICAgICAxMDAwLCAwLCAKKyAgICAgICAgICAgICAgICAgICAgIDEwMDAsIDAsCiAgICAgICAgICAgICAgICAgICAgICAib3RoZXJfdGltZXI3Iik7CiAKICAgICAgICAgICAgICAgICByZW1vdGVPYmouY3JlYXRlVGltZXJJbk90aGVyU2VydmVyCiAgICAgICAgICAgICAgICAgICAgIChvdGhlclNlcnZlcjEsICJvdGhlcl90aW1lcjgiLAotICAgICAgICAgICAgICAgICAgICAgMTAwMDAwMDAwMDBMLCAwLCAKLSAgICAgICAgICAgICAgICAgICAgICJvdGhlcl90aW1lcjgiKTsgCi0gICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAxMDAwMDAwMDAwMEwsIDAsCisgICAgICAgICAgICAgICAgICAgICAib3RoZXJfdGltZXI4Iik7CisKICAgICAgICAgICAgICAgICByZW1vdGVPYmouY3JlYXRlVGltZXJJbk90aGVyU2VydmVyCiAgICAgICAgICAgICAgICAgICAgIChvdGhlclNlcnZlcjEsICJvdGhlcl90aW1lcjkiLAotICAgICAgICAgICAgICAgICAgICAgMTAwMCwgMTAwMDAwMDAwMDBMLCAKKyAgICAgICAgICAgICAgICAgICAgIDEwMDAsIDEwMDAwMDAwMDAwTCwKICAgICAgICAgICAgICAgICAgICAgICJvdGhlcl90aW1lcjkiKTsKIAogCiAgICAgICAgICAgICAgICAgcmVtb3RlT2JqLmNyZWF0ZVRpbWVySW5PdGhlclNlcnZlcgogICAgICAgICAgICAgICAgICAgICAob3RoZXJTZXJ2ZXIxLCAib3RoZXJfdGltZXIxMCIsCi0gICAgICAgICAgICAgICAgICAgICAxMDAwMDAwMDAsIDEwMDAsIAorICAgICAgICAgICAgICAgICAgICAgMTAwMDAwMDAwLCAxMDAwLAogICAgICAgICAgICAgICAgICAgICAgIm90aGVyX3RpbWVyMTAiKTsKIAogICAgICAgICAgICAgICAgIHJlbW90ZU9iai5jcmVhdGVUaW1lckluT3RoZXJTZXJ2ZXIKICAgICAgICAgICAgICAgICAgICAgKG90aGVyU2VydmVyMSwgIm90aGVyX3RpbWVyMTEiLAotICAgICAgICAgICAgICAgICAgICAgMzAwMDAsIDEwMDAwMDAwMCwgCisgICAgICAgICAgICAgICAgICAgICAzMDAwMCwgMTAwMDAwMDAwLAogICAgICAgICAgICAgICAgICAgICAgIm90aGVyX3RpbWVyMTEiKTsKIAogICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBhIGNvdXBsZSBvZiB0aW1lcnMgZm9yIGFub3RoZXIgc2ltdWxhdGVkCiAgICAgICAgICAgICAgICAgLy8gc2VydmVyLiAgd2Ugd2lsbCBub3QgYmUgbWlncmF0aW5nIHRoZXNlIHRpbWVycywgc28KICAgICAgICAgICAgICAgICAvLyBieSB2ZXJpZnlpbmcgdGhhdCB3ZSBkb24ndCBnZXQgbm90aWZpY2F0aW9ucyBmcm9tIHRoZXNlCiAgICAgICAgICAgICAgICAgLy8gdGltZXJzIHdlIHRlc3QgdGhhdCB0aGUgbWlncmF0aW9uIG9ubHkgaGFwcGVucyBmb3IKLSAgICAgICAgICAgICAgICAvLyB0aGUgc3BlY2lmaWVkIHNlcnZlci4gIAorICAgICAgICAgICAgICAgIC8vIHRoZSBzcGVjaWZpZWQgc2VydmVyLgogCiAgICAgICAgICAgICAgICAgcmVtb3RlT2JqLmNyZWF0ZVRpbWVySW5PdGhlclNlcnZlcgogICAgICAgICAgICAgICAgICAgICAoImJhciIsICJiYXJfdGltZXIxMiIsIDEwMDAsIDAsICJiYXJfdGltZXIxMiIpOwogICAgICAgICAgICAgICAgIHJlbW90ZU9iai5jcmVhdGVUaW1lckluT3RoZXJTZXJ2ZXIKICAgICAgICAgICAgICAgICAgICAgKCJiYXIiLCAiYmFyX3RpbWVyMTMiLCAxMDAwLCAxMDAwLCAiYmFyX3RpbWVyMTMiKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcWNGYWN0b3J5ID0gKFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkpCiAgICAgICAgICAgICAgICAgICAgICAgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2ptcy9NeVF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkiKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoIiBxY0ZhY3RvcnkgPSAiICsgcWNGYWN0b3J5KTsKQEAgLTE1Nyw3ICsxNTcsNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICgiIHF1ZXVlID0gIiArIHF1ZXVlKTsKIAogICAgICAgICAgICAgY29ubmVjdGlvbiA9IHFjRmFjdG9yeS5jcmVhdGVRdWV1ZUNvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgIFF1ZXVlU2Vzc2lvbiBzZXNzaW9uID0gCisgICAgICAgICAgICBRdWV1ZVNlc3Npb24gc2Vzc2lvbiA9CiAgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5jcmVhdGVRdWV1ZVNlc3Npb24oZmFsc2UsIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSk7CiAgICAgICAgICAgICBRdWV1ZVJlY2VpdmVyIHJlY2VpdmVyID0gc2Vzc2lvbi5jcmVhdGVSZWNlaXZlcihxdWV1ZSk7CiAgICAgICAgICAgICBjb25uZWN0aW9uLnN0YXJ0KCk7CkBAIC0xNjcsNyArMTY3LDcgQEAKICAgICAgICAgICAgIGlmKCBhZnRlclJlc3RhcnQgKSB7CiAgICAgICAgICAgICAgICAgdG9SZWNlaXZlLmFkZCgidGltZXIyIik7CiAgICAgICAgICAgICAgICAgdG9SZWNlaXZlLmFkZCgidGltZXI0Iik7Ci0gICAgICAgICAgICAgICAgdG9SZWNlaXZlLmFkZCgidGltZXI1Iik7ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB0b1JlY2VpdmUuYWRkKCJ0aW1lcjUiKTsKIAogICAgICAgICAgICAgICAgIC8vIG1pZ3JhdGVkIHRpbWVycwogICAgICAgICAgICAgICAgIHRvUmVjZWl2ZS5hZGQoIm90aGVyX3RpbWVyNyIpOwpAQCAtMTgxLDM3ICsxODEsMzcgQEAKICAgICAgICAgICAgICAgICB0b1JlY2VpdmUuYWRkKCJ0aW1lcjYiKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgbG9uZyB3YWl0VGltZSA9IGFmdGVyUmVzdGFydCA/IAorICAgICAgICAgICAgbG9uZyB3YWl0VGltZSA9IGFmdGVyUmVzdGFydCA/CiAgICAgICAgICAgICAgICAgNDAwMDAgOiAxMDAwMDsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgd2hpbGUodHJ1ZSkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2FpdGluZyBmb3IgbWVzc2FnZSIpOwogICAgICAgICAgICAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IHJlY2VpdmVyLnJlY2VpdmUod2FpdFRpbWUpOwogICAgICAgICAgICAgICAgIFRleHRNZXNzYWdlIHRleHRNc2cgPSAoVGV4dE1lc3NhZ2UpbWVzc2FnZTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoIChtZXNzYWdlID09IG51bGwpIHx8IAorCisgICAgICAgICAgICAgICAgaWYgKCAobWVzc2FnZSA9PSBudWxsKSB8fAogICAgICAgICAgICAgICAgICAgICAgKCEgdG9SZWNlaXZlLmNvbnRhaW5zKHRleHRNc2cuZ2V0VGV4dCgpKSkgKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlJlY2VpdmVkIGEgaW52YWxpZCBtZXNzYWdlICIgKyAKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiUmVjZWl2ZWQgYSBpbnZhbGlkIG1lc3NhZ2UgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArICIgVGltZU91dCBmYWlsZWQhISIpOwotICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgcmVjZWl2ZWQuYWRkKHRleHRNc2cuZ2V0VGV4dCgpKTsKIAotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVjZWl2ZWQgTWVzc2FnZSA6ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlY2VpdmVkIE1lc3NhZ2UgOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dE1zZy5nZXRUZXh0KCkpOwotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTWVzc2FnZXMgcmVjZWl2ZWQgc28gZmFyIDogIiArIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlZCk7ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTWVzc2FnZXMgcmVjZWl2ZWQgc28gZmFyIDogIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVkKTsKICAgICAgICAgICAgICAgICBpZiggcmVjZWl2ZWQuZXF1YWxzKHRvUmVjZWl2ZSkgKSB7CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IGFsbCBleHBlY3RlZCBtZXNzYWdlcyIpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoInNlc3Npb250aW1lciAiICsgdGVzdE5hbWUsIHN0YXQuUEFTUyk7CiAKICAgICAgICAgICAgIGlmKCBhZnRlclJlc3RhcnQgKSB7CiAgICAgICAgICAgICAgICAgcmVtb3RlT2JqLmRlbGV0ZVRpbWVycygpOwotICAgICAgICAgICAgfSAKKyAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaW1lclNlc3Npb24gOiAiICsgdGVzdE5hbWUgKyAiIHRlc3QgZmFpbGVkIik7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Jlc3RvcmUvZWpiL1RpbWVyU2Vzc2lvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Jlc3RvcmUvZWpiL1RpbWVyU2Vzc2lvbi5qYXZhCmluZGV4IGI2N2NlOTUuLjE2NWEyYWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9yZXN0b3JlL2VqYi9UaW1lclNlc3Npb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvcmVzdG9yZS9lamIvVGltZXJTZXNzaW9uLmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKIAogICAgIHB1YmxpYyB2b2lkIG1pZ3JhdGVUaW1lcnNGcm9tKFN0cmluZyBvd25lcikgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyB2b2lkIGNyZWF0ZVRpbWVySW5PdGhlclNlcnZlcihTdHJpbmcgb3duZXIsIFN0cmluZyB0aW1lcklkLCAKKyAgICBwdWJsaWMgdm9pZCBjcmVhdGVUaW1lckluT3RoZXJTZXJ2ZXIoU3RyaW5nIG93bmVyLCBTdHJpbmcgdGltZXJJZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbml0aWFsRXhwaXJhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnRlcnZhbER1cmF0aW9uLCBTdHJpbmcgaW5mbykKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9yZXN0b3JlL2VqYi9UaW1lclNlc3Npb25FSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9yZXN0b3JlL2VqYi9UaW1lclNlc3Npb25FSkIuamF2YQppbmRleCA5ZDRiMWM3Li4xYTg1NjEyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvcmVzdG9yZS9lamIvVGltZXJTZXNzaW9uRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Jlc3RvcmUvZWpiL1RpbWVyU2Vzc2lvbkVKQi5qYXZhCkBAIC0zOCwzNSArMzgsMzUgQEAKIAogaW1wb3J0IGNvbS5zdW4uZWpiLmNvbnRhaW5lcnMuVGltZXJCZWFuOwogCi1wdWJsaWMgY2xhc3MgVGltZXJTZXNzaW9uRUpCIGltcGxlbWVudHMgVGltZWRPYmplY3QsIFNlc3Npb25CZWFuIAorcHVibGljIGNsYXNzIFRpbWVyU2Vzc2lvbkVKQiBpbXBsZW1lbnRzIFRpbWVkT2JqZWN0LCBTZXNzaW9uQmVhbgogewogICAgIHByaXZhdGUgU2Vzc2lvbkNvbnRleHQgY29udGV4dDsKICAgICBwcml2YXRlIFF1ZXVlQ29ubmVjdGlvbiBjb25uZWN0aW9uOwogICAgIHByaXZhdGUgUXVldWVTZXNzaW9uIHNlc3Npb247CiAgICAgcHJpdmF0ZSBRdWV1ZSBxdWV1ZTsKICAgICBwcml2YXRlIFF1ZXVlU2VuZGVyIHNlbmRlcjsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24ge30KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24ge30KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7CiAgICAgICAgIGNvbnRleHQgPSBzYzsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8vIGJ1c2luZXNzIG1ldGhvZCB0byBjcmVhdGUgYSB0aW1lcgogICAgIHB1YmxpYyBUaW1lckhhbmRsZSBjcmVhdGVUaW1lcihsb25nIGluaXRpYWxEZWxheSwgbG9uZyBpbnRlcnZhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG1zZykgewotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYWxsaW5nIGdldE1lc3NhZ2VDb250ZXh0Iik7CiAgICAgICAgICAgICBjb250ZXh0LmdldE1lc3NhZ2VDb250ZXh0KCk7CiAgICAgICAgIH0gY2F0Y2goSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlzZSkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJnZXRNZXNzYWdlQ29udGV4dCgpIHN1Y2Nlc3NmdWxseSB0aHJldyBpbGxlZ2FsU3RhdGVFeGNlcHRpb24iKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgCisKKwogICAgICAgICBUaW1lclNlcnZpY2UgdGltZXJTZXJ2aWNlID0gY29udGV4dC5nZXRUaW1lclNlcnZpY2UoKTsKICAgICAgICAgVGltZXIgdGltZXI7CiAgICAgICAgIGlmKCBpbnRlcnZhbCA9PSAwICkgewpAQCAtNzcsMTUgKzc3LDE1IEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRpbWVyLmdldEhhbmRsZSgpOwogICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBjcmVhdGVUaW1lckluT3RoZXJTZXJ2ZXIoU3RyaW5nIG93bmVyLCBTdHJpbmcgdGltZXJJZCwgCisKKyAgICBwdWJsaWMgdm9pZCBjcmVhdGVUaW1lckluT3RoZXJTZXJ2ZXIoU3RyaW5nIG93bmVyLCBTdHJpbmcgdGltZXJJZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbml0aWFsRXhwaXJhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnRlcnZhbER1cmF0aW9uLCBTdHJpbmcgaW5mbykgewogCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBEYXRlIG5vdyA9IG5ldyBEYXRlKCk7Ci0gICAgICAgICAgICBUaW1lckJlYW4udGVzdENyZWF0ZSh0aW1lcklkLCBjb250ZXh0LCBvd25lciwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEYXRlKG5vdy5nZXRUaW1lKCkgKyBpbml0aWFsRXhwaXJhdGlvbiksIAorICAgICAgICAgICAgVGltZXJCZWFuLnRlc3RDcmVhdGUodGltZXJJZCwgY29udGV4dCwgb3duZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEYXRlKG5vdy5nZXRUaW1lKCkgKyBpbml0aWFsRXhwaXJhdGlvbiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnZhbER1cmF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewpAQCAtOTYsNyArOTYsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIG1pZ3JhdGVUaW1lcnNGcm9tKFN0cmluZyBvd25lcikgewotICAgICAgICAKKwogICAgICAgICBUaW1lckJlYW4udGVzdE1pZ3JhdGUob3duZXIpOwogCiAgICAgfQpAQCAtMTE0LDMxICsxMTQsMzEgQEAKIAogICAgIC8vIHRpbWVyIGNhbGxiYWNrIG1ldGhvZAogICAgIHB1YmxpYyB2b2lkIGVqYlRpbWVvdXQoVGltZXIgdGltZXIpIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIGluZm8gPSAoU3RyaW5nKSB0aW1lci5nZXRJbmZvKCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IGVqYlRpbWVvdXQgZm9yIHRpbWVyICIgKyBpbmZvKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbGluZyBnZXRNZXNzYWdlQ29udGV4dCIpOwogICAgICAgICAgICAgY29udGV4dC5nZXRNZXNzYWdlQ29udGV4dCgpOwogICAgICAgICB9IGNhdGNoKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpc2UpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZ2V0TWVzc2FnZUNvbnRleHQoKSBzdWNjZXNzZnVsbHkgdGhyZXcgaWxsZWdhbFN0YXRlRXhjZXB0aW9uIik7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIAorCisKICAgICAgICAgLy8gYWRkIG1lc3NhZ2UgdG8gcXVldWUKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgCisKKwogICAgICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcWNGYWN0b3J5ID0gKFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkpCiAgICAgICAgICAgICAgICAgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2ptcy9NeVF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkiKTsKICAgICAgICAgICAgIFF1ZXVlIHF1ZXVlID0gKFF1ZXVlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvam1zL015UXVldWUiKTsKICAgICAgICAgICAgIGNvbm5lY3Rpb24gPSBxY0ZhY3RvcnkuY3JlYXRlUXVldWVDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgUXVldWVTZXNzaW9uIHNlc3Npb24gPSBjb25uZWN0aW9uLmNyZWF0ZVF1ZXVlU2Vzc2lvbih0cnVlLCBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UpOwogICAgICAgICAgICAgc2VuZGVyICA9IHNlc3Npb24uY3JlYXRlU2VuZGVyKHF1ZXVlKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBUZXh0TWVzc2FnZSBtZXNzYWdlID0gc2Vzc2lvbi5jcmVhdGVUZXh0TWVzc2FnZSgpOwogICAgICAgICAgICAgbWVzc2FnZS5zZXRUZXh0KGluZm8pOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZW5kaW5nIHRpbWUgb3V0IG1lc3NhZ2UiKTsKQEAgLTE2MCw3ICsxNjAsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7fQogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHt9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9yZXN0b3JlL2VqYi9UaW1lclNlc3Npb25Ib21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvcmVzdG9yZS9lamIvVGltZXJTZXNzaW9uSG9tZS5qYXZhCmluZGV4IDFjMDRmNWQuLjUwNTNjZGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9yZXN0b3JlL2VqYi9UaW1lclNlc3Npb25Ib21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Jlc3RvcmUvZWpiL1RpbWVyU2Vzc2lvbkhvbWUuamF2YQpAQCAtMjEsNSArMjEsNSBAQAogaW1wb3J0IGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbjsKIAogcHVibGljIGludGVyZmFjZSBUaW1lclNlc3Npb25Ib21lIGV4dGVuZHMgRUpCSG9tZSB7Ci0JVGltZXJTZXNzaW9uIGNyZWF0ZSgpIHRocm93cyBDcmVhdGVFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICBUaW1lclNlc3Npb24gY3JlYXRlKCkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Nlc3Npb250aW1lci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Nlc3Npb250aW1lci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDI1YjE4YzcuLjkwZWUzMWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9zZXNzaW9udGltZXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvc2Vzc2lvbnRpbWVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIxICsxNSwyMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLXRpbWVyLXNlc3Npb250aW1lciIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Nlc3Npb250aW1lci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvc2Vzc2lvbnRpbWVyL2J1aWxkLnhtbAppbmRleCBkNTU3NzdlLi5lMjRhOWUyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvc2Vzc2lvbnRpbWVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvc2Vzc2lvbnRpbWVyL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTQgKzQ2LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9UaW1lclNpbmdsZXRvblJlbW90ZS5jbGFzcywqKi9UaW1lclNlc3Npb25Ib21lLmNsYXNzLCoqL1RpbWVyU2Vzc2lvbi5jbGFzcywqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02MSwxMCArNjEsMTAgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Nlc3Npb250aW1lci9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvc2Vzc2lvbnRpbWVyL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA3ZjUyNWRmLi4yNTM4NDdjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvc2Vzc2lvbnRpbWVyL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvc2Vzc2lvbnRpbWVyL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzUsOSArMzUsOSBAQAogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGtUZXN0Tm90UnVuICAgID0gIlRFU1QgTk9UIFJVTiI7CiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcga1Rlc3RQYXNzZWQgICAgPSAiVEVTVCBQQVNTRUQiOwogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGtUZXN0RmFpbGVkICAgID0gIlRFU1QgRkFJTEVEIjsKLSAgICAKLSAgICAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorCisKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIFN0cmluZyBqbmRpTmFtZSA9ICJlamIvZWpiX3RpbWVyX3Nlc3Npb250aW1lcl9UaW1lclNlc3Npb24iOwpAQCAtNjcsNDQgKzY3LDQ0IEBACiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tpbmcgdXAgZWpiIHJlZiAiICsgZWpiTmFtZSk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRvaW5nIHRpbWVyIHRlc3QgZm9yICIgKyBqbmRpTmFtZSk7CiAvL1BHLT4gICAgICAgICAgICBPYmplY3Qgb2JqcmVmID0gaWMubG9va3VwKGpuZGlOYW1lKTsKIAogCiAvLyAgICAgICAgICAgIGphdmEubGFuZy5PYmplY3Qgb2JqcmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52LyIgKyBlamJOYW1lKTsKLQkgICAgamF2YS5sYW5nLk9iamVjdCBvYmpyZWYgPSBpYy5sb29rdXAoImVqYi9lamJfdGltZXJfc2Vzc2lvbnRpbWVyX1RpbWVyU2Vzc2lvbiIpOworICAgICAgICBqYXZhLmxhbmcuT2JqZWN0IG9ianJlZiA9IGljLmxvb2t1cCgiZWpiL2VqYl90aW1lcl9zZXNzaW9udGltZXJfVGltZXJTZXNzaW9uIik7CiAKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tZWpiIHN0dWItLS0iICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLWVqYiBzdHViLS0tIiArCiAgICAgICAgICAgICAgICAgb2JqcmVmLmdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKSk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLWVqYiBjbGFzc25hbWUtLS0iICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLWVqYiBjbGFzc25hbWUtLS0iICsKICAgICAgICAgICAgICAgICBvYmpyZWYuZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS1UaW1lclNlc3Npb25Ib21lLS0tIiArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS1UaW1lclNlc3Npb25Ib21lLS0tIiArCiAgICAgICAgICAgICAgICAgVGltZXJTZXNzaW9uSG9tZS5jbGFzcy5nZXRDbGFzc0xvYWRlcigpKTsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTG9va2VkIHVwIGhvbWUhISIpOwogCi0JICAgIFRpbWVyU2luZ2xldG9uUmVtb3RlIHRzciA9IChUaW1lclNpbmdsZXRvblJlbW90ZSkKLQkJaWMubG9va3VwKCJlamIvZWpiX3RpbWVyX3Nlc3Npb250aW1lcl9UaW1lclNpbmdsZXRvbiIpOworICAgICAgICBUaW1lclNpbmdsZXRvblJlbW90ZSB0c3IgPSAoVGltZXJTaW5nbGV0b25SZW1vdGUpCisgICAgICAgIGljLmxvb2t1cCgiZWpiL2VqYl90aW1lcl9zZXNzaW9udGltZXJfVGltZXJTaW5nbGV0b24iKTsKICAgICAgICAgICAgIC8vIGNsZWFyIG91dCBzaW5nbGV0b24gc3RhdGUuICBUaGlzIGFsbG93cyBtdWx0aXBsZSB0ZXN0CiAgICAgICAgICAgICAvLyBydW5zIHdpdGhvdXQgaGF2aW5nIHRvIHJlZGVwbG95Ci0JICAgIHRzci5zdGFydFRlc3QoKTsKKyAgICAgICAgdHNyLnN0YXJ0VGVzdCgpOwogCiAgICAgICAgICAgICBUaW1lclNlc3Npb25Ib21lIGhvbWUgPSAoVGltZXJTZXNzaW9uSG9tZSkKICAgICAgICAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCBUaW1lclNlc3Npb25Ib21lLmNsYXNzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICByZW1vdGVPYmogPSBob21lLmNyZWF0ZSgpOwotCSAgICBpbnQgdGltZW91dEluU2Vjb25kcyA9IDU7CisgICAgICAgIGludCB0aW1lb3V0SW5TZWNvbmRzID0gNTsKICAgICAgICAgICAgIFRpbWVySGFuZGxlIGhhbmRsZSA9IHJlbW90ZU9iai5jcmVhdGVUaW1lcih0aW1lb3V0SW5TZWNvbmRzICogMTAwMCk7CiAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2FpdGluZyBmb3IgbWVzc2FnZSIpOwogCi0JICAgIGJvb2xlYW4gZ290VGltZW91dCA9IHRzci53YWl0Rm9yVGltZW91dCh0aW1lb3V0SW5TZWNvbmRzICogMik7CisgICAgICAgIGJvb2xlYW4gZ290VGltZW91dCA9IHRzci53YWl0Rm9yVGltZW91dCh0aW1lb3V0SW5TZWNvbmRzICogMik7CiAKLQkgICAgLy8gQEBACi0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRpbWVyU2Vzc2lvbiA6IGpuZGkgbG9va3VwIGZvciAtPiAiICsgCisgICAgICAgIC8vIEBAQAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaW1lclNlc3Npb24gOiBqbmRpIGxvb2t1cCBmb3IgLT4gIiArCiAgICAgICAgICAgICAgICAgam5kaU5hbWUgKyAiIDwtIHRlc3QgcGFzc2VkISEiKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygic2Vzc2lvbnRpbWVyICIgKyBqbmRpTmFtZSwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaW1lclNlc3Npb24gOiAiICsgam5kaU5hbWUgKyAiIHRlc3QgZmFpbGVkIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvc2Vzc2lvbnRpbWVyL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9zZXNzaW9udGltZXIvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sCmluZGV4IDlmY2IyYTMuLjU0YTRiZmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9zZXNzaW9udGltZXIvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9zZXNzaW9udGltZXIvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sCkBAIC0zMiw1ICszMiw1IEBACiAgICAgPHJlbW90ZT5jb20uc3VuLnMxYXNkZXYuZWpiLnRpbWVyLnNlc3Npb250aW1lci5UaW1lclNpbmdsZXRvblJlbW90ZTwvcmVtb3RlPgogICAgIDxlamItbGluaz5UaW1lclNpbmdsZXRvbjwvZWpiLWxpbms+CiAgIDwvZWpiLXJlZj4KLSAKKwogPC9hcHBsaWNhdGlvbi1jbGllbnQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvc2Vzc2lvbnRpbWVyL2VqYi9UaW1lclNlc3Npb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9zZXNzaW9udGltZXIvZWpiL1RpbWVyU2Vzc2lvbi5qYXZhCmluZGV4IDBlYTg2MzUuLmI4NzhlNDAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9zZXNzaW9udGltZXIvZWpiL1RpbWVyU2Vzc2lvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9zZXNzaW9udGltZXIvZWpiL1RpbWVyU2Vzc2lvbi5qYXZhCkBAIC0yMCw2ICsyMCw2IEBACiBpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogCiBwdWJsaWMgaW50ZXJmYWNlIFRpbWVyU2Vzc2lvbiBleHRlbmRzIEVKQk9iamVjdCB7Ci0JcHVibGljIFRpbWVySGFuZGxlIGNyZWF0ZVRpbWVyKGludCBtcykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICBwdWJsaWMgVGltZXJIYW5kbGUgY3JlYXRlVGltZXIoaW50IG1zKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvc2Vzc2lvbnRpbWVyL2VqYi9UaW1lclNlc3Npb25FSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9zZXNzaW9udGltZXIvZWpiL1RpbWVyU2Vzc2lvbkVKQi5qYXZhCmluZGV4IDMyNjJlY2IuLjZkMDVlZjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9zZXNzaW9udGltZXIvZWpiL1RpbWVyU2Vzc2lvbkVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9zZXNzaW9udGltZXIvZWpiL1RpbWVyU2Vzc2lvbkVKQi5qYXZhCkBAIC0yNiwyNiArMjYsMjYgQEAKIGltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgamF2YXgubmFtaW5nLio7CiAKLXB1YmxpYyBjbGFzcyBUaW1lclNlc3Npb25FSkIgaW1wbGVtZW50cyBUaW1lZE9iamVjdCwgU2Vzc2lvbkJlYW4gCitwdWJsaWMgY2xhc3MgVGltZXJTZXNzaW9uRUpCIGltcGxlbWVudHMgVGltZWRPYmplY3QsIFNlc3Npb25CZWFuCiB7Ci0JcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBjb250ZXh0OworICAgIHByaXZhdGUgU2Vzc2lvbkNvbnRleHQgY29udGV4dDsKICAgICBwcml2YXRlIFRpbWVyU2luZ2xldG9uIHNpbmdsZXRvbjsKIAotCXB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotCSAgICAKLQkgICAgc2luZ2xldG9uID0gKFRpbWVyU2luZ2xldG9uKSAKLQkJY29udGV4dC5sb29rdXAoImphdmE6bW9kdWxlL1RpbWVyU2luZ2xldG9uIWNvbS5zdW4uczFhc2Rldi5lamIudGltZXIuc2Vzc2lvbnRpbWVyLlRpbWVyU2luZ2xldG9uIik7CisgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CiAKLQl9CisgICAgICAgIHNpbmdsZXRvbiA9IChUaW1lclNpbmdsZXRvbikKKyAgICAgICAgY29udGV4dC5sb29rdXAoImphdmE6bW9kdWxlL1RpbWVyU2luZ2xldG9uIWNvbS5zdW4uczFhc2Rldi5lamIudGltZXIuc2Vzc2lvbnRpbWVyLlRpbWVyU2luZ2xldG9uIik7CiAKLQlwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHt9CisgICAgfQogCi0JcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgc2MpIHsKLQkJY29udGV4dCA9IHNjOwotCX0KKyAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHt9CiAKLQkvLyBidXNpbmVzcyBtZXRob2QgdG8gY3JlYXRlIGEgdGltZXIKLQlwdWJsaWMgVGltZXJIYW5kbGUgY3JlYXRlVGltZXIoaW50IG1zKSB7CisgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgc2MpIHsKKyAgICAgICAgY29udGV4dCA9IHNjOworICAgIH0KKworICAgIC8vIGJ1c2luZXNzIG1ldGhvZCB0byBjcmVhdGUgYSB0aW1lcgorICAgIHB1YmxpYyBUaW1lckhhbmRsZSBjcmVhdGVUaW1lcihpbnQgbXMpIHsKIAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxpbmcgZ2V0TWVzc2FnZUNvbnRleHQiKTsKQEAgLTU0LDEzICs1NCwxMyBAQAogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZ2V0TWVzc2FnZUNvbnRleHQoKSBzdWNjZXNzZnVsbHkgdGhyZXcgaWxsZWdhbFN0YXRlRXhjZXB0aW9uIik7CiAgICAgICAgICAgICB9CiAKLQkgICAgVGltZXJTZXJ2aWNlIHRpbWVyU2VydmljZSA9IGNvbnRleHQuZ2V0VGltZXJTZXJ2aWNlKCk7Ci0JICAgIFRpbWVyIHRpbWVyID0gdGltZXJTZXJ2aWNlLmNyZWF0ZVRpbWVyKG1zLCAiY3JlYXRlZCB0aW1lciIpOwotCSAgICByZXR1cm4gdGltZXIuZ2V0SGFuZGxlKCk7Ci0JfQorICAgICAgICBUaW1lclNlcnZpY2UgdGltZXJTZXJ2aWNlID0gY29udGV4dC5nZXRUaW1lclNlcnZpY2UoKTsKKyAgICAgICAgVGltZXIgdGltZXIgPSB0aW1lclNlcnZpY2UuY3JlYXRlVGltZXIobXMsICJjcmVhdGVkIHRpbWVyIik7CisgICAgICAgIHJldHVybiB0aW1lci5nZXRIYW5kbGUoKTsKKyAgICB9CiAKLQkvLyB0aW1lciBjYWxsYmFjayBtZXRob2QKLQlwdWJsaWMgdm9pZCBlamJUaW1lb3V0KFRpbWVyIHRpbWVyKSB7CisgICAgLy8gdGltZXIgY2FsbGJhY2sgbWV0aG9kCisgICAgcHVibGljIHZvaWQgZWpiVGltZW91dChUaW1lciB0aW1lcikgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxpbmcgZ2V0TWVzc2FnZUNvbnRleHQiKTsKICAgICAgICAgICAgICAgICBjb250ZXh0LmdldE1lc3NhZ2VDb250ZXh0KCk7CkBAIC02OCwxMCArNjgsMTAgQEAKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImdldE1lc3NhZ2VDb250ZXh0KCkgc3VjY2Vzc2Z1bGx5IHRocmV3IGlsbGVnYWxTdGF0ZUV4Y2VwdGlvbiIpOwogICAgICAgICAgICAgfQogCi0JICAgIHNpbmdsZXRvbi5zZXRUaW1lb3V0UmVjZWl2ZWQoKTsKKyAgICAgICAgc2luZ2xldG9uLnNldFRpbWVvdXRSZWNlaXZlZCgpOwogCi0JfQorICAgIH0KIAotCXB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkge30KLQlwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7fQorICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkge30KKyAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7fQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Nlc3Npb250aW1lci9lamIvVGltZXJTZXNzaW9uSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Nlc3Npb250aW1lci9lamIvVGltZXJTZXNzaW9uSG9tZS5qYXZhCmluZGV4IDE0MTEzYjMuLjg5NDMxNDAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9zZXNzaW9udGltZXIvZWpiL1RpbWVyU2Vzc2lvbkhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvc2Vzc2lvbnRpbWVyL2VqYi9UaW1lclNlc3Npb25Ib21lLmphdmEKQEAgLTIxLDUgKzIxLDUgQEAKIGltcG9ydCBqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb247CiAKIHB1YmxpYyBpbnRlcmZhY2UgVGltZXJTZXNzaW9uSG9tZSBleHRlbmRzIEVKQkhvbWUgewotCVRpbWVyU2Vzc2lvbiBjcmVhdGUoKSB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CisgICAgVGltZXJTZXNzaW9uIGNyZWF0ZSgpIHRocm93cyBDcmVhdGVFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9zZXNzaW9udGltZXIvZWpiL1RpbWVyU2luZ2xldG9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvc2Vzc2lvbnRpbWVyL2VqYi9UaW1lclNpbmdsZXRvbi5qYXZhCmluZGV4IGIyZTVkMTYuLmI5YjNlNmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9zZXNzaW9udGltZXIvZWpiL1RpbWVyU2luZ2xldG9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Nlc3Npb250aW1lci9lamIvVGltZXJTaW5nbGV0b24uamF2YQpAQCAtMjUsMzUgKzI1LDM1IEBACiBATG9jayhMb2NrVHlwZS5SRUFEKQogcHVibGljIGNsYXNzIFRpbWVyU2luZ2xldG9uCiB7Ci0gICAgCisKICAgICBib29sZWFuIHRpbWVvdXRSZWNlaXZlZCA9IGZhbHNlOwogCiAgICAgcHVibGljIHZvaWQgc3RhcnRUZXN0KCkgewotCXRpbWVvdXRSZWNlaXZlZCA9IGZhbHNlOworICAgIHRpbWVvdXRSZWNlaXZlZCA9IGZhbHNlOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldFRpbWVvdXRSZWNlaXZlZCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlRpbWVyU2luZ2xldG9uOjpzZXRUaW1lb3V0UmVjZWl2ZWQoKSIpOwotCXRpbWVvdXRSZWNlaXZlZCA9IHRydWU7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaW1lclNpbmdsZXRvbjo6c2V0VGltZW91dFJlY2VpdmVkKCkiKTsKKyAgICB0aW1lb3V0UmVjZWl2ZWQgPSB0cnVlOwogICAgIH0KIAogICAgICBwdWJsaWMgYm9vbGVhbiB3YWl0Rm9yVGltZW91dChpbnQgc2Vjb25kcykgewotCSBpbnQgaSA9IDA7Ci0JIHdoaWxlKGkgPCBzZWNvbmRzKSB7Ci0JICAgICBpKys7Ci0JICAgICB0cnkgewotCQkgVGhyZWFkLnNsZWVwKDEwMDApOwotCQkgaWYoIHRpbWVvdXRSZWNlaXZlZCApIHsKLQkJICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCB0aW1lb3V0IGFmdGVyICIgKwotCQkJCQlpICsgIiBzZWNvbmRzIik7Ci0JCSAgICAgYnJlYWs7Ci0JCSB9Ci0JICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JCSBlLnByaW50U3RhY2tUcmFjZSgpOwotCQkgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlKTsKLQkgICAgIH0KLQkgfQotCXJldHVybiB0aW1lb3V0UmVjZWl2ZWQ7CisgICAgIGludCBpID0gMDsKKyAgICAgd2hpbGUoaSA8IHNlY29uZHMpIHsKKyAgICAgICAgIGkrKzsKKyAgICAgICAgIHRyeSB7CisgICAgICAgICBUaHJlYWQuc2xlZXAoMTAwMCk7CisgICAgICAgICBpZiggdGltZW91dFJlY2VpdmVkICkgeworICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IHRpbWVvdXQgYWZ0ZXIgIiArCisgICAgICAgICAgICAgICAgICAgIGkgKyAiIHNlY29uZHMiKTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKyAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGUpOworICAgICAgICAgfQorICAgICB9CisgICAgcmV0dXJuIHRpbWVvdXRSZWNlaXZlZDsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9zZXNzaW9udGltZXIvZWpiL1RpbWVyU2luZ2xldG9uUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvc2Vzc2lvbnRpbWVyL2VqYi9UaW1lclNpbmdsZXRvblJlbW90ZS5qYXZhCmluZGV4IDQ1OTRkZGEuLmU0Njc4MDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9zZXNzaW9udGltZXIvZWpiL1RpbWVyU2luZ2xldG9uUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Nlc3Npb250aW1lci9lamIvVGltZXJTaW5nbGV0b25SZW1vdGUuamF2YQpAQCAtMjIsNyArMjIsNyBAQAogcHVibGljIGludGVyZmFjZSBUaW1lclNpbmdsZXRvblJlbW90ZSB7CiAKICAgICBwdWJsaWMgdm9pZCBzdGFydFRlc3QoKTsKLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIHdhaXRGb3JUaW1lb3V0KGludCBzZWNvbmRzKTsKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Nlc3Npb250aW1lclNlY3VyaXR5L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvc2Vzc2lvbnRpbWVyU2VjdXJpdHkvYnVpbGQucHJvcGVydGllcwppbmRleCA3ZmVlYjQ5Li40YzYwMzQ4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvc2Vzc2lvbnRpbWVyU2VjdXJpdHkvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvc2Vzc2lvbnRpbWVyU2VjdXJpdHkvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItdGltZXItc2Vzc2lvbnRpbWVyc2VjdXJpdHkiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9zZXNzaW9udGltZXJTZWN1cml0eS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvc2Vzc2lvbnRpbWVyU2VjdXJpdHkvYnVpbGQueG1sCmluZGV4IGFlZjU5YjIuLjkwZGExMmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9zZXNzaW9udGltZXJTZWN1cml0eS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Nlc3Npb250aW1lclNlY3VyaXR5L2J1aWxkLnhtbApAQCAtMzgsNyArMzgsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNTAsMTQgKzUwLDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Nyw3ICs2Nyw3IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImNyZWF0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uLGRlbGV0ZS11c2VyIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtODQsMTAgKzg0LDEwIEBACiAgICAgICAgIDxlbnYga2V5PSJWTUFSR1MiIHZhbHVlPSItRGoyZWVsb2dpbi5uYW1lPXByaW5jaXBhbE5hbWUgLURqMmVlbG9naW4ucGFzc3dvcmQ9cHJpbmNpcGFsTmFtZSIgLz4KICAgICAgIDwvZXhlYz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLXVzZXIiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS11c2VyLWNvbW1vbiI+CkBAIC05NywxNCArOTcsMTQgQEAKICAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlY29uZmlnLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXVzZXIiPgogICAgICAgPCEtLSByZW1vdmUgdGVzdCB1c2VycywganVzdCBjbGVhbnVwLiAtLT4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLXVzZXItY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InVzZXIiIHZhbHVlPSJwcmluY2lwYWxOYW1lIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0YXJ0Ij4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXItaW5zdGFuY2UtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC0xMTQsNyArMTE0LDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9zZXNzaW9udGltZXJTZWN1cml0eS9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvc2Vzc2lvbnRpbWVyU2VjdXJpdHkvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDllZGNkZjAuLjJjOTNmMzQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9zZXNzaW9udGltZXJTZWN1cml0eS9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Nlc3Npb250aW1lclNlY3VyaXR5L2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjksOSArMjksOSBAQAogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGtUZXN0Tm90UnVuICAgID0gIlRFU1QgTk9UIFJVTiI7CiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcga1Rlc3RQYXNzZWQgICAgPSAiVEVTVCBQQVNTRUQiOwogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGtUZXN0RmFpbGVkICAgID0gIlRFU1QgRkFJTEVEIjsKLSAgICAKLSAgICAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorCisKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIFN0cmluZyBqbmRpTmFtZSA9ICJlamIvZWpiX3RpbWVyX3Nlc3Npb250aW1lcnNlY3VyaXR5X1RpbWVyU2Vzc2lvbiI7CkBAIC01NSwyNCArNTUsMjQgQEAKIAogICAgIHB1YmxpYyBTdHJpbmcgZG9UZXN0KCkgewogICAgICAgICBTdHJpbmcgcmVzdWx0ID0ga1Rlc3RQYXNzZWQ7Ci0gICAgICAgIFF1ZXVlQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gbnVsbDsgCisgICAgICAgIFF1ZXVlQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gbnVsbDsKICAgICAgICAgVGltZXJTZXNzaW9uIHJlbW90ZU9iaiA9IG51bGw7CiAKICAgICAgICAgU3RyaW5nIGVqYk5hbWUgPSAiZWpicy9UaW1lciI7CiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tpbmcgdXAgZWpiIHJlZiAiICsgZWpiTmFtZSk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRvaW5nIHRpbWVyIHRlc3QgZm9yICIgKyBqbmRpTmFtZSk7CiAKICAgICAgICAgICAgIGphdmEubGFuZy5PYmplY3Qgb2JqcmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52LyIgKyBlamJOYW1lKTsKIAotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS1lamIgc3R1Yi0tLSIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tZWpiIHN0dWItLS0iICsKICAgICAgICAgICAgICAgICBvYmpyZWYuZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tZWpiIGNsYXNzbmFtZS0tLSIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tZWpiIGNsYXNzbmFtZS0tLSIgKwogICAgICAgICAgICAgICAgIG9ianJlZi5nZXRDbGFzcygpLmdldE5hbWUoKSk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLVRpbWVyU2Vzc2lvbkhvbWUtLS0iICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLVRpbWVyU2Vzc2lvbkhvbWUtLS0iICsKICAgICAgICAgICAgICAgICBUaW1lclNlc3Npb25Ib21lLmNsYXNzLmdldENsYXNzTG9hZGVyKCkpOwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJMb29rZWQgdXAgaG9tZSEhIik7CiAKQEAgLTgwLDExICs4MCwxMSBAQAogCiAgICAgICAgICAgICBUaW1lclNlc3Npb25Ib21lIGhvbWUgPSAoVGltZXJTZXNzaW9uSG9tZSkKICAgICAgICAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCBUaW1lclNlc3Npb25Ib21lLmNsYXNzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICByZW1vdGVPYmogPSBob21lLmNyZWF0ZSgpOwotICAgICAgICAgICAgcmVtb3RlT2JqLmR1bW15QnVzaW5lc3NNZXRob2QoKTsgCisgICAgICAgICAgICByZW1vdGVPYmouZHVtbXlCdXNpbmVzc01ldGhvZCgpOwogICAgICAgICAgICAgVGltZXJIYW5kbGUgaGFuZGxlID0gcmVtb3RlT2JqLmNyZWF0ZVRpbWVyKDUwMDApOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcWNGYWN0b3J5ID0gKFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkpCiAgICAgICAgICAgICAgICAgICAgICAgaWMubG9va3VwKCJqbXMvZWpiX3RpbWVyX3Nlc3Npb250aW1lcnNlY3VyaXR5X1RRQ0YiKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoIiBxY0ZhY3RvcnkgPSAiICsgcWNGYWN0b3J5KTsKQEAgLTkzLDcgKzkzLDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoIiBxdWV1ZSA9ICIgKyBxdWV1ZSk7CiAKICAgICAgICAgICAgIGNvbm5lY3Rpb24gPSBxY0ZhY3RvcnkuY3JlYXRlUXVldWVDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICBRdWV1ZVNlc3Npb24gc2Vzc2lvbiA9IAorICAgICAgICAgICAgUXVldWVTZXNzaW9uIHNlc3Npb24gPQogICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uY3JlYXRlUXVldWVTZXNzaW9uKGZhbHNlLCBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UpOwogICAgICAgICAgICAgUXVldWVSZWNlaXZlciByZWNlaXZlciA9IHNlc3Npb24uY3JlYXRlUmVjZWl2ZXIocXVldWUpOwogICAgICAgICAgICAgY29ubmVjdGlvbi5zdGFydCgpOwpAQCAtMTAxLDE0ICsxMDEsMTQgQEAKICAgICAgICAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IHJlY2VpdmVyLnJlY2VpdmUoNDUwMDApOwogICAgICAgICAgICAgVGV4dE1lc3NhZ2UgdGV4dE1zZyA9IChUZXh0TWVzc2FnZSltZXNzYWdlOwogCi0JICAgIAlpZiAoIChtZXNzYWdlID09IG51bGwpIHx8IAorICAgICAgICAgICAgaWYgKCAobWVzc2FnZSA9PSBudWxsKSB8fAogICAgICAgICAgICAgICAgICAoISB0ZXh0TXNnLmdldFRleHQoKS5lcXVhbHMoImVqYlRpbWVvdXQoKSBpbnZva2VkIikpKQotCQkJCXRocm93IG5ldyBFeGNlcHRpb24oIlJlY2VpdmVkIGEgbnVsbCBtZXNzYWdlIC4uLiBUaW1lT3V0IGZhaWxlZCEhIik7Ci0JICAgIAlTeXN0ZW0ub3V0LnByaW50bG4oIk1lc3NhZ2UgOiAiICsgbWVzc2FnZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGltZXJTZXNzaW9uIDogam5kaSBsb29rdXAgZm9yIC0+ICIgKyAKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJSZWNlaXZlZCBhIG51bGwgbWVzc2FnZSAuLi4gVGltZU91dCBmYWlsZWQhISIpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNZXNzYWdlIDogIiArIG1lc3NhZ2UpOworCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRpbWVyU2Vzc2lvbiA6IGpuZGkgbG9va3VwIGZvciAtPiAiICsKICAgICAgICAgICAgICAgICBqbmRpTmFtZSArICIgPC0gdGVzdCBwYXNzZWQhISIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJzZXNzaW9udGltZXJzZWN1cml0eSAiICsgam5kaU5hbWUsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGltZXJTZXNzaW9uIDogIiArIGpuZGlOYW1lICsgIiB0ZXN0IGZhaWxlZCIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Nlc3Npb250aW1lclNlY3VyaXR5L2VqYi9UaW1lclNlc3Npb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9zZXNzaW9udGltZXJTZWN1cml0eS9lamIvVGltZXJTZXNzaW9uLmphdmEKaW5kZXggYWNmYzIxYS4uOTVjNDhmNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Nlc3Npb250aW1lclNlY3VyaXR5L2VqYi9UaW1lclNlc3Npb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvc2Vzc2lvbnRpbWVyU2VjdXJpdHkvZWpiL1RpbWVyU2Vzc2lvbi5qYXZhCkBAIC0yMCw4ICsyMCw4IEBACiBpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogCiBwdWJsaWMgaW50ZXJmYWNlIFRpbWVyU2Vzc2lvbiBleHRlbmRzIEVKQk9iamVjdCB7Ci0JcHVibGljIFRpbWVySGFuZGxlIGNyZWF0ZVRpbWVyKGludCBtcykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICBwdWJsaWMgVGltZXJIYW5kbGUgY3JlYXRlVGltZXIoaW50IG1zKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0JcHVibGljIHZvaWQgZHVtbXlCdXNpbmVzc01ldGhvZCgpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgcHVibGljIHZvaWQgZHVtbXlCdXNpbmVzc01ldGhvZCgpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9zZXNzaW9udGltZXJTZWN1cml0eS9lamIvVGltZXJTZXNzaW9uRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvc2Vzc2lvbnRpbWVyU2VjdXJpdHkvZWpiL1RpbWVyU2Vzc2lvbkVKQi5qYXZhCmluZGV4IGUyMDVlY2MuLmNiMWY5NzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9zZXNzaW9udGltZXJTZWN1cml0eS9lamIvVGltZXJTZXNzaW9uRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3Nlc3Npb250aW1lclNlY3VyaXR5L2VqYi9UaW1lclNlc3Npb25FSkIuamF2YQpAQCAtMzMsNDIgKzMzLDQyIEBACiBpbXBvcnQgamFrYXJ0YS5qbXMuVGV4dE1lc3NhZ2U7CiBpbXBvcnQgamF2YXgubmFtaW5nLio7CiAKLXB1YmxpYyBjbGFzcyBUaW1lclNlc3Npb25FSkIgaW1wbGVtZW50cyBUaW1lZE9iamVjdCwgU2Vzc2lvbkJlYW4gCitwdWJsaWMgY2xhc3MgVGltZXJTZXNzaW9uRUpCIGltcGxlbWVudHMgVGltZWRPYmplY3QsIFNlc3Npb25CZWFuCiB7Ci0JcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBjb250ZXh0OwotCXByaXZhdGUgUXVldWVDb25uZWN0aW9uIGNvbm5lY3Rpb247Ci0JcHJpdmF0ZSBRdWV1ZVNlc3Npb24gc2Vzc2lvbjsKLQlwcml2YXRlIFF1ZXVlIHF1ZXVlOwotCXByaXZhdGUgUXVldWVTZW5kZXIgc2VuZGVyOworICAgIHByaXZhdGUgU2Vzc2lvbkNvbnRleHQgY29udGV4dDsKKyAgICBwcml2YXRlIFF1ZXVlQ29ubmVjdGlvbiBjb25uZWN0aW9uOworICAgIHByaXZhdGUgUXVldWVTZXNzaW9uIHNlc3Npb247CisgICAgcHJpdmF0ZSBRdWV1ZSBxdWV1ZTsKKyAgICBwcml2YXRlIFF1ZXVlU2VuZGVyIHNlbmRlcjsKIAotCXB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24ge30KKyAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHt9CiAKLQlwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHt9CisgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7fQogCi0JcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgc2MpIHsKLQkJY29udGV4dCA9IHNjOwotCX0KKyAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgeworICAgICAgICBjb250ZXh0ID0gc2M7CisgICAgfQogCi0JLy8gYnVzaW5lc3MgbWV0aG9kIHRvIGNyZWF0ZSBhIHRpbWVyCisgICAgLy8gYnVzaW5lc3MgbWV0aG9kIHRvIGNyZWF0ZSBhIHRpbWVyCiAgICAgcHVibGljIHZvaWQgZHVtbXlCdXNpbmVzc01ldGhvZCgpIHsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZHVtbXlCdXNpbmVzc01ldGhvZCgpOiBnZXRDYWxsZXJQcmluY2lwYWwoKSA9ICIgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImR1bW15QnVzaW5lc3NNZXRob2QoKTogZ2V0Q2FsbGVyUHJpbmNpcGFsKCkgPSAiCiAgICAgICAgICAgICAgICAgKyBjb250ZXh0LmdldENhbGxlclByaW5jaXBhbCgpKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZHVtbXlCdXNpbmVzc01ldGhvZCgpOiBpc0NhbGxlckluUm9sZShmb28pID0gIiAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZHVtbXlCdXNpbmVzc01ldGhvZCgpOiBpc0NhbGxlckluUm9sZShmb28pID0gIgogICAgICAgICAgICAgICAgICsgY29udGV4dC5pc0NhbGxlckluUm9sZSgiZm9vIikpOwogICAgICAgICB9IGNhdGNoKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpc2UpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigKLSAgICAgICAgICAgICAgICAiZHVtbXlCdXNpbmVzc01ldGhvZCgpOiBpc0NhbGxlckluUm9sZSBzaG91bGQgbm90IHRocm93ICIgCisgICAgICAgICAgICAgICAgImR1bW15QnVzaW5lc3NNZXRob2QoKTogaXNDYWxsZXJJblJvbGUgc2hvdWxkIG5vdCB0aHJvdyAiCiAgICAgICAgICAgICAgICAgKyAiaWxsZWdhbHN0YXRlZXhjZXB0aW9uIGluIGJ1c2luZXNzIG1ldGhvZCIpOwogICAgICAgICAgICAgdGhyb3cgaXNlOwogICAgICAgICB9CiAgICAgfQogCi0JcHVibGljIFRpbWVySGFuZGxlIGNyZWF0ZVRpbWVyKGludCBtcykgeworICAgIHB1YmxpYyBUaW1lckhhbmRsZSBjcmVhdGVUaW1lcihpbnQgbXMpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbGluZyBjcmVhdGVUaW1lciIpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjcmVhdGVUaW1lcigpOiBnZXRDYWxsZXJQcmluY2lwYWwoKSA9ICIgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNyZWF0ZVRpbWVyKCk6IGdldENhbGxlclByaW5jaXBhbCgpID0gIgogICAgICAgICAgICAgICAgICsgY29udGV4dC5nZXRDYWxsZXJQcmluY2lwYWwoKSk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNyZWF0ZVRpbWVyKCk6IGlzQ2FsbGVySW5Sb2xlKGZvbykgPSAiIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjcmVhdGVUaW1lcigpOiBpc0NhbGxlckluUm9sZShmb28pID0gIgogICAgICAgICAgICAgICAgICsgY29udGV4dC5pc0NhbGxlckluUm9sZSgiZm9vIikpOwogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxpbmcgaXNDYWxsZXJJblJvbGUiKTsKQEAgLTc4LDcgKzc4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiaXNDYWxsZXJJblJvbGUoKSBzaG91bGQgbm90IGZhaWwgaW4gYSBidXNpbmVzcyBtZXRob2QiKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGNhdGNoKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpc2UpIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlzQ2FsbGVySW5Sb2xlIHNob3VsZCBub3QgdGhyb3cgIiAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImlzQ2FsbGVySW5Sb2xlIHNob3VsZCBub3QgdGhyb3cgIgogICAgICAgICAgICAgICAgICAgICArICJpbGxlZ2Fsc3RhdGVleGNlcHRpb24gaW4gYnVzaW5lc3MgbWV0aG9kIik7CiAgICAgICAgICAgICAgICAgdGhyb3cgaXNlOwogICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gaXNlKSB7CkBAIC05MywyMiArOTMsMjIgQEAKICAgICAgICAgICAgIH0KIAogCi0JCVRpbWVyU2VydmljZSB0aW1lclNlcnZpY2UgPSBjb250ZXh0LmdldFRpbWVyU2VydmljZSgpOwotCQlUaW1lciB0aW1lciA9IHRpbWVyU2VydmljZS5jcmVhdGVUaW1lcihtcywgImNyZWF0ZWQgdGltZXIiKTsKLQkJcmV0dXJuIHRpbWVyLmdldEhhbmRsZSgpOwotCX0KKyAgICAgICAgVGltZXJTZXJ2aWNlIHRpbWVyU2VydmljZSA9IGNvbnRleHQuZ2V0VGltZXJTZXJ2aWNlKCk7CisgICAgICAgIFRpbWVyIHRpbWVyID0gdGltZXJTZXJ2aWNlLmNyZWF0ZVRpbWVyKG1zLCAiY3JlYXRlZCB0aW1lciIpOworICAgICAgICByZXR1cm4gdGltZXIuZ2V0SGFuZGxlKCk7CisgICAgfQogCi0JLy8gdGltZXIgY2FsbGJhY2sgbWV0aG9kCi0JcHVibGljIHZvaWQgZWpiVGltZW91dChUaW1lciB0aW1lcikgeworICAgIC8vIHRpbWVyIGNhbGxiYWNrIG1ldGhvZAorICAgIHB1YmxpYyB2b2lkIGVqYlRpbWVvdXQoVGltZXIgdGltZXIpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbGluZyBlamJUaW1lb3V0Iik7CiAgICAgICAgICAgICBqYXZhLnNlY3VyaXR5LlByaW5jaXBhbCBwcmluY2lwYWwgPSBjb250ZXh0LmdldENhbGxlclByaW5jaXBhbCgpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBlamJUaW1lb3V0KCk6IGdldENhbGxlclByaW5jaXBhbCgpLCBwcmluY2lwYWwgLSAiIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBlamJUaW1lb3V0KCk6IGdldENhbGxlclByaW5jaXBhbCgpLCBwcmluY2lwYWwgLSAiCiAgICAgICAgICAgICAgICAgKyBwcmluY2lwYWwpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBlamJUaW1lb3V0KCk6IGlzQ2FsbGVySW5Sb2xlKGZvbyksIHJlc3VsdCAtICIgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIGVqYlRpbWVvdXQoKTogaXNDYWxsZXJJblJvbGUoZm9vKSwgcmVzdWx0IC0gIgogICAgICAgICAgICAgICAgICsgY29udGV4dC5pc0NhbGxlckluUm9sZSgiZm9vIikpOwogICAgICAgICB9IGNhdGNoKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpc2UpIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZWpiVGltZW91dCgpOiBnZXRDYWxsZXJQcmluY2lwYWwoKSBmYWlsZWQgYnkgIiAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZWpiVGltZW91dCgpOiBnZXRDYWxsZXJQcmluY2lwYWwoKSBmYWlsZWQgYnkgIgogICAgICAgICAgICAgICAgICsgInRocm93aW5nIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiIpOwogICAgICAgICB9CiAgICAgICAgIHRyeSB7CkBAIC0xMTksNyArMTE5LDcgQEAKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImVqYlRpbWVvdXQoKTogaXNDYWxsZXJJblJvbGUoKSBmYWlsZWQiICk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2goSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlzZSkgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJlamJUaW1lb3V0KCk6IGlzQ2FsbGVySW5Sb2xlKCkgZmFpbGVkIGJ5ICIgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImVqYlRpbWVvdXQoKTogaXNDYWxsZXJJblJvbGUoKSBmYWlsZWQgYnkgIgogICAgICAgICAgICAgICAgICsgInRocm93aW5nIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiIpOwogICAgICAgICB9CiAKQEAgLTEyNyw0NiArMTI3LDQ2IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxpbmcgZ2V0TWVzc2FnZUNvbnRleHQiKTsKICAgICAgICAgICAgIGNvbnRleHQuZ2V0TWVzc2FnZUNvbnRleHQoKTsKICAgICAgICAgfSBjYXRjaChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gaXNlKSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImVqYlRpbWVvdXQoKTogZ2V0TWVzc2FnZUNvbnRleHQoKSBzdWNjZXNzZnVsbHkgIiAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZWpiVGltZW91dCgpOiBnZXRNZXNzYWdlQ29udGV4dCgpIHN1Y2Nlc3NmdWxseSAiCiAgICAgICAgICAgICAgICAgKyAidGhyZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIik7CiAgICAgICAgIH0KIAogCi0JCS8vIGFkZCBtZXNzYWdlIHRvIHF1ZXVlCi0JCXRyeSB7CisgICAgICAgIC8vIGFkZCBtZXNzYWdlIHRvIHF1ZXVlCisgICAgICAgIHRyeSB7CiAKIAotCQkJSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkJCVF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcWNGYWN0b3J5ID0gKFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkpCi0JCQkJaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2ptcy9NeVF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkiKTsKLQkJCVF1ZXVlIHF1ZXVlID0gKFF1ZXVlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvam1zL015UXVldWUiKTsKLQkJCWNvbm5lY3Rpb24gPSBxY0ZhY3RvcnkuY3JlYXRlUXVldWVDb25uZWN0aW9uKCk7CisgICAgICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgICAgICAgICAgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxY0ZhY3RvcnkgPSAoUXVldWVDb25uZWN0aW9uRmFjdG9yeSkKKyAgICAgICAgICAgICAgICBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvam1zL015UXVldWVDb25uZWN0aW9uRmFjdG9yeSIpOworICAgICAgICAgICAgUXVldWUgcXVldWUgPSAoUXVldWUpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9qbXMvTXlRdWV1ZSIpOworICAgICAgICAgICAgY29ubmVjdGlvbiA9IHFjRmFjdG9yeS5jcmVhdGVRdWV1ZUNvbm5lY3Rpb24oKTsKIAotCQkJUXVldWVTZXNzaW9uIHNlc3Npb24gPSBjb25uZWN0aW9uLmNyZWF0ZVF1ZXVlU2Vzc2lvbih0cnVlLCBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UpOwotCQkJc2VuZGVyICA9IHNlc3Npb24uY3JlYXRlU2VuZGVyKHF1ZXVlKTsKKyAgICAgICAgICAgIFF1ZXVlU2Vzc2lvbiBzZXNzaW9uID0gY29ubmVjdGlvbi5jcmVhdGVRdWV1ZVNlc3Npb24odHJ1ZSwgU2Vzc2lvbi5BVVRPX0FDS05PV0xFREdFKTsKKyAgICAgICAgICAgIHNlbmRlciAgPSBzZXNzaW9uLmNyZWF0ZVNlbmRlcihxdWV1ZSk7CiAKLQkJCVRleHRNZXNzYWdlIG1lc3NhZ2UgPSBzZXNzaW9uLmNyZWF0ZVRleHRNZXNzYWdlKCk7Ci0JCQltZXNzYWdlLnNldFRleHQoImVqYlRpbWVvdXQoKSBpbnZva2VkIik7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlNlbmRpbmcgdGltZSBvdXQgbWVzc2FnZSIpOwotCQkJc2VuZGVyLnNlbmQobWVzc2FnZSk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRpbWUgb3V0IG1lc3NhZ2Ugc2VudCIpOwotCQl9IGNhdGNoKE5hbWluZ0V4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9IGNhdGNoKEpNU0V4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJdHJ5IHsKLQkJCQlpZihjb25uZWN0aW9uICE9IG51bGwpIHsKLQkJCQkJY29ubmVjdGlvbi5jbG9zZSgpOworICAgICAgICAgICAgVGV4dE1lc3NhZ2UgbWVzc2FnZSA9IHNlc3Npb24uY3JlYXRlVGV4dE1lc3NhZ2UoKTsKKyAgICAgICAgICAgIG1lc3NhZ2Uuc2V0VGV4dCgiZWpiVGltZW91dCgpIGludm9rZWQiKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VuZGluZyB0aW1lIG91dCBtZXNzYWdlIik7CisgICAgICAgICAgICBzZW5kZXIuc2VuZChtZXNzYWdlKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGltZSBvdXQgbWVzc2FnZSBzZW50Iik7CisgICAgICAgIH0gY2F0Y2goTmFtaW5nRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0gY2F0Y2goSk1TRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KKyAgICAgICAgZmluYWxseSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGlmKGNvbm5lY3Rpb24gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gPSBudWxsOwotCQkJCX0KLQkJCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQl9Ci0JfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQogCi0JcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7fQotCXB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHt9CisgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7fQorICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHt9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvc2Vzc2lvbnRpbWVyU2VjdXJpdHkvZWpiL1RpbWVyU2Vzc2lvbkhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9zZXNzaW9udGltZXJTZWN1cml0eS9lamIvVGltZXJTZXNzaW9uSG9tZS5qYXZhCmluZGV4IGM1ZGRmZjMuLjk1MjMwOTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9zZXNzaW9udGltZXJTZWN1cml0eS9lamIvVGltZXJTZXNzaW9uSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci9zZXNzaW9udGltZXJTZWN1cml0eS9lamIvVGltZXJTZXNzaW9uSG9tZS5qYXZhCkBAIC0yMSw1ICsyMSw1IEBACiBpbXBvcnQgamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uOwogCiBwdWJsaWMgaW50ZXJmYWNlIFRpbWVyU2Vzc2lvbkhvbWUgZXh0ZW5kcyBFSkJIb21lIHsKLQlUaW1lclNlc3Npb24gY3JlYXRlKCkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOworICAgIFRpbWVyU2Vzc2lvbiBjcmVhdGUoKSB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJzZXJpYWxpemF0aW9uL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJzZXJpYWxpemF0aW9uL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZTAwYjI0Ni4uODA5YmI2MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVyc2VyaWFsaXphdGlvbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnNlcmlhbGl6YXRpb24vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItdGltZXItdGltZXJzZXJpYWxpemF0aW9uLXNlc3Npb250aW1lciIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVyc2VyaWFsaXphdGlvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJzZXJpYWxpemF0aW9uL2J1aWxkLnhtbAppbmRleCA3YjAxNTkyLi40Zjg3NTY5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJzZXJpYWxpemF0aW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJzZXJpYWxpemF0aW9uL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsMTQgKzQ4LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50Ki5jbGFzcywgKiovKlNGU0IqLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTY3LDcgKzY3LDcgQEAKICAgICAgICAgPC9hbnRjYWxsPgogICAgIC0tPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPCEtLQogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KQEAgLTc5LDE0ICs3OSwxNCBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVyc2VyaWFsaXphdGlvbi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJzZXJpYWxpemF0aW9uL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBlMGMxODNkLi45YTk5MWQ0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJzZXJpYWxpemF0aW9uL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJzZXJpYWxpemF0aW9uL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzQsOCArMzQsOCBAQAogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGtUZXN0Tm90UnVuICAgID0gIlRFU1QgTk9UIFJVTiI7CiAgICAgcHVibGljIHN0YXRpYyBTdHJpbmcga1Rlc3RQYXNzZWQgICAgPSAiVEVTVCBQQVNTRUQiOwogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGtUZXN0RmFpbGVkICAgID0gIlRFU1QgRkFJTEVEIjsKLSAgICAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgICAgTUFYX1RJTUVSUyA9IDYwOwpAQCAtNTAsMTEgKzUwLDExIEBACiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbVGltZXJTZXJpYWxpemF0aW9uQ2xpbmV0XSBET05FIGRvVGVzdCgpLi4uIik7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ0aW1lcnNlcmlhbGl6YXRpb24iKTsKLSAgICB9ICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogICAgICAgICBpbml0U0ZTQkxpc3QoKTsgICAgICAgLy9jcmVhdGUgTUFYX1RJTUVSUwogCkBAIC0xNzIsNyArMTcyLDcgQEAKICAgICAgICAgICAgIFRpbWVyU0ZTQiBzZnNiID0gKFRpbWVyU0ZTQikgc2ZzYkxpc3QuZ2V0KGkpOwogICAgICAgICAgICAgU3RyaW5nIHRpbWVyTmFtZSA9IHNmc2IuZ2V0TmFtZSgpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBY2Nlc3NpbmcgVGltZXIgYmVhbiBmb3I6ICIgKyB0aW1lck5hbWUpOwotICAgICAgICAgICAgc2ZzYi5jYW5jZWxUaW1lcigpOyAgCisgICAgICAgICAgICBzZnNiLmNhbmNlbFRpbWVyKCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSBhY2Nlc3NlZCBUaW1lciBiZWFuIGZvcjogIiArIHRpbWVyTmFtZSk7CiAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamJjbGllbnQgY2FuY2VsVGltZXJzIiwgc3RhdC5QQVNTKTsKQEAgLTE4NSw0ICsxODUsNCBAQAogCiAKIH0KLSAgICAKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVyc2VyaWFsaXphdGlvbi9lamIvVGltZXJTRlNCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJzZXJpYWxpemF0aW9uL2VqYi9UaW1lclNGU0IuamF2YQppbmRleCBhNmY1YTViLi5mZjUzMTAwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJzZXJpYWxpemF0aW9uL2VqYi9UaW1lclNGU0IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJzZXJpYWxpemF0aW9uL2VqYi9UaW1lclNGU0IuamF2YQpAQCAtMjMsMTkgKzIzLDE5IEBACiAgICAgZXh0ZW5kcyBFSkJPYmplY3QKIHsKIAotCXB1YmxpYyB2b2lkIGNyZWF0ZVRpbWVyKGludCBtcykKKyAgICBwdWJsaWMgdm9pZCBjcmVhdGVUaW1lcihpbnQgbXMpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLQlwdWJsaWMgbG9uZyBnZXRUaW1lUmVtYWluaW5nKCkKKyAgICBwdWJsaWMgbG9uZyBnZXRUaW1lUmVtYWluaW5nKCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotCXB1YmxpYyBUaW1lckhhbmRsZSBnZXRUaW1lckhhbmRsZSgpCisgICAgcHVibGljIFRpbWVySGFuZGxlIGdldFRpbWVySGFuZGxlKCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotCXB1YmxpYyB2b2lkIGNhbmNlbFRpbWVyKCkKKyAgICBwdWJsaWMgdm9pZCBjYW5jZWxUaW1lcigpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnNlcmlhbGl6YXRpb24vZWpiL1RpbWVyU0ZTQkVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVyc2VyaWFsaXphdGlvbi9lamIvVGltZXJTRlNCRUpCLmphdmEKaW5kZXggNGExYWQ2Yi4uOGM4YWM2NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVyc2VyaWFsaXphdGlvbi9lamIvVGltZXJTRlNCRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVyc2VyaWFsaXphdGlvbi9lamIvVGltZXJTRlNCRUpCLmphdmEKQEAgLTMxLDE0ICszMSwxNCBAQAogaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIAogcHVibGljIGNsYXNzIFRpbWVyU0ZTQkVKQgotICAgIGltcGxlbWVudHMgU2Vzc2lvbkJlYW4gCisgICAgaW1wbGVtZW50cyBTZXNzaW9uQmVhbgogewotCXByaXZhdGUgU2Vzc2lvbkNvbnRleHQgY29udGV4dDsKKyAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IGNvbnRleHQ7CiAgICAgcHJpdmF0ZSBTdHJpbmcgdGltZXJOYW1lOwogICAgIHByaXZhdGUgQ29udGV4dCBpbml0aWFsQ3R4OwogICAgIHByaXZhdGUgVGltZXIgdGltZXI7CiAKLQlwdWJsaWMgdm9pZCBlamJDcmVhdGUoU3RyaW5nIHRpbWVyTmFtZSkgeworICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZShTdHJpbmcgdGltZXJOYW1lKSB7CiAgICAgICAgIHRoaXMudGltZXJOYW1lID0gdGltZXJOYW1lOwogICAgIH0KIApAQCAtNDYsMzEgKzQ2LDMxIEBACiAgICAgICAgIHJldHVybiB0aGlzLnRpbWVyTmFtZTsKICAgICB9CiAKLQlwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgewotCQl0aGlzLmNvbnRleHQgPSBzYzsKKyAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgeworICAgICAgICB0aGlzLmNvbnRleHQgPSBzYzsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHRoaXMuaW5pdGlhbEN0eCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdGgpIHsKICAgICAgICAgICAgIHRoLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0JfQorICAgIH0KIAotCS8vIGJ1c2luZXNzIG1ldGhvZCB0byBjcmVhdGUgYSB0aW1lcgotCXB1YmxpYyB2b2lkIGNyZWF0ZVRpbWVyKGludCBtcykKKyAgICAvLyBidXNpbmVzcyBtZXRob2QgdG8gY3JlYXRlIGEgdGltZXIKKyAgICBwdWJsaWMgdm9pZCBjcmVhdGVUaW1lcihpbnQgbXMpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24KICAgICB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBJbml0aWFsQ29udGV4dCBpbml0aWFsQ3R4ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBUaW1lclNMU0JIb21lIGhvbWUgPSAoVGltZXJTTFNCSG9tZSkgaW5pdGlhbEN0eC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1RpbWVyU0xTQiIpOwotCQkgICAgVGltZXJTTFNCIHNsc2IgPSAoVGltZXJTTFNCKSBob21lLmNyZWF0ZSgpOwotCQkgICAgdGltZXIgPSBzbHNiLmNyZWF0ZVRpbWVyKG1zKTsKKyAgICAgICAgICAgIFRpbWVyU0xTQiBzbHNiID0gKFRpbWVyU0xTQikgaG9tZS5jcmVhdGUoKTsKKyAgICAgICAgICAgIHRpbWVyID0gc2xzYi5jcmVhdGVUaW1lcihtcyk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCJQRy0+IGFmdGVyIGNyZWF0ZVRpbWVyKCkiKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUmVtb3RlRXhjZXB0aW9uKCJFeGNlcHRpb24gZHVyaW5nIFRpbWVyU0ZTQkVKQjo6Y3JlYXRlVGltZXIiLCBleCk7CiAgICAgICAgIH0KLQl9CisgICAgfQogCi0JcHVibGljIGxvbmcgZ2V0VGltZVJlbWFpbmluZygpIHsKKyAgICBwdWJsaWMgbG9uZyBnZXRUaW1lUmVtYWluaW5nKCkgewogICAgICAgICAgICAgbG9uZyB0aW1lUmVtYWluaW5nID0gLTE7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIHRpbWVSZW1haW5pbmcgPSB0aW1lci5nZXRUaW1lUmVtYWluaW5nKCk7CkBAIC04MCw3ICs4MCw3IEBACiAgICAgICAgICAgICByZXR1cm4gdGltZVJlbWFpbmluZzsKICAgICAgICAgfQogCi0JcHVibGljIFRpbWVySGFuZGxlIGdldFRpbWVySGFuZGxlKCkgeworICAgIHB1YmxpYyBUaW1lckhhbmRsZSBnZXRUaW1lckhhbmRsZSgpIHsKICAgICAgICAgICAgIFRpbWVySGFuZGxlIGhhbmRsZSA9IG51bGw7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGhhbmRsZSA9IHRpbWVyLmdldEhhbmRsZSgpOwpAQCAtOTAsNyArOTAsNyBAQAogICAgICAgICAgICAgcmV0dXJuIGhhbmRsZTsKICAgICAgICAgfQogCi0JcHVibGljIHZvaWQgY2FuY2VsVGltZXIoKSB7CisgICAgcHVibGljIHZvaWQgY2FuY2VsVGltZXIoKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIHRpbWVyLmNhbmNlbCgpOwogICAgICAgICAgICAgfSBjYXRjaChOb1N1Y2hPYmplY3RMb2NhbEV4Y2VwdGlvbiBuc29sZSkgewpAQCAtOTksMTMgKzk5LDEzIEBACiAgICAgfQogCiAKLQlwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7fQorICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHt9CiAKLQlwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsKKyAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICgiSW4gVGltZXJTRlNCLmFjdGl2YXRlKCkiKTsKICAgICB9CiAKLQlwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7CisgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCJJbiBUaW1lclNGU0IucGFzc2l2YXRlKCkiKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJzZXJpYWxpemF0aW9uL2VqYi9UaW1lclNGU0JIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJzZXJpYWxpemF0aW9uL2VqYi9UaW1lclNGU0JIb21lLmphdmEKaW5kZXggOWM2Zjk1MS4uZjZjMDhjYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVyc2VyaWFsaXphdGlvbi9lamIvVGltZXJTRlNCSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnNlcmlhbGl6YXRpb24vZWpiL1RpbWVyU0ZTQkhvbWUuamF2YQpAQCAtMjMsNiArMjMsNiBAQAogcHVibGljIGludGVyZmFjZSBUaW1lclNGU0JIb21lCiAgICAgZXh0ZW5kcyBFSkJIb21lCiB7Ci0JcHVibGljIFRpbWVyU0ZTQiBjcmVhdGUoU3RyaW5nIHRpbWVyTmFtZSkKKyAgICBwdWJsaWMgVGltZXJTRlNCIGNyZWF0ZShTdHJpbmcgdGltZXJOYW1lKQogICAgICAgICB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJzZXJpYWxpemF0aW9uL2VqYi9UaW1lclNMU0IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnNlcmlhbGl6YXRpb24vZWpiL1RpbWVyU0xTQi5qYXZhCmluZGV4IDQwMTYyNjIuLjNkNDBmMTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnNlcmlhbGl6YXRpb24vZWpiL1RpbWVyU0xTQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnNlcmlhbGl6YXRpb24vZWpiL1RpbWVyU0xTQi5qYXZhCkBAIC0yMiw3ICsyMiw3IEBACiAgICAgZXh0ZW5kcyBFSkJMb2NhbE9iamVjdAogewogCi0JcHVibGljIFRpbWVyIGNyZWF0ZVRpbWVyKGludCBtcyk7CisgICAgcHVibGljIFRpbWVyIGNyZWF0ZVRpbWVyKGludCBtcyk7CiAKIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVyc2VyaWFsaXphdGlvbi9lamIvVGltZXJTTFNCRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJzZXJpYWxpemF0aW9uL2VqYi9UaW1lclNMU0JFSkIuamF2YQppbmRleCBkZTBjOGM1Li5kYTU0OTYyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJzZXJpYWxpemF0aW9uL2VqYi9UaW1lclNMU0JFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJzZXJpYWxpemF0aW9uL2VqYi9UaW1lclNMU0JFSkIuamF2YQpAQCAtMjQsMzUgKzI0LDM1IEBACiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQ7CiAKIHB1YmxpYyBjbGFzcyBUaW1lclNMU0JFSkIKLSAgICBpbXBsZW1lbnRzIFRpbWVkT2JqZWN0LCBTZXNzaW9uQmVhbiAKKyAgICBpbXBsZW1lbnRzIFRpbWVkT2JqZWN0LCBTZXNzaW9uQmVhbgogewotCXByaXZhdGUgU2Vzc2lvbkNvbnRleHQgY29udGV4dDsKKyAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IGNvbnRleHQ7CiAKLQlwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB7fQorICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHt9CiAKLQlwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgewotCQljb250ZXh0ID0gc2M7Ci0JfQorICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7CisgICAgICAgIGNvbnRleHQgPSBzYzsKKyAgICB9CiAKLQkvLyBidXNpbmVzcyBtZXRob2QgdG8gY3JlYXRlIGEgdGltZXIKLQlwdWJsaWMgVGltZXIgY3JlYXRlVGltZXIoaW50IG1zKSB7Ci0JCVRpbWVyU2VydmljZSB0aW1lclNlcnZpY2UgPSBjb250ZXh0LmdldFRpbWVyU2VydmljZSgpOwotCQlUaW1lciB0aW1lciA9IHRpbWVyU2VydmljZS5jcmVhdGVUaW1lcihtcywgImNyZWF0ZWQgdGltZXIiKTsKLQkJcmV0dXJuIHRpbWVyOwotCX0KKyAgICAvLyBidXNpbmVzcyBtZXRob2QgdG8gY3JlYXRlIGEgdGltZXIKKyAgICBwdWJsaWMgVGltZXIgY3JlYXRlVGltZXIoaW50IG1zKSB7CisgICAgICAgIFRpbWVyU2VydmljZSB0aW1lclNlcnZpY2UgPSBjb250ZXh0LmdldFRpbWVyU2VydmljZSgpOworICAgICAgICBUaW1lciB0aW1lciA9IHRpbWVyU2VydmljZS5jcmVhdGVUaW1lcihtcywgImNyZWF0ZWQgdGltZXIiKTsKKyAgICAgICAgcmV0dXJuIHRpbWVyOworICAgIH0KIAotCS8vIHRpbWVyIGNhbGxiYWNrIG1ldGhvZAotCXB1YmxpYyB2b2lkIGVqYlRpbWVvdXQoVGltZXIgdGltZXIpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJUaW1lclNMU0I6OmVqYlRpbWVvdXQoKSBpbnZva2VkIik7Ci0JfQotICAgIAotCXB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHt9CisgICAgLy8gdGltZXIgY2FsbGJhY2sgbWV0aG9kCisgICAgcHVibGljIHZvaWQgZWpiVGltZW91dChUaW1lciB0aW1lcikgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRpbWVyU0xTQjo6ZWpiVGltZW91dCgpIGludm9rZWQiKTsKKyAgICB9CiAKLQlwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsKKyAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7fQorCisgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoIkluIFRpbWVyU0xTQi5hY3RpdmF0ZSgpIik7CiAgICAgfQogCi0JcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkgeworICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICgiSW4gVGltZXJTTFNCLnBhc3NpdmF0ZSgpIik7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVyc2VyaWFsaXphdGlvbi9lamIvVGltZXJTTFNCSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVyc2VyaWFsaXphdGlvbi9lamIvVGltZXJTTFNCSG9tZS5qYXZhCmluZGV4IGM2NWU1MDAuLjYwN2M5ZGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnNlcmlhbGl6YXRpb24vZWpiL1RpbWVyU0xTQkhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJzZXJpYWxpemF0aW9uL2VqYi9UaW1lclNMU0JIb21lLmphdmEKQEAgLTIyLDYgKzIyLDYgQEAKIHB1YmxpYyBpbnRlcmZhY2UgVGltZXJTTFNCSG9tZQogICAgIGV4dGVuZHMgRUpCTG9jYWxIb21lCiB7Ci0JVGltZXJTTFNCIGNyZWF0ZSgpCisgICAgVGltZXJTTFNCIGNyZWF0ZSgpCiAgICAgICAgIHRocm93cyBDcmVhdGVFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJ0ZXN0cy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVydGVzdHMvYnVpbGQucHJvcGVydGllcwppbmRleCA2NWVkYjJhLi4xNGViMWUxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJ0ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIyICsxNSwyMiBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLXRpbWVyLXRpbWVydGVzdHMiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJkYnNjaGVtYSIgdmFsdWU9IkJhci5kYnNjaGVtYSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVydGVzdHMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVydGVzdHMvYnVpbGQueG1sCmluZGV4IDljNDExNmEuLjdhNWVjNWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnRlc3RzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJ0ZXN0cy9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDE0ICs0NiwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudCouY2xhc3MsKiovVGltZXJTdHVmZiouY2xhc3MsKiovQXBwSW5mby5jbGFzcywqKi9CYXIuY2xhc3MsKiovQmFySG9tZS5jbGFzcywqKi9CYXJQcmltYXJ5S2V5LmNsYXNzLCoqL0Zvby5jbGFzcywqKi9Gb29Ib21lLmNsYXNzLCoqL1N0YXRlZnVsLmNsYXNzLCoqL1N0YXRlZnVsSG9tZS5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImNyZWF0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtNzMsMTQgKzczLDE0IEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJ0ZXN0cy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJ0ZXN0cy9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMzE1NzU0Ny4uODJjZWYzMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVydGVzdHMvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnRlc3RzL2NsaWVudC9DbGllbnQuamF2YQpAQCAtNDgsMTAgKzQ4LDEwIEBACiAgICAgcHJpdmF0ZSBRdWV1ZVNlbmRlciBxdWV1ZVNlbmRlcjsKICAgICAqLwogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsgCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewogICAgICAgICBib29sZWFuIGRvSm1zID0gZmFsc2U7IC8vIFRPRE8gKGFyZ3MubGVuZ3RoID09IDEpICYmIChhcmdzWzBdLmVxdWFsc0lnbm9yZUNhc2UoImptcyIpKTsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJlamItdGltZXItdGltZXJ0ZXN0cyIpOwpAQCAtNjMsMTggKzYzLDE4IEBACiAgICAgICAgIFRpbWVyU3R1ZmYgZm9vID0gbmV3IENsaWVudCgpLmRvRm9vVGVzdCgiZWpicy9Gb29fQk1UIiwgZG9KbXMpOwogCiAKLQkvKiogVE9ETworICAgIC8qKiBUT0RPCiAgICAgICAgIG5ldyBDbGllbnQoKS5kb01lc3NhZ2VEcml2ZW5UZXN0KCJqbXMvVGltZXJNREJRdWV1ZV9DTVQiLCBmb28sIGRvSm1zKTsKICAgICAgICAgbmV3IENsaWVudCgpLmRvTWVzc2FnZURyaXZlblRlc3QoImptcy9UaW1lck1EQlF1ZXVlX0JNVCIsIGZvbywgZG9KbXMpOwotCSoqLworICAgICoqLwogCi0JbmV3IENsaWVudCgpLmRvU3RhdGVmdWxUZXN0KCJlamJzL1N0YXRlZnVsX0NNVCIsIGZvbyxkb0ptcyk7Ci0JbmV3IENsaWVudCgpLmRvU3RhdGVmdWxUZXN0KCJlamJzL1N0YXRlZnVsX0JNVCIsIGZvbywgZG9KbXMpOworICAgIG5ldyBDbGllbnQoKS5kb1N0YXRlZnVsVGVzdCgiZWpicy9TdGF0ZWZ1bF9DTVQiLCBmb28sZG9KbXMpOworICAgIG5ldyBDbGllbnQoKS5kb1N0YXRlZnVsVGVzdCgiZWpicy9TdGF0ZWZ1bF9CTVQiLCBmb28sIGRvSm1zKTsKIAogICAgICAgICBuZXcgQ2xpZW50KCkuZG9CYXJUZXN0KCJlamJ0aW1lci9CYXJfQ01UIiwgZG9KbXMpOwogCiAgICAgICAgIHRyeSB7Ci0JICAgICAoKEZvbykgZm9vKS5yZW1vdmUoKTsKKyAgICAgICAgICgoRm9vKSBmb28pLnJlbW92ZSgpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CkBAIC05NSwxNiArOTUsMTYgQEAKIAogICAgIHB1YmxpYyB2b2lkIGRvTWVzc2FnZURyaXZlblRlc3QoU3RyaW5nIGpuZGlOYW1lLCBUaW1lclN0dWZmIGZvbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gam1zKSB7Ci0JLyoqCisgICAgLyoqCiAgICAgICAgIGlmKCBqbXMgKSB7IHJldHVybjsgfQogCiAgICAgICAgIHRyeSB7CiBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqUEctPiBpbiBkb01lc3NhZ2VEcml2ZW5UZXN0KCkgZm9yIGpuZGlOYW1lID0gIiArIGpuZGlOYW1lICk7Ci0gICAgICAgICAgIAorCiAgICAgICAgICAgICBzZXR1cCgpOwogU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKlBHLT4gaW4gZG9NZXNzYWdlRHJpdmVuVGVzdCgpIGFmdGVyIHNldHVwIik7CiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JICAgICBRdWV1ZSBtZXNzYWdlRHJpdmVuRGVzdCA9IChRdWV1ZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52LyIgKyBqbmRpTmFtZSk7CisgICAgICAgICBRdWV1ZSBtZXNzYWdlRHJpdmVuRGVzdCA9IChRdWV1ZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52LyIgKyBqbmRpTmFtZSk7CiAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRG9pbmcgbWVzc2FnZSBkcml2ZW4gdGVzdHMgZm9yIiArIGpuZGlOYW1lKTsKIApAQCAtMTIyLDcgKzEyMiw3IEBACiAgICAgICAgICAgICBsb25nIHNsZWVwVGltZSA9IDMwMDAwOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTbGVlcGluZyBmb3IgIiArIHNsZWVwVGltZSAvIDEwMDAgKyAiIHNlY29uZHMiKTsKICAgICAgICAgICAgIFRocmVhZC5zbGVlcChzbGVlcFRpbWUpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8vIGF0IHRoaXMgcG9pbnQsIGFsbCBmb28gdGltZXJzIHNob3VsZCBoYXZlIGJlZW4gY2FuY2VsbGVkCiAgICAgICAgICAgICAvLyBieSB0aGUgbWVzc2FnZSBiZWFuLgogICAgICAgICAgICAgZm9vLmFzc2VydE5vVGltZXJzKCk7CkBAIC0xMzYsMTIgKzEzNiwxMiBAQAogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgY2xlYW51cCgpOwogICAgICAgICB9Ci0JKiovCisgICAgKiovCiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9CYXJUZXN0KFN0cmluZyBqbmRpTmFtZSwgYm9vbGVhbiBqbXMpIHsKICAgICAgICAgdHJ5IHsKLQkgICAgT2JqZWN0IGJhck9ianJlZiA9IGNvbnRleHQubG9va3VwKGpuZGlOYW1lKTsKKyAgICAgICAgT2JqZWN0IGJhck9ianJlZiA9IGNvbnRleHQubG9va3VwKGpuZGlOYW1lKTsKIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJkb0JhclRlc3QoKTogRG9pbmcgYmFyIHRpbWVyIHRlc3QgZm9yICIgKyBqbmRpTmFtZSk7CiAKQEAgLTE2OCw3ICsxNjgsNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJkb0JhclRlc3QoKTogQmFyIGFmdGVyIGZpbmQgIiApOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGptcykgewotICAgICAgICAgICAgICAgIGRvSm1zVGVzdChiYXIpOyAgICAKKyAgICAgICAgICAgICAgICBkb0ptc1Rlc3QoYmFyKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgZG9UZXN0KGJhcik7CiAgICAgICAgICAgICAgICAgKChFSkJPYmplY3QpYmFyKS5yZW1vdmUoKTsKQEAgLTE4NSwyMSArMTg1LDIxIEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0dXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkvKioKKyAgICAvKioKIC8vUEctPiAgICAgICAgY29udGV4dCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICAgICAKLSAgICAgICAgVG9waWNDb25uZWN0aW9uRmFjdG9yeSB0b3BpY0NvbkZhY3RvcnkgPSAKKworICAgICAgICBUb3BpY0Nvbm5lY3Rpb25GYWN0b3J5IHRvcGljQ29uRmFjdG9yeSA9CiAgICAgICAgICAgICAoVG9waWNDb25uZWN0aW9uRmFjdG9yeSkgY29udGV4dC5sb29rdXAKICAgICAgICAgICAgICAgICAoImphdmE6Y29tcC9lbnYvam1zL015VG9waWNDb25uZWN0aW9uRmFjdG9yeSIpOwotICAgICAgICAgICAgICAgIAorCiBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqUEctPiBzZXR1cCgpOiBhZnRlciAgbG9va3VwIik7CiAgICAgICAgIHRvcGljQ29uID0gdG9waWNDb25GYWN0b3J5LmNyZWF0ZVRvcGljQ29ubmVjdGlvbigpOwogCiBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqUEctPiBzZXR1cCgpOiBhZnRlciAgY3JlYXRlVG9waWNDb25uZWN0aW9uIik7Ci0gICAgICAgIHRvcGljU2Vzc2lvbiA9IAorICAgICAgICB0b3BpY1Nlc3Npb24gPQogICAgICAgICAgICAgdG9waWNDb24uY3JlYXRlVG9waWNTZXNzaW9uKGZhbHNlLCBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UpOwogU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKlBHLT4gc2V0dXAoKTogYWZ0ZXIgIGNyZWF0ZVRvcGljU2Vzc2lvbiIpOwotICAgICAgICAgICAgCisKICAgICAgICAgLy8gUHJvZHVjZXIgd2lsbCBiZSBzcGVjaWZpZWQgd2hlbiBhY3R1YWwgbXNnIGlzIHB1Ymxpc2hlZC4KICAgICAgICAgdG9waWNQdWJsaXNoZXIgPSB0b3BpY1Nlc3Npb24uY3JlYXRlUHVibGlzaGVyKG51bGwpOwogU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKlBHLT4gc2V0dXAoKTogYWZ0ZXIgY3JlYXRlUHVibGlzaGVyIik7CkBAIC0yMDcsMjUgKzIwNywyNSBAQAogICAgICAgICB0b3BpY0Nvbi5zdGFydCgpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqUEctPiBzZXR1cCgpOiBhZnRlciBzdGFydCIpOwogCi0gICAgICAgIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcXVldWVDb25GYWN0b3J5ID0gCisgICAgICAgIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcXVldWVDb25GYWN0b3J5ID0KICAgICAgICAgICAgIChRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5KSBjb250ZXh0Lmxvb2t1cAogICAgICAgICAgICAgKCJqYXZhOmNvbXAvZW52L2ptcy9NeVF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkiKTsKIAogICAgICAgICBxdWV1ZUNvbiA9IHF1ZXVlQ29uRmFjdG9yeS5jcmVhdGVRdWV1ZUNvbm5lY3Rpb24oKTsKIAogICAgICAgICBxdWV1ZVNlc3Npb24gPSBxdWV1ZUNvbi5jcmVhdGVRdWV1ZVNlc3Npb24KLSAgICAgICAgICAgIChmYWxzZSwgU2Vzc2lvbi5BVVRPX0FDS05PV0xFREdFKTsgCisgICAgICAgICAgICAoZmFsc2UsIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSk7CiAKICAgICAgICAgLy8gUHJvZHVjZXIgd2lsbCBiZSBzcGVjaWZpZWQgd2hlbiBhY3R1YWwgbXNnIGlzIHNlbnQuCi0gICAgICAgIHF1ZXVlU2VuZGVyID0gcXVldWVTZXNzaW9uLmNyZWF0ZVNlbmRlcihudWxsKTsgICAgICAgIAorICAgICAgICBxdWV1ZVNlbmRlciA9IHF1ZXVlU2Vzc2lvbi5jcmVhdGVTZW5kZXIobnVsbCk7CiAKICAgICAgICAgcXVldWVDb24uc3RhcnQoKTsKLQkqKi8KKyAgICAqKi8KIAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGNsZWFudXAoKSB7Ci0JLyoqCisgICAgLyoqCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpZiggdG9waWNDb24gIT0gbnVsbCApIHsKICAgICAgICAgICAgICAgICB0b3BpY0Nvbi5jbG9zZSgpOwpAQCAtMjM5LDcgKzIzOSw3IEBACiAgICAgICAgICoqLwogICAgIH0KICAgICAvKioKLSAgICBwdWJsaWMgdm9pZCBwdWJsaXNoTXNncyhUb3BpYyB0b3BpYywgTWVzc2FnZSBtc2csIGludCBudW0pIAorICAgIHB1YmxpYyB2b2lkIHB1Ymxpc2hNc2dzKFRvcGljIHRvcGljLCBNZXNzYWdlIG1zZywgaW50IG51bSkKICAgICAgICAgdGhyb3dzIEpNU0V4Y2VwdGlvbiB7CiAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW07IGkrKykgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQdWJsaXNoaW5nIG1lc3NhZ2UgIiArIGkgKyAiIHRvICIgKyB0b3BpYyk7CkBAIC0yNDcsNyArMjQ3LDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHNlbmRNc2dzKFF1ZXVlIHF1ZXVlLCBNZXNzYWdlIG1zZywgaW50IG51bSkgCisgICAgcHVibGljIHZvaWQgc2VuZE1zZ3MoUXVldWUgcXVldWUsIE1lc3NhZ2UgbXNnLCBpbnQgbnVtKQogICAgICAgICB0aHJvd3MgSk1TRXhjZXB0aW9uIHsKICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bTsgaSsrKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlB1Ymxpc2hpbmcgbWVzc2FnZSAiICsgaSArICIgdG8gIiArIHF1ZXVlKTsKQEAgLTMyNywzNyArMzI3LDM3IEBACiAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJkb1Rlc3QoKTogY3JlYXRpbmcgdGhlIHRpbWVyaGFuZGxlIik7CiAgICAgICAgIFRpbWVySGFuZGxlIHRpbWVySGFuZGxlID0gdGltZXJTdHVmZi5jcmVhdGVUaW1lcigxLCAxKTsKLSAgICAgICAgCisKICAgICAgICAgLy8KICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJkb1Rlc3QoKTogY3JlYXRpbmcgdGhlIHRpbWVyaGFuZGxlMiIpOwogICAgICAgICBUaW1lckhhbmRsZSB0aW1lckhhbmRsZTIgPSB0aW1lclN0dWZmLmNyZWF0ZVRpbWVyKDEwMDAwLCAxMDAwMCk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZG9UZXN0KCk6IGNyZWF0aW5nIHRoZSB0aW1lcmhhbmRsZTMiKTsKICAgICAgICAgVGltZXJIYW5kbGUgdGltZXJIYW5kbGUzID0gdGltZXJTdHVmZi5jcmVhdGVUaW1lcihuZXcgRGF0ZSgpKTsKLSAgICAgICAgCisKICAgICAgICAgLy8KICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJkb1Rlc3QoKTogY3JlYXRpbmcgdGhlIHRpbWVyaGFuZGxlNCIpOwogICAgICAgICBUaW1lckhhbmRsZSB0aW1lckhhbmRsZTQgPSB0aW1lclN0dWZmLmNyZWF0ZVRpbWVyKG5ldyBEYXRlKG5ldyBEYXRlKCkuZ2V0VGltZSgpICsgMjAwMCkpOwotICAgICAgICAKKwogICAgICAgICAvLwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImRvVGVzdCgpOiBjcmVhdGluZyB0aGUgdGltZXJoYW5kbGU1Iik7CiAgICAgICAgIFRpbWVySGFuZGxlIHRpbWVySGFuZGxlNSA9IHRpbWVyU3R1ZmYuY3JlYXRlVGltZXIobmV3IERhdGUobmV3IERhdGUoKS5nZXRUaW1lKCkgKyAyMDAwMCksIDEwMDAwKTsKIAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImRvVGVzdCgpOiBjcmVhdGluZyB0aGUgY3JlYXRlVGltZXJBbmRSb2xsYmFjayIpOwogICAgICAgICB0aW1lclN0dWZmLmNyZWF0ZVRpbWVyQW5kUm9sbGJhY2soMjAwMDApOwotICAgICAgICAKKwogICAgICAgICAvLwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImRvVGVzdCgpOiBjcmVhdGluZyB0aGUgY3JlYXRlVGltZXJBbmRDYW5jZWwiKTsKICAgICAgICAgdGltZXJTdHVmZi5jcmVhdGVUaW1lckFuZENhbmNlbCgyMDAwMCk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIEBAQCByZWV2YWx1YXRlIGRvdWJsZSBjYW5jZWwgbG9naWMKICAgICAgICAgLy90aW1lclN0dWZmLmNyZWF0ZVRpbWVyQW5kQ2FuY2VsQW5kQ2FuY2VsKDIwMDAwKTsKLSAgICAgICAgCisKICAgICAgICAgLy8KICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJkb1Rlc3QoKTogY3JlYXRpbmcgdGhlIGNyZWF0ZVRpbWVyQW5kQ2FuY2VsQW5kUm9sbGJhY2siKTsKICAgICAgICAgdGltZXJTdHVmZi5jcmVhdGVUaW1lckFuZENhbmNlbEFuZFJvbGxiYWNrKDIwMDAwKTsKLSAgICAgICAgCisKICAgICAgICAgLy8KICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJkb1Rlc3QoKTogY3JlYXRpbmcgdGhlIGNhbmNlbFRpbWVyKHRpbWVyaGFuZGxlMikiKTsKICAgICAgICAgdGltZXJTdHVmZi5jYW5jZWxUaW1lcih0aW1lckhhbmRsZTIpOwpAQCAtMzY4LDE4ICszNjgsMTggQEAKICAgICAgICAgdGltZXJTdHVmZi5jYW5jZWxUaW1lckFuZFJvbGxiYWNrKHRpbWVySGFuZGxlNSk7CiAgICAgICAgIC8vIEBAQCByZWV2YWx1YXRlIGRvdWJsZSBjYW5jZWwgbG9naWMKICAgICAgICAgLy90aW1lclN0dWZmLmNhbmNlbFRpbWVyQW5kQ2FuY2VsQW5kUm9sbGJhY2sodGltZXJIYW5kbGU2KTsKLSAgICAgICAgCi0gICAgICAgIFRpbWVySGFuZGxlIHRpbWVySGFuZGxlNyA9IAorCisgICAgICAgIFRpbWVySGFuZGxlIHRpbWVySGFuZGxlNyA9CiAgICAgICAgICAgICB0aW1lclN0dWZmLmNyZWF0ZVRpbWVyKDEsIDEsICJjYW5jZWxUaW1lciIpOwotICAgICAgICBUaW1lckhhbmRsZSB0aW1lckhhbmRsZTggPSAKKyAgICAgICAgVGltZXJIYW5kbGUgdGltZXJIYW5kbGU4ID0KICAgICAgICAgICAgIHRpbWVyU3R1ZmYuY3JlYXRlVGltZXIoMSwgMSwgImNhbmNlbFRpbWVyQW5kUm9sbGJhY2siKTsKLSAgICAgICAgVGltZXJIYW5kbGUgdGltZXJIYW5kbGU5ID0gICAgICAgICAKKyAgICAgICAgVGltZXJIYW5kbGUgdGltZXJIYW5kbGU5ID0KICAgICAgICAgICAgIHRpbWVyU3R1ZmYuY3JlYXRlVGltZXIoMSwgImNhbmNlbFRpbWVyQW5kUm9sbGJhY2siKTsKIAogICAgICAgICBUaW1lckhhbmRsZSB0aW1lckhhbmRsZTExID0gdGltZXJTdHVmZi5nZXRUaW1lUmVtYWluaW5nVGVzdDEoMjApOwogICAgICAgICB0aW1lclN0dWZmLmdldFRpbWVSZW1haW5pbmdUZXN0MigyMCwgdGltZXJIYW5kbGUxMSk7CiAgICAgICAgIHRpbWVyU3R1ZmYuZ2V0VGltZVJlbWFpbmluZ1Rlc3QyKDIwLCB0aW1lckhhbmRsZSk7Ci0gICAgICAgIAorCiAgICAgICAgIFRpbWVySGFuZGxlIHRpbWVySGFuZGxlMTIgPSB0aW1lclN0dWZmLmdldE5leHRUaW1lb3V0VGVzdDEoMjApOwogICAgICAgICB0aW1lclN0dWZmLmdldE5leHRUaW1lb3V0VGVzdDIoMjAsIHRpbWVySGFuZGxlMTIpOwogICAgICAgICB0aW1lclN0dWZmLmdldE5leHRUaW1lb3V0VGVzdDIoMjAsIHRpbWVySGFuZGxlKTsKQEAgLTQzMCw3ICs0MzAsNyBAQAogCiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9FbnRpdHlUZXN0cyhCYXJIb21lIGJhckhvbWUpIAorICAgIHB1YmxpYyB2b2lkIGRvRW50aXR5VGVzdHMoQmFySG9tZSBiYXJIb21lKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgVGltZXJTdHVmZiBiYXIxID0gYmFySG9tZS5jcmVhdGUobmV3IExvbmcoMSksICIxIik7CiAgICAgICAgIFRpbWVySGFuZGxlIHRpbWVySGFuZGxlMSA9IGJhcjEuY3JlYXRlVGltZXIoMTAwMDAwMDAwKTsKQEAgLTQ1NCw3ICs0NTQsNyBAQAogICAgICAgICBpbmZvID0gYmFyNS5nZXRJbmZvKHRpbWVySGFuZGxlNSk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW5mbyA9ICIgKyBpbmZvKTsKICAgICAgICAgYmFySG9tZS5yZW1vdmUoKChFSkJPYmplY3QpYmFyNSkuZ2V0UHJpbWFyeUtleSgpKTsKLSAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB0aW1lciBzaG91bGQgbm90IGV4aXN0IHNpbmNlIHdlIHJlbW92ZWQgaXRzIAorICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHRpbWVyIHNob3VsZCBub3QgZXhpc3Qgc2luY2Ugd2UgcmVtb3ZlZCBpdHMKICAgICAgICAgLy8gdGltZWQgb2JqZWN0CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbmZvID0gYmFyNS5nZXRJbmZvTm9FcnJvcih0aW1lckhhbmRsZTUpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVydGVzdHMvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVydGVzdHMvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sCmluZGV4IDFiYTE4YWUuLmJkNjE1ODAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnRlc3RzL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJ0ZXN0cy9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwKQEAgLTY3LDE0ICs2NywxNCBAQAogICAgIDxyZXMtYXV0aD5Db250YWluZXI8L3Jlcy1hdXRoPgogICAgIDxyZXMtc2hhcmluZy1zY29wZT5TaGFyZWFibGU8L3Jlcy1zaGFyaW5nLXNjb3BlPgogICA8L3Jlc291cmNlLXJlZj4KLSAgPG1lc3NhZ2UtZGVzdGluYXRpb24tcmVmPiAgICAgICAKKyAgPG1lc3NhZ2UtZGVzdGluYXRpb24tcmVmPgogICAgIDxkZXNjcmlwdGlvbj50aW1lcnRlc3QgZGVzdGluYXRpb248L2Rlc2NyaXB0aW9uPgogICAgIDxtZXNzYWdlLWRlc3RpbmF0aW9uLXJlZi1uYW1lPmptcy9UaW1lck1EQlF1ZXVlX0NNVDwvbWVzc2FnZS1kZXN0aW5hdGlvbi1yZWYtbmFtZT4KICAgICA8bWVzc2FnZS1kZXN0aW5hdGlvbi10eXBlPmpha2FydGEuam1zLlF1ZXVlPC9tZXNzYWdlLWRlc3RpbmF0aW9uLXR5cGU+CiAgICAgPG1lc3NhZ2UtZGVzdGluYXRpb24tdXNhZ2U+UHJvZHVjZXM8L21lc3NhZ2UtZGVzdGluYXRpb24tdXNhZ2U+CiAgICAgPG1lc3NhZ2UtZGVzdGluYXRpb24tbGluaz5UaW1lck1EQlF1ZXVlX0NNVDwvbWVzc2FnZS1kZXN0aW5hdGlvbi1saW5rPgogICA8L21lc3NhZ2UtZGVzdGluYXRpb24tcmVmPgotICA8bWVzc2FnZS1kZXN0aW5hdGlvbi1yZWY+ICAgICAgIAorICA8bWVzc2FnZS1kZXN0aW5hdGlvbi1yZWY+CiAgICAgPGRlc2NyaXB0aW9uPnRpbWVydGVzdCBkZXN0aW5hdGlvbjwvZGVzY3JpcHRpb24+CiAgICAgPG1lc3NhZ2UtZGVzdGluYXRpb24tcmVmLW5hbWU+am1zL1RpbWVyTURCUXVldWVfQk1UPC9tZXNzYWdlLWRlc3RpbmF0aW9uLXJlZi1uYW1lPgogICAgIDxtZXNzYWdlLWRlc3RpbmF0aW9uLXR5cGU+amFrYXJ0YS5qbXMuUXVldWU8L21lc3NhZ2UtZGVzdGluYXRpb24tdHlwZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnRlc3RzL2Rlc2NyaXB0b3IvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJ0ZXN0cy9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IDZmMDBkZDAuLmViNWJkZjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnRlc3RzL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVydGVzdHMvZGVzY3JpcHRvci9lamItamFyLnhtbApAQCAtODUsNyArODUsNyBAQAogICAgICAgICA8cmVzLWF1dGg+Q29udGFpbmVyPC9yZXMtYXV0aD4KICAgICAgICAgPHJlcy1zaGFyaW5nLXNjb3BlPlNoYXJlYWJsZTwvcmVzLXNoYXJpbmctc2NvcGU+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KLSAgICAgIDxtZXNzYWdlLWRlc3RpbmF0aW9uLXJlZj4gICAgICAgCisgICAgICA8bWVzc2FnZS1kZXN0aW5hdGlvbi1yZWY+CiAgICAgICAgIDxkZXNjcmlwdGlvbj50aW1lcnRlc3QgZGVzdGluYXRpb248L2Rlc2NyaXB0aW9uPgogICAgICAgICA8bWVzc2FnZS1kZXN0aW5hdGlvbi1yZWYtbmFtZT5qbXMvTXlRdWV1ZTwvbWVzc2FnZS1kZXN0aW5hdGlvbi1yZWYtbmFtZT4KICAgICAgICAgPG1lc3NhZ2UtZGVzdGluYXRpb24tdHlwZT5qYWthcnRhLmptcy5RdWV1ZTwvbWVzc2FnZS1kZXN0aW5hdGlvbi10eXBlPgpAQCAtMTEyLDcgKzExMiw3IEBACiAgICAgICAgIDxyZXMtYXV0aD5Db250YWluZXI8L3Jlcy1hdXRoPgogICAgICAgICA8cmVzLXNoYXJpbmctc2NvcGU+U2hhcmVhYmxlPC9yZXMtc2hhcmluZy1zY29wZT4KICAgICAgIDwvcmVzb3VyY2UtcmVmPgotICAgICAgPG1lc3NhZ2UtZGVzdGluYXRpb24tcmVmPiAgICAgICAKKyAgICAgIDxtZXNzYWdlLWRlc3RpbmF0aW9uLXJlZj4KICAgICAgICAgPGRlc2NyaXB0aW9uPnRpbWVydGVzdCBkZXN0aW5hdGlvbjwvZGVzY3JpcHRpb24+CiAgICAgICAgIDxtZXNzYWdlLWRlc3RpbmF0aW9uLXJlZi1uYW1lPmptcy9NeVF1ZXVlPC9tZXNzYWdlLWRlc3RpbmF0aW9uLXJlZi1uYW1lPgogICAgICAgICA8bWVzc2FnZS1kZXN0aW5hdGlvbi10eXBlPmpha2FydGEuam1zLlF1ZXVlPC9tZXNzYWdlLWRlc3RpbmF0aW9uLXR5cGU+CkBAIC0xNDEsNyArMTQxLDcgQEAKICAgICAgICAgPHJlcy1hdXRoPkNvbnRhaW5lcjwvcmVzLWF1dGg+CiAgICAgICAgIDxyZXMtc2hhcmluZy1zY29wZT5TaGFyZWFibGU8L3Jlcy1zaGFyaW5nLXNjb3BlPgogICAgICAgPC9yZXNvdXJjZS1yZWY+Ci0gICAgICA8bWVzc2FnZS1kZXN0aW5hdGlvbi1yZWY+ICAgICAgIAorICAgICAgPG1lc3NhZ2UtZGVzdGluYXRpb24tcmVmPgogICAgICAgICA8ZGVzY3JpcHRpb24+dGltZXJ0ZXN0IGRlc3RpbmF0aW9uPC9kZXNjcmlwdGlvbj4KICAgICAgICAgPG1lc3NhZ2UtZGVzdGluYXRpb24tcmVmLW5hbWU+am1zL015UXVldWU8L21lc3NhZ2UtZGVzdGluYXRpb24tcmVmLW5hbWU+CiAgICAgICAgIDxtZXNzYWdlLWRlc3RpbmF0aW9uLXR5cGU+amFrYXJ0YS5qbXMuUXVldWU8L21lc3NhZ2UtZGVzdGluYXRpb24tdHlwZT4KQEAgLTE3Myw3ICsxNzMsNyBAQAogICAgICAgICA8cmVzLWF1dGg+Q29udGFpbmVyPC9yZXMtYXV0aD4KICAgICAgICAgPHJlcy1zaGFyaW5nLXNjb3BlPlNoYXJlYWJsZTwvcmVzLXNoYXJpbmctc2NvcGU+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KLSAgICAgIDxtZXNzYWdlLWRlc3RpbmF0aW9uLXJlZj4gICAgICAgCisgICAgICA8bWVzc2FnZS1kZXN0aW5hdGlvbi1yZWY+CiAgICAgICAgIDxkZXNjcmlwdGlvbj50aW1lcnRlc3QgZGVzdGluYXRpb248L2Rlc2NyaXB0aW9uPgogICAgICAgICA8bWVzc2FnZS1kZXN0aW5hdGlvbi1yZWYtbmFtZT5qbXMvTXlRdWV1ZTwvbWVzc2FnZS1kZXN0aW5hdGlvbi1yZWYtbmFtZT4KICAgICAgICAgPG1lc3NhZ2UtZGVzdGluYXRpb24tdHlwZT5qYWthcnRhLmptcy5RdWV1ZTwvbWVzc2FnZS1kZXN0aW5hdGlvbi10eXBlPgpAQCAtMjA1LDcgKzIwNSw3IEBACiAgICAgICAgIDxyZXMtYXV0aD5Db250YWluZXI8L3Jlcy1hdXRoPgogICAgICAgICA8cmVzLXNoYXJpbmctc2NvcGU+U2hhcmVhYmxlPC9yZXMtc2hhcmluZy1zY29wZT4KICAgICAgIDwvcmVzb3VyY2UtcmVmPgotICAgICAgPG1lc3NhZ2UtZGVzdGluYXRpb24tcmVmPiAgICAgICAKKyAgICAgIDxtZXNzYWdlLWRlc3RpbmF0aW9uLXJlZj4KICAgICAgICAgPGRlc2NyaXB0aW9uPnRpbWVydGVzdCBkZXN0aW5hdGlvbjwvZGVzY3JpcHRpb24+CiAgICAgICAgIDxtZXNzYWdlLWRlc3RpbmF0aW9uLXJlZi1uYW1lPmptcy9NeVF1ZXVlPC9tZXNzYWdlLWRlc3RpbmF0aW9uLXJlZi1uYW1lPgogICAgICAgICA8bWVzc2FnZS1kZXN0aW5hdGlvbi10eXBlPmpha2FydGEuam1zLlF1ZXVlPC9tZXNzYWdlLWRlc3RpbmF0aW9uLXR5cGU+CkBAIC0yMzcsNyArMjM3LDcgQEAKICAgICAgICAgPHJlcy1hdXRoPkNvbnRhaW5lcjwvcmVzLWF1dGg+CiAgICAgICAgIDxyZXMtc2hhcmluZy1zY29wZT5TaGFyZWFibGU8L3Jlcy1zaGFyaW5nLXNjb3BlPgogICAgICAgPC9yZXNvdXJjZS1yZWY+Ci0gICAgICA8bWVzc2FnZS1kZXN0aW5hdGlvbi1yZWY+ICAgICAgIAorICAgICAgPG1lc3NhZ2UtZGVzdGluYXRpb24tcmVmPgogICAgICAgICA8ZGVzY3JpcHRpb24+dGltZXJ0ZXN0IGRlc3RpbmF0aW9uPC9kZXNjcmlwdGlvbj4KICAgICAgICAgPG1lc3NhZ2UtZGVzdGluYXRpb24tcmVmLW5hbWU+am1zL015UXVldWU8L21lc3NhZ2UtZGVzdGluYXRpb24tcmVmLW5hbWU+CiAgICAgICAgIDxtZXNzYWdlLWRlc3RpbmF0aW9uLXR5cGU+amFrYXJ0YS5qbXMuUXVldWU8L21lc3NhZ2UtZGVzdGluYXRpb24tdHlwZT4KQEAgLTI2OSw3ICsyNjksNyBAQAogICAgICAgICA8cmVzLWF1dGg+Q29udGFpbmVyPC9yZXMtYXV0aD4KICAgICAgICAgPHJlcy1zaGFyaW5nLXNjb3BlPlNoYXJlYWJsZTwvcmVzLXNoYXJpbmctc2NvcGU+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KLSAgICAgIDxtZXNzYWdlLWRlc3RpbmF0aW9uLXJlZj4gICAgICAgCisgICAgICA8bWVzc2FnZS1kZXN0aW5hdGlvbi1yZWY+CiAgICAgICAgIDxkZXNjcmlwdGlvbj50aW1lcnRlc3QgZGVzdGluYXRpb248L2Rlc2NyaXB0aW9uPgogICAgICAgICA8bWVzc2FnZS1kZXN0aW5hdGlvbi1yZWYtbmFtZT5qbXMvTXlRdWV1ZTwvbWVzc2FnZS1kZXN0aW5hdGlvbi1yZWYtbmFtZT4KICAgICAgICAgPG1lc3NhZ2UtZGVzdGluYXRpb24tdHlwZT5qYWthcnRhLmptcy5RdWV1ZTwvbWVzc2FnZS1kZXN0aW5hdGlvbi10eXBlPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVydGVzdHMvZWpiL0FwcEluZm8uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnRlc3RzL2VqYi9BcHBJbmZvLmphdmEKaW5kZXggZGQxYzM1Ni4uMGJhZjcwZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVydGVzdHMvZWpiL0FwcEluZm8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJ0ZXN0cy9lamIvQXBwSW5mby5qYXZhCkBAIC0yOCw2ICsyOCw2IEBACiAKICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKICAgICB7Ci0JcmV0dXJuIGZvbzsKKyAgICByZXR1cm4gZm9vOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnRlc3RzL2VqYi9CYXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnRlc3RzL2VqYi9CYXIuamF2YQppbmRleCA4OTdiYjBhLi5iNjU3Y2E3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJ0ZXN0cy9lamIvQmFyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVydGVzdHMvZWpiL0Jhci5qYXZhCkBAIC0yMCw1ICsyMCw1IEBACiBpbXBvcnQgamFrYXJ0YS5lamIuKjsKIAogcHVibGljIGludGVyZmFjZSBCYXIgZXh0ZW5kcyBFSkJPYmplY3QsIFRpbWVyU3R1ZmYgewotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJ0ZXN0cy9lamIvQmFyRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJ0ZXN0cy9lamIvQmFyRUpCLmphdmEKaW5kZXggNDhjM2NmNi4uZWY5MTVjMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVydGVzdHMvZWpiL0JhckVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnRlc3RzL2VqYi9CYXJFSkIuamF2YQpAQCAtMTksOSArMTksOSBAQAogaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBqYWthcnRhLmVqYi4qOwogCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQmFyRUpCIAotICAgIGV4dGVuZHMgVGltZXJTdHVmZkltcGwgCi0gICAgaW1wbGVtZW50cyBFbnRpdHlCZWFuLCBUaW1lZE9iamVjdCAKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBCYXJFSkIKKyAgICBleHRlbmRzIFRpbWVyU3R1ZmZJbXBsCisgICAgaW1wbGVtZW50cyBFbnRpdHlCZWFuLCBUaW1lZE9iamVjdAogewogCiAgICAgcHJpdmF0ZSBFSkJDb250ZXh0IGNvbnRleHRfOwpAQCAtMzIsNyArMzIsNyBAQAogCiAgICAgLy8gcHJpbWFyeSBrZXkKIAotICAgIHB1YmxpYyBhYnN0cmFjdCBMb25nIGdldElkKCk7ICAgICAgCisgICAgcHVibGljIGFic3RyYWN0IExvbmcgZ2V0SWQoKTsKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRJZChMb25nIHRpbWVySWQpOwogCiAgICAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRWYWx1ZTIoKTsKQEAgLTY2LDcgKzY2LDcgQEAKIAogICAgIH0KIAotICAgIHB1YmxpYyBCYXJQcmltYXJ5S2V5IGVqYkNyZWF0ZShMb25nIGlkLCBTdHJpbmcgdmFsdWUyKSAKKyAgICBwdWJsaWMgQmFyUHJpbWFyeUtleSBlamJDcmVhdGUoTG9uZyBpZCwgU3RyaW5nIHZhbHVlMikKICAgICAgICAgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7CiAgICAgICAgIFN0cmluZyBtZXRob2ROYW1lID0gImVqYkNyZWF0ZSI7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gQmFyRUpCOjplamJDcmVhdGUiKTsKQEAgLTgwLDcgKzgwLDcgQEAKICAgICAgICAgcmV0dXJuIG5ldyBCYXJQcmltYXJ5S2V5KGlkLCB2YWx1ZTIpOwogICAgIH0KIAotICAgIHB1YmxpYyBCYXJQcmltYXJ5S2V5IGVqYkNyZWF0ZVdpdGhUaW1lcihMb25nIGlkLCBTdHJpbmcgdmFsdWUyKSAKKyAgICBwdWJsaWMgQmFyUHJpbWFyeUtleSBlamJDcmVhdGVXaXRoVGltZXIoTG9uZyBpZCwgU3RyaW5nIHZhbHVlMikKICAgICAgICAgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7CiAgICAgICAgIFN0cmluZyBtZXRob2ROYW1lID0gImVqYkNyZWF0ZVdpdGhUaW1lciI7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gQmFyRUpCOjplamJDcmVhdGVXaXRoVGltZXIiKTsKQEAgLTkyLDcgKzkyLDcgQEAKICAgICAgICAgc2V0VmFsdWUyKHZhbHVlMik7CiAgICAgICAgIHJldHVybiBuZXcgQmFyUHJpbWFyeUtleShpZCwgdmFsdWUyKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJQb3N0Q3JlYXRlKExvbmcgaWQsIFN0cmluZyB2YWx1ZTIpIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewogICAgICAgICBTdHJpbmcgbWV0aG9kTmFtZSA9ICJlamJQb3N0Q3JlYXRlIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBCYXJFSkI6OmVqYlBvc3RDcmVhdGUiKTsKQEAgLTExMyw3ICsxMTMsNyBAQAogICAgICAgICAgICAgVGltZXJTZXJ2aWNlIHRpbWVyU2VydmljZSA9IGNvbnRleHRfLmdldFRpbWVyU2VydmljZSgpOwogICAgICAgICAgICAgVGltZXIgdGltZXIgPSB0aW1lclNlcnZpY2UuY3JlYXRlVGltZXIKICAgICAgICAgICAgICAgICAoMSwgMSwgbWV0aG9kTmFtZSArIGlkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgQ3JlYXRlRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKQEAgLTEzOSw3ICsxMzksNyBAQAogICAgICAgICBjb250ZXh0XyA9IG51bGw7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZWpiSG9tZU5ld1RpbWVyQW5kUmVtb3ZlQmVhbihMb25nIGlkLCBTdHJpbmcgdmFsdWUyKSAKKyAgICBwdWJsaWMgdm9pZCBlamJIb21lTmV3VGltZXJBbmRSZW1vdmVCZWFuKExvbmcgaWQsIFN0cmluZyB2YWx1ZTIpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewogICAgICAgICBTdHJpbmcgbWV0aG9kTmFtZSA9ICJlamJIb21lTmV3VGltZXJBbmRSZW1vdmVCZWFuIjsKICAgICAgICAgY2hlY2tDYWxsZXJTZWN1cml0eUFjY2VzcyhtZXRob2ROYW1lLCB0cnVlKTsKQEAgLTE1NSw3ICsxNTUsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZWpiSG9tZU5ld1RpbWVyQW5kUmVtb3ZlQmVhbkFuZFJvbGxiYWNrKExvbmcgaWQsIFN0cmluZyB2YWx1ZTIpIAorICAgIHB1YmxpYyB2b2lkIGVqYkhvbWVOZXdUaW1lckFuZFJlbW92ZUJlYW5BbmRSb2xsYmFjayhMb25nIGlkLCBTdHJpbmcgdmFsdWUyKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKICAgICAgICAgZ2V0VGltZXJTZXJ2aWNlKCJlamJIb21lTmV3VGltZXJBbmRSZW1vdmVCZWFuQW5kUm9sbGJhY2siLCB0cnVlKTsKICAgICAgICAgZG9UaW1lclN0dWZmKCJlamJIb21lTmV3VGltZXJBbmRSZW1vdmVCZWFuQW5kUm9sbGJhY2siLCBmYWxzZSk7CkBAIC0xNzAsNyArMTcwLDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGVqYkhvbWVOaXhCZWFuQW5kUm9sbGJhY2soQmFyIGIpIAorICAgIHB1YmxpYyB2b2lkIGVqYkhvbWVOaXhCZWFuQW5kUm9sbGJhY2soQmFyIGIpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewogICAgICAgICBnZXRUaW1lclNlcnZpY2UoImVqYkhvbWVOaXhCZWFuQW5kUm9sbGJhY2siLCB0cnVlKTsKICAgICAgICAgZG9UaW1lclN0dWZmKCJlamJIb21lTml4QmVhbkFuZFJvbGxiYWNrIiwgZmFsc2UpOwpAQCAtMTkyLDcgKzE5Miw3IEBACiAgICAgICAgIGRvVGltZXJTdHVmZihtZXRob2ROYW1lLCB0cnVlKTsKICAgICAgICAgY2xlYW51cCgpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7CiAgICAgICAgIFN0cmluZyBtZXRob2ROYW1lID0gImVqYkxvYWQiOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEJhckVKQjo6ZWpiTG9hZCIpOwpAQCAtMjAxLDcgKzIwMSw3IEBACiAgICAgICAgIGdldFRpbWVyU2VydmljZShtZXRob2ROYW1lLCB0cnVlKTsKICAgICAgICAgZG9UaW1lclN0dWZmKG1ldGhvZE5hbWUsIHRydWUpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlN0b3JlKCkgewogICAgICAgICBTdHJpbmcgbWV0aG9kTmFtZSA9ICJlamJTdG9yZSI7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gQmFyRUpCOjplamJTdG9yZSIpOwpAQCAtMjEwLDcgKzIxMCw3IEBACiAgICAgICAgIGdldFRpbWVyU2VydmljZShtZXRob2ROYW1lLCB0cnVlKTsKICAgICAgICAgZG9UaW1lclN0dWZmKG1ldGhvZE5hbWUsIHRydWUpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHsKICAgICAgICAgU3RyaW5nIG1ldGhvZE5hbWUgPSAiZWpiUGFzc2l2YXRlIjsKICAgICAgICAgY2hlY2tDYWxsZXJTZWN1cml0eUFjY2VzcyhtZXRob2ROYW1lLCBmYWxzZSk7CkBAIC0yMTgsNyArMjE4LDcgQEAKICAgICAgICAgZ2V0VGltZXJTZXJ2aWNlKG1ldGhvZE5hbWUsIHRydWUpOwogICAgICAgICBkb1RpbWVyU3R1ZmYobWV0aG9kTmFtZSwgZmFsc2UpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgewogICAgICAgICBTdHJpbmcgbWV0aG9kTmFtZSA9ICJlamJBY3RpdmF0ZSI7CiAgICAgICAgIGNoZWNrQ2FsbGVyU2VjdXJpdHlBY2Nlc3MobWV0aG9kTmFtZSwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVydGVzdHMvZWpiL0JhckhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnRlc3RzL2VqYi9CYXJIb21lLmphdmEKaW5kZXggYWVlZTM3Zi4uNjA0YzE5YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVydGVzdHMvZWpiL0JhckhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJ0ZXN0cy9lamIvQmFySG9tZS5qYXZhCkBAIC0yMSwxMiArMjEsMTIgQEAKIAogcHVibGljIGludGVyZmFjZSBCYXJIb21lIGV4dGVuZHMgRUpCSG9tZSB7CiAKLSAgICBCYXIgY3JlYXRlKExvbmcgdmFsdWUxLCBTdHJpbmcgdmFsdWUyKSAKKyAgICBCYXIgY3JlYXRlKExvbmcgdmFsdWUxLCBTdHJpbmcgdmFsdWUyKQogICAgICAgICB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247Ci0gICAgQmFyIGNyZWF0ZVdpdGhUaW1lcihMb25nIHZhbHVlMSwgU3RyaW5nIHZhbHVlMikgCisgICAgQmFyIGNyZWF0ZVdpdGhUaW1lcihMb25nIHZhbHVlMSwgU3RyaW5nIHZhbHVlMikKICAgICAgICAgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwogICAgIEJhciBmaW5kQnlQcmltYXJ5S2V5KEJhclByaW1hcnlLZXkgYnBrKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247Ci0gICAgCisKICAgICB2b2lkIG5ld1RpbWVyQW5kUmVtb3ZlQmVhbihMb25nIHZhbHVlMSwgU3RyaW5nIHZhbHVlMikgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKICAgICB2b2lkIG5ld1RpbWVyQW5kUmVtb3ZlQmVhbkFuZFJvbGxiYWNrKExvbmcgdmFsdWUxLCBTdHJpbmcgdmFsdWUyKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogICAgIHZvaWQgbml4QmVhbkFuZFJvbGxiYWNrKEJhciBiKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVydGVzdHMvZWpiL0JhclByaW1hcnlLZXkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnRlc3RzL2VqYi9CYXJQcmltYXJ5S2V5LmphdmEKaW5kZXggMzI4YzYzNy4uNzBiNThjMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVydGVzdHMvZWpiL0JhclByaW1hcnlLZXkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJ0ZXN0cy9lamIvQmFyUHJpbWFyeUtleS5qYXZhCkBAIC0zNCwyMSArMzQsMjEgQEAKIAogICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb3RoZXIpCiAgICAgewotCWlmICggb3RoZXIgaW5zdGFuY2VvZiBCYXJQcmltYXJ5S2V5ICkgeworICAgIGlmICggb3RoZXIgaW5zdGFuY2VvZiBCYXJQcmltYXJ5S2V5ICkgewogICAgICAgICAgICAgQmFyUHJpbWFyeUtleSBicGsgPSAoQmFyUHJpbWFyeUtleSkgb3RoZXI7Ci0JICAgIHJldHVybiAoKGlkLmVxdWFscyhicGsuaWQpKSAKKyAgICAgICAgcmV0dXJuICgoaWQuZXF1YWxzKGJway5pZCkpCiAgICAgICAgICAgICAgICAgICAgICYmICh2YWx1ZTIuZXF1YWxzKGJway52YWx1ZTIpKSk7CiAgICAgICAgIH0KLQlyZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKQogICAgIHsKLQlyZXR1cm4gaWQuaGFzaENvZGUoKTsKKyAgICByZXR1cm4gaWQuaGFzaENvZGUoKTsKICAgICB9CiAKICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKICAgICB7Ci0JcmV0dXJuIGlkICsgIl8iICsgdmFsdWUyOworICAgIHJldHVybiBpZCArICJfIiArIHZhbHVlMjsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJ0ZXN0cy9lamIvRm9vRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJ0ZXN0cy9lamIvRm9vRUpCLmphdmEKaW5kZXggN2QwYjM4OC4uNGE1N2IxMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVydGVzdHMvZWpiL0Zvb0VKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnRlc3RzL2VqYi9Gb29FSkIuamF2YQpAQCAtNTAsNyArNTAsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7Ci0JdGhpcy5zYyA9IHNjOworICAgIHRoaXMuc2MgPSBzYzsKICAgICAgICAgc2V0Q29udGV4dChzYyk7CiAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29FSkI6OnNldFNlc3Npb25Db250ZXh0Iik7CkBAIC02Miw3ICs2Miw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBlamJ0aW1lci5Gb286OmVqYkNyZWF0ZSAhISIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gZWpidGltZXIuRm9vOjplamJDcmVhdGUgISEiKTsKICAgICAgICAgc2V0dXBKbXNDb25uZWN0aW9uKCk7CiAgICAgICAgIGNoZWNrR2V0U2V0Um9sbGJhY2tPbmx5KCJlamJDcmVhdGUiLCBmYWxzZSk7CiAgICAgICAgIGNoZWNrQ2FsbGVyU2VjdXJpdHlBY2Nlc3MoImVqYkNyZWF0ZSIsIGZhbHNlKTsKQEAgLTg2LDYgKzg2LDYgQEAKICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7CiAgICAgfQogCi0gICAgCisKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVydGVzdHMvZWpiL01lc3NhZ2VEcml2ZW5FSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnRlc3RzL2VqYi9NZXNzYWdlRHJpdmVuRUpCLmphdmEKaW5kZXggMGNjOGZjZC4uY2UwYzc0YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVydGVzdHMvZWpiL01lc3NhZ2VEcml2ZW5FSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJ0ZXN0cy9lamIvTWVzc2FnZURyaXZlbkVKQi5qYXZhCkBAIC0yMCw3ICsyMCw3IEBACiBpbXBvcnQgamFrYXJ0YS5qbXMuKjsKIGltcG9ydCBqYWthcnRhLmVqYi4qOwogCi1wdWJsaWMgY2xhc3MgTWVzc2FnZURyaXZlbkVKQiBleHRlbmRzIFRpbWVyU3R1ZmZJbXBsIAorcHVibGljIGNsYXNzIE1lc3NhZ2VEcml2ZW5FSkIgZXh0ZW5kcyBUaW1lclN0dWZmSW1wbAogICAgIGltcGxlbWVudHMgTWVzc2FnZURyaXZlbkJlYW4sIFRpbWVkT2JqZWN0LCBNZXNzYWdlTGlzdGVuZXIgewogICAgIHByaXZhdGUgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjOwogCkBAIC0zOCw3ICszOCw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlY2VpdmVkIG1lc3NhZ2UgIiArIGluZm8gKyAiICwgcmVkZWxpdmVyZWQgPSAiICsgcmVkZWxpdmVyZWQpOwogCiAgICAgICAgICAgICBpZiAoaW5mby5lcXVhbHMoInRlc3QxIikgKSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBvbk1lc3NhZ2UgOiBHb3QgdGggZm9yIHRpbWVyID0gIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gb25NZXNzYWdlIDogR290IHRoIGZvciB0aW1lciA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LmdldEluZm8oKSk7CiAgICAgICAgICAgICAgICAgZG9UaW1lclN0dWZmKCJvbk1lc3NhZ2UiLCB0cnVlKTsKICAgICAgICAgICAgICAgICBnZXRJbmZvKHRoKTsKQEAgLTQ2LDkgKzQ2LDkgQEAKICAgICAgICAgICAgICAgICBnZXRUaW1lUmVtYWluaW5nVGVzdDIoNSwgdGgpOwogCiAgICAgICAgICAgICAgICAgY2FuY2VsVGltZXIodGgpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgY3JlYXRlVGltZXJBbmRDYW5jZWwoMTAwMDAwMDApOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgVGltZXJIYW5kbGUgdDEgPSBjcmVhdGVUaW1lcigxMDAwMDAwLCAibWVzc2FnZWRyaXZlbmVqYiIpOwogICAgICAgICAgICAgICAgIGNhbmNlbFRpbWVyKHQxKTsKICAgICAgICAgICAgICAgICBUaW1lckhhbmRsZSB0MiA9IGNyZWF0ZVRpbWVyKDEwMDAwLCAibWVzc2FnZWRyaXZlbmVqYiIpOwpAQCAtNTksNyArNTksNyBAQAogICAgICAgICAgICAgICAgICAgICBpZiggaXNCTVQoKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbFRpbWVyKHRoKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbFRpbWVyQW5kUm9sbGJhY2sodGgpOyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbFRpbWVyQW5kUm9sbGJhY2sodGgpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIGlmKCBpbmZvLmVxdWFscygidGVzdDMiKSApIHsKQEAgLTgxLDggKzgxLDggQEAKICAgICAgICAgICAgICAgICBjYW5jZWxUaW1lcih0aCk7CiAgICAgICAgICAgICAgICAgVGltZXJIYW5kbGUgY3RhciA9IGNyZWF0ZVRpbWVyKDEsIDEsICJjYW5jZWxUaW1lckFuZFJvbGxiYWNrIik7CiAgICAgICAgICAgICAgICAgY2FuY2VsVGltZXIoY3Rhcik7Ci0gICAgICAgICAgICB9IAotICAgICAgICAgICAgCisgICAgICAgICAgICB9CisKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQpAQCAtOTIsNyArOTIsNyBAQAogICAgICAgICBjaGVja0NhbGxlclNlY3VyaXR5QWNjZXNzKCJlamJUaW1lb3V0IiwgZmFsc2UpOwogCiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIE1lc3NhZ2VEcml2ZW5FSkI6OmVqYlRpbWVvdXQgLS0+ICIgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIE1lc3NhZ2VEcml2ZW5FSkI6OmVqYlRpbWVvdXQgLS0+ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHQuZ2V0SW5mbygpKTsKICAgICAgICAgfSBjYXRjaChSdW50aW1lRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZ290IGV4Y2VwdGlvbiB3aGlsZSBjYWxsaW5nIGdldEluZm8iKTsKQEAgLTExMSw5ICsxMTEsOSBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldE1lc3NhZ2VEcml2ZW5Db250ZXh0KE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYykgewotCXRoaXMubWRjID0gbWRjOworICAgIHRoaXMubWRjID0gbWRjOwogICAgICAgICBzZXRDb250ZXh0KG1kYyk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBlamJ0aW1lci5NZXNzYWdlRHJpdmVuRUpCOjpzZXRNZXNzYWdlRHJpdmVuQ29udGV4dCAhISIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gZWpidGltZXIuTWVzc2FnZURyaXZlbkVKQjo6c2V0TWVzc2FnZURyaXZlbkNvbnRleHQgISEiKTsKICAgICAgICAgY2hlY2tDYWxsZXJTZWN1cml0eUFjY2Vzcygic2V0TWVzc2FnZURyaXZlbkNvbnRleHQiLCBmYWxzZSk7CiAKICAgICAgICAgZ2V0VGltZXJTZXJ2aWNlKCJzZXRNZXNzYWdlRHJpdmVuQ29udGV4dCIsIGZhbHNlKTsKQEAgLTEyMSw3ICsxMjEsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gZWpidGltZXIuTWVzc2FnZURyaXZlbkVKQjo6ZWpiQ3JlYXRlICEhIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBlamJ0aW1lci5NZXNzYWdlRHJpdmVuRUpCOjplamJDcmVhdGUgISEiKTsKICAgICAgICAgc2V0dXBKbXNDb25uZWN0aW9uKCk7CiAgICAgICAgIGNoZWNrR2V0U2V0Um9sbGJhY2tPbmx5KCJlamJDcmVhdGUiLCBmYWxzZSk7CiAgICAgICAgIGNoZWNrQ2FsbGVyU2VjdXJpdHlBY2Nlc3MoImVqYkNyZWF0ZSIsIGZhbHNlKTsKQEAgLTEzMCw3ICsxMzAsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIGVqYnRpbWVyLk1lc3NhZ2VEcml2ZW5FSkI6OmVqYlJlbW92ZSAhISIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gZWpidGltZXIuTWVzc2FnZURyaXZlbkVKQjo6ZWpiUmVtb3ZlICEhIik7CiAgICAgICAgIGNoZWNrQ2FsbGVyU2VjdXJpdHlBY2Nlc3MoImVqYlJlbW92ZSIsIGZhbHNlKTsKICAgICAgICAgY2hlY2tHZXRTZXRSb2xsYmFja09ubHkoImVqYlJlbW92ZSIsIGZhbHNlKTsKICAgICAgICAgZ2V0VGltZXJTZXJ2aWNlKCJlamJSZW1vdmUiLCB0cnVlKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnRlc3RzL2VqYi9TdGF0ZWZ1bEVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVydGVzdHMvZWpiL1N0YXRlZnVsRUpCLmphdmEKaW5kZXggZWZjOTkyNy4uYTU1NDk4YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVydGVzdHMvZWpiL1N0YXRlZnVsRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVydGVzdHMvZWpiL1N0YXRlZnVsRUpCLmphdmEKQEAgLTI5LDcgKzI5LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgewotCXRoaXMuc2MgPSBzYzsKKyAgICB0aGlzLnNjID0gc2M7CiAgICAgICAgIHNldENvbnRleHQoc2MpOwogCiAgICAgICAgIGNoZWNrQ2FsbGVyU2VjdXJpdHlBY2Nlc3MoInNldFNlc3Npb25Db250ZXh0IiwgZmFsc2UpOwpAQCAtMzcsNyArMzcsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZShUaW1lckhhbmRsZSB0aCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBlamJ0aW1lci5TdGF0ZWZ1bDo6ZWpiQ3JlYXRlICEhIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBlamJ0aW1lci5TdGF0ZWZ1bDo6ZWpiQ3JlYXRlICEhIik7CiAKICAgICAgICAgdGltZXJIYW5kbGUgPSB0aDsKIApAQCAtNjgsOCArNjgsOCBAQAogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBhZnRlckJlZ2luKCkgeyAgCi0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gYWZ0ZXJCZWdpbiIpOyAKKyAgICBwdWJsaWMgdm9pZCBhZnRlckJlZ2luKCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIGFmdGVyQmVnaW4iKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFRpbWVyIHQgPSB0aW1lckhhbmRsZS5nZXRUaW1lcigpOwogICAgICAgICAgICAgdC5nZXRJbmZvKCk7CkBAIC04Miw3ICs4Miw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgYmVmb3JlQ29tcGxldGlvbigpIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbiBiZWZvcmVDb21wbGV0aW9uIik7IAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIGJlZm9yZUNvbXBsZXRpb24iKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFRpbWVyIHQgPSB0aW1lckhhbmRsZS5nZXRUaW1lcigpOwogICAgICAgICB9IGNhdGNoKE5vU3VjaE9iamVjdExvY2FsRXhjZXB0aW9uIG5zb2xlKSB7CkBAIC05NSw3ICs5NSw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgYWZ0ZXJDb21wbGV0aW9uKGJvb2xlYW4gY29tbWl0dGVkKSB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gYWZ0ZXJDb21wbGV0aW9uLiBjb21taXR0ZWQgPSAiICsgY29tbWl0dGVkKTsgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gYWZ0ZXJDb21wbGV0aW9uLiBjb21taXR0ZWQgPSAiICsgY29tbWl0dGVkKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFRpbWVyIHQgPSB0aW1lckhhbmRsZS5nZXRUaW1lcigpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFcnJvciA6IHNob3VsZCBoYXZlIGdvdHRlbiBleGNlcHRpb24gaW4gIiArCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJ0ZXN0cy9lamIvVGltZXJTdHVmZi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3RpbWVyL3RpbWVydGVzdHMvZWpiL1RpbWVyU3R1ZmYuamF2YQppbmRleCAzZGYwY2JhLi40NzA1NWM2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJ0ZXN0cy9lamIvVGltZXJTdHVmZi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnRlc3RzL2VqYi9UaW1lclN0dWZmLmphdmEKQEAgLTY2LDEwICs2NiwxMCBAQAogICAgIHZvaWQgYXNzZXJ0VGltZXJOb3RBY3RpdmUoVGltZXJIYW5kbGUgaGFuZGxlKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgdm9pZCBzZW5kTWVzc2FnZUFuZENyZWF0ZVRpbWVyKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiwgRXhjZXB0aW9uOwotICAgIHZvaWQgcmVjdk1lc3NhZ2VBbmRDcmVhdGVUaW1lcihib29sZWFuIGV4cGVjdE1lc3NhZ2UpIAorICAgIHZvaWQgcmVjdk1lc3NhZ2VBbmRDcmVhdGVUaW1lcihib29sZWFuIGV4cGVjdE1lc3NhZ2UpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24sIEV4Y2VwdGlvbjsKLSAgICB2b2lkIHNlbmRNZXNzYWdlQW5kQ3JlYXRlVGltZXJBbmRSb2xsYmFjaygpIAorICAgIHZvaWQgc2VuZE1lc3NhZ2VBbmRDcmVhdGVUaW1lckFuZFJvbGxiYWNrKCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiwgRXhjZXB0aW9uOwotICAgIHZvaWQgcmVjdk1lc3NhZ2VBbmRDcmVhdGVUaW1lckFuZFJvbGxiYWNrKGJvb2xlYW4gZXhwZWN0TWVzc2FnZSkgCisgICAgdm9pZCByZWN2TWVzc2FnZUFuZENyZWF0ZVRpbWVyQW5kUm9sbGJhY2soYm9vbGVhbiBleHBlY3RNZXNzYWdlKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uLCBFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdGltZXIvdGltZXJ0ZXN0cy9lamIvVGltZXJTdHVmZkltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnRlc3RzL2VqYi9UaW1lclN0dWZmSW1wbC5qYXZhCmluZGV4IGU0OTYzMzcuLjMwNDY1Y2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnRlc3RzL2VqYi9UaW1lclN0dWZmSW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90aW1lci90aW1lcnRlc3RzL2VqYi9UaW1lclN0dWZmSW1wbC5qYXZhCkBAIC0zNCwxNCArMzQsMTQgQEAKIGltcG9ydCBqYWthcnRhLmptcy5UZXh0TWVzc2FnZTsKIAogcHVibGljIGNsYXNzIFRpbWVyU3R1ZmZJbXBsIGltcGxlbWVudHMgVGltZXJTdHVmZiB7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVFhfQ01UID0gMDsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVFhfQk1UID0gMTsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVFhfVU5TUEVDSUZJRUQgPSAyOwotICAgIAorCiAgICAgcHJpdmF0ZSBFSkJDb250ZXh0IGNvbnRleHRfOwogICAgIHByaXZhdGUgaW50IHR4TW9kZSA9IFRYX0NNVDsKLSAgICAKKwogICAgIHByaXZhdGUgUXVldWUgcXVldWU7CiAgICAgcHJpdmF0ZSBRdWV1ZVNlc3Npb24gc2Vzc2lvbjsKICAgICBwcml2YXRlIFF1ZXVlQ29ubmVjdGlvbiBjb25uZWN0aW9uOwpAQCAtNjEsMTIgKzYxLDEyIEBACiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHR4TW9kZSA9IFRYX1VOU1BFQ0lGSUVEOwogICAgICAgICAgICAgfQotCSAgICAvKiogVE9ETworICAgICAgICAvKiogVE9ETwogICAgICAgICAgICAgcXVldWUgPSAoUXVldWUpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9qbXMvTXlRdWV1ZSIpOwogCi0gICAgICAgICAgICBxY0ZhY3RvcnkgPSAoUXVldWVDb25uZWN0aW9uRmFjdG9yeSkgCisgICAgICAgICAgICBxY0ZhY3RvcnkgPSAoUXVldWVDb25uZWN0aW9uRmFjdG9yeSkKICAgICAgICAgICAgICAgICBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvam1zL015UXVldWVDb25uZWN0aW9uRmFjdG9yeSIpOwotCSAgICAqKi8KKyAgICAgICAgKiovCiAKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTc2LDcgKzc2LDcgQEAKICAgICBwcm90ZWN0ZWQgYm9vbGVhbiBpc0NNVCgpIHsgcmV0dXJuIHR4TW9kZSA9PSBUWF9DTVQ7IH0KICAgICBwcm90ZWN0ZWQgYm9vbGVhbiBpc0JNVCgpIHsgcmV0dXJuIHR4TW9kZSA9PSBUWF9CTVQ7IH0KICAgICBwcm90ZWN0ZWQgYm9vbGVhbiBpc1R4VW5zcGVjaWZpZWQoKSB7IHJldHVybiB0eE1vZGUgPT0gVFhfVU5TUEVDSUZJRUQ7IH0KLSAgICAKKwogICAgIHB1YmxpYyBUaW1lckhhbmRsZSBjcmVhdGVUaW1lcihsb25nIGR1cmF0aW9uLCBTdHJpbmcgaW5mbykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiwgRXhjZXB0aW9uIHsKICAgICAgICAgVGltZXJTZXJ2aWNlIHRzID0gY29udGV4dF8uZ2V0VGltZXJTZXJ2aWNlKCk7CiAgICAgICAgIFRpbWVyIHQgPSB0cy5jcmVhdGVUaW1lcihkdXJhdGlvbiwgaW5mbyk7CkBAIC04NywzMCArODcsMzAgQEAKICAgICAgICAgcmV0dXJuIGNyZWF0ZVRpbWVyKGR1cmF0aW9uLCAiY3JlYXRlVGltZXI8bG9uZz4iICsgZHVyYXRpb24pOwogICAgIH0KIAotICAgIHB1YmxpYyBUaW1lckhhbmRsZSBjcmVhdGVUaW1lcihsb25nIGluaXRpYWxEdXJhdGlvbiwgbG9uZyBpbnRlcnZhbCkgCisgICAgcHVibGljIFRpbWVySGFuZGxlIGNyZWF0ZVRpbWVyKGxvbmcgaW5pdGlhbER1cmF0aW9uLCBsb25nIGludGVydmFsKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uLCBFeGNlcHRpb24gewotICAgICAgICByZXR1cm4gY3JlYXRlVGltZXIoaW5pdGlhbER1cmF0aW9uLCBpbnRlcnZhbCwgCisgICAgICAgIHJldHVybiBjcmVhdGVUaW1lcihpbml0aWFsRHVyYXRpb24sIGludGVydmFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgImNyZWF0ZVRpbWVyPGxvbmcsIGxvbmc+IiArIGluaXRpYWxEdXJhdGlvbiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLCIgKyBpbnRlcnZhbCk7CiAgICAgfQogCi0gICAgcHVibGljIFRpbWVySGFuZGxlIGNyZWF0ZVRpbWVyKGxvbmcgaW5pdGlhbER1cmF0aW9uLCBsb25nIGludGVydmFsLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGluZm8pIAorICAgIHB1YmxpYyBUaW1lckhhbmRsZSBjcmVhdGVUaW1lcihsb25nIGluaXRpYWxEdXJhdGlvbiwgbG9uZyBpbnRlcnZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGluZm8pCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24sIEV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKCBpc0JNVCgpICkgewogICAgICAgICAgICAgY29udGV4dF8uZ2V0VXNlclRyYW5zYWN0aW9uKCkuYmVnaW4oKTsKICAgICAgICAgfQogICAgICAgICBUaW1lclNlcnZpY2UgdHMgPSBjb250ZXh0Xy5nZXRUaW1lclNlcnZpY2UoKTsKLSAgICAgICAgVGltZXIgdCA9IHRzLmNyZWF0ZVRpbWVyKGluaXRpYWxEdXJhdGlvbiwgaW50ZXJ2YWwsIAorICAgICAgICBUaW1lciB0ID0gdHMuY3JlYXRlVGltZXIoaW5pdGlhbER1cmF0aW9uLCBpbnRlcnZhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBBcHBJbmZvKGluZm8pKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgIGlmKCBpc0JNVCgpICkgewogICAgICAgICAgICAgY29udGV4dF8uZ2V0VXNlclRyYW5zYWN0aW9uKCkuY29tbWl0KCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHQuZ2V0SGFuZGxlKCk7CiAgICAgfQogCi0gICAgcHVibGljIFRpbWVySGFuZGxlIGNyZWF0ZVRpbWVyKERhdGUgZXhwaXJhdGlvblRpbWUpIAorICAgIHB1YmxpYyBUaW1lckhhbmRsZSBjcmVhdGVUaW1lcihEYXRlIGV4cGlyYXRpb25UaW1lKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uLCBFeGNlcHRpb24gewogICAgICAgICBUaW1lclNlcnZpY2UgdHMgPSBjb250ZXh0Xy5nZXRUaW1lclNlcnZpY2UoKTsKICAgICAgICAgaWYoIGlzQk1UKCkgKSB7CkBAIC0xMjksNyArMTI5LDcgQEAKICAgICAgICAgcmV0dXJuIHQuZ2V0SGFuZGxlKCk7CiAgICAgfQogCi0gICAgcHVibGljIFRpbWVySGFuZGxlIGNyZWF0ZVRpbWVyKERhdGUgZXhwaXJhdGlvblRpbWUsIGxvbmcgaW50ZXJ2YWwpIAorICAgIHB1YmxpYyBUaW1lckhhbmRsZSBjcmVhdGVUaW1lcihEYXRlIGV4cGlyYXRpb25UaW1lLCBsb25nIGludGVydmFsKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uLCBFeGNlcHRpb24gewogCiAgICAgICAgIGlmKCBpc0JNVCgpICkgewpAQCAtMTc0LDEyICsxNzQsMTIgQEAKIAogICAgIHB1YmxpYyB2b2lkIGNyZWF0ZVRpbWVyQW5kQ2FuY2VsQW5kQ2FuY2VsKGxvbmcgZHVyYXRpb24pIHRocm93cyBSZW1vdGVFeGNlcHRpb24sIEV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKCBpc1R4VW5zcGVjaWZpZWQoKSApIHsKLSAgICAgICAgICAgIHJldHVybjsgCisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0gZWxzZSBpZiggaXNCTVQoKSApIHsKICAgICAgICAgICAgIGNvbnRleHRfLmdldFVzZXJUcmFuc2FjdGlvbigpLmJlZ2luKCk7CiAgICAgICAgIH0KICAgICAgICAgVGltZXJTZXJ2aWNlIHRzID0gY29udGV4dF8uZ2V0VGltZXJTZXJ2aWNlKCk7Ci0gICAgICAgIFRpbWVyIHQgPSB0cy5jcmVhdGVUaW1lcihkdXJhdGlvbiwgImNyZWF0ZVRpbWVyQW5kQ2FuY2VsQW5kQ2FuY2VsIiAKKyAgICAgICAgVGltZXIgdCA9IHRzLmNyZWF0ZVRpbWVyKGR1cmF0aW9uLCAiY3JlYXRlVGltZXJBbmRDYW5jZWxBbmRDYW5jZWwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGR1cmF0aW9uKTsKICAgICAgICAgdC5jYW5jZWwoKTsKICAgICAgICAgdC5jYW5jZWwoKTsKQEAgLTE4OCw3ICsxODgsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgY3JlYXRlVGltZXJBbmRDYW5jZWxBbmRSb2xsYmFjayhsb25nIGR1cmF0aW9uKSAKKyAgICBwdWJsaWMgdm9pZCBjcmVhdGVUaW1lckFuZENhbmNlbEFuZFJvbGxiYWNrKGxvbmcgZHVyYXRpb24pCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24sIEV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKCBpc1R4VW5zcGVjaWZpZWQoKSApIHsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE5Niw3ICsxOTYsNyBAQAogICAgICAgICAgICAgY29udGV4dF8uZ2V0VXNlclRyYW5zYWN0aW9uKCkuYmVnaW4oKTsKICAgICAgICAgfQogICAgICAgICBUaW1lclNlcnZpY2UgdHMgPSBjb250ZXh0Xy5nZXRUaW1lclNlcnZpY2UoKTsKLSAgICAgICAgVGltZXIgdCA9IHRzLmNyZWF0ZVRpbWVyKGR1cmF0aW9uLCAiY3JlYXRlVGltZXJBbmRDYW5jZWxBbmRSb2xsYmFjayIgCisgICAgICAgIFRpbWVyIHQgPSB0cy5jcmVhdGVUaW1lcihkdXJhdGlvbiwgImNyZWF0ZVRpbWVyQW5kQ2FuY2VsQW5kUm9sbGJhY2siCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGR1cmF0aW9uKTsKICAgICAgICAgdC5jYW5jZWwoKTsKICAgICAgICAgaWYoIGlzQk1UKCkgKSB7CkBAIC0yNDMsOCArMjQzLDggQEAKICAgICAgICAgICAgIGNvbnRleHRfLmdldFVzZXJUcmFuc2FjdGlvbigpLmNvbW1pdCgpOwogICAgICAgICB9CiAgICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIGNhbmNlbFRpbWVyQW5kUm9sbGJhY2soVGltZXJIYW5kbGUgdGltZXJIYW5kbGUpIAorCisgICAgcHVibGljIHZvaWQgY2FuY2VsVGltZXJBbmRSb2xsYmFjayhUaW1lckhhbmRsZSB0aW1lckhhbmRsZSkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiwgRXhjZXB0aW9uIHsKICAgICAgICAgaWYoIGlzVHhVbnNwZWNpZmllZCgpICkgewogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjYwLDcgKzI2MCw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBjYW5jZWxUaW1lckFuZENhbmNlbEFuZFJvbGxiYWNrKFRpbWVySGFuZGxlIHRpbWVySGFuZGxlKSAKKyAgICBwdWJsaWMgdm9pZCBjYW5jZWxUaW1lckFuZENhbmNlbEFuZFJvbGxiYWNrKFRpbWVySGFuZGxlIHRpbWVySGFuZGxlKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uLCBFeGNlcHRpb24gewogICAgICAgICBpZiggaXNUeFVuc3BlY2lmaWVkKCkgKSB7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0zMTEsNyArMzExLDcgQEAKICAgICAgICAgICAgIC8vIHN1Y2Nlc3MKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSZW1vdGVFeGNlcHRpb24oImdldFRpbWVycyBmYWlsdXJlIik7Ci0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICB9CiAgICAgfQogCiAgICAgcHVibGljIFRpbWVySGFuZGxlIGdldFRpbWVSZW1haW5pbmdUZXN0MShpbnQgbnVtSXRlcmF0aW9ucykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiwgRXhjZXB0aW9uIHsKQEAgLTM3Miw3ICszNzIsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgLy8gTWFrZSBzdXJlIHRoZXJlIGFyZSBubyBhY3RpdmUgdGltZXJzLiAgCisgICAgLy8gTWFrZSBzdXJlIHRoZXJlIGFyZSBubyBhY3RpdmUgdGltZXJzLgogICAgIHB1YmxpYyB2b2lkIGFzc2VydE5vVGltZXJzKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiwgRXhjZXB0aW9uIHsKICAgICAgICAgY2hlY2tDYWxsZXJTZWN1cml0eUFjY2VzcygiYXNzZXJ0Tm9UaW1lcnMiLCB0cnVlKTsKICAgICAgICAgVGltZXJTZXJ2aWNlIHRzID0gY29udGV4dF8uZ2V0VGltZXJTZXJ2aWNlKCk7CkBAIC0zODIsMTEgKzM4MiwxMSBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgYXNzZXJ0VGltZXJOb3RBY3RpdmUoVGltZXJIYW5kbGUgdGltZXJIYW5kbGUpIAorICAgIHB1YmxpYyB2b2lkIGFzc2VydFRpbWVyTm90QWN0aXZlKFRpbWVySGFuZGxlIHRpbWVySGFuZGxlKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFRpbWVyIHQgPSB0aW1lckhhbmRsZS5nZXRUaW1lcigpOwotICAgICAgICAgICAgdGhyb3cgCisgICAgICAgICAgICB0aHJvdwogICAgICAgICAgICAgICAgIG5ldyBFeGNlcHRpb24oImFzc2VydFRpbWVyTm90QWN0aXZlIGNhbGxlZCB3aXRoIGFjdGl2ZSB0aW1lciIpOwogICAgICAgICB9IGNhdGNoKE5vU3VjaE9iamVjdExvY2FsRXhjZXB0aW9uIG5zb2xlKSB7CiAgICAgICAgICAgICAvLyBjYXVnaHQgZXhwZWN0ZWQgZXhjZXB0aW9uCkBAIC0zOTUsMTAgKzM5NSwxMCBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIFNlcmlhbGl6YWJsZSBnZXRJbmZvTm9FcnJvcihUaW1lckhhbmRsZSB0aW1lckhhbmRsZSkgCisgICAgcHVibGljIFNlcmlhbGl6YWJsZSBnZXRJbmZvTm9FcnJvcihUaW1lckhhbmRsZSB0aW1lckhhbmRsZSkKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiBnZXRJbmZvKHRpbWVySGFuZGxlLCBmYWxzZSk7Ci0gICAgICAgIAorCiAgICAgfQogCiAgICAgcHVibGljIFNlcmlhbGl6YWJsZSBnZXRJbmZvKFRpbWVySGFuZGxlIHRpbWVySGFuZGxlKSB0aHJvd3MgRXhjZXB0aW9uIHsKQEAgLTQ0OSwxOCArNDQ5LDE4IEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCByZWN2TWVzc2FnZUFuZENyZWF0ZVRpbWVyKGJvb2xlYW4gZXhwZWN0TWVzc2FnZSkgCisgICAgcHVibGljIHZvaWQgcmVjdk1lc3NhZ2VBbmRDcmVhdGVUaW1lcihib29sZWFuIGV4cGVjdE1lc3NhZ2UpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24sIEV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKCBpc1R4VW5zcGVjaWZpZWQoKSApIHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICB0cnkgewotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmKCBpc0JNVCgpICkgewogICAgICAgICAgICAgICAgIGNvbnRleHRfLmdldFVzZXJUcmFuc2FjdGlvbigpLmJlZ2luKCk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHJlY3ZNZXNzYWdlQW5kQ3JlYXRlVGltZXIoInJlY3ZNZXNzYWdlQW5kQ3JlYXRlVGltZXIiLCAKKyAgICAgICAgICAgIHJlY3ZNZXNzYWdlQW5kQ3JlYXRlVGltZXIoInJlY3ZNZXNzYWdlQW5kQ3JlYXRlVGltZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RNZXNzYWdlKTsKIAogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CkBAIC00NzQsNyArNDc0LDcgQEAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHJlY3ZNZXNzYWdlQW5kQ3JlYXRlVGltZXJBbmRSb2xsYmFjayhib29sZWFuIGV4cGVjdE1lc3NhZ2UpIAorICAgIHB1YmxpYyB2b2lkIHJlY3ZNZXNzYWdlQW5kQ3JlYXRlVGltZXJBbmRSb2xsYmFjayhib29sZWFuIGV4cGVjdE1lc3NhZ2UpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24sIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgaWYoIGlzVHhVbnNwZWNpZmllZCgpICkgewpAQCAtNTE1LDcgKzUxNSw3IEBACiAgICAgICAgICAgICBUaW1lckhhbmRsZSB0aCA9IHQuZ2V0SGFuZGxlKCk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIHRocm93IGU7Ci0gICAgICAgIH0gCisgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNTI2LDExICs1MjYsMTEgQEAKICAgICAgICAgICAgIFF1ZXVlUmVjZWl2ZXIgcmVjZWl2ZXIgPSBzZXNzaW9uLmNyZWF0ZVJlY2VpdmVyKHF1ZXVlKTsKICAgICAgICAgICAgIC8vIFNlbmQgYSBtZXNzYWdlLgogICAgICAgICAgICAgVGV4dE1lc3NhZ2UgbWVzc2FnZSA9IChUZXh0TWVzc2FnZSkgcmVjZWl2ZXIucmVjZWl2ZU5vV2FpdCgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmKCBtZXNzYWdlID09IG51bGwgKSB7CiAgICAgICAgICAgICAgICAgaWYoIGV4cGVjdE1lc3NhZ2UgKSB7CiAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZW1vdGVFeGNlcHRpb24oIkV4cGVjdGluZyBtZXNzYWdlIGluICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWN2TWVzc2FnZUFuZENyZWF0ZVRpbWVyQW5kUm9sbGJhY2siKTsgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWN2TWVzc2FnZUFuZENyZWF0ZVRpbWVyQW5kUm9sbGJhY2siKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGlmKCAhZXhwZWN0TWVzc2FnZSApIHsKQEAgLTUzOCwxMyArNTM4LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5nZXRUZXh0KCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBUaW1lclNlcnZpY2UgdHMgPSBjb250ZXh0Xy5nZXRUaW1lclNlcnZpY2UoKTsKICAgICAgICAgICAgIFRpbWVyIHQgPSB0cy5jcmVhdGVUaW1lcigxLCB0aW1lck5hbWUpOwogICAgICAgICAgICAgVGltZXJIYW5kbGUgdGggPSB0LmdldEhhbmRsZSgpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICB0aHJvdyBlOwotICAgICAgICB9IAorICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTY5Nyw3ICs2OTcsNyBAQAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZ2V0VGltZXJTZXJ2aWNlKCJlamJUaW1lb3V0IiwgdHJ1ZSk7CiAgICAgICAgICAgICBkb1RpbWVyU3R1ZmYoImVqYlRpbWVvdXQiLCB0cnVlKTsKLSAgICAgICAgfSAKKyAgICAgICAgfQogICAgIH0KIAogICAgIHByb3RlY3RlZCB2b2lkIGNoZWNrQ2FsbGVyU2VjdXJpdHlBY2Nlc3MoU3RyaW5nIG1ldGhvZCwgYm9vbGVhbiBhbGxvd2VkKSB7CkBAIC03MzksMTkgKzczOSwxOSBAQAogCiAKICAgICBwcm90ZWN0ZWQgdm9pZCBzZXR1cEptc0Nvbm5lY3Rpb24oKSB7Ci0JLyoqIFRPRE8KLQkKKyAgICAvKiogVE9ETworCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgY29ubmVjdGlvbiA9IHFjRmFjdG9yeS5jcmVhdGVRdWV1ZUNvbm5lY3Rpb24oKTsKICAgICAgICAgICAgIHNlc3Npb24gPSBjb25uZWN0aW9uLmNyZWF0ZVF1ZXVlU2Vzc2lvbih0cnVlLCAwKTsKICAgICAgICAgICAgIGNvbm5lY3Rpb24uc3RhcnQoKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeyBlLnByaW50U3RhY2tUcmFjZSgpOyB9Ci0JKi8KKyAgICAqLwogICAgIH0KIAogICAgIHByb3RlY3RlZCB2b2lkIGNsZWFudXAoKSB7Ci0JLyoqIFRPRE8KKyAgICAvKiogVE9ETwogICAgICAgICBpZiggY29ubmVjdGlvbiAhPSBudWxsICkgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBjb25uZWN0aW9uLmNsb3NlKCk7CkBAIC03NjAsNyArNzYwLDcgQEAKICAgICAgICAgICAgICAgICBqbXNlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0JKiovCisgICAgKiovCiAgICAgfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90eHByb3AvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3R4cHJvcC9idWlsZC54bWwKaW5kZXggZTAzZDM5MS4uZDNkYWRiNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3R4cHJvcC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3R4cHJvcC9idWlsZC54bWwKQEAgLTQ2LDkgKzQ2LDkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPgotCQlVc2FnZToKLQkJCWFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZWpiLXR4cHJvcCB0ZXN0cykKLQk8L2VjaG8+CisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamItdHhwcm9wIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90eHByb3AvY210dGltZW91dC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3R4cHJvcC9jbXR0aW1lb3V0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNzZmNGZkOC4uYTY3YzdhZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3R4cHJvcC9jbXR0aW1lb3V0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3R4cHJvcC9jbXR0aW1lb3V0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIxICsxNSwyMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLXR4cHJvcC1jbXR0aW1lb3V0Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdHhwcm9wL2NtdHRpbWVvdXQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3R4cHJvcC9jbXR0aW1lb3V0L2J1aWxkLnhtbAppbmRleCA5NGQ1ZGY5Li5hNTNiMjllIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdHhwcm9wL2NtdHRpbWVvdXQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90eHByb3AvY210dGltZW91dC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDE0ICs0NiwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovU2ltcGxlU0xTQkhvbWUuY2xhc3MsKiovU2ltcGxlU0xTQi5jbGFzcywqKi9TaW1wbGVFbnRpdHlIb21lLmNsYXNzLCoqL1NpbXBsZUVudGl0eS5jbGFzcywqKi8qQ2xpZW50Ki5jbGFzcywqKi8qRm9vLmNsYXNzLCoqLypGb29Ib21lLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYxLDEwICs2MSwxMCBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdHhwcm9wL2NtdHRpbWVvdXQvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3R4cHJvcC9jbXR0aW1lb3V0L2NsaWVudC9DbGllbnQuamF2YQppbmRleCBhMzllOThhLi4wZmZhM2VmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdHhwcm9wL2NtdHRpbWVvdXQvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90eHByb3AvY210dGltZW91dC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTQwLDI3ICs0MCwyNyBAQAogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiZWpiLXR4cHJvcC1jbXR0aW1lb3V0Iik7Ci0gICAgfSAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIENsaWVudCAoU3RyaW5nW10gYXJncykgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tpbmcgdXAgZWpiIHJlZiAiKTsKLSAgICAgICAgICAgIC8vIGNyZWF0ZSBFSkIgdXNpbmcgZmFjdG9yeSBmcm9tIGNvbnRhaW5lciAKKyAgICAgICAgICAgIC8vIGNyZWF0ZSBFSkIgdXNpbmcgZmFjdG9yeSBmcm9tIGNvbnRhaW5lcgogICAgICAgICAgICAgT2JqZWN0IG9ianJlZiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlU0xTQkhvbWUiKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigib2JqcmVmID0gIiArIG9ianJlZik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIFNpbXBsZVNMU0JIb21lICBob21lID0gKFNpbXBsZVNMU0JIb21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdwogICAgICAgICAgICAgICAgIChvYmpyZWYsIFNpbXBsZVNMU0JIb21lLmNsYXNzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIk5hcnJvd2VkIGhvbWUhISIpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIAorCisKICAgICAgICAgICAgIFNpbXBsZVNMU0IgZiA9IGhvbWUuY3JlYXRlKCk7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkdvdCB0aGUgRUpCISEiKTsKIApAQCAtNzIsNyArNzIsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBtYWluIiAsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIGRvVGVzdDEoU2ltcGxlU0xTQiByZWYpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIC8vIGludm9rZSBtZXRob2Qgb24gdGhlIEVKQgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3R4cHJvcC9jbXR0aW1lb3V0L2VqYi9Gb29CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdHhwcm9wL2NtdHRpbWVvdXQvZWpiL0Zvb0JlYW4uamF2YQppbmRleCBhOWQxMmNjLi4xY2Q3MzE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdHhwcm9wL2NtdHRpbWVvdXQvZWpiL0Zvb0JlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdHhwcm9wL2NtdHRpbWVvdXQvZWpiL0Zvb0JlYW4uamF2YQpAQCAtMTgsNyArMTgsNyBAQAogCiBpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwogaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOwotaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsgCitpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25CZWFuOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0OwogaW1wb3J0IGpha2FydGEuZWpiLkVKQkV4Y2VwdGlvbjsKQEAgLTM2LDExICszNiwxMSBAQAogICAgIHB1YmxpYyBGb29CZWFuKCkge30KIAogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vQmVhbjo6ZWpiQ3JlYXRlICEhIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29CZWFuOjplamJDcmVhdGUgISEiKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgewotCXRoaXMuc2MgPSBzYzsKKyAgICB0aGlzLnNjID0gc2M7CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gaW52b2tlTWV0aG9kKGludCB0aW1lb3V0KSAgewpAQCAtNDksMTQgKzQ5LDE0IEBACiAgICAgICAgIGJvb2xlYW4gbWFya2VkID0gc2MuZ2V0Um9sbGJhY2tPbmx5KCk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL2hlbGxvIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIEhlbGxvSG9tZSAgaG9tZSA9IChIZWxsb0hvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93CiAgICAgICAgICAgICAgICAgKG9ianJlZiwgSGVsbG9Ib21lLmNsYXNzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBIZWxsbyBociA9IGhvbWUuY3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIG1hcmtlZCA9IHNjLmdldFJvbGxiYWNrT25seSgpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCZWZvcmUgaW52b2NhdGlvbiBjdHguZ2V0Um9sbGJhY2tPbmx5KCk6ICIKICAgICAgICAgICAgICAgICAgICAgKyBtYXJrZWQpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3R4cHJvcC9jbXR0aW1lb3V0L2VqYi9IZWxsb0JlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90eHByb3AvY210dGltZW91dC9lamIvSGVsbG9CZWFuLmphdmEKaW5kZXggODBhOWRiOC4uNGJjYmM3MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3R4cHJvcC9jbXR0aW1lb3V0L2VqYi9IZWxsb0JlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdHhwcm9wL2NtdHRpbWVvdXQvZWpiL0hlbGxvQmVhbi5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIGltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CiBpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7Ci1pbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOyAKK2ltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkJlYW47CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQ7CiBpbXBvcnQgamFrYXJ0YS5lamIuRUpCRXhjZXB0aW9uOwpAQCAtMzEsMTEgKzMxLDExIEBACiAgICAgcHVibGljIEhlbGxvQmVhbigpIHt9CiAKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvQmVhbjo6ZWpiQ3JlYXRlICEhIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb0JlYW46OmVqYkNyZWF0ZSAhISIpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7Ci0JdGhpcy5zYyA9IHNjOworICAgIHRoaXMuc2MgPSBzYzsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBjb21wdXRlKGludCB0aW1lb3V0KSB7CkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICsgIjsgdGltZSBsZWZ0ID0gIiArICgoZGVhZGxpbmUgLSBub3cpIC8gMTAwMCkKICAgICAgICAgICAgICAgICAgICAgKyAiIHNlY29uZHMuIik7CiAgICAgICAgICAgICBzb3J0QXJyYXkoMTAyNCk7Ci0gICAgICAgICAgICB0cnkge1RocmVhZC5zbGVlcCgxMCk7fSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7fSAKKyAgICAgICAgICAgIHRyeSB7VGhyZWFkLnNsZWVwKDEwKTt9IGNhdGNoIChFeGNlcHRpb24gZXgpIHt9CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90eHByb3AvY210dGltZW91dC9lamIvU2ltcGxlRW50aXR5QmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3R4cHJvcC9jbXR0aW1lb3V0L2VqYi9TaW1wbGVFbnRpdHlCZWFuLmphdmEKaW5kZXggY2NkOTExYy4uMjk4YzJhOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3R4cHJvcC9jbXR0aW1lb3V0L2VqYi9TaW1wbGVFbnRpdHlCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3R4cHJvcC9jbXR0aW1lb3V0L2VqYi9TaW1wbGVFbnRpdHlCZWFuLmphdmEKQEAgLTU2LDggKzU2LDggQEAKICAgICAgICAgQ29ubmVjdGlvbiBjID0gbnVsbDsKICAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOwogICAgICAgICB0cnkgewotCSAgICAgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgCSAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKKyAgICAgICAgICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgICAgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCiAgICAgICAgICAgICAgICAgIklOU0VSVCBJTlRPIFNpbXBsZUVudGl0eSAoa2V5LCBuYW1lKSBWQUxVRVMgKD8sPykiKTsKICAgICAgICAgICAgIHBzLnNldFN0cmluZygxLCBrZXkpOwogICAgICAgICAgICAgcHMuc2V0U3RyaW5nKDIsIG5hbWUpOwpAQCAtNjgsNyArNjgsNyBAQAogICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICAgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgQ3JlYXRlRXhjZXB0aW9uKCJTUUwgZXhjZXB0aW9uICIgKyBlKTsKLSAgICAgICAgfSBmaW5hbGx5IHsgCisgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGlmIChwcyAhPSBudWxsKQogICAgICAgICAgICAgICAgICAgICBwcy5jbG9zZSgpOwpAQCAtOTQsMTAgKzk0LDEwIEBACiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb24KICAgICB7CiAgICAgICAgIENvbm5lY3Rpb24gYyA9IG51bGw7Ci0gICAgIAlQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7Ci0JICAgIHRyeSB7Ci0JICAgICAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAJICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAorICAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgICAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKICAgICAgICAgICAgICAgICAiU0VMRUNUIGtleSBmcm9tIFNpbXBsZUVudGl0eSB3aGVyZSBrZXkgPSA/Iik7CiAgICAgICAgICAgICBwcy5zZXRTdHJpbmcoMSwga2V5KTsKICAgICAgICAgICAgIFJlc3VsdFNldCBycyA9IHBzLmV4ZWN1dGVRdWVyeSgpOwpAQCAtMTA3LDcgKzEwNyw3IEBACiAgICAgICAgICAgICByZXR1cm4ga2V5OwogICAgICAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgIHsKICAgICAgICAgICAgIHRocm93IG5ldyBGaW5kZXJFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOwotICAgICAgICB9IGZpbmFsbHkgeyAKKyAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgaWYgKHBzICE9IG51bGwpCiAgICAgICAgICAgICAgICAgICAgIHBzLmNsb3NlKCk7CkBAIC0xMjUsNjUgKzEyNSw2NSBAQAogICAgICAgICAgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCiAgICAgICAgICAgICAgICAgIlNFTEVDVCBuYW1lIGZyb20gU2ltcGxlRW50aXR5IHdoZXJlIGtleSA9ID8iKTsKICAgICAgICAgICAgIHBzLnNldFN0cmluZygxLCBrZXkpOwotCSAgICBSZXN1bHRTZXQgcnMgPSBwcy5leGVjdXRlUXVlcnkoKTsKLQkgICAgaWYgKCFycy5uZXh0KCkpCi0JICAgICAgIHRocm93IG5ldyBOb1N1Y2hFbnRpdHlFeGNlcHRpb24oIk5vIGN1c3QgZm9yICIgKyBrZXkpOwotCSAgICB0aGlzLm5hbWUgPSBycy5nZXRTdHJpbmcoMSk7Ci0JfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7Ci0JICAgIHRocm93IG5ldyBOb1N1Y2hFbnRpdHlFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOwotCX0gZmluYWxseSB7IAotCSAgICB0cnkgewotCQlpZiAocHMgIT0gbnVsbCkKLQkJICAgIHBzLmNsb3NlKCk7Ci0JCWlmIChjICE9IG51bGwpCi0JCSAgICBjLmNsb3NlKCk7Ci0JICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQotCX0KKyAgICAgICAgUmVzdWx0U2V0IHJzID0gcHMuZXhlY3V0ZVF1ZXJ5KCk7CisgICAgICAgIGlmICghcnMubmV4dCgpKQorICAgICAgICAgICB0aHJvdyBuZXcgTm9TdWNoRW50aXR5RXhjZXB0aW9uKCJObyBjdXN0IGZvciAiICsga2V5KTsKKyAgICAgICAgdGhpcy5uYW1lID0gcnMuZ2V0U3RyaW5nKDEpOworICAgIH0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAgeworICAgICAgICB0aHJvdyBuZXcgTm9TdWNoRW50aXR5RXhjZXB0aW9uKCJTUUwgZXhjZXB0aW9uICIgKyBlKTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICB0cnkgeworICAgICAgICBpZiAocHMgIT0gbnVsbCkKKyAgICAgICAgICAgIHBzLmNsb3NlKCk7CisgICAgICAgIGlmIChjICE9IG51bGwpCisgICAgICAgICAgICBjLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQorICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJTdG9yZSgpIHsKLQlDb25uZWN0aW9uIGMgPSBudWxsOwotICAgICAJUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOwotCXRyeSB7Ci0JICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0gICAgIAkgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCi0JCSJVUERBVEUgU2ltcGxlRW50aXR5IFNFVCBuYW1lID0gPyBXSEVSRSBrZXkgPSA/Iik7Ci0JICAgIHBzLnNldFN0cmluZygxLCBuYW1lKTsKLQkgICAgcHMuc2V0U3RyaW5nKDIsIGtleSk7Ci0JICAgIGlmIChwcy5leGVjdXRlVXBkYXRlKCkgIT0gMSkKLQkJdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiRGlkbnQgc3RvcmUgZWpiIik7Ci0JfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOwotCX0gZmluYWxseSB7IAotCSAgICB0cnkgewotCQlpZiAocHMgIT0gbnVsbCkKLQkJICAgIHBzLmNsb3NlKCk7Ci0JCWlmIChjICE9IG51bGwpCi0JCSAgICBjLmNsb3NlKCk7Ci0JICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQotCX0KKyAgICBDb25uZWN0aW9uIGMgPSBudWxsOworICAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgICAgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCisgICAgICAgICJVUERBVEUgU2ltcGxlRW50aXR5IFNFVCBuYW1lID0gPyBXSEVSRSBrZXkgPSA/Iik7CisgICAgICAgIHBzLnNldFN0cmluZygxLCBuYW1lKTsKKyAgICAgICAgcHMuc2V0U3RyaW5nKDIsIGtleSk7CisgICAgICAgIGlmIChwcy5leGVjdXRlVXBkYXRlKCkgIT0gMSkKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiRGlkbnQgc3RvcmUgZWpiIik7CisgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOworICAgIH0gZmluYWxseSB7CisgICAgICAgIHRyeSB7CisgICAgICAgIGlmIChwcyAhPSBudWxsKQorICAgICAgICAgICAgcHMuY2xvc2UoKTsKKyAgICAgICAgaWYgKGMgIT0gbnVsbCkKKyAgICAgICAgICAgIGMuY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHRocm93cyBSZW1vdmVFeGNlcHRpb24gewotCUNvbm5lY3Rpb24gYyA9IG51bGw7Ci0gICAgIAlQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7Ci0JdHJ5IHsKLQkgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgCSAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKLQkJIkRFTEVURSBGUk9NIFNpbXBsZUVudGl0eSBXSEVSRSBrZXkgPSA/Iik7Ci0JICAgIHBzLnNldFN0cmluZygxLCBuYW1lKTsKLQkgICAgaWYgKHBzLmV4ZWN1dGVVcGRhdGUoKSAhPSAxKQotCQl0aHJvdyBuZXcgUmVtb3ZlRXhjZXB0aW9uKCJEaWRudCByZW1vdmUgZWpiIik7Ci0JfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7Ci0JICAgIHRocm93IG5ldyBSZW1vdmVFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOwotCX0gZmluYWxseSB7IAotCSAgICB0cnkgewotCQlpZiAocHMgIT0gbnVsbCkKLQkJICAgIHBzLmNsb3NlKCk7Ci0JCWlmIChjICE9IG51bGwpCi0JCSAgICBjLmNsb3NlKCk7Ci0JICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQotCX0KKyAgICBDb25uZWN0aW9uIGMgPSBudWxsOworICAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgICAgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCisgICAgICAgICJERUxFVEUgRlJPTSBTaW1wbGVFbnRpdHkgV0hFUkUga2V5ID0gPyIpOworICAgICAgICBwcy5zZXRTdHJpbmcoMSwgbmFtZSk7CisgICAgICAgIGlmIChwcy5leGVjdXRlVXBkYXRlKCkgIT0gMSkKKyAgICAgICAgdGhyb3cgbmV3IFJlbW92ZUV4Y2VwdGlvbigiRGlkbnQgcmVtb3ZlIGVqYiIpOworICAgIH0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSAgeworICAgICAgICB0aHJvdyBuZXcgUmVtb3ZlRXhjZXB0aW9uKCJTUUwgZXhjZXB0aW9uICIgKyBlKTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICB0cnkgeworICAgICAgICBpZiAocHMgIT0gbnVsbCkKKyAgICAgICAgICAgIHBzLmNsb3NlKCk7CisgICAgICAgIGlmIChjICE9IG51bGwpCisgICAgICAgICAgICBjLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fQorICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90eHByb3AvY210dGltZW91dC9lamIvU2ltcGxlU0xTQkJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90eHByb3AvY210dGltZW91dC9lamIvU2ltcGxlU0xTQkJlYW4uamF2YQppbmRleCAyNzE3NTcxLi4xZTUyNjg2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdHhwcm9wL2NtdHRpbWVvdXQvZWpiL1NpbXBsZVNMU0JCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3R4cHJvcC9jbXR0aW1lb3V0L2VqYi9TaW1wbGVTTFNCQmVhbi5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIGltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CiBpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7Ci1pbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOyAKK2ltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkJlYW47CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQ7CiBpbXBvcnQgamFrYXJ0YS5lamIuRUpCRXhjZXB0aW9uOwpAQCAtMzQsMTEgKzM0LDExIEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2ltcGxlU0xTQkhvbWU6OmVqYkNyZWF0ZSAhISIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpbXBsZVNMU0JIb21lOjplamJDcmVhdGUgISEiKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgewotCSAgICB0aGlzLnNjID0gc2M7CisgICAgICAgIHRoaXMuc2MgPSBzYzsKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiBkb1NvbWV0aGluZyhpbnQgdGltZW91dCkgewpAQCAtNTEsNyArNTEsNyBAQAogICAgICAgICAgICAgbG9uZyBkZWFkbGluZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpICsgKHRpbWVvdXQgKiAxMDAwKTsKICAgICAgICAgICAgIGZvciAoaW50IG4gPSAxOyB0cnVlOyBuID0gbiA8PCAxKSB7CiAgICAgICAgICAgICAgICAgbG9uZyBub3cgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLSAgICAKKwogICAgICAgICAgICAgICAgIGlmIChub3cgPiBkZWFkbGluZSkgewogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CkBAIC02MCw3ICs2MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICArICI7IHRpbWUgbGVmdCA9ICIgKyAoKGRlYWRsaW5lIC0gbm93KSAvIDEwMDApCiAgICAgICAgICAgICAgICAgICAgICAgICArICIgc2Vjb25kcy4gcmVzdWx0OiAiICsgcmVzdWx0KTsKICAgICAgICAgICAgICAgICBzb3J0QXJyYXkoMTAyNCk7Ci0gICAgICAgICAgICAgICAgdHJ5IHtUaHJlYWQuc2xlZXAoNSAqIDEwMDApO30gY2F0Y2ggKEV4Y2VwdGlvbiBleCkge30gCisgICAgICAgICAgICAgICAgdHJ5IHtUaHJlYWQuc2xlZXAoNSAqIDEwMDApO30gY2F0Y2ggKEV4Y2VwdGlvbiBleCkge30KICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgcmVzdWx0ID0gc2MuZ2V0Um9sbGJhY2tPbmx5KCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdHhwcm9wL3NpbXBsZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3R4cHJvcC9zaW1wbGUvYnVpbGQucHJvcGVydGllcwppbmRleCAyY2I5ZmU5Li5iMmYwNzdmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdHhwcm9wL3NpbXBsZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90eHByb3Avc2ltcGxlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIxICsxNSwyMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLXR4cHJvcC1zaW1wbGUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90eHByb3Avc2ltcGxlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90eHByb3Avc2ltcGxlL2J1aWxkLnhtbAppbmRleCAxMGRmYjZkLi5hOTgzYzkzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdHhwcm9wL3NpbXBsZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3R4cHJvcC9zaW1wbGUvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NiwxNCArNDYsMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLyoqLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQqLmNsYXNzLCoqLypGb28uY2xhc3MsKiovKkZvb0hvbWUuY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjEsMTAgKzYxLDEwIEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90eHByb3Avc2ltcGxlL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90eHByb3Avc2ltcGxlL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA5ZWVkZWViLi44Njc1MDc3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdHhwcm9wL3NpbXBsZS9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3R4cHJvcC9zaW1wbGUvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CkBAIC0zNywzMSArMzcsMzEgQEAKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImVqYi10eHByb3Atc2ltcGxlSUQiKTsKLSAgICB9ICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgQ2xpZW50IChTdHJpbmdbXSBhcmdzKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2luZyB1cCBlamIgcmVmICIpOwotICAgICAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyIAorICAgICAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyCiAgICAgICAgICAgICBPYmplY3Qgb2JqcmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9mb28iKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigib2JqcmVmID0gIiArIG9ianJlZik7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkxvb2tlZCB1cCBob21lISEiKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgRm9vSG9tZSAgaG9tZSA9IChGb29Ib21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdwogICAgICAgICAgICAgICAgIChvYmpyZWYsIEZvb0hvbWUuY2xhc3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTmFycm93ZWQgaG9tZSEhIik7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgCisKKwogICAgICAgICAgICAgRm9vIGYgPSBob21lLmNyZWF0ZSgpOwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJHb3QgdGhlIEVKQiEhIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8vIGludm9rZSBtZXRob2Qgb24gdGhlIEVKQgogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnZva2luZyBlamIiKTsKICAgICAgICAgICAgIGYuY2FsbEhlbGxvKCk7CkBAIC03Myw4ICs3Myw4IEBACiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudCBtYWluIiAsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgCXJldHVybjsKKworICAgICAgICByZXR1cm47CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdHhwcm9wL3NpbXBsZS9lamIvRm9vQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3R4cHJvcC9zaW1wbGUvZWpiL0Zvb0JlYW4uamF2YQppbmRleCBlZjc1MWRkLi5hNjk5ZDI2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdHhwcm9wL3NpbXBsZS9lamIvRm9vQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90eHByb3Avc2ltcGxlL2VqYi9Gb29CZWFuLmphdmEKQEAgLTE5LDcgKzE5LDcgQEAKIGltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKIGltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKIGltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKLWltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247IAoraW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQmVhbjsKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dDsKIGltcG9ydCBqYWthcnRhLmVqYi5FSkJFeGNlcHRpb247CkBAIC0zNyw3ICszNyw3IEBACiAgICAgcHVibGljIEZvb0JlYW4oKSB7fQogCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29CZWFuOjplamJDcmVhdGUgISEiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb0JlYW46OmVqYkNyZWF0ZSAhISIpOwogCiAgICAgICAgIC8vIGdldHRpbmcgVXNlclRyYW5zYWN0aW9uKCkgaXMgYWxsb3dlZAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxpbmcgZ2V0VXNlclRyYW5zYWN0aW9uKCkiKTsKQEAgLTU2LDcgKzU2LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgewotCXRoaXMuc2MgPSBzYzsKKyAgICB0aGlzLnNjID0gc2M7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgY2FsbEhlbGxvKCkgIHsKQEAgLTY0LDI0ICs2NCwyNCBAQAogCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2luZyB1cCBlamIgcmVmICIpOwotICAgICAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyIAorICAgICAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyCiAgICAgICAgICAgICBPYmplY3Qgb2JqcmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9oZWxsbyIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvYmpyZWYgPSAiICsgb2JqcmVmKTsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTG9va2VkIHVwIGhvbWUhISIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBIZWxsb0hvbWUgIGhvbWUgPSAoSGVsbG9Ib21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdwogICAgICAgICAgICAgICAgIChvYmpyZWYsIEhlbGxvSG9tZS5jbGFzcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJOYXJyb3dlZCBob21lISEiKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgSGVsbG8gaHIgPSBob21lLmNyZWF0ZSgpOwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJHb3QgdGhlIEVKQiEhIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8vIGludm9rZSBtZXRob2Qgb24gdGhlIEVKQgogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJzdGFydGluZyB1c2VyIHR4Iik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgc2MuZ2V0VXNlclRyYW5zYWN0aW9uKCkuYmVnaW4oKTsKIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnZva2luZyBlamIgd2l0aCB1c2VyIHR4Iik7CkBAIC0xMDQsMTMgKzEwNCwxMyBAQAogICAgICAgICB9CiAKICAgICAgICAgVGltZXJTZXJ2aWNlIHRpbWVyU2VydmljZSA9IHNjLmdldFRpbWVyU2VydmljZSgpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgdGltZXJTZXJ2aWNlLmNyZWF0ZVRpbWVyKG5ldyBEYXRlKCksIDEwMDAsIG51bGwpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiQ3JlYXRlVGltZXIgY2FsbCBzaG91bGQgaGF2ZSBmYWlsZWQuIik7CiAgICAgICAgIH0gY2F0Y2goSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlzZSkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgZ290IGlsbGVnYWwgc3RhdGUgZXhjZXB0aW9uICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aGVuIGF0dGVtcHRpbmcgdG8gY3JlYXRlIHRpbWVyIDogIiArIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aGVuIGF0dGVtcHRpbmcgdG8gY3JlYXRlIHRpbWVyIDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICAgICAgdHJ5IHsKQEAgLTExOCw3ICsxMTgsNyBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiQ3JlYXRlVGltZXIgY2FsbCBzaG91bGQgaGF2ZSBmYWlsZWQuIik7CiAgICAgICAgIH0gY2F0Y2goSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlzZSkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgZ290IGlsbGVnYWwgc3RhdGUgZXhjZXB0aW9uICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aGVuIGF0dGVtcHRpbmcgdG8gY3JlYXRlIHRpbWVyIDogIiArIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aGVuIGF0dGVtcHRpbmcgdG8gY3JlYXRlIHRpbWVyIDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICAgICAgdHJ5IHsKQEAgLTEyNiw3ICsxMjYsNyBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiQ3JlYXRlVGltZXIgY2FsbCBzaG91bGQgaGF2ZSBmYWlsZWQuIik7CiAgICAgICAgIH0gY2F0Y2goSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlzZSkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgZ290IGlsbGVnYWwgc3RhdGUgZXhjZXB0aW9uICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aGVuIGF0dGVtcHRpbmcgdG8gY3JlYXRlIHRpbWVyIDogIiArIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aGVuIGF0dGVtcHRpbmcgdG8gY3JlYXRlIHRpbWVyIDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICAgICAgdHJ5IHsKQEAgLTEzNCwyNiArMTM0LDI2IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJDcmVhdGVUaW1lciBjYWxsIHNob3VsZCBoYXZlIGZhaWxlZC4iKTsKICAgICAgICAgfSBjYXRjaChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gaXNlKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSBnb3QgaWxsZWdhbCBzdGF0ZSBleGNlcHRpb24gIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndoZW4gYXR0ZW1wdGluZyB0byBjcmVhdGUgdGltZXIgOiAiICsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndoZW4gYXR0ZW1wdGluZyB0byBjcmVhdGUgdGltZXIgOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc2UuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogCiAgICAgICAgIENvbGxlY3Rpb24gdGltZXJzID0gdGltZXJTZXJ2aWNlLmdldFRpbWVycygpOwogICAgICAgICBpZiggdGltZXJzLnNpemUoKSA+IDAgKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJXcm9uZyBudW1iZXIgb2YgdGltZXJzIDogIiArIAorICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiV3JvbmcgbnVtYmVyIG9mIHRpbWVycyA6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcnMuc2l6ZSgpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCAwIHRpbWVycyIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIFBhY2thZ2UgcCA9IHRoaXMuZ2V0Q2xhc3MoKS5nZXRQYWNrYWdlKCk7CiAgICAgICAgIGlmKCBwID09IG51bGwgKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJudWxsIHBhY2thZ2UgZm9yICIgKyAKKyAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIm51bGwgcGFja2FnZSBmb3IgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQYWNrYWdlIG5hbWUgPSAiICsgcCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHt9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdHhwcm9wL3NpbXBsZS9lamIvSGVsbG9CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdHhwcm9wL3NpbXBsZS9lamIvSGVsbG9CZWFuLmphdmEKaW5kZXggYTJlYmU3OC4uMzAyNGQ1ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3R4cHJvcC9zaW1wbGUvZWpiL0hlbGxvQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi90eHByb3Avc2ltcGxlL2VqYi9IZWxsb0JlYW4uamF2YQpAQCAtMTgsNyArMTgsNyBAQAogCiBpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwogaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOwotaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsgCitpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25CZWFuOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0OwogaW1wb3J0IGpha2FydGEuZWpiLkVKQkV4Y2VwdGlvbjsKQEAgLTMxLDExICszMSwxMSBAQAogICAgIHB1YmxpYyBIZWxsb0JlYW4oKSB7fQogCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb0JlYW46OmVqYkNyZWF0ZSAhISIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9CZWFuOjplamJDcmVhdGUgISEiKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgewotCXRoaXMuc2MgPSBzYzsKKyAgICB0aGlzLnNjID0gc2M7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2F5SGVsbG8oKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdXRpbC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdXRpbC9idWlsZC54bWwKaW5kZXggNmI3M2RhMS4uNjRjYmI4NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3V0aWwvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi91dGlsL2J1aWxkLnhtbApAQCAtMzksMTAgKzM5LDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6CisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgogICAgICAgICAgICAgICAgICAgIGFudCBtZXRob2RtYXAgKEV4ZWN1dGVzIHRoZSBlamItdXRpbCBtZXRob2RtYXAgdGVzdCkKICAgICAgICAgICAgICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYi11dGlsIHRlc3RzKQotCTwvZWNobz4KKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdXRpbC9tZXRob2RtYXAvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi91dGlsL21ldGhvZG1hcC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDAzODdiNGUuLjBhMzAxOWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi91dGlsL21ldGhvZG1hcC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi91dGlsL21ldGhvZG1hcC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0Lm5hbWUiIHZhbHVlPSJjb20uc3VuLnMxYXNkZXYuZWpiLnV0aWwubWV0aG9kbWFwIi8+CiA8cHJvcGVydHkgbmFtZT0ic2ltcGxlLmNsaWVudCIgdmFsdWU9IiR7dGVzdC5uYW1lfS5jbGllbnQuTWV0aG9kTWFwVGVzdCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3V0aWwvbWV0aG9kbWFwL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi91dGlsL21ldGhvZG1hcC9idWlsZC54bWwKaW5kZXggM2NhMDFiOS4uYzJiYzBkNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3V0aWwvbWV0aG9kbWFwL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdXRpbC9tZXRob2RtYXAvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICAgICA8ZWNobyBtZXNzYWdlPSJjb21tb24ueG1sOiBDb21waWxpbmcgdGVzdCBzb3VyY2UgZmlsZXMiIGxldmVsPSJ2ZXJib3NlIi8+CkBAIC00MiwyNyArNDIsMjcgQEAKICAgICAgICAgICAgICAgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtzMWFzdGVzdC5jbGFzc3BhdGh9OiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBkZWJ1Zz0ib24iCi0gICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIi8+ICAgICAgICAKKyAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgPGphdmEgIGZvcms9Im9uIiAKKyAgICAgICA8amF2YSAgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2oyZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2FwcHNlcnYtcnQuamFyOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICBjbGFzc25hbWU9IiR7c2ltcGxlLmNsaWVudH0iPgogICAgICAgICA8L2phdmE+Ci0gICAgPC90YXJnZXQ+ICAgICAgIAorICAgIDwvdGFyZ2V0PgogCiAKICAgICA8dGFyZ2V0IG5hbWU9InBlcmYiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICA8amF2YSAgZm9yaz0ib24iIAorICAgICAgIDxqYXZhICBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvajJlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvYXBwc2Vydi1ydC5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgIGNsYXNzbmFtZT0iJHtwZXJmLmNsaWVudH0iPgogICAgICAgICAgICA8YXJnIHZhbHVlPSJqYXZheC54bWwucnBjLlNlcnZpY2UiLz4KICAgICAgICAgICAgPGFyZyB2YWx1ZT0iMTAwMDAwIi8+CiAgICAgICAgIDwvamF2YT4KLSAgICA8L3RhcmdldD4gIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvdXRpbC9tZXRob2RtYXAvY2xpZW50L01ldGhvZE1hcFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi91dGlsL21ldGhvZG1hcC9jbGllbnQvTWV0aG9kTWFwVGVzdC5qYXZhCmluZGV4IGMzMGE2Y2UuLjE0NjFjNTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi91dGlsL21ldGhvZG1hcC9jbGllbnQvTWV0aG9kTWFwVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi91dGlsL21ldGhvZG1hcC9jbGllbnQvTWV0aG9kTWFwVGVzdC5qYXZhCkBAIC0yNywyMSArMjcsMjEgQEAKIAogcHVibGljIGNsYXNzIE1ldGhvZE1hcFRlc3QgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIENsYXNzW10gVEVTVF9DTEFTU0VTID0gewogICAgICAgICBqYXZhLmxhbmcuT2JqZWN0LmNsYXNzLAotICAgICAgICBNZXRob2RNYXBUZXN0MS5jbGFzcywgTWV0aG9kTWFwVGVzdDIuY2xhc3MsIE1ldGhvZE1hcFRlc3QzLmNsYXNzLCAKKyAgICAgICAgTWV0aG9kTWFwVGVzdDEuY2xhc3MsIE1ldGhvZE1hcFRlc3QyLmNsYXNzLCBNZXRob2RNYXBUZXN0My5jbGFzcywKICAgICAgICAgTWV0aG9kTWFwVGVzdDQuY2xhc3MsIE1ldGhvZE1hcFRlc3QzLmNsYXNzLCBNZXRob2RNYXBUZXN0Ni5jbGFzcywKLSAgICAgICAgTWV0aG9kTWFwVGVzdC5jbGFzcywgamFrYXJ0YS5lamIuRUpCSG9tZS5jbGFzcywgCisgICAgICAgIE1ldGhvZE1hcFRlc3QuY2xhc3MsIGpha2FydGEuZWpiLkVKQkhvbWUuY2xhc3MsCiAgICAgICAgIGpha2FydGEuZWpiLkVKQk9iamVjdC5jbGFzcywgamFrYXJ0YS5lamIuRUpCTG9jYWxPYmplY3QuY2xhc3MsCiAgICAgICAgIGpha2FydGEuZWpiLkVKQkxvY2FsSG9tZS5jbGFzcywgamFrYXJ0YS5lamIuU2Vzc2lvbkJlYW4uY2xhc3MsCiAgICAgICAgIGpha2FydGEuZWpiLkVudGVycHJpc2VCZWFuLmNsYXNzLCBqYXZhLnV0aWwuTWFwLmNsYXNzLAogICAgICAgICBqYWthcnRhLmptcy5RdWV1ZUNvbm5lY3Rpb24uY2xhc3MsIGpha2FydGEuam1zLlF1ZXVlU2Vzc2lvbi5jbGFzcywKICAgICAgICAgamFrYXJ0YS5qbXMuU2Vzc2lvbi5jbGFzcywgamF2YS51dGlsLkRhdGUuY2xhc3MsCiAgICAgICAgIGphdmF4LnN3aW5nLkFjdGlvbi5jbGFzcywgamF2YXguc3dpbmcuQWJzdHJhY3RBY3Rpb24uY2xhc3MsCi0gICAgICAgIGphdmF4LnN3aW5nLkpDb21ib0JveC5jbGFzcywgamF2YXguc3dpbmcuSlRleHRBcmVhLmNsYXNzICAgICAgICAKKyAgICAgICAgamF2YXguc3dpbmcuSkNvbWJvQm94LmNsYXNzLCBqYXZheC5zd2luZy5KVGV4dEFyZWEuY2xhc3MKIAogICAgIH07CiAKQEAgLTUxLDkgKzUxLDkgQEAKICAgICAgICAgTWV0aG9kTWFwVGVzdCB0ZXN0ID0gbmV3IE1ldGhvZE1hcFRlc3QoYXJncyk7CiAgICAgICAgIHRlc3QuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJlamItdXRpbC1tZXRob2RtYXBJRCIpOwotICAgIH0gIAotICAgIAotICAgIHB1YmxpYyBNZXRob2RNYXBUZXN0IChTdHJpbmdbXSBhcmdzKSB7ICAgICAgICAgICAgICAgCisgICAgfQorCisgICAgcHVibGljIE1ldGhvZE1hcFRlc3QgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CkBAIC02MywxNyArNjMsMTcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRG9pbmcgbWV0aG9kbWFwIHRlc3QgZm9yICIgKyBjKTsKICAgICAgICAgICAgIGJvb2xlYW4gcmVzdWx0ID0gdGVzdENsYXNzKGMpOwogICAgICAgICAgICAgaWYoIHJlc3VsdCApIHsKLSAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibWV0aG9kbWFwY2xpZW50IG1haW4iLCBzdGF0LlBBU1MpOyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJtZXRob2RtYXBjbGllbnQgbWFpbiIsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJtZXRob2RtYXBjbGllbnQgbWFpbiIsIHN0YXQuRkFJTCk7IAorICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJtZXRob2RtYXBjbGllbnQgbWFpbiIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgICAgIAotICAgICAgICAKKyAgICAgICAgfQorCiAgICAgICAgIHRlc3RDdG9yKCk7CiAgICAgICAgIHRlc3RVbnN1cHBvcnRlZE9wZXJhdGlvbnMoKTsKIAotICAgICAgICAKLSAgICAgICAgCisKKwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCB0ZXN0Q3RvcigpIHsKQEAgLTgzLDcgKzgzLDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIG5ldyBNZXRob2RNYXAobmV3IEhhc2hNYXAoKSwgLTEpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJidWNrZXRTaXplIC0xIHNob3VsZCBoYXZlIHRocm93biBleGNlcHRpb24iKTsKLSAgICAgICAgfSBjYXRjaChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgeyAgICAgICAgIAorICAgICAgICB9IGNhdGNoKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBjdG9yVGVzdDFQYXNzZWQgPSB0cnVlOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwpAQCAtMTA3LDIzICsxMDcsMjMgQEAKICAgICAgICAgICAgIGN0b3JUZXN0M1Bhc3NlZCA9IHRydWU7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgIH0gICAgICAgIAorICAgICAgICB9CiAKICAgICAgICAgLy8gcGFzcyBtYXAgY29udGFpbmluZyBzb21ldGhpbmcgb3RoZXIgdGhhbiBNZXRob2Qgb2JqZWN0cwogICAgICAgICBNYXAgb3RoZXJNYXAgPSBuZXcgSGFzaE1hcCgpOwogICAgICAgICBvdGhlck1hcC5wdXQoImZvbyIsICJiYXIiKTsKICAgICAgICAgYm9vbGVhbiBjdG9yVGVzdDRQYXNzZWQgPSBmYWxzZTsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIG5ldyBNZXRob2RNYXAob3RoZXJNYXApOyAgICAgICAgICAgIAorICAgICAgICAgICAgbmV3IE1ldGhvZE1hcChvdGhlck1hcCk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGN0b3JUZXN0NFBhc3NlZCA9IHRydWU7CiAgICAgICAgIH0KIAotICAgICAgICBpZiggY3RvclRlc3QxUGFzc2VkICYmIGN0b3JUZXN0MlBhc3NlZCAmIGN0b3JUZXN0M1Bhc3NlZCAKKyAgICAgICAgaWYoIGN0b3JUZXN0MVBhc3NlZCAmJiBjdG9yVGVzdDJQYXNzZWQgJiBjdG9yVGVzdDNQYXNzZWQKICAgICAgICAgICAgICYmIGN0b3JUZXN0NFBhc3NlZCApIHsKLSAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJtZXRob2RtYXBjbGllbnQgY3RvciIsIHN0YXQuUEFTUyk7ICAKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJtZXRob2RtYXBjbGllbnQgY3RvciIsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibWV0aG9kbWFwY2xpZW50IGN0b3IiLCBzdGF0LkZBSUwpOyAgCisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibWV0aG9kbWFwY2xpZW50IGN0b3IiLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKICAgICB9CkBAIC0xNTcsNyArMTU3LDcgQEAKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBib29sZWFuIHVvZVRlc3QzUGFzc2VkID0gZmFsc2U7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBtZXRob2RNYXAucmVtb3ZlKG1ldGhvZDEpOwpAQCAtMTc2LDE5ICsxNzYsMTkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIG51bGwgbWV0aG9kIHZhbHVlIik7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIHVvZVRlc3Q0UGFzc2VkID0gdHJ1ZTsKLSAgICAgICAgfSAKKyAgICAgICAgfQogCiAgICAgICAgIGlmKCB1b2VUZXN0MVBhc3NlZCAmJiB1b2VUZXN0MlBhc3NlZCAmJiB1b2VUZXN0M1Bhc3NlZCAmJgogICAgICAgICAgICAgdW9lVGVzdDRQYXNzZWQgKSB7Ci0gICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibWV0aG9kbWFwY2xpZW50IHVuc3VwcG9ydGVkb3AiLCBzdGF0LlBBU1MpOyAKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJtZXRob2RtYXBjbGllbnQgdW5zdXBwb3J0ZWRvcCIsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibWV0aG9kbWFwY2xpZW50IHVuc3VwcG9ydGVkb3AiLCBzdGF0LkZBSUwpOyAKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJtZXRob2RtYXBjbGllbnQgdW5zdXBwb3J0ZWRvcCIsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAogICAgIH0KIAogICAgIHByaXZhdGUgYm9vbGVhbiB0ZXN0Q2xhc3MoQ2xhc3MgYykgewotICAgICAgCisKICAgICAgICAgTWFwIHJlZ3VsYXJNYXAgPSBuZXcgSGFzaE1hcCgpOwogCiAgICAgICAgIE1ldGhvZFtdIG1ldGhvZHMgPSBjLmdldERlY2xhcmVkTWV0aG9kcygpOwpAQCAtMTk2LDMxICsxOTYsMzEgQEAKICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IG1ldGhvZHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgIHJlZ3VsYXJNYXAucHV0KG1ldGhvZHNbaV0sIG1ldGhvZHNbaV0udG9TdHJpbmcoKSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgTWFwIGRlZmF1bHRNZXRob2RNYXAgPSBuZXcgTWV0aG9kTWFwKHJlZ3VsYXJNYXApOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RpbmcgIiArIGMgKyAiIHdpdGggZGVmYXVsdCBNZXRob2RNYXAiKTsKLSAgICAgICAgYm9vbGVhbiBkZWZhdWx0VGVzdCA9IAorICAgICAgICBib29sZWFuIGRlZmF1bHRUZXN0ID0KICAgICAgICAgICAgIHRlc3RDbGFzcyhjLCBtZXRob2RzLCBmYWxzZSwgcmVndWxhck1hcCwgZGVmYXVsdE1ldGhvZE1hcCk7Ci0gICAgICAgIGJvb2xlYW4gZGVmYXVsdFRlc3RPcHQgPSAKKyAgICAgICAgYm9vbGVhbiBkZWZhdWx0VGVzdE9wdCA9CiAgICAgICAgICAgICB0ZXN0Q2xhc3MoYywgbWV0aG9kcywgdHJ1ZSwgcmVndWxhck1hcCwgZGVmYXVsdE1ldGhvZE1hcCk7CiAKICAgICAgICAgLy8gdGVzdCBkZWdlbmVyYXRlIGNhc2Ugd2hlcmUgdGhlcmUgaXMgb25seSAxIGJ1Y2tldCBpbiBNZXRob2RNYXAuCi0gICAgICAgIC8vIHVubGVzcyB0aGVyZSBhcmUgbGVzcyB0aGFuIDIgbWV0aG9kcyBpbiB0aGUgbWFwLCB0aGlzIHNob3VsZCAKKyAgICAgICAgLy8gdW5sZXNzIHRoZXJlIGFyZSBsZXNzIHRoYW4gMiBtZXRob2RzIGluIHRoZSBtYXAsIHRoaXMgc2hvdWxkCiAgICAgICAgIC8vIGFsd2F5cyBkZWZlciB0byBwYXJlbnQuCiAgICAgICAgIE1hcCBvbmVCdWNrZXRNZXRob2RNYXAgPSBuZXcgTWV0aG9kTWFwKHJlZ3VsYXJNYXAsIDEpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RpbmcgIiArIGMgKyAiIHdpdGggMS1idWNrZXQgTWV0aG9kTWFwIik7Ci0gICAgICAgIGJvb2xlYW4gb25lQnVja2V0VGVzdCA9IAorICAgICAgICBib29sZWFuIG9uZUJ1Y2tldFRlc3QgPQogICAgICAgICAgICAgdGVzdENsYXNzKGMsIG1ldGhvZHMsIGZhbHNlLCByZWd1bGFyTWFwLCBvbmVCdWNrZXRNZXRob2RNYXApOwogICAgICAgICBib29sZWFuIG9uZUJ1Y2tldFRlc3RPcHQgPQogICAgICAgICAgICAgdGVzdENsYXNzKGMsIG1ldGhvZHMsIHRydWUsIHJlZ3VsYXJNYXAsIG9uZUJ1Y2tldE1ldGhvZE1hcCk7CiAKICAgICAgICAgTWFwIHNldmVudGVlbkJ1Y2tldE1ldGhvZE1hcCA9IG5ldyBNZXRob2RNYXAocmVndWxhck1hcCwgMTcpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RpbmcgIiArIGMgKyAiIHdpdGggMTctYnVja2V0IE1ldGhvZE1hcCIpOwotICAgICAgICBib29sZWFuIHNldmVudGVlbkJ1Y2tldFRlc3QgPSAKLSAgICAgICAgICAgIHRlc3RDbGFzcyhjLCBtZXRob2RzLCBmYWxzZSwgcmVndWxhck1hcCwgc2V2ZW50ZWVuQnVja2V0TWV0aG9kTWFwKTsgCi0gICAgICAgIGJvb2xlYW4gc2V2ZW50ZWVuQnVja2V0VGVzdE9wdCA9IAotICAgICAgICAgICAgdGVzdENsYXNzKGMsIG1ldGhvZHMsIHRydWUsIHJlZ3VsYXJNYXAsIHNldmVudGVlbkJ1Y2tldE1ldGhvZE1hcCk7ICAKLSAgICAKKyAgICAgICAgYm9vbGVhbiBzZXZlbnRlZW5CdWNrZXRUZXN0ID0KKyAgICAgICAgICAgIHRlc3RDbGFzcyhjLCBtZXRob2RzLCBmYWxzZSwgcmVndWxhck1hcCwgc2V2ZW50ZWVuQnVja2V0TWV0aG9kTWFwKTsKKyAgICAgICAgYm9vbGVhbiBzZXZlbnRlZW5CdWNrZXRUZXN0T3B0ID0KKyAgICAgICAgICAgIHRlc3RDbGFzcyhjLCBtZXRob2RzLCB0cnVlLCByZWd1bGFyTWFwLCBzZXZlbnRlZW5CdWNrZXRNZXRob2RNYXApOworCiAKICAgICAgICAgYm9vbGVhbiBjbGVhclRlc3QgPSBmYWxzZTsKICAgICAgICAgdHJ5IHsKQEAgLTIzMyw3ICsyMzMsNyBAQAogICAgICAgICAgICAgICAgICAgICBjbGVhclRlc3QgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2xlYXIoKSBzaG91bGQgaGF2ZSByZXR1cm5lZCBudWxsIGZvciAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZHNbMF0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2RzWzBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgYWZ0ZXIgY2xlYXIoKS4gIGluc3RlYWQgaXQgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHJldHVybmVkICIgKyBvYmopOwogICAgICAgICAgICAgICAgIH0KQEAgLTI0NSw4ICsyNDUsOCBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjbGVhcigpIHRocmV3IGFuIGV4Y2VwdGlvbiIpOwogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIChkZWZhdWx0VGVzdCAmJiBkZWZhdWx0VGVzdE9wdCAmJiAKKworICAgICAgICByZXR1cm4gKGRlZmF1bHRUZXN0ICYmIGRlZmF1bHRUZXN0T3B0ICYmCiAgICAgICAgICAgICAgICAgb25lQnVja2V0VGVzdCAmJiBvbmVCdWNrZXRUZXN0T3B0ICYmCiAgICAgICAgICAgICAgICAgc2V2ZW50ZWVuQnVja2V0VGVzdCAmJiBzZXZlbnRlZW5CdWNrZXRUZXN0T3B0ICYmCiAgICAgICAgICAgICAgICAgY2xlYXJUZXN0KTsKQEAgLTI1NCw3ICsyNTQsNyBAQAogCiAgICAgcHJpdmF0ZSBib29sZWFuIHRlc3RDbGFzcyhDbGFzcyBjLCBNZXRob2RbXSBtZXRob2RzLCBib29sZWFuIHVzZVBhcmFtT3B0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFwIHJlZ3VsYXJNYXAsIE1hcCBtZXRob2RNYXApIHsKLSAgICAgICAgCisKICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IG1ldGhvZHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgIE1ldGhvZCBuZXh0ID0gbWV0aG9kc1tpXTsKICAgICAgICAgICAgIGludCBudW1QYXJhbXMgPSBuZXh0LmdldFBhcmFtZXRlclR5cGVzKCkubGVuZ3RoOwpAQCAtMjY3LDE1ICsyNjcsMTUgQEAKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgbWV0aG9kTWFwTG9va3VwID0gbWV0aG9kTWFwLmdldChuZXh0KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiggcmVndWxhckxvb2t1cCAhPSBtZXRob2RNYXBMb29rdXAgKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFcnJvci4gIHJlZ3VsYXJMb29rdXAgPSAiICsgcmVndWxhckxvb2t1cAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgbWV0aG9kTWFwTG9va3VwID0gIiArIG1ldGhvZE1hcExvb2t1cAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgZm9yIE1ldGhvZCAiICsgbmV4dC50b1N0cmluZygpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9IAorICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAvLyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290ICIgKyByZWd1bGFyTG9va3VwICsgIiBmb3IgbWV0aG9kICIgKyAKKyAgICAgICAgICAgIC8vICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgIiArIHJlZ3VsYXJMb29rdXAgKyAiIGZvciBtZXRob2QgIiArCiAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgbmV4dC50b1N0cmluZygpKTsKIAogICAgICAgICB9CkBAIC0zMDUsMTkgKzMwNSwxOSBAQAogCiAgICAgICAgIC8vIGFycmF5IHBhcmFtcwogICAgICAgICBpbnQgYWJjKGludFtdIGEpOwotICAgICAgICBpbnQgZGVmKGludFtdW11bXVtdW11bXVtdW10gYik7ICAgICAgICAKKyAgICAgICAgaW50IGRlZihpbnRbXVtdW11bXVtdW11bXVtdIGIpOwogCiAgICAgICAgIC8vIGFyYml0cmFyeSB1bmljb2RlIGNoYXJzCiAgICAgICAgIHZvaWQgX0JcdTgwMDEkKCk7CiAgICAgICAgIHZvaWQgX0NDTWN4XHUwNGUzXHUwNUU5MDEyMygpOwogCi0gICAgICAgIAorCiAgICAgfQogCiAgICAgcHJpdmF0ZSBpbnRlcmZhY2UgTWV0aG9kTWFwVGVzdDMgewogCiAgICAgICAgIHZvaWQgQSgpOwotICAgICAgICAKKwogICAgIH0KIAogICAgIHByaXZhdGUgaW50ZXJmYWNlIE1ldGhvZE1hcFRlc3Q0IGV4dGVuZHMgTWV0aG9kTWFwVGVzdDMge30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi91dGlsL21ldGhvZG1hcC9jbGllbnQvTWV0aG9kUGVyZi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3V0aWwvbWV0aG9kbWFwL2NsaWVudC9NZXRob2RQZXJmLmphdmEKaW5kZXggOGYwODI3Mi4uMzM2YTA0MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3V0aWwvbWV0aG9kbWFwL2NsaWVudC9NZXRob2RQZXJmLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3V0aWwvbWV0aG9kbWFwL2NsaWVudC9NZXRob2RQZXJmLmphdmEKQEAgLTI5LDcgKzI5LDcgQEAKIAogICAgICAgICByZXR1cm4gKCh0aW1lSW5NaWxsaXMgKiAxMDAwLjApIC8gbnVtSXRlcmF0aW9ucykgKyAiIG1pY3JvLXNlY29uZHMiOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKIAogCkBAIC00MCw3ICs0MCw3IEBACiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENsYXNzIGNseiA9IENsYXNzLmZvck5hbWUoY2xhc3NOYW1lKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBNYXAgbWV0aG9kTWFwID0gbmV3IEhhc2hNYXAoKTsKIAogICAgICAgICAgICAgTWV0aG9kW10gbWV0aG9kcyA9IGNsei5nZXRNZXRob2RzKCk7CkBAIC00OSw3ICs0OSw3IEBACiAgICAgICAgICAgICAgICAgbWV0aG9kTWFwLnB1dChtZXRob2RzW2ldLCBtZXRob2RzW2ldLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXaXRoIHJlZ3VsYXIgaGFzaG1hcCIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwpAQCAtNjAsMTEgKzYwLDExIEBACiAgICAgICAgICAgICAgICAgdG90YWxUaW1lICs9IHRpbWU7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHRvTWljcm9TZWNvbmRzKHRpbWUsIG51bUl0ZXJhdGlvbnMpICsgIiA6ICIgKyBtLmdldE5hbWUoKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkF2ZyB0aW1lID0gIiArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBdmcgdGltZSA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvTWljcm9TZWNvbmRzKHRvdGFsVGltZSAvIG1ldGhvZHMubGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUl0ZXJhdGlvbnMpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgCisKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXaXRoIG9wdGltaXplZCBtZXRob2QgbG9va3VwIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CkBAIC03NywxMSArNzcsMTEgQEAKICAgICAgICAgICAgICAgICB0b3RhbFRpbWUgKz0gdGltZTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odG9NaWNyb1NlY29uZHModGltZSwgbnVtSXRlcmF0aW9ucykgKyAiIDogIiArIG0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQXZnIHRpbWUgPSAiICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkF2ZyB0aW1lID0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9NaWNyb1NlY29uZHModG90YWxUaW1lIC8gbWV0aG9kcy5sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtSXRlcmF0aW9ucykpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgCisKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXaXRoIGV4dHJhIG9wdGltaXplZCBtZXRob2QgbG9va3VwIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CkBAIC05NCwxMCArOTQsMTAgQEAKICAgICAgICAgICAgICAgICB0b3RhbFRpbWUgKz0gdGltZTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odG9NaWNyb1NlY29uZHModGltZSwgbnVtSXRlcmF0aW9ucykgKyAiIDogIiArIG0uZ2V0TmFtZSgpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQXZnIHRpbWUgPSAiICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkF2ZyB0aW1lID0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9NaWNyb1NlY29uZHModG90YWxUaW1lIC8gbWV0aG9kcy5sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtSXRlcmF0aW9ucykpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXaXRoIGphdmEudXRpbC5JZGVudGl0eUhhc2hNYXAgbG9va3VwIik7CkBAIC0xMTMsMTAgKzExMywxMCBAQAogCiAgICAgICAgICAgICAqLwogCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIGxvbmcgaWhjVGltZSA9IHRlc3RTeXN0ZW1JZGVudGl0eUhhc2hDb2RlKG51bUl0ZXJhdGlvbnMpOyAgICAgICAgICAgIAorCisgICAgICAgICAgICBsb25nIGloY1RpbWUgPSB0ZXN0U3lzdGVtSWRlbnRpdHlIYXNoQ29kZShudW1JdGVyYXRpb25zKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigic3lzdGVtIGlkZW50aXR5IGhhc2ggY29kZT0gIiArIHRvTWljcm9TZWNvbmRzKGloY1RpbWUsIG51bUl0ZXJhdGlvbnMpKTsKLSAgICAgICAgICAgCisKIAogICAgICAgICAgICAgTWV0aG9kUGVyZiBtbCA9IG5ldyBNZXRob2RQZXJmKCk7CiAKQEAgLTEzMSw3ICsxMzEsNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnN0YW5jZSBzdHJvbmcgdHlwZWQgaW52b2NhdGlvbiB0aW1lID0gIiArIHRvTWljcm9TZWNvbmRzKGlfc1RpbWUsIG51bUl0ZXJhdGlvbnMpKTsKICAgICAgICAgICAgIGxvbmcgaV9yVGltZSA9IHRlc3RTdGF0aWNSZWZsZWN0aXZlSW52b2NhdGlvbihudW1JdGVyYXRpb25zLCBmb29NZXRob2QpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnN0YW5jZSByZWZsZWN0aXZlIGludm9jYXRpb24gdGltZSA9ICIgKyB0b01pY3JvU2Vjb25kcyhpX3JUaW1lLCBudW1JdGVyYXRpb25zKSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CkBAIC0xNTEsMTAgKzE1MSwxMCBAQAogICAgICAgICBsb25nIGVuZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwogCiAKLSAgICAgICAgLy8gbWVhc3VyZSB0aGUgdGltZSBmb3IgdGhlIGxvb3AgcHJvY2Vzc2luZyBpdHNlbGYgCisgICAgICAgIC8vIG1lYXN1cmUgdGhlIHRpbWUgZm9yIHRoZSBsb29wIHByb2Nlc3NpbmcgaXRzZWxmCiAgICAgICAgIGxvbmcgYmVnaW5Mb29wID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW1JdGVyYXRpb25zOyBpKyspIHsKLSAgICAgICAgfSAgICAgICAgCisgICAgICAgIH0KICAgICAgICAgbG9uZyBlbmRMb29wID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAgICAgICAgIGxvbmcgbG9vcFRpbWUgPSBlbmRMb29wIC0gYmVnaW5Mb29wOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb3AgdGltZSA9ICIgKyBsb29wVGltZSk7CkBAIC0xNjksMTAgKzE2OSwxMCBAQAogICAgICAgICB9CiAgICAgICAgIGxvbmcgZW5kID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAKLSAgICAgICAgLy8gbWVhc3VyZSB0aGUgdGltZSBmb3IgdGhlIGxvb3AgcHJvY2Vzc2luZyBpdHNlbGYgCisgICAgICAgIC8vIG1lYXN1cmUgdGhlIHRpbWUgZm9yIHRoZSBsb29wIHByb2Nlc3NpbmcgaXRzZWxmCiAgICAgICAgIGxvbmcgYmVnaW5Mb29wID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW1JdGVyYXRpb25zOyBpKyspIHsKLSAgICAgICAgfSAgICAgICAgCisgICAgICAgIH0KICAgICAgICAgbG9uZyBlbmRMb29wID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAgICAgICAgIGxvbmcgbG9vcFRpbWUgPSBlbmRMb29wIC0gYmVnaW5Mb29wOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb3AgdGltZSA9ICIgKyBsb29wVGltZSk7CkBAIC0xODcsMTAgKzE4NywxMCBAQAogICAgICAgICB9CiAgICAgICAgIGxvbmcgZW5kID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAKLSAgICAgICAgLy8gbWVhc3VyZSB0aGUgdGltZSBmb3IgdGhlIGxvb3AgcHJvY2Vzc2luZyBpdHNlbGYgCisgICAgICAgIC8vIG1lYXN1cmUgdGhlIHRpbWUgZm9yIHRoZSBsb29wIHByb2Nlc3NpbmcgaXRzZWxmCiAgICAgICAgIGxvbmcgYmVnaW5Mb29wID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW1JdGVyYXRpb25zOyBpKyspIHsKLSAgICAgICAgfSAgICAgICAgCisgICAgICAgIH0KICAgICAgICAgbG9uZyBlbmRMb29wID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAgICAgICAgIGxvbmcgbG9vcFRpbWUgPSBlbmRMb29wIC0gYmVnaW5Mb29wOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb3AgdGltZSA9ICIgKyBsb29wVGltZSk7CkBAIC0yMDUsMTAgKzIwNSwxMCBAQAogICAgICAgICB9CiAgICAgICAgIGxvbmcgZW5kID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAKLSAgICAgICAgLy8gbWVhc3VyZSB0aGUgdGltZSBmb3IgdGhlIGxvb3AgcHJvY2Vzc2luZyBpdHNlbGYgCisgICAgICAgIC8vIG1lYXN1cmUgdGhlIHRpbWUgZm9yIHRoZSBsb29wIHByb2Nlc3NpbmcgaXRzZWxmCiAgICAgICAgIGxvbmcgYmVnaW5Mb29wID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW1JdGVyYXRpb25zOyBpKyspIHsKLSAgICAgICAgfSAgICAgICAgCisgICAgICAgIH0KICAgICAgICAgbG9uZyBlbmRMb29wID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAgICAgICAgIGxvbmcgbG9vcFRpbWUgPSBlbmRMb29wIC0gYmVnaW5Mb29wOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb3AgdGltZSA9ICIgKyBsb29wVGltZSk7CkBAIC0yMjIsNDggKzIyMiw0OCBAQAogICAgICAgICB9CiAgICAgICAgIGxvbmcgZW5kID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAKLSAgICAgICAgLy8gbWVhc3VyZSB0aGUgdGltZSBmb3IgdGhlIGxvb3AgcHJvY2Vzc2luZyBpdHNlbGYgCisgICAgICAgIC8vIG1lYXN1cmUgdGhlIHRpbWUgZm9yIHRoZSBsb29wIHByb2Nlc3NpbmcgaXRzZWxmCiAgICAgICAgIGxvbmcgYmVnaW5Mb29wID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW1JdGVyYXRpb25zOyBpKyspIHsKLSAgICAgICAgfSAgICAgICAgCisgICAgICAgIH0KICAgICAgICAgbG9uZyBlbmRMb29wID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAgICAgICAgIGxvbmcgbG9vcFRpbWUgPSBlbmRMb29wIC0gYmVnaW5Mb29wOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb3AgdGltZSA9ICIgKyBsb29wVGltZSk7CiAgICAgICAgIHJldHVybiAoZW5kIC0gYmVnaW4pIC0gbG9vcFRpbWU7CiAgICAgfQogCi0gICAgcHJpdmF0ZSBzdGF0aWMgbG9uZyB0ZXN0U3RhdGljUmVmbGVjdGl2ZUludm9jYXRpb24oaW50IG51bUl0ZXJhdGlvbnMsIE1ldGhvZCBtKSAKKyAgICBwcml2YXRlIHN0YXRpYyBsb25nIHRlc3RTdGF0aWNSZWZsZWN0aXZlSW52b2NhdGlvbihpbnQgbnVtSXRlcmF0aW9ucywgTWV0aG9kIG0pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICBsb25nIGJlZ2luID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7ICAgICAgICAKKworICAgICAgICBsb25nIGJlZ2luID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW1JdGVyYXRpb25zOyBpKyspIHsKICAgICAgICAgICAgIG0uaW52b2tlKG51bGwsIG51bGwpOwogICAgICAgICB9CiAgICAgICAgIGxvbmcgZW5kID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAKLSAgICAgICAgLy8gbWVhc3VyZSB0aGUgdGltZSBmb3IgdGhlIGxvb3AgcHJvY2Vzc2luZyBpdHNlbGYgCisgICAgICAgIC8vIG1lYXN1cmUgdGhlIHRpbWUgZm9yIHRoZSBsb29wIHByb2Nlc3NpbmcgaXRzZWxmCiAgICAgICAgIGxvbmcgYmVnaW5Mb29wID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW1JdGVyYXRpb25zOyBpKyspIHsKLSAgICAgICAgfSAgICAgICAgCisgICAgICAgIH0KICAgICAgICAgbG9uZyBlbmRMb29wID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAgICAgICAgIGxvbmcgbG9vcFRpbWUgPSBlbmRMb29wIC0gYmVnaW5Mb29wOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb3AgdGltZSA9ICIgKyBsb29wVGltZSk7CiAgICAgICAgIHJldHVybiAoZW5kIC0gYmVnaW4pIC0gbG9vcFRpbWU7CiAgICAgfQogCi0gICAgcHJpdmF0ZSBzdGF0aWMgbG9uZyB0ZXN0SW5zdGFuY2VSZWZsZWN0aXZlSW52b2NhdGlvbihpbnQgbnVtSXRlcmF0aW9ucywgT2JqZWN0IG8sIE1ldGhvZCBtKSAKKyAgICBwcml2YXRlIHN0YXRpYyBsb25nIHRlc3RJbnN0YW5jZVJlZmxlY3RpdmVJbnZvY2F0aW9uKGludCBudW1JdGVyYXRpb25zLCBPYmplY3QgbywgTWV0aG9kIG0pCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICBsb25nIGJlZ2luID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7ICAgICAgICAKKworICAgICAgICBsb25nIGJlZ2luID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW1JdGVyYXRpb25zOyBpKyspIHsKICAgICAgICAgICAgIG0uaW52b2tlKG8sIG51bGwpOwogICAgICAgICB9CiAgICAgICAgIGxvbmcgZW5kID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAKLSAgICAgICAgLy8gbWVhc3VyZSB0aGUgdGltZSBmb3IgdGhlIGxvb3AgcHJvY2Vzc2luZyBpdHNlbGYgCisgICAgICAgIC8vIG1lYXN1cmUgdGhlIHRpbWUgZm9yIHRoZSBsb29wIHByb2Nlc3NpbmcgaXRzZWxmCiAgICAgICAgIGxvbmcgYmVnaW5Mb29wID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW1JdGVyYXRpb25zOyBpKyspIHsKLSAgICAgICAgfSAgICAgICAgCisgICAgICAgIH0KICAgICAgICAgbG9uZyBlbmRMb29wID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAgICAgICAgIGxvbmcgbG9vcFRpbWUgPSBlbmRMb29wIC0gYmVnaW5Mb29wOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb3AgdGltZSA9ICIgKyBsb29wVGltZSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9jb21taXQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2NvbW1pdC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGY2MDRiYzQuLjQ4YzhkOWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2NvbW1pdC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2NvbW1pdC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOSArMTUsMTkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi13ZWJzZXJ2aWNlLWNvbW1pdCIvPgotPHByb3BlcnR5IG5hbWU9ImNsaWVudF9wa2duYW1lIiB2YWx1ZT0iY29tLnN1bi5zMWFzZGV2LmVqYi53ZWJzZXJ2aWNlLmNvbW1pdC5jbGllbnQiLz4gICAgICAgICAKLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iY2xpZW50X3BrZ25hbWUiIHZhbHVlPSJjb20uc3VuLnMxYXNkZXYuZWpiLndlYnNlcnZpY2UuY29tbWl0LmNsaWVudCIvPiAgICAgICAgXHUwMDIwCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2NvbW1pdC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9jb21taXQvYnVpbGQueG1sCmluZGV4IDA2MDI5MDIuLjdiNGY5N2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2NvbW1pdC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2UvY29tbWl0L2J1aWxkLnhtbApAQCAtMzIsMTIgKzMyLDEyIEBACiAgICAgJnJ1bjsKIAogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCxjcmVhdGVfdGFibGUsZGVwbG95LHJ1bix1bmRlcGxveSxkZWxldGVfdGFibGUiLz4KLSAgICAgICAgICAgIAorCiAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDExICs0NiwxMSBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVqYi1qYXItY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi9Db21taXQqLmNsYXNzIiAvPgogICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlX3RhYmxlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtZWpiLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KQEAgLTY0LDE2ICs2NCwxNiBAQAogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY2xpZW50Ii8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFwcGNsaWVudC1qYXItY29tbW9uIj4KLSAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSJjb20vc3VuL3MxYXNkZXYvZWpiL3dlYnNlcnZpY2UvY29tbWl0L2NsaWVudC8qLmNsYXNzIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiIHVwZGF0ZT0ieWVzIj4KLSAgICAgICAgICAgIDx6aXBmaWxlc2V0IHNyYz0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIAorICAgICAgICAgICAgPHppcGZpbGVzZXQgc3JjPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVzPSJNRVRBLUlORi8qKiIvPgogICAgICAgICA8L2phcj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogCiAgICAgPHRhcmdldCBuYW1lPSJ3c2RsLWltcG9ydCI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbmZpZ3VyYWJsZS13c2RsLWltcG9ydCI+CkBAIC04NSw3ICs4NSw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImNvbmZpZ3VyYWJsZS13c2RsLWltcG9ydCI+CiAgICAgICA8ZWNobyBtZXNzYWdlPSJ3c2ltcG9ydGluZyAke3Byb3RvY29sfTovLyR7aG9zdC1uYW1lfToke2hvc3QtcG9ydH0vJHtzZXJ2ZXJ9Ci0gICAgICAgU2VydmljZS8ke3BvcnR9P1dTREw7IHNwZWNpYWwgYXJncyBhcmUgJHt3c2ltcG9ydC1zcGVjaWFsLWFyZ3N9Ii8+ICAKKyAgICAgICBTZXJ2aWNlLyR7cG9ydH0/V1NETDsgc3BlY2lhbCBhcmdzIGFyZSAke3dzaW1wb3J0LXNwZWNpYWwtYXJnc30iLz4KICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL3dzaW1wb3J0Ij4KICAgICAgICAgPGFyZyBsaW5lPSIta2VlcCAtcCAke2NsaWVudF9wa2duYW1lfSAtZCAke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMgJHtwcm90b2NvbH06Ly8ke2hvc3QtbmFtZX06JHtob3N0LXBvcnR9L0NvbW1pdEJlYW5TZXJ2aWNlL0NvbW1pdEJlYW4/V1NETCIvPgogICAgICAgPC9leGVjPgpAQCAtOTMsMTQgKzkzLDE0IEBACiAKICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL2FwcGNsaWVudCIgZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2FyY2hpdmUiPgotICAgICAgICA8YXJnIGxpbmU9Ii1jbGllbnQgJHttb2R1bGV9LWNsaWVudENsaWVudC5qYXIiLz4gICAgCisgICAgICAgIDxhcmcgbGluZT0iLWNsaWVudCAke21vZHVsZX0tY2xpZW50Q2xpZW50LmphciIvPgogICAgICAgPC9leGVjPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qYXItY29tbW9uIi8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNsaWVudC1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlX3RhYmxlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtZWpiLXNxbC1jb21tb24iPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2UvY29tbWl0L2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2NvbW1pdC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggNTFhMmNjYi4uZTg0MWU5NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2UvY29tbWl0L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9jb21taXQvY2xpZW50L0NsaWVudC5qYXZhCkBAIC01MiwxMSArNTIsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGluc3RlYWQgb2Ygc3lzdGVtIGV4Y2VwdGlvbiIpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfSUQsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9IGNhdGNoKFRocm93YWJsZSBlKSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgcmVjZWl2ZWQgIiArIGUgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2Nlc3NmdWxseSByZWNlaXZlZCAiICsgZSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb3IgY29tbWl0IGZhaWx1cmUiKTsKLSAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX0lELCBzdGF0LlBBU1MpOyAgICAKKyAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX0lELCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfSUQsIHN0YXQuRkFJTCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9jb21taXQvZWpiL0NvbW1pdEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2NvbW1pdC9lamIvQ29tbWl0QmVhbi5qYXZhCmluZGV4IDRiYjUyNzQuLmFkMDEwYjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2NvbW1pdC9lamIvQ29tbWl0QmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2NvbW1pdC9lamIvQ29tbWl0QmVhbi5qYXZhCkBAIC0zMSwzNCArMzEsMzQgQEAKICAgICBAUmVzb3VyY2UobWFwcGVkTmFtZT0iamRiYy9fX2RlZmF1bHQiKQogICAgIHByaXZhdGUgRGF0YVNvdXJjZSBkczsKIAotICAgIEBSZXNvdXJjZSAKKyAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IHNlc3Npb25DdHg7CiAKICAgICBwdWJsaWMgaW50IGZpbmRDdXN0b21lcihpbnQgaSkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiB7Ci0JQ29ubmVjdGlvbiBjID0gbnVsbDsKLSAgICAgCVByZXBhcmVkU3RhdGVtZW50IHBzID0gbnVsbDsKKyAgICBDb25uZWN0aW9uIGMgPSBudWxsOworICAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHMgPSBudWxsOwogICAgICAgICBpbnQgcmV0dXJuVmFsdWUgPSAtMTsKLQl0cnkgewotCSAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAJICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAotCQkiU0VMRUNUIGNfaWQgZnJvbSBPX2N1c3RvbWVyIHdoZXJlIGNfaWQgPSA/Iik7Ci0JICAgIHBzLnNldEludCgxLCBpKTsKLQkgICAgUmVzdWx0U2V0IHJzID0gcHMuZXhlY3V0ZVF1ZXJ5KCk7Ci0JICAgIGlmICghcnMubmV4dCgpKQotCSAgICAgICB0aHJvdyBuZXcgRmluZGVyRXhjZXB0aW9uKCJObyBjdXN0IGZvciAiICsgaSk7Ci0JICAgIHJldHVyblZhbHVlID0gcnMuZ2V0SW50KDEpOworICAgIHRyeSB7CisgICAgICAgIGMgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgICAgICAgcHMgPSBjLnByZXBhcmVTdGF0ZW1lbnQoCisgICAgICAgICJTRUxFQ1QgY19pZCBmcm9tIE9fY3VzdG9tZXIgd2hlcmUgY19pZCA9ID8iKTsKKyAgICAgICAgcHMuc2V0SW50KDEsIGkpOworICAgICAgICBSZXN1bHRTZXQgcnMgPSBwcy5leGVjdXRlUXVlcnkoKTsKKyAgICAgICAgaWYgKCFycy5uZXh0KCkpCisgICAgICAgICAgIHRocm93IG5ldyBGaW5kZXJFeGNlcHRpb24oIk5vIGN1c3QgZm9yICIgKyBpKTsKKyAgICAgICAgcmV0dXJuVmFsdWUgPSBycy5nZXRJbnQoMSk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZpbmRDdXN0b21lciA9ICIgKyByZXR1cm5WYWx1ZSk7Ci0JfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7CisgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICB0aHJvdyBuZXcgRmluZGVyRXhjZXB0aW9uKCJTUUwgZXhjZXB0aW9uICIgKyBlKTsKLQl9IGZpbmFsbHkgeyAKLQkgICAgdHJ5IHsKLQkJaWYgKHBzICE9IG51bGwpCi0JCSAgICBwcy5jbG9zZSgpOwotCQlpZiAoYyAhPSBudWxsKQotCQkgICAgYy5jbG9zZSgpOwotCSAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KLQl9CisgICAgICAgIHRocm93IG5ldyBGaW5kZXJFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOworICAgIH0gZmluYWxseSB7CisgICAgICAgIHRyeSB7CisgICAgICAgIGlmIChwcyAhPSBudWxsKQorICAgICAgICAgICAgcHMuY2xvc2UoKTsKKyAgICAgICAgaWYgKGMgIT0gbnVsbCkKKyAgICAgICAgICAgIGMuY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9CisgICAgfQogCiAgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKICAgICB9CkBAIC02NiwzOCArNjYsMzggQEAKICAgICBwdWJsaWMgdm9pZCB1cGRhdGVDdXN0b21lcigpIHRocm93cyBGaW5kZXJFeGNlcHRpb24gewogCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIkluIHVwZGF0ZUN1c3RvbWVyIGNhbGxlciIgKTsKLSAgICAgICAgCi0JQ29ubmVjdGlvbiBjID0gbnVsbDsKLSAgICAgCVByZXBhcmVkU3RhdGVtZW50IHBzID0gbnVsbDsKLQl0cnkgewotCSAgICBjID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAJICAgIHBzID0gYy5wcmVwYXJlU3RhdGVtZW50KAotCQkiVVBEQVRFIE9fY3VzdG9tZXIgU0VUIGNfcGhvbmUgPSA/IFdIRVJFIGNfaWQgPSAyIEFORCBjX3Bob25lID0gJ2ZvbyciKTsKKworICAgIENvbm5lY3Rpb24gYyA9IG51bGw7CisgICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwcyA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgYyA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgICAgICBwcyA9IGMucHJlcGFyZVN0YXRlbWVudCgKKyAgICAgICAgIlVQREFURSBPX2N1c3RvbWVyIFNFVCBjX3Bob25lID0gPyBXSEVSRSBjX2lkID0gMiBBTkQgY19waG9uZSA9ICdmb28nIik7CiAgICAgICAgICAgICBwcy5zZXRTdHJpbmcoMSwgIndlYnNlcnZpY2UiKTsKLQkgICAgaW50IHJlc3VsdCA9IHBzLmV4ZWN1dGVVcGRhdGUoKTsKKyAgICAgICAgaW50IHJlc3VsdCA9IHBzLmV4ZWN1dGVVcGRhdGUoKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZXhlY3V0ZSB1cGRhdGUgcmV0dXJuZWQgIiArIHJlc3VsdCk7Ci0JfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7CisgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpICB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICB0aHJvdyBuZXcgRmluZGVyRXhjZXB0aW9uKCJTUUwgZXhjZXB0aW9uICIgKyBlKTsKLQl9IGZpbmFsbHkgeyAKLQkgICAgdHJ5IHsKLQkJaWYgKHBzICE9IG51bGwpCi0JCSAgICBwcy5jbG9zZSgpOwotCQlpZiAoYyAhPSBudWxsKQotCQkgICAgYy5jbG9zZSgpOwotCSAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkge30KLQl9CisgICAgICAgIHRocm93IG5ldyBGaW5kZXJFeGNlcHRpb24oIlNRTCBleGNlcHRpb24gIiArIGUpOworICAgIH0gZmluYWxseSB7CisgICAgICAgIHRyeSB7CisgICAgICAgIGlmIChwcyAhPSBudWxsKQorICAgICAgICAgICAgcHMuY2xvc2UoKTsKKyAgICAgICAgaWYgKGMgIT0gbnVsbCkKKyAgICAgICAgICAgIGMuY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHt9CisgICAgfQogCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWRkaW5nIENvbW1pdFN0YXRlZnVsQmVhbiB3aXRoIFNlc3Npb25TeW5jaCAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgdG8gdHJhbnNhY3Rpb24iKTsKLSAgICAgICAgCisKIAogICAgICAgICBDb21taXRTdGF0ZWZ1bExvY2FsIGNzYiA9IChDb21taXRTdGF0ZWZ1bExvY2FsKQogICAgICAgICAgICAgc2Vzc2lvbkN0eC5sb29rdXAoImNzYiIpOwogICAgICAgICBjc2IuZm9vKCk7CiAKICAgICAgICAgcmV0dXJuOwotICAgICAgICAKKwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2UvY29tbWl0L2VqYi9Db21taXRTdGF0ZWZ1bEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2NvbW1pdC9lamIvQ29tbWl0U3RhdGVmdWxCZWFuLmphdmEKaW5kZXggOWJmZTM0MS4uYWU3MmMxMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2UvY29tbWl0L2VqYi9Db21taXRTdGF0ZWZ1bEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9jb21taXQvZWpiL0NvbW1pdFN0YXRlZnVsQmVhbi5qYXZhCkBAIC0yMCw3ICsyMCw3IEBACiBpbXBvcnQgamFrYXJ0YS5hbm5vdGF0aW9uLlJlc291cmNlOwogCiBAU3RhdGVmdWwKLXB1YmxpYyBjbGFzcyBDb21taXRTdGF0ZWZ1bEJlYW4gCitwdWJsaWMgY2xhc3MgQ29tbWl0U3RhdGVmdWxCZWFuCiAgICAgaW1wbGVtZW50cyBDb21taXRTdGF0ZWZ1bExvY2FsLCBTZXNzaW9uU3luY2hyb25pemF0aW9uIHsKIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9jb21taXQvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2UvY29tbWl0L3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCA2OTc1ODc1Li5iMGEzNDk3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9jb21taXQvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2NvbW1pdC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsOCArMSw4IEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQotDQotQ1JFQVRFIFRBQkxFIE9fQ3VzdG9tZXIgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBOT1QgTlVMTCBQUklNQVJZIEtFWSwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMzIpDQotKTsNCi0NCitEcm9wIHRhYmxlIE9fQ3VzdG9tZXI7CisKK0NSRUFURSBUQUJMRSBPX0N1c3RvbWVyICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBOT1QgTlVMTCBQUklNQVJZIEtFWSwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigzMikKKyk7CisKIElOU0VSVCBJTlRPIE9fQ3VzdG9tZXIgdmFsdWVzICgyLCAnZm9vJyk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2UvY29tbWl0L3NxbC9kcm9wX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9jb21taXQvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAppbmRleCA3MGQxZmNjLi5kODU0Yjk1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9jb21taXQvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9jb21taXQvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbApAQCAtMSArMSBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2tzaW5rL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9rc2luay9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDY4Zjc2MzEuLjNiYjA5MWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2tzaW5rL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2Uva3NpbmsvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjMgKzE1LDIzIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJrc2luayIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWJzZXJ2aWNlcy54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYnNlcnZpY2VzLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93YXIvd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93YXIvc3VuLXdlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2tzaW5rL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2tzaW5rL2J1aWxkLnhtbAppbmRleCBlODAwYzQyLi4zOGI2NTE1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9rc2luay9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2Uva3NpbmsvYnVpbGQueG1sCkBAIC0zNCw5ICszNCw5IEBACiAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJjbGVhbixidWlsZCxkZXBsb3kscnVuLHVuZGVwbG95Ii8+CiAKICAgPHRhcmdldCBuYW1lPSJydW4ud3Njb21waWxlIj4KLQk8ZXhlYyBleGVjdXRhYmxlPSIke1dTQ09NUElMRX0iIGZhaWxvbmVycm9yPSJ0cnVlIiA+Ci0gICAgICAgIDxhcmcgbGluZT0iJHt3c2NvbXBpbGUuY29tbWFuZH0iIC8+ICAgICAgICAKLQk8L2V4ZWM+CisgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtXU0NPTVBJTEV9IiBmYWlsb25lcnJvcj0idHJ1ZSIgPgorICAgICAgICA8YXJnIGxpbmU9IiR7d3Njb21waWxlLmNvbW1hbmR9IiAvPgorICAgIDwvZXhlYz4KICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSIiPgpAQCAtNjUsMTEgKzY1LDExIEBACiAgIDx0YXJnZXQgbmFtZT0id3Njb21waWxlLWFwcGNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxta2RpciBkaXI9Im91dHB1dCIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLndzY29tcGlsZSI+Ci0gICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiIAorICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIgogICAgICAgIHZhbHVlPSItaW1wb3J0IC1mOm5vcnBjc3RydWN0dXJlcyAta2VlcCAtZCBvdXRwdXQgLXMgb3V0cHV0IC1jbGFzc3BhdGggLiAtbW9kZWwgZ29vZ2xlY2xpZW50Lm1vZGVsIHdzY29tcGlsZV9jb25maWdfYXBwY2xpZW50LnhtbCIvPgogICAgIDwvYW50Y2FsbD4KICAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY29tL3N1bi9zMWFzZGV2L2VqYi93ZWJzZXJ2aWNlL2tzaW5rL2dvb2dsZWNsaWVudCI+Ci0gICAgICAgPGZpbGVzZXQgZGlyPSJvdXRwdXQvL2NvbS9zdW4vczFhc2Rldi9lamIvd2Vic2VydmljZS9rc2luay9nb29nbGVjbGllbnQiIAorICAgICAgIDxmaWxlc2V0IGRpcj0ib3V0cHV0Ly9jb20vc3VuL3MxYXNkZXYvZWpiL3dlYnNlcnZpY2Uva3NpbmsvZ29vZ2xlY2xpZW50IgogICAgICAgICBpbmNsdWRlcz0iRGlyZWN0b3J5Q2F0ZWdvcnkuY2xhc3MsIEdvb2dsZVNlYXJjaFJlc3VsdC5jbGFzcywgR29vZ2xlU2VhcmNoU2VydmljZS5jbGFzcywgR29vZ2xlU2VhcmNoUG9ydC5jbGFzcywgUmVzdWx0RWxlbWVudC5jbGFzcyIvPgogICAgIDwvY29weT4KICAgICA8IS0tIDxkZWxldGUgZGlyPSJvdXRwdXQiLz4gLS0+CkBAIC03OCwxMSArNzgsMTEgQEAKICAgPHRhcmdldCBuYW1lPSJ3c2NvbXBpbGUtZWpiIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPG1rZGlyIGRpcj0ib3V0cHV0Ii8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4ud3Njb21waWxlIj4KLSAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIgCisgICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiCiAgICAgICAgdmFsdWU9Ii1pbXBvcnQgLWY6bm9ycGNzdHJ1Y3R1cmVzIC1rZWVwIC1kIG91dHB1dCAtcyBvdXRwdXQgLWNsYXNzcGF0aCAuIHdzY29tcGlsZV9jb25maWdfZWpiLnhtbCIvPgogICAgIDwvYW50Y2FsbD4KICAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY29tL3N1bi9zMWFzZGV2L2VqYi93ZWJzZXJ2aWNlL2tzaW5rL2dvb2dsZXNlcnZlciI+Ci0gICAgICAgPGZpbGVzZXQgZGlyPSJvdXRwdXQvY29tL3N1bi9zMWFzZGV2L2VqYi93ZWJzZXJ2aWNlL2tzaW5rL2dvb2dsZXNlcnZlciIgCisgICAgICAgPGZpbGVzZXQgZGlyPSJvdXRwdXQvY29tL3N1bi9zMWFzZGV2L2VqYi93ZWJzZXJ2aWNlL2tzaW5rL2dvb2dsZXNlcnZlciIKICAgICAgICAgaW5jbHVkZXM9IkRpcmVjdG9yeUNhdGVnb3J5LmNsYXNzLCBHb29nbGVTZWFyY2hSZXN1bHQuY2xhc3MsIEdvb2dsZVNlYXJjaFBvcnQuY2xhc3MsIFJlc3VsdEVsZW1lbnQuY2xhc3MiLz4KICAgICA8L2NvcHk+CiAgICAgPGRlbGV0ZSBkaXI9Im91dHB1dCIvPgpAQCAtOTEsMzcgKzkxLDM3IEBACiAgIDx0YXJnZXQgbmFtZT0id3Njb21waWxlLXdlYiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxta2RpciBkaXI9Im91dHB1dCIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLndzY29tcGlsZSI+Ci0gICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiIAorICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIgogICAgICAgICAgICAgdmFsdWU9Ii1pbXBvcnQgLWY6bm9ycGNzdHJ1Y3R1cmVzIC1rZWVwIC1kIG91dHB1dCAtcyBvdXRwdXQgLW1vZGVsIGdvb2dsZXdlYi5tb2RlbCAtY2xhc3NwYXRoIC4gd3Njb21waWxlX2NvbmZpZ193ZWIueG1sIi8+CiAgICAgPC9hbnRjYWxsPgogICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jb20vc3VuL3MxYXNkZXYvZWpiL3dlYnNlcnZpY2Uva3NpbmsvZ29vZ2xlc2VydmVyd2ViIj4KLSAgICAgICA8ZmlsZXNldCBkaXI9Im91dHB1dC9jb20vc3VuL3MxYXNkZXYvZWpiL3dlYnNlcnZpY2Uva3NpbmsvZ29vZ2xlc2VydmVyd2ViIiAKKyAgICAgICA8ZmlsZXNldCBkaXI9Im91dHB1dC9jb20vc3VuL3MxYXNkZXYvZWpiL3dlYnNlcnZpY2Uva3NpbmsvZ29vZ2xlc2VydmVyd2ViIgogICAgICAgICBpbmNsdWRlcz0iRGlyZWN0b3J5Q2F0ZWdvcnkuY2xhc3MsIEdvb2dsZVNlYXJjaFJlc3VsdC5jbGFzcywgR29vZ2xlU2VhcmNoUG9ydC5jbGFzcywgUmVzdWx0RWxlbWVudC5jbGFzcyIvPgogICAgIDwvY29weT4KICAgICA8ZGVsZXRlIGRpcj0ib3V0cHV0Ii8+CiAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUiIGRlcGVuZHM9ImluaXQtY29tbW9uLCBjb21waWxlIj4KLSAgICA8IS0tIAotCUVKQiBtb2R1bGUgY3JlYXRpb24KKyAgICA8IS0tCisgICAgRUpCIG1vZHVsZSBjcmVhdGlvbgogICAgIC0tPgogICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi93c2RsIgogICAgICAgZmlsZT0iR29vZ2xlU2VhcmNoLndzZGwiLz4KICAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvd3NkbCIKICAgICAgIGZpbGU9Ikdvb2dsZVNlYXJjaF90eXBlcy53c2RsIi8+Ci0gICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiAKLQkgZmlsZT0iR29vZ2xlTWFwcGluZ19lamIueG1sIi8+CisgICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgorICAgICBmaWxlPSJHb29nbGVNYXBwaW5nX2VqYi54bWwiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVqYi1qYXItY29tbW9uIj4KLSAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgdmFsdWU9Ikdvb2dsZU1hcHBpbmdfZWpiLnhtbCxNRVRBLUlORi93c2RsLyoqLCoqLyouY2xhc3MiIC8+CiAKICAgICA8L2FudGNhbGw+Ci0gICAgPCEtLSAKLQlXYXIgbW9kdWxlIGNyZWF0aW9uIAorICAgIDwhLS0KKyAgICBXYXIgbW9kdWxlIGNyZWF0aW9uCiAgICAgLS0+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC13YXItZmlsZSIvPgotICAgIDwhLS0gCi0JQXBwQ2xpZW50IG1vZHVsZSBjcmVhdGlvbgorICAgIDwhLS0KKyAgICBBcHBDbGllbnQgbW9kdWxlIGNyZWF0aW9uCiAgICAgLS0+CiAgICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3dzZGwiCiAgICAgICBmaWxlPSJHb29nbGVTZWFyY2gud3NkbCIvPgpAQCAtMTI5LDM2ICsxMjksMzYgQEAKICAgICAgIGZpbGU9Ikdvb2dsZVNlYXJjaF90eXBlcy53c2RsIi8+CiAgICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3dzZGwiCiAgICAgICBmaWxlPSJHb29nbGVTZWFyY2hfcGFydGlhbC53c2RsIi8+Ci0gICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiAKLQkgZmlsZT0iR29vZ2xlTWFwcGluZ19hcHBjbGllbnQueG1sIi8+Ci0gICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiAKLQkgZmlsZT0iZ29vZ2xlY2xpZW50Lm1vZGVsIi8+CisgICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgorICAgICBmaWxlPSJHb29nbGVNYXBwaW5nX2FwcGNsaWVudC54bWwiLz4KKyAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCisgICAgIGZpbGU9Imdvb2dsZWNsaWVudC5tb2RlbCIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0iYXBwY2xpZW50LWphci1jb21tb24iPgotICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICB2YWx1ZT0iZ29vZ2xlY2xpZW50Lm1vZGVsLEdvb2dsZU1hcHBpbmdfYXBwY2xpZW50LnhtbCxNRVRBLUlORi93c2RsLyoqLCoqLyouY2xhc3MiIC8+CiAKICAgICA8L2FudGNhbGw+Ci0gICAgPCEtLSAKLQlFQVIgZmlsZSBjcmVhdGlvbiAKKyAgICA8IS0tCisgICAgRUFSIGZpbGUgY3JlYXRpb24KICAgICAtLT4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVhci1jb21tb24iIC8+CiAgICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIgogICAgICAgZmlsZT0iJHtzdW4tYXBwbGljYXRpb24ueG1sfSIvPgotICAgIDxqYXIgZGVzdGZpbGUgPSAiJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIiAKLQl1cGRhdGU9InRydWUiPgorICAgIDxqYXIgZGVzdGZpbGUgPSAiJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIgorICAgIHVwZGF0ZT0idHJ1ZSI+CiAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ij4KLQk8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIi8+CisgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogICAgICAgPC9maWxlc2V0PgogICAgIDwvamFyPgotCQotICA8L3RhcmdldD4gCisKKyAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJidWlsZC1hcHBjbGllbnQtZmlsZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICA8L3RhcmdldD4KIAogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXdhci1maWxlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGVjaG8gbWVzc2FnZT0ibXkgYnVpbGQgY2xhc3NlcyBkaXIgaXM6JHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KLSAgICA8ZGVsZXRlIGZpbGU9IiR7d2FyLmZpbGV9Ii8+ICAKKyAgICA8ZGVsZXRlIGZpbGU9IiR7d2FyLmZpbGV9Ii8+CiAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wIi8+CiAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYiLz4KICAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYiCkBAIC0xNzIsMTAgKzE3MiwxMCBAQAogICAgICAgZmlsZT0iR29vZ2xlU2VhcmNoLndzZGwiLz4KICAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvd3NkbCIKICAgICAgIGZpbGU9Ikdvb2dsZVNlYXJjaF90eXBlcy53c2RsIi8+Ci0gICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcCIgCi0JIGZpbGU9Ikdvb2dsZU1hcHBpbmdfd2ViLnhtbCIvPgotICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAiIAotCSBmaWxlPSJnb29nbGV3ZWIubW9kZWwiLz4KKyAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wIgorICAgICBmaWxlPSJHb29nbGVNYXBwaW5nX3dlYi54bWwiLz4KKyAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wIgorICAgICBmaWxlPSJnb29nbGV3ZWIubW9kZWwiLz4KICAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvY2xhc3Nlcy9jb20vc3VuL3MxYXNkZXYvZWpiL3dlYnNlcnZpY2Uva3NpbmsvZ29vZ2xlc2VydmVyd2ViIj4KICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jb20vc3VuL3MxYXNkZXYvZWpiL3dlYnNlcnZpY2Uva3NpbmsvZ29vZ2xlc2VydmVyd2ViIj4KICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqLyouY2xhc3MiLz4KQEAgLTE4NSwxMiArMTg1LDEyIEBACiAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcCIgY2FzZXNlbnNpdGl2ZT0ieWVzIj4KICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qKiIvPgogICAgICAgPC9maWxlc2V0PgotICAgIDwvamFyPgkKKyAgICA8L2phcj4KICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wIi8+CiAgIDwvdGFyZ2V0PgogCiAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtMjIxLDcgKzIyMSw3IEBACiAKICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtc3RhbmRhbG9uZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4ud3Njb21waWxlIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIgogICAgICAgICAgdmFsdWU9Ii1nZW46Y2xpZW50IC1rZWVwIC1kICR7YnVpbGQuY2xhc3Nlcy5kaXJ9IC1zICR7YnVpbGQuY2xhc3Nlcy5kaXJ9IC1jbGFzc3BhdGggLiB3c2NvbXBpbGVfY29uZmlnX3N0YW5kYWxvbmUueG1sIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KQEAgLTI0MSw3ICsyNDEsNyBAQAogICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LlMxQVNfSE9NRX0vbGliL2FwcHNlcnYtcnQuamFyIi8+CiAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtcnQuamFyIi8+CiAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtdG9vbHMuamFyIi8+Ci0JICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiLz4KKyAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIvPgogICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CiAgICAgICA8L2NsYXNzcGF0aD4KIApAQCAtMjQ5LDEwICsyNDksMTAgQEAKICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Imh0dHAucHJveHlQb3J0IiB2YWx1ZT0iODA4MCIvPgogICAgIDwvamF2YT4KICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgCisgICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJjb250YWN0Z29vZ2xlIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPgpAQCAtMjYyLDM0ICsyNjIsMzQgQEAKIAogICA8dGFyZ2V0IG5hbWU9Imdlbi1tYXBwaW5nLWFwcGNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLndzY29tcGlsZSI+Ci0gICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiIAorICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIgogICAgICAgIHZhbHVlPSItZ2VuIC1jcCAuIC1tYXBwaW5nIEdvb2dsZU1hcHBpbmdfYXBwY2xpZW50LnhtbCB3c2NvbXBpbGVfY29uZmlnX2FwcGNsaWVudC54bWwiLz4KICAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0iZ2VuLW1hcHBpbmctZWpiIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4ud3Njb21waWxlIj4KLSAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIgCisgICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiCiAgICAgICAgdmFsdWU9Ii1nZW4gLWNwIC4gLW1hcHBpbmcgR29vZ2xlTWFwcGluZ19lamIueG1sIHdzY29tcGlsZV9jb25maWdfZWpiLnhtbCIvPgogICAgIDwvYW50Y2FsbD4KICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJnZW4tbWFwcGluZy13ZWIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi53c2NvbXBpbGUiPgotICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIiAKKyAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIKICAgICAgICB2YWx1ZT0iLWdlbiAtY3AgLiAtbWFwcGluZyBHb29nbGVNYXBwaW5nX3dlYi54bWwgd3Njb21waWxlX2NvbmZpZ193ZWIueG1sIi8+CiAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLXVzZXIiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS11c2VyLWNvbW1vbiI+Ci0JICAgIDxwYXJhbSBuYW1lPSJ1c2VyIiB2YWx1ZT0iajJlZSIvPgotCSAgICA8cGFyYW0gbmFtZT0icGFzc3dvcmQiIHZhbHVlPSJqMmVlIi8+Ci0JICAgIDxwYXJhbSBuYW1lPSJncm91cHMiIHZhbHVlPSJzdGFmZiIvPgorICAgICAgICA8cGFyYW0gbmFtZT0idXNlciIgdmFsdWU9ImoyZWUiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InBhc3N3b3JkIiB2YWx1ZT0iajJlZSIvPgorICAgICAgICA8cGFyYW0gbmFtZT0iZ3JvdXBzIiB2YWx1ZT0ic3RhZmYiLz4KICAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlY29uZmlnLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtdXNlciI+CiAgICAgICA8IS0tIHJlbW92ZSB0ZXN0IHVzZXJzLCBqdXN0IGNsZWFudXAuIC0tPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtdXNlci1jb21tb24iPgpAQCAtMzAyLDEwICszMDIsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPgotCQlVc2FnZToKLQkJCWFudCBhbGwgKEV4ZWN1dGVzIHRoZSBXZWJTZXJ2aWNlcyB0ZXN0KQotCQkJYW50IGNvbnRhY3Rnb29nbGUgKEV4ZWN1dGVzIHRoZSBhcHBjbGllbnQgY29udGFjdGluZyB0aGUgR29vZ2xlLmNvbSBXZWJTZXJ2aWNlcykKLQk8L2VjaG8+CisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgdGhlIFdlYlNlcnZpY2VzIHRlc3QpCisgICAgICAgICAgICBhbnQgY29udGFjdGdvb2dsZSAoRXhlY3V0ZXMgdGhlIGFwcGNsaWVudCBjb250YWN0aW5nIHRoZSBHb29nbGUuY29tIFdlYlNlcnZpY2VzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2tzaW5rL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2tzaW5rL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA1YWFjZDZhLi5iOWY1YjY3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9rc2luay9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2Uva3NpbmsvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMCwxMCArMzAsMTAgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgUU5hbWUgUE9SVF9RTkFNRSA9IAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFFOYW1lIFBPUlRfUU5BTUUgPQogICAgICAgICBuZXcgUU5hbWUoInVybjpHb29nbGVTZWFyY2giLCAiR29vZ2xlU2VhcmNoUG9ydCIpOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFFOYW1lIE9QRVJBVElPTl9RTkFNRSA9CiAgICAgICAgIG5ldyBRTmFtZSgidXJuOkdvb2dsZVNlYXJjaCIsICJkb1NwZWxsaW5nU3VnZ2VzdGlvbiIpOwpAQCAtNDQsMTIgKzQ0LDEyIEBACiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewogCi0gICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oImdvb2dsZXNlcnZlciBhcHBjbGllbnQiKTsJCisgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oImdvb2dsZXNlcnZlciBhcHBjbGllbnQiKTsKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImdvb2dsZXNlcnZlci1hcHBsaWVudElEIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIENsaWVudChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHdvcmQgPSAoYXJncy5sZW5ndGggPiAwKSA/IGFyZ3NbMF0gOiAic3BlbGxuZyI7CiAgICAgICAgIHRhcmdldEVuZHBvaW50QWRkcmVzcyA9IChhcmdzLmxlbmd0aCA+IDEpID8gYXJnc1sxXSA6IG51bGw7CkBAIC01OCw4ICs1OCw4IEBACiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAKLSAgICAgICAgCi0gICAgCXRyeSB7CisKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIFN0cmluZyBnb29nbGVLZXkgPSAoU3RyaW5nKQogICAgICAgICAgICAgICAgIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9nb29nbGVrZXkiKTsKQEAgLTc2LDcgKzc2LDcgQEAKICAgICAgICAgICAgIE1ldGhvZCBoZWxsb09uZVdheSA9IGZvby5nZXRDbGFzcygpLmdldE1ldGhvZCgiaGVsbG9PbmVXYXkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBDbGFzc1tdIHsgamF2YS5sYW5nLlN0cmluZy5jbGFzcyB9KTsKICAgICAgICAgICAgIGhlbGxvT25lV2F5Lmludm9rZShmb28sIG5ldyBPYmplY3RbXSB7ICIxMDAwIiB9ICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgZ29vZ2xlU2VhcmNoU2VydmljZS5nZXRIYW5kbGVyUmVnaXN0cnkoKTsKICAgICAgICAgICAgIH0gY2F0Y2goamF2YS5sYW5nLlVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIHVvZSkgewpAQCAtOTUsNyArOTUsNyBAQAogCiAgICAgICAgICAgICBkb0R5bmFtaWNQcm94eVRlc3QoZ29vZ2xlU2VhcmNoU2VydmljZSwgZ29vZ2xlS2V5KTsKIAotICAgICAgICAgICAgR29vZ2xlU2VhcmNoUG9ydCBnb29nbGVTZWFyY2hQb3J0ID0gCisgICAgICAgICAgICBHb29nbGVTZWFyY2hQb3J0IGdvb2dsZVNlYXJjaFBvcnQgPQogICAgICAgICAgICAgICAgIGdvb2dsZVNlYXJjaFNlcnZpY2UuZ2V0R29vZ2xlU2VhcmNoUG9ydCgpOwogICAgICAgICAgICAgZG9TcGVsbGluZ1N1Z2dlc3Rpb24oZ29vZ2xlU2VhcmNoUG9ydCwgZ29vZ2xlS2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0RW5kcG9pbnRBZGRyZXNzKTsKQEAgLTEyMSw3ICsxMjEsNyBAQAogICAgICAgICAgICAgICAgIHBhcnRpYWxXc2RsU2VydmljZUdlbmVyaWMuZ2V0UG9ydChHb29nbGVTZWFyY2hQb3J0LmNsYXNzKTsKICAgICAgICAgICAgIGdvb2dsZVNlYXJjaC5kb1NwZWxsaW5nU3VnZ2VzdGlvbihnb29nbGVLZXksIHdvcmQpOwogCi0vKiogICAgICAgICAgICBHb29nbGVTZWFyY2hTZXJ2aWNlIHBhcnRpYWxXc2RsU2VydmljZUdlbmVyYXRlZCA9IAorLyoqICAgICAgICAgICAgR29vZ2xlU2VhcmNoU2VydmljZSBwYXJ0aWFsV3NkbFNlcnZpY2VHZW5lcmF0ZWQgPQogICAgICAgICAgICAgICAgIChHb29nbGVTZWFyY2hTZXJ2aWNlKQogICAgICAgICAgICAgICAgIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9zZXJ2aWNlL3BhcnRpYWxHZW5lcmF0ZWQiKTsKICAgICAgICAgICAgIGdvb2dsZVNlYXJjaCA9IHBhcnRpYWxXc2RsU2VydmljZUdlbmVyYXRlZC5nZXRHb29nbGVTZWFyY2hQb3J0KCk7CkBAIC0xMzAsMTcgKzEzMCwxNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImFwcGNsaWVudCAiICsgdGVzdE5hbWUsIHN0YXQuUEFTUyk7CiAKIAotICAgIAl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImdvb2dsZSBjbGllbnQgdGVzdCBmYWlsZWQiKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImFwcGNsaWVudCAiICsgdGVzdE5hbWUsIHN0YXQuRkFJTCk7Ci0JfSAKKyAgICB9CiAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgZG9TcGVsbGluZ1N1Z2dlc3Rpb24oR29vZ2xlU2VhcmNoUG9ydCBnb29nbGVTZWFyY2hQb3J0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZ29vZ2xlS2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZW5kcG9pbnRBZGRyZXNzKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGVuZHBvaW50QWRkcmVzcykKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgaWYoIGVuZHBvaW50QWRkcmVzcyAhPSBudWxsICkgewpAQCAtMTU3LDcgKzE1Nyw3IEBACiAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb250YWN0aW5nIGdvb2dsZSBmb3Igc3BlbGxpbmcgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3VnZ2VzdGlvbiBhdCAiICsgZW5kcG9pbnRBZGRyZXNzKTsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHNwZWxsaW5nU3VnZ2VzdGlvbiA9CiAgICAgICAgICAgICBnb29nbGVTZWFyY2hQb3J0LmRvU3BlbGxpbmdTdWdnZXN0aW9uKGdvb2dsZUtleSwgd29yZCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR2F2ZSBnb29nbGUgdGhlIHdvcmQgJyIgKyB3b3JkICsgIicgLi4uICIgKwpAQCAtMTcwLDIxICsxNzAsMjEgQEAKICAgICAgICAgQ2FsbCBjMSA9IHNlcnZpY2UuY3JlYXRlQ2FsbCgpOwogICAgICAgICBDYWxsIGMyID0gc2VydmljZS5jcmVhdGVDYWxsKFBPUlRfUU5BTUUpOwogICAgICAgICBDYWxsIGMzID0gc2VydmljZS5jcmVhdGVDYWxsKFBPUlRfUU5BTUUsIE9QRVJBVElPTl9RTkFNRSk7Ci0gICAgICAgIENhbGwgYzQgPSBzZXJ2aWNlLmNyZWF0ZUNhbGwoUE9SVF9RTkFNRSwgCisgICAgICAgIENhbGwgYzQgPSBzZXJ2aWNlLmNyZWF0ZUNhbGwoUE9SVF9RTkFNRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPUEVSQVRJT05fUU5BTUUuZ2V0TG9jYWxQYXJ0KCkpOwogICAgICAgICBDYWxsW10gY2FsbHMgPSBzZXJ2aWNlLmdldENhbGxzKFBPUlRfUU5BTUUpOwogCiAgICAgICAgIGlmKCB0YXJnZXRFbmRwb2ludEFkZHJlc3MgIT0gbnVsbCApIHsKLSAgICAgICAgICAgIGMzLnNldFRhcmdldEVuZHBvaW50QWRkcmVzcyh0YXJnZXRFbmRwb2ludEFkZHJlc3MpOyAgICAgICAgICAgIAotICAgICAgICB9IAorICAgICAgICAgICAgYzMuc2V0VGFyZ2V0RW5kcG9pbnRBZGRyZXNzKHRhcmdldEVuZHBvaW50QWRkcmVzcyk7CisgICAgICAgIH0KICAgICAgICAgT2JqZWN0IHBhcmFtc1tdID0gbmV3IE9iamVjdFtdIHtnb29nbGVLZXksICJoZWxsbyIgfTsKICAgICAgICAgU3RyaW5nIHJlc3BvbnNlID0gKFN0cmluZykgYzMuaW52b2tlKHBhcmFtcyk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzcG9uc2UgPSAiICsgcmVzcG9uc2UpOwogCiAgICAgICAgIC8vIGNvbnRhaW5lci1tYW5hZ2VkIHBvcnQgc2VsZWN0aW9uCi0gICAgICAgIEdvb2dsZVNlYXJjaFBvcnQgc2VpID0gKEdvb2dsZVNlYXJjaFBvcnQpIAorICAgICAgICBHb29nbGVTZWFyY2hQb3J0IHNlaSA9IChHb29nbGVTZWFyY2hQb3J0KQogICAgICAgICAgICAgc2VydmljZS5nZXRQb3J0KEdvb2dsZVNlYXJjaFBvcnQuY2xhc3MpOwotICAgICAgICBzZWkgPSAoR29vZ2xlU2VhcmNoUG9ydCkgCisgICAgICAgIHNlaSA9IChHb29nbGVTZWFyY2hQb3J0KQogICAgICAgICAgICAgc2VydmljZS5nZXRQb3J0KFBPUlRfUU5BTUUsIEdvb2dsZVNlYXJjaFBvcnQuY2xhc3MpOwogCiAgICAgICAgIFFOYW1lIHNlcnZpY2VOYW1lID0gc2VydmljZS5nZXRTZXJ2aWNlTmFtZSgpOwpAQCAtMTk3LDE4ICsxOTcsMTggQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYWxsaW5nIG9uZXdheSBvcGVyYXRpb24iKTsKICAgICAgICAgQ2FsbCBvbmV3YXkgPSBzZXJ2aWNlLmNyZWF0ZUNhbGwoUE9SVF9RTkFNRSwgImhlbGxvT25lV2F5Iik7CiAgICAgICAgIGlmKCB0YXJnZXRFbmRwb2ludEFkZHJlc3MgIT0gbnVsbCApIHsKLSAgICAgICAgICAgIG9uZXdheS5zZXRUYXJnZXRFbmRwb2ludEFkZHJlc3ModGFyZ2V0RW5kcG9pbnRBZGRyZXNzKTsgICAgICAgICAgICAKLSAgICAgICAgfSAKKyAgICAgICAgICAgIG9uZXdheS5zZXRUYXJnZXRFbmRwb2ludEFkZHJlc3ModGFyZ2V0RW5kcG9pbnRBZGRyZXNzKTsKKyAgICAgICAgfQogCiAgICAgICAgIGxvbmcgb25lV2F5TWV0aG9kV2FpdFRpbWVJbk1pbGxpcyA9IDQwMDA7CiAKLSAgICAgICAgRGF0ZSBiZWZvcmUgPSBuZXcgRGF0ZSgpOyAgICAgICAgCi0gICAgICAgIG9uZXdheS5pbnZva2VPbmVXYXkobmV3IE9iamVjdFtdIAorICAgICAgICBEYXRlIGJlZm9yZSA9IG5ldyBEYXRlKCk7CisgICAgICAgIG9uZXdheS5pbnZva2VPbmVXYXkobmV3IE9iamVjdFtdCiAgICAgICAgICAgICAgICB7IG9uZVdheU1ldGhvZFdhaXRUaW1lSW5NaWxsaXMgKyAiIiB9KTsKICAgICAgICAgRGF0ZSBhZnRlciA9IG5ldyBEYXRlKCk7CiAgICAgICAgIGxvbmcgZWxhcHNlZFRpbWUgPSBhZnRlci5nZXRUaW1lKCkgLSBiZWZvcmUuZ2V0VGltZSgpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9uZSB3YXkgb3BlcmF0aW9uIGJlZ2FuIGF0ICIgKyBiZWZvcmUgKyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICIgYW5kIHJldHVybmVkIGF0ICIgKyBhZnRlciArIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm9uZSB3YXkgb3BlcmF0aW9uIGJlZ2FuIGF0ICIgKyBiZWZvcmUgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBhbmQgcmV0dXJuZWQgYXQgIiArIGFmdGVyICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgYW5kIHRvb2sgIiArICBlbGFwc2VkVGltZSArICIgbWlsbGktc2Vjb25kcyIpOwogICAgICAgICBpZiggZWxhcHNlZFRpbWUgPiBvbmVXYXlNZXRob2RXYWl0VGltZUluTWlsbGlzICkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigib25lIHdheSBvcGVyYXRpb24gYmxvY2tlZCBmb3IgdG9vIGxvbmcgIik7CkBAIC0yMTksNyArMjE5LDcgQEAKICAgICAgICAgLy8gdG8gdW5kZXBsb3ksIGJ1dCB0aGUgZW5kcG9pbnQgaXMgc3RpbGwgZXhlY3V0aW5nIGl0cwogICAgICAgICAvLyBvbmV3YXkgb3BlcmF0aW9uLgogICAgICAgICBsb25nIHNsZWVwVGltZSA9IChvbmVXYXlNZXRob2RXYWl0VGltZUluTWlsbGlzIC0gZWxhcHNlZFRpbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm5vdyBzbGVlcGluZyBmb3IgIiArIHNsZWVwVGltZSArICIgbWlsbGkgc2VjcyIpOwogICAgICAgICBUaHJlYWQuc2xlZXAoc2xlZXBUaW1lKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJyZXR1cm5pbmcgZnJvbSBkb0R5bmFtaWNQcm94eVRlc3QiKTsKQEAgLTI3NSw3ICsyNzUsNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgY2F1Z2h0IHVuc3VwcG9ydGVkIG9wZXJhdGlvbiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9yIFNlcnZpY2UuZ2V0UG9ydChTRUkpIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFJlbW90ZSByZW1vdGUgPSBzZXJ2aWNlLmdldFBvcnQoUE9SVF9RTkFNRSwgR29vZ2xlU2VhcmNoUG9ydC5jbGFzcyk7CiAgICAgICAgIH0gY2F0Y2goamF2YS5sYW5nLlVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIHVvZSkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2Uva3NpbmsvY2xpZW50L0NsaWVudEhhbmRsZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2tzaW5rL2NsaWVudC9DbGllbnRIYW5kbGVyLmphdmEKaW5kZXggYTg0N2JiZS4uOWIyMWNkNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2Uva3NpbmsvY2xpZW50L0NsaWVudEhhbmRsZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9rc2luay9jbGllbnQvQ2xpZW50SGFuZGxlci5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiBpbXBvcnQgamF2YXgubmFtaW5nLkluaXRpYWxDb250ZXh0OwogCiBwdWJsaWMgY2xhc3MgQ2xpZW50SGFuZGxlciBleHRlbmRzIEdlbmVyaWNIYW5kbGVyIHsKLSAgCisKICAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIENsaWVudEhhbmRsZXI6OmRlc3Ryb3koKSIpOwogICAgIH0KQEAgLTQwLDE3ICs0MCwxNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIENsaWVudEhhbmRsZXI6OmhhbmRsZUZhdWx0KCkiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgICAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGhhbmRsZVJlcXVlc3QoTWVzc2FnZUNvbnRleHQgY29udGV4dCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIENsaWVudEhhbmRsZXI6OmhhbmRsZVJlcXVlc3QoKSIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gaGFuZGxlUmVzcG9uc2UoTWVzc2FnZUNvbnRleHQgY29udGV4dCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIENsaWVudEhhbmRsZXI6OmhhbmRsZVJlc3BvbnNlKCkiKTsKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSAKLSAgICAgICAgCisgICAgfQorCiAgICAgcHVibGljIHZvaWQgaW5pdChIYW5kbGVySW5mbyBjb25maWcpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBDbGllbnRIYW5kbGVyOjppbml0KCkiKTsKICAgICAgICAgdHJ5IHsKQEAgLTYwLDkgKzYwLDkgQEAKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhhbmRsZXIgaW5pdCBwYXJhbXMgPSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5nZXRIYW5kbGVyQ29uZmlnKCkpOwotICAgIH0gCi0gICAKKyAgICB9CisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2tzaW5rL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2tzaW5rL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbAppbmRleCBhMWM5Mzk1Li4wMzE5MmEzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9rc2luay9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2Uva3NpbmsvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sCkBAIC05Nyw3ICs5Nyw3IEBACiAgICAgICA8L3NlcnZpY2UtZW5kcG9pbnQtaW50ZXJmYWNlPgogICAgICAgPHBvcnQtY29tcG9uZW50LWxpbms+a3Npbmstd2ViLndhciNHb29nbGVTZWFyY2hQb3J0PC9wb3J0LWNvbXBvbmVudC1saW5rPgogICAgIDwvcG9ydC1jb21wb25lbnQtcmVmPgotICA8L3NlcnZpY2UtcmVmPiAgCisgIDwvc2VydmljZS1yZWY+CiA8IS0tICA8c2VydmljZS1yZWY+CiAgICAgPGRlc2NyaXB0aW9uPnBhcnRpYWwgd3NkbCB0ZXN0IGdvb2dsZSBzZXJ2aWNlIHJlZjwvZGVzY3JpcHRpb24+CiAgICAgPHNlcnZpY2UtcmVmLW5hbWU+c2VydmljZS9wYXJ0aWFsR2VuZXJhdGVkPC9zZXJ2aWNlLXJlZi1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2Uva3NpbmsvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9rc2luay9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAppbmRleCAzMzY4YWM1Li4zYWIyZDc1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9rc2luay9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9rc2luay9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbApAQCAtMTksMTAgKzE5LDEwIEBACiAtLT4KIAogPHN1bi1lamItamFyPgotICA8ZW50ZXJwcmlzZS1iZWFucz4gIAorICA8ZW50ZXJwcmlzZS1iZWFucz4KICAgICA8ZWpiPgogICAgICAgPGVqYi1uYW1lPkdvb2dsZUVqYjwvZWpiLW5hbWU+Ci0gICAgICA8am5kaS1uYW1lPmNvbV9zdW5fczFhc2Rldl9lamJfd2Vic2VydmljZV9rc2lua19Hb29nbGVFamI8L2puZGktbmFtZT4gICAgCisgICAgICA8am5kaS1uYW1lPmNvbV9zdW5fczFhc2Rldl9lamJfd2Vic2VydmljZV9rc2lua19Hb29nbGVFamI8L2puZGktbmFtZT4KICAgICAgIDx3ZWJzZXJ2aWNlLWVuZHBvaW50PgogICAgICAgICA8cG9ydC1jb21wb25lbnQtbmFtZT5Hb29nbGVTZWFyY2hFamJQb3J0PC9wb3J0LWNvbXBvbmVudC1uYW1lPgogICAgICAgICA8ZW5kcG9pbnQtYWRkcmVzcy11cmk+ZWpiX3dlYnNlcnZpY2Vfa3NpbmtfR29vZ2xlRUpCL0dvb2dsZVNlYXJjaDwvZW5kcG9pbnQtYWRkcmVzcy11cmk+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9rc2luay9lamIvRm9vSGFuZGxlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2Uva3NpbmsvZWpiL0Zvb0hhbmRsZXIuamF2YQppbmRleCBkMTc1NGUxLi4wMDM5MGI5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9rc2luay9lamIvRm9vSGFuZGxlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2tzaW5rL2VqYi9Gb29IYW5kbGVyLmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKIGltcG9ydCBqYXZheC5uYW1pbmcuSW5pdGlhbENvbnRleHQ7CiAKIHB1YmxpYyBjbGFzcyBGb29IYW5kbGVyIGV4dGVuZHMgR2VuZXJpY0hhbmRsZXIgewotICAKKwogICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vSGFuZGxlcjo6ZGVzdHJveSgpIik7CiAgICAgfQpAQCAtNDAsMTcgKzQwLDE3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vSGFuZGxlcjo6aGFuZGxlRmF1bHQoKSIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gaGFuZGxlUmVxdWVzdChNZXNzYWdlQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vSGFuZGxlcjo6aGFuZGxlUmVxdWVzdCgpIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICAgICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBoYW5kbGVSZXNwb25zZShNZXNzYWdlQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vSGFuZGxlcjo6aGFuZGxlUmVzcG9uc2UoKSIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IAotICAgICAgICAKKyAgICB9CisKICAgICBwdWJsaWMgdm9pZCBpbml0KEhhbmRsZXJJbmZvIGNvbmZpZykgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb0hhbmRsZXI6OmluaXQoKSIpOwogICAgICAgICB0cnkgewpAQCAtNjAsOSArNjAsOSBAQAogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGFuZGxlciBpbml0IHBhcmFtcyA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLmdldEhhbmRsZXJDb25maWcoKSk7Ci0gICAgfSAKLSAgIAorICAgIH0KKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2Uva3NpbmsvZWpiL0dvb2dsZUVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2Uva3NpbmsvZWpiL0dvb2dsZUVKQi5qYXZhCmluZGV4IGNhMjUzN2YuLmE2OTlmMWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2tzaW5rL2VqYi9Hb29nbGVFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9rc2luay9lamIvR29vZ2xlRUpCLmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKIGltcG9ydCBqYXZheC54bWwucnBjLlNlcnZpY2U7CiBpbXBvcnQgamF2YXgueG1sLnJwYy5DYWxsOwogaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOwotaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsgCitpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25CZWFuOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0OwogaW1wb3J0IGpha2FydGEuZWpiLkVKQkV4Y2VwdGlvbjsKQEAgLTMzLDI0ICszMywyNCBAQAogcHVibGljIGNsYXNzIEdvb2dsZUVKQiBpbXBsZW1lbnRzIFNlc3Npb25CZWFuIHsKICAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IHNjOwogCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgUU5hbWUgUE9SVF9RTkFNRSA9IAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFFOYW1lIFBPUlRfUU5BTUUgPQogICAgICAgICBuZXcgUU5hbWUoInVybjpHb29nbGVTZWFyY2giLCAiR29vZ2xlU2VhcmNoUG9ydCIpOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFFOYW1lIE9QRVJBVElPTl9RTkFNRSA9CiAgICAgICAgIG5ldyBRTmFtZSgidXJuOkdvb2dsZVNlYXJjaCIsICJkb1NwZWxsaW5nU3VnZ2VzdGlvbiIpOwotICAgIAorCiAgICAgcHVibGljIEdvb2dsZUVKQigpe30KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gR29vZ2xlRUpCOjplamJDcmVhdGUgISEiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEdvb2dsZUVKQjo6ZWpiQ3JlYXRlICEhIik7CiAgICAgfQogCi0gICAgcHVibGljIGJ5dGVbXSBkb0dldENhY2hlZFBhZ2UoamF2YS5sYW5nLlN0cmluZyBrZXksIGphdmEubGFuZy5TdHJpbmcgdXJsKSAKLSAgICB7IAotICAgICAgICByZXR1cm4gbnVsbDsgCisgICAgcHVibGljIGJ5dGVbXSBkb0dldENhY2hlZFBhZ2UoamF2YS5sYW5nLlN0cmluZyBrZXksIGphdmEubGFuZy5TdHJpbmcgdXJsKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQogCi0gICAgcHVibGljIFN0cmluZyBkb1NwZWxsaW5nU3VnZ2VzdGlvbihqYXZhLmxhbmcuU3RyaW5nIGtleSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmxhbmcuU3RyaW5nIHBocmFzZSkgCisgICAgcHVibGljIFN0cmluZyBkb1NwZWxsaW5nU3VnZ2VzdGlvbihqYXZhLmxhbmcuU3RyaW5nIGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEubGFuZy5TdHJpbmcgcGhyYXNlKQogICAgICAgIHsKIAogICAgICAgICB0cnkgewpAQCAtNzUsMTIgKzc1LDEyIEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJHb29nbGVFSkIuZG9TcGVsbGluZ1N1Z2dlc3Rpb24oKTpVbmV4cGVjdGVkIGV4Y2VwdGlvbiBjYXVnaHQgLSAiLCBleCk7ICAgICAgICAKKyAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIkdvb2dsZUVKQi5kb1NwZWxsaW5nU3VnZ2VzdGlvbigpOlVuZXhwZWN0ZWQgZXhjZXB0aW9uIGNhdWdodCAtICIsIGV4KTsKICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgLyoKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBib29sZWFuIHJlc3VsdCA9IHNjLmlzQ2FsbGVySW5Sb2xlKCJmb28iKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigKICAgICAgICAgICAgICAgICAiR29vZ2xlRUpCLmRvU3BlbGxpbmdTdWdnZXN0aW9uKCk6aXNDYWxsZXJJblJvbGUoZm9vKSByZXR1cm5lZCAtICIgKyByZXN1bHQpOwpAQCAtODksNyArODksNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiR29vZ2xlRUpCLmRvU3BlbGxpbmdTdWdnZXN0aW9uKCk6VW5leHBlY3RlZCBleGNlcHRpb24gY2F1Z2h0IGluIGlzQ2FsbGVySW5Sb2xlKGZvbykgY2FsbCAiLCBleCk7ICAgICAgICAgICAgCisgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJHb29nbGVFSkIuZG9TcGVsbGluZ1N1Z2dlc3Rpb24oKTpVbmV4cGVjdGVkIGV4Y2VwdGlvbiBjYXVnaHQgaW4gaXNDYWxsZXJJblJvbGUoZm9vKSBjYWxsICIsIGV4KTsKICAgICAgICAgfQogICAgICAgICAqLwogCkBAIC05OSwxMCArOTksMTAgQEAKICAgICAgICAgICAgIFNlcnZpY2UgZ2VuZXJpY1NlcnZpY2VXaXRoV1NETCA9IG51bGw7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgICAgICAgICAgU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2UpIAorICAgICAgICAgICAgICAgIFNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKQogICAgICAgICAgICAgICAgICAgICBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvc2VydmljZS9XZWJESUlSZWZlcmVuY2UiKTsKICAgICAgICAgICAgICAgICBkb0R5bmFtaWNQcm94eVRlc3Qoc2VydmljZSk7Ci0gICAgICAgICAgICAgICAgR29vZ2xlU2VhcmNoUG9ydCB3ZWJQb3J0ID0gKEdvb2dsZVNlYXJjaFBvcnQpIAorICAgICAgICAgICAgICAgIEdvb2dsZVNlYXJjaFBvcnQgd2ViUG9ydCA9IChHb29nbGVTZWFyY2hQb3J0KQogICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLmdldFBvcnQoR29vZ2xlU2VhcmNoUG9ydC5jbGFzcyk7CiAgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSB3ZWJQb3J0LmRvU3BlbGxpbmdTdWdnZXN0aW9uKGtleSwgcGhyYXNlKTsKICAgICAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKQEAgLTExNCwxMCArMTE0LDEwIEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR29vZ2xlRUpCIHJldHVybmluZyAiICsgcmV0dXJuVmFsdWUpOwogICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiAgICAgfQotICAgICAgICAKKwogICAgIHB1YmxpYyB2b2lkIGhlbGxvT25lV2F5KFN0cmluZyBzMSkgewogCi0gICAgICAgIGpha2FydGEudHJhbnNhY3Rpb24uVHJhbnNhY3Rpb25NYW5hZ2VyIHRtID0gCisgICAgICAgIGpha2FydGEudHJhbnNhY3Rpb24uVHJhbnNhY3Rpb25NYW5hZ2VyIHRtID0KICAgICAgICAgICAgIGNvbS5zdW4uZW50ZXJwcmlzZS5Td2l0Y2guZ2V0U3dpdGNoKCkuZ2V0VHJhbnNhY3Rpb25NYW5hZ2VyKCk7CiAgICAgICAgIGludCB0eFN0YXR1cyA9IC0xOwogICAgICAgICB0cnkgewpAQCAtMTI2LDM0ICsxMjYsMzQgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZSk7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBUaGUgZm9sbG93aW5nIHRlc3RzIG1ha2Ugc3VyZSB0eCBhdHRyaWJ1dGVzIGFyZSBwcm9jZXNzZWQgCisgICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgdGVzdHMgbWFrZSBzdXJlIHR4IGF0dHJpYnV0ZXMgYXJlIHByb2Nlc3NlZAogICAgICAgICAvLyBjb3JyZWN0bHkgd2hlbiB0aGUgc2FtZSBtZXRob2QgaXMgZGVmaW5lZCBvbiBib3RoIHRoZSByZW1vdGUKICAgICAgICAgLy8gYW5kIHdlYnNlcnZpY2UgaW50ZXJmYWNlLiAgIERlc2NyaXB0b3IgaXMgc2V0IHVwIHRvIGhhdmUKICAgICAgICAgLy8gbm8gdHggZm9yIHRoZSB3ZWJzZXJ2aWNlIGNhc2UgYW5kIGEgVFhfUkVRVUlSRUQgZm9yIHRoZQogICAgICAgICAvLyBSZW1vdGUgY2FzZS4KICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBzYy5nZXRNZXNzYWdlQ29udGV4dCgpOwotICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyB3ZSB3ZXJlIGludm9rZWQgdGhyb3VnaCBhIHdlYnNlcml2Y2UgaW52b2NhdGlvbi4gIHRoZXJlCiAgICAgICAgICAgICAvLyBzaG91bGRuJ3QgYmUgYSB0cmFuc2FjdGlvbi4KICAgICAgICAgICAgIGlmKCB0eFN0YXR1cyA9PSBqYWthcnRhLnRyYW5zYWN0aW9uLlN0YXR1cy5TVEFUVVNfTk9fVFJBTlNBQ1RJT04pIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvcnJlY3RseSBmb3VuZCBubyB0eCBmb3IgaGVsbG9PbmVXYXkgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgaW52b2tlZCB0aHJvdWdoIGEgd2Vic2VydmljZSIpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJHb3Qgd3JvbmcgdHggc3RhdHVzID0gIiArIHR4U3RhdHVzICsgCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiR290IHdyb25nIHR4IHN0YXR1cyA9ICIgKyB0eFN0YXR1cyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGZvciBoZWxsb09uZVdheSBpbnZva2VkIHRocm91Z2ggYSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3ZWIgc2VydmljZSIpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAvLyBzaW5jZSB0aGVyZSdzIG5vIFdFQiBzZXJ2aWNlIG1lc3NhZ2UgY29udGV4dCwgd2Ugd2VyZQotICAgICAgICAgICAgLy8gaW52b2tlZCB0aHJvdWdoIGEgcmVtb3RlIGludm9jYXRpb24uICAKLSAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBpbnZva2VkIHRocm91Z2ggYSByZW1vdGUgaW52b2NhdGlvbi4KKwogICAgICAgICAgICAgaWYoIHR4U3RhdHVzID09IGpha2FydGEudHJhbnNhY3Rpb24uU3RhdHVzLlNUQVRVU19BQ1RJVkUpIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvcnJlY3RseSBmb3VuZCBhbiBhY3RpdmUgdHggZm9yICIgKwogICAgICAgICAgICAgICAgICAgICJoZWxsb09uZVdheSBpbnZva2VkIHRocm91Z2ggYSBSZW1vdGUgaW50ZXJmYWNlIik7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIkdvdCB3cm9uZyB0eCBzdGF0dXMgPSAiICsgdHhTdGF0dXMgKyAKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJHb3Qgd3JvbmcgdHggc3RhdHVzID0gIiArIHR4U3RhdHVzICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgZm9yIGhlbGxvT25lV2F5IGludm9rZWQgdGhyb3VnaCBhICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlbW90ZSBpbnRlcmZhY2UiKTsKICAgICAgICAgICAgIH0KQEAgLTE3NiwxNiArMTc2LDE2IEBACiAgICAgcHVibGljIEdvb2dsZVNlYXJjaFJlc3VsdCBkb0dvb2dsZVNlYXJjaChqYXZhLmxhbmcuU3RyaW5nIGtleSwgamF2YS5sYW5nLlN0cmluZyBxLCBpbnQgc3RhcnQsIGludCBtYXhSZXN1bHRzLCBib29sZWFuIGZpbHRlciwgamF2YS5sYW5nLlN0cmluZyByZXN0cmljdCwgYm9vbGVhbiBzYWZlU2VhcmNoLCBqYXZhLmxhbmcuU3RyaW5nIGxyLCBqYXZhLmxhbmcuU3RyaW5nIGllLCBqYXZhLmxhbmcuU3RyaW5nIG9lKSB7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7Ci0JCisKICAgICAgICAgdGhpcy5zYyA9IHNjOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24ge30KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkge30KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHt9CiAKICAgICBwcml2YXRlIHZvaWQgZG9EeW5hbWljUHJveHlUZXN0KFNlcnZpY2Ugc2VydmljZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CkBAIC0xOTMsMTQgKzE5MywxNCBAQAogICAgICAgICBDYWxsIGMxID0gc2VydmljZS5jcmVhdGVDYWxsKCk7CiAgICAgICAgIENhbGwgYzIgPSBzZXJ2aWNlLmNyZWF0ZUNhbGwoUE9SVF9RTkFNRSk7CiAgICAgICAgIENhbGwgYzMgPSBzZXJ2aWNlLmNyZWF0ZUNhbGwoUE9SVF9RTkFNRSwgT1BFUkFUSU9OX1FOQU1FKTsKLSAgICAgICAgQ2FsbCBjNCA9IHNlcnZpY2UuY3JlYXRlQ2FsbChQT1JUX1FOQU1FLCAKKyAgICAgICAgQ2FsbCBjNCA9IHNlcnZpY2UuY3JlYXRlQ2FsbChQT1JUX1FOQU1FLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9QRVJBVElPTl9RTkFNRS5nZXRMb2NhbFBhcnQoKSk7CiAgICAgICAgIENhbGxbXSBjYWxscyA9IHNlcnZpY2UuZ2V0Q2FsbHMoUE9SVF9RTkFNRSk7CiAKICAgICAgICAgLy8gY29udGFpbmVyLW1hbmFnZWQgcG9ydCBzZWxlY3Rpb24KLSAgICAgICAgR29vZ2xlU2VhcmNoUG9ydCBzZWkgPSAoR29vZ2xlU2VhcmNoUG9ydCkgCisgICAgICAgIEdvb2dsZVNlYXJjaFBvcnQgc2VpID0gKEdvb2dsZVNlYXJjaFBvcnQpCiAgICAgICAgICAgICBzZXJ2aWNlLmdldFBvcnQoR29vZ2xlU2VhcmNoUG9ydC5jbGFzcyk7Ci0gICAgICAgIHNlaSA9IChHb29nbGVTZWFyY2hQb3J0KSAKKyAgICAgICAgc2VpID0gKEdvb2dsZVNlYXJjaFBvcnQpCiAgICAgICAgICAgICBzZXJ2aWNlLmdldFBvcnQoUE9SVF9RTkFNRSwgR29vZ2xlU2VhcmNoUG9ydC5jbGFzcyk7CiAKICAgICAgICAgUU5hbWUgc2VydmljZU5hbWUgPSBzZXJ2aWNlLmdldFNlcnZpY2VOYW1lKCk7CkBAIC0yMDksNyArMjA5LDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigid3NkbExvY2F0aW9uID0gIiArIHdzZGxMb2NhdGlvbik7CiAgICAgICAgIH0KICAgICAgICAgSXRlcmF0b3IgcG9ydHMgPSBzZXJ2aWNlLmdldFBvcnRzKCk7Ci0gICAgICAgIAorCiAgICAgfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2tzaW5rL3N0YW5kYWxvbmUvU3RhbmRBbG9uZUNsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2Uva3Npbmsvc3RhbmRhbG9uZS9TdGFuZEFsb25lQ2xpZW50LmphdmEKaW5kZXggYjM2ZWRlYS4uZWJjZWFkNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2Uva3Npbmsvc3RhbmRhbG9uZS9TdGFuZEFsb25lQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2Uva3Npbmsvc3RhbmRhbG9uZS9TdGFuZEFsb25lQ2xpZW50LmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKIAogcHVibGljIGNsYXNzIFN0YW5kQWxvbmVDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHByaXZhdGUgU3RyaW5nIHdvcmQ7CkBAIC0zMiwxMiArMzIsMTIgQEAKICAgICBwcml2YXRlIFN0cmluZyBnb29nbGVLZXk7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewotICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJnb29nbGVzZXJ2ZXIgc3RhbmRhbG9uZSIpOwkKKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiZ29vZ2xlc2VydmVyIHN0YW5kYWxvbmUiKTsKICAgICAgICAgU3RhbmRBbG9uZUNsaWVudCBjbGllbnQgPSBuZXcgU3RhbmRBbG9uZUNsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiZ29vZ2xlc2VydmVyLXN0YW5kYWxvbmVJRCIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdGFuZEFsb25lQ2xpZW50KFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgd29yZCA9IChhcmdzLmxlbmd0aCA+IDApID8gInNwZWxsbmciIDogYXJnc1swXTsKICAgICAgICAgdGFyZ2V0RW5kcG9pbnRBZGRyZXNzID0gKGFyZ3MubGVuZ3RoID4gMSkgPwpAQCAtNDcsMTEgKzQ3LDExIEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgIAl0cnkgewotICAgICAgICAgICAgR29vZ2xlU2VhcmNoU2VydmljZSBnb29nbGVTZWFyY2hTZXJ2aWNlID0gCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBHb29nbGVTZWFyY2hTZXJ2aWNlIGdvb2dsZVNlYXJjaFNlcnZpY2UgPQogICAgICAgICAgICAgICAgIG5ldyBHb29nbGVTZWFyY2hTZXJ2aWNlX0ltcGwoKTsKIAotICAgICAgICAgICAgR29vZ2xlU2VhcmNoUG9ydCBnb29nbGVTZWFyY2hQb3J0ID0gCisgICAgICAgICAgICBHb29nbGVTZWFyY2hQb3J0IGdvb2dsZVNlYXJjaFBvcnQgPQogICAgICAgICAgICAgICAgIGdvb2dsZVNlYXJjaFNlcnZpY2UuZ2V0R29vZ2xlU2VhcmNoUG9ydCgpOwogCiAgICAgICAgICAgICAoKFN0dWIpZ29vZ2xlU2VhcmNoUG9ydCkuX3NldFByb3BlcnR5CkBAIC03MiwxNSArNzIsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVsbGluZ1N1Z2dlc3Rpb24gKyAiJyIpOwogCiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiYXBwY2xpZW50IG1haW4iLCBzdGF0LlBBU1MpOwotICAgICAgICAgICAgICAgIAotICAgIAl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZ29vZ2xlIGNsaWVudCB0ZXN0IGZhaWxlZCIpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiYXBwY2xpZW50IG1haW4iICwgc3RhdC5GQUlMKTsKIAotCX0gCisgICAgfQogCiAgICAgfQotICAgICAgICAKKwogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9rc2luay93ZWIvRm9vSGFuZGxlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2Uva3Npbmsvd2ViL0Zvb0hhbmRsZXIuamF2YQppbmRleCA2OWMzMGFlLi5mNWMzYTZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9rc2luay93ZWIvRm9vSGFuZGxlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2tzaW5rL3dlYi9Gb29IYW5kbGVyLmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKIGltcG9ydCBqYXZheC5uYW1pbmcuSW5pdGlhbENvbnRleHQ7CiAKIHB1YmxpYyBjbGFzcyBGb29IYW5kbGVyIGV4dGVuZHMgR2VuZXJpY0hhbmRsZXIgewotICAKKwogICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vSGFuZGxlcjo6ZGVzdHJveSgpIik7CiAgICAgfQpAQCAtNDAsMTcgKzQwLDE3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vSGFuZGxlcjo6aGFuZGxlRmF1bHQoKSIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gaGFuZGxlUmVxdWVzdChNZXNzYWdlQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vSGFuZGxlcjo6aGFuZGxlUmVxdWVzdCgpIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICAgICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBoYW5kbGVSZXNwb25zZShNZXNzYWdlQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vSGFuZGxlcjo6aGFuZGxlUmVzcG9uc2UoKSIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IAotICAgICAgICAKKyAgICB9CisKICAgICBwdWJsaWMgdm9pZCBpbml0KEhhbmRsZXJJbmZvIGNvbmZpZykgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb0hhbmRsZXI6OmluaXQoKSIpOwogICAgICAgICB0cnkgewpAQCAtNjAsOSArNjAsOSBAQAogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGFuZGxlciBpbml0IHBhcmFtcyA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLmdldEhhbmRsZXJDb25maWcoKSk7Ci0gICAgfSAKLSAgIAorICAgIH0KKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2Uva3Npbmsvd2ViL0dvb2dsZVNlcnZsZXRJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9rc2luay93ZWIvR29vZ2xlU2VydmxldEltcGwuamF2YQppbmRleCAwZGRlMTZkLi42ZDA0YWQzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9rc2luay93ZWIvR29vZ2xlU2VydmxldEltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9rc2luay93ZWIvR29vZ2xlU2VydmxldEltcGwuamF2YQpAQCAtMjIsNyArMjIsNyBAQAogaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7CiBpbXBvcnQgamF2YXgueG1sLnJwYy5DYWxsOwogaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOwotaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsgCitpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGphdmF4Lm5hbWluZy4qOwogaW1wb3J0IGphdmF4LnhtbC5ycGMuU2VydmljZTsKIGltcG9ydCBqYXZheC54bWwucnBjLnNlcnZlci5TZXJ2aWNlTGlmZWN5Y2xlOwpAQCAtMzAsMTEgKzMwLDExIEBACiAKIHB1YmxpYyBjbGFzcyBHb29nbGVTZXJ2bGV0SW1wbCBpbXBsZW1lbnRzIGpha2FydGEuc2VydmxldC5TaW5nbGVUaHJlYWRNb2RlbCwgU2VydmljZUxpZmVjeWNsZSB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBRTmFtZSBQT1JUX1FOQU1FID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgUU5hbWUgUE9SVF9RTkFNRSA9CiAgICAgICAgIG5ldyBRTmFtZSgidXJuOkdvb2dsZVNlYXJjaCIsICJHb29nbGVTZWFyY2hQb3J0Iik7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgUU5hbWUgT1BFUkFUSU9OX1FOQU1FID0KICAgICAgICAgbmV3IFFOYW1lKCJ1cm46R29vZ2xlU2VhcmNoIiwgImRvU3BlbGxpbmdTdWdnZXN0aW9uIik7Ci0gICAgCisKICAgICBwcml2YXRlIGJvb2xlYW4gZ290SW5pdCA9IGZhbHNlOwogCiAgICAgcHVibGljIEdvb2dsZVNlcnZsZXRJbXBsKCkgewpAQCAtNTAsOSArNTAsOSBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBTZXJ2aWNlTGlmZWN5Y2xlOjpkZXN0cm95IGNhbGwiKTsKICAgICB9CiAKLSAgICBwdWJsaWMgYnl0ZVtdIGRvR2V0Q2FjaGVkUGFnZShqYXZhLmxhbmcuU3RyaW5nIGtleSwgamF2YS5sYW5nLlN0cmluZyB1cmwpIAotICAgIHsgCi0gICAgICAgIHJldHVybiBudWxsOyAKKyAgICBwdWJsaWMgYnl0ZVtdIGRvR2V0Q2FjaGVkUGFnZShqYXZhLmxhbmcuU3RyaW5nIGtleSwgamF2YS5sYW5nLlN0cmluZyB1cmwpCisgICAgeworICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBoZWxsb09uZVdheShTdHJpbmcgczEpIHsKQEAgLTcxLDggKzcxLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEYXRlKCkpOwogICAgIH0KIAotICAgIHB1YmxpYyBTdHJpbmcgZG9TcGVsbGluZ1N1Z2dlc3Rpb24oamF2YS5sYW5nLlN0cmluZyBrZXksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5sYW5nLlN0cmluZyBwaHJhc2UpIAorICAgIHB1YmxpYyBTdHJpbmcgZG9TcGVsbGluZ1N1Z2dlc3Rpb24oamF2YS5sYW5nLlN0cmluZyBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmxhbmcuU3RyaW5nIHBocmFzZSkKIAogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb29nbGVTZXJ2bGV0SW1wbC5kb1NwZWxsaW5nU3VnZ2VzdGlvbigpICIgKwpAQCAtODgsMjIgKzg4LDIyIEBACiAgICAgICAgICAgICBTZXJ2aWNlIGdlbmVyaWNTZXJ2aWNlV2l0aFdTREwgPSBudWxsOwogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICAgICAgICAgICAgIFNlcnZpY2Ugc2VydmljZSA9IChTZXJ2aWNlKSAKKyAgICAgICAgICAgICAgICBTZXJ2aWNlIHNlcnZpY2UgPSAoU2VydmljZSkKICAgICAgICAgICAgICAgICAgICAgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3NlcnZpY2UvRWpiRElJUmVmZXJlbmNlIik7CiAgICAgICAgICAgICAgICAgZG9EeW5hbWljUHJveHlUZXN0KHNlcnZpY2UpOwotICAgICAgICAgICAgICAgIEdvb2dsZVNlYXJjaFBvcnQgZWpiUG9ydCA9IChHb29nbGVTZWFyY2hQb3J0KSAKKyAgICAgICAgICAgICAgICBHb29nbGVTZWFyY2hQb3J0IGVqYlBvcnQgPSAoR29vZ2xlU2VhcmNoUG9ydCkKICAgICAgICAgICAgICAgICAgICAgc2VydmljZS5nZXRQb3J0KEdvb2dsZVNlYXJjaFBvcnQuY2xhc3MpOwogICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gZWpiUG9ydC5kb1NwZWxsaW5nU3VnZ2VzdGlvbihrZXksIHBocmFzZSk7CiAgICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVtb3RlRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpLCBlKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAgICAgICAgICAgIAotICAgICAgICAKKyAgICAgICAgfQorCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR29vZ2xlU2VydmxldEltcGwgcmV0dXJuaW5nICIgKyByZXR1cm5WYWx1ZSk7CiAgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKICAgICB9Ci0gICAgICAgIAorCiAgICAgcHVibGljIEdvb2dsZVNlYXJjaFJlc3VsdCBkb0dvb2dsZVNlYXJjaChqYXZhLmxhbmcuU3RyaW5nIGtleSwgamF2YS5sYW5nLlN0cmluZyBxLCBpbnQgc3RhcnQsIGludCBtYXhSZXN1bHRzLCBib29sZWFuIGZpbHRlciwgamF2YS5sYW5nLlN0cmluZyByZXN0cmljdCwgYm9vbGVhbiBzYWZlU2VhcmNoLCBqYXZhLmxhbmcuU3RyaW5nIGxyLCBqYXZhLmxhbmcuU3RyaW5nIGllLCBqYXZhLmxhbmcuU3RyaW5nIG9lKSB7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KQEAgLTExMywxNCArMTEzLDE0IEBACiAgICAgICAgIENhbGwgYzEgPSBzZXJ2aWNlLmNyZWF0ZUNhbGwoKTsKICAgICAgICAgQ2FsbCBjMiA9IHNlcnZpY2UuY3JlYXRlQ2FsbChQT1JUX1FOQU1FKTsKICAgICAgICAgQ2FsbCBjMyA9IHNlcnZpY2UuY3JlYXRlQ2FsbChQT1JUX1FOQU1FLCBPUEVSQVRJT05fUU5BTUUpOwotICAgICAgICBDYWxsIGM0ID0gc2VydmljZS5jcmVhdGVDYWxsKFBPUlRfUU5BTUUsIAorICAgICAgICBDYWxsIGM0ID0gc2VydmljZS5jcmVhdGVDYWxsKFBPUlRfUU5BTUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1BFUkFUSU9OX1FOQU1FLmdldExvY2FsUGFydCgpKTsKICAgICAgICAgQ2FsbFtdIGNhbGxzID0gc2VydmljZS5nZXRDYWxscyhQT1JUX1FOQU1FKTsKIAogICAgICAgICAvLyBjb250YWluZXItbWFuYWdlZCBwb3J0IHNlbGVjdGlvbgotICAgICAgICBHb29nbGVTZWFyY2hQb3J0IHNlaSA9IChHb29nbGVTZWFyY2hQb3J0KSAKKyAgICAgICAgR29vZ2xlU2VhcmNoUG9ydCBzZWkgPSAoR29vZ2xlU2VhcmNoUG9ydCkKICAgICAgICAgICAgIHNlcnZpY2UuZ2V0UG9ydChHb29nbGVTZWFyY2hQb3J0LmNsYXNzKTsKLSAgICAgICAgc2VpID0gKEdvb2dsZVNlYXJjaFBvcnQpIAorICAgICAgICBzZWkgPSAoR29vZ2xlU2VhcmNoUG9ydCkKICAgICAgICAgICAgIHNlcnZpY2UuZ2V0UG9ydChQT1JUX1FOQU1FLCBHb29nbGVTZWFyY2hQb3J0LmNsYXNzKTsKIAogICAgICAgICBRTmFtZSBzZXJ2aWNlTmFtZSA9IHNlcnZpY2UuZ2V0U2VydmljZU5hbWUoKTsKQEAgLTEyOSw3ICsxMjksNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ3c2RsTG9jYXRpb24gPSAiICsgd3NkbExvY2F0aW9uKTsKICAgICAgICAgfQogICAgICAgICBJdGVyYXRvciBwb3J0cyA9IHNlcnZpY2UuZ2V0UG9ydHMoKTsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2tzaW5rL3dzY29tcGlsZV9jb25maWdfYXBwY2xpZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2tzaW5rL3dzY29tcGlsZV9jb25maWdfYXBwY2xpZW50LnhtbAppbmRleCAxMTc4NDY3Li4zNmY4NThlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9rc2luay93c2NvbXBpbGVfY29uZmlnX2FwcGNsaWVudC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2Uva3Npbmsvd3Njb21waWxlX2NvbmZpZ19hcHBjbGllbnQueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxjb25maWd1cmF0aW9uCiAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+Ci0gIDx3c2RsIAorICA8d3NkbAogICAgICAgbG9jYXRpb249Ikdvb2dsZVNlYXJjaC53c2RsIgogICAgICAgcGFja2FnZU5hbWU9ImNvbS5zdW4uczFhc2Rldi5lamIud2Vic2VydmljZS5rc2luay5nb29nbGVjbGllbnQiLz4KIDwvY29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2tzaW5rL3dzY29tcGlsZV9jb25maWdfZWpiLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2tzaW5rL3dzY29tcGlsZV9jb25maWdfZWpiLnhtbAppbmRleCA1MGM0ZWFhLi43NmM5OTUxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9rc2luay93c2NvbXBpbGVfY29uZmlnX2VqYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2Uva3Npbmsvd3Njb21waWxlX2NvbmZpZ19lamIueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxjb25maWd1cmF0aW9uCiAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+Ci0gIDx3c2RsIAorICA8d3NkbAogICAgICAgbG9jYXRpb249Ikdvb2dsZVNlYXJjaC53c2RsIgogICAgICAgcGFja2FnZU5hbWU9ImNvbS5zdW4uczFhc2Rldi5lamIud2Vic2VydmljZS5rc2luay5nb29nbGVzZXJ2ZXIiLz4KIDwvY29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2tzaW5rL3dzY29tcGlsZV9jb25maWdfc3RhbmRhbG9uZS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9rc2luay93c2NvbXBpbGVfY29uZmlnX3N0YW5kYWxvbmUueG1sCmluZGV4IGNmOWNhY2EuLjA4YTAzYTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2tzaW5rL3dzY29tcGlsZV9jb25maWdfc3RhbmRhbG9uZS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2Uva3Npbmsvd3Njb21waWxlX2NvbmZpZ19zdGFuZGFsb25lLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8Y29uZmlndXJhdGlvbgogICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4LXJwYy9yaS9jb25maWciPgotICA8d3NkbCAKKyAgPHdzZGwKICAgICAgIGxvY2F0aW9uPSJodHRwOi8vbG9jYWxob3N0OjgwODAvZWpiX3dlYnNlcnZpY2Vfa3NpbmtfR29vZ2xlU2VydmxldC9Hb29nbGVTZWFyY2g/V1NETCIKICAgICAgIHBhY2thZ2VOYW1lPSJjb20uc3VuLnMxYXNkZXYuZWpiLndlYnNlcnZpY2Uua3Npbmsuc3RhbmRhbG9uZSIvPgogPC9jb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2Uva3Npbmsvd3Njb21waWxlX2NvbmZpZ193ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvZWpiL3dlYnNlcnZpY2Uva3Npbmsvd3Njb21waWxlX2NvbmZpZ193ZWIueG1sCmluZGV4IGM0NDZjODkuLmNjOTNiZmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2VqYi93ZWJzZXJ2aWNlL2tzaW5rL3dzY29tcGlsZV9jb25maWdfd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9lamIvd2Vic2VydmljZS9rc2luay93c2NvbXBpbGVfY29uZmlnX3dlYi54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPGNvbmZpZ3VyYXRpb24KICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheC1ycGMvcmkvY29uZmlnIj4KLSAgPHdzZGwgCisgIDx3c2RsCiAgICAgICBsb2NhdGlvbj0iR29vZ2xlU2VhcmNoLndzZGwiCiAgICAgICBwYWNrYWdlTmFtZT0iY29tLnN1bi5zMWFzZGV2LmVqYi53ZWJzZXJ2aWNlLmtzaW5rLmdvb2dsZXNlcnZlcndlYiIvPgogPC9jb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9KZGJjQ29tbW9uLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvSmRiY0NvbW1vbi54bWwKaW5kZXggYzFhN2M1ZC4uOWI4ZTgyYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9KZGJjQ29tbW9uLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL0pkYmNDb21tb24ueG1sCkBAIC0xOCw3ICsxOCw3IEBACiAtLT4KIAogPCEtLQotICAgCisKICAgTm90ZTogVGhlIHRhcmdldHMgaGVyZSB1c2UgcHJvcGVydGllcyB0aGF0IG5lZWQgdG8gYmUgbW9kaWZpZWQKICAgICAgICAgdG8gc3VpdCB5b3VyIGxvY2FsIHNldHRpbmdzIGluIHRoZSBKZGJjQ29tbW9uLnByb3BlcnRpZXMKIC0tPgpAQCAtNDIsMTAgKzQyLDEwIEBACiAgICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtamRiYy1jb25ucG9vbC1vcmFjbGUtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiCi0JICB2YWx1ZT0iY3JlYXRlLWpkYmMtY29ubmVjdGlvbi1wb29sCi0JICAgIC0tZGF0YXNvdXJjZWNsYXNzbmFtZT0ke29yYWNsZS5kYXRhc291cmNlLmNsYXNzfQotCSAgICAtLXJlc3R5cGU9JHtvcmFjbGUucmVzb3VyY2UudHlwZX0iLz4KLQk8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7b3JhY2xlLnBvb2wubmFtZX0iLz4gICAgCisgICAgICB2YWx1ZT0iY3JlYXRlLWpkYmMtY29ubmVjdGlvbi1wb29sCisgICAgICAgIC0tZGF0YXNvdXJjZWNsYXNzbmFtZT0ke29yYWNsZS5kYXRhc291cmNlLmNsYXNzfQorICAgICAgICAtLXJlc3R5cGU9JHtvcmFjbGUucmVzb3VyY2UudHlwZX0iLz4KKyAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7b3JhY2xlLnBvb2wubmFtZX0iLz4KICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXQtb3JhY2xlLXByb3BzLWNvbW1vbiIvPgpAQCAtNTUsMTAgKzU1LDEwIEBACiAgICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtamRiYy1kcml2ZXItY29ubnBvb2wtb3JhY2xlLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIgotCSAgdmFsdWU9ImNyZWF0ZS1qZGJjLWNvbm5lY3Rpb24tcG9vbAotCSAgICAtLWRyaXZlcmNsYXNzbmFtZT0ke29yYWNsZS5kcml2ZXIuY2xhc3N9Ci0JICAgIC0tcmVzdHlwZT0ke29yYWNsZS5yZXNvdXJjZS50eXBlfSIvPgotCTxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtvcmFjbGUucG9vbC5uYW1lfSIvPiAgICAKKyAgICAgIHZhbHVlPSJjcmVhdGUtamRiYy1jb25uZWN0aW9uLXBvb2wKKyAgICAgICAgLS1kcml2ZXJjbGFzc25hbWU9JHtvcmFjbGUuZHJpdmVyLmNsYXNzfQorICAgICAgICAtLXJlc3R5cGU9JHtvcmFjbGUucmVzb3VyY2UudHlwZX0iLz4KKyAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7b3JhY2xlLnBvb2wubmFtZX0iLz4KICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXQtb3JhY2xlLXByb3BzLWNvbW1vbiIvPgpAQCAtNjgsMTggKzY4LDE4IEBACiAgICAgPHRhcmdldCBuYW1lPSJzZXQtb3JhY2xlLXByb3BzLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+Ci0JPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCi0JICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7b3JhY2xlLnBvb2wubmFtZX0ucHJvcGVydHkuVXNlcj0ke29yYWNsZS51c2VyfSIvPgorICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgorICAgICAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC4ke29yYWNsZS5wb29sLm5hbWV9LnByb3BlcnR5LlVzZXI9JHtvcmFjbGUudXNlcn0iLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgotCTxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgotCSAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC4ke29yYWNsZS5wb29sLm5hbWV9LnByb3BlcnR5LlBhc3N3b3JkPSR7b3JhY2xlLnBhc3N3b3JkfSIvPgorICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgorICAgICAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC4ke29yYWNsZS5wb29sLm5hbWV9LnByb3BlcnR5LlBhc3N3b3JkPSR7b3JhY2xlLnBhc3N3b3JkfSIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+Ci0JPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCi0JICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7b3JhY2xlLnBvb2wubmFtZX0ucHJvcGVydHkuVVJMPSR7b3JhY2xlLnVybH0iLz4KKyAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKKyAgICAgIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuJHtvcmFjbGUucG9vbC5uYW1lfS5wcm9wZXJ0eS5VUkw9JHtvcmFjbGUudXJsfSIvPgogICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCkBAIC04Nyw5ICs4Nyw5IEBACiAgICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtamRiYy1yZXNvdXJjZS1vcmFjbGUtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiCi0JICB2YWx1ZT0iY3JlYXRlLWpkYmMtcmVzb3VyY2UKLQkgICAgLS1jb25uZWN0aW9ucG9vbGlkICR7b3JhY2xlLnBvb2wubmFtZX0iLz4KLQk8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7b3JhY2xlLnJlc291cmNlLm5hbWV9Ii8+CisgICAgICB2YWx1ZT0iY3JlYXRlLWpkYmMtcmVzb3VyY2UKKyAgICAgICAgLS1jb25uZWN0aW9ucG9vbGlkICR7b3JhY2xlLnBvb2wubmFtZX0iLz4KKyAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7b3JhY2xlLnJlc291cmNlLm5hbWV9Ii8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKQEAgLTk3LDggKzk3LDggQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1qZGJjLWNvbm5wb29sLW9yYWNsZS1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIKLQkgIHZhbHVlPSJkZWxldGUtamRiYy1jb25uZWN0aW9uLXBvb2wiLz4KLQk8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7b3JhY2xlLnBvb2wubmFtZX0iLz4gIAorICAgICAgdmFsdWU9ImRlbGV0ZS1qZGJjLWNvbm5lY3Rpb24tcG9vbCIvPgorICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtvcmFjbGUucG9vbC5uYW1lfSIvPgogICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCkBAIC0xMDYsOCArMTA2LDggQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1qZGJjLXJlc291cmNlLW9yYWNsZS1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIKLQkgIHZhbHVlPSJkZWxldGUtamRiYy1yZXNvdXJjZSIvPgotCTxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtvcmFjbGUucmVzb3VyY2UubmFtZX0iLz4gIAorICAgICAgdmFsdWU9ImRlbGV0ZS1qZGJjLXJlc291cmNlIi8+CisgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke29yYWNsZS5yZXNvdXJjZS5uYW1lfSIvPgogICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCkBAIC0xMjUsNTAgKzEyNSw1MCBAQAogICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLWpkYmMtY29ubnBvb2wtb3JhY2xlLXhhLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIgotCSAgdmFsdWU9ImNyZWF0ZS1qZGJjLWNvbm5lY3Rpb24tcG9vbAotCSAgICAtLWRhdGFzb3VyY2VjbGFzc25hbWU9JHtvcmFjbGUueGFkYXRhc291cmNlLmNsYXNzfQotCSAgICAtLXJlc3R5cGU9amF2YXguc3FsLlhBRGF0YVNvdXJjZSIvPgotCTxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtvcmFjbGUueGFwb29sLm5hbWV9Ii8+ICAgIAorICAgICAgdmFsdWU9ImNyZWF0ZS1qZGJjLWNvbm5lY3Rpb24tcG9vbAorICAgICAgICAtLWRhdGFzb3VyY2VjbGFzc25hbWU9JHtvcmFjbGUueGFkYXRhc291cmNlLmNsYXNzfQorICAgICAgICAtLXJlc3R5cGU9amF2YXguc3FsLlhBRGF0YVNvdXJjZSIvPgorICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtvcmFjbGUueGFwb29sLm5hbWV9Ii8+CiAgICAgICA8L2FudGNhbGw+CiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgotCTxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgotCSAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC4ke29yYWNsZS54YXBvb2wubmFtZX0ucHJvcGVydHkuVXNlcj0ke29yYWNsZS51c2VyfSIvPgorICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgorICAgICAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC4ke29yYWNsZS54YXBvb2wubmFtZX0ucHJvcGVydHkuVXNlcj0ke29yYWNsZS51c2VyfSIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+Ci0JPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCi0JICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7b3JhY2xlLnhhcG9vbC5uYW1lfS5wcm9wZXJ0eS5QYXNzd29yZD0ke29yYWNsZS5wYXNzd29yZH0iLz4KKyAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKKyAgICAgIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuJHtvcmFjbGUueGFwb29sLm5hbWV9LnByb3BlcnR5LlBhc3N3b3JkPSR7b3JhY2xlLnBhc3N3b3JkfSIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+Ci0JPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCi0JICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7b3JhY2xlLnhhcG9vbC5uYW1lfS5wcm9wZXJ0eS5VUkw9JHtvcmFjbGUudXJsfSIvPgorICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgorICAgICAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC4ke29yYWNsZS54YXBvb2wubmFtZX0ucHJvcGVydHkuVVJMPSR7b3JhY2xlLnVybH0iLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLWpkYmMtcmVzb3VyY2Utb3JhY2xlLXhhLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIgotCSAgdmFsdWU9ImNyZWF0ZS1qZGJjLXJlc291cmNlCi0JICAgIC0tY29ubmVjdGlvbnBvb2xpZCAke29yYWNsZS54YXBvb2wubmFtZX0iLz4KLQk8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7b3JhY2xlLnhhcmVzb3VyY2UubmFtZX0iLz4KKyAgICAgIHZhbHVlPSJjcmVhdGUtamRiYy1yZXNvdXJjZQorICAgICAgICAtLWNvbm5lY3Rpb25wb29saWQgJHtvcmFjbGUueGFwb29sLm5hbWV9Ii8+CisgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke29yYWNsZS54YXJlc291cmNlLm5hbWV9Ii8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1qZGJjLWNvbm5wb29sLW9yYWNsZS14YS1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIKLQkgIHZhbHVlPSJkZWxldGUtamRiYy1jb25uZWN0aW9uLXBvb2wiLz4KLQk8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7b3JhY2xlLnhhcG9vbC5uYW1lfSIvPiAgCisgICAgICB2YWx1ZT0iZGVsZXRlLWpkYmMtY29ubmVjdGlvbi1wb29sIi8+CisgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke29yYWNsZS54YXBvb2wubmFtZX0iLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1qZGJjLXJlc291cmNlLW9yYWNsZS14YS1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIKLQkgIHZhbHVlPSJkZWxldGUtamRiYy1yZXNvdXJjZSIvPgotCTxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtvcmFjbGUueGFyZXNvdXJjZS5uYW1lfSIvPiAgCisgICAgICB2YWx1ZT0iZGVsZXRlLWpkYmMtcmVzb3VyY2UiLz4KKyAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7b3JhY2xlLnhhcmVzb3VyY2UubmFtZX0iLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIApAQCAtMTg0LDcgKzE4NCw3IEBACiAgICAgICAgIG91dHB1dD0iJHtidWlsZC5jbGFzc2VzLmRpcn0vc2V0dXBEQlRhYmxlcy5vdXQiCiAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2RldnRlc3RzL2pkYmMvY2xhc3NlczEyLnppcCIKICAgICAgIC8+Ci0gICAgCisKICAgICA8L3RhcmdldD4KIAogCkBAIC0yMTUsNjUgKzIxNSw2NSBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtteXNxbC54YS5wb29sLm5hbWV9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLQkJCQkJCQkgICAgICAKKwogCiAgICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtamRiYy1jb25ucG9vbC1teXNxbC1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIKLQkgIHZhbHVlPSJjcmVhdGUtamRiYy1jb25uZWN0aW9uLXBvb2wKLQkgICAgLS1kYXRhc291cmNlY2xhc3NuYW1lPSR7bXlzcWwuZGF0YXNvdXJjZS5jbGFzc30KLQkgICAgLS1yZXN0eXBlPWphdmF4LnNxbC5EYXRhU291cmNlIi8+Ci0JPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke215c3FsLnBvb2wubmFtZX0iLz4gICAgCisgICAgICB2YWx1ZT0iY3JlYXRlLWpkYmMtY29ubmVjdGlvbi1wb29sCisgICAgICAgIC0tZGF0YXNvdXJjZWNsYXNzbmFtZT0ke215c3FsLmRhdGFzb3VyY2UuY2xhc3N9CisgICAgICAgIC0tcmVzdHlwZT1qYXZheC5zcWwuRGF0YVNvdXJjZSIvPgorICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtteXNxbC5wb29sLm5hbWV9Ii8+CiAgICAgICA8L2FudGNhbGw+CiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgotCTxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgotCSAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC4ke215c3FsLnBvb2wubmFtZX0ucHJvcGVydHkuVXNlcj0ke215c3FsLnVzZXJ9Ii8+CisgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCisgICAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7bXlzcWwucG9vbC5uYW1lfS5wcm9wZXJ0eS5Vc2VyPSR7bXlzcWwudXNlcn0iLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgotCTxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgotCSAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC4ke215c3FsLnBvb2wubmFtZX0ucHJvcGVydHkuUGFzc3dvcmQ9JHtteXNxbC5wYXNzd29yZH0iLz4KKyAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKKyAgICAgIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuJHtteXNxbC5wb29sLm5hbWV9LnByb3BlcnR5LlBhc3N3b3JkPSR7bXlzcWwucGFzc3dvcmR9Ii8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiLz4KLQk8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKLQkgIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuJHtteXNxbC5wb29sLm5hbWV9LnByb3BlcnR5LnNlcnZlck5hbWU9JHtteXNxbC5zZXJ2ZXJOYW1lfSIvPgorICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgorICAgICAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC4ke215c3FsLnBvb2wubmFtZX0ucHJvcGVydHkuc2VydmVyTmFtZT0ke215c3FsLnNlcnZlck5hbWV9Ii8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiLz4KLQk8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKLQkgIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuJHtteXNxbC5wb29sLm5hbWV9LnByb3BlcnR5LmRhdGFiYXNlTmFtZT0ke215c3FsLmRhdGFiYXNlTmFtZX0iLz4KKyAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKKyAgICAgIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuJHtteXNxbC5wb29sLm5hbWV9LnByb3BlcnR5LmRhdGFiYXNlTmFtZT0ke215c3FsLmRhdGFiYXNlTmFtZX0iLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgotCTxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgotCSAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC4ke215c3FsLnBvb2wubmFtZX0ucHJvcGVydHkucG9ydD0ke215c3FsLnBvcnR9Ii8+CisgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCisgICAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7bXlzcWwucG9vbC5uYW1lfS5wcm9wZXJ0eS5wb3J0PSR7bXlzcWwucG9ydH0iLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLWpkYmMtcmVzb3VyY2UtbXlzcWwtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiCi0JICB2YWx1ZT0iY3JlYXRlLWpkYmMtcmVzb3VyY2UKLQkgICAgLS1jb25uZWN0aW9ucG9vbGlkICR7bXlzcWwucG9vbC5uYW1lfSIvPgotCTxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtteXNxbC5yZXNvdXJjZS5uYW1lfSIvPgorICAgICAgdmFsdWU9ImNyZWF0ZS1qZGJjLXJlc291cmNlCisgICAgICAgIC0tY29ubmVjdGlvbnBvb2xpZCAke215c3FsLnBvb2wubmFtZX0iLz4KKyAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7bXlzcWwucmVzb3VyY2UubmFtZX0iLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLWpkYmMtY29ubnBvb2wtbXlzcWwtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiCi0JICB2YWx1ZT0iZGVsZXRlLWpkYmMtY29ubmVjdGlvbi1wb29sIi8+Ci0JPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke215c3FsLnBvb2wubmFtZX0iLz4gIAorICAgICAgdmFsdWU9ImRlbGV0ZS1qZGJjLWNvbm5lY3Rpb24tcG9vbCIvPgorICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtteXNxbC5wb29sLm5hbWV9Ii8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtamRiYy1yZXNvdXJjZS1teXNxbC1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIKLQkgIHZhbHVlPSJkZWxldGUtamRiYy1yZXNvdXJjZSIvPgotCTxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtteXNxbC5yZXNvdXJjZS5uYW1lfSIvPiAgCisgICAgICB2YWx1ZT0iZGVsZXRlLWpkYmMtcmVzb3VyY2UiLz4KKyAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7bXlzcWwucmVzb3VyY2UubmFtZX0iLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIApAQCAtMjkwLDQ1ICsyOTAsNDUgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1qZGJjLWNvbm5wb29sLW15c3FsLXhhLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIgotCSAgdmFsdWU9ImNyZWF0ZS1qZGJjLWNvbm5lY3Rpb24tcG9vbAotCSAgICAtLWRhdGFzb3VyY2VjbGFzc25hbWU9JHtteXNxbC54YS5kYXRhc291cmNlLmNsYXNzfQotCSAgICAtLXJlc3R5cGU9amF2YXguc3FsLlhBRGF0YVNvdXJjZSIvPgotCTxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtteXNxbC54YS5wb29sLm5hbWV9Ii8+ICAgIAorICAgICAgdmFsdWU9ImNyZWF0ZS1qZGJjLWNvbm5lY3Rpb24tcG9vbAorICAgICAgICAtLWRhdGFzb3VyY2VjbGFzc25hbWU9JHtteXNxbC54YS5kYXRhc291cmNlLmNsYXNzfQorICAgICAgICAtLXJlc3R5cGU9amF2YXguc3FsLlhBRGF0YVNvdXJjZSIvPgorICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtteXNxbC54YS5wb29sLm5hbWV9Ii8+CiAgICAgICA8L2FudGNhbGw+CiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgotCTxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgotCSAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC4ke215c3FsLnhhLnBvb2wubmFtZX0ucHJvcGVydHkuVXNlcj0ke215c3FsLnVzZXJ9Ii8+CisgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCisgICAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7bXlzcWwueGEucG9vbC5uYW1lfS5wcm9wZXJ0eS5Vc2VyPSR7bXlzcWwudXNlcn0iLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgotCTxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgotCSAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC4ke215c3FsLnhhLnBvb2wubmFtZX0ucHJvcGVydHkuUGFzc3dvcmQ9JHtteXNxbC5wYXNzd29yZH0iLz4KKyAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKKyAgICAgIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuJHtteXNxbC54YS5wb29sLm5hbWV9LnByb3BlcnR5LlBhc3N3b3JkPSR7bXlzcWwucGFzc3dvcmR9Ii8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiLz4KLQk8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKLQkgIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuJHtteXNxbC54YS5wb29sLm5hbWV9LnByb3BlcnR5LnNlcnZlck5hbWU9JHtteXNxbC5zZXJ2ZXJOYW1lfSIvPgorICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgorICAgICAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC4ke215c3FsLnhhLnBvb2wubmFtZX0ucHJvcGVydHkuc2VydmVyTmFtZT0ke215c3FsLnNlcnZlck5hbWV9Ii8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiLz4KLQk8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKLQkgIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuJHtteXNxbC54YS5wb29sLm5hbWV9LnByb3BlcnR5LmRhdGFiYXNlTmFtZT0ke215c3FsLmRhdGFiYXNlTmFtZX0iLz4KKyAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKKyAgICAgIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuJHtteXNxbC54YS5wb29sLm5hbWV9LnByb3BlcnR5LmRhdGFiYXNlTmFtZT0ke215c3FsLmRhdGFiYXNlTmFtZX0iLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgotCTxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgotCSAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC4ke215c3FsLnhhLnBvb2wubmFtZX0ucHJvcGVydHkucG9ydD0ke215c3FsLnBvcnR9Ii8+CisgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCisgICAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7bXlzcWwueGEucG9vbC5uYW1lfS5wcm9wZXJ0eS5wb3J0PSR7bXlzcWwucG9ydH0iLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLWpkYmMtcmVzb3VyY2UtbXlzcWwteGEtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiCi0JICB2YWx1ZT0iY3JlYXRlLWpkYmMtcmVzb3VyY2UKLQkgICAgLS1jb25uZWN0aW9ucG9vbGlkICR7bXlzcWwueGEucG9vbC5uYW1lfSIvPgotCTxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtteXNxbC54YS5yZXNvdXJjZS5uYW1lfSIvPgorICAgICAgdmFsdWU9ImNyZWF0ZS1qZGJjLXJlc291cmNlCisgICAgICAgIC0tY29ubmVjdGlvbnBvb2xpZCAke215c3FsLnhhLnBvb2wubmFtZX0iLz4KKyAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7bXlzcWwueGEucmVzb3VyY2UubmFtZX0iLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIApAQCAtMzQyLDcgKzM0Miw3IEBACiAgICAgICAgIG9uZXJyb3I9ImNvbnRpbnVlIgogICAgICAgICBwcmludD0ieWVzIgogICAgICAgICBvdXRwdXQ9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3NldHVwREJUYWJsZXMub3V0IgotCWNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvbXlzcWwtY29ubmVjdG9yLWphdmEtNS4xLjctYmluLmphciIKKyAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL215c3FsLWNvbm5lY3Rvci1qYXZhLTUuMS43LWJpbi5qYXIiCiAgICAgICAvPgogICAgIDwvdGFyZ2V0PgogCkBAIC0zNTgsNyArMzU4LDcgQEAKICAgIDxjb25kaXRpb24gcHJvcGVydHk9ImFpeCI+CiAgICAgICAgPG9zIG5hbWU9IkFJWCIvPgogICAgPC9jb25kaXRpb24+Ci0JICAgICAgIAorCiAgICA8dGFyZ2V0IG5hbWU9InN0YXJ0LWRlcmJ5IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzdGFydC1kZXJieS1haXgiLz4KICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InN0YXJ0LWRlcmJ5LW5vbmFpeCIvPgpAQCAtMzk4LDcgKzM5OCw3IEBACiAgICAgICA8cGFyYWxsZWw+CiAgICAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0ib3JnLmFwYWNoZS5kZXJieS5kcmRhLk5ldHdvcmtTZXJ2ZXJDb250cm9sIgogICAgICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZGIuY2xhc3NwYXRofSIgZmFpbG9uZXJyb3I9InRydWUiIGZvcms9InRydWUiPgotCQkgPGFyZyBsaW5lPSItaCBsb2NhbGhvc3QgLXAgMTUyNyAtdXNlciAke2RlcmJ5LnVzZXJ9IC1wYXNzd29yZCAke2RlcmJ5LnBhc3N3b3JkfSBzaHV0ZG93biIvPgorICAgICAgICAgPGFyZyBsaW5lPSItaCBsb2NhbGhvc3QgLXAgMTUyNyAtdXNlciAke2RlcmJ5LnVzZXJ9IC1wYXNzd29yZCAke2RlcmJ5LnBhc3N3b3JkfSBzaHV0ZG93biIvPgogICAgICAgICAgICA8L2phdmE+CiAgICAgICA8L3BhcmFsbGVsPgogICAgPC90YXJnZXQ+CkBAIC00MDgsNyArNDA4LDcgQEAKICAgICAgIDxwYXJhbGxlbD4KICAgICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJvcmcuYXBhY2hlLmRlcmJ5LmRyZGEuTmV0d29ya1NlcnZlckNvbnRyb2wiCiAgICAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtkYi5jbGFzc3BhdGh9IiBmYWlsb25lcnJvcj0idHJ1ZSIgZm9yaz0idHJ1ZSI+Ci0JCSA8YXJnIGxpbmU9Ii1oIDAuMC4wLjAgLXAgMTUyNyAtdXNlciAke2RlcmJ5LnVzZXJ9IC1wYXNzd29yZCAke2RlcmJ5LnBhc3N3b3JkfSBzaHV0ZG93biIvPgorICAgICAgICAgPGFyZyBsaW5lPSItaCAwLjAuMC4wIC1wIDE1MjcgLXVzZXIgJHtkZXJieS51c2VyfSAtcGFzc3dvcmQgJHtkZXJieS5wYXNzd29yZH0gc2h1dGRvd24iLz4KICAgICAgICAgICAgPC9qYXZhPgogICAgICAgPC9wYXJhbGxlbD4KICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hcHBhdXRoL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2FwcGF1dGgvYnVpbGQucHJvcGVydGllcwppbmRleCBmOGY2YThkLi5lNTFlNTU3IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2FwcGF1dGgvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2FwcGF1dGgvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTggKzE1LDE4IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItYm1wLWFwcGF1dGgiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXBwYXV0aC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2FwcGF1dGgvYnVpbGQueG1sCmluZGV4IDBmZmNlYzAuLjY3MzkyOWMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXBwYXV0aC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hcHBhdXRoL2J1aWxkLnhtbApAQCAtNDAsNyArNDAsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNTIsMTMgKzUyLDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi9TaW1wbGVCTVAuY2xhc3MsICoqL1NpbXBsZUJNUEhvbWUuY2xhc3MsKiovKkNsaWVudCouY2xhc3MiIC8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CkBAIC04MSw3ICs4MSw3IEBACiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXNldC1kZXJieS1mb3Itbm8tYXV0aGVudGljYXRpb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCIvPgpAQCAtOTQsNyArOTQsNyBAQAogICAgICAgPC9hbnRjYWxsPgogICAgICAgLS0+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2FwcGF1dGgvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hcHBhdXRoL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQppbmRleCA3ODcyNTlmLi5jMThjZjZlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2FwcGF1dGgvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXBwYXV0aC9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKQEAgLTI1LDUyICsyNSw1MiBAQAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuU2ltcGxlUmVwb3J0ZXJBZGFwdGVyOwogCiBwdWJsaWMgY2xhc3MgU2ltcGxlQk1QQ2xpZW50IHsKLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKLQlTdHJpbmcgdGVzdFN1aXRlID0gIkFwcEF1dGggIjsKKyAgICBTdHJpbmcgdGVzdFN1aXRlID0gIkFwcEF1dGggIjsKIAogICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICBPYmplY3Qgb2JqUmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVCTVBIb21lIik7Ci0JU2ltcGxlQk1QSG9tZSBzaW1wbGVCTVBIb21lID0gKFNpbXBsZUJNUEhvbWUpCisgICAgU2ltcGxlQk1QSG9tZSBzaW1wbGVCTVBIb21lID0gKFNpbXBsZUJNUEhvbWUpCiAgICAgICAgIGphdmF4LnJtaS5Qb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqUmVmLCBTaW1wbGVCTVBIb21lLmNsYXNzKTsKLSAgICAgICAgCi0Jc3RhdC5hZGREZXNjcmlwdGlvbigiSkRCQyBBcHBsaWNhdGlvbiBBdXRoZW50aWNhdGlvbiB0ZXN0Iik7CisKKyAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJKREJDIEFwcGxpY2F0aW9uIEF1dGhlbnRpY2F0aW9uIHRlc3QiKTsKICAgICAgICAgU2ltcGxlQk1QIHNpbXBsZUJNUCA9IHNpbXBsZUJNUEhvbWUuY3JlYXRlKCk7Ci0gIAkKKwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRlc3QgMyB3aWxsIGZhaWwgd2l0aCBEZXJieSIgKTsKICAgICAgICAgaWYgKCBzaW1wbGVCTVAudGVzdDEoKSApIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MSA6ICIsIHN0YXQuUEFTUyk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MSA6ICIsIHN0YXQuRkFJTCk7Ci0JfQotCWlmICggc2ltcGxlQk1QLnRlc3QyKCkgKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDIgOiAiLCBzdGF0LlBBU1MpOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDIgOiAiLCBzdGF0LkZBSUwpOwotCX0KKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MSA6ICIsIHN0YXQuUEFTUyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MSA6ICIsIHN0YXQuRkFJTCk7CisgICAgfQorICAgIGlmICggc2ltcGxlQk1QLnRlc3QyKCkgKSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDIgOiAiLCBzdGF0LlBBU1MpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDIgOiAiLCBzdGF0LkZBSUwpOworICAgIH0KIAotCWlmICggc2ltcGxlQk1QLnRlc3QzKCkgKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICJ0ZXN0MyA6ICIsIHN0YXQuUEFTUyk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgInRlc3QzIDogIiwgc3RhdC5GQUlMKTsKLQl9Ci0gICAgICAgIAotCWlmICggc2ltcGxlQk1QLnRlc3Q0KCkgKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICJ0ZXN0NCA6ICIsIHN0YXQuUEFTUyk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgInRlc3Q0IDogIiwgc3RhdC5GQUlMKTsKLQl9CisgICAgaWYgKCBzaW1wbGVCTVAudGVzdDMoKSApIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgInRlc3QzIDogIiwgc3RhdC5QQVNTKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAidGVzdDMgOiAiLCBzdGF0LkZBSUwpOworICAgIH0KKworICAgIGlmICggc2ltcGxlQk1QLnRlc3Q0KCkgKSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICJ0ZXN0NCA6ICIsIHN0YXQuUEFTUyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgInRlc3Q0IDogIiwgc3RhdC5GQUlMKTsKKyAgICB9CiAKICAgICAgICAgaWYgKCBzaW1wbGVCTVAudGVzdDUoKSApIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgInRlc3Q1IDogIiwgc3RhdC5QQVNTKTsKLQl9IGVsc2UgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAidGVzdDUgOiAiLCBzdGF0LkZBSUwpOwotCX0KKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgInRlc3Q1IDogIiwgc3RhdC5QQVNTKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAidGVzdDUgOiAiLCBzdGF0LkZBSUwpOworICAgIH0KIAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImpkYmMgYXBwYXV0aCBzdGF0dXM6ICIpOwotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2FwcGF1dGgvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXBwYXV0aC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IGUxYzZlNzUuLjBmMmI0Y2EgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXBwYXV0aC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXBwYXV0aC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC01NSw2ICs1NSw2IEBACiAgICAgICA8dHJhbnMtYXR0cmlidXRlPlJlcXVpcmVkPC90cmFucy1hdHRyaWJ1dGU+CiAgICAgPC9jb250YWluZXItdHJhbnNhY3Rpb24+CiAgIDwvYXNzZW1ibHktZGVzY3JpcHRvcj4KLSAgICAgIAorCiA8L2VqYi1qYXI+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXBwYXV0aC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hcHBhdXRoL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKaW5kZXggMjNiYzY1Ny4uMmJjYTdkZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hcHBhdXRoL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hcHBhdXRoL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKQEAgLTgxLDcgKzgxLDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MygpIHsKLSAgICAgICAgLy9hcHBsaWNhdGlvbiBhdXRoICsgd3JvbmcgdXNlci9wd2QgCisgICAgICAgIC8vYXBwbGljYXRpb24gYXV0aCArIHdyb25nIHVzZXIvcHdkCiAgICAgICAgIENvbm5lY3Rpb24gY29ubiA9IG51bGw7CiAgICAgICAgIGJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CiAgICAgICAgIHRyeSB7CkBAIC0xMzYsNyArMTM2LDcgQEAKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0NSgpIHsKICAgICAgICAgLy9hcHBsaWNhdGlvbiBhdXRoICsgdXNlci9wd2QgIHNwZWNpZmllZCAtIHJpZ2h0IGluaXRpYWwKICAgICAgICAgLy9lbnN1cmUgdGhhdCBjb25uZWN0aW9uIHdpdGggc2FtZSB1c2VybmFtZSBpcyByZXR1cm5lZCBpbiBib3RoIHRoZSBjYXNlcy4KLSAgICAgICAgCisKICAgICAgICAgQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKICAgICAgICAgQ29ubmVjdGlvbiBjb25uMiA9IG51bGw7CiAgICAgICAgIGJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2FwcGF1dGgvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hcHBhdXRoL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCBlNDkxNGY2Li5mMjU2MDc2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2FwcGF1dGgvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXBwYXV0aC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsNyArMSw3IEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQotDQotQ1JFQVRFIFRBQkxFIE9fQ3VzdG9tZXIgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCitEcm9wIHRhYmxlIE9fQ3VzdG9tZXI7CisKK0NSRUFURSBUQUJMRSBPX0N1c3RvbWVyICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikKKyk7CisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXBwYXV0aC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hcHBhdXRoL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggNzBkMWZjYy4uZDg1NGI5NSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hcHBhdXRoL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hcHBhdXRoL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEgKzEgQEAKLURyb3AgdGFibGUgT19DdXN0b21lcjsNCitEcm9wIHRhYmxlIE9fQ3VzdG9tZXI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2FwcGF1dGh0eC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hcHBhdXRodHgvYnVpbGQucHJvcGVydGllcwppbmRleCA5NjU3M2Q0Li45NjUxNWFjIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2FwcGF1dGh0eC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXBwYXV0aHR4L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE5ICsxNSwxOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWJtcC1hcHBhdXRodHgiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJqZGJjLnJlc291cmNlLnR5cGUiIHZhbHVlPSJqYXZheC5zcWwuWEFEYXRhU291cmNlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2FwcGF1dGh0eC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2FwcGF1dGh0eC9idWlsZC54bWwKaW5kZXggOWYwMjc3YS4uMDhjM2QwMCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hcHBhdXRodHgvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXBwYXV0aHR4L2J1aWxkLnhtbApAQCAtNDAsNyArNDAsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNTIsMTIgKzUyLDEyIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi9TaW1wbGVCTVAuY2xhc3MsICoqL1NpbXBsZUJNUEhvbWUuY2xhc3MsKiovKkNsaWVudCouY2xhc3MiIC8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KQEAgLTcxLDkgKzcxLDkgQEAKICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1hcHBhdXRoLXBvb2wxIi8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL3MxcWVhcHBhdXRoMSIvPgogICAgICAgPC9hbnRjYWxsPgotICAgICAKKwogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAKKyAgICA8L3RhcmdldD4KIAogCiAKQEAgLTg1LDcgKzg1LDcgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlc2V0LWRlcmJ5LWZvci1uby1hdXRoZW50aWNhdGlvbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgogCkBAIC0xMDAsNyArMTAwLDcgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2FwcGF1dGh0eC9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2FwcGF1dGh0eC9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKaW5kZXggNTI1NzZlNy4uOTk0MzBjNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hcHBhdXRodHgvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXBwYXV0aHR4L2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQpAQCAtMjgsMzggKzI4LDM4IEBACiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCi0JU3RyaW5nIHRlc3RTdWl0ZSA9ICJBcHBBdXRoVFggIjsKLQlTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKKworICAgIFN0cmluZyB0ZXN0U3VpdGUgPSAiQXBwQXV0aFRYICI7CisgICAgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCk7CiAKICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgT2JqZWN0IG9ialJlZiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlQk1QSG9tZSIpOwotCVNpbXBsZUJNUEhvbWUgc2ltcGxlQk1QSG9tZSA9IChTaW1wbGVCTVBIb21lKQorICAgIFNpbXBsZUJNUEhvbWUgc2ltcGxlQk1QSG9tZSA9IChTaW1wbGVCTVBIb21lKQogICAgICAgICBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ialJlZiwgU2ltcGxlQk1QSG9tZS5jbGFzcyk7CiAKICAgICAgICAgU2ltcGxlQk1QIHNpbXBsZUJNUCA9IHNpbXBsZUJNUEhvbWUuY3JlYXRlKCk7Ci0Jc3RhdC5hZGREZXNjcmlwdGlvbigiSkRCQyBBcHBsaWNhdGlvbiBBdXRoZW50aWNhdGlvbiBUWCB0ZXN0Iik7Ci0gICAgICAgCisgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiSkRCQyBBcHBsaWNhdGlvbiBBdXRoZW50aWNhdGlvbiBUWCB0ZXN0Iik7CisKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgQWxsIHRlc3RzIHdpbGwgZmFpbCB3aXRoIERlcmJ5IHRpbGwgWEEgZHJpdmVyIGlzIGZpeGVkIik7Ci0JaWYgKCBzaW1wbGVCTVAudGVzdDEoKSApIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MSA6ICIsIHN0YXQuUEFTUyk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MSA6ICIsIHN0YXQuRkFJTCk7Ci0JfQorICAgIGlmICggc2ltcGxlQk1QLnRlc3QxKCkgKSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDEgOiAiLCBzdGF0LlBBU1MpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDEgOiAiLCBzdGF0LkZBSUwpOworICAgIH0KIAotCWlmICggc2ltcGxlQk1QLnRlc3QyKCkgKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDIgOiAiLCBzdGF0LlBBU1MpOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDIgOiAiLCBzdGF0LkZBSUwpOwotCX0KKyAgICBpZiAoIHNpbXBsZUJNUC50ZXN0MigpICkgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QyIDogIiwgc3RhdC5QQVNTKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QyIDogIiwgc3RhdC5GQUlMKTsKKyAgICB9CiAKLQlpZiAoIHNpbXBsZUJNUC50ZXN0MygpICkgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QzIDogIiwgc3RhdC5QQVNTKTsKLQl9IGVsc2UgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QzIDogIiwgc3RhdC5GQUlMKTsKLQl9Ci0gICAgICAgIAotCVN5c3RlbS5vdXQucHJpbnRsbigiamRiYyBhcHBhdXRodHggc3RhdHVzOiIpOwotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgaWYgKCBzaW1wbGVCTVAudGVzdDMoKSApIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MyA6ICIsIHN0YXQuUEFTUyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MyA6ICIsIHN0YXQuRkFJTCk7CisgICAgfQorCisgICAgU3lzdGVtLm91dC5wcmludGxuKCJqZGJjIGFwcGF1dGh0eCBzdGF0dXM6Iik7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2FwcGF1dGh0eC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hcHBhdXRodHgvZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCAyYTA0MTY4Li4zNTcwYTc5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2FwcGF1dGh0eC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXBwYXV0aHR4L2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTU1LDYgKzU1LDYgQEAKICAgICAgIDx0cmFucy1hdHRyaWJ1dGU+UmVxdWlyZWQ8L3RyYW5zLWF0dHJpYnV0ZT4KICAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgPC9hc3NlbWJseS1kZXNjcmlwdG9yPgotICAgICAgCisKIDwvZWpiLWphcj4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hcHBhdXRodHgvZWpiL1NpbXBsZUJNUEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXBwYXV0aHR4L2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKaW5kZXggZDQ5MjMzZC4uYjIyOTdjMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hcHBhdXRodHgvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2FwcGF1dGh0eC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCkBAIC0zMSw3OCArMzEsNzggQEAKICAgICBpbnQgaWQ7CiAKICAgICBwdWJsaWMgdm9pZCBzZXRFbnRpdHlDb250ZXh0KEVudGl0eUNvbnRleHQgZW50aXR5Q29udGV4dCkgewotCUNvbnRleHQgY29udGV4dCA9IG51bGw7Ci0JdHJ5IHsKLQkgICAgY29udGV4dCAgICA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCSAgICBkcyA9IChEYXRhU291cmNlKSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNldHgiKTsKLQl9IGNhdGNoIChOYW1pbmdFeGNlcHRpb24gZSkgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJjYW50IGZpbmQgZGF0YXNvdXJjZSIpOwotCX0KKyAgICBDb250ZXh0IGNvbnRleHQgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIGNvbnRleHQgICAgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgZHMgPSAoRGF0YVNvdXJjZSkgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZXR4Iik7CisgICAgfSBjYXRjaCAoTmFtaW5nRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiY2FudCBmaW5kIGRhdGFzb3VyY2UiKTsKKyAgICB9CiAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbKipTaW1wbGVCTVBCZWFuKipdIERvbmUgd2l0aCBzZXRFbnRpdHlDb250ZXh0Li4uLiIpOwogICAgIH0KIAogICAgIHB1YmxpYyBJbnRlZ2VyIGVqYkNyZWF0ZSgpIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewotCXJldHVybiBuZXcgSW50ZWdlcigxKTsKKyAgICByZXR1cm4gbmV3IEludGVnZXIoMSk7CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDEoKSB7CiAgICAgICAgIC8vYXBwbGljYXRpb24gYXV0aCArIHVzZXIvcHdkIG5vdCBzcGVjaWZpZWQgLSBzaG91bGQgZmFpbAotCUNvbm5lY3Rpb24gY29ubiA9IG51bGw7Ci0JYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKLQl0cnkgewotCSAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIHBhc3NlZCA9IHRydWU7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKCBjb25uICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgewotCSAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKLQkJfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fSAgICAKLQkgICAgfQotCX0KLQotCi0JcmV0dXJuIHBhc3NlZDsKKyAgICBDb25uZWN0aW9uIGNvbm4gPSBudWxsOworICAgIGJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CisgICAgdHJ5IHsKKyAgICAgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICBwYXNzZWQgPSB0cnVlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmICggY29ubiAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjb25uLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQogICAgIH0KLSAgICAKKworCisgICAgcmV0dXJuIHBhc3NlZDsKKyAgICB9CisKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MigpIHsKICAgICAgICAgLy9hcHBsaWNhdGlvbiBhdXRoICsgdXNlci9wd2QgIHNwZWNpZmllZCAtIHNob3VsZCBwYXNzCi0JQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKLQlib29sZWFuIHBhc3NlZCA9IHRydWU7Ci0JdHJ5IHsKLQkgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oIkRCVVNFUiIsICJEQlBBU1NXT1JEIik7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgcGFzc2VkID0gZmFsc2U7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKCBjb25uICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgewotCSAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKLQkJfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fSAgICAKLQkgICAgfQotCX0KKyAgICBDb25uZWN0aW9uIGNvbm4gPSBudWxsOworICAgIGJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKKyAgICB0cnkgeworICAgICAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigiREJVU0VSIiwgIkRCUEFTU1dPUkQiKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICBwYXNzZWQgPSBmYWxzZTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBpZiAoIGNvbm4gIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgY29ubi5jbG9zZSgpOworICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CisgICAgICAgIH0KKyAgICB9CiAKIAotCXJldHVybiBwYXNzZWQ7CisgICAgcmV0dXJuIHBhc3NlZDsKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MygpIHsKLSAgICAgICAgLy9hcHBsaWNhdGlvbiBhdXRoICsgd3JvbmcgdXNlci9wd2QgCi0JQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKLQlib29sZWFuIHBhc3NlZCA9IGZhbHNlOwotCXRyeSB7Ci0JICAgIGNvbm4gPSBkcy5nZXRDb25uZWN0aW9uKCJ4eXoiLCAieHl6IiApOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIHBhc3NlZCA9IHRydWU7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKCBjb25uICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgewotCSAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKLQkJfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fSAgICAKLQkgICAgfQotCX0KKyAgICAgICAgLy9hcHBsaWNhdGlvbiBhdXRoICsgd3JvbmcgdXNlci9wd2QKKyAgICBDb25uZWN0aW9uIGNvbm4gPSBudWxsOworICAgIGJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CisgICAgdHJ5IHsKKyAgICAgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oInh5eiIsICJ4eXoiICk7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgcGFzc2VkID0gdHJ1ZTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBpZiAoIGNvbm4gIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgY29ubi5jbG9zZSgpOworICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CisgICAgICAgIH0KKyAgICB9CiAKIAotCXJldHVybiBwYXNzZWQ7CisgICAgcmV0dXJuIHBhc3NlZDsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJMb2FkKCkge30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXBwYXV0aHR4L3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXBwYXV0aHR4L3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCBlNDkxNGY2Li5mMjU2MDc2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2FwcGF1dGh0eC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hcHBhdXRodHgvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDcgKzEsNyBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KLQ0KLUNSRUFURSBUQUJMRSBPX0N1c3RvbWVyICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOworCitDUkVBVEUgVEFCTEUgT19DdXN0b21lciAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2FwcGF1dGh0eC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hcHBhdXRodHgvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAppbmRleCA3MGQxZmNjLi5kODU0Yjk1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2FwcGF1dGh0eC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXBwYXV0aHR4L3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEgKzEgQEAKLURyb3AgdGFibGUgT19DdXN0b21lcjsNCitEcm9wIHRhYmxlIE9fQ3VzdG9tZXI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2FwcGJhc2VkTW9uaXRvcmluZy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2FwcGJhc2VkTW9uaXRvcmluZy9idWlsZC54bWwKaW5kZXggYjk5NWJlNC4uNzEwMmU3YiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hcHBiYXNlZE1vbml0b3JpbmcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXBwYmFzZWRNb25pdG9yaW5nL2J1aWxkLnhtbApAQCAtNjEsNyArNjEsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNsaWVudCIvPgpAQCAtNzQsMjEgKzc0LDIxIEBACiAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgdmFsdWU9IioqLypDbGllbnQqLmNsYXNzIiAvPgogICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIC8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iYXBwbW9uaXRvcmluZyIvPgotCTxwYXJhbSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9L2FwcG1vbml0b3JpbmdBcHBDbGllbnQuamFyIi8+CisgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vYXBwbW9uaXRvcmluZ0FwcENsaWVudC5qYXIiLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9InRydWUiPgogICAgICAgICA8YXJnIGxpbmU9ImRlcGxveSIvPgogICAgICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+CiAgICAgICAgIDxhcmcgbGluZT0iLS11cGxvYWQ9dHJ1ZSIvPgotICAgICAgICA8YXJnIGxpbmU9Ii0tcmV0cmlldmUgJHthc3NlbWJsZS5kaXJ9Ii8+ICAgIAotICAgICAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CQorICAgICAgICA8YXJnIGxpbmU9Ii0tcmV0cmlldmUgJHthc3NlbWJsZS5kaXJ9Ii8+CisgICAgICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KICAgICAgICAgPGFyZyBsaW5lPSIke2Fzc2VtYmxlLmRpcn0vYXBwbW9uaXRvcmluZ0FwcENsaWVudC5qYXIiLz4KICAgICAgIDwvZXhlYz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8ZWNobyBtZXNzYWdlPSJhcHBjbGllbnQgLWNsaWVudCAke2Fzc2VtYmxlLmRpcn0vYXBwbW9uaXRvcmluZ0FwcENsaWVudC5qYXIgLW5hbWUgYXBwbW9uaXRvcmluZ0NsaWVudCAtdGV4dGF1dGggLXVzZXIgajJlZSAtcGFzc3dvcmQgajJlZSAteG1sICR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy8ke2FkbWluLmRvbWFpbn0vY29uZmlnL2dsYXNzZmlzaC1hY2MueG1sICR7YXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3N9Ii8+CiAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FQUENMSUVOVH0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CkBAIC0xMTQsMTIgKzExNCwxMiBAQAogICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICAgICAgPGFyZyBsaW5lPSJ1bmRlcGxveSIvPgogICAgICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+Ci0gICAgICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4JCisgICAgICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KICAgICAgICAgPGFyZyBsaW5lPSJhcHBtb25pdG9yaW5nQXBwQ2xpZW50Ii8+CiAgICAgICA8L2V4ZWM+CiAgICAgICA8YW50IGRpcj0iLi4vY29udGF1dGgiIHRhcmdldD0idW5kZXBsb3kiLz4KICAgICAgIDxhbnQgZGlyPSIuLi9zdGF0ZW1lbnR0aW1lb3V0IiB0YXJnZXQ9InVuZGVwbG95LWxpbWl0ZWQiLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hcHBiYXNlZE1vbml0b3JpbmcvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hcHBiYXNlZE1vbml0b3JpbmcvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDQ4NjkzYTUuLmJhMWU0MDYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXBwYmFzZWRNb25pdG9yaW5nL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2FwcGJhc2VkTW9uaXRvcmluZy9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTQ5LDE4ICs0OSwxOCBAQAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJBcHAgYmFzZWQgbW9uaXRvcmluZyB0ZXN0cyIpOwogCiAgICAgICAgIGlmIChnZXRNb25pdG9yYWJsZVByb3BlcnR5T2ZDb25uZWN0aW9uUG9vbChhcHAxLCBOVU1fQUNRVUlSRUQpID09IDIgJiYgZ2V0TW9uaXRvcmFibGVQcm9wZXJ0eU9mQ29ubmVjdGlvblBvb2woYXBwMiwgTlVNX0FDUVVJUkVEKSA9PSAzICYmIGdldE1vbml0b3JhYmxlUHJvcGVydHlPZkNvbm5lY3Rpb25Qb29sKG51bGwsIE5VTV9BQ1FVSVJFRCkgPT0gNSkgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk1vbml0b3JpbmcgOiBBY3F1aXJlZCBTdGF0aXN0aWMgdGVzdCBwYXNzIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTW9uaXRvcmluZyA6IEFjcXVpcmVkIFN0YXRpc3RpYyB0ZXN0IHBhc3MiKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJNb25pdG9yaW5nIDogQWNxdWlyZWQgU3RhdGlzdGljIHRlc3Q6ICIsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gZWxzZSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTW9uaXRvcmluZyA6IEFjcXVpcmVkIFN0YXRpc3RpYyB0ZXN0IGZhaWwiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNb25pdG9yaW5nIDogQWNxdWlyZWQgU3RhdGlzdGljIHRlc3QgZmFpbCIpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIk1vbml0b3JpbmcgOiBBY3F1aXJlZCBTdGF0aXN0aWMgdGVzdDogIiwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChnZXRNb25pdG9yYWJsZVByb3BlcnR5T2ZDb25uZWN0aW9uUG9vbChhcHAxLCBOVU1fUkVMRUFTRUQpID09IDIgJiYgZ2V0TW9uaXRvcmFibGVQcm9wZXJ0eU9mQ29ubmVjdGlvblBvb2woYXBwMiwgTlVNX1JFTEVBU0VEKSA9PSAzICYmIGdldE1vbml0b3JhYmxlUHJvcGVydHlPZkNvbm5lY3Rpb25Qb29sKG51bGwsIE5VTV9SRUxFQVNFRCkgPT0gNSkgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk1vbml0b3JpbmcgOiBSZWxlYXNlZCBTdGF0aXN0aWMgdGVzdCBwYXNzIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTW9uaXRvcmluZyA6IFJlbGVhc2VkIFN0YXRpc3RpYyB0ZXN0IHBhc3MiKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJNb25pdG9yaW5nIDogUmVsZWFzZWQgU3RhdGlzdGljIHRlc3Q6ICIsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gZWxzZSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTW9uaXRvcmluZyA6IFJlbGVhc2VkIFN0YXRpc3RpYyB0ZXN0IGZhaWwiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNb25pdG9yaW5nIDogUmVsZWFzZWQgU3RhdGlzdGljIHRlc3QgZmFpbCIpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIk1vbml0b3JpbmcgOiBSZWxlYXNlZCBTdGF0aXN0aWMgdGVzdDogIiwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCkBAIC02OSwyNCArNjksMjQgQEAKIAogICAgIHB1YmxpYyBpbnQgZ2V0TW9uaXRvcmFibGVQcm9wZXJ0eU9mQ29ubmVjdGlvblBvb2woU3RyaW5nIGFwcE5hbWUsIFN0cmluZyBtb25pdG9yaW5nU3RhdCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKLQlmaW5hbCBTdHJpbmcgdXJsU3RyID0gInNlcnZpY2U6am14OnJtaTovLy9qbmRpL3JtaTovLyIgKyBIT1NUX05BTUUgKyAiOiIgKyBKTVhfUE9SVCArICIvam14cm1pIjsgICAgCisgICAgZmluYWwgU3RyaW5nIHVybFN0ciA9ICJzZXJ2aWNlOmpteDpybWk6Ly8vam5kaS9ybWk6Ly8iICsgSE9TVF9OQU1FICsgIjoiICsgSk1YX1BPUlQgKyAiL2pteHJtaSI7CiAgICAgICAgIGZpbmFsIEpNWFNlcnZpY2VVUkwgdXJsID0gbmV3IEpNWFNlcnZpY2VVUkwodXJsU3RyKTsKIAotCWZpbmFsIEpNWENvbm5lY3RvciBqbXhDb25uID0gSk1YQ29ubmVjdG9yRmFjdG9yeS5jb25uZWN0KHVybCk7Ci0JZmluYWwgTUJlYW5TZXJ2ZXJDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBqbXhDb25uLmdldE1CZWFuU2VydmVyQ29ubmVjdGlvbigpOworICAgIGZpbmFsIEpNWENvbm5lY3RvciBqbXhDb25uID0gSk1YQ29ubmVjdG9yRmFjdG9yeS5jb25uZWN0KHVybCk7CisgICAgZmluYWwgTUJlYW5TZXJ2ZXJDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBqbXhDb25uLmdldE1CZWFuU2VydmVyQ29ubmVjdGlvbigpOwogCiAgICAgICAgIE9iamVjdE5hbWUgb2JqZWN0TmFtZSA9IG51bGw7Ci0JaWYoYXBwTmFtZSA9PSBudWxsKSB7CisgICAgaWYoYXBwTmFtZSA9PSBudWxsKSB7CiAgICAgICAgICAgICBvYmplY3ROYW1lID0gbmV3IE9iamVjdE5hbWUoImFteDpwcD0vbW9uL3NlcnZlci1tb25bc2VydmVyXSx0eXBlPWpkYmMtY29ubmVjdGlvbi1wb29sLW1vbixuYW1lPXJlc291cmNlcy8iICsgcG9vbE5hbWUpOwotCX0gZWxzZSB7Ci0JICAgIG9iamVjdE5hbWUgPSBuZXcgT2JqZWN0TmFtZSgiYW14OnBwPS9tb24vc2VydmVyLW1vbltzZXJ2ZXJdLHR5cGU9amRiYy1jb25uZWN0aW9uLXBvb2wtYXBwLW1vbixuYW1lPXJlc291cmNlcy8iICsgcG9vbE5hbWUgKyAiLyIgKyBhcHBOYW1lKTsKLQl9CisgICAgfSBlbHNlIHsKKyAgICAgICAgb2JqZWN0TmFtZSA9IG5ldyBPYmplY3ROYW1lKCJhbXg6cHA9L21vbi9zZXJ2ZXItbW9uW3NlcnZlcl0sdHlwZT1qZGJjLWNvbm5lY3Rpb24tcG9vbC1hcHAtbW9uLG5hbWU9cmVzb3VyY2VzLyIgKyBwb29sTmFtZSArICIvIiArIGFwcE5hbWUpOworICAgIH0KIAotCWphdmF4Lm1hbmFnZW1lbnQub3Blbm1iZWFuLkNvbXBvc2l0ZURhdGFTdXBwb3J0IHJldHVyblZhbHVlID0gCi0JCShqYXZheC5tYW5hZ2VtZW50Lm9wZW5tYmVhbi5Db21wb3NpdGVEYXRhU3VwcG9ydCkgCi0JCWNvbm5lY3Rpb24uZ2V0QXR0cmlidXRlKG9iamVjdE5hbWUsIG1vbml0b3JpbmdTdGF0KTsKKyAgICBqYXZheC5tYW5hZ2VtZW50Lm9wZW5tYmVhbi5Db21wb3NpdGVEYXRhU3VwcG9ydCByZXR1cm5WYWx1ZSA9CisgICAgICAgIChqYXZheC5tYW5hZ2VtZW50Lm9wZW5tYmVhbi5Db21wb3NpdGVEYXRhU3VwcG9ydCkKKyAgICAgICAgY29ubmVjdGlvbi5nZXRBdHRyaWJ1dGUob2JqZWN0TmFtZSwgbW9uaXRvcmluZ1N0YXQpOwogCi0JU3lzdGVtLm91dC5wcmludGxuKCI+Pj4iICsgbW9uaXRvcmluZ1N0YXQgKyAiPSIgKyByZXR1cm5WYWx1ZS5nZXQoImNvdW50IikpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPj4+IiArIG1vbml0b3JpbmdTdGF0ICsgIj0iICsgcmV0dXJuVmFsdWUuZ2V0KCJjb3VudCIpKTsKICAgICAgICAgcmV0dXJuIG5ldyBJbnRlZ2VyKHJldHVyblZhbHVlLmdldCgiY291bnQiKS50b1N0cmluZygpKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXV0b2NvbW1pdC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hdXRvY29tbWl0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNmY3YmUwMS4uNWZlYTJhYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hdXRvY29tbWl0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hdXRvY29tbWl0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE5ICsxNSwxOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iamRiYy1hdXRvY29tbWl0Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIxMiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hdXRvY29tbWl0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXV0b2NvbW1pdC9idWlsZC54bWwKaW5kZXggZDZlNDI2Ni4uMDgyMWUyMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hdXRvY29tbWl0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2F1dG9jb21taXQvYnVpbGQueG1sCkBAIC0zNSw3ICszNSw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NywyOSArNDcsMjkgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqL1NpbXBsZUJNUC5jbGFzcywgKiovU2ltcGxlQk1QSG9tZS5jbGFzcywqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICAgIAotICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXR1cCIvPiAKKworICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXR1cCIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9wb2ludGJhc2Uuc3FsIi8+CkBAIC03Nyw3ICs3Nyw3IEBACiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5zZXR1cCIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpAQCAtODcsMTIgKzg3LDEyIEBACiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWpkYmMtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1hdXRvY29tbWl0LXBvb2wiLz4KLQk8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9hdXRvY29tbWl0Ii8+CisgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvYXV0b2NvbW1pdCIvPgogICAgICAgPC9hbnRjYWxsPgotICAgICAgCisKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgotCTxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLmpkYmMtYXV0b2NvbW1pdC1wb29sLnN0ZWFkeV9wb29sX3NpemU9MiIvPgorICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLmpkYmMtYXV0b2NvbW1pdC1wb29sLnN0ZWFkeV9wb29sX3NpemU9MiIvPgogICAgICAgPC9hbnRjYWxsPgogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KQEAgLTEwMCw3ICsxMDAsNyBAQAogICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLWF1dG9jb21taXQtcG9vbC5tYXhfcG9vbF9zaXplPTIiLz4KICAgICAgIDwvYW50Y2FsbD4KIAotICAgICAgCisKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idW5zZXR1cCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2F1dG9jb21taXQvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hdXRvY29tbWl0L2NsaWVudC9DbGllbnQuamF2YQppbmRleCA0ZDQ1NjNmLi41MjliOTFhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2F1dG9jb21taXQvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXV0b2NvbW1pdC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI3LDM2ICsyNywzNiBAQAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKICAgICBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogCiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7Ci0JY2xpZW50LnJ1blRlc3QoKTsKKyAgICBjbGllbnQucnVuVGVzdCgpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHJ1blRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgT2JqZWN0IG9ialJlZiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlQk1QSG9tZSIpOwotCVNpbXBsZUJNUEhvbWUgc2ltcGxlQk1QSG9tZSA9IChTaW1wbGVCTVBIb21lKQorICAgIFNpbXBsZUJNUEhvbWUgc2ltcGxlQk1QSG9tZSA9IChTaW1wbGVCTVBIb21lKQogICAgICAgICBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ialJlZiwgU2ltcGxlQk1QSG9tZS5jbGFzcyk7CiAKICAgICAgICAgU2ltcGxlQk1QIHNpbXBsZUJNUCA9IHNpbXBsZUJNUEhvbWUuY3JlYXRlKCk7Ci0Jc3RhdC5hZGREZXNjcmlwdGlvbigiQXV0b2NvbW1pdCBUZXN0Iik7CisgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiQXV0b2NvbW1pdCBUZXN0Iik7CiAKICAgICAgICAgaWYgKCBzaW1wbGVCTVAudGVzdDEoKSApIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoIiBBdXRvQ29tbWl0IHRlc3QxIDogIiwgc3RhdC5QQVNTKTsKLQl9IGVsc2UgewotCSAgICBzdGF0LmFkZFN0YXR1cygiIEF1dG9Db21taXQgdGVzdDEgOiAiLCBzdGF0LkZBSUwpOwotCX0KKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoIiBBdXRvQ29tbWl0IHRlc3QxIDogIiwgc3RhdC5QQVNTKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cygiIEF1dG9Db21taXQgdGVzdDEgOiAiLCBzdGF0LkZBSUwpOworICAgIH0KIAogICAgICAgICBpZiAoIHNpbXBsZUJNUC50ZXN0MigpICkgewotCSAgICBzdGF0LmFkZFN0YXR1cygiIEF1dG9Db21taXQgdGVzdDIgOiAiLCBzdGF0LlBBU1MpOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCIgQXV0b0NvbW1pdCB0ZXN0MiA6ICIsIHN0YXQuRkFJTCk7Ci0JfQorICAgICAgICBzdGF0LmFkZFN0YXR1cygiIEF1dG9Db21taXQgdGVzdDIgOiAiLCBzdGF0LlBBU1MpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCIgQXV0b0NvbW1pdCB0ZXN0MiA6ICIsIHN0YXQuRkFJTCk7CisgICAgfQogCi0JU3lzdGVtLm91dC5wcmludGxuKCJqZGJjIGF1dG9jb21taXQgc3RhdHVzOiAiKTsKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiamRiYyBhdXRvY29tbWl0IHN0YXR1czogIik7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2F1dG9jb21taXQvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXV0b2NvbW1pdC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IDMyNjVmNWIuLmI3YmM3OTUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXV0b2NvbW1pdC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXV0b2NvbW1pdC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgIDxtZXRob2QtbmFtZT4qPC9tZXRob2QtbmFtZT4KICAgICAgIDwvbWV0aG9kPgogICAgICAgPHRyYW5zLWF0dHJpYnV0ZT5SZXF1aXJlZDwvdHJhbnMtYXR0cmlidXRlPgotICAgIDwvY29udGFpbmVyLXRyYW5zYWN0aW9uPiAgCisgICAgPC9jb250YWluZXItdHJhbnNhY3Rpb24+CiAgICAgPGNvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgICAgIDxtZXRob2Q+CiAgICAgICAgIDxlamItbmFtZT5TaW1wbGVCTVBFSkI8L2VqYi1uYW1lPgpAQCAtNjIsNiArNjIsNiBAQAogICAgICAgPHRyYW5zLWF0dHJpYnV0ZT5Ob3RTdXBwb3J0ZWQ8L3RyYW5zLWF0dHJpYnV0ZT4KICAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgPC9hc3NlbWJseS1kZXNjcmlwdG9yPgotICAgICAgCisKIDwvZWpiLWphcj4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hdXRvY29tbWl0L2VqYi9TaW1wbGVCTVBCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2F1dG9jb21taXQvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQppbmRleCA1MGYxNzY2Li5jNzgwZDc4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2F1dG9jb21taXQvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2F1dG9jb21taXQvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQpAQCAtMzAsNjcgKzMwLDY3IEBACiAgICAgcHJvdGVjdGVkIERhdGFTb3VyY2UgZHM7CiAKICAgICBwdWJsaWMgdm9pZCBzZXRFbnRpdHlDb250ZXh0KEVudGl0eUNvbnRleHQgZW50aXR5Q29udGV4dCkgewotCUNvbnRleHQgY29udGV4dCA9IG51bGw7Ci0JdHJ5IHsKLQkgICAgY29udGV4dCAgICA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCSAgICBkcyA9IChEYXRhU291cmNlKSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7Ci0JfSBjYXRjaCAoTmFtaW5nRXhjZXB0aW9uIGUpIHsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiY2FudCBmaW5kIGRhdGFzb3VyY2UiKTsKLQl9CisgICAgQ29udGV4dCBjb250ZXh0ID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgICBjb250ZXh0ICAgID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgIGRzID0gKERhdGFTb3VyY2UpIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKKyAgICB9IGNhdGNoIChOYW1pbmdFeGNlcHRpb24gZSkgeworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJjYW50IGZpbmQgZGF0YXNvdXJjZSIpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgSW50ZWdlciBlamJDcmVhdGUoKSB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsKLQlyZXR1cm4gbmV3IEludGVnZXIoMSk7CisgICAgcmV0dXJuIG5ldyBJbnRlZ2VyKDEpOwogICAgIH0KIAogICAgIC8qIEdldCBhIHNpbmdsZSBjb25uZWN0aW9uIGFuZCBjbG9zZSBpdCAqLwogICAgIHB1YmxpYyBib29sZWFuIHRlc3QxKCkgewogICAgICAgICBDb25uZWN0aW9uIGNvbm4gPSBudWxsOwogICAgICAgICBib29sZWFuIHBhc3NlZCA9IHRydWU7Ci0JdHJ5IHsKLQkgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQkgICAgcGFzc2VkID0gIWNvbm4uZ2V0QXV0b0NvbW1pdCgpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIHBhc3NlZCA9IGZhbHNlOwotCX0gZmluYWxseSB7Ci0JICAgIGlmICggY29ubiAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsKLQkgICAgICAgICAgICBjb25uLmNsb3NlKCk7Ci0JICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9ICAgIAotCSAgICB9Ci0gICAgICAgIH0gCi0gICAgICAgIAotCXJldHVybiBwYXNzZWQ7CisgICAgdHJ5IHsKKyAgICAgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgcGFzc2VkID0gIWNvbm4uZ2V0QXV0b0NvbW1pdCgpOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmICggY29ubiAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjb25uLmNsb3NlKCk7CisgICAgICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CisgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgcmV0dXJuIHBhc3NlZDsKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MigpIHsKICAgICAgICAgQ29ubmVjdGlvbiBjb25uMSAgPSBudWxsOwogICAgICAgICBDb25uZWN0aW9uIGNvbm4yICA9IG51bGw7Ci0JYm9vbGVhbiBwYXNzZWQgPSB0cnVlOworICAgIGJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKIAotCXRyeSB7Ci0JICAgIGNvbm4xID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCSAgICBjb25uMiA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICB0cnkgeworICAgICAgICBjb25uMSA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgY29ubjIgPSBkcy5nZXRDb25uZWN0aW9uKCk7CiAKLQkgICAgcGFzc2VkID0gY29ubjEuZ2V0QXV0b0NvbW1pdCgpICYgY29ubjIuZ2V0QXV0b0NvbW1pdCgpOwotCX0gY2F0Y2goIEV4Y2VwdGlvbiBlICkgewotCSAgICBwYXNzZWQgPSBmYWxzZTsKLQl9IGZpbmFsbHkgewotCSAgICBpZiAoY29ubjEgIT0gbnVsbCApIHsKLQkgICAgICAgIHRyeSB7Ci0JCSAgICBjb25uMS5jbG9zZSgpOwotCQl9IGNhdGNoKCBFeGNlcHRpb24gZWkpIHt9Ci0JICAgIH0KLQkgICAgaWYgKGNvbm4yICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgewotCQkgICAgY29ubjIuY2xvc2UoKTsKLQkJfSBjYXRjaCggRXhjZXB0aW9uIGVpKSB7fQotCSAgICB9Ci0JfQotCi0JcmV0dXJuIHBhc3NlZDsKKyAgICAgICAgcGFzc2VkID0gY29ubjEuZ2V0QXV0b0NvbW1pdCgpICYgY29ubjIuZ2V0QXV0b0NvbW1pdCgpOworICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlICkgeworICAgICAgICBwYXNzZWQgPSBmYWxzZTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBpZiAoY29ubjEgIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICBjb25uMS5jbG9zZSgpOworICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZWkpIHt9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbm4yICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgY29ubjIuY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGVpKSB7fQorICAgICAgICB9CiAgICAgfQotICAgCisKKyAgICByZXR1cm4gcGFzc2VkOworICAgIH0KKwogCiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHt9CiAgICAgcHVibGljIHZvaWQgZWpiU3RvcmUoKSB7fQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hdXRvY29tbWl0L3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXV0b2NvbW1pdC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggZTQ5MTRmNi4uZjI1NjA3NiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9hdXRvY29tbWl0L3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2F1dG9jb21taXQvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDcgKzEsNyBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KLQ0KLUNSRUFURSBUQUJMRSBPX0N1c3RvbWVyICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOworCitDUkVBVEUgVEFCTEUgT19DdXN0b21lciAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2F1dG9jb21taXQvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXV0b2NvbW1pdC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IDcwZDFmY2MuLmQ4NTRiOTUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXV0b2NvbW1pdC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvYXV0b2NvbW1pdC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xICsxIEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2J1aWxkLnhtbAppbmRleCAxNmIxODE3Li4wNzE1YzVjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2J1aWxkLnhtbApAQCAtMzAsNyArMzAsNyBAQAogPHByb2plY3QgbmFtZT0iamRiYyIgZGVmYXVsdD0idXNhZ2UiIGJhc2VkaXI9Ii4iPgogICAgICZjb21tb25TZXR1cDsKICAgICAmY29tbW9uQnVpbGQ7Ci0gICAgCisKICAgICAmamRiY0NvbW1vbjsKICAgICAmamRiY0NvbW1vblByb3BlcnRpZXM7CiAgICAgPCEtLSZlZUNvbW1vbjsKQEAgLTQzLDk0ICs0Myw5NCBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5BUFNfSE9NRX0iIGluY2x1ZGVzPSJ0ZXN0X3Jlc3VsdHMqIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgICAgICA8ZGVsZXRlPgotCSAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LkFQU19IT01FfSIgaW5jbHVkZXM9IkpEQkN0ZXN0X3Jlc3VsdHMuaHRtbCIvPgorICAgICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LkFQU19IT01FfSIgaW5jbHVkZXM9IkpEQkN0ZXN0X3Jlc3VsdHMuaHRtbCIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICAgICAgPGRlbGV0ZT4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9Iioub3V0cHV0Ii8+CiAgICAgICAgIDwvZGVsZXRlPgotCTxyZWNvcmQgbmFtZT0iamRiYy5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InJ1bi10ZXN0cyIvPgotCTxhbnRjYWxsIHRhcmdldD0icmVwb3J0Ij4KLQkgICAgPHBhcmFtIG5hbWU9Imh0bWxmaWxlIiB2YWx1ZT0iJHtlbnYuQVBTX0hPTUV9L3Rlc3RfcmVzdWx0cy5odG1sIi8+Ci0JPC9hbnRjYWxsPgotCTxyZWNvcmQgbmFtZT0iamRiYy5vdXRwdXQiIGFjdGlvbj0ic3RvcCIvPgotCQorICAgIDxyZWNvcmQgbmFtZT0iamRiYy5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi10ZXN0cyIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0icmVwb3J0Ij4KKyAgICAgICAgPHBhcmFtIG5hbWU9Imh0bWxmaWxlIiB2YWx1ZT0iJHtlbnYuQVBTX0hPTUV9L3Rlc3RfcmVzdWx0cy5odG1sIi8+CisgICAgPC9hbnRjYWxsPgorICAgIDxyZWNvcmQgbmFtZT0iamRiYy5vdXRwdXQiIGFjdGlvbj0ic3RvcCIvPgorCiAgICAgPC90YXJnZXQ+Ci0JCisKICAgICA8dGFyZ2V0IG5hbWU9ImpkYmMtYWxsLXNlY3VyaXR5Ij4KICAgICAgICAgPGRlbGV0ZT4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuQVBTX0hPTUV9IiBpbmNsdWRlcz0idGVzdF9yZXN1bHRzKiIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICAgICAgPGRlbGV0ZT4KLQkgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5BUFNfSE9NRX0iIGluY2x1ZGVzPSJKREJDU2VjdXJpdHl0ZXN0X3Jlc3VsdHMuaHRtbCIvPgorICAgICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LkFQU19IT01FfSIgaW5jbHVkZXM9IkpEQkNTZWN1cml0eXRlc3RfcmVzdWx0cy5odG1sIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgICAgICA8ZGVsZXRlPgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5vdXRwdXQiLz4KICAgICAgICAgPC9kZWxldGU+Ci0JPHJlY29yZCBuYW1lPSJqZGJjLnNlY21hbi5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InJ1bi10ZXN0cyIvPgotCTxhbnRjYWxsIHRhcmdldD0icmVwb3J0Ij4KLQkgICAgPHBhcmFtIG5hbWU9Imh0bWxmaWxlIiB2YWx1ZT0iJHtlbnYuQVBTX0hPTUV9L0pEQkNTZWN1cml0eXRlc3RfcmVzdWx0cy5odG1sIi8+Ci0JPC9hbnRjYWxsPgotCTxyZWNvcmQgbmFtZT0iamRiYy5zZWNtYW4ub3V0cHV0IiBhY3Rpb249InN0b3AiLz4KKyAgICA8cmVjb3JkIG5hbWU9ImpkYmMuc2VjbWFuLm91dHB1dCIgYWN0aW9uPSJzdGFydCIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLXRlc3RzIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXBvcnQiPgorICAgICAgICA8cGFyYW0gbmFtZT0iaHRtbGZpbGUiIHZhbHVlPSIke2Vudi5BUFNfSE9NRX0vSkRCQ1NlY3VyaXR5dGVzdF9yZXN1bHRzLmh0bWwiLz4KKyAgICA8L2FudGNhbGw+CisgICAgPHJlY29yZCBuYW1lPSJqZGJjLnNlY21hbi5vdXRwdXQiIGFjdGlvbj0ic3RvcCIvPgogICAgIDwvdGFyZ2V0PgotCQorCiAgICAgPHRhcmdldCBuYW1lPSJydW4tdGVzdHMiPgotCTxhbnQgZGlyPSJhcHBhdXRoIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJhcHBhdXRodHgiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9ImNvbnRhdXRoIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJjb250YXV0aHR4IiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJjb250YXV0aDEiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9ImNvbnRhdXRoMXR4IiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJyZWNvbmZpZyIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0iYXV0b2NvbW1pdCIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0iamRiY2ptc2F1dGgiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9Im5vcGFzc3dkZm9yZGIiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9ImFwcGF1dGgiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9ImFwcGF1dGh0eCIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0iY29udGF1dGgiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9ImNvbnRhdXRodHgiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9ImNvbnRhdXRoMSIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0iY29udGF1dGgxdHgiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9InJlY29uZmlnIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJhdXRvY29tbWl0IiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJqZGJjam1zYXV0aCIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0ibm9wYXNzd2Rmb3JkYiIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9InR4cGFzc3Rocm91Z2giIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxhbnQgZGlyPSJ0eGFmdGVybm9udHgiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxhbnQgZGlyPSJ0eGFmdGVybm9udHhqbmRpIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJub3R4b3BzIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJub25hY2MiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9Imxhenlhc3NvYyIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0ibWFya2Nvbm5lY3Rpb25hc2JhZC5sb2NhbCIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0ibWFya2Nvbm5lY3Rpb25hc2JhZC54YSIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0ic3RhdGVtZW50d3JhcHBlciIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0ibWF4Y29ubmVjdGlvbnVzYWdlIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJzd2l0Y2hvZmZBQ0Njb25ucG9vbGluZyIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0ibXVsdGlwbGV1c2VyY3JlZGVudGlhbHMiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9Im5vdHhvcHMiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9Im5vbmFjYyIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0ibGF6eWFzc29jIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJtYXJrY29ubmVjdGlvbmFzYmFkLmxvY2FsIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJtYXJrY29ubmVjdGlvbmFzYmFkLnhhIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJzdGF0ZW1lbnR3cmFwcGVyIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJtYXhjb25uZWN0aW9udXNhZ2UiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9InN3aXRjaG9mZkFDQ2Nvbm5wb29saW5nIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJtdWx0aXBsZXVzZXJjcmVkZW50aWFscyIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9Im11bHRpcGxlY2xvc2Vjb25uZWN0aW9uIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJzdGF0ZW1lbnR0aW1lb3V0IiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJjb252YWwiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9ImNvbnZhbCIgdGFyZ2V0PSJhbGwtYXNzb2Mtd2l0aC10aHJlYWQiLz4KLQk8YW50IGRpcj0iY29ubmxlYWt0cmFjaW5nIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJjb25uY3JlYXRpb25yZXRyeSIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0idmFsaWRhdGVhdG1vc3RvbmNlcGVyaW9kIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJjb25uc2hhcmluZyIgdGFyZ2V0PSJub254YSIvPgotCTxhbnQgZGlyPSJjb25uc2hhcmluZy9ub254YSIgdGFyZ2V0PSJhbGwtYXNzb2Mtd2l0aC10aHJlYWQiLz4KLQk8YW50IGRpcj0iY3BkcyIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0idHhpc29sYXRpb24iIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9InN0bXRDYWNoaW5nX2hpdF9taXNzIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJwb29saW5nIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJkbW1jZiIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0iZG1tY2YubWFya2Nvbm5lY3Rpb25hc2JhZC54YSIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0iZG1tY2YuYXBwY2xpZW50IiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJzdGF0ZW1lbnR0aW1lb3V0IiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJjb252YWwiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9ImNvbnZhbCIgdGFyZ2V0PSJhbGwtYXNzb2Mtd2l0aC10aHJlYWQiLz4KKyAgICA8YW50IGRpcj0iY29ubmxlYWt0cmFjaW5nIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJjb25uY3JlYXRpb25yZXRyeSIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0idmFsaWRhdGVhdG1vc3RvbmNlcGVyaW9kIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJjb25uc2hhcmluZyIgdGFyZ2V0PSJub254YSIvPgorICAgIDxhbnQgZGlyPSJjb25uc2hhcmluZy9ub254YSIgdGFyZ2V0PSJhbGwtYXNzb2Mtd2l0aC10aHJlYWQiLz4KKyAgICA8YW50IGRpcj0iY3BkcyIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0idHhpc29sYXRpb24iIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9InN0bXRDYWNoaW5nX2hpdF9taXNzIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJwb29saW5nIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJkbW1jZiIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0iZG1tY2YubWFya2Nvbm5lY3Rpb25hc2JhZC54YSIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0iZG1tY2YuYXBwY2xpZW50IiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0idHJhY2luZ3NxbCIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0iZGF0YXNvdXJjZTQwIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJjdXN0b20tdmFsaWRhdGlvbiIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0iY3VzdG9tLXZhbGlkYXRpb24tMSIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0iZmx1c2hjb25uZWN0aW9ucG9vbCIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0iY29ubmxlYWtyZWNsYWltbm90aWZ5IiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJzdG10Q2FjaGluZ19oaXRfbWlzcy5tb25pdG9yaW5nIiB0YXJnZXQ9ImFsbCIvPgotCTwhLS1hbnQgZGlyPSJ0cmFuc3BhcmVudC1wb29sLXJlY29uZmlnIiB0YXJnZXQ9ImFsbCIvLS0+Ci0JPCEtLWFudCBkaXI9InRyYW5zcGFyZW50LXBvb2wtcmVjb25maWctcmVzb3VyY2VzLXhtbCIgdGFyZ2V0PSJhbGwiLy0tPgotCTwhLS1hbnQgZGlyPSJzcWx0cmFjZW1vbml0b3JpbmciIHRhcmdldD0iYWxsIi8tLT4KLQk8IS0tYW50IGRpcj0ic3RhdGVtZW50bGVha2RldGVjdGlvbiIgdGFyZ2V0PSJhbGwiLy0tPgotCTwhLS1hbnQgZGlyPSJhcHBiYXNlZE1vbml0b3JpbmciIHRhcmdldD0iYWxsIi8tLT4KLQk8YW50IGRpcj0ianBhLWRzZCIgdGFyZ2V0PSJhbGwiIC8+Ci0JPGFudCBkaXI9ImpwYS1kc2QiIHRhcmdldD0iYWxsLWFwcGNsaWVudC1leHBvc2VkLWRzZCIvPgotCTxhbnQgZGlyPSJzdG10Q2FjaGluZ19oaXRfbWlzcy5maXhlZCIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0iZGF0YXNvdXJjZTQwIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJjdXN0b20tdmFsaWRhdGlvbiIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0iY3VzdG9tLXZhbGlkYXRpb24tMSIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0iZmx1c2hjb25uZWN0aW9ucG9vbCIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0iY29ubmxlYWtyZWNsYWltbm90aWZ5IiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJzdG10Q2FjaGluZ19oaXRfbWlzcy5tb25pdG9yaW5nIiB0YXJnZXQ9ImFsbCIvPgorICAgIDwhLS1hbnQgZGlyPSJ0cmFuc3BhcmVudC1wb29sLXJlY29uZmlnIiB0YXJnZXQ9ImFsbCIvLS0+CisgICAgPCEtLWFudCBkaXI9InRyYW5zcGFyZW50LXBvb2wtcmVjb25maWctcmVzb3VyY2VzLXhtbCIgdGFyZ2V0PSJhbGwiLy0tPgorICAgIDwhLS1hbnQgZGlyPSJzcWx0cmFjZW1vbml0b3JpbmciIHRhcmdldD0iYWxsIi8tLT4KKyAgICA8IS0tYW50IGRpcj0ic3RhdGVtZW50bGVha2RldGVjdGlvbiIgdGFyZ2V0PSJhbGwiLy0tPgorICAgIDwhLS1hbnQgZGlyPSJhcHBiYXNlZE1vbml0b3JpbmciIHRhcmdldD0iYWxsIi8tLT4KKyAgICA8YW50IGRpcj0ianBhLWRzZCIgdGFyZ2V0PSJhbGwiIC8+CisgICAgPGFudCBkaXI9ImpwYS1kc2QiIHRhcmdldD0iYWxsLWFwcGNsaWVudC1leHBvc2VkLWRzZCIvPgorICAgIDxhbnQgZGlyPSJzdG10Q2FjaGluZ19oaXRfbWlzcy5maXhlZCIgdGFyZ2V0PSJhbGwiLz4KIAotCTwhLS08YW50Y2FsbCB0YXJnZXQ9ImFsbC1vcmFjbGUiLz4tLT4KKyAgICA8IS0tPGFudGNhbGwgdGFyZ2V0PSJhbGwtb3JhY2xlIi8+LS0+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImVlLWFsbCI+CkBAIC0xNzEsNDEgKzE3MSw0MSBAQAogICAgICAgICA8YW50IGRpcj0idmFsaWRhdGVhdG1vc3RvbmNlcGVyaW9kIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0iY3BkcyIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9InR4aXNvbGF0aW9uIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJzdG10Q2FjaGluZ19oaXRfbWlzcyIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0icG9vbGluZyIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0idHJhbnNwYXJlbnQtcG9vbC1yZWNvbmZpZyIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0idHJhbnNwYXJlbnQtcG9vbC1yZWNvbmZpZy1yZXNvdXJjZXMteG1sIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJqcGEtZHNkIiB0YXJnZXQ9ImFsbCIgLz4KLQk8YW50IGRpcj0ianBhLWRzZCIgdGFyZ2V0PSJhbGwtYXBwY2xpZW50LWV4cG9zZWQtZHNkIi8+CisgICAgPGFudCBkaXI9InN0bXRDYWNoaW5nX2hpdF9taXNzIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJwb29saW5nIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJ0cmFuc3BhcmVudC1wb29sLXJlY29uZmlnIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJ0cmFuc3BhcmVudC1wb29sLXJlY29uZmlnLXJlc291cmNlcy14bWwiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9ImpwYS1kc2QiIHRhcmdldD0iYWxsIiAvPgorICAgIDxhbnQgZGlyPSJqcGEtZHNkIiB0YXJnZXQ9ImFsbC1hcHBjbGllbnQtZXhwb3NlZC1kc2QiLz4KICAgICAgICAgPHJlY29yZCBuYW1lPSJqZGJjLm91dHB1dCIgYWN0aW9uPSJzdG9wIi8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCI+Ci0JPGFudGNhbGwgdGFyZ2V0PSJqZGJjLWFsbCIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0iamRiYy1hbGwiLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYWxsLW9yYWNsZSI+Ci0JPHJlY29yZCBuYW1lPSJqZGJjLW9yYWNsZS5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiLz4KLQk8YW50IGRpcj0iY29ubnNoYXJpbmciIHRhcmdldD0ieGEiLz4KLQk8YW50IGRpcj0ic2ltcGxlb3JhZGQiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9ImRtbWNmLm5vdHhjb25uIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJub3R4Y29ubiIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0icmVjb25maWciIHRhcmdldD0idXNlcnBhc3MiLz4KLQk8YW50IGRpcj0ic2ltcGxlb3JhIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJpbml0LXNxbCIgdGFyZ2V0PSJhbGwiLz4KLQk8cmVjb3JkIG5hbWU9ImpkYmMtb3JhY2xlLm91dHB1dCIgYWN0aW9uPSJzdG9wIi8+CisgICAgPHJlY29yZCBuYW1lPSJqZGJjLW9yYWNsZS5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiLz4KKyAgICA8YW50IGRpcj0iY29ubnNoYXJpbmciIHRhcmdldD0ieGEiLz4KKyAgICA8YW50IGRpcj0ic2ltcGxlb3JhZGQiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9ImRtbWNmLm5vdHhjb25uIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJub3R4Y29ubiIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0icmVjb25maWciIHRhcmdldD0idXNlcnBhc3MiLz4KKyAgICA8YW50IGRpcj0ic2ltcGxlb3JhIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJpbml0LXNxbCIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8cmVjb3JkIG5hbWU9ImpkYmMtb3JhY2xlLm91dHB1dCIgYWN0aW9uPSJzdG9wIi8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImFsbC13aXRoLXNlY3VyaXR5LW1hbmFnZXIiPgotCTxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWp2bS1vcHRpb25zIj4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qdm0tb3B0aW9ucyI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3B0aW9uIiB2YWx1ZT0iLURqYXZhLnNlY3VyaXR5Lm1hbmFnZXIiLz4KICAgICAgICAgPC9hbnRjYWxsPgotCTxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXIiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9ImpkYmMtYWxsLXNlY3VyaXR5Ii8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtanZtLW9wdGlvbnMiPgorICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXIiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImpkYmMtYWxsLXNlY3VyaXR5Ii8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtanZtLW9wdGlvbnMiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wdGlvbiIgdmFsdWU9Ii1EamF2YS5zZWN1cml0eS5tYW5hZ2VyIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLQk8YW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQtc2VydmVyIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXNlcnZlciIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJhcHBhdXRoIj4KQEAgLTMzMyw3ICszMzMsNyBAQAogICAgICAgICA8YW50IGRpcj0ibWF4Y29ubmVjdGlvbnVzYWdlIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8cmVjb3JkIG5hbWU9Im1heGNvbm5lY3Rpb251c2FnZS5vdXRwdXQiIGFjdGlvbj0ic3RvcCIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0ic3RhdGVtZW50d3JhcHBlciI+CiAgICAgICAgIDxyZWNvcmQgbmFtZT0ic3RhdGVtZW50d3JhcHBlci5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiLz4KICAgICAgICAgPGFudCBkaXI9InN0YXRlbWVudHdyYXBwZXIiIHRhcmdldD0iYWxsIi8+CkBAIC0zODMsNzkgKzM4Myw3OSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJzdG10Q2FjaGluZ19oaXRfbWlzcyI+Ci0JPHJlY29yZCBuYW1lPSJzdG10Q2FjaGluZ19oaXRfbWlzcy5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiLz4KLQk8YW50IGRpcj0ic3RtdENhY2hpbmdfaGl0X21pc3MiIHRhcmdldD0iYWxsIi8+Ci0JPHJlY29yZCBuYW1lPSJzdG10Q2FjaGluZ19oaXRfbWlzcy5vdXRwdXQiIGFjdGlvbj0ic3RvcCIvPgorICAgIDxyZWNvcmQgbmFtZT0ic3RtdENhY2hpbmdfaGl0X21pc3Mub3V0cHV0IiBhY3Rpb249InN0YXJ0Ii8+CisgICAgPGFudCBkaXI9InN0bXRDYWNoaW5nX2hpdF9taXNzIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxyZWNvcmQgbmFtZT0ic3RtdENhY2hpbmdfaGl0X21pc3Mub3V0cHV0IiBhY3Rpb249InN0b3AiLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icG9vbGluZyI+Ci0JPHJlY29yZCBuYW1lPSJwb29saW5nLm91dHB1dCIgYWN0aW9uPSJzdGFydCIvPgotCTxhbnQgZGlyPSJwb29saW5nIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxyZWNvcmQgbmFtZT0icG9vbGluZy5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiLz4KKyAgICA8YW50IGRpcj0icG9vbGluZyIgdGFyZ2V0PSJhbGwiLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZG1tY2YiPgotCTxyZWNvcmQgbmFtZT0iZG1tY2Yub3V0cHV0IiBhY3Rpb249InN0YXJ0Ii8+Ci0JPGFudCBkaXI9ImRtbWNmIiB0YXJnZXQ9ImFsbCIvPgotCTxyZWNvcmQgbmFtZT0iZG1tY2Yub3V0cHV0IiBhY3Rpb249InN0b3AiLz4KKyAgICA8cmVjb3JkIG5hbWU9ImRtbWNmLm91dHB1dCIgYWN0aW9uPSJzdGFydCIvPgorICAgIDxhbnQgZGlyPSJkbW1jZiIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8cmVjb3JkIG5hbWU9ImRtbWNmLm91dHB1dCIgYWN0aW9uPSJzdG9wIi8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRtbWNmLmFwcGNsaWVudCI+Ci0JPHJlY29yZCBuYW1lPSJkbW1jZi5hcHBjbGllbnQub3V0cHV0IiBhY3Rpb249InN0YXJ0Ii8+Ci0JPGFudCBkaXI9ImRtbWNmLmFwcGNsaWVudCIgdGFyZ2V0PSJhbGwiLz4KLQk8cmVjb3JkIG5hbWU9ImRtbWNmLmFwcGNsaWVudC5vdXRwdXQiIGFjdGlvbj0ic3RvcCIvPgorICAgIDxyZWNvcmQgbmFtZT0iZG1tY2YuYXBwY2xpZW50Lm91dHB1dCIgYWN0aW9uPSJzdGFydCIvPgorICAgIDxhbnQgZGlyPSJkbW1jZi5hcHBjbGllbnQiIHRhcmdldD0iYWxsIi8+CisgICAgPHJlY29yZCBuYW1lPSJkbW1jZi5hcHBjbGllbnQub3V0cHV0IiBhY3Rpb249InN0b3AiLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idHJhY2luZ3NxbCI+Ci0JPHJlY29yZCBuYW1lPSJ0cmFjaW5nc3FsLm91dHB1dCIgYWN0aW9uPSJzdGFydCIvPgotCTxhbnQgZGlyPSJ0cmFjaW5nc3FsIiB0YXJnZXQ9ImFsbCIvPgotCTxyZWNvcmQgbmFtZT0idHJhY2luZ3NxbC5vdXRwdXQiIGFjdGlvbj0ic3RvcCIvPgorICAgIDxyZWNvcmQgbmFtZT0idHJhY2luZ3NxbC5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiLz4KKyAgICA8YW50IGRpcj0idHJhY2luZ3NxbCIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8cmVjb3JkIG5hbWU9InRyYWNpbmdzcWwub3V0cHV0IiBhY3Rpb249InN0b3AiLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGF0YXNvdXJjZTQwIj4KLQk8cmVjb3JkIG5hbWU9ImRhdGFzb3VyY2U0MC5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiLz4KLQk8YW50IGRpcj0iZGF0YXNvdXJjZTQwIiB0YXJnZXQ9ImFsbCIvPgotCTxyZWNvcmQgbmFtZT0iZGF0YXNvdXJjZTQwLm91dHB1dCIgYWN0aW9uPSJzdG9wIi8+CisgICAgPHJlY29yZCBuYW1lPSJkYXRhc291cmNlNDAub3V0cHV0IiBhY3Rpb249InN0YXJ0Ii8+CisgICAgPGFudCBkaXI9ImRhdGFzb3VyY2U0MCIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8cmVjb3JkIG5hbWU9ImRhdGFzb3VyY2U0MC5vdXRwdXQiIGFjdGlvbj0ic3RvcCIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJmbHVzaGNvbm5lY3Rpb25wb29sIj4KLQk8cmVjb3JkIG5hbWU9ImZsdXNoY29ubmVjdGlvbnBvb2wub3V0cHV0IiBhY3Rpb249InN0YXJ0Ii8+Ci0JPGFudCBkaXI9ImZsdXNoY29ubmVjdGlvbnBvb2wiIHRhcmdldD0iYWxsIi8+Ci0JPHJlY29yZCBuYW1lPSJmbHVzaGNvbm5lY3Rpb25wb29sLm91dHB1dCIgYWN0aW9uPSJzdG9wIi8+CisgICAgPHJlY29yZCBuYW1lPSJmbHVzaGNvbm5lY3Rpb25wb29sLm91dHB1dCIgYWN0aW9uPSJzdGFydCIvPgorICAgIDxhbnQgZGlyPSJmbHVzaGNvbm5lY3Rpb25wb29sIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxyZWNvcmQgbmFtZT0iZmx1c2hjb25uZWN0aW9ucG9vbC5vdXRwdXQiIGFjdGlvbj0ic3RvcCIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJpbml0LXNxbCI+Ci0JPHJlY29yZCBuYW1lPSJpbml0LXNxbC5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiLz4KLQk8YW50IGRpcj0iaW5pdC1zcWwiIHRhcmdldD0iYWxsIi8+Ci0JPHJlY29yZCBuYW1lPSJpbml0LXNxbC5vdXRwdXQiIGFjdGlvbj0ic3RvcCIvPgorICAgIDxyZWNvcmQgbmFtZT0iaW5pdC1zcWwub3V0cHV0IiBhY3Rpb249InN0YXJ0Ii8+CisgICAgPGFudCBkaXI9ImluaXQtc3FsIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxyZWNvcmQgbmFtZT0iaW5pdC1zcWwub3V0cHV0IiBhY3Rpb249InN0b3AiLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY29ubmxlYWtyZWNsYWltbm90aWZ5Ij4KLQk8cmVjb3JkIG5hbWU9ImNvbm5sZWFrcmVjbGFpbW5vdGlmeS5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiLz4KLQk8YW50IGRpcj0iY29ubmxlYWtyZWNsYWltbm90aWZ5IiB0YXJnZXQ9ImFsbCIvPgotCTxyZWNvcmQgbmFtZT0iY29ubmxlYWtyZWNsYWltbm90aWZ5Lm91dHB1dCIgYWN0aW9uPSJzdG9wIi8+CisgICAgPHJlY29yZCBuYW1lPSJjb25ubGVha3JlY2xhaW1ub3RpZnkub3V0cHV0IiBhY3Rpb249InN0YXJ0Ii8+CisgICAgPGFudCBkaXI9ImNvbm5sZWFrcmVjbGFpbW5vdGlmeSIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8cmVjb3JkIG5hbWU9ImNvbm5sZWFrcmVjbGFpbW5vdGlmeS5vdXRwdXQiIGFjdGlvbj0ic3RvcCIvPgogICAgIDwvdGFyZ2V0PgotICAKKwogICAgIDx0YXJnZXQgbmFtZT0idHJhbnNwYXJlbnQtcG9vbC1yZWNvbmZpZyI+Ci0JPHJlY29yZCBuYW1lPSJ0cmFuc3BhcmVudC1wb29sLXJlY29uZmlnLm91dHB1dCIgYWN0aW9uPSJzdGFydCIvPgotCTxhbnQgZGlyPSJ0cmFuc3BhcmVudC1wb29sLXJlY29uZmlnIiB0YXJnZXQ9ImFsbCIvPgotCTxyZWNvcmQgbmFtZT0idHJhbnNwYXJlbnQtcG9vbC1yZWNvbmZpZy5vdXRwdXQiIGFjdGlvbj0ic3RvcCIvPgorICAgIDxyZWNvcmQgbmFtZT0idHJhbnNwYXJlbnQtcG9vbC1yZWNvbmZpZy5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiLz4KKyAgICA8YW50IGRpcj0idHJhbnNwYXJlbnQtcG9vbC1yZWNvbmZpZyIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8cmVjb3JkIG5hbWU9InRyYW5zcGFyZW50LXBvb2wtcmVjb25maWcub3V0cHV0IiBhY3Rpb249InN0b3AiLz4KICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IG5hbWU9InRyYW5zcGFyZW50LXBvb2wtcmVjb25maWctcmVzb3VyY2VzLXhtbCI+Ci0JPHJlY29yZCBuYW1lPSJ0cmFuc3BhcmVudC1wb29sLXJlY29uZmlnLXJlc291cmNlcy14bWwub3V0cHV0IiBhY3Rpb249InN0YXJ0Ii8+Ci0JPGFudCBkaXI9InRyYW5zcGFyZW50LXBvb2wtcmVjb25maWctcmVzb3VyY2VzLXhtbCIgdGFyZ2V0PSJhbGwiLz4KLQk8cmVjb3JkIG5hbWU9InRyYW5zcGFyZW50LXBvb2wtcmVjb25maWctcmVzb3VyY2VzLXhtbC5vdXRwdXQiIGFjdGlvbj0ic3RvcCIvPgorICAgIDxyZWNvcmQgbmFtZT0idHJhbnNwYXJlbnQtcG9vbC1yZWNvbmZpZy1yZXNvdXJjZXMteG1sLm91dHB1dCIgYWN0aW9uPSJzdGFydCIvPgorICAgIDxhbnQgZGlyPSJ0cmFuc3BhcmVudC1wb29sLXJlY29uZmlnLXJlc291cmNlcy14bWwiIHRhcmdldD0iYWxsIi8+CisgICAgPHJlY29yZCBuYW1lPSJ0cmFuc3BhcmVudC1wb29sLXJlY29uZmlnLXJlc291cmNlcy14bWwub3V0cHV0IiBhY3Rpb249InN0b3AiLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0ianBhLWRzZCI+Ci0JPHJlY29yZCBuYW1lPSJqcGEtZHNkLm91dHB1dCIgYWN0aW9uPSJzdGFydCIvPgotCTxhbnQgZGlyPSJqcGEtZHNkIiB0YXJnZXQ9ImFsbCIvPgotCTxyZWNvcmQgbmFtZT0ianBhLWRzZC5vdXRwdXQiIGFjdGlvbj0ic3RvcCIvPgorICAgIDxyZWNvcmQgbmFtZT0ianBhLWRzZC5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiLz4KKyAgICA8YW50IGRpcj0ianBhLWRzZCIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8cmVjb3JkIG5hbWU9ImpwYS1kc2Qub3V0cHV0IiBhY3Rpb249InN0b3AiLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0ianBhLWRzZC5hcHBjbGllbnQtZXhwb3NlZC1kc2QiPgotCTxyZWNvcmQgbmFtZT0ianBhLWRzZC5hcHBjbGllbnQtZXhwb3NlZC1kc2Qub3V0cHV0IiBhY3Rpb249InN0YXJ0Ii8+Ci0JPGFudCBkaXI9ImpwYS1kc2QiIHRhcmdldD0iYWxsLWFwcGNsaWVudC1leHBvc2VkLWRzZCIvPgotCTxyZWNvcmQgbmFtZT0ianBhLWRzZC5hcHBjbGllbnQtZXhwb3NlZC1kc2Qub3V0cHV0IiBhY3Rpb249InN0b3AiLz4KKyAgICA8cmVjb3JkIG5hbWU9ImpwYS1kc2QuYXBwY2xpZW50LWV4cG9zZWQtZHNkLm91dHB1dCIgYWN0aW9uPSJzdGFydCIvPgorICAgIDxhbnQgZGlyPSJqcGEtZHNkIiB0YXJnZXQ9ImFsbC1hcHBjbGllbnQtZXhwb3NlZC1kc2QiLz4KKyAgICA8cmVjb3JkIG5hbWU9ImpwYS1kc2QuYXBwY2xpZW50LWV4cG9zZWQtZHNkLm91dHB1dCIgYWN0aW9uPSJzdG9wIi8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY21wc2ltcGxlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NtcHNpbXBsZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDYwYzcyZDEuLjllYWUwN2UgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY21wc2ltcGxlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jbXBzaW1wbGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjAgKzE1LDIwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqZGJjLWNtcHNpbXBsZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tY21wLW1hcHBpbmdzLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWNtcC1tYXBwaW5ncy54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImRic2NoZW1hIiB2YWx1ZT0ic3FsL2NtcHNpbXBsZS5kYnNjaGVtYSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jbXBzaW1wbGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jbXBzaW1wbGUvYnVpbGQueG1sCmluZGV4IDA0OWZlZmYuLjNlMTU0MzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY21wc2ltcGxlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NtcHNpbXBsZS9idWlsZC54bWwKQEAgLTQxLDcgKzQxLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNTUsMzkgKzU1LDM5IEBACiAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1qYXIiLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXBwY2xpZW50LWphci1jb21tb24iPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAotCQl2YWx1ZT0iKiovQmxvYlRlc3QuY2xhc3MsICoqL0Jsb2JUZXN0SG9tZS5jbGFzcywqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgorICAgICAgICB2YWx1ZT0iKiovQmxvYlRlc3QuY2xhc3MsICoqL0Jsb2JUZXN0SG9tZS5jbGFzcywqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1lYXIiLz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InBhY2thZ2UtamFyIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1lamJqYXItY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovKi5jbGFzcywqKi8qZGJzY2hlbWEiLz4KICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYi5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIuamFyIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlLWVhciI+CiAgICAgICA8ZGVsZXRlIGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LmVhciIvPgogICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+Ci0gICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPiAgICAKKyAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CiAgICAgICA8ZWFyIGVhcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIgYXBweG1sPSIke2FwcGxpY2F0aW9uLnhtbH0iPgogICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSI+CiAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KICAgICAgICAgPC9maWxlc2V0PgogICAgICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LkFQU19IT01FfS9saWIiIGluY2x1ZGVzPSJyZXBvcnRlci5qYXIiLz4KLSAgICAgIDwvZWFyPiAgICAgICAgCisgICAgICA8L2Vhcj4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgCisKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgIAorCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qZGJjLWNvbW1vbiIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtcGVyc2lzdGVuY2UtcmVzb3VyY2UtY29tbW9uIi8+CiAKQEAgLTk2LDE3ICs5NiwxNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1bnNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CkBAIC0xMTQsMTUgKzExNCwxNSBAQAogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtcGVyc2lzdGVuY2UtcmVzb3VyY2UtY29tbW9uIi8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWpkYmMtY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9InNxbC1jcmVhdGUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKLSAgICA8dGFyZ2V0IG5hbWU9InNxbC1kcm9wIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+ICAgCisgICAgPHRhcmdldCBuYW1lPSJzcWwtZHJvcCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX3BvaW50YmFzZS5zcWwiLz4KICAgICAgICA8L2FudGNhbGw+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NtcHNpbXBsZS9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NtcHNpbXBsZS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggZGQxMTY2Yi4uZmRmYTA0MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jbXBzaW1wbGUvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY21wc2ltcGxlL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjQsMTEgKzI0LDExIEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci5TaW1wbGVSZXBvcnRlckFkYXB0ZXI7CiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotICAgICAgIAotIAlTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKLQlTdHJpbmcgdGVzdFN1aXRlID0gImNtcHNpbXBsZSI7CisKKyAgICAgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCk7CisgICAgU3RyaW5nIHRlc3RTdWl0ZSA9ICJjbXBzaW1wbGUiOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBPYmplY3Qgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL0Jsb2JUZXN0QmVhbiIpOwpAQCAtMzksNyArMzksNyBAQAogCiAgICAgICAgICAgICBCbG9iVGVzdCBiZWFuID0gYmhvbWUuY3JlYXRlKG5ldyBJbnRlZ2VyKDEwMCksICJGT08iKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRlZDogIiArYmVhbi5nZXRQcmltYXJ5S2V5KCkpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdGluZyBuZXcuLi4iKTsKICAgICAgICAgICAgIGJlYW4gPSBiaG9tZS5maW5kQnlQcmltYXJ5S2V5KG5ldyBJbnRlZ2VyKDEwMCkpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKG5ldyBTdHJpbmcoYmVhbi5nZXROYW1lKCkpKTsKQEAgLTQ4LDE2ICs0OCwxNiBAQAogICAgICAgICAgICAgYmVhbiA9IGJob21lLmZpbmRCeVByaW1hcnlLZXkobmV3IEludGVnZXIoMSkpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKG5ldyBTdHJpbmcoYmVhbi5nZXROYW1lKCkpKTsKIAotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIHRlc3QgOiAiLCBzdGF0LlBBU1MpOworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIHRlc3QgOiAiLCBzdGF0LlBBU1MpOwogCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJDYXVnaHQgYW4gZXhjZXB0aW9uOiIpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICAidGVzdCA6ICIsIHN0YXQuRkFJTCk7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICAidGVzdCA6ICIsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKIAogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jbXBzaW1wbGUvZWpiL0Jsb2JUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NtcHNpbXBsZS9lamIvQmxvYlRlc3QuamF2YQppbmRleCAzZTdlMzNiLi5kMDIzNjQ0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NtcHNpbXBsZS9lamIvQmxvYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NtcHNpbXBsZS9lamIvQmxvYlRlc3QuamF2YQpAQCAtMjQsOCArMjQsOCBAQAogICovCiAKIHB1YmxpYyBpbnRlcmZhY2UgQmxvYlRlc3QgZXh0ZW5kcyBqYWthcnRhLmVqYi5FSkJPYmplY3QgewotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKLSAgICAKKwogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NtcHNpbXBsZS9lamIvQmxvYlRlc3RCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NtcHNpbXBsZS9lamIvQmxvYlRlc3RCZWFuLmphdmEKaW5kZXggNzgyMmE0YS4uMzdlNWEzNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jbXBzaW1wbGUvZWpiL0Jsb2JUZXN0QmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY21wc2ltcGxlL2VqYi9CbG9iVGVzdEJlYW4uamF2YQpAQCAtMjUsNzUgKzI1LDc1IEBACiAKIAogcHVibGljIGFic3RyYWN0IGNsYXNzIEJsb2JUZXN0QmVhbiBpbXBsZW1lbnRzIGpha2FydGEuZWpiLkVudGl0eUJlYW4gewotICAgIAorCiAgICAgcHJpdmF0ZSBqYWthcnRhLmVqYi5FbnRpdHlDb250ZXh0IGNvbnRleHQ7Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiNzZXRFbnRpdHlDb250ZXh0KGpha2FydGEuZWpiLkVudGl0eUNvbnRleHQpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0RW50aXR5Q29udGV4dChqYWthcnRhLmVqYi5FbnRpdHlDb250ZXh0IGFDb250ZXh0KSB7CiAgICAgICAgIGNvbnRleHQ9YUNvbnRleHQ7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiQWN0aXZhdGUoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgewotICAgICAgICAKKwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI2VqYlBhc3NpdmF0ZSgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkgewotICAgICAgICAKKwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI2VqYlJlbW92ZSgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRlYnVnOiBCbG9iVGVzdCBlamJSZW1vdmUiKTsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuRW50aXR5QmVhbiN1bnNldEVudGl0eUNvbnRleHQoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHVuc2V0RW50aXR5Q29udGV4dCgpIHsKICAgICAgICAgY29udGV4dD1udWxsOwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5FbnRpdHlCZWFuI2VqYkxvYWQoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLkVudGl0eUJlYW4jZWpiU3RvcmUoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYlN0b3JlKCkgewotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBhYnN0cmFjdCBJbnRlZ2VyIGdldElkKCk7CiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0SWQoSW50ZWdlciBpZCk7CiAKICAgICBwdWJsaWMgYWJzdHJhY3QgamF2YS5sYW5nLlN0cmluZyBnZXROYW1lKCk7CiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0TmFtZShqYXZhLmxhbmcuU3RyaW5nIG5hbWUpOwotICAgIAorCiAgICAgLyoKICAgICBwdWJsaWMgYWJzdHJhY3QgYnl0ZVtdIGdldEJsYigpOwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldEJsYihieXRlW10gYik7Ci0gICAgCisKIAogICAgIHB1YmxpYyBqYXZhLmxhbmcuSW50ZWdlciBlamJDcmVhdGUoSW50ZWdlciBpZCwgamF2YS5sYW5nLlN0cmluZyBuYW1lLCBieXRlW10gYikgdGhyb3dzIGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbiB7CiAgICAgICAgIHNldElkKGlkKTsKQEAgLTEwMiwyMSArMTAyLDIxIEBACiAKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotICAgICovICAKLSAgICBwdWJsaWMgamF2YS5sYW5nLkludGVnZXIgZWpiQ3JlYXRlKEludGVnZXIgaWQsIGphdmEubGFuZy5TdHJpbmcgbmFtZSkgCi0gICAgICAgIHRocm93cyBqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb24gCisgICAgKi8KKyAgICBwdWJsaWMgamF2YS5sYW5nLkludGVnZXIgZWpiQ3JlYXRlKEludGVnZXIgaWQsIGphdmEubGFuZy5TdHJpbmcgbmFtZSkKKyAgICAgICAgdGhyb3dzIGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgc2V0SWQoaWQpOwogICAgICAgICBzZXROYW1lKG5hbWUpOwogCiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KLSAgCisKICAgICAvKgogICAgIHB1YmxpYyB2b2lkIGVqYlBvc3RDcmVhdGUoSW50ZWdlciBpZCwgamF2YS5sYW5nLlN0cmluZyBuYW1lLCBieXRlW10gYikgdGhyb3dzIGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbiB7CiAgICAgfQogICAgICovCi0gICAgCi0gICAgcHVibGljIHZvaWQgZWpiUG9zdENyZWF0ZShJbnRlZ2VyIGlkLCBqYXZhLmxhbmcuU3RyaW5nIG5hbWUgKSAKKworICAgIHB1YmxpYyB2b2lkIGVqYlBvc3RDcmVhdGUoSW50ZWdlciBpZCwgamF2YS5sYW5nLlN0cmluZyBuYW1lICkKICAgICAgICAgdGhyb3dzIGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbiB7fQotfQkKK30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY21wc2ltcGxlL2VqYi9CbG9iVGVzdEhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY21wc2ltcGxlL2VqYi9CbG9iVGVzdEhvbWUuamF2YQppbmRleCA1NjJmMWY1Li4wYzZkNDZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NtcHNpbXBsZS9lamIvQmxvYlRlc3RIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jbXBzaW1wbGUvZWpiL0Jsb2JUZXN0SG9tZS5qYXZhCkBAIC0yNCwxNCArMjQsMTQgQEAKICAqLwogCiBwdWJsaWMgaW50ZXJmYWNlIEJsb2JUZXN0SG9tZSBleHRlbmRzIGpha2FydGEuZWpiLkVKQkhvbWUgewotICAgIC8qICAgIAorICAgIC8qCiAgICAgcHVibGljICBCbG9iVGVzdCBjcmVhdGUoSW50ZWdlciBpLCBqYXZhLmxhbmcuU3RyaW5nIG5hbWUsIGJ5dGVbXSBiKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uLCBqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgIEJsb2JUZXN0IGZpbmRCeVByaW1hcnlLZXkgKEludGVnZXIga2V5KSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uLCBqYWthcnRhLmVqYi5GaW5kZXJFeGNlcHRpb247CiAgICAgKi8KLSAgICBwdWJsaWMgIEJsb2JUZXN0IGNyZWF0ZShJbnRlZ2VyIGksIGphdmEubGFuZy5TdHJpbmcgbmFtZSkgCisgICAgcHVibGljICBCbG9iVGVzdCBjcmVhdGUoSW50ZWdlciBpLCBqYXZhLmxhbmcuU3RyaW5nIG5hbWUpCiAgICAgICAgIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24sIGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbjsKLSAgICAKLSAgICBwdWJsaWMgIEJsb2JUZXN0IGZpbmRCeVByaW1hcnlLZXkgKEludGVnZXIga2V5KSAKKworICAgIHB1YmxpYyAgQmxvYlRlc3QgZmluZEJ5UHJpbWFyeUtleSAoSW50ZWdlciBrZXkpCiAgICAgICAgIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24sIGpha2FydGEuZWpiLkZpbmRlckV4Y2VwdGlvbjsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY21wc2ltcGxlL3NxbC9ibG9iX29yYS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NtcHNpbXBsZS9zcWwvYmxvYl9vcmEuc3FsCmluZGV4IDU0MTA3MjAuLjVmMjJhMzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY21wc2ltcGxlL3NxbC9ibG9iX29yYS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jbXBzaW1wbGUvc3FsL2Jsb2Jfb3JhLnNxbApAQCAtMSw4ICsxLDggQEAKIGRyb3AgdGFibGUgbXlibG9iOwogCiBjcmVhdGUgdGFibGUgbXlibG9iICgKLQlpZCAJaW50IHByaW1hcnkga2V5LAotCW5hbWUJdmFyY2hhcjIoMTAwKSwKKyAgICBpZCAgICAgaW50IHByaW1hcnkga2V5LAorICAgIG5hbWUgICAgdmFyY2hhcjIoMTAwKSwKICk7CiAKIGluc2VydCBpbnRvIG15YmxvYiB2YWx1ZXMgKDEsICdBQUEnKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY21wc2ltcGxlL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY21wc2ltcGxlL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCA3ZmMxNzQxLi42NzNjMDk2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NtcHNpbXBsZS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jbXBzaW1wbGUvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDggKzEsOCBAQAogZHJvcCB0YWJsZSBteWJsb2I7CiAKIGNyZWF0ZSB0YWJsZSBteWJsb2IgKAotCWlkIAlpbnRlZ2VyIE5PVCBOVUxMLAotCW5hbWUJdmFyY2hhcigxMDApCisgICAgaWQgICAgIGludGVnZXIgTk9UIE5VTEwsCisgICAgbmFtZSAgICB2YXJjaGFyKDEwMCkKICk7CiAKIGluc2VydCBpbnRvIG15YmxvYiB2YWx1ZXMgKDEsICdBQUEnKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29uZmlnL2VlLWNvbW1vbi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbmZpZy9lZS1jb21tb24ueG1sCmluZGV4IDZlNWQ3MzYuLmM4NzBiZGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29uZmlnL2VlLWNvbW1vbi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25maWcvZWUtY29tbW9uLnhtbApAQCAtNzAsMTEgKzcwLDExIEBACiAKIDwhLS0gY2xlYW4gLS0+CiA8dGFyZ2V0IG5hbWU9ImNsZWFuLWNsYXNzZXMtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KKyAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0iY2xlYW4tamFycy1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQk8ZGVsZXRlIGRpcj0iJHthc3NlbWJsZS5kaXJ9IiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KKyAgICA8ZGVsZXRlIGRpcj0iJHthc3NlbWJsZS5kaXJ9IiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImNsZWFuLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtODYsNyArODYsNyBAQAogICAgIDxlY2hvIG1lc3NhZ2U9ImNsZWFuaW5nIGFsbCAqLm91dHB1dCwgKi5sb2cgYW5kIFJlcFJ1bkNvbmYudHh0IGZpbGVzLi4uIi8+CiAgICAgPGRlbGV0ZSBkaXI9IiR7ZW52LkFQU19IT01FfS9idWlsZCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgICAgPGRlbGV0ZSBmYWlsb25lcnJvcj0iZmFsc2UiPgotICAgICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LkFQU19IT01FfSIgCisgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuQVBTX0hPTUV9IgogICAgICAgICAgICAgaW5jbHVkZXM9IioqLypyZXN1bHRzKi4qbWwsCiAgICAgICAgICAgICAqKi8qLm91dHB1dCwKICAgICAgICAgICAgICoqLyoubG9nLApAQCAtMTAzLDggKzEwMyw4IEBACiAKIDwhLS0gIGNvbXBpbGUgIC0tPgogPHRhcmdldCBuYW1lPSJjb21waWxlLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCTxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24tYXMiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uLWFzODAiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uLWFzIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbi1hczgwIi8+CiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJjb21waWxlLWNvbW1vbi1hcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iIHVubGVzcz0iQVM4MCI+CkBAIC0xMzIsMzggKzEzMiwzOCBAQAogCiA8IS0tIHdhciB0YXJnZXRzIC0tPgogPHRhcmdldCBuYW1lPSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiIgaWY9Imhhc1dlYmNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCTxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgotCTxhbnRjYWxsIHRhcmdldD0icGFja2FnZS13YXItY29tbW9uIj4KLQkJPCEtLXBhcmFtIG5hbWU9Indhci5jbGFzc2VzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLy0tPgotCQk8cGFyYW0gbmFtZT0id2FyLmZpbGUiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIi8+Ci0JPC9hbnRjYWxsPgorICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS13YXItY29tbW9uIj4KKyAgICAgICAgPCEtLXBhcmFtIG5hbWU9Indhci5jbGFzc2VzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLy0tPgorICAgICAgICA8cGFyYW0gbmFtZT0id2FyLmZpbGUiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIi8+CisgICAgPC9hbnRjYWxsPgogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0icGFja2FnZS13YXItd2l0aG91dC1zdW4ueG1sIiB1bmxlc3M9InN1bi13ZWIueG1sIj4KLQk8ZWNobyBtZXNzYWdlPSJUaGlzIHdhciBkb2VzIG5vdCBjb250YWluIHN1bi13ZWIueG1sIi8+Ci0JPGVjaG8gbWVzc2FnZT0ibXkgYnVpbGQgY2xhc3NlcyBkaXIgaXM6JHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KLQk8ZGVsZXRlIGZpbGU9IiR7d2FyLmZpbGV9Ii8+ICAKLQk8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9XRUItSU5GIi8+Ci0JPGNvcHkgZmlsZT0iJHt3ZWIueG1sfSIgCi0JCXRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vV0VCLUlORi93ZWIueG1sIi8+Ci0JPGVjaG8gbWVzc2FnZT0iQ3JlYXRpbmcgd2FyIGZpbGUgJHt3YXIuZmlsZX0iLz4KLQk8IS0tamFyIGphcmZpbGU9IiR7d2FyLmZpbGV9IiBiYXNlZGlyPSIke3dhci5jbGFzc2VzfSIgdXBkYXRlPSJ0cnVlIi0tPgotCTxqYXIgamFyZmlsZT0iJHt3YXIuZmlsZX0iIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiAKLQkJdXBkYXRlPSJ0cnVlIiBpbmNsdWRlcyA9IiR7d2ViY2xpZW50Lndhci5jbGFzc2VzfSI+Ci0JCTxmaWxlc2V0IGRpcj0iJHtiYXNlZGlyfS93ZWIiIGNhc2VzZW5zaXRpdmU9InllcyI+Ci0JCQk8aW5jbHVkZSBuYW1lPSIqLmh0bWwiLz4KLQkJCTxpbmNsdWRlIG5hbWU9IiouanNwIi8+Ci0JCQk8aW5jbHVkZSBuYW1lPSIqLmdpZiIvPgotCQkJPGluY2x1ZGUgbmFtZT0iKi5kbyIvPgotCQkJPGV4Y2x1ZGUgbmFtZT0iKiovKi5qYXZhIi8+Ci0JCTwvZmlsZXNldD4KLQkJPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgY2FzZXNlbnNpdGl2ZT0idHJ1ZSI+Ci0JCQk8aW5jbHVkZSBuYW1lPSJXRUItSU5GL3dlYi54bWwiLz4KLQkJPC9maWxlc2V0PgotCTwvamFyPiAgICAgICAKLQk8ZWNobyBtZXNzYWdlPSJjcmVhdGVkIHdhciBmaWxlICR7d2FyLmZpbGV9Ii8+Ci0JPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L1dFQi1JTkYiIGZhaWxvbmVycm9yPSJmYWxzZSIvPiAKLQk8ZWNobyBtZXNzYWdlPSJteSB3ZWJjbGllbnQgd2FyIGNsYXNzZXMgYXJlOiR7d2ViY2xpZW50Lndhci5jbGFzc2VzfSIvPgorICAgIDxlY2hvIG1lc3NhZ2U9IlRoaXMgd2FyIGRvZXMgbm90IGNvbnRhaW4gc3VuLXdlYi54bWwiLz4KKyAgICA8ZWNobyBtZXNzYWdlPSJteSBidWlsZCBjbGFzc2VzIGRpciBpczoke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgorICAgIDxkZWxldGUgZmlsZT0iJHt3YXIuZmlsZX0iLz4KKyAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9XRUItSU5GIi8+CisgICAgPGNvcHkgZmlsZT0iJHt3ZWIueG1sfSIKKyAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9XRUItSU5GL3dlYi54bWwiLz4KKyAgICA8ZWNobyBtZXNzYWdlPSJDcmVhdGluZyB3YXIgZmlsZSAke3dhci5maWxlfSIvPgorICAgIDwhLS1qYXIgamFyZmlsZT0iJHt3YXIuZmlsZX0iIGJhc2VkaXI9IiR7d2FyLmNsYXNzZXN9IiB1cGRhdGU9InRydWUiLS0+CisgICAgPGphciBqYXJmaWxlPSIke3dhci5maWxlfSIgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCisgICAgICAgIHVwZGF0ZT0idHJ1ZSIgaW5jbHVkZXMgPSIke3dlYmNsaWVudC53YXIuY2xhc3Nlc30iPgorICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YmFzZWRpcn0vd2ViIiBjYXNlc2Vuc2l0aXZlPSJ5ZXMiPgorICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi5odG1sIi8+CisgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLmpzcCIvPgorICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi5naWYiLz4KKyAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IiouZG8iLz4KKyAgICAgICAgICAgIDxleGNsdWRlIG5hbWU9IioqLyouamF2YSIvPgorICAgICAgICA8L2ZpbGVzZXQ+CisgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIGNhc2VzZW5zaXRpdmU9InRydWUiPgorICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iV0VCLUlORi93ZWIueG1sIi8+CisgICAgICAgIDwvZmlsZXNldD4KKyAgICA8L2phcj4KKyAgICA8ZWNobyBtZXNzYWdlPSJjcmVhdGVkIHdhciBmaWxlICR7d2FyLmZpbGV9Ii8+CisgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L1dFQi1JTkYiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICAgIDxlY2hvIG1lc3NhZ2U9Im15IHdlYmNsaWVudCB3YXIgY2xhc3NlcyBhcmU6JHt3ZWJjbGllbnQud2FyLmNsYXNzZXN9Ii8+CiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJwYWNrYWdlLXdhci1jb21tb24iPgpAQCAtMTcyLDU4ICsxNzIsNTggQEAKIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9InBhY2thZ2Utd2FyLXdpdGgtc3VuLnhtbCIgaWY9InN1bi13ZWIueG1sIj4KLQk8ZWNobyBtZXNzYWdlPSJteSBidWlsZCBjbGFzc2VzIGRpciBpczoke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgotCTxkZWxldGUgZmlsZT0iJHt3YXIuZmlsZX0iLz4KLQk8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAiLz4KLQk8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORiIvPgotCTxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL2NsYXNzZXMiLz4KLQk8Y29weSBmaWxlPSIke3N1bi13ZWIueG1sfSIKLQkJdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi9zdW4td2ViLnhtbCIgCi0JCWZhaWxvbmVycm9yPSJmYWxzZSIvPgotCTxjb3B5IGZpbGU9IiR7d2Vic2VydmljZXMueG1sfSIKLQkJdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi93ZWJzZXJ2aWNlcy54bWwiCi0JCWZhaWxvbmVycm9yPSJmYWxzZSIvPgotCTxjb3B5IGZpbGU9IiR7bWFwcGluZ2ZpbGUubG9jYXRpb259LyR7bWFwcGluZ2ZpbGUubmFtZX0iCi0JCXRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wLyR7bWFwcGluZ2ZpbGUubmFtZX0iCi0JCWZhaWxvbmVycm9yPSJmYWxzZSIvPgotCTxjb3B5IGZpbGU9IiR7d3NkbGZpbGUubG9jYXRpb259LyR7d3NkbGZpbGUubmFtZX0iCi0JCXRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvd3NkbC8ke3dzZGxmaWxlLm5hbWV9IgotCQlmYWlsb25lcnJvcj0iZmFsc2UiLz4KLQk8Y29weSBmaWxlPSIke3dlYi54bWx9IgotCQl0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL3dlYi54bWwiLz4KLQk8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvY2xhc3NlcyI+Ci0JCTxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iPgotCQkJPGluY2x1ZGUgbmFtZT0iJHt3YXIuY2xhc3Nlc30iLz4KLQkJPC9maWxlc2V0PgotCTwvY29weT4KLQk8ZWNobyBtZXNzYWdlPSJDcmVhdGluZyB3YXIgZmlsZSAke3dhci5maWxlfSIvPgotCTxqYXIgamFyZmlsZT0iJHt3YXIuZmlsZX0iIHVwZGF0ZT0idHJ1ZSI+Ci0JCTxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wIiBjYXNlc2Vuc2l0aXZlPSJ5ZXMiPgotCQkJPGluY2x1ZGUgbmFtZT0iKiovKmNsYXNzKiIvPgotCQk8L2ZpbGVzZXQ+Ci0JCTxmaWxlc2V0IGRpcj0iJHtiYXNlZGlyfS93ZWIiIGNhc2VzZW5zaXRpdmU9InllcyI+Ci0JCQk8aW5jbHVkZSBuYW1lPSIqKi8qLmh0bWwiLz4KLQkJCTxpbmNsdWRlIG5hbWU9IioqLyouanNwIi8+Ci0JCQk8aW5jbHVkZSBuYW1lPSIqKi8qLmdpZiIvPgotCQkJPGluY2x1ZGUgbmFtZT0iKiovKi5kbyIvPgotCQkJPGV4Y2x1ZGUgbmFtZT0iKiovKi5qYXZhLCoqLyoueG1sLCoqLyoucHJvcGVydGllcyIvPgotCQk8L2ZpbGVzZXQ+Ci0JCTxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wLyIgY2FzZXNlbnNpdGl2ZT0idHJ1ZSI+Ci0JCQk8aW5jbHVkZSBuYW1lPSJXRUItSU5GL3dlYi54bWwiLz4KLQkJCTxpbmNsdWRlIG5hbWU9IldFQi1JTkYvc3VuLXdlYi54bWwiLz4KLQkJCTxpbmNsdWRlIG5hbWU9IldFQi1JTkYvd2Vic2VydmljZXMueG1sIi8+Ci0JCQk8aW5jbHVkZSBuYW1lPSJXRUItSU5GL3dzZGwvJHt3c2RsZmlsZS5uYW1lfSIvPgotCQkJPGluY2x1ZGUgbmFtZT0iJHttYXBwaW5nZmlsZS5uYW1lfSIvPgotCQk8L2ZpbGVzZXQ+Ci0JPC9qYXI+Ci0JPGVjaG8gbWVzc2FnZT0iY3JlYXRlZCB3YXIgZmlsZSAke3dhci5maWxlfSIvPgotCTxkZWxldGUgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORiIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0JPGVjaG8gbWVzc2FnZT0ibXkgd2ViY2xpZW50IHdhciBjbGFzc2VzIGFyZToke3dlYmNsaWVudC53YXIuY2xhc3Nlc30iLz4KKyAgICA8ZWNobyBtZXNzYWdlPSJteSBidWlsZCBjbGFzc2VzIGRpciBpczoke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgorICAgIDxkZWxldGUgZmlsZT0iJHt3YXIuZmlsZX0iLz4KKyAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAiLz4KKyAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORiIvPgorICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL2NsYXNzZXMiLz4KKyAgICA8Y29weSBmaWxlPSIke3N1bi13ZWIueG1sfSIKKyAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi9zdW4td2ViLnhtbCIKKyAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CisgICAgPGNvcHkgZmlsZT0iJHt3ZWJzZXJ2aWNlcy54bWx9IgorICAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL3dlYnNlcnZpY2VzLnhtbCIKKyAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CisgICAgPGNvcHkgZmlsZT0iJHttYXBwaW5nZmlsZS5sb2NhdGlvbn0vJHttYXBwaW5nZmlsZS5uYW1lfSIKKyAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvJHttYXBwaW5nZmlsZS5uYW1lfSIKKyAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CisgICAgPGNvcHkgZmlsZT0iJHt3c2RsZmlsZS5sb2NhdGlvbn0vJHt3c2RsZmlsZS5uYW1lfSIKKyAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi93c2RsLyR7d3NkbGZpbGUubmFtZX0iCisgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICAgIDxjb3B5IGZpbGU9IiR7d2ViLnhtbH0iCisgICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvd2ViLnhtbCIvPgorICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi9jbGFzc2VzIj4KKyAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSI+CisgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIke3dhci5jbGFzc2VzfSIvPgorICAgICAgICA8L2ZpbGVzZXQ+CisgICAgPC9jb3B5PgorICAgIDxlY2hvIG1lc3NhZ2U9IkNyZWF0aW5nIHdhciBmaWxlICR7d2FyLmZpbGV9Ii8+CisgICAgPGphciBqYXJmaWxlPSIke3dhci5maWxlfSIgdXBkYXRlPSJ0cnVlIj4KKyAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAiIGNhc2VzZW5zaXRpdmU9InllcyI+CisgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qY2xhc3MqIi8+CisgICAgICAgIDwvZmlsZXNldD4KKyAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Jhc2VkaXJ9L3dlYiIgY2FzZXNlbnNpdGl2ZT0ieWVzIj4KKyAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqLyouaHRtbCIvPgorICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKiovKi5qc3AiLz4KKyAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqLyouZ2lmIi8+CisgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLmRvIi8+CisgICAgICAgICAgICA8ZXhjbHVkZSBuYW1lPSIqKi8qLmphdmEsKiovKi54bWwsKiovKi5wcm9wZXJ0aWVzIi8+CisgICAgICAgIDwvZmlsZXNldD4KKyAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvIiBjYXNlc2Vuc2l0aXZlPSJ0cnVlIj4KKyAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IldFQi1JTkYvd2ViLnhtbCIvPgorICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iV0VCLUlORi9zdW4td2ViLnhtbCIvPgorICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iV0VCLUlORi93ZWJzZXJ2aWNlcy54bWwiLz4KKyAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IldFQi1JTkYvd3NkbC8ke3dzZGxmaWxlLm5hbWV9Ii8+CisgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIke21hcHBpbmdmaWxlLm5hbWV9Ii8+CisgICAgICAgIDwvZmlsZXNldD4KKyAgICA8L2phcj4KKyAgICA8ZWNobyBtZXNzYWdlPSJjcmVhdGVkIHdhciBmaWxlICR7d2FyLmZpbGV9Ii8+CisgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KKyAgICA8ZWNobyBtZXNzYWdlPSJteSB3ZWJjbGllbnQgd2FyIGNsYXNzZXMgYXJlOiR7d2ViY2xpZW50Lndhci5jbGFzc2VzfSIvPgogPC90YXJnZXQ+CiAKIDwhLS0gPT09PT0gcGFja2FnZSBlamIgamFyID09PT09IC0tPgogPHRhcmdldCBuYW1lPSJwYWNrYWdlLWVqYmphci1jb21tb24iPgotCTxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgorICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgogICAgIDxkZWxldGUgZmlsZT0iJHtlamIuamFyfSIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgICAgPGVjaG8gbWVzc2FnZT0ic3FlLWNvbW1vbi54bWw6IEdlbmVyYXRpbmcgZWpiLWphciBpbnNpZGUgYnVpbGQgZGlyZWN0b3J5Ii8+CiAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KQEAgLTIzMiw5ICsyMzIsOSBAQAogICAgIDxjb3B5IGZpbGU9IiR7c3VuLWVqYi1qYXIueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tZWpiLWphci54bWwiLz4KIAogICAgIDwhLS0gb3B0aW9uYWwgZmlsZXMgLS0+Ci0gICAgPGNvcHkgZmlsZT0iJHtzdW4tY21wLW1hcHBpbmdzLnhtbH0iIAorICAgIDxjb3B5IGZpbGU9IiR7c3VuLWNtcC1tYXBwaW5ncy54bWx9IgogICAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1jbXAtbWFwcGluZ3MueG1sIgotCQlmYWlsb25lcnJvcj0iZmFsc2UiLz4KKyAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgICA8Y29weSBmaWxlPSIke2Ric2NoZW1hfSIgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgIDxjb3B5IGZpbGU9IiR7bWFwcGluZy54bWx9IiB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICAgPGNvcHkgZmlsZT0iJHt3ZWJzZXJ2aWNlcy54bWx9IiB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgpAQCAtMjUwLDcgKzI1MCw3IEBACiAgICA8L2phcj4KIAogICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLTwvdGFyZ2V0PiAgCis8L3RhcmdldD4KIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiAKIDwhLS0gYXBwY2xpZW50IHBhY2thZ2UgLS0+CkBAIC0yNTksMjAgKzI1OSwyMCBAQAogICAgIDxkZWxldGUgZmlsZT0iJHthcHBjbGllbnQuamFyfSIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgICAgPGVjaG8gbWVzc2FnZT0ic3FlLWNvbW1vbi54bWw6IEdlbmVyYXRpbmcgYXBwY2xpZW50LWphciBpbiBidWlsZCBkaXIiLz4KICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgotICAgIDxjb3B5IGZpbGU9IiR7YXBwbGljYXRpb24tY2xpZW50LnhtbH0iIAotCQl0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLSAgICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sfSIgCi0JCXRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLSAgICA8amFyIGphcmZpbGU9IiR7YXBwY2xpZW50Lmphcn0iIGJhc2VkaXI9IiR7YXBwY2xpZW50amFyLmZpbGVzfSIgCi0gICAgICAgIHVwZGF0ZT0idHJ1ZSIgaW5jbHVkZXMgPSIke2FwcGNsaWVudGphci5jbGFzc2VzfSIgCi0gICAgICAgIG1hbmlmZXN0PSIuL2NsaWVudC9NQU5JRkVTVC5NRiI+ICAgICAgICAgCisgICAgPGNvcHkgZmlsZT0iJHthcHBsaWNhdGlvbi1jbGllbnQueG1sfSIKKyAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CisgICAgPGNvcHkgZmlsZT0iJHtzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbH0iCisgICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKyAgICA8amFyIGphcmZpbGU9IiR7YXBwY2xpZW50Lmphcn0iIGJhc2VkaXI9IiR7YXBwY2xpZW50amFyLmZpbGVzfSIKKyAgICAgICAgdXBkYXRlPSJ0cnVlIiBpbmNsdWRlcyA9IiR7YXBwY2xpZW50amFyLmNsYXNzZXN9IgorICAgICAgICBtYW5pZmVzdD0iLi9jbGllbnQvTUFOSUZFU1QuTUYiPgogICAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiI+CiAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci0gICAgICAJICAgIDwvbWV0YWluZj4KLQk8L2phcj4gICAgICAgCi0JPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLTwvdGFyZ2V0PiAKKyAgICAgICAgICAgICAgPC9tZXRhaW5mPgorICAgIDwvamFyPgorICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Cis8L3RhcmdldD4KIAogPCEtLSAgZWpiIGphciBwYWNrYWdlciAtLT4KIDx0YXJnZXQgbmFtZT0iZWpiLWphci1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTI4MSwyOCArMjgxLDI4IEBACiAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgogICAgICAgICA8cGFyYW0gbmFtZT0iZWpiLmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXIiLz4KICAgICA8L2FudGNhbGw+Ci08L3RhcmdldD4gICAgIAorPC90YXJnZXQ+CiAKIDwhLS0gIGFwcGNsaWVudCBqYXIgY3JlYXRlIC0tPgogPHRhcmdldCBuYW1lPSJhcHBjbGllbnQtamFyLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1hcHBjbGllbnRqYXItY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiCiAgICAgICAgICAgICB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5qYXIiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmphciIKICAgICAgICAgICAgIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiAgICAgPC9hbnRjYWxsPgotPC90YXJnZXQ+IAorPC90YXJnZXQ+CiAKIDwhLS0gIGVhciAtLT4KIDx0YXJnZXQgbmFtZT0iYnVpbGQtZWFyLWNvbW1vbiIgZGVwZW5kcz0iZml4RmlsZXMsZWpiLWphci1jb21tb24sYXBwY2xpZW50LWphci1jb21tb24sd2ViY2xpZW50LXdhci1jb21tb24iPgogICAgIDxkZWxldGUgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0uZWFyIi8+CiAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+Ci0gICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4gICAKLSAgICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi54bWx9IiAKLSAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIiAKLSAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+IAotICAgIDxlYXIgZWFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIiAKKyAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgorICAgIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLnhtbH0iCisgICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIKKyAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CisgICAgPGVhciBlYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiCiAgICAgICAgIGFwcHhtbD0iJHthcHBsaWNhdGlvbi54bWx9Ij4KICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgogICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KQEAgLTMxMiwxOCArMzEyLDE4IEBACiAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiAgICAgICAgIDwvZmlsZXNldD4KICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5BUFNfSE9NRX0vbGliIiBpbmNsdWRlcz0icmVwb3J0ZXIuamFyIi8+Ci0gICAgPC9lYXI+ICAgICAgICAKKyAgICA8L2Vhcj4KIDwvdGFyZ2V0PgogCiA8IS0tICBlYXIgKFdpdGhvdXQgZGVwZW5kZW5jaWVzKSAtLT4KIDx0YXJnZXQgbmFtZT0iZWFyLWNvbW1vbiIgZGVwZW5kcz0iZml4RmlsZXMsaW5pdC1jb21tb24iPgogICAgIDxkZWxldGUgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0uZWFyIi8+CiAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+Ci0gICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4gICAgCi0gICAgPGNvcHkgZmlsZT0iJHtzdW4tYXBwbGljYXRpb24ueG1sfSIgCi0gICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIgCi0gICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPiAKLSAgICA8ZWFyIGVhcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIgCisgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KKyAgICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi54bWx9IgorICAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiCisgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICAgIDxlYXIgZWFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIgogICAgICAgICBhcHB4bWw9IiR7YXBwbGljYXRpb24ueG1sfSI+CiAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IiouamFyIi8+CkBAIC0zMzMsMjAgKzMzMywyMCBAQAogICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogICAgICAgICA8L2ZpbGVzZXQ+CiAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuQVBTX0hPTUV9L2xpYiIgaW5jbHVkZXM9InJlcG9ydGVyLmphciIvPgotICAgIDwvZWFyPiAgICAgICAgCisgICAgPC9lYXI+CiA8L3RhcmdldD4KIAogPCEtLSAgYXNhZG1pbiBjb21tb24gdGFyZ2V0IC0tPgogPHRhcmdldCBuYW1lPSJhc2FkbWluLWNvbW1vbiI+CiAgIDxlY2hvIG1lc3NhZ2U9IkRvaW5nIGFkbWluIHRhc2sgJHthZG1pbi5jb21tYW5kfSIvPgogICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+Ci0gICAgICAgIDxhcmcgbGluZT0iJHthZG1pbi5jb21tYW5kfSAke2FzLnByb3BzfSAke29wZXJhbmQucHJvcHN9IiAvPiAgICAgICAgCisgICAgICAgIDxhcmcgbGluZT0iJHthZG1pbi5jb21tYW5kfSAke2FzLnByb3BzfSAke29wZXJhbmQucHJvcHN9IiAvPgogICAgIDwvZXhlYz4KIDwvdGFyZ2V0PgogCiA8IS0tICByZWNvbmZpZyB0aGUgQXBwU2VydiAgLS0+CiA8dGFyZ2V0IG5hbWU9InJlY29uZmlnLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCTxlY2hvIG1lc3NhZ2U9IlJlY29uZmlnIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIE5vIEFjdGlvbiB3aWxsIGJlIHRha2VuIGJ5IHRoZSBBcHBzZXJ2ZXIgISEiLz4KKyAgICA8ZWNobyBtZXNzYWdlPSJSZWNvbmZpZyBoYXMgYmVlbiBkZXByZWNhdGVkLiBObyBBY3Rpb24gd2lsbCBiZSB0YWtlbiBieSB0aGUgQXBwc2VydmVyICEhIi8+CiA8L3RhcmdldD4KIAogCkBAIC0zNjMsNyArMzYzLDcgQEAKICAgICAgICAgPGFyZyBsaW5lPSIke3VzZXJ9Ii8+CiAgICAgPC9leGVjPgogPC90YXJnZXQ+Ci0gICAgIAorCiA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS11c2VyLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogPGVjaG8gbWVzc2FnZT0iRGVsZXRpbmcgdXNlciAke3VzZXJ9IGluIGZpbGUgcmVhbG0iLz4KICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgpAQCAtMzc0LDE2ICszNzQsMTYgQEAKICAgICAgICAgPGFyZyBsaW5lPSIke3VzZXJ9Ii8+CiAgICAgPC9leGVjPgogPC90YXJnZXQ+Ci0gCisKIDwhLS0gIGNyZWF0ZSBKREJDIGNvbm5lY3Rpb24gcG9vbCAgLS0+Ci08dGFyZ2V0IG5hbWU9ImNyZWF0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPiAKKzx0YXJnZXQgbmFtZT0iY3JlYXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KLSAgICAgICAgPGFyZyBsaW5lPSJjcmVhdGUtamRiYy1jb25uZWN0aW9uLXBvb2wiLz4gICAgICAgIAotICAgICAgICA8YXJnIGxpbmU9Ii0tZGF0YXNvdXJjZWNsYXNzbmFtZSAke2RiLmNsYXNzfSIvPiAgICAgICAgCi0gICAgICAgIDxhcmcgbGluZT0iLS1yZXN0eXBlICR7amRiYy5yZXNvdXJjZS50eXBlfSIvPiAgICAgICAgCisgICAgICAgIDxhcmcgbGluZT0iY3JlYXRlLWpkYmMtY29ubmVjdGlvbi1wb29sIi8+CisgICAgICAgIDxhcmcgbGluZT0iLS1kYXRhc291cmNlY2xhc3NuYW1lICR7ZGIuY2xhc3N9Ii8+CisgICAgICAgIDxhcmcgbGluZT0iLS1yZXN0eXBlICR7amRiYy5yZXNvdXJjZS50eXBlfSIvPgogICAgICAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgICAgICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KLSAgICAgICAgPGFyZyBsaW5lPSIke2pkYmMuY29ucG9vbC5uYW1lfSIvPiAgICAgICAgCisgICAgICAgIDxhcmcgbGluZT0iJHtqZGJjLmNvbnBvb2wubmFtZX0iLz4KICAgICA8L2V4ZWM+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXQtcG9vbC1wcm9wcyIvPgogPC90YXJnZXQ+CkBAIC00MDMsNyArNDAzLDcgQEAKICAgICA8YXJnIGxpbmU9ImRvbWFpbi5yZXNvdXJjZXMuamRiYy1jb25uZWN0aW9uLXBvb2wuJHtqZGJjLmNvbnBvb2wubmFtZX0ucHJvcGVydHkuUGFzc3dvcmQ9JHtkYi5wd2R9Ii8+CiAgIDwvZXhlYz4KIAotICA8YW50Y2FsbCB0YXJnZXQ9InNldC0ke2RiLnR5cGV9LWNvbm5wb29sLXByb3BzIi8+IAorICA8YW50Y2FsbCB0YXJnZXQ9InNldC0ke2RiLnR5cGV9LWNvbm5wb29sLXByb3BzIi8+CiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJzZXQtZGVyYnktY29ubnBvb2wtcHJvcHMiPgpAQCAtNDc0LDEzICs0NzQsMTMgQEAKIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9InNldC1zeWJhc2UtY29ubnBvb2wtcHJvcHMtY29tbW9uIiB1bmxlc3M9ImRhdGFkaXJlY3QiPgotICA8YW50Y2FsbCB0YXJnZXQ9InNldC1ub24tZGIyLXR5cGUyLWNvbm5wb29sLXByb3BzIi8+IAorICA8YW50Y2FsbCB0YXJnZXQ9InNldC1ub24tZGIyLXR5cGUyLWNvbm5wb29sLXByb3BzIi8+CiAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CiAgICAgPGFyZyBsaW5lPSJzZXQiLz4KICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+CiAgICAgPGFyZyBsaW5lPSJkb21haW4ucmVzb3VyY2VzLmpkYmMtY29ubmVjdGlvbi1wb29sLiR7amRiYy5jb25wb29sLm5hbWV9LnByb3BlcnR5LkRhdGFiYXNlTmFtZT0ke2RiLm5hbWV9IiAvPgogICA8L2V4ZWM+Ci08L3RhcmdldD4gCis8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJzZXQtb3JhY2xlLWNvbm5wb29sLXByb3BzIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InNldC1kYXRhZGlyZWN0LXBvb2wtcHJvcHMiLz4KQEAgLTQ4OCw3ICs0ODgsNyBAQAogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0ic2V0LW9yYWNsZS1jb25ucG9vbC1wcm9wcy1jb21tb24iIHVubGVzcz0iZGF0YWRpcmVjdCI+Ci0gIDxhbnRjYWxsIHRhcmdldD0ic2V0LW5vbi1kYjItdHlwZTItY29ubnBvb2wtcHJvcHMiLz4gCisgIDxhbnRjYWxsIHRhcmdldD0ic2V0LW5vbi1kYjItdHlwZTItY29ubnBvb2wtcHJvcHMiLz4KICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICA8YXJnIGxpbmU9InNldCIvPgogICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KQEAgLTUwMCw3ICs1MDAsNyBAQAogICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KICAgICA8YXJnIGxpbmU9ImRvbWFpbi5yZXNvdXJjZXMuamRiYy1jb25uZWN0aW9uLXBvb2wuJHtqZGJjLmNvbnBvb2wubmFtZX0ucHJvcGVydHkudXJsPSR7ZGIudXJsfSIgLz4KICAgPC9leGVjPgotICA8IS0tIGluZXQgZHJpdmVyIHByb3BlcnR5IGFkZGVkIGZvciBlbmFibGluZyBDTE9CJ3MgaW4gb3JhY2xlIERlZXBhIAorICA8IS0tIGluZXQgZHJpdmVyIHByb3BlcnR5IGFkZGVkIGZvciBlbmFibGluZyBDTE9CJ3MgaW4gb3JhY2xlIERlZXBhCiBTaW5naCAwMS8yNy8wNCAtLT4KICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICA8YXJnIGxpbmU9InNldCIvPgpAQCAtNTQ3LDcgKzU0Nyw3IEBACiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJzZXQtcG9pbnRiYXNlLWNvbm5wb29sLXByb3BzIj4KLSAgPGFudGNhbGwgdGFyZ2V0PSJzZXQtbm9uLWRiMi10eXBlMi1jb25ucG9vbC1wcm9wcyIvPiAKKyAgPGFudGNhbGwgdGFyZ2V0PSJzZXQtbm9uLWRiMi10eXBlMi1jb25ucG9vbC1wcm9wcyIvPgogICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgIDxhcmcgbGluZT0ic2V0Ii8+CiAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgpAQCAtNTY5LDcgKzU2OSw3IEBACiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJzZXQtbWljcm9zb2Z0LWNvbm5wb29sLXByb3BzLWNvbW1vbiI+Ci0gIDxhbnRjYWxsIHRhcmdldD0ic2V0LW5vbi1kYjItdHlwZTItY29ubnBvb2wtcHJvcHMiLz4gCisgIDxhbnRjYWxsIHRhcmdldD0ic2V0LW5vbi1kYjItdHlwZTItY29ubnBvb2wtcHJvcHMiLz4KICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICA8YXJnIGxpbmU9InNldCIvPgogICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KQEAgLTU4MCw3ICs1ODAsNyBAQAogICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KICAgICA8YXJnIGxpbmU9ImRvbWFpbi5yZXNvdXJjZXMuamRiYy1jb25uZWN0aW9uLXBvb2wuJHtqZGJjLmNvbnBvb2wubmFtZX0ucHJvcGVydHkuZGF0YWJhc2VOYW1lPSR7ZGIubmFtZX0iIC8+CiAgIDwvZXhlYz4KLTwvdGFyZ2V0PiAKKzwvdGFyZ2V0PgogCiA8IS0tICBjcmVhdGUgWEEgSkRCQyBjb25uZWN0aW9uIHBvb2wgIC0tPgogPHRhcmdldCBuYW1lPSJjcmVhdGUtamRiYy14YS1jb25ucG9vbC1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTYwMyw3ICs2MDMsNyBAQAogICAgICAgPGFyZyBsaW5lPSJkb21haW4ucmVzb3VyY2VzLmpkYmMtY29ubmVjdGlvbi1wb29sLiR7amRiYy5jb25wb29sLm5hbWV9LnByb3BlcnR5LlBhc3N3b3JkPSR7ZGIucHdkfSIvPgogICAgIDwvZXhlYz4KIAotICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0LSR7ZGIudHlwZX0tY29ubnBvb2wtcHJvcHMiLz4gCisgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXQtJHtkYi50eXBlfS1jb25ucG9vbC1wcm9wcyIvPgogPC90YXJnZXQ+CiAKIDwhLS0gIGRlbGV0ZSBKREJDIGNvbm5lY3Rpb24tcG9vbCAgLS0+CkBAIC03NTAsMTAgKzc1MCwxMCBAQAogCiA8IS0tIGRyb3AgYWxsIHRhYmxlcyBhcyBwYXJ0IG9mIGNsZWFudXAgLS0+CiA8dGFyZ2V0IG5hbWU9ImRyb3Atc3FlLWFsbHRhYmxlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgPGVjaG8gbWVzc2FnZT0iRHJvcGluZyBhbGwgdGFibGVzLi4uZXhlY3V0aW5nIGFsbCBkcm9wX3h4eC5zcWwgCisgICA8ZWNobyBtZXNzYWdlPSJEcm9waW5nIGFsbCB0YWJsZXMuLi5leGVjdXRpbmcgYWxsIGRyb3BfeHh4LnNxbAogZmlsZXMiLz4KICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0ic3FsLmZpbGUudHlwZSIgdmFsdWU9ImRyb3AiLz4KKyAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUudHlwZSIgdmFsdWU9ImRyb3AiLz4KICAgIDwvYW50Y2FsbD4KIDwvdGFyZ2V0PgogCkBAIC04NDAsOCArODQwLDggQEAKICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0LXVuaXgtY2xhc3NwYXRoLXN1ZmZpeCIvPgogPC90YXJnZXQ+CiAKLTx0YXJnZXQgbmFtZT0ic2V0LXVuaXgtY2xhc3NwYXRoLXN1ZmZpeCIgCi0JZGVwZW5kcz0iaW5pdC1jb21tb24iIGlmPSJpc1VuaXgiPgorPHRhcmdldCBuYW1lPSJzZXQtdW5peC1jbGFzc3BhdGgtc3VmZml4IgorICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIiBpZj0iaXNVbml4Ij4KICAgICAgICAgPCEtLSBHZXQgY2xhc3NwYXRoLXN1ZmZpeCAtLT4KICAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIgogICAgICAgICAgIG91dHB1dD0iJHtjbGFzc3BhdGhzdWZmaXguZmlsZX0iPgpAQCAtODYyLDggKzg2Miw4IEBACiAgICAgICAgIDwhLS0gPGFudGNhbGwgdGFyZ2V0PSJyZWNvbmZpZy1jb21tb24iLz4gLS0+CiA8L3RhcmdldD4KIAotPHRhcmdldCBuYW1lPSJzZXQtd2luLWNsYXNzcGF0aC1zdWZmaXgiIAotCWRlcGVuZHM9ImluaXQtY29tbW9uIiBpZj0iaXNXaW5kb3dzIj4KKzx0YXJnZXQgbmFtZT0ic2V0LXdpbi1jbGFzc3BhdGgtc3VmZml4IgorICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIiBpZj0iaXNXaW5kb3dzIj4KIAogICAgICAgICA8IS0tIEdldCBjbGFzc3BhdGgtc3VmZml4IC0tPgogICAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiCkBAIC04ODcsOCArODg3LDggQEAKIDwvdGFyZ2V0PgogCiA8IS0tICBjcmVhdGUvZGVsZXRlIENvbm5lY3RvciBjb25uZWN0aW9uIHBvb2wgIC0tPgotPHRhcmdldCBuYW1lPSJjcmVhdGUtY29ubmVjdG9yLWNvbm5wb29sLWNvbW1vbiIgCi0JZGVwZW5kcz0iaW5pdC1jb21tb24sIGNyZWF0ZS1jb25uZWN0b3ItY29ubnBvb2wiLz4KKzx0YXJnZXQgbmFtZT0iY3JlYXRlLWNvbm5lY3Rvci1jb25ucG9vbC1jb21tb24iCisgICAgZGVwZW5kcz0iaW5pdC1jb21tb24sIGNyZWF0ZS1jb25uZWN0b3ItY29ubnBvb2wiLz4KIAogPHRhcmdldCBuYW1lPSJjcmVhdGUtY29ubmVjdG9yLWNvbm5wb29sIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CkBAIC05MDcsNyArOTA3LDcgQEAKICAgICA8YXJnIGxpbmU9ImRlbGV0ZS1jb25uZWN0b3ItY29ubmVjdGlvbi1wb29sIi8+CiAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgogICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KLSAgICA8YXJnIGxpbmU9IiR7Y29ubmVjdG9yLmNvbnBvb2wubmFtZX0iLz4gIAorICAgIDxhcmcgbGluZT0iJHtjb25uZWN0b3IuY29ucG9vbC5uYW1lfSIvPgogICA8L2V4ZWM+CiA8L3RhcmdldD4KIApAQCAtMTAxNCw3ICsxMDE0LDcgQEAKIAogCiA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1qbXMtcmVzb3VyY2UtdG9waWMtY29tbW9uIiBpZj0idG9waWMiPgotICA8ZWNobyBtZXNzYWdlPSJDcmVhdGluZyBKTVMgcmVzb3VyY2Ugd2l0aCBuYW1lIAorICA8ZWNobyBtZXNzYWdlPSJDcmVhdGluZyBKTVMgcmVzb3VyY2Ugd2l0aCBuYW1lCiAke2ptcy5yZXNvdXJjZS5uYW1lfSIvPgogICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgIDxhcmcgbGluZT0iY3JlYXRlLWptc2Rlc3QiLz4KQEAgLTEwNjMsMTEgKzEwNjMsMTEgQEAKIDwvdGFyZ2V0PgogCiA8IS0tICBkZXBsb3kgdGhlIGFwcGxpY2F0aW9ucyBpbiBBcHBTZXJ2ICAtLT4KLTx0YXJnZXQgbmFtZT0iZGVwbG95LWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPiAgIAorPHRhcmdldCBuYW1lPSJkZXBsb3ktY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uLSR7ZXhlY3V0aW9uLm1vZGV9Ii8+CiA8L3RhcmdldD4KIAotPHRhcmdldCBuYW1lPSJkZXBsb3ktY29tbW9uLXBlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+ICAgICAgCis8dGFyZ2V0IG5hbWU9ImRlcGxveS1jb21tb24tcGUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICA8YXJnIGxpbmU9ImRlcGxveSIvPgogICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KQEAgLTEwNzcsNyArMTA3Nyw3IEBACiAgIDwvZXhlYz4KIDwvdGFyZ2V0PgogCi08dGFyZ2V0IG5hbWU9ImRlcGxveS1jb21tb24tZWUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4gICAgICAKKzx0YXJnZXQgbmFtZT0iZGVwbG95LWNvbW1vbi1lZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxlY2hvIG1lc3NhZ2U9IlNvIHlvdSBhcmUgdXNpbmcgRW50ZXJwcmlzZSBWZXJzaW9uIGVoID8iLz4KIDxwcm9wZXJ0eSBuYW1lPSJkZXBsb3llZC5hcHAiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiLz4KIApAQCAtMTA5Myw3ICsxMDkzLDcgQEAKIDwhLS0gZGVwbG95ZWQuYXBwIGRlZmF1bHRzIHRvICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciBkZWZpbmVkIGluIHByb3BlcnRpZXMueG1sLS0+CiAgICAgPGFyZyBsaW5lPSIke2RlcGxveWVkLmFwcH0iLz4KICAgPC9leGVjPgotICA8ZWNobyBtZXNzYWdlPSJEZXBsb3ltZW50IG9uIHRhcmdldCBzZXJ2ZXIgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0gCisgIDxlY2hvIG1lc3NhZ2U9IkRlcGxveW1lbnQgb24gdGFyZ2V0IHNlcnZlciAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfQogc3VjY2Vzc2Z1bCIvPgogCiA8L3RhcmdldD4KQEAgLTExMDEsOCArMTEwMSw4IEBACiAKIDwhLS0gc3RhcnQgY21wIGRlcGxveS91bmRlcGxveSB0YXJnZXRzIC0tPgogICAgIDwhLS0gIGRlcGxveSB0aGUgYXBwbGljYXRpb25zIGluIGphdmEyREIgZm9yIGNyZWF0ZXRhYmxlICAtLT4KLSAgICAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3ktY29tbW9uLWNyZWF0ZXRhYmxlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+ICAgICAgCi0gICAgICAgICAgPGVjaG8gbWVzc2FnZT0idXNpbmcgamF2YTJEQiB0YXJnZXRzIi8+ICAgCisgICAgICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95LWNvbW1vbi1jcmVhdGV0YWJsZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICAgIDxlY2hvIG1lc3NhZ2U9InVzaW5nIGphdmEyREIgdGFyZ2V0cyIvPgogICAgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CiAgICAgICAgICAgICA8YXJnIGxpbmU9ImRlcGxveSIvPgogICAgICAgICAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgpAQCAtMTExMCwyMyArMTExMCwyMyBAQAogICAgICAgICAgICAgPGFyZyBsaW5lPSItLXJldHJpZXZlICR7YXNzZW1ibGUuZGlyfSIvPgogICAgICAgICAgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICAgICAgICAgICAgPGFyZyBsaW5lPSItLWRidmVuZG9ybmFtZSAke2RiLnR5cGV9Ii8+Ci0gICAgICAgICAgICA8YXJnIGxpbmU9Ii0tY3JlYXRldGFibGVzPXRydWUiLz4gICAgIAotICAgICAgICAgICAgPGFyZyBsaW5lPSItLXVuaXF1ZXRhYmxlbmFtZXM9dHJ1ZSIvPiAgCisgICAgICAgICAgICA8YXJnIGxpbmU9Ii0tY3JlYXRldGFibGVzPXRydWUiLz4KKyAgICAgICAgICAgIDxhcmcgbGluZT0iLS11bmlxdWV0YWJsZW5hbWVzPXRydWUiLz4KICAgICAgICAgICAgIDxhcmcgbGluZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIi8+CiAgICAgICAgICAgPC9leGVjPgogICAgICAgICA8L3RhcmdldD4KIAogICAgIDwhLS0gIGRlcGxveSB0aGUgYXBwbGljYXRpb25zIGluIGphdmEyREIgZm9yIGRyb3BhbmRjcmVhdGV0YWJsZSAgLS0+Ci0gICAgICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95LWNvbW1vbi1kcm9wY3JlYXRldGFibGUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4gICAgICAgICAKLSAgICAgICAgICA8ZWNobyBtZXNzYWdlPSJ1c2luZyBqYXZhMkRCIHRhcmdldHMiLz4gICAKKyAgICAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3ktY29tbW9uLWRyb3BjcmVhdGV0YWJsZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICAgIDxlY2hvIG1lc3NhZ2U9InVzaW5nIGphdmEyREIgdGFyZ2V0cyIvPgogICAgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CiAgICAgICAgICAgICA8YXJnIGxpbmU9ImRlcGxveSIvPgogICAgICAgICAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgogICAgICAgICAgICAgPGFyZyBsaW5lPSItLW5hbWUgJHthcHBuYW1lfUFwcCIvPgogICAgICAgICAgICAgPGFyZyBsaW5lPSItLXJldHJpZXZlICR7YXNzZW1ibGUuZGlyfSIvPgogICAgICAgICAgICAgPGFyZyBsaW5lPSItLWRidmVuZG9ybmFtZSAke2RiLnR5cGV9Ii8+Ci0gICAgICAgICAgICA8YXJnIGxpbmU9Ii0tZHJvcGFuZGNyZWF0ZXRhYmxlcz10cnVlIi8+ICAgICAgICAKLSAgICAgICAgICAgIDxhcmcgbGluZT0iLS11bmlxdWV0YWJsZW5hbWVzPXRydWUiLz4gIAorICAgICAgICAgICAgPGFyZyBsaW5lPSItLWRyb3BhbmRjcmVhdGV0YWJsZXM9dHJ1ZSIvPgorICAgICAgICAgICAgPGFyZyBsaW5lPSItLXVuaXF1ZXRhYmxlbmFtZXM9dHJ1ZSIvPgogICAgICAgICAgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICAgICAgICAgICAgPGFyZyBsaW5lPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiLz4KICAgICAgICAgICA8L2V4ZWM+CkBAIC0xMTM0LDcgKzExMzQsNyBAQAogCiAgICAgPCEtLSAgdW5kZXBsb3kgdGhlIGFwcGxpY2F0aW9ucyBpbiBqYXZhMkRCIGZvciBkcm9wdGFibGUgIC0tPgogICAgICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95LWNvbW1vbi1kcm9wdGFibGUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgICA8ZWNobyBtZXNzYWdlPSJ1c2luZyBqYXZhMkRCIHRhcmdldHMiLz4gICAKKyAgICAgICAgICA8ZWNobyBtZXNzYWdlPSJ1c2luZyBqYXZhMkRCIHRhcmdldHMiLz4KICAgICAgICAgICA8ZWNobyBtZXNzYWdlPSJVbmRlcGxveWluZyAke2FwcG5hbWV9LiIvPgogICAgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iPgogICAgICAgICAgICAgPGFyZyBsaW5lPSJ1bmRlcGxveSIvPgpAQCAtMTE0Miw5ICsxMTQyLDkgQEAKICAgICAgICAgICAgIDxhcmcgbGluZT0iLS1wYXNzd29yZCAke2FkbWluLnBhc3N3b3JkfSIvPgogICAgICAgICAgICAgPGFyZyBsaW5lPSItLWhvc3QgJHthZG1pbi5ob3N0fSIvPgogICAgICAgICAgICAgPGFyZyBsaW5lPSItLXBvcnQgJHthZG1pbi5wb3J0fSIvPgotICAgICAgICAgICAgPGFyZyBsaW5lPSItLWRyb3B0YWJsZXM9dHJ1ZSIvPgkKKyAgICAgICAgICAgIDxhcmcgbGluZT0iLS1kcm9wdGFibGVzPXRydWUiLz4KICAgICAgICAgICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KLSAgICAgICAgICAgIDxhcmcgbGluZT0iJHthcHBuYW1lfUFwcCIvPgkKKyAgICAgICAgICAgIDxhcmcgbGluZT0iJHthcHBuYW1lfUFwcCIvPgogICAgICAgICAgIDwvZXhlYz4KICAgICAgICAgPC90YXJnZXQ+CiA8IS0tIGVuZCBjbXAgdGFyZ2V0cyAtLT4KQEAgLTExNTksMTEgKzExNTksMTEgQEAKICAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgICAgPGFyZyBsaW5lPSItLXJldHJpZXZlICR7YXNzZW1ibGUuZGlyfSIvPgogICA8L2V4ZWM+Ci08L3RhcmdldD4gICAgCis8L3RhcmdldD4KIAogPCEtLSAgZGVwbG95L3VuZGVwbG95IG1vZHVsZSBmaWxlcyAtLT4KLTwhLS0gIAotICAgIE5vdGU6IFNldCAibW9kdWxlZmlsZSIgcGFyYW0gdG8gZm9sbG93aW5nIHZhbHVlczogCis8IS0tCisgICAgTm90ZTogU2V0ICJtb2R1bGVmaWxlIiBwYXJhbSB0byBmb2xsb3dpbmcgdmFsdWVzOgogICAgICAgICAqIDxhcmNoaXZlX25hbWU+LjxqYXJ8d2FyfHJhcj4gKCBmb3IgZGVwbG95LW1vZHVsZS1jb21tb24pCiAgICAgICAgICogPGFyY2hpdmVfbmFtZT4gKGZvciB1bmRlcGxveS1tb2R1bGUtY29tbW9uKQogICAgICAgICAqIDxhcmNoaXZlX25hbWU+IChmb3IgcnVuY2xpZW50LW1vZHVsZS1jb21tb24pCkBAIC0xMjI4LDggKzEyMjgsOCBAQAogICAgICAgPHBhcmFtIG5hbWU9InRlc3QuZGVzY3JpcHRpb24iIHZhbHVlPSIke3Rlc3QuZGVzY3JpcHRpb259Ii8+CiAgIDwvYW50Y2FsbD4KIDwvdGFyZ2V0PgotICAgCi0gICAgIAorCisKIDwhLS0gIGRlcGxveS91bmRlcGxveSBSQVIgZmlsZXMgLS0+CiA8dGFyZ2V0IG5hbWU9ImRlcGxveS1yYXItY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgIDxlY2hvIG1lc3NhZ2U9IkRlcGxveWluZyAke3JhcmZpbGV9LiIvPgpAQCAtMTI0OSw3ICsxMjQ5LDcgQEAKICAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgICAgPGFyZyBsaW5lPSIke3VuZGVwbG95cmFyfSIvPgogICA8L2V4ZWM+Ci08L3RhcmdldD4gICAgCis8L3RhcmdldD4KIAogPCEtLSBzZXR1cCBSQVIgY29uZmlnIHZhbHVlcyBmb3IgYWxsIGluc3RhbmNlcyBpbiBhIGNsdXN0ZXIgLS0+CiA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1jbHVzdGVyLXJhcmNvbmZpZyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtMTI5NCw3ICsxMjk0LDcgQEAKICAgICAgICAgPGFyZyBsaW5lPSJ1bmRlcGxveSIvPgogICAgICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+CiAgICAgICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KLSAgICAgICAgPGFyZyBsaW5lPSIke2FwcG5hbWV9QXBwIi8+CQorICAgICAgICA8YXJnIGxpbmU9IiR7YXBwbmFtZX1BcHAiLz4KICAgICA8L2V4ZWM+CiAgICAgPGVjaG8gbWVzc2FnZT0iY21kIGV4ZWN1dGVkIGZvciAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogPC90YXJnZXQ+CkBAIC0xMzQwLDI3ICsxMzQwLDI3IEBACiA8dGFyZ2V0IG5hbWU9InN0YXJ0UEIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgPGVjaG8gbWVzc2FnZT0iU3RhcnRpbmcgUG9pbnRiYXNlIHNlcnZlcnMiLz4KICAgPHByb3BlcnR5IG5hbWU9Imp2bS5hcmdzIgotICAgICAgdmFsdWU9Ii1EZGF0YWJhc2UuaG9tZT0ke2RiLnJvb3R9L2RhdGFiYXNlcyAKKyAgICAgIHZhbHVlPSItRGRhdGFiYXNlLmhvbWU9JHtkYi5yb290fS9kYXRhYmFzZXMKICAgICAgICAgICAtRHBvaW50YmFzZS5pbmk9JHtkYi5yb290fS90b29scy9zZXJ2ZXJvcHRpb24vcG9pbnRiYXNlLmluaSIvPgogICA8cGFyYWxsZWw+Ci0gICAgPGphdmEgY2xhc3NuYW1lPSJjb20ucG9pbnRiYXNlLm5ldC5uZXRTZXJ2ZXIiIAorICAgIDxqYXZhIGNsYXNzbmFtZT0iY29tLnBvaW50YmFzZS5uZXQubmV0U2VydmVyIgogICAgICAgY2xhc3NwYXRoPSIke2RiLmNsYXNzcGF0aH0iIGZhaWxvbmVycm9yPSJ0cnVlIiBmb3JrPSJ0cnVlIj4KICAgICAgIDxqdm1hcmcgbGluZT0iJHtqdm0uYXJnc30iLz4KICAgICAgIDxhcmcgbGluZT0iL3BvcnQ6OTA5MiIvPgogICAgIDwvamF2YT4KLSAgICA8amF2YSBjbGFzc25hbWU9ImNvbS5wb2ludGJhc2UubmV0Lm5ldFNlcnZlciIgCisgICAgPGphdmEgY2xhc3NuYW1lPSJjb20ucG9pbnRiYXNlLm5ldC5uZXRTZXJ2ZXIiCiAgICAgICBjbGFzc3BhdGg9IiR7ZGIuY2xhc3NwYXRofSIgZmFpbG9uZXJyb3I9InRydWUiIGZvcms9InRydWUiPgogICAgICAgPGp2bWFyZyBsaW5lPSIke2p2bS5hcmdzfSIvPgogICAgICAgPGFyZyBsaW5lPSIvcG9ydDo5MDkzIi8+Ci0gICAgPC9qYXZhPiAKKyAgICA8L2phdmE+CiAKICAgICA8IS0tIHBvcnRzIDkwOTQgYW5kIDkwOTUgYXJlIGJlaW5nIHVzZWQgYnkgdGhlIFRvbWNhdCBncm91cCAtLT4KLSAgICA8amF2YSBjbGFzc25hbWU9ImNvbS5wb2ludGJhc2UubmV0Lm5ldFNlcnZlciIgCisgICAgPGphdmEgY2xhc3NuYW1lPSJjb20ucG9pbnRiYXNlLm5ldC5uZXRTZXJ2ZXIiCiAgICAgICBjbGFzc3BhdGg9IiR7ZGIuY2xhc3NwYXRofSIgZmFpbG9uZXJyb3I9InRydWUiIGZvcms9InRydWUiPgogICAgICAgPGp2bWFyZyBsaW5lPSIke2p2bS5hcmdzfSIvPgogICAgICAgPGFyZyBsaW5lPSIvcG9ydDo5MDk0Ii8+CiAgICAgPC9qYXZhPgotICAgIDxqYXZhIGNsYXNzbmFtZT0iY29tLnBvaW50YmFzZS5uZXQubmV0U2VydmVyIiAKKyAgICA8amF2YSBjbGFzc25hbWU9ImNvbS5wb2ludGJhc2UubmV0Lm5ldFNlcnZlciIKICAgICAgIGNsYXNzcGF0aD0iJHtkYi5jbGFzc3BhdGh9IiBmYWlsb25lcnJvcj0idHJ1ZSIgZm9yaz0idHJ1ZSI+CiAgICAgICA8anZtYXJnIGxpbmU9IiR7anZtLmFyZ3N9Ii8+CiAgICAgICA8YXJnIGxpbmU9Ii9wb3J0OjkwOTUiLz4KQEAgLTEzNzQsMjEgKzEzNzQsMjEgQEAKICAgPGVjaG8gbWVzc2FnZT0iQ3JlYXRpbmcgUG9pbnRiYXNlIERhdGFiYXNlcyIvPgogICA8c2xlZXAgc2Vjb25kcz0iMTAiLz4KICAgPHBhcmFsbGVsPgotICAgIDxqYXZhIGNsYXNzbmFtZT0iY29tLnBvaW50YmFzZS50b29scy50b29sc0NvbW1hbmRlciIgCisgICAgPGphdmEgY2xhc3NuYW1lPSJjb20ucG9pbnRiYXNlLnRvb2xzLnRvb2xzQ29tbWFuZGVyIgogICAgICAgY2xhc3NwYXRoPSIke2RiLmNsYXNzcGF0aH0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CiAgICAgICA8YXJnIGxpbmU9IiR7ZGIuZHJpdmVyfSIvPgogICAgICAgPGFyZyBsaW5lPSJqZGJjOnBvaW50YmFzZTpzZXJ2ZXI6Ly8ke2RiLmhvc3R9OjkwOTMvc3FlLXNhbXBsZXMsbmV3Ii8+CiAgICAgICA8YXJnIGxpbmU9IiR7ZGIudXNlcn0iLz4KICAgICAgIDxhcmcgbGluZT0iJHtkYi5wd2R9Ii8+CiAgICAgPC9qYXZhPgotICAgIDxqYXZhIGNsYXNzbmFtZT0iY29tLnBvaW50YmFzZS50b29scy50b29sc0NvbW1hbmRlciIgCisgICAgPGphdmEgY2xhc3NuYW1lPSJjb20ucG9pbnRiYXNlLnRvb2xzLnRvb2xzQ29tbWFuZGVyIgogICAgICAgY2xhc3NwYXRoPSIke2RiLmNsYXNzcGF0aH0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CiAgICAgICA8YXJnIGxpbmU9IiR7ZGIuZHJpdmVyfSIvPgogICAgICAgPGFyZyBsaW5lPSJqZGJjOnBvaW50YmFzZTpzZXJ2ZXI6Ly8ke2RiLmhvc3R9OjkwOTQvQWN0aXZpdHlEQixuZXciLz4KICAgICAgIDxhcmcgbGluZT0iUEJQVUJMSUMiLz4KICAgICAgIDxhcmcgbGluZT0iUEJQVUJMSUMiLz4KICAgICA8L2phdmE+Ci0gICAgPGphdmEgY2xhc3NuYW1lPSJjb20ucG9pbnRiYXNlLnRvb2xzLnRvb2xzQ29tbWFuZGVyIiAKKyAgICA8amF2YSBjbGFzc25hbWU9ImNvbS5wb2ludGJhc2UudG9vbHMudG9vbHNDb21tYW5kZXIiCiAgICAgICBjbGFzc3BhdGg9IiR7ZGIuY2xhc3NwYXRofSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICAgIDxhcmcgbGluZT0iJHtkYi5kcml2ZXJ9Ii8+CiAgICAgICA8YXJnIGxpbmU9ImpkYmM6cG9pbnRiYXNlOnNlcnZlcjovLyR7ZGIuaG9zdH06OTA5NS9hcHBfY2VudHJpY190ZXN0X3NlcnZsZXQyXzRfd29ya2Zsb3csbmV3Ii8+CkBAIC0xMzk3LDcgKzEzOTcsNyBAQAogICAgIDwvamF2YT4KICAgPC9wYXJhbGxlbD4KIDwvdGFyZ2V0PgotICAgIAorCiA8dGFyZ2V0IG5hbWU9ImNvcHlEcml2ZXJzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgIDxlY2hvIG1lc3NhZ2U9ImRiLmRyaXZlci5kaXI9JHtkYi5kcml2ZXIuZGlyfSIvPgogICA8ZWNobyBtZXNzYWdlPSJkYi5kcml2ZXI9JHtkYi5kcml2ZXJ9Ii8+CkBAIC0xNDI0LDcgKzE0MjQsNyBAQAogICAgIDxwcm9wZXJ0eSBmaWxlPSIke2Vudi5BUFNfSE9NRX0vZGV2dGVzdHMvamRiYy9jb25maWcvb3JhY2xlX2RhdGFkaXJlY3QucHJvcGVydGllcyIvPgogPC90YXJnZXQ+CiAKLTwhLS0gdGhpcyB0YXJnZXQgY2xlYW5zIHVwIG9yYWNsZSBzY2hlbWEsIGRyb3BzIGFsbCB0YWJsZXMgdW5kZXIgYSB1c2VyIAorPCEtLSB0aGlzIHRhcmdldCBjbGVhbnMgdXAgb3JhY2xlIHNjaGVtYSwgZHJvcHMgYWxsIHRhYmxlcyB1bmRlciBhIHVzZXIKIGFuZCBjcmVhdGVzIGEgbmV3IG9uZQogQWRkZWQgOC8yMS8yMDAzIERlZXBhK1NhaWxhamEKIC0tPgpAQCAtMTQzMiw3ICsxNDMyLDcgQEAKICAgPHByb3BlcnR5IGZpbGU9IiR7ZW52LkFQU19IT01FfS9kZXZ0ZXN0cy9qZGJjL2NvbmZpZy9vcmFjbGUucHJvcGVydGllcyIvPgogICA8c3FsIGRyaXZlcj0iJHtkYi5kcml2ZXJ9IiB1cmw9IiR7ZGIudXJsfSIKICAgICB1c2VyaWQ9InN5c3RlbSIgcGFzc3dvcmQ9InN5c2RiYSIKLSAgICBvbmVycm9yPSJjb250aW51ZSIgCisgICAgb25lcnJvcj0iY29udGludWUiCiAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qZGJjZHJpdmVycy9zbW9yYWNsZS5qYXIiPgogICAgIGRyb3AgdXNlciAke2RiLnVzZXJ9IGNhc2NhZGU7CiAgICAgY3JlYXRlIHVzZXIgJHtkYi51c2VyfSBpZGVudGlmaWVkIGJ5ICR7ZGIucHdkfTsKQEAgLTE0NDEsOCArMTQ0MSw4IEBACiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJyZWNvbmZpZyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgIDxlY2hvPiAKLSAgICAgICAgUmVjb25maWcgaGFzIGJlZW4gZGVwcmVjYXRlZC4gCisgICAgPGVjaG8+CisgICAgICAgIFJlY29uZmlnIGhhcyBiZWVuIGRlcHJlY2F0ZWQuCiAgICAgICAgIE5vIEFjdGlvbiB3aWxsIGJlIHRha2VuIGJ5IHRoZSBBcHBzZXJ2ZXIgISEiLz4KICAgICA8L2VjaG8+CiA8L3RhcmdldD4KQEAgLTE0NjAsNyArMTQ2MCw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InN0b3BQQiIgZGVwZW5kcz0iaW5pdC1jb21tb24iIGlmPSJpc1VuaXgiPgotICAgICAgICA8amF2YSBjbGFzc25hbWU9ImNvbS5wb2ludGJhc2UudG9vbHMudG9vbHNDb21tYW5kZXIiIAorICAgICAgICA8amF2YSBjbGFzc25hbWU9ImNvbS5wb2ludGJhc2UudG9vbHMudG9vbHNDb21tYW5kZXIiCiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZGIuY2xhc3NwYXRofSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICAgICAgICAgIDxhcmcgbGluZT0iJHtkYi5kcml2ZXJ9Ii8+CiAgICAgICAgICAgICA8YXJnIGxpbmU9ImpkYmM6cG9pbnRiYXNlOnNlcnZlcjovLyR7YWRtaW4uaG9zdH06OTA5Mi9zcWUtc2FtcGxlcyIvPgpAQCAtMTQ3Myw3ICsxNDczLDcgQEAKIAogPCEtLSA9PT09PT09IHJlc3RhcnQgc2VydmVyIGluc3RhbmNlIHRhcmdldHMgPT09PT09PSAtLT4KICAgICA8dGFyZ2V0IG5hbWU9InJlc3RhcnQtc2VydmVyLWluc3RhbmNlLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgCSA8YW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQtc2VydmVyLWluc3RhbmNlLWNvbW1vbi0ke2V4ZWN1dGlvbi5tb2RlfSIvPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQtc2VydmVyLWluc3RhbmNlLWNvbW1vbi0ke2V4ZWN1dGlvbi5tb2RlfSIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0YXJ0LXNlcnZlci1pbnN0YW5jZS1jb21tb24tZWUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTE1MTUsNyArMTUxNSw3IEBACiAgICAgPGFyZyBsaW5lPSItLXBvcnQgJHthZG1pbi5wb3J0fSIvPgogICAgIDxhcmcgbGluZT0iJHtjbHVzdGVyLm5hbWV9Ii8+CiAgIDwvZXhlYz4KLSAgCisKICAgPHNsZWVwIHNlY29uZHM9IjMwIi8+CiAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CiAgICAgPGFyZyBsaW5lPSJzdGFydC1jbHVzdGVyIi8+CkBAIC0xNTQ5LDcgKzE1NDksNyBAQAogPC90YXJnZXQ+CiAKICAgIDx0YXJnZXQgbmFtZT0ic3RhcnQtZG9tYWluLWVlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiIgaWY9ImlzRUUiPgotCTxlY2hvIG1lc3NhZ2U9InN0YXJ0LWRvbWFpbiBpcyBydW5uaW5nIG9uIFN0YW5kYXJkL0VudGVycHJpc2UgRWRpdGlvbi4uLiIvPgorICAgIDxlY2hvIG1lc3NhZ2U9InN0YXJ0LWRvbWFpbiBpcyBydW5uaW5nIG9uIFN0YW5kYXJkL0VudGVycHJpc2UgRWRpdGlvbi4uLiIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzdGFydC1kb21haW4td2luIi8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InN0YXJ0LWRvbWFpbi11bml4Ii8+CiAgICAgICA8ZWNobyBtZXNzYWdlPSJXYWl0aW5nIGZvciA5MCBzZWNzIHRvIG1ha2Ugc3VyZSBzZXJ2ZXIgcHJvcGVybHkgc3RhcnRlZC4uLiIvPgpAQCAtMTY1NSwxNSArMTY1NSwxNSBAQAogCiA8dGFyZ2V0IG5hbWU9InJ1bi1sb29zZS1yZXBvcnRlciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICA8IS0tCi0gIENhdXRpb246IAorICBDYXV0aW9uOgogICB0aGUgdGVzdCBkZXNjcmlwdGlvbiBzaG91bGQgYmUgcGFzc2VkIGFzICdvbmUnIHdvcmQgd2l0aCBubyBzcGFjZXMKLSAgdGVzdG5hbWVfYW5kX3N0YXR1cyBwYXJhbWV0ZXIgY2FuIGJlIG92ZXJsb2FkZWQgYnkgc3BlY2lmeWluZyBtdWx0aXBsZSAKKyAgdGVzdG5hbWVfYW5kX3N0YXR1cyBwYXJhbWV0ZXIgY2FuIGJlIG92ZXJsb2FkZWQgYnkgc3BlY2lmeWluZyBtdWx0aXBsZQogICB0ZXN0IG5hbWVzIGFuZCB0aGVpciBzdGF0dXMgaW4gdGhlIG9yZGVyOiB0ZXN0bmFtZSB0ZXN0c3RhdHVzCi0gIHRodXMsIHBhc3Npbmcgc3BhY2Ugc2VwZXJhdGVkIGFyZ3VtZW50IG1ha2VzIG1vcmUgc2Vuc2UgaGVyZS4gCisgIHRodXMsIHBhc3Npbmcgc3BhY2Ugc2VwZXJhdGVkIGFyZ3VtZW50IG1ha2VzIG1vcmUgc2Vuc2UgaGVyZS4KICAgLS0+CiAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0ZGVzYyIgdmFsdWU9ImRlZmF1bHQiLz4KICAgPHByb3BlcnR5IG5hbWU9InRlc3RuYW1lX2FuZF9zdGF0dXMiIHZhbHVlPSJkZWZhdWx0bmFtZSBkaWRfbm90X3J1biIvPgotICA8amF2YSAKKyAgPGphdmEKICAgICBjbGFzc25hbWU9ImNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuTG9vc2VSZXBvcnRlckNsaWVudCIKICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIj4KICAgICA8YXJnIGxpbmU9IiR7dGVzdGRlc2N9Ii8+CkBAIC0xNjczLDcgKzE2NzMsNyBAQAogPCEtLSBFbmQgUmVwb3J0IFRhcmdldHMgLS0+CiAKIDx0YXJnZXQgbmFtZT0ibGlzdC1jb21wb25lbnRzLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIAorICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iCiAgICAgICAgIG91dHB1dHByb3BlcnR5PSJjb21wb25lbnRzLWxpc3QiIGZhaWxvbmVycm9yPSJmYWxzZSI+CiAKICAgICAgICAgPGFyZyBsaW5lPSJsaXN0LWNvbXBvbmVudHMiLz4KQEAgLTE2ODIsNyArMTY4Miw3IEBACiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJzaG93LWNvbXBvbmVudC1zdGF0dXMtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgb3V0cHV0cHJvcGVydHk9ImNvbXBvbmVudC1zdGF0dXMiIAorICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIG91dHB1dHByb3BlcnR5PSJjb21wb25lbnQtc3RhdHVzIgogICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgICAgICA8YXJnIGxpbmU9InNob3ctY29tcG9uZW50LXN0YXR1cyIvPgogICAgICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+CkBAIC0xNzE4LDEzICsxNzE4LDEzIEBACiAKIDwhLS0gdXNhZ2UgIC0tPgogPHRhcmdldCBuYW1lPSJ1c2FnZS1jb21tb24iPgotICA8ZWNobz4gICAgICAgICAKKyAgPGVjaG8+CiAgICAgYW50IGNsZWFuICAgICAgICAgICBSZW1vdmUgYWxsIGNsYXNzZXMgZmlsZXMKICAgICBhbnQgYnVpbGQgICAgICAgICAgIEJ1aWxkIHRoZSBhcHBsaWNhdGlvbgogICAgIGFudCBkZXBsb3kgICAgICAgICAgRGVwbG95IHRoZSBlYXIgZmlsZXMgdG8gUzFBUwotICAgIGFudCBydW4JICAgICAgICAgICAgUnVuIHRoZSBhcHBsaWNhdGlvbgorICAgIGFudCBydW4gICAgICAgICAgICAgICAgUnVuIHRoZSBhcHBsaWNhdGlvbgogICAgIGFudCB1bmRlcGxveSAgICAgICAgVW5kZXBsb3kgdGhlIGVhciBmaWxlcyBmcm9tIFMxQVMKLSAgICBhbnQgdXNhZ2UgICAgICAgICAgIERpc3BsYXkgdGhpcyBtZXNzYWdlICAgICAgICAgICAgCisgICAgYW50IHVzYWdlICAgICAgICAgICBEaXNwbGF5IHRoaXMgbWVzc2FnZQogICA8L2VjaG8+CiA8L3RhcmdldD4KIApAQCAtMTc1NywyMSArMTc1NywyMSBAQAogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0ic2V0dXBUaW1lciIgZGVwZW5kcz0iaW5pdC1jb21tb24iIGlmPSJlZSI+Ci0JPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KLQk8YXJnIGxpbmU9ImNyZWF0ZS1yZXNvdXJjZS1yZWYiLz4KLSAgICAJPGFyZyBsaW5lPSItLXVzZXIgJHthZG1pbi51c2VyfSIvPgotCTxhcmcgbGluZT0iLS1wYXNzd29yZCAke2FkbWluLnBhc3N3b3JkfSIvPgotCTxhcmcgbGluZT0iLS1ob3N0ICR7YWRtaW4uaG9zdH0iLz4KLQk8YXJnIGxpbmU9Ii0tcG9ydCAke2FkbWluLnBvcnR9Ii8+Ci0JPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgotCTxhcmcgbGluZT0iJHtqZGJjLnJlc291cmNlLm5hbWV9Ii8+CisgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KKyAgICA8YXJnIGxpbmU9ImNyZWF0ZS1yZXNvdXJjZS1yZWYiLz4KKyAgICAgICAgPGFyZyBsaW5lPSItLXVzZXIgJHthZG1pbi51c2VyfSIvPgorICAgIDxhcmcgbGluZT0iLS1wYXNzd29yZCAke2FkbWluLnBhc3N3b3JkfSIvPgorICAgIDxhcmcgbGluZT0iLS1ob3N0ICR7YWRtaW4uaG9zdH0iLz4KKyAgICA8YXJnIGxpbmU9Ii0tcG9ydCAke2FkbWluLnBvcnR9Ii8+CisgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgorICAgIDxhcmcgbGluZT0iJHtqZGJjLnJlc291cmNlLm5hbWV9Ii8+CiA8L2V4ZWM+CiA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgotCTxhcmcgbGluZT0ic2V0Ii8+Ci0JPGFyZyBsaW5lPSItLXVzZXIgJHthZG1pbi51c2VyfSIvPgotCTxhcmcgbGluZT0iLS1wYXNzd29yZCAke2FkbWluLnBhc3N3b3JkfSIvPgotCTxhcmcgbGluZT0iLS1ob3N0ICR7YWRtaW4uaG9zdH0iLz4KLQk8YXJnIGxpbmU9Ii0tcG9ydCAke2FkbWluLnBvcnR9Ii8+CisgICAgPGFyZyBsaW5lPSJzZXQiLz4KKyAgICA8YXJnIGxpbmU9Ii0tdXNlciAke2FkbWluLnVzZXJ9Ii8+CisgICAgPGFyZyBsaW5lPSItLXBhc3N3b3JkICR7YWRtaW4ucGFzc3dvcmR9Ii8+CisgICAgPGFyZyBsaW5lPSItLWhvc3QgJHthZG1pbi5ob3N0fSIvPgorICAgIDxhcmcgbGluZT0iLS1wb3J0ICR7YWRtaW4ucG9ydH0iLz4KICAgICA8YXJnIGxpbmU9IiR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9LWNvbmZpZy5lamItY29udGFpbmVyLmVqYi10aW1lci1zZXJ2aWNlLnRpbWVyLWRhdGFzb3VyY2U9JHtqZGJjLnJlc291cmNlLm5hbWV9Ii8+CiA8L2V4ZWM+CiA8ZWNobyBtZXNzYWdlPSJjcmVhdGluZyB0aW1lciB0YWJsZSBmcm9tICR7ZW52LlMxQVNfSE9NRX0vbGliL2luc3RhbGwvZWpidGltZXJfJHtkYi50eXBlfSIvPgpAQCAtMTgxNCwxNyArMTgxNCwxNyBAQAogCiAKIDx0YXJnZXQgbmFtZT0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgotICA8ZWNobyBtZXNzYWdlPSJEb2luZyBhZG1pbiB0YXNrICR7YWRtaW4uY29tbWFuZH0gKGlnbm9yZSBmYWlsdXJlcykiIAorICA8ZWNobyBtZXNzYWdlPSJEb2luZyBhZG1pbiB0YXNrICR7YWRtaW4uY29tbWFuZH0gKGlnbm9yZSBmYWlsdXJlcykiCiAgICAgICBsZXZlbD0idmVyYm9zZSIvPgogICA8ZWNobyBtZXNzYWdlPSJPcGVyYW5kICR7b3BlcmFuZC5wcm9wc30iICBsZXZlbD0idmVyYm9zZSIvPgogICA8ZWNobyBtZXNzYWdlPSJhc2FkbWluICR7YWRtaW4uY29tbWFuZH0gJHthcy5wcm9wc30gJHtvcGVyYW5kLnByb3BzfSIvPgogICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+Ci0gICAgICAgIDxhcmcgbGluZT0iJHthZG1pbi5jb21tYW5kfSAke2FzLnByb3BzfSAke29wZXJhbmQucHJvcHN9IiAvPiAgICAgICAgCisgICAgICAgIDxhcmcgbGluZT0iJHthZG1pbi5jb21tYW5kfSAke2FzLnByb3BzfSAke29wZXJhbmQucHJvcHN9IiAvPgogICAgIDwvZXhlYz4KIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KLSAgPGVjaG8gbWVzc2FnZT0iRG9pbmcgYWRtaW4gYmF0Y2ggdGFzayAke2FkbWluLmNvbW1hbmR9IC0tZmlsZSIgCisgIDxlY2hvIG1lc3NhZ2U9IkRvaW5nIGFkbWluIGJhdGNoIHRhc2sgJHthZG1pbi5jb21tYW5kfSAtLWZpbGUiCiAgICAgICBsZXZlbD0idmVyYm9zZSIvPgogICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0idHJ1ZSI+CiAgICAgIDxlbnYga2V5PSJBU19BRE1JTl9QT1JUIiB2YWx1ZT0iJHthZG1pbi5wb3J0fSIvPgpAQCAtMTgzMiw4ICsxODMyLDggQEAKICAgICAgPGVudiBrZXk9IkFTX0FETUlOX1BBU1NXT1JEIiB2YWx1ZT0iJHthZG1pbi5wYXNzd29yZH0iLz4KICAgICAgPGVudiBrZXk9IkFTX0FETUlOX0hPU1QiIHZhbHVlPSIke2FkbWluLmhvc3R9Ii8+CiAgICAgIDxlbnYga2V5PSJBU19BRE1JTl9JTlNUQU5DRSIgdmFsdWU9IiR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+Ci0gICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0gCi0gICAgICAgICAgICAgICAgbXVsdGltb2RlIC0tZmlsZSAke2FzYWRtaW4uZmlsZX0iIC8+ICAgICAgICAKKyAgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfQorICAgICAgICAgICAgICAgIG11bHRpbW9kZSAtLWZpbGUgJHthc2FkbWluLmZpbGV9IiAvPgogICA8L2V4ZWM+CiA8L3RhcmdldD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25maWcvZWUtcHJvcGVydGllcy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbmZpZy9lZS1wcm9wZXJ0aWVzLnhtbAppbmRleCAwMWEzMjQ2Li45MWFmY2ViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbmZpZy9lZS1wcm9wZXJ0aWVzLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbmZpZy9lZS1wcm9wZXJ0aWVzLnhtbApAQCAtMTgsMjYgKzE4LDI2IEBACiAKIDxwcm9wZXJ0eSBlbnZpcm9ubWVudD0iZW52Ii8+CiAKLTx0YXJnZXQgbmFtZT0iaW5pdC1jb21tb24iIAotCWRlcGVuZHM9InNldGRlZmF1bHRtb2RlLCBzZXRUb29sUHJvcGVydHksc2V0UzFBU2NsYXNzUGF0aCxzZXRTMUFTODBjbGFzc1BhdGgsc2V0UzFXU2NsYXNzUGF0aCwKLQkJCXNldEpXU0RQY2xhc3NQYXRoLHNldFRpbWVTdGFtcCI+Cis8dGFyZ2V0IG5hbWU9ImluaXQtY29tbW9uIgorICAgIGRlcGVuZHM9InNldGRlZmF1bHRtb2RlLCBzZXRUb29sUHJvcGVydHksc2V0UzFBU2NsYXNzUGF0aCxzZXRTMUFTODBjbGFzc1BhdGgsc2V0UzFXU2NsYXNzUGF0aCwKKyAgICAgICAgICAgIHNldEpXU0RQY2xhc3NQYXRoLHNldFRpbWVTdGFtcCI+CiAKICAgICA8ZXhlYyBleGVjdXRhYmxlPSJ1bmFtZSIgb3V0cHV0cHJvcGVydHk9Imhvc3RuYW1lIj4KICAgICAgICA8YXJnIGxpbmU9Ii1uIi8+Ci0gICAgPC9leGVjPiAgICAKKyAgICA8L2V4ZWM+CiAgICAgPGV4ZWMgZXhlY3V0YWJsZT0idW5hbWUiIG91dHB1dHByb3BlcnR5PSJvc25hbWUiPgogICAgICAgIDxhcmcgbGluZT0iLXMiLz4KICAgICA8L2V4ZWM+Ci0gICAgCisKICAgIDxwcm9wZXJ0eSBuYW1lPSJwZSIgdmFsdWU9IlBsYXRmb3JtIEVkaXRpb24gb2YgUzFBUyIvPgogCiA8IS0tIEFwcHNlcnYgcHJvcGVydGllcyAtLT4KICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc3BhdGhzdWZmaXguZmlsZSIgdmFsdWU9ImNsYXNzcGF0aHN1ZmZpeC50eHQiLz4KICAgIDxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KICAgIDxwcm9wZXJ0eSBuYW1lPSJhcHB1c2VyIiB2YWx1ZT0iajJlZSIvPgotICAgPHByb3BlcnR5IG5hbWU9ImFwcHB3ZCIgdmFsdWU9ImoyZWUiLz4gICAKKyAgIDxwcm9wZXJ0eSBuYW1lPSJhcHBwd2QiIHZhbHVlPSJqMmVlIi8+CiAgICA8cHJvcGVydHkgbmFtZT0iYXV0aHJlYWxtbmFtZSIgdmFsdWU9ImZpbGUiLz4KLSAgIDxwcm9wZXJ0eSBuYW1lPSJzZXJ2ZXJpbnN0YW5jZS5uYW1lIiB2YWx1ZT0idGVzdC1zZXJ2ZXIiLz4gIAorICAgPHByb3BlcnR5IG5hbWU9InNlcnZlcmluc3RhbmNlLm5hbWUiIHZhbHVlPSJ0ZXN0LXNlcnZlciIvPgogICAgPGVjaG8gIGZpbGU9IiR7YWRtaW4ucGFzc3dvcmQuZmlsZX0iICBhcHBlbmQ9ImZhbHNlIi8+CiAgICA8cHJvcGVydHkgbmFtZT0iYXMucHJvcHMiCiAgICAgIHZhbHVlPSItLXVzZXIgJHthZG1pbi51c2VyfSAtLXBhc3N3b3JkZmlsZSAke2FkbWluLnBhc3N3b3JkLmZpbGV9IC0taG9zdCAke2FkbWluLmhvc3R9IC0tcG9ydCAke2FkbWluLnBvcnR9IC0tZWNobz10cnVlIC0tdGVyc2U9dHJ1ZSIvPgpAQCAtNTIsNyArNTIsNyBAQAogICAgIDxwcm9wZXJ0eSBuYW1lPSJqbXMuZmFjdG9yeS50eXBlIiB2YWx1ZT0iamFrYXJ0YS5qbXMuUXVldWVDb25uZWN0aW9uRmFjdG9yeSIvPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJqbXMucmVzb3VyY2UubmFtZSIgdmFsdWU9Imptcy9TYW1wbGVRdWV1ZSIvPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJqbXMucmVzb3VyY2UudHlwZSIgdmFsdWU9Impha2FydGEuam1zLlF1ZXVlIi8+Ci0gICAgPHByb3BlcnR5IG5hbWU9Imptcy5mYWN0b3J5LnR5cGUiIAorICAgIDxwcm9wZXJ0eSBuYW1lPSJqbXMuZmFjdG9yeS50eXBlIgogICAgICAgICAgICAgICB2YWx1ZT0iamFrYXJ0YS5qbXMuUXVldWVDb25uZWN0aW9uRmFjdG9yeSIgLz4KICAgICA8cHJvcGVydHkgbmFtZT0icXVldWUucHJvcGVydHkubmFtZSIgdmFsdWU9ImltcURlc3RpbmF0aW9uTmFtZSIgLz4KICAgICA8cHJvcGVydHkgbmFtZT0icXVldWUucHJvcGVydHkudmFsdWUiIHZhbHVlPSJTYW1wbGVRdWV1ZSIgLz4KQEAgLTgxLDcgKzgxLDcgQEAKICAgICA8cHJvcGVydHkgbmFtZT0ibXFhZG1pbi5wYXNzd29yZCIgdmFsdWU9ImFkbWluIi8+CiAKICAgICA8IS0tIHBvaW50YmFzZSBwcm9wZXJ0aWVzIC0tPgotICAgIDwhLS0gQ2hhbmdlZCB0byBkZXJieSBwcm9wZXJ0aWVzIAorICAgIDwhLS0gQ2hhbmdlZCB0byBkZXJieSBwcm9wZXJ0aWVzCiAgICAgPHByb3BlcnR5IGZpbGU9IiR7ZW52LkFQU19IT01FfS9kZXZ0ZXN0cy9qZGJjL2NvbmZpZy9wb2ludGJhc2UucHJvcGVydGllcyIvPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJkYi5yb290IiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9wb2ludGJhc2UiLz4KICAgICA8cHJvcGVydHkgbmFtZT0iZGIuY2xhc3NwYXRoIiB2YWx1ZT0iJHtkYi5yb290fS9saWIvcGJ0b29scy5qYXI6JHtkYi5yb290fS9saWIvcGJjbGllbnQuamFyOiR7ZGIucm9vdH0vbGliL3BiZW1iZWRkZWQuamFyIi8+LS0+CkBAIC05MSw3ICs5MSw3IEBACiAKIDwhLS0gVGVzdCBIYXJuZXNzIHByb3BlcnRpZXMgLS0+CiAgICAgPHByb3BlcnR5IG5hbWU9ImdsYXNzZmlzaC1hY2MueG1sIiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvY29uZmlnL2dsYXNzZmlzaC1hY2MueG1sIi8+Ci0gICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkLmJhc2UuZGlyIiAKKyAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQuYmFzZS5kaXIiCiAgICAgICAgIHZhbHVlPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvJHtleGVjdXRpb24ubW9kZX0vJHtvcy5hcmNofV8ke2hvc3RuYW1lfV8ke29zbmFtZX0vJHttb2R1bGV9Ii8+CiAgICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkLmNsYXNzZXMuZGlyIiB2YWx1ZT0iJHtidWlsZC5iYXNlLmRpcn0vY2xhc3NlcyIvPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZS5kaXIiIHZhbHVlPSIke2J1aWxkLmJhc2UuZGlyfS9hcmNoaXZlIi8+CkBAIC0xMTcsMTQgKzExNywxNCBAQAogICAgIDxwcm9wZXJ0eSBuYW1lPSJjb21wb25lbnQubmFtZSIgdmFsdWU9IiR7YXBwbmFtZX1BcHAiLz4KIAogICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmJhc2UiIHZhbHVlPSJwZSIvPgotICAgIDxwcm9wZXJ0eSBuYW1lPSJiYXNlLnJlcG9ydC5kaXIiIAotCXZhbHVlPSIke2Vudi5BUFNfSE9NRX0vcmVwb3J0cy8ke3Rlc3QuYmFzZX0tJHtleGVjdXRpb24ubW9kZX0iLz4KKyAgICA8cHJvcGVydHkgbmFtZT0iYmFzZS5yZXBvcnQuZGlyIgorICAgIHZhbHVlPSIke2Vudi5BUFNfSE9NRX0vcmVwb3J0cy8ke3Rlc3QuYmFzZX0tJHtleGVjdXRpb24ubW9kZX0iLz4KIDwhLS0KLSAgICA8cHJvcGVydHkgbmFtZT0icmVzdWx0cy5nb2xkZW4ubGlzdC5maWxlIiAKLQl2YWx1ZT0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkLWNvbmZpZy9yZXN1bHRzX2Jhc2VsaW5lLnByb3BlcnRpZXMiLz4KKyAgICA8cHJvcGVydHkgbmFtZT0icmVzdWx0cy5nb2xkZW4ubGlzdC5maWxlIgorICAgIHZhbHVlPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQtY29uZmlnL3Jlc3VsdHNfYmFzZWxpbmUucHJvcGVydGllcyIvPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJyZXN1bHRzLmFuYWx5c2lzLmZpbGUiIHZhbHVlPSJ0ZXN0X2FuYWx5c2lzIi8+Ci0gICAgPHByb3BlcnR5IG5hbWU9InJlc3VsdHMubGlzdC5maWxlIiAKLQl2YWx1ZT0iJHtlbnYuclBTX0hPTUV9L2J1aWxkLWNvbmZpZy9yZXN1bHRzLnByb3BlcnRpZXMiLz4KKyAgICA8cHJvcGVydHkgbmFtZT0icmVzdWx0cy5saXN0LmZpbGUiCisgICAgdmFsdWU9IiR7ZW52LnJQU19IT01FfS9idWlsZC1jb25maWcvcmVzdWx0cy5wcm9wZXJ0aWVzIi8+CiAgICAgPHByb3BlcnR5IG5hbWU9InJlc3VsdHMuc3VtbWFyeS5maWxlIiB2YWx1ZT0ic3VtbWFyeXJlcG9ydCIvPgogLS0+CiA8IS0tIFRlc3QgSGFybmVzcyBwcm9wZXJ0aWVzIGZvciBXZWJUZXN0ID09PT09PT09PT09PSAtLT4KQEAgLTE1MSw4ICsxNTEsOCBAQAogICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuQVBTX0hPTUV9L2xpYiIgaW5jbHVkZXM9IioqLyouamFyLCoqLyouemlwIi8+CiAgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5BTlRfSE9NRX0vbGliIiBpbmNsdWRlcz0iKi5qYXIiLz4KICAgPC9wYXRoPgotICA8cGF0aGNvbnZlcnQgcGF0aHNlcD0iOiIgCi0gICAgcHJvcGVydHk9InMxYXMuY2xhc3NwYXRoIiAKKyAgPHBhdGhjb252ZXJ0IHBhdGhzZXA9IjoiCisgICAgcHJvcGVydHk9InMxYXMuY2xhc3NwYXRoIgogICAgIHJlZmlkPSJzMWFzX2NsYXNzcGF0aF9qYXJzIi8+CiA8L3RhcmdldD4KIApAQCAtMTY5LDExICsxNjksMTEgQEAKIAogPHRhcmdldCBuYW1lPSJzZXRTMVdTY2xhc3NQYXRoIiBpZj0iaXNTMVdTIj4KICAgPHBhdGggaWQ9InMxd3NfY2xhc3NwYXRoX2phcnMiPgotICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuSVdTX1NFUlZFUl9IT01FfS9iaW4vaHR0cHMvamFyIiAKKyAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LklXU19TRVJWRVJfSE9NRX0vYmluL2h0dHBzL2phciIKIGluY2x1ZGVzPSIqLmphciIvPgogICA8L3BhdGg+Ci0gIDxwYXRoY29udmVydCBwYXRoc2VwPSI6IiAKLSAgICBwcm9wZXJ0eT0iczF3cy5jbGFzc3BhdGgiIAorICA8cGF0aGNvbnZlcnQgcGF0aHNlcD0iOiIKKyAgICBwcm9wZXJ0eT0iczF3cy5jbGFzc3BhdGgiCiAgICAgcmVmaWQ9InMxd3NfY2xhc3NwYXRoX2phcnMiLz4KIDwvdGFyZ2V0PgogCkBAIC0xODcsMTEgKzE4NywxMSBAQAogICAgIHJlZmlkPSJqd3NkcF9jbGFzc3BhdGhfamFycyIvPgogPC90YXJnZXQ+CiAKLTx0YXJnZXQgbmFtZT0ic2V0VG9vbFByb3BlcnR5IiAKKzx0YXJnZXQgbmFtZT0ic2V0VG9vbFByb3BlcnR5IgogICBkZXBlbmRzPSJzZXRPU0NvbmRpdGlvbnMsc2V0VG9vbFdpbixzZXRUb29sVW5peCI+CiA8L3RhcmdldD4KIAotPHRhcmdldCBuYW1lPSJzZXRPU0NvbmRpdGlvbnMiPiAgCis8dGFyZ2V0IG5hbWU9InNldE9TQ29uZGl0aW9ucyI+CiAgIDxjb25kaXRpb24gcHJvcGVydHk9ImlzVW5peCI+CiAgICAgPG9zIGZhbWlseT0idW5peCIvPgogICA8L2NvbmRpdGlvbj4KQEAgLTIwMCw3ICsyMDAsNyBAQAogICA8L2NvbmRpdGlvbj4KIDwvdGFyZ2V0PgogCi08dGFyZ2V0IG5hbWU9InNldFRvb2xXaW4iIGlmPSJpc1dpbmRvd3MiPiAgCis8dGFyZ2V0IG5hbWU9InNldFRvb2xXaW4iIGlmPSJpc1dpbmRvd3MiPgogICA8cHJvcGVydHkgbmFtZT0iQVBQQ0xJRU5UIiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vYXBwY2xpZW50LmJhdCIvPgogICA8cHJvcGVydHkgbmFtZT0iQVNBRE1JTiIgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL2FzYWRtaW4uYmF0Ii8+CiAgIDxwcm9wZXJ0eSBuYW1lPSJJTVFDTUQiIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2ltcS9iaW4vaW1xY21kLmV4ZSIvPgpAQCAtMjE4LDcgKzIxOCw3IEBACiAgIDxwcm9wZXJ0eSBuYW1lPSJXU0NPTVBJTEUiIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi93c2NvbXBpbGUuYmF0Ii8+CiA8L3RhcmdldD4KIAotPHRhcmdldCBuYW1lPSJzZXRUb29sVW5peCIgaWY9ImlzVW5peCI+ICAKKzx0YXJnZXQgbmFtZT0ic2V0VG9vbFVuaXgiIGlmPSJpc1VuaXgiPgogICA8cHJvcGVydHkgbmFtZT0iQVBQQ0xJRU5UIiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vYXBwY2xpZW50Ii8+CiAgIDxwcm9wZXJ0eSBuYW1lPSJBU0FETUlOIiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vYXNhZG1pbiIvPgogICA8cHJvcGVydHkgbmFtZT0iSU1RQ01EIiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9pbXEvYmluL2ltcWNtZCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25maWcvbWFpbC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbmZpZy9tYWlsLnhtbAppbmRleCA2NmI3ZmU1Li40Y2IzMmQ1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbmZpZy9tYWlsLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbmZpZy9tYWlsLnhtbApAQCAtMjIsMTEgKzIyLDExIEBACiA8cHJvcGVydHkgbmFtZT0ibWFpbC5ob3N0IiB2YWx1ZT0iaGEyMXNjYS1tYWlsMS5zZmJheS5zdW4uY29tIi8+CiA8cHJvcGVydHkgbmFtZT0ibWFjaGluZS5jb25maWciIHZhbHVlPSJkZWZhdWx0XyR7b3MubmFtZX1fJHtvcy5hcmNofSIgLz4KIDx0YXJnZXQgbmFtZT0ibWFpbCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCTxtYWlsIGZyb209IiR7cmVzdWx0cy5tYWlsZXJ9IiB0b2xpc3Q9IiR7cmVzdWx0cy5tYWlsZWV9IgotCQlzdWJqZWN0PSJUZXN0IHJlc3VsdHMgZm9yICR7bWFjaGluZS5jb25maWd9IgotCQltYWlsaG9zdD0iJHttYWlsLmhvc3R9IgotCQltZXNzYWdlPSJZZWggbG8gcmVzdWx0cy4uLiI+ICAgICAgICAgICAgICAgIAotCTxmaWxlc2V0IGRpcj0iJHtlbnYuU1BTX0hPTUV9IiAgCisgICAgPG1haWwgZnJvbT0iJHtyZXN1bHRzLm1haWxlcn0iIHRvbGlzdD0iJHtyZXN1bHRzLm1haWxlZX0iCisgICAgICAgIHN1YmplY3Q9IlRlc3QgcmVzdWx0cyBmb3IgJHttYWNoaW5lLmNvbmZpZ30iCisgICAgICAgIG1haWxob3N0PSIke21haWwuaG9zdH0iCisgICAgICAgIG1lc3NhZ2U9IlllaCBsbyByZXN1bHRzLi4uIj4KKyAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LlNQU19IT01FfSIKICAgICAgICAgaW5jbHVkZXM9InRlc3RfcmVzdWx0cy5odG1sIi8+Ci0JPC9tYWlsPgorICAgIDwvbWFpbD4KIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uY3JlYXRpb25yZXRyeS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uY3JlYXRpb25yZXRyeS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGIxYjFmYWUuLjg2NTNlZjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmNyZWF0aW9ucmV0cnkvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5jcmVhdGlvbnJldHJ5L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE5ICsxNSwxOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iamRiYy1jb25uZWN0aW9uY3JlYXRpb25yZXRyeSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9InBvb2xuYW1lIiB2YWx1ZT0iamRiYy1jb25uZWN0aW9uY3JlYXRpb25yZXRyeSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uY3JlYXRpb25yZXRyeS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5jcmVhdGlvbnJldHJ5L2J1aWxkLnhtbAppbmRleCBkYzI1MjIwLi5jMmZkMDg4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5jcmVhdGlvbnJldHJ5L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5jcmVhdGlvbnJldHJ5L2J1aWxkLnhtbApAQCAtMjIsOCArMjIsOCBAQAogICAgICAgICA8IUVOVElUWSBjb21tb25CdWlsZCBTWVNURU0gIi4vLi4vLi4vLi4vY29uZmlnL2NvbW1vbi54bWwiPgogICAgICAgICA8IUVOVElUWSB0ZXN0cHJvcGVydGllcyBTWVNURU0gIi4vYnVpbGQucHJvcGVydGllcyI+CiAgICAgICAgIDwhRU5USVRZIHJ1biBTWVNURU0gIi4vLi4vLi4vLi4vY29uZmlnL3J1bi54bWwiPgotCTwhRU5USVRZIGpkYmN4bWwgU1lTVEVNICIuLy4uL0pkYmNDb21tb24ueG1sIj4KLQk8IUVOVElUWSBqZGJjUHJvcHMgU1lTVEVNICIuLy4uL0pkYmNDb21tb24ucHJvcGVydGllcyI+CisgICAgPCFFTlRJVFkgamRiY3htbCBTWVNURU0gIi4vLi4vSmRiY0NvbW1vbi54bWwiPgorICAgIDwhRU5USVRZIGpkYmNQcm9wcyBTWVNURU0gIi4vLi4vSmRiY0NvbW1vbi5wcm9wZXJ0aWVzIj4KICAgICAgICAgXT4KIAogPHByb2plY3QgbmFtZT0ibWl4IiBkZWZhdWx0PSJ1c2FnZSIgYmFzZWRpcj0iLiI+CkBAIC03MSwxMyArNzEsMTMgQEAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InN0b3AtZGVyYnkiLz4KIAotCTxwYXJhbGxlbD4KLSAgICAgICAgCTxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgotCQk8c2VxdWVudGlhbD4KLQkJCTxzbGVlcCBzZWNvbmRzPSIxNSIvPgotCQkJPGFudGNhbGwgdGFyZ2V0PSJzdGFydC1kZXJieSIvPgotCQk8L3NlcXVlbnRpYWw+Ci0JPC9wYXJhbGxlbD4KKyAgICA8cGFyYWxsZWw+CisgICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KKyAgICAgICAgPHNlcXVlbnRpYWw+CisgICAgICAgICAgICA8c2xlZXAgc2Vjb25kcz0iMTUiLz4KKyAgICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic3RhcnQtZGVyYnkiLz4KKyAgICAgICAgPC9zZXF1ZW50aWFsPgorICAgIDwvcGFyYWxsZWw+CiAKICAgICA8L3RhcmdldD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uY3JlYXRpb25yZXRyeS9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5jcmVhdGlvbnJldHJ5L2NsaWVudC9DbGllbnQuamF2YQppbmRleCBkZmYwNDVhLi43ZWMzODgwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5jcmVhdGlvbnJldHJ5L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5jcmVhdGlvbnJldHJ5L2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzYsMTIgKzM2LDEyIEBACiAgICAgICAgICAgICAgICAgamF2YXgucm1pLlBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpSZWYsIFNpbXBsZUJNUEhvbWUuY2xhc3MpOwogCiAgICAgICAgIFNpbXBsZUJNUCBjb252YWxCTVAgPSBjb252YWxCTVBIb21lLmNyZWF0ZSgpOwotCXN0YXQuYWRkRGVzY3JpcHRpb24oIkNvbm5lY3Rpb24gQ3JlYXRpb24gUmV0cnkgVGVzdHMiKTsKKyAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJDb25uZWN0aW9uIENyZWF0aW9uIFJldHJ5IFRlc3RzIik7CiAKICAgICAgICAgaWYgKGNvbnZhbEJNUC50ZXN0MSgpKSB7Ci0gICAgICAgIAlzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAidGVzdCAiLCBzdGF0LlBBU1MpOworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgInRlc3QgIiwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgCXN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICJ0ZXN0ICIsIHN0YXQuRkFJTCk7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAidGVzdCAiLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uY3JlYXRpb25yZXRyeS9lamIvU2ltcGxlQk1QQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uY3JlYXRpb25yZXRyeS9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCmluZGV4IGNkMWQ4OTguLjVkMWI0NjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmNyZWF0aW9ucmV0cnkvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5jcmVhdGlvbnJldHJ5L2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKQEAgLTQxLDcgKzQxLDcgQEAKICAgICB9CiAKIAotICAgCisKIC8qIEdldCBhIHNpbmdsZSBjb25uZWN0aW9uIGFuZCBjbG9zZSBpdCAqLwogICAgIHB1YmxpYyBib29sZWFuIHRlc3QxKCl7CiAgICAgICAgIENvbm5lY3Rpb24gY29ubiA9IG51bGw7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5jcmVhdGlvbnJldHJ5L3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmNyZWF0aW9ucmV0cnkvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IGU0OTE0ZjYuLmYyNTYwNzYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmNyZWF0aW9ucmV0cnkvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmNyZWF0aW9ucmV0cnkvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDcgKzEsNyBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KLQ0KLUNSRUFURSBUQUJMRSBPX0N1c3RvbWVyICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOworCitDUkVBVEUgVEFCTEUgT19DdXN0b21lciAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5jcmVhdGlvbnJldHJ5L3NxbC9kcm9wX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5jcmVhdGlvbnJldHJ5L3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggNzBkMWZjYy4uZDg1NGI5NSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uY3JlYXRpb25yZXRyeS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmNyZWF0aW9ucmV0cnkvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbApAQCAtMSArMSBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmVjdGlvbi1wb29sLXBlcmYvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmVjdGlvbi1wb29sLXBlcmYvYnVpbGQucHJvcGVydGllcwppbmRleCA0OTU5ODg1Li4wMjFkNzRjIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5lY3Rpb24tcG9vbC1wZXJmL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uZWN0aW9uLXBvb2wtcGVyZi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOSArMTUsMTkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1ibXAtc3RhdGVtZW50d3JhcHBlciIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5lY3Rpb24tcG9vbC1wZXJmL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmVjdGlvbi1wb29sLXBlcmYvYnVpbGQueG1sCmluZGV4IDI3ZDU4ZWMuLjY3NWQ3NTggMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmVjdGlvbi1wb29sLXBlcmYvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmVjdGlvbi1wb29sLXBlcmYvYnVpbGQueG1sCkBAIC00Miw3ICs0Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC01NCwxMyArNTQsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqL1NpbXBsZUJNUC5jbGFzcywgKiovU2ltcGxlQk1QSG9tZS5jbGFzcywqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KQEAgLTc2LDcgKzc2LDcgQEAKIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KQEAgLTkwLDcgKzkwLDcgQEAKIAogICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgotICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiAKKyAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKICAgICAgICAgICAgICAgICAgICAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5xbC1qZGJjLXBvb2wuc3RlYWR5X3Bvb2xfc2l6ZT0ke3N0ZWFkeS1wb29sLXNpemV9Ii8+CiAgICAgICAgICAgICA8L2FudGNhbGw+CiAKQEAgLTEyNCwxNCArMTI0LDE0IEBACiAKIAogICAgIDwvdGFyZ2V0PgotPHRhcmdldCBuYW1lPSJzd2l0Y2gtb24tbW9uaXRvcmluZyI+IAorPHRhcmdldCBuYW1lPSJzd2l0Y2gtb24tbW9uaXRvcmluZyI+CiA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0ic2VydmVyLm1vbml0b3Jpbmctc2VydmljZS5tb2R1bGUtbW9uaXRvcmluZy1sZXZlbHMuamRiYy1jb25uZWN0aW9uLXBvb2w9SElHSCIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci08dGFyZ2V0IG5hbWU9InN3aXRjaC1vZmYtbW9uaXRvcmluZyI+IAorPHRhcmdldCBuYW1lPSJzd2l0Y2gtb2ZmLW1vbml0b3JpbmciPgogPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCkBAIC0xNDUsNyArMTQ1LDcgQEAKIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qZGJjLWNvbW1vbiIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uZWN0aW9uLXBvb2wtcGVyZi9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5lY3Rpb24tcG9vbC1wZXJmL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQppbmRleCBhM2I1ODU1Li5jOGI5ZTZlIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5lY3Rpb24tcG9vbC1wZXJmL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5lY3Rpb24tcG9vbC1wZXJmL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQpAQCAtMzQsNyArMzQsNyBAQAogCiAKIHB1YmxpYyBjbGFzcyBTaW1wbGVCTVBDbGllbnQgewotIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgbG9uZyBjb3VudCA9IDA7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgT2JqZWN0IGxvY2sgPSBuZXcgSW50ZWdlcigxMCk7CiAgICAgcHJpdmF0ZSBsb25nIHRvdGFsSXRlcmF0aW9ucyA9IDA7CkBAIC04NCw3ICs4NCw3IEBACiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGhyZWFkcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgdGhyZWFkc1tpXS5zdGFydCgpOwogICAgICAgICB9Ci0vLyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGFydGVkIGF0IDogIiArIAorLy8gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhcnRlZCBhdCA6ICIgKwogCiAgICAgICAgIFRpbWVyVGFzayB0YXNrID0gbmV3IFRpbWVyVGFzaygpIHsKICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKQEAgLTEwMiw3ICsxMDIsNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUb3RhbCBnZXRDb25uZWN0aW9uKCkgOiAiICsgdG90YWxDb3VudCArICIsIG1vbml0b3JpbmctY291bnQgOiAiICsgbW9uaXRvcmluZ0NvdW50KTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKLSAgICAgIAorCiAgICAgICAgICAgICBpZih0b3RhbENvdW50ID09IG1vbml0b3JpbmdDb3VudCl7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiBQZXJmLXRlc3QgOiAiLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfWVsc2V7CkBAIC0xMTIsNyArMTEyLDcgQEAKICAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKLSAgICAgICAgICAgCisKICAgICAgICAgICAgIH0KICAgICAgICAgfTsKICAgICAgICAgVGltZXIgdGltZXIgPSBuZXcgVGltZXIoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmVjdGlvbi1wb29sLXBlcmYvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uZWN0aW9uLXBvb2wtcGVyZi9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggZGQ0YzVlNS4uMTFlNjFlZSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uZWN0aW9uLXBvb2wtcGVyZi9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uZWN0aW9uLXBvb2wtcGVyZi9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsMTAgKzEsMTAgQEAKLQ0KLURyb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyOw0KLQ0KLUNSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXIgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCi1JTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXIgVkFMVUVTKDEsICd3eHl6Jyk7DQorCitEcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjsKKworQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlciAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCitJTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXIgVkFMVUVTKDEsICd3eHl6Jyk7CiBJTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXIgVkFMVUVTKDIsICdwcXJzJyk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25ubGVha3JlY2xhaW1ub3RpZnkvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmxlYWtyZWNsYWltbm90aWZ5L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMDVhMjljYS4uMzdlM2NhNiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25ubGVha3JlY2xhaW1ub3RpZnkvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5sZWFrcmVjbGFpbW5vdGlmeS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOSArMTUsMTkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1ibXAtc3RhdGVtZW50d3JhcHBlciIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iMTIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmxlYWtyZWNsYWltbm90aWZ5L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmxlYWtyZWNsYWltbm90aWZ5L2J1aWxkLnhtbAppbmRleCA5Y2Q2MDYxLi5iN2NhMDZjIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5sZWFrcmVjbGFpbW5vdGlmeS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25ubGVha3JlY2xhaW1ub3RpZnkvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OCwxMyArNDgsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqL1NpbXBsZUJNUC5jbGFzcywgKiovU2ltcGxlQk1QSG9tZS5jbGFzcywqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KQEAgLTgwLDcgKzgwLDcgQEAKIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+Ci0JPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCisgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCiAgICAgICAgICAgICAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLnFsLWpkYmMtcG9vbC5jb25uZWN0aW9uX2xlYWtfdGltZW91dF9pbl9zZWNvbmRzPTEwIi8+CiAgICAgICA8L2FudGNhbGw+CiAKQEAgLTkxLDExICs5MSwxMSBAQAogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX3BvaW50YmFzZS5zcWwiLz4KQEAgLTEwMyw3ICsxMDMsNyBAQAogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWpkYmMtY29tbW9uIi8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5sZWFrcmVjbGFpbW5vdGlmeS9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5sZWFrcmVjbGFpbW5vdGlmeS9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKaW5kZXggYTlhODdlMy4uNWUzZDViZiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25ubGVha3JlY2xhaW1ub3RpZnkvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmxlYWtyZWNsYWltbm90aWZ5L2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQpAQCAtMjcsMjEgKzI3LDIxIEBACiBwdWJsaWMgY2xhc3MgU2ltcGxlQk1QQ2xpZW50IHsKIAogCi0gICAgcHVibGljIHN0YXRpYyBpbnQgTk9fT0ZfVEhSRUFEUyA9IDIwOyAKKyAgICBwdWJsaWMgc3RhdGljIGludCBOT19PRl9USFJFQURTID0gMjA7CiAgICAgcHVibGljIGludCBmYWlsZWRDb3VudCA9IDA7CiAKICAgICBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKICAgICBTdHJpbmcgdGVzdFN1aXRlID0gIkNvbm5lY3Rpb25MZWFrUmVjbGFpbSAiOwogICAgIHB1YmxpYyBTaW1wbGVCTVBDbGllbnQoKXsKLQlleGVjdXRlKCk7CisgICAgZXhlY3V0ZSgpOwogICAgIH0KIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQluZXcgU2ltcGxlQk1QQ2xpZW50KCk7CisgICAgbmV3IFNpbXBsZUJNUENsaWVudCgpOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBleGVjdXRlKCkgewotCXN0YXQuYWRkRGVzY3JpcHRpb24oIkNvbm5lY3Rpb24gTGVhayBSZWNsYWltIE5vdGlmeSBUZXN0cyIpOworICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIkNvbm5lY3Rpb24gTGVhayBSZWNsYWltIE5vdGlmeSBUZXN0cyIpOwogICAgICAgICBXb3JrZXJUaHJlYWQgd29ya2Vyc1tdID0gbmV3IFdvcmtlclRocmVhZFtOT19PRl9USFJFQURTXTsKICAgICAgICAgICAgZm9yKGludCBpPTA7IGk8IHdvcmtlcnMubGVuZ3RoO2krKyl7CiAgICAgICAgICAgICAgICB3b3JrZXJzW2ldID0gbmV3IFdvcmtlclRocmVhZCgpOwpAQCAtNjAsMTEgKzYwLDExIEBACiAgICAgICAgIGZvcihpbnQgaT0wOyBpPHdvcmtlcnMubGVuZ3RoO2krKyl7CiAgICAgICAgICAgICB3b3JrZXJzW2ldLnNldEV4aXQodHJ1ZSk7CiAgICAgICAgIH0KLQlpZihmYWlsZWRDb3VudCA+IDApIHsKLSAgCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAidGVzdDEgOiAiLCBzdGF0LkZBSUwpOwotCX0gZWxzZSB7Ci0gIAkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgInRlc3QxIDogIiwgc3RhdC5QQVNTKTsKLQl9ICAgIAorICAgIGlmKGZhaWxlZENvdW50ID4gMCkgeworICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICJ0ZXN0MSA6ICIsIHN0YXQuRkFJTCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAidGVzdDEgOiAiLCBzdGF0LlBBU1MpOworICAgIH0KICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKQEAgLTg4LDcgKzg4LDcgQEAKICAgICAgICAgICAgICAgICBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ialJlZiwgU2ltcGxlQk1QSG9tZS5jbGFzcyk7CiAKICAgICAgICAgICAgICAgICBTaW1wbGVCTVAgc2ltcGxlQk1QID0gc2ltcGxlQk1QSG9tZS5jcmVhdGUoKTsKLQkJdGVzdChzaW1wbGVCTVApOworICAgICAgICB0ZXN0KHNpbXBsZUJNUCk7CiAgICAgICAgICAgICB9Y2F0Y2goRXhjZXB0aW9uIGUpewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhyZWFkIDogIiArIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0TmFtZSgpICsgImRpZCBub3QgcnVuICIpOwogICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CkBAIC05NywxMCArOTcsMTAgQEAKICAgICAgICAgfQogCiAgICAgICAgIHB1YmxpYyBib29sZWFuIHRlc3QoU2ltcGxlQk1QIGJtcCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbnsKLQkgICAgaWYoICEgYm1wLnRlc3QxKCkpIHsKLQkJU2ltcGxlQk1QQ2xpZW50LnRoaXMuZmFpbGVkQ291bnQrKzsKLQkgICAgfQotCSAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYoICEgYm1wLnRlc3QxKCkpIHsKKyAgICAgICAgU2ltcGxlQk1QQ2xpZW50LnRoaXMuZmFpbGVkQ291bnQrKzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25ubGVha3JlY2xhaW1ub3RpZnkvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmxlYWtyZWNsYWltbm90aWZ5L2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggOTUxZWY5Mi4uYWRkZDAzYSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25ubGVha3JlY2xhaW1ub3RpZnkvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5sZWFrcmVjbGFpbW5vdGlmeS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC01Miw2ICs1Miw2IEBACiAgICAgICA8dHJhbnMtYXR0cmlidXRlPlJlcXVpcmVkPC90cmFucy1hdHRyaWJ1dGU+CiAgICAgPC9jb250YWluZXItdHJhbnNhY3Rpb24+CiAgIDwvYXNzZW1ibHktZGVzY3JpcHRvcj4KLSAgICAgIAorCiA8L2VqYi1qYXI+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmxlYWtyZWNsYWltbm90aWZ5L2VqYi9TaW1wbGVCTVBCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5sZWFrcmVjbGFpbW5vdGlmeS9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCmluZGV4IDQ4NTcyNjkuLjQwMzI4OGIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmxlYWtyZWNsYWltbm90aWZ5L2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25ubGVha3JlY2xhaW1ub3RpZnkvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQpAQCAtMjksNyArMjksNyBAQAogICAgIHByaXZhdGUgdHJhbnNpZW50IGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0IG1fY3R4ID0gbnVsbDsKIAogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IGNvbnRleHQpIHsKLQltX2N0eCA9IGNvbnRleHQ7CisgICAgbV9jdHggPSBjb250ZXh0OwogICAgIH0KIAogICAgIHB1YmxpYyBJbnRlZ2VyIGVqYkNyZWF0ZSgpIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewpAQCAtNDIsMjYgKzQyLDI2IEBACiAgICAgICAgIENvbm5lY3Rpb24gY29ubiA9IG51bGw7CiAgICAgICAgIGJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKICAgICAgICAgQ29udGV4dCBjb250ZXh0ID0gbnVsbDsKLQlsb25nIHN0YXJ0VGltZSA9IDAsIGVuZFRpbWUgPSAwLCB0aW1lVGFrZW4gPTA7CisgICAgbG9uZyBzdGFydFRpbWUgPSAwLCBlbmRUaW1lID0gMCwgdGltZVRha2VuID0wOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgY29udGV4dCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgZHMgPSAoRGF0YVNvdXJjZSkgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvamRiYy9EYXRhU291cmNlIik7CiAgICAgICAgIH0gY2F0Y2goTmFtaW5nRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJjYW50IGZpbmQgZGF0YXNvdXJjZSIpOwogICAgICAgICB9Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAgICAgICAgICAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCSAgICBlbmRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgICAgIGVuZFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBwYXNzZWQgPSBmYWxzZTsKLSAgICAgICAgfSAKLQl0aW1lVGFrZW4gPSAoZW5kVGltZS1zdGFydFRpbWUpLzEwMDA7CisgICAgICAgIH0KKyAgICB0aW1lVGFrZW4gPSAoZW5kVGltZS1zdGFydFRpbWUpLzEwMDA7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigicHJlcGFyZWRTdG10VGVzdCA6IFRpbWVUYWtlbiA6ICIgKyB0aW1lVGFrZW4pOwotCWlmKHRpbWVUYWtlbiA+IDU5KSB7Ci0JICAgIHBhc3NlZCA9IGZhbHNlOwotCX0KKyAgICBpZih0aW1lVGFrZW4gPiA1OSkgeworICAgICAgICBwYXNzZWQgPSBmYWxzZTsKKyAgICB9CiAgICAgICAgIHJldHVybiBwYXNzZWQ7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5sZWFrcmVjbGFpbW5vdGlmeS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5sZWFrcmVjbGFpbW5vdGlmeS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggZTQ5MTRmNi4uZjI1NjA3NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25ubGVha3JlY2xhaW1ub3RpZnkvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmxlYWtyZWNsYWltbm90aWZ5L3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSw3ICsxLDcgQEAKLURyb3AgdGFibGUgT19DdXN0b21lcjsNCi0NCi1DUkVBVEUgVEFCTEUgT19DdXN0b21lciAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikNCi0pOw0KLQ0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKKworQ1JFQVRFIFRBQkxFIE9fQ3VzdG9tZXIgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQorKTsKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25ubGVha3JlY2xhaW1ub3RpZnkvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmxlYWtyZWNsYWltbm90aWZ5L3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggNzBkMWZjYy4uZDg1NGI5NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25ubGVha3JlY2xhaW1ub3RpZnkvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5sZWFrcmVjbGFpbW5vdGlmeS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xICsxIEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25ubGVha3RyYWNpbmcvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmxlYWt0cmFjaW5nL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYzRjYmVkMC4uNjE5ODZkNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25ubGVha3RyYWNpbmcvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5sZWFrdHJhY2luZy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOSArMTUsMTkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImpkYmMtY29ubmVjdGlvbmxlYWt0cmFjaW5nIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0icG9vbG5hbWUiIHZhbHVlPSJqZGJjLWNvbm5lY3Rpb25sZWFrdHJhY2luZyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25ubGVha3RyYWNpbmcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25ubGVha3RyYWNpbmcvYnVpbGQueG1sCmluZGV4IDUyNTc4N2QuLjRmNmM3MjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmxlYWt0cmFjaW5nL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5sZWFrdHJhY2luZy9idWlsZC54bWwKQEAgLTE5LDkgKzE5LDkgQEAKIC0tPgogCiAgICAgICAgIDwhRU5USVRZIGNvbW1vblNldHVwIFNZU1RFTSAiLi8uLi8uLi8uLi9jb25maWcvcHJvcGVydGllcy54bWwiPgotCTwhRU5USVRZIGNvbW1vbkJ1aWxkIFNZU1RFTSAiLi8uLi8uLi8uLi9jb25maWcvY29tbW9uLnhtbCI+CisgICAgPCFFTlRJVFkgY29tbW9uQnVpbGQgU1lTVEVNICIuLy4uLy4uLy4uL2NvbmZpZy9jb21tb24ueG1sIj4KICAgICAgICAgPCFFTlRJVFkgdGVzdHByb3BlcnRpZXMgU1lTVEVNICIuL2J1aWxkLnByb3BlcnRpZXMiPgotCTwhRU5USVRZIHJ1biBTWVNURU0gIi4vLi4vY29uZmlnL3J1bi54bWwiPgorICAgIDwhRU5USVRZIHJ1biBTWVNURU0gIi4vLi4vY29uZmlnL3J1bi54bWwiPgogICAgICAgICBdPgogCiA8cHJvamVjdCBuYW1lPSJtaXgiIGRlZmF1bHQ9InVzYWdlIiBiYXNlZGlyPSIuIj4KQEAgLTUxLDkgKzUxLDkgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKLQkJICAgIHZhbHVlPSIqKi9lamIvKi5jbGFzcyIvPgorICAgICAgICAgICAgdmFsdWU9IioqL2VqYi8qLmNsYXNzIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCi0JCSAgICB2YWx1ZT0iKiovU2ltcGxlQk1QLmNsYXNzLCAqKi9TaW1wbGVCTVBIb21lLmNsYXNzLCoqLypDbGllbnQqLmNsYXNzIi8+CisgICAgICAgICAgICB2YWx1ZT0iKiovU2ltcGxlQk1QLmNsYXNzLCAqKi9TaW1wbGVCTVBIb21lLmNsYXNzLCoqLypDbGllbnQqLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgIDwvdGFyZ2V0PgpAQCAtNjcsNyArNjcsNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogCiAgICAgPC90YXJnZXQ+CiAKQEAgLTc3LDcgKzc3LDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX3BvaW50YmFzZS5zcWwiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLXN0dWZmIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5sZWFrdHJhY2luZy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5sZWFrdHJhY2luZy9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggNjcxYzY4Yy4uMDgyZjQzMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25ubGVha3RyYWNpbmcvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmxlYWt0cmFjaW5nL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzIsMjAgKzMyLDIwIEBACiAgICAgICAgIFN0cmluZyB0ZXN0U3VpdGUgPSAiQ29ubmVjdGlvbkxlYWtUcmFjaW5nIjsKICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgT2JqZWN0IG9ialJlZiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlQk1QSG9tZSIpOwotCXN0YXQuYWRkRGVzY3JpcHRpb24oIkNvbm5lY3Rpb24gTGVhayBUcmFjaW5nIFRlc3RzIik7CisgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiQ29ubmVjdGlvbiBMZWFrIFRyYWNpbmcgVGVzdHMiKTsKIAotCWZvcihpbnQgaT0wOyBpPDM7IGkrKyl7CisgICAgZm9yKGludCBpPTA7IGk8MzsgaSsrKXsKICAgICAgICAgICAgIFNpbXBsZUJNUEhvbWUgY29udmFsQk1QSG9tZSA9IChTaW1wbGVCTVBIb21lKQogICAgICAgICAgICAgICAgIGphdmF4LnJtaS5Qb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqUmVmLCBTaW1wbGVCTVBIb21lLmNsYXNzKTsKIAogICAgICAgICAgICAgU2ltcGxlQk1QIGNvbnZhbEJNUCA9IGNvbnZhbEJNUEhvbWUuY3JlYXRlKCk7Ci0JICAgIGlmKCFjb252YWxCTVAudGVzdDEoKSl7Ci0JCXN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICJ0ZXN0MSA6ICIsIHN0YXQuRkFJTCk7Ci0JCWJyZWFrOwotCSAgICB9Ci0JICAgIFRocmVhZC5zbGVlcCgyMDAwMCk7Ci0JfQotCXN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICJ0ZXN0MSA6ICIsIHN0YXQuUEFTUyk7CisgICAgICAgIGlmKCFjb252YWxCTVAudGVzdDEoKSl7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICJ0ZXN0MSA6ICIsIHN0YXQuRkFJTCk7CisgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIFRocmVhZC5zbGVlcCgyMDAwMCk7CisgICAgfQorICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICJ0ZXN0MSA6ICIsIHN0YXQuUEFTUyk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25ubGVha3RyYWNpbmcvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmxlYWt0cmFjaW5nL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggYmM2MjMzZS4uN2RiN2NiMiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25ubGVha3RyYWNpbmcvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5sZWFrdHJhY2luZy9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC0zMSwxNiArMzEsMTYgQEAKICAgICAgICAgICAgIDxlamItbmFtZT5TaW1wbGVCTVBFSkI8L2VqYi1uYW1lPgogICAgICAgICAgICAgPGhvbWU+Y29tLnN1bi5zMWFzZGV2LmpkYmMuY29ubmVjdGlvbmxlYWt0cmFjaW5nLmVqYi5TaW1wbGVCTVBIb21lPC9ob21lPgogICAgICAgICAgICAgPHJlbW90ZT5jb20uc3VuLnMxYXNkZXYuamRiYy5jb25uZWN0aW9ubGVha3RyYWNpbmcuZWpiLlNpbXBsZUJNUDwvcmVtb3RlPgotCSAgICA8ZWpiLWNsYXNzPmNvbS5zdW4uczFhc2Rldi5qZGJjLmNvbm5lY3Rpb25sZWFrdHJhY2luZy5lamIuU2ltcGxlQk1QQmVhbjwvZWpiLWNsYXNzPgotCSAgICA8c2Vzc2lvbi10eXBlPlN0YXRlZnVsPC9zZXNzaW9uLXR5cGU+Ci0JICAgIDx0cmFuc2FjdGlvbi10eXBlPkNvbnRhaW5lcjwvdHJhbnNhY3Rpb24tdHlwZT4KLQkgICAgPCEtLTxwZXJzaXN0ZW5jZS10eXBlPkJlYW48L3BlcnNpc3RlbmNlLXR5cGU+CisgICAgICAgIDxlamItY2xhc3M+Y29tLnN1bi5zMWFzZGV2LmpkYmMuY29ubmVjdGlvbmxlYWt0cmFjaW5nLmVqYi5TaW1wbGVCTVBCZWFuPC9lamItY2xhc3M+CisgICAgICAgIDxzZXNzaW9uLXR5cGU+U3RhdGVmdWw8L3Nlc3Npb24tdHlwZT4KKyAgICAgICAgPHRyYW5zYWN0aW9uLXR5cGU+Q29udGFpbmVyPC90cmFuc2FjdGlvbi10eXBlPgorICAgICAgICA8IS0tPHBlcnNpc3RlbmNlLXR5cGU+QmVhbjwvcGVyc2lzdGVuY2UtdHlwZT4KICAgICAgICAgICAgIDxwcmltLWtleS1jbGFzcz5qYXZhLmxhbmcuSW50ZWdlcjwvcHJpbS1rZXktY2xhc3M+CiAgICAgICAgICAgICA8cmVlbnRyYW50PkZhbHNlPC9yZWVudHJhbnQ+CiAgICAgICAgICAgICA8c2VjdXJpdHktaWRlbnRpdHk+CiAgICAgICAgICAgICAgICAgPGRlc2NyaXB0aW9uPjwvZGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICAgPHVzZS1jYWxsZXItaWRlbnRpdHk+PC91c2UtY2FsbGVyLWlkZW50aXR5PgotCTwvc2VjdXJpdHktaWRlbnRpdHk+LS0+CisgICAgPC9zZWN1cml0eS1pZGVudGl0eT4tLT4KICAgICAgICAgICAgIDxyZXNvdXJjZS1yZWY+CiAgICAgICAgICAgICAgICAgPHJlcy1yZWYtbmFtZT5EYXRhU291cmNlPC9yZXMtcmVmLW5hbWU+CiAgICAgICAgICAgICAgICAgPHJlcy10eXBlPmphdmF4LnNxbC5EYXRhU291cmNlPC9yZXMtdHlwZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmxlYWt0cmFjaW5nL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5sZWFrdHJhY2luZy9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCmluZGV4IDk4YTY5ZWQuLmRkOThhN2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmxlYWt0cmFjaW5nL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25ubGVha3RyYWNpbmcvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQpAQCAtMjgsNyArMjgsNyBAQAogICAgIHByaXZhdGUgdHJhbnNpZW50IGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0IG1fY3R4ID0gbnVsbDsKIAogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IGNvbnRleHQpIHsKLQltX2N0eCA9IGNvbnRleHQ7CisgICAgbV9jdHggPSBjb250ZXh0OwogICAgIH0KIAogICAgIHB1YmxpYyBJbnRlZ2VyIGVqYkNyZWF0ZSgpIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewpAQCAtMzYsNyArMzYsNyBAQAogICAgIH0KIAogCi0gICAKKwogLyogR2V0IGEgc2luZ2xlIGNvbm5lY3Rpb24gYW5kIGNsb3NlIGl0ICovCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDEoKSB7CiAgICAgICAgIENvbm5lY3Rpb24gY29ubiA9IG51bGw7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5sZWFrdHJhY2luZy9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5sZWFrdHJhY2luZy9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggZTQ5MTRmNi4uZjI1NjA3NiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25ubGVha3RyYWNpbmcvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmxlYWt0cmFjaW5nL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSw3ICsxLDcgQEAKLURyb3AgdGFibGUgT19DdXN0b21lcjsNCi0NCi1DUkVBVEUgVEFCTEUgT19DdXN0b21lciAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikNCi0pOw0KLQ0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKKworQ1JFQVRFIFRBQkxFIE9fQ3VzdG9tZXIgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQorKTsKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25ubGVha3RyYWNpbmcvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubmxlYWt0cmFjaW5nL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggNzBkMWZjYy4uZDg1NGI5NSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25ubGVha3RyYWNpbmcvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5sZWFrdHJhY2luZy9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xICsxIEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uc2hhcmluZy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5zaGFyaW5nL2J1aWxkLnhtbAppbmRleCA5M2IyMmU1Li5iZTEzNTJhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5zaGFyaW5nL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5zaGFyaW5nL2J1aWxkLnhtbApAQCAtMjMsNyArMjMsNyBAQAogXT4KIAogPHByb2plY3QgbmFtZT0iamRiYyIgZGVmYXVsdD0idXNhZ2UiIGJhc2VkaXI9Ii4iPgotCQorCiAgICAgJmVlQ29tbW9uOwogICAgICZlZUNvbW1vblByb3BlcnRpZXM7CiAKQEAgLTMyLDI0ICszMiwyNCBAQAogICAgIDx0YXJnZXQgbmFtZT0iYWxsIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iJHtleGVjdXRpb24ubW9kZX0tYWxsIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InBlLWFsbCI+CiAgICAgICAgIDxkZWxldGU+CiAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9Iioub3V0cHV0Ii8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgICAgICA8cmVjb3JkIG5hbWU9ImNvbm5zaGFyaW5nLm91dHB1dCIgYWN0aW9uPSJzdGFydCIgLz4KLQkgIDxhbnQgZGlyPSJub254YSIgdGFyZ2V0PSJhbGwiLz4KLQkgIDxhbnQgZGlyPSJ4YSIgdGFyZ2V0PSJhbGwiLz4KKyAgICAgIDxhbnQgZGlyPSJub254YSIgdGFyZ2V0PSJhbGwiLz4KKyAgICAgIDxhbnQgZGlyPSJ4YSIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPHJlY29yZCBuYW1lPSJjb25uc2hhcmluZy5vdXRwdXQiIGFjdGlvbj0ic3RvcCIgLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZWUtYWxsIj4KICAgICAgICAgPGRlbGV0ZT4KICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5vdXRwdXQiLz4KICAgICAgICAgPC9kZWxldGU+CiAgICAgICAgIDxyZWNvcmQgbmFtZT0iY29ubnNoYXJpbmcub3V0cHV0IiBhY3Rpb249InN0YXJ0IiAvPgotCSAgPGFudCBkaXI9Im5vbnhhIiB0YXJnZXQ9ImFsbCIvPgotCSAgPGFudCBkaXI9InhhIiB0YXJnZXQ9ImFsbCIvPgorICAgICAgPGFudCBkaXI9Im5vbnhhIiB0YXJnZXQ9ImFsbCIvPgorICAgICAgPGFudCBkaXI9InhhIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8cmVjb3JkIG5hbWU9ImNvbm5zaGFyaW5nLm91dHB1dCIgYWN0aW9uPSJzdG9wIiAvPgogICAgIDwvdGFyZ2V0PgogCkBAIC02NSw5ICs2NSw5IEBACiAgICAgICAgIDxyZWNvcmQgbmFtZT0ieGEub3V0cHV0IiBhY3Rpb249InN0b3AiIC8+CiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+Ci0JCVVzYWdlOgotCQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBqZGJjIHRlc3RzKQotCTwvZWNobz4KKyAgICA8ZWNobz4KKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGpkYmMgdGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uc2hhcmluZy9ub254YS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uc2hhcmluZy9ub254YS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDZkYmRiODguLjI0OWZiNzQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubnNoYXJpbmcvbm9ueGEvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5zaGFyaW5nL25vbnhhL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE4ICsxNSwxOCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iamRiYy1jb25uc2hhcmluZ25vbnhhIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5zaGFyaW5nL25vbnhhL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubnNoYXJpbmcvbm9ueGEvYnVpbGQueG1sCmluZGV4IGQ5MGE1NTguLjdkZDIyY2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubnNoYXJpbmcvbm9ueGEvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubnNoYXJpbmcvbm9ueGEvYnVpbGQueG1sCkBAIC00MSwxMSArNDEsMTEgQEAKICAgICAmZWVTZXR1cDsKICAgICAmZWVQcm9wZXJ0aWVzOwogICAgICZ0ZXN0cHJvcGVydGllczsKLQktLT4KKyAgICAtLT4KIAogICAgIDxwcm9wZXJ0eSBuYW1lPSJleGVjdXRpb24ubW9kZSIgdmFsdWU9InBlIi8+Ci0gICAgCi0gICAgCisKKwogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCxkZXBsb3kscnVuLHVuZGVwbG95Ii8+CiAgICAgPHRhcmdldCBuYW1lPSJhbGwtYXNzb2Mtd2l0aC10aHJlYWQiIGRlcGVuZHM9ImJ1aWxkLGRlcGxveSxzZXQtYXNzb2Mtd2l0aC10aHJlYWQscnVuLHVuZGVwbG95Ii8+CiAKQEAgLTY0LDEzICs2NCwxMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqLyouY2xhc3MiIC8+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1jb25ucG9vbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJqZGJjLWNvbm5zaGFyaW5nLXBvb2wiLz4KQEAgLTExNCwxMiArMTE0LDEyIEBACiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1jb25uc2hhcmluZy1wb29sIi8+Ci0JICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2Nvbm5zaGFyaW5nIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2Nvbm5zaGFyaW5nIi8+CiAgICAgICA8L2FudGNhbGw+CiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1jb25uc2hhcmluZy1wb29sIi8+Ci0JICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2Nvbm5zaGFyaW5nMiIvPgorICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9jb25uc2hhcmluZzIiLz4KICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CkBAIC0xMzMsMTQgKzEzMywxNCBAQAogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX3BvaW50YmFzZS5zcWwiLz4KQEAgLTE0OSw3ICsxNDksNyBAQAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9jb25uc2hhcmluZyIvPgogICAgICAgPC9hbnRjYWxsPgotICAgICAgCisKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvY29ubnNoYXJpbmcyIi8+CiAgICAgICA8L2FudGNhbGw+CkBAIC0xNzUsNyArMTc1LDcgQEAKICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5zaGFyaW5nL25vbnhhL2Rlc2NyaXB0b3IvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5zaGFyaW5nL25vbnhhL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggYWJjODQzOS4uMzQxMTExMyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uc2hhcmluZy9ub254YS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubnNoYXJpbmcvbm9ueGEvZGVzY3JpcHRvci9lamItamFyLnhtbApAQCAtNDgsMTEgKzQ4LDExIEBACiAgICAgICA8dHJhbnNhY3Rpb24tdHlwZT5Db250YWluZXI8L3RyYW5zYWN0aW9uLXR5cGU+CiAgICAgICA8ZWpiLXJlZj4KICAgICAgICAgPGRlc2NyaXB0aW9uPjwvZGVzY3JpcHRpb24+Ci0JPGVqYi1yZWYtbmFtZT5lamIvU2ltcGxlU2Vzc2lvbjJFSkI8L2VqYi1yZWYtbmFtZT4KLQk8ZWpiLXJlZi10eXBlPlNlc3Npb248L2VqYi1yZWYtdHlwZT4KKyAgICA8ZWpiLXJlZi1uYW1lPmVqYi9TaW1wbGVTZXNzaW9uMkVKQjwvZWpiLXJlZi1uYW1lPgorICAgIDxlamItcmVmLXR5cGU+U2Vzc2lvbjwvZWpiLXJlZi10eXBlPgogICAgICAgICA8aG9tZT5jb20uc3VuLnMxYXNkZXYuamRiYy5jb25uc2hhcmluZy5ub254YS5lamIuU2ltcGxlU2Vzc2lvbjJIb21lPC9ob21lPgogICAgICAgICA8cmVtb3RlPmNvbS5zdW4uczFhc2Rldi5qZGJjLmNvbm5zaGFyaW5nLm5vbnhhLmVqYi5TaW1wbGVTZXNzaW9uMjwvcmVtb3RlPgotCTxlamItbGluaz5TaW1wbGVTZXNzaW9uMkVKQjwvZWpiLWxpbms+CisgICAgPGVqYi1saW5rPlNpbXBsZVNlc3Npb24yRUpCPC9lamItbGluaz4KICAgICAgIDwvZWpiLXJlZj4KICAgICAgIDxyZXNvdXJjZS1yZWY+CiAgICAgICAgIDxyZXMtcmVmLW5hbWU+RGF0YVNvdXJjZTwvcmVzLXJlZi1uYW1lPgpAQCAtOTMsNiArOTMsNiBAQAogICAgICAgPHRyYW5zLWF0dHJpYnV0ZT5SZXF1aXJlc05ldzwvdHJhbnMtYXR0cmlidXRlPgogICAgIDwvY29udGFpbmVyLXRyYW5zYWN0aW9uPgogIDwvYXNzZW1ibHktZGVzY3JpcHRvcj4KLSAgICAgIAorCiA8L2VqYi1qYXI+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubnNoYXJpbmcvbm9ueGEvZWpiL1NpbXBsZVNlc3Npb24yQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uc2hhcmluZy9ub254YS9lamIvU2ltcGxlU2Vzc2lvbjJCZWFuLmphdmEKaW5kZXggODFlMTU0YS4uZWM2ZDBhZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uc2hhcmluZy9ub254YS9lamIvU2ltcGxlU2Vzc2lvbjJCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uc2hhcmluZy9ub254YS9lamIvU2ltcGxlU2Vzc2lvbjJCZWFuLmphdmEKQEAgLTI4LDE0ICsyOCwxNCBAQAogewogCiAgICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBjdHh0XzsKLSAgICBwcml2YXRlIEluaXRpYWxDb250ZXh0IGljXzsgCisgICAgcHJpdmF0ZSBJbml0aWFsQ29udGV4dCBpY187CiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgY29udGV4dCkgewogICAgICAgICBjdHh0XyA9IGNvbnRleHQ7Ci0JdHJ5IHsKLQkgICAgaWNfID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JfSBjYXRjaCggTmFtaW5nRXhjZXB0aW9uIG5lICkgewotCSAgICBuZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisgICAgdHJ5IHsKKyAgICAgICAgaWNfID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgfSBjYXRjaCggTmFtaW5nRXhjZXB0aW9uIG5lICkgeworICAgICAgICBuZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7CkBAIC00NCw1NyArNDQsNTcgQEAKICAgICAvKioKICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MSgpIHRocm93cyBFeGNlcHRpb24gewotCURhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSlpY18ubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UyIik7Ci0JQ29ubmVjdGlvbiBjb25uMSA9IG51bGw7Ci0JU3RhdGVtZW50IHN0bXQxID0gbnVsbDsKLQlSZXN1bHRTZXQgcnMxID0gbnVsbDsKLQlib29sZWFuIHBhc3NlZCA9IGZhbHNlOworICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSlpY18ubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UyIik7CisgICAgQ29ubmVjdGlvbiBjb25uMSA9IG51bGw7CisgICAgU3RhdGVtZW50IHN0bXQxID0gbnVsbDsKKyAgICBSZXN1bHRTZXQgcnMxID0gbnVsbDsKKyAgICBib29sZWFuIHBhc3NlZCA9IGZhbHNlOwogCi0JdHJ5IHsKLQkgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIHN0bXQxID0gY29ubjEuY3JlYXRlU3RhdGVtZW50KCk7Ci0JICAgIHN0bXQxLmV4ZWN1dGVVcGRhdGUoICJVUERBVEUgQ09OTlNIQVJJTkcgU0VUIGNfcGhvbmU9J0NPTk5fU0hBUklOR19CRUFOXzInIFdIRVJFIGNfaWQ9MTAwIik7CisgICAgdHJ5IHsKKyAgICAgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIHN0bXQxID0gY29ubjEuY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgIHN0bXQxLmV4ZWN1dGVVcGRhdGUoICJVUERBVEUgQ09OTlNIQVJJTkcgU0VUIGNfcGhvbmU9J0NPTk5fU0hBUklOR19CRUFOXzInIFdIRVJFIGNfaWQ9MTAwIik7CiAKLQkgICAgcmV0dXJuIHRydWU7Ci0JfSBjYXRjaCggU1FMRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgcmV0dXJuIGZhbHNlOwotCX0gZmluYWxseSB7Ci0JICAgIGlmIChzdG10MSAhPSBudWxsKSB7IAotCSAgICAgICAgdHJ5IHsgc3RtdDEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KLQkgICAgfQotCSAgICBpZiAoY29ubjEgIT0gbnVsbCkgeyAKLQkgICAgICAgIHRyeSB7IGNvbm4xLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9Ci0JICAgIH0KLQl9Ci0JCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gY2F0Y2goIFNRTEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBpZiAoc3RtdDEgIT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsgc3RtdDEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KKyAgICAgICAgfQorICAgICAgICBpZiAoY29ubjEgIT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KKyAgICAgICAgfQogICAgIH0KLSAgICAgCisKKyAgICB9CisKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MigpIHRocm93cyBFeGNlcHRpb24gewotCURhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSlpY18ubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UyIik7Ci0JQ29ubmVjdGlvbiBjb25uMSA9IG51bGw7Ci0JU3RhdGVtZW50IHN0bXQxID0gbnVsbDsKLQlSZXN1bHRTZXQgcnMxID0gbnVsbDsKLQlib29sZWFuIHBhc3NlZCA9IGZhbHNlOworICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSlpY18ubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UyIik7CisgICAgQ29ubmVjdGlvbiBjb25uMSA9IG51bGw7CisgICAgU3RhdGVtZW50IHN0bXQxID0gbnVsbDsKKyAgICBSZXN1bHRTZXQgcnMxID0gbnVsbDsKKyAgICBib29sZWFuIHBhc3NlZCA9IGZhbHNlOwogCi0JdHJ5IHsKLQkgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIHN0bXQxID0gY29ubjEuY3JlYXRlU3RhdGVtZW50KCk7Ci0JICAgIHN0bXQxLmV4ZWN1dGVVcGRhdGUoICJVUERBVEUgQ09OTlNIQVJJTkcgU0VUIGNfcGhvbmU9J0NPTk5fU0hBUklOR19CRUFOXzJfMicgV0hFUkUgY19pZD0yMDAiKTsKKyAgICB0cnkgeworICAgICAgICBjb25uMSA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgc3RtdDEgPSBjb25uMS5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgc3RtdDEuZXhlY3V0ZVVwZGF0ZSggIlVQREFURSBDT05OU0hBUklORyBTRVQgY19waG9uZT0nQ09OTl9TSEFSSU5HX0JFQU5fMl8yJyBXSEVSRSBjX2lkPTIwMCIpOwogCi0JICAgIHJldHVybiB0cnVlOwotCX0gY2F0Y2goIFNRTEV4Y2VwdGlvbiBlKSB7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIHJldHVybiBmYWxzZTsKLQl9IGZpbmFsbHkgewotCSAgICBpZiAoc3RtdDEgIT0gbnVsbCkgeyAKLQkgICAgICAgIHRyeSB7IHN0bXQxLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9Ci0JICAgIH0KLQkgICAgaWYgKGNvbm4xICE9IG51bGwpIHsgCi0JICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQotCSAgICB9Ci0JfQotCQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IGNhdGNoKCBTUUxFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKHN0bXQxICE9IG51bGwpIHsKKyAgICAgICAgICAgIHRyeSB7IHN0bXQxLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbm4xICE9IG51bGwpIHsKKyAgICAgICAgICAgIHRyeSB7IGNvbm4xLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9CisgICAgICAgIH0KKyAgICB9CisKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MygpIHRocm93cyBFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uc2hhcmluZy9ub254YS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5zaGFyaW5nL25vbnhhL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCA4Y2IzMTc0Li43MjFkOWU4IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5zaGFyaW5nL25vbnhhL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5zaGFyaW5nL25vbnhhL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSw2ICsxLDYgQEAKLURyb3AgdGFibGUgQ09OTlNIQVJJTkc7DQotDQotQ1JFQVRFIFRBQkxFIENPTk5TSEFSSU5HICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgY29uc3RyYWludCBwa19rZXkgcHJpbWFyeSBrZXksDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDI1KQ0KLSk7DQorRHJvcCB0YWJsZSBDT05OU0hBUklORzsKKworQ1JFQVRFIFRBQkxFIENPTk5TSEFSSU5HICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBjb25zdHJhaW50IHBrX2tleSBwcmltYXJ5IGtleSwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigyNSkKKyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5zaGFyaW5nL25vbnhhL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5zaGFyaW5nL25vbnhhL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggYzI4MTdmNi4uNzdkMWQ1YSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uc2hhcmluZy9ub254YS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubnNoYXJpbmcvbm9ueGEvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbApAQCAtMSArMSBAQAotRHJvcCB0YWJsZSBDT05OU0hBUklORzsNCitEcm9wIHRhYmxlIENPTk5TSEFSSU5HOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uc2hhcmluZy94YS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uc2hhcmluZy94YS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGJlMjQ0YTMuLmU5M2Q0ODcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubnNoYXJpbmcveGEvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5zaGFyaW5nL3hhL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE4ICsxNSwxOCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iamRiYy1jb25uc2hhcmluZ3hhIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5zaGFyaW5nL3hhL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubnNoYXJpbmcveGEvYnVpbGQueG1sCmluZGV4IDIxYWIwMmUuLjEwOTAyOWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubnNoYXJpbmcveGEvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubnNoYXJpbmcveGEvYnVpbGQueG1sCkBAIC0zOSw3ICszOSw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC01MSwxMyArNTEsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqLyouY2xhc3MiIC8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWpkYmMtb3JhY2xlLXhhLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJvcmFjbGUueGFwb29sLm5hbWUiIHZhbHVlPSJqZGJjLWNvbm5zaGFyaW5nLXhhLXBvb2wiLz4KQEAgLTY5LDcgKzY5LDcgQEAKICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtb3JhY2xlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgpAQCAtNzgsMTUgKzc4LDE1IEBACiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLWxhenktZW5saXN0Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4tbGF6eS1lbmxpc3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtb3JhY2xlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+Ci0JPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCi0JICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLmpkYmMtY29ubnNoYXJpbmcteGEtcG9vbC5wcm9wZXJ0eS5MYXp5Q29ubmVjdGlvbkVubGlzdG1lbnQ9dHJ1ZSIvPgorICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgorICAgICAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLWNvbm5zaGFyaW5nLXhhLXBvb2wucHJvcGVydHkuTGF6eUNvbm5lY3Rpb25Fbmxpc3RtZW50PXRydWUiLz4KICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CkBAIC0xMDAsNyArMTAwLDcgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvY29ubnNoYXJpbmcteGEiLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICAgIAorCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2Nvbm5zaGFyaW5nMi14YSIvPgogICAgICAgPC9hbnRjYWxsPgpAQCAtMTA4LDkgKzEwOCw5IEBACiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtY29ubnNoYXJpbmcteGEtcG9vbCIvPgogICAgICAgPC9hbnRjYWxsPgotICAgICAgCisKICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubnNoYXJpbmcveGEvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uc2hhcmluZy94YS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMzJhOTYyNC4uYTVmNGI2ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uc2hhcmluZy94YS9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uc2hhcmluZy94YS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI1LDQ1ICsyNSw0NSBAQAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuU2ltcGxlUmVwb3J0ZXJBZGFwdGVyOwogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKLQlTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKLQlTdHJpbmcgdGVzdFN1aXRlID0gImNvbm5zaGFyaW5nLXRlc3QxICI7CisKKyAgICBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKKyAgICBTdHJpbmcgdGVzdFN1aXRlID0gImNvbm5zaGFyaW5nLXRlc3QxICI7CiAKICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgT2JqZWN0IG9ialJlZiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlU2Vzc2lvbkhvbWUiKTsKLQlTaW1wbGVTZXNzaW9uSG9tZSBzaW1wbGVTZXNzaW9uSG9tZSA9IChTaW1wbGVTZXNzaW9uSG9tZSkKKyAgICBTaW1wbGVTZXNzaW9uSG9tZSBzaW1wbGVTZXNzaW9uSG9tZSA9IChTaW1wbGVTZXNzaW9uSG9tZSkKICAgICAgICAgamF2YXgucm1pLlBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpSZWYsIFNpbXBsZVNlc3Npb25Ib21lLmNsYXNzKTsKLSAgICAgICAgCi0Jc3RhdC5hZGREZXNjcmlwdGlvbigiUnVubmluZyBub3R4b3BzIHRlc3RTdWl0ZTEgIik7CisKKyAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJSdW5uaW5nIG5vdHhvcHMgdGVzdFN1aXRlMSAiKTsKICAgICAgICAgU2ltcGxlU2Vzc2lvbiBzaW1wbGVTZXNzaW9uID0gc2ltcGxlU2Vzc2lvbkhvbWUuY3JlYXRlKCk7CiAgICAgICAgIGlmIChzaW1wbGVTZXNzaW9uLnRlc3QxKCkgJiYgc2ltcGxlU2Vzc2lvbi5xdWVyeSgpKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3QxIDogIiAsIHN0YXQuUEFTUyApOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3QxIDogIiAsIHN0YXQuRkFJTCApOwotCX0KKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDEgOiAiICwgc3RhdC5QQVNTICk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDEgOiAiICwgc3RhdC5GQUlMICk7CisgICAgfQogCiAgICAgICAgIGlmIChzaW1wbGVTZXNzaW9uLnRlc3QyKCkgJiYgc2ltcGxlU2Vzc2lvbi5xdWVyeSgpKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3QyIDogIiAsIHN0YXQuUEFTUyApOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3QyIDogIiAsIHN0YXQuRkFJTCApOwotCX0KKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDIgOiAiICwgc3RhdC5QQVNTICk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDIgOiAiICwgc3RhdC5GQUlMICk7CisgICAgfQogCiAgICAgICAgIGlmIChzaW1wbGVTZXNzaW9uLnRlc3QzKCkgJiYgc2ltcGxlU2Vzc2lvbi5xdWVyeTIoKSkgewotCSAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0MyA6ICIgLCBzdGF0LlBBU1MgKTsKLQl9IGVsc2UgewotCSAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0MyA6ICIgLCBzdGF0LkZBSUwgKTsKLQl9CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3QzIDogIiAsIHN0YXQuUEFTUyApOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3QzIDogIiAsIHN0YXQuRkFJTCApOworICAgIH0KIAogICAgICAgICBpZiAoc2ltcGxlU2Vzc2lvbi50ZXN0NCgpICYmIHNpbXBsZVNlc3Npb24ucXVlcnkyKCkpIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDQgOiAiICwgc3RhdC5QQVNTICk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDQgOiAiICwgc3RhdC5GQUlMICk7Ci0JfQotICAKLQkKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0NCA6ICIgLCBzdGF0LlBBU1MgKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0NCA6ICIgLCBzdGF0LkZBSUwgKTsKKyAgICB9CisKKworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uc2hhcmluZy94YS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uc2hhcmluZy94YS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IGJiODg3YmMuLjcxMTYyYzkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubnNoYXJpbmcveGEvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5zaGFyaW5nL3hhL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTQ5LDExICs0OSwxMSBAQAogICAgICAgPHRyYW5zYWN0aW9uLXR5cGU+Q29udGFpbmVyPC90cmFuc2FjdGlvbi10eXBlPgogICAgICAgPGVqYi1yZWY+CiAgICAgICAgIDxkZXNjcmlwdGlvbj48L2Rlc2NyaXB0aW9uPgotCTxlamItcmVmLW5hbWU+ZWpiL1NpbXBsZVNlc3Npb24yRUpCPC9lamItcmVmLW5hbWU+Ci0JPGVqYi1yZWYtdHlwZT5TZXNzaW9uPC9lamItcmVmLXR5cGU+CisgICAgPGVqYi1yZWYtbmFtZT5lamIvU2ltcGxlU2Vzc2lvbjJFSkI8L2VqYi1yZWYtbmFtZT4KKyAgICA8ZWpiLXJlZi10eXBlPlNlc3Npb248L2VqYi1yZWYtdHlwZT4KICAgICAgICAgPGhvbWU+Y29tLnN1bi5zMWFzZGV2LmpkYmMuY29ubnNoYXJpbmcueGEuZWpiLlNpbXBsZVNlc3Npb24ySG9tZTwvaG9tZT4KICAgICAgICAgPHJlbW90ZT5jb20uc3VuLnMxYXNkZXYuamRiYy5jb25uc2hhcmluZy54YS5lamIuU2ltcGxlU2Vzc2lvbjI8L3JlbW90ZT4KLQk8ZWpiLWxpbms+U2ltcGxlU2Vzc2lvbjJFSkI8L2VqYi1saW5rPgorICAgIDxlamItbGluaz5TaW1wbGVTZXNzaW9uMkVKQjwvZWpiLWxpbms+CiAgICAgICA8L2VqYi1yZWY+CiAgICAgICA8cmVzb3VyY2UtcmVmPgogICAgICAgICA8cmVzLXJlZi1uYW1lPkRhdGFTb3VyY2U8L3Jlcy1yZWYtbmFtZT4KQEAgLTg3LDYgKzg3LDYgQEAKICAgICAgIDx0cmFucy1hdHRyaWJ1dGU+UmVxdWlyZXNOZXc8L3RyYW5zLWF0dHJpYnV0ZT4KICAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4KICA8L2Fzc2VtYmx5LWRlc2NyaXB0b3I+Ci0gICAgICAKKwogPC9lamItamFyPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5zaGFyaW5nL3hhL2VqYi9TaW1wbGVTZXNzaW9uMkJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubnNoYXJpbmcveGEvZWpiL1NpbXBsZVNlc3Npb24yQmVhbi5qYXZhCmluZGV4IDA2MmViZTIuLmVmYTFhNGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubnNoYXJpbmcveGEvZWpiL1NpbXBsZVNlc3Npb24yQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubnNoYXJpbmcveGEvZWpiL1NpbXBsZVNlc3Npb24yQmVhbi5qYXZhCkBAIC0yOCwxNCArMjgsMTQgQEAKIHsKIAogICAgIHByaXZhdGUgU2Vzc2lvbkNvbnRleHQgY3R4dF87Ci0gICAgcHJpdmF0ZSBJbml0aWFsQ29udGV4dCBpY187IAorICAgIHByaXZhdGUgSW5pdGlhbENvbnRleHQgaWNfOwogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IGNvbnRleHQpIHsKICAgICAgICAgY3R4dF8gPSBjb250ZXh0OwotCXRyeSB7Ci0JICAgIGljXyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCX0gY2F0Y2goIE5hbWluZ0V4Y2VwdGlvbiBuZSApIHsKLQkgICAgbmUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQorICAgIHRyeSB7CisgICAgICAgIGljXyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgIH0gY2F0Y2goIE5hbWluZ0V4Y2VwdGlvbiBuZSApIHsKKyAgICAgICAgbmUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewpAQCAtNDQsMzcgKzQ0LDM3IEBACiAgICAgLyoqCiAgICAgICogR2V0IGNvbm5lY3Rpb24gYW5kIGRvIHNvbWUgZGF0YWJhc2UgaW5zZXJ0cy4gVGhlbiBjYWxsIGFub3RoZXIKICAgICAgKiBFSkIncyBtZXRob2QgaW4gdGhlIHNhbWUgdHJhbnNhY3Rpb24gYW5kIGNoYW5nZSB0aGUgaW5zZXJ0ZWQgdmFsdWUuCi0gICAgICogU2luY2UgYWxsIHRoaXMgaXMgaW4gdGhlIHNhbWUgdHgsIHRoZSBvdGhlciBiZWFuJ3MgbWV0aG9kIHNob3VsZCAKKyAgICAgKiBTaW5jZSBhbGwgdGhpcyBpcyBpbiB0aGUgc2FtZSB0eCwgdGhlIG90aGVyIGJlYW4ncyBtZXRob2Qgc2hvdWxkCiAgICAgICogZ2V0IHRoZSBzYW1lIGNvbm5lY3Rpb24gKHBoeXNpY2FsKSBhbmQgaGVuY2UgYmUgYWJsZSB0byBzZWUgdGhlCiAgICAgICogaW5zZXJ0ZWQgdmFsdWUgZXZlbiB0aG91Z2ggdGhlIHR4IGhhcyBub3QgY29tbWl0dGVkIHlldC4KICAgICAgKiBUaGUgaWRlYSBpcyB0byB0ZXN0IGNvbm5lY3Rpb24gc2hhcmluZwogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIHRlc3QxKFN0cmluZyBuZXdWYWwsIGludCBrZXkpIHRocm93cyBFeGNlcHRpb24gewotCURhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSlpY18ubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UyIik7Ci0JQ29ubmVjdGlvbiBjb25uMSA9IG51bGw7Ci0JU3RhdGVtZW50IHN0bXQxID0gbnVsbDsKLQlib29sZWFuIHBhc3NlZCA9IGZhbHNlOworICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSlpY18ubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UyIik7CisgICAgQ29ubmVjdGlvbiBjb25uMSA9IG51bGw7CisgICAgU3RhdGVtZW50IHN0bXQxID0gbnVsbDsKKyAgICBib29sZWFuIHBhc3NlZCA9IGZhbHNlOwogCi0JdHJ5IHsKLQkgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIHN0bXQxID0gY29ubjEuY3JlYXRlU3RhdGVtZW50KCk7Ci0JICAgIHN0bXQxLmV4ZWN1dGVVcGRhdGUoICJVUERBVEUgQ09OTlNIQVJJTkcgU0VUIGNfcGhvbmUgPSAnIisgbmV3VmFsICsiJyBXSEVSRSIgKwotCSAgICAgICAgIiBjX2lkID0gIiArIGtleSk7Ci0gICAgICAgICAgICAKKyAgICB0cnkgeworICAgICAgICBjb25uMSA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgc3RtdDEgPSBjb25uMS5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgc3RtdDEuZXhlY3V0ZVVwZGF0ZSggIlVQREFURSBDT05OU0hBUklORyBTRVQgY19waG9uZSA9ICciKyBuZXdWYWwgKyInIFdIRVJFIiArCisgICAgICAgICAgICAiIGNfaWQgPSAiICsga2V5KTsKKwogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0JfSBjYXRjaCggU1FMRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgcmV0dXJuIGZhbHNlOwotCX0gZmluYWxseSB7Ci0JICAgIGlmIChzdG10MSAhPSBudWxsKSB7IAotCSAgICAgICAgdHJ5IHsgc3RtdDEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KLQkgICAgfQotCSAgICBpZiAoY29ubjEgIT0gbnVsbCkgeyAKLQkgICAgICAgIHRyeSB7IGNvbm4xLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9Ci0JICAgIH0KLQl9CisgICAgfSBjYXRjaCggU1FMRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmIChzdG10MSAhPSBudWxsKSB7CisgICAgICAgICAgICB0cnkgeyBzdG10MS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQorICAgICAgICB9CisgICAgICAgIGlmIChjb25uMSAhPSBudWxsKSB7CisgICAgICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQorICAgICAgICB9CiAgICAgfQotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7fQogICAgIHB1YmxpYyB2b2lkIGVqYlN0b3JlKCkge30KICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7fQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uc2hhcmluZy94YS9lamIvU2ltcGxlU2Vzc2lvbkJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubnNoYXJpbmcveGEvZWpiL1NpbXBsZVNlc3Npb25CZWFuLmphdmEKaW5kZXggMWMxMjA4OC4uYzkzNTYwZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uc2hhcmluZy94YS9lamIvU2ltcGxlU2Vzc2lvbkJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5zaGFyaW5nL3hhL2VqYi9TaW1wbGVTZXNzaW9uQmVhbi5qYXZhCkBAIC0yOCwxNCArMjgsMTQgQEAKIHsKIAogICAgIHByaXZhdGUgU2Vzc2lvbkNvbnRleHQgY3R4dF87Ci0gICAgcHJpdmF0ZSBJbml0aWFsQ29udGV4dCBpY187IAorICAgIHByaXZhdGUgSW5pdGlhbENvbnRleHQgaWNfOwogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IGNvbnRleHQpIHsKICAgICAgICAgY3R4dF8gPSBjb250ZXh0OwotCXRyeSB7Ci0JICAgIGljXyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCX0gY2F0Y2goIE5hbWluZ0V4Y2VwdGlvbiBuZSApIHsKLQkgICAgbmUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQorICAgIHRyeSB7CisgICAgICAgIGljXyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgIH0gY2F0Y2goIE5hbWluZ0V4Y2VwdGlvbiBuZSApIHsKKyAgICAgICAgbmUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewpAQCAtNDQsNDcgKzQ0LDQ3IEBACiAgICAgLyoqCiAgICAgICogR2V0IGNvbm5lY3Rpb24gYW5kIGRvIHNvbWUgZGF0YWJhc2UgaW5zZXJ0cy4gVGhlbiBjYWxsIGFub3RoZXIKICAgICAgKiBFSkIncyBtZXRob2QgaW4gdGhlIHNhbWUgdHJhbnNhY3Rpb24gYW5kIGNoYW5nZSB0aGUgaW5zZXJ0ZWQgdmFsdWUuCi0gICAgICogU2luY2UgYWxsIHRoaXMgaXMgaW4gdGhlIHNhbWUgdHgsIHRoZSBvdGhlciBiZWFuJ3MgbWV0aG9kIHNob3VsZCAKKyAgICAgKiBTaW5jZSBhbGwgdGhpcyBpcyBpbiB0aGUgc2FtZSB0eCwgdGhlIG90aGVyIGJlYW4ncyBtZXRob2Qgc2hvdWxkCiAgICAgICogZ2V0IHRoZSBzYW1lIGNvbm5lY3Rpb24gKHBoeXNpY2FsKSBhbmQgaGVuY2UgYmUgYWJsZSB0byBzZWUgdGhlCiAgICAgICogaW5zZXJ0ZWQgdmFsdWUgZXZlbiB0aG91Z2ggdGhlIHR4IGhhcyBub3QgY29tbWl0dGVkIHlldC4KICAgICAgKiBUaGUgaWRlYSBpcyB0byB0ZXN0IGNvbm5lY3Rpb24gc2hhcmluZwogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIHRlc3QxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKWljXy5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZSIpOwotCUNvbm5lY3Rpb24gY29ubjEgPSBudWxsOwotCVN0YXRlbWVudCBzdG10MSA9IG51bGw7Ci0JUmVzdWx0U2V0IHJzMSA9IG51bGw7Ci0JYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKKyAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpaWNfLmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7CisgICAgQ29ubmVjdGlvbiBjb25uMSA9IG51bGw7CisgICAgU3RhdGVtZW50IHN0bXQxID0gbnVsbDsKKyAgICBSZXN1bHRTZXQgcnMxID0gbnVsbDsKKyAgICBib29sZWFuIHBhc3NlZCA9IGZhbHNlOwogCi0JdHJ5IHsKLQkgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIHN0bXQxID0gY29ubjEuY3JlYXRlU3RhdGVtZW50KCk7Ci0JICAgIHN0bXQxLmV4ZWN1dGVVcGRhdGUoICJJTlNFUlQgSU5UTyBDT05OU0hBUklORyB2YWx1ZXMgKDEwMCwgJ0FESVRZQScpIik7Ci0gICAgICAgICAgICAKLQkgICAgT2JqZWN0IG8gPSBpY18ubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVTZXNzaW9uMkVKQiIpOwotCSAgICBTaW1wbGVTZXNzaW9uMkhvbWUgaG9tZSA9IChTaW1wbGVTZXNzaW9uMkhvbWUpIAotCSAgICAgICAgamF2YXgucm1pLlBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyggbywgU2ltcGxlU2Vzc2lvbjJIb21lLmNsYXNzKTsKLQkgICAgU2ltcGxlU2Vzc2lvbjIgYmVhbiA9IGhvbWUuY3JlYXRlKCk7CisgICAgdHJ5IHsKKyAgICAgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIHN0bXQxID0gY29ubjEuY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgIHN0bXQxLmV4ZWN1dGVVcGRhdGUoICJJTlNFUlQgSU5UTyBDT05OU0hBUklORyB2YWx1ZXMgKDEwMCwgJ0FESVRZQScpIik7CiAKLQkgICAgcmV0dXJuIGJlYW4udGVzdDEoIkFESVRZQV9CRUFOXzIiLCAxMDApOworICAgICAgICBPYmplY3QgbyA9IGljXy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZVNlc3Npb24yRUpCIik7CisgICAgICAgIFNpbXBsZVNlc3Npb24ySG9tZSBob21lID0gKFNpbXBsZVNlc3Npb24ySG9tZSkKKyAgICAgICAgICAgIGphdmF4LnJtaS5Qb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3coIG8sIFNpbXBsZVNlc3Npb24ySG9tZS5jbGFzcyk7CisgICAgICAgIFNpbXBsZVNlc3Npb24yIGJlYW4gPSBob21lLmNyZWF0ZSgpOwogCi0JfSBjYXRjaCggU1FMRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgcmV0dXJuIGZhbHNlOwotCX0gZmluYWxseSB7Ci0JICAgIGlmIChzdG10MSAhPSBudWxsKSB7IAotCSAgICAgICAgdHJ5IHsgc3RtdDEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KLQkgICAgfQotCSAgICBpZiAoY29ubjEgIT0gbnVsbCkgeyAKLQkgICAgICAgIHRyeSB7IGNvbm4xLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9Ci0JICAgIH0KLQl9CisgICAgICAgIHJldHVybiBiZWFuLnRlc3QxKCJBRElUWUFfQkVBTl8yIiwgMTAwKTsKKworICAgIH0gY2F0Y2goIFNRTEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBpZiAoc3RtdDEgIT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsgc3RtdDEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KKyAgICAgICAgfQorICAgICAgICBpZiAoY29ubjEgIT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KKyAgICAgICAgfQogICAgIH0KLSAgICAKKyAgICB9CisKICAgICAvKioKICAgICAgKiBHZXQgY29ubmVjdGlvbiBhbmQgZG8gc29tZSBkYXRhYmFzZSBpbnNlcnRzLiBUaGVuIGNhbGwgYW5vdGhlcgogICAgICAqIEVKQidzIG1ldGhvZCBpbiB0aGUgc2FtZSB0cmFuc2FjdGlvbiBhbmQgY2hhbmdlIHRoZSBpbnNlcnRlZCB2YWx1ZS4KLSAgICAgKiBTaW5jZSBhbGwgdGhpcyBpcyBpbiB0aGUgc2FtZSB0eCwgdGhlIG90aGVyIGJlYW4ncyBtZXRob2Qgc2hvdWxkIAorICAgICAqIFNpbmNlIGFsbCB0aGlzIGlzIGluIHRoZSBzYW1lIHR4LCB0aGUgb3RoZXIgYmVhbidzIG1ldGhvZCBzaG91bGQKICAgICAgKiBnZXQgdGhlIHNhbWUgY29ubmVjdGlvbiAocGh5c2ljYWwpIGFuZCBoZW5jZSBiZSBhYmxlIHRvIHNlZSB0aGUKICAgICAgKiBpbnNlcnRlZCB2YWx1ZSBldmVuIHRob3VnaCB0aGUgdHggaGFzIG5vdCBjb21taXR0ZWQgeWV0LgogICAgICAqIFRoaXMgdGVzdCBkb2VzIHRoZSBzYW1lIHRoaW5nIGFzIHRlc3QxIGV4Y2VwdCB0aGF0IGl0IGNsb3NlcyB0aGUKQEAgLTkyLDExOSArOTIsMTE5IEBACiAgICAgICogVGhlIGlkZWEgaXMgdG8gdGVzdCBjb25uZWN0aW9uIHNoYXJpbmcKICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MigpIHRocm93cyBFeGNlcHRpb24gewotCURhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSlpY18ubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKLQlDb25uZWN0aW9uIGNvbm4xID0gbnVsbDsKLQlTdGF0ZW1lbnQgc3RtdDEgPSBudWxsOwotCVJlc3VsdFNldCByczEgPSBudWxsOwotCWJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CisgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKWljXy5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZSIpOworICAgIENvbm5lY3Rpb24gY29ubjEgPSBudWxsOworICAgIFN0YXRlbWVudCBzdG10MSA9IG51bGw7CisgICAgUmVzdWx0U2V0IHJzMSA9IG51bGw7CisgICAgYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKIAotCXRyeSB7Ci0JICAgIGNvbm4xID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCSAgICBzdG10MSA9IGNvbm4xLmNyZWF0ZVN0YXRlbWVudCgpOwotCSAgICBzdG10MS5leGVjdXRlVXBkYXRlKCAiSU5TRVJUIElOVE8gQ09OTlNIQVJJTkcgdmFsdWVzICgxMDAsICdBRElUWUEnKSIpOwotICAgICAgICAgICAgCi0JICAgIHN0bXQxLmNsb3NlKCk7Ci0JICAgIGNvbm4xLmNsb3NlKCk7CisgICAgdHJ5IHsKKyAgICAgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIHN0bXQxID0gY29ubjEuY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgIHN0bXQxLmV4ZWN1dGVVcGRhdGUoICJJTlNFUlQgSU5UTyBDT05OU0hBUklORyB2YWx1ZXMgKDEwMCwgJ0FESVRZQScpIik7CiAKLQkgICAgT2JqZWN0IG8gPSBpY18ubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVTZXNzaW9uMkVKQiIpOwotCSAgICBTaW1wbGVTZXNzaW9uMkhvbWUgaG9tZSA9IChTaW1wbGVTZXNzaW9uMkhvbWUpIAotCSAgICAgICAgamF2YXgucm1pLlBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyggbywgU2ltcGxlU2Vzc2lvbjJIb21lLmNsYXNzKTsKLQkgICAgU2ltcGxlU2Vzc2lvbjIgYmVhbiA9IGhvbWUuY3JlYXRlKCk7CisgICAgICAgIHN0bXQxLmNsb3NlKCk7CisgICAgICAgIGNvbm4xLmNsb3NlKCk7CiAKLQkgICAgcmV0dXJuIGJlYW4udGVzdDEoIkFESVRZQV9CRUFOXzIiLCAxMDApOworICAgICAgICBPYmplY3QgbyA9IGljXy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZVNlc3Npb24yRUpCIik7CisgICAgICAgIFNpbXBsZVNlc3Npb24ySG9tZSBob21lID0gKFNpbXBsZVNlc3Npb24ySG9tZSkKKyAgICAgICAgICAgIGphdmF4LnJtaS5Qb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3coIG8sIFNpbXBsZVNlc3Npb24ySG9tZS5jbGFzcyk7CisgICAgICAgIFNpbXBsZVNlc3Npb24yIGJlYW4gPSBob21lLmNyZWF0ZSgpOwogCi0JfSBjYXRjaCggU1FMRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgcmV0dXJuIGZhbHNlOwotCX0gZmluYWxseSB7Ci0JICAgIGlmIChzdG10MSAhPSBudWxsKSB7IAotCSAgICAgICAgdHJ5IHsgc3RtdDEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KLQkgICAgfQotCSAgICBpZiAoY29ubjEgIT0gbnVsbCkgeyAKLQkgICAgICAgIHRyeSB7IGNvbm4xLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9Ci0JICAgIH0KLQl9CisgICAgICAgIHJldHVybiBiZWFuLnRlc3QxKCJBRElUWUFfQkVBTl8yIiwgMTAwKTsKKworICAgIH0gY2F0Y2goIFNRTEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBpZiAoc3RtdDEgIT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsgc3RtdDEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KKyAgICAgICAgfQorICAgICAgICBpZiAoY29ubjEgIT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KKyAgICAgICAgfQorICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MygpIHRocm93cyBFeGNlcHRpb24gewotCURhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSlpY18ubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKLQlDb25uZWN0aW9uIGNvbm4xID0gbnVsbDsKLQlDb25uZWN0aW9uIGNvbm4yID0gbnVsbDsKLQlTdGF0ZW1lbnQgc3RtdDEgPSBudWxsOwotCVN0YXRlbWVudCBzdG10MiA9IG51bGw7Ci0JUmVzdWx0U2V0IHJzMSA9IG51bGw7Ci0JYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKKyAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpaWNfLmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7CisgICAgQ29ubmVjdGlvbiBjb25uMSA9IG51bGw7CisgICAgQ29ubmVjdGlvbiBjb25uMiA9IG51bGw7CisgICAgU3RhdGVtZW50IHN0bXQxID0gbnVsbDsKKyAgICBTdGF0ZW1lbnQgc3RtdDIgPSBudWxsOworICAgIFJlc3VsdFNldCByczEgPSBudWxsOworICAgIGJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CiAKLQl0cnkgewotCSAgICBjb25uMSA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQkgICAgc3RtdDEgPSBjb25uMS5jcmVhdGVTdGF0ZW1lbnQoKTsKLQkgICAgc3RtdDEuZXhlY3V0ZVVwZGF0ZSggIklOU0VSVCBJTlRPIENPTk5TSEFSSU5HIHZhbHVlcyAoMTAwLCAnQURJVFlBJykiKTsKLSAgICAgICAgICAgIAotCSAgICBjb25uMiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQkgICAgc3RtdDIgPSBjb25uMi5jcmVhdGVTdGF0ZW1lbnQoKTsKLQkgICAgc3RtdDIuZXhlY3V0ZVVwZGF0ZSggIklOU0VSVCBJTlRPIENPTk5TSEFSSU5HIHZhbHVlcyAoMjAwLCAnQURJVFlBXzIwMCcpIik7CisgICAgdHJ5IHsKKyAgICAgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIHN0bXQxID0gY29ubjEuY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgIHN0bXQxLmV4ZWN1dGVVcGRhdGUoICJJTlNFUlQgSU5UTyBDT05OU0hBUklORyB2YWx1ZXMgKDEwMCwgJ0FESVRZQScpIik7CiAKLQkgICAgT2JqZWN0IG8gPSBpY18ubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVTZXNzaW9uMkVKQiIpOwotCSAgICBTaW1wbGVTZXNzaW9uMkhvbWUgaG9tZSA9IChTaW1wbGVTZXNzaW9uMkhvbWUpIAotCSAgICAgICAgamF2YXgucm1pLlBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyggbywgU2ltcGxlU2Vzc2lvbjJIb21lLmNsYXNzKTsKLQkgICAgU2ltcGxlU2Vzc2lvbjIgYmVhbiA9IGhvbWUuY3JlYXRlKCk7CisgICAgICAgIGNvbm4yID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICBzdG10MiA9IGNvbm4yLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICBzdG10Mi5leGVjdXRlVXBkYXRlKCAiSU5TRVJUIElOVE8gQ09OTlNIQVJJTkcgdmFsdWVzICgyMDAsICdBRElUWUFfMjAwJykiKTsKIAotCSAgICByZXR1cm4gYmVhbi50ZXN0MSgiQURJVFlBX0JFQU5fMl8yIiwgMjAwKTsKKyAgICAgICAgT2JqZWN0IG8gPSBpY18ubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVTZXNzaW9uMkVKQiIpOworICAgICAgICBTaW1wbGVTZXNzaW9uMkhvbWUgaG9tZSA9IChTaW1wbGVTZXNzaW9uMkhvbWUpCisgICAgICAgICAgICBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KCBvLCBTaW1wbGVTZXNzaW9uMkhvbWUuY2xhc3MpOworICAgICAgICBTaW1wbGVTZXNzaW9uMiBiZWFuID0gaG9tZS5jcmVhdGUoKTsKIAotCX0gY2F0Y2goIFNRTEV4Y2VwdGlvbiBlKSB7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIHJldHVybiBmYWxzZTsKLQl9IGZpbmFsbHkgewotCSAgICBpZiAoc3RtdDEgIT0gbnVsbCkgeyAKLQkgICAgICAgIHRyeSB7IHN0bXQxLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9Ci0JICAgIH0KLQkgICAgaWYgKGNvbm4xICE9IG51bGwpIHsgCi0JICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQotCSAgICB9Ci0JfQorICAgICAgICByZXR1cm4gYmVhbi50ZXN0MSgiQURJVFlBX0JFQU5fMl8yIiwgMjAwKTsKKworICAgIH0gY2F0Y2goIFNRTEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBpZiAoc3RtdDEgIT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsgc3RtdDEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KKyAgICAgICAgfQorICAgICAgICBpZiAoY29ubjEgIT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KKyAgICAgICAgfQorICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0NCgpIHRocm93cyBFeGNlcHRpb24gewotCURhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSlpY18ubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKLQlDb25uZWN0aW9uIGNvbm4xID0gbnVsbDsKLQlDb25uZWN0aW9uIGNvbm4yID0gbnVsbDsKLQlTdGF0ZW1lbnQgc3RtdDEgPSBudWxsOwotCVN0YXRlbWVudCBzdG10MiA9IG51bGw7Ci0JYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKKyAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpaWNfLmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7CisgICAgQ29ubmVjdGlvbiBjb25uMSA9IG51bGw7CisgICAgQ29ubmVjdGlvbiBjb25uMiA9IG51bGw7CisgICAgU3RhdGVtZW50IHN0bXQxID0gbnVsbDsKKyAgICBTdGF0ZW1lbnQgc3RtdDIgPSBudWxsOworICAgIGJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CiAKLQl0cnkgewotCSAgICBjb25uMSA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQkgICAgc3RtdDEgPSBjb25uMS5jcmVhdGVTdGF0ZW1lbnQoKTsKLQkgICAgc3RtdDEuZXhlY3V0ZVVwZGF0ZSggIklOU0VSVCBJTlRPIENPTk5TSEFSSU5HIHZhbHVlcyAoMTAwLCAnQURJVFlBJykiKTsKLSAgICAgICAgICAgIAotCSAgICBzdG10MS5jbG9zZSgpOworICAgIHRyeSB7CisgICAgICAgIGNvbm4xID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICBzdG10MSA9IGNvbm4xLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICBzdG10MS5leGVjdXRlVXBkYXRlKCAiSU5TRVJUIElOVE8gQ09OTlNIQVJJTkcgdmFsdWVzICgxMDAsICdBRElUWUEnKSIpOworCisgICAgICAgIHN0bXQxLmNsb3NlKCk7CiAgICAgICAgICAgICBjb25uMS5jbG9zZSgpOwogCi0JICAgIGNvbm4yID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCSAgICBzdG10MiA9IGNvbm4yLmNyZWF0ZVN0YXRlbWVudCgpOwotCSAgICBzdG10Mi5leGVjdXRlVXBkYXRlKCAiSU5TRVJUIElOVE8gQ09OTlNIQVJJTkcgdmFsdWVzICgyMDAsICdBRElUWUFfMjAwJykiKTsKKyAgICAgICAgY29ubjIgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIHN0bXQyID0gY29ubjIuY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgIHN0bXQyLmV4ZWN1dGVVcGRhdGUoICJJTlNFUlQgSU5UTyBDT05OU0hBUklORyB2YWx1ZXMgKDIwMCwgJ0FESVRZQV8yMDAnKSIpOwogCi0JICAgIHN0bXQyLmNsb3NlKCk7Ci0JICAgIGNvbm4yLmNsb3NlKCk7CisgICAgICAgIHN0bXQyLmNsb3NlKCk7CisgICAgICAgIGNvbm4yLmNsb3NlKCk7CiAKLQkgICAgT2JqZWN0IG8gPSBpY18ubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVTZXNzaW9uMkVKQiIpOwotCSAgICBTaW1wbGVTZXNzaW9uMkhvbWUgaG9tZSA9IChTaW1wbGVTZXNzaW9uMkhvbWUpIAotCSAgICAgICAgamF2YXgucm1pLlBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyggbywgU2ltcGxlU2Vzc2lvbjJIb21lLmNsYXNzKTsKLQkgICAgU2ltcGxlU2Vzc2lvbjIgYmVhbiA9IGhvbWUuY3JlYXRlKCk7CisgICAgICAgIE9iamVjdCBvID0gaWNfLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlU2Vzc2lvbjJFSkIiKTsKKyAgICAgICAgU2ltcGxlU2Vzc2lvbjJIb21lIGhvbWUgPSAoU2ltcGxlU2Vzc2lvbjJIb21lKQorICAgICAgICAgICAgamF2YXgucm1pLlBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyggbywgU2ltcGxlU2Vzc2lvbjJIb21lLmNsYXNzKTsKKyAgICAgICAgU2ltcGxlU2Vzc2lvbjIgYmVhbiA9IGhvbWUuY3JlYXRlKCk7CiAKLQkgICAgcmV0dXJuIGJlYW4udGVzdDEoIkFESVRZQV9CRUFOXzJfMiIsIDIwMCk7CisgICAgICAgIHJldHVybiBiZWFuLnRlc3QxKCJBRElUWUFfQkVBTl8yXzIiLCAyMDApOwogCi0JfSBjYXRjaCggU1FMRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgcmV0dXJuIGZhbHNlOwotCX0gZmluYWxseSB7Ci0JICAgIGlmIChzdG10MSAhPSBudWxsKSB7IAotCSAgICAgICAgdHJ5IHsgc3RtdDEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KLQkgICAgfQotCSAgICBpZiAoY29ubjEgIT0gbnVsbCkgeyAKLQkgICAgICAgIHRyeSB7IGNvbm4xLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9Ci0JICAgIH0KLQl9CisgICAgfSBjYXRjaCggU1FMRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmIChzdG10MSAhPSBudWxsKSB7CisgICAgICAgICAgICB0cnkgeyBzdG10MS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQorICAgICAgICB9CisgICAgICAgIGlmIChjb25uMSAhPSBudWxsKSB7CisgICAgICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQorICAgICAgICB9CisgICAgfQogICAgIH0KIAogICAgIC8qKgpAQCAtMjEzLDUwICsyMTMsNTAgQEAKICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBxdWVyeSgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpIGljXy5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZSIpOwotCUNvbm5lY3Rpb24gY29ubiA9IG51bGw7Ci0JU3RhdGVtZW50IHN0bXQgPSBudWxsOwotCVJlc3VsdFNldCBycyA9IG51bGw7CisgICAgQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKKyAgICBTdGF0ZW1lbnQgc3RtdCA9IG51bGw7CisgICAgUmVzdWx0U2V0IHJzID0gbnVsbDsKIAotCXRyeSB7Ci0JICAgIGNvbm4gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIHN0bXQgPSBjb25uLmNyZWF0ZVN0YXRlbWVudCgpOwotCSAgICBycyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KCJTRUxFQ1QgKiBGUk9NIENPTk5TSEFSSU5HIFdIRVJFIGNfaWQ9MTAwIik7Ci0JICAgIGlmICggcnMubmV4dCgpICkgeworICAgIHRyeSB7CisgICAgICAgIGNvbm4gPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIHN0bXQgPSBjb25uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICBycyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KCJTRUxFQ1QgKiBGUk9NIENPTk5TSEFSSU5HIFdIRVJFIGNfaWQ9MTAwIik7CisgICAgICAgIGlmICggcnMubmV4dCgpICkgewogICAgICAgICAgICAgICAgIFN0cmluZyBzdHIgPSBycy5nZXRTdHJpbmcoIDIgKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCIgc3RyID0+ICIgKyBzdHIgKTsKLQkJaWYoICJBRElUWUFfQkVBTl8yIi5lcXVhbHMoc3RyLnRyaW0oKSkgKSB7Ci0JCSAgICByZXR1cm4gdHJ1ZTsKLQkJfSAKLQkgICAgfQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBzdHIgPT4gIiArIHN0ciApOworICAgICAgICBpZiggIkFESVRZQV9CRUFOXzIiLmVxdWFscyhzdHIudHJpbSgpKSApIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIH0KIAogCiAKLQkgICAgcmV0dXJuIGZhbHNlOwotCX0gY2F0Y2goIFNRTEV4Y2VwdGlvbiBlICkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICByZXR1cm4gZmFsc2U7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYoIHJzICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgeyBycy5jbG9zZSgpIDsgfWNhdGNoKCBFeGNlcHRpb24gZSApIHt9Ci0JICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gY2F0Y2goIFNRTEV4Y2VwdGlvbiBlICkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYoIHJzICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeyBycy5jbG9zZSgpIDsgfWNhdGNoKCBFeGNlcHRpb24gZSApIHt9CisgICAgICAgIH0KIAotCSAgICBpZiggc3RtdCAhPSBudWxsKSB7Ci0JICAgICAgICB0cnkgeyBzdG10LmNsb3NlKCk7IH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsgfQotCSAgICB9Ci0gICAgICAgICAgICAKLQkgICAgLy9jbGVhbnVwIHRhYmxlCi0JICAgIHRyeSB7Ci0JICAgICAgICBzdG10ID0gY29ubi5jcmVhdGVTdGF0ZW1lbnQoKTsKLQkJc3RtdC5leGVjdXRlVXBkYXRlKCAiREVMRVRFIEZST00gQ09OTlNIQVJJTkcgV0hFUkUgY19pZD0xMDAiICk7Ci0JICAgICAgICBzdG10LmNsb3NlKCk7CQotCSAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSApIHsgCi0JICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICB9CisgICAgICAgIGlmKCBzdG10ICE9IG51bGwpIHsKKyAgICAgICAgICAgIHRyeSB7IHN0bXQuY2xvc2UoKTsgfSBjYXRjaChFeGNlcHRpb24gZSkgeyB9CisgICAgICAgIH0KIAotCSAgICBpZiggY29ubiAhPSBudWxsICkgeyB0cnkgeyBjb25uLmNsb3NlKCk7IH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsgfQotCSAgICB9Ci0JfQotCQorICAgICAgICAvL2NsZWFudXAgdGFibGUKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHN0bXQgPSBjb25uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICBzdG10LmV4ZWN1dGVVcGRhdGUoICJERUxFVEUgRlJPTSBDT05OU0hBUklORyBXSEVSRSBjX2lkPTEwMCIgKTsKKyAgICAgICAgICAgIHN0bXQuY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUgKSB7CisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CisKKyAgICAgICAgaWYoIGNvbm4gIT0gbnVsbCApIHsgdHJ5IHsgY29ubi5jbG9zZSgpOyB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7IH0KKyAgICAgICAgfQorICAgIH0KKwogICAgIH0KIAogICAgIC8qKgpAQCAtMjY1LDcyICsyNjUsNzIgQEAKICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBxdWVyeTIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpY18ubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKLQlDb25uZWN0aW9uIGNvbm4gPSBudWxsOwotCVN0YXRlbWVudCBzdG10ID0gbnVsbDsKLQlSZXN1bHRTZXQgcnMgPSBudWxsOwotCVJlc3VsdFNldCByczEgPSBudWxsOwotCVN0cmluZyBzdHIxID0gbnVsbDsKLQlTdHJpbmcgc3RyMiA9IG51bGw7Ci0JCisgICAgQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKKyAgICBTdGF0ZW1lbnQgc3RtdCA9IG51bGw7CisgICAgUmVzdWx0U2V0IHJzID0gbnVsbDsKKyAgICBSZXN1bHRTZXQgcnMxID0gbnVsbDsKKyAgICBTdHJpbmcgc3RyMSA9IG51bGw7CisgICAgU3RyaW5nIHN0cjIgPSBudWxsOwogCi0JdHJ5IHsKLQkgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQkgICAgc3RtdCA9IGNvbm4uY3JlYXRlU3RhdGVtZW50KCk7Ci0JICAgIHJzID0gc3RtdC5leGVjdXRlUXVlcnkoIlNFTEVDVCAqIEZST00gQ09OTlNIQVJJTkcgV0hFUkUgY19pZD0xMDAiKTsKLQkgICAgaWYgKCBycy5uZXh0KCkgKSB7CisKKyAgICB0cnkgeworICAgICAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICBzdG10ID0gY29ubi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgcnMgPSBzdG10LmV4ZWN1dGVRdWVyeSgiU0VMRUNUICogRlJPTSBDT05OU0hBUklORyBXSEVSRSBjX2lkPTEwMCIpOworICAgICAgICBpZiAoIHJzLm5leHQoKSApIHsKICAgICAgICAgICAgICAgICBzdHIxID0gcnMuZ2V0U3RyaW5nKDIpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIHN0cjEgPT4gIiArIHN0cjEgKTsKLQkgICAgfQorICAgICAgICB9CiAKLQkgICAgcnMxID0gc3RtdC5leGVjdXRlUXVlcnkoIlNFTEVDVCAqIEZST00gQ09OTlNIQVJJTkcgV0hFUkUgY19pZD0yMDAiKTsKLQkgICAgaWYgKCByczEubmV4dCgpICkgewotCSAgICAgICAgc3RyMiA9IHJzMS5nZXRTdHJpbmcoMik7CisgICAgICAgIHJzMSA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KCJTRUxFQ1QgKiBGUk9NIENPTk5TSEFSSU5HIFdIRVJFIGNfaWQ9MjAwIik7CisgICAgICAgIGlmICggcnMxLm5leHQoKSApIHsKKyAgICAgICAgICAgIHN0cjIgPSByczEuZ2V0U3RyaW5nKDIpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIHN0cjIgPT4gIiArIHN0cjIgKTsKLQkgICAgfQotICAgICAgICAgICAgaWYoICJBRElUWUEiLmVxdWFscyhzdHIxLnRyaW0oKSkgJiYgCi0JICAgICAgICAiQURJVFlBX0JFQU5fMl8yIi5lcXVhbHMoc3RyMi50cmltKCkpKSB7CisgICAgICAgIH0KKyAgICAgICAgICAgIGlmKCAiQURJVFlBIi5lcXVhbHMoc3RyMS50cmltKCkpICYmCisgICAgICAgICAgICAiQURJVFlBX0JFQU5fMl8yIi5lcXVhbHMoc3RyMi50cmltKCkpKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9IAorICAgICAgICAgICAgfQogCi0JICAgIHJldHVybiBmYWxzZTsKLQl9IGNhdGNoKCBTUUxFeGNlcHRpb24gZSApIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgcmV0dXJuIGZhbHNlOwotCX0gZmluYWxseSB7Ci0JICAgIGlmKCBycyAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsgcnMuY2xvc2UoKSA7IH1jYXRjaCggRXhjZXB0aW9uIGUgKSB7fQotCSAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGNhdGNoKCBTUUxFeGNlcHRpb24gZSApIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmKCBycyAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsgcnMuY2xvc2UoKSA7IH1jYXRjaCggRXhjZXB0aW9uIGUgKSB7fQorICAgICAgICB9CiAKICAgICAgICAgICAgIGlmKCByczEgIT0gbnVsbCkgewotCSAgICAgICAgdHJ5IHsgcnMxLmNsb3NlKCk7IH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsgfQotCSAgICB9CisgICAgICAgICAgICB0cnkgeyByczEuY2xvc2UoKTsgfSBjYXRjaChFeGNlcHRpb24gZSkgeyB9CisgICAgICAgIH0KIAotCSAgICBpZiggc3RtdCAhPSBudWxsKSB7Ci0JICAgICAgICB0cnkgeyBzdG10LmNsb3NlKCk7IH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsgfQotCSAgICB9CisgICAgICAgIGlmKCBzdG10ICE9IG51bGwpIHsKKyAgICAgICAgICAgIHRyeSB7IHN0bXQuY2xvc2UoKTsgfSBjYXRjaChFeGNlcHRpb24gZSkgeyB9CisgICAgICAgIH0KIAotICAgCi0JICAgIC8vY2xlYW51cCB0YWJsZQotCSAgICB0cnkgewotCSAgICAgICAgc3RtdCA9IGNvbm4uY3JlYXRlU3RhdGVtZW50KCk7Ci0JCXN0bXQuZXhlY3V0ZVVwZGF0ZSggIkRFTEVURSBGUk9NIENPTk5TSEFSSU5HIFdIRVJFIGNfaWQ9MTAwIiApOwotCSAgICAgICAgc3RtdC5jbG9zZSgpOwkKLQkgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUgKSB7IAotCSAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgfQogCi0JICAgIHRyeSB7Ci0JICAgICAgICBzdG10ID0gY29ubi5jcmVhdGVTdGF0ZW1lbnQoKTsKLQkJc3RtdC5leGVjdXRlVXBkYXRlKCAiREVMRVRFIEZST00gQ09OTlNIQVJJTkcgV0hFUkUgY19pZD0yMDAiICk7Ci0JICAgICAgICBzdG10LmNsb3NlKCk7CQotCSAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSApIHsgCi0JICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICB9CisgICAgICAgIC8vY2xlYW51cCB0YWJsZQorICAgICAgICB0cnkgeworICAgICAgICAgICAgc3RtdCA9IGNvbm4uY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgIHN0bXQuZXhlY3V0ZVVwZGF0ZSggIkRFTEVURSBGUk9NIENPTk5TSEFSSU5HIFdIRVJFIGNfaWQ9MTAwIiApOworICAgICAgICAgICAgc3RtdC5jbG9zZSgpOworICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSApIHsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KIAotCSAgICBpZiggY29ubiAhPSBudWxsICkgeyB0cnkgeyBjb25uLmNsb3NlKCk7IH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsgfQotCSAgICB9Ci0JfQotCQorICAgICAgICB0cnkgeworICAgICAgICAgICAgc3RtdCA9IGNvbm4uY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgIHN0bXQuZXhlY3V0ZVVwZGF0ZSggIkRFTEVURSBGUk9NIENPTk5TSEFSSU5HIFdIRVJFIGNfaWQ9MjAwIiApOworICAgICAgICAgICAgc3RtdC5jbG9zZSgpOworICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSApIHsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiggY29ubiAhPSBudWxsICkgeyB0cnkgeyBjb25uLmNsb3NlKCk7IH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsgfQorICAgICAgICB9CisgICAgfQorCiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHt9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5zaGFyaW5nL3hhL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubnNoYXJpbmcveGEvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IDVhMzMzZmQuLmNkNWZmNTggMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubnNoYXJpbmcveGEvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubnNoYXJpbmcveGEvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDYgKzEsNiBAQAotRHJvcCB0YWJsZSBDT05OU0hBUklORzsNCi0NCi1DUkVBVEUgVEFCTEUgQ09OTlNIQVJJTkcgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBjb25zdHJhaW50IHBrX2tleSBwcmltYXJ5IGtleSwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCitEcm9wIHRhYmxlIENPTk5TSEFSSU5HOworCitDUkVBVEUgVEFCTEUgQ09OTlNIQVJJTkcgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIGNvbnN0cmFpbnQgcGtfa2V5IHByaW1hcnkga2V5LAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQorKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubnNoYXJpbmcveGEvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29ubnNoYXJpbmcveGEvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAppbmRleCBjMjgxN2Y2Li43N2QxZDVhIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2Nvbm5zaGFyaW5nL3hhL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb25uc2hhcmluZy94YS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xICsxIEBACi1Ecm9wIHRhYmxlIENPTk5TSEFSSU5HOw0KK0Ryb3AgdGFibGUgQ09OTlNIQVJJTkc7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRoL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRoL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZjQxN2ZiNC4uOTdhNjIzMCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTggKzE1LDE4IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItYm1wLWNvbnRhdXRoIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRoL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgvYnVpbGQueG1sCmluZGV4IGY3ZWY5NjkuLjUwOTA0NTkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgvYnVpbGQueG1sCkBAIC0zNyw3ICszNyw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OSwxMyArNDksMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqL1NpbXBsZUJNUC5jbGFzcywgKiovU2ltcGxlQk1QSG9tZS5jbGFzcywqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KQEAgLTYzLDE0ICs2MywxNCBAQAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktamRiYy1jb21tb24iLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCIvPgpAQCAtNzgsNyArNzgsNyBAQAogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWpkYmMtY29tbW9uIi8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRoL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhCmluZGV4IDRiNzRiNmYuLjE4OTQyOTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhCkBAIC0yOSwzNCArMjksMzQgQEAKICAgICBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCi0gICAgICAgIAlTaW1wbGVCTVBDbGllbnQgY2xpZW50ID0gbmV3IFNpbXBsZUJNUENsaWVudCgpOworCisgICAgICAgICAgICBTaW1wbGVCTVBDbGllbnQgY2xpZW50ID0gbmV3IFNpbXBsZUJNUENsaWVudCgpOwogICAgICAgICAgICAgIGNsaWVudC5ydW5UZXN0KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgcnVuVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotCVN0cmluZyB0ZXN0U3VpdGUgPSAiQ29udEF1dGggIjsKKyAgICBTdHJpbmcgdGVzdFN1aXRlID0gIkNvbnRBdXRoICI7CiAKICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgT2JqZWN0IG9ialJlZiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlQk1QSG9tZSIpOwotCVNpbXBsZUJNUEhvbWUgc2ltcGxlQk1QSG9tZSA9IChTaW1wbGVCTVBIb21lKQorICAgIFNpbXBsZUJNUEhvbWUgc2ltcGxlQk1QSG9tZSA9IChTaW1wbGVCTVBIb21lKQogICAgICAgICBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ialJlZiwgU2ltcGxlQk1QSG9tZS5jbGFzcyk7CiAKICAgICAgICAgU2ltcGxlQk1QIHNpbXBsZUJNUCA9IHNpbXBsZUJNUEhvbWUuY3JlYXRlKCk7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIkpEQkMgQ29udGFpbmVyIEF1dGhlbnRpY2F0aW9uIHRlc3QiKTsKIAogICAgICAgICBpZiAoIHNpbXBsZUJNUC50ZXN0MSgpICkgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QxIDogIiwgc3RhdC5QQVNTKTsKLQl9IGVsc2UgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QxIDogIiwgc3RhdC5GQUlMKTsKLQl9Ci0JaWYgKCBzaW1wbGVCTVAudGVzdDIoKSApIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MiA6ICIsIHN0YXQuUEFTUyk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MiA6ICIsIHN0YXQuRkFJTCk7Ci0JfQorICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QxIDogIiwgc3RhdC5QQVNTKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QxIDogIiwgc3RhdC5GQUlMKTsKKyAgICB9CisgICAgaWYgKCBzaW1wbGVCTVAudGVzdDIoKSApIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MiA6ICIsIHN0YXQuUEFTUyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MiA6ICIsIHN0YXQuRkFJTCk7CisgICAgfQogCi0JU3lzdGVtLm91dC5wcmludGxuKCJqZGJjIGNvbnRhdXRoIHN0YXR1czogIik7Ci0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImpkYmMgY29udGF1dGggc3RhdHVzOiAiKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgvZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCBjNmMyNTY5Li4wNWE3YmVjIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRoL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC01Nyw2ICs1Nyw2IEBACiAgICAgICA8dHJhbnMtYXR0cmlidXRlPlJlcXVpcmVkPC90cmFucy1hdHRyaWJ1dGU+CiAgICAgPC9jb250YWluZXItdHJhbnNhY3Rpb24+CiAgIDwvYXNzZW1ibHktZGVzY3JpcHRvcj4KLSAgICAgIAorCiA8L2VqYi1qYXI+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgvZWpiL1NpbXBsZUJNUEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQppbmRleCA1Y2VlYzQxLi41MmQ5OTAwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRoL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCkBAIC0zMCw1OCArMzAsNTggQEAKICAgICBwcm90ZWN0ZWQgRGF0YVNvdXJjZSBkczsKIAogICAgIHB1YmxpYyB2b2lkIHNldEVudGl0eUNvbnRleHQoRW50aXR5Q29udGV4dCBlbnRpdHlDb250ZXh0KSB7Ci0JQ29udGV4dCBjb250ZXh0ID0gbnVsbDsKLQl0cnkgewotCSAgICBjb250ZXh0ICAgID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JICAgIGRzID0gKERhdGFTb3VyY2UpIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKLQl9IGNhdGNoIChOYW1pbmdFeGNlcHRpb24gZSkgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJjYW50IGZpbmQgZGF0YXNvdXJjZSIpOwotCX0KKyAgICBDb250ZXh0IGNvbnRleHQgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIGNvbnRleHQgICAgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgZHMgPSAoRGF0YVNvdXJjZSkgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZSIpOworICAgIH0gY2F0Y2ggKE5hbWluZ0V4Y2VwdGlvbiBlKSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImNhbnQgZmluZCBkYXRhc291cmNlIik7CisgICAgfQogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlsqKlNpbXBsZUJNUEJlYW4qKl0gRG9uZSB3aXRoIHNldEVudGl0eUNvbnRleHQuLi4uIik7CiAgICAgfQogCiAgICAgcHVibGljIEludGVnZXIgZWpiQ3JlYXRlKCkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7Ci0JcmV0dXJuIG5ldyBJbnRlZ2VyKDEpOworICAgIHJldHVybiBuZXcgSW50ZWdlcigxKTsKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MSgpIHsKICAgICAgICAgLy9jb250YWluZXIgYXV0aCArIHVzZXIvcHdkIHNwZWNpZmllZCAtIHNob3VsZCBwYXNzCi0JQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKLQlib29sZWFuIHBhc3NlZCA9IHRydWU7Ci0JdHJ5IHsKLQkgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oIkRCVVNFUiIsICJEQlBBU1NXT1JEIiApOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIHBhc3NlZCA9IGZhbHNlOwotCX0gZmluYWxseSB7Ci0JICAgIGlmICggY29ubiAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsKLQkgICAgICAgICAgICBjb25uLmNsb3NlKCk7Ci0JCX0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30gICAgCi0JICAgIH0KLQl9Ci0KLQotCXJldHVybiBwYXNzZWQ7CisgICAgQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKKyAgICBib29sZWFuIHBhc3NlZCA9IHRydWU7CisgICAgdHJ5IHsKKyAgICAgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oIkRCVVNFUiIsICJEQlBBU1NXT1JEIiApOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmICggY29ubiAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjb25uLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQogICAgIH0KLSAgICAKKworCisgICAgcmV0dXJuIHBhc3NlZDsKKyAgICB9CisKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MigpIHsKICAgICAgICAgLy9jb250YWluZXIgYXV0aCArIHVzZXIvcHdkIE5PVCBzcGVjaWZpZWQgLSBzaG91bGQgcGFzcwotCUNvbm5lY3Rpb24gY29ubiA9IG51bGw7Ci0JYm9vbGVhbiBwYXNzZWQgPSB0cnVlOwotCXRyeSB7Ci0JICAgIGNvbm4gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgcGFzc2VkID0gZmFsc2U7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKCBjb25uICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgewotCSAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKLQkJfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fSAgICAKLQkgICAgfQotCX0KKyAgICBDb25uZWN0aW9uIGNvbm4gPSBudWxsOworICAgIGJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKKyAgICB0cnkgeworICAgICAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmICggY29ubiAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjb25uLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQorICAgIH0KIAotCQotCXJldHVybiBwYXNzZWQ7CisKKyAgICByZXR1cm4gcGFzc2VkOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7fQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRoL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCBlNDkxNGY2Li5mMjU2MDc2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRoL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRoL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSw3ICsxLDcgQEAKLURyb3AgdGFibGUgT19DdXN0b21lcjsNCi0NCi1DUkVBVEUgVEFCTEUgT19DdXN0b21lciAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikNCi0pOw0KLQ0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKKworQ1JFQVRFIFRBQkxFIE9fQ3VzdG9tZXIgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQorKTsKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IDcwZDFmY2MuLmQ4NTRiOTUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRoL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEgKzEgQEAKLURyb3AgdGFibGUgT19DdXN0b21lcjsNCitEcm9wIHRhYmxlIE9fQ3VzdG9tZXI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRoMS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aDEvYnVpbGQucHJvcGVydGllcwppbmRleCA0MzIyN2NjLi45YTY4NGQ4IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRoMS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgxL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE4ICsxNSwxOCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWJtcC1jb250YXV0aDEiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgxL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgxL2J1aWxkLnhtbAppbmRleCA0MmFmOWU3Li43ZTgxN2I0IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRoMS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aDEvYnVpbGQueG1sCkBAIC00Niw3ICs0Niw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC01OCwxMyArNTgsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqL1NpbXBsZUJNUC5jbGFzcywgKiovU2ltcGxlQk1QSG9tZS5jbGFzcywqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KQEAgLTgxLDcgKzgxLDcgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlc2V0LWRlcmJ5LWZvci1uby1hdXRoZW50aWNhdGlvbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9wb2ludGJhc2Uuc3FsIi8+CkBAIC04OSw3ICs4OSw3IEBACiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamRiYy1jb21tb24iLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgxL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgxL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQppbmRleCA5ZWE3NGNiLi44OTYwYmRjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRoMS9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aDEvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhCkBAIC0yOCwzMiArMjgsMzIgQEAKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAgCi0JU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCk7Ci0JU3RyaW5nIHRlc3RTdWl0ZSA9ICJDb250QXV0aDEgIjsKKworICAgIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOworICAgIFN0cmluZyB0ZXN0U3VpdGUgPSAiQ29udEF1dGgxICI7CiAKICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgT2JqZWN0IG9ialJlZiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlQk1QSG9tZSIpOwotCVNpbXBsZUJNUEhvbWUgc2ltcGxlQk1QSG9tZSA9IChTaW1wbGVCTVBIb21lKQorICAgIFNpbXBsZUJNUEhvbWUgc2ltcGxlQk1QSG9tZSA9IChTaW1wbGVCTVBIb21lKQogICAgICAgICBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ialJlZiwgU2ltcGxlQk1QSG9tZS5jbGFzcyk7Ci0gICAgICAgIAotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBUZXN0IDIgd2lsbCBmYWlsIHdpdGggRGVyYnkiKTsKLQlzdGF0LmFkZERlc2NyaXB0aW9uKCJKREJDIENvbnRhaW5lciBBdXRoZW50aWNhdGlvbiAxIHRlc3RzICIpOwotICAgICAgICBTaW1wbGVCTVAgc2ltcGxlQk1QID0gc2ltcGxlQk1QSG9tZS5jcmVhdGUoKTsKLSAgCQotICAgICAgICBpZiAoIHNpbXBsZUJNUC50ZXN0MSgpICkgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QxIDogIiwgc3RhdC5QQVNTKTsKLQl9IGVsc2UgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QxIDogIiwgc3RhdC5GQUlMKTsKLQl9Ci0JaWYgKCBzaW1wbGVCTVAudGVzdDIoKSApIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MiA6ICIsIHN0YXQuUEFTUyk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MiA6ICIsIHN0YXQuRkFJTCk7Ci0JfQogCi0JU3lzdGVtLm91dC5wcmludGxuKCJqZGJjIGNvbnRhdXRoMSBzdGF0dXM6ICIpOwotCXN0YXQucHJpbnRTdW1tYXJ5KCk7Ci0gICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFRlc3QgMiB3aWxsIGZhaWwgd2l0aCBEZXJieSIpOworICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIkpEQkMgQ29udGFpbmVyIEF1dGhlbnRpY2F0aW9uIDEgdGVzdHMgIik7CisgICAgICAgIFNpbXBsZUJNUCBzaW1wbGVCTVAgPSBzaW1wbGVCTVBIb21lLmNyZWF0ZSgpOworCisgICAgICAgIGlmICggc2ltcGxlQk1QLnRlc3QxKCkgKSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDEgOiAiLCBzdGF0LlBBU1MpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDEgOiAiLCBzdGF0LkZBSUwpOworICAgIH0KKyAgICBpZiAoIHNpbXBsZUJNUC50ZXN0MigpICkgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QyIDogIiwgc3RhdC5QQVNTKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QyIDogIiwgc3RhdC5GQUlMKTsKKyAgICB9CisKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImpkYmMgY29udGF1dGgxIHN0YXR1czogIik7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKKwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgxL2Rlc2NyaXB0b3IvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRoMS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IDk5ODU2ZjYuLmQ4NTFjNGIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgxL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aDEvZGVzY3JpcHRvci9lamItamFyLnhtbApAQCAtNTcsNiArNTcsNiBAQAogICAgICAgPHRyYW5zLWF0dHJpYnV0ZT5SZXF1aXJlZDwvdHJhbnMtYXR0cmlidXRlPgogICAgIDwvY29udGFpbmVyLXRyYW5zYWN0aW9uPgogICA8L2Fzc2VtYmx5LWRlc2NyaXB0b3I+Ci0gICAgICAKKwogPC9lamItamFyPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRoMS9lamIvU2ltcGxlQk1QQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aDEvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQppbmRleCAwMDRiOGQzLi42ZGQ3MDU4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRoMS9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgxL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKQEAgLTMxLDEzICszMSwxMyBAQAogICAgIGludCBpZDsKIAogICAgIHB1YmxpYyB2b2lkIHNldEVudGl0eUNvbnRleHQoRW50aXR5Q29udGV4dCBlbnRpdHlDb250ZXh0KSB7Ci0JQ29udGV4dCBjb250ZXh0ID0gbnVsbDsKLQl0cnkgewotCSAgICBjb250ZXh0ICAgID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JICAgIGRzID0gKERhdGFTb3VyY2UpIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKLQl9IGNhdGNoIChOYW1pbmdFeGNlcHRpb24gZSkgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJjYW50IGZpbmQgZGF0YXNvdXJjZSIpOwotCX0KKyAgICBDb250ZXh0IGNvbnRleHQgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIGNvbnRleHQgICAgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgZHMgPSAoRGF0YVNvdXJjZSkgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZSIpOworICAgIH0gY2F0Y2ggKE5hbWluZ0V4Y2VwdGlvbiBlKSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImNhbnQgZmluZCBkYXRhc291cmNlIik7CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyBJbnRlZ2VyIGVqYkNyZWF0ZSgpIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewpAQCAtNDYsNDIgKzQ2LDQyIEBACiAKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MSgpIHsKICAgICAgICAgLy9jb250YWluZXIgYXV0aCArIHVzZXIvcHdkIHNwZWNpZmllZCAtIHNob3VsZCBwYXNzCi0JYm9vbGVhbiBwYXNzZWQgPSB0cnVlOwotCUNvbm5lY3Rpb24gY29ubiA9IG51bGw7Ci0JdHJ5IHsKLQkgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oIkRCVVNFUiIsICJEQlBBU1NXT1JEIiApOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIHBhc3NlZCA9IGZhbHNlOwotCX0gZmluYWxseSB7Ci0JICAgIGlmICggY29ubiAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsKLQkgICAgICAgICAgICBjb25uLmNsb3NlKCk7Ci0JCX0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30gICAgCi0JICAgIH0KLQl9Ci0KLQotCXJldHVybiBwYXNzZWQ7CisgICAgYm9vbGVhbiBwYXNzZWQgPSB0cnVlOworICAgIENvbm5lY3Rpb24gY29ubiA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oIkRCVVNFUiIsICJEQlBBU1NXT1JEIiApOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmICggY29ubiAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjb25uLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQogICAgIH0KLSAgICAKKworCisgICAgcmV0dXJuIHBhc3NlZDsKKyAgICB9CisKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MigpIHsKICAgICAgICAgLy9jb250YWluZXIgYXV0aCArIHdyb25nIHVzZXIvcGFzc3dkIGluIHJlc291cmNlcmVmIC0gc2hvdWxkIGZhaWwKLQlDb25uZWN0aW9uIGNvbm4gPSBudWxsOwotCWJvb2xlYW4gcGFzc2VkID0gZmFsc2U7Ci0JdHJ5IHsKLQkgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICBwYXNzZWQgPSB0cnVlOwotCX0gZmluYWxseSB7Ci0JICAgIGlmICggY29ubiAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsKLQkgICAgICAgICAgICBjb25uLmNsb3NlKCk7Ci0JCX0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30gICAgCi0JICAgIH0KLQl9CisgICAgQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKKyAgICBib29sZWFuIHBhc3NlZCA9IGZhbHNlOworICAgIHRyeSB7CisgICAgICAgIGNvbm4gPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgcGFzc2VkID0gdHJ1ZTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBpZiAoIGNvbm4gIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgY29ubi5jbG9zZSgpOworICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CisgICAgICAgIH0KKyAgICB9CiAKIAotCXJldHVybiBwYXNzZWQ7CisgICAgcmV0dXJuIHBhc3NlZDsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJMb2FkKCkge30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgxL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgxL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCBlNDkxNGY2Li5mMjU2MDc2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRoMS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aDEvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDcgKzEsNyBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KLQ0KLUNSRUFURSBUQUJMRSBPX0N1c3RvbWVyICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOworCitDUkVBVEUgVEFCTEUgT19DdXN0b21lciAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRoMS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aDEvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAppbmRleCA3MGQxZmNjLi5kODU0Yjk1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRoMS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgxL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEgKzEgQEAKLURyb3AgdGFibGUgT19DdXN0b21lcjsNCitEcm9wIHRhYmxlIE9fQ3VzdG9tZXI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRoMXR4L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRoMXR4L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZGMxNjg5NC4uZTMyYjRjOSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aDF0eC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgxdHgvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTkgKzE1LDE5IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItYm1wLWNvbnRhdXRoMXR4Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0iamRiYy5yZXNvdXJjZS50eXBlIiB2YWx1ZT0iamF2YXguc3FsLlhBRGF0YVNvdXJjZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aDF0eC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRoMXR4L2J1aWxkLnhtbAppbmRleCBkYWViYjg1Li4yYzA5ZDNiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRoMXR4L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRoMXR4L2J1aWxkLnhtbApAQCAtNDYsNyArNDYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNTgsMTIgKzU4LDEyIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi9TaW1wbGVCTVAuY2xhc3MsICoqL1NpbXBsZUJNUEhvbWUuY2xhc3MsKiovKkNsaWVudCouY2xhc3MiIC8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KQEAgLTc3LDkgKzc3LDkgQEAKICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1hcHBhdXRoLXBvb2wxIi8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL3MxcWVhcHBhdXRoMSIvPgogICAgICAgPC9hbnRjYWxsPgotICAgICAKKwogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0dXAtZGVyYnktZm9yLWF1dGhlbnRpY2F0aW9uIi8+CkBAIC04OSw3ICs4OSw3IEBACiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXNldC1kZXJieS1mb3Itbm8tYXV0aGVudGljYXRpb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KIApAQCAtMTA0LDcgKzEwNCw3IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgICA8L2FudGNhbGw+CiAKLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aDF0eC9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRoMXR4L2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQppbmRleCBlN2ZkMzBmLi44Nzk4NzA2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRoMXR4L2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRoMXR4L2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQpAQCAtMjksMjkgKzI5LDI5IEBACiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKLQlTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKLQlTdHJpbmcgdGVzdFN1aXRlID0gIkNvbnRBdXRoMVRYICI7CisgICAgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCk7CisgICAgU3RyaW5nIHRlc3RTdWl0ZSA9ICJDb250QXV0aDFUWCAiOwogCiAgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgIE9iamVjdCBvYmpSZWYgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZUJNUEhvbWUiKTsKLQlTaW1wbGVCTVBIb21lIHNpbXBsZUJNUEhvbWUgPSAoU2ltcGxlQk1QSG9tZSkKKyAgICBTaW1wbGVCTVBIb21lIHNpbXBsZUJNUEhvbWUgPSAoU2ltcGxlQk1QSG9tZSkKICAgICAgICAgamF2YXgucm1pLlBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpSZWYsIFNpbXBsZUJNUEhvbWUuY2xhc3MpOwogCiAgICAgICAgIFNpbXBsZUJNUCBzaW1wbGVCTVAgPSBzaW1wbGVCTVBIb21lLmNyZWF0ZSgpOwotCXN0YXQuYWRkRGVzY3JpcHRpb24oIkpEQkMgQ29udEF1dGgxVFggdGVzdHMiKTsKKyAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJKREJDIENvbnRBdXRoMVRYIHRlc3RzIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIEFsbCB0ZXN0cyBzaGFsbCBmYWlsIHRpbGwgYSBzdGFibGUgWEEgZHJpdmVyIGlzIGludGVncmF0ZWQgaW50byBEZXJieSIpOwogICAgICAgICBpZiAoIHNpbXBsZUJNUC50ZXN0MSgpICkgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QxIDogIiwgc3RhdC5QQVNTKTsKLQl9IGVsc2UgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QxIDogIiwgc3RhdC5GQUlMKTsKLQl9Ci0JaWYgKCBzaW1wbGVCTVAudGVzdDIoKSApIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MiA6ICIsIHN0YXQuUEFTUyk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MiA6ICIsIHN0YXQuRkFJTCk7Ci0JfQorICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QxIDogIiwgc3RhdC5QQVNTKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QxIDogIiwgc3RhdC5GQUlMKTsKKyAgICB9CisgICAgaWYgKCBzaW1wbGVCTVAudGVzdDIoKSApIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MiA6ICIsIHN0YXQuUEFTUyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MiA6ICIsIHN0YXQuRkFJTCk7CisgICAgfQogCi0JU3lzdGVtLm91dC5wcmludGxuKCJqZGJjIGNvbnRhdXRoMXR4IHN0YXR1czogIik7Ci0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImpkYmMgY29udGF1dGgxdHggc3RhdHVzOiAiKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgxdHgvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgxdHgvZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCBkOTIwOTg5Li4wYmJmODU2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRoMXR4L2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aDF0eC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC01Nyw2ICs1Nyw2IEBACiAgICAgICA8dHJhbnMtYXR0cmlidXRlPlJlcXVpcmVkPC90cmFucy1hdHRyaWJ1dGU+CiAgICAgPC9jb250YWluZXItdHJhbnNhY3Rpb24+CiAgIDwvYXNzZW1ibHktZGVzY3JpcHRvcj4KLSAgICAgIAorCiA8L2VqYi1qYXI+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgxdHgvZWpiL1NpbXBsZUJNUEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgxdHgvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQppbmRleCA2ZmM2ZGE4Li4yNTYyYmM4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRoMXR4L2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aDF0eC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCkBAIC0zMSwxMyArMzEsMTMgQEAKICAgICBpbnQgaWQ7CiAKICAgICBwdWJsaWMgdm9pZCBzZXRFbnRpdHlDb250ZXh0KEVudGl0eUNvbnRleHQgZW50aXR5Q29udGV4dCkgewotCUNvbnRleHQgY29udGV4dCA9IG51bGw7Ci0JdHJ5IHsKLQkgICAgY29udGV4dCAgICA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCSAgICBkcyA9IChEYXRhU291cmNlKSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNldHgiKTsKLQl9IGNhdGNoIChOYW1pbmdFeGNlcHRpb24gZSkgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJjYW50IGZpbmQgZGF0YXNvdXJjZSIpOwotCX0KKyAgICBDb250ZXh0IGNvbnRleHQgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIGNvbnRleHQgICAgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgZHMgPSAoRGF0YVNvdXJjZSkgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZXR4Iik7CisgICAgfSBjYXRjaCAoTmFtaW5nRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiY2FudCBmaW5kIGRhdGFzb3VyY2UiKTsKKyAgICB9CiAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbKipTaW1wbGVCTVBCZWFuKipdIERvbmUgd2l0aCBzZXRFbnRpdHlDb250ZXh0Li4uLiIpOwogICAgIH0KIApAQCAtNDcsNDIgKzQ3LDQyIEBACiAKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MSgpIHsKICAgICAgICAgLy9jb250YWluZXIgYXV0aCArIHVzZXIvcHdkIHNwZWNpZmllZCAtIHNob3VsZCBwYXNzCi0JYm9vbGVhbiBwYXNzZWQgPSB0cnVlOwotCUNvbm5lY3Rpb24gY29ubiA9IG51bGw7Ci0JdHJ5IHsKLQkgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oIkRCVVNFUiIsICJEQlBBU1NXT1JEIiApOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIHBhc3NlZCA9IGZhbHNlOwotCX0gZmluYWxseSB7Ci0JICAgIGlmICggY29ubiAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsKLQkgICAgICAgICAgICBjb25uLmNsb3NlKCk7Ci0JCX0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30gICAgCi0JICAgIH0KLQl9Ci0KLQotCXJldHVybiBwYXNzZWQ7CisgICAgYm9vbGVhbiBwYXNzZWQgPSB0cnVlOworICAgIENvbm5lY3Rpb24gY29ubiA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oIkRCVVNFUiIsICJEQlBBU1NXT1JEIiApOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmICggY29ubiAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjb25uLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQogICAgIH0KLSAgICAKKworCisgICAgcmV0dXJuIHBhc3NlZDsKKyAgICB9CisKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MigpIHsKICAgICAgICAgLy9jb250YWluZXIgYXV0aCArIHdyb25nIHVzZXIvcGFzc3dkIGluIHJlc291cmNlcmVmIC0gc2hvdWxkIGZhaWwKLQlDb25uZWN0aW9uIGNvbm4gPSBudWxsOwotCWJvb2xlYW4gcGFzc2VkID0gZmFsc2U7Ci0JdHJ5IHsKLQkgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICBwYXNzZWQgPSB0cnVlOwotCX0gZmluYWxseSB7Ci0JICAgIGlmICggY29ubiAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsKLQkgICAgICAgICAgICBjb25uLmNsb3NlKCk7Ci0JCX0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30gICAgCi0JICAgIH0KLQl9CisgICAgQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKKyAgICBib29sZWFuIHBhc3NlZCA9IGZhbHNlOworICAgIHRyeSB7CisgICAgICAgIGNvbm4gPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgcGFzc2VkID0gdHJ1ZTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBpZiAoIGNvbm4gIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgY29ubi5jbG9zZSgpOworICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CisgICAgICAgIH0KKyAgICB9CiAKIAotCXJldHVybiBwYXNzZWQ7CisgICAgcmV0dXJuIHBhc3NlZDsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJMb2FkKCkge30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgxdHgvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aDF0eC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggZTQ5MTRmNi4uZjI1NjA3NiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aDF0eC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aDF0eC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsNyArMSw3IEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQotDQotQ1JFQVRFIFRBQkxFIE9fQ3VzdG9tZXIgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCitEcm9wIHRhYmxlIE9fQ3VzdG9tZXI7CisKK0NSRUFURSBUQUJMRSBPX0N1c3RvbWVyICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikKKyk7CisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgxdHgvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGgxdHgvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAppbmRleCA3MGQxZmNjLi5kODU0Yjk1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRoMXR4L3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aDF0eC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xICsxIEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aHR4L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRodHgvYnVpbGQucHJvcGVydGllcwppbmRleCBlYWQ5OGFjLi5iMGQzNjg3IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRodHgvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRodHgvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTkgKzE1LDE5IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItYm1wLWNvbnRhdXRodHgiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJqZGJjLnJlc291cmNlLnR5cGUiIHZhbHVlPSJqYXZheC5zcWwuWEFEYXRhU291cmNlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRodHgvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aHR4L2J1aWxkLnhtbAppbmRleCBlMTI5YzhlLi43OWJhMWY4IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRodHgvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGh0eC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDEyICs0NiwxMiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqLyouY2xhc3MiIC8+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovU2ltcGxlQk1QLmNsYXNzLCAqKi9TaW1wbGVCTVBIb21lLmNsYXNzLCoqLypDbGllbnQqLmNsYXNzIiAvPgogICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CkBAIC02NSwxOSArNjUsMTkgQEAKICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1hcHBhdXRoLXBvb2wxIi8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL3MxcWVhcHBhdXRoMSIvPgogICAgICAgPC9hbnRjYWxsPgotICAgICAKLSAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgCiAKLSAgIAotICAgIAorICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CisgICAgPC90YXJnZXQ+CisKKworCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KIApAQCAtOTMsNyArOTMsNyBAQAogICAgICAgICA8L2FudGNhbGw+CiAKIAotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRodHgvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aHR4L2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQppbmRleCA1NmI2NjRhLi4xZjhkNThmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRodHgvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGh0eC9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKQEAgLTMxLDM0ICszMSwzNCBAQAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogCi0JU2ltcGxlQk1QQ2xpZW50IGNsaWVudCA9IG5ldyBTaW1wbGVCTVBDbGllbnQoKTsKLQljbGllbnQucnVuVGVzdCgpOworICAgIFNpbXBsZUJNUENsaWVudCBjbGllbnQgPSBuZXcgU2ltcGxlQk1QQ2xpZW50KCk7CisgICAgY2xpZW50LnJ1blRlc3QoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBydW5UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAotCVN0cmluZyB0ZXN0U3VpdGUgPSAiQ29udEF1dGhUWCAiOworCisgICAgU3RyaW5nIHRlc3RTdWl0ZSA9ICJDb250QXV0aFRYICI7CiAKICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgT2JqZWN0IG9ialJlZiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlQk1QSG9tZSIpOwotCVNpbXBsZUJNUEhvbWUgc2ltcGxlQk1QSG9tZSA9IChTaW1wbGVCTVBIb21lKQorICAgIFNpbXBsZUJNUEhvbWUgc2ltcGxlQk1QSG9tZSA9IChTaW1wbGVCTVBIb21lKQogICAgICAgICBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ialJlZiwgU2ltcGxlQk1QSG9tZS5jbGFzcyk7CiAKICAgICAgICAgU2ltcGxlQk1QIHNpbXBsZUJNUCA9IHNpbXBsZUJNUEhvbWUuY3JlYXRlKCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFdpbGwgRmFpbCB0aWxsIGEgYmV0dGVyIFhBIGRyaXZlciBpcyBpbnRlZ3JhdGVkIGludG8gRGVyYnkiKTsKLQlzdGF0LmFkZERlc2NyaXB0aW9uKCJKREJDIENvbnRhaW5lciBBdXRoZW50aWNhdGlvbiBUWCB0ZXN0Iik7CisgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiSkRCQyBDb250YWluZXIgQXV0aGVudGljYXRpb24gVFggdGVzdCIpOwogICAgICAgICBpZiAoIHNpbXBsZUJNUC50ZXN0MSgpICkgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QxIDogIiwgc3RhdC5QQVNTKTsKLQl9IGVsc2UgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QxIDogIiwgc3RhdC5GQUlMKTsKLQl9Ci0JaWYgKCBzaW1wbGVCTVAudGVzdDIoKSApIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MiA6ICIsIHN0YXQuUEFTUyk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MiA6ICIsIHN0YXQuRkFJTCk7Ci0JfQorICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QxIDogIiwgc3RhdC5QQVNTKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QxIDogIiwgc3RhdC5GQUlMKTsKKyAgICB9CisgICAgaWYgKCBzaW1wbGVCTVAudGVzdDIoKSApIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MiA6ICIsIHN0YXQuUEFTUyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MiA6ICIsIHN0YXQuRkFJTCk7CisgICAgfQogCi0JU3lzdGVtLm91dC5wcmludGxuKCJqZGJjIGNvbnRhdXRodHggc3RhdHVzOiAiKTsKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiamRiYyBjb250YXV0aHR4IHN0YXR1czogIik7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRodHgvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGh0eC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IDNlNTg2MTYuLmZmMGMyNTIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGh0eC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGh0eC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC01Nyw2ICs1Nyw2IEBACiAgICAgICA8dHJhbnMtYXR0cmlidXRlPlJlcXVpcmVkPC90cmFucy1hdHRyaWJ1dGU+CiAgICAgPC9jb250YWluZXItdHJhbnNhY3Rpb24+CiAgIDwvYXNzZW1ibHktZGVzY3JpcHRvcj4KLSAgICAgIAorCiA8L2VqYi1qYXI+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGh0eC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aHR4L2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKaW5kZXggZjEyYmUxZi4uMmY4YzkwZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aHR4L2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aHR4L2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKQEAgLTMwLDU4ICszMCw1OCBAQAogICAgIHByb3RlY3RlZCBEYXRhU291cmNlIGRzOwogCiAgICAgcHVibGljIHZvaWQgc2V0RW50aXR5Q29udGV4dChFbnRpdHlDb250ZXh0IGVudGl0eUNvbnRleHQpIHsKLQlDb250ZXh0IGNvbnRleHQgPSBudWxsOwotCXRyeSB7Ci0JICAgIGNvbnRleHQgICAgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkgICAgZHMgPSAoRGF0YVNvdXJjZSkgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZXR4Iik7Ci0JfSBjYXRjaCAoTmFtaW5nRXhjZXB0aW9uIGUpIHsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiY2FudCBmaW5kIGRhdGFzb3VyY2UiKTsKLQl9CisgICAgQ29udGV4dCBjb250ZXh0ID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgICBjb250ZXh0ICAgID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgIGRzID0gKERhdGFTb3VyY2UpIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2V0eCIpOworICAgIH0gY2F0Y2ggKE5hbWluZ0V4Y2VwdGlvbiBlKSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImNhbnQgZmluZCBkYXRhc291cmNlIik7CisgICAgfQogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlsqKlNpbXBsZUJNUEJlYW4qKl0gRG9uZSB3aXRoIHNldEVudGl0eUNvbnRleHQuLi4uIik7CiAgICAgfQogCiAgICAgcHVibGljIEludGVnZXIgZWpiQ3JlYXRlKCkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7Ci0JcmV0dXJuIG5ldyBJbnRlZ2VyKDEpOworICAgIHJldHVybiBuZXcgSW50ZWdlcigxKTsKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MSgpIHsKICAgICAgICAgLy9jb250YWluZXIgYXV0aCArIHVzZXIvcHdkIHNwZWNpZmllZCAtIHNob3VsZCBwYXNzCi0JQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKLQlib29sZWFuIHBhc3NlZCA9IHRydWU7Ci0JdHJ5IHsKLQkgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oIkRCVVNFUiIsICJEQlBBU1NXT1JEIiApOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIHBhc3NlZCA9IGZhbHNlOwotCX0gZmluYWxseSB7Ci0JICAgIGlmICggY29ubiAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsKLQkgICAgICAgICAgICBjb25uLmNsb3NlKCk7Ci0JCX0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30gICAgCi0JICAgIH0KLQl9Ci0KLQotCXJldHVybiBwYXNzZWQ7CisgICAgQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKKyAgICBib29sZWFuIHBhc3NlZCA9IHRydWU7CisgICAgdHJ5IHsKKyAgICAgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oIkRCVVNFUiIsICJEQlBBU1NXT1JEIiApOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmICggY29ubiAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjb25uLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQogICAgIH0KLSAgICAKKworCisgICAgcmV0dXJuIHBhc3NlZDsKKyAgICB9CisKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MigpIHsKICAgICAgICAgLy9jb250YWluZXIgYXV0aCArIHVzZXIvcHdkIE5PVCBzcGVjaWZpZWQgLSBzaG91bGQgcGFzcwotCUNvbm5lY3Rpb24gY29ubiA9IG51bGw7Ci0JYm9vbGVhbiBwYXNzZWQgPSB0cnVlOwotCXRyeSB7Ci0JICAgIGNvbm4gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgcGFzc2VkID0gZmFsc2U7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKCBjb25uICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgewotCSAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKLQkJfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fSAgICAKLQkgICAgfQotCX0KKyAgICBDb25uZWN0aW9uIGNvbm4gPSBudWxsOworICAgIGJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKKyAgICB0cnkgeworICAgICAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmICggY29ubiAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjb25uLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQorICAgIH0KIAotCQotCXJldHVybiBwYXNzZWQ7CisKKyAgICByZXR1cm4gcGFzc2VkOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7fQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aHR4L3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGh0eC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggZTQ5MTRmNi4uZjI1NjA3NiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb250YXV0aHR4L3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRodHgvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDcgKzEsNyBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KLQ0KLUNSRUFURSBUQUJMRSBPX0N1c3RvbWVyICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOworCitDUkVBVEUgVEFCTEUgT19DdXN0b21lciAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnRhdXRodHgvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGh0eC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IDcwZDFmY2MuLmQ4NTRiOTUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGh0eC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udGF1dGh0eC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xICsxIEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb252YWwvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udmFsL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNzMxM2NhMC4uZmM4MzVmYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb252YWwvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnZhbC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOSArMTUsMTkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImpkYmMtY29udmFsIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0iY2xhc3NlczEyLnppcCIgdmFsdWU9Ii90bXAvY2xhc3NlczEyLnppcCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb252YWwvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb252YWwvYnVpbGQueG1sCmluZGV4IDllODExNmQuLjc2NzhmNzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udmFsL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnZhbC9idWlsZC54bWwKQEAgLTgwLDggKzgwLDggQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IjEiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCi0JPGFudGNhbGwgdGFyZ2V0PSJzdG9wLWRlcmJ5Ii8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJzdGFydC1kZXJieSIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0ic3RvcC1kZXJieSIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0ic3RhcnQtZGVyYnkiLz4KIAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iMiIvPgpAQCAtMTExLDggKzExMSw4IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAotCTxhbnRjYWxsIHRhcmdldD0ic3RvcC1kZXJieSIvPgotCTxhbnRjYWxsIHRhcmdldD0ic3RhcnQtZGVyYnkiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InN0b3AtZGVyYnkiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InN0YXJ0LWRlcmJ5Ii8+CiAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IjQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udmFsL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udmFsL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA2MTZiODY1Li43Nzg2MTUzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnZhbC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb252YWwvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zOCw3ICszOCw3IEBACiAgICAgICAgICAgICAgICAgamF2YXgucm1pLlBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpSZWYsIFNpbXBsZUJNUEhvbWUuY2xhc3MpOwogCiAgICAgICAgIFNpbXBsZUJNUCBjb252YWxCTVAgPSBjb252YWxCTVBIb21lLmNyZWF0ZSgpOwotCXN0YXQuYWRkRGVzY3JpcHRpb24oIkNvbm5lY3Rpb24gVmFsaWRhdGlvbiBUZXN0cyIpOworICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIkNvbm5lY3Rpb24gVmFsaWRhdGlvbiBUZXN0cyIpOwogCiAgICAgICAgIGlmIChhcmdzICE9IG51bGwgJiYgYXJncy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICBTdHJpbmcgcGFyYW0gPSBhcmdzWzBdOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb252YWwvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb252YWwvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IGU0OTE0ZjYuLmYyNTYwNzYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udmFsL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnZhbC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsNyArMSw3IEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQotDQotQ1JFQVRFIFRBQkxFIE9fQ3VzdG9tZXIgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCitEcm9wIHRhYmxlIE9fQ3VzdG9tZXI7CisKK0NSRUFURSBUQUJMRSBPX0N1c3RvbWVyICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikKKyk7CisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udmFsL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NvbnZhbC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IDcwZDFmY2MuLmQ4NTRiOTUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY29udmFsL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jb252YWwvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbApAQCAtMSArMSBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3Bkcy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jcGRzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNzgxYTdhNy4uMjkyOTI2YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jcGRzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jcGRzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE4ICsxNSwxOCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWJtcC1jcGRzIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NwZHMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jcGRzL2J1aWxkLnhtbAppbmRleCAzOTM0YjNlLi4xODJmZDJjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NwZHMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3Bkcy9idWlsZC54bWwKQEAgLTYxLDcgKzYxLDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAKLQk8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qZGJjLWNvbW1vbiI+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktamRiYy1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UudHlwZSIgdmFsdWU9ImphdmF4LnNxbC5Db25uZWN0aW9uUG9vbERhdGFTb3VyY2UiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL3MxcWVEQi1jcGRzIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJqZGJjLWNwZHMiLz4KQEAgLTcwLDcgKzcwLDcgQEAKIAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InNldHVwLWRlcmJ5LWZvci1hdXRoZW50aWNhdGlvbiIvPgogCi0JPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgorICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX3BvaW50YmFzZS5zcWwiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NwZHMvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jcGRzL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQppbmRleCBjN2NjYWNmLi41ODEwOTdlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NwZHMvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3Bkcy9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKQEAgLTI4LDQxICsyOCw0MSBAQAogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAotIAlTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKLQlTdHJpbmcgdGVzdFN1aXRlID0gIkNvbm5lY3Rpb25Qb29sRGF0YVNvdXJjZSAiOworCisgICAgIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOworICAgIFN0cmluZyB0ZXN0U3VpdGUgPSAiQ29ubmVjdGlvblBvb2xEYXRhU291cmNlICI7CiAKICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgT2JqZWN0IG9ialJlZiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlQk1QSG9tZSIpOwotCVNpbXBsZUJNUEhvbWUgc2ltcGxlQk1QSG9tZSA9IChTaW1wbGVCTVBIb21lKQorICAgIFNpbXBsZUJNUEhvbWUgc2ltcGxlQk1QSG9tZSA9IChTaW1wbGVCTVBIb21lKQogICAgICAgICBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ialJlZiwgU2ltcGxlQk1QSG9tZS5jbGFzcyk7CiAKICAgICAgICAgU2ltcGxlQk1QIHNpbXBsZUJNUCA9IHNpbXBsZUJNUEhvbWUuY3JlYXRlKCk7Ci0Jc3RhdC5hZGREZXNjcmlwdGlvbigiQ29ubmVjdGlvbiBQb29sIERhdGFTb3VyY2UgdGVzdHMiKTsKLQkKLQlpZiAoIHNpbXBsZUJNUC50ZXN0MSgpICkgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIHRlc3QxIDogIiwgc3RhdC5QQVNTICk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiB0ZXN0MSA6ICIsIHN0YXQuRkFJTCApOwotCX0KKyAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJDb25uZWN0aW9uIFBvb2wgRGF0YVNvdXJjZSB0ZXN0cyIpOwogCi0JaWYgKCBzaW1wbGVCTVAudGVzdDIoKSApIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiB0ZXN0MiA6ICIsIHN0YXQuUEFTUyApOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgdGVzdDIgOiAiLCBzdGF0LkZBSUwgKTsKLQl9CisgICAgaWYgKCBzaW1wbGVCTVAudGVzdDEoKSApIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiB0ZXN0MSA6ICIsIHN0YXQuUEFTUyApOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgdGVzdDEgOiAiLCBzdGF0LkZBSUwgKTsKKyAgICB9CiAKLQlpZiAoIHNpbXBsZUJNUC50ZXN0MygpICkgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIHRlc3QzIDogIiwgc3RhdC5QQVNTICk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiB0ZXN0MyA6ICIsIHN0YXQuRkFJTCApOwotCX0KLQlpZiAoIHNpbXBsZUJNUC50ZXN0NCgpICkgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIHRlc3Q0IDogIiwgc3RhdC5QQVNTICk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiB0ZXN0NCA6ICIsIHN0YXQuRkFJTCApOwotCX0KLSAgICAgCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBpZiAoIHNpbXBsZUJNUC50ZXN0MigpICkgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIHRlc3QyIDogIiwgc3RhdC5QQVNTICk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiB0ZXN0MiA6ICIsIHN0YXQuRkFJTCApOworICAgIH0KKworICAgIGlmICggc2ltcGxlQk1QLnRlc3QzKCkgKSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgdGVzdDMgOiAiLCBzdGF0LlBBU1MgKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIHRlc3QzIDogIiwgc3RhdC5GQUlMICk7CisgICAgfQorICAgIGlmICggc2ltcGxlQk1QLnRlc3Q0KCkgKSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgdGVzdDQgOiAiLCBzdGF0LlBBU1MgKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIHRlc3Q0IDogIiwgc3RhdC5GQUlMICk7CisgICAgfQorCisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NwZHMvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3Bkcy9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IDU0Y2Y3MmUuLjFjYzAzYzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3Bkcy9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3Bkcy9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC00Miw3ICs0Miw3IEBACiAgICAgICA8cmVzb3VyY2UtcmVmPgogICAgICAgICA8cmVzLXJlZi1uYW1lPkRhdGFTb3VyY2U8L3Jlcy1yZWYtbmFtZT4KICAgICAgICAgPHJlcy10eXBlPmphdmF4LnNxbC5Db25uZWN0aW9uUG9vbERhdGFTb3VyY2U8L3Jlcy10eXBlPgotICAgICAgICA8cmVzLWF1dGg+Q29udGFpbmVyPC9yZXMtYXV0aD4gCisgICAgICAgIDxyZXMtYXV0aD5Db250YWluZXI8L3Jlcy1hdXRoPgogICAgICAgICA8IS0tIDxyZXMtYXV0aD5BcHBsaWNhdGlvbjwvcmVzLWF1dGg+IC0tPgogICAgICAgICA8cmVzLXNoYXJpbmctc2NvcGU+U2hhcmVhYmxlPC9yZXMtc2hhcmluZy1zY29wZT4KICAgICAgIDwvcmVzb3VyY2UtcmVmPgpAQCAtNTgsNiArNTgsNiBAQAogICAgICAgPHRyYW5zLWF0dHJpYnV0ZT5SZXF1aXJlZDwvdHJhbnMtYXR0cmlidXRlPgogICAgIDwvY29udGFpbmVyLXRyYW5zYWN0aW9uPgogICA8L2Fzc2VtYmx5LWRlc2NyaXB0b3I+Ci0gICAgICAKKwogPC9lamItamFyPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NwZHMvZWpiL1NpbXBsZUJNUEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3Bkcy9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCmluZGV4IDk5ZTEyNjkuLjBjMzI0N2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3Bkcy9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3Bkcy9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCkBAIC04NCw3ICs4NCw3IEBACiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDMoKSB7Ci0gICAgICAgIC8vYXBwbGljYXRpb24gYXV0aCArIHdyb25nIHVzZXIvcHdkIAorICAgICAgICAvL2FwcGxpY2F0aW9uIGF1dGggKyB3cm9uZyB1c2VyL3B3ZAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tU3RhcnQgdGVzdDMtLS0tLS0tLS0tLS0tLSIpOwogICAgICAgICBDb25uZWN0aW9uIGNvbm4gPSBudWxsOwogICAgICAgICBib29sZWFuIHBhc3NlZCA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jcGRzL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3Bkcy9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggZTQ5MTRmNi4uZjI1NjA3NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jcGRzL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NwZHMvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDcgKzEsNyBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KLQ0KLUNSRUFURSBUQUJMRSBPX0N1c3RvbWVyICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOworCitDUkVBVEUgVEFCTEUgT19DdXN0b21lciAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NwZHMvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3Bkcy9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IDcwZDFmY2MuLmQ4NTRiOTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3Bkcy9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3Bkcy9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xICsxIEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jcGRzcGVyZi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jcGRzcGVyZi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDQ4MDQzZWYuLmI1ODJlMGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3Bkc3BlcmYvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NwZHNwZXJmL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE5ICsxNSwxOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWJtcC1jcGRzcGVyZiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iMjAwMDAwIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NwZHNwZXJmL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3Bkc3BlcmYvYnVpbGQueG1sCmluZGV4IDY3NmZjN2MuLmUyMjkwMjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3Bkc3BlcmYvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3Bkc3BlcmYvYnVpbGQueG1sCkBAIC00Miw3ICs0Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC01NCwyMiArNTQsMjIgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqL1NpbXBsZUJNUC5jbGFzcywgKiovU2ltcGxlQk1QSG9tZS5jbGFzcywqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDwhLS0gQ3JlYXRlIHRoZSBPUkFDTEUgY29ubmVjdGlvbiBwb29sIGNvbm5lY3Rpb24gcG9vbCBhbmQgZGF0YXNvdXJjZSAtLT4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UudHlwZSIgdmFsdWU9ImphdmF4LnNxbC5Db25uZWN0aW9uUG9vbERhdGFTb3VyY2UiLz4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1jcGRzcGVyZi0xIi8+Ci0JPHBhcmFtIG5hbWU9ImRiLmNsYXNzIiB2YWx1ZT0ib3JhY2xlLmpkYmMucG9vbC5PcmFjbGVDb25uZWN0aW9uUG9vbERhdGFTb3VyY2UiLz4KLQk8cGFyYW0gbmFtZT0iZGIudXNlciIgdmFsdWU9InN5c3RlbSIvPgotCTxwYXJhbSBuYW1lPSJkYi5wd2QiIHZhbHVlPSJtYW5hZ2VyIi8+Ci0JPHBhcmFtIG5hbWU9ImRiLnVybCIgdmFsdWU9Ik9SQSIvPgorICAgIDxwYXJhbSBuYW1lPSJkYi5jbGFzcyIgdmFsdWU9Im9yYWNsZS5qZGJjLnBvb2wuT3JhY2xlQ29ubmVjdGlvblBvb2xEYXRhU291cmNlIi8+CisgICAgPHBhcmFtIG5hbWU9ImRiLnVzZXIiIHZhbHVlPSJzeXN0ZW0iLz4KKyAgICA8cGFyYW0gbmFtZT0iZGIucHdkIiB2YWx1ZT0ibWFuYWdlciIvPgorICAgIDxwYXJhbSBuYW1lPSJkYi51cmwiIHZhbHVlPSJPUkEiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgpAQCAtNzksNyArNzksNyBAQAogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgogICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLWNwZHNwZXJmLTEucHJvcGVydHkuVVJMPWpkYmM6b3JhY2xlOnRoaW46QDEyOS4xNTguMjI5LjIzOToxNTIxOk9SQSIvPgogICAgICAgPC9hbnRjYWxsPgotICAgICAgCisKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgogICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLWNwZHNwZXJmLTEucHJvcGVydHkuU2VydmVyTmFtZT0xMjkuMTU4LjIyOS4yMzkiLz4KQEAgLTkwLDEwICs5MCwxMCBAQAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1jb25ucG9vbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS50eXBlIiB2YWx1ZT0iamF2YXguc3FsLkRhdGFTb3VyY2UiLz4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1jcGRzcGVyZi0yIi8+Ci0JPHBhcmFtIG5hbWU9ImRiLmNsYXNzIiB2YWx1ZT0ib3JhY2xlLmpkYmMucG9vbC5PcmFjbGVEYXRhU291cmNlIi8+Ci0JPHBhcmFtIG5hbWU9ImRiLnVzZXIiIHZhbHVlPSJzeXN0ZW0iLz4KLQk8cGFyYW0gbmFtZT0iZGIucHdkIiB2YWx1ZT0ibWFuYWdlciIvPgotCTxwYXJhbSBuYW1lPSJkYi51cmwiIHZhbHVlPSJPUkEiLz4KKyAgICA8cGFyYW0gbmFtZT0iZGIuY2xhc3MiIHZhbHVlPSJvcmFjbGUuamRiYy5wb29sLk9yYWNsZURhdGFTb3VyY2UiLz4KKyAgICA8cGFyYW0gbmFtZT0iZGIudXNlciIgdmFsdWU9InN5c3RlbSIvPgorICAgIDxwYXJhbSBuYW1lPSJkYi5wd2QiIHZhbHVlPSJtYW5hZ2VyIi8+CisgICAgPHBhcmFtIG5hbWU9ImRiLnVybCIgdmFsdWU9Ik9SQSIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+CkBAIC0xMDMsNyArMTAzLDcgQEAKICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiLz4KICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy1jcGRzcGVyZi0yLnByb3BlcnR5LlVSTD1qZGJjOm9yYWNsZTp0aGluOkAxMjkuMTU4LjIyOS4yMzk6MTUyMTpPUkEiLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICAgIAorCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiLz4KICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy1jcGRzcGVyZi0yLnByb3BlcnR5LlNlcnZlck5hbWU9MTI5LjE1OC4yMjkuMjM5Ii8+CkBAIC0xMjAsMjMgKzEyMCwyMyBAQAogICAgICAgPC9hbnRjYWxsPgogCiAKLSAgICAgIAorCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICAgIDxlY2hvIG1lc3NhZ2U9IkV4ZWN1dGluZyBzcWwgZnJvbSAke3NxbC5maWxlfSIvPgogICAgICAgPHNxbAogICAgICAgICBzcmM9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIKLQlkcml2ZXI9Im9yYWNsZS5qZGJjLmRyaXZlci5PcmFjbGVEcml2ZXIiCi0JdXNlcmlkPSJzeXN0ZW0iCi0JcGFzc3dvcmQ9Im1hbmFnZXIiCi0JdXJsPSJqZGJjOm9yYWNsZTp0aGluOkAxMjkuMTU4LjIyOS4yMzk6MTUyMTpPUkEiCi0JY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vZGV2dGVzdHMvamRiYy9jbGFzc2VzMTIuemlwIgotCW9uZXJyb3I9ImNvbnRpbnVlIgotCXByaW50PSJ5ZXMiCisgICAgZHJpdmVyPSJvcmFjbGUuamRiYy5kcml2ZXIuT3JhY2xlRHJpdmVyIgorICAgIHVzZXJpZD0ic3lzdGVtIgorICAgIHBhc3N3b3JkPSJtYW5hZ2VyIgorICAgIHVybD0iamRiYzpvcmFjbGU6dGhpbjpAMTI5LjE1OC4yMjkuMjM5OjE1MjE6T1JBIgorICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2RldnRlc3RzL2pkYmMvY2xhc3NlczEyLnppcCIKKyAgICBvbmVycm9yPSJjb250aW51ZSIKKyAgICBwcmludD0ieWVzIgogICAgICAgLz4KLSAgICAgIAorCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlY29uZmlnLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtMTQ1LDMxICsxNDUsMzEgQEAKICAgICAgIDxlY2hvIG1lc3NhZ2U9IkV4ZWN1dGluZyBzcWwgZnJvbSAke3NxbC5maWxlfSIvPgogICAgICAgPHNxbAogICAgICAgICBzcmM9InNxbC9kcm9wX3BvaW50YmFzZS5zcWwiCi0JZHJpdmVyPSJvcmFjbGUuamRiYy5kcml2ZXIuT3JhY2xlRHJpdmVyIgotCXVzZXJpZD0ic3lzdGVtIgotCXBhc3N3b3JkPSJtYW5hZ2VyIgotCXVybD0iamRiYzpvcmFjbGU6dGhpbjpAMTI5LjE1OC4yMjkuMjM5OjE1MjE6T1JBIgotCWNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2RldnRlc3RzL2pkYmMvY2xhc3NlczEyLnppcCIKLQlvbmVycm9yPSJjb250aW51ZSIKLQlwcmludD0ieWVzIgorICAgIGRyaXZlcj0ib3JhY2xlLmpkYmMuZHJpdmVyLk9yYWNsZURyaXZlciIKKyAgICB1c2VyaWQ9InN5c3RlbSIKKyAgICBwYXNzd29yZD0ibWFuYWdlciIKKyAgICB1cmw9ImpkYmM6b3JhY2xlOnRoaW46QDEyOS4xNTguMjI5LjIzOToxNTIxOk9SQSIKKyAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9kZXZ0ZXN0cy9qZGJjL2NsYXNzZXMxMi56aXAiCisgICAgb25lcnJvcj0iY29udGludWUiCisgICAgcHJpbnQ9InllcyIKICAgICAgIC8+CiAKLSAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+IAorICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KIAotICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1yZXNvdXJjZS1jb21tb24iPiAKKyAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvczFxZURCLWNwZHNwZXJmLTEiLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4gCisgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL3MxcWVEQi1jcGRzcGVyZi0yIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiI+IAorICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1jb25ucG9vbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJqZGJjLWNwZHNwZXJmLTEiLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIj4gCisgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtY3Bkc3BlcmYtMiIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZWNvbmZpZy1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3Bkc3BlcmYvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jcGRzcGVyZi9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKaW5kZXggYmFmZWEyMy4uOGFjOWZjMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jcGRzcGVyZi9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jcGRzcGVyZi9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKQEAgLTI0LDQxICsyNCw0MSBAQAogaW1wb3J0IGNvbS5zdW4uczFhc2Rldi5qZGJjLmNwZHNwZXJmLmVqYi5TaW1wbGVCTVA7CiAKIHB1YmxpYyBjbGFzcyBTaW1wbGVCTVBDbGllbnQgewotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGludCBudW1UaW1lcyA9IDEwMDsgCi0JaWYgKGFyZ3MubGVuZ3RoID09IDEpIHsKKyAgICAgICAgaW50IG51bVRpbWVzID0gMTAwOworICAgIGlmIChhcmdzLmxlbmd0aCA9PSAxKSB7CiAgICAgICAgICAgICBudW1UaW1lcyA9IEludGVnZXIucGFyc2VJbnQoIGFyZ3NbMF0gKTsKLQl9Ci0JCisgICAgfQorCiAgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgIE9iamVjdCBvYmpSZWYgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZUJNUEhvbWUiKTsKLQlTaW1wbGVCTVBIb21lIHNpbXBsZUJNUEhvbWUgPSAoU2ltcGxlQk1QSG9tZSkKKyAgICBTaW1wbGVCTVBIb21lIHNpbXBsZUJNUEhvbWUgPSAoU2ltcGxlQk1QSG9tZSkKICAgICAgICAgamF2YXgucm1pLlBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpSZWYsIFNpbXBsZUJNUEhvbWUuY2xhc3MpOwogCiAgICAgICAgIFNpbXBsZUJNUCBzaW1wbGVCTVAgPSBzaW1wbGVCTVBIb21lLmNyZWF0ZSggbnVtVGltZXMgKTsKLQkKLQlsb25nIHRpbWVUYWtlbiA9IDA7Ci0JU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCIgdGVzdDE6IFVzaW5nIENvbm5lY3Rpb25Qb29sRGF0YVNvdXJjZSIpOwotCWlmICggKHRpbWVUYWtlbiA9IHNpbXBsZUJNUC50ZXN0MSgpKSAhPSAtMSApIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJQYXNzZWQ6IE51bSBDb25uZWN0aW9uczogIiArIG51bVRpbWVzKwotCSAgICAgICAgIiAgVGltZSB0YWtlbiA6IiArIHRpbWVUYWtlbik7IAotCX0gZWxzZSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRmFpbGVkIik7IAotCX0KLQlTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCIgdGVzdDI6IFVzaW5nIERhdGFTb3VyY2UiKTsKLQlpZiAoICh0aW1lVGFrZW4gPSBzaW1wbGVCTVAudGVzdDIoKSkgIT0gLTEgKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUGFzc2VkOiBOdW0gQ29ubmVjdGlvbnM6ICIgKyBudW1UaW1lcysKLQkgICAgICAgICIgIFRpbWUgdGFrZW4gOiIgKyB0aW1lVGFrZW4pOyAKLQl9IGVsc2UgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZhaWxlZCIpOyAKLQl9CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKLSAgICB9CQorICAgIGxvbmcgdGltZVRha2VuID0gMDsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiB0ZXN0MTogVXNpbmcgQ29ubmVjdGlvblBvb2xEYXRhU291cmNlIik7CisgICAgaWYgKCAodGltZVRha2VuID0gc2ltcGxlQk1QLnRlc3QxKCkpICE9IC0xICkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBhc3NlZDogTnVtIENvbm5lY3Rpb25zOiAiICsgbnVtVGltZXMrCisgICAgICAgICAgICAiICBUaW1lIHRha2VuIDoiICsgdGltZVRha2VuKTsKKyAgICB9IGVsc2UgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZhaWxlZCIpOworICAgIH0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIgdGVzdDI6IFVzaW5nIERhdGFTb3VyY2UiKTsKKyAgICBpZiAoICh0aW1lVGFrZW4gPSBzaW1wbGVCTVAudGVzdDIoKSkgIT0gLTEgKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUGFzc2VkOiBOdW0gQ29ubmVjdGlvbnM6ICIgKyBudW1UaW1lcysKKyAgICAgICAgICAgICIgIFRpbWUgdGFrZW4gOiIgKyB0aW1lVGFrZW4pOworICAgIH0gZWxzZSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRmFpbGVkIik7CisgICAgfQorCisgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jcGRzcGVyZi9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jcGRzcGVyZi9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IDRkNTk0ZTEuLmRhMTdmMjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3Bkc3BlcmYvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NwZHNwZXJmL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTYzLDYgKzYzLDYgQEAKICAgICAgIDx0cmFucy1hdHRyaWJ1dGU+UmVxdWlyZWQ8L3RyYW5zLWF0dHJpYnV0ZT4KICAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgPC9hc3NlbWJseS1kZXNjcmlwdG9yPgotICAgICAgCisKIDwvZWpiLWphcj4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jcGRzcGVyZi9lamIvU2ltcGxlQk1QQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jcGRzcGVyZi9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCmluZGV4IGEwODk2NGQuLmU0YzBiOGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3Bkc3BlcmYvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NwZHNwZXJmL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKQEAgLTMyLDE1NCArMzIsMTU0IEBACiAgICAgcHJvdGVjdGVkIGludCBudW1SdW5zOwogCiAgICAgcHVibGljIHZvaWQgc2V0RW50aXR5Q29udGV4dChFbnRpdHlDb250ZXh0IGVudGl0eUNvbnRleHQpIHsKLQlDb250ZXh0IGNvbnRleHQgPSBudWxsOwotCXRyeSB7Ci0JICAgIGNvbnRleHQgICAgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkgICAgZHNDUCA9IChEYXRhU291cmNlKSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlLWNwIik7Ci0JICAgIGRzTm9ybWFsID0gKERhdGFTb3VyY2UpIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2Utbm9ybWFsIik7Ci0JfSBjYXRjaCAoTmFtaW5nRXhjZXB0aW9uIGUpIHsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiY2FudCBmaW5kIGRhdGFzb3VyY2UiKTsKLQl9CisgICAgQ29udGV4dCBjb250ZXh0ID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgICBjb250ZXh0ICAgID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgIGRzQ1AgPSAoRGF0YVNvdXJjZSkgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZS1jcCIpOworICAgICAgICBkc05vcm1hbCA9IChEYXRhU291cmNlKSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlLW5vcm1hbCIpOworICAgIH0gY2F0Y2ggKE5hbWluZ0V4Y2VwdGlvbiBlKSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImNhbnQgZmluZCBkYXRhc291cmNlIik7CisgICAgfQogICAgIFN5c3RlbS5vdXQucHJpbnRsbigiWyoqU2ltcGxlQk1QQmVhbioqXSBEb25lIHdpdGggc2V0RW50aXR5Q29udGV4dC4uLi4iKTsKICAgICB9CiAKICAgICBwdWJsaWMgSW50ZWdlciBlamJDcmVhdGUoaW50IF9udW1SdW5zKSB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsKICAgICAgICAgbnVtUnVucyA9IF9udW1SdW5zOwotCXJldHVybiBuZXcgSW50ZWdlcigxKTsKKyAgICByZXR1cm4gbmV3IEludGVnZXIoMSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogRG8gYW4gU1FMIGluc2VydCBpbnRvIHRoZSBkYXRhYmFzZSBhbmQgdGltZSB0aGlzCiAgICAgICogQHJldHVybiB0aW1lIHRha2VuLiAtMSBJZiB0ZXN0IGZhaWxzCiAgICAgICovCiAgICAgcHVibGljIGxvbmcgdGVzdDEoKSB7CiAgICAgICAgIC8vQ29ubmVjdGlvblBvb2xEYXRhU291cmNlCi0JU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLVN0YXJ0IHRlc3QxLS0tLS0tLS0tLS0tLS0iKTsKLQlDb25uZWN0aW9uIGNvbm4gPSBudWxsOwotCWJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKLQlsb25nIHN0YXJ0VGltZSA9IDAgOwotCWxvbmcgZW5kVGltZSA9IDA7Ci0JdHJ5IHsKLQkgICAgc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JICAgIGZvciAoIGludCBpID0gMDsgaSA8IG51bVJ1bnM7IGkrKyApIHsKLQkgICAgICAgIGNvbm4gPSBkc0NQLmdldENvbm5lY3Rpb24oInN5c3RlbSIsICJtYW5hZ2VyIik7Ci0JCWluc2VydEVudHJ5KCBpLCAiMTIzNDU2Nzg5MCIsIGNvbm4pOwotCQlpZiAoaSAvIDEwID09IDAgKSB7Ci0JCSAgICBxdWVyeVRhYmxlKCBjb25uICk7Ci0JCX0KLQkJY29ubi5jbG9zZSgpOwotCSAgICB9ICAgIAotCSAgICBlbmRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7IAotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIHBhc3NlZCA9IGZhbHNlOwotCX0gZmluYWxseSB7Ci0JICAgIGlmICggY29ubiAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsgY29ubi5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9ICAgIAotCSAgICB9Ci0JfQotCVN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS1FbmQgdGVzdDEtLS0tLS0tLS0tLS0tLSIpOwotCQotCXRyeSB7IAotCSAgICBlbXB0eVRhYmxlKCBjb25uICk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9IGZpbmFsbHkgewotCSAgICBpZiAoY29ubiAhPSBudWxsKSB7Ci0JICAgICAgICB0cnkgeyBjb25uLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9Ci0JICAgIH0KLQl9Ci0gICAgICAgIGlmIChwYXNzZWQpIHsKLQkgICAgcmV0dXJuIChlbmRUaW1lIC0gc3RhcnRUaW1lKS8xMDAwOwotCX0KLQlyZXR1cm4gLTE7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLVN0YXJ0IHRlc3QxLS0tLS0tLS0tLS0tLS0iKTsKKyAgICBDb25uZWN0aW9uIGNvbm4gPSBudWxsOworICAgIGJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKKyAgICBsb25nIHN0YXJ0VGltZSA9IDAgOworICAgIGxvbmcgZW5kVGltZSA9IDA7CisgICAgdHJ5IHsKKyAgICAgICAgc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgICAgIGZvciAoIGludCBpID0gMDsgaSA8IG51bVJ1bnM7IGkrKyApIHsKKyAgICAgICAgICAgIGNvbm4gPSBkc0NQLmdldENvbm5lY3Rpb24oInN5c3RlbSIsICJtYW5hZ2VyIik7CisgICAgICAgIGluc2VydEVudHJ5KCBpLCAiMTIzNDU2Nzg5MCIsIGNvbm4pOworICAgICAgICBpZiAoaSAvIDEwID09IDAgKSB7CisgICAgICAgICAgICBxdWVyeVRhYmxlKCBjb25uICk7CisgICAgICAgIH0KKyAgICAgICAgY29ubi5jbG9zZSgpOworICAgICAgICB9CisgICAgICAgIGVuZFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICBwYXNzZWQgPSBmYWxzZTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBpZiAoIGNvbm4gIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7IGNvbm4uY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQorICAgICAgICB9CiAgICAgfQotICAgIAorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS1FbmQgdGVzdDEtLS0tLS0tLS0tLS0tLSIpOworCisgICAgdHJ5IHsKKyAgICAgICAgZW1wdHlUYWJsZSggY29ubiApOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKGNvbm4gIT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsgY29ubi5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQorICAgICAgICB9CisgICAgfQorICAgICAgICBpZiAocGFzc2VkKSB7CisgICAgICAgIHJldHVybiAoZW5kVGltZSAtIHN0YXJ0VGltZSkvMTAwMDsKKyAgICB9CisgICAgcmV0dXJuIC0xOworICAgIH0KKwogICAgIHB1YmxpYyBsb25nIHRlc3QyKCkgewogICAgICAgICAvL05vcm1hbCBEYXRhU291cmNlCi0JU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLVN0YXJ0IHRlc3QyLS0tLS0tLS0tLS0tLS0iKTsKLQlDb25uZWN0aW9uIGNvbm4gPSBudWxsOwotCWJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKLQlsb25nIHN0YXJ0VGltZSA9IDAgOwotCWxvbmcgZW5kVGltZSA9IDA7Ci0JdHJ5IHsKLQkgICAgc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JICAgIGZvciAoIGludCBpID0gMDsgaSA8IG51bVJ1bnM7IGkrKyApIHsKLQkgICAgICAgIGNvbm4gPSBkc05vcm1hbC5nZXRDb25uZWN0aW9uKCJzeXN0ZW0iLCAibWFuYWdlciIpOwotCQlpbnNlcnRFbnRyeSggaSwgIjEyMzQ1Njc4OTAiLCBjb25uKTsKLQkJaWYgKGkgLyAxMCA9PSAwICkgewotCQkgICAgcXVlcnlUYWJsZSggY29ubiApOwotCQl9Ci0JCWNvbm4uY2xvc2UoKTsKLQkgICAgfSAgICAKLQkgICAgZW5kVGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOyAKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICBwYXNzZWQgPSBmYWxzZTsKLQl9IGZpbmFsbHkgewotCSAgICBpZiAoIGNvbm4gIT0gbnVsbCApIHsKLQkgICAgICAgIHRyeSB7Ci0JICAgICAgICAgICAgY29ubi5jbG9zZSgpOwotCQl9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9ICAgIAotCSAgICB9Ci0JfQotCVN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS1FbmQgdGVzdDItLS0tLS0tLS0tLS0tLSIpOwotCQotCXRyeSB7Ci0JICAgIGNvbm4gPSBkc05vcm1hbC5nZXRDb25uZWN0aW9uKCJzeXN0ZW0iLCJtYW5hZ2VyIik7Ci0JICAgIGVtcHR5VGFibGUoY29ubik7Ci0JICAgIGNvbm4uY2xvc2UoKTsKLQl9IGNhdGNoKCBFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCX0gZmluYWxseSB7Ci0JICAgIGlmIChjb25uICE9IG51bGwpIHsKLQkgICAgICAgIHRyeSB7IGNvbm4uY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQotCSAgICB9Ci0JfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS1TdGFydCB0ZXN0Mi0tLS0tLS0tLS0tLS0tIik7CisgICAgQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKKyAgICBib29sZWFuIHBhc3NlZCA9IHRydWU7CisgICAgbG9uZyBzdGFydFRpbWUgPSAwIDsKKyAgICBsb25nIGVuZFRpbWUgPSAwOworICAgIHRyeSB7CisgICAgICAgIHN0YXJ0VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgICAgICBmb3IgKCBpbnQgaSA9IDA7IGkgPCBudW1SdW5zOyBpKysgKSB7CisgICAgICAgICAgICBjb25uID0gZHNOb3JtYWwuZ2V0Q29ubmVjdGlvbigic3lzdGVtIiwgIm1hbmFnZXIiKTsKKyAgICAgICAgaW5zZXJ0RW50cnkoIGksICIxMjM0NTY3ODkwIiwgY29ubik7CisgICAgICAgIGlmIChpIC8gMTAgPT0gMCApIHsKKyAgICAgICAgICAgIHF1ZXJ5VGFibGUoIGNvbm4gKTsKKyAgICAgICAgfQorICAgICAgICBjb25uLmNsb3NlKCk7CisgICAgICAgIH0KKyAgICAgICAgZW5kVGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmICggY29ubiAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjb25uLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQorICAgIH0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tRW5kIHRlc3QyLS0tLS0tLS0tLS0tLS0iKTsKKworICAgIHRyeSB7CisgICAgICAgIGNvbm4gPSBkc05vcm1hbC5nZXRDb25uZWN0aW9uKCJzeXN0ZW0iLCJtYW5hZ2VyIik7CisgICAgICAgIGVtcHR5VGFibGUoY29ubik7CisgICAgICAgIGNvbm4uY2xvc2UoKTsKKyAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmIChjb25uICE9IG51bGwpIHsKKyAgICAgICAgICAgIHRyeSB7IGNvbm4uY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQorICAgICAgICB9CisgICAgfQogICAgICAgICBpZiAocGFzc2VkKSB7Ci0JICAgIHJldHVybiAoZW5kVGltZSAtIHN0YXJ0VGltZSkvMTAwMDsKLQl9Ci0JcmV0dXJuIC0xOworICAgICAgICByZXR1cm4gKGVuZFRpbWUgLSBzdGFydFRpbWUpLzEwMDA7CisgICAgfQorICAgIHJldHVybiAtMTsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW5zZXJ0RW50cnkoIGludCBpZCwgU3RyaW5nIHBob25lLCBDb25uZWN0aW9uIGNvbiApCiAgICAgICAgIHRocm93cyBTUUxFeGNlcHRpb24gewotCQotICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBzdG10ID0gY29uLnByZXBhcmVTdGF0ZW1lbnQoCi0JICAgICJpbnNlcnQgaW50byBPX0N1c3RvbWVyIHZhbHVlcyAoPywgPykiICk7CiAKLQlzdG10LnNldEludCgxLCBpZCk7Ci0Jc3RtdC5zZXRTdHJpbmcoMiwgcGhvbmUpOwotCi0Jc3RtdC5leGVjdXRlVXBkYXRlKCk7Ci0Jc3RtdC5jbG9zZSgpOwotICAgICAgICAvKgkKICAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgc3RtdCA9IGNvbi5wcmVwYXJlU3RhdGVtZW50KAotCSAgICAic2VsZWN0ICogZnJvbSBPX0N1c3RvbWVyIiApOwotCXN0bXQuZXhlY3V0ZVVwZGF0ZSgpOyAgICAKLQlzdG10LmNsb3NlKCk7Ci0JKi8KKyAgICAgICAgImluc2VydCBpbnRvIE9fQ3VzdG9tZXIgdmFsdWVzICg/LCA/KSIgKTsKKworICAgIHN0bXQuc2V0SW50KDEsIGlkKTsKKyAgICBzdG10LnNldFN0cmluZygyLCBwaG9uZSk7CisKKyAgICBzdG10LmV4ZWN1dGVVcGRhdGUoKTsKKyAgICBzdG10LmNsb3NlKCk7CisgICAgICAgIC8qCisgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHN0bXQgPSBjb24ucHJlcGFyZVN0YXRlbWVudCgKKyAgICAgICAgInNlbGVjdCAqIGZyb20gT19DdXN0b21lciIgKTsKKyAgICBzdG10LmV4ZWN1dGVVcGRhdGUoKTsKKyAgICBzdG10LmNsb3NlKCk7CisgICAgKi8KICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgZW1wdHlUYWJsZSggQ29ubmVjdGlvbiBjb24gKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBTdGF0ZW1lbnQgc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKLSAgICAgICAgICAgIAotCSAgICBzdG10LmV4ZWN1dGUoImRlbGV0ZSAqIGZyb20gT19DdXN0b21lciIpOwotCSAgICBzdG10LmNsb3NlKCk7CisKKyAgICAgICAgc3RtdC5leGVjdXRlKCJkZWxldGUgKiBmcm9tIE9fQ3VzdG9tZXIiKTsKKyAgICAgICAgc3RtdC5jbG9zZSgpOwogICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSkgewotCX0KLQkgICAgCisgICAgfQorCiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHF1ZXJ5VGFibGUoIENvbm5lY3Rpb24gY29uICkgewogICAgICAgICB0cnkgewotCSAgICBTdGF0ZW1lbnQgc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKLQkgICAgUmVzdWx0U2V0IHJzID0gc3RtdC5leGVjdXRlUXVlcnkoInNlbGVjdCAqIGZyb20gT19DdXN0b21lciIpOwotCSAgICB3aGlsZSggcnMubmV4dCgpICkgOwotCSAgICBycy5jbG9zZSgpOwotCX0gY2F0Y2goIEV4Y2VwdGlvbiBlKSB7Ci0JfQorICAgICAgICBTdGF0ZW1lbnQgc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgUmVzdWx0U2V0IHJzID0gc3RtdC5leGVjdXRlUXVlcnkoInNlbGVjdCAqIGZyb20gT19DdXN0b21lciIpOworICAgICAgICB3aGlsZSggcnMubmV4dCgpICkgOworICAgICAgICBycy5jbG9zZSgpOworICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlKSB7CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7fQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jcGRzcGVyZi9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NwZHNwZXJmL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCBlNDkxNGY2Li5mMjU2MDc2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NwZHNwZXJmL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NwZHNwZXJmL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSw3ICsxLDcgQEAKLURyb3AgdGFibGUgT19DdXN0b21lcjsNCi0NCi1DUkVBVEUgVEFCTEUgT19DdXN0b21lciAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikNCi0pOw0KLQ0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKKworQ1JFQVRFIFRBQkxFIE9fQ3VzdG9tZXIgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQorKTsKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jcGRzcGVyZi9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jcGRzcGVyZi9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IDcwZDFmY2MuLmQ4NTRiOTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3Bkc3BlcmYvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2NwZHNwZXJmL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEgKzEgQEAKLURyb3AgdGFibGUgT19DdXN0b21lcjsNCitEcm9wIHRhYmxlIE9fQ3VzdG9tZXI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2N1c3RvbS12YWxpZGF0aW9uLTEvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3VzdG9tLXZhbGlkYXRpb24tMS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDFhMGFmNmYuLjI1MmEzOTUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3VzdG9tLXZhbGlkYXRpb24tMS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3VzdG9tLXZhbGlkYXRpb24tMS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOSArMTUsMTkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImpkYmMtY3VzdG9tdmFsLTEiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc2VzMTIuemlwIiB2YWx1ZT0iL3RtcC9jbGFzc2VzMTIuemlwIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2N1c3RvbS12YWxpZGF0aW9uLTEvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jdXN0b20tdmFsaWRhdGlvbi0xL2J1aWxkLnhtbAppbmRleCA5MmVkMDNkLi4zNGQwOWZkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2N1c3RvbS12YWxpZGF0aW9uLTEvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3VzdG9tLXZhbGlkYXRpb24tMS9idWlsZC54bWwKQEAgLTIxLDkgKzIxLDkgQEAKICAgICAgICAgPCFFTlRJVFkgY29tbW9uU2V0dXAgU1lTVEVNICIuLy4uLy4uLy4uL2NvbmZpZy9wcm9wZXJ0aWVzLnhtbCI+CiAgICAgICAgIDwhRU5USVRZIGNvbW1vbkJ1aWxkIFNZU1RFTSAiLi8uLi8uLi8uLi9jb25maWcvY29tbW9uLnhtbCI+CiAgICAgICAgIDwhRU5USVRZIHRlc3Rwcm9wZXJ0aWVzIFNZU1RFTSAiLi9idWlsZC5wcm9wZXJ0aWVzIj4KLQk8IUVOVElUWSBydW4gU1lTVEVNICIuLy4uLy4uLy4uL2NvbmZpZy9ydW4ueG1sIj4KLQk8IUVOVElUWSBqZGJjeG1sIFNZU1RFTSAiLi8uLi9KZGJjQ29tbW9uLnhtbCI+Ci0JPCFFTlRJVFkgamRiY1Byb3BzIFNZU1RFTSAiLi8uLi9KZGJjQ29tbW9uLnByb3BlcnRpZXMiPgorICAgIDwhRU5USVRZIHJ1biBTWVNURU0gIi4vLi4vLi4vLi4vY29uZmlnL3J1bi54bWwiPgorICAgIDwhRU5USVRZIGpkYmN4bWwgU1lTVEVNICIuLy4uL0pkYmNDb21tb24ueG1sIj4KKyAgICA8IUVOVElUWSBqZGJjUHJvcHMgU1lTVEVNICIuLy4uL0pkYmNDb21tb24ucHJvcGVydGllcyI+CiAgICAgICAgIF0+CiAKIDxwcm9qZWN0IG5hbWU9Im1peCIgZGVmYXVsdD0idXNhZ2UiIGJhc2VkaXI9Ii4iPgpAQCAtNjEsOCArNjEsOCBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICAgICAgIHZhbHVlPSIqKi9TaW1wbGVCTVAuY2xhc3MsICoqL1NpbXBsZUJNUEhvbWUuY2xhc3MsKiovKkNsaWVudCouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgotCTxqYXIgamFyZmlsZT0iJHtjdXN0b20tdmFsaWRhdG9yLWphcn0iIHVwZGF0ZT0idHJ1ZSI+Ci0JCTxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIGNhc2VzZW5zaXRpdmU9InllcyI+CisgICAgPGphciBqYXJmaWxlPSIke2N1c3RvbS12YWxpZGF0b3ItamFyfSIgdXBkYXRlPSJ0cnVlIj4KKyAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgY2FzZXNlbnNpdGl2ZT0ieWVzIj4KICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKiovTXlWYWxpZGF0b3IuY2xhc3MiLz4KICAgICAgICAgICA8L2ZpbGVzZXQ+CiAgICAgICA8L2phcj4KQEAgLTg1LDggKzg1LDggQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IjEiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCi0JPGFudGNhbGwgdGFyZ2V0PSJzdG9wLWRlcmJ5Ii8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJzdGFydC1kZXJieSIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0ic3RvcC1kZXJieSIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0ic3RhcnQtZGVyYnkiLz4KIAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iMiIvPgpAQCAtMTAzLDcgKzEwMyw3IEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgotCQkgICAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC4ke3Bvb2xuYW1lfS52YWxpZGF0aW9uX2NsYXNzbmFtZT1jb20uc3VuLnMxYXNkZXYuamRiYy5jdXN0b212YWwudmFsaWRhdG9yLk15VmFsaWRhdG9yIi8+CisgICAgICAgICAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7cG9vbG5hbWV9LnZhbGlkYXRpb25fY2xhc3NuYW1lPWNvbS5zdW4uczFhc2Rldi5qZGJjLmN1c3RvbXZhbC52YWxpZGF0b3IuTXlWYWxpZGF0b3IiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgpAQCAtMTE2LDggKzExNiw4IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAotCTxhbnRjYWxsIHRhcmdldD0ic3RvcC1kZXJieSIvPgotCTxhbnRjYWxsIHRhcmdldD0ic3RhcnQtZGVyYnkiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InN0b3AtZGVyYnkiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InN0YXJ0LWRlcmJ5Ii8+CiAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IjQiLz4KQEAgLTEzMSw5ICsxMzEsOSBAQAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1zdHVmZiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotCTxkZWxldGUgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9saWIvbXl2YWxpZGF0b3IuamFyIi8+Ci0JPGRlbGV0ZSBmaWxlPSIke2N1c3RvbS12YWxpZGF0b3ItamFyfSIvPgotCTxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXIiLz4KKyAgICA8ZGVsZXRlIGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vbGliL215dmFsaWRhdG9yLmphciIvPgorICAgIDxkZWxldGUgZmlsZT0iJHtjdXN0b20tdmFsaWRhdG9yLWphcn0iLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQtc2VydmVyIi8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3VzdG9tLXZhbGlkYXRpb24tMS9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2N1c3RvbS12YWxpZGF0aW9uLTEvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDM0MDkwZDcuLmQ4MjBkNDUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3VzdG9tLXZhbGlkYXRpb24tMS9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jdXN0b20tdmFsaWRhdGlvbi0xL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzgsNyArMzgsNyBAQAogICAgICAgICAgICAgICAgIGphdmF4LnJtaS5Qb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqUmVmLCBTaW1wbGVCTVBIb21lLmNsYXNzKTsKIAogICAgICAgICBTaW1wbGVCTVAgY29udmFsQk1QID0gY29udmFsQk1QSG9tZS5jcmVhdGUoKTsKLQlzdGF0LmFkZERlc2NyaXB0aW9uKCJDdXN0b20gVmFsaWRhdGlvbiBUZXN0IHVzaW5nIGEgY3VzdG9tIHZhbGlkYXRvciAiKTsKKyAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJDdXN0b20gVmFsaWRhdGlvbiBUZXN0IHVzaW5nIGEgY3VzdG9tIHZhbGlkYXRvciAiKTsKIAogICAgICAgICBpZiAoYXJncyAhPSBudWxsICYmIGFyZ3MubGVuZ3RoID4gMCkgewogICAgICAgICAgICAgU3RyaW5nIHBhcmFtID0gYXJnc1swXTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3VzdG9tLXZhbGlkYXRpb24tMS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2N1c3RvbS12YWxpZGF0aW9uLTEvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IDMyZGNhOGEuLjdhYTRiNjAgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3VzdG9tLXZhbGlkYXRpb24tMS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jdXN0b20tdmFsaWRhdGlvbi0xL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSwxNSArMSwxNSBAQAotRHJvcCB0YWJsZSBPX0NVU1RPTUVSOw0KLQ0KLUNSRUFURSBUQUJMRSBPX0NVU1RPTUVSICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQotRHJvcCB0YWJsZSBEVU1NWTsNCi0NCi1DUkVBVEUgVEFCTEUgRFVNTVkgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCi1JTlNFUlQgSU5UTyBEVU1NWSBWQUxVRVMoMSwgJ3d4eXonKTsNCitEcm9wIHRhYmxlIE9fQ1VTVE9NRVI7CisKK0NSRUFURSBUQUJMRSBPX0NVU1RPTUVSICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikKKyk7CisKK0Ryb3AgdGFibGUgRFVNTVk7CisKK0NSRUFURSBUQUJMRSBEVU1NWSAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCitJTlNFUlQgSU5UTyBEVU1NWSBWQUxVRVMoMSwgJ3d4eXonKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3VzdG9tLXZhbGlkYXRpb24tMS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jdXN0b20tdmFsaWRhdGlvbi0xL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggNzBkMWZjYy4uZDg1NGI5NSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jdXN0b20tdmFsaWRhdGlvbi0xL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jdXN0b20tdmFsaWRhdGlvbi0xL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEgKzEgQEAKLURyb3AgdGFibGUgT19DdXN0b21lcjsNCitEcm9wIHRhYmxlIE9fQ3VzdG9tZXI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2N1c3RvbS12YWxpZGF0aW9uLTEvdmFsaWRhdG9yL2NvbS9zdW4vczFhc2Rldi9qZGJjL2N1c3RvbXZhbC92YWxpZGF0b3IvTXlWYWxpZGF0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3VzdG9tLXZhbGlkYXRpb24tMS92YWxpZGF0b3IvY29tL3N1bi9zMWFzZGV2L2pkYmMvY3VzdG9tdmFsL3ZhbGlkYXRvci9NeVZhbGlkYXRvci5qYXZhCmluZGV4IDdmMTVjMWMuLjY0ZWZhMjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3VzdG9tLXZhbGlkYXRpb24tMS92YWxpZGF0b3IvY29tL3N1bi9zMWFzZGV2L2pkYmMvY3VzdG9tdmFsL3ZhbGlkYXRvci9NeVZhbGlkYXRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3VzdG9tLXZhbGlkYXRpb24tMS92YWxpZGF0b3IvY29tL3N1bi9zMWFzZGV2L2pkYmMvY3VzdG9tdmFsL3ZhbGlkYXRvci9NeVZhbGlkYXRvci5qYXZhCkBAIC0yMiwxMyArMjIsMTMgQEAKIHB1YmxpYyBjbGFzcyBNeVZhbGlkYXRvciBpbXBsZW1lbnRzIENvbm5lY3Rpb25WYWxpZGF0aW9uIHsKIAogICAgIHB1YmxpYyBib29sZWFuIGlzQ29ubmVjdGlvblZhbGlkKENvbm5lY3Rpb24gY29uKSB7Ci0JYm9vbGVhbiB2YWxpZCA9IGZhbHNlOwotCXRyeSB7CisgICAgYm9vbGVhbiB2YWxpZCA9IGZhbHNlOworICAgIHRyeSB7CiAgICAgICAgICAgICB2YWxpZCA9IGlzVmFsaWQoY29uLCAic2VsZWN0IGNvdW50KCopIGFzIENPVU5UIGZyb20gRFVNTVkiKTsKLQl9IGNhdGNoKEV4Y2VwdGlvbiBleCkgeworICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLQl9Ci0JcmV0dXJuIHZhbGlkOworICAgIH0KKyAgICByZXR1cm4gdmFsaWQ7CiAgICAgfQogCiAgICAvKioKQEAgLTQwLDMyICs0MCwzMiBAQAogICAgICogQHRocm93cyBSZXNvdXJjZUV4Y2VwdGlvbiBpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgdmFsaWQKICAgICAqLwogICAgIHByb3RlY3RlZCBib29sZWFuIGlzVmFsaWQoamF2YS5zcWwuQ29ubmVjdGlvbiBjb24sCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBxdWVyeSkgdGhyb3dzIEV4Y2VwdGlvbnsKLQlpbnQgY291bnQgPSAxOwotCWJvb2xlYW4gdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHF1ZXJ5KSB0aHJvd3MgRXhjZXB0aW9ueworICAgIGludCBjb3VudCA9IDE7CisgICAgYm9vbGVhbiB2YWxpZCA9IGZhbHNlOwogICAgICAgICBpZiAoY29uID09IG51bGwpIHsKLQkgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiVGhlIGNvbm5lY3Rpb24gaXMgbm90IHZhbGlkIGFzICIKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICsgInRoZSBjb25uZWN0aW9uIGlzIG51bGwiKTsKLQl9CisgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlRoZSBjb25uZWN0aW9uIGlzIG5vdCB2YWxpZCBhcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJ0aGUgY29ubmVjdGlvbiBpcyBudWxsIik7CisgICAgfQogCiAgICAgICAgIGphdmEuc3FsLlByZXBhcmVkU3RhdGVtZW50IHN0bXQgPSBudWxsOwogICAgICAgICBqYXZhLnNxbC5SZXN1bHRTZXQgcnMgPSBudWxsOwogICAgICAgICB0cnkgewotCSAgIHN0bXQgPSBjb24ucHJlcGFyZVN0YXRlbWVudChxdWVyeSk7Ci0JICAgcnMgPSBzdG10LmV4ZWN1dGVRdWVyeSgpOworICAgICAgIHN0bXQgPSBjb24ucHJlcGFyZVN0YXRlbWVudChxdWVyeSk7CisgICAgICAgcnMgPSBzdG10LmV4ZWN1dGVRdWVyeSgpOwogICAgICAgICAgICB3aGlsZShycy5uZXh0KCkpIHsKLQkgICAgICAgaW50IHJlc3VsdENvdW50ID0gcnMuZ2V0SW50KCJDT1VOVCIpOwotCSAgICAgICBpZihjb3VudCA9PSByZXN1bHRDb3VudCkgewotCQkgICB2YWxpZCA9IHRydWU7CisgICAgICAgICAgIGludCByZXN1bHRDb3VudCA9IHJzLmdldEludCgiQ09VTlQiKTsKKyAgICAgICAgICAgaWYoY291bnQgPT0gcmVzdWx0Q291bnQpIHsKKyAgICAgICAgICAgdmFsaWQgPSB0cnVlOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4cGVjdGVkIGNvdW50IFsiICsgY291bnQgKwogICAgICAgICAgICAgICAgICAgICAgICAgICJdIGRvZXMgbm90IG1hdGNoIHJlc3VsdFsiICsgcmVzdWx0Q291bnQgKyAiXSIpOwotCQkgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAKLQl9IGNhdGNoIChFeGNlcHRpb24gc3FsZSkgewotCSAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKHNxbGUpOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBzcWxlKSB7CisgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oc3FsZSk7CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGlmIChycyAhPSBudWxsKSB7CkBAIC03OSw2ICs3OSw2IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUyKSB7fQogICAgICAgICB9Ci0JcmV0dXJuIHZhbGlkOworICAgIHJldHVybiB2YWxpZDsKICAgICB9Ci19ICAgIAorfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jdXN0b20tdmFsaWRhdGlvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jdXN0b20tdmFsaWRhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDE0MmNlZWYuLjA1OTllYmYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3VzdG9tLXZhbGlkYXRpb24vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2N1c3RvbS12YWxpZGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE5ICsxNSwxOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iamRiYy1jdXN0b212YWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc2VzMTIuemlwIiB2YWx1ZT0iL3RtcC9jbGFzc2VzMTIuemlwIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2N1c3RvbS12YWxpZGF0aW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3VzdG9tLXZhbGlkYXRpb24vYnVpbGQueG1sCmluZGV4IGI0Mzk2OTAuLmRiYjk5MmYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3VzdG9tLXZhbGlkYXRpb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3VzdG9tLXZhbGlkYXRpb24vYnVpbGQueG1sCkBAIC0yMiw4ICsyMiw4IEBACiAgICAgICAgIDwhRU5USVRZIGNvbW1vbkJ1aWxkIFNZU1RFTSAiLi8uLi8uLi8uLi9jb25maWcvY29tbW9uLnhtbCI+CiAgICAgICAgIDwhRU5USVRZIHRlc3Rwcm9wZXJ0aWVzIFNZU1RFTSAiLi9idWlsZC5wcm9wZXJ0aWVzIj4KICAgICAgICAgPCFFTlRJVFkgcnVuIFNZU1RFTSAiLi8uLi8uLi8uLi9jb25maWcvcnVuLnhtbCI+Ci0JPCFFTlRJVFkgamRiY3htbCBTWVNURU0gIi4vLi4vSmRiY0NvbW1vbi54bWwiPgotCTwhRU5USVRZIGpkYmNQcm9wcyBTWVNURU0gIi4vLi4vSmRiY0NvbW1vbi5wcm9wZXJ0aWVzIj4KKyAgICA8IUVOVElUWSBqZGJjeG1sIFNZU1RFTSAiLi8uLi9KZGJjQ29tbW9uLnhtbCI+CisgICAgPCFFTlRJVFkgamRiY1Byb3BzIFNZU1RFTSAiLi8uLi9KZGJjQ29tbW9uLnByb3BlcnRpZXMiPgogICAgICAgICBdPgogCiA8cHJvamVjdCBuYW1lPSJtaXgiIGRlZmF1bHQ9InVzYWdlIiBiYXNlZGlyPSIuIj4KQEAgLTc0LDggKzc0LDggQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IjEiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCi0JPGFudGNhbGwgdGFyZ2V0PSJzdG9wLWRlcmJ5Ii8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJzdGFydC1kZXJieSIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0ic3RvcC1kZXJieSIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0ic3RhcnQtZGVyYnkiLz4KIAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iMiIvPgpAQCAtMTA1LDggKzEwNSw4IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAotCTxhbnRjYWxsIHRhcmdldD0ic3RvcC1kZXJieSIvPgotCTxhbnRjYWxsIHRhcmdldD0ic3RhcnQtZGVyYnkiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InN0b3AtZGVyYnkiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InN0YXJ0LWRlcmJ5Ii8+CiAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IjQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3VzdG9tLXZhbGlkYXRpb24vY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jdXN0b20tdmFsaWRhdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMjljZTRiZi4uOTA4NzNmNSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jdXN0b20tdmFsaWRhdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jdXN0b20tdmFsaWRhdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgICAgICAgICAgICBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ialJlZiwgU2ltcGxlQk1QSG9tZS5jbGFzcyk7CiAKICAgICAgICAgU2ltcGxlQk1QIGNvbnZhbEJNUCA9IGNvbnZhbEJNUEhvbWUuY3JlYXRlKCk7Ci0Jc3RhdC5hZGREZXNjcmlwdGlvbigiQ3VzdG9tIFZhbGlkYXRpb24gVGVzdHMiKTsKKyAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJDdXN0b20gVmFsaWRhdGlvbiBUZXN0cyIpOwogCiAgICAgICAgIGlmIChhcmdzICE9IG51bGwgJiYgYXJncy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICBTdHJpbmcgcGFyYW0gPSBhcmdzWzBdOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jdXN0b20tdmFsaWRhdGlvbi9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2N1c3RvbS12YWxpZGF0aW9uL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCBlNDkxNGY2Li5mMjU2MDc2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2N1c3RvbS12YWxpZGF0aW9uL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2N1c3RvbS12YWxpZGF0aW9uL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSw3ICsxLDcgQEAKLURyb3AgdGFibGUgT19DdXN0b21lcjsNCi0NCi1DUkVBVEUgVEFCTEUgT19DdXN0b21lciAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikNCi0pOw0KLQ0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKKworQ1JFQVRFIFRBQkxFIE9fQ3VzdG9tZXIgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQorKTsKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jdXN0b20tdmFsaWRhdGlvbi9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9jdXN0b20tdmFsaWRhdGlvbi9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IDcwZDFmY2MuLmQ4NTRiOTUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvY3VzdG9tLXZhbGlkYXRpb24vc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2N1c3RvbS12YWxpZGF0aW9uL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEgKzEgQEAKLURyb3AgdGFibGUgT19DdXN0b21lcjsNCitEcm9wIHRhYmxlIE9fQ3VzdG9tZXI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RhdGFzb3VyY2U0MC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kYXRhc291cmNlNDAvYnVpbGQucHJvcGVydGllcwppbmRleCA3NmVmNzQ5Li4zNzc5NzExIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RhdGFzb3VyY2U0MC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZGF0YXNvdXJjZTQwL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE5ICsxNSwxOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWJtcC1kYXRhc291cmNlNDAiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IjEyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RhdGFzb3VyY2U0MC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RhdGFzb3VyY2U0MC9idWlsZC54bWwKaW5kZXggZGY2NDgyMi4uZjVlNGM5MiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kYXRhc291cmNlNDAvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZGF0YXNvdXJjZTQwL2J1aWxkLnhtbApAQCAtNjIsNyArNjIsNyBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qZGJjLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJkcy1wb29sIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9kcy1yZXNvdXJjZSIvPgotIAkgICAgPHBhcmFtIG5hbWU9ImRiLmNsYXNzIiB2YWx1ZT0ib3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudERhdGFTb3VyY2U0MCIvPgorICAgICAgICAgPHBhcmFtIG5hbWU9ImRiLmNsYXNzIiB2YWx1ZT0ib3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudERhdGFTb3VyY2U0MCIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UudHlwZSIgdmFsdWU9ImphdmF4LnNxbC5EYXRhU291cmNlIi8+CiAKICAgICAgICAgPC9hbnRjYWxsPgpAQCAtMTIwLDcgKzEyMCw3IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJ4YS1wb29sIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy94YS1yZXNvdXJjZSIvPgogICAgICAgICA8L2FudGNhbGw+Ci0JCisKIAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kYXRhc291cmNlNDAvZWpiL1NpbXBsZUJNUEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZGF0YXNvdXJjZTQwL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKaW5kZXggYzZkYmU2ZC4uMDgzOTQ1ZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kYXRhc291cmNlNDAvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RhdGFzb3VyY2U0MC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCkBAIC0xMDgsMTYgKzEwOCwxNiBAQAogICAgICAgICAgICAgU3RyaW5nIHBoeXNpY2FsQ29ubmVjdGlvbjIgPSAoKChjb20uc3VuLmFwcHNlcnYuamRiYy5EYXRhU291cmNlKSBkcykuZ2V0Q29ubmVjdGlvbihjb25uKSkudG9TdHJpbmcoKTsKIAogICAgICAgICAgICAgLy9FbnN1cmUgdGhhdCBib3RoIHRoZSBjb25uZWN0aW9ucyBhcmUgdGhlIHNhbWUuCi0gCQlTeXN0ZW0ub3V0LnByaW50bG4oIlBoeXNpY2FsQ29ubiAxIDogIiArIHBoeXNpY2FsQ29ubmVjdGlvbjEpOworICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQaHlzaWNhbENvbm4gMSA6ICIgKyBwaHlzaWNhbENvbm5lY3Rpb24xKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBoeXNpY2FsQ29ubiAyIDogIiArIHBoeXNpY2FsQ29ubmVjdGlvbjEpOwogCiAgICAgICAgICAgICBpZiAocGh5c2ljYWxDb25uZWN0aW9uMi5lcXVhbHMocGh5c2ljYWxDb25uZWN0aW9uMSkpIHsKICAgICAgICAgICAgICAgICBwYXNzZWQgPSB0cnVlOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlBoeXNpY2FsIENvbm5lY3Rpb25zIGFyZSBlcXVhbCIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBoeXNpY2FsIENvbm5lY3Rpb25zIGFyZSBlcXVhbCIpOwogICAgICAgICAgICAgfWVsc2V7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiUGh5c2ljYWwgQ29ubmVjdGlvbnMgYXJlIG5vdCBlcXVhbCIpOwotCSAgICB9Ci0JICAgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBoeXNpY2FsIENvbm5lY3Rpb25zIGFyZSBub3QgZXF1YWwiKTsKKyAgICAgICAgfQorCiAKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CkBAIC0xNzgsNyArMTc4LDcgQEAKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRhdGFTb3VyY2UgdW53cmFwKCkgZGlkIG5vdCByZXR1cm4gYXBwcm9wcmlhdGUgZGItZGF0YXNvdXJjZXMiKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgcGFzc2VkID0gZmFsc2U7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RhdGFzb3VyY2U0MC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RhdGFzb3VyY2U0MC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggZDNmNWExMi4uOGIxMzc4OSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kYXRhc291cmNlNDAvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZGF0YXNvdXJjZTQwL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSArMSBAQAotDQorCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLmFwcGNsaWVudC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5hcHBjbGllbnQvYnVpbGQucHJvcGVydGllcwppbmRleCBhZjI0ZGFmLi4yMGJjODVkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLmFwcGNsaWVudC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2YuYXBwY2xpZW50L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE5ICsxNSwxOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iamRiYy1tYXJrY29ubmVjdGlvbmFzYmFkLnhhIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIxMiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5hcHBjbGllbnQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5hcHBjbGllbnQvYnVpbGQueG1sCmluZGV4IDdkNzY2ZjAuLjVlNzc3MWYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2YuYXBwY2xpZW50L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLmFwcGNsaWVudC9idWlsZC54bWwKQEAgLTEwNyw3ICsxMDcsNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLWxvY2FsLXBvb2wuaWRsZV90aW1lb3V0X2luX3NlY29uZHM9MzYwMCIvPgogICAgICAgICA8L2FudGNhbGw+Ci0JPCEtLTxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgorICAgIDwhLS08YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLmpkYmMtbG9jYWwtcG9vbC5wcm9wZXJ0eS5VUkw9amRiYzpkZXJieTovL2xvY2FsaG9zdDoxNTI3L3Rlc3RkYjt1c2VyPWRidXNlcjtwYXNzd29yZD1kYnBhc3N3b3JkIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLmFwcGNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLmFwcGNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggZmYwZmI1My4uY2NmMzRiNiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5hcHBjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2YuYXBwY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzgsMjcgKzM4LDI3IEBACiAgICAgcHVibGljIHZvaWQgcnVuVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewogCiAKLQlTZXQ8SW50ZWdlcj4gbG9jYWxkc1NldCA9IG5ldyBIYXNoU2V0KCk7Ci0JU2V0PEludGVnZXI+IGxvY2FsZHNBZnRlclNldCA9IG5ldyBIYXNoU2V0KCk7Ci0JaW50IGNvdW50TG9jYWxkcyA9IDA7CisgICAgU2V0PEludGVnZXI+IGxvY2FsZHNTZXQgPSBuZXcgSGFzaFNldCgpOworICAgIFNldDxJbnRlZ2VyPiBsb2NhbGRzQWZ0ZXJTZXQgPSBuZXcgSGFzaFNldCgpOworICAgIGludCBjb3VudExvY2FsZHMgPSAwOwogCiAgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JY29tLnN1bi5hcHBzZXJ2LmpkYmMuRGF0YVNvdXJjZSBkcyA9IChjb20uc3VuLmFwcHNlcnYuamRiYy5EYXRhU291cmNlKSBpYy5sb29rdXAoImpkYmMvbG9jYWxkYXRhc291cmNlIik7Ci0gICAgICAgIAotCXN0YXQuYWRkRGVzY3JpcHRpb24oIkRNTUNGIE1hcmstQ29ubmVjdGlvbi1Bcy1CYWQgQXBwY2xpZW50ICIpOworICAgIGNvbS5zdW4uYXBwc2Vydi5qZGJjLkRhdGFTb3VyY2UgZHMgPSAoY29tLnN1bi5hcHBzZXJ2LmpkYmMuRGF0YVNvdXJjZSkgaWMubG9va3VwKCJqZGJjL2xvY2FsZGF0YXNvdXJjZSIpOworCisgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiRE1NQ0YgTWFyay1Db25uZWN0aW9uLUFzLUJhZCBBcHBjbGllbnQgIik7CiAKIAotCWxvY2FsZHNTZXQgPSBnZXRGcm9tTG9jYWxEUyhNQVhfUE9PTF9TSVpFLCBkcyk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJsb2NhbGRzID0gIiArIGxvY2FsZHNTZXQpOwotCQotCS8vamRiYy1sb2NhbC1wb29sCisgICAgbG9jYWxkc1NldCA9IGdldEZyb21Mb2NhbERTKE1BWF9QT09MX1NJWkUsIGRzKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImxvY2FsZHMgPSAiICsgbG9jYWxkc1NldCk7CisKKyAgICAvL2pkYmMtbG9jYWwtcG9vbAogICAgICAgICB0ZXN0MShkcyk7CiAKLQlsb2NhbGRzQWZ0ZXJTZXQgPSBnZXRGcm9tTG9jYWxEUyhNQVhfUE9PTF9TSVpFLCBkcyk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJsb2NhbGRzQWZ0ZXIgPSAiICsgbG9jYWxkc0FmdGVyU2V0KTsKKyAgICBsb2NhbGRzQWZ0ZXJTZXQgPSBnZXRGcm9tTG9jYWxEUyhNQVhfUE9PTF9TSVpFLCBkcyk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJsb2NhbGRzQWZ0ZXIgPSAiICsgbG9jYWxkc0FmdGVyU2V0KTsKIAotCWNvdW50TG9jYWxkcyA9IGNvbXBhcmVBbmRHZXRDb3VudChsb2NhbGRzU2V0LCBsb2NhbGRzQWZ0ZXJTZXQpOwotCWlmKE1BWF9QT09MX1NJWkUtY291bnRMb2NhbGRzID09IDUpIHsKKyAgICBjb3VudExvY2FsZHMgPSBjb21wYXJlQW5kR2V0Q291bnQobG9jYWxkc1NldCwgbG9jYWxkc0FmdGVyU2V0KTsKKyAgICBpZihNQVhfUE9PTF9TSVpFLWNvdW50TG9jYWxkcyA9PSA1KSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiIE1hcmstQ29ubmVjdGlvbi1Bcy1CYWQgZGVzdHJveWVkQ291bnQgbG9jYWxkczogIiwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCIgTWFyay1Db25uZWN0aW9uLUFzLUJhZCBkZXN0cm95ZWRDb3VudCBsb2NhbGRzOiAiLCBzdGF0LkZBSUwpOwpAQCAtNjksMjcgKzY5LDI3IEBACiAKICAgICBwdWJsaWMgaW50IGNvbXBhcmVBbmRHZXRDb3VudChTZXQ8SW50ZWdlcj4gYmVmb3JlU2V0LCBTZXQ8SW50ZWdlcj4gYWZ0ZXJTZXQpIHsKICAgICAgICAgLy9kZW5vdGVzIHRoZSBjb3VudCBvZiBoYXNoY29kZXMgdGhhdCBtYXRjaGVkIGluIGJvdGggc2V0cy4KLSAgICAgICAgaW50IGNvbnRhaW5zID0gMDsJICAgIAotCWlmKCFiZWZvcmVTZXQuY29udGFpbnNBbGwoYWZ0ZXJTZXQpKSB7CisgICAgICAgIGludCBjb250YWlucyA9IDA7CisgICAgaWYoIWJlZm9yZVNldC5jb250YWluc0FsbChhZnRlclNldCkpIHsKICAgICAgICAgICAgIC8vaWYgaXQgZG9lcyBub3QgY29udGFpbiBhbGwgdGhlIGVsZW1lbnRzIG9mIHRoZSBhZnRlciBzZXQKLQkgICAgLy9maW5kIGhvdyBtYW55IGFyZSBhYnNlbnQgZnJvbSB0aGUgYmVmb3JlU2V0CisgICAgICAgIC8vZmluZCBob3cgbWFueSBhcmUgYWJzZW50IGZyb20gdGhlIGJlZm9yZVNldAogICAgICAgICAgICAgZm9yKGludCBhZnRlckludCA6IGFmdGVyU2V0KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmKGJlZm9yZVNldC5jb250YWlucyhhZnRlckludCkpIHsKLQkgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zKys7Ci0JICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0JCSAgICAKLQl9CisgICAgICAgICAgICAgICAgICAgICAgICBjb250YWlucysrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgfQogICAgICAgICByZXR1cm4gY29udGFpbnM7CiAgICAgfQogCiAgICAgcHVibGljIFNldDxJbnRlZ2VyPiBnZXRGcm9tTG9jYWxEUyhpbnQgY291bnQsIGNvbS5zdW4uYXBwc2Vydi5qZGJjLkRhdGFTb3VyY2UgbG9jYWxkczEpIHsKLSAgICAgICAgaW50IGNvbm5IYXNoQ29kZSA9IDA7CQorICAgICAgICBpbnQgY29ubkhhc2hDb2RlID0gMDsKICAgICAgICAgQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKLQlTZXQ8SW50ZWdlcj4gaGFzaENvZGVTZXQgPSBuZXcgSGFzaFNldCgpOworICAgIFNldDxJbnRlZ2VyPiBoYXNoQ29kZVNldCA9IG5ldyBIYXNoU2V0KCk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotCSAgICB0cnkgewotCQljb25uID0gbG9jYWxkczEuZ2V0Tm9uVHhDb25uZWN0aW9uKCk7Ci0JCWNvbm5IYXNoQ29kZSA9IChsb2NhbGRzMS5nZXRDb25uZWN0aW9uKGNvbm4pKS5oYXNoQ29kZSgpOworICAgICAgICB0cnkgeworICAgICAgICBjb25uID0gbG9jYWxkczEuZ2V0Tm9uVHhDb25uZWN0aW9uKCk7CisgICAgICAgIGNvbm5IYXNoQ29kZSA9IChsb2NhbGRzMS5nZXRDb25uZWN0aW9uKGNvbm4pKS5oYXNoQ29kZSgpOwogICAgICAgICAgICAgICAgIGhhc2hDb2RlU2V0LmFkZChjb25uSGFzaENvZGUpOwogICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKIApAQCAtMTAxLDggKzEwMSw4IEBACiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0JfQotCXJldHVybiBoYXNoQ29kZVNldDsKKyAgICB9CisgICAgcmV0dXJuIGhhc2hDb2RlU2V0OwogICAgIH0KIAogICAgIC8qIFJlYWQgT3BlcmF0aW9uIC0gRHJpdmVyICAtIHNoYXJlYWJsZSAqLwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5hcHBjbGllbnQvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5hcHBjbGllbnQvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IGRjYzMyMWMuLmZhODQxNjEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2YuYXBwY2xpZW50L3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLmFwcGNsaWVudC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsMjkgKzEsMjkgQEAKLURyb3AgdGFibGUgT19DdXN0b21lcjsNCi0NCi1DUkVBVEUgVEFCTEUgT19DdXN0b21lciAoaWQgaW50ZWdlciAsIGRlc2NyaXB0aW9uIGNoYXIoNTApKTsNCi0NCi1Ecm9wIHRhYmxlIERFU1RST1lFRF9JTkZPOw0KLQ0KLUNSRUFURSBUQUJMRSBERVNUUk9ZRURfSU5GTyAodGVzdF9uYW1lIHZhcmNoYXIoMjApLCBwb29sX25hbWUgdmFyY2hhcigzMCksIG51bV9kZXNfY291bnQgaW50ZWdlcik7DQotDQotaW5zZXJ0IGludG8gREVTVFJPWUVEX0lORk8gdmFsdWVzICgndGVzdDEnLCAnamRiYy11bnNoYXJlYWJsZS1wb29sJywgNSk7DQotaW5zZXJ0IGludG8gREVTVFJPWUVEX0lORk8gdmFsdWVzICgndGVzdDInLCAnamRiYy11bnNoYXJlYWJsZS1wb29sJywgNSk7DQotaW5zZXJ0IGludG8gREVTVFJPWUVEX0lORk8gdmFsdWVzICgndGVzdDMnLCAnamRiYy1zaGFyZWFibGUtcG9vbCcsIDUpOw0KLWluc2VydCBpbnRvIERFU1RST1lFRF9JTkZPIHZhbHVlcyAoJ3Rlc3Q0JywgJ2pkYmMtc2hhcmVhYmxlLXBvb2wnLCA1KTsNCi1pbnNlcnQgaW50byBERVNUUk9ZRURfSU5GTyB2YWx1ZXMgKCd0ZXN0NScsICdqZGJjLXVuc2hhcmVhYmxlLXBvb2wnLCA1KTsNCi1pbnNlcnQgaW50byBERVNUUk9ZRURfSU5GTyB2YWx1ZXMgKCd0ZXN0NicsICdqZGJjLXVuc2hhcmVhYmxlLXBvb2wnLCA1KTsNCi1pbnNlcnQgaW50byBERVNUUk9ZRURfSU5GTyB2YWx1ZXMgKCd0ZXN0NycsICdqZGJjLXNoYXJlYWJsZS1wb29sJywgMSk7DQotaW5zZXJ0IGludG8gREVTVFJPWUVEX0lORk8gdmFsdWVzICgndGVzdDgnLCAnamRiYy1zaGFyZWFibGUtcG9vbCcsIDEpOw0KLWluc2VydCBpbnRvIERFU1RST1lFRF9JTkZPIHZhbHVlcyAoJ3Rlc3Q5JywgJ2pkYmMtc2hhcmVhYmxlLXBvb2wnLCAxKTsNCi1pbnNlcnQgaW50byBERVNUUk9ZRURfSU5GTyB2YWx1ZXMgKCd0ZXN0OScsICdqZGJjLWxvY2FsLXBvb2wnLCAxKTsNCi1pbnNlcnQgaW50byBERVNUUk9ZRURfSU5GTyB2YWx1ZXMgKCd0ZXN0MTAnLCAnamRiYy1zaGFyZWFibGUtcG9vbCcsIDEpOw0KLWluc2VydCBpbnRvIERFU1RST1lFRF9JTkZPIHZhbHVlcyAoJ3Rlc3QxMCcsICdqZGJjLWxvY2FsLXBvb2wnLCAxKTsNCi1pbnNlcnQgaW50byBERVNUUk9ZRURfSU5GTyB2YWx1ZXMgKCd0ZXN0MTEnLCAnamRiYy1zaGFyZWFibGUtcG9vbCcsIDEpOw0KLWluc2VydCBpbnRvIERFU1RST1lFRF9JTkZPIHZhbHVlcyAoJ3Rlc3QxMScsICdqZGJjLWxvY2FsLXBvb2wnLCAxKTsNCi1pbnNlcnQgaW50byBERVNUUk9ZRURfSU5GTyB2YWx1ZXMgKCd0ZXN0MTInLCAnamRiYy1zaGFyZWFibGUtcG9vbCcsIDEpOw0KLWluc2VydCBpbnRvIERFU1RST1lFRF9JTkZPIHZhbHVlcyAoJ3Rlc3QxMicsICdqZGJjLWxvY2FsLXBvb2wnLCAxKTsNCi0NCi1kcm9wIHRhYmxlIG93bmVyOw0KLQ0KLWNyZWF0ZSB0YWJsZSBvd25lciAoIGlkIGludGVnZXIsIGRlc2NyaXB0aW9uIGNoYXIoNTApKTsNCi0NCitEcm9wIHRhYmxlIE9fQ3VzdG9tZXI7CisKK0NSRUFURSBUQUJMRSBPX0N1c3RvbWVyIChpZCBpbnRlZ2VyICwgZGVzY3JpcHRpb24gY2hhcig1MCkpOworCitEcm9wIHRhYmxlIERFU1RST1lFRF9JTkZPOworCitDUkVBVEUgVEFCTEUgREVTVFJPWUVEX0lORk8gKHRlc3RfbmFtZSB2YXJjaGFyKDIwKSwgcG9vbF9uYW1lIHZhcmNoYXIoMzApLCBudW1fZGVzX2NvdW50IGludGVnZXIpOworCitpbnNlcnQgaW50byBERVNUUk9ZRURfSU5GTyB2YWx1ZXMgKCd0ZXN0MScsICdqZGJjLXVuc2hhcmVhYmxlLXBvb2wnLCA1KTsKK2luc2VydCBpbnRvIERFU1RST1lFRF9JTkZPIHZhbHVlcyAoJ3Rlc3QyJywgJ2pkYmMtdW5zaGFyZWFibGUtcG9vbCcsIDUpOworaW5zZXJ0IGludG8gREVTVFJPWUVEX0lORk8gdmFsdWVzICgndGVzdDMnLCAnamRiYy1zaGFyZWFibGUtcG9vbCcsIDUpOworaW5zZXJ0IGludG8gREVTVFJPWUVEX0lORk8gdmFsdWVzICgndGVzdDQnLCAnamRiYy1zaGFyZWFibGUtcG9vbCcsIDUpOworaW5zZXJ0IGludG8gREVTVFJPWUVEX0lORk8gdmFsdWVzICgndGVzdDUnLCAnamRiYy11bnNoYXJlYWJsZS1wb29sJywgNSk7CitpbnNlcnQgaW50byBERVNUUk9ZRURfSU5GTyB2YWx1ZXMgKCd0ZXN0NicsICdqZGJjLXVuc2hhcmVhYmxlLXBvb2wnLCA1KTsKK2luc2VydCBpbnRvIERFU1RST1lFRF9JTkZPIHZhbHVlcyAoJ3Rlc3Q3JywgJ2pkYmMtc2hhcmVhYmxlLXBvb2wnLCAxKTsKK2luc2VydCBpbnRvIERFU1RST1lFRF9JTkZPIHZhbHVlcyAoJ3Rlc3Q4JywgJ2pkYmMtc2hhcmVhYmxlLXBvb2wnLCAxKTsKK2luc2VydCBpbnRvIERFU1RST1lFRF9JTkZPIHZhbHVlcyAoJ3Rlc3Q5JywgJ2pkYmMtc2hhcmVhYmxlLXBvb2wnLCAxKTsKK2luc2VydCBpbnRvIERFU1RST1lFRF9JTkZPIHZhbHVlcyAoJ3Rlc3Q5JywgJ2pkYmMtbG9jYWwtcG9vbCcsIDEpOworaW5zZXJ0IGludG8gREVTVFJPWUVEX0lORk8gdmFsdWVzICgndGVzdDEwJywgJ2pkYmMtc2hhcmVhYmxlLXBvb2wnLCAxKTsKK2luc2VydCBpbnRvIERFU1RST1lFRF9JTkZPIHZhbHVlcyAoJ3Rlc3QxMCcsICdqZGJjLWxvY2FsLXBvb2wnLCAxKTsKK2luc2VydCBpbnRvIERFU1RST1lFRF9JTkZPIHZhbHVlcyAoJ3Rlc3QxMScsICdqZGJjLXNoYXJlYWJsZS1wb29sJywgMSk7CitpbnNlcnQgaW50byBERVNUUk9ZRURfSU5GTyB2YWx1ZXMgKCd0ZXN0MTEnLCAnamRiYy1sb2NhbC1wb29sJywgMSk7CitpbnNlcnQgaW50byBERVNUUk9ZRURfSU5GTyB2YWx1ZXMgKCd0ZXN0MTInLCAnamRiYy1zaGFyZWFibGUtcG9vbCcsIDEpOworaW5zZXJ0IGludG8gREVTVFJPWUVEX0lORk8gdmFsdWVzICgndGVzdDEyJywgJ2pkYmMtbG9jYWwtcG9vbCcsIDEpOworCitkcm9wIHRhYmxlIG93bmVyOworCitjcmVhdGUgdGFibGUgb3duZXIgKCBpZCBpbnRlZ2VyLCBkZXNjcmlwdGlvbiBjaGFyKDUwKSk7CisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2YuYXBwY2xpZW50L3NxbC9kcm9wX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLmFwcGNsaWVudC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IGE1ZWEyZjguLmQ4N2Q1ZGUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2YuYXBwY2xpZW50L3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5hcHBjbGllbnQvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbApAQCAtMSwyICsxLDIgQEAKLURyb3AgdGFibGUgT19DdXN0b21lcjsNCi1kcm9wIHRhYmxlIG93bmVyOw0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKK2Ryb3AgdGFibGUgb3duZXI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLm1hcmtjb25uZWN0aW9uYXNiYWQueGEvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2YubWFya2Nvbm5lY3Rpb25hc2JhZC54YS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGFmMjRkYWYuLjIwYmM4NWQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2YubWFya2Nvbm5lY3Rpb25hc2JhZC54YS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2YubWFya2Nvbm5lY3Rpb25hc2JhZC54YS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOSArMTUsMTkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImpkYmMtbWFya2Nvbm5lY3Rpb25hc2JhZC54YSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iMTIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2YubWFya2Nvbm5lY3Rpb25hc2JhZC54YS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLm1hcmtjb25uZWN0aW9uYXNiYWQueGEvYnVpbGQueG1sCmluZGV4IDkzZTYwYzguLjQ5OGFkNTUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2YubWFya2Nvbm5lY3Rpb25hc2JhZC54YS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5tYXJrY29ubmVjdGlvbmFzYmFkLnhhL2J1aWxkLnhtbApAQCAtMTg0LDcgKzE4NCw3IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLmpkYmMtbG9jYWwtcG9vbC5pZGxlX3RpbWVvdXRfaW5fc2Vjb25kcz0zNjAwIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLQk8IS0tPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CisgICAgPCEtLTxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgogICAgICAgICAgICAgICAgICAgIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy1sb2NhbC1wb29sLnByb3BlcnR5LlVSTD1qZGJjOmRlcmJ5Oi8vbG9jYWxob3N0OjE1MjcvdGVzdGRiO3VzZXI9ZGJ1c2VyO3Bhc3N3b3JkPWRicGFzc3dvcmQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2YubWFya2Nvbm5lY3Rpb25hc2JhZC54YS9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLm1hcmtjb25uZWN0aW9uYXNiYWQueGEvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDI4YWNiZTkuLjdjODcyMmQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2YubWFya2Nvbm5lY3Rpb25hc2JhZC54YS9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5tYXJrY29ubmVjdGlvbmFzYmFkLnhhL2NsaWVudC9DbGllbnQuamF2YQpAQCAtNDgsMjEgKzQ4LDIxIEBACiAKICAgICAgICAgICAgIHN3aXRjaCAoSW50ZWdlci5wYXJzZUludChwYXJhbSkpIHsKICAgICAgICAgICAgICAgICBjYXNlIDE6IHsvL29sZCBtZXRob2QKLQkJICAgIGNsaWVudC5ydW5Ob25BTVhUZXN0KCk7Ci0JCSAgICBicmVhazsKLQkJfQotCQljYXNlIDI6IHsgLy91c2luZyBhbXgKKyAgICAgICAgICAgIGNsaWVudC5ydW5Ob25BTVhUZXN0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIDI6IHsgLy91c2luZyBhbXgKICAgICAgICAgICAgICAgICAgICAgY2xpZW50LnJ1blRlc3QoKTsKLQkJICAgIGJyZWFrOwotCQl9Ci0JICAgIH0KLQl9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICB9CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHJ1bk5vbkFNWFRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQlTZXQ8SW50ZWdlcj4gbG9jYWxkc1NldCA9IG5ldyBIYXNoU2V0KCk7Ci0JU2V0PEludGVnZXI+IGxvY2FsZHNBZnRlclNldCA9IG5ldyBIYXNoU2V0KCk7Ci0JaW50IGNvdW50TG9jYWxkcyA9IDA7CisgICAgU2V0PEludGVnZXI+IGxvY2FsZHNTZXQgPSBuZXcgSGFzaFNldCgpOworICAgIFNldDxJbnRlZ2VyPiBsb2NhbGRzQWZ0ZXJTZXQgPSBuZXcgSGFzaFNldCgpOworICAgIGludCBjb3VudExvY2FsZHMgPSAwOwogCiAgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgIE9iamVjdCBvYmpSZWYgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZUJNUEhvbWUiKTsKQEAgLTczLDE3ICs3MywxNyBAQAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJETU1DRiBNYXJrLUNvbm5lY3Rpb24tQXMtQmFkIE5vbkFNWCAiKTsKIAogCi0JbG9jYWxkc1NldCA9IHNpbXBsZUJNUC5nZXRGcm9tTG9jYWxEUyhNQVhfUE9PTF9TSVpFKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImxvY2FsZHMgPSAiICsgbG9jYWxkc1NldCk7Ci0JCi0JLy9qZGJjLWxvY2FsLXBvb2wKKyAgICBsb2NhbGRzU2V0ID0gc2ltcGxlQk1QLmdldEZyb21Mb2NhbERTKE1BWF9QT09MX1NJWkUpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigibG9jYWxkcyA9ICIgKyBsb2NhbGRzU2V0KTsKKworICAgIC8vamRiYy1sb2NhbC1wb29sCiAgICAgICAgIHNpbXBsZUJNUC50ZXN0MCgpOwogCi0JbG9jYWxkc0FmdGVyU2V0ID0gc2ltcGxlQk1QLmdldEZyb21Mb2NhbERTKE1BWF9QT09MX1NJWkUpOwotCVN5c3RlbS5vdXQucHJpbnRsbigibG9jYWxkc0FmdGVyID0gIiArIGxvY2FsZHNBZnRlclNldCk7CisgICAgbG9jYWxkc0FmdGVyU2V0ID0gc2ltcGxlQk1QLmdldEZyb21Mb2NhbERTKE1BWF9QT09MX1NJWkUpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigibG9jYWxkc0FmdGVyID0gIiArIGxvY2FsZHNBZnRlclNldCk7CiAKLQljb3VudExvY2FsZHMgPSBjb21wYXJlQW5kR2V0Q291bnQobG9jYWxkc1NldCwgbG9jYWxkc0FmdGVyU2V0KTsKLQlpZihNQVhfUE9PTF9TSVpFLWNvdW50TG9jYWxkcyA9PSA1KSB7CisgICAgY291bnRMb2NhbGRzID0gY29tcGFyZUFuZEdldENvdW50KGxvY2FsZHNTZXQsIGxvY2FsZHNBZnRlclNldCk7CisgICAgaWYoTUFYX1BPT0xfU0laRS1jb3VudExvY2FsZHMgPT0gNSkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIiBETU1DRiBNYXJrLUNvbm5lY3Rpb24tQXMtQmFkIGRlc3Ryb3llZENvdW50IGxvY2FsZHM6ICIsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiIERNTUNGIE1hcmstQ29ubmVjdGlvbi1Bcy1CYWQgZGVzdHJveWVkQ291bnQgbG9jYWxkczogIiwgc3RhdC5GQUlMKTsKQEAgLTE2NSwxNCArMTY1LDE0IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiIERNTUNGIE1hcmstQ29ubmVjdGlvbi1Bcy1CYWQgW0xvY2FsLVhBIC1TaGFyZWFibGUtU2hhcmVhYmxlIC0gUmVhZC1Xcml0ZV0gOiAiLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLSAgICAgICAgIGlmIChzaW1wbGVCTVAudGVzdDExKCkgJiYgZ2V0TW9uaXRvcmFibGVQcm9wZXJ0eU9mQ29ubmVjdGlvblBvb2woImpkYmMtc2hhcmVhYmxlLXBvb2wiKSA9PSAxNSAmJiAKKyAgICAgICAgIGlmIChzaW1wbGVCTVAudGVzdDExKCkgJiYgZ2V0TW9uaXRvcmFibGVQcm9wZXJ0eU9mQ29ubmVjdGlvblBvb2woImpkYmMtc2hhcmVhYmxlLXBvb2wiKSA9PSAxNSAmJgogICAgICAgICAgICAgICAgICBnZXRNb25pdG9yYWJsZVByb3BlcnR5T2ZDb25uZWN0aW9uUG9vbCgiamRiYy1sb2NhbC1wb29sIikgPT0gMykgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIiBETU1DRiBNYXJrLUNvbm5lY3Rpb24tQXMtQmFkIFtMb2NhbC1YQSAtU2hhcmVhYmxlLVNoYXJlYWJsZSAtIFJlYWQtUmVhZF0gOiAiLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIiBETU1DRiBNYXJrLUNvbm5lY3Rpb24tQXMtQmFkIFtMb2NhbC1YQSAtU2hhcmVhYmxlLVNoYXJlYWJsZSAtIFJlYWQtUmVhZF0gOiAiLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLSAgICAgICAgIGlmIChzaW1wbGVCTVAudGVzdDEyKCkgJiYgZ2V0TW9uaXRvcmFibGVQcm9wZXJ0eU9mQ29ubmVjdGlvblBvb2woImpkYmMtc2hhcmVhYmxlLXBvb2wiKSA9PSAxNiAmJiAKKyAgICAgICAgIGlmIChzaW1wbGVCTVAudGVzdDEyKCkgJiYgZ2V0TW9uaXRvcmFibGVQcm9wZXJ0eU9mQ29ubmVjdGlvblBvb2woImpkYmMtc2hhcmVhYmxlLXBvb2wiKSA9PSAxNiAmJgogICAgICAgICAgICAgICAgICBnZXRNb25pdG9yYWJsZVByb3BlcnR5T2ZDb25uZWN0aW9uUG9vbCgiamRiYy1sb2NhbC1wb29sIikgPT0gNCkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIiBETU1DRiBNYXJrLUNvbm5lY3Rpb24tQXMtQmFkIFtMb2NhbC1YQSAtU2hhcmVhYmxlLVNoYXJlYWJsZSAtIFdyaXRlLVJlYWRdIDogIiwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTE4NiwzMyArMTg2LDMzIEBACiAKICAgICBwdWJsaWMgaW50IGNvbXBhcmVBbmRHZXRDb3VudChTZXQ8SW50ZWdlcj4gYmVmb3JlU2V0LCBTZXQ8SW50ZWdlcj4gYWZ0ZXJTZXQpIHsKICAgICAgICAgLy9kZW5vdGVzIHRoZSBjb3VudCBvZiBoYXNoY29kZXMgdGhhdCBtYXRjaGVkIGluIGJvdGggc2V0cy4KLSAgICAgICAgaW50IGNvbnRhaW5zID0gMDsJICAgIAotCWlmKCFiZWZvcmVTZXQuY29udGFpbnNBbGwoYWZ0ZXJTZXQpKSB7CisgICAgICAgIGludCBjb250YWlucyA9IDA7CisgICAgaWYoIWJlZm9yZVNldC5jb250YWluc0FsbChhZnRlclNldCkpIHsKICAgICAgICAgICAgIC8vaWYgaXQgZG9lcyBub3QgY29udGFpbiBhbGwgdGhlIGVsZW1lbnRzIG9mIHRoZSBhZnRlciBzZXQKLQkgICAgLy9maW5kIGhvdyBtYW55IGFyZSBhYnNlbnQgZnJvbSB0aGUgYmVmb3JlU2V0CisgICAgICAgIC8vZmluZCBob3cgbWFueSBhcmUgYWJzZW50IGZyb20gdGhlIGJlZm9yZVNldAogICAgICAgICAgICAgZm9yKGludCBhZnRlckludCA6IGFmdGVyU2V0KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmKGJlZm9yZVNldC5jb250YWlucyhhZnRlckludCkpIHsKLQkgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zKys7Ci0JICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0JCSAgICAKLQl9CisgICAgICAgICAgICAgICAgICAgICAgICBjb250YWlucysrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgfQogICAgICAgICByZXR1cm4gY29udGFpbnM7CiAgICAgfQogCiAgICAgcHVibGljIGludCBnZXRNb25pdG9yYWJsZVByb3BlcnR5T2ZDb25uZWN0aW9uUG9vbChTdHJpbmcgcG9vbE5hbWUpIHRocm93cyBFeGNlcHRpb24gewogCi0JZmluYWwgU3RyaW5nIHVybFN0ciA9ICJzZXJ2aWNlOmpteDpybWk6Ly8vam5kaS9ybWk6Ly8iICsgSE9TVF9OQU1FICsgIjoiICsgSk1YX1BPUlQgKyAiL2pteHJtaSI7ICAgIAorICAgIGZpbmFsIFN0cmluZyB1cmxTdHIgPSAic2VydmljZTpqbXg6cm1pOi8vL2puZGkvcm1pOi8vIiArIEhPU1RfTkFNRSArICI6IiArIEpNWF9QT1JUICsgIi9qbXhybWkiOwogICAgICAgICBmaW5hbCBKTVhTZXJ2aWNlVVJMIHVybCA9IG5ldyBKTVhTZXJ2aWNlVVJMKHVybFN0cik7CiAKLQlmaW5hbCBKTVhDb25uZWN0b3Igam14Q29ubiA9IEpNWENvbm5lY3RvckZhY3RvcnkuY29ubmVjdCh1cmwpOwotCWZpbmFsIE1CZWFuU2VydmVyQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gam14Q29ubi5nZXRNQmVhblNlcnZlckNvbm5lY3Rpb24oKTsKKyAgICBmaW5hbCBKTVhDb25uZWN0b3Igam14Q29ubiA9IEpNWENvbm5lY3RvckZhY3RvcnkuY29ubmVjdCh1cmwpOworICAgIGZpbmFsIE1CZWFuU2VydmVyQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gam14Q29ubi5nZXRNQmVhblNlcnZlckNvbm5lY3Rpb24oKTsKIAogICAgICAgICBPYmplY3ROYW1lIG9iamVjdE5hbWUgPQogICAgICAgICAgICAgICAgIG5ldyBPYmplY3ROYW1lKCJhbXg6cHA9L21vbi9zZXJ2ZXItbW9uW3NlcnZlcl0sdHlwZT1qZGJjLWNvbm5lY3Rpb24tcG9vbC1tb24sbmFtZT1yZXNvdXJjZXMvIiArIHBvb2xOYW1lKTsKIAotCWphdmF4Lm1hbmFnZW1lbnQub3Blbm1iZWFuLkNvbXBvc2l0ZURhdGFTdXBwb3J0IHJldHVyblZhbHVlID0gCi0JCShqYXZheC5tYW5hZ2VtZW50Lm9wZW5tYmVhbi5Db21wb3NpdGVEYXRhU3VwcG9ydCkgCi0JCWNvbm5lY3Rpb24uZ2V0QXR0cmlidXRlKG9iamVjdE5hbWUsIE5VTV9DT05fREVTVFJPWUVEX0NPVU5UKTsKKyAgICBqYXZheC5tYW5hZ2VtZW50Lm9wZW5tYmVhbi5Db21wb3NpdGVEYXRhU3VwcG9ydCByZXR1cm5WYWx1ZSA9CisgICAgICAgIChqYXZheC5tYW5hZ2VtZW50Lm9wZW5tYmVhbi5Db21wb3NpdGVEYXRhU3VwcG9ydCkKKyAgICAgICAgY29ubmVjdGlvbi5nZXRBdHRyaWJ1dGUob2JqZWN0TmFtZSwgTlVNX0NPTl9ERVNUUk9ZRURfQ09VTlQpOwogCiAgICAgICAgIHJldHVybiBuZXcgSW50ZWdlcihyZXR1cm5WYWx1ZS5nZXQoImNvdW50IikudG9TdHJpbmcoKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5tYXJrY29ubmVjdGlvbmFzYmFkLnhhL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLm1hcmtjb25uZWN0aW9uYXNiYWQueGEvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQppbmRleCAwZTZmNTAxLi42ZjBlOGE4IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLm1hcmtjb25uZWN0aW9uYXNiYWQueGEvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLm1hcmtjb25uZWN0aW9uYXNiYWQueGEvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQpAQCAtNTEsMTMgKzUxLDEzIEBACiAKIAogICAgIHB1YmxpYyBTZXQ8SW50ZWdlcj4gZ2V0RnJvbUxvY2FsRFMoaW50IGNvdW50KSB7Ci0gICAgICAgIGludCBjb25uSGFzaENvZGUgPSAwOwkKKyAgICAgICAgaW50IGNvbm5IYXNoQ29kZSA9IDA7CiAgICAgICAgIENvbm5lY3Rpb24gY29ubiA9IG51bGw7Ci0JU2V0PEludGVnZXI+IGhhc2hDb2RlU2V0ID0gbmV3IEhhc2hTZXQoKTsKKyAgICBTZXQ8SW50ZWdlcj4gaGFzaENvZGVTZXQgPSBuZXcgSGFzaFNldCgpOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLQkgICAgdHJ5IHsKLQkJY29ubiA9IGxvY2FsZHMuZ2V0Tm9uVHhDb25uZWN0aW9uKCk7Ci0JCWNvbm5IYXNoQ29kZSA9IChsb2NhbGRzLmdldENvbm5lY3Rpb24oY29ubikpLmhhc2hDb2RlKCk7CisgICAgICAgIHRyeSB7CisgICAgICAgIGNvbm4gPSBsb2NhbGRzLmdldE5vblR4Q29ubmVjdGlvbigpOworICAgICAgICBjb25uSGFzaENvZGUgPSAobG9jYWxkcy5nZXRDb25uZWN0aW9uKGNvbm4pKS5oYXNoQ29kZSgpOwogICAgICAgICAgICAgICAgIGhhc2hDb2RlU2V0LmFkZChjb25uSGFzaENvZGUpOwogICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKIApAQCAtNjksOCArNjksOCBAQAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotCX0KLQlyZXR1cm4gaGFzaENvZGVTZXQ7CisgICAgfQorICAgIHJldHVybiBoYXNoQ29kZVNldDsKICAgICB9CiAKICAgICAvKiBSZWFkIE9wZXJhdGlvbiAtIERyaXZlciAgLSBzaGFyZWFibGUgKi8KQEAgLTMzMiw3ICszMzIsNyBAQAogICAgICAgICAgICAgc3RtdC5leGVjdXRlVXBkYXRlKCJpbnNlcnQgaW50byBvd25lciB2YWx1ZXMgKDksJ2xvY2FsZHMnKSIpOwogCiAgICAgICAgICAgICBjb25uMSA9IGRzMS5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubjEgZ290ICIgKyBjb25uMSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubjEgZ290ICIgKyBjb25uMSk7CiAgICAgICAgICAgICBTdGF0ZW1lbnQgc3RtdDEgPSBjb25uMS5jcmVhdGVTdGF0ZW1lbnQoKTsKICAgICAgICAgICAgIHN0bXQxLmV4ZWN1dGVVcGRhdGUoImluc2VydCBpbnRvIG9fY3VzdG9tZXIgdmFsdWVzICg5LCd4YWRzJykiKTsKIApAQCAtMzUxLDcgKzM1MSw3IEBACiAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgZHMxLm1hcmtDb25uZWN0aW9uQXNCYWQoY29ubjEpOwogICAgICAgICAgICAgICAgICAgICBjb25uMS5jbG9zZSgpOwotCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uMSBjbG9zZWQgIisgY29ubjEpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uMSBjbG9zZWQgIisgY29ubjEpOwogICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlMSkgewogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2YubWFya2Nvbm5lY3Rpb25hc2JhZC54YS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLm1hcmtjb25uZWN0aW9uYXNiYWQueGEvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IDBjMTgxOGEuLjc2OTRmMDcgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2YubWFya2Nvbm5lY3Rpb25hc2JhZC54YS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5tYXJrY29ubmVjdGlvbmFzYmFkLnhhL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSwyOSArMSwyOSBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KLQ0KLUNSRUFURSBUQUJMRSBPX0N1c3RvbWVyIChpZCBpbnRlZ2VyICwgZGVzY3JpcHRpb24gY2hhcig1MCkpOw0KLQ0KLURyb3AgdGFibGUgREVTVFJPWUVEX0lORk87DQotDQotQ1JFQVRFIFRBQkxFIERFU1RST1lFRF9JTkZPICh0ZXN0X25hbWUgdmFyY2hhcigyMCksIHBvb2xfbmFtZSB2YXJjaGFyKDMwKSwgbnVtX2Rlc19jb3VudCBpbnRlZ2VyKTsNCi0NCi1pbnNlcnQgaW50byBERVNUUk9ZRURfSU5GTyB2YWx1ZXMgKCd0ZXN0MCcsICdqZGJjLXVuc2hhcmVhYmxlLXBvb2wnLCA1KTsNCi1pbnNlcnQgaW50byBERVNUUk9ZRURfSU5GTyB2YWx1ZXMgKCd0ZXN0MicsICdqZGJjLXVuc2hhcmVhYmxlLXBvb2wnLCA1KTsNCi1pbnNlcnQgaW50byBERVNUUk9ZRURfSU5GTyB2YWx1ZXMgKCd0ZXN0MycsICdqZGJjLXNoYXJlYWJsZS1wb29sJywgNSk7DQotaW5zZXJ0IGludG8gREVTVFJPWUVEX0lORk8gdmFsdWVzICgndGVzdDQnLCAnamRiYy1zaGFyZWFibGUtcG9vbCcsIDUpOw0KLWluc2VydCBpbnRvIERFU1RST1lFRF9JTkZPIHZhbHVlcyAoJ3Rlc3Q1JywgJ2pkYmMtdW5zaGFyZWFibGUtcG9vbCcsIDUpOw0KLWluc2VydCBpbnRvIERFU1RST1lFRF9JTkZPIHZhbHVlcyAoJ3Rlc3Q2JywgJ2pkYmMtdW5zaGFyZWFibGUtcG9vbCcsIDUpOw0KLWluc2VydCBpbnRvIERFU1RST1lFRF9JTkZPIHZhbHVlcyAoJ3Rlc3Q3JywgJ2pkYmMtc2hhcmVhYmxlLXBvb2wnLCAxKTsNCi1pbnNlcnQgaW50byBERVNUUk9ZRURfSU5GTyB2YWx1ZXMgKCd0ZXN0OCcsICdqZGJjLXNoYXJlYWJsZS1wb29sJywgMSk7DQotaW5zZXJ0IGludG8gREVTVFJPWUVEX0lORk8gdmFsdWVzICgndGVzdDknLCAnamRiYy1zaGFyZWFibGUtcG9vbCcsIDEpOw0KLWluc2VydCBpbnRvIERFU1RST1lFRF9JTkZPIHZhbHVlcyAoJ3Rlc3Q5JywgJ2pkYmMtbG9jYWwtcG9vbCcsIDEpOw0KLWluc2VydCBpbnRvIERFU1RST1lFRF9JTkZPIHZhbHVlcyAoJ3Rlc3QxMCcsICdqZGJjLXNoYXJlYWJsZS1wb29sJywgMSk7DQotaW5zZXJ0IGludG8gREVTVFJPWUVEX0lORk8gdmFsdWVzICgndGVzdDEwJywgJ2pkYmMtbG9jYWwtcG9vbCcsIDEpOw0KLWluc2VydCBpbnRvIERFU1RST1lFRF9JTkZPIHZhbHVlcyAoJ3Rlc3QxMScsICdqZGJjLXNoYXJlYWJsZS1wb29sJywgMSk7DQotaW5zZXJ0IGludG8gREVTVFJPWUVEX0lORk8gdmFsdWVzICgndGVzdDExJywgJ2pkYmMtbG9jYWwtcG9vbCcsIDEpOw0KLWluc2VydCBpbnRvIERFU1RST1lFRF9JTkZPIHZhbHVlcyAoJ3Rlc3QxMicsICdqZGJjLXNoYXJlYWJsZS1wb29sJywgMSk7DQotaW5zZXJ0IGludG8gREVTVFJPWUVEX0lORk8gdmFsdWVzICgndGVzdDEyJywgJ2pkYmMtbG9jYWwtcG9vbCcsIDEpOw0KLQ0KLWRyb3AgdGFibGUgb3duZXI7DQotDQotY3JlYXRlIHRhYmxlIG93bmVyICggaWQgaW50ZWdlciwgZGVzY3JpcHRpb24gY2hhcig1MCkpOw0KLQ0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKKworQ1JFQVRFIFRBQkxFIE9fQ3VzdG9tZXIgKGlkIGludGVnZXIgLCBkZXNjcmlwdGlvbiBjaGFyKDUwKSk7CisKK0Ryb3AgdGFibGUgREVTVFJPWUVEX0lORk87CisKK0NSRUFURSBUQUJMRSBERVNUUk9ZRURfSU5GTyAodGVzdF9uYW1lIHZhcmNoYXIoMjApLCBwb29sX25hbWUgdmFyY2hhcigzMCksIG51bV9kZXNfY291bnQgaW50ZWdlcik7CisKK2luc2VydCBpbnRvIERFU1RST1lFRF9JTkZPIHZhbHVlcyAoJ3Rlc3QwJywgJ2pkYmMtdW5zaGFyZWFibGUtcG9vbCcsIDUpOworaW5zZXJ0IGludG8gREVTVFJPWUVEX0lORk8gdmFsdWVzICgndGVzdDInLCAnamRiYy11bnNoYXJlYWJsZS1wb29sJywgNSk7CitpbnNlcnQgaW50byBERVNUUk9ZRURfSU5GTyB2YWx1ZXMgKCd0ZXN0MycsICdqZGJjLXNoYXJlYWJsZS1wb29sJywgNSk7CitpbnNlcnQgaW50byBERVNUUk9ZRURfSU5GTyB2YWx1ZXMgKCd0ZXN0NCcsICdqZGJjLXNoYXJlYWJsZS1wb29sJywgNSk7CitpbnNlcnQgaW50byBERVNUUk9ZRURfSU5GTyB2YWx1ZXMgKCd0ZXN0NScsICdqZGJjLXVuc2hhcmVhYmxlLXBvb2wnLCA1KTsKK2luc2VydCBpbnRvIERFU1RST1lFRF9JTkZPIHZhbHVlcyAoJ3Rlc3Q2JywgJ2pkYmMtdW5zaGFyZWFibGUtcG9vbCcsIDUpOworaW5zZXJ0IGludG8gREVTVFJPWUVEX0lORk8gdmFsdWVzICgndGVzdDcnLCAnamRiYy1zaGFyZWFibGUtcG9vbCcsIDEpOworaW5zZXJ0IGludG8gREVTVFJPWUVEX0lORk8gdmFsdWVzICgndGVzdDgnLCAnamRiYy1zaGFyZWFibGUtcG9vbCcsIDEpOworaW5zZXJ0IGludG8gREVTVFJPWUVEX0lORk8gdmFsdWVzICgndGVzdDknLCAnamRiYy1zaGFyZWFibGUtcG9vbCcsIDEpOworaW5zZXJ0IGludG8gREVTVFJPWUVEX0lORk8gdmFsdWVzICgndGVzdDknLCAnamRiYy1sb2NhbC1wb29sJywgMSk7CitpbnNlcnQgaW50byBERVNUUk9ZRURfSU5GTyB2YWx1ZXMgKCd0ZXN0MTAnLCAnamRiYy1zaGFyZWFibGUtcG9vbCcsIDEpOworaW5zZXJ0IGludG8gREVTVFJPWUVEX0lORk8gdmFsdWVzICgndGVzdDEwJywgJ2pkYmMtbG9jYWwtcG9vbCcsIDEpOworaW5zZXJ0IGludG8gREVTVFJPWUVEX0lORk8gdmFsdWVzICgndGVzdDExJywgJ2pkYmMtc2hhcmVhYmxlLXBvb2wnLCAxKTsKK2luc2VydCBpbnRvIERFU1RST1lFRF9JTkZPIHZhbHVlcyAoJ3Rlc3QxMScsICdqZGJjLWxvY2FsLXBvb2wnLCAxKTsKK2luc2VydCBpbnRvIERFU1RST1lFRF9JTkZPIHZhbHVlcyAoJ3Rlc3QxMicsICdqZGJjLXNoYXJlYWJsZS1wb29sJywgMSk7CitpbnNlcnQgaW50byBERVNUUk9ZRURfSU5GTyB2YWx1ZXMgKCd0ZXN0MTInLCAnamRiYy1sb2NhbC1wb29sJywgMSk7CisKK2Ryb3AgdGFibGUgb3duZXI7CisKK2NyZWF0ZSB0YWJsZSBvd25lciAoIGlkIGludGVnZXIsIGRlc2NyaXB0aW9uIGNoYXIoNTApKTsKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5tYXJrY29ubmVjdGlvbmFzYmFkLnhhL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLm1hcmtjb25uZWN0aW9uYXNiYWQueGEvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAppbmRleCBhNWVhMmY4Li5kODdkNWRlIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLm1hcmtjb25uZWN0aW9uYXNiYWQueGEvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLm1hcmtjb25uZWN0aW9uYXNiYWQueGEvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbApAQCAtMSwyICsxLDIgQEAKLURyb3AgdGFibGUgT19DdXN0b21lcjsNCi1kcm9wIHRhYmxlIG93bmVyOw0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKK2Ryb3AgdGFibGUgb3duZXI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLm5vdHhjb25uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2Yubm90eGNvbm4vYnVpbGQueG1sCmluZGV4IGNlZjQzNmQuLmMxMmZhNDAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2Yubm90eGNvbm4vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2Yubm90eGNvbm4vYnVpbGQueG1sCkBAIC0zMiw4ICszMiw4IEBACiAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9Iioub3V0cHV0Ii8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgICAgICA8cmVjb3JkIG5hbWU9Im5vdHhjb25uLm91dHB1dCIgYWN0aW9uPSJzdGFydCIgLz4KLQkgICAgPGFudCBkaXI9InRlc3QxIiB0YXJnZXQ9ImFsbCIvPgotCSAgICA8YW50IGRpcj0idGVzdDIiIHRhcmdldD0iYWxsIi8+CisgICAgICAgIDxhbnQgZGlyPSJ0ZXN0MSIgdGFyZ2V0PSJhbGwiLz4KKyAgICAgICAgPGFudCBkaXI9InRlc3QyIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8cmVjb3JkIG5hbWU9Im5vdHhjb25uLm91dHB1dCIgYWN0aW9uPSJzdG9wIiAvPgogICAgIDwvdGFyZ2V0PgogCkBAIC00OSw5ICs0OSw5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIHJlY29uZmlnIHRlc3RzKQotCTwvZWNobz4KKyAgICA8ZWNobz4KKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIHJlY29uZmlnIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2Yubm90eGNvbm4vdGVzdDEvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2Yubm90eGNvbm4vdGVzdDEvYnVpbGQucHJvcGVydGllcwppbmRleCBjZjQ2MjVjLi5kZmQxY2EzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLm5vdHhjb25uL3Rlc3QxL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5ub3R4Y29ubi90ZXN0MS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOSArMTUsMTkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImpkYmMtZG1tY2Zub3R4Y29ubiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9Im9yYWNsZS5yZXNvdXJjZS50eXBlIiB2YWx1ZT0iamF2YS5zcWwuRHJpdmVyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLm5vdHhjb25uL3Rlc3QxL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2Yubm90eGNvbm4vdGVzdDEvYnVpbGQueG1sCmluZGV4IDI2OWMyM2IuLjE4Y2VlODEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2Yubm90eGNvbm4vdGVzdDEvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2Yubm90eGNvbm4vdGVzdDEvYnVpbGQueG1sCkBAIC0zMiwxNCArMzIsMTQgQEAKICAgJnRlc3Rwcm9wZXJ0aWVzOwogICAmamRiY0NvbW1vbjsKICAgJmpkYmNDb21tb25Qcm9wczsKLSAgICAKLSAgICAKKworCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImNsZWFuLGJ1aWxkLGRlcGxveSxydW4sdW5kZXBsb3kiLz4KIAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNTEsMjggKzUxLDI4IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgogICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qZGJjLWRyaXZlci1vcmFjbGUtY29tbW9uIj4KLQkgIDxwYXJhbSBuYW1lPSJvcmFjbGUucmVzb3VyY2UudHlwZSIgdmFsdWU9IiR7b3JhY2xlLnJlc291cmNlLnR5cGV9Ii8+CisgICAgICA8cGFyYW0gbmFtZT0ib3JhY2xlLnJlc291cmNlLnR5cGUiIHZhbHVlPSIke29yYWNsZS5yZXNvdXJjZS50eXBlfSIvPgogICAgICAgPC9hbnRjYWxsPgogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLW9yYWNsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1vcmFjbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCIvPgpAQCAtODAsNyArODAsNyBAQAogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWpkYmMtb3JhY2xlLWNvbW1vbiIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5ub3R4Y29ubi90ZXN0MS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5ub3R4Y29ubi90ZXN0MS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IGNjOWIwZTguLmExYWE3MjkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2Yubm90eGNvbm4vdGVzdDEvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLm5vdHhjb25uL3Rlc3QxL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTQ5LDYgKzQ5LDYgQEAKICAgICAgIDx0cmFucy1hdHRyaWJ1dGU+UmVxdWlyZWQ8L3RyYW5zLWF0dHJpYnV0ZT4KICAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4KICA8L2Fzc2VtYmx5LWRlc2NyaXB0b3I+Ci0gICAgICAKKwogPC9lamItamFyPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLm5vdHhjb25uL3Rlc3QxL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5ub3R4Y29ubi90ZXN0MS9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAppbmRleCBhZmEwMjA3Li5iMGQ2MzFhIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLm5vdHhjb25uL3Rlc3QxL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2Yubm90eGNvbm4vdGVzdDEvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKQEAgLTI4LDEwICsyOCwxMCBAQAogICAgICAgPHJlc291cmNlLXJlZj4KICAgICAgICAgPHJlcy1yZWYtbmFtZT5EYXRhU291cmNlPC9yZXMtcmVmLW5hbWU+CiAgICAgICAgIDxqbmRpLW5hbWU+amRiYy9vcmFjbGVyZXM8L2puZGktbmFtZT4KLQk8ZGVmYXVsdC1yZXNvdXJjZS1wcmluY2lwYWw+Ci0JICA8bmFtZT5zY290dDwvbmFtZT4KLQkgIDxwYXNzd29yZD50aWdlcjwvcGFzc3dvcmQ+Ci0JPC9kZWZhdWx0LXJlc291cmNlLXByaW5jaXBhbD4KKyAgICA8ZGVmYXVsdC1yZXNvdXJjZS1wcmluY2lwYWw+CisgICAgICA8bmFtZT5zY290dDwvbmFtZT4KKyAgICAgIDxwYXNzd29yZD50aWdlcjwvcGFzc3dvcmQ+CisgICAgPC9kZWZhdWx0LXJlc291cmNlLXByaW5jaXBhbD4KICAgICAgIDwvcmVzb3VyY2UtcmVmPgogICAgIDwvZWpiPgogIDwvZW50ZXJwcmlzZS1iZWFucz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2Yubm90eGNvbm4vdGVzdDEvZWpiL1NpbXBsZVNlc3Npb25CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLm5vdHhjb25uL3Rlc3QxL2VqYi9TaW1wbGVTZXNzaW9uQmVhbi5qYXZhCmluZGV4IDYxOWZmOGMuLjc2N2Q1MjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2Yubm90eGNvbm4vdGVzdDEvZWpiL1NpbXBsZVNlc3Npb25CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5ub3R4Y29ubi90ZXN0MS9lamIvU2ltcGxlU2Vzc2lvbkJlYW4uamF2YQpAQCAtNTYsMjcgKzU2LDI3IEBACiAgICAgICAgICAgICBkcyA9IChjb20uc3VuLmFwcHNlcnYuamRiYy5EYXRhU291cmNlKSBpY18ubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKIAogICAgICAgICAgICAgVXNlclRyYW5zYWN0aW9uIHR4ID0oVXNlclRyYW5zYWN0aW9uKWN0eHRfLmdldFVzZXJUcmFuc2FjdGlvbigpOwotCSAgICAgIHR4LmJlZ2luKCk7CisgICAgICAgICAgdHguYmVnaW4oKTsKICAgICAgICAgICAgIGNvbm4gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JICAgICAgbm9UeENvbm4gPSBkcy5nZXROb25UeENvbm5lY3Rpb24oKTsKKyAgICAgICAgICBub1R4Q29ubiA9IGRzLmdldE5vblR4Q29ubmVjdGlvbigpOwogICAgICAgICAgICAgc3RtdCA9IGNvbm4uY3JlYXRlU3RhdGVtZW50KCk7Ci0JICAgICAgc3RtdC5leGVjdXRlVXBkYXRlKCJJTlNFUlQgSU5UTyBOT1RYQ09OTlRBQkxFIFZBTFVFUygnbWV0aG9kMScsMykiKTsKKyAgICAgICAgICBzdG10LmV4ZWN1dGVVcGRhdGUoIklOU0VSVCBJTlRPIE5PVFhDT05OVEFCTEUgVkFMVUVTKCdtZXRob2QxJywzKSIpOwogICAgICAgICAgICAgU3RyaW5nIHF1ZXJ5MSA9ICJTRUxFQ1QgKiBGUk9NIE5PVFhDT05OVEFCTEUiOwogICAgICAgICAgICAgcnMgPSBzdG10LmV4ZWN1dGVRdWVyeShxdWVyeTEpOwotCSAgICAgIHN0bXQyID0gbm9UeENvbm4uY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgICAgc3RtdDIgPSBub1R4Q29ubi5jcmVhdGVTdGF0ZW1lbnQoKTsKICAgICAgICAgICAgIHJzMiA9IHN0bXQyLmV4ZWN1dGVRdWVyeSgiU0VMRUNUICogRlJPTSBOT1RYQ09OTlRBQkxFIik7Ci0JICAgCisKICAgICAgICAgICAgIGlmICggcnMyLm5leHQoKSApIHsKLQkgICAgICAgIHJldHVybiBmYWxzZTsKLQkgICAgICB9Ci0gICAgICAgICAgICAKLQkgICAgICB0eC5jb21taXQoKTsKLQkgICAgICByZXR1cm4gdHJ1ZTsKLQkgICAgCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgfQorCisgICAgICAgICAgdHguY29tbWl0KCk7CisgICAgICAgICAgcmV0dXJuIHRydWU7CisKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYXVnaHQgRXhjZXB0aW9uLS0tIik7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYXVnaHQgRXhjZXB0aW9uLS0tIik7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIGlmIChycyAhPSBudWxsICkgewogICAgICAgICAgICAgICAgIHRyeSB7IHJzLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KQEAgLTg3LDcyICs4Nyw3MiBAQAogICAgICAgICAgICAgaWYgKGNvbm4gIT0gbnVsbCApIHsKICAgICAgICAgICAgICAgICB0cnkge2Nvbm4uY2xvc2UoKTt9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAJCisKICAgICAgICAgICAgIGlmIChyczIgIT0gbnVsbCApIHsKICAgICAgICAgICAgICAgICB0cnkge3JzMi5jbG9zZSgpO30gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoc3RtdDIgIT0gbnVsbCApIHsKICAgICAgICAgICAgICAgICB0cnkge3N0bXQyLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAkJCisKICAgICAgICAgICAgIGlmIChub1R4Q29ubiAhPSBudWxsICkgewogICAgICAgICAgICAgICAgIHRyeSB7IG5vVHhDb25uLmNsb3NlKCk7IH1jYXRjaCggRXhjZXB0aW9uIGUxKSB7fQogICAgICAgICAgICAgfQotCX0KKyAgICB9CiAKLSAgICAgICAgCisKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MigpIHRocm93cyBFeGNlcHRpb24gewotCUNvbm5lY3Rpb24gY29ubiA9IG51bGw7Ci0JQ29ubmVjdGlvbiBub1R4Q29ubiA9IG51bGw7CisgICAgQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKKyAgICBDb25uZWN0aW9uIG5vVHhDb25uID0gbnVsbDsKIAogICAgICAgICB0cnkgewogCiAgICAgICAgICAgICBkcyA9IChjb20uc3VuLmFwcHNlcnYuamRiYy5EYXRhU291cmNlKWljXy5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZSIpOwogCiAgICAgICAgICAgICBVc2VyVHJhbnNhY3Rpb24gdHggPShVc2VyVHJhbnNhY3Rpb24pY3R4dF8uZ2V0VXNlclRyYW5zYWN0aW9uKCk7Ci0JICAgICAgdHguYmVnaW4oKTsKKyAgICAgICAgICB0eC5iZWdpbigpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHZXR0aW5nIFRSQU5TQUNUSU9OQUwgY29ubmVjdGlvbiIpOwogICAgICAgICAgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQXV0b2NvbW1pdCA9PiAiICsgY29ubi5nZXRBdXRvQ29tbWl0KCkpOwogCi0JICAgICAgaWYgKGNvbm4uZ2V0QXV0b0NvbW1pdCgpID09IHRydWUgKSB7Ci0JICAgICAgICAgIHJldHVybiBmYWxzZTsKLQkgICAgICB9CisgICAgICAgICAgaWYgKGNvbm4uZ2V0QXV0b0NvbW1pdCgpID09IHRydWUgKSB7CisgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICB9CiAKLQkgICAgICBjb25uLmNsb3NlKCk7Ci0JICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyMDsgaSsrICkgewotCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJHZXR0aW5nIE5vblR4IGNvbm5lY3Rpb24iKTsKLQkgICAgICAgICAgbm9UeENvbm4gPSAoKGNvbS5zdW4uYXBwc2Vydi5qZGJjLkRhdGFTb3VyY2UpZHMpLmdldE5vblR4Q29ubmVjdGlvbigpOwotICAJCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkF1dG9jb21taXQgPT4gIiArIG5vVHhDb25uLmdldEF1dG9Db21taXQoKSk7Ci0JCSAgICBpZiAobm9UeENvbm4uZ2V0QXV0b0NvbW1pdCgpID09IGZhbHNlICkgewotCSAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwkKLQkJICAgIH0KLQkJICAgIG5vVHhDb25uLmNsb3NlKCk7Ci0JICAgICAgfQorICAgICAgICAgIGNvbm4uY2xvc2UoKTsKKyAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDIwOyBpKysgKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdldHRpbmcgTm9uVHggY29ubmVjdGlvbiIpOworICAgICAgICAgICAgICBub1R4Q29ubiA9ICgoY29tLnN1bi5hcHBzZXJ2LmpkYmMuRGF0YVNvdXJjZSlkcykuZ2V0Tm9uVHhDb25uZWN0aW9uKCk7CisgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQXV0b2NvbW1pdCA9PiAiICsgbm9UeENvbm4uZ2V0QXV0b0NvbW1pdCgpKTsKKyAgICAgICAgICAgIGlmIChub1R4Q29ubi5nZXRBdXRvQ29tbWl0KCkgPT0gZmFsc2UgKSB7CisgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBub1R4Q29ubi5jbG9zZSgpOworICAgICAgICAgIH0KICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR2V0dGluZyBUUkFOU0FDVElPTkFMIGNvbm5lY3Rpb24iKTsKICAgICAgICAgICAgIGNvbm4gPSBkcy5nZXRDb25uZWN0aW9uKCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkF1dG9jb21taXQgPT4gIiArIGNvbm4uZ2V0QXV0b0NvbW1pdCgpKTsKLQkgICAgICBpZiAoY29ubi5nZXRBdXRvQ29tbWl0KCkgPT0gdHJ1ZSApIHsKLQkgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCSAgICAgIH0KLQkgICAgICBjb25uLmNsb3NlKCk7Ci0JICAgICAgdHguY29tbWl0KCk7CisgICAgICAgICAgaWYgKGNvbm4uZ2V0QXV0b0NvbW1pdCgpID09IHRydWUgKSB7CisgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICB9CisgICAgICAgICAgY29ubi5jbG9zZSgpOworICAgICAgICAgIHR4LmNvbW1pdCgpOwogCi0JICAgICAgcmV0dXJuIHRydWU7Ci0JICAgIAorICAgICAgICAgIHJldHVybiB0cnVlOworCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2F1Z2h0IEV4Y2VwdGlvbi0tLSIpOwotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2F1Z2h0IEV4Y2VwdGlvbi0tLSIpOworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0gZmluYWxseSB7Ci0JICAgIHRyeSB7Ci0JCWlmIChub1R4Q29ubiAhPSBudWxsICkgewotCQkgICAgbm9UeENvbm4uY2xvc2UoKTsKLQkJfQotCSAgICB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQotCX0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgaWYgKG5vVHhDb25uICE9IG51bGwgKSB7CisgICAgICAgICAgICBub1R4Q29ubi5jbG9zZSgpOworICAgICAgICB9CisgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9CisgICAgfQogCiAKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLm5vdHhjb25uL3Rlc3QxL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2Yubm90eGNvbm4vdGVzdDEvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IDAwZWI5NmMuLjJkM2QxYTIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2Yubm90eGNvbm4vdGVzdDEvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2Yubm90eGNvbm4vdGVzdDEvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDUgKzEsNSBAQAotRFJPUCBUQUJMRSBOT1RYQ09OTlRBQkxFOw0KLUNSRUFURSBUQUJMRSBOT1RYQ09OTlRBQkxFKA0KLSAgICBuYW1lIGNoYXIoMjApLCANCi0gICAgbnVtIGludGVnZXINCi0pOw0KK0RST1AgVEFCTEUgTk9UWENPTk5UQUJMRTsKK0NSRUFURSBUQUJMRSBOT1RYQ09OTlRBQkxFKAorICAgIG5hbWUgY2hhcigyMCksCisgICAgbnVtIGludGVnZXIKKyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLm5vdHhjb25uL3Rlc3QxL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLm5vdHhjb25uL3Rlc3QxL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggMDM0OTBkMC4uNzYyYTBmNiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5ub3R4Y29ubi90ZXN0MS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2Yubm90eGNvbm4vdGVzdDEvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbApAQCAtMSArMSBAQAotRHJvcCB0YWJsZSBOT1RYQ09OTlRBQkxFOw0KK0Ryb3AgdGFibGUgTk9UWENPTk5UQUJMRTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2Yubm90eGNvbm4vdGVzdDIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2Yubm90eGNvbm4vdGVzdDIvYnVpbGQucHJvcGVydGllcwppbmRleCBjZjQ2MjVjLi5kZmQxY2EzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLm5vdHhjb25uL3Rlc3QyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5ub3R4Y29ubi90ZXN0Mi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOSArMTUsMTkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImpkYmMtZG1tY2Zub3R4Y29ubiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9Im9yYWNsZS5yZXNvdXJjZS50eXBlIiB2YWx1ZT0iamF2YS5zcWwuRHJpdmVyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLm5vdHhjb25uL3Rlc3QyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2Yubm90eGNvbm4vdGVzdDIvYnVpbGQueG1sCmluZGV4IDI2OWMyM2IuLjE4Y2VlODEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2Yubm90eGNvbm4vdGVzdDIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2Yubm90eGNvbm4vdGVzdDIvYnVpbGQueG1sCkBAIC0zMiwxNCArMzIsMTQgQEAKICAgJnRlc3Rwcm9wZXJ0aWVzOwogICAmamRiY0NvbW1vbjsKICAgJmpkYmNDb21tb25Qcm9wczsKLSAgICAKLSAgICAKKworCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImNsZWFuLGJ1aWxkLGRlcGxveSxydW4sdW5kZXBsb3kiLz4KIAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNTEsMjggKzUxLDI4IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgogICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qZGJjLWRyaXZlci1vcmFjbGUtY29tbW9uIj4KLQkgIDxwYXJhbSBuYW1lPSJvcmFjbGUucmVzb3VyY2UudHlwZSIgdmFsdWU9IiR7b3JhY2xlLnJlc291cmNlLnR5cGV9Ii8+CisgICAgICA8cGFyYW0gbmFtZT0ib3JhY2xlLnJlc291cmNlLnR5cGUiIHZhbHVlPSIke29yYWNsZS5yZXNvdXJjZS50eXBlfSIvPgogICAgICAgPC9hbnRjYWxsPgogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLW9yYWNsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1vcmFjbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCIvPgpAQCAtODAsNyArODAsNyBAQAogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWpkYmMtb3JhY2xlLWNvbW1vbiIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5ub3R4Y29ubi90ZXN0Mi9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5ub3R4Y29ubi90ZXN0Mi9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IDJlMDk1NjcuLmZmYjk4MTcgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2Yubm90eGNvbm4vdGVzdDIvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLm5vdHhjb25uL3Rlc3QyL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTQ5LDYgKzQ5LDYgQEAKICAgICAgIDx0cmFucy1hdHRyaWJ1dGU+UmVxdWlyZWQ8L3RyYW5zLWF0dHJpYnV0ZT4KICAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4KICA8L2Fzc2VtYmx5LWRlc2NyaXB0b3I+LS0+Ci0gICAgICAKKwogPC9lamItamFyPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLm5vdHhjb25uL3Rlc3QyL2VqYi9TaW1wbGVTZXNzaW9uQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5ub3R4Y29ubi90ZXN0Mi9lamIvU2ltcGxlU2Vzc2lvbkJlYW4uamF2YQppbmRleCAzZTZjOGI5Li4yMTVmYjhlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLm5vdHhjb25uL3Rlc3QyL2VqYi9TaW1wbGVTZXNzaW9uQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2Yubm90eGNvbm4vdGVzdDIvZWpiL1NpbXBsZVNlc3Npb25CZWFuLmphdmEKQEAgLTU2LDI4ICs1NiwyOCBAQAogICAgICAgICAgICAgZHMgPSAoY29tLnN1bi5hcHBzZXJ2LmpkYmMuRGF0YVNvdXJjZSkgaWNfLmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7CiAKICAgICAgICAgICAgIFVzZXJUcmFuc2FjdGlvbiB0eCA9KFVzZXJUcmFuc2FjdGlvbiljdHh0Xy5nZXRVc2VyVHJhbnNhY3Rpb24oKTsKLQkgICAgICB0eC5iZWdpbigpOworICAgICAgICAgIHR4LmJlZ2luKCk7CiAgICAgICAgICAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigic2NvdHQiLCAidGlnZXIiKTsKICAgICAgICAgICAgIHN0bXQgPSBjb25uLmNyZWF0ZVN0YXRlbWVudCgpOwotCSAgICAgIHN0bXQuZXhlY3V0ZVVwZGF0ZSgiSU5TRVJUIElOVE8gTk9UWENPTk5UQUJMRSBWQUxVRVMoJ21ldGhvZDEnLDMpIik7CisgICAgICAgICAgc3RtdC5leGVjdXRlVXBkYXRlKCJJTlNFUlQgSU5UTyBOT1RYQ09OTlRBQkxFIFZBTFVFUygnbWV0aG9kMScsMykiKTsKICAgICAgICAgICAgIFN0cmluZyBxdWVyeTEgPSAiU0VMRUNUICogRlJPTSBOT1RYQ09OTlRBQkxFIjsKICAgICAgICAgICAgIHJzID0gc3RtdC5leGVjdXRlUXVlcnkocXVlcnkxKTsKLQkgICAgICBub1R4Q29ubiA9ICgoY29tLnN1bi5hcHBzZXJ2LmpkYmMuRGF0YVNvdXJjZSlkcykuZ2V0Tm9uVHhDb25uZWN0aW9uKCJzY290dCIsICJ0aWdlciIpOworICAgICAgICAgIG5vVHhDb25uID0gKChjb20uc3VuLmFwcHNlcnYuamRiYy5EYXRhU291cmNlKWRzKS5nZXROb25UeENvbm5lY3Rpb24oInNjb3R0IiwgInRpZ2VyIik7CiAKLQkgICAgICBzdG10MiA9IG5vVHhDb25uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICAgIHN0bXQyID0gbm9UeENvbm4uY3JlYXRlU3RhdGVtZW50KCk7CiAgICAgICAgICAgICByczIgPSBzdG10Mi5leGVjdXRlUXVlcnkoIlNFTEVDVCAqIEZST00gTk9UWENPTk5UQUJMRSIpOwotCSAgICAgIHR4LmNvbW1pdCgpOworICAgICAgICAgIHR4LmNvbW1pdCgpOwogICAgICAgICAgICAgaWYgKCByczIubmV4dCgpICkgewotCSAgICAgICAgcmV0dXJuIGZhbHNlOwotCSAgICAgIH0KLSAgICAgICAgICAgIAotCSAgICAgIAotCSAgICAgIHJldHVybiB0cnVlOwotCSAgICAKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICB9CisKKworICAgICAgICAgIHJldHVybiB0cnVlOworCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2F1Z2h0IEV4Y2VwdGlvbi0tLSIpOwotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2F1Z2h0IEV4Y2VwdGlvbi0tLSIpOworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICBpZiAocnMgIT0gbnVsbCApIHsKICAgICAgICAgICAgICAgICB0cnkgeyBycy5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CkBAIC04OCwyMCArODgsMjAgQEAKICAgICAgICAgICAgIGlmIChjb25uICE9IG51bGwgKSB7CiAgICAgICAgICAgICAgICAgdHJ5IHtjb25uLmNsb3NlKCk7fSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQogICAgICAgICAgICAgfQotICAgICAgICAgICAgCQorCiAgICAgICAgICAgICBpZiAocnMyICE9IG51bGwgKSB7CiAgICAgICAgICAgICAgICAgdHJ5IHtyczIuY2xvc2UoKTt9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHN0bXQyICE9IG51bGwgKSB7CiAgICAgICAgICAgICAgICAgdHJ5IHtzdG10Mi5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAJCQorCiAgICAgICAgICAgICBpZiAobm9UeENvbm4gIT0gbnVsbCApIHsKICAgICAgICAgICAgICAgICB0cnkgeyBub1R4Q29ubi5jbG9zZSgpOyB9Y2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KICAgICAgICAgICAgIH0KLQl9CisgICAgfQogCi0gICAgICAgIAorCiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2Yubm90eGNvbm4vdGVzdDIvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5ub3R4Y29ubi90ZXN0Mi9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggMDBlYjk2Yy4uMmQzZDFhMiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5ub3R4Y29ubi90ZXN0Mi9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5ub3R4Y29ubi90ZXN0Mi9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsNSArMSw1IEBACi1EUk9QIFRBQkxFIE5PVFhDT05OVEFCTEU7DQotQ1JFQVRFIFRBQkxFIE5PVFhDT05OVEFCTEUoDQotICAgIG5hbWUgY2hhcigyMCksIA0KLSAgICBudW0gaW50ZWdlcg0KLSk7DQorRFJPUCBUQUJMRSBOT1RYQ09OTlRBQkxFOworQ1JFQVRFIFRBQkxFIE5PVFhDT05OVEFCTEUoCisgICAgbmFtZSBjaGFyKDIwKSwKKyAgICBudW0gaW50ZWdlcgorKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2Yubm90eGNvbm4vdGVzdDIvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2Yubm90eGNvbm4vdGVzdDIvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAppbmRleCAwMzQ5MGQwLi43NjJhMGY2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmLm5vdHhjb25uL3Rlc3QyL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi5ub3R4Y29ubi90ZXN0Mi9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xICsxIEBACi1Ecm9wIHRhYmxlIE5PVFhDT05OVEFCTEU7DQorRHJvcCB0YWJsZSBOT1RYQ09OTlRBQkxFOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDA0OTI3N2YuLjkyYWQ5NTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2YvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE4ICsxNSwxOCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iamRiYy1kbW1jZiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmL2J1aWxkLnhtbAppbmRleCA2YjhjNDE1Li42ZmY1ODljIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmL2J1aWxkLnhtbApAQCAtMzIsMTQgKzMyLDE0IEBACiAgICAgJnJ1bjsKIAogICAgIDxwcm9wZXJ0eSBuYW1lPSJleGVjdXRpb24ubW9kZSIgdmFsdWU9InBlIi8+Ci0gICAgCi0gICAgCisKKwogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCxkZXBsb3kscnVuLHVuZGVwbG95Ii8+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTUxLDEzICs1MSwxMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqLyouY2xhc3MiIC8+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1kcml2ZXItY29ubnBvb2wtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1kcml2ZXItcG9vbCIvPgpAQCAtNjcsMjkgKzY3LDI5IEBACiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1kcml2ZXItcG9vbCIvPgotCTxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2RyaXZlclJlcyIvPgorICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2RyaXZlclJlcyIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJqZGJjLWRyaXZlci1wb29sIi8+Ci0JPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvZHJpdmVyUmVzMSIvPgorICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2RyaXZlclJlczEiLz4KICAgICAgIDwvYW50Y2FsbD4KIAotCTxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgorICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgotCQkgICAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLWRyaXZlci1wb29sLnByb3BlcnR5LlVSTD1qZGJjOmRlcmJ5Oi8vbG9jYWxob3N0OjE1MjcvdGVzdGRiO3VzZXI9ZGJ1c2VyO3Bhc3N3b3JkPWRicGFzc3dvcmQiLz4KKyAgICAgICAgICAgIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy1kcml2ZXItcG9vbC5wcm9wZXJ0eS5VUkw9amRiYzpkZXJieTovL2xvY2FsaG9zdDoxNTI3L3Rlc3RkYjt1c2VyPWRidXNlcjtwYXNzd29yZD1kYnBhc3N3b3JkIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9wb2ludGJhc2Uuc3FsIi8+CkBAIC05OCw3ICs5OCw3IEBACiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2RyaXZlclJlcyIvPgogICAgICAgPC9hbnRjYWxsPgotICAgICAgCisKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvZHJpdmVyUmVzMSIvPgogICAgICAgPC9hbnRjYWxsPgpAQCAtMTA2LDkgKzEwNiw5IEBACiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtZHJpdmVyLXBvb2wiLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICAgIAorCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2YvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDRkYjFlNjkuLjU3MGZhNjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2YvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2YvY2xpZW50L0NsaWVudC5qYXZhCkBAIC03NCw3ICs3NCw3IEBACiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIHRlc3Q2IDogIiwgc3RhdC5GQUlMKTsKICAgICAgICAgfQotICAgICAKKwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2YvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2YvZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCA1MzE0NjNiLi41ZDQxNDNiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC00OSwxMSArNDksMTEgQEAKICAgICAgIDx0cmFuc2FjdGlvbi10eXBlPkNvbnRhaW5lcjwvdHJhbnNhY3Rpb24tdHlwZT4KICAgICAgIDxlamItcmVmPgogICAgICAgICA8ZGVzY3JpcHRpb24+PC9kZXNjcmlwdGlvbj4KLQk8ZWpiLXJlZi1uYW1lPmVqYi9TaW1wbGVTZXNzaW9uMkVKQjwvZWpiLXJlZi1uYW1lPgotCTxlamItcmVmLXR5cGU+U2Vzc2lvbjwvZWpiLXJlZi10eXBlPgorICAgIDxlamItcmVmLW5hbWU+ZWpiL1NpbXBsZVNlc3Npb24yRUpCPC9lamItcmVmLW5hbWU+CisgICAgPGVqYi1yZWYtdHlwZT5TZXNzaW9uPC9lamItcmVmLXR5cGU+CiAgICAgICAgIDxob21lPmNvbS5zdW4uczFhc2Rldi5qZGJjLmRtbWNmLmVqYi5TaW1wbGVTZXNzaW9uMkhvbWU8L2hvbWU+CiAgICAgICAgIDxyZW1vdGU+Y29tLnN1bi5zMWFzZGV2LmpkYmMuZG1tY2YuZWpiLlNpbXBsZVNlc3Npb24yPC9yZW1vdGU+Ci0JPGVqYi1saW5rPlNpbXBsZVNlc3Npb24yRUpCPC9lamItbGluaz4KKyAgICA8ZWpiLWxpbms+U2ltcGxlU2Vzc2lvbjJFSkI8L2VqYi1saW5rPgogICAgICAgPC9lamItcmVmPgogICAgICAgPHJlc291cmNlLXJlZj4KICAgICAgICAgPHJlcy1yZWYtbmFtZT5EYXRhU291cmNlPC9yZXMtcmVmLW5hbWU+CkBAIC05NCw2ICs5NCw2IEBACiAgICAgICA8dHJhbnMtYXR0cmlidXRlPlJlcXVpcmVzTmV3PC90cmFucy1hdHRyaWJ1dGU+CiAgICAgPC9jb250YWluZXItdHJhbnNhY3Rpb24+CiAgPC9hc3NlbWJseS1kZXNjcmlwdG9yPgotICAgICAgCisKIDwvZWpiLWphcj4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi9lamIvU2ltcGxlU2Vzc2lvbjJCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmL2VqYi9TaW1wbGVTZXNzaW9uMkJlYW4uamF2YQppbmRleCBhNTEwZGU0Li4yMzU5M2U2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmL2VqYi9TaW1wbGVTZXNzaW9uMkJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmL2VqYi9TaW1wbGVTZXNzaW9uMkJlYW4uamF2YQpAQCAtMjgsMTQgKzI4LDE0IEBACiB7CiAKICAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IGN0eHRfOwotICAgIHByaXZhdGUgSW5pdGlhbENvbnRleHQgaWNfOyAKKyAgICBwcml2YXRlIEluaXRpYWxDb250ZXh0IGljXzsKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgIGN0eHRfID0gY29udGV4dDsKLQl0cnkgewotCSAgICBpY18gPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQl9IGNhdGNoKCBOYW1pbmdFeGNlcHRpb24gbmUgKSB7Ci0JICAgIG5lLnByaW50U3RhY2tUcmFjZSgpOwotCX0KKyAgICB0cnkgeworICAgICAgICBpY18gPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICB9IGNhdGNoKCBOYW1pbmdFeGNlcHRpb24gbmUgKSB7CisgICAgICAgIG5lLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsKQEAgLTQ0LDU3ICs0NCw1NyBAQAogICAgIC8qKgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIHRlc3QxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKWljXy5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZTIiKTsKLQlDb25uZWN0aW9uIGNvbm4xID0gbnVsbDsKLQlTdGF0ZW1lbnQgc3RtdDEgPSBudWxsOwotCVJlc3VsdFNldCByczEgPSBudWxsOwotCWJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CisgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKWljXy5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZTIiKTsKKyAgICBDb25uZWN0aW9uIGNvbm4xID0gbnVsbDsKKyAgICBTdGF0ZW1lbnQgc3RtdDEgPSBudWxsOworICAgIFJlc3VsdFNldCByczEgPSBudWxsOworICAgIGJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CiAKLQl0cnkgewotCSAgICBjb25uMSA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQkgICAgc3RtdDEgPSBjb25uMS5jcmVhdGVTdGF0ZW1lbnQoKTsKLQkgICAgc3RtdDEuZXhlY3V0ZVVwZGF0ZSggIlVQREFURSBDT05OU0hBUklORyBTRVQgY19waG9uZT0nQ09OTl9TSEFSSU5HX0JFQU5fMicgV0hFUkUgY19pZD0xMDAiKTsKKyAgICB0cnkgeworICAgICAgICBjb25uMSA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgc3RtdDEgPSBjb25uMS5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgc3RtdDEuZXhlY3V0ZVVwZGF0ZSggIlVQREFURSBDT05OU0hBUklORyBTRVQgY19waG9uZT0nQ09OTl9TSEFSSU5HX0JFQU5fMicgV0hFUkUgY19pZD0xMDAiKTsKIAotCSAgICByZXR1cm4gdHJ1ZTsKLQl9IGNhdGNoKCBTUUxFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICByZXR1cm4gZmFsc2U7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKHN0bXQxICE9IG51bGwpIHsgCi0JICAgICAgICB0cnkgeyBzdG10MS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQotCSAgICB9Ci0JICAgIGlmIChjb25uMSAhPSBudWxsKSB7IAotCSAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KLQkgICAgfQotCX0KLQkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSBjYXRjaCggU1FMRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmIChzdG10MSAhPSBudWxsKSB7CisgICAgICAgICAgICB0cnkgeyBzdG10MS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQorICAgICAgICB9CisgICAgICAgIGlmIChjb25uMSAhPSBudWxsKSB7CisgICAgICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQorICAgICAgICB9CiAgICAgfQotICAgICAKKworICAgIH0KKwogICAgIHB1YmxpYyBib29sZWFuIHRlc3QyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKWljXy5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZTIiKTsKLQlDb25uZWN0aW9uIGNvbm4xID0gbnVsbDsKLQlTdGF0ZW1lbnQgc3RtdDEgPSBudWxsOwotCVJlc3VsdFNldCByczEgPSBudWxsOwotCWJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CisgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKWljXy5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZTIiKTsKKyAgICBDb25uZWN0aW9uIGNvbm4xID0gbnVsbDsKKyAgICBTdGF0ZW1lbnQgc3RtdDEgPSBudWxsOworICAgIFJlc3VsdFNldCByczEgPSBudWxsOworICAgIGJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CiAKLQl0cnkgewotCSAgICBjb25uMSA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQkgICAgc3RtdDEgPSBjb25uMS5jcmVhdGVTdGF0ZW1lbnQoKTsKLQkgICAgc3RtdDEuZXhlY3V0ZVVwZGF0ZSggIlVQREFURSBDT05OU0hBUklORyBTRVQgY19waG9uZT0nQ09OTl9TSEFSSU5HX0JFQU5fMl8yJyBXSEVSRSBjX2lkPTIwMCIpOworICAgIHRyeSB7CisgICAgICAgIGNvbm4xID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICBzdG10MSA9IGNvbm4xLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICBzdG10MS5leGVjdXRlVXBkYXRlKCAiVVBEQVRFIENPTk5TSEFSSU5HIFNFVCBjX3Bob25lPSdDT05OX1NIQVJJTkdfQkVBTl8yXzInIFdIRVJFIGNfaWQ9MjAwIik7CiAKLQkgICAgcmV0dXJuIHRydWU7Ci0JfSBjYXRjaCggU1FMRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgcmV0dXJuIGZhbHNlOwotCX0gZmluYWxseSB7Ci0JICAgIGlmIChzdG10MSAhPSBudWxsKSB7IAotCSAgICAgICAgdHJ5IHsgc3RtdDEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KLQkgICAgfQotCSAgICBpZiAoY29ubjEgIT0gbnVsbCkgeyAKLQkgICAgICAgIHRyeSB7IGNvbm4xLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9Ci0JICAgIH0KLQl9Ci0JCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gY2F0Y2goIFNRTEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBpZiAoc3RtdDEgIT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsgc3RtdDEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KKyAgICAgICAgfQorICAgICAgICBpZiAoY29ubjEgIT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KKyAgICAgICAgfQorICAgIH0KKwogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIHRlc3QzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2Yvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IDhjYjMxNzQuLjcyMWQ5ZTggMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2Yvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2Yvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDYgKzEsNiBAQAotRHJvcCB0YWJsZSBDT05OU0hBUklORzsNCi0NCi1DUkVBVEUgVEFCTEUgQ09OTlNIQVJJTkcgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBjb25zdHJhaW50IHBrX2tleSBwcmltYXJ5IGtleSwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMjUpDQotKTsNCitEcm9wIHRhYmxlIENPTk5TSEFSSU5HOworCitDUkVBVEUgVEFCTEUgQ09OTlNIQVJJTkcgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIGNvbnN0cmFpbnQgcGtfa2V5IHByaW1hcnkga2V5LAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDI1KQorKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2Yvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZG1tY2Yvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAppbmRleCBjMjgxN2Y2Li43N2QxZDVhIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2RtbWNmL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9kbW1jZi9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xICsxIEBACi1Ecm9wIHRhYmxlIENPTk5TSEFSSU5HOw0KK0Ryb3AgdGFibGUgQ09OTlNIQVJJTkc7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2ZldGNob3V0b2ZzZXEvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZmV0Y2hvdXRvZnNlcS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDViYmExZWMuLmU4N2VmMDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZmV0Y2hvdXRvZnNlcS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZmV0Y2hvdXRvZnNlcS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOSArMTUsMTkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImpkYmMtZmV0Y2hvdXRvZnNlcSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iMTIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZmV0Y2hvdXRvZnNlcS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2ZldGNob3V0b2ZzZXEvYnVpbGQueG1sCmluZGV4IDY3YjJiNGUuLmFhOTljMmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZmV0Y2hvdXRvZnNlcS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9mZXRjaG91dG9mc2VxL2J1aWxkLnhtbApAQCAtNDAsNyArNDAsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNTIsMTMgKzUyLDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi9TaW1wbGVCTVAuY2xhc3MsICoqL1NpbXBsZUJNUEhvbWUuY2xhc3MsKiovKkNsaWVudCouY2xhc3MiIC8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtb3JhY2xlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgpAQCAtNjYsMTQgKzY2LDE0IEBACiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qZGJjLW9yYWNsZS1jb21tb24iLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtb3JhY2xlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLW9yYWNsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9wb2ludGJhc2Uuc3FsIi8+CkBAIC04MSw3ICs4MSw3IEBACiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamRiYy1vcmFjbGUtY29tbW9uIi8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2ZldGNob3V0b2ZzZXEvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9mZXRjaG91dG9mc2VxL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQppbmRleCAyOGE3YzQwLi5mNzg1ZWZiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2ZldGNob3V0b2ZzZXEvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZmV0Y2hvdXRvZnNlcS9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKQEAgLTI5LDMxICsyOSwzMSBAQAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogCi0gCVNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOwotCVN0cmluZyB0ZXN0U3VpdGUgPSAiamRiY2ZldGNob3V0b2ZzZXEgIjsKKyAgICAgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCk7CisgICAgU3RyaW5nIHRlc3RTdWl0ZSA9ICJqZGJjZmV0Y2hvdXRvZnNlcSAiOwogCiAgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgIE9iamVjdCBvYmpSZWYgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZUJNUEhvbWUiKTsKLQlTaW1wbGVCTVBIb21lIHNpbXBsZUJNUEhvbWUgPSAoU2ltcGxlQk1QSG9tZSkKKyAgICBTaW1wbGVCTVBIb21lIHNpbXBsZUJNUEhvbWUgPSAoU2ltcGxlQk1QSG9tZSkKICAgICAgICAgamF2YXgucm1pLlBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpSZWYsIFNpbXBsZUJNUEhvbWUuY2xhc3MpOwogCiAgICAgICAgIFNpbXBsZUJNUCBzaW1wbGVCTVAgPSBzaW1wbGVCTVBIb21lLmNyZWF0ZSgpOwogCiAgICAgICAgIGlmICggc2ltcGxlQk1QLnRlc3QxKCkgKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDEgOiAiLCBzdGF0LlBBU1MpOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDEgOiAiLCBzdGF0LkZBSUwpOwotCX0KKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MSA6ICIsIHN0YXQuUEFTUyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MSA6ICIsIHN0YXQuRkFJTCk7CisgICAgfQogCi0JaWYgKCBzaW1wbGVCTVAudGVzdDIoKSApIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MiA6ICIsIHN0YXQuUEFTUyk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MiA6ICIsIHN0YXQuRkFJTCk7Ci0JfQorICAgIGlmICggc2ltcGxlQk1QLnRlc3QyKCkgKSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDIgOiAiLCBzdGF0LlBBU1MpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDIgOiAiLCBzdGF0LkZBSUwpOworICAgIH0KIAotCVN5c3RlbS5vdXQucHJpbnRsbigiamRiYyBmZXRjaG91dG9mc2VxIHN0YXR1czogIik7Ci0Jc3RhdC5wcmludFN1bW1hcnkoKTsKLSAgICAKLSAgICAgICAgCisgICAgU3lzdGVtLm91dC5wcmludGxuKCJqZGJjIGZldGNob3V0b2ZzZXEgc3RhdHVzOiAiKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOworCisKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2ZldGNob3V0b2ZzZXEvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZmV0Y2hvdXRvZnNlcS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IDg1YjA3OTUuLmNkMjNkMmQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZmV0Y2hvdXRvZnNlcS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZmV0Y2hvdXRvZnNlcS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC01Nyw2ICs1Nyw2IEBACiAgICAgICA8dHJhbnMtYXR0cmlidXRlPlJlcXVpcmVkPC90cmFucy1hdHRyaWJ1dGU+CiAgICAgPC9jb250YWluZXItdHJhbnNhY3Rpb24+CiAgIDwvYXNzZW1ibHktZGVzY3JpcHRvcj4KLSAgICAgIAorCiA8L2VqYi1qYXI+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZmV0Y2hvdXRvZnNlcS9lamIvU2ltcGxlQk1QQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9mZXRjaG91dG9mc2VxL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKaW5kZXggYzdmOTdkZS4uNjQwODgzZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9mZXRjaG91dG9mc2VxL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9mZXRjaG91dG9mc2VxL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKQEAgLTMwLDE3ICszMCwxNyBAQAogICAgIHByb3RlY3RlZCBEYXRhU291cmNlIGRzOwogCiAgICAgcHVibGljIHZvaWQgc2V0RW50aXR5Q29udGV4dChFbnRpdHlDb250ZXh0IGVudGl0eUNvbnRleHQpIHsKLQlDb250ZXh0IGNvbnRleHQgPSBudWxsOwotCXRyeSB7Ci0JICAgIGNvbnRleHQgICAgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkgICAgZHMgPSAoRGF0YVNvdXJjZSkgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZSIpOwotCX0gY2F0Y2ggKE5hbWluZ0V4Y2VwdGlvbiBlKSB7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImNhbnQgZmluZCBkYXRhc291cmNlIik7Ci0JfQorICAgIENvbnRleHQgY29udGV4dCA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgY29udGV4dCAgICA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgICAgICBkcyA9IChEYXRhU291cmNlKSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7CisgICAgfSBjYXRjaCAoTmFtaW5nRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiY2FudCBmaW5kIGRhdGFzb3VyY2UiKTsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIEludGVnZXIgZWpiQ3JlYXRlKCkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7Ci0JcmV0dXJuIG5ldyBJbnRlZ2VyKDEpOworICAgIHJldHVybiBuZXcgSW50ZWdlcigxKTsKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MSgpIHsKQEAgLTYwLDQwICs2MCw0MCBAQAogICAgICAqIHVwZGF0ZSIgcXVlcnkuIFNpbmNlIGEgY29ubmVjdGlvbiBvYnRhaW5lZCB1c2luZyBnZXROb25UeENvbm5lY3Rpb24KICAgICAgKiBpcyBub3QgbWFuYWdlZCAodHJhbnNhY3Rpb24td2lzZSksIGl0cyBhdXRvY29tbWl0IGlzIHNldCB0byB0cnVlIGJ5CiAgICAgICogZGVmYXVsdC4gU28gdGhpcyBmYWlscy4KLSAgICAgKiAyLiBnZXRzIGEgY29ubmVjdGlvbiBhcyBhYm92ZSBidXQgc2V0cyBpdHMgYXV0b2NvbW1pdCB0byB0cnVlLiBUaGUgCisgICAgICogMi4gZ2V0cyBhIGNvbm5lY3Rpb24gYXMgYWJvdmUgYnV0IHNldHMgaXRzIGF1dG9jb21taXQgdG8gdHJ1ZS4gVGhlCiAgICAgICogcXVlcnkgd2lsbCB0aGVuIHBhc3MuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gaXNzdWVRdWVyeShib29sZWFuIGF1dG9Db21taXQpIHsKICAgICAgICAgQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKLQlQcmVwYXJlZFN0YXRlbWVudCBzdG10ID0gbnVsbDsKKyAgICBQcmVwYXJlZFN0YXRlbWVudCBzdG10ID0gbnVsbDsKICAgICAgICAgYm9vbGVhbiBwYXNzZWQgID0gKGF1dG9Db21taXQgPyBmYWxzZSA6IHRydWUpOwotCXRyeSB7Ci0JICAgIC8vY29ubiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQkgICAgY29ubiA9ICgoY29tLnN1bi5hcHBzZXJ2LmpkYmMuRGF0YVNvdXJjZSlkcykuZ2V0Tm9uVHhDb25uZWN0aW9uKCk7Ci0JICAgIGlmICggIWF1dG9Db21taXQgKSB7Ci0JICAgICAgICBjb25uLnNldEF1dG9Db21taXQoIGZhbHNlICk7Ci0JICAgIH0KLQkgICAgc3RtdCA9IGNvbm4ucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGNfaWQsIGNfcGhvbmUgRlJPTSBPX0NVU1RPTUVSIEZPUiBVUERBVEUgT0YgY19pZCIpOwotCSAgICBzdG10LmV4ZWN1dGVRdWVyeSgpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIGlmIChhdXRvQ29tbWl0KSB7Ci0JICAgICAgICBwYXNzZWQgPSB0cnVlOwotCSAgICB9IGVsc2UgewotCSAgICAgICAgcGFzc2VkID0gZmFsc2U7Ci0JICAgIH0KLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9IGZpbmFsbHkgewotCSAgICBpZiAoc3RtdCAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHtzdG10LmNsb3NlKCk7fSBjYXRjaChFeGNlcHRpb24gZTEpIHt9Ci0JICAgIH0KLQkgICAgaWYgKCBjb25uICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgeyBjb25uLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30gICAgCi0JICAgIH0KLSAgICAgICAgfSAKLSAgICAgICAgCi0JcmV0dXJuIHBhc3NlZDsKKyAgICB0cnkgeworICAgICAgICAvL2Nvbm4gPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIGNvbm4gPSAoKGNvbS5zdW4uYXBwc2Vydi5qZGJjLkRhdGFTb3VyY2UpZHMpLmdldE5vblR4Q29ubmVjdGlvbigpOworICAgICAgICBpZiAoICFhdXRvQ29tbWl0ICkgeworICAgICAgICAgICAgY29ubi5zZXRBdXRvQ29tbWl0KCBmYWxzZSApOworICAgICAgICB9CisgICAgICAgIHN0bXQgPSBjb25uLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBjX2lkLCBjX3Bob25lIEZST00gT19DVVNUT01FUiBGT1IgVVBEQVRFIE9GIGNfaWQiKTsKKyAgICAgICAgc3RtdC5leGVjdXRlUXVlcnkoKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICBpZiAoYXV0b0NvbW1pdCkgeworICAgICAgICAgICAgcGFzc2VkID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKHN0bXQgIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7c3RtdC5jbG9zZSgpO30gY2F0Y2goRXhjZXB0aW9uIGUxKSB7fQorICAgICAgICB9CisgICAgICAgIGlmICggY29ubiAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsgY29ubi5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CisgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgcmV0dXJuIHBhc3NlZDsKICAgICB9Ci0gICAKKwogCiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHt9CiAgICAgcHVibGljIHZvaWQgZWpiU3RvcmUoKSB7fQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9mZXRjaG91dG9mc2VxL3NxbC9jcmVhdGVfbXlzcWwuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9mZXRjaG91dG9mc2VxL3NxbC9jcmVhdGVfbXlzcWwuc3FsCmluZGV4IGU0OTE0ZjYuLmYyNTYwNzYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZmV0Y2hvdXRvZnNlcS9zcWwvY3JlYXRlX215c3FsLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2ZldGNob3V0b2ZzZXEvc3FsL2NyZWF0ZV9teXNxbC5zcWwKQEAgLTEsNyArMSw3IEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQotDQotQ1JFQVRFIFRBQkxFIE9fQ3VzdG9tZXIgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCitEcm9wIHRhYmxlIE9fQ3VzdG9tZXI7CisKK0NSRUFURSBUQUJMRSBPX0N1c3RvbWVyICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikKKyk7CisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZmV0Y2hvdXRvZnNlcS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2ZldGNob3V0b2ZzZXEvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IDYzN2E3YzUuLmMzYjBkNWMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZmV0Y2hvdXRvZnNlcS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9mZXRjaG91dG9mc2VxL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSw5ICsxLDkgQEAKLURyb3AgdGFibGUgT19DdXN0b21lcjsNCi0NCi1DUkVBVEUgVEFCTEUgT19DdXN0b21lciAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikNCi0pOw0KLQ0KLUlOU0VSVCBJTlRPIE9fQ1VTVE9NRVIgVkFMVUVTICgwLCAnYWJjZCcpOw0KLUlOU0VSVCBJTlRPIE9fQ1VTVE9NRVIgVkFMVUVTICgxLCAncHFycycpOw0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKKworQ1JFQVRFIFRBQkxFIE9fQ3VzdG9tZXIgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQorKTsKKworSU5TRVJUIElOVE8gT19DVVNUT01FUiBWQUxVRVMgKDAsICdhYmNkJyk7CitJTlNFUlQgSU5UTyBPX0NVU1RPTUVSIFZBTFVFUyAoMSwgJ3BxcnMnKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZmV0Y2hvdXRvZnNlcS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9mZXRjaG91dG9mc2VxL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggNzBkMWZjYy4uZDg1NGI5NSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9mZXRjaG91dG9mc2VxL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9mZXRjaG91dG9mc2VxL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEgKzEgQEAKLURyb3AgdGFibGUgT19DdXN0b21lcjsNCitEcm9wIHRhYmxlIE9fQ3VzdG9tZXI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2ZsdXNoY29ubmVjdGlvbnBvb2wvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZmx1c2hjb25uZWN0aW9ucG9vbC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDc1MWIzNDguLjVjNGEwMGEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZmx1c2hjb25uZWN0aW9ucG9vbC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZmx1c2hjb25uZWN0aW9ucG9vbC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOSArMTUsMTkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImpkYmMtZmx1c2hjb25uZWN0aW9ucG9vbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iMTIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZmx1c2hjb25uZWN0aW9ucG9vbC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2ZsdXNoY29ubmVjdGlvbnBvb2wvYnVpbGQueG1sCmluZGV4IDRiNDk0YzguLmZlMmJlM2IgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZmx1c2hjb25uZWN0aW9ucG9vbC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9mbHVzaGNvbm5lY3Rpb25wb29sL2J1aWxkLnhtbApAQCAtNzUsNyArNzUsNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9ImpkYmMtZmx1c2hjb25uZWN0aW9ucG9vbC1wb29sIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLQk8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTEwOCwxNCArMTA4LDE0IEBACiAgICAgICAgICAgICAgICAgICAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLWZsdXNoY29ubmVjdGlvbnBvb2wtcG9vbC5zdGVhZHlfcG9vbF9zaXplPTEiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCi0JPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLWZsdXNoY29ubmVjdGlvbnBvb2wtcG9vbC5tYXhfcG9vbF9zaXplPTEiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAKLQk8IS0tCTxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgorICAgIDwhLS0gICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLWZsdXNoY29ubmVjdGlvbnBvb2wtcG9vbC5tYXhfY29ubmVjdGlvbl91c2FnZV9jb3VudD01Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2ZsdXNoY29ubmVjdGlvbnBvb2wvZWpiL1NpbXBsZUJNUEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZmx1c2hjb25uZWN0aW9ucG9vbC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCmluZGV4IDAwYjY0NzAuLjBjMGM0ZjUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZmx1c2hjb25uZWN0aW9ucG9vbC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZmx1c2hjb25uZWN0aW9ucG9vbC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCkBAIC01Miw4ICs1Miw4IEBACiAKICAgICAvKioKICAgICAgKiBBY3F1aXJlIDQgY29ubmVjdGlvbnMsIGNsb3NpbmcgdGhlbSBhdCB0aGUgZW5kIG9mIHRoZSBsb29wLgotICAgICAqIENhY2hlIHRoZSBmaXJzdCBjb25uZWN0aW9uLCBhbmQgYmVmb3JlIGFjcXVpcmluZyB0aGUgbGFzdCBjb25uZWN0aW9uLCAKLSAgICAgKiBkbyBhIGZsdXNoIGNvbm5lY3Rpb24gcG9vbC4gVGhlIDV0aCBjb25uZWN0aW9uIGdvdCBhZnRlciB0aGUgCisgICAgICogQ2FjaGUgdGhlIGZpcnN0IGNvbm5lY3Rpb24sIGFuZCBiZWZvcmUgYWNxdWlyaW5nIHRoZSBsYXN0IGNvbm5lY3Rpb24sCisgICAgICogZG8gYSBmbHVzaCBjb25uZWN0aW9uIHBvb2wuIFRoZSA1dGggY29ubmVjdGlvbiBnb3QgYWZ0ZXIgdGhlCiAgICAgICogZmx1c2ggc2hvdWxkIGJlIGRpZmZlcmVudCBmcm9tIHRoZSBmaXJzdCBjb25uZWN0aW9uIGdvdC4KICAgICAgKgogICAgICAqIEByZXR1cm4gYm9vbGVhbgpAQCAtNjksMTIgKzY5LDEyIEBACiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNTsgaSsrKSB7CiAgICAgICAgICAgICBDb25uZWN0aW9uIGNvbm4gPSBudWxsOwogICAgICAgICAgICAgdHJ5IHsKLQkJLy9EbyBhIGZsdXNoIGFuZCB0aGVuIGdldCBhIGNvbm5lY3Rpb24gZm9yIHRoZSBsYXN0IGl0ZXJhdGlvbgotCQlpZihpID09NCkgewotCQkgICAgaWYoIWZsdXNoQ29ubmVjdGlvblBvb2woKSkgewotCQkgICAgICAgIGJyZWFrOwotCQkgICAgfQotCQl9CSAgICAKKyAgICAgICAgLy9EbyBhIGZsdXNoIGFuZCB0aGVuIGdldCBhIGNvbm5lY3Rpb24gZm9yIHRoZSBsYXN0IGl0ZXJhdGlvbgorICAgICAgICBpZihpID09NCkgeworICAgICAgICAgICAgaWYoIWZsdXNoQ29ubmVjdGlvblBvb2woKSkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgICAgICAgICAgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqaT0iICsgaSArICJjb25uPSIgKyBkcy5nZXRDb25uZWN0aW9uKGNvbm4pKTsKIApAQCAtMTEyLDQ0ICsxMTIsNDQgQEAKICAgICAgICAgZHMgPSB0aGlzLmRzOwogCiAgICAgICAgIGJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKLQlDb25uZWN0aW9uIGNvbiA9IG51bGw7Ci0JdHJ5IHsKKyAgICBDb25uZWN0aW9uIGNvbiA9IG51bGw7CisgICAgdHJ5IHsKICAgICAgICAgICAgIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQl9IGNhdGNoKEV4Y2VwdGlvbiBleCkgewotCSAgICBwYXNzZWQgPSBmYWxzZTsKLQl9CisgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAgfQogICAgICAgICByZXR1cm4gcGFzc2VkOwogICAgIH0KIAogICAgIHByaXZhdGUgYm9vbGVhbiBmbHVzaENvbm5lY3Rpb25Qb29sKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFNlcnZpY2VMb2NhdG9yIGhhYml0YXQgPSBHbG9iYWxzLmdldERlZmF1bHRIYWJpdGF0KCk7Ci0JR2xhc3NGaXNoIGdmID0gaGFiaXRhdC5nZXRTZXJ2aWNlKEdsYXNzRmlzaC5jbGFzcyk7Ci0JQ29tbWFuZFJ1bm5lciBydW5uZXIgPSBnZi5nZXRDb21tYW5kUnVubmVyKCk7Ci0JQ29tbWFuZFJlc3VsdCByZXMgPSBydW5uZXIucnVuKCJmbHVzaC1jb25uZWN0aW9uLXBvb2wiLCBwb29sTmFtZSk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJyZXM9ICIgKyByZXMuZ2V0T3V0cHV0KCkpOwotCWlmKHJlcy5nZXRFeGl0U3RhdHVzKCkgPT0gQ29tbWFuZFJlc3VsdC5FeGl0U3RhdHVzLlNVQ0NFU1MpIHsKKyAgICBHbGFzc0Zpc2ggZ2YgPSBoYWJpdGF0LmdldFNlcnZpY2UoR2xhc3NGaXNoLmNsYXNzKTsKKyAgICBDb21tYW5kUnVubmVyIHJ1bm5lciA9IGdmLmdldENvbW1hbmRSdW5uZXIoKTsKKyAgICBDb21tYW5kUmVzdWx0IHJlcyA9IHJ1bm5lci5ydW4oImZsdXNoLWNvbm5lY3Rpb24tcG9vbCIsIHBvb2xOYW1lKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oInJlcz0gIiArIHJlcy5nZXRPdXRwdXQoKSk7CisgICAgaWYocmVzLmdldEV4aXRTdGF0dXMoKSA9PSBDb21tYW5kUmVzdWx0LkV4aXRTdGF0dXMuU1VDQ0VTUykgewogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0JfQotCXJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIHByaXZhdGUgYm9vbGVhbiBhbXhGbHVzaENvbm5lY3Rpb25Qb29sKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIGZpbmFsIFN0cmluZyB1cmxTdHIgPSAic2VydmljZTpqbXg6cm1pOi8vL2puZGkvcm1pOi8vIiArIEhPU1RfTkFNRSArICI6IiArIEpNWF9QT1JUICsgIi9qbXhybWkiOwogICAgICAgICBmaW5hbCBKTVhTZXJ2aWNlVVJMIHVybCA9IG5ldyBKTVhTZXJ2aWNlVVJMKHVybFN0cik7Ci0JYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKKyAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwogCiAgICAgICAgIGZpbmFsIEpNWENvbm5lY3RvciBqbXhDb25uID0gSk1YQ29ubmVjdG9yRmFjdG9yeS5jb25uZWN0KHVybCk7CiAgICAgICAgIGZpbmFsIE1CZWFuU2VydmVyQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gam14Q29ubi5nZXRNQmVhblNlcnZlckNvbm5lY3Rpb24oKTsKIAogICAgICAgICBPYmplY3ROYW1lIG9iamVjdE5hbWUgPQotCSAgICAgICAgICAgICAgICBuZXcgT2JqZWN0TmFtZSgiYW14OnBwPS9leHQsdHlwZT1jb25uZWN0b3ItcnVudGltZS1hcGktcHJvdmlkZXIiKTsKKyAgICAgICAgICAgICAgICAgICAgbmV3IE9iamVjdE5hbWUoImFteDpwcD0vZXh0LHR5cGU9Y29ubmVjdG9yLXJ1bnRpbWUtYXBpLXByb3ZpZGVyIik7CiAKLQlTdHJpbmdbXSBwYXJhbXMgPSB7cG9vbE5hbWV9OwotCVN0cmluZ1tdIHNpZ25hdHVyZSA9IHtTdHJpbmcuY2xhc3MuZ2V0TmFtZSgpfTsKKyAgICBTdHJpbmdbXSBwYXJhbXMgPSB7cG9vbE5hbWV9OworICAgIFN0cmluZ1tdIHNpZ25hdHVyZSA9IHtTdHJpbmcuY2xhc3MuZ2V0TmFtZSgpfTsKICAgICAgICAgTWFwPFN0cmluZyxPYmplY3Q+IGZsdXNoU3RhdHVzID0gKE1hcDxTdHJpbmcsT2JqZWN0PikgY29ubmVjdGlvbi5pbnZva2Uob2JqZWN0TmFtZSwgImZsdXNoQ29ubmVjdGlvblBvb2wiLCBwYXJhbXMsIHNpZ25hdHVyZSk7Ci0JaWYoZmx1c2hTdGF0dXMgIT0gbnVsbCkgewotCSAgICByZXN1bHQgPSAoQm9vbGVhbikgZmx1c2hTdGF0dXMuZ2V0KCJGbHVzaENvbm5lY3Rpb25Qb29sS2V5Iik7Ci0JfQorICAgIGlmKGZsdXNoU3RhdHVzICE9IG51bGwpIHsKKyAgICAgICAgcmVzdWx0ID0gKEJvb2xlYW4pIGZsdXNoU3RhdHVzLmdldCgiRmx1c2hDb25uZWN0aW9uUG9vbEtleSIpOworICAgIH0KICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZmx1c2hjb25uZWN0aW9ucG9vbC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2ZsdXNoY29ubmVjdGlvbnBvb2wvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IDg0NjU0YTEuLmZhNTA4NmMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvZmx1c2hjb25uZWN0aW9ucG9vbC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9mbHVzaGNvbm5lY3Rpb25wb29sL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSw3ICsxLDcgQEAKLURyb3AgdGFibGUgZmx1c2hfY29ubmVjdGlvbl9wb29sOw0KLQ0KLUNSRUFURSBUQUJMRSBmbHVzaF9jb25uZWN0aW9uX3Bvb2wgKA0KLSAgICBpZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIHZhbHVlICAgICAgICAgY2hhcigxNikNCi0pOw0KLQ0KK0Ryb3AgdGFibGUgZmx1c2hfY29ubmVjdGlvbl9wb29sOworCitDUkVBVEUgVEFCTEUgZmx1c2hfY29ubmVjdGlvbl9wb29sICgKKyAgICBpZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgdmFsdWUgICAgICAgICBjaGFyKDE2KQorKTsKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9mbHVzaGNvbm5lY3Rpb25wb29sL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2ZsdXNoY29ubmVjdGlvbnBvb2wvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAppbmRleCA5ZDUwNjg3Li5jMjY0OWI0IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2ZsdXNoY29ubmVjdGlvbnBvb2wvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2ZsdXNoY29ubmVjdGlvbnBvb2wvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbApAQCAtMSArMSBAQAotRHJvcCB0YWJsZSBmbHVzaF9jb25uZWN0aW9uX3Bvb2w7DQorRHJvcCB0YWJsZSBmbHVzaF9jb25uZWN0aW9uX3Bvb2w7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2luaXQtc3FsL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2luaXQtc3FsL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMDMzOGM5Ny4uY2JmMDljNiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9pbml0LXNxbC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvaW5pdC1zcWwvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTkgKzE1LDE5IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqZGJjLWluaXRzcWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IjEyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2luaXQtc3FsL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvaW5pdC1zcWwvYnVpbGQueG1sCmluZGV4IDIyZmEwZTQuLmE0Y2E5YWYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvaW5pdC1zcWwvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvaW5pdC1zcWwvYnVpbGQueG1sCkBAIC0zMiwxNCArMzIsMTQgQEAKICAgJnRlc3Rwcm9wZXJ0aWVzOwogICAmamRiY0NvbW1vbjsKICAgJmpkYmNDb21tb25Qcm9wczsKLSAgICAKKwogICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iY2xlYW4sYnVpbGQsZGVwbG95LHJ1bix1bmRlcGxveSIvPgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CiAgICAgPGRlbGV0ZSBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC02MSwzMSArNjEsMzEgQEAKIAogICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWpkYmMtb3JhY2xlLWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9Im9yYWNsZS5wb29sLm5hbWUiIHZhbHVlPSJqZGJjLW9yYWNsZS1wb29sLWluaXRzcWwiLz4KLQk8cGFyYW0gbmFtZT0ib3JhY2xlLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL29yYWNsZXJlcy1pbml0c3FsIi8+CisgICAgPHBhcmFtIG5hbWU9Im9yYWNsZS5wb29sLm5hbWUiIHZhbHVlPSJqZGJjLW9yYWNsZS1wb29sLWluaXRzcWwiLz4KKyAgICA8cGFyYW0gbmFtZT0ib3JhY2xlLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL29yYWNsZXJlcy1pbml0c3FsIi8+CiAgICAgPC9hbnRjYWxsPgogICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgotCQkgICAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLW9yYWNsZS1wb29sLWluaXRzcWwuaW5pdC1zcWw9J0FMVEVSIFNFU1NJT04gU0VUIE5MU19DT01QPUxJTkdVSVNUSUMgTkxTX1NPUlQ9QklOQVJZX0NJJyIvPgorICAgICAgICAgICAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLW9yYWNsZS1wb29sLWluaXRzcWwuaW5pdC1zcWw9J0FMVEVSIFNFU1NJT04gU0VUIE5MU19DT01QPUxJTkdVSVNUSUMgTkxTX1NPUlQ9QklOQVJZX0NJJyIvPgogICAgIDwvYW50Y2FsbD4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLW9yYWNsZS1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGUuc3FsIi8+CisgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZS5zcWwiLz4KICAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWpkYmMtb3JhY2xlLWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9Im9yYWNsZS5wb29sLm5hbWUiIHZhbHVlPSJqZGJjLW9yYWNsZS1wb29sLWluaXRzcWwiLz4KLQk8cGFyYW0gbmFtZT0ib3JhY2xlLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL29yYWNsZXJlcy1pbml0c3FsIi8+CisgICAgPHBhcmFtIG5hbWU9Im9yYWNsZS5wb29sLm5hbWUiIHZhbHVlPSJqZGJjLW9yYWNsZS1wb29sLWluaXRzcWwiLz4KKyAgICA8cGFyYW0gbmFtZT0ib3JhY2xlLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL29yYWNsZXJlcy1pbml0c3FsIi8+CiAgICAgPC9hbnRjYWxsPgogICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1vcmFjbGUtY29tbW9uIj4KICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wLnNxbCIvPgogICAgIDwvYW50Y2FsbD4KICAgPC90YXJnZXQ+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0icnVuIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPgogICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iMSIvPgpAQCAtMTAwLDkgKzEwMCw5IEBACiAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIyIi8+CiAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KICAgPC90YXJnZXQ+Ci0gIAorCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2luaXQtc3FsL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvaW5pdC1zcWwvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDIzYjdhZmUuLjlmNmQ5ZTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvaW5pdC1zcWwvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvaW5pdC1zcWwvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNSwyNCArMjUsMjQgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLlNpbXBsZVJlcG9ydGVyQWRhcHRlcjsKIAogcHVibGljIGNsYXNzIENsaWVudCB7Ci0gICAKKwogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOwogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0U3VpdGUgPSAiaW5pdHNxbC10ZXN0IjsKIAogICAgIHByaXZhdGUgc3RhdGljIEluaXRpYWxDb250ZXh0IGljOwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICB0cnkgewotCSAgICBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCX0gY2F0Y2goTmFtaW5nRXhjZXB0aW9uIGV4KSB7Ci0JICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotCX0KKyAgICAgICAgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICB9IGNhdGNoKE5hbWluZ0V4Y2VwdGlvbiBleCkgeworICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CiAKICAgICAgICAgT2JqZWN0IG9ialJlZiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlU2Vzc2lvbkhvbWUiKTsKLQlTaW1wbGVTZXNzaW9uSG9tZSBzaW1wbGVTZXNzaW9uSG9tZSA9IChTaW1wbGVTZXNzaW9uSG9tZSkKKyAgICBTaW1wbGVTZXNzaW9uSG9tZSBzaW1wbGVTZXNzaW9uSG9tZSA9IChTaW1wbGVTZXNzaW9uSG9tZSkKICAgICAgICAgamF2YXgucm1pLlBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpSZWYsIFNpbXBsZVNlc3Npb25Ib21lLmNsYXNzKTsKLQlzdGF0LmFkZERlc2NyaXB0aW9uKCJSdW5uaW5nIGluaXRzcWwgdGVzdFN1aXRlICIpOworICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlJ1bm5pbmcgaW5pdHNxbCB0ZXN0U3VpdGUgIik7CiAgICAgICAgIFNpbXBsZVNlc3Npb24gc2ltcGxlU2Vzc2lvbiA9IHNpbXBsZVNlc3Npb25Ib21lLmNyZWF0ZSgpOwogCiAgICAgICAgIGlmIChhcmdzICE9IG51bGwgJiYgYXJncy5sZW5ndGggPiAwKSB7CkBAIC02NSw5ICs2NSw5IEBACiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotCSAgICB9Ci0JfQotICAgICAgICAKKyAgICAgICAgfQorICAgIH0KKwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvaW5pdC1zcWwvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvaW5pdC1zcWwvZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCBmYzZlOWZiLi44MDczNTZiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2luaXQtc3FsL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9pbml0LXNxbC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC01MSw2ICs1MSw2IEBACiAgICAgICA8dHJhbnMtYXR0cmlidXRlPlJlcXVpcmVkPC90cmFucy1hdHRyaWJ1dGU+CiAgICAgPC9jb250YWluZXItdHJhbnNhY3Rpb24+CiAgIDwvYXNzZW1ibHktZGVzY3JpcHRvcj4KLSAgICAgIAorCiA8L2VqYi1qYXI+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvaW5pdC1zcWwvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2luaXQtc3FsL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCmluZGV4IGZkMDQ0MTIuLmExOWFiYTMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvaW5pdC1zcWwvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9pbml0LXNxbC9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbApAQCAtMjcsNyArMjcsNyBAQAogICAgICAgPGpuZGktbmFtZT5jb20uc3VuLnMxYXNkZXYuamRiYy5pbml0c3FsLmVqYi5TaW1wbGVTZXNzaW9uSG9tZTwvam5kaS1uYW1lPgogICAgICAgPHJlc291cmNlLXJlZj4KICAgICAgICAgPHJlcy1yZWYtbmFtZT5EYXRhU291cmNlMTwvcmVzLXJlZi1uYW1lPgotCTxqbmRpLW5hbWU+amRiYy9vcmFjbGVyZXMtaW5pdHNxbDwvam5kaS1uYW1lPgorICAgIDxqbmRpLW5hbWU+amRiYy9vcmFjbGVyZXMtaW5pdHNxbDwvam5kaS1uYW1lPgogICAgICAgPC9yZXNvdXJjZS1yZWY+CiAgICAgPC9lamI+CiAgIDwvZW50ZXJwcmlzZS1iZWFucz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvaW5pdC1zcWwvZWpiL1NpbXBsZVNlc3Npb25CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2luaXQtc3FsL2VqYi9TaW1wbGVTZXNzaW9uQmVhbi5qYXZhCmluZGV4IDFlMGRiOTAuLjE3YzAyYmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvaW5pdC1zcWwvZWpiL1NpbXBsZVNlc3Npb25CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9pbml0LXNxbC9lamIvU2ltcGxlU2Vzc2lvbkJlYW4uamF2YQpAQCAtMzAsNzEgKzMwLDcxIEBACiAKICAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IGNvbnRleHQ7CiAgICAgcHJpdmF0ZSBJbml0aWFsQ29udGV4dCBpYzsKLSAgICBwcml2YXRlIERhdGFTb3VyY2UgZHMxOyAKKyAgICBwcml2YXRlIERhdGFTb3VyY2UgZHMxOwogCiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgY3R4dCkgewogICAgICAgICB0aGlzLmNvbnRleHQgPSBjdHh0OwotCXRyeSB7Ci0JICAgIGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JICAgIGRzMSA9IChjb20uc3VuLmFwcHNlcnYuamRiYy5EYXRhU291cmNlKWljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlMSIpOwotCX0gY2F0Y2goIEV4Y2VwdGlvbiBuZSApIHsKLQkgICAgbmUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQorICAgIHRyeSB7CisgICAgICAgIGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgIGRzMSA9IChjb20uc3VuLmFwcHNlcnYuamRiYy5EYXRhU291cmNlKWljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlMSIpOworICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBuZSApIHsKKyAgICAgICAgbmUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewogICAgIH0KIAogICAgIC8qKgotICAgICAqIFRlc3QgdG8gc2VsZWN0IHRoZSBuYW1lcyBmcm9tIGEgdGFibGUuIAorICAgICAqIFRlc3QgdG8gc2VsZWN0IHRoZSBuYW1lcyBmcm9tIGEgdGFibGUuCiAgICAgICoKLSAgICAgKiBUaGUgcmVzdWx0IHNldCB3b3VsZCBjb250YWluIGRpZmZlcmVudCBudW1iZXIgb2Ygcm93cyBiYXNlZCBvbiAKLSAgICAgKiBhIHNlc3Npb24gcHJvcGVydHkgc2V0IGR1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24gc3FsIHBoYXNlLiAKLSAgICAgKiBCYXNlZCBvbiB0aGUgcHJvcGVydHkgc2V0LCB0aGUgbnVtYmVyIG9mIHJvd3MgYXJlIGNvbXBhcmVkIHRvIAorICAgICAqIFRoZSByZXN1bHQgc2V0IHdvdWxkIGNvbnRhaW4gZGlmZmVyZW50IG51bWJlciBvZiByb3dzIGJhc2VkIG9uCisgICAgICogYSBzZXNzaW9uIHByb3BlcnR5IHNldCBkdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uIHNxbCBwaGFzZS4KKyAgICAgKiBCYXNlZCBvbiB0aGUgcHJvcGVydHkgc2V0LCB0aGUgbnVtYmVyIG9mIHJvd3MgYXJlIGNvbXBhcmVkIHRvCiAgICAgICogdGVzdCB0aGUgZmVhdHVyZS4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MShib29sZWFuIGNhc2VTZW5zaXRpdmUpIHsKICAgICAgICAgQ29ubmVjdGlvbiBjb24gPSBudWxsOwotCVN0YXRlbWVudCBzdG10ID0gbnVsbDsKLQlSZXN1bHRTZXQgcnMgPSBudWxsOwotCVN0cmluZyBxdWVyeSA9ICJTZWxlY3QgbmFtZSBmcm9tIFdPUktFUlMgd2hlcmUgbmFtZT0nSm95IEpveSciOwotCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0JaW50IHNpemUgPSAwOwotCXRyeSB7Ci0JICAgIGNvbiA9IGRzMS5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIHN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7Ci0JICAgIHJzID0gc3RtdC5leGVjdXRlUXVlcnkocXVlcnkpOwotCSAgICBpZihycyAhPSBudWxsKSB7Ci0JCXdoaWxlKHJzLm5leHQoKSkgewotCQkgICAgc2l6ZSsrOwotCQl9Ci0JICAgIH0KLQkgICAgaWYoY2FzZVNlbnNpdGl2ZSkgewotCSAgICAgICAgcmVzdWx0ID0gc2l6ZSA9PSAxOwotCSAgICB9IGVsc2UgewotCQlyZXN1bHQgPSBzaXplID09IDM7Ci0JICAgIH0KLQl9IGNhdGNoIChTUUxFeGNlcHRpb24gZXgpIHsKLQkgICAgcmVzdWx0ID0gZmFsc2U7Ci0JICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotCX0gZmluYWxseSB7CisgICAgU3RhdGVtZW50IHN0bXQgPSBudWxsOworICAgIFJlc3VsdFNldCBycyA9IG51bGw7CisgICAgU3RyaW5nIHF1ZXJ5ID0gIlNlbGVjdCBuYW1lIGZyb20gV09SS0VSUyB3aGVyZSBuYW1lPSdKb3kgSm95JyI7CisgICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKKyAgICBpbnQgc2l6ZSA9IDA7CisgICAgdHJ5IHsKKyAgICAgICAgY29uID0gZHMxLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgcnMgPSBzdG10LmV4ZWN1dGVRdWVyeShxdWVyeSk7CisgICAgICAgIGlmKHJzICE9IG51bGwpIHsKKyAgICAgICAgd2hpbGUocnMubmV4dCgpKSB7CisgICAgICAgICAgICBzaXplKys7CisgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZihjYXNlU2Vuc2l0aXZlKSB7CisgICAgICAgICAgICByZXN1bHQgPSBzaXplID09IDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgIHJlc3VsdCA9IHNpemUgPT0gMzsKKyAgICAgICAgfQorICAgIH0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBleCkgeworICAgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIGlmKHJzICE9IG51bGwpIHsKLQkJdHJ5IHsKLQkJICAgIHJzLmNsb3NlKCk7Ci0JCX0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7fQotCSAgICB9Ci0JICAgIGlmKHN0bXQgIT0gbnVsbCkgewotCQl0cnkgewotCQkgICAgc3RtdC5jbG9zZSgpOwotCQl9IGNhdGNoKEV4Y2VwdGlvbiBleCkge30KLQkgICAgfQotCSAgICBpZihjb24gIT0gbnVsbCkgewotCQl0cnkgewotCQkgICAgc3RtdC5jbG9zZSgpOwotCQl9IGNhdGNoKEV4Y2VwdGlvbiBleCkge30KLQkgICAgfQotCX0KLQlyZXR1cm4gcmVzdWx0OworICAgICAgICB0cnkgeworICAgICAgICAgICAgcnMuY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHt9CisgICAgICAgIH0KKyAgICAgICAgaWYoc3RtdCAhPSBudWxsKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBzdG10LmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7fQorICAgICAgICB9CisgICAgICAgIGlmKGNvbiAhPSBudWxsKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBzdG10LmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7fQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiU3RvcmUoKSB7fQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9pbml0LXNxbC9zcWwvY3JlYXRlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvaW5pdC1zcWwvc3FsL2NyZWF0ZS5zcWwKaW5kZXggMzRjOGRjMS4uZjFhYTBkOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9pbml0LXNxbC9zcWwvY3JlYXRlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2luaXQtc3FsL3NxbC9jcmVhdGUuc3FsCkBAIC0xLDYgKzEsNiBAQAogRFJPUCBUQUJMRSBXT1JLRVJTOwogQ1JFQVRFIFRBQkxFIFdPUktFUlMoCi0gICAgbmFtZSBjaGFyKDIwKSAKKyAgICBuYW1lIGNoYXIoMjApCiApOwogSU5TRVJUIElOVE8gV09SS0VSUyBWQUxVRVMoJ0pveSBKb3knKTsKIElOU0VSVCBJTlRPIFdPUktFUlMgVkFMVUVTKCdqb3kgam95Jyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmM0MS1kZXZ0ZXN0cy9iYXNpYy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjNDEtZGV2dGVzdHMvYmFzaWMvYnVpbGQucHJvcGVydGllcwppbmRleCA2YWVlOTFmLi5jNmJkNDFiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmM0MS1kZXZ0ZXN0cy9iYXNpYy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiYzQxLWRldnRlc3RzL2Jhc2ljL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE4ICsxNSwxOCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iamRiYzQxLWRldnRlc3RzIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmM0MS1kZXZ0ZXN0cy9iYXNpYy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmM0MS1kZXZ0ZXN0cy9iYXNpYy9idWlsZC54bWwKaW5kZXggNzRiY2RmMi4uMzRjYmFjZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjNDEtZGV2dGVzdHMvYmFzaWMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiYzQxLWRldnRlc3RzL2Jhc2ljL2J1aWxkLnhtbApAQCAtNTAsMjMgKzUwLDIzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgogICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtNDEtcG9vbCIvPgotCTxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLnR5cGUiIHZhbHVlPSJqYXZheC5zcWwuWEFEYXRhU291cmNlIi8+Ci0JPHBhcmFtIG5hbWU9ImRiLmNsYXNzIiB2YWx1ZT0ib3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudFhBRGF0YVNvdXJjZSIvPgorICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLnR5cGUiIHZhbHVlPSJqYXZheC5zcWwuWEFEYXRhU291cmNlIi8+CisgICAgPHBhcmFtIG5hbWU9ImRiLmNsYXNzIiB2YWx1ZT0ib3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudFhBRGF0YVNvdXJjZSIvPgogICAgICAgPC9hbnRjYWxsPgogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtNDEtcG9vbCIvPgotCTxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjLzQxcmVzb3VyY2UiLz4KKyAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy80MXJlc291cmNlIi8+CiAgICAgICA8L2FudGNhbGw+CiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgpAQCAtNzQsMTEgKzc0LDExIEBACiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGUuc3FsIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KQEAgLTg4LDEzICs4OCwxMyBAQAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy80MXJlc291cmNlIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgICAKKwogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1jb25ucG9vbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJqZGJjLTQxLXBvb2wiLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICAgIAorCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmM0MS1kZXZ0ZXN0cy9iYXNpYy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmM0MS1kZXZ0ZXN0cy9iYXNpYy9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggOTBjYTM3My4uMTc0MzViZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjNDEtZGV2dGVzdHMvYmFzaWMvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiYzQxLWRldnRlc3RzL2Jhc2ljL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjUsNDMgKzI1LDQzIEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci5TaW1wbGVSZXBvcnRlckFkYXB0ZXI7CiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAotCVNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOwotCVN0cmluZyB0ZXN0U3VpdGUgPSAiIEpEQkM0MSB0ZXN0cyBvbiBKREs3ICI7CisKKyAgICBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKKyAgICBTdHJpbmcgdGVzdFN1aXRlID0gIiBKREJDNDEgdGVzdHMgb24gSkRLNyAiOwogCiAgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgIE9iamVjdCBvYmpSZWYgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZVNlc3Npb25Ib21lIik7Ci0JU2ltcGxlU2Vzc2lvbkhvbWUgc2ltcGxlU2Vzc2lvbkhvbWUgPSAoU2ltcGxlU2Vzc2lvbkhvbWUpCisgICAgU2ltcGxlU2Vzc2lvbkhvbWUgc2ltcGxlU2Vzc2lvbkhvbWUgPSAoU2ltcGxlU2Vzc2lvbkhvbWUpCiAgICAgICAgIGphdmF4LnJtaS5Qb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqUmVmLCBTaW1wbGVTZXNzaW9uSG9tZS5jbGFzcyk7Ci0gICAgICAgIAotCXN0YXQuYWRkRGVzY3JpcHRpb24oIlJ1bm5pbmcgSkRCQzQxIHRlc3RTdWl0ZSAiKTsKKworICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlJ1bm5pbmcgSkRCQzQxIHRlc3RTdWl0ZSAiKTsKICAgICAgICAgU2ltcGxlU2Vzc2lvbiBzaW1wbGVTZXNzaW9uID0gc2ltcGxlU2Vzc2lvbkhvbWUuY3JlYXRlKCk7CiAgICAgICAgIGlmIChzaW1wbGVTZXNzaW9uLnRlc3QxKCkgKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3QxIDogQ29ubmVjdGlvbiBBUEkvYWJvcnQgVGVzdCA6ICIgLCBzdGF0LlBBU1MgKTsKLQl9IGVsc2UgewotCSAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0MSA6IENvbm5lY3Rpb24gQVBJL2Fib3J0IFRlc3QgOiAiICwgc3RhdC5GQUlMICk7Ci0JfQotICAgIAorICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0MSA6IENvbm5lY3Rpb24gQVBJL2Fib3J0IFRlc3QgOiAiICwgc3RhdC5QQVNTICk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDEgOiBDb25uZWN0aW9uIEFQSS9hYm9ydCBUZXN0IDogIiAsIHN0YXQuRkFJTCApOworICAgIH0KKwogICAgICAgICBpZiAoc2ltcGxlU2Vzc2lvbi50ZXN0MigpICkgewotCSAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0MiA6IENvbm5lY3Rpb24gQVBJL2Fib3J0IHVzZXJ0eCBUZXN0IDogIiAsIHN0YXQuUEFTUyApOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3QyIDogQ29ubmVjdGlvbiBBUEkvYWJvcnQgdXNlcnR4IFRlc3QgOiAiICwgc3RhdC5GQUlMICk7Ci0JfQotCQorICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0MiA6IENvbm5lY3Rpb24gQVBJL2Fib3J0IHVzZXJ0eCBUZXN0IDogIiAsIHN0YXQuUEFTUyApOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3QyIDogQ29ubmVjdGlvbiBBUEkvYWJvcnQgdXNlcnR4IFRlc3QgOiAiICwgc3RhdC5GQUlMICk7CisgICAgfQorCiAgICAgICAgIGlmIChzaW1wbGVTZXNzaW9uLnRlc3QzKCkgKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3QzIDogRGF0YWJhc2VNZXRhRGF0YSBUZXN0IDogIiAsIHN0YXQuUEFTUyApOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3QzIDogRGF0YWJhc2VNZXRhRGF0YSBUZXN0IDogIiAsIHN0YXQuRkFJTCApOwotCX0KLSAgICAKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDMgOiBEYXRhYmFzZU1ldGFEYXRhIFRlc3QgOiAiICwgc3RhdC5QQVNTICk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDMgOiBEYXRhYmFzZU1ldGFEYXRhIFRlc3QgOiAiICwgc3RhdC5GQUlMICk7CisgICAgfQorCiAgICAgICAgIGlmIChzaW1wbGVTZXNzaW9uLnRlc3Q0KCkgKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3Q0IDogU3RhdGVtZW50IEFQSS9Db25uZWN0aW9uIGFib3J0IHVzZXJ0eCBUZXN0IDogIiAsIHN0YXQuUEFTUyApOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3Q0IDogU3RhdGVtZW50IEFQSS9Db25uZWN0aW9uIGFib3J0IHVzZXJ0eCBUZXN0IDogIiAsIHN0YXQuRkFJTCApOwotCX0KLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0NCA6IFN0YXRlbWVudCBBUEkvQ29ubmVjdGlvbiBhYm9ydCB1c2VydHggVGVzdCA6ICIgLCBzdGF0LlBBU1MgKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0NCA6IFN0YXRlbWVudCBBUEkvQ29ubmVjdGlvbiBhYm9ydCB1c2VydHggVGVzdCA6ICIgLCBzdGF0LkZBSUwgKTsKKyAgICB9CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmM0MS1kZXZ0ZXN0cy9iYXNpYy9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjNDEtZGV2dGVzdHMvYmFzaWMvZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCBkYjg5ZDNlLi5jNDQ0YWFkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmM0MS1kZXZ0ZXN0cy9iYXNpYy9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiYzQxLWRldnRlc3RzL2Jhc2ljL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTQ0LDggKzQ0LDggQEAKICAgPC9lbnRlcnByaXNlLWJlYW5zPgogCiAgIDxhc3NlbWJseS1kZXNjcmlwdG9yPgotICAgIAorCiAgIDwvYXNzZW1ibHktZGVzY3JpcHRvcj4KLSAgICAgIAorCiA8L2VqYi1qYXI+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiYzQxLWRldnRlc3RzL2Jhc2ljL2VqYi9TaW1wbGVTZXNzaW9uQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjNDEtZGV2dGVzdHMvYmFzaWMvZWpiL1NpbXBsZVNlc3Npb25CZWFuLmphdmEKaW5kZXggMmUwZjNmMi4uNjE0ZDZmZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjNDEtZGV2dGVzdHMvYmFzaWMvZWpiL1NpbXBsZVNlc3Npb25CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjNDEtZGV2dGVzdHMvYmFzaWMvZWpiL1NpbXBsZVNlc3Npb25CZWFuLmphdmEKQEAgLTMwLDE2ICszMCwxNiBAQAogewogCiAgICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBjdHh0XzsKLSAgICBwcml2YXRlIEluaXRpYWxDb250ZXh0IGljXzsgCisgICAgcHJpdmF0ZSBJbml0aWFsQ29udGV4dCBpY187CiAgICAgcHJpdmF0ZSBEYXRhU291cmNlIGRzOwogICAgIFByaW50VGFzayB0YXNrMSA9IG5ldyBQcmludFRhc2soInRocmVhZDEiKTsKICAgICBQcmludFRhc2sgdGFzazIgPSBuZXcgUHJpbnRUYXNrKCJ0aHJlYWQyIik7CiAgICAgRXhlY3V0b3JTZXJ2aWNlIHRocmVhZEV4ZWN1dG9yID0gRXhlY3V0b3JzLm5ld0NhY2hlZFRocmVhZFBvb2wobmV3IFRocmVhZEZhY3RvcnkoKSB7Ci0JcHVibGljIFRocmVhZCBuZXdUaHJlYWQoUnVubmFibGUgcikgewotCSAgICBUaHJlYWQgdGggPSBuZXcgVGhyZWFkKHIpOwotCSAgICB0aC5zZXREYWVtb24odHJ1ZSk7Ci0JICAgIHJldHVybiB0aDsKLQl9CisgICAgcHVibGljIFRocmVhZCBuZXdUaHJlYWQoUnVubmFibGUgcikgeworICAgICAgICBUaHJlYWQgdGggPSBuZXcgVGhyZWFkKHIpOworICAgICAgICB0aC5zZXREYWVtb24odHJ1ZSk7CisgICAgICAgIHJldHVybiB0aDsKKyAgICB9CiAgICAgfSk7CiAKICAgICBjbGFzcyBQcmludFRhc2sgaW1wbGVtZW50cyBSdW5uYWJsZSB7CkBAIC01NiwyNDcgKzU2LDI0NyBAQAogCiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgY29udGV4dCkgewogICAgICAgICBjdHh0XyA9IGNvbnRleHQ7Ci0JdHJ5IHsKLQkgICAgaWNfID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JICAgIGRzID0gKERhdGFTb3VyY2UpIGljXy5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZSIpOwotCX0gY2F0Y2goIEV4Y2VwdGlvbiBuZSApIHsKLQkgICAgbmUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQorICAgIHRyeSB7CisgICAgICAgIGljXyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgICAgICBkcyA9IChEYXRhU291cmNlKSBpY18ubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKKyAgICB9IGNhdGNoKCBFeGNlcHRpb24gbmUgKSB7CisgICAgICAgIG5lLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBUZXN0aW5nIGNvbm5lY3Rpb24gb2JqZWN0IAorICAgICAqIFRlc3RpbmcgY29ubmVjdGlvbiBvYmplY3QKICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MSgpIHRocm93cyBFeGNlcHRpb24gewotCUNvbm5lY3Rpb24gY29uID0gbnVsbDsKLQlDb25uZWN0aW9uW10gY29ubnMgPSBuZXcgQ29ubmVjdGlvblszMl07Ci0JU3RhdGVtZW50IHN0bXQgPSBudWxsOwotCWJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKLQl0cnkgewotCSAgICBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCJzY290dCIsICJ0aWdlciIpOwotCSAgICBzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgIENvbm5lY3Rpb24gY29uID0gbnVsbDsKKyAgICBDb25uZWN0aW9uW10gY29ubnMgPSBuZXcgQ29ubmVjdGlvblszMl07CisgICAgU3RhdGVtZW50IHN0bXQgPSBudWxsOworICAgIGJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKKyAgICB0cnkgeworICAgICAgICBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCJzY290dCIsICJ0aWdlciIpOworICAgICAgICBzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOwogCi0JICAgIC8vVHJ5IGdldHRpbmcgc2NoZW1hIGZyb20gY29uIG9iamVjdAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj4+PiBjb24uZ2V0U2NoZW1hKCk9IiArIGNvbi5nZXRTY2hlbWEoKSk7CisgICAgICAgIC8vVHJ5IGdldHRpbmcgc2NoZW1hIGZyb20gY29uIG9iamVjdAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj4+PiBjb24uZ2V0U2NoZW1hKCk9IiArIGNvbi5nZXRTY2hlbWEoKSk7CiAKLQkgICAgLy90cnkgZ2V0dGluZyBuZXR3b3JrIHRpbWVvdXQgZnJvbSBjb24gb2JqZWN0Ci0JICAgIHRyeSB7Ci0JICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj4+PiBjb24uZ2V0TmV0d29ya1RpbWVvdXQ9IiArIGNvbi5nZXROZXR3b3JrVGltZW91dCgpKTsKLQkgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKLQkJcGFzc2VkID0gdHJ1ZTsKLQkJLy9FeHBlY3RlZCBhcyB0aGlzIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiBkZXJieSAxMC44IGpkYmM0MSBkcml2ZXIKLQkgICAgfQorICAgICAgICAvL3RyeSBnZXR0aW5nIG5ldHdvcmsgdGltZW91dCBmcm9tIGNvbiBvYmplY3QKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPj4+IGNvbi5nZXROZXR3b3JrVGltZW91dD0iICsgY29uLmdldE5ldHdvcmtUaW1lb3V0KCkpOworICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCkgeworICAgICAgICBwYXNzZWQgPSB0cnVlOworICAgICAgICAvL0V4cGVjdGVkIGFzIHRoaXMgaXMgbm90IGltcGxlbWVudGVkIGluIGRlcmJ5IDEwLjggamRiYzQxIGRyaXZlcgorICAgICAgICB9CiAKLQkgICAgLy9JbnZva2UgYWJvcnQgb24gY29uIG9iamVjdAotCSAgICB0aHJlYWRFeGVjdXRvci5zdWJtaXQodGFzazEpOwotCSAgICB0aHJlYWRFeGVjdXRvci5zdWJtaXQodGFzazIpOwotCSAgICBjb24uYWJvcnQodGhyZWFkRXhlY3V0b3IpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk1hcmtlZCBjb25uZWN0aW9uIGZvciBhYm9ydGluZy4uLiIpOwotCSAgICAKLQkgICAgLy9UcnkgdG8gdXNlIHRoZSBhYm9ydGVkIGNvbm5lY3Rpb24gdG8gY3JlYXRlIGEgc3RhdGVtZW50LiBzaG91bGQgZmFpbAotCSAgICB0cnkgewotCSAgICAgICAgY29uLmNyZWF0ZVN0YXRlbWVudCgpOwotCSAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBleCkgewotCQlwYXNzZWQgPSB0cnVlOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0aW5nIHN0YXRlbWVudCBmcm9tIGNvbiBhZnRlciB0eCBhYm9ydCA6IEZhaWxlZCA6IEV4cGVjdGVkIik7Ci0JICAgIH0KLQl9IGNhdGNoKEV4Y2VwdGlvbiBleCkgewotCSAgICBwYXNzZWQgPSBmYWxzZTsKLQl9IGZpbmFsbHkgewotCSAgICBpZiAoIHN0bXQgIT0gbnVsbCApIHsKLQkgICAgICAgIHRyeSB7IHN0bXQuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fSAgICAKLQkgICAgfQotCSAgICBpZiAoIGNvbiAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsgY29uLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30gICAgCi0JICAgIH0KLQkgICAgZm9yKGludCBpPTA7IGk8MzI7IGkrKykgewotCQlpZihjb25uc1tpXSAhPSBudWxsKSB7Ci0JCSAgICB0cnkgeyBjb25uc1tpXS5jbG9zZSgpOyB9IGNhdGNoKEV4Y2VwdGlvbiBleCkge30KLQkJfQotCSAgICB9Ci0JfQotCXJldHVybiBwYXNzZWQ7CisgICAgICAgIC8vSW52b2tlIGFib3J0IG9uIGNvbiBvYmplY3QKKyAgICAgICAgdGhyZWFkRXhlY3V0b3Iuc3VibWl0KHRhc2sxKTsKKyAgICAgICAgdGhyZWFkRXhlY3V0b3Iuc3VibWl0KHRhc2syKTsKKyAgICAgICAgY29uLmFib3J0KHRocmVhZEV4ZWN1dG9yKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNYXJrZWQgY29ubmVjdGlvbiBmb3IgYWJvcnRpbmcuLi4iKTsKKworICAgICAgICAvL1RyeSB0byB1c2UgdGhlIGFib3J0ZWQgY29ubmVjdGlvbiB0byBjcmVhdGUgYSBzdGF0ZW1lbnQuIHNob3VsZCBmYWlsCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIHBhc3NlZCA9IHRydWU7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRpbmcgc3RhdGVtZW50IGZyb20gY29uIGFmdGVyIHR4IGFib3J0IDogRmFpbGVkIDogRXhwZWN0ZWQiKTsKKyAgICAgICAgfQorICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmICggc3RtdCAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsgc3RtdC5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBjb24gIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7IGNvbi5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CisgICAgICAgIH0KKyAgICAgICAgZm9yKGludCBpPTA7IGk8MzI7IGkrKykgeworICAgICAgICBpZihjb25uc1tpXSAhPSBudWxsKSB7CisgICAgICAgICAgICB0cnkgeyBjb25uc1tpXS5jbG9zZSgpOyB9IGNhdGNoKEV4Y2VwdGlvbiBleCkge30KKyAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBwYXNzZWQ7CiAgICAgfQogCiAgICAgLyoqCi0gICAgICogVGVzdGluZyBjb25uZWN0aW9uIG9iamVjdCBpbiBhIFVzZXIgdHJhbnNhY3Rpb24gCisgICAgICogVGVzdGluZyBjb25uZWN0aW9uIG9iamVjdCBpbiBhIFVzZXIgdHJhbnNhY3Rpb24KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MigpIHRocm93cyBFeGNlcHRpb24gewotCUNvbm5lY3Rpb24gY29uID0gbnVsbDsKLQlDb25uZWN0aW9uW10gY29ubnMgPSBuZXcgQ29ubmVjdGlvblszMl07Ci0JQ29ubmVjdGlvbltdIGNvbm5zMSA9IG5ldyBDb25uZWN0aW9uWzMyXTsKLQlTdGF0ZW1lbnRbXSBzdG10czEgPSBuZXcgU3RhdGVtZW50WzMyXTsKLQlTdGF0ZW1lbnQgc3RtdCA9IG51bGw7Ci0JYm9vbGVhbiBwYXNzZWQgPSB0cnVlOwotCXRyeSB7Ci0JICAgIFVzZXJUcmFuc2FjdGlvbiB1c2VydHggPSAoVXNlclRyYW5zYWN0aW9uKSBjdHh0Xy5nZXRVc2VyVHJhbnNhY3Rpb24oKTsKKyAgICBDb25uZWN0aW9uIGNvbiA9IG51bGw7CisgICAgQ29ubmVjdGlvbltdIGNvbm5zID0gbmV3IENvbm5lY3Rpb25bMzJdOworICAgIENvbm5lY3Rpb25bXSBjb25uczEgPSBuZXcgQ29ubmVjdGlvblszMl07CisgICAgU3RhdGVtZW50W10gc3RtdHMxID0gbmV3IFN0YXRlbWVudFszMl07CisgICAgU3RhdGVtZW50IHN0bXQgPSBudWxsOworICAgIGJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKKyAgICB0cnkgeworICAgICAgICBVc2VyVHJhbnNhY3Rpb24gdXNlcnR4ID0gKFVzZXJUcmFuc2FjdGlvbikgY3R4dF8uZ2V0VXNlclRyYW5zYWN0aW9uKCk7CiAgICAgICAgICAgICB1c2VydHguYmVnaW4oKTsKLQkgICAgY29uID0gZHMuZ2V0Q29ubmVjdGlvbigic2NvdHQiLCAidGlnZXIiKTsKLQkgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIiEhISEgVEVTVDIgQ29uSGFzaGNvZGU9IiArICgoKGNvbS5zdW4uYXBwc2Vydi5qZGJjLkRhdGFTb3VyY2UpZHMpLmdldENvbm5lY3Rpb24oY29uKSkuaGFzaENvZGUoKSk7Ci0JICAgIHN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oInNjb3R0IiwgInRpZ2VyIik7CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCIhISEhIFRFU1QyIENvbkhhc2hjb2RlPSIgKyAoKChjb20uc3VuLmFwcHNlcnYuamRiYy5EYXRhU291cmNlKWRzKS5nZXRDb25uZWN0aW9uKGNvbikpLmhhc2hDb2RlKCkpOworICAgICAgICBzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOwogCi0JICAgIC8vSW52b2tlIGFib3J0IG9uIGNvbiBvYmplY3QKLQkgICAgdGhyZWFkRXhlY3V0b3Iuc3VibWl0KHRhc2sxKTsKLQkgICAgdGhyZWFkRXhlY3V0b3Iuc3VibWl0KHRhc2syKTsKLQkgICAgY29uLmFib3J0KHRocmVhZEV4ZWN1dG9yKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJNYXJrZWQgY29ubmVjdGlvbiBmb3IgYWJvcnRpbmcuLi4iKTsKLQkgICAgCi0JICAgIC8vT3BlcmF0aW9ucyBvbiBjb24gb2JqZWN0IGFmdGVyIG1hcmtpbmcgZm9yIGFib3J0IGluIGEgdHgKLQkgICAgLy9iZWZvcmUgdHggY29tbWl0LCBhbGwgb3BlcmF0aW9ucyBvbiBjb24gcGFzcworICAgICAgICAvL0ludm9rZSBhYm9ydCBvbiBjb24gb2JqZWN0CisgICAgICAgIHRocmVhZEV4ZWN1dG9yLnN1Ym1pdCh0YXNrMSk7CisgICAgICAgIHRocmVhZEV4ZWN1dG9yLnN1Ym1pdCh0YXNrMik7CisgICAgICAgIGNvbi5hYm9ydCh0aHJlYWRFeGVjdXRvcik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTWFya2VkIGNvbm5lY3Rpb24gZm9yIGFib3J0aW5nLi4uIik7CisKKyAgICAgICAgLy9PcGVyYXRpb25zIG9uIGNvbiBvYmplY3QgYWZ0ZXIgbWFya2luZyBmb3IgYWJvcnQgaW4gYSB0eAorICAgICAgICAvL2JlZm9yZSB0eCBjb21taXQsIGFsbCBvcGVyYXRpb25zIG9uIGNvbiBwYXNzCiAgICAgICAgICAgICAvL1RyeSBnZXR0aW5nIHNjaGVtYSBmcm9tIGNvbiBvYmplY3QKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCI+Pj4gY29uLmdldFNjaGVtYSgpPSIgKyBjb24uZ2V0U2NoZW1hKCkpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj4+PiBjb24uZ2V0U2NoZW1hKCk9IiArIGNvbi5nZXRTY2hlbWEoKSk7CiAKLQkgICAgLy90cnkgZ2V0dGluZyBuZXR3b3JrIHRpbWVvdXQgZnJvbSBjb24gb2JqZWN0Ci0JICAgIHRyeSB7Ci0JICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj4+PiBjb24uZ2V0TmV0d29ya1RpbWVvdXQ9IiArIGNvbi5nZXROZXR3b3JrVGltZW91dCgpKTsKLQkgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKLQkJcGFzc2VkID0gdHJ1ZTsKLQkJLy9FeHBlY3RlZCBhcyB0aGlzIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiBkZXJieSAxMC44IGpkYmM0MSBkcml2ZXIKLQkgICAgfQorICAgICAgICAvL3RyeSBnZXR0aW5nIG5ldHdvcmsgdGltZW91dCBmcm9tIGNvbiBvYmplY3QKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPj4+IGNvbi5nZXROZXR3b3JrVGltZW91dD0iICsgY29uLmdldE5ldHdvcmtUaW1lb3V0KCkpOworICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCkgeworICAgICAgICBwYXNzZWQgPSB0cnVlOworICAgICAgICAvL0V4cGVjdGVkIGFzIHRoaXMgaXMgbm90IGltcGxlbWVudGVkIGluIGRlcmJ5IDEwLjggamRiYzQxIGRyaXZlcgorICAgICAgICB9CiAKLQkgICAgdXNlcnR4LmNvbW1pdCgpOworICAgICAgICB1c2VydHguY29tbWl0KCk7CiAKLQkgICAgLy9UcnkgdG8gdXNlIHRoZSBhYm9ydGVkIGNvbm5lY3Rpb24gdG8gY3JlYXRlIGEgc3RhdGVtZW50LiBzaG91bGQgZmFpbAotCSAgICB0cnkgewotCSAgICAgICAgY29uLmNyZWF0ZVN0YXRlbWVudCgpOwotCSAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBleCkgewotCQlwYXNzZWQgPSB0cnVlOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0aW5nIHN0YXRlbWVudCBmcm9tIGNvbiBhZnRlciB0eCBhYm9ydCA6IEZhaWxlZCA6IEV4cGVjdGVkIik7Ci0JICAgIH0KLQl9IGNhdGNoKEV4Y2VwdGlvbiBleCkgewotCSAgICBwYXNzZWQgPSBmYWxzZTsKLQl9IGZpbmFsbHkgewotCSAgICBpZiAoIHN0bXQgIT0gbnVsbCApIHsKLQkgICAgICAgIHRyeSB7IHN0bXQuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fSAgICAKLQkgICAgfQotCSAgICBpZiAoIGNvbiAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsgY29uLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30gICAgCi0JICAgIH0KLQkgICAgLy9UZXN0IHRvIGdldCAobWF4IHBvb2wgc2l6ZS0xKSBuby4gb2YgY29ubmVjdGlvbnMgYWZ0ZXIgYSBwcmV2aW91cyBhYm9ydC4KLQkgICAgLy9zaG91bGQgcGFzcyBhcyB0aGUgYWJvcnRlZCBjb25uZWN0aW9uIGlzIGRlc3Ryb3llZAotCSAgICBmb3IoaW50IGk9MDsgaTwzMjsgaSsrKSB7Ci0JCWlmKGkgPT0gMzEpIHsKLQkJICAgIC8vTGFzdCBjb25uZWN0aW9uIHNob3VsZCBub3QgYmUgZ290Ci0JCSAgICB0cnkgewotCQkJY29ubnMxW2ldID0gZHMuZ2V0Q29ubmVjdGlvbigic2NvdHQiLCAidGlnZXIiKTsKLQkJICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7Ci0JCQlwYXNzZWQgPSB0cnVlOwotCQkgICAgfQotCQl9IGVsc2UgeworICAgICAgICAvL1RyeSB0byB1c2UgdGhlIGFib3J0ZWQgY29ubmVjdGlvbiB0byBjcmVhdGUgYSBzdGF0ZW1lbnQuIHNob3VsZCBmYWlsCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIHBhc3NlZCA9IHRydWU7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRpbmcgc3RhdGVtZW50IGZyb20gY29uIGFmdGVyIHR4IGFib3J0IDogRmFpbGVkIDogRXhwZWN0ZWQiKTsKKyAgICAgICAgfQorICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmICggc3RtdCAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsgc3RtdC5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBjb24gIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7IGNvbi5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CisgICAgICAgIH0KKyAgICAgICAgLy9UZXN0IHRvIGdldCAobWF4IHBvb2wgc2l6ZS0xKSBuby4gb2YgY29ubmVjdGlvbnMgYWZ0ZXIgYSBwcmV2aW91cyBhYm9ydC4KKyAgICAgICAgLy9zaG91bGQgcGFzcyBhcyB0aGUgYWJvcnRlZCBjb25uZWN0aW9uIGlzIGRlc3Ryb3llZAorICAgICAgICBmb3IoaW50IGk9MDsgaTwzMjsgaSsrKSB7CisgICAgICAgIGlmKGkgPT0gMzEpIHsKKyAgICAgICAgICAgIC8vTGFzdCBjb25uZWN0aW9uIHNob3VsZCBub3QgYmUgZ290CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgY29ubnMxW2ldID0gZHMuZ2V0Q29ubmVjdGlvbigic2NvdHQiLCAidGlnZXIiKTsKKyAgICAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICBwYXNzZWQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBjb25uczFbaV0gPSBkcy5nZXRDb25uZWN0aW9uKCJzY290dCIsICJ0aWdlciIpOwotCQkgICAgc3RtdHMxW2ldID0gY29ubnMxW2ldLmNyZWF0ZVN0YXRlbWVudCgpOwotCQl9Ci0JICAgIH0KLQkgICAgZm9yKGludCBpPTA7IGk8MzI7IGkrKykgewotCQlpZihzdG10czFbaV0gIT0gbnVsbCkgewotCQkgICAgdHJ5IHsgc3RtdHMxW2ldLmNsb3NlKCk7IH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7fQotCQl9Ci0JICAgIH0KLQkgICAgZm9yKGludCBpPTA7IGk8MzI7IGkrKykgewotCQlpZihjb25uczFbaV0gIT0gbnVsbCkgewotCQkgICAgdHJ5IHsgY29ubnMxW2ldLmNsb3NlKCk7IH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7fQotCQl9Ci0JICAgIH0KLQl9Ci0JcmV0dXJuIHBhc3NlZDsKKyAgICAgICAgICAgIHN0bXRzMVtpXSA9IGNvbm5zMVtpXS5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZvcihpbnQgaT0wOyBpPDMyOyBpKyspIHsKKyAgICAgICAgaWYoc3RtdHMxW2ldICE9IG51bGwpIHsKKyAgICAgICAgICAgIHRyeSB7IHN0bXRzMVtpXS5jbG9zZSgpOyB9IGNhdGNoKEV4Y2VwdGlvbiBleCkge30KKyAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZvcihpbnQgaT0wOyBpPDMyOyBpKyspIHsKKyAgICAgICAgaWYoY29ubnMxW2ldICE9IG51bGwpIHsKKyAgICAgICAgICAgIHRyeSB7IGNvbm5zMVtpXS5jbG9zZSgpOyB9IGNhdGNoKEV4Y2VwdGlvbiBleCkge30KKyAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBwYXNzZWQ7CiAgICAgfQogCiAgICAgLy9UZXN0cyBEYXRhYmFzZU1ldGFEYXRhCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQlDb25uZWN0aW9uIGNvbiA9IG51bGw7Ci0JRGF0YWJhc2VNZXRhRGF0YSBkbWQgPSBudWxsOwotCWJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKLQl0cnkgewotCSAgICBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCJzY290dCIsICJ0aWdlciIpOwotCSAgICBkbWQgPSBjb24uZ2V0TWV0YURhdGEoKTsKLQkgICAgLy9UZXN0aW5nIERhdGFiYXNlTWV0YURhdGEKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCI+Pj4gZG1kLmdlbmVyYXRlZEtleUFsd2F5c1JldHVybmVkKCk9IiArIGRtZC5nZW5lcmF0ZWRLZXlBbHdheXNSZXR1cm5lZCgpKTsKLQl9IGNhdGNoKEV4Y2VwdGlvbiBleCkgewotCSAgICBwYXNzZWQgPSBmYWxzZTsKLQl9IGZpbmFsbHkgewotCSAgICBpZihjb24hPSBudWxsKSB7Ci0JCXRyeSB7IGNvbi5jbG9zZSgpOyB9IGNhdGNoKEV4Y2VwdGlvbiBleCkge30KLQkgICAgfQotCX0KLQlyZXR1cm4gcGFzc2VkOworICAgIENvbm5lY3Rpb24gY29uID0gbnVsbDsKKyAgICBEYXRhYmFzZU1ldGFEYXRhIGRtZCA9IG51bGw7CisgICAgYm9vbGVhbiBwYXNzZWQgPSB0cnVlOworICAgIHRyeSB7CisgICAgICAgIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oInNjb3R0IiwgInRpZ2VyIik7CisgICAgICAgIGRtZCA9IGNvbi5nZXRNZXRhRGF0YSgpOworICAgICAgICAvL1Rlc3RpbmcgRGF0YWJhc2VNZXRhRGF0YQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj4+PiBkbWQuZ2VuZXJhdGVkS2V5QWx3YXlzUmV0dXJuZWQoKT0iICsgZG1kLmdlbmVyYXRlZEtleUFsd2F5c1JldHVybmVkKCkpOworICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmKGNvbiE9IG51bGwpIHsKKyAgICAgICAgdHJ5IHsgY29uLmNsb3NlKCk7IH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7fQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBwYXNzZWQ7CiAgICAgfQogCiAgICAgLyoqCiAgICAgICogVGVzdGluZyBTdGF0ZW1lbnQgb2JqZWN0IHdpdGhpbiBhIHRyYW5zYWN0aW9uCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQlDb25uZWN0aW9uIGNvbm4xID0gbnVsbDsKLQlTdGF0ZW1lbnQgc3RtdDEgPSBudWxsOwotCVJlc3VsdFNldCByczEgPSBudWxsOwotCWJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKKyAgICBDb25uZWN0aW9uIGNvbm4xID0gbnVsbDsKKyAgICBTdGF0ZW1lbnQgc3RtdDEgPSBudWxsOworICAgIFJlc3VsdFNldCByczEgPSBudWxsOworICAgIGJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKIAotCS8vTm93IHRyeSBnZXR0aW5nIGEgY29ubmVjdGlvbiBhZ2FpbiwgYnV0IHdpdGhpbiBhIHRyYW5zYWN0aW9uCi0JaW50IHNpemUgPSAwOwotCXRyeSB7Ci0JICAgIGNyZWF0ZVRhYmxlKCk7Ci0JICAgIFVzZXJUcmFuc2FjdGlvbiB0eCA9IChVc2VyVHJhbnNhY3Rpb24pIGN0eHRfLmdldFVzZXJUcmFuc2FjdGlvbigpOwotCSAgICB0eC5iZWdpbigpOwotCSAgICBjb25uMSA9IGRzLmdldENvbm5lY3Rpb24oInNjb3R0IiwgInRpZ2VyIik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiISEhISBURVNUNCBDb25IYXNoY29kZT0iICsgKCgoY29tLnN1bi5hcHBzZXJ2LmpkYmMuRGF0YVNvdXJjZSlkcykuZ2V0Q29ubmVjdGlvbihjb25uMSkpLmhhc2hDb2RlKCkpOwotCSAgICBzdG10MSA9IGNvbm4xLmNyZWF0ZVN0YXRlbWVudCgpOwotCSAgICBpbnNlcnRSb3coc3RtdDEpOwotICAgICAgICAgICAgCi0JICAgIHRocmVhZEV4ZWN1dG9yLnN1Ym1pdCh0YXNrMSk7CisgICAgLy9Ob3cgdHJ5IGdldHRpbmcgYSBjb25uZWN0aW9uIGFnYWluLCBidXQgd2l0aGluIGEgdHJhbnNhY3Rpb24KKyAgICBpbnQgc2l6ZSA9IDA7CisgICAgdHJ5IHsKKyAgICAgICAgY3JlYXRlVGFibGUoKTsKKyAgICAgICAgVXNlclRyYW5zYWN0aW9uIHR4ID0gKFVzZXJUcmFuc2FjdGlvbikgY3R4dF8uZ2V0VXNlclRyYW5zYWN0aW9uKCk7CisgICAgICAgIHR4LmJlZ2luKCk7CisgICAgICAgIGNvbm4xID0gZHMuZ2V0Q29ubmVjdGlvbigic2NvdHQiLCAidGlnZXIiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIhISEhIFRFU1Q0IENvbkhhc2hjb2RlPSIgKyAoKChjb20uc3VuLmFwcHNlcnYuamRiYy5EYXRhU291cmNlKWRzKS5nZXRDb25uZWN0aW9uKGNvbm4xKSkuaGFzaENvZGUoKSk7CisgICAgICAgIHN0bXQxID0gY29ubjEuY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgIGluc2VydFJvdyhzdG10MSk7CisKKyAgICAgICAgdGhyZWFkRXhlY3V0b3Iuc3VibWl0KHRhc2sxKTsKICAgICAgICAgICAgIHRocmVhZEV4ZWN1dG9yLnN1Ym1pdCh0YXNrMik7CiAKLQkgICAgLy9UZXN0aW5nIFN0YXRlbWVudCBvYmplY3QKLQkgICAgc3RtdDEuY2xvc2VPbkNvbXBsZXRpb24oKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCI+Pj4gc3RtdDEuaXNDbG9zZU9uQ29tcGxldGlvbigpPSIgKyBzdG10MS5pc0Nsb3NlT25Db21wbGV0aW9uKCkpOwotCSAgICAKKyAgICAgICAgLy9UZXN0aW5nIFN0YXRlbWVudCBvYmplY3QKKyAgICAgICAgc3RtdDEuY2xvc2VPbkNvbXBsZXRpb24oKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI+Pj4gc3RtdDEuaXNDbG9zZU9uQ29tcGxldGlvbigpPSIgKyBzdG10MS5pc0Nsb3NlT25Db21wbGV0aW9uKCkpOworCiAgICAgICAgICAgICBjb25uMS5hYm9ydCh0aHJlYWRFeGVjdXRvcik7CiAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJNYXJrZWQgY29ubmVjdGlvbiBmb3IgYWJvcnRpbmcuLi4iKTsKLQkgICAgaW5zZXJ0Um93KHN0bXQxKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNYXJrZWQgY29ubmVjdGlvbiBmb3IgYWJvcnRpbmcuLi4iKTsKKyAgICAgICAgaW5zZXJ0Um93KHN0bXQxKTsKIAotCSAgICAvL0FmdGVyIGNvbiBhYm9ydCAod2l0aGluIHRoZSB0eCkgCi0JICAgIHNpemUgPSBnZXRDb3VudChzdG10MSk7CisgICAgICAgIC8vQWZ0ZXIgY29uIGFib3J0ICh3aXRoaW4gdGhlIHR4KQorICAgICAgICBzaXplID0gZ2V0Q291bnQoc3RtdDEpOwogCi0JICAgIGlmKHNpemUgIT0gMikgewotCQlwYXNzZWQgPSBmYWxzZTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJGQUlMRUQgYXMgc2l6ZSE9IDIiKTsKLQkgICAgfQorICAgICAgICBpZihzaXplICE9IDIpIHsKKyAgICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRkFJTEVEIGFzIHNpemUhPSAyIik7CisgICAgICAgIH0KIAotCSAgICB0eC5jb21taXQoKTsKKyAgICAgICAgdHguY29tbWl0KCk7CiAKLQkgICAgdHJ5IHsKLQkgICAgICAgIC8vQWZ0ZXIgdHggY29tbWl0LCBpbnNlcnQgZGF0YS4gU2hvdWxkIGZhaWwgYmVjYXVzZSBvZiBubyBjdXJyZW50IGNvbm5lY3Rpb24KLQkJaW5zZXJ0Um93KHN0bXQxKTsKLQkgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gZXgpIHsKLQkJcGFzc2VkID0gdHJ1ZTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJUcnlpbmcgdG8gaW5zZXJ0IGRhdGEgYWZ0ZXIgYSB0eCBjb21taXQgKHByZXYuIGNvbm4gYWJvcnQpOiBGYWlsZWQgd2l0aCA6ICIgKyBleCArICIgRXhwZWN0ZWQuIik7Ci0JICAgIH0KLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgIHBhc3NlZCA9IGZhbHNlOwotCX0gZmluYWxseSB7Ci0JICAgIGlmIChyczEgIT0gbnVsbCApIHsKLQkgICAgICAgIHRyeSB7IHJzMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQotCSAgICB9Ci0JICAgIGlmICggc3RtdDEgIT0gbnVsbCApIHsKLQkgICAgICAgIHRyeSB7IHN0bXQxLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30gICAgCi0JICAgIH0KLQkgICAgaWYgKCBjb25uMSAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fSAgICAKLQkgICAgfQotCX0KLQlyZXR1cm4gcGFzc2VkOworICAgICAgICB0cnkgeworICAgICAgICAgICAgLy9BZnRlciB0eCBjb21taXQsIGluc2VydCBkYXRhLiBTaG91bGQgZmFpbCBiZWNhdXNlIG9mIG5vIGN1cnJlbnQgY29ubmVjdGlvbgorICAgICAgICBpbnNlcnRSb3coc3RtdDEpOworICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBleCkgeworICAgICAgICBwYXNzZWQgPSB0cnVlOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRyeWluZyB0byBpbnNlcnQgZGF0YSBhZnRlciBhIHR4IGNvbW1pdCAocHJldi4gY29ubiBhYm9ydCk6IEZhaWxlZCB3aXRoIDogIiArIGV4ICsgIiBFeHBlY3RlZC4iKTsKKyAgICAgICAgfQorICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKHJzMSAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsgcnMxLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBzdG10MSAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsgc3RtdDEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQorICAgICAgICB9CisgICAgICAgIGlmICggY29ubjEgIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7IGNvbm4xLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcGFzc2VkOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBjcmVhdGVUYWJsZSgpIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgICBTdHJpbmcgdGFibGVOYW1lID0gIkpEQkM0MSI7Ci0gICAgICAgIAorCiAgICAgICAgIENvbm5lY3Rpb24gY29uID0gbnVsbDsKICAgICAgICAgU3RhdGVtZW50IHN0bXQgPSBudWxsOwogICAgICAgICBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCJzY290dCIsICJ0aWdlciIpOwogICAgICAgICBzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOwotICAgICAgICAKKwogICAgICAgICB0cnl7CiAgICAgICAgICAgICBzdG10LmV4ZWN1dGVVcGRhdGUoImRyb3AgdGFibGUgIiArIHRhYmxlTmFtZSk7CiAgICAgICAgIH1jYXRjaChFeGNlcHRpb24gZXgpewpAQCAtMzA1LDEyICszMDUsMTIgQEAKICAgICAgICAgc3RtdC5jbG9zZSgpOwogICAgICAgICBjb24uY2xvc2UoKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgaW5zZXJ0Um93KFN0YXRlbWVudCBzdG10KSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgICAgU3RyaW5nIHRhYmxlTmFtZSA9ICJKREJDNDEiOwogICAgICAgICBzdG10LmV4ZWN1dGVVcGRhdGUoIklOU0VSVCBJTlRPICIgKyB0YWJsZU5hbWUgKyAiIHZhbHVlcyAoMTAwLCAnQ09GRkVFJykiKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIGludCBnZXRDb3VudChTdGF0ZW1lbnQgc3RtdCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICAgIFN0cmluZyB0YWJsZU5hbWUgPSAiSkRCQzQxIjsKICAgICAgICAgUmVzdWx0U2V0IHJzID0gbnVsbDsKQEAgLTMyMCw3ICszMjAsNyBAQAogICAgICAgICBycy5jbG9zZSgpOwogICAgICAgICByZXR1cm4gY291bnQ7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHt9CiAgICAgcHVibGljIHZvaWQgZWpiU3RvcmUoKSB7fQogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHt9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmM0MS1kZXZ0ZXN0cy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmM0MS1kZXZ0ZXN0cy9idWlsZC54bWwKaW5kZXggMDI1ODBhMi4uYTZiMTM3NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjNDEtZGV2dGVzdHMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiYzQxLWRldnRlc3RzL2J1aWxkLnhtbApAQCAtMzQsMTUgKzM0LDE1IEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LkFQU19IT01FfSIgaW5jbHVkZXM9InRlc3RfcmVzdWx0cyoiLz4KICAgICAgICAgPC9kZWxldGU+CiAgICAgICAgIDxkZWxldGU+Ci0JICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuQVBTX0hPTUV9IiBpbmNsdWRlcz0iSkRCQzQxdGVzdF9yZXN1bHRzLmh0bWwiLz4KKyAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5BUFNfSE9NRX0iIGluY2x1ZGVzPSJKREJDNDF0ZXN0X3Jlc3VsdHMuaHRtbCIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4tdGVzdHMiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InJlcG9ydC00MSIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0icmVwb3J0LTQxIi8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi10ZXN0cyI+CiAgICAgICAgIDxhbnQgZGlyPSJiYXNpYyIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0iY2xvc2VvbmNvbXBsZXRpb24uc3RtdGNhY2hpbmciIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9ImNsb3Nlb25jb21wbGV0aW9uLnN0bXRjYWNoaW5nIiB0YXJnZXQ9ImFsbCIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZXBvcnQtNDEiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjNDEtZGV2dGVzdHMvY2xvc2VvbmNvbXBsZXRpb24uc3RtdGNhY2hpbmcvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiYzQxLWRldnRlc3RzL2Nsb3Nlb25jb21wbGV0aW9uLnN0bXRjYWNoaW5nL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMjIxMzUyMS4uM2RmZWViZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjNDEtZGV2dGVzdHMvY2xvc2VvbmNvbXBsZXRpb24uc3RtdGNhY2hpbmcvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmM0MS1kZXZ0ZXN0cy9jbG9zZW9uY29tcGxldGlvbi5zdG10Y2FjaGluZy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOSArMTUsMTkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImpkYmM0MS1jbG9zZS1vbi1jb21wbGV0aW9uIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIxMiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjNDEtZGV2dGVzdHMvY2xvc2VvbmNvbXBsZXRpb24uc3RtdGNhY2hpbmcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjNDEtZGV2dGVzdHMvY2xvc2VvbmNvbXBsZXRpb24uc3RtdGNhY2hpbmcvYnVpbGQueG1sCmluZGV4IDE3YWI4MzYuLjhlMjFiZWUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiYzQxLWRldnRlc3RzL2Nsb3Nlb25jb21wbGV0aW9uLnN0bXRjYWNoaW5nL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmM0MS1kZXZ0ZXN0cy9jbG9zZW9uY29tcGxldGlvbi5zdG10Y2FjaGluZy9idWlsZC54bWwKQEAgLTE5LDkgKzE5LDkgQEAKIC0tPgogCiA8IUVOVElUWSBjb21tb25TZXR1cCBTWVNURU0gIi4vLi4vLi4vLi4vLi4vY29uZmlnL3Byb3BlcnRpZXMueG1sIj4KLQk8IUVOVElUWSBjb21tb25CdWlsZCBTWVNURU0gIi4vLi4vLi4vLi4vLi4vY29uZmlnL2NvbW1vbi54bWwiPgorICAgIDwhRU5USVRZIGNvbW1vbkJ1aWxkIFNZU1RFTSAiLi8uLi8uLi8uLi8uLi9jb25maWcvY29tbW9uLnhtbCI+CiAgICAgICAgIDwhRU5USVRZIHRlc3Rwcm9wZXJ0aWVzIFNZU1RFTSAiLi9idWlsZC5wcm9wZXJ0aWVzIj4KLQk8IUVOVElUWSBydW4gU1lTVEVNICIuLy4uLy4uLy4uLy4uL2NvbmZpZy9ydW4ueG1sIj4KKyAgICA8IUVOVElUWSBydW4gU1lTVEVNICIuLy4uLy4uLy4uLy4uL2NvbmZpZy9ydW4ueG1sIj4KICAgICAgICAgXT4KIAogPHByb2plY3QgbmFtZT0iamRiYzQxLWNsb3NlLW9uLWNvbXBsZXRpb24iIGRlZmF1bHQ9InVzYWdlIiBiYXNlZGlyPSIuIj4KQEAgLTY5LDcgKzY5LDcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQk8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgICA8L2FudGNhbGw+CiAKQEAgLTkyLDEzICs5MiwxMyBAQAogCiAKIAotCTxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgorICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgogICAgICAgICAgICAgICAgICAgIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy1zdG10Y2FjaGluZy1wb29sLnN0YXRlbWVudF9jYWNoZV9zaXplPTUiLz4KLQk8L2FudGNhbGw+CisgICAgPC9hbnRjYWxsPgogCi0JPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLXN0bXRjYWNoaW5nLXBvb2wud3JhcF9qZGJjX29iamVjdHM9dHJ1ZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjNDEtZGV2dGVzdHMvY2xvc2VvbmNvbXBsZXRpb24uc3RtdGNhY2hpbmcvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmM0MS1kZXZ0ZXN0cy9jbG9zZW9uY29tcGxldGlvbi5zdG10Y2FjaGluZy9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbAppbmRleCBhMzBkZTdmLi5hNjFkZjE3IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmM0MS1kZXZ0ZXN0cy9jbG9zZW9uY29tcGxldGlvbi5zdG10Y2FjaGluZy9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmM0MS1kZXZ0ZXN0cy9jbG9zZW9uY29tcGxldGlvbi5zdG10Y2FjaGluZy9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbApAQCAtMjgsNyArMjgsNyBAQAogICAgICAgICA8ZWpiPmpkYmM0MS1jbG9zZS1vbi1jb21wbGV0aW9uLWVqYi5qYXI8L2VqYj4KICAgICA8L21vZHVsZT4KICAgICA8bW9kdWxlPgotCTxqYXZhPmpkYmM0MS1jbG9zZS1vbi1jb21wbGV0aW9uLWNsaWVudC5qYXI8L2phdmE+CisgICAgPGphdmE+amRiYzQxLWNsb3NlLW9uLWNvbXBsZXRpb24tY2xpZW50LmphcjwvamF2YT4KICAgICA8L21vZHVsZT4KIDwvYXBwbGljYXRpb24+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiYzQxLWRldnRlc3RzL2Nsb3Nlb25jb21wbGV0aW9uLnN0bXRjYWNoaW5nL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjNDEtZGV2dGVzdHMvY2xvc2VvbmNvbXBsZXRpb24uc3RtdGNhY2hpbmcvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKaW5kZXggODBjYzI2Yy4uMzJhNzU0MCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjNDEtZGV2dGVzdHMvY2xvc2VvbmNvbXBsZXRpb24uc3RtdGNhY2hpbmcvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjNDEtZGV2dGVzdHMvY2xvc2VvbmNvbXBsZXRpb24uc3RtdGNhY2hpbmcvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKQEAgLTI3LDcgKzI3LDcgQEAKICAgICAgICAgICAgIDxqbmRpLW5hbWU+Y29tLnN1bi5zMWFzZGV2LmpkYmMuc3RtdGNhY2hpbmcuZWpiLlNpbXBsZUJNUEhvbWU8L2puZGktbmFtZT4KICAgICAgICAgICAgIDxyZXNvdXJjZS1yZWY+CiAgICAgICAgICAgICAgICAgPHJlcy1yZWYtbmFtZT5EYXRhU291cmNlPC9yZXMtcmVmLW5hbWU+Ci0JCTxqbmRpLW5hbWU+amRiYy9qZGJjLXN0bXRjYWNoaW5nLXJlczwvam5kaS1uYW1lPgorICAgICAgICA8am5kaS1uYW1lPmpkYmMvamRiYy1zdG10Y2FjaGluZy1yZXM8L2puZGktbmFtZT4KICAgICAgICAgICAgICAgICA8ZGVmYXVsdC1yZXNvdXJjZS1wcmluY2lwYWw+CiAgICAgICAgICAgICAgICAgICAgIDxuYW1lPkRCVVNFUjwvbmFtZT4KICAgICAgICAgICAgICAgICAgICAgPHBhc3N3b3JkPkRCUEFTU1dPUkQ8L3Bhc3N3b3JkPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjNDEtZGV2dGVzdHMvY2xvc2VvbmNvbXBsZXRpb24uc3RtdGNhY2hpbmcvZWpiL1NpbXBsZUJNUEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiYzQxLWRldnRlc3RzL2Nsb3Nlb25jb21wbGV0aW9uLnN0bXRjYWNoaW5nL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKaW5kZXggNzQ0NTI3Mi4uNzQ2ZTQxYyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjNDEtZGV2dGVzdHMvY2xvc2VvbmNvbXBsZXRpb24uc3RtdGNhY2hpbmcvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmM0MS1kZXZ0ZXN0cy9jbG9zZW9uY29tcGxldGlvbi5zdG10Y2FjaGluZy9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCkBAIC0zOSw0MyArMzksNDMgQEAKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0Q2xvc2VPbkNvbXBsZXRpb24oKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJjbG9zZU9uQ29tcGxldGlvbiBKREJDIDQxIHRlc3QgU3RhcnQiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNsb3NlT25Db21wbGV0aW9uIEpEQkMgNDEgdGVzdCBTdGFydCIpOwogICAgICAgICBDb25uZWN0aW9uIGNvbm4gPSBudWxsOwogICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBzdG10ID0gbnVsbDsKICAgICAgICAgU3RyaW5nIHRhYmxlTmFtZSA9ICJjdXN0b21lcl9zdG10X3dyYXBwZXIiOwotCVJlc3VsdFNldCBycyA9IG51bGw7Ci0JUmVzdWx0U2V0IHJzMSA9IG51bGw7CisgICAgUmVzdWx0U2V0IHJzID0gbnVsbDsKKyAgICBSZXN1bHRTZXQgcnMxID0gbnVsbDsKICAgICAgICAgYm9vbGVhbiBwYXNzZWQgPSB0cnVlOwotCXRyeSB7CisgICAgdHJ5IHsKICAgICAgICAgICAgIGNvbm4gPSBkcy5nZXRDb25uZWN0aW9uKCk7CiAgICAgICAgICAgICBzdG10ID0gY29ubi5wcmVwYXJlU3RhdGVtZW50KCJzZWxlY3QgKiBmcm9tICIrIHRhYmxlTmFtZSArIiB3aGVyZSBjX3Bob25lPSA/Iik7Ci0JICAgIHN0bXQuc2V0U3RyaW5nKDEsICJzaGFsIik7Ci0JICAgIHN0bXQuY2xvc2VPbkNvbXBsZXRpb24oKTsKLQkgICAgaWYoIXN0bXQuaXNDbG9zZU9uQ29tcGxldGlvbigpKSB7Ci0JCXBhc3NlZCA9IGZhbHNlOwotCSAgICB9Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPj4+IHN0bXQuaXNDbG9zZU9uQ29tcGxldGlvbigpPSIgKyBzdG10LmlzQ2xvc2VPbkNvbXBsZXRpb24oKSk7Ci0JICAgIHJzID0gc3RtdC5leGVjdXRlUXVlcnkoKTsKLQkgICAgcnMxID0gc3RtdC5leGVjdXRlUXVlcnkoKTsgLy9Hb3QgYSBzZWNvbmQgcnMgYnV0IG5vdCBjbG9zaW5nIGl0LgotCSAgICBycy5jbG9zZSgpOwotCSAgICAvL0FmdGVyIHRoaXMgdGhlIGlzQ2xvc2VkIHNob3VsZCBub3QgYmUgdHJ1ZSBhcyBhbm90aGVyIHJlc3VsdFNldCBpcyBzdGlsbCBvcGVuLgotCSAgICBpZihzdG10LmlzQ2xvc2VkKCkpewotCQlwYXNzZWQgPSBmYWxzZTsKLQkgICAgfQotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlbWVudCBjbG9zZWQ9IiArIHN0bXQuaXNDbG9zZWQoKSk7Ci0JICAgIHJzMS5jbG9zZSgpOwotCSAgICAvL0JvdGggdGhlIHJlc3VsdFNldHMgYXJlIGNsb3NlZC4gQXQgdGhpcyBzdGFnZSBpc0Nsb3NlZCBzaG91bGQgYmUgdHJ1ZS4KLQkgICAgaWYoIXN0bXQuaXNDbG9zZWQoKSl7Ci0JICAgICAgICBwYXNzZWQgPSBmYWxzZTsKLQkgICAgfQotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlbWVudCBjbG9zZWQ9IiArIHN0bXQuaXNDbG9zZWQoKSk7Ci0JICAgIHRyeSB7Ci0JICAgICAgICBSZXN1bHRTZXQgcnMyID0gc3RtdC5leGVjdXRlUXVlcnkoKTsKLQkJcnMyLmNsb3NlKCk7Ci0JICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIGV4KSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVtZW50IG9iamVjdCB1c2VkIGFmdGVyIGNsb3Nlb25jb21wbGV0aW9uIDogZXhjZXB0aW9uOiBleHBlY3RlZCIpOwotCQlwYXNzZWQgPSB0cnVlOwotCSAgICB9CisgICAgICAgIHN0bXQuc2V0U3RyaW5nKDEsICJzaGFsIik7CisgICAgICAgIHN0bXQuY2xvc2VPbkNvbXBsZXRpb24oKTsKKyAgICAgICAgaWYoIXN0bXQuaXNDbG9zZU9uQ29tcGxldGlvbigpKSB7CisgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPj4+IHN0bXQuaXNDbG9zZU9uQ29tcGxldGlvbigpPSIgKyBzdG10LmlzQ2xvc2VPbkNvbXBsZXRpb24oKSk7CisgICAgICAgIHJzID0gc3RtdC5leGVjdXRlUXVlcnkoKTsKKyAgICAgICAgcnMxID0gc3RtdC5leGVjdXRlUXVlcnkoKTsgLy9Hb3QgYSBzZWNvbmQgcnMgYnV0IG5vdCBjbG9zaW5nIGl0LgorICAgICAgICBycy5jbG9zZSgpOworICAgICAgICAvL0FmdGVyIHRoaXMgdGhlIGlzQ2xvc2VkIHNob3VsZCBub3QgYmUgdHJ1ZSBhcyBhbm90aGVyIHJlc3VsdFNldCBpcyBzdGlsbCBvcGVuLgorICAgICAgICBpZihzdG10LmlzQ2xvc2VkKCkpeworICAgICAgICBwYXNzZWQgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlbWVudCBjbG9zZWQ9IiArIHN0bXQuaXNDbG9zZWQoKSk7CisgICAgICAgIHJzMS5jbG9zZSgpOworICAgICAgICAvL0JvdGggdGhlIHJlc3VsdFNldHMgYXJlIGNsb3NlZC4gQXQgdGhpcyBzdGFnZSBpc0Nsb3NlZCBzaG91bGQgYmUgdHJ1ZS4KKyAgICAgICAgaWYoIXN0bXQuaXNDbG9zZWQoKSl7CisgICAgICAgICAgICBwYXNzZWQgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlbWVudCBjbG9zZWQ9IiArIHN0bXQuaXNDbG9zZWQoKSk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBSZXN1bHRTZXQgcnMyID0gc3RtdC5leGVjdXRlUXVlcnkoKTsKKyAgICAgICAgcnMyLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2goU1FMRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVtZW50IG9iamVjdCB1c2VkIGFmdGVyIGNsb3Nlb25jb21wbGV0aW9uIDogZXhjZXB0aW9uOiBleHBlY3RlZCIpOworICAgICAgICBwYXNzZWQgPSB0cnVlOworICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgcGFzc2VkID0gZmFsc2U7CkBAIC04NCwxMiArODQsMTIgQEAKICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICBjb25uLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUxKSB7fQotICAgICAgICAgICAgfSAKLQl9Ci0JU3lzdGVtLm91dC5wcmludGxuKCJjbG9zZU9uQ29tcGxldGlvbiBKREJDIDQxIHRlc3QgRW5kIik7Ci0JcmV0dXJuIHBhc3NlZDsKKyAgICAgICAgICAgIH0KICAgICB9Ci0gICAgCisgICAgU3lzdGVtLm91dC5wcmludGxuKCJjbG9zZU9uQ29tcGxldGlvbiBKREJDIDQxIHRlc3QgRW5kIik7CisgICAgcmV0dXJuIHBhc3NlZDsKKyAgICB9CisKICAgICBwdWJsaWMgdm9pZCBlamJMb2FkKCkgewogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjNDEtZGV2dGVzdHMvY2xvc2VvbmNvbXBsZXRpb24uc3RtdGNhY2hpbmcvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjNDEtZGV2dGVzdHMvY2xvc2VvbmNvbXBsZXRpb24uc3RtdGNhY2hpbmcvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IDQ5ZGI0YzEuLjFkNGNjZmQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiYzQxLWRldnRlc3RzL2Nsb3Nlb25jb21wbGV0aW9uLnN0bXRjYWNoaW5nL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmM0MS1kZXZ0ZXN0cy9jbG9zZW9uY29tcGxldGlvbi5zdG10Y2FjaGluZy9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsNyArMSw3IEBACi1kcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjsNCi1DUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQotSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyIFZBTFVFUygyLCAnc2hhbCcpOw0KK2Ryb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyOworQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlciAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCitJTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXIgVkFMVUVTKDIsICdzaGFsJyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmM0MS1kZXZ0ZXN0cy9jbG9zZW9uY29tcGxldGlvbi5zdG10Y2FjaGluZy9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjNDEtZGV2dGVzdHMvY2xvc2VvbmNvbXBsZXRpb24uc3RtdGNhY2hpbmcvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAppbmRleCBmMmNlNmU5Li5hYmZlMTQ5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmM0MS1kZXZ0ZXN0cy9jbG9zZW9uY29tcGxldGlvbi5zdG10Y2FjaGluZy9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiYzQxLWRldnRlc3RzL2Nsb3Nlb25jb21wbGV0aW9uLnN0bXRjYWNoaW5nL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEgKzEgQEAKLWRyb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyOw0KK2Ryb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjNDEtZGV2dGVzdHMvcmVwb3J0LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiYzQxLWRldnRlc3RzL3JlcG9ydC54bWwKaW5kZXggZDk2MmM1MC4uYjE4MzE3NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjNDEtZGV2dGVzdHMvcmVwb3J0LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmM0MS1kZXZ0ZXN0cy9yZXBvcnQueG1sCkBAIC0yMiw3ICsyMiw3IEBACiA8dGFyZ2V0IG5hbWU9InJlcG9ydCI+CiA8ZWNobyBtZXNzYWdlPSJDb21wYXJpbmcgcmVzdWx0cyB3aXRoIGV4cGVjdGVkIHJlc3VsdHMiLz4KIAotIAorCiAgICAgPHhzbHQgc3R5bGU9IiR7c3R5bGVzaGVldH0iCiAgICAgICAgICAgICBpbj0iJHt4bWxmaWxlfSIgb3V0PSIke2h0bWxmaWxlfSIKICAgICAgICAgICAgIGJhc2VkaXI9Ii4iIGRlc3RkaXI9Ii4iIC8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmNqbXNhdXRoL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmNqbXNhdXRoL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggODRmNjlmMy4uNDIyMTFlOSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjam1zYXV0aC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiY2ptc2F1dGgvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTggKzE1LDE4IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqZGJjLWpkYmNqbXNhdXRoIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmNqbXNhdXRoL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiY2ptc2F1dGgvYnVpbGQueG1sCmluZGV4IDY4NTM1NjkuLmRmZDcxODMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiY2ptc2F1dGgvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiY2ptc2F1dGgvYnVpbGQueG1sCkBAIC00MCw3ICs0MCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC01MiwxMyArNTIsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAotICAJICB2YWx1ZT0iKiovU2ltcGxlQk1QLmNsYXNzLCAqKi9TaW1wbGVCTVBIb21lLmNsYXNzLCoqLypDbGllbnQqLmNsYXNzLCoqL0ptc0F1dGhIb21lLmNsYXNzLCoqL0ptc0F1dGguY2xhc3MiIC8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKKyAgICAgICAgdmFsdWU9IioqL1NpbXBsZUJNUC5jbGFzcywgKiovU2ltcGxlQk1QSG9tZS5jbGFzcywqKi8qQ2xpZW50Ki5jbGFzcywqKi9KbXNBdXRoSG9tZS5jbGFzcywqKi9KbXNBdXRoLmNsYXNzIiAvPgogICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgpAQCAtNjYsNyArNjYsNyBAQAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktamRiYy1jb21tb24iLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0icWwtamRiYy1wb29sIi8+Ci0JPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvczFxZURCX0NNIi8+CisgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvczFxZURCX0NNIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qbXMtc3R1ZmYiLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgpAQCAtODAsNyArODAsNyBAQAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVzZXQtZGVyYnktZm9yLW5vLWF1dGhlbnRpY2F0aW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX3BvaW50YmFzZS5zcWwiLz4KQEAgLTkyLDcgKzkyLDcgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamRiYy1jb21tb24iLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktam1zLXN0dWZmIi8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CkBAIC0xMDYsMTIgKzEwNiwxMiBAQAogICAgICAgLS0+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qbXMtY29ubmVjdGlvbi1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iam1zLmZhY3RvcnkudHlwZSIgdmFsdWU9Impha2FydGEuam1zLlF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkiLz4KLQk8cGFyYW0gbmFtZT0iam1zLmZhY3RvcnkubmFtZSIgdmFsdWU9Imptcy9qZGJjam1zYXV0aF9RQ0YxIi8+CisgICAgPHBhcmFtIG5hbWU9Imptcy5mYWN0b3J5Lm5hbWUiIHZhbHVlPSJqbXMvamRiY2ptc2F1dGhfUUNGMSIvPgogICAgICAgPC9hbnRjYWxsPgotICAgICAgCisKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWptcy1jb25uZWN0aW9uLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqbXMuZmFjdG9yeS50eXBlIiB2YWx1ZT0iamFrYXJ0YS5qbXMuUXVldWVDb25uZWN0aW9uRmFjdG9yeSIvPgotCTxwYXJhbSBuYW1lPSJqbXMuZmFjdG9yeS5uYW1lIiB2YWx1ZT0iam1zL2pkYmNqbXNhdXRoX1FDRjIiLz4KKyAgICA8cGFyYW0gbmFtZT0iam1zLmZhY3RvcnkubmFtZSIgdmFsdWU9Imptcy9qZGJjam1zYXV0aF9RQ0YyIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKQEAgLTEyMiwxMCArMTIyLDEwIEBACiAgICAgICA8L2FudGNhbGw+CiAgICAgICAtLT4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWptcy1jb25uZWN0aW9uLWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9Imptcy5mYWN0b3J5Lm5hbWUiIHZhbHVlPSJqbXMvamRiY2ptc2F1dGhfUUNGMSIvPgorICAgIDxwYXJhbSBuYW1lPSJqbXMuZmFjdG9yeS5uYW1lIiB2YWx1ZT0iam1zL2pkYmNqbXNhdXRoX1FDRjEiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWptcy1jb25uZWN0aW9uLWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9Imptcy5mYWN0b3J5Lm5hbWUiIHZhbHVlPSJqbXMvamRiY2ptc2F1dGhfUUNGMiIvPgorICAgIDxwYXJhbSBuYW1lPSJqbXMuZmFjdG9yeS5uYW1lIiB2YWx1ZT0iam1zL2pkYmNqbXNhdXRoX1FDRjIiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjam1zYXV0aC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmNqbXNhdXRoL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBkNzQ1M2EzLi4xMGE4NWEzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmNqbXNhdXRoL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmNqbXNhdXRoL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjUsMTk5ICsyNSwxOTkgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLlNpbXBsZVJlcG9ydGVyQWRhcHRlcjsKIAogcHVibGljIGNsYXNzIENsaWVudCB7Ci0gICAgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIkpEQkMgSk1TIEF1dGhlbnRpY2F0aW9uIHRlc3RzIik7CiAgICAgICAgIENsaWVudCBjID0gbmV3IENsaWVudCgpOwotCWMuZG9KZGJjVGVzdHMoKTsKLQljLmRvSm1zVGVzdHMoKTsKKyAgICBjLmRvSmRiY1Rlc3RzKCk7CisgICAgYy5kb0ptc1Rlc3RzKCk7CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGRvSmRiY1Rlc3RzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgT2JqZWN0IG9ialJlZiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlQk1QSG9tZSIpOwotCVNpbXBsZUJNUEhvbWUgc2ltcGxlQk1QSG9tZSA9IChTaW1wbGVCTVBIb21lKQorICAgIFNpbXBsZUJNUEhvbWUgc2ltcGxlQk1QSG9tZSA9IChTaW1wbGVCTVBIb21lKQogICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ialJlZiwgU2ltcGxlQk1QSG9tZS5jbGFzcyk7Ci0gICAgICAgIAorCiAgICAgICAgIFNpbXBsZUJNUCBzaW1wbGVCTVAgPSBzaW1wbGVCTVBIb21lLmNyZWF0ZSgpOwotICAgICAgICBTdHJpbmcgdGVzdFN1aXRlID0gIkpEQkNKbXNBdXRoLUpEQkMgIjsJCi0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIGpkYmMgdGVzdHMgMyAmIDcgd2lsbCBmYWlsIHdpdGggRGVyYnkiKTsgCQotCVN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgICAgICBKREJDIFRlc3RzICIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImFwcCBhdXRoIDogZ2V0dGluZyBjb25uZWN0aW9uIHcvbyB1c2VyL3Bhc3MiKTsKLQlTeXN0ZW0ub3V0LnByaW50KCJTaG91bGQgTk9UIGdldCBhIGNvbm5lY3Rpb24gOiAiICk7CisgICAgICAgIFN0cmluZyB0ZXN0U3VpdGUgPSAiSkRCQ0ptc0F1dGgtSkRCQyAiOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBqZGJjIHRlc3RzIDMgJiA3IHdpbGwgZmFpbCB3aXRoIERlcmJ5Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgICAgICAgIEpEQkMgVGVzdHMgIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYXBwIGF1dGggOiBnZXR0aW5nIGNvbm5lY3Rpb24gdy9vIHVzZXIvcGFzcyIpOworICAgIFN5c3RlbS5vdXQucHJpbnQoIlNob3VsZCBOT1QgZ2V0IGEgY29ubmVjdGlvbiA6ICIgKTsKICAgICAgICAgaWYgKCBzaW1wbGVCTVAudGVzdDEoKSApIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyIgdGVzdDEgIiwgc3RhdC5QQVNTKTsKLQkgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIlBBU1MiKTsKLQl9IGVsc2UgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIiB0ZXN0MSAiLCBzdGF0LkZBSUwpOwotCSAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiRkFJTCIpOwotCX0KKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyIgdGVzdDEgIiwgc3RhdC5QQVNTKTsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIlBBU1MiKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIiB0ZXN0MSAiLCBzdGF0LkZBSUwpOworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiRkFJTCIpOworICAgIH0KIAotCVN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImFwcCBhdXRoIDogZ2V0dGluZyBjb25uZWN0aW9uIHcvIHVzZXIvcGFzcyIpOwotCVN5c3RlbS5vdXQucHJpbnQoIlNob3VsZCBnZXQgYSBjb25uZWN0aW9uIDogIiApOwotCWlmICggc2ltcGxlQk1QLnRlc3QyKCkgKSB7Ci0JICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJQQVNTIik7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsiIHRlc3QyICIsIHN0YXQuUEFTUyk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyIgdGVzdDIgIiwgc3RhdC5GQUlMKTsKLQkgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIkZBSUwiKTsKLQl9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYXBwIGF1dGggOiBnZXR0aW5nIGNvbm5lY3Rpb24gdy8gdXNlci9wYXNzIik7CisgICAgU3lzdGVtLm91dC5wcmludCgiU2hvdWxkIGdldCBhIGNvbm5lY3Rpb24gOiAiICk7CisgICAgaWYgKCBzaW1wbGVCTVAudGVzdDIoKSApIHsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIlBBU1MiKTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyIgdGVzdDIgIiwgc3RhdC5QQVNTKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIiB0ZXN0MiAiLCBzdGF0LkZBSUwpOworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiRkFJTCIpOworICAgIH0KIAotCVN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImFwcCBhdXRoIDogZ2V0dGluZyBjb25uZWN0aW9uIHcvICB3cm9uZyB1c2VyL3Bhc3MiKTsKLQlTeXN0ZW0ub3V0LnByaW50KCJTaG91bGQgTk9UIGdldCBhIGNvbm5lY3Rpb24gOiAiICk7Ci0JaWYgKCBzaW1wbGVCTVAudGVzdDMoKSApIHsKLQkgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIlBBU1MiKTsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiB0ZXN0MyAiLCBzdGF0LlBBU1MpOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgdGVzdDMgIiwgc3RhdC5GQUlMKTsKLQkgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIkZBSUwiKTsKLQl9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYXBwIGF1dGggOiBnZXR0aW5nIGNvbm5lY3Rpb24gdy8gIHdyb25nIHVzZXIvcGFzcyIpOworICAgIFN5c3RlbS5vdXQucHJpbnQoIlNob3VsZCBOT1QgZ2V0IGEgY29ubmVjdGlvbiA6ICIgKTsKKyAgICBpZiAoIHNpbXBsZUJNUC50ZXN0MygpICkgeworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiUEFTUyIpOworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIHRlc3QzICIsIHN0YXQuUEFTUyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiB0ZXN0MyAiLCBzdGF0LkZBSUwpOworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiRkFJTCIpOworICAgIH0KIAotCVN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImFwcCBhdXRoIDogZ2V0dGluZyBjb25uZWN0aW9uIHcvIGNvcnJlY3QgdGhlbiB3cm9uZyB1c2VyL3Bhc3MiKTsKLQlTeXN0ZW0ub3V0LnByaW50KCJTaG91bGQgZ2V0IGEgY29ubmVjdGlvbiB0aGVuIE5PVCBnZXQgYSBjb25uZWN0aW9uIDogIiApOwotCWlmICggc2ltcGxlQk1QLnRlc3Q0KCkgKSB7Ci0JICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJQQVNTIik7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgdGVzdDQgIiwgc3RhdC5QQVNTKTsKLQl9IGVsc2UgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIHRlc3Q0ICIsIHN0YXQuRkFJTCk7Ci0JICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJGQUlMIik7Ci0JfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImFwcCBhdXRoIDogZ2V0dGluZyBjb25uZWN0aW9uIHcvIGNvcnJlY3QgdGhlbiB3cm9uZyB1c2VyL3Bhc3MiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50KCJTaG91bGQgZ2V0IGEgY29ubmVjdGlvbiB0aGVuIE5PVCBnZXQgYSBjb25uZWN0aW9uIDogIiApOworICAgIGlmICggc2ltcGxlQk1QLnRlc3Q0KCkgKSB7CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJQQVNTIik7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgdGVzdDQgIiwgc3RhdC5QQVNTKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIHRlc3Q0ICIsIHN0YXQuRkFJTCk7CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJGQUlMIik7CisgICAgfQogCi0JU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiY29udGFpbmVyIGF1dGggOiBnZXR0aW5nIGNvbm5lY3Rpb24gdy9vIHVzZXIvcGFzcyIpOwotCVN5c3RlbS5vdXQucHJpbnQoIlNob3VsZCBnZXQgYSBjb25uZWN0aW9uIDogIiApOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNvbnRhaW5lciBhdXRoIDogZ2V0dGluZyBjb25uZWN0aW9uIHcvbyB1c2VyL3Bhc3MiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50KCJTaG91bGQgZ2V0IGEgY29ubmVjdGlvbiA6ICIgKTsKICAgICAgICAgaWYgKCBzaW1wbGVCTVAudGVzdDUoKSApIHsKLQkgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIlBBU1MiKTsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyIgdGVzdDUgIiwgc3RhdC5QQVNTKTsKLQl9IGVsc2UgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIiB0ZXN0NSAiLCBzdGF0LkZBSUwpOwotCSAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiRkFJTCIpOwotCX0KKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIlBBU1MiKTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyIgdGVzdDUgIiwgc3RhdC5QQVNTKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIiB0ZXN0NSAiLCBzdGF0LkZBSUwpOworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiRkFJTCIpOworICAgIH0KIAotCVN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImNvbnRhaW5lciBhdXRoIDogZ2V0dGluZyBjb25uZWN0aW9uIHcvIHVzZXIvcGFzcyIpOwotCVN5c3RlbS5vdXQucHJpbnQoIlNob3VsZCBnZXQgYSBjb25uZWN0aW9uIDogIiApOwotCWlmICggc2ltcGxlQk1QLnRlc3Q2KCkgKSB7Ci0JICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJQQVNTIik7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsiIHRlc3Q2ICIsIHN0YXQuUEFTUyk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyIgdGVzdDYgIiwgc3RhdC5GQUlMKTsKLQkgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIkZBSUwiKTsKLQl9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY29udGFpbmVyIGF1dGggOiBnZXR0aW5nIGNvbm5lY3Rpb24gdy8gdXNlci9wYXNzIik7CisgICAgU3lzdGVtLm91dC5wcmludCgiU2hvdWxkIGdldCBhIGNvbm5lY3Rpb24gOiAiICk7CisgICAgaWYgKCBzaW1wbGVCTVAudGVzdDYoKSApIHsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIlBBU1MiKTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyIgdGVzdDYgIiwgc3RhdC5QQVNTKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIiB0ZXN0NiAiLCBzdGF0LkZBSUwpOworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiRkFJTCIpOworICAgIH0KIAotCVN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImNvbnRhaW5lciBhdXRoIDogZ2V0dGluZyBjb25uZWN0aW9uIHcvIHdyb25nIHVzZXIvcGFzcyIpOwotCVN5c3RlbS5vdXQucHJpbnQoIlNob3VsZCBOT1QgZ2V0IGEgY29ubmVjdGlvbiA6ICIgKTsKLQlpZiAoIHNpbXBsZUJNUC50ZXN0NygpICkgewotCSAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiUEFTUyIpOwotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIHRlc3Q3ICIsIHN0YXQuUEFTUyk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiB0ZXN0NyAiLCBzdGF0LkZBSUwpOwotCSAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiRkFJTCIpOwotCX0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJjb250YWluZXIgYXV0aCA6IGdldHRpbmcgY29ubmVjdGlvbiB3LyB3cm9uZyB1c2VyL3Bhc3MiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50KCJTaG91bGQgTk9UIGdldCBhIGNvbm5lY3Rpb24gOiAiICk7CisgICAgaWYgKCBzaW1wbGVCTVAudGVzdDcoKSApIHsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIlBBU1MiKTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiB0ZXN0NyAiLCBzdGF0LlBBU1MpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgdGVzdDcgIiwgc3RhdC5GQUlMKTsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIkZBSUwiKTsKKyAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGRvSm1zVGVzdHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKIAotCU9iamVjdCBvYmogPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL0ptc0F1dGhIb21lIik7Ci0JSm1zQXV0aEhvbWUgam1zQXV0aEhvbWUgPSAoSm1zQXV0aEhvbWUpCi0JICAgIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyggb2JqLCBKbXNBdXRoSG9tZS5jbGFzcyApOwotCUptc0F1dGggam1zQXV0aCA9IGptc0F1dGhIb21lLmNyZWF0ZSgpOworICAgIE9iamVjdCBvYmogPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL0ptc0F1dGhIb21lIik7CisgICAgSm1zQXV0aEhvbWUgam1zQXV0aEhvbWUgPSAoSm1zQXV0aEhvbWUpCisgICAgICAgIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyggb2JqLCBKbXNBdXRoSG9tZS5jbGFzcyApOworICAgIEptc0F1dGggam1zQXV0aCA9IGptc0F1dGhIb21lLmNyZWF0ZSgpOwogCi0JU3RyaW5nIHRlc3RTdWl0ZSA9ICJKREJDSm1zQXV0aC1KTVMiOwotICAgICAgICAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCIgICAgICAgICAgSk1TIHRlc3RzICIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImFwcCBhdXRoIDogZ2V0dGluZyBjb25uZWN0aW9uIHcvIHVzZXIvcGFzcyIpOwotCVN5c3RlbS5vdXQucHJpbnQoIlNob3VsZCBnZXQgYSBjb25uZWN0aW9uIDogIiApOwotCWlmICggam1zQXV0aC50ZXN0MSgpICkgewotCSAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiUEFTUyIpOwotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIHRlc3QxICIsIHN0YXQuUEFTUyApOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgdGVzdDEgIiwgc3RhdC5GQUlMICk7Ci0JICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJGQUlMIik7Ci0JfQorICAgIFN0cmluZyB0ZXN0U3VpdGUgPSAiSkRCQ0ptc0F1dGgtSk1TIjsKIAotCVN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImFwcCBhdXRoIDogZ2V0dGluZyBjb25uZWN0aW9uIHcvbyB1c2VyL3Bhc3MiKTsKLQlTeXN0ZW0ub3V0LnByaW50KCJTaG91bGQgZ2V0IGEgY29ubmVjdGlvbiA6ICIgKTsKLSAgICAgICAJaWYgKCBqbXNBdXRoLnRlc3QyKCkgKSB7Ci0JICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJQQVNTIik7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgdGVzdDIgIiwgc3RhdC5QQVNTICk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiB0ZXN0MiAiLCBzdGF0LkZBSUwgKTsKLQkgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIkZBSUwiKTsKLQl9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgICAgICAgIEpNUyB0ZXN0cyAiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJhcHAgYXV0aCA6IGdldHRpbmcgY29ubmVjdGlvbiB3LyB1c2VyL3Bhc3MiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50KCJTaG91bGQgZ2V0IGEgY29ubmVjdGlvbiA6ICIgKTsKKyAgICBpZiAoIGptc0F1dGgudGVzdDEoKSApIHsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIlBBU1MiKTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiB0ZXN0MSAiLCBzdGF0LlBBU1MgKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIHRlc3QxICIsIHN0YXQuRkFJTCApOworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiRkFJTCIpOworICAgIH0KIAotCVN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImFwcCBhdXRoIDogZ2V0dGluZyBjb25uZWN0aW9uIHcvICB3cm9uZyB1c2VyL3Bhc3MiKTsKLQlTeXN0ZW0ub3V0LnByaW50KCJTaG91bGQgTk9UIGdldCBhIGNvbm5lY3Rpb24gOiAiICk7Ci0JaWYgKCBqbXNBdXRoLnRlc3QzKCkgKSB7Ci0JICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJQQVNTIik7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgdGVzdDMgIiwgc3RhdC5QQVNTICk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiB0ZXN0MyAiLCBzdGF0LkZBSUwgKTsKLQkgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIkZBSUwiKTsKLQl9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYXBwIGF1dGggOiBnZXR0aW5nIGNvbm5lY3Rpb24gdy9vIHVzZXIvcGFzcyIpOworICAgIFN5c3RlbS5vdXQucHJpbnQoIlNob3VsZCBnZXQgYSBjb25uZWN0aW9uIDogIiApOworICAgICAgICAgICBpZiAoIGptc0F1dGgudGVzdDIoKSApIHsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIlBBU1MiKTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiB0ZXN0MiAiLCBzdGF0LlBBU1MgKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIHRlc3QyICIsIHN0YXQuRkFJTCApOworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiRkFJTCIpOworICAgIH0KIAotCVN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImFwcCBhdXRoIDogZ2V0dGluZyBjb25uZWN0aW9uIHcvIGNvcnJlY3QgdGhlbiB3cm9uZyB1c2VyL3Bhc3MiKTsKLQlTeXN0ZW0ub3V0LnByaW50KCJTaG91bGQgZ2V0IGEgY29ubmVjdGlvbiB0aGVuIE5PVCBnZXQgYSBjb25uZWN0aW9uIDogIiApOwotICAgICAgIAlpZiAoIGptc0F1dGgudGVzdDQoKSApIHsKLQkgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIlBBU1MiKTsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiB0ZXN0NCAiLCBzdGF0LlBBU1MgKTsKLQl9IGVsc2UgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIHRlc3Q0ICIsIHN0YXQuRkFJTCApOwotCSAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiRkFJTCIpOwotCX0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJhcHAgYXV0aCA6IGdldHRpbmcgY29ubmVjdGlvbiB3LyAgd3JvbmcgdXNlci9wYXNzIik7CisgICAgU3lzdGVtLm91dC5wcmludCgiU2hvdWxkIE5PVCBnZXQgYSBjb25uZWN0aW9uIDogIiApOworICAgIGlmICggam1zQXV0aC50ZXN0MygpICkgeworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiUEFTUyIpOworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIHRlc3QzICIsIHN0YXQuUEFTUyApOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgdGVzdDMgIiwgc3RhdC5GQUlMICk7CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJGQUlMIik7CisgICAgfQogCi0JU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiY29udGFpbmVyIGF1dGggOiBnZXR0aW5nIGNvbm5lY3Rpb24gdy9vIHVzZXIvcGFzcyIpOwotCVN5c3RlbS5vdXQucHJpbnQoIlNob3VsZCBnZXQgYSBjb25uZWN0aW9uIDogIiApOwotICAgICAgIAlpZiAoIGptc0F1dGgudGVzdDUoKSApIHsKLQkgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIlBBU1MiKTsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiB0ZXN0NSAiLCBzdGF0LlBBU1MgKTsKLQl9IGVsc2UgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIHRlc3Q1ICIsIHN0YXQuRkFJTCApOwotCSAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiRkFJTCIpOwotCX0KLQkKLQlTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJjb250YWluZXIgYXV0aCA6IGdldHRpbmcgY29ubmVjdGlvbiB3LyB1c2VyL3Bhc3MiKTsKLQlTeXN0ZW0ub3V0LnByaW50KCJTaG91bGQgZ2V0IGEgY29ubmVjdGlvbiA6ICIgKTsKLSAgICAgICAJaWYgKCBqbXNBdXRoLnRlc3Q2KCkgKSB7Ci0JICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJQQVNTIik7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgdGVzdDYgIiwgc3RhdC5QQVNTICk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiB0ZXN0NiAiLCBzdGF0LkZBSUwgKTsKLQkgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIkZBSUwiKTsKLQl9Ci0vKgkKLQlTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJjb250YWluZXIgYXV0aCA6IGdldHRpbmcgY29ubmVjdGlvbiB3LyB3cm9uZyB1c2VyL3Bhc3MiKTsKLQlTeXN0ZW0ub3V0LnByaW50KCJTaG91bGQgTk9UIGdldCBhIGNvbm5lY3Rpb24gOiAiICk7Ci0gICAgICAgCWlmICggam1zQXV0aC50ZXN0NygpICkgewotCSAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiUEFTUyIpOwotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIGptcy10ZXN0NyAiLCBzdGF0LlBBU1MgKTsKLQl9IGVsc2UgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIGptcy10ZXN0NyAiLCBzdGF0LkZBSUwgKTsKLQkgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIkZBSUwiKTsKLQl9Ci0qLyAgICAgICAgCi0JU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImFwcCBhdXRoIDogZ2V0dGluZyBjb25uZWN0aW9uIHcvIGNvcnJlY3QgdGhlbiB3cm9uZyB1c2VyL3Bhc3MiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50KCJTaG91bGQgZ2V0IGEgY29ubmVjdGlvbiB0aGVuIE5PVCBnZXQgYSBjb25uZWN0aW9uIDogIiApOworICAgICAgICAgICBpZiAoIGptc0F1dGgudGVzdDQoKSApIHsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIlBBU1MiKTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiB0ZXN0NCAiLCBzdGF0LlBBU1MgKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIHRlc3Q0ICIsIHN0YXQuRkFJTCApOworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiRkFJTCIpOworICAgIH0KKworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNvbnRhaW5lciBhdXRoIDogZ2V0dGluZyBjb25uZWN0aW9uIHcvbyB1c2VyL3Bhc3MiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50KCJTaG91bGQgZ2V0IGEgY29ubmVjdGlvbiA6ICIgKTsKKyAgICAgICAgICAgaWYgKCBqbXNBdXRoLnRlc3Q1KCkgKSB7CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJQQVNTIik7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgdGVzdDUgIiwgc3RhdC5QQVNTICk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiB0ZXN0NSAiLCBzdGF0LkZBSUwgKTsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIkZBSUwiKTsKKyAgICB9CisKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJjb250YWluZXIgYXV0aCA6IGdldHRpbmcgY29ubmVjdGlvbiB3LyB1c2VyL3Bhc3MiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50KCJTaG91bGQgZ2V0IGEgY29ubmVjdGlvbiA6ICIgKTsKKyAgICAgICAgICAgaWYgKCBqbXNBdXRoLnRlc3Q2KCkgKSB7CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJQQVNTIik7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgdGVzdDYgIiwgc3RhdC5QQVNTICk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiB0ZXN0NiAiLCBzdGF0LkZBSUwgKTsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIkZBSUwiKTsKKyAgICB9CisvKgorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNvbnRhaW5lciBhdXRoIDogZ2V0dGluZyBjb25uZWN0aW9uIHcvIHdyb25nIHVzZXIvcGFzcyIpOworICAgIFN5c3RlbS5vdXQucHJpbnQoIlNob3VsZCBOT1QgZ2V0IGEgY29ubmVjdGlvbiA6ICIgKTsKKyAgICAgICAgICAgaWYgKCBqbXNBdXRoLnRlc3Q3KCkgKSB7CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJQQVNTIik7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgam1zLXRlc3Q3ICIsIHN0YXQuUEFTUyApOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgam1zLXRlc3Q3ICIsIHN0YXQuRkFJTCApOworICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiRkFJTCIpOworICAgIH0KKyovCisgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiY2ptc2F1dGgvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiY2ptc2F1dGgvZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCA4ZDBkZmJjLi4wNjZiMTJiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmNqbXNhdXRoL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjam1zYXV0aC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC0zNSwxNiArMzUsMTYgQEAKICAgICAgIDx0cmFuc2FjdGlvbi10eXBlPkNvbnRhaW5lcjwvdHJhbnNhY3Rpb24tdHlwZT4KICAgICAgIDxyZXNvdXJjZS1yZWY+CiAgICAgICAgIDxyZXMtcmVmLW5hbWU+am1zL015UXVldWVDb25uZWN0aW9uRmFjdG9yeTwvcmVzLXJlZi1uYW1lPgotCTxyZXMtdHlwZT5qYWthcnRhLmptcy5RdWV1ZUNvbm5lY3Rpb25GYWN0b3J5PC9yZXMtdHlwZT4KLQk8cmVzLWF1dGg+QXBwbGljYXRpb248L3Jlcy1hdXRoPgotICAgICAgPC9yZXNvdXJjZS1yZWY+CQorICAgIDxyZXMtdHlwZT5qYWthcnRhLmptcy5RdWV1ZUNvbm5lY3Rpb25GYWN0b3J5PC9yZXMtdHlwZT4KKyAgICA8cmVzLWF1dGg+QXBwbGljYXRpb248L3Jlcy1hdXRoPgorICAgICAgPC9yZXNvdXJjZS1yZWY+CiAgICAgICA8cmVzb3VyY2UtcmVmPgogICAgICAgICA8cmVzLXJlZi1uYW1lPmptcy9NeVF1ZXVlQ29ubmVjdGlvbkZhY3RvcnlfQ008L3Jlcy1yZWYtbmFtZT4KLQk8cmVzLXR5cGU+amFrYXJ0YS5qbXMuUXVldWVDb25uZWN0aW9uRmFjdG9yeTwvcmVzLXR5cGU+Ci0JPHJlcy1hdXRoPkNvbnRhaW5lcjwvcmVzLWF1dGg+Ci0gICAgICA8L3Jlc291cmNlLXJlZj4JCisgICAgPHJlcy10eXBlPmpha2FydGEuam1zLlF1ZXVlQ29ubmVjdGlvbkZhY3Rvcnk8L3Jlcy10eXBlPgorICAgIDxyZXMtYXV0aD5Db250YWluZXI8L3Jlcy1hdXRoPgorICAgICAgPC9yZXNvdXJjZS1yZWY+CiAgICAgPC9zZXNzaW9uPgotICAgIAorCiAgICAgPGVudGl0eT4KICAgICAgIDxkaXNwbGF5LW5hbWU+U2ltcGxlQk1QRUpCPC9kaXNwbGF5LW5hbWU+CiAgICAgICA8ZWpiLW5hbWU+U2ltcGxlQk1QRUpCPC9lamItbmFtZT4KQEAgLTcxLDcgKzcxLDcgQEAKICAgICAgICAgPHJlcy1zaGFyaW5nLXNjb3BlPlNoYXJlYWJsZTwvcmVzLXNoYXJpbmctc2NvcGU+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KICAgICA8L2VudGl0eT4KLSAgICAKKwogICA8L2VudGVycHJpc2UtYmVhbnM+CiAKICAgPGFzc2VtYmx5LWRlc2NyaXB0b3I+CkBAIC03OSw3ICs3OSw3IEBACiAgICAgPGNvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgICAgIDxtZXRob2Q+CiAgICAgICAgIDxlamItbmFtZT5KbXNBdXRoRUpCPC9lamItbmFtZT4KLQk8bWV0aG9kLW5hbWU+KjwvbWV0aG9kLW5hbWU+CisgICAgPG1ldGhvZC1uYW1lPio8L21ldGhvZC1uYW1lPgogICAgICAgPC9tZXRob2Q+CiAgICAgICA8dHJhbnMtYXR0cmlidXRlPlJlcXVpcmVkPC90cmFucy1hdHRyaWJ1dGU+CiAgICAgPC9jb250YWluZXItdHJhbnNhY3Rpb24+CkBAIC05MSw2ICs5MSw2IEBACiAgICAgICA8dHJhbnMtYXR0cmlidXRlPlJlcXVpcmVkPC90cmFucy1hdHRyaWJ1dGU+CiAgICAgPC9jb250YWluZXItdHJhbnNhY3Rpb24+CiAgIDwvYXNzZW1ibHktZGVzY3JpcHRvcj4KLSAgICAgIAorCiA8L2VqYi1qYXI+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiY2ptc2F1dGgvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmNqbXNhdXRoL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCmluZGV4IDA2MzM2N2UuLmM3YjZlYWUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiY2ptc2F1dGgvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjam1zYXV0aC9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbApAQCAtMzUsMTAgKzM1LDEwIEBACiAgICAgICA8cmVzb3VyY2UtcmVmPgogICAgICAgICA8cmVzLXJlZi1uYW1lPmptcy9NeVF1ZXVlQ29ubmVjdGlvbkZhY3RvcnlfQ008L3Jlcy1yZWYtbmFtZT4KICAgICAgICAgPGpuZGktbmFtZT5qbXMvamRiY2ptc2F1dGhfUUNGMjwvam5kaS1uYW1lPgotCTxkZWZhdWx0LXJlc291cmNlLXByaW5jaXBhbD4KLQkgIDxuYW1lPmd1ZXN0PC9uYW1lPgotCSAgPHBhc3N3b3JkPmd1ZXN0PC9wYXNzd29yZD4KLQk8L2RlZmF1bHQtcmVzb3VyY2UtcHJpbmNpcGFsPgorICAgIDxkZWZhdWx0LXJlc291cmNlLXByaW5jaXBhbD4KKyAgICAgIDxuYW1lPmd1ZXN0PC9uYW1lPgorICAgICAgPHBhc3N3b3JkPmd1ZXN0PC9wYXNzd29yZD4KKyAgICA8L2RlZmF1bHQtcmVzb3VyY2UtcHJpbmNpcGFsPgogICAgICAgPC9yZXNvdXJjZS1yZWY+CiAgICAgPC9lamI+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiY2ptc2F1dGgvZWpiL0ptc0F1dGguamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiY2ptc2F1dGgvZWpiL0ptc0F1dGguamF2YQppbmRleCA1ZTFkZTdjLi4yYjZlMWQxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmNqbXNhdXRoL2VqYi9KbXNBdXRoLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjam1zYXV0aC9lamIvSm1zQXV0aC5qYXZhCkBAIC0yNyw1ICsyNyw1IEBACiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogICAgIHB1YmxpYyBib29sZWFuIHRlc3Q2KCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0NygpIHRocm93cyBSZW1vdGVFeGNlcHRpb247Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiY2ptc2F1dGgvZWpiL0ptc0F1dGhCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmNqbXNhdXRoL2VqYi9KbXNBdXRoQmVhbi5qYXZhCmluZGV4IDAzY2Q4ZjQuLjkxYjhkNTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiY2ptc2F1dGgvZWpiL0ptc0F1dGhCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjam1zYXV0aC9lamIvSm1zQXV0aEJlYW4uamF2YQpAQCAtMjYsMjUgKzI2LDI1IEBACiBpbXBvcnQgamF2YXgubmFtaW5nLkluaXRpYWxDb250ZXh0OwogCiBwdWJsaWMgY2xhc3MgSm1zQXV0aEJlYW4gaW1wbGVtZW50cyBTZXNzaW9uQmVhbiB7Ci0gICAgCisKICAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IGN0eHRfOwogICAgIHByaXZhdGUgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxY2ZfOwogICAgIHByaXZhdGUgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxY2YxXzsKIAogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewogICAgICAgICB0cnkgewotCSAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICAgICAgICAgcWNmXyA9IChRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5KSAKLQkgICAgICAgIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9qbXMvTXlRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5Iik7Ci0gICAgICAgICAgICBxY2YxXyA9IChRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5KSAKLQkgICAgICAgIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9qbXMvTXlRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5X0NNIik7Ci0JfSBjYXRjaCggRXhjZXB0aW9uIGUgKSB7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIENyZWF0ZUV4Y2VwdGlvbiBjZSA9IG5ldyBDcmVhdGVFeGNlcHRpb24oIGUuZ2V0TWVzc2FnZSgpICk7Ci0JICAgIGNlLmluaXRDYXVzZSggZSApOwotCSAgICB0aHJvdyBjZTsKLQl9Ci0JCisgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgICAgICBxY2ZfID0gKFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkpCisgICAgICAgICAgICBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvam1zL015UXVldWVDb25uZWN0aW9uRmFjdG9yeSIpOworICAgICAgICAgICAgcWNmMV8gPSAoUXVldWVDb25uZWN0aW9uRmFjdG9yeSkKKyAgICAgICAgICAgIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9qbXMvTXlRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5X0NNIik7CisgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUgKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIENyZWF0ZUV4Y2VwdGlvbiBjZSA9IG5ldyBDcmVhdGVFeGNlcHRpb24oIGUuZ2V0TWVzc2FnZSgpICk7CisgICAgICAgIGNlLmluaXRDYXVzZSggZSApOworICAgICAgICB0aHJvdyBjZTsKKyAgICB9CisKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7CkBAIC02MiwxODkgKzYyLDE4OSBAQAogCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDEoKSB7CiAgICAgICAgIC8vYXBwbGljYXRpb24gYXV0aCAtIGdldENvbm5lY3Rpb24gdy8gdXNlci9wYXNzIC0gbXVzdCBwYXNzCi0JYm9vbGVhbiBwYXNzZWQgPSB0cnVlOworICAgIGJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKICAgICAgICAgUXVldWVDb25uZWN0aW9uIGNvbiA9IG51bGw7Ci0JUXVldWVTZXNzaW9uIHNlc3Npb24gPSBudWxsOworICAgIFF1ZXVlU2Vzc2lvbiBzZXNzaW9uID0gbnVsbDsKIAotCXRyeSB7Ci0gICAgICAgICAgICBjb24gPSBxY2ZfLmNyZWF0ZVF1ZXVlQ29ubmVjdGlvbigiZ3Vlc3QiLCAiZ3Vlc3QiKTsJCi0JICAgIHNlc3Npb24gPSBjb24uY3JlYXRlUXVldWVTZXNzaW9uKHRydWUsIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSk7Ci0JfSBjYXRjaCggRXhjZXB0aW9uIGUgKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tam1zIHRlc3QgMS0tLS0tLS0tLS0tLS0tIik7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7Ci0JICAgIHBhc3NlZCA9IGZhbHNlOwotCX0gZmluYWxseSB7CisgICAgdHJ5IHsKKyAgICAgICAgICAgIGNvbiA9IHFjZl8uY3JlYXRlUXVldWVDb25uZWN0aW9uKCJndWVzdCIsICJndWVzdCIpOworICAgICAgICBzZXNzaW9uID0gY29uLmNyZWF0ZVF1ZXVlU2Vzc2lvbih0cnVlLCBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UpOworICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlICkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLWptcyB0ZXN0IDEtLS0tLS0tLS0tLS0tLSIpOworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOworICAgICAgICBwYXNzZWQgPSBmYWxzZTsKKyAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgdHJ5IHsKLQkgICAgICAgIHNlc3Npb24uY2xvc2UoKTsKKyAgICAgICAgICAgIHNlc3Npb24uY2xvc2UoKTsKICAgICAgICAgICAgICAgICBjb24uY2xvc2UoKTsKLSAgICAgICAgICAgICAgICAJCi0gICAgICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSApIHt9Ci0JfQogCi0JcmV0dXJuIHBhc3NlZDsKKyAgICAgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlICkge30KKyAgICB9CisKKyAgICByZXR1cm4gcGFzc2VkOwogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIHRlc3QyKCkgewogICAgICAgICAvL2FwcGxpY2F0aW9uIGF1dGggLSBnZXRDb25uZWN0aW9uIHcvbyB1c2VyL3Bhc3MgLSBtdXN0IGZhaWwKLQlib29sZWFuIHBhc3NlZCA9IHRydWU7CisgICAgYm9vbGVhbiBwYXNzZWQgPSB0cnVlOwogICAgICAgICBRdWV1ZUNvbm5lY3Rpb24gY29uID0gbnVsbDsKICAgICAgICAgUXVldWVTZXNzaW9uIHNlc3Npb24gPSBudWxsOwogCi0JdHJ5IHsKLSAgICAgICAgICAgIGNvbiA9IHFjZl8uY3JlYXRlUXVldWVDb25uZWN0aW9uKCk7CQotCSAgICBzZXNzaW9uID0gY29uLmNyZWF0ZVF1ZXVlU2Vzc2lvbih0cnVlLCBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UpOwotCX0gY2F0Y2goIEV4Y2VwdGlvbiBlICkgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLWptcyB0ZXN0IDItLS0tLS0tLS0tLS0tLSIpOwotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwotCSAgICBwYXNzZWQgPSBmYWxzZTsKLQl9IGZpbmFsbHkgeworICAgIHRyeSB7CisgICAgICAgICAgICBjb24gPSBxY2ZfLmNyZWF0ZVF1ZXVlQ29ubmVjdGlvbigpOworICAgICAgICBzZXNzaW9uID0gY29uLmNyZWF0ZVF1ZXVlU2Vzc2lvbih0cnVlLCBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UpOworICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlICkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLWptcyB0ZXN0IDItLS0tLS0tLS0tLS0tLSIpOworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOworICAgICAgICBwYXNzZWQgPSBmYWxzZTsKKyAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgdHJ5IHsKLQkgICAgICAgIHNlc3Npb24uY2xvc2UoKTsKKyAgICAgICAgICAgIHNlc3Npb24uY2xvc2UoKTsKICAgICAgICAgICAgICAgICBjb24uY2xvc2UoKTsKICAgICAgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlICkge30KLQl9Ci0KLQlyZXR1cm4gcGFzc2VkOwogICAgIH0KLSAgICAKKworICAgIHJldHVybiBwYXNzZWQ7CisgICAgfQorCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDMoKSB7CiAgICAgICAgIC8vYXBwbGljYXRpb24gYXV0aCAtIGdldENvbm5lY3Rpb24gdy8gd3JvbmcgdXNlci9wYXNzIC0gbXVzdCBmYWlsCi0JYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKKyAgICBib29sZWFuIHBhc3NlZCA9IGZhbHNlOwogICAgICAgICBRdWV1ZUNvbm5lY3Rpb24gY29uID0gbnVsbDsKICAgICAgICAgUXVldWVTZXNzaW9uIHNlc3Npb24gPSBudWxsOwogCi0JdHJ5IHsKLSAgICAgICAgICAgIGNvbiA9IHFjZl8uY3JlYXRlUXVldWVDb25uZWN0aW9uKCJ4eXoiLCAieHl6Iik7CQotCSAgICBzZXNzaW9uID0gY29uLmNyZWF0ZVF1ZXVlU2Vzc2lvbih0cnVlLCBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UpOwotCX0gY2F0Y2goIEV4Y2VwdGlvbiBlICkgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLWptcyB0ZXN0IDMtLS0tLS0tLS0tLS0tLSIpOwotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwotCSAgICBwYXNzZWQgPSB0cnVlOwotCX0gZmluYWxseSB7CisgICAgdHJ5IHsKKyAgICAgICAgICAgIGNvbiA9IHFjZl8uY3JlYXRlUXVldWVDb25uZWN0aW9uKCJ4eXoiLCAieHl6Iik7CisgICAgICAgIHNlc3Npb24gPSBjb24uY3JlYXRlUXVldWVTZXNzaW9uKHRydWUsIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSk7CisgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUgKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tam1zIHRlc3QgMy0tLS0tLS0tLS0tLS0tIik7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CisgICAgICAgIHBhc3NlZCA9IHRydWU7CisgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIHRyeSB7Ci0JICAgICAgICBzZXNzaW9uLmNsb3NlKCk7CisgICAgICAgICAgICBzZXNzaW9uLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgY29uLmNsb3NlKCk7CiAgICAgICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSApIHt9Ci0JfQorICAgIH0KIAotCXJldHVybiBwYXNzZWQ7CisgICAgcmV0dXJuIHBhc3NlZDsKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0NCgpIHsKLSAgICAgICAgLy9hcHBsaWNhdGlvbiBhdXRoIC0gZ2V0Q29ubmVjdGlvbiB3LyBjb3JyZWN0IHVzZXIvcGFzcyAKLQkvL2FuZCB0aGVuIHdyb25nIC0gbXVzdCBwYXNzCi0JYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKKyAgICAgICAgLy9hcHBsaWNhdGlvbiBhdXRoIC0gZ2V0Q29ubmVjdGlvbiB3LyBjb3JyZWN0IHVzZXIvcGFzcworICAgIC8vYW5kIHRoZW4gd3JvbmcgLSBtdXN0IHBhc3MKKyAgICBib29sZWFuIHBhc3NlZCA9IGZhbHNlOwogICAgICAgICBRdWV1ZUNvbm5lY3Rpb24gY29uID0gbnVsbDsKICAgICAgICAgUXVldWVTZXNzaW9uIHNlc3Npb24gPSBudWxsOwogCi0JdHJ5IHsKLSAgICAgICAgICAgIGNvbiA9IHFjZl8uY3JlYXRlUXVldWVDb25uZWN0aW9uKCJndWVzdCIsICJndWVzdCIpOwkKLQkgICAgc2Vzc2lvbiA9IGNvbi5jcmVhdGVRdWV1ZVNlc3Npb24odHJ1ZSwgU2Vzc2lvbi5BVVRPX0FDS05PV0xFREdFKTsKLQl9IGNhdGNoKCBFeGNlcHRpb24gZSApIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS1qbXMgdGVzdCA0LS0tLS0tLS0tLS0tLS0iKTsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKLQkgICAgcmV0dXJuIHBhc3NlZDsKLQl9IGZpbmFsbHkgeworICAgIHRyeSB7CisgICAgICAgICAgICBjb24gPSBxY2ZfLmNyZWF0ZVF1ZXVlQ29ubmVjdGlvbigiZ3Vlc3QiLCAiZ3Vlc3QiKTsKKyAgICAgICAgc2Vzc2lvbiA9IGNvbi5jcmVhdGVRdWV1ZVNlc3Npb24odHJ1ZSwgU2Vzc2lvbi5BVVRPX0FDS05PV0xFREdFKTsKKyAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSApIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS1qbXMgdGVzdCA0LS0tLS0tLS0tLS0tLS0iKTsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKyAgICAgICAgcmV0dXJuIHBhc3NlZDsKKyAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgdHJ5IHsKLQkgICAgICAgIHNlc3Npb24uY2xvc2UoKTsKKyAgICAgICAgICAgIHNlc3Npb24uY2xvc2UoKTsKICAgICAgICAgICAgICAgICBjb24uY2xvc2UoKTsKICAgICAgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlICkge30KLQl9Ci0gICAgICAgIAotCXRyeSB7Ci0JICAgIGNvbiA9IHFjZl8uY3JlYXRlUXVldWVDb25uZWN0aW9uKCJ4eXoiLCAieHl6IiApOwotCSAgICBzZXNzaW9uID0gY29uLmNyZWF0ZVF1ZXVlU2Vzc2lvbiggdHJ1ZSwgU2Vzc2lvbi5BVVRPX0FDS05PV0xFREdFICk7Ci0JfSBjYXRjaCggRXhjZXB0aW9uIGUgKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tam1zIHRlc3QgNC0tLS0tLS0tLS0tLS0tIik7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7Ci0JICAgIHBhc3NlZCA9IHRydWU7Ci0JfSBmaW5hbGx5IHsKLQkgICAgdHJ5IHsKLQkgICAgICAgIHNlc3Npb24uY2xvc2UoKTsKLQkJY29uLmNsb3NlKCk7Ci0JICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlICkge30JCi0JfQotCQotCXJldHVybiBwYXNzZWQ7CisgICAgfQorCisgICAgdHJ5IHsKKyAgICAgICAgY29uID0gcWNmXy5jcmVhdGVRdWV1ZUNvbm5lY3Rpb24oInh5eiIsICJ4eXoiICk7CisgICAgICAgIHNlc3Npb24gPSBjb24uY3JlYXRlUXVldWVTZXNzaW9uKCB0cnVlLCBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UgKTsKKyAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSApIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS1qbXMgdGVzdCA0LS0tLS0tLS0tLS0tLS0iKTsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKyAgICAgICAgcGFzc2VkID0gdHJ1ZTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgc2Vzc2lvbi5jbG9zZSgpOworICAgICAgICBjb24uY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUgKSB7fQorICAgIH0KKworICAgIHJldHVybiBwYXNzZWQ7CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDUoKSB7CiAgICAgICAgIC8vY29udGFpbmVyIGF1dGggLSBnZXRDb25uZWN0aW9uIHcvbyB1c2VyL3Bhc3MgLSBtdXN0IHBhc3MKLQlib29sZWFuIHBhc3NlZCA9IHRydWU7CisgICAgYm9vbGVhbiBwYXNzZWQgPSB0cnVlOwogICAgICAgICBRdWV1ZUNvbm5lY3Rpb24gY29uID0gbnVsbDsKLQlRdWV1ZVNlc3Npb24gc2Vzc2lvbiA9IG51bGw7CisgICAgUXVldWVTZXNzaW9uIHNlc3Npb24gPSBudWxsOwogCi0JdHJ5IHsKLSAgICAgICAgICAgIGNvbiA9IHFjZjFfLmNyZWF0ZVF1ZXVlQ29ubmVjdGlvbigpOwkKLQkgICAgc2Vzc2lvbiA9IGNvbi5jcmVhdGVRdWV1ZVNlc3Npb24odHJ1ZSwgU2Vzc2lvbi5BVVRPX0FDS05PV0xFREdFKTsKLQl9IGNhdGNoKCBFeGNlcHRpb24gZSApIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS1qbXMgdGVzdCA1LS0tLS0tLS0tLS0tLS0iKTsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKLQkgICAgcGFzc2VkID0gZmFsc2U7Ci0JfSBmaW5hbGx5IHsKKyAgICB0cnkgeworICAgICAgICAgICAgY29uID0gcWNmMV8uY3JlYXRlUXVldWVDb25uZWN0aW9uKCk7CisgICAgICAgIHNlc3Npb24gPSBjb24uY3JlYXRlUXVldWVTZXNzaW9uKHRydWUsIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSk7CisgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUgKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tam1zIHRlc3QgNS0tLS0tLS0tLS0tLS0tIik7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CisgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICB0cnkgewotCSAgICAgICAgc2Vzc2lvbi5jbG9zZSgpOworICAgICAgICAgICAgc2Vzc2lvbi5jbG9zZSgpOwogICAgICAgICAgICAgICAgIGNvbi5jbG9zZSgpOwotICAgICAgICAgICAgICAgIAkKLSAgICAgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlICkge30KLQl9CiAKLQlyZXR1cm4gcGFzc2VkOworICAgICAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUgKSB7fQogICAgIH0KLSAgICAKKworICAgIHJldHVybiBwYXNzZWQ7CisgICAgfQorCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDYoKSB7CiAgICAgICAgIC8vY29udGFpbmVyIGF1dGggLSBnZXRDb25uZWN0aW9uIHcvIHVzZXIvcGFzcyAtIG11c3QgcGFzcwotCWJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKKyAgICBib29sZWFuIHBhc3NlZCA9IHRydWU7CiAgICAgICAgIFF1ZXVlQ29ubmVjdGlvbiBjb24gPSBudWxsOwotCVF1ZXVlU2Vzc2lvbiBzZXNzaW9uID0gbnVsbDsKKyAgICBRdWV1ZVNlc3Npb24gc2Vzc2lvbiA9IG51bGw7CiAKLQl0cnkgewotICAgICAgICAgICAgY29uID0gcWNmMV8uY3JlYXRlUXVldWVDb25uZWN0aW9uKCJndWVzdCIsImd1ZXN0Iik7CQotCSAgICBzZXNzaW9uID0gY29uLmNyZWF0ZVF1ZXVlU2Vzc2lvbih0cnVlLCBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UpOwotCX0gY2F0Y2goIEV4Y2VwdGlvbiBlICkgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLWptcyB0ZXN0IDYtLS0tLS0tLS0tLS0tLSIpOwotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwotCSAgICBwYXNzZWQgPSBmYWxzZTsKLQl9IGZpbmFsbHkgeworICAgIHRyeSB7CisgICAgICAgICAgICBjb24gPSBxY2YxXy5jcmVhdGVRdWV1ZUNvbm5lY3Rpb24oImd1ZXN0IiwiZ3Vlc3QiKTsKKyAgICAgICAgc2Vzc2lvbiA9IGNvbi5jcmVhdGVRdWV1ZVNlc3Npb24odHJ1ZSwgU2Vzc2lvbi5BVVRPX0FDS05PV0xFREdFKTsKKyAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSApIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS1qbXMgdGVzdCA2LS0tLS0tLS0tLS0tLS0iKTsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKyAgICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIHRyeSB7Ci0JICAgICAgICBzZXNzaW9uLmNsb3NlKCk7CisgICAgICAgICAgICBzZXNzaW9uLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgY29uLmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgCQotICAgICAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUgKSB7fQotCX0KIAotCXJldHVybiBwYXNzZWQ7CisgICAgICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSApIHt9CisgICAgfQorCisgICAgcmV0dXJuIHBhc3NlZDsKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0NygpIHsKICAgICAgICAgLy9jb250YWluZXIgYXV0aCAtIGdldENvbm5lY3Rpb24gdy8gd3JvbmcgdXNlci9wYXNzIC0gbXVzdCBmYWlsCi0JYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKKyAgICBib29sZWFuIHBhc3NlZCA9IGZhbHNlOwogICAgICAgICBRdWV1ZUNvbm5lY3Rpb24gY29uID0gbnVsbDsKLQlRdWV1ZVNlc3Npb24gc2Vzc2lvbiA9IG51bGw7CisgICAgUXVldWVTZXNzaW9uIHNlc3Npb24gPSBudWxsOwogCi0JdHJ5IHsKLSAgICAgICAgICAgIGNvbiA9IHFjZjFfLmNyZWF0ZVF1ZXVlQ29ubmVjdGlvbigieHl6IiwgInh5eiIpOwkKLQkgICAgc2Vzc2lvbiA9IGNvbi5jcmVhdGVRdWV1ZVNlc3Npb24odHJ1ZSwgU2Vzc2lvbi5BVVRPX0FDS05PV0xFREdFKTsKLQl9IGNhdGNoKCBFeGNlcHRpb24gZSApIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS1qbXMgdGVzdCA3LS0tLS0tLS0tLS0tLS0iKTsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKLQkgICAgcGFzc2VkID0gdHJ1ZTsKLQl9IGZpbmFsbHkgeworICAgIHRyeSB7CisgICAgICAgICAgICBjb24gPSBxY2YxXy5jcmVhdGVRdWV1ZUNvbm5lY3Rpb24oInh5eiIsICJ4eXoiKTsKKyAgICAgICAgc2Vzc2lvbiA9IGNvbi5jcmVhdGVRdWV1ZVNlc3Npb24odHJ1ZSwgU2Vzc2lvbi5BVVRPX0FDS05PV0xFREdFKTsKKyAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSApIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS1qbXMgdGVzdCA3LS0tLS0tLS0tLS0tLS0iKTsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKyAgICAgICAgcGFzc2VkID0gdHJ1ZTsKKyAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgdHJ5IHsKLQkgICAgICAgIHNlc3Npb24uY2xvc2UoKTsKKyAgICAgICAgICAgIHNlc3Npb24uY2xvc2UoKTsKICAgICAgICAgICAgICAgICBjb24uY2xvc2UoKTsKLSAgICAgICAgICAgICAgICAJCi0gICAgICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSApIHt9Ci0JfQogCi0JcmV0dXJuIHBhc3NlZDsKKyAgICAgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlICkge30KKyAgICB9CisKKyAgICByZXR1cm4gcGFzc2VkOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiY2ptc2F1dGgvZWpiL1NpbXBsZUJNUC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjam1zYXV0aC9lamIvU2ltcGxlQk1QLmphdmEKaW5kZXggODJlNGFjMS4uY2IzOGNmOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjam1zYXV0aC9lamIvU2ltcGxlQk1QLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjam1zYXV0aC9lamIvU2ltcGxlQk1QLmphdmEKQEAgLTI5LDUgKzI5LDUgQEAKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0NSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDYoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogICAgIHB1YmxpYyBib29sZWFuIHRlc3Q3KCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjam1zYXV0aC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjam1zYXV0aC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCmluZGV4IGQxY2Y1NWMuLjhmZmZhOTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiY2ptc2F1dGgvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmNqbXNhdXRoL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKQEAgLTMyLDE5NiArMzIsMTk2IEBACiAgICAgaW50IGlkOwogCiAgICAgcHVibGljIHZvaWQgc2V0RW50aXR5Q29udGV4dChFbnRpdHlDb250ZXh0IGVudGl0eUNvbnRleHQpIHsKLQlDb250ZXh0IGNvbnRleHQgPSBudWxsOwotCXRyeSB7Ci0JICAgIGNvbnRleHQgICAgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkgICAgZHMgPSAoRGF0YVNvdXJjZSkgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZSIpOwotCSAgICBkczEgPSAoRGF0YVNvdXJjZSkgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZV9DTSIpOwotCX0gY2F0Y2ggKE5hbWluZ0V4Y2VwdGlvbiBlKSB7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImNhbnQgZmluZCBkYXRhc291cmNlIik7Ci0JfQorICAgIENvbnRleHQgY29udGV4dCA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgY29udGV4dCAgICA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgICAgICBkcyA9IChEYXRhU291cmNlKSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7CisgICAgICAgIGRzMSA9IChEYXRhU291cmNlKSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlX0NNIik7CisgICAgfSBjYXRjaCAoTmFtaW5nRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiY2FudCBmaW5kIGRhdGFzb3VyY2UiKTsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIEludGVnZXIgZWpiQ3JlYXRlKCkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7Ci0JcmV0dXJuIG5ldyBJbnRlZ2VyKDEpOworICAgIHJldHVybiBuZXcgSW50ZWdlcigxKTsKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MSgpIHsKICAgICAgICAgLy9hcHBsaWNhdGlvbiBhdXRoICsgdXNlci9wd2Qgbm90IHNwZWNpZmllZCAtIHNob3VsZCBmYWlsCi0JQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKLQlib29sZWFuIHBhc3NlZCA9IGZhbHNlOwotCXRyeSB7Ci0JICAgIGNvbm4gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgcGFzc2VkID0gdHJ1ZTsKKyAgICBDb25uZWN0aW9uIGNvbm4gPSBudWxsOworICAgIGJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CisgICAgdHJ5IHsKKyAgICAgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICBwYXNzZWQgPSB0cnVlOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tdGVzdDEtLS0tLS0tLS0tLS0iKTsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKLQl9IGZpbmFsbHkgewotCSAgICBpZiAoIGNvbm4gIT0gbnVsbCApIHsKLQkgICAgICAgIHRyeSB7Ci0JICAgICAgICAgICAgY29ubi5jbG9zZSgpOwotCQl9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHsKLQkJfSAgICAKLQkgICAgfQotCX0KLQotCXJldHVybiBwYXNzZWQ7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKCBjb25uICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7CisgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KLSAgICAKKworICAgIHJldHVybiBwYXNzZWQ7CisgICAgfQorCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDIoKSB7CiAgICAgICAgIC8vYXBwbGljYXRpb24gYXV0aCArIHVzZXIvcHdkICBzcGVjaWZpZWQgLSBzaG91bGQgcGFzcwotCUNvbm5lY3Rpb24gY29ubiA9IG51bGw7Ci0JYm9vbGVhbiBwYXNzZWQgPSB0cnVlOwotCXRyeSB7Ci0JICAgIGNvbm4gPSBkcy5nZXRDb25uZWN0aW9uKCJEQlVTRVIiLCAiREJQQVNTV09SRCIpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIHBhc3NlZCA9IGZhbHNlOworICAgIENvbm5lY3Rpb24gY29ubiA9IG51bGw7CisgICAgYm9vbGVhbiBwYXNzZWQgPSB0cnVlOworICAgIHRyeSB7CisgICAgICAgIGNvbm4gPSBkcy5nZXRDb25uZWN0aW9uKCJEQlVTRVIiLCAiREJQQVNTV09SRCIpOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHBhc3NlZCA9IGZhbHNlOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tdGVzdDItLS0tLS0tLS0tLS0iKTsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKLQl9IGZpbmFsbHkgewotCSAgICBpZiAoIGNvbm4gIT0gbnVsbCApIHsKLQkgICAgICAgIHRyeSB7Ci0JICAgICAgICAgICAgY29ubi5jbG9zZSgpOwotCQl9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9ICAgIAotCSAgICB9Ci0JfQorICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmICggY29ubiAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjb25uLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQorICAgIH0KIAogCi0JcmV0dXJuIHBhc3NlZDsKKyAgICByZXR1cm4gcGFzc2VkOwogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIHRlc3QzKCkgewotICAgICAgICAvL2FwcGxpY2F0aW9uIGF1dGggKyB3cm9uZyB1c2VyL3B3ZCAKLQlDb25uZWN0aW9uIGNvbm4gPSBudWxsOwotCWJvb2xlYW4gcGFzc2VkID0gZmFsc2U7Ci0JdHJ5IHsKLQkgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oInh5eiIsICJ4eXoiICk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgcGFzc2VkID0gdHJ1ZTsKKyAgICAgICAgLy9hcHBsaWNhdGlvbiBhdXRoICsgd3JvbmcgdXNlci9wd2QKKyAgICBDb25uZWN0aW9uIGNvbm4gPSBudWxsOworICAgIGJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CisgICAgdHJ5IHsKKyAgICAgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oInh5eiIsICJ4eXoiICk7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgcGFzc2VkID0gdHJ1ZTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLXRlc3QzLS0tLS0tLS0tLS0tIik7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKCBjb25uICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgewotCSAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKLQkJfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fSAgICAKLQkgICAgfQotCX0KKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBpZiAoIGNvbm4gIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgY29ubi5jbG9zZSgpOworICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CisgICAgICAgIH0KKyAgICB9CiAKIAotCXJldHVybiBwYXNzZWQ7CisgICAgcmV0dXJuIHBhc3NlZDsKICAgICB9CiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDQoKSB7CiAgICAgICAgIC8vYXBwbGljYXRpb24gYXV0aCArIHVzZXIvcHdkICBzcGVjaWZpZWQgLSByaWdodCBpbml0aWFsbAotCS8vd3JvbmcgdGhlIHNlY29uZCB0aW1lCi0JQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKLQlib29sZWFuIHBhc3NlZCA9IGZhbHNlOworICAgIC8vd3JvbmcgdGhlIHNlY29uZCB0aW1lCisgICAgQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKKyAgICBib29sZWFuIHBhc3NlZCA9IGZhbHNlOwogCi0JdHJ5IHsKLQkgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oIkRCVVNFUiIsICJEQlBBU1NXT1JEIik7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICB0cnkgeworICAgICAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigiREJVU0VSIiwgIkRCUEFTU1dPUkQiKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tdGVzdDQtLS0tLS0tLS0tLS0iKTsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKLQkgICAgcmV0dXJuIGZhbHNlOwotCX0gZmluYWxseSB7Ci0JICAgIGlmICggY29ubiAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsKLQkgICAgICAgICAgICBjb25uLmNsb3NlKCk7Ci0JCX0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30gICAgCi0JICAgIH0KLQl9CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBpZiAoIGNvbm4gIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgY29ubi5jbG9zZSgpOworICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CisgICAgICAgIH0KKyAgICB9CiAKIAotCXRyeSB7Ci0JICAgIGNvbm4gPSBkcy5nZXRDb25uZWN0aW9uKCJ4eXoiLCAieHl6IiApOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgdHJ5IHsKKyAgICAgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oInh5eiIsICJ4eXoiICk7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLXRlc3Q0LS0tLS0tLS0tLS0tIik7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7Ci0JICAgIHBhc3NlZCA9IHRydWU7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKCBjb25uICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgewotCSAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKLQkJfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fSAgICAKLQkgICAgfQotCX0KKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKyAgICAgICAgcGFzc2VkID0gdHJ1ZTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBpZiAoIGNvbm4gIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgY29ubi5jbG9zZSgpOworICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CisgICAgICAgIH0KKyAgICB9CiAKIAotCXJldHVybiBwYXNzZWQ7CisgICAgcmV0dXJuIHBhc3NlZDsKICAgICB9CiAKIAogICAgIHB1YmxpYyBib29sZWFuIHRlc3Q1KCkgewogICAgICAgICAvL2NvbnRhaW5lciBhdXRoICsgdXNlci9wd2Qgbm90IHNwZWNpZmllZCAtIHNob3VsZCBwYXNzCi0JQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKLQlib29sZWFuIHBhc3NlZCA9IHRydWU7Ci0JdHJ5IHsKLQkgICAgY29ubiA9IGRzMS5nZXRDb25uZWN0aW9uKCk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICBDb25uZWN0aW9uIGNvbm4gPSBudWxsOworICAgIGJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKKyAgICB0cnkgeworICAgICAgICBjb25uID0gZHMxLmdldENvbm5lY3Rpb24oKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tdGVzdDUtLS0tLS0tLS0tLS0iKTsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKLQkgICAgcGFzc2VkID0gZmFsc2U7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKCBjb25uICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgewotCSAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKLQkJfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fSAgICAKLQkgICAgfQotCX0KLQotCXJldHVybiBwYXNzZWQ7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CisgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmICggY29ubiAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjb25uLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQogICAgIH0KLSAgICAKKworICAgIHJldHVybiBwYXNzZWQ7CisgICAgfQorCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDYoKSB7CiAgICAgICAgIC8vY29udGFpbmVyIGF1dGggKyB1c2VyL3B3ZCAgc3BlY2lmaWVkIC0gc2hvdWxkIHN0aWxsIHBhc3MKLQlDb25uZWN0aW9uIGNvbm4gPSBudWxsOwotCWJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKLQl0cnkgewotCSAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigiREJVU0VSIiwgIkRCUEFTU1dPUkQiKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgIENvbm5lY3Rpb24gY29ubiA9IG51bGw7CisgICAgYm9vbGVhbiBwYXNzZWQgPSB0cnVlOworICAgIHRyeSB7CisgICAgICAgIGNvbm4gPSBkcy5nZXRDb25uZWN0aW9uKCJEQlVTRVIiLCAiREJQQVNTV09SRCIpOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS10ZXN0Ni0tLS0tLS0tLS0tLSIpOwotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwotCSAgICBwYXNzZWQgPSBmYWxzZTsKLQl9IGZpbmFsbHkgewotCSAgICBpZiAoIGNvbm4gIT0gbnVsbCApIHsKLQkgICAgICAgIHRyeSB7Ci0JICAgICAgICAgICAgY29ubi5jbG9zZSgpOwotCQl9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9ICAgIAotCSAgICB9Ci0JfQorICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOworICAgICAgICBwYXNzZWQgPSBmYWxzZTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBpZiAoIGNvbm4gIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgY29ubi5jbG9zZSgpOworICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CisgICAgICAgIH0KKyAgICB9CiAKIAotCXJldHVybiBwYXNzZWQ7CisgICAgcmV0dXJuIHBhc3NlZDsKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0NygpIHsKICAgICAgICAgLy9jb250YWluZXIgYXV0aCArIHdyb25nIHVzZXIvcHdkIHNob3VsZCBmYWlsCi0JQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKLQlib29sZWFuIHBhc3NlZCA9IGZhbHNlOwotCXRyeSB7Ci0JICAgIGNvbm4gPSBkcy5nZXRDb25uZWN0aW9uKCJ4eXoiLCAieHl6IiApOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKKyAgICBib29sZWFuIHBhc3NlZCA9IGZhbHNlOworICAgIHRyeSB7CisgICAgICAgIGNvbm4gPSBkcy5nZXRDb25uZWN0aW9uKCJ4eXoiLCAieHl6IiApOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS10ZXN0Ny0tLS0tLS0tLS0tLSIpOwotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwotCSAgICBwYXNzZWQgPSB0cnVlOwotCX0gZmluYWxseSB7Ci0JICAgIGlmICggY29ubiAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsKLQkgICAgICAgICAgICBjb25uLmNsb3NlKCk7Ci0JCX0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30gICAgCi0JICAgIH0KLQl9CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CisgICAgICAgIHBhc3NlZCA9IHRydWU7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKCBjb25uICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQorICAgICAgICB9CisgICAgfQogCiAKLQlyZXR1cm4gcGFzc2VkOworICAgIHJldHVybiBwYXNzZWQ7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHt9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmNqbXNhdXRoL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiY2ptc2F1dGgvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IGU0OTE0ZjYuLmYyNTYwNzYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiY2ptc2F1dGgvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiY2ptc2F1dGgvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDcgKzEsNyBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KLQ0KLUNSRUFURSBUQUJMRSBPX0N1c3RvbWVyICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOworCitDUkVBVEUgVEFCTEUgT19DdXN0b21lciAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmNqbXNhdXRoL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pkYmNqbXNhdXRoL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggNzBkMWZjYy4uZDg1NGI5NSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qZGJjam1zYXV0aC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvamRiY2ptc2F1dGgvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbApAQCAtMSArMSBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvanBhLWRzZC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qcGEtZHNkL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNWQ3ODIzMy4uMjk5NTU5YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qcGEtZHNkL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qcGEtZHNkL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWVqYjMwLXBlcnNpc3RlbmNlLXR4X3Byb3BhZ2F0aW9uIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InNpbXBsZS5jbGllbnQiIHZhbHVlPSJjb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLnBlcnNpc3RlbmNlLnR4X3Byb3BhZ2F0aW9uLmNsaWVudC5DbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgdmFsdWU9IkNsaWVudCIvPgpAQCAtMjYsMTAgKzI2LDEwIEBACiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pwYS1kc2QvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qcGEtZHNkL2J1aWxkLnhtbAppbmRleCAyZjUzMDRhLi40MDZjNDJiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pwYS1kc2QvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvanBhLWRzZC9idWlsZC54bWwKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLnR5cGUiIHZhbHVlPSJqYXZheC5zcWwuWEFEYXRhU291cmNlIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy94YSIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+IAorICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCiAgICAgICAgICAgICAgIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy14YS1wb29sLnByb3BlcnR5LmNvbm5lY3Rpb25BdHRyaWJ1dGVzPTtjcmVhdGU9dHJ1ZSIvPgpAQCAtOTIsMTcgKzkyLDE3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9L2xpYiIvPgotICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vbGliLyR7YXBwbmFtZX0tbGliLmphciIgCisgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS9saWIvJHthcHBuYW1lfS1saWIuamFyIgogICAgICAgICAgICAgIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgogICAgICAgICAgICAgIGluY2x1ZGVzPSIqKi9QZXJzb24uY2xhc3MiPgotICAgICAgICA8L2phcj4gICAgICAgIAorICAgICAgICA8L2phcj4KICAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9L2xpYi8ke2FwcG5hbWV9LXBhcjEuamFyIj4KICAgICAgICAgICAgICA8bWV0YWluZiBmaWxlPSJkZXNjcmlwdG9yL3BlcnNpc3RlbmNlLnhtbCIvPgogICAgICAgICA8L2phcj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9TZnVsKi5jbGFzcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL0NsaWVudC5jbGFzcywqKi9TZnVsLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIiB1cGRhdGU9InllcyIKQEAgLTExMCw5ICsxMTAsOSBAQAogICAgICAgICAgICAgIGluY2x1ZGVzPSJsaWIvJHthcHBuYW1lfS1saWIuamFyLCBsaWIvJHthcHBuYW1lfS1wYXIxLmphciI+CiAgICAgICAgIDwvamFyPgogCi0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTEyMSwxMCArMTIxLDEwIEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogPCEtLSAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtc3RhbmRhbG9uZSIvPi0tPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pwYS1kc2QvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qcGEtZHNkL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBkNDk0ZmRjLi45NDBiMTliIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pwYS1kc2QvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvanBhLWRzZC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTY1LDcgKzY1LDcgQEAKICAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcyA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkkgYW0gaW4gY2xpZW50Iik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgVXNlclRyYW5zYWN0aW9uIHV0eCA9IChVc2VyVHJhbnNhY3Rpb24pKG5ldyBqYXZheC5uYW1pbmcuSW5pdGlhbENvbnRleHQoKSkubG9va3VwKCJqYXZhOmNvbXAvVXNlclRyYW5zYWN0aW9uIik7CiAgICAgICAgICAgICBkcyA9IChEYXRhU291cmNlKShuZXcgamF2YXgubmFtaW5nLkluaXRpYWxDb250ZXh0KCkpLmxvb2t1cCgiamF2YTphcHAvamRiYy94YSIpOwogCkBAIC03OSw3ICs3OSw3IEBACiAKICAgICAgICAgICAgIHV0eC5iZWdpbigpOwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJ1dHguYmVnaW4gY2FsbGVkICIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGNvbm5lY3Rpb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7CiAgICAgICAgICAgICBzID0gY29ubmVjdGlvbi5wcmVwYXJlU3RhdGVtZW50KCJpbnNlcnQgaW50byBFSkIzMF9QRVJTSVNURU5DRV9FRU1fSU5KRUNUSU9OX1BFUlNPTiB2YWx1ZXMoJzEnLCAnMScpIik7CiAgICAgICAgICAgICBzLmV4ZWN1dGUoKTsKQEAgLTk1LDcgKzk1LDcgQEAKICAgICAgICAgICAgICAgICB1dHgucm9sbGJhY2soKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oInV0eC5yb2xsYmFjayBjYWxsZWQgIik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgSXRlcmF0b3I8U3RyaW5nPiBpdGVyID0gbWFwLmtleVNldCgpLml0ZXJhdG9yKCk7CiAgICAgICAgICAgICB3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgICAgICBTdHJpbmcgdGVzdE5hbWUgPSBpdGVyLm5leHQoKTsKQEAgLTEyNiw3ICsxMjYsNyBAQAogCiAgICAgICAgIH0KIAotICAgIAlyZXR1cm47CisgICAgICAgIHJldHVybjsKICAgICB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qcGEtZHNkL2VqYi9QZXJzb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvanBhLWRzZC9lamIvUGVyc29uLmphdmEKaW5kZXggMTQzNThmZi4uOTUyY2JlYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qcGEtZHNkL2VqYi9QZXJzb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pwYS1kc2QvZWpiL1BlcnNvbi5qYXZhCkBAIC00NSw3ICs0NSw3IEBACiAgICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7CiAgICAgfQogCi0gICAgQE92ZXJyaWRlIAorICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICAgICAgIHJldHVybiAiUGVyc29uOiAobmFtZT0iICsgbmFtZSArICI7IGRhdGE9ICIgKyBkYXRhICsgIikiOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvanBhLWRzZC9lamIvU2Z1bEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvanBhLWRzZC9lamIvU2Z1bEJlYW4uamF2YQppbmRleCBhOGI2OGEzLi5iNDE1YzNmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pwYS1kc2QvZWpiL1NmdWxCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qcGEtZHNkL2VqYi9TZnVsQmVhbi5qYXZhCkBAIC00NSwyNSArNDUsMjUgQEAKIAogICAgICAgICAgICAgICAgICkKIEBTdGF0ZWZ1bAotQEVKQihuYW1lPSJlamIvU2Z1bEJlYW4iLCAKK0BFSkIobmFtZT0iZWpiL1NmdWxCZWFuIiwKICAgICAgICAgYmVhbkludGVyZmFjZT1jb20uc3VuLnMxYXNkZXYuZWpiLmVqYjMwLnBlcnNpc3RlbmNlLnR4X3Byb3BhZ2F0aW9uLlNmdWxEZWxlZ2F0ZS5jbGFzcykKIAogcHVibGljIGNsYXNzIFNmdWxCZWFuCiAgICAgaW1wbGVtZW50cyBTZnVsIHsKIAogICAgIHByaXZhdGUgU3RyaW5nIG5hbWU7Ci0gICAgCisKICAgICBwcml2YXRlIEBFSkIgU2Z1bERlbGVnYXRlIGRlbGVnYXRlOwotICAgIAorCiAgICAgcHJpdmF0ZSBAUGVyc2lzdGVuY2VDb250ZXh0KHVuaXROYW1lPSJsaWIvZWpiLWVqYjMwLXBlcnNpc3RlbmNlLXR4X3Byb3BhZ2F0aW9uLXBhcjEuamFyI2VtIiwKLSAgICAgICAgICAgICAgICB0eXBlPVBlcnNpc3RlbmNlQ29udGV4dFR5cGUuRVhURU5ERUQpIAorICAgICAgICAgICAgICAgIHR5cGU9UGVyc2lzdGVuY2VDb250ZXh0VHlwZS5FWFRFTkRFRCkKICAgICAgICAgICAgIEVudGl0eU1hbmFnZXIgZXh0ZW5kZWRFTTsKLSAKKwogICAgIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFN0cmluZyBsb29rdXBOYW1lID0gImphdmE6Y29tcC9lbnYvZWpiL1NmdWxCZWFuIjsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBJbml0aWFsQ29udGV4dCBpbml0Q3R4ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBkZWxlZ2F0ZSA9IChTZnVsRGVsZWdhdGUpIGluaXRDdHgubG9va3VwKGxvb2t1cE5hbWUpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTczLDcgKzczLDcgQEAKIAogICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBCb29sZWFuPiBkb1Rlc3RzKCkgewogICAgICAgICBQZXJzb24gcGVyc29uID0gbmV3IFBlcnNvbihuYW1lKTsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIGRlbGVnYXRlTmFtZSA9ICJkZWxnbmFtZV8iICsgbmFtZTsKICAgICAgICAgU3RyaW5nIGRlbGVnYXRlRGF0YT0gImRlbGdkYXRhOiAiICsgbmFtZTsKICAgICAgICAgZGVsZWdhdGUuY3JlYXRlKGRlbGVnYXRlTmFtZSwgZGVsZWdhdGVEYXRhKTsKQEAgLTgyLDggKzgyLDggQEAKIAogICAgICAgICBleHRlbmRlZEVNLnBlcnNpc3QocGVyc29uKTsKICAgICAgICAgUGVyc29uIGZvdW5kUGVyc29uID0gZGVsZWdhdGUuZmluZChuYW1lKTsKLSAgICAgICAgCi0gICAgICAgIAorCisKICAgICAgICAgTWFwPFN0cmluZywgQm9vbGVhbj4gbWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBCb29sZWFuPigpOwogICAgICAgICBtYXAucHV0KCJmaW5kRGVsZWdhdGVDcmVhdGVkUGVyc29uIiwgKGRQZXJzb24gIT0gbnVsbCkpOwogICAgICAgICBtYXAucHV0KCJkZWxlZ2F0ZUZvdW5kTWUiLCAoZm91bmRQZXJzb24gIT0gbnVsbCkpOwpAQCAtMTExLDUgKzExMSw1IEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJlbW92ZWQ7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pwYS1kc2QvZWpiL1NmdWxEZWxlZ2F0ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qcGEtZHNkL2VqYi9TZnVsRGVsZWdhdGUuamF2YQppbmRleCA2MmQyMDk3Li4zMzdhNDNmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pwYS1kc2QvZWpiL1NmdWxEZWxlZ2F0ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvanBhLWRzZC9lamIvU2Z1bERlbGVnYXRlLmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKICAgICBQZXJzb24gZmluZChTdHJpbmcgbmFtZSk7CiAKICAgICBib29sZWFuIHJlbW92ZShTdHJpbmcgbmFtZSk7Ci0gICAgCisKICAgICBFbnRpdHlNYW5hZ2VyIGdldEVNKCk7CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvanBhLWRzZC9lamIvU2Z1bERlbGVnYXRlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qcGEtZHNkL2VqYi9TZnVsRGVsZWdhdGVCZWFuLmphdmEKaW5kZXggOGE5NmUyMC4uZjdhN2FhZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qcGEtZHNkL2VqYi9TZnVsRGVsZWdhdGVCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qcGEtZHNkL2VqYi9TZnVsRGVsZWdhdGVCZWFuLmphdmEKQEAgLTM3LDEyICszNywxMiBAQAogICAgIHB1YmxpYyBFbnRpdHlNYW5hZ2VyIGdldEVNKCkgewogICAgICAgICByZXR1cm4gZXh0ZW5kZWRFTTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgUGVyc29uIGNyZWF0ZShTdHJpbmcgbmFtZSwgU3RyaW5nIGRhdGEpIHsKIAogICAgICAgICBQZXJzb24gcCA9IG5ldyBQZXJzb24obmFtZSk7CiAgICAgICAgIHAuc2V0RGF0YShkYXRhKTsKLSAgICAgICAgCisKICAgICAgICAgZXh0ZW5kZWRFTS5wZXJzaXN0KHApOwogICAgICAgICByZXR1cm4gcDsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pwYS1kc2Qvc3FsL2NyZWF0ZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pwYS1kc2Qvc3FsL2NyZWF0ZS5zcWwKaW5kZXggZmE2MDc0Mi4uYzBhYjQzZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qcGEtZHNkL3NxbC9jcmVhdGUuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvanBhLWRzZC9zcWwvY3JlYXRlLnNxbApAQCAtMSw0ICsxLDQgQEAKLUNSRUFURSBUQUJMRSBFSkIzMF9QRVJTSVNURU5DRV9FRU1fSU5KRUNUSU9OX1BFUlNPTiAoDQotICAgIE5BTUUgVkFSQ0hBUigyNTYpIE5PVCBOVUxMIFBSSU1BUlkgS0VZLA0KLSAgICBEQVRBIFZBUkNIQVIoMjU2KQ0KLSk7DQorQ1JFQVRFIFRBQkxFIEVKQjMwX1BFUlNJU1RFTkNFX0VFTV9JTkpFQ1RJT05fUEVSU09OICgKKyAgICBOQU1FIFZBUkNIQVIoMjU2KSBOT1QgTlVMTCBQUklNQVJZIEtFWSwKKyAgICBEQVRBIFZBUkNIQVIoMjU2KQorKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvanBhLWRzZC9zcWwvZHJvcC5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2pwYS1kc2Qvc3FsL2Ryb3Auc3FsCmluZGV4IDVlYjEzNmYuLmQwMTJjNjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvanBhLWRzZC9zcWwvZHJvcC5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9qcGEtZHNkL3NxbC9kcm9wLnNxbApAQCAtMSArMSBAQAotRFJPUCBUQUJMRSBFSkIzMF9QRVJTSVNURU5DRV9FRU1fSU5KRUNUSU9OX1BFUlNPTjsNCitEUk9QIFRBQkxFIEVKQjMwX1BFUlNJU1RFTkNFX0VFTV9JTkpFQ1RJT05fUEVSU09OOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9sYXp5YXNzb2MvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbGF6eWFzc29jL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZjRlYmZiOS4uZjViNGMwYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9sYXp5YXNzb2MvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2xhenlhc3NvYy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOCArMTUsMTggQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImpkYmMtbGF6eWFzc29jIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2xhenlhc3NvYy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2xhenlhc3NvYy9idWlsZC54bWwKaW5kZXggMTZjM2FiYy4uYjMxMTQ1OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9sYXp5YXNzb2MvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbGF6eWFzc29jL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsMjAgKzQ4LDIwIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgogICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAKKwogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktamRiYy1jb21tb24iLz4KIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+Ci0JPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuJHtqZGJjLmNvbnBvb2wubmFtZX0ubGF6eS1jb25uZWN0aW9uLWVubGlzdG1lbnQ9dHJ1ZSIvPgorICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7amRiYy5jb25wb29sLm5hbWV9LmxhenktY29ubmVjdGlvbi1lbmxpc3RtZW50PXRydWUiLz4KICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CkBAIC03MSwyNCArNzEsMjQgQEAKIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICA8L2FudGNhbGw+CiAKLSAgICAgIAorCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qZGJjLWNvbW1vbiIvPgogCi0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbGF6eWFzc29jL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbGF6eWFzc29jL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA2YzczN2E0Li4wM2JkN2YxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2xhenlhc3NvYy9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9sYXp5YXNzb2MvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNSwyNyArMjUsMjcgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLlNpbXBsZVJlcG9ydGVyQWRhcHRlcjsKIAogcHVibGljIGNsYXNzIENsaWVudCB7Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCi0JU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCk7Ci0JU3RyaW5nIHRlc3RTdWl0ZSA9ICJMYXp5QXNzb2MgIjsKKworICAgIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOworICAgIFN0cmluZyB0ZXN0U3VpdGUgPSAiTGF6eUFzc29jICI7CiAKICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgT2JqZWN0IG9ialJlZiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlU2Vzc2lvbkhvbWUiKTsKLQlTaW1wbGVTZXNzaW9uSG9tZSBzaW1wbGVTZXNzaW9uSG9tZSA9IChTaW1wbGVTZXNzaW9uSG9tZSkKKyAgICBTaW1wbGVTZXNzaW9uSG9tZSBzaW1wbGVTZXNzaW9uSG9tZSA9IChTaW1wbGVTZXNzaW9uSG9tZSkKICAgICAgICAgamF2YXgucm1pLlBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpSZWYsIFNpbXBsZVNlc3Npb25Ib21lLmNsYXNzKTsKLQlzdGF0LmFkZERlc2NyaXB0aW9uKCJSdW5uaW5nIGxhenlhc3NvYyB0ZXN0U3VpdGUxICIpOworICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlJ1bm5pbmcgbGF6eWFzc29jIHRlc3RTdWl0ZTEgIik7CiAgICAgICAgIFNpbXBsZVNlc3Npb24gc2ltcGxlU2Vzc2lvbiA9IHNpbXBsZVNlc3Npb25Ib21lLmNyZWF0ZSgpOwotICAgICAgICAKKwogICAgICAgICBib29sZWFuIHBhc3NlZCA9IHRydWU7CiAgICAgICAgIGZvciggaW50IGkgPSAwOyBpIDwgNTA7aSsrICkgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBpZiAoIHNpbXBsZVNlc3Npb24udGVzdDEoKSA9PSBmYWxzZSApIHsKICAgICAgICAgICAgICAgICAgICAgcGFzc2VkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUgKSB7CiAgICAgICAgICAgICAgICAgcGFzc2VkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgICAgICAgICAgaWYgKCBzaW1wbGVTZXNzaW9uLnRlc3QyKCkgPT0gZmFsc2UgKSB7CiAgICAgICAgICAgICAgICAgICAgIHBhc3NlZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlICkgewogICAgICAgICAgICAgICAgIHBhc3NlZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNzQsNiArNzQsNiBAQAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDIgOiAiLCBzdGF0LkZBSUwgKTsKICAgICAgICAgfQotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2xhenlhc3NvYy9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9sYXp5YXNzb2MvZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCBhMGZiNzQwLi44MDhkM2E5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2xhenlhc3NvYy9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbGF6eWFzc29jL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTUyLDYgKzUyLDYgQEAKICAgICAgIDx0cmFucy1hdHRyaWJ1dGU+UmVxdWlyZWQ8L3RyYW5zLWF0dHJpYnV0ZT4KICAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgPC9hc3NlbWJseS1kZXNjcmlwdG9yPgotICAgICAgCisKIDwvZWpiLWphcj4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9sYXp5YXNzb2MvZWpiL1NpbXBsZVNlc3Npb25CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2xhenlhc3NvYy9lamIvU2ltcGxlU2Vzc2lvbkJlYW4uamF2YQppbmRleCA1OGFjMzU1Li5jYzA1NGIxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2xhenlhc3NvYy9lamIvU2ltcGxlU2Vzc2lvbkJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2xhenlhc3NvYy9lamIvU2ltcGxlU2Vzc2lvbkJlYW4uamF2YQpAQCAtMjcsNTQgKzI3LDU0IEBACiB7CiAKICAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IGN0eHRfOwotICAgIHByaXZhdGUgSW5pdGlhbENvbnRleHQgaWNfOyAKKyAgICBwcml2YXRlIEluaXRpYWxDb250ZXh0IGljXzsKICAgICBwcml2YXRlIERhdGFTb3VyY2UgZHM7CiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgY29udGV4dCkgewogICAgICAgICBjdHh0XyA9IGNvbnRleHQ7Ci0JdHJ5IHsKLQkgICAgaWNfID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JICAgIGRzID0gKERhdGFTb3VyY2UpaWNfLmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7Ci0JfSBjYXRjaCggTmFtaW5nRXhjZXB0aW9uIG5lICkgewotCSAgICBuZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisgICAgdHJ5IHsKKyAgICAgICAgaWNfID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgIGRzID0gKERhdGFTb3VyY2UpaWNfLmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7CisgICAgfSBjYXRjaCggTmFtaW5nRXhjZXB0aW9uIG5lICkgeworICAgICAgICBuZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQlDb25uZWN0aW9uIGNvbm4xID0gbnVsbDsKLQlib29sZWFuIHBhc3NlZCA9IGZhbHNlOwotCS8vY2xlYW4gdGhlIGRhdGFiYXNlCi0JdHJ5IHsKLQkgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JfSBjYXRjaCggRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgcmV0dXJuIGZhbHNlOworICAgIENvbm5lY3Rpb24gY29ubjEgPSBudWxsOworICAgIGJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CisgICAgLy9jbGVhbiB0aGUgZGF0YWJhc2UKKyAgICB0cnkgeworICAgICAgICBjb25uMSA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLQkKLQlyZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIHRlc3QyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JQ29ubmVjdGlvbiBjb25uMSA9IG51bGw7CisgICAgQ29ubmVjdGlvbiBjb25uMSA9IG51bGw7CiAgICAgICAgIFN0YXRlbWVudCBzdG10ID0gbnVsbDsKLQlib29sZWFuIHBhc3NlZCA9IGZhbHNlOwotCS8vY2xlYW4gdGhlIGRhdGFiYXNlCi0JdHJ5IHsKLQkgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKKyAgICAvL2NsZWFuIHRoZSBkYXRhYmFzZQorICAgIHRyeSB7CisgICAgICAgIGNvbm4xID0gZHMuZ2V0Q29ubmVjdGlvbigpOwogICAgICAgICAgICAgc3RtdCA9IGNvbm4xLmNyZWF0ZVN0YXRlbWVudCgpOwogICAgICAgICAgICAgc3RtdC5leGVjdXRlUXVlcnkoICJTRUxFQ1QgKiBGUk9NIFRYTEVWRUxTV0lUQ0giKTsKLQl9IGNhdGNoKCBFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICByZXR1cm4gZmFsc2U7Ci0JfSBmaW5hbGx5IHsKKyAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIGlmIChzdG10ICE9IG51bGwgKSB7CiAgICAgICAgICAgICAgICAgdHJ5IHsgc3RtdC5jbG9zZSgpOyB9Y2F0Y2goIEV4Y2VwdGlvbiBlICkge30KICAgICAgICAgICAgIH0KICAgICAgICAgfQotCQotCXJldHVybiB0cnVlOworCisgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbGF6eWFzc29jL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbGF6eWFzc29jL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCBiMjI3Y2FjLi40MmQ1YTE2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2xhenlhc3NvYy9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9sYXp5YXNzb2Mvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDkgKzEsOSBAQAotRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIOw0KLQ0KLUNSRUFURSBUQUJMRSBUWExFVkVMU1dJVENIICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQotSU5TRVJUIElOVE8gVFhMRVZFTFNXSVRDSCBWQUxVRVMoMSwgJ3d4eXonKTsNCi1JTlNFUlQgSU5UTyBUWExFVkVMU1dJVENIIFZBTFVFUygyLCAncHFycycpOw0KK0Ryb3AgdGFibGUgVFhMRVZFTFNXSVRDSDsKKworQ1JFQVRFIFRBQkxFIFRYTEVWRUxTV0lUQ0ggKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQorKTsKKworSU5TRVJUIElOVE8gVFhMRVZFTFNXSVRDSCBWQUxVRVMoMSwgJ3d4eXonKTsKK0lOU0VSVCBJTlRPIFRYTEVWRUxTV0lUQ0ggVkFMVUVTKDIsICdwcXJzJyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2xhenlhc3NvYy9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9sYXp5YXNzb2Mvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAppbmRleCAwYzEyNDJmLi5kMTFhMTE1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL2xhenlhc3NvYy9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbGF6eWFzc29jL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEsMiArMSwyIEBACi1Ecm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0g7DQotRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIMjsNCitEcm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0g7CitEcm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0gyOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9tYXJrY29ubmVjdGlvbmFzYmFkLmxvY2FsL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL21hcmtjb25uZWN0aW9uYXNiYWQubG9jYWwvYnVpbGQucHJvcGVydGllcwppbmRleCBkMjZiMWI0Li44ODkyYzQ0IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL21hcmtjb25uZWN0aW9uYXNiYWQubG9jYWwvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL21hcmtjb25uZWN0aW9uYXNiYWQubG9jYWwvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTkgKzE1LDE5IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqZGJjLW1hcmtjb25uZWN0aW9uYXNiYWQubG9jYWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IjEyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL21hcmtjb25uZWN0aW9uYXNiYWQubG9jYWwvZWpiL1NpbXBsZUJNUC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9tYXJrY29ubmVjdGlvbmFzYmFkLmxvY2FsL2VqYi9TaW1wbGVCTVAuamF2YQppbmRleCA1ZjcyODcxLi4yNzRjZjFmIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL21hcmtjb25uZWN0aW9uYXNiYWQubG9jYWwvZWpiL1NpbXBsZUJNUC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbWFya2Nvbm5lY3Rpb25hc2JhZC5sb2NhbC9lamIvU2ltcGxlQk1QLmphdmEKQEAgLTI5LDYgKzI5LDYgQEAKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MygpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0NCgpIHRocm93cyBSZW1vdGVFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0NShpbnQgY291bnQsIGJvb2xlYW4gZXhwZWN0U3VjY2VzcykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbWFya2Nvbm5lY3Rpb25hc2JhZC5sb2NhbC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9tYXJrY29ubmVjdGlvbmFzYmFkLmxvY2FsL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKaW5kZXggODYxOWNlMy4uY2ViN2U0NSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9tYXJrY29ubmVjdGlvbmFzYmFkLmxvY2FsL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9tYXJrY29ubmVjdGlvbmFzYmFkLmxvY2FsL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKQEAgLTIwNyw3ICsyMDcsNyBAQAogICAgICAgICAgICAgICAgIFN0YXRlbWVudCBzdG10ID0gY29ubnNbaV0uY3JlYXRlU3RhdGVtZW50KCk7CiAgICAgICAgICAgICAgICAgc3RtdC5leGVjdXRlVXBkYXRlKCJpbnNlcnQgaW50byBvX2N1c3RvbWVyIHZhbHVlcyAoIiArIGkgKyAiLCdhJykiKTsKICAgICAgICAgfQotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICBpZihleHBlY3RTdWNjZXNzKXsKICAgICAgICAgICAgICAgICAgICAgcGFzc2VkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9tYXJrY29ubmVjdGlvbmFzYmFkLmxvY2FsL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbWFya2Nvbm5lY3Rpb25hc2JhZC5sb2NhbC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggZTQ5MTRmNi4uZjI1NjA3NiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9tYXJrY29ubmVjdGlvbmFzYmFkLmxvY2FsL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL21hcmtjb25uZWN0aW9uYXNiYWQubG9jYWwvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDcgKzEsNyBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KLQ0KLUNSRUFURSBUQUJMRSBPX0N1c3RvbWVyICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOworCitDUkVBVEUgVEFCTEUgT19DdXN0b21lciAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL21hcmtjb25uZWN0aW9uYXNiYWQubG9jYWwvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbWFya2Nvbm5lY3Rpb25hc2JhZC5sb2NhbC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IDcwZDFmY2MuLmQ4NTRiOTUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbWFya2Nvbm5lY3Rpb25hc2JhZC5sb2NhbC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbWFya2Nvbm5lY3Rpb25hc2JhZC5sb2NhbC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xICsxIEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9tYXJrY29ubmVjdGlvbmFzYmFkLnhhL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL21hcmtjb25uZWN0aW9uYXNiYWQueGEvYnVpbGQucHJvcGVydGllcwppbmRleCBhZjI0ZGFmLi4yMGJjODVkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL21hcmtjb25uZWN0aW9uYXNiYWQueGEvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL21hcmtjb25uZWN0aW9uYXNiYWQueGEvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTkgKzE1LDE5IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqZGJjLW1hcmtjb25uZWN0aW9uYXNiYWQueGEiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IjEyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL21hcmtjb25uZWN0aW9uYXNiYWQueGEvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9tYXJrY29ubmVjdGlvbmFzYmFkLnhhL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA1ZGRmNTQ5Li44YmU4YTJlIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL21hcmtjb25uZWN0aW9uYXNiYWQueGEvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbWFya2Nvbm5lY3Rpb25hc2JhZC54YS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTExNywxNCArMTE3LDE0IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiIE1hcmstQ29ubmVjdGlvbi1Bcy1CYWQgW0xvY2FsLVhBIC1TaGFyZWFibGUtU2hhcmVhYmxlIC0gUmVhZC1Xcml0ZV0gOiAiLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLSAgICAgICAgIGlmIChzaW1wbGVCTVAudGVzdDExKCkgJiYgZ2V0TW9uaXRvcmFibGVQcm9wZXJ0eU9mQ29ubmVjdGlvblBvb2woImpkYmMtc2hhcmVhYmxlLXBvb2wiKSA9PSAxNSAmJiAKKyAgICAgICAgIGlmIChzaW1wbGVCTVAudGVzdDExKCkgJiYgZ2V0TW9uaXRvcmFibGVQcm9wZXJ0eU9mQ29ubmVjdGlvblBvb2woImpkYmMtc2hhcmVhYmxlLXBvb2wiKSA9PSAxNSAmJgogICAgICAgICAgICAgICAgICBnZXRNb25pdG9yYWJsZVByb3BlcnR5T2ZDb25uZWN0aW9uUG9vbCgiamRiYy1sb2NhbC1wb29sIikgPT0gMykgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIiBNYXJrLUNvbm5lY3Rpb24tQXMtQmFkIFtMb2NhbC1YQSAtU2hhcmVhYmxlLVNoYXJlYWJsZSAtIFJlYWQtUmVhZF0gOiAiLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIiBNYXJrLUNvbm5lY3Rpb24tQXMtQmFkIFtMb2NhbC1YQSAtU2hhcmVhYmxlLVNoYXJlYWJsZSAtIFJlYWQtUmVhZF0gOiAiLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLSAgICAgICAgIGlmIChzaW1wbGVCTVAudGVzdDEyKCkgJiYgZ2V0TW9uaXRvcmFibGVQcm9wZXJ0eU9mQ29ubmVjdGlvblBvb2woImpkYmMtc2hhcmVhYmxlLXBvb2wiKSA9PSAxNiAmJiAKKyAgICAgICAgIGlmIChzaW1wbGVCTVAudGVzdDEyKCkgJiYgZ2V0TW9uaXRvcmFibGVQcm9wZXJ0eU9mQ29ubmVjdGlvblBvb2woImpkYmMtc2hhcmVhYmxlLXBvb2wiKSA9PSAxNiAmJgogICAgICAgICAgICAgICAgICBnZXRNb25pdG9yYWJsZVByb3BlcnR5T2ZDb25uZWN0aW9uUG9vbCgiamRiYy1sb2NhbC1wb29sIikgPT0gNCkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIiBNYXJrLUNvbm5lY3Rpb24tQXMtQmFkIFtMb2NhbC1YQSAtU2hhcmVhYmxlLVNoYXJlYWJsZSAtIFdyaXRlLVJlYWRdIDogIiwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTEzOSwxOCArMTM5LDE4IEBACiAKICAgICBwdWJsaWMgaW50IGdldE1vbml0b3JhYmxlUHJvcGVydHlPZkNvbm5lY3Rpb25Qb29sKFN0cmluZyBwb29sTmFtZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKLQlmaW5hbCBTdHJpbmcgdXJsU3RyID0gInNlcnZpY2U6am14OnJtaTovLy9qbmRpL3JtaTovLyIgKyBIT1NUX05BTUUgKyAiOiIgKyBKTVhfUE9SVCArICIvam14cm1pIjsgICAgCisgICAgZmluYWwgU3RyaW5nIHVybFN0ciA9ICJzZXJ2aWNlOmpteDpybWk6Ly8vam5kaS9ybWk6Ly8iICsgSE9TVF9OQU1FICsgIjoiICsgSk1YX1BPUlQgKyAiL2pteHJtaSI7CiAgICAgICAgIGZpbmFsIEpNWFNlcnZpY2VVUkwgdXJsID0gbmV3IEpNWFNlcnZpY2VVUkwodXJsU3RyKTsKIAotCWZpbmFsIEpNWENvbm5lY3RvciBqbXhDb25uID0gSk1YQ29ubmVjdG9yRmFjdG9yeS5jb25uZWN0KHVybCk7Ci0JZmluYWwgTUJlYW5TZXJ2ZXJDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBqbXhDb25uLmdldE1CZWFuU2VydmVyQ29ubmVjdGlvbigpOworICAgIGZpbmFsIEpNWENvbm5lY3RvciBqbXhDb25uID0gSk1YQ29ubmVjdG9yRmFjdG9yeS5jb25uZWN0KHVybCk7CisgICAgZmluYWwgTUJlYW5TZXJ2ZXJDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBqbXhDb25uLmdldE1CZWFuU2VydmVyQ29ubmVjdGlvbigpOwogCiAgICAgICAgIE9iamVjdE5hbWUgb2JqZWN0TmFtZSA9CiAgICAgICAgICAgICAgICAgbmV3IE9iamVjdE5hbWUoImFteDpwcD0vbW9uL3NlcnZlci1tb25bc2VydmVyXSx0eXBlPWpkYmMtY29ubmVjdGlvbi1wb29sLW1vbixuYW1lPXJlc291cmNlcy8iICsgcG9vbE5hbWUpOwogCi0JamF2YXgubWFuYWdlbWVudC5vcGVubWJlYW4uQ29tcG9zaXRlRGF0YVN1cHBvcnQgcmV0dXJuVmFsdWUgPSAKLQkJKGphdmF4Lm1hbmFnZW1lbnQub3Blbm1iZWFuLkNvbXBvc2l0ZURhdGFTdXBwb3J0KSAKLQkJY29ubmVjdGlvbi5nZXRBdHRyaWJ1dGUob2JqZWN0TmFtZSwgTlVNX0NPTl9ERVNUUk9ZRURfQ09VTlQpOworICAgIGphdmF4Lm1hbmFnZW1lbnQub3Blbm1iZWFuLkNvbXBvc2l0ZURhdGFTdXBwb3J0IHJldHVyblZhbHVlID0KKyAgICAgICAgKGphdmF4Lm1hbmFnZW1lbnQub3Blbm1iZWFuLkNvbXBvc2l0ZURhdGFTdXBwb3J0KQorICAgICAgICBjb25uZWN0aW9uLmdldEF0dHJpYnV0ZShvYmplY3ROYW1lLCBOVU1fQ09OX0RFU1RST1lFRF9DT1VOVCk7CiAKICAgICAgICAgcmV0dXJuIG5ldyBJbnRlZ2VyKHJldHVyblZhbHVlLmdldCgiY291bnQiKS50b1N0cmluZygpKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL21hcmtjb25uZWN0aW9uYXNiYWQueGEvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9tYXJrY29ubmVjdGlvbmFzYmFkLnhhL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCA0NmJlMzlmLi42ZDlhN2M0IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL21hcmtjb25uZWN0aW9uYXNiYWQueGEvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbWFya2Nvbm5lY3Rpb25hc2JhZC54YS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsOCArMSw4IEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQotDQotQ1JFQVRFIFRBQkxFIE9fQ3VzdG9tZXIgKGlkIGludGVnZXIgLCBkZXNjcmlwdGlvbiBjaGFyKDUwKSk7DQotDQotZHJvcCB0YWJsZSBvd25lcjsNCi0NCi1jcmVhdGUgdGFibGUgb3duZXIgKCBpZCBpbnRlZ2VyLCBkZXNjcmlwdGlvbiBjaGFyKDUwKSk7DQotDQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOworCitDUkVBVEUgVEFCTEUgT19DdXN0b21lciAoaWQgaW50ZWdlciAsIGRlc2NyaXB0aW9uIGNoYXIoNTApKTsKKworZHJvcCB0YWJsZSBvd25lcjsKKworY3JlYXRlIHRhYmxlIG93bmVyICggaWQgaW50ZWdlciwgZGVzY3JpcHRpb24gY2hhcig1MCkpOworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL21hcmtjb25uZWN0aW9uYXNiYWQueGEvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbWFya2Nvbm5lY3Rpb25hc2JhZC54YS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IGE1ZWEyZjguLmQ4N2Q1ZGUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbWFya2Nvbm5lY3Rpb25hc2JhZC54YS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbWFya2Nvbm5lY3Rpb25hc2JhZC54YS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xLDIgKzEsMiBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KLWRyb3AgdGFibGUgb3duZXI7DQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOworZHJvcCB0YWJsZSBvd25lcjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbWF4Y29ubmVjdGlvbnVzYWdlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL21heGNvbm5lY3Rpb251c2FnZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGIzZGY3ZmQuLmRkYTgwZGMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbWF4Y29ubmVjdGlvbnVzYWdlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9tYXhjb25uZWN0aW9udXNhZ2UvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTkgKzE1LDE5IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqZGJjLW1heGNvbm5lY3Rpb251c2FnZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iMTIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbWF4Y29ubmVjdGlvbnVzYWdlL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbWF4Y29ubmVjdGlvbnVzYWdlL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBmODViYjE5Li5iNjI2YWY0IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL21heGNvbm5lY3Rpb251c2FnZS9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9tYXhjb25uZWN0aW9udXNhZ2UvY2xpZW50L0NsaWVudC5qYXZhCkBAIC02Nyw3ICs2Nyw3IEBACiAKICAgICAgICAgLy9Db21tZW50ZWQgYXMgdGhpcyB0ZXN0IGlzIG5vdCB2YWxpZC4KICAgICAgICAgLy9waHlzaWNhbCBjb25uZWN0aW9uIChkcy5nZXRDb25uZWN0aW9uKGNvbm4pKSB3aWxsIGJlIGRpZmZlcmVudCBlYWNoIHRpbWUuCi0gICAgICAgIAorCiAgICAgICAgIC8qdXNlWEEgPSB0cnVlOwogICAgICAgICBzdGF0dXMgPSBjb25uZWN0aW9uU2hhcmluZ1Rlc3Qoc2ltcGxlQk1QLCB1c2VYQSwgMTIyMjEpOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL21heGNvbm5lY3Rpb251c2FnZS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL21heGNvbm5lY3Rpb251c2FnZS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggNTFiMDczNS4uMzk2YzU2NiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9tYXhjb25uZWN0aW9udXNhZ2Uvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbWF4Y29ubmVjdGlvbnVzYWdlL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSw3ICsxLDcgQEAKLURyb3AgdGFibGUgbWF4X2Nvbm5lY3Rpb25fdXNhZ2U7DQotDQotQ1JFQVRFIFRBQkxFIG1heF9jb25uZWN0aW9uX3VzYWdlICgNCi0gICAgaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICB2YWx1ZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCitEcm9wIHRhYmxlIG1heF9jb25uZWN0aW9uX3VzYWdlOworCitDUkVBVEUgVEFCTEUgbWF4X2Nvbm5lY3Rpb25fdXNhZ2UgKAorICAgIGlkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICB2YWx1ZSAgICAgICAgIGNoYXIoMTYpCispOworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL21heGNvbm5lY3Rpb251c2FnZS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9tYXhjb25uZWN0aW9udXNhZ2Uvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAppbmRleCA0ZTU3N2EzLi5iM2M4Yjk3IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL21heGNvbm5lY3Rpb251c2FnZS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbWF4Y29ubmVjdGlvbnVzYWdlL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEgKzEgQEAKLURyb3AgdGFibGUgbWF4X2Nvbm5lY3Rpb25fdXNhZ2U7DQorRHJvcCB0YWJsZSBtYXhfY29ubmVjdGlvbl91c2FnZTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbXVsdGlwbGVjbG9zZWNvbm5lY3Rpb24vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbXVsdGlwbGVjbG9zZWNvbm5lY3Rpb24vYnVpbGQucHJvcGVydGllcwppbmRleCA2YmFlMzFiLi5mMGMyOGJkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL211bHRpcGxlY2xvc2Vjb25uZWN0aW9uL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9tdWx0aXBsZWNsb3NlY29ubmVjdGlvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOCArMTUsMTggQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImpkYmMtbXVsdGlwbGVjbG9zZWNvbm5lY3Rpb24iLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbXVsdGlwbGVjbG9zZWNvbm5lY3Rpb24vc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9tdWx0aXBsZWNsb3NlY29ubmVjdGlvbi9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggYjIyN2NhYy4uNDJkNWExNiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9tdWx0aXBsZWNsb3NlY29ubmVjdGlvbi9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9tdWx0aXBsZWNsb3NlY29ubmVjdGlvbi9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsOSArMSw5IEBACi1Ecm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0g7DQotDQotQ1JFQVRFIFRBQkxFIFRYTEVWRUxTV0lUQ0ggKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCi1JTlNFUlQgSU5UTyBUWExFVkVMU1dJVENIIFZBTFVFUygxLCAnd3h5eicpOw0KLUlOU0VSVCBJTlRPIFRYTEVWRUxTV0lUQ0ggVkFMVUVTKDIsICdwcXJzJyk7DQorRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIOworCitDUkVBVEUgVEFCTEUgVFhMRVZFTFNXSVRDSCAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCitJTlNFUlQgSU5UTyBUWExFVkVMU1dJVENIIFZBTFVFUygxLCAnd3h5eicpOworSU5TRVJUIElOVE8gVFhMRVZFTFNXSVRDSCBWQUxVRVMoMiwgJ3BxcnMnKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbXVsdGlwbGVjbG9zZWNvbm5lY3Rpb24vc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbXVsdGlwbGVjbG9zZWNvbm5lY3Rpb24vc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAppbmRleCAwYzEyNDJmLi5kMTFhMTE1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL211bHRpcGxlY2xvc2Vjb25uZWN0aW9uL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9tdWx0aXBsZWNsb3NlY29ubmVjdGlvbi9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xLDIgKzEsMiBAQAotRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIOw0KLURyb3AgdGFibGUgVFhMRVZFTFNXSVRDSDI7DQorRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIOworRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIMjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbXVsdGlwbGV1c2VyY3JlZGVudGlhbHMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbXVsdGlwbGV1c2VyY3JlZGVudGlhbHMvYnVpbGQucHJvcGVydGllcwppbmRleCBmYzQ4YWM5Li4xNjEzNmRjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL211bHRpcGxldXNlcmNyZWRlbnRpYWxzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9tdWx0aXBsZXVzZXJjcmVkZW50aWFscy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOCArMTUsMTggQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImpkYmMtbXVsdGlwbGV1c2VyY3JlZGVudGlhbHMiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbXVsdGlwbGV1c2VyY3JlZGVudGlhbHMvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9tdWx0aXBsZXVzZXJjcmVkZW50aWFscy9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggODcwNzNjYS4uYTcxZGQ4YSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9tdWx0aXBsZXVzZXJjcmVkZW50aWFscy9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9tdWx0aXBsZXVzZXJjcmVkZW50aWFscy9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsOCArMSw4IEBACi1DQUxMIFNZU0NTX1VUSUwuU1lTQ1NfU0VUX0RBVEFCQVNFX1BST1BFUlRZKA0KLSAgICAnZGVyYnkudXNlci5kZXJieScsDQotICAgICdkZXJieScpICAgICAgOw0KLQ0KLUNBTEwgU1lTQ1NfVVRJTC5TWVNDU19TRVRfREFUQUJBU0VfUFJPUEVSVFkoDQotICAgICAgICAnZGVyYnkudXNlci5qYXZhZGInLA0KLSAgICAgICAgJ2phdmFkYicpICAgICA7DQotDQorQ0FMTCBTWVNDU19VVElMLlNZU0NTX1NFVF9EQVRBQkFTRV9QUk9QRVJUWSgKKyAgICAnZGVyYnkudXNlci5kZXJieScsCisgICAgJ2RlcmJ5JykgICAgICA7CisKK0NBTEwgU1lTQ1NfVVRJTC5TWVNDU19TRVRfREFUQUJBU0VfUFJPUEVSVFkoCisgICAgICAgICdkZXJieS51c2VyLmphdmFkYicsCisgICAgICAgICdqYXZhZGInKSAgICAgOworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vbmFjYy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vbmFjYy9idWlsZC54bWwKaW5kZXggNTIzNDc3ZC4uMWE0MGUwNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub25hY2MvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm9uYWNjL2J1aWxkLnhtbApAQCAtMjQsNyArMjQsNyBAQAogXT4KIAogPHByb2plY3QgbmFtZT0ibm9uYWNjIiBiYXNlZGlyPSIuIiBkZWZhdWx0PSJ1c2FnZSI+Ci0gICAgCisKICAgICAmY29tbW9uU2V0dXA7CiAgICAgJmNvbW1vbkJ1aWxkOwogICAgICZ0ZXN0UHJvcGVydGllczsKQEAgLTYwLDI0ICs2MCwyNCBAQAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXR1cC1zcWwiLz4KICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iY29tLnN1bi5zMWFzZGV2LmpkYmMubm9uYWNjLlNpbXBsZUpkYmNDbGllbnQiIGZvcms9InRydWUiPgogICAgICAgICA8YXJnIHZhbHVlPSJqZGJjL25vbmFjYyIvPgotICAgICAgCisKICAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0ib3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsSG9zdCIgdmFsdWU9ImxvY2FsaG9zdCIvPgogICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0IiB2YWx1ZT0iMzcwMCIvPgotICAgICAgICAKKwogICAgICAgICA8Y2xhc3NwYXRoPgogICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KIDwhLS0gICAgICAgICAgPHBhdGhlbGVtZW50IHBhdGg9IiR7czFhc3Rlc3QuY2xhc3NwYXRofSIvPi0tPgotPCEtLQkgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuUzFBU19IT01FfS9saWIvaW5zdGFsbC9hcHBsaWNhdGlvbnMvam1zcmEvaW1xam1zcmEuamFyIi8+LS0+Ci0JICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXIiLz4KKzwhLS0gICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LlMxQVNfSE9NRX0vbGliL2luc3RhbGwvYXBwbGljYXRpb25zL2ptc3JhL2ltcWptc3JhLmphciIvPi0tPgorICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyIi8+CiAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Fzc2VtYmxlLmRpcn0iLz4KICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIi8+CiAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwLXNxbCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlLnNxbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub25hY2MvY2xpZW50L1NpbXBsZUpkYmNDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm9uYWNjL2NsaWVudC9TaW1wbGVKZGJjQ2xpZW50LmphdmEKaW5kZXggMDhmNWJlMC4uYWFhODA0NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub25hY2MvY2xpZW50L1NpbXBsZUpkYmNDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vbmFjYy9jbGllbnQvU2ltcGxlSmRiY0NsaWVudC5qYXZhCkBAIC0yMyw3ICsyMyw3IEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci5TaW1wbGVSZXBvcnRlckFkYXB0ZXI7CiAKIHB1YmxpYyBjbGFzcyBTaW1wbGVKZGJjQ2xpZW50IHsKLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKCBTdHJpbmcgYXJndltdICkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFN0cmluZyB0ZXN0U3VpdGUgPSAiTm9uQUNDICI7CiAgICAgICAgIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOwpAQCAtMzksNyArMzksNyBAQAogCiAgICAgICAgICAgICBzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOwogICAgICAgICAgICAgc3RtdC5leGVjdXRlUXVlcnkoIlNFTEVDVCAqIEZST00gTk9OQUNDIik7Ci0gICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAidGVzdDEgIiwgc3RhdC5QQVNTICk7IAorICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgInRlc3QxICIsIHN0YXQuUEFTUyApOwogICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICJ0ZXN0MSAiLCAgc3RhdC5GQUlMICk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vbmFjYy9zcWwvY3JlYXRlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm9uYWNjL3NxbC9jcmVhdGUuc3FsCmluZGV4IDk3ZDQ3MjEuLjVjMzM4NjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm9uYWNjL3NxbC9jcmVhdGUuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm9uYWNjL3NxbC9jcmVhdGUuc3FsCkBAIC0xLDUgKzEsNSBAQAogRFJPUCBUQUJMRSBOT05BQ0M7CiBDUkVBVEUgVEFCTEUgTk9OQUNDKAotICAgIG5hbWUgY2hhcigyMCksIAorICAgIG5hbWUgY2hhcigyMCksCiAgICAgbnVtIGludGVnZXIKICk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vcGFzc3dkZm9yZGIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm9wYXNzd2Rmb3JkYi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDFiYjAwZjUuLmY0ODliOTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm9wYXNzd2Rmb3JkYi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm9wYXNzd2Rmb3JkYi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOCArMTUsMTggQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImpkYmMtbm9wYXNzd2Rmb3JkYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3Bhc3N3ZGZvcmRiL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm9wYXNzd2Rmb3JkYi9idWlsZC54bWwKaW5kZXggODVmYTJkYi4uNzZmNWFkZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3Bhc3N3ZGZvcmRiL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vcGFzc3dkZm9yZGIvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OCw0NyArNDgsNDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqLyouY2xhc3MiIC8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgIAorCiAgICAgICA8IS0tIHNldCB1cCBub24geGEgcG9vbHMgLS0+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qZGJjLWNvbW1vbiIvPgotICAgICAgCisKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvczFxZURCMSIvPgogICAgICAgPC9hbnRjYWxsPgotICAgICAgCisKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1ub3Bhc3N3ZGZvcmRiLXBvb2wiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgotCTxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgotCSAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLW5vcGFzc3dkZm9yZGItcG9vbC5wcm9wZXJ0eS5QYXNzd29yZD0iLz4KKyAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKKyAgICAgIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy1ub3Bhc3N3ZGZvcmRiLXBvb2wucHJvcGVydHkuUGFzc3dvcmQ9Ii8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1ub3Bhc3N3ZGZvcmRiLXBvb2wiLz4KKyAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJqZGJjLW5vcGFzc3dkZm9yZGItcG9vbCIvPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9zMXFlREIyIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgICAKKwogICAgICAgPCEtLSBTZXQgdXAgWEEgcG9vbHMgLS0+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtbm9wYXNzd2Rmb3JkYi14YS1wb29sLTEiLz4KLQk8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS50eXBlIiB2YWx1ZT0iamF2YXguc3FsLlhBRGF0YVNvdXJjZSIvPgotCTxwYXJhbSBuYW1lPSJkYi5jbGFzcyIgdmFsdWU9Im9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnRYQURhdGFTb3VyY2UiLz4KKyAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS50eXBlIiB2YWx1ZT0iamF2YXguc3FsLlhBRGF0YVNvdXJjZSIvPgorICAgIDxwYXJhbSBuYW1lPSJkYi5jbGFzcyIgdmFsdWU9Im9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnRYQURhdGFTb3VyY2UiLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICAgIAorCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL3MxcWVEQi14YSIvPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJqZGJjLW5vcGFzc3dkZm9yZGIteGEtcG9vbC0xIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgICAKKwogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9zMXFlREIxLXhhIi8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtbm9wYXNzd2Rmb3JkYi14YS1wb29sLTEiLz4KQEAgLTk2LDMwICs5NiwzMCBAQAogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtbm9wYXNzd2Rmb3JkYi14YS1wb29sLTIiLz4KLQk8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS50eXBlIiB2YWx1ZT0iamF2YXguc3FsLlhBRGF0YVNvdXJjZSIvPgotCTxwYXJhbSBuYW1lPSJkYi5jbGFzcyIgdmFsdWU9Im9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnRYQURhdGFTb3VyY2UiLz4KKyAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS50eXBlIiB2YWx1ZT0iamF2YXguc3FsLlhBRGF0YVNvdXJjZSIvPgorICAgIDxwYXJhbSBuYW1lPSJkYi5jbGFzcyIgdmFsdWU9Im9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnRYQURhdGFTb3VyY2UiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgotCTxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgotCSAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLW5vcGFzc3dkZm9yZGIteGEtcG9vbC0yLnByb3BlcnR5LlBhc3N3b3JkPSIvPgorICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgorICAgICAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLW5vcGFzc3dkZm9yZGIteGEtcG9vbC0yLnByb3BlcnR5LlBhc3N3b3JkPSIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtbm9wYXNzd2Rmb3JkYi14YS1wb29sLTIiLz4KKyAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJqZGJjLW5vcGFzc3dkZm9yZGIteGEtcG9vbC0yIi8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL3MxcWVEQjIteGEiLz4KICAgICAgIDwvYW50Y2FsbD4KIAotICAgICAgCisKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCIvPgpAQCAtMTI4LDI3ICsxMjgsMjcgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvczFxZURCMSIvPgogICAgICAgPC9hbnRjYWxsPgotICAgICAgCisKICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamRiYy1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtbm9wYXNzd2Rmb3JkYi1wb29sIi8+CisgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1ub3Bhc3N3ZGZvcmRiLXBvb2wiLz4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvczFxZURCMiIvPgogICAgICAgPC9hbnRjYWxsPgotICAgICAgCisKICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamRiYy1jb21tb24iLz4KIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9zMXFlREIxLXhhIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWpkYmMtY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJqZGJjLW5vcGFzc3dkZm9yZGIteGEtcG9vbC0xIi8+CisgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1ub3Bhc3N3ZGZvcmRiLXhhLXBvb2wtMSIvPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9zMXFlREIteGEiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamRiYy1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtbm9wYXNzd2Rmb3JkYi14YS1wb29sLTIiLz4KKyAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJqZGJjLW5vcGFzc3dkZm9yZGIteGEtcG9vbC0yIi8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL3MxcWVEQjIteGEiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm9wYXNzd2Rmb3JkYi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vcGFzc3dkZm9yZGIvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDlhMDA5MjkuLjQzZWI5YmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm9wYXNzd2Rmb3JkYi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3Bhc3N3ZGZvcmRiL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjUsNTggKzI1LDU4IEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci5TaW1wbGVSZXBvcnRlckFkYXB0ZXI7CiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAotCVNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOwotCVN0cmluZyB0ZXN0U3VpdGUgPSAiTm9QYXNzd29yZGZvckRCICI7CisKKyAgICBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKKyAgICBTdHJpbmcgdGVzdFN1aXRlID0gIk5vUGFzc3dvcmRmb3JEQiAiOwogCiAgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgIE9iamVjdCBvYmpSZWYgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZVNlc3Npb25Ib21lIik7Ci0JU2ltcGxlU2Vzc2lvbkhvbWUgc2ltcGxlU2Vzc2lvbkhvbWUgPSAoU2ltcGxlU2Vzc2lvbkhvbWUpCisgICAgU2ltcGxlU2Vzc2lvbkhvbWUgc2ltcGxlU2Vzc2lvbkhvbWUgPSAoU2ltcGxlU2Vzc2lvbkhvbWUpCiAgICAgICAgIGphdmF4LnJtaS5Qb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqUmVmLCBTaW1wbGVTZXNzaW9uSG9tZS5jbGFzcyk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFdpbGwgZmFpbCB0aWxsIERlcmJ5IGdldHMgYSBiZXR0ZXIgWEEgZHJpdmVyIik7Ci0Jc3RhdC5hZGREZXNjcmlwdGlvbigiTm8gUGFzc3dvcmQgZm9yIERCIHRlc3RzIik7CisgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiTm8gUGFzc3dvcmQgZm9yIERCIHRlc3RzIik7CiAgICAgICAgIFNpbXBsZVNlc3Npb24gc2ltcGxlU2Vzc2lvbiA9IHNpbXBsZVNlc3Npb25Ib21lLmNyZWF0ZSgpOwotICAgICAgICAJCi0JaWYgKHNpbXBsZVNlc3Npb24udGVzdDEoKSApIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDEgOiAiICwgc3RhdC5QQVNTICk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDEgOiAiICwgc3RhdC5GQUlMICk7Ci0JfQorCisgICAgaWYgKHNpbXBsZVNlc3Npb24udGVzdDEoKSApIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDEgOiAiICwgc3RhdC5QQVNTICk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDEgOiAiICwgc3RhdC5GQUlMICk7CisgICAgfQogCiAgICAgICAgIGlmIChzaW1wbGVTZXNzaW9uLnRlc3QyKCkgKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3QyIDogIiAsIHN0YXQuUEFTUyApOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3QyIDogIiAsIHN0YXQuRkFJTCApOwotCX0KLSAgICAgICAgCi0gICAgICAgIGlmIChzaW1wbGVTZXNzaW9uLnRlc3QzKCkgKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3QzIDogIiAsIHN0YXQuUEFTUyApOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3QzIDogIiAsIHN0YXQuRkFJTCApOwotCX0KKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDIgOiAiICwgc3RhdC5QQVNTICk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDIgOiAiICwgc3RhdC5GQUlMICk7CisgICAgfQogCi0gIAlpZiAoc2ltcGxlU2Vzc2lvbi50ZXN0NCgpICkgewotCSAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0NCA6ICIgLCBzdGF0LlBBU1MgKTsKLQl9IGVsc2UgewotCSAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0NCA6ICIgLCBzdGF0LkZBSUwgKTsKLQl9CisgICAgICAgIGlmIChzaW1wbGVTZXNzaW9uLnRlc3QzKCkgKSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3QzIDogIiAsIHN0YXQuUEFTUyApOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3QzIDogIiAsIHN0YXQuRkFJTCApOworICAgIH0KKworICAgICAgaWYgKHNpbXBsZVNlc3Npb24udGVzdDQoKSApIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDQgOiAiICwgc3RhdC5QQVNTICk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDQgOiAiICwgc3RhdC5GQUlMICk7CisgICAgfQogCiAgICAgICAgIGlmIChzaW1wbGVTZXNzaW9uLnRlc3Q1KCkgKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3Q1IDogIiAsIHN0YXQuUEFTUyApOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3Q1IDogIiAsIHN0YXQuRkFJTCApOwotCX0KLSAgICAgICAgCi0gICAgICAgIGlmIChzaW1wbGVTZXNzaW9uLnRlc3Q2KCkgKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3Q2IDogIiAsIHN0YXQuUEFTUyApOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3Q2IDogIiAsIHN0YXQuRkFJTCApOwotCX0KKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDUgOiAiICwgc3RhdC5QQVNTICk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDUgOiAiICwgc3RhdC5GQUlMICk7CisgICAgfQogCi0JCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICAgICAgaWYgKHNpbXBsZVNlc3Npb24udGVzdDYoKSApIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDYgOiAiICwgc3RhdC5QQVNTICk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDYgOiAiICwgc3RhdC5GQUlMICk7CisgICAgfQorCisKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm9wYXNzd2Rmb3JkYi9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3Bhc3N3ZGZvcmRiL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggNDc2ODgxZS4uOWVmNGRlZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3Bhc3N3ZGZvcmRiL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3Bhc3N3ZGZvcmRiL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTgyLDYgKzgyLDYgQEAKICAgICAgIDx0cmFucy1hdHRyaWJ1dGU+UmVxdWlyZWQ8L3RyYW5zLWF0dHJpYnV0ZT4KICAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgPC9hc3NlbWJseS1kZXNjcmlwdG9yPgotICAgICAgCisKIDwvZWpiLWphcj4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3Bhc3N3ZGZvcmRiL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3Bhc3N3ZGZvcmRiL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCmluZGV4IDUwY2YzOTYuLjFhOGVlYTQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm9wYXNzd2Rmb3JkYi9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vcGFzc3dkZm9yZGIvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKQEAgLTI4LDQ4ICsyOCw0OCBAQAogICAgICAgPHJlc291cmNlLXJlZj4KICAgICAgICAgPHJlcy1yZWYtbmFtZT5EYXRhU291cmNlPC9yZXMtcmVmLW5hbWU+CiAgICAgICAgIDxqbmRpLW5hbWU+amRiYy9zMXFlREI8L2puZGktbmFtZT4KLQk8ZGVmYXVsdC1yZXNvdXJjZS1wcmluY2lwYWw+Ci0JICA8bmFtZT5EQlVTRVI8L25hbWU+Ci0JICA8cGFzc3dvcmQ+PC9wYXNzd29yZD4KLQk8L2RlZmF1bHQtcmVzb3VyY2UtcHJpbmNpcGFsPgorICAgIDxkZWZhdWx0LXJlc291cmNlLXByaW5jaXBhbD4KKyAgICAgIDxuYW1lPkRCVVNFUjwvbmFtZT4KKyAgICAgIDxwYXNzd29yZD48L3Bhc3N3b3JkPgorICAgIDwvZGVmYXVsdC1yZXNvdXJjZS1wcmluY2lwYWw+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KICAgICAgIDxyZXNvdXJjZS1yZWY+CiAgICAgICAgIDxyZXMtcmVmLW5hbWU+RGF0YVNvdXJjZTE8L3Jlcy1yZWYtbmFtZT4KICAgICAgICAgPGpuZGktbmFtZT5qZGJjL3MxcWVEQjE8L2puZGktbmFtZT4KLQk8ZGVmYXVsdC1yZXNvdXJjZS1wcmluY2lwYWw+Ci0JICA8bmFtZT5EQlVTRVI8L25hbWU+Ci0JPC9kZWZhdWx0LXJlc291cmNlLXByaW5jaXBhbD4KKyAgICA8ZGVmYXVsdC1yZXNvdXJjZS1wcmluY2lwYWw+CisgICAgICA8bmFtZT5EQlVTRVI8L25hbWU+CisgICAgPC9kZWZhdWx0LXJlc291cmNlLXByaW5jaXBhbD4KICAgICAgIDwvcmVzb3VyY2UtcmVmPgogICAgICAgPHJlc291cmNlLXJlZj4KICAgICAgICAgPHJlcy1yZWYtbmFtZT5EYXRhU291cmNlMjwvcmVzLXJlZi1uYW1lPgogICAgICAgICA8am5kaS1uYW1lPmpkYmMvczFxZURCMjwvam5kaS1uYW1lPgotCTxkZWZhdWx0LXJlc291cmNlLXByaW5jaXBhbD4KLQkgIDxuYW1lPkRCVVNFUjwvbmFtZT4KLQkgIDxwYXNzd29yZD5EQlBBU1NXT1JEPC9wYXNzd29yZD4KLQk8L2RlZmF1bHQtcmVzb3VyY2UtcHJpbmNpcGFsPgorICAgIDxkZWZhdWx0LXJlc291cmNlLXByaW5jaXBhbD4KKyAgICAgIDxuYW1lPkRCVVNFUjwvbmFtZT4KKyAgICAgIDxwYXNzd29yZD5EQlBBU1NXT1JEPC9wYXNzd29yZD4KKyAgICA8L2RlZmF1bHQtcmVzb3VyY2UtcHJpbmNpcGFsPgogICAgICAgPC9yZXNvdXJjZS1yZWY+CiAgICAgICA8cmVzb3VyY2UtcmVmPgogICAgICAgICA8cmVzLXJlZi1uYW1lPlhBRGF0YVNvdXJjZTwvcmVzLXJlZi1uYW1lPgogICAgICAgICA8am5kaS1uYW1lPmpkYmMvczFxZURCLXhhPC9qbmRpLW5hbWU+Ci0JPGRlZmF1bHQtcmVzb3VyY2UtcHJpbmNpcGFsPgotCSAgPG5hbWU+REJVU0VSPC9uYW1lPgotCSAgPHBhc3N3b3JkPjwvcGFzc3dvcmQ+Ci0JPC9kZWZhdWx0LXJlc291cmNlLXByaW5jaXBhbD4KKyAgICA8ZGVmYXVsdC1yZXNvdXJjZS1wcmluY2lwYWw+CisgICAgICA8bmFtZT5EQlVTRVI8L25hbWU+CisgICAgICA8cGFzc3dvcmQ+PC9wYXNzd29yZD4KKyAgICA8L2RlZmF1bHQtcmVzb3VyY2UtcHJpbmNpcGFsPgogICAgICAgPC9yZXNvdXJjZS1yZWY+CiAgICAgICA8cmVzb3VyY2UtcmVmPgogICAgICAgICA8cmVzLXJlZi1uYW1lPlhBRGF0YVNvdXJjZTE8L3Jlcy1yZWYtbmFtZT4KICAgICAgICAgPGpuZGktbmFtZT5qZGJjL3MxcWVEQjEteGE8L2puZGktbmFtZT4KLQk8ZGVmYXVsdC1yZXNvdXJjZS1wcmluY2lwYWw+Ci0JICA8bmFtZT5EQlVTRVI8L25hbWU+Ci0JPC9kZWZhdWx0LXJlc291cmNlLXByaW5jaXBhbD4KKyAgICA8ZGVmYXVsdC1yZXNvdXJjZS1wcmluY2lwYWw+CisgICAgICA8bmFtZT5EQlVTRVI8L25hbWU+CisgICAgPC9kZWZhdWx0LXJlc291cmNlLXByaW5jaXBhbD4KICAgICAgIDwvcmVzb3VyY2UtcmVmPgogICAgICAgPHJlc291cmNlLXJlZj4KICAgICAgICAgPHJlcy1yZWYtbmFtZT5YQURhdGFTb3VyY2UyPC9yZXMtcmVmLW5hbWU+CiAgICAgICAgIDxqbmRpLW5hbWU+amRiYy9zMXFlREIyLXhhPC9qbmRpLW5hbWU+Ci0JPGRlZmF1bHQtcmVzb3VyY2UtcHJpbmNpcGFsPgotCSAgPG5hbWU+REJVU0VSPC9uYW1lPgotCSAgPHBhc3N3b3JkPkRCUEFTU1dPUkQ8L3Bhc3N3b3JkPgotCTwvZGVmYXVsdC1yZXNvdXJjZS1wcmluY2lwYWw+CisgICAgPGRlZmF1bHQtcmVzb3VyY2UtcHJpbmNpcGFsPgorICAgICAgPG5hbWU+REJVU0VSPC9uYW1lPgorICAgICAgPHBhc3N3b3JkPkRCUEFTU1dPUkQ8L3Bhc3N3b3JkPgorICAgIDwvZGVmYXVsdC1yZXNvdXJjZS1wcmluY2lwYWw+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KICAgIDwvZWpiPgogICA8L2VudGVycHJpc2UtYmVhbnM+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vcGFzc3dkZm9yZGIvZWpiL1NpbXBsZVNlc3Npb25CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vcGFzc3dkZm9yZGIvZWpiL1NpbXBsZVNlc3Npb25CZWFuLmphdmEKaW5kZXggYzczMzY3ZS4uNTdiY2RmNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3Bhc3N3ZGZvcmRiL2VqYi9TaW1wbGVTZXNzaW9uQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm9wYXNzd2Rmb3JkYi9lamIvU2ltcGxlU2Vzc2lvbkJlYW4uamF2YQpAQCAtMjcsMTQgKzI3LDE0IEBACiB7CiAKICAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IGN0eHRfOwotICAgIHByaXZhdGUgSW5pdGlhbENvbnRleHQgaWNfOyAKKyAgICBwcml2YXRlIEluaXRpYWxDb250ZXh0IGljXzsKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgIGN0eHRfID0gY29udGV4dDsKLQl0cnkgewotCSAgICBpY18gPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQl9IGNhdGNoKCBOYW1pbmdFeGNlcHRpb24gbmUgKSB7Ci0JICAgIG5lLnByaW50U3RhY2tUcmFjZSgpOwotCX0KKyAgICB0cnkgeworICAgICAgICBpY18gPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICB9IGNhdGNoKCBOYW1pbmdFeGNlcHRpb24gbmUgKSB7CisgICAgICAgIG5lLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsKQEAgLTQ5LDYxICs0OSw2MSBAQAogICAgICAqICAgICA8cGFzc3dvcmQ+PC9wYXNzd29yZD4KICAgICAgKiAgIDwvZGVmYXVsdC1yZXNvdXJjZS1wcmluY2lwYWw+CiAgICAgICogPC9yZXNvdXJjZS1yZWY+Ci0gICAgICogCisgICAgICoKICAgICAgKiBOb3RlIHRoYXQgdGhlIHBvb2wgc3RpbGwgaGFzIGEgdmFsaWQgcGFzc3dvcmQgc2V0IGluIGl0CiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQlEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpaWNfLmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7Ci0JQ29ubmVjdGlvbiBjb25uMSA9IG51bGw7Ci0JYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKLQkvL2NsZWFuIHRoZSBkYXRhYmFzZQotCXRyeSB7Ci0JICAgIGNvbm4xID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCX0gY2F0Y2goIEV4Y2VwdGlvbiBlKSB7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIHJldHVybiB0cnVlOwotCX0gZmluYWxseSB7Ci0JICAgIGlmIChjb25uMSAhPSBudWxsKSB7IAotCSAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KLQkgICAgfQotCX0KLQkKLQlyZXR1cm4gZmFsc2U7CisgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKWljXy5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZSIpOworICAgIENvbm5lY3Rpb24gY29ubjEgPSBudWxsOworICAgIGJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CisgICAgLy9jbGVhbiB0aGUgZGF0YWJhc2UKKyAgICB0cnkgeworICAgICAgICBjb25uMSA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBpZiAoY29ubjEgIT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBMb29rdXAgYSBkYXRhc291cmNlIHdpdGhvdXQgcmVzb3VyY2UtcmVmIHNwZWNpZnlpbmcgCisgICAgICogTG9va3VwIGEgZGF0YXNvdXJjZSB3aXRob3V0IHJlc291cmNlLXJlZiBzcGVjaWZ5aW5nCiAgICAgICogcGFzc3dvcmQgaW4gZGVmYXVsdC1yZXNvdXJjZS1wcmluY2lwYWwKICAgICAgKiA8cmVzb3VyY2UtcmVmPgogICAgICAqICAgPGRlZmF1bHQtcmVzb3VyY2UtcHJpbmNpcGFsPgogICAgICAqICAgICA8bmFtZT5EQlVTRVI8L25hbWU+CiAgICAgICogICA8L2RlZmF1bHQtcmVzb3VyY2UtcHJpbmNpcGFsPgogICAgICAqIDwvcmVzb3VyY2UtcmVmPgotICAgICAqIAorICAgICAqCiAgICAgICogTm90ZSB0aGF0IHRoZSBwb29sIHN0aWxsIGhhcyBhIHZhbGlkIHBhc3N3b3JkIHNldCBpbiBpdAogICAgICAqLwogCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAJRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKWljXy5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZTEiKTsKLQlDb25uZWN0aW9uIGNvbm4xID0gbnVsbDsKLQlib29sZWFuIHBhc3NlZCA9IGZhbHNlOwotCS8vY2xlYW4gdGhlIGRhdGFiYXNlCi0JdHJ5IHsKLQkgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JfSBjYXRjaCggRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgcmV0dXJuIHRydWU7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKGNvbm4xICE9IG51bGwpIHsgCi0JICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQotCSAgICB9Ci0JfQotCQotCXJldHVybiBmYWxzZTsKKyAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKWljXy5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZTEiKTsKKyAgICBDb25uZWN0aW9uIGNvbm4xID0gbnVsbDsKKyAgICBib29sZWFuIHBhc3NlZCA9IGZhbHNlOworICAgIC8vY2xlYW4gdGhlIGRhdGFiYXNlCisgICAgdHJ5IHsKKyAgICAgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKGNvbm4xICE9IG51bGwpIHsKKyAgICAgICAgICAgIHRyeSB7IGNvbm4xLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgLyoqCi0gICAgICogTG9va3VwIGEgZGF0YXNvdXJjZSB3aXRoIHJlc291cmNlLXJlZiBzcGVjaWZ5aW5nIAorICAgICAqIExvb2t1cCBhIGRhdGFzb3VyY2Ugd2l0aCByZXNvdXJjZS1yZWYgc3BlY2lmeWluZwogICAgICAqIHBhc3N3b3JkIGluIGRlZmF1bHQtcmVzb3VyY2UtcHJpbmNpcGFsIGJ1dCBubyBwYXNzd29yZAogICAgICAqIGluIHRoZSBwb29sCiAgICAgICogPHJlc291cmNlLXJlZj4KQEAgLTExMiwyNyArMTEyLDI3IEBACiAgICAgICogICAgIDxwYXNzd29yZD5EQlBBU1NXT1JEPC9wYXNzd29yZD4KICAgICAgKiAgIDwvZGVmYXVsdC1yZXNvdXJjZS1wcmluY2lwYWw+CiAgICAgICogPC9yZXNvdXJjZS1yZWY+Ci0gICAgICogCisgICAgICoKICAgICAgKiBOb3RlIHRoYXQgdGhlIHBvb2wgaGFzIG5vIHBhc3N3b3JkIHNldCBpbiBpdAogICAgICAqLwogCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAJRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKWljXy5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZTIiKTsKLQlDb25uZWN0aW9uIGNvbm4xID0gbnVsbDsKLQlib29sZWFuIHBhc3NlZCA9IGZhbHNlOwotCS8vY2xlYW4gdGhlIGRhdGFiYXNlCi0JdHJ5IHsKLQkgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JfSBjYXRjaCggRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgcmV0dXJuIGZhbHNlOwotCX0gZmluYWxseSB7Ci0JICAgIGlmIChjb25uMSAhPSBudWxsKSB7IAotCSAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KLQkgICAgfQotCX0KLQkKLQlyZXR1cm4gdHJ1ZTsKKyAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKWljXy5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZTIiKTsKKyAgICBDb25uZWN0aW9uIGNvbm4xID0gbnVsbDsKKyAgICBib29sZWFuIHBhc3NlZCA9IGZhbHNlOworICAgIC8vY2xlYW4gdGhlIGRhdGFiYXNlCisgICAgdHJ5IHsKKyAgICAgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmIChjb25uMSAhPSBudWxsKSB7CisgICAgICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgLyoqCkBAIC0xNDQsNjEgKzE0NCw2MSBAQAogICAgICAqICAgICA8cGFzc3dvcmQ+PC9wYXNzd29yZD4KICAgICAgKiAgIDwvZGVmYXVsdC1yZXNvdXJjZS1wcmluY2lwYWw+CiAgICAgICogPC9yZXNvdXJjZS1yZWY+Ci0gICAgICogCisgICAgICoKICAgICAgKiBOb3RlIHRoYXQgdGhlIHBvb2wgc3RpbGwgaGFzIGEgdmFsaWQgcGFzc3dvcmQgc2V0IGluIGl0CiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQlEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpaWNfLmxvb2t1cCgiamF2YTpjb21wL2Vudi9YQURhdGFTb3VyY2UiKTsKLQlDb25uZWN0aW9uIGNvbm4xID0gbnVsbDsKLQlib29sZWFuIHBhc3NlZCA9IGZhbHNlOwotCS8vY2xlYW4gdGhlIGRhdGFiYXNlCi0JdHJ5IHsKLQkgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JfSBjYXRjaCggRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgcmV0dXJuIHRydWU7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKGNvbm4xICE9IG51bGwpIHsgCi0JICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQotCSAgICB9Ci0JfQotCQotCXJldHVybiBmYWxzZTsKKyAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpaWNfLmxvb2t1cCgiamF2YTpjb21wL2Vudi9YQURhdGFTb3VyY2UiKTsKKyAgICBDb25uZWN0aW9uIGNvbm4xID0gbnVsbDsKKyAgICBib29sZWFuIHBhc3NlZCA9IGZhbHNlOworICAgIC8vY2xlYW4gdGhlIGRhdGFiYXNlCisgICAgdHJ5IHsKKyAgICAgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKGNvbm4xICE9IG51bGwpIHsKKyAgICAgICAgICAgIHRyeSB7IGNvbm4xLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgLyoqCi0gICAgICogTG9va3VwIGEgZGF0YXNvdXJjZSB3aXRob3V0IHJlc291cmNlLXJlZiBzcGVjaWZ5aW5nIAorICAgICAqIExvb2t1cCBhIGRhdGFzb3VyY2Ugd2l0aG91dCByZXNvdXJjZS1yZWYgc3BlY2lmeWluZwogICAgICAqIHBhc3N3b3JkIGluIGRlZmF1bHQtcmVzb3VyY2UtcHJpbmNpcGFsCiAgICAgICogPHJlc291cmNlLXJlZj4KICAgICAgKiAgIDxkZWZhdWx0LXJlc291cmNlLXByaW5jaXBhbD4KICAgICAgKiAgICAgPG5hbWU+REJVU0VSPC9uYW1lPgogICAgICAqICAgPC9kZWZhdWx0LXJlc291cmNlLXByaW5jaXBhbD4KICAgICAgKiA8L3Jlc291cmNlLXJlZj4KLSAgICAgKiAKKyAgICAgKgogICAgICAqIE5vdGUgdGhhdCB0aGUgcG9vbCBzdGlsbCBoYXMgYSB2YWxpZCBwYXNzd29yZCBzZXQgaW4gaXQKICAgICAgKi8KIAogICAgIHB1YmxpYyBib29sZWFuIHRlc3Q1KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgCURhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSlpY18ubG9va3VwKCJqYXZhOmNvbXAvZW52L1hBRGF0YVNvdXJjZTEiKTsKLQlDb25uZWN0aW9uIGNvbm4xID0gbnVsbDsKLQlib29sZWFuIHBhc3NlZCA9IGZhbHNlOwotCS8vY2xlYW4gdGhlIGRhdGFiYXNlCi0JdHJ5IHsKLQkgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JfSBjYXRjaCggRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgcmV0dXJuIHRydWU7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKGNvbm4xICE9IG51bGwpIHsgCi0JICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQotCSAgICB9Ci0JfQotCQotCXJldHVybiBmYWxzZTsKKyAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKWljXy5sb29rdXAoImphdmE6Y29tcC9lbnYvWEFEYXRhU291cmNlMSIpOworICAgIENvbm5lY3Rpb24gY29ubjEgPSBudWxsOworICAgIGJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CisgICAgLy9jbGVhbiB0aGUgZGF0YWJhc2UKKyAgICB0cnkgeworICAgICAgICBjb25uMSA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBpZiAoY29ubjEgIT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBMb29rdXAgYSBkYXRhc291cmNlIHdpdGggcmVzb3VyY2UtcmVmIHNwZWNpZnlpbmcgCisgICAgICogTG9va3VwIGEgZGF0YXNvdXJjZSB3aXRoIHJlc291cmNlLXJlZiBzcGVjaWZ5aW5nCiAgICAgICogcGFzc3dvcmQgaW4gZGVmYXVsdC1yZXNvdXJjZS1wcmluY2lwYWwgYnV0IG5vIHBhc3N3b3JkCiAgICAgICogaW4gdGhlIHBvb2wKICAgICAgKiA8cmVzb3VyY2UtcmVmPgpAQCAtMjA3LDI3ICsyMDcsMjcgQEAKICAgICAgKiAgICAgPHBhc3N3b3JkPkRCUEFTU1dPUkQ8L3Bhc3N3b3JkPgogICAgICAqICAgPC9kZWZhdWx0LXJlc291cmNlLXByaW5jaXBhbD4KICAgICAgKiA8L3Jlc291cmNlLXJlZj4KLSAgICAgKiAKKyAgICAgKgogICAgICAqIE5vdGUgdGhhdCB0aGUgcG9vbCBoYXMgbm8gcGFzc3dvcmQgc2V0IGluIGl0CiAgICAgICovCiAKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0NigpIHRocm93cyBFeGNlcHRpb24gewotICAgIAlEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpaWNfLmxvb2t1cCgiamF2YTpjb21wL2Vudi9YQURhdGFTb3VyY2UyIik7Ci0JQ29ubmVjdGlvbiBjb25uMSA9IG51bGw7Ci0JYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKLQkvL2NsZWFuIHRoZSBkYXRhYmFzZQotCXRyeSB7Ci0JICAgIGNvbm4xID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCX0gY2F0Y2goIEV4Y2VwdGlvbiBlKSB7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIHJldHVybiBmYWxzZTsKLQl9IGZpbmFsbHkgewotCSAgICBpZiAoY29ubjEgIT0gbnVsbCkgeyAKLQkgICAgICAgIHRyeSB7IGNvbm4xLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9Ci0JICAgIH0KLQl9Ci0JCi0JcmV0dXJuIHRydWU7CisgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSlpY18ubG9va3VwKCJqYXZhOmNvbXAvZW52L1hBRGF0YVNvdXJjZTIiKTsKKyAgICBDb25uZWN0aW9uIGNvbm4xID0gbnVsbDsKKyAgICBib29sZWFuIHBhc3NlZCA9IGZhbHNlOworICAgIC8vY2xlYW4gdGhlIGRhdGFiYXNlCisgICAgdHJ5IHsKKyAgICAgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmIChjb25uMSAhPSBudWxsKSB7CisgICAgICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHt9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vcGFzc3dkZm9yZGIvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3Bhc3N3ZGZvcmRiL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCBiMjI3Y2FjLi40MmQ1YTE2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vcGFzc3dkZm9yZGIvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm9wYXNzd2Rmb3JkYi9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsOSArMSw5IEBACi1Ecm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0g7DQotDQotQ1JFQVRFIFRBQkxFIFRYTEVWRUxTV0lUQ0ggKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCi1JTlNFUlQgSU5UTyBUWExFVkVMU1dJVENIIFZBTFVFUygxLCAnd3h5eicpOw0KLUlOU0VSVCBJTlRPIFRYTEVWRUxTV0lUQ0ggVkFMVUVTKDIsICdwcXJzJyk7DQorRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIOworCitDUkVBVEUgVEFCTEUgVFhMRVZFTFNXSVRDSCAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCitJTlNFUlQgSU5UTyBUWExFVkVMU1dJVENIIFZBTFVFUygxLCAnd3h5eicpOworSU5TRVJUIElOVE8gVFhMRVZFTFNXSVRDSCBWQUxVRVMoMiwgJ3BxcnMnKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm9wYXNzd2Rmb3JkYi9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3Bhc3N3ZGZvcmRiL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggMGMxMjQyZi4uZDExYTExNSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3Bhc3N3ZGZvcmRiL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3Bhc3N3ZGZvcmRiL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEsMiArMSwyIEBACi1Ecm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0g7DQotRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIMjsNCitEcm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0g7CitEcm9wIHRhYmxlIFRYTEVWRUxTV0lUQ0gyOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3R4Y29ubi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhjb25uL2J1aWxkLnhtbAppbmRleCBjZWY0MzZkLi5jMTJmYTQwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhjb25uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhjb25uL2J1aWxkLnhtbApAQCAtMzIsOCArMzIsOCBAQAogICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLm91dHB1dCIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICAgICAgPHJlY29yZCBuYW1lPSJub3R4Y29ubi5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiIC8+Ci0JICAgIDxhbnQgZGlyPSJ0ZXN0MSIgdGFyZ2V0PSJhbGwiLz4KLQkgICAgPGFudCBkaXI9InRlc3QyIiB0YXJnZXQ9ImFsbCIvPgorICAgICAgICA8YW50IGRpcj0idGVzdDEiIHRhcmdldD0iYWxsIi8+CisgICAgICAgIDxhbnQgZGlyPSJ0ZXN0MiIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPHJlY29yZCBuYW1lPSJub3R4Y29ubi5vdXRwdXQiIGFjdGlvbj0ic3RvcCIgLz4KICAgICA8L3RhcmdldD4KIApAQCAtNDksOSArNDksOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+Ci0JCVVzYWdlOgotCQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSByZWNvbmZpZyB0ZXN0cykKLQk8L2VjaG8+CisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSByZWNvbmZpZyB0ZXN0cykKKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhjb25uL3Rlc3QxL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhjb25uL3Rlc3QxL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOWFhMTQ0NS4uMjRkMDc5MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3R4Y29ubi90ZXN0MS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eGNvbm4vdGVzdDEvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTggKzE1LDE4IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqZGJjLW5vdHhjb25uIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhjb25uL3Rlc3QxL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eGNvbm4vdGVzdDEvYnVpbGQueG1sCmluZGV4IGM0NmUzODguLjZlZmVlMTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eGNvbm4vdGVzdDEvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eGNvbm4vdGVzdDEvYnVpbGQueG1sCkBAIC0zMiwxNCArMzIsMTQgQEAKICAgJnRlc3Rwcm9wZXJ0aWVzOwogICAmamRiY0NvbW1vbjsKICAgJmpkYmNDb21tb25Qcm9wczsKLSAgICAKLSAgICAKKworCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImNsZWFuLGJ1aWxkLGRlcGxveSxydW4sdW5kZXBsb3kiLz4KIAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNTEsMjYgKzUxLDI2IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgogICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qZGJjLW9yYWNsZS1jb21tb24iLz4KIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1vcmFjbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtb3JhY2xlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX3BvaW50YmFzZS5zcWwiLz4KQEAgLTc4LDcgKzc4LDcgQEAKIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qZGJjLW9yYWNsZS1jb21tb24iLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eGNvbm4vdGVzdDEvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eGNvbm4vdGVzdDEvZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCBiODkxNjQyLi5jOTk5MzdiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhjb25uL3Rlc3QxL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3R4Y29ubi90ZXN0MS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC00OSw2ICs0OSw2IEBACiAgICAgICA8dHJhbnMtYXR0cmlidXRlPlJlcXVpcmVkPC90cmFucy1hdHRyaWJ1dGU+CiAgICAgPC9jb250YWluZXItdHJhbnNhY3Rpb24+CiAgPC9hc3NlbWJseS1kZXNjcmlwdG9yPgotICAgICAgCisKIDwvZWpiLWphcj4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3R4Y29ubi90ZXN0MS9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eGNvbm4vdGVzdDEvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKaW5kZXggNTRjNjc4NC4uMDYyMWNmYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3R4Y29ubi90ZXN0MS9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhjb25uL3Rlc3QxL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCkBAIC0yOCwxMCArMjgsMTAgQEAKICAgICAgIDxyZXNvdXJjZS1yZWY+CiAgICAgICAgIDxyZXMtcmVmLW5hbWU+RGF0YVNvdXJjZTwvcmVzLXJlZi1uYW1lPgogICAgICAgICA8am5kaS1uYW1lPmpkYmMvb3JhY2xlcmVzPC9qbmRpLW5hbWU+Ci0JPGRlZmF1bHQtcmVzb3VyY2UtcHJpbmNpcGFsPgotCSAgPG5hbWU+c2NvdHQ8L25hbWU+Ci0JICA8cGFzc3dvcmQ+dGlnZXI8L3Bhc3N3b3JkPgotCTwvZGVmYXVsdC1yZXNvdXJjZS1wcmluY2lwYWw+CisgICAgPGRlZmF1bHQtcmVzb3VyY2UtcHJpbmNpcGFsPgorICAgICAgPG5hbWU+c2NvdHQ8L25hbWU+CisgICAgICA8cGFzc3dvcmQ+dGlnZXI8L3Bhc3N3b3JkPgorICAgIDwvZGVmYXVsdC1yZXNvdXJjZS1wcmluY2lwYWw+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KICAgICA8L2VqYj4KICA8L2VudGVycHJpc2UtYmVhbnM+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhjb25uL3Rlc3QxL2VqYi9TaW1wbGVTZXNzaW9uQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3R4Y29ubi90ZXN0MS9lamIvU2ltcGxlU2Vzc2lvbkJlYW4uamF2YQppbmRleCA2ZDZhN2QxLi5hY2NiZGMxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhjb25uL3Rlc3QxL2VqYi9TaW1wbGVTZXNzaW9uQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eGNvbm4vdGVzdDEvZWpiL1NpbXBsZVNlc3Npb25CZWFuLmphdmEKQEAgLTU2LDI3ICs1NiwyNyBAQAogICAgICAgICAgICAgZHMgPSAoY29tLnN1bi5hcHBzZXJ2LmpkYmMuRGF0YVNvdXJjZSkgaWNfLmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7CiAKICAgICAgICAgICAgIFVzZXJUcmFuc2FjdGlvbiB0eCA9KFVzZXJUcmFuc2FjdGlvbiljdHh0Xy5nZXRVc2VyVHJhbnNhY3Rpb24oKTsKLQkgICAgICB0eC5iZWdpbigpOworICAgICAgICAgIHR4LmJlZ2luKCk7CiAgICAgICAgICAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCSAgICAgIG5vVHhDb25uID0gZHMuZ2V0Tm9uVHhDb25uZWN0aW9uKCk7CisgICAgICAgICAgbm9UeENvbm4gPSBkcy5nZXROb25UeENvbm5lY3Rpb24oKTsKICAgICAgICAgICAgIHN0bXQgPSBjb25uLmNyZWF0ZVN0YXRlbWVudCgpOwotCSAgICAgIHN0bXQuZXhlY3V0ZVVwZGF0ZSgiSU5TRVJUIElOVE8gTk9UWENPTk5UQUJMRSBWQUxVRVMoJ21ldGhvZDEnLDMpIik7CisgICAgICAgICAgc3RtdC5leGVjdXRlVXBkYXRlKCJJTlNFUlQgSU5UTyBOT1RYQ09OTlRBQkxFIFZBTFVFUygnbWV0aG9kMScsMykiKTsKICAgICAgICAgICAgIFN0cmluZyBxdWVyeTEgPSAiU0VMRUNUICogRlJPTSBOT1RYQ09OTlRBQkxFIjsKICAgICAgICAgICAgIHJzID0gc3RtdC5leGVjdXRlUXVlcnkocXVlcnkxKTsKLQkgICAgICBzdG10MiA9IG5vVHhDb25uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICAgIHN0bXQyID0gbm9UeENvbm4uY3JlYXRlU3RhdGVtZW50KCk7CiAgICAgICAgICAgICByczIgPSBzdG10Mi5leGVjdXRlUXVlcnkoIlNFTEVDVCAqIEZST00gTk9UWENPTk5UQUJMRSIpOwotCSAgIAorCiAgICAgICAgICAgICBpZiAoIHJzMi5uZXh0KCkgKSB7Ci0JICAgICAgICByZXR1cm4gZmFsc2U7Ci0JICAgICAgfQotICAgICAgICAgICAgCi0JICAgICAgdHguY29tbWl0KCk7Ci0JICAgICAgcmV0dXJuIHRydWU7Ci0JICAgIAorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgIH0KKworICAgICAgICAgIHR4LmNvbW1pdCgpOworICAgICAgICAgIHJldHVybiB0cnVlOworCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2F1Z2h0IEV4Y2VwdGlvbi0tLSIpOwotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2F1Z2h0IEV4Y2VwdGlvbi0tLSIpOworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICBpZiAocnMgIT0gbnVsbCApIHsKICAgICAgICAgICAgICAgICB0cnkgeyBycy5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CkBAIC04Nyw3MiArODcsNzIgQEAKICAgICAgICAgICAgIGlmIChjb25uICE9IG51bGwgKSB7CiAgICAgICAgICAgICAgICAgdHJ5IHtjb25uLmNsb3NlKCk7fSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQogICAgICAgICAgICAgfQotICAgICAgICAgICAgCQorCiAgICAgICAgICAgICBpZiAocnMyICE9IG51bGwgKSB7CiAgICAgICAgICAgICAgICAgdHJ5IHtyczIuY2xvc2UoKTt9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHN0bXQyICE9IG51bGwgKSB7CiAgICAgICAgICAgICAgICAgdHJ5IHtzdG10Mi5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAJCQorCiAgICAgICAgICAgICBpZiAobm9UeENvbm4gIT0gbnVsbCApIHsKICAgICAgICAgICAgICAgICB0cnkgeyBub1R4Q29ubi5jbG9zZSgpOyB9Y2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KICAgICAgICAgICAgIH0KLQl9CisgICAgfQogCi0gICAgICAgIAorCiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQlDb25uZWN0aW9uIGNvbm4gPSBudWxsOwotCUNvbm5lY3Rpb24gbm9UeENvbm4gPSBudWxsOworICAgIENvbm5lY3Rpb24gY29ubiA9IG51bGw7CisgICAgQ29ubmVjdGlvbiBub1R4Q29ubiA9IG51bGw7CiAKICAgICAgICAgdHJ5IHsKIAogICAgICAgICAgICAgZHMgPSAoY29tLnN1bi5hcHBzZXJ2LmpkYmMuRGF0YVNvdXJjZSlpY18ubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKIAogICAgICAgICAgICAgVXNlclRyYW5zYWN0aW9uIHR4ID0oVXNlclRyYW5zYWN0aW9uKWN0eHRfLmdldFVzZXJUcmFuc2FjdGlvbigpOwotCSAgICAgIHR4LmJlZ2luKCk7CisgICAgICAgICAgdHguYmVnaW4oKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR2V0dGluZyBUUkFOU0FDVElPTkFMIGNvbm5lY3Rpb24iKTsKICAgICAgICAgICAgIGNvbm4gPSBkcy5nZXRDb25uZWN0aW9uKCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkF1dG9jb21taXQgPT4gIiArIGNvbm4uZ2V0QXV0b0NvbW1pdCgpKTsKIAotCSAgICAgIGlmIChjb25uLmdldEF1dG9Db21taXQoKSA9PSB0cnVlICkgewotCSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0JICAgICAgfQorICAgICAgICAgIGlmIChjb25uLmdldEF1dG9Db21taXQoKSA9PSB0cnVlICkgeworICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgfQogCi0JICAgICAgY29ubi5jbG9zZSgpOwotCSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjA7IGkrKyApIHsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR2V0dGluZyBOb25UeCBjb25uZWN0aW9uIik7Ci0JICAgICAgICAgIG5vVHhDb25uID0gKChjb20uc3VuLmFwcHNlcnYuamRiYy5EYXRhU291cmNlKWRzKS5nZXROb25UeENvbm5lY3Rpb24oKTsKLSAgCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJBdXRvY29tbWl0ID0+ICIgKyBub1R4Q29ubi5nZXRBdXRvQ29tbWl0KCkpOwotCQkgICAgaWYgKG5vVHhDb25uLmdldEF1dG9Db21taXQoKSA9PSBmYWxzZSApIHsKLQkgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsJCi0JCSAgICB9Ci0JCSAgICBub1R4Q29ubi5jbG9zZSgpOwotCSAgICAgIH0KKyAgICAgICAgICBjb25uLmNsb3NlKCk7CisgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyMDsgaSsrICkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHZXR0aW5nIE5vblR4IGNvbm5lY3Rpb24iKTsKKyAgICAgICAgICAgICAgbm9UeENvbm4gPSAoKGNvbS5zdW4uYXBwc2Vydi5qZGJjLkRhdGFTb3VyY2UpZHMpLmdldE5vblR4Q29ubmVjdGlvbigpOworICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkF1dG9jb21taXQgPT4gIiArIG5vVHhDb25uLmdldEF1dG9Db21taXQoKSk7CisgICAgICAgICAgICBpZiAobm9UeENvbm4uZ2V0QXV0b0NvbW1pdCgpID09IGZhbHNlICkgeworICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbm9UeENvbm4uY2xvc2UoKTsKKyAgICAgICAgICB9CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdldHRpbmcgVFJBTlNBQ1RJT05BTCBjb25uZWN0aW9uIik7CiAgICAgICAgICAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBdXRvY29tbWl0ID0+ICIgKyBjb25uLmdldEF1dG9Db21taXQoKSk7Ci0JICAgICAgaWYgKGNvbm4uZ2V0QXV0b0NvbW1pdCgpID09IHRydWUgKSB7Ci0JICAgICAgICAgIHJldHVybiBmYWxzZTsKLQkgICAgICB9Ci0JICAgICAgY29ubi5jbG9zZSgpOwotCSAgICAgIHR4LmNvbW1pdCgpOworICAgICAgICAgIGlmIChjb25uLmdldEF1dG9Db21taXQoKSA9PSB0cnVlICkgeworICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgfQorICAgICAgICAgIGNvbm4uY2xvc2UoKTsKKyAgICAgICAgICB0eC5jb21taXQoKTsKIAotCSAgICAgIHJldHVybiB0cnVlOwotCSAgICAKKyAgICAgICAgICByZXR1cm4gdHJ1ZTsKKwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhdWdodCBFeGNlcHRpb24tLS0iKTsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhdWdodCBFeGNlcHRpb24tLS0iKTsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9IGZpbmFsbHkgewotCSAgICB0cnkgewotCQlpZiAobm9UeENvbm4gIT0gbnVsbCApIHsKLQkJICAgIG5vVHhDb25uLmNsb3NlKCk7Ci0JCX0KLQkgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KLQl9CisgICAgICAgIHRyeSB7CisgICAgICAgIGlmIChub1R4Q29ubiAhPSBudWxsICkgeworICAgICAgICAgICAgbm9UeENvbm4uY2xvc2UoKTsKKyAgICAgICAgfQorICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQorICAgIH0KIAogCiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3R4Y29ubi90ZXN0MS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhjb25uL3Rlc3QxL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCAwMGViOTZjLi4yZDNkMWEyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhjb25uL3Rlc3QxL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhjb25uL3Rlc3QxL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSw1ICsxLDUgQEAKLURST1AgVEFCTEUgTk9UWENPTk5UQUJMRTsNCi1DUkVBVEUgVEFCTEUgTk9UWENPTk5UQUJMRSgNCi0gICAgbmFtZSBjaGFyKDIwKSwgDQotICAgIG51bSBpbnRlZ2VyDQotKTsNCitEUk9QIFRBQkxFIE5PVFhDT05OVEFCTEU7CitDUkVBVEUgVEFCTEUgTk9UWENPTk5UQUJMRSgKKyAgICBuYW1lIGNoYXIoMjApLAorICAgIG51bSBpbnRlZ2VyCispOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3R4Y29ubi90ZXN0MS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3R4Y29ubi90ZXN0MS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IDAzNDkwZDAuLjc2MmEwZjYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eGNvbm4vdGVzdDEvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhjb25uL3Rlc3QxL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEgKzEgQEAKLURyb3AgdGFibGUgTk9UWENPTk5UQUJMRTsNCitEcm9wIHRhYmxlIE5PVFhDT05OVEFCTEU7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhjb25uL3Rlc3QyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhjb25uL3Rlc3QyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOWFhMTQ0NS4uMjRkMDc5MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3R4Y29ubi90ZXN0Mi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eGNvbm4vdGVzdDIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTggKzE1LDE4IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqZGJjLW5vdHhjb25uIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhjb25uL3Rlc3QyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eGNvbm4vdGVzdDIvYnVpbGQueG1sCmluZGV4IGM0NmUzODguLjZlZmVlMTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eGNvbm4vdGVzdDIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eGNvbm4vdGVzdDIvYnVpbGQueG1sCkBAIC0zMiwxNCArMzIsMTQgQEAKICAgJnRlc3Rwcm9wZXJ0aWVzOwogICAmamRiY0NvbW1vbjsKICAgJmpkYmNDb21tb25Qcm9wczsKLSAgICAKLSAgICAKKworCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImNsZWFuLGJ1aWxkLGRlcGxveSxydW4sdW5kZXBsb3kiLz4KIAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNTEsMjYgKzUxLDI2IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgogICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qZGJjLW9yYWNsZS1jb21tb24iLz4KIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1vcmFjbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtb3JhY2xlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX3BvaW50YmFzZS5zcWwiLz4KQEAgLTc4LDcgKzc4LDcgQEAKIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qZGJjLW9yYWNsZS1jb21tb24iLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eGNvbm4vdGVzdDIvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eGNvbm4vdGVzdDIvZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCA3ZDcwOWNkLi4zNzJhNGNhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhjb25uL3Rlc3QyL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3R4Y29ubi90ZXN0Mi9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC00OSw2ICs0OSw2IEBACiAgICAgICA8dHJhbnMtYXR0cmlidXRlPlJlcXVpcmVkPC90cmFucy1hdHRyaWJ1dGU+CiAgICAgPC9jb250YWluZXItdHJhbnNhY3Rpb24+CiAgPC9hc3NlbWJseS1kZXNjcmlwdG9yPi0tPgotICAgICAgCisKIDwvZWpiLWphcj4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3R4Y29ubi90ZXN0Mi9lamIvU2ltcGxlU2Vzc2lvbkJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eGNvbm4vdGVzdDIvZWpiL1NpbXBsZVNlc3Npb25CZWFuLmphdmEKaW5kZXggNjFjM2IwZi4uMmQyOTgyYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3R4Y29ubi90ZXN0Mi9lamIvU2ltcGxlU2Vzc2lvbkJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhjb25uL3Rlc3QyL2VqYi9TaW1wbGVTZXNzaW9uQmVhbi5qYXZhCkBAIC01NiwyOCArNTYsMjggQEAKICAgICAgICAgICAgIGRzID0gKGNvbS5zdW4uYXBwc2Vydi5qZGJjLkRhdGFTb3VyY2UpIGljXy5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZSIpOwogCiAgICAgICAgICAgICBVc2VyVHJhbnNhY3Rpb24gdHggPShVc2VyVHJhbnNhY3Rpb24pY3R4dF8uZ2V0VXNlclRyYW5zYWN0aW9uKCk7Ci0JICAgICAgdHguYmVnaW4oKTsKKyAgICAgICAgICB0eC5iZWdpbigpOwogICAgICAgICAgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oInNjb3R0IiwgInRpZ2VyIik7CiAgICAgICAgICAgICBzdG10ID0gY29ubi5jcmVhdGVTdGF0ZW1lbnQoKTsKLQkgICAgICBzdG10LmV4ZWN1dGVVcGRhdGUoIklOU0VSVCBJTlRPIE5PVFhDT05OVEFCTEUgVkFMVUVTKCdtZXRob2QxJywzKSIpOworICAgICAgICAgIHN0bXQuZXhlY3V0ZVVwZGF0ZSgiSU5TRVJUIElOVE8gTk9UWENPTk5UQUJMRSBWQUxVRVMoJ21ldGhvZDEnLDMpIik7CiAgICAgICAgICAgICBTdHJpbmcgcXVlcnkxID0gIlNFTEVDVCAqIEZST00gTk9UWENPTk5UQUJMRSI7CiAgICAgICAgICAgICBycyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHF1ZXJ5MSk7Ci0JICAgICAgbm9UeENvbm4gPSAoKGNvbS5zdW4uYXBwc2Vydi5qZGJjLkRhdGFTb3VyY2UpZHMpLmdldE5vblR4Q29ubmVjdGlvbigic2NvdHQiLCAidGlnZXIiKTsKKyAgICAgICAgICBub1R4Q29ubiA9ICgoY29tLnN1bi5hcHBzZXJ2LmpkYmMuRGF0YVNvdXJjZSlkcykuZ2V0Tm9uVHhDb25uZWN0aW9uKCJzY290dCIsICJ0aWdlciIpOwogCi0JICAgICAgc3RtdDIgPSBub1R4Q29ubi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgICBzdG10MiA9IG5vVHhDb25uLmNyZWF0ZVN0YXRlbWVudCgpOwogICAgICAgICAgICAgcnMyID0gc3RtdDIuZXhlY3V0ZVF1ZXJ5KCJTRUxFQ1QgKiBGUk9NIE5PVFhDT05OVEFCTEUiKTsKLQkgICAgICB0eC5jb21taXQoKTsKKyAgICAgICAgICB0eC5jb21taXQoKTsKICAgICAgICAgICAgIGlmICggcnMyLm5leHQoKSApIHsKLQkgICAgICAgIHJldHVybiBmYWxzZTsKLQkgICAgICB9Ci0gICAgICAgICAgICAKLQkgICAgICAKLQkgICAgICByZXR1cm4gdHJ1ZTsKLQkgICAgCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgfQorCisKKyAgICAgICAgICByZXR1cm4gdHJ1ZTsKKwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhdWdodCBFeGNlcHRpb24tLS0iKTsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhdWdodCBFeGNlcHRpb24tLS0iKTsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgaWYgKHJzICE9IG51bGwgKSB7CiAgICAgICAgICAgICAgICAgdHJ5IHsgcnMuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQpAQCAtODgsMjAgKzg4LDIwIEBACiAgICAgICAgICAgICBpZiAoY29ubiAhPSBudWxsICkgewogICAgICAgICAgICAgICAgIHRyeSB7Y29ubi5jbG9zZSgpO30gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAkKKwogICAgICAgICAgICAgaWYgKHJzMiAhPSBudWxsICkgewogICAgICAgICAgICAgICAgIHRyeSB7cnMyLmNsb3NlKCk7fSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChzdG10MiAhPSBudWxsICkgewogICAgICAgICAgICAgICAgIHRyeSB7c3RtdDIuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQogICAgICAgICAgICAgfQotICAgICAgICAgICAgCQkKKwogICAgICAgICAgICAgaWYgKG5vVHhDb25uICE9IG51bGwgKSB7CiAgICAgICAgICAgICAgICAgdHJ5IHsgbm9UeENvbm4uY2xvc2UoKTsgfWNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CiAgICAgICAgICAgICB9Ci0JfQorICAgIH0KIAotICAgICAgICAKKwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhjb25uL3Rlc3QyL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eGNvbm4vdGVzdDIvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IDAwZWI5NmMuLjJkM2QxYTIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eGNvbm4vdGVzdDIvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eGNvbm4vdGVzdDIvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDUgKzEsNSBAQAotRFJPUCBUQUJMRSBOT1RYQ09OTlRBQkxFOw0KLUNSRUFURSBUQUJMRSBOT1RYQ09OTlRBQkxFKA0KLSAgICBuYW1lIGNoYXIoMjApLCANCi0gICAgbnVtIGludGVnZXINCi0pOw0KK0RST1AgVEFCTEUgTk9UWENPTk5UQUJMRTsKK0NSRUFURSBUQUJMRSBOT1RYQ09OTlRBQkxFKAorICAgIG5hbWUgY2hhcigyMCksCisgICAgbnVtIGludGVnZXIKKyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhjb25uL3Rlc3QyL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhjb25uL3Rlc3QyL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggMDM0OTBkMC4uNzYyYTBmNiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3R4Y29ubi90ZXN0Mi9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eGNvbm4vdGVzdDIvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbApAQCAtMSArMSBAQAotRHJvcCB0YWJsZSBOT1RYQ09OTlRBQkxFOw0KK0Ryb3AgdGFibGUgTk9UWENPTk5UQUJMRTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eG9wcy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3R4b3BzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNDAwNTZmNi4uOGI4MDc5NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3R4b3BzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3R4b3BzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE4ICsxNSwxOCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iamRiYy1ub3R4b3BzIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhvcHMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3R4b3BzL2J1aWxkLnhtbAppbmRleCBmNTQ5ZjBlLi4zMzk5MmY0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhvcHMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eG9wcy9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ4LDQ0ICs0OCw0NCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqLyouY2xhc3MiIC8+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1jb25ucG9vbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJqZGJjLW5vdHhvcHMtcG9vbCIvPgotCTxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLnR5cGUiIHZhbHVlPSJqYXZheC5zcWwuWEFEYXRhU291cmNlIi8+Ci0JPHBhcmFtIG5hbWU9ImRiLmNsYXNzIiB2YWx1ZT0ib3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudFhBRGF0YVNvdXJjZSIvPgorICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLnR5cGUiIHZhbHVlPSJqYXZheC5zcWwuWEFEYXRhU291cmNlIi8+CisgICAgPHBhcmFtIG5hbWU9ImRiLmNsYXNzIiB2YWx1ZT0ib3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudFhBRGF0YVNvdXJjZSIvPgogICAgICAgPC9hbnRjYWxsPgogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiLz4KLQk8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLW5vdHhvcHMtcG9vbC5zdGVhZHlfcG9vbF9zaXplPTEiLz4KKyAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLW5vdHhvcHMtcG9vbC5zdGVhZHlfcG9vbF9zaXplPTEiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgotCTxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLmpkYmMtbm90eG9wcy1wb29sLm1heF9wb29sX3NpemU9MSIvPgorICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLmpkYmMtbm90eG9wcy1wb29sLm1heF9wb29sX3NpemU9MSIvPgogICAgICAgPC9hbnRjYWxsPgogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtbm90eG9wcy1wb29sIi8+Ci0JPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvbm90eG9wcyIvPgorICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL25vdHhvcHMiLz4KICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9wb2ludGJhc2Uuc3FsIi8+CkBAIC05NCwxMyArOTQsMTMgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvbm90eG9wcyIvPgogICAgICAgPC9hbnRjYWxsPgotICAgICAgCisKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1ub3R4b3BzLXBvb2wiLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICAgIAorCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhvcHMvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3R4b3BzL2NsaWVudC9DbGllbnQuamF2YQppbmRleCAzOTg2MWM1Li5kYWNiZmEwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhvcHMvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eG9wcy9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI1LDI4ICsyNSwyOCBAQAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuU2ltcGxlUmVwb3J0ZXJBZGFwdGVyOwogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKLQlTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKLQlTdHJpbmcgdGVzdFN1aXRlID0gIk5vVHhPcHMgIjsKKworICAgIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOworICAgIFN0cmluZyB0ZXN0U3VpdGUgPSAiTm9UeE9wcyAiOwogCiAgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgIE9iamVjdCBvYmpSZWYgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZVNlc3Npb25Ib21lIik7Ci0JU2ltcGxlU2Vzc2lvbkhvbWUgc2ltcGxlU2Vzc2lvbkhvbWUgPSAoU2ltcGxlU2Vzc2lvbkhvbWUpCisgICAgU2ltcGxlU2Vzc2lvbkhvbWUgc2ltcGxlU2Vzc2lvbkhvbWUgPSAoU2ltcGxlU2Vzc2lvbkhvbWUpCiAgICAgICAgIGphdmF4LnJtaS5Qb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqUmVmLCBTaW1wbGVTZXNzaW9uSG9tZS5jbGFzcyk7Ci0gICAgICAgIAorCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFdpbGwgZmFpbCB0aWxsIGEgYmV0dGVyIFhBIGRyaXZlciBpcyBpbnRlZ3JhdGVkIHdpdGggRGVyYnkiKTsKLQlzdGF0LmFkZERlc2NyaXB0aW9uKCJSdW5uaW5nIG5vdHhvcHMgdGVzdFN1aXRlMSAiKTsKKyAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJSdW5uaW5nIG5vdHhvcHMgdGVzdFN1aXRlMSAiKTsKICAgICAgICAgU2ltcGxlU2Vzc2lvbiBzaW1wbGVTZXNzaW9uID0gc2ltcGxlU2Vzc2lvbkhvbWUuY3JlYXRlKCk7CiAgICAgICAgIGlmIChzaW1wbGVTZXNzaW9uLnRlc3QxKCkgKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3QxIDogIiAsIHN0YXQuUEFTUyApOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3QxIDogIiAsIHN0YXQuRkFJTCApOwotCX0KLSAgICAKLQkKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0MSA6ICIgLCBzdGF0LlBBU1MgKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0MSA6ICIgLCBzdGF0LkZBSUwgKTsKKyAgICB9CisKKworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3R4b3BzL2Rlc2NyaXB0b3IvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhvcHMvZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCBmMjA3YTgyLi5lNDE5YWZkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhvcHMvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhvcHMvZGVzY3JpcHRvci9lamItamFyLnhtbApAQCAtNjIsMTIgKzYyLDEyIEBACiAgICAgPGNvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgICAgIDxtZXRob2Q+CiAgICAgICAgIDxlamItbmFtZT5TaW1wbGVTZXNzaW9uRUpCPC9lamItbmFtZT4KLQk8bWV0aG9kLW5hbWU+dXBkYXRlRGI8L21ldGhvZC1uYW1lPgorICAgIDxtZXRob2QtbmFtZT51cGRhdGVEYjwvbWV0aG9kLW5hbWU+CiAgICAgICA8L21ldGhvZD4KICAgICAgIDx0cmFucy1hdHRyaWJ1dGU+UmVxdWlyZXNOZXc8L3RyYW5zLWF0dHJpYnV0ZT4KICAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgICAtLT4KICAgPC9hc3NlbWJseS1kZXNjcmlwdG9yPgotICAgICAgCisKIDwvZWpiLWphcj4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3R4b3BzL2VqYi9TaW1wbGVTZXNzaW9uQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3R4b3BzL2VqYi9TaW1wbGVTZXNzaW9uQmVhbi5qYXZhCmluZGV4IGQyM2Q2ZjUuLjcxZGI0NzkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eG9wcy9lamIvU2ltcGxlU2Vzc2lvbkJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhvcHMvZWpiL1NpbXBsZVNlc3Npb25CZWFuLmphdmEKQEAgLTI4LDE0ICsyOCwxNCBAQAogewogCiAgICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBjdHh0XzsKLSAgICBwcml2YXRlIEluaXRpYWxDb250ZXh0IGljXzsgCisgICAgcHJpdmF0ZSBJbml0aWFsQ29udGV4dCBpY187CiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgY29udGV4dCkgewogICAgICAgICBjdHh0XyA9IGNvbnRleHQ7Ci0JdHJ5IHsKLQkgICAgaWNfID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JfSBjYXRjaCggTmFtaW5nRXhjZXB0aW9uIG5lICkgewotCSAgICBuZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisgICAgdHJ5IHsKKyAgICAgICAgaWNfID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgfSBjYXRjaCggTmFtaW5nRXhjZXB0aW9uIG5lICkgeworICAgICAgICBuZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7CkBAIC00Nyw1NSArNDcsNTUgQEAKICAgICAgKiBkaWQgbm90IGhhcHBlbgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIHRlc3QxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKWljXy5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZSIpOwotCUNvbm5lY3Rpb24gY29ubjEgPSBudWxsOwotCVN0YXRlbWVudCBzdG10MSA9IG51bGw7Ci0JUmVzdWx0U2V0IHJzMSA9IG51bGw7Ci0JYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKKyAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpaWNfLmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7CisgICAgQ29ubmVjdGlvbiBjb25uMSA9IG51bGw7CisgICAgU3RhdGVtZW50IHN0bXQxID0gbnVsbDsKKyAgICBSZXN1bHRTZXQgcnMxID0gbnVsbDsKKyAgICBib29sZWFuIHBhc3NlZCA9IGZhbHNlOwogCi0JdHJ5IHsKLQkgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIHN0bXQxID0gY29ubjEuY3JlYXRlU3RhdGVtZW50KCk7Ci0JICAgIHN0bXQxLmV4ZWN1dGVRdWVyeSggIlNFTEVDVCAqIEZST00gTk9UWE9QUyIpOwotCX0gY2F0Y2goIFNRTEV4Y2VwdGlvbiBlKSB7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIHJldHVybiBmYWxzZTsKLQl9IGZpbmFsbHkgewotCSAgICBpZiAoc3RtdDEgIT0gbnVsbCkgeyAKLQkgICAgICAgIHRyeSB7IHN0bXQxLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9Ci0JICAgIH0KLQkgICAgaWYgKGNvbm4xICE9IG51bGwpIHsgCi0JICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQotCSAgICB9Ci0JfQotCQotCQotCS8vTm93IHRyeSBnZXR0aW5nIGEgY29ubmVjdGlvbiBhZ2FpbiwgYnV0IHdpdGhpbiBhIHRyYW5zYWN0aW9uCi0JVXNlclRyYW5zYWN0aW9uIHR4ID0gKFVzZXJUcmFuc2FjdGlvbikgaWNfLmxvb2t1cCgiamF2YTpjb21wL1VzZXJUcmFuc2FjdGlvbiIpOwotCXRyeSB7Ci0JICAgIHR4LmJlZ2luKCk7Ci0JICAgIGNvbm4xID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCSAgICBzdG10MSA9IGNvbm4xLmNyZWF0ZVN0YXRlbWVudCgpOwotCSAgICByczEgPSBzdG10MS5leGVjdXRlUXVlcnkoIlNFTEVDVCAqIEZST00gTk9UWE9QUyIpOyAKLQkgICAgdHguY29tbWl0KCk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICBlLnByaW50U3RhY2tUcmFjZSgpOyAKLQkgICByZXR1cm4gZmFsc2U7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKHJzMSAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsgcnMxLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9Ci0JICAgIH0KLQkgICAgaWYgKCBzdG10MSAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsgc3RtdDEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fSAgICAKLQkgICAgfQotCSAgICBpZiAoIGNvbm4xICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9ICAgIAotCSAgICB9Ci0JfQotCi0JcmV0dXJuIHRydWU7CisgICAgdHJ5IHsKKyAgICAgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIHN0bXQxID0gY29ubjEuY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgIHN0bXQxLmV4ZWN1dGVRdWVyeSggIlNFTEVDVCAqIEZST00gTk9UWE9QUyIpOworICAgIH0gY2F0Y2goIFNRTEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBpZiAoc3RtdDEgIT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsgc3RtdDEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KKyAgICAgICAgfQorICAgICAgICBpZiAoY29ubjEgIT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KKyAgICAgICAgfQogICAgIH0KLSAgICAKKworCisgICAgLy9Ob3cgdHJ5IGdldHRpbmcgYSBjb25uZWN0aW9uIGFnYWluLCBidXQgd2l0aGluIGEgdHJhbnNhY3Rpb24KKyAgICBVc2VyVHJhbnNhY3Rpb24gdHggPSAoVXNlclRyYW5zYWN0aW9uKSBpY18ubG9va3VwKCJqYXZhOmNvbXAvVXNlclRyYW5zYWN0aW9uIik7CisgICAgdHJ5IHsKKyAgICAgICAgdHguYmVnaW4oKTsKKyAgICAgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIHN0bXQxID0gY29ubjEuY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgIHJzMSA9IHN0bXQxLmV4ZWN1dGVRdWVyeSgiU0VMRUNUICogRlJPTSBOT1RYT1BTIik7CisgICAgICAgIHR4LmNvbW1pdCgpOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKHJzMSAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsgcnMxLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBzdG10MSAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsgc3RtdDEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQorICAgICAgICB9CisgICAgICAgIGlmICggY29ubjEgIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7IGNvbm4xLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworICAgIH0KKwogICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7fQogICAgIHB1YmxpYyB2b2lkIGVqYlN0b3JlKCkge30KICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7fQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3R4b3BzL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eG9wcy9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggYjFmMDMzNy4uNWQ4OGRmZiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ub3R4b3BzL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhvcHMvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDkgKzEsOSBAQAotRHJvcCB0YWJsZSBOT1RYT1BTOw0KLQ0KLUNSRUFURSBUQUJMRSBOT1RYT1BTICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQotSU5TRVJUIElOVE8gTk9UWE9QUyBWQUxVRVMoMSwgJ3d4eXonKTsNCi1JTlNFUlQgSU5UTyBOT1RYT1BTIFZBTFVFUygyLCAncHFycycpOw0KK0Ryb3AgdGFibGUgTk9UWE9QUzsKKworQ1JFQVRFIFRBQkxFIE5PVFhPUFMgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQorKTsKKworSU5TRVJUIElOVE8gTk9UWE9QUyBWQUxVRVMoMSwgJ3d4eXonKTsKK0lOU0VSVCBJTlRPIE5PVFhPUFMgVkFMVUVTKDIsICdwcXJzJyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL25vdHhvcHMvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eG9wcy9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IDIyM2ZhMWQuLjc2MmMwMTAgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eG9wcy9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvbm90eG9wcy9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xLDIgKzEsMiBAQAotRHJvcCB0YWJsZSBOT1RYT1BTOw0KLURyb3AgdGFibGUgTk9UWE9QUzsNCitEcm9wIHRhYmxlIE5PVFhPUFM7CitEcm9wIHRhYmxlIE5PVFhPUFM7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL29ubHlnZXRjb25uZWN0aW9uL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL29ubHlnZXRjb25uZWN0aW9uL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggODVhZDFlZS4uNDA2MmY1YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9vbmx5Z2V0Y29ubmVjdGlvbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvb25seWdldGNvbm5lY3Rpb24vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTkgKzE1LDE5IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqZGJjLW9ubHlnZXRjb25uZWN0aW9uIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIyMDAwIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL29ubHlnZXRjb25uZWN0aW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvb25seWdldGNvbm5lY3Rpb24vYnVpbGQueG1sCmluZGV4IDlkYWVkYzcuLjFmNzc5ZjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvb25seWdldGNvbm5lY3Rpb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvb25seWdldGNvbm5lY3Rpb24vYnVpbGQueG1sCkBAIC0zMiwxNCArMzIsMTQgQEAKICAgJnRlc3Rwcm9wZXJ0aWVzOwogICAmamRiY0NvbW1vbjsKICAgJmpkYmNDb21tb25Qcm9wczsKLSAgICAKKwogICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iY2xlYW4sYnVpbGQsZGVwbG95LHJ1bix1bmRlcGxveSIvPgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CiAgICAgPGRlbGV0ZSBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC02NiwyOCArNjYsMjggQEAKICAgICA8IS0tCiAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+Ci0JPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy1wb2ludGJhc2UtcG9vbC5wcm9wZXJ0eS5hc3NvY2lhdGV3aXRodGhyZWFkPXRydWUiLz4KKyAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLXBvaW50YmFzZS1wb29sLnByb3BlcnR5LmFzc29jaWF0ZXdpdGh0aHJlYWQ9dHJ1ZSIvPgogICAgIDwvYW50Y2FsbD4KICAgICAtLT4KIAogICA8L3RhcmdldD4KLSAgCi0gIAorCisKICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamRiYy1jb21tb24iLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgogICA8L3RhcmdldD4KLSAgCi0gIAorCisKICAgPHRhcmdldCBuYW1lPSJydW4iPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGUuc3FsIi8+Ci0gICAgPC9hbnRjYWxsPiAgCisgICAgPC9hbnRjYWxsPgogICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KICAgPC90YXJnZXQ+Ci0gIAorCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL29ubHlnZXRjb25uZWN0aW9uL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvb25seWdldGNvbm5lY3Rpb24vY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDI0YTEwODQuLmNlMWNlMzEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvb25seWdldGNvbm5lY3Rpb24vY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvb25seWdldGNvbm5lY3Rpb24vY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci5TaW1wbGVSZXBvcnRlckFkYXB0ZXI7CiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewotICAgIAorCiAgICAgcHJpdmF0ZSBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKICAgICBwcml2YXRlIFN0cmluZyB0ZXN0U3VpdGUgPSAiamRiYy1vbmx5Z2V0Y29ubmVjdGlvbiAiOwogICAgIHByaXZhdGUgTm9UeENvbm5UZXN0IGJlYW47CkBAIC0zMywyMiArMzMsMjIgQEAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKIAotLy8gCVNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOworLy8gICAgIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOwogLy8KIC8vICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogLy8gICAgICAgIE9iamVjdCBvYmpSZWYgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL05vVHhDb25uVGVzdEVKQiIpOwotLy8JTm9UeENvbm5UZXN0SG9tZSBob21lID0gKE5vVHhDb25uVGVzdEhvbWUpCisvLyAgICBOb1R4Q29ublRlc3RIb21lIGhvbWUgPSAoTm9UeENvbm5UZXN0SG9tZSkKIC8vICAgICAgICAgICAgamF2YXgucm1pLlBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpSZWYsIE5vVHhDb25uVGVzdEhvbWUuY2xhc3MpOwogLy8KIC8vICAgICAgICBOb1R4Q29ublRlc3QgYmVhbiA9IGhvbWUuY3JlYXRlKCk7CiAKIC8vICAgICAgaWYgKCBiZWFuLnRlc3QxKCkgKSB7Ci0vLwkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyIgdGVzdDEgOiAiLCBzdGF0LlBBU1MpOwotLy8JfSBlbHNlIHsKLS8vCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIiB0ZXN0MSA6ICIsIHN0YXQuRkFJTCk7Ci0vLwl9Ci0vLwlzdGF0LnByaW50U3VtbWFyeSgpOwotICAgICAgICAKKy8vICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIiB0ZXN0MSA6ICIsIHN0YXQuUEFTUyk7CisvLyAgICB9IGVsc2UgeworLy8gICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsiIHRlc3QxIDogIiwgc3RhdC5GQUlMKTsKKy8vICAgIH0KKy8vICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CisKICAgICAgICAgaWYgKCBhcmdzLmxlbmd0aCA9PSAwICkgewogICAgICAgICAgICAgKG5ldyBDbGllbnQoKSkucnVuU2luZ2xlVGhyZWFkZWQoKTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTYwLDM1ICs2MCwzNSBAQAogICAgICAgICAgICAgICAgIChuZXcgQ2xpZW50KCkpLnJ1bk11bHRpVGhyZWFkZWQoIG51bVJ1bnMgKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgIH0KIAogICAgIHB1YmxpYyBDbGllbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgT2JqZWN0IG9ialJlZiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvTm9UeENvbm5UZXN0RUpCIik7Ci0JTm9UeENvbm5UZXN0SG9tZSBob21lID0gKE5vVHhDb25uVGVzdEhvbWUpCisgICAgTm9UeENvbm5UZXN0SG9tZSBob21lID0gKE5vVHhDb25uVGVzdEhvbWUpCiAgICAgICAgICAgICBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ialJlZiwgTm9UeENvbm5UZXN0SG9tZS5jbGFzcyk7CiAKICAgICAgICAgYmVhbiA9IGhvbWUuY3JlYXRlKCk7CiAgICAgfQotICAgCisKICAgICBwdWJsaWMgdm9pZCBydW5TaW5nbGVUaHJlYWRlZCgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBpZiAoIGJlYW4udGVzdDEoKSApIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyIgdGVzdDEgOiAiLCBzdGF0LlBBU1MpOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsiIHRlc3QxIDogIiwgc3RhdC5GQUlMKTsKLQl9Ci0Jc3RhdC5wcmludFN1bW1hcnkoKTsKLSAKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyIgdGVzdDEgOiAiLCBzdGF0LlBBU1MpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsiIHRlc3QxIDogIiwgc3RhdC5GQUlMKTsKKyAgICB9CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKKwogICAgIH0KIAotICAgIAorCiAgICAgcHVibGljIHZvaWQgcnVuTXVsdGlUaHJlYWRlZCggaW50IG51bVRocmVhZHMgKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgTVRDbGllbnRbXSBtdGMgPSBuZXcgTVRDbGllbnRbIG51bVRocmVhZHMgXTsKICAgICAgICAgYm9vbGVhbiByZXN1bHQgPSB0cnVlOwogICAgICAgICBpbnQgZmFpbENvdW50ID0gMDsKIAotICAgICAgICBmb3IgKCBpbnQgaSA9IDA7IGkgPCBudW1UaHJlYWRzOyBpKyspIHsgCisgICAgICAgIGZvciAoIGludCBpID0gMDsgaSA8IG51bVRocmVhZHM7IGkrKykgewogICAgICAgICAgICAgbXRjW2ldID0gbmV3IE1UQ2xpZW50KCBpICk7CiAgICAgICAgICAgICBtdGNbaV0uc3RhcnQoKTsKICAgICAgICAgfQpAQCAtOTcsMTUgKzk3LDE1IEBACiAgICAgICAgIGZvciAoIGludCBpID0gMDsgaSA8IG51bVRocmVhZHM7IGkrKyApIHsKICAgICAgICAgICAgIG10Y1tpXS5qb2luKCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgZm9yICggaW50IGkgPSAwOyBpIDwgbnVtVGhyZWFkczsgaSsrICkgewogICAgICAgICAgICAgcmVzdWx0ICY9IG10Y1tpXS5yZXN1bHQ7CiAgICAgICAgICAgICBpZiAoICFtdGNbaV0ucmVzdWx0ICkgewogICAgICAgICAgICAgICAgIGZhaWxDb3VudCsrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRvdGFsIFRocmVhZHM6ICIgKyBudW1UaHJlYWRzICk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVG90YWwgUGFzc2VkIDogIiArIChudW1UaHJlYWRzIC0gZmFpbENvdW50ICkgKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUb3RhbCBGYWlsZWQgOiAiICsgZmFpbENvdW50ICk7CkBAIC0xMTUsNyArMTE1LDcgQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIG11bHRpdGhyZWFkZWQtdGVzdCA6ICIgLCBzdGF0LkZBSUwgKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIApAQCAtMTI2LDcgKzEyNiw3IEBACiAgICAgICAgIE1UQ2xpZW50KCBpbnQgaWQgKSB7CiAgICAgICAgICAgICBpZF8gPSBpZDsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIHJlc3VsdCA9IGJlYW4udGVzdDEoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvb25seWdldGNvbm5lY3Rpb24vZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL29ubHlnZXRjb25uZWN0aW9uL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCmluZGV4IDQ2MGY2N2QuLmNlYTU5ZWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvb25seWdldGNvbm5lY3Rpb24vZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9vbmx5Z2V0Y29ubmVjdGlvbi9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbApAQCAtMjUsMTEgKzI1LDExIEBACiAgICAgICA8cmVzb3VyY2UtcmVmPgogICAgICAgICA8cmVzLXJlZi1uYW1lPmpkYmMvb25seWdldGNvbm5lY3Rpb248L3Jlcy1yZWYtbmFtZT4KICAgICAgICAgPGpuZGktbmFtZT5qZGJjL3MxcWVEQjwvam5kaS1uYW1lPgotCTxkZWZhdWx0LXJlc291cmNlLXByaW5jaXBhbD4KLQkgIDxuYW1lPmRidXNlcjwvbmFtZT4KLQkgIDxwYXNzd29yZD5kYnBhc3N3b3JkPC9wYXNzd29yZD4KLQk8L2RlZmF1bHQtcmVzb3VyY2UtcHJpbmNpcGFsPgorICAgIDxkZWZhdWx0LXJlc291cmNlLXByaW5jaXBhbD4KKyAgICAgIDxuYW1lPmRidXNlcjwvbmFtZT4KKyAgICAgIDxwYXNzd29yZD5kYnBhc3N3b3JkPC9wYXNzd29yZD4KKyAgICA8L2RlZmF1bHQtcmVzb3VyY2UtcHJpbmNpcGFsPgogICAgICAgPC9yZXNvdXJjZS1yZWY+Ci0gICAgPC9lamI+ICAKKyAgICA8L2VqYj4KICAgPC9lbnRlcnByaXNlLWJlYW5zPgogPC9zdW4tZWpiLWphcj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvb25seWdldGNvbm5lY3Rpb24vZWpiL05vVHhDb25uVGVzdEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvb25seWdldGNvbm5lY3Rpb24vZWpiL05vVHhDb25uVGVzdEJlYW4uamF2YQppbmRleCBhNWI3YzIwLi4wZWVmYTdlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL29ubHlnZXRjb25uZWN0aW9uL2VqYi9Ob1R4Q29ublRlc3RCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9vbmx5Z2V0Y29ubmVjdGlvbi9lamIvTm9UeENvbm5UZXN0QmVhbi5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiAgICAgcHJpdmF0ZSBFSkJDb250ZXh0IGVqYmNvbnRleHQ7CiAgICAgcHJpdmF0ZSB0cmFuc2llbnQgamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQgbV9jdHggPSBudWxsOwogICAgIHRyYW5zaWVudCBqYXZheC5zcWwuRGF0YVNvdXJjZSBkczsKLQkKKwogCiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQgY3R4KSB7CiAgICAgICAgIG1fY3R4ID0gY3R4OwpAQCAtNDUsMTMgKzQ1LDEzIEBACiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkge30KIAogICAgIHB1YmxpYyBib29sZWFuIHRlc3QxKCkgewotCUNvbm5lY3Rpb24gY29ubiA9IG51bGw7Ci0JU3RhdGVtZW50IHN0bXQgPSBudWxsOwotCVJlc3VsdFNldCBycyA9IG51bGw7CisgICAgQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKKyAgICBTdGF0ZW1lbnQgc3RtdCA9IG51bGw7CisgICAgUmVzdWx0U2V0IHJzID0gbnVsbDsKIAotCUNvbm5lY3Rpb24gY29ubjEgPSBudWxsOwotCVN0YXRlbWVudCBzdG10MSA9IG51bGw7IAotCVJlc3VsdFNldCByczEgPSBudWxsOworICAgIENvbm5lY3Rpb24gY29ubjEgPSBudWxsOworICAgIFN0YXRlbWVudCBzdG10MSA9IG51bGw7CisgICAgUmVzdWx0U2V0IHJzMSA9IG51bGw7CiAKICAgICAgICAgdHJ5IHsKIApAQCAtNjEsMjUgKzYxLDI1IEBACiAgICAgICAgICAgICBzdG10ID0gY29ubi5jcmVhdGVTdGF0ZW1lbnQoKTsKICAgICAgICAgICAgIFN0cmluZyBxdWVyeTEgPSAiU0VMRUNUICogRlJPTSBPTkxZR0VUQ09OTkVDVElPTiI7CiAgICAgICAgICAgICBycyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHF1ZXJ5MSk7Ci0JICAgIAorCiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgcnMuY2xvc2UoKTsKLQkgICAgc3RtdC5jbG9zZSgpOwotCSAgICBjb25uLmNsb3NlKCk7Ci0JICAgIGNvbm4xID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICBzdG10LmNsb3NlKCk7CisgICAgICAgIGNvbm4uY2xvc2UoKTsKKyAgICAgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7CiAgICAgICAgICAgICBzdG10MSA9IGNvbm4xLmNyZWF0ZVN0YXRlbWVudCgpOwogICAgICAgICAgICAgcnMxID0gc3RtdDEuZXhlY3V0ZVF1ZXJ5KHF1ZXJ5MSk7CiAKICAgICAgICAgICAgIHJzMS5jbG9zZSgpOwotCSAgICBzdG10MS5jbG9zZSgpOwotCSAgICBjb25uMS5jbG9zZSgpOworICAgICAgICBzdG10MS5jbG9zZSgpOworICAgICAgICBjb25uMS5jbG9zZSgpOwogICAgICAgICAgICAgKi8KIAotICAgICAgICAgICAgcmV0dXJuIHRydWU7CSAgIAorICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2F1Z2h0IEV4Y2VwdGlvbi0tLSIpOwotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2F1Z2h0IEV4Y2VwdGlvbi0tLSIpOworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICBpZiAocnMgIT0gbnVsbCApIHsKICAgICAgICAgICAgICAgICB0cnkgeyBycy5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CkBAIC05MCw4ICs5MCw4IEBACiAgICAgICAgICAgICBpZiAoY29ubiAhPSBudWxsICkgewogICAgICAgICAgICAgICAgIHRyeSB7Y29ubi5jbG9zZSgpO30gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAkKLSAgICAgICAJfQorCisgICAgICAgICAgIH0KICAgICB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9vbmx5Z2V0Y29ubmVjdGlvbi9zcWwvY3JlYXRlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvb25seWdldGNvbm5lY3Rpb24vc3FsL2NyZWF0ZS5zcWwKaW5kZXggYzU4YTZlMy4uYWU5ZjU2OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9vbmx5Z2V0Y29ubmVjdGlvbi9zcWwvY3JlYXRlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL29ubHlnZXRjb25uZWN0aW9uL3NxbC9jcmVhdGUuc3FsCkBAIC0xLDUgKzEsNSBAQAogRFJPUCBUQUJMRSBPTkxZR0VUQ09OTkVDVElPTjsKIENSRUFURSBUQUJMRSBPTkxZR0VUQ09OTkVDVElPTigKLSAgICBuYW1lIGNoYXIoMjApLCAKKyAgICBuYW1lIGNoYXIoMjApLAogICAgIG51bSBpbnRlZ2VyCiApOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9vbmx5Z2V0Y29ubmVjdGlvbi90ZXN0LXZhbGlkYXRpb24tcmVjb25maWcuc2ggYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL29ubHlnZXRjb25uZWN0aW9uL3Rlc3QtdmFsaWRhdGlvbi1yZWNvbmZpZy5zaAppbmRleCAwNmJkZmQzLi41ODU2ZDA3IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL29ubHlnZXRjb25uZWN0aW9uL3Rlc3QtdmFsaWRhdGlvbi1yZWNvbmZpZy5zaAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL29ubHlnZXRjb25uZWN0aW9uL3Rlc3QtdmFsaWRhdGlvbi1yZWNvbmZpZy5zaApAQCAtMTgsMTAgKzE4LDEwIEBACiBlY2hvICJTMUFTX0hPTUUgaXMgPT4gIiAkUzFBU19IT01FCiBlY2hvICIgQVBTX0hPTUUgaXMgPT8gIiAkQVBTX0hPTUUKIAotJFMxQVNfSE9NRS9saWIvYW50L2Jpbi9hbnQgcnVuIAorJFMxQVNfSE9NRS9saWIvYW50L2Jpbi9hbnQgcnVuCiBjZCAkQVBTX0hPTUUKLWdtYWtlIHN0b3BQQiAKLWdtYWtlIHN0YXJ0UEIgCi1jZCAtIAotIyRTMUFTX0hPTUUvYmluL2FzYWRtaW4gc2V0IGRvbWFpbi5yZXNvdXJjZXMuamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy1wb2ludGJhc2UtcG9vbC5pc19jb25uZWN0aW9uX3ZhbGlkYXRpb25fcmVxdWlyZWQ9dHJ1ZSAKK2dtYWtlIHN0b3BQQgorZ21ha2Ugc3RhcnRQQgorY2QgLQorIyRTMUFTX0hPTUUvYmluL2FzYWRtaW4gc2V0IGRvbWFpbi5yZXNvdXJjZXMuamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy1wb2ludGJhc2UtcG9vbC5pc19jb25uZWN0aW9uX3ZhbGlkYXRpb25fcmVxdWlyZWQ9dHJ1ZQogJFMxQVNfSE9NRS9saWIvYW50L2Jpbi9hbnQgcnVuCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL29ubHlnZXRjb25uZWN0aW9uc2VydmxldC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9vbmx5Z2V0Y29ubmVjdGlvbnNlcnZsZXQvYnVpbGQucHJvcGVydGllcwppbmRleCBjNWM2YWMxLi4wNjVlZDg4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL29ubHlnZXRjb25uZWN0aW9uc2VydmxldC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvb25seWdldGNvbm5lY3Rpb25zZXJ2bGV0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE2ICsxNSwxNiBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iamRiYyIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tb25seWdldGNvbm5lY3Rpb24tc2VydmxldCIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tb25seWdldGNvbm5lY3Rpb24tc2VydmxldCIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSJvbmx5Z2V0Y29ubmVjdGlvbnNlcnZsZXQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvb25seWdldGNvbm5lY3Rpb25zZXJ2bGV0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvb25seWdldGNvbm5lY3Rpb25zZXJ2bGV0L2J1aWxkLnhtbAppbmRleCBhNzZhNTcyLi5lNjZjMjhmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL29ubHlnZXRjb25uZWN0aW9uc2VydmxldC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9vbmx5Z2V0Y29ubmVjdGlvbnNlcnZsZXQvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00OCwxMyArNDgsMTMgQEAKICAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqL3NlcnZsZXQvKi5jbGFzcyIvPiAKKyAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovc2VydmxldC8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhcHBjbGllbnQtamFyLWNvbW1vbiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVhci1jb21tb24iLz4KLSAgICAKLSAgICA8L3RhcmdldD4gCi0gICAgCisKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qZGJjLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL29ubHlnZXRjb25uZWN0aW9uc2VydmxldCIvPgpAQCAtNjIsMTUgKzYyLDE1IEBACiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiLz4KLQk8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLW9ubHlnZXRjb25uZWN0aW9uc2VydmxldC1wb29sLnByb3BlcnR5LmFzc29jaWF0ZXdpdGh0aHJlYWQ9dHJ1ZSIvPgorICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLmpkYmMtb25seWdldGNvbm5lY3Rpb25zZXJ2bGV0LXBvb2wucHJvcGVydHkuYXNzb2NpYXRld2l0aHRocmVhZD10cnVlIi8+CiAgICAgICA8L2FudGNhbGw+CiA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGUuc3FsIi8+Ci0gICAgICA8L2FudGNhbGw+ICAKKyAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgPGphdmEgY2xhc3NuYW1lPSJjb20uc3VuLnMxYXNkZXYuamRiYy5vbmx5Z2V0Y29ubmVjdGlvbnNlcnZsZXQuY2xpZW50LkNsaWVudCI+CiAgICAgICAgIDxjbGFzc3BhdGg+CkBAIC03OCwxNyArNzgsMTcgQEAKICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wLnNxbCIvPgotICAgICAgPC9hbnRjYWxsPiAgCisgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWpkYmMtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvb25seWdldGNvbm5lY3Rpb25zZXJ2bGV0Ii8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbm5wb29sLm5hbWUiIHZhbHVlPSJqZGJjLW9ubHlnZXRjb25uZWN0aW9uc2VydmxldC1wb29sIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvb25seWdldGNvbm5lY3Rpb25zZXJ2bGV0L2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvb25seWdldGNvbm5lY3Rpb25zZXJ2bGV0L2NsaWVudC9DbGllbnQuamF2YQppbmRleCAzNWQ1NmJkLi44MTUxMzY0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL29ubHlnZXRjb25uZWN0aW9uc2VydmxldC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9vbmx5Z2V0Y29ubmVjdGlvbnNlcnZsZXQvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yOSwxOSArMjksMTkgQEAKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKLSAJLy9TaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKLQlTdHJpbmcgdGVzdFN1aXRlID0gImpkYmMtb25seWdldGNvbm5lY3Rpb24gIjsKLSAgICAgICAgCisKKyAgICAgLy9TaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKKyAgICBTdHJpbmcgdGVzdFN1aXRlID0gImpkYmMtb25seWdldGNvbm5lY3Rpb24gIjsKKwogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0oSHR0cFVSTENvbm5lY3Rpb24pIG5ldyBVUkwoImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8iICsKICAgICAgICAgICAgICJvbmx5Z2V0Y29ubmVjdGlvbnNlcnZsZXQvb25seWdldGNvbm5lY3Rpb25zZXJ2bGV0Iikub3BlbkNvbm5lY3Rpb24oKTsKIAogICAgICAgICAvKgotICAgICAgICBJbnB1dFN0cmVhbSBzaXMgPSBjb25uLmdldElucHV0U3RyZWFtKCk7IAorICAgICAgICBJbnB1dFN0cmVhbSBzaXMgPSBjb25uLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGluID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKCBuZXcgSW5wdXRTdHJlYW1SZWFkZXIoc2lzKSApOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIGNvbm4uZ2V0UmVzcG9uc2VNZXNzYWdlKCkgKTsKICAgICAgICAgU3RyaW5nIG9wID0gbnVsbDsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgUmVhZGluZyByZXNwb25zZSIpOyAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgUmVhZGluZyByZXNwb25zZSIpOwogICAgICAgICB3aGlsZSggKG9wID0gaW4ucmVhZExpbmUoKSkgIT0gbnVsbCApIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihvcCk7CiAgICAgICAgIH0KQEAgLTQ5LDE3ICs0OSwxNyBAQAogCiAgICAgICAgIENsaWVudCBjID0gbmV3IENsaWVudCgpOwogICAgICAgICBjLm11bHRpVGhyZWFkZWRUZXN0KCA0MCApOwotICAgICAgIAorCiAgICAgICAgIC8qCiAgICAgICAgIGlmICggYmVhbi50ZXN0MSgpICkgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIiB0ZXN0MSA6ICIsIHN0YXQuUEFTUyk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyIgdGVzdDEgOiAiLCBzdGF0LkZBSUwpOwotCX0KLSAgICAgICAgCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyIgdGVzdDEgOiAiLCBzdGF0LlBBU1MpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsiIHRlc3QxIDogIiwgc3RhdC5GQUlMKTsKKyAgICB9CisKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgICAgICAqLwotICAgICAgICAKKwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIG11bHRpVGhyZWFkZWRUZXN0KCBpbnQgbnVtVGhyZWFkcyApIHRocm93cyBFeGNlcHRpb24gewpAQCAtNzIsMTEgKzcyLDExIEBACiAgICAgICAgICAgICAgICAgICAgIGNvbm4gPShIdHRwVVJMQ29ubmVjdGlvbikgbmV3IFVSTCgiaHR0cDovL2xvY2FsaG9zdDo4MDgwLyIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICJvbmx5Z2V0Y29ubmVjdGlvbnNlcnZsZXQvb25seWdldGNvbm5lY3Rpb25zZXJ2bGV0Iikub3BlbkNvbm5lY3Rpb24oKTsKIAotICAgICAgICAgICAgICAgICAgICBJbnB1dFN0cmVhbSBzaXMgPSBjb25uLmdldElucHV0U3RyZWFtKCk7IAorICAgICAgICAgICAgICAgICAgICBJbnB1dFN0cmVhbSBzaXMgPSBjb25uLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGluID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKCBuZXcgSW5wdXRTdHJlYW1SZWFkZXIoc2lzKSApOwogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIGNvbm4uZ2V0UmVzcG9uc2VNZXNzYWdlKCkgKTsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG9wID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgUmVhZGluZyByZXNwb25zZSIpOyAKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgUmVhZGluZyByZXNwb25zZSIpOwogICAgICAgICAgICAgICAgICAgICB3aGlsZSggKG9wID0gaW4ucmVhZExpbmUoKSkgIT0gbnVsbCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKG9wKTsKICAgICAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9vbmx5Z2V0Y29ubmVjdGlvbnNlcnZsZXQvc2VydmxldC9Pbmx5R2V0Q29ubmVjdGlvblNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvb25seWdldGNvbm5lY3Rpb25zZXJ2bGV0L3NlcnZsZXQvT25seUdldENvbm5lY3Rpb25TZXJ2bGV0LmphdmEKaW5kZXggNWZjOTJkOS4uMDJmYTA4MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9vbmx5Z2V0Y29ubmVjdGlvbnNlcnZsZXQvc2VydmxldC9Pbmx5R2V0Q29ubmVjdGlvblNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL29ubHlnZXRjb25uZWN0aW9uc2VydmxldC9zZXJ2bGV0L09ubHlHZXRDb25uZWN0aW9uU2VydmxldC5qYXZhCkBAIC0yNiw5ICsyNiw5IEBACiAKIC8qKgogICogQ29sbGVjdGlvbiBvZiBnZXRDb25uZWN0aW9uIHRlc3RzIHVzaW5nIGEgc2VydmxldAotICogCisgKgogICogQGF1dGhvciBhZGl0eWEuZ29yZUBzdW4uY29tCi0gKi8gCisgKi8KIAogcHVibGljIGNsYXNzIE9ubHlHZXRDb25uZWN0aW9uU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIApAQCAtMzYsMTAgKzM2LDEwIEBACiAgICAgcHJpdmF0ZSBQcmludFdyaXRlciBvdXQ7CiAgICAgcHJpdmF0ZSBVc2VyVHJhbnNhY3Rpb24gdXR4OwogCi0gICAgcHVibGljIHZvaWQgZG9HZXQoIEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCApIAorICAgIHB1YmxpYyB2b2lkIGRvR2V0KCBIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3AgKQogICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uCiAgICAgewotU3lzdGVtLm91dC5wcmludGxuKCIgQEBAQCBpbiBkb0dldCIpOyAgICAKK1N5c3RlbS5vdXQucHJpbnRsbigiIEBAQEAgaW4gZG9HZXQiKTsKICAgICAgICAgb3V0ID0gcmVzcC5nZXRXcml0ZXIoKTsKICAgICAgICAgd3JpdGVIZWFkZXIoKTsKIApAQCAtNzIsOSArNzIsOSBAQAogICAgICAgICAgICAgY29uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwogICAgICAgICAgICAgc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKICAgICAgICAgICAgIHJzID0gc3RtdC5leGVjdXRlUXVlcnkoIlNFTEVDVCAqIEZST00gT05MWUdFVENPTk5FQ1RJT04iKTsKLSAgICAgICAgICAgIG91dC5wcmludGxuKCJ0ZXN0MSA6OiBQQVNTRUQiKTsgCisgICAgICAgICAgICBvdXQucHJpbnRsbigidGVzdDEgOjogUEFTU0VEIik7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCBvdXQgKTsgCisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSggb3V0ICk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICBpZiAoIHJzICE9IG51bGwgKSB7IHRyeSB7IHJzLmNsb3NlKCk7IH1jYXRjaCggRXhjZXB0aW9uIGUpIHt9IH0KQEAgLTkyLDE1ICs5MiwxNSBAQAogICAgICAgICAgICAgdXR4LmJlZ2luKCk7CiAgICAgICAgICAgICBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7CiAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIFRocmVhZC5zbGVlcCggNTAwMCApOyAgICAKKyAgICAgICAgICAgICAgICBUaHJlYWQuc2xlZXAoIDUwMDAgKTsKICAgICAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CiAgICAgICAgICAgICBycyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KCJTRUxFQ1QgKiBGUk9NIE9OTFlHRVRDT05ORUNUSU9OIik7CiAgICAgICAgICAgICB1dHguY29tbWl0KCk7Ci0gICAgICAgICAgICBvdXQucHJpbnRsbigidGVzdDIgOjogUEFTU0VEIik7IAorICAgICAgICAgICAgb3V0LnByaW50bG4oInRlc3QyIDo6IFBBU1NFRCIpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSggb3V0ICk7IAorICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoIG91dCApOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgaWYgKCBycyAhPSBudWxsICkgeyB0cnkgeyBycy5jbG9zZSgpOyB9Y2F0Y2goIEV4Y2VwdGlvbiBlKSB7fSB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL29ubHlnZXRjb25uZWN0aW9uc2VydmxldC9zcWwvY3JlYXRlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvb25seWdldGNvbm5lY3Rpb25zZXJ2bGV0L3NxbC9jcmVhdGUuc3FsCmluZGV4IGViOTUxNmUuLjU1Y2ZjMDIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvb25seWdldGNvbm5lY3Rpb25zZXJ2bGV0L3NxbC9jcmVhdGUuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvb25seWdldGNvbm5lY3Rpb25zZXJ2bGV0L3NxbC9jcmVhdGUuc3FsCkBAIC0xLDYgKzEsNiBAQAogRFJPUCBUQUJMRSBPTkxZR0VUQ09OTkVDVElPTjsKIENSRUFURSBUQUJMRSBPTkxZR0VUQ09OTkVDVElPTigKLSAgICBuYW1lIGNoYXIoMjApLCAKKyAgICBuYW1lIGNoYXIoMjApLAogICAgIG51bSBpbnRlZ2VyCiApOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3Bvb2xpbmcvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcG9vbGluZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDQwYjI3YTIuLjgzN2ZhYTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcG9vbGluZy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcG9vbGluZy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOCArMTUsMTggQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImpkYmMtcG9vbGluZyIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9wb29saW5nL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcG9vbGluZy9idWlsZC54bWwKaW5kZXggNGFjYzY3Yi4uOTljNWU5YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9wb29saW5nL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3Bvb2xpbmcvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OCwxNSArNDgsMTUgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqLyouY2xhc3MiIC8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgIAorCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWpkYmMtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtZGVyYnktcG9vbCIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvbm9ueGFyZXNvdXJjZSIvPgpAQCAtOTIsMTcgKzkyLDE3IEBACiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgotCTxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLmpkYmMtZGVyYnktcG9vbC5wb29saW5nPWZhbHNlIi8+CisgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy1kZXJieS1wb29sLnBvb2xpbmc9ZmFsc2UiLz4KICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+Ci0JPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy1kZXJieS1wb29sLWNvbnRhaW5lci5wb29saW5nPWZhbHNlIi8+CisgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy1kZXJieS1wb29sLWNvbnRhaW5lci5wb29saW5nPWZhbHNlIi8+CiAgICAgICA8L2FudGNhbGw+CiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgotCTxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLmpkYmMtZGVyYnkteGEtcG9vbC5wb29saW5nPWZhbHNlIi8+CisgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy1kZXJieS14YS1wb29sLnBvb2xpbmc9ZmFsc2UiLz4KICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CkBAIC0xMTAsMTkgKzExMCwxOSBAQAogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgPC9hbnRjYWxsPgogCi0gICAgICAKKwogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLQkgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgorICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9ub254YXJlc291cmNlIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIApAQCAtMTMwLDcgKzEzMCw3IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJqZGJjLWRlcmJ5LXBvb2wiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCi0JIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KKyAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvbm9ueGFyZXNvdXJjZS1jb250YWluZXIiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCkBAIC0xMzgsNyArMTM4LDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtZGVyYnktcG9vbC1jb250YWluZXIiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCi0JIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KKyAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMveGFyZXNvdXJjZSIvPgogICAgICAgICA8L2FudGNhbGw+CiAKQEAgLTE0Niw3ICsxNDYsNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1kZXJieS14YS1wb29sIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3Bvb2xpbmcvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9wb29saW5nL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBkMjNhZDdiLi4xMGU2YjZjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3Bvb2xpbmcvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcG9vbGluZy9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI1LDcgKzI1LDcgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLlNpbXBsZVJlcG9ydGVyQWRhcHRlcjsKIAogcHVibGljIGNsYXNzIENsaWVudCB7Ci0gICAKKwogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOwogICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gcm9sbGJhY2s7CiAgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1hBOwpAQCAtMzQsMzIgKzM0LDMyIEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgSW5pdGlhbENvbnRleHQgaWM7CiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7Ci0JICAgIGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JfSBjYXRjaChOYW1pbmdFeGNlcHRpb24gZXgpIHsKLQkgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQorICAgICAgICBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgIH0gY2F0Y2goTmFtaW5nRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KIAogICAgICAgICBPYmplY3Qgb2JqUmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVTZXNzaW9uSG9tZSIpOwotCVNpbXBsZVNlc3Npb25Ib21lIHNpbXBsZVNlc3Npb25Ib21lID0gKFNpbXBsZVNlc3Npb25Ib21lKQorICAgIFNpbXBsZVNlc3Npb25Ib21lIHNpbXBsZVNlc3Npb25Ib21lID0gKFNpbXBsZVNlc3Npb25Ib21lKQogICAgICAgICBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ialJlZiwgU2ltcGxlU2Vzc2lvbkhvbWUuY2xhc3MpOwotCXN0YXQuYWRkRGVzY3JpcHRpb24oIlJ1bm5pbmcgcG9vbGluZyB0ZXN0U3VpdGUgIik7CisgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiUnVubmluZyBwb29saW5nIHRlc3RTdWl0ZSAiKTsKICAgICAgICAgU2ltcGxlU2Vzc2lvbiBzaW1wbGVTZXNzaW9uID0gc2ltcGxlU2Vzc2lvbkhvbWUuY3JlYXRlKCk7Ci0gICAgICAgIAorCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidmVyaWZ5aW5nIHVuaXF1ZW5lc3Mgb2YgYWxsIGNvbm5lY3Rpb24iKTsKICAgICAgICAgaWYoc2ltcGxlU2Vzc2lvbi5vcGVuQW5kQ2xvc2VDb25uZWN0aW9uKDQwKSkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgb3BlbkFuZENsb3NlQ29ubmVjdGlvbiAobm9uLXhhKSA6ICIsIHN0YXQuUEFTUyApOwotCX0gZWxzZSB7CisgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIG9wZW5BbmRDbG9zZUNvbm5lY3Rpb24gKG5vbi14YSkgOiAiLCBzdGF0LlBBU1MgKTsKLQl9CisgICAgfQogCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY3JlYXRpbmcgY29ubmVjdGlvbiB1cHRvIG1heC1wb29sLXNpemUgb2YgMzIiKTsKICAgICAgICAgaWYoc2ltcGxlU2Vzc2lvbi5vcGVuTWF4Q29ubmVjdGlvbnMoMzIpKSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiBvcGVuTWF4Q29ubmVjdGlvbnMgKG5vbi14YSkgOiAiLCBzdGF0LlBBU1MgKTsKLQl9IGVsc2UgeworICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiBvcGVuTWF4Q29ubmVjdGlvbnMgKG5vbi14YSkgOiAiLCBzdGF0LlBBU1MgKTsKLQl9CisgICAgfQogCiAKICAgICAgICAgcm9sbGJhY2sgPSBmYWxzZTsKQEAgLTcyLDkgKzcyLDkgQEAKIAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIHZvaWQgcnVuVGVzdChTaW1wbGVTZXNzaW9uIHNpbXBsZVNlc3Npb24sIGJvb2xlYW4gcm9sbGJhY2spIHsKLSAgICAgICAgdHJ5IHsgICAgICAgIAorICAgICAgICB0cnkgewogICAgICAgICAvL0Nvbm5lY3Rpb24gb3BlbmVkIGFuZCBjbG9zZWQgd2l0aGluIHRyYW5zYWN0aW9uCiAgICAgICAgIC8vbm9uLXhhIHJlc291cmNlCiAgICAgICAgIGlzWEEgPSBmYWxzZTsKQEAgLTkxLDggKzkxLDggQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3QxIHJvbGxiYWNrPSIgKyByb2xsYmFjayArICIgKHhhLiBjb24gb3BlbmVkIGNsb3NlZCB3aXRoaW4gdHgpIDogIiwgc3RhdC5GQUlMICk7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vQ29ubmVjdGlvbiBvcGVuZWQgd2l0aGluIHRyYW5zYWN0aW9uIAorCisgICAgICAgIC8vQ29ubmVjdGlvbiBvcGVuZWQgd2l0aGluIHRyYW5zYWN0aW9uCiAgICAgICAgIC8vYnV0IGNsb3NlZCBhZnRlciB0cmFuc2FjdGlvbgogICAgICAgICBpc1hBID0gZmFsc2U7CiAgICAgICAgIC8vbm9uLXhhIHJlc291cmNlCkBAIC0xMDksMTYgKzEwOSwxNiBAQAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDIgcm9sbGJhY2s9IiArIHJvbGxiYWNrICsgIiAoeGEuIGNvbiBvcGVuZWQgY2xvc2VkIGFmdGVyIHR4KSA6ICIsIHN0YXQuRkFJTCApOwogICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgLy9YQSBhbmQgTm9uLVhBIHJlc291cmNlIHdpdGhpbiBzYW1lIHRyYW5zYWN0aW9uCiAgICAgICAgIC8vbm9uLXhhIHJlc291cmNlIGFuZCB4YSAgcmVzb3VyY2UgdG9nZXRoZXIKICAgICAgICAgaWYgKCBzaW1wbGVTZXNzaW9uLnRlc3QzKHJvbGxiYWNrKSApIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3QzIHJvbGxiYWNrPSIgKyByb2xsYmFjayArICIgKHhhICBub24teGEgd2l0aGluIHNhbWUgdHgpIDogIiwgc3RhdC5QQVNTICk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0MyByb2xsYmFjaz0iICsgcm9sbGJhY2sgKyAiICh4YSAgbm9uLXhhIHdpdGhpbiBzYW1lIHR4KSA6ICIsIHN0YXQuRkFJTCApOwotICAgICAgICB9IAotCX1jYXRjaChFeGNlcHRpb24gZXgpIHsKLQkJZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQorICAgICAgICB9CisgICAgfWNhdGNoKEV4Y2VwdGlvbiBleCkgeworICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9wb29saW5nL2Rlc2NyaXB0b3IvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3Bvb2xpbmcvZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCA0Nzk0OTcwLi45NjY2NGVhIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3Bvb2xpbmcvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3Bvb2xpbmcvZGVzY3JpcHRvci9lamItamFyLnhtbApAQCAtNjQsNiArNjQsNiBAQAogICAgICAgPHRyYW5zLWF0dHJpYnV0ZT5SZXF1aXJlZDwvdHJhbnMtYXR0cmlidXRlPgogICAgIDwvY29udGFpbmVyLXRyYW5zYWN0aW9uPgogICA8L2Fzc2VtYmx5LWRlc2NyaXB0b3I+Ci0gICAgICAKKwogPC9lamItamFyPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3Bvb2xpbmcvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3Bvb2xpbmcvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKaW5kZXggY2RiMDIyOC4uYTRjYTRiNyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9wb29saW5nL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcG9vbGluZy9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbApAQCAtMjcsMTUgKzI3LDE1IEBACiAgICAgICA8am5kaS1uYW1lPmNvbS5zdW4uczFhc2Rldi5qZGJjLnBvb2xpbmcuZWpiLlNpbXBsZVNlc3Npb25Ib21lPC9qbmRpLW5hbWU+CiAgICAgICA8cmVzb3VyY2UtcmVmPgogICAgICAgICA8cmVzLXJlZi1uYW1lPkRhdGFTb3VyY2U8L3Jlcy1yZWYtbmFtZT4KLQk8am5kaS1uYW1lPmpkYmMvbm9ueGFyZXNvdXJjZTwvam5kaS1uYW1lPgorICAgIDxqbmRpLW5hbWU+amRiYy9ub254YXJlc291cmNlPC9qbmRpLW5hbWU+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KICAgICAgIDxyZXNvdXJjZS1yZWY+CiAgICAgICAgIDxyZXMtcmVmLW5hbWU+Q29udGFpbmVyRGF0YVNvdXJjZTwvcmVzLXJlZi1uYW1lPgotCTxqbmRpLW5hbWU+amRiYy9ub254YXJlc291cmNlLWNvbnRhaW5lcjwvam5kaS1uYW1lPgorICAgIDxqbmRpLW5hbWU+amRiYy9ub254YXJlc291cmNlLWNvbnRhaW5lcjwvam5kaS1uYW1lPgogICAgICAgPC9yZXNvdXJjZS1yZWY+CiAgICAgICA8cmVzb3VyY2UtcmVmPgogICAgICAgICA8cmVzLXJlZi1uYW1lPlhBRGF0YVNvdXJjZTwvcmVzLXJlZi1uYW1lPgotCTxqbmRpLW5hbWU+amRiYy94YXJlc291cmNlPC9qbmRpLW5hbWU+CisgICAgPGpuZGktbmFtZT5qZGJjL3hhcmVzb3VyY2U8L2puZGktbmFtZT4KICAgICAgIDwvcmVzb3VyY2UtcmVmPgogICAgIDwvZWpiPgogICA8L2VudGVycHJpc2UtYmVhbnM+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3Bvb2xpbmcvZWpiL1NpbXBsZVNlc3Npb25CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3Bvb2xpbmcvZWpiL1NpbXBsZVNlc3Npb25CZWFuLmphdmEKaW5kZXggODY4ODk3NS4uZDIwZGQ2ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9wb29saW5nL2VqYi9TaW1wbGVTZXNzaW9uQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcG9vbGluZy9lamIvU2ltcGxlU2Vzc2lvbkJlYW4uamF2YQpAQCAtMzQsNjIgKzM0LDYyIEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRhYmxlTmFtZSA9ICJDT0ZGRUUiOwogICAgIHByaXZhdGUgSW5pdGlhbENvbnRleHQgaWM7CiAgICAgcHJpdmF0ZSBEYXRhU291cmNlIGRzOwotICAgIHByaXZhdGUgRGF0YVNvdXJjZSB4YWRzOyAKKyAgICBwcml2YXRlIERhdGFTb3VyY2UgeGFkczsKICAgICBwcml2YXRlIERhdGFTb3VyY2UgY29udGRzOwogICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNYQT1mYWxzZTsKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBjdHh0KSB7CiAgICAgICAgIHRoaXMuY29udGV4dCA9IGN0eHQ7Ci0JdHJ5IHsKLQkgICAgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkgICAgZHMgPSAoRGF0YVNvdXJjZSlpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZSIpOwotCSAgICB4YWRzID0gKERhdGFTb3VyY2UpaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L1hBRGF0YVNvdXJjZSIpOwotCSAgICBjb250ZHMgPSAoRGF0YVNvdXJjZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L0NvbnRhaW5lckRhdGFTb3VyY2UiKTsKLQl9IGNhdGNoKCBFeGNlcHRpb24gbmUgKSB7Ci0JICAgIG5lLnByaW50U3RhY2tUcmFjZSgpOwotCX0KKyAgICB0cnkgeworICAgICAgICBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgICAgICBkcyA9IChEYXRhU291cmNlKWljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7CisgICAgICAgIHhhZHMgPSAoRGF0YVNvdXJjZSlpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvWEFEYXRhU291cmNlIik7CisgICAgICAgIGNvbnRkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvQ29udGFpbmVyRGF0YVNvdXJjZSIpOworICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBuZSApIHsKKyAgICAgICAgbmUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIHRlc3QxKGJvb2xlYW4gaXNYYSwgYm9vbGVhbiByb2xsYmFjaykgewotCWJvb2xlYW4gcGFzc2VkID0gZmFsc2U7Ci0JdGhpcy5pc1hBID0gaXNYYTsKLQl0aGlzLnJvbGxiYWNrID0gcm9sbGJhY2s7Ci0JRGF0YVNvdXJjZSBkcyA9IG51bGw7Ci0JaWYoaXNYQSkgewotCSAgICBkcyA9IHRoaXMueGFkczsKLQl9IGVsc2UgewotCSAgICBkcyA9IHRoaXMuZHM7Ci0JfQorICAgIGJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CisgICAgdGhpcy5pc1hBID0gaXNYYTsKKyAgICB0aGlzLnJvbGxiYWNrID0gcm9sbGJhY2s7CisgICAgRGF0YVNvdXJjZSBkcyA9IG51bGw7CisgICAgaWYoaXNYQSkgeworICAgICAgICBkcyA9IHRoaXMueGFkczsKKyAgICB9IGVsc2UgeworICAgICAgICBkcyA9IHRoaXMuZHM7CisgICAgfQogICAgICAgICBVc2VyVHJhbnNhY3Rpb24gdXQgPSBudWxsOwogICAgICAgICB0cnkgewotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGNyZWF0ZVRhYmxlKGRzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpbnQgY291bnQxID0gZ2V0Q291bnQoZHMpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjb3VudDEgOiAiICsgY291bnQxKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICB1dCA9IChVc2VyVHJhbnNhY3Rpb24pIGNvbnRleHQuZ2V0VXNlclRyYW5zYWN0aW9uKCk7CiAgICAgICAgICAgICB1dC5iZWdpbigpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGZvcihpbnQgaT0wOyBpPCBjb3VudDsgaSsrKQogICAgICAgICAgICAgICAgIGluc2VydFJvdyhkcyk7CiAgICAgICAgICAgICBpZihyb2xsYmFjaykKICAgICAgICAgICAgICAgICB1dC5yb2xsYmFjaygpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHV0LmNvbW1pdCgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGludCBjb3VudDI9Z2V0Q291bnQoZHMpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY291bnQyIDogIiArIGNvdW50Mik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaW50IGRpZmYgPSBjb3VudDIgLSBjb3VudDE7CiAgICAgICAgICAgICBpZigoIGRpZmYgPT0gY291bnQgJiYgIXJvbGxiYWNrKSB8fCAoZGlmZiA9PSAwICYmIHJvbGxiYWNrKSkKICAgICAgICAgICAgICAgICBwYXNzZWQgPSB0cnVlOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHBhc3NlZCA9IGZhbHNlOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSl7CiAgICAgICAgICAgICBwYXNzZWQgPSBmYWxzZTsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CkBAIC0xMDUsNTEgKzEwNSw1MSBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfTsKLQlyZXR1cm4gcGFzc2VkOwotICAgICAgICAKKyAgICByZXR1cm4gcGFzc2VkOworCiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDIoYm9vbGVhbiBpc1hhLCBib29sZWFuIHJvbGxiYWNrKSB7Ci0JYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKLQl0aGlzLmlzWEEgPSBpc1hhOwotCXRoaXMucm9sbGJhY2sgPSByb2xsYmFjazsKLQlEYXRhU291cmNlIGRzID0gbnVsbDsKLQlpZihpc1hBKSB7Ci0JICAgIGRzID0gdGhpcy54YWRzOwotCX0gZWxzZSB7Ci0JICAgIGRzID0gdGhpcy5kczsKLQl9CisgICAgYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKKyAgICB0aGlzLmlzWEEgPSBpc1hhOworICAgIHRoaXMucm9sbGJhY2sgPSByb2xsYmFjazsKKyAgICBEYXRhU291cmNlIGRzID0gbnVsbDsKKyAgICBpZihpc1hBKSB7CisgICAgICAgIGRzID0gdGhpcy54YWRzOworICAgIH0gZWxzZSB7CisgICAgICAgIGRzID0gdGhpcy5kczsKKyAgICB9CiAgICAgICAgIFVzZXJUcmFuc2FjdGlvbiB1dCA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb25uZWN0aW9uW10gY29uOwogCiAgICAgICAgICAgICBjcmVhdGVUYWJsZShkcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaW50IGNvdW50MSA9IGdldENvdW50KGRzKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY291bnQxIDogIiArIGNvdW50MSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgdXQgPSAoVXNlclRyYW5zYWN0aW9uKSBjb250ZXh0LmdldFVzZXJUcmFuc2FjdGlvbigpOwogICAgICAgICAgICAgdXQuYmVnaW4oKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBjb24gPSBvcGVuQ29ubmVjdGlvbnMoZHMsIGNvdW50KTsKICAgICAgICAgICAgIGluc2VydFJvdyhjb24pOwogICAgICAgICAgICAgY2xvc2VDb25uZWN0aW9ucyhjb24pOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmKHJvbGxiYWNrKQogICAgICAgICAgICAgICAgIHV0LnJvbGxiYWNrKCk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgdXQuY29tbWl0KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaW50IGNvdW50Mj1nZXRDb3VudChkcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjb3VudDIgOiAiICsgY291bnQyKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpbnQgZGlmZiA9IGNvdW50MiAtIGNvdW50MTsKICAgICAgICAgICAgIGlmKCggZGlmZiA9PSBjb3VudCAmJiAhcm9sbGJhY2spIHx8IChkaWZmID09IDAgJiYgcm9sbGJhY2spKQogICAgICAgICAgICAgICAgIHBhc3NlZCA9IHRydWU7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcGFzc2VkID0gZmFsc2U7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKXsKICAgICAgICAgICAgIHBhc3NlZCA9IGZhbHNlOwogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTE2NSw1MiArMTY1LDUyIEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9Ci0JcmV0dXJuIHBhc3NlZDsKKyAgICByZXR1cm4gcGFzc2VkOwogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIHRlc3QzKGJvb2xlYW4gcm9sbGJhY2spIHsKLQlib29sZWFuIHBhc3NlZCA9IGZhbHNlOwotCXRoaXMucm9sbGJhY2sgPSByb2xsYmFjazsKKyAgICBib29sZWFuIHBhc3NlZCA9IGZhbHNlOworICAgIHRoaXMucm9sbGJhY2sgPSByb2xsYmFjazsKICAgICAgICAgVXNlclRyYW5zYWN0aW9uIHV0ID0gbnVsbDsKLQlEYXRhU291cmNlIGRzMSA9IHRoaXMuZHM7Ci0JRGF0YVNvdXJjZSBkczIgPSB0aGlzLnhhZHM7CisgICAgRGF0YVNvdXJjZSBkczEgPSB0aGlzLmRzOworICAgIERhdGFTb3VyY2UgZHMyID0gdGhpcy54YWRzOwogICAgICAgICB0cnkgewotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlzWEEgPSBmYWxzZTsKICAgICAgICAgICAgIGNyZWF0ZVRhYmxlKGRzMSk7CiAgICAgICAgICAgICBpc1hBID0gdHJ1ZTsKICAgICAgICAgICAgIGNyZWF0ZVRhYmxlKGRzMik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaXNYQSA9IGZhbHNlOwogICAgICAgICAgICAgaW50IGNvdW50MSA9IGdldENvdW50KGRzMSk7CiAgICAgICAgICAgICBpc1hBID0gdHJ1ZTsKICAgICAgICAgICAgIGludCBjb3VudDMgPSBnZXRDb3VudChkczIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjb3VudDEgOiAiICsgY291bnQxKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY291bnQzIDogIiArIGNvdW50Myk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgdXQgPSAoVXNlclRyYW5zYWN0aW9uKSBjb250ZXh0LmdldFVzZXJUcmFuc2FjdGlvbigpOwogICAgICAgICAgICAgdXQuYmVnaW4oKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpc1hBID0gZmFsc2U7CiAgICAgICAgICAgICBmb3IoaW50IGk9MDsgaTwgY291bnQ7IGkrKykKICAgICAgICAgICAgICAgICBpbnNlcnRSb3coZHMxKTsKICAgICAgICAgICAgIGlzWEEgPSB0cnVlOwogICAgICAgICAgICAgZm9yKGludCBpPTA7IGk8IGNvdW50OyBpKyspCiAgICAgICAgICAgICAgICAgaW5zZXJ0Um93KGRzMik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYocm9sbGJhY2spCiAgICAgICAgICAgICAgICAgdXQucm9sbGJhY2soKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICB1dC5jb21taXQoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpc1hBID0gZmFsc2U7CiAgICAgICAgICAgICBpbnQgY291bnQyPWdldENvdW50KGRzMSk7CiAgICAgICAgICAgICBpc1hBID0gdHJ1ZTsKICAgICAgICAgICAgIGludCBjb3VudDQ9Z2V0Q291bnQoZHMyKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNvdW50MiA6ICIgKyBjb3VudDIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjb3VudDQgOiAiICsgY291bnQ0KTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpbnQgZGlmZjEgPSBjb3VudDIgLSBjb3VudDE7CiAgICAgICAgICAgICBpbnQgZGlmZjIgPSBjb3VudDQgLSBjb3VudDM7CiAgICAgICAgICAgICBpZigoKCBkaWZmMSA9PSBjb3VudCAmJiAhcm9sbGJhY2spIHx8IChkaWZmMSA9PSAwICYmIHJvbGxiYWNrKSkKQEAgLTIxOCw3ICsyMTgsNyBAQAogICAgICAgICAgICAgICAgIHBhc3NlZD10cnVlOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHBhc3NlZD1mYWxzZTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpewogICAgICAgICAgICAgcGFzc2VkPWZhbHNlOwogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTIzNCwyMSArMjM0LDIxIEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9OwotICAgICAgIHJldHVybiBwYXNzZWQ7IAorICAgICAgIHJldHVybiBwYXNzZWQ7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIGNyZWF0ZVRhYmxlKGZpbmFsIERhdGFTb3VyY2UgZHMpIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgICBTdHJpbmcgdGFibGVOYW1lOwogICAgICAgICBpZihpc1hBKQogICAgICAgICAgICAgdGFibGVOYW1lID0gIkNPRkZFRV9YQSI7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHRhYmxlTmFtZSA9ICJDT0ZGRUUiOwotICAgICAgICAKKwogICAgICAgICBDb25uZWN0aW9uIGNvbjsKICAgICAgICAgU3RhdGVtZW50IHN0bXQ7CiAgICAgICAgIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oInNjb3R0IiwgInRpZ2VyIik7CiAgICAgICAgIHN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeXsKICAgICAgICAgICAgIHN0bXQuZXhlY3V0ZVVwZGF0ZSgiZHJvcCB0YWJsZSAiICsgdGFibGVOYW1lKTsKICAgICAgICAgfWNhdGNoKEV4Y2VwdGlvbiBleCl7CkBAIC0yNTgsNyArMjU4LDcgQEAKICAgICAgICAgc3RtdC5jbG9zZSgpOwogICAgICAgICBjb24uY2xvc2UoKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIGludCBnZXRDb3VudChmaW5hbCBEYXRhU291cmNlIGRzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgICAgU3RyaW5nIHRhYmxlTmFtZTsKICAgICAgICAgaWYoaXNYQSkKQEAgLTI3OCw3ICsyNzgsNyBAQAogICAgICAgICBjb24uY2xvc2UoKTsKICAgICAgICAgcmV0dXJuIGNvdW50OwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBpbnNlcnRSb3coZmluYWwgRGF0YVNvdXJjZSBkcykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICAgIFN0cmluZyB0YWJsZU5hbWU7CiAgICAgICAgIGlmKGlzWEEpCkBAIC0yOTMsNyArMjkzLDcgQEAKICAgICAgICAgc3RtdC5jbG9zZSgpOwogICAgICAgICBjb24uY2xvc2UoKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgaW5zZXJ0Um93KGZpbmFsIENvbm5lY3Rpb25bXSBjb24pIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgICBTdHJpbmcgdGFibGVOYW1lOwogICAgICAgICBpZihpc1hBKQpAQCAtMzA0LDk4ICszMDQsOTggQEAKICAgICAgICAgZm9yKGludCBpPTA7IGkgPCBjb24ubGVuZ3RoOyBpKyspewogICAgICAgICAgICAgc3RtdCA9IGNvbltpXS5jcmVhdGVTdGF0ZW1lbnQoKTsKICAgICAgICAgICAgIHN0bXQuZXhlY3V0ZVVwZGF0ZSgiSU5TRVJUIElOVE8gIiArIHRhYmxlTmFtZSArICIgdmFsdWVzICgnQ09GRkVFJywgMTAwKSIpOwotCSAgICBzdG10LmNsb3NlKCk7CisgICAgICAgIHN0bXQuY2xvc2UoKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKLSAgIAorCisKICAgICBwcml2YXRlIHZvaWQgcHJpbnRDb25uZWN0aW9uKGZpbmFsIERhdGFTb3VyY2UgZHMpIHRocm93cyBTUUxFeGNlcHRpb257CiAgICAgICAgIGNvbS5zdW4uYXBwc2Vydi5qZGJjLkRhdGFTb3VyY2UgZHNUeXBlZCA9IChjb20uc3VuLmFwcHNlcnYuamRiYy5EYXRhU291cmNlKSBkczsKICAgICAgICAgQ29ubmVjdGlvbiB3cmFwcGVyID0gZHNUeXBlZC5nZXRDb25uZWN0aW9uKCJzY290dCIsICJ0aWdlciIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3Rpb24gdHlwZSA6ICIgKyBkc1R5cGVkLmdldENvbm5lY3Rpb24od3JhcHBlcikpOwogICAgICAgICB3cmFwcGVyLmNsb3NlKCk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gb3BlbkFuZENsb3NlQ29ubmVjdGlvbihpbnQgY291bnQpIHsKLQlib29sZWFuIHN0YXR1cyA9IHRydWU7Ci0JRGF0YVNvdXJjZSBkcyA9IGNvbnRkczsKKyAgICBib29sZWFuIHN0YXR1cyA9IHRydWU7CisgICAgRGF0YVNvdXJjZSBkcyA9IGNvbnRkczsKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgY29tLnN1bi5hcHBzZXJ2LmpkYmMuRGF0YVNvdXJjZSBkc1R5cGVkID0gKGNvbS5zdW4uYXBwc2Vydi5qZGJjLkRhdGFTb3VyY2UpIGRzOwotCSAgICBIYXNoU2V0PFN0cmluZz4gY29ubmVjdGlvbnMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CisgICAgICAgIEhhc2hTZXQ8U3RyaW5nPiBjb25uZWN0aW9ucyA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKICAgICAgICAgICAgIENvbm5lY3Rpb24gY29uOwotCSAgICBTdHJpbmcgY29uVHlwZTsKLQkgICAgaW50IGkgPSAwOworICAgICAgICBTdHJpbmcgY29uVHlwZTsKKyAgICAgICAgaW50IGkgPSAwOwogICAgICAgICAgICAgZm9yKDsgaSA8IGNvdW50OyBpKyspewogICAgICAgICAgICAgICAgIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQkJY29uVHlwZSA9IGRzVHlwZWQuZ2V0Q29ubmVjdGlvbihjb24pLnRvU3RyaW5nKCk7Ci0gICAgICAgIAlTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3Rpb24gdHlwZSA6ICIgKyBjb25UeXBlKTsKKyAgICAgICAgY29uVHlwZSA9IGRzVHlwZWQuZ2V0Q29ubmVjdGlvbihjb24pLnRvU3RyaW5nKCk7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3Rpb24gdHlwZSA6ICIgKyBjb25UeXBlKTsKICAgICAgICAgICAgICAgICBjb24uY2xvc2UoKTsKLQkJaWYoIWNvbm5lY3Rpb25zLmFkZChjb25UeXBlKSl7Ci0JCQlzdGF0dXMgPSBmYWxzZTsKLQkJCWJyZWFrOwotCQl9CisgICAgICAgIGlmKCFjb25uZWN0aW9ucy5hZGQoY29uVHlwZSkpeworICAgICAgICAgICAgc3RhdHVzID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgIAkgICAgU3lzdGVtLm91dC5wcmludGxuKCJUb3RhbCBjb25uZWN0aW9uIHJlcXVlc3RlZCA6ICAiICsgY291bnQpOwotICAgICAgIAkgICAgU3lzdGVtLm91dC5wcmludGxuKCJUb3RhbCBjb25uZWN0aW9uIGNyZWF0ZWQgOiAgIiArIGkpOwotICAgICAgIAkgICAgU3lzdGVtLm91dC5wcmludGxuKCJUb3RhbCBudW1iZXIgb2YgdW5pcXVlIGNvbm5lY3Rpb24gOiAgIiArIGNvbm5lY3Rpb25zLnNpemUoKSk7CisgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRvdGFsIGNvbm5lY3Rpb24gcmVxdWVzdGVkIDogICIgKyBjb3VudCk7CisgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRvdGFsIGNvbm5lY3Rpb24gY3JlYXRlZCA6ICAiICsgaSk7CisgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRvdGFsIG51bWJlciBvZiB1bmlxdWUgY29ubmVjdGlvbiA6ICAiICsgY29ubmVjdGlvbnMuc2l6ZSgpKTsKICAgICAgICAgfWNhdGNoKEV4Y2VwdGlvbiBleCl7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotCXJldHVybiBzdGF0dXM7CisgICAgcmV0dXJuIHN0YXR1czsKICAgICB9Ci0gICAgCi0gICAgcHVibGljIGJvb2xlYW4gb3Blbk1heENvbm5lY3Rpb25zKGludCBjb3VudCkgewotCWJvb2xlYW4gc3RhdHVzID0gZmFsc2U7Ci0JRGF0YVNvdXJjZSBkcyA9IGNvbnRkczsKLSAgICAgICAgQ29ubmVjdGlvbltdIGNvbiA9IG5ldyBDb25uZWN0aW9uW2NvdW50XTsKLQlpbnQgaSA9IDA7Ci0gICAgICAgIGZvcig7IGkgPCBjb3VudDsgaSsrKXsKLQkgICB0cnl7Ci0gICAgICAgICAgIAljb25baV0gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JICAgfWNhdGNoKFNRTEV4Y2VwdGlvbiBleCl7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiVW5hYmxlIHRvIGNyZWF0ZSBtYXggY29ubmVjdGlvbnMiKTsKLQkJc3RhdHVzID0gZmFsc2U7Ci0JICAgfQotCX0KIAotCWlmKGkgPT0gIGNvdW50KXsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJBYmxlIHRvIGNyZWF0ZSBtYXggY29ubmVjdGlvbnMiKTsKLQkJc3RhdHVzPXRydWU7Ci0JCXRyeXsKLQkJCWRzLmdldENvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgICAgICAJU3lzdGVtLm91dC5wcmludGxuKCJBYmxlIHRvIGNyZWF0ZSBiZXlvbmQgbWF4IGNvbm5lY3Rpb25zIik7Ci0gICAgICAgICAgICAgICAgCXN0YXR1cz1mYWxzZTsKLQkJfWNhdGNoKFNRTEV4Y2VwdGlvbiBleCl7Ci0gICAgICAgICAgICAgICAgCVN5c3RlbS5vdXQucHJpbnRsbigiVW5hYmxlIHRvIGNyZWF0ZSBiZXlvbmQgbWF4IGNvbm5lY3Rpb25zIik7Ci0JCSAgICAgICAgc3RhdHVzPXRydWU7Ci0gICAgICAgICAgIAl9Ci0JfQotICAgICAgICAKKyAgICBwdWJsaWMgYm9vbGVhbiBvcGVuTWF4Q29ubmVjdGlvbnMoaW50IGNvdW50KSB7CisgICAgYm9vbGVhbiBzdGF0dXMgPSBmYWxzZTsKKyAgICBEYXRhU291cmNlIGRzID0gY29udGRzOworICAgICAgICBDb25uZWN0aW9uW10gY29uID0gbmV3IENvbm5lY3Rpb25bY291bnRdOworICAgIGludCBpID0gMDsKKyAgICAgICAgZm9yKDsgaSA8IGNvdW50OyBpKyspeworICAgICAgIHRyeXsKKyAgICAgICAgICAgICAgIGNvbltpXSA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICB9Y2F0Y2goU1FMRXhjZXB0aW9uIGV4KXsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmFibGUgdG8gY3JlYXRlIG1heCBjb25uZWN0aW9ucyIpOworICAgICAgICBzdGF0dXMgPSBmYWxzZTsKKyAgICAgICB9CisgICAgfQorCisgICAgaWYoaSA9PSAgY291bnQpeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFibGUgdG8gY3JlYXRlIG1heCBjb25uZWN0aW9ucyIpOworICAgICAgICBzdGF0dXM9dHJ1ZTsKKyAgICAgICAgdHJ5eworICAgICAgICAgICAgZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFibGUgdG8gY3JlYXRlIGJleW9uZCBtYXggY29ubmVjdGlvbnMiKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzPWZhbHNlOworICAgICAgICB9Y2F0Y2goU1FMRXhjZXB0aW9uIGV4KXsKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmFibGUgdG8gY3JlYXRlIGJleW9uZCBtYXggY29ubmVjdGlvbnMiKTsKKyAgICAgICAgICAgICAgICBzdGF0dXM9dHJ1ZTsKKyAgICAgICAgICAgICAgIH0KKyAgICB9CisKICAgICAgICAgZm9yKDsgaSA+IDA7IGktLSl7Ci0JICAgdHJ5ewotICAgICAgICAgICAgCWNvbltpIC0gMV0uY2xvc2UoKTsKLQkgICB9Y2F0Y2goU1FMRXhjZXB0aW9uIGV4KXsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJVbmFibGUgdG8gY2xvc2UgY29ubmVjdGlvbiIpOwotCSAgIH0KLQl9Ci0JcmV0dXJuIHN0YXR1czsKKyAgICAgICB0cnl7CisgICAgICAgICAgICAgICAgY29uW2kgLSAxXS5jbG9zZSgpOworICAgICAgIH1jYXRjaChTUUxFeGNlcHRpb24gZXgpeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuYWJsZSB0byBjbG9zZSBjb25uZWN0aW9uIik7CisgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc3RhdHVzOwogICAgIH0KIAogICAgIHByaXZhdGUgQ29ubmVjdGlvbltdIG9wZW5Db25uZWN0aW9ucyhEYXRhU291cmNlIGRzLCBpbnQgY291bnQpIHRocm93cyBOYW1pbmdFeGNlcHRpb24sIFNRTEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIENvbm5lY3Rpb25bXSBjb24gPSBuZXcgQ29ubmVjdGlvbltjb3VudF07CiAgICAgICAgIGZvcihpbnQgaT0wOyBpIDwgY291bnQ7IGkrKykKICAgICAgICAgICAgIGNvbltpXSA9IGRzLmdldENvbm5lY3Rpb24oInNjb3R0IiwgInRpZ2VyIik7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBjb247CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIGNsb3NlQ29ubmVjdGlvbnMoQ29ubmVjdGlvbltdIGNvbikgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICAgIGZvcihpbnQgaT0wOyBpIDwgY291bnQ7IGkrKykKICAgICAgICAgICAgIGNvbltpXS5jbG9zZSgpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7fQogICAgIHB1YmxpYyB2b2lkIGVqYlN0b3JlKCkge30KICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7fQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9wb29saW5nL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcG9vbGluZy9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggYjIyN2NhYy4uNDJkNWExNiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9wb29saW5nL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3Bvb2xpbmcvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDkgKzEsOSBAQAotRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIOw0KLQ0KLUNSRUFURSBUQUJMRSBUWExFVkVMU1dJVENIICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQotSU5TRVJUIElOVE8gVFhMRVZFTFNXSVRDSCBWQUxVRVMoMSwgJ3d4eXonKTsNCi1JTlNFUlQgSU5UTyBUWExFVkVMU1dJVENIIFZBTFVFUygyLCAncHFycycpOw0KK0Ryb3AgdGFibGUgVFhMRVZFTFNXSVRDSDsKKworQ1JFQVRFIFRBQkxFIFRYTEVWRUxTV0lUQ0ggKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQorKTsKKworSU5TRVJUIElOVE8gVFhMRVZFTFNXSVRDSCBWQUxVRVMoMSwgJ3d4eXonKTsKK0lOU0VSVCBJTlRPIFRYTEVWRUxTV0lUQ0ggVkFMVUVTKDIsICdwcXJzJyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3Bvb2xpbmcvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcG9vbGluZy9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IDBjMTI0MmYuLmQxMWExMTUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcG9vbGluZy9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcG9vbGluZy9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xLDIgKzEsMiBAQAotRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIOw0KLURyb3AgdGFibGUgVFhMRVZFTFNXSVRDSDI7DQorRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIOworRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIMjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9idWlsZC54bWwKaW5kZXggYWZmNGVkZC4uZTEzYTZkOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9idWlsZC54bWwKQEAgLTI5LDkgKzI5LDkgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYWxsIj4KICAgICAgICAgPHJlY29yZCBuYW1lPSJyZWNvbmZpZy5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiIC8+Ci0JPGFudCBkaXI9Im1heHBvb2xzaXplIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJwb29sYXV0aCIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0icG9vbGF1dGgtMiIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0ibWF4cG9vbHNpemUiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9InBvb2xhdXRoIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJwb29sYXV0aC0yIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8cmVjb3JkIG5hbWU9InJlY29uZmlnLm91dHB1dCIgYWN0aW9uPSJzdG9wIiAvPgogICAgIDwvdGFyZ2V0PgogCkBAIC02MCw5ICs2MCw5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIHJlY29uZmlnIHRlc3RzKQotCTwvZWNobz4KKyAgICA8ZWNobz4KKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIHJlY29uZmlnIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvbWF4cG9vbHNpemUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvbWF4cG9vbHNpemUvYnVpbGQucHJvcGVydGllcwppbmRleCBiMDk2ZDhjLi4xNWYyMjNkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL21heHBvb2xzaXplL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9tYXhwb29sc2l6ZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOSArMTUsMTkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImpkYmMtcmVjb25maWctbWF4cG9vbHNpemUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJtYXhwb29sc2l6ZS1wb29sTmFtZSIgdmFsdWU9ImpkYmMtbWF4cG9vbHNpemUtcG9vbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9tYXhwb29sc2l6ZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL21heHBvb2xzaXplL2J1aWxkLnhtbAppbmRleCBlOGIyYTI3Li43Yzc2NWEwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL21heHBvb2xzaXplL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL21heHBvb2xzaXplL2J1aWxkLnhtbApAQCAtMjcsNyArMjcsNyBAQAogXT4KIAogPHByb2plY3QgbmFtZT0ibWl4IiBkZWZhdWx0PSJ1c2FnZSIgYmFzZWRpcj0iLiI+Ci0gICAgCisKICAgICAmY29tbW9uU2V0dXA7CiAgICAgJmNvbW1vbkJ1aWxkOwogICAgICZydW47CkBAIC00Miw3ICs0Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC01NCwxMyArNTQsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqL1NpbXBsZUJNUC5jbGFzcywgKiovU2ltcGxlQk1QSG9tZS5jbGFzcywqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1jb25ucG9vbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSIke21heHBvb2xzaXplLXBvb2xOYW1lfSIvPgpAQCAtNjgsMzIgKzY4LDMyIEBACiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iJHttYXhwb29sc2l6ZS1wb29sTmFtZX0iLz4KLQk8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9tYXhwb29sc2l6ZSIvPgorICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL21heHBvb2xzaXplIi8+CiAgICAgICA8L2FudGNhbGw+CiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iJHttYXhwb29sc2l6ZS1wb29sTmFtZX0teGEiLz4KLQk8cGFyYW0gbmFtZT0iZGIuY2xhc3MiIHZhbHVlPSJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuQ2xpZW50WEFEYXRhU291cmNlIi8+Ci0JPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UudHlwZSIgdmFsdWU9ImphdmF4LnNxbC5YQURhdGFTb3VyY2UiLz4KKyAgICA8cGFyYW0gbmFtZT0iZGIuY2xhc3MiIHZhbHVlPSJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuQ2xpZW50WEFEYXRhU291cmNlIi8+CisgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UudHlwZSIgdmFsdWU9ImphdmF4LnNxbC5YQURhdGFTb3VyY2UiLz4KICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSIke21heHBvb2xzaXplLXBvb2xOYW1lfS14YSIvPgotCTxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL21heHBvb2xzaXplLXhhIi8+CisgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvbWF4cG9vbHNpemUteGEiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAKLSAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDwhLS0gc2V0IHRoZSBtYXhwb29sc2l6ZSB0byAxMCBiZWZvcmUgcnVubmluZyAtLT4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgotCTxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7bWF4cG9vbHNpemUtcG9vbE5hbWV9Lm1heF9wb29sX3NpemU9MTAiLz4KKyAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC4ke21heHBvb2xzaXplLXBvb2xOYW1lfS5tYXhfcG9vbF9zaXplPTEwIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8IS0tIGFsc28gc2V0IHRoZSBtYXgtd2FpdC10aW1lIHRvIGEgc21hbGxlciB2YWx1ZSBzbyB0aGUgdGVzdHMgZXhlY3V0ZXMgZmFzdGVyIC0tPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+Ci0JPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuJHttYXhwb29sc2l6ZS1wb29sTmFtZX0ubWF4X3dhaXRfdGltZV9pbl9taWxsaXM9MTAwMCIvPgorICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7bWF4cG9vbHNpemUtcG9vbE5hbWV9Lm1heF93YWl0X3RpbWVfaW5fbWlsbGlzPTEwMDAiLz4KICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KQEAgLTEwMywyMyArMTAzLDIzIEBACiAgICAgICA8IS0tIHNldCB0aGUgbWF4cG9vbHNpemUgdG8gMTUgLS0+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiLz4KLQk8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC4ke21heHBvb2xzaXplLXBvb2xOYW1lfS5tYXhfcG9vbF9zaXplPTIwIi8+CisgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuJHttYXhwb29sc2l6ZS1wb29sTmFtZX0ubWF4X3Bvb2xfc2l6ZT0yMCIvPgogICAgICAgPC9hbnRjYWxsPgotICAgICAgCisKICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IjIiLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgCisKICAgPCEtLS0gWEEgLS0+CiAgICAgICA8IS0tIHNldCB0aGUgbWF4cG9vbHNpemUgdG8gMTAgYmVmb3JlIHJ1bm5pbmcgLS0+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiLz4KLQk8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC4ke21heHBvb2xzaXplLXBvb2xOYW1lfS14YS5tYXhfcG9vbF9zaXplPTEwIi8+CisgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuJHttYXhwb29sc2l6ZS1wb29sTmFtZX0teGEubWF4X3Bvb2xfc2l6ZT0xMCIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPCEtLSBhbHNvIHNldCB0aGUgbWF4LXdhaXQtdGltZSB0byBhIHNtYWxsZXIgdmFsdWUgc28gdGhlIHRlc3RzIGV4ZWN1dGVzIGZhc3RlciAtLT4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgotCTxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7bWF4cG9vbHNpemUtcG9vbE5hbWV9LXhhLm1heF93YWl0X3RpbWVfaW5fbWlsbGlzPTEwMDAiLz4KKyAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC4ke21heHBvb2xzaXplLXBvb2xOYW1lfS14YS5tYXhfd2FpdF90aW1lX2luX21pbGxpcz0xMDAwIi8+CiAgICAgICA8L2FudGNhbGw+CiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiI+CkBAIC0xMjgsNyArMTI4LDcgQEAKICAgICAgIDwhLS0gc2V0IHRoZSBtYXhwb29sc2l6ZSB0byAxNSAtLT4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgotCTxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7bWF4cG9vbHNpemUtcG9vbE5hbWV9LXhhLm1heF9wb29sX3NpemU9MjAiLz4KKyAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC4ke21heHBvb2xzaXplLXBvb2xOYW1lfS14YS5tYXhfcG9vbF9zaXplPTIwIi8+CiAgICAgICA8L2FudGNhbGw+CiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiI+CkBAIC0xMzYsNyArMTM2LDcgQEAKICAgICAgIDwvYW50Y2FsbD4KIAogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KIApAQCAtMTQ3LDkgKzE0Nyw5IEBACiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamRiYy1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9tYXhwb29sc2l6ZS14YSIvPgotCTxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9IiR7bWF4cG9vbHNpemUtcG9vbE5hbWV9LXhhIi8+CisgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iJHttYXhwb29sc2l6ZS1wb29sTmFtZX0teGEiLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvbWF4cG9vbHNpemUvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9tYXhwb29sc2l6ZS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggNjQ1Y2MxOC4uY2ZlYzI4OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9tYXhwb29sc2l6ZS9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9tYXhwb29sc2l6ZS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI3LDUxICsyNyw1MSBAQAogaW1wb3J0IGphdmEuaW8uKjsKIAogcHVibGljIGNsYXNzIENsaWVudCB7Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmd2KQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLQlTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKLQlTdHJpbmcgdGVzdFN1aXRlID0gIlJlY29uZmlnTWF4UG9vbFNpemUgIjsKKyAgICBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKKyAgICBTdHJpbmcgdGVzdFN1aXRlID0gIlJlY29uZmlnTWF4UG9vbFNpemUgIjsKIAogICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICBPYmplY3Qgb2JqUmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVCTVBIb21lIik7Ci0JU2ltcGxlQk1QSG9tZSBzaW1wbGVCTVBIb21lID0gKFNpbXBsZUJNUEhvbWUpCisgICAgU2ltcGxlQk1QSG9tZSBzaW1wbGVCTVBIb21lID0gKFNpbXBsZUJNUEhvbWUpCiAgICAgICAgIGphdmF4LnJtaS5Qb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqUmVmLCBTaW1wbGVCTVBIb21lLmNsYXNzKTsKIAogICAgICAgICBTaW1wbGVCTVAgc2ltcGxlQk1QID0gc2ltcGxlQk1QSG9tZS5jcmVhdGUoKTsKLQlzdGF0LmFkZERlc2NyaXB0aW9uKCJSZWNvbmZpZyBNYXhQb29sU2l6ZSB0ZXN0cyIpOworICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlJlY29uZmlnIE1heFBvb2xTaXplIHRlc3RzIik7CiAgICAgICAgIC8qCi0JICogVGVzdHMgMSwyIHVzZSBub24teGEgcG9vbCAtIHNvIHRoZSAzcmQgcGFyYW0gInVzZVhBIiBpcyBmYWxzZSAKLQkgKiBUZXN0cyAzLDQgdXNlIHhhIHBvb2wgLSBzbyB0aGUgM3JkIHBhcmFtICJ1c2VYQSIgaXMgdHJ1ZQotCSAqLworICAgICAqIFRlc3RzIDEsMiB1c2Ugbm9uLXhhIHBvb2wgLSBzbyB0aGUgM3JkIHBhcmFtICJ1c2VYQSIgaXMgZmFsc2UKKyAgICAgKiBUZXN0cyAzLDQgdXNlIHhhIHBvb2wgLSBzbyB0aGUgM3JkIHBhcmFtICJ1c2VYQSIgaXMgdHJ1ZQorICAgICAqLwogICAgICAgICBpZiAoIjEiLmVxdWFscyhhcmd2WzBdKSApIHsKICAgICAgICAgICAgIGlmIChzaW1wbGVCTVAudGVzdDEoMTAsIHRydWUsIGZhbHNlICkgKSB7Ci0JICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIiB0ZXN0MSA6ICIsIHN0YXQuUEFTUyk7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIiB0ZXN0MSA6ICIsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewotCSAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyIgdGVzdDEgOiAiLCBzdGF0LkZBSUwpOworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyIgdGVzdDEgOiAiLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKCIyIi5lcXVhbHMoYXJndlswXSkpIHsKLQkgICAgaWYgKHNpbXBsZUJNUC50ZXN0MSgxOSwgZmFsc2UsIGZhbHNlKSApIHsKLQkgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsiIHRlc3QyIDogIiwgc3RhdC5QQVNTKTsKKyAgICAgICAgaWYgKHNpbXBsZUJNUC50ZXN0MSgxOSwgZmFsc2UsIGZhbHNlKSApIHsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsiIHRlc3QyIDogIiwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0JICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIiB0ZXN0MiA6ICIsIHN0YXQuRkFJTCk7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIiB0ZXN0MiA6ICIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoIjMiLmVxdWFscyhhcmd2WzBdKSkgewotCSAgICBpZiAoc2ltcGxlQk1QLnRlc3QxKDEwLCBmYWxzZSwgdHJ1ZSkgKSB7Ci0JICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIiB0ZXN0MyA6ICIsIHN0YXQuUEFTUyk7CisgICAgICAgIGlmIChzaW1wbGVCTVAudGVzdDEoMTAsIGZhbHNlLCB0cnVlKSApIHsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsiIHRlc3QzIDogIiwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0JICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIiB0ZXN0MyA6ICIsIHN0YXQuRkFJTCk7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIiB0ZXN0MyA6ICIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoIjQiLmVxdWFscyhhcmd2WzBdKSkgewotCSAgICBpZiAoc2ltcGxlQk1QLnRlc3QxKDE5LCBmYWxzZSwgdHJ1ZSkgKSB7Ci0JICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIiB0ZXN0NCA6ICIsIHN0YXQuUEFTUyk7CisgICAgICAgIGlmIChzaW1wbGVCTVAudGVzdDEoMTksIGZhbHNlLCB0cnVlKSApIHsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsiIHRlc3Q0IDogIiwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0JICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIiB0ZXN0NCA6ICIsIHN0YXQuRkFJTCk7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIiB0ZXN0NCA6ICIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogCi0JU3lzdGVtLm91dC5wcmludGxuKCJqZGJjIHJlY29uZmlnLW1heHBvb2xzaXplIHN0YXR1czogIik7Ci0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImpkYmMgcmVjb25maWctbWF4cG9vbHNpemUgc3RhdHVzOiAiKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvbWF4cG9vbHNpemUvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvbWF4cG9vbHNpemUvZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCBlN2Q2ZTg4Li45ZDkyMjdlIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL21heHBvb2xzaXplL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9tYXhwb29sc2l6ZS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC02Myw2ICs2Myw2IEBACiAgICAgICA8dHJhbnMtYXR0cmlidXRlPlJlcXVpcmVkPC90cmFucy1hdHRyaWJ1dGU+CiAgICAgPC9jb250YWluZXItdHJhbnNhY3Rpb24+CiAgIDwvYXNzZW1ibHktZGVzY3JpcHRvcj4KLSAgICAgIAorCiA8L2VqYi1qYXI+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvbWF4cG9vbHNpemUvZWpiL1NpbXBsZUJNUC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9tYXhwb29sc2l6ZS9lamIvU2ltcGxlQk1QLmphdmEKaW5kZXggZTJhNzY4ZC4uZDVlOWZhYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9tYXhwb29sc2l6ZS9lamIvU2ltcGxlQk1QLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9tYXhwb29sc2l6ZS9lamIvU2ltcGxlQk1QLmphdmEKQEAgLTIwLDYgKzIwLDYgQEAKIGltcG9ydCBqYXZhLnJtaS4qOwogCiBwdWJsaWMgaW50ZXJmYWNlIFNpbXBsZUJNUCBleHRlbmRzIEVKQk9iamVjdCB7Ci0gICAgcHVibGljIGJvb2xlYW4gdGVzdDEoaW50IG1heFBvb2xTaXplLCBib29sZWFuIGV4cGVjdFRvUGFzcywgYm9vbGVhbiB1c2VYQSApIAorICAgIHB1YmxpYyBib29sZWFuIHRlc3QxKGludCBtYXhQb29sU2l6ZSwgYm9vbGVhbiBleHBlY3RUb1Bhc3MsIGJvb2xlYW4gdXNlWEEgKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9tYXhwb29sc2l6ZS9lamIvU2ltcGxlQk1QQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9tYXhwb29sc2l6ZS9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCmluZGV4IDIwNDkzMTUuLjVjOWMyODEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvbWF4cG9vbHNpemUvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL21heHBvb2xzaXplL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKQEAgLTMyLDEwICszMiwxMCBAQAogICAgIH0KIAogICAgIHB1YmxpYyBJbnRlZ2VyIGVqYkNyZWF0ZSgpIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewotCXJldHVybiBuZXcgSW50ZWdlcigxKTsKKyAgICByZXR1cm4gbmV3IEludGVnZXIoMSk7CiAgICAgfQogCi0gICAgLyoqIAorICAgIC8qKgogICAgICAqIFRoZSBiYXNpYyBzdHJhdGVneSBoZXJlIGlzIHRoYXQgd2UgdHJ5IHRvIGdldCAxIG1vcmUgY29ubmVjdGlvbgogICAgICAqIHRoYW4gdGhlIG1heHBvb2xzaXplLiBUaGlzIHNpbmdsZSBleHRyYSBnZXRDb25uZWN0aW9uIHNob3VsZCBub3QKICAgICAgKiBwYXNzLiBJZiB0aGlzIGhhcHBlbnMsIHRoZSB0ZXN0IGhhcyBwYXNzZWQuCkBAIC00Myw1NiArNDMsNTYgQEAKIAogICAgIHB1YmxpYyBib29sZWFuIHRlc3QxKCBpbnQgbWF4UG9vbFNpemUsIGJvb2xlYW4gdGhyb3dFeGNlcHRpb24sIGJvb2xlYW4gdXNlWEEgKSB7CiAgICAgICAgIHRyeSB7Ci0JICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JICAgIGlmICggdXNlWEEgKSB7Ci0JICAgICAgICBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZV94YSIpOwotCSAgICB9IGVsc2UgewotCSAgICAgICAgZHMgPSAoRGF0YVNvdXJjZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKLQkgICAgfQotCX0gY2F0Y2goIEV4Y2VwdGlvbiBlICkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICByZXR1cm4gZmFsc2U7Ci0JfQotCWJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKLQlDb25uZWN0aW9uW10gY29ubnMgPSBuZXcgQ29ubmVjdGlvblttYXhQb29sU2l6ZV07CisgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgIGlmICggdXNlWEEgKSB7CisgICAgICAgICAgICBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZV94YSIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZHMgPSAoRGF0YVNvdXJjZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKKyAgICAgICAgfQorICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlICkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKKyAgICBDb25uZWN0aW9uW10gY29ubnMgPSBuZXcgQ29ubmVjdGlvblttYXhQb29sU2l6ZV07CiAgICAgICAgIGZvciggaW50IGkgPSAwOyBpIDwgbWF4UG9vbFNpemU7IGkrKyApIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0aHJvd0V4Y2VwdGlvbiBpcyA6ICIgKyB0aHJvd0V4Y2VwdGlvbiApOwotCSAgICB0cnkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIiMjIyMjIyMjR2V0dGluZyBjb25uZWN0aW9uIDogIiArIGkgKTsKLQkgICAgICAgIGNvbm5zW2ldID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCSAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQllLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICAgICAgcmV0dXJuIGZhbHNlOwotCSAgICB9IAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRocm93RXhjZXB0aW9uIGlzIDogIiArIHRocm93RXhjZXB0aW9uICk7CisgICAgICAgIHRyeSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIyMjIyMjIyNHZXR0aW5nIGNvbm5lY3Rpb24gOiAiICsgaSApOworICAgICAgICAgICAgY29ubnNbaV0gPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KIAotCX0gICAgCi0JLy90cnkgZ2V0dGluZyBhbiBleHRyYSBjb25uZWN0aW9uCi0JU3lzdGVtLm91dC5wcmludGxuKCItLS1UcnkgZ2V0dGluZyBleHRyYSBjb25uZWN0aW9uIik7Ci0JQ29ubmVjdGlvbiBjb24gPSBudWxsOwotCXRyeSB7Ci0JICAgIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQl9IGNhdGNoKCBFeGNlcHRpb24gZSkgewotCSAgICBTeXN0ZW0ub3V0LnByaW50KCJDYXVnaHQgZXhjZXB0aW9uIDogIiApIDsKLQkgICAgaWYgKCB0aHJvd0V4Y2VwdGlvbiApIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJTZXR0aW5nIHBhc3NlZCB0byB0cnVlIik7Ci0JCXBhc3NlZCA9IHRydWU7CisgICAgfQorICAgIC8vdHJ5IGdldHRpbmcgYW4gZXh0cmEgY29ubmVjdGlvbgorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tVHJ5IGdldHRpbmcgZXh0cmEgY29ubmVjdGlvbiIpOworICAgIENvbm5lY3Rpb24gY29uID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgICBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludCgiQ2F1Z2h0IGV4Y2VwdGlvbiA6ICIgKSA7CisgICAgICAgIGlmICggdGhyb3dFeGNlcHRpb24gKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2V0dGluZyBwYXNzZWQgdG8gdHJ1ZSIpOworICAgICAgICBwYXNzZWQgPSB0cnVlOwogICAgICAgICAgICAgfSBlbHNlIHsKLQkgICAgICAgIHBhc3NlZCA9IGZhbHNlOwotICAgICAgICAgICAgfSAgICAKKyAgICAgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgICAgICAgICAgfQogCiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICB0cnkgeyBjb24uY2xvc2UoKTsgfSBjYXRjaCAoIEV4Y2VwdGlvbiBlICkge30KICAgICAgICAgfQotICAgICAgICAKLQlmb3IgKGludCBpID0gMCA7IGkgPCBtYXhQb29sU2l6ZTtpKysgKSB7Ci0JICAgIHRyeSB7Ci0JICAgICAgICBjb25uc1tpXS5jbG9zZSgpOwotCSAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSkgewotCSAgICAgICAgLy9wYXNzZWQgPSBmYWxzZTsKLQkgICAgfQotCX0KLQkKLQlyZXR1cm4gcGFzc2VkOworCisgICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgbWF4UG9vbFNpemU7aSsrICkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgY29ubnNbaV0uY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIC8vcGFzc2VkID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcGFzc2VkOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7fQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9wb29sYXV0aC0yL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3Bvb2xhdXRoLTIvYnVpbGQucHJvcGVydGllcwppbmRleCA3ZDg1MTFmLi40NzI0NjUyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3Bvb2xhdXRoLTIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3Bvb2xhdXRoLTIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTggKzE1LDE4IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqZGJjLXBvb2xhdXRoIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3Bvb2xhdXRoLTIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9wb29sYXV0aC0yL2J1aWxkLnhtbAppbmRleCA4ZGU3Yjk0Li40OGIzOWQzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3Bvb2xhdXRoLTIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvcG9vbGF1dGgtMi9idWlsZC54bWwKQEAgLTI1LDcgKzI1LDcgQEAKIAogPHByb2plY3QgbmFtZT0ibWl4IiBkZWZhdWx0PSJ1c2FnZSIgYmFzZWRpcj0iLiI+CiAKLSAgICAKKwogICAgICZjb21tb25TZXR1cDsKICAgICAmY29tbW9uQnVpbGQ7CiAgICAgJnRlc3Rwcm9wZXJ0aWVzOwpAQCAtMzUsNyArMzUsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDcsNTQgKzQ3LDU0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi9TaW1wbGVTZXNzaW9uKi5jbGFzcywgKiovKkNsaWVudC5jbGFzcyIgLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgCisKICAgICAgIDwhLS0gc2V0IHVwIG5vbiB4YSBwb29scyAtLT4KLSAgICAgIAorCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtcG9vbGF1dGgtcG9vbCIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtcG9vbGF1dGgtcG9vbCIvPgorICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtcG9vbGF1dGgtcG9vbCIvPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9wb29sYXV0aCIvPgogICAgICAgPC9hbnRjYWxsPgotICAgICAgCiAKLSAgICAgIAorCisKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLXNxbCIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+Ci0JPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy1wb29sYXV0aC1wb29sLnByb3BlcnR5LlVzZXI9ZGJ1c2VyIi8+CisgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy1wb29sYXV0aC1wb29sLnByb3BlcnR5LlVzZXI9ZGJ1c2VyIi8+CiAgICAgICA8L2FudGNhbGw+CiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgotCTxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLmpkYmMtcG9vbGF1dGgtcG9vbC5wcm9wZXJ0eS5QYXNzd29yZD1kYnBhc3N3b3JkIi8+CisgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy1wb29sYXV0aC1wb29sLnByb3BlcnR5LlBhc3N3b3JkPWRicGFzc3dvcmQiLz4KICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iMSIvPgogICAgICAgPC9hbnRjYWxsPgotICAgICAgCisKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgotCTxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLmpkYmMtcG9vbGF1dGgtcG9vbC5wcm9wZXJ0eS5Vc2VyPXBicHVibGljIi8+CisgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy1wb29sYXV0aC1wb29sLnByb3BlcnR5LlVzZXI9cGJwdWJsaWMiLz4KICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+Ci0JPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy1wb29sYXV0aC1wb29sLnByb3BlcnR5LlBhc3N3b3JkPXBicHVibGljIi8+CisgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy1wb29sYXV0aC1wb29sLnByb3BlcnR5LlBhc3N3b3JkPXBicHVibGljIi8+CiAgICAgICA8L2FudGNhbGw+CiAKICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KQEAgLTExMiw0MyArMTEyLDQzIEBACiAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IjIiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgIAorCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRyb3Atc3FsIi8+CiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamRiYy1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtcG9vbGF1dGgtcG9vbCIvPgorICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtcG9vbGF1dGgtcG9vbCIvPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9wb29sYXV0aCIvPgogICAgICAgPC9hbnRjYWxsPgotICAgICAgCisKICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1zcWwiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX2RidXNlcl90YWJsZXMuc3FsIi8+Ci0JPHBhcmFtIG5hbWU9ImRiLnVzZXIiIHZhbHVlPSJkYnVzZXIiLz4KLQk8cGFyYW0gbmFtZT0iZGIucHdkIiB2YWx1ZT0iZGJwYXNzd29yZCIvPgorICAgIDxwYXJhbSBuYW1lPSJkYi51c2VyIiB2YWx1ZT0iZGJ1c2VyIi8+CisgICAgPHBhcmFtIG5hbWU9ImRiLnB3ZCIgdmFsdWU9ImRicGFzc3dvcmQiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wYnB1YmxpY190YWJsZXMuc3FsIi8+Ci0JPHBhcmFtIG5hbWU9ImRiLnVzZXIiIHZhbHVlPSJwYnB1YmxpYyIvPgotCTxwYXJhbSBuYW1lPSJkYi5wd2QiIHZhbHVlPSJwYnB1YmxpYyIvPgorICAgIDxwYXJhbSBuYW1lPSJkYi51c2VyIiB2YWx1ZT0icGJwdWJsaWMiLz4KKyAgICA8cGFyYW0gbmFtZT0iZGIucHdkIiB2YWx1ZT0icGJwdWJsaWMiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRyb3Atc3FsIj4gCisKKyAgICA8dGFyZ2V0IG5hbWU9ImRyb3Atc3FsIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BfZGJ1c2VyX3RhYmxlcy5zcWwiLz4KLQk8cGFyYW0gbmFtZT0iZGIudXNlciIgdmFsdWU9ImRidXNlciIvPgotCTxwYXJhbSBuYW1lPSJkYi5wd2QiIHZhbHVlPSJkYnBhc3N3b3JkIi8+CisgICAgPHBhcmFtIG5hbWU9ImRiLnVzZXIiIHZhbHVlPSJkYnVzZXIiLz4KKyAgICA8cGFyYW0gbmFtZT0iZGIucHdkIiB2YWx1ZT0iZGJwYXNzd29yZCIvPgogICAgICAgPC9hbnRjYWxsPgogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX3BicHVibGljX3RhYmxlcy5zcWwiLz4KLQk8cGFyYW0gbmFtZT0iZGIudXNlciIgdmFsdWU9InBicHVibGljIi8+Ci0JPHBhcmFtIG5hbWU9ImRiLnB3ZCIgdmFsdWU9InBicHVibGljIi8+CisgICAgPHBhcmFtIG5hbWU9ImRiLnVzZXIiIHZhbHVlPSJwYnB1YmxpYyIvPgorICAgIDxwYXJhbSBuYW1lPSJkYi5wd2QiIHZhbHVlPSJwYnB1YmxpYyIvPgogICAgICAgPC9hbnRjYWxsPgogCiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3Bvb2xhdXRoLTIvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9wb29sYXV0aC0yL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA3YzRmN2E3Li5lYThlYmEwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3Bvb2xhdXRoLTIvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvcG9vbGF1dGgtMi9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI1LDM1ICsyNSwzNSBAQAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuU2ltcGxlUmVwb3J0ZXJBZGFwdGVyOwogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKLQlTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKLQlTdHJpbmcgdGVzdFN1aXRlID0gInJlY29uZmlnLnBvb2xhdXRoLXRlc3QxICI7CisKKyAgICBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKKyAgICBTdHJpbmcgdGVzdFN1aXRlID0gInJlY29uZmlnLnBvb2xhdXRoLXRlc3QxICI7CiAKICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgT2JqZWN0IG9ialJlZiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlU2Vzc2lvbkhvbWUiKTsKLQlTaW1wbGVTZXNzaW9uSG9tZSBzaW1wbGVTZXNzaW9uSG9tZSA9IChTaW1wbGVTZXNzaW9uSG9tZSkKKyAgICBTaW1wbGVTZXNzaW9uSG9tZSBzaW1wbGVTZXNzaW9uSG9tZSA9IChTaW1wbGVTZXNzaW9uSG9tZSkKICAgICAgICAgamF2YXgucm1pLlBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpSZWYsIFNpbXBsZVNlc3Npb25Ib21lLmNsYXNzKTsKLSAgICAgICAgCi0Jc3RhdC5hZGREZXNjcmlwdGlvbigiUnVubmluZyByZWNvbmZpZy5wb29sYXV0aCB0ZXN0U3VpdGUxICIpOworCisgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiUnVubmluZyByZWNvbmZpZy5wb29sYXV0aCB0ZXN0U3VpdGUxICIpOwogICAgICAgICBTaW1wbGVTZXNzaW9uIHNpbXBsZVNlc3Npb24gPSBzaW1wbGVTZXNzaW9uSG9tZS5jcmVhdGUoKTsKIAogICAgICAgICBpZiAoICIxIi5lcXVhbHMoYXJnc1swXSkgKSAgewotCSAgICBpZiAoc2ltcGxlU2Vzc2lvbi50ZXN0MSgpICkgewotCSAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDEgOiAiICwgc3RhdC5QQVNTICk7Ci0JICAgIH0gZWxzZSB7Ci0JICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0MSA6ICIgLCBzdGF0LkZBSUwgKTsKLQkgICAgfQorICAgICAgICBpZiAoc2ltcGxlU2Vzc2lvbi50ZXN0MSgpICkgeworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDEgOiAiICwgc3RhdC5QQVNTICk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0MSA6ICIgLCBzdGF0LkZBSUwgKTsKKyAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKHNpbXBsZVNlc3Npb24udGVzdDIoKSApIHsKLQkgICAgICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3QyIDogIiAsIHN0YXQuUEFTUyApOwotCSAgICB9IGVsc2UgewotCSAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDIgOiAiICwgc3RhdC5GQUlMICk7Ci0JICAgIH0KLSAgICAgICAgfSAKLSAgICAgICAgCQotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0MiA6ICIgLCBzdGF0LlBBU1MgKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3QyIDogIiAsIHN0YXQuRkFJTCApOworICAgICAgICB9CisgICAgICAgIH0KKworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9wb29sYXV0aC0yL2Rlc2NyaXB0b3IvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3Bvb2xhdXRoLTIvZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCBlZWNkZDEyLi4yMGE0NDYzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3Bvb2xhdXRoLTIvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3Bvb2xhdXRoLTIvZGVzY3JpcHRvci9lamItamFyLnhtbApAQCAtNTIsNiArNTIsNiBAQAogICAgICAgPHRyYW5zLWF0dHJpYnV0ZT5SZXF1aXJlZDwvdHJhbnMtYXR0cmlidXRlPgogICAgIDwvY29udGFpbmVyLXRyYW5zYWN0aW9uPgogICA8L2Fzc2VtYmx5LWRlc2NyaXB0b3I+Ci0gICAgICAKKwogPC9lamItamFyPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3Bvb2xhdXRoLTIvZWpiL1NpbXBsZVNlc3Npb25CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3Bvb2xhdXRoLTIvZWpiL1NpbXBsZVNlc3Npb25CZWFuLmphdmEKaW5kZXggNjdjZDY1NC4uYzYzYTI5OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9wb29sYXV0aC0yL2VqYi9TaW1wbGVTZXNzaW9uQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvcG9vbGF1dGgtMi9lamIvU2ltcGxlU2Vzc2lvbkJlYW4uamF2YQpAQCAtMzEsMTA1ICszMSwxMDUgQEAKICAgICBwcml2YXRlIERhdGFTb3VyY2UgZHM7CiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgY29udGV4dCkgewogICAgICAgICBjdHh0XyA9IGNvbnRleHQ7Ci0JdHJ5IHsKLQkgICAgaWNfID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgdHJ5IHsKKyAgICAgICAgaWNfID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgIGRzID0gKERhdGFTb3VyY2UpaWNfLmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7Ci0JfSBjYXRjaCggTmFtaW5nRXhjZXB0aW9uIG5lICkgewotCSAgICBuZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisgICAgfSBjYXRjaCggTmFtaW5nRXhjZXB0aW9uIG5lICkgeworICAgICAgICBuZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkvL0RhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSlpY18ubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKLQlDb25uZWN0aW9uIGNvbm4xID0gbnVsbDsKLQlTdGF0ZW1lbnQgc3RtdDEgPSBudWxsOwotCWJvb2xlYW4gcGFzc2VkID0gZmFsc2U7Ci0JLy9HZXQgYSBjb25uZWN0aW9uIHdpdGggdXNlcixwYXNzd29yZCA9IGRidXNlcixkYnBhc3N3b3JkCi0JLy9hbmQgYWNjZXNzIGEgdGFibGUgdGhhdCBvbmx5IHRoaXMgcHJpbmNpcGFsIGNhbgotCS8vYWNjZXNzCi0JdHJ5IHsKLQkgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIHN0bXQxID0gY29ubjEuY3JlYXRlU3RhdGVtZW50KCk7Ci0JICAgIHN0bXQxLmV4ZWN1dGVRdWVyeSgiU0VMRUNUICogRlJPTSBEQlVTRVJUQUJMRSIpOwotCX0gY2F0Y2goIEV4Y2VwdGlvbiBlKSB7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIHJldHVybiBmYWxzZTsKLQl9IGZpbmFsbHkgewotCSAgICBpZiAoc3RtdDEgIT0gbnVsbCApIHsgCi0JICAgICAgICB0cnkgeyBzdG10MS5jbG9zZSgpOyB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7fQotCSAgICB9Ci0JICAgIGlmIChjb25uMSAhPSBudWxsKSB7IAotCSAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KLQkgICAgfQotCX0KKyAgICAvL0RhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSlpY18ubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKKyAgICBDb25uZWN0aW9uIGNvbm4xID0gbnVsbDsKKyAgICBTdGF0ZW1lbnQgc3RtdDEgPSBudWxsOworICAgIGJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CisgICAgLy9HZXQgYSBjb25uZWN0aW9uIHdpdGggdXNlcixwYXNzd29yZCA9IGRidXNlcixkYnBhc3N3b3JkCisgICAgLy9hbmQgYWNjZXNzIGEgdGFibGUgdGhhdCBvbmx5IHRoaXMgcHJpbmNpcGFsIGNhbgorICAgIC8vYWNjZXNzCisgICAgdHJ5IHsKKyAgICAgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIHN0bXQxID0gY29ubjEuY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgIHN0bXQxLmV4ZWN1dGVRdWVyeSgiU0VMRUNUICogRlJPTSBEQlVTRVJUQUJMRSIpOworICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBpZiAoc3RtdDEgIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7IHN0bXQxLmNsb3NlKCk7IH0gY2F0Y2goRXhjZXB0aW9uIGUpIHt9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbm4xICE9IG51bGwpIHsKKyAgICAgICAgICAgIHRyeSB7IGNvbm4xLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9CisgICAgICAgIH0KKyAgICB9CiAKLQkvL05vdyB0cnkgcXVlcnlpbmcgYSB0YWJsZSBvd25lZCBieSBhbm90aGVyIHByaW5jaXBhbCBhbmQKLQkvL2V4cGVjdCBhbiBleGNlcHRpb24KLQl0cnkgewotCSAgICBjb25uMSA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQkgICAgc3RtdDEgPSBjb25uMS5jcmVhdGVTdGF0ZW1lbnQoKTsKLQkgICAgc3RtdDEuZXhlY3V0ZVF1ZXJ5KCJTRUxFQ1QgKiBGUk9NIFBCUFVCTElDVEFCTEUiKTsKLQl9IGNhdGNoKCBFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICByZXR1cm4gdHJ1ZTsKLQl9IGZpbmFsbHkgewotCSAgICBpZiAoc3RtdDEgIT0gbnVsbCApIHsgCi0JICAgICAgICB0cnkgeyBzdG10MS5jbG9zZSgpOyB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7fQotCSAgICB9Ci0JICAgIGlmIChjb25uMSAhPSBudWxsKSB7IAotCSAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KLQkgICAgfQotCX0KKyAgICAvL05vdyB0cnkgcXVlcnlpbmcgYSB0YWJsZSBvd25lZCBieSBhbm90aGVyIHByaW5jaXBhbCBhbmQKKyAgICAvL2V4cGVjdCBhbiBleGNlcHRpb24KKyAgICB0cnkgeworICAgICAgICBjb25uMSA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgc3RtdDEgPSBjb25uMS5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgc3RtdDEuZXhlY3V0ZVF1ZXJ5KCJTRUxFQ1QgKiBGUk9NIFBCUFVCTElDVEFCTEUiKTsKKyAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBpZiAoc3RtdDEgIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7IHN0bXQxLmNsb3NlKCk7IH0gY2F0Y2goRXhjZXB0aW9uIGUpIHt9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbm4xICE9IG51bGwpIHsKKyAgICAgICAgICAgIHRyeSB7IGNvbm4xLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9CisgICAgICAgIH0KKyAgICB9CiAKLQlyZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIHRlc3QyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JLy9EYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpaWNfLmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7Ci0JQ29ubmVjdGlvbiBjb25uMSA9IG51bGw7Ci0JU3RhdGVtZW50IHN0bXQxID0gbnVsbDsKLQlib29sZWFuIHBhc3NlZCA9IGZhbHNlOwotCS8vR2V0IGEgY29ubmVjdGlvbiB3aXRoIHVzZXIscGFzc3dvcmQgPSBwYnB1YmxpYyxwYnB1YmxpYwotCS8vYW5kIGFjY2VzcyBhIHRhYmxlIHRoYXQgb25seSB0aGlzIHByaW5jaXBhbCBjYW4KLQkvL2FjY2VzcwotCXRyeSB7Ci0JICAgIGNvbm4xID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCSAgICBzdG10MSA9IGNvbm4xLmNyZWF0ZVN0YXRlbWVudCgpOwotCSAgICBzdG10MS5leGVjdXRlUXVlcnkoIlNFTEVDVCAqIEZST00gUEJQVUJMSUNUQUJMRSIpOwotCX0gY2F0Y2goIEV4Y2VwdGlvbiBlKSB7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIHJldHVybiBmYWxzZTsKLQl9IGZpbmFsbHkgewotCSAgICBpZiAoc3RtdDEgIT0gbnVsbCApIHsgCi0JICAgICAgICB0cnkgeyBzdG10MS5jbG9zZSgpOyB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7fQotCSAgICB9Ci0JICAgIGlmIChjb25uMSAhPSBudWxsKSB7IAotCSAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KLQkgICAgfQotCX0KKyAgICAvL0RhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSlpY18ubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKKyAgICBDb25uZWN0aW9uIGNvbm4xID0gbnVsbDsKKyAgICBTdGF0ZW1lbnQgc3RtdDEgPSBudWxsOworICAgIGJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CisgICAgLy9HZXQgYSBjb25uZWN0aW9uIHdpdGggdXNlcixwYXNzd29yZCA9IHBicHVibGljLHBicHVibGljCisgICAgLy9hbmQgYWNjZXNzIGEgdGFibGUgdGhhdCBvbmx5IHRoaXMgcHJpbmNpcGFsIGNhbgorICAgIC8vYWNjZXNzCisgICAgdHJ5IHsKKyAgICAgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIHN0bXQxID0gY29ubjEuY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgIHN0bXQxLmV4ZWN1dGVRdWVyeSgiU0VMRUNUICogRlJPTSBQQlBVQkxJQ1RBQkxFIik7CisgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmIChzdG10MSAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsgc3RtdDEuY2xvc2UoKTsgfSBjYXRjaChFeGNlcHRpb24gZSkge30KKyAgICAgICAgfQorICAgICAgICBpZiAoY29ubjEgIT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KKyAgICAgICAgfQorICAgIH0KIAotCS8vTm93IHRyeSBxdWVyeWluZyBhIHRhYmxlIG93bmVkIGJ5IGFub3RoZXIgcHJpbmNpcGFsIGFuZAotCS8vZXhwZWN0IGFuIGV4Y2VwdGlvbgotCXRyeSB7Ci0JICAgIGNvbm4xID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCSAgICBzdG10MSA9IGNvbm4xLmNyZWF0ZVN0YXRlbWVudCgpOwotCSAgICBzdG10MS5leGVjdXRlUXVlcnkoIlNFTEVDVCAqIEZST00gREJVU0VSVEFCTEUiKTsKLQl9IGNhdGNoKCBFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICByZXR1cm4gdHJ1ZTsKLQl9IGZpbmFsbHkgewotCSAgICBpZiAoc3RtdDEgIT0gbnVsbCApIHsgCi0JICAgICAgICB0cnkgeyBzdG10MS5jbG9zZSgpOyB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7fQotCSAgICB9Ci0JICAgIGlmIChjb25uMSAhPSBudWxsKSB7IAotCSAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KLQkgICAgfQotCX0KKyAgICAvL05vdyB0cnkgcXVlcnlpbmcgYSB0YWJsZSBvd25lZCBieSBhbm90aGVyIHByaW5jaXBhbCBhbmQKKyAgICAvL2V4cGVjdCBhbiBleGNlcHRpb24KKyAgICB0cnkgeworICAgICAgICBjb25uMSA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgc3RtdDEgPSBjb25uMS5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgc3RtdDEuZXhlY3V0ZVF1ZXJ5KCJTRUxFQ1QgKiBGUk9NIERCVVNFUlRBQkxFIik7CisgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKHN0bXQxICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeyBzdG10MS5jbG9zZSgpOyB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7fQorICAgICAgICB9CisgICAgICAgIGlmIChjb25uMSAhPSBudWxsKSB7CisgICAgICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQorICAgICAgICB9CisgICAgfQogCi0JcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJMb2FkKCkge30KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvcG9vbGF1dGgtMi9zcWwvY3JlYXRlX2RidXNlcl90YWJsZXMuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9wb29sYXV0aC0yL3NxbC9jcmVhdGVfZGJ1c2VyX3RhYmxlcy5zcWwKaW5kZXggZjkxYWExNy4uZTY0MDY1ZSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9wb29sYXV0aC0yL3NxbC9jcmVhdGVfZGJ1c2VyX3RhYmxlcy5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9wb29sYXV0aC0yL3NxbC9jcmVhdGVfZGJ1c2VyX3RhYmxlcy5zcWwKQEAgLTEsOSArMSw5IEBACi1Ecm9wIHRhYmxlIERCVVNFUlRBQkxFOw0KLQ0KLUNSRUFURSBUQUJMRSBEQlVTRVJUQUJMRSAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikNCi0pOw0KLQ0KLUlOU0VSVCBJTlRPIERCVVNFUlRBQkxFIFZBTFVFUygxLCAnd3h5eicpOw0KLUlOU0VSVCBJTlRPIERCVVNFUlRBQkxFIFZBTFVFUygyLCAncHFycycpOw0KK0Ryb3AgdGFibGUgREJVU0VSVEFCTEU7CisKK0NSRUFURSBUQUJMRSBEQlVTRVJUQUJMRSAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCitJTlNFUlQgSU5UTyBEQlVTRVJUQUJMRSBWQUxVRVMoMSwgJ3d4eXonKTsKK0lOU0VSVCBJTlRPIERCVVNFUlRBQkxFIFZBTFVFUygyLCAncHFycycpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9wb29sYXV0aC0yL3NxbC9jcmVhdGVfcGJwdWJsaWNfdGFibGVzLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvcG9vbGF1dGgtMi9zcWwvY3JlYXRlX3BicHVibGljX3RhYmxlcy5zcWwKaW5kZXggNzllYTcyYS4uMzc5ZTA0NyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9wb29sYXV0aC0yL3NxbC9jcmVhdGVfcGJwdWJsaWNfdGFibGVzLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3Bvb2xhdXRoLTIvc3FsL2NyZWF0ZV9wYnB1YmxpY190YWJsZXMuc3FsCkBAIC0xLDkgKzEsOSBAQAotRHJvcCB0YWJsZSBQQlBVQkxJQ1RBQkxFOw0KLQ0KLUNSRUFURSBUQUJMRSBQQlBVQkxJQ1RBQkxFICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQotSU5TRVJUIElOVE8gUEJQVUJMSUNUQUJMRSBWQUxVRVMoMSwgJ3d4eXonKTsNCi1JTlNFUlQgSU5UTyBQQlBVQkxJQ1RBQkxFIFZBTFVFUygyLCAncHFycycpOw0KK0Ryb3AgdGFibGUgUEJQVUJMSUNUQUJMRTsKKworQ1JFQVRFIFRBQkxFIFBCUFVCTElDVEFCTEUgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQorKTsKKworSU5TRVJUIElOVE8gUEJQVUJMSUNUQUJMRSBWQUxVRVMoMSwgJ3d4eXonKTsKK0lOU0VSVCBJTlRPIFBCUFVCTElDVEFCTEUgVkFMVUVTKDIsICdwcXJzJyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3Bvb2xhdXRoLTIvc3FsL2Ryb3BfZGJ1c2VyX3RhYmxlcy5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3Bvb2xhdXRoLTIvc3FsL2Ryb3BfZGJ1c2VyX3RhYmxlcy5zcWwKaW5kZXggMjU1NzAwZC4uMTkzMzA2NCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9wb29sYXV0aC0yL3NxbC9kcm9wX2RidXNlcl90YWJsZXMuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvcG9vbGF1dGgtMi9zcWwvZHJvcF9kYnVzZXJfdGFibGVzLnNxbApAQCAtMSArMSBAQAotRHJvcCB0YWJsZSBEQlVTRVJUQUJMRTsNCitEcm9wIHRhYmxlIERCVVNFUlRBQkxFOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9wb29sYXV0aC0yL3NxbC9kcm9wX3BicHVibGljX3RhYmxlcy5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3Bvb2xhdXRoLTIvc3FsL2Ryb3BfcGJwdWJsaWNfdGFibGVzLnNxbAppbmRleCBmZjQwYTE5Li5iMDIzOTkzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3Bvb2xhdXRoLTIvc3FsL2Ryb3BfcGJwdWJsaWNfdGFibGVzLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3Bvb2xhdXRoLTIvc3FsL2Ryb3BfcGJwdWJsaWNfdGFibGVzLnNxbApAQCAtMSArMSBAQAotRHJvcCB0YWJsZSBQQlBVQkxJQ1RBQkxFOw0KK0Ryb3AgdGFibGUgUEJQVUJMSUNUQUJMRTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvcG9vbGF1dGgvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvcG9vbGF1dGgvYnVpbGQucHJvcGVydGllcwppbmRleCA3ZDg1MTFmLi40NzI0NjUyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3Bvb2xhdXRoL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9wb29sYXV0aC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOCArMTUsMTggQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImpkYmMtcG9vbGF1dGgiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvcG9vbGF1dGgvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9wb29sYXV0aC9idWlsZC54bWwKaW5kZXggNTMxYzMyOS4uMmE3NjcyZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9wb29sYXV0aC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9wb29sYXV0aC9idWlsZC54bWwKQEAgLTI1LDcgKzI1LDcgQEAKIAogPHByb2plY3QgbmFtZT0ibWl4IiBkZWZhdWx0PSJ1c2FnZSIgYmFzZWRpcj0iLiI+CiAKLSAgICAKKwogICAgICZjb21tb25TZXR1cDsKICAgICAmY29tbW9uQnVpbGQ7CiAgICAgJnRlc3Rwcm9wZXJ0aWVzOwpAQCAtMzUsNyArMzUsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDcsOTcgKzQ3LDk3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi9TaW1wbGVTZXNzaW9uKi5jbGFzcywgKiovKkNsaWVudC5jbGFzcyIgLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgCisKICAgICAgIDwhLS0gc2V0IHVwIG5vbiB4YSBwb29scyAtLT4KLSAgICAgIAorCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtcG9vbGF1dGgtcG9vbCIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtcG9vbGF1dGgtcG9vbCIvPgorICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtcG9vbGF1dGgtcG9vbCIvPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9wb29sYXV0aCIvPgogICAgICAgPC9hbnRjYWxsPgotICAgICAgCiAKLSAgICAgIAorCisKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLXNxbCIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+Ci0JPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy1wb29sYXV0aC1wb29sLnByb3BlcnR5LlVzZXI9ZGJ1c2VyIi8+CisgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy1wb29sYXV0aC1wb29sLnByb3BlcnR5LlVzZXI9ZGJ1c2VyIi8+CiAgICAgICA8L2FudGNhbGw+CiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgotCTxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLmpkYmMtcG9vbGF1dGgtcG9vbC5wcm9wZXJ0eS5QYXNzd29yZD1kYnBhc3N3b3JkIi8+CisgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy1wb29sYXV0aC1wb29sLnByb3BlcnR5LlBhc3N3b3JkPWRicGFzc3dvcmQiLz4KICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iMSIvPgogICAgICAgPC9hbnRjYWxsPgotICAgICAgCisKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgotCTxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLmpkYmMtcG9vbGF1dGgtcG9vbC5wcm9wZXJ0eS5Vc2VyPXBicHVibGljIi8+CisgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy1wb29sYXV0aC1wb29sLnByb3BlcnR5LlVzZXI9cGJwdWJsaWMiLz4KICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+Ci0JPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy1wb29sYXV0aC1wb29sLnByb3BlcnR5LlBhc3N3b3JkPXBicHVibGljIi8+CisgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy1wb29sYXV0aC1wb29sLnByb3BlcnR5LlBhc3N3b3JkPXBicHVibGljIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgICAKKwogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iMiIvPgogICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgCisKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZHJvcC1zcWwiLz4KIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qZGJjLWNvbW1vbiI+Ci0JPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1wb29sYXV0aC1wb29sIi8+CisgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy1wb29sYXV0aC1wb29sIi8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL3Bvb2xhdXRoIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgICAKKwogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLXNxbCI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfZGJ1c2VyX3RhYmxlcy5zcWwiLz4KLQk8cGFyYW0gbmFtZT0iZGIudXNlciIgdmFsdWU9ImRidXNlciIvPgotCTxwYXJhbSBuYW1lPSJkYi5wd2QiIHZhbHVlPSJkYnBhc3N3b3JkIi8+CisgICAgPHBhcmFtIG5hbWU9ImRiLnVzZXIiIHZhbHVlPSJkYnVzZXIiLz4KKyAgICA8cGFyYW0gbmFtZT0iZGIucHdkIiB2YWx1ZT0iZGJwYXNzd29yZCIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BicHVibGljX3RhYmxlcy5zcWwiLz4KLQk8cGFyYW0gbmFtZT0iZGIudXNlciIgdmFsdWU9InBicHVibGljIi8+Ci0JPHBhcmFtIG5hbWU9ImRiLnB3ZCIgdmFsdWU9InBicHVibGljIi8+CisgICAgPHBhcmFtIG5hbWU9ImRiLnVzZXIiIHZhbHVlPSJwYnB1YmxpYyIvPgorICAgIDxwYXJhbSBuYW1lPSJkYi5wd2QiIHZhbHVlPSJwYnB1YmxpYyIvPgogICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZHJvcC1zcWwiPiAKKworICAgIDx0YXJnZXQgbmFtZT0iZHJvcC1zcWwiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9kYnVzZXJfdGFibGVzLnNxbCIvPgotCTxwYXJhbSBuYW1lPSJkYi51c2VyIiB2YWx1ZT0iZGJ1c2VyIi8+Ci0JPHBhcmFtIG5hbWU9ImRiLnB3ZCIgdmFsdWU9ImRicGFzc3dvcmQiLz4KKyAgICA8cGFyYW0gbmFtZT0iZGIudXNlciIgdmFsdWU9ImRidXNlciIvPgorICAgIDxwYXJhbSBuYW1lPSJkYi5wd2QiIHZhbHVlPSJkYnBhc3N3b3JkIi8+CiAgICAgICA8L2FudGNhbGw+CiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BfcGJwdWJsaWNfdGFibGVzLnNxbCIvPgotCTxwYXJhbSBuYW1lPSJkYi51c2VyIiB2YWx1ZT0icGJwdWJsaWMiLz4KLQk8cGFyYW0gbmFtZT0iZGIucHdkIiB2YWx1ZT0icGJwdWJsaWMiLz4KKyAgICA8cGFyYW0gbmFtZT0iZGIudXNlciIgdmFsdWU9InBicHVibGljIi8+CisgICAgPHBhcmFtIG5hbWU9ImRiLnB3ZCIgdmFsdWU9InBicHVibGljIi8+CiAgICAgICA8L2FudGNhbGw+CiAKICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvcG9vbGF1dGgvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9wb29sYXV0aC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggN2M0ZjdhNy4uZWE4ZWJhMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9wb29sYXV0aC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9wb29sYXV0aC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI1LDM1ICsyNSwzNSBAQAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuU2ltcGxlUmVwb3J0ZXJBZGFwdGVyOwogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKLQlTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKLQlTdHJpbmcgdGVzdFN1aXRlID0gInJlY29uZmlnLnBvb2xhdXRoLXRlc3QxICI7CisKKyAgICBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKKyAgICBTdHJpbmcgdGVzdFN1aXRlID0gInJlY29uZmlnLnBvb2xhdXRoLXRlc3QxICI7CiAKICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgT2JqZWN0IG9ialJlZiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlU2Vzc2lvbkhvbWUiKTsKLQlTaW1wbGVTZXNzaW9uSG9tZSBzaW1wbGVTZXNzaW9uSG9tZSA9IChTaW1wbGVTZXNzaW9uSG9tZSkKKyAgICBTaW1wbGVTZXNzaW9uSG9tZSBzaW1wbGVTZXNzaW9uSG9tZSA9IChTaW1wbGVTZXNzaW9uSG9tZSkKICAgICAgICAgamF2YXgucm1pLlBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpSZWYsIFNpbXBsZVNlc3Npb25Ib21lLmNsYXNzKTsKLSAgICAgICAgCi0Jc3RhdC5hZGREZXNjcmlwdGlvbigiUnVubmluZyByZWNvbmZpZy5wb29sYXV0aCB0ZXN0U3VpdGUxICIpOworCisgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiUnVubmluZyByZWNvbmZpZy5wb29sYXV0aCB0ZXN0U3VpdGUxICIpOwogICAgICAgICBTaW1wbGVTZXNzaW9uIHNpbXBsZVNlc3Npb24gPSBzaW1wbGVTZXNzaW9uSG9tZS5jcmVhdGUoKTsKIAogICAgICAgICBpZiAoICIxIi5lcXVhbHMoYXJnc1swXSkgKSAgewotCSAgICBpZiAoc2ltcGxlU2Vzc2lvbi50ZXN0MSgpICkgewotCSAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDEgOiAiICwgc3RhdC5QQVNTICk7Ci0JICAgIH0gZWxzZSB7Ci0JICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0MSA6ICIgLCBzdGF0LkZBSUwgKTsKLQkgICAgfQorICAgICAgICBpZiAoc2ltcGxlU2Vzc2lvbi50ZXN0MSgpICkgeworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDEgOiAiICwgc3RhdC5QQVNTICk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0MSA6ICIgLCBzdGF0LkZBSUwgKTsKKyAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKHNpbXBsZVNlc3Npb24udGVzdDIoKSApIHsKLQkgICAgICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3QyIDogIiAsIHN0YXQuUEFTUyApOwotCSAgICB9IGVsc2UgewotCSAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDIgOiAiICwgc3RhdC5GQUlMICk7Ci0JICAgIH0KLSAgICAgICAgfSAKLSAgICAgICAgCQotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0MiA6ICIgLCBzdGF0LlBBU1MgKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3QyIDogIiAsIHN0YXQuRkFJTCApOworICAgICAgICB9CisgICAgICAgIH0KKworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9wb29sYXV0aC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9wb29sYXV0aC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IGVlY2RkMTIuLjIwYTQ0NjMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvcG9vbGF1dGgvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3Bvb2xhdXRoL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTUyLDYgKzUyLDYgQEAKICAgICAgIDx0cmFucy1hdHRyaWJ1dGU+UmVxdWlyZWQ8L3RyYW5zLWF0dHJpYnV0ZT4KICAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgPC9hc3NlbWJseS1kZXNjcmlwdG9yPgotICAgICAgCisKIDwvZWpiLWphcj4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9wb29sYXV0aC9lamIvU2ltcGxlU2Vzc2lvbkJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvcG9vbGF1dGgvZWpiL1NpbXBsZVNlc3Npb25CZWFuLmphdmEKaW5kZXggNzgyYmRjNC4uOGQxNjUyNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9wb29sYXV0aC9lamIvU2ltcGxlU2Vzc2lvbkJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3Bvb2xhdXRoL2VqYi9TaW1wbGVTZXNzaW9uQmVhbi5qYXZhCkBAIC0yNywxMDcgKzI3LDEwNyBAQAogewogCiAgICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBjdHh0XzsKLSAgICBwcml2YXRlIEluaXRpYWxDb250ZXh0IGljXzsgCisgICAgcHJpdmF0ZSBJbml0aWFsQ29udGV4dCBpY187CiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgY29udGV4dCkgewogICAgICAgICBjdHh0XyA9IGNvbnRleHQ7Ci0JdHJ5IHsKLQkgICAgaWNfID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JfSBjYXRjaCggTmFtaW5nRXhjZXB0aW9uIG5lICkgewotCSAgICBuZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisgICAgdHJ5IHsKKyAgICAgICAgaWNfID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgfSBjYXRjaCggTmFtaW5nRXhjZXB0aW9uIG5lICkgeworICAgICAgICBuZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQlEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpaWNfLmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7Ci0JQ29ubmVjdGlvbiBjb25uMSA9IG51bGw7Ci0JU3RhdGVtZW50IHN0bXQxID0gbnVsbDsKLQlib29sZWFuIHBhc3NlZCA9IGZhbHNlOwotCS8vR2V0IGEgY29ubmVjdGlvbiB3aXRoIHVzZXIscGFzc3dvcmQgPSBkYnVzZXIsZGJwYXNzd29yZAotCS8vYW5kIGFjY2VzcyBhIHRhYmxlIHRoYXQgb25seSB0aGlzIHByaW5jaXBhbCBjYW4KLQkvL2FjY2VzcwotCXRyeSB7Ci0JICAgIGNvbm4xID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCSAgICBzdG10MSA9IGNvbm4xLmNyZWF0ZVN0YXRlbWVudCgpOwotCSAgICBzdG10MS5leGVjdXRlUXVlcnkoIlNFTEVDVCAqIEZST00gREJVU0VSVEFCTEUiKTsKLQl9IGNhdGNoKCBFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICByZXR1cm4gZmFsc2U7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKHN0bXQxICE9IG51bGwgKSB7IAotCSAgICAgICAgdHJ5IHsgc3RtdDEuY2xvc2UoKTsgfSBjYXRjaChFeGNlcHRpb24gZSkge30KLQkgICAgfQotCSAgICBpZiAoY29ubjEgIT0gbnVsbCkgeyAKLQkgICAgICAgIHRyeSB7IGNvbm4xLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9Ci0JICAgIH0KLQl9CisgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKWljXy5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZSIpOworICAgIENvbm5lY3Rpb24gY29ubjEgPSBudWxsOworICAgIFN0YXRlbWVudCBzdG10MSA9IG51bGw7CisgICAgYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKKyAgICAvL0dldCBhIGNvbm5lY3Rpb24gd2l0aCB1c2VyLHBhc3N3b3JkID0gZGJ1c2VyLGRicGFzc3dvcmQKKyAgICAvL2FuZCBhY2Nlc3MgYSB0YWJsZSB0aGF0IG9ubHkgdGhpcyBwcmluY2lwYWwgY2FuCisgICAgLy9hY2Nlc3MKKyAgICB0cnkgeworICAgICAgICBjb25uMSA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgc3RtdDEgPSBjb25uMS5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgc3RtdDEuZXhlY3V0ZVF1ZXJ5KCJTRUxFQ1QgKiBGUk9NIERCVVNFUlRBQkxFIik7CisgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmIChzdG10MSAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsgc3RtdDEuY2xvc2UoKTsgfSBjYXRjaChFeGNlcHRpb24gZSkge30KKyAgICAgICAgfQorICAgICAgICBpZiAoY29ubjEgIT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KKyAgICAgICAgfQorICAgIH0KIAotCS8vTm93IHRyeSBxdWVyeWluZyBhIHRhYmxlIG93bmVkIGJ5IGFub3RoZXIgcHJpbmNpcGFsIGFuZAotCS8vZXhwZWN0IGFuIGV4Y2VwdGlvbgotCXRyeSB7Ci0JICAgIGNvbm4xID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCSAgICBzdG10MSA9IGNvbm4xLmNyZWF0ZVN0YXRlbWVudCgpOwotCSAgICBzdG10MS5leGVjdXRlUXVlcnkoIlNFTEVDVCAqIEZST00gUEJQVUJMSUNUQUJMRSIpOwotCX0gY2F0Y2goIEV4Y2VwdGlvbiBlKSB7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIHJldHVybiB0cnVlOwotCX0gZmluYWxseSB7Ci0JICAgIGlmIChzdG10MSAhPSBudWxsICkgeyAKLQkgICAgICAgIHRyeSB7IHN0bXQxLmNsb3NlKCk7IH0gY2F0Y2goRXhjZXB0aW9uIGUpIHt9Ci0JICAgIH0KLQkgICAgaWYgKGNvbm4xICE9IG51bGwpIHsgCi0JICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQotCSAgICB9Ci0JfQorICAgIC8vTm93IHRyeSBxdWVyeWluZyBhIHRhYmxlIG93bmVkIGJ5IGFub3RoZXIgcHJpbmNpcGFsIGFuZAorICAgIC8vZXhwZWN0IGFuIGV4Y2VwdGlvbgorICAgIHRyeSB7CisgICAgICAgIGNvbm4xID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICBzdG10MSA9IGNvbm4xLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICBzdG10MS5leGVjdXRlUXVlcnkoIlNFTEVDVCAqIEZST00gUEJQVUJMSUNUQUJMRSIpOworICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmIChzdG10MSAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsgc3RtdDEuY2xvc2UoKTsgfSBjYXRjaChFeGNlcHRpb24gZSkge30KKyAgICAgICAgfQorICAgICAgICBpZiAoY29ubjEgIT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KKyAgICAgICAgfQorICAgIH0KIAotCXJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQlEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpaWNfLmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7Ci0JQ29ubmVjdGlvbiBjb25uMSA9IG51bGw7Ci0JU3RhdGVtZW50IHN0bXQxID0gbnVsbDsKLQlib29sZWFuIHBhc3NlZCA9IGZhbHNlOwotCS8vR2V0IGEgY29ubmVjdGlvbiB3aXRoIHVzZXIscGFzc3dvcmQgPSBwYnB1YmxpYyxwYnB1YmxpYwotCS8vYW5kIGFjY2VzcyBhIHRhYmxlIHRoYXQgb25seSB0aGlzIHByaW5jaXBhbCBjYW4KLQkvL2FjY2VzcwotCXRyeSB7Ci0JICAgIGNvbm4xID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCSAgICBzdG10MSA9IGNvbm4xLmNyZWF0ZVN0YXRlbWVudCgpOwotCSAgICBzdG10MS5leGVjdXRlUXVlcnkoIlNFTEVDVCAqIEZST00gUEJQVUJMSUNUQUJMRSIpOwotCX0gY2F0Y2goIEV4Y2VwdGlvbiBlKSB7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIHJldHVybiBmYWxzZTsKLQl9IGZpbmFsbHkgewotCSAgICBpZiAoc3RtdDEgIT0gbnVsbCApIHsgCi0JICAgICAgICB0cnkgeyBzdG10MS5jbG9zZSgpOyB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7fQotCSAgICB9Ci0JICAgIGlmIChjb25uMSAhPSBudWxsKSB7IAotCSAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KLQkgICAgfQotCX0KKyAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpaWNfLmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7CisgICAgQ29ubmVjdGlvbiBjb25uMSA9IG51bGw7CisgICAgU3RhdGVtZW50IHN0bXQxID0gbnVsbDsKKyAgICBib29sZWFuIHBhc3NlZCA9IGZhbHNlOworICAgIC8vR2V0IGEgY29ubmVjdGlvbiB3aXRoIHVzZXIscGFzc3dvcmQgPSBwYnB1YmxpYyxwYnB1YmxpYworICAgIC8vYW5kIGFjY2VzcyBhIHRhYmxlIHRoYXQgb25seSB0aGlzIHByaW5jaXBhbCBjYW4KKyAgICAvL2FjY2VzcworICAgIHRyeSB7CisgICAgICAgIGNvbm4xID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICBzdG10MSA9IGNvbm4xLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICBzdG10MS5leGVjdXRlUXVlcnkoIlNFTEVDVCAqIEZST00gUEJQVUJMSUNUQUJMRSIpOworICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBpZiAoc3RtdDEgIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7IHN0bXQxLmNsb3NlKCk7IH0gY2F0Y2goRXhjZXB0aW9uIGUpIHt9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbm4xICE9IG51bGwpIHsKKyAgICAgICAgICAgIHRyeSB7IGNvbm4xLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9CisgICAgICAgIH0KKyAgICB9CiAKLQkvL05vdyB0cnkgcXVlcnlpbmcgYSB0YWJsZSBvd25lZCBieSBhbm90aGVyIHByaW5jaXBhbCBhbmQKLQkvL2V4cGVjdCBhbiBleGNlcHRpb24KLQl0cnkgewotCSAgICBjb25uMSA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQkgICAgc3RtdDEgPSBjb25uMS5jcmVhdGVTdGF0ZW1lbnQoKTsKLQkgICAgc3RtdDEuZXhlY3V0ZVF1ZXJ5KCJTRUxFQ1QgKiBGUk9NIERCVVNFUlRBQkxFIik7Ci0JfSBjYXRjaCggRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgcmV0dXJuIHRydWU7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKHN0bXQxICE9IG51bGwgKSB7IAotCSAgICAgICAgdHJ5IHsgc3RtdDEuY2xvc2UoKTsgfSBjYXRjaChFeGNlcHRpb24gZSkge30KLQkgICAgfQotCSAgICBpZiAoY29ubjEgIT0gbnVsbCkgeyAKLQkgICAgICAgIHRyeSB7IGNvbm4xLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9Ci0JICAgIH0KLQl9CisgICAgLy9Ob3cgdHJ5IHF1ZXJ5aW5nIGEgdGFibGUgb3duZWQgYnkgYW5vdGhlciBwcmluY2lwYWwgYW5kCisgICAgLy9leHBlY3QgYW4gZXhjZXB0aW9uCisgICAgdHJ5IHsKKyAgICAgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIHN0bXQxID0gY29ubjEuY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgIHN0bXQxLmV4ZWN1dGVRdWVyeSgiU0VMRUNUICogRlJPTSBEQlVTRVJUQUJMRSIpOworICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmIChzdG10MSAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsgc3RtdDEuY2xvc2UoKTsgfSBjYXRjaChFeGNlcHRpb24gZSkge30KKyAgICAgICAgfQorICAgICAgICBpZiAoY29ubjEgIT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KKyAgICAgICAgfQorICAgIH0KIAotCXJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHt9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3Bvb2xhdXRoL3NxbC9jcmVhdGVfZGJ1c2VyX3RhYmxlcy5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3Bvb2xhdXRoL3NxbC9jcmVhdGVfZGJ1c2VyX3RhYmxlcy5zcWwKaW5kZXggZjkxYWExNy4uZTY0MDY1ZSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9wb29sYXV0aC9zcWwvY3JlYXRlX2RidXNlcl90YWJsZXMuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvcG9vbGF1dGgvc3FsL2NyZWF0ZV9kYnVzZXJfdGFibGVzLnNxbApAQCAtMSw5ICsxLDkgQEAKLURyb3AgdGFibGUgREJVU0VSVEFCTEU7DQotDQotQ1JFQVRFIFRBQkxFIERCVVNFUlRBQkxFICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQotSU5TRVJUIElOVE8gREJVU0VSVEFCTEUgVkFMVUVTKDEsICd3eHl6Jyk7DQotSU5TRVJUIElOVE8gREJVU0VSVEFCTEUgVkFMVUVTKDIsICdwcXJzJyk7DQorRHJvcCB0YWJsZSBEQlVTRVJUQUJMRTsKKworQ1JFQVRFIFRBQkxFIERCVVNFUlRBQkxFICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikKKyk7CisKK0lOU0VSVCBJTlRPIERCVVNFUlRBQkxFIFZBTFVFUygxLCAnd3h5eicpOworSU5TRVJUIElOVE8gREJVU0VSVEFCTEUgVkFMVUVTKDIsICdwcXJzJyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3Bvb2xhdXRoL3NxbC9jcmVhdGVfcGJwdWJsaWNfdGFibGVzLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvcG9vbGF1dGgvc3FsL2NyZWF0ZV9wYnB1YmxpY190YWJsZXMuc3FsCmluZGV4IDc5ZWE3MmEuLjM3OWUwNDcgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvcG9vbGF1dGgvc3FsL2NyZWF0ZV9wYnB1YmxpY190YWJsZXMuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvcG9vbGF1dGgvc3FsL2NyZWF0ZV9wYnB1YmxpY190YWJsZXMuc3FsCkBAIC0xLDkgKzEsOSBAQAotRHJvcCB0YWJsZSBQQlBVQkxJQ1RBQkxFOw0KLQ0KLUNSRUFURSBUQUJMRSBQQlBVQkxJQ1RBQkxFICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQotSU5TRVJUIElOVE8gUEJQVUJMSUNUQUJMRSBWQUxVRVMoMSwgJ3d4eXonKTsNCi1JTlNFUlQgSU5UTyBQQlBVQkxJQ1RBQkxFIFZBTFVFUygyLCAncHFycycpOw0KK0Ryb3AgdGFibGUgUEJQVUJMSUNUQUJMRTsKKworQ1JFQVRFIFRBQkxFIFBCUFVCTElDVEFCTEUgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQorKTsKKworSU5TRVJUIElOVE8gUEJQVUJMSUNUQUJMRSBWQUxVRVMoMSwgJ3d4eXonKTsKK0lOU0VSVCBJTlRPIFBCUFVCTElDVEFCTEUgVkFMVUVTKDIsICdwcXJzJyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3Bvb2xhdXRoL3NxbC9kcm9wX2RidXNlcl90YWJsZXMuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9wb29sYXV0aC9zcWwvZHJvcF9kYnVzZXJfdGFibGVzLnNxbAppbmRleCAyNTU3MDBkLi4xOTMzMDY0IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3Bvb2xhdXRoL3NxbC9kcm9wX2RidXNlcl90YWJsZXMuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvcG9vbGF1dGgvc3FsL2Ryb3BfZGJ1c2VyX3RhYmxlcy5zcWwKQEAgLTEgKzEgQEAKLURyb3AgdGFibGUgREJVU0VSVEFCTEU7DQorRHJvcCB0YWJsZSBEQlVTRVJUQUJMRTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvcG9vbGF1dGgvc3FsL2Ryb3BfcGJwdWJsaWNfdGFibGVzLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvcG9vbGF1dGgvc3FsL2Ryb3BfcGJwdWJsaWNfdGFibGVzLnNxbAppbmRleCBmZjQwYTE5Li5iMDIzOTkzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3Bvb2xhdXRoL3NxbC9kcm9wX3BicHVibGljX3RhYmxlcy5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy9wb29sYXV0aC9zcWwvZHJvcF9wYnB1YmxpY190YWJsZXMuc3FsCkBAIC0xICsxIEBACi1Ecm9wIHRhYmxlIFBCUFVCTElDVEFCTEU7DQorRHJvcCB0YWJsZSBQQlBVQkxJQ1RBQkxFOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy91c2VycGFzcy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy91c2VycGFzcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDgzNWZlZTUuLmZkMTZhYTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvdXNlcnBhc3MvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3VzZXJwYXNzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE5ICsxNSwxOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWJtcC1hcHBhdXRoIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0ib3JhY2xlLnVzZXIuMSIgdmFsdWU9InNjb3R0Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3VzZXJwYXNzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvdXNlcnBhc3MvYnVpbGQueG1sCmluZGV4IGQzMGEzOTguLjQyODM5NWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvdXNlcnBhc3MvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvdXNlcnBhc3MvYnVpbGQueG1sCkBAIC00MCw3ICs0MCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC01MiwyMyArNTIsMjMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqL1NpbXBsZUJNUC5jbGFzcywgKiovU2ltcGxlQk1QSG9tZS5jbGFzcywqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1vcmFjbGUtY29tbW9uIj4KLQkgICAgICA8cGFyYW0gbmFtZT0ib3JhY2xlLnVzZXIiIHZhbHVlPSIke29yYWNsZS51c2VyLjF9Ii8+Ci0JICAgICAgPHBhcmFtIG5hbWU9Im9yYWNsZS5wYXNzd29yZCIgdmFsdWU9IiR7b3JhY2xlLnBhc3N3b3JkLjF9Ii8+Ci0JICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CisgICAgICAgICAgPHBhcmFtIG5hbWU9Im9yYWNsZS51c2VyIiB2YWx1ZT0iJHtvcmFjbGUudXNlci4xfSIvPgorICAgICAgICAgIDxwYXJhbSBuYW1lPSJvcmFjbGUucGFzc3dvcmQiIHZhbHVlPSIke29yYWNsZS5wYXNzd29yZC4xfSIvPgorICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1vcmFjbGUtY29tbW9uIj4KLQkgICAgICA8cGFyYW0gbmFtZT0ib3JhY2xlLnVzZXIiIHZhbHVlPSIke29yYWNsZS51c2VyLjJ9Ii8+Ci0JICAgICAgPHBhcmFtIG5hbWU9Im9yYWNsZS5wYXNzd29yZCIgdmFsdWU9IiR7b3JhY2xlLnBhc3N3b3JkLjJ9Ii8+Ci0JICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2UxLnNxbCIvPgorICAgICAgICAgIDxwYXJhbSBuYW1lPSJvcmFjbGUudXNlciIgdmFsdWU9IiR7b3JhY2xlLnVzZXIuMn0iLz4KKyAgICAgICAgICA8cGFyYW0gbmFtZT0ib3JhY2xlLnBhc3N3b3JkIiB2YWx1ZT0iJHtvcmFjbGUucGFzc3dvcmQuMn0iLz4KKyAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZTEuc3FsIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qZGJjLW9yYWNsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ib3JhY2xlLmNvbnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtb3JhY2xlLXBvb2wiLz4KQEAgLTc2LDExICs3NiwxMSBAQAogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLW9yYWNsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9wb2ludGJhc2Uuc3FsIi8+CkBAIC04OCwxMiArODgsMTIgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtb3JhY2xlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX3BvaW50YmFzZTEuc3FsIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWpkYmMtb3JhY2xlLWNvbW1vbiI+IAorICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qZGJjLW9yYWNsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ib3JhY2xlLnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtb3JhY2xlLXBvb2wiLz4KLQk8cGFyYW0gbmFtZT0ib3JhY2xlLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL3MxcWVEQi1vcmFjbGUiLz4KKyAgICA8cGFyYW0gbmFtZT0ib3JhY2xlLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL3MxcWVEQi1vcmFjbGUiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvdXNlcnBhc3MvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy91c2VycGFzcy9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKaW5kZXggNjViMjYzMC4uOGVjZjc5ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy91c2VycGFzcy9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy91c2VycGFzcy9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKQEAgLTMwLDM1ICszMCwzNSBAQAogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOwogICAgICAgICBTdHJpbmcgdGVzdFN1aXRlID0gIlJlY29uZmlnIFVzZXIvUGFzcyI7CiAgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgIE9iamVjdCBvYmpSZWYgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZUJNUEhvbWUiKTsKLQlTaW1wbGVCTVBIb21lIHNpbXBsZUJNUEhvbWUgPSAoU2ltcGxlQk1QSG9tZSkKKyAgICBTaW1wbGVCTVBIb21lIHNpbXBsZUJNUEhvbWUgPSAoU2ltcGxlQk1QSG9tZSkKICAgICAgICAgamF2YXgucm1pLlBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpSZWYsIFNpbXBsZUJNUEhvbWUuY2xhc3MpOwogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlJlY29uZmlnIHVzZXIvcGFzcyB0ZXN0cyIpOwogICAgICAgICBTaW1wbGVCTVAgc2ltcGxlQk1QID0gc2ltcGxlQk1QSG9tZS5jcmVhdGUoKTsKLQkKLQlTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKLQlTeXN0ZW0ub3V0LnByaW50KCIgdGVzdDE6ICIpOwotCWlmICggc2ltcGxlQk1QLnRlc3QxKCJzY290dCIsInRpZ2VyIiwgIkFfQ3VzdG9tZXIiKSApIHsKKworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOworICAgIFN5c3RlbS5vdXQucHJpbnQoIiB0ZXN0MTogIik7CisgICAgaWYgKCBzaW1wbGVCTVAudGVzdDEoInNjb3R0IiwidGlnZXIiLCAiQV9DdXN0b21lciIpICkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiB1c2VyMVRlc3QgOiAiLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYWxsaW5nIHRlc3QgYWdhaW4iKTsKLQkgICAgaWYgKCBzaW1wbGVCTVAudGVzdDEoInNoYWwiLCAic2hhbCIsICJCX0N1c3RvbWVyIikgKSB7Ci0JICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBhc3NlZCIpOwotICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgdXNlcjJUZXN0IDogIiwgc3RhdC5QQVNTKTsgCi0JICAgIH0gZWxzZSB7Ci0JICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZhaWxlZCIpOyAKKyAgICAgICAgaWYgKCBzaW1wbGVCTVAudGVzdDEoInNoYWwiLCAic2hhbCIsICJCX0N1c3RvbWVyIikgKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBhc3NlZCIpOworICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgdXNlcjJUZXN0IDogIiwgc3RhdC5QQVNTKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRmFpbGVkIik7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiB1c2VyMlRlc3QgOiAiLCBzdGF0LkZBSUwpOwotCSAgICB9Ci0JICAgIAotCX0gZWxzZSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRmFpbGVkIik7Ci0gICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIHVzZXIxVGVzdCA6ICIsIHN0YXQuRkFJTCk7IAotCX0KLQlTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGYWlsZWQiKTsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgdXNlcjFUZXN0IDogIiwgc3RhdC5GQUlMKTsKKyAgICB9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy91c2VycGFzcy9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy91c2VycGFzcy9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IDMxZmY2ZDYuLmNiMGZmN2IgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvdXNlcnBhc3MvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3VzZXJwYXNzL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTU3LDYgKzU3LDYgQEAKICAgICAgIDx0cmFucy1hdHRyaWJ1dGU+UmVxdWlyZWQ8L3RyYW5zLWF0dHJpYnV0ZT4KICAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgPC9hc3NlbWJseS1kZXNjcmlwdG9yPgotICAgICAgCisKIDwvZWpiLWphcj4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy91c2VycGFzcy9lamIvU2ltcGxlQk1QQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy91c2VycGFzcy9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCmluZGV4IDNhNjRiZWEuLmMzMWRiMGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvdXNlcnBhc3MvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3VzZXJwYXNzL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKQEAgLTMyLDQ2ICszMiw0NiBAQAogICAgIGludCBpZDsKIAogICAgIHB1YmxpYyB2b2lkIHNldEVudGl0eUNvbnRleHQoRW50aXR5Q29udGV4dCBlbnRpdHlDb250ZXh0KSB7Ci0JQ29udGV4dCBjb250ZXh0ID0gbnVsbDsKLQl0cnkgewotCSAgICBjb250ZXh0ICAgID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JICAgIGRzID0gKERhdGFTb3VyY2UpIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UxIik7Ci0JfSBjYXRjaCAoTmFtaW5nRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiY2FudCBmaW5kIGRhdGFzb3VyY2UiKTsKLQl9CisgICAgQ29udGV4dCBjb250ZXh0ID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgICBjb250ZXh0ICAgID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgIGRzID0gKERhdGFTb3VyY2UpIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UxIik7CisgICAgfSBjYXRjaCAoTmFtaW5nRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiY2FudCBmaW5kIGRhdGFzb3VyY2UiKTsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIEludGVnZXIgZWpiQ3JlYXRlKCkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7Ci0JcmV0dXJuIG5ldyBJbnRlZ2VyKDEpOworICAgIHJldHVybiBuZXcgSW50ZWdlcigxKTsKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MShTdHJpbmcgdXNlciwgU3RyaW5nIHBhc3N3b3JkLCBTdHJpbmcgdGFibGVOYW1lKSB7CiAgICAgICAgIC8vYWNjZXNzIFVzZXIxJ3MgdGFibGUgYW5kIHB1c2ggc29tZSBkYXRhIHRoZW4gcmVhZCBpdCBvdXQKLQlib29sZWFuIHBhc3NlZCA9IGZhbHNlOwotCUNvbm5lY3Rpb24gY29ubiA9IG51bGw7Ci0JdHJ5IHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYWxsZWQgd2l0aCAiICsgdXNlciArICI6IitwYXNzd29yZCk7Ci0JICAgIGNvbm4gPSBkcy5nZXRDb25uZWN0aW9uKHVzZXIsIHBhc3N3b3JkKTsKLQkgICAgLy9jb25uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCSAgICBpbnNlcnREYXRhKCBjb25uLCB0YWJsZU5hbWUgKTsKLQkgICAgcXVlcnlUYWJsZSggY29ubiwgdGFibGVOYW1lICk7Ci0JICAgIC8vZW1wdHlUYWJsZSggY29ubiwgdGFibGVOYW1lICk7CisgICAgYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKKyAgICBDb25uZWN0aW9uIGNvbm4gPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbGVkIHdpdGggIiArIHVzZXIgKyAiOiIrcGFzc3dvcmQpOworICAgICAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbih1c2VyLCBwYXNzd29yZCk7CisgICAgICAgIC8vY29ubiA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgaW5zZXJ0RGF0YSggY29ubiwgdGFibGVOYW1lICk7CisgICAgICAgIHF1ZXJ5VGFibGUoIGNvbm4sIHRhYmxlTmFtZSApOworICAgICAgICAvL2VtcHR5VGFibGUoIGNvbm4sIHRhYmxlTmFtZSApOwogICAgICAgICAgICAgY29ubi5jbG9zZSgpOwotCSAgICBwYXNzZWQgPSB0cnVlOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgLy9lLnByaW50U3RhY2tUcmFjZSgpOyAKLQl9IGZpbmFsbHkgewotCSAgICBpZiAoIGNvbm4gIT0gbnVsbCApIHsKLQkgICAgICAgIHRyeSB7Ci0JICAgICAgICAgICAgY29ubi5jbG9zZSgpOwotCQl9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9ICAgIAotCSAgICB9Ci0JfQotCi0JcmV0dXJuIHBhc3NlZDsKKyAgICAgICAgcGFzc2VkID0gdHJ1ZTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgIC8vZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBpZiAoIGNvbm4gIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgY29ubi5jbG9zZSgpOworICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKKyAgICByZXR1cm4gcGFzc2VkOworICAgIH0KKwogCiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHt9CiAgICAgcHVibGljIHZvaWQgZWpiU3RvcmUoKSB7fQpAQCAtODIsNDYgKzgyLDQ2IEBACiAgICAgcHVibGljIHZvaWQgZWpiUG9zdENyZWF0ZSgpIHt9CiAKICAgICAvL0luc2VydCBzb21lIGFyYml0cmFyeSBkYXRhIGludG8gdGhlIHRhYmxlCi0gICAgcHJpdmF0ZSB2b2lkIGluc2VydERhdGEoIENvbm5lY3Rpb24gY29uLCBTdHJpbmcgdGFibGVOYW1lICkgCisgICAgcHJpdmF0ZSB2b2lkIGluc2VydERhdGEoIENvbm5lY3Rpb24gY29uLCBTdHJpbmcgdGFibGVOYW1lICkKICAgICAgICAgICAgIHRocm93cyBTUUxFeGNlcHRpb24KICAgICB7CiAgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHN0bXQgPSBjb24ucHJlcGFyZVN0YXRlbWVudCgKLQkgICAgImluc2VydCBpbnRvICIgKyB0YWJsZU5hbWUgKyAiIHZhbHVlcyAoPywgPykiICk7CisgICAgICAgICJpbnNlcnQgaW50byAiICsgdGFibGVOYW1lICsgIiB2YWx1ZXMgKD8sID8pIiApOwogCi0JZm9yIChpbnQgaSA9IDA7IGkgPCA1OyBpKysgKSB7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA1OyBpKysgKSB7CiAgICAgICAgICAgICBzdG10LnNldEludCgxLCBpKTsKLQkgICAgc3RtdC5zZXRTdHJpbmcoMiwgImFiY2QtIitpKTsKLQkgICAgc3RtdC5leGVjdXRlVXBkYXRlKCk7Ci0JfQotCi0Jc3RtdC5jbG9zZSgpOworICAgICAgICBzdG10LnNldFN0cmluZygyLCAiYWJjZC0iK2kpOworICAgICAgICBzdG10LmV4ZWN1dGVVcGRhdGUoKTsKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgZW1wdHlUYWJsZSggQ29ubmVjdGlvbiBjb24sIFN0cmluZyB0YWJsZU5hbWUgKSAKKyAgICBzdG10LmNsb3NlKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGVtcHR5VGFibGUoIENvbm5lY3Rpb24gY29uLCBTdHJpbmcgdGFibGVOYW1lICkKICAgICAgICAgICAgIHRocm93cyBTUUxFeGNlcHRpb24KICAgICB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBTdGF0ZW1lbnQgc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKLSAgICAgICAgICAgIAotCSAgICBzdG10LmV4ZWN1dGUoImRlbGV0ZSAqIGZyb20gIisgdGFibGVOYW1lKTsKLQkgICAgc3RtdC5jbG9zZSgpOworCisgICAgICAgIHN0bXQuZXhlY3V0ZSgiZGVsZXRlICogZnJvbSAiKyB0YWJsZU5hbWUpOworICAgICAgICBzdG10LmNsb3NlKCk7CiAgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlKSB7Ci0JfQotCSAgICAKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgcXVlcnlUYWJsZSggQ29ubmVjdGlvbiBjb24sIFN0cmluZyB0YWJsZU5hbWUgKSAKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgcXVlcnlUYWJsZSggQ29ubmVjdGlvbiBjb24sIFN0cmluZyB0YWJsZU5hbWUgKQogICAgICAgICAgICAgdGhyb3dzIFNRTEV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgdHJ5IHsKLQkgICAgU3RhdGVtZW50IHN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7Ci0JICAgIFJlc3VsdFNldCBycyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KCJzZWxlY3QgKiBmcm9tICIrIHRhYmxlTmFtZSk7Ci0JICAgIHdoaWxlKCBycy5uZXh0KCkgKSB7IAotCSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCBycyApOwotCSAgICB9CQotCSAgICBycy5jbG9zZSgpOwotCX0gY2F0Y2goIEV4Y2VwdGlvbiBlKSB7Ci0JfQorICAgICAgICBTdGF0ZW1lbnQgc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgUmVzdWx0U2V0IHJzID0gc3RtdC5leGVjdXRlUXVlcnkoInNlbGVjdCAqIGZyb20gIisgdGFibGVOYW1lKTsKKyAgICAgICAgd2hpbGUoIHJzLm5leHQoKSApIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggcnMgKTsKKyAgICAgICAgfQorICAgICAgICBycy5jbG9zZSgpOworICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlKSB7CisgICAgfQogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy91c2VycGFzcy9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3VzZXJwYXNzL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCBiZTY2NzQ0Li5lOTQwNmZjIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3VzZXJwYXNzL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3VzZXJwYXNzL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSw3ICsxLDcgQEAKLURyb3AgdGFibGUgQV9DdXN0b21lcjsNCi0NCi1DUkVBVEUgVEFCTEUgQV9DdXN0b21lciAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikNCi0pOw0KLQ0KK0Ryb3AgdGFibGUgQV9DdXN0b21lcjsKKworQ1JFQVRFIFRBQkxFIEFfQ3VzdG9tZXIgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQorKTsKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy91c2VycGFzcy9zcWwvY3JlYXRlX3BvaW50YmFzZTEuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy91c2VycGFzcy9zcWwvY3JlYXRlX3BvaW50YmFzZTEuc3FsCmluZGV4IGNiNzRjYjQuLjQyNTM2MzMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvdXNlcnBhc3Mvc3FsL2NyZWF0ZV9wb2ludGJhc2UxLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3VzZXJwYXNzL3NxbC9jcmVhdGVfcG9pbnRiYXNlMS5zcWwKQEAgLTEsNyArMSw3IEBACi1Ecm9wIHRhYmxlIEJfQ3VzdG9tZXI7DQotDQotQ1JFQVRFIFRBQkxFIEJfQ3VzdG9tZXIgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCitEcm9wIHRhYmxlIEJfQ3VzdG9tZXI7CisKK0NSRUFURSBUQUJMRSBCX0N1c3RvbWVyICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikKKyk7CisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvdXNlcnBhc3Mvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvdXNlcnBhc3Mvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAppbmRleCAwYzgxNzFkLi42ZGQ2ODhhIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3VzZXJwYXNzL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy91c2VycGFzcy9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xICsxIEBACi1Ecm9wIHRhYmxlIEFfQ3VzdG9tZXI7DQorRHJvcCB0YWJsZSBBX0N1c3RvbWVyOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy91c2VycGFzcy9zcWwvZHJvcF9wb2ludGJhc2UxLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVjb25maWcvdXNlcnBhc3Mvc3FsL2Ryb3BfcG9pbnRiYXNlMS5zcWwKaW5kZXggZmQzNWZhNy4uYWJjYWFjYyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZWNvbmZpZy91c2VycGFzcy9zcWwvZHJvcF9wb2ludGJhc2UxLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlY29uZmlnL3VzZXJwYXNzL3NxbC9kcm9wX3BvaW50YmFzZTEuc3FsCkBAIC0xICsxIEBACi1Ecm9wIHRhYmxlIEJfQ3VzdG9tZXI7DQorRHJvcCB0YWJsZSBCX0N1c3RvbWVyOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZXBvcnQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9yZXBvcnQueG1sCmluZGV4IGY1Njc2NWYuLjhmNzVhZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcmVwb3J0LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3JlcG9ydC54bWwKQEAgLTIzLDcgKzIzLDcgQEAKIDx0YXJnZXQgbmFtZT0icmVwb3J0Ij4KIDxlY2hvIG1lc3NhZ2U9IkNvbXBhcmluZyByZXN1bHRzIHdpdGggZXhwZWN0ZWQgcmVzdWx0cyIvPgogCi0gCisKICAgICA8eHNsdCBzdHlsZT0iJHtzdHlsZXNoZWV0fSIKICAgICAgICAgICAgIGluPSIke3htbGZpbGV9IiBvdXQ9IiR7aHRtbGZpbGV9IgogICAgICAgICAgICAgYmFzZWRpcj0iLiIgZGVzdGRpcj0iLiIgLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcnVuX3Rlc3Quc2ggYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3J1bl90ZXN0LnNoCmluZGV4IGM3YTNmYTAuLmNiNGFlMDkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvcnVuX3Rlc3Quc2gKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9ydW5fdGVzdC5zaApAQCAtMTgsNyArMTgsNyBAQAogbGlzdF90ZXN0X2lkcygpewogICBlY2hvIGpkYmNfYWxsCiB9Ci0gCisKIHRlc3RfcnVuKCl7CiAgICR7UzFBU19IT01FfS9iaW4vYXNhZG1pbiBzdGFydC1kb21haW4gZG9tYWluMQogICAke1MxQVNfSE9NRX0vYmluL2FzYWRtaW4gc3RhcnQtZGF0YWJhc2UKQEAgLTM4LDEzICszOCwxMyBAQAogICBnZW5lcmF0ZV9qdW5pdF9yZXBvcnQgJHsxfQogICBjaGFuZ2VfanVuaXRfcmVwb3J0X2NsYXNzX25hbWVzCiB9Ci0gCisKIGdldF90ZXN0X3RhcmdldCgpewotCWNhc2UgJHsxfSBpbgotCQlqZGJjX2FsbCApCi0JCQlUQVJHRVQ9YWxsCi0JCQlleHBvcnQgVEFSR0VUOzsKLQllc2FjCisgICAgY2FzZSAkezF9IGluCisgICAgICAgIGpkYmNfYWxsICkKKyAgICAgICAgICAgIFRBUkdFVD1hbGwKKyAgICAgICAgICAgIGV4cG9ydCBUQVJHRVQ7OworICAgIGVzYWMKIH0KIAogT1BUPSR7MX0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGE3OGNhZWEuLmZkZDRlMzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTkgKzE1LDE5IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItYm1wLXNpbXBsZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iMTIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlL2J1aWxkLnhtbAppbmRleCA5ODFiMzQ3Li5hMzJhMTgzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGUvYnVpbGQueG1sCkBAIC00Miw3ICs0Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC01NCwxMyArNTQsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqL1NpbXBsZUJNUC5jbGFzcywgKiovU2ltcGxlQk1QSG9tZS5jbGFzcywqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KQEAgLTY5LDE0ICs2OSwxNCBAQAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtcGVyc2lzdGVuY2UtcmVzb3VyY2UtY29tbW9uIi8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX3BvaW50YmFzZS5zcWwiLz4KQEAgLTg1LDcgKzg1LDcgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLXBlcnNpc3RlbmNlLXJlc291cmNlLWNvbW1vbiIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qZGJjLWNvbW1vbiIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGUvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGUvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhCmluZGV4IDQxM2ZlNjUuLjQ2NDhmOTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZS9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKQEAgLTI5LDY2ICsyOSw2NiBAQAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogCi0gCVNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOwotCVN0cmluZyB0ZXN0U3VpdGUgPSAiamRiY3NpbXBsZSAiOworICAgICBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKKyAgICBTdHJpbmcgdGVzdFN1aXRlID0gImpkYmNzaW1wbGUgIjsKIAogICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICBPYmplY3Qgb2JqUmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVCTVBIb21lIik7Ci0JU2ltcGxlQk1QSG9tZSBzaW1wbGVCTVBIb21lID0gKFNpbXBsZUJNUEhvbWUpCisgICAgU2ltcGxlQk1QSG9tZSBzaW1wbGVCTVBIb21lID0gKFNpbXBsZUJNUEhvbWUpCiAgICAgICAgIGphdmF4LnJtaS5Qb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqUmVmLCBTaW1wbGVCTVBIb21lLmNsYXNzKTsKIAogICAgICAgICBTaW1wbGVCTVAgc2ltcGxlQk1QID0gc2ltcGxlQk1QSG9tZS5jcmVhdGUoKTsKLSAgICAgICAgCisKICAgICAgICAgaWYgKCBzaW1wbGVCTVAudGVzdDEoMTApICkgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QxIDogIiwgc3RhdC5QQVNTKTsKLQl9IGVsc2UgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QxIDogIiwgc3RhdC5GQUlMKTsKLQl9CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDEgOiAiLCBzdGF0LlBBU1MpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDEgOiAiLCBzdGF0LkZBSUwpOworICAgIH0KIAotCWlmICggc2ltcGxlQk1QLnRlc3QyKCkgKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDIgOiAiLCBzdGF0LlBBU1MpOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDIgOiAiLCBzdGF0LkZBSUwpOwotCX0KLSAgICAgICAgCi0JaWYgKCBzaW1wbGVCTVAudGVzdDMoKSApIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MyA6ICIsIHN0YXQuUEFTUyk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MyA6ICIsIHN0YXQuRkFJTCk7Ci0JfQorICAgIGlmICggc2ltcGxlQk1QLnRlc3QyKCkgKSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDIgOiAiLCBzdGF0LlBBU1MpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDIgOiAiLCBzdGF0LkZBSUwpOworICAgIH0KIAotCWlmICggc2ltcGxlQk1QLnRlc3Q0KCkgKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDQgOiAiLCBzdGF0LlBBU1MpOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDQgOiAiLCBzdGF0LkZBSUwpOwotCX0KKyAgICBpZiAoIHNpbXBsZUJNUC50ZXN0MygpICkgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QzIDogIiwgc3RhdC5QQVNTKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QzIDogIiwgc3RhdC5GQUlMKTsKKyAgICB9CiAKLQlpZiAoIHNpbXBsZUJNUC50ZXN0NSgpICkgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3Q1IDogIiwgc3RhdC5QQVNTKTsKLQl9IGVsc2UgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3Q1IDogIiwgc3RhdC5GQUlMKTsKLQl9CisgICAgaWYgKCBzaW1wbGVCTVAudGVzdDQoKSApIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0NCA6ICIsIHN0YXQuUEFTUyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0NCA6ICIsIHN0YXQuRkFJTCk7CisgICAgfQogCi0JaWYgKCBzaW1wbGVCTVAudGVzdDYoKSApIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0NiA6ICIsIHN0YXQuUEFTUyk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0NiA6ICIsIHN0YXQuRkFJTCk7Ci0JfQorICAgIGlmICggc2ltcGxlQk1QLnRlc3Q1KCkgKSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDUgOiAiLCBzdGF0LlBBU1MpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDUgOiAiLCBzdGF0LkZBSUwpOworICAgIH0KIAotCWlmICggc2ltcGxlQk1QLnRlc3Q3KCkgKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDcgOiAiLCBzdGF0LlBBU1MpOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDcgOiAiLCBzdGF0LkZBSUwpOwotCX0KKyAgICBpZiAoIHNpbXBsZUJNUC50ZXN0NigpICkgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3Q2IDogIiwgc3RhdC5QQVNTKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3Q2IDogIiwgc3RhdC5GQUlMKTsKKyAgICB9CiAKLQlpZiAoIHNpbXBsZUJNUC50ZXN0OCgpICkgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3Q4IDogIiwgc3RhdC5QQVNTKTsKLQl9IGVsc2UgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3Q4IDogIiwgc3RhdC5GQUlMKTsKLQl9CisgICAgaWYgKCBzaW1wbGVCTVAudGVzdDcoKSApIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0NyA6ICIsIHN0YXQuUEFTUyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0NyA6ICIsIHN0YXQuRkFJTCk7CisgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKLSAgICAKLSAgICAgICAgCisgICAgaWYgKCBzaW1wbGVCTVAudGVzdDgoKSApIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0OCA6ICIsIHN0YXQuUEFTUyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0OCA6ICIsIHN0YXQuRkFJTCk7CisgICAgfQorCisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKKworCiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGUvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggZTA5YzI3Ni4uZmZlMDUwOSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGUvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC01Nyw2ICs1Nyw2IEBACiAgICAgICA8dHJhbnMtYXR0cmlidXRlPlJlcXVpcmVkPC90cmFucy1hdHRyaWJ1dGU+CiAgICAgPC9jb250YWluZXItdHJhbnNhY3Rpb24+CiAgIDwvYXNzZW1ibHktZGVzY3JpcHRvcj4KLSAgICAgIAorCiA8L2VqYi1qYXI+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZS9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCmluZGV4IDAyMjJjZDcuLjVjYjk0NDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGUvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQpAQCAtMzEsMTc1ICszMSwxNzUgQEAKICAgICBwcm90ZWN0ZWQgRGF0YVNvdXJjZSBkczsKIAogICAgIHB1YmxpYyB2b2lkIHNldEVudGl0eUNvbnRleHQoRW50aXR5Q29udGV4dCBlbnRpdHlDb250ZXh0KSB7Ci0JQ29udGV4dCBjb250ZXh0ID0gbnVsbDsKLQl0cnkgewotCSAgICBjb250ZXh0ICAgID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JICAgIGRzID0gKERhdGFTb3VyY2UpIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKLQl9IGNhdGNoIChOYW1pbmdFeGNlcHRpb24gZSkgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJjYW50IGZpbmQgZGF0YXNvdXJjZSIpOwotCX0KKyAgICBDb250ZXh0IGNvbnRleHQgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIGNvbnRleHQgICAgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgZHMgPSAoRGF0YVNvdXJjZSkgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZSIpOworICAgIH0gY2F0Y2ggKE5hbWluZ0V4Y2VwdGlvbiBlKSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImNhbnQgZmluZCBkYXRhc291cmNlIik7CisgICAgfQogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlsqKlNpbXBsZUJNUEJlYW4qKl0gRG9uZSB3aXRoIHNldEVudGl0eUNvbnRleHQuLi4uIik7CiAgICAgfQogCiAgICAgcHVibGljIEludGVnZXIgZWpiQ3JlYXRlKCkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7Ci0JcmV0dXJuIG5ldyBJbnRlZ2VyKDEpOworICAgIHJldHVybiBuZXcgSW50ZWdlcigxKTsKICAgICB9CiAKICAgICAvKiBHZXQgMTAgY29ubmVjdGlvbnMgaW4gYSBidW5jaCBhbmQgdGhlbiBjbG9zZSB0aGVtKi8KICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MSggaW50IG51bVJ1bnMgKSB7Ci0JYm9vbGVhbiBwYXNzZWQgPSB0cnVlOwotCUNvbm5lY3Rpb25bXSBjb25ucyA9IG5ldyBDb25uZWN0aW9uWzEwXTsKKyAgICBib29sZWFuIHBhc3NlZCA9IHRydWU7CisgICAgQ29ubmVjdGlvbltdIGNvbm5zID0gbmV3IENvbm5lY3Rpb25bMTBdOwogICAgICAgICBmb3IoIGludCBpID0gMDsgaSA8IG51bVJ1bnM7IGkrKyApIHsKLQkgICAgdHJ5IHsKLQkgICAgICAgIGNvbm5zW2ldID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCSAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICAgICAgcGFzc2VkID0gZmFsc2U7Ci0JICAgIH0gLypmaW5hbGx5IHsKLQkgICAgICAgIGlmICggY29ubiAhPSBudWxsICkgewotCSAgICAgICAgICAgIHRyeSB7Ci0JICAgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKLQkgICAgCSAgICB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9ICAgIAotCSAgICAgICAgfQotCSAgICB9ICovCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBjb25uc1tpXSA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgICAgICB9IC8qZmluYWxseSB7CisgICAgICAgICAgICBpZiAoIGNvbm4gIT0gbnVsbCApIHsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBjb25uLmNsb3NlKCk7CisgICAgICAgICAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQorICAgICAgICAgICAgfQorICAgICAgICB9ICovCiAgICAgICAgIH0KLSAgICAgICAgCi0JZm9yIChpbnQgaSA9IDAgOyBpIDwgbnVtUnVucztpKysgKSB7Ci0JICAgIHRyeSB7Ci0JICAgICAgICBjb25uc1tpXS5jbG9zZSgpOwotCSAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSkgewotCSAgICAgICAgcGFzc2VkID0gZmFsc2U7Ci0JICAgIH0KLQl9Ci0JcmV0dXJuIHBhc3NlZDsKKworICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IG51bVJ1bnM7aSsrICkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgY29ubnNbaV0uY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBwYXNzZWQ7CiAgICAgfQogCiAgICAgLyogR2V0IGEgc2luZ2xlIGNvbm5lY3Rpb24gYW5kIGNsb3NlIGl0ICovCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDIoKSB7CiAgICAgICAgIENvbm5lY3Rpb24gY29ubiA9IG51bGw7CiAgICAgICAgIGJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKLQl0cnkgewotCSAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIHBhc3NlZCA9IGZhbHNlOwotCX0gZmluYWxseSB7Ci0JICAgIGlmICggY29ubiAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsKLQkgICAgICAgICAgICBjb25uLmNsb3NlKCk7Ci0JICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9ICAgIAotCSAgICB9Ci0gICAgICAgIH0gCi0gICAgICAgIAotCXJldHVybiBwYXNzZWQ7CisgICAgdHJ5IHsKKyAgICAgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICBwYXNzZWQgPSBmYWxzZTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBpZiAoIGNvbm4gIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgY29ubi5jbG9zZSgpOworICAgICAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQorICAgICAgICB9CisgICAgICAgIH0KKworICAgIHJldHVybiBwYXNzZWQ7CiAgICAgfQotICAgCi0gICAgLyogVXNlIHRoZSBnZXRDb25uZWN0aW9uIEFQSSBpbiB0aGUgQ29ubmVjdG9yUnVudGltZSAKKworICAgIC8qIFVzZSB0aGUgZ2V0Q29ubmVjdGlvbiBBUEkgaW4gdGhlIENvbm5lY3RvclJ1bnRpbWUKICAgICAgKiBVc2UgYSBqZGJjIHJlc291cmNlIGpuZGkgbmFtZQogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIHRlc3QzKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tUnVubmluZyB0ZXN0My0tLS0tLS0tLS0tLS0tLSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tUnVubmluZyB0ZXN0My0tLS0tLS0tLS0tLS0tLSIpOwogICAgICAgICBDb25uZWN0aW9uIGNvbiA9IG51bGw7Ci0JQ29ubmVjdG9yUnVudGltZSBydW50aW1lID0gQ29ubmVjdG9yUnVudGltZS5nZXRSdW50aW1lKCk7Ci0JCi0JdHJ5IHsKLQkgICAgY29uID0gcnVudGltZS5nZXRDb25uZWN0aW9uKCAiamRiYy9zMXFlREIiICk7Ci0JfSBjYXRjaCggU1FMRXhjZXB0aW9uIHNxbGUgKSB7Ci0JICAgIHNxbGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIHJldHVybiBmYWxzZTsKLQl9CisgICAgQ29ubmVjdG9yUnVudGltZSBydW50aW1lID0gQ29ubmVjdG9yUnVudGltZS5nZXRSdW50aW1lKCk7CiAKLQlyZXR1cm4gdHJ1ZTsKKyAgICB0cnkgeworICAgICAgICBjb24gPSBydW50aW1lLmdldENvbm5lY3Rpb24oICJqZGJjL3MxcWVEQiIgKTsKKyAgICB9IGNhdGNoKCBTUUxFeGNlcHRpb24gc3FsZSApIHsKKyAgICAgICAgc3FsZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIC8qIFVzZSB0aGUgZ2V0Q29ubmVjdGlvbiBBUEkgaW4gdGhlIENvbm5lY3RvclJ1bnRpbWUgCisgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLyogVXNlIHRoZSBnZXRDb25uZWN0aW9uIEFQSSBpbiB0aGUgQ29ubmVjdG9yUnVudGltZQogICAgICAqIFVzZSBhIFBNRiByZXNvdXJjZQogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIHRlc3Q0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tUnVubmluZyB0ZXN0NC0tLS0tLS0tLS0tLS0iKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLVJ1bm5pbmcgdGVzdDQtLS0tLS0tLS0tLS0tIik7CiAgICAgICAgIENvbm5lY3Rpb24gY29uID0gbnVsbDsKLQlDb25uZWN0b3JSdW50aW1lIHJ1bnRpbWUgPSBDb25uZWN0b3JSdW50aW1lLmdldFJ1bnRpbWUoKTsKLQkKLQl0cnkgewotCSAgICBjb24gPSBydW50aW1lLmdldENvbm5lY3Rpb24oICJqZG8vczFxZVBNIiApOwotCX0gY2F0Y2goIEV4Y2VwdGlvbiBzcWxlICkgewotCSAgICBzcWxlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICByZXR1cm4gZmFsc2U7Ci0JfQorICAgIENvbm5lY3RvclJ1bnRpbWUgcnVudGltZSA9IENvbm5lY3RvclJ1bnRpbWUuZ2V0UnVudGltZSgpOwogCi0JcmV0dXJuIHRydWU7CisgICAgdHJ5IHsKKyAgICAgICAgY29uID0gcnVudGltZS5nZXRDb25uZWN0aW9uKCAiamRvL3MxcWVQTSIgKTsKKyAgICB9IGNhdGNoKCBFeGNlcHRpb24gc3FsZSApIHsKKyAgICAgICAgc3FsZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIC8qIFVzZSB0aGUgZ2V0Q29ubmVjdGlvbiBBUEkgaW4gdGhlIENvbm5lY3RvclJ1bnRpbWUgCisgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLyogVXNlIHRoZSBnZXRDb25uZWN0aW9uIEFQSSBpbiB0aGUgQ29ubmVjdG9yUnVudGltZQogICAgICAqIFVzZSBhIGpkYmMgcmVzb3VyY2Ugam5kaSBuYW1lCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDUoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS1SdW5uaW5nIHRlc3Q1LS0tLS0tLS0tLS0tLS0tIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS1SdW5uaW5nIHRlc3Q1LS0tLS0tLS0tLS0tLS0tIik7CiAgICAgICAgIENvbm5lY3Rpb24gY29uID0gbnVsbDsKLQlDb25uZWN0b3JSdW50aW1lIHJ1bnRpbWUgPSBDb25uZWN0b3JSdW50aW1lLmdldFJ1bnRpbWUoKTsKLQkKLQl0cnkgewotCSAgICBjb24gPSBydW50aW1lLmdldENvbm5lY3Rpb24oICJqZGJjL3MxcWVEQiIsICJwYnB1YmxpYyIsICJwYnB1YmxpYyIgKTsKLQl9IGNhdGNoKCBFeGNlcHRpb24gc3FsZSApIHsKLQkgICAgc3FsZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgcmV0dXJuIGZhbHNlOwotCX0KKyAgICBDb25uZWN0b3JSdW50aW1lIHJ1bnRpbWUgPSBDb25uZWN0b3JSdW50aW1lLmdldFJ1bnRpbWUoKTsKIAotCXJldHVybiB0cnVlOworICAgIHRyeSB7CisgICAgICAgIGNvbiA9IHJ1bnRpbWUuZ2V0Q29ubmVjdGlvbiggImpkYmMvczFxZURCIiwgInBicHVibGljIiwgInBicHVibGljIiApOworICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBzcWxlICkgeworICAgICAgICBzcWxlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgLyogVXNlIHRoZSBnZXRDb25uZWN0aW9uIEFQSSBpbiB0aGUgQ29ubmVjdG9yUnVudGltZSAKKyAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvKiBVc2UgdGhlIGdldENvbm5lY3Rpb24gQVBJIGluIHRoZSBDb25uZWN0b3JSdW50aW1lCiAgICAgICogVXNlIGEgUE1GIHJlc291cmNlCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDYoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS1SdW5uaW5nIHRlc3Q2LS0tLS0tLS0tLS0tLSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tUnVubmluZyB0ZXN0Ni0tLS0tLS0tLS0tLS0iKTsKICAgICAgICAgQ29ubmVjdGlvbiBjb24gPSBudWxsOwotCUNvbm5lY3RvclJ1bnRpbWUgcnVudGltZSA9IENvbm5lY3RvclJ1bnRpbWUuZ2V0UnVudGltZSgpOwotCQotCXRyeSB7Ci0JICAgIGNvbiA9IHJ1bnRpbWUuZ2V0Q29ubmVjdGlvbiggImpkby9zMXFlUE0iLCAicGJwdWJsaWMiLCAicGJwdWJsaWMiICk7Ci0JfSBjYXRjaCggRXhjZXB0aW9uIHNxbGUgKSB7Ci0JICAgIHNxbGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIHJldHVybiBmYWxzZTsKLQl9CisgICAgQ29ubmVjdG9yUnVudGltZSBydW50aW1lID0gQ29ubmVjdG9yUnVudGltZS5nZXRSdW50aW1lKCk7CiAKLQlyZXR1cm4gdHJ1ZTsKKyAgICB0cnkgeworICAgICAgICBjb24gPSBydW50aW1lLmdldENvbm5lY3Rpb24oICJqZG8vczFxZVBNIiwgInBicHVibGljIiwgInBicHVibGljIiApOworICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBzcWxlICkgeworICAgICAgICBzcWxlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgLyogVXNlIHRoZSBnZXRDb25uZWN0aW9uIEFQSSBpbiB0aGUgQ29ubmVjdG9yUnVudGltZSAKKyAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvKiBVc2UgdGhlIGdldENvbm5lY3Rpb24gQVBJIGluIHRoZSBDb25uZWN0b3JSdW50aW1lCiAgICAgICogVXNlIGEgamRiYyByZXNvdXJjZSBqbmRpIG5hbWUKICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0NygpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLVJ1bm5pbmcgdGVzdDctLS0tLS0tLS0tLS0tLS0iKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLVJ1bm5pbmcgdGVzdDctLS0tLS0tLS0tLS0tLS0iKTsKICAgICAgICAgQ29ubmVjdGlvbiBjb24gPSBudWxsOwotCUNvbm5lY3RvclJ1bnRpbWUgcnVudGltZSA9IENvbm5lY3RvclJ1bnRpbWUuZ2V0UnVudGltZSgpOwotCQotCXRyeSB7Ci0JICAgIGNvbiA9IHJ1bnRpbWUuZ2V0Q29ubmVjdGlvbiggImpkYmMvbm90cHJlc2VudCIgKTsKLQl9IGNhdGNoKCBFeGNlcHRpb24gc3FsZSApIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYXVnaHQgZXhwZWN0ZWQgZXhjZXB0aW9uIik7Ci0JICAgIHNxbGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIHJldHVybiB0cnVlOwotCX0KKyAgICBDb25uZWN0b3JSdW50aW1lIHJ1bnRpbWUgPSBDb25uZWN0b3JSdW50aW1lLmdldFJ1bnRpbWUoKTsKIAotCXJldHVybiBmYWxzZTsKKyAgICB0cnkgeworICAgICAgICBjb24gPSBydW50aW1lLmdldENvbm5lY3Rpb24oICJqZGJjL25vdHByZXNlbnQiICk7CisgICAgfSBjYXRjaCggRXhjZXB0aW9uIHNxbGUgKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2F1Z2h0IGV4cGVjdGVkIGV4Y2VwdGlvbiIpOworICAgICAgICBzcWxlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICAvKiBVc2UgdGhlIGdldENvbm5lY3Rpb24gQVBJIGluIHRoZSBDb25uZWN0b3JSdW50aW1lIAorICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvKiBVc2UgdGhlIGdldENvbm5lY3Rpb24gQVBJIGluIHRoZSBDb25uZWN0b3JSdW50aW1lCiAgICAgICogVXNlIGEgUE1GIHJlc291cmNlCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDgoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS1SdW5uaW5nIHRlc3Q4LS0tLS0tLS0tLS0tLSIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tUnVubmluZyB0ZXN0OC0tLS0tLS0tLS0tLS0iKTsKICAgICAgICAgQ29ubmVjdGlvbiBjb24gPSBudWxsOwotCUNvbm5lY3RvclJ1bnRpbWUgcnVudGltZSA9IENvbm5lY3RvclJ1bnRpbWUuZ2V0UnVudGltZSgpOwotCQotCXRyeSB7Ci0JICAgIGNvbiA9IHJ1bnRpbWUuZ2V0Q29ubmVjdGlvbiggImpkby9ub3RwcmVzZW50IiApOwotCX0gY2F0Y2goIEV4Y2VwdGlvbiBzcWxlICkgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhdWdodCBleHBlY3RlZCBleGNlcHRpb24iKTsKLQkgICAgc3FsZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgcmV0dXJuIHRydWU7Ci0JfQorICAgIENvbm5lY3RvclJ1bnRpbWUgcnVudGltZSA9IENvbm5lY3RvclJ1bnRpbWUuZ2V0UnVudGltZSgpOwogCi0JcmV0dXJuIGZhbHNlOworICAgIHRyeSB7CisgICAgICAgIGNvbiA9IHJ1bnRpbWUuZ2V0Q29ubmVjdGlvbiggImpkby9ub3RwcmVzZW50IiApOworICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBzcWxlICkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhdWdodCBleHBlY3RlZCBleGNlcHRpb24iKTsKKyAgICAgICAgc3FsZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7fQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGUvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGUvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IGU0OTE0ZjYuLmYyNTYwNzYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsNyArMSw3IEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQotDQotQ1JFQVRFIFRBQkxFIE9fQ3VzdG9tZXIgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCitEcm9wIHRhYmxlIE9fQ3VzdG9tZXI7CisKK0NSRUFURSBUQUJMRSBPX0N1c3RvbWVyICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikKKyk7CisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IDcwZDFmY2MuLmQ4NTRiOTUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGUvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbApAQCAtMSArMSBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlbXlzcWwvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlbXlzcWwvYnVpbGQucHJvcGVydGllcwppbmRleCBmMTI0ZWViLi5iNjg0MWJlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZW15c3FsL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVteXNxbC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOSArMTUsMTkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1ibXAtc2ltcGxlbXlzcWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IjEyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZW15c3FsL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlbXlzcWwvYnVpbGQueG1sCmluZGV4IDViZGFmYTYuLjRkMjRjODkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlbXlzcWwvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlbXlzcWwvYnVpbGQueG1sCkBAIC00MCw3ICs0MCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC01MiwxMyArNTIsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqL1NpbXBsZUJNUC5jbGFzcywgKiovU2ltcGxlQk1QSG9tZS5jbGFzcywqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1teXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX215c3FsLnNxbCIvPgpAQCAtNjYsMTQgKzY2LDE0IEBACiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qZGJjLW15c3FsLWNvbW1vbiIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1teXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX215c3FsLnNxbCIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLW15c3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX215c3FsLnNxbCIvPgpAQCAtODEsNyArODEsNyBAQAogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWpkYmMtbXlzcWwtY29tbW9uIi8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZW15c3FsL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlbXlzcWwvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhCmluZGV4IGIyYTJhMWEuLjZlYjI1NGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlbXlzcWwvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlbXlzcWwvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhCkBAIC0yOSwzNyArMjksMzcgQEAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKIAotIAlTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKLQlTdHJpbmcgdGVzdFN1aXRlID0gImpkYmNzaW1wbGVteXNxbCAiOworICAgICBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKKyAgICBTdHJpbmcgdGVzdFN1aXRlID0gImpkYmNzaW1wbGVteXNxbCAiOwogCiAgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgIE9iamVjdCBvYmpSZWYgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZUJNUEhvbWUiKTsKLQlTaW1wbGVCTVBIb21lIHNpbXBsZW15c3FsQk1QSG9tZSA9IChTaW1wbGVCTVBIb21lKQorICAgIFNpbXBsZUJNUEhvbWUgc2ltcGxlbXlzcWxCTVBIb21lID0gKFNpbXBsZUJNUEhvbWUpCiAgICAgICAgIGphdmF4LnJtaS5Qb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqUmVmLCBTaW1wbGVCTVBIb21lLmNsYXNzKTsKIAogICAgICAgICBTaW1wbGVCTVAgc2ltcGxlbXlzcWxCTVAgPSBzaW1wbGVteXNxbEJNUEhvbWUuY3JlYXRlKCk7CiAKICAgICAgICAgaWYgKCBzaW1wbGVteXNxbEJNUC50ZXN0MSgxMCkgKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDEgOiAiLCBzdGF0LlBBU1MpOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDEgOiAiLCBzdGF0LkZBSUwpOwotCX0KKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MSA6ICIsIHN0YXQuUEFTUyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MSA6ICIsIHN0YXQuRkFJTCk7CisgICAgfQogCi0JaWYgKCBzaW1wbGVteXNxbEJNUC50ZXN0MigpICkgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QyIDogIiwgc3RhdC5QQVNTKTsKLQl9IGVsc2UgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QyIDogIiwgc3RhdC5GQUlMKTsKLQl9CisgICAgaWYgKCBzaW1wbGVteXNxbEJNUC50ZXN0MigpICkgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QyIDogIiwgc3RhdC5QQVNTKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QyIDogIiwgc3RhdC5GQUlMKTsKKyAgICB9CiAKLQlpZiAoIHNpbXBsZW15c3FsQk1QLnRlc3QzKCkgKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDMgOiAiLCBzdGF0LlBBU1MpOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDMgOiAiLCBzdGF0LkZBSUwpOwotCX0KKyAgICBpZiAoIHNpbXBsZW15c3FsQk1QLnRlc3QzKCkgKSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDMgOiAiLCBzdGF0LlBBU1MpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDMgOiAiLCBzdGF0LkZBSUwpOworICAgIH0KIAotCVN5c3RlbS5vdXQucHJpbnRsbigiamRiYyBzaW1wbGVteXNxbCBzdGF0dXM6ICIpOwotCXN0YXQucHJpbnRTdW1tYXJ5KCk7Ci0gICAgCi0gICAgICAgIAorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiamRiYyBzaW1wbGVteXNxbCBzdGF0dXM6ICIpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CisKKwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlbXlzcWwvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlbXlzcWwvZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCAzNjYyM2E1Li5hZjE2YzhiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZW15c3FsL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVteXNxbC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC01Nyw2ICs1Nyw2IEBACiAgICAgICA8dHJhbnMtYXR0cmlidXRlPlJlcXVpcmVkPC90cmFucy1hdHRyaWJ1dGU+CiAgICAgPC9jb250YWluZXItdHJhbnNhY3Rpb24+CiAgIDwvYXNzZW1ibHktZGVzY3JpcHRvcj4KLSAgICAgIAorCiA8L2VqYi1qYXI+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlbXlzcWwvZWpiL1NpbXBsZUJNUEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlbXlzcWwvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQppbmRleCAyNTU2YmY3Li4xMjcwZmFhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZW15c3FsL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVteXNxbC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCkBAIC0zMCwxMDIgKzMwLDEwMiBAQAogICAgIHByb3RlY3RlZCBEYXRhU291cmNlIGRzOwogCiAgICAgcHVibGljIHZvaWQgc2V0RW50aXR5Q29udGV4dChFbnRpdHlDb250ZXh0IGVudGl0eUNvbnRleHQpIHsKLQlDb250ZXh0IGNvbnRleHQgPSBudWxsOwotCXRyeSB7Ci0JICAgIGNvbnRleHQgICAgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkgICAgZHMgPSAoRGF0YVNvdXJjZSkgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZSIpOwotCX0gY2F0Y2ggKE5hbWluZ0V4Y2VwdGlvbiBlKSB7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImNhbnQgZmluZCBkYXRhc291cmNlIik7Ci0JfQorICAgIENvbnRleHQgY29udGV4dCA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgY29udGV4dCAgICA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgICAgICBkcyA9IChEYXRhU291cmNlKSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7CisgICAgfSBjYXRjaCAoTmFtaW5nRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiY2FudCBmaW5kIGRhdGFzb3VyY2UiKTsKKyAgICB9CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiWyoqU2ltcGxlQk1QQmVhbioqXSBEb25lIHdpdGggc2V0RW50aXR5Q29udGV4dC4uLi4iKTsKICAgICB9CiAKICAgICBwdWJsaWMgSW50ZWdlciBlamJDcmVhdGUoKSB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsKLQlyZXR1cm4gbmV3IEludGVnZXIoMSk7CisgICAgcmV0dXJuIG5ldyBJbnRlZ2VyKDEpOwogICAgIH0KIAogICAgIC8qIEdldCAxMCBjb25uZWN0aW9ucyBpbiBhIGJ1bmNoIGFuZCB0aGVuIGNsb3NlIHRoZW0qLwogICAgIHB1YmxpYyBib29sZWFuIHRlc3QxKCBpbnQgbnVtUnVucyApIHsKLQlib29sZWFuIHBhc3NlZCA9IHRydWU7Ci0JQ29ubmVjdGlvbltdIGNvbm5zID0gbmV3IENvbm5lY3Rpb25bMTBdOworICAgIGJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKKyAgICBDb25uZWN0aW9uW10gY29ubnMgPSBuZXcgQ29ubmVjdGlvblsxMF07CiAgICAgICAgIGZvciggaW50IGkgPSAwOyBpIDwgbnVtUnVuczsgaSsrICkgewotCSAgICB0cnkgewotCSAgICAgICAgY29ubnNbaV0gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgICAgICBwYXNzZWQgPSBmYWxzZTsKLQkgICAgfSAvKmZpbmFsbHkgewotCSAgICAgICAgaWYgKCBjb25uICE9IG51bGwgKSB7Ci0JICAgICAgICAgICAgdHJ5IHsKLQkgICAgICAgICAgICAgICAgY29ubi5jbG9zZSgpOwotCSAgICAJICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30gICAgCi0JICAgICAgICB9Ci0JICAgIH0gKi8KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGNvbm5zW2ldID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAgICAgIH0gLypmaW5hbGx5IHsKKyAgICAgICAgICAgIGlmICggY29ubiAhPSBudWxsICkgeworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CisgICAgICAgICAgICB9CisgICAgICAgIH0gKi8KICAgICAgICAgfQotICAgICAgICAKLQlmb3IgKGludCBpID0gMCA7IGkgPCBudW1SdW5zO2krKyApIHsKLQkgICAgdHJ5IHsKLQkgICAgICAgIGNvbm5zW2ldLmNsb3NlKCk7Ci0JICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlKSB7Ci0JICAgICAgICBwYXNzZWQgPSBmYWxzZTsKLQkgICAgfQotCX0KLQlyZXR1cm4gcGFzc2VkOworCisgICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgbnVtUnVucztpKysgKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBjb25uc1tpXS5jbG9zZSgpOworICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHBhc3NlZDsKICAgICB9CiAKICAgICAvKiBHZXQgYSBzaW5nbGUgY29ubmVjdGlvbiBhbmQgY2xvc2UgaXQgKi8KICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MigpIHsKICAgICAgICAgQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKICAgICAgICAgYm9vbGVhbiBwYXNzZWQgPSB0cnVlOwotCXRyeSB7Ci0JICAgIGNvbm4gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgcGFzc2VkID0gZmFsc2U7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKCBjb25uICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgewotCSAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKLQkgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30gICAgCi0JICAgIH0KLSAgICAgICAgfSAKLSAgICAgICAgCi0JcmV0dXJuIHBhc3NlZDsKKyAgICB0cnkgeworICAgICAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmICggY29ubiAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjb25uLmNsb3NlKCk7CisgICAgICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CisgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgcmV0dXJuIHBhc3NlZDsKICAgICB9Ci0gICAKKwogICAgIC8qIEdldCBhIHNpbmdsZSBjb25uZWN0aW9uIGFuZCBkbyBzb21lIERCIG9wZXJhdGlvbnMgKi8KICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MygpIHsKICAgICAgICAgQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKLQlTdGF0ZW1lbnQgc3RtdCA9IG51bGw7Ci0JUmVzdWx0U2V0IHJzID0gbnVsbDsKKyAgICBTdGF0ZW1lbnQgc3RtdCA9IG51bGw7CisgICAgUmVzdWx0U2V0IHJzID0gbnVsbDsKIAogICAgICAgICBib29sZWFuIHBhc3NlZCA9IHRydWU7Ci0JdHJ5IHsKLQkgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQkgICAgc3RtdCA9IGNvbm4uY3JlYXRlU3RhdGVtZW50KCk7Ci0JICAgIHN0bXQuZXhlY3V0ZVVwZGF0ZSgiSU5TRVJUIElOVE8gT19DVVNUT01FUiBWQUxVRVMgKDAsJ2FiY2QnKSIpOwotCSAgICBzdG10LmV4ZWN1dGVVcGRhdGUoIklOU0VSVCBJTlRPIE9fQ1VTVE9NRVIgVkFMVUVTICgxLCdwcXJzJykiKTsKKyAgICB0cnkgeworICAgICAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICBzdG10ID0gY29ubi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgc3RtdC5leGVjdXRlVXBkYXRlKCJJTlNFUlQgSU5UTyBPX0NVU1RPTUVSIFZBTFVFUyAoMCwnYWJjZCcpIik7CisgICAgICAgIHN0bXQuZXhlY3V0ZVVwZGF0ZSgiSU5TRVJUIElOVE8gT19DVVNUT01FUiBWQUxVRVMgKDEsJ3BxcnMnKSIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbnNlcnRlZCB2YWx1ZXMgT0siKTsKLQkgICAgcnMgPSBzdG10LmV4ZWN1dGVRdWVyeSgiU0VMRUNUICogRlJPTSBPX0NVU1RPTUVSIik7Ci0JICAgIHdoaWxlKCBycy5uZXh0KCkgKSB7Ci0JICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocnMuZ2V0SW50KCJjX2lkIikpOwotCSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJzLmdldFN0cmluZygiY19waG9uZSIpKTsKLQkgICAgfQotCSAgICAKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICBwYXNzZWQgPSBmYWxzZTsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9IGZpbmFsbHkgewotCSAgICBpZiAocnMgIT0gbnVsbCkgewotCSAgICAgICAgdHJ5IHsgcnMuY2xvc2UoKTsgfWNhdGNoKCBFeGNlcHRpb24gZTEpIHt9Ci0JICAgIH0KLQkgICAgaWYgKHN0bXQgIT0gbnVsbCkgewotCSAgICAgICAgdHJ5IHsgc3RtdC5jbG9zZSgpOyB9Y2F0Y2goRXhjZXB0aW9uIGUxKSB7fQotCSAgICB9Ci0JICAgIGlmICggY29ubiAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsgY29ubi5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9ICAgIAotCSAgICB9Ci0gICAgICAgIH0gCi0gICAgICAgIAotCXJldHVybiBwYXNzZWQ7CisgICAgICAgIHJzID0gc3RtdC5leGVjdXRlUXVlcnkoIlNFTEVDVCAqIEZST00gT19DVVNUT01FUiIpOworICAgICAgICB3aGlsZSggcnMubmV4dCgpICkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJzLmdldEludCgiY19pZCIpKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihycy5nZXRTdHJpbmcoImNfcGhvbmUiKSk7CisgICAgICAgIH0KKworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmIChycyAhPSBudWxsKSB7CisgICAgICAgICAgICB0cnkgeyBycy5jbG9zZSgpOyB9Y2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQorICAgICAgICBpZiAoc3RtdCAhPSBudWxsKSB7CisgICAgICAgICAgICB0cnkgeyBzdG10LmNsb3NlKCk7IH1jYXRjaChFeGNlcHRpb24gZTEpIHt9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBjb25uICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeyBjb25uLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQorICAgICAgICB9CisKKyAgICByZXR1cm4gcGFzc2VkOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7fQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVteXNxbC9zcWwvY3JlYXRlX215c3FsLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlbXlzcWwvc3FsL2NyZWF0ZV9teXNxbC5zcWwKaW5kZXggZGQzMTU5OS4uZjEzZmY4YiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVteXNxbC9zcWwvY3JlYXRlX215c3FsLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZW15c3FsL3NxbC9jcmVhdGVfbXlzcWwuc3FsCkBAIC0xLDcgKzEsNyBAQAotRHJvcCB0YWJsZSBPX0NVU1RPTUVSOw0KLQ0KLUNSRUFURSBUQUJMRSBPX0NVU1RPTUVSICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQorRHJvcCB0YWJsZSBPX0NVU1RPTUVSOworCitDUkVBVEUgVEFCTEUgT19DVVNUT01FUiAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZW15c3FsL3NxbC9kcm9wX215c3FsLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlbXlzcWwvc3FsL2Ryb3BfbXlzcWwuc3FsCmluZGV4IDcwZDFmY2MuLmQ4NTRiOTUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlbXlzcWwvc3FsL2Ryb3BfbXlzcWwuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlbXlzcWwvc3FsL2Ryb3BfbXlzcWwuc3FsCkBAIC0xICsxIEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVvcmEvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlb3JhL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOGNkZDVhYy4uNTBhYzUwMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVvcmEvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZW9yYS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOSArMTUsMTkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1ibXAtc2ltcGxlb3JhIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIxMiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVvcmEvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVvcmEvYnVpbGQueG1sCmluZGV4IGIzMDJkY2YuLmVjZGZkYWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlb3JhL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZW9yYS9idWlsZC54bWwKQEAgLTQwLDcgKzQwLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTUyLDEzICs1MiwxMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqLyouY2xhc3MiIC8+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovU2ltcGxlQk1QLmNsYXNzLCAqKi9TaW1wbGVCTVBIb21lLmNsYXNzLCoqLypDbGllbnQqLmNsYXNzIiAvPgogICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWpkYmMtb3JhY2xlLWNvbW1vbiIvPgogCkBAIC03MSwxNCArNzEsMTQgQEAKICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1vcmFjbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qZGJjLW9yYWNsZS1jb21tb24iLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlb3JhL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlb3JhL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQppbmRleCAxZDU0ZWNmLi43MzA5MDYwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZW9yYS9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVvcmEvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhCkBAIC0yOSwzOSArMjksMzkgQEAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKIAotIAlTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKLQlTdHJpbmcgdGVzdFN1aXRlID0gImpkYmNzaW1wbGVvcmEgIjsKKyAgICAgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCk7CisgICAgU3RyaW5nIHRlc3RTdWl0ZSA9ICJqZGJjc2ltcGxlb3JhICI7CiAKICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgT2JqZWN0IG9ialJlZiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlQk1QSG9tZSIpOwotCVNpbXBsZUJNUEhvbWUgc2ltcGxlQk1QSG9tZSA9IChTaW1wbGVCTVBIb21lKQorICAgIFNpbXBsZUJNUEhvbWUgc2ltcGxlQk1QSG9tZSA9IChTaW1wbGVCTVBIb21lKQogICAgICAgICBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ialJlZiwgU2ltcGxlQk1QSG9tZS5jbGFzcyk7CiAKICAgICAgICAgU2ltcGxlQk1QIHNpbXBsZUJNUCA9IHNpbXBsZUJNUEhvbWUuY3JlYXRlKCk7Ci0Jc3RhdC5hZGREZXNjcmlwdGlvbigiU2ltcGxlIE9yYWNsZSB0ZXN0ICIpOworICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlNpbXBsZSBPcmFjbGUgdGVzdCAiKTsKIAotCQorCiAgICAgICAgIGlmICggc2ltcGxlQk1QLnRlc3QxKDEwKSApIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MSA6ICIsIHN0YXQuUEFTUyk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MSA6ICIsIHN0YXQuRkFJTCk7Ci0JfQotICAgICAgCi0JaWYgKCBzaW1wbGVCTVAudGVzdDIoKSApIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MiA6ICIsIHN0YXQuUEFTUyk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MiA6ICIsIHN0YXQuRkFJTCk7Ci0JfQorICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QxIDogIiwgc3RhdC5QQVNTKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QxIDogIiwgc3RhdC5GQUlMKTsKKyAgICB9CiAKLQlpZiAoIHNpbXBsZUJNUC50ZXN0MygpICkgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QzIDogIiwgc3RhdC5QQVNTKTsKLQl9IGVsc2UgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QzIDogIiwgc3RhdC5GQUlMKTsKLQl9CisgICAgaWYgKCBzaW1wbGVCTVAudGVzdDIoKSApIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MiA6ICIsIHN0YXQuUEFTUyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MiA6ICIsIHN0YXQuRkFJTCk7CisgICAgfQogCi0JU3lzdGVtLm91dC5wcmludGxuKCJqZGJjIHNpbXBsZW9yYSBzdGF0dXM6ICIpOwotCXN0YXQucHJpbnRTdW1tYXJ5KCk7Ci0gICAgCi0gICAgICAgIAorICAgIGlmICggc2ltcGxlQk1QLnRlc3QzKCkgKSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDMgOiAiLCBzdGF0LlBBU1MpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDMgOiAiLCBzdGF0LkZBSUwpOworICAgIH0KKworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiamRiYyBzaW1wbGVvcmEgc3RhdHVzOiAiKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOworCisKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZW9yYS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVvcmEvZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCAyMGQ3MTZlLi41YWM5YTRiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZW9yYS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlb3JhL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTYzLDYgKzYzLDYgQEAKICAgICAgIDx0cmFucy1hdHRyaWJ1dGU+UmVxdWlyZWQ8L3RyYW5zLWF0dHJpYnV0ZT4KICAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgPC9hc3NlbWJseS1kZXNjcmlwdG9yPgotICAgICAgCisKIDwvZWpiLWphcj4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVvcmEvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZW9yYS9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAppbmRleCA2ZjRhNDA0Li5mM2E0Mzc1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZW9yYS9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZW9yYS9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbApAQCAtMjcsNyArMjcsNyBAQAogICAgICAgPGpuZGktbmFtZT5jb20uc3VuLnMxYXNkZXYuamRiYy5zaW1wbGVvcmEuZWpiLlNpbXBsZUJNUEhvbWU8L2puZGktbmFtZT4KICAgICAgIDxyZXNvdXJjZS1yZWY+CiAgICAgICAgIDxyZXMtcmVmLW5hbWU+RGF0YVNvdXJjZTwvcmVzLXJlZi1uYW1lPgotCTxqbmRpLW5hbWU+amRiYy9vcmFjbGVyZXM8L2puZGktbmFtZT4KKyAgICA8am5kaS1uYW1lPmpkYmMvb3JhY2xlcmVzPC9qbmRpLW5hbWU+CiAgICAgICAgIDxkZWZhdWx0LXJlc291cmNlLXByaW5jaXBhbD4KICAgICAgICAgICAgIDxuYW1lPnNjb3R0PC9uYW1lPgogICAgICAgICAgICAgPHBhc3N3b3JkPnRpZ2VyPC9wYXNzd29yZD4KQEAgLTM1LDcgKzM1LDcgQEAKICAgICAgIDwvcmVzb3VyY2UtcmVmPgogICAgICAgPHJlc291cmNlLXJlZj4KICAgICAgICAgPHJlcy1yZWYtbmFtZT5EYXRhU291cmNlMTwvcmVzLXJlZi1uYW1lPgotCTxqbmRpLW5hbWU+amRiYy9vcmFjbGVyZXM8L2puZGktbmFtZT4KKyAgICA8am5kaS1uYW1lPmpkYmMvb3JhY2xlcmVzPC9qbmRpLW5hbWU+CiAgICAgICAgIDxkZWZhdWx0LXJlc291cmNlLXByaW5jaXBhbD4KICAgICAgICAgICAgIDxuYW1lPnNjb3R0PC9uYW1lPgogICAgICAgICAgICAgPHBhc3N3b3JkPnRpZ2VyPC9wYXNzd29yZD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlb3JhL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZW9yYS9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCmluZGV4IGZkMmRkNDQuLjdkNGYxNjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlb3JhL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVvcmEvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQpAQCAtMzEsMTIxICszMSwxMjEgQEAKICAgICBwcm90ZWN0ZWQgRGF0YVNvdXJjZSBkczE7CiAKICAgICBwdWJsaWMgdm9pZCBzZXRFbnRpdHlDb250ZXh0KEVudGl0eUNvbnRleHQgZW50aXR5Q29udGV4dCkgewotCUNvbnRleHQgY29udGV4dCA9IG51bGw7Ci0JdHJ5IHsKLQkgICAgY29udGV4dCAgICA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCSAgICBkcyA9IChEYXRhU291cmNlKSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7Ci0JICAgIGRzMSA9IChEYXRhU291cmNlKSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlMSIpOwotCX0gY2F0Y2ggKE5hbWluZ0V4Y2VwdGlvbiBlKSB7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImNhbnQgZmluZCBkYXRhc291cmNlIik7Ci0JfQorICAgIENvbnRleHQgY29udGV4dCA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgY29udGV4dCAgICA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgICAgICBkcyA9IChEYXRhU291cmNlKSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7CisgICAgICAgIGRzMSA9IChEYXRhU291cmNlKSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlMSIpOworICAgIH0gY2F0Y2ggKE5hbWluZ0V4Y2VwdGlvbiBlKSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImNhbnQgZmluZCBkYXRhc291cmNlIik7CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyBJbnRlZ2VyIGVqYkNyZWF0ZSgpIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewotCXJldHVybiBuZXcgSW50ZWdlcigxKTsKKyAgICByZXR1cm4gbmV3IEludGVnZXIoMSk7CiAgICAgfQogCiAgICAgLyogR2V0IDEwIGNvbm5lY3Rpb25zIGluIGEgYnVuY2ggYW5kIHRoZW4gY2xvc2UgdGhlbSovCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDEoIGludCBudW1SdW5zICkgewotCWJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKLQlDb25uZWN0aW9uW10gY29ubnMgPSBuZXcgQ29ubmVjdGlvblsxMF07CisgICAgYm9vbGVhbiBwYXNzZWQgPSB0cnVlOworICAgIENvbm5lY3Rpb25bXSBjb25ucyA9IG5ldyBDb25uZWN0aW9uWzEwXTsKICAgICAgICAgZm9yKCBpbnQgaSA9IDA7IGkgPCBudW1SdW5zOyBpKysgKSB7Ci0JICAgIHRyeSB7Ci0JICAgICAgICBjb25uc1tpXSA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQkgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgICAgIHBhc3NlZCA9IGZhbHNlOwotCSAgICB9IAorICAgICAgICB0cnkgeworICAgICAgICAgICAgY29ubnNbaV0gPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBwYXNzZWQgPSBmYWxzZTsKICAgICAgICAgfQotICAgICAgICAKLQlmb3IgKGludCBpID0gMCA7IGkgPCBudW1SdW5zO2krKyApIHsKLQkgICAgdHJ5IHsKLQkgICAgICAgIGNvbm5zW2ldLmNsb3NlKCk7Ci0JICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlKSB7Ci0JICAgICAgICBwYXNzZWQgPSBmYWxzZTsKLQkgICAgfQotCX0KLQlyZXR1cm4gcGFzc2VkOworICAgICAgICB9CisKKyAgICBmb3IgKGludCBpID0gMCA7IGkgPCBudW1SdW5zO2krKyApIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGNvbm5zW2ldLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBwYXNzZWQgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcGFzc2VkOwogICAgIH0KIAogICAgIC8qIEdldCBhIHNpbmdsZSBjb25uZWN0aW9uIGFuZCBjbG9zZSBpdCAqLwogICAgIHB1YmxpYyBib29sZWFuIHRlc3QyKCkgewogICAgICAgICBDb25uZWN0aW9uIGNvbm4gPSBudWxsOwotCVN0YXRlbWVudCBzdG10ID0gbnVsbDsKLQlSZXN1bHRTZXQgcnMgPSBudWxsOworICAgIFN0YXRlbWVudCBzdG10ID0gbnVsbDsKKyAgICBSZXN1bHRTZXQgcnMgPSBudWxsOwogICAgICAgICBib29sZWFuIHBhc3NlZCA9IHRydWU7Ci0JdHJ5IHsKLQkgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQkgICAgY29ubi5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbiggY29ubi5nZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpICk7Ci0JICAgIHN0bXQgPSBjb25uLmNyZWF0ZVN0YXRlbWVudCgpOwotCSAgICBycyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KCAiU0VMRUNUICogRlJPTSBPX0NVU1RPTUVSIik7Ci0JICAgIHdoaWxlKCBycy5uZXh0KCkgKSB7Ci0JICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocnMuZ2V0U3RyaW5nKDEpKTsKLQkgICAgfQotCSAgICBzdG10LmV4ZWN1dGVVcGRhdGUoIklOU0VSVCBJTlRPIE9fQ1VTVE9NRVIgdmFsdWVzICgxMDAsICduZXcgcGhvbmUnKSIpOworICAgIHRyeSB7CisgICAgICAgIGNvbm4gPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIGNvbm4uc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oIGNvbm4uZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKSApOworICAgICAgICBzdG10ID0gY29ubi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgcnMgPSBzdG10LmV4ZWN1dGVRdWVyeSggIlNFTEVDVCAqIEZST00gT19DVVNUT01FUiIpOworICAgICAgICB3aGlsZSggcnMubmV4dCgpICkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJzLmdldFN0cmluZygxKSk7CisgICAgICAgIH0KKyAgICAgICAgc3RtdC5leGVjdXRlVXBkYXRlKCJJTlNFUlQgSU5UTyBPX0NVU1RPTUVSIHZhbHVlcyAoMTAwLCAnbmV3IHBob25lJykiKTsKICAgICAgICAgICAgIHJzID0gc3RtdC5leGVjdXRlUXVlcnkoICJTRUxFQ1QgKiBGUk9NIE9fQ1VTVE9NRVIiKTsKLQkgICAgd2hpbGUoIHJzLm5leHQoKSApIHsKLQkgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihycy5nZXRTdHJpbmcoMSkpOwotCSAgICB9CisgICAgICAgIHdoaWxlKCBycy5uZXh0KCkgKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocnMuZ2V0U3RyaW5nKDEpKTsKKyAgICAgICAgfQogICAgICAgICAgICAgc3RtdC5leGVjdXRlVXBkYXRlKCJERUxFVEUgRlJPTSBPX0NVU1RPTUVSIFdIRVJFIGNfaWQ9MTAwIik7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgcGFzc2VkID0gZmFsc2U7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKHJzICE9IG51bGwgKSB7IAotCSAgICAgICAgdHJ5IHsgcnMuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KLQkgICAgfQkKLQkgICAgaWYgKHN0bXQgIT0gbnVsbCApIHsgCi0JICAgICAgICB0cnkgeyBzdG10LmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9Ci0JICAgIH0JCi0JICAgIGlmICggY29ubiAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsKLQkgICAgICAgICAgICBjb25uLmNsb3NlKCk7Ci0JICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9ICAgIAotCSAgICB9Ci0JICAgIAotICAgICAgICB9IAotICAgICAgICAKLQlyZXR1cm4gcGFzc2VkOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmIChycyAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsgcnMuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KKyAgICAgICAgfQorICAgICAgICBpZiAoc3RtdCAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsgc3RtdC5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQorICAgICAgICB9CisgICAgICAgIGlmICggY29ubiAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjb25uLmNsb3NlKCk7CisgICAgICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CisgICAgICAgIH0KKworICAgICAgICB9CisKKyAgICByZXR1cm4gcGFzc2VkOwogICAgIH0KIAogICAgIC8qKiBBcHBsaWNhdGlvbiBhdXRoICovCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDMoKSB7CiAgICAgICAgIENvbm5lY3Rpb24gY29ubiA9IG51bGw7Ci0JU3RhdGVtZW50IHN0bXQgPSBudWxsOwotCVJlc3VsdFNldCBycyA9IG51bGw7CisgICAgU3RhdGVtZW50IHN0bXQgPSBudWxsOworICAgIFJlc3VsdFNldCBycyA9IG51bGw7CiAKICAgICAgICAgYm9vbGVhbiBwYXNzZWQgPSB0cnVlOwotCXRyeSB7Ci0JICAgIGNvbm4gPSBkczEuZ2V0Q29ubmVjdGlvbigic2NvdHQiLCAidGlnZXIiKTsKLQkgICAgc3RtdCA9IGNvbm4uY3JlYXRlU3RhdGVtZW50KCk7Ci0JICAgIHN0bXQuZXhlY3V0ZVVwZGF0ZSgiSU5TRVJUIElOVE8gT19DVVNUT01FUiB2YWx1ZXMgKDEwMCwgJ25ldyBwaG9uZScpIik7CisgICAgdHJ5IHsKKyAgICAgICAgY29ubiA9IGRzMS5nZXRDb25uZWN0aW9uKCJzY290dCIsICJ0aWdlciIpOworICAgICAgICBzdG10ID0gY29ubi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgc3RtdC5leGVjdXRlVXBkYXRlKCJJTlNFUlQgSU5UTyBPX0NVU1RPTUVSIHZhbHVlcyAoMTAwLCAnbmV3IHBob25lJykiKTsKICAgICAgICAgICAgIHJzID0gc3RtdC5leGVjdXRlUXVlcnkoICJTRUxFQ1QgKiBGUk9NIE9fQ1VTVE9NRVIiKTsKLQkgICAgd2hpbGUoIHJzLm5leHQoKSApIHsKLQkgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihycy5nZXRTdHJpbmcoMSkpOwotCSAgICB9CisgICAgICAgIHdoaWxlKCBycy5uZXh0KCkgKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocnMuZ2V0U3RyaW5nKDEpKTsKKyAgICAgICAgfQogICAgICAgICAgICAgc3RtdC5leGVjdXRlVXBkYXRlKCJERUxFVEUgRlJPTSBPX0NVU1RPTUVSIFdIRVJFIGNfaWQ9MTAwIik7CiAgICAgICAgICAgICBycyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KCAiU0VMRUNUICogRlJPTSBPX0NVU1RPTUVSIik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbiggcnMgKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICBwYXNzZWQgPSBmYWxzZTsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9IGZpbmFsbHkgewotCSAgICBpZiAocnMgIT0gbnVsbCApIHsgCi0JICAgICAgICB0cnkgeyBycy5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQotCSAgICB9CQotCSAgICBpZiAoc3RtdCAhPSBudWxsICkgeyAKLQkgICAgICAgIHRyeSB7IHN0bXQuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KLQkgICAgfQkKLQkgICAgaWYgKCBjb25uICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgewotCSAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKLQkgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30gICAgCi0JICAgIH0KLSAgICAgICAgfSAKLSAgICAgICAgCi0JcmV0dXJuIHBhc3NlZDsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCBycyApOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmIChycyAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsgcnMuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KKyAgICAgICAgfQorICAgICAgICBpZiAoc3RtdCAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsgc3RtdC5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQorICAgICAgICB9CisgICAgICAgIGlmICggY29ubiAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjb25uLmNsb3NlKCk7CisgICAgICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CisgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgcmV0dXJuIHBhc3NlZDsKICAgICB9Ci0gIAorCiAKICAgICBwdWJsaWMgdm9pZCBlamJMb2FkKCkge30KICAgICBwdWJsaWMgdm9pZCBlamJTdG9yZSgpIHt9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZW9yYS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZW9yYS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggZGQzMTU5OS4uZjEzZmY4YiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVvcmEvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlb3JhL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSw3ICsxLDcgQEAKLURyb3AgdGFibGUgT19DVVNUT01FUjsNCi0NCi1DUkVBVEUgVEFCTEUgT19DVVNUT01FUiAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikNCi0pOw0KLQ0KK0Ryb3AgdGFibGUgT19DVVNUT01FUjsKKworQ1JFQVRFIFRBQkxFIE9fQ1VTVE9NRVIgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQorKTsKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVvcmEvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlb3JhL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggNzBkMWZjYy4uZDg1NGI5NSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVvcmEvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZW9yYS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xICsxIEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVvcmFkZC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVvcmFkZC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDhjZGQ1YWMuLjUwYWM1MDAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlb3JhZGQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZW9yYWRkL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE5ICsxNSwxOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWJtcC1zaW1wbGVvcmEiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IjEyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZW9yYWRkL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlb3JhZGQvYnVpbGQueG1sCmluZGV4IGIzMDJkY2YuLmVjZGZkYWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlb3JhZGQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlb3JhZGQvYnVpbGQueG1sCkBAIC00MCw3ICs0MCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC01MiwxMyArNTIsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqL1NpbXBsZUJNUC5jbGFzcywgKiovU2ltcGxlQk1QSG9tZS5jbGFzcywqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qZGJjLW9yYWNsZS1jb21tb24iLz4KIApAQCAtNzEsMTQgKzcxLDE0IEBACiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtb3JhY2xlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX3BvaW50YmFzZS5zcWwiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamRiYy1vcmFjbGUtY29tbW9uIi8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZW9yYWRkL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlb3JhZGQvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhCmluZGV4IDkzYTUwM2YuLjg1YTI0NDIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlb3JhZGQvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlb3JhZGQvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhCkBAIC0yOSwzOSArMjksMzkgQEAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKIAotIAlTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKLQlTdHJpbmcgdGVzdFN1aXRlID0gImpkYmNzaW1wbGVvcmEgIjsKKyAgICAgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCk7CisgICAgU3RyaW5nIHRlc3RTdWl0ZSA9ICJqZGJjc2ltcGxlb3JhICI7CiAKICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgT2JqZWN0IG9ialJlZiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlQk1QSG9tZSIpOwotCVNpbXBsZUJNUEhvbWUgc2ltcGxlQk1QSG9tZSA9IChTaW1wbGVCTVBIb21lKQorICAgIFNpbXBsZUJNUEhvbWUgc2ltcGxlQk1QSG9tZSA9IChTaW1wbGVCTVBIb21lKQogICAgICAgICBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ialJlZiwgU2ltcGxlQk1QSG9tZS5jbGFzcyk7CiAKICAgICAgICAgU2ltcGxlQk1QIHNpbXBsZUJNUCA9IHNpbXBsZUJNUEhvbWUuY3JlYXRlKCk7Ci0Jc3RhdC5hZGREZXNjcmlwdGlvbigiU2ltcGxlIE9yYWNsZUREIHRlc3QgIik7CisgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiU2ltcGxlIE9yYWNsZUREIHRlc3QgIik7CiAKLQkKKwogICAgICAgICBpZiAoIHNpbXBsZUJNUC50ZXN0MSgxMCkgKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDEgOiAiLCBzdGF0LlBBU1MpOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDEgOiAiLCBzdGF0LkZBSUwpOwotCX0KLSAgICAgICAKLQlpZiAoIHNpbXBsZUJNUC50ZXN0MigpICkgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QyIDogIiwgc3RhdC5QQVNTKTsKLQl9IGVsc2UgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QyIDogIiwgc3RhdC5GQUlMKTsKLQl9CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDEgOiAiLCBzdGF0LlBBU1MpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDEgOiAiLCBzdGF0LkZBSUwpOworICAgIH0KIAotCWlmICggc2ltcGxlQk1QLnRlc3QzKCkgKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDMgOiAiLCBzdGF0LlBBU1MpOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsidGVzdDMgOiAiLCBzdGF0LkZBSUwpOwotCX0KKyAgICBpZiAoIHNpbXBsZUJNUC50ZXN0MigpICkgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QyIDogIiwgc3RhdC5QQVNTKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrInRlc3QyIDogIiwgc3RhdC5GQUlMKTsKKyAgICB9CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oImpkYmMgc2ltcGxlb3JhIHN0YXR1czogIik7Ci0Jc3RhdC5wcmludFN1bW1hcnkoKTsKLSAgICAKLSAgICAgICAgCisgICAgaWYgKCBzaW1wbGVCTVAudGVzdDMoKSApIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MyA6ICIsIHN0YXQuUEFTUyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyJ0ZXN0MyA6ICIsIHN0YXQuRkFJTCk7CisgICAgfQorCisgICAgU3lzdGVtLm91dC5wcmludGxuKCJqZGJjIHNpbXBsZW9yYSBzdGF0dXM6ICIpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CisKKwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlb3JhZGQvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlb3JhZGQvZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCAyMGQ3MTZlLi41YWM5YTRiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZW9yYWRkL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVvcmFkZC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC02Myw2ICs2Myw2IEBACiAgICAgICA8dHJhbnMtYXR0cmlidXRlPlJlcXVpcmVkPC90cmFucy1hdHRyaWJ1dGU+CiAgICAgPC9jb250YWluZXItdHJhbnNhY3Rpb24+CiAgIDwvYXNzZW1ibHktZGVzY3JpcHRvcj4KLSAgICAgIAorCiA8L2VqYi1qYXI+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlb3JhZGQvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZW9yYWRkL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCmluZGV4IDZmNGE0MDQuLmYzYTQzNzUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlb3JhZGQvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVvcmFkZC9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbApAQCAtMjcsNyArMjcsNyBAQAogICAgICAgPGpuZGktbmFtZT5jb20uc3VuLnMxYXNkZXYuamRiYy5zaW1wbGVvcmEuZWpiLlNpbXBsZUJNUEhvbWU8L2puZGktbmFtZT4KICAgICAgIDxyZXNvdXJjZS1yZWY+CiAgICAgICAgIDxyZXMtcmVmLW5hbWU+RGF0YVNvdXJjZTwvcmVzLXJlZi1uYW1lPgotCTxqbmRpLW5hbWU+amRiYy9vcmFjbGVyZXM8L2puZGktbmFtZT4KKyAgICA8am5kaS1uYW1lPmpkYmMvb3JhY2xlcmVzPC9qbmRpLW5hbWU+CiAgICAgICAgIDxkZWZhdWx0LXJlc291cmNlLXByaW5jaXBhbD4KICAgICAgICAgICAgIDxuYW1lPnNjb3R0PC9uYW1lPgogICAgICAgICAgICAgPHBhc3N3b3JkPnRpZ2VyPC9wYXNzd29yZD4KQEAgLTM1LDcgKzM1LDcgQEAKICAgICAgIDwvcmVzb3VyY2UtcmVmPgogICAgICAgPHJlc291cmNlLXJlZj4KICAgICAgICAgPHJlcy1yZWYtbmFtZT5EYXRhU291cmNlMTwvcmVzLXJlZi1uYW1lPgotCTxqbmRpLW5hbWU+amRiYy9vcmFjbGVyZXM8L2puZGktbmFtZT4KKyAgICA8am5kaS1uYW1lPmpkYmMvb3JhY2xlcmVzPC9qbmRpLW5hbWU+CiAgICAgICAgIDxkZWZhdWx0LXJlc291cmNlLXByaW5jaXBhbD4KICAgICAgICAgICAgIDxuYW1lPnNjb3R0PC9uYW1lPgogICAgICAgICAgICAgPHBhc3N3b3JkPnRpZ2VyPC9wYXNzd29yZD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlb3JhZGQvZWpiL1NpbXBsZUJNUEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlb3JhZGQvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQppbmRleCBmMjBjYzBmLi5mMmU2ZDU2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZW9yYWRkL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVvcmFkZC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCkBAIC0zMSwxMjAgKzMxLDEyMCBAQAogICAgIHByb3RlY3RlZCBEYXRhU291cmNlIGRzMTsKIAogICAgIHB1YmxpYyB2b2lkIHNldEVudGl0eUNvbnRleHQoRW50aXR5Q29udGV4dCBlbnRpdHlDb250ZXh0KSB7Ci0JQ29udGV4dCBjb250ZXh0ID0gbnVsbDsKLQl0cnkgewotCSAgICBjb250ZXh0ICAgID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JICAgIGRzID0gKERhdGFTb3VyY2UpIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKLQkgICAgZHMxID0gKERhdGFTb3VyY2UpIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UxIik7Ci0JfSBjYXRjaCAoTmFtaW5nRXhjZXB0aW9uIGUpIHsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiY2FudCBmaW5kIGRhdGFzb3VyY2UiKTsKLQl9CisgICAgQ29udGV4dCBjb250ZXh0ID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgICBjb250ZXh0ICAgID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgIGRzID0gKERhdGFTb3VyY2UpIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKKyAgICAgICAgZHMxID0gKERhdGFTb3VyY2UpIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UxIik7CisgICAgfSBjYXRjaCAoTmFtaW5nRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiY2FudCBmaW5kIGRhdGFzb3VyY2UiKTsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIEludGVnZXIgZWpiQ3JlYXRlKCkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7Ci0JcmV0dXJuIG5ldyBJbnRlZ2VyKDEpOworICAgIHJldHVybiBuZXcgSW50ZWdlcigxKTsKICAgICB9CiAKICAgICAvKiBHZXQgMTAgY29ubmVjdGlvbnMgaW4gYSBidW5jaCBhbmQgdGhlbiBjbG9zZSB0aGVtKi8KICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MSggaW50IG51bVJ1bnMgKSB7Ci0JYm9vbGVhbiBwYXNzZWQgPSB0cnVlOwotCUNvbm5lY3Rpb25bXSBjb25ucyA9IG5ldyBDb25uZWN0aW9uWzEwXTsKKyAgICBib29sZWFuIHBhc3NlZCA9IHRydWU7CisgICAgQ29ubmVjdGlvbltdIGNvbm5zID0gbmV3IENvbm5lY3Rpb25bMTBdOwogICAgICAgICBmb3IoIGludCBpID0gMDsgaSA8IG51bVJ1bnM7IGkrKyApIHsKLQkgICAgdHJ5IHsKLQkgICAgICAgIGNvbm5zW2ldID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCSAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICAgICAgcGFzc2VkID0gZmFsc2U7Ci0JICAgIH0gCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBjb25uc1tpXSA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHBhc3NlZCA9IGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIAotCWZvciAoaW50IGkgPSAwIDsgaSA8IG51bVJ1bnM7aSsrICkgewotCSAgICB0cnkgewotCSAgICAgICAgY29ubnNbaV0uY2xvc2UoKTsKLQkgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUpIHsKLQkgICAgICAgIHBhc3NlZCA9IGZhbHNlOwotCSAgICB9Ci0JfQotCXJldHVybiBwYXNzZWQ7CisgICAgICAgIH0KKworICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IG51bVJ1bnM7aSsrICkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgY29ubnNbaV0uY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBwYXNzZWQ7CiAgICAgfQogCiAgICAgLyogR2V0IGEgc2luZ2xlIGNvbm5lY3Rpb24gYW5kIGNsb3NlIGl0ICovCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDIoKSB7CiAgICAgICAgIENvbm5lY3Rpb24gY29ubiA9IG51bGw7Ci0JU3RhdGVtZW50IHN0bXQgPSBudWxsOwotCVJlc3VsdFNldCBycyA9IG51bGw7CisgICAgU3RhdGVtZW50IHN0bXQgPSBudWxsOworICAgIFJlc3VsdFNldCBycyA9IG51bGw7CiAgICAgICAgIGJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKLQl0cnkgewotCSAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCSAgICBzdG10ID0gY29ubi5jcmVhdGVTdGF0ZW1lbnQoKTsKLQkgICAgcnMgPSBzdG10LmV4ZWN1dGVRdWVyeSggIlNFTEVDVCAqIEZST00gT19DVVNUT01FUiIpOwotCSAgICB3aGlsZSggcnMubmV4dCgpICkgewotCSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJzLmdldFN0cmluZygxKSk7Ci0JICAgIH0KLQkgICAgc3RtdC5leGVjdXRlVXBkYXRlKCJJTlNFUlQgSU5UTyBPX0NVU1RPTUVSIHZhbHVlcyAoMTAwLCAnbmV3IHBob25lJykiKTsKKyAgICB0cnkgeworICAgICAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICBzdG10ID0gY29ubi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgcnMgPSBzdG10LmV4ZWN1dGVRdWVyeSggIlNFTEVDVCAqIEZST00gT19DVVNUT01FUiIpOworICAgICAgICB3aGlsZSggcnMubmV4dCgpICkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJzLmdldFN0cmluZygxKSk7CisgICAgICAgIH0KKyAgICAgICAgc3RtdC5leGVjdXRlVXBkYXRlKCJJTlNFUlQgSU5UTyBPX0NVU1RPTUVSIHZhbHVlcyAoMTAwLCAnbmV3IHBob25lJykiKTsKICAgICAgICAgICAgIHJzID0gc3RtdC5leGVjdXRlUXVlcnkoICJTRUxFQ1QgKiBGUk9NIE9fQ1VTVE9NRVIiKTsKLQkgICAgd2hpbGUoIHJzLm5leHQoKSApIHsKLQkgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihycy5nZXRTdHJpbmcoMSkpOwotCSAgICB9CisgICAgICAgIHdoaWxlKCBycy5uZXh0KCkgKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocnMuZ2V0U3RyaW5nKDEpKTsKKyAgICAgICAgfQogICAgICAgICAgICAgc3RtdC5leGVjdXRlVXBkYXRlKCJERUxFVEUgRlJPTSBPX0NVU1RPTUVSIFdIRVJFIGNfaWQ9MTAwIik7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgcGFzc2VkID0gZmFsc2U7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKHJzICE9IG51bGwgKSB7IAotCSAgICAgICAgdHJ5IHsgcnMuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KLQkgICAgfQkKLQkgICAgaWYgKHN0bXQgIT0gbnVsbCApIHsgCi0JICAgICAgICB0cnkgeyBzdG10LmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9Ci0JICAgIH0JCi0JICAgIGlmICggY29ubiAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsKLQkgICAgICAgICAgICBjb25uLmNsb3NlKCk7Ci0JICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9ICAgIAotCSAgICB9Ci0JICAgIAotICAgICAgICB9IAotICAgICAgICAKLQlyZXR1cm4gcGFzc2VkOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmIChycyAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsgcnMuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KKyAgICAgICAgfQorICAgICAgICBpZiAoc3RtdCAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsgc3RtdC5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQorICAgICAgICB9CisgICAgICAgIGlmICggY29ubiAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjb25uLmNsb3NlKCk7CisgICAgICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CisgICAgICAgIH0KKworICAgICAgICB9CisKKyAgICByZXR1cm4gcGFzc2VkOwogICAgIH0KIAogICAgIC8qKiBBcHBsaWNhdGlvbiBhdXRoICovCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDMoKSB7CiAgICAgICAgIENvbm5lY3Rpb24gY29ubiA9IG51bGw7Ci0JU3RhdGVtZW50IHN0bXQgPSBudWxsOwotCVJlc3VsdFNldCBycyA9IG51bGw7CisgICAgU3RhdGVtZW50IHN0bXQgPSBudWxsOworICAgIFJlc3VsdFNldCBycyA9IG51bGw7CiAKICAgICAgICAgYm9vbGVhbiBwYXNzZWQgPSB0cnVlOwotCXRyeSB7Ci0JICAgIGNvbm4gPSBkczEuZ2V0Q29ubmVjdGlvbigic2NvdHQiLCAidGlnZXIiKTsKLQkgICAgc3RtdCA9IGNvbm4uY3JlYXRlU3RhdGVtZW50KCk7Ci0JICAgIHN0bXQuZXhlY3V0ZVVwZGF0ZSgiSU5TRVJUIElOVE8gT19DVVNUT01FUiB2YWx1ZXMgKDEwMCwgJ25ldyBwaG9uZScpIik7CisgICAgdHJ5IHsKKyAgICAgICAgY29ubiA9IGRzMS5nZXRDb25uZWN0aW9uKCJzY290dCIsICJ0aWdlciIpOworICAgICAgICBzdG10ID0gY29ubi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgc3RtdC5leGVjdXRlVXBkYXRlKCJJTlNFUlQgSU5UTyBPX0NVU1RPTUVSIHZhbHVlcyAoMTAwLCAnbmV3IHBob25lJykiKTsKICAgICAgICAgICAgIHJzID0gc3RtdC5leGVjdXRlUXVlcnkoICJTRUxFQ1QgKiBGUk9NIE9fQ1VTVE9NRVIiKTsKLQkgICAgd2hpbGUoIHJzLm5leHQoKSApIHsKLQkgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihycy5nZXRTdHJpbmcoMSkpOwotCSAgICB9CisgICAgICAgIHdoaWxlKCBycy5uZXh0KCkgKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocnMuZ2V0U3RyaW5nKDEpKTsKKyAgICAgICAgfQogICAgICAgICAgICAgc3RtdC5leGVjdXRlVXBkYXRlKCJERUxFVEUgRlJPTSBPX0NVU1RPTUVSIFdIRVJFIGNfaWQ9MTAwIik7CiAgICAgICAgICAgICBycyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KCAiU0VMRUNUICogRlJPTSBPX0NVU1RPTUVSIik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbiggcnMgKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICBwYXNzZWQgPSBmYWxzZTsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9IGZpbmFsbHkgewotCSAgICBpZiAocnMgIT0gbnVsbCApIHsgCi0JICAgICAgICB0cnkgeyBycy5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQotCSAgICB9CQotCSAgICBpZiAoc3RtdCAhPSBudWxsICkgeyAKLQkgICAgICAgIHRyeSB7IHN0bXQuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KLQkgICAgfQkKLQkgICAgaWYgKCBjb25uICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgewotCSAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKLQkgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30gICAgCi0JICAgIH0KLSAgICAgICAgfSAKLSAgICAgICAgCi0JcmV0dXJuIHBhc3NlZDsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCBycyApOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmIChycyAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsgcnMuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KKyAgICAgICAgfQorICAgICAgICBpZiAoc3RtdCAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsgc3RtdC5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQorICAgICAgICB9CisgICAgICAgIGlmICggY29ubiAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjb25uLmNsb3NlKCk7CisgICAgICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CisgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgcmV0dXJuIHBhc3NlZDsKICAgICB9Ci0gIAorCiAKICAgICBwdWJsaWMgdm9pZCBlamJMb2FkKCkge30KICAgICBwdWJsaWMgdm9pZCBlamJTdG9yZSgpIHt9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZW9yYWRkL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlb3JhZGQvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IGRkMzE1OTkuLmYxM2ZmOGIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlb3JhZGQvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlb3JhZGQvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDcgKzEsNyBAQAotRHJvcCB0YWJsZSBPX0NVU1RPTUVSOw0KLQ0KLUNSRUFURSBUQUJMRSBPX0NVU1RPTUVSICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQorRHJvcCB0YWJsZSBPX0NVU1RPTUVSOworCitDUkVBVEUgVEFCTEUgT19DVVNUT01FUiAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZW9yYWRkL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NpbXBsZW9yYWRkL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggNzBkMWZjYy4uZDg1NGI5NSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zaW1wbGVvcmFkZC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc2ltcGxlb3JhZGQvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbApAQCAtMSArMSBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3FsdHJhY2Vtb25pdG9yaW5nL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NxbHRyYWNlbW9uaXRvcmluZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDA1YTI5Y2EuLjM3ZTNjYTYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3FsdHJhY2Vtb25pdG9yaW5nL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zcWx0cmFjZW1vbml0b3JpbmcvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTkgKzE1LDE5IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItYm1wLXN0YXRlbWVudHdyYXBwZXIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IjEyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NxbHRyYWNlbW9uaXRvcmluZy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NxbHRyYWNlbW9uaXRvcmluZy9idWlsZC54bWwKaW5kZXggMjZlMzFhNy4uOGUyNjU4OSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zcWx0cmFjZW1vbml0b3JpbmcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3FsdHJhY2Vtb25pdG9yaW5nL2J1aWxkLnhtbApAQCAtNDIsNyArNDIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNTQsMTMgKzU0LDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi9TaW1wbGVCTVAuY2xhc3MsICoqL1NpbXBsZUJNUEhvbWUuY2xhc3MsKiovKkNsaWVudCouY2xhc3MiIC8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CkBAIC04OSw5ICs4OSw5IEBACiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9InNlcnZlci5tb25pdG9yaW5nLXNlcnZpY2UubW9kdWxlLW1vbml0b3JpbmctbGV2ZWxzLmpkYmMtY29ubmVjdGlvbi1wb29sPU9GRiIvPgpAQCAtMTA4LDcgKzEwOCw3IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIyIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX3BvaW50YmFzZS5zcWwiLz4KQEAgLTEyMSw3ICsxMjEsNyBAQAogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWpkYmMtY29tbW9uIi8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NxbHRyYWNlbW9uaXRvcmluZy9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NxbHRyYWNlbW9uaXRvcmluZy9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKaW5kZXggYjdiYjljYS4uOTEwZDZiMiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zcWx0cmFjZW1vbml0b3JpbmcvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3FsdHJhY2Vtb25pdG9yaW5nL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQpAQCAtMzMsMjIgKzMzLDIyIEBACiAKICAgICBwdWJsaWMgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgT2JqZWN0IGxvY2sgPSBuZXcgT2JqZWN0KCk7Ci0gICAgcHVibGljIHN0YXRpYyBpbnQgTk9fT0ZfVEhSRUFEUyA9IDU7IAorICAgIHB1YmxpYyBzdGF0aWMgaW50IE5PX09GX1RIUkVBRFMgPSA1OwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEpNWF9QT1JUID0gODY4NjsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIT1NUX05BTUUgPSAibG9jYWxob3N0IjsKICAgICBwdWJsaWMgbG9uZyBzdW1Ub3RhbCA9IDA7CiAgICAgcHVibGljIGJvb2xlYW4gc3VjY2Vzc0V4ZWN1dGluZyA9IHRydWU7CiAKICAgICBwdWJsaWMgU2ltcGxlQk1QQ2xpZW50KGludCBvcHRpb24pewotCWlmKG9wdGlvbiA9PSAxKSB7CisgICAgaWYob3B0aW9uID09IDEpIHsKICAgICAgICAgICAgIGV4ZWN1dGUoKTsKLQl9IGVsc2UgaWYob3B0aW9uID09IDIpIHsKLQkgICAgdHJ5IHsKLQkgICAgICAgIGdldE1vbml0b3JhYmxlUHJvcGVydHlPZkNvbm5lY3Rpb25Qb29sKCJxbC1qZGJjLXBvb2wiLCAiZnJlcXVzZWRzcWxxdWVyaWVzIik7Ci0JICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7CisgICAgfSBlbHNlIGlmKG9wdGlvbiA9PSAyKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBnZXRNb25pdG9yYWJsZVByb3BlcnR5T2ZDb25uZWN0aW9uUG9vbCgicWwtamRiYy1wb29sIiwgImZyZXF1c2Vkc3FscXVlcmllcyIpOworICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotCSAgICB9Ci0JfQorICAgICAgICB9CisgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBleGVjdXRlKCkgewpAQCAtNjUsNDAgKzY1LDQwIEBACiAgICAgICAgIH0KIAogICAgICAgICBpZihzdWNjZXNzRXhlY3V0aW5nKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCJTUUwgVHJhY2UgbW9uaXRvcmluZyBUZXN0MSAiLCBzdGF0LlBBU1MpOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCJTUUwgVHJhY2UgbW9uaXRvcmluZyBUZXN0MSAiLCBzdGF0LkZBSUwpOwotCX0KKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoIlNRTCBUcmFjZSBtb25pdG9yaW5nIFRlc3QxICIsIHN0YXQuUEFTUyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoIlNRTCBUcmFjZSBtb25pdG9yaW5nIFRlc3QxICIsIHN0YXQuRkFJTCk7CisgICAgfQogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogCi0Jc3RhdC5hZGREZXNjcmlwdGlvbigiU1FMIFRyYWNpbmcgdGVzdHMiKTsKKyAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJTUUwgVHJhY2luZyB0ZXN0cyIpOwogICAgICAgICBpZiAoYXJncyAhPSBudWxsICYmIGFyZ3MubGVuZ3RoID4gMCkgewogICAgICAgICAgICAgU3RyaW5nIHBhcmFtID0gYXJnc1swXTsKIAogICAgICAgICAgICAgc3dpdGNoIChJbnRlZ2VyLnBhcnNlSW50KHBhcmFtKSkgewogICAgICAgICAgICAgICAgIGNhc2UgMTogey8vcnVuIHRoZSB0aHJlYWRzCi0JCSAgICBuZXcgU2ltcGxlQk1QQ2xpZW50KDEpOwotCQkgICAgYnJlYWs7Ci0JCX0KLQkJY2FzZSAyOiB7IC8vY29tcGFyZSBtb25pdG9yaW5nIHN0YXRzCisgICAgICAgICAgICBuZXcgU2ltcGxlQk1QQ2xpZW50KDEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSAyOiB7IC8vY29tcGFyZSBtb25pdG9yaW5nIHN0YXRzCiAgICAgICAgICAgICAgICAgICAgIG5ldyBTaW1wbGVCTVBDbGllbnQoMik7Ci0JCSAgICBicmVhazsKLQkJfQotCSAgICB9Ci0JfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KICAgICB9CiAKICAgICBjbGFzcyBXb3JrZXJUaHJlYWQgZXh0ZW5kcyBUaHJlYWR7CiAKLQlwcml2YXRlIGludCB0aW1lc1RvRXhlY3V0ZVF1ZXJ5ID0gMDsKKyAgICBwcml2YXRlIGludCB0aW1lc1RvRXhlY3V0ZVF1ZXJ5ID0gMDsKIAogICAgICAgICBwdWJsaWMgV29ya2VyVGhyZWFkKGludCBub0V4ZWNzLCBTdHJpbmcgbmFtZSl7Ci0JICAgIHN1cGVyKG5hbWUpOwotCSAgICB0aW1lc1RvRXhlY3V0ZVF1ZXJ5ID0gbm9FeGVjczsKKyAgICAgICAgc3VwZXIobmFtZSk7CisgICAgICAgIHRpbWVzVG9FeGVjdXRlUXVlcnkgPSBub0V4ZWNzOwogICAgICAgICB9CiAKICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewpAQCAtMTA5LDYyICsxMDksNjIgQEAKICAgICAgICAgICAgICAgICBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ialJlZiwgU2ltcGxlQk1QSG9tZS5jbGFzcyk7CiAKICAgICAgICAgICAgICAgICBTaW1wbGVCTVAgc2ltcGxlQk1QID0gc2ltcGxlQk1QSG9tZS5jcmVhdGUoKTsKLQkJU3RyaW5nIHRhYmxlTmFtZSA9IFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0TmFtZSgpOwotCQlTdHJpbmcgdGFibGVWYWx1ZSA9ICJpaW9wIjsKLQkJZm9yKGludCBpPTA7IGk8dGltZXNUb0V4ZWN1dGVRdWVyeTsgaSsrKSB7CisgICAgICAgIFN0cmluZyB0YWJsZU5hbWUgPSBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldE5hbWUoKTsKKyAgICAgICAgU3RyaW5nIHRhYmxlVmFsdWUgPSAiaWlvcCI7CisgICAgICAgIGZvcihpbnQgaT0wOyBpPHRpbWVzVG9FeGVjdXRlUXVlcnk7IGkrKykgewogICAgICAgICAgICAgICAgICAgICBzaW1wbGVCTVAucHJlcGFyZWRTdGF0ZW1lbnRUZXN0MSh0YWJsZU5hbWUsIHRhYmxlVmFsdWUpOwotCQl9CisgICAgICAgIH0KICAgICAgICAgICAgIH1jYXRjaChFeGNlcHRpb24gZSl7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaHJlYWQgOiAiICsgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXROYW1lKCkgKyAiZGlkIG5vdCBydW4gIik7CiAgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJU2ltcGxlQk1QQ2xpZW50LnRoaXMuc3VjY2Vzc0V4ZWN1dGluZyA9IGZhbHNlOworICAgICAgICBTaW1wbGVCTVBDbGllbnQudGhpcy5zdWNjZXNzRXhlY3V0aW5nID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBnZXRNb25pdG9yYWJsZVByb3BlcnR5T2ZDb25uZWN0aW9uUG9vbChTdHJpbmcgcG9vbE5hbWUsIFN0cmluZyBtb25pdG9yaW5nU3RhdCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKLQlib29sZWFuIHBhc3NlZCA9IGZhbHNlOwotCWZpbmFsIFN0cmluZyB1cmxTdHIgPSAic2VydmljZTpqbXg6cm1pOi8vL2puZGkvcm1pOi8vIiArIEhPU1RfTkFNRSArICI6IiArIEpNWF9QT1JUICsgIi9qbXhybWkiOyAgICAKKyAgICBib29sZWFuIHBhc3NlZCA9IGZhbHNlOworICAgIGZpbmFsIFN0cmluZyB1cmxTdHIgPSAic2VydmljZTpqbXg6cm1pOi8vL2puZGkvcm1pOi8vIiArIEhPU1RfTkFNRSArICI6IiArIEpNWF9QT1JUICsgIi9qbXhybWkiOwogICAgICAgICBmaW5hbCBKTVhTZXJ2aWNlVVJMIHVybCA9IG5ldyBKTVhTZXJ2aWNlVVJMKHVybFN0cik7CiAKLQlmaW5hbCBKTVhDb25uZWN0b3Igam14Q29ubiA9IEpNWENvbm5lY3RvckZhY3RvcnkuY29ubmVjdCh1cmwpOwotCWZpbmFsIE1CZWFuU2VydmVyQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gam14Q29ubi5nZXRNQmVhblNlcnZlckNvbm5lY3Rpb24oKTsKKyAgICBmaW5hbCBKTVhDb25uZWN0b3Igam14Q29ubiA9IEpNWENvbm5lY3RvckZhY3RvcnkuY29ubmVjdCh1cmwpOworICAgIGZpbmFsIE1CZWFuU2VydmVyQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gam14Q29ubi5nZXRNQmVhblNlcnZlckNvbm5lY3Rpb24oKTsKIAogICAgICAgICBPYmplY3ROYW1lIG9iamVjdE5hbWUgPQogICAgICAgICAgICAgICAgIG5ldyBPYmplY3ROYW1lKCJhbXg6cHA9L21vbi9zZXJ2ZXItbW9uW3NlcnZlcl0sdHlwZT1qZGJjcmEtbW9uLG5hbWU9cmVzb3VyY2VzLyIgKyBwb29sTmFtZSk7CiAKLQlqYXZheC5tYW5hZ2VtZW50Lm9wZW5tYmVhbi5Db21wb3NpdGVEYXRhU3VwcG9ydCByZXR1cm5WYWx1ZSA9IAotCQkoamF2YXgubWFuYWdlbWVudC5vcGVubWJlYW4uQ29tcG9zaXRlRGF0YVN1cHBvcnQpIAotCQljb25uZWN0aW9uLmdldEF0dHJpYnV0ZShvYmplY3ROYW1lLCBtb25pdG9yaW5nU3RhdCk7CisgICAgamF2YXgubWFuYWdlbWVudC5vcGVubWJlYW4uQ29tcG9zaXRlRGF0YVN1cHBvcnQgcmV0dXJuVmFsdWUgPQorICAgICAgICAoamF2YXgubWFuYWdlbWVudC5vcGVubWJlYW4uQ29tcG9zaXRlRGF0YVN1cHBvcnQpCisgICAgICAgIGNvbm5lY3Rpb24uZ2V0QXR0cmlidXRlKG9iamVjdE5hbWUsIG1vbml0b3JpbmdTdGF0KTsKIAotCVN0cmluZyBmcmVxVXNlZFF1ZXJpZXMgPSAoU3RyaW5nKSByZXR1cm5WYWx1ZS5nZXQoImN1cnJlbnQiKTsKLQlTdHJpbmcgZGVsaW1pdGVyID0gIiUlJUVPTCUlJSI7Ci0JU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihmcmVxVXNlZFF1ZXJpZXMsIGRlbGltaXRlcik7CisgICAgU3RyaW5nIGZyZXFVc2VkUXVlcmllcyA9IChTdHJpbmcpIHJldHVyblZhbHVlLmdldCgiY3VycmVudCIpOworICAgIFN0cmluZyBkZWxpbWl0ZXIgPSAiJSUlRU9MJSUlIjsKKyAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGZyZXFVc2VkUXVlcmllcywgZGVsaW1pdGVyKTsKIAotCUxpc3Q8U3RyaW5nPiBxdWVyeUxpc3QgPSBuZXcgTGlua2VkTGlzdDxTdHJpbmc+KCk7Ci0JTGlzdDxTdHJpbmc+IGV4cGVjdGVkUXVlcnlMaXN0ID0gbmV3IExpbmtlZExpc3Q8U3RyaW5nPigpOwotCWV4cGVjdGVkUXVlcnlMaXN0LmFkZCgic2VsZWN0ICogZnJvbSBjdXN0b21lcl9zdG10X3dyYXBwZXI1IHdoZXJlIGNfcGhvbmU9ID8iKTsKLQlleHBlY3RlZFF1ZXJ5TGlzdC5hZGQoInNlbGVjdCAqIGZyb20gY3VzdG9tZXJfc3RtdF93cmFwcGVyNCB3aGVyZSBjX3Bob25lPSA/Iik7Ci0JZXhwZWN0ZWRRdWVyeUxpc3QuYWRkKCJzZWxlY3QgKiBmcm9tIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjMgd2hlcmUgY19waG9uZT0gPyIpOworICAgIExpc3Q8U3RyaW5nPiBxdWVyeUxpc3QgPSBuZXcgTGlua2VkTGlzdDxTdHJpbmc+KCk7CisgICAgTGlzdDxTdHJpbmc+IGV4cGVjdGVkUXVlcnlMaXN0ID0gbmV3IExpbmtlZExpc3Q8U3RyaW5nPigpOworICAgIGV4cGVjdGVkUXVlcnlMaXN0LmFkZCgic2VsZWN0ICogZnJvbSBjdXN0b21lcl9zdG10X3dyYXBwZXI1IHdoZXJlIGNfcGhvbmU9ID8iKTsKKyAgICBleHBlY3RlZFF1ZXJ5TGlzdC5hZGQoInNlbGVjdCAqIGZyb20gY3VzdG9tZXJfc3RtdF93cmFwcGVyNCB3aGVyZSBjX3Bob25lPSA/Iik7CisgICAgZXhwZWN0ZWRRdWVyeUxpc3QuYWRkKCJzZWxlY3QgKiBmcm9tIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjMgd2hlcmUgY19waG9uZT0gPyIpOwogCi0Jd2hpbGUoc3QuaGFzTW9yZVRva2VucygpKSB7Ci0JICAgIFN0cmluZyBxdWVyeSA9IHN0Lm5leHRUb2tlbigpLnRyaW0oKTsKLQkgICAgaWYoIXF1ZXJ5LmVxdWFscygiIikpIHsKLQkJcXVlcnlMaXN0LmFkZChxdWVyeSk7Ci0JICAgIH0KLQl9Ci0JLypmb3IoaW50IGs9MDsgazxxdWVyeUxpc3Quc2l6ZSgpOyBrKyspIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCI+Pj4+PiBxdWVyeT0iICsgcXVlcnlMaXN0LmdldChrKSk7Ci0JfSovCisgICAgd2hpbGUoc3QuaGFzTW9yZVRva2VucygpKSB7CisgICAgICAgIFN0cmluZyBxdWVyeSA9IHN0Lm5leHRUb2tlbigpLnRyaW0oKTsKKyAgICAgICAgaWYoIXF1ZXJ5LmVxdWFscygiIikpIHsKKyAgICAgICAgcXVlcnlMaXN0LmFkZChxdWVyeSk7CisgICAgICAgIH0KKyAgICB9CisgICAgLypmb3IoaW50IGs9MDsgazxxdWVyeUxpc3Quc2l6ZSgpOyBrKyspIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI+Pj4+PiBxdWVyeT0iICsgcXVlcnlMaXN0LmdldChrKSk7CisgICAgfSovCiAKLQlwYXNzZWQgPSBleHBlY3RlZFF1ZXJ5TGlzdC5lcXVhbHMocXVlcnlMaXN0KTsKLQkJICAgICAgICAgICAgCi0JaWYocGFzc2VkKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCJTUUwgVHJhY2UgbW9uaXRvcmluZyBUZXN0MiAiLCBzdGF0LlBBU1MpOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCJTUUwgVHJhY2UgbW9uaXRvcmluZyBUZXN0MiAiLCBzdGF0LkZBSUwpOwotCX0KKyAgICBwYXNzZWQgPSBleHBlY3RlZFF1ZXJ5TGlzdC5lcXVhbHMocXVlcnlMaXN0KTsKKworICAgIGlmKHBhc3NlZCkgeworICAgICAgICBzdGF0LmFkZFN0YXR1cygiU1FMIFRyYWNlIG1vbml0b3JpbmcgVGVzdDIgIiwgc3RhdC5QQVNTKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cygiU1FMIFRyYWNlIG1vbml0b3JpbmcgVGVzdDIgIiwgc3RhdC5GQUlMKTsKKyAgICB9CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NxbHRyYWNlbW9uaXRvcmluZy9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zcWx0cmFjZW1vbml0b3JpbmcvZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCAzNzU5OTNlLi43YjI0YjM4IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NxbHRyYWNlbW9uaXRvcmluZy9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3FsdHJhY2Vtb25pdG9yaW5nL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTU3LDYgKzU3LDYgQEAKICAgICAgIDx0cmFucy1hdHRyaWJ1dGU+UmVxdWlyZWQ8L3RyYW5zLWF0dHJpYnV0ZT4KICAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgPC9hc3NlbWJseS1kZXNjcmlwdG9yPgotICAgICAgCisKIDwvZWpiLWphcj4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zcWx0cmFjZW1vbml0b3JpbmcvZWpiL1NpbXBsZUJNUEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3FsdHJhY2Vtb25pdG9yaW5nL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKaW5kZXggMmQwY2Y4Yi4uYWZmZDUzMCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zcWx0cmFjZW1vbml0b3JpbmcvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NxbHRyYWNlbW9uaXRvcmluZy9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCkBAIC0yNywxNyArMjcsMTcgQEAKICAgICBwcm90ZWN0ZWQgRGF0YVNvdXJjZSBkczsKIAogICAgIHB1YmxpYyB2b2lkIHNldEVudGl0eUNvbnRleHQoRW50aXR5Q29udGV4dCBlbnRpdHlDb250ZXh0KSB7Ci0JQ29udGV4dCBjb250ZXh0ID0gbnVsbDsKLQl0cnkgewotCSAgICBjb250ZXh0ICAgID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JICAgIGRzID0gKERhdGFTb3VyY2UpIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L2pkYmMvRGF0YVNvdXJjZSIpOwotCX0gY2F0Y2ggKE5hbWluZ0V4Y2VwdGlvbiBlKSB7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImNhbnQgZmluZCBkYXRhc291cmNlIik7Ci0JfQorICAgIENvbnRleHQgY29udGV4dCA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgY29udGV4dCAgICA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgICAgICBkcyA9IChEYXRhU291cmNlKSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9qZGJjL0RhdGFTb3VyY2UiKTsKKyAgICB9IGNhdGNoIChOYW1pbmdFeGNlcHRpb24gZSkgeworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJjYW50IGZpbmQgZGF0YXNvdXJjZSIpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgSW50ZWdlciBlamJDcmVhdGUoKSB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsKLQkgICAgcmV0dXJuIG5ldyBJbnRlZ2VyKDEpOworICAgICAgICByZXR1cm4gbmV3IEludGVnZXIoMSk7CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gcHJlcGFyZWRTdGF0ZW1lbnRUZXN0MShTdHJpbmcgdGFibGVOYW1lLCBTdHJpbmcgdmFsdWUpewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zcWx0cmFjZW1vbml0b3Jpbmcvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zcWx0cmFjZW1vbml0b3Jpbmcvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IGNiNzRlMjYuLjY4NGUyN2MgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3FsdHJhY2Vtb25pdG9yaW5nL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3NxbHRyYWNlbW9uaXRvcmluZy9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsNDYgKzEsNDYgQEAKLURyb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMTsNCi0NCi1DUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMSAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikNCi0pOw0KLQ0KLUlOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjEgVkFMVUVTKDIsICdpaW9wJyk7DQotDQotRHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXIyOw0KLQ0KLUNSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXIyICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQotSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyMiBWQUxVRVMoMiwgJ2lpb3AnKTsNCi0NCi1Ecm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjM7DQotDQotQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjMgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCi1JTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXIzIFZBTFVFUygyLCAnaWlvcCcpOw0KLQ0KLURyb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNDsNCi0NCi1DUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNCAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikNCi0pOw0KLQ0KLUlOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjQgVkFMVUVTKDIsICdpaW9wJyk7DQotDQotRHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI1Ow0KLQ0KLUNSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXI1ICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQotSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyNSBWQUxVRVMoMiwgJ2lpb3AnKTsNCi0NCitEcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjE7CisKK0NSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXIxICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikKKyk7CisKK0lOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjEgVkFMVUVTKDIsICdpaW9wJyk7CisKK0Ryb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMjsKKworQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjIgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQorKTsKKworSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyMiBWQUxVRVMoMiwgJ2lpb3AnKTsKKworRHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXIzOworCitDUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMyAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCitJTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXIzIFZBTFVFUygyLCAnaWlvcCcpOworCitEcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjQ7CisKK0NSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXI0ICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikKKyk7CisKK0lOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjQgVkFMVUVTKDIsICdpaW9wJyk7CisKK0Ryb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNTsKKworQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjUgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQorKTsKKworSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyNSBWQUxVRVMoMiwgJ2lpb3AnKTsKKwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0YXRlbWVudGxlYWtkZXRlY3Rpb24vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RhdGVtZW50bGVha2RldGVjdGlvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDA1YTI5Y2EuLjM3ZTNjYTYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RhdGVtZW50bGVha2RldGVjdGlvbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RhdGVtZW50bGVha2RldGVjdGlvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOSArMTUsMTkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1ibXAtc3RhdGVtZW50d3JhcHBlciIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iMTIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RhdGVtZW50bGVha2RldGVjdGlvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0YXRlbWVudGxlYWtkZXRlY3Rpb24vYnVpbGQueG1sCmluZGV4IDJlMGNiZTUuLjQ1MThjOGMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RhdGVtZW50bGVha2RldGVjdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdGF0ZW1lbnRsZWFrZGV0ZWN0aW9uL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsMTMgKzQ4LDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi9TaW1wbGVCTVAuY2xhc3MsICoqL1NpbXBsZUJNUEhvbWUuY2xhc3MsKiovKkNsaWVudCouY2xhc3MiIC8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CkBAIC03OSw5ICs3OSw5IEBACiAgICA8IS0tIENyZWF0aW5nIGFub3RoZXIgZHMgZm9yIGNvbXBhcmlzb24gb2YgcmVjb3JkcyAtLT4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qZGJjLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9InNlY29uZC1wb29sIi8+Ci0JPHBhcmFtIG5hbWU9ImRiLmNsYXNzIiB2YWx1ZT0ib3JnLmFwYWNoZS5kZXJieS5qZGJjLkNsaWVudERhdGFTb3VyY2UiLz4KLQk8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS50eXBlIiB2YWx1ZT0iamF2YXguc3FsLkRhdGFTb3VyY2UiLz4KLQk8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9jb21wYXJlRFMiLz4KKyAgICA8cGFyYW0gbmFtZT0iZGIuY2xhc3MiIHZhbHVlPSJvcmcuYXBhY2hlLmRlcmJ5LmpkYmMuQ2xpZW50RGF0YVNvdXJjZSIvPgorICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLnR5cGUiIHZhbHVlPSJqYXZheC5zcWwuRGF0YVNvdXJjZSIvPgorICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2NvbXBhcmVEUyIvPgogICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgpAQCAtOTEsOSArOTEsOSBAQAogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JICAgIDwhLS08YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CisgICAgICAgIDwhLS08YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgogPC9hbnRjYWxsPi0tPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KQEAgLTEwOCw3ICsxMDgsNyBAQAogICAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCIvPgpAQCAtMTIxLDcgKzEyMSw3IEBACiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWpkYmMtY29tbW9uIi8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+Ci0JICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9jb21wYXJlRFMiLz4KKyAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2NvbXBhcmVEUyIvPgogICAgICAgPC9hbnRjYWxsPgogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiI+CkBAIC0xMjksNyArMTI5LDcgQEAKICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdGF0ZW1lbnRsZWFrZGV0ZWN0aW9uL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RhdGVtZW50bGVha2RldGVjdGlvbi9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKaW5kZXggNjRkMmUxZi4uZTIxMjRhMSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdGF0ZW1lbnRsZWFrZGV0ZWN0aW9uL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0YXRlbWVudGxlYWtkZXRlY3Rpb24vY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhCkBAIC02NCwxMSArNjQsMTEgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgc3RhdGVtZW50VGVzdCA6ICIsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCWlmKGdldE1vbml0b3JhYmxlUHJvcGVydHlPZkNvbm5lY3Rpb25Qb29sKCkgPT0gMikgeworICAgIGlmKGdldE1vbml0b3JhYmxlUHJvcGVydHlPZkNvbm5lY3Rpb25Qb29sKCkgPT0gMikgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiBNb25pdG9yaW5nIGFmdGVyIHN0YXRlbWVudFRlc3QgOiAiLCBzdGF0LlBBU1MpOwotCX0gZWxzZSB7CisgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgTW9uaXRvcmluZyBhZnRlciBzdGF0ZW1lbnRUZXN0IDogIiwgc3RhdC5GQUlMKTsKLQl9CisgICAgfQogICAgICAgICAvL1Rlc3RpbmcgUHJlcGFyZWRTdGF0ZW1lbnQgb2JqZWN0CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7CiAgICAgICAgICAgICBTaW1wbGVCTVBIb21lIHNpbXBsZUJNUEhvbWUgPSAoU2ltcGxlQk1QSG9tZSkgamF2YXgucm1pLlBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpSZWYsIFNpbXBsZUJNUEhvbWUuY2xhc3MpOwpAQCAtOTAsMTEgKzkwLDExIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIHByZXBhcmVkU3RhdGVtZW50VGVzdCA6ICIsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCWlmKGdldE1vbml0b3JhYmxlUHJvcGVydHlPZkNvbm5lY3Rpb25Qb29sKCkgPT0gNCkgeworICAgIGlmKGdldE1vbml0b3JhYmxlUHJvcGVydHlPZkNvbm5lY3Rpb25Qb29sKCkgPT0gNCkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiBNb25pdG9yaW5nIGFmdGVyIHByZXBhcmVkU3RhdGVtZW50VGVzdCA6ICIsIHN0YXQuUEFTUyk7Ci0JfSBlbHNlIHsKKyAgICB9IGVsc2UgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiBNb25pdG9yaW5nIGFmdGVyIHByZXBhcmVkU3RhdGVtZW50VGVzdCA6ICIsIHN0YXQuRkFJTCk7Ci0JfQorICAgIH0KICAgICAgICAgLy9UZXN0aW5nIENhbGxhYmxlU3RhdGVtZW50IG9iamVjdHMKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKICAgICAgICAgICAgIFNpbXBsZUJNUEhvbWUgc2ltcGxlQk1QSG9tZSA9IChTaW1wbGVCTVBIb21lKSBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ialJlZiwgU2ltcGxlQk1QSG9tZS5jbGFzcyk7CkBAIC0xMTYsMzAgKzExNiwzMCBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiBjYWxsYWJsZVN0YXRlbWVudFRlc3QgOiAiLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlpZihnZXRNb25pdG9yYWJsZVByb3BlcnR5T2ZDb25uZWN0aW9uUG9vbCgpID09IDYpIHsKKyAgICBpZihnZXRNb25pdG9yYWJsZVByb3BlcnR5T2ZDb25uZWN0aW9uUG9vbCgpID09IDYpIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgTW9uaXRvcmluZyBhZnRlciBjYWxsYWJsZVN0YXRlbWVudFRlc3QgOiAiLCBzdGF0LlBBU1MpOwotCX0gZWxzZSB7CisgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgTW9uaXRvcmluZyBhZnRlciBjYWxsYWJsZVN0YXRlbWVudFRlc3QgOiAiLCBzdGF0LkZBSUwpOwotCX0KKyAgICB9CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHN0YXRpYyBpbnQgZ2V0TW9uaXRvcmFibGVQcm9wZXJ0eU9mQ29ubmVjdGlvblBvb2woKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQlmaW5hbCBTdHJpbmcgbW9uaXRvcmluZ1N0YXQgPSAibnVtcG90ZW50aWFsc3RhdGVtZW50bGVhayI7Ci0JZmluYWwgU3RyaW5nIHVybFN0ciA9ICJzZXJ2aWNlOmpteDpybWk6Ly8vam5kaS9ybWk6Ly8iICsgSE9TVF9OQU1FICsgIjoiICsgSk1YX1BPUlQgKyAiL2pteHJtaSI7ICAgIAorICAgIGZpbmFsIFN0cmluZyBtb25pdG9yaW5nU3RhdCA9ICJudW1wb3RlbnRpYWxzdGF0ZW1lbnRsZWFrIjsKKyAgICBmaW5hbCBTdHJpbmcgdXJsU3RyID0gInNlcnZpY2U6am14OnJtaTovLy9qbmRpL3JtaTovLyIgKyBIT1NUX05BTUUgKyAiOiIgKyBKTVhfUE9SVCArICIvam14cm1pIjsKICAgICAgICAgZmluYWwgSk1YU2VydmljZVVSTCB1cmwgPSBuZXcgSk1YU2VydmljZVVSTCh1cmxTdHIpOwogCi0JZmluYWwgSk1YQ29ubmVjdG9yIGpteENvbm4gPSBKTVhDb25uZWN0b3JGYWN0b3J5LmNvbm5lY3QodXJsKTsKLQlmaW5hbCBNQmVhblNlcnZlckNvbm5lY3Rpb24gY29ubmVjdGlvbiA9IGpteENvbm4uZ2V0TUJlYW5TZXJ2ZXJDb25uZWN0aW9uKCk7CisgICAgZmluYWwgSk1YQ29ubmVjdG9yIGpteENvbm4gPSBKTVhDb25uZWN0b3JGYWN0b3J5LmNvbm5lY3QodXJsKTsKKyAgICBmaW5hbCBNQmVhblNlcnZlckNvbm5lY3Rpb24gY29ubmVjdGlvbiA9IGpteENvbm4uZ2V0TUJlYW5TZXJ2ZXJDb25uZWN0aW9uKCk7CiAKICAgICAgICAgT2JqZWN0TmFtZSBvYmplY3ROYW1lID0KICAgICAgICAgICAgIG5ldyBPYmplY3ROYW1lKCJhbXg6cHA9L21vbi9zZXJ2ZXItbW9uW3NlcnZlcl0sdHlwZT1qZGJjcmEtbW9uLG5hbWU9cmVzb3VyY2VzLyIgKyBwb29sTmFtZSk7CiAKLQlqYXZheC5tYW5hZ2VtZW50Lm9wZW5tYmVhbi5Db21wb3NpdGVEYXRhU3VwcG9ydCByZXR1cm5WYWx1ZSA9IAotCQkoamF2YXgubWFuYWdlbWVudC5vcGVubWJlYW4uQ29tcG9zaXRlRGF0YVN1cHBvcnQpIAotCQljb25uZWN0aW9uLmdldEF0dHJpYnV0ZShvYmplY3ROYW1lLCBtb25pdG9yaW5nU3RhdCk7CisgICAgamF2YXgubWFuYWdlbWVudC5vcGVubWJlYW4uQ29tcG9zaXRlRGF0YVN1cHBvcnQgcmV0dXJuVmFsdWUgPQorICAgICAgICAoamF2YXgubWFuYWdlbWVudC5vcGVubWJlYW4uQ29tcG9zaXRlRGF0YVN1cHBvcnQpCisgICAgICAgIGNvbm5lY3Rpb24uZ2V0QXR0cmlidXRlKG9iamVjdE5hbWUsIG1vbml0b3JpbmdTdGF0KTsKIAotCVN5c3RlbS5vdXQucHJpbnRsbigiPj4+IiArIG1vbml0b3JpbmdTdGF0ICsgIj0iICsgcmV0dXJuVmFsdWUuZ2V0KCJjb3VudCIpKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj4+PiIgKyBtb25pdG9yaW5nU3RhdCArICI9IiArIHJldHVyblZhbHVlLmdldCgiY291bnQiKSk7CiAgICAgICAgIHJldHVybiBuZXcgSW50ZWdlcihyZXR1cm5WYWx1ZS5nZXQoImNvdW50IikudG9TdHJpbmcoKSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdGF0ZW1lbnRsZWFrZGV0ZWN0aW9uL2Rlc2NyaXB0b3IvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0YXRlbWVudGxlYWtkZXRlY3Rpb24vZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCAyOWNmMmFlLi42YzFhMzdiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0YXRlbWVudGxlYWtkZXRlY3Rpb24vZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0YXRlbWVudGxlYWtkZXRlY3Rpb24vZGVzY3JpcHRvci9lamItamFyLnhtbApAQCAtNjMsNiArNjMsNiBAQAogICAgICAgPHRyYW5zLWF0dHJpYnV0ZT5SZXF1aXJlZDwvdHJhbnMtYXR0cmlidXRlPgogICAgIDwvY29udGFpbmVyLXRyYW5zYWN0aW9uPgogICA8L2Fzc2VtYmx5LWRlc2NyaXB0b3I+Ci0gICAgICAKKwogPC9lamItamFyPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0YXRlbWVudGxlYWtkZXRlY3Rpb24vZWpiL1NpbXBsZUJNUEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RhdGVtZW50bGVha2RldGVjdGlvbi9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCmluZGV4IDc0YWE4MTAuLjUzMTA0YzcgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RhdGVtZW50bGVha2RldGVjdGlvbi9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RhdGVtZW50bGVha2RldGVjdGlvbi9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCkBAIC0xMzcsNyArMTM3LDcgQEAKICAgICAgICAgQ29ubmVjdGlvbiBjb25Gcm9tRFMgPSBudWxsOwogICAgICAgICBDb25uZWN0aW9uIGNvbkZyb21Db21wYXJlRFMgPSBudWxsOwogICAgICAgICBDYWxsYWJsZVN0YXRlbWVudCBzdG10ID0gbnVsbDsKLQlQcmVwYXJlZFN0YXRlbWVudCBzdG10MSA9IG51bGw7CisgICAgUHJlcGFyZWRTdGF0ZW1lbnQgc3RtdDEgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgY29uRnJvbURTID0gZHMuZ2V0Q29ubmVjdGlvbigpOwogICAgICAgICAgICAgY29uRnJvbUNvbXBhcmVEUyA9IGNvbXBhcmVEcy5nZXRDb25uZWN0aW9uKCk7CkBAIC0xNTAsNyArMTUwLDcgQEAKICAgICAgICAgICAgIHN0bXQxLmV4ZWN1dGVVcGRhdGUoKTsKIAogICAgICAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gc3FlKSB7Ci0JICAgIHJlc3VsdCA9IGZhbHNlOworICAgICAgICByZXN1bHQgPSBmYWxzZTsKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgaWYgKHN0bXQxICE9IG51bGwpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RhdGVtZW50bGVha2RldGVjdGlvbi9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0YXRlbWVudGxlYWtkZXRlY3Rpb24vc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IGI1MGRkZWMuLmMxOTk3ODMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RhdGVtZW50bGVha2RldGVjdGlvbi9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdGF0ZW1lbnRsZWFrZGV0ZWN0aW9uL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSwxNyArMSwxNyBAQAotDQotRHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI7DQotDQotQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlciAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikNCi0pOw0KLQ0KLUlOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlciBWQUxVRVMoMSwgJ3d4eXonKTsNCi1JTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXIgVkFMVUVTKDIsICdwcXJzJyk7DQotDQotRHJvcCB0YWJsZSBDT01QQVJFX1JFQ09SRFM7DQotDQotQ1JFQVRFIFRBQkxFIENPTVBBUkVfUkVDT1JEUygNCi0gICAgUkVDX1NUTVRfVFlQRQljaGFyKDUpLA0KLSAgICBSRUNfU1RNVAkJaW50ZWdlcg0KLSk7DQorCitEcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjsKKworQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlciAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCitJTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXIgVkFMVUVTKDEsICd3eHl6Jyk7CitJTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXIgVkFMVUVTKDIsICdwcXJzJyk7CisKK0Ryb3AgdGFibGUgQ09NUEFSRV9SRUNPUkRTOworCitDUkVBVEUgVEFCTEUgQ09NUEFSRV9SRUNPUkRTKAorICAgIFJFQ19TVE1UX1RZUEUgICAgY2hhcig1KSwKKyAgICBSRUNfU1RNVCAgICAgICAgaW50ZWdlcgorKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RhdGVtZW50dGltZW91dC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdGF0ZW1lbnR0aW1lb3V0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNDUwNzNkNS4uMTVmN2Y1MSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdGF0ZW1lbnR0aW1lb3V0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdGF0ZW1lbnR0aW1lb3V0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE5ICsxNSwxOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWJtcC1zdGF0ZW1lbnR0aW1lb3V0Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIxMiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdGF0ZW1lbnR0aW1lb3V0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RhdGVtZW50dGltZW91dC9idWlsZC54bWwKaW5kZXggMzVjZTdhMC4uN2Q3MzEzNCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdGF0ZW1lbnR0aW1lb3V0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0YXRlbWVudHRpbWVvdXQvYnVpbGQueG1sCkBAIC03MCw3ICs3MCw3IEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgICA8L2FudGNhbGw+Ci0JPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktamRiYy1jb21tb24iLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qZGJjLWNvbW1vbiIvPgogCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RhdGVtZW50dGltZW91dC9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0YXRlbWVudHRpbWVvdXQvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhCmluZGV4IGM3ZDQ4ZmEuLjQ5MWJmYzQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RhdGVtZW50dGltZW91dC9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdGF0ZW1lbnR0aW1lb3V0L2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQpAQCAtMzYsNyArMzYsNyBAQAogICAgICAgICAgICAgICAgIGphdmF4LnJtaS5Qb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqUmVmLCBTaW1wbGVCTVBIb21lLmNsYXNzKTsKIAogICAgICAgICBTaW1wbGVCTVAgc2ltcGxlQk1QID0gc2ltcGxlQk1QSG9tZS5jcmVhdGUoKTsKLQlzdGF0LmFkZERlc2NyaXB0aW9uKCJKREJDIFN0YXRlbWVudCBUaW1lb3V0IFRlc3RzIik7CisgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiSkRCQyBTdGF0ZW1lbnQgVGltZW91dCBUZXN0cyIpOwogCiAgICAgICAgIGlmIChzaW1wbGVCTVAuc3RhdGVtZW50VGVzdCgpKSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIHN0YXRlbWVudFRlc3QgOiAiLCBTaW1wbGVSZXBvcnRlckFkYXB0ZXIuUEFTUyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0YXRlbWVudHRpbWVvdXQvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdGF0ZW1lbnR0aW1lb3V0L3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCBkZDRjNWU1Li4xMWU2MWVlIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0YXRlbWVudHRpbWVvdXQvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RhdGVtZW50dGltZW91dC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsMTAgKzEsMTAgQEAKLQ0KLURyb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyOw0KLQ0KLUNSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXIgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCi1JTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXIgVkFMVUVTKDEsICd3eHl6Jyk7DQorCitEcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjsKKworQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlciAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCitJTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXIgVkFMVUVTKDEsICd3eHl6Jyk7CiBJTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXIgVkFMVUVTKDIsICdwcXJzJyk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdGF0ZW1lbnR3cmFwcGVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0YXRlbWVudHdyYXBwZXIvYnVpbGQucHJvcGVydGllcwppbmRleCAwNWEyOWNhLi4zN2UzY2E2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0YXRlbWVudHdyYXBwZXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0YXRlbWVudHdyYXBwZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTkgKzE1LDE5IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItYm1wLXN0YXRlbWVudHdyYXBwZXIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IjEyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0YXRlbWVudHdyYXBwZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdGF0ZW1lbnR3cmFwcGVyL2J1aWxkLnhtbAppbmRleCBmMWNhZWI4Li5hYzQ0ZmFjIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0YXRlbWVudHdyYXBwZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RhdGVtZW50d3JhcHBlci9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ4LDEzICs0OCwxMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqLyouY2xhc3MiIC8+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovU2ltcGxlQk1QLmNsYXNzLCAqKi9TaW1wbGVCTVBIb21lLmNsYXNzLCoqLypDbGllbnQqLmNsYXNzIiAvPgogICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgpAQCAtNjMsMTQgKzYzLDE0IEBACiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCIvPgpAQCAtNzgsNyArNzgsNyBAQAogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWpkYmMtY29tbW9uIi8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0YXRlbWVudHdyYXBwZXIvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdGF0ZW1lbnR3cmFwcGVyL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQppbmRleCBkY2JlMDRlLi44NmQ3YTdhIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0YXRlbWVudHdyYXBwZXIvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RhdGVtZW50d3JhcHBlci9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKQEAgLTI5LDI4ICsyOSwyOCBAQAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogCi0gCVNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOwotCVN0cmluZyB0ZXN0U3VpdGUgPSAiU3RhdGVtZW50V3JhcHBlciAiOworICAgICBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKKyAgICBTdHJpbmcgdGVzdFN1aXRlID0gIlN0YXRlbWVudFdyYXBwZXIgIjsKIAogICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgT2JqZWN0IG9ialJlZiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlQk1QSG9tZSIpOwotCVNpbXBsZUJNUEhvbWUgc2ltcGxlQk1QSG9tZSA9IChTaW1wbGVCTVBIb21lKQorICAgIFNpbXBsZUJNUEhvbWUgc2ltcGxlQk1QSG9tZSA9IChTaW1wbGVCTVBIb21lKQogICAgIGphdmF4LnJtaS5Qb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqUmVmLCBTaW1wbGVCTVBIb21lLmNsYXNzKTsKIAogICAgIFNpbXBsZUJNUCBzaW1wbGVCTVAgPSBzaW1wbGVCTVBIb21lLmNyZWF0ZSgpOwogICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIkpEQkMgU3RhdGVtZW50IFdyYXBwZXIgVGVzdHMiKTsKIAogICAgIGlmICggc2ltcGxlQk1QLnN0YXRlbWVudFRlc3QoKSApIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyIgc3RhdGVtZW50VGVzdCA6ICIsIHN0YXQuUEFTUyk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyIgc3RhdGVtZW50VGVzdCA6ICIsIHN0YXQuRkFJTCk7Ci0JfQorICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIiBzdGF0ZW1lbnRUZXN0IDogIiwgc3RhdC5QQVNTKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIiBzdGF0ZW1lbnRUZXN0IDogIiwgc3RhdC5GQUlMKTsKKyAgICB9CiAKLQlpZiAoIHNpbXBsZUJNUC5wcmVwYXJlZFN0YXRlbWVudFRlc3QoKSApIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyIgcHJlcGFyZWRTdGF0ZW1lbnRUZXN0IDogIiwgc3RhdC5QQVNTKTsKLQl9IGVsc2UgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIiBwcmVwYXJlZFN0YXRlbWVudFRlc3QgOiAiLCBzdGF0LkZBSUwpOwotCX0KKyAgICBpZiAoIHNpbXBsZUJNUC5wcmVwYXJlZFN0YXRlbWVudFRlc3QoKSApIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyIgcHJlcGFyZWRTdGF0ZW1lbnRUZXN0IDogIiwgc3RhdC5QQVNTKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIiBwcmVwYXJlZFN0YXRlbWVudFRlc3QgOiAiLCBzdGF0LkZBSUwpOworICAgIH0KIAogICAgIGlmICggc2ltcGxlQk1QLmNhbGxhYmxlU3RhdGVtZW50VGVzdCgpICkgewogICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIiBjYWxsYWJsZVN0YXRlbWVudFRlc3QgOiAiLCBzdGF0LlBBU1MpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdGF0ZW1lbnR3cmFwcGVyL2Rlc2NyaXB0b3IvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0YXRlbWVudHdyYXBwZXIvZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCBjOTBlOWJlLi5hNTY4YjgyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0YXRlbWVudHdyYXBwZXIvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0YXRlbWVudHdyYXBwZXIvZGVzY3JpcHRvci9lamItamFyLnhtbApAQCAtNTcsNiArNTcsNiBAQAogICAgICAgPHRyYW5zLWF0dHJpYnV0ZT5SZXF1aXJlZDwvdHJhbnMtYXR0cmlidXRlPgogICAgIDwvY29udGFpbmVyLXRyYW5zYWN0aW9uPgogICA8L2Fzc2VtYmx5LWRlc2NyaXB0b3I+Ci0gICAgICAKKwogPC9lamItamFyPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0YXRlbWVudHdyYXBwZXIvZWpiL1NpbXBsZUJNUEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RhdGVtZW50d3JhcHBlci9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCmluZGV4IDk3YWVhZDAuLjM4YThjNzcgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RhdGVtZW50d3JhcHBlci9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RhdGVtZW50d3JhcHBlci9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCkBAIC0yOCwxOCArMjgsMTggQEAKICAgICBwcm90ZWN0ZWQgRGF0YVNvdXJjZSBkczsKIAogICAgIHB1YmxpYyB2b2lkIHNldEVudGl0eUNvbnRleHQoRW50aXR5Q29udGV4dCBlbnRpdHlDb250ZXh0KSB7Ci0JQ29udGV4dCBjb250ZXh0ID0gbnVsbDsKLQl0cnkgewotCSAgICBjb250ZXh0ICAgID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JICAgIGRzID0gKERhdGFTb3VyY2UpIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKLQl9IGNhdGNoIChOYW1pbmdFeGNlcHRpb24gZSkgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJjYW50IGZpbmQgZGF0YXNvdXJjZSIpOwotCX0KKyAgICBDb250ZXh0IGNvbnRleHQgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIGNvbnRleHQgICAgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgZHMgPSAoRGF0YVNvdXJjZSkgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZSIpOworICAgIH0gY2F0Y2ggKE5hbWluZ0V4Y2VwdGlvbiBlKSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImNhbnQgZmluZCBkYXRhc291cmNlIik7CisgICAgfQogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlsqKlNpbXBsZUJNUEJlYW4qKl0gRG9uZSB3aXRoIHNldEVudGl0eUNvbnRleHQuLi4uIik7CiAgICAgfQogCiAgICAgcHVibGljIEludGVnZXIgZWpiQ3JlYXRlKCkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7Ci0JICAgIHJldHVybiBuZXcgSW50ZWdlcigxKTsKKyAgICAgICAgcmV0dXJuIG5ldyBJbnRlZ2VyKDEpOwogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIHN0YXRlbWVudFRlc3QoKSB7CkBAIC01Miw4ICs1Miw4IEBACiAgICAgICAgICAgICBzdG10ID0gY29uRnJvbURTLmNyZWF0ZVN0YXRlbWVudCgpOwogICAgICAgICAgICAgY29uRnJvbVN0YXRlbWVudCA9IHN0bXQuZ2V0Q29ubmVjdGlvbigpOwogCi0JCVN5c3RlbS5vdXQucHJpbnRsbigic3RhdGVtZW50IFRlc3QgOiBjb25Gcm9tRFMgOiAiICsgY29uRnJvbURTKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJzdGF0ZW1lbnQgVGVzdCA6IGNvbkZyb21TdGF0ZW1lbnQgOiAiICsgY29uRnJvbVN0YXRlbWVudCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigic3RhdGVtZW50IFRlc3QgOiBjb25Gcm9tRFMgOiAiICsgY29uRnJvbURTKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJzdGF0ZW1lbnQgVGVzdCA6IGNvbkZyb21TdGF0ZW1lbnQgOiAiICsgY29uRnJvbVN0YXRlbWVudCk7CiAKICAgICAgICAgICAgIGlmKCBjb25Gcm9tRFM9PWNvbkZyb21TdGF0ZW1lbnQgfHwgY29uRnJvbURTLmVxdWFscyhjb25Gcm9tU3RhdGVtZW50KSApewogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CkBAIC04NCw4ICs4NCw4IEBACiAgICAgICAgICAgICBzdG10ID0gY29uRnJvbURTLnByZXBhcmVTdGF0ZW1lbnQoInNlbGVjdCAqIGZyb20gY3VzdG9tZXJfc3RtdF93cmFwcGVyIik7CiAgICAgICAgICAgICBjb25Gcm9tU3RhdGVtZW50ID0gc3RtdC5nZXRDb25uZWN0aW9uKCk7CiAKLQkJU3lzdGVtLm91dC5wcmludGxuKCJQcmVwYXJlZCBzdGF0ZW1lbnQgVGVzdCA6IGNvbkZyb21EUyA6ICIgKyBjb25Gcm9tRFMpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlByZXBhcmVkIHN0YXRlbWVudCBUZXN0IDogY29uRnJvbVN0YXRlbWVudCA6ICIgKyBjb25Gcm9tU3RhdGVtZW50KTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQcmVwYXJlZCBzdGF0ZW1lbnQgVGVzdCA6IGNvbkZyb21EUyA6ICIgKyBjb25Gcm9tRFMpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlByZXBhcmVkIHN0YXRlbWVudCBUZXN0IDogY29uRnJvbVN0YXRlbWVudCA6ICIgKyBjb25Gcm9tU3RhdGVtZW50KTsKICAgICAgICAgICAgIGlmKCBjb25Gcm9tRFM9PWNvbkZyb21TdGF0ZW1lbnQgfHwgY29uRnJvbURTLmVxdWFscyhjb25Gcm9tU3RhdGVtZW50KSApewogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CiAgICAgICAgICAgICB9CkBAIC0xMTUsOCArMTE1LDggQEAKICAgICAgICAgICAgIHN0bXQgPSBjb25Gcm9tRFMucHJlcGFyZUNhbGwoInNlbGVjdCAqIGZyb20gY3VzdG9tZXJfc3RtdF93cmFwcGVyIik7CiAgICAgICAgICAgICBjb25Gcm9tU3RhdGVtZW50ID0gc3RtdC5nZXRDb25uZWN0aW9uKCk7CiAKLQkJU3lzdGVtLm91dC5wcmludGxuKCJDYWxsYWJsZSBzdGF0ZW1lbnQgVGVzdCA6IGNvbkZyb21EUyA6ICIgKyBjb25Gcm9tRFMpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxhYmxlIHN0YXRlbWVudCBUZXN0IDogY29uRnJvbVN0YXRlbWVudCA6ICIgKyBjb25Gcm9tU3RhdGVtZW50KTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYWxsYWJsZSBzdGF0ZW1lbnQgVGVzdCA6IGNvbkZyb21EUyA6ICIgKyBjb25Gcm9tRFMpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxhYmxlIHN0YXRlbWVudCBUZXN0IDogY29uRnJvbVN0YXRlbWVudCA6ICIgKyBjb25Gcm9tU3RhdGVtZW50KTsKICAgICAgICAgICAgIGlmKCBjb25Gcm9tRFM9PWNvbkZyb21TdGF0ZW1lbnQgfHwgY29uRnJvbURTLmVxdWFscyhjb25Gcm9tU3RhdGVtZW50KSApewogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CiAgICAgICAgICAgICB9CkBAIC0xNDYsOCArMTQ2LDggQEAKICAgICAgICAgICAgIGRibWQgPSBjb25Gcm9tRFMuZ2V0TWV0YURhdGEoKTsKICAgICAgICAgICAgIGNvbkZyb21NZXRhRGF0YSA9IGRibWQuZ2V0Q29ubmVjdGlvbigpOwogCi0JCVN5c3RlbS5vdXQucHJpbnRsbigic3RhdGVtZW50VGVzdCA6IGNvbkZyb21EUyA6ICIgKyBjb25Gcm9tRFMpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oInN0YXRlbWVudFRlc3QgOiBjb25Gcm9tRGJNZXRhZGF0YSA6ICIgKyBjb25Gcm9tTWV0YURhdGEpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInN0YXRlbWVudFRlc3QgOiBjb25Gcm9tRFMgOiAiICsgY29uRnJvbURTKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJzdGF0ZW1lbnRUZXN0IDogY29uRnJvbURiTWV0YWRhdGEgOiAiICsgY29uRnJvbU1ldGFEYXRhKTsKICAgICAgICAgICAgIGlmKCBjb25Gcm9tRFM9PWNvbkZyb21NZXRhRGF0YSB8fCBjb25Gcm9tRFMuZXF1YWxzKGNvbkZyb21NZXRhRGF0YSkgKXsKICAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlOwogICAgICAgICAgICAgfQpAQCAtMTczLDggKzE3Myw4IEBACiAgICAgICAgICAgICBycyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KCJzZWxlY3QgKiBmcm9tIGN1c3RvbWVyX3N0bXRfd3JhcHBlciIpOwogICAgICAgICAgICAgY29uRnJvbVJlc3VsdFNldCA9IHJzLmdldFN0YXRlbWVudCgpLmdldENvbm5lY3Rpb24oKTsKIAotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlJlc3VsdFNldCB0ZXN0IDogY29uRnJvbURTIDogIiArIGNvbkZyb21EUyk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiUmVzdWx0U2V0IHRlc3QgOiBjb25Gcm9tUmVzdWx0U2V0OiAiICsgY29uRnJvbVJlc3VsdFNldCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzdWx0U2V0IHRlc3QgOiBjb25Gcm9tRFMgOiAiICsgY29uRnJvbURTKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXN1bHRTZXQgdGVzdCA6IGNvbkZyb21SZXN1bHRTZXQ6ICIgKyBjb25Gcm9tUmVzdWx0U2V0KTsKICAgICAgICAgICAgIGlmKCBjb25Gcm9tRFM9PWNvbkZyb21SZXN1bHRTZXQgfHwgY29uRnJvbURTLmVxdWFscyhjb25Gcm9tUmVzdWx0U2V0KSApewogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0YXRlbWVudHdyYXBwZXIvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdGF0ZW1lbnR3cmFwcGVyL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCBkZDRjNWU1Li4xMWU2MWVlIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0YXRlbWVudHdyYXBwZXIvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RhdGVtZW50d3JhcHBlci9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsMTAgKzEsMTAgQEAKLQ0KLURyb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyOw0KLQ0KLUNSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXIgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCi1JTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXIgVkFMVUVTKDEsICd3eHl6Jyk7DQorCitEcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjsKKworQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlciAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCitJTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXIgVkFMVUVTKDEsICd3eHl6Jyk7CiBJTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXIgVkFMVUVTKDIsICdwcXJzJyk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy5maXhlZC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy5maXhlZC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDc0YTI5NzkuLjEwMmYxNWMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3MuZml4ZWQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0bXRDYWNoaW5nX2hpdF9taXNzLmZpeGVkL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE5ICsxNSwxOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iamRiYy1zdG10Y2FjaGluZ19oaXRfbWlzcyIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iMTIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3MuZml4ZWQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy5maXhlZC9idWlsZC54bWwKaW5kZXggZTk2ZjQ5ZS4uZTQyYjc3OSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy5maXhlZC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy5maXhlZC9idWlsZC54bWwKQEAgLTY5LDcgKzY5LDcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQk8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCIvPgogICAgICAgICA8L2FudGNhbGw+CiAKQEAgLTkyLDE4ICs5MiwxOCBAQAogCiAKIAotCTxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgorICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgogICAgICAgICAgICAgICAgICAgIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy1zdG10Y2FjaGluZ19oaXRfbWlzcy1wb29sLnN0YXRlbWVudF9jYWNoZV9zaXplPTUiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCi0JPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLXN0bXRjYWNoaW5nX2hpdF9taXNzLXBvb2wuc3RhdGVtZW50X2NhY2hlX3R5cGU9RklYRUQiLz4KICAgICAgICAgPC9hbnRjYWxsPgotCTxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgorICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgogICAgICAgICAgICAgICAgICAgIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy1zdG10Y2FjaGluZ19oaXRfbWlzcy1wb29sLndyYXBfamRiY19vYmplY3RzPXRydWUiLz4KQEAgLTExNSwxMCArMTE1LDEwIEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLmpkYmMtc3RtdGNhY2hpbmdfaGl0X21pc3MtcG9vbC5pZGxlX3RpbWVvdXRfaW5fc2Vjb25kcz0zMDAwIi8+CiAgICA8L2FudGNhbGw+Ci0JPCEtLTxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgorICAgIDwhLS08YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKLQkJICAgIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy1zdG10Y2FjaGluZ19oaXRfbWlzcy1wb29sLnByb3BlcnR5LlN0YXRlbWVudENhY2hlVHlwZT0iLz4KKyAgICAgICAgICAgIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy1zdG10Y2FjaGluZ19oaXRfbWlzcy1wb29sLnByb3BlcnR5LlN0YXRlbWVudENhY2hlVHlwZT0iLz4KICAgICA8L2FudGNhbGw+LS0+CiAgICAgPC90YXJnZXQ+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3MuZml4ZWQvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3MuZml4ZWQvZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCA5MjQ3ZTllLi44ZWNkYjMyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0bXRDYWNoaW5nX2hpdF9taXNzLmZpeGVkL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy5maXhlZC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC00Myw4ICs0Myw4IEBACiAgICAgICAgICAgICAgICAgPHJlcy1yZWYtbmFtZT5EYXRhU291cmNlPC9yZXMtcmVmLW5hbWU+CiAgICAgICAgICAgICAgICAgPHJlcy10eXBlPmphdmF4LnNxbC5EYXRhU291cmNlPC9yZXMtdHlwZT4KICAgICAgICAgICAgICAgICA8cmVzLWF1dGg+Q29udGFpbmVyPC9yZXMtYXV0aD4KLQkJPHJlcy1zaGFyaW5nLXNjb3BlPlVuc2hhcmVhYmxlPC9yZXMtc2hhcmluZy1zY29wZT4KLQkJICAgICA8L3Jlc291cmNlLXJlZj4KKyAgICAgICAgPHJlcy1zaGFyaW5nLXNjb3BlPlVuc2hhcmVhYmxlPC9yZXMtc2hhcmluZy1zY29wZT4KKyAgICAgICAgICAgICA8L3Jlc291cmNlLXJlZj4KIAogICAgICAgICA8L2VudGl0eT4KICAgICA8L2VudGVycHJpc2UtYmVhbnM+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0bXRDYWNoaW5nX2hpdF9taXNzLmZpeGVkL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy5maXhlZC9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAppbmRleCBmMzNmNjQxLi4yNWM5ZWY1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0bXRDYWNoaW5nX2hpdF9taXNzLmZpeGVkL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3MuZml4ZWQvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKQEAgLTI3LDcgKzI3LDcgQEAKICAgICAgICAgICAgIDxqbmRpLW5hbWU+Y29tLnN1bi5zMWFzZGV2LmpkYmMuc3RtdGNhY2hpbmcuZWpiLlNpbXBsZUJNUEhvbWU8L2puZGktbmFtZT4KICAgICAgICAgICAgIDxyZXNvdXJjZS1yZWY+CiAgICAgICAgICAgICAgICAgPHJlcy1yZWYtbmFtZT5EYXRhU291cmNlPC9yZXMtcmVmLW5hbWU+Ci0JCTxqbmRpLW5hbWU+amRiYy9qZGJjLXN0bXRjYWNoaW5nX2hpdF9taXNzPC9qbmRpLW5hbWU+CisgICAgICAgIDxqbmRpLW5hbWU+amRiYy9qZGJjLXN0bXRjYWNoaW5nX2hpdF9taXNzPC9qbmRpLW5hbWU+CiAgICAgICAgICAgICAgICAgPGRlZmF1bHQtcmVzb3VyY2UtcHJpbmNpcGFsPgogICAgICAgICAgICAgICAgICAgICA8bmFtZT5EQlVTRVI8L25hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxwYXNzd29yZD5EQlBBU1NXT1JEPC9wYXNzd29yZD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3MuZml4ZWQvZWpiL1NpbXBsZUJNUEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3MuZml4ZWQvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQppbmRleCBiY2YzNjc2Li5hNTM1NDE1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0bXRDYWNoaW5nX2hpdF9taXNzLmZpeGVkL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy5maXhlZC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCkBAIC00MSwxMDAgKzQxLDEwMCBAQAogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIHRlc3RIaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZW1lbnQgY2FjaGluZyBIaXQgdGVzdCBTdGFydCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVtZW50IGNhY2hpbmcgSGl0IHRlc3QgU3RhcnQiKTsKICAgICAgICAgY29tLnN1bi5hcHBzZXJ2LmpkYmMuRGF0YVNvdXJjZSBkcyA9IG51bGw7CiAgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHN0bXQgPSBudWxsOwotCVByZXBhcmVkU3RhdGVtZW50IGZpcnN0U3RhdGVtZW50ID0gbnVsbDsKLQlQcmVwYXJlZFN0YXRlbWVudCBsYXN0U3RhdGVtZW50ID0gbnVsbDsKKyAgICBQcmVwYXJlZFN0YXRlbWVudCBmaXJzdFN0YXRlbWVudCA9IG51bGw7CisgICAgUHJlcGFyZWRTdGF0ZW1lbnQgbGFzdFN0YXRlbWVudCA9IG51bGw7CiAgICAgICAgIFN0cmluZyB0YWJsZU5hbWUgPSAiY3VzdG9tZXJfc3RtdF93cmFwcGVyIjsKICAgICAgICAgZHMgPSB0aGlzLmRzOwotCWludCB0YWJsZUluZGV4ID0gMTsKKyAgICBpbnQgdGFibGVJbmRleCA9IDE7CiAgICAgICAgIGJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CiAgICAgICAgICAgICBDb25uZWN0aW9uIGNvbm4gPSBudWxsOwotCXRyeSB7CisgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIj4+Pj4gY29ubiA9ICIgKyBjb25uLmhhc2hDb2RlKCkpOwotCX1jYXRjaChFeGNlcHRpb24gZXgpIHsKLQl9CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPj4+PiBjb25uID0gIiArIGNvbm4uaGFzaENvZGUoKSk7CisgICAgfWNhdGNoKEV4Y2VwdGlvbiBleCkgeworICAgIH0KICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCA3OyBpKyspIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbmRleCA9ICIgKyBpKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbmRleCA9ICIgKyBpKTsKICAgICAgICAgICAgIHRyeSB7CiAKLQkgICAgICAgIGlmKGkgPT0gNikgewotCQkgICAgc3RtdCA9IGNvbm4ucHJlcGFyZVN0YXRlbWVudCgic2VsZWN0ICogZnJvbSAiKyB0YWJsZU5hbWUgKyB0YWJsZUluZGV4ICsgIiB3aGVyZSBjX3Bob25lPSA/Iik7Ci0JCSAgICBsYXN0U3RhdGVtZW50ID0gc3RtdDsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigibGFzdFN0YXRlbWVudCA6ICIgICsgbGFzdFN0YXRlbWVudCk7Ci0JCX0gZWxzZSB7ICAgCi0JCSAgICBpbnRbXSBjb2x1bW5JbmRleGVzID0ge2krMSwgaSsyfTsKKyAgICAgICAgICAgIGlmKGkgPT0gNikgeworICAgICAgICAgICAgc3RtdCA9IGNvbm4ucHJlcGFyZVN0YXRlbWVudCgic2VsZWN0ICogZnJvbSAiKyB0YWJsZU5hbWUgKyB0YWJsZUluZGV4ICsgIiB3aGVyZSBjX3Bob25lPSA/Iik7CisgICAgICAgICAgICBsYXN0U3RhdGVtZW50ID0gc3RtdDsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibGFzdFN0YXRlbWVudCA6ICIgICsgbGFzdFN0YXRlbWVudCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpbnRbXSBjb2x1bW5JbmRleGVzID0ge2krMSwgaSsyfTsKICAgICAgICAgICAgICAgICAgICAgc3RtdCA9IGNvbm4ucHJlcGFyZVN0YXRlbWVudCgic2VsZWN0ICogZnJvbSAiKyB0YWJsZU5hbWUraSArIiB3aGVyZSBjX3Bob25lPSA/Iik7Ci0JCX0KLQkJaWYoaSA9PSAxKSB7Ci0JCSAgICBmaXJzdFN0YXRlbWVudCA9IHN0bXQ7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZpcnN0U3RhdGVtZW50IDogIiArIGZpcnN0U3RhdGVtZW50KTsKLQkJfSAKKyAgICAgICAgfQorICAgICAgICBpZihpID09IDEpIHsKKyAgICAgICAgICAgIGZpcnN0U3RhdGVtZW50ID0gc3RtdDsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZmlyc3RTdGF0ZW1lbnQgOiAiICsgZmlyc3RTdGF0ZW1lbnQpOworICAgICAgICB9CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICAgICAgcGFzc2VkID0gZmFsc2U7CiAgICAgICAgICAgICB9IGZpbmFsbHkgewotCQlpZihzdG10ICE9IG51bGwpIHsKLQkgICAgICAgICAgICB0cnkgewotCQkJc3RtdC5jbG9zZSgpOwotCQkgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHt9Ci0JCX0KKyAgICAgICAgaWYoc3RtdCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHN0bXQuY2xvc2UoKTsKKyAgICAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7fQorICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLQlwYXNzZWQgPSAoZmlyc3RTdGF0ZW1lbnQgPT0gbGFzdFN0YXRlbWVudCk7Ci0JdHJ5IHsKLQkgICAgaWYoZmlyc3RTdGF0ZW1lbnQgIT0gbnVsbCkgewotCQlmaXJzdFN0YXRlbWVudC5jbG9zZSgpOwotCSAgICB9Ci0JICAgIGlmKGxhc3RTdGF0ZW1lbnQgIT0gbnVsbCkgewotCQlsYXN0U3RhdGVtZW50LmNsb3NlKCk7Ci0JICAgIH0KKyAgICBwYXNzZWQgPSAoZmlyc3RTdGF0ZW1lbnQgPT0gbGFzdFN0YXRlbWVudCk7CisgICAgdHJ5IHsKKyAgICAgICAgaWYoZmlyc3RTdGF0ZW1lbnQgIT0gbnVsbCkgeworICAgICAgICBmaXJzdFN0YXRlbWVudC5jbG9zZSgpOworICAgICAgICB9CisgICAgICAgIGlmKGxhc3RTdGF0ZW1lbnQgIT0gbnVsbCkgeworICAgICAgICBsYXN0U3RhdGVtZW50LmNsb3NlKCk7CisgICAgICAgIH0KICAgICAgICAgLyogICAgICAgIGlmIChjb25uICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUxKSB7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ki8gCi0JfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKLQkgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQotCVN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVtZW50IGNhY2hpbmcgSGl0IHRlc3QgRW5kIik7Ci0JcmV0dXJuIHBhc3NlZDsKKyAgICAgICAgICAgICAgICB9Ki8KKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCkgeworICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICB9Ci0gICAgCisgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZW1lbnQgY2FjaGluZyBIaXQgdGVzdCBFbmQiKTsKKyAgICByZXR1cm4gcGFzc2VkOworICAgIH0KKwogICAgIHB1YmxpYyBib29sZWFuIHRlc3RNaXNzKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVtZW50IGNhY2hpbmcgSGl0IGFmdGVyIE1pc3MgdGVzdCBTdGFydCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVtZW50IGNhY2hpbmcgSGl0IGFmdGVyIE1pc3MgdGVzdCBTdGFydCIpOwogICAgICAgICBjb20uc3VuLmFwcHNlcnYuamRiYy5EYXRhU291cmNlIGRzID0gbnVsbDsKICAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgc3RtdCA9IG51bGw7Ci0JUHJlcGFyZWRTdGF0ZW1lbnQgZmlyc3RTdGF0ZW1lbnQgPSBudWxsOwotCVByZXBhcmVkU3RhdGVtZW50IGxhc3RTdGF0ZW1lbnQgPSBudWxsOworICAgIFByZXBhcmVkU3RhdGVtZW50IGZpcnN0U3RhdGVtZW50ID0gbnVsbDsKKyAgICBQcmVwYXJlZFN0YXRlbWVudCBsYXN0U3RhdGVtZW50ID0gbnVsbDsKICAgICAgICAgU3RyaW5nIHRhYmxlTmFtZSA9ICJjdXN0b21lcl9zdG10X3dyYXBwZXIiOwogICAgICAgICBkcyA9IHRoaXMuZHM7Ci0JaW50IHRhYmxlSW5kZXggPSAxOworICAgIGludCB0YWJsZUluZGV4ID0gMTsKIAogICAgICAgICBDb25uZWN0aW9uIGNvbm4gPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCI+Pj4+IGNvbm4gPSAiICsgY29ubi5oYXNoQ29kZSgpKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI+Pj4+IGNvbm4gPSAiICsgY29ubi5oYXNoQ29kZSgpKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHt9CiAgICAgICAgIGJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CiAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgODsgaSsrKSB7CiAgICAgICAgICAgICB0cnkgewogCi0JCWlmKGkgPT0gNikgewotCQkJLy9zdG10ID0gY29ubi5wcmVwYXJlU3RhdGVtZW50KCJzZWxlY3QgKiBmcm9tICIgKyB0YWJsZU5hbWUgKyB0YWJsZUluZGV4ICsgIiB3aGVyZSBjX3Bob25lPT8iKTsKKyAgICAgICAgaWYoaSA9PSA2KSB7CisgICAgICAgICAgICAvL3N0bXQgPSBjb25uLnByZXBhcmVTdGF0ZW1lbnQoInNlbGVjdCAqIGZyb20gIiArIHRhYmxlTmFtZSArIHRhYmxlSW5kZXggKyAiIHdoZXJlIGNfcGhvbmU9PyIpOwogICAgICAgICAgICAgICAgICAgICBzdG10ID0gY29ubi5wcmVwYXJlU3RhdGVtZW50KCJzZWxlY3QgKiBmcm9tICIrIHRhYmxlTmFtZStpICsiIHdoZXJlIGNfcGhvbmU9ID8iKTsKLQkJICAgIGxhc3RTdGF0ZW1lbnQgPSBzdG10OwotCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJsYXN0U3RhdGVtZW50IDogIiAgKyBsYXN0U3RhdGVtZW50KTsKLQkJfSBlbHNlIHsKKyAgICAgICAgICAgIGxhc3RTdGF0ZW1lbnQgPSBzdG10OworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJsYXN0U3RhdGVtZW50IDogIiAgKyBsYXN0U3RhdGVtZW50KTsKKyAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgc3RtdCA9IGNvbm4ucHJlcGFyZVN0YXRlbWVudCgic2VsZWN0ICogZnJvbSAiKyB0YWJsZU5hbWUraSArIiB3aGVyZSBjX3Bob25lPSA/Iik7Ci0JCX0KLQkJaWYoaSA9PSAxKSB7Ci0JCSAgICBmaXJzdFN0YXRlbWVudCA9IHN0bXQ7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZpcnN0U3RhdGVtZW50IDogIiArIGZpcnN0U3RhdGVtZW50KTsKLQkJfQorICAgICAgICB9CisgICAgICAgIGlmKGkgPT0gMSkgeworICAgICAgICAgICAgZmlyc3RTdGF0ZW1lbnQgPSBzdG10OworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJmaXJzdFN0YXRlbWVudCA6ICIgKyBmaXJzdFN0YXRlbWVudCk7CisgICAgICAgIH0KICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgICAgICBwYXNzZWQgPSBmYWxzZTsKQEAgLTE0MiwxNTUgKzE0MiwxNTUgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBwYXNzZWQgPSBmaXJzdFN0YXRlbWVudCAhPSBsYXN0U3RhdGVtZW50OwotCXRyeSB7Ci0JICAgIGlmKGZpcnN0U3RhdGVtZW50ICE9IG51bGwpIHsKLQkJZmlyc3RTdGF0ZW1lbnQuY2xvc2UoKTsKLQkgICAgfQotCSAgICBpZihsYXN0U3RhdGVtZW50ICE9IG51bGwpIHsKLQkJbGFzdFN0YXRlbWVudC5jbG9zZSgpOwotCSAgICB9Ci0vKgkgICAgaWYoY29ubiAhPSBudWxsKSB7Ci0JICAgICAgICBjb25uLmNsb3NlKCk7Ci0JICAgIH0qLwotCX0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7Ci0JICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotCX0KLQlTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlbWVudCBjYWNoaW5nIEhpdCBhZnRlciBNaXNzIHRlc3QgRW5kIik7CisgICAgdHJ5IHsKKyAgICAgICAgaWYoZmlyc3RTdGF0ZW1lbnQgIT0gbnVsbCkgeworICAgICAgICBmaXJzdFN0YXRlbWVudC5jbG9zZSgpOworICAgICAgICB9CisgICAgICAgIGlmKGxhc3RTdGF0ZW1lbnQgIT0gbnVsbCkgeworICAgICAgICBsYXN0U3RhdGVtZW50LmNsb3NlKCk7CisgICAgICAgIH0KKy8qICAgICAgICBpZihjb25uICE9IG51bGwpIHsKKyAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKKyAgICAgICAgfSovCisgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVtZW50IGNhY2hpbmcgSGl0IGFmdGVyIE1pc3MgdGVzdCBFbmQiKTsKICAgICAgICAgcmV0dXJuIHBhc3NlZDsKICAgICB9CiAKIAogICAgIHB1YmxpYyBib29sZWFuIHRlc3RIaXRDb2x1bW5OYW1lcygpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlbWVudCBjYWNoaW5nIEhpdCAoQ29sdW1uIE5hbWVzKSB0ZXN0IFN0YXJ0Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZW1lbnQgY2FjaGluZyBIaXQgKENvbHVtbiBOYW1lcykgdGVzdCBTdGFydCIpOwogICAgICAgICBjb20uc3VuLmFwcHNlcnYuamRiYy5EYXRhU291cmNlIGRzID0gbnVsbDsKICAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgc3RtdCA9IG51bGw7Ci0JUHJlcGFyZWRTdGF0ZW1lbnQgZmlyc3RTdGF0ZW1lbnQgPSBudWxsOwotCVByZXBhcmVkU3RhdGVtZW50IGxhc3RTdGF0ZW1lbnQgPSBudWxsOworICAgIFByZXBhcmVkU3RhdGVtZW50IGZpcnN0U3RhdGVtZW50ID0gbnVsbDsKKyAgICBQcmVwYXJlZFN0YXRlbWVudCBsYXN0U3RhdGVtZW50ID0gbnVsbDsKICAgICAgICAgU3RyaW5nIHRhYmxlTmFtZSA9ICJjdXN0b21lcl9zdG10X3dyYXBwZXIiOwogICAgICAgICBkcyA9IHRoaXMuZHM7Ci0JaW50IHRhYmxlSW5kZXggPSAxOworICAgIGludCB0YWJsZUluZGV4ID0gMTsKICAgICAgICAgYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKICAgICAgICAgQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKLQl0cnkgeworICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCI+Pj4+IGNvbm4gPSAiICsgY29ubi5oYXNoQ29kZSgpKTsKLQl9Y2F0Y2goRXhjZXB0aW9uIGV4KSB7Ci0JfQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj4+Pj4gY29ubiA9ICIgKyBjb25uLmhhc2hDb2RlKCkpOworICAgIH1jYXRjaChFeGNlcHRpb24gZXgpIHsKKyAgICB9CiAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgNzsgaSsrKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW5kZXggPSAiICsgaSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW5kZXggPSAiICsgaSk7CiAgICAgICAgICAgICB0cnkgewogCi0JICAgICAgICBpZihpID09IDYpIHsKLQkJICAgIFN0cmluZ1tdIGNvbHVtbk5hbWVzID0geyJjX2lkIiwgImNfcGhvbmUifTsKLQkJICAgIHN0bXQgPSBjb25uLnByZXBhcmVTdGF0ZW1lbnQoInNlbGVjdCAqIGZyb20gIisgdGFibGVOYW1lICsgdGFibGVJbmRleCArICIgd2hlcmUgY19waG9uZT0gPyIsIGNvbHVtbk5hbWVzKTsKLQkJICAgIGxhc3RTdGF0ZW1lbnQgPSBzdG10OwotCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJsYXN0U3RhdGVtZW50IDogIiAgKyBsYXN0U3RhdGVtZW50KTsKLQkJfSBlbHNlIGlmKGkgPT0xKSB7ICAgCi0JCSAgICBTdHJpbmdbXSBjb2x1bW5OYW1lcyA9IHsiY19pZCIsICJjX3Bob25lIn07Ci0JCSAgICBzdG10ID0gY29ubi5wcmVwYXJlU3RhdGVtZW50KCJzZWxlY3QgKiBmcm9tICIrIHRhYmxlTmFtZSArIHRhYmxlSW5kZXggKyAiIHdoZXJlIGNfcGhvbmU9ID8iLCBjb2x1bW5OYW1lcyk7Ci0JCSAgICBmaXJzdFN0YXRlbWVudCA9IHN0bXQ7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZpcnN0U3RhdGVtZW50IDogIiArIGZpcnN0U3RhdGVtZW50KTsKLQkJfSBlbHNlIHsKLQkJICAgIGludCBqID0gaSArIDI7CisgICAgICAgICAgICBpZihpID09IDYpIHsKKyAgICAgICAgICAgIFN0cmluZ1tdIGNvbHVtbk5hbWVzID0geyJjX2lkIiwgImNfcGhvbmUifTsKKyAgICAgICAgICAgIHN0bXQgPSBjb25uLnByZXBhcmVTdGF0ZW1lbnQoInNlbGVjdCAqIGZyb20gIisgdGFibGVOYW1lICsgdGFibGVJbmRleCArICIgd2hlcmUgY19waG9uZT0gPyIsIGNvbHVtbk5hbWVzKTsKKyAgICAgICAgICAgIGxhc3RTdGF0ZW1lbnQgPSBzdG10OworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJsYXN0U3RhdGVtZW50IDogIiAgKyBsYXN0U3RhdGVtZW50KTsKKyAgICAgICAgfSBlbHNlIGlmKGkgPT0xKSB7CisgICAgICAgICAgICBTdHJpbmdbXSBjb2x1bW5OYW1lcyA9IHsiY19pZCIsICJjX3Bob25lIn07CisgICAgICAgICAgICBzdG10ID0gY29ubi5wcmVwYXJlU3RhdGVtZW50KCJzZWxlY3QgKiBmcm9tICIrIHRhYmxlTmFtZSArIHRhYmxlSW5kZXggKyAiIHdoZXJlIGNfcGhvbmU9ID8iLCBjb2x1bW5OYW1lcyk7CisgICAgICAgICAgICBmaXJzdFN0YXRlbWVudCA9IHN0bXQ7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZpcnN0U3RhdGVtZW50IDogIiArIGZpcnN0U3RhdGVtZW50KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGludCBqID0gaSArIDI7CiAgICAgICAgICAgICAgICAgICAgIGludCBrID0gaiArIDE7Ci0JCSAgICBTdHJpbmdbXSBjb2x1bW5OYW1lcyA9IHsiY19pZCIraiwgImNfaWQiK2t9OworICAgICAgICAgICAgU3RyaW5nW10gY29sdW1uTmFtZXMgPSB7ImNfaWQiK2osICJjX2lkIitrfTsKICAgICAgICAgICAgICAgICAgICAgc3RtdCA9IGNvbm4ucHJlcGFyZVN0YXRlbWVudCgic2VsZWN0ICogZnJvbSAiKyB0YWJsZU5hbWUraSArIiB3aGVyZSBjX3Bob25lPSA/IiwgY29sdW1uTmFtZXMpOwotCQl9CisgICAgICAgIH0KICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgICAgICBwYXNzZWQgPSBmYWxzZTsKICAgICAgICAgICAgIH0gZmluYWxseSB7Ci0JCWlmKHN0bXQgIT0gbnVsbCkgewotCSAgICAgICAgICAgIHRyeSB7Ci0JCQlzdG10LmNsb3NlKCk7Ci0JCSAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCkge30KLQkJfQorICAgICAgICBpZihzdG10ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgc3RtdC5jbG9zZSgpOworICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHt9CisgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQotCXBhc3NlZCA9IChmaXJzdFN0YXRlbWVudCA9PSBsYXN0U3RhdGVtZW50KTsKLQl0cnkgewotCSAgICBpZihmaXJzdFN0YXRlbWVudCAhPSBudWxsKSB7Ci0JCWZpcnN0U3RhdGVtZW50LmNsb3NlKCk7Ci0JICAgIH0KLQkgICAgaWYobGFzdFN0YXRlbWVudCAhPSBudWxsKSB7Ci0JCWxhc3RTdGF0ZW1lbnQuY2xvc2UoKTsKLQkgICAgfQorICAgIHBhc3NlZCA9IChmaXJzdFN0YXRlbWVudCA9PSBsYXN0U3RhdGVtZW50KTsKKyAgICB0cnkgeworICAgICAgICBpZihmaXJzdFN0YXRlbWVudCAhPSBudWxsKSB7CisgICAgICAgIGZpcnN0U3RhdGVtZW50LmNsb3NlKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYobGFzdFN0YXRlbWVudCAhPSBudWxsKSB7CisgICAgICAgIGxhc3RTdGF0ZW1lbnQuY2xvc2UoKTsKKyAgICAgICAgfQogICAgICAgICAgICAgICAgLyogaWYgKGNvbm4gIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICAgY29ubi5jbG9zZSgpOwogICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZTEpIHsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0qLyAKLQl9IGNhdGNoKEV4Y2VwdGlvbiBleCkgewotCSAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLQl9Ci0JU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZW1lbnQgY2FjaGluZyBIaXQgKENvbHVtbiBuYW1lcykgdGVzdCBFbmQiKTsKLQlyZXR1cm4gcGFzc2VkOworICAgICAgICAgICAgICAgIH0qLworICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlbWVudCBjYWNoaW5nIEhpdCAoQ29sdW1uIG5hbWVzKSB0ZXN0IEVuZCIpOworICAgIHJldHVybiBwYXNzZWQ7CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdEhpdENvbHVtbkluZGV4ZXMoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZW1lbnQgY2FjaGluZyBIaXQgKENvbHVtbiBpbmRleGVzKSB0ZXN0IFN0YXJ0Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZW1lbnQgY2FjaGluZyBIaXQgKENvbHVtbiBpbmRleGVzKSB0ZXN0IFN0YXJ0Iik7CiAgICAgICAgIGNvbS5zdW4uYXBwc2Vydi5qZGJjLkRhdGFTb3VyY2UgZHMgPSBudWxsOwogICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBzdG10ID0gbnVsbDsKLQlQcmVwYXJlZFN0YXRlbWVudCBmaXJzdFN0YXRlbWVudCA9IG51bGw7Ci0JUHJlcGFyZWRTdGF0ZW1lbnQgbGFzdFN0YXRlbWVudCA9IG51bGw7CisgICAgUHJlcGFyZWRTdGF0ZW1lbnQgZmlyc3RTdGF0ZW1lbnQgPSBudWxsOworICAgIFByZXBhcmVkU3RhdGVtZW50IGxhc3RTdGF0ZW1lbnQgPSBudWxsOwogICAgICAgICBTdHJpbmcgdGFibGVOYW1lID0gImN1c3RvbWVyX3N0bXRfd3JhcHBlciI7CiAgICAgICAgIGRzID0gdGhpcy5kczsKLQlpbnQgdGFibGVJbmRleCA9IDE7CisgICAgaW50IHRhYmxlSW5kZXggPSAxOwogICAgICAgICBib29sZWFuIHBhc3NlZCA9IGZhbHNlOwogICAgICAgICAgICAgQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKLQl0cnkgeworICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCI+Pj4+IGNvbm4gPSAiICsgY29ubi5oYXNoQ29kZSgpKTsKLQl9Y2F0Y2goRXhjZXB0aW9uIGV4KSB7Ci0JfQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj4+Pj4gY29ubiA9ICIgKyBjb25uLmhhc2hDb2RlKCkpOworICAgIH1jYXRjaChFeGNlcHRpb24gZXgpIHsKKyAgICB9CiAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgNzsgaSsrKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW5kZXggPSAiICsgaSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW5kZXggPSAiICsgaSk7CiAgICAgICAgICAgICB0cnkgewogCi0JICAgICAgICBpZihpID09IDYpIHsKLQkJICAgIHN0bXQgPSBjb25uLnByZXBhcmVTdGF0ZW1lbnQoInNlbGVjdCAqIGZyb20gIisgdGFibGVOYW1lICsgdGFibGVJbmRleCArICIgd2hlcmUgY19waG9uZT0gPyIsIGNvbHVtbkluZGV4ZXM2KTsKLQkJICAgIGxhc3RTdGF0ZW1lbnQgPSBzdG10OwotCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJsYXN0U3RhdGVtZW50IDogIiAgKyBsYXN0U3RhdGVtZW50KTsKLQkJfSBlbHNlIHsgICAKLQkJCS8vRmlyc3Qgc3RtdCBleGVjdXRlZCB3b3VsZCBoYXZlIHsyLDN9IHNhbWUgYXMgY29sdW1uSW5kZXhlczYKLQkJICAgIGludFtdIGNvbHVtbkluZGV4ZXMgPSB7aSsxLCBpKzJ9OworICAgICAgICAgICAgaWYoaSA9PSA2KSB7CisgICAgICAgICAgICBzdG10ID0gY29ubi5wcmVwYXJlU3RhdGVtZW50KCJzZWxlY3QgKiBmcm9tICIrIHRhYmxlTmFtZSArIHRhYmxlSW5kZXggKyAiIHdoZXJlIGNfcGhvbmU9ID8iLCBjb2x1bW5JbmRleGVzNik7CisgICAgICAgICAgICBsYXN0U3RhdGVtZW50ID0gc3RtdDsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibGFzdFN0YXRlbWVudCA6ICIgICsgbGFzdFN0YXRlbWVudCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvL0ZpcnN0IHN0bXQgZXhlY3V0ZWQgd291bGQgaGF2ZSB7MiwzfSBzYW1lIGFzIGNvbHVtbkluZGV4ZXM2CisgICAgICAgICAgICBpbnRbXSBjb2x1bW5JbmRleGVzID0ge2krMSwgaSsyfTsKICAgICAgICAgICAgICAgICAgICAgc3RtdCA9IGNvbm4ucHJlcGFyZVN0YXRlbWVudCgic2VsZWN0ICogZnJvbSAiKyB0YWJsZU5hbWUraSArIiB3aGVyZSBjX3Bob25lPSA/IiwgY29sdW1uSW5kZXhlcyk7Ci0JCX0KLQkJaWYoaSA9PSAxKSB7Ci0JCSAgICBmaXJzdFN0YXRlbWVudCA9IHN0bXQ7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZpcnN0U3RhdGVtZW50IDogIiArIGZpcnN0U3RhdGVtZW50KTsKLQkJfSAKKyAgICAgICAgfQorICAgICAgICBpZihpID09IDEpIHsKKyAgICAgICAgICAgIGZpcnN0U3RhdGVtZW50ID0gc3RtdDsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZmlyc3RTdGF0ZW1lbnQgOiAiICsgZmlyc3RTdGF0ZW1lbnQpOworICAgICAgICB9CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICAgICAgcGFzc2VkID0gZmFsc2U7CiAgICAgICAgICAgICB9IGZpbmFsbHkgewotCQlpZihzdG10ICE9IG51bGwpIHsKLQkgICAgICAgICAgICB0cnkgewotCQkJc3RtdC5jbG9zZSgpOwotCQkgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHt9Ci0JCX0KKyAgICAgICAgaWYoc3RtdCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHN0bXQuY2xvc2UoKTsKKyAgICAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7fQorICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLQlwYXNzZWQgPSAoZmlyc3RTdGF0ZW1lbnQgPT0gbGFzdFN0YXRlbWVudCk7Ci0JdHJ5IHsKLQkgICAgaWYoZmlyc3RTdGF0ZW1lbnQgIT0gbnVsbCkgewotCQlmaXJzdFN0YXRlbWVudC5jbG9zZSgpOwotCSAgICB9Ci0JICAgIGlmKGxhc3RTdGF0ZW1lbnQgIT0gbnVsbCkgewotCQlsYXN0U3RhdGVtZW50LmNsb3NlKCk7Ci0JICAgIH0KKyAgICBwYXNzZWQgPSAoZmlyc3RTdGF0ZW1lbnQgPT0gbGFzdFN0YXRlbWVudCk7CisgICAgdHJ5IHsKKyAgICAgICAgaWYoZmlyc3RTdGF0ZW1lbnQgIT0gbnVsbCkgeworICAgICAgICBmaXJzdFN0YXRlbWVudC5jbG9zZSgpOworICAgICAgICB9CisgICAgICAgIGlmKGxhc3RTdGF0ZW1lbnQgIT0gbnVsbCkgeworICAgICAgICBsYXN0U3RhdGVtZW50LmNsb3NlKCk7CisgICAgICAgIH0KICAgICAgICAgICAgICAgICAvKmlmIChjb25uICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUxKSB7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9ICovCi0JfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKLQkgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQotCVN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVtZW50IGNhY2hpbmcgSGl0IChDb2x1bW4gaW5kZXhlcykgdGVzdCBFbmQiKTsKLQlyZXR1cm4gcGFzc2VkOworICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlbWVudCBjYWNoaW5nIEhpdCAoQ29sdW1uIGluZGV4ZXMpIHRlc3QgRW5kIik7CisgICAgcmV0dXJuIHBhc3NlZDsKICAgICB9CiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0bXRDYWNoaW5nX2hpdF9taXNzLmZpeGVkL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3MuZml4ZWQvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IDgyZjM0YTYuLjk4OGQyZTkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3MuZml4ZWQvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3MuZml4ZWQvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDE2MSArMSwxNjEgQEAKLWRyb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMTsNCi1kcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjI7DQotZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXIzOw0KLWRyb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNDsNCi1kcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjU7DQotZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI2Ow0KLWRyb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNzsNCi1kcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjg7DQotZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI5Ow0KLWRyb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMTA7DQotQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjEgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpLA0KLSAgICBjX2lkMyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ0ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDUgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNiAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ3ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDggICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkOSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQxMCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwNCi0NCi0pOw0KLQ0KLUlOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjEgVkFMVUVTKDIsICdpaW9wJywgMywgNCwgNSwgNiwgNywgOCwgOSwgMTApOw0KLQ0KLUNSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXIyICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KSwNCi0gICAgY19pZDMgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ1ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDYgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ4ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDkgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkMTAgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsDQotKTsNCi0NCi1JTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXIyIFZBTFVFUygyLCAnaWlvcCcsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwKTsNCi0NCi1DUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMyAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNiksDQotICAgIGNfaWQzICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ2ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDcgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkOCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ5ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDEwICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbA0KLSk7DQotDQotSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyMyBWQUxVRVMoMiwgJ2lpb3AnLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCk7DQotQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjQgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpLA0KLSAgICBjX2lkMyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ0ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDUgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNiAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ3ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDggICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkOSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQxMCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwNCi0pOw0KLQ0KLUlOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjQgVkFMVUVTKDIsICdpaW9wJywgMywgNCwgNSwgNiwgNywgOCwgOSwgMTApOw0KLQ0KLUNSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXI1ICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KSwNCi0gICAgY19pZDMgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ1ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDYgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ4ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDkgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkMTAgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsDQotKTsNCi0NCi1JTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXI1IFZBTFVFUygyLCAnaWlvcCcsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwKTsNCi0NCi0NCi0NCi1DUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNiAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNiksDQotICAgIGNfaWQzICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ2ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDcgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkOCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ5ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDEwICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbA0KLSk7DQotDQotSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyNiBWQUxVRVMoMiwgJ2lpb3AnLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCk7DQotDQotQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjcgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpLA0KLSAgICBjX2lkMyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ0ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDUgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNiAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ3ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDggICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkOSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQxMCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwNCi0pOw0KLQ0KLUlOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjcgVkFMVUVTKDIsICdpaW9wJywgMywgNCwgNSwgNiwgNywgOCwgOSwgMTApOw0KLQ0KLUNSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXI4ICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KSwNCi0gICAgY19pZDMgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ1ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDYgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ4ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDkgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkMTAgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsDQotKTsNCi0NCi1JTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXI4IFZBTFVFUygyLCAnaWlvcCcsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwKTsNCi0NCi1DUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyOSAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNiksDQotICAgIGNfaWQzICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ2ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDcgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkOCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ5ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDEwICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbA0KLSk7DQotDQotSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyOSBWQUxVRVMoMiwgJ2lpb3AnLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCk7DQotDQotQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjEwICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KSwNCi0gICAgY19pZDMgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ1ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDYgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ4ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDkgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkMTAgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsDQotKTsNCi0NCi1JTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXIxMCBWQUxVRVMoMiwgJ2lpb3AnLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCk7DQorZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXIxOworZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXIyOworZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXIzOworZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI0OworZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI1OworZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI2OworZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI3OworZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI4OworZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI5OworZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXIxMDsKK0NSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXIxICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNiksCisgICAgY19pZDMgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ0ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDYgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ3ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkOCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDkgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQxMCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwKKworKTsKKworSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyMSBWQUxVRVMoMiwgJ2lpb3AnLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCk7CisKK0NSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXIyICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNiksCisgICAgY19pZDMgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ0ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDYgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ3ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkOCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDkgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQxMCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwKKyk7CisKK0lOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjIgVkFMVUVTKDIsICdpaW9wJywgMywgNCwgNSwgNiwgNywgOCwgOSwgMTApOworCitDUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMyAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpLAorICAgIGNfaWQzICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDUgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ2ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDggICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ5ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkMTAgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsCispOworCitJTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXIzIFZBTFVFUygyLCAnaWlvcCcsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwKTsKK0NSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXI0ICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNiksCisgICAgY19pZDMgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ0ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDYgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ3ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkOCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDkgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQxMCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwKKyk7CisKK0lOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjQgVkFMVUVTKDIsICdpaW9wJywgMywgNCwgNSwgNiwgNywgOCwgOSwgMTApOworCitDUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNSAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpLAorICAgIGNfaWQzICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDUgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ2ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDggICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ5ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkMTAgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsCispOworCitJTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXI1IFZBTFVFUygyLCAnaWlvcCcsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwKTsKKworCisKK0NSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXI2ICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNiksCisgICAgY19pZDMgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ0ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDYgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ3ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkOCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDkgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQxMCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwKKyk7CisKK0lOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjYgVkFMVUVTKDIsICdpaW9wJywgMywgNCwgNSwgNiwgNywgOCwgOSwgMTApOworCitDUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNyAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpLAorICAgIGNfaWQzICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDUgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ2ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDggICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ5ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkMTAgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsCispOworCitJTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXI3IFZBTFVFUygyLCAnaWlvcCcsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwKTsKKworQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjggKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KSwKKyAgICBjX2lkMyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ1ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNiAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDcgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ4ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkOSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDEwICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbAorKTsKKworSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyOCBWQUxVRVMoMiwgJ2lpb3AnLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCk7CisKK0NSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXI5ICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNiksCisgICAgY19pZDMgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ0ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDYgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ3ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkOCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDkgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQxMCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwKKyk7CisKK0lOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjkgVkFMVUVTKDIsICdpaW9wJywgMywgNCwgNSwgNiwgNywgOCwgOSwgMTApOworCitDUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMTAgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KSwKKyAgICBjX2lkMyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ1ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNiAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDcgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ4ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkOSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDEwICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbAorKTsKKworSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyMTAgVkFMVUVTKDIsICdpaW9wJywgMywgNCwgNSwgNiwgNywgOCwgOSwgMTApOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy5maXhlZC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy5maXhlZC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IGNiOTgzNzguLmY2NGM2ZTQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3MuZml4ZWQvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0bXRDYWNoaW5nX2hpdF9taXNzLmZpeGVkL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEsMTAgKzEsMTAgQEAKLWRyb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMTsNCi1kcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjI7DQotZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXIzOw0KLWRyb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNDsNCi1kcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjU7DQotZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI2Ow0KLWRyb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNzsNCi1kcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjg7DQotZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI5Ow0KLWRyb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMTA7DQorZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXIxOworZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXIyOworZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXIzOworZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI0OworZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI1OworZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI2OworZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI3OworZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI4OworZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI5OworZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXIxMDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3MubW9uaXRvcmluZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy5tb25pdG9yaW5nL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNzRhMjk3OS4uMTAyZjE1YyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy5tb25pdG9yaW5nL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy5tb25pdG9yaW5nL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE5ICsxNSwxOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iamRiYy1zdG10Y2FjaGluZ19oaXRfbWlzcyIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iMTIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3MubW9uaXRvcmluZy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0bXRDYWNoaW5nX2hpdF9taXNzLm1vbml0b3JpbmcvYnVpbGQueG1sCmluZGV4IGQyMzViZGUuLjQ4OTI4MTEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3MubW9uaXRvcmluZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy5tb25pdG9yaW5nL2J1aWxkLnhtbApAQCAtNzksNyArNzksNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCTxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIApAQCAtMTAwLDEzICsxMDAsMTMgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2pkYmMtc3RtdGNhY2hpbmdfaGl0X21pc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCi0JPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjL2pkYmMtc3RtdGNhY2hpbmdfaGl0X21pc3MtcG9vbC5zdGF0ZW1lbnRfY2FjaGVfc2l6ZT01Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAotCTxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgorICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgogICAgICAgICAgICAgICAgICAgIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy9qZGJjLXN0bXRjYWNoaW5nX2hpdF9taXNzLXBvb2wud3JhcF9qZGJjX29iamVjdHM9dHJ1ZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy5tb25pdG9yaW5nL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3MubW9uaXRvcmluZy9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggNDlmNTIwNS4uZGYyYzhmMSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy5tb25pdG9yaW5nL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0bXRDYWNoaW5nX2hpdF9taXNzLm1vbml0b3JpbmcvY2xpZW50L0NsaWVudC5qYXZhCkBAIC01NCwzNCArNTQsMzQgQEAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiU3RhdGVtZW50IENhY2hpbmcgSGl0IG1pc3MgdGVzdHMiKTsKIAogICAgICAgICBpZiAoc2ltcGxlQk1QLnRlc3RIaXQoKSAmJiBnZXRNb25pdG9yYWJsZVByb3BlcnR5T2ZDb25uZWN0aW9uUG9vbCgiamRiYy9qZGJjLXN0bXRjYWNoaW5nX2hpdF9taXNzLXBvb2wiLE5VTV9ISVRTKSA9PSAxICYmIGdldE1vbml0b3JhYmxlUHJvcGVydHlPZkNvbm5lY3Rpb25Qb29sKCJqZGJjL2pkYmMtc3RtdGNhY2hpbmdfaGl0X21pc3MtcG9vbCIsTlVNX01JU1NFUykgPT0gNSkgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhJVCBwYXNzIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSElUIHBhc3MiKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCIgU3RhdGVtZW50IENhY2hpbmcgIC0gIChIaXQpOiAiLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGVsc2UgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhJVCBmYWlsIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSElUIGZhaWwiKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCIgU3RhdGVtZW50IENhY2hpbmcgIC0gIChIaXQpOiAiLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKHNpbXBsZUJNUC50ZXN0TWlzcygpICYmIGdldE1vbml0b3JhYmxlUHJvcGVydHlPZkNvbm5lY3Rpb25Qb29sKCJqZGJjL2pkYmMtc3RtdGNhY2hpbmdfaGl0X21pc3MtcG9vbCIsTlVNX0hJVFMpID09IDYgJiYgZ2V0TW9uaXRvcmFibGVQcm9wZXJ0eU9mQ29ubmVjdGlvblBvb2woImpkYmMvamRiYy1zdG10Y2FjaGluZ19oaXRfbWlzcy1wb29sIixOVU1fTUlTU0VTKSA9PSA3KSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTUlTUyBwYXNzIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTUlTUyBwYXNzIik7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiIFN0YXRlbWVudCBDYWNoaW5nICAtICAoTWlzcyk6ICIsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gZWxzZSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTUlTUyBmYWlsIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTUlTUyBmYWlsIik7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiIFN0YXRlbWVudCBDYWNoaW5nICAtICAoTWlzcyk6ICIsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoc2ltcGxlQk1QLnRlc3RIaXRDb2x1bW5JbmRleGVzKCkgJiYgZ2V0TW9uaXRvcmFibGVQcm9wZXJ0eU9mQ29ubmVjdGlvblBvb2woImpkYmMvamRiYy1zdG10Y2FjaGluZ19oaXRfbWlzcy1wb29sIixOVU1fSElUUykgPT0gNyAmJiBnZXRNb25pdG9yYWJsZVByb3BlcnR5T2ZDb25uZWN0aW9uUG9vbCgiamRiYy9qZGJjLXN0bXRjYWNoaW5nX2hpdF9taXNzLXBvb2wiLE5VTV9NSVNTRVMpID09IDEyKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY29sdW1uSW5kZXhlcyBwYXNzIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY29sdW1uSW5kZXhlcyBwYXNzIik7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiIFN0YXRlbWVudCBDYWNoaW5nICAtICAoaGl0IGNvbHVtbkluZGV4ZXMpIDogIiwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBlbHNlIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJjb2x1bW5JbmRleGVzIGZhaWwiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjb2x1bW5JbmRleGVzIGZhaWwiKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCIgU3RhdGVtZW50IENhY2hpbmcgIC0gIChoaXQgY29sdW1uSW5kZXhlcykgOiAiLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKHNpbXBsZUJNUC50ZXN0SGl0Q29sdW1uTmFtZXMoKSAmJiBnZXRNb25pdG9yYWJsZVByb3BlcnR5T2ZDb25uZWN0aW9uUG9vbCgiamRiYy9qZGJjLXN0bXRjYWNoaW5nX2hpdF9taXNzLXBvb2wiLE5VTV9ISVRTKSA9PSA4ICYmIGdldE1vbml0b3JhYmxlUHJvcGVydHlPZkNvbm5lY3Rpb25Qb29sKCJqZGJjL2pkYmMtc3RtdGNhY2hpbmdfaGl0X21pc3MtcG9vbCIsTlVNX01JU1NFUykgPT0gMTcpIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJjb2x1bW5OYW1lcyBwYXNzIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY29sdW1uTmFtZXMgcGFzcyIpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIiBTdGF0ZW1lbnQgQ2FjaGluZyAgLSAgKGhpdCBjb2x1bW5OYW1lcykgOiAiLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGVsc2UgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNvbHVtbk5hbWVzIGZhaWwiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjb2x1bW5OYW1lcyBmYWlsIik7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiIFN0YXRlbWVudCBDYWNoaW5nICAtICAoaGl0IGNvbHVtbk5hbWVzKSA6ICIsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKQEAgLTg5LDIwICs4OSwyMCBAQAogCiAgICAgcHVibGljIGludCBnZXRNb25pdG9yYWJsZVByb3BlcnR5T2ZDb25uZWN0aW9uUG9vbChTdHJpbmcgcG9vbE5hbWUsIFN0cmluZyBtb25pdG9yaW5nU3RhdCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKLQlmaW5hbCBTdHJpbmcgdXJsU3RyID0gInNlcnZpY2U6am14OnJtaTovLy9qbmRpL3JtaTovLyIgKyBIT1NUX05BTUUgKyAiOiIgKyBKTVhfUE9SVCArICIvam14cm1pIjsgICAgCisgICAgZmluYWwgU3RyaW5nIHVybFN0ciA9ICJzZXJ2aWNlOmpteDpybWk6Ly8vam5kaS9ybWk6Ly8iICsgSE9TVF9OQU1FICsgIjoiICsgSk1YX1BPUlQgKyAiL2pteHJtaSI7CiAgICAgICAgIGZpbmFsIEpNWFNlcnZpY2VVUkwgdXJsID0gbmV3IEpNWFNlcnZpY2VVUkwodXJsU3RyKTsKIAotCWZpbmFsIEpNWENvbm5lY3RvciBqbXhDb25uID0gSk1YQ29ubmVjdG9yRmFjdG9yeS5jb25uZWN0KHVybCk7Ci0JZmluYWwgTUJlYW5TZXJ2ZXJDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBqbXhDb25uLmdldE1CZWFuU2VydmVyQ29ubmVjdGlvbigpOworICAgIGZpbmFsIEpNWENvbm5lY3RvciBqbXhDb25uID0gSk1YQ29ubmVjdG9yRmFjdG9yeS5jb25uZWN0KHVybCk7CisgICAgZmluYWwgTUJlYW5TZXJ2ZXJDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBqbXhDb25uLmdldE1CZWFuU2VydmVyQ29ubmVjdGlvbigpOwogCiAgICAgICAgIE9iamVjdE5hbWUgb2JqZWN0TmFtZSA9CiAgICAgICAgICAgICAgICAgbmV3IE9iamVjdE5hbWUoImFteDpwcD0vbW9uL3NlcnZlci1tb25bc2VydmVyXSx0eXBlPWpkYmNyYS1tb24sbmFtZT1yZXNvdXJjZXMvIiArIHBvb2xOYW1lKTsKIAotCWphdmF4Lm1hbmFnZW1lbnQub3Blbm1iZWFuLkNvbXBvc2l0ZURhdGFTdXBwb3J0IHJldHVyblZhbHVlID0gCi0JCShqYXZheC5tYW5hZ2VtZW50Lm9wZW5tYmVhbi5Db21wb3NpdGVEYXRhU3VwcG9ydCkgCi0JCWNvbm5lY3Rpb24uZ2V0QXR0cmlidXRlKG9iamVjdE5hbWUsIG1vbml0b3JpbmdTdGF0KTsKKyAgICBqYXZheC5tYW5hZ2VtZW50Lm9wZW5tYmVhbi5Db21wb3NpdGVEYXRhU3VwcG9ydCByZXR1cm5WYWx1ZSA9CisgICAgICAgIChqYXZheC5tYW5hZ2VtZW50Lm9wZW5tYmVhbi5Db21wb3NpdGVEYXRhU3VwcG9ydCkKKyAgICAgICAgY29ubmVjdGlvbi5nZXRBdHRyaWJ1dGUob2JqZWN0TmFtZSwgbW9uaXRvcmluZ1N0YXQpOwogCi0JU3lzdGVtLm91dC5wcmludGxuKCI+Pj4iICsgbW9uaXRvcmluZ1N0YXQgKyAiPSIgKyByZXR1cm5WYWx1ZS5nZXQoImNvdW50IikpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPj4+IiArIG1vbml0b3JpbmdTdGF0ICsgIj0iICsgcmV0dXJuVmFsdWUuZ2V0KCJjb3VudCIpKTsKICAgICAgICAgcmV0dXJuIG5ldyBJbnRlZ2VyKHJldHVyblZhbHVlLmdldCgiY291bnQiKS50b1N0cmluZygpKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3MubW9uaXRvcmluZy9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3MubW9uaXRvcmluZy9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAppbmRleCBmMzNmNjQxLi4yNWM5ZWY1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0bXRDYWNoaW5nX2hpdF9taXNzLm1vbml0b3JpbmcvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy5tb25pdG9yaW5nL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCkBAIC0yNyw3ICsyNyw3IEBACiAgICAgICAgICAgICA8am5kaS1uYW1lPmNvbS5zdW4uczFhc2Rldi5qZGJjLnN0bXRjYWNoaW5nLmVqYi5TaW1wbGVCTVBIb21lPC9qbmRpLW5hbWU+CiAgICAgICAgICAgICA8cmVzb3VyY2UtcmVmPgogICAgICAgICAgICAgICAgIDxyZXMtcmVmLW5hbWU+RGF0YVNvdXJjZTwvcmVzLXJlZi1uYW1lPgotCQk8am5kaS1uYW1lPmpkYmMvamRiYy1zdG10Y2FjaGluZ19oaXRfbWlzczwvam5kaS1uYW1lPgorICAgICAgICA8am5kaS1uYW1lPmpkYmMvamRiYy1zdG10Y2FjaGluZ19oaXRfbWlzczwvam5kaS1uYW1lPgogICAgICAgICAgICAgICAgIDxkZWZhdWx0LXJlc291cmNlLXByaW5jaXBhbD4KICAgICAgICAgICAgICAgICAgICAgPG5hbWU+REJVU0VSPC9uYW1lPgogICAgICAgICAgICAgICAgICAgICA8cGFzc3dvcmQ+REJQQVNTV09SRDwvcGFzc3dvcmQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0bXRDYWNoaW5nX2hpdF9taXNzLm1vbml0b3JpbmcvZWpiL1NpbXBsZUJNUEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3MubW9uaXRvcmluZy9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCmluZGV4IGY4MWJkZTguLjQxODA5OWYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3MubW9uaXRvcmluZy9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3MubW9uaXRvcmluZy9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCkBAIC00MSw4MyArNDEsODMgQEAKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0SGl0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVtZW50IGNhY2hpbmcgSGl0IHRlc3QgU3RhcnQiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlbWVudCBjYWNoaW5nIEhpdCB0ZXN0IFN0YXJ0Iik7CiAgICAgICAgIENvbm5lY3Rpb24gZmlyc3RDb25uZWN0aW9uID0gbnVsbDsKICAgICAgICAgQ29ubmVjdGlvbiBsYXN0Q29ubmVjdGlvbiA9IG51bGw7CiAgICAgICAgIGNvbS5zdW4uYXBwc2Vydi5qZGJjLkRhdGFTb3VyY2UgZHMgPSBudWxsOwogICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBzdG10ID0gbnVsbDsKLQlQcmVwYXJlZFN0YXRlbWVudCBmaXJzdFN0YXRlbWVudCA9IG51bGw7Ci0JUHJlcGFyZWRTdGF0ZW1lbnQgbGFzdFN0YXRlbWVudCA9IG51bGw7CisgICAgUHJlcGFyZWRTdGF0ZW1lbnQgZmlyc3RTdGF0ZW1lbnQgPSBudWxsOworICAgIFByZXBhcmVkU3RhdGVtZW50IGxhc3RTdGF0ZW1lbnQgPSBudWxsOwogICAgICAgICBTdHJpbmcgdGFibGVOYW1lID0gImN1c3RvbWVyX3N0bXRfd3JhcHBlciI7CiAgICAgICAgIGRzID0gdGhpcy5kczsKLQlpbnQgdGFibGVJbmRleCA9IDE7CisgICAgaW50IHRhYmxlSW5kZXggPSAxOwogICAgICAgICBib29sZWFuIHBhc3NlZCA9IGZhbHNlOwogICAgICAgICAgICAgQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKLQl0cnkgeworICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQl9Y2F0Y2goRXhjZXB0aW9uIGV4KSB7Ci0JfQorICAgIH1jYXRjaChFeGNlcHRpb24gZXgpIHsKKyAgICB9CiAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgNzsgaSsrKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW5kZXggPSAiICsgaSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW5kZXggPSAiICsgaSk7CiAgICAgICAgICAgICB0cnkgewogCi0JICAgICAgICBpZihpID09IDYpIHsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPj4+IExhc3QiKTsKLQkJICAgIHN0bXQgPSBjb25uLnByZXBhcmVTdGF0ZW1lbnQoInNlbGVjdCAqIGZyb20gIisgdGFibGVOYW1lICsgdGFibGVJbmRleCArICIgd2hlcmUgY19waG9uZT0gPyIpOwotCQkgICAgbGFzdFN0YXRlbWVudCA9IHN0bXQ7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oImxhc3RTdGF0ZW1lbnQgOiAiICArIGxhc3RTdGF0ZW1lbnQpOwotCQl9IGVsc2UgeyAgIAotCQkgICAgaW50W10gY29sdW1uSW5kZXhlcyA9IHtpKzEsIGkrMn07CisgICAgICAgICAgICBpZihpID09IDYpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPj4+IExhc3QiKTsKKyAgICAgICAgICAgIHN0bXQgPSBjb25uLnByZXBhcmVTdGF0ZW1lbnQoInNlbGVjdCAqIGZyb20gIisgdGFibGVOYW1lICsgdGFibGVJbmRleCArICIgd2hlcmUgY19waG9uZT0gPyIpOworICAgICAgICAgICAgbGFzdFN0YXRlbWVudCA9IHN0bXQ7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImxhc3RTdGF0ZW1lbnQgOiAiICArIGxhc3RTdGF0ZW1lbnQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW50W10gY29sdW1uSW5kZXhlcyA9IHtpKzEsIGkrMn07CiAgICAgICAgICAgICAgICAgICAgIHN0bXQgPSBjb25uLnByZXBhcmVTdGF0ZW1lbnQoInNlbGVjdCAqIGZyb20gIisgdGFibGVOYW1lK2kgKyIgd2hlcmUgY19waG9uZT0gPyIpOwotCQl9Ci0JCWlmKGkgPT0gMSkgewotCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCI+Pj4gRmlyc3QiKTsKLQkJICAgIGZpcnN0U3RhdGVtZW50ID0gc3RtdDsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZmlyc3RTdGF0ZW1lbnQgOiAiICsgZmlyc3RTdGF0ZW1lbnQpOwotCQl9IAorICAgICAgICB9CisgICAgICAgIGlmKGkgPT0gMSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI+Pj4gRmlyc3QiKTsKKyAgICAgICAgICAgIGZpcnN0U3RhdGVtZW50ID0gc3RtdDsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZmlyc3RTdGF0ZW1lbnQgOiAiICsgZmlyc3RTdGF0ZW1lbnQpOworICAgICAgICB9CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICAgICAgcGFzc2VkID0gZmFsc2U7CiAgICAgICAgICAgICB9IGZpbmFsbHkgewotCQlpZihzdG10ICE9IG51bGwpIHsKLQkgICAgICAgICAgICB0cnkgewotCQkJc3RtdC5jbG9zZSgpOwotCQkgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHt9Ci0JCX0KKyAgICAgICAgaWYoc3RtdCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHN0bXQuY2xvc2UoKTsKKyAgICAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7fQorICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLQlwYXNzZWQgPSAoZmlyc3RTdGF0ZW1lbnQgPT0gbGFzdFN0YXRlbWVudCk7Ci0JdHJ5IHsKLQkgICAgaWYoZmlyc3RTdGF0ZW1lbnQgIT0gbnVsbCkgewotCQlmaXJzdFN0YXRlbWVudC5jbG9zZSgpOwotCSAgICB9Ci0JICAgIGlmKGxhc3RTdGF0ZW1lbnQgIT0gbnVsbCkgewotCQlsYXN0U3RhdGVtZW50LmNsb3NlKCk7Ci0JICAgIH0KKyAgICBwYXNzZWQgPSAoZmlyc3RTdGF0ZW1lbnQgPT0gbGFzdFN0YXRlbWVudCk7CisgICAgdHJ5IHsKKyAgICAgICAgaWYoZmlyc3RTdGF0ZW1lbnQgIT0gbnVsbCkgeworICAgICAgICBmaXJzdFN0YXRlbWVudC5jbG9zZSgpOworICAgICAgICB9CisgICAgICAgIGlmKGxhc3RTdGF0ZW1lbnQgIT0gbnVsbCkgeworICAgICAgICBsYXN0U3RhdGVtZW50LmNsb3NlKCk7CisgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoY29ubiAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlMSkgewogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSAKLQl9IGNhdGNoKEV4Y2VwdGlvbiBleCkgewotCSAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLQl9Ci0JU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZW1lbnQgY2FjaGluZyBIaXQgdGVzdCBFbmQiKTsKLQlyZXR1cm4gcGFzc2VkOworICAgICAgICAgICAgICAgIH0KKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCkgeworICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICB9Ci0gICAgCisgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZW1lbnQgY2FjaGluZyBIaXQgdGVzdCBFbmQiKTsKKyAgICByZXR1cm4gcGFzc2VkOworICAgIH0KKwogICAgIHB1YmxpYyBib29sZWFuIHRlc3RNaXNzKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVtZW50IGNhY2hpbmcgTWlzcyB0ZXN0IFN0YXJ0Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZW1lbnQgY2FjaGluZyBNaXNzIHRlc3QgU3RhcnQiKTsKICAgICAgICAgQ29ubmVjdGlvbiBmaXJzdENvbm5lY3Rpb24gPSBudWxsOwogICAgICAgICBDb25uZWN0aW9uIGxhc3RDb25uZWN0aW9uID0gbnVsbDsKICAgICAgICAgY29tLnN1bi5hcHBzZXJ2LmpkYmMuRGF0YVNvdXJjZSBkcyA9IG51bGw7CiAgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHN0bXQgPSBudWxsOwotCVByZXBhcmVkU3RhdGVtZW50IGZpcnN0U3RhdGVtZW50ID0gbnVsbDsKLQlQcmVwYXJlZFN0YXRlbWVudCBsYXN0U3RhdGVtZW50ID0gbnVsbDsKKyAgICBQcmVwYXJlZFN0YXRlbWVudCBmaXJzdFN0YXRlbWVudCA9IG51bGw7CisgICAgUHJlcGFyZWRTdGF0ZW1lbnQgbGFzdFN0YXRlbWVudCA9IG51bGw7CiAgICAgICAgIFN0cmluZyB0YWJsZU5hbWUgPSAiY3VzdG9tZXJfc3RtdF93cmFwcGVyIjsKICAgICAgICAgZHMgPSB0aGlzLmRzOwotCWludCB0YWJsZUluZGV4ID0gMTsKKyAgICBpbnQgdGFibGVJbmRleCA9IDE7CiAKICAgICAgICAgQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKICAgICAgICAgdHJ5IHsKQEAgLTEyNywxNyArMTI3LDE3IEBACiAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgODsgaSsrKSB7CiAgICAgICAgICAgICB0cnkgewogCi0JCWlmKGkgPT03KSB7Ci0JCQlzdG10ID0gY29ubi5wcmVwYXJlU3RhdGVtZW50KCJzZWxlY3QgKiBmcm9tICIgKyB0YWJsZU5hbWUgKyB0YWJsZUluZGV4ICsgIiB3aGVyZSBjX3Bob25lPT8iKTsKLQkJCWxhc3RTdGF0ZW1lbnQgPSBzdG10OwotCQkgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibGFzdFN0YXRlbWVudCA6ICIgICsgbGFzdFN0YXRlbWVudCk7Ci0JCX0gZWxzZSB7CisgICAgICAgIGlmKGkgPT03KSB7CisgICAgICAgICAgICBzdG10ID0gY29ubi5wcmVwYXJlU3RhdGVtZW50KCJzZWxlY3QgKiBmcm9tICIgKyB0YWJsZU5hbWUgKyB0YWJsZUluZGV4ICsgIiB3aGVyZSBjX3Bob25lPT8iKTsKKyAgICAgICAgICAgIGxhc3RTdGF0ZW1lbnQgPSBzdG10OworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibGFzdFN0YXRlbWVudCA6ICIgICsgbGFzdFN0YXRlbWVudCk7CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHN0bXQgPSBjb25uLnByZXBhcmVTdGF0ZW1lbnQoInNlbGVjdCAqIGZyb20gIisgdGFibGVOYW1lK2kgKyIgd2hlcmUgY19waG9uZT0gPyIpOwotCQl9Ci0JCWlmKGkgPT0gMSkgewotCQkgICAgZmlyc3RTdGF0ZW1lbnQgPSBzdG10OwotCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJmaXJzdFN0YXRlbWVudCA6ICIgKyBmaXJzdFN0YXRlbWVudCk7Ci0JCX0KKyAgICAgICAgfQorICAgICAgICBpZihpID09IDEpIHsKKyAgICAgICAgICAgIGZpcnN0U3RhdGVtZW50ID0gc3RtdDsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZmlyc3RTdGF0ZW1lbnQgOiAiICsgZmlyc3RTdGF0ZW1lbnQpOworICAgICAgICB9CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICAgICAgcGFzc2VkID0gZmFsc2U7CkBAIC0xNDUsMTU3ICsxNDUsMTU3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcGFzc2VkID0gZmlyc3RTdGF0ZW1lbnQgIT0gbGFzdFN0YXRlbWVudDsKLQl0cnkgewotCSAgICBpZihmaXJzdFN0YXRlbWVudCAhPSBudWxsKSB7Ci0JCWZpcnN0U3RhdGVtZW50LmNsb3NlKCk7Ci0JICAgIH0KLQkgICAgaWYobGFzdFN0YXRlbWVudCAhPSBudWxsKSB7Ci0JCWxhc3RTdGF0ZW1lbnQuY2xvc2UoKTsKLQkgICAgfQotCSAgICBpZihjb25uICE9IG51bGwpIHsKLQkgICAgICAgIGNvbm4uY2xvc2UoKTsKLQkgICAgfQotCX0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7Ci0JICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotCX0KLQlTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlbWVudCBjYWNoaW5nIE1pc3MgdGVzdCBFbmQiKTsKKyAgICB0cnkgeworICAgICAgICBpZihmaXJzdFN0YXRlbWVudCAhPSBudWxsKSB7CisgICAgICAgIGZpcnN0U3RhdGVtZW50LmNsb3NlKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYobGFzdFN0YXRlbWVudCAhPSBudWxsKSB7CisgICAgICAgIGxhc3RTdGF0ZW1lbnQuY2xvc2UoKTsKKyAgICAgICAgfQorICAgICAgICBpZihjb25uICE9IG51bGwpIHsKKyAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKKyAgICAgICAgfQorICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlbWVudCBjYWNoaW5nIE1pc3MgdGVzdCBFbmQiKTsKICAgICAgICAgcmV0dXJuIHBhc3NlZDsKICAgICB9CiAKIAogICAgIHB1YmxpYyBib29sZWFuIHRlc3RIaXRDb2x1bW5OYW1lcygpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlbWVudCBjYWNoaW5nIEhpdCAoQ29sdW1uIE5hbWVzKSB0ZXN0IFN0YXJ0Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZW1lbnQgY2FjaGluZyBIaXQgKENvbHVtbiBOYW1lcykgdGVzdCBTdGFydCIpOwogICAgICAgICBDb25uZWN0aW9uIGZpcnN0Q29ubmVjdGlvbiA9IG51bGw7CiAgICAgICAgIENvbm5lY3Rpb24gbGFzdENvbm5lY3Rpb24gPSBudWxsOwogICAgICAgICBjb20uc3VuLmFwcHNlcnYuamRiYy5EYXRhU291cmNlIGRzID0gbnVsbDsKICAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgc3RtdCA9IG51bGw7Ci0JUHJlcGFyZWRTdGF0ZW1lbnQgZmlyc3RTdGF0ZW1lbnQgPSBudWxsOwotCVByZXBhcmVkU3RhdGVtZW50IGxhc3RTdGF0ZW1lbnQgPSBudWxsOworICAgIFByZXBhcmVkU3RhdGVtZW50IGZpcnN0U3RhdGVtZW50ID0gbnVsbDsKKyAgICBQcmVwYXJlZFN0YXRlbWVudCBsYXN0U3RhdGVtZW50ID0gbnVsbDsKICAgICAgICAgU3RyaW5nIHRhYmxlTmFtZSA9ICJjdXN0b21lcl9zdG10X3dyYXBwZXIiOwogICAgICAgICBkcyA9IHRoaXMuZHM7Ci0JaW50IHRhYmxlSW5kZXggPSAxOworICAgIGludCB0YWJsZUluZGV4ID0gMTsKICAgICAgICAgYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKICAgICAgICAgQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKLQl0cnkgeworICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQl9Y2F0Y2goRXhjZXB0aW9uIGV4KSB7Ci0JfQorICAgIH1jYXRjaChFeGNlcHRpb24gZXgpIHsKKyAgICB9CiAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgNzsgaSsrKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW5kZXggPSAiICsgaSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW5kZXggPSAiICsgaSk7CiAgICAgICAgICAgICB0cnkgewogCi0JICAgICAgICBpZihpID09IDYpIHsKLQkJICAgIFN0cmluZ1tdIGNvbHVtbk5hbWVzID0geyJjX2lkIiwgImNfcGhvbmUifTsKLQkJICAgIHN0bXQgPSBjb25uLnByZXBhcmVTdGF0ZW1lbnQoInNlbGVjdCAqIGZyb20gIisgdGFibGVOYW1lICsgdGFibGVJbmRleCArICIgd2hlcmUgY19waG9uZT0gPyIsIGNvbHVtbk5hbWVzKTsKLQkJICAgIGxhc3RTdGF0ZW1lbnQgPSBzdG10OwotCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJsYXN0U3RhdGVtZW50IDogIiAgKyBsYXN0U3RhdGVtZW50KTsKLQkJfSBlbHNlIGlmKGkgPT0xKSB7ICAgCi0JCSAgICBTdHJpbmdbXSBjb2x1bW5OYW1lcyA9IHsiY19pZCIsICJjX3Bob25lIn07Ci0JCSAgICBzdG10ID0gY29ubi5wcmVwYXJlU3RhdGVtZW50KCJzZWxlY3QgKiBmcm9tICIrIHRhYmxlTmFtZSArIHRhYmxlSW5kZXggKyAiIHdoZXJlIGNfcGhvbmU9ID8iLCBjb2x1bW5OYW1lcyk7Ci0JCSAgICBmaXJzdFN0YXRlbWVudCA9IHN0bXQ7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZpcnN0U3RhdGVtZW50IDogIiArIGZpcnN0U3RhdGVtZW50KTsKLQkJfSBlbHNlIHsKLQkJICAgIGludCBqID0gaSArIDI7CisgICAgICAgICAgICBpZihpID09IDYpIHsKKyAgICAgICAgICAgIFN0cmluZ1tdIGNvbHVtbk5hbWVzID0geyJjX2lkIiwgImNfcGhvbmUifTsKKyAgICAgICAgICAgIHN0bXQgPSBjb25uLnByZXBhcmVTdGF0ZW1lbnQoInNlbGVjdCAqIGZyb20gIisgdGFibGVOYW1lICsgdGFibGVJbmRleCArICIgd2hlcmUgY19waG9uZT0gPyIsIGNvbHVtbk5hbWVzKTsKKyAgICAgICAgICAgIGxhc3RTdGF0ZW1lbnQgPSBzdG10OworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJsYXN0U3RhdGVtZW50IDogIiAgKyBsYXN0U3RhdGVtZW50KTsKKyAgICAgICAgfSBlbHNlIGlmKGkgPT0xKSB7CisgICAgICAgICAgICBTdHJpbmdbXSBjb2x1bW5OYW1lcyA9IHsiY19pZCIsICJjX3Bob25lIn07CisgICAgICAgICAgICBzdG10ID0gY29ubi5wcmVwYXJlU3RhdGVtZW50KCJzZWxlY3QgKiBmcm9tICIrIHRhYmxlTmFtZSArIHRhYmxlSW5kZXggKyAiIHdoZXJlIGNfcGhvbmU9ID8iLCBjb2x1bW5OYW1lcyk7CisgICAgICAgICAgICBmaXJzdFN0YXRlbWVudCA9IHN0bXQ7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZpcnN0U3RhdGVtZW50IDogIiArIGZpcnN0U3RhdGVtZW50KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGludCBqID0gaSArIDI7CiAgICAgICAgICAgICAgICAgICAgIGludCBrID0gaiArIDE7Ci0JCSAgICBTdHJpbmdbXSBjb2x1bW5OYW1lcyA9IHsiY19pZCIraiwgImNfaWQiK2t9OworICAgICAgICAgICAgU3RyaW5nW10gY29sdW1uTmFtZXMgPSB7ImNfaWQiK2osICJjX2lkIitrfTsKICAgICAgICAgICAgICAgICAgICAgc3RtdCA9IGNvbm4ucHJlcGFyZVN0YXRlbWVudCgic2VsZWN0ICogZnJvbSAiKyB0YWJsZU5hbWUraSArIiB3aGVyZSBjX3Bob25lPSA/IiwgY29sdW1uTmFtZXMpOwotCQl9CisgICAgICAgIH0KICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgICAgICBwYXNzZWQgPSBmYWxzZTsKICAgICAgICAgICAgIH0gZmluYWxseSB7Ci0JCWlmKHN0bXQgIT0gbnVsbCkgewotCSAgICAgICAgICAgIHRyeSB7Ci0JCQlzdG10LmNsb3NlKCk7Ci0JCSAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCkge30KLQkJfQorICAgICAgICBpZihzdG10ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgc3RtdC5jbG9zZSgpOworICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHt9CisgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQotCXBhc3NlZCA9IChmaXJzdFN0YXRlbWVudCA9PSBsYXN0U3RhdGVtZW50KTsKLQl0cnkgewotCSAgICBpZihmaXJzdFN0YXRlbWVudCAhPSBudWxsKSB7Ci0JCWZpcnN0U3RhdGVtZW50LmNsb3NlKCk7Ci0JICAgIH0KLQkgICAgaWYobGFzdFN0YXRlbWVudCAhPSBudWxsKSB7Ci0JCWxhc3RTdGF0ZW1lbnQuY2xvc2UoKTsKLQkgICAgfQorICAgIHBhc3NlZCA9IChmaXJzdFN0YXRlbWVudCA9PSBsYXN0U3RhdGVtZW50KTsKKyAgICB0cnkgeworICAgICAgICBpZihmaXJzdFN0YXRlbWVudCAhPSBudWxsKSB7CisgICAgICAgIGZpcnN0U3RhdGVtZW50LmNsb3NlKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYobGFzdFN0YXRlbWVudCAhPSBudWxsKSB7CisgICAgICAgIGxhc3RTdGF0ZW1lbnQuY2xvc2UoKTsKKyAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChjb25uICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUxKSB7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IAotCX0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7Ci0JICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotCX0KLQlTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlbWVudCBjYWNoaW5nIEhpdCAoQ29sdW1uIG5hbWVzKSB0ZXN0IEVuZCIpOwotCXJldHVybiBwYXNzZWQ7CisgICAgICAgICAgICAgICAgfQorICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlbWVudCBjYWNoaW5nIEhpdCAoQ29sdW1uIG5hbWVzKSB0ZXN0IEVuZCIpOworICAgIHJldHVybiBwYXNzZWQ7CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdEhpdENvbHVtbkluZGV4ZXMoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZW1lbnQgY2FjaGluZyBIaXQgKENvbHVtbiBpbmRleGVzKSB0ZXN0IFN0YXJ0Iik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZW1lbnQgY2FjaGluZyBIaXQgKENvbHVtbiBpbmRleGVzKSB0ZXN0IFN0YXJ0Iik7CiAgICAgICAgIENvbm5lY3Rpb24gZmlyc3RDb25uZWN0aW9uID0gbnVsbDsKICAgICAgICAgQ29ubmVjdGlvbiBsYXN0Q29ubmVjdGlvbiA9IG51bGw7CiAgICAgICAgIGNvbS5zdW4uYXBwc2Vydi5qZGJjLkRhdGFTb3VyY2UgZHMgPSBudWxsOwogICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBzdG10ID0gbnVsbDsKLQlQcmVwYXJlZFN0YXRlbWVudCBmaXJzdFN0YXRlbWVudCA9IG51bGw7Ci0JUHJlcGFyZWRTdGF0ZW1lbnQgbGFzdFN0YXRlbWVudCA9IG51bGw7CisgICAgUHJlcGFyZWRTdGF0ZW1lbnQgZmlyc3RTdGF0ZW1lbnQgPSBudWxsOworICAgIFByZXBhcmVkU3RhdGVtZW50IGxhc3RTdGF0ZW1lbnQgPSBudWxsOwogICAgICAgICBTdHJpbmcgdGFibGVOYW1lID0gImN1c3RvbWVyX3N0bXRfd3JhcHBlciI7CiAgICAgICAgIGRzID0gdGhpcy5kczsKLQlpbnQgdGFibGVJbmRleCA9IDE7CisgICAgaW50IHRhYmxlSW5kZXggPSAxOwogICAgICAgICBib29sZWFuIHBhc3NlZCA9IGZhbHNlOwogICAgICAgICAgICAgQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKLQl0cnkgeworICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQl9Y2F0Y2goRXhjZXB0aW9uIGV4KSB7Ci0JfQorICAgIH1jYXRjaChFeGNlcHRpb24gZXgpIHsKKyAgICB9CiAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgNzsgaSsrKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW5kZXggPSAiICsgaSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW5kZXggPSAiICsgaSk7CiAgICAgICAgICAgICB0cnkgewogCi0JICAgICAgICBpZihpID09IDYpIHsKLQkJICAgIHN0bXQgPSBjb25uLnByZXBhcmVTdGF0ZW1lbnQoInNlbGVjdCAqIGZyb20gIisgdGFibGVOYW1lICsgdGFibGVJbmRleCArICIgd2hlcmUgY19waG9uZT0gPyIsIGNvbHVtbkluZGV4ZXM2KTsKLQkJICAgIGxhc3RTdGF0ZW1lbnQgPSBzdG10OwotCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJsYXN0U3RhdGVtZW50IDogIiAgKyBsYXN0U3RhdGVtZW50KTsKLQkJfSBlbHNlIHsgICAKLQkJCS8vRmlyc3Qgc3RtdCBleGVjdXRlZCB3b3VsZCBoYXZlIHsyLDN9IHNhbWUgYXMgY29sdW1uSW5kZXhlczYKLQkJICAgIGludFtdIGNvbHVtbkluZGV4ZXMgPSB7aSsxLCBpKzJ9OworICAgICAgICAgICAgaWYoaSA9PSA2KSB7CisgICAgICAgICAgICBzdG10ID0gY29ubi5wcmVwYXJlU3RhdGVtZW50KCJzZWxlY3QgKiBmcm9tICIrIHRhYmxlTmFtZSArIHRhYmxlSW5kZXggKyAiIHdoZXJlIGNfcGhvbmU9ID8iLCBjb2x1bW5JbmRleGVzNik7CisgICAgICAgICAgICBsYXN0U3RhdGVtZW50ID0gc3RtdDsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibGFzdFN0YXRlbWVudCA6ICIgICsgbGFzdFN0YXRlbWVudCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvL0ZpcnN0IHN0bXQgZXhlY3V0ZWQgd291bGQgaGF2ZSB7MiwzfSBzYW1lIGFzIGNvbHVtbkluZGV4ZXM2CisgICAgICAgICAgICBpbnRbXSBjb2x1bW5JbmRleGVzID0ge2krMSwgaSsyfTsKICAgICAgICAgICAgICAgICAgICAgc3RtdCA9IGNvbm4ucHJlcGFyZVN0YXRlbWVudCgic2VsZWN0ICogZnJvbSAiKyB0YWJsZU5hbWUraSArIiB3aGVyZSBjX3Bob25lPSA/IiwgY29sdW1uSW5kZXhlcyk7Ci0JCX0KLQkJaWYoaSA9PSAxKSB7Ci0JCSAgICBmaXJzdFN0YXRlbWVudCA9IHN0bXQ7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZpcnN0U3RhdGVtZW50IDogIiArIGZpcnN0U3RhdGVtZW50KTsKLQkJfSAKKyAgICAgICAgfQorICAgICAgICBpZihpID09IDEpIHsKKyAgICAgICAgICAgIGZpcnN0U3RhdGVtZW50ID0gc3RtdDsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZmlyc3RTdGF0ZW1lbnQgOiAiICsgZmlyc3RTdGF0ZW1lbnQpOworICAgICAgICB9CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICAgICAgcGFzc2VkID0gZmFsc2U7CiAgICAgICAgICAgICB9IGZpbmFsbHkgewotCQlpZihzdG10ICE9IG51bGwpIHsKLQkgICAgICAgICAgICB0cnkgewotCQkJc3RtdC5jbG9zZSgpOwotCQkgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHt9Ci0JCX0KKyAgICAgICAgaWYoc3RtdCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHN0bXQuY2xvc2UoKTsKKyAgICAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7fQorICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLQlwYXNzZWQgPSAoZmlyc3RTdGF0ZW1lbnQgPT0gbGFzdFN0YXRlbWVudCk7Ci0JdHJ5IHsKLQkgICAgaWYoZmlyc3RTdGF0ZW1lbnQgIT0gbnVsbCkgewotCQlmaXJzdFN0YXRlbWVudC5jbG9zZSgpOwotCSAgICB9Ci0JICAgIGlmKGxhc3RTdGF0ZW1lbnQgIT0gbnVsbCkgewotCQlsYXN0U3RhdGVtZW50LmNsb3NlKCk7Ci0JICAgIH0KKyAgICBwYXNzZWQgPSAoZmlyc3RTdGF0ZW1lbnQgPT0gbGFzdFN0YXRlbWVudCk7CisgICAgdHJ5IHsKKyAgICAgICAgaWYoZmlyc3RTdGF0ZW1lbnQgIT0gbnVsbCkgeworICAgICAgICBmaXJzdFN0YXRlbWVudC5jbG9zZSgpOworICAgICAgICB9CisgICAgICAgIGlmKGxhc3RTdGF0ZW1lbnQgIT0gbnVsbCkgeworICAgICAgICBsYXN0U3RhdGVtZW50LmNsb3NlKCk7CisgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoY29ubiAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlMSkgewogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSAKLQl9IGNhdGNoKEV4Y2VwdGlvbiBleCkgewotCSAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLQl9Ci0JU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZW1lbnQgY2FjaGluZyBIaXQgKENvbHVtbiBpbmRleGVzKSB0ZXN0IEVuZCIpOwotCXJldHVybiBwYXNzZWQ7CisgICAgICAgICAgICAgICAgfQorICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlbWVudCBjYWNoaW5nIEhpdCAoQ29sdW1uIGluZGV4ZXMpIHRlc3QgRW5kIik7CisgICAgcmV0dXJuIHBhc3NlZDsKICAgICB9CiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0bXRDYWNoaW5nX2hpdF9taXNzLm1vbml0b3Jpbmcvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy5tb25pdG9yaW5nL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCA4MmYzNGE2Li45ODhkMmU5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0bXRDYWNoaW5nX2hpdF9taXNzLm1vbml0b3Jpbmcvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3MubW9uaXRvcmluZy9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsMTYxICsxLDE2MSBAQAotZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXIxOw0KLWRyb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMjsNCi1kcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjM7DQotZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI0Ow0KLWRyb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNTsNCi1kcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjY7DQotZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI3Ow0KLWRyb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyODsNCi1kcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjk7DQotZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXIxMDsNCi1DUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMSAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNiksDQotICAgIGNfaWQzICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ2ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDcgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkOCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ5ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDEwICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbA0KLQ0KLSk7DQotDQotSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyMSBWQUxVRVMoMiwgJ2lpb3AnLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCk7DQotDQotQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjIgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpLA0KLSAgICBjX2lkMyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ0ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDUgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNiAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ3ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDggICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkOSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQxMCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwNCi0pOw0KLQ0KLUlOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjIgVkFMVUVTKDIsICdpaW9wJywgMywgNCwgNSwgNiwgNywgOCwgOSwgMTApOw0KLQ0KLUNSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXIzICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KSwNCi0gICAgY19pZDMgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ1ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDYgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ4ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDkgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkMTAgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsDQotKTsNCi0NCi1JTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXIzIFZBTFVFUygyLCAnaWlvcCcsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwKTsNCi1DUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNCAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNiksDQotICAgIGNfaWQzICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ2ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDcgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkOCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ5ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDEwICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbA0KLSk7DQotDQotSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyNCBWQUxVRVMoMiwgJ2lpb3AnLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCk7DQotDQotQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjUgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpLA0KLSAgICBjX2lkMyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ0ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDUgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNiAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ3ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDggICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkOSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQxMCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwNCi0pOw0KLQ0KLUlOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjUgVkFMVUVTKDIsICdpaW9wJywgMywgNCwgNSwgNiwgNywgOCwgOSwgMTApOw0KLQ0KLQ0KLQ0KLUNSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXI2ICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KSwNCi0gICAgY19pZDMgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ1ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDYgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ4ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDkgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkMTAgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsDQotKTsNCi0NCi1JTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXI2IFZBTFVFUygyLCAnaWlvcCcsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwKTsNCi0NCi1DUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNyAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNiksDQotICAgIGNfaWQzICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ2ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDcgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkOCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ5ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDEwICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbA0KLSk7DQotDQotSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyNyBWQUxVRVMoMiwgJ2lpb3AnLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCk7DQotDQotQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjggKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpLA0KLSAgICBjX2lkMyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ0ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDUgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNiAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ3ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDggICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkOSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQxMCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwNCi0pOw0KLQ0KLUlOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjggVkFMVUVTKDIsICdpaW9wJywgMywgNCwgNSwgNiwgNywgOCwgOSwgMTApOw0KLQ0KLUNSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXI5ICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KSwNCi0gICAgY19pZDMgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ1ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDYgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ4ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDkgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkMTAgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsDQotKTsNCi0NCi1JTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXI5IFZBTFVFUygyLCAnaWlvcCcsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwKTsNCi0NCi1DUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMTAgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpLA0KLSAgICBjX2lkMyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ0ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDUgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNiAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ3ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDggICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkOSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQxMCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwNCi0pOw0KLQ0KLUlOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjEwIFZBTFVFUygyLCAnaWlvcCcsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwKTsNCitkcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjE7Citkcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjI7Citkcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjM7Citkcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjQ7Citkcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjU7Citkcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjY7Citkcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjc7Citkcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjg7Citkcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjk7Citkcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjEwOworQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjEgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KSwKKyAgICBjX2lkMyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ1ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNiAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDcgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ4ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkOSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDEwICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbAorCispOworCitJTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXIxIFZBTFVFUygyLCAnaWlvcCcsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwKTsKKworQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjIgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KSwKKyAgICBjX2lkMyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ1ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNiAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDcgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ4ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkOSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDEwICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbAorKTsKKworSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyMiBWQUxVRVMoMiwgJ2lpb3AnLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCk7CisKK0NSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXIzICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNiksCisgICAgY19pZDMgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ0ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDYgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ3ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkOCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDkgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQxMCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwKKyk7CisKK0lOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjMgVkFMVUVTKDIsICdpaW9wJywgMywgNCwgNSwgNiwgNywgOCwgOSwgMTApOworQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjQgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KSwKKyAgICBjX2lkMyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ1ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNiAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDcgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ4ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkOSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDEwICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbAorKTsKKworSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyNCBWQUxVRVMoMiwgJ2lpb3AnLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCk7CisKK0NSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXI1ICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNiksCisgICAgY19pZDMgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ0ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDYgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ3ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkOCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDkgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQxMCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwKKyk7CisKK0lOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjUgVkFMVUVTKDIsICdpaW9wJywgMywgNCwgNSwgNiwgNywgOCwgOSwgMTApOworCisKKworQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjYgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KSwKKyAgICBjX2lkMyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ1ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNiAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDcgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ4ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkOSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDEwICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbAorKTsKKworSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyNiBWQUxVRVMoMiwgJ2lpb3AnLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCk7CisKK0NSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXI3ICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNiksCisgICAgY19pZDMgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ0ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDYgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ3ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkOCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDkgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQxMCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwKKyk7CisKK0lOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjcgVkFMVUVTKDIsICdpaW9wJywgMywgNCwgNSwgNiwgNywgOCwgOSwgMTApOworCitDUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyOCAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpLAorICAgIGNfaWQzICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDUgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ2ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDggICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ5ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkMTAgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsCispOworCitJTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXI4IFZBTFVFUygyLCAnaWlvcCcsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwKTsKKworQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjkgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KSwKKyAgICBjX2lkMyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ1ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNiAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDcgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ4ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkOSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDEwICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbAorKTsKKworSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyOSBWQUxVRVMoMiwgJ2lpb3AnLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCk7CisKK0NSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXIxMCAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpLAorICAgIGNfaWQzICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDUgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ2ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDggICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ5ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkMTAgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsCispOworCitJTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXIxMCBWQUxVRVMoMiwgJ2lpb3AnLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0bXRDYWNoaW5nX2hpdF9taXNzLm1vbml0b3Jpbmcvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3MubW9uaXRvcmluZy9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IGNiOTgzNzguLmY2NGM2ZTQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3MubW9uaXRvcmluZy9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3MubW9uaXRvcmluZy9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xLDEwICsxLDEwIEBACi1kcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjE7DQotZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXIyOw0KLWRyb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMzsNCi1kcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjQ7DQotZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI1Ow0KLWRyb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNjsNCi1kcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjc7DQotZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI4Ow0KLWRyb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyOTsNCi1kcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjEwOw0KK2Ryb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMTsKK2Ryb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMjsKK2Ryb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMzsKK2Ryb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNDsKK2Ryb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNTsKK2Ryb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNjsKK2Ryb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNzsKK2Ryb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyODsKK2Ryb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyOTsKK2Ryb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMTA7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0bXRDYWNoaW5nX2hpdF9taXNzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0bXRDYWNoaW5nX2hpdF9taXNzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNzRhMjk3OS4uMTAyZjE1YyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3MvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTkgKzE1LDE5IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqZGJjLXN0bXRjYWNoaW5nX2hpdF9taXNzIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIxMiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0bXRDYWNoaW5nX2hpdF9taXNzL2J1aWxkLnhtbAppbmRleCBkNWNjYzAxLi45MTBmMzk3IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0bXRDYWNoaW5nX2hpdF9taXNzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0bXRDYWNoaW5nX2hpdF9taXNzL2J1aWxkLnhtbApAQCAtNjksNyArNjksNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCTxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIApAQCAtOTIsMTMgKzkyLDEzIEBACiAKIAogCi0JPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLXN0bXRjYWNoaW5nX2hpdF9taXNzLXBvb2wuc3RhdGVtZW50X2NhY2hlX3NpemU9NSIvPgogICAgICAgICA8L2FudGNhbGw+CiAKLQk8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLmpkYmMtc3RtdGNhY2hpbmdfaGl0X21pc3MtcG9vbC53cmFwX2pkYmNfb2JqZWN0cz10cnVlIi8+CkBAIC0xMTAsMTAgKzExMCwxMCBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLXN0bXRjYWNoaW5nX2hpdF9taXNzLXBvb2wuaWRsZV90aW1lb3V0X2luX3NlY29uZHM9MzAwMCIvPgogICAgPC9hbnRjYWxsPgotCTwhLS08YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KKyAgICA8IS0tPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCi0JCSAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLmpkYmMtc3RtdGNhY2hpbmdfaGl0X21pc3MtcG9vbC5wcm9wZXJ0eS5TdGF0ZW1lbnRDYWNoZVR5cGU9Ii8+CisgICAgICAgICAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLmpkYmMtc3RtdGNhY2hpbmdfaGl0X21pc3MtcG9vbC5wcm9wZXJ0eS5TdGF0ZW1lbnRDYWNoZVR5cGU9Ii8+CiAgICAgPC9hbnRjYWxsPi0tPgogICAgIDwvdGFyZ2V0PgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0bXRDYWNoaW5nX2hpdF9taXNzL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAppbmRleCBmMzNmNjQxLi4yNWM5ZWY1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0bXRDYWNoaW5nX2hpdF9taXNzL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3MvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKQEAgLTI3LDcgKzI3LDcgQEAKICAgICAgICAgICAgIDxqbmRpLW5hbWU+Y29tLnN1bi5zMWFzZGV2LmpkYmMuc3RtdGNhY2hpbmcuZWpiLlNpbXBsZUJNUEhvbWU8L2puZGktbmFtZT4KICAgICAgICAgICAgIDxyZXNvdXJjZS1yZWY+CiAgICAgICAgICAgICAgICAgPHJlcy1yZWYtbmFtZT5EYXRhU291cmNlPC9yZXMtcmVmLW5hbWU+Ci0JCTxqbmRpLW5hbWU+amRiYy9qZGJjLXN0bXRjYWNoaW5nX2hpdF9taXNzPC9qbmRpLW5hbWU+CisgICAgICAgIDxqbmRpLW5hbWU+amRiYy9qZGJjLXN0bXRjYWNoaW5nX2hpdF9taXNzPC9qbmRpLW5hbWU+CiAgICAgICAgICAgICAgICAgPGRlZmF1bHQtcmVzb3VyY2UtcHJpbmNpcGFsPgogICAgICAgICAgICAgICAgICAgICA8bmFtZT5EQlVTRVI8L25hbWU+CiAgICAgICAgICAgICAgICAgICAgIDxwYXNzd29yZD5EQlBBU1NXT1JEPC9wYXNzd29yZD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3MvZWpiL1NpbXBsZUJNUEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3MvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQppbmRleCA0OWE3OThmLi5mOGQyNGI4IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0bXRDYWNoaW5nX2hpdF9taXNzL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCkBAIC00MSw4MSArNDEsODEgQEAKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0SGl0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVtZW50IGNhY2hpbmcgSGl0IHRlc3QgU3RhcnQiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlbWVudCBjYWNoaW5nIEhpdCB0ZXN0IFN0YXJ0Iik7CiAgICAgICAgIENvbm5lY3Rpb24gZmlyc3RDb25uZWN0aW9uID0gbnVsbDsKICAgICAgICAgQ29ubmVjdGlvbiBsYXN0Q29ubmVjdGlvbiA9IG51bGw7CiAgICAgICAgIGNvbS5zdW4uYXBwc2Vydi5qZGJjLkRhdGFTb3VyY2UgZHMgPSBudWxsOwogICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBzdG10ID0gbnVsbDsKLQlQcmVwYXJlZFN0YXRlbWVudCBmaXJzdFN0YXRlbWVudCA9IG51bGw7Ci0JUHJlcGFyZWRTdGF0ZW1lbnQgbGFzdFN0YXRlbWVudCA9IG51bGw7CisgICAgUHJlcGFyZWRTdGF0ZW1lbnQgZmlyc3RTdGF0ZW1lbnQgPSBudWxsOworICAgIFByZXBhcmVkU3RhdGVtZW50IGxhc3RTdGF0ZW1lbnQgPSBudWxsOwogICAgICAgICBTdHJpbmcgdGFibGVOYW1lID0gImN1c3RvbWVyX3N0bXRfd3JhcHBlciI7CiAgICAgICAgIGRzID0gdGhpcy5kczsKLQlpbnQgdGFibGVJbmRleCA9IDE7CisgICAgaW50IHRhYmxlSW5kZXggPSAxOwogICAgICAgICBib29sZWFuIHBhc3NlZCA9IGZhbHNlOwogICAgICAgICAgICAgQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKLQl0cnkgeworICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQl9Y2F0Y2goRXhjZXB0aW9uIGV4KSB7Ci0JfQorICAgIH1jYXRjaChFeGNlcHRpb24gZXgpIHsKKyAgICB9CiAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgNzsgaSsrKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW5kZXggPSAiICsgaSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW5kZXggPSAiICsgaSk7CiAgICAgICAgICAgICB0cnkgewogCi0JICAgICAgICBpZihpID09IDYpIHsKLQkJICAgIHN0bXQgPSBjb25uLnByZXBhcmVTdGF0ZW1lbnQoInNlbGVjdCAqIGZyb20gIisgdGFibGVOYW1lICsgdGFibGVJbmRleCArICIgd2hlcmUgY19waG9uZT0gPyIpOwotCQkgICAgbGFzdFN0YXRlbWVudCA9IHN0bXQ7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oImxhc3RTdGF0ZW1lbnQgOiAiICArIGxhc3RTdGF0ZW1lbnQpOwotCQl9IGVsc2UgeyAgIAotCQkgICAgaW50W10gY29sdW1uSW5kZXhlcyA9IHtpKzEsIGkrMn07CisgICAgICAgICAgICBpZihpID09IDYpIHsKKyAgICAgICAgICAgIHN0bXQgPSBjb25uLnByZXBhcmVTdGF0ZW1lbnQoInNlbGVjdCAqIGZyb20gIisgdGFibGVOYW1lICsgdGFibGVJbmRleCArICIgd2hlcmUgY19waG9uZT0gPyIpOworICAgICAgICAgICAgbGFzdFN0YXRlbWVudCA9IHN0bXQ7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImxhc3RTdGF0ZW1lbnQgOiAiICArIGxhc3RTdGF0ZW1lbnQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW50W10gY29sdW1uSW5kZXhlcyA9IHtpKzEsIGkrMn07CiAgICAgICAgICAgICAgICAgICAgIHN0bXQgPSBjb25uLnByZXBhcmVTdGF0ZW1lbnQoInNlbGVjdCAqIGZyb20gIisgdGFibGVOYW1lK2kgKyIgd2hlcmUgY19waG9uZT0gPyIpOwotCQl9Ci0JCWlmKGkgPT0gMSkgewotCQkgICAgZmlyc3RTdGF0ZW1lbnQgPSBzdG10OwotCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJmaXJzdFN0YXRlbWVudCA6ICIgKyBmaXJzdFN0YXRlbWVudCk7Ci0JCX0gCisgICAgICAgIH0KKyAgICAgICAgaWYoaSA9PSAxKSB7CisgICAgICAgICAgICBmaXJzdFN0YXRlbWVudCA9IHN0bXQ7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZpcnN0U3RhdGVtZW50IDogIiArIGZpcnN0U3RhdGVtZW50KTsKKyAgICAgICAgfQogICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgICAgIHBhc3NlZCA9IGZhbHNlOwogICAgICAgICAgICAgfSBmaW5hbGx5IHsKLQkJaWYoc3RtdCAhPSBudWxsKSB7Ci0JICAgICAgICAgICAgdHJ5IHsKLQkJCXN0bXQuY2xvc2UoKTsKLQkJICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7fQotCQl9CisgICAgICAgIGlmKHN0bXQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICBzdG10LmNsb3NlKCk7CisgICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCkge30KKyAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9Ci0JcGFzc2VkID0gKGZpcnN0U3RhdGVtZW50ID09IGxhc3RTdGF0ZW1lbnQpOwotCXRyeSB7Ci0JICAgIGlmKGZpcnN0U3RhdGVtZW50ICE9IG51bGwpIHsKLQkJZmlyc3RTdGF0ZW1lbnQuY2xvc2UoKTsKLQkgICAgfQotCSAgICBpZihsYXN0U3RhdGVtZW50ICE9IG51bGwpIHsKLQkJbGFzdFN0YXRlbWVudC5jbG9zZSgpOwotCSAgICB9CisgICAgcGFzc2VkID0gKGZpcnN0U3RhdGVtZW50ID09IGxhc3RTdGF0ZW1lbnQpOworICAgIHRyeSB7CisgICAgICAgIGlmKGZpcnN0U3RhdGVtZW50ICE9IG51bGwpIHsKKyAgICAgICAgZmlyc3RTdGF0ZW1lbnQuY2xvc2UoKTsKKyAgICAgICAgfQorICAgICAgICBpZihsYXN0U3RhdGVtZW50ICE9IG51bGwpIHsKKyAgICAgICAgbGFzdFN0YXRlbWVudC5jbG9zZSgpOworICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKGNvbm4gIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICAgY29ubi5jbG9zZSgpOwogICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZTEpIHsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gCi0JfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKLQkgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQotCVN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVtZW50IGNhY2hpbmcgSGl0IHRlc3QgRW5kIik7Ci0JcmV0dXJuIHBhc3NlZDsKKyAgICAgICAgICAgICAgICB9CisgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgfQotICAgIAorICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVtZW50IGNhY2hpbmcgSGl0IHRlc3QgRW5kIik7CisgICAgcmV0dXJuIHBhc3NlZDsKKyAgICB9CisKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0TWlzcygpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlbWVudCBjYWNoaW5nIE1pc3MgdGVzdCBTdGFydCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVtZW50IGNhY2hpbmcgTWlzcyB0ZXN0IFN0YXJ0Iik7CiAgICAgICAgIENvbm5lY3Rpb24gZmlyc3RDb25uZWN0aW9uID0gbnVsbDsKICAgICAgICAgQ29ubmVjdGlvbiBsYXN0Q29ubmVjdGlvbiA9IG51bGw7CiAgICAgICAgIGNvbS5zdW4uYXBwc2Vydi5qZGJjLkRhdGFTb3VyY2UgZHMgPSBudWxsOwogICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBzdG10ID0gbnVsbDsKLQlQcmVwYXJlZFN0YXRlbWVudCBmaXJzdFN0YXRlbWVudCA9IG51bGw7Ci0JUHJlcGFyZWRTdGF0ZW1lbnQgbGFzdFN0YXRlbWVudCA9IG51bGw7CisgICAgUHJlcGFyZWRTdGF0ZW1lbnQgZmlyc3RTdGF0ZW1lbnQgPSBudWxsOworICAgIFByZXBhcmVkU3RhdGVtZW50IGxhc3RTdGF0ZW1lbnQgPSBudWxsOwogICAgICAgICBTdHJpbmcgdGFibGVOYW1lID0gImN1c3RvbWVyX3N0bXRfd3JhcHBlciI7CiAgICAgICAgIGRzID0gdGhpcy5kczsKLQlpbnQgdGFibGVJbmRleCA9IDE7CisgICAgaW50IHRhYmxlSW5kZXggPSAxOwogCiAgICAgICAgIENvbm5lY3Rpb24gY29ubiA9IG51bGw7CiAgICAgICAgIHRyeSB7CkBAIC0xMjUsMTcgKzEyNSwxNyBAQAogICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IDg7IGkrKykgewogICAgICAgICAgICAgdHJ5IHsKIAotCQlpZihpID09NykgewotCQkJc3RtdCA9IGNvbm4ucHJlcGFyZVN0YXRlbWVudCgic2VsZWN0ICogZnJvbSAiICsgdGFibGVOYW1lICsgdGFibGVJbmRleCArICIgd2hlcmUgY19waG9uZT0/Iik7Ci0JCQlsYXN0U3RhdGVtZW50ID0gc3RtdDsKLQkJICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImxhc3RTdGF0ZW1lbnQgOiAiICArIGxhc3RTdGF0ZW1lbnQpOwotCQl9IGVsc2UgeworICAgICAgICBpZihpID09NykgeworICAgICAgICAgICAgc3RtdCA9IGNvbm4ucHJlcGFyZVN0YXRlbWVudCgic2VsZWN0ICogZnJvbSAiICsgdGFibGVOYW1lICsgdGFibGVJbmRleCArICIgd2hlcmUgY19waG9uZT0/Iik7CisgICAgICAgICAgICBsYXN0U3RhdGVtZW50ID0gc3RtdDsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImxhc3RTdGF0ZW1lbnQgOiAiICArIGxhc3RTdGF0ZW1lbnQpOworICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBzdG10ID0gY29ubi5wcmVwYXJlU3RhdGVtZW50KCJzZWxlY3QgKiBmcm9tICIrIHRhYmxlTmFtZStpICsiIHdoZXJlIGNfcGhvbmU9ID8iKTsKLQkJfQotCQlpZihpID09IDEpIHsKLQkJICAgIGZpcnN0U3RhdGVtZW50ID0gc3RtdDsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZmlyc3RTdGF0ZW1lbnQgOiAiICsgZmlyc3RTdGF0ZW1lbnQpOwotCQl9CisgICAgICAgIH0KKyAgICAgICAgaWYoaSA9PSAxKSB7CisgICAgICAgICAgICBmaXJzdFN0YXRlbWVudCA9IHN0bXQ7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZpcnN0U3RhdGVtZW50IDogIiArIGZpcnN0U3RhdGVtZW50KTsKKyAgICAgICAgfQogICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgICAgIHBhc3NlZCA9IGZhbHNlOwpAQCAtMTQzLDE1NyArMTQzLDE1NyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHBhc3NlZCA9IGZpcnN0U3RhdGVtZW50ICE9IGxhc3RTdGF0ZW1lbnQ7Ci0JdHJ5IHsKLQkgICAgaWYoZmlyc3RTdGF0ZW1lbnQgIT0gbnVsbCkgewotCQlmaXJzdFN0YXRlbWVudC5jbG9zZSgpOwotCSAgICB9Ci0JICAgIGlmKGxhc3RTdGF0ZW1lbnQgIT0gbnVsbCkgewotCQlsYXN0U3RhdGVtZW50LmNsb3NlKCk7Ci0JICAgIH0KLQkgICAgaWYoY29ubiAhPSBudWxsKSB7Ci0JICAgICAgICBjb25uLmNsb3NlKCk7Ci0JICAgIH0KLQl9IGNhdGNoKEV4Y2VwdGlvbiBleCkgewotCSAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLQl9Ci0JU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZW1lbnQgY2FjaGluZyBNaXNzIHRlc3QgRW5kIik7CisgICAgdHJ5IHsKKyAgICAgICAgaWYoZmlyc3RTdGF0ZW1lbnQgIT0gbnVsbCkgeworICAgICAgICBmaXJzdFN0YXRlbWVudC5jbG9zZSgpOworICAgICAgICB9CisgICAgICAgIGlmKGxhc3RTdGF0ZW1lbnQgIT0gbnVsbCkgeworICAgICAgICBsYXN0U3RhdGVtZW50LmNsb3NlKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYoY29ubiAhPSBudWxsKSB7CisgICAgICAgICAgICBjb25uLmNsb3NlKCk7CisgICAgICAgIH0KKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCkgeworICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZW1lbnQgY2FjaGluZyBNaXNzIHRlc3QgRW5kIik7CiAgICAgICAgIHJldHVybiBwYXNzZWQ7CiAgICAgfQogCiAKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0SGl0Q29sdW1uTmFtZXMoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZW1lbnQgY2FjaGluZyBIaXQgKENvbHVtbiBOYW1lcykgdGVzdCBTdGFydCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVtZW50IGNhY2hpbmcgSGl0IChDb2x1bW4gTmFtZXMpIHRlc3QgU3RhcnQiKTsKICAgICAgICAgQ29ubmVjdGlvbiBmaXJzdENvbm5lY3Rpb24gPSBudWxsOwogICAgICAgICBDb25uZWN0aW9uIGxhc3RDb25uZWN0aW9uID0gbnVsbDsKICAgICAgICAgY29tLnN1bi5hcHBzZXJ2LmpkYmMuRGF0YVNvdXJjZSBkcyA9IG51bGw7CiAgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHN0bXQgPSBudWxsOwotCVByZXBhcmVkU3RhdGVtZW50IGZpcnN0U3RhdGVtZW50ID0gbnVsbDsKLQlQcmVwYXJlZFN0YXRlbWVudCBsYXN0U3RhdGVtZW50ID0gbnVsbDsKKyAgICBQcmVwYXJlZFN0YXRlbWVudCBmaXJzdFN0YXRlbWVudCA9IG51bGw7CisgICAgUHJlcGFyZWRTdGF0ZW1lbnQgbGFzdFN0YXRlbWVudCA9IG51bGw7CiAgICAgICAgIFN0cmluZyB0YWJsZU5hbWUgPSAiY3VzdG9tZXJfc3RtdF93cmFwcGVyIjsKICAgICAgICAgZHMgPSB0aGlzLmRzOwotCWludCB0YWJsZUluZGV4ID0gMTsKKyAgICBpbnQgdGFibGVJbmRleCA9IDE7CiAgICAgICAgIGJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CiAgICAgICAgIENvbm5lY3Rpb24gY29ubiA9IG51bGw7Ci0JdHJ5IHsKKyAgICB0cnkgewogICAgICAgICAgICAgICAgIGNvbm4gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JfWNhdGNoKEV4Y2VwdGlvbiBleCkgewotCX0KKyAgICB9Y2F0Y2goRXhjZXB0aW9uIGV4KSB7CisgICAgfQogICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IDc7IGkrKykgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluZGV4ID0gIiArIGkpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluZGV4ID0gIiArIGkpOwogICAgICAgICAgICAgdHJ5IHsKIAotCSAgICAgICAgaWYoaSA9PSA2KSB7Ci0JCSAgICBTdHJpbmdbXSBjb2x1bW5OYW1lcyA9IHsiY19pZCIsICJjX3Bob25lIn07Ci0JCSAgICBzdG10ID0gY29ubi5wcmVwYXJlU3RhdGVtZW50KCJzZWxlY3QgKiBmcm9tICIrIHRhYmxlTmFtZSArIHRhYmxlSW5kZXggKyAiIHdoZXJlIGNfcGhvbmU9ID8iLCBjb2x1bW5OYW1lcyk7Ci0JCSAgICBsYXN0U3RhdGVtZW50ID0gc3RtdDsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigibGFzdFN0YXRlbWVudCA6ICIgICsgbGFzdFN0YXRlbWVudCk7Ci0JCX0gZWxzZSBpZihpID09MSkgeyAgIAotCQkgICAgU3RyaW5nW10gY29sdW1uTmFtZXMgPSB7ImNfaWQiLCAiY19waG9uZSJ9OwotCQkgICAgc3RtdCA9IGNvbm4ucHJlcGFyZVN0YXRlbWVudCgic2VsZWN0ICogZnJvbSAiKyB0YWJsZU5hbWUgKyB0YWJsZUluZGV4ICsgIiB3aGVyZSBjX3Bob25lPSA/IiwgY29sdW1uTmFtZXMpOwotCQkgICAgZmlyc3RTdGF0ZW1lbnQgPSBzdG10OwotCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJmaXJzdFN0YXRlbWVudCA6ICIgKyBmaXJzdFN0YXRlbWVudCk7Ci0JCX0gZWxzZSB7Ci0JCSAgICBpbnQgaiA9IGkgKyAyOworICAgICAgICAgICAgaWYoaSA9PSA2KSB7CisgICAgICAgICAgICBTdHJpbmdbXSBjb2x1bW5OYW1lcyA9IHsiY19pZCIsICJjX3Bob25lIn07CisgICAgICAgICAgICBzdG10ID0gY29ubi5wcmVwYXJlU3RhdGVtZW50KCJzZWxlY3QgKiBmcm9tICIrIHRhYmxlTmFtZSArIHRhYmxlSW5kZXggKyAiIHdoZXJlIGNfcGhvbmU9ID8iLCBjb2x1bW5OYW1lcyk7CisgICAgICAgICAgICBsYXN0U3RhdGVtZW50ID0gc3RtdDsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibGFzdFN0YXRlbWVudCA6ICIgICsgbGFzdFN0YXRlbWVudCk7CisgICAgICAgIH0gZWxzZSBpZihpID09MSkgeworICAgICAgICAgICAgU3RyaW5nW10gY29sdW1uTmFtZXMgPSB7ImNfaWQiLCAiY19waG9uZSJ9OworICAgICAgICAgICAgc3RtdCA9IGNvbm4ucHJlcGFyZVN0YXRlbWVudCgic2VsZWN0ICogZnJvbSAiKyB0YWJsZU5hbWUgKyB0YWJsZUluZGV4ICsgIiB3aGVyZSBjX3Bob25lPSA/IiwgY29sdW1uTmFtZXMpOworICAgICAgICAgICAgZmlyc3RTdGF0ZW1lbnQgPSBzdG10OworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJmaXJzdFN0YXRlbWVudCA6ICIgKyBmaXJzdFN0YXRlbWVudCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpbnQgaiA9IGkgKyAyOwogICAgICAgICAgICAgICAgICAgICBpbnQgayA9IGogKyAxOwotCQkgICAgU3RyaW5nW10gY29sdW1uTmFtZXMgPSB7ImNfaWQiK2osICJjX2lkIitrfTsKKyAgICAgICAgICAgIFN0cmluZ1tdIGNvbHVtbk5hbWVzID0geyJjX2lkIitqLCAiY19pZCIra307CiAgICAgICAgICAgICAgICAgICAgIHN0bXQgPSBjb25uLnByZXBhcmVTdGF0ZW1lbnQoInNlbGVjdCAqIGZyb20gIisgdGFibGVOYW1lK2kgKyIgd2hlcmUgY19waG9uZT0gPyIsIGNvbHVtbk5hbWVzKTsKLQkJfQorICAgICAgICB9CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICAgICAgcGFzc2VkID0gZmFsc2U7CiAgICAgICAgICAgICB9IGZpbmFsbHkgewotCQlpZihzdG10ICE9IG51bGwpIHsKLQkgICAgICAgICAgICB0cnkgewotCQkJc3RtdC5jbG9zZSgpOwotCQkgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHt9Ci0JCX0KKyAgICAgICAgaWYoc3RtdCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHN0bXQuY2xvc2UoKTsKKyAgICAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7fQorICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLQlwYXNzZWQgPSAoZmlyc3RTdGF0ZW1lbnQgPT0gbGFzdFN0YXRlbWVudCk7Ci0JdHJ5IHsKLQkgICAgaWYoZmlyc3RTdGF0ZW1lbnQgIT0gbnVsbCkgewotCQlmaXJzdFN0YXRlbWVudC5jbG9zZSgpOwotCSAgICB9Ci0JICAgIGlmKGxhc3RTdGF0ZW1lbnQgIT0gbnVsbCkgewotCQlsYXN0U3RhdGVtZW50LmNsb3NlKCk7Ci0JICAgIH0KKyAgICBwYXNzZWQgPSAoZmlyc3RTdGF0ZW1lbnQgPT0gbGFzdFN0YXRlbWVudCk7CisgICAgdHJ5IHsKKyAgICAgICAgaWYoZmlyc3RTdGF0ZW1lbnQgIT0gbnVsbCkgeworICAgICAgICBmaXJzdFN0YXRlbWVudC5jbG9zZSgpOworICAgICAgICB9CisgICAgICAgIGlmKGxhc3RTdGF0ZW1lbnQgIT0gbnVsbCkgeworICAgICAgICBsYXN0U3RhdGVtZW50LmNsb3NlKCk7CisgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoY29ubiAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlMSkgewogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSAKLQl9IGNhdGNoKEV4Y2VwdGlvbiBleCkgewotCSAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLQl9Ci0JU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZW1lbnQgY2FjaGluZyBIaXQgKENvbHVtbiBuYW1lcykgdGVzdCBFbmQiKTsKLQlyZXR1cm4gcGFzc2VkOworICAgICAgICAgICAgICAgIH0KKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCkgeworICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZW1lbnQgY2FjaGluZyBIaXQgKENvbHVtbiBuYW1lcykgdGVzdCBFbmQiKTsKKyAgICByZXR1cm4gcGFzc2VkOwogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIHRlc3RIaXRDb2x1bW5JbmRleGVzKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVtZW50IGNhY2hpbmcgSGl0IChDb2x1bW4gaW5kZXhlcykgdGVzdCBTdGFydCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVtZW50IGNhY2hpbmcgSGl0IChDb2x1bW4gaW5kZXhlcykgdGVzdCBTdGFydCIpOwogICAgICAgICBDb25uZWN0aW9uIGZpcnN0Q29ubmVjdGlvbiA9IG51bGw7CiAgICAgICAgIENvbm5lY3Rpb24gbGFzdENvbm5lY3Rpb24gPSBudWxsOwogICAgICAgICBjb20uc3VuLmFwcHNlcnYuamRiYy5EYXRhU291cmNlIGRzID0gbnVsbDsKICAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgc3RtdCA9IG51bGw7Ci0JUHJlcGFyZWRTdGF0ZW1lbnQgZmlyc3RTdGF0ZW1lbnQgPSBudWxsOwotCVByZXBhcmVkU3RhdGVtZW50IGxhc3RTdGF0ZW1lbnQgPSBudWxsOworICAgIFByZXBhcmVkU3RhdGVtZW50IGZpcnN0U3RhdGVtZW50ID0gbnVsbDsKKyAgICBQcmVwYXJlZFN0YXRlbWVudCBsYXN0U3RhdGVtZW50ID0gbnVsbDsKICAgICAgICAgU3RyaW5nIHRhYmxlTmFtZSA9ICJjdXN0b21lcl9zdG10X3dyYXBwZXIiOwogICAgICAgICBkcyA9IHRoaXMuZHM7Ci0JaW50IHRhYmxlSW5kZXggPSAxOworICAgIGludCB0YWJsZUluZGV4ID0gMTsKICAgICAgICAgYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKICAgICAgICAgICAgIENvbm5lY3Rpb24gY29ubiA9IG51bGw7Ci0JdHJ5IHsKKyAgICB0cnkgewogICAgICAgICAgICAgICAgIGNvbm4gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JfWNhdGNoKEV4Y2VwdGlvbiBleCkgewotCX0KKyAgICB9Y2F0Y2goRXhjZXB0aW9uIGV4KSB7CisgICAgfQogICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IDc7IGkrKykgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluZGV4ID0gIiArIGkpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluZGV4ID0gIiArIGkpOwogICAgICAgICAgICAgdHJ5IHsKIAotCSAgICAgICAgaWYoaSA9PSA2KSB7Ci0JCSAgICBzdG10ID0gY29ubi5wcmVwYXJlU3RhdGVtZW50KCJzZWxlY3QgKiBmcm9tICIrIHRhYmxlTmFtZSArIHRhYmxlSW5kZXggKyAiIHdoZXJlIGNfcGhvbmU9ID8iLCBjb2x1bW5JbmRleGVzNik7Ci0JCSAgICBsYXN0U3RhdGVtZW50ID0gc3RtdDsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigibGFzdFN0YXRlbWVudCA6ICIgICsgbGFzdFN0YXRlbWVudCk7Ci0JCX0gZWxzZSB7ICAgCi0JCQkvL0ZpcnN0IHN0bXQgZXhlY3V0ZWQgd291bGQgaGF2ZSB7MiwzfSBzYW1lIGFzIGNvbHVtbkluZGV4ZXM2Ci0JCSAgICBpbnRbXSBjb2x1bW5JbmRleGVzID0ge2krMSwgaSsyfTsKKyAgICAgICAgICAgIGlmKGkgPT0gNikgeworICAgICAgICAgICAgc3RtdCA9IGNvbm4ucHJlcGFyZVN0YXRlbWVudCgic2VsZWN0ICogZnJvbSAiKyB0YWJsZU5hbWUgKyB0YWJsZUluZGV4ICsgIiB3aGVyZSBjX3Bob25lPSA/IiwgY29sdW1uSW5kZXhlczYpOworICAgICAgICAgICAgbGFzdFN0YXRlbWVudCA9IHN0bXQ7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImxhc3RTdGF0ZW1lbnQgOiAiICArIGxhc3RTdGF0ZW1lbnQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy9GaXJzdCBzdG10IGV4ZWN1dGVkIHdvdWxkIGhhdmUgezIsM30gc2FtZSBhcyBjb2x1bW5JbmRleGVzNgorICAgICAgICAgICAgaW50W10gY29sdW1uSW5kZXhlcyA9IHtpKzEsIGkrMn07CiAgICAgICAgICAgICAgICAgICAgIHN0bXQgPSBjb25uLnByZXBhcmVTdGF0ZW1lbnQoInNlbGVjdCAqIGZyb20gIisgdGFibGVOYW1lK2kgKyIgd2hlcmUgY19waG9uZT0gPyIsIGNvbHVtbkluZGV4ZXMpOwotCQl9Ci0JCWlmKGkgPT0gMSkgewotCQkgICAgZmlyc3RTdGF0ZW1lbnQgPSBzdG10OwotCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJmaXJzdFN0YXRlbWVudCA6ICIgKyBmaXJzdFN0YXRlbWVudCk7Ci0JCX0gCisgICAgICAgIH0KKyAgICAgICAgaWYoaSA9PSAxKSB7CisgICAgICAgICAgICBmaXJzdFN0YXRlbWVudCA9IHN0bXQ7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZpcnN0U3RhdGVtZW50IDogIiArIGZpcnN0U3RhdGVtZW50KTsKKyAgICAgICAgfQogICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgICAgIHBhc3NlZCA9IGZhbHNlOwogICAgICAgICAgICAgfSBmaW5hbGx5IHsKLQkJaWYoc3RtdCAhPSBudWxsKSB7Ci0JICAgICAgICAgICAgdHJ5IHsKLQkJCXN0bXQuY2xvc2UoKTsKLQkJICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7fQotCQl9CisgICAgICAgIGlmKHN0bXQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICBzdG10LmNsb3NlKCk7CisgICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCkge30KKyAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9Ci0JcGFzc2VkID0gKGZpcnN0U3RhdGVtZW50ID09IGxhc3RTdGF0ZW1lbnQpOwotCXRyeSB7Ci0JICAgIGlmKGZpcnN0U3RhdGVtZW50ICE9IG51bGwpIHsKLQkJZmlyc3RTdGF0ZW1lbnQuY2xvc2UoKTsKLQkgICAgfQotCSAgICBpZihsYXN0U3RhdGVtZW50ICE9IG51bGwpIHsKLQkJbGFzdFN0YXRlbWVudC5jbG9zZSgpOwotCSAgICB9CisgICAgcGFzc2VkID0gKGZpcnN0U3RhdGVtZW50ID09IGxhc3RTdGF0ZW1lbnQpOworICAgIHRyeSB7CisgICAgICAgIGlmKGZpcnN0U3RhdGVtZW50ICE9IG51bGwpIHsKKyAgICAgICAgZmlyc3RTdGF0ZW1lbnQuY2xvc2UoKTsKKyAgICAgICAgfQorICAgICAgICBpZihsYXN0U3RhdGVtZW50ICE9IG51bGwpIHsKKyAgICAgICAgbGFzdFN0YXRlbWVudC5jbG9zZSgpOworICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKGNvbm4gIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICAgY29ubi5jbG9zZSgpOwogICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZTEpIHsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gCi0JfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKLQkgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQotCVN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVtZW50IGNhY2hpbmcgSGl0IChDb2x1bW4gaW5kZXhlcykgdGVzdCBFbmQiKTsKLQlyZXR1cm4gcGFzc2VkOworICAgICAgICAgICAgICAgIH0KKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCkgeworICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZW1lbnQgY2FjaGluZyBIaXQgKENvbHVtbiBpbmRleGVzKSB0ZXN0IEVuZCIpOworICAgIHJldHVybiBwYXNzZWQ7CiAgICAgfQogICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0bXRDYWNoaW5nX2hpdF9taXNzL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCA4MmYzNGE2Li45ODhkMmU5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0bXRDYWNoaW5nX2hpdF9taXNzL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0bXRDYWNoaW5nX2hpdF9taXNzL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSwxNjEgKzEsMTYxIEBACi1kcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjE7DQotZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXIyOw0KLWRyb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMzsNCi1kcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjQ7DQotZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI1Ow0KLWRyb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNjsNCi1kcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjc7DQotZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI4Ow0KLWRyb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyOTsNCi1kcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjEwOw0KLUNSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXIxICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KSwNCi0gICAgY19pZDMgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ1ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDYgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ4ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDkgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkMTAgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsDQotDQotKTsNCi0NCi1JTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXIxIFZBTFVFUygyLCAnaWlvcCcsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwKTsNCi0NCi1DUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMiAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNiksDQotICAgIGNfaWQzICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ2ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDcgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkOCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ5ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDEwICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbA0KLSk7DQotDQotSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyMiBWQUxVRVMoMiwgJ2lpb3AnLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCk7DQotDQotQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjMgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpLA0KLSAgICBjX2lkMyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ0ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDUgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNiAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ3ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDggICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkOSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQxMCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwNCi0pOw0KLQ0KLUlOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjMgVkFMVUVTKDIsICdpaW9wJywgMywgNCwgNSwgNiwgNywgOCwgOSwgMTApOw0KLUNSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXI0ICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KSwNCi0gICAgY19pZDMgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ1ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDYgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ4ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDkgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkMTAgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsDQotKTsNCi0NCi1JTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXI0IFZBTFVFUygyLCAnaWlvcCcsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwKTsNCi0NCi1DUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNSAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNiksDQotICAgIGNfaWQzICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ2ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDcgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkOCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ5ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDEwICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbA0KLSk7DQotDQotSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyNSBWQUxVRVMoMiwgJ2lpb3AnLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCk7DQotDQotDQotDQotQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjYgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpLA0KLSAgICBjX2lkMyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ0ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDUgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNiAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ3ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDggICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkOSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQxMCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwNCi0pOw0KLQ0KLUlOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjYgVkFMVUVTKDIsICdpaW9wJywgMywgNCwgNSwgNiwgNywgOCwgOSwgMTApOw0KLQ0KLUNSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXI3ICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KSwNCi0gICAgY19pZDMgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ1ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDYgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ4ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDkgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkMTAgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsDQotKTsNCi0NCi1JTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXI3IFZBTFVFUygyLCAnaWlvcCcsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwKTsNCi0NCi1DUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyOCAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNiksDQotICAgIGNfaWQzICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ2ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDcgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkOCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ5ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDEwICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbA0KLSk7DQotDQotSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyOCBWQUxVRVMoMiwgJ2lpb3AnLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCk7DQotDQotQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjkgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpLA0KLSAgICBjX2lkMyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ0ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDUgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNiAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ3ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDggICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkOSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQxMCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwNCi0pOw0KLQ0KLUlOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjkgVkFMVUVTKDIsICdpaW9wJywgMywgNCwgNSwgNiwgNywgOCwgOSwgMTApOw0KLQ0KLUNSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXIxMCAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNiksDQotICAgIGNfaWQzICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkNSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ2ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDcgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX2lkOCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfaWQ5ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19pZDEwICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbA0KLSk7DQotDQotSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyMTAgVkFMVUVTKDIsICdpaW9wJywgMywgNCwgNSwgNiwgNywgOCwgOSwgMTApOw0KK2Ryb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMTsKK2Ryb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMjsKK2Ryb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMzsKK2Ryb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNDsKK2Ryb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNTsKK2Ryb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNjsKK2Ryb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNzsKK2Ryb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyODsKK2Ryb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyOTsKK2Ryb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMTA7CitDUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMSAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpLAorICAgIGNfaWQzICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDUgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ2ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDggICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ5ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkMTAgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsCisKKyk7CisKK0lOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjEgVkFMVUVTKDIsICdpaW9wJywgMywgNCwgNSwgNiwgNywgOCwgOSwgMTApOworCitDUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMiAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpLAorICAgIGNfaWQzICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDUgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ2ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDggICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ5ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkMTAgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsCispOworCitJTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXIyIFZBTFVFUygyLCAnaWlvcCcsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwKTsKKworQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjMgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KSwKKyAgICBjX2lkMyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ1ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNiAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDcgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ4ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkOSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDEwICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbAorKTsKKworSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyMyBWQUxVRVMoMiwgJ2lpb3AnLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCk7CitDUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNCAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpLAorICAgIGNfaWQzICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDUgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ2ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDggICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ5ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkMTAgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsCispOworCitJTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXI0IFZBTFVFUygyLCAnaWlvcCcsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwKTsKKworQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjUgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KSwKKyAgICBjX2lkMyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ1ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNiAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDcgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ4ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkOSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDEwICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbAorKTsKKworSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyNSBWQUxVRVMoMiwgJ2lpb3AnLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCk7CisKKworCitDUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNiAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpLAorICAgIGNfaWQzICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDUgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ2ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDggICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ5ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkMTAgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsCispOworCitJTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXI2IFZBTFVFUygyLCAnaWlvcCcsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwKTsKKworQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjcgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KSwKKyAgICBjX2lkMyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ1ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNiAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDcgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ4ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkOSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDEwICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbAorKTsKKworSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyNyBWQUxVRVMoMiwgJ2lpb3AnLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCk7CisKK0NSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXI4ICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNiksCisgICAgY19pZDMgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ0ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDYgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ3ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkOCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDkgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQxMCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwKKyk7CisKK0lOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjggVkFMVUVTKDIsICdpaW9wJywgMywgNCwgNSwgNiwgNywgOCwgOSwgMTApOworCitDUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyOSAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpLAorICAgIGNfaWQzICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDUgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ2ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNyAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDggICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ5ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkMTAgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsCispOworCitJTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXI5IFZBTFVFUygyLCAnaWlvcCcsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwKTsKKworQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjEwICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNiksCisgICAgY19pZDMgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ0ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkNSAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDYgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQ3ICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX2lkOCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19pZDkgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfaWQxMCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwKKyk7CisKK0lOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjEwIFZBTFVFUygyLCAnaWlvcCcsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3Mvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RtdENhY2hpbmdfaGl0X21pc3Mvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAppbmRleCBjYjk4Mzc4Li5mNjRjNmU0IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0bXRDYWNoaW5nX2hpdF9taXNzL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdG10Q2FjaGluZ19oaXRfbWlzcy9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xLDEwICsxLDEwIEBACi1kcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjE7DQotZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXIyOw0KLWRyb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMzsNCi1kcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjQ7DQotZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI1Ow0KLWRyb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNjsNCi1kcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjc7DQotZHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI4Ow0KLWRyb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyOTsNCi1kcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjEwOw0KK2Ryb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMTsKK2Ryb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMjsKK2Ryb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMzsKK2Ryb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNDsKK2Ryb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNTsKK2Ryb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNjsKK2Ryb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyNzsKK2Ryb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyODsKK2Ryb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyOTsKK2Ryb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyMTA7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzcy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3MvYnVpbGQucHJvcGVydGllcwppbmRleCBlMmVhNzQwLi4zNzE0ZmVkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzcy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RyZXNzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE5ICsxNSwxOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iamRiYy1zdHJlc3MiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc2VzMTIuemlwIiB2YWx1ZT0iL3RtcC9jbGFzc2VzMTIuemlwIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzcy9idWlsZC54bWwKaW5kZXggMzMwZjExYi4uN2M1ZDVkOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3MvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RyZXNzL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsMjIgKzQ4LDIyIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi9TaW1wbGVCTVAuY2xhc3MsICoqL1NpbXBsZUJNUEhvbWUuY2xhc3MsKiovKkNsaWVudCouY2xhc3MiIC8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8IS0tIENyZWF0ZSB0aGUgT1JBQ0xFIGNvbm5lY3Rpb24gcG9vbCBjb25uZWN0aW9uIHBvb2wgYW5kIGRhdGFzb3VyY2UgLS0+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLnR5cGUiIHZhbHVlPSJqYXZheC5zcWwuRGF0YVNvdXJjZSIvPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJqZGJjLXN0cmVzcyIvPgotCTxwYXJhbSBuYW1lPSJkYi5jbGFzcyIgdmFsdWU9Im9yYWNsZS5qZGJjLnBvb2wuT3JhY2xlRGF0YVNvdXJjZSIvPgotCTxwYXJhbSBuYW1lPSJkYi51c2VyIiB2YWx1ZT0iJHtvcmEudXNlcn0iLz4KLQk8cGFyYW0gbmFtZT0iZGIucHdkIiB2YWx1ZT0iJHtvcmEucGFzc3dkfSIvPgotCTxwYXJhbSBuYW1lPSJkYi51cmwiIHZhbHVlPSIke29yYS5zaWR9Ii8+CisgICAgPHBhcmFtIG5hbWU9ImRiLmNsYXNzIiB2YWx1ZT0ib3JhY2xlLmpkYmMucG9vbC5PcmFjbGVEYXRhU291cmNlIi8+CisgICAgPHBhcmFtIG5hbWU9ImRiLnVzZXIiIHZhbHVlPSIke29yYS51c2VyfSIvPgorICAgIDxwYXJhbSBuYW1lPSJkYi5wd2QiIHZhbHVlPSIke29yYS5wYXNzd2R9Ii8+CisgICAgPHBhcmFtIG5hbWU9ImRiLnVybCIgdmFsdWU9IiR7b3JhLnNpZH0iLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgpAQCAtNzMsNyArNzMsNyBAQAogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgogICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLXN0cmVzcy5wcm9wZXJ0eS5VUkw9JHtvcmEudXJsfSIvPgogICAgICAgPC9hbnRjYWxsPgotICAgICAgCisKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgogICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLXN0cmVzcy5wcm9wZXJ0eS5TZXJ2ZXJOYW1lPTEyOS4xNTguMjI5LjIzOSIvPgpAQCAtODYsMjIgKzg2LDIyIEBACiAgICAgICA8L2FudGNhbGw+CiAKIAotICAgICAgCi0gICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4gCisKKyAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgICAgPGVjaG8gbWVzc2FnZT0iRXhlY3V0aW5nIHNxbCBmcm9tICR7c3FsLmZpbGV9Ii8+CiAgICAgICA8c3FsCiAgICAgICAgIHNyYz0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIgotCWRyaXZlcj0ib3JhY2xlLmpkYmMuZHJpdmVyLk9yYWNsZURyaXZlciIKLQl1c2VyaWQ9IiR7b3JhLnVzZXJ9IgotCXBhc3N3b3JkPSIke29yYS5wYXNzd2R9IgotCXVybD0iJHtvcmEudXJsfSIKLQljbGFzc3BhdGg9IiR7Y2xhc3NlczEyLnppcH0iCi0Jb25lcnJvcj0iY29udGludWUiCi0JcHJpbnQ9InllcyIKKyAgICBkcml2ZXI9Im9yYWNsZS5qZGJjLmRyaXZlci5PcmFjbGVEcml2ZXIiCisgICAgdXNlcmlkPSIke29yYS51c2VyfSIKKyAgICBwYXNzd29yZD0iJHtvcmEucGFzc3dkfSIKKyAgICB1cmw9IiR7b3JhLnVybH0iCisgICAgY2xhc3NwYXRoPSIke2NsYXNzZXMxMi56aXB9IgorICAgIG9uZXJyb3I9ImNvbnRpbnVlIgorICAgIHByaW50PSJ5ZXMiCiAgICAgICAvPgotICAgICAgCisKICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTExMCwyNCArMTEwLDI0IEBACiAgICAgICA8ZWNobyBtZXNzYWdlPSJFeGVjdXRpbmcgc3FsIGZyb20gJHtzcWwuZmlsZX0iLz4KICAgICAgIDxzcWwKICAgICAgICAgc3JjPSJzcWwvZHJvcF9wb2ludGJhc2Uuc3FsIgotCWRyaXZlcj0ib3JhY2xlLmpkYmMuZHJpdmVyLk9yYWNsZURyaXZlciIKLQl1c2VyaWQ9IiR7b3JhLnVzZXJ9IgotCXBhc3N3b3JkPSIke29yYS5wYXNzd2R9IgotCXVybD0iJHtvcmEudXJsfSIKLQljbGFzc3BhdGg9IiR7Y2xhc3NlczEyLnppcH0iCi0Jb25lcnJvcj0iY29udGludWUiCi0JcHJpbnQ9InllcyIKKyAgICBkcml2ZXI9Im9yYWNsZS5qZGJjLmRyaXZlci5PcmFjbGVEcml2ZXIiCisgICAgdXNlcmlkPSIke29yYS51c2VyfSIKKyAgICBwYXNzd29yZD0iJHtvcmEucGFzc3dkfSIKKyAgICB1cmw9IiR7b3JhLnVybH0iCisgICAgY2xhc3NwYXRoPSIke2NsYXNzZXMxMi56aXB9IgorICAgIG9uZXJyb3I9ImNvbnRpbnVlIgorICAgIHByaW50PSJ5ZXMiCiAgICAgICAvPgogCi0gICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPiAKKyAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CiAKLSAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4gCisgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL3MxcWVEQi1zdHJlc3MiLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIj4gCisgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtc3RyZXNzIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzcy9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzcy9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKaW5kZXggZjI4MTdlNy4uNGZhMzVmOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3MvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RyZXNzL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQpAQCAtMjQsNDggKzI0LDQ4IEBACiBpbXBvcnQgY29tLnN1bi5zMWFzZGV2LmpkYmMuc3RyZXNzLmVqYi5TaW1wbGVCTVA7CiAKIHB1YmxpYyBjbGFzcyBTaW1wbGVCTVBDbGllbnQgewotICAgIAorCiAgICAgLy8gSW52b2tlIHdpdGggYXJnczogI2NsaWVudHMsICNtaW51dGVzCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKLSAgICAgICAgaW50IG51bUNsaWVudHMgPSAxMDsgLy8xMCBjbGllbnRzIAotCWludCBudW1NaW51dGVzID0gMTA7IC8vIDEwIG1pbnV0ZXMKLQlpZiAoYXJncy5sZW5ndGggPT0gMikgeworICAgICAgICBpbnQgbnVtQ2xpZW50cyA9IDEwOyAvLzEwIGNsaWVudHMKKyAgICBpbnQgbnVtTWludXRlcyA9IDEwOyAvLyAxMCBtaW51dGVzCisgICAgaWYgKGFyZ3MubGVuZ3RoID09IDIpIHsKICAgICAgICAgICAgIG51bUNsaWVudHMgPSBJbnRlZ2VyLnBhcnNlSW50KCBhcmdzWzBdICk7Ci0JICAgIG51bU1pbnV0ZXMgPSBJbnRlZ2VyLnBhcnNlSW50KCBhcmdzWzFdICk7Ci0JfQotICAgICAgICAKKyAgICAgICAgbnVtTWludXRlcyA9IEludGVnZXIucGFyc2VJbnQoIGFyZ3NbMV0gKTsKKyAgICB9CisKICAgICAgICAgU2ltcGxlQk1QQ2xpZW50IGNsaWVudCA9IG5ldyBTaW1wbGVCTVBDbGllbnQoKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIi09LT0tPS09LT0tPS0gUnVubmluZyBmb3IgIisgbnVtTWludXRlcwotCSAgICArIiBtaW51dGVzIC09LT0tPS09LT0tPS09LSIpOwotCWNsaWVudC5ydW5UZXN0KCBudW1DbGllbnRzLCBudW1NaW51dGVzICk7Ci0gICAgfQkKLSAgICAKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi09LT0tPS09LT0tPS0gUnVubmluZyBmb3IgIisgbnVtTWludXRlcworICAgICAgICArIiBtaW51dGVzIC09LT0tPS09LT0tPS09LSIpOworICAgIGNsaWVudC5ydW5UZXN0KCBudW1DbGllbnRzLCBudW1NaW51dGVzICk7CisgICAgfQorCiAgICAgcHVibGljIHZvaWQgcnVuVGVzdChpbnQgbnVtQ2xpZW50cywgaW50IG51bU1pbnV0ZXMgKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAogICAgICAgICBTaW1wbGVCTVBDbGllbnRUaHJlYWRbXSB0aHJlYWRzID0gbmV3IFNpbXBsZUJNUENsaWVudFRocmVhZFsgbnVtQ2xpZW50cyBdOwotCWZvciAoaW50IGkgPSAwIDsgaSA8IG51bUNsaWVudHM7IGkrKyApIHsKLQkgICAgdHJ5IHsKLQkgICAgICAgIHRocmVhZHNbaV0gPSBuZXcgU2ltcGxlQk1QQ2xpZW50VGhyZWFkKGkpOwotCSAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSkgewotCSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb3VsZCBub3QgY3JlYXRlIHRocmVhZCA6ICIgKyBpKTsKLQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgfQotCSAgICB0aHJlYWRzW2ldLnN0YXJ0KCk7Ci0JfQotICAgICAgICAKLQkvL0xldCBpdCBhbGwgcnVuIGZvciBmZXcgaG91cnMgYW5kIHRoZW4ga2lsbCBhbGwgdGhyZWFkcwotCVN5c3RlbS5vdXQucHJpbnRsbigiV2FpdGluZyBmb3IgdGhyZWFkcyB0byBkbyB3b3JrIG5vdy4uLiIpOwotCXRyeSB7Ci0JICAgIC8vbnVtTWludXRlcyBtaW4gKiA2MCBzZWMgKiAxMDAwID0gbWlsbGlzCi0JICAgIFRocmVhZC5zbGVlcCggbnVtTWludXRlcyAqIDYwICogMTAwMCApOwotCX0gY2F0Y2goSW50ZXJydXB0ZWRFeGNlcHRpb24gaWUpIHsKLQkgICAgaWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQorICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IG51bUNsaWVudHM7IGkrKyApIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHRocmVhZHNbaV0gPSBuZXcgU2ltcGxlQk1QQ2xpZW50VGhyZWFkKGkpOworICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb3VsZCBub3QgY3JlYXRlIHRocmVhZCA6ICIgKyBpKTsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQorICAgICAgICB0aHJlYWRzW2ldLnN0YXJ0KCk7CisgICAgfQogCi0JU3lzdGVtLm91dC5wcmludGxuKCJJbnRlcnJ1cHRpbmcgdGhyZWFkcyBub3cuLi4iKTsKLQlmb3IgKGludCBpID0gMCA7IGkgPCBudW1DbGllbnRzOyBpKysgKSB7Ci0JICAgIHRocmVhZHNbaV0ucnVuRmxhZyA9IGZhbHNlOwotCX0KLSAgICB9CQorICAgIC8vTGV0IGl0IGFsbCBydW4gZm9yIGZldyBob3VycyBhbmQgdGhlbiBraWxsIGFsbCB0aHJlYWRzCisgICAgU3lzdGVtLm91dC5wcmludGxuKCJXYWl0aW5nIGZvciB0aHJlYWRzIHRvIGRvIHdvcmsgbm93Li4uIik7CisgICAgdHJ5IHsKKyAgICAgICAgLy9udW1NaW51dGVzIG1pbiAqIDYwIHNlYyAqIDEwMDAgPSBtaWxsaXMKKyAgICAgICAgVGhyZWFkLnNsZWVwKCBudW1NaW51dGVzICogNjAgKiAxMDAwICk7CisgICAgfSBjYXRjaChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBpZSkgeworICAgICAgICBpZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CisKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkludGVycnVwdGluZyB0aHJlYWRzIG5vdy4uLiIpOworICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IG51bUNsaWVudHM7IGkrKyApIHsKKyAgICAgICAgdGhyZWFkc1tpXS5ydW5GbGFnID0gZmFsc2U7CisgICAgfQorICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RyZXNzL2NsaWVudC9TaW1wbGVCTVBDbGllbnRUaHJlYWQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RyZXNzL2NsaWVudC9TaW1wbGVCTVBDbGllbnRUaHJlYWQuamF2YQppbmRleCA5ZDEzYjgxLi40MWFhMjkyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzcy9jbGllbnQvU2ltcGxlQk1QQ2xpZW50VGhyZWFkLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3MvY2xpZW50L1NpbXBsZUJNUENsaWVudFRocmVhZC5qYXZhCkBAIC0zNywyNCArMzcsMjQgQEAKICAgICAgICAgamF2YXgucm1pLlBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpSZWYsIFNpbXBsZUJNUEhvbWUuY2xhc3MpOwogICAgICAgICBzaW1wbGVCTVAgPSBzaW1wbGVCTVBIb21lLmNyZWF0ZSgpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKICAgICAgICAgaW50IG51bVJhbiA9IDA7Ci0JaW50IG51bVBhc3NlZCA9IDA7CisgICAgaW50IG51bVBhc3NlZCA9IDA7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhyZWFkIDogIiAraWRfICsgIiBydW5uaW5nIik7CiAgICAgICAgIHdoaWxlKCBydW5GbGFnID09IHRydWUgKSB7Ci0JICAgIG51bVJhbisrOwotCSAgICB0cnkgewotCSAgICAgICAgaWYgKCBzaW1wbGVCTVAudGVzdDEoIGlkXykgKSB7CisgICAgICAgIG51bVJhbisrOworICAgICAgICB0cnkgeworICAgICAgICAgICAgaWYgKCBzaW1wbGVCTVAudGVzdDEoIGlkXykgKSB7CiAgICAgICAgICAgICAgICAgICAgIG51bVBhc3NlZCsrOwotCSAgICAgICAgfSAKLQkgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUpIHsKLQkgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIkZhaWxlZCB0byBydW4gYWZ0ZXIgOiAiICsgbnVtUGFzc2VkICk7Ci0JCWJyZWFrOwotCSAgICB9Ci0JfQorICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiRmFpbGVkIHRvIHJ1biBhZnRlciA6ICIgKyBudW1QYXNzZWQgKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CiAKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlRocmVhZCA6ICIraWRfICsgIiByYW4gOiAiICsgbnVtUmFuICsgCi0JICAgICIgcGFzc2VkOiAiICsgbnVtUGFzc2VkICk7Ci0gICAgfQkKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRocmVhZCA6ICIraWRfICsgIiByYW4gOiAiICsgbnVtUmFuICsKKyAgICAgICAgIiBwYXNzZWQ6ICIgKyBudW1QYXNzZWQgKTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzcy9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3MvZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCAwZjJlNTExLi40MWMyY2U1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzcy9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RyZXNzL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTU3LDYgKzU3LDYgQEAKICAgICAgIDx0cmFucy1hdHRyaWJ1dGU+UmVxdWlyZWQ8L3RyYW5zLWF0dHJpYnV0ZT4KICAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgPC9hc3NlbWJseS1kZXNjcmlwdG9yPgotICAgICAgCisKIDwvZWpiLWphcj4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3MvZWpiL1NpbXBsZUJNUEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RyZXNzL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKaW5kZXggYThkNTcwYy4uNjAxY2FkNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3MvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzcy9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCkBAIC0zMCw3NCArMzAsNzQgQEAKICAgICBpbnQgaWQ7CiAKICAgICBwdWJsaWMgdm9pZCBzZXRFbnRpdHlDb250ZXh0KEVudGl0eUNvbnRleHQgZW50aXR5Q29udGV4dCkgewotCUNvbnRleHQgY29udGV4dCA9IG51bGw7Ci0JdHJ5IHsKLQkgICAgY29udGV4dCAgICA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCSAgICBkcyA9IChEYXRhU291cmNlKSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7Ci0JfSBjYXRjaCAoTmFtaW5nRXhjZXB0aW9uIGUpIHsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiY2FudCBmaW5kIGRhdGFzb3VyY2UiKTsKLQl9CisgICAgQ29udGV4dCBjb250ZXh0ID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgICBjb250ZXh0ICAgID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgIGRzID0gKERhdGFTb3VyY2UpIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKKyAgICB9IGNhdGNoIChOYW1pbmdFeGNlcHRpb24gZSkgeworICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJjYW50IGZpbmQgZGF0YXNvdXJjZSIpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgSW50ZWdlciBlamJDcmVhdGUoKSB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsKLQlyZXR1cm4gbmV3IEludGVnZXIoMSk7CisgICAgcmV0dXJuIG5ldyBJbnRlZ2VyKDEpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIHRlc3QxKGludCB0ZXN0SWQpIHsKLQlDb25uZWN0aW9uIGNvbm4gPSBudWxsOwotCWJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKLQl0cnkgewotCSAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgIENvbm5lY3Rpb24gY29ubiA9IG51bGw7CisgICAgYm9vbGVhbiBwYXNzZWQgPSB0cnVlOworICAgIHRyeSB7CisgICAgICAgIGNvbm4gPSBkcy5nZXRDb25uZWN0aW9uKCk7CiAgICAgICAgICAgICBpbnNlcnRFbnRyeSggdGVzdElkLCAiMTIzNDU2Nzg5MCIsIGNvbm4pOwogICAgICAgICAgICAgLy9xdWVyeVRhYmxlKCBjb25uICk7Ci0JICAgIGVtcHR5VGFibGUoIGNvbm4sIHRlc3RJZCApOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIHBhc3NlZCA9IGZhbHNlOwotCX0gZmluYWxseSB7Ci0JICAgIGlmICggY29ubiAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsgY29ubi5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9ICAgIAotCSAgICB9Ci0JfQotCi0JcmV0dXJuIHBhc3NlZDsKLQkKKyAgICAgICAgZW1wdHlUYWJsZSggY29ubiwgdGVzdElkICk7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKCBjb25uICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeyBjb25uLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQogICAgIH0KLSAgICAKKworICAgIHJldHVybiBwYXNzZWQ7CisKKyAgICB9CisKIAogICAgIHByaXZhdGUgdm9pZCBpbnNlcnRFbnRyeSggaW50IGlkLCBTdHJpbmcgcGhvbmUsIENvbm5lY3Rpb24gY29uICkKICAgICAgICAgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7Ci0JCisKICAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgc3RtdCA9IGNvbi5wcmVwYXJlU3RhdGVtZW50KAotCSAgICAiaW5zZXJ0IGludG8gT19DdXN0b21lciB2YWx1ZXMgKD8sID8pIiApOworICAgICAgICAiaW5zZXJ0IGludG8gT19DdXN0b21lciB2YWx1ZXMgKD8sID8pIiApOwogCi0Jc3RtdC5zZXRJbnQoMSwgaWQpOwotCXN0bXQuc2V0U3RyaW5nKDIsIHBob25lKTsKKyAgICBzdG10LnNldEludCgxLCBpZCk7CisgICAgc3RtdC5zZXRTdHJpbmcoMiwgcGhvbmUpOwogCi0Jc3RtdC5leGVjdXRlVXBkYXRlKCk7Ci0Jc3RtdC5jbG9zZSgpOworICAgIHN0bXQuZXhlY3V0ZVVwZGF0ZSgpOworICAgIHN0bXQuY2xvc2UoKTsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgZW1wdHlUYWJsZSggQ29ubmVjdGlvbiBjb24sIGludCB0ZXN0SWQgKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBTdGF0ZW1lbnQgc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKLSAgICAgICAgICAgIAotCSAgICBzdG10LmV4ZWN1dGUoImRlbGV0ZSAqIGZyb20gT19DdXN0b21lciBXSEVSRSBjX2lkPSIrdGVzdElkKTsKLQkgICAgc3RtdC5jbG9zZSgpOworCisgICAgICAgIHN0bXQuZXhlY3V0ZSgiZGVsZXRlICogZnJvbSBPX0N1c3RvbWVyIFdIRVJFIGNfaWQ9Iit0ZXN0SWQpOworICAgICAgICBzdG10LmNsb3NlKCk7CiAgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlKSB7Ci0JfQotCSAgICAKKyAgICB9CisKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgcXVlcnlUYWJsZSggQ29ubmVjdGlvbiBjb24gKSB7CiAgICAgICAgIHRyeSB7Ci0JICAgIFN0YXRlbWVudCBzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOwotCSAgICBSZXN1bHRTZXQgcnMgPSBzdG10LmV4ZWN1dGVRdWVyeSgic2VsZWN0ICogZnJvbSBPX0N1c3RvbWVyIik7Ci0JICAgIHdoaWxlKCBycy5uZXh0KCkgKSA7Ci0JICAgIHJzLmNsb3NlKCk7Ci0JICAgIHN0bXQuY2xvc2UoKTsKLQl9IGNhdGNoKCBFeGNlcHRpb24gZSkgewotCX0KKyAgICAgICAgU3RhdGVtZW50IHN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgIFJlc3VsdFNldCBycyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KCJzZWxlY3QgKiBmcm9tIE9fQ3VzdG9tZXIiKTsKKyAgICAgICAgd2hpbGUoIHJzLm5leHQoKSApIDsKKyAgICAgICAgcnMuY2xvc2UoKTsKKyAgICAgICAgc3RtdC5jbG9zZSgpOworICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlKSB7CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7fQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3Mvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3Mvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IGU0OTE0ZjYuLmYyNTYwNzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RyZXNzL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzcy9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsNyArMSw3IEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQotDQotQ1JFQVRFIFRBQkxFIE9fQ3VzdG9tZXIgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCitEcm9wIHRhYmxlIE9fQ3VzdG9tZXI7CisKK0NSRUFURSBUQUJMRSBPX0N1c3RvbWVyICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikKKyk7CisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RyZXNzL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzcy9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IDcwZDFmY2MuLmQ4NTRiOTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RyZXNzL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3Mvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbApAQCAtMSArMSBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RyZXNzMS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3MxL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYTQxM2E3OS4uYThkZGIzNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3MxL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3MxL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iamRiYy1zdHJlc3NjbXAiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci10ZWFtLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci10ZWFtLnhtbCIvPgpAQCAtMjYsMTEgKzI2LDExIEBACiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXItdGVhbS54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLXRlYW0ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXItcm9zdGVyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXItcm9zdGVyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1jbXAtbWFwcGluZ3MueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tY21wLW1hcHBpbmdzLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImRic2NoZW1hIiB2YWx1ZT0ic3FsL1Jvc3RlclNjaGVtYS5kYnNjaGVtYSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3MxL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RyZXNzMS9idWlsZC54bWwKaW5kZXggODRjMzg0Ni4uM2I0OWE3ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3MxL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzczEvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0idXRpbCIvPgpAQCAtNTUsNDMgKzU1LDQzIEBACiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2UtdGVhbS1qYXIiLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXBwY2xpZW50LWphci1jb21tb24iLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1lYXIiLz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlLXJvc3Rlci1qYXIiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLWVqYmphci1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSIke2VqYi1qYXItcm9zdGVyLnhtbH0iLz4KICAgICAgICAgPHBhcmFtIG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9IiR7c3VuLWVqYi1qYXItcm9zdGVyLnhtbH0iLz4KICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovTGVhZ3VlRGV0YWlscy5jbGFzcywqKi9QbGF5ZXJEZXRhaWxzLmNsYXNzLAogICAgICAgICAgICAgKiovVGVhbURldGFpbHMuY2xhc3MsKiovKlJvc3RlciouY2xhc3MsKiovRGVidWcuY2xhc3MiLz4KICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYi5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIuamFyIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlLXRlYW0tamFyIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1lamJqYXItY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iJHtlamItamFyLXRlYW0ueG1sfSIvPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iJHtzdW4tZWpiLWphci10ZWFtLnhtbH0iLz4KICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovKkxlYWd1ZSouY2xhc3MsKiovKlBsYXllciouY2xhc3MsKiovKlRlYW0qLmNsYXNzLCoqL0RlYnVnLmNsYXNzLCoqLypkYnNjaGVtYSoiIC8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJlamIuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tdGVhbS1lamIuamFyIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlLWVhciI+CiAgICAgICA8ZGVsZXRlIGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LmVhciIvPgogICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+Ci0gICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPiAgICAKKyAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CiAgICAgICA8ZWFyIGVhcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIgYXBweG1sPSIke2FwcGxpY2F0aW9uLnhtbH0iPgogICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSI+CiAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KICAgICAgICAgPC9maWxlc2V0PgogICAgICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LkFQU19IT01FfS9saWIiIGluY2x1ZGVzPSJyZXBvcnRlci5qYXIiLz4KLSAgICAgIDwvZWFyPiAgICAgICAgCisgICAgICA8L2Vhcj4KICAgICA8L3RhcmdldD4KIAotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtMTAxLDEwICsxMDEsMTAgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UudHlwZSIgdmFsdWU9ImphdmF4LnNxbC5EYXRhU291cmNlIi8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9IiR7cG9vbG5hbWV9Ii8+Ci0JPHBhcmFtIG5hbWU9ImRiLmNsYXNzIiB2YWx1ZT0ib3JhY2xlLmpkYmMucG9vbC5PcmFjbGVEYXRhU291cmNlIi8+Ci0JPHBhcmFtIG5hbWU9ImRiLnVzZXIiIHZhbHVlPSIke29yYS51c2VyfSIvPgotCTxwYXJhbSBuYW1lPSJkYi5wd2QiIHZhbHVlPSIke29yYS5wYXNzd2R9Ii8+Ci0JPHBhcmFtIG5hbWU9ImRiLnVybCIgdmFsdWU9IiR7b3JhLnNpZH0iLz4KKyAgICA8cGFyYW0gbmFtZT0iZGIuY2xhc3MiIHZhbHVlPSJvcmFjbGUuamRiYy5wb29sLk9yYWNsZURhdGFTb3VyY2UiLz4KKyAgICA8cGFyYW0gbmFtZT0iZGIudXNlciIgdmFsdWU9IiR7b3JhLnVzZXJ9Ii8+CisgICAgPHBhcmFtIG5hbWU9ImRiLnB3ZCIgdmFsdWU9IiR7b3JhLnBhc3N3ZH0iLz4KKyAgICA8cGFyYW0gbmFtZT0iZGIudXJsIiB2YWx1ZT0iJHtvcmEuc2lkfSIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+CkBAIC0xMTQsNyArMTE0LDcgQEAKICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiLz4KICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuJHtwb29sbmFtZX0ucHJvcGVydHkuVVJMPSR7b3JhLnVybH0iLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICAgIAorCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiLz4KICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuJHtwb29sbmFtZX0ucHJvcGVydHkuU2VydmVyTmFtZT0xMjkuMTU4LjIyOS4yMzkiLz4KQEAgLTEyOCw3ICsxMjgsNyBAQAogCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1wZXJzaXN0ZW5jZS1yZXNvdXJjZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0icG0ucmVzb3VyY2UubmFtZSIgdmFsdWU9Impkby9zMXFlUE0tc3RyZXNzLWNtcCIvPgotCTxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL3MxcWVEQi1zdHJlc3MtY21wIi8+CisgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvczFxZURCLXN0cmVzcy1jbXAiLz4KICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtdGFibGVzIi8+CkBAIC0xMzgsMTcgKzEzOCwxNyBAQAogICAgICAgPGVjaG8gbWVzc2FnZT0iRXhlY3V0aW5nIHNxbCBmcm9tICR7c3FsLmZpbGV9Ii8+CiAgICAgICA8c3FsCiAgICAgICAgIHNyYz0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIgotCWRyaXZlcj0ib3JhY2xlLmpkYmMuZHJpdmVyLk9yYWNsZURyaXZlciIKLQl1c2VyaWQ9IiR7b3JhLnVzZXJ9IgotCXBhc3N3b3JkPSIke29yYS5wYXNzd2R9IgotCXVybD0iJHtvcmEudXJsfSIKLQljbGFzc3BhdGg9IiR7Y2xhc3NlczEyLnppcH0iCi0Jb25lcnJvcj0iY29udGludWUiCi0JcHJpbnQ9InllcyIKKyAgICBkcml2ZXI9Im9yYWNsZS5qZGJjLmRyaXZlci5PcmFjbGVEcml2ZXIiCisgICAgdXNlcmlkPSIke29yYS51c2VyfSIKKyAgICBwYXNzd29yZD0iJHtvcmEucGFzc3dkfSIKKyAgICB1cmw9IiR7b3JhLnVybH0iCisgICAgY2xhc3NwYXRoPSIke2NsYXNzZXMxMi56aXB9IgorICAgIG9uZXJyb3I9ImNvbnRpbnVlIgorICAgIHByaW50PSJ5ZXMiCiAgICAgICAvPgotICAgICAgCisKICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS10YWJsZXMiLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgpAQCAtMTU3LDE4ICsxNTcsMTggQEAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkcm9wLXRhYmxlcyI+CiAgICAgICA8ZWNobyBtZXNzYWdlPSJFeGVjdXRpbmcgc3FsIGZyb20gJHtzcWwuZmlsZX0iLz4KICAgICAgIDxzcWwKICAgICAgICAgc3JjPSJzcWwvZHJvcF9wb2ludGJhc2Uuc3FsIgotCWRyaXZlcj0ib3JhY2xlLmpkYmMuZHJpdmVyLk9yYWNsZURyaXZlciIKLQl1c2VyaWQ9IiR7b3JhLnVzZXJ9IgotCXBhc3N3b3JkPSIke29yYS5wYXNzd2R9IgotCXVybD0iJHtvcmEudXJsfSIKLQljbGFzc3BhdGg9IiR7Y2xhc3NlczEyLnppcH0iCi0Jb25lcnJvcj0iY29udGludWUiCi0JcHJpbnQ9InllcyIKKyAgICBkcml2ZXI9Im9yYWNsZS5qZGJjLmRyaXZlci5PcmFjbGVEcml2ZXIiCisgICAgdXNlcmlkPSIke29yYS51c2VyfSIKKyAgICBwYXNzd29yZD0iJHtvcmEucGFzc3dkfSIKKyAgICB1cmw9IiR7b3JhLnVybH0iCisgICAgY2xhc3NwYXRoPSIke2NsYXNzZXMxMi56aXB9IgorICAgIG9uZXJyb3I9ImNvbnRpbnVlIgorICAgIHByaW50PSJ5ZXMiCiAgICAgICAvPgogICAgIDwvdGFyZ2V0PgogCkBAIC0xNzYsMTQgKzE3NiwxNCBAQAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtcGVyc2lzdGVuY2UtcmVzb3VyY2UtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InBtLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZG8vczFxZVBNLXN0cmVzcy1jbXAiLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4gCisgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL3MxcWVEQi1zdHJlc3MtY21wIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiI+IAorICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1jb25ucG9vbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSIke3Bvb2xuYW1lfSIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkcm9wLXRhYmxlcyIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3MxL2NsaWVudC9Sb3N0ZXJDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RyZXNzMS9jbGllbnQvUm9zdGVyQ2xpZW50LmphdmEKaW5kZXggNDAzYmNkOC4uOGRjYzIzMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3MxL2NsaWVudC9Sb3N0ZXJDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzczEvY2xpZW50L1Jvc3RlckNsaWVudC5qYXZhCkBAIC0yMyw0OCArMjMsNDggQEAKIGltcG9ydCBjb20uc3VuLnMxYXNkZXYuamRiYy5zdHJlc3MxLmVqYi4qOwogCiBwdWJsaWMgY2xhc3MgUm9zdGVyQ2xpZW50IHsKLSAgICAKKwogICAgIC8vIEludm9rZSB3aXRoIGFyZ3M6ICNjbGllbnRzLCAjbWludXRlcwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24gewogCi0gICAgICAgIGludCBudW1DbGllbnRzID0gMTA7IC8vMTAgY2xpZW50cyAKLQlpbnQgbnVtTWludXRlcyA9IDEwOyAvLyAxMCBtaW51dGVzCi0JaWYgKGFyZ3MubGVuZ3RoID09IDIpIHsKKyAgICAgICAgaW50IG51bUNsaWVudHMgPSAxMDsgLy8xMCBjbGllbnRzCisgICAgaW50IG51bU1pbnV0ZXMgPSAxMDsgLy8gMTAgbWludXRlcworICAgIGlmIChhcmdzLmxlbmd0aCA9PSAyKSB7CiAgICAgICAgICAgICBudW1DbGllbnRzID0gSW50ZWdlci5wYXJzZUludCggYXJnc1swXSApOwotCSAgICBudW1NaW51dGVzID0gSW50ZWdlci5wYXJzZUludCggYXJnc1sxXSApOwotCX0KLSAgICAgICAgCisgICAgICAgIG51bU1pbnV0ZXMgPSBJbnRlZ2VyLnBhcnNlSW50KCBhcmdzWzFdICk7CisgICAgfQorCiAgICAgICAgIFJvc3RlckNsaWVudCBjbGllbnQgPSBuZXcgUm9zdGVyQ2xpZW50KCk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCItPS09LT0tPS09LT0tIFJ1bm5pbmcgZm9yICIrIG51bU1pbnV0ZXMKLQkgICAgKyIgbWludXRlcyAtPS09LT0tPS09LT0tPS0iKTsKLQljbGllbnQucnVuVGVzdCggbnVtQ2xpZW50cywgbnVtTWludXRlcyApOwotICAgIH0JCi0gICAgCisgICAgU3lzdGVtLm91dC5wcmludGxuKCItPS09LT0tPS09LT0tIFJ1bm5pbmcgZm9yICIrIG51bU1pbnV0ZXMKKyAgICAgICAgKyIgbWludXRlcyAtPS09LT0tPS09LT0tPS0iKTsKKyAgICBjbGllbnQucnVuVGVzdCggbnVtQ2xpZW50cywgbnVtTWludXRlcyApOworICAgIH0KKwogICAgIHB1YmxpYyB2b2lkIHJ1blRlc3QoaW50IG51bUNsaWVudHMsIGludCBudW1NaW51dGVzICkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgUm9zdGVyQ2xpZW50VGhyZWFkW10gdGhyZWFkcyA9IG5ldyBSb3N0ZXJDbGllbnRUaHJlYWRbIG51bUNsaWVudHMgXTsKLQlmb3IgKGludCBpID0gMCA7IGkgPCBudW1DbGllbnRzOyBpKysgKSB7Ci0JICAgIHRyeSB7Ci0JICAgICAgICB0aHJlYWRzW2ldID0gbmV3IFJvc3RlckNsaWVudFRocmVhZChpKTsKLQkgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUpIHsKLQkgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ291bGQgbm90IGNyZWF0ZSB0aHJlYWQgOiAiICsgaSk7Ci0JCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIH0KLQkgICAgdGhyZWFkc1tpXS5zdGFydCgpOwotCX0KLSAgICAgICAgCi0JLy9MZXQgaXQgYWxsIHJ1biBmb3IgZmV3IGhvdXJzIGFuZCB0aGVuIGtpbGwgYWxsIHRocmVhZHMKLQlTeXN0ZW0ub3V0LnByaW50bG4oIldhaXRpbmcgZm9yIHRocmVhZHMgdG8gZG8gd29yayBub3cuLi4iKTsKLQl0cnkgewotCSAgICAvL251bU1pbnV0ZXMgbWluICogNjAgc2VjICogMTAwMCA9IG1pbGxpcwotCSAgICBUaHJlYWQuc2xlZXAoIG51bU1pbnV0ZXMgKiA2MCAqIDEwMDAgKTsKLQl9IGNhdGNoKEludGVycnVwdGVkRXhjZXB0aW9uIGllKSB7Ci0JICAgIGllLnByaW50U3RhY2tUcmFjZSgpOwotCX0KKyAgICBmb3IgKGludCBpID0gMCA7IGkgPCBudW1DbGllbnRzOyBpKysgKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB0aHJlYWRzW2ldID0gbmV3IFJvc3RlckNsaWVudFRocmVhZChpKTsKKyAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ291bGQgbm90IGNyZWF0ZSB0aHJlYWQgOiAiICsgaSk7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KKyAgICAgICAgdGhyZWFkc1tpXS5zdGFydCgpOworICAgIH0KIAotCVN5c3RlbS5vdXQucHJpbnRsbigiSW50ZXJydXB0aW5nIHRocmVhZHMgbm93Li4uIik7Ci0JZm9yIChpbnQgaSA9IDAgOyBpIDwgbnVtQ2xpZW50czsgaSsrICkgewotCSAgICB0aHJlYWRzW2ldLnJ1bkZsYWcgPSBmYWxzZTsKLQl9Ci0gICAgfQkKKyAgICAvL0xldCBpdCBhbGwgcnVuIGZvciBmZXcgaG91cnMgYW5kIHRoZW4ga2lsbCBhbGwgdGhyZWFkcworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2FpdGluZyBmb3IgdGhyZWFkcyB0byBkbyB3b3JrIG5vdy4uLiIpOworICAgIHRyeSB7CisgICAgICAgIC8vbnVtTWludXRlcyBtaW4gKiA2MCBzZWMgKiAxMDAwID0gbWlsbGlzCisgICAgICAgIFRocmVhZC5zbGVlcCggbnVtTWludXRlcyAqIDYwICogMTAwMCApOworICAgIH0gY2F0Y2goSW50ZXJydXB0ZWRFeGNlcHRpb24gaWUpIHsKKyAgICAgICAgaWUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfQorCisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbnRlcnJ1cHRpbmcgdGhyZWFkcyBub3cuLi4iKTsKKyAgICBmb3IgKGludCBpID0gMCA7IGkgPCBudW1DbGllbnRzOyBpKysgKSB7CisgICAgICAgIHRocmVhZHNbaV0ucnVuRmxhZyA9IGZhbHNlOworICAgIH0KKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzczEvY2xpZW50L1Jvc3RlckNsaWVudFRocmVhZC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3MxL2NsaWVudC9Sb3N0ZXJDbGllbnRUaHJlYWQuamF2YQppbmRleCBhZmIyOWQ4Li4wYTViZGZmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzczEvY2xpZW50L1Jvc3RlckNsaWVudFRocmVhZC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RyZXNzMS9jbGllbnQvUm9zdGVyQ2xpZW50VGhyZWFkLmphdmEKQEAgLTMzLDcgKzMzLDcgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0dXMgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7Ci0gICAgCisKICAgICBwdWJsaWMgUm9zdGVyQ2xpZW50VGhyZWFkKCBpbnQgY2xpZW50SUQgKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgY2xpZW50SURfID0gY2xpZW50SUQ7CiAgICAgICAgIENvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwpAQCAtNDQsMjIgKzQ0LDIyIEBACiAgICAgfQogICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKICAgICAgICAgaW50IG51bVJhbiA9IDA7Ci0JaW50IG51bVBhc3NlZCA9IDA7CisgICAgaW50IG51bVBhc3NlZCA9IDA7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhyZWFkIDogIiArY2xpZW50SURfICsgIiBydW5uaW5nIik7CiAgICAgICAgIHdoaWxlKCBydW5GbGFnID09IHRydWUgKSB7Ci0JICAgIG51bVJhbisrOworICAgICAgICBudW1SYW4rKzsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgaW5zZXJ0SW5mbyhteVJvc3Rlcik7CiAgICAgICAgICAgICAgICAgZ2V0U29tZUluZm8obXlSb3N0ZXIpOwogICAgICAgICAgICAgICAgIGdldE1vcmVJbmZvKG15Um9zdGVyKTsKLQkJbnVtUGFzc2VkKys7CisgICAgICAgIG51bVBhc3NlZCsrOwogICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJGYWlsZWQgdG8gcnVuIGFmdGVyIDogIiArIG51bVBhc3NlZCApOwotCQlicmVhazsKLQkgICAgfQorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiRmFpbGVkIHRvIHJ1biBhZnRlciA6ICIgKyBudW1QYXNzZWQgKTsKKyAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLQlTeXN0ZW0ub3V0LnByaW50bG4oIlRocmVhZDogIiArIGNsaWVudElEXyArICIgcmFuOiAiICsgbnVtUmFuICsgCi0JICAgICIgcGFzc2VkOiAiICsgbnVtUGFzc2VkICk7CisgICAgICAgIH0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRocmVhZDogIiArIGNsaWVudElEXyArICIgcmFuOiAiICsgbnVtUmFuICsKKyAgICAgICAgIiBwYXNzZWQ6ICIgKyBudW1QYXNzZWQgKTsKICAgICB9CiAKICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGdldFNvbWVJbmZvKFJvc3RlciBteVJvc3RlcikgewpAQCAtMTE4LDcgKzExOCw3IEBACiAgICAgICAgICAgICBwbGF5ZXJMaXN0ID0gbXlSb3N0ZXIuZ2V0UGxheWVyc0J5UG9zaXRpb24oImRlZmVuZGVyIik7CiAgICAgICAgICAgICBwbGF5ZXJMaXN0ID0gbXlSb3N0ZXIuZ2V0QWxsUGxheWVycygpOwogICAgICAgICAgICAgcGxheWVyTGlzdCA9IG15Um9zdGVyLmdldFBsYXllcnNOb3RPblRlYW0oKTsKLSAgICAgICAgICAgIHBsYXllckxpc3QgPSBteVJvc3Rlci5nZXRQbGF5ZXJzQnlQb3NpdGlvbkFuZE5hbWUoInBvd2VyIGZvcndhcmQiLCAKKyAgICAgICAgICAgIHBsYXllckxpc3QgPSBteVJvc3Rlci5nZXRQbGF5ZXJzQnlQb3NpdGlvbkFuZE5hbWUoInBvd2VyIGZvcndhcmQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSmFjayBQYXR0ZXJzb24iKTsKICAgICAgICAgICAgIHBsYXllckxpc3QgPSBteVJvc3Rlci5nZXRQbGF5ZXJzQnlDaXR5KCJUcnVja2VlIik7CiAgICAgICAgICAgICBwbGF5ZXJMaXN0ID0gbXlSb3N0ZXIuZ2V0UGxheWVyc0J5U3BvcnQoIlNvY2NlciIpOwpAQCAtMTY1LDcgKzE2NSw3IEBACiAKICAgICAgICAgICAgIG15Um9zdGVyLmNyZWF0ZVRlYW1JbkxlYWd1ZShuZXcgVGVhbURldGFpbHMoCiAgICAgICAgICAgICAgICAgIlQyIiwgIkdvcGhlcnMiLCAiTWFudGVjYSIpLCAiTDEiKTsKLSAgICAgICAgICAgCisKICAgICAgICAgICAgIG15Um9zdGVyLmNyZWF0ZVRlYW1JbkxlYWd1ZShuZXcgVGVhbURldGFpbHMoCiAgICAgICAgICAgICAgICAgIlQzIiwgIkRlZXIiLCAiQm9kaWUiKSwgIkwyIik7CiAKQEAgLTI4Myw3ICsyODMsNyBAQAogICAgICAgICAgICAgLy8gUGxheWVycywgbm8gdGVhbQogICAgICAgICAgICAgbXlSb3N0ZXIuY3JlYXRlUGxheWVyKG5ldyBQbGF5ZXJEZXRhaWxzKAogICAgICAgICAgICAgICAgICJQMjYiLCAiSG9iaWUgSmFja3NvbiIsICJwaXRjaGVyIiwgNTgyLjAwKSk7Ci0gICAgICAgICAgCisKICAgICAgICAgICAgIG15Um9zdGVyLmNyZWF0ZVBsYXllcihuZXcgUGxheWVyRGV0YWlscygKICAgICAgICAgICAgICAgICAiUDI3IiwgIk1lbGluZGEgS2VuZGFsbCIsICJjYXRjaGVyIiwgNjc3LjAwKSk7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RyZXNzMS9lamIvTGVhZ3VlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3MxL2VqYi9MZWFndWVCZWFuLmphdmEKaW5kZXggNDE5NWI2NC4uZjZlZDg0ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3MxL2VqYi9MZWFndWVCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3MxL2VqYi9MZWFndWVCZWFuLmphdmEKQEAgLTI5LDcgKzI5LDcgQEAKIAogICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0TGVhZ3VlSWQoKTsKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRMZWFndWVJZChTdHJpbmcgaWQpOwotICAgIAorCiAgICAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXROYW1lKCk7CiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSk7CiAKQEAgLTczLDMxICs3MywzMSBAQAogICAgICAgICBzZXRTcG9ydChzcG9ydCk7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KLSAgICAgICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUG9zdENyZWF0ZSAoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgU3RyaW5nIHNwb3J0KQogICAgICAgICB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsgfQogCiAgICAgcHVibGljIHZvaWQgc2V0RW50aXR5Q29udGV4dChFbnRpdHlDb250ZXh0IGN0eCkgewogICAgICAgICBjb250ZXh0ID0gY3R4OwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHVuc2V0RW50aXR5Q29udGV4dCgpIHsKICAgICAgICAgY29udGV4dCA9IG51bGw7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgewogICAgICAgICAvL0RlYnVnLnByaW50KCJMZWFndWVCZWFuIGVqYlJlbW92ZSIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7CiAgICAgICAgIC8vRGVidWcucHJpbnQoIkxlYWd1ZUJlYW4gZWpiTG9hZCIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlN0b3JlKCkgewogICAgICAgICAvL0RlYnVnLnByaW50KCJMZWFndWVCZWFuIGVqYlN0b3JlIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkgeyB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3MxL2VqYi9Mb2NhbExlYWd1ZUhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RyZXNzMS9lamIvTG9jYWxMZWFndWVIb21lLmphdmEKaW5kZXggNmRjOTljYS4uMjcwNDg0NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3MxL2VqYi9Mb2NhbExlYWd1ZUhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzczEvZWpiL0xvY2FsTGVhZ3VlSG9tZS5qYXZhCkBAIC0yMCwxMCArMjAsMTAgQEAKIGltcG9ydCBqYWthcnRhLmVqYi4qOwogCiBwdWJsaWMgaW50ZXJmYWNlIExvY2FsTGVhZ3VlSG9tZSBleHRlbmRzIEVKQkxvY2FsSG9tZSB7Ci0gICAgCisKICAgICBwdWJsaWMgTG9jYWxMZWFndWUgY3JlYXRlIChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBTdHJpbmcgc3BvcnQpCiAgICAgICAgIHRocm93cyBDcmVhdGVFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgTG9jYWxMZWFndWUgZmluZEJ5UHJpbWFyeUtleSAoU3RyaW5nIGlkKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3MxL2VqYi9Mb2NhbFBsYXllckhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RyZXNzMS9lamIvTG9jYWxQbGF5ZXJIb21lLmphdmEKaW5kZXggMmIzYWU3Ni4uZGE0NjUwMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3MxL2VqYi9Mb2NhbFBsYXllckhvbWUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzczEvZWpiL0xvY2FsUGxheWVySG9tZS5qYXZhCkBAIC0yMCwzOSArMjAsMzkgQEAKIGltcG9ydCBqYWthcnRhLmVqYi4qOwogCiBwdWJsaWMgaW50ZXJmYWNlIExvY2FsUGxheWVySG9tZSBleHRlbmRzIEVKQkxvY2FsSG9tZSB7Ci0gICAgCisKICAgICBwdWJsaWMgTG9jYWxQbGF5ZXIgY3JlYXRlIChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBTdHJpbmcgcG9zaXRpb24sCiAgICAgICAgIGRvdWJsZSBzYWxhcnkpCiAgICAgICAgIHRocm93cyBDcmVhdGVFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgTG9jYWxQbGF5ZXIgZmluZEJ5UHJpbWFyeUtleSAoU3RyaW5nIGlkKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwotICAgIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVBvc2l0aW9uKFN0cmluZyBwb3NpdGlvbikgCisKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlQb3NpdGlvbihTdHJpbmcgcG9zaXRpb24pCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlIaWdoZXJTYWxhcnkoU3RyaW5nIG5hbWUpIAorICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeUhpZ2hlclNhbGFyeShTdHJpbmcgbmFtZSkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVNhbGFyeVJhbmdlKGRvdWJsZSBsb3csIGRvdWJsZSBoaWdoKSAKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlTYWxhcnlSYW5nZShkb3VibGUgbG93LCBkb3VibGUgaGlnaCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeUxlYWd1ZShMb2NhbExlYWd1ZSBsZWFndWUpIAorICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeUxlYWd1ZShMb2NhbExlYWd1ZSBsZWFndWUpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlTcG9ydChTdHJpbmcgc3BvcnQpIAorICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVNwb3J0KFN0cmluZyBzcG9ydCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeUNpdHkoU3RyaW5nIGNpdHkpIAorICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeUNpdHkoU3RyaW5nIGNpdHkpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQWxsKCkgCisgICAgcHVibGljIENvbGxlY3Rpb24gZmluZEFsbCgpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kTm90T25UZWFtKCkgCisgICAgcHVibGljIENvbGxlY3Rpb24gZmluZE5vdE9uVGVhbSgpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlQb3NpdGlvbkFuZE5hbWUoU3RyaW5nIHBvc2l0aW9uLCAKKyAgICBwdWJsaWMgQ29sbGVjdGlvbiBmaW5kQnlQb3NpdGlvbkFuZE5hbWUoU3RyaW5nIHBvc2l0aW9uLAogICAgICAgICBTdHJpbmcgbmFtZSkgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBDb2xsZWN0aW9uIGZpbmRCeVRlc3QgKFN0cmluZyBwYXJtMSwgU3RyaW5nIHBhcm0yLCBTdHJpbmcgcGFybTMpCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzczEvZWpiL0xvY2FsVGVhbUhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RyZXNzMS9lamIvTG9jYWxUZWFtSG9tZS5qYXZhCmluZGV4IGQwZjJmYTguLjlmOTE1NTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RyZXNzMS9lamIvTG9jYWxUZWFtSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RyZXNzMS9lamIvTG9jYWxUZWFtSG9tZS5qYXZhCkBAIC0yMiw3ICsyMiw3IEBACiBwdWJsaWMgaW50ZXJmYWNlIExvY2FsVGVhbUhvbWUgZXh0ZW5kcyBFSkJMb2NhbEhvbWUgewogICAgIHB1YmxpYyBMb2NhbFRlYW0gY3JlYXRlIChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBTdHJpbmcgY2l0eSkKICAgICAgICAgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIHB1YmxpYyBMb2NhbFRlYW0gZmluZEJ5UHJpbWFyeUtleSAoU3RyaW5nIGlkKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3MxL2VqYi9QbGF5ZXJCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzczEvZWpiL1BsYXllckJlYW4uamF2YQppbmRleCA2OTRiZDYwLi4xZTU1NWU1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzczEvZWpiL1BsYXllckJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzczEvZWpiL1BsYXllckJlYW4uamF2YQpAQCAtMjgsNyArMjgsNyBAQAogICAgIC8vIEFjY2VzcyBtZXRob2RzIGZvciBwZXJzaXN0ZW50IGZpZWxkcwogICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0UGxheWVySWQoKTsKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRQbGF5ZXJJZChTdHJpbmcgaWQpOwotICAgIAorCiAgICAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXROYW1lKCk7CiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSk7CiAKQEAgLTUxLDEzICs1MSwxMyBAQAogCiAgICAgLy8gQnVzaW5lc3MgbWV0aG9kcwogICAgIHB1YmxpYyBDb2xsZWN0aW9uIGdldExlYWd1ZXMoKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uIHsKLSAgICAgICAgIExvY2FsUGxheWVyIHBsYXllciA9IAorICAgICAgICAgTG9jYWxQbGF5ZXIgcGxheWVyID0KICAgICAgICAgICAgICAoTG9jYWxQbGF5ZXIpY29udGV4dC5nZXRFSkJMb2NhbE9iamVjdCgpOwogICAgICAgICAgcmV0dXJuIGVqYlNlbGVjdExlYWd1ZXMocGxheWVyKTsKICAgICB9CiAKICAgICBwdWJsaWMgQ29sbGVjdGlvbiBnZXRTcG9ydHMoKSB0aHJvd3MgRmluZGVyRXhjZXB0aW9uIHsKLSAgICAgICAgIExvY2FsUGxheWVyIHBsYXllciA9IAorICAgICAgICAgTG9jYWxQbGF5ZXIgcGxheWVyID0KICAgICAgICAgICAgICAoTG9jYWxQbGF5ZXIpY29udGV4dC5nZXRFSkJMb2NhbE9iamVjdCgpOwogICAgICAgICAgcmV0dXJuIGVqYlNlbGVjdFNwb3J0cyhwbGF5ZXIpOwogICAgIH0KQEAgLTczLDMxICs3MywzMSBAQAogICAgICAgICBzZXRTYWxhcnkoc2FsYXJ5KTsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotICAgICAgICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJQb3N0Q3JlYXRlIChTdHJpbmcgaWQsIFN0cmluZyBuYW1lLCBTdHJpbmcgcG9zaXRpb24sCiAgICAgICAgIGRvdWJsZSBzYWxhcnkpIHRocm93cyBDcmVhdGVFeGNlcHRpb24geyB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRFbnRpdHlDb250ZXh0KEVudGl0eUNvbnRleHQgY3R4KSB7CiAgICAgICAgIGNvbnRleHQgPSBjdHg7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgdW5zZXRFbnRpdHlDb250ZXh0KCkgewogICAgICAgICBjb250ZXh0ID0gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7CiAgICAgICAgIC8vRGVidWcucHJpbnQoIlBsYXllckJlYW4gZWpiUmVtb3ZlIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHsKICAgICAgICAgLy9EZWJ1Zy5wcmludCgiUGxheWVyQmVhbiBlamJMb2FkIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiU3RvcmUoKSB7CiAgICAgICAgIC8vRGVidWcucHJpbnQoIlBsYXllckJlYW4gZWpiU3RvcmUiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7IH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgeyB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzczEvZWpiL1Jvc3Rlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3MxL2VqYi9Sb3N0ZXIuamF2YQppbmRleCAyNzQwNDdmLi5mNjA3NGRjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzczEvZWpiL1Jvc3Rlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RyZXNzMS9lamIvUm9zdGVyLmphdmEKQEAgLTIyLDU1ICsyMiw1NSBAQAogaW1wb3J0IGNvbS5zdW4uczFhc2Rldi5qZGJjLnN0cmVzczEudXRpbC4qOwogCiBwdWJsaWMgaW50ZXJmYWNlIFJvc3RlciBleHRlbmRzIEVKQk9iamVjdCB7Ci0gCisKICAgICAvLyBQbGF5ZXJzCiAKLSAgICBwdWJsaWMgdm9pZCBjcmVhdGVQbGF5ZXIoUGxheWVyRGV0YWlscyBkZXRhaWxzKSAKKyAgICBwdWJsaWMgdm9pZCBjcmVhdGVQbGF5ZXIoUGxheWVyRGV0YWlscyBkZXRhaWxzKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIHZvaWQgYWRkUGxheWVyKFN0cmluZyBwbGF5ZXJJZCwgU3RyaW5nIHRlYW1JZCkgCisgICAgcHVibGljIHZvaWQgYWRkUGxheWVyKFN0cmluZyBwbGF5ZXJJZCwgU3RyaW5nIHRlYW1JZCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyB2b2lkIHJlbW92ZVBsYXllcihTdHJpbmcgcGxheWVySWQpIAorICAgIHB1YmxpYyB2b2lkIHJlbW92ZVBsYXllcihTdHJpbmcgcGxheWVySWQpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgdm9pZCBkcm9wUGxheWVyKFN0cmluZyBwbGF5ZXJJZCwgU3RyaW5nIHRlYW1JZCkgCisgICAgcHVibGljIHZvaWQgZHJvcFBsYXllcihTdHJpbmcgcGxheWVySWQsIFN0cmluZyB0ZWFtSWQpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgUGxheWVyRGV0YWlscyBnZXRQbGF5ZXIoU3RyaW5nIHBsYXllcklkKSAKKyAgICBwdWJsaWMgUGxheWVyRGV0YWlscyBnZXRQbGF5ZXIoU3RyaW5nIHBsYXllcklkKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzT2ZUZWFtKFN0cmluZyB0ZWFtSWQpIAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc09mVGVhbShTdHJpbmcgdGVhbUlkKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzT2ZUZWFtQ29weShTdHJpbmcgdGVhbUlkKSAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNPZlRlYW1Db3B5KFN0cmluZyB0ZWFtSWQpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeVBvc2l0aW9uKFN0cmluZyBwb3NpdGlvbikgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlQb3NpdGlvbihTdHJpbmcgcG9zaXRpb24pCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeUhpZ2hlclNhbGFyeShTdHJpbmcgbmFtZSkgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlIaWdoZXJTYWxhcnkoU3RyaW5nIG5hbWUpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeVNhbGFyeVJhbmdlKGRvdWJsZSBsb3csIGRvdWJsZSBoaWdoKSAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeVNhbGFyeVJhbmdlKGRvdWJsZSBsb3csIGRvdWJsZSBoaWdoKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlMZWFndWVJZChTdHJpbmcgbGVhZ3VlSWQpIAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5TGVhZ3VlSWQoU3RyaW5nIGxlYWd1ZUlkKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlTcG9ydChTdHJpbmcgc3BvcnQpIAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5U3BvcnQoU3RyaW5nIHNwb3J0KQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlDaXR5KFN0cmluZyBjaXR5KSAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeUNpdHkoU3RyaW5nIGNpdHkpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldEFsbFBsYXllcnMoKSAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldEFsbFBsYXllcnMoKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzTm90T25UZWFtKCkgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzTm90T25UZWFtKCkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5UG9zaXRpb25BbmROYW1lKFN0cmluZyBwb3NpdGlvbiwgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlQb3NpdGlvbkFuZE5hbWUoU3RyaW5nIHBvc2l0aW9uLAogICAgICAgICBTdHJpbmcgbmFtZSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0TGVhZ3Vlc09mUGxheWVyKFN0cmluZyBwbGF5ZXJJZCkKQEAgLTgxLDI3ICs4MSwyNyBAQAogCiAgICAgLy8gVGVhbXMKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0VGVhbXNPZkxlYWd1ZShTdHJpbmcgbGVhZ3VlSWQpIAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0VGVhbXNPZkxlYWd1ZShTdHJpbmcgbGVhZ3VlSWQpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgdm9pZCBjcmVhdGVUZWFtSW5MZWFndWUoVGVhbURldGFpbHMgZGV0YWlscywgU3RyaW5nIGxlYWd1ZUlkKSAKKyAgICBwdWJsaWMgdm9pZCBjcmVhdGVUZWFtSW5MZWFndWUoVGVhbURldGFpbHMgZGV0YWlscywgU3RyaW5nIGxlYWd1ZUlkKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlVGVhbShTdHJpbmcgdGVhbUlkKSAKKyAgICBwdWJsaWMgdm9pZCByZW1vdmVUZWFtKFN0cmluZyB0ZWFtSWQpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgVGVhbURldGFpbHMgZ2V0VGVhbShTdHJpbmcgdGVhbUlkKSAKKyAgICBwdWJsaWMgVGVhbURldGFpbHMgZ2V0VGVhbShTdHJpbmcgdGVhbUlkKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgLy8gTGVhZ3VlcwogCi0gICAgcHVibGljIHZvaWQgY3JlYXRlTGVhZ3VlKExlYWd1ZURldGFpbHMgZGV0YWlscykgCisgICAgcHVibGljIHZvaWQgY3JlYXRlTGVhZ3VlKExlYWd1ZURldGFpbHMgZGV0YWlscykKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAotICAgIHB1YmxpYyB2b2lkIHJlbW92ZUxlYWd1ZShTdHJpbmcgbGVhZ3VlSWQpIAorICAgIHB1YmxpYyB2b2lkIHJlbW92ZUxlYWd1ZShTdHJpbmcgbGVhZ3VlSWQpCiAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgTGVhZ3VlRGV0YWlscyBnZXRMZWFndWUoU3RyaW5nIGxlYWd1ZUlkKSAKKyAgICBwdWJsaWMgTGVhZ3VlRGV0YWlscyBnZXRMZWFndWUoU3RyaW5nIGxlYWd1ZUlkKQogICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgLy8gVGVzdApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3MxL2VqYi9Sb3N0ZXJCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzczEvZWpiL1Jvc3RlckJlYW4uamF2YQppbmRleCA1OTJhNmI1Li5lYzliM2Q4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzczEvZWpiL1Jvc3RlckJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzczEvZWpiL1Jvc3RlckJlYW4uamF2YQpAQCAtNDMsMTcgKzQzLDE3IEBACiAgICAgICAgIHJldHVybiBjb3B5UGxheWVyc1RvRGV0YWlscyhwbGF5ZXJzKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBjcmVhdGVQbGF5ZXIoUGxheWVyRGV0YWlscyBkZXRhaWxzKSB7IAorICAgIHB1YmxpYyB2b2lkIGNyZWF0ZVBsYXllcihQbGF5ZXJEZXRhaWxzIGRldGFpbHMpIHsKICAgICAgICAgLy9EZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBjcmVhdGVQbGF5ZXIiKTsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIExvY2FsUGxheWVyIHBsYXllciA9IHBsYXllckhvbWUuY3JlYXRlKGRldGFpbHMuZ2V0SWQoKSwgCisgICAgICAgICAgICBMb2NhbFBsYXllciBwbGF5ZXIgPSBwbGF5ZXJIb21lLmNyZWF0ZShkZXRhaWxzLmdldElkKCksCiAgICAgICAgICAgICAgICAgZGV0YWlscy5nZXROYW1lKCksIGRldGFpbHMuZ2V0UG9zaXRpb24oKSwgZGV0YWlscy5nZXRTYWxhcnkoKSk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotIAotICAgIHB1YmxpYyB2b2lkIGFkZFBsYXllcihTdHJpbmcgcGxheWVySWQsIFN0cmluZyB0ZWFtSWQpIHsgCisKKyAgICBwdWJsaWMgdm9pZCBhZGRQbGF5ZXIoU3RyaW5nIHBsYXllcklkLCBTdHJpbmcgdGVhbUlkKSB7CiAgICAgICAgIC8vRGVidWcucHJpbnQoIlJvc3RlckJlYW4gYWRkUGxheWVyIik7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBMb2NhbFRlYW0gdGVhbSA9IHRlYW1Ib21lLmZpbmRCeVByaW1hcnlLZXkodGVhbUlkKTsKQEAgLTY0LDcgKzY0LDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHJlbW92ZVBsYXllcihTdHJpbmcgcGxheWVySWQpIHsgCisgICAgcHVibGljIHZvaWQgcmVtb3ZlUGxheWVyKFN0cmluZyBwbGF5ZXJJZCkgewogICAgICAgICAvL0RlYnVnLnByaW50KCJSb3N0ZXJCZWFuIHJlbW92ZVBsYXllciIpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgTG9jYWxQbGF5ZXIgcGxheWVyID0gcGxheWVySG9tZS5maW5kQnlQcmltYXJ5S2V5KHBsYXllcklkKTsKQEAgLTczLDcgKzczLDcgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAKKwogICAgIHB1YmxpYyB2b2lkIGRyb3BQbGF5ZXIoU3RyaW5nIHBsYXllcklkLCBTdHJpbmcgdGVhbUlkKSB7CiAgICAgICAgIC8vRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZHJvcFBsYXllciIpOwogICAgICAgICB0cnkgewpAQCAtOTgsNyArOTgsNyBAQAogICAgICAgICByZXR1cm4gcGxheWVyRGV0YWlsczsKICAgICB9CiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNPZlRlYW0oU3RyaW5nIHRlYW1JZCkgeyAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNPZlRlYW0oU3RyaW5nIHRlYW1JZCkgewogICAgICAgICAvL0RlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFBsYXllcnNPZlRlYW0iKTsKICAgICAgICAgQ29sbGVjdGlvbiBwbGF5ZXJzID0gbnVsbDsKIApAQCAtMTEzLDcgKzExMyw3IEBACiAgICAgfQogCiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNPZlRlYW1Db3B5KFN0cmluZyB0ZWFtSWQpIHsgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzT2ZUZWFtQ29weShTdHJpbmcgdGVhbUlkKSB7CiAgICAgICAgIC8vRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0UGxheWVyc09mVGVhbUNvcHkiKTsKICAgICAgICAgQXJyYXlMaXN0IHBsYXllcnNMaXN0ID0gbnVsbDsKIApAQCAtMTI4LDcgKzEyOCw3IEBACiAgICAgfQogCiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFRlYW1zT2ZMZWFndWUoU3RyaW5nIGxlYWd1ZUlkKSB7IAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0VGVhbXNPZkxlYWd1ZShTdHJpbmcgbGVhZ3VlSWQpIHsKICAgICAgICAgLy9EZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRUZWFtc09mTGVhZ3VlIik7CiAKICAgICAgICAgQXJyYXlMaXN0IGRldGFpbHNMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwpAQCAtMTY0LDcgKzE2NCw3IEBACiAgICAgfQogCiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeUhpZ2hlclNhbGFyeShTdHJpbmcgbmFtZSkgeyAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeUhpZ2hlclNhbGFyeShTdHJpbmcgbmFtZSkgewogICAgICAgICAvL0RlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFBsYXllcnNCeUJ5SGlnaGVyU2FsYXJ5Iik7CiAgICAgICAgIENvbGxlY3Rpb24gcGxheWVycyA9IG51bGw7CiAKQEAgLTE3Niw3ICsxNzYsNyBAQAogICAgICAgICByZXR1cm4gY29weVBsYXllcnNUb0RldGFpbHMocGxheWVycyk7CiAgICAgfSAvLyBnZXRQbGF5ZXJzQnlIaWdoZXJTYWxhcnkKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5U2FsYXJ5UmFuZ2UoZG91YmxlIGxvdywgZG91YmxlIGhpZ2gpIHsgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlTYWxhcnlSYW5nZShkb3VibGUgbG93LCBkb3VibGUgaGlnaCkgewogICAgICAgICAvL0RlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFBsYXllcnNCeVNhbGFyeVJhbmdlIik7CiAgICAgICAgIENvbGxlY3Rpb24gcGxheWVycyA9IG51bGw7CiAKQEAgLTE4OSw3ICsxODksNyBAQAogICAgICAgICByZXR1cm4gY29weVBsYXllcnNUb0RldGFpbHMocGxheWVycyk7CiAgICAgfSAvLyBnZXRQbGF5ZXJzQnlTYWxhcnlSYW5nZQogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlMZWFndWVJZChTdHJpbmcgbGVhZ3VlSWQpIHsgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlMZWFndWVJZChTdHJpbmcgbGVhZ3VlSWQpIHsKICAgICAgICAgLy9EZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRQbGF5ZXJzQnlMZWFndWVJZCIpOwogICAgICAgICBDb2xsZWN0aW9uIHBsYXllcnMgPSBudWxsOwogCkBAIC0yMDIsNyArMjAyLDcgQEAKICAgICAgICAgcmV0dXJuIGNvcHlQbGF5ZXJzVG9EZXRhaWxzKHBsYXllcnMpOwogICAgIH0gLy8gZ2V0UGxheWVyc0J5TGVhZ3VlSWQKIAotICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5U3BvcnQoU3RyaW5nIHNwb3J0KSB7IAorICAgIHB1YmxpYyBBcnJheUxpc3QgZ2V0UGxheWVyc0J5U3BvcnQoU3RyaW5nIHNwb3J0KSB7CiAgICAgICAgIC8vRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0UGxheWVyc0J5U3BvcnQiKTsKICAgICAgICAgQ29sbGVjdGlvbiBwbGF5ZXJzID0gbnVsbDsKIApAQCAtMjE0LDcgKzIxNCw3IEBACiAgICAgICAgIHJldHVybiBjb3B5UGxheWVyc1RvRGV0YWlscyhwbGF5ZXJzKTsKICAgICB9IC8vIGdldFBsYXllcnNCeVNwb3J0CiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNCeUNpdHkoU3RyaW5nIGNpdHkpIHsgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlDaXR5KFN0cmluZyBjaXR5KSB7CiAgICAgICAgIC8vRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0UGxheWVyc0J5Q2l0eSIpOwogICAgICAgICBDb2xsZWN0aW9uIHBsYXllcnMgPSBudWxsOwogCkBAIC0yMjYsNyArMjI2LDcgQEAKICAgICAgICAgcmV0dXJuIGNvcHlQbGF5ZXJzVG9EZXRhaWxzKHBsYXllcnMpOwogICAgIH0gLy8gZ2V0UGxheWVyc0J5Q2l0eQogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRBbGxQbGF5ZXJzKCkgeyAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldEFsbFBsYXllcnMoKSB7CiAgICAgICAgIC8vRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0QWxsUGxheWVycyIpOwogICAgICAgICBDb2xsZWN0aW9uIHBsYXllcnMgPSBudWxsOwogCkBAIC0yMzksNyArMjM5LDcgQEAKICAgICAgICAgcmV0dXJuIGNvcHlQbGF5ZXJzVG9EZXRhaWxzKHBsYXllcnMpOwogICAgIH0gLy8gZ2V0QWxsUGxheWVycwogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzTm90T25UZWFtKCkgeyAKKyAgICBwdWJsaWMgQXJyYXlMaXN0IGdldFBsYXllcnNOb3RPblRlYW0oKSB7CiAgICAgICAgIC8vRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0UGxheWVyc05vdE9uVGVhbSIpOwogICAgICAgICBDb2xsZWN0aW9uIHBsYXllcnMgPSBudWxsOwogCkBAIC0yNTEsOCArMjUxLDggQEAKICAgICAgICAgcmV0dXJuIGNvcHlQbGF5ZXJzVG9EZXRhaWxzKHBsYXllcnMpOwogICAgIH0gLy8gZ2V0UGxheWVyc05vdE9uVGVhbQogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlQb3NpdGlvbkFuZE5hbWUoU3RyaW5nIHBvc2l0aW9uLCAKLSAgICAgICAgU3RyaW5nIG5hbWUpIHsgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRQbGF5ZXJzQnlQb3NpdGlvbkFuZE5hbWUoU3RyaW5nIHBvc2l0aW9uLAorICAgICAgICBTdHJpbmcgbmFtZSkgewogICAgICAgICAvL0RlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFBsYXllcnNCeVBvc2l0aW9uQW5kTmFtZSIpOwogICAgICAgICBDb2xsZWN0aW9uIHBsYXllcnMgPSBudWxsOwogCkBAIC0yNjQsNyArMjY0LDcgQEAKICAgICAgICAgcmV0dXJuIGNvcHlQbGF5ZXJzVG9EZXRhaWxzKHBsYXllcnMpOwogICAgIH0gLy8gZ2V0UGxheWVyc0J5UG9zaXRpb25BbmROYW1lCiAKLSAgICBwdWJsaWMgQXJyYXlMaXN0IGdldExlYWd1ZXNPZlBsYXllcihTdHJpbmcgcGxheWVySWQpIHsgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRMZWFndWVzT2ZQbGF5ZXIoU3RyaW5nIHBsYXllcklkKSB7CiAgICAgICAgIC8vRGVidWcucHJpbnQoIlJvc3RlckJlYW4gZ2V0TGVhZ3Vlc09mUGxheWVyIik7CiAgICAgICAgIEFycmF5TGlzdCBkZXRhaWxzTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKICAgICAgICAgQ29sbGVjdGlvbiBsZWFndWVzID0gbnVsbDsKQEAgLTI3NSw3ICsyNzUsNyBAQAogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQotICAgICAgCisKICAgICAgICAgSXRlcmF0b3IgaSA9IGxlYWd1ZXMuaXRlcmF0b3IoKTsKICAgICAgICAgd2hpbGUgKGkuaGFzTmV4dCgpKSB7CiAgICAgICAgICAgICBMb2NhbExlYWd1ZSBsZWFndWUgPSAoTG9jYWxMZWFndWUpIGkubmV4dCgpOwpAQCAtMjg3LDcgKzI4Nyw3IEBACiAgICAgICAgIHJldHVybiBkZXRhaWxzTGlzdDsKICAgICB9IC8vIGdldExlYWd1ZXNPZlBsYXllcgogCi0gICAgcHVibGljIEFycmF5TGlzdCBnZXRTcG9ydHNPZlBsYXllcihTdHJpbmcgcGxheWVySWQpIHsgCisgICAgcHVibGljIEFycmF5TGlzdCBnZXRTcG9ydHNPZlBsYXllcihTdHJpbmcgcGxheWVySWQpIHsKICAgICAgICAgLy9EZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRTcG9ydHNPZlBsYXllciIpOwogICAgICAgICBBcnJheUxpc3Qgc3BvcnRzTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKICAgICAgICAgQ29sbGVjdGlvbiBzcG9ydHMgPSBudWxsOwpAQCAtMjk4LDcgKzI5OCw3IEBACiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9Ci0gICAgICAKKwogICAgICAgICBJdGVyYXRvciBpID0gc3BvcnRzLml0ZXJhdG9yKCk7CiAgICAgICAgIHdoaWxlIChpLmhhc05leHQoKSkgewogICAgICAgICAgICAgU3RyaW5nIHNwb3J0ID0gKFN0cmluZykgaS5uZXh0KCk7CkBAIC0zMDgsNyArMzA4LDcgQEAKICAgICB9IC8vIGdldFNwb3J0c09mUGxheWVyCiAKICAgICAvLyBUZWFtIGJ1c2luZXNzIG1ldGhvZHMKLSAgICBwdWJsaWMgdm9pZCBjcmVhdGVUZWFtSW5MZWFndWUoVGVhbURldGFpbHMgZGV0YWlscywgU3RyaW5nIGxlYWd1ZUlkKSB7IAorICAgIHB1YmxpYyB2b2lkIGNyZWF0ZVRlYW1JbkxlYWd1ZShUZWFtRGV0YWlscyBkZXRhaWxzLCBTdHJpbmcgbGVhZ3VlSWQpIHsKICAgICAgICAgLy9EZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBjcmVhdGVUZWFtSW5MZWFndWUiKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIExvY2FsTGVhZ3VlIGxlYWd1ZSA9IGxlYWd1ZUhvbWUuZmluZEJ5UHJpbWFyeUtleShsZWFndWVJZCk7CkBAIC0zMjAsOCArMzIwLDggQEAKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAKLSAgICBwdWJsaWMgdm9pZCByZW1vdmVUZWFtKFN0cmluZyB0ZWFtSWQpIHsgCisKKyAgICBwdWJsaWMgdm9pZCByZW1vdmVUZWFtKFN0cmluZyB0ZWFtSWQpIHsKICAgICAgICAgLy9EZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiByZW1vdmVUZWFtIik7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBMb2NhbFRlYW0gdGVhbSA9IHRlYW1Ib21lLmZpbmRCeVByaW1hcnlLZXkodGVhbUlkKTsKQEAgLTMzMCw3ICszMzAsNyBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQotIAorCiAgICAgcHVibGljIFRlYW1EZXRhaWxzIGdldFRlYW0oU3RyaW5nIHRlYW1JZCkgewogICAgICAgICAvL0RlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGdldFRlYW0iKTsKICAgICAgICAgVGVhbURldGFpbHMgdGVhbURldGFpbHMgPSBudWxsOwpAQCAtMzQ1LDE4ICszNDUsMTggQEAKICAgICB9CiAKICAgICAvLyBMZWFndWUgYnVzaW5lc3MgbWV0aG9kcwotICAgIHB1YmxpYyB2b2lkIGNyZWF0ZUxlYWd1ZShMZWFndWVEZXRhaWxzIGRldGFpbHMpIHsgCisgICAgcHVibGljIHZvaWQgY3JlYXRlTGVhZ3VlKExlYWd1ZURldGFpbHMgZGV0YWlscykgewogICAgICAgICAvL0RlYnVnLnByaW50KCJSb3N0ZXJCZWFuIGNyZWF0ZUxlYWd1ZSIpOwogICAgICAgICB0cnkgewotICAgICAgICAgICAgTG9jYWxMZWFndWUgbGVhZ3VlID0gbGVhZ3VlSG9tZS5jcmVhdGUoZGV0YWlscy5nZXRJZCgpLCAKKyAgICAgICAgICAgIExvY2FsTGVhZ3VlIGxlYWd1ZSA9IGxlYWd1ZUhvbWUuY3JlYXRlKGRldGFpbHMuZ2V0SWQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbHMuZ2V0TmFtZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlscy5nZXRTcG9ydCgpKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlTGVhZ3VlKFN0cmluZyBsZWFndWVJZCkgeyAKKworICAgIHB1YmxpYyB2b2lkIHJlbW92ZUxlYWd1ZShTdHJpbmcgbGVhZ3VlSWQpIHsKICAgICAgICAgLy9EZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiByZW1vdmVMZWFndWUiKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIExvY2FsTGVhZ3VlIGxlYWd1ZSA9IGxlYWd1ZUhvbWUuZmluZEJ5UHJpbWFyeUtleShsZWFndWVJZCk7CkBAIC0zNjUsNyArMzY1LDcgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KLSAKKwogICAgIHB1YmxpYyBMZWFndWVEZXRhaWxzIGdldExlYWd1ZShTdHJpbmcgbGVhZ3VlSWQpIHsKICAgICAgICAgLy9EZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBnZXRMZWFndWUiKTsKICAgICAgICAgTGVhZ3VlRGV0YWlscyBsZWFndWVEZXRhaWxzID0gbnVsbDsKQEAgLTM3OSw3ICszNzksNyBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBsZWFndWVEZXRhaWxzOwogICAgIH0KLSAKKwogICAgIC8vIFNlc3Npb25CZWFuIG1ldGhvZHMKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsKICAgICAgICAgLy9EZWJ1Zy5wcmludCgiUm9zdGVyQmVhbiBlamJDcmVhdGUiKTsKQEAgLTQxMiw3ICs0MTIsNyBAQAogICAgIHB1YmxpYyBSb3N0ZXJCZWFuKCkge30KICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7fQogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7fQotIAorCiAgICAgLy8gUHJpdmF0ZSBtZXRob2RzCiAgICAgcHJpdmF0ZSBMb2NhbFBsYXllckhvbWUgbG9va3VwUGxheWVyKCkgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbiB7CiAgICAgICAgIENvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3MxL2VqYi9UZWFtQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3MxL2VqYi9UZWFtQmVhbi5qYXZhCmluZGV4IGU0NTYyYjMuLjU1YzIwZmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RyZXNzMS9lamIvVGVhbUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzczEvZWpiL1RlYW1CZWFuLmphdmEKQEAgLTMwLDcgKzMwLDcgQEAKIAogICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0VGVhbUlkKCk7CiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0VGVhbUlkKFN0cmluZyBpZCk7Ci0gICAgCisKICAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldE5hbWUoKTsKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKTsKIApAQCAtOTUsMzAgKzk1LDMwIEBACiAgICAgICAgIHNldENpdHkoY2l0eSk7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KLSAgICAgICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUG9zdENyZWF0ZSAoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgU3RyaW5nIGNpdHkpCiAgICAgICAgIHRocm93cyBDcmVhdGVFeGNlcHRpb24geyB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRFbnRpdHlDb250ZXh0KEVudGl0eUNvbnRleHQgY3R4KSB7CiAgICAgICAgIGNvbnRleHQgPSBjdHg7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgdW5zZXRFbnRpdHlDb250ZXh0KCkgewogICAgICAgICBjb250ZXh0ID0gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7CiAgICAgICAgIC8vRGVidWcucHJpbnQoIlRlYW1CZWFuIGVqYlJlbW92ZSIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7CiAgICAgICAgIC8vRGVidWcucHJpbnQoIlRlYW1CZWFuIGVqYkxvYWQiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJTdG9yZSgpIHsKICAgICAgICAgLy9EZWJ1Zy5wcmludCgiVGVhbUJlYW4gZWpiU3RvcmUiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7IH0KICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3MxL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3RyZXNzMS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggODQxNDc3MC4uYmYwYTg0ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zdHJlc3MxL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N0cmVzczEvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0zLDM1ICszLDM1IEBACiBEUk9QIFRBQkxFIFRlYW07CiBEUk9QIFRBQkxFIExlYWd1ZTsKIAotQ1JFQVRFIFRBQkxFIFBsYXllciAKK0NSRUFURSBUQUJMRSBQbGF5ZXIKICgKLQlwbGF5ZXJfSWQgVkFSQ0hBUigyNTUpIFBSSU1BUlkgS0VZLCAKLQluYW1lIFZBUkNIQVIoMjU1KSAsIAotCXBvc2l0aW9uIFZBUkNIQVIoMjU1KSAsIAotCXNhbGFyeSBET1VCTEUgUFJFQ0lTSU9OIE5PVCBOVUxMCisgICAgcGxheWVyX0lkIFZBUkNIQVIoMjU1KSBQUklNQVJZIEtFWSwKKyAgICBuYW1lIFZBUkNIQVIoMjU1KSAsCisgICAgcG9zaXRpb24gVkFSQ0hBUigyNTUpICwKKyAgICBzYWxhcnkgRE9VQkxFIFBSRUNJU0lPTiBOT1QgTlVMTAogKTsKIAotQ1JFQVRFIFRBQkxFIExlYWd1ZSAKK0NSRUFURSBUQUJMRSBMZWFndWUKICgKLQlsZWFndWVfSWQgVkFSQ0hBUigyNTUpIFBSSU1BUlkgS0VZLCAKLQluYW1lIFZBUkNIQVIoMjU1KSAsIAotCXNwb3J0IFZBUkNIQVIoMjU1KQorICAgIGxlYWd1ZV9JZCBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVksCisgICAgbmFtZSBWQVJDSEFSKDI1NSkgLAorICAgIHNwb3J0IFZBUkNIQVIoMjU1KQogKTsKIAotQ1JFQVRFIFRBQkxFIFRlYW0gCitDUkVBVEUgVEFCTEUgVGVhbQogKAotCXRlYW1fSWQgVkFSQ0hBUigyNTUpIFBSSU1BUlkgS0VZLCAKLQljaXR5IFZBUkNIQVIoMjU1KSAsIAotCW5hbWUgVkFSQ0hBUigyNTUpICwKLQlsZWFndWVfSWQgVkFSQ0hBUigyNTUpICwKLQlGT1JFSUdOIEtFWSAobGVhZ3VlX0lkKSAgIFJFRkVSRU5DRVMgTGVhZ3VlIChsZWFndWVfSWQpCisgICAgdGVhbV9JZCBWQVJDSEFSKDI1NSkgUFJJTUFSWSBLRVksCisgICAgY2l0eSBWQVJDSEFSKDI1NSkgLAorICAgIG5hbWUgVkFSQ0hBUigyNTUpICwKKyAgICBsZWFndWVfSWQgVkFSQ0hBUigyNTUpICwKKyAgICBGT1JFSUdOIEtFWSAobGVhZ3VlX0lkKSAgIFJFRkVSRU5DRVMgTGVhZ3VlIChsZWFndWVfSWQpCiApOwogCi1DUkVBVEUgVEFCTEUgVGVhbVBsYXllciAKK0NSRUFURSBUQUJMRSBUZWFtUGxheWVyCiAoCi0JcGxheWVyX0lkIFZBUkNIQVIoMjU1KSAsIAotICAgICAgICB0ZWFtX0lkIFZBUkNIQVIoMjU1KSwgCisgICAgcGxheWVyX0lkIFZBUkNIQVIoMjU1KSAsCisgICAgICAgIHRlYW1fSWQgVkFSQ0hBUigyNTUpLAogICAgICAgICBDT05TVFJBSU5UIHBrX1RlYW1QbGF5ZXIgUFJJTUFSWSBLRVkgKHBsYXllcl9JZCAsIHRlYW1fSWQpICwKLQlGT1JFSUdOIEtFWSAodGVhbV9JZCkgICBSRUZFUkVOQ0VTIFRlYW0gKHRlYW1fSWQpLAotCUZPUkVJR04gS0VZIChwbGF5ZXJfSWQpICAgUkVGRVJFTkNFUyBQbGF5ZXIgKHBsYXllcl9JZCkKKyAgICBGT1JFSUdOIEtFWSAodGVhbV9JZCkgICBSRUZFUkVOQ0VTIFRlYW0gKHRlYW1fSWQpLAorICAgIEZPUkVJR04gS0VZIChwbGF5ZXJfSWQpICAgUkVGRVJFTkNFUyBQbGF5ZXIgKHBsYXllcl9JZCkKICk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N3aXRjaG9mZkFDQ2Nvbm5wb29saW5nL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N3aXRjaG9mZkFDQ2Nvbm5wb29saW5nL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYTNiYWIxZi4uMWMwOTk3NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zd2l0Y2hvZmZBQ0Njb25ucG9vbGluZy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3dpdGNob2ZmQUNDY29ubnBvb2xpbmcvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTQgKzE1LDE0IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzd2l0Y2hvZmZBQ0Njb25ucG9vbGluZyIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJvcmFjbGVkYi5wb3J0IiB2YWx1ZT0iMTUyMSIvPgogPHByb3BlcnR5IG5hbWU9Im9yYWNsZWRiLmhvc3QiIHZhbHVlPSJuYXRyYWouc2ZiYXkuc3VuLmNvbSIvPgogPHByb3BlcnR5IG5hbWU9Im9yYWNsZWRiLnNpZCIgdmFsdWU9ImRic21wbDEiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvc3dpdGNob2ZmQUNDY29ubnBvb2xpbmcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zd2l0Y2hvZmZBQ0Njb25ucG9vbGluZy9idWlsZC54bWwKaW5kZXggN2Y2YTU0MC4uYzhjYmIxZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zd2l0Y2hvZmZBQ0Njb25ucG9vbGluZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zd2l0Y2hvZmZBQ0Njb25ucG9vbGluZy9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjbGllbnQiLz4KQEAgLTQ0LDE3ICs0NCwxNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0JPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+CisgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2UtYXBwY2xpZW50amFyLWNvbW1vbiI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiCiAgICAgICAgICAgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiAvPgotCTxwYXJhbSBuYW1lPSJhcHBjbGllbnQuamFyIiAKLQl2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHBDbGllbnQuamFyIi8+CisgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5qYXIiCisgICAgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwQ2xpZW50LmphciIvPgogICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogPCEtLSBydW4gYXBwY2xpZW50IGluIEFwcFNlcnYgIC0tPgogPHRhcmdldCBuYW1lPSJteXJ1bmNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICA8ZWNobyBtZXNzYWdlPSJhcHBjbGllbnQgLWNsaWVudCAke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcENsaWVudC5qYXIgLW5hbWUgJHthcHBuYW1lfUNsaWVudCAtdGV4dGF1dGggLXVzZXIgajJlZSAtcGFzc3dvcmQgajJlZSAteG1sICR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy8ke2FkbWluLmRvbWFpbn0vY29uZmlnL2dsYXNzZmlzaC1hY2MueG1sICR7YXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3N9Ii8+CkBAIC04MSw5ICs4MSw5IEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0ibXlydW5jbGllbnQiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5zZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCSA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+CisgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL25vbnhhcmVzb3VyY2UiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCkBAIC05MSw3ICs5MSw3IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJqZGJjLWRlcmJ5LXBvb2wiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCi0JIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KKyAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMveGFyZXNvdXJjZSIvPgogICAgICAgICA8L2FudGNhbGw+CiAKQEAgLTk5LDcgKzk5LDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtZGVyYnkteGEtcG9vbCIvPgogICAgICAgICA8L2FudGNhbGw+CiAKLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy9zd2l0Y2hvZmZBQ0Njb25ucG9vbGluZy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N3aXRjaG9mZkFDQ2Nvbm5wb29saW5nL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA5NjA3NzFlLi40YmI2YWY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N3aXRjaG9mZkFDQ2Nvbm5wb29saW5nL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3N3aXRjaG9mZkFDQ2Nvbm5wb29saW5nL2NsaWVudC9DbGllbnQuamF2YQpAQCAtNDMsMjMgKzQzLDIzIEBACiAgKiBAYXV0aG9yIGtzaGl0aXoKICAqLwogcHVibGljIGNsYXNzIENsaWVudCB7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnQgPSAxMDsKICAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIHJvbGxiYWNrOwogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyB0YWJsZU5hbWUgPSAiQ09GRkVFIjsKLSAgICAKKwogICAgIC8vc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyB0ZXN0U3VpdGUgPSAic3dpdGNob2ZmQUNDY29ubnBvb2xpbmciOwogICAgIHByaXZhdGUgc3RhdGljIGludCB0ZXN0Q291bnQgPSAwOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1hBPWZhbHNlOwogCiAgICAgLyoqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgVW5wb29sZWRUZXN0ICovCiAgICAgcHVibGljIENsaWVudCgpIHsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIC8qKgogICAgICAqIEBwYXJhbSBhcmdzIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzCiAgICAgICovCkBAIC03Nyw5ICs3Nyw5IEBACiAgICAgICAgIHJ1blRlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHJ1blRlc3QoKSB7Ci0gICAgICAgIAorCiAgICAgICAgIC8vQ29ubmVjdGlvbiBvcGVuZWQgYW5kIGNsb3NlZCB3aXRoaW4gdHJhbnNhY3Rpb24KICAgICAgICAgLy9ub24teGEgcmVzb3VyY2UKICAgICAgICAgaXNYQSA9IGZhbHNlOwpAQCAtODcsOCArODcsOCBAQAogICAgICAgICAvL3hhIHJlc291cmNlCiAgICAgICAgIGlzWEEgPSB0cnVlOwogICAgICAgICB0ZXN0MSgiamRiYy94YXJlc291cmNlIik7Ci0gICAgICAgIAotICAgICAgICAvL0Nvbm5lY3Rpb24gb3BlbmVkIHdpdGhpbiB0cmFuc2FjdGlvbiAKKworICAgICAgICAvL0Nvbm5lY3Rpb24gb3BlbmVkIHdpdGhpbiB0cmFuc2FjdGlvbgogICAgICAgICAvL2J1dCBjbG9zZWQgYWZ0ZXIgdHJhbnNhY3Rpb24KICAgICAgICAgaXNYQSA9IGZhbHNlOwogICAgICAgICAvL25vbi14YSByZXNvdXJjZQpAQCAtOTYsNDcgKzk2LDQ3IEBACiAgICAgICAgIC8veGEgcmVzb3VyY2UKICAgICAgICAgaXNYQSA9IHRydWU7CiAgICAgICAgIHRlc3QyKCJqZGJjL3hhcmVzb3VyY2UiKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAvL1hBIGFuZCBOb24tWEEgcmVzb3VyY2Ugd2l0aGluIHNhbWUgdHJhbnNhY3Rpb24KICAgICAgICAgLy9ub24teGEgcmVzb3VyY2UgYW5kIHhhICByZXNvdXJjZSB0b2dldGhlcgogICAgICAgICB0ZXN0MygiamRiYy9ub254YXJlc291cmNlIiwgImpkYmMveGFyZXNvdXJjZSIpOwotICAgICAgIAotICAgICAgICB0ZXN0NCgiamRiYy9ub254YXJlc291cmNlIiwgImpkYmMveGFyZXNvdXJjZSIpOwkKKworICAgICAgICB0ZXN0NCgiamRiYy9ub254YXJlc291cmNlIiwgImpkYmMveGFyZXNvdXJjZSIpOwogICAgICAgICAvL29wZW5BbmRDbG9zZUNvbm5lY3Rpb24oImpkYmMvb3JhY2xleGEiLCA0MCk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIHRlc3QxKFN0cmluZyBkc05hbWUpIHsKICAgICAgICAgVXNlclRyYW5zYWN0aW9uIHV0ID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cChkc05hbWUpOwogICAgICAgICAgICAgcHJpbnRDb25uZWN0aW9uKGRzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBjcmVhdGVUYWJsZShkcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaW50IGNvdW50MSA9IGdldENvdW50KGRzKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY291bnQxIDogIiArIGNvdW50MSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgdXQgPSAoVXNlclRyYW5zYWN0aW9uKSBpYy5sb29rdXAoImphdmE6Y29tcC9Vc2VyVHJhbnNhY3Rpb24iKTsKICAgICAgICAgICAgIHV0LmJlZ2luKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgZm9yKGludCBpPTA7IGk8IGNvdW50OyBpKyspCiAgICAgICAgICAgICAgICAgaW5zZXJ0Um93KGRzKTsKICAgICAgICAgICAgIGlmKHJvbGxiYWNrKQogICAgICAgICAgICAgICAgIHV0LnJvbGxiYWNrKCk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgdXQuY29tbWl0KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaW50IGNvdW50Mj1nZXRDb3VudChkcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjb3VudDIgOiAiICsgY291bnQyKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpbnQgZGlmZiA9IGNvdW50MiAtIGNvdW50MTsKICAgICAgICAgICAgIGlmKCggZGlmZiA9PSBjb3VudCAmJiAhcm9sbGJhY2spIHx8IChkaWZmID09IDAgJiYgcm9sbGJhY2spKQogICAgICAgICAgICAgICAgIHByaW50U3RhdHVzKHRydWUpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHByaW50U3RhdHVzKGZhbHNlKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpewogICAgICAgICAgICAgcHJpbnRTdGF0dXMoZmFsc2UpOwogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTE1Miw5ICsxNTIsOSBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfTsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgdGVzdDIoU3RyaW5nIGRzTmFtZSkgewogICAgICAgICBVc2VyVHJhbnNhY3Rpb24gdXQgPSBudWxsOwogICAgICAgICB0cnkgewpAQCAtMTY0LDMyICsxNjQsMzIgQEAKICAgICAgICAgICAgIENvbm5lY3Rpb25bXSBjb247CiAKICAgICAgICAgICAgIGNyZWF0ZVRhYmxlKGRzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpbnQgY291bnQxID0gZ2V0Q291bnQoZHMpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjb3VudDEgOiAiICsgY291bnQxKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICB1dCA9IChVc2VyVHJhbnNhY3Rpb24pIGljLmxvb2t1cCgiamF2YTpjb21wL1VzZXJUcmFuc2FjdGlvbiIpOwogICAgICAgICAgICAgdXQuYmVnaW4oKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBjb24gPSBvcGVuQ29ubmVjdGlvbnMoZHNOYW1lLCBjb3VudCk7CiAgICAgICAgICAgICBpbnNlcnRSb3coY29uKTsKICAgICAgICAgICAgIGNsb3NlQ29ubmVjdGlvbnMoY29uLCBjb3VudCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYocm9sbGJhY2spCiAgICAgICAgICAgICAgICAgdXQucm9sbGJhY2soKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICB1dC5jb21taXQoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpbnQgY291bnQyPWdldENvdW50KGRzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNvdW50MiA6ICIgKyBjb3VudDIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGludCBkaWZmID0gY291bnQyIC0gY291bnQxOwogICAgICAgICAgICAgaWYoKCBkaWZmID09IGNvdW50ICYmICFyb2xsYmFjaykgfHwgKGRpZmYgPT0gMCAmJiByb2xsYmFjaykpCiAgICAgICAgICAgICAgICAgcHJpbnRTdGF0dXModHJ1ZSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcHJpbnRTdGF0dXMoZmFsc2UpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSl7CiAgICAgICAgICAgICBwcmludFN0YXR1cyhmYWxzZSk7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwpAQCAtMjA1LDY5ICsyMDUsNjkgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH07Ci0gICAgICAgIAorCiAgICAgfQotICAgIAotICAgIAorCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgdGVzdDQoU3RyaW5nIGRzTmFtZSwgU3RyaW5nIHhhRHNOYW1lKSB7CiAgICAgICAgIFVzZXJUcmFuc2FjdGlvbiB1dCA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoZHNOYW1lKTsKLQkgICAgRGF0YVNvdXJjZSB4YWRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cCh4YURzTmFtZSk7CisgICAgICAgIERhdGFTb3VyY2UgeGFkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoeGFEc05hbWUpOwogICAgICAgICAgICAgcHJpbnRDb25uZWN0aW9uKGRzKTsKICAgICAgICAgICAgIENvbm5lY3Rpb25bXSBjb247Ci0JICAgIENvbm5lY3Rpb25bXSB4YUNvbjsKKyAgICAgICAgQ29ubmVjdGlvbltdIHhhQ29uOwogCi0JICAgIGlzWEEgPSBmYWxzZTsKKyAgICAgICAgaXNYQSA9IGZhbHNlOwogICAgICAgICAgICAgY3JlYXRlVGFibGUoZHMpOwogICAgICAgICAgICAgaXNYQSA9IHRydWU7Ci0JICAgIGNyZWF0ZVRhYmxlKHhhZHMpOworICAgICAgICBjcmVhdGVUYWJsZSh4YWRzKTsKIAotCSAgICBpc1hBID0gZmFsc2U7CisgICAgICAgIGlzWEEgPSBmYWxzZTsKICAgICAgICAgICAgIGludCBjb3VudDEgPSBnZXRDb3VudChkcyk7Ci0JICAgIGlzWEEgPSB0cnVlOwotCSAgICBpbnQgeGFjb3VudDEgPSBnZXRDb3VudCh4YWRzKTsKKyAgICAgICAgaXNYQSA9IHRydWU7CisgICAgICAgIGludCB4YWNvdW50MSA9IGdldENvdW50KHhhZHMpOwogCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNvdW50MSA6ICIgKyBjb3VudDEgKyAiIHhhY291bnQxIDogIiArIHhhY291bnQxKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICB1dCA9IChVc2VyVHJhbnNhY3Rpb24pIGljLmxvb2t1cCgiamF2YTpjb21wL1VzZXJUcmFuc2FjdGlvbiIpOwogICAgICAgICAgICAgdXQuYmVnaW4oKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgY29uID0gb3BlbkNvbm5lY3Rpb25zKGRzTmFtZSwgY291bnQpOwotCSAgICB4YUNvbiA9IG9wZW5Db25uZWN0aW9ucyh4YURzTmFtZSwgMSk7Ci0JICAgIGlzWEEgPSBmYWxzZTsKLSAgICAgICAgICAgIGluc2VydFJvdyhjb24pOwotCSAgICBpc1hBID0gdHJ1ZTsKLQkgICAgaW5zZXJ0Um93KHhhQ29uKTsKIAotCSAgICBpc1hBID0gZmFsc2U7CisgICAgICAgICAgICBjb24gPSBvcGVuQ29ubmVjdGlvbnMoZHNOYW1lLCBjb3VudCk7CisgICAgICAgIHhhQ29uID0gb3BlbkNvbm5lY3Rpb25zKHhhRHNOYW1lLCAxKTsKKyAgICAgICAgaXNYQSA9IGZhbHNlOworICAgICAgICAgICAgaW5zZXJ0Um93KGNvbik7CisgICAgICAgIGlzWEEgPSB0cnVlOworICAgICAgICBpbnNlcnRSb3coeGFDb24pOworCisgICAgICAgIGlzWEEgPSBmYWxzZTsKICAgICAgICAgICAgIGNsb3NlQ29ubmVjdGlvbnMoY29uLCBjb3VudCk7CiAKLQkgICAgaXNYQSA9IHRydWU7Ci0JICAgIGNsb3NlQ29ubmVjdGlvbnMoeGFDb24sIDEpOwotICAgICAgICAgICAgCisgICAgICAgIGlzWEEgPSB0cnVlOworICAgICAgICBjbG9zZUNvbm5lY3Rpb25zKHhhQ29uLCAxKTsKKwogICAgICAgICAgICAgaWYocm9sbGJhY2spCiAgICAgICAgICAgICAgICAgdXQucm9sbGJhY2soKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICB1dC5jb21taXQoKTsKLSAgICAgICAgICAgIAotCSAgICBpc1hBID0gZmFsc2U7Ci0gICAgICAgICAgICBpbnQgY291bnQyPWdldENvdW50KGRzKTsKLQkgICAgaXNYQSA9IHRydWU7Ci0JICAgIGludCB4YWNvdW50MiA9IGdldENvdW50KHhhZHMpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNvdW50MiA6ICIgKyBjb3VudDIgKyAiIHhhY291bnQyIDogIiArIHhhY291bnQyKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaW50IGRpZmYgPSBjb3VudDIgLSBjb3VudDE7Ci0JICAgIGludCB4YWRpZmYgPSB4YWNvdW50MiAtIHhhY291bnQxOwogCi0gICAgICAgICAgICBpZigoKCBkaWZmID09IGNvdW50ICYmICFyb2xsYmFjaykgfHwgKGRpZmYgPT0gMCAmJiByb2xsYmFjaykpICYmIAotCQkJKCh4YWRpZmYgPT0gMSAmJiAhcm9sbGJhY2spIHx8ICh4YWRpZmYgPT0gMCAmJiByb2xsYmFjaykpKQorICAgICAgICBpc1hBID0gZmFsc2U7CisgICAgICAgICAgICBpbnQgY291bnQyPWdldENvdW50KGRzKTsKKyAgICAgICAgaXNYQSA9IHRydWU7CisgICAgICAgIGludCB4YWNvdW50MiA9IGdldENvdW50KHhhZHMpOworCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNvdW50MiA6ICIgKyBjb3VudDIgKyAiIHhhY291bnQyIDogIiArIHhhY291bnQyKTsKKworICAgICAgICAgICAgaW50IGRpZmYgPSBjb3VudDIgLSBjb3VudDE7CisgICAgICAgIGludCB4YWRpZmYgPSB4YWNvdW50MiAtIHhhY291bnQxOworCisgICAgICAgICAgICBpZigoKCBkaWZmID09IGNvdW50ICYmICFyb2xsYmFjaykgfHwgKGRpZmYgPT0gMCAmJiByb2xsYmFjaykpICYmCisgICAgICAgICAgICAoKHhhZGlmZiA9PSAxICYmICFyb2xsYmFjaykgfHwgKHhhZGlmZiA9PSAwICYmIHJvbGxiYWNrKSkpCiAgICAgICAgICAgICAgICAgcHJpbnRTdGF0dXModHJ1ZSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcHJpbnRTdGF0dXMoZmFsc2UpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSl7CiAgICAgICAgICAgICBwcmludFN0YXR1cyhmYWxzZSk7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwpAQCAtMjgzLDEwICsyODMsMTAgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH07Ci0gICAgICAgIAorCiAgICAgfQotICAgIAotICAgIAorCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgdGVzdDMoU3RyaW5nIGRzMU5hbWUsIFN0cmluZyBkczJOYW1lKSB7CiAgICAgICAgIFVzZXJUcmFuc2FjdGlvbiB1dCA9IG51bGw7CiAgICAgICAgIHRyeSB7CkBAIC0yOTUsNDIgKzI5NSw0MiBAQAogICAgICAgICAgICAgcHJpbnRDb25uZWN0aW9uKGRzMSk7CiAgICAgICAgICAgICBEYXRhU291cmNlIGRzMiA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoZHMyTmFtZSk7CiAgICAgICAgICAgICBwcmludENvbm5lY3Rpb24oZHMyKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpc1hBID0gZmFsc2U7CiAgICAgICAgICAgICBjcmVhdGVUYWJsZShkczEpOwogICAgICAgICAgICAgaXNYQSA9IHRydWU7CiAgICAgICAgICAgICBjcmVhdGVUYWJsZShkczIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlzWEEgPSBmYWxzZTsKICAgICAgICAgICAgIGludCBjb3VudDEgPSBnZXRDb3VudChkczEpOwogICAgICAgICAgICAgaXNYQSA9IHRydWU7CiAgICAgICAgICAgICBpbnQgY291bnQzID0gZ2V0Q291bnQoZHMyKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY291bnQxIDogIiArIGNvdW50MSk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNvdW50MyA6ICIgKyBjb3VudDMpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHV0ID0gKFVzZXJUcmFuc2FjdGlvbikgaWMubG9va3VwKCJqYXZhOmNvbXAvVXNlclRyYW5zYWN0aW9uIik7CiAgICAgICAgICAgICB1dC5iZWdpbigpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlzWEEgPSBmYWxzZTsKICAgICAgICAgICAgIGZvcihpbnQgaT0wOyBpPCBjb3VudDsgaSsrKQogICAgICAgICAgICAgICAgIGluc2VydFJvdyhkczEpOwogICAgICAgICAgICAgaXNYQSA9IHRydWU7CiAgICAgICAgICAgICBmb3IoaW50IGk9MDsgaTwgY291bnQ7IGkrKykKICAgICAgICAgICAgICAgICBpbnNlcnRSb3coZHMyKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZihyb2xsYmFjaykKICAgICAgICAgICAgICAgICB1dC5yb2xsYmFjaygpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHV0LmNvbW1pdCgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlzWEEgPSBmYWxzZTsKICAgICAgICAgICAgIGludCBjb3VudDI9Z2V0Q291bnQoZHMxKTsKICAgICAgICAgICAgIGlzWEEgPSB0cnVlOwogICAgICAgICAgICAgaW50IGNvdW50ND1nZXRDb3VudChkczIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY291bnQyIDogIiArIGNvdW50Mik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNvdW50NCA6ICIgKyBjb3VudDQpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGludCBkaWZmMSA9IGNvdW50MiAtIGNvdW50MTsKICAgICAgICAgICAgIGludCBkaWZmMiA9IGNvdW50NCAtIGNvdW50MzsKICAgICAgICAgICAgIGlmKCgoIGRpZmYxID09IGNvdW50ICYmICFyb2xsYmFjaykgfHwgKGRpZmYxID09IDAgJiYgcm9sbGJhY2spKQpAQCAtMzM4LDcgKzMzOCw3IEBACiAgICAgICAgICAgICAgICAgcHJpbnRTdGF0dXModHJ1ZSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcHJpbnRTdGF0dXMoZmFsc2UpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSl7CiAgICAgICAgICAgICBwcmludFN0YXR1cyhmYWxzZSk7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwpAQCAtMzU0LDIxICszNTQsMjEgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH07Ci0gICAgICAgIAorCiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBjcmVhdGVUYWJsZShmaW5hbCBEYXRhU291cmNlIGRzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgICAgU3RyaW5nIHRhYmxlTmFtZTsKICAgICAgICAgaWYoaXNYQSkKICAgICAgICAgICAgIHRhYmxlTmFtZSA9ICJDT0ZGRUVfWEEiOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICB0YWJsZU5hbWUgPSAiQ09GRkVFIjsKLSAgICAgICAgCisKICAgICAgICAgQ29ubmVjdGlvbiBjb247CiAgICAgICAgIFN0YXRlbWVudCBzdG10OwogICAgICAgICBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7CiAgICAgICAgIHN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeXsKICAgICAgICAgICAgIHN0bXQuZXhlY3V0ZVVwZGF0ZSgiZHJvcCB0YWJsZSAiICsgdGFibGVOYW1lKTsKICAgICAgICAgfWNhdGNoKEV4Y2VwdGlvbiBleCl7CkBAIC0zNzgsNyArMzc4LDcgQEAKICAgICAgICAgc3RtdC5jbG9zZSgpOwogICAgICAgICBjb24uY2xvc2UoKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgZ2V0Q291bnQoZmluYWwgRGF0YVNvdXJjZSBkcykgdGhyb3dzIFNRTEV4Y2VwdGlvbiB7CiAgICAgICAgIFN0cmluZyB0YWJsZU5hbWU7CiAgICAgICAgIGlmKGlzWEEpCkBAIC0zOTgsNyArMzk4LDcgQEAKICAgICAgICAgY29uLmNsb3NlKCk7CiAgICAgICAgIHJldHVybiBjb3VudDsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGluc2VydFJvdyhmaW5hbCBEYXRhU291cmNlIGRzKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKICAgICAgICAgU3RyaW5nIHRhYmxlTmFtZTsKICAgICAgICAgaWYoaXNYQSkKQEAgLTQxMyw3ICs0MTMsNyBAQAogICAgICAgICBzdG10LmNsb3NlKCk7CiAgICAgICAgIGNvbi5jbG9zZSgpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIHZvaWQgaW5zZXJ0Um93KGZpbmFsIENvbm5lY3Rpb25bXSBjb24pIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgICBTdHJpbmcgdGFibGVOYW1lOwogICAgICAgICBpZihpc1hBKQpAQCAtNDI0LDEwOCArNDI0LDEwOCBAQAogICAgICAgICBmb3IoaW50IGk9MDsgaSA8IGNvbi5sZW5ndGg7IGkrKyl7CiAgICAgICAgICAgICBzdG10ID0gY29uW2ldLmNyZWF0ZVN0YXRlbWVudCgpOwogICAgICAgICAgICAgc3RtdC5leGVjdXRlVXBkYXRlKCJJTlNFUlQgSU5UTyAiICsgdGFibGVOYW1lICsgIiB2YWx1ZXMgKCdDT0ZGRUUnLCAxMDApIik7Ci0JICAgIHN0bXQuY2xvc2UoKTsKKyAgICAgICAgc3RtdC5jbG9zZSgpOwogICAgICAgICB9CiAgICAgfQotICAgIAotICAgCisKKwogICAgIHByaXZhdGUgc3RhdGljIHZvaWQgcHJpbnRDb25uZWN0aW9uKGZpbmFsIERhdGFTb3VyY2UgZHMpIHRocm93cyBTUUxFeGNlcHRpb257CiAgICAgICAgIGNvbS5zdW4uYXBwc2Vydi5qZGJjLkRhdGFTb3VyY2UgZHNUeXBlZCA9IChjb20uc3VuLmFwcHNlcnYuamRiYy5EYXRhU291cmNlKSBkczsKICAgICAgICAgQ29ubmVjdGlvbiB3cmFwcGVyID0gZHNUeXBlZC5nZXRDb25uZWN0aW9uKCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGlvbiB0eXBlIDogIiArIGRzVHlwZWQuZ2V0Q29ubmVjdGlvbih3cmFwcGVyKSk7CiAgICAgICAgIHdyYXBwZXIuY2xvc2UoKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIG9wZW5BbmRDbG9zZUNvbm5lY3Rpb24oU3RyaW5nIGRzTmFtZSwgaW50IGNvdW50KSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoZHNOYW1lKTsKICAgICAgICAgICAgIGNvbS5zdW4uYXBwc2Vydi5qZGJjLkRhdGFTb3VyY2UgZHNUeXBlZCA9IChjb20uc3VuLmFwcHNlcnYuamRiYy5EYXRhU291cmNlKSBkczsKLQkgICAgSGFzaFNldDxTdHJpbmc+IGNvbm5lY3Rpb25zID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOworICAgICAgICBIYXNoU2V0PFN0cmluZz4gY29ubmVjdGlvbnMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CiAgICAgICAgICAgICBDb25uZWN0aW9uIGNvbjsKLQkgICAgU3RyaW5nIGNvblR5cGU7Ci0JICAgIGJvb2xlYW4gc3RhdHVzID0gdHJ1ZTsKLQkgICAgaW50IGkgPSAwOworICAgICAgICBTdHJpbmcgY29uVHlwZTsKKyAgICAgICAgYm9vbGVhbiBzdGF0dXMgPSB0cnVlOworICAgICAgICBpbnQgaSA9IDA7CiAgICAgICAgICAgICBmb3IoOyBpIDwgY291bnQ7IGkrKyl7CiAgICAgICAgICAgICAgICAgY29uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCQljb25UeXBlID0gZHNUeXBlZC5nZXRDb25uZWN0aW9uKGNvbikudG9TdHJpbmcoKTsKLSAgICAgICAgCVN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGlvbiB0eXBlIDogIiArIGNvblR5cGUpOworICAgICAgICBjb25UeXBlID0gZHNUeXBlZC5nZXRDb25uZWN0aW9uKGNvbikudG9TdHJpbmcoKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGlvbiB0eXBlIDogIiArIGNvblR5cGUpOwogICAgICAgICAgICAgICAgIGNvbi5jbG9zZSgpOwotCQlpZighY29ubmVjdGlvbnMuYWRkKGNvblR5cGUpKXsKLQkJCXN0YXR1cyA9IGZhbHNlOwotCQkJYnJlYWs7Ci0JCX0KKyAgICAgICAgaWYoIWNvbm5lY3Rpb25zLmFkZChjb25UeXBlKSl7CisgICAgICAgICAgICBzdGF0dXMgPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRvdGFsIGNvbm5lY3Rpb24gcmVxdWVzdGVkIDogICIgKyBjb3VudCk7Ci0gICAgICAgCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRvdGFsIGNvbm5lY3Rpb24gY3JlYXRlZCA6ICAiICsgaSk7Ci0gICAgICAgCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRvdGFsIG51bWJlciBvZiB1bmlxdWUgY29ubmVjdGlvbiA6ICAiICsgY29ubmVjdGlvbnMuc2l6ZSgpKTsKLQkgICAgcHJpbnRTdGF0dXMoc3RhdHVzKTsKKyAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVG90YWwgY29ubmVjdGlvbiByZXF1ZXN0ZWQgOiAgIiArIGNvdW50KTsKKyAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVG90YWwgY29ubmVjdGlvbiBjcmVhdGVkIDogICIgKyBpKTsKKyAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVG90YWwgbnVtYmVyIG9mIHVuaXF1ZSBjb25uZWN0aW9uIDogICIgKyBjb25uZWN0aW9ucy5zaXplKCkpOworICAgICAgICBwcmludFN0YXR1cyhzdGF0dXMpOwogICAgICAgICB9Y2F0Y2goRXhjZXB0aW9uIGV4KXsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBvcGVuTWF4Q29ubmVjdGlvbnMoU3RyaW5nIGRzTmFtZSwgaW50IGNvdW50KSB7CiAgICAgICAgIERhdGFTb3VyY2UgZHMgPSBudWxsOwotCXRyeXsKLSAgICAgICAgCUluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JCWRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cChkc05hbWUpOwotCX1jYXRjaChOYW1pbmdFeGNlcHRpb24gZXgpewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlVuYWJsZSB0byBsb29rdXAgZGF0YXNvdXJjZSIpOwotCQlleC5wcmludFN0YWNrVHJhY2UoKTsKLQkJcmV0dXJuOwotCX0KLSAgICAgICAgCi0gICAgICAgIENvbm5lY3Rpb25bXSBjb24gPSBuZXcgQ29ubmVjdGlvbltjb3VudF07Ci0JaW50IGkgPSAwOwotICAgICAgICBmb3IoOyBpIDwgY291bnQ7IGkrKyl7Ci0JICAgdHJ5ewotICAgICAgICAgICAJY29uW2ldID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCSAgIH1jYXRjaChTUUxFeGNlcHRpb24gZXgpewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlVuYWJsZSB0byBjcmVhdGUgbWF4IGNvbm5lY3Rpb25zIik7Ci0JCXByaW50U3RhdHVzKGZhbHNlKTsJCi0JICAgfQotCX0KKyAgICB0cnl7CisgICAgICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgICAgICBkcyA9IChEYXRhU291cmNlKSBpYy5sb29rdXAoZHNOYW1lKTsKKyAgICB9Y2F0Y2goTmFtaW5nRXhjZXB0aW9uIGV4KXsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmFibGUgdG8gbG9va3VwIGRhdGFzb3VyY2UiKTsKKyAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLQlpZihpID09ICBjb3VudCl7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQWJsZSB0byBjcmVhdGUgbWF4IGNvbm5lY3Rpb25zIik7Ci0JCXByaW50U3RhdHVzKHRydWUpOwkKLQkJdHJ5ewotCQkJZHMuZ2V0Q29ubmVjdGlvbigpOwotICAgICAgICAgICAgICAgIAlTeXN0ZW0ub3V0LnByaW50bG4oIkFibGUgdG8gY3JlYXRlIGJleW9uZCBtYXggY29ubmVjdGlvbnMiKTsKLSAgICAgICAgICAgICAgICAJcHJpbnRTdGF0dXMoZmFsc2UpOwotCQl9Y2F0Y2goU1FMRXhjZXB0aW9uIGV4KXsKLSAgICAgICAgICAgICAgICAJU3lzdGVtLm91dC5wcmludGxuKCJVbmFibGUgdG8gY3JlYXRlIGJleW9uZCBtYXggY29ubmVjdGlvbnMiKTsKLSAgICAgICAgICAgICAgICAJcHJpbnRTdGF0dXModHJ1ZSk7Ci0gICAgICAgICAgIAl9Ci0JfQotICAgICAgICAKKyAgICAgICAgQ29ubmVjdGlvbltdIGNvbiA9IG5ldyBDb25uZWN0aW9uW2NvdW50XTsKKyAgICBpbnQgaSA9IDA7CisgICAgICAgIGZvcig7IGkgPCBjb3VudDsgaSsrKXsKKyAgICAgICB0cnl7CisgICAgICAgICAgICAgICBjb25baV0gPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgfWNhdGNoKFNRTEV4Y2VwdGlvbiBleCl7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5hYmxlIHRvIGNyZWF0ZSBtYXggY29ubmVjdGlvbnMiKTsKKyAgICAgICAgcHJpbnRTdGF0dXMoZmFsc2UpOworICAgICAgIH0KKyAgICB9CisKKyAgICBpZihpID09ICBjb3VudCl7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWJsZSB0byBjcmVhdGUgbWF4IGNvbm5lY3Rpb25zIik7CisgICAgICAgIHByaW50U3RhdHVzKHRydWUpOworICAgICAgICB0cnl7CisgICAgICAgICAgICBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWJsZSB0byBjcmVhdGUgYmV5b25kIG1heCBjb25uZWN0aW9ucyIpOworICAgICAgICAgICAgICAgICAgICBwcmludFN0YXR1cyhmYWxzZSk7CisgICAgICAgIH1jYXRjaChTUUxFeGNlcHRpb24gZXgpeworICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuYWJsZSB0byBjcmVhdGUgYmV5b25kIG1heCBjb25uZWN0aW9ucyIpOworICAgICAgICAgICAgICAgICAgICBwcmludFN0YXR1cyh0cnVlKTsKKyAgICAgICAgICAgICAgIH0KKyAgICB9CisKICAgICAgICAgZm9yKDsgaSA+IDA7IGktLSl7Ci0JICAgdHJ5ewotICAgICAgICAgICAgCWNvbltpIC0gMV0uY2xvc2UoKTsKLQkgICB9Y2F0Y2goU1FMRXhjZXB0aW9uIGV4KXsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJVbmFibGUgdG8gY2xvc2UgY29ubmVjdGlvbiIpOwotCSAgIH0KLQl9CisgICAgICAgdHJ5eworICAgICAgICAgICAgICAgIGNvbltpIC0gMV0uY2xvc2UoKTsKKyAgICAgICB9Y2F0Y2goU1FMRXhjZXB0aW9uIGV4KXsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmFibGUgdG8gY2xvc2UgY29ubmVjdGlvbiIpOworICAgICAgIH0KKyAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSBzdGF0aWMgQ29ubmVjdGlvbltdIG9wZW5Db25uZWN0aW9ucyhTdHJpbmcgZHNOYW1lLCBpbnQgY291bnQpIHRocm93cyBOYW1pbmdFeGNlcHRpb24sIFNRTEV4Y2VwdGlvbiB7CiAgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSkgaWMubG9va3VwKGRzTmFtZSk7Ci0gICAgICAgIAorCiAgICAgICAgIENvbm5lY3Rpb25bXSBjb24gPSBuZXcgQ29ubmVjdGlvbltjb3VudF07CiAgICAgICAgIGZvcihpbnQgaT0wOyBpIDwgY291bnQ7IGkrKykgewogICAgICAgICAgICAgY29uW2ldID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNvblsiICsgaSsgIl09IiArIGNvbltpXSk7Ci0JfQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNvblsiICsgaSsgIl09IiArIGNvbltpXSk7CisgICAgfQogICAgICAgICByZXR1cm4gY29uOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIHZvaWQgY2xvc2VDb25uZWN0aW9ucyhDb25uZWN0aW9uW10gY29uLCBpbnQgY291bnQpIHRocm93cyBTUUxFeGNlcHRpb24gewogICAgICAgICBmb3IoaW50IGk9MDsgaSA8IGNvdW50OyBpKyspCiAgICAgICAgICAgICBjb25baV0uY2xvc2UoKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHByaW50U3RhdHVzKGJvb2xlYW4gc3RhdHVzKXsKICAgICAgICAgU3RyaW5nIHRlc3RjYXNlSUQgPSB0ZXN0U3VpdGUgKyAiLXRlc3QiICsgKCsrdGVzdENvdW50KSA7CiAgICAgICAgIGlmKHN0YXR1cyl7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYWNpbmdzcWwvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhY2luZ3NxbC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGU1ZmM0N2UuLjhhZjc0NDMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhY2luZ3NxbC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhY2luZ3NxbC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOSArMTUsMTkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYi1ibXAtdHJhY2luZ3NxbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iMTIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhY2luZ3NxbC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYWNpbmdzcWwvYnVpbGQueG1sCmluZGV4IDBkYzJkNzMuLmY2Zjk2YjkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhY2luZ3NxbC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFjaW5nc3FsL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDUsMTUgKzQ1LDE1IEBACiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjbGllbnQiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJsb2dnZXIiLz4KKyAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ibG9nZ2VyIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi9TaW1wbGVCTVAuY2xhc3MsICoqL1NpbXBsZUJNUEhvbWUuY2xhc3MsKiovKkNsaWVudCouY2xhc3MiIC8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8amFyIGphcmZpbGU9IiR7c3FsLXRyYWNlLWxpc3RlbmVyLWphcn0iIHVwZGF0ZT0idHJ1ZSI+CkBAIC02NCw4ICs2NCw4IEBACiAgICAgICA8Y29weWZpbGUgc3JjPSIke3NxbC10cmFjZS1saXN0ZW5lci1qYXJ9IgogICAgICAgICAgICAgZGVzdD0iJHtlbnYuUzFBU19IT01FfS9saWIvc3FsLXRyYWNlLWxpc3RlbmVyLmphciIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXNlcnZlciIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgpAQCAtOTMsMTAgKzkzLDEwIEBACiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgotICAgICAgICAKKwogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCkBAIC0xMTEsNyArMTExLDcgQEAKICAgICAgIDwhLS0gVG8gY2hlY2sgcmVjb25maWd1cmF0aW9uIG9mIFNRTCBUcmFjZSBsaXN0ZW5lcnMgLS0+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCIvPgpAQCAtMTI1LDExICsxMjUsMTEgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1jb25ucG9vbC1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iJHt0cmFjaW5nc3FsLXBvb2xuYW1lfSIvPgogICAgICAgICA8L2FudGNhbGw+Ci0JPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLQk8ZGVsZXRlIGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vbGliL3NxbC10cmFjZS1saXN0ZW5lci5qYXIiLz4KLQk8ZGVsZXRlIGZpbGU9IiR7c3FsLXRyYWNlLWxpc3RlbmVyLWphcn0iLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQtc2VydmVyIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KKyAgICA8ZGVsZXRlIGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vbGliL3NxbC10cmFjZS1saXN0ZW5lci5qYXIiLz4KKyAgICA8ZGVsZXRlIGZpbGU9IiR7c3FsLXRyYWNlLWxpc3RlbmVyLWphcn0iLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQtc2VydmVyIi8+CisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhY2luZ3NxbC9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYWNpbmdzcWwvY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhCmluZGV4IGNlYmMwNGQuLjE5ODUwMmUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhY2luZ3NxbC9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFjaW5nc3FsL2NsaWVudC9TaW1wbGVCTVBDbGllbnQuamF2YQpAQCAtMjksMzQgKzI5LDM0IEBACiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKLSAJU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCk7Ci0JU3RyaW5nIHRlc3RTdWl0ZSA9ICJTcWxUcmFjaW5nICI7CisgICAgIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOworICAgIFN0cmluZyB0ZXN0U3VpdGUgPSAiU3FsVHJhY2luZyAiOwogCiAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICBPYmplY3Qgb2JqUmVmID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVCTVBIb21lIik7Ci0JU2ltcGxlQk1QSG9tZSBzaW1wbGVCTVBIb21lID0gKFNpbXBsZUJNUEhvbWUpCisgICAgU2ltcGxlQk1QSG9tZSBzaW1wbGVCTVBIb21lID0gKFNpbXBsZUJNUEhvbWUpCiAgICAgamF2YXgucm1pLlBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpSZWYsIFNpbXBsZUJNUEhvbWUuY2xhc3MpOwogCiAgICAgU2ltcGxlQk1QIHNpbXBsZUJNUCA9IHNpbXBsZUJNUEhvbWUuY3JlYXRlKCk7CiAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiSkRCQyBTcWwgVHJhY2luZyBUZXN0cyIpOwogCiAgICAgLyppZiAoIHNpbXBsZUJNUC5zdGF0ZW1lbnRUZXN0KCkgKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsiIHN0YXRlbWVudFRlc3QgOiAiLCBzdGF0LlBBU1MpOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsiIHN0YXRlbWVudFRlc3QgOiAiLCBzdGF0LkZBSUwpOwotCX0qLworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIiBzdGF0ZW1lbnRUZXN0IDogIiwgc3RhdC5QQVNTKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIiBzdGF0ZW1lbnRUZXN0IDogIiwgc3RhdC5GQUlMKTsKKyAgICB9Ki8KIAotCWlmICggc2ltcGxlQk1QLnByZXBhcmVkU3RhdGVtZW50VGVzdCgpICkgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIiBwcmVwYXJlZFN0YXRlbWVudFRlc3QgOiAiLCBzdGF0LlBBU1MpOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsiIHByZXBhcmVkU3RhdGVtZW50VGVzdCA6ICIsIHN0YXQuRkFJTCk7Ci0JfQorICAgIGlmICggc2ltcGxlQk1QLnByZXBhcmVkU3RhdGVtZW50VGVzdCgpICkgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIiBwcmVwYXJlZFN0YXRlbWVudFRlc3QgOiAiLCBzdGF0LlBBU1MpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsiIHByZXBhcmVkU3RhdGVtZW50VGVzdCA6ICIsIHN0YXQuRkFJTCk7CisgICAgfQogCi0JaWYoIHNpbXBsZUJNUC5jb21wYXJlUmVjb3JkcygpKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsiIFNxbCBUcmFjaW5nIFRlc3QgOiAiLCBzdGF0LlBBU1MpOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsiIFNxbCBUcmFjaW5nIFRlc3QgOiAiLCBzdGF0LkZBSUwpOwotCX0KKyAgICBpZiggc2ltcGxlQk1QLmNvbXBhcmVSZWNvcmRzKCkpIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyIgU3FsIFRyYWNpbmcgVGVzdCA6ICIsIHN0YXQuUEFTUyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyIgU3FsIFRyYWNpbmcgVGVzdCA6ICIsIHN0YXQuRkFJTCk7CisgICAgfQogICAgIC8qaWYgKCBzaW1wbGVCTVAuY2FsbGFibGVTdGF0ZW1lbnRUZXN0KCkgKSB7CiAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsiIGNhbGxhYmxlU3RhdGVtZW50VGVzdCA6ICIsIHN0YXQuUEFTUyk7CiAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhY2luZ3NxbC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFjaW5nc3FsL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggMjYwZWViNy4uMGE4YjA5MiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFjaW5nc3FsL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFjaW5nc3FsL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTYzLDYgKzYzLDYgQEAKICAgICAgIDx0cmFucy1hdHRyaWJ1dGU+UmVxdWlyZWQ8L3RyYW5zLWF0dHJpYnV0ZT4KICAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgPC9hc3NlbWJseS1kZXNjcmlwdG9yPgotICAgICAgCisKIDwvZWpiLWphcj4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFjaW5nc3FsL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFjaW5nc3FsL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCmluZGV4IDY5M2ZkOGIuLjY0MjUzMjUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhY2luZ3NxbC9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYWNpbmdzcWwvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKQEAgLTM1LDcgKzM1LDcgQEAKICAgICAgIDwvcmVzb3VyY2UtcmVmPgogICAgICAgPHJlc291cmNlLXJlZj4KICAgICAgICAgPHJlcy1yZWYtbmFtZT5UcmFjaW5nRGF0YVNvdXJjZTwvcmVzLXJlZi1uYW1lPgotCTxqbmRpLW5hbWU+amRiYy90cmFjaW5nc3FsLXJlczwvam5kaS1uYW1lPgorICAgIDxqbmRpLW5hbWU+amRiYy90cmFjaW5nc3FsLXJlczwvam5kaS1uYW1lPgogICAgICAgICA8ZGVmYXVsdC1yZXNvdXJjZS1wcmluY2lwYWw+CiAgICAgICAgICAgICA8bmFtZT5EQlVTRVI8L25hbWU+CiAgICAgICAgICAgICA8cGFzc3dvcmQ+REJQQVNTV09SRDwvcGFzc3dvcmQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYWNpbmdzcWwvZWpiL1NpbXBsZUJNUEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhY2luZ3NxbC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCmluZGV4IDA0MDg4MWYuLmFiNGNiNjggMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhY2luZ3NxbC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhY2luZ3NxbC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCkBAIC0yOSwxOSArMjksMTkgQEAKICAgICBwcm90ZWN0ZWQgRGF0YVNvdXJjZSB0cmFjaW5nZHM7CiAKICAgICBwdWJsaWMgdm9pZCBzZXRFbnRpdHlDb250ZXh0KEVudGl0eUNvbnRleHQgZW50aXR5Q29udGV4dCkgewotCUNvbnRleHQgY29udGV4dCA9IG51bGw7Ci0JdHJ5IHsKLQkgICAgY29udGV4dCAgICA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCSAgICBkcyA9IChEYXRhU291cmNlKSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7Ci0JICAgIHRyYWNpbmdkcyA9IChEYXRhU291cmNlKSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9UcmFjaW5nRGF0YVNvdXJjZSIpOwotCX0gY2F0Y2ggKE5hbWluZ0V4Y2VwdGlvbiBlKSB7Ci0JICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImNhbnQgZmluZCBkYXRhc291cmNlIik7Ci0JfQorICAgIENvbnRleHQgY29udGV4dCA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgY29udGV4dCAgICA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgICAgICBkcyA9IChEYXRhU291cmNlKSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7CisgICAgICAgIHRyYWNpbmdkcyA9IChEYXRhU291cmNlKSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9UcmFjaW5nRGF0YVNvdXJjZSIpOworICAgIH0gY2F0Y2ggKE5hbWluZ0V4Y2VwdGlvbiBlKSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImNhbnQgZmluZCBkYXRhc291cmNlIik7CisgICAgfQogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlsqKlNpbXBsZUJNUEJlYW4qKl0gRG9uZSB3aXRoIHNldEVudGl0eUNvbnRleHQuLi4uIik7CiAgICAgfQogCiAgICAgcHVibGljIEludGVnZXIgZWpiQ3JlYXRlKCkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7Ci0JICAgIHJldHVybiBuZXcgSW50ZWdlcigxKTsKKyAgICAgICAgcmV0dXJuIG5ldyBJbnRlZ2VyKDEpOwogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIHN0YXRlbWVudFRlc3QoKSB7CkBAIC01NCw4ICs1NCw4IEBACiAgICAgICAgICAgICBzdG10ID0gY29uRnJvbURTLmNyZWF0ZVN0YXRlbWVudCgpOwogICAgICAgICAgICAgY29uRnJvbVN0YXRlbWVudCA9IHN0bXQuZ2V0Q29ubmVjdGlvbigpOwogCi0JCVN5c3RlbS5vdXQucHJpbnRsbigic3RhdGVtZW50IFRlc3QgOiBjb25Gcm9tRFMgOiAiICsgY29uRnJvbURTKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJzdGF0ZW1lbnQgVGVzdCA6IGNvbkZyb21TdGF0ZW1lbnQgOiAiICsgY29uRnJvbVN0YXRlbWVudCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigic3RhdGVtZW50IFRlc3QgOiBjb25Gcm9tRFMgOiAiICsgY29uRnJvbURTKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJzdGF0ZW1lbnQgVGVzdCA6IGNvbkZyb21TdGF0ZW1lbnQgOiAiICsgY29uRnJvbVN0YXRlbWVudCk7CiAKICAgICAgICAgICAgIGlmKCBjb25Gcm9tRFM9PWNvbkZyb21TdGF0ZW1lbnQgfHwgY29uRnJvbURTLmVxdWFscyhjb25Gcm9tU3RhdGVtZW50KSApewogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CkBAIC0xNDYsOCArMTQ2LDggQEAKICAgICAgICAgICAgIHN0bXQgPSBjb25Gcm9tRFMucHJlcGFyZUNhbGwoInNlbGVjdCAqIGZyb20gY3VzdG9tZXJfc3RtdF93cmFwcGVyIik7CiAgICAgICAgICAgICBjb25Gcm9tU3RhdGVtZW50ID0gc3RtdC5nZXRDb25uZWN0aW9uKCk7CiAKLQkJU3lzdGVtLm91dC5wcmludGxuKCJDYWxsYWJsZSBzdGF0ZW1lbnQgVGVzdCA6IGNvbkZyb21EUyA6ICIgKyBjb25Gcm9tRFMpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxhYmxlIHN0YXRlbWVudCBUZXN0IDogY29uRnJvbVN0YXRlbWVudCA6ICIgKyBjb25Gcm9tU3RhdGVtZW50KTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYWxsYWJsZSBzdGF0ZW1lbnQgVGVzdCA6IGNvbkZyb21EUyA6ICIgKyBjb25Gcm9tRFMpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxhYmxlIHN0YXRlbWVudCBUZXN0IDogY29uRnJvbVN0YXRlbWVudCA6ICIgKyBjb25Gcm9tU3RhdGVtZW50KTsKICAgICAgICAgICAgIGlmKCBjb25Gcm9tRFM9PWNvbkZyb21TdGF0ZW1lbnQgfHwgY29uRnJvbURTLmVxdWFscyhjb25Gcm9tU3RhdGVtZW50KSApewogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CiAgICAgICAgICAgICB9CkBAIC0xNzcsOCArMTc3LDggQEAKICAgICAgICAgICAgIGRibWQgPSBjb25Gcm9tRFMuZ2V0TWV0YURhdGEoKTsKICAgICAgICAgICAgIGNvbkZyb21NZXRhRGF0YSA9IGRibWQuZ2V0Q29ubmVjdGlvbigpOwogCi0JCVN5c3RlbS5vdXQucHJpbnRsbigic3RhdGVtZW50VGVzdCA6IGNvbkZyb21EUyA6ICIgKyBjb25Gcm9tRFMpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oInN0YXRlbWVudFRlc3QgOiBjb25Gcm9tRGJNZXRhZGF0YSA6ICIgKyBjb25Gcm9tTWV0YURhdGEpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInN0YXRlbWVudFRlc3QgOiBjb25Gcm9tRFMgOiAiICsgY29uRnJvbURTKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJzdGF0ZW1lbnRUZXN0IDogY29uRnJvbURiTWV0YWRhdGEgOiAiICsgY29uRnJvbU1ldGFEYXRhKTsKICAgICAgICAgICAgIGlmKCBjb25Gcm9tRFM9PWNvbkZyb21NZXRhRGF0YSB8fCBjb25Gcm9tRFMuZXF1YWxzKGNvbkZyb21NZXRhRGF0YSkgKXsKICAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlOwogICAgICAgICAgICAgfQpAQCAtMjA0LDggKzIwNCw4IEBACiAgICAgICAgICAgICBycyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KCJzZWxlY3QgKiBmcm9tIGN1c3RvbWVyX3N0bXRfd3JhcHBlciIpOwogICAgICAgICAgICAgY29uRnJvbVJlc3VsdFNldCA9IHJzLmdldFN0YXRlbWVudCgpLmdldENvbm5lY3Rpb24oKTsKIAotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlJlc3VsdFNldCB0ZXN0IDogY29uRnJvbURTIDogIiArIGNvbkZyb21EUyk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiUmVzdWx0U2V0IHRlc3QgOiBjb25Gcm9tUmVzdWx0U2V0OiAiICsgY29uRnJvbVJlc3VsdFNldCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzdWx0U2V0IHRlc3QgOiBjb25Gcm9tRFMgOiAiICsgY29uRnJvbURTKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXN1bHRTZXQgdGVzdCA6IGNvbkZyb21SZXN1bHRTZXQ6ICIgKyBjb25Gcm9tUmVzdWx0U2V0KTsKICAgICAgICAgICAgIGlmKCBjb25Gcm9tRFM9PWNvbkZyb21SZXN1bHRTZXQgfHwgY29uRnJvbURTLmVxdWFscyhjb25Gcm9tUmVzdWx0U2V0KSApewogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CiAgICAgICAgICAgICB9CkBAIC0yMzMsNzEgKzIzMyw3MSBAQAogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIGNvbXBhcmVSZWNvcmRzKCkgewotCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7CisgICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKICAgICAgICAgQ29ubmVjdGlvbiBjb25Gcm9tRFMgPSBudWxsOwotCUNvbm5lY3Rpb24gY29uMSA9IG51bGw7Ci0JU3RhdGVtZW50IHN0bXQxID0gbnVsbDsKLQlTdGF0ZW1lbnQgc3RtdCA9IG51bGw7Ci0JUmVzdWx0U2V0IHJzID0gbnVsbDsKLQlSZXN1bHRTZXQgcnMxID0gbnVsbDsKKyAgICBDb25uZWN0aW9uIGNvbjEgPSBudWxsOworICAgIFN0YXRlbWVudCBzdG10MSA9IG51bGw7CisgICAgU3RhdGVtZW50IHN0bXQgPSBudWxsOworICAgIFJlc3VsdFNldCBycyA9IG51bGw7CisgICAgUmVzdWx0U2V0IHJzMSA9IG51bGw7CiAgICAgICAgIHRyeXsKICAgICAgICAgICAgIGNvbkZyb21EUyA9IHRyYWNpbmdkcy5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIGNvbjEgPSB0cmFjaW5nZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICBjb24xID0gdHJhY2luZ2RzLmdldENvbm5lY3Rpb24oKTsKICAgICAgICAgICAgIHN0bXQgPSBjb25Gcm9tRFMuY3JlYXRlU3RhdGVtZW50KCk7Ci0JICAgIHN0bXQxID0gY29uMS5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgc3RtdDEgPSBjb24xLmNyZWF0ZVN0YXRlbWVudCgpOwogICAgICAgICAgICAgcnMgPSBzdG10LmV4ZWN1dGVRdWVyeSgic2VsZWN0ICogZnJvbSBleHBlY3RlZF9zcWxfdHJhY2UiKTsKLQkgICAgcnMxID0gc3RtdDEuZXhlY3V0ZVF1ZXJ5KCJzZWxlY3QgKiBmcm9tIHNxbF90cmFjZSIpOworICAgICAgICByczEgPSBzdG10MS5leGVjdXRlUXVlcnkoInNlbGVjdCAqIGZyb20gc3FsX3RyYWNlIik7CiAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQEBAQCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKLQkgICAgZm9yKGludCBpPTA7IGk8NTsgaSsrKSB7CisgICAgICAgIGZvcihpbnQgaT0wOyBpPDU7IGkrKykgewogCi0JICAgICAgICBTdHJpbmcgY2xhc3NOYW1lID0iIjsKLQkgICAgICAgIFN0cmluZyBtZXRob2ROYW1lPSIiOworICAgICAgICAgICAgU3RyaW5nIGNsYXNzTmFtZSA9IiI7CisgICAgICAgICAgICBTdHJpbmcgbWV0aG9kTmFtZT0iIjsKICAgICAgICAgICAgICAgICBTdHJpbmcgYXJncz0iIjsKICAgICAgICAgICAgICAgICBTdHJpbmcgZXhwZWN0ZWRDbGFzc05hbWU9IiI7CiAgICAgICAgICAgICAgICAgU3RyaW5nIGV4cGVjdGVkTWV0aG9kTmFtZT0iIjsKICAgICAgICAgICAgICAgICBTdHJpbmcgZXhwZWN0ZWRBcmdzPSIiOwotCSAgICAgICAgaWYocnMxLm5leHQoKSkgewkKKyAgICAgICAgICAgIGlmKHJzMS5uZXh0KCkpIHsKICAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSByczEuZ2V0U3RyaW5nKDEpLnRyaW0oKTsKLQkJbWV0aG9kTmFtZSA9IHJzMS5nZXRTdHJpbmcoMikudHJpbSgpOwotCQlhcmdzID0gcnMxLmdldFN0cmluZygzKS50cmltKCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQEBAQEAgY2xhc3M9IiArIGNsYXNzTmFtZSArICItLS0iKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJAQEBAQCBtZXRob2Q9IiArIG1ldGhvZE5hbWUgKyAiLS0tIik7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQEBAQEAgYXJncz0iICsgYXJncyArICItLS0iKTsKLQkJfQotCQkKLQkJaWYocnMubmV4dCgpKSB7Ci0JICAgIAlleHBlY3RlZENsYXNzTmFtZSA9IHJzLmdldFN0cmluZygxKS50cmltKCk7Ci0JICAgICAgICBleHBlY3RlZE1ldGhvZE5hbWUgPSBycy5nZXRTdHJpbmcoMikudHJpbSgpOwotCQlleHBlY3RlZEFyZ3MgPSBycy5nZXRTdHJpbmcoMykudHJpbSgpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkBAQEBAIGV4cGVjdGVkQ2xhc3MgPSAiICsgZXhwZWN0ZWRDbGFzc05hbWUgKyAiLS0tIik7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQEBAQEAgZXhwZWN0ZWRNZXRob2QgPSAiICsgZXhwZWN0ZWRNZXRob2ROYW1lICsgIi0tLSIpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkBAQEBAIGV4cGVjdGVkQXJncyA9ICIgKyBleHBlY3RlZEFyZ3MgKyAiLS0tIik7Ci0JCX0KLSAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkBAQEAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7Ci0JCQotCSAgICAJaWYoY2xhc3NOYW1lLmVxdWFscyhleHBlY3RlZENsYXNzTmFtZSkgJiYgbWV0aG9kTmFtZS5lcXVhbHMoZXhwZWN0ZWRNZXRob2ROYW1lKSAmJiBhcmdzLmVxdWFscyhleHBlY3RlZEFyZ3MpKSB7Ci0JCSAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKLQkJICAgIH0gZWxzZSB7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCSAgICB9CisgICAgICAgIG1ldGhvZE5hbWUgPSByczEuZ2V0U3RyaW5nKDIpLnRyaW0oKTsKKyAgICAgICAgYXJncyA9IHJzMS5nZXRTdHJpbmcoMykudHJpbSgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkBAQEBAIGNsYXNzPSIgKyBjbGFzc05hbWUgKyAiLS0tIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQEBAQEAgbWV0aG9kPSIgKyBtZXRob2ROYW1lICsgIi0tLSIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkBAQEBAIGFyZ3M9IiArIGFyZ3MgKyAiLS0tIik7CisgICAgICAgIH0KIAotCQkgICAgLyppZihjbGFzc05hbWUgIT0gbnVsbCAmJiBleHBlY3RlZENsYXNzTmFtZSAhPSBudWxsKSB7Ci0JCQlpZihjbGFzc05hbWUuZXF1YWxzKGV4cGVjdGVkQ2xhc3NOYW1lKSkKLSAgCQkgICAgICAgICAgICByZXN1bHQgPSB0cnVlOwotCQkgICAgfQotCQkgICAgaWYobWV0aG9kTmFtZSAhPSBudWxsICYmIGV4cGVjdGVkTWV0aG9kTmFtZSAhPSBudWxsKSB7Ci0JCQlpZihtZXRob2ROYW1lLmVxdWFscyhleHBlY3RlZE1ldGhvZE5hbWUpKSAKLQkJCSAgICByZXN1bHQgPSB0cnVlOwotCQkgICAgfQotCQkgICAgaWYoYXJncyAhPSBudWxsICYmIGV4cGVjdGVkQXJncyAhPSBudWxsKSB7Ci0JCQlpZihhcmdzLmVxdWFscyhleHBlY3RlZEFyZ3MpKQotCQkJICAgIHJlc3VsdCA9IHRydWU7Ci0JCSAgICB9Ki8KLQkgICAgfQorICAgICAgICBpZihycy5uZXh0KCkpIHsKKyAgICAgICAgICAgIGV4cGVjdGVkQ2xhc3NOYW1lID0gcnMuZ2V0U3RyaW5nKDEpLnRyaW0oKTsKKyAgICAgICAgICAgIGV4cGVjdGVkTWV0aG9kTmFtZSA9IHJzLmdldFN0cmluZygyKS50cmltKCk7CisgICAgICAgIGV4cGVjdGVkQXJncyA9IHJzLmdldFN0cmluZygzKS50cmltKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQEBAQEAgZXhwZWN0ZWRDbGFzcyA9ICIgKyBleHBlY3RlZENsYXNzTmFtZSArICItLS0iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJAQEBAQCBleHBlY3RlZE1ldGhvZCA9ICIgKyBleHBlY3RlZE1ldGhvZE5hbWUgKyAiLS0tIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQEBAQEAgZXhwZWN0ZWRBcmdzID0gIiArIGV4cGVjdGVkQXJncyArICItLS0iKTsKKyAgICAgICAgfQorICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQEBAQCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKworICAgICAgICAgICAgaWYoY2xhc3NOYW1lLmVxdWFscyhleHBlY3RlZENsYXNzTmFtZSkgJiYgbWV0aG9kTmFtZS5lcXVhbHMoZXhwZWN0ZWRNZXRob2ROYW1lKSAmJiBhcmdzLmVxdWFscyhleHBlY3RlZEFyZ3MpKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qaWYoY2xhc3NOYW1lICE9IG51bGwgJiYgZXhwZWN0ZWRDbGFzc05hbWUgIT0gbnVsbCkgeworICAgICAgICAgICAgaWYoY2xhc3NOYW1lLmVxdWFscyhleHBlY3RlZENsYXNzTmFtZSkpCisgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKG1ldGhvZE5hbWUgIT0gbnVsbCAmJiBleHBlY3RlZE1ldGhvZE5hbWUgIT0gbnVsbCkgeworICAgICAgICAgICAgaWYobWV0aG9kTmFtZS5lcXVhbHMoZXhwZWN0ZWRNZXRob2ROYW1lKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYoYXJncyAhPSBudWxsICYmIGV4cGVjdGVkQXJncyAhPSBudWxsKSB7CisgICAgICAgICAgICBpZihhcmdzLmVxdWFscyhleHBlY3RlZEFyZ3MpKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CisgICAgICAgICAgICB9Ki8KKyAgICAgICAgfQogCiAgICAgICAgIH1jYXRjaChTUUxFeGNlcHRpb24gc3FlKXsKLQl9ZmluYWxseXsKKyAgICB9ZmluYWxseXsKIAogICAgICAgICAgICAgdHJ5ewogICAgICAgICAgICAgICAgIGlmKHN0bXQgIT0gbnVsbCl7CkBAIC0zMzIsNyArMzMyLDcgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Y2F0Y2goU1FMRXhjZXB0aW9uIHNxZSl7fQogICAgICAgICB9Ci0JcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7fQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFjaW5nc3FsL2xvZ2dlci9jb20vc3VuL3MxYXNkZXYvamRiYy90cmFjaW5nc3FsL2xvZ2dlci9UcmFjZUxvZ2dlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFjaW5nc3FsL2xvZ2dlci9jb20vc3VuL3MxYXNkZXYvamRiYy90cmFjaW5nc3FsL2xvZ2dlci9UcmFjZUxvZ2dlci5qYXZhCmluZGV4IDk5YzczODQuLmFlNTliNmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhY2luZ3NxbC9sb2dnZXIvY29tL3N1bi9zMWFzZGV2L2pkYmMvdHJhY2luZ3NxbC9sb2dnZXIvVHJhY2VMb2dnZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYWNpbmdzcWwvbG9nZ2VyL2NvbS9zdW4vczFhc2Rldi9qZGJjL3RyYWNpbmdzcWwvbG9nZ2VyL1RyYWNlTG9nZ2VyLmphdmEKQEAgLTI3LDEzICsyNywxMyBAQAogaW1wb3J0IGphdmEuc3FsLlNRTEV4Y2VwdGlvbjsKIAogcHVibGljIGNsYXNzIFRyYWNlTG9nZ2VyIGltcGxlbWVudHMgU1FMVHJhY2VMaXN0ZW5lciB7Ci0gICAKLSAgICBEYXRhU291cmNlIGRzOwkKLSAgICBwdWJsaWMgVHJhY2VMb2dnZXIoKSB7IAotCXRyeSB7CisKKyAgICBEYXRhU291cmNlIGRzOworICAgIHB1YmxpYyBUcmFjZUxvZ2dlcigpIHsKKyAgICB0cnkgewogICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCWRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamRiYy90cmFjaW5nc3FsLXJlcyIpOwotCX0gY2F0Y2goTmFtaW5nRXhjZXB0aW9uIGV4KSB7fQorICAgIGRzID0gKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamRiYy90cmFjaW5nc3FsLXJlcyIpOworICAgIH0gY2F0Y2goTmFtaW5nRXhjZXB0aW9uIGV4KSB7fQogICAgIH0KIAogICAgIC8qKgpAQCAtNjYsMjMgKzY2LDIzIEBACiAKICAgICBwdWJsaWMgdm9pZCB3cml0ZVJlY29yZChEYXRhU291cmNlIGRzLCBTdHJpbmcgY2xhc3NuYW1lLCBTdHJpbmcgbWV0aG9kbmFtZSwgU3RyaW5nIGFyZ3MpIHsKICAgICAgICAgQ29ubmVjdGlvbiBjb25Gcm9tRFMgPSBudWxsOwotCVByZXBhcmVkU3RhdGVtZW50IHN0bXQgPSBudWxsOworICAgIFByZXBhcmVkU3RhdGVtZW50IHN0bXQgPSBudWxsOwogICAgICAgICB0cnl7CiAgICAgICAgICAgICBjb25Gcm9tRFMgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCIjIyNjb249IiArIGNvbkZyb21EUyk7CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCIjIyNjb249IiArIGNvbkZyb21EUyk7CiAgICAgICAgICAgICBzdG10ID0gY29uRnJvbURTLnByZXBhcmVTdGF0ZW1lbnQoCi0JICAgICAgICAiaW5zZXJ0IGludG8gc3FsX3RyYWNlIHZhbHVlcyAoPywgPywgPykiICk7CisgICAgICAgICAgICAiaW5zZXJ0IGludG8gc3FsX3RyYWNlIHZhbHVlcyAoPywgPywgPykiICk7CiAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIyMjIHN0bXQ9IiArIHN0bXQpOwotCSAgICBzdG10LnNldFN0cmluZygxLCBjbGFzc25hbWUpOwotCSAgICBzdG10LnNldFN0cmluZygyLCBtZXRob2RuYW1lKTsKLQkgICAgc3RtdC5zZXRTdHJpbmcoMywgYXJncyk7CisgICAgICAgIHN0bXQuc2V0U3RyaW5nKDEsIGNsYXNzbmFtZSk7CisgICAgICAgIHN0bXQuc2V0U3RyaW5nKDIsIG1ldGhvZG5hbWUpOworICAgICAgICBzdG10LnNldFN0cmluZygzLCBhcmdzKTsKIAotCSAgICBpbnQgY291bnQgPSBzdG10LmV4ZWN1dGVVcGRhdGUoKTsKLQkgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIiMjIyBpbnNlcnRlZCAiICsgY291bnQgKyAiIHJvd3MiKTsKKyAgICAgICAgaW50IGNvdW50ID0gc3RtdC5leGVjdXRlVXBkYXRlKCk7CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCIjIyMgaW5zZXJ0ZWQgIiArIGNvdW50ICsgIiByb3dzIik7CiAKICAgICAgICAgfWNhdGNoKFNRTEV4Y2VwdGlvbiBzcWUpewotCX1maW5hbGx5eworICAgIH1maW5hbGx5ewogCiAgICAgICAgICAgICB0cnl7CiAgICAgICAgICAgICAgICAgaWYoc3RtdCAhPSBudWxsKXsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhY2luZ3NxbC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYWNpbmdzcWwvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IDAzOTdhNzUuLjBmMDQ0NzkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhY2luZ3NxbC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFjaW5nc3FsL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSw0NiArMSw0NiBAQAotDQotRHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI7DQotDQotQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlciAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikNCi0pOw0KLQ0KLUlOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlciBWQUxVRVMoMSwgJ3d4eXonKTsNCi1JTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXIgVkFMVUVTKDIsICdwcXJzJyk7DQotDQotRHJvcCB0YWJsZSBzcWxfdHJhY2U7DQotDQotQ1JFQVRFIFRBQkxFIHNxbF90cmFjZSAoDQotICAgIGNsYXNzbmFtZSAgICAgICAgY2hhcigxMDApLA0KLSAgICBtZXRob2RuYW1lCSAgICAgY2hhcigxMDApLA0KLSAgICBhcmdzCSAgICAgY2hhcigyMDApDQotKTsNCi0NCi1Ecm9wIHRhYmxlIG51bGxfZW50cnlfdGFibGU7DQotDQotQ1JFQVRFIFRBQkxFIG51bGxfZW50cnlfdGFibGUgKA0KLSAgICBmaWVsZDEgICAgICAgIGNoYXIoMTAwKQ0KLSk7DQotDQotDQotRHJvcCB0YWJsZSBleHBlY3RlZF9zcWxfdHJhY2U7DQotDQotQ1JFQVRFIFRBQkxFIGV4cGVjdGVkX3NxbF90cmFjZSAoDQotICAgIGNsYXNzbmFtZSAgICAgICAgY2hhcigxMDApLA0KLSAgICBtZXRob2RuYW1lICAgICAgIGNoYXIoMTAwKSwNCi0gICAgYXJncwkgICAgIGNoYXIoMjAwKQ0KLSk7DQotDQotDQotSU5TRVJUIElOVE8gZXhwZWN0ZWRfc3FsX3RyYWNlIFZBTFVFUygnb3JnLmFwYWNoZS5kZXJieS5jbGllbnQubmV0Lk5ldENvbm5lY3Rpb24nLCAncHJlcGFyZVN0YXRlbWVudCcsICdzZWxlY3QgKiBmcm9tIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjsxMDAzOzEwMDc7Jyk7DQotDQotSU5TRVJUIElOVE8gZXhwZWN0ZWRfc3FsX3RyYWNlIFZBTFVFUygnY29tLnN1bi5namMuc3BpLmpkYmM0MC5QcmVwYXJlZFN0YXRlbWVudFdyYXBwZXI0MCcsICdnZXRDb25uZWN0aW9uJywgJycpOw0KLQ0KLUlOU0VSVCBJTlRPIGV4cGVjdGVkX3NxbF90cmFjZSBWQUxVRVMoJ29yZy5hcGFjaGUuZGVyYnkuY2xpZW50Lm5ldC5OZXRDb25uZWN0aW9uJywgJ3ByZXBhcmVTdGF0ZW1lbnQnLCAnSU5TRVJUIElOVE8gbnVsbF9lbnRyeV90YWJsZSBWQUxVRVMoPyk7MTAwMzsxMDA3OycpOw0KLQ0KLUlOU0VSVCBJTlRPIGV4cGVjdGVkX3NxbF90cmFjZSBWQUxVRVMoJ2NvbS5zdW4uZ2pjLnNwaS5qZGJjNDAuUHJlcGFyZWRTdGF0ZW1lbnRXcmFwcGVyNDAnLCAnc2V0U3RyaW5nJywgJzE7Jyk7DQotDQotSU5TRVJUIElOVE8gZXhwZWN0ZWRfc3FsX3RyYWNlIFZBTFVFUygnY29tLnN1bi5namMuc3BpLmpkYmM0MC5QcmVwYXJlZFN0YXRlbWVudFdyYXBwZXI0MCcsICdleGVjdXRlVXBkYXRlJywgJycpOw0KLQ0KLUlOU0VSVCBJTlRPIGV4cGVjdGVkX3NxbF90cmFjZSBWQUxVRVMoJ2NvbS5zdW4uZ2pjLnNwaS5qZGJjNDAuUHJlcGFyZWRTdGF0ZW1lbnRXcmFwcGVyNDAnLCAnY2xvc2UnLCAnJyk7DQorCitEcm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjsKKworQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlciAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCitJTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXIgVkFMVUVTKDEsICd3eHl6Jyk7CitJTlNFUlQgSU5UTyBjdXN0b21lcl9zdG10X3dyYXBwZXIgVkFMVUVTKDIsICdwcXJzJyk7CisKK0Ryb3AgdGFibGUgc3FsX3RyYWNlOworCitDUkVBVEUgVEFCTEUgc3FsX3RyYWNlICgKKyAgICBjbGFzc25hbWUgICAgICAgIGNoYXIoMTAwKSwKKyAgICBtZXRob2RuYW1lICAgICAgICAgY2hhcigxMDApLAorICAgIGFyZ3MgICAgICAgICBjaGFyKDIwMCkKKyk7CisKK0Ryb3AgdGFibGUgbnVsbF9lbnRyeV90YWJsZTsKKworQ1JFQVRFIFRBQkxFIG51bGxfZW50cnlfdGFibGUgKAorICAgIGZpZWxkMSAgICAgICAgY2hhcigxMDApCispOworCisKK0Ryb3AgdGFibGUgZXhwZWN0ZWRfc3FsX3RyYWNlOworCitDUkVBVEUgVEFCTEUgZXhwZWN0ZWRfc3FsX3RyYWNlICgKKyAgICBjbGFzc25hbWUgICAgICAgIGNoYXIoMTAwKSwKKyAgICBtZXRob2RuYW1lICAgICAgIGNoYXIoMTAwKSwKKyAgICBhcmdzICAgICAgICAgY2hhcigyMDApCispOworCisKK0lOU0VSVCBJTlRPIGV4cGVjdGVkX3NxbF90cmFjZSBWQUxVRVMoJ29yZy5hcGFjaGUuZGVyYnkuY2xpZW50Lm5ldC5OZXRDb25uZWN0aW9uJywgJ3ByZXBhcmVTdGF0ZW1lbnQnLCAnc2VsZWN0ICogZnJvbSBjdXN0b21lcl9zdG10X3dyYXBwZXI7MTAwMzsxMDA3OycpOworCitJTlNFUlQgSU5UTyBleHBlY3RlZF9zcWxfdHJhY2UgVkFMVUVTKCdjb20uc3VuLmdqYy5zcGkuamRiYzQwLlByZXBhcmVkU3RhdGVtZW50V3JhcHBlcjQwJywgJ2dldENvbm5lY3Rpb24nLCAnJyk7CisKK0lOU0VSVCBJTlRPIGV4cGVjdGVkX3NxbF90cmFjZSBWQUxVRVMoJ29yZy5hcGFjaGUuZGVyYnkuY2xpZW50Lm5ldC5OZXRDb25uZWN0aW9uJywgJ3ByZXBhcmVTdGF0ZW1lbnQnLCAnSU5TRVJUIElOVE8gbnVsbF9lbnRyeV90YWJsZSBWQUxVRVMoPyk7MTAwMzsxMDA3OycpOworCitJTlNFUlQgSU5UTyBleHBlY3RlZF9zcWxfdHJhY2UgVkFMVUVTKCdjb20uc3VuLmdqYy5zcGkuamRiYzQwLlByZXBhcmVkU3RhdGVtZW50V3JhcHBlcjQwJywgJ3NldFN0cmluZycsICcxOycpOworCitJTlNFUlQgSU5UTyBleHBlY3RlZF9zcWxfdHJhY2UgVkFMVUVTKCdjb20uc3VuLmdqYy5zcGkuamRiYzQwLlByZXBhcmVkU3RhdGVtZW50V3JhcHBlcjQwJywgJ2V4ZWN1dGVVcGRhdGUnLCAnJyk7CisKK0lOU0VSVCBJTlRPIGV4cGVjdGVkX3NxbF90cmFjZSBWQUxVRVMoJ2NvbS5zdW4uZ2pjLnNwaS5qZGJjNDAuUHJlcGFyZWRTdGF0ZW1lbnRXcmFwcGVyNDAnLCAnY2xvc2UnLCAnJyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYWNpbmdzcWwvc3FsL3JlY3JlYXRlX3NxbF90cmFjZV90YWJsZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYWNpbmdzcWwvc3FsL3JlY3JlYXRlX3NxbF90cmFjZV90YWJsZS5zcWwKaW5kZXggNzU0ZjliZC4uZWFhNDU3NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFjaW5nc3FsL3NxbC9yZWNyZWF0ZV9zcWxfdHJhY2VfdGFibGUuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhY2luZ3NxbC9zcWwvcmVjcmVhdGVfc3FsX3RyYWNlX3RhYmxlLnNxbApAQCAtMSw2ICsxLDYgQEAKIERyb3AgdGFibGUgc3FsX3RyYWNlOwogQ1JFQVRFIFRBQkxFIHNxbF90cmFjZSAoCiAgICAgY2xhc3NuYW1lICAgICAgICBjaGFyKDEwMCksCi0gICAgbWV0aG9kbmFtZQkgICAgIGNoYXIoMTAwKSwKLSAgICBhcmdzCSAgICAgY2hhcigyMDApCisgICAgbWV0aG9kbmFtZSAgICAgICAgIGNoYXIoMTAwKSwKKyAgICBhcmdzICAgICAgICAgY2hhcigyMDApCiApOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFuc2FjdGlvbnMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFuc2FjdGlvbnMvYnVpbGQueG1sCmluZGV4IDdjODJhYWEuLjg3ZGRmNjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhbnNhY3Rpb25zL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYW5zYWN0aW9ucy9idWlsZC54bWwKQEAgLTM1LDcgKzM1LDcgQEAKICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5vdXRwdXQiLz4KICAgICAgICAgPC9kZWxldGU+CiAgICAgICAgIDxyZWNvcmQgbmFtZT0idHJhbnNhY3Rpb25zLm91dHB1dCIgYWN0aW9uPSJzdGFydCIgLz4KLQk8YW50IGRpcj0idGVzdDEiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9InRlc3QxIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8cmVjb3JkIG5hbWU9InRyYW5zYWN0aW9ucy5vdXRwdXQiIGFjdGlvbj0ic3RvcCIgLz4KICAgICA8L3RhcmdldD4KIApAQCAtNTIsOSArNTIsOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+Ci0JCVVzYWdlOgotCQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSByZWNvbmZpZyB0ZXN0cykKLQk8L2VjaG8+CisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSByZWNvbmZpZyB0ZXN0cykKKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYW5zYWN0aW9ucy90ZXN0MS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFuc2FjdGlvbnMvdGVzdDEvYnVpbGQucHJvcGVydGllcwppbmRleCBmMWE3NmYzLi4yZjAwNzhmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYW5zYWN0aW9ucy90ZXN0MS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhbnNhY3Rpb25zL3Rlc3QxL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImFzNy1qdHMiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CkBAIC0yNSw3ICsyNSw3IEBACiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0idHhuc3RhdHVzLXRlc3QxIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9InR4bnN0YXR1cy10ZXN0MSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iZWpiamFyLmNsYXNzZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jb20iLz4KIDwhLS0gcG9vbDEgLS0+CiA8cHJvcGVydHkgbmFtZT0ib3JhLnVzZXIxIiB2YWx1ZT0iYWRpdHlhIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYW5zYWN0aW9ucy90ZXN0MS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYW5zYWN0aW9ucy90ZXN0MS9idWlsZC54bWwKaW5kZXggZmVlNzdjNy4uOWUyYzE5YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFuc2FjdGlvbnMvdGVzdDEvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhbnNhY3Rpb25zL3Rlc3QxL2J1aWxkLnhtbApAQCAtMzAsMTQgKzMwLDE0IEBACiAgICZjb21tb25CdWlsZDsKICAgJnRlc3Rwcm9wZXJ0aWVzOwogCi0gICAgCisKICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLHNldHVwLWpkYmMsc2V0dXAtc3FsLGRlcGxveSxydW53ZWIsdW5kZXBsb3ksY2xlYW51cC1qZGJjLGNsZWFudXAtc3FsIi8+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICAgIDxkZWxldGUgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTU1LDE4ICs1NSwxOCBAQAogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLXdhci1sb2NhbCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJ3YXIuY2xhc3NlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+Ci0JPHBhcmFtIG5hbWU9Indhci5maWxlIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciIvPgorICAgIDxwYXJhbSBuYW1lPSJ3YXIuZmlsZSIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZWFyLWNvbW1vbiIvPgogICAgICAgPCEtLQogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiIvPgogICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0idHJ1ZSIvPgotCTxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+Ci0gICAgICA8L2FudGNhbGw+CQorICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CisgICAgICA8L2FudGNhbGw+CiAgICAgICAtLT4KICAgICA8L3RhcmdldD4KICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlLXdhci1sb2NhbCIgPgotICAgIDwhLS0gPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+IAorICAgIDwhLS0gPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CiAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLXNlcnZsZXQiLz4tLT4KIApAQCAtMTI1LDcgKzEyNSw3IEBACiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1yZXNvdXJjZS1jb21tb24iID4KICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9Imp0cy14YS1wb29sMiIvPgogICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvb3JhY2xlZHMyIi8+Ci0gICAgPC9hbnRjYWxsPiAKKyAgICA8L2FudGNhbGw+CiAKICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLW9yYWNsZS14YS1wb29sIiA+CiAgICAgICA8cGFyYW0gbmFtZT0icG9vbG5hbWUiIHZhbHVlPSJqdHMteGEtcG9vbDEiLz4KQEAgLTEzNCw3ICsxMzQsNyBAQAogICAgICAgPHBhcmFtIG5hbWU9Im9yYS5zaWQiIHZhbHVlPSIke29yYS5zaWQxfSIvPgogICAgICAgPHBhcmFtIG5hbWU9Im9yYS51cmwiIHZhbHVlPSIke29yYS51cmwxfSIvPgogICAgIDwvYW50Y2FsbD4KLSAgICAKKwogICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIiA+CiAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJqdHMteGEtcG9vbDEiLz4KICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL29yYWNsZXRoaXJkIi8+CkBAIC0xNjcsNyArMTY3LDcgQEAKICAgICAgIG9uZXJyb3I9ImNvbnRpbnVlIgogICAgICAgcHJpbnQ9InllcyIKICAgICAgIGNsYXNzcGF0aD0iJHtkYmRyaXZlci5jbGFzc3BhdGh9Ii8+Ci0gICAgCisKICAgICA8ZWNobyBtZXNzYWdlPSJFeGVjdXRpbmcgc3FsIHN0YXRlbWVudCBhdCBmcm9tICR7Y3JlYXRlLnNxbC5maWxlMn0iLz4KICAgICA8c3FsCiAgICAgICBkcml2ZXI9IiR7ZGIuZHJpdmVyfSIKQEAgLTE5MSw3ICsxOTEsNyBAQAogICAgICAgb25lcnJvcj0iY29udGludWUiCiAgICAgICBwcmludD0ieWVzIgogICAgICAgY2xhc3NwYXRoPSIke2RiZHJpdmVyLmNsYXNzcGF0aH0iLz4KLSAgICAKKwogICAgIDxlY2hvIG1lc3NhZ2U9IkV4ZWN1dGluZyBzcWwgc3RhdGVtZW50IGF0IGZyb20gJHtkcm9wLnNxbC5maWxlMn0iLz4KICAgICA8c3FsCiAgICAgICBkcml2ZXI9IiR7ZGIuZHJpdmVyfSIKQEAgLTIxNywxNCArMjE3LDE0IEBACiAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KICAgPC90YXJnZXQ+CiAKLSAgPCEtLSAKKyAgPCEtLQogICAgIFRvbWNhdCdzIEdUZXN0IHRvb2wgZm9yIHdlYnRlc3RzCiAgIC0tPgogICA8dGFyZ2V0IG5hbWU9InJ1bndlYiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgIDx0YXNrZGVmIG5hbWU9Imd0ZXN0IiBjbGFzc25hbWU9Im9yZy5hcGFjaGUudG9tY2F0LnRhc2suR1Rlc3QiIAorICAgIDx0YXNrZGVmIG5hbWU9Imd0ZXN0IiBjbGFzc25hbWU9Im9yZy5hcGFjaGUudG9tY2F0LnRhc2suR1Rlc3QiCiAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3Rlc3Rkcml2ZXJzZWN1cml0eS5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9jb21tb25zLWxvZ2dpbmcuamFyIiAvPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJ3Z2RpciIgdmFsdWU9IiR7ZW52LkFQU19IT01FfS9kZXZ0ZXN0cy9qZGJjL3RyYW5zYWN0aW9ucyIvPgotICAgIDxndGVzdCByZXF1ZXN0PSJHRVQgL3R4bnN0YXR1cy9ibXNlcnZsZXQ0IEhUVFAvMS4wIiAKKyAgICA8Z3Rlc3QgcmVxdWVzdD0iR0VUIC90eG5zdGF0dXMvYm1zZXJ2bGV0NCBIVFRQLzEuMCIKICAgICAgIGRlYnVnPSI5IgogICAgICAgZmlyc3RUYXNrPSJ0cnVlIgogICAgICAgbGFzdFRlc3Q9InRydWUiCkBAIC0yNDYsNyArMjQ2LDcgQEAKICAgICAgIHRlc3RDYXNlRGVzY3JpcHRpb249InR4bnN0YXR1cy10ZXN0MSIKICAgICAgIHRlc3RTdHJhdGVneT0idHhuc3RhdHVzLXRlc3QxIgogICAgIC8+Ci0gIDwvdGFyZ2V0PiAgCisgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLWpkYmMtb3JhY2xlLXhhLXBvb2wiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiIgPgpAQCAtMjYyLDcgKzI2Miw3IEBACiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLiR7cG9vbG5hbWV9LnByb3BlcnR5LlVSTD0ke29yYS51cmx9Ii8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgICAKKwogICA8L3RhcmdldD4KLSAgCisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhbnNhY3Rpb25zL3Rlc3QxL2VqYi9ibXNhbXBsZWJlYW4zLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYW5zYWN0aW9ucy90ZXN0MS9lamIvYm1zYW1wbGViZWFuMy5qYXZhCmluZGV4IDRlNDI4YjYuLmNmMjhjN2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhbnNhY3Rpb25zL3Rlc3QxL2VqYi9ibXNhbXBsZWJlYW4zLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFuc2FjdGlvbnMvdGVzdDEvZWpiL2Jtc2FtcGxlYmVhbjMuamF2YQpAQCAtMjYsMTAgKzI2LDEwIEBACiBpbXBvcnQgamF2YS5zcWwuKjsKIGltcG9ydCBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3Q7CiAKLXB1YmxpYyBjbGFzcyBibXNhbXBsZWJlYW4zIGltcGxlbWVudHMgU2Vzc2lvbkJlYW4gCitwdWJsaWMgY2xhc3MgYm1zYW1wbGViZWFuMyBpbXBsZW1lbnRzIFNlc3Npb25CZWFuCiB7CiAgICAgICAgIHByaXZhdGUgdHJhbnNpZW50IGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0IG1fY3R4ID0gbnVsbDsKLQlFSkJDb250ZXh0IGVqYmNvbnRleHQ7CisgICAgRUpCQ29udGV4dCBlamJjb250ZXh0OwogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0IGN0eCkKICAgICB7CiAgICAgICAgIG1fY3R4ID0gY3R4OwpAQCAtNDAsMTUgKzQwLDE1IEBACiAgICAgewogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIAorICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpCiAgICAgewogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgCisgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKQogICAgIHsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSAKKyAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKQogICAgIHsKICAgICB9CiAKQEAgLTY1LDM5ICs2NSwzOSBAQAogICAgICAgICBibXNhbXBsZTQgcmVtb3RlID0gbnVsbDsKICAgICAgICAgaW50IHJlc3VsdEZyb21CZWFuND0xOwogICAgICAgICB0cnkgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIGJlYW4xLi4uLiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIGJlYW4xLi4uLiIpOwogICAgICAgICAgICAgSW5pdGlhbENvbnRleHQgY3R4ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpIGN0eC5sb29rdXAoImphdmE6Y29tcC9lbnYvamRiYy9vcmFjbGV0aGlyZCIpOwotICAgICAgCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oImRzIGxvb2t1cCBzdWNjZWVkZWQiKTsKKyAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJkcyBsb29rdXAgc3VjY2VlZGVkIik7CiAgICAgICAgICAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW9uIHN1Y2NlZWRlZCIrY29ubik7CiAgICAgICAgICAgICBzdG10ID0gY29ubi5jcmVhdGVTdGF0ZW1lbnQoKTsKLQkgICAgLy9zdG10LmV4ZWN1dGVRdWVyeSgiZGVsZXRlIGZyb20gc3RhdHVzMSIpOworICAgICAgICAvL3N0bXQuZXhlY3V0ZVF1ZXJ5KCJkZWxldGUgZnJvbSBzdGF0dXMxIik7CiAgICAgICAgICAgICBTdHJpbmcgcXVlcnkxID0gInNlbGVjdCAqIGZyb20gc3RhdHVzMSI7Ci0JICAgIHN0bXQuZXhlY3V0ZVVwZGF0ZSgiaW5zZXJ0IGludG8gc3RhdHVzMSB2YWx1ZXMoJ2JlYW4zJywzKSIpOworICAgICAgICBzdG10LmV4ZWN1dGVVcGRhdGUoImluc2VydCBpbnRvIHN0YXR1czEgdmFsdWVzKCdiZWFuMycsMykiKTsKICAgICAgICAgICAgIHJzID0gc3RtdC5leGVjdXRlUXVlcnkocXVlcnkxKTsKICAgICAgICAgICAgIHdoaWxlKHJzLm5leHQoKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxhc3QgTmFtZTogIiArIHJzLmdldFN0cmluZygiTkFNRSIpKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZpcnN0IE5hbWU6ICIgKyBycy5nZXRJbnQoIm51bSIpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAKKwogICAgICAgICAgICBPYmplY3Qgb2JqcmVmID0gY3R4Lmxvb2t1cCgiZWpiL2Jtc2FtcGxlYmVhbjQiKTsKLSAgICAgICAgICAgaG9tZSA9IChibXNhbXBsZTRob21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIGJtc2FtcGxlNGhvbWUuY2xhc3MpOyAKKyAgICAgICAgICAgaG9tZSA9IChibXNhbXBsZTRob21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIGJtc2FtcGxlNGhvbWUuY2xhc3MpOwogICAgICAgICAgICByZW1vdGUgPSBob21lLmNyZWF0ZSgpOwogICAgICAgICAgICByZXN1bHRGcm9tQmVhbjQgPSByZW1vdGUucGVyZm9ybURCT3BzKCk7Ci0gICAgICAgICAgcnMuY2xvc2UoKTsgCisgICAgICAgICAgcnMuY2xvc2UoKTsKICAgICAgICAgICAgc3RtdC5jbG9zZSgpOwogICAgICAgICAgICBjb25uLmNsb3NlKCk7Ci0gICAgICAgICAgIH0gCisgICAgICAgICAgIH0KICAgICAgICAgY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKQogICAgICAgICB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNRTEV4Y2VwdGlvbiBpcyA6ICIgKyBlKTsgIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTUUxFeGNlcHRpb24gaXMgOiAiICsgZSk7CiAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgfQogICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhjZXB0aW9uIGlzIDogIiArIGUpOyAgICAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhjZXB0aW9uIGlzIDogIiArIGUpOwogICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFuc2FjdGlvbnMvdGVzdDEvZWpiL2Jtc2FtcGxlYmVhbjQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhbnNhY3Rpb25zL3Rlc3QxL2VqYi9ibXNhbXBsZWJlYW40LmphdmEKaW5kZXggOTU0MjcwMC4uZGQ1OWI3ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFuc2FjdGlvbnMvdGVzdDEvZWpiL2Jtc2FtcGxlYmVhbjQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYW5zYWN0aW9ucy90ZXN0MS9lamIvYm1zYW1wbGViZWFuNC5qYXZhCkBAIC0yNSw5ICsyNSw5IEBACiBpbXBvcnQgamF2YXguc3FsLio7CiBpbXBvcnQgamF2YS5zcWwuKjsKIAotcHVibGljIGNsYXNzIGJtc2FtcGxlYmVhbjQgaW1wbGVtZW50cyBTZXNzaW9uQmVhbiAKK3B1YmxpYyBjbGFzcyBibXNhbXBsZWJlYW40IGltcGxlbWVudHMgU2Vzc2lvbkJlYW4KIHsKLQlFSkJDb250ZXh0IGVqYmNvbnRleHQ7CisgICAgRUpCQ29udGV4dCBlamJjb250ZXh0OwogICAgICAgICBwcml2YXRlIHRyYW5zaWVudCBqYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dCBtX2N0eCA9IG51bGw7CiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQgY3R4KQogICAgIHsKQEAgLTM4LDE1ICszOCwxNSBAQAogICAgIHsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSAKKyAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKQogICAgIHsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIAorICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkKICAgICB7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkgCisgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkKICAgICB7CiAgICAgfQogCkBAIC02MCwxNSArNjAsMTUgQEAKICAgICAgICAgU3RhdGVtZW50IHN0bXQgPSBudWxsLHN0bXQyPW51bGw7CiAgICAgICAgIFJlc3VsdFNldCBycyA9IG51bGwscnMyPW51bGw7CiAgICB0cnkgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIGJlYW4yIC4uLi4iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbiBiZWFuMiAuLi4uIik7CiAgICAgICAgICAgICBJbml0aWFsQ29udGV4dCBjdHggPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSkgY3R4Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9qZGJjL29yYWNsZWRzMiIpOwotICAgICAgCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oImRzIGxvb2t1cCBzdWNjZWVkZWQiKTsKKyAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJkcyBsb29rdXAgc3VjY2VlZGVkIik7CiAgICAgICAgICAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW9uIHN1Y2NlZWRlZCIrY29ubik7CiAgICAgICAgICAgICBzdG10ID0gY29ubi5jcmVhdGVTdGF0ZW1lbnQoKTsKICAgICAgICAgICAgIFN0cmluZyBxdWVyeTEgPSAic2VsZWN0ICogZnJvbSBzdGF0dXMxIjsKLQkgICAgc3RtdC5leGVjdXRlVXBkYXRlKCJpbnNlcnQgaW50byBzdGF0dXMxIHZhbHVlcygnYmVhbjQnLDMpIik7CisgICAgICAgIHN0bXQuZXhlY3V0ZVVwZGF0ZSgiaW5zZXJ0IGludG8gc3RhdHVzMSB2YWx1ZXMoJ2JlYW40JywzKSIpOwogICAgICAgICAgICAgcnMgPSBzdG10LmV4ZWN1dGVRdWVyeShxdWVyeTEpOwogICAgICAgICAgICAgd2hpbGUocnMubmV4dCgpKQogICAgICAgICAgICAgewpAQCAtNzgsMTQgKzc4LDE0IEBACiAgICAgICAgICAgICBycy5jbG9zZSgpOwogICAgICAgICAgICAgc3RtdC5jbG9zZSgpOwogICAgICAgICAgICAgY29ubi5jbG9zZSgpOwotICAgICAgICB9IAorICAgICAgICB9CiAgICAgICAgIGNhdGNoIChTUUxFeGNlcHRpb24gZSl7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIH0KICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQogICAgICAgICB7Ci0gICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOyAKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYW5zYWN0aW9ucy90ZXN0MS9zZXJ2bGV0L2Jtc2VydmxldDQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhbnNhY3Rpb25zL3Rlc3QxL3NlcnZsZXQvYm1zZXJ2bGV0NC5qYXZhCmluZGV4IGE3MDIzYmUuLjM2OTg0MTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhbnNhY3Rpb25zL3Rlc3QxL3NlcnZsZXQvYm1zZXJ2bGV0NC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhbnNhY3Rpb25zL3Rlc3QxL3NlcnZsZXQvYm1zZXJ2bGV0NC5qYXZhCkBAIC0yNSw3ICsyNSw3IEBACiBpbXBvcnQgamF2YXgucm1pLlBvcnRhYmxlUmVtb3RlT2JqZWN0OwogaW1wb3J0IGphdmF4LnNxbC4qOwogaW1wb3J0IGNvbS5zdW4uczFhc2Rldi5qZGJjLnRyYW5zYWN0aW9ucy50ZXN0MS5lamIuKjsKLSAKKwogcHVibGljIGNsYXNzIGJtc2VydmxldDQgZXh0ZW5kcyBIdHRwU2VydmxldAogewogICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzKQpAQCAtMzMsNyArMzMsNyBAQAogICAgIHsKICAgICAgICAgIGRlZmF1bHRBY3Rpb24ocmVxLCByZXMpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlcykKICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uCiAgICAgewpAQCAtNTksNyArNTksNyBAQAogICAgICByZXMuc2V0Q29udGVudFR5cGUoInRleHQvcGxhaW4iKTsKICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzLmdldFdyaXRlcigpOwogICAgICBDb250ZXh0IGN0eDsKLQkgICAgICAgCisKICAgICAgdHJ5CiAgICAgICB7CiAgICAgICBIYXNodGFibGUgZW52ID0gbmV3IEhhc2h0YWJsZSgxKTsKQEAgLTcxLDEwICs3MSwxMCBAQAogICAgICAgcmVtb3RlID0gaG9tZS5jcmVhdGUoKTsKICAgICAgIG91dC5wcmludGxuKCJjYWxsaW5nICBiZWFuMSAiKTsKICAgICAgIG91dC5wcmludGxuKCIgdGhlIHJlc3VsdCBvZiBpbnZva2luZyB0aGUgZWpiIG1ldGhvZCBpcyAiICsgcmVtb3RlLnBlcmZvcm1EQk9wcygpKTsKLQkgICB9CisgICAgICAgfQogICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKICAgICAgICB7Ci0JICAgU3lzdGVtLm91dC5wcmludGxuKCIgRVJST1I6ICIgKyBlKTsKKyAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBFUlJPUjogIiArIGUpOwogICAgICAgIH0KICAgICAgICAgdHJ5CiAgICAgICAgIHsKQEAgLTgyLDE3ICs4MiwxNyBAQAogICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGNvbm4gPSBudWxsLGNvbm4yID0gbnVsbDsKICAgICAgICAgamF2YS5zcWwuU3RhdGVtZW50IHN0bXQgPSBudWxsLHN0bXQyID0gbnVsbDsKICAgICAgICAgamF2YS5zcWwuUmVzdWx0U2V0IHJzID0gbnVsbCxyczIgPSBudWxsOwotCWN0eCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCWRzID0gKERhdGFTb3VyY2UpY3R4Lmxvb2t1cCgiamRiYy9vcmExIik7Ci0JZHMyID0gKERhdGFTb3VyY2UpY3R4Lmxvb2t1cCgiamRiYy9vcmEyIik7Ci0gICAgICAgIAorICAgIGN0eCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgIGRzID0gKERhdGFTb3VyY2UpY3R4Lmxvb2t1cCgiamRiYy9vcmExIik7CisgICAgZHMyID0gKERhdGFTb3VyY2UpY3R4Lmxvb2t1cCgiamRiYy9vcmEyIik7CisKICAgICAgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQljb25uMiA9IGRzMi5nZXRDb25uZWN0aW9uKCk7Ci0Jc3RtdD1jb25uLmNyZWF0ZVN0YXRlbWVudCgpOwotCXN0bXQyPWNvbm4yLmNyZWF0ZVN0YXRlbWVudCgpOwotCW91dC5wcmludGxuKCJWZXJpZnlpbmcgdGFibGUgY29udGVudHMgLi4uLiIpOwotCXJzPXN0bXQuZXhlY3V0ZVF1ZXJ5KCJzZWxlY3QgKiBmcm9tIHN0YXR1czEiKTsKLQlpbnQgY291bnQ9MDsKKyAgICBjb25uMiA9IGRzMi5nZXRDb25uZWN0aW9uKCk7CisgICAgc3RtdD1jb25uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgIHN0bXQyPWNvbm4yLmNyZWF0ZVN0YXRlbWVudCgpOworICAgIG91dC5wcmludGxuKCJWZXJpZnlpbmcgdGFibGUgY29udGVudHMgLi4uLiIpOworICAgIHJzPXN0bXQuZXhlY3V0ZVF1ZXJ5KCJzZWxlY3QgKiBmcm9tIHN0YXR1czEiKTsKKyAgICBpbnQgY291bnQ9MDsKICAgICAgICAgIHdoaWxlIChycy5uZXh0KCkpCiAgICAgICAgIHtjb3VudCsrOwogICAgICAgICAgb3V0LnByaW50bG4oInJlY29yZCA9ICIrcnMuZ2V0U3RyaW5nKDEpKTsKQEAgLTEwNSwyNSArMTA1LDI1IEBACiAgICAgICAgICB9CiAgICAgICAgICBvdXQucHJpbnRsbigiVG90YWwgUmVjb3JkcyBpbiB0YWJsZTEgPSAiK2NvdW50KTsKICAgICAgICAgb3V0LnByaW50bG4oIlRvdGFsIFJlY29yZHMgaW4gdGFibGUyID0gIitjb3VudDIpOwotCWlmICgoY291bnQ9PTEpJiYoY291bnQyPT0xKSkKKyAgICBpZiAoKGNvdW50PT0xKSYmKGNvdW50Mj09MSkpCiAgICAgICAgICBvdXQucHJpbnRsbigiUmVzdWx0OlBBU1MiKTsKICAgICAgICAgIGVsc2UKICAgICAgICAgIG91dC5wcmludGxuKCJSZXN1bHQ6RkFJTCIpOwogICAgLy8gICAgICBzdG10LmV4ZWN1dGVVcGRhdGUoImRlbGV0ZSBmcm9tIHN0YXR1czEiKTsKICAgICAgICAvLyAgc3RtdDIuZXhlY3V0ZVVwZGF0ZSgiZGVsZXRlIGZyb20gc3RhdHVzMiIpOwogICAgICAgICAvLyBjb25uLmNvbW1pdCgpOwotICAgICAgIC8vICBjb25uMi5jb21taXQoKTsgIAorICAgICAgIC8vICBjb25uMi5jb21taXQoKTsKICAgICAgICAgIHJzLmNsb3NlKCk7CiAgICAgICAgICBvdXQucHJpbnRsbigiZGVsZXRlZCBpbiAxIik7CiAgICAgICAgICBvdXQucHJpbnRsbigiZGVsZXRlZCBpbiAyIik7Ci0JIHJzMi5jbG9zZSgpOworICAgICByczIuY2xvc2UoKTsKICAgICAgICAgIHN0bXQuY2xvc2UoKTsKLQkgc3RtdDIuY2xvc2UoKTsKLQkgY29ubi5jbG9zZSgpOwotCSBjb25uMi5jbG9zZSgpOyovCi0gICAgICAgIH1jYXRjaChFeGNlcHRpb24gZSl7fQkJCSAgICAgIAotCQkJCQkJCQkgICAgICAKLQkgIAorICAgICBzdG10Mi5jbG9zZSgpOworICAgICBjb25uLmNsb3NlKCk7CisgICAgIGNvbm4yLmNsb3NlKCk7Ki8KKyAgICAgICAgfWNhdGNoKEV4Y2VwdGlvbiBlKXt9CisKKwogICAgIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYW5zYWN0aW9ucy90ZXN0Mi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFuc2FjdGlvbnMvdGVzdDIvYnVpbGQucHJvcGVydGllcwppbmRleCA0MzEyNWRjLi4xYjlhOWU4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYW5zYWN0aW9ucy90ZXN0Mi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhbnNhY3Rpb25zL3Rlc3QyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImFzNy1qdHMiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CkBAIC0yNSw3ICsyNSw3IEBACiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0idHhuc3RhdHVzLXRlc3QyIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9InR4bnN0YXR1cy10ZXN0MiIvPiAgICAgICAgXHUwMDIwCiA8IS0tIHBvb2wxIC0tPgogPHByb3BlcnR5IG5hbWU9Im9yYS51c2VyMSIgdmFsdWU9ImFkaXR5YSIvPgogPHByb3BlcnR5IG5hbWU9Im9yYS5wd2QxIiB2YWx1ZT0iYWRpdHlhIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYW5zYWN0aW9ucy90ZXN0Mi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYW5zYWN0aW9ucy90ZXN0Mi9idWlsZC54bWwKaW5kZXggYmFiM2FlOC4uODQ5MGI4YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFuc2FjdGlvbnMvdGVzdDIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhbnNhY3Rpb25zL3Rlc3QyL2J1aWxkLnhtbApAQCAtMjksMTQgKzI5LDE0IEBACiAgICZjb21tb25CdWlsZDsKICAgJnRlc3Rwcm9wZXJ0aWVzOwogCi0gICAgCisKICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLHNldHVwLWpkYmMsc2V0dXAtc3FsLGRlcGxveSxydW53ZWIsdW5kZXBsb3ksY2xlYW51cC1qZGJjLGNsZWFudXAtc3FsIi8+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICA8ZGVsZXRlIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTU2LDcgKzU2LDcgQEAKICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CiAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KLS0tPiAgCistLT4KICAgPCEtLQogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci13YXIiLz4KQEAgLTc4LDcgKzc4LDcgQEAKICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1zZXJ2bGV0Ii8+Ci0gIC0tPiAgCisgIC0tPgogICAgIDxlY2hvIG1lc3NhZ2U9Im15IGJ1aWxkIGNsYXNzZXMgZGlyIGlzOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CiAgICAgPGRlbGV0ZSBmaWxlPSIke3dhci5maWxlfSIvPgogICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcCIvPgpAQCAtMTA0LDcgKzEwNCw3IEBACiAgICAgPGVjaG8gbWVzc2FnZT0iY3JlYXRlZCB3YXIgZmlsZSAke3dhci5maWxlfSIvPgogICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORiIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLWVhci13YXIiIGRlcGVuZHM9ImVqYi1qYXItY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2Utd2FyLWxvY2FsIj4KICAgICAgIDxwYXJhbSBuYW1lPSJ3YXIuY2xhc3NlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CkBAIC0xMTgsNyArMTE4LDcgQEAKICAgICAgIHRvZmlsZT0iJHthc3NlbWJsZS5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiCiAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICA8ZWFyIGVhcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIgYXBweG1sPSIke2FwcGxpY2F0aW9uLnhtbH0iPgotICAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iIAorICAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iCiAgICAgICAgIGluY2x1ZGVzPSIqLmphciwqLndhcixNRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sLGxpYi9yZXBvcnRlci5qYXIiLz4KICAgICA8L2Vhcj4KICAgPC90YXJnZXQ+CkBAIC0xNDcsOCArMTQ3LDggQEAKICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiIgPgogICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0ianRzLXhhLXBvb2wyIi8+CiAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9vcmFjbGVkczIiLz4KLSAgICA8L2FudGNhbGw+IAotICAgIAorICAgIDwvYW50Y2FsbD4KKwogICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtb3JhY2xlLXhhLXBvb2wiID4KICAgICAgIDxwYXJhbSBuYW1lPSJwb29sbmFtZSIgdmFsdWU9Imp0cy14YS1wb29sMSIvPgogICAgICAgPHBhcmFtIG5hbWU9Im9yYS51c2VyIiB2YWx1ZT0iJHtvcmEudXNlcjF9Ii8+CkBAIC0xNTYsMTMgKzE1NiwxMyBAQAogICAgICAgPHBhcmFtIG5hbWU9Im9yYS5zaWQiIHZhbHVlPSIke29yYS5zaWQxfSIvPgogICAgICAgPHBhcmFtIG5hbWU9Im9yYS51cmwiIHZhbHVlPSIke29yYS51cmwxfSIvPgogICAgIDwvYW50Y2FsbD4KLSAgICAKKwogICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIiA+CiAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJqdHMteGEtcG9vbDEiLz4KICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL29yYWNsZXRoaXJkIi8+CiAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJjbGVhbnVwLWpkYmMiID4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiIgPgogICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvb3JhY2xlZHMyIi8+CkBAIC0xNzEsMTYgKzE3MSwxNiBAQAogICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIiA+CiAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9vcmFjbGV0aGlyZCIvPgogICAgIDwvYW50Y2FsbD4KLSAgICAKKwogICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIiA+CiAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJqdHMteGEtcG9vbDIiLz4KICAgICA8L2FudGNhbGw+Ci0gICAgCisKICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLWNvbm5wb29sLWNvbW1vbiIgPgogICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0ianRzLXhhLXBvb2wxIi8+CiAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJzZXR1cC1zcWwiID4KICAgICA8ZWNobyBtZXNzYWdlPSJFeGVjdXRpbmcgc3FsIHN0YXRlbWVudCBhdCBmcm9tICR7Y3JlYXRlLnNxbC5maWxlMX0iLz4KICAgICA8c3FsCkBAIC0xOTIsNyArMTkyLDcgQEAKICAgICAgIG9uZXJyb3I9ImNvbnRpbnVlIgogICAgICAgcHJpbnQ9InllcyIKICAgICAgIGNsYXNzcGF0aD0iJHtkYmRyaXZlci5jbGFzc3BhdGh9Ii8+Ci0gICAgCisKICAgICA8ZWNobyBtZXNzYWdlPSJFeGVjdXRpbmcgc3FsIHN0YXRlbWVudCBhdCBmcm9tICR7Y3JlYXRlLnNxbC5maWxlMn0iLz4KICAgICA8c3FsCiAgICAgICBkcml2ZXI9IiR7ZGIuZHJpdmVyfSIKQEAgLTIxNyw3ICsyMTcsNyBAQAogICAgICAgb25lcnJvcj0iY29udGludWUiCiAgICAgICBwcmludD0ieWVzIgogICAgICAgY2xhc3NwYXRoPSIke2RiZHJpdmVyLmNsYXNzcGF0aH0iLz4KLSAgICAKKwogICAgIDxlY2hvIG1lc3NhZ2U9IkV4ZWN1dGluZyBzcWwgc3RhdGVtZW50IGF0IGZyb20gJHtkcm9wLnNxbC5maWxlMn0iLz4KICAgICA8c3FsCiAgICAgICBkcml2ZXI9IiR7ZGIuZHJpdmVyfSIKQEAgLTIzMCwyOCArMjMwLDI4IEBACiAgICAgICBjbGFzc3BhdGg9IiR7ZGJkcml2ZXIuY2xhc3NwYXRofSIvPgogCiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICA8L3RhcmdldD4KLSAgCi0gIAorCisKICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgogICA8L3RhcmdldD4KLSAgCi0gIDwhLS0gCisKKyAgPCEtLQogICBUb21jYXQncyBHVGVzdCB0b29sIGZvciB3ZWJ0ZXN0cwogICAtLT4KICAgPHRhcmdldCBuYW1lPSJydW53ZWIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICA8dGFza2RlZiBuYW1lPSJndGVzdCIgY2xhc3NuYW1lPSJvcmcuYXBhY2hlLnRvbWNhdC50YXNrLkdUZXN0IiAKKyAgICA8dGFza2RlZiBuYW1lPSJndGVzdCIgY2xhc3NuYW1lPSJvcmcuYXBhY2hlLnRvbWNhdC50YXNrLkdUZXN0IgogICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvdGVzdGRyaXZlcnNlY3VyaXR5Lmphcjoke2Vudi5BUFNfSE9NRX0vbGliL2NvbW1vbnMtbG9nZ2luZy5qYXIiLz4KICAgICA8cHJvcGVydHkgbmFtZT0id2dkaXIiIHZhbHVlPSIke2Vudi5BUFNfSE9NRX0vZGV2dGVzdHMvamRiYy90cmFuc2FjdGlvbnMvdGVzdDIiLz4KLSAgICA8Z3Rlc3QgcmVxdWVzdD0iR0VUIC90eG5zdGF0dXMtdGVzdDIvYm1zZXJ2bGV0IEhUVFAvMS4wIiAKKyAgICA8Z3Rlc3QgcmVxdWVzdD0iR0VUIC90eG5zdGF0dXMtdGVzdDIvYm1zZXJ2bGV0IEhUVFAvMS4wIgogICAgICAgZGVidWc9IjkiCiAgICAgICBmaXJzdFRhc2s9InRydWUiCiAgICAgICBsYXN0VGVzdD0idHJ1ZSIKQEAgLTI3Miw3ICsyNzIsNyBAQAogICAgICAgdGVzdENhc2VOYW1lPSJ0eG5zdGF0dXMtdGVzdDIiCiAgICAgICB0ZXN0Q2FzZURlc2NyaXB0aW9uPSJ0eG5zdGF0dXMtdGVzdDIiCiAgICAgICB0ZXN0U3RyYXRlZ3k9InR4bnN0YXR1cy10ZXN0MiIvPgotICA8L3RhcmdldD4gIAorICA8L3RhcmdldD4KIAogICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1qZGJjLW9yYWNsZS14YS1wb29sIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1jb25ucG9vbC1jb21tb24iID4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhbnNhY3Rpb25zL3Rlc3QyL2VqYi9ibXNhbXBsZTEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhbnNhY3Rpb25zL3Rlc3QyL2VqYi9ibXNhbXBsZTEuamF2YQppbmRleCA3ODgzNWFjLi42OWY5NTIxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYW5zYWN0aW9ucy90ZXN0Mi9lamIvYm1zYW1wbGUxLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFuc2FjdGlvbnMvdGVzdDIvZWpiL2Jtc2FtcGxlMS5qYXZhCkBAIC0yOCw2ICsyOCw2IEBACiBwdWJsaWMgaW50ZXJmYWNlIGJtc2FtcGxlMSBleHRlbmRzIEVKQk9iamVjdAogewogICAgIHB1YmxpYyBpbnQgcGVyZm9ybURCT3BzKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKLQlwdWJsaWMgaW50IHBlcmZvcm1EQk9wczIoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHB1YmxpYyBpbnQgcGVyZm9ybURCT3BzMigpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhbnNhY3Rpb25zL3Rlc3QyL2VqYi9ibXNhbXBsZWJlYW4xLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYW5zYWN0aW9ucy90ZXN0Mi9lamIvYm1zYW1wbGViZWFuMS5qYXZhCmluZGV4IDkwYmZlZWIuLjA1NjVkNzEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhbnNhY3Rpb25zL3Rlc3QyL2VqYi9ibXNhbXBsZWJlYW4xLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFuc2FjdGlvbnMvdGVzdDIvZWpiL2Jtc2FtcGxlYmVhbjEuamF2YQpAQCAtMjUsMTQgKzI1LDE0IEBACiBpbXBvcnQgamF2YXguc3FsLio7CiBpbXBvcnQgamF2YS5zcWwuKjsKIAotcHVibGljIGNsYXNzIGJtc2FtcGxlYmVhbjEgaW1wbGVtZW50cyBTZXNzaW9uQmVhbiAKK3B1YmxpYyBjbGFzcyBibXNhbXBsZWJlYW4xIGltcGxlbWVudHMgU2Vzc2lvbkJlYW4KIHsKLQlFSkJDb250ZXh0IGVqYmNvbnRleHQ7Ci10cmFuc2llbnQJamF2YXguc3FsLkRhdGFTb3VyY2UgZHMsZHMyOwotdHJhbnNpZW50CWphdmEuc3FsLkNvbm5lY3Rpb24gY29ubiA9IG51bGwsY29ubjI9bnVsbDsKKyAgICBFSkJDb250ZXh0IGVqYmNvbnRleHQ7Cit0cmFuc2llbnQgICAgamF2YXguc3FsLkRhdGFTb3VyY2UgZHMsZHMyOwordHJhbnNpZW50ICAgIGphdmEuc3FsLkNvbm5lY3Rpb24gY29ubiA9IG51bGwsY29ubjI9bnVsbDsKIHRyYW5zaWVudCAgICBTdGF0ZW1lbnQgc3RtdCA9IG51bGwsc3RtdDI9bnVsbDsKIHRyYW5zaWVudCAgICBSZXN1bHRTZXQgcnMgPSBudWxsLHJzMj1udWxsOwotCQorCiAKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChqYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dCBjdHgpCiAgICAgewpAQCAtNDMsMTUgKzQzLDE1IEBACiAgICAgewogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIAorICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpCiAgICAgewogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgCisgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKQogICAgIHsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSAKKyAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKQogICAgIHsKICAgICB9CiAKQEAgLTYzLDIxICs2MywyMSBAQAogICAgIHsKICAgICAgICAgdHJ5IHsKIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIG1ldGhvZDEiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbiBtZXRob2QxIik7CiAgICAgICAgICAgICBJbml0aWFsQ29udGV4dCBjdHggPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIERhdGFTb3VyY2UgZHMgPSAoRGF0YVNvdXJjZSkgY3R4Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9qZGJjL29yYWNsZXRoaXJkIik7Ci0gICAgICAJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZHMgbG9va3VwIHN1Y2NlZWRlZCIpOworICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImRzIGxvb2t1cCBzdWNjZWVkZWQiKTsKICAgICAgICAgICAgIFVzZXJUcmFuc2FjdGlvbiB0eCA9KFVzZXJUcmFuc2FjdGlvbiltX2N0eC5nZXRVc2VyVHJhbnNhY3Rpb24oKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidXR4IHN1Y2NlZWRlZCIrdHgpOyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidXR4IHN1Y2NlZWRlZCIrdHgpOwogICAgICAgICAgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGlvbiBzdWNjZWVkZWQiK2Nvbm4pOwotCSAgICB0eC5iZWdpbigpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0eG4gc3RhdHVzIDoiICt0eC5nZXRTdGF0dXMoKSk7IAorICAgICAgICB0eC5iZWdpbigpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0eG4gc3RhdHVzIDoiICt0eC5nZXRTdGF0dXMoKSk7CiAgICAgICAgICAgICAvL2Nvbm4gPSBkcy5nZXRDb25uZWN0aW9uKCk7CiAgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGlvbiBzdWNjZWVkZWQiK2Nvbm4pOwogICAgICAgICAgICAgc3RtdCA9IGNvbm4uY3JlYXRlU3RhdGVtZW50KCk7Ci0JICAgIC8vc3RtdC5leGVjdXRlUXVlcnkoImRlbGV0ZSBmcm9tIHN0YXR1czIxIik7Ci0JICAgIHN0bXQuZXhlY3V0ZVVwZGF0ZSgiaW5zZXJ0IGludG8gc3RhdHVzMjEgdmFsdWVzKCdtZXRob2QxJywzKSIpOworICAgICAgICAvL3N0bXQuZXhlY3V0ZVF1ZXJ5KCJkZWxldGUgZnJvbSBzdGF0dXMyMSIpOworICAgICAgICBzdG10LmV4ZWN1dGVVcGRhdGUoImluc2VydCBpbnRvIHN0YXR1czIxIHZhbHVlcygnbWV0aG9kMScsMykiKTsKICAgICAgICAgICAgIFN0cmluZyBxdWVyeTEgPSAic2VsZWN0ICogZnJvbSBzdGF0dXMyMSI7CiAgICAgICAgICAgICBycyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHF1ZXJ5MSk7CiAgICAgICAgICAgICB3aGlsZShycy5uZXh0KCkpCkBAIC04NSwxNSArODUsMTUgQEAKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxhc3QgTmFtZTogIiArIHJzLmdldFN0cmluZygiTkFNRSIpKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZpcnN0IE5hbWU6ICIgKyBycy5nZXRJbnQoIm51bSIpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAKKyAgICAgICAgfQogICAgICAgICBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU1FMRXhjZXB0aW9uIGlzIDogIiArIGUpOyAgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNRTEV4Y2VwdGlvbiBpcyA6ICIgKyBlKTsKICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIH0KICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQogICAgICAgICB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4Y2VwdGlvbiBpcyA6ICIgKyBlKTsgICAgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4Y2VwdGlvbiBpcyA6ICIgKyBlKTsKICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIH0KIApAQCAtMTAxLDQyICsxMDEsNDIgQEAKICAgICB9CiAKIAotCSBwdWJsaWMgaW50IHBlcmZvcm1EQk9wczIoKQotCSAgICAgewotCSAgIHRyeXsKLQkJICBJbml0aWFsQ29udGV4dCBjdHggPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkJICBTeXN0ZW0ub3V0LnByaW50bG4oImluIG1ldGhvZDIiKTsKLQkJICBkczIgPSAoRGF0YVNvdXJjZSkgY3R4Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9qZGJjL29yYWNsZWRzMiIpOwotCQkgIFN5c3RlbS5vdXQucHJpbnRsbigic2Vjb25kIGRzIGxvb2t1cCIpOwotCQkgIFVzZXJUcmFuc2FjdGlvbiB0eCA9KFVzZXJUcmFuc2FjdGlvbiltX2N0eC5nZXRVc2VyVHJhbnNhY3Rpb24oKTsKLQkJICBTeXN0ZW0ub3V0LnByaW50bG4oImdvdCBzZWNvbmQgdHgiK3R4KTsKLQkJICBTeXN0ZW0ub3V0LnByaW50bG4oInR4biBzdGF0dXMgOiIgK3R4LmdldFN0YXR1cygpKTsKKyAgICAgcHVibGljIGludCBwZXJmb3JtREJPcHMyKCkKKyAgICAgICAgIHsKKyAgICAgICB0cnl7CisgICAgICAgICAgSW5pdGlhbENvbnRleHQgY3R4ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbiBtZXRob2QyIik7CisgICAgICAgICAgZHMyID0gKERhdGFTb3VyY2UpIGN0eC5sb29rdXAoImphdmE6Y29tcC9lbnYvamRiYy9vcmFjbGVkczIiKTsKKyAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInNlY29uZCBkcyBsb29rdXAiKTsKKyAgICAgICAgICBVc2VyVHJhbnNhY3Rpb24gdHggPShVc2VyVHJhbnNhY3Rpb24pbV9jdHguZ2V0VXNlclRyYW5zYWN0aW9uKCk7CisgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJnb3Qgc2Vjb25kIHR4Iit0eCk7CisgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0eG4gc3RhdHVzIDoiICt0eC5nZXRTdGF0dXMoKSk7CiAKLQkgICAgICAgICAgY29ubjIgPSBkczIuZ2V0Q29ubmVjdGlvbigpOwotCSAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3Rpb24gc3VjY2VlZGVkIiArY29ubjIpOwotCQkgIHN0bXQyID0gY29ubjIuY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgICAgICAgIGNvbm4yID0gZHMyLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW9uIHN1Y2NlZWRlZCIgK2Nvbm4yKTsKKyAgICAgICAgICBzdG10MiA9IGNvbm4yLmNyZWF0ZVN0YXRlbWVudCgpOwogICAgICAgICAgICAgICAvLyAgICBzdG10Mi5leGVjdXRlUXVlcnkoImRlbGV0ZSBmcm9tIHN0YXR1czIiKTsKLQkJICBzdG10Mi5leGVjdXRlVXBkYXRlKCJpbnNlcnQgaW50byBzdGF0dXMyIHZhbHVlcygnbWV0aG9kMicpIik7Ci0JCSAgU3RyaW5nIHF1ZXJ5MSA9ICJzZWxlY3QgKiBmcm9tIHN0YXR1czIiOwotCQkgIHJzMiA9IHN0bXQyLmV4ZWN1dGVRdWVyeShxdWVyeTEpOwotCQkgIFN5c3RlbS5vdXQucHJpbnRsbigiYWZ0ZXIgcnMyIik7Ci0JCSAgIHdoaWxlKHJzMi5uZXh0KCkpCi0JCSAgIHsKLQkJICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMYXN0IE5hbWU6ICIgKyByczIuZ2V0U3RyaW5nKCJOQU1FIikpOwotCQkgICB9CisgICAgICAgICAgc3RtdDIuZXhlY3V0ZVVwZGF0ZSgiaW5zZXJ0IGludG8gc3RhdHVzMiB2YWx1ZXMoJ21ldGhvZDInKSIpOworICAgICAgICAgIFN0cmluZyBxdWVyeTEgPSAic2VsZWN0ICogZnJvbSBzdGF0dXMyIjsKKyAgICAgICAgICByczIgPSBzdG10Mi5leGVjdXRlUXVlcnkocXVlcnkxKTsKKyAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImFmdGVyIHJzMiIpOworICAgICAgICAgICB3aGlsZShyczIubmV4dCgpKQorICAgICAgICAgICB7CisgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTGFzdCBOYW1lOiAiICsgcnMyLmdldFN0cmluZygiTkFNRSIpKTsKKyAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0eG4gc3RhdHVzIDoiICt0eC5nZXRTdGF0dXMoKSk7Ci0JLy8gICAgICAgIFRocmVhZC5zbGVlcCgxMDAwMDApOwkJCQotCQkgIFN5c3RlbS5vdXQucHJpbnRsbigidHhuIHN0YXR1cyA6IiArdHguZ2V0U3RhdHVzKCkpOwotCSAgCSAgcnMuY2xvc2UoKTsgCi0JICAgICAgICAgIHJzMi5jbG9zZSgpOwotCQkgIHN0bXQuY2xvc2UoKTsKLQkgICAgICAgICAgY29ubi5jbG9zZSgpOwotCQkgIHN0bXQyLmNsb3NlKCk7Ci0JCSAgY29ubjIuY2xvc2UoKTsKLQkJICB0eC5jb21taXQoKTsKLQkJfQotCQljYXRjaCAoU1FMRXhjZXB0aW9uIGUpCi0JCSB7CisgICAgLy8gICAgICAgIFRocmVhZC5zbGVlcCgxMDAwMDApOworICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidHhuIHN0YXR1cyA6IiArdHguZ2V0U3RhdHVzKCkpOworICAgICAgICAgICAgcnMuY2xvc2UoKTsKKyAgICAgICAgICAgICAgcnMyLmNsb3NlKCk7CisgICAgICAgICAgc3RtdC5jbG9zZSgpOworICAgICAgICAgICAgICBjb25uLmNsb3NlKCk7CisgICAgICAgICAgc3RtdDIuY2xvc2UoKTsKKyAgICAgICAgICBjb25uMi5jbG9zZSgpOworICAgICAgICAgIHR4LmNvbW1pdCgpOworICAgICAgICB9CisgICAgICAgIGNhdGNoIChTUUxFeGNlcHRpb24gZSkKKyAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJleGNlcHRpb24gIiArIGUuZ2V0TWVzc2FnZSgpKTsKQEAgLTE0NCwyNSArMTQ0LDI1IEBACiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZXJyb3IgY29kZSIgK2UuZ2V0RXJyb3JDb2RlKCkpOwogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInFsIHN0YXRlICIgK2UuZ2V0U1FMU3RhdGUoKSk7CiAKLSAgICAgICAgICAgICAgIC8qICAgCi0JCQllPWUuZ2V0TmV4dEV4Y2VwdGlvbigpOworICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgIGU9ZS5nZXROZXh0RXhjZXB0aW9uKCk7CiAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZXhjZXB0aW9uICIgKyBlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZXJyb3IgY29kZSIgK2UuZ2V0RXJyb3JDb2RlKCkpOwogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInFsIHN0YXRlICIgK2UuZ2V0U1FMU3RhdGUoKSk7Ci0JICAgICAgICAqLwkgICAgCisgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKIAotCQkgIH1jYXRjaChFeGNlcHRpb24gZXgpCisgICAgICAgICAgfWNhdGNoKEV4Y2VwdGlvbiBleCkKICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZXhjZXB0aW9uICIgKyBleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQotCQljYXRjaCAoRXhjZXB0aW9uIGV4KQotCQkgewotCQkgU3lzdGVtLm91dC5wcmludGxuKCJFeGNlcHRpb24gaXMgOiAiICsgZXguZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleCkKKyAgICAgICAgIHsKKyAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhjZXB0aW9uIGlzIDogIiArIGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFuc2FjdGlvbnMvdGVzdDIvc2VydmxldC9ibXNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhbnNhY3Rpb25zL3Rlc3QyL3NlcnZsZXQvYm1zZXJ2bGV0LmphdmEKaW5kZXggZDk0OWFlMS4uMGJiYzcyMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFuc2FjdGlvbnMvdGVzdDIvc2VydmxldC9ibXNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYW5zYWN0aW9ucy90ZXN0Mi9zZXJ2bGV0L2Jtc2VydmxldC5qYXZhCkBAIC0yNiw3ICsyNiw3IEBACiBpbXBvcnQgamF2YXguc3FsLio7CiBpbXBvcnQgY29tLnN1bi5zMWFzZGV2LmpkYmMudHJhbnNhY3Rpb25zLnRlc3QyLmVqYi4qOwogCi0gCisKIHB1YmxpYyBjbGFzcyBibXNlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldAogewogICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzKQpAQCAtMzQsNyArMzQsNyBAQAogICAgIHsKICAgICAgICAgIGRlZmF1bHRBY3Rpb24ocmVxLCByZXMpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlcykKICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uCiAgICAgewpAQCAtNjEsMTMgKzYxLDEzIEBACiAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlcy5nZXRXcml0ZXIoKTsKICAgICAgQ29udGV4dCBjdHg7CiAgICAgIFByb3BlcnRpZXMgcDsKLQkgICAgICAgCisKICAgICAgdHJ5CiAgICAgICB7Ci0gICAJICBIYXNodGFibGUgZW52ID0gbmV3IEhhc2h0YWJsZSgxKTsKKyAgICAgICAgIEhhc2h0YWJsZSBlbnYgPSBuZXcgSGFzaHRhYmxlKDEpOwogICAgICAgZW52LnB1dCgiamF2YXgubmFtaW5nLmZhY3RvcnkuaW5pdGlhbCIsICJjb20ubmV0c2NhcGUuc2VydmVyLmpuZGkuUm9vdENvbnRleHRGYWN0b3J5Iik7Ci0gCSAgY3R4ID0gbmV3IEluaXRpYWxDb250ZXh0KGVudik7Ci0gICAgICAgLy9UZXN0VXRpbC5pbml0KHApOyAKKyAgICAgICBjdHggPSBuZXcgSW5pdGlhbENvbnRleHQoZW52KTsKKyAgICAgICAvL1Rlc3RVdGlsLmluaXQocCk7CiAgICAgICBPYmplY3Qgb2JqcmVmID0gY3R4Lmxvb2t1cCgiZWpiL2Jtc2FtcGxlYmVhbjEiKTsKICAgICAgIGhvbWUgPSAoYm1zYW1wbGUxaG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCBibXNhbXBsZTFob21lLmNsYXNzKTsKICAgICAgIHJlbW90ZSA9IGhvbWUuY3JlYXRlKCk7CkBAIC03NSwxMCArNzUsMTAgQEAKICAgICAgIG91dC5wcmludGxuKCIgdGhlIHJlc3VsdCBvZiBpbnZva2luZyB0aGUgZWpiIG1ldGhvZCBpcyAiICsgcmVtb3RlLnBlcmZvcm1EQk9wcygpKTsKICAgICAgICBvdXQucHJpbnRsbigiY2FsbGluZyBNMiAtPkRCMiIpOwogICAgICAgb3V0LnByaW50bG4oIi4uLi4uLiByZXN1bHQgb2YgaW52b2tpbmcgdGhlIGVqYiBtZXRob2QgaXMgIiArIHJlbW90ZS5wZXJmb3JtREJPcHMyKCkpOwotCSAgIH0KKyAgICAgICB9CiAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQogICAgICAgIHsKLQkgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBFUlJPUjogIiArIGUpOworICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIEVSUk9SOiAiICsgZSk7CiAgICAgICAgfQogICAgICAgdHJ5CiAgICAgICAgIHsKQEAgLTg2LDE3ICs4NiwxNyBAQAogICAgICAgICBqYXZhLnNxbC5Db25uZWN0aW9uIGNvbm4gPSBudWxsLGNvbm4yID0gbnVsbDsKICAgICAgICAgamF2YS5zcWwuU3RhdGVtZW50IHN0bXQgPSBudWxsLHN0bXQyID0gbnVsbDsKICAgICAgICAgamF2YS5zcWwuUmVzdWx0U2V0IHJzID0gbnVsbCxyczIgPSBudWxsOwotCWN0eCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCWRzID0gKERhdGFTb3VyY2UpY3R4Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9qZGJjL29yYWNsZXRoaXJkIik7Ci0JZHMyID0gKERhdGFTb3VyY2UpY3R4Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9qZGJjL29yYWNsZWRzMiIpOwotICAgICAgICAKKyAgICBjdHggPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICBkcyA9IChEYXRhU291cmNlKWN0eC5sb29rdXAoImphdmE6Y29tcC9lbnYvamRiYy9vcmFjbGV0aGlyZCIpOworICAgIGRzMiA9IChEYXRhU291cmNlKWN0eC5sb29rdXAoImphdmE6Y29tcC9lbnYvamRiYy9vcmFjbGVkczIiKTsKKwogICAgICAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCWNvbm4yID0gZHMyLmdldENvbm5lY3Rpb24oKTsKLQlzdG10PWNvbm4uY3JlYXRlU3RhdGVtZW50KCk7Ci0Jc3RtdDI9Y29ubjIuY3JlYXRlU3RhdGVtZW50KCk7Ci0Jb3V0LnByaW50bG4oIi4uLi4uLi4uLi5WZXJpZnlpbmcgdGFibGUgY29udGVudHMgLi4uLiIpOwotCXJzPXN0bXQuZXhlY3V0ZVF1ZXJ5KCJzZWxlY3QgKiBmcm9tIHN0YXR1czIxIik7Ci0JaW50IGNvdW50PTA7CisgICAgY29ubjIgPSBkczIuZ2V0Q29ubmVjdGlvbigpOworICAgIHN0bXQ9Y29ubi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICBzdG10Mj1jb25uMi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICBvdXQucHJpbnRsbigiLi4uLi4uLi4uLlZlcmlmeWluZyB0YWJsZSBjb250ZW50cyAuLi4uIik7CisgICAgcnM9c3RtdC5leGVjdXRlUXVlcnkoInNlbGVjdCAqIGZyb20gc3RhdHVzMjEiKTsKKyAgICBpbnQgY291bnQ9MDsKICAgICAgICAgIHdoaWxlIChycy5uZXh0KCkpCiAgICAgICAgIHtjb3VudCsrOwogICAgICAgICAgb3V0LnByaW50bG4oInJlY29yZCA9ICIrcnMuZ2V0U3RyaW5nKDEpKTsKQEAgLTEwOSwyNiArMTA5LDI2IEBACiAgICAgICAgICB9CiAgICAgICAgICBvdXQucHJpbnRsbigiVG90YWwgUmVjb3JkcyBpbiB0YWJsZTEgPSAiK2NvdW50KTsKICAgICAgICAgb3V0LnByaW50bG4oIlRvdGFsIFJlY29yZHMgaW4gdGFibGUyID0gIitjb3VudDIpOwotCWlmICgoY291bnQ9PTEpJiYoY291bnQyPT0xKSkKKyAgICBpZiAoKGNvdW50PT0xKSYmKGNvdW50Mj09MSkpCiAgICAgICAgICBvdXQucHJpbnRsbigiUmVzdWx0OkZBSUwiKTsKICAgICAgICAgIGVsc2UKICAgICAgICAgIG91dC5wcmludGxuKCJSZXN1bHQ6UEFTUyIpOwogICAgICAgICAgc3RtdC5leGVjdXRlVXBkYXRlKCJkZWxldGUgZnJvbSBzdGF0dXMyMSIpOwogICAgICAgICAgc3RtdDIuZXhlY3V0ZVVwZGF0ZSgiZGVsZXRlIGZyb20gc3RhdHVzMiIpOwogICAgICAgICAgY29ubi5jb21taXQoKTsKLSAgICAgICAgIGNvbm4yLmNvbW1pdCgpOyAgCisgICAgICAgICBjb25uMi5jb21taXQoKTsKICAgICAgICAgIHJzLmNsb3NlKCk7CiAgICAgICAgICBvdXQucHJpbnRsbigiZGVsZXRlZCBpbiAxIik7CiAgICAgICAgICBvdXQucHJpbnRsbigiZGVsZXRlZCBpbiAyIik7Ci0JIHJzMi5jbG9zZSgpOworICAgICByczIuY2xvc2UoKTsKICAgICAgICAgIHN0bXQuY2xvc2UoKTsKLQlzdG10Mi5jbG9zZSgpOworICAgIHN0bXQyLmNsb3NlKCk7CiAKLQkgY29ubi5jbG9zZSgpOwotCSBjb25uMi5jbG9zZSgpOwotICAgICAgICB9Y2F0Y2goRXhjZXB0aW9uIGUpe30JCQkgICAgICAKLQkJCQkJCQkJICAgICAgCi0JICAKKyAgICAgY29ubi5jbG9zZSgpOworICAgICBjb25uMi5jbG9zZSgpOworICAgICAgICB9Y2F0Y2goRXhjZXB0aW9uIGUpe30KKworCiAgICAgfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhbnNwYXJlbnQtcG9vbC1yZWNvbmZpZy1yZXNvdXJjZXMteG1sL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYW5zcGFyZW50LXBvb2wtcmVjb25maWctcmVzb3VyY2VzLXhtbC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGMzNDJlYTQuLjk3ODA1NDQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhbnNwYXJlbnQtcG9vbC1yZWNvbmZpZy1yZXNvdXJjZXMteG1sL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFuc3BhcmVudC1wb29sLXJlY29uZmlnLXJlc291cmNlcy14bWwvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTkgKzE1LDE5IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItYm1wLXRyYW5zcGFyZW50X3Bvb2xfcmVjb25maWciLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IjEyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYW5zcGFyZW50LXBvb2wtcmVjb25maWctcmVzb3VyY2VzLXhtbC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYW5zcGFyZW50LXBvb2wtcmVjb25maWctcmVzb3VyY2VzLXhtbC9idWlsZC54bWwKaW5kZXggYzM1MTkzYi4uNDlkNjNhNiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFuc3BhcmVudC1wb29sLXJlY29uZmlnLXJlc291cmNlcy14bWwvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhbnNwYXJlbnQtcG9vbC1yZWNvbmZpZy1yZXNvdXJjZXMteG1sL2J1aWxkLnhtbApAQCAtNzEsNyArNzEsNyBAQAogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDwhLS08YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qZGJjLWNvbW1vbiIvPi0tPgogCi0JPCEtLSBXb3JrYXJvdW5kIGZvciBpc3N1ZSAxODc4MyAtLT4KKyAgICA8IS0tIFdvcmthcm91bmQgZm9yIGlzc3VlIDE4NzgzIC0tPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0iY3JlYXRlLW1vZHVsZS1jb25maWciLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgpAQCAtMTIzLDcgKzEyMyw3IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLmphdmE6YXBwL3FsLWpkYmMtcG9vbC5wcm9wZXJ0eS5keW5hbWljLXJlY29uZmlndXJhdGlvbi13YWl0LXRpbWVvdXQtaW4tc2Vjb25kcz0xMjAiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgICAgICAKKwogCiAgICAgPC90YXJnZXQ+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhbnNwYXJlbnQtcG9vbC1yZWNvbmZpZy1yZXNvdXJjZXMteG1sL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhbnNwYXJlbnQtcG9vbC1yZWNvbmZpZy1yZXNvdXJjZXMteG1sL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCBkZDRjNWU1Li4xMWU2MWVlIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYW5zcGFyZW50LXBvb2wtcmVjb25maWctcmVzb3VyY2VzLXhtbC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFuc3BhcmVudC1wb29sLXJlY29uZmlnLXJlc291cmNlcy14bWwvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDEwICsxLDEwIEBACi0NCi1Ecm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjsNCi0NCi1DUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQotSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyIFZBTFVFUygxLCAnd3h5eicpOw0KKworRHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI7CisKK0NSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXIgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQorKTsKKworSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyIFZBTFVFUygxLCAnd3h5eicpOwogSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyIFZBTFVFUygyLCAncHFycycpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhbnNwYXJlbnQtcG9vbC1yZWNvbmZpZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFuc3BhcmVudC1wb29sLXJlY29uZmlnL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYzM0MmVhNC4uOTc4MDU0NCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFuc3BhcmVudC1wb29sLXJlY29uZmlnL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFuc3BhcmVudC1wb29sLXJlY29uZmlnL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE5ICsxNSwxOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpiLWJtcC10cmFuc3BhcmVudF9wb29sX3JlY29uZmlnIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIxMiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFuc3BhcmVudC1wb29sLXJlY29uZmlnL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhbnNwYXJlbnQtcG9vbC1yZWNvbmZpZy9idWlsZC54bWwKaW5kZXggODRjNWNlZi4uOTI2YjJlNSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFuc3BhcmVudC1wb29sLXJlY29uZmlnL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYW5zcGFyZW50LXBvb2wtcmVjb25maWcvYnVpbGQueG1sCkBAIC02OCw3ICs2OCw3IEBACiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktamRiYy1jb21tb24iLz4KIAotCTwhLS0gV29ya2Fyb3VuZCBmb3IgaXNzdWUgMTg3ODMgLS0+CisgICAgPCEtLSBXb3JrYXJvdW5kIGZvciBpc3N1ZSAxODc4MyAtLT4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9ImNyZWF0ZS1tb2R1bGUtY29uZmlnIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKQEAgLTExOSw3ICsxMTksNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC5xbC1qZGJjLXBvb2wucHJvcGVydHkuZHluYW1pYy1yZWNvbmZpZ3VyYXRpb24td2FpdC10aW1lb3V0LWluLXNlY29uZHM9MTIwIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICAgICAgCisKIAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhbnNwYXJlbnQtcG9vbC1yZWNvbmZpZy9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3RyYW5zcGFyZW50LXBvb2wtcmVjb25maWcvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IGRkNGM1ZTUuLjExZTYxZWUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHJhbnNwYXJlbnQtcG9vbC1yZWNvbmZpZy9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90cmFuc3BhcmVudC1wb29sLXJlY29uZmlnL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSwxMCArMSwxMCBAQAotDQotRHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI7DQotDQotQ1JFQVRFIFRBQkxFIGN1c3RvbWVyX3N0bXRfd3JhcHBlciAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikNCi0pOw0KLQ0KLUlOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlciBWQUxVRVMoMSwgJ3d4eXonKTsNCisKK0Ryb3AgdGFibGUgY3VzdG9tZXJfc3RtdF93cmFwcGVyOworCitDUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikKKyk7CisKK0lOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlciBWQUxVRVMoMSwgJ3d4eXonKTsKIElOU0VSVCBJTlRPIGN1c3RvbWVyX3N0bXRfd3JhcHBlciBWQUxVRVMoMiwgJ3BxcnMnKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4U3RyZXNzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4U3RyZXNzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNmJjNTUzNS4uNDYzMGFhNCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eFN0cmVzcy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhTdHJlc3MvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTkgKzE1LDE5IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItYm1wIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1lbnJvbGxlciIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZW5yb2xsZXIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0iZGVmYXVsdC1pbnN0YW5jZSIgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4U3RyZXNzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhTdHJlc3MvYnVpbGQueG1sCmluZGV4IDMyM2NhN2UuLmFiODhkMzggMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhTdHJlc3MvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhTdHJlc3MvYnVpbGQueG1sCkBAIC0zMiwxNyArMzIsMTcgQEAKICAgICAmcnVuOwogCiAgIDwhLS0gIDx0YXJnZXQgbmFtZT0iYWxsIj4KLQk8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJzZXR1cCIvPgotCTxhbnRjYWxsIHRhcmdldD0iYXV0b2RlcGxveSIvPgotCTxhbnRjYWxsIHRhcmdldD0icnVuIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveSIvPgotCTxhbnRjYWxsIHRhcmdldD0idW5zZXR1cCIvPgotCTxhbnRjYWxsIHRhcmdldD0icmVzdGFydCIvPgotCTxhbnRjYWxsIHRhcmdldD0ic2V0dXAiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveSIvPgotCTxhbnRjYWxsIHRhcmdldD0icnVuIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveSIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InNldHVwIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJhdXRvZGVwbG95Ii8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4iLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95Ii8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bnNldHVwIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0Ii8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXR1cCIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95Ii8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4iLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95Ii8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5zZXR1cCIvPgogICAgIDwvdGFyZ2V0PiAtLT4KIApAQCAtNTYsNyArNTYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNjgsMTMgKzY4LDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovKlN0dWRlbnQqLmNsYXNzLCoqLypFbnJvbGxlciouY2xhc3MsKiovKkNvdXJzZSouY2xhc3MiIC8+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovQ291cnNlLmNsYXNzLCoqL0Vucm9sbGVyLmNsYXNzLCoqL1N0dWRlbnQuY2xhc3MsKiovKkhvbWUqLmNsYXNzLCoqLypDbGllbnQqLmNsYXNzIiAvPgogICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLW9yYWNsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9vcmFjbGUuc3FsIi8+CkBAIC04NywxNSArODcsMTUgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iYm1wRW5yb2xsZXJQb29sIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9ibXAtZW5yb2xsZXJEQi1jb250YWluZXIiLz4KLQk8L2FudGNhbGw+CisgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJibXBFbnJvbGxlclBvb2wiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2JtcC1lbnJvbGxlckRCLWFwcGxpY2F0aW9uIi8+Ci0JPC9hbnRjYWxsPgotCTxhbnRjYWxsIHRhcmdldD0icmVjb25maWctY29tbW9uIi8+CisgICAgPC9hbnRjYWxsPgorICAgIDxhbnRjYWxsIHRhcmdldD0icmVjb25maWctY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CiAKLSAgICA8dGFyZ2V0IG5hbWU9ImV4ZWN1dGUtb3JhY2xlLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24sIGNoZWNrLWRiIiBpZj0ib3JhY2xlIj4gCisgICAgPHRhcmdldCBuYW1lPSJleGVjdXRlLW9yYWNsZS1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uLCBjaGVjay1kYiIgaWY9Im9yYWNsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJkYi5kcml2ZXIiIHZhbHVlPSIke29yYWNsZS5kcml2ZXJ9Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZGIudXJsIiB2YWx1ZT0iJHtvcmFjbGUudXJsfSIvPgpAQCAtMTA1LDcgKzEwNSw3IEBACiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95LW9yYWNsZS1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uLCBjaGVjay1kYiIgaWY9Im9yYWNsZSI+IAorICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95LW9yYWNsZS1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uLCBjaGVjay1kYiIgaWY9Im9yYWNsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiCiAgICAgICAgICAgICAgdmFsdWU9ImNyZWF0ZS1qZGJjLWNvbm5lY3Rpb24tcG9vbApAQCAtMTI5LDI1ICsxMjksMjUgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iYm1wRW5yb2xsZXJQb29sIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9ibXAtZW5yb2xsZXJEQiIvPgotCTwvYW50Y2FsbD4KKyAgICA8L2FudGNhbGw+CiAKICAgICA8L3RhcmdldD4KIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95LXBvaW50YmFzZS1jb21tb24iIGRlcGVuZHM9ImluaXQtY29tbW9uLCBjaGVjay1kYiIgdW5sZXNzPSJvcmFjbGUiPiAKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveS1wb2ludGJhc2UtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiwgY2hlY2stZGIiIHVubGVzcz0ib3JhY2xlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktamRiYy1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iYm1wRW5yb2xsZXJQb29sIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9ibXAtZW5yb2xsZXJEQiIvPgotCTwvYW50Y2FsbD4KKyAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKLSAgICA8dGFyZ2V0IG5hbWU9ImV4ZWN1dGUtcG9pbnRiYXNlLWNvbW1vbiIgZGVwZW5kcz0iaW5pdC1jb21tb24sIGNoZWNrLWRiIiB1bmxlc3M9Im9yYWNsZSI+IAorICAgIDx0YXJnZXQgbmFtZT0iZXhlY3V0ZS1wb2ludGJhc2UtY29tbW9uIiBkZXBlbmRzPSJpbml0LWNvbW1vbiwgY2hlY2stZGIiIHVubGVzcz0ib3JhY2xlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8ZWNobyBtZXNzYWdlPSJEZXBsb3lpbmcgdmlhIGFzYWRtaW4uLi4iLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KQEAgLTE3Miw3ICsxNzIsNyBAQAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KICAgPCEtLSAgICA8ZWNobyBtZXNzYWdlPSJTSEVFVEFMIDogYnVnIGR1cmluZyB1bmRlcGxveW1lbnQuIFRoZSBnZW5lcmF0ZWQgZGlyIGRvZXMgbm90IGdldCBkZWxldGVkLiBIZW5jZSBmb3JjaW5nIGRlbGV0aW9uIGFzIGEgdGVtcG9yYXJ5IHNvbHV0aW9uLiIvPgogICAgICAgPGRlbGV0ZSBkaXI9IiR7ZGVwbG95ZWQtYXBwc30vJHthcHBuYW1lfUFwcF8xIi8+IC0tPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1bnNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtcG9pbnRiYXNlLWNvbW1vbiI+CkBAIC0xOTEsNyArMTkxLDcgQEAKICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iYm1wRW5yb2xsZXJQb29sIi8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2JtcC1lbnJvbGxlckRCIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KQEAgLTIwOCw3ICsyMDgsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJhdXRvZGVwbG95LWVhciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJEcm9wcGluZyB0aGUgYXBwIHVuZGVyIHRoZSBhdXRvZGVwbG95IGRpci4uLiIvPgotCTxkZWxldGUgZmlsZT0iJHthdXRvZGVwbG95LmRpcn0vJHthcHBuYW1lfUFwcC5lYXJfZGVwbG95ZWQiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICAgIDxkZWxldGUgZmlsZT0iJHthdXRvZGVwbG95LmRpcn0vJHthcHBuYW1lfUFwcC5lYXJfZGVwbG95ZWQiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICAgICAgICA8Y29weSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiCiAgICAgICAgICAgICB0b2Rpcj0iJHthdXRvZGVwbG95LmRpcn0iLz4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhTdHJlc3MvY2xpZW50L0Vucm9sbGVyQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4U3RyZXNzL2NsaWVudC9FbnJvbGxlckNsaWVudC5qYXZhCmluZGV4IGY1YjIzYjAuLjg3MWNkNGQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhTdHJlc3MvY2xpZW50L0Vucm9sbGVyQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eFN0cmVzcy9jbGllbnQvRW5yb2xsZXJDbGllbnQuamF2YQpAQCAtMjYsODAgKzI2LDgwIEBACiAKIC8vU3RyZXNzIENsaWVudAogcHVibGljIGNsYXNzIEVucm9sbGVyQ2xpZW50IHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYVEhSRUFEUz0gMTsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYQ1lDTEVTUEVSVEhSRUFEPTE7Ci0JcHJpdmF0ZSBzdGF0aWMgQXJyYXlMaXN0IHRocmVhZHNBTCA9IG5ldyBBcnJheUxpc3QoKTsKLQlwcml2YXRlIHN0YXRpYyBPYmplY3QgbG9jayA9IG5ldyBPYmplY3QoKTsKLQkKLQlwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdHVzID0KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYVEhSRUFEUz0gMTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYQ1lDTEVTUEVSVEhSRUFEPTE7CisgICAgcHJpdmF0ZSBzdGF0aWMgQXJyYXlMaXN0IHRocmVhZHNBTCA9IG5ldyBBcnJheUxpc3QoKTsKKyAgICBwcml2YXRlIHN0YXRpYyBPYmplY3QgbG9jayA9IG5ldyBPYmplY3QoKTsKKworICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0dXMgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBsb25nIHRpbWVTdGFydCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGFydGluZyB0aGUgdGVzdCIpOwotCSAgICBzdGF0dXMuYWRkRGVzY3JpcHRpb24oIlRlc3Rpbmcgc3RyZXNzIGNtcCByb3N0ZXIgYXBwLiIpOwotCSAgICBmb3IoaW50IGkgPSAwIDsgaSA8IE1BWFRIUkVBRFM7IGkrKyl7Ci0JCSAgICBmaW5hbCBpbnQgY250ID0gaTsKLQkJICAgIC8vY3JlYXRlIFRocnJlYWQgdG8gZXhlY3V0ZSBkb1Rlc3QKLQkJICAgIFRocmVhZCB0ID0gbmV3IFRocmVhZChuZXcgUnVubmFibGUoKXsKLQkJCSAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJICAgIHRyeSB7IAotCQkJCQkgICAgCi0JCQkJCSAgICBTdHJpbmcgdGhyZWFkSWQgPSAiVGhyLSIgKyBjbnQ7CisgICAgICAgIHN0YXR1cy5hZGREZXNjcmlwdGlvbigiVGVzdGluZyBzdHJlc3MgY21wIHJvc3RlciBhcHAuIik7CisgICAgICAgIGZvcihpbnQgaSA9IDAgOyBpIDwgTUFYVEhSRUFEUzsgaSsrKXsKKyAgICAgICAgICAgIGZpbmFsIGludCBjbnQgPSBpOworICAgICAgICAgICAgLy9jcmVhdGUgVGhycmVhZCB0byBleGVjdXRlIGRvVGVzdAorICAgICAgICAgICAgVGhyZWFkIHQgPSBuZXcgVGhyZWFkKG5ldyBSdW5uYWJsZSgpeworICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKworICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHRocmVhZElkID0gIlRoci0iICsgY250OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCIiK2NudCk7Ci0JCQkJCSAgICBmb3IoaW50IGo9MDsgaiA8IE1BWENZQ0xFU1BFUlRIUkVBRDsgaisrICl7Ci0JCQkJCQkgICAgU3lzdGVtLm91dC5wcmludCgiLiIpOwotCQkJCQkJICAgIGRvVGVzdCh0aHJlYWRJZCk7Ci0JCQkJCSAgICB9Ci0JCQkJICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCSAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkNhdWdodCBhbiBleGNlcHRpb24gaW4gVGhyZWFkOiAiICsgZS50b1N0cmluZygpKTsKLQkJCQkJICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQkJICAgIH0KLQkJCSAgICB9Ci0JCSAgICB9KTsKLQkJICAgIHRocmVhZHNBTC5hZGQodCk7Ci0JCSAgICB0LnN0YXJ0KCk7Ci0JICAgIH0KLQkgICAgCi0JICAgIC8vZmluYWxseSBqb2luIGFsbCB0aHJlYWRzCi0JICAgIGZvcihpbnQgaT0wOyBpIDwgdGhyZWFkc0FMLnNpemUoKTsgaSsrKXsKLQkJICAgICgoVGhyZWFkKSh0aHJlYWRzQUwuZ2V0KGkpKSkuam9pbigpOwotCSAgICB9Ci0JICAgIGxvbmcgdGltZVN0b3AgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkgICAgLy9BcHByb3hpbWF0ZWx5IDY1IHRyYW5zYWN0aW9ucyB0byBteVJvc3RlciBwZXIgY3ljbGUgcGVyIHRocmVhZAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAiICsgKGRvdWJsZSkoTUFYVEhSRUFEUypNQVhDWUNMRVNQRVJUSFJFQUQqNjUpICsgIiB0cmFuc2FjdGlvbnMgQ09NUExFVEVEIGluICIgKyAobG9uZykodGltZVN0b3AgLSB0aW1lU3RhcnQpICsgIm1zIiApOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGludCBqPTA7IGogPCBNQVhDWUNMRVNQRVJUSFJFQUQ7IGorKyApeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIi4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb1Rlc3QodGhyZWFkSWQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJDYXVnaHQgYW4gZXhjZXB0aW9uIGluIFRocmVhZDogIiArIGUudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB0aHJlYWRzQUwuYWRkKHQpOworICAgICAgICAgICAgdC5zdGFydCgpOworICAgICAgICB9CisKKyAgICAgICAgLy9maW5hbGx5IGpvaW4gYWxsIHRocmVhZHMKKyAgICAgICAgZm9yKGludCBpPTA7IGkgPCB0aHJlYWRzQUwuc2l6ZSgpOyBpKyspeworICAgICAgICAgICAgKChUaHJlYWQpKHRocmVhZHNBTC5nZXQoaSkpKS5qb2luKCk7CisgICAgICAgIH0KKyAgICAgICAgbG9uZyB0aW1lU3RvcCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgICAgICAvL0FwcHJveGltYXRlbHkgNjUgdHJhbnNhY3Rpb25zIHRvIG15Um9zdGVyIHBlciBjeWNsZSBwZXIgdGhyZWFkCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICIgKyAoZG91YmxlKShNQVhUSFJFQURTKk1BWENZQ0xFU1BFUlRIUkVBRCo2NSkgKyAiIHRyYW5zYWN0aW9ucyBDT01QTEVURUQgaW4gIiArIChsb25nKSh0aW1lU3RvcCAtIHRpbWVTdGFydCkgKyAibXMiICk7CiAKICAgICAgICAgICAgIGlmICggY2hlY2tJZlBhc3NlZCgpKSB7Ci0JICAgICAgICBzdGF0dXMuYWRkU3RhdHVzKCJMb29rcyBpdCBpcyBwYXNzZWQgIiAsIHN0YXR1cy5QQVNTKTsKKyAgICAgICAgICAgIHN0YXR1cy5hZGRTdGF0dXMoIkxvb2tzIGl0IGlzIHBhc3NlZCAiICwgc3RhdHVzLlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKLQkgICAgICAgIHN0YXR1cy5hZGRTdGF0dXMoIkxvb2tzIGl0IGlzIHBhc3NlZCAiICwgc3RhdHVzLkZBSUwpOworICAgICAgICAgICAgc3RhdHVzLmFkZFN0YXR1cygiTG9va3MgaXQgaXMgcGFzc2VkICIgLCBzdGF0dXMuRkFJTCk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHN0YXR1cy5wcmludFN1bW1hcnkoInJvc3RlckFwcElEIik7CiAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgwKTsKLQkgICAgCisKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkNhdWdodCBhbiBleGNlcHRpb24gaW4gbWFpbjogIiArIGV4LnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGRvVGVzdChTdHJpbmcgdGhyZWFkSWQpIHRocm93cyBFeGNlcHRpb257CiAgICAgICAgICAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlRW5yb2xsZXIiKTsKIAotICAgICAgICAgICAgRW5yb2xsZXJIb21lIGhvbWUgPSAKLSAgICAgICAgICAgICAgICAoRW5yb2xsZXJIb21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIAorICAgICAgICAgICAgRW5yb2xsZXJIb21lIGhvbWUgPQorICAgICAgICAgICAgICAgIChFbnJvbGxlckhvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5yb2xsZXJIb21lLmNsYXNzKTsKIAogICAgICAgICAgICAgRW5yb2xsZXIgZSA9IGhvbWUuY3JlYXRlKCk7CiAKICAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8TUFYQ1lDTEVTUEVSVEhSRUFEOyBpKyspIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc3VsdDogIiArIGUuZG9UZXN0KHRocmVhZElkKSk7Ci0gICAgICAgICAgICB9ICAgICAgIAorICAgICAgICAgICAgfQogCi0JICAgIGUucmVtb3ZlKCk7CisgICAgICAgIGUucmVtb3ZlKCk7CiAKICAgICB9CiAKQEAgLTEwNyw4ICsxMDcsOCBAQAogICAgICAgICAgICAgQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBPYmplY3Qgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZUVucm9sbGVyIik7CiAKLSAgICAgICAgICAgIEVucm9sbGVySG9tZSBob21lID0gCi0gICAgICAgICAgICAgICAgKEVucm9sbGVySG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCAKKyAgICAgICAgICAgIEVucm9sbGVySG9tZSBob21lID0KKyAgICAgICAgICAgICAgICAoRW5yb2xsZXJIb21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVucm9sbGVySG9tZS5jbGFzcyk7CiAKICAgICAgICAgICAgIEVucm9sbGVyIGUgPSBob21lLmNyZWF0ZSgpOwpAQCAtMTE3LDcgKzExNyw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4cGVjdGVkIFJlc3VsdCA6IDAiICApOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBY3R1YWwgUmVzdWx0IDogIiArIHJlc3VsdCk7CiAKLQkgICAgZS5yZW1vdmUoKTsKKyAgICAgICAgZS5yZW1vdmUoKTsKIAogICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSAwKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhTdHJlc3MvZWpiL0Vucm9sbGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4U3RyZXNzL2VqYi9FbnJvbGxlci5qYXZhCmluZGV4IGQzOWNkNzUuLjlmNzFjZGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhTdHJlc3MvZWpiL0Vucm9sbGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eFN0cmVzcy9lamIvRW5yb2xsZXIuamF2YQpAQCAtMjAsNyArMjAsNyBAQAogaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIAogcHVibGljIGludGVyZmFjZSBFbnJvbGxlciBleHRlbmRzIEVKQk9iamVjdCB7Ci0gCisKICAgIHB1YmxpYyBTdHJpbmcgZG9UZXN0KFN0cmluZyB0aHJlYWRJZCkKICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhTdHJlc3MvZWpiL0Vucm9sbGVyQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eFN0cmVzcy9lamIvRW5yb2xsZXJCZWFuLmphdmEKaW5kZXggM2M5OGUwMy4uNDA5NmI1YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eFN0cmVzcy9lamIvRW5yb2xsZXJCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eFN0cmVzcy9lamIvRW5yb2xsZXJCZWFuLmphdmEKQEAgLTE2LDcgKzE2LDcgQEAKIAogcGFja2FnZSBjb20uc3VuLnMxcGVxZS5lamIuYm1wLmVucm9sbGVyLmVqYjsKIAotaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsgCitpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGpha2FydGEuZWpiLio7CiBpbXBvcnQgamF2YS5zcWwuKjsKIGltcG9ydCBqYXZheC5zcWwuKjsKQEAgLTI1LDcgKzI1LDcgQEAKIGltcG9ydCBqYXZheC5uYW1pbmcuKjsKIAogcHVibGljIGNsYXNzIEVucm9sbGVyQmVhbiBpbXBsZW1lbnRzIFNlc3Npb25CZWFuIHsKLSAKKwogICAgIHByaXZhdGUgRGF0YVNvdXJjZSBkczsKICAgICBwcml2YXRlIERhdGFTb3VyY2UgZHNfY29udGFpbmVyOwogICAgIHByaXZhdGUgRGF0YVNvdXJjZSBkc19hcHA7CkBAIC01NywxMCArNTcsMTAgQEAKICAgICAgICAgdGVzdDEoaWQpOwogICAgICAgICB0ZXN0MihpZCk7CiAgICAgICAgIHRlc3QzKGlkKTsKLSAgICAgICAgdGVzdDQoaWQpOyAKKyAgICAgICAgdGVzdDQoaWQpOwogICAgICAgICB0ZXN0NShpZCk7Ci0gICAgICAgIHRlc3Q2KGlkKTsgCi0gICAgICAgIC8vdGVzdDcoaWQpOyAKKyAgICAgICAgdGVzdDYoaWQpOworICAgICAgICAvL3Rlc3Q3KGlkKTsKICAgICB9CiAKICAgICAvLyBUZXN0cyBhIHR4IGFuZCB2ZXJpZmllcyB0aGF0IHdvcmsgaXMgYWN0dWFsbHkgY29tbWl0dGVkLgpAQCAtNzIsNyArNzIsNyBAQAogCiAgICAgICAgIENvbm5lY3Rpb24gY29uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwogICAgICAgICBmb3IgKGludCBpPTA7IGkgPCA1OyBpKyspIHsKLSAgICAgICAgICAgIGluc2VydEVudHJ5KGNvbiwgaWQgKyBpLCBpLCBpZCArICI6IiArIGkpOyAgIAorICAgICAgICAgICAgaW5zZXJ0RW50cnkoY29uLCBpZCArIGksIGksIGlkICsgIjoiICsgaSk7CiAgICAgICAgIH0KICAgICAgICAgY29uLmNsb3NlKCk7CiAKQEAgLTExMyw3ICsxMTMsNyBAQAogCiAgICAgICAgIENvbm5lY3Rpb24gY29uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwogICAgICAgICBmb3IgKGludCBpPTA7IGkgPCA1OyBpKyspIHsKLSAgICAgICAgICAgIGluc2VydEVudHJ5KGNvbiwgaWQgKyBpLCBpLCBpZCArICI6IiArIGkpOyAgIAorICAgICAgICAgICAgaW5zZXJ0RW50cnkoY29uLCBpZCArIGksIGksIGlkICsgIjoiICsgaSk7CiAgICAgICAgIH0KICAgICAgICAgY29uLmNsb3NlKCk7CiAKQEAgLTE1Miw3ICsxNTIsNyBAQAogCiAgICAgICAgIHQuYmVnaW4oKTsKICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgNTsgaSsrKSB7Ci0gICAgICAgICAgICBpbnNlcnRFbnRyeShjb24sIGlkICsgaSwgaSwgaWQgKyAiOiIgKyBpKTsgICAKKyAgICAgICAgICAgIGluc2VydEVudHJ5KGNvbiwgaWQgKyBpLCBpLCBpZCArICI6IiArIGkpOwogICAgICAgICB9CiAgICAgICAgIGNvbi5jbG9zZSgpOwogCkBAIC0xOTEsNyArMTkxLDcgQEAKICAgICAgICAgdC5iZWdpbigpOwogCiAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IDU7IGkrKykgewotICAgICAgICAgICAgaW5zZXJ0RW50cnkoY29uLCBpZCArIGksIGksIGlkICsgIjoiICsgaSk7ICAgCisgICAgICAgICAgICBpbnNlcnRFbnRyeShjb24sIGlkICsgaSwgaSwgaWQgKyAiOiIgKyBpKTsKICAgICAgICAgfQogCiAgICAgICAgIENvbm5lY3Rpb24gY29uMSA9IGRzLmdldENvbm5lY3Rpb24oKTsKQEAgLTIyNSw3ICsyMjUsNyBAQAogCiAgICAgICAgIENvbm5lY3Rpb24gY29uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwogICAgICAgICBmb3IgKGludCBpPTA7IGkgPCA1OyBpKyspIHsKLSAgICAgICAgICAgIGluc2VydEVudHJ5KGNvbiwgaWQgKyBpLCBpLCBpZCArICI6IiArIGkpOyAgIAorICAgICAgICAgICAgaW5zZXJ0RW50cnkoY29uLCBpZCArIGksIGksIGlkICsgIjoiICsgaSk7CiAgICAgICAgIH0KIAogICAgICAgICBDb25uZWN0aW9uIGNvbjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7CkBAIC0yNjgsNyArMjY4LDcgQEAKICAgICAgICAgQ29ubmVjdGlvbiBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IGNvbm4iKTsKICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgNTsgaSsrKSB7Ci0gICAgICAgICAgICBpbnNlcnRFbnRyeShjb24sIGlkICsgaSwgaSwgaWQgKyAiOiIgKyBpKTsgICAKKyAgICAgICAgICAgIGluc2VydEVudHJ5KGNvbiwgaWQgKyBpLCBpLCBpZCArICI6IiArIGkpOwogICAgICAgICB9CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY2xvc2UgY29ubiIpOwogICAgICAgICBjb24uY2xvc2UoKTsKQEAgLTMzMCwxMiArMzMwLDEyIEBACiAKICAgICAgICAgQ29ubmVjdGlvbiBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7CiAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IDU7IGkrKykgewotICAgICAgICAgICAgaW5zZXJ0RW50cnkoY29uLCBpZCArIGksIGksIGlkICsgIjoiICsgaSk7ICAgCisgICAgICAgICAgICBpbnNlcnRFbnRyeShjb24sIGlkICsgaSwgaSwgaWQgKyAiOiIgKyBpKTsKICAgICAgICAgfQogICAgICAgICBjb24uY2xvc2UoKTsKIAogICAgICAgICBib29sZWFuIHBhc3MgPSBmYWxzZTsKLSAgICAgICAgQ29ubmVjdGlvbiBjb240ID0gbnVsbDsgCisgICAgICAgIENvbm5lY3Rpb24gY29uNCA9IG51bGw7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY29uNC5nZXRDb25uZWN0aW9uIik7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBjb240ID0gZHNfY29udGFpbmVyLmdldENvbm5lY3Rpb24oKTsKQEAgLTM3Nyw3ICszNzcsNyBAQAogICAgICAgICAgICAgU3RyaW5nIHNlbGVjdFN0YXRlbWVudCA9CiAgICAgICAgICAgICAgICAgInNlbGVjdCBjb3VudCgqKSAiICsKICAgICAgICAgICAgICAgICAiZnJvbSB0ZXN0VHggIjsKLSAgICAgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHByZXBTdG10ID0gCisgICAgICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwcmVwU3RtdCA9CiAgICAgICAgICAgICAgICAgY29uLnByZXBhcmVTdGF0ZW1lbnQoc2VsZWN0U3RhdGVtZW50KTsKIAogICAgICAgICAgICAgUmVzdWx0U2V0IHJzID0gcHJlcFN0bXQuZXhlY3V0ZVF1ZXJ5KCk7CkBAIC00MjYsNyArNDI2LDcgQEAKIAogICAgICAgICBTdHJpbmcgaW5zZXJ0U3RhdGVtZW50ID0KICAgICAgICAgICAgICJpbnNlcnQgaW50byB0ZXN0VHggdmFsdWVzICggPyAsID8gLCA/KSI7Ci0gICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHByZXBTdG10ID0gCisgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHByZXBTdG10ID0KICAgICAgICAgICAgIGNvbi5wcmVwYXJlU3RhdGVtZW50KGluc2VydFN0YXRlbWVudCk7CiAKICAgICAgICAgcHJlcFN0bXQuc2V0U3RyaW5nKDEsIGtleSk7CkBAIC00MzcsNyArNDM3LDcgQEAKICAgICAgICAgcHJlcFN0bXQuY2xvc2UoKTsKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgZGVsZXRlRW50cnkoQ29ubmVjdGlvbiBjb24sIFN0cmluZyBrZXksIGludCBpdGVya2V5KSAKKyAgICBwcml2YXRlIHZvaWQgZGVsZXRlRW50cnkoQ29ubmVjdGlvbiBjb24sIFN0cmluZyBrZXksIGludCBpdGVya2V5KQogICAgICAgICB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKIAogICAgICAgICBTdHJpbmcgZGVsZXRlU3RhdGVtZW50ID0KQEAgLTQ1Miw3ICs0NTIsNyBAQAogICAgICAgICBwcmVwU3RtdC5jbG9zZSgpOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCB1cGRhdGVFbnRyeShDb25uZWN0aW9uIGNvbiwgU3RyaW5nIGtleSwgaW50IGl0ZXJrZXksIFN0cmluZyB2YWx1ZSkgCisgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZUVudHJ5KENvbm5lY3Rpb24gY29uLCBTdHJpbmcga2V5LCBpbnQgaXRlcmtleSwgU3RyaW5nIHZhbHVlKQogICAgICAgICB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKIAogICAgICAgICBTdHJpbmcgZGVsZXRlU3RhdGVtZW50ID0KQEAgLTQ2OSwxMyArNDY5LDEzIEBACiAgICAgICAgIHByZXBTdG10LmNsb3NlKCk7CiAgICAgfQogCi0gICAgcHJpdmF0ZSBTdHJpbmcgc2VsZWN0VmFsdWUoQ29ubmVjdGlvbiBjb24sIFN0cmluZyBrZXksIGludCBpdGVya2V5KSAKKyAgICBwcml2YXRlIFN0cmluZyBzZWxlY3RWYWx1ZShDb25uZWN0aW9uIGNvbiwgU3RyaW5nIGtleSwgaW50IGl0ZXJrZXkpCiAgICAgICAgIHRocm93cyBTUUxFeGNlcHRpb24gewogCiAgICAgICAgIFN0cmluZyBzZWxlY3RTdGF0ZW1lbnQgPQogICAgICAgICAgICAgInNlbGVjdCB2YWx1ZSAiICsKICAgICAgICAgICAgICJmcm9tIHRlc3RUeCB3aGVyZSBrZXkgPSA/IGFuZCBpdGVya2V5ID0gPyI7Ci0gICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHByZXBTdG10ID0gCisgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHByZXBTdG10ID0KICAgICAgICAgICAgIGNvbi5wcmVwYXJlU3RhdGVtZW50KHNlbGVjdFN0YXRlbWVudCk7CiAKICAgICAgICAgcHJlcFN0bXQuc2V0U3RyaW5nKDEsIGtleSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4U3RyZXNzL3NxbC9jcmVhdGVfb3JhY2xlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhTdHJlc3Mvc3FsL2NyZWF0ZV9vcmFjbGUuc3FsCmluZGV4IDkxN2Q4NjAuLmY3M2NhNTggMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhTdHJlc3Mvc3FsL2NyZWF0ZV9vcmFjbGUuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhTdHJlc3Mvc3FsL2NyZWF0ZV9vcmFjbGUuc3FsCkBAIC0xLDkgKzEsOSBAQAogRFJPUCBUQUJMRSB0ZXN0VHg7CiAKLUNSRUFURSBUQUJMRSB0ZXN0VHggCitDUkVBVEUgVEFCTEUgdGVzdFR4CiAoCi0Ja2V5IFZBUkNIQVIoMjU1KSBQUklNQVJZIEtFWSwgCi0JaXRlcmtleSBJTlRFR0VSICwgCi0JdmFsdWUgVkFSQ0hBUigyNTUpICAKKyAgICBrZXkgVkFSQ0hBUigyNTUpIFBSSU1BUlkgS0VZLAorICAgIGl0ZXJrZXkgSU5URUdFUiAsCisgICAgdmFsdWUgVkFSQ0hBUigyNTUpCiApOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4U3RyZXNzL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhTdHJlc3Mvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IGYzZjg0OTQuLjQ0MjAxYjAgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhTdHJlc3Mvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhTdHJlc3Mvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDkgKzEsOSBAQAogRFJPUCBUQUJMRSB0ZXN0VHg7CiAKLUNSRUFURSBUQUJMRSB0ZXN0VHggCitDUkVBVEUgVEFCTEUgdGVzdFR4CiAoCi0Ja2V5IHZhcmNoYXIoMjU1KSBjb25zdHJhaW50IHBrX2tleSBwcmltYXJ5IGtleSwgCi0JaXRlcmtleSBpbnRlZ2VyICwgCi0JdmFsdWUgdmFyY2hhcigyNTUpICAKKyAgICBrZXkgdmFyY2hhcigyNTUpIGNvbnN0cmFpbnQgcGtfa2V5IHByaW1hcnkga2V5LAorICAgIGl0ZXJrZXkgaW50ZWdlciAsCisgICAgdmFsdWUgdmFyY2hhcigyNTUpCiApOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4YWZ0ZXJub250eC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGFmdGVybm9udHgvYnVpbGQucHJvcGVydGllcwppbmRleCA4ZTY0YmM3Li40YzJmYTM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4YWZ0ZXJub250eC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhhZnRlcm5vbnR4L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE4ICsxNSwxOCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iamRiYy10eGFmdGVybm9udHgiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhhZnRlcm5vbnR4L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhhZnRlcm5vbnR4L2J1aWxkLnhtbAppbmRleCAzMmRmODRkLi41MzJjMGIxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4YWZ0ZXJub250eC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGFmdGVybm9udHgvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OCwzMiArNDgsMzIgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgotICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqLyouY2xhc3MiIC8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy10eGFmdGVybm9udHgtcG9vbCIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJqZGJjLXR4YWZ0ZXJub250eC1wb29sIi8+Ci0JPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvdHhhZnRlcm5vbnR4Ii8+CisgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvdHhhZnRlcm5vbnR4Ii8+CiAgICAgICA8L2FudGNhbGw+CiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCIvPgpAQCAtODIsMTMgKzgyLDEzIEBACiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL3R4YWZ0ZXJub250eCIvPgogICAgICAgPC9hbnRjYWxsPgotICAgICAgCisKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtY29ubnBvb2wtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iamRiYy10eGFmdGVybm9udHgtcG9vbCIvPgogICAgICAgPC9hbnRjYWxsPgotICAgICAgCisKICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhhZnRlcm5vbnR4L2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhhZnRlcm5vbnR4L2NsaWVudC9DbGllbnQuamF2YQppbmRleCAyN2RlYzczLi5kZGI5M2E3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4YWZ0ZXJub250eC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGFmdGVybm9udHgvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNSwyNyArMjUsMjcgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLlNpbXBsZVJlcG9ydGVyQWRhcHRlcjsKIAogcHVibGljIGNsYXNzIENsaWVudCB7Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCi0JU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCk7Ci0JU3RyaW5nIHRlc3RTdWl0ZSA9ICJUeEFmdGVyTm9uVHggIjsKKworICAgIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOworICAgIFN0cmluZyB0ZXN0U3VpdGUgPSAiVHhBZnRlck5vblR4ICI7CiAKICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgT2JqZWN0IG9ialJlZiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlU2Vzc2lvbkhvbWUiKTsKLQlTaW1wbGVTZXNzaW9uSG9tZSBzaW1wbGVTZXNzaW9uSG9tZSA9IChTaW1wbGVTZXNzaW9uSG9tZSkKKyAgICBTaW1wbGVTZXNzaW9uSG9tZSBzaW1wbGVTZXNzaW9uSG9tZSA9IChTaW1wbGVTZXNzaW9uSG9tZSkKICAgICAgICAgamF2YXgucm1pLlBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpSZWYsIFNpbXBsZVNlc3Npb25Ib21lLmNsYXNzKTsKLSAgICAgICAgCi0Jc3RhdC5hZGREZXNjcmlwdGlvbigiUnVubmluZyB0eGFmdGVybm9udHggdGVzdFN1aXRlMSAiKTsKKworICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlJ1bm5pbmcgdHhhZnRlcm5vbnR4IHRlc3RTdWl0ZTEgIik7CiAgICAgICAgIFNpbXBsZVNlc3Npb24gc2ltcGxlU2Vzc2lvbiA9IHNpbXBsZVNlc3Npb25Ib21lLmNyZWF0ZSgpOwogICAgICAgICBpZiAoc2ltcGxlU2Vzc2lvbi50ZXN0MSgpICkgewotCSAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0MSA6ICIgLCBzdGF0LlBBU1MgKTsKLQl9IGVsc2UgewotCSAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0MSA6ICIgLCBzdGF0LkZBSUwgKTsKLQl9Ci0gICAgCi0JCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDEgOiAiICwgc3RhdC5QQVNTICk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDEgOiAiICwgc3RhdC5GQUlMICk7CisgICAgfQorCisKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhhZnRlcm5vbnR4L2Rlc2NyaXB0b3IvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4YWZ0ZXJub250eC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IDU1ZTE0NzYuLjkwMzBiOTYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhhZnRlcm5vbnR4L2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGFmdGVybm9udHgvZGVzY3JpcHRvci9lamItamFyLnhtbApAQCAtNjIsMTIgKzYyLDEyIEBACiAgICAgPGNvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgICAgIDxtZXRob2Q+CiAgICAgICAgIDxlamItbmFtZT5TaW1wbGVTZXNzaW9uRUpCPC9lamItbmFtZT4KLQk8bWV0aG9kLW5hbWU+dXBkYXRlRGI8L21ldGhvZC1uYW1lPgorICAgIDxtZXRob2QtbmFtZT51cGRhdGVEYjwvbWV0aG9kLW5hbWU+CiAgICAgICA8L21ldGhvZD4KICAgICAgIDx0cmFucy1hdHRyaWJ1dGU+UmVxdWlyZXNOZXc8L3RyYW5zLWF0dHJpYnV0ZT4KICAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgICAtLT4KICAgPC9hc3NlbWJseS1kZXNjcmlwdG9yPgotICAgICAgCisKIDwvZWpiLWphcj4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGFmdGVybm9udHgvZWpiL1NpbXBsZVNlc3Npb25CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4YWZ0ZXJub250eC9lamIvU2ltcGxlU2Vzc2lvbkJlYW4uamF2YQppbmRleCA4MGQyMDI4Li40Y2U4Y2NkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4YWZ0ZXJub250eC9lamIvU2ltcGxlU2Vzc2lvbkJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4YWZ0ZXJub250eC9lamIvU2ltcGxlU2Vzc2lvbkJlYW4uamF2YQpAQCAtMjgsMTQgKzI4LDE0IEBACiB7CiAKICAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IGN0eHRfOwotICAgIHByaXZhdGUgSW5pdGlhbENvbnRleHQgaWNfOyAKKyAgICBwcml2YXRlIEluaXRpYWxDb250ZXh0IGljXzsKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgIGN0eHRfID0gY29udGV4dDsKLQl0cnkgewotCSAgICBpY18gPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQl9IGNhdGNoKCBOYW1pbmdFeGNlcHRpb24gbmUgKSB7Ci0JICAgIG5lLnByaW50U3RhY2tUcmFjZSgpOwotCX0KKyAgICB0cnkgeworICAgICAgICBpY18gPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICB9IGNhdGNoKCBOYW1pbmdFeGNlcHRpb24gbmUgKSB7CisgICAgICAgIG5lLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsKQEAgLTQ0LDU4ICs0NCw1OCBAQAogICAgIC8qKgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIHRlc3QxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JY29tLnN1bi5hcHBzZXJ2LmpkYmMuRGF0YVNvdXJjZSBkcyA9IAotCSAgICAoY29tLnN1bi5hcHBzZXJ2LmpkYmMuRGF0YVNvdXJjZSlpY18ubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKLQlDb25uZWN0aW9uIGNvbm4xID0gbnVsbDsKLQlTdGF0ZW1lbnQgc3RtdDEgPSBudWxsOwotCVJlc3VsdFNldCByczEgPSBudWxsOwotCWJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CisgICAgY29tLnN1bi5hcHBzZXJ2LmpkYmMuRGF0YVNvdXJjZSBkcyA9CisgICAgICAgIChjb20uc3VuLmFwcHNlcnYuamRiYy5EYXRhU291cmNlKWljXy5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZSIpOworICAgIENvbm5lY3Rpb24gY29ubjEgPSBudWxsOworICAgIFN0YXRlbWVudCBzdG10MSA9IG51bGw7CisgICAgUmVzdWx0U2V0IHJzMSA9IG51bGw7CisgICAgYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJnZXR0aW5nIGZpcnN0IHR4IGNvbm5lY3Rpb24iKTsKLQl0cnkgewotCSAgICBjb25uMSA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQkgICAgaWYgKGNvbm4xLmdldEF1dG9Db21taXQoKSA9PSB0cnVlICkgewotCSAgICAgICAgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbigiQmVmb3JlIG5vbnR4OiBDb25uZWN0aW9uIHdpdGggd3JvbmcgYXV0b2NvbW1pdCB2YWx1ZSIpOwotCSAgICB9Ci0JfSBjYXRjaCggU1FMRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgcmV0dXJuIGZhbHNlOwotCX0gZmluYWxseSB7Ci0JICAgIGlmIChjb25uMSAhPSBudWxsKSB7IAotCSAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KLQkgICAgfQotCX0KLQkKKyAgICB0cnkgeworICAgICAgICBjb25uMSA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgaWYgKGNvbm4xLmdldEF1dG9Db21taXQoKSA9PSB0cnVlICkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbigiQmVmb3JlIG5vbnR4OiBDb25uZWN0aW9uIHdpdGggd3JvbmcgYXV0b2NvbW1pdCB2YWx1ZSIpOworICAgICAgICB9CisgICAgfSBjYXRjaCggU1FMRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmIChjb25uMSAhPSBudWxsKSB7CisgICAgICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQorICAgICAgICB9CisgICAgfQorCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZ2V0dGluZyBub250eCBjb25uZWN0aW9uIik7CiAgICAgICAgIHRyeSB7Ci0JICAgIGNvbm4xID0gZHMuZ2V0Tm9uVHhDb25uZWN0aW9uKCk7Ci0JICAgIGlmIChjb25uMS5nZXRBdXRvQ29tbWl0KCkgPT0gZmFsc2UgKSB7Ci0JICAgICAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uKCJOb25UWCBDb25uZWN0aW9uIHdpdGggd3JvbmcgYXV0b2NvbW1pdCB2YWx1ZSIpOwotCSAgICB9Ci0JfSBjYXRjaCggRXhjZXB0aW9uIGUgKSB7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIHJldHVybiBmYWxzZTsKLQl9IGZpbmFsbHkgewotCSAgICB0cnkge2Nvbm4xLmNsb3NlKCk7fSBjYXRjaChFeGNlcHRpb24gZSkge30KLQl9CisgICAgICAgIGNvbm4xID0gZHMuZ2V0Tm9uVHhDb25uZWN0aW9uKCk7CisgICAgICAgIGlmIChjb25uMS5nZXRBdXRvQ29tbWl0KCkgPT0gZmFsc2UgKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uKCJOb25UWCBDb25uZWN0aW9uIHdpdGggd3JvbmcgYXV0b2NvbW1pdCB2YWx1ZSIpOworICAgICAgICB9CisgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUgKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICB0cnkge2Nvbm4xLmNsb3NlKCk7fSBjYXRjaChFeGNlcHRpb24gZSkge30KKyAgICB9CiAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJnZXR0aW5nIHNlY29uZCB0eCBjb25uZWN0aW9uIik7Ci0JdHJ5IHsKLQkgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIGlmIChjb25uMS5nZXRBdXRvQ29tbWl0KCkgPT0gdHJ1ZSApIHsKLQkgICAgICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24oIkFmdGVyIG5vbnR4OiBDb25uZWN0aW9uIHdpdGggd3JvbmcgYXV0b2NvbW1pdCB2YWx1ZSIpOwotCSAgICB9Ci0JfSBjYXRjaCggU1FMRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgcmV0dXJuIGZhbHNlOwotCX0gZmluYWxseSB7Ci0JICAgIGlmIChjb25uMSAhPSBudWxsKSB7IAotCSAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KLQkgICAgfQotCX0KLQotCXJldHVybiB0cnVlOworICAgIHRyeSB7CisgICAgICAgIGNvbm4xID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICBpZiAoY29ubjEuZ2V0QXV0b0NvbW1pdCgpID09IHRydWUgKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uKCJBZnRlciBub250eDogQ29ubmVjdGlvbiB3aXRoIHdyb25nIGF1dG9jb21taXQgdmFsdWUiKTsKKyAgICAgICAgfQorICAgIH0gY2F0Y2goIFNRTEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBpZiAoY29ubjEgIT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KKyAgICAgICAgfQogICAgIH0KLSAgICAKKworICAgIHJldHVybiB0cnVlOworICAgIH0KKwogICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7fQogICAgIHB1YmxpYyB2b2lkIGVqYlN0b3JlKCkge30KICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7fQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGFmdGVybm9udHgvc3FsL2NyZWF0ZV9teXNxbC5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4YWZ0ZXJub250eC9zcWwvY3JlYXRlX215c3FsLnNxbAppbmRleCBlNDkxNGY2Li5mMjU2MDc2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4YWZ0ZXJub250eC9zcWwvY3JlYXRlX215c3FsLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4YWZ0ZXJub250eC9zcWwvY3JlYXRlX215c3FsLnNxbApAQCAtMSw3ICsxLDcgQEAKLURyb3AgdGFibGUgT19DdXN0b21lcjsNCi0NCi1DUkVBVEUgVEFCTEUgT19DdXN0b21lciAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikNCi0pOw0KLQ0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKKworQ1JFQVRFIFRBQkxFIE9fQ3VzdG9tZXIgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQorKTsKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGFmdGVybm9udHgvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGFmdGVybm9udHgvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IDYzN2E3YzUuLmMzYjBkNWMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhhZnRlcm5vbnR4L3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4YWZ0ZXJub250eC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsOSArMSw5IEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQotDQotQ1JFQVRFIFRBQkxFIE9fQ3VzdG9tZXIgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCi1JTlNFUlQgSU5UTyBPX0NVU1RPTUVSIFZBTFVFUyAoMCwgJ2FiY2QnKTsNCi1JTlNFUlQgSU5UTyBPX0NVU1RPTUVSIFZBTFVFUyAoMSwgJ3BxcnMnKTsNCitEcm9wIHRhYmxlIE9fQ3VzdG9tZXI7CisKK0NSRUFURSBUQUJMRSBPX0N1c3RvbWVyICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikKKyk7CisKK0lOU0VSVCBJTlRPIE9fQ1VTVE9NRVIgVkFMVUVTICgwLCAnYWJjZCcpOworSU5TRVJUIElOVE8gT19DVVNUT01FUiBWQUxVRVMgKDEsICdwcXJzJyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4YWZ0ZXJub250eC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGFmdGVybm9udHgvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAppbmRleCA3MGQxZmNjLi5kODU0Yjk1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4YWZ0ZXJub250eC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhhZnRlcm5vbnR4L3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEgKzEgQEAKLURyb3AgdGFibGUgT19DdXN0b21lcjsNCitEcm9wIHRhYmxlIE9fQ3VzdG9tZXI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4YWZ0ZXJub250eGpuZGkvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhhZnRlcm5vbnR4am5kaS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDhlNjRiYzcuLjRjMmZhMzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhhZnRlcm5vbnR4am5kaS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhhZnRlcm5vbnR4am5kaS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOCArMTUsMTggQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImpkYmMtdHhhZnRlcm5vbnR4Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4YWZ0ZXJub250eGpuZGkvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGFmdGVybm9udHhqbmRpL2J1aWxkLnhtbAppbmRleCAzMmRmODRkLi41MzJjMGIxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4YWZ0ZXJub250eGpuZGkvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhhZnRlcm5vbnR4am5kaS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ4LDMyICs0OCwzMiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgdmFsdWU9IioqLyouY2xhc3MiIC8+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiYy1jb25ucG9vbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJqZGJjLXR4YWZ0ZXJub250eC1wb29sIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImpkYmMtdHhhZnRlcm5vbnR4LXBvb2wiLz4KLQk8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy90eGFmdGVybm9udHgiLz4KKyAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy90eGFmdGVybm9udHgiLz4KICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9wb2ludGJhc2Uuc3FsIi8+CkBAIC04MiwxMyArODIsMTMgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWpkYmMtcmVzb3VyY2UtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMucmVzb3VyY2UubmFtZSIgdmFsdWU9ImpkYmMvdHhhZnRlcm5vbnR4Ii8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgICAKKwogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1jb25ucG9vbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJqZGJjLXR4YWZ0ZXJub250eC1wb29sIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgICAKKwogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGFmdGVybm9udHhqbmRpL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhhZnRlcm5vbnR4am5kaS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggYjc5ODhhMi4uNDZjZjIxMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGFmdGVybm9udHhqbmRpL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4YWZ0ZXJub250eGpuZGkvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNSwyNyArMjUsMjcgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLlNpbXBsZVJlcG9ydGVyQWRhcHRlcjsKIAogcHVibGljIGNsYXNzIENsaWVudCB7Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQogICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCi0JU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCk7Ci0JU3RyaW5nIHRlc3RTdWl0ZSA9ICJUeEFmdGVyTm9uVHgtSm5kaSAiOworCisgICAgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCk7CisgICAgU3RyaW5nIHRlc3RTdWl0ZSA9ICJUeEFmdGVyTm9uVHgtSm5kaSAiOwogCiAgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgIE9iamVjdCBvYmpSZWYgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZVNlc3Npb25Ib21lIik7Ci0JU2ltcGxlU2Vzc2lvbkhvbWUgc2ltcGxlU2Vzc2lvbkhvbWUgPSAoU2ltcGxlU2Vzc2lvbkhvbWUpCisgICAgU2ltcGxlU2Vzc2lvbkhvbWUgc2ltcGxlU2Vzc2lvbkhvbWUgPSAoU2ltcGxlU2Vzc2lvbkhvbWUpCiAgICAgICAgIGphdmF4LnJtaS5Qb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqUmVmLCBTaW1wbGVTZXNzaW9uSG9tZS5jbGFzcyk7Ci0gICAgICAgIAotCXN0YXQuYWRkRGVzY3JpcHRpb24oIlJ1bm5pbmcgdHhhZnRlcm5vbnR4IHRlc3RTdWl0ZTEgIik7CisKKyAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJSdW5uaW5nIHR4YWZ0ZXJub250eCB0ZXN0U3VpdGUxICIpOwogICAgICAgICBTaW1wbGVTZXNzaW9uIHNpbXBsZVNlc3Npb24gPSBzaW1wbGVTZXNzaW9uSG9tZS5jcmVhdGUoKTsKICAgICAgICAgaWYgKHNpbXBsZVNlc3Npb24udGVzdDEoKSApIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDEgOiAiICwgc3RhdC5QQVNTICk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoIHRlc3RTdWl0ZSArICIgdGVzdDEgOiAiICwgc3RhdC5GQUlMICk7Ci0JfQotICAgIAotCQotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3QxIDogIiAsIHN0YXQuUEFTUyApOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3QxIDogIiAsIHN0YXQuRkFJTCApOworICAgIH0KKworCisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4YWZ0ZXJub250eGpuZGkvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhhZnRlcm5vbnR4am5kaS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IDU1ZTE0NzYuLjkwMzBiOTYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhhZnRlcm5vbnR4am5kaS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhhZnRlcm5vbnR4am5kaS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC02MiwxMiArNjIsMTIgQEAKICAgICA8Y29udGFpbmVyLXRyYW5zYWN0aW9uPgogICAgICAgPG1ldGhvZD4KICAgICAgICAgPGVqYi1uYW1lPlNpbXBsZVNlc3Npb25FSkI8L2VqYi1uYW1lPgotCTxtZXRob2QtbmFtZT51cGRhdGVEYjwvbWV0aG9kLW5hbWU+CisgICAgPG1ldGhvZC1uYW1lPnVwZGF0ZURiPC9tZXRob2QtbmFtZT4KICAgICAgIDwvbWV0aG9kPgogICAgICAgPHRyYW5zLWF0dHJpYnV0ZT5SZXF1aXJlc05ldzwvdHJhbnMtYXR0cmlidXRlPgogICAgIDwvY29udGFpbmVyLXRyYW5zYWN0aW9uPgogICAgIC0tPgogICA8L2Fzc2VtYmx5LWRlc2NyaXB0b3I+Ci0gICAgICAKKwogPC9lamItamFyPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4YWZ0ZXJub250eGpuZGkvZWpiL1NpbXBsZVNlc3Npb25CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4YWZ0ZXJub250eGpuZGkvZWpiL1NpbXBsZVNlc3Npb25CZWFuLmphdmEKaW5kZXggMmFiNjdiYy4uYzcxN2E1OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGFmdGVybm9udHhqbmRpL2VqYi9TaW1wbGVTZXNzaW9uQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhhZnRlcm5vbnR4am5kaS9lamIvU2ltcGxlU2Vzc2lvbkJlYW4uamF2YQpAQCAtMjgsMTggKzI4LDE4IEBACiB7CiAKICAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IGN0eHRfOwotICAgIHByaXZhdGUgSW5pdGlhbENvbnRleHQgaWNfOyAKLSAgICBwcml2YXRlIEluaXRpYWxDb250ZXh0IGljMV87IAorICAgIHByaXZhdGUgSW5pdGlhbENvbnRleHQgaWNfOworICAgIHByaXZhdGUgSW5pdGlhbENvbnRleHQgaWMxXzsKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgIGN0eHRfID0gY29udGV4dDsKLQl0cnkgewotCSAgICBpY18gPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICB0cnkgeworICAgICAgICBpY18gPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIEhhc2h0YWJsZSBodCA9IG5ldyBIYXNodGFibGUoKTsKICAgICAgICAgICAgIGh0LnB1dCgiY29tLnN1bi5lbnRlcnByaXNlLmNvbm5lY3RvcnMuam5kaXN1ZmZpeCIsICJfX25vbnR4Iik7Ci0JICAgIGljMV8gPSBuZXcgSW5pdGlhbENvbnRleHQoaHQpOwotCX0gY2F0Y2goIE5hbWluZ0V4Y2VwdGlvbiBuZSApIHsKLQkgICAgbmUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQorICAgICAgICBpYzFfID0gbmV3IEluaXRpYWxDb250ZXh0KGh0KTsKKyAgICB9IGNhdGNoKCBOYW1pbmdFeGNlcHRpb24gbmUgKSB7CisgICAgICAgIG5lLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB0aHJvd3MgQ3JlYXRlRXhjZXB0aW9uIHsKQEAgLTQ4LDYwICs0OCw2MCBAQAogICAgIC8qKgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIHRlc3QxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JY29tLnN1bi5hcHBzZXJ2LmpkYmMuRGF0YVNvdXJjZSBkcyA9IAotCSAgICAoY29tLnN1bi5hcHBzZXJ2LmpkYmMuRGF0YVNvdXJjZSlpY18ubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKLQljb20uc3VuLmFwcHNlcnYuamRiYy5EYXRhU291cmNlIGRzMSA9IAotCSAgICAoY29tLnN1bi5hcHBzZXJ2LmpkYmMuRGF0YVNvdXJjZSlpYzFfLmxvb2t1cCgiamRiYy90eGFmdGVybm9udHgiKTsKLQlDb25uZWN0aW9uIGNvbm4xID0gbnVsbDsKLQlTdGF0ZW1lbnQgc3RtdDEgPSBudWxsOwotCVJlc3VsdFNldCByczEgPSBudWxsOwotCWJvb2xlYW4gcGFzc2VkID0gZmFsc2U7CisgICAgY29tLnN1bi5hcHBzZXJ2LmpkYmMuRGF0YVNvdXJjZSBkcyA9CisgICAgICAgIChjb20uc3VuLmFwcHNlcnYuamRiYy5EYXRhU291cmNlKWljXy5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZSIpOworICAgIGNvbS5zdW4uYXBwc2Vydi5qZGJjLkRhdGFTb3VyY2UgZHMxID0KKyAgICAgICAgKGNvbS5zdW4uYXBwc2Vydi5qZGJjLkRhdGFTb3VyY2UpaWMxXy5sb29rdXAoImpkYmMvdHhhZnRlcm5vbnR4Iik7CisgICAgQ29ubmVjdGlvbiBjb25uMSA9IG51bGw7CisgICAgU3RhdGVtZW50IHN0bXQxID0gbnVsbDsKKyAgICBSZXN1bHRTZXQgcnMxID0gbnVsbDsKKyAgICBib29sZWFuIHBhc3NlZCA9IGZhbHNlOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImdldHRpbmcgZmlyc3QgdHggY29ubmVjdGlvbiIpOwotCXRyeSB7Ci0JICAgIGNvbm4xID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCSAgICBpZiAoY29ubjEuZ2V0QXV0b0NvbW1pdCgpID09IHRydWUgKSB7Ci0JICAgICAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uKCJCZWZvcmUgbm9udHg6IENvbm5lY3Rpb24gd2l0aCB3cm9uZyBhdXRvY29tbWl0IHZhbHVlIik7Ci0JICAgIH0KLQl9IGNhdGNoKCBTUUxFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICByZXR1cm4gZmFsc2U7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKGNvbm4xICE9IG51bGwpIHsgCi0JICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQotCSAgICB9Ci0JfQotCQorICAgIHRyeSB7CisgICAgICAgIGNvbm4xID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICBpZiAoY29ubjEuZ2V0QXV0b0NvbW1pdCgpID09IHRydWUgKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uKCJCZWZvcmUgbm9udHg6IENvbm5lY3Rpb24gd2l0aCB3cm9uZyBhdXRvY29tbWl0IHZhbHVlIik7CisgICAgICAgIH0KKyAgICB9IGNhdGNoKCBTUUxFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKGNvbm4xICE9IG51bGwpIHsKKyAgICAgICAgICAgIHRyeSB7IGNvbm4xLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9CisgICAgICAgIH0KKyAgICB9CisKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJnZXR0aW5nIG5vbnR4IGNvbm5lY3Rpb24iKTsKICAgICAgICAgdHJ5IHsKLQkgICAgY29ubjEgPSBkczEuZ2V0Q29ubmVjdGlvbigpOwotCSAgICBpZiAoY29ubjEuZ2V0QXV0b0NvbW1pdCgpID09IGZhbHNlICkgewotCSAgICAgICAgdGhyb3cgbmV3IFNRTEV4Y2VwdGlvbigiTm9uVFggQ29ubmVjdGlvbiB3aXRoIHdyb25nIGF1dG9jb21taXQgdmFsdWUiKTsKLQkgICAgfQotCX0gY2F0Y2goIEV4Y2VwdGlvbiBlICkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICByZXR1cm4gZmFsc2U7Ci0JfSBmaW5hbGx5IHsKLQkgICAgdHJ5IHtjb25uMS5jbG9zZSgpO30gY2F0Y2goRXhjZXB0aW9uIGUpIHt9Ci0JfQorICAgICAgICBjb25uMSA9IGRzMS5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIGlmIChjb25uMS5nZXRBdXRvQ29tbWl0KCkgPT0gZmFsc2UgKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uKCJOb25UWCBDb25uZWN0aW9uIHdpdGggd3JvbmcgYXV0b2NvbW1pdCB2YWx1ZSIpOworICAgICAgICB9CisgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUgKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICB0cnkge2Nvbm4xLmNsb3NlKCk7fSBjYXRjaChFeGNlcHRpb24gZSkge30KKyAgICB9CiAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJnZXR0aW5nIHNlY29uZCB0eCBjb25uZWN0aW9uIik7Ci0JdHJ5IHsKLQkgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIGlmIChjb25uMS5nZXRBdXRvQ29tbWl0KCkgPT0gdHJ1ZSApIHsKLQkgICAgICAgIHRocm93IG5ldyBTUUxFeGNlcHRpb24oIkFmdGVyIG5vbnR4OiBDb25uZWN0aW9uIHdpdGggd3JvbmcgYXV0b2NvbW1pdCB2YWx1ZSIpOwotCSAgICB9Ci0JfSBjYXRjaCggU1FMRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgcmV0dXJuIGZhbHNlOwotCX0gZmluYWxseSB7Ci0JICAgIGlmIChjb25uMSAhPSBudWxsKSB7IAotCSAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KLQkgICAgfQotCX0KLQotCXJldHVybiB0cnVlOworICAgIHRyeSB7CisgICAgICAgIGNvbm4xID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICBpZiAoY29ubjEuZ2V0QXV0b0NvbW1pdCgpID09IHRydWUgKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgU1FMRXhjZXB0aW9uKCJBZnRlciBub250eDogQ29ubmVjdGlvbiB3aXRoIHdyb25nIGF1dG9jb21taXQgdmFsdWUiKTsKKyAgICAgICAgfQorICAgIH0gY2F0Y2goIFNRTEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBpZiAoY29ubjEgIT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KKyAgICAgICAgfQogICAgIH0KLSAgICAKKworICAgIHJldHVybiB0cnVlOworICAgIH0KKwogICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7fQogICAgIHB1YmxpYyB2b2lkIGVqYlN0b3JlKCkge30KICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7fQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGFmdGVybm9udHhqbmRpL3NxbC9jcmVhdGVfbXlzcWwuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGFmdGVybm9udHhqbmRpL3NxbC9jcmVhdGVfbXlzcWwuc3FsCmluZGV4IGU0OTE0ZjYuLmYyNTYwNzYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhhZnRlcm5vbnR4am5kaS9zcWwvY3JlYXRlX215c3FsLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4YWZ0ZXJub250eGpuZGkvc3FsL2NyZWF0ZV9teXNxbC5zcWwKQEAgLTEsNyArMSw3IEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQotDQotQ1JFQVRFIFRBQkxFIE9fQ3VzdG9tZXIgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCitEcm9wIHRhYmxlIE9fQ3VzdG9tZXI7CisKK0NSRUFURSBUQUJMRSBPX0N1c3RvbWVyICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikKKyk7CisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhhZnRlcm5vbnR4am5kaS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4YWZ0ZXJub250eGpuZGkvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IDYzN2E3YzUuLmMzYjBkNWMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhhZnRlcm5vbnR4am5kaS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGFmdGVybm9udHhqbmRpL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSw5ICsxLDkgQEAKLURyb3AgdGFibGUgT19DdXN0b21lcjsNCi0NCi1DUkVBVEUgVEFCTEUgT19DdXN0b21lciAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikNCi0pOw0KLQ0KLUlOU0VSVCBJTlRPIE9fQ1VTVE9NRVIgVkFMVUVTICgwLCAnYWJjZCcpOw0KLUlOU0VSVCBJTlRPIE9fQ1VTVE9NRVIgVkFMVUVTICgxLCAncHFycycpOw0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKKworQ1JFQVRFIFRBQkxFIE9fQ3VzdG9tZXIgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQorKTsKKworSU5TRVJUIElOVE8gT19DVVNUT01FUiBWQUxVRVMgKDAsICdhYmNkJyk7CitJTlNFUlQgSU5UTyBPX0NVU1RPTUVSIFZBTFVFUyAoMSwgJ3BxcnMnKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhhZnRlcm5vbnR4am5kaS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGFmdGVybm9udHhqbmRpL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggNzBkMWZjYy4uZDg1NGI5NSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGFmdGVybm9udHhqbmRpL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGFmdGVybm9udHhqbmRpL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEgKzEgQEAKLURyb3AgdGFibGUgT19DdXN0b21lcjsNCitEcm9wIHRhYmxlIE9fQ3VzdG9tZXI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4aXNvbGF0aW9uL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4aXNvbGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYWFkMjIyZS4uZjAwMWQ1YSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGlzb2xhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhpc29sYXRpb24vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTkgKzE1LDE5IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItYm1wLXR4aXNvbGF0aW9uIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIxMiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGlzb2xhdGlvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4aXNvbGF0aW9uL2J1aWxkLnhtbAppbmRleCAwN2Q5ZDZmLi5kM2UyNWEzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4aXNvbGF0aW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4aXNvbGF0aW9uL2J1aWxkLnhtbApAQCAtODMsNyArODMsNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC4ke3Bvb2wubmFtZX0ubWF4X2Nvbm5lY3Rpb25fdXNhZ2VfY291bnQ9MSIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgICAgCisKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCkBAIC0xNzcsNyArMTc3LDcgQEAKICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSI2Ii8+CiAgICAgICAgICA8L2FudGNhbGw+Ci0gICAgICAgIAorCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgogICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhpc29sYXRpb24vY2xpZW50L1NpbXBsZUJNUENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGlzb2xhdGlvbi9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKaW5kZXggMDc3OTdkOS4uMjQ2NzRkMCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGlzb2xhdGlvbi9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGlzb2xhdGlvbi9jbGllbnQvU2ltcGxlQk1QQ2xpZW50LmphdmEKQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgICAgICAgICAgICBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ialJlZiwgU2ltcGxlQk1QSG9tZS5jbGFzcyk7CiAKICAgICAgICAgU2ltcGxlQk1QIHNpbXBsZUJNUCA9IHNpbXBsZUJNUEhvbWUuY3JlYXRlKCk7Ci0Jc3RhdC5hZGREZXNjcmlwdGlvbigiSkRCQyBUWCBJc29sYXRpb24gdGVzdHMiKTsKKyAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJKREJDIFRYIElzb2xhdGlvbiB0ZXN0cyIpOwogICAgICAgICAgICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKICAgICAgICAgICAgIFN0cmluZyB0ZXN0TmFtZSA9IG51bGw7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhpc29sYXRpb24vZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhpc29sYXRpb24vZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCBjMGY2NTg4Li45NGI5ZmRkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4aXNvbGF0aW9uL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGlzb2xhdGlvbi9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC0zOCw3ICszOCw3IEBACiAgICAgICAgICAgICAgICAgPGRlc2NyaXB0aW9uPjwvZGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICAgPHVzZS1jYWxsZXItaWRlbnRpdHk+PC91c2UtY2FsbGVyLWlkZW50aXR5PgogICAgICAgICAgICAgPC9zZWN1cml0eS1pZGVudGl0eT4KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICA8cmVzb3VyY2UtcmVmPgogICAgICAgICAgICAgICAgIDxyZXMtcmVmLW5hbWU+RGF0YVNvdXJjZTwvcmVzLXJlZi1uYW1lPgogICAgICAgICAgICAgICAgIDxyZXMtdHlwZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvcmVzLXR5cGU+CkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgICAgICAgICAgPHJlcy1zaGFyaW5nLXNjb3BlPlNoYXJlYWJsZTwvcmVzLXNoYXJpbmctc2NvcGU+CiAgICAgICAgICAgICA8L3Jlc291cmNlLXJlZj4KICAgICAgICAgPC9zZXNzaW9uPgotICAgICAgICAKKwogICAgIDwvZW50ZXJwcmlzZS1iZWFucz4KIAogICAgIDxhc3NlbWJseS1kZXNjcmlwdG9yPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGlzb2xhdGlvbi9lamIvU2ltcGxlQk1QLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4aXNvbGF0aW9uL2VqYi9TaW1wbGVCTVAuamF2YQppbmRleCA2YTNkZmVkLi44OTczM2I5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4aXNvbGF0aW9uL2VqYi9TaW1wbGVCTVAuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4aXNvbGF0aW9uL2VqYi9TaW1wbGVCTVAuamF2YQpAQCAtMjAsNyArMjAsNyBAQAogaW1wb3J0IGphdmEucm1pLio7CiAKIHB1YmxpYyBpbnRlcmZhY2UgU2ltcGxlQk1QICBleHRlbmRzIEVKQk9iamVjdCB7Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MShpbnQgaSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIHB1YmxpYyB2b2lkIG1vZGlmeUlzb2xhdGlvbihpbnQgaSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhpc29sYXRpb24vZWpiL1NpbXBsZUJNUEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhpc29sYXRpb24vZWpiL1NpbXBsZUJNUEJlYW4uamF2YQppbmRleCA2OTkxZTJhLi5hYWI3Yzc5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4aXNvbGF0aW9uL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGlzb2xhdGlvbi9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCkBAIC03MSw3ICs3MSw3IEBACiAgICAgICAgICAgICAgICAgfWNhdGNoKEV4Y2VwdGlvbiBlKXtlLnByaW50U3RhY2tUcmFjZSgpO30KICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgIHJldHVybiByZXN1bHQ7ICAgICAgICAKKyAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIG1vZGlmeUlzb2xhdGlvbihpbnQgaXNvbGF0aW9uTGV2ZWwpewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGxldmVsc3dpdGNoL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4bGV2ZWxzd2l0Y2gvYnVpbGQucHJvcGVydGllcwppbmRleCBmNzM1NGFlLi40N2M3Y2Y1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4bGV2ZWxzd2l0Y2gvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4bGV2ZWxzd2l0Y2gvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTggKzE1LDE4IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqZGJjLXR4bGV2ZWxzd2l0Y2giLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhsZXZlbHN3aXRjaC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4bGV2ZWxzd2l0Y2gvYnVpbGQueG1sCmluZGV4IGNkMjA1MjMuLjY5NjZiMTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhsZXZlbHN3aXRjaC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGxldmVsc3dpdGNoL2J1aWxkLnhtbApAQCAtNDAsNyArNDAsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNTIsMjUgKzUyLDI1IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovKi5jbGFzcyIgLz4KLSAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgIHZhbHVlPSIqKi8qLmNsYXNzIiAvPgogICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qZGJjLWNvbW1vbiIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9wb2ludGJhc2Uuc3FsIi8+CkBAIC03OCw3ICs3OCw3IEBACiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamRiYy1jb21tb24iLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhsZXZlbHN3aXRjaC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4bGV2ZWxzd2l0Y2gvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDM2MmNiZjQuLmY3NjA5ZTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhsZXZlbHN3aXRjaC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGxldmVsc3dpdGNoL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjUsMjcgKzI1LDI3IEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci5TaW1wbGVSZXBvcnRlckFkYXB0ZXI7CiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAotCVNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOwotCVN0cmluZyB0ZXN0U3VpdGUgPSAidHhsZXZlbHN3aXRjaC10ZXN0MSAiOworCisgICAgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCk7CisgICAgU3RyaW5nIHRlc3RTdWl0ZSA9ICJ0eGxldmVsc3dpdGNoLXRlc3QxICI7CiAKICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgT2JqZWN0IG9ialJlZiA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlU2Vzc2lvbkhvbWUiKTsKLQlTaW1wbGVTZXNzaW9uSG9tZSBzaW1wbGVTZXNzaW9uSG9tZSA9IChTaW1wbGVTZXNzaW9uSG9tZSkKKyAgICBTaW1wbGVTZXNzaW9uSG9tZSBzaW1wbGVTZXNzaW9uSG9tZSA9IChTaW1wbGVTZXNzaW9uSG9tZSkKICAgICAgICAgamF2YXgucm1pLlBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpSZWYsIFNpbXBsZVNlc3Npb25Ib21lLmNsYXNzKTsKLSAgICAgICAgCi0Jc3RhdC5hZGREZXNjcmlwdGlvbigiUnVubmluZyB0eGxldmVsc3dpdGNoIHRlc3RTdWl0ZTEgIik7CisKKyAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJSdW5uaW5nIHR4bGV2ZWxzd2l0Y2ggdGVzdFN1aXRlMSAiKTsKICAgICAgICAgU2ltcGxlU2Vzc2lvbiBzaW1wbGVTZXNzaW9uID0gc2ltcGxlU2Vzc2lvbkhvbWUuY3JlYXRlKCk7CiAgICAgICAgIGlmIChzaW1wbGVTZXNzaW9uLnRlc3QxKCkgKSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3QxIDogIiAsIHN0YXQuUEFTUyApOwotCX0gZWxzZSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCB0ZXN0U3VpdGUgKyAiIHRlc3QxIDogIiAsIHN0YXQuRkFJTCApOwotCX0KLSAgICAKLQkKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0MSA6ICIgLCBzdGF0LlBBU1MgKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0LmFkZFN0YXR1cyggdGVzdFN1aXRlICsgIiB0ZXN0MSA6ICIgLCBzdGF0LkZBSUwgKTsKKyAgICB9CisKKworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGxldmVsc3dpdGNoL2Rlc2NyaXB0b3IvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4bGV2ZWxzd2l0Y2gvZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCA4OWI3ZGQ5Li4xNGQ1MDU0IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4bGV2ZWxzd2l0Y2gvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4bGV2ZWxzd2l0Y2gvZGVzY3JpcHRvci9lamItamFyLnhtbApAQCAtNjEsMTEgKzYxLDExIEBACiAgICAgPGNvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgICAgIDxtZXRob2Q+CiAgICAgICAgIDxlamItbmFtZT5TaW1wbGVTZXNzaW9uRUpCPC9lamItbmFtZT4KLQk8bWV0aG9kLW5hbWU+dXBkYXRlRGI8L21ldGhvZC1uYW1lPgorICAgIDxtZXRob2QtbmFtZT51cGRhdGVEYjwvbWV0aG9kLW5hbWU+CiAgICAgICA8L21ldGhvZD4KICAgICAgIDx0cmFucy1hdHRyaWJ1dGU+UmVxdWlyZXNOZXc8L3RyYW5zLWF0dHJpYnV0ZT4KICAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgPC9hc3NlbWJseS1kZXNjcmlwdG9yPgotICAgICAgCisKIDwvZWpiLWphcj4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGxldmVsc3dpdGNoL2VqYi9TaW1wbGVTZXNzaW9uQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGxldmVsc3dpdGNoL2VqYi9TaW1wbGVTZXNzaW9uQmVhbi5qYXZhCmluZGV4IGM0MmMwODUuLmNkZjY3ZjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhsZXZlbHN3aXRjaC9lamIvU2ltcGxlU2Vzc2lvbkJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4bGV2ZWxzd2l0Y2gvZWpiL1NpbXBsZVNlc3Npb25CZWFuLmphdmEKQEAgLTI3LDE0ICsyNywxNCBAQAogewogCiAgICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBjdHh0XzsKLSAgICBwcml2YXRlIEluaXRpYWxDb250ZXh0IGljXzsgCisgICAgcHJpdmF0ZSBJbml0aWFsQ29udGV4dCBpY187CiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgY29udGV4dCkgewogICAgICAgICBjdHh0XyA9IGNvbnRleHQ7Ci0JdHJ5IHsKLQkgICAgaWNfID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JfSBjYXRjaCggTmFtaW5nRXhjZXB0aW9uIG5lICkgewotCSAgICBuZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9CisgICAgdHJ5IHsKKyAgICAgICAgaWNfID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgfSBjYXRjaCggTmFtaW5nRXhjZXB0aW9uIG5lICkgeworICAgICAgICBuZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7CkBAIC00Niw5OSArNDYsOTkgQEAKICAgICAgKiBkaWQgbm90IGhhcHBlbgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIHRlc3QxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKWljXy5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZSIpOwotCUNvbm5lY3Rpb24gY29ubjEgPSBudWxsOwotCVN0YXRlbWVudCBzdG10MSA9IG51bGw7Ci0JUmVzdWx0U2V0IHJzMSA9IG51bGw7Ci0JaW50IGtleVRvQ29tcGFyZSA9IDEwOwotCWJvb2xlYW4gcGFzc2VkID0gZmFsc2U7Ci0JLy9jbGVhbiB0aGUgZGF0YWJhc2UKLQl0cnkgewotCSAgICBjb25uMSA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQkgICAgc3RtdDEgPSBjb25uMS5jcmVhdGVTdGF0ZW1lbnQoKTsKLQkgICAgc3RtdDEuZXhlY3V0ZVVwZGF0ZSggIkRFTEVURSBGUk9NIFRYTEVWRUxTV0lUQ0giKTsKLQl9IGNhdGNoKCBTUUxFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICByZXR1cm4gZmFsc2U7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKHN0bXQxICE9IG51bGwpIHsgCi0JICAgICAgICB0cnkgeyBzdG10MS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQotCSAgICB9Ci0JICAgIGlmIChjb25uMSAhPSBudWxsKSB7IAotCSAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KLQkgICAgfQotCX0KLQkKLQl0cnkgewotCSAgICAvL0NhbGwgYSBtZXRob2Qgd2l0aCB0eD1SZXF1aXJlc05ldyBhbmQgaGF2ZSBpdCB0aHJvdwotCSAgICAvL2FuIGV4Y2VwdGlvbgotCSAgICB1cGRhdGVEYiggIlRYTEVWRUxTV0lUQ0giLCBrZXlUb0NvbXBhcmUgKTsKLQl9IGNhdGNoKCBFeGNlcHRpb24gZSApIHsKLQkgICAgaWYgKCEoIGUgaW5zdGFuY2VvZiBFSkJFeGNlcHRpb24gKSkgewotCSAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJcmV0dXJuIGZhbHNlOwotCSAgICB9IGVsc2UgewotCSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYXVnaHQgZXhwZWN0ZWQgRUpCRXhjZXB0aW9uIik7Ci0JICAgIH0KLQl9Ci0JdHJ5IHsKLQkgICAgLy9zaW5jZSBvdXIgdXBkYXRlRGIgdGhyZXcgYW4gZXhjZXB0aW9uLCB3ZSBzaG91bGQgbm90Ci0JICAgIC8vZmluZCB0aGUgaW5zZXJ0ZWQgdmFsdWUgaGVyZQotCSAgICBjb25uMSA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQkgICAgc3RtdDEgPSBjb25uMS5jcmVhdGVTdGF0ZW1lbnQoKTsKLQkgICAgcnMxID0gc3RtdDEuZXhlY3V0ZVF1ZXJ5KCJTRUxFQ1QgKiBGUk9NIFRYTEVWRUxTV0lUQ0giKTsgCi0JICAgIHdoaWxlKCByczEubmV4dCgpICkgewotCSAgICAgICAgaW50IGtleSA9IHJzMS5nZXRJbnQoImNfaWQiKTsKLQkJaWYgKCBrZXkgPT0gMTAgKSB7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oInVwZGF0ZSBoYXBwZW5lZCBzdWNjZXNzZnVsbHkuIEl0IHNob3VsZCBoYXZlIGZhaWxlZCIpOwotCQkgICAgcmV0dXJuIGZhbHNlOwotCQl9Ci0JICAgIH0KLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgIGUucHJpbnRTdGFja1RyYWNlKCk7IAotCSAgIHJldHVybiBmYWxzZTsKLQl9IGZpbmFsbHkgewotCSAgICBpZiAocnMxICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgeyByczEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KLQkgICAgfQotCSAgICBpZiAoIHN0bXQxICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgeyBzdG10MS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9ICAgIAotCSAgICB9Ci0JICAgIGlmICggY29ubjEgIT0gbnVsbCApIHsKLQkgICAgICAgIHRyeSB7IGNvbm4xLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30gICAgCi0JICAgIH0KLQl9Ci0KLQlyZXR1cm4gdHJ1ZTsKKyAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpaWNfLmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7CisgICAgQ29ubmVjdGlvbiBjb25uMSA9IG51bGw7CisgICAgU3RhdGVtZW50IHN0bXQxID0gbnVsbDsKKyAgICBSZXN1bHRTZXQgcnMxID0gbnVsbDsKKyAgICBpbnQga2V5VG9Db21wYXJlID0gMTA7CisgICAgYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKKyAgICAvL2NsZWFuIHRoZSBkYXRhYmFzZQorICAgIHRyeSB7CisgICAgICAgIGNvbm4xID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICBzdG10MSA9IGNvbm4xLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICBzdG10MS5leGVjdXRlVXBkYXRlKCAiREVMRVRFIEZST00gVFhMRVZFTFNXSVRDSCIpOworICAgIH0gY2F0Y2goIFNRTEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBpZiAoc3RtdDEgIT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsgc3RtdDEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KKyAgICAgICAgfQorICAgICAgICBpZiAoY29ubjEgIT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KKyAgICAgICAgfQogICAgIH0KLSAgICAKKworICAgIHRyeSB7CisgICAgICAgIC8vQ2FsbCBhIG1ldGhvZCB3aXRoIHR4PVJlcXVpcmVzTmV3IGFuZCBoYXZlIGl0IHRocm93CisgICAgICAgIC8vYW4gZXhjZXB0aW9uCisgICAgICAgIHVwZGF0ZURiKCAiVFhMRVZFTFNXSVRDSCIsIGtleVRvQ29tcGFyZSApOworICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlICkgeworICAgICAgICBpZiAoISggZSBpbnN0YW5jZW9mIEVKQkV4Y2VwdGlvbiApKSB7CisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhdWdodCBleHBlY3RlZCBFSkJFeGNlcHRpb24iKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB0cnkgeworICAgICAgICAvL3NpbmNlIG91ciB1cGRhdGVEYiB0aHJldyBhbiBleGNlcHRpb24sIHdlIHNob3VsZCBub3QKKyAgICAgICAgLy9maW5kIHRoZSBpbnNlcnRlZCB2YWx1ZSBoZXJlCisgICAgICAgIGNvbm4xID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICBzdG10MSA9IGNvbm4xLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICByczEgPSBzdG10MS5leGVjdXRlUXVlcnkoIlNFTEVDVCAqIEZST00gVFhMRVZFTFNXSVRDSCIpOworICAgICAgICB3aGlsZSggcnMxLm5leHQoKSApIHsKKyAgICAgICAgICAgIGludCBrZXkgPSByczEuZ2V0SW50KCJjX2lkIik7CisgICAgICAgIGlmICgga2V5ID09IDEwICkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ1cGRhdGUgaGFwcGVuZWQgc3VjY2Vzc2Z1bGx5LiBJdCBzaG91bGQgaGF2ZSBmYWlsZWQiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICB9CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBpZiAocnMxICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeyByczEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KKyAgICAgICAgfQorICAgICAgICBpZiAoIHN0bXQxICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeyBzdG10MS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBjb25uMSAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZURiKCBTdHJpbmcgdGFibGUsIGludCBrZXlUb0luc2VydCApIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBEYXRhU291cmNlIGRzID0gKERhdGFTb3VyY2UpaWNfLmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlIik7Ci0JQ29ubmVjdGlvbiBjb25uMSA9IG51bGw7Ci0JU3RhdGVtZW50IHN0bXQxID0gbnVsbDsKLQlSZXN1bHRTZXQgcnMxID0gbnVsbDsKLQlib29sZWFuIHBhc3NlZCA9IHRydWU7Ci0JdHJ5IHsKLQkgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIHN0bXQxID0gY29ubjEuY3JlYXRlU3RhdGVtZW50KCk7Ci0JICAgIHN0bXQxLmV4ZWN1dGVVcGRhdGUoIklOU0VSVCBJTlRPICIgK3RhYmxlKyIgVkFMVUVTICgiCi0JICAgICAgICArIGtleVRvSW5zZXJ0KyIsICdBQkNEJykiKTsKKyAgICBDb25uZWN0aW9uIGNvbm4xID0gbnVsbDsKKyAgICBTdGF0ZW1lbnQgc3RtdDEgPSBudWxsOworICAgIFJlc3VsdFNldCByczEgPSBudWxsOworICAgIGJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKKyAgICB0cnkgeworICAgICAgICBjb25uMSA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgc3RtdDEgPSBjb25uMS5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgc3RtdDEuZXhlY3V0ZVVwZGF0ZSgiSU5TRVJUIElOVE8gIiArdGFibGUrIiBWQUxVRVMgKCIKKyAgICAgICAgICAgICsga2V5VG9JbnNlcnQrIiwgJ0FCQ0QnKSIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiUm9sbGJhY2sgdGhlIHR4Iik7Ci0JfSBjYXRjaCggU1FMRXhjZXB0aW9uIHNxbGUgKSB7Ci0JICAgIHRocm93IHNxbGU7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCBlICk7IAotCX0gZmluYWxseSB7Ci0JICAgIGlmIChyczEgIT0gbnVsbCApIHsKLQkgICAgICAgIHRyeSB7IHJzMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEgKSB7fQotCSAgICB9Ci0JICAgIGlmICggc3RtdDEgIT0gbnVsbCApIHsKLQkgICAgICAgIHRyeSB7IHN0bXQxLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30gICAgCi0JICAgIH0KLQkgICAgaWYgKCBjb25uMSAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fSAgICAKLQkgICAgfQotCX0KKyAgICB9IGNhdGNoKCBTUUxFeGNlcHRpb24gc3FsZSApIHsKKyAgICAgICAgdGhyb3cgc3FsZTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIGUgKTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBpZiAocnMxICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeyByczEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KKyAgICAgICAgfQorICAgICAgICBpZiAoIHN0bXQxICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeyBzdG10MS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBjb25uMSAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsgY29ubjEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQorICAgICAgICB9CisgICAgfQogCiAKICAgICB9CkBAIC0xNTIsODAgKzE1Miw4MCBAQAogICAgICAqIGNoYW5nZW92ZXIgaXMgaW5kZWVkIHN1Y2Nlc3NmdWwKICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqKioqKklOIFRFU1QgMioqKioqKioqKioqKioiKTsgICAgCi0JSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQlEYXRhU291cmNlIGRzMSA9IChEYXRhU291cmNlKWljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlMSIpOwotCURhdGFTb3VyY2UgZHMyID0gKERhdGFTb3VyY2UpaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UyIik7Ci0JQ29ubmVjdGlvbiBjb25uMSA9IG51bGw7Ci0JQ29ubmVjdGlvbiBjb25uMiA9IG51bGw7Ci0JU3RhdGVtZW50IHN0bXQxID0gbnVsbDsKLQlTdGF0ZW1lbnQgc3RtdDIgPSBudWxsOwotCVJlc3VsdFNldCByczEgPSBudWxsOwotCVJlc3VsdFNldCByczIgPSBudWxsOwotCWJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKLQl0cnkgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCZWZvcmUgZ2V0Q29ubmVjdGlvbiAxIik7CQotCSAgICBjb25uMSA9IGRzMS5nZXRDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFmdGVyIGdldENvbm5lY3Rpb24gMSIpOwkKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmVmb3JlIGdldENvbm5lY3Rpb24gMiIpOwkKLQkgICAgY29ubjIgPSBkczIuZ2V0Q29ubmVjdGlvbigpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBZnRlciBnZXRDb25uZWN0aW9uIDIiKTsJCi0JICAgIAotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCZWZvcmUgY3JlYXRlU3RhdGVtZW50IDEiKTsJCi0JICAgIHN0bXQxID0gY29ubjEuY3JlYXRlU3RhdGVtZW50KCk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFmdGVyIGNyZWF0ZVN0YXRlbWVudCAxIik7CQotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCZWZvcmUgY3JlYXRlU3RhdGVtZW50IDIiKTsJCi0JICAgIHN0bXQyID0gY29ubjIuY3JlYXRlU3RhdGVtZW50KCk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFmdGVyIGNyZWF0ZVN0YXRlbWVudCAyIik7CQotICAgICAgICAgICAgCi0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImV4ZWN1dGluZyBzdGF0ZW1lbnQgMSIpOyAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioqKipJTiBURVNUIDIqKioqKioqKioqKioqIik7CisgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICBEYXRhU291cmNlIGRzMSA9IChEYXRhU291cmNlKWljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9EYXRhU291cmNlMSIpOworICAgIERhdGFTb3VyY2UgZHMyID0gKERhdGFTb3VyY2UpaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UyIik7CisgICAgQ29ubmVjdGlvbiBjb25uMSA9IG51bGw7CisgICAgQ29ubmVjdGlvbiBjb25uMiA9IG51bGw7CisgICAgU3RhdGVtZW50IHN0bXQxID0gbnVsbDsKKyAgICBTdGF0ZW1lbnQgc3RtdDIgPSBudWxsOworICAgIFJlc3VsdFNldCByczEgPSBudWxsOworICAgIFJlc3VsdFNldCByczIgPSBudWxsOworICAgIGJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKKyAgICB0cnkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCZWZvcmUgZ2V0Q29ubmVjdGlvbiAxIik7CisgICAgICAgIGNvbm4xID0gZHMxLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWZ0ZXIgZ2V0Q29ubmVjdGlvbiAxIik7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJlZm9yZSBnZXRDb25uZWN0aW9uIDIiKTsKKyAgICAgICAgY29ubjIgPSBkczIuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBZnRlciBnZXRDb25uZWN0aW9uIDIiKTsKIAotCSAgICB0cnkgewotCSAgICAgICAgcnMxID0gc3RtdDEuZXhlY3V0ZVF1ZXJ5KCJTRUxFQ1QgKiBGUk9NIFRYTEVWRUxTV0lUQ0giKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQmVmb3JlIGNyZWF0ZVN0YXRlbWVudCAxIik7CisgICAgICAgIHN0bXQxID0gY29ubjEuY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFmdGVyIGNyZWF0ZVN0YXRlbWVudCAxIik7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJlZm9yZSBjcmVhdGVTdGF0ZW1lbnQgMiIpOworICAgICAgICBzdG10MiA9IGNvbm4yLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBZnRlciBjcmVhdGVTdGF0ZW1lbnQgMiIpOworCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImV4ZWN1dGluZyBzdGF0ZW1lbnQgMSIpOworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByczEgPSBzdG10MS5leGVjdXRlUXVlcnkoIlNFTEVDVCAqIEZST00gVFhMRVZFTFNXSVRDSCIpOwogICAgICAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUyICkgewotCSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGNlcHRpb24gZm9yIGZpcnN0IHF1ZXJ5IDoiICsgZTIuZ2V0TWVzc2FnZSgpICk7Ci0JICAgIH0gZmluYWxseSB7Ci0JICAgICAgICBwYXNzZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhjZXB0aW9uIGZvciBmaXJzdCBxdWVyeSA6IiArIGUyLmdldE1lc3NhZ2UoKSApOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgcGFzc2VkID0gZmFsc2U7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgIAotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJleGVjdXRpbmcgc3RhdGVtZW50IDIiKTsgCi0JICAgIHRyeSB7Ci0JICAgICAgICByczIgPSBzdG10Mi5leGVjdXRlUXVlcnkoIlNFTEVDVCAqIEZST00gVFhMRVZFTFNXSVRDSDIiKTsKLQkgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUyKSB7Ci0JICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4Y2VwdGlvbiBmb3Igc2Vjb25kIHF1ZXJ5IDoiICsgZTIuZ2V0TWVzc2FnZSgpICk7Ci0JICAgIH0gZmluYWxseSB7Ci0JICAgICAgICBwYXNzZWQgPSBmYWxzZTsKLQkgICAgfSAKIAotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJmaW5pc2hlZCBleGVjdXRpbmcgc3RhdGVtZW50cyIpOyAKLQkgICAgcGFzc2VkID0gIShyczEubmV4dCgpICYgcnMyLm5leHQoKSk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgcGFzc2VkID0gdHJ1ZTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJmaW5hbCBleGNlcHRpb24gOiAiICsgZS5nZXRNZXNzYWdlKCkgKTsKLQkgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlKTsKLQl9IGZpbmFsbHkgewotCSAgICBpZiAocnMxICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgeyByczEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KLQkgICAgfQorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJleGVjdXRpbmcgc3RhdGVtZW50IDIiKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJzMiA9IHN0bXQyLmV4ZWN1dGVRdWVyeSgiU0VMRUNUICogRlJPTSBUWExFVkVMU1dJVENIMiIpOworICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZTIpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhjZXB0aW9uIGZvciBzZWNvbmQgcXVlcnkgOiIgKyBlMi5nZXRNZXNzYWdlKCkgKTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgICAgICB9CiAKLQkgICAgaWYgKHJzMiAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsgcnMyLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9Ci0JICAgIH0KKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZmluaXNoZWQgZXhlY3V0aW5nIHN0YXRlbWVudHMiKTsKKyAgICAgICAgcGFzc2VkID0gIShyczEubmV4dCgpICYgcnMyLm5leHQoKSk7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgcGFzc2VkID0gdHJ1ZTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJmaW5hbCBleGNlcHRpb24gOiAiICsgZS5nZXRNZXNzYWdlKCkgKTsKKyAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlKTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICBpZiAocnMxICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeyByczEuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxICkge30KKyAgICAgICAgfQogCi0JICAgIGlmICggc3RtdDEgIT0gbnVsbCApIHsKLQkgICAgICAgIHRyeSB7IHN0bXQxLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30gICAgCi0JICAgIH0KLQkgICAgaWYgKCBzdG10MiAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsgc3RtdDIuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fSAgICAKLQkgICAgfQotCSAgICBpZiAoIGNvbm4xICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgeyBjb25uMS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9ICAgIAotCSAgICB9Ci0JICAgIGlmICggY29ubjIgIT0gbnVsbCApIHsKLQkgICAgICAgIHRyeSB7IGNvbm4yLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30gICAgCi0JICAgIH0KLQl9Ci0JcmV0dXJuIHBhc3NlZDsKKyAgICAgICAgaWYgKHJzMiAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsgcnMyLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSApIHt9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIHN0bXQxICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeyBzdG10MS5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBzdG10MiAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsgc3RtdDIuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQorICAgICAgICB9CisgICAgICAgIGlmICggY29ubjEgIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7IGNvbm4xLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQorICAgICAgICBpZiAoIGNvbm4yICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeyBjb25uMi5jbG9zZSgpOyB9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHBhc3NlZDsKICAgICB9CiAgICAgcHVibGljIHZvaWQgZWpiTG9hZCgpIHt9CiAgICAgcHVibGljIHZvaWQgZWpiU3RvcmUoKSB7fQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGxldmVsc3dpdGNoL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhsZXZlbHN3aXRjaC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggYjIyN2NhYy4uNDJkNWExNiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eGxldmVsc3dpdGNoL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4bGV2ZWxzd2l0Y2gvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDkgKzEsOSBAQAotRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIOw0KLQ0KLUNSRUFURSBUQUJMRSBUWExFVkVMU1dJVENIICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQotSU5TRVJUIElOVE8gVFhMRVZFTFNXSVRDSCBWQUxVRVMoMSwgJ3d4eXonKTsNCi1JTlNFUlQgSU5UTyBUWExFVkVMU1dJVENIIFZBTFVFUygyLCAncHFycycpOw0KK0Ryb3AgdGFibGUgVFhMRVZFTFNXSVRDSDsKKworQ1JFQVRFIFRBQkxFIFRYTEVWRUxTV0lUQ0ggKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQorKTsKKworSU5TRVJUIElOVE8gVFhMRVZFTFNXSVRDSCBWQUxVRVMoMSwgJ3d4eXonKTsKK0lOU0VSVCBJTlRPIFRYTEVWRUxTV0lUQ0ggVkFMVUVTKDIsICdwcXJzJyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4bGV2ZWxzd2l0Y2gvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhsZXZlbHN3aXRjaC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IDBjMTI0MmYuLmQxMWExMTUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhsZXZlbHN3aXRjaC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhsZXZlbHN3aXRjaC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xLDIgKzEsMiBAQAotRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIOw0KLURyb3AgdGFibGUgVFhMRVZFTFNXSVRDSDI7DQorRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIOworRHJvcCB0YWJsZSBUWExFVkVMU1dJVENIMjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhwYXNzdGhyb3VnaC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eHBhc3N0aHJvdWdoL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYThkZDY0MS4uMDAwYjcyZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eHBhc3N0aHJvdWdoL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eHBhc3N0aHJvdWdoL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE4ICsxNSwxOCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iamRiYy10eHBhc3N0aHJvdWdoIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4cGFzc3Rocm91Z2gvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eHBhc3N0aHJvdWdoL2J1aWxkLnhtbAppbmRleCA5OTI1NDQ5Li4zMTMxNzdhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4cGFzc3Rocm91Z2gvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhwYXNzdGhyb3VnaC9idWlsZC54bWwKQEAgLTMyLDE0ICszMiwxNCBAQAogICAmdGVzdHByb3BlcnRpZXM7CiAgICZqZGJjQ29tbW9uOwogICAmamRiY0NvbW1vblByb3BzOwotICAgIAorCiAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJjbGVhbixidWlsZCxkZXBsb3kscnVuLHVuZGVwbG95Ii8+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICA8ZGVsZXRlIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTYzLDIzICs2MywyMyBAQAogICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWpkYmMtY29tbW9uIi8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgIDwvdGFyZ2V0PgotICAKLSAgCisKKwogICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qZGJjLWNvbW1vbiIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CiAgIDwvdGFyZ2V0PgotICAKLSAgCisKKwogICA8dGFyZ2V0IG5hbWU9InJ1biI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZS5zcWwiLz4KLSAgICA8L2FudGNhbGw+ICAKKyAgICA8L2FudGNhbGw+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIi8+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgogICA8L3RhcmdldD4KLSAgCisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhwYXNzdGhyb3VnaC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4cGFzc3Rocm91Z2gvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDRmMDZiN2MuLjI4ZmM4ZTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhwYXNzdGhyb3VnaC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eHBhc3N0aHJvdWdoL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjgsMjQgKzI4LDI0IEBACiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKLSAJU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCk7Ci0JU3RyaW5nIHRlc3RTdWl0ZSA9ICJUeFBhc3NUaHJvdWdoICI7CisgICAgIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOworICAgIFN0cmluZyB0ZXN0U3VpdGUgPSAiVHhQYXNzVGhyb3VnaCAiOwogCiAgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgIE9iamVjdCBvYmpSZWYgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL05vVHhDb25uVGVzdEVKQiIpOwotCU5vVHhDb25uVGVzdEhvbWUgaG9tZSA9IChOb1R4Q29ublRlc3RIb21lKQorICAgIE5vVHhDb25uVGVzdEhvbWUgaG9tZSA9IChOb1R4Q29ublRlc3RIb21lKQogICAgICAgICAgICAgamF2YXgucm1pLlBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpSZWYsIE5vVHhDb25uVGVzdEhvbWUuY2xhc3MpOwogCiAgICAgICAgIE5vVHhDb25uVGVzdCBiZWFuID0gaG9tZS5jcmVhdGUoKTsKLQlzdGF0LmFkZERlc2NyaXB0aW9uKCJUWCBQYXNzIFRocm91Z2ggdGVzdHMgIik7CisgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVFggUGFzcyBUaHJvdWdoIHRlc3RzICIpOwogCiAgICAgICAgIGlmICggYmVhbi50ZXN0MSgpICkgewotCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUrIiB0ZXN0MSA6ICIsIHN0YXQuUEFTUyk7Ci0JfSBlbHNlIHsKLQkgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyIgdGVzdDEgOiAiLCBzdGF0LkZBSUwpOwotCX0KLQlzdGF0LnByaW50U3VtbWFyeSgpOwotICAgIAotICAgICAgICAKKyAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlKyIgdGVzdDEgOiAiLCBzdGF0LlBBU1MpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSsiIHRlc3QxIDogIiwgc3RhdC5GQUlMKTsKKyAgICB9CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKKworCiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eHBhc3N0aHJvdWdoL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eHBhc3N0aHJvdWdoL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCmluZGV4IDZjNmM2M2EuLjc4NmRmYjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhwYXNzdGhyb3VnaC9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4cGFzc3Rocm91Z2gvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKQEAgLTI0LDQ0ICsyNCw0NCBAQAogICAgICAgPGpuZGktbmFtZT5lamIvTm9UeENvbm5UZXN0RUpCPC9qbmRpLW5hbWU+CiAgICAgICA8ZWpiLXJlZj4KICAgICAgICAgPGVqYi1yZWYtbmFtZT5lamIvU2Vjb25kRUpCPC9lamItcmVmLW5hbWU+Ci0JPGpuZGktbmFtZT5lamIvU2Vjb25kRUpCPC9qbmRpLW5hbWU+CisgICAgPGpuZGktbmFtZT5lamIvU2Vjb25kRUpCPC9qbmRpLW5hbWU+CiAgICAgICA8L2VqYi1yZWY+CiAgICAgICA8cmVzb3VyY2UtcmVmPgogICAgICAgICA8cmVzLXJlZi1uYW1lPmpkYmMvdHhwYXNzdGhyb3VnaDwvcmVzLXJlZi1uYW1lPgogICAgICAgICA8am5kaS1uYW1lPmpkYmMvczFxZURCPC9qbmRpLW5hbWU+Ci0JPGRlZmF1bHQtcmVzb3VyY2UtcHJpbmNpcGFsPgotCSAgPG5hbWU+cGJwdWJsaWM8L25hbWU+Ci0JICA8cGFzc3dvcmQ+cGJwdWJsaWM8L3Bhc3N3b3JkPgotCTwvZGVmYXVsdC1yZXNvdXJjZS1wcmluY2lwYWw+CisgICAgPGRlZmF1bHQtcmVzb3VyY2UtcHJpbmNpcGFsPgorICAgICAgPG5hbWU+cGJwdWJsaWM8L25hbWU+CisgICAgICA8cGFzc3dvcmQ+cGJwdWJsaWM8L3Bhc3N3b3JkPgorICAgIDwvZGVmYXVsdC1yZXNvdXJjZS1wcmluY2lwYWw+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KLSAgICA8L2VqYj4gIAorICAgIDwvZWpiPgogICAgIDxlamI+CiAgICAgICA8ZWpiLW5hbWU+U2Vjb25kRUpCPC9lamItbmFtZT4KICAgICAgIDxqbmRpLW5hbWU+ZWpiL1NlY29uZEVKQjwvam5kaS1uYW1lPgogICAgICAgPGVqYi1yZWY+CiAgICAgICAgIDxlamItcmVmLW5hbWU+ZWpiL1RoaXJkRUpCPC9lamItcmVmLW5hbWU+Ci0JPGpuZGktbmFtZT5lamIvVGhpcmRFSkI8L2puZGktbmFtZT4KKyAgICA8am5kaS1uYW1lPmVqYi9UaGlyZEVKQjwvam5kaS1uYW1lPgogICAgICAgPC9lamItcmVmPgogICAgICAgPHJlc291cmNlLXJlZj4KICAgICAgICAgPHJlcy1yZWYtbmFtZT5qZGJjL3R4cGFzc3Rocm91Z2g8L3Jlcy1yZWYtbmFtZT4KICAgICAgICAgPGpuZGktbmFtZT5qZGJjL3MxcWVEQjwvam5kaS1uYW1lPgotCTxkZWZhdWx0LXJlc291cmNlLXByaW5jaXBhbD4KLQkgIDxuYW1lPnBicHVibGljPC9uYW1lPgotCSAgPHBhc3N3b3JkPnBicHVibGljPC9wYXNzd29yZD4KLQk8L2RlZmF1bHQtcmVzb3VyY2UtcHJpbmNpcGFsPgorICAgIDxkZWZhdWx0LXJlc291cmNlLXByaW5jaXBhbD4KKyAgICAgIDxuYW1lPnBicHVibGljPC9uYW1lPgorICAgICAgPHBhc3N3b3JkPnBicHVibGljPC9wYXNzd29yZD4KKyAgICA8L2RlZmF1bHQtcmVzb3VyY2UtcHJpbmNpcGFsPgogICAgICAgPC9yZXNvdXJjZS1yZWY+Ci0gICAgPC9lamI+ICAKKyAgICA8L2VqYj4KICAgICA8ZWpiPgogICAgICAgPGVqYi1uYW1lPlRoaXJkRUpCPC9lamItbmFtZT4KICAgICAgIDxqbmRpLW5hbWU+ZWpiL1RoaXJkRUpCPC9qbmRpLW5hbWU+CiAgICAgICA8cmVzb3VyY2UtcmVmPgogICAgICAgICA8cmVzLXJlZi1uYW1lPmpkYmMvdHhwYXNzdGhyb3VnaDwvcmVzLXJlZi1uYW1lPgogICAgICAgICA8am5kaS1uYW1lPmpkYmMvczFxZURCPC9qbmRpLW5hbWU+Ci0JPGRlZmF1bHQtcmVzb3VyY2UtcHJpbmNpcGFsPgotCSAgPG5hbWU+cGJwdWJsaWM8L25hbWU+Ci0JICA8cGFzc3dvcmQ+cGJwdWJsaWM8L3Bhc3N3b3JkPgotCTwvZGVmYXVsdC1yZXNvdXJjZS1wcmluY2lwYWw+CisgICAgPGRlZmF1bHQtcmVzb3VyY2UtcHJpbmNpcGFsPgorICAgICAgPG5hbWU+cGJwdWJsaWM8L25hbWU+CisgICAgICA8cGFzc3dvcmQ+cGJwdWJsaWM8L3Bhc3N3b3JkPgorICAgIDwvZGVmYXVsdC1yZXNvdXJjZS1wcmluY2lwYWw+CiAgICAgICA8L3Jlc291cmNlLXJlZj4KLSAgICA8L2VqYj4gIAorICAgIDwvZWpiPgogICA8L2VudGVycHJpc2UtYmVhbnM+CiA8L3N1bi1lamItamFyPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eHBhc3N0aHJvdWdoL2VqYi9Ob1R4Q29ublRlc3RCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4cGFzc3Rocm91Z2gvZWpiL05vVHhDb25uVGVzdEJlYW4uamF2YQppbmRleCA3NDA1NTEyLi5jMjg0YzcwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4cGFzc3Rocm91Z2gvZWpiL05vVHhDb25uVGVzdEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4cGFzc3Rocm91Z2gvZWpiL05vVHhDb25uVGVzdEJlYW4uamF2YQpAQCAtMzAsNyArMzAsNyBAQAogICAgIHByaXZhdGUgRUpCQ29udGV4dCBlamJjb250ZXh0OwogICAgIHByaXZhdGUgdHJhbnNpZW50IGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0IG1fY3R4ID0gbnVsbDsKICAgICB0cmFuc2llbnQgamF2YXguc3FsLkRhdGFTb3VyY2UgZHM7Ci0JCisKIAogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0IGN0eCkgewogICAgICAgICBtX2N0eCA9IGN0eDsKQEAgLTQ1LDEwICs0NSwxMCBAQAogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHt9CiAKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIiBAQEBAIEVudGVyaW5nIEJlYW4gMSBAQEBAICIpOwotCUNvbm5lY3Rpb24gY29ubiA9IG51bGw7Ci0JU3RhdGVtZW50IHN0bXQgPSBudWxsOwotCVJlc3VsdFNldCBycyA9IG51bGw7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIgQEBAQCBFbnRlcmluZyBCZWFuIDEgQEBAQCAiKTsKKyAgICBDb25uZWN0aW9uIGNvbm4gPSBudWxsOworICAgIFN0YXRlbWVudCBzdG10ID0gbnVsbDsKKyAgICBSZXN1bHRTZXQgcnMgPSBudWxsOwogCiAgICAgICAgIHRyeSB7CiAKQEAgLTYwLDE0ICs2MCwxNCBAQAogICAgICAgICAgICAgcnMgPSBzdG10LmV4ZWN1dGVRdWVyeShxdWVyeTEpOwogCiAgICAgICAgICAgICBPYmplY3QgbyA9IGN0eC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1NlY29uZEVKQiIpOwotCSAgICBTZWNvbmRIb21lIGhvbWUgPSAoU2Vjb25kSG9tZSkKLQkgICAgICAgIGphdmF4LnJtaS5Qb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cobywgU2Vjb25kSG9tZS5jbGFzcyApOwotCSAgICBTZWNvbmQgYmVhbiA9IGhvbWUuY3JlYXRlKCk7Ci0JICAgIHJldHVybiBiZWFuLnRlc3QxKCk7CisgICAgICAgIFNlY29uZEhvbWUgaG9tZSA9IChTZWNvbmRIb21lKQorICAgICAgICAgICAgamF2YXgucm1pLlBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvLCBTZWNvbmRIb21lLmNsYXNzICk7CisgICAgICAgIFNlY29uZCBiZWFuID0gaG9tZS5jcmVhdGUoKTsKKyAgICAgICAgcmV0dXJuIGJlYW4udGVzdDEoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYXVnaHQgRXhjZXB0aW9uIGluIDFzdCBCZWFuLS0tIik7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYXVnaHQgRXhjZXB0aW9uIGluIDFzdCBCZWFuLS0tIik7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIGlmIChycyAhPSBudWxsICkgewogICAgICAgICAgICAgICAgIHRyeSB7IHJzLmNsb3NlKCk7IH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KQEAgLTc4LDkgKzc4LDkgQEAKICAgICAgICAgICAgIGlmIChjb25uICE9IG51bGwgKSB7CiAgICAgICAgICAgICAgICAgdHJ5IHtjb25uLmNsb3NlKCk7fSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQogICAgICAgICAgICAgfQotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBAQEBAIEV4aXRpbmcgQmVhbiAxIEBAQEAgIik7Ci0gICAgICAgICAgICAJCi0gICAgICAgCX0KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgQEBAQCBFeGl0aW5nIEJlYW4gMSBAQEBAICIpOworCisgICAgICAgICAgIH0KICAgICB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eHBhc3N0aHJvdWdoL2VqYi9TZWNvbmRCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4cGFzc3Rocm91Z2gvZWpiL1NlY29uZEJlYW4uamF2YQppbmRleCA1NWVkMDYxLi4xMjc3MDljIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4cGFzc3Rocm91Z2gvZWpiL1NlY29uZEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4cGFzc3Rocm91Z2gvZWpiL1NlY29uZEJlYW4uamF2YQpAQCAtMzAsNyArMzAsNyBAQAogICAgIHByaXZhdGUgRUpCQ29udGV4dCBlamJjb250ZXh0OwogICAgIHByaXZhdGUgdHJhbnNpZW50IGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0IG1fY3R4ID0gbnVsbDsKICAgICB0cmFuc2llbnQgamF2YXguc3FsLkRhdGFTb3VyY2UgZHM7Ci0JCisKIAogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0IGN0eCkgewogICAgICAgICBtX2N0eCA9IGN0eDsKQEAgLTQ1LDMwICs0NSwzMCBAQAogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHt9CiAKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIiBAQEBAIEVudGVyaW5nIEJlYW4yIEBAQEAgIik7Ci0JQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKLQlTdGF0ZW1lbnQgc3RtdCA9IG51bGw7Ci0JUmVzdWx0U2V0IHJzID0gbnVsbDsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBAQEBAIEVudGVyaW5nIEJlYW4yIEBAQEAgIik7CisgICAgQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKKyAgICBTdGF0ZW1lbnQgc3RtdCA9IG51bGw7CisgICAgUmVzdWx0U2V0IHJzID0gbnVsbDsKIAogICAgICAgICB0cnkgewogCiAgICAgICAgICAgICBJbml0aWFsQ29udGV4dCBjdHggPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkgICAgLyoKKyAgICAgICAgLyoKICAgICAgICAgICAgIGRzID0gKGphdmF4LnNxbC5EYXRhU291cmNlKSBjdHgubG9va3VwKCJqYXZhOmNvbXAvZW52L2pkYmMvdHhwYXNzdGhyb3VnaCIpOwogICAgICAgICAgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oImRidXNlciIsICJkYnBhc3N3b3JkIik7CiAgICAgICAgICAgICBzdG10ID0gY29ubi5jcmVhdGVTdGF0ZW1lbnQoKTsKICAgICAgICAgICAgIFN0cmluZyBxdWVyeTEgPSAiU0VMRUNUICogRlJPTSBPTkxZR0VUQ09OTkVDVElPTiI7CiAgICAgICAgICAgICBycyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KHF1ZXJ5MSk7Ci0JICAgICovCisgICAgICAgICovCiAgICAgICAgICAgICBPYmplY3QgbyA9IGN0eC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1RoaXJkRUpCIik7Ci0JICAgIFRoaXJkSG9tZSB0ID0gKFRoaXJkSG9tZSkKLQkgICAgICAgIGphdmF4LnJtaS5Qb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3coIG8sIFRoaXJkSG9tZS5jbGFzcyApOwotCSAgICBUaGlyZCBiZWFuID0gdC5jcmVhdGUoKTsKLSAgICAgICAgICAgIHJldHVybiBiZWFuLnRlc3QxKCk7CSAgIAorICAgICAgICBUaGlyZEhvbWUgdCA9IChUaGlyZEhvbWUpCisgICAgICAgICAgICBqYXZheC5ybWkuUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KCBvLCBUaGlyZEhvbWUuY2xhc3MgKTsKKyAgICAgICAgVGhpcmQgYmVhbiA9IHQuY3JlYXRlKCk7CisgICAgICAgICAgICByZXR1cm4gYmVhbi50ZXN0MSgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhdWdodCBFeGNlcHRpb24gaW4gMm5kIEJlYW4tLS0iKTsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhdWdodCBFeGNlcHRpb24gaW4gMm5kIEJlYW4tLS0iKTsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgaWYgKHJzICE9IG51bGwgKSB7CiAgICAgICAgICAgICAgICAgdHJ5IHsgcnMuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQpAQCAtNzksOSArNzksOSBAQAogICAgICAgICAgICAgaWYgKGNvbm4gIT0gbnVsbCApIHsKICAgICAgICAgICAgICAgICB0cnkge2Nvbm4uY2xvc2UoKTt9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CiAgICAgICAgICAgICB9Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIEBAQEAgRXhpdGluZyBCZWFuIDIgQEBAQCIpOwotICAgICAgICAgICAgCQotICAgICAgIAl9CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIEBAQEAgRXhpdGluZyBCZWFuIDIgQEBAQCIpOworCisgICAgICAgICAgIH0KICAgICB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eHBhc3N0aHJvdWdoL2VqYi9UaGlyZEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhwYXNzdGhyb3VnaC9lamIvVGhpcmRCZWFuLmphdmEKaW5kZXggMmNiZDJiMi4uMjdlYjM4NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eHBhc3N0aHJvdWdoL2VqYi9UaGlyZEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4cGFzc3Rocm91Z2gvZWpiL1RoaXJkQmVhbi5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiAgICAgcHJpdmF0ZSBFSkJDb250ZXh0IGVqYmNvbnRleHQ7CiAgICAgcHJpdmF0ZSB0cmFuc2llbnQgamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQgbV9jdHggPSBudWxsOwogICAgIHRyYW5zaWVudCBqYXZheC5zcWwuRGF0YVNvdXJjZSBkczsKLQkKKwogCiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQgY3R4KSB7CiAgICAgICAgIG1fY3R4ID0gY3R4OwpAQCAtNDUsMTAgKzQ1LDEwIEBACiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkge30KIAogICAgIHB1YmxpYyBib29sZWFuIHRlc3QxKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiIEBAQEAgRW50ZXJpbmcgQmVhbiAzIEBAQEAiKTsKLQlDb25uZWN0aW9uIGNvbm4gPSBudWxsOwotCVN0YXRlbWVudCBzdG10ID0gbnVsbDsKLQlSZXN1bHRTZXQgcnMgPSBudWxsOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIEBAQEAgRW50ZXJpbmcgQmVhbiAzIEBAQEAiKTsKKyAgICBDb25uZWN0aW9uIGNvbm4gPSBudWxsOworICAgIFN0YXRlbWVudCBzdG10ID0gbnVsbDsKKyAgICBSZXN1bHRTZXQgcnMgPSBudWxsOwogCiAgICAgICAgIHRyeSB7CiAKQEAgLTU2LDEzICs1NiwxMyBAQAogICAgICAgICAgICAgZHMgPSAoamF2YXguc3FsLkRhdGFTb3VyY2UpIGN0eC5sb29rdXAoImphdmE6Y29tcC9lbnYvamRiYy90eHBhc3N0aHJvdWdoIik7CiAgICAgICAgICAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigiZGJ1c2VyIiwgImRicGFzc3dvcmQiKTsKICAgICAgICAgICAgIHN0bXQgPSBjb25uLmNyZWF0ZVN0YXRlbWVudCgpOwotICAgICAgICAgICAgCVN0cmluZyBxdWVyeTEgPSAiU0VMRUNUICogRlJPTSBPTkxZR0VUQ09OTkVDVElPTiI7CisgICAgICAgICAgICAgICAgU3RyaW5nIHF1ZXJ5MSA9ICJTRUxFQ1QgKiBGUk9NIE9OTFlHRVRDT05ORUNUSU9OIjsKICAgICAgICAgICAgIHJzID0gc3RtdC5leGVjdXRlUXVlcnkocXVlcnkxKTsKLQkgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhdWdodCBFeGNlcHRpb24gaW4gM3JkIEJlYW4tLS0iKTsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhdWdodCBFeGNlcHRpb24gaW4gM3JkIEJlYW4tLS0iKTsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgaWYgKHJzICE9IG51bGwgKSB7CiAgICAgICAgICAgICAgICAgdHJ5IHsgcnMuY2xvc2UoKTsgfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fQpAQCAtNzMsOCArNzMsOCBAQAogICAgICAgICAgICAgaWYgKGNvbm4gIT0gbnVsbCApIHsKICAgICAgICAgICAgICAgICB0cnkge2Nvbm4uY2xvc2UoKTt9IGNhdGNoKCBFeGNlcHRpb24gZTEpIHt9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBAQEBAIEV4aXRpbmcgQmVhbiAzIEBAQEAiKTsJCi0gICAgICAgCX0KKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIEBAQEAgRXhpdGluZyBCZWFuIDMgQEBAQCIpOworICAgICAgICAgICB9CiAgICAgfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhwYXNzdGhyb3VnaC9zcWwvY3JlYXRlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdHhwYXNzdGhyb3VnaC9zcWwvY3JlYXRlLnNxbAppbmRleCBjNThhNmUzLi5hZTlmNTY5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3R4cGFzc3Rocm91Z2gvc3FsL2NyZWF0ZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy90eHBhc3N0aHJvdWdoL3NxbC9jcmVhdGUuc3FsCkBAIC0xLDUgKzEsNSBAQAogRFJPUCBUQUJMRSBPTkxZR0VUQ09OTkVDVElPTjsKIENSRUFURSBUQUJMRSBPTkxZR0VUQ09OTkVDVElPTigKLSAgICBuYW1lIGNoYXIoMjApLCAKKyAgICBuYW1lIGNoYXIoMjApLAogICAgIG51bSBpbnRlZ2VyCiApOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9TZXREZXJieUF1dGhlbnRpY2F0aW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL1NldERlcmJ5QXV0aGVudGljYXRpb24uamF2YQppbmRleCBkMTMxODJiLi45M2Y5NGZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL1NldERlcmJ5QXV0aGVudGljYXRpb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL1NldERlcmJ5QXV0aGVudGljYXRpb24uamF2YQpAQCAtMjgsMTIgKzI4LDEyIEBACiAgKiBAYXV0aG9yIHNoYWxpbmkKICAqLwogcHVibGljIGNsYXNzIFNldERlcmJ5QXV0aGVudGljYXRpb24gewotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIERBVEFCQVNFU19IT01FID0gIi90bXAvamRiY19kZXZ0ZXN0cy9kYXRhYmFzZXMiOwogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBSRUNPTkZJR19EQl9OQU1FID0gREFUQUJBU0VTX0hPTUUgKyAiL3JlY29uZmlnLWRiIjsKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgU0FNUExFX0RCX05BTUUgPSBEQVRBQkFTRVNfSE9NRSArICIvc2FtcGxlLWRiIjsKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgU1VOX0FQUFNFUlZfU0FNUExFU19EQiA9IERBVEFCQVNFU19IT01FICsgIi9zdW4tYXBwc2Vydi1zYW1wbGVzIjsKLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc2V0Q29tbW9uREJBdXRoZW50aWNhdGlvbigpOwogICAgICAgICBzZXRSZWNvbmZpZ0RCQXV0aGVudGljYXRpb24oKTsKQEAgLTQ1LDMwICs0NSwzMCBAQAogICAgICAgICBDb25uZWN0aW9uIGNvbiA9IG51bGw7CiAgICAgICAgIFJlc3VsdFNldCBycyA9IG51bGw7CiAgICAgICAgIHRyeSB7Ci0JICAgIERhdGFTb3VyY2UgZHMgPSBpbml0aWFsaXplRGF0YVNvdXJjZSgpOwotCSAgICBjb24gPSAoQ29ubmVjdGlvbikgZHMuZ2V0Q29ubmVjdGlvbigpOwotCSAgICBzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOwotCSAgICAvL0V4ZWN1dGUgQ2FsbGFibGVTdGF0ZW1lbnQgdG8gZW5hYmxlIGF1dGhlbnRpY2F0aW9uCi0JICAgIHN0bXQuZXhlY3V0ZVVwZGF0ZSgiQ0FMTCBTWVNDU19VVElMLlNZU0NTX1NFVF9EQVRBQkFTRV9QUk9QRVJUWSgiICsgCi0JCQkgICAgCQkJIidkZXJieS5jb25uZWN0aW9uLnJlcXVpcmVBdXRoZW50aWNhdGlvbicsICd0cnVlJykiKTsKLSAgIAkgICAgcnMgPSBzdG10LmV4ZWN1dGVRdWVyeSggCi0JICAgICAgICAgICAgIlZBTFVFUyBTWVNDU19VVElMLlNZU0NTX0dFVF9EQVRBQkFTRV9QUk9QRVJUWSgiICsgCi0JCSAgICAiJ2RlcmJ5LmNvbm5lY3Rpb24ucmVxdWlyZUF1dGhlbnRpY2F0aW9uJykiKTsgCi0JICAgIHJzLm5leHQoKTsgCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQXV0aGVudGljYXRpb24gc2V0IHRvICIgKyBycy5nZXRTdHJpbmcoMSkpOyAJCQorICAgICAgICBEYXRhU291cmNlIGRzID0gaW5pdGlhbGl6ZURhdGFTb3VyY2UoKTsKKyAgICAgICAgY29uID0gKENvbm5lY3Rpb24pIGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKKyAgICAgICAgLy9FeGVjdXRlIENhbGxhYmxlU3RhdGVtZW50IHRvIGVuYWJsZSBhdXRoZW50aWNhdGlvbgorICAgICAgICBzdG10LmV4ZWN1dGVVcGRhdGUoIkNBTEwgU1lTQ1NfVVRJTC5TWVNDU19TRVRfREFUQUJBU0VfUFJPUEVSVFkoIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIidkZXJieS5jb25uZWN0aW9uLnJlcXVpcmVBdXRoZW50aWNhdGlvbicsICd0cnVlJykiKTsKKyAgICAgICAgICAgcnMgPSBzdG10LmV4ZWN1dGVRdWVyeSgKKyAgICAgICAgICAgICAgICAiVkFMVUVTIFNZU0NTX1VUSUwuU1lTQ1NfR0VUX0RBVEFCQVNFX1BST1BFUlRZKCIgKworICAgICAgICAgICAgIidkZXJieS5jb25uZWN0aW9uLnJlcXVpcmVBdXRoZW50aWNhdGlvbicpIik7CisgICAgICAgIHJzLm5leHQoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBdXRoZW50aWNhdGlvbiBzZXQgdG8gIiArIHJzLmdldFN0cmluZygxKSk7CiAKLQkgICAgLy9TZXR0aW5nIFVzZXJuYW1lcyBhbmQgcGFzc3dvcmRzCi0JICAgIHN0bXQuZXhlY3V0ZVVwZGF0ZSgiQ0FMTCBTWVNDU19VVElMLlNZU0NTX1NFVF9EQVRBQkFTRV9QUk9QRVJUWSgiICsgCi0JCQkgICAgCQkJIidkZXJieS51c2VyLmRidXNlcicsICdkYnBhc3N3b3JkJykiKTsKLQkgICAgc3RtdC5leGVjdXRlVXBkYXRlKCJDQUxMIFNZU0NTX1VUSUwuU1lTQ1NfU0VUX0RBVEFCQVNFX1BST1BFUlRZKCIgKyAKLQkJCSAgICAJCQkiJ2RlcmJ5LnVzZXIuREJVU0VSJywgJ0RCUEFTU1dPUkQnKSIpOwotCSAgICBzdG10LmV4ZWN1dGVVcGRhdGUoIkNBTEwgU1lTQ1NfVVRJTC5TWVNDU19TRVRfREFUQUJBU0VfUFJPUEVSVFkoIiArIAotCQkJICAgIAkJCSInZGVyYnkudXNlci5BUFAnLCAnQVBQJykiKTsKLQkgICAgc3RtdC5leGVjdXRlVXBkYXRlKCJDQUxMIFNZU0NTX1VUSUwuU1lTQ1NfU0VUX0RBVEFCQVNFX1BST1BFUlRZKCIgKyAKLQkJCSAgICAJCQkiJ2RlcmJ5LnVzZXIuREVSQllVU0VSJywgJ0RFUkJZUEFTU1dPUkQnKSIpOworICAgICAgICAvL1NldHRpbmcgVXNlcm5hbWVzIGFuZCBwYXNzd29yZHMKKyAgICAgICAgc3RtdC5leGVjdXRlVXBkYXRlKCJDQUxMIFNZU0NTX1VUSUwuU1lTQ1NfU0VUX0RBVEFCQVNFX1BST1BFUlRZKCIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICInZGVyYnkudXNlci5kYnVzZXInLCAnZGJwYXNzd29yZCcpIik7CisgICAgICAgIHN0bXQuZXhlY3V0ZVVwZGF0ZSgiQ0FMTCBTWVNDU19VVElMLlNZU0NTX1NFVF9EQVRBQkFTRV9QUk9QRVJUWSgiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJ2RlcmJ5LnVzZXIuREJVU0VSJywgJ0RCUEFTU1dPUkQnKSIpOworICAgICAgICBzdG10LmV4ZWN1dGVVcGRhdGUoIkNBTEwgU1lTQ1NfVVRJTC5TWVNDU19TRVRfREFUQUJBU0VfUFJPUEVSVFkoIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIidkZXJieS51c2VyLkFQUCcsICdBUFAnKSIpOworICAgICAgICBzdG10LmV4ZWN1dGVVcGRhdGUoIkNBTEwgU1lTQ1NfVVRJTC5TWVNDU19TRVRfREFUQUJBU0VfUFJPUEVSVFkoIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIidkZXJieS51c2VyLkRFUkJZVVNFUicsICdERVJCWVBBU1NXT1JEJykiKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotCX0gZmluYWxseSB7CisgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgaWYocnMgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICBycy5jbG9zZSgpOwpAQCAtOTAsMzUgKzkwLDM1IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAgICAgfSAgICAgICAgICAgIAotICAgICAgICB9ICAgICAgIAorICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBzZXRSZWNvbmZpZ0RCQXV0aGVudGljYXRpb24oKSB7CiAgICAgICAgIFN0YXRlbWVudCBzdG10ID0gbnVsbDsKICAgICAgICAgQ29ubmVjdGlvbiBjb24gPSBudWxsOwotICAgICAgICBSZXN1bHRTZXQgcnMgPSBudWxsOyAgICAgICAgICAgICAgCisgICAgICAgIFJlc3VsdFNldCBycyA9IG51bGw7CiAgICAgICAgIHRyeSB7Ci0JICAgIERhdGFTb3VyY2UgZHMgPSBpbml0aWFsaXplUmVjb25maWdEYXRhU291cmNlKCk7Ci0JICAgIGNvbiA9IChDb25uZWN0aW9uKSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIHN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7Ci0JICAgIC8vRXhlY3V0ZSBDYWxsYWJsZVN0YXRlbWVudCB0byBlbmFibGUgYXV0aGVudGljYXRpb24KLQkgICAgc3RtdC5leGVjdXRlVXBkYXRlKCJDQUxMIFNZU0NTX1VUSUwuU1lTQ1NfU0VUX0RBVEFCQVNFX1BST1BFUlRZKCIgKyAKLQkJCSAgICAJCQkiJ2RlcmJ5LmNvbm5lY3Rpb24ucmVxdWlyZUF1dGhlbnRpY2F0aW9uJywgJ3RydWUnKSIpOwotICAgCSAgICBycyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KCAKLQkgICAgICAgICAgICAiVkFMVUVTIFNZU0NTX1VUSUwuU1lTQ1NfR0VUX0RBVEFCQVNFX1BST1BFUlRZKCIgKyAKLQkJICAgICInZGVyYnkuY29ubmVjdGlvbi5yZXF1aXJlQXV0aGVudGljYXRpb24nKSIpOyAKLQkgICAgcnMubmV4dCgpOyAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJBdXRoZW50aWNhdGlvbiBzZXQgdG8gIiArIHJzLmdldFN0cmluZygxKSk7IAkJCisgICAgICAgIERhdGFTb3VyY2UgZHMgPSBpbml0aWFsaXplUmVjb25maWdEYXRhU291cmNlKCk7CisgICAgICAgIGNvbiA9IChDb25uZWN0aW9uKSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIHN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7CisgICAgICAgIC8vRXhlY3V0ZSBDYWxsYWJsZVN0YXRlbWVudCB0byBlbmFibGUgYXV0aGVudGljYXRpb24KKyAgICAgICAgc3RtdC5leGVjdXRlVXBkYXRlKCJDQUxMIFNZU0NTX1VUSUwuU1lTQ1NfU0VUX0RBVEFCQVNFX1BST1BFUlRZKCIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICInZGVyYnkuY29ubmVjdGlvbi5yZXF1aXJlQXV0aGVudGljYXRpb24nLCAndHJ1ZScpIik7CisgICAgICAgICAgIHJzID0gc3RtdC5leGVjdXRlUXVlcnkoCisgICAgICAgICAgICAgICAgIlZBTFVFUyBTWVNDU19VVElMLlNZU0NTX0dFVF9EQVRBQkFTRV9QUk9QRVJUWSgiICsKKyAgICAgICAgICAgICInZGVyYnkuY29ubmVjdGlvbi5yZXF1aXJlQXV0aGVudGljYXRpb24nKSIpOworICAgICAgICBycy5uZXh0KCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQXV0aGVudGljYXRpb24gc2V0IHRvICIgKyBycy5nZXRTdHJpbmcoMSkpOwogCi0JICAgIC8vU2V0dGluZyBVc2VybmFtZXMgYW5kIHBhc3N3b3JkcwotCSAgICBzdG10LmV4ZWN1dGVVcGRhdGUoIkNBTEwgU1lTQ1NfVVRJTC5TWVNDU19TRVRfREFUQUJBU0VfUFJPUEVSVFkoIiArIAotCQkJICAgIAkJCSInZGVyYnkudXNlci5ydXNlcicsICdycGFzc3dvcmQnKSIpOwotCSAgICBzdG10LmV4ZWN1dGVVcGRhdGUoIkNBTEwgU1lTQ1NfVVRJTC5TWVNDU19TRVRfREFUQUJBU0VfUFJPUEVSVFkoIiArIAotCQkJICAgIAkJCSInZGVyYnkudXNlci5SVVNFUicsICdSUEFTU1dPUkQnKSIpOworICAgICAgICAvL1NldHRpbmcgVXNlcm5hbWVzIGFuZCBwYXNzd29yZHMKKyAgICAgICAgc3RtdC5leGVjdXRlVXBkYXRlKCJDQUxMIFNZU0NTX1VUSUwuU1lTQ1NfU0VUX0RBVEFCQVNFX1BST1BFUlRZKCIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICInZGVyYnkudXNlci5ydXNlcicsICdycGFzc3dvcmQnKSIpOworICAgICAgICBzdG10LmV4ZWN1dGVVcGRhdGUoIkNBTEwgU1lTQ1NfVVRJTC5TWVNDU19TRVRfREFUQUJBU0VfUFJPUEVSVFkoIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIidkZXJieS51c2VyLlJVU0VSJywgJ1JQQVNTV09SRCcpIik7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLQl9IGZpbmFsbHkgeworICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGlmKHJzICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgcnMuY2xvc2UoKTsKQEAgLTE0MCwzNiArMTQwLDM2IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAgICAgfSAgICAgICAgICAgIAotICAgICAgICAgICAgCisgICAgICAgICAgICB9CisKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIHZvaWQgc2V0U2FtcGxlREJBdXRoZW50aWNhdGlvbigpIHsKICAgICAgICAgU3RhdGVtZW50IHN0bXQgPSBudWxsOwogICAgICAgICBDb25uZWN0aW9uIGNvbiA9IG51bGw7Ci0gICAgICAgIFJlc3VsdFNldCBycyA9IG51bGw7ICAgICAgICAgICAgICAKKyAgICAgICAgUmVzdWx0U2V0IHJzID0gbnVsbDsKICAgICAgICAgdHJ5IHsKLQkgICAgRGF0YVNvdXJjZSBkcyA9IGluaXRpYWxpemVTYW1wbGVEYXRhU291cmNlKCk7Ci0JICAgIGNvbiA9IChDb25uZWN0aW9uKSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIHN0bXQgPSBjb24uY3JlYXRlU3RhdGVtZW50KCk7Ci0JICAgIC8vRXhlY3V0ZSBDYWxsYWJsZVN0YXRlbWVudCB0byBlbmFibGUgYXV0aGVudGljYXRpb24KLQkgICAgc3RtdC5leGVjdXRlVXBkYXRlKCJDQUxMIFNZU0NTX1VUSUwuU1lTQ1NfU0VUX0RBVEFCQVNFX1BST1BFUlRZKCIgKyAKLQkJCSAgICAJCQkiJ2RlcmJ5LmNvbm5lY3Rpb24ucmVxdWlyZUF1dGhlbnRpY2F0aW9uJywgJ3RydWUnKSIpOwotICAgCSAgICBycyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KCAKLQkgICAgICAgICAgICAiVkFMVUVTIFNZU0NTX1VUSUwuU1lTQ1NfR0VUX0RBVEFCQVNFX1BST1BFUlRZKCIgKyAKLQkJICAgICInZGVyYnkuY29ubmVjdGlvbi5yZXF1aXJlQXV0aGVudGljYXRpb24nKSIpOyAKLQkgICAgcnMubmV4dCgpOyAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJBdXRoZW50aWNhdGlvbiBzZXQgdG8gIiArIHJzLmdldFN0cmluZygxKSk7IAkJCisgICAgICAgIERhdGFTb3VyY2UgZHMgPSBpbml0aWFsaXplU2FtcGxlRGF0YVNvdXJjZSgpOworICAgICAgICBjb24gPSAoQ29ubmVjdGlvbikgZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICBzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICAvL0V4ZWN1dGUgQ2FsbGFibGVTdGF0ZW1lbnQgdG8gZW5hYmxlIGF1dGhlbnRpY2F0aW9uCisgICAgICAgIHN0bXQuZXhlY3V0ZVVwZGF0ZSgiQ0FMTCBTWVNDU19VVElMLlNZU0NTX1NFVF9EQVRBQkFTRV9QUk9QRVJUWSgiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJ2RlcmJ5LmNvbm5lY3Rpb24ucmVxdWlyZUF1dGhlbnRpY2F0aW9uJywgJ3RydWUnKSIpOworICAgICAgICAgICBycyA9IHN0bXQuZXhlY3V0ZVF1ZXJ5KAorICAgICAgICAgICAgICAgICJWQUxVRVMgU1lTQ1NfVVRJTC5TWVNDU19HRVRfREFUQUJBU0VfUFJPUEVSVFkoIiArCisgICAgICAgICAgICAiJ2RlcmJ5LmNvbm5lY3Rpb24ucmVxdWlyZUF1dGhlbnRpY2F0aW9uJykiKTsKKyAgICAgICAgcnMubmV4dCgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkF1dGhlbnRpY2F0aW9uIHNldCB0byAiICsgcnMuZ2V0U3RyaW5nKDEpKTsKIAotCSAgICAvL1NldHRpbmcgVXNlcm5hbWVzIGFuZCBwYXNzd29yZHMKLQkgICAgc3RtdC5leGVjdXRlVXBkYXRlKCJDQUxMIFNZU0NTX1VUSUwuU1lTQ1NfU0VUX0RBVEFCQVNFX1BST1BFUlRZKCIgKyAKLQkJCSAgICAJCQkiJ2RlcmJ5LnVzZXIuQVBQJywgJ0FQUCcpIik7Ci0JICAgIHN0bXQuZXhlY3V0ZVVwZGF0ZSgiQ0FMTCBTWVNDU19VVElMLlNZU0NTX1NFVF9EQVRBQkFTRV9QUk9QRVJUWSgiICsgCi0JCQkgICAgCQkJIidkZXJieS51c2VyLmFwcCcsICdhcHAnKSIpOworICAgICAgICAvL1NldHRpbmcgVXNlcm5hbWVzIGFuZCBwYXNzd29yZHMKKyAgICAgICAgc3RtdC5leGVjdXRlVXBkYXRlKCJDQUxMIFNZU0NTX1VUSUwuU1lTQ1NfU0VUX0RBVEFCQVNFX1BST1BFUlRZKCIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICInZGVyYnkudXNlci5BUFAnLCAnQVBQJykiKTsKKyAgICAgICAgc3RtdC5leGVjdXRlVXBkYXRlKCJDQUxMIFNZU0NTX1VUSUwuU1lTQ1NfU0VUX0RBVEFCQVNFX1BST1BFUlRZKCIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICInZGVyYnkudXNlci5hcHAnLCAnYXBwJykiKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotCX0gZmluYWxseSB7CisgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgaWYocnMgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICBycy5jbG9zZSgpOwpAQCAtMTkxLDggKzE5MSw4IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAgICAgfSAgICAgICAgICAgIAotICAgICAgICAgICAgCisgICAgICAgICAgICB9CisKICAgICAgICAgfQogICAgIH0KIApAQCAtMjA1LDExICsyMDUsMTEgQEAKICAgICAgICAgQ29ubmVjdGlvbiBjb24gPSBudWxsOwogICAgICAgICBDb25uZWN0aW9uIGNvbjEgPSBudWxsOwogICAgICAgICB0cnkgewotCSAgICBEYXRhU291cmNlIGRzID0gaW5pdGlhbGl6ZVJlY29uZmlnRGF0YVNvdXJjZSgpOworICAgICAgICBEYXRhU291cmNlIGRzID0gaW5pdGlhbGl6ZVJlY29uZmlnRGF0YVNvdXJjZSgpOwogICAgICAgICAgICAgRGF0YVNvdXJjZSBkczEgPSBpbml0aWFsaXplU2FtcGxlRGF0YVNvdXJjZSgpOwotCSAgICBjb24gPSAoQ29ubmVjdGlvbikgZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICBjb24gPSAoQ29ubmVjdGlvbikgZHMuZ2V0Q29ubmVjdGlvbigpOwogICAgICAgICAgICAgY29uMSA9IChDb25uZWN0aW9uKSBkczEuZ2V0Q29ubmVjdGlvbigpOwotCSAgICBzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOworICAgICAgICBzdG10ID0gY29uLmNyZWF0ZVN0YXRlbWVudCgpOwogICAgICAgICAgICAgc3RtdDEgPSBjb24xLmNyZWF0ZVN0YXRlbWVudCgpOwogICAgICAgICAgICAgU3RyaW5nIHF1ZXJ5ID0gImNyZWF0ZSB0YWJsZSAiICsgcmVjb25maWdUYWJsZSArICIoIiArIGNvbHVtbk5hbWUgKyAiIGNoYXIoNTApKSI7CiAgICAgICAgICAgICBzdG10LmV4ZWN1dGVVcGRhdGUocXVlcnkpOwpAQCAtMjE4LDcgKzIxOCw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0ZWQgdGFibGVzIDogcmVjb25maWdUZXN0VGFibGUgYW5kIHNhbXBsZVRhYmxlIik7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLQl9IGZpbmFsbHkgeworICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGlmIChzdG10ICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgc3RtdC5jbG9zZSgpOwpAQCAtMjM5LDIyICsyMzksMjIgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgICB9ICAgICAgICAgICAgCi0gICAgICAgIH0gICAgICAgCi0gICAgICAgIAorICAgICAgICAgICAgfQorICAgICAgICB9CisKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBFbWJlZGRlZERhdGFTb3VyY2UgcHJvcGVydGllcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBwb29sIGNvbmZpZ3VyYXRpb24KICAgICAgKiBjcmVhdGVkIGZvciBydW5uaW5nIHRoZSBKREJDIHJlY29uZmlnIGRldnRlc3RzLgogICAgICAqLwogICAgIHByaXZhdGUgc3RhdGljIG9yZy5hcGFjaGUuZGVyYnkuamRiYy5FbWJlZGRlZERhdGFTb3VyY2UgaW5pdGlhbGl6ZVJlY29uZmlnRGF0YVNvdXJjZSgpIHsKLSAgICAgICAgRW1iZWRkZWREYXRhU291cmNlIGRzID0gbmV3IEVtYmVkZGVkRGF0YVNvdXJjZSgpOwkgICAgCi0JZHMuc2V0VXNlcigicnVzZXIiKTsKLQlkcy5zZXRQYXNzd29yZCgicnBhc3N3b3JkIik7Ci0JZHMuc2V0RGF0YWJhc2VOYW1lKFJFQ09ORklHX0RCX05BTUUpOwotCWRzLnNldENvbm5lY3Rpb25BdHRyaWJ1dGVzKCJjcmVhdGU9dHJ1ZSIpOwotCXJldHVybiBkczsKKyAgICAgICAgRW1iZWRkZWREYXRhU291cmNlIGRzID0gbmV3IEVtYmVkZGVkRGF0YVNvdXJjZSgpOworICAgIGRzLnNldFVzZXIoInJ1c2VyIik7CisgICAgZHMuc2V0UGFzc3dvcmQoInJwYXNzd29yZCIpOworICAgIGRzLnNldERhdGFiYXNlTmFtZShSRUNPTkZJR19EQl9OQU1FKTsKKyAgICBkcy5zZXRDb25uZWN0aW9uQXR0cmlidXRlcygiY3JlYXRlPXRydWUiKTsKKyAgICByZXR1cm4gZHM7CiAgICAgfQogCiAgICAgLyoqCkBAIC0yNjIsMjQgKzI2MiwyNCBAQAogICAgICAqIGNyZWF0ZWQgZm9yIHJ1bm5pbmcgdGhlIEpEQkMgcmVjb25maWcgZGV2dGVzdHMuCiAgICAgICovCiAgICAgcHJpdmF0ZSBzdGF0aWMgb3JnLmFwYWNoZS5kZXJieS5qZGJjLkVtYmVkZGVkRGF0YVNvdXJjZSBpbml0aWFsaXplU2FtcGxlRGF0YVNvdXJjZSgpIHsKLSAgICAgICAgRW1iZWRkZWREYXRhU291cmNlIGRzID0gbmV3IEVtYmVkZGVkRGF0YVNvdXJjZSgpOwkgICAgCi0JZHMuc2V0VXNlcigiQVBQIik7Ci0JZHMuc2V0UGFzc3dvcmQoIkFQUCIpOwotCWRzLnNldERhdGFiYXNlTmFtZShTQU1QTEVfREJfTkFNRSk7Ci0JZHMuc2V0Q29ubmVjdGlvbkF0dHJpYnV0ZXMoImNyZWF0ZT10cnVlIik7Ci0JcmV0dXJuIGRzOworICAgICAgICBFbWJlZGRlZERhdGFTb3VyY2UgZHMgPSBuZXcgRW1iZWRkZWREYXRhU291cmNlKCk7CisgICAgZHMuc2V0VXNlcigiQVBQIik7CisgICAgZHMuc2V0UGFzc3dvcmQoIkFQUCIpOworICAgIGRzLnNldERhdGFiYXNlTmFtZShTQU1QTEVfREJfTkFNRSk7CisgICAgZHMuc2V0Q29ubmVjdGlvbkF0dHJpYnV0ZXMoImNyZWF0ZT10cnVlIik7CisgICAgcmV0dXJuIGRzOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFNldHMgdGhlIEVtYmVkZGVkRGF0YVNvdXJjZSBwcm9wZXJ0aWVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHBvb2wgY29uZmlndXJhdGlvbgogICAgICAqIGNyZWF0ZWQgZm9yIHJ1bm5pbmcgdGhlIEpEQkMgZGV2dGVzdHMuCiAgICAgICovCiAgICAgcHJpdmF0ZSBzdGF0aWMgb3JnLmFwYWNoZS5kZXJieS5qZGJjLkVtYmVkZGVkRGF0YVNvdXJjZSBpbml0aWFsaXplRGF0YVNvdXJjZSgpIHsKLSAgICAgICAgRW1iZWRkZWREYXRhU291cmNlIGRzID0gbmV3IEVtYmVkZGVkRGF0YVNvdXJjZSgpOwkgICAgCi0JZHMuc2V0VXNlcigiQVBQIik7Ci0JZHMuc2V0UGFzc3dvcmQoIkFQUCIpOwotCWRzLnNldERhdGFiYXNlTmFtZShTVU5fQVBQU0VSVl9TQU1QTEVTX0RCKTsKLQlkcy5zZXRDb25uZWN0aW9uQXR0cmlidXRlcygiY3JlYXRlPXRydWUiKTsKLQlyZXR1cm4gZHM7CisgICAgICAgIEVtYmVkZGVkRGF0YVNvdXJjZSBkcyA9IG5ldyBFbWJlZGRlZERhdGFTb3VyY2UoKTsKKyAgICBkcy5zZXRVc2VyKCJBUFAiKTsKKyAgICBkcy5zZXRQYXNzd29yZCgiQVBQIik7CisgICAgZHMuc2V0RGF0YWJhc2VOYW1lKFNVTl9BUFBTRVJWX1NBTVBMRVNfREIpOworICAgIGRzLnNldENvbm5lY3Rpb25BdHRyaWJ1dGVzKCJjcmVhdGU9dHJ1ZSIpOworICAgIHJldHVybiBkczsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2F1dG9jb21taXQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvYXV0b2NvbW1pdC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDg1ZjRkMTQuLjVjMGU3NGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvYXV0b2NvbW1pdC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvYXV0b2NvbW1pdC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNyArMTUsMTcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImF1dG9jb21taXQiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIxMiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9hdXRvY29tbWl0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvYXV0b2NvbW1pdC9idWlsZC54bWwKaW5kZXggODMxZGY4Zi4uODA1ZmJhMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9hdXRvY29tbWl0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2F1dG9jb21taXQvYnVpbGQueG1sCkBAIC00MSw3ICs0MSw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC01NSw1MCArNTUsNTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotCTxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ0cnVlIi8+CisgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InRydWUiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJlamItamFyLWNvbW1vbiI+Ci0JICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KLQk8L2FudGNhbGw+CisgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KKyAgICA8L2FudGNhbGw+CiAKLQk8ZGVsZXRlIGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LmVhciIvPgorICAgIDxkZWxldGUgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0uZWFyIi8+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgogCiAgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CiAKLSAgICAgICAgPGVhciBlYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiIAotCSAgICAgYXBweG1sPSIke2FwcGxpY2F0aW9uLnhtbH0iPgotCSAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgotCSAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KLQkgICAgICAgIDxpbmNsdWRlIG5hbWU9Iioud2FyIi8+Ci0JICAgICA8L2ZpbGVzZXQ+Ci0JPC9lYXI+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgICAgICA8ZWFyIGVhcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIKKyAgICAgICAgIGFwcHhtbD0iJHthcHBsaWNhdGlvbi54bWx9Ij4KKyAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KKyAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IiouamFyIi8+CisgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLndhciIvPgorICAgICAgICAgPC9maWxlc2V0PgorICAgIDwvZWFyPgorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgICAKLSAgICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0dXAiLz4gCisKKyAgICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0dXAiLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1zcWwtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi10ZXN0LTEiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuLXRlc3QtMSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bndlYmNsaWVudC1jb21tb24iPgotICAJICAgIDxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJ3ZWItdG8tZWpiIChlYXIgYmFzZWQpIi8+Ci0JPC9hbnRjYWxsPgorICAgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJ3ZWItdG8tZWpiIChlYXIgYmFzZWQpIi8+CisgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtMTA4LDcgKzEwOCw3IEBACiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5zZXR1cCIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpAQCAtMTE4LDEyICsxMTgsMTIgQEAKIAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktamRiYy1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJqZGJjLWF1dG9jb21taXQtcG9vbCIvPgotCTxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2F1dG9jb21taXQiLz4KKyAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9hdXRvY29tbWl0Ii8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgICAKKwogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+Ci0JPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy1hdXRvY29tbWl0LXBvb2wuc3RlYWR5X3Bvb2xfc2l6ZT0yIi8+CisgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuamRiYy1hdXRvY29tbWl0LXBvb2wuc3RlYWR5X3Bvb2xfc2l6ZT0yIi8+CiAgICAgICA8L2FudGNhbGw+CiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgpAQCAtMTMxLDcgKzEzMSw3IEBACiAgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLmpkYmMtYXV0b2NvbW1pdC1wb29sLm1heF9wb29sX3NpemU9MiIvPgogICAgICAgPC9hbnRjYWxsPgogCi0gICAgICAKKwogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1bnNldHVwIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvYXV0b2NvbW1pdC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9hdXRvY29tbWl0L2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggYjViY2VkNC4uYTFhMTUwYSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9hdXRvY29tbWl0L2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9hdXRvY29tbWl0L2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTU1LDcgKzU1LDcgQEAKICAgICAgICAgPG1ldGhvZC1uYW1lPio8L21ldGhvZC1uYW1lPgogICAgICAgPC9tZXRob2Q+CiAgICAgICA8dHJhbnMtYXR0cmlidXRlPlJlcXVpcmVkPC90cmFucy1hdHRyaWJ1dGU+Ci0gICAgPC9jb250YWluZXItdHJhbnNhY3Rpb24+ICAKKyAgICA8L2NvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgICA8Y29udGFpbmVyLXRyYW5zYWN0aW9uPgogICAgICAgPG1ldGhvZD4KICAgICAgICAgPGVqYi1uYW1lPlNpbXBsZUJNUEVKQjwvZWpiLW5hbWU+CkBAIC02NCw2ICs2NCw2IEBACiAgICAgICA8dHJhbnMtYXR0cmlidXRlPk5vdFN1cHBvcnRlZDwvdHJhbnMtYXR0cmlidXRlPgogICAgIDwvY29udGFpbmVyLXRyYW5zYWN0aW9uPgogICA8L2Fzc2VtYmx5LWRlc2NyaXB0b3I+Ci0gICAgICAKKwogPC9lamItamFyPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2F1dG9jb21taXQvZWpiL1NpbXBsZUJNUEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvYXV0b2NvbW1pdC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCmluZGV4IDUwZjE3NjYuLmM3ODBkNzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvYXV0b2NvbW1pdC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvYXV0b2NvbW1pdC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCkBAIC0zMCw2NyArMzAsNjcgQEAKICAgICBwcm90ZWN0ZWQgRGF0YVNvdXJjZSBkczsKIAogICAgIHB1YmxpYyB2b2lkIHNldEVudGl0eUNvbnRleHQoRW50aXR5Q29udGV4dCBlbnRpdHlDb250ZXh0KSB7Ci0JQ29udGV4dCBjb250ZXh0ID0gbnVsbDsKLQl0cnkgewotCSAgICBjb250ZXh0ICAgID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JICAgIGRzID0gKERhdGFTb3VyY2UpIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKLQl9IGNhdGNoIChOYW1pbmdFeGNlcHRpb24gZSkgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJjYW50IGZpbmQgZGF0YXNvdXJjZSIpOwotCX0KKyAgICBDb250ZXh0IGNvbnRleHQgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIGNvbnRleHQgICAgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgZHMgPSAoRGF0YVNvdXJjZSkgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZSIpOworICAgIH0gY2F0Y2ggKE5hbWluZ0V4Y2VwdGlvbiBlKSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImNhbnQgZmluZCBkYXRhc291cmNlIik7CisgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyBJbnRlZ2VyIGVqYkNyZWF0ZSgpIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewotCXJldHVybiBuZXcgSW50ZWdlcigxKTsKKyAgICByZXR1cm4gbmV3IEludGVnZXIoMSk7CiAgICAgfQogCiAgICAgLyogR2V0IGEgc2luZ2xlIGNvbm5lY3Rpb24gYW5kIGNsb3NlIGl0ICovCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDEoKSB7CiAgICAgICAgIENvbm5lY3Rpb24gY29ubiA9IG51bGw7CiAgICAgICAgIGJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKLQl0cnkgewotCSAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCSAgICBwYXNzZWQgPSAhY29ubi5nZXRBdXRvQ29tbWl0KCk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgcGFzc2VkID0gZmFsc2U7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKCBjb25uICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgewotCSAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKLQkgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30gICAgCi0JICAgIH0KLSAgICAgICAgfSAKLSAgICAgICAgCi0JcmV0dXJuIHBhc3NlZDsKKyAgICB0cnkgeworICAgICAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICBwYXNzZWQgPSAhY29ubi5nZXRBdXRvQ29tbWl0KCk7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgaWYgKCBjb25uICE9IG51bGwgKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKKyAgICAgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQorICAgICAgICB9CisKKyAgICByZXR1cm4gcGFzc2VkOwogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIHRlc3QyKCkgewogICAgICAgICBDb25uZWN0aW9uIGNvbm4xICA9IG51bGw7CiAgICAgICAgIENvbm5lY3Rpb24gY29ubjIgID0gbnVsbDsKLQlib29sZWFuIHBhc3NlZCA9IHRydWU7CisgICAgYm9vbGVhbiBwYXNzZWQgPSB0cnVlOwogCi0JdHJ5IHsKLQkgICAgY29ubjEgPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JICAgIGNvbm4yID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgIHRyeSB7CisgICAgICAgIGNvbm4xID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICBjb25uMiA9IGRzLmdldENvbm5lY3Rpb24oKTsKIAotCSAgICBwYXNzZWQgPSBjb25uMS5nZXRBdXRvQ29tbWl0KCkgJiBjb25uMi5nZXRBdXRvQ29tbWl0KCk7Ci0JfSBjYXRjaCggRXhjZXB0aW9uIGUgKSB7Ci0JICAgIHBhc3NlZCA9IGZhbHNlOwotCX0gZmluYWxseSB7Ci0JICAgIGlmIChjb25uMSAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsKLQkJICAgIGNvbm4xLmNsb3NlKCk7Ci0JCX0gY2F0Y2goIEV4Y2VwdGlvbiBlaSkge30KLQkgICAgfQotCSAgICBpZiAoY29ubjIgIT0gbnVsbCApIHsKLQkgICAgICAgIHRyeSB7Ci0JCSAgICBjb25uMi5jbG9zZSgpOwotCQl9IGNhdGNoKCBFeGNlcHRpb24gZWkpIHt9Ci0JICAgIH0KLQl9Ci0KLQlyZXR1cm4gcGFzc2VkOworICAgICAgICBwYXNzZWQgPSBjb25uMS5nZXRBdXRvQ29tbWl0KCkgJiBjb25uMi5nZXRBdXRvQ29tbWl0KCk7CisgICAgfSBjYXRjaCggRXhjZXB0aW9uIGUgKSB7CisgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmIChjb25uMSAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGNvbm4xLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlaSkge30KKyAgICAgICAgfQorICAgICAgICBpZiAoY29ubjIgIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICBjb25uMi5jbG9zZSgpOworICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZWkpIHt9CisgICAgICAgIH0KICAgICB9Ci0gICAKKworICAgIHJldHVybiBwYXNzZWQ7CisgICAgfQorCiAKICAgICBwdWJsaWMgdm9pZCBlamJMb2FkKCkge30KICAgICBwdWJsaWMgdm9pZCBlamJTdG9yZSgpIHt9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2F1dG9jb21taXQvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2F1dG9jb21taXQvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEKaW5kZXggOTI1M2RlNi4uNDM2ZmY2OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9hdXRvY29tbWl0L3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvYXV0b2NvbW1pdC9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YQpAQCAtNTYsMjcgKzU2LDI3IEBACiAgICAgICAgIFNpbXBsZUJNUCBiZWFuID0gc2ltcGxlQk1QSG9tZS5jcmVhdGUoKTsKIAogICAgICAgICBpZiAoIGJlYW4udGVzdDEoKSApIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJBdXRvY29tbWl0IDogdGVzdDEgOiBQQVNTIik7Ci0JICAgIG91dC5wcmludGxuKCJURVNUOlBBU1MiKTsKLQl9IGVsc2UgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkF1dG9jb21taXQgOiB0ZXN0MSA6IEZBSUwiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBdXRvY29tbWl0IDogdGVzdDEgOiBQQVNTIik7CisgICAgICAgIG91dC5wcmludGxuKCJURVNUOlBBU1MiKTsKKyAgICB9IGVsc2UgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkF1dG9jb21taXQgOiB0ZXN0MSA6IEZBSUwiKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCJURVNUOkZBSUwiKTsKLQl9Ci0JaWYgKCBiZWFuLnRlc3QyKCkgKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQXV0b2NvbW1pdCA6IHRlc3QyIDogUEFTUyIpOwotCSAgICBvdXQucHJpbnRsbigiVEVTVDpQQVNTIik7Ci0JfSBlbHNlIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJBdXRvY29tbWl0IDogdGVzdDIgOiBGQUlMIik7CisgICAgfQorICAgIGlmICggYmVhbi50ZXN0MigpICkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkF1dG9jb21taXQgOiB0ZXN0MiA6IFBBU1MiKTsKKyAgICAgICAgb3V0LnByaW50bG4oIlRFU1Q6UEFTUyIpOworICAgIH0gZWxzZSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQXV0b2NvbW1pdCA6IHRlc3QyIDogRkFJTCIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIlRFU1Q6RkFJTCIpOwotCX0KKyAgICB9CiAKLQl9IGNhdGNoKE5hbWluZ0V4Y2VwdGlvbiBuZSkgewotCSAgICBuZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9IGNhdGNoKENyZWF0ZUV4Y2VwdGlvbiBlKSB7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfSBjYXRjaChOYW1pbmdFeGNlcHRpb24gbmUpIHsKKyAgICAgICAgbmUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfSBjYXRjaChDcmVhdGVFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9IGZpbmFsbHkgewotCSAgICBvdXQucHJpbnRsbigiRU5EX09GX1RFU1QiKTsKLQkgICAgb3V0LmZsdXNoKCk7Ci0JfQorICAgICAgICBvdXQucHJpbnRsbigiRU5EX09GX1RFU1QiKTsKKyAgICAgICAgb3V0LmZsdXNoKCk7CisgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvYXV0b2NvbW1pdC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2F1dG9jb21taXQvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IGU0OTE0ZjYuLmYyNTYwNzYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvYXV0b2NvbW1pdC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9hdXRvY29tbWl0L3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSw3ICsxLDcgQEAKLURyb3AgdGFibGUgT19DdXN0b21lcjsNCi0NCi1DUkVBVEUgVEFCTEUgT19DdXN0b21lciAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikNCi0pOw0KLQ0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKKworQ1JFQVRFIFRBQkxFIE9fQ3VzdG9tZXIgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQorKTsKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9hdXRvY29tbWl0L3NxbC9kcm9wX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2F1dG9jb21taXQvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAppbmRleCA3MGQxZmNjLi5kODU0Yjk1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2F1dG9jb21taXQvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2F1dG9jb21taXQvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbApAQCAtMSArMSBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9idWlsZC54bWwKaW5kZXggNTlhOWE1ZS4uYmMyNDliYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9idWlsZC54bWwKQEAgLTE5LDEyICsxOSwxMiBAQAogLS0+CiAKIDwhRU5USVRZIGNvbW1vblNldHVwIFNZU1RFTSAiLi8uLi8uLi8uLi9jb25maWcvcHJvcGVydGllcy54bWwiPgotCTwhRU5USVRZIGNvbW1vbkJ1aWxkIFNZU1RFTSAiLi8uLi8uLi8uLi9jb25maWcvY29tbW9uLnhtbCI+Ci0JPCFFTlRJVFkgamRiY0NvbW1vbiBTWVNURU0gIi4vLi4vSmRiY0NvbW1vbi54bWwiPgotCTwhRU5USVRZIGpkYmNDb21tb25Qcm9wZXJ0aWVzIFNZU1RFTSAiLi8uLi9KZGJjQ29tbW9uLnByb3BlcnRpZXMiPgotCTwhRU5USVRZIHJlcG9ydGluZyAgIFNZU1RFTSAiLi8uLi9yZXBvcnQueG1sIj4KLQk8IUVOVElUWSBlZUNvbW1vbiBTWVNURU0gIi4vLi4vY29uZmlnL2VlLWNvbW1vbi54bWwiPgotCTwhRU5USVRZIGVlQ29tbW9uUHJvcGVydGllcyBTWVNURU0gIi4vLi4vY29uZmlnL2VlLXByb3BlcnRpZXMueG1sIj4KKyAgICA8IUVOVElUWSBjb21tb25CdWlsZCBTWVNURU0gIi4vLi4vLi4vLi4vY29uZmlnL2NvbW1vbi54bWwiPgorICAgIDwhRU5USVRZIGpkYmNDb21tb24gU1lTVEVNICIuLy4uL0pkYmNDb21tb24ueG1sIj4KKyAgICA8IUVOVElUWSBqZGJjQ29tbW9uUHJvcGVydGllcyBTWVNURU0gIi4vLi4vSmRiY0NvbW1vbi5wcm9wZXJ0aWVzIj4KKyAgICA8IUVOVElUWSByZXBvcnRpbmcgICBTWVNURU0gIi4vLi4vcmVwb3J0LnhtbCI+CisgICAgPCFFTlRJVFkgZWVDb21tb24gU1lTVEVNICIuLy4uL2NvbmZpZy9lZS1jb21tb24ueG1sIj4KKyAgICA8IUVOVElUWSBlZUNvbW1vblByb3BlcnRpZXMgU1lTVEVNICIuLy4uL2NvbmZpZy9lZS1wcm9wZXJ0aWVzLnhtbCI+CiAgICAgICAgIF0+CiAKIDxwcm9qZWN0IG5hbWU9ImpkYmMiIGRlZmF1bHQ9InVzYWdlIiBiYXNlZGlyPSIuIj4KQEAgLTQ5LDE1ICs0OSwxNSBAQAogICAgICAgICA8ZGVsZXRlPgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5vdXRwdXQiLz4KICAgICAgICAgPC9kZWxldGU+Ci0JPHJlY29yZCBuYW1lPSJqZGJjLm91dHB1dCIgYWN0aW9uPSJzdGFydCIvPgotCTxhbnRjYWxsIHRhcmdldD0iY29udGF1dGgiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9ImF1dG9jb21taXQiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9Im1heGNvbm5lY3Rpb251c2FnZSIvPgorICAgIDxyZWNvcmQgbmFtZT0iamRiYy5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbnRhdXRoIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJhdXRvY29tbWl0Ii8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJtYXhjb25uZWN0aW9udXNhZ2UiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJtdWx0aXBsZXVzZXJjcmVkZW50aWFscyIvPgotCTxhbnRjYWxsIHRhcmdldD0ic3RhdGVtZW50dGltZW91dCIvPgotCTxhbnRjYWxsIHRhcmdldD0iY29ubmxlYWt0cmFjaW5nIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJjb25uY3JlYXRpb25yZXRyeSIvPgotCTxhbnRjYWxsIHRhcmdldD0icmVzRW5hYmxlRGlzYWJsZSIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0ic3RhdGVtZW50dGltZW91dCIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0iY29ubmxlYWt0cmFjaW5nIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJjb25uY3JlYXRpb25yZXRyeSIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0icmVzRW5hYmxlRGlzYWJsZSIvPgogICAgICAgICA8cmVjb3JkIG5hbWU9ImpkYmMub3V0cHV0IiBhY3Rpb249InN0b3AiLz4KICAgICA8L3RhcmdldD4KIApAQCAtNjksNjMgKzY5LDYzIEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLm91dHB1dCIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICAgICAgPHJlY29yZCBuYW1lPSJqZGJjLm91dHB1dCIgYWN0aW9uPSJzdGFydCIvPgotCTxhbnRjYWxsIHRhcmdldD0iY29udGF1dGgiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9ImF1dG9jb21taXQiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9Im1heGNvbm5lY3Rpb251c2FnZSIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0iY29udGF1dGgiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImF1dG9jb21taXQiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9Im1heGNvbm5lY3Rpb251c2FnZSIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9Im11bHRpcGxldXNlcmNyZWRlbnRpYWxzIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJzdGF0ZW1lbnR0aW1lb3V0Ii8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJjb25ubGVha3RyYWNpbmciLz4KLQk8YW50Y2FsbCB0YXJnZXQ9ImNvbm5jcmVhdGlvbnJldHJ5Ii8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJyZXNFbmFibGVEaXNhYmxlIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJzdGF0ZW1lbnR0aW1lb3V0Ii8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJjb25ubGVha3RyYWNpbmciLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbm5jcmVhdGlvbnJldHJ5Ii8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXNFbmFibGVEaXNhYmxlIi8+CiAgICAgICAgIDxyZWNvcmQgbmFtZT0iamRiYy5vdXRwdXQiIGFjdGlvbj0ic3RvcCIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjb250YXV0aCI+CiAgICAgICAgIDxyZWNvcmQgbmFtZT0iY29udGF1dGgvY29udGF1dGgub3V0cHV0IiBhY3Rpb249InN0YXJ0Ii8+CiAgICAgICAgIDxhbnQgZGlyPSJjb250YXV0aCIgdGFyZ2V0PSJhbGwiLz4KLQk8cmVjb3JkIG5hbWU9ImNvbnRhdXRoL2NvbnRhdXRoLm91dHB1dCIgYWN0aW9uPSJzdG9wIi8+CisgICAgPHJlY29yZCBuYW1lPSJjb250YXV0aC9jb250YXV0aC5vdXRwdXQiIGFjdGlvbj0ic3RvcCIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJhdXRvY29tbWl0Ij4KLQk8cmVjb3JkIG5hbWU9ImF1dG9jb21taXQvYXV0b2NvbW1pdC5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiLz4KLQk8YW50IGRpcj0iYXV0b2NvbW1pdCIgdGFyZ2V0PSJhbGwiLz4KLQk8cmVjb3JkIG5hbWU9ImF1dG9jb21taXQvYXV0b2NvbW1pdC5vdXRwdXQiIGFjdGlvbj0ic3RvcCIvPgorICAgIDxyZWNvcmQgbmFtZT0iYXV0b2NvbW1pdC9hdXRvY29tbWl0Lm91dHB1dCIgYWN0aW9uPSJzdGFydCIvPgorICAgIDxhbnQgZGlyPSJhdXRvY29tbWl0IiB0YXJnZXQ9ImFsbCIvPgorICAgIDxyZWNvcmQgbmFtZT0iYXV0b2NvbW1pdC9hdXRvY29tbWl0Lm91dHB1dCIgYWN0aW9uPSJzdG9wIi8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9Im1heGNvbm5lY3Rpb251c2FnZSI+CiAgICAgICAgIDxyZWNvcmQgbmFtZT0ibWF4Y29ubmVjdGlvbnVzYWdlL21heGNvbm5lY3Rpb251c2FnZS5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiLz4KICAgICAgICAgPGFudCBkaXI9Im1heGNvbm5lY3Rpb251c2FnZSIgdGFyZ2V0PSJhbGwiLz4KLQk8cmVjb3JkIG5hbWU9Im1heGNvbm5lY3Rpb251c2FnZS9tYXhjb25uZWN0aW9udXNhZ2Uub3V0cHV0IiBhY3Rpb249InN0b3AiLz4KKyAgICA8cmVjb3JkIG5hbWU9Im1heGNvbm5lY3Rpb251c2FnZS9tYXhjb25uZWN0aW9udXNhZ2Uub3V0cHV0IiBhY3Rpb249InN0b3AiLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9Im11bHRpcGxldXNlcmNyZWRlbnRpYWxzIj4KLQk8cmVjb3JkIG5hbWU9Im11bHRpcGxldXNlcmNyZWRlbnRpYWxzL211bHRpcGxldXNlcmNyZWRlbnRpYWxzLm91dHB1dCIgYWN0aW9uPSJzdGFydCIvPgotCTxhbnQgZGlyPSJtdWx0aXBsZXVzZXJjcmVkZW50aWFscyIgdGFyZ2V0PSJhbGwiLz4KLQk8cmVjb3JkIG5hbWU9Im11bHRpcGxldXNlcmNyZWRlbnRpYWxzL211bHRpcGxldXNlcmNyZWRlbnRpYWxzLm91dHB1dCIgYWN0aW9uPSJzdG9wIi8+CisgICAgPHJlY29yZCBuYW1lPSJtdWx0aXBsZXVzZXJjcmVkZW50aWFscy9tdWx0aXBsZXVzZXJjcmVkZW50aWFscy5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiLz4KKyAgICA8YW50IGRpcj0ibXVsdGlwbGV1c2VyY3JlZGVudGlhbHMiIHRhcmdldD0iYWxsIi8+CisgICAgPHJlY29yZCBuYW1lPSJtdWx0aXBsZXVzZXJjcmVkZW50aWFscy9tdWx0aXBsZXVzZXJjcmVkZW50aWFscy5vdXRwdXQiIGFjdGlvbj0ic3RvcCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJzdGF0ZW1lbnR0aW1lb3V0Ij4KLQk8cmVjb3JkIG5hbWU9InN0YXRlbWVudHRpbWVvdXQvc3RhdGVtZW50dGltZW91dC5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiLz4KLQk8YW50IGRpcj0ic3RhdGVtZW50dGltZW91dCIgdGFyZ2V0PSJhbGwiLz4KLQk8cmVjb3JkIG5hbWU9InN0YXRlbWVudHRpbWVvdXQvc3RhdGVtZW50dGltZW91dC5vdXRwdXQiIGFjdGlvbj0ic3RvcCIvPgorICAgIDxyZWNvcmQgbmFtZT0ic3RhdGVtZW50dGltZW91dC9zdGF0ZW1lbnR0aW1lb3V0Lm91dHB1dCIgYWN0aW9uPSJzdGFydCIvPgorICAgIDxhbnQgZGlyPSJzdGF0ZW1lbnR0aW1lb3V0IiB0YXJnZXQ9ImFsbCIvPgorICAgIDxyZWNvcmQgbmFtZT0ic3RhdGVtZW50dGltZW91dC9zdGF0ZW1lbnR0aW1lb3V0Lm91dHB1dCIgYWN0aW9uPSJzdG9wIi8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNvbm5sZWFrdHJhY2luZyI+CiAgICAgICAgIDxyZWNvcmQgbmFtZT0iY29ubmxlYWt0cmFjaW5nL2Nvbm5sZWFrdHJhY2luZy5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiLz4KICAgICAgICAgPGFudCBkaXI9ImNvbm5sZWFrdHJhY2luZyIgdGFyZ2V0PSJhbGwiLz4KLQk8cmVjb3JkIG5hbWU9ImNvbm5sZWFrdHJhY2luZy9jb25ubGVha3RyYWNpbmcub3V0cHV0IiBhY3Rpb249InN0b3AiLz4KKyAgICA8cmVjb3JkIG5hbWU9ImNvbm5sZWFrdHJhY2luZy9jb25ubGVha3RyYWNpbmcub3V0cHV0IiBhY3Rpb249InN0b3AiLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY29ubmNyZWF0aW9ucmV0cnkiPgotCTxyZWNvcmQgbmFtZT0iY29ubmNyZWF0aW9ucmV0cnkvY29ubmNyZWF0aW9ucmV0cnkub3V0cHV0IiBhY3Rpb249InN0YXJ0Ii8+Ci0JPGFudCBkaXI9ImNvbm5jcmVhdGlvbnJldHJ5IiB0YXJnZXQ9ImFsbCIvPgotCTxyZWNvcmQgbmFtZT0iY29ubmNyZWF0aW9ucmV0cnkvY29ubmNyZWF0aW9ucmV0cnkub3V0cHV0IiBhY3Rpb249InN0b3AiLz4KKyAgICA8cmVjb3JkIG5hbWU9ImNvbm5jcmVhdGlvbnJldHJ5L2Nvbm5jcmVhdGlvbnJldHJ5Lm91dHB1dCIgYWN0aW9uPSJzdGFydCIvPgorICAgIDxhbnQgZGlyPSJjb25uY3JlYXRpb25yZXRyeSIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8cmVjb3JkIG5hbWU9ImNvbm5jcmVhdGlvbnJldHJ5L2Nvbm5jcmVhdGlvbnJldHJ5Lm91dHB1dCIgYWN0aW9uPSJzdG9wIi8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlc0VuYWJsZURpc2FibGUiPgogICAgICAgIDxyZWNvcmQgbmFtZT0icmVzRW5hYmxlRGlzYWJsZS9yZXNlbmFibGVkaXNhYmxlLm91dHB1dCIgYWN0aW9uPSJzdGFydCIvPgogICAgICAgICA8YW50IGRpcj0icmVzRW5hYmxlRGlzYWJsZSIgdGFyZ2V0PSJhbGwiLz4KLQk8cmVjb3JkIG5hbWU9InJlc0VuYWJsZURpc2FibGUvcmVzZW5hYmxlZGlzYWJsZS5vdXRwdXQiIGFjdGlvbj0ic3RvcCIvPgorICAgIDxyZWNvcmQgbmFtZT0icmVzRW5hYmxlRGlzYWJsZS9yZXNlbmFibGVkaXNhYmxlLm91dHB1dCIgYWN0aW9uPSJzdG9wIi8+CiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxlY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb25uY3JlYXRpb25yZXRyeS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb25uY3JlYXRpb25yZXRyeS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDFmNGVhZTkuLjIyMzEyYjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29ubmNyZWF0aW9ucmV0cnkvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2Nvbm5jcmVhdGlvbnJldHJ5L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE3ICsxNSwxNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iamRiYy1jb25uZWN0aW9uY3JlYXRpb25yZXRyeSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJwb29sbmFtZSIgdmFsdWU9ImpkYmMtY29ubmVjdGlvbmNyZWF0aW9ucmV0cnkiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29ubmNyZWF0aW9ucmV0cnkvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb25uY3JlYXRpb25yZXRyeS9idWlsZC54bWwKaW5kZXggZDBhYjg3Mi4uMDEzMzlhNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb25uY3JlYXRpb25yZXRyeS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb25uY3JlYXRpb25yZXRyeS9idWlsZC54bWwKQEAgLTE5LDExICsxOSwxMSBAQAogLS0+CiAKIDwhRU5USVRZIGNvbW1vblNldHVwIFNZU1RFTSAiLi8uLi8uLi8uLi8uLi9jb25maWcvcHJvcGVydGllcy54bWwiPgotCTwhRU5USVRZIGNvbW1vbkJ1aWxkIFNZU1RFTSAiLi8uLi8uLi8uLi8uLi9jb25maWcvY29tbW9uLnhtbCI+CisgICAgPCFFTlRJVFkgY29tbW9uQnVpbGQgU1lTVEVNICIuLy4uLy4uLy4uLy4uL2NvbmZpZy9jb21tb24ueG1sIj4KICAgICAgICAgPCFFTlRJVFkgdGVzdHByb3BlcnRpZXMgU1lTVEVNICIuL2J1aWxkLnByb3BlcnRpZXMiPgotCTwhRU5USVRZIHJ1biBTWVNURU0gIi4vLi4vLi4vLi4vLi4vY29uZmlnL3J1bi54bWwiPgotCTwhRU5USVRZIGVlU2V0dXAgU1lTVEVNICIuLy4uLy4uL2NvbmZpZy9lZS1jb21tb24ueG1sIj4KLQk8IUVOVElUWSBlZVByb3BlcnRpZXMgU1lTVEVNICIuLy4uLy4uL2NvbmZpZy9lZS1wcm9wZXJ0aWVzLnhtbCI+CisgICAgPCFFTlRJVFkgcnVuIFNZU1RFTSAiLi8uLi8uLi8uLi8uLi9jb25maWcvcnVuLnhtbCI+CisgICAgPCFFTlRJVFkgZWVTZXR1cCBTWVNURU0gIi4vLi4vLi4vY29uZmlnL2VlLWNvbW1vbi54bWwiPgorICAgIDwhRU5USVRZIGVlUHJvcGVydGllcyBTWVNURU0gIi4vLi4vLi4vY29uZmlnL2VlLXByb3BlcnRpZXMueG1sIj4KICAgICAgICAgXT4KIAogPHByb2plY3QgbmFtZT0ibWl4IiBkZWZhdWx0PSJ1c2FnZSIgYmFzZWRpcj0iLiI+CkBAIC01NywyOCArNTcsMjggQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotCTxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ0cnVlIi8+CisgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InRydWUiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJlamItamFyLWNvbW1vbiI+Ci0JICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KLQk8L2FudGNhbGw+CisgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KKyAgICA8L2FudGNhbGw+CiAKLQk8ZGVsZXRlIGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LmVhciIvPgorICAgIDxkZWxldGUgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0uZWFyIi8+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgogCiAgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CiAKLSAgICAgICAgPGVhciBlYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiIAotCSAgICAgYXBweG1sPSIke2FwcGxpY2F0aW9uLnhtbH0iPgotCSAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgotCSAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KLQkgICAgICAgIDxpbmNsdWRlIG5hbWU9Iioud2FyIi8+Ci0JICAgICA8L2ZpbGVzZXQ+Ci0JPC9lYXI+CisgICAgICAgIDxlYXIgZWFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIgorICAgICAgICAgYXBweG1sPSIke2FwcGxpY2F0aW9uLnhtbH0iPgorICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgorICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KKyAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Iioud2FyIi8+CisgICAgICAgICA8L2ZpbGVzZXQ+CisgICAgPC9lYXI+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtOTIsMjAgKzkyLDIwIEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzdG9wLWRlcmJ5Ii8+CiAKLQk8cGFyYWxsZWw+Ci0gICAgICAgIAk8YW50Y2FsbCB0YXJnZXQ9InJ1bi10ZXN0LTEiLz4KLQkJPHNlcXVlbnRpYWw+Ci0JCQk8c2xlZXAgc2Vjb25kcz0iMTUiLz4KLQkJCTxhbnRjYWxsIHRhcmdldD0ic3RhcnQtZGVyYnkiLz4KLQkJPC9zZXF1ZW50aWFsPgotCTwvcGFyYWxsZWw+CisgICAgPHBhcmFsbGVsPgorICAgICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4tdGVzdC0xIi8+CisgICAgICAgIDxzZXF1ZW50aWFsPgorICAgICAgICAgICAgPHNsZWVwIHNlY29uZHM9IjE1Ii8+CisgICAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InN0YXJ0LWRlcmJ5Ii8+CisgICAgICAgIDwvc2VxdWVudGlhbD4KKyAgICA8L3BhcmFsbGVsPgogCiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi10ZXN0LTEiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW53ZWJjbGllbnQtY29tbW9uIj4KLSAgCSAgICA8cGFyYW0gbmFtZT0idGVzdHN1aXRlLmlkIiB2YWx1ZT0id2ViLXRvLWVqYiAoZWFyIGJhc2VkKSIvPgotCTwvYW50Y2FsbD4KKyAgICAgICAgICA8cGFyYW0gbmFtZT0idGVzdHN1aXRlLmlkIiB2YWx1ZT0id2ViLXRvLWVqYiAoZWFyIGJhc2VkKSIvPgorICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29ubmNyZWF0aW9ucmV0cnkvZWpiL1NpbXBsZUJNUEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29ubmNyZWF0aW9ucmV0cnkvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQppbmRleCBjZDFkODk4Li41ZDFiNDY2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2Nvbm5jcmVhdGlvbnJldHJ5L2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb25uY3JlYXRpb25yZXRyeS9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCkBAIC00MSw3ICs0MSw3IEBACiAgICAgfQogCiAKLSAgIAorCiAvKiBHZXQgYSBzaW5nbGUgY29ubmVjdGlvbiBhbmQgY2xvc2UgaXQgKi8KICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MSgpewogICAgICAgICBDb25uZWN0aW9uIGNvbm4gPSBudWxsOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb25uY3JlYXRpb25yZXRyeS9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29ubmNyZWF0aW9ucmV0cnkvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEKaW5kZXggZDcyMjYwOS4uM2MwNWU1ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb25uY3JlYXRpb25yZXRyeS9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2Nvbm5jcmVhdGlvbnJldHJ5L3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhCkBAIC01NiwyMCArNTYsMjAgQEAKICAgICAgICAgU2ltcGxlQk1QIGNvbnZhbEJNUCA9IHNpbXBsZUJNUEhvbWUuY3JlYXRlKCk7CiAKICAgICAgICAgaWYgKGNvbnZhbEJNUC50ZXN0MSgpKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGlvbiBDcmVhdGlvbiBSZXRyeSA6IHRlc3QxIDogUEFTUyIpOwotCSAgICBvdXQucHJpbnRsbigiVEVTVDpQQVNTIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGlvbiBDcmVhdGlvbiBSZXRyeSA6IHRlc3QxIDogUEFTUyIpOworICAgICAgICBvdXQucHJpbnRsbigiVEVTVDpQQVNTIik7CiAgICAgICAgIH0gZWxzZSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGlvbiBDcmVhdGlvbiBSZXRyeSA6IHRlc3QxIDogRkFJTCIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3Rpb24gQ3JlYXRpb24gUmV0cnkgOiB0ZXN0MSA6IEZBSUwiKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCJURVNUOkZBSUwiKTsKICAgICAgICAgfQogCi0JfSBjYXRjaChOYW1pbmdFeGNlcHRpb24gbmUpIHsKLQkgICAgbmUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfSBjYXRjaChDcmVhdGVFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0gY2F0Y2goTmFtaW5nRXhjZXB0aW9uIG5lKSB7CisgICAgICAgIG5lLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0gY2F0Y2goQ3JlYXRlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfSBmaW5hbGx5IHsKLQkgICAgb3V0LnByaW50bG4oIkVORF9PRl9URVNUIik7Ci0JICAgIG91dC5mbHVzaCgpOwotCX0KKyAgICAgICAgb3V0LnByaW50bG4oIkVORF9PRl9URVNUIik7CisgICAgICAgIG91dC5mbHVzaCgpOworICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2Nvbm5jcmVhdGlvbnJldHJ5L3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29ubmNyZWF0aW9ucmV0cnkvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IGU0OTE0ZjYuLmYyNTYwNzYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29ubmNyZWF0aW9ucmV0cnkvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29ubmNyZWF0aW9ucmV0cnkvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDcgKzEsNyBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KLQ0KLUNSRUFURSBUQUJMRSBPX0N1c3RvbWVyICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOworCitDUkVBVEUgVEFCTEUgT19DdXN0b21lciAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2Nvbm5jcmVhdGlvbnJldHJ5L3NxbC9kcm9wX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2Nvbm5jcmVhdGlvbnJldHJ5L3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggNzBkMWZjYy4uZDg1NGI5NSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb25uY3JlYXRpb25yZXRyeS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29ubmNyZWF0aW9ucmV0cnkvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbApAQCAtMSArMSBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29ubmxlYWt0cmFjaW5nL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2Nvbm5sZWFrdHJhY2luZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDI1YTM3OTcuLjAyYzBjY2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29ubmxlYWt0cmFjaW5nL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb25ubGVha3RyYWNpbmcvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqZGJjLWNvbm5lY3Rpb25sZWFrdHJhY2luZyIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJwb29sbmFtZSIgdmFsdWU9ImpkYmMtY29ubmVjdGlvbmxlYWt0cmFjaW5nIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2Nvbm5sZWFrdHJhY2luZy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2Nvbm5sZWFrdHJhY2luZy9idWlsZC54bWwKaW5kZXggMmRlNzEyNC4uNzVjZDEzYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb25ubGVha3RyYWNpbmcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29ubmxlYWt0cmFjaW5nL2J1aWxkLnhtbApAQCAtMTksOSArMTksOSBAQAogLS0+CiAKICAgICAgICAgPCFFTlRJVFkgY29tbW9uU2V0dXAgU1lTVEVNICIuLy4uLy4uLy4uLy4uL2NvbmZpZy9wcm9wZXJ0aWVzLnhtbCI+Ci0JPCFFTlRJVFkgY29tbW9uQnVpbGQgU1lTVEVNICIuLy4uLy4uLy4uLy4uL2NvbmZpZy9jb21tb24ueG1sIj4KKyAgICA8IUVOVElUWSBjb21tb25CdWlsZCBTWVNURU0gIi4vLi4vLi4vLi4vLi4vY29uZmlnL2NvbW1vbi54bWwiPgogICAgICAgICA8IUVOVElUWSB0ZXN0cHJvcGVydGllcyBTWVNURU0gIi4vYnVpbGQucHJvcGVydGllcyI+Ci0JPCFFTlRJVFkgcnVuIFNZU1RFTSAiLi8uLi8uLi9jb25maWcvcnVuLnhtbCI+CisgICAgPCFFTlRJVFkgcnVuIFNZU1RFTSAiLi8uLi8uLi9jb25maWcvcnVuLnhtbCI+CiAgICAgICAgIF0+CiAKIDxwcm9qZWN0IG5hbWU9Im1peCIgZGVmYXVsdD0idXNhZ2UiIGJhc2VkaXI9Ii4iPgpAQCAtNTQsMTIgKzU0LDEyIEBACiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCi0JCSAgICB2YWx1ZT0iKiovZWpiLyouY2xhc3MiLz4KKyAgICAgICAgICAgIHZhbHVlPSIqKi9lamIvKi5jbGFzcyIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgotCQkgICAgdmFsdWU9IioqL2NsaWVudC8qLmNsYXNzIi8+Ci0JICAgIDxwYXJhbSBuYW1lPSJ3YXIuY2xhc3NlcyIKLQkJICAgIHZhbHVlPSIqKi9zZXJ2bGV0LyouY2xhc3MiLz4KLQkgICAgPHBhcmFtICBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ0cnVlIi8+CisgICAgICAgICAgICB2YWx1ZT0iKiovY2xpZW50LyouY2xhc3MiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9Indhci5jbGFzc2VzIgorICAgICAgICAgICAgdmFsdWU9IioqL3NlcnZsZXQvKi5jbGFzcyIvPgorICAgICAgICA8cGFyYW0gIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InRydWUiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8amF2YWMKICAgICAgICAgICBzcmNkaXI9Ii4iCkBAIC04OCw4ICs4OCw4IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1zdHVmZiIvPgotCTxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0JPGRlbGV0ZSBmaWxlPSJjbGllbnQvV2ViVGVzdC5jbGFzcyIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CisgICAgPGRlbGV0ZSBmaWxlPSJjbGllbnQvV2ViVGVzdC5jbGFzcyIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CkBAIC0xMjksNyArMTI5LDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgogICAgICAgICAgICAgICAgICAgIHZhbHVlPSIke3Jlc291cmNlcy5kb3R0ZWRuYW1lLnByZWZpeH0uamRiYy1jb25uZWN0aW9uLXBvb2wuJHtwb29sbmFtZX0uY29ubmVjdGlvbl9sZWFrX3JlY2xhaW09dHJ1ZSIvPgogICAgICAgICA8L2FudGNhbGw+Ci0JPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC4ke3Bvb2xuYW1lfS5ub25fdHJhbnNhY3Rpb25hbF9jb25uZWN0aW9ucz10cnVlIi8+CkBAIC0xNjAsNiArMTYwLDYgQEAKICAgICA8L3RhcmdldD4KIAogCi0gICAgCisKIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb25ubGVha3RyYWNpbmcvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29ubmxlYWt0cmFjaW5nL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggMWI0NjI5My4uOWE2NGI0MiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb25ubGVha3RyYWNpbmcvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2Nvbm5sZWFrdHJhY2luZy9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC0zMSwxNiArMzEsMTYgQEAKICAgICAgICAgICAgIDxlamItbmFtZT5TaW1wbGVCTVBFSkI8L2VqYi1uYW1lPgogICAgICAgICAgICAgPGxvY2FsLWhvbWU+Y29tLnN1bi5zMWFzZGV2LmpkYmMuY29ubmVjdGlvbmxlYWt0cmFjaW5nLmVqYi5TaW1wbGVCTVBIb21lPC9sb2NhbC1ob21lPgogICAgICAgICAgICAgPGxvY2FsPmNvbS5zdW4uczFhc2Rldi5qZGJjLmNvbm5lY3Rpb25sZWFrdHJhY2luZy5lamIuU2ltcGxlQk1QPC9sb2NhbD4KLQkgICAgPGVqYi1jbGFzcz5jb20uc3VuLnMxYXNkZXYuamRiYy5jb25uZWN0aW9ubGVha3RyYWNpbmcuZWpiLlNpbXBsZUJNUEJlYW48L2VqYi1jbGFzcz4KLQkgICAgPHNlc3Npb24tdHlwZT5TdGF0ZWxlc3M8L3Nlc3Npb24tdHlwZT4KLQkgICAgPHRyYW5zYWN0aW9uLXR5cGU+Q29udGFpbmVyPC90cmFuc2FjdGlvbi10eXBlPgotCSAgICA8IS0tPHBlcnNpc3RlbmNlLXR5cGU+QmVhbjwvcGVyc2lzdGVuY2UtdHlwZT4KKyAgICAgICAgPGVqYi1jbGFzcz5jb20uc3VuLnMxYXNkZXYuamRiYy5jb25uZWN0aW9ubGVha3RyYWNpbmcuZWpiLlNpbXBsZUJNUEJlYW48L2VqYi1jbGFzcz4KKyAgICAgICAgPHNlc3Npb24tdHlwZT5TdGF0ZWxlc3M8L3Nlc3Npb24tdHlwZT4KKyAgICAgICAgPHRyYW5zYWN0aW9uLXR5cGU+Q29udGFpbmVyPC90cmFuc2FjdGlvbi10eXBlPgorICAgICAgICA8IS0tPHBlcnNpc3RlbmNlLXR5cGU+QmVhbjwvcGVyc2lzdGVuY2UtdHlwZT4KICAgICAgICAgICAgIDxwcmltLWtleS1jbGFzcz5qYXZhLmxhbmcuSW50ZWdlcjwvcHJpbS1rZXktY2xhc3M+CiAgICAgICAgICAgICA8cmVlbnRyYW50PkZhbHNlPC9yZWVudHJhbnQ+CiAgICAgICAgICAgICA8c2VjdXJpdHktaWRlbnRpdHk+CiAgICAgICAgICAgICAgICAgPGRlc2NyaXB0aW9uPjwvZGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICAgPHVzZS1jYWxsZXItaWRlbnRpdHk+PC91c2UtY2FsbGVyLWlkZW50aXR5PgotCTwvc2VjdXJpdHktaWRlbnRpdHk+LS0+CisgICAgPC9zZWN1cml0eS1pZGVudGl0eT4tLT4KICAgICAgICAgICAgIDxyZXNvdXJjZS1yZWY+CiAgICAgICAgICAgICAgICAgPHJlcy1yZWYtbmFtZT5EYXRhU291cmNlPC9yZXMtcmVmLW5hbWU+CiAgICAgICAgICAgICAgICAgPHJlcy10eXBlPmphdmF4LnNxbC5EYXRhU291cmNlPC9yZXMtdHlwZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29ubmxlYWt0cmFjaW5nL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2Nvbm5sZWFrdHJhY2luZy9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCmluZGV4IDk4YTY5ZWQuLmRkOThhN2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29ubmxlYWt0cmFjaW5nL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb25ubGVha3RyYWNpbmcvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQpAQCAtMjgsNyArMjgsNyBAQAogICAgIHByaXZhdGUgdHJhbnNpZW50IGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0IG1fY3R4ID0gbnVsbDsKIAogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IGNvbnRleHQpIHsKLQltX2N0eCA9IGNvbnRleHQ7CisgICAgbV9jdHggPSBjb250ZXh0OwogICAgIH0KIAogICAgIHB1YmxpYyBJbnRlZ2VyIGVqYkNyZWF0ZSgpIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewpAQCAtMzYsNyArMzYsNyBAQAogICAgIH0KIAogCi0gICAKKwogLyogR2V0IGEgc2luZ2xlIGNvbm5lY3Rpb24gYW5kIGNsb3NlIGl0ICovCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdDEoKSB7CiAgICAgICAgIENvbm5lY3Rpb24gY29ubiA9IG51bGw7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2Nvbm5sZWFrdHJhY2luZy9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29ubmxlYWt0cmFjaW5nL3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhCmluZGV4IDg4NDk2YTYuLjlhNDlhZTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29ubmxlYWt0cmFjaW5nL3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29ubmxlYWt0cmFjaW5nL3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhCkBAIC01NiwyNCArNTYsMjQgQEAKICAgICAgICAgLy9zdGF0LmFkZERlc2NyaXB0aW9uKCJSdW5uaW5nIHNlcmlhbGl6YWJsZSBjb25uZWN0b3IgdGVzdCAiKTsKICAgICAgICAgU2ltcGxlQk1QIGJlYW4gPSBzaW1wbGVCTVBIb21lLmNyZWF0ZSgpOwogCi0JICAgIGZvcihpbnQgaT0wOyBpPDM7IGkrKyl7CisgICAgICAgIGZvcihpbnQgaT0wOyBpPDM7IGkrKyl7CiAgICAgICAgICAgICAgICAgaWYoIWJlYW4udGVzdDEoKSl7Ci0JCSAgICAvL3N0YXQuYWRkU3RhdHVzKCJqZGJjLWNvbm5lY3Rpb25sZWFrdHRyYWNpbmcgOiB0ZXN0ICIsIHN0YXQuRkFJTCk7CisgICAgICAgICAgICAvL3N0YXQuYWRkU3RhdHVzKCJqZGJjLWNvbm5lY3Rpb25sZWFrdHRyYWNpbmcgOiB0ZXN0ICIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJURVNUOkZBSUwiKTsKLQkgICAgICAgICAgICBicmVhazsKLQkgICAgICAgIH0KLQkgICAgICAgIFRocmVhZC5zbGVlcCgyMDAwMCk7Ci0JICAgIH0KLQkgICAgb3V0LnByaW50bG4oIlRFU1Q6UEFTUyIpOwotCX0gY2F0Y2goTmFtaW5nRXhjZXB0aW9uIG5lKSB7Ci0JICAgIG5lLnByaW50U3RhY2tUcmFjZSgpOwotCX0gY2F0Y2goQ3JlYXRlRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9IGNhdGNoKGphdmEubGFuZy5JbnRlcnJ1cHRlZEV4Y2VwdGlvbiBpZSkgewotCQlpZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFRocmVhZC5zbGVlcCgyMDAwMCk7CisgICAgICAgIH0KKyAgICAgICAgb3V0LnByaW50bG4oIlRFU1Q6UEFTUyIpOworICAgIH0gY2F0Y2goTmFtaW5nRXhjZXB0aW9uIG5lKSB7CisgICAgICAgIG5lLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0gY2F0Y2goQ3JlYXRlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9IGNhdGNoKGphdmEubGFuZy5JbnRlcnJ1cHRlZEV4Y2VwdGlvbiBpZSkgeworICAgICAgICBpZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfSBmaW5hbGx5IHsKLQkgICAgb3V0LnByaW50bG4oIkVORF9PRl9URVNUIik7Ci0JICAgIG91dC5mbHVzaCgpOwotCX0KKyAgICAgICAgb3V0LnByaW50bG4oIkVORF9PRl9URVNUIik7CisgICAgICAgIG91dC5mbHVzaCgpOworICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2Nvbm5sZWFrdHJhY2luZy9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2Nvbm5sZWFrdHJhY2luZy9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggZTQ5MTRmNi4uZjI1NjA3NiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb25ubGVha3RyYWNpbmcvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29ubmxlYWt0cmFjaW5nL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSw3ICsxLDcgQEAKLURyb3AgdGFibGUgT19DdXN0b21lcjsNCi0NCi1DUkVBVEUgVEFCTEUgT19DdXN0b21lciAoDQotICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikNCi0pOw0KLQ0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKKworQ1JFQVRFIFRBQkxFIE9fQ3VzdG9tZXIgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQorKTsKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb25ubGVha3RyYWNpbmcvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29ubmxlYWt0cmFjaW5nL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggNzBkMWZjYy4uZDg1NGI5NSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb25ubGVha3RyYWNpbmcvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2Nvbm5sZWFrdHJhY2luZy9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xICsxIEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb250YXV0aC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb250YXV0aC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDE1NzVjNmMuLmFmN2UzYjcgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29udGF1dGgvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2NvbnRhdXRoL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE3ICsxNSwxNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY29udGF1dGgiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvY29udGF1dGgvc2VydmxldCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb250YXV0aC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2NvbnRhdXRoL2J1aWxkLnhtbAppbmRleCAxY2ZlMTBiLi5hZmI4YWI4IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2NvbnRhdXRoL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2NvbnRhdXRoL2J1aWxkLnhtbApAQCAtNDEsNyArNDEsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNTYsMzAgKzU2LDMwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLQk8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0idHJ1ZSIvPgorICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ0cnVlIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZWpiLWphci1jb21tb24iPgotCSAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+Ci0JPC9hbnRjYWxsPgorICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CisgICAgPC9hbnRjYWxsPgogCi0JPGRlbGV0ZSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS5lYXIiLz4KKyAgICA8ZGVsZXRlIGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LmVhciIvPgogICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KIAogICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgogCi0gICAgICAgIDxlYXIgZWFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIiAKLQkgICAgIGFwcHhtbD0iJHthcHBsaWNhdGlvbi54bWx9Ij4KLQkgICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KLQkgICAgICAgIDxpbmNsdWRlIG5hbWU9IiouamFyIi8+Ci0JICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLndhciIvPgotCSAgICAgPC9maWxlc2V0PgotCTwvZWFyPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICAgICAgPGVhciBlYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiCisgICAgICAgICBhcHB4bWw9IiR7YXBwbGljYXRpb24ueG1sfSI+CisgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSI+CisgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLmphciIvPgorICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi53YXIiLz4KKyAgICAgICAgIDwvZmlsZXNldD4KKyAgICA8L2Vhcj4KKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgpAQCAtODcsMTcgKzg3LDE3IEBACiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qZGJjLWNvbW1vbiIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLXRlc3QtMSIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4tdGVzdC0xIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVud2ViY2xpZW50LWNvbW1vbiI+Ci0JICAgIDxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJ3ZWItdG8tZWpiIChlYXIgYmFzZWQpIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJ3ZWItdG8tZWpiIChlYXIgYmFzZWQpIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIApAQCAtMTA4LDcgKzEwOCw3IEBACiAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamRiYy1jb21tb24iLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29udGF1dGgvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29udGF1dGgvZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCA3ZTZiYzMwLi41NzY1MTJiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2NvbnRhdXRoL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb250YXV0aC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC01MCwxMyArNTAsMTMgQEAKIAogICA8YXNzZW1ibHktZGVzY3JpcHRvcj4KICAgICA8Y29udGFpbmVyLXRyYW5zYWN0aW9uPgotCSAgICA8bWV0aG9kPgorICAgICAgICA8bWV0aG9kPgogICAgICAgICA8ZWpiLW5hbWU+U2ltcGxlQk1QRUpCPC9lamItbmFtZT4KICAgICAgICAgPG1ldGhvZC1uYW1lPio8L21ldGhvZC1uYW1lPgogICAgICAgPC9tZXRob2Q+CiAgICAgICA8dHJhbnMtYXR0cmlidXRlPlJlcXVpcmVkPC90cmFucy1hdHRyaWJ1dGU+CiAgICAgPC9jb250YWluZXItdHJhbnNhY3Rpb24+CiAgIDwvYXNzZW1ibHktZGVzY3JpcHRvcj4KLSAgICAgIAorCiA8L2VqYi1qYXI+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29udGF1dGgvZWpiL1NpbXBsZUJNUEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29udGF1dGgvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQppbmRleCA1Y2VlYzQxLi41MmQ5OTAwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2NvbnRhdXRoL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb250YXV0aC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCkBAIC0zMCw1OCArMzAsNTggQEAKICAgICBwcm90ZWN0ZWQgRGF0YVNvdXJjZSBkczsKIAogICAgIHB1YmxpYyB2b2lkIHNldEVudGl0eUNvbnRleHQoRW50aXR5Q29udGV4dCBlbnRpdHlDb250ZXh0KSB7Ci0JQ29udGV4dCBjb250ZXh0ID0gbnVsbDsKLQl0cnkgewotCSAgICBjb250ZXh0ICAgID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JICAgIGRzID0gKERhdGFTb3VyY2UpIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L0RhdGFTb3VyY2UiKTsKLQl9IGNhdGNoIChOYW1pbmdFeGNlcHRpb24gZSkgewotCSAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJjYW50IGZpbmQgZGF0YXNvdXJjZSIpOwotCX0KKyAgICBDb250ZXh0IGNvbnRleHQgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIGNvbnRleHQgICAgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgZHMgPSAoRGF0YVNvdXJjZSkgY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvRGF0YVNvdXJjZSIpOworICAgIH0gY2F0Y2ggKE5hbWluZ0V4Y2VwdGlvbiBlKSB7CisgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oImNhbnQgZmluZCBkYXRhc291cmNlIik7CisgICAgfQogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlsqKlNpbXBsZUJNUEJlYW4qKl0gRG9uZSB3aXRoIHNldEVudGl0eUNvbnRleHQuLi4uIik7CiAgICAgfQogCiAgICAgcHVibGljIEludGVnZXIgZWpiQ3JlYXRlKCkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7Ci0JcmV0dXJuIG5ldyBJbnRlZ2VyKDEpOworICAgIHJldHVybiBuZXcgSW50ZWdlcigxKTsKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MSgpIHsKICAgICAgICAgLy9jb250YWluZXIgYXV0aCArIHVzZXIvcHdkIHNwZWNpZmllZCAtIHNob3VsZCBwYXNzCi0JQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKLQlib29sZWFuIHBhc3NlZCA9IHRydWU7Ci0JdHJ5IHsKLQkgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oIkRCVVNFUiIsICJEQlBBU1NXT1JEIiApOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIHBhc3NlZCA9IGZhbHNlOwotCX0gZmluYWxseSB7Ci0JICAgIGlmICggY29ubiAhPSBudWxsICkgewotCSAgICAgICAgdHJ5IHsKLQkgICAgICAgICAgICBjb25uLmNsb3NlKCk7Ci0JCX0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30gICAgCi0JICAgIH0KLQl9Ci0KLQotCXJldHVybiBwYXNzZWQ7CisgICAgQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKKyAgICBib29sZWFuIHBhc3NlZCA9IHRydWU7CisgICAgdHJ5IHsKKyAgICAgICAgY29ubiA9IGRzLmdldENvbm5lY3Rpb24oIkRCVVNFUiIsICJEQlBBU1NXT1JEIiApOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmICggY29ubiAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjb25uLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQogICAgIH0KLSAgICAKKworCisgICAgcmV0dXJuIHBhc3NlZDsKKyAgICB9CisKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MigpIHsKICAgICAgICAgLy9jb250YWluZXIgYXV0aCArIHVzZXIvcHdkIE5PVCBzcGVjaWZpZWQgLSBzaG91bGQgcGFzcwotCUNvbm5lY3Rpb24gY29ubiA9IG51bGw7Ci0JYm9vbGVhbiBwYXNzZWQgPSB0cnVlOwotCXRyeSB7Ci0JICAgIGNvbm4gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgcGFzc2VkID0gZmFsc2U7Ci0JfSBmaW5hbGx5IHsKLQkgICAgaWYgKCBjb25uICE9IG51bGwgKSB7Ci0JICAgICAgICB0cnkgewotCSAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKLQkJfSBjYXRjaCggRXhjZXB0aW9uIGUxKSB7fSAgICAKLQkgICAgfQotCX0KKyAgICBDb25uZWN0aW9uIGNvbm4gPSBudWxsOworICAgIGJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKKyAgICB0cnkgeworICAgICAgICBjb25uID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGlmICggY29ubiAhPSBudWxsICkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjb25uLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBlMSkge30KKyAgICAgICAgfQorICAgIH0KIAotCQotCXJldHVybiBwYXNzZWQ7CisKKyAgICByZXR1cm4gcGFzc2VkOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYkxvYWQoKSB7fQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb250YXV0aC9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29udGF1dGgvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEKaW5kZXggNTgyMDhjMi4uZTViNjJhYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb250YXV0aC9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2NvbnRhdXRoL3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhCkBAIC01NiwyOSArNTYsMjkgQEAKICAgICAgICAgU2ltcGxlQk1QIGJlYW4gPSBzaW1wbGVCTVBIb21lLmNyZWF0ZSgpOwogCiAgICAgICAgIGlmICggYmVhbi50ZXN0MSgpICkgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbnRhdXRoIDogdGVzdDEgOiBQQVNTIik7Ci0JICAgIG91dC5wcmludGxuKCJURVNUOlBBU1MiKTsKLQl9IGVsc2UgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbnRhdXRoIDogdGVzdDEgOiBGQUlMIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29udGF1dGggOiB0ZXN0MSA6IFBBU1MiKTsKKyAgICAgICAgb3V0LnByaW50bG4oIlRFU1Q6UEFTUyIpOworICAgIH0gZWxzZSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29udGF1dGggOiB0ZXN0MSA6IEZBSUwiKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCJURVNUOkZBSUwiKTsKLQl9Ci0JaWYgKCBiZWFuLnRlc3QyKCkgKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29udGF1dGggOiB0ZXN0MiA6IFBBU1MiKTsKLQkgICAgb3V0LnByaW50bG4oIlRFU1Q6UEFTUyIpOwotCX0gZWxzZSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29udGF1dGggOiB0ZXN0MiA6IEZBSUwiKTsKKyAgICB9CisgICAgaWYgKCBiZWFuLnRlc3QyKCkgKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29udGF1dGggOiB0ZXN0MiA6IFBBU1MiKTsKKyAgICAgICAgb3V0LnByaW50bG4oIlRFU1Q6UEFTUyIpOworICAgIH0gZWxzZSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29udGF1dGggOiB0ZXN0MiA6IEZBSUwiKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCJURVNUOkZBSUwiKTsKLQl9CisgICAgfQogCi0JfSBjYXRjaChOYW1pbmdFeGNlcHRpb24gbmUpIHsKLQkgICAgbmUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfSBjYXRjaChDcmVhdGVFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCX0gLypjYXRjaChqYXZhLmxhbmcuSW50ZXJydXB0ZWRFeGNlcHRpb24gaWUpIHsKLQkJaWUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfSBjYXRjaChOYW1pbmdFeGNlcHRpb24gbmUpIHsKKyAgICAgICAgbmUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfSBjYXRjaChDcmVhdGVFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0gLypjYXRjaChqYXZhLmxhbmcuSW50ZXJydXB0ZWRFeGNlcHRpb24gaWUpIHsKKyAgICAgICAgaWUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0gKi9maW5hbGx5IHsKLQkgICAgb3V0LnByaW50bG4oIkVORF9PRl9URVNUIik7Ci0JICAgIG91dC5mbHVzaCgpOwotCX0KKyAgICAgICAgb3V0LnByaW50bG4oIkVORF9PRl9URVNUIik7CisgICAgICAgIG91dC5mbHVzaCgpOworICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2NvbnRhdXRoL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29udGF1dGgvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IGU0OTE0ZjYuLmYyNTYwNzYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29udGF1dGgvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29udGF1dGgvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDcgKzEsNyBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KLQ0KLUNSRUFURSBUQUJMRSBPX0N1c3RvbWVyICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOworCitDUkVBVEUgVEFCTEUgT19DdXN0b21lciAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2NvbnRhdXRoL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2NvbnRhdXRoL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggNzBkMWZjYy4uZDg1NGI5NSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9jb250YXV0aC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvY29udGF1dGgvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbApAQCAtMSArMSBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvZW1iZWRkZWQvc2V0dXAtamRiYy1kZXYtdGVzdHMtZW1iZWRkZWQuc2ggYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2VtYmVkZGVkL3NldHVwLWpkYmMtZGV2LXRlc3RzLWVtYmVkZGVkLnNoCmluZGV4IGEwMzkwZTAuLjk5NzViZWIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvZW1iZWRkZWQvc2V0dXAtamRiYy1kZXYtdGVzdHMtZW1iZWRkZWQuc2gKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9lbWJlZGRlZC9zZXR1cC1qZGJjLWRldi10ZXN0cy1lbWJlZGRlZC5zaApAQCAtODksNyArODksNyBAQAogCiAjQ3JlYXRlIFBvb2wvUmVzb3VyY2UgZm9yIGxhenktY29ubmVjdGlvbi1hc3NvY2lhdGlvbnRlc3QKIGVjaG8gQ3JlYXRpbmcgUG9vbC9SZXNvdXJjZSBMYXp5IGNvbm5lY3Rpb24gYXNzb2NpYXRpb24gdGVzdAotLi9iaW4vYXNhZG1pbiBjcmVhdGUtamRiYy1jb25uZWN0aW9uLXBvb2wgLS1tYXh3YWl0PTEwIC0tZGF0YXNvdXJjZWNsYXNzbmFtZT1vcmcuYXBhY2hlLmRlcmJ5LmpkYmMuRW1iZWRkZWRDb25uZWN0aW9uUG9vbERhdGFTb3VyY2UgLS1yZXN0eXBlPWphdmF4LnNxbC5Db25uZWN0aW9uUG9vbERhdGFTb3VyY2UgIC0tbGF6eWNvbm5lY3Rpb25lbmxpc3RtZW50PXRydWUgLS1sYXp5Y29ubmVjdGlvbmFzc29jaWF0aW9uPXRydWUgLS1wcm9wZXJ0eT0icGFzc3dvcmQ9QVBQOnVzZXI9QVBQOmRhdGFiYXNlTmFtZT1zdW4tYXBwc2Vydi1zYW1wbGVzOmNvbm5lY3Rpb25BdHRyaWJ1dGVzPVw7Y3JlYXRlXFw9dHJ1ZSIgamRiYy1sYXp5LWFzc29jLXRlc3QtcG9vbCAKKy4vYmluL2FzYWRtaW4gY3JlYXRlLWpkYmMtY29ubmVjdGlvbi1wb29sIC0tbWF4d2FpdD0xMCAtLWRhdGFzb3VyY2VjbGFzc25hbWU9b3JnLmFwYWNoZS5kZXJieS5qZGJjLkVtYmVkZGVkQ29ubmVjdGlvblBvb2xEYXRhU291cmNlIC0tcmVzdHlwZT1qYXZheC5zcWwuQ29ubmVjdGlvblBvb2xEYXRhU291cmNlICAtLWxhenljb25uZWN0aW9uZW5saXN0bWVudD10cnVlIC0tbGF6eWNvbm5lY3Rpb25hc3NvY2lhdGlvbj10cnVlIC0tcHJvcGVydHk9InBhc3N3b3JkPUFQUDp1c2VyPUFQUDpkYXRhYmFzZU5hbWU9c3VuLWFwcHNlcnYtc2FtcGxlczpjb25uZWN0aW9uQXR0cmlidXRlcz1cO2NyZWF0ZVxcPXRydWUiIGpkYmMtbGF6eS1hc3NvYy10ZXN0LXBvb2wKIC4vYmluL2FzYWRtaW4gY3JlYXRlLWpkYmMtcmVzb3VyY2UgLS1jb25uZWN0aW9ucG9vbGlkPWpkYmMtbGF6eS1hc3NvYy10ZXN0LXBvb2wgamRiYy9qZGJjLWxhenktYXNzb2MtdGVzdC1yZXNvdXJjZQogZWNobyAiXG4iCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvZW1iZWRkZWQvc2V0dXAtamRiYy1yZWNvbmZpZy1kZXYtdGVzdHNfZW1iZWRkZWQuc2ggYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL2VtYmVkZGVkL3NldHVwLWpkYmMtcmVjb25maWctZGV2LXRlc3RzX2VtYmVkZGVkLnNoCmluZGV4IGZkMDhiMmYuLjgzZTdhYmQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvZW1iZWRkZWQvc2V0dXAtamRiYy1yZWNvbmZpZy1kZXYtdGVzdHNfZW1iZWRkZWQuc2gKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9lbWJlZGRlZC9zZXR1cC1qZGJjLXJlY29uZmlnLWRldi10ZXN0c19lbWJlZGRlZC5zaApAQCAtNTAsNyArNTAsNyBAQAogZWNobyBjcmVhdGUgcmVzb3VyY2UgamRiYy9qZGJjLXJlY29uZmlnLXRlc3QtcmVzb3VyY2UtMQogLi9iaW4vYXNhZG1pbiBjcmVhdGUtamRiYy1yZXNvdXJjZSAtLWNvbm5lY3Rpb25wb29saWQ9amRiYy1yZWNvbmZpZy10ZXN0LXBvb2wtMSBqZGJjL2pkYmMtcmVjb25maWctdGVzdC1yZXNvdXJjZS0xCiAKLWVjaG8gY3JlYXRlIHBvb2wgamRiYy1yZWNvbmZpZy10ZXN0LXBvb2wtMiAKK2VjaG8gY3JlYXRlIHBvb2wgamRiYy1yZWNvbmZpZy10ZXN0LXBvb2wtMgogLi9iaW4vYXNhZG1pbiBjcmVhdGUtamRiYy1jb25uZWN0aW9uLXBvb2wgLS1kYXRhc291cmNlY2xhc3NuYW1lPW9yZy5hcGFjaGUuZGVyYnkuamRiYy5FbWJlZGRlZENvbm5lY3Rpb25Qb29sRGF0YVNvdXJjZSAtLXJlc3R5cGU9amF2YXguc3FsLkNvbm5lY3Rpb25Qb29sRGF0YVNvdXJjZSAtLXByb3BlcnR5PSJQYXNzd29yZD1ycGFzc3dvcmQ6VXNlcj1ydXNlcjpEYXRhYmFzZU5hbWU9JGRhdGFiYXNlc2hvbWUvcmVjb25maWctZGI6c2VydmVyTmFtZT1sb2NhbGhvc3QiIGpkYmMtcmVjb25maWctdGVzdC1wb29sLTIKIAogZWNobyBjcmVhdGUgcmVzb3VyY2UgamRiYy9qZGJjLXJlY29uZmlnLXRlc3QtcmVzb3VyY2UtMgpAQCAtNzksNyArNzksNyBAQAogLi9iaW4vYXNhZG1pbiBzZXQgcmVzb3VyY2VzLmpkYmMtY29ubmVjdGlvbi1wb29sLmpkYmMtZGV2LXRlc3QtcG9vbC5tYXgtd2FpdC10aW1lLWluLW1pbGxpcz0xMDAwCiAKIGVjaG8gIlxuR0VUIGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC92M19qZGJjX2Rldl90ZXN0cy9SZWNvbmZpZ1Rlc3RTZXJ2bGV0P21heFBvb2xTaXplPTQwXCZ0aHJvd0V4Y2VwdGlvbj10cnVlXCZ0ZXN0SWQ9MSBcbiIKLUdFVCBodHRwOi8vbG9jYWxob3N0OjgwODAvdjNfamRiY19kZXZfdGVzdHMvUmVjb25maWdUZXN0U2VydmxldD9tYXhQb29sU2l6ZT00MFwmdGhyb3dFeGNlcHRpb249dHJ1ZVwmdGVzdElkPTEgPiAkcmVjb25maWdSZXN1bHQgCitHRVQgaHR0cDovL2xvY2FsaG9zdDo4MDgwL3YzX2pkYmNfZGV2X3Rlc3RzL1JlY29uZmlnVGVzdFNlcnZsZXQ/bWF4UG9vbFNpemU9NDBcJnRocm93RXhjZXB0aW9uPXRydWVcJnRlc3RJZD0xID4gJHJlY29uZmlnUmVzdWx0CiBlY2hvICJcbiIKIAogI2FzYWRtaW4gc2V0IG1heC1wb29sLXNpemUgdG8gMTAgYmVmb3JlIHJ1bm5pbmcgdGVzdCBmb3IgdGhlIHNlY29uZCB0aW1lCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL21heGNvbm5lY3Rpb251c2FnZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9tYXhjb25uZWN0aW9udXNhZ2UvYnVpbGQucHJvcGVydGllcwppbmRleCBiZDQ5ODY3Li42ODAwMTA4IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL21heGNvbm5lY3Rpb251c2FnZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvbWF4Y29ubmVjdGlvbnVzYWdlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE3ICsxNSwxNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ibWF4Y29ubmVjdGlvbnVzYWdlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iMTIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvbWF4Y29ubmVjdGlvbnVzYWdlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvbWF4Y29ubmVjdGlvbnVzYWdlL2J1aWxkLnhtbAppbmRleCBiZWE1MjZkLi42MmQwZTkxIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL21heGNvbm5lY3Rpb251c2FnZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9tYXhjb25uZWN0aW9udXNhZ2UvYnVpbGQueG1sCkBAIC0xOSwxMSArMTksMTEgQEAKIC0tPgogCiA8IUVOVElUWSBjb21tb25TZXR1cCBTWVNURU0gIi4vLi4vLi4vLi4vLi4vY29uZmlnL3Byb3BlcnRpZXMueG1sIj4KLQk8IUVOVElUWSBjb21tb25CdWlsZCBTWVNURU0gIi4vLi4vLi4vLi4vLi4vY29uZmlnL2NvbW1vbi54bWwiPgorICAgIDwhRU5USVRZIGNvbW1vbkJ1aWxkIFNZU1RFTSAiLi8uLi8uLi8uLi8uLi9jb25maWcvY29tbW9uLnhtbCI+CiAgICAgICAgIDwhRU5USVRZIHRlc3Rwcm9wZXJ0aWVzIFNZU1RFTSAiLi9idWlsZC5wcm9wZXJ0aWVzIj4KLQk8IUVOVElUWSBydW4gU1lTVEVNICIuLy4uLy4uLy4uLy4uL2NvbmZpZy9ydW4ueG1sIj4KLQk8IUVOVElUWSBlZVNldHVwIFNZU1RFTSAiLi8uLi8uLi9jb25maWcvZWUtY29tbW9uLnhtbCI+Ci0JPCFFTlRJVFkgZWVQcm9wZXJ0aWVzIFNZU1RFTSAiLi8uLi8uLi9jb25maWcvZWUtcHJvcGVydGllcy54bWwiPgorICAgIDwhRU5USVRZIHJ1biBTWVNURU0gIi4vLi4vLi4vLi4vLi4vY29uZmlnL3J1bi54bWwiPgorICAgIDwhRU5USVRZIGVlU2V0dXAgU1lTVEVNICIuLy4uLy4uL2NvbmZpZy9lZS1jb21tb24ueG1sIj4KKyAgICA8IUVOVElUWSBlZVByb3BlcnRpZXMgU1lTVEVNICIuLy4uLy4uL2NvbmZpZy9lZS1wcm9wZXJ0aWVzLnhtbCI+CiAgICAgICAgIF0+CiAKIDxwcm9qZWN0IG5hbWU9Im1peCIgZGVmYXVsdD0idXNhZ2UiIGJhc2VkaXI9Ii4iPgpAQCAtNTEsMjggKzUxLDI4IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLQk8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0idHJ1ZSIvPgorICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ0cnVlIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZWpiLWphci1jb21tb24iPgotCSAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+Ci0JPC9hbnRjYWxsPgorICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CisgICAgPC9hbnRjYWxsPgogCi0JPGRlbGV0ZSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS5lYXIiLz4KKyAgICA8ZGVsZXRlIGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LmVhciIvPgogICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KIAogICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgogCi0gICAgICAgIDxlYXIgZWFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIiAKLQkgICAgIGFwcHhtbD0iJHthcHBsaWNhdGlvbi54bWx9Ij4KLQkgICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KLQkgICAgICAgIDxpbmNsdWRlIG5hbWU9IiouamFyIi8+Ci0JICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLndhciIvPgotCSAgICAgPC9maWxlc2V0PgotCTwvZWFyPgorICAgICAgICA8ZWFyIGVhcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIKKyAgICAgICAgIGFwcHhtbD0iJHthcHBsaWNhdGlvbi54bWx9Ij4KKyAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KKyAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IiouamFyIi8+CisgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLndhciIvPgorICAgICAgICAgPC9maWxlc2V0PgorICAgIDwvZWFyPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTkzLDcgKzkzLDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0icnVuLXRlc3QtMSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bndlYmNsaWVudC1jb21tb24iPgotCSAgICA8cGFyYW0gbmFtZT0idGVzdHN1aXRlLmlkIiB2YWx1ZT0id2ViLXRvLWVqYiAoZWFyIGJhc2VkKSIvPgorICAgICAgICA8cGFyYW0gbmFtZT0idGVzdHN1aXRlLmlkIiB2YWx1ZT0id2ViLXRvLWVqYiAoZWFyIGJhc2VkKSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvbWF4Y29ubmVjdGlvbnVzYWdlL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9tYXhjb25uZWN0aW9udXNhZ2UvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwKaW5kZXggOGQ1YmFlNi4uN2YyOTczMyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9tYXhjb25uZWN0aW9udXNhZ2UvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9tYXhjb25uZWN0aW9udXNhZ2UvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwKQEAgLTI4LDEwICsyOCwxMCBAQAogICAgICAgICA8ZWpiPm1heGNvbm5lY3Rpb251c2FnZS1lamIuamFyPC9lamI+CiAgICAgPC9tb2R1bGU+CiAgICAgPG1vZHVsZT4KLQk8d2ViPgotCSAgICA8d2ViLXVyaT5tYXhjb25uZWN0aW9udXNhZ2Utd2ViLndhcjwvd2ViLXVyaT4KLQkgICAgPGNvbnRleHQtcm9vdD5tYXhjb25uZWN0aW9udXNhZ2U8L2NvbnRleHQtcm9vdD4KLQk8L3dlYj4KKyAgICA8d2ViPgorICAgICAgICA8d2ViLXVyaT5tYXhjb25uZWN0aW9udXNhZ2Utd2ViLndhcjwvd2ViLXVyaT4KKyAgICAgICAgPGNvbnRleHQtcm9vdD5tYXhjb25uZWN0aW9udXNhZ2U8L2NvbnRleHQtcm9vdD4KKyAgICA8L3dlYj4KICAgICA8L21vZHVsZT4KIDwvYXBwbGljYXRpb24+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvbWF4Y29ubmVjdGlvbnVzYWdlL3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9tYXhjb25uZWN0aW9udXNhZ2Uvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEKaW5kZXggZTE5ZjY0ZS4uNTA1ODljMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9tYXhjb25uZWN0aW9udXNhZ2Uvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9tYXhjb25uZWN0aW9udXNhZ2Uvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEKQEAgLTU3LDcgKzU3LDcgQEAKIAogICAgICAgICBpZiAoc2ltcGxlQk1QLnRlc3QxKGZhbHNlKSkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgTWF4IENvbm5lY3Rpb24gVXNhZ2UgLSAgKGxvY2FsLVR4Tm90U3VwcG9ydGVkKTogUEFTUyIpOwotCSAgICBvdXQucHJpbnRsbigiVEVTVDpQQVNTIik7CisgICAgICAgIG91dC5wcmludGxuKCJURVNUOlBBU1MiKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIE1heCBDb25uZWN0aW9uIFVzYWdlIC0gIChsb2NhbC1UeE5vdFN1cHBvcnRlZCk6IEZBSUwiKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCJURVNUOkZBSUwiKTsKQEAgLTY3LDcgKzY3LDcgQEAKICAgICAgICAgYm9vbGVhbiBzdGF0dXMgPSBjb25uZWN0aW9uU2hhcmluZ1Rlc3Qoc2ltcGxlQk1QLCB1c2VYQSwgMjExMTIpOwogICAgICAgICBpZiAoc3RhdHVzKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBNYXggQ29ubmVjdGlvbiBVc2FnZSAtIChsb2NhbC1UeC1TaGFyaW5nKSA6IFBBU1MiKTsKLQkgICAgb3V0LnByaW50bG4oIlRFU1Q6UEFTUyIpOworICAgICAgICBvdXQucHJpbnRsbigiVEVTVDpQQVNTIik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBNYXggQ29ubmVjdGlvbiBVc2FnZSAtIChsb2NhbC1UeC1TaGFyaW5nKSA6IEZBSUwiKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCJURVNUOkZBSUwiKTsKQEAgLTc2LDIwICs3NiwyMCBAQAogCiAgICAgICAgIGlmIChzaW1wbGVCTVAudGVzdDEodHJ1ZSkpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIE1heCBDb25uZWN0aW9uIFVzYWdlIC0gIChYQS1UeE5vdFN1cHBvcnRlZCkgOiBQQVNTIik7Ci0JICAgIG91dC5wcmludGxuKCJURVNUOlBBU1MiKTsKKyAgICAgICAgb3V0LnByaW50bG4oIlRFU1Q6UEFTUyIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgTWF4IENvbm5lY3Rpb24gVXNhZ2UgLSAgKFhBLVR4Tm90U3VwcG9ydGVkKSA6IEZBSUwiKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCJURVNUOkZBSUwiKTsKICAgICAgICAgfQogCi0JfSBjYXRjaChOYW1pbmdFeGNlcHRpb24gbmUpIHsKLQkgICAgbmUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfSBjYXRjaChDcmVhdGVFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0gY2F0Y2goTmFtaW5nRXhjZXB0aW9uIG5lKSB7CisgICAgICAgIG5lLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0gY2F0Y2goQ3JlYXRlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfSBmaW5hbGx5IHsKLQkgICAgb3V0LnByaW50bG4oIkVORF9PRl9URVNUIik7Ci0JICAgIG91dC5mbHVzaCgpOwotCX0KKyAgICAgICAgb3V0LnByaW50bG4oIkVORF9PRl9URVNUIik7CisgICAgICAgIG91dC5mbHVzaCgpOworICAgIH0KICAgICB9CiAKICAgICBwcml2YXRlIGJvb2xlYW4gY29ubmVjdGlvblNoYXJpbmdUZXN0KFNpbXBsZUJNUCBzaW1wbGVCTVAsIGJvb2xlYW4gdXNlWEEsIGludCB2YWx1ZSkgey8vdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL21heGNvbm5lY3Rpb251c2FnZS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL21heGNvbm5lY3Rpb251c2FnZS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggNTFiMDczNS4uMzk2YzU2NiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9tYXhjb25uZWN0aW9udXNhZ2Uvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvbWF4Y29ubmVjdGlvbnVzYWdlL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSw3ICsxLDcgQEAKLURyb3AgdGFibGUgbWF4X2Nvbm5lY3Rpb25fdXNhZ2U7DQotDQotQ1JFQVRFIFRBQkxFIG1heF9jb25uZWN0aW9uX3VzYWdlICgNCi0gICAgaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLA0KLSAgICB2YWx1ZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCitEcm9wIHRhYmxlIG1heF9jb25uZWN0aW9uX3VzYWdlOworCitDUkVBVEUgVEFCTEUgbWF4X2Nvbm5lY3Rpb25fdXNhZ2UgKAorICAgIGlkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICB2YWx1ZSAgICAgICAgIGNoYXIoMTYpCispOworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL21heGNvbm5lY3Rpb251c2FnZS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9tYXhjb25uZWN0aW9udXNhZ2Uvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbAppbmRleCA0ZTU3N2EzLi5iM2M4Yjk3IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL21heGNvbm5lY3Rpb251c2FnZS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvbWF4Y29ubmVjdGlvbnVzYWdlL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKQEAgLTEgKzEgQEAKLURyb3AgdGFibGUgbWF4X2Nvbm5lY3Rpb25fdXNhZ2U7DQorRHJvcCB0YWJsZSBtYXhfY29ubmVjdGlvbl91c2FnZTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvbXVsdGlwbGV1c2VyY3JlZGVudGlhbHMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvbXVsdGlwbGV1c2VyY3JlZGVudGlhbHMvYnVpbGQucHJvcGVydGllcwppbmRleCAwM2UwMDk0Li4xMzJjMmMzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL211bHRpcGxldXNlcmNyZWRlbnRpYWxzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9tdWx0aXBsZXVzZXJjcmVkZW50aWFscy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMSArMTUsMjEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImpkYmMtbXVsdGlwbGV1c2VyY3JlZGVudGlhbHMiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvamRiYy1tdWx0aXBsZXVzZXJjcmVkZW50aWFscy9zZXJ2bGV0Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL211bHRpcGxldXNlcmNyZWRlbnRpYWxzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvbXVsdGlwbGV1c2VyY3JlZGVudGlhbHMvYnVpbGQueG1sCmluZGV4IDM0NGRkOTguLmNjZWI0MjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvbXVsdGlwbGV1c2VyY3JlZGVudGlhbHMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvbXVsdGlwbGV1c2VyY3JlZGVudGlhbHMvYnVpbGQueG1sCkBAIC0xOSwxMyArMTksMTMgQEAKIC0tPgogCiA8IUVOVElUWSBjb21tb25TZXR1cCBTWVNURU0gIi4vLi4vLi4vLi4vLi4vY29uZmlnL3Byb3BlcnRpZXMueG1sIj4KLQk8IUVOVElUWSBjb21tb25CdWlsZCBTWVNURU0gIi4vLi4vLi4vLi4vLi4vY29uZmlnL2NvbW1vbi54bWwiPgorICAgIDwhRU5USVRZIGNvbW1vbkJ1aWxkIFNZU1RFTSAiLi8uLi8uLi8uLi8uLi9jb25maWcvY29tbW9uLnhtbCI+CiAgICAgICAgIDwhRU5USVRZIHRlc3Rwcm9wZXJ0aWVzIFNZU1RFTSAiLi9idWlsZC5wcm9wZXJ0aWVzIj4KLQk8IUVOVElUWSBydW4gU1lTVEVNICIuLy4uLy4uLy4uLy4uL2NvbmZpZy9ydW4ueG1sIj4KLQk8IUVOVElUWSBqZGJjQ29tbW9uIFNZU1RFTSAiLi8uLi8uLi9KZGJjQ29tbW9uLnhtbCI+Ci0JPCFFTlRJVFkgamRiY0NvbW1vblByb3BzIFNZU1RFTSAgIi4vLi4vLi4vSmRiY0NvbW1vbi5wcm9wZXJ0aWVzIj4KLQk8IUVOVElUWSBlZVNldHVwIFNZU1RFTSAiLi8uLi8uLi9jb25maWcvZWUtY29tbW9uLnhtbCI+Ci0JPCFFTlRJVFkgZWVQcm9wZXJ0aWVzIFNZU1RFTSAiLi8uLi8uLi9jb25maWcvZWUtcHJvcGVydGllcy54bWwiPgorICAgIDwhRU5USVRZIHJ1biBTWVNURU0gIi4vLi4vLi4vLi4vLi4vY29uZmlnL3J1bi54bWwiPgorICAgIDwhRU5USVRZIGpkYmNDb21tb24gU1lTVEVNICIuLy4uLy4uL0pkYmNDb21tb24ueG1sIj4KKyAgICA8IUVOVElUWSBqZGJjQ29tbW9uUHJvcHMgU1lTVEVNICAiLi8uLi8uLi9KZGJjQ29tbW9uLnByb3BlcnRpZXMiPgorICAgIDwhRU5USVRZIGVlU2V0dXAgU1lTVEVNICIuLy4uLy4uL2NvbmZpZy9lZS1jb21tb24ueG1sIj4KKyAgICA8IUVOVElUWSBlZVByb3BlcnRpZXMgU1lTVEVNICIuLy4uLy4uL2NvbmZpZy9lZS1wcm9wZXJ0aWVzLnhtbCI+CiAgICAgICAgIF0+CiAKIDxwcm9qZWN0IG5hbWU9Im1peCIgZGVmYXVsdD0idXNhZ2UiIGJhc2VkaXI9Ii4iPgpAQCAtNTcsMTIgKzU3LDEyIEBACiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCi0JCSAgICB2YWx1ZT0iKiovZWpiLyouY2xhc3MiLz4KKyAgICAgICAgICAgIHZhbHVlPSIqKi9lamIvKi5jbGFzcyIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgotCQkgICAgdmFsdWU9IioqL2NsaWVudC8qLmNsYXNzIi8+Ci0JICAgIDxwYXJhbSBuYW1lPSJ3YXIuY2xhc3NlcyIKLQkJICAgIHZhbHVlPSIqKi9zZXJ2bGV0LyouY2xhc3MiLz4KLQkgICAgPHBhcmFtICBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ0cnVlIi8+CisgICAgICAgICAgICB2YWx1ZT0iKiovY2xpZW50LyouY2xhc3MiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9Indhci5jbGFzc2VzIgorICAgICAgICAgICAgdmFsdWU9IioqL3NlcnZsZXQvKi5jbGFzcyIvPgorICAgICAgICA8cGFyYW0gIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InRydWUiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8amF2YWMKICAgICAgICAgICBzcmNkaXI9Ii4iCkBAIC0xMjEsNyArMTIxLDcgQEAKIAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWpkYmMtY29tbW9uIi8+Ci0JPGRlbGV0ZSBmaWxlPSJjbGllbnQvV2ViVGVzdC5jbGFzcyIvPgorICAgIDxkZWxldGUgZmlsZT0iY2xpZW50L1dlYlRlc3QuY2xhc3MiLz4KIAogICAgIDwvdGFyZ2V0PgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL211bHRpcGxldXNlcmNyZWRlbnRpYWxzL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9tdWx0aXBsZXVzZXJjcmVkZW50aWFscy9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbAppbmRleCA4NGU5MjAzLi5hYjMyN2NiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL211bHRpcGxldXNlcmNyZWRlbnRpYWxzL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvbXVsdGlwbGV1c2VyY3JlZGVudGlhbHMvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwKQEAgLTI4LDkgKzI4LDkgQEAKICAgICAgICAgPGVqYj5qZGJjLW11bHRpcGxldXNlcmNyZWRlbnRpYWxzLWVqYi5qYXI8L2VqYj4KICAgICA8L21vZHVsZT4KICAgICA8bW9kdWxlPgotCTx3ZWI+Ci0JICAgIDx3ZWItdXJpPmpkYmMtbXVsdGlwbGV1c2VyY3JlZGVudGlhbHMtd2ViLndhcjwvd2ViLXVyaT4KLQkgICAgPGNvbnRleHQtcm9vdD5qZGJjLW11bHRpcGxldXNlcmNyZWRlbnRpYWxzPC9jb250ZXh0LXJvb3Q+CisgICAgPHdlYj4KKyAgICAgICAgPHdlYi11cmk+amRiYy1tdWx0aXBsZXVzZXJjcmVkZW50aWFscy13ZWIud2FyPC93ZWItdXJpPgorICAgICAgICA8Y29udGV4dC1yb290PmpkYmMtbXVsdGlwbGV1c2VyY3JlZGVudGlhbHM8L2NvbnRleHQtcm9vdD4KICAgICAgICAgPC93ZWI+CiAgICAgPC9tb2R1bGU+CiA8L2FwcGxpY2F0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9tdWx0aXBsZXVzZXJjcmVkZW50aWFscy9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvbXVsdGlwbGV1c2VyY3JlZGVudGlhbHMvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEKaW5kZXggNjQxMjBiYS4uOTk4Mzc5YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9tdWx0aXBsZXVzZXJjcmVkZW50aWFscy9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL211bHRpcGxldXNlcmNyZWRlbnRpYWxzL3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhCkBAIC02OSwyMCArNjksMjAgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpZihwYXNzZWQpewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk11bHRpcGxlIFVzZXIgY3JlZGVudGlhbHMgdGVzdCA6IHRlc3QxIDogUEFTUyIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk11bHRpcGxlIFVzZXIgY3JlZGVudGlhbHMgdGVzdCA6IHRlc3QxIDogUEFTUyIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIlRFU1Q6UEFTUyIpOwotCX0gZWxzZSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTXVsdGlwbGUgVXNlciBjcmVkZW50aWFscyB0ZXN0IDogdGVzdDEgOiBGQUlMIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNdWx0aXBsZSBVc2VyIGNyZWRlbnRpYWxzIHRlc3QgOiB0ZXN0MSA6IEZBSUwiKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCJURVNUOkZBSUwiKTsKLQl9CisgICAgfQogCi0JfSBjYXRjaChOYW1pbmdFeGNlcHRpb24gbmUpIHsKLQkgICAgbmUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfSBjYXRjaChDcmVhdGVFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0gY2F0Y2goTmFtaW5nRXhjZXB0aW9uIG5lKSB7CisgICAgICAgIG5lLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0gY2F0Y2goQ3JlYXRlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfSBmaW5hbGx5IHsKLQkgICAgb3V0LnByaW50bG4oIkVORF9PRl9URVNUIik7Ci0JICAgIG91dC5mbHVzaCgpOwotCX0KKyAgICAgICAgb3V0LnByaW50bG4oIkVORF9PRl9URVNUIik7CisgICAgICAgIG91dC5mbHVzaCgpOworICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL211bHRpcGxldXNlcmNyZWRlbnRpYWxzL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvbXVsdGlwbGV1c2VyY3JlZGVudGlhbHMvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IDg3MDczY2EuLmE3MWRkOGEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvbXVsdGlwbGV1c2VyY3JlZGVudGlhbHMvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvbXVsdGlwbGV1c2VyY3JlZGVudGlhbHMvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDggKzEsOCBAQAotQ0FMTCBTWVNDU19VVElMLlNZU0NTX1NFVF9EQVRBQkFTRV9QUk9QRVJUWSgNCi0gICAgJ2RlcmJ5LnVzZXIuZGVyYnknLA0KLSAgICAnZGVyYnknKSAgICAgIDsNCi0NCi1DQUxMIFNZU0NTX1VUSUwuU1lTQ1NfU0VUX0RBVEFCQVNFX1BST1BFUlRZKA0KLSAgICAgICAgJ2RlcmJ5LnVzZXIuamF2YWRiJywNCi0gICAgICAgICdqYXZhZGInKSAgICAgOw0KLQ0KK0NBTEwgU1lTQ1NfVVRJTC5TWVNDU19TRVRfREFUQUJBU0VfUFJPUEVSVFkoCisgICAgJ2RlcmJ5LnVzZXIuZGVyYnknLAorICAgICdkZXJieScpICAgICAgOworCitDQUxMIFNZU0NTX1VUSUwuU1lTQ1NfU0VUX0RBVEFCQVNFX1BST1BFUlRZKAorICAgICAgICAnZGVyYnkudXNlci5qYXZhZGInLAorICAgICAgICAnamF2YWRiJykgICAgIDsKKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9vc2dpLWpkYmMtdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvb3NnaWpkYmNfdGVzdC9KREJDQWN0aXZhdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL29zZ2ktamRiYy10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9vc2dpamRiY190ZXN0L0pEQkNBY3RpdmF0b3IuamF2YQppbmRleCAwNDNmYmNiLi4yNDU5NDBhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL29zZ2ktamRiYy10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9vc2dpamRiY190ZXN0L0pEQkNBY3RpdmF0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL29zZ2ktamRiYy10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9vc2dpamRiY190ZXN0L0pEQkNBY3RpdmF0b3IuamF2YQpAQCAtNDEsNyArNDEsNyBAQAogICAgIHByaXZhdGUgdm9pZCB0ZXN0KCl7CiAKICAgICAgICAgdGVzdEpkYmNSZXNvdXJjZXMobnVsbCk7Ci0gICAgICAgIAorCiAgICAgICAgIHRlc3RKZGJjUmVzb3VyY2VzKCIob3NnaS5qZGJjLmRyaXZlci5jbGFzcz1vcmFjbGUuamRiYy5wb29sLk9yYWNsZURhdGFTb3VyY2UpIik7CiAgICAgICAgIHRlc3RKZGJjUmVzb3VyY2VzKCIob3NnaS5qZGJjLmRyaXZlci5jbGFzcz1vcmcuYXBhY2hlLmRlcmJ5LmpkYmMuRW1iZWRkZWRYQURhdGFTb3VyY2UpIik7CiAgICAgICAgIHRlc3RKZGJjUmVzb3VyY2VzKCIob3NnaS5qZGJjLmRyaXZlci5jbGFzcz1vcmcuYXBhY2hlLmRlcmJ5LmpkYmMuQ2xpZW50RGF0YVNvdXJjZSkiKTsKQEAgLTU5LDcgKzU5LDcgQEAKIAogICAgICAgICB0ZXN0SmRiY1Jlc291cmNlcygiKCYoam5kaS1uYW1lPWpkYmMvb3JhY2xlX3R5cGU0X3Jlc291cmNlKShvc2dpLmpkYmMuZHJpdmVyLmNsYXNzPW9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnREYXRhU291cmNlKSkiKTsKIAotICAgICAgICAKKwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCB0ZXN0SmRiY1Jlc291cmNlcyhTdHJpbmcgZmlsdGVyKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3Jlc0VuYWJsZURpc2FibGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvcmVzRW5hYmxlRGlzYWJsZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDEyMGRhMzUuLmY5YjIwOWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvcmVzRW5hYmxlRGlzYWJsZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvcmVzRW5hYmxlRGlzYWJsZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMSArMTUsMjEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InJlc0VuYWJsZURpc2FibGUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0icG9vbG5hbWUiIHZhbHVlPSJqZGJjLXJlc0VuYWJsZURpc2FibGUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvcmVzRW5hYmxlRGlzYWJsZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3Jlc0VuYWJsZURpc2FibGUvYnVpbGQueG1sCmluZGV4IGExZmQ5NmMuLjRmMDY1NTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvcmVzRW5hYmxlRGlzYWJsZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9yZXNFbmFibGVEaXNhYmxlL2J1aWxkLnhtbApAQCAtNTEsMTIgKzUxLDEyIEBACiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCi0JCSAgICB2YWx1ZT0iKiovZWpiLyouY2xhc3MiLz4KKyAgICAgICAgICAgIHZhbHVlPSIqKi9lamIvKi5jbGFzcyIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgotCQkgICAgdmFsdWU9IioqL2NsaWVudC8qLmNsYXNzIi8+Ci0JICAgIDxwYXJhbSBuYW1lPSJ3YXIuY2xhc3NlcyIKLQkJICAgIHZhbHVlPSIqKi9zZXJ2bGV0LyouY2xhc3MiLz4KLQkgICAgPHBhcmFtICBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ0cnVlIi8+CisgICAgICAgICAgICB2YWx1ZT0iKiovY2xpZW50LyouY2xhc3MiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9Indhci5jbGFzc2VzIgorICAgICAgICAgICAgdmFsdWU9IioqL3NlcnZsZXQvKi5jbGFzcyIvPgorICAgICAgICA8cGFyYW0gIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InRydWUiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8amF2YWMKICAgICAgICAgICBzcmNkaXI9Ii4iCkBAIC04NSw4ICs4NSw4IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1zdHVmZiIvPgotCTxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0JPGRlbGV0ZSBmaWxlPSJjbGllbnQvV2ViVGVzdC5jbGFzcyIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CisgICAgPGRlbGV0ZSBmaWxlPSJjbGllbnQvV2ViVGVzdC5jbGFzcyIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CkBAIC0xMjQsOCArMTI0LDggQEAKICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJjbGllbnQuV2ViVGVzdCI+CiAgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KICAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5wb3J0fSIvPgotCSAgICA8YXJnIHZhbHVlPSIke2NvbnRleHRyb290fSIvPgotCSAgICA8YXJnIHZhbHVlPSIke1RFU1QuRkFJTH0iLz4KKyAgICAgICAgPGFyZyB2YWx1ZT0iJHtjb250ZXh0cm9vdH0iLz4KKyAgICAgICAgPGFyZyB2YWx1ZT0iJHtURVNULkZBSUx9Ii8+CiAgICAgICAgICAgICA8Y2xhc3NwYXRoPgogICAgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiLz4KICAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249Ii4iLz4KQEAgLTEzOSw4ICsxMzksOCBAQAogICAgICAgICA8amF2YSBjbGFzc25hbWU9ImNsaWVudC5XZWJUZXN0Ij4KICAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLnBvcnR9Ii8+Ci0JICAgIDxhcmcgdmFsdWU9IiR7Y29udGV4dHJvb3R9Ii8+Ci0JICAgIDxhcmcgdmFsdWU9IiR7VEVTVC5QQVNTfSIvPgorICAgICAgICA8YXJnIHZhbHVlPSIke2NvbnRleHRyb290fSIvPgorICAgICAgICA8YXJnIHZhbHVlPSIke1RFU1QuUEFTU30iLz4KICAgICAgICAgICAgIDxjbGFzc3BhdGg+CiAgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIvPgogICAgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iLiIvPgpAQCAtMTQ5LDEzICsxNDksMTMgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCi0JCSAgICB2YWx1ZT0ic2VydmVycy5zZXJ2ZXIuc2VydmVyLnJlc291cmNlLXJlZi4ke3Jlc291cmNlbmFtZX0uZW5hYmxlZD1mYWxzZSIvPgorICAgICAgICAgICAgdmFsdWU9InNlcnZlcnMuc2VydmVyLnNlcnZlci5yZXNvdXJjZS1yZWYuJHtyZXNvdXJjZW5hbWV9LmVuYWJsZWQ9ZmFsc2UiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9ImNsaWVudC5XZWJUZXN0Ij4KICAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLnBvcnR9Ii8+Ci0JICAgIDxhcmcgdmFsdWU9IiR7Y29udGV4dHJvb3R9Ii8+Ci0JICAgIDxhcmcgdmFsdWU9IiR7VEVTVC5GQUlMfSIvPgorICAgICAgICA8YXJnIHZhbHVlPSIke2NvbnRleHRyb290fSIvPgorICAgICAgICA8YXJnIHZhbHVlPSIke1RFU1QuRkFJTH0iLz4KICAgICAgICAgICAgIDxjbGFzc3BhdGg+CiAgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIvPgogICAgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iLiIvPgpAQCAtMTY0LDEzICsxNjQsMTMgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCi0JCSAgICB2YWx1ZT0ic2VydmVycy5zZXJ2ZXIuc2VydmVyLnJlc291cmNlLXJlZi4ke3Jlc291cmNlbmFtZX0uZW5hYmxlZD10cnVlIi8+CisgICAgICAgICAgICB2YWx1ZT0ic2VydmVycy5zZXJ2ZXIuc2VydmVyLnJlc291cmNlLXJlZi4ke3Jlc291cmNlbmFtZX0uZW5hYmxlZD10cnVlIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJjbGllbnQuV2ViVGVzdCI+CiAgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KICAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5wb3J0fSIvPgotCSAgICA8YXJnIHZhbHVlPSIke2NvbnRleHRyb290fSIvPgotCSAgICA8YXJnIHZhbHVlPSIke1RFU1QuUEFTU30iLz4KKyAgICAgICAgPGFyZyB2YWx1ZT0iJHtjb250ZXh0cm9vdH0iLz4KKyAgICAgICAgPGFyZyB2YWx1ZT0iJHtURVNULlBBU1N9Ii8+CiAgICAgICAgICAgICA8Y2xhc3NwYXRoPgogICAgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiLz4KICAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249Ii4iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvcmVzRW5hYmxlRGlzYWJsZS9jbGllbnQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9yZXNFbmFibGVEaXNhYmxlL2NsaWVudC9XZWJUZXN0LmphdmEKaW5kZXggZmRmZGYzZi4uNjJmZWM1ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9yZXNFbmFibGVEaXNhYmxlL2NsaWVudC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9yZXNFbmFibGVEaXNhYmxlL2NsaWVudC9XZWJUZXN0LmphdmEKQEAgLTQzLDggKzQzLDggQEAKICAgICB9CiAKICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGdvR2V0KFN0cmluZyBob3N0LCBpbnQgcG9ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyByZXN1bHQsIFN0cmluZyBjb250ZXh0UGF0aCwgCi0JCQkgICAgICBTdHJpbmcgdGVzdFN0YXR1cykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJlc3VsdCwgU3RyaW5nIGNvbnRleHRQYXRoLAorICAgICAgICAgICAgICAgICAgU3RyaW5nIHRlc3RTdGF0dXMpIHsKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgbG9uZyB0aW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CkBAIC03NSwxMiArNzUsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5lcXVhbHNJZ25vcmVDYXNlKCJQQVNTIikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLQkJCWlmKCJGQUlMIi5lcXVhbHNJZ25vcmVDYXNlKHRlc3RTdGF0dXMpKSB7Ci0JCSAgICAgICAgICAgIC8vVGVzdCBpcyBzdXBwb3NlZCB0byBmYWlsIGhlbmNlIHBhc3NlZAotCQkgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7Ci0JCQl9IGVsc2UgeworICAgICAgICAgICAgaWYoIkZBSUwiLmVxdWFsc0lnbm9yZUNhc2UodGVzdFN0YXR1cykpIHsKKyAgICAgICAgICAgICAgICAgICAgLy9UZXN0IGlzIHN1cHBvc2VkIHRvIGZhaWwgaGVuY2UgcGFzc2VkCisgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwotCQkJfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3Jlc0VuYWJsZURpc2FibGUvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvcmVzRW5hYmxlRGlzYWJsZS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCmluZGV4IDI3YmJiYmYuLjc4ZGUxYTMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvcmVzRW5hYmxlRGlzYWJsZS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvcmVzRW5hYmxlRGlzYWJsZS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC0zMSwxNiArMzEsMTYgQEAKICAgICAgICAgICAgIDxlamItbmFtZT5TaW1wbGVCTVBFSkI8L2VqYi1uYW1lPgogICAgICAgICAgICAgPGxvY2FsLWhvbWU+Y29tLnN1bi5zMWFzZGV2LmpkYmMucmVzZW5hYmxlZGlzYWJsZS5lamIuU2ltcGxlQk1QSG9tZTwvbG9jYWwtaG9tZT4KICAgICAgICAgICAgIDxsb2NhbD5jb20uc3VuLnMxYXNkZXYuamRiYy5yZXNlbmFibGVkaXNhYmxlLmVqYi5TaW1wbGVCTVA8L2xvY2FsPgotCSAgICA8ZWpiLWNsYXNzPmNvbS5zdW4uczFhc2Rldi5qZGJjLnJlc2VuYWJsZWRpc2FibGUuZWpiLlNpbXBsZUJNUEJlYW48L2VqYi1jbGFzcz4KLQkgICAgPHNlc3Npb24tdHlwZT5TdGF0ZWxlc3M8L3Nlc3Npb24tdHlwZT4KLQkgICAgPHRyYW5zYWN0aW9uLXR5cGU+Q29udGFpbmVyPC90cmFuc2FjdGlvbi10eXBlPgotCSAgICA8IS0tPHBlcnNpc3RlbmNlLXR5cGU+QmVhbjwvcGVyc2lzdGVuY2UtdHlwZT4KKyAgICAgICAgPGVqYi1jbGFzcz5jb20uc3VuLnMxYXNkZXYuamRiYy5yZXNlbmFibGVkaXNhYmxlLmVqYi5TaW1wbGVCTVBCZWFuPC9lamItY2xhc3M+CisgICAgICAgIDxzZXNzaW9uLXR5cGU+U3RhdGVsZXNzPC9zZXNzaW9uLXR5cGU+CisgICAgICAgIDx0cmFuc2FjdGlvbi10eXBlPkNvbnRhaW5lcjwvdHJhbnNhY3Rpb24tdHlwZT4KKyAgICAgICAgPCEtLTxwZXJzaXN0ZW5jZS10eXBlPkJlYW48L3BlcnNpc3RlbmNlLXR5cGU+CiAgICAgICAgICAgICA8cHJpbS1rZXktY2xhc3M+amF2YS5sYW5nLkludGVnZXI8L3ByaW0ta2V5LWNsYXNzPgogICAgICAgICAgICAgPHJlZW50cmFudD5GYWxzZTwvcmVlbnRyYW50PgogICAgICAgICAgICAgPHNlY3VyaXR5LWlkZW50aXR5PgogICAgICAgICAgICAgICAgIDxkZXNjcmlwdGlvbj48L2Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgIDx1c2UtY2FsbGVyLWlkZW50aXR5PjwvdXNlLWNhbGxlci1pZGVudGl0eT4KLQk8L3NlY3VyaXR5LWlkZW50aXR5Pi0tPgorICAgIDwvc2VjdXJpdHktaWRlbnRpdHk+LS0+CiAgICAgICAgICAgICA8cmVzb3VyY2UtcmVmPgogICAgICAgICAgICAgICAgIDxyZXMtcmVmLW5hbWU+RGF0YVNvdXJjZTwvcmVzLXJlZi1uYW1lPgogICAgICAgICAgICAgICAgIDxyZXMtdHlwZT5qYXZheC5zcWwuRGF0YVNvdXJjZTwvcmVzLXR5cGU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3Jlc0VuYWJsZURpc2FibGUvZWpiL1NpbXBsZUJNUEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvcmVzRW5hYmxlRGlzYWJsZS9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCmluZGV4IDkwYTg2YTEuLjBiODMxY2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvcmVzRW5hYmxlRGlzYWJsZS9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvcmVzRW5hYmxlRGlzYWJsZS9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAgICAgcHJpdmF0ZSB0cmFuc2llbnQgamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQgbV9jdHggPSBudWxsOwogCiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgY29udGV4dCkgewotCW1fY3R4ID0gY29udGV4dDsKKyAgICBtX2N0eCA9IGNvbnRleHQ7CiAgICAgfQogCiAgICAgcHVibGljIEludGVnZXIgZWpiQ3JlYXRlKCkgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiB7CkBAIC0zNiw3ICszNiw3IEBACiAgICAgfQogCiAKLSAgIAorCiAvKiBHZXQgYSBzaW5nbGUgY29ubmVjdGlvbiBhbmQgY2xvc2UgaXQgKi8KICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0MSgpIHsKICAgICAgICAgQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKQEAgLTU3LDE0ICs1NywxNCBAQAogICAgICAgICAgICAgLy9lLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgcGFzc2VkID0gZmFsc2U7CiAgICAgICAgIH0gZmluYWxseSB7Ci0JICAgIGlmKGNvbm4gIT0gbnVsbCkgeworICAgICAgICBpZihjb25uICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICB0cnkgewotCQkgICAgY29ubi5jbG9zZSgpOwotCQl9IGNhdGNoKEV4Y2VwdGlvbiBleCkgewotCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGNlcHRpb24gaW4gY2xvc2luZyBjb25uZWN0aW9uIik7Ci0JCX0KKyAgICAgICAgICAgIGNvbm4uY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhjZXB0aW9uIGluIGNsb3NpbmcgY29ubmVjdGlvbiIpOworICAgICAgICB9CiAgICAgICAgICAgICB9Ci0JfQorICAgIH0KICAgICAgICAgcmV0dXJuIHBhc3NlZDsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvcmVzRW5hYmxlRGlzYWJsZS9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvcmVzRW5hYmxlRGlzYWJsZS9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YQppbmRleCBmNjdkZTViLi43MzgyMjFlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3Jlc0VuYWJsZURpc2FibGUvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9yZXNFbmFibGVEaXNhYmxlL3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhCkBAIC01NiwyMCArNTYsMjAgQEAKICAgICAgICAgLy9zdGF0LmFkZERlc2NyaXB0aW9uKCJSdW5uaW5nIHNlcmlhbGl6YWJsZSBjb25uZWN0b3IgdGVzdCAiKTsKICAgICAgICAgU2ltcGxlQk1QIGJlYW4gPSBzaW1wbGVCTVBIb21lLmNyZWF0ZSgpOwogCi0JICAgIGZvcihpbnQgaT0wOyBpPDM7IGkrKyl7CisgICAgICAgIGZvcihpbnQgaT0wOyBpPDM7IGkrKyl7CiAgICAgICAgICAgICAgICAgaWYoIWJlYW4udGVzdDEoKSl7CiAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJURVNUOkZBSUwiKTsKLQkgICAgICAgICAgICBicmVhazsKLQkgICAgICAgIH0KLQkgICAgfQotCSAgICBvdXQucHJpbnRsbigiVEVTVDpQQVNTIik7Ci0JfSBjYXRjaChOYW1pbmdFeGNlcHRpb24gbmUpIHsKLQkgICAgbmUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfSBjYXRjaChDcmVhdGVFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG91dC5wcmludGxuKCJURVNUOlBBU1MiKTsKKyAgICB9IGNhdGNoKE5hbWluZ0V4Y2VwdGlvbiBuZSkgeworICAgICAgICBuZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9IGNhdGNoKENyZWF0ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0gZmluYWxseSB7Ci0JICAgIG91dC5wcmludGxuKCJFTkRfT0ZfVEVTVCIpOwotCSAgICBvdXQuZmx1c2goKTsKLQl9CisgICAgICAgIG91dC5wcmludGxuKCJFTkRfT0ZfVEVTVCIpOworICAgICAgICBvdXQuZmx1c2goKTsKKyAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9yZXNFbmFibGVEaXNhYmxlL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvcmVzRW5hYmxlRGlzYWJsZS9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggZTQ5MTRmNi4uZjI1NjA3NiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9yZXNFbmFibGVEaXNhYmxlL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3Jlc0VuYWJsZURpc2FibGUvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDcgKzEsNyBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KLQ0KLUNSRUFURSBUQUJMRSBPX0N1c3RvbWVyICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOworCitDUkVBVEUgVEFCTEUgT19DdXN0b21lciAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3Jlc0VuYWJsZURpc2FibGUvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvcmVzRW5hYmxlRGlzYWJsZS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IGU0OTE0ZjYuLmYyNTYwNzYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvcmVzRW5hYmxlRGlzYWJsZS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvcmVzRW5hYmxlRGlzYWJsZS9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCkBAIC0xLDcgKzEsNyBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KLQ0KLUNSRUFURSBUQUJMRSBPX0N1c3RvbWVyICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQorRHJvcCB0YWJsZSBPX0N1c3RvbWVyOworCitDUkVBVEUgVEFCTEUgT19DdXN0b21lciAoCisgICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsCisgICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpCispOworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3NldHVwLWpkYmMtZGV2LXRlc3RzLnNoIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9zZXR1cC1qZGJjLWRldi10ZXN0cy5zaAppbmRleCA1NzI2MjQxLi5iYTlkNTIwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3NldHVwLWpkYmMtZGV2LXRlc3RzLnNoCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvc2V0dXAtamRiYy1kZXYtdGVzdHMuc2gKQEAgLTkyLDcgKzkyLDcgQEAKIAogI0NyZWF0ZSBQb29sL1Jlc291cmNlIGZvciBsYXp5LWNvbm5lY3Rpb24tYXNzb2NpYXRpb250ZXN0CiBlY2hvIENyZWF0aW5nIFBvb2wvUmVzb3VyY2UgTGF6eSBjb25uZWN0aW9uIGFzc29jaWF0aW9uIHRlc3QKLS4vYmluL2FzYWRtaW4gY3JlYXRlLWpkYmMtY29ubmVjdGlvbi1wb29sIC0tbWF4d2FpdD0xMCAtLWRhdGFzb3VyY2VjbGFzc25hbWU9b3JnLmFwYWNoZS5kZXJieS5qZGJjLkVtYmVkZGVkQ29ubmVjdGlvblBvb2xEYXRhU291cmNlIC0tcmVzdHlwZT1qYXZheC5zcWwuQ29ubmVjdGlvblBvb2xEYXRhU291cmNlICAtLWxhenljb25uZWN0aW9uZW5saXN0bWVudD10cnVlIC0tbGF6eWNvbm5lY3Rpb25hc3NvY2lhdGlvbj10cnVlIC0tcHJvcGVydHk9InBhc3N3b3JkPUFQUDp1c2VyPUFQUDpkYXRhYmFzZU5hbWU9c3VuLWFwcHNlcnYtc2FtcGxlczpjb25uZWN0aW9uQXR0cmlidXRlcz1cO2NyZWF0ZVxcPXRydWUiIGpkYmMtbGF6eS1hc3NvYy10ZXN0LXBvb2wgCisuL2Jpbi9hc2FkbWluIGNyZWF0ZS1qZGJjLWNvbm5lY3Rpb24tcG9vbCAtLW1heHdhaXQ9MTAgLS1kYXRhc291cmNlY2xhc3NuYW1lPW9yZy5hcGFjaGUuZGVyYnkuamRiYy5FbWJlZGRlZENvbm5lY3Rpb25Qb29sRGF0YVNvdXJjZSAtLXJlc3R5cGU9amF2YXguc3FsLkNvbm5lY3Rpb25Qb29sRGF0YVNvdXJjZSAgLS1sYXp5Y29ubmVjdGlvbmVubGlzdG1lbnQ9dHJ1ZSAtLWxhenljb25uZWN0aW9uYXNzb2NpYXRpb249dHJ1ZSAtLXByb3BlcnR5PSJwYXNzd29yZD1BUFA6dXNlcj1BUFA6ZGF0YWJhc2VOYW1lPXN1bi1hcHBzZXJ2LXNhbXBsZXM6Y29ubmVjdGlvbkF0dHJpYnV0ZXM9XDtjcmVhdGVcXD10cnVlIiBqZGJjLWxhenktYXNzb2MtdGVzdC1wb29sCiAuL2Jpbi9hc2FkbWluIGNyZWF0ZS1qZGJjLXJlc291cmNlIC0tY29ubmVjdGlvbnBvb2xpZD1qZGJjLWxhenktYXNzb2MtdGVzdC1wb29sIGpkYmMvamRiYy1sYXp5LWFzc29jLXRlc3QtcmVzb3VyY2UKIGVjaG8gIlxuIgogCkBAIC0xNTAsNyArMTUwLDcgQEAKIC4vYmluL2FzYWRtaW4gc3RhcnQtZG9tYWluCiBlY2hvICJcbiIKIAotc2xlZXAgNSAKK3NsZWVwIDUKIHdnZXQgaHR0cDovL2xvY2FsaG9zdDo4MDgwL3YzX2pkYmNfZGV2X3Rlc3RzL1Rlc3RSZXN1bHRTZXJ2bGV0IC1PICR0ZXN0UmVzdWx0MQogd2dldCBodHRwOi8vbG9jYWxob3N0OjgwODAvdjNfamRiY19kZXZfdGVzdHMvVGVzdFJlc3VsdFNlcnZsZXQ/dGVzdE5hbWU9bGF6eS1hc3NvYyAtTyAkdGVzdFJlc3VsdDIKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9zZXR1cC1qZGJjLXJlY29uZmlnLWRldi10ZXN0cy5zaCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvc2V0dXAtamRiYy1yZWNvbmZpZy1kZXYtdGVzdHMuc2gKaW5kZXggODlmNDc0Zi4uM2QyY2Q0NyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9zZXR1cC1qZGJjLXJlY29uZmlnLWRldi10ZXN0cy5zaAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3NldHVwLWpkYmMtcmVjb25maWctZGV2LXRlc3RzLnNoCkBAIC0zMyw3ICszMyw3IEBACiBjZCAkdjNob21lCiBlY2hvICJTdGFydGluZyBkb21haW4uLi4iCiAuL2Jpbi9hc2FkbWluIHN0YXJ0LWRvbWFpbgotc2xlZXAgMTAgCitzbGVlcCAxMAogZWNobyAiXG4iCiAKIGVjaG8gIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIKQEAgLTUyLDcgKzUyLDcgQEAKIGVjaG8gY3JlYXRlIHJlc291cmNlIGpkYmMvamRiYy1yZWNvbmZpZy10ZXN0LXJlc291cmNlLTEKIC4vYmluL2FzYWRtaW4gY3JlYXRlLWpkYmMtcmVzb3VyY2UgLS1jb25uZWN0aW9ucG9vbGlkPWpkYmMtcmVjb25maWctdGVzdC1wb29sLTEgamRiYy9qZGJjLXJlY29uZmlnLXRlc3QtcmVzb3VyY2UtMQogCi1lY2hvIGNyZWF0ZSBwb29sIGpkYmMtcmVjb25maWctdGVzdC1wb29sLTIgCitlY2hvIGNyZWF0ZSBwb29sIGpkYmMtcmVjb25maWctdGVzdC1wb29sLTIKIC4vYmluL2FzYWRtaW4gY3JlYXRlLWpkYmMtY29ubmVjdGlvbi1wb29sIC0tZGF0YXNvdXJjZWNsYXNzbmFtZT1vcmcuYXBhY2hlLmRlcmJ5LmpkYmMuRW1iZWRkZWRDb25uZWN0aW9uUG9vbERhdGFTb3VyY2UgLS1yZXN0eXBlPWphdmF4LnNxbC5Db25uZWN0aW9uUG9vbERhdGFTb3VyY2UgLS1wcm9wZXJ0eT0iUGFzc3dvcmQ9cnBhc3N3b3JkOlVzZXI9cnVzZXI6RGF0YWJhc2VOYW1lPSRkYXRhYmFzZXNob21lL3JlY29uZmlnLWRiOnNlcnZlck5hbWU9bG9jYWxob3N0IiBqZGJjLXJlY29uZmlnLXRlc3QtcG9vbC0yCiAKIGVjaG8gY3JlYXRlIHJlc291cmNlIGpkYmMvamRiYy1yZWNvbmZpZy10ZXN0LXJlc291cmNlLTIKQEAgLTgxLDcgKzgxLDcgQEAKIC4vYmluL2FzYWRtaW4gc2V0IHJlc291cmNlcy5qZGJjLWNvbm5lY3Rpb24tcG9vbC5qZGJjLWRldi10ZXN0LXBvb2wubWF4LXdhaXQtdGltZS1pbi1taWxsaXM9MTAwMAogCiBlY2hvICJcbkdFVCBodHRwOi8vbG9jYWxob3N0OjgwODAvdjNfamRiY19kZXZfdGVzdHMvUmVjb25maWdUZXN0U2VydmxldD9tYXhQb29sU2l6ZT00MFwmdGhyb3dFeGNlcHRpb249dHJ1ZVwmdGVzdElkPTEgXG4iCi1HRVQgaHR0cDovL2xvY2FsaG9zdDo4MDgwL3YzX2pkYmNfZGV2X3Rlc3RzL1JlY29uZmlnVGVzdFNlcnZsZXQ/bWF4UG9vbFNpemU9NDBcJnRocm93RXhjZXB0aW9uPXRydWVcJnRlc3RJZD0xID4gJHJlY29uZmlnUmVzdWx0IAorR0VUIGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC92M19qZGJjX2Rldl90ZXN0cy9SZWNvbmZpZ1Rlc3RTZXJ2bGV0P21heFBvb2xTaXplPTQwXCZ0aHJvd0V4Y2VwdGlvbj10cnVlXCZ0ZXN0SWQ9MSA+ICRyZWNvbmZpZ1Jlc3VsdAogZWNobyAiXG4iCiAKICNhc2FkbWluIHNldCBtYXgtcG9vbC1zaXplIHRvIDEwIGJlZm9yZSBydW5uaW5nIHRlc3QgZm9yIHRoZSBzZWNvbmQgdGltZQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9zdGF0ZW1lbnR0aW1lb3V0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3N0YXRlbWVudHRpbWVvdXQvYnVpbGQucHJvcGVydGllcwppbmRleCAzNGViOTY2Li40YTZhMjdhIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3N0YXRlbWVudHRpbWVvdXQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3N0YXRlbWVudHRpbWVvdXQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTcgKzE1LDE3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItYm1wLXN0YXRlbWVudHRpbWVvdXQiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIxMiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9zdGF0ZW1lbnR0aW1lb3V0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvc3RhdGVtZW50dGltZW91dC9idWlsZC54bWwKaW5kZXggZmNjNThlOC4uZTljZGY2YyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9zdGF0ZW1lbnR0aW1lb3V0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3N0YXRlbWVudHRpbWVvdXQvYnVpbGQueG1sCkBAIC0xOSwxMSArMTksMTEgQEAKIC0tPgogCiA8IUVOVElUWSBjb21tb25TZXR1cCBTWVNURU0gIi4vLi4vLi4vLi4vLi4vY29uZmlnL3Byb3BlcnRpZXMueG1sIj4KLQk8IUVOVElUWSBjb21tb25CdWlsZCBTWVNURU0gIi4vLi4vLi4vLi4vLi4vY29uZmlnL2NvbW1vbi54bWwiPgorICAgIDwhRU5USVRZIGNvbW1vbkJ1aWxkIFNZU1RFTSAiLi8uLi8uLi8uLi8uLi9jb25maWcvY29tbW9uLnhtbCI+CiAgICAgICAgIDwhRU5USVRZIHRlc3Rwcm9wZXJ0aWVzIFNZU1RFTSAiLi9idWlsZC5wcm9wZXJ0aWVzIj4KLQk8IUVOVElUWSBydW4gU1lTVEVNICIuLy4uLy4uLy4uLy4uL2NvbmZpZy9ydW4ueG1sIj4KLQk8IUVOVElUWSBlZVNldHVwIFNZU1RFTSAiLi8uLi8uLi9jb25maWcvZWUtY29tbW9uLnhtbCI+Ci0JPCFFTlRJVFkgZWVQcm9wZXJ0aWVzIFNZU1RFTSAiLi8uLi8uLi9jb25maWcvZWUtcHJvcGVydGllcy54bWwiPgorICAgIDwhRU5USVRZIHJ1biBTWVNURU0gIi4vLi4vLi4vLi4vLi4vY29uZmlnL3J1bi54bWwiPgorICAgIDwhRU5USVRZIGVlU2V0dXAgU1lTVEVNICIuLy4uLy4uL2NvbmZpZy9lZS1jb21tb24ueG1sIj4KKyAgICA8IUVOVElUWSBlZVByb3BlcnRpZXMgU1lTVEVNICIuLy4uLy4uL2NvbmZpZy9lZS1wcm9wZXJ0aWVzLnhtbCI+CiAgICAgICAgIF0+CiAKIDxwcm9qZWN0IG5hbWU9Im1peCIgZGVmYXVsdD0idXNhZ2UiIGJhc2VkaXI9Ii4iPgpAQCAtNTYsMjggKzU2LDI4IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLQk8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0idHJ1ZSIvPgorICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ0cnVlIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZWpiLWphci1jb21tb24iPgotCSAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+Ci0JPC9hbnRjYWxsPgorICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CisgICAgPC9hbnRjYWxsPgogCi0JPGRlbGV0ZSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS5lYXIiLz4KKyAgICA8ZGVsZXRlIGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LmVhciIvPgogICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KIAogICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgogCi0gICAgICAgIDxlYXIgZWFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIiAKLQkgICAgIGFwcHhtbD0iJHthcHBsaWNhdGlvbi54bWx9Ij4KLQkgICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KLQkgICAgICAgIDxpbmNsdWRlIG5hbWU9IiouamFyIi8+Ci0JICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLndhciIvPgotCSAgICAgPC9maWxlc2V0PgotCTwvZWFyPgorICAgICAgICA8ZWFyIGVhcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIKKyAgICAgICAgIGFwcHhtbD0iJHthcHBsaWNhdGlvbi54bWx9Ij4KKyAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KKyAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IiouamFyIi8+CisgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLndhciIvPgorICAgICAgICAgPC9maWxlc2V0PgorICAgIDwvZWFyPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTkyLDcgKzkyLDcgQEAKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iJHtyZXNvdXJjZXMuZG90dGVkbmFtZS5wcmVmaXh9LmpkYmMtY29ubmVjdGlvbi1wb29sLnFsLWpkYmMtcG9vbC5zdGF0ZW1lbnRfdGltZW91dF9pbl9zZWNvbmRzPTMwIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAotCTwhLS08YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1wZXJzaXN0ZW5jZS1yZXNvdXJjZS1jb21tb24iLz4tLT4KKyAgICA8IS0tPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtcGVyc2lzdGVuY2UtcmVzb3VyY2UtY29tbW9uIi8+LS0+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgogCkBAIC0xMDUsOCArMTA1LDggQEAKIAogICAgIDx0YXJnZXQgbmFtZT0icnVuLXRlc3QtMSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bndlYmNsaWVudC1jb21tb24iPgotICAJICAgIDxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJ3ZWItdG8tZWpiIChlYXIgYmFzZWQpIi8+Ci0JPC9hbnRjYWxsPgorICAgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJ3ZWItdG8tZWpiIChlYXIgYmFzZWQpIi8+CisgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtMTE0LDcgKzExNCw3IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAotCTwhLS08YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1wZXJzaXN0ZW5jZS1yZXNvdXJjZS1jb21tb24iLz4tLT4KKyAgICA8IS0tPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtcGVyc2lzdGVuY2UtcmVzb3VyY2UtY29tbW9uIi8+LS0+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamRiYy1jb21tb24iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvc3RhdGVtZW50dGltZW91dC9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvc3RhdGVtZW50dGltZW91dC9zZXJ2bGV0L1NpbXBsZVNlcnZsZXQuamF2YQppbmRleCA2OWYxMTcxLi5kODA3ZTQ3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3N0YXRlbWVudHRpbWVvdXQvc2VydmxldC9TaW1wbGVTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9zdGF0ZW1lbnR0aW1lb3V0L3NlcnZsZXQvU2ltcGxlU2VydmxldC5qYXZhCkBAIC01NiwzNiArNTYsMzYgQEAKICAgICAgICAgU2ltcGxlQk1QIHNpbXBsZUJNUCA9IHNpbXBsZUJNUEhvbWUuY3JlYXRlKCk7CiAKICAgICAgICAgaWYgKHNpbXBsZUJNUC5zdGF0ZW1lbnRUZXN0KCkpIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZW1lbnQgVGltZW91dCB0ZXN0IDogc3RhdGVtZW50VGVzdCA6IFBBU1MiKTsKLQkgICAgb3V0LnByaW50bG4oIlRFU1Q6UEFTUyIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlbWVudCBUaW1lb3V0IHRlc3QgOiBzdGF0ZW1lbnRUZXN0IDogUEFTUyIpOworICAgICAgICBvdXQucHJpbnRsbigiVEVTVDpQQVNTIik7CiAgICAgICAgIH0gZWxzZSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVtZW50IFRpbWVvdXQgdGVzdCA6IHN0YXRlbWVudFRlc3QgOiBGQUlMIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVtZW50IFRpbWVvdXQgdGVzdCA6IHN0YXRlbWVudFRlc3QgOiBGQUlMIik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiVEVTVDpGQUlMIik7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoc2ltcGxlQk1QLnByZXBhcmVkU3RhdGVtZW50VGVzdCgpKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVtZW50IFRpbWVvdXQgdGVzdCA6IHByZXBhcmVkU3RhdGVtZW50VGVzdCA6IFBBU1MiKTsKLQkgICAgb3V0LnByaW50bG4oIlRFU1Q6UEFTUyIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlbWVudCBUaW1lb3V0IHRlc3QgOiBwcmVwYXJlZFN0YXRlbWVudFRlc3QgOiBQQVNTIik7CisgICAgICAgIG91dC5wcmludGxuKCJURVNUOlBBU1MiKTsKICAgICAgICAgfSBlbHNlIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZW1lbnQgVGltZW91dCB0ZXN0IDogcHJlcGFyZWRTdGF0ZW1lbnRUZXN0IDogRkFJTCIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlbWVudCBUaW1lb3V0IHRlc3QgOiBwcmVwYXJlZFN0YXRlbWVudFRlc3QgOiBGQUlMIik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiVEVTVDpGQUlMIik7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoc2ltcGxlQk1QLmNhbGxhYmxlU3RhdGVtZW50VGVzdCgpKSB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGVtZW50IFRpbWVvdXQgdGVzdCA6IGNhbGxhYmxlU3RhdGVtZW50VGVzdCA6IFBBU1MiKTsKLQkgICAgb3V0LnByaW50bG4oIlRFU1Q6UEFTUyIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlbWVudCBUaW1lb3V0IHRlc3QgOiBjYWxsYWJsZVN0YXRlbWVudFRlc3QgOiBQQVNTIik7CisgICAgICAgIG91dC5wcmludGxuKCJURVNUOlBBU1MiKTsKICAgICAgICAgfSBlbHNlIHsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZW1lbnQgVGltZW91dCB0ZXN0IDogY2FsbGFibGVTdGF0ZW1lbnRUZXN0IDogRkFJTCIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0YXRlbWVudCBUaW1lb3V0IHRlc3QgOiBjYWxsYWJsZVN0YXRlbWVudFRlc3QgOiBGQUlMIik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiVEVTVDpGQUlMIik7CiAgICAgICAgIH0KIAotCX0gY2F0Y2goTmFtaW5nRXhjZXB0aW9uIG5lKSB7Ci0JICAgIG5lLnByaW50U3RhY2tUcmFjZSgpOwotCX0gY2F0Y2goQ3JlYXRlRXhjZXB0aW9uIGUpIHsKLQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9IGNhdGNoKE5hbWluZ0V4Y2VwdGlvbiBuZSkgeworICAgICAgICBuZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9IGNhdGNoKENyZWF0ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0gZmluYWxseSB7Ci0JICAgIG91dC5wcmludGxuKCJFTkRfT0ZfVEVTVCIpOwotCSAgICBvdXQuZmx1c2goKTsKLQl9CisgICAgICAgIG91dC5wcmludGxuKCJFTkRfT0ZfVEVTVCIpOworICAgICAgICBvdXQuZmx1c2goKTsKKyAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9zdGF0ZW1lbnR0aW1lb3V0L3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvc3RhdGVtZW50dGltZW91dC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKaW5kZXggZGQ0YzVlNS4uMTFlNjFlZSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My9zdGF0ZW1lbnR0aW1lb3V0L3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3N0YXRlbWVudHRpbWVvdXQvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCkBAIC0xLDEwICsxLDEwIEBACi0NCi1Ecm9wIHRhYmxlIGN1c3RvbWVyX3N0bXRfd3JhcHBlcjsNCi0NCi1DUkVBVEUgVEFCTEUgY3VzdG9tZXJfc3RtdF93cmFwcGVyICgNCi0gICAgY19pZCAgICAgICAgICAgIGludGVnZXIgbm90IG51bGwsDQotICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQ0KLSk7DQotDQotSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyIFZBTFVFUygxLCAnd3h5eicpOw0KKworRHJvcCB0YWJsZSBjdXN0b21lcl9zdG10X3dyYXBwZXI7CisKK0NSRUFURSBUQUJMRSBjdXN0b21lcl9zdG10X3dyYXBwZXIgKAorICAgIGNfaWQgICAgICAgICAgICBpbnRlZ2VyIG5vdCBudWxsLAorICAgIGNfcGhvbmUgICAgICAgICBjaGFyKDE2KQorKTsKKworSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyIFZBTFVFUygxLCAnd3h5eicpOwogSU5TRVJUIElOVE8gY3VzdG9tZXJfc3RtdF93cmFwcGVyIFZBTFVFUygyLCAncHFycycpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdW5zZXR1cC1qZGJjLWRldi10ZXN0cy5zaCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdW5zZXR1cC1qZGJjLWRldi10ZXN0cy5zaAppbmRleCAzNjU5YzI2Li40NzI3YjBmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3Vuc2V0dXAtamRiYy1kZXYtdGVzdHMuc2gKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My91bnNldHVwLWpkYmMtZGV2LXRlc3RzLnNoCkBAIC0yMCw3ICsyMCw3IEBACiBjZCAkdjNob21lCiAKIGVjaG8gU3RhcnRpbmcgdGhlIGRvbWFpbiAuLi4KLS4vYmluL2FzYWRtaW4gc3RhcnQtZG9tYWluIAorLi9iaW4vYXNhZG1pbiBzdGFydC1kb21haW4KIAogZWNobyB1bmRlcGxveWluZyBhcHBsaWNhdGlvbiAuLi4uLgogLi9iaW4vYXNhZG1pbiB1bmRlcGxveSB2M19qZGJjX2Rldl90ZXN0cwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL2J1aWxkLnhtbAppbmRleCBkNjFkZDRhLi4zYjQzMDk4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL2J1aWxkLnhtbApAQCAtMjUsMjcgKzI1LDI3IEBACiAgICAgPGltcG9ydCBmaWxlPSJuYnByb2plY3QvYnVpbGQtaW1wbC54bWwiLz4KICAgICA8IS0tCiAKLSAgICBUaGVyZSBleGlzdCBzZXZlcmFsIHRhcmdldHMgd2hpY2ggYXJlIGJ5IGRlZmF1bHQgZW1wdHkgYW5kIHdoaWNoIGNhbiBiZSAKLSAgICB1c2VkIGZvciBleGVjdXRpb24gb2YgeW91ciB0YXNrcy4gVGhlc2UgdGFyZ2V0cyBhcmUgdXN1YWxseSBleGVjdXRlZCAKLSAgICBiZWZvcmUgYW5kIGFmdGVyIHNvbWUgbWFpbiB0YXJnZXRzLiBUaGV5IGFyZTogCisgICAgVGhlcmUgZXhpc3Qgc2V2ZXJhbCB0YXJnZXRzIHdoaWNoIGFyZSBieSBkZWZhdWx0IGVtcHR5IGFuZCB3aGljaCBjYW4gYmUKKyAgICB1c2VkIGZvciBleGVjdXRpb24gb2YgeW91ciB0YXNrcy4gVGhlc2UgdGFyZ2V0cyBhcmUgdXN1YWxseSBleGVjdXRlZAorICAgIGJlZm9yZSBhbmQgYWZ0ZXIgc29tZSBtYWluIHRhcmdldHMuIFRoZXkgYXJlOgogCi0gICAgICAtcHJlLWluaXQ6ICAgICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGluaXRpYWxpemF0aW9uIG9mIHByb2plY3QgcHJvcGVydGllcyAKLSAgICAgIC1wb3N0LWluaXQ6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBpbml0aWFsaXphdGlvbiBvZiBwcm9qZWN0IHByb3BlcnRpZXMgCi0gICAgICAtcHJlLWNvbXBpbGU6ICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGphdmFjIGNvbXBpbGF0aW9uIAotICAgICAgLXBvc3QtY29tcGlsZTogICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGphdmFjIGNvbXBpbGF0aW9uIAorICAgICAgLXByZS1pbml0OiAgICAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBpbml0aWFsaXphdGlvbiBvZiBwcm9qZWN0IHByb3BlcnRpZXMKKyAgICAgIC1wb3N0LWluaXQ6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBpbml0aWFsaXphdGlvbiBvZiBwcm9qZWN0IHByb3BlcnRpZXMKKyAgICAgIC1wcmUtY29tcGlsZTogICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgamF2YWMgY29tcGlsYXRpb24KKyAgICAgIC1wb3N0LWNvbXBpbGU6ICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBqYXZhYyBjb21waWxhdGlvbgogICAgICAgLXByZS1jb21waWxlLXNpbmdsZTogICAgICAgY2FsbGVkIGJlZm9yZSBqYXZhYyBjb21waWxhdGlvbiBvZiBzaW5nbGUgZmlsZQogICAgICAgLXBvc3QtY29tcGlsZS1zaW5nbGU6ICAgICAgY2FsbGVkIGFmdGVyIGphdmFjIGNvbXBpbGF0aW9uIG9mIHNpbmdsZSBmaWxlCiAgICAgICAtcHJlLWNvbXBpbGUtdGVzdDogICAgICAgICBjYWxsZWQgYmVmb3JlIGphdmFjIGNvbXBpbGF0aW9uIG9mIEpVbml0IHRlc3RzCiAgICAgICAtcG9zdC1jb21waWxlLXRlc3Q6ICAgICAgICBjYWxsZWQgYWZ0ZXIgamF2YWMgY29tcGlsYXRpb24gb2YgSlVuaXQgdGVzdHMKICAgICAgIC1wcmUtY29tcGlsZS10ZXN0LXNpbmdsZTogIGNhbGxlZCBiZWZvcmUgamF2YWMgY29tcGlsYXRpb24gb2Ygc2luZ2xlIEpVbml0IHRlc3QKICAgICAgIC1wb3N0LWNvbXBpbGUtdGVzdC1zaW5nbGU6IGNhbGxlZCBhZnRlciBqYXZhYyBjb21waWxhdGlvbiBvZiBzaW5nbGUgSlV1bml0IHRlc3QKLSAgICAgIC1wcmUtZGlzdDogICAgICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgYXJjaGl2ZSBidWlsZGluZyAKLSAgICAgIC1wb3N0LWRpc3Q6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBhcmNoaXZlIGJ1aWxkaW5nIAotICAgICAgLXBvc3QtY2xlYW46ICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGNsZWFuaW5nIGJ1aWxkIHByb2R1Y3RzIAorICAgICAgLXByZS1kaXN0OiAgICAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBhcmNoaXZlIGJ1aWxkaW5nCisgICAgICAtcG9zdC1kaXN0OiAgICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgYXJjaGl2ZSBidWlsZGluZworICAgICAgLXBvc3QtY2xlYW46ICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGNsZWFuaW5nIGJ1aWxkIHByb2R1Y3RzCiAgICAgICAtcHJlLXJ1bi1kZXBsb3k6ICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGRlcGxveWluZwogICAgICAgLXBvc3QtcnVuLWRlcGxveTogICAgICAgICAgY2FsbGVkIGFmdGVyIGRlcGxveWluZwogCi0gICAgRXhhbXBsZSBvZiBwbHVnaW5nIGFuIG9iZnVzY2F0b3IgYWZ0ZXIgdGhlIGNvbXBpbGF0aW9uIGNvdWxkIGxvb2sgbGlrZSAKKyAgICBFeGFtcGxlIG9mIHBsdWdpbmcgYW4gb2JmdXNjYXRvciBhZnRlciB0aGUgY29tcGlsYXRpb24gY291bGQgbG9vayBsaWtlCiAKICAgICAgICAgPHRhcmdldCBuYW1lPSItcG9zdC1jb21waWxlIj4KICAgICAgICAgICAgIDxvYmZ1c2NhdGU+CkBAIC01MywyMSArNTMsMjEgQEAKICAgICAgICAgICAgIDwvb2JmdXNjYXRlPgogICAgICAgICA8L3RhcmdldD4KIAotICAgIEZvciBsaXN0IG9mIGF2YWlsYWJsZSBwcm9wZXJ0aWVzIGNoZWNrIHRoZSBpbXBvcnRlZCAKLSAgICBuYnByb2plY3QvYnVpbGQtaW1wbC54bWwgZmlsZS4gCisgICAgRm9yIGxpc3Qgb2YgYXZhaWxhYmxlIHByb3BlcnRpZXMgY2hlY2sgdGhlIGltcG9ydGVkCisgICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuCiAKIAogICAgIE90aGVyIHdheSBob3cgdG8gY3VzdG9taXplIHRoZSBidWlsZCBpcyBieSBvdmVycmlkaW5nIGV4aXN0aW5nIG1haW4gdGFyZ2V0cy4KLSAgICBUaGUgdGFyZ2V0IG9mIGludGVyZXN0IGFyZTogCisgICAgVGhlIHRhcmdldCBvZiBpbnRlcmVzdCBhcmU6CiAKICAgICAgIGluaXQtbWFjcm9kZWYtamF2YWM6ICAgIGRlZmluZXMgbWFjcm8gZm9yIGphdmFjIGNvbXBpbGF0aW9uCiAgICAgICBpbml0LW1hY3JvZGVmLWp1bml0OiAgIGRlZmluZXMgbWFjcm8gZm9yIGp1bml0IGV4ZWN1dGlvbgogICAgICAgaW5pdC1tYWNyb2RlZi1kZWJ1ZzogICAgZGVmaW5lcyBtYWNybyBmb3IgY2xhc3MgZGVidWdnaW5nCiAgICAgICBkby1kaXN0OiAgICAgICAgICAgICAgICBhcmNoaXZlIGJ1aWxkaW5nCi0gICAgICBydW46ICAgICAgICAgICAgICAgICAgICBleGVjdXRpb24gb2YgcHJvamVjdCAKLSAgICAgIGphdmFkb2MtYnVpbGQ6ICAgICAgICAgIGphdmFkb2MgZ2VuZXJhdGlvbiAKKyAgICAgIHJ1bjogICAgICAgICAgICAgICAgICAgIGV4ZWN1dGlvbiBvZiBwcm9qZWN0CisgICAgICBqYXZhZG9jLWJ1aWxkOiAgICAgICAgICBqYXZhZG9jIGdlbmVyYXRpb24KIAotICAgIEV4YW1wbGUgb2Ygb3ZlcnJpZGluZyB0aGUgdGFyZ2V0IGZvciBwcm9qZWN0IGV4ZWN1dGlvbiBjb3VsZCBsb29rIGxpa2UgCisgICAgRXhhbXBsZSBvZiBvdmVycmlkaW5nIHRoZSB0YXJnZXQgZm9yIHByb2plY3QgZXhlY3V0aW9uIGNvdWxkIGxvb2sgbGlrZQogCiAgICAgICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSI8UFJPSk5BTUU+LWltcGwuamFyIj4KICAgICAgICAgICAgIDxleGVjIGRpcj0iYmluIiBleGVjdXRhYmxlPSJsYXVuY2hlci5leGUiPgpAQCAtNzUsMTAgKzc1LDEwIEBACiAgICAgICAgICAgICA8L2V4ZWM+CiAgICAgICAgIDwvdGFyZ2V0PgogCi0gICAgTm90aWNlIHRoYXQgb3ZlcnJpZGRlbiB0YXJnZXQgZGVwZW5kcyBvbiBqYXIgdGFyZ2V0IGFuZCBub3Qgb25seSBvbiAKLSAgICBjb21waWxlIHRhcmdldCBhcyByZWd1bGFyIHJ1biB0YXJnZXQgZG9lcy4gQWdhaW4sIGZvciBsaXN0IG9mIGF2YWlsYWJsZSAKLSAgICBwcm9wZXJ0aWVzIHdoaWNoIHlvdSBjYW4gdXNlIGNoZWNrIHRoZSB0YXJnZXQgeW91IGFyZSBvdmVycmlkaW5nIGluIAotICAgIG5icHJvamVjdC9idWlsZC1pbXBsLnhtbCBmaWxlLiAKKyAgICBOb3RpY2UgdGhhdCBvdmVycmlkZGVuIHRhcmdldCBkZXBlbmRzIG9uIGphciB0YXJnZXQgYW5kIG5vdCBvbmx5IG9uCisgICAgY29tcGlsZSB0YXJnZXQgYXMgcmVndWxhciBydW4gdGFyZ2V0IGRvZXMuIEFnYWluLCBmb3IgbGlzdCBvZiBhdmFpbGFibGUKKyAgICBwcm9wZXJ0aWVzIHdoaWNoIHlvdSBjYW4gdXNlIGNoZWNrIHRoZSB0YXJnZXQgeW91IGFyZSBvdmVycmlkaW5nIGluCisgICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuCiAKICAgICAtLT4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvbmJwcm9qZWN0L2FudC1kZXBsb3kueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9uYnByb2plY3QvYW50LWRlcGxveS54bWwKaW5kZXggYWJjNWQzYy4uNzBjOGE3NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9uYnByb2plY3QvYW50LWRlcGxveS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9uYnByb2plY3QvYW50LWRlcGxveS54bWwKQEAgLTI1LDcgKzI1LDcgQEAKICAgICAgICAgPHRlbXBmaWxlIHByZWZpeD0ic2pzYXMiIHByb3BlcnR5PSJzanNhcy5wYXNzd29yZC5maWxlIiBkZXN0ZGlyPSIke2phdmEuaW8udG1wZGlyfSIvPiAgPCEtLSBkbyBub3QgZm9yZ2V0IHRvIGRlbGV0ZSB0aGlzISAtLT4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iQVNfQURNSU5fUEFTU1dPUkQ9JHtzanNhcy5wYXNzd29yZH0iIGZpbGU9IiR7c2pzYXMucGFzc3dvcmQuZmlsZX0iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iLXBhcnNlLXN1bi13ZWIiIGRlcGVuZHM9Ii1pbml0LWNsLWRlcGxveW1lbnQtZW52IiBpZj0ic3VuLndlYi5wcmVzZW50Ij4KICAgICAgICAgPHRlbXBmaWxlIHByZWZpeD0ic2pzYXMiIHByb3BlcnR5PSJ0ZW1wLnN1bi53ZWIiIGRlc3RkaXI9IiR7amF2YS5pby50bXBkaXJ9Ii8+CiAgICAgICAgIDxjb3B5IGZpbGU9IiR7ZGVwbG95LmFudC5kb2NiYXNlLmRpcn0vV0VCLUlORi9zdW4td2ViLnhtbCIgdG9maWxlPSIke3RlbXAuc3VuLndlYn0iLz4KQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgICAgIDxyZXBsYWNldmFsdWU+PCFbQ0RBVEFbLS0+IDxzdW4td2ViLWFwcF1dPjwvcmVwbGFjZXZhbHVlPgogICAgICAgICA8L3JlcGxhY2U+CiAgICAgICAgIDx4bWxwcm9wZXJ0eSBmaWxlPSIke3RlbXAuc3VuLndlYn0iIHZhbGlkYXRlPSJmYWxzZSI+Ci0gICAgICAgIDwveG1scHJvcGVydHk+ICAgIAorICAgICAgICA8L3htbHByb3BlcnR5PgogICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7dGVtcC5zdW4ud2VifSIvPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0iZGVwbG95LmFudC5jbGllbnQudXJsIiB2YWx1ZT0iJHtzanNhcy51cmx9JHtzdW4td2ViLWFwcC5jb250ZXh0LXJvb3R9Ii8+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL25icHJvamVjdC9idWlsZC1pbXBsLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sCmluZGV4IGViYzBkZTUuLjMxZTBlOTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sCkBAIC02ODYsNyArNjg2LDcgQEAKICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQsamF2YWRvYy1idWlsZCxqYXZhZG9jLWJyb3dzZSIgZGVzY3JpcHRpb249IkJ1aWxkIEphdmFkb2MuIiBuYW1lPSJqYXZhZG9jIi8+CiAgICAgPCEtLQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgSlVOSVQgQ09NUElMQVRJT04gU0VDVElPTgogICAgICAgICAgICAgLS0+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0LGNvbXBpbGUiIGlmPSJoYXZlLnRlc3RzIiBuYW1lPSItcHJlLXByZS1jb21waWxlLXRlc3QiPgpAQCAtNzI4LDcgKzcyOCw3IEBACiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0LGNvbXBpbGUsLXByZS1wcmUtY29tcGlsZS10ZXN0LC1wcmUtY29tcGlsZS10ZXN0LXNpbmdsZSwtZG8tY29tcGlsZS10ZXN0LXNpbmdsZSwtcG9zdC1jb21waWxlLXRlc3Qtc2luZ2xlIiBuYW1lPSJjb21waWxlLXRlc3Qtc2luZ2xlIi8+CiAgICAgPCEtLQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgSlVOSVQgRVhFQ1VUSU9OIFNFQ1RJT04KICAgICAgICAgICAgIC0tPgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCIgaWY9ImhhdmUudGVzdHMiIG5hbWU9Ii1wcmUtdGVzdC1ydW4iPgpAQCAtNzU1LDcgKzc1NSw3IEBACiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0LGNvbXBpbGUtdGVzdC1zaW5nbGUsLXByZS10ZXN0LXJ1bi1zaW5nbGUsLWRvLXRlc3QtcnVuLXNpbmdsZSwtcG9zdC10ZXN0LXJ1bi1zaW5nbGUiIGRlc2NyaXB0aW9uPSJSdW4gc2luZ2xlIHVuaXQgdGVzdC4iIG5hbWU9InRlc3Qtc2luZ2xlIi8+CiAgICAgPCEtLQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgSlVOSVQgREVCVUdHSU5HIFNFQ1RJT04KICAgICAgICAgICAgIC0tPgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCxjb21waWxlLXRlc3QiIGlmPSJoYXZlLnRlc3RzIiBuYW1lPSItZGVidWctc3RhcnQtZGVidWdnZWUtdGVzdCI+CkBAIC03ODEsNyArNzgxLDcgQEAKICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQsLXByZS1kZWJ1Zy1maXgsLWRvLWRlYnVnLWZpeC10ZXN0IiBpZj0ibmV0YmVhbnMuaG9tZSIgbmFtZT0iZGVidWctZml4LXRlc3QiLz4KICAgICA8IS0tCi0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBDTEVBTlVQIFNFQ1RJT04KICAgICAgICAgICAgIC0tPgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCIgaWY9Im5vLmRpc3QuZWFyLmRpciIgbmFtZT0iZGVwcy1jbGVhbiIgdW5sZXNzPSJuby5kZXBzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL3NyYy9qYXZhL29yZy9nbGFzc2Zpc2gvamRiYy9kZXZ0ZXN0cy92My9UZXN0UmVzdWx0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9zcmMvamF2YS9vcmcvZ2xhc3NmaXNoL2pkYmMvZGV2dGVzdHMvdjMvVGVzdFJlc3VsdFNlcnZsZXQuamF2YQppbmRleCA5ZTkyNDA2Li45Zjg3ZmU5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL3NyYy9qYXZhL29yZy9nbGFzc2Zpc2gvamRiYy9kZXZ0ZXN0cy92My9UZXN0UmVzdWx0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvc3JjL2phdmEvb3JnL2dsYXNzZmlzaC9qZGJjL2RldnRlc3RzL3YzL1Rlc3RSZXN1bHRTZXJ2bGV0LmphdmEKQEAgLTEyNCw3ICsxMjQsNyBAQAogICAgICAgICAgICAgICAgICAgICBidWYuYXBwZW5kKCI8dGQ+Iik7CiAgICAgICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQoZW50cnkuZ2V0VmFsdWUoKSk7CiAgICAgICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQoIjwvdGQ+PC90cj4iKTsKLSAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIC8vUnVuIEFwcGxpY2F0aW9uIEF1dGhlbnRpY2F0aW9uIFRlc3QKICAgICAgICAgICAgICAgICBNYXA8U3RyaW5nLCBCb29sZWFuPiBtYXBBcHBBdXRoID0KQEAgLTE3Miw3ICsxNzIsNyBAQAogICAgICAgICAgICAgICAgICAgICBidWYuYXBwZW5kKCI8dGQ+Iik7CiAgICAgICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQoZW50cnkuZ2V0VmFsdWUoKSk7CiAgICAgICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQoIjwvdGQ+PC90cj4iKTsKLSAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgIH0KIAogCiAgICAgICAgICAgICAgICAgLy9SdW4gU2ltcGxlWEFEUyB0ZXN0CkBAIC0xOTgsNyArMTk4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQoZW50cnkuZ2V0VmFsdWUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBidWYuYXBwZW5kKCI8L3RkPjwvdHI+Iik7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAvL09yZGVyIG9mIHRlc3QgaXMgaW1wb3J0YW50IDogbGF6eSBlbmxpc3QgaGFzIHRvIGJlIGJlZm9yZSBjb25uZWN0aW9uIGxlYWsgdHJhY2luZwogICAgICAgICAgICAgICAgIE1hcDxTdHJpbmcsIEJvb2xlYW4+IG1hcERvdWJsZVJlc291cmNlUmVmZXJlbmNlID0KQEAgLTM2Myw3ICszNjMsNyBAQAogICAgICAgICBwcm9jZXNzUmVxdWVzdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgLyoqIAorICAgIC8qKgogICAgICAqIEhhbmRsZXMgdGhlIEhUVFAgPGNvZGU+UE9TVDwvY29kZT4gbWV0aG9kLgogICAgICAqIEBwYXJhbSByZXF1ZXN0IHNlcnZsZXQgcmVxdWVzdAogICAgICAqIEBwYXJhbSByZXNwb25zZSBzZXJ2bGV0IHJlc3BvbnNlCkBAIC0zNzMsNyArMzczLDcgQEAKICAgICAgICAgcHJvY2Vzc1JlcXVlc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIC8qKiAKKyAgICAvKioKICAgICAgKiBSZXR1cm5zIGEgc2hvcnQgZGVzY3JpcHRpb24gb2YgdGhlIHNlcnZsZXQuCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRTZXJ2bGV0SW5mbygpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvc3JjL2phdmEvb3JnL2dsYXNzZmlzaC9qZGJjL2RldnRlc3RzL3YzL3Rlc3QvQXBwbGljYXRpb25BdXRoVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9zcmMvamF2YS9vcmcvZ2xhc3NmaXNoL2pkYmMvZGV2dGVzdHMvdjMvdGVzdC9BcHBsaWNhdGlvbkF1dGhUZXN0LmphdmEKaW5kZXggMTdiNzJhZS4uNWQ3NDViYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9zcmMvamF2YS9vcmcvZ2xhc3NmaXNoL2pkYmMvZGV2dGVzdHMvdjMvdGVzdC9BcHBsaWNhdGlvbkF1dGhUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9zcmMvamF2YS9vcmcvZ2xhc3NmaXNoL2pkYmMvZGV2dGVzdHMvdjMvdGVzdC9BcHBsaWNhdGlvbkF1dGhUZXN0LmphdmEKQEAgLTI1LDcgKzI1LDcgQEAKIAogLyoqCiAgKiBUZXN0cyBBcHBsaWNhdGlvbiBBdXRoZW50aWNhdGlvbgotICogCisgKgogICogQGF1dGhvciBzaGFsaW5pCiAgKi8KIHB1YmxpYyBjbGFzcyBBcHBsaWNhdGlvbkF1dGhUZXN0IGltcGxlbWVudHMgU2ltcGxlVGVzdCB7CkBAIC02OCw3ICs2OCw3IEBACiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICByZXN1bHRzTWFwLnB1dCgiYXBwLWF1dGgtd3JvbmctY3JlZGVudGlhbHMiLCBmYWxzZSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGlmICh0ZXN0VHdpY2VXaXRoQ3JlZGVudGlhbHMoZHMsIG91dCkpIHsKICAgICAgICAgICAgICAgICByZXN1bHRzTWFwLnB1dCgiYXBwLWF1dGgtdHdpY2Utd2l0aC1jcmVkZW50aWFscyIsIHRydWUpOwpAQCAtOTAsMTIgKzkwLDEyIEBACiAgICAgICAgIH0KIAogICAgICAgICBIdG1sVXRpbC5wcmludEhSKG91dCk7Ci0gICAgICAgIHJldHVybiByZXN1bHRzTWFwOyAgICAgICAgICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlc3VsdHNNYXA7CiAgICAgfQogCiAgICAgLyoqCi0gICAgICogVGVzdHMgYXBwbGljYXRpb24gYXV0aGVudGljYXRpb24gYnkgZW5zdXJpbmcgdGhhdCBjb25uZWN0aW9uIHdpdGggCi0gICAgICogdGhlIHNhbWUgdXNlcm5hbWUgaXMgcmV0dXJuZWQgd2hlbiBnb3QgZnJvbSAyIGRpZmZlcmVudCBjcmVkZW50aWFscyAtIAorICAgICAqIFRlc3RzIGFwcGxpY2F0aW9uIGF1dGhlbnRpY2F0aW9uIGJ5IGVuc3VyaW5nIHRoYXQgY29ubmVjdGlvbiB3aXRoCisgICAgICogdGhlIHNhbWUgdXNlcm5hbWUgaXMgcmV0dXJuZWQgd2hlbiBnb3QgZnJvbSAyIGRpZmZlcmVudCBjcmVkZW50aWFscyAtCiAgICAgICogZmlyc3Qgb25lIGJlaW5nIHRoZSByaWdodCBvbmUuCiAgICAgICogQHBhcmFtIGRzCiAgICAgICogQHBhcmFtIG91dApAQCAtMTIyLDcgKzEyMiw3IEBACiAgICAgICAgICAgICAgICAgSHRtbFV0aWwucHJpbnRFeGNlcHRpb24oZXgsIG91dCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8YnI+IEdldHRpbmcgdGhlIE5vblR4IENvbm5lY3Rpb24gZm9yIFwiQVBQXCIgLi4uIik7CiAgICAgICAgICAgICAgICAgY29ubjIgPSAoKGNvbS5zdW4uYXBwc2Vydi5qZGJjLkRhdGFTb3VyY2UpZHMpLmdldE5vblR4Q29ubmVjdGlvbigKQEAgLTEzMSw3ICsxMzEsNyBAQAogICAgICAgICAgICAgICAgIGlmIChjb25uMi5nZXRNZXRhRGF0YSgpLmdldFVzZXJOYW1lKCkuZXF1YWxzKCJBUFAiKSkgewogICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJyPiBVc2VyTmFtZSBtYXRjaGVzIHRoZSByaWdodCBjcmVkZW50aWFscyIpOwogICAgICAgICAgICAgICAgICAgICBwYXNzZWQyID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleDIpIHsKICAgICAgICAgICAgICAgICBIdG1sVXRpbC5wcmludEV4Y2VwdGlvbihleDIsIG91dCk7CiAgICAgICAgICAgICB9CkBAIC0xNTAsMTEgKzE1MCwxMSBAQAogICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlMSkgewogICAgICAgICAgICAgICAgICAgICBIdG1sVXRpbC5wcmludEV4Y2VwdGlvbihlMSwgb3V0KTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9ICAgICAgICAgICAgCisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmVzdWx0ID0gcGFzc2VkMSAmJiBwYXNzZWQyOwogICAgICAgICBvdXQucHJpbnRsbigiPGJyPiBUZXN0IHJlc3VsdCA6ICIgKyByZXN1bHQpOwotICAgICAgICByZXR1cm4gcmVzdWx0OyAgICAgICAgCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgLyoqCkBAIC0yMzQsNyArMjM0LDcgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBUZXN0cyBhcHBsaWNhdGlvbiBhdXRoZW50aWNhdGlvbiB3aGVuIHJpZ2h0IHVzZXJuYW1lL3Bhc3N3b3JkIGFyZSAKKyAgICAgKiBUZXN0cyBhcHBsaWNhdGlvbiBhdXRoZW50aWNhdGlvbiB3aGVuIHJpZ2h0IHVzZXJuYW1lL3Bhc3N3b3JkIGFyZQogICAgICAqIHNwZWNpZmllZC4KICAgICAgKiBAcGFyYW0gZHMKICAgICAgKiBAcGFyYW0gb3V0CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL3NyYy9qYXZhL29yZy9nbGFzc2Zpc2gvamRiYy9kZXZ0ZXN0cy92My90ZXN0L0Fzc29jV2l0aFRocmVhZFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvc3JjL2phdmEvb3JnL2dsYXNzZmlzaC9qZGJjL2RldnRlc3RzL3YzL3Rlc3QvQXNzb2NXaXRoVGhyZWFkVGVzdC5qYXZhCmluZGV4IGEzMDI1NmUuLmUwZjY3YmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvc3JjL2phdmEvb3JnL2dsYXNzZmlzaC9qZGJjL2RldnRlc3RzL3YzL3Rlc3QvQXNzb2NXaXRoVGhyZWFkVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvc3JjL2phdmEvb3JnL2dsYXNzZmlzaC9qZGJjL2RldnRlc3RzL3YzL3Rlc3QvQXNzb2NXaXRoVGhyZWFkVGVzdC5qYXZhCkBAIC0zOCw3ICszOCw3IEBACiAgKi8KIHB1YmxpYyBjbGFzcyBBc3NvY1dpdGhUaHJlYWRUZXN0IGltcGxlbWVudHMgU2ltcGxlVGVzdHsKIAotICAgIAorCiAgICAgICAgIE1hcDxTdHJpbmcsIEJvb2xlYW4+IHJlc3VsdHNNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIEJvb2xlYW4+KCk7CiAKICAgICBwdWJsaWMgTWFwPFN0cmluZywgQm9vbGVhbj4gcnVuVGVzdChEYXRhU291cmNlIGRzMSwgUHJpbnRXcml0ZXIgb3V0KSB7CkBAIC01MywxMCArNTMsMTAgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0c01hcDsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIGJvb2xlYW4gdGVzdEFzc29jV2l0aFRocmVhZChEYXRhU291cmNlIGRzMSwgUHJpbnRXcml0ZXIgb3V0KSB0aHJvd3MgU3lzdGVtRXhjZXB0aW9uIHsKIAotICAgICAgICAKKwogICAgICAgICBIdG1sVXRpbC5wcmludEhSKG91dCk7CiAgICAgICAgIG91dC5wcmludGxuKCI8aDQ+IEFzc29jLXdpdGgtdGhyZWFkIHRlc3QgPC9oND4iKTsKIApAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgfQogCi0gICAgCisKICAgICAgcHJpdmF0ZSBTdHJpbmcgdGVzdDEoRGF0YVNvdXJjZSBkczEsIFByaW50V3JpdGVyIG91dCkgdGhyb3dzIFN5c3RlbUV4Y2VwdGlvbiB7CiAgICAgICAgIFN0cmluZyByZXN1bHQgPSBudWxsOwogICAgICAgICBDb25uZWN0aW9uIGNvbiA9IG51bGw7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL3NyYy9qYXZhL29yZy9nbGFzc2Zpc2gvamRiYy9kZXZ0ZXN0cy92My90ZXN0L0Nvbm5lY3Rpb25MZWFrVHJhY2luZ1Rlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvc3JjL2phdmEvb3JnL2dsYXNzZmlzaC9qZGJjL2RldnRlc3RzL3YzL3Rlc3QvQ29ubmVjdGlvbkxlYWtUcmFjaW5nVGVzdC5qYXZhCmluZGV4IDNmNmYyOTQuLjA3OWE4ZGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvc3JjL2phdmEvb3JnL2dsYXNzZmlzaC9qZGJjL2RldnRlc3RzL3YzL3Rlc3QvQ29ubmVjdGlvbkxlYWtUcmFjaW5nVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvc3JjL2phdmEvb3JnL2dsYXNzZmlzaC9qZGJjL2RldnRlc3RzL3YzL3Rlc3QvQ29ubmVjdGlvbkxlYWtUcmFjaW5nVGVzdC5qYXZhCkBAIC0yOCwyMyArMjgsMjMgQEAKIAogLyoqCiAgKiBUZXN0cyBDb25uZWN0aW9uIExlYWsgdHJhY2luZy8gTGVhayByZWNsYWltLgotICogCi0gKiBBc3N1bWVzIHRoYXQgc3RlYWR5LXBvb2wtc2l6ZT0xLCBtYXgtcG9vbC1zaXplPTEsIAorICoKKyAqIEFzc3VtZXMgdGhhdCBzdGVhZHktcG9vbC1zaXplPTEsIG1heC1wb29sLXNpemU9MSwKICAqIGNvbm5lY3Rpb24tbGVhay10aW1lb3V0LWluLXNlY29uZHMgPSAxMCwgY29ubmVjdGlvbi1sZWFrLXJlY2xhaW0gPSB0cnVlCiAgKiBhdHRyaWJ1dGVzIGFyZSBzZXQgaW4gdGhlIHBvb2wgY29uZmlndXJhdGlvbi4KICAqIEBhdXRob3Igc2hhbGluaQogICovCiBwdWJsaWMgY2xhc3MgQ29ubmVjdGlvbkxlYWtUcmFjaW5nVGVzdCBpbXBsZW1lbnRzIFNpbXBsZVRlc3QgewogCi0gICAgTWFwPFN0cmluZywgQm9vbGVhbj4gcmVzdWx0c01hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgQm9vbGVhbj4oKTsgICAgCi0gICAgCisgICAgTWFwPFN0cmluZywgQm9vbGVhbj4gcmVzdWx0c01hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgQm9vbGVhbj4oKTsKKwogICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBCb29sZWFuPiBydW5UZXN0KERhdGFTb3VyY2UgZHMsIFByaW50V3JpdGVyIG91dCkgewogICAgICAgICAvL2NyZWF0ZSBDVVNUT01FUiB0YWJsZSBuZWVkZWQgZm9yIHRoaXMgdGVzdAogICAgICAgICBTdHJpbmcgdGFibGVOYW1lID0gIkNVU1RPTUVSIjsKICAgICAgICAgY3JlYXRlVGFibGVzKGRzLCBvdXQsIHRhYmxlTmFtZSk7Ci0gICAgICAgIAorCiAgICAgICAgIG91dC5wcmludGxuKCI8aDQ+IENvbm5lY3Rpb24gTGVhayBUcmFjaW5nIFRlc3QgPC9oND4iKTsKLSAgICAgICAgCisKICAgICAgICAgZm9yKGludCBpPTA7IGk8MzsgaSsrKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8YnI+IFRyaWFsICIgKyBpKTsKQEAgLTYzLDE1ICs2MywxNSBAQAogICAgICAgICB9CiAgICAgICAgIG91dC5wcmludGxuKCI8YnI+IFRlc3QgcmVzdWx0IDogdHJ1ZSIpOwogICAgICAgICByZXN1bHRzTWFwLnB1dCgiY29ubi1sZWFrLXRyYWNpbmctdGVzdDEiLCB0cnVlKTsKLSAgICAgICAgCisKICAgICAgICAgLy9EZWxldGUgdGhlIENVU1RPTUVSIHRhYmxlIGNyZWF0ZWQuCiAgICAgICAgIFRhYmxlc1V0aWwuZGVsZXRlVGFibGVzKGRzLCBvdXQsIHRhYmxlTmFtZSk7Ci0gICAgICAgIAorCiAgICAgICAgIEh0bWxVdGlsLnByaW50SFIob3V0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdHNNYXA7CiAgICAgfQogCi0gICAgcHJpdmF0ZSBib29sZWFuIGNvbm5MZWFrVHJhY2luZ1Rlc3QxKERhdGFTb3VyY2UgZHMsIFByaW50V3JpdGVyIG91dCwgCisgICAgcHJpdmF0ZSBib29sZWFuIGNvbm5MZWFrVHJhY2luZ1Rlc3QxKERhdGFTb3VyY2UgZHMsIFByaW50V3JpdGVyIG91dCwKICAgICAgICAgICAgIFN0cmluZyB0YWJsZU5hbWUpIHsKICAgICAgICAgQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKICAgICAgICAgYm9vbGVhbiBwYXNzZWQgPSB0cnVlOwpAQCAtMTE2LDcgKzExNiw3IEBACiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIEh0bWxVdGlsLnByaW50RXhjZXB0aW9uKGUsIG91dCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgICAgIAorICAgICAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGVtcHR5VGFibGUoQ29ubmVjdGlvbiBjb25uLCBTdHJpbmcgdGFibGVOYW1lKSB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKQEAgLTEyOSw3ICsxMjksNyBAQAogICAgICAgICBTdGF0ZW1lbnQgc3RtdCA9IGNvbm4uY3JlYXRlU3RhdGVtZW50KCk7CiAgICAgICAgIHN0bXQuZXhlY3V0ZVVwZGF0ZSgiSU5TRVJUIGludG8gIiArIHRhYmxlTmFtZSArCiAgICAgICAgICAgICAgICAgIiAgdmFsdWVzICgxLCAnYWJjZCcpIik7Ci0gICAgICAgIHN0bXQuY2xvc2UoKTsgICAgICAgIAorICAgICAgICBzdG10LmNsb3NlKCk7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL3NyYy9qYXZhL29yZy9nbGFzc2Zpc2gvamRiYy9kZXZ0ZXN0cy92My90ZXN0L0Nvbm5lY3Rpb25TaGFyaW5nVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9zcmMvamF2YS9vcmcvZ2xhc3NmaXNoL2pkYmMvZGV2dGVzdHMvdjMvdGVzdC9Db25uZWN0aW9uU2hhcmluZ1Rlc3QuamF2YQppbmRleCBjYWYzZjlkLi5jM2Q1NDI3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL3NyYy9qYXZhL29yZy9nbGFzc2Zpc2gvamRiYy9kZXZ0ZXN0cy92My90ZXN0L0Nvbm5lY3Rpb25TaGFyaW5nVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvc3JjL2phdmEvb3JnL2dsYXNzZmlzaC9qZGJjL2RldnRlc3RzL3YzL3Rlc3QvQ29ubmVjdGlvblNoYXJpbmdUZXN0LmphdmEKQEAgLTMzLDcgKzMzLDcgQEAKICAqLwogcHVibGljIGNsYXNzIENvbm5lY3Rpb25TaGFyaW5nVGVzdCBpbXBsZW1lbnRzIFNpbXBsZVRlc3R7CiAKLSAgICAKKwogICAgIE1hcDxTdHJpbmcsIEJvb2xlYW4+IHJlc3VsdHNNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIEJvb2xlYW4+KCk7CiAKICAgICBwdWJsaWMgTWFwPFN0cmluZywgQm9vbGVhbj4gcnVuVGVzdChEYXRhU291cmNlIGRzMSwgUHJpbnRXcml0ZXIgb3V0KSB7CkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgIHJldHVybiByZXN1bHRzTWFwOwogICAgIH0KIAotICAgIAorCiAgICAgIHByaXZhdGUgYm9vbGVhbiB0ZXN0Q29ubmVjdGlvblNoYXJpbmcoRGF0YVNvdXJjZSBkczEsIFByaW50V3JpdGVyIG91dCkgdGhyb3dzIFN5c3RlbUV4Y2VwdGlvbiB7CiAgICAgICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7CiAgICAgICAgIENvbm5lY3Rpb24gY29uID0gbnVsbDsKQEAgLTEwOSw3ICsxMDksNyBAQAogICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICBIdG1sVXRpbC5wcmludEV4Y2VwdGlvbihlLCBvdXQpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8YnI+IFRlc3QgcmVzdWx0IDogIiArIHJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL3NyYy9qYXZhL29yZy9nbGFzc2Zpc2gvamRiYy9kZXZ0ZXN0cy92My90ZXN0L0NvbnRhaW5lckF1dGhUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL3NyYy9qYXZhL29yZy9nbGFzc2Zpc2gvamRiYy9kZXZ0ZXN0cy92My90ZXN0L0NvbnRhaW5lckF1dGhUZXN0LmphdmEKaW5kZXggNDFmMDBlMC4uZTkyZDA4ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9zcmMvamF2YS9vcmcvZ2xhc3NmaXNoL2pkYmMvZGV2dGVzdHMvdjMvdGVzdC9Db250YWluZXJBdXRoVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvc3JjL2phdmEvb3JnL2dsYXNzZmlzaC9qZGJjL2RldnRlc3RzL3YzL3Rlc3QvQ29udGFpbmVyQXV0aFRlc3QuamF2YQpAQCAtMzAsNyArMzAsNyBAQAogcHVibGljIGNsYXNzIENvbnRhaW5lckF1dGhUZXN0IGltcGxlbWVudHMgU2ltcGxlVGVzdCB7CiAKICAgICBNYXA8U3RyaW5nLCBCb29sZWFuPiByZXN1bHRzTWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBCb29sZWFuPigpOwotICAgIAorCiAgICAgcHVibGljIE1hcDxTdHJpbmcsIEJvb2xlYW4+IHJ1blRlc3QoRGF0YVNvdXJjZSBkcywgUHJpbnRXcml0ZXIgb3V0KSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpZiAodGVzdENvbnRBdXRoVXNlclBhc3MoZHMsIG91dCkpIHsKQEAgLTUyLDcgKzUyLDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIEh0bWxVdGlsLnByaW50SFIob3V0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdHNNYXA7ICAgICAgICAgICAgICAgIAorICAgICAgICByZXR1cm4gcmVzdWx0c01hcDsKICAgICB9CiAKICAgICAvKioKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvc3JjL2phdmEvb3JnL2dsYXNzZmlzaC9qZGJjL2RldnRlc3RzL3YzL3Rlc3QvTGF6eUNvbm5lY3Rpb25Bc3NvY2lhdGlvblRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvc3JjL2phdmEvb3JnL2dsYXNzZmlzaC9qZGJjL2RldnRlc3RzL3YzL3Rlc3QvTGF6eUNvbm5lY3Rpb25Bc3NvY2lhdGlvblRlc3QuamF2YQppbmRleCAyOWY3ODQ3Li4xNGNjYzE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL3NyYy9qYXZhL29yZy9nbGFzc2Zpc2gvamRiYy9kZXZ0ZXN0cy92My90ZXN0L0xhenlDb25uZWN0aW9uQXNzb2NpYXRpb25UZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9zcmMvamF2YS9vcmcvZ2xhc3NmaXNoL2pkYmMvZGV2dGVzdHMvdjMvdGVzdC9MYXp5Q29ubmVjdGlvbkFzc29jaWF0aW9uVGVzdC5qYXZhCkBAIC01NCw5ICs1NCw5IEBACiAgICAgICogQHBhcmFtIGkKICAgICAgKiBAcGFyYW0gZHMKICAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgYWNxdWlyZUNvbm5lY3Rpb25zKGludCBjb3VudCwgRGF0YVNvdXJjZSBkcywgUHJpbnRXcml0ZXIgb3V0KSAKKyAgICBwcml2YXRlIHZvaWQgYWNxdWlyZUNvbm5lY3Rpb25zKGludCBjb3VudCwgRGF0YVNvdXJjZSBkcywgUHJpbnRXcml0ZXIgb3V0KQogICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbnsKLSAgICAgICAgCisKICAgICAgICAgICAgIGZvcihpbnQgaT0wOyBpPGNvdW50IDsgaSsrKXsKICAgICAgICAgICAgICAgICBkcy5nZXRDb25uZWN0aW9uKCk7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL3NyYy9qYXZhL29yZy9nbGFzc2Zpc2gvamRiYy9kZXZ0ZXN0cy92My90ZXN0L0xlYWtUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL3NyYy9qYXZhL29yZy9nbGFzc2Zpc2gvamRiYy9kZXZ0ZXN0cy92My90ZXN0L0xlYWtUZXN0LmphdmEKaW5kZXggY2Q0NjFmYi4uOGUyYWMyZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9zcmMvamF2YS9vcmcvZ2xhc3NmaXNoL2pkYmMvZGV2dGVzdHMvdjMvdGVzdC9MZWFrVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvc3JjL2phdmEvb3JnL2dsYXNzZmlzaC9qZGJjL2RldnRlc3RzL3YzL3Rlc3QvTGVha1Rlc3QuamF2YQpAQCAtMjksNyArMjksNyBAQAogICovCiBwdWJsaWMgY2xhc3MgTGVha1Rlc3QgaW1wbGVtZW50cyBTaW1wbGVUZXN0ewogCi0gICAgCisKICAgICBNYXA8U3RyaW5nLCBCb29sZWFuPiByZXN1bHRzTWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBCb29sZWFuPigpOwogCiAgICAgcHVibGljIE1hcDxTdHJpbmcsIEJvb2xlYW4+IHJ1blRlc3QoRGF0YVNvdXJjZSBkczEsIFByaW50V3JpdGVyIG91dCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9zcmMvamF2YS9vcmcvZ2xhc3NmaXNoL2pkYmMvZGV2dGVzdHMvdjMvdGVzdC9NYXJrQ29ubmVjdGlvbkFzQmFkVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9zcmMvamF2YS9vcmcvZ2xhc3NmaXNoL2pkYmMvZGV2dGVzdHMvdjMvdGVzdC9NYXJrQ29ubmVjdGlvbkFzQmFkVGVzdC5qYXZhCmluZGV4IGExYTZhNmMuLjVkZjUxZTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvc3JjL2phdmEvb3JnL2dsYXNzZmlzaC9qZGJjL2RldnRlc3RzL3YzL3Rlc3QvTWFya0Nvbm5lY3Rpb25Bc0JhZFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL3NyYy9qYXZhL29yZy9nbGFzc2Zpc2gvamRiYy9kZXZ0ZXN0cy92My90ZXN0L01hcmtDb25uZWN0aW9uQXNCYWRUZXN0LmphdmEKQEAgLTczLDcgKzczLDcgQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgY29ubltpXSA9IGRzLmdldENvbm5lY3Rpb24oKTsKICAgICAgICAgICAgICAgICBwaHlzaWNhbENvbm5lY3Rpb25zLmFkZChkczEuZ2V0Q29ubmVjdGlvbihjb25uW2ldKSk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgSHRtbFV0aWwucHJpbnRFeGNlcHRpb24oZSwgb3V0KTsKICAgICAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKQEAgLTEzNiw3ICsxMzYsNyBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBjb25uW2ldID0gZHMuZ2V0Q29ubmVjdGlvbigpOwogICAgICAgICAgICAgICAgIHBoeXNpY2FsQ29ubmVjdGlvbnMuYWRkKGRzMS5nZXRDb25uZWN0aW9uKGNvbm5baV0pKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICBIdG1sVXRpbC5wcmludEV4Y2VwdGlvbihlLCBvdXQpOwogICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9zcmMvamF2YS9vcmcvZ2xhc3NmaXNoL2pkYmMvZGV2dGVzdHMvdjMvdGVzdC9NYXhDb25uZWN0aW9uVXNhZ2VUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL3NyYy9qYXZhL29yZy9nbGFzc2Zpc2gvamRiYy9kZXZ0ZXN0cy92My90ZXN0L01heENvbm5lY3Rpb25Vc2FnZVRlc3QuamF2YQppbmRleCAyMmJkMmQ3Li43MzkyYWNmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL3NyYy9qYXZhL29yZy9nbGFzc2Zpc2gvamRiYy9kZXZ0ZXN0cy92My90ZXN0L01heENvbm5lY3Rpb25Vc2FnZVRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL3NyYy9qYXZhL29yZy9nbGFzc2Zpc2gvamRiYy9kZXZ0ZXN0cy92My90ZXN0L01heENvbm5lY3Rpb25Vc2FnZVRlc3QuamF2YQpAQCAtMjcsMTkgKzI3LDE5IEBACiBpbXBvcnQgb3JnLmdsYXNzZmlzaC5qZGJjLmRldnRlc3RzLnYzLnV0aWwuVGFibGVzVXRpbDsKIAogLyoqCi0gKiBEZXZ0ZXN0IHRvIHRlc3QgaWYgYXBwbGljYXRpb24gc2VydmVyIHJlbW92ZXMgYSBjb25uZWN0aW9uIGZyb20gcG9vbCAKKyAqIERldnRlc3QgdG8gdGVzdCBpZiBhcHBsaWNhdGlvbiBzZXJ2ZXIgcmVtb3ZlcyBhIGNvbm5lY3Rpb24gZnJvbSBwb29sCiAgKiBhZnRlciB1c2luZyBpdCBmb3IgIm1heGNvbm5lY3Rpb251c2FnZSIgdGltZXMuCi0gKiAKLSAqIEFzc3VtZXMgdGhhdCBzdGVhZHktcG9vbC1zaXplID0gMSwgbWF4LXBvb2wtc2l6ZSA9IDEsIAorICoKKyAqIEFzc3VtZXMgdGhhdCBzdGVhZHktcG9vbC1zaXplID0gMSwgbWF4LXBvb2wtc2l6ZSA9IDEsCiAgKiBtYXgtY29ubmVjdGlvbi11c2FnZS1jb3VudCA9IDEwIGF0dHJpYnV0ZXMgYXJlIHNldCBvbiB0aGUgcG9vbC4KLSAqIAorICoKICAqIEBhdXRob3Igc2hhbGluaQogICovCiBwdWJsaWMgY2xhc3MgTWF4Q29ubmVjdGlvblVzYWdlVGVzdCBpbXBsZW1lbnRzIFNpbXBsZVRlc3QgewogICAgIE1hcDxTdHJpbmcsIEJvb2xlYW4+IHJlc3VsdHNNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIEJvb2xlYW4+KCk7Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBUZXN0cyBtYXgtY29ubmVjdGlvbi11c2FnZSBhc3N1bWluZyBwb29sIHNpemUgPSAxIGFuZCAKKyAgICAgKiBUZXN0cyBtYXgtY29ubmVjdGlvbi11c2FnZSBhc3N1bWluZyBwb29sIHNpemUgPSAxIGFuZAogICAgICAqIERhdGFTb3VyY2UgaXMgb2YgdHlwZSA6IGphdmF4LnNxbC5EYXRhU291cmNlCiAgICAgICogQHBhcmFtIGRzCiAgICAgICogQHBhcmFtIG91dApAQCAtNjcsMjcgKzY3LDI3IEBACiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICByZXN1bHRzTWFwLnB1dCgibWF4LWNvbm4tdXNhZ2UtY29ubmVjdGlvbi1zaGFyaW5nLXRlc3QiLCBmYWxzZSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgVGFibGVzVXRpbC5kZWxldGVUYWJsZXMoZHMsIG91dCwgdGFibGVOYW1lKTsKICAgICAgICAgSHRtbFV0aWwucHJpbnRIUihvdXQpOwotICAgICAgICByZXR1cm4gcmVzdWx0c01hcDsgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlc3VsdHNNYXA7CiAgICAgfQogCiAgICAgLyoqCiAgICAgICogQXNzdW1pbmcgcG9vbCBoYXMgb25seSBvbmUgY29ubmVjdGlvbiwgY2FsbGluZyBtYXhDb25uVXNhZ2VUZXN0MiguLi4pIGFuZAogICAgICAqIG1heENvbm5Vc2FnZVRlc3QzKC4uLikgNSB0aW1lcyBlYWNoIHdpbGwgZW5zdXJlIHRoYXQgIm1heGNvbm5lY3Rpb25zdXNhZ2U9MTAiCi0gICAgICogaXMgbWV0LiAgCisgICAgICogaXMgbWV0LgogICAgICAqIEZ1cnRoZXIgY2FsbCB0byBtYXhDb25uVXNhZ2VUZXN0MiguLi4pIHdpbGwgcmV0dXJuIGEgZGlmZmVyZW50IGNvbm5lY3Rpb24KLSAgICAgKiAKKyAgICAgKgogICAgICAqIElmIHRoZXkgYXJlIGRpZmZlcmVudCwgY29ubmVjdGlvbiB3YXMgZHJvcHBlZCBhbmQgY3JlYXRlZCBhbmQgdGVzdCBwYXNzZXMuCi0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gZHMKICAgICAgKiBAcGFyYW0gb3V0CiAgICAgICogQHBhcmFtIHZhbHVlCiAgICAgICogQHBhcmFtIHRhYmxlTmFtZQogICAgICAqIEByZXR1cm4gYm9vbGVhbiBzdGF0dXMKICAgICAgKi8KLSAgICBwcml2YXRlIGJvb2xlYW4gY29ubmVjdGlvblNoYXJpbmdUZXN0KERhdGFTb3VyY2UgZHMsIFByaW50V3JpdGVyIG91dCwgCisgICAgcHJpdmF0ZSBib29sZWFuIGNvbm5lY3Rpb25TaGFyaW5nVGVzdChEYXRhU291cmNlIGRzLCBQcmludFdyaXRlciBvdXQsCiAgICAgICAgICAgICBpbnQgdmFsdWUsIFN0cmluZyB0YWJsZU5hbWUpIHsKICAgICAgICAgU3RyaW5nW10gcmVzdWx0cyA9IG5ldyBTdHJpbmdbMTBdOwogICAgICAgICBvdXQucHJpbnRsbigiPGg0PiBNYXggQ29ubmVjdGlvbiBVc2FnZSAtIENvbm5lY3Rpb24gU2hhcmluZyBUZXN0IDwvaDQ+Iik7CkBAIC05Niw3ICs5Niw3IEBACiAgICAgICAgICAgICBpZihpICUgMiA9PSAwKSB7CiAgICAgICAgICAgICAgICAgcmVzdWx0c1tpXSA9IG1heENvbm5Vc2FnZVRlc3QyKGRzLCBvdXQsIHZhbHVlLCB0YWJsZU5hbWUpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXN1bHRzW2ldID0gbWF4Q29ublVzYWdlVGVzdDMoZHMsIG91dCwgKGkvMikrMSwgdmFsdWUsIAorICAgICAgICAgICAgICAgIHJlc3VsdHNbaV0gPSBtYXhDb25uVXNhZ2VUZXN0Myhkcywgb3V0LCAoaS8yKSsxLCB2YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlTmFtZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTExMCwxMCArMTEwLDEwIEBACiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgb3V0LnByaW50bG4oIjxicj4gRnVydGhlciBjYWxsIHRvIG1heENvbm5Vc2FnZVRlc3QyIik7CiAgICAgICAgIFN0cmluZyB0bXBSZXN1bHQyID0gbWF4Q29ublVzYWdlVGVzdDIoZHMsIG91dCwgdmFsdWUsIHRhYmxlTmFtZSk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKCF0bXBSZXN1bHQyLmVxdWFsc0lnbm9yZUNhc2UodG1wUmVzdWx0MSkgJiYgc3RhdHVzKSB7CiAgICAgICAgICAgICBzdGF0dXMgPSB0cnVlOwogICAgICAgICB9IGVsc2UgewpAQCAtMTI5LDcgKzEyOSw3IEBACiAKICAgICAvKioKICAgICAgKiBDcmVhdGVzIHRhYmxlIG5lZWRlZCBmb3IgdGhlIE1heCBDb25uZWN0aW9uIFVzYWdlIGRldnRlc3QuCi0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gZHMKICAgICAgKiBAcGFyYW0gb3V0CiAgICAgICogQHBhcmFtIHRhYmxlTmFtZQpAQCAtMTY3LDcgKzE2Nyw3IEBACiAgICAgLyoqCiAgICAgICogVGVzdHMgaWYgdGhlIGZpcnN0IGFuZCBsYXN0IHBoeXNpY2FsIGNvbm5lY3Rpb25zIGFyZSBkaWZmZXJlbnQuCiAgICAgICogQXNzdW1pbmcgbWF4Y29ubmVjdGlvbnVzYWdlIHByb3BlcnR5IGlzIDEwIGFuZCBjb25uZWN0aW9uU2hhcmluZyBPTiwgdGhlCi0gICAgICogcGh5c2ljYWwgY29ubmVjdGlvbnMgY29uLTEgYW5kIGNvbi0xMSBtdXN0IGJlIGRpZmZlcmVudC4gICAgIAorICAgICAqIHBoeXNpY2FsIGNvbm5lY3Rpb25zIGNvbi0xIGFuZCBjb24tMTEgbXVzdCBiZSBkaWZmZXJlbnQuCiAgICAgICogQHBhcmFtIGRzCiAgICAgICogQHBhcmFtIG91dAogICAgICAqIEByZXR1cm4gYm9vbGVhbiByZXN1bHQKQEAgLTIxOCw3ICsyMTgsNyBAQAogICAgICAqIEBwYXJhbSB0YWJsZU5hbWUKICAgICAgKiBAcmV0dXJuIHBoeXNpY2FsQ29ubmVjdGlvblN0cmluZwogICAgICAqLwotICAgIHByaXZhdGUgU3RyaW5nIG1heENvbm5Vc2FnZVRlc3QyKERhdGFTb3VyY2UgZHMsIFByaW50V3JpdGVyIG91dCwgaW50IHZhbHVlLCAKKyAgICBwcml2YXRlIFN0cmluZyBtYXhDb25uVXNhZ2VUZXN0MihEYXRhU291cmNlIGRzLCBQcmludFdyaXRlciBvdXQsIGludCB2YWx1ZSwKICAgICAgICAgICAgIFN0cmluZyB0YWJsZU5hbWUpIHsKICAgICAgICAgQ29ubmVjdGlvbiBwaHlzaWNhbENvbm5lY3Rpb24gPSBudWxsOwogICAgICAgICBDb25uZWN0aW9uIGNvbm4gPSBudWxsOwpAQCAtMjI4LDcgKzIyOCw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBjb25uID0gZHMxLmdldENvbm5lY3Rpb24oKTsKICAgICAgICAgICAgIHN0bXQgPSBjb25uLmNyZWF0ZVN0YXRlbWVudCgpOwotICAgICAgICAgICAgc3RtdC5leGVjdXRlVXBkYXRlKCJpbnNlcnQgaW50byAiICsgdGFibGVOYW1lICsgIiB2YWx1ZXMgKCIgKyAKKyAgICAgICAgICAgIHN0bXQuZXhlY3V0ZVVwZGF0ZSgiaW5zZXJ0IGludG8gIiArIHRhYmxlTmFtZSArICIgdmFsdWVzICgiICsKICAgICAgICAgICAgICAgICAgICAgdmFsdWUgKyAiLCciICsgdmFsdWUgKyAiJykiKTsKICAgICAgICAgICAgIHBoeXNpY2FsQ29ubmVjdGlvbiA9IGRzMS5nZXRDb25uZWN0aW9uKGNvbm4pOwogICAgICAgICAgICAgcGh5c2ljYWxDb25uZWN0aW9uU3RyaW5nID0gcGh5c2ljYWxDb25uZWN0aW9uLnRvU3RyaW5nKCk7CkBAIC0yNDMsNyArMjQzLDcgQEAKICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgSHRtbFV0aWwucHJpbnRFeGNlcHRpb24oZSwgb3V0KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAKKwogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBpZihjb25uICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgY29ubi5jbG9zZSgpOwpAQCAtMjU2LDcgKzI1Niw3IEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbidzIElEIGFmdGVyIHRlc3RpbmcgaWYgdGhlIGVudHJpZXMgaW5zZXJ0ZWQgCisgICAgICogUmV0dXJucyB0aGUgcGh5c2ljYWwgY29ubmVjdGlvbidzIElEIGFmdGVyIHRlc3RpbmcgaWYgdGhlIGVudHJpZXMgaW5zZXJ0ZWQKICAgICAgKiB1c2luZyBtYXhDb25uVXNhZ2VUZXN0MiguLi4uKSBtZXRob2QgYXJlIHBlcnNpc3RlZC4KICAgICAgKiBAcGFyYW0gZHMKICAgICAgKiBAcGFyYW0gb3V0CkBAIC0yNjUsNyArMjY1LDcgQEAKICAgICAgKiBAcGFyYW0gdGFibGVOYW1lCiAgICAgICogQHJldHVybiBwaHlzaWNhbENvbm5lY3Rpb25TdHJpbmcKICAgICAgKi8KLSAgICBwcml2YXRlIFN0cmluZyBtYXhDb25uVXNhZ2VUZXN0MyhEYXRhU291cmNlIGRzLCBQcmludFdyaXRlciBvdXQsIGludCBjb3VudCwgCisgICAgcHJpdmF0ZSBTdHJpbmcgbWF4Q29ublVzYWdlVGVzdDMoRGF0YVNvdXJjZSBkcywgUHJpbnRXcml0ZXIgb3V0LCBpbnQgY291bnQsCiAgICAgICAgICAgICBpbnQgdmFsdWUsIFN0cmluZyB0YWJsZU5hbWUpIHsKICAgICAgICAgQ29ubmVjdGlvbiBwaHlzaWNhbENvbm5lY3Rpb24gPSBudWxsOwogICAgICAgICBDb25uZWN0aW9uIGNvbm4gPSBudWxsOwpAQCAtMjgxLDcgKzI4MSw3IEBACiAgICAgICAgICAgICAgICAgaWYoY291bnQgPT0gcmVzdWx0Q291bnQpIHsKICAgICAgICAgICAgICAgICAgICAgcGh5c2ljYWxDb25uZWN0aW9uID0gZHMxLmdldENvbm5lY3Rpb24oY29ubik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIkV4cGVjdGVkIGNvdW50IFsiICsgY291bnQgKyAKKyAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIkV4cGVjdGVkIGNvdW50IFsiICsgY291bnQgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJdIGRvZXMgbm90IG1hdGNoIFsiICsgcmVzdWx0Q291bnQgKyAiXSIpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CkBAIC0yOTcsMTUgKzI5NywxNSBAQAogICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgICAgICBIdG1sVXRpbC5wcmludEV4Y2VwdGlvbihleCwgb3V0KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGlmKHN0bXQgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICBzdG10LmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgICAgICAgICAgSHRtbFV0aWwucHJpbnRFeGNlcHRpb24oZXgsIG91dCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBpZihjb25uICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgY29ubi5jbG9zZSgpOwpAQCAtMzE2LDUgKzMxNiw1IEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHBoeXNpY2FsQ29ubmVjdGlvbi50b1N0cmluZygpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9zcmMvamF2YS9vcmcvZ2xhc3NmaXNoL2pkYmMvZGV2dGVzdHMvdjMvdGVzdC9NdWx0aXBsZUNvbm5lY3Rpb25DbG9zZVRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvc3JjL2phdmEvb3JnL2dsYXNzZmlzaC9qZGJjL2RldnRlc3RzL3YzL3Rlc3QvTXVsdGlwbGVDb25uZWN0aW9uQ2xvc2VUZXN0LmphdmEKaW5kZXggNmM0YmQ3NC4uNzk3NmFjNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9zcmMvamF2YS9vcmcvZ2xhc3NmaXNoL2pkYmMvZGV2dGVzdHMvdjMvdGVzdC9NdWx0aXBsZUNvbm5lY3Rpb25DbG9zZVRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL3NyYy9qYXZhL29yZy9nbGFzc2Zpc2gvamRiYy9kZXZ0ZXN0cy92My90ZXN0L011bHRpcGxlQ29ubmVjdGlvbkNsb3NlVGVzdC5qYXZhCkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgIENvbm5lY3Rpb24gY29ubjEgPSBudWxsOwogICAgICAgICBib29sZWFuIHBhc3NlZCA9IHRydWU7CiAgICAgICAgIC8vY2xlYW4gdGhlIGRhdGFiYXNlCi0gICAgICAgIG91dC5wcmludGxuKCI8aDQ+IE11bHRpcGxlIGNsb3NlIGNvbm5lY3Rpb24gLSBUZXN0MSA8L2g0PiIpOyAgICAKKyAgICAgICAgb3V0LnByaW50bG4oIjxoND4gTXVsdGlwbGUgY2xvc2UgY29ubmVjdGlvbiAtIFRlc3QxIDwvaDQ+Iik7CiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGNvbm4xID0gZHMxLmdldENvbm5lY3Rpb24oKTsKQEAgLTkzLDcgKzkzLDcgQEAKICAgICAgICAgU3RyaW5nIGNvbHVtbk5hbWUgPSAibmFtZSI7CiAgICAgICAgIFRhYmxlc1V0aWwuY3JlYXRlVGFibGVzKGRzMSwgb3V0LCB0YWJsZU5hbWUsIGNvbHVtbk5hbWUpOwogCi0gICAgICAgIG91dC5wcmludGxuKCI8aDQ+IE11bHRpcGxlIGNsb3NlIGNvbm5lY3Rpb24gLSBUZXN0MiA8L2g0PiIpOyAgICAKKyAgICAgICAgb3V0LnByaW50bG4oIjxoND4gTXVsdGlwbGUgY2xvc2UgY29ubmVjdGlvbiAtIFRlc3QyIDwvaDQ+Iik7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBjb25uMSA9IGRzMS5nZXRDb25uZWN0aW9uKCk7CiAgICAgICAgICAgICBzdG10ID0gY29ubjEuY3JlYXRlU3RhdGVtZW50KCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL3NyYy9qYXZhL29yZy9nbGFzc2Zpc2gvamRiYy9kZXZ0ZXN0cy92My90ZXN0L011bHRpcGxlVXNlckNyZWRlbnRpYWxzVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9zcmMvamF2YS9vcmcvZ2xhc3NmaXNoL2pkYmMvZGV2dGVzdHMvdjMvdGVzdC9NdWx0aXBsZVVzZXJDcmVkZW50aWFsc1Rlc3QuamF2YQppbmRleCBmODkzMTE5Li43NGVhNjU5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL3NyYy9qYXZhL29yZy9nbGFzc2Zpc2gvamRiYy9kZXZ0ZXN0cy92My90ZXN0L011bHRpcGxlVXNlckNyZWRlbnRpYWxzVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvc3JjL2phdmEvb3JnL2dsYXNzZmlzaC9qZGJjL2RldnRlc3RzL3YzL3Rlc3QvTXVsdGlwbGVVc2VyQ3JlZGVudGlhbHNUZXN0LmphdmEKQEAgLTI2LDcgKzI2LDcgQEAKIAogLyoqCiAgKiBUZXN0cyBpZiBDb25uZWN0aW9uIHBvb2wgdHJpZXMgdG8gZXZpY3QgKGV4cGVsKSBzb21lIGZyZWUgY29ubmVjdGlvbnMKLSAqIGlmIGEgbmV3IGNvbm5lY3Rpb24gY2Fubm90IGZpdCBpbiB0aGUgcG9vbC4gQXNzdW1lcyBtYXgtcG9vbC1zaXplID0gMzIsIAorICogaWYgYSBuZXcgY29ubmVjdGlvbiBjYW5ub3QgZml0IGluIHRoZSBwb29sLiBBc3N1bWVzIG1heC1wb29sLXNpemUgPSAzMiwKICAqIHN0ZWFkeS1wb29sLXNpemUgPSA4LCBwb29sLXJlc2l6ZS1xdWFudGl0eSA9IDIsIG1hdGNoLWNvbm5lY3Rpb25zID0gdHJ1ZS4KIAogICogQGF1dGhvciBzaGFsaW5pCkBAIC0zNCw3ICszNCw3IEBACiBwdWJsaWMgY2xhc3MgTXVsdGlwbGVVc2VyQ3JlZGVudGlhbHNUZXN0IGltcGxlbWVudHMgU2ltcGxlVGVzdCB7CiAKICAgICBNYXA8U3RyaW5nLCBCb29sZWFuPiByZXN1bHRzTWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBCb29sZWFuPigpOwotICAgIAorCiAgICAgcHVibGljIE1hcDxTdHJpbmcsIEJvb2xlYW4+IHJ1blRlc3QoRGF0YVNvdXJjZSBkcywgUHJpbnRXcml0ZXIgb3V0KSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpZiAodGVzdE11bHRpcGxlVXNlckNyZWRlbnRpYWxzKGRzLCBvdXQpKSB7CkBAIC00NiwxMiArNDYsMTIgQEAKICAgICAgICAgICAgIHJlc3VsdHNNYXAucHV0KCJqZGJjLW11bHRpcGxlLXVzZXItY3JlZGVudGlhbHMiLCBmYWxzZSk7CiAgICAgICAgIH0KIAotICAgICAgICBIdG1sVXRpbC5wcmludEhSKG91dCk7ICAgICAgICAKLSAgICAgICAgcmV0dXJuIHJlc3VsdHNNYXA7ICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIEh0bWxVdGlsLnByaW50SFIob3V0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdHNNYXA7CiAgICAgfQogCiAgICAgLyoqCi0gICAgICogVGVzdHMgaWYgdW5tYXRjaGVkIGZyZWUgY29ubmVjdGlvbnMgYXJlIHB1cmdlZCBhbmQgbmV3IGNvbm5lY3Rpb25zIGFyZSAKKyAgICAgKiBUZXN0cyBpZiB1bm1hdGNoZWQgZnJlZSBjb25uZWN0aW9ucyBhcmUgcHVyZ2VkIGFuZCBuZXcgY29ubmVjdGlvbnMgYXJlCiAgICAgICogcHJvdmlkZWQgZXZlbiBpZiB0aGUgdXNlciBjcmVkZW50aWFscyBkb24ndCBtYXRjaC4KICAgICAgKiBAcGFyYW0gZHMKICAgICAgKiBAcGFyYW0gb3V0CkBAIC02Miw3ICs2Miw3IEBACiAgICAgICAgIENvbm5lY3Rpb24gY29ubnMyW10gPSBuZXcgQ29ubmVjdGlvblsxNl07CiAgICAgICAgIGJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKICAgICAgICAgb3V0LnByaW50bG4oIjxoND4gTXVsdGlwbGUgVXNlciBDcmVkZW50aWFscyBUZXN0PC9oND4iKTsKLSAgICAgICAgCisKICAgICAgICAgLy9GaXJzdCB1c2VyIGFjcXVpcmVzIDE2IGNvbm5lY3Rpb25zCiAgICAgICAgIG91dC5wcmludGxuKCI8YnI+IEdldHRpbmcgMTYgY29ubmVjdGlvbnMgYXMgREJVU0VSLi4uIik7CiAgICAgICAgIGZvcihpbnQgaT0wOyBpPGNvbm5zMS5sZW5ndGg7IGkrKykgewpAQCAtODQsNyArODQsNyBAQAogICAgICAgICAgICAgICAgIHBhc3NlZCA9IGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIC8vQWxsIGNvbm5lY3Rpb25zIGFyZSByZXR1cm5lZCB0byB0aGUgcG9vbAogICAgICAgICBvdXQucHJpbnRsbigiPGJyPiBDbG9zaW5nIGFsbCB0aGUgY29ubmVjdGlvbnMgYWNxdWlyZWQgYnkgREJVU0VSIik7CiAgICAgICAgIGZvcihpbnQgaT0wOyBpPGNvbm5zMS5sZW5ndGg7IGkrKykgewpAQCAtMTA2LDcgKzEwNiw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICAvL1JlcXVlc3QgZnJvbSB0aGlyZCBhbmQgZm91cnRoIHVzZXIgCisgICAgICAgIC8vUmVxdWVzdCBmcm9tIHRoaXJkIGFuZCBmb3VydGggdXNlcgogICAgICAgICBvdXQucHJpbnRsbigiPGJyPiBHZXR0aW5nIHN1YnNlcXVlbnQgY29ubmVjdGlvbnMgZm9yIEFQUCBhbmQgREVSQllVU0VSIik7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb25uZWN0aW9uIGNvbm4zID0gZHMuZ2V0Q29ubmVjdGlvbigiQVBQIiwgIkFQUCIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9zcmMvamF2YS9vcmcvZ2xhc3NmaXNoL2pkYmMvZGV2dGVzdHMvdjMvdGVzdC9Ob1R4Q29ublRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvc3JjL2phdmEvb3JnL2dsYXNzZmlzaC9qZGJjL2RldnRlc3RzL3YzL3Rlc3QvTm9UeENvbm5UZXN0LmphdmEKaW5kZXggYzYwNmFiMy4uZjAxODgxMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9zcmMvamF2YS9vcmcvZ2xhc3NmaXNoL2pkYmMvZGV2dGVzdHMvdjMvdGVzdC9Ob1R4Q29ublRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL3NyYy9qYXZhL29yZy9nbGFzc2Zpc2gvamRiYy9kZXZ0ZXN0cy92My90ZXN0L05vVHhDb25uVGVzdC5qYXZhCkBAIC0zNSw3ICszNSw3IEBACiBwdWJsaWMgY2xhc3MgTm9UeENvbm5UZXN0IGltcGxlbWVudHMgU2ltcGxlVGVzdCB7CiAKICAgICBNYXA8U3RyaW5nLCBCb29sZWFuPiByZXN1bHRzTWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBCb29sZWFuPigpOwotICAgIAorCiAgICAgcHVibGljIE1hcDxTdHJpbmcsIEJvb2xlYW4+IHJ1blRlc3QoRGF0YVNvdXJjZSBkcywgUHJpbnRXcml0ZXIgb3V0KSB7CiAgICAgICAgIC8qdHJ5IHsKICAgICAgICAgICAgIGlmICh0ZXN0Tm9UeENvbm5UZXN0MShkcywgb3V0KSkgewpAQCAtNTgsNyArNTgsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgSHRtbFV0aWwucHJpbnRIUihvdXQpOwotICAgICAgICByZXR1cm4gcmVzdWx0c01hcDsgICAgICAgIAorICAgICAgICByZXR1cm4gcmVzdWx0c01hcDsKICAgICB9CiAKICAgICBwcml2YXRlIGJvb2xlYW4gdGVzdE5vVHhDb25uVGVzdDEoRGF0YVNvdXJjZSBkcywgUHJpbnRXcml0ZXIgb3V0KSB7CkBAIC03NCw4ICs3NCw4IEBACiAgICAgICAgIFN0cmluZyBjb250ZW50ID0gIm1ldGhvZDEiOwogICAgICAgICBTdHJpbmcgY29sdW1uTmFtZSA9ICJuYW1lIjsKICAgICAgICAgVGFibGVzVXRpbC5jcmVhdGVUYWJsZXMoZHMsIG91dCwgdGFibGVOYW1lLCBjb2x1bW5OYW1lKTsKLSAgICAgICAgCi0gICAgICAgIG91dC5wcmludGxuKCI8aDQ+IE5vVHhDb25uIFRlc3QxIDwvaDQ+Iik7ICAgIAorCisgICAgICAgIG91dC5wcmludGxuKCI8aDQ+IE5vVHhDb25uIFRlc3QxIDwvaDQ+Iik7CiAgICAgICAgIFVzZXJUcmFuc2FjdGlvbiB0eCA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJyPiIpOwpAQCAtOTUsNyArOTUsNyBAQAogICAgICAgICAgICAgbm9UeENvbm4gPSAoKGNvbS5zdW4uYXBwc2Vydi5qZGJjLkRhdGFTb3VyY2UpZHMpLmdldE5vblR4Q29ubmVjdGlvbigpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxicj5Hb3Qgbm9UeCBjb25uZWN0aW9uIC0gbm9UeENvbm4gOiAiICsgbm9UeENvbm4pOwogICAgICAgICAgICAgc3RtdCA9IGNvbm4uY3JlYXRlU3RhdGVtZW50KCk7Ci0gICAgICAgICAgICBzdG10LmV4ZWN1dGVVcGRhdGUoIklOU0VSVCBJTlRPICIgKyB0YWJsZU5hbWUgKyAiIFZBTFVFUygnIiArIAorICAgICAgICAgICAgc3RtdC5leGVjdXRlVXBkYXRlKCJJTlNFUlQgSU5UTyAiICsgdGFibGVOYW1lICsgIiBWQUxVRVMoJyIgKwogICAgICAgICAgICAgICAgICAgICBjb250ZW50ICsgIicpIik7CiAKICAgICAgICAgICAgIHN0bXQyID0gbm9UeENvbm4uY3JlYXRlU3RhdGVtZW50KCk7CkBAIC0xNDYsMTAgKzE0NiwxMCBAQAogICAgICAgICAgICAgICAgICAgIEh0bWxVdGlsLnByaW50RXhjZXB0aW9uKGUxLCBvdXQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBUYWJsZXNVdGlsLmRlbGV0ZVRhYmxlcyhkcywgb3V0LCB0YWJsZU5hbWUpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxicj4gVGVzdCByZXN1bHQgOiAiICsgcmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7ICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAgICAgfQogCkBAIC0xNjIsNyArMTYyLDcgQEAKICAgICAgICAgamFrYXJ0YS50cmFuc2FjdGlvbi5Vc2VyVHJhbnNhY3Rpb24gdHggPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxicj5TdGFydGluZyB0ZXN0IC4uLiIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIEluaXRpYWxDb250ZXh0IGN0eCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogCiAgICAgICAgICAgICB0eCA9KFVzZXJUcmFuc2FjdGlvbiljdHgubG9va3VwKCJqYXZhOmNvbXAvVXNlclRyYW5zYWN0aW9uIik7CkBAIC0xODMsNyArMTgzLDcgQEAKICAgICAgICAgICAgICAgICBub1R4Q29ubiA9ICgoY29tLnN1bi5hcHBzZXJ2LmpkYmMuRGF0YVNvdXJjZSlkcykuZ2V0Tm9uVHhDb25uZWN0aW9uKCk7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxicj5BdXRvY29tbWl0IG9mIG5vVHhDb25uID0+ICIgKyBub1R4Q29ubi5nZXRBdXRvQ29tbWl0KCkpOwogICAgICAgICAgICAgICAgIGlmIChub1R4Q29ubi5nZXRBdXRvQ29tbWl0KCkgPT0gZmFsc2UgKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOyAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG5vVHhDb25uLmNsb3NlKCk7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL3NyYy9qYXZhL29yZy9nbGFzc2Zpc2gvamRiYy9kZXZ0ZXN0cy92My90ZXN0L1N0YXRlbWVudFRpbWVvdXRUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL3NyYy9qYXZhL29yZy9nbGFzc2Zpc2gvamRiYy9kZXZ0ZXN0cy92My90ZXN0L1N0YXRlbWVudFRpbWVvdXRUZXN0LmphdmEKaW5kZXggZTBiZmZjNy4uZjhiY2NmYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9zcmMvamF2YS9vcmcvZ2xhc3NmaXNoL2pkYmMvZGV2dGVzdHMvdjMvdGVzdC9TdGF0ZW1lbnRUaW1lb3V0VGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvc3JjL2phdmEvb3JnL2dsYXNzZmlzaC9qZGJjL2RldnRlc3RzL3YzL3Rlc3QvU3RhdGVtZW50VGltZW91dFRlc3QuamF2YQpAQCAtMzAsMjIgKzMwLDIyIEBACiAKIC8qKgogICogVGVzdHMgaWYgc3RhdGVtZW50LXRpbWVvdXQgKHF1ZXJ5LXRpbWVvdXQpIGlzIGJlaW5nIHNldCBvbiBhbGwgdHlwZXMgb2YKLSAqIHN0YXRlbWVudHMgY3JlYXRlZCBpbiBhbiBhcHBsaWNhdGlvbiA6IFN0YXRlbWVudCwgUHJlcGFyZWRTdGF0ZW1lbnQsIAorICogc3RhdGVtZW50cyBjcmVhdGVkIGluIGFuIGFwcGxpY2F0aW9uIDogU3RhdGVtZW50LCBQcmVwYXJlZFN0YXRlbWVudCwKICAqIENhbGxhYmxlU3RhdGVtZW50LgotICogCisgKgogICogQXNzdW1lcyB0aGF0IHN0YXRlbWVudC10aW1lb3V0IGF0dHJpYnV0ZSBpcyBzZXQgb24gdGhlIHBvb2wgdG8gMzAuCi0gKiAKKyAqCiAgKiBAYXV0aG9yIHNoYWxpbmkKICAqLwogcHVibGljIGNsYXNzIFN0YXRlbWVudFRpbWVvdXRUZXN0IGltcGxlbWVudHMgU2ltcGxlVGVzdCB7CiAgICAgTWFwPFN0cmluZywgQm9vbGVhbj4gcmVzdWx0c01hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgQm9vbGVhbj4oKTsKIAogICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBCb29sZWFuPiBydW5UZXN0KERhdGFTb3VyY2UgZHMsIFByaW50V3JpdGVyIG91dCkgewotICAgICAgICAKKwogICAgICAgICAvL0NyZWF0ZSByZXF1aXJlZCB0YWJsZXMgYW5kIGluc2VydCBlbnRyeSBpbnRvIHRoZW0KICAgICAgICAgU3RyaW5nIHRhYmxlTmFtZSA9ICJDVVNUT01FUiI7CiAgICAgICAgIFN0cmluZyBjb2x1bW5OYW1lID0gIm5hbWUiOwotICAgICAgICBUYWJsZXNVdGlsLmNyZWF0ZVRhYmxlcyhkcywgb3V0LCB0YWJsZU5hbWUsIGNvbHVtbk5hbWUpOyAgICAgICAgCisgICAgICAgIFRhYmxlc1V0aWwuY3JlYXRlVGFibGVzKGRzLCBvdXQsIHRhYmxlTmFtZSwgY29sdW1uTmFtZSk7CiAgICAgICAgIFRhYmxlc1V0aWwuaW5zZXJ0RW50cnkoZHMsIG91dCwgdGFibGVOYW1lLCAiYWJjZCIpOwogICAgICAgICBUYWJsZXNVdGlsLmluc2VydEVudHJ5KGRzLCBvdXQsIHRhYmxlTmFtZSwgInBxcnMiKTsKIApAQCAtNTgsNyArNTgsNyBAQAogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgcmVzdWx0c01hcC5wdXQoInN0YXRlbWVudC10ZXN0IiwgZmFsc2UpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpZiAocHJlcGFyZWRTdGF0ZW1lbnRUZXN0KGRzLCBvdXQsIHRhYmxlTmFtZSkpIHsKICAgICAgICAgICAgICAgICByZXN1bHRzTWFwLnB1dCgicHJlcGFyZWQtc3RhdGVtZW50LXRlc3QiLCB0cnVlKTsKQEAgLTg1LDE0ICs4NSwxNCBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIFRlc3RzIGlmIHN0YXRlbWVudC10aW1lb3V0IGlzIGJlaW5nIHNldCBvbiBhIENhbGxhYmxlU3RhdGVtZW50IGNyZWF0ZWQgCisgICAgICogVGVzdHMgaWYgc3RhdGVtZW50LXRpbWVvdXQgaXMgYmVpbmcgc2V0IG9uIGEgQ2FsbGFibGVTdGF0ZW1lbnQgY3JlYXRlZAogICAgICAqIGluIHRoZSBhcHBsaWNhdGlvbi4KICAgICAgKiBAcGFyYW0gZHMKICAgICAgKiBAcGFyYW0gb3V0CiAgICAgICogQHBhcmFtIHRhYmxlTmFtZQogICAgICAqIEByZXR1cm4gYm9vbGVhbiByZXN1bHQKICAgICAgKi8KLSAgICBwcml2YXRlIGJvb2xlYW4gY2FsbGFibGVTdGF0ZW1lbnRUZXN0KERhdGFTb3VyY2UgZHMsIFByaW50V3JpdGVyIG91dCwgCisgICAgcHJpdmF0ZSBib29sZWFuIGNhbGxhYmxlU3RhdGVtZW50VGVzdChEYXRhU291cmNlIGRzLCBQcmludFdyaXRlciBvdXQsCiAgICAgICAgICAgICBTdHJpbmcgdGFibGVOYW1lKSB7CiAgICAgICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7CiAgICAgICAgIENvbm5lY3Rpb24gY29uRnJvbURTID0gbnVsbDsKQEAgLTEwMyw3ICsxMDMsNyBAQAogICAgICAgICAgICAgY29uRnJvbURTID0gZHMuZ2V0Q29ubmVjdGlvbigpOwogICAgICAgICAgICAgb3V0LnByaW50KCI8YnI+IFByZXBhcmluZyBhIENhbGxhYmxlU3RhdGVtZW50Iik7CiAgICAgICAgICAgICBzdG10ID0gY29uRnJvbURTLnByZXBhcmVDYWxsKCJzZWxlY3QgKiBmcm9tICIgKyB0YWJsZU5hbWUpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8YnI+IGdldFF1ZXJ5VGltZW91dCgpIG9uIHRoZSBzdGF0ZW1lbnQiKTsKICAgICAgICAgICAgIGlmKHN0bXQuZ2V0UXVlcnlUaW1lb3V0KCkgPT0gMzApIHsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJyPiBUaW1lb3V0ID0gMzAiKTsKQEAgLTEyOCw3ICsxMjgsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxicj4gVGVzdCByZXN1bHQgOiAiICsgcmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0gICAgICAgICAgICAgICAgCisgICAgICAgIH0KICAgICB9CiAKICAgICAvKioKQEAgLTEzOSwxOSArMTM5LDE5IEBACiAgICAgICogQHBhcmFtIHRhYmxlTmFtZQogICAgICAqIEByZXR1cm4gYm9vbGVhbiByZXN1bHQKICAgICAgKi8KLSAgICBwcml2YXRlIGJvb2xlYW4gcHJlcGFyZWRTdGF0ZW1lbnRUZXN0KERhdGFTb3VyY2UgZHMsIFByaW50V3JpdGVyIG91dCwgCisgICAgcHJpdmF0ZSBib29sZWFuIHByZXBhcmVkU3RhdGVtZW50VGVzdChEYXRhU291cmNlIGRzLCBQcmludFdyaXRlciBvdXQsCiAgICAgICAgICAgICBTdHJpbmcgdGFibGVOYW1lKSB7CiAgICAgICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7CiAgICAgICAgIENvbm5lY3Rpb24gY29uRnJvbURTID0gbnVsbDsKICAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgc3RtdCA9IG51bGw7CiAgICAgICAgIG91dC5wcmludGxuKCI8aDQ+IFByZXBhcmVkIFN0YXRlbWVudCBUZXN0IDwvaDQ+Iik7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJyPiBHZXR0aW5nIGEgY29ubmVjdGlvbi4uLiIpOwogICAgICAgICAgICAgY29uRnJvbURTID0gZHMuZ2V0Q29ubmVjdGlvbigpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxicj5DcmVhdGluZyBhIFByZXBhcmVkU3RhdGVtZW50IHF1ZXJ5Iik7CiAgICAgICAgICAgICBzdG10ID0gY29uRnJvbURTLnByZXBhcmVTdGF0ZW1lbnQoInNlbGVjdCAqIGZyb20gIiArIHRhYmxlTmFtZSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxicj5nZXRRdWVyeVRpbWVvdXQoKSBvbiB0aGUgc3RhdGVtZW50Iik7CiAgICAgICAgICAgICBpZihzdG10LmdldFF1ZXJ5VGltZW91dCgpID09IDMwKSB7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxicj5UaW1lb3V0ID0gMzAiKTsKQEAgLTE3Niw3ICsxNzYsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxicj4gVGVzdCByZXN1bHQgOiAiICsgcmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0gICAgICAgIAorICAgICAgICB9CiAgICAgfQogCiAgICAgLyoqCkBAIC0xOTYsNyArMTk2LDcgQEAKICAgICAgICAgICAgIGNvbkZyb21EUyA9IGRzLmdldENvbm5lY3Rpb24oKTsKICAgICAgICAgICAgIG91dC5wcmludCgiPGJyPkNyZWF0aW5nIGEgU3RhdGVtZW50Iik7CiAgICAgICAgICAgICBzdG10ID0gY29uRnJvbURTLmNyZWF0ZVN0YXRlbWVudCgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8YnI+IEdldHRpbmcgdGhlIHF1ZXJ5VGltZW91dCBvbiB0aGUgc3RhdGVtZW50Iik7CiAgICAgICAgICAgICBpZihzdG10LmdldFF1ZXJ5VGltZW91dCgpID09IDMwKSB7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxicj5UaW1lb3V0ID0gMzAiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvc3JjL2phdmEvb3JnL2dsYXNzZmlzaC9qZGJjL2RldnRlc3RzL3YzL3Rlc3QvcmVjb25maWcvUmVjb25maWdUZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9zcmMvamF2YS9vcmcvZ2xhc3NmaXNoL2pkYmMvZGV2dGVzdHMvdjMvdGVzdC9yZWNvbmZpZy9SZWNvbmZpZ1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggMWZjNzQ4YS4uYWM3YTMzZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9zcmMvamF2YS9vcmcvZ2xhc3NmaXNoL2pkYmMvZGV2dGVzdHMvdjMvdGVzdC9yZWNvbmZpZy9SZWNvbmZpZ1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9zcmMvamF2YS9vcmcvZ2xhc3NmaXNoL2pkYmMvZGV2dGVzdHMvdjMvdGVzdC9yZWNvbmZpZy9SZWNvbmZpZ1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTM3LDcgKzM3LDcgQEAKIHB1YmxpYyBjbGFzcyBSZWNvbmZpZ1Rlc3RTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewogICAgIEBSZXNvdXJjZShuYW1lID0gImpkYmMvamRiYy1kZXYtdGVzdC1yZXNvdXJjZSIsIG1hcHBlZE5hbWUgPSAiamRiYy9qZGJjLWRldi10ZXN0LXJlc291cmNlIikKICAgICBEYXRhU291cmNlIGRzOwotICAgIAorCiAgICAgQFJlc291cmNlKG5hbWUgPSAiamRiYy9qZGJjLXJlY29uZmlnLXRlc3QtcmVzb3VyY2UtMSIsIG1hcHBlZE5hbWUgPSAiamRiYy9qZGJjLXJlY29uZmlnLXRlc3QtcmVzb3VyY2UtMSIpCiAgICAgRGF0YVNvdXJjZSBkc1JlY29uZmlnMTsKIApAQCAtNDYsMTMgKzQ2LDEzIEBACiAKICAgICBAUmVzb3VyY2UobmFtZSA9ICJqZGJjL3JlczEiLCBtYXBwZWROYW1lID0gImpkYmMvcmVzMSIpCiAgICAgRGF0YVNvdXJjZSBkc1JlczE7Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBwcm90ZWN0ZWQgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgYXJnMCwgSHR0cFNlcnZsZXRSZXNwb25zZSBhcmcxKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBwcm9jZXNzUmVxdWVzdChhcmcwLCBhcmcxKTsKICAgICB9CiAKLSAgICAvKiogCisgICAgLyoqCiAgICAgICogUHJvY2Vzc2VzIHJlcXVlc3RzIGZvciBib3RoIEhUVFAgPGNvZGU+R0VUPC9jb2RlPiBhbmQgPGNvZGU+UE9TVDwvY29kZT4gbWV0aG9kcy4KICAgICAgKiBAcGFyYW0gcmVxdWVzdCBzZXJ2bGV0IHJlcXVlc3QKICAgICAgKiBAcGFyYW0gcmVzcG9uc2Ugc2VydmxldCByZXNwb25zZQpAQCAtOTIsNyArOTIsNyBAQAogICAgICAgICAgICAgICAgICAgICBtYXBSZWNvbmZpZyA9IHJlY29uZmlnVGVzdC5yZXNvdXJjZUF0dHJpYnV0ZUNoYW5nZVRlc3QoZHNSZWNvbmZpZzIsIG91dCwgdGhyb3dFeGNlcHRpb24pOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIDQ6IC8vUmVzb3VyY2UgYXR0cmlidXRlIGNoYW5nZSB0ZXN0IHdpdGggYW5vdGhlciBkYXRhc291cmNlCi0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aDE+UmVjb25maWcgUmVzb3VyY2UgQXR0cmlidXRlIFRlc3Qgd2l0aCBEUyA6IGRzUmVzMTwvaDE+Iik7CiAgICAgICAgICAgICAgICAgICAgIG1hcFJlY29uZmlnID0gcmVjb25maWdUZXN0LnJlc291cmNlQXR0cmlidXRlQ2hhbmdlVGVzdChkc1JlczEsIG91dCwgdGhyb3dFeGNlcHRpb24pOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTExOCw3ICsxMTgsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgLyoqIAorICAgIC8qKgogICAgICAqIFJldHVybnMgYSBzaG9ydCBkZXNjcmlwdGlvbiBvZiB0aGUgc2VydmxldC4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFNlcnZsZXRJbmZvKCkgewpAQCAtMTI2LDcgKzEyNiw3IEBACiAgICAgICAgICAgICAgICAgIkpEQkMgUmVzb3VyY2UiOwogICAgIH0KIAotICAgIC8qKiAKKyAgICAvKioKICAgICAqIEhhbmRsZXMgdGhlIEhUVFAgPGNvZGU+UE9TVDwvY29kZT4gbWV0aG9kLgogICAgICogQHBhcmFtIHJlcXVlc3Qgc2VydmxldCByZXF1ZXN0CiAgICAgKiBAcGFyYW0gcmVzcG9uc2Ugc2VydmxldCByZXNwb25zZQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9zcmMvamF2YS9vcmcvZ2xhc3NmaXNoL2pkYmMvZGV2dGVzdHMvdjMvdGVzdC9yZWNvbmZpZy9SZWNvbmZpZ1Rlc3RVdGlsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL3NyYy9qYXZhL29yZy9nbGFzc2Zpc2gvamRiYy9kZXZ0ZXN0cy92My90ZXN0L3JlY29uZmlnL1JlY29uZmlnVGVzdFV0aWwuamF2YQppbmRleCAzMzMyODFmLi5jNjM3NjdhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL3NyYy9qYXZhL29yZy9nbGFzc2Zpc2gvamRiYy9kZXZ0ZXN0cy92My90ZXN0L3JlY29uZmlnL1JlY29uZmlnVGVzdFV0aWwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL3NyYy9qYXZhL29yZy9nbGFzc2Zpc2gvamRiYy9kZXZ0ZXN0cy92My90ZXN0L3JlY29uZmlnL1JlY29uZmlnVGVzdFV0aWwuamF2YQpAQCAtMzgsNyArMzgsNyBAQAogcHVibGljIGNsYXNzIFJlY29uZmlnVGVzdFV0aWwgewogICAgIE1hcDxTdHJpbmcsIEJvb2xlYW4+IHJlc3VsdHNNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIEJvb2xlYW4+KCk7CiAKLSAgICBNYXA8U3RyaW5nLCBCb29sZWFuPiBwb29sUHJvcGVydHlDaGFuZ2VUZXN0KERhdGFTb3VyY2UgZHMsIFByaW50V3JpdGVyIG91dCwgCisgICAgTWFwPFN0cmluZywgQm9vbGVhbj4gcG9vbFByb3BlcnR5Q2hhbmdlVGVzdChEYXRhU291cmNlIGRzLCBQcmludFdyaXRlciBvdXQsCiAgICAgICAgICAgICBib29sZWFuIHRocm93RXhjZXB0aW9uKSB7CiAgICAgICAgIC8vVGVzdHMgdGhlIHByb3BlcnR5IGNoYW5nZSBvZiBqZGJjIGNvbm5lY3Rpb24gcG9vbCBieSBhc2FkbWluIHNldCBjb21tYW5kLgogICAgICAgICB0cnkgewpAQCAtNDksMTEgKzQ5LDExIEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICByZXN1bHRzTWFwLnB1dCgicG9vbC1wcm9wZXJ0eS1jaGFuZ2UtdGVzdCIsIGZhbHNlKTsKLSAgICAgICAgfSAKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0c01hcDsKICAgICB9CiAKLSAgICBNYXA8U3RyaW5nLCBCb29sZWFuPiByZXNvdXJjZUF0dHJpYnV0ZUNoYW5nZVRlc3QoRGF0YVNvdXJjZSBkcywgUHJpbnRXcml0ZXIgb3V0LCAKKyAgICBNYXA8U3RyaW5nLCBCb29sZWFuPiByZXNvdXJjZUF0dHJpYnV0ZUNoYW5nZVRlc3QoRGF0YVNvdXJjZSBkcywgUHJpbnRXcml0ZXIgb3V0LAogICAgICAgICAgICAgYm9vbGVhbiB0aHJvd0V4Y2VwdGlvbikgewogICAgICAgICAvL1Rlc3RzIHRoZSBhdHRyaWJ1dGUgc2V0IG9mIGpkYmMgcmVzb3VyY2UgYnkgYXNhZG1pbiBzZXQgY29tbWFuZC4KICAgICAgICAgdHJ5IHsKQEAgLTY0LDggKzY0LDggQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIHJlc3VsdHNNYXAucHV0KCJyZXNvdXJjZS1jaGFuZ2Utd3JvbmctdGFibGUtdGVzdCIsIGZhbHNlKTsKLSAgICAgICAgfSAKLSAgICAgICAgCisgICAgICAgIH0KKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgaWYodGVzdEpEQkNSZXNvdXJjZUNoYW5nZUNvcnJlY3RUYWJsZShkcywgb3V0LCAhdGhyb3dFeGNlcHRpb24pKSB7CiAgICAgICAgICAgICAgICAgcmVzdWx0c01hcC5wdXQoInJlc291cmNlLWNoYW5nZS1jb3JyZWN0LXRhYmxlLXRlc3QiLCB0cnVlKTsKQEAgLTc3LDggKzc3LDggQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0c01hcDsKICAgICB9Ci0gICAgCi0gICAgTWFwPFN0cmluZywgQm9vbGVhbj4gcG9vbEF0dHJpYnV0ZUNoYW5nZVRlc3QoRGF0YVNvdXJjZSBkcywgUHJpbnRXcml0ZXIgb3V0LCAKKworICAgIE1hcDxTdHJpbmcsIEJvb2xlYW4+IHBvb2xBdHRyaWJ1dGVDaGFuZ2VUZXN0KERhdGFTb3VyY2UgZHMsIFByaW50V3JpdGVyIG91dCwKICAgICAgICAgICAgIGludCBtYXhQb29sU2l6ZSwgYm9vbGVhbiB0aHJvd0V4Y2VwdGlvbikgewogICAgICAgICAvL1Rlc3RzIHRoZSBhdHRyaWJ1dGUgc2V0IGJ5IGFzYWRtaW4gc2V0IGNvbW1hbmQuCiAgICAgICAgIHRyeSB7CkBAIC05Myw3ICs5Myw3IEBACiAgICAgICAgIHJldHVybiByZXN1bHRzTWFwOwogICAgIH0KIAotICAgIHByaXZhdGUgYm9vbGVhbiB0ZXN0SkRCQ1Jlc291cmNlQ2hhbmdlKERhdGFTb3VyY2UgZHMsIFByaW50V3JpdGVyIG91dCwgCisgICAgcHJpdmF0ZSBib29sZWFuIHRlc3RKREJDUmVzb3VyY2VDaGFuZ2UoRGF0YVNvdXJjZSBkcywgUHJpbnRXcml0ZXIgb3V0LAogICAgICAgICAgICAgYm9vbGVhbiB0aHJvd0V4Y2VwdGlvbikgdGhyb3dzIFN5c3RlbUV4Y2VwdGlvbiB7CiAgICAgICAgIEh0bWxVdGlsLnByaW50SFIob3V0KTsKICAgICAgICAgb3V0LnByaW50bG4oIjxoND4gUmVjb25maWcgdGVzdCA6IHRhYmxlbmFtZSA6IHJlY29uZmlnVGVzdFRhYmxlIChyZWNvbmZpZy1kYik8L2g0PiIpOwpAQCAtMTIwLDEyICsxMjAsMTIgQEAKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIHRyeSB7IGNvbi5jbG9zZSgpOyB9IGNhdGNoICggRXhjZXB0aW9uIGUgKSB7fQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIEh0bWxVdGlsLnByaW50SFIob3V0KTsKICAgICAgICAgcmV0dXJuIHBhc3NlZDsKICAgICB9CiAKLSAgICBwcml2YXRlIGJvb2xlYW4gdGVzdEpEQkNSZXNvdXJjZUNoYW5nZUNvcnJlY3RUYWJsZShEYXRhU291cmNlIGRzLCBQcmludFdyaXRlciBvdXQsIAorICAgIHByaXZhdGUgYm9vbGVhbiB0ZXN0SkRCQ1Jlc291cmNlQ2hhbmdlQ29ycmVjdFRhYmxlKERhdGFTb3VyY2UgZHMsIFByaW50V3JpdGVyIG91dCwKICAgICAgICAgICAgIGJvb2xlYW4gdGhyb3dFeGNlcHRpb24pIHRocm93cyBTeXN0ZW1FeGNlcHRpb24gewogICAgICAgICBIdG1sVXRpbC5wcmludEhSKG91dCk7CiAgICAgICAgIG91dC5wcmludGxuKCI8aDQ+IFJlY29uZmlnIHRlc3QgOiB0YWJsZU5hbWUgOiBzYW1wbGVUYWJsZSAoc2FtcGxlLWRiKSA8L2g0PiIpOwpAQCAtMTUyLDEzICsxNTIsMTMgQEAKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIHRyeSB7IGNvbi5jbG9zZSgpOyB9IGNhdGNoICggRXhjZXB0aW9uIGUgKSB7fQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIEh0bWxVdGlsLnByaW50SFIob3V0KTsKLSAgICAgICAgcmV0dXJuIHBhc3NlZDsgICAgICAgIAorICAgICAgICByZXR1cm4gcGFzc2VkOwogICAgIH0KLSAgICAKLSAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0TWF4UG9vbFNpemUoRGF0YVNvdXJjZSBkcywgUHJpbnRXcml0ZXIgb3V0LCAKLSAgICAgICAgICAgIGludCBtYXhQb29sU2l6ZSwgYm9vbGVhbiB0aHJvd0V4Y2VwdGlvbikgIAorCisgICAgcHVibGljIGJvb2xlYW4gdGVzdE1heFBvb2xTaXplKERhdGFTb3VyY2UgZHMsIFByaW50V3JpdGVyIG91dCwKKyAgICAgICAgICAgIGludCBtYXhQb29sU2l6ZSwgYm9vbGVhbiB0aHJvd0V4Y2VwdGlvbikKICAgICAgICAgICAgIHRocm93cyBTeXN0ZW1FeGNlcHRpb24gewogICAgICAgICBIdG1sVXRpbC5wcmludEhSKG91dCk7CiAgICAgICAgIG91dC5wcmludGxuKCJcbjxoND4gUmVjb25maWcgLSBBdHRyaWJ1dGUgbWF4LXBvb2wtc2l6ZSB0ZXN0IDwvaDQ+Iik7CkBAIC0yMDUsNyArMjA1LDcgQEAKICAgICAgICAgcmV0dXJuIHBhc3NlZDsKICAgICB9CiAKLSAgICBwcml2YXRlIGJvb2xlYW4gdGVzdFByb3BlcnR5Q2hhbmdlKERhdGFTb3VyY2UgZHMsIFByaW50V3JpdGVyIG91dCwgCisgICAgcHJpdmF0ZSBib29sZWFuIHRlc3RQcm9wZXJ0eUNoYW5nZShEYXRhU291cmNlIGRzLCBQcmludFdyaXRlciBvdXQsCiAgICAgICAgICAgICBib29sZWFuIHRocm93RXhjZXB0aW9uKSB0aHJvd3MgU3lzdGVtRXhjZXB0aW9uIHsKICAgICAgICAgSHRtbFV0aWwucHJpbnRIUihvdXQpOwogICAgICAgICBvdXQucHJpbnRsbigiXG48aDQ+IFJlY29uZmlnIC0gUG9vbCBwcm9wZXJ0eSBjaGFuZ2UgdGVzdCA8L2g0PiIpOwpAQCAtMjI1LDkgKzIyNSw5IEBACiAgICAgICAgICAgICAgICAgcGFzc2VkID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICB0cnkgeyBjb24uY2xvc2UoKTsgfSBjYXRjaCAoIEV4Y2VwdGlvbiBlICkge30gICAgICAgICAgICAKKyAgICAgICAgICAgIHRyeSB7IGNvbi5jbG9zZSgpOyB9IGNhdGNoICggRXhjZXB0aW9uIGUgKSB7fQogICAgICAgICB9CiAgICAgICAgIEh0bWxVdGlsLnByaW50SFIob3V0KTsKLSAgICAgICAgcmV0dXJuIHBhc3NlZDsgICAgICAgIAorICAgICAgICByZXR1cm4gcGFzc2VkOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvc3JjL2phdmEvb3JnL2dsYXNzZmlzaC9qZGJjL2RldnRlc3RzL3YzL3V0aWwvSHRtbFV0aWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvc3JjL2phdmEvb3JnL2dsYXNzZmlzaC9qZGJjL2RldnRlc3RzL3YzL3V0aWwvSHRtbFV0aWwuamF2YQppbmRleCA0YTUwZTUwLi42YjU2ZjQyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL3NyYy9qYXZhL29yZy9nbGFzc2Zpc2gvamRiYy9kZXZ0ZXN0cy92My91dGlsL0h0bWxVdGlsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy9zcmMvamF2YS9vcmcvZ2xhc3NmaXNoL2pkYmMvZGV2dGVzdHMvdjMvdXRpbC9IdG1sVXRpbC5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgICAgICBvdXQucHJpbnRsbihlbGVtZW50LnRvU3RyaW5nKCkgKyAiPGJyPiIpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogUHJpbnRzIGEgaG9yaXpvbnRhbCBydWxlci4KICAgICAgKiBAcGFyYW0gb3V0CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL3NyYy9qYXZhL29yZy9nbGFzc2Zpc2gvamRiYy9kZXZ0ZXN0cy92My91dGlsL1RhYmxlc1V0aWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvc3JjL2phdmEvb3JnL2dsYXNzZmlzaC9qZGJjL2RldnRlc3RzL3YzL3V0aWwvVGFibGVzVXRpbC5qYXZhCmluZGV4IGM4ZDkyMjEuLjllZmI5MTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvc3JjL2phdmEvb3JnL2dsYXNzZmlzaC9qZGJjL2RldnRlc3RzL3YzL3V0aWwvVGFibGVzVXRpbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvc3JjL2phdmEvb3JnL2dsYXNzZmlzaC9qZGJjL2RldnRlc3RzL3YzL3V0aWwvVGFibGVzVXRpbC5qYXZhCkBAIC02NSw3ICs2NSw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgICAgIAorCiAgICAgLyoqCiAgICAgICogRGVsZXRlcyB0YWJsZXMgdXNlZCBieSBKREJDIGRldnRlc3RzLgogICAgICAqIEBwYXJhbSBkczEKQEAgLTExNCw3ICsxMTQsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgY29uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwogICAgICAgICAgICAgc3RtdCA9IGNvbi5jcmVhdGVTdGF0ZW1lbnQoKTsKLSAgICAgICAgICAgIHN0bXQuZXhlY3V0ZVVwZGF0ZSgiSU5TRVJUIElOVE8gIiArIHRhYmxlTmFtZSArICIgVkFMVUVTKCciICsgCisgICAgICAgICAgICBzdG10LmV4ZWN1dGVVcGRhdGUoIklOU0VSVCBJTlRPICIgKyB0YWJsZU5hbWUgKyAiIFZBTFVFUygnIiArCiAgICAgICAgICAgICAgICAgY29udGVudCArICInKSIpOwogICAgICAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIEh0bWxVdGlsLnByaW50RXhjZXB0aW9uKGV4LCBvdXQpOwpAQCAtMTM3LDcgKzEzNyw3IEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogVmVyaWZpZXMgdGFibGUgY29udGVudCBieSBnZXR0aW5nIHRoZSBudW1iZXIgb2Ygcm93cyBpbiBpdCwgdXNlZCBieSB0aGUgCisgICAgICogVmVyaWZpZXMgdGFibGUgY29udGVudCBieSBnZXR0aW5nIHRoZSBudW1iZXIgb2Ygcm93cyBpbiBpdCwgdXNlZCBieSB0aGUKICAgICAgKiBKREJDIGRldnRlc3RzLiBSZXR1cm5zIGEgdHJ1ZSBpZiB0aGVyZSBhcmUgYW55IHJvd3MgaW4gdGhlIHRhYmxlLgogICAgICAqIEBwYXJhbSBkczEKICAgICAgKiBAcGFyYW0gb3V0CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL3dlYi9XRUItSU5GL3N1bi13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92My92M19qZGJjX2Rldl90ZXN0cy93ZWIvV0VCLUlORi9zdW4td2ViLnhtbAppbmRleCAzZjk0MGQ2Li45ZDNiM2FkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3YzL3YzX2pkYmNfZGV2X3Rlc3RzL3dlYi9XRUItSU5GL3N1bi13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdjMvdjNfamRiY19kZXZfdGVzdHMvd2ViL1dFQi1JTkYvc3VuLXdlYi54bWwKQEAgLTMwLDYgKzMwLDYgQEAKICAgPC9yZXNvdXJjZS1yZWY+CiAgIDxyZXNvdXJjZS1yZWY+CiAgICAgICA8cmVzLXJlZi1uYW1lPmpkYmMvamRiYy1tdWx0aXBsZS11c2VyLXRlc3QtcmVzb3VyY2U8L3Jlcy1yZWYtbmFtZT4KLSAgICAgIDxqbmRpLW5hbWU+amRiYy9qZGJjLW11bHRpcGxlLXVzZXItdGVzdC1yZXNvdXJjZTwvam5kaS1uYW1lPiAgICAgIAorICAgICAgPGpuZGktbmFtZT5qZGJjL2pkYmMtbXVsdGlwbGUtdXNlci10ZXN0LXJlc291cmNlPC9qbmRpLW5hbWU+CiAgICAgPC9yZXNvdXJjZS1yZWY+CiA8L3N1bi13ZWItYXBwPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92YWxpZGF0ZWF0bW9zdG9uY2VwZXJpb2QvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdmFsaWRhdGVhdG1vc3RvbmNlcGVyaW9kL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMjQ0MDk3Zi4uZDc3NGUzOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92YWxpZGF0ZWF0bW9zdG9uY2VwZXJpb2QvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3ZhbGlkYXRlYXRtb3N0b25jZXBlcmlvZC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOSArMTUsMTkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImpkYmMtdmFsaWRhdGVhdG1vc3RvbmNlcGVyaW9kIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0icG9vbG5hbWUiIHZhbHVlPSJqZGJjLXZhbGlkYXRlYXRtb3N0b25jZXBlcmlvZCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92YWxpZGF0ZWF0bW9zdG9uY2VwZXJpb2QvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92YWxpZGF0ZWF0bW9zdG9uY2VwZXJpb2QvYnVpbGQueG1sCmluZGV4IDdjN2VlN2EuLmQ2ZjRhZjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdmFsaWRhdGVhdG1vc3RvbmNlcGVyaW9kL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3ZhbGlkYXRlYXRtb3N0b25jZXBlcmlvZC9idWlsZC54bWwKQEAgLTk4LDggKzk4LDggQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IjEiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCi0JPGFudGNhbGwgdGFyZ2V0PSJzdG9wLWRlcmJ5Ii8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJzdGFydC1kZXJieSIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0ic3RvcC1kZXJieSIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0ic3RhcnQtZGVyYnkiLz4KIAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iMiIvPgpAQCAtMTExLDggKzExMSw4IEBACiAgICAgICAgICAgICAgICAgICAgdmFsdWU9IiR7cmVzb3VyY2VzLmRvdHRlZG5hbWUucHJlZml4fS5qZGJjLWNvbm5lY3Rpb24tcG9vbC4ke3Bvb2xuYW1lfS52YWxpZGF0ZV9hdG1vc3Rfb25jZV9wZXJpb2RfaW5fc2Vjb25kcz02MCIvPgogICAgICAgICA8L2FudGNhbGw+CiAKLQk8YW50Y2FsbCB0YXJnZXQ9InN0b3AtZGVyYnkiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9InN0YXJ0LWRlcmJ5Ii8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJzdG9wLWRlcmJ5Ii8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJzdGFydC1kZXJieSIvPgogCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3ZhbGlkYXRlYXRtb3N0b25jZXBlcmlvZC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3ZhbGlkYXRlYXRtb3N0b25jZXBlcmlvZC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMDMyNzEzMy4uODI3NjZhOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92YWxpZGF0ZWF0bW9zdG9uY2VwZXJpb2QvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdmFsaWRhdGVhdG1vc3RvbmNlcGVyaW9kL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzYsNyArMzYsNyBAQAogICAgICAgICAgICAgICAgIGphdmF4LnJtaS5Qb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqUmVmLCBTaW1wbGVCTVBIb21lLmNsYXNzKTsKIAogICAgICAgICBTaW1wbGVCTVAgY29udmFsQk1QID0gY29udmFsQk1QSG9tZS5jcmVhdGUoKTsKLQlzdGF0LmFkZERlc2NyaXB0aW9uKCJKREJDIFZhbGlkYXRlIEF0bW9zdCBPbmNlIFBlcmlvZCBUZXN0cyIpOworICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIkpEQkMgVmFsaWRhdGUgQXRtb3N0IE9uY2UgUGVyaW9kIFRlc3RzIik7CiAKICAgICAgICAgaWYgKGFyZ3MgIT0gbnVsbCAmJiBhcmdzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgIFN0cmluZyBwYXJhbSA9IGFyZ3NbMF07CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3ZhbGlkYXRlYXRtb3N0b25jZXBlcmlvZC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92YWxpZGF0ZWF0bW9zdG9uY2VwZXJpb2QvZWpiL1NpbXBsZUJNUEJlYW4uamF2YQppbmRleCA2MWJlYTIzLi5lMGRmNzMzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3ZhbGlkYXRlYXRtb3N0b25jZXBlcmlvZC9lamIvU2ltcGxlQk1QQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdmFsaWRhdGVhdG1vc3RvbmNlcGVyaW9kL2VqYi9TaW1wbGVCTVBCZWFuLmphdmEKQEAgLTQxLDcgKzQxLDcgQEAKICAgICB9CiAKIAotICAgCisKIC8qIEdldCBhIHNpbmdsZSBjb25uZWN0aW9uIGFuZCBjbG9zZSBpdCAqLwogICAgIHB1YmxpYyBib29sZWFuIHRlc3QxKCkgewogICAgICAgICBDb25uZWN0aW9uIGNvbm4gPSBudWxsOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92YWxpZGF0ZWF0bW9zdG9uY2VwZXJpb2Qvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92YWxpZGF0ZWF0bW9zdG9uY2VwZXJpb2Qvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IGU0OTE0ZjYuLmYyNTYwNzYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdmFsaWRhdGVhdG1vc3RvbmNlcGVyaW9kL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3ZhbGlkYXRlYXRtb3N0b25jZXBlcmlvZC9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsNyArMSw3IEBACi1Ecm9wIHRhYmxlIE9fQ3VzdG9tZXI7DQotDQotQ1JFQVRFIFRBQkxFIE9fQ3VzdG9tZXIgKA0KLSAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwNCi0gICAgY19waG9uZSAgICAgICAgIGNoYXIoMTYpDQotKTsNCi0NCitEcm9wIHRhYmxlIE9fQ3VzdG9tZXI7CisKK0NSRUFURSBUQUJMRSBPX0N1c3RvbWVyICgKKyAgICBjX2lkICAgICAgICAgICAgaW50ZWdlciBub3QgbnVsbCwKKyAgICBjX3Bob25lICAgICAgICAgY2hhcigxNikKKyk7CisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdmFsaWRhdGVhdG1vc3RvbmNlcGVyaW9kL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qZGJjL3ZhbGlkYXRlYXRtb3N0b25jZXBlcmlvZC9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCmluZGV4IDcwZDFmY2MuLmQ4NTRiOTUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2pkYmMvdmFsaWRhdGVhdG1vc3RvbmNlcGVyaW9kL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvamRiYy92YWxpZGF0ZWF0bW9zdG9uY2VwZXJpb2Qvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbApAQCAtMSArMSBAQAotRHJvcCB0YWJsZSBPX0N1c3RvbWVyOw0KK0Ryb3AgdGFibGUgT19DdXN0b21lcjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9BQ0MxL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvQUNDMS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGE5ODc4OWQuLjdkYTY1MzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9BQ0MxL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L0FDQzEvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iSk1TWERlbGl2ZXJ5Q291bnQtYWNjMSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9BQ0MxL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9BQ0MxL2J1aWxkLnhtbAppbmRleCAxNzM0YjhkLi44ZTg2ODdhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvQUNDMS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L0FDQzEvYnVpbGQueG1sCkBAIC0zNCwxMiArMzQsMTIgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY2xpZW50Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2UtY2xpZW50Ii8+CkBAIC00OCwxNCArNDgsMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0icGFja2FnZS1jbGllbnQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgPGRlbGV0ZSBmaWxlPSIke2FwcGNsaWVudC5qYXJ9Ii8+Ci0gICAgICA8ZWNobyBtZXNzYWdlPSJjb21tb24ueG1sOiBHZW5lcmF0aW5nIGFwcGNsaWVudC1qYXIgaW5zaWRlIGJ1aWxkIGRpcmVjdG9yeSIgCisgICAgICA8ZWNobyBtZXNzYWdlPSJjb21tb24ueG1sOiBHZW5lcmF0aW5nIGFwcGNsaWVudC1qYXIgaW5zaWRlIGJ1aWxkIGRpcmVjdG9yeSIKICAgICAgICAgICBsZXZlbD0idmVyYm9zZSIvPgogICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+CiAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgogICAgICAgPGNvcHkgZmlsZT0iJHthcHBsaWNhdGlvbi1jbGllbnQueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiAgICAgICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotICAgICAgPGphciBqYXJmaWxlPSIke2J1aWxkLmJhc2UuZGlyfS9hcmNoaXZlLyR7YXBwbmFtZX1BcHBDbGllbnQuamFyIiBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgCi0gICAgICAgIHVwZGF0ZT0idHJ1ZSIgaW5jbHVkZXMgPSIqKi8qQ2xpZW50LmNsYXNzIj4gICAgICAgICAKKyAgICAgIDxqYXIgamFyZmlsZT0iJHtidWlsZC5iYXNlLmRpcn0vYXJjaGl2ZS8ke2FwcG5hbWV9QXBwQ2xpZW50LmphciIgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCisgICAgICAgIHVwZGF0ZT0idHJ1ZSIgaW5jbHVkZXMgPSIqKi8qQ2xpZW50LmNsYXNzIj4KICAgICAgICAgPG1hbmlmZXN0PgogICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9Ik1haW4tQ2xhc3MiIHZhbHVlPSJvcmcuZ2xhc3NmaXNoLnRlc3Quam1zLmptc3hkZWxpdmVyeWNvdW50LmNsaWVudC5DbGllbnQiLz4KICAgICAgICAgPC9tYW5pZmVzdD4KQEAgLTY4LDE0ICs2OCwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlLWNsaWVudDIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxkZWxldGUgZmlsZT0iJHthcHBjbGllbnQuamFyfSIvPgotICAgICAgPGVjaG8gbWVzc2FnZT0iY29tbW9uLnhtbDogR2VuZXJhdGluZyBhcHBjbGllbnQtamFyIGluc2lkZSBidWlsZCBkaXJlY3RvcnkiIAorICAgICAgPGVjaG8gbWVzc2FnZT0iY29tbW9uLnhtbDogR2VuZXJhdGluZyBhcHBjbGllbnQtamFyIGluc2lkZSBidWlsZCBkaXJlY3RvcnkiCiAgICAgICAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgogICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KICAgICAgIDxjb3B5IGZpbGU9IiR7YXBwbGljYXRpb24tY2xpZW50LnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogICAgICAgPGNvcHkgZmlsZT0iJHtzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLSAgICAgIDxqYXIgamFyZmlsZT0iJHtidWlsZC5iYXNlLmRpcn0vYXJjaGl2ZS8ke2FwcG5hbWV9QXBwQ2xpZW50Mi5qYXIiIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiAKLSAgICAgICAgdXBkYXRlPSJ0cnVlIiBpbmNsdWRlcyA9IioqLypDbGllbnQyLmNsYXNzIj4gICAgICAgICAKKyAgICAgIDxqYXIgamFyZmlsZT0iJHtidWlsZC5iYXNlLmRpcn0vYXJjaGl2ZS8ke2FwcG5hbWV9QXBwQ2xpZW50Mi5qYXIiIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgorICAgICAgICB1cGRhdGU9InRydWUiIGluY2x1ZGVzID0iKiovKkNsaWVudDIuY2xhc3MiPgogICAgICAgICA8bWFuaWZlc3Q+CiAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iTWFpbi1DbGFzcyIgdmFsdWU9Im9yZy5nbGFzc2Zpc2gudGVzdC5qbXMuam1zeGRlbGl2ZXJ5Y291bnQuY2xpZW50LkNsaWVudDIiLz4KICAgICAgICAgPC9tYW5pZmVzdD4KQEAgLTkxLDcgKzkxLDcgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iY3JlYXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC0xMDgsMTQgKzEwOCwxNCBAQAogICAgICAgICAgICAgPGVudiBrZXk9IkFQUENQQVRIIiB2YWx1ZT0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiLz4KICAgICAgICAgPC9leGVjPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L0FDQzIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9BQ0MyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNTY3ODliMy4uY2Q2MjcwMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L0FDQzIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvQUNDMi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJKTVNYRGVsaXZlcnlDb3VudC1hY2MyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L0FDQzIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L0FDQzIvYnVpbGQueG1sCmluZGV4IDc0YTU4YTMuLjFlOGMyZGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9BQ0MyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvQUNDMi9idWlsZC54bWwKQEAgLTM0LDEyICszNCwxMiBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiAgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjbGllbnQiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1jbGllbnQiLz4KQEAgLTQ3LDE0ICs0NywxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJwYWNrYWdlLWNsaWVudCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICA8ZGVsZXRlIGZpbGU9IiR7YXBwY2xpZW50Lmphcn0iLz4KLSAgICAgIDxlY2hvIG1lc3NhZ2U9ImNvbW1vbi54bWw6IEdlbmVyYXRpbmcgYXBwY2xpZW50LWphciBpbnNpZGUgYnVpbGQgZGlyZWN0b3J5IiAKKyAgICAgIDxlY2hvIG1lc3NhZ2U9ImNvbW1vbi54bWw6IEdlbmVyYXRpbmcgYXBwY2xpZW50LWphciBpbnNpZGUgYnVpbGQgZGlyZWN0b3J5IgogICAgICAgICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CiAgICAgICA8Y29weSBmaWxlPSIke2FwcGxpY2F0aW9uLWNsaWVudC54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KICAgICAgIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci0gICAgICA8amFyIGphcmZpbGU9IiR7YnVpbGQuYmFzZS5kaXJ9L2FyY2hpdmUvJHthcHBuYW1lfUFwcENsaWVudC5qYXIiIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiAKLSAgICAgICAgdXBkYXRlPSJ0cnVlIiBpbmNsdWRlcyA9IioqLypDbGllbnQuY2xhc3MiPiAgICAgICAgIAorICAgICAgPGphciBqYXJmaWxlPSIke2J1aWxkLmJhc2UuZGlyfS9hcmNoaXZlLyR7YXBwbmFtZX1BcHBDbGllbnQuamFyIiBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKKyAgICAgICAgdXBkYXRlPSJ0cnVlIiBpbmNsdWRlcyA9IioqLypDbGllbnQuY2xhc3MiPgogICAgICAgICA8bWFuaWZlc3Q+CiAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iTWFpbi1DbGFzcyIgdmFsdWU9Im9yZy5nbGFzc2Zpc2gudGVzdC5qbXMuam1zeGRlbGl2ZXJ5Y291bnQuY2xpZW50LkNsaWVudCIvPgogICAgICAgICA8L21hbmlmZXN0PgpAQCAtNzAsNyArNzAsNyBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJjcmVhdGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTgzLDE0ICs4MywxNCBAQAogICAgICAgICAgICAgPGVudiBrZXk9IkFQUENQQVRIIiB2YWx1ZT0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiLz4KICAgICAgICAgPC9leGVjPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L01EQjEvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9NREIxL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMWUyMGVmNS4uNzczNDVmYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L01EQjEvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvTURCMS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IkpNU1hEZWxpdmVyeUNvdW50LW1kYjEiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9NREIxL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9NREIxL2J1aWxkLnhtbAppbmRleCA4ZjdlMGIxLi4zMTBiNDhmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvTURCMS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L01EQjEvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NiwxNCArNDYsMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL015U2Vzc2lvbkJlYW4qLmNsYXNzLCAqKi8qTWVzc2FnZUJlYW4uY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudC5jbGFzcywqKi9NeVNlc3Npb25CZWFuKi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImNyZWF0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtNzEsMjEgKzcxLDIxIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICA8amF2YSBmb3JrPSJvbiIgCisgICAgICAgIDxqYXZhIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50Lmphcjoke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSJvcmcuZ2xhc3NmaXNoLnRlc3Quam1zLmptc3hkZWxpdmVyeWNvdW50LmNsaWVudC5DbGllbnQiPgogICAgICAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0ib3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydCIgdmFsdWU9IiR7b3JiLnBvcnR9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9NREIxL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvTURCMS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCmluZGV4IDE1NzQ5NTYuLmQyNWZlNTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9NREIxL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L01EQjEvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQpAQCAtMjUsOCArMjUsOCBAQAogQFJlbW90ZQogcHVibGljIGludGVyZmFjZSBNeVNlc3Npb25CZWFuUmVtb3RlIHsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSZW1vdGVKTkRJTmFtZSA9ICBNeVNlc3Npb25CZWFuLmNsYXNzLmdldFNpbXBsZU5hbWUoKSArICIvcmVtb3RlIjsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlbmRNZXNzYWdlKFN0cmluZyB0ZXh0KTsKLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGNoZWNrTWVzc2FnZShTdHJpbmcgdGV4dCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvTURCMS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9NREIxL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCmluZGV4IGFjMDkwZmUuLjYwM2NmMDUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9NREIxL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9NREIxL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCkBAIC0yOSw5ICsyOSw5IEBACiB9KQogcHVibGljIGNsYXNzIE5ld01lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbi5jbGFzcy5nZXROYW1lKCkpOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50OwotICAgIAorCiAgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7CiAKQEAgLTQ1LDEwICs0NSwxMCBAQAogICAgIEBKTVNDb25uZWN0aW9uRmFjdG9yeSgiam1zL2ptc191bml0X3Rlc3RfUUNGIikKICAgICBASk1TU2Vzc2lvbk1vZGUoSk1TQ29udGV4dC5BVVRPX0FDS05PV0xFREdFKQogICAgIHByaXZhdGUgSk1TQ29udGV4dCBqbXNDb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIE5ld01lc3NhZ2VCZWFuKCkgewogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CkBAIC03Myw3ICs3Myw3IEBACiAgICAgICAgICAgICBMb2dnZXIuZ2V0TG9nZ2VyKE5ld01lc3NhZ2VCZWFuLmNsYXNzLmdldE5hbWUoKSkubG9nKExldmVsLlNFVkVSRSwgbnVsbCwgZXgpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHNlbmRNc2coYm9vbGVhbiBzdWNjZXNzLCBTdHJpbmcgbXNnKSB7CiAgICAgICAgIEpNU1Byb2R1Y2VyIHByb2R1Y2VyID0gam1zQ29udGV4dC5jcmVhdGVQcm9kdWNlcigpOwogICAgICAgICBUZXh0TWVzc2FnZSB0bXNnID0gam1zQ29udGV4dC5jcmVhdGVUZXh0TWVzc2FnZShzdWNjZXNzICsgIjoiICsgbXNnKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9NREIyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvTURCMi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDAyYTY1ZTcuLjZkNmY4N2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9NREIyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L01EQjIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJKTVNYRGVsaXZlcnlDb3VudC1tZGIyIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvTURCMi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvTURCMi9idWlsZC54bWwKaW5kZXggNzY2OGM2ZS4uNmJkYjZkYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L01EQjIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9NREIyL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTQgKzQ2LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9NeVNlc3Npb25CZWFuKi5jbGFzcywgKiovKk1lc3NhZ2VCZWFuLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQuY2xhc3MsKiovTXlTZXNzaW9uQmVhbiouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjMsNyArNjMsNyBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJjcmVhdGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTcxLDIxICs3MSwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPGphdmEgZm9yaz0ib24iIAorICAgICAgICA8amF2YSBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0ib3JnLmdsYXNzZmlzaC50ZXN0Lmptcy5qbXN4ZGVsaXZlcnljb3VudC5jbGllbnQuQ2xpZW50Ij4KICAgICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke29yYi5wb3J0fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvTURCMi9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L01EQjIvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQppbmRleCAxNTc0OTU2Li5kMjVmZTU1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvTURCMi9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9NREIyL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKQEAgLTI1LDggKzI1LDggQEAKIEBSZW1vdGUKIHB1YmxpYyBpbnRlcmZhY2UgTXlTZXNzaW9uQmVhblJlbW90ZSB7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUmVtb3RlSk5ESU5hbWUgPSAgTXlTZXNzaW9uQmVhbi5jbGFzcy5nZXRTaW1wbGVOYW1lKCkgKyAiL3JlbW90ZSI7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZW5kTWVzc2FnZShTdHJpbmcgdGV4dCk7Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja01lc3NhZ2UoU3RyaW5nIHRleHQpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L01EQjIvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvTURCMi9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQppbmRleCAyYzEyNGJkLi43NWM2M2NlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvTURCMi9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvTURCMi9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQpAQCAtMjksOSArMjksOSBAQAogfSkKIHB1YmxpYyBjbGFzcyBOZXdNZXNzYWdlQmVhbiBpbXBsZW1lbnRzIE1lc3NhZ2VMaXN0ZW5lciB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoTmV3TWVzc2FnZUJlYW4uY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGludCBjb3VudDsKLSAgICAKKwogICAgIEBSZXNvdXJjZQogICAgIHByaXZhdGUgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjOwogCkBAIC00NSwxMCArNDUsMTAgQEAKICAgICBASk1TQ29ubmVjdGlvbkZhY3RvcnkoImptcy9qbXNfdW5pdF90ZXN0X1FDRiIpCiAgICAgQEpNU1Nlc3Npb25Nb2RlKEpNU0NvbnRleHQuQVVUT19BQ0tOT1dMRURHRSkKICAgICBwcml2YXRlIEpNU0NvbnRleHQgam1zQ29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyBOZXdNZXNzYWdlQmVhbigpIHsKICAgICB9Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBAVHJhbnNhY3Rpb25BdHRyaWJ1dGUoVHJhbnNhY3Rpb25BdHRyaWJ1dGVUeXBlLk5PVF9TVVBQT1JURUQpCiAgICAgcHVibGljIHZvaWQgb25NZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewpAQCAtNzMsNyArNzMsNyBAQAogICAgICAgICAgICAgTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbi5jbGFzcy5nZXROYW1lKCkpLmxvZyhMZXZlbC5TRVZFUkUsIG51bGwsIGV4KTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBzZW5kTXNnKGJvb2xlYW4gc3VjY2VzcywgU3RyaW5nIG1zZykgewogICAgICAgICBKTVNQcm9kdWNlciBwcm9kdWNlciA9IGptc0NvbnRleHQuY3JlYXRlUHJvZHVjZXIoKTsKICAgICAgICAgVGV4dE1lc3NhZ2UgdG1zZyA9IGptc0NvbnRleHQuY3JlYXRlVGV4dE1lc3NhZ2Uoc3VjY2VzcyArICI6IiArIG1zZyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvTURCMy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L01EQjMvYnVpbGQucHJvcGVydGllcwppbmRleCAwYzU3YjEyLi40ZThhODFhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvTURCMy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9NREIzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iSk1TWERlbGl2ZXJ5Q291bnQtbWRiMyIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L01EQjMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L01EQjMvYnVpbGQueG1sCmluZGV4IDRiMTc5NTEuLjA4ZWYyNDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9NREIzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvTURCMy9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDE0ICs0NiwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovTXlTZXNzaW9uQmVhbiouY2xhc3MsICoqLypNZXNzYWdlQmVhbi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50LmNsYXNzLCoqL015U2Vzc2lvbkJlYW4qLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYzLDcgKzYzLDcgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iY3JlYXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC03MSwyMSArNzEsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxqYXZhIGZvcms9Im9uIiAKKyAgICAgICAgPGphdmEgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9Im9yZy5nbGFzc2Zpc2gudGVzdC5qbXMuam1zeGRlbGl2ZXJ5Y291bnQuY2xpZW50LkNsaWVudCI+CiAgICAgICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0IiB2YWx1ZT0iJHtvcmIucG9ydH0iLz4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L01EQjMvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9NREIzL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKaW5kZXggMTU3NDk1Ni4uZDI1ZmU1NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L01EQjMvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvTURCMy9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCkBAIC0yNSw4ICsyNSw4IEBACiBAUmVtb3RlCiBwdWJsaWMgaW50ZXJmYWNlIE15U2Vzc2lvbkJlYW5SZW1vdGUgewogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJlbW90ZUpORElOYW1lID0gIE15U2Vzc2lvbkJlYW4uY2xhc3MuZ2V0U2ltcGxlTmFtZSgpICsgIi9yZW1vdGUiOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2VuZE1lc3NhZ2UoU3RyaW5nIHRleHQpOwotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gY2hlY2tNZXNzYWdlKFN0cmluZyB0ZXh0KTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9NREIzL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L01EQjMvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKaW5kZXggNDg3ZmJlZS4uOGI4OWEyMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L01EQjMvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L01EQjMvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKQEAgLTI5LDkgKzI5LDkgQEAKIH0pCiBwdWJsaWMgY2xhc3MgTmV3TWVzc2FnZUJlYW4gaW1wbGVtZW50cyBNZXNzYWdlTGlzdGVuZXIgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKE5ld01lc3NhZ2VCZWFuLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnQ7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtNDUsMTAgKzQ1LDEwIEBACiAgICAgQEpNU0Nvbm5lY3Rpb25GYWN0b3J5KCJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIEBKTVNTZXNzaW9uTW9kZShKTVNDb250ZXh0LkFVVE9fQUNLTk9XTEVER0UpCiAgICAgcHJpdmF0ZSBKTVNDb250ZXh0IGptc0NvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4oKSB7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5SRVFVSVJFRCkKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CkBAIC03Myw3ICs3Myw3IEBACiAgICAgICAgICAgICBMb2dnZXIuZ2V0TG9nZ2VyKE5ld01lc3NhZ2VCZWFuLmNsYXNzLmdldE5hbWUoKSkubG9nKExldmVsLlNFVkVSRSwgbnVsbCwgZXgpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHNlbmRNc2coYm9vbGVhbiBzdWNjZXNzLCBTdHJpbmcgbXNnKSB7CiAgICAgICAgIEpNU1Byb2R1Y2VyIHByb2R1Y2VyID0gam1zQ29udGV4dC5jcmVhdGVQcm9kdWNlcigpOwogICAgICAgICBUZXh0TWVzc2FnZSB0bXNnID0gam1zQ29udGV4dC5jcmVhdGVUZXh0TWVzc2FnZShzdWNjZXNzICsgIjoiICsgbXNnKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9NREI0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvTURCNC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDQxMmExNjQuLjVjNzg4NTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9NREI0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L01EQjQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJKTVNYRGVsaXZlcnlDb3VudC1tZGI0Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvTURCNC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvTURCNC9idWlsZC54bWwKaW5kZXggZDlkMTFmNy4uNzJiYzA1MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L01EQjQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9NREI0L2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTQgKzQ2LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9NeVNlc3Npb25CZWFuKi5jbGFzcywgKiovKk1lc3NhZ2VCZWFuLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQuY2xhc3MsKiovTXlTZXNzaW9uQmVhbiouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjMsNyArNjMsNyBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJjcmVhdGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTcxLDIxICs3MSwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPGphdmEgZm9yaz0ib24iIAorICAgICAgICA8amF2YSBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0ib3JnLmdsYXNzZmlzaC50ZXN0Lmptcy5qbXN4ZGVsaXZlcnljb3VudC5jbGllbnQuQ2xpZW50Ij4KICAgICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke29yYi5wb3J0fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvTURCNC9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L01EQjQvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQppbmRleCAxNTc0OTU2Li5kMjVmZTU1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvTURCNC9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9NREI0L2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKQEAgLTI1LDggKzI1LDggQEAKIEBSZW1vdGUKIHB1YmxpYyBpbnRlcmZhY2UgTXlTZXNzaW9uQmVhblJlbW90ZSB7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUmVtb3RlSk5ESU5hbWUgPSAgTXlTZXNzaW9uQmVhbi5jbGFzcy5nZXRTaW1wbGVOYW1lKCkgKyAiL3JlbW90ZSI7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZW5kTWVzc2FnZShTdHJpbmcgdGV4dCk7Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja01lc3NhZ2UoU3RyaW5nIHRleHQpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L01EQjQvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvTURCNC9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQppbmRleCBhNDBjNGI2Li42MjhjYjkxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvTURCNC9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvTURCNC9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQpAQCAtMjksOSArMjksOSBAQAogfSkKIHB1YmxpYyBjbGFzcyBOZXdNZXNzYWdlQmVhbiBpbXBsZW1lbnRzIE1lc3NhZ2VMaXN0ZW5lciB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoTmV3TWVzc2FnZUJlYW4uY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGludCBjb3VudDsKLSAgICAKKwogICAgIEBSZXNvdXJjZQogICAgIHByaXZhdGUgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjOwogCkBAIC00NSwxMCArNDUsMTAgQEAKICAgICBASk1TQ29ubmVjdGlvbkZhY3RvcnkoImptcy9qbXNfdW5pdF90ZXN0X1FDRiIpCiAgICAgQEpNU1Nlc3Npb25Nb2RlKEpNU0NvbnRleHQuQVVUT19BQ0tOT1dMRURHRSkKICAgICBwcml2YXRlIEpNU0NvbnRleHQgam1zQ29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyBOZXdNZXNzYWdlQmVhbigpIHsKICAgICB9Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBAVHJhbnNhY3Rpb25BdHRyaWJ1dGUoVHJhbnNhY3Rpb25BdHRyaWJ1dGVUeXBlLlJFUVVJUkVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKQEAgLTc0LDcgKzc0LDcgQEAKICAgICAgICAgICAgIExvZ2dlci5nZXRMb2dnZXIoTmV3TWVzc2FnZUJlYW4uY2xhc3MuZ2V0TmFtZSgpKS5sb2coTGV2ZWwuU0VWRVJFLCBudWxsLCBleCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhib29sZWFuIHN1Y2Nlc3MsIFN0cmluZyBtc2cpIHsKICAgICAgICAgSk1TUHJvZHVjZXIgcHJvZHVjZXIgPSBqbXNDb250ZXh0LmNyZWF0ZVByb2R1Y2VyKCk7CiAgICAgICAgIFRleHRNZXNzYWdlIHRtc2cgPSBqbXNDb250ZXh0LmNyZWF0ZVRleHRNZXNzYWdlKHN1Y2Nlc3MgKyAiOiIgKyBtc2cpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9idWlsZC54bWwKaW5kZXggY2Y3NDM0My4uMzFlNzA4YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvYnVpbGQueG1sCkBAIC04OCw5ICs4OCw5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGptcyB0ZXN0cykKLQk8L2VjaG8+CisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBqbXMgdGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L3Nlc3Npb25CZWFuMS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L3Nlc3Npb25CZWFuMS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDlmNjEyZDQuLjI2NWY0NjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9zZXNzaW9uQmVhbjEvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvc2Vzc2lvbkJlYW4xL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iSk1TWERlbGl2ZXJ5Q291bnQtc3RhdGVsZXNzLWVqYjEiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9zZXNzaW9uQmVhbjEvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L3Nlc3Npb25CZWFuMS9idWlsZC54bWwKaW5kZXggNzcwZTBkMi4uMTAxNzg5YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L3Nlc3Npb25CZWFuMS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L3Nlc3Npb25CZWFuMS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDE0ICs0NiwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovTXlTZXNzaW9uQmVhbiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudC5jbGFzcywqKi9NeVNlc3Npb25CZWFuKi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImNyZWF0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtNzEsMjEgKzcxLDIxIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICA8amF2YSBmb3JrPSJvbiIgCisgICAgICAgIDxqYXZhIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50Lmphcjoke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSJvcmcuZ2xhc3NmaXNoLnRlc3Quam1zLmptc3hkZWxpdmVyeWNvdW50LmNsaWVudC5DbGllbnQiPgogICAgICAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0ib3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydCIgdmFsdWU9IiR7b3JiLnBvcnR9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9zZXNzaW9uQmVhbjEvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9zZXNzaW9uQmVhbjEvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQppbmRleCBmMWI5ZTRiLi44YmJiNTM0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvc2Vzc2lvbkJlYW4xL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L3Nlc3Npb25CZWFuMS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCkBAIC0yNSw5ICsyNSw5IEBACiBAUmVtb3RlCiBwdWJsaWMgaW50ZXJmYWNlIE15U2Vzc2lvbkJlYW5SZW1vdGUgewogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJlbW90ZUpORElOYW1lID0gIE15U2Vzc2lvbkJlYW4uY2xhc3MuZ2V0U2ltcGxlTmFtZSgpICsgIi9yZW1vdGUiOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2VuZE1lc3NhZ2UoU3RyaW5nIHRleHQpOwotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gY2hlY2tNZXNzYWdlMShTdHJpbmcgdGV4dCk7CiAKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja01lc3NhZ2UyKFN0cmluZyB0ZXh0KTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9zZXNzaW9uQmVhbjIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9zZXNzaW9uQmVhbjIvYnVpbGQucHJvcGVydGllcwppbmRleCA4MjlmNjIxLi5iYWUwOTEzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvc2Vzc2lvbkJlYW4yL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L3Nlc3Npb25CZWFuMi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IkpNU1hEZWxpdmVyeUNvdW50LXN0YXRlbGVzcy1lamIyIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvc2Vzc2lvbkJlYW4yL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9zZXNzaW9uQmVhbjIvYnVpbGQueG1sCmluZGV4IGU0ODgzOTYuLjg2NGUxY2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9zZXNzaW9uQmVhbjIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9zZXNzaW9uQmVhbjIvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NiwxNCArNDYsMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL015U2Vzc2lvbkJlYW4qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQuY2xhc3MsKiovTXlTZXNzaW9uQmVhbiouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjMsNyArNjMsNyBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJjcmVhdGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTcxLDIxICs3MSwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPGphdmEgZm9yaz0ib24iIAorICAgICAgICA8amF2YSBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0ib3JnLmdsYXNzZmlzaC50ZXN0Lmptcy5qbXN4ZGVsaXZlcnljb3VudC5jbGllbnQuQ2xpZW50Ij4KICAgICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke29yYi5wb3J0fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvc2Vzc2lvbkJlYW4yL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvSk1TWERlbGl2ZXJ5Q291bnQvc2Vzc2lvbkJlYW4yL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKaW5kZXggZjFiOWU0Yi4uOGJiYjUzNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL0pNU1hEZWxpdmVyeUNvdW50L3Nlc3Npb25CZWFuMi9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9KTVNYRGVsaXZlcnlDb3VudC9zZXNzaW9uQmVhbjIvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQpAQCAtMjUsOSArMjUsOSBAQAogQFJlbW90ZQogcHVibGljIGludGVyZmFjZSBNeVNlc3Npb25CZWFuUmVtb3RlIHsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSZW1vdGVKTkRJTmFtZSA9ICBNeVNlc3Npb25CZWFuLmNsYXNzLmdldFNpbXBsZU5hbWUoKSArICIvcmVtb3RlIjsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlbmRNZXNzYWdlKFN0cmluZyB0ZXh0KTsKLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGNoZWNrTWVzc2FnZTEoU3RyaW5nIHRleHQpOwogCiAgICAgcHVibGljIGJvb2xlYW4gY2hlY2tNZXNzYWdlMihTdHJpbmcgdGV4dCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggODY4MDE1OC4uM2IzNTJlZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzdWJzY3JpcHRpb25TY29wZS1jbHVzdGVyLWNsdXN0ZXJTY29wZUR1cmFibGVXaXRoTmFtZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRoTmFtZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnhtbAppbmRleCAzMWI4YWE4Li42NGI3ODNhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsMTMgKzQ4LDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9NeVNlc3Npb25CZWFuKi5jbGFzcywgKiovKk1lc3NhZ2VCZWFuKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50LmNsYXNzLCoqL015U2Vzc2lvbkJlYW4qLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uLWNsdXN0ZXIiLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciBlbmRwb2ludCBhY3RpdmF0aW9uIi8+CkBAIC03NCw3ICs3NCw3IEBACiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IldhaXQgMTAgc2VjcyBmb3IgY2x1c3RlciBwcm9wYWdhdGlvbiIvPgogICAgICAgICA8c2xlZXAgc2Vjb25kcz0iMTAiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24sIHNldE9TUHJvcHMiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC05MCwyMSArOTAsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxqYXZhIGZvcms9Im9uIiAKKyAgICAgICAgPGphdmEgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9Im9yZy5nbGFzc2Zpc2gudGVzdC5qbXMuYWN0aXZhdGlvbnByb3BlcnRpZXMuY2xpZW50LkNsaWVudCI+CiAgICAgICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0IiB2YWx1ZT0iJHtkZXBsb3kuY2x1c3Rlcmluc3RhbmNlMS5vcmJwb3J0fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uLWNsdXN0ZXIiLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQppbmRleCBjZmFkMzhhLi40N2IyNWE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCkBAIC0yNSw4ICsyNSw4IEBACiBAUmVtb3RlCiBwdWJsaWMgaW50ZXJmYWNlIE15U2Vzc2lvbkJlYW5SZW1vdGUgewogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJlbW90ZUpORElOYW1lID0gIE15U2Vzc2lvbkJlYW4uY2xhc3MuZ2V0U2ltcGxlTmFtZSgpICsgIi9yZW1vdGUiOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2VuZE1lc3NhZ2UoU3RyaW5nIHRleHQpOwotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBjaGVja01lc3NhZ2UoU3RyaW5nIHRleHQpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKaW5kZXggNWM3MmVmYi4uNjI2Mzc4NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiB9KQogcHVibGljIGNsYXNzIE5ld01lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbi5jbGFzcy5nZXROYW1lKCkpOwotICAgIAorCiAgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7CiAKQEAgLTQyLDE2ICs0MiwxNiBAQAogICAgIEBKTVNDb25uZWN0aW9uRmFjdG9yeSgiam1zL2ptc191bml0X3Rlc3RfUUNGIikKICAgICBASk1TU2Vzc2lvbk1vZGUoSk1TQ29udGV4dC5BVVRPX0FDS05PV0xFREdFKQogICAgIHByaXZhdGUgSk1TQ29udGV4dCBqbXNDb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIE5ld01lc3NhZ2VCZWFuKCkgewogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CiAgICAgICAgIHNlbmRNc2cobWVzc2FnZSk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHNlbmRNc2coTWVzc2FnZSBtc2cpIHsKICAgICAgICAgSk1TUHJvZHVjZXIgcHJvZHVjZXIgPSBqbXNDb250ZXh0LmNyZWF0ZVByb2R1Y2VyKCk7CiAgICAgICAgIHByb2R1Y2VyLnNlbmQocmVzdWx0UXVldWUsIG1zZyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCmluZGV4IDg1ZDc4MjguLjNkMWUxMzkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiB9KQogcHVibGljIGNsYXNzIE5ld01lc3NhZ2VCZWFuMiBpbXBsZW1lbnRzIE1lc3NhZ2VMaXN0ZW5lciB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoTmV3TWVzc2FnZUJlYW4yLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtNDIsMTYgKzQyLDE2IEBACiAgICAgQEpNU0Nvbm5lY3Rpb25GYWN0b3J5KCJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIEBKTVNTZXNzaW9uTW9kZShKTVNDb250ZXh0LkFVVE9fQUNLTk9XTEVER0UpCiAgICAgcHJpdmF0ZSBKTVNDb250ZXh0IGptc0NvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4yKCkgewogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CiAgICAgICAgIHNlbmRNc2cobWVzc2FnZSk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHNlbmRNc2coTWVzc2FnZSBtc2cpIHsKICAgICAgICAgSk1TUHJvZHVjZXIgcHJvZHVjZXIgPSBqbXNDb250ZXh0LmNyZWF0ZVByb2R1Y2VyKCk7CiAgICAgICAgIHByb2R1Y2VyLnNlbmQocmVzdWx0UXVldWUsIG1zZyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYzI4ZWJjZC4uMjU5YzYxNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzdWJzY3JpcHRpb25TY29wZS1jbHVzdGVyLWNsdXN0ZXJTY29wZUR1cmFibGVXaXRob3V0TmFtZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnhtbAppbmRleCAyNmM4ZDcyLi4yNjZkMmIzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsMTMgKzQ4LDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9NeVNlc3Npb25CZWFuKi5jbGFzcywgKiovKk1lc3NhZ2VCZWFuKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50LmNsYXNzLCoqL015U2Vzc2lvbkJlYW4qLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uLWNsdXN0ZXIiLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciBlbmRwb2ludCBhY3RpdmF0aW9uIi8+CkBAIC03NCw3ICs3NCw3IEBACiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IldhaXQgMTAgc2VjcyBmb3IgY2x1c3RlciBwcm9wYWdhdGlvbiIvPgogICAgICAgICA8c2xlZXAgc2Vjb25kcz0iMTAiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24sIHNldE9TUHJvcHMiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC05MCwyMSArOTAsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxqYXZhIGZvcms9Im9uIiAKKyAgICAgICAgPGphdmEgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9Im9yZy5nbGFzc2Zpc2gudGVzdC5qbXMuYWN0aXZhdGlvbnByb3BlcnRpZXMuY2xpZW50LkNsaWVudCI+CiAgICAgICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0IiB2YWx1ZT0iJHtkZXBsb3kuY2x1c3Rlcmluc3RhbmNlMS5vcmJwb3J0fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uLWNsdXN0ZXIiLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQppbmRleCBjZmFkMzhhLi40N2IyNWE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCkBAIC0yNSw4ICsyNSw4IEBACiBAUmVtb3RlCiBwdWJsaWMgaW50ZXJmYWNlIE15U2Vzc2lvbkJlYW5SZW1vdGUgewogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJlbW90ZUpORElOYW1lID0gIE15U2Vzc2lvbkJlYW4uY2xhc3MuZ2V0U2ltcGxlTmFtZSgpICsgIi9yZW1vdGUiOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2VuZE1lc3NhZ2UoU3RyaW5nIHRleHQpOwotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBjaGVja01lc3NhZ2UoU3RyaW5nIHRleHQpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKaW5kZXggOTczMWI5ZS4uZTIwMjA3ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiB9KQogcHVibGljIGNsYXNzIE5ld01lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbi5jbGFzcy5nZXROYW1lKCkpOwotICAgIAorCiAgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7CiAKQEAgLTQxLDE2ICs0MSwxNiBAQAogICAgIEBKTVNDb25uZWN0aW9uRmFjdG9yeSgiam1zL2ptc191bml0X3Rlc3RfUUNGIikKICAgICBASk1TU2Vzc2lvbk1vZGUoSk1TQ29udGV4dC5BVVRPX0FDS05PV0xFREdFKQogICAgIHByaXZhdGUgSk1TQ29udGV4dCBqbXNDb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIE5ld01lc3NhZ2VCZWFuKCkgewogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CiAgICAgICAgIHNlbmRNc2cobWVzc2FnZSk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHNlbmRNc2coTWVzc2FnZSBtc2cpIHsKICAgICAgICAgSk1TUHJvZHVjZXIgcHJvZHVjZXIgPSBqbXNDb250ZXh0LmNyZWF0ZVByb2R1Y2VyKCk7CiAgICAgICAgIHByb2R1Y2VyLnNlbmQocmVzdWx0UXVldWUsIG1zZyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCmluZGV4IDIzYTg5MzYuLmFiNTU3NjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiB9KQogcHVibGljIGNsYXNzIE5ld01lc3NhZ2VCZWFuMiBpbXBsZW1lbnRzIE1lc3NhZ2VMaXN0ZW5lciB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoTmV3TWVzc2FnZUJlYW4yLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtNDEsMTYgKzQxLDE2IEBACiAgICAgQEpNU0Nvbm5lY3Rpb25GYWN0b3J5KCJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIEBKTVNTZXNzaW9uTW9kZShKTVNDb250ZXh0LkFVVE9fQUNLTk9XTEVER0UpCiAgICAgcHJpdmF0ZSBKTVNDb250ZXh0IGptc0NvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4yKCkgewogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CiAgICAgICAgIHNlbmRNc2cobWVzc2FnZSk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHNlbmRNc2coTWVzc2FnZSBtc2cpIHsKICAgICAgICAgSk1TUHJvZHVjZXIgcHJvZHVjZXIgPSBqbXNDb250ZXh0LmNyZWF0ZVByb2R1Y2VyKCk7CiAgICAgICAgIHByb2R1Y2VyLnNlbmQocmVzdWx0UXVldWUsIG1zZyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNzdkZThhNS4uMzhlZmJhYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzdWJzY3JpcHRpb25TY29wZS1jbHVzdGVyLWNsdXN0ZXJTY29wZU5vbkR1cmFibGVXaXRoTmFtZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnhtbAppbmRleCBhYWM2OTUwLi5jYzU3NDcwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsMTMgKzQ4LDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9NeVNlc3Npb25CZWFuKi5jbGFzcywgKiovKk1lc3NhZ2VCZWFuKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50LmNsYXNzLCoqL015U2Vzc2lvbkJlYW4qLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uLWNsdXN0ZXIiLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciBjbHVzdGVyIHByb3BhZ2F0aW9uIi8+CkBAIC03NCw3ICs3NCw3IEBACiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IldhaXQgMTAgc2VjcyBmb3IgY2x1c3RlciBwcm9wYWdhdGlvbiIvPgogICAgICAgICA8c2xlZXAgc2Vjb25kcz0iMTAiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24sIHNldE9TUHJvcHMiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC05MCwyMSArOTAsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxqYXZhIGZvcms9Im9uIiAKKyAgICAgICAgPGphdmEgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9Im9yZy5nbGFzc2Zpc2gudGVzdC5qbXMuYWN0aXZhdGlvbnByb3BlcnRpZXMuY2xpZW50LkNsaWVudCI+CiAgICAgICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0IiB2YWx1ZT0iJHtkZXBsb3kuY2x1c3Rlcmluc3RhbmNlMS5vcmJwb3J0fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uLWNsdXN0ZXIiLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQppbmRleCBjZmFkMzhhLi40N2IyNWE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCkBAIC0yNSw4ICsyNSw4IEBACiBAUmVtb3RlCiBwdWJsaWMgaW50ZXJmYWNlIE15U2Vzc2lvbkJlYW5SZW1vdGUgewogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJlbW90ZUpORElOYW1lID0gIE15U2Vzc2lvbkJlYW4uY2xhc3MuZ2V0U2ltcGxlTmFtZSgpICsgIi9yZW1vdGUiOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2VuZE1lc3NhZ2UoU3RyaW5nIHRleHQpOwotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBjaGVja01lc3NhZ2UoU3RyaW5nIHRleHQpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKaW5kZXggNjBhZGJjMC4uM2E0MDIzMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiB9KQogcHVibGljIGNsYXNzIE5ld01lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbi5jbGFzcy5nZXROYW1lKCkpOwotICAgIAorCiAgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7CiAKQEAgLTQyLDE2ICs0MiwxNiBAQAogICAgIEBKTVNDb25uZWN0aW9uRmFjdG9yeSgiam1zL2ptc191bml0X3Rlc3RfUUNGIikKICAgICBASk1TU2Vzc2lvbk1vZGUoSk1TQ29udGV4dC5BVVRPX0FDS05PV0xFREdFKQogICAgIHByaXZhdGUgSk1TQ29udGV4dCBqbXNDb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIE5ld01lc3NhZ2VCZWFuKCkgewogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CiAgICAgICAgIHNlbmRNc2cobWVzc2FnZSk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHNlbmRNc2coTWVzc2FnZSBtc2cpIHsKICAgICAgICAgSk1TUHJvZHVjZXIgcHJvZHVjZXIgPSBqbXNDb250ZXh0LmNyZWF0ZVByb2R1Y2VyKCk7CiAgICAgICAgIHByb2R1Y2VyLnNlbmQocmVzdWx0UXVldWUsIG1zZyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCmluZGV4IDljNDMxNDIuLjA4M2ZkNmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiB9KQogcHVibGljIGNsYXNzIE5ld01lc3NhZ2VCZWFuMiBpbXBsZW1lbnRzIE1lc3NhZ2VMaXN0ZW5lciB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoTmV3TWVzc2FnZUJlYW4yLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtNDIsMTYgKzQyLDE2IEBACiAgICAgQEpNU0Nvbm5lY3Rpb25GYWN0b3J5KCJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIEBKTVNTZXNzaW9uTW9kZShKTVNDb250ZXh0LkFVVE9fQUNLTk9XTEVER0UpCiAgICAgcHJpdmF0ZSBKTVNDb250ZXh0IGptc0NvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4yKCkgewogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CiAgICAgICAgIHNlbmRNc2cobWVzc2FnZSk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHNlbmRNc2coTWVzc2FnZSBtc2cpIHsKICAgICAgICAgSk1TUHJvZHVjZXIgcHJvZHVjZXIgPSBqbXNDb250ZXh0LmNyZWF0ZVByb2R1Y2VyKCk7CiAgICAgICAgIHByb2R1Y2VyLnNlbmQocmVzdWx0UXVldWUsIG1zZyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYzVjZjU0Yy4uOTc3ZTFkNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzdWJzY3JpcHRpb25TY29wZS1jbHVzdGVyLWNsdXN0ZXJTY29wZU5vbkR1cmFibGVXaXRob3V0TmFtZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnhtbAppbmRleCA0NGMwMzNhLi41OTg1MmU2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsMTMgKzQ4LDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9NeVNlc3Npb25CZWFuKi5jbGFzcywgKiovKk1lc3NhZ2VCZWFuKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50LmNsYXNzLCoqL015U2Vzc2lvbkJlYW4qLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uLWNsdXN0ZXIiLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciBjbHVzdGVyIHByb3BhZ2F0aW9uIi8+CkBAIC03NCw3ICs3NCw3IEBACiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IldhaXQgMTAgc2VjcyBmb3IgY2x1c3RlciBwcm9wYWdhdGlvbiIvPgogICAgICAgICA8c2xlZXAgc2Vjb25kcz0iMTAiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24sIHNldE9TUHJvcHMiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC05MCwyMSArOTAsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxqYXZhIGZvcms9Im9uIiAKKyAgICAgICAgPGphdmEgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9Im9yZy5nbGFzc2Zpc2gudGVzdC5qbXMuYWN0aXZhdGlvbnByb3BlcnRpZXMuY2xpZW50LkNsaWVudCI+CiAgICAgICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0IiB2YWx1ZT0iJHtkZXBsb3kuY2x1c3Rlcmluc3RhbmNlMS5vcmJwb3J0fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uLWNsdXN0ZXIiLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQppbmRleCBjZmFkMzhhLi40N2IyNWE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCkBAIC0yNSw4ICsyNSw4IEBACiBAUmVtb3RlCiBwdWJsaWMgaW50ZXJmYWNlIE15U2Vzc2lvbkJlYW5SZW1vdGUgewogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJlbW90ZUpORElOYW1lID0gIE15U2Vzc2lvbkJlYW4uY2xhc3MuZ2V0U2ltcGxlTmFtZSgpICsgIi9yZW1vdGUiOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2VuZE1lc3NhZ2UoU3RyaW5nIHRleHQpOwotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBjaGVja01lc3NhZ2UoU3RyaW5nIHRleHQpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKaW5kZXggNTU3NjllMy4uMWRmNTQ1NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiB9KQogcHVibGljIGNsYXNzIE5ld01lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbi5jbGFzcy5nZXROYW1lKCkpOwotICAgIAorCiAgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7CiAKQEAgLTQxLDE2ICs0MSwxNiBAQAogICAgIEBKTVNDb25uZWN0aW9uRmFjdG9yeSgiam1zL2ptc191bml0X3Rlc3RfUUNGIikKICAgICBASk1TU2Vzc2lvbk1vZGUoSk1TQ29udGV4dC5BVVRPX0FDS05PV0xFREdFKQogICAgIHByaXZhdGUgSk1TQ29udGV4dCBqbXNDb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIE5ld01lc3NhZ2VCZWFuKCkgewogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CiAgICAgICAgIHNlbmRNc2cobWVzc2FnZSk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHNlbmRNc2coTWVzc2FnZSBtc2cpIHsKICAgICAgICAgSk1TUHJvZHVjZXIgcHJvZHVjZXIgPSBqbXNDb250ZXh0LmNyZWF0ZVByb2R1Y2VyKCk7CiAgICAgICAgIHByb2R1Y2VyLnNlbmQocmVzdWx0UXVldWUsIG1zZyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCmluZGV4IDk2MWQwYzkuLjEwYTVlYzIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiB9KQogcHVibGljIGNsYXNzIE5ld01lc3NhZ2VCZWFuMiBpbXBsZW1lbnRzIE1lc3NhZ2VMaXN0ZW5lciB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoTmV3TWVzc2FnZUJlYW4yLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtNDEsMTYgKzQxLDE2IEBACiAgICAgQEpNU0Nvbm5lY3Rpb25GYWN0b3J5KCJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIEBKTVNTZXNzaW9uTW9kZShKTVNDb250ZXh0LkFVVE9fQUNLTk9XTEVER0UpCiAgICAgcHJpdmF0ZSBKTVNDb250ZXh0IGptc0NvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4yKCkgewogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CiAgICAgICAgIHNlbmRNc2cobWVzc2FnZSk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHNlbmRNc2coTWVzc2FnZSBtc2cpIHsKICAgICAgICAgSk1TUHJvZHVjZXIgcHJvZHVjZXIgPSBqbXNDb250ZXh0LmNyZWF0ZVByb2R1Y2VyKCk7CiAgICAgICAgIHByb2R1Y2VyLnNlbmQocmVzdWx0UXVldWUsIG1zZyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcwppbmRleCBiNTUzOGUxLi5lMTFjNjYzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic3Vic2NyaXB0aW9uU2NvcGUtY2x1c3Rlci1pbnN0YW5jZVNjb3BlRHVyYWJsZVdpdGhOYW1lIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRoTmFtZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRoTmFtZS9idWlsZC54bWwKaW5kZXggZjAwZTMyZC4uZTI0YTg2OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aE5hbWUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsMTMgKzQ4LDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9NeVNlc3Npb25CZWFuKi5jbGFzcywgKiovKk1lc3NhZ2VCZWFuKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50LmNsYXNzLCoqL015U2Vzc2lvbkJlYW4qLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uLWNsdXN0ZXIiLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciBlbmRwb2ludCBhY3RpdmF0aW9uIi8+CkBAIC03NCw3ICs3NCw3IEBACiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IldhaXQgMTAgc2VjcyBmb3IgY2x1c3RlciBwcm9wYWdhdGlvbiIvPgogICAgICAgICA8c2xlZXAgc2Vjb25kcz0iMTAiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24sIHNldE9TUHJvcHMiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC05MCwyMSArOTAsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxqYXZhIGZvcms9Im9uIiAKKyAgICAgICAgPGphdmEgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9Im9yZy5nbGFzc2Zpc2gudGVzdC5qbXMuYWN0aXZhdGlvbnByb3BlcnRpZXMuY2xpZW50LkNsaWVudCI+CiAgICAgICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0IiB2YWx1ZT0iJHtkZXBsb3kuY2x1c3Rlcmluc3RhbmNlMS5vcmJwb3J0fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uLWNsdXN0ZXIiLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCmluZGV4IGNmYWQzOGEuLjQ3YjI1YTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQpAQCAtMjUsOCArMjUsOCBAQAogQFJlbW90ZQogcHVibGljIGludGVyZmFjZSBNeVNlc3Npb25CZWFuUmVtb3RlIHsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSZW1vdGVKTkRJTmFtZSA9ICBNeVNlc3Npb25CZWFuLmNsYXNzLmdldFNpbXBsZU5hbWUoKSArICIvcmVtb3RlIjsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlbmRNZXNzYWdlKFN0cmluZyB0ZXh0KTsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgY2hlY2tNZXNzYWdlKFN0cmluZyB0ZXh0KTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKaW5kZXggNmJjOTIwYi4uNmZhZmEzYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKIH0pCiBwdWJsaWMgY2xhc3MgTmV3TWVzc2FnZUJlYW4gaW1wbGVtZW50cyBNZXNzYWdlTGlzdGVuZXIgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKE5ld01lc3NhZ2VCZWFuLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtNDIsMTYgKzQyLDE2IEBACiAgICAgQEpNU0Nvbm5lY3Rpb25GYWN0b3J5KCJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIEBKTVNTZXNzaW9uTW9kZShKTVNDb250ZXh0LkFVVE9fQUNLTk9XTEVER0UpCiAgICAgcHJpdmF0ZSBKTVNDb250ZXh0IGptc0NvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4oKSB7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgICAgICAgc2VuZE1zZyhtZXNzYWdlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhNZXNzYWdlIG1zZykgewogICAgICAgICBKTVNQcm9kdWNlciBwcm9kdWNlciA9IGptc0NvbnRleHQuY3JlYXRlUHJvZHVjZXIoKTsKICAgICAgICAgcHJvZHVjZXIuc2VuZChyZXN1bHRRdWV1ZSwgbXNnKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YQppbmRleCBmYzU5MDM1Li4yZjlmYWZmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiB9KQogcHVibGljIGNsYXNzIE5ld01lc3NhZ2VCZWFuMiBpbXBsZW1lbnRzIE1lc3NhZ2VMaXN0ZW5lciB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoTmV3TWVzc2FnZUJlYW4yLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtNDIsMTYgKzQyLDE2IEBACiAgICAgQEpNU0Nvbm5lY3Rpb25GYWN0b3J5KCJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIEBKTVNTZXNzaW9uTW9kZShKTVNDb250ZXh0LkFVVE9fQUNLTk9XTEVER0UpCiAgICAgcHJpdmF0ZSBKTVNDb250ZXh0IGptc0NvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4yKCkgewogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CiAgICAgICAgIHNlbmRNc2cobWVzc2FnZSk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHNlbmRNc2coTWVzc2FnZSBtc2cpIHsKICAgICAgICAgSk1TUHJvZHVjZXIgcHJvZHVjZXIgPSBqbXNDb250ZXh0LmNyZWF0ZVByb2R1Y2VyKCk7CiAgICAgICAgIHByb2R1Y2VyLnNlbmQocmVzdWx0UXVldWUsIG1zZyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQucHJvcGVydGllcwppbmRleCBkZGNlOTE0Li4zZmNkYjk1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic3Vic2NyaXB0aW9uU2NvcGUtY2x1c3Rlci1pbnN0YW5jZVNjb3BlRHVyYWJsZVdpdGhvdXROYW1lIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9idWlsZC54bWwKaW5kZXggYmYwZDI4Ny4uYWMyMDQxMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsMTMgKzQ4LDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9NeVNlc3Npb25CZWFuKi5jbGFzcywgKiovKk1lc3NhZ2VCZWFuKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50LmNsYXNzLCoqL015U2Vzc2lvbkJlYW4qLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uLWNsdXN0ZXIiLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciBlbmRwb2ludCBhY3RpdmF0aW9uIi8+CkBAIC03NCw3ICs3NCw3IEBACiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IldhaXQgMTAgc2VjcyBmb3IgY2x1c3RlciBwcm9wYWdhdGlvbiIvPgogICAgICAgICA8c2xlZXAgc2Vjb25kcz0iMTAiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24sIHNldE9TUHJvcHMiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC05MCwyMSArOTAsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxqYXZhIGZvcms9Im9uIiAKKyAgICAgICAgPGphdmEgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9Im9yZy5nbGFzc2Zpc2gudGVzdC5qbXMuYWN0aXZhdGlvbnByb3BlcnRpZXMuY2xpZW50LkNsaWVudCI+CiAgICAgICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0IiB2YWx1ZT0iJHtkZXBsb3kuY2x1c3Rlcmluc3RhbmNlMS5vcmJwb3J0fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uLWNsdXN0ZXIiLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCmluZGV4IGNmYWQzOGEuLjQ3YjI1YTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQpAQCAtMjUsOCArMjUsOCBAQAogQFJlbW90ZQogcHVibGljIGludGVyZmFjZSBNeVNlc3Npb25CZWFuUmVtb3RlIHsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSZW1vdGVKTkRJTmFtZSA9ICBNeVNlc3Npb25CZWFuLmNsYXNzLmdldFNpbXBsZU5hbWUoKSArICIvcmVtb3RlIjsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlbmRNZXNzYWdlKFN0cmluZyB0ZXh0KTsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgY2hlY2tNZXNzYWdlKFN0cmluZyB0ZXh0KTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKaW5kZXggMDI3YjQwOS4uMDY2NTcxOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKQEAgLTMwLDcgKzMwLDcgQEAKIH0pCiBwdWJsaWMgY2xhc3MgTmV3TWVzc2FnZUJlYW4gaW1wbGVtZW50cyBNZXNzYWdlTGlzdGVuZXIgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKE5ld01lc3NhZ2VCZWFuLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtNDEsMTYgKzQxLDE2IEBACiAgICAgQEpNU0Nvbm5lY3Rpb25GYWN0b3J5KCJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIEBKTVNTZXNzaW9uTW9kZShKTVNDb250ZXh0LkFVVE9fQUNLTk9XTEVER0UpCiAgICAgcHJpdmF0ZSBKTVNDb250ZXh0IGptc0NvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4oKSB7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgICAgICAgc2VuZE1zZyhtZXNzYWdlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhNZXNzYWdlIG1zZykgewogICAgICAgICBKTVNQcm9kdWNlciBwcm9kdWNlciA9IGptc0NvbnRleHQuY3JlYXRlUHJvZHVjZXIoKTsKICAgICAgICAgcHJvZHVjZXIuc2VuZChyZXN1bHRRdWV1ZSwgbXNnKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YQppbmRleCA5NTYxOWY0Li43YTZjNmRlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiB9KQogcHVibGljIGNsYXNzIE5ld01lc3NhZ2VCZWFuMiBpbXBsZW1lbnRzIE1lc3NhZ2VMaXN0ZW5lciB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoTmV3TWVzc2FnZUJlYW4yLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtNDEsMTYgKzQxLDE2IEBACiAgICAgQEpNU0Nvbm5lY3Rpb25GYWN0b3J5KCJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIEBKTVNTZXNzaW9uTW9kZShKTVNDb250ZXh0LkFVVE9fQUNLTk9XTEVER0UpCiAgICAgcHJpdmF0ZSBKTVNDb250ZXh0IGptc0NvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4yKCkgewogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CiAgICAgICAgIHNlbmRNc2cobWVzc2FnZSk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHNlbmRNc2coTWVzc2FnZSBtc2cpIHsKICAgICAgICAgSk1TUHJvZHVjZXIgcHJvZHVjZXIgPSBqbXNDb250ZXh0LmNyZWF0ZVByb2R1Y2VyKCk7CiAgICAgICAgIHByb2R1Y2VyLnNlbmQocmVzdWx0UXVldWUsIG1zZyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcwppbmRleCBiZmE5ODJlLi44NzFiZDBiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic3Vic2NyaXB0aW9uU2NvcGUtY2x1c3Rlci1pbnN0YW5jZVNjb3BlTm9uRHVyYWJsZVdpdGhOYW1lIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9idWlsZC54bWwKaW5kZXggYTdmNzA1Ny4uMzgzZDZiOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsMTMgKzQ4LDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9NeVNlc3Npb25CZWFuKi5jbGFzcywgKiovKk1lc3NhZ2VCZWFuKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50LmNsYXNzLCoqL015U2Vzc2lvbkJlYW4qLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uLWNsdXN0ZXIiLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciBjbHVzdGVyIHByb3BhZ2F0aW9uIi8+CkBAIC03NCw3ICs3NCw3IEBACiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IldhaXQgMTAgc2VjcyBmb3IgY2x1c3RlciBwcm9wYWdhdGlvbiIvPgogICAgICAgICA8c2xlZXAgc2Vjb25kcz0iMTAiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24sIHNldE9TUHJvcHMiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC05MCwyMSArOTAsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxqYXZhIGZvcms9Im9uIiAKKyAgICAgICAgPGphdmEgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9Im9yZy5nbGFzc2Zpc2gudGVzdC5qbXMuYWN0aXZhdGlvbnByb3BlcnRpZXMuY2xpZW50LkNsaWVudCI+CiAgICAgICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0IiB2YWx1ZT0iJHtkZXBsb3kuY2x1c3Rlcmluc3RhbmNlMS5vcmJwb3J0fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uLWNsdXN0ZXIiLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCmluZGV4IGNmYWQzOGEuLjQ3YjI1YTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQpAQCAtMjUsOCArMjUsOCBAQAogQFJlbW90ZQogcHVibGljIGludGVyZmFjZSBNeVNlc3Npb25CZWFuUmVtb3RlIHsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSZW1vdGVKTkRJTmFtZSA9ICBNeVNlc3Npb25CZWFuLmNsYXNzLmdldFNpbXBsZU5hbWUoKSArICIvcmVtb3RlIjsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlbmRNZXNzYWdlKFN0cmluZyB0ZXh0KTsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgY2hlY2tNZXNzYWdlKFN0cmluZyB0ZXh0KTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKaW5kZXggNGNlMWUyOC4uMzFkYzAyYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKIH0pCiBwdWJsaWMgY2xhc3MgTmV3TWVzc2FnZUJlYW4gaW1wbGVtZW50cyBNZXNzYWdlTGlzdGVuZXIgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKE5ld01lc3NhZ2VCZWFuLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtNDIsMTYgKzQyLDE2IEBACiAgICAgQEpNU0Nvbm5lY3Rpb25GYWN0b3J5KCJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIEBKTVNTZXNzaW9uTW9kZShKTVNDb250ZXh0LkFVVE9fQUNLTk9XTEVER0UpCiAgICAgcHJpdmF0ZSBKTVNDb250ZXh0IGptc0NvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4oKSB7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgICAgICAgc2VuZE1zZyhtZXNzYWdlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhNZXNzYWdlIG1zZykgewogICAgICAgICBKTVNQcm9kdWNlciBwcm9kdWNlciA9IGptc0NvbnRleHQuY3JlYXRlUHJvZHVjZXIoKTsKICAgICAgICAgcHJvZHVjZXIuc2VuZChyZXN1bHRRdWV1ZSwgbXNnKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YQppbmRleCAwMTk0YzY2Li42ZWYzZTZhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiB9KQogcHVibGljIGNsYXNzIE5ld01lc3NhZ2VCZWFuMiBpbXBsZW1lbnRzIE1lc3NhZ2VMaXN0ZW5lciB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoTmV3TWVzc2FnZUJlYW4yLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtNDIsMTYgKzQyLDE2IEBACiAgICAgQEpNU0Nvbm5lY3Rpb25GYWN0b3J5KCJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIEBKTVNTZXNzaW9uTW9kZShKTVNDb250ZXh0LkFVVE9fQUNLTk9XTEVER0UpCiAgICAgcHJpdmF0ZSBKTVNDb250ZXh0IGptc0NvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4yKCkgewogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CiAgICAgICAgIHNlbmRNc2cobWVzc2FnZSk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHNlbmRNc2coTWVzc2FnZSBtc2cpIHsKICAgICAgICAgSk1TUHJvZHVjZXIgcHJvZHVjZXIgPSBqbXNDb250ZXh0LmNyZWF0ZVByb2R1Y2VyKCk7CiAgICAgICAgIHByb2R1Y2VyLnNlbmQocmVzdWx0UXVldWUsIG1zZyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQucHJvcGVydGllcwppbmRleCA1MTdhZDllLi5iOGM4ODllIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic3Vic2NyaXB0aW9uU2NvcGUtY2x1c3Rlci1pbnN0YW5jZVNjb3BlTm9uRHVyYWJsZVdpdGhvdXROYW1lIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9idWlsZC54bWwKaW5kZXggNjJmNWVmYy4uZDljYTk2NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsMTMgKzQ4LDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9NeVNlc3Npb25CZWFuKi5jbGFzcywgKiovKk1lc3NhZ2VCZWFuKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50LmNsYXNzLCoqL015U2Vzc2lvbkJlYW4qLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uLWNsdXN0ZXIiLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciBjbHVzdGVyIHByb3BhZ2F0aW9uIi8+CkBAIC03NCw3ICs3NCw3IEBACiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IldhaXQgMTAgc2VjcyBmb3IgY2x1c3RlciBwcm9wYWdhdGlvbiIvPgogICAgICAgICA8c2xlZXAgc2Vjb25kcz0iMTAiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24sIHNldE9TUHJvcHMiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC05MCwyMSArOTAsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxqYXZhIGZvcms9Im9uIiAKKyAgICAgICAgPGphdmEgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9Im9yZy5nbGFzc2Zpc2gudGVzdC5qbXMuYWN0aXZhdGlvbnByb3BlcnRpZXMuY2xpZW50LkNsaWVudCI+CiAgICAgICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0IiB2YWx1ZT0iJHtkZXBsb3kuY2x1c3Rlcmluc3RhbmNlMS5vcmJwb3J0fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uLWNsdXN0ZXIiLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCmluZGV4IGNmYWQzOGEuLjQ3YjI1YTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQpAQCAtMjUsOCArMjUsOCBAQAogQFJlbW90ZQogcHVibGljIGludGVyZmFjZSBNeVNlc3Npb25CZWFuUmVtb3RlIHsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSZW1vdGVKTkRJTmFtZSA9ICBNeVNlc3Npb25CZWFuLmNsYXNzLmdldFNpbXBsZU5hbWUoKSArICIvcmVtb3RlIjsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlbmRNZXNzYWdlKFN0cmluZyB0ZXh0KTsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgY2hlY2tNZXNzYWdlKFN0cmluZyB0ZXh0KTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKaW5kZXggOWUyMDNjMy4uOWZjODkxOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKQEAgLTMwLDcgKzMwLDcgQEAKIH0pCiBwdWJsaWMgY2xhc3MgTmV3TWVzc2FnZUJlYW4gaW1wbGVtZW50cyBNZXNzYWdlTGlzdGVuZXIgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKE5ld01lc3NhZ2VCZWFuLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtNDEsMTYgKzQxLDE2IEBACiAgICAgQEpNU0Nvbm5lY3Rpb25GYWN0b3J5KCJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIEBKTVNTZXNzaW9uTW9kZShKTVNDb250ZXh0LkFVVE9fQUNLTk9XTEVER0UpCiAgICAgcHJpdmF0ZSBKTVNDb250ZXh0IGptc0NvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4oKSB7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgICAgICAgc2VuZE1zZyhtZXNzYWdlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhNZXNzYWdlIG1zZykgewogICAgICAgICBKTVNQcm9kdWNlciBwcm9kdWNlciA9IGptc0NvbnRleHQuY3JlYXRlUHJvZHVjZXIoKTsKICAgICAgICAgcHJvZHVjZXIuc2VuZChyZXN1bHRRdWV1ZSwgbXNnKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YQppbmRleCA4YWJlYzg1Li44MzBiMWQ1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiB9KQogcHVibGljIGNsYXNzIE5ld01lc3NhZ2VCZWFuMiBpbXBsZW1lbnRzIE1lc3NhZ2VMaXN0ZW5lciB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoTmV3TWVzc2FnZUJlYW4yLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtNDEsMTYgKzQxLDE2IEBACiAgICAgQEpNU0Nvbm5lY3Rpb25GYWN0b3J5KCJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIEBKTVNTZXNzaW9uTW9kZShKTVNDb250ZXh0LkFVVE9fQUNLTk9XTEVER0UpCiAgICAgcHJpdmF0ZSBKTVNDb250ZXh0IGptc0NvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4yKCkgewogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CiAgICAgICAgIHNlbmRNc2cobWVzc2FnZSk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHNlbmRNc2coTWVzc2FnZSBtc2cpIHsKICAgICAgICAgSk1TUHJvZHVjZXIgcHJvZHVjZXIgPSBqbXNDb250ZXh0LmNyZWF0ZVByb2R1Y2VyKCk7CiAgICAgICAgIHByb2R1Y2VyLnNlbmQocmVzdWx0UXVldWUsIG1zZyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL2R1cmFibGVOb0NsaWVudElkV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvZHVyYWJsZU5vQ2xpZW50SWRXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDllMjFhYzEuLmM2MzY0YTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvZHVyYWJsZU5vQ2xpZW50SWRXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvZHVyYWJsZU5vQ2xpZW50SWRXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InN1YnNjcmlwdGlvblNjb3BlLWNsdXN0ZXItbm9TY29wZUR1cmFibGVOb0NsaWVudElkV2l0aE5hbWUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvZHVyYWJsZU5vQ2xpZW50SWRXaXRoTmFtZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL2R1cmFibGVOb0NsaWVudElkV2l0aE5hbWUvYnVpbGQueG1sCmluZGV4IGM5MTgwODMuLmQ1MjBkOWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvZHVyYWJsZU5vQ2xpZW50SWRXaXRoTmFtZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9kdXJhYmxlTm9DbGllbnRJZFdpdGhOYW1lL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsMTMgKzQ4LDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9NeVNlc3Npb25CZWFuKi5jbGFzcywgKiovKk1lc3NhZ2VCZWFuKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50LmNsYXNzLCoqL015U2Vzc2lvbkJlYW4qLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uLWNsdXN0ZXIiLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciBlbmRwb2ludCBhY3RpdmF0aW9uIi8+CkBAIC03NCw3ICs3NCw3IEBACiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IldhaXQgMTAgc2VjcyBmb3IgY2x1c3RlciBwcm9wYWdhdGlvbiIvPgogICAgICAgICA8c2xlZXAgc2Vjb25kcz0iMTAiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24sIHNldE9TUHJvcHMiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC05MCwyMSArOTAsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxqYXZhIGZvcms9Im9uIiAKKyAgICAgICAgPGphdmEgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9Im9yZy5nbGFzc2Zpc2gudGVzdC5qbXMuYWN0aXZhdGlvbnByb3BlcnRpZXMuY2xpZW50LkNsaWVudCI+CiAgICAgICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0IiB2YWx1ZT0iJHtkZXBsb3kuY2x1c3Rlcmluc3RhbmNlMS5vcmJwb3J0fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uLWNsdXN0ZXIiLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvZHVyYWJsZU5vQ2xpZW50SWRXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9kdXJhYmxlTm9DbGllbnRJZFdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKaW5kZXggY2ZhZDM4YS4uNDdiMjVhOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9kdXJhYmxlTm9DbGllbnRJZFdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9kdXJhYmxlTm9DbGllbnRJZFdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKQEAgLTI1LDggKzI1LDggQEAKIEBSZW1vdGUKIHB1YmxpYyBpbnRlcmZhY2UgTXlTZXNzaW9uQmVhblJlbW90ZSB7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUmVtb3RlSk5ESU5hbWUgPSAgTXlTZXNzaW9uQmVhbi5jbGFzcy5nZXRTaW1wbGVOYW1lKCkgKyAiL3JlbW90ZSI7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZW5kTWVzc2FnZShTdHJpbmcgdGV4dCk7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGNoZWNrTWVzc2FnZShTdHJpbmcgdGV4dCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL2R1cmFibGVOb0NsaWVudElkV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL2R1cmFibGVOb0NsaWVudElkV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKaW5kZXggOTNhNWQzNy4uMzhmMGRlOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9kdXJhYmxlTm9DbGllbnRJZFdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvZHVyYWJsZU5vQ2xpZW50SWRXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQpAQCAtMzAsNyArMzAsNyBAQAogfSkKIHB1YmxpYyBjbGFzcyBOZXdNZXNzYWdlQmVhbiBpbXBsZW1lbnRzIE1lc3NhZ2VMaXN0ZW5lciB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoTmV3TWVzc2FnZUJlYW4uY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAKKwogICAgIEBSZXNvdXJjZQogICAgIHByaXZhdGUgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjOwogCkBAIC00MSwxNiArNDEsMTYgQEAKICAgICBASk1TQ29ubmVjdGlvbkZhY3RvcnkoImptcy9qbXNfdW5pdF90ZXN0X1FDRiIpCiAgICAgQEpNU1Nlc3Npb25Nb2RlKEpNU0NvbnRleHQuQVVUT19BQ0tOT1dMRURHRSkKICAgICBwcml2YXRlIEpNU0NvbnRleHQgam1zQ29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyBOZXdNZXNzYWdlQmVhbigpIHsKICAgICB9Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBAVHJhbnNhY3Rpb25BdHRyaWJ1dGUoVHJhbnNhY3Rpb25BdHRyaWJ1dGVUeXBlLk5PVF9TVVBQT1JURUQpCiAgICAgcHVibGljIHZvaWQgb25NZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewogICAgICAgICBzZW5kTXNnKG1lc3NhZ2UpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBzZW5kTXNnKE1lc3NhZ2UgbXNnKSB7CiAgICAgICAgIEpNU1Byb2R1Y2VyIHByb2R1Y2VyID0gam1zQ29udGV4dC5jcmVhdGVQcm9kdWNlcigpOwogICAgICAgICBwcm9kdWNlci5zZW5kKHJlc3VsdFF1ZXVlLCBtc2cpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9kdXJhYmxlV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZDg5YTg4My4uMTk1MGU4MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9kdXJhYmxlV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL2R1cmFibGVXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InN1YnNjcmlwdGlvblNjb3BlLWNsdXN0ZXItbm9TY29wZUR1cmFibGVXaXRoTmFtZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9kdXJhYmxlV2l0aE5hbWUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9kdXJhYmxlV2l0aE5hbWUvYnVpbGQueG1sCmluZGV4IGMwMWZkODEuLjY4YmRjYmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL2R1cmFibGVXaXRoTmFtZS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ4LDEzICs0OCwxMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovTXlTZXNzaW9uQmVhbiouY2xhc3MsICoqLypNZXNzYWdlQmVhbiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudC5jbGFzcywqKi9NeVNlc3Npb25CZWFuKi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbi1jbHVzdGVyIi8+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IldhaXQgMTAgc2VjcyBmb3IgZW5kcG9pbnQgYWN0aXZhdGlvbiIvPgpAQCAtNzQsNyArNzQsNyBAQAogICAgICAgICA8ZWNobyBtZXNzYWdlPSJXYWl0IDEwIHNlY3MgZm9yIGNsdXN0ZXIgcHJvcGFnYXRpb24iLz4KICAgICAgICAgPHNsZWVwIHNlY29uZHM9IjEwIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uLCBzZXRPU1Byb3BzIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtOTAsMjEgKzkwLDIxIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICA8amF2YSBmb3JrPSJvbiIgCisgICAgICAgIDxqYXZhIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50Lmphcjoke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSJvcmcuZ2xhc3NmaXNoLnRlc3Quam1zLmFjdGl2YXRpb25wcm9wZXJ0aWVzLmNsaWVudC5DbGllbnQiPgogICAgICAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0ib3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydCIgdmFsdWU9IiR7ZGVwbG95LmNsdXN0ZXJpbnN0YW5jZTEub3JicG9ydH0iLz4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbi1jbHVzdGVyIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQppbmRleCBjZmFkMzhhLi40N2IyNWE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKQEAgLTI1LDggKzI1LDggQEAKIEBSZW1vdGUKIHB1YmxpYyBpbnRlcmZhY2UgTXlTZXNzaW9uQmVhblJlbW90ZSB7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUmVtb3RlSk5ESU5hbWUgPSAgTXlTZXNzaW9uQmVhbi5jbGFzcy5nZXRTaW1wbGVOYW1lKCkgKyAiL3JlbW90ZSI7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZW5kTWVzc2FnZShTdHJpbmcgdGV4dCk7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGNoZWNrTWVzc2FnZShTdHJpbmcgdGV4dCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCmluZGV4IDFhODE0YWQuLjdmZTJiYzkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiB9KQogcHVibGljIGNsYXNzIE5ld01lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbi5jbGFzcy5nZXROYW1lKCkpOwotICAgIAorCiAgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7CiAKQEAgLTQyLDE2ICs0MiwxNiBAQAogICAgIEBKTVNDb25uZWN0aW9uRmFjdG9yeSgiam1zL2ptc191bml0X3Rlc3RfUUNGIikKICAgICBASk1TU2Vzc2lvbk1vZGUoSk1TQ29udGV4dC5BVVRPX0FDS05PV0xFREdFKQogICAgIHByaXZhdGUgSk1TQ29udGV4dCBqbXNDb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIE5ld01lc3NhZ2VCZWFuKCkgewogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CiAgICAgICAgIHNlbmRNc2cobWVzc2FnZSk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHNlbmRNc2coTWVzc2FnZSBtc2cpIHsKICAgICAgICAgSk1TUHJvZHVjZXIgcHJvZHVjZXIgPSBqbXNDb250ZXh0LmNyZWF0ZVByb2R1Y2VyKCk7CiAgICAgICAgIHByb2R1Y2VyLnNlbmQocmVzdWx0UXVldWUsIG1zZyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL25vbmR1cmFibGVOb3RTaGFyZWRXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9ub25kdXJhYmxlTm90U2hhcmVkV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcwppbmRleCAyMTlhMGJjLi45NzkwN2NiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL25vbmR1cmFibGVOb3RTaGFyZWRXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvbm9uZHVyYWJsZU5vdFNoYXJlZFdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic3Vic2NyaXB0aW9uU2NvcGUtY2x1c3Rlci1ub1Njb3BlTm9uRHVyYWJsZVdpdGhOYW1lIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL25vbmR1cmFibGVOb3RTaGFyZWRXaXRoTmFtZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL25vbmR1cmFibGVOb3RTaGFyZWRXaXRoTmFtZS9idWlsZC54bWwKaW5kZXggZjk1MjIzMS4uMDE5ZTQyOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9ub25kdXJhYmxlTm90U2hhcmVkV2l0aE5hbWUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvbm9uZHVyYWJsZU5vdFNoYXJlZFdpdGhOYW1lL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsMTMgKzQ4LDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9NeVNlc3Npb25CZWFuKi5jbGFzcywgKiovKk1lc3NhZ2VCZWFuKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50LmNsYXNzLCoqL015U2Vzc2lvbkJlYW4qLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uLWNsdXN0ZXIiLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciBjbHVzdGVyIHByb3BhZ2F0aW9uIi8+CkBAIC03NCw3ICs3NCw3IEBACiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IldhaXQgMTAgc2VjcyBmb3IgY2x1c3RlciBwcm9wYWdhdGlvbiIvPgogICAgICAgICA8c2xlZXAgc2Vjb25kcz0iMTAiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24sIHNldE9TUHJvcHMiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC05MCwyMSArOTAsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxqYXZhIGZvcms9Im9uIiAKKyAgICAgICAgPGphdmEgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9Im9yZy5nbGFzc2Zpc2gudGVzdC5qbXMuYWN0aXZhdGlvbnByb3BlcnRpZXMuY2xpZW50LkNsaWVudCI+CiAgICAgICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0IiB2YWx1ZT0iJHtkZXBsb3kuY2x1c3Rlcmluc3RhbmNlMS5vcmJwb3J0fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uLWNsdXN0ZXIiLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvbm9uZHVyYWJsZU5vdFNoYXJlZFdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL25vbmR1cmFibGVOb3RTaGFyZWRXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCmluZGV4IGNmYWQzOGEuLjQ3YjI1YTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvbm9uZHVyYWJsZU5vdFNoYXJlZFdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9ub25kdXJhYmxlTm90U2hhcmVkV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQpAQCAtMjUsOCArMjUsOCBAQAogQFJlbW90ZQogcHVibGljIGludGVyZmFjZSBNeVNlc3Npb25CZWFuUmVtb3RlIHsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSZW1vdGVKTkRJTmFtZSA9ICBNeVNlc3Npb25CZWFuLmNsYXNzLmdldFNpbXBsZU5hbWUoKSArICIvcmVtb3RlIjsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlbmRNZXNzYWdlKFN0cmluZyB0ZXh0KTsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgY2hlY2tNZXNzYWdlKFN0cmluZyB0ZXh0KTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvbm9uZHVyYWJsZU5vdFNoYXJlZFdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9ub25kdXJhYmxlTm90U2hhcmVkV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKaW5kZXggMmJhNTAwMS4uMTk1ZGZmMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9ub25kdXJhYmxlTm90U2hhcmVkV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9ub25kdXJhYmxlTm90U2hhcmVkV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKIH0pCiBwdWJsaWMgY2xhc3MgTmV3TWVzc2FnZUJlYW4gaW1wbGVtZW50cyBNZXNzYWdlTGlzdGVuZXIgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKE5ld01lc3NhZ2VCZWFuLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtNDIsMTYgKzQyLDE2IEBACiAgICAgQEpNU0Nvbm5lY3Rpb25GYWN0b3J5KCJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIEBKTVNTZXNzaW9uTW9kZShKTVNDb250ZXh0LkFVVE9fQUNLTk9XTEVER0UpCiAgICAgcHJpdmF0ZSBKTVNDb250ZXh0IGptc0NvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4oKSB7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgICAgICAgc2VuZE1zZyhtZXNzYWdlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhNZXNzYWdlIG1zZykgewogICAgICAgICBKTVNQcm9kdWNlciBwcm9kdWNlciA9IGptc0NvbnRleHQuY3JlYXRlUHJvZHVjZXIoKTsKICAgICAgICAgcHJvZHVjZXIuc2VuZChyZXN1bHRRdWV1ZSwgbXNnKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvbm9uZHVyYWJsZU5vdFNoYXJlZFdpdGhvdXROYW1lL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL25vbmR1cmFibGVOb3RTaGFyZWRXaXRob3V0TmFtZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDAyNzI1MjEuLjk3YmZlM2UgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvbm9uZHVyYWJsZU5vdFNoYXJlZFdpdGhvdXROYW1lL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9ub25kdXJhYmxlTm90U2hhcmVkV2l0aG91dE5hbWUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzdWJzY3JpcHRpb25TY29wZS1jbHVzdGVyLW5vU2NvcGVOb25EdXJhYmxlV2l0aG91dE5hbWUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvbm9uZHVyYWJsZU5vdFNoYXJlZFdpdGhvdXROYW1lL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvbm9uZHVyYWJsZU5vdFNoYXJlZFdpdGhvdXROYW1lL2J1aWxkLnhtbAppbmRleCAyM2RhM2ZlLi40NjFkZDFiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL25vbmR1cmFibGVOb3RTaGFyZWRXaXRob3V0TmFtZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9ub25kdXJhYmxlTm90U2hhcmVkV2l0aG91dE5hbWUvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OCwxMyArNDgsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL015U2Vzc2lvbkJlYW4qLmNsYXNzLCAqKi8qTWVzc2FnZUJlYW4qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQuY2xhc3MsKiovTXlTZXNzaW9uQmVhbiouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24tY2x1c3RlciIvPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJXYWl0IDEwIHNlY3MgZm9yIGNsdXN0ZXIgcHJvcGFnYXRpb24iLz4KQEAgLTc0LDcgKzc0LDcgQEAKICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciBjbHVzdGVyIHByb3BhZ2F0aW9uIi8+CiAgICAgICAgIDxzbGVlcCBzZWNvbmRzPSIxMCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiwgc2V0T1NQcm9wcyI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTkwLDIxICs5MCwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPGphdmEgZm9yaz0ib24iIAorICAgICAgICA8amF2YSBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0ib3JnLmdsYXNzZmlzaC50ZXN0Lmptcy5hY3RpdmF0aW9ucHJvcGVydGllcy5jbGllbnQuQ2xpZW50Ij4KICAgICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke2RlcGxveS5jbHVzdGVyaW5zdGFuY2UxLm9yYnBvcnR9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24tY2x1c3RlciIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9ub25kdXJhYmxlTm90U2hhcmVkV2l0aG91dE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvbm9uZHVyYWJsZU5vdFNoYXJlZFdpdGhvdXROYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKaW5kZXggY2ZhZDM4YS4uNDdiMjVhOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9ub25kdXJhYmxlTm90U2hhcmVkV2l0aG91dE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL25vbmR1cmFibGVOb3RTaGFyZWRXaXRob3V0TmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCkBAIC0yNSw4ICsyNSw4IEBACiBAUmVtb3RlCiBwdWJsaWMgaW50ZXJmYWNlIE15U2Vzc2lvbkJlYW5SZW1vdGUgewogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJlbW90ZUpORElOYW1lID0gIE15U2Vzc2lvbkJlYW4uY2xhc3MuZ2V0U2ltcGxlTmFtZSgpICsgIi9yZW1vdGUiOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2VuZE1lc3NhZ2UoU3RyaW5nIHRleHQpOwotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBjaGVja01lc3NhZ2UoU3RyaW5nIHRleHQpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9ub25kdXJhYmxlTm90U2hhcmVkV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL25vbmR1cmFibGVOb3RTaGFyZWRXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQppbmRleCAxN2FhODAzLi5iMjVhNTcxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL25vbmR1cmFibGVOb3RTaGFyZWRXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL25vbmR1cmFibGVOb3RTaGFyZWRXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQpAQCAtMzAsNyArMzAsNyBAQAogfSkKIHB1YmxpYyBjbGFzcyBOZXdNZXNzYWdlQmVhbiBpbXBsZW1lbnRzIE1lc3NhZ2VMaXN0ZW5lciB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoTmV3TWVzc2FnZUJlYW4uY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAKKwogICAgIEBSZXNvdXJjZQogICAgIHByaXZhdGUgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjOwogCkBAIC00MSwxNiArNDEsMTYgQEAKICAgICBASk1TQ29ubmVjdGlvbkZhY3RvcnkoImptcy9qbXNfdW5pdF90ZXN0X1FDRiIpCiAgICAgQEpNU1Nlc3Npb25Nb2RlKEpNU0NvbnRleHQuQVVUT19BQ0tOT1dMRURHRSkKICAgICBwcml2YXRlIEpNU0NvbnRleHQgam1zQ29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyBOZXdNZXNzYWdlQmVhbigpIHsKICAgICB9Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBAVHJhbnNhY3Rpb25BdHRyaWJ1dGUoVHJhbnNhY3Rpb25BdHRyaWJ1dGVUeXBlLk5PVF9TVVBQT1JURUQpCiAgICAgcHVibGljIHZvaWQgb25NZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewogICAgICAgICBzZW5kTXNnKG1lc3NhZ2UpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBzZW5kTXNnKE1lc3NhZ2UgbXNnKSB7CiAgICAgICAgIEpNU1Byb2R1Y2VyIHByb2R1Y2VyID0gam1zQ29udGV4dC5jcmVhdGVQcm9kdWNlcigpOwogICAgICAgICBwcm9kdWNlci5zZW5kKHJlc3VsdFF1ZXVlLCBtc2cpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMjE5YTBiYy4uOTc5MDdjYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL25vbmR1cmFibGVXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InN1YnNjcmlwdGlvblNjb3BlLWNsdXN0ZXItbm9TY29wZU5vbkR1cmFibGVXaXRoTmFtZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvYnVpbGQueG1sCmluZGV4IGY5NTIyMzEuLjAxOWU0MjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL25vbmR1cmFibGVXaXRoTmFtZS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ4LDEzICs0OCwxMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovTXlTZXNzaW9uQmVhbiouY2xhc3MsICoqLypNZXNzYWdlQmVhbiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudC5jbGFzcywqKi9NeVNlc3Npb25CZWFuKi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbi1jbHVzdGVyIi8+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IldhaXQgMTAgc2VjcyBmb3IgY2x1c3RlciBwcm9wYWdhdGlvbiIvPgpAQCAtNzQsNyArNzQsNyBAQAogICAgICAgICA8ZWNobyBtZXNzYWdlPSJXYWl0IDEwIHNlY3MgZm9yIGNsdXN0ZXIgcHJvcGFnYXRpb24iLz4KICAgICAgICAgPHNsZWVwIHNlY29uZHM9IjEwIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uLCBzZXRPU1Byb3BzIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtOTAsMjEgKzkwLDIxIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICA8amF2YSBmb3JrPSJvbiIgCisgICAgICAgIDxqYXZhIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50Lmphcjoke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSJvcmcuZ2xhc3NmaXNoLnRlc3Quam1zLmFjdGl2YXRpb25wcm9wZXJ0aWVzLmNsaWVudC5DbGllbnQiPgogICAgICAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0ib3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydCIgdmFsdWU9IiR7ZGVwbG95LmNsdXN0ZXJpbnN0YW5jZTEub3JicG9ydH0iLz4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbi1jbHVzdGVyIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQppbmRleCBjZmFkMzhhLi40N2IyNWE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKQEAgLTI1LDggKzI1LDggQEAKIEBSZW1vdGUKIHB1YmxpYyBpbnRlcmZhY2UgTXlTZXNzaW9uQmVhblJlbW90ZSB7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUmVtb3RlSk5ESU5hbWUgPSAgTXlTZXNzaW9uQmVhbi5jbGFzcy5nZXRTaW1wbGVOYW1lKCkgKyAiL3JlbW90ZSI7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZW5kTWVzc2FnZShTdHJpbmcgdGV4dCk7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGNoZWNrTWVzc2FnZShTdHJpbmcgdGV4dCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCmluZGV4IGFiNGUxYTcuLjkxNjdiODYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiB9KQogcHVibGljIGNsYXNzIE5ld01lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbi5jbGFzcy5nZXROYW1lKCkpOwotICAgIAorCiAgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7CiAKQEAgLTQyLDE2ICs0MiwxNiBAQAogICAgIEBKTVNDb25uZWN0aW9uRmFjdG9yeSgiam1zL2ptc191bml0X3Rlc3RfUUNGIikKICAgICBASk1TU2Vzc2lvbk1vZGUoSk1TQ29udGV4dC5BVVRPX0FDS05PV0xFREdFKQogICAgIHByaXZhdGUgSk1TQ29udGV4dCBqbXNDb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIE5ld01lc3NhZ2VCZWFuKCkgewogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CiAgICAgICAgIHNlbmRNc2cobWVzc2FnZSk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHNlbmRNc2coTWVzc2FnZSBtc2cpIHsKICAgICAgICAgSk1TUHJvZHVjZXIgcHJvZHVjZXIgPSBqbXNDb250ZXh0LmNyZWF0ZVByb2R1Y2VyKCk7CiAgICAgICAgIHByb2R1Y2VyLnNlbmQocmVzdWx0UXVldWUsIG1zZyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQucHJvcGVydGllcwppbmRleCAwMjcyNTIxLi45N2JmZTNlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic3Vic2NyaXB0aW9uU2NvcGUtY2x1c3Rlci1ub1Njb3BlTm9uRHVyYWJsZVdpdGhvdXROYW1lIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9idWlsZC54bWwKaW5kZXggMjNkYTNmZS4uNDYxZGQxYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsMTMgKzQ4LDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9NeVNlc3Npb25CZWFuKi5jbGFzcywgKiovKk1lc3NhZ2VCZWFuKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50LmNsYXNzLCoqL015U2Vzc2lvbkJlYW4qLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uLWNsdXN0ZXIiLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciBjbHVzdGVyIHByb3BhZ2F0aW9uIi8+CkBAIC03NCw3ICs3NCw3IEBACiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IldhaXQgMTAgc2VjcyBmb3IgY2x1c3RlciBwcm9wYWdhdGlvbiIvPgogICAgICAgICA8c2xlZXAgc2Vjb25kcz0iMTAiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24sIHNldE9TUHJvcHMiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC05MCwyMSArOTAsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxqYXZhIGZvcms9Im9uIiAKKyAgICAgICAgPGphdmEgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9Im9yZy5nbGFzc2Zpc2gudGVzdC5qbXMuYWN0aXZhdGlvbnByb3BlcnRpZXMuY2xpZW50LkNsaWVudCI+CiAgICAgICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0IiB2YWx1ZT0iJHtkZXBsb3kuY2x1c3Rlcmluc3RhbmNlMS5vcmJwb3J0fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uLWNsdXN0ZXIiLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvY2x1c3Rlci9ub1Njb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCmluZGV4IGNmYWQzOGEuLjQ3YjI1YTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQpAQCAtMjUsOCArMjUsOCBAQAogQFJlbW90ZQogcHVibGljIGludGVyZmFjZSBNeVNlc3Npb25CZWFuUmVtb3RlIHsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSZW1vdGVKTkRJTmFtZSA9ICBNeVNlc3Npb25CZWFuLmNsYXNzLmdldFNpbXBsZU5hbWUoKSArICIvcmVtb3RlIjsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlbmRNZXNzYWdlKFN0cmluZyB0ZXh0KTsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgY2hlY2tNZXNzYWdlKFN0cmluZyB0ZXh0KTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9jbHVzdGVyL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKaW5kZXggMDM1NzdjNC4uNDAyMjY1MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL2NsdXN0ZXIvbm9TY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKQEAgLTMwLDcgKzMwLDcgQEAKIH0pCiBwdWJsaWMgY2xhc3MgTmV3TWVzc2FnZUJlYW4gaW1wbGVtZW50cyBNZXNzYWdlTGlzdGVuZXIgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKE5ld01lc3NhZ2VCZWFuLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtNDEsMTYgKzQxLDE2IEBACiAgICAgQEpNU0Nvbm5lY3Rpb25GYWN0b3J5KCJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIEBKTVNTZXNzaW9uTW9kZShKTVNDb250ZXh0LkFVVE9fQUNLTk9XTEVER0UpCiAgICAgcHJpdmF0ZSBKTVNDb250ZXh0IGptc0NvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4oKSB7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgICAgICAgc2VuZE1zZyhtZXNzYWdlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhNZXNzYWdlIG1zZykgewogICAgICAgICBKTVNQcm9kdWNlciBwcm9kdWNlciA9IGptc0NvbnRleHQuY3JlYXRlUHJvZHVjZXIoKTsKICAgICAgICAgcHJvZHVjZXIuc2VuZChyZXN1bHRRdWV1ZSwgbXNnKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcwppbmRleCA0MDlmMGIzLi5jYWFhZDliIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InN1YnNjcmlwdGlvblNjb3BlLXN0YW5kYWxvbmUtZW1iZWRkZWQtY2x1c3RlclNjb3BlRHVyYWJsZVdpdGhOYW1lIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aE5hbWUvYnVpbGQueG1sCmluZGV4IGRiZDY3M2MuLjk5MTdkNzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aE5hbWUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aE5hbWUvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OCwxMyArNDgsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL015U2Vzc2lvbkJlYW4qLmNsYXNzLCAqKi8qTWVzc2FnZUJlYW4qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQuY2xhc3MsKiovTXlTZXNzaW9uQmVhbiouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciBlbmRwb2ludCBhY3RpdmF0aW9uIi8+CkBAIC02OCw3ICs2OCw3IEBACiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IldhaXQgMTAgc2VjcyBmb3IgcmVzb3VyY2UgY3JlYXRpb24iLz4KICAgICAgICAgPHNsZWVwIHNlY29uZHM9IjEwIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtNzYsMjEgKzc2LDIxIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICA8amF2YSBmb3JrPSJvbiIgCisgICAgICAgIDxqYXZhIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50Lmphcjoke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSJvcmcuZ2xhc3NmaXNoLnRlc3Quam1zLmFjdGl2YXRpb25wcm9wZXJ0aWVzLmNsaWVudC5DbGllbnQiPgogICAgICAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0ib3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydCIgdmFsdWU9IiR7b3JiLnBvcnR9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQppbmRleCBjZmFkMzhhLi40N2IyNWE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCkBAIC0yNSw4ICsyNSw4IEBACiBAUmVtb3RlCiBwdWJsaWMgaW50ZXJmYWNlIE15U2Vzc2lvbkJlYW5SZW1vdGUgewogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJlbW90ZUpORElOYW1lID0gIE15U2Vzc2lvbkJlYW4uY2xhc3MuZ2V0U2ltcGxlTmFtZSgpICsgIi9yZW1vdGUiOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2VuZE1lc3NhZ2UoU3RyaW5nIHRleHQpOwotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBjaGVja01lc3NhZ2UoU3RyaW5nIHRleHQpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKaW5kZXggMGRiZjE4MS4uNTBhMjc5NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiB9KQogcHVibGljIGNsYXNzIE5ld01lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbi5jbGFzcy5nZXROYW1lKCkpOwotICAgIAorCiAgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7CiAKQEAgLTQwLDE2ICs0MCwxNiBAQAogCiAgICAgQFJlc291cmNlKG1hcHBlZE5hbWUgPSAiam1zL2ptc191bml0X3Rlc3RfUUNGIikKICAgICBwcml2YXRlIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcWNvbkZhY3Rvcnk7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4oKSB7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgICAgICAgc2VuZE1zZyhtZXNzYWdlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhNZXNzYWdlIG1zZykgewogICAgICAgICBRdWV1ZUNvbm5lY3Rpb24gcWNvbiA9IG51bGw7CiAgICAgICAgIFF1ZXVlU2Vzc2lvbiBxc2Vzc2lvbiA9IG51bGw7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCmluZGV4IDlhZGU3NGIuLmI2YzY4MjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiB9KQogcHVibGljIGNsYXNzIE5ld01lc3NhZ2VCZWFuMiBpbXBsZW1lbnRzIE1lc3NhZ2VMaXN0ZW5lciB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoTmV3TWVzc2FnZUJlYW4yLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtNDAsMTYgKzQwLDE2IEBACiAKICAgICBAUmVzb3VyY2UobWFwcGVkTmFtZSA9ICJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIHByaXZhdGUgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxY29uRmFjdG9yeTsKLSAgICAKKwogICAgIHB1YmxpYyBOZXdNZXNzYWdlQmVhbjIoKSB7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgICAgICAgc2VuZE1zZyhtZXNzYWdlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhNZXNzYWdlIG1zZykgewogICAgICAgICBRdWV1ZUNvbm5lY3Rpb24gcWNvbiA9IG51bGw7CiAgICAgICAgIFF1ZXVlU2Vzc2lvbiBxc2Vzc2lvbiA9IG51bGw7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZjc5MzdlOS4uMzE2MDYxYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzdWJzY3JpcHRpb25TY29wZS1zdGFuZGFsb25lLWVtYmVkZGVkLWNsdXN0ZXJTY29wZUR1cmFibGVXaXRob3V0TmFtZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnhtbAppbmRleCBlZjAxM2FmLi4zMjg4NTYzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsMTMgKzQ4LDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9NeVNlc3Npb25CZWFuKi5jbGFzcywgKiovKk1lc3NhZ2VCZWFuKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50LmNsYXNzLCoqL015U2Vzc2lvbkJlYW4qLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IldhaXQgMTAgc2VjcyBmb3IgZW5kcG9pbnQgYWN0aXZhdGlvbiIvPgpAQCAtNjgsNyArNjgsNyBAQAogICAgICAgICA8ZWNobyBtZXNzYWdlPSJXYWl0IDEwIHNlY3MgZm9yIHJlc291cmNlIGNyZWF0aW9uIi8+CiAgICAgICAgIDxzbGVlcCBzZWNvbmRzPSIxMCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTc2LDIxICs3NiwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPGphdmEgZm9yaz0ib24iIAorICAgICAgICA8amF2YSBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0ib3JnLmdsYXNzZmlzaC50ZXN0Lmptcy5hY3RpdmF0aW9ucHJvcGVydGllcy5jbGllbnQuQ2xpZW50Ij4KICAgICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke29yYi5wb3J0fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKaW5kZXggY2ZhZDM4YS4uNDdiMjVhOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQpAQCAtMjUsOCArMjUsOCBAQAogQFJlbW90ZQogcHVibGljIGludGVyZmFjZSBNeVNlc3Npb25CZWFuUmVtb3RlIHsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSZW1vdGVKTkRJTmFtZSA9ICBNeVNlc3Npb25CZWFuLmNsYXNzLmdldFNpbXBsZU5hbWUoKSArICIvcmVtb3RlIjsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlbmRNZXNzYWdlKFN0cmluZyB0ZXh0KTsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgY2hlY2tNZXNzYWdlKFN0cmluZyB0ZXh0KTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCmluZGV4IDQxY2ZkMGIuLjIxZTk1ZTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQpAQCAtMzAsNyArMzAsNyBAQAogfSkKIHB1YmxpYyBjbGFzcyBOZXdNZXNzYWdlQmVhbiBpbXBsZW1lbnRzIE1lc3NhZ2VMaXN0ZW5lciB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoTmV3TWVzc2FnZUJlYW4uY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAKKwogICAgIEBSZXNvdXJjZQogICAgIHByaXZhdGUgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjOwogCkBAIC0zOSwxNiArMzksMTYgQEAKIAogICAgIEBSZXNvdXJjZShtYXBwZWROYW1lID0gImptcy9qbXNfdW5pdF90ZXN0X1FDRiIpCiAgICAgcHJpdmF0ZSBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHFjb25GYWN0b3J5OwotICAgIAorCiAgICAgcHVibGljIE5ld01lc3NhZ2VCZWFuKCkgewogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CiAgICAgICAgIHNlbmRNc2cobWVzc2FnZSk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHNlbmRNc2coTWVzc2FnZSBtc2cpIHsKICAgICAgICAgUXVldWVDb25uZWN0aW9uIHFjb24gPSBudWxsOwogICAgICAgICBRdWV1ZVNlc3Npb24gcXNlc3Npb24gPSBudWxsOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YQppbmRleCA5ZTZkNzY5Li5lYWM2ZGRmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YQpAQCAtMjksNyArMjksNyBAQAogfSkKIHB1YmxpYyBjbGFzcyBOZXdNZXNzYWdlQmVhbjIgaW1wbGVtZW50cyBNZXNzYWdlTGlzdGVuZXIgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKE5ld01lc3NhZ2VCZWFuMi5jbGFzcy5nZXROYW1lKCkpOwotICAgIAorCiAgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7CiAKQEAgLTM4LDE2ICszOCwxNiBAQAogCiAgICAgQFJlc291cmNlKG1hcHBlZE5hbWUgPSAiam1zL2ptc191bml0X3Rlc3RfUUNGIikKICAgICBwcml2YXRlIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcWNvbkZhY3Rvcnk7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4yKCkgewogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CiAgICAgICAgIHNlbmRNc2cobWVzc2FnZSk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHNlbmRNc2coTWVzc2FnZSBtc2cpIHsKICAgICAgICAgUXVldWVDb25uZWN0aW9uIHFjb24gPSBudWxsOwogICAgICAgICBRdWV1ZVNlc3Npb24gcXNlc3Npb24gPSBudWxsOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDhmNGQzNGYuLjRmMzBjNDYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic3Vic2NyaXB0aW9uU2NvcGUtc3RhbmRhbG9uZS1lbWJlZGRlZC1jbHVzdGVyU2NvcGVOb25EdXJhYmxlV2l0aE5hbWUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9idWlsZC54bWwKaW5kZXggN2ExY2M1ZC4uZmMzN2ZjNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ4LDEzICs0OCwxMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovTXlTZXNzaW9uQmVhbiouY2xhc3MsICoqLypNZXNzYWdlQmVhbiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudC5jbGFzcywqKi9NeVNlc3Npb25CZWFuKi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJXYWl0IDEwIHNlY3MgZm9yIGVuZHBvaW50IGFjdGl2YXRpb24iLz4KQEAgLTY4LDcgKzY4LDcgQEAKICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciByZXNvdXJjZSBjcmVhdGlvbiIvPgogICAgICAgICA8c2xlZXAgc2Vjb25kcz0iMTAiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC03NiwyMSArNzYsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxqYXZhIGZvcms9Im9uIiAKKyAgICAgICAgPGphdmEgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9Im9yZy5nbGFzc2Zpc2gudGVzdC5qbXMuYWN0aXZhdGlvbnByb3BlcnRpZXMuY2xpZW50LkNsaWVudCI+CiAgICAgICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0IiB2YWx1ZT0iJHtvcmIucG9ydH0iLz4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCmluZGV4IGNmYWQzOGEuLjQ3YjI1YTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKQEAgLTI1LDggKzI1LDggQEAKIEBSZW1vdGUKIHB1YmxpYyBpbnRlcmZhY2UgTXlTZXNzaW9uQmVhblJlbW90ZSB7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUmVtb3RlSk5ESU5hbWUgPSAgTXlTZXNzaW9uQmVhbi5jbGFzcy5nZXRTaW1wbGVOYW1lKCkgKyAiL3JlbW90ZSI7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZW5kTWVzc2FnZShTdHJpbmcgdGV4dCk7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGNoZWNrTWVzc2FnZShTdHJpbmcgdGV4dCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQppbmRleCBhMWJlYTBkLi4wODIxYzIzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKIH0pCiBwdWJsaWMgY2xhc3MgTmV3TWVzc2FnZUJlYW4gaW1wbGVtZW50cyBNZXNzYWdlTGlzdGVuZXIgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKE5ld01lc3NhZ2VCZWFuLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtNDAsMTYgKzQwLDE2IEBACiAKICAgICBAUmVzb3VyY2UobWFwcGVkTmFtZSA9ICJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIHByaXZhdGUgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxY29uRmFjdG9yeTsKLSAgICAKKwogICAgIHB1YmxpYyBOZXdNZXNzYWdlQmVhbigpIHsKICAgICB9Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBAVHJhbnNhY3Rpb25BdHRyaWJ1dGUoVHJhbnNhY3Rpb25BdHRyaWJ1dGVUeXBlLk5PVF9TVVBQT1JURUQpCiAgICAgcHVibGljIHZvaWQgb25NZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewogICAgICAgICBzZW5kTXNnKG1lc3NhZ2UpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBzZW5kTXNnKE1lc3NhZ2UgbXNnKSB7CiAgICAgICAgIFF1ZXVlQ29ubmVjdGlvbiBxY29uID0gbnVsbDsKICAgICAgICAgUXVldWVTZXNzaW9uIHFzZXNzaW9uID0gbnVsbDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEKaW5kZXggNGUxNjUxZi4uMDk3NGE5YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKIH0pCiBwdWJsaWMgY2xhc3MgTmV3TWVzc2FnZUJlYW4yIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbjIuY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAKKwogICAgIEBSZXNvdXJjZQogICAgIHByaXZhdGUgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjOwogCkBAIC00MCwxNiArNDAsMTYgQEAKIAogICAgIEBSZXNvdXJjZShtYXBwZWROYW1lID0gImptcy9qbXNfdW5pdF90ZXN0X1FDRiIpCiAgICAgcHJpdmF0ZSBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHFjb25GYWN0b3J5OwotICAgIAorCiAgICAgcHVibGljIE5ld01lc3NhZ2VCZWFuMigpIHsKICAgICB9Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBAVHJhbnNhY3Rpb25BdHRyaWJ1dGUoVHJhbnNhY3Rpb25BdHRyaWJ1dGVUeXBlLk5PVF9TVVBQT1JURUQpCiAgICAgcHVibGljIHZvaWQgb25NZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewogICAgICAgICBzZW5kTXNnKG1lc3NhZ2UpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBzZW5kTXNnKE1lc3NhZ2UgbXNnKSB7CiAgICAgICAgIFF1ZXVlQ29ubmVjdGlvbiBxY29uID0gbnVsbDsKICAgICAgICAgUXVldWVTZXNzaW9uIHFzZXNzaW9uID0gbnVsbDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQucHJvcGVydGllcwppbmRleCA3NDMxMjYzLi5iZjQxZDU1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InN1YnNjcmlwdGlvblNjb3BlLXN0YW5kYWxvbmUtZW1iZWRkZWQtY2x1c3RlclNjb3BlTm9uRHVyYWJsZVdpdGhvdXROYW1lIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQueG1sCmluZGV4IDAyOTA4NDUuLjdiNWM3OTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OCwxMyArNDgsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL015U2Vzc2lvbkJlYW4qLmNsYXNzLCAqKi8qTWVzc2FnZUJlYW4qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQuY2xhc3MsKiovTXlTZXNzaW9uQmVhbiouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciBlbmRwb2ludCBhY3RpdmF0aW9uIi8+CkBAIC02OCw3ICs2OCw3IEBACiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IldhaXQgMTAgc2VjcyBmb3IgcmVzb3VyY2UgY3JlYXRpb24iLz4KICAgICAgICAgPHNsZWVwIHNlY29uZHM9IjEwIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtNzYsMjEgKzc2LDIxIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICA8amF2YSBmb3JrPSJvbiIgCisgICAgICAgIDxqYXZhIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50Lmphcjoke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSJvcmcuZ2xhc3NmaXNoLnRlc3Quam1zLmFjdGl2YXRpb25wcm9wZXJ0aWVzLmNsaWVudC5DbGllbnQiPgogICAgICAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0ib3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydCIgdmFsdWU9IiR7b3JiLnBvcnR9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQppbmRleCBjZmFkMzhhLi40N2IyNWE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCkBAIC0yNSw4ICsyNSw4IEBACiBAUmVtb3RlCiBwdWJsaWMgaW50ZXJmYWNlIE15U2Vzc2lvbkJlYW5SZW1vdGUgewogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJlbW90ZUpORElOYW1lID0gIE15U2Vzc2lvbkJlYW4uY2xhc3MuZ2V0U2ltcGxlTmFtZSgpICsgIi9yZW1vdGUiOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2VuZE1lc3NhZ2UoU3RyaW5nIHRleHQpOwotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBjaGVja01lc3NhZ2UoU3RyaW5nIHRleHQpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKaW5kZXggMThmNWFjOC4uODVjNTJlMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiB9KQogcHVibGljIGNsYXNzIE5ld01lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbi5jbGFzcy5nZXROYW1lKCkpOwotICAgIAorCiAgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7CiAKQEAgLTM5LDE2ICszOSwxNiBAQAogCiAgICAgQFJlc291cmNlKG1hcHBlZE5hbWUgPSAiam1zL2ptc191bml0X3Rlc3RfUUNGIikKICAgICBwcml2YXRlIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcWNvbkZhY3Rvcnk7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4oKSB7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgICAgICAgc2VuZE1zZyhtZXNzYWdlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhNZXNzYWdlIG1zZykgewogICAgICAgICBRdWV1ZUNvbm5lY3Rpb24gcWNvbiA9IG51bGw7CiAgICAgICAgIFF1ZXVlU2Vzc2lvbiBxc2Vzc2lvbiA9IG51bGw7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCmluZGV4IDZiZDg5MzQuLjMyOGUzNjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiB9KQogcHVibGljIGNsYXNzIE5ld01lc3NhZ2VCZWFuMiBpbXBsZW1lbnRzIE1lc3NhZ2VMaXN0ZW5lciB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoTmV3TWVzc2FnZUJlYW4yLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtMzksMTYgKzM5LDE2IEBACiAKICAgICBAUmVzb3VyY2UobWFwcGVkTmFtZSA9ICJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIHByaXZhdGUgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxY29uRmFjdG9yeTsKLSAgICAKKwogICAgIHB1YmxpYyBOZXdNZXNzYWdlQmVhbjIoKSB7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgICAgICAgc2VuZE1zZyhtZXNzYWdlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhNZXNzYWdlIG1zZykgewogICAgICAgICBRdWV1ZUNvbm5lY3Rpb24gcWNvbiA9IG51bGw7CiAgICAgICAgIFF1ZXVlU2Vzc2lvbiBxc2Vzc2lvbiA9IG51bGw7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcwppbmRleCBmZTk1NGQ4Li4zOTliNTc0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic3Vic2NyaXB0aW9uU2NvcGUtc3RhbmRhbG9uZS1lbWJlZGRlZC1pbnN0YW5jZVNjb3BlRHVyYWJsZVdpdGhOYW1lIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRoTmFtZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRoTmFtZS9idWlsZC54bWwKaW5kZXggNWM0Y2IxOC4uMTI2ZTdlNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aE5hbWUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsMTMgKzQ4LDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9NeVNlc3Npb25CZWFuKi5jbGFzcywgKiovKk1lc3NhZ2VCZWFuKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50LmNsYXNzLCoqL015U2Vzc2lvbkJlYW4qLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IldhaXQgMTAgc2VjcyBmb3IgZW5kcG9pbnQgYWN0aXZhdGlvbiIvPgpAQCAtNjgsNyArNjgsNyBAQAogICAgICAgICA8ZWNobyBtZXNzYWdlPSJXYWl0IDEwIHNlY3MgZm9yIHJlc291cmNlIGNyZWF0aW9uIi8+CiAgICAgICAgIDxzbGVlcCBzZWNvbmRzPSIxMCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTc2LDIxICs3NiwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPGphdmEgZm9yaz0ib24iIAorICAgICAgICA8amF2YSBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0ib3JnLmdsYXNzZmlzaC50ZXN0Lmptcy5hY3RpdmF0aW9ucHJvcGVydGllcy5jbGllbnQuQ2xpZW50Ij4KICAgICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke29yYi5wb3J0fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQppbmRleCBjZmFkMzhhLi40N2IyNWE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKQEAgLTI1LDggKzI1LDggQEAKIEBSZW1vdGUKIHB1YmxpYyBpbnRlcmZhY2UgTXlTZXNzaW9uQmVhblJlbW90ZSB7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUmVtb3RlSk5ESU5hbWUgPSAgTXlTZXNzaW9uQmVhbi5jbGFzcy5nZXRTaW1wbGVOYW1lKCkgKyAiL3JlbW90ZSI7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZW5kTWVzc2FnZShTdHJpbmcgdGV4dCk7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGNoZWNrTWVzc2FnZShTdHJpbmcgdGV4dCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCmluZGV4IGQxYzgyMjcuLmM2MjdhZmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiB9KQogcHVibGljIGNsYXNzIE5ld01lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbi5jbGFzcy5nZXROYW1lKCkpOwotICAgIAorCiAgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7CiAKQEAgLTQwLDE2ICs0MCwxNiBAQAogCiAgICAgQFJlc291cmNlKG1hcHBlZE5hbWUgPSAiam1zL2ptc191bml0X3Rlc3RfUUNGIikKICAgICBwcml2YXRlIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcWNvbkZhY3Rvcnk7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4oKSB7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgICAgICAgc2VuZE1zZyhtZXNzYWdlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhNZXNzYWdlIG1zZykgewogICAgICAgICBRdWV1ZUNvbm5lY3Rpb24gcWNvbiA9IG51bGw7CiAgICAgICAgIFF1ZXVlU2Vzc2lvbiBxc2Vzc2lvbiA9IG51bGw7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEKaW5kZXggYzQwZjE3Zi4uYmI0ZmI3ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YQpAQCAtMzEsNyArMzEsNyBAQAogfSkKIHB1YmxpYyBjbGFzcyBOZXdNZXNzYWdlQmVhbjIgaW1wbGVtZW50cyBNZXNzYWdlTGlzdGVuZXIgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKE5ld01lc3NhZ2VCZWFuMi5jbGFzcy5nZXROYW1lKCkpOwotICAgIAorCiAgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7CiAKQEAgLTQwLDE2ICs0MCwxNiBAQAogCiAgICAgQFJlc291cmNlKG1hcHBlZE5hbWUgPSAiam1zL2ptc191bml0X3Rlc3RfUUNGIikKICAgICBwcml2YXRlIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcWNvbkZhY3Rvcnk7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4yKCkgewogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CiAgICAgICAgIHNlbmRNc2cobWVzc2FnZSk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHNlbmRNc2coTWVzc2FnZSBtc2cpIHsKICAgICAgICAgUXVldWVDb25uZWN0aW9uIHFjb24gPSBudWxsOwogICAgICAgICBRdWV1ZVNlc3Npb24gcXNlc3Npb24gPSBudWxsOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNGQyMzNhMS4uNGFmYmM4NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InN1YnNjcmlwdGlvblNjb3BlLXN0YW5kYWxvbmUtZW1iZWRkZWQtaW5zdGFuY2VTY29wZUR1cmFibGVXaXRob3V0TmFtZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQueG1sCmluZGV4IDEzZTFkZTQuLjY1MjQ4YzIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ4LDEzICs0OCwxMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovTXlTZXNzaW9uQmVhbiouY2xhc3MsICoqLypNZXNzYWdlQmVhbiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudC5jbGFzcywqKi9NeVNlc3Npb25CZWFuKi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJXYWl0IDEwIHNlY3MgZm9yIGVuZHBvaW50IGFjdGl2YXRpb24iLz4KQEAgLTY4LDcgKzY4LDcgQEAKICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciByZXNvdXJjZSBjcmVhdGlvbiIvPgogICAgICAgICA8c2xlZXAgc2Vjb25kcz0iMTAiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC03NiwyMSArNzYsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxqYXZhIGZvcms9Im9uIiAKKyAgICAgICAgPGphdmEgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9Im9yZy5nbGFzc2Zpc2gudGVzdC5qbXMuYWN0aXZhdGlvbnByb3BlcnRpZXMuY2xpZW50LkNsaWVudCI+CiAgICAgICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0IiB2YWx1ZT0iJHtvcmIucG9ydH0iLz4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKaW5kZXggY2ZhZDM4YS4uNDdiMjVhOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCkBAIC0yNSw4ICsyNSw4IEBACiBAUmVtb3RlCiBwdWJsaWMgaW50ZXJmYWNlIE15U2Vzc2lvbkJlYW5SZW1vdGUgewogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJlbW90ZUpORElOYW1lID0gIE15U2Vzc2lvbkJlYW4uY2xhc3MuZ2V0U2ltcGxlTmFtZSgpICsgIi9yZW1vdGUiOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2VuZE1lc3NhZ2UoU3RyaW5nIHRleHQpOwotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBjaGVja01lc3NhZ2UoU3RyaW5nIHRleHQpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQppbmRleCBmZjZhMTcwLi43MTU0NDZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQpAQCAtMzAsNyArMzAsNyBAQAogfSkKIHB1YmxpYyBjbGFzcyBOZXdNZXNzYWdlQmVhbiBpbXBsZW1lbnRzIE1lc3NhZ2VMaXN0ZW5lciB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoTmV3TWVzc2FnZUJlYW4uY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAKKwogICAgIEBSZXNvdXJjZQogICAgIHByaXZhdGUgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjOwogCkBAIC0zOSwxNiArMzksMTYgQEAKIAogICAgIEBSZXNvdXJjZShtYXBwZWROYW1lID0gImptcy9qbXNfdW5pdF90ZXN0X1FDRiIpCiAgICAgcHJpdmF0ZSBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHFjb25GYWN0b3J5OwotICAgIAorCiAgICAgcHVibGljIE5ld01lc3NhZ2VCZWFuKCkgewogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CiAgICAgICAgIHNlbmRNc2cobWVzc2FnZSk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHNlbmRNc2coTWVzc2FnZSBtc2cpIHsKICAgICAgICAgUXVldWVDb25uZWN0aW9uIHFjb24gPSBudWxsOwogICAgICAgICBRdWV1ZVNlc3Npb24gcXNlc3Npb24gPSBudWxsOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCmluZGV4IDg5OTg3NmQuLmQ4NWNmNDMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEKQEAgLTMwLDcgKzMwLDcgQEAKIH0pCiBwdWJsaWMgY2xhc3MgTmV3TWVzc2FnZUJlYW4yIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbjIuY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAKKwogICAgIEBSZXNvdXJjZQogICAgIHByaXZhdGUgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjOwogCkBAIC0zOSwxNiArMzksMTYgQEAKIAogICAgIEBSZXNvdXJjZShtYXBwZWROYW1lID0gImptcy9qbXNfdW5pdF90ZXN0X1FDRiIpCiAgICAgcHJpdmF0ZSBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHFjb25GYWN0b3J5OwotICAgIAorCiAgICAgcHVibGljIE5ld01lc3NhZ2VCZWFuMigpIHsKICAgICB9Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBAVHJhbnNhY3Rpb25BdHRyaWJ1dGUoVHJhbnNhY3Rpb25BdHRyaWJ1dGVUeXBlLk5PVF9TVVBQT1JURUQpCiAgICAgcHVibGljIHZvaWQgb25NZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewogICAgICAgICBzZW5kTXNnKG1lc3NhZ2UpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBzZW5kTXNnKE1lc3NhZ2UgbXNnKSB7CiAgICAgICAgIFF1ZXVlQ29ubmVjdGlvbiBxY29uID0gbnVsbDsKICAgICAgICAgUXVldWVTZXNzaW9uIHFzZXNzaW9uID0gbnVsbDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDYxOTI5NDQuLjA3ZjE3NmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzdWJzY3JpcHRpb25TY29wZS1zdGFuZGFsb25lLWVtYmVkZGVkLWluc3RhbmNlU2NvcGVOb25EdXJhYmxlV2l0aE5hbWUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnhtbAppbmRleCBmYzVhM2JiLi45Y2YxNjFkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OCwxMyArNDgsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL015U2Vzc2lvbkJlYW4qLmNsYXNzLCAqKi8qTWVzc2FnZUJlYW4qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQuY2xhc3MsKiovTXlTZXNzaW9uQmVhbiouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciBlbmRwb2ludCBhY3RpdmF0aW9uIi8+CkBAIC02OCw3ICs2OCw3IEBACiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IldhaXQgMTAgc2VjcyBmb3IgcmVzb3VyY2UgY3JlYXRpb24iLz4KICAgICAgICAgPHNsZWVwIHNlY29uZHM9IjEwIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtNzYsMjEgKzc2LDIxIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICA8amF2YSBmb3JrPSJvbiIgCisgICAgICAgIDxqYXZhIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50Lmphcjoke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSJvcmcuZ2xhc3NmaXNoLnRlc3Quam1zLmFjdGl2YXRpb25wcm9wZXJ0aWVzLmNsaWVudC5DbGllbnQiPgogICAgICAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0ib3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydCIgdmFsdWU9IiR7b3JiLnBvcnR9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCmluZGV4IGNmYWQzOGEuLjQ3YjI1YTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQpAQCAtMjUsOCArMjUsOCBAQAogQFJlbW90ZQogcHVibGljIGludGVyZmFjZSBNeVNlc3Npb25CZWFuUmVtb3RlIHsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSZW1vdGVKTkRJTmFtZSA9ICBNeVNlc3Npb25CZWFuLmNsYXNzLmdldFNpbXBsZU5hbWUoKSArICIvcmVtb3RlIjsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlbmRNZXNzYWdlKFN0cmluZyB0ZXh0KTsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgY2hlY2tNZXNzYWdlKFN0cmluZyB0ZXh0KTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKaW5kZXggN2I1ZGI5NS4uMjZlZTM4MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKIH0pCiBwdWJsaWMgY2xhc3MgTmV3TWVzc2FnZUJlYW4gaW1wbGVtZW50cyBNZXNzYWdlTGlzdGVuZXIgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKE5ld01lc3NhZ2VCZWFuLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtNDAsMTYgKzQwLDE2IEBACiAKICAgICBAUmVzb3VyY2UobWFwcGVkTmFtZSA9ICJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIHByaXZhdGUgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxY29uRmFjdG9yeTsKLSAgICAKKwogICAgIHB1YmxpYyBOZXdNZXNzYWdlQmVhbigpIHsKICAgICB9Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBAVHJhbnNhY3Rpb25BdHRyaWJ1dGUoVHJhbnNhY3Rpb25BdHRyaWJ1dGVUeXBlLk5PVF9TVVBQT1JURUQpCiAgICAgcHVibGljIHZvaWQgb25NZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewogICAgICAgICBzZW5kTXNnKG1lc3NhZ2UpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBzZW5kTXNnKE1lc3NhZ2UgbXNnKSB7CiAgICAgICAgIFF1ZXVlQ29ubmVjdGlvbiBxY29uID0gbnVsbDsKICAgICAgICAgUXVldWVTZXNzaW9uIHFzZXNzaW9uID0gbnVsbDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YQppbmRleCBlMDUxZjQ4Li4zODliZTg3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiB9KQogcHVibGljIGNsYXNzIE5ld01lc3NhZ2VCZWFuMiBpbXBsZW1lbnRzIE1lc3NhZ2VMaXN0ZW5lciB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoTmV3TWVzc2FnZUJlYW4yLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtNDAsMTYgKzQwLDE2IEBACiAKICAgICBAUmVzb3VyY2UobWFwcGVkTmFtZSA9ICJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIHByaXZhdGUgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxY29uRmFjdG9yeTsKLSAgICAKKwogICAgIHB1YmxpYyBOZXdNZXNzYWdlQmVhbjIoKSB7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgICAgICAgc2VuZE1zZyhtZXNzYWdlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhNZXNzYWdlIG1zZykgewogICAgICAgICBRdWV1ZUNvbm5lY3Rpb24gcWNvbiA9IG51bGw7CiAgICAgICAgIFF1ZXVlU2Vzc2lvbiBxc2Vzc2lvbiA9IG51bGw7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQucHJvcGVydGllcwppbmRleCBlNGJhN2M1Li42NDRhOGNjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic3Vic2NyaXB0aW9uU2NvcGUtc3RhbmRhbG9uZS1lbWJlZGRlZC1pbnN0YW5jZVNjb3BlTm9uRHVyYWJsZVdpdGhvdXROYW1lIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9idWlsZC54bWwKaW5kZXggZDFjOGI0NC4uMzQ5MjllYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsMTMgKzQ4LDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9NeVNlc3Npb25CZWFuKi5jbGFzcywgKiovKk1lc3NhZ2VCZWFuKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50LmNsYXNzLCoqL015U2Vzc2lvbkJlYW4qLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IldhaXQgMTAgc2VjcyBmb3IgZW5kcG9pbnQgYWN0aXZhdGlvbiIvPgpAQCAtNjgsNyArNjgsNyBAQAogICAgICAgICA8ZWNobyBtZXNzYWdlPSJXYWl0IDEwIHNlY3MgZm9yIHJlc291cmNlIGNyZWF0aW9uIi8+CiAgICAgICAgIDxzbGVlcCBzZWNvbmRzPSIxMCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTc2LDIxICs3NiwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPGphdmEgZm9yaz0ib24iIAorICAgICAgICA8amF2YSBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0ib3JnLmdsYXNzZmlzaC50ZXN0Lmptcy5hY3RpdmF0aW9ucHJvcGVydGllcy5jbGllbnQuQ2xpZW50Ij4KICAgICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke29yYi5wb3J0fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQppbmRleCBjZmFkMzhhLi40N2IyNWE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKQEAgLTI1LDggKzI1LDggQEAKIEBSZW1vdGUKIHB1YmxpYyBpbnRlcmZhY2UgTXlTZXNzaW9uQmVhblJlbW90ZSB7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUmVtb3RlSk5ESU5hbWUgPSAgTXlTZXNzaW9uQmVhbi5jbGFzcy5nZXRTaW1wbGVOYW1lKCkgKyAiL3JlbW90ZSI7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZW5kTWVzc2FnZShTdHJpbmcgdGV4dCk7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGNoZWNrTWVzc2FnZShTdHJpbmcgdGV4dCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCmluZGV4IGE2OGQ4MDMuLjA3OTZiM2MgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiB9KQogcHVibGljIGNsYXNzIE5ld01lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbi5jbGFzcy5nZXROYW1lKCkpOwotICAgIAorCiAgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7CiAKQEAgLTM5LDE2ICszOSwxNiBAQAogCiAgICAgQFJlc291cmNlKG1hcHBlZE5hbWUgPSAiam1zL2ptc191bml0X3Rlc3RfUUNGIikKICAgICBwcml2YXRlIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcWNvbkZhY3Rvcnk7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4oKSB7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgICAgICAgc2VuZE1zZyhtZXNzYWdlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhNZXNzYWdlIG1zZykgewogICAgICAgICBRdWV1ZUNvbm5lY3Rpb24gcWNvbiA9IG51bGw7CiAgICAgICAgIFF1ZXVlU2Vzc2lvbiBxc2Vzc2lvbiA9IG51bGw7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEKaW5kZXggNTJlMjczYi4uNzQ3ZmUwMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YQpAQCAtMzAsNyArMzAsNyBAQAogfSkKIHB1YmxpYyBjbGFzcyBOZXdNZXNzYWdlQmVhbjIgaW1wbGVtZW50cyBNZXNzYWdlTGlzdGVuZXIgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKE5ld01lc3NhZ2VCZWFuMi5jbGFzcy5nZXROYW1lKCkpOwotICAgIAorCiAgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7CiAKQEAgLTM5LDE2ICszOSwxNiBAQAogCiAgICAgQFJlc291cmNlKG1hcHBlZE5hbWUgPSAiam1zL2ptc191bml0X3Rlc3RfUUNGIikKICAgICBwcml2YXRlIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcWNvbkZhY3Rvcnk7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4yKCkgewogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CiAgICAgICAgIHNlbmRNc2cobWVzc2FnZSk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHNlbmRNc2coTWVzc2FnZSBtc2cpIHsKICAgICAgICAgUXVldWVDb25uZWN0aW9uIHFjb24gPSBudWxsOwogICAgICAgICBRdWV1ZVNlc3Npb24gcXNlc3Npb24gPSBudWxsOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvbm9TY29wZS9kdXJhYmxlTm9DbGllbnRJZFdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9ub1Njb3BlL2R1cmFibGVOb0NsaWVudElkV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcwppbmRleCA5MzZmOWE4Li4yYmYzZTdiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9ub1Njb3BlL2R1cmFibGVOb0NsaWVudElkV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9ub1Njb3BlL2R1cmFibGVOb0NsaWVudElkV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzdWJzY3JpcHRpb25TY29wZS1zdGFuZGFsb25lLWVtYmVkZGVkLWluc3RhbmNlU2NvcGVEdXJhYmxlTm9DbGllbnRJZFdpdGhOYW1lIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9ub1Njb3BlL2R1cmFibGVOb0NsaWVudElkV2l0aE5hbWUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvbm9TY29wZS9kdXJhYmxlTm9DbGllbnRJZFdpdGhOYW1lL2J1aWxkLnhtbAppbmRleCA3ZjUzMzZhLi4zZDc4OTE3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9ub1Njb3BlL2R1cmFibGVOb0NsaWVudElkV2l0aE5hbWUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL25vU2NvcGUvZHVyYWJsZU5vQ2xpZW50SWRXaXRoTmFtZS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ4LDEzICs0OCwxMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovTXlTZXNzaW9uQmVhbiouY2xhc3MsICoqLypNZXNzYWdlQmVhbiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudC5jbGFzcywqKi9NeVNlc3Npb25CZWFuKi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJXYWl0IDEwIHNlY3MgZm9yIGVuZHBvaW50IGFjdGl2YXRpb24iLz4KQEAgLTY4LDcgKzY4LDcgQEAKICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciByZXNvdXJjZSBjcmVhdGlvbiIvPgogICAgICAgICA8c2xlZXAgc2Vjb25kcz0iMTAiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC03NiwyMSArNzYsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxqYXZhIGZvcms9Im9uIiAKKyAgICAgICAgPGphdmEgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9Im9yZy5nbGFzc2Zpc2gudGVzdC5qbXMuYWN0aXZhdGlvbnByb3BlcnRpZXMuY2xpZW50LkNsaWVudCI+CiAgICAgICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0IiB2YWx1ZT0iJHtvcmIucG9ydH0iLz4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvbm9TY29wZS9kdXJhYmxlTm9DbGllbnRJZFdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9ub1Njb3BlL2R1cmFibGVOb0NsaWVudElkV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQppbmRleCBjZmFkMzhhLi40N2IyNWE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9ub1Njb3BlL2R1cmFibGVOb0NsaWVudElkV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9ub1Njb3BlL2R1cmFibGVOb0NsaWVudElkV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQpAQCAtMjUsOCArMjUsOCBAQAogQFJlbW90ZQogcHVibGljIGludGVyZmFjZSBNeVNlc3Npb25CZWFuUmVtb3RlIHsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSZW1vdGVKTkRJTmFtZSA9ICBNeVNlc3Npb25CZWFuLmNsYXNzLmdldFNpbXBsZU5hbWUoKSArICIvcmVtb3RlIjsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlbmRNZXNzYWdlKFN0cmluZyB0ZXh0KTsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgY2hlY2tNZXNzYWdlKFN0cmluZyB0ZXh0KTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL25vU2NvcGUvZHVyYWJsZU5vQ2xpZW50SWRXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL25vU2NvcGUvZHVyYWJsZU5vQ2xpZW50SWRXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQppbmRleCBmOWVjZThiLi43ZmZhZWQzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9ub1Njb3BlL2R1cmFibGVOb0NsaWVudElkV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvbm9TY29wZS9kdXJhYmxlTm9DbGllbnRJZFdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiB9KQogcHVibGljIGNsYXNzIE5ld01lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbi5jbGFzcy5nZXROYW1lKCkpOwotICAgIAorCiAgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7CiAKQEAgLTM5LDE2ICszOSwxNiBAQAogCiAgICAgQFJlc291cmNlKG1hcHBlZE5hbWUgPSAiam1zL2ptc191bml0X3Rlc3RfUUNGIikKICAgICBwcml2YXRlIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcWNvbkZhY3Rvcnk7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4oKSB7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgICAgICAgc2VuZE1zZyhtZXNzYWdlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhNZXNzYWdlIG1zZykgewogICAgICAgICBRdWV1ZUNvbm5lY3Rpb24gcWNvbiA9IG51bGw7CiAgICAgICAgIFF1ZXVlU2Vzc2lvbiBxc2Vzc2lvbiA9IG51bGw7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9ub1Njb3BlL2R1cmFibGVXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvbm9TY29wZS9kdXJhYmxlV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcwppbmRleCBmZTk1NGQ4Li4zOTliNTc0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9ub1Njb3BlL2R1cmFibGVXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL25vU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic3Vic2NyaXB0aW9uU2NvcGUtc3RhbmRhbG9uZS1lbWJlZGRlZC1pbnN0YW5jZVNjb3BlRHVyYWJsZVdpdGhOYW1lIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9ub1Njb3BlL2R1cmFibGVXaXRoTmFtZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9ub1Njb3BlL2R1cmFibGVXaXRoTmFtZS9idWlsZC54bWwKaW5kZXggNWM0Y2IxOC4uMTI2ZTdlNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvbm9TY29wZS9kdXJhYmxlV2l0aE5hbWUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL25vU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsMTMgKzQ4LDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9NeVNlc3Npb25CZWFuKi5jbGFzcywgKiovKk1lc3NhZ2VCZWFuKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50LmNsYXNzLCoqL015U2Vzc2lvbkJlYW4qLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IldhaXQgMTAgc2VjcyBmb3IgZW5kcG9pbnQgYWN0aXZhdGlvbiIvPgpAQCAtNjgsNyArNjgsNyBAQAogICAgICAgICA8ZWNobyBtZXNzYWdlPSJXYWl0IDEwIHNlY3MgZm9yIHJlc291cmNlIGNyZWF0aW9uIi8+CiAgICAgICAgIDxzbGVlcCBzZWNvbmRzPSIxMCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTc2LDIxICs3NiwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPGphdmEgZm9yaz0ib24iIAorICAgICAgICA8amF2YSBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0ib3JnLmdsYXNzZmlzaC50ZXN0Lmptcy5hY3RpdmF0aW9ucHJvcGVydGllcy5jbGllbnQuQ2xpZW50Ij4KICAgICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke29yYi5wb3J0fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9ub1Njb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvbm9TY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQppbmRleCBjZmFkMzhhLi40N2IyNWE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9ub1Njb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL25vU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKQEAgLTI1LDggKzI1LDggQEAKIEBSZW1vdGUKIHB1YmxpYyBpbnRlcmZhY2UgTXlTZXNzaW9uQmVhblJlbW90ZSB7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUmVtb3RlSk5ESU5hbWUgPSAgTXlTZXNzaW9uQmVhbi5jbGFzcy5nZXRTaW1wbGVOYW1lKCkgKyAiL3JlbW90ZSI7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZW5kTWVzc2FnZShTdHJpbmcgdGV4dCk7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGNoZWNrTWVzc2FnZShTdHJpbmcgdGV4dCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9ub1Njb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL25vU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCmluZGV4IGEzNmM3YTEuLjk3N2NiNjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL25vU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL25vU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiB9KQogcHVibGljIGNsYXNzIE5ld01lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbi5jbGFzcy5nZXROYW1lKCkpOwotICAgIAorCiAgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7CiAKQEAgLTQwLDE2ICs0MCwxNiBAQAogCiAgICAgQFJlc291cmNlKG1hcHBlZE5hbWUgPSAiam1zL2ptc191bml0X3Rlc3RfUUNGIikKICAgICBwcml2YXRlIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcWNvbkZhY3Rvcnk7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4oKSB7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgICAgICAgc2VuZE1zZyhtZXNzYWdlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhNZXNzYWdlIG1zZykgewogICAgICAgICBRdWV1ZUNvbm5lY3Rpb24gcWNvbiA9IG51bGw7CiAgICAgICAgIFF1ZXVlU2Vzc2lvbiBxc2Vzc2lvbiA9IG51bGw7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9ub1Njb3BlL25vbmR1cmFibGVXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvbm9TY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcwppbmRleCA2MTkyOTQ0Li4wN2YxNzZlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9ub1Njb3BlL25vbmR1cmFibGVXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic3Vic2NyaXB0aW9uU2NvcGUtc3RhbmRhbG9uZS1lbWJlZGRlZC1pbnN0YW5jZVNjb3BlTm9uRHVyYWJsZVdpdGhOYW1lIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9ub1Njb3BlL25vbmR1cmFibGVXaXRoTmFtZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9ub1Njb3BlL25vbmR1cmFibGVXaXRoTmFtZS9idWlsZC54bWwKaW5kZXggZmM1YTNiYi4uOWNmMTYxZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvbm9TY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsMTMgKzQ4LDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9NeVNlc3Npb25CZWFuKi5jbGFzcywgKiovKk1lc3NhZ2VCZWFuKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50LmNsYXNzLCoqL015U2Vzc2lvbkJlYW4qLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IldhaXQgMTAgc2VjcyBmb3IgZW5kcG9pbnQgYWN0aXZhdGlvbiIvPgpAQCAtNjgsNyArNjgsNyBAQAogICAgICAgICA8ZWNobyBtZXNzYWdlPSJXYWl0IDEwIHNlY3MgZm9yIHJlc291cmNlIGNyZWF0aW9uIi8+CiAgICAgICAgIDxzbGVlcCBzZWNvbmRzPSIxMCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTc2LDIxICs3NiwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPGphdmEgZm9yaz0ib24iIAorICAgICAgICA8amF2YSBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0ib3JnLmdsYXNzZmlzaC50ZXN0Lmptcy5hY3RpdmF0aW9ucHJvcGVydGllcy5jbGllbnQuQ2xpZW50Ij4KICAgICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke29yYi5wb3J0fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9ub1Njb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvbm9TY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQppbmRleCBjZmFkMzhhLi40N2IyNWE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9ub1Njb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKQEAgLTI1LDggKzI1LDggQEAKIEBSZW1vdGUKIHB1YmxpYyBpbnRlcmZhY2UgTXlTZXNzaW9uQmVhblJlbW90ZSB7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUmVtb3RlSk5ESU5hbWUgPSAgTXlTZXNzaW9uQmVhbi5jbGFzcy5nZXRTaW1wbGVOYW1lKCkgKyAiL3JlbW90ZSI7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZW5kTWVzc2FnZShTdHJpbmcgdGV4dCk7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGNoZWNrTWVzc2FnZShTdHJpbmcgdGV4dCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9ub1Njb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCmluZGV4IDVjOTEyZDIuLjUxODYxNjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiB9KQogcHVibGljIGNsYXNzIE5ld01lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbi5jbGFzcy5nZXROYW1lKCkpOwotICAgIAorCiAgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7CiAKQEAgLTQwLDE2ICs0MCwxNiBAQAogCiAgICAgQFJlc291cmNlKG1hcHBlZE5hbWUgPSAiam1zL2ptc191bml0X3Rlc3RfUUNGIikKICAgICBwcml2YXRlIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcWNvbkZhY3Rvcnk7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4oKSB7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgICAgICAgc2VuZE1zZyhtZXNzYWdlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhNZXNzYWdlIG1zZykgewogICAgICAgICBRdWV1ZUNvbm5lY3Rpb24gcWNvbiA9IG51bGw7CiAgICAgICAgIFF1ZXVlU2Vzc2lvbiBxc2Vzc2lvbiA9IG51bGw7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9ub1Njb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvbm9TY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQucHJvcGVydGllcwppbmRleCBlNGJhN2M1Li42NDRhOGNjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9ub1Njb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic3Vic2NyaXB0aW9uU2NvcGUtc3RhbmRhbG9uZS1lbWJlZGRlZC1pbnN0YW5jZVNjb3BlTm9uRHVyYWJsZVdpdGhvdXROYW1lIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9ub1Njb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9ub1Njb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9idWlsZC54bWwKaW5kZXggZDFjOGI0NC4uMzQ5MjllYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvbm9TY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsMTMgKzQ4LDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9NeVNlc3Npb25CZWFuKi5jbGFzcywgKiovKk1lc3NhZ2VCZWFuKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50LmNsYXNzLCoqL015U2Vzc2lvbkJlYW4qLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IldhaXQgMTAgc2VjcyBmb3IgZW5kcG9pbnQgYWN0aXZhdGlvbiIvPgpAQCAtNjgsNyArNjgsNyBAQAogICAgICAgICA8ZWNobyBtZXNzYWdlPSJXYWl0IDEwIHNlY3MgZm9yIHJlc291cmNlIGNyZWF0aW9uIi8+CiAgICAgICAgIDxzbGVlcCBzZWNvbmRzPSIxMCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTc2LDIxICs3NiwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPGphdmEgZm9yaz0ib24iIAorICAgICAgICA8amF2YSBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0ib3JnLmdsYXNzZmlzaC50ZXN0Lmptcy5hY3RpdmF0aW9ucHJvcGVydGllcy5jbGllbnQuQ2xpZW50Ij4KICAgICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke29yYi5wb3J0fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9ub1Njb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvZW1iZWRkZWQvbm9TY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQppbmRleCBjZmFkMzhhLi40N2IyNWE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9ub1Njb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKQEAgLTI1LDggKzI1LDggQEAKIEBSZW1vdGUKIHB1YmxpYyBpbnRlcmZhY2UgTXlTZXNzaW9uQmVhblJlbW90ZSB7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUmVtb3RlSk5ESU5hbWUgPSAgTXlTZXNzaW9uQmVhbi5jbGFzcy5nZXRTaW1wbGVOYW1lKCkgKyAiL3JlbW90ZSI7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZW5kTWVzc2FnZShTdHJpbmcgdGV4dCk7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGNoZWNrTWVzc2FnZShTdHJpbmcgdGV4dCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9lbWJlZGRlZC9ub1Njb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCmluZGV4IDg5MTZjYjIuLjA2MDhkODQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2VtYmVkZGVkL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiB9KQogcHVibGljIGNsYXNzIE5ld01lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbi5jbGFzcy5nZXROYW1lKCkpOwotICAgIAorCiAgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7CiAKQEAgLTM5LDE2ICszOSwxNiBAQAogCiAgICAgQFJlc291cmNlKG1hcHBlZE5hbWUgPSAiam1zL2ptc191bml0X3Rlc3RfUUNGIikKICAgICBwcml2YXRlIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcWNvbkZhY3Rvcnk7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4oKSB7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgICAgICAgc2VuZE1zZyhtZXNzYWdlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhNZXNzYWdlIG1zZykgewogICAgICAgICBRdWV1ZUNvbm5lY3Rpb24gcWNvbiA9IG51bGw7CiAgICAgICAgIFF1ZXVlU2Vzc2lvbiBxc2Vzc2lvbiA9IG51bGw7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZTRhZjZkMC4uYjMyMzdjNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzdWJzY3JpcHRpb25TY29wZS1zdGFuZGFsb25lLWxvY2FsLWNsdXN0ZXJTY29wZUR1cmFibGVXaXRoTmFtZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRoTmFtZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnhtbAppbmRleCAwMTY2MjJmLi41NDczZDA4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsMTMgKzQ4LDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9NeVNlc3Npb25CZWFuKi5jbGFzcywgKiovKk1lc3NhZ2VCZWFuKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50LmNsYXNzLCoqL015U2Vzc2lvbkJlYW4qLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IldhaXQgMTAgc2VjcyBmb3IgZW5kcG9pbnQgYWN0aXZhdGlvbiIvPgpAQCAtNjgsNyArNjgsNyBAQAogICAgICAgICA8ZWNobyBtZXNzYWdlPSJXYWl0IDEwIHNlY3MgZm9yIHJlc291cmNlIGNyZWF0aW9uIi8+CiAgICAgICAgIDxzbGVlcCBzZWNvbmRzPSIxMCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTc2LDIxICs3NiwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPGphdmEgZm9yaz0ib24iIAorICAgICAgICA8amF2YSBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0ib3JnLmdsYXNzZmlzaC50ZXN0Lmptcy5hY3RpdmF0aW9ucHJvcGVydGllcy5jbGllbnQuQ2xpZW50Ij4KICAgICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke29yYi5wb3J0fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKaW5kZXggY2ZhZDM4YS4uNDdiMjVhOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQpAQCAtMjUsOCArMjUsOCBAQAogQFJlbW90ZQogcHVibGljIGludGVyZmFjZSBNeVNlc3Npb25CZWFuUmVtb3RlIHsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSZW1vdGVKTkRJTmFtZSA9ICBNeVNlc3Npb25CZWFuLmNsYXNzLmdldFNpbXBsZU5hbWUoKSArICIvcmVtb3RlIjsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlbmRNZXNzYWdlKFN0cmluZyB0ZXh0KTsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgY2hlY2tNZXNzYWdlKFN0cmluZyB0ZXh0KTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCmluZGV4IDBkYmYxODEuLjUwYTI3OTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQpAQCAtMzEsNyArMzEsNyBAQAogfSkKIHB1YmxpYyBjbGFzcyBOZXdNZXNzYWdlQmVhbiBpbXBsZW1lbnRzIE1lc3NhZ2VMaXN0ZW5lciB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoTmV3TWVzc2FnZUJlYW4uY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAKKwogICAgIEBSZXNvdXJjZQogICAgIHByaXZhdGUgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjOwogCkBAIC00MCwxNiArNDAsMTYgQEAKIAogICAgIEBSZXNvdXJjZShtYXBwZWROYW1lID0gImptcy9qbXNfdW5pdF90ZXN0X1FDRiIpCiAgICAgcHJpdmF0ZSBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHFjb25GYWN0b3J5OwotICAgIAorCiAgICAgcHVibGljIE5ld01lc3NhZ2VCZWFuKCkgewogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CiAgICAgICAgIHNlbmRNc2cobWVzc2FnZSk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHNlbmRNc2coTWVzc2FnZSBtc2cpIHsKICAgICAgICAgUXVldWVDb25uZWN0aW9uIHFjb24gPSBudWxsOwogICAgICAgICBRdWV1ZVNlc3Npb24gcXNlc3Npb24gPSBudWxsOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YQppbmRleCA5YWRlNzRiLi5iNmM2ODI3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YQpAQCAtMzEsNyArMzEsNyBAQAogfSkKIHB1YmxpYyBjbGFzcyBOZXdNZXNzYWdlQmVhbjIgaW1wbGVtZW50cyBNZXNzYWdlTGlzdGVuZXIgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKE5ld01lc3NhZ2VCZWFuMi5jbGFzcy5nZXROYW1lKCkpOwotICAgIAorCiAgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7CiAKQEAgLTQwLDE2ICs0MCwxNiBAQAogCiAgICAgQFJlc291cmNlKG1hcHBlZE5hbWUgPSAiam1zL2ptc191bml0X3Rlc3RfUUNGIikKICAgICBwcml2YXRlIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcWNvbkZhY3Rvcnk7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4yKCkgewogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CiAgICAgICAgIHNlbmRNc2cobWVzc2FnZSk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHNlbmRNc2coTWVzc2FnZSBtc2cpIHsKICAgICAgICAgUXVldWVDb25uZWN0aW9uIHFjb24gPSBudWxsOwogICAgICAgICBRdWV1ZVNlc3Npb24gcXNlc3Npb24gPSBudWxsOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDE3NzFjMzIuLmUwYjQzZTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic3Vic2NyaXB0aW9uU2NvcGUtc3RhbmRhbG9uZS1sb2NhbC1jbHVzdGVyU2NvcGVEdXJhYmxlV2l0aG91dE5hbWUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9idWlsZC54bWwKaW5kZXggYWE4NWY1Ny4uOWQzMGQwNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ4LDEzICs0OCwxMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovTXlTZXNzaW9uQmVhbiouY2xhc3MsICoqLypNZXNzYWdlQmVhbiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudC5jbGFzcywqKi9NeVNlc3Npb25CZWFuKi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJXYWl0IDEwIHNlY3MgZm9yIGVuZHBvaW50IGFjdGl2YXRpb24iLz4KQEAgLTY4LDcgKzY4LDcgQEAKICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciByZXNvdXJjZSBjcmVhdGlvbiIvPgogICAgICAgICA8c2xlZXAgc2Vjb25kcz0iMTAiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC03NiwyMSArNzYsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxqYXZhIGZvcms9Im9uIiAKKyAgICAgICAgPGphdmEgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9Im9yZy5nbGFzc2Zpc2gudGVzdC5qbXMuYWN0aXZhdGlvbnByb3BlcnRpZXMuY2xpZW50LkNsaWVudCI+CiAgICAgICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0IiB2YWx1ZT0iJHtvcmIucG9ydH0iLz4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCmluZGV4IGNmYWQzOGEuLjQ3YjI1YTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKQEAgLTI1LDggKzI1LDggQEAKIEBSZW1vdGUKIHB1YmxpYyBpbnRlcmZhY2UgTXlTZXNzaW9uQmVhblJlbW90ZSB7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUmVtb3RlSk5ESU5hbWUgPSAgTXlTZXNzaW9uQmVhbi5jbGFzcy5nZXRTaW1wbGVOYW1lKCkgKyAiL3JlbW90ZSI7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZW5kTWVzc2FnZShTdHJpbmcgdGV4dCk7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGNoZWNrTWVzc2FnZShTdHJpbmcgdGV4dCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQppbmRleCA0MWNmZDBiLi4yMWU5NWUwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKQEAgLTMwLDcgKzMwLDcgQEAKIH0pCiBwdWJsaWMgY2xhc3MgTmV3TWVzc2FnZUJlYW4gaW1wbGVtZW50cyBNZXNzYWdlTGlzdGVuZXIgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKE5ld01lc3NhZ2VCZWFuLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtMzksMTYgKzM5LDE2IEBACiAKICAgICBAUmVzb3VyY2UobWFwcGVkTmFtZSA9ICJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIHByaXZhdGUgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxY29uRmFjdG9yeTsKLSAgICAKKwogICAgIHB1YmxpYyBOZXdNZXNzYWdlQmVhbigpIHsKICAgICB9Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBAVHJhbnNhY3Rpb25BdHRyaWJ1dGUoVHJhbnNhY3Rpb25BdHRyaWJ1dGVUeXBlLk5PVF9TVVBQT1JURUQpCiAgICAgcHVibGljIHZvaWQgb25NZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewogICAgICAgICBzZW5kTXNnKG1lc3NhZ2UpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBzZW5kTXNnKE1lc3NhZ2UgbXNnKSB7CiAgICAgICAgIFF1ZXVlQ29ubmVjdGlvbiBxY29uID0gbnVsbDsKICAgICAgICAgUXVldWVTZXNzaW9uIHFzZXNzaW9uID0gbnVsbDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEKaW5kZXggMDIxMzRiNy4uMTMyZTI0NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvQ2x1c3RlclNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEKQEAgLTMwLDcgKzMwLDcgQEAKIH0pCiBwdWJsaWMgY2xhc3MgTmV3TWVzc2FnZUJlYW4yIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbjIuY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAKKwogICAgIEBSZXNvdXJjZQogICAgIHByaXZhdGUgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjOwogCkBAIC0zOSwxNiArMzksMTYgQEAKIAogICAgIEBSZXNvdXJjZShtYXBwZWROYW1lID0gImptcy9qbXNfdW5pdF90ZXN0X1FDRiIpCiAgICAgcHJpdmF0ZSBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHFjb25GYWN0b3J5OwotICAgIAorCiAgICAgcHVibGljIE5ld01lc3NhZ2VCZWFuMigpIHsKICAgICB9Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBAVHJhbnNhY3Rpb25BdHRyaWJ1dGUoVHJhbnNhY3Rpb25BdHRyaWJ1dGVUeXBlLk5PVF9TVVBQT1JURUQpCiAgICAgcHVibGljIHZvaWQgb25NZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewogICAgICAgICBzZW5kTXNnKG1lc3NhZ2UpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBzZW5kTXNnKE1lc3NhZ2UgbXNnKSB7CiAgICAgICAgIFF1ZXVlQ29ubmVjdGlvbiBxY29uID0gbnVsbDsKICAgICAgICAgUXVldWVTZXNzaW9uIHFzZXNzaW9uID0gbnVsbDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcwppbmRleCBmOTM4YWU2Li5jMTAyMWY3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InN1YnNjcmlwdGlvblNjb3BlLXN0YW5kYWxvbmUtbG9jYWwtY2x1c3RlclNjb3BlTm9uRHVyYWJsZVdpdGhOYW1lIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvYnVpbGQueG1sCmluZGV4IDlkOTJlMGIuLjk5NTE3YWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OCwxMyArNDgsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL015U2Vzc2lvbkJlYW4qLmNsYXNzLCAqKi8qTWVzc2FnZUJlYW4qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQuY2xhc3MsKiovTXlTZXNzaW9uQmVhbiouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciBlbmRwb2ludCBhY3RpdmF0aW9uIi8+CkBAIC02OCw3ICs2OCw3IEBACiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IldhaXQgMTAgc2VjcyBmb3IgcmVzb3VyY2UgY3JlYXRpb24iLz4KICAgICAgICAgPHNsZWVwIHNlY29uZHM9IjEwIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtNzYsMjEgKzc2LDIxIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICA8amF2YSBmb3JrPSJvbiIgCisgICAgICAgIDxqYXZhIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50Lmphcjoke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSJvcmcuZ2xhc3NmaXNoLnRlc3Quam1zLmFjdGl2YXRpb25wcm9wZXJ0aWVzLmNsaWVudC5DbGllbnQiPgogICAgICAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0ib3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydCIgdmFsdWU9IiR7b3JiLnBvcnR9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQppbmRleCBjZmFkMzhhLi40N2IyNWE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCkBAIC0yNSw4ICsyNSw4IEBACiBAUmVtb3RlCiBwdWJsaWMgaW50ZXJmYWNlIE15U2Vzc2lvbkJlYW5SZW1vdGUgewogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJlbW90ZUpORElOYW1lID0gIE15U2Vzc2lvbkJlYW4uY2xhc3MuZ2V0U2ltcGxlTmFtZSgpICsgIi9yZW1vdGUiOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2VuZE1lc3NhZ2UoU3RyaW5nIHRleHQpOwotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBjaGVja01lc3NhZ2UoU3RyaW5nIHRleHQpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKaW5kZXggYTFiZWEwZC4uMDgyMWMyMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiB9KQogcHVibGljIGNsYXNzIE5ld01lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbi5jbGFzcy5nZXROYW1lKCkpOwotICAgIAorCiAgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7CiAKQEAgLTQwLDE2ICs0MCwxNiBAQAogCiAgICAgQFJlc291cmNlKG1hcHBlZE5hbWUgPSAiam1zL2ptc191bml0X3Rlc3RfUUNGIikKICAgICBwcml2YXRlIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcWNvbkZhY3Rvcnk7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4oKSB7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgICAgICAgc2VuZE1zZyhtZXNzYWdlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhNZXNzYWdlIG1zZykgewogICAgICAgICBRdWV1ZUNvbm5lY3Rpb24gcWNvbiA9IG51bGw7CiAgICAgICAgIFF1ZXVlU2Vzc2lvbiBxc2Vzc2lvbiA9IG51bGw7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCmluZGV4IDRlMTY1MWYuLjA5NzRhOWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiB9KQogcHVibGljIGNsYXNzIE5ld01lc3NhZ2VCZWFuMiBpbXBsZW1lbnRzIE1lc3NhZ2VMaXN0ZW5lciB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoTmV3TWVzc2FnZUJlYW4yLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtNDAsMTYgKzQwLDE2IEBACiAKICAgICBAUmVzb3VyY2UobWFwcGVkTmFtZSA9ICJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIHByaXZhdGUgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxY29uRmFjdG9yeTsKLSAgICAKKwogICAgIHB1YmxpYyBOZXdNZXNzYWdlQmVhbjIoKSB7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgICAgICAgc2VuZE1zZyhtZXNzYWdlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhNZXNzYWdlIG1zZykgewogICAgICAgICBRdWV1ZUNvbm5lY3Rpb24gcWNvbiA9IG51bGw7CiAgICAgICAgIFF1ZXVlU2Vzc2lvbiBxc2Vzc2lvbiA9IG51bGw7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggM2NjZThlOC4uNzhiZjQ2NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzdWJzY3JpcHRpb25TY29wZS1zdGFuZGFsb25lLWxvY2FsLWNsdXN0ZXJTY29wZU5vbkR1cmFibGVXaXRob3V0TmFtZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnhtbAppbmRleCAxYjFkNGNlLi5iZDEyMmUxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsMTMgKzQ4LDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9NeVNlc3Npb25CZWFuKi5jbGFzcywgKiovKk1lc3NhZ2VCZWFuKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50LmNsYXNzLCoqL015U2Vzc2lvbkJlYW4qLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IldhaXQgMTAgc2VjcyBmb3IgZW5kcG9pbnQgYWN0aXZhdGlvbiIvPgpAQCAtNjgsNyArNjgsNyBAQAogICAgICAgICA8ZWNobyBtZXNzYWdlPSJXYWl0IDEwIHNlY3MgZm9yIHJlc291cmNlIGNyZWF0aW9uIi8+CiAgICAgICAgIDxzbGVlcCBzZWNvbmRzPSIxMCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTc2LDIxICs3NiwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPGphdmEgZm9yaz0ib24iIAorICAgICAgICA8amF2YSBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0ib3JnLmdsYXNzZmlzaC50ZXN0Lmptcy5hY3RpdmF0aW9ucHJvcGVydGllcy5jbGllbnQuQ2xpZW50Ij4KICAgICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke29yYi5wb3J0fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKaW5kZXggY2ZhZDM4YS4uNDdiMjVhOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQpAQCAtMjUsOCArMjUsOCBAQAogQFJlbW90ZQogcHVibGljIGludGVyZmFjZSBNeVNlc3Npb25CZWFuUmVtb3RlIHsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSZW1vdGVKTkRJTmFtZSA9ICBNeVNlc3Npb25CZWFuLmNsYXNzLmdldFNpbXBsZU5hbWUoKSArICIvcmVtb3RlIjsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlbmRNZXNzYWdlKFN0cmluZyB0ZXh0KTsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgY2hlY2tNZXNzYWdlKFN0cmluZyB0ZXh0KTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCmluZGV4IGJmNzdlNjAuLjAxZmRmZDIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0NsdXN0ZXJTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQpAQCAtMjksNyArMjksNyBAQAogfSkKIHB1YmxpYyBjbGFzcyBOZXdNZXNzYWdlQmVhbiBpbXBsZW1lbnRzIE1lc3NhZ2VMaXN0ZW5lciB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoTmV3TWVzc2FnZUJlYW4uY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAKKwogICAgIEBSZXNvdXJjZQogICAgIHByaXZhdGUgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjOwogCkBAIC0zOCwxNiArMzgsMTYgQEAKIAogICAgIEBSZXNvdXJjZShtYXBwZWROYW1lID0gImptcy9qbXNfdW5pdF90ZXN0X1FDRiIpCiAgICAgcHJpdmF0ZSBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHFjb25GYWN0b3J5OwotICAgIAorCiAgICAgcHVibGljIE5ld01lc3NhZ2VCZWFuKCkgewogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CiAgICAgICAgIHNlbmRNc2cobWVzc2FnZSk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHNlbmRNc2coTWVzc2FnZSBtc2cpIHsKICAgICAgICAgUXVldWVDb25uZWN0aW9uIHFjb24gPSBudWxsOwogICAgICAgICBRdWV1ZVNlc3Npb24gcXNlc3Npb24gPSBudWxsOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvQ2x1c3RlclNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YQppbmRleCA2YmQ4OTM0Li4zMjhlMzY5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9DbHVzdGVyU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YQpAQCAtMzAsNyArMzAsNyBAQAogfSkKIHB1YmxpYyBjbGFzcyBOZXdNZXNzYWdlQmVhbjIgaW1wbGVtZW50cyBNZXNzYWdlTGlzdGVuZXIgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKE5ld01lc3NhZ2VCZWFuMi5jbGFzcy5nZXROYW1lKCkpOwotICAgIAorCiAgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7CiAKQEAgLTM5LDE2ICszOSwxNiBAQAogCiAgICAgQFJlc291cmNlKG1hcHBlZE5hbWUgPSAiam1zL2ptc191bml0X3Rlc3RfUUNGIikKICAgICBwcml2YXRlIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcWNvbkZhY3Rvcnk7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4yKCkgewogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CiAgICAgICAgIHNlbmRNc2cobWVzc2FnZSk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHNlbmRNc2coTWVzc2FnZSBtc2cpIHsKICAgICAgICAgUXVldWVDb25uZWN0aW9uIHFjb24gPSBudWxsOwogICAgICAgICBRdWV1ZVNlc3Npb24gcXNlc3Npb24gPSBudWxsOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZTM1NTUyMi4uODVkMmYyMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InN1YnNjcmlwdGlvblNjb3BlLXN0YW5kYWxvbmUtbG9jYWwtaW5zdGFuY2VTY29wZUR1cmFibGVXaXRoTmFtZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aE5hbWUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aE5hbWUvYnVpbGQueG1sCmluZGV4IDI4Y2QyNDEuLjU5ZGVkMTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRoTmFtZS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ4LDEzICs0OCwxMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovTXlTZXNzaW9uQmVhbiouY2xhc3MsICoqLypNZXNzYWdlQmVhbiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudC5jbGFzcywqKi9NeVNlc3Npb25CZWFuKi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJXYWl0IDEwIHNlY3MgZm9yIGVuZHBvaW50IGFjdGl2YXRpb24iLz4KQEAgLTY4LDcgKzY4LDcgQEAKICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciByZXNvdXJjZSBjcmVhdGlvbiIvPgogICAgICAgICA8c2xlZXAgc2Vjb25kcz0iMTAiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC03NiwyMSArNzYsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxqYXZhIGZvcms9Im9uIiAKKyAgICAgICAgPGphdmEgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9Im9yZy5nbGFzc2Zpc2gudGVzdC5qbXMuYWN0aXZhdGlvbnByb3BlcnRpZXMuY2xpZW50LkNsaWVudCI+CiAgICAgICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0IiB2YWx1ZT0iJHtvcmIucG9ydH0iLz4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKaW5kZXggY2ZhZDM4YS4uNDdiMjVhOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCkBAIC0yNSw4ICsyNSw4IEBACiBAUmVtb3RlCiBwdWJsaWMgaW50ZXJmYWNlIE15U2Vzc2lvbkJlYW5SZW1vdGUgewogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJlbW90ZUpORElOYW1lID0gIE15U2Vzc2lvbkJlYW4uY2xhc3MuZ2V0U2ltcGxlTmFtZSgpICsgIi9yZW1vdGUiOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2VuZE1lc3NhZ2UoU3RyaW5nIHRleHQpOwotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBjaGVja01lc3NhZ2UoU3RyaW5nIHRleHQpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQppbmRleCBkMWM4MjI3Li5jNjI3YWZhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQpAQCAtMzEsNyArMzEsNyBAQAogfSkKIHB1YmxpYyBjbGFzcyBOZXdNZXNzYWdlQmVhbiBpbXBsZW1lbnRzIE1lc3NhZ2VMaXN0ZW5lciB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoTmV3TWVzc2FnZUJlYW4uY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAKKwogICAgIEBSZXNvdXJjZQogICAgIHByaXZhdGUgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjOwogCkBAIC00MCwxNiArNDAsMTYgQEAKIAogICAgIEBSZXNvdXJjZShtYXBwZWROYW1lID0gImptcy9qbXNfdW5pdF90ZXN0X1FDRiIpCiAgICAgcHJpdmF0ZSBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHFjb25GYWN0b3J5OwotICAgIAorCiAgICAgcHVibGljIE5ld01lc3NhZ2VCZWFuKCkgewogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CiAgICAgICAgIHNlbmRNc2cobWVzc2FnZSk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHNlbmRNc2coTWVzc2FnZSBtc2cpIHsKICAgICAgICAgUXVldWVDb25uZWN0aW9uIHFjb24gPSBudWxsOwogICAgICAgICBRdWV1ZVNlc3Npb24gcXNlc3Npb24gPSBudWxsOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCmluZGV4IGM0MGYxN2YuLmJiNGZiN2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKIH0pCiBwdWJsaWMgY2xhc3MgTmV3TWVzc2FnZUJlYW4yIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbjIuY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAKKwogICAgIEBSZXNvdXJjZQogICAgIHByaXZhdGUgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjOwogCkBAIC00MCwxNiArNDAsMTYgQEAKIAogICAgIEBSZXNvdXJjZShtYXBwZWROYW1lID0gImptcy9qbXNfdW5pdF90ZXN0X1FDRiIpCiAgICAgcHJpdmF0ZSBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHFjb25GYWN0b3J5OwotICAgIAorCiAgICAgcHVibGljIE5ld01lc3NhZ2VCZWFuMigpIHsKICAgICB9Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBAVHJhbnNhY3Rpb25BdHRyaWJ1dGUoVHJhbnNhY3Rpb25BdHRyaWJ1dGVUeXBlLk5PVF9TVVBQT1JURUQpCiAgICAgcHVibGljIHZvaWQgb25NZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewogICAgICAgICBzZW5kTXNnKG1lc3NhZ2UpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBzZW5kTXNnKE1lc3NhZ2UgbXNnKSB7CiAgICAgICAgIFF1ZXVlQ29ubmVjdGlvbiBxY29uID0gbnVsbDsKICAgICAgICAgUXVldWVTZXNzaW9uIHFzZXNzaW9uID0gbnVsbDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDgxM2ZhNGYuLmNjZmRlMWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzdWJzY3JpcHRpb25TY29wZS1zdGFuZGFsb25lLWxvY2FsLWluc3RhbmNlU2NvcGVEdXJhYmxlV2l0aG91dE5hbWUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnhtbAppbmRleCBlNzI3OTMwLi5kOGIzOWNmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OCwxMyArNDgsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL015U2Vzc2lvbkJlYW4qLmNsYXNzLCAqKi8qTWVzc2FnZUJlYW4qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQuY2xhc3MsKiovTXlTZXNzaW9uQmVhbiouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciBlbmRwb2ludCBhY3RpdmF0aW9uIi8+CkBAIC02OCw3ICs2OCw3IEBACiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IldhaXQgMTAgc2VjcyBmb3IgcmVzb3VyY2UgY3JlYXRpb24iLz4KICAgICAgICAgPHNsZWVwIHNlY29uZHM9IjEwIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtNzYsMjEgKzc2LDIxIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICA8amF2YSBmb3JrPSJvbiIgCisgICAgICAgIDxqYXZhIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50Lmphcjoke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSJvcmcuZ2xhc3NmaXNoLnRlc3Quam1zLmFjdGl2YXRpb25wcm9wZXJ0aWVzLmNsaWVudC5DbGllbnQiPgogICAgICAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0ib3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydCIgdmFsdWU9IiR7b3JiLnBvcnR9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCmluZGV4IGNmYWQzOGEuLjQ3YjI1YTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQpAQCAtMjUsOCArMjUsOCBAQAogQFJlbW90ZQogcHVibGljIGludGVyZmFjZSBNeVNlc3Npb25CZWFuUmVtb3RlIHsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSZW1vdGVKTkRJTmFtZSA9ICBNeVNlc3Npb25CZWFuLmNsYXNzLmdldFNpbXBsZU5hbWUoKSArICIvcmVtb3RlIjsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlbmRNZXNzYWdlKFN0cmluZyB0ZXh0KTsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgY2hlY2tNZXNzYWdlKFN0cmluZyB0ZXh0KTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKaW5kZXggZmY2YTE3MC4uNzE1NDQ2ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKQEAgLTMwLDcgKzMwLDcgQEAKIH0pCiBwdWJsaWMgY2xhc3MgTmV3TWVzc2FnZUJlYW4gaW1wbGVtZW50cyBNZXNzYWdlTGlzdGVuZXIgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKE5ld01lc3NhZ2VCZWFuLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtMzksMTYgKzM5LDE2IEBACiAKICAgICBAUmVzb3VyY2UobWFwcGVkTmFtZSA9ICJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIHByaXZhdGUgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxY29uRmFjdG9yeTsKLSAgICAKKwogICAgIHB1YmxpYyBOZXdNZXNzYWdlQmVhbigpIHsKICAgICB9Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBAVHJhbnNhY3Rpb25BdHRyaWJ1dGUoVHJhbnNhY3Rpb25BdHRyaWJ1dGVUeXBlLk5PVF9TVVBQT1JURUQpCiAgICAgcHVibGljIHZvaWQgb25NZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewogICAgICAgICBzZW5kTXNnKG1lc3NhZ2UpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBzZW5kTXNnKE1lc3NhZ2UgbXNnKSB7CiAgICAgICAgIFF1ZXVlQ29ubmVjdGlvbiBxY29uID0gbnVsbDsKICAgICAgICAgUXVldWVTZXNzaW9uIHFzZXNzaW9uID0gbnVsbDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0luc3RhbmNlU2NvcGUvZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YQppbmRleCA4OTk4NzZkLi5kODVjZjQzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL2R1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvSW5zdGFuY2VTY29wZS9kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiB9KQogcHVibGljIGNsYXNzIE5ld01lc3NhZ2VCZWFuMiBpbXBsZW1lbnRzIE1lc3NhZ2VMaXN0ZW5lciB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoTmV3TWVzc2FnZUJlYW4yLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBwcml2YXRlIE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYzsKIApAQCAtMzksMTYgKzM5LDE2IEBACiAKICAgICBAUmVzb3VyY2UobWFwcGVkTmFtZSA9ICJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIHByaXZhdGUgUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxY29uRmFjdG9yeTsKLSAgICAKKwogICAgIHB1YmxpYyBOZXdNZXNzYWdlQmVhbjIoKSB7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgICAgICAgc2VuZE1zZyhtZXNzYWdlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhNZXNzYWdlIG1zZykgewogICAgICAgICBRdWV1ZUNvbm5lY3Rpb24gcWNvbiA9IG51bGw7CiAgICAgICAgIFF1ZXVlU2Vzc2lvbiBxc2Vzc2lvbiA9IG51bGw7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcwppbmRleCBkNDY4NjQzLi4zNTBkMTM2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic3Vic2NyaXB0aW9uU2NvcGUtc3RhbmRhbG9uZS1sb2NhbC1pbnN0YW5jZVNjb3BlTm9uRHVyYWJsZVdpdGhOYW1lIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9idWlsZC54bWwKaW5kZXggOGM5MzY5OC4uM2UzZDk5MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDgsMTMgKzQ4LDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9NeVNlc3Npb25CZWFuKi5jbGFzcywgKiovKk1lc3NhZ2VCZWFuKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50LmNsYXNzLCoqL015U2Vzc2lvbkJlYW4qLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IldhaXQgMTAgc2VjcyBmb3IgZW5kcG9pbnQgYWN0aXZhdGlvbiIvPgpAQCAtNjgsNyArNjgsNyBAQAogICAgICAgICA8ZWNobyBtZXNzYWdlPSJXYWl0IDEwIHNlY3MgZm9yIHJlc291cmNlIGNyZWF0aW9uIi8+CiAgICAgICAgIDxzbGVlcCBzZWNvbmRzPSIxMCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTc2LDIxICs3NiwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPGphdmEgZm9yaz0ib24iIAorICAgICAgICA8amF2YSBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0ib3JnLmdsYXNzZmlzaC50ZXN0Lmptcy5hY3RpdmF0aW9ucHJvcGVydGllcy5jbGllbnQuQ2xpZW50Ij4KICAgICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke29yYi5wb3J0fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQppbmRleCBjZmFkMzhhLi40N2IyNWE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKQEAgLTI1LDggKzI1LDggQEAKIEBSZW1vdGUKIHB1YmxpYyBpbnRlcmZhY2UgTXlTZXNzaW9uQmVhblJlbW90ZSB7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUmVtb3RlSk5ESU5hbWUgPSAgTXlTZXNzaW9uQmVhbi5jbGFzcy5nZXRTaW1wbGVOYW1lKCkgKyAiL3JlbW90ZSI7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZW5kTWVzc2FnZShTdHJpbmcgdGV4dCk7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGNoZWNrTWVzc2FnZShTdHJpbmcgdGV4dCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCmluZGV4IDdiNWRiOTUuLjI2ZWUzODIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiB9KQogcHVibGljIGNsYXNzIE5ld01lc3NhZ2VCZWFuIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbi5jbGFzcy5nZXROYW1lKCkpOwotICAgIAorCiAgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7CiAKQEAgLTQwLDE2ICs0MCwxNiBAQAogCiAgICAgQFJlc291cmNlKG1hcHBlZE5hbWUgPSAiam1zL2ptc191bml0X3Rlc3RfUUNGIikKICAgICBwcml2YXRlIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcWNvbkZhY3Rvcnk7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4oKSB7CiAgICAgfQotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5OT1RfU1VQUE9SVEVEKQogICAgIHB1YmxpYyB2b2lkIG9uTWVzc2FnZShNZXNzYWdlIG1lc3NhZ2UpIHsKICAgICAgICAgc2VuZE1zZyhtZXNzYWdlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgc2VuZE1zZyhNZXNzYWdlIG1zZykgewogICAgICAgICBRdWV1ZUNvbm5lY3Rpb24gcWNvbiA9IG51bGw7CiAgICAgICAgIFF1ZXVlU2Vzc2lvbiBxc2Vzc2lvbiA9IG51bGw7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEKaW5kZXggMzUzMGE4Ni4uMDBhN2IyMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YQpAQCAtMzEsNyArMzEsNyBAQAogfSkKIHB1YmxpYyBjbGFzcyBOZXdNZXNzYWdlQmVhbjIgaW1wbGVtZW50cyBNZXNzYWdlTGlzdGVuZXIgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKE5ld01lc3NhZ2VCZWFuMi5jbGFzcy5nZXROYW1lKCkpOwotICAgIAorCiAgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7CiAKQEAgLTQwLDE2ICs0MCwxNiBAQAogCiAgICAgQFJlc291cmNlKG1hcHBlZE5hbWUgPSAiam1zL2ptc191bml0X3Rlc3RfUUNGIikKICAgICBwcml2YXRlIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcWNvbkZhY3Rvcnk7Ci0gICAgCisKICAgICBwdWJsaWMgTmV3TWVzc2FnZUJlYW4yKCkgewogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CiAgICAgICAgIHNlbmRNc2cobWVzc2FnZSk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHNlbmRNc2coTWVzc2FnZSBtc2cpIHsKICAgICAgICAgUXVldWVDb25uZWN0aW9uIHFjb24gPSBudWxsOwogICAgICAgICBRdWV1ZVNlc3Npb24gcXNlc3Npb24gPSBudWxsOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZDkyYzYzMi4uMDVlMjA3OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InN1YnNjcmlwdGlvblNjb3BlLXN0YW5kYWxvbmUtbG9jYWwtaW5zdGFuY2VTY29wZU5vbkR1cmFibGVXaXRob3V0TmFtZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQueG1sCmluZGV4IDkwOTExNGMuLjRmZGFkNmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ4LDEzICs0OCwxMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovTXlTZXNzaW9uQmVhbiouY2xhc3MsICoqLypNZXNzYWdlQmVhbiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudC5jbGFzcywqKi9NeVNlc3Npb25CZWFuKi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJXYWl0IDEwIHNlY3MgZm9yIGVuZHBvaW50IGFjdGl2YXRpb24iLz4KQEAgLTY4LDcgKzY4LDcgQEAKICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciByZXNvdXJjZSBjcmVhdGlvbiIvPgogICAgICAgICA8c2xlZXAgc2Vjb25kcz0iMTAiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC03NiwyMSArNzYsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxqYXZhIGZvcms9Im9uIiAKKyAgICAgICAgPGphdmEgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9Im9yZy5nbGFzc2Zpc2gudGVzdC5qbXMuYWN0aXZhdGlvbnByb3BlcnRpZXMuY2xpZW50LkNsaWVudCI+CiAgICAgICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0IiB2YWx1ZT0iJHtvcmIucG9ydH0iLz4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKaW5kZXggY2ZhZDM4YS4uNDdiMjVhOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCkBAIC0yNSw4ICsyNSw4IEBACiBAUmVtb3RlCiBwdWJsaWMgaW50ZXJmYWNlIE15U2Vzc2lvbkJlYW5SZW1vdGUgewogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJlbW90ZUpORElOYW1lID0gIE15U2Vzc2lvbkJlYW4uY2xhc3MuZ2V0U2ltcGxlTmFtZSgpICsgIi9yZW1vdGUiOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2VuZE1lc3NhZ2UoU3RyaW5nIHRleHQpOwotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBjaGVja01lc3NhZ2UoU3RyaW5nIHRleHQpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQppbmRleCBhNjhkODAzLi4wNzk2YjNjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQpAQCAtMzAsNyArMzAsNyBAQAogfSkKIHB1YmxpYyBjbGFzcyBOZXdNZXNzYWdlQmVhbiBpbXBsZW1lbnRzIE1lc3NhZ2VMaXN0ZW5lciB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoTmV3TWVzc2FnZUJlYW4uY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAKKwogICAgIEBSZXNvdXJjZQogICAgIHByaXZhdGUgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjOwogCkBAIC0zOSwxNiArMzksMTYgQEAKIAogICAgIEBSZXNvdXJjZShtYXBwZWROYW1lID0gImptcy9qbXNfdW5pdF90ZXN0X1FDRiIpCiAgICAgcHJpdmF0ZSBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHFjb25GYWN0b3J5OwotICAgIAorCiAgICAgcHVibGljIE5ld01lc3NhZ2VCZWFuKCkgewogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CiAgICAgICAgIHNlbmRNc2cobWVzc2FnZSk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHNlbmRNc2coTWVzc2FnZSBtc2cpIHsKICAgICAgICAgUXVldWVDb25uZWN0aW9uIHFjb24gPSBudWxsOwogICAgICAgICBRdWV1ZVNlc3Npb24gcXNlc3Npb24gPSBudWxsOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvSW5zdGFuY2VTY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCmluZGV4IDUyZTI3M2IuLjc0N2ZlMDEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL0luc3RhbmNlU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9JbnN0YW5jZVNjb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEKQEAgLTMwLDcgKzMwLDcgQEAKIH0pCiBwdWJsaWMgY2xhc3MgTmV3TWVzc2FnZUJlYW4yIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbjIuY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAKKwogICAgIEBSZXNvdXJjZQogICAgIHByaXZhdGUgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjOwogCkBAIC0zOSwxNiArMzksMTYgQEAKIAogICAgIEBSZXNvdXJjZShtYXBwZWROYW1lID0gImptcy9qbXNfdW5pdF90ZXN0X1FDRiIpCiAgICAgcHJpdmF0ZSBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHFjb25GYWN0b3J5OwotICAgIAorCiAgICAgcHVibGljIE5ld01lc3NhZ2VCZWFuMigpIHsKICAgICB9Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBAVHJhbnNhY3Rpb25BdHRyaWJ1dGUoVHJhbnNhY3Rpb25BdHRyaWJ1dGVUeXBlLk5PVF9TVVBQT1JURUQpCiAgICAgcHVibGljIHZvaWQgb25NZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewogICAgICAgICBzZW5kTXNnKG1lc3NhZ2UpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBzZW5kTXNnKE1lc3NhZ2UgbXNnKSB7CiAgICAgICAgIFF1ZXVlQ29ubmVjdGlvbiBxY29uID0gbnVsbDsKICAgICAgICAgUXVldWVTZXNzaW9uIHFzZXNzaW9uID0gbnVsbDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL25vU2NvcGUvZHVyYWJsZU5vQ2xpZW50SWRXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvbm9TY29wZS9kdXJhYmxlTm9DbGllbnRJZFdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMmJmNDNkZS4uNWQwYTA5MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvbm9TY29wZS9kdXJhYmxlTm9DbGllbnRJZFdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvbm9TY29wZS9kdXJhYmxlTm9DbGllbnRJZFdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic3Vic2NyaXB0aW9uU2NvcGUtc3RhbmRhbG9uZS1sb2NhbC1ub1Njb3BlRHVyYWJsZU5vQ2xpZW50SWRXaXRoTmFtZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvbm9TY29wZS9kdXJhYmxlTm9DbGllbnRJZFdpdGhOYW1lL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL25vU2NvcGUvZHVyYWJsZU5vQ2xpZW50SWRXaXRoTmFtZS9idWlsZC54bWwKaW5kZXggMzI0OTAyMS4uYzc0N2RlYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvbm9TY29wZS9kdXJhYmxlTm9DbGllbnRJZFdpdGhOYW1lL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9ub1Njb3BlL2R1cmFibGVOb0NsaWVudElkV2l0aE5hbWUvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00OCwxMyArNDgsMTMgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL015U2Vzc2lvbkJlYW4qLmNsYXNzLCAqKi8qTWVzc2FnZUJlYW4qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQuY2xhc3MsKiovTXlTZXNzaW9uQmVhbiouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciBlbmRwb2ludCBhY3RpdmF0aW9uIi8+CkBAIC02OCw3ICs2OCw3IEBACiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IldhaXQgMTAgc2VjcyBmb3IgcmVzb3VyY2UgY3JlYXRpb24iLz4KICAgICAgICAgPHNsZWVwIHNlY29uZHM9IjEwIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtNzYsMjEgKzc2LDIxIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICA8amF2YSBmb3JrPSJvbiIgCisgICAgICAgIDxqYXZhIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50Lmphcjoke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSJvcmcuZ2xhc3NmaXNoLnRlc3Quam1zLmFjdGl2YXRpb25wcm9wZXJ0aWVzLmNsaWVudC5DbGllbnQiPgogICAgICAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0ib3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydCIgdmFsdWU9IiR7b3JiLnBvcnR9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL25vU2NvcGUvZHVyYWJsZU5vQ2xpZW50SWRXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvbm9TY29wZS9kdXJhYmxlTm9DbGllbnRJZFdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKaW5kZXggY2ZhZDM4YS4uNDdiMjVhOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvbm9TY29wZS9kdXJhYmxlTm9DbGllbnRJZFdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvbm9TY29wZS9kdXJhYmxlTm9DbGllbnRJZFdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKQEAgLTI1LDggKzI1LDggQEAKIEBSZW1vdGUKIHB1YmxpYyBpbnRlcmZhY2UgTXlTZXNzaW9uQmVhblJlbW90ZSB7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUmVtb3RlSk5ESU5hbWUgPSAgTXlTZXNzaW9uQmVhbi5jbGFzcy5nZXRTaW1wbGVOYW1lKCkgKyAiL3JlbW90ZSI7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZW5kTWVzc2FnZShTdHJpbmcgdGV4dCk7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGNoZWNrTWVzc2FnZShTdHJpbmcgdGV4dCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9ub1Njb3BlL2R1cmFibGVOb0NsaWVudElkV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9ub1Njb3BlL2R1cmFibGVOb0NsaWVudElkV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEKaW5kZXggZjllY2U4Yi4uN2ZmYWVkMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvbm9TY29wZS9kdXJhYmxlTm9DbGllbnRJZFdpdGhOYW1lL2VqYi9OZXdNZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL25vU2NvcGUvZHVyYWJsZU5vQ2xpZW50SWRXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQpAQCAtMzAsNyArMzAsNyBAQAogfSkKIHB1YmxpYyBjbGFzcyBOZXdNZXNzYWdlQmVhbiBpbXBsZW1lbnRzIE1lc3NhZ2VMaXN0ZW5lciB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoTmV3TWVzc2FnZUJlYW4uY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAKKwogICAgIEBSZXNvdXJjZQogICAgIHByaXZhdGUgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjOwogCkBAIC0zOSwxNiArMzksMTYgQEAKIAogICAgIEBSZXNvdXJjZShtYXBwZWROYW1lID0gImptcy9qbXNfdW5pdF90ZXN0X1FDRiIpCiAgICAgcHJpdmF0ZSBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHFjb25GYWN0b3J5OwotICAgIAorCiAgICAgcHVibGljIE5ld01lc3NhZ2VCZWFuKCkgewogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CiAgICAgICAgIHNlbmRNc2cobWVzc2FnZSk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHNlbmRNc2coTWVzc2FnZSBtc2cpIHsKICAgICAgICAgUXVldWVDb25uZWN0aW9uIHFjb24gPSBudWxsOwogICAgICAgICBRdWV1ZVNlc3Npb24gcXNlc3Npb24gPSBudWxsOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvbm9TY29wZS9kdXJhYmxlV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL25vU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNzk5YTk0Zi4uZDA3MTRiMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvbm9TY29wZS9kdXJhYmxlV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9ub1Njb3BlL2R1cmFibGVXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InN1YnNjcmlwdGlvblNjb3BlLXN0YW5kYWxvbmUtbG9jYWwtbm9TY29wZUR1cmFibGVXaXRoTmFtZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvbm9TY29wZS9kdXJhYmxlV2l0aE5hbWUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvbm9TY29wZS9kdXJhYmxlV2l0aE5hbWUvYnVpbGQueG1sCmluZGV4IGEwMmEzNWMuLjA5NjhmYTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL25vU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9ub1Njb3BlL2R1cmFibGVXaXRoTmFtZS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ4LDEzICs0OCwxMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovTXlTZXNzaW9uQmVhbiouY2xhc3MsICoqLypNZXNzYWdlQmVhbiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudC5jbGFzcywqKi9NeVNlc3Npb25CZWFuKi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJXYWl0IDEwIHNlY3MgZm9yIGVuZHBvaW50IGFjdGl2YXRpb24iLz4KQEAgLTY4LDcgKzY4LDcgQEAKICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciByZXNvdXJjZSBjcmVhdGlvbiIvPgogICAgICAgICA8c2xlZXAgc2Vjb25kcz0iMTAiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC03NiwyMSArNzYsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxqYXZhIGZvcms9Im9uIiAKKyAgICAgICAgPGphdmEgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9Im9yZy5nbGFzc2Zpc2gudGVzdC5qbXMuYWN0aXZhdGlvbnByb3BlcnRpZXMuY2xpZW50LkNsaWVudCI+CiAgICAgICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0IiB2YWx1ZT0iJHtvcmIucG9ydH0iLz4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvbm9TY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL25vU2NvcGUvZHVyYWJsZVdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKaW5kZXggY2ZhZDM4YS4uNDdiMjVhOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvbm9TY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9ub1Njb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCkBAIC0yNSw4ICsyNSw4IEBACiBAUmVtb3RlCiBwdWJsaWMgaW50ZXJmYWNlIE15U2Vzc2lvbkJlYW5SZW1vdGUgewogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJlbW90ZUpORElOYW1lID0gIE15U2Vzc2lvbkJlYW4uY2xhc3MuZ2V0U2ltcGxlTmFtZSgpICsgIi9yZW1vdGUiOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2VuZE1lc3NhZ2UoU3RyaW5nIHRleHQpOwotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBjaGVja01lc3NhZ2UoU3RyaW5nIHRleHQpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvbm9TY29wZS9kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9ub1Njb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQppbmRleCBhMzZjN2ExLi45NzdjYjY3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9ub1Njb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9ub1Njb3BlL2R1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQpAQCAtMzEsNyArMzEsNyBAQAogfSkKIHB1YmxpYyBjbGFzcyBOZXdNZXNzYWdlQmVhbiBpbXBsZW1lbnRzIE1lc3NhZ2VMaXN0ZW5lciB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoTmV3TWVzc2FnZUJlYW4uY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAKKwogICAgIEBSZXNvdXJjZQogICAgIHByaXZhdGUgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjOwogCkBAIC00MCwxNiArNDAsMTYgQEAKIAogICAgIEBSZXNvdXJjZShtYXBwZWROYW1lID0gImptcy9qbXNfdW5pdF90ZXN0X1FDRiIpCiAgICAgcHJpdmF0ZSBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHFjb25GYWN0b3J5OwotICAgIAorCiAgICAgcHVibGljIE5ld01lc3NhZ2VCZWFuKCkgewogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CiAgICAgICAgIHNlbmRNc2cobWVzc2FnZSk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHNlbmRNc2coTWVzc2FnZSBtc2cpIHsKICAgICAgICAgUXVldWVDb25uZWN0aW9uIHFjb24gPSBudWxsOwogICAgICAgICBRdWV1ZVNlc3Npb24gcXNlc3Npb24gPSBudWxsOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvbm9TY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMmQxN2MyNi4uNTc2M2UxNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvbm9TY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9ub1Njb3BlL25vbmR1cmFibGVXaXRoTmFtZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InN1YnNjcmlwdGlvblNjb3BlLXN0YW5kYWxvbmUtbG9jYWwtbm9TY29wZU5vbkR1cmFibGVXaXRoTmFtZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvbm9TY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvbm9TY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvYnVpbGQueG1sCmluZGV4IDI5NmM1NzMuLmIxNzFkN2UgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9ub1Njb3BlL25vbmR1cmFibGVXaXRoTmFtZS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ4LDEzICs0OCwxMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovTXlTZXNzaW9uQmVhbiouY2xhc3MsICoqLypNZXNzYWdlQmVhbiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudC5jbGFzcywqKi9NeVNlc3Npb25CZWFuKi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJXYWl0IDEwIHNlY3MgZm9yIGVuZHBvaW50IGFjdGl2YXRpb24iLz4KQEAgLTY4LDcgKzY4LDcgQEAKICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciByZXNvdXJjZSBjcmVhdGlvbiIvPgogICAgICAgICA8c2xlZXAgc2Vjb25kcz0iMTAiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC03NiwyMSArNzYsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxqYXZhIGZvcms9Im9uIiAKKyAgICAgICAgPGphdmEgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9Im9yZy5nbGFzc2Zpc2gudGVzdC5qbXMuYWN0aXZhdGlvbnByb3BlcnRpZXMuY2xpZW50LkNsaWVudCI+CiAgICAgICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0IiB2YWx1ZT0iJHtvcmIucG9ydH0iLz4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvbm9TY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhOYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKaW5kZXggY2ZhZDM4YS4uNDdiMjVhOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvbm9TY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9ub1Njb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCkBAIC0yNSw4ICsyNSw4IEBACiBAUmVtb3RlCiBwdWJsaWMgaW50ZXJmYWNlIE15U2Vzc2lvbkJlYW5SZW1vdGUgewogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJlbW90ZUpORElOYW1lID0gIE15U2Vzc2lvbkJlYW4uY2xhc3MuZ2V0U2ltcGxlTmFtZSgpICsgIi9yZW1vdGUiOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2VuZE1lc3NhZ2UoU3RyaW5nIHRleHQpOwotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBjaGVja01lc3NhZ2UoU3RyaW5nIHRleHQpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvbm9TY29wZS9ub25kdXJhYmxlV2l0aE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9ub1Njb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQppbmRleCA1YzkxMmQyLi41MTg2MTY1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9ub1Njb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9ub1Njb3BlL25vbmR1cmFibGVXaXRoTmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQpAQCAtMzEsNyArMzEsNyBAQAogfSkKIHB1YmxpYyBjbGFzcyBOZXdNZXNzYWdlQmVhbiBpbXBsZW1lbnRzIE1lc3NhZ2VMaXN0ZW5lciB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoTmV3TWVzc2FnZUJlYW4uY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAKKwogICAgIEBSZXNvdXJjZQogICAgIHByaXZhdGUgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjOwogCkBAIC00MCwxNiArNDAsMTYgQEAKIAogICAgIEBSZXNvdXJjZShtYXBwZWROYW1lID0gImptcy9qbXNfdW5pdF90ZXN0X1FDRiIpCiAgICAgcHJpdmF0ZSBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHFjb25GYWN0b3J5OwotICAgIAorCiAgICAgcHVibGljIE5ld01lc3NhZ2VCZWFuKCkgewogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CiAgICAgICAgIHNlbmRNc2cobWVzc2FnZSk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHNlbmRNc2coTWVzc2FnZSBtc2cpIHsKICAgICAgICAgUXVldWVDb25uZWN0aW9uIHFjb24gPSBudWxsOwogICAgICAgICBRdWV1ZVNlc3Npb24gcXNlc3Npb24gPSBudWxsOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvbm9TY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggODlhMjJiOC4uZjA1NjE2ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvbm9TY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9ub1Njb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InN1YnNjcmlwdGlvblNjb3BlLXN0YW5kYWxvbmUtbG9jYWwtbm9TY29wZU5vbkR1cmFibGVXaXRob3V0TmFtZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvbm9TY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvbm9TY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvYnVpbGQueG1sCmluZGV4IGY0N2Q2OWUuLmNhZTkxNWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9ub1Njb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ4LDEzICs0OCwxMyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovTXlTZXNzaW9uQmVhbiouY2xhc3MsICoqLypNZXNzYWdlQmVhbiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudC5jbGFzcywqKi9NeVNlc3Npb25CZWFuKi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJXYWl0IDEwIHNlY3MgZm9yIGVuZHBvaW50IGFjdGl2YXRpb24iLz4KQEAgLTY4LDcgKzY4LDcgQEAKICAgICAgICAgPGVjaG8gbWVzc2FnZT0iV2FpdCAxMCBzZWNzIGZvciByZXNvdXJjZSBjcmVhdGlvbiIvPgogICAgICAgICA8c2xlZXAgc2Vjb25kcz0iMTAiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC03NiwyMSArNzYsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxqYXZhIGZvcms9Im9uIiAKKyAgICAgICAgPGphdmEgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9Im9yZy5nbGFzc2Zpc2gudGVzdC5qbXMuYWN0aXZhdGlvbnByb3BlcnRpZXMuY2xpZW50LkNsaWVudCI+CiAgICAgICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0IiB2YWx1ZT0iJHtvcmIucG9ydH0iLz4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvbm9TY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hY3RpdmF0aW9uUHJvcGVydGllcy9zdWJzY3JpcHRpb25TY29wZS9zdGFuZGFsb25lL2xvY2FsL25vU2NvcGUvbm9uZHVyYWJsZVdpdGhvdXROYW1lL2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKaW5kZXggY2ZhZDM4YS4uNDdiMjVhOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvbm9TY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9ub1Njb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCkBAIC0yNSw4ICsyNSw4IEBACiBAUmVtb3RlCiBwdWJsaWMgaW50ZXJmYWNlIE15U2Vzc2lvbkJlYW5SZW1vdGUgewogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJlbW90ZUpORElOYW1lID0gIE15U2Vzc2lvbkJlYW4uY2xhc3MuZ2V0U2ltcGxlTmFtZSgpICsgIi9yZW1vdGUiOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2VuZE1lc3NhZ2UoU3RyaW5nIHRleHQpOwotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBjaGVja01lc3NhZ2UoU3RyaW5nIHRleHQpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2FjdGl2YXRpb25Qcm9wZXJ0aWVzL3N1YnNjcmlwdGlvblNjb3BlL3N0YW5kYWxvbmUvbG9jYWwvbm9TY29wZS9ub25kdXJhYmxlV2l0aG91dE5hbWUvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9ub1Njb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQppbmRleCA4OTE2Y2IyLi4wNjA4ZDg0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9ub1Njb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYWN0aXZhdGlvblByb3BlcnRpZXMvc3Vic2NyaXB0aW9uU2NvcGUvc3RhbmRhbG9uZS9sb2NhbC9ub1Njb3BlL25vbmR1cmFibGVXaXRob3V0TmFtZS9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQpAQCAtMzAsNyArMzAsNyBAQAogfSkKIHB1YmxpYyBjbGFzcyBOZXdNZXNzYWdlQmVhbiBpbXBsZW1lbnRzIE1lc3NhZ2VMaXN0ZW5lciB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoTmV3TWVzc2FnZUJlYW4uY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAKKwogICAgIEBSZXNvdXJjZQogICAgIHByaXZhdGUgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjOwogCkBAIC0zOSwxNiArMzksMTYgQEAKIAogICAgIEBSZXNvdXJjZShtYXBwZWROYW1lID0gImptcy9qbXNfdW5pdF90ZXN0X1FDRiIpCiAgICAgcHJpdmF0ZSBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHFjb25GYWN0b3J5OwotICAgIAorCiAgICAgcHVibGljIE5ld01lc3NhZ2VCZWFuKCkgewogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CiAgICAgICAgIHNlbmRNc2cobWVzc2FnZSk7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIHNlbmRNc2coTWVzc2FnZSBtc2cpIHsKICAgICAgICAgUXVldWVDb25uZWN0aW9uIHFjb24gPSBudWxsOwogICAgICAgICBRdWV1ZVNlc3Npb24gcXNlc3Npb24gPSBudWxsOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2Fubm90YXRpb24vTURCMS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2Fubm90YXRpb24vTURCMS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGU4NjkxZDEuLmVjZmZmZjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hbm5vdGF0aW9uL01EQjEvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYW5ub3RhdGlvbi9NREIxL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImFubm90YXRpb250LW1kYjEiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYW5ub3RhdGlvbi9NREIyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYW5ub3RhdGlvbi9NREIyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYjJmYzg3MC4uNGRjMWVlMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2Fubm90YXRpb24vTURCMi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hbm5vdGF0aW9uL01EQjIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iYW5ub3RhdGlvbnQtbWRiMiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hbm5vdGF0aW9uL01EQjMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hbm5vdGF0aW9uL01EQjMvYnVpbGQucHJvcGVydGllcwppbmRleCAzZGY4Yjk3Li4wMTA0MmExIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYW5ub3RhdGlvbi9NREIzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2Fubm90YXRpb24vTURCMy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJhbm5vdGF0aW9udC1tZGIzIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2Fubm90YXRpb24vc2Vzc2lvbkJlYW4vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9hbm5vdGF0aW9uL3Nlc3Npb25CZWFuL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZjk3OTNmMi4uNDg4NTUyOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2Fubm90YXRpb24vc2Vzc2lvbkJlYW4vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYW5ub3RhdGlvbi9zZXNzaW9uQmVhbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJhbm5vdGF0aW9uLXN0YXRlbGVzcy1lamIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2J1aWxkLnhtbAppbmRleCA5ZmNhYThmLi5iMDhhNmVkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9idWlsZC54bWwKQEAgLTEwMyw5ICsxMDMsOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+Ci0JCVVzYWdlOgotCQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBqbXMgdGVzdHMpCi0JPC9lY2hvPgorICAgIDxlY2hvPgorICAgICAgICBVc2FnZToKKyAgICAgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgam1zIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9jb25maWcvY29tbW9uLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9jb25maWcvY29tbW9uLnhtbAppbmRleCBlYWU2YmY4Li5iMTc2YTNiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvY29uZmlnL2NvbW1vbi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2NvbmZpZy9jb21tb24ueG1sCkBAIC0xMjAsNyArMTIwLDcgQEAKIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImRlbGV0ZUNsdXN0ZXIiPgotICAgIDwhLS0gc3RvcC1jbHVzdGVyIGRvZXMgbm90IHdvcmsgc28gdXNlIHN0b3AtaW5zdGFuY2UgdG8gbWFrZSBzdXJlIAorICAgIDwhLS0gc3RvcC1jbHVzdGVyIGRvZXMgbm90IHdvcmsgc28gdXNlIHN0b3AtaW5zdGFuY2UgdG8gbWFrZSBzdXJlCiAgICAgICAgICBpbnN0YW5jZSBpcyBzdG9wcGVkIGJlZm9yZSBkZWxldGluZyBpdCAtLT4KICAgICA8ZWNobyBtZXNzYWdlPSJSdW5uaW5nLi4uIGFzYWRtaW4gc3RvcC1pbnN0YW5jZSIvPgogICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iPgpAQCAtMTYzLDggKzE2Myw4IEBACiA8IS0tCiAgIE9uIFdpbmRvd3MsIGFudCBoYW5ncyB3aGVuIGl0IHJ1bnMgYW4gYXNhZG1pbiBjb21tYW5kIHRoYXQgc3RhcnRzIGEgcHJvY2Vzcy4KICAgVG8gd29yayBhcm91bmQgdGhhdCwgdGhpcyB0YXNrIGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiBXaW5kb3dzIGFuZCBub24tV2luZG93cwotICBzeXN0ZW1zIGFuZCB1c2VzIGEgY3VzdG9tIGFudCB0YXNrIGZvciBXaW5kb3dzLiAKLSAgCisgIHN5c3RlbXMgYW5kIHVzZXMgYSBjdXN0b20gYW50IHRhc2sgZm9yIFdpbmRvd3MuCisKICAgQW55IHRlc3QgdGhhdCBuZWVkcyB0byBzdGFydCBhIHByb2Nlc3Mgc2hvdWxkIE5PVCB1c2UgJHtBU0FETUlOfSBkaXJlY3RseQogICBidXQgc2hvdWxkIGNhbGwgdGhpcyBzdGFydC1wcm9jZXNzIHRhcmdldCBpbnN0ZWFkLiAgUGFzcyB0aGUgY29tbWFuZCBsaW5lCiAgIHRvIGJlIHJ1biBhcyA8cGFyYW0gbmFtZT0ibGluZSIgdmFsdWU9Ii4uLiIvPi4KQEAgLTE4Miw3ICsxODIsNyBAQAogICAgICAgPGlzc2V0IHByb3BlcnR5PSJzdGFydC10YXJnZXQiLz4KICAgICA8L25vdD4KICAgPC9jb25kaXRpb24+Ci0gIAorCiAgIDwhLS0KICAgICBJbnZva2UgdGhlIHRhcmdldCBqdXN0IGNob3Nlbi4KICAgLS0+CkBAIC0yMDksNyArMjA5LDcgQEAKIDwvdGFyZ2V0PgogCiA8IS0tCi0gIEZvciBub24tV2luZG93cyBzeXN0ZW1zLCBhbnQgd29ya3MgZmluZSB3aGVuIGludm9raW5nIGFzYWRtaW4gdG8gc3RhcnQgYSAKKyAgRm9yIG5vbi1XaW5kb3dzIHN5c3RlbXMsIGFudCB3b3JrcyBmaW5lIHdoZW4gaW52b2tpbmcgYXNhZG1pbiB0byBzdGFydCBhCiAgIHByb2Nlc3MsIHNvIGRvIGl0IHRoYXQgd2F5IGZvciB0aG9zZSBzeXN0ZW1zLgogLS0+CiA8dGFyZ2V0IG5hbWU9InN0YXJ0LXByb2Nlc3Mtbm9uLXdpbmRvd3MiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9kZWZhdWx0Q0YvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9kZWZhdWx0Q0YvYnVpbGQucHJvcGVydGllcwppbmRleCAyYmEzNjM4Li5iYmY4ZTFiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvZGVmYXVsdENGL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2RlZmF1bHRDRi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqbXMtZGVmYXVsdC1jb25uZWN0aW9uLWZhY3RvcnktZWpiIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2RlZmF1bHRDRi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvZGVmYXVsdENGL2J1aWxkLnhtbAppbmRleCAxNzYxNWM4Li5jZGIxYzBiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvZGVmYXVsdENGL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvZGVmYXVsdENGL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9ImNvbW1vbi54bWw6IENvbXBpbGluZyB0ZXN0IHNvdXJjZSBmaWxlcyIgbGV2ZWw9InZlcmJvc2UiLz4KQEAgLTUyLDE0ICs1MiwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovU2Vzc2lvbkJlYW5EZWZhdWx0Ki5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50LmNsYXNzLCoqL1Nlc3Npb25CZWFuRGVmYXVsdCouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjksNyArNjksNyBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJjcmVhdGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTc3LDIxICs3NywyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPGphdmEgZm9yaz0ib24iIAorICAgICAgICA8amF2YSBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0ib3JnLmdsYXNzZmlzaC50ZXN0Lmptcy5kZWZhdWx0Y2YuY2xpZW50LkNsaWVudCI+CiAgICAgICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0IiB2YWx1ZT0iJHtvcmIucG9ydH0iLz4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgYWxsIHRvIHRlc3Qgam1zIGRlZmF1bHQgY29ubmVjdGlvbiBmYWN0b3J5CiAgICAgICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9kZWZhdWx0Q0YvZWpiL1Nlc3Npb25CZWFuRGVmYXVsdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2RlZmF1bHRDRi9lamIvU2Vzc2lvbkJlYW5EZWZhdWx0LmphdmEKaW5kZXggZWNkNzZkYS4uOTdmYmZmNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2RlZmF1bHRDRi9lamIvU2Vzc2lvbkJlYW5EZWZhdWx0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2RlZmF1bHRDRi9lamIvU2Vzc2lvbkJlYW5EZWZhdWx0LmphdmEKQEAgLTMyLDEwICszMiwxMCBAQAogCiAgICAgQFJlc291cmNlKG5hbWU9Im15Q0YwIiwgbG9va3VwPSJqbXMvX19kZWZhdWx0Q29ubmVjdGlvbkZhY3RvcnkiKQogICAgIHByaXZhdGUgQ29ubmVjdGlvbkZhY3RvcnkgY2YwOwotICAgIAorCiAgICAgQFJlc291cmNlKG5hbWU9Im15Q0YxIiwgbG9va3VwPSJqYXZhOmNvbXAvRGVmYXVsdEpNU0Nvbm5lY3Rpb25GYWN0b3J5IikKICAgICBwcml2YXRlIENvbm5lY3Rpb25GYWN0b3J5IGNmMTsKLSAgICAKKwogICAgIEBSZXNvdXJjZShuYW1lPSJteUNGMiIpCiAgICAgcHJpdmF0ZSBDb25uZWN0aW9uRmFjdG9yeSBjZjI7CiAKQEAgLTY3LDcgKzY3LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChjb25uICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBjb25uLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbihlKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9kZWZhdWx0Q0YvZWpiL1Nlc3Npb25CZWFuRGVmYXVsdFJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2RlZmF1bHRDRi9lamIvU2Vzc2lvbkJlYW5EZWZhdWx0UmVtb3RlLmphdmEKaW5kZXggZTBhZjViZC4uYjc2ODQ3MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2RlZmF1bHRDRi9lamIvU2Vzc2lvbkJlYW5EZWZhdWx0UmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2RlZmF1bHRDRi9lamIvU2Vzc2lvbkJlYW5EZWZhdWx0UmVtb3RlLmphdmEKQEAgLTI3LDYgKzI3LDYgQEAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSZW1vdGVKTkRJTmFtZSA9ICBTZXNzaW9uQmVhbkRlZmF1bHQuY2xhc3MuZ2V0U2ltcGxlTmFtZSgpICsgIi9yZW1vdGUiOwogCiAgICAgcHVibGljIHZvaWQgc2VuZE1lc3NhZ2UoU3RyaW5nIHRleHQpOwotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gY2hlY2tNZXNzYWdlKFN0cmluZyB0ZXh0KTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvYnVpbGQueG1sCmluZGV4IDQxNDYzOTkuLjRlNmNmNTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2J1aWxkLnhtbApAQCAtMTE2LDkgKzExNiw5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGptcyB0ZXN0cykKLQk8L2VjaG8+CisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBqbXMgdGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2VqYkludGVyY2VwdG9yUmVxdWVzdFNjb3BlZC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2VqYkludGVyY2VwdG9yUmVxdWVzdFNjb3BlZC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGQ2ODMxMzguLjJmZmIxNzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9lamJJbnRlcmNlcHRvclJlcXVlc3RTY29wZWQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvZWpiSW50ZXJjZXB0b3JSZXF1ZXN0U2NvcGVkL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9Imptcy1pbmplY3Rpb24tanNmIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2VqYkludGVyY2VwdG9yUmVxdWVzdFNjb3BlZC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvZWpiSW50ZXJjZXB0b3JSZXF1ZXN0U2NvcGVkL2J1aWxkLnhtbAppbmRleCBkZmVmODAwLi43MzllY2JjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvZWpiSW50ZXJjZXB0b3JSZXF1ZXN0U2NvcGVkL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvZWpiSW50ZXJjZXB0b3JSZXF1ZXN0U2NvcGVkL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTQgKzQ2LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9JbnRlcmNlcHRvckluamVjdGlvbiouY2xhc3MsKiovTXlJbnRlcmNlcHRvci5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50LmNsYXNzLCoqL0ludGVyY2VwdG9ySW5qZWN0aW9uKi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImNyZWF0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtNzEsMjEgKzcxLDIxIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICA8amF2YSBmb3JrPSJvbiIgCisgICAgICAgIDxqYXZhIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50Lmphcjoke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSJvcmcuZ2xhc3NmaXNoLnRlc3Quam1zLmluamVjdGlvbi5jbGllbnQuQ2xpZW50Ij4KICAgICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke29yYi5wb3J0fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvZWpiSW50ZXJjZXB0b3JSZXF1ZXN0U2NvcGVkL2VqYi9JbnRlcmNlcHRvckluamVjdGlvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2VqYkludGVyY2VwdG9yUmVxdWVzdFNjb3BlZC9lamIvSW50ZXJjZXB0b3JJbmplY3Rpb24uamF2YQppbmRleCBiYTQxYTJjLi4wNDJkNjkyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvZWpiSW50ZXJjZXB0b3JSZXF1ZXN0U2NvcGVkL2VqYi9JbnRlcmNlcHRvckluamVjdGlvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9lamJJbnRlcmNlcHRvclJlcXVlc3RTY29wZWQvZWpiL0ludGVyY2VwdG9ySW5qZWN0aW9uLmphdmEKQEAgLTI5LDcgKzI5LDcgQEAKIEBTdGF0ZWxlc3MobWFwcGVkTmFtZT0iSW50ZXJjZXB0b3JJbmplY3Rpb24vcmVtb3RlIikKIHB1YmxpYyBjbGFzcyBJbnRlcmNlcHRvckluamVjdGlvbiBpbXBsZW1lbnRzIEludGVyY2VwdG9ySW5qZWN0aW9uUmVtb3RlIHsKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgcmVxdWVzdFNjb3BlID0gImFyb3VuZCBSZXF1ZXN0U2NvcGVkIjsKLQkKKwogICAgIEBSZXNvdXJjZShtYXBwZWROYW1lID0gImptcy9qbXNfdW5pdF90ZXN0X1F1ZXVlIikKICAgICBwcml2YXRlIFF1ZXVlIHF1ZXVlOwogCkBAIC00MCw3ICs0MCw3IEBACiAKICAgICBAVHJhbnNhY3Rpb25BdHRyaWJ1dGUoVHJhbnNhY3Rpb25BdHRyaWJ1dGVUeXBlLk5PVF9TVVBQT1JURUQpCiAgICAgQE92ZXJyaWRlCi0gICAgQEludGVyY2VwdG9ycyhNeUludGVyY2VwdG9yLmNsYXNzKSAKKyAgICBASW50ZXJjZXB0b3JzKE15SW50ZXJjZXB0b3IuY2xhc3MpCiAgICAgcHVibGljIHZvaWQgc2VuZE1lc3NhZ2UoU3RyaW5nIHRleHQpIHsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9lamJJbnRlcmNlcHRvclJlcXVlc3RTY29wZWQvZWpiL0ludGVyY2VwdG9ySW5qZWN0aW9uUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvZWpiSW50ZXJjZXB0b3JSZXF1ZXN0U2NvcGVkL2VqYi9JbnRlcmNlcHRvckluamVjdGlvblJlbW90ZS5qYXZhCmluZGV4IGY5MWNlN2UuLjJlYmQwZDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9lamJJbnRlcmNlcHRvclJlcXVlc3RTY29wZWQvZWpiL0ludGVyY2VwdG9ySW5qZWN0aW9uUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2VqYkludGVyY2VwdG9yUmVxdWVzdFNjb3BlZC9lamIvSW50ZXJjZXB0b3JJbmplY3Rpb25SZW1vdGUuamF2YQpAQCAtMjcsNiArMjcsNiBAQAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJlbW90ZUpORElOYW1lID0gIEludGVyY2VwdG9ySW5qZWN0aW9uLmNsYXNzLmdldFNpbXBsZU5hbWUoKSArICIvcmVtb3RlIjsKIAogICAgIHB1YmxpYyB2b2lkIHNlbmRNZXNzYWdlKFN0cmluZyB0ZXh0KTsKLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGNoZWNrTWVzc2FnZUFuZFNjb3BlZChTdHJpbmcgdGV4dCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvZWpiSW50ZXJjZXB0b3JUcmFuc2FjdGlvblNjb3BlZC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2VqYkludGVyY2VwdG9yVHJhbnNhY3Rpb25TY29wZWQvYnVpbGQucHJvcGVydGllcwppbmRleCBkNjgzMTM4Li4yZmZiMTc3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvZWpiSW50ZXJjZXB0b3JUcmFuc2FjdGlvblNjb3BlZC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9lamJJbnRlcmNlcHRvclRyYW5zYWN0aW9uU2NvcGVkL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9Imptcy1pbmplY3Rpb24tanNmIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2VqYkludGVyY2VwdG9yVHJhbnNhY3Rpb25TY29wZWQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2VqYkludGVyY2VwdG9yVHJhbnNhY3Rpb25TY29wZWQvYnVpbGQueG1sCmluZGV4IDVkMTViNzIuLjc1ZmUwMGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9lamJJbnRlcmNlcHRvclRyYW5zYWN0aW9uU2NvcGVkL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvZWpiSW50ZXJjZXB0b3JUcmFuc2FjdGlvblNjb3BlZC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDE0ICs0NiwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovSW50ZXJjZXB0b3JJbmplY3Rpb24qLmNsYXNzLCoqL015SW50ZXJjZXB0b3IuY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudC5jbGFzcywqKi9JbnRlcmNlcHRvckluamVjdGlvbiouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjMsNyArNjMsNyBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJjcmVhdGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTcxLDIxICs3MSwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPGphdmEgZm9yaz0ib24iIAorICAgICAgICA8amF2YSBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0ib3JnLmdsYXNzZmlzaC50ZXN0Lmptcy5pbmplY3Rpb24uY2xpZW50LkNsaWVudCI+CiAgICAgICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0IiB2YWx1ZT0iJHtvcmIucG9ydH0iLz4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2VqYkludGVyY2VwdG9yVHJhbnNhY3Rpb25TY29wZWQvZWpiL0ludGVyY2VwdG9ySW5qZWN0aW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvZWpiSW50ZXJjZXB0b3JUcmFuc2FjdGlvblNjb3BlZC9lamIvSW50ZXJjZXB0b3JJbmplY3Rpb24uamF2YQppbmRleCAxMmNkMjBhLi5lMzRhYzBhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvZWpiSW50ZXJjZXB0b3JUcmFuc2FjdGlvblNjb3BlZC9lamIvSW50ZXJjZXB0b3JJbmplY3Rpb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvZWpiSW50ZXJjZXB0b3JUcmFuc2FjdGlvblNjb3BlZC9lamIvSW50ZXJjZXB0b3JJbmplY3Rpb24uamF2YQpAQCAtNDAsNyArNDAsNyBAQAogICAgIHByaXZhdGUgSk1TQ29udGV4dCBqbXNDb250ZXh0OwogCiAgICAgQE92ZXJyaWRlCi0gICAgQEludGVyY2VwdG9ycyhNeUludGVyY2VwdG9yLmNsYXNzKSAKKyAgICBASW50ZXJjZXB0b3JzKE15SW50ZXJjZXB0b3IuY2xhc3MpCiAgICAgcHVibGljIHZvaWQgc2VuZE1lc3NhZ2UoU3RyaW5nIHRleHQpIHsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9lamJJbnRlcmNlcHRvclRyYW5zYWN0aW9uU2NvcGVkL2VqYi9JbnRlcmNlcHRvckluamVjdGlvblJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2VqYkludGVyY2VwdG9yVHJhbnNhY3Rpb25TY29wZWQvZWpiL0ludGVyY2VwdG9ySW5qZWN0aW9uUmVtb3RlLmphdmEKaW5kZXggZjkxY2U3ZS4uMmViZDBkOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2VqYkludGVyY2VwdG9yVHJhbnNhY3Rpb25TY29wZWQvZWpiL0ludGVyY2VwdG9ySW5qZWN0aW9uUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2VqYkludGVyY2VwdG9yVHJhbnNhY3Rpb25TY29wZWQvZWpiL0ludGVyY2VwdG9ySW5qZWN0aW9uUmVtb3RlLmphdmEKQEAgLTI3LDYgKzI3LDYgQEAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSZW1vdGVKTkRJTmFtZSA9ICBJbnRlcmNlcHRvckluamVjdGlvbi5jbGFzcy5nZXRTaW1wbGVOYW1lKCkgKyAiL3JlbW90ZSI7CiAKICAgICBwdWJsaWMgdm9pZCBzZW5kTWVzc2FnZShTdHJpbmcgdGV4dCk7Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja01lc3NhZ2VBbmRTY29wZWQoU3RyaW5nIHRleHQpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2VqYkludGVyY2VwdG9yVHJhbnNhY3Rpb25TY29wZWQvZWpiL015SW50ZXJjZXB0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9lamJJbnRlcmNlcHRvclRyYW5zYWN0aW9uU2NvcGVkL2VqYi9NeUludGVyY2VwdG9yLmphdmEKaW5kZXggODFjMDdjZC4uNjk4ZmJjYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2VqYkludGVyY2VwdG9yVHJhbnNhY3Rpb25TY29wZWQvZWpiL015SW50ZXJjZXB0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvZWpiSW50ZXJjZXB0b3JUcmFuc2FjdGlvblNjb3BlZC9lamIvTXlJbnRlcmNlcHRvci5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiAgICAgcHVibGljIE9iamVjdCBzZW5kTXNnKEludm9jYXRpb25Db250ZXh0IGN0eCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgT2JqZWN0W10gcGFyYW1zID0gY3R4LmdldFBhcmFtZXRlcnMoKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGxvb2t1cFF1ZXVlKCk7CiAgICAgICAgICAgICBKTVNQcm9kdWNlciBwcm9kdWNlciA9IGptc0NvbnRleHQuY3JlYXRlUHJvZHVjZXIoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9qc2ZSZXF1ZXN0U2NvcGVkL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNmUmVxdWVzdFNjb3BlZC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGQ2ODMxMzguLjJmZmIxNzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9qc2ZSZXF1ZXN0U2NvcGVkL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzZlJlcXVlc3RTY29wZWQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iam1zLWluamVjdGlvbi1qc2YiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNmUmVxdWVzdFNjb3BlZC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNmUmVxdWVzdFNjb3BlZC9idWlsZC54bWwKaW5kZXggMTM3ZjY0Ni4uM2MyMDAxOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzZlJlcXVlc3RTY29wZWQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9qc2ZSZXF1ZXN0U2NvcGVkL2J1aWxkLnhtbApAQCAtMzUsNyArMzUsNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbi1jbGFzc2VzLWRpciI+Ci0gICAgICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAKKyAgICAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUtZWpiIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlLWNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtZWpiIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgpAQCAtNjQsNyArNjQsNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC13ZWIiIGRlcGVuZHM9ImNvbXBpbGUtd2ViIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CiAKQEAgLTcyLDQyICs3Miw0MiBAQAogICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7YXBwY2xpZW50Lmphcn0iLz4KICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KICAgICAgICAgPGNvcHkgZmlsZT0iJHthcHBsaWNhdGlvbi1jbGllbnQueG1sfSIKLSAgICAgICAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKKyAgICAgICAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi1jbGllbnQueG1sIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICAgICAgPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtYXBwbGljYXRpb24tY2xpZW50LnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvZ2xhc3NmaXNoLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICAgICAgICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIKICAgICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgICAgICAgPGphciBqYXJmaWxlPSIke2FwcGNsaWVudC5qYXJ9IiBiYXNlZGlyPSIke2FwcGNsaWVudGphci5maWxlc30iIAotICAgICAgICAgICAgIHVwZGF0ZT0idHJ1ZSIgaW5jbHVkZXMgPSIqKi8qLmNsYXNzIiAKLSAgICAgICAgICAgICBtYW5pZmVzdD0iLi9jbGllbnQvTUFOSUZFU1QuTUYiPiAgICAgICAgIAorICAgICAgICA8amFyIGphcmZpbGU9IiR7YXBwY2xpZW50Lmphcn0iIGJhc2VkaXI9IiR7YXBwY2xpZW50amFyLmZpbGVzfSIKKyAgICAgICAgICAgICB1cGRhdGU9InRydWUiIGluY2x1ZGVzID0iKiovKi5jbGFzcyIKKyAgICAgICAgICAgICBtYW5pZmVzdD0iLi9jbGllbnQvTUFOSUZFU1QuTUYiPgogICAgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiPgogICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iZ2xhc3NmaXNoLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiAgICAgICAgICAgICAgPC9tZXRhaW5mPgotICAgICAgICA8L2phcj4gICAKKyAgICAgICAgPC9qYXI+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLWVhciI+CiAgICAgICAgIDxkZWxldGUgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0uZWFyIi8+CiAgICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+Ci0gICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4gICAKLSAgICAgICAgICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiICAJZmFpbG9uZXJyb3I9ImZhbHNlIi8+IAotICAgICAgICAgIDxjb3B5IGZpbGU9IiR7YXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiICAJZmFpbG9uZXJyb3I9ImZhbHNlIi8+IAorICAgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CisgICAgICAgICAgPGNvcHkgZmlsZT0iJHtzdW4tYXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIiAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICAgICAgICAgIDxjb3B5IGZpbGU9IiR7YXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgICAgICAgICAgPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtcmVzb3VyY2VzLWVhci54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiICBmaWx0ZXJpbmc9InRydWUiLz4KLSAgICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciI+IAorICAgICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIj4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi53YXIiLz4KICAgICAgICAgICAgIDwvZmlsZXNldD4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iPgotICAgICAgICAJPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotICAgICAgICAJPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIi8+CisgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIi8+CisgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiLz4KICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbCIvPgogICAgICAgICAgICAgPC9maWxlc2V0PgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5BUFNfSE9NRX0iIGluY2x1ZGVzPSJsaWIvcmVwb3J0ZXIuamFyIi8+Ci0gICAgICAgICAgPC9qYXI+ICAgICAgICAKKyAgICAgICAgICA8L2phcj4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImJ1aWxkLWVqYiwgYnVpbGQtd2ViLCBidWlsZC1jbGllbnQsIGJ1aWxkLWVhciIvPgpAQCAtMTE3LDcgKzExNyw3IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImNyZWF0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtMTI5LDcgKzEyOSw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICAgPGphdmEgZm9yaz0ib24iIAorICAgICAgICAgPGphdmEgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iV2ViVGVzdCI+CkBAIC0xMzksMTAgKzEzOSwxMCBAQAogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtjb250ZXh0cm9vdH0iLz4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNmUmVxdWVzdFNjb3BlZC9jbGllbnQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzZlJlcXVlc3RTY29wZWQvY2xpZW50L1dlYlRlc3QuamF2YQppbmRleCA5MWQwNWE3Li5kOGNkYTY5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNmUmVxdWVzdFNjb3BlZC9jbGllbnQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9qc2ZSZXF1ZXN0U2NvcGVkL2NsaWVudC9XZWJUZXN0LmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciByZXNvdXJjZSBpbmplY3Rpb24gaW50byBzZXJ2bGV0ICIKQEAgLTU3LDE0ICs1NywxNCBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjb250ZXh0Um9vdCArICIvZmFjZXMvbmV3anNmLnhodG1sIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsgCisgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZSBjb2RlLiBFeHBlY3RlZDogMjAwIiArCiAgICAgICAgICAgICAgICAgIiwgcmVjZWl2ZWQ6ICIgKyByZXNwb25zZUNvZGUpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNmUmVxdWVzdFNjb3BlZC9lamIvTWVzc2FnZVJlY2VpdmVyUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNmUmVxdWVzdFNjb3BlZC9lamIvTWVzc2FnZVJlY2VpdmVyUmVtb3RlLmphdmEKaW5kZXggMjIzMDIxMy4uNjU1MWFiNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzZlJlcXVlc3RTY29wZWQvZWpiL01lc3NhZ2VSZWNlaXZlclJlbW90ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9qc2ZSZXF1ZXN0U2NvcGVkL2VqYi9NZXNzYWdlUmVjZWl2ZXJSZW1vdGUuamF2YQpAQCAtMjUsNiArMjUsNiBAQAogQFJlbW90ZQogcHVibGljIGludGVyZmFjZSBNZXNzYWdlUmVjZWl2ZXJSZW1vdGUgewogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJlbW90ZUpORElOYW1lID0gIE1lc3NhZ2VSZWNlaXZlckJlYW4uY2xhc3MuZ2V0U2ltcGxlTmFtZSgpICsgIi9yZW1vdGUiOwotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gY2hlY2tNZXNzYWdlKFN0cmluZyB0ZXh0KTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9qc2ZSZXF1ZXN0U2NvcGVkL3NlcnZsZXQvY29tL29yYWNsZS9qbXMvdGVzdC9OZXdKU0ZNYW5hZ2VkQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzZlJlcXVlc3RTY29wZWQvc2VydmxldC9jb20vb3JhY2xlL2ptcy90ZXN0L05ld0pTRk1hbmFnZWRCZWFuLmphdmEKaW5kZXggOWVmYjUxOC4uOWM5YTBmMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzZlJlcXVlc3RTY29wZWQvc2VydmxldC9jb20vb3JhY2xlL2ptcy90ZXN0L05ld0pTRk1hbmFnZWRCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzZlJlcXVlc3RTY29wZWQvc2VydmxldC9jb20vb3JhY2xlL2ptcy90ZXN0L05ld0pTRk1hbmFnZWRCZWFuLmphdmEKQEAgLTQ4LDE0ICs0OCwxNCBAQAogICAgICAqLwogICAgIHB1YmxpYyBOZXdKU0ZNYW5hZ2VkQmVhbigpIHsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UoKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBTdHJpbmcgdGV4dCA9ICJKU0YgSGVsbG8gV29ybGQhIjsKICAgICAgICAgICAgIEpNU1Byb2R1Y2VyIHByb2R1Y2VyID0gam1zQ29udGV4dC5jcmVhdGVQcm9kdWNlcigpOwogICAgICAgICAgICAgVGV4dE1lc3NhZ2UgbXNnID0gam1zQ29udGV4dC5jcmVhdGVUZXh0TWVzc2FnZSh0ZXh0KTsKICAgICAgICAgICAgIHByb2R1Y2VyLnNlbmQocXVldWUsIG1zZyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYoam1zQ29udGV4dC50b1N0cmluZygpLmluZGV4T2YocmVxdWVzdFNjb3BlKSA9PSAtMSl7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIk5PVCBpbiByZXF1ZXN0U2NvcGUgc2NvcGUhIik7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNmVHJhbnNhY3Rpb25TY29wZWQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9qc2ZUcmFuc2FjdGlvblNjb3BlZC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGQ2ODMxMzguLjJmZmIxNzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9qc2ZUcmFuc2FjdGlvblNjb3BlZC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9qc2ZUcmFuc2FjdGlvblNjb3BlZC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqbXMtaW5qZWN0aW9uLWpzZiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9qc2ZUcmFuc2FjdGlvblNjb3BlZC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNmVHJhbnNhY3Rpb25TY29wZWQvYnVpbGQueG1sCmluZGV4IDEzN2Y2NDYuLjNjMjAwMTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9qc2ZUcmFuc2FjdGlvblNjb3BlZC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzZlRyYW5zYWN0aW9uU2NvcGVkL2J1aWxkLnhtbApAQCAtMzUsNyArMzUsNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbi1jbGFzc2VzLWRpciI+Ci0gICAgICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAKKyAgICAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUtZWpiIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlLWNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtZWpiIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgpAQCAtNjQsNyArNjQsNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC13ZWIiIGRlcGVuZHM9ImNvbXBpbGUtd2ViIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CiAKQEAgLTcyLDQyICs3Miw0MiBAQAogICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7YXBwY2xpZW50Lmphcn0iLz4KICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KICAgICAgICAgPGNvcHkgZmlsZT0iJHthcHBsaWNhdGlvbi1jbGllbnQueG1sfSIKLSAgICAgICAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKKyAgICAgICAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi1jbGllbnQueG1sIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICAgICAgPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtYXBwbGljYXRpb24tY2xpZW50LnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvZ2xhc3NmaXNoLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICAgICAgICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIKICAgICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgICAgICAgPGphciBqYXJmaWxlPSIke2FwcGNsaWVudC5qYXJ9IiBiYXNlZGlyPSIke2FwcGNsaWVudGphci5maWxlc30iIAotICAgICAgICAgICAgIHVwZGF0ZT0idHJ1ZSIgaW5jbHVkZXMgPSIqKi8qLmNsYXNzIiAKLSAgICAgICAgICAgICBtYW5pZmVzdD0iLi9jbGllbnQvTUFOSUZFU1QuTUYiPiAgICAgICAgIAorICAgICAgICA8amFyIGphcmZpbGU9IiR7YXBwY2xpZW50Lmphcn0iIGJhc2VkaXI9IiR7YXBwY2xpZW50amFyLmZpbGVzfSIKKyAgICAgICAgICAgICB1cGRhdGU9InRydWUiIGluY2x1ZGVzID0iKiovKi5jbGFzcyIKKyAgICAgICAgICAgICBtYW5pZmVzdD0iLi9jbGllbnQvTUFOSUZFU1QuTUYiPgogICAgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiPgogICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iZ2xhc3NmaXNoLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiAgICAgICAgICAgICAgPC9tZXRhaW5mPgotICAgICAgICA8L2phcj4gICAKKyAgICAgICAgPC9qYXI+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLWVhciI+CiAgICAgICAgIDxkZWxldGUgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0uZWFyIi8+CiAgICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+Ci0gICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4gICAKLSAgICAgICAgICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiICAJZmFpbG9uZXJyb3I9ImZhbHNlIi8+IAotICAgICAgICAgIDxjb3B5IGZpbGU9IiR7YXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiICAJZmFpbG9uZXJyb3I9ImZhbHNlIi8+IAorICAgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CisgICAgICAgICAgPGNvcHkgZmlsZT0iJHtzdW4tYXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIiAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICAgICAgICAgIDxjb3B5IGZpbGU9IiR7YXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgICAgICAgICAgPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtcmVzb3VyY2VzLWVhci54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiICBmaWx0ZXJpbmc9InRydWUiLz4KLSAgICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciI+IAorICAgICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIj4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi53YXIiLz4KICAgICAgICAgICAgIDwvZmlsZXNldD4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iPgotICAgICAgICAJPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotICAgICAgICAJPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIi8+CisgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIi8+CisgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiLz4KICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbCIvPgogICAgICAgICAgICAgPC9maWxlc2V0PgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5BUFNfSE9NRX0iIGluY2x1ZGVzPSJsaWIvcmVwb3J0ZXIuamFyIi8+Ci0gICAgICAgICAgPC9qYXI+ICAgICAgICAKKyAgICAgICAgICA8L2phcj4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImJ1aWxkLWVqYiwgYnVpbGQtd2ViLCBidWlsZC1jbGllbnQsIGJ1aWxkLWVhciIvPgpAQCAtMTE3LDcgKzExNyw3IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImNyZWF0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtMTI5LDcgKzEyOSw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICAgPGphdmEgZm9yaz0ib24iIAorICAgICAgICAgPGphdmEgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iV2ViVGVzdCI+CkBAIC0xMzksMTAgKzEzOSwxMCBAQAogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtjb250ZXh0cm9vdH0iLz4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNmVHJhbnNhY3Rpb25TY29wZWQvY2xpZW50L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9qc2ZUcmFuc2FjdGlvblNjb3BlZC9jbGllbnQvV2ViVGVzdC5qYXZhCmluZGV4IDhkODJlNWQuLmVjOGQzYmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9qc2ZUcmFuc2FjdGlvblNjb3BlZC9jbGllbnQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9qc2ZUcmFuc2FjdGlvblNjb3BlZC9jbGllbnQvV2ViVGVzdC5qYXZhCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgcmVzb3VyY2UgaW5qZWN0aW9uIGludG8gc2VydmxldCAiCkBAIC01NywxNCArNTcsMTQgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL2ZhY2VzL25ld2pzZi54aHRtbCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOwogICAgICAgICBjb25uLmNvbm5lY3QoKTsKICAgICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm4uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7IAorICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UgY29kZS4gRXhwZWN0ZWQ6IDIwMCIgKwogICAgICAgICAgICAgICAgICIsIHJlY2VpdmVkOiAiICsgcmVzcG9uc2VDb2RlKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzZlRyYW5zYWN0aW9uU2NvcGVkL2VqYi9NZXNzYWdlUmVjZWl2ZXJSZW1vdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9qc2ZUcmFuc2FjdGlvblNjb3BlZC9lamIvTWVzc2FnZVJlY2VpdmVyUmVtb3RlLmphdmEKaW5kZXggMjIzMDIxMy4uNjU1MWFiNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzZlRyYW5zYWN0aW9uU2NvcGVkL2VqYi9NZXNzYWdlUmVjZWl2ZXJSZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNmVHJhbnNhY3Rpb25TY29wZWQvZWpiL01lc3NhZ2VSZWNlaXZlclJlbW90ZS5qYXZhCkBAIC0yNSw2ICsyNSw2IEBACiBAUmVtb3RlCiBwdWJsaWMgaW50ZXJmYWNlIE1lc3NhZ2VSZWNlaXZlclJlbW90ZSB7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUmVtb3RlSk5ESU5hbWUgPSAgTWVzc2FnZVJlY2VpdmVyQmVhbi5jbGFzcy5nZXRTaW1wbGVOYW1lKCkgKyAiL3JlbW90ZSI7Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja01lc3NhZ2UoU3RyaW5nIHRleHQpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzZlRyYW5zYWN0aW9uU2NvcGVkL3NlcnZsZXQvY29tL29yYWNsZS9qbXMvdGVzdC9OZXdKU0ZNYW5hZ2VkQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzZlRyYW5zYWN0aW9uU2NvcGVkL3NlcnZsZXQvY29tL29yYWNsZS9qbXMvdGVzdC9OZXdKU0ZNYW5hZ2VkQmVhbi5qYXZhCmluZGV4IDlhYzY1NjkuLjhlMDA3ZTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9qc2ZUcmFuc2FjdGlvblNjb3BlZC9zZXJ2bGV0L2NvbS9vcmFjbGUvam1zL3Rlc3QvTmV3SlNGTWFuYWdlZEJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNmVHJhbnNhY3Rpb25TY29wZWQvc2VydmxldC9jb20vb3JhY2xlL2ptcy90ZXN0L05ld0pTRk1hbmFnZWRCZWFuLmphdmEKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICBASk1TU2Vzc2lvbk1vZGUoSk1TQ29udGV4dC5BVVRPX0FDS05PV0xFREdFKQogICAgIHByaXZhdGUgSk1TQ29udGV4dCBqbXNDb250ZXh0OwogCi0gICAgQEluamVjdCAKKyAgICBASW5qZWN0CiAgICAgVXNlclRyYW5zYWN0aW9uIHV0OwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRyYW5zYWN0aW9uU2NvcGUgPSAiYXJvdW5kIFRyYW5zYWN0aW9uU2NvcGVkIjsKQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgKi8KICAgICBwdWJsaWMgTmV3SlNGTWFuYWdlZEJlYW4oKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBnZXRNZXNzYWdlKCkgewogICAgICAgICBTdHJpbmcgY29udGV4dCA9ICIiOwogICAgICAgICB0cnkgewpAQCAtNzAsMTEgKzcwLDExIEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gdGV4dDsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIHRyeSB7ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICB1dC5yb2xsYmFjaygpOwogICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgICAgIH0gCisgICAgICAgICAgICB9CiAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9qc3BSZXF1ZXN0U2NvcGVkL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNwUmVxdWVzdFNjb3BlZC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGY2MDlkYWIuLjYyNjk5N2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9qc3BSZXF1ZXN0U2NvcGVkL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzcFJlcXVlc3RTY29wZWQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iam1zLWluamVjdGlvbi1qc3AiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNwUmVxdWVzdFNjb3BlZC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNwUmVxdWVzdFNjb3BlZC9idWlsZC54bWwKaW5kZXggYWU2MDAxZS4uZTFiZTc2ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzcFJlcXVlc3RTY29wZWQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9qc3BSZXF1ZXN0U2NvcGVkL2J1aWxkLnhtbApAQCAtMzUsNyArMzUsNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbi1jbGFzc2VzLWRpciI+Ci0gICAgICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAKKyAgICAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUtZWpiIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlLWNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtZWpiIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgpAQCAtNjQsNyArNjQsNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC13ZWIiIGRlcGVuZHM9ImNvbXBpbGUtd2ViIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CiAKQEAgLTcyLDQyICs3Miw0MiBAQAogICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7YXBwY2xpZW50Lmphcn0iLz4KICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KICAgICAgICAgPGNvcHkgZmlsZT0iJHthcHBsaWNhdGlvbi1jbGllbnQueG1sfSIKLSAgICAgICAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKKyAgICAgICAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi1jbGllbnQueG1sIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICAgICAgPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtYXBwbGljYXRpb24tY2xpZW50LnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvZ2xhc3NmaXNoLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICAgICAgICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIKICAgICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgICAgICAgPGphciBqYXJmaWxlPSIke2FwcGNsaWVudC5qYXJ9IiBiYXNlZGlyPSIke2FwcGNsaWVudGphci5maWxlc30iIAotICAgICAgICAgICAgIHVwZGF0ZT0idHJ1ZSIgaW5jbHVkZXMgPSIqKi8qLmNsYXNzIiAKLSAgICAgICAgICAgICBtYW5pZmVzdD0iLi9jbGllbnQvTUFOSUZFU1QuTUYiPiAgICAgICAgIAorICAgICAgICA8amFyIGphcmZpbGU9IiR7YXBwY2xpZW50Lmphcn0iIGJhc2VkaXI9IiR7YXBwY2xpZW50amFyLmZpbGVzfSIKKyAgICAgICAgICAgICB1cGRhdGU9InRydWUiIGluY2x1ZGVzID0iKiovKi5jbGFzcyIKKyAgICAgICAgICAgICBtYW5pZmVzdD0iLi9jbGllbnQvTUFOSUZFU1QuTUYiPgogICAgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiPgogICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iZ2xhc3NmaXNoLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiAgICAgICAgICAgICAgPC9tZXRhaW5mPgotICAgICAgICA8L2phcj4gICAKKyAgICAgICAgPC9qYXI+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLWVhciI+CiAgICAgICAgIDxkZWxldGUgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0uZWFyIi8+CiAgICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+Ci0gICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4gICAKLSAgICAgICAgICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiICAJZmFpbG9uZXJyb3I9ImZhbHNlIi8+IAotICAgICAgICAgIDxjb3B5IGZpbGU9IiR7YXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiICAJZmFpbG9uZXJyb3I9ImZhbHNlIi8+IAorICAgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CisgICAgICAgICAgPGNvcHkgZmlsZT0iJHtzdW4tYXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIiAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICAgICAgICAgIDxjb3B5IGZpbGU9IiR7YXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgICAgICAgICAgPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtcmVzb3VyY2VzLWVhci54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiICBmaWx0ZXJpbmc9InRydWUiLz4KLSAgICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciI+IAorICAgICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIj4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi53YXIiLz4KICAgICAgICAgICAgIDwvZmlsZXNldD4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iPgotICAgICAgICAJPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotICAgICAgICAJPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIi8+CisgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIi8+CisgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiLz4KICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbCIvPgogICAgICAgICAgICAgPC9maWxlc2V0PgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5BUFNfSE9NRX0iIGluY2x1ZGVzPSJsaWIvcmVwb3J0ZXIuamFyIi8+Ci0gICAgICAgICAgPC9qYXI+ICAgICAgICAKKyAgICAgICAgICA8L2phcj4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImJ1aWxkLWVqYiwgYnVpbGQtd2ViLCBidWlsZC1jbGllbnQsIGJ1aWxkLWVhciIvPgpAQCAtMTE3LDcgKzExNyw3IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImNyZWF0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtMTI5LDcgKzEyOSw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICAgPGphdmEgZm9yaz0ib24iIAorICAgICAgICAgPGphdmEgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iV2ViVGVzdCI+CkBAIC0xMzksMTAgKzEzOSwxMCBAQAogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtjb250ZXh0cm9vdH0iLz4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNwUmVxdWVzdFNjb3BlZC9jbGllbnQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzcFJlcXVlc3RTY29wZWQvY2xpZW50L1dlYlRlc3QuamF2YQppbmRleCBhNjM2MjQ2Li41ZGFmOWIwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNwUmVxdWVzdFNjb3BlZC9jbGllbnQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9qc3BSZXF1ZXN0U2NvcGVkL2NsaWVudC9XZWJUZXN0LmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciByZXNvdXJjZSBpbmplY3Rpb24gaW50byBzZXJ2bGV0ICIKQEAgLTU3LDE0ICs1NywxNCBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjb250ZXh0Um9vdCArICIvbmV3SlNQLmpzcCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOwogICAgICAgICBjb25uLmNvbm5lY3QoKTsKICAgICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm4uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7IAorICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UgY29kZS4gRXhwZWN0ZWQ6IDIwMCIgKwogICAgICAgICAgICAgICAgICIsIHJlY2VpdmVkOiAiICsgcmVzcG9uc2VDb2RlKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzcFJlcXVlc3RTY29wZWQvZWpiL01lc3NhZ2VSZWNlaXZlclJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzcFJlcXVlc3RTY29wZWQvZWpiL01lc3NhZ2VSZWNlaXZlclJlbW90ZS5qYXZhCmluZGV4IDIyMzAyMTMuLjY1NTFhYjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9qc3BSZXF1ZXN0U2NvcGVkL2VqYi9NZXNzYWdlUmVjZWl2ZXJSZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNwUmVxdWVzdFNjb3BlZC9lamIvTWVzc2FnZVJlY2VpdmVyUmVtb3RlLmphdmEKQEAgLTI1LDYgKzI1LDYgQEAKIEBSZW1vdGUKIHB1YmxpYyBpbnRlcmZhY2UgTWVzc2FnZVJlY2VpdmVyUmVtb3RlIHsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSZW1vdGVKTkRJTmFtZSA9ICBNZXNzYWdlUmVjZWl2ZXJCZWFuLmNsYXNzLmdldFNpbXBsZU5hbWUoKSArICIvcmVtb3RlIjsKLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGNoZWNrTWVzc2FnZShTdHJpbmcgdGV4dCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNwUmVxdWVzdFNjb3BlZC9zZXJ2bGV0L3Rlc3QvSm1zVGFnSGFuZGxlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzcFJlcXVlc3RTY29wZWQvc2VydmxldC90ZXN0L0ptc1RhZ0hhbmRsZXIuamF2YQppbmRleCAxMDQ2YjhhLi45OWI3ZmViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNwUmVxdWVzdFNjb3BlZC9zZXJ2bGV0L3Rlc3QvSm1zVGFnSGFuZGxlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9qc3BSZXF1ZXN0U2NvcGVkL3NlcnZsZXQvdGVzdC9KbXNUYWdIYW5kbGVyLmphdmEKQEAgLTU5LDEwICs1OSwxMCBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgLy9HZXQgdGhlIHdyaXRlciBvYmplY3QgZm9yIG91dHB1dC4KICAgICAgICAgICAgIEpzcFdyaXRlciBvdXQgPSBwYWdlQ29udGV4dC5nZXRPdXQoKTsKLSAKKwogICAgICAgICAgICAgLy9QZXJmb3JtIHN1YnN0ciBvcGVyYXRpb24gb24gc3RyaW5nLgogICAgICAgICAgICAgb3V0LnByaW50bG4odGV4dCk7Ci0gCisKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBKc3BFeGNlcHRpb24oZSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9qc3BUcmFuc2FjdGlvblNjb3BlZC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzcFRyYW5zYWN0aW9uU2NvcGVkL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZjYwOWRhYi4uNjI2OTk3YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzcFRyYW5zYWN0aW9uU2NvcGVkL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzcFRyYW5zYWN0aW9uU2NvcGVkL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9Imptcy1pbmplY3Rpb24tanNwIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzcFRyYW5zYWN0aW9uU2NvcGVkL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9qc3BUcmFuc2FjdGlvblNjb3BlZC9idWlsZC54bWwKaW5kZXggYWU2MDAxZS4uZTFiZTc2ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzcFRyYW5zYWN0aW9uU2NvcGVkL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNwVHJhbnNhY3Rpb25TY29wZWQvYnVpbGQueG1sCkBAIC0zNSw3ICszNSw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuLWNsYXNzZXMtZGlyIj4KLSAgICAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgIAorICAgICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZS1lamIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTUxLDcgKzUxLDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUtY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1lamIiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CkBAIC02NCw3ICs2NCw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXdlYiIgZGVwZW5kcz0iY29tcGlsZS13ZWIiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KIApAQCAtNzIsNDIgKzcyLDQyIEBACiAgICAgICAgIDxkZWxldGUgZmlsZT0iJHthcHBjbGllbnQuamFyfSIvPgogICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgogICAgICAgICA8Y29weSBmaWxlPSIke2FwcGxpY2F0aW9uLWNsaWVudC54bWx9IgotICAgICAgICAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiIAorICAgICAgICAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICAgICAgICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC1hcHBsaWNhdGlvbi1jbGllbnQueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9nbGFzc2Zpc2gtYXBwbGljYXRpb24tY2xpZW50LnhtbCIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgICAgICAgIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIgogICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICAgICAgICA8amFyIGphcmZpbGU9IiR7YXBwY2xpZW50Lmphcn0iIGJhc2VkaXI9IiR7YXBwY2xpZW50amFyLmZpbGVzfSIgCi0gICAgICAgICAgICAgdXBkYXRlPSJ0cnVlIiBpbmNsdWRlcyA9IioqLyouY2xhc3MiIAotICAgICAgICAgICAgIG1hbmlmZXN0PSIuL2NsaWVudC9NQU5JRkVTVC5NRiI+ICAgICAgICAgCisgICAgICAgIDxqYXIgamFyZmlsZT0iJHthcHBjbGllbnQuamFyfSIgYmFzZWRpcj0iJHthcHBjbGllbnRqYXIuZmlsZXN9IgorICAgICAgICAgICAgIHVwZGF0ZT0idHJ1ZSIgaW5jbHVkZXMgPSIqKi8qLmNsYXNzIgorICAgICAgICAgICAgIG1hbmlmZXN0PSIuL2NsaWVudC9NQU5JRkVTVC5NRiI+CiAgICAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiI+CiAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJnbGFzc2Zpc2gtYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KICAgICAgICAgICAgICA8L21ldGFpbmY+Ci0gICAgICAgIDwvamFyPiAgIAorICAgICAgICA8L2phcj4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtZWFyIj4KICAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS5lYXIiLz4KICAgICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KLSAgICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPiAgIAotICAgICAgICAgIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIgIAlmYWlsb25lcnJvcj0iZmFsc2UiLz4gCi0gICAgICAgICAgPGNvcHkgZmlsZT0iJHthcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIgIAlmYWlsb25lcnJvcj0iZmFsc2UiLz4gCisgICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KKyAgICAgICAgICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CisgICAgICAgICAgPGNvcHkgZmlsZT0iJHthcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICAgICAgICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC1yZXNvdXJjZXMtZWFyLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIgIGZpbHRlcmluZz0idHJ1ZSIvPgotICAgICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIj4gCisgICAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiPgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgogICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLmphciIvPgogICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLndhciIvPgogICAgICAgICAgICAgPC9maWxlc2V0PgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSI+Ci0gICAgICAgIAk8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci0gICAgICAgIAk8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiLz4KKyAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KKyAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIvPgogICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sIi8+CiAgICAgICAgICAgICA8L2ZpbGVzZXQ+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LkFQU19IT01FfSIgaW5jbHVkZXM9ImxpYi9yZXBvcnRlci5qYXIiLz4KLSAgICAgICAgICA8L2phcj4gICAgICAgIAorICAgICAgICAgIDwvamFyPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iYnVpbGQtZWpiLCBidWlsZC13ZWIsIGJ1aWxkLWNsaWVudCwgYnVpbGQtZWFyIi8+CkBAIC0xMTcsNyArMTE3LDcgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iY3JlYXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC0xMjksNyArMTI5LDcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgICA8amF2YSBmb3JrPSJvbiIgCisgICAgICAgICA8amF2YSBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KQEAgLTEzOSwxMCArMTM5LDEwIEBACiAgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2NvbnRleHRyb290fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9qc3BUcmFuc2FjdGlvblNjb3BlZC9jbGllbnQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzcFRyYW5zYWN0aW9uU2NvcGVkL2NsaWVudC9XZWJUZXN0LmphdmEKaW5kZXggYzhjMzI1Ny4uZWVjYzMzMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzcFRyYW5zYWN0aW9uU2NvcGVkL2NsaWVudC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzcFRyYW5zYWN0aW9uU2NvcGVkL2NsaWVudC9XZWJUZXN0LmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciByZXNvdXJjZSBpbmplY3Rpb24gaW50byBzZXJ2bGV0ICIKQEAgLTU3LDE0ICs1NywxNCBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjb250ZXh0Um9vdCArICIvbmV3SlNQLmpzcCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOwogICAgICAgICBjb25uLmNvbm5lY3QoKTsKICAgICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm4uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7IAorICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UgY29kZS4gRXhwZWN0ZWQ6IDIwMCIgKwogICAgICAgICAgICAgICAgICIsIHJlY2VpdmVkOiAiICsgcmVzcG9uc2VDb2RlKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzcFRyYW5zYWN0aW9uU2NvcGVkL2VqYi9NZXNzYWdlUmVjZWl2ZXJSZW1vdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9qc3BUcmFuc2FjdGlvblNjb3BlZC9lamIvTWVzc2FnZVJlY2VpdmVyUmVtb3RlLmphdmEKaW5kZXggMjIzMDIxMy4uNjU1MWFiNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzcFRyYW5zYWN0aW9uU2NvcGVkL2VqYi9NZXNzYWdlUmVjZWl2ZXJSZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNwVHJhbnNhY3Rpb25TY29wZWQvZWpiL01lc3NhZ2VSZWNlaXZlclJlbW90ZS5qYXZhCkBAIC0yNSw2ICsyNSw2IEBACiBAUmVtb3RlCiBwdWJsaWMgaW50ZXJmYWNlIE1lc3NhZ2VSZWNlaXZlclJlbW90ZSB7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUmVtb3RlSk5ESU5hbWUgPSAgTWVzc2FnZVJlY2VpdmVyQmVhbi5jbGFzcy5nZXRTaW1wbGVOYW1lKCkgKyAiL3JlbW90ZSI7Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja01lc3NhZ2UoU3RyaW5nIHRleHQpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL2pzcFRyYW5zYWN0aW9uU2NvcGVkL3NlcnZsZXQvdGVzdC9KbXNUYWdIYW5kbGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNwVHJhbnNhY3Rpb25TY29wZWQvc2VydmxldC90ZXN0L0ptc1RhZ0hhbmRsZXIuamF2YQppbmRleCAwZTYxNWQxLi5jYzdjMDFhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNwVHJhbnNhY3Rpb25TY29wZWQvc2VydmxldC90ZXN0L0ptc1RhZ0hhbmRsZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvanNwVHJhbnNhY3Rpb25TY29wZWQvc2VydmxldC90ZXN0L0ptc1RhZ0hhbmRsZXIuamF2YQpAQCAtNjAsMTYgKzYwLDE2IEBACiAgICAgICAgICAgICBwcm9kdWNlci5zZW5kKHF1ZXVlLCBtc2cpOwogICAgICAgICAgICAgY29udGV4dCA9IGptc0NvbnRleHQudG9TdHJpbmcoKTsKICAgICAgICAgICAgIHV0LmNvbW1pdCgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmKGNvbnRleHQuaW5kZXhPZih0cmFuc2FjdGlvblNjb3BlKSA9PSAtMSl7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEpzcEV4Y2VwdGlvbigiTk9UIGluIHRyYW5zYWN0aW9uIHNjb3BlISIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLy9HZXQgdGhlIHdyaXRlciBvYmplY3QgZm9yIG91dHB1dC4KICAgICAgICAgICAgIEpzcFdyaXRlciBvdXQgPSBwYWdlQ29udGV4dC5nZXRPdXQoKTsKLSAKKwogICAgICAgICAgICAgLy9QZXJmb3JtIHN1YnN0ciBvcGVyYXRpb24gb24gc3RyaW5nLgogICAgICAgICAgICAgb3V0LnByaW50bG4odGV4dCk7Ci0gCisKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBKc3BFeGNlcHRpb24oZSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9zZXJ2bGV0UmVxdWVzdFNjb3BlZC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3NlcnZsZXRSZXF1ZXN0U2NvcGVkL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZmViZWUzYi4uYmU0NGYxYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3NlcnZsZXRSZXF1ZXN0U2NvcGVkL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3NlcnZsZXRSZXF1ZXN0U2NvcGVkL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9Imptcy1pbmplY3Rpb24tc2VydmxldCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9zZXJ2bGV0UmVxdWVzdFNjb3BlZC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvc2VydmxldFJlcXVlc3RTY29wZWQvYnVpbGQueG1sCmluZGV4IGRmNWI5N2MuLmJiMDMzMDUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9zZXJ2bGV0UmVxdWVzdFNjb3BlZC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3NlcnZsZXRSZXF1ZXN0U2NvcGVkL2J1aWxkLnhtbApAQCAtMzUsNyArMzUsNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbi1jbGFzc2VzLWRpciI+Ci0gICAgICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAKKyAgICAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUtZWpiIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlLWNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtZWpiIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgpAQCAtNjQsNyArNjQsNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC13ZWIiIGRlcGVuZHM9ImNvbXBpbGUtd2ViIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CiAKQEAgLTcyLDQyICs3Miw0MiBAQAogICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7YXBwY2xpZW50Lmphcn0iLz4KICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KICAgICAgICAgPGNvcHkgZmlsZT0iJHthcHBsaWNhdGlvbi1jbGllbnQueG1sfSIKLSAgICAgICAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKKyAgICAgICAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi1jbGllbnQueG1sIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICAgICAgPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtYXBwbGljYXRpb24tY2xpZW50LnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvZ2xhc3NmaXNoLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICAgICAgICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIKICAgICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgICAgICAgPGphciBqYXJmaWxlPSIke2FwcGNsaWVudC5qYXJ9IiBiYXNlZGlyPSIke2FwcGNsaWVudGphci5maWxlc30iIAotICAgICAgICAgICAgIHVwZGF0ZT0idHJ1ZSIgaW5jbHVkZXMgPSIqKi8qLmNsYXNzIiAKLSAgICAgICAgICAgICBtYW5pZmVzdD0iLi9jbGllbnQvTUFOSUZFU1QuTUYiPiAgICAgICAgIAorICAgICAgICA8amFyIGphcmZpbGU9IiR7YXBwY2xpZW50Lmphcn0iIGJhc2VkaXI9IiR7YXBwY2xpZW50amFyLmZpbGVzfSIKKyAgICAgICAgICAgICB1cGRhdGU9InRydWUiIGluY2x1ZGVzID0iKiovKi5jbGFzcyIKKyAgICAgICAgICAgICBtYW5pZmVzdD0iLi9jbGllbnQvTUFOSUZFU1QuTUYiPgogICAgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiPgogICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iZ2xhc3NmaXNoLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiAgICAgICAgICAgICAgPC9tZXRhaW5mPgotICAgICAgICA8L2phcj4gICAKKyAgICAgICAgPC9qYXI+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLWVhciI+CiAgICAgICAgIDxkZWxldGUgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0uZWFyIi8+CiAgICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+Ci0gICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4gICAKLSAgICAgICAgICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiICAJZmFpbG9uZXJyb3I9ImZhbHNlIi8+IAotICAgICAgICAgIDxjb3B5IGZpbGU9IiR7YXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiICAJZmFpbG9uZXJyb3I9ImZhbHNlIi8+IAorICAgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CisgICAgICAgICAgPGNvcHkgZmlsZT0iJHtzdW4tYXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIiAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICAgICAgICAgIDxjb3B5IGZpbGU9IiR7YXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgICAgICAgICAgPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtcmVzb3VyY2VzLWVhci54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiICBmaWx0ZXJpbmc9InRydWUiLz4KLSAgICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciI+IAorICAgICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIj4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi53YXIiLz4KICAgICAgICAgICAgIDwvZmlsZXNldD4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iPgotICAgICAgICAJPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotICAgICAgICAJPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIi8+CisgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIi8+CisgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiLz4KICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbCIvPgogICAgICAgICAgICAgPC9maWxlc2V0PgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5BUFNfSE9NRX0iIGluY2x1ZGVzPSJsaWIvcmVwb3J0ZXIuamFyIi8+Ci0gICAgICAgICAgPC9qYXI+ICAgICAgICAKKyAgICAgICAgICA8L2phcj4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImJ1aWxkLWVqYiwgYnVpbGQtd2ViLCBidWlsZC1jbGllbnQsIGJ1aWxkLWVhciIvPgpAQCAtMTE3LDcgKzExNyw3IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImNyZWF0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtMTI5LDcgKzEyOSw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICAgPGphdmEgZm9yaz0ib24iIAorICAgICAgICAgPGphdmEgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iV2ViVGVzdCI+CkBAIC0xMzksMTAgKzEzOSwxMCBAQAogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtjb250ZXh0cm9vdH0iLz4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvc2VydmxldFJlcXVlc3RTY29wZWQvY2xpZW50L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9zZXJ2bGV0UmVxdWVzdFNjb3BlZC9jbGllbnQvV2ViVGVzdC5qYXZhCmluZGV4IGM4NDgxOTguLmVkNWI0MjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9zZXJ2bGV0UmVxdWVzdFNjb3BlZC9jbGllbnQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9zZXJ2bGV0UmVxdWVzdFNjb3BlZC9jbGllbnQvV2ViVGVzdC5qYXZhCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgcmVzb3VyY2UgaW5qZWN0aW9uIGludG8gc2VydmxldCAiCkBAIC01NywxNCArNTcsMTQgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL1Rlc3RTZXJ2bGV0Iik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsgCisgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZSBjb2RlLiBFeHBlY3RlZDogMjAwIiArCiAgICAgICAgICAgICAgICAgIiwgcmVjZWl2ZWQ6ICIgKyByZXNwb25zZUNvZGUpOwogICAgICAgICB9CkBAIC04NSw3ICs4NSw3IEBACiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgaWYgKGlzICE9IG51bGwpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9zZXJ2bGV0UmVxdWVzdFNjb3BlZC9lamIvTWVzc2FnZVJlY2VpdmVyUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvc2VydmxldFJlcXVlc3RTY29wZWQvZWpiL01lc3NhZ2VSZWNlaXZlclJlbW90ZS5qYXZhCmluZGV4IDM3NzIyZjUuLmMyYmVhNjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9zZXJ2bGV0UmVxdWVzdFNjb3BlZC9lamIvTWVzc2FnZVJlY2VpdmVyUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3NlcnZsZXRSZXF1ZXN0U2NvcGVkL2VqYi9NZXNzYWdlUmVjZWl2ZXJSZW1vdGUuamF2YQpAQCAtMjUsNiArMjUsNiBAQAogQFJlbW90ZQogcHVibGljIGludGVyZmFjZSBNZXNzYWdlUmVjZWl2ZXJSZW1vdGUgewogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJlbW90ZUpORElOYW1lID0gIE1lc3NhZ2VSZWNlaXZlckJlYW4uY2xhc3MuZ2V0U2ltcGxlTmFtZSgpICsgIi9yZW1vdGUiOwotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gY2hlY2tNZXNzYWdlKFN0cmluZ1tdIHRleHRzKTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9zZXJ2bGV0UmVxdWVzdFNjb3BlZC9zZXJ2bGV0L215ZmlsdGVyL015RmlsdGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvc2VydmxldFJlcXVlc3RTY29wZWQvc2VydmxldC9teWZpbHRlci9NeUZpbHRlci5qYXZhCmluZGV4IDk2MGRjMDguLmQzODE5OTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9zZXJ2bGV0UmVxdWVzdFNjb3BlZC9zZXJ2bGV0L215ZmlsdGVyL015RmlsdGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3NlcnZsZXRSZXF1ZXN0U2NvcGVkL3NlcnZsZXQvbXlmaWx0ZXIvTXlGaWx0ZXIuamF2YQpAQCAtMzIsNyArMzIsNyBAQAogICAgIEBKTVNDb25uZWN0aW9uRmFjdG9yeSgiam1zL2ptc191bml0X3Rlc3RfUUNGIikKICAgICBASk1TU2Vzc2lvbk1vZGUoSk1TQ29udGV4dC5BVVRPX0FDS05PV0xFREdFKQogICAgIHByaXZhdGUgSk1TQ29udGV4dCBqbXNDb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgaW5pdChGaWx0ZXJDb25maWcgZmlsdGVyQ29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvc2VydmxldFRyYW5zYWN0aW9uU2NvcGVkL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvc2VydmxldFRyYW5zYWN0aW9uU2NvcGVkL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZmViZWUzYi4uYmU0NGYxYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3NlcnZsZXRUcmFuc2FjdGlvblNjb3BlZC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9zZXJ2bGV0VHJhbnNhY3Rpb25TY29wZWQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iam1zLWluamVjdGlvbi1zZXJ2bGV0Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3NlcnZsZXRUcmFuc2FjdGlvblNjb3BlZC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvc2VydmxldFRyYW5zYWN0aW9uU2NvcGVkL2J1aWxkLnhtbAppbmRleCBkZjViOTdjLi5iYjAzMzA1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvc2VydmxldFRyYW5zYWN0aW9uU2NvcGVkL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvc2VydmxldFRyYW5zYWN0aW9uU2NvcGVkL2J1aWxkLnhtbApAQCAtMzUsNyArMzUsNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbi1jbGFzc2VzLWRpciI+Ci0gICAgICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAKKyAgICAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUtZWpiIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlLWNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtZWpiIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgpAQCAtNjQsNyArNjQsNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC13ZWIiIGRlcGVuZHM9ImNvbXBpbGUtd2ViIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CiAKQEAgLTcyLDQyICs3Miw0MiBAQAogICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7YXBwY2xpZW50Lmphcn0iLz4KICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KICAgICAgICAgPGNvcHkgZmlsZT0iJHthcHBsaWNhdGlvbi1jbGllbnQueG1sfSIKLSAgICAgICAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKKyAgICAgICAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi1jbGllbnQueG1sIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICAgICAgPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtYXBwbGljYXRpb24tY2xpZW50LnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvZ2xhc3NmaXNoLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICAgICAgICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIKICAgICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgICAgICAgPGphciBqYXJmaWxlPSIke2FwcGNsaWVudC5qYXJ9IiBiYXNlZGlyPSIke2FwcGNsaWVudGphci5maWxlc30iIAotICAgICAgICAgICAgIHVwZGF0ZT0idHJ1ZSIgaW5jbHVkZXMgPSIqKi8qLmNsYXNzIiAKLSAgICAgICAgICAgICBtYW5pZmVzdD0iLi9jbGllbnQvTUFOSUZFU1QuTUYiPiAgICAgICAgIAorICAgICAgICA8amFyIGphcmZpbGU9IiR7YXBwY2xpZW50Lmphcn0iIGJhc2VkaXI9IiR7YXBwY2xpZW50amFyLmZpbGVzfSIKKyAgICAgICAgICAgICB1cGRhdGU9InRydWUiIGluY2x1ZGVzID0iKiovKi5jbGFzcyIKKyAgICAgICAgICAgICBtYW5pZmVzdD0iLi9jbGllbnQvTUFOSUZFU1QuTUYiPgogICAgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiPgogICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iZ2xhc3NmaXNoLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiAgICAgICAgICAgICAgPC9tZXRhaW5mPgotICAgICAgICA8L2phcj4gICAKKyAgICAgICAgPC9qYXI+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLWVhciI+CiAgICAgICAgIDxkZWxldGUgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0uZWFyIi8+CiAgICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+Ci0gICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4gICAKLSAgICAgICAgICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiICAJZmFpbG9uZXJyb3I9ImZhbHNlIi8+IAotICAgICAgICAgIDxjb3B5IGZpbGU9IiR7YXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiICAJZmFpbG9uZXJyb3I9ImZhbHNlIi8+IAorICAgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CisgICAgICAgICAgPGNvcHkgZmlsZT0iJHtzdW4tYXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIiAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICAgICAgICAgIDxjb3B5IGZpbGU9IiR7YXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgICAgICAgICAgPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtcmVzb3VyY2VzLWVhci54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiICBmaWx0ZXJpbmc9InRydWUiLz4KLSAgICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciI+IAorICAgICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIj4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi53YXIiLz4KICAgICAgICAgICAgIDwvZmlsZXNldD4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iPgotICAgICAgICAJPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotICAgICAgICAJPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIi8+CisgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIi8+CisgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiLz4KICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbCIvPgogICAgICAgICAgICAgPC9maWxlc2V0PgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5BUFNfSE9NRX0iIGluY2x1ZGVzPSJsaWIvcmVwb3J0ZXIuamFyIi8+Ci0gICAgICAgICAgPC9qYXI+ICAgICAgICAKKyAgICAgICAgICA8L2phcj4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImJ1aWxkLWVqYiwgYnVpbGQtd2ViLCBidWlsZC1jbGllbnQsIGJ1aWxkLWVhciIvPgpAQCAtMTE3LDcgKzExNyw3IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImNyZWF0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtMTI5LDcgKzEyOSw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICAgPGphdmEgZm9yaz0ib24iIAorICAgICAgICAgPGphdmEgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iV2ViVGVzdCI+CkBAIC0xMzksMTAgKzEzOSwxMCBAQAogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtjb250ZXh0cm9vdH0iLz4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvc2VydmxldFRyYW5zYWN0aW9uU2NvcGVkL2NsaWVudC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvc2VydmxldFRyYW5zYWN0aW9uU2NvcGVkL2NsaWVudC9XZWJUZXN0LmphdmEKaW5kZXggYTM3NmQ1MC4uNDhmOWE2MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3NlcnZsZXRUcmFuc2FjdGlvblNjb3BlZC9jbGllbnQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9zZXJ2bGV0VHJhbnNhY3Rpb25TY29wZWQvY2xpZW50L1dlYlRlc3QuamF2YQpAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIHJlc291cmNlIGluamVjdGlvbiBpbnRvIHNlcnZsZXQgIgpAQCAtNTcsMTQgKzU3LDE0IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgICArIGNvbnRleHRSb290ICsgIi9UZXN0U2VydmxldCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOwogICAgICAgICBjb25uLmNvbm5lY3QoKTsKICAgICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm4uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7IAorICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UgY29kZS4gRXhwZWN0ZWQ6IDIwMCIgKwogICAgICAgICAgICAgICAgICIsIHJlY2VpdmVkOiAiICsgcmVzcG9uc2VDb2RlKTsKICAgICAgICAgfQpAQCAtODUsNyArODUsNyBAQAogICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGlmIChpcyAhPSBudWxsKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvc2VydmxldFRyYW5zYWN0aW9uU2NvcGVkL2VqYi9NZXNzYWdlUmVjZWl2ZXJSZW1vdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9zZXJ2bGV0VHJhbnNhY3Rpb25TY29wZWQvZWpiL01lc3NhZ2VSZWNlaXZlclJlbW90ZS5qYXZhCmluZGV4IDM3NzIyZjUuLmMyYmVhNjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9zZXJ2bGV0VHJhbnNhY3Rpb25TY29wZWQvZWpiL01lc3NhZ2VSZWNlaXZlclJlbW90ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9zZXJ2bGV0VHJhbnNhY3Rpb25TY29wZWQvZWpiL01lc3NhZ2VSZWNlaXZlclJlbW90ZS5qYXZhCkBAIC0yNSw2ICsyNSw2IEBACiBAUmVtb3RlCiBwdWJsaWMgaW50ZXJmYWNlIE1lc3NhZ2VSZWNlaXZlclJlbW90ZSB7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUmVtb3RlSk5ESU5hbWUgPSAgTWVzc2FnZVJlY2VpdmVyQmVhbi5jbGFzcy5nZXRTaW1wbGVOYW1lKCkgKyAiL3JlbW90ZSI7Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja01lc3NhZ2UoU3RyaW5nW10gdGV4dHMpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3NlcnZsZXRUcmFuc2FjdGlvblNjb3BlZC9zZXJ2bGV0L215ZmlsdGVyL015RmlsdGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvc2VydmxldFRyYW5zYWN0aW9uU2NvcGVkL3NlcnZsZXQvbXlmaWx0ZXIvTXlGaWx0ZXIuamF2YQppbmRleCA5NjBkYzA4Li5kMzgxOTk3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvc2VydmxldFRyYW5zYWN0aW9uU2NvcGVkL3NlcnZsZXQvbXlmaWx0ZXIvTXlGaWx0ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvc2VydmxldFRyYW5zYWN0aW9uU2NvcGVkL3NlcnZsZXQvbXlmaWx0ZXIvTXlGaWx0ZXIuamF2YQpAQCAtMzIsNyArMzIsNyBAQAogICAgIEBKTVNDb25uZWN0aW9uRmFjdG9yeSgiam1zL2ptc191bml0X3Rlc3RfUUNGIikKICAgICBASk1TU2Vzc2lvbk1vZGUoSk1TQ29udGV4dC5BVVRPX0FDS05PV0xFREdFKQogICAgIHByaXZhdGUgSk1TQ29udGV4dCBqbXNDb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgaW5pdChGaWx0ZXJDb25maWcgZmlsdGVyQ29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvc2Vzc2lvbkJlYW5SZXF1ZXN0U2NvcGVkL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvc2Vzc2lvbkJlYW5SZXF1ZXN0U2NvcGVkL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOTRjNTU2OS4uNzBlNzY3MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3Nlc3Npb25CZWFuUmVxdWVzdFNjb3BlZC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9zZXNzaW9uQmVhblJlcXVlc3RTY29wZWQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqbXMtaW5qZWN0aW9uLXN0YXRlbGVzcy1lamIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9zZXNzaW9uQmVhblJlcXVlc3RTY29wZWQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3Nlc3Npb25CZWFuUmVxdWVzdFNjb3BlZC9idWlsZC54bWwKaW5kZXggMjE5NmNlMS4uMWU2MTIxOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3Nlc3Npb25CZWFuUmVxdWVzdFNjb3BlZC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3Nlc3Npb25CZWFuUmVxdWVzdFNjb3BlZC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDE0ICs0NiwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovU2Vzc2lvbkJlYW5JbmplY3Rpb24qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQuY2xhc3MsKiovU2Vzc2lvbkJlYW5JbmplY3Rpb24qLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYzLDcgKzYzLDcgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iY3JlYXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC03MSwyMSArNzEsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxqYXZhIGZvcms9Im9uIiAKKyAgICAgICAgPGphdmEgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9Im9yZy5nbGFzc2Zpc2gudGVzdC5qbXMuaW5qZWN0aW9uLmNsaWVudC5DbGllbnQiPgogICAgICAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0ib3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydCIgdmFsdWU9IiR7b3JiLnBvcnR9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9zZXNzaW9uQmVhblJlcXVlc3RTY29wZWQvZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvc2Vzc2lvbkJlYW5SZXF1ZXN0U2NvcGVkL2VqYi9TZXNzaW9uQmVhbkluamVjdGlvbi5qYXZhCmluZGV4IDY3YWFiZmMuLmIwOTMzNjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9zZXNzaW9uQmVhblJlcXVlc3RTY29wZWQvZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3Nlc3Npb25CZWFuUmVxdWVzdFNjb3BlZC9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb24uamF2YQpAQCAtNjMsNyArNjMsNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUVGhlIGNvbnRleHQgdmFyaWFibGVzIHVzZWQgaW4gdGhlIGNhbGwgYXJlIE5PVCBpbiByZXF1ZXN0U2NvcGUgc2NvcGUuIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAJCQorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBKTVNDb25zdW1lciBjb25zdW1lciA9IGptc0NvbnRleHQuY3JlYXRlQ29uc3VtZXIocXVldWUpOwogICAgICAgICAgICAgTWVzc2FnZSBtc2cgPSBjb25zdW1lci5yZWNlaXZlKDMwMDAwTCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvc2Vzc2lvbkJlYW5SZXF1ZXN0U2NvcGVkL2VqYi9TZXNzaW9uQmVhbkluamVjdGlvblJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3Nlc3Npb25CZWFuUmVxdWVzdFNjb3BlZC9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb25SZW1vdGUuamF2YQppbmRleCBkN2VmNDViLi40MzVkYmI4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvc2Vzc2lvbkJlYW5SZXF1ZXN0U2NvcGVkL2VqYi9TZXNzaW9uQmVhbkluamVjdGlvblJlbW90ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9zZXNzaW9uQmVhblJlcXVlc3RTY29wZWQvZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uUmVtb3RlLmphdmEKQEAgLTI3LDYgKzI3LDYgQEAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSZW1vdGVKTkRJTmFtZSA9ICBTZXNzaW9uQmVhbkluamVjdGlvbi5jbGFzcy5nZXRTaW1wbGVOYW1lKCkgKyAiL3JlbW90ZSI7CiAKICAgICBwdWJsaWMgdm9pZCBzZW5kTWVzc2FnZShTdHJpbmcgdGV4dCk7Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja01lc3NhZ2VBbmRTY29wZWQoU3RyaW5nIHRleHQpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3Nlc3Npb25CZWFuVHJhbnNhY3Rpb25TY29wZWQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9zZXNzaW9uQmVhblRyYW5zYWN0aW9uU2NvcGVkL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOTRjNTU2OS4uNzBlNzY3MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3Nlc3Npb25CZWFuVHJhbnNhY3Rpb25TY29wZWQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvc2Vzc2lvbkJlYW5UcmFuc2FjdGlvblNjb3BlZC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9Imptcy1pbmplY3Rpb24tc3RhdGVsZXNzLWVqYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3Nlc3Npb25CZWFuVHJhbnNhY3Rpb25TY29wZWQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3Nlc3Npb25CZWFuVHJhbnNhY3Rpb25TY29wZWQvYnVpbGQueG1sCmluZGV4IDIxOTZjZTEuLjFlNjEyMTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9zZXNzaW9uQmVhblRyYW5zYWN0aW9uU2NvcGVkL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvc2Vzc2lvbkJlYW5UcmFuc2FjdGlvblNjb3BlZC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDE0ICs0NiwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovU2Vzc2lvbkJlYW5JbmplY3Rpb24qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQuY2xhc3MsKiovU2Vzc2lvbkJlYW5JbmplY3Rpb24qLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYzLDcgKzYzLDcgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iY3JlYXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC03MSwyMSArNzEsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxqYXZhIGZvcms9Im9uIiAKKyAgICAgICAgPGphdmEgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9Im9yZy5nbGFzc2Zpc2gudGVzdC5qbXMuaW5qZWN0aW9uLmNsaWVudC5DbGllbnQiPgogICAgICAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0ib3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydCIgdmFsdWU9IiR7b3JiLnBvcnR9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy9zZXNzaW9uQmVhblRyYW5zYWN0aW9uU2NvcGVkL2VqYi9TZXNzaW9uQmVhbkluamVjdGlvblJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3Nlc3Npb25CZWFuVHJhbnNhY3Rpb25TY29wZWQvZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uUmVtb3RlLmphdmEKaW5kZXggZDdlZjQ1Yi4uNDM1ZGJiOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3Nlc3Npb25CZWFuVHJhbnNhY3Rpb25TY29wZWQvZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3Nlc3Npb25CZWFuVHJhbnNhY3Rpb25TY29wZWQvZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uUmVtb3RlLmphdmEKQEAgLTI3LDYgKzI3LDYgQEAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSZW1vdGVKTkRJTmFtZSA9ICBTZXNzaW9uQmVhbkluamVjdGlvbi5jbGFzcy5nZXRTaW1wbGVOYW1lKCkgKyAiL3JlbW90ZSI7CiAKICAgICBwdWJsaWMgdm9pZCBzZW5kTWVzc2FnZShTdHJpbmcgdGV4dCk7Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja01lc3NhZ2VBbmRTY29wZWQoU3RyaW5nIHRleHQpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3dzUmVxdWVzdFNjb3BlZC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3dzUmVxdWVzdFNjb3BlZC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGZmMzQ2NGQuLmQzY2VmNzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy93c1JlcXVlc3RTY29wZWQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvd3NSZXF1ZXN0U2NvcGVkL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9Imptcy1pbmplY3Rpb24td3MiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvd3NSZXF1ZXN0U2NvcGVkL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy93c1JlcXVlc3RTY29wZWQvYnVpbGQueG1sCmluZGV4IDBmNTQ0MjguLjQwZjc2ZmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy93c1JlcXVlc3RTY29wZWQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy93c1JlcXVlc3RTY29wZWQvYnVpbGQueG1sCkBAIC0zNSw3ICszNSw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuLWNsYXNzZXMtZGlyIj4KLSAgICAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgIAorICAgICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZS1lamIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTUxLDcgKzUxLDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUtY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNsaWVudCIvPgpAQCAtNjMsMjkgKzYzLDI5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXdlYiIgZGVwZW5kcz0iY29tcGlsZS13ZWIiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtZWFyIj4KICAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS5lYXIiLz4KICAgICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KLSAgICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPiAgIAotICAgICAgICAgIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIgIAlmYWlsb25lcnJvcj0iZmFsc2UiLz4gCi0gICAgICAgICAgPGNvcHkgZmlsZT0iJHthcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIgIAlmYWlsb25lcnJvcj0iZmFsc2UiLz4gCisgICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KKyAgICAgICAgICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CisgICAgICAgICAgPGNvcHkgZmlsZT0iJHthcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICAgICAgICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC1yZXNvdXJjZXMtZWFyLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIgIGZpbHRlcmluZz0idHJ1ZSIvPgotICAgICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIj4gCisgICAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiPgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgogICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLmphciIvPgogICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLndhciIvPgogICAgICAgICAgICAgPC9maWxlc2V0PgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSI+Ci0gICAgICAgIAk8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci0gICAgICAgIAk8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiLz4KKyAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KKyAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIvPgogICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL2dsYXNzZmlzaC1yZXNvdXJjZXMueG1sIi8+CiAgICAgICAgICAgICA8L2ZpbGVzZXQ+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LkFQU19IT01FfSIgaW5jbHVkZXM9ImxpYi9yZXBvcnRlci5qYXIiLz4KLSAgICAgICAgICA8L2phcj4gICAgICAgIAorICAgICAgICAgIDwvamFyPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iYnVpbGQtZWpiLCBidWlsZC13ZWIsIGJ1aWxkLWVhciIvPgpAQCAtMTAyLDkgKzEwMiw5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi53c2NvbXBpbGUiIGRlcGVuZHM9InNldC13c2NvbXBpbGUiPgotICAgIAk8ZXhlYyBleGVjdXRhYmxlPSIke3dzY29tcGlsZX0iIGZhaWxvbmVycm9yPSJ0cnVlIiA+Ci0gICAgICAgICAgICA8YXJnIGxpbmU9Ii1zb3VyY2UgMS4xLjIgJHt3c2NvbXBpbGUuY29tbWFuZH0iIC8+ICAgICAgICAKLSAgICAJPC9leGVjPgorICAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke3dzY29tcGlsZX0iIGZhaWxvbmVycm9yPSJ0cnVlIiA+CisgICAgICAgICAgICA8YXJnIGxpbmU9Ii1zb3VyY2UgMS4xLjIgJHt3c2NvbXBpbGUuY29tbWFuZH0iIC8+CisgICAgICAgIDwvZXhlYz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtY2xpZW50IiBkZXBlbmRzPSJjbGVhbiI+CkBAIC0xMTMsMjUgKzExMywyNSBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImdlbmVyYXRlV1NDb25maWciLz4KICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KICAgICAgICAgPGNvcHkgZmlsZT0iJHthcHBsaWNhdGlvbi1jbGllbnQueG1sfSIKLSAgICAgICAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKKyAgICAgICAgICAgICAgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi1jbGllbnQueG1sIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICAgICAgPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtYXBwbGljYXRpb24tY2xpZW50LnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvZ2xhc3NmaXNoLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICAgICAgICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIKICAgICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4ud3Njb21waWxlIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIgdmFsdWU9Ii1nZW4gLWNwICR7YnVpbGQuY2xhc3Nlcy5kaXJ9IC1rZWVwIC1kICR7YnVpbGQuY2xhc3Nlcy5kaXJ9IGNvbmZpZy54bWwiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiIHZhbHVlPSItZ2VuIC1jcCAke2J1aWxkLmNsYXNzZXMuZGlyfSAta2VlcCAtZCAke2J1aWxkLmNsYXNzZXMuZGlyfSBjb25maWcueG1sIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNsaWVudCIvPgotICAgICAgICA8amFyIGphcmZpbGU9IiR7YXBwY2xpZW50Lmphcn0iIGJhc2VkaXI9IiR7YXBwY2xpZW50amFyLmZpbGVzfSIgCi0gICAgICAgICAgICAgdXBkYXRlPSJ0cnVlIiBpbmNsdWRlcyA9IioqLyouY2xhc3MiIAotICAgICAgICAgICAgIG1hbmlmZXN0PSIuL2NsaWVudC9NQU5JRkVTVC5NRiI+ICAgICAgICAgCisgICAgICAgIDxqYXIgamFyZmlsZT0iJHthcHBjbGllbnQuamFyfSIgYmFzZWRpcj0iJHthcHBjbGllbnRqYXIuZmlsZXN9IgorICAgICAgICAgICAgIHVwZGF0ZT0idHJ1ZSIgaW5jbHVkZXMgPSIqKi8qLmNsYXNzIgorICAgICAgICAgICAgIG1hbmlmZXN0PSIuL2NsaWVudC9NQU5JRkVTVC5NRiI+CiAgICAgICAgICAgICAgPG1ldGFpbmYgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiI+CiAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJnbGFzc2Zpc2gtYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KICAgICAgICAgICAgICA8L21ldGFpbmY+Ci0gICAgICAgIDwvamFyPiAgIAorICAgICAgICA8L2phcj4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtMTM5LDcgKzEzOSw3IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImNyZWF0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtMTUxLDcgKzE1MSw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImdlbmVyYXRlV1NDb25maWciIGRlcGVuZHM9ImNvbXBpbGUtZWpiIj4KLSAgICAgICAgIDxqYXZhIGZvcms9Im9uIiAKKyAgICAgICAgIDxqYXZhIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0ib3JnLmdsYXNzZmlzaC50ZXN0Lmptcy5pbmplY3Rpb24uZWpiLkdlbmVyYXRlV1NDb25maWciPgpAQCAtMTYzLDcgKzE2Myw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICAgPGphdmEgZm9yaz0ib24iIAorICAgICAgICAgPGphdmEgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iV3NUZXN0Ij4KQEAgLTE3MywxMCArMTczLDEwIEBACiAgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2NvbnRleHRyb290fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy93c1JlcXVlc3RTY29wZWQvY2xpZW50L1dzVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3dzUmVxdWVzdFNjb3BlZC9jbGllbnQvV3NUZXN0LmphdmEKaW5kZXggZTE3ZmQ2Ni4uNDI0NzFiYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3dzUmVxdWVzdFNjb3BlZC9jbGllbnQvV3NUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3dzUmVxdWVzdFNjb3BlZC9jbGllbnQvV3NUZXN0LmphdmEKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciByZXNvdXJjZSBpbmplY3Rpb24gaW50byB3ZWJzZXJ2aWNlICIKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy93c1JlcXVlc3RTY29wZWQvZWpiL0dlbmVyYXRlV1NDb25maWcuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy93c1JlcXVlc3RTY29wZWQvZWpiL0dlbmVyYXRlV1NDb25maWcuamF2YQppbmRleCBkYzMyZDJlLi44ZDhmMmQ5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvd3NSZXF1ZXN0U2NvcGVkL2VqYi9HZW5lcmF0ZVdTQ29uZmlnLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3dzUmVxdWVzdFNjb3BlZC9lamIvR2VuZXJhdGVXU0NvbmZpZy5qYXZhCkBAIC0yMyw3ICsyMyw3IEBACiAgICAgICAgIFN0cmluZyBmaWxlbmFtZSA9IGFyZ3NbMF07CiAgICAgICAgIFN0cmluZyBob3N0ID0gYXJnc1sxXTsKICAgICAgICAgU3RyaW5nIHBvcnQgPSBhcmdzWzJdOwotICAgICAgICAKKwogICAgICAgICBTdHJpbmdCdWZmZXIgY29uZmlnID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgICAgICBjb25maWcuYXBwZW5kKCI8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJVVEYtOFwiPz4iKS5hcHBlbmQoIlxyXG4iKTsKICAgICAgICAgY29uZmlnLmFwcGVuZCgiPGNvbmZpZ3VyYXRpb24geG1sbnM9XCJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZ1wiPiIpOwpAQCAtMzEsMTEgKzMxLDExIEBACiAgICAgICAgIGNvbmZpZy5hcHBlbmQoIjx3c2RsIGxvY2F0aW9uPVwiaHR0cDovLyIpLmFwcGVuZChob3N0KS5hcHBlbmQoIjoiKS5hcHBlbmQocG9ydCk7CiAgICAgICAgIGNvbmZpZy5hcHBlbmQoIi9qbXMtaW5qZWN0aW9uLXdzLXdlYi9OZXdXZWJTZXJ2aWNlP3dzZGxcIiBwYWNrYWdlTmFtZT1cInRlc3RcIi8+Iik7CiAgICAgICAgIGNvbmZpZy5hcHBlbmQoIlxyXG4iKS5hcHBlbmQoIjwvY29uZmlndXJhdGlvbj4iKTsKLSAgICAKKwogICAgICAgICBGaWxlIGZpbGUgPSBuZXcgRmlsZShmaWxlbmFtZSk7CiAgICAgICAgIGlmIChmaWxlLmV4aXN0cygpKQogICAgICAgICAgICAgZmlsZS5kZWxldGUoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIGJ5dGVbXSBvdXRwdXQgPSBjb25maWcudG9TdHJpbmcoKS5nZXRCeXRlcygpOwogICAgICAgICBGaWxlT3V0cHV0U3RyZWFtIGZvcyA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKGZpbGVuYW1lKTsKICAgICAgICAgZm9zLndyaXRlKG91dHB1dCwgMCwgb3V0cHV0Lmxlbmd0aCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvd3NSZXF1ZXN0U2NvcGVkL2VqYi9NZXNzYWdlUmVjZWl2ZXJSZW1vdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy93c1JlcXVlc3RTY29wZWQvZWpiL01lc3NhZ2VSZWNlaXZlclJlbW90ZS5qYXZhCmluZGV4IDIyMzAyMTMuLjY1NTFhYjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy93c1JlcXVlc3RTY29wZWQvZWpiL01lc3NhZ2VSZWNlaXZlclJlbW90ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy93c1JlcXVlc3RTY29wZWQvZWpiL01lc3NhZ2VSZWNlaXZlclJlbW90ZS5qYXZhCkBAIC0yNSw2ICsyNSw2IEBACiBAUmVtb3RlCiBwdWJsaWMgaW50ZXJmYWNlIE1lc3NhZ2VSZWNlaXZlclJlbW90ZSB7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUmVtb3RlSk5ESU5hbWUgPSAgTWVzc2FnZVJlY2VpdmVyQmVhbi5jbGFzcy5nZXRTaW1wbGVOYW1lKCkgKyAiL3JlbW90ZSI7Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja01lc3NhZ2UoU3RyaW5nIHRleHQpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3dzVHJhbnNhY3Rpb25TY29wZWQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy93c1RyYW5zYWN0aW9uU2NvcGVkL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZmYzNDY0ZC4uZDNjZWY3NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3dzVHJhbnNhY3Rpb25TY29wZWQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvd3NUcmFuc2FjdGlvblNjb3BlZC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqbXMtaW5qZWN0aW9uLXdzIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3dzVHJhbnNhY3Rpb25TY29wZWQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3dzVHJhbnNhY3Rpb25TY29wZWQvYnVpbGQueG1sCmluZGV4IDBmNTQ0MjguLjQwZjc2ZmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy93c1RyYW5zYWN0aW9uU2NvcGVkL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvd3NUcmFuc2FjdGlvblNjb3BlZC9idWlsZC54bWwKQEAgLTM1LDcgKzM1LDcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4tY2xhc3Nlcy1kaXIiPgotICAgICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgCisgICAgICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlLWVqYiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtNTEsNyArNTEsNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZS1jbGllbnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY2xpZW50Ii8+CkBAIC02MywyOSArNjMsMjkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtd2ViIiBkZXBlbmRzPSJjb21waWxlLXdlYiI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1lYXIiPgogICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LmVhciIvPgogICAgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgotICAgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+ICAgCi0gICAgICAgICAgPGNvcHkgZmlsZT0iJHtzdW4tYXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIiAgCWZhaWxvbmVycm9yPSJmYWxzZSIvPiAKLSAgICAgICAgICA8Y29weSBmaWxlPSIke2FwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIiAgCWZhaWxvbmVycm9yPSJmYWxzZSIvPiAKKyAgICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgorICAgICAgICAgIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KKyAgICAgICAgICA8Y29weSBmaWxlPSIke2FwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIiAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICAgICAgICAgIDxjb3B5IGZpbGU9IiR7Z2xhc3NmaXNoLXJlc291cmNlcy1lYXIueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9nbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIiAgZmlsdGVyaW5nPSJ0cnVlIi8+Ci0gICAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiPiAKKyAgICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciI+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSI+CiAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IiouamFyIi8+CiAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Iioud2FyIi8+CiAgICAgICAgICAgICA8L2ZpbGVzZXQ+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ij4KLSAgICAgICAgCTxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLSAgICAgICAgCTxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIvPgorICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgorICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIi8+CiAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwiLz4KICAgICAgICAgICAgIDwvZmlsZXNldD4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuQVBTX0hPTUV9IiBpbmNsdWRlcz0ibGliL3JlcG9ydGVyLmphciIvPgotICAgICAgICAgIDwvamFyPiAgICAgICAgCisgICAgICAgICAgPC9qYXI+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJidWlsZC1lamIsIGJ1aWxkLXdlYiwgYnVpbGQtZWFyIi8+CkBAIC0xMDIsOSArMTAyLDkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuLndzY29tcGlsZSIgZGVwZW5kcz0ic2V0LXdzY29tcGlsZSI+Ci0gICAgCTxleGVjIGV4ZWN1dGFibGU9IiR7d3Njb21waWxlfSIgZmFpbG9uZXJyb3I9InRydWUiID4KLSAgICAgICAgICAgIDxhcmcgbGluZT0iLXNvdXJjZSAxLjEuMiAke3dzY29tcGlsZS5jb21tYW5kfSIgLz4gICAgICAgIAotICAgIAk8L2V4ZWM+CisgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7d3Njb21waWxlfSIgZmFpbG9uZXJyb3I9InRydWUiID4KKyAgICAgICAgICAgIDxhcmcgbGluZT0iLXNvdXJjZSAxLjEuMiAke3dzY29tcGlsZS5jb21tYW5kfSIgLz4KKyAgICAgICAgPC9leGVjPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1jbGllbnQiIGRlcGVuZHM9ImNsZWFuIj4KQEAgLTExMywyNSArMTEzLDI1IEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZ2VuZXJhdGVXU0NvbmZpZyIvPgogICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgogICAgICAgICA8Y29weSBmaWxlPSIke2FwcGxpY2F0aW9uLWNsaWVudC54bWx9IgotICAgICAgICAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiIAorICAgICAgICAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICAgICAgICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC1hcHBsaWNhdGlvbi1jbGllbnQueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9nbGFzc2Zpc2gtYXBwbGljYXRpb24tY2xpZW50LnhtbCIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgICAgICAgIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIgogICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi53c2NvbXBpbGUiPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIiB2YWx1ZT0iLWdlbiAtY3AgJHtidWlsZC5jbGFzc2VzLmRpcn0gLWtlZXAgLWQgJHtidWlsZC5jbGFzc2VzLmRpcn0gY29uZmlnLnhtbCIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIgdmFsdWU9Ii1nZW4gLWNwICR7YnVpbGQuY2xhc3Nlcy5kaXJ9IC1rZWVwIC1kICR7YnVpbGQuY2xhc3Nlcy5kaXJ9IGNvbmZpZy54bWwiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY2xpZW50Ii8+Ci0gICAgICAgIDxqYXIgamFyZmlsZT0iJHthcHBjbGllbnQuamFyfSIgYmFzZWRpcj0iJHthcHBjbGllbnRqYXIuZmlsZXN9IiAKLSAgICAgICAgICAgICB1cGRhdGU9InRydWUiIGluY2x1ZGVzID0iKiovKi5jbGFzcyIgCi0gICAgICAgICAgICAgbWFuaWZlc3Q9Ii4vY2xpZW50L01BTklGRVNULk1GIj4gICAgICAgICAKKyAgICAgICAgPGphciBqYXJmaWxlPSIke2FwcGNsaWVudC5qYXJ9IiBiYXNlZGlyPSIke2FwcGNsaWVudGphci5maWxlc30iCisgICAgICAgICAgICAgdXBkYXRlPSJ0cnVlIiBpbmNsdWRlcyA9IioqLyouY2xhc3MiCisgICAgICAgICAgICAgbWFuaWZlc3Q9Ii4vY2xpZW50L01BTklGRVNULk1GIj4KICAgICAgICAgICAgICA8bWV0YWluZiBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIj4KICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9ImdsYXNzZmlzaC1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogICAgICAgICAgICAgIDwvbWV0YWluZj4KLSAgICAgICAgPC9qYXI+ICAgCisgICAgICAgIDwvamFyPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC0xMzksNyArMTM5LDcgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iY3JlYXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC0xNTEsNyArMTUxLDcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZ2VuZXJhdGVXU0NvbmZpZyIgZGVwZW5kcz0iY29tcGlsZS1lamIiPgotICAgICAgICAgPGphdmEgZm9yaz0ib24iIAorICAgICAgICAgPGphdmEgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSJvcmcuZ2xhc3NmaXNoLnRlc3Quam1zLmluamVjdGlvbi5lamIuR2VuZXJhdGVXU0NvbmZpZyI+CkBAIC0xNjMsNyArMTYzLDcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgICA8amF2YSBmb3JrPSJvbiIgCisgICAgICAgICA8amF2YSBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSJXc1Rlc3QiPgpAQCAtMTczLDEwICsxNzMsMTAgQEAKICAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7Y29udGV4dHJvb3R9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3dzVHJhbnNhY3Rpb25TY29wZWQvY2xpZW50L1dzVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3dzVHJhbnNhY3Rpb25TY29wZWQvY2xpZW50L1dzVGVzdC5qYXZhCmluZGV4IDQ2YjEwYTQuLjY5N2M0NTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy93c1RyYW5zYWN0aW9uU2NvcGVkL2NsaWVudC9Xc1Rlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvd3NUcmFuc2FjdGlvblNjb3BlZC9jbGllbnQvV3NUZXN0LmphdmEKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciByZXNvdXJjZSBpbmplY3Rpb24gaW50byB3ZWJzZXJ2aWNlICIKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy93c1RyYW5zYWN0aW9uU2NvcGVkL2VqYi9HZW5lcmF0ZVdTQ29uZmlnLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvd3NUcmFuc2FjdGlvblNjb3BlZC9lamIvR2VuZXJhdGVXU0NvbmZpZy5qYXZhCmluZGV4IGRjMzJkMmUuLjhkOGYyZDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy93c1RyYW5zYWN0aW9uU2NvcGVkL2VqYi9HZW5lcmF0ZVdTQ29uZmlnLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3dzVHJhbnNhY3Rpb25TY29wZWQvZWpiL0dlbmVyYXRlV1NDb25maWcuamF2YQpAQCAtMjMsNyArMjMsNyBAQAogICAgICAgICBTdHJpbmcgZmlsZW5hbWUgPSBhcmdzWzBdOwogICAgICAgICBTdHJpbmcgaG9zdCA9IGFyZ3NbMV07CiAgICAgICAgIFN0cmluZyBwb3J0ID0gYXJnc1syXTsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nQnVmZmVyIGNvbmZpZyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgICAgICAgY29uZmlnLmFwcGVuZCgiPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThcIj8+IikuYXBwZW5kKCJcclxuIik7CiAgICAgICAgIGNvbmZpZy5hcHBlbmQoIjxjb25maWd1cmF0aW9uIHhtbG5zPVwiaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4LXJwYy9yaS9jb25maWdcIj4iKTsKQEAgLTMxLDExICszMSwxMSBAQAogICAgICAgICBjb25maWcuYXBwZW5kKCI8d3NkbCBsb2NhdGlvbj1cImh0dHA6Ly8iKS5hcHBlbmQoaG9zdCkuYXBwZW5kKCI6IikuYXBwZW5kKHBvcnQpOwogICAgICAgICBjb25maWcuYXBwZW5kKCIvam1zLWluamVjdGlvbi13cy13ZWIvTmV3V2ViU2VydmljZT93c2RsXCIgcGFja2FnZU5hbWU9XCJ0ZXN0XCIvPiIpOwogICAgICAgICBjb25maWcuYXBwZW5kKCJcclxuIikuYXBwZW5kKCI8L2NvbmZpZ3VyYXRpb24+Iik7Ci0gICAgCisKICAgICAgICAgRmlsZSBmaWxlID0gbmV3IEZpbGUoZmlsZW5hbWUpOwogICAgICAgICBpZiAoZmlsZS5leGlzdHMoKSkKICAgICAgICAgICAgIGZpbGUuZGVsZXRlKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICBieXRlW10gb3V0cHV0ID0gY29uZmlnLnRvU3RyaW5nKCkuZ2V0Qnl0ZXMoKTsKICAgICAgICAgRmlsZU91dHB1dFN0cmVhbSBmb3MgPSBuZXcgRmlsZU91dHB1dFN0cmVhbShmaWxlbmFtZSk7CiAgICAgICAgIGZvcy53cml0ZShvdXRwdXQsIDAsIG91dHB1dC5sZW5ndGgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3dzVHJhbnNhY3Rpb25TY29wZWQvZWpiL01lc3NhZ2VSZWNlaXZlclJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2Jhc2ljL3dzVHJhbnNhY3Rpb25TY29wZWQvZWpiL01lc3NhZ2VSZWNlaXZlclJlbW90ZS5qYXZhCmluZGV4IDIyMzAyMTMuLjY1NTFhYjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9iYXNpYy93c1RyYW5zYWN0aW9uU2NvcGVkL2VqYi9NZXNzYWdlUmVjZWl2ZXJSZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYmFzaWMvd3NUcmFuc2FjdGlvblNjb3BlZC9lamIvTWVzc2FnZVJlY2VpdmVyUmVtb3RlLmphdmEKQEAgLTI1LDYgKzI1LDYgQEAKIEBSZW1vdGUKIHB1YmxpYyBpbnRlcmZhY2UgTWVzc2FnZVJlY2VpdmVyUmVtb3RlIHsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSZW1vdGVKTkRJTmFtZSA9ICBNZXNzYWdlUmVjZWl2ZXJCZWFuLmNsYXNzLmdldFNpbXBsZU5hbWUoKSArICIvcmVtb3RlIjsKLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGNoZWNrTWVzc2FnZShTdHJpbmcgdGV4dCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L2J1aWxkLnhtbAppbmRleCBjMjQzYTA3Li5hYTg3YjZmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9idWlsZC54bWwKQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgICAgPGFudCBkaXI9ImJhc2ljIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8cmVjb3JkIG5hbWU9ImJhc2ljLm91dHB1dCIgYWN0aW9uPSJzdG9wIiAvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJtaXhlZFNjb3BlZCI+CiAgICAgICAgIDxyZWNvcmQgbmFtZT0ibWl4ZWRTY29wZWQub3V0cHV0IiBhY3Rpb249InN0YXJ0IiAvPgogICAgICAgICA8YW50IGRpcj0ibWl4ZWRTY29wZWQiIHRhcmdldD0iYWxsIi8+CkBAIC00NiwxMSArNDYsMTEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPgotCQlVc2FnZToKLQkJCWFudCBhbGwgICAgCQkoRXhlY3V0ZXMgYWxsIHRoZSBqbXNDb250ZXh0IGluamVjdGlvbiB0ZXN0cykKLQkJCWFudCBiYXNpYyAgCQkoRXhlY3V0ZXMgYWxsIHRoZSBiYXNpYyBqbXNDb250ZXh0IGluamVjdGlvbiB0ZXN0cykKLQkJCWFudCBtaXhlZFNjb3BlZCAgCShFeGVjdXRlcyBhbGwgdGhlIG1peGVkIGptc0NvbnRleHQgaW5qZWN0aW9uIHRlc3RzKQotCTwvZWNobz4KKyAgICA8ZWNobz4KKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICBhbnQgYWxsICAgICAgICAgICAgKEV4ZWN1dGVzIGFsbCB0aGUgam1zQ29udGV4dCBpbmplY3Rpb24gdGVzdHMpCisgICAgICAgICAgICBhbnQgYmFzaWMgICAgICAgICAgKEV4ZWN1dGVzIGFsbCB0aGUgYmFzaWMgam1zQ29udGV4dCBpbmplY3Rpb24gdGVzdHMpCisgICAgICAgICAgICBhbnQgbWl4ZWRTY29wZWQgICAgICAoRXhlY3V0ZXMgYWxsIHRoZSBtaXhlZCBqbXNDb250ZXh0IGluamVjdGlvbiB0ZXN0cykKKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2J1aWxkLnhtbAppbmRleCA1MmFlZjkzLi41ZmI3NTBjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9idWlsZC54bWwKQEAgLTI5LDcgKzI5LDcgQEAKICAgICAmcmVwb3J0aW5nOwogCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiPgotICAgIAkgPGFudGNhbGwgdGFyZ2V0PSJqbXNDb250ZXh0RGVmYXVsdEluamVjdGlvbiIvPgorICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJqbXNDb250ZXh0RGVmYXVsdEluamVjdGlvbiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9Imptc0NvbnRleHRJbmplY3Rpb25BIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iam1zQ29udGV4dEluamVjdGlvbkIiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJqbXNDb250ZXh0SW5qZWN0aW9uQyIvPgpAQCAtNTksNDkgKzU5LDQ5IEBACiAgICAgICAgIDxhbnQgZGlyPSJqbXNDb250ZXh0SW5qZWN0aW9uQiIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPHJlY29yZCBuYW1lPSJqbXNDb250ZXh0SW5qZWN0aW9uQi5vdXRwdXQiIGFjdGlvbj0ic3RvcCIgLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iam1zQ29udGV4dEluamVjdGlvbkMiPgogICAgICAgICA8cmVjb3JkIG5hbWU9Imptc0NvbnRleHRJbmplY3Rpb25DLm91dHB1dCIgYWN0aW9uPSJzdGFydCIgLz4KICAgICAgICAgPGFudCBkaXI9Imptc0NvbnRleHRJbmplY3Rpb25DIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8cmVjb3JkIG5hbWU9Imptc0NvbnRleHRJbmplY3Rpb25DLm91dHB1dCIgYWN0aW9uPSJzdG9wIiAvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJqbXNDb250ZXh0SW5qZWN0aW9uRCI+CiAgICAgICAgIDxyZWNvcmQgbmFtZT0iam1zQ29udGV4dEluamVjdGlvbkQub3V0cHV0IiBhY3Rpb249InN0YXJ0IiAvPgogICAgICAgICA8YW50IGRpcj0iam1zQ29udGV4dEluamVjdGlvbkQiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxyZWNvcmQgbmFtZT0iam1zQ29udGV4dEluamVjdGlvbkQub3V0cHV0IiBhY3Rpb249InN0b3AiIC8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9Imptc0NvbnRleHRJbmplY3Rpb25FIj4KICAgICAgICAgPHJlY29yZCBuYW1lPSJqbXNDb250ZXh0SW5qZWN0aW9uRS5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiIC8+CiAgICAgICAgIDxhbnQgZGlyPSJqbXNDb250ZXh0SW5qZWN0aW9uRSIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPHJlY29yZCBuYW1lPSJqbXNDb250ZXh0SW5qZWN0aW9uRS5vdXRwdXQiIGFjdGlvbj0ic3RvcCIgLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iam1zQ29udGV4dEluamVjdGlvbkYiPgogICAgICAgICA8cmVjb3JkIG5hbWU9Imptc0NvbnRleHRJbmplY3Rpb25GLm91dHB1dCIgYWN0aW9uPSJzdGFydCIgLz4KICAgICAgICAgPGFudCBkaXI9Imptc0NvbnRleHRJbmplY3Rpb25GIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8cmVjb3JkIG5hbWU9Imptc0NvbnRleHRJbmplY3Rpb25GLm91dHB1dCIgYWN0aW9uPSJzdG9wIiAvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJqbXNDb250ZXh0SW5qZWN0aW9uRyI+CiAgICAgICAgIDxyZWNvcmQgbmFtZT0iam1zQ29udGV4dEluamVjdGlvbkcub3V0cHV0IiBhY3Rpb249InN0YXJ0IiAvPgogICAgICAgICA8YW50IGRpcj0iam1zQ29udGV4dEluamVjdGlvbkciIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxyZWNvcmQgbmFtZT0iam1zQ29udGV4dEluamVjdGlvbkcub3V0cHV0IiBhY3Rpb249InN0b3AiIC8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9Imptc0NvbnRleHRJbmplY3Rpb25IIj4KICAgICAgICAgPHJlY29yZCBuYW1lPSJqbXNDb250ZXh0SW5qZWN0aW9uSC5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiIC8+CiAgICAgICAgIDxhbnQgZGlyPSJqbXNDb250ZXh0SW5qZWN0aW9uSCIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPHJlY29yZCBuYW1lPSJqbXNDb250ZXh0SW5qZWN0aW9uSC5vdXRwdXQiIGFjdGlvbj0ic3RvcCIgLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iam1zQ29udGV4dEluamVjdGlvbkoiPgogICAgICAgICA8cmVjb3JkIG5hbWU9Imptc0NvbnRleHRJbmplY3Rpb25KLm91dHB1dCIgYWN0aW9uPSJzdGFydCIgLz4KICAgICAgICAgPGFudCBkaXI9Imptc0NvbnRleHRJbmplY3Rpb25KIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8cmVjb3JkIG5hbWU9Imptc0NvbnRleHRJbmplY3Rpb25KLm91dHB1dCIgYWN0aW9uPSJzdG9wIiAvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJqbXNDb250ZXh0SW5qZWN0aW9uSyI+CiAgICAgICAgIDxyZWNvcmQgbmFtZT0iam1zQ29udGV4dEluamVjdGlvbksub3V0cHV0IiBhY3Rpb249InN0YXJ0IiAvPgogICAgICAgICA8YW50IGRpcj0iam1zQ29udGV4dEluamVjdGlvbksiIHRhcmdldD0iYWxsIi8+CkBAIC0xMDksOSArMTA5LDkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPgotCQlVc2FnZToKLQkJCWFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgam1zIHRlc3RzKQotCTwvZWNobz4KKyAgICA8ZWNobz4KKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGptcyB0ZXN0cykKKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dERlZmF1bHRJbmplY3Rpb24vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0RGVmYXVsdEluamVjdGlvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDk0YzU1NjkuLjcwZTc2NzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0RGVmYXVsdEluamVjdGlvbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0RGVmYXVsdEluamVjdGlvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9Imptcy1pbmplY3Rpb24tc3RhdGVsZXNzLWVqYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHREZWZhdWx0SW5qZWN0aW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0RGVmYXVsdEluamVjdGlvbi9idWlsZC54bWwKaW5kZXggYjBiMzZkNi4uNmI1ZGIxNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHREZWZhdWx0SW5qZWN0aW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dERlZmF1bHRJbmplY3Rpb24vYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NiwxNCArNDYsMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL1Nlc3Npb25CZWFuSW5qZWN0aW9uKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50LmNsYXNzLCoqL1Nlc3Npb25CZWFuSW5qZWN0aW9uKi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImNyZWF0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtNzEsMjEgKzcxLDIxIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICA8amF2YSBmb3JrPSJvbiIgCisgICAgICAgIDxqYXZhIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50Lmphcjoke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSJvcmcuZ2xhc3NmaXNoLnRlc3Quam1zLmluamVjdGlvbi5jbGllbnQuQ2xpZW50Ij4KICAgICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke29yYi5wb3J0fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dERlZmF1bHRJbmplY3Rpb24vY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHREZWZhdWx0SW5qZWN0aW9uL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA2MDRiYjk1Li5jMWFkNzM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dERlZmF1bHRJbmplY3Rpb24vY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0RGVmYXVsdEluamVjdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTQ3LDExICs0NywxMSBAQAogICAgICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICAgICAgU1RBVC5hZGRTdGF0dXMoZWpiTmFtZSwgU1RBVC5GQUlMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBTVEFULmFkZFN0YXR1cyhlamJOYW1lLCBTVEFULkZBSUwpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dERlZmF1bHRJbmplY3Rpb24vZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uMS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHREZWZhdWx0SW5qZWN0aW9uL2VqYi9TZXNzaW9uQmVhbkluamVjdGlvbjEuamF2YQppbmRleCAyYjQzMGEzLi5mYTJiYmFlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dERlZmF1bHRJbmplY3Rpb24vZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uMS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0RGVmYXVsdEluamVjdGlvbi9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb24xLmphdmEKQEAgLTM0LDEyICszNCwxMiBAQAogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBzY29wZSA9ICJhcm91bmQiOwogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBwcmVJZGVudGljYWwgPSAiZmluZ2VyUHJpbnQiOwogCi0gICAgQEVKQiAKKyAgICBARUpCCiAgICAgU2Vzc2lvbkJlYW5JbmplY3Rpb25SZW1vdGUyIGJlYW4yOwogCiAgICAgQFJlc291cmNlKG1hcHBlZE5hbWUgPSAiam1zL2ptc191bml0X3Rlc3RfUXVldWUiKQogICAgIHByaXZhdGUgUXVldWUgcXVldWU7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgcHJpdmF0ZSBKTVNDb250ZXh0IGptc0NvbnRleHQ7CiAKQEAgLTYzLDIwICs2MywyMCBAQAogCiAgICAgICAgIHJldHVybiBjaGVja1Jlc3VsdChjb250ZXh0MSwgY29udGV4dDIpOwogICAgIH0KLSAgICAKKwogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgQm9vbGVhbiBjaGVja1Jlc3VsdChTdHJpbmcgY29udGV4dDEsIFN0cmluZyBjb250ZXh0Mil7CiAKICAgICAgICAgaWYgKGNvbnRleHQxLmluZGV4T2YocHJlSWRlbnRpY2FsKSA9PSAtMSB8fCBjb250ZXh0MS5pbmRleE9mKHNjb3BlKSA9PSAtMSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICAKKworCiAgICAgICAgIGlmIChjb250ZXh0Mi5pbmRleE9mKHByZUlkZW50aWNhbCkgPT0gLTEgfHwgY29udGV4dDIuaW5kZXhPZihzY29wZSkgPT0gLTEpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyBjb250ZXh0MUFubm90YXRpb24gPSBjb250ZXh0MS5zdWJzdHJpbmcoY29udGV4dDEuaW5kZXhPZihwcmVJZGVudGljYWwpLGNvbnRleHQxLmluZGV4T2Yoc2NvcGUpKTsKICAgICAgICAgU3RyaW5nIGNvbnRleHQyQW5ub3RhdGlvbiA9IGNvbnRleHQyLnN1YnN0cmluZyhjb250ZXh0Mi5pbmRleE9mKHByZUlkZW50aWNhbCksY29udGV4dDIuaW5kZXhPZihzY29wZSkpOwotICAgICAgICAKKwogICAgICAgICBpZihjb250ZXh0MUFubm90YXRpb24uZXF1YWxzKGNvbnRleHQyQW5ub3RhdGlvbikpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW5qZWN0ZWQgdXNpbmcgaWRlbnRpY2FsIGFubm90YXRpb25zLiIpOwogICAgICAgICB9ZWxzZXsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0RGVmYXVsdEluamVjdGlvbi9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb25SZW1vdGUxLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dERlZmF1bHRJbmplY3Rpb24vZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uUmVtb3RlMS5qYXZhCmluZGV4IDFjYjRhNGMuLjljZmNhZTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0RGVmYXVsdEluamVjdGlvbi9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb25SZW1vdGUxLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHREZWZhdWx0SW5qZWN0aW9uL2VqYi9TZXNzaW9uQmVhbkluamVjdGlvblJlbW90ZTEuamF2YQpAQCAtMjcsNSArMjcsNSBAQAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJlbW90ZUpORElOYW1lID0gIFNlc3Npb25CZWFuSW5qZWN0aW9uMS5jbGFzcy5nZXRTaW1wbGVOYW1lKCkgKyAiL3JlbW90ZTEiOwogCiAgICAgcHVibGljIEJvb2xlYW4gc2VuZE1lc3NhZ2UoU3RyaW5nIHRleHQpOwotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkEvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uQS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDk0YzU1NjkuLjcwZTc2NzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uQS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uQS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9Imptcy1pbmplY3Rpb24tc3RhdGVsZXNzLWVqYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25BL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uQS9idWlsZC54bWwKaW5kZXggMjE5NmNlMS4uMWU2MTIxOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25BL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkEvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NiwxNCArNDYsMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL1Nlc3Npb25CZWFuSW5qZWN0aW9uKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50LmNsYXNzLCoqL1Nlc3Npb25CZWFuSW5qZWN0aW9uKi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImNyZWF0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtNzEsMjEgKzcxLDIxIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICA8amF2YSBmb3JrPSJvbiIgCisgICAgICAgIDxqYXZhIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50Lmphcjoke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSJvcmcuZ2xhc3NmaXNoLnRlc3Quam1zLmluamVjdGlvbi5jbGllbnQuQ2xpZW50Ij4KICAgICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke29yYi5wb3J0fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkEvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25BL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBmZWQ1ODFhLi4yY2JjOWRjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkEvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uQS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgICAgIFN0cmluZyBjb250ZXh0MiA9IGJlYW5SZW1vdGUuc2VuZE1lc3NhZ2UyKHRleHQpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjb250ZXh0MToiK2NvbnRleHQxKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY29udGV4dDE6Iitjb250ZXh0Mik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKGNvbnRleHQxLmluZGV4T2YodHJhbnNhY3Rpb25TY29wZSkgIT0gLTEpewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlIGNvbnRleHQgdmFyaWFibGVzIHVzZWQgaW4gdGhlIGZpcnN0IGNhbGwgYXJlIGluIHRyYW5zYWN0aW9uIHNjb3BlLiIpOwogICAgICAgICAgICAgfWVsc2V7CkBAIC01NCw3ICs1NCw3IEBACiAgICAgICAgICAgICAgICAgU1RBVC5hZGRTdGF0dXMoZWpiTmFtZSwgU1RBVC5GQUlMKTsKICAgICAgICAgICAgICAgICByZXR1cm4gOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmIChjb250ZXh0Mi5pbmRleE9mKHRyYW5zYWN0aW9uU2NvcGUpICE9IC0xKXsKICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgc2Vjb25kIGNhbGwgYXJlIGluIHRyYW5zYWN0aW9uIHNjb3BlLiIpOwogICAgICAgICAgICAgfWVsc2V7CkBAIC02MiwxMCArNjIsMTAgQEAKICAgICAgICAgICAgICAgICBTVEFULmFkZFN0YXR1cyhlamJOYW1lLCBTVEFULkZBSUwpOwogICAgICAgICAgICAgICAgIHJldHVybiA7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU3RyaW5nIGNvbnRleHQxQW5ub3RhdGlvbiA9IGNvbnRleHQxLnN1YnN0cmluZyhjb250ZXh0MS5pbmRleE9mKHByZUlkZW50aWNhbCksY29udGV4dDEuaW5kZXhPZih0cmFuc2FjdGlvblNjb3BlKSk7CiAgICAgICAgICAgICBTdHJpbmcgY29udGV4dDJBbm5vdGF0aW9uID0gY29udGV4dDIuc3Vic3RyaW5nKGNvbnRleHQyLmluZGV4T2YocHJlSWRlbnRpY2FsKSxjb250ZXh0Mi5pbmRleE9mKHRyYW5zYWN0aW9uU2NvcGUpKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZihjb250ZXh0MUFubm90YXRpb24uZXF1YWxzKGNvbnRleHQyQW5ub3RhdGlvbikpewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlIGNvbnRleHQgdmFyaWFibGVzIGluIHRoZSBmaXJzdCBhbmQgc2Vjb25kIGNhbGxzIHRvIGNvbnRleHQuc2VuZCgpIGluamVjdGVkIGFyZSB1c2luZyBpZGVudGljYWwgYW5ub3RhdGlvbnMuIik7CiAgICAgICAgICAgICB9ZWxzZXsKQEAgLTczLDcgKzczLDcgQEAKICAgICAgICAgICAgICAgICBTVEFULmFkZFN0YXR1cyhlamJOYW1lLCBTVEFULkZBSUwpOwogICAgICAgICAgICAgICAgIHJldHVybiA7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKGNvbnRleHQxLnN1YnN0cmluZyhjb250ZXh0MS5pbmRleE9mKHRyYW5zYWN0aW9uU2NvcGUpKS5lcXVhbHMoY29udGV4dDIuc3Vic3RyaW5nKGNvbnRleHQyLmluZGV4T2YodHJhbnNhY3Rpb25TY29wZSkpKSkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlIGNvbnRleHQgdmFyaWFibGVzIHVzZWQgaW4gdGhlIGZpcnN0IGFuZCBzZWNvbmQgY2FsbHMgdG8gY29udGV4dC5zZW5kKCkgdGFrZSBwbGFjZSBpbiB0aGUgc2FtZSB0cmFuc2FjdGlvbi4iKTsKICAgICAgICAgICAgICAgICBTVEFULmFkZFN0YXR1cyhlamJOYW1lLCBTVEFULkZBSUwpOwpAQCAtODIsMTIgKzgyLDEyIEBACiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgZmlyc3QgYW5kIHNlY29uZCBjYWxscyB0byBjb250ZXh0LnNlbmQoKSB0YWtlIHBsYWNlIGluIHRoZSBkaWZmZXJlbnQgdHJhbnNhY3Rpb24uIik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBTVEFULmFkZFN0YXR1cyhlamJOYW1lLCBTVEFULlBBU1MpOwotICAgICAgICAgICAgCisKIAogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgU1RBVC5hZGRTdGF0dXMoZWpiTmFtZSwgU1RBVC5GQUlMKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25BL2VqYi9TZXNzaW9uQmVhbkluamVjdGlvblJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25BL2VqYi9TZXNzaW9uQmVhbkluamVjdGlvblJlbW90ZS5qYXZhCmluZGV4IDI4NWRlNGMuLmI5Y2Q3MGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uQS9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb25SZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkEvZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uUmVtb3RlLmphdmEKQEAgLTI3LDYgKzI3LDYgQEAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSZW1vdGVKTkRJTmFtZSA9ICBTZXNzaW9uQmVhbkluamVjdGlvbi5jbGFzcy5nZXRTaW1wbGVOYW1lKCkgKyAiL3JlbW90ZSI7CiAKICAgICBwdWJsaWMgU3RyaW5nIHNlbmRNZXNzYWdlMShTdHJpbmcgdGV4dCk7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIHNlbmRNZXNzYWdlMihTdHJpbmcgdGV4dCk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uQi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDk0YzU1NjkuLjcwZTc2NzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uQi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uQi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9Imptcy1pbmplY3Rpb24tc3RhdGVsZXNzLWVqYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25CL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uQi9idWlsZC54bWwKaW5kZXggMjE5NmNlMS4uMWU2MTIxOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25CL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkIvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NiwxNCArNDYsMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL1Nlc3Npb25CZWFuSW5qZWN0aW9uKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50LmNsYXNzLCoqL1Nlc3Npb25CZWFuSW5qZWN0aW9uKi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImNyZWF0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtNzEsMjEgKzcxLDIxIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICA8amF2YSBmb3JrPSJvbiIgCisgICAgICAgIDxqYXZhIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50Lmphcjoke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSJvcmcuZ2xhc3NmaXNoLnRlc3Quam1zLmluamVjdGlvbi5jbGllbnQuQ2xpZW50Ij4KICAgICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke29yYi5wb3J0fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkIvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25CL2NsaWVudC9DbGllbnQuamF2YQppbmRleCAzYTU3YmRiLi5iNzc0MzA1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkIvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uQi9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTQ5LDExICs0OSwxMSBAQAogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIFNUQVQuYWRkU3RhdHVzKGVqYk5hbWUsIFNUQVQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgU1RBVC5hZGRTdGF0dXMoZWpiTmFtZSwgU1RBVC5GQUlMKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25CL2VqYi9TZXNzaW9uQmVhbkluamVjdGlvbjEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uQi9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb24xLmphdmEKaW5kZXggMWNkMTEyNS4uNWU3ZGZkZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25CL2VqYi9TZXNzaW9uQmVhbkluamVjdGlvbjEuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkIvZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uMS5qYXZhCkBAIC0zMyw3ICszMyw3IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRyYW5zYWN0aW9uU2NvcGUgPSAiYXJvdW5kIFRyYW5zYWN0aW9uU2NvcGVkIjsKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgcHJlSWRlbnRpY2FsID0gImZpbmdlclByaW50IjsKIAotICAgIEBFSkIgCisgICAgQEVKQgogICAgIFNlc3Npb25CZWFuSW5qZWN0aW9uUmVtb3RlMiBiZWFuMjsKIAogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuUkVRVUlSRUQpCkBAIC01MCwzMSArNTAsMzEgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlIGNvbnRleHQgdmFyaWFibGVzIHVzZWQgaW4gdGhlIGZpcnN0IGNhbGwgYXJlIE5PVCBpbiB0cmFuc2FjdGlvbiBzY29wZS4iKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAoY29udGV4dDIuaW5kZXhPZih0cmFuc2FjdGlvblNjb3BlKSAhPSAtMSl7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSBjb250ZXh0IHZhcmlhYmxlcyB1c2VkIGluIHRoZSBzZWNvbmQgY2FsbCBhcmUgaW4gdHJhbnNhY3Rpb24gc2NvcGUuIik7CiAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgc2Vjb25kIGNhbGwgYXJlIE5PVCBpbiB0cmFuc2FjdGlvbiBzY29wZS4iKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgY29udGV4dDFBbm5vdGF0aW9uID0gY29udGV4dDEuc3Vic3RyaW5nKGNvbnRleHQxLmluZGV4T2YocHJlSWRlbnRpY2FsKSxjb250ZXh0MS5pbmRleE9mKHRyYW5zYWN0aW9uU2NvcGUpKTsKICAgICAgICAgU3RyaW5nIGNvbnRleHQyQW5ub3RhdGlvbiA9IGNvbnRleHQyLnN1YnN0cmluZyhjb250ZXh0Mi5pbmRleE9mKHByZUlkZW50aWNhbCksY29udGV4dDIuaW5kZXhPZih0cmFuc2FjdGlvblNjb3BlKSk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKGNvbnRleHQxQW5ub3RhdGlvbi5lcXVhbHMoY29udGV4dDJBbm5vdGF0aW9uKSkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgaW4gdGhlIGZpcnN0IGFuZCBzZWNvbmQgY2FsbHMgdG8gY29udGV4dC5zZW5kKCkgaW5qZWN0ZWQgYXJlIHVzaW5nIGlkZW50aWNhbCBhbm5vdGF0aW9ucy4iKTsKICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSBjb250ZXh0IHZhcmlhYmxlcyBpbiB0aGUgZmlyc3QgYW5kIHNlY29uZCBjYWxscyB0byBjb250ZXh0LnNlbmQoKSBpbmplY3RlZCBhcmUgbm90IHVzaW5nIGlkZW50aWNhbCBhbm5vdGF0aW9ucy4iKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAoY29udGV4dDEuc3Vic3RyaW5nKGNvbnRleHQxLmluZGV4T2YodHJhbnNhY3Rpb25TY29wZSkpLmVxdWFscyhjb250ZXh0Mi5zdWJzdHJpbmcoY29udGV4dDIuaW5kZXhPZih0cmFuc2FjdGlvblNjb3BlKSkpKXsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlIGNvbnRleHQgdmFyaWFibGVzIHVzZWQgaW4gdGhlIGZpcnN0IGFuZCBzZWNvbmQgY2FsbHMgdG8gY29udGV4dC5zZW5kKCkgdGFrZSBwbGFjZSBpbiB0aGUgc2FtZSB0cmFuc2FjdGlvbi4iKTsKICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSBjb250ZXh0IHZhcmlhYmxlcyB1c2VkIGluIHRoZSBmaXJzdCBhbmQgc2Vjb25kIGNhbGxzIHRvIGNvbnRleHQuc2VuZCgpIHRha2UgcGxhY2UgaW4gdGhlIGRpZmZlcmVudCB0cmFuc2FjdGlvbi4iKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgIAkJCisKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkIvZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uUmVtb3RlMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25CL2VqYi9TZXNzaW9uQmVhbkluamVjdGlvblJlbW90ZTIuamF2YQppbmRleCAwMmRjMTM0Li4wOWE5ZjhkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkIvZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uUmVtb3RlMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uQi9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb25SZW1vdGUyLmphdmEKQEAgLTI3LDYgKzI3LDYgQEAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSZW1vdGVKTkRJTmFtZSA9ICBTZXNzaW9uQmVhbkluamVjdGlvbjIuY2xhc3MuZ2V0U2ltcGxlTmFtZSgpICsgIi9yZW1vdGUyIjsKIAogICAgIHB1YmxpYyBTdHJpbmcgc2VuZE1lc3NhZ2UxKFN0cmluZyB0ZXh0KTsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgc2VuZE1lc3NhZ2UyKFN0cmluZyB0ZXh0KTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uQy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25DL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOTRjNTU2OS4uNzBlNzY3MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25DL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25DL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iam1zLWluamVjdGlvbi1zdGF0ZWxlc3MtZWpiIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25DL2J1aWxkLnhtbAppbmRleCAyMTk2Y2UxLi4xZTYxMjE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uQy9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDE0ICs0NiwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovU2Vzc2lvbkJlYW5JbmplY3Rpb24qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQuY2xhc3MsKiovU2Vzc2lvbkJlYW5JbmplY3Rpb24qLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYzLDcgKzYzLDcgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iY3JlYXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC03MSwyMSArNzEsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxqYXZhIGZvcms9Im9uIiAKKyAgICAgICAgPGphdmEgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9Im9yZy5nbGFzc2Zpc2gudGVzdC5qbXMuaW5qZWN0aW9uLmNsaWVudC5DbGllbnQiPgogICAgICAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0ib3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydCIgdmFsdWU9IiR7b3JiLnBvcnR9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uQy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkMvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDFiZTRiM2MuLmJhYjMyMWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uQy9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25DL2NsaWVudC9DbGllbnQuamF2YQpAQCAtNDcsMTEgKzQ3LDExIEBACiAgICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgICBTVEFULmFkZFN0YXR1cyhlamJOYW1lLCBTVEFULkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIFNUQVQuYWRkU3RhdHVzKGVqYk5hbWUsIFNUQVQuRkFJTCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uQy9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb24xLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkMvZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uMS5qYXZhCmluZGV4IDgxMGU5OGQuLjczNjBlYTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uQy9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb24xLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25DL2VqYi9TZXNzaW9uQmVhbkluamVjdGlvbjEuamF2YQpAQCAtMzQsNyArMzQsNyBAQAogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyB0cmFuc2FjdGlvblNjb3BlID0gImFyb3VuZCBUcmFuc2FjdGlvblNjb3BlZCI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHByZUlkZW50aWNhbCA9ICJmaW5nZXJQcmludCI7CiAKLSAgICBARUpCIAorICAgIEBFSkIKICAgICBTZXNzaW9uQmVhbkluamVjdGlvblJlbW90ZTIgYmVhbjI7CiAKICAgICBAUmVzb3VyY2UobWFwcGVkTmFtZSA9ICJqbXMvam1zX3VuaXRfdGVzdF9RdWV1ZSIpCkBAIC02NiwyNCArNjYsMjQgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlIGNvbnRleHQgdmFyaWFibGVzIHVzZWQgaW4gdGhlIGZpcnN0IGNhbGwgYXJlIE5PVCBpbiB0cmFuc2FjdGlvbiBzY29wZS4iKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgaWYgKGNvbnRleHQyLmluZGV4T2YodHJhbnNhY3Rpb25TY29wZSkgIT0gLTEpewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgc2Vjb25kIGNhbGwgYXJlIGluIHRyYW5zYWN0aW9uIHNjb3BlLiIpOwogICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlIGNvbnRleHQgdmFyaWFibGVzIHVzZWQgaW4gdGhlIHNlY29uZCBjYWxsIGFyZSBOT1QgaW4gdHJhbnNhY3Rpb24gc2NvcGUuIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIGNvbnRleHQxQW5ub3RhdGlvbiA9IGNvbnRleHQxLnN1YnN0cmluZyhjb250ZXh0MS5pbmRleE9mKHByZUlkZW50aWNhbCksY29udGV4dDEuaW5kZXhPZih0cmFuc2FjdGlvblNjb3BlKSk7CiAgICAgICAgIFN0cmluZyBjb250ZXh0MkFubm90YXRpb24gPSBjb250ZXh0Mi5zdWJzdHJpbmcoY29udGV4dDIuaW5kZXhPZihwcmVJZGVudGljYWwpLGNvbnRleHQyLmluZGV4T2YodHJhbnNhY3Rpb25TY29wZSkpOwotICAgICAgICAKKwogICAgICAgICBpZihjb250ZXh0MUFubm90YXRpb24uZXF1YWxzKGNvbnRleHQyQW5ub3RhdGlvbikpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlIGNvbnRleHQgdmFyaWFibGVzIGluIHRoZSBmaXJzdCBhbmQgc2Vjb25kIGNhbGxzIHRvIGNvbnRleHQuc2VuZCgpIGluamVjdGVkIGFyZSB1c2luZyBpZGVudGljYWwgYW5ub3RhdGlvbnMuIik7CiAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgaW4gdGhlIGZpcnN0IGFuZCBzZWNvbmQgY2FsbHMgdG8gY29udGV4dC5zZW5kKCkgaW5qZWN0ZWQgYXJlIG5vdCB1c2luZyBpZGVudGljYWwgYW5ub3RhdGlvbnMuIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAJCisKICAgICAgICAgaWYgKGNvbnRleHQxLnN1YnN0cmluZyhjb250ZXh0MS5pbmRleE9mKHRyYW5zYWN0aW9uU2NvcGUpKS5lcXVhbHMoY29udGV4dDIuc3Vic3RyaW5nKGNvbnRleHQyLmluZGV4T2YodHJhbnNhY3Rpb25TY29wZSkpKSkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgZmlyc3QgYW5kIHNlY29uZCBjYWxscyB0byBjb250ZXh0LnNlbmQoKSB0YWtlIHBsYWNlIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uLiIpOwogICAgICAgICB9ZWxzZXsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uRC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25EL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOTRjNTU2OS4uNzBlNzY3MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25EL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25EL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iam1zLWluamVjdGlvbi1zdGF0ZWxlc3MtZWpiIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25EL2J1aWxkLnhtbAppbmRleCAyMTk2Y2UxLi4xZTYxMjE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uRC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDE0ICs0NiwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovU2Vzc2lvbkJlYW5JbmplY3Rpb24qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQuY2xhc3MsKiovU2Vzc2lvbkJlYW5JbmplY3Rpb24qLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYzLDcgKzYzLDcgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iY3JlYXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC03MSwyMSArNzEsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxqYXZhIGZvcms9Im9uIiAKKyAgICAgICAgPGphdmEgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9Im9yZy5nbGFzc2Zpc2gudGVzdC5qbXMuaW5qZWN0aW9uLmNsaWVudC5DbGllbnQiPgogICAgICAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0ib3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydCIgdmFsdWU9IiR7b3JiLnBvcnR9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uRC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkQvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDA3OWI4OWIuLjQxYzZlMzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uRC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25EL2NsaWVudC9DbGllbnQuamF2YQpAQCAtNDgsMTEgKzQ4LDExIEBACiAgICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgICBTVEFULmFkZFN0YXR1cyhlamJOYW1lLCBTVEFULkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIFNUQVQuYWRkU3RhdHVzKGVqYk5hbWUsIFNUQVQuRkFJTCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uRC9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uRC9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb24uamF2YQppbmRleCBlY2ZmNzY3Li40NTdmNzE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkQvZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25EL2VqYi9TZXNzaW9uQmVhbkluamVjdGlvbi5qYXZhCkBAIC0zNSw3ICszNSw3IEBACiAgICAgQEpNU0Nvbm5lY3Rpb25GYWN0b3J5KCJqbXMvam1zX3VuaXRfdGVzdF9RQ0YiKQogICAgIEBKTVNTZXNzaW9uTW9kZShKTVNDb250ZXh0LkFVVE9fQUNLTk9XTEVER0UpCiAgICAgcHJpdmF0ZSBKTVNDb250ZXh0IGptc0NvbnRleHQ7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdHJhbnNhY3Rpb25TY29wZSA9ICJhcm91bmQgVHJhbnNhY3Rpb25TY29wZWQiOwogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBwcmVJZGVudGljYWwgPSAiZmluZ2VyUHJpbnQiOwogCkBAIC02NiwyNCArNjYsMjQgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlIGNvbnRleHQgdmFyaWFibGVzIHVzZWQgaW4gdGhlIGZpcnN0IGNhbGwgYXJlIE5PVCBpbiB0cmFuc2FjdGlvbiBzY29wZS4iKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgaWYgKGNvbnRleHQyLmluZGV4T2YodHJhbnNhY3Rpb25TY29wZSkgIT0gLTEpewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgc2Vjb25kIGNhbGwgYXJlIGluIHRyYW5zYWN0aW9uIHNjb3BlLiIpOwogICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlIGNvbnRleHQgdmFyaWFibGVzIHVzZWQgaW4gdGhlIHNlY29uZCBjYWxsIGFyZSBOT1QgaW4gdHJhbnNhY3Rpb24gc2NvcGUuIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIGNvbnRleHQxQW5ub3RhdGlvbiA9IGNvbnRleHQxLnN1YnN0cmluZyhjb250ZXh0MS5pbmRleE9mKHByZUlkZW50aWNhbCksY29udGV4dDEuaW5kZXhPZih0cmFuc2FjdGlvblNjb3BlKSk7CiAgICAgICAgIFN0cmluZyBjb250ZXh0MkFubm90YXRpb24gPSBjb250ZXh0Mi5zdWJzdHJpbmcoY29udGV4dDIuaW5kZXhPZihwcmVJZGVudGljYWwpLGNvbnRleHQyLmluZGV4T2YodHJhbnNhY3Rpb25TY29wZSkpOwotICAgICAgICAKKwogICAgICAgICBpZihjb250ZXh0MUFubm90YXRpb24uZXF1YWxzKGNvbnRleHQyQW5ub3RhdGlvbikpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlIGNvbnRleHQgdmFyaWFibGVzIGluIHRoZSBmaXJzdCBhbmQgc2Vjb25kIGNhbGxzIHRvIGNvbnRleHQuc2VuZCgpIGluamVjdGVkIGFyZSB1c2luZyBpZGVudGljYWwgYW5ub3RhdGlvbnMuIik7CiAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgaW4gdGhlIGZpcnN0IGFuZCBzZWNvbmQgY2FsbHMgdG8gY29udGV4dC5zZW5kKCkgaW5qZWN0ZWQgYXJlIG5vdCB1c2luZyBpZGVudGljYWwgYW5ub3RhdGlvbnMuIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAJCisKICAgICAgICAgaWYgKGNvbnRleHQxLnN1YnN0cmluZyhjb250ZXh0MS5pbmRleE9mKHRyYW5zYWN0aW9uU2NvcGUpKS5lcXVhbHMoY29udGV4dDIuc3Vic3RyaW5nKGNvbnRleHQyLmluZGV4T2YodHJhbnNhY3Rpb25TY29wZSkpKSl7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSBjb250ZXh0IHZhcmlhYmxlcyB1c2VkIGluIHRoZSBmaXJzdCBhbmQgc2Vjb25kIGNhbGxzIHRvIGNvbnRleHQuc2VuZCgpIHRha2UgcGxhY2UgaW4gdGhlIHNhbWUgdHJhbnNhY3Rpb24uIik7CiAgICAgICAgIH1lbHNlewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25EL2VqYi9TZXNzaW9uQmVhbkluamVjdGlvblJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25EL2VqYi9TZXNzaW9uQmVhbkluamVjdGlvblJlbW90ZS5qYXZhCmluZGV4IGFjY2Y2MzUuLjk3MDE5ZjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uRC9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb25SZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkQvZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uUmVtb3RlLmphdmEKQEAgLTI3LDUgKzI3LDUgQEAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSZW1vdGVKTkRJTmFtZSA9ICBTZXNzaW9uQmVhbkluamVjdGlvbi5jbGFzcy5nZXRTaW1wbGVOYW1lKCkgKyAiL3JlbW90ZSI7CiAKICAgICBwdWJsaWMgQm9vbGVhbiBzZW5kTWVzc2FnZShTdHJpbmcgdGV4dCk7Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uRS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25FL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOTRjNTU2OS4uNzBlNzY3MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25FL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25FL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iam1zLWluamVjdGlvbi1zdGF0ZWxlc3MtZWpiIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25FL2J1aWxkLnhtbAppbmRleCAyMTk2Y2UxLi4xZTYxMjE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uRS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDE0ICs0NiwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovU2Vzc2lvbkJlYW5JbmplY3Rpb24qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypDbGllbnQuY2xhc3MsKiovU2Vzc2lvbkJlYW5JbmplY3Rpb24qLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYzLDcgKzYzLDcgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iY3JlYXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC03MSwyMSArNzEsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxqYXZhIGZvcms9Im9uIiAKKyAgICAgICAgPGphdmEgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9Im9yZy5nbGFzc2Zpc2gudGVzdC5qbXMuaW5qZWN0aW9uLmNsaWVudC5DbGllbnQiPgogICAgICAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0ib3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydCIgdmFsdWU9IiR7b3JiLnBvcnR9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgotICAgICAgICA8ZWNobz4gICAgICAgICAKKyAgICAgICAgPGVjaG8+CiAgICAgICAgICAgYW50IGNyZWF0ZS1yZXNvdXJjZXMgQ3JlYXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgICAgYW50IGRlbGV0ZS1yZXNvdXJjZXMgRGVsZXRlIGFsbCBkZXN0aW5hdGlvbnMgYW5kIGNvbm5lY3Rpb24gZmFjdG9yaWVzCiAgICAgICAgIDwvZWNobz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uRS9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkUvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDMzZDNlNWMuLjhiMDBjYTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uRS9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25FL2NsaWVudC9DbGllbnQuamF2YQpAQCAtNDgsMTEgKzQ4LDExIEBACiAgICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgICBTVEFULmFkZFN0YXR1cyhlamJOYW1lLCBTVEFULkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIFNUQVQuYWRkU3RhdHVzKGVqYk5hbWUsIFNUQVQuRkFJTCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uRS9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uRS9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb24uamF2YQppbmRleCA2Y2Q0NzhmLi45Y2MyZjdhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkUvZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25FL2VqYi9TZXNzaW9uQmVhbkluamVjdGlvbi5qYXZhCkBAIC02NiwyNCArNjYsMjQgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlIGNvbnRleHQgdmFyaWFibGVzIHVzZWQgaW4gdGhlIGZpcnN0IGNhbGwgYXJlIE5PVCBpbiByZXF1ZXN0IHNjb3BlLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICBpZiAoY29udGV4dDIuaW5kZXhPZihyZXF1ZXN0U2NvcGUpICE9IC0xKXsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlIGNvbnRleHQgdmFyaWFibGVzIHVzZWQgaW4gdGhlIHNlY29uZCBjYWxsIGFyZSBpbiByZXF1ZXN0IHNjb3BlLiIpOwogICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlIGNvbnRleHQgdmFyaWFibGVzIHVzZWQgaW4gdGhlIHNlY29uZCBjYWxsIGFyZSBOT1QgaW4gcmVxdWVzdCBzY29wZS4iKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgY29udGV4dDFBbm5vdGF0aW9uID0gY29udGV4dDEuc3Vic3RyaW5nKGNvbnRleHQxLmluZGV4T2YocHJlSWRlbnRpY2FsKSxjb250ZXh0MS5pbmRleE9mKHJlcXVlc3RTY29wZSkpOwogICAgICAgICBTdHJpbmcgY29udGV4dDJBbm5vdGF0aW9uID0gY29udGV4dDIuc3Vic3RyaW5nKGNvbnRleHQyLmluZGV4T2YocHJlSWRlbnRpY2FsKSxjb250ZXh0Mi5pbmRleE9mKHJlcXVlc3RTY29wZSkpOwotICAgICAgICAKKwogICAgICAgICBpZihjb250ZXh0MUFubm90YXRpb24uZXF1YWxzKGNvbnRleHQyQW5ub3RhdGlvbikpewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgaW4gdGhlIGZpcnN0IGFuZCBzZWNvbmQgY2FsbHMgdG8gY29udGV4dC5zZW5kKCkgaW5qZWN0ZWQgYXJlIHVzaW5nIGlkZW50aWNhbCBhbm5vdGF0aW9ucy4iKTsKICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSBjb250ZXh0IHZhcmlhYmxlcyBpbiB0aGUgZmlyc3QgYW5kIHNlY29uZCBjYWxscyB0byBjb250ZXh0LnNlbmQoKSBpbmplY3RlZCBhcmUgbm90IHVzaW5nIGlkZW50aWNhbCBhbm5vdGF0aW9ucy4iKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgIAkKKwogICAgICAgICBpZiAoY29udGV4dDEuc3Vic3RyaW5nKGNvbnRleHQxLmluZGV4T2YocmVxdWVzdFNjb3BlKSkuZXF1YWxzKGNvbnRleHQyLnN1YnN0cmluZyhjb250ZXh0Mi5pbmRleE9mKHJlcXVlc3RTY29wZSkpKSl7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSBjb250ZXh0IHZhcmlhYmxlcyB1c2VkIGluIHRoZSBmaXJzdCBhbmQgc2Vjb25kIGNhbGxzIHRvIGNvbnRleHQuc2VuZCgpIHRha2UgcGxhY2UgaW4gdGhlIHNhbWUgcmVxdWVzdC4iKTsKICAgICAgICAgfWVsc2V7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkUvZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkUvZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uUmVtb3RlLmphdmEKaW5kZXggMDgwNWU5ZC4uZmMxNzNhMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25FL2VqYi9TZXNzaW9uQmVhbkluamVjdGlvblJlbW90ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uRS9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb25SZW1vdGUuamF2YQpAQCAtMjcsNSArMjcsNSBAQAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJlbW90ZUpORElOYW1lID0gIFNlc3Npb25CZWFuSW5qZWN0aW9uLmNsYXNzLmdldFNpbXBsZU5hbWUoKSArICIvcmVtb3RlIjsKIAogICAgIHB1YmxpYyBCb29sZWFuIHNlbmRNZXNzYWdlKFN0cmluZyB0ZXh0KTsKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25GL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkYvYnVpbGQucHJvcGVydGllcwppbmRleCA5NGM1NTY5Li43MGU3NjcwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkYvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkYvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqbXMtaW5qZWN0aW9uLXN0YXRlbGVzcy1lamIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uRi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkYvYnVpbGQueG1sCmluZGV4IDIxOTZjZTEuLjFlNjEyMTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uRi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25GL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTQgKzQ2LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9TZXNzaW9uQmVhbkluamVjdGlvbiouY2xhc3MiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudC5jbGFzcywqKi9TZXNzaW9uQmVhbkluamVjdGlvbiouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjMsNyArNjMsNyBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJjcmVhdGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTcxLDIxICs3MSwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPGphdmEgZm9yaz0ib24iIAorICAgICAgICA8amF2YSBmb3JrPSJvbiIKICAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiCiAgICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvamF2YWVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9nZi1jbGllbnQuamFyOiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXI6JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0ib3JnLmdsYXNzZmlzaC50ZXN0Lmptcy5pbmplY3Rpb24uY2xpZW50LkNsaWVudCI+CiAgICAgICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0IiB2YWx1ZT0iJHtvcmIucG9ydH0iLz4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25GL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uRi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggZDY3MjQzNi4uYjQ3ODk2NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25GL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkYvY2xpZW50L0NsaWVudC5qYXZhCkBAIC00NywxMSArNDcsMTEgQEAKICAgICAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgICAgIFNUQVQuYWRkU3RhdHVzKGVqYk5hbWUsIFNUQVQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgU1RBVC5hZGRTdGF0dXMoZWpiTmFtZSwgU1RBVC5GQUlMKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25GL2VqYi9TZXNzaW9uQmVhbkluamVjdGlvbjEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uRi9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb24xLmphdmEKaW5kZXggOWU3NzY0MC4uYWY1MTdiMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25GL2VqYi9TZXNzaW9uQmVhbkluamVjdGlvbjEuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkYvZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uMS5qYXZhCkBAIC0zMiw3ICszMiw3IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHByZUlkZW50aWNhbCA9ICJmaW5nZXJQcmludCI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHJlcXVlc3RTY29wZSA9ICJhcm91bmQgUmVxdWVzdFNjb3BlZCI7CiAKLSAgICBARUpCIAorICAgIEBFSkIKICAgICBTZXNzaW9uQmVhbkluamVjdGlvblJlbW90ZTIgYmVhbjI7CiAKICAgICBAUmVzb3VyY2UobWFwcGVkTmFtZSA9ICJqbXMvam1zX3VuaXRfdGVzdF9RdWV1ZSIpCkBAIC02MywxNyArNjMsMTcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlIGNvbnRleHQgdmFyaWFibGVzIHVzZWQgaW4gdGhlIGZpcnN0IGNhbGwgYXJlIE5PVCBpbiByZXF1ZXN0IHNjb3BlLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICBpZiAoY29udGV4dDIuaW5kZXhPZihyZXF1ZXN0U2NvcGUpICE9IC0xKXsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlIGNvbnRleHQgdmFyaWFibGVzIHVzZWQgaW4gdGhlIHNlY29uZCBjYWxsIGFyZSBpbiByZXF1ZXN0IHNjb3BlLiIpOwogICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlIGNvbnRleHQgdmFyaWFibGVzIHVzZWQgaW4gdGhlIHNlY29uZCBjYWxsIGFyZSBOT1QgaW4gcmVxdWVzdCBzY29wZS4iKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgY29udGV4dDFBbm5vdGF0aW9uID0gY29udGV4dDEuc3Vic3RyaW5nKGNvbnRleHQxLmluZGV4T2YocHJlSWRlbnRpY2FsKSxjb250ZXh0MS5pbmRleE9mKHJlcXVlc3RTY29wZSkpOwogICAgICAgICBTdHJpbmcgY29udGV4dDJBbm5vdGF0aW9uID0gY29udGV4dDIuc3Vic3RyaW5nKGNvbnRleHQyLmluZGV4T2YocHJlSWRlbnRpY2FsKSxjb250ZXh0Mi5pbmRleE9mKHJlcXVlc3RTY29wZSkpOwotICAgICAgICAKKwogICAgICAgICBpZihjb250ZXh0MUFubm90YXRpb24uZXF1YWxzKGNvbnRleHQyQW5ub3RhdGlvbikpewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgaW4gdGhlIGZpcnN0IGFuZCBzZWNvbmQgY2FsbHMgdG8gY29udGV4dC5zZW5kKCkgaW5qZWN0ZWQgYXJlIHVzaW5nIGlkZW50aWNhbCBhbm5vdGF0aW9ucy4iKTsKICAgICAgICAgfWVsc2V7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkcvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uRy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDk0YzU1NjkuLjcwZTc2NzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uRy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uRy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9Imptcy1pbmplY3Rpb24tc3RhdGVsZXNzLWVqYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25HL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uRy9idWlsZC54bWwKaW5kZXggMjE5NmNlMS4uMWU2MTIxOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25HL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkcvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NiwxNCArNDYsMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL1Nlc3Npb25CZWFuSW5qZWN0aW9uKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50LmNsYXNzLCoqL1Nlc3Npb25CZWFuSW5qZWN0aW9uKi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImNyZWF0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtNzEsMjEgKzcxLDIxIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICA8amF2YSBmb3JrPSJvbiIgCisgICAgICAgIDxqYXZhIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50Lmphcjoke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSJvcmcuZ2xhc3NmaXNoLnRlc3Quam1zLmluamVjdGlvbi5jbGllbnQuQ2xpZW50Ij4KICAgICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke29yYi5wb3J0fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkcvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25HL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBlN2FlOTEwLi4xN2QxMmE3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkcvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uRy9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTQ4LDExICs0OCwxMSBAQAogICAgICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICAgICAgU1RBVC5hZGRTdGF0dXMoZWpiTmFtZSwgU1RBVC5GQUlMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBTVEFULmFkZFN0YXR1cyhlamJOYW1lLCBTVEFULkZBSUwpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkcvZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkcvZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uLmphdmEKaW5kZXggNTg1MjA4Ni4uMDE2NGUzOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25HL2VqYi9TZXNzaW9uQmVhbkluamVjdGlvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uRy9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb24uamF2YQpAQCAtMzgsOSArMzgsOSBAQAogICAgIEBKTVNTZXNzaW9uTW9kZShKTVNDb250ZXh0LkFVVE9fQUNLTk9XTEVER0UpCiAgICAgcHJpdmF0ZSBKTVNDb250ZXh0IGptc0NvbnRleHQ7CiAKLSAgICBASW5qZWN0IAorICAgIEBJbmplY3QKICAgICBVc2VyVHJhbnNhY3Rpb24gdXQ7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdHJhbnNhY3Rpb25TY29wZSA9ICJhcm91bmQgVHJhbnNhY3Rpb25TY29wZWQiOwogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBwcmVJZGVudGljYWwgPSAiZmluZ2VyUHJpbnQiOwogCkBAIC01MywxMSArNTMsMTEgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHV0LmJlZ2luKCk7CiAgICAgICAgICAgICBUZXh0TWVzc2FnZSBtc2cgPSBqbXNDb250ZXh0LmNyZWF0ZVRleHRNZXNzYWdlKHRleHQpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGptc0NvbnRleHQuY3JlYXRlUHJvZHVjZXIoKS5zZW5kKHF1ZXVlLCBtc2cpOwogICAgICAgICAgICAgY29udGV4dDEgPSBqbXNDb250ZXh0LnRvU3RyaW5nKCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkpNU0NvbnRleHQxOiIram1zQ29udGV4dC50b1N0cmluZygpKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBqbXNDb250ZXh0LmNyZWF0ZVByb2R1Y2VyKCkuc2VuZChxdWV1ZSwgbXNnKTsKICAgICAgICAgICAgIGNvbnRleHQyID0gam1zQ29udGV4dC50b1N0cmluZygpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJKTVNDb250ZXh0MjoiK2ptc0NvbnRleHQudG9TdHJpbmcoKSk7CkBAIC02OCw3ICs2OCw3IEBACiAgICAgICAgICAgICBqbXNDb250ZXh0LmNyZWF0ZVByb2R1Y2VyKCkuc2VuZChxdWV1ZSwgbXNnKTsKICAgICAgICAgICAgIGNvbnRleHQzID0gam1zQ29udGV4dC50b1N0cmluZygpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJKTVNDb250ZXh0MzoiK2ptc0NvbnRleHQudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgam1zQ29udGV4dC5jcmVhdGVQcm9kdWNlcigpLnNlbmQocXVldWUsIG1zZyk7CiAgICAgICAgICAgICBjb250ZXh0NCA9IGptc0NvbnRleHQudG9TdHJpbmcoKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSk1TQ29udGV4dDQ6IitqbXNDb250ZXh0LnRvU3RyaW5nKCkpOwpAQCAtODIsNDAgKzgyLDQwIEBACiAgICAgfQogCiAgICAgcHVibGljIEJvb2xlYW4gY2hlY2tTY29wZShTdHJpbmcgY29udGV4dDEsIFN0cmluZyBjb250ZXh0MiwgU3RyaW5nIGNvbnRleHQzLCBTdHJpbmcgY29udGV4dDQpewotCQkJCQorCiAgICAgICAgIGlmIChjb250ZXh0MS5pbmRleE9mKHRyYW5zYWN0aW9uU2NvcGUpICE9IC0xKXsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlIGNvbnRleHQgdmFyaWFibGVzIHVzZWQgaW4gdGhlIGZpcnN0IGNhbGwgYXJlIGluIHRyYW5zYWN0aW9uIHNjb3BlLiIpOwogICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlIGNvbnRleHQgdmFyaWFibGVzIHVzZWQgaW4gdGhlIGZpcnN0IGNhbGwgYXJlIE5PVCBpbiB0cmFuc2FjdGlvbiBzY29wZS4iKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgaWYgKGNvbnRleHQyLmluZGV4T2YodHJhbnNhY3Rpb25TY29wZSkgIT0gLTEpewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgc2Vjb25kIGNhbGwgYXJlIGluIHRyYW5zYWN0aW9uIHNjb3BlLiIpOwogICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlIGNvbnRleHQgdmFyaWFibGVzIHVzZWQgaW4gdGhlIHNlY29uZCBjYWxsIGFyZSBOT1QgaW4gdHJhbnNhY3Rpb24gc2NvcGUuIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKGNvbnRleHQzLmluZGV4T2YodHJhbnNhY3Rpb25TY29wZSkgIT0gLTEpewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgdGhpcmQgY2FsbCBhcmUgaW4gdHJhbnNhY3Rpb24gc2NvcGUuIik7CiAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgdGhpcmQgY2FsbCBhcmUgTk9UIGluIHRyYW5zYWN0aW9uIHNjb3BlLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChjb250ZXh0NC5pbmRleE9mKHRyYW5zYWN0aW9uU2NvcGUpICE9IC0xKXsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlIGNvbnRleHQgdmFyaWFibGVzIHVzZWQgaW4gdGhlIGZvdXJ0aCBjYWxsIGFyZSBpbiB0cmFuc2FjdGlvbiBzY29wZS4iKTsKICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSBjb250ZXh0IHZhcmlhYmxlcyB1c2VkIGluIHRoZSBmb3VydGggY2FsbCBhcmUgTk9UIGluIHRyYW5zYWN0aW9uIHNjb3BlLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyBjb250ZXh0MUFubm90YXRpb24gPSBjb250ZXh0MS5zdWJzdHJpbmcoY29udGV4dDEuaW5kZXhPZihwcmVJZGVudGljYWwpLGNvbnRleHQxLmluZGV4T2YodHJhbnNhY3Rpb25TY29wZSkpOwogICAgICAgICBTdHJpbmcgY29udGV4dDJBbm5vdGF0aW9uID0gY29udGV4dDIuc3Vic3RyaW5nKGNvbnRleHQyLmluZGV4T2YocHJlSWRlbnRpY2FsKSxjb250ZXh0Mi5pbmRleE9mKHRyYW5zYWN0aW9uU2NvcGUpKTsKICAgICAgICAgU3RyaW5nIGNvbnRleHQzQW5ub3RhdGlvbiA9IGNvbnRleHQzLnN1YnN0cmluZyhjb250ZXh0My5pbmRleE9mKHByZUlkZW50aWNhbCksY29udGV4dDMuaW5kZXhPZih0cmFuc2FjdGlvblNjb3BlKSk7CiAgICAgICAgIFN0cmluZyBjb250ZXh0NEFubm90YXRpb24gPSBjb250ZXh0NC5zdWJzdHJpbmcoY29udGV4dDQuaW5kZXhPZihwcmVJZGVudGljYWwpLGNvbnRleHQzLmluZGV4T2YodHJhbnNhY3Rpb25TY29wZSkpOwotICAgICAgICAKKwogICAgICAgICBpZihjb250ZXh0MUFubm90YXRpb24uZXF1YWxzKGNvbnRleHQyQW5ub3RhdGlvbikpewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgaW4gdGhlIGZpcnN0IGFuZCBzZWNvbmQgY2FsbHMgdG8gY29udGV4dC5zZW5kKCkgaW5qZWN0ZWQgYXJlIHVzaW5nIGlkZW50aWNhbCBhbm5vdGF0aW9ucy4iKTsKICAgICAgICAgICAgICAgICBpZihjb250ZXh0MUFubm90YXRpb24uZXF1YWxzKGNvbnRleHQzQW5ub3RhdGlvbikpewpAQCAtMTM0LDIxICsxMzQsMjEgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlIGNvbnRleHQgdmFyaWFibGVzIGluIHRoZSBmaXJzdCBhbmQgc2Vjb25kIGNhbGxzIHRvIGNvbnRleHQuc2VuZCgpIGluamVjdGVkIGFyZSBub3QgdXNpbmcgaWRlbnRpY2FsIGFubm90YXRpb25zLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgCQorCiAgICAgICAgIGlmIChjb250ZXh0MS5zdWJzdHJpbmcoY29udGV4dDEuaW5kZXhPZih0cmFuc2FjdGlvblNjb3BlKSkuZXF1YWxzKGNvbnRleHQyLnN1YnN0cmluZyhjb250ZXh0Mi5pbmRleE9mKHRyYW5zYWN0aW9uU2NvcGUpKSkpewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgZmlyc3QgYW5kIHNlY29uZCBjYWxscyB0byBjb250ZXh0LnNlbmQoKSB0YWtlIHBsYWNlIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uLiIpOwogICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlIGNvbnRleHQgdmFyaWFibGVzIHVzZWQgaW4gdGhlIGZpcnN0IGFuZCBzZWNvbmQgY2FsbHMgdG8gY29udGV4dC5zZW5kKCkgdGFrZSBwbGFjZSBpbiB0aGUgZGlmZmVyZW50IHRyYW5zYWN0aW9uLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChjb250ZXh0My5zdWJzdHJpbmcoY29udGV4dDMuaW5kZXhPZih0cmFuc2FjdGlvblNjb3BlKSkuZXF1YWxzKGNvbnRleHQ0LnN1YnN0cmluZyhjb250ZXh0NC5pbmRleE9mKHRyYW5zYWN0aW9uU2NvcGUpKSkpewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgdGhpcmQgYW5kIGZvdXJ0aCBjYWxscyB0byBjb250ZXh0LnNlbmQoKSB0YWtlIHBsYWNlIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uLiIpOwogICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlIGNvbnRleHQgdmFyaWFibGVzIHVzZWQgaW4gdGhlIHRoaXJkIGFuZCBmb3VydGggY2FsbHMgdG8gY29udGV4dC5zZW5kKCkgdGFrZSBwbGFjZSBpbiB0aGUgZGlmZmVyZW50IHRyYW5zYWN0aW9uLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChjb250ZXh0MS5zdWJzdHJpbmcoY29udGV4dDEuaW5kZXhPZih0cmFuc2FjdGlvblNjb3BlKSkuZXF1YWxzKGNvbnRleHQzLnN1YnN0cmluZyhjb250ZXh0My5pbmRleE9mKHRyYW5zYWN0aW9uU2NvcGUpKSkpewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgZmlyc3QgYW5kIHRoaXJkIGNhbGxzIHRvIGNvbnRleHQuc2VuZCgpIHRha2UgcGxhY2UgaW4gdGhlIHNhbWUgdHJhbnNhY3Rpb24uIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkgvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uSC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDk0YzU1NjkuLjcwZTc2NzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uSC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uSC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9Imptcy1pbmplY3Rpb24tc3RhdGVsZXNzLWVqYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25IL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uSC9idWlsZC54bWwKaW5kZXggMjE5NmNlMS4uMWU2MTIxOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25IL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkgvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NiwxNCArNDYsMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL1Nlc3Npb25CZWFuSW5qZWN0aW9uKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50LmNsYXNzLCoqL1Nlc3Npb25CZWFuSW5qZWN0aW9uKi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImNyZWF0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtNzEsMjEgKzcxLDIxIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICA8amF2YSBmb3JrPSJvbiIgCisgICAgICAgIDxqYXZhIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50Lmphcjoke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSJvcmcuZ2xhc3NmaXNoLnRlc3Quam1zLmluamVjdGlvbi5jbGllbnQuQ2xpZW50Ij4KICAgICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke29yYi5wb3J0fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkgvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25IL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBjZDc4MjAzLi45MDg3MzhlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkgvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uSC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTQ4LDExICs0OCwxMSBAQAogICAgICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICAgICAgU1RBVC5hZGRTdGF0dXMoZWpiTmFtZSwgU1RBVC5GQUlMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBTVEFULmFkZFN0YXR1cyhlamJOYW1lLCBTVEFULkZBSUwpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkgvZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkgvZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uLmphdmEKaW5kZXggNTg0ZTU2Yy4uZDRiZmJkNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25IL2VqYi9TZXNzaW9uQmVhbkluamVjdGlvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uSC9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb24uamF2YQpAQCAtMzgsOSArMzgsOSBAQAogICAgIEBKTVNTZXNzaW9uTW9kZShKTVNDb250ZXh0LkFVVE9fQUNLTk9XTEVER0UpCiAgICAgcHJpdmF0ZSBKTVNDb250ZXh0IGptc0NvbnRleHQ7CiAKLSAgICBASW5qZWN0IAorICAgIEBJbmplY3QKICAgICBVc2VyVHJhbnNhY3Rpb24gdXQ7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgcmVxdWVzdFNjb3BlID0gImFyb3VuZCBSZXF1ZXN0U2NvcGVkIjsKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdHJhbnNhY3Rpb25TY29wZSA9ICJhcm91bmQgVHJhbnNhY3Rpb25TY29wZWQiOwogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBwcmVJZGVudGljYWwgPSAiZmluZ2VyUHJpbnQiOwpAQCAtNTQsMTEgKzU0LDExIEBACiAgICAgICAgIFN0cmluZyBjb250ZXh0NSA9ICIiOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgVGV4dE1lc3NhZ2UgbXNnID0gam1zQ29udGV4dC5jcmVhdGVUZXh0TWVzc2FnZSh0ZXh0KTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBqbXNDb250ZXh0LmNyZWF0ZVByb2R1Y2VyKCkuc2VuZChxdWV1ZSwgbXNnKTsKICAgICAgICAgICAgIGNvbnRleHQxID0gam1zQ29udGV4dC50b1N0cmluZygpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJKTVNDb250ZXh0MToiK2NvbnRleHQxKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBqbXNDb250ZXh0LmNyZWF0ZVByb2R1Y2VyKCkuc2VuZChxdWV1ZSwgbXNnKTsKICAgICAgICAgICAgIGNvbnRleHQyID0gam1zQ29udGV4dC50b1N0cmluZygpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJKTVNDb250ZXh0MjoiK2NvbnRleHQyKTsKQEAgLTY4LDcgKzY4LDcgQEAKICAgICAgICAgICAgIGNvbnRleHQzID0gam1zQ29udGV4dC50b1N0cmluZygpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJKTVNDb250ZXh0MzoiK2NvbnRleHQzKTsKICAgICAgICAgICAgIHV0LmNvbW1pdCgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGptc0NvbnRleHQuY3JlYXRlUHJvZHVjZXIoKS5zZW5kKHF1ZXVlLCBtc2cpOwogICAgICAgICAgICAgY29udGV4dDQgPSBqbXNDb250ZXh0LnRvU3RyaW5nKCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkpNU0NvbnRleHQ0OiIrY29udGV4dDQpOwpAQCAtOTcsNDEgKzk3LDQxIEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSBjb250ZXh0IHZhcmlhYmxlcyB1c2VkIGluIHRoZSBmaXJzdCBjYWxsIGFyZSBOT1QgaW4gcmVxdWVzdCBzY29wZS4iKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgaWYgKGNvbnRleHQyLmluZGV4T2YocmVxdWVzdFNjb3BlKSAhPSAtMSl7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSBjb250ZXh0IHZhcmlhYmxlcyB1c2VkIGluIHRoZSBzZWNvbmQgY2FsbCBhcmUgaW4gcmVxdWVzdCBzY29wZS4iKTsKICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSBjb250ZXh0IHZhcmlhYmxlcyB1c2VkIGluIHRoZSBzZWNvbmQgY2FsbCBhcmUgTk9UIGluIHJlcXVlc3Qgc2NvcGUuIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKGNvbnRleHQzLmluZGV4T2YodHJhbnNhY3Rpb25TY29wZSkgIT0gLTEpewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgdGhpcmQgY2FsbCBhcmUgaW4gdHJhbnNhY3Rpb24gc2NvcGUuIik7CiAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgdGhpcmQgY2FsbCBhcmUgTk9UIGluIHRyYW5zYWN0aW9uIHNjb3BlLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChjb250ZXh0NC5pbmRleE9mKHJlcXVlc3RTY29wZSkgIT0gLTEpewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgZm91cnRoIGNhbGwgYXJlIGluIHJlcXVlc3Qgc2NvcGUuIik7CiAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgZm91cnRoIGNhbGwgYXJlIE5PVCBpbiByZXF1ZXN0IHNjb3BlLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICBpZiAoY29udGV4dDUuaW5kZXhPZihyZXF1ZXN0U2NvcGUpICE9IC0xKXsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlIGNvbnRleHQgdmFyaWFibGVzIHVzZWQgaW4gdGhlIGZpZnRoIGNhbGwgYXJlIGluIHJlcXVlc3Qgc2NvcGUuIik7CiAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgZmlmdGggY2FsbCBhcmUgTk9UIGluIHJlcXVlc3Qgc2NvcGUuIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIGNvbnRleHQxQW5ub3RhdGlvbiA9IGNvbnRleHQxLnN1YnN0cmluZyhjb250ZXh0MS5pbmRleE9mKHByZUlkZW50aWNhbCksY29udGV4dDEuaW5kZXhPZihyZXF1ZXN0U2NvcGUpKTsKICAgICAgICAgU3RyaW5nIGNvbnRleHQyQW5ub3RhdGlvbiA9IGNvbnRleHQyLnN1YnN0cmluZyhjb250ZXh0Mi5pbmRleE9mKHByZUlkZW50aWNhbCksY29udGV4dDIuaW5kZXhPZihyZXF1ZXN0U2NvcGUpKTsKICAgICAgICAgU3RyaW5nIGNvbnRleHQzQW5ub3RhdGlvbiA9IGNvbnRleHQzLnN1YnN0cmluZyhjb250ZXh0My5pbmRleE9mKHByZUlkZW50aWNhbCksY29udGV4dDMuaW5kZXhPZih0cmFuc2FjdGlvblNjb3BlKSk7CiAgICAgICAgIFN0cmluZyBjb250ZXh0NEFubm90YXRpb24gPSBjb250ZXh0NC5zdWJzdHJpbmcoY29udGV4dDQuaW5kZXhPZihwcmVJZGVudGljYWwpLGNvbnRleHQ0LmluZGV4T2YocmVxdWVzdFNjb3BlKSk7CiAgICAgICAgIFN0cmluZyBjb250ZXh0NUFubm90YXRpb24gPSBjb250ZXh0NS5zdWJzdHJpbmcoY29udGV4dDUuaW5kZXhPZihwcmVJZGVudGljYWwpLGNvbnRleHQ1LmluZGV4T2YocmVxdWVzdFNjb3BlKSk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKGNvbnRleHQxQW5ub3RhdGlvbi5lcXVhbHMoY29udGV4dDJBbm5vdGF0aW9uKSl7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSBjb250ZXh0IHZhcmlhYmxlcyBpbiB0aGUgZmlyc3QgYW5kIHNlY29uZCBjYWxscyB0byBjb250ZXh0LnNlbmQoKSBpbmplY3RlZCBhcmUgdXNpbmcgaWRlbnRpY2FsIGFubm90YXRpb25zLiIpOwogICAgICAgICAgICAgaWYoY29udGV4dDFBbm5vdGF0aW9uLmVxdWFscyhjb250ZXh0M0Fubm90YXRpb24pKXsKQEAgLTE2Myw3ICsxNjMsNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgZmlyc3QgYW5kIHNlY29uZCBjYWxscyB0byBjb250ZXh0LnNlbmQoKSB0YWtlIHBsYWNlIGluIHRoZSBkaWZmZXJlbnQgcmVxdWVzdC4iKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAoY29udGV4dDQuc3Vic3RyaW5nKGNvbnRleHQ0LmluZGV4T2YocmVxdWVzdFNjb3BlKSkuZXF1YWxzKGNvbnRleHQ1LnN1YnN0cmluZyhjb250ZXh0NS5pbmRleE9mKHJlcXVlc3RTY29wZSkpKSl7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSBjb250ZXh0IHZhcmlhYmxlcyB1c2VkIGluIHRoZSBmb3VydGggYW5kIGZpZnRoIGNhbGxzIHRvIGNvbnRleHQuc2VuZCgpIHRha2UgcGxhY2UgaW4gdGhlIHNhbWUgcmVxdWVzdC4iKTsKICAgICAgICAgfWVsc2V7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkovYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uSi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDk0YzU1NjkuLjcwZTc2NzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uSi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uSi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9Imptcy1pbmplY3Rpb24tc3RhdGVsZXNzLWVqYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25KL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uSi9idWlsZC54bWwKaW5kZXggM2Q0ZjE5MS4uNTFjMWY0MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25KL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkovYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NiwxNCArNDYsMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL1Nlc3Npb25CZWFuSW5qZWN0aW9uKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50LmNsYXNzLCoqL1Nlc3Npb25CZWFuSW5qZWN0aW9uKi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImNyZWF0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtNzEsMjEgKzcxLDIxIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICA8amF2YSBmb3JrPSJvbiIgCisgICAgICAgIDxqYXZhIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50Lmphcjoke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSJvcmcuZ2xhc3NmaXNoLnRlc3Quam1zLmluamVjdGlvbi5jbGllbnQuQ2xpZW50Ij4KICAgICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke29yYi5wb3J0fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkovY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25KL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA3YWE5N2FmLi43ODM4YThhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkovY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uSi9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTQ3LDExICs0NywxMSBAQAogICAgICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICAgICAgU1RBVC5hZGRTdGF0dXMoZWpiTmFtZSwgU1RBVC5GQUlMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBTVEFULmFkZFN0YXR1cyhlamJOYW1lLCBTVEFULkZBSUwpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkovZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uMS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25KL2VqYi9TZXNzaW9uQmVhbkluamVjdGlvbjEuamF2YQppbmRleCBjYWJjODg4Li43ZjUyY2Y0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkovZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uMS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uSi9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb24xLmphdmEKQEAgLTQxLDcgKzQxLDcgQEAKICAgICBASk1TU2Vzc2lvbk1vZGUoSk1TQ29udGV4dC5BVVRPX0FDS05PV0xFREdFKQogICAgIHByaXZhdGUgSk1TQ29udGV4dCBqbXNDb250ZXh0OwogCi0gICAgQEVKQiAKKyAgICBARUpCCiAgICAgU2Vzc2lvbkJlYW5JbmplY3Rpb25SZW1vdGUyIGJlYW4yOwogCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5SRVFVSVJFRCkKQEAgLTc0LDI1ICs3NCwyNSBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgZmlyc3QgY2FsbCBhcmUgTk9UIGluIHRyYW5zYWN0aW9uIHNjb3BlLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICBpZiAoY29udGV4dDIuaW5kZXhPZih0cmFuc2FjdGlvblNjb3BlKSAhPSAtMSl7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSBjb250ZXh0IHZhcmlhYmxlcyB1c2VkIGluIHRoZSBzZWNvbmQgY2FsbCBhcmUgaW4gdHJhbnNhY3Rpb24gc2NvcGUuIik7CiAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgc2Vjb25kIGNhbGwgYXJlIE5PVCBpbiB0cmFuc2FjdGlvbiBzY29wZS4iKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAoY29udGV4dDMuaW5kZXhPZih0cmFuc2FjdGlvblNjb3BlKSAhPSAtMSl7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSBjb250ZXh0IHZhcmlhYmxlcyB1c2VkIGluIHRoZSB0aGlyZCBjYWxsIGFyZSBpbiB0cmFuc2FjdGlvbiBzY29wZS4iKTsKICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSBjb250ZXh0IHZhcmlhYmxlcyB1c2VkIGluIHRoZSB0aGlyZCBjYWxsIGFyZSBOT1QgaW4gdHJhbnNhY3Rpb24gc2NvcGUuIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIGNvbnRleHQxQW5ub3RhdGlvbiA9IGNvbnRleHQxLnN1YnN0cmluZyhjb250ZXh0MS5pbmRleE9mKHByZUlkZW50aWNhbCksY29udGV4dDEuaW5kZXhPZih0cmFuc2FjdGlvblNjb3BlKSk7CiAgICAgICAgIFN0cmluZyBjb250ZXh0MkFubm90YXRpb24gPSBjb250ZXh0Mi5zdWJzdHJpbmcoY29udGV4dDIuaW5kZXhPZihwcmVJZGVudGljYWwpLGNvbnRleHQyLmluZGV4T2YodHJhbnNhY3Rpb25TY29wZSkpOwogICAgICAgICBTdHJpbmcgY29udGV4dDNBbm5vdGF0aW9uID0gY29udGV4dDMuc3Vic3RyaW5nKGNvbnRleHQzLmluZGV4T2YocHJlSWRlbnRpY2FsKSxjb250ZXh0My5pbmRleE9mKHRyYW5zYWN0aW9uU2NvcGUpKTsKLSAgICAgICAgCisKICAgICAgICAgaWYoY29udGV4dDFBbm5vdGF0aW9uLmVxdWFscyhjb250ZXh0MkFubm90YXRpb24pKXsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlIGNvbnRleHQgdmFyaWFibGVzIGluIHRoZSBmaXJzdCBhbmQgc2Vjb25kIGNhbGxzIHRvIGNvbnRleHQuc2VuZCgpIGluamVjdGVkIGFyZSB1c2luZyBpZGVudGljYWwgYW5ub3RhdGlvbnMuIik7CiAgICAgICAgICAgICBpZihjb250ZXh0MUFubm90YXRpb24uZXF1YWxzKGNvbnRleHQzQW5ub3RhdGlvbikpewpAQCAtMTEyLDcgKzExMiw3IEBACiAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgZmlyc3QgYW5kIHNlY29uZCBjYWxscyB0byBjb250ZXh0LnNlbmQoKSB0YWtlIHBsYWNlIGluIHRoZSBkaWZmZXJlbnQgdHJhbnNhY3Rpb24uIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKGNvbnRleHQxLnN1YnN0cmluZyhjb250ZXh0MS5pbmRleE9mKHRyYW5zYWN0aW9uU2NvcGUpKS5lcXVhbHMoY29udGV4dDMuc3Vic3RyaW5nKGNvbnRleHQzLmluZGV4T2YodHJhbnNhY3Rpb25TY29wZSkpKSl7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSBjb250ZXh0IHZhcmlhYmxlcyB1c2VkIGluIHRoZSBmaXJzdCBhbmQgdGhpcmQgY2FsbHMgdG8gY29udGV4dC5zZW5kKCkgdGFrZSBwbGFjZSBpbiB0aGUgc2FtZSB0cmFuc2FjdGlvbi4iKTsKICAgICAgICAgfWVsc2V7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkovZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uUmVtb3RlMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25KL2VqYi9TZXNzaW9uQmVhbkluamVjdGlvblJlbW90ZTIuamF2YQppbmRleCAzZGU2ZTlmLi43ZGEyZDYyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbkovZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uUmVtb3RlMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uSi9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb25SZW1vdGUyLmphdmEKQEAgLTI3LDUgKzI3LDUgQEAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSZW1vdGVKTkRJTmFtZSA9ICBTZXNzaW9uQmVhbkluamVjdGlvbjIuY2xhc3MuZ2V0U2ltcGxlTmFtZSgpICsgIi9yZW1vdGUyIjsKIAogICAgIHB1YmxpYyBTdHJpbmcgc2VuZE1lc3NhZ2UoU3RyaW5nIHRleHQpOwotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbksvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uSy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDk0YzU1NjkuLjcwZTc2NzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uSy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uSy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9Imptcy1pbmplY3Rpb24tc3RhdGVsZXNzLWVqYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25LL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uSy9idWlsZC54bWwKaW5kZXggYjBiMzZkNi4uNmI1ZGIxNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25LL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbksvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC00NiwxNCArNDYsMTQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqL1Nlc3Npb25CZWFuSW5qZWN0aW9uKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50LmNsYXNzLCoqL1Nlc3Npb25CZWFuSW5qZWN0aW9uKi5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImNyZWF0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1yZXNvdXJjZXMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWJhdGNoLWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImRlbGV0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgpAQCAtNzEsMjEgKzcxLDIxIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICA8amF2YSBmb3JrPSJvbiIgCisgICAgICAgIDxqYXZhIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50Lmphcjoke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgICAgY2xhc3NuYW1lPSJvcmcuZ2xhc3NmaXNoLnRlc3Quam1zLmluamVjdGlvbi5jbGllbnQuQ2xpZW50Ij4KICAgICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke29yYi5wb3J0fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbksvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25LL2NsaWVudC9DbGllbnQuamF2YQppbmRleCAwZjgzODJhLi5hYjk2NWY3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbksvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uSy9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTQ3LDExICs0NywxMSBAQAogICAgICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICAgICAgU1RBVC5hZGRTdGF0dXMoZWpiTmFtZSwgU1RBVC5GQUlMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBTVEFULmFkZFN0YXR1cyhlamJOYW1lLCBTVEFULkZBSUwpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbksvZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uMS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25LL2VqYi9TZXNzaW9uQmVhbkluamVjdGlvbjEuamF2YQppbmRleCAwNmYxZDFhLi5iNzIyNGNmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbksvZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uMS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uSy9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb24xLmphdmEKQEAgLTI5LDE2ICsyOSwxNiBAQAogQFN0YXRlbGVzcyhtYXBwZWROYW1lPSJTZXNzaW9uQmVhbkluamVjdGlvbjEvcmVtb3RlMSIpCiBAVHJhbnNhY3Rpb25NYW5hZ2VtZW50KFRyYW5zYWN0aW9uTWFuYWdlbWVudFR5cGUuQ09OVEFJTkVSKQogcHVibGljIGNsYXNzIFNlc3Npb25CZWFuSW5qZWN0aW9uMSBpbXBsZW1lbnRzIFNlc3Npb25CZWFuSW5qZWN0aW9uUmVtb3RlMSB7Ci0JCQorCiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRyYW5zYWN0aW9uU2NvcGUgPSAiYXJvdW5kIFRyYW5zYWN0aW9uU2NvcGVkIjsKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgcHJlSWRlbnRpY2FsID0gImZpbmdlclByaW50IjsKIAotICAgIEBFSkIgCisgICAgQEVKQgogICAgIFNlc3Npb25CZWFuSW5qZWN0aW9uUmVtb3RlMiBiZWFuMjsKIAogICAgIEBSZXNvdXJjZShtYXBwZWROYW1lID0gImptcy9qbXNfdW5pdF90ZXN0X1F1ZXVlIikKICAgICBwcml2YXRlIFF1ZXVlIHF1ZXVlOwotICAgIAorCiAgICAgQEluamVjdAogICAgIEBKTVNDb25uZWN0aW9uRmFjdG9yeSgiam1zL2ptc191bml0X3Rlc3RfUUNGIikKICAgICBASk1TU2Vzc2lvbk1vZGUoSk1TQ29udGV4dC5BVVRPX0FDS05PV0xFREdFKQpAQCAtNjMsNyArNjMsNyBAQAogICAgICAgICBTdHJpbmcgY29udGV4dDIgPSBiZWFuMi5zZW5kTWVzc2FnZSh0ZXh0KyIyIik7CiAgICAgICAgIHJldHVybiBjaGVja1Jlc3VsdChjb250ZXh0MSwgY29udGV4dDIpOwogICAgIH0KLSAgICAKKwogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuTk9UX1NVUFBPUlRFRCkKICAgICBwdWJsaWMgQm9vbGVhbiBjaGVja1Jlc3VsdChTdHJpbmcgY29udGV4dDEsIFN0cmluZyBjb250ZXh0Mil7CiAKQEAgLTc0LDcgKzc0LDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlIGNvbnRleHQgdmFyaWFibGVzIHVzZWQgaW4gdGhlIGZpcnN0IGNhbGwgYXJlIE5PVCBpbiB0cmFuc2FjdGlvbiBzY29wZS4iKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgaWYgKGNvbnRleHQyLmluZGV4T2YodHJhbnNhY3Rpb25TY29wZSkgIT0gLTEpCiAgICAgICAgIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlIGNvbnRleHQgdmFyaWFibGVzIHVzZWQgaW4gdGhlIHNlY29uZCBjYWxsIGFyZSBpbiB0cmFuc2FjdGlvbiBzY29wZS4iKTsKQEAgLTgyLDEwICs4MiwxMCBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgY29udGV4dCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgc2Vjb25kIGNhbGwgYXJlIE5PVCBpbiB0cmFuc2FjdGlvbiBzY29wZS4iKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgY29udGV4dDFBbm5vdGF0aW9uID0gY29udGV4dDEuc3Vic3RyaW5nKGNvbnRleHQxLmluZGV4T2YocHJlSWRlbnRpY2FsKSxjb250ZXh0MS5pbmRleE9mKHRyYW5zYWN0aW9uU2NvcGUpKTsKICAgICAgICAgU3RyaW5nIGNvbnRleHQyQW5ub3RhdGlvbiA9IGNvbnRleHQyLnN1YnN0cmluZyhjb250ZXh0Mi5pbmRleE9mKHByZUlkZW50aWNhbCksY29udGV4dDIuaW5kZXhPZih0cmFuc2FjdGlvblNjb3BlKSk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKGNvbnRleHQxQW5ub3RhdGlvbi5lcXVhbHMoY29udGV4dDJBbm5vdGF0aW9uKSl7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSBjb250ZXh0IHZhcmlhYmxlcyBpbiB0aGUgZmlyc3QgYW5kIHNlY29uZCBjYWxscyB0byBjb250ZXh0LnNlbmQoKSBpbmplY3RlZCBhcmUgdXNpbmcgaWRlbnRpY2FsIGFubm90YXRpb25zLiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25LL2VqYi9TZXNzaW9uQmVhbkluamVjdGlvblJlbW90ZTEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9pbmplY3Rpb24vam1zQ29udGV4dC9taXhlZFNjb3BlZC9qbXNDb250ZXh0SW5qZWN0aW9uSy9lamIvU2Vzc2lvbkJlYW5JbmplY3Rpb25SZW1vdGUxLmphdmEKaW5kZXggMWNiNGE0Yy4uOWNmY2FlMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL2luamVjdGlvbi9qbXNDb250ZXh0L21peGVkU2NvcGVkL2ptc0NvbnRleHRJbmplY3Rpb25LL2VqYi9TZXNzaW9uQmVhbkluamVjdGlvblJlbW90ZTEuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvaW5qZWN0aW9uL2ptc0NvbnRleHQvbWl4ZWRTY29wZWQvam1zQ29udGV4dEluamVjdGlvbksvZWpiL1Nlc3Npb25CZWFuSW5qZWN0aW9uUmVtb3RlMS5qYXZhCkBAIC0yNyw1ICsyNyw1IEBACiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUmVtb3RlSk5ESU5hbWUgPSAgU2Vzc2lvbkJlYW5JbmplY3Rpb24xLmNsYXNzLmdldFNpbXBsZU5hbWUoKSArICIvcmVtb3RlMSI7CiAKICAgICBwdWJsaWMgQm9vbGVhbiBzZW5kTWVzc2FnZShTdHJpbmcgdGV4dCk7Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9tZGJEZXN0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvbWRiRGVzdC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDIyNmJkNTcuLjM1ZGExNjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9tZGJEZXN0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL21kYkRlc3QvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJtZGJEZXN0Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvbWRiRGVzdC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvbWRiRGVzdC9idWlsZC54bWwKaW5kZXggOTYwMWU0Ny4uODdkNTk4MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL21kYkRlc3QvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9tZGJEZXN0L2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDYsMTQgKzQ2LDE0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9NeVNlc3Npb25CZWFuKi5jbGFzcywgKiovKk1lc3NhZ2VCZWFuKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50LmNsYXNzLCoqL015U2Vzc2lvbkJlYW4qLmNsYXNzIiAvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYzLDcgKzYzLDcgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iY3JlYXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC03MSwyMSArNzEsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxqYXZhIGZvcms9Im9uIiAKKyAgICAgICAgPGphdmEgZm9yaz0ib24iCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgogICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2phdmFlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvZ2YtY2xpZW50Lmphcjoke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyOiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgICBjbGFzc25hbWU9Im9yZy5nbGFzc2Zpc2gudGVzdC5qbXMubWRiZGVzdC5jbGllbnQuQ2xpZW50Ij4KICAgICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9Im9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQiIHZhbHVlPSIke29yYi5wb3J0fSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KLSAgICAgICAgPGVjaG8+ICAgICAgICAgCisgICAgICAgIDxlY2hvPgogICAgICAgICAgIGFudCBjcmVhdGUtcmVzb3VyY2VzIENyZWF0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICAgIGFudCBkZWxldGUtcmVzb3VyY2VzIERlbGV0ZSBhbGwgZGVzdGluYXRpb25zIGFuZCBjb25uZWN0aW9uIGZhY3RvcmllcwogICAgICAgICA8L2VjaG8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvbWRiRGVzdC9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL21kYkRlc3QvZWpiL015U2Vzc2lvbkJlYW5SZW1vdGUuamF2YQppbmRleCBiYzhhZjI0Li40MzhhZDI4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvbWRiRGVzdC9lamIvTXlTZXNzaW9uQmVhblJlbW90ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9tZGJEZXN0L2VqYi9NeVNlc3Npb25CZWFuUmVtb3RlLmphdmEKQEAgLTI1LDggKzI1LDggQEAKIEBSZW1vdGUKIHB1YmxpYyBpbnRlcmZhY2UgTXlTZXNzaW9uQmVhblJlbW90ZSB7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUmVtb3RlSk5ESU5hbWUgPSAgTXlTZXNzaW9uQmVhbi5jbGFzcy5nZXRTaW1wbGVOYW1lKCkgKyAiL3JlbW90ZSI7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZW5kTWVzc2FnZShTdHJpbmcgdGV4dCk7Ci0gICAgCisKICAgICBwdWJsaWMgaW50IGNoZWNrTWVzc2FnZShTdHJpbmcgdGV4dCwgaW50IGV4cGVjdGVkQ291bnQpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL21kYkRlc3QvZWpiL05ld01lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvbWRiRGVzdC9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQppbmRleCAxYjE5NGVmLi4zMzA5ODU5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvbWRiRGVzdC9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvbWRiRGVzdC9lamIvTmV3TWVzc2FnZUJlYW4uamF2YQpAQCAtMjksOSArMjksOSBAQAogfSkKIHB1YmxpYyBjbGFzcyBOZXdNZXNzYWdlQmVhbiBpbXBsZW1lbnRzIE1lc3NhZ2VMaXN0ZW5lciB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoTmV3TWVzc2FnZUJlYW4uY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGludCBjb3VudDsKLSAgICAKKwogICAgIEBSZXNvdXJjZQogICAgIHByaXZhdGUgTWVzc2FnZURyaXZlbkNvbnRleHQgbWRjOwogCkBAIC00MiwxMCArNDIsMTAgQEAKICAgICBASk1TQ29ubmVjdGlvbkZhY3RvcnkoImptcy9qbXNfdW5pdF90ZXN0X1FDRiIpCiAgICAgQEpNU1Nlc3Npb25Nb2RlKEpNU0NvbnRleHQuQVVUT19BQ0tOT1dMRURHRSkKICAgICBwcml2YXRlIEpNU0NvbnRleHQgam1zQ29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyBOZXdNZXNzYWdlQmVhbigpIHsKICAgICB9Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBAVHJhbnNhY3Rpb25BdHRyaWJ1dGUoVHJhbnNhY3Rpb25BdHRyaWJ1dGVUeXBlLk5PVF9TVVBQT1JURUQpCiAgICAgcHVibGljIHZvaWQgb25NZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL21kYkRlc3QvZWpiL05ld01lc3NhZ2VCZWFuMS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL21kYkRlc3QvZWpiL05ld01lc3NhZ2VCZWFuMS5qYXZhCmluZGV4IDBmY2EwMzEuLjc4Y2MyMTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9tZGJEZXN0L2VqYi9OZXdNZXNzYWdlQmVhbjEuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvbWRiRGVzdC9lamIvTmV3TWVzc2FnZUJlYW4xLmphdmEKQEAgLTI5LDkgKzI5LDkgQEAKIH0pCiBwdWJsaWMgY2xhc3MgTmV3TWVzc2FnZUJlYW4xIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbi5jbGFzcy5nZXROYW1lKCkpOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50OwotICAgIAorCiAgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7CiAKQEAgLTQyLDEwICs0MiwxMCBAQAogICAgIEBKTVNDb25uZWN0aW9uRmFjdG9yeSgiam1zL2ptc191bml0X3Rlc3RfUUNGIikKICAgICBASk1TU2Vzc2lvbk1vZGUoSk1TQ29udGV4dC5BVVRPX0FDS05PV0xFREdFKQogICAgIHByaXZhdGUgSk1TQ29udGV4dCBqbXNDb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIE5ld01lc3NhZ2VCZWFuMSgpIHsKICAgICB9Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBAVHJhbnNhY3Rpb25BdHRyaWJ1dGUoVHJhbnNhY3Rpb25BdHRyaWJ1dGVUeXBlLk5PVF9TVVBQT1JURUQpCiAgICAgcHVibGljIHZvaWQgb25NZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL21kYkRlc3QvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL21kYkRlc3QvZWpiL05ld01lc3NhZ2VCZWFuMi5qYXZhCmluZGV4IDhkNTU1MGMuLjY5ZGI5OTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9tZGJEZXN0L2VqYi9OZXdNZXNzYWdlQmVhbjIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvbWRiRGVzdC9lamIvTmV3TWVzc2FnZUJlYW4yLmphdmEKQEAgLTI5LDkgKzI5LDkgQEAKIH0pCiBwdWJsaWMgY2xhc3MgTmV3TWVzc2FnZUJlYW4yIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbi5jbGFzcy5nZXROYW1lKCkpOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50OwotICAgIAorCiAgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7CiAKQEAgLTQyLDEwICs0MiwxMCBAQAogICAgIEBKTVNDb25uZWN0aW9uRmFjdG9yeSgiam1zL2ptc191bml0X3Rlc3RfUUNGIikKICAgICBASk1TU2Vzc2lvbk1vZGUoSk1TQ29udGV4dC5BVVRPX0FDS05PV0xFREdFKQogICAgIHByaXZhdGUgSk1TQ29udGV4dCBqbXNDb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIE5ld01lc3NhZ2VCZWFuMigpIHsKICAgICB9Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBAVHJhbnNhY3Rpb25BdHRyaWJ1dGUoVHJhbnNhY3Rpb25BdHRyaWJ1dGVUeXBlLk5PVF9TVVBQT1JURUQpCiAgICAgcHVibGljIHZvaWQgb25NZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL21kYkRlc3QvZWpiL05ld01lc3NhZ2VCZWFuMy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL21kYkRlc3QvZWpiL05ld01lc3NhZ2VCZWFuMy5qYXZhCmluZGV4IDc3MDQ1ZTcuLjQwZmFkOTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9tZGJEZXN0L2VqYi9OZXdNZXNzYWdlQmVhbjMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvbWRiRGVzdC9lamIvTmV3TWVzc2FnZUJlYW4zLmphdmEKQEAgLTI5LDkgKzI5LDkgQEAKIH0pCiBwdWJsaWMgY2xhc3MgTmV3TWVzc2FnZUJlYW4zIGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbi5jbGFzcy5nZXROYW1lKCkpOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50OwotICAgIAorCiAgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7CiAKQEAgLTQyLDEwICs0MiwxMCBAQAogICAgIEBKTVNDb25uZWN0aW9uRmFjdG9yeSgiam1zL2ptc191bml0X3Rlc3RfUUNGIikKICAgICBASk1TU2Vzc2lvbk1vZGUoSk1TQ29udGV4dC5BVVRPX0FDS05PV0xFREdFKQogICAgIHByaXZhdGUgSk1TQ29udGV4dCBqbXNDb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIE5ld01lc3NhZ2VCZWFuMygpIHsKICAgICB9Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBAVHJhbnNhY3Rpb25BdHRyaWJ1dGUoVHJhbnNhY3Rpb25BdHRyaWJ1dGVUeXBlLk5PVF9TVVBQT1JURUQpCiAgICAgcHVibGljIHZvaWQgb25NZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL21kYkRlc3QvZWpiL05ld01lc3NhZ2VCZWFuNC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL21kYkRlc3QvZWpiL05ld01lc3NhZ2VCZWFuNC5qYXZhCmluZGV4IGYwMjFjMzUuLjJhNWRkMGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9tZGJEZXN0L2VqYi9OZXdNZXNzYWdlQmVhbjQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvbWRiRGVzdC9lamIvTmV3TWVzc2FnZUJlYW40LmphdmEKQEAgLTI5LDkgKzI5LDkgQEAKIH0pCiBwdWJsaWMgY2xhc3MgTmV3TWVzc2FnZUJlYW40IGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbi5jbGFzcy5nZXROYW1lKCkpOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50OwotICAgIAorCiAgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7CiAKQEAgLTQyLDEwICs0MiwxMCBAQAogICAgIEBKTVNDb25uZWN0aW9uRmFjdG9yeSgiam1zL2ptc191bml0X3Rlc3RfUUNGIikKICAgICBASk1TU2Vzc2lvbk1vZGUoSk1TQ29udGV4dC5BVVRPX0FDS05PV0xFREdFKQogICAgIHByaXZhdGUgSk1TQ29udGV4dCBqbXNDb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIE5ld01lc3NhZ2VCZWFuNCgpIHsKICAgICB9Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBAVHJhbnNhY3Rpb25BdHRyaWJ1dGUoVHJhbnNhY3Rpb25BdHRyaWJ1dGVUeXBlLk5PVF9TVVBQT1JURUQpCiAgICAgcHVibGljIHZvaWQgb25NZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL21kYkRlc3QvZWpiL05ld01lc3NhZ2VCZWFuNS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL21kYkRlc3QvZWpiL05ld01lc3NhZ2VCZWFuNS5qYXZhCmluZGV4IDkwMTUzY2UuLmNmN2QwOWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9tZGJEZXN0L2VqYi9OZXdNZXNzYWdlQmVhbjUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvbWRiRGVzdC9lamIvTmV3TWVzc2FnZUJlYW41LmphdmEKQEAgLTMwLDkgKzMwLDkgQEAKIH0pCiBwdWJsaWMgY2xhc3MgTmV3TWVzc2FnZUJlYW41IGltcGxlbWVudHMgTWVzc2FnZUxpc3RlbmVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihOZXdNZXNzYWdlQmVhbi5jbGFzcy5nZXROYW1lKCkpOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50OwotICAgIAorCiAgICAgQFJlc291cmNlCiAgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7CiAKQEAgLTQzLDEwICs0MywxMCBAQAogICAgIEBKTVNDb25uZWN0aW9uRmFjdG9yeSgiam1zL2ptc191bml0X3Rlc3RfUUNGIikKICAgICBASk1TU2Vzc2lvbk1vZGUoSk1TQ29udGV4dC5BVVRPX0FDS05PV0xFREdFKQogICAgIHByaXZhdGUgSk1TQ29udGV4dCBqbXNDb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIE5ld01lc3NhZ2VCZWFuNSgpIHsKICAgICB9Ci0gICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBAVHJhbnNhY3Rpb25BdHRyaWJ1dGUoVHJhbnNhY3Rpb25BdHRyaWJ1dGVUeXBlLk5PVF9TVVBQT1JURUQpCiAgICAgcHVibGljIHZvaWQgb25NZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL21zZ2Rlc3QvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL21zZ2Rlc3QvYnVpbGQueG1sCmluZGV4IDhlMGU1YzYuLjk5Y2NmM2MgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9tc2dkZXN0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvbXNnZGVzdC9idWlsZC54bWwKQEAgLTMwLDEwICszMCwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+Ci0JCVVzYWdlOgotCQkJYW50IGptc3dlYiAoRXhlY3V0ZXMgdGhlIGptcy1tc2dkZXN0IGptc3dlYiB0ZXN0KQotCQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBqbXMtbXNnZGVzdCB0ZXN0cykKLQk8L2VjaG8+CisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IGptc3dlYiAoRXhlY3V0ZXMgdGhlIGptcy1tc2dkZXN0IGptc3dlYiB0ZXN0KQorICAgICAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBqbXMtbXNnZGVzdCB0ZXN0cykKKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvbXNnZGVzdC9qbXN3ZWIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9tc2dkZXN0L2ptc3dlYi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGI4MGJlNGMuLjcwNjU1YzUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9tc2dkZXN0L2ptc3dlYi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9tc2dkZXN0L2ptc3dlYi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMyArMTUsMjMgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9Imptcy1tc2dkZXN0LWptc3dlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9tc2dkZXN0L2ptc3dlYi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvbXNnZGVzdC9qbXN3ZWIvYnVpbGQueG1sCmluZGV4IDBlMzIwYmYuLjhmMTkyZWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9tc2dkZXN0L2ptc3dlYi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL21zZ2Rlc3Qvam1zd2ViL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ4LDMwICs0OCwzMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC13YXIiPgotCSA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0vYS9iIi8+Ci0gIAk8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2Utd2FyLWNvbW1vbiI+Ci0gICAgCQk8cGFyYW0gbmFtZT0id2FyLmNsYXNzZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgotICAgIAkJPHBhcmFtIG5hbWU9Indhci5maWxlIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9L2EvYi8ke2FwcG5hbWV9LXdlYi53YXIiLz4KLSAgCTwvYW50Y2FsbD4KKyAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9L2EvYiIvPgorICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLXdhci1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9Indhci5jbGFzc2VzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3YXIuZmlsZSIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS9hL2IvJHthcHBuYW1lfS13ZWIud2FyIi8+CisgICAgICA8L2FudGNhbGw+CiAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUsIGJ1aWxkLXdhciI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkJlYW4qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9Indhci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3YXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9IioqLypTZXJ2bGV0Ki5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi8qQ2xpZW50Ki5jbGFzcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgotCTxlYXIgZWFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIiB1cGRhdGU9InRydWUiPgotICAgIAkJPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgotICAgICAgCQkJPGluY2x1ZGUgbmFtZT0iYS9iLyoud2FyIi8+Ci0gICAgCQk8L2ZpbGVzZXQ+Ci0JPC9lYXI+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8ZWFyIGVhcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIgdXBkYXRlPSJ0cnVlIj4KKyAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KKyAgICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9ImEvYi8qLndhciIvPgorICAgICAgICAgICAgPC9maWxlc2V0PgorICAgIDwvZWFyPgorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtODEsNyArODEsNyBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJjcmVhdGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTkzLDE0ICs5MywxNCBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IiR7aHR0cC5ob3N0fSAke2h0dHAucG9ydH0iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL21zZ2Rlc3Qvam1zd2ViL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9tc2dkZXN0L2ptc3dlYi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggYzUyZDY4OS4uNTcyNGYzMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL21zZ2Rlc3Qvam1zd2ViL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvbXNnZGVzdC9qbXN3ZWIvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci5TaW1wbGVSZXBvcnRlckFkYXB0ZXI7CiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewotICAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgaG9zdDsKICAgICBwcml2YXRlIFN0cmluZyBwb3J0OwogCkBAIC0zNSwyMyArMzUsMjMgQEAKICAgICAgICAgaG9zdCA9ICggYXJncy5sZW5ndGggPiAwKSA/IGFyZ3NbMF0gOiAibG9jYWxob3N0IjsKICAgICAgICAgcG9ydCA9ICggYXJncy5sZW5ndGggPiAxKSA/IGFyZ3NbMV0gOiAiNDg0OCI7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJqbXMtbXNnZGVzdC1qbXN3ZWIiKTsKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImptcy1tc2dkZXN0LWptc3dlYklEIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgZW52ID0gbnVsbDsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIAorICAgICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsKICAgICAgICAgICAgICAgICAiL2ptcy1tc2dkZXN0LWptc3dlYi9qbXNzZXJ2bGV0IjsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW52b2tpbmcgam1zd2ViIHNlcnZsZXQgYXQgIiArIHVybCk7CiAgICAgICAgICAgICBpbnQgY29kZSA9IGludm9rZVNlcnZsZXQodXJsKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZihjb2RlICE9IDIwMCkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW5jb3JyZWN0IHJldHVybiBjb2RlOiAiICsgY29kZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImptc3dlYiBtYWluIiwgc3RhdC5GQUlMKTsKQEAgLTYzLDE1ICs2MywxNSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImptc3dlYiBtYWluIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybjsKLSAgICAgICAgCisKICAgICB9CiAKICAgICBwcml2YXRlIGludCBpbnZva2VTZXJ2bGV0KFN0cmluZyB1cmwpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAgICAgCisKICAgICAgICAgVVJMIHUgPSBuZXcgVVJMKHVybCk7Ci0gICAgICAgIAorCiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGMxID0gKEh0dHBVUkxDb25uZWN0aW9uKXUub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgaW50IGNvZGUgPSBjMS5nZXRSZXNwb25zZUNvZGUoKTsKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBjMS5nZXRJbnB1dFN0cmVhbSgpOwpAQCAtODQsNiArODQsNiBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjb2RlOwogICAgIH0KLSAgICAKKwogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvbXNnZGVzdC9qbXN3ZWIvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL21zZ2Rlc3Qvam1zd2ViL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCBhYzg1ZDc3Li4wN2M1MjQwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvbXNnZGVzdC9qbXN3ZWIvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9tc2dkZXN0L2ptc3dlYi9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTM1LDcgKzM1LDcgQEAKICAgICAgPHJlcy1yZWYtbmFtZT5qbXMvTXlRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5PC9yZXMtcmVmLW5hbWU+CiAgICAgIDxyZXMtdHlwZT5qYWthcnRhLmptcy5RdWV1ZUNvbm5lY3Rpb25GYWN0b3J5PC9yZXMtdHlwZT4KICAgICAgPHJlcy1hdXRoPkNvbnRhaW5lcjwvcmVzLWF1dGg+Ci0gICAgIDxyZXMtc2hhcmluZy1zY29wZT5TaGFyZWFibGU8L3Jlcy1zaGFyaW5nLXNjb3BlPiAKKyAgICAgPHJlcy1zaGFyaW5nLXNjb3BlPlNoYXJlYWJsZTwvcmVzLXNoYXJpbmctc2NvcGU+CiAgIDwvcmVzb3VyY2UtcmVmPgogICA8bWVzc2FnZS1kZXN0aW5hdGlvbi1yZWY+CiAgICAgIDxkZXNjcmlwdGlvbj5pbnRyYS13YXIgZGVzdGluYXRpb248L2Rlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL21zZ2Rlc3Qvam1zd2ViL2VqYi9NZXNzYWdlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL21zZ2Rlc3Qvam1zd2ViL2VqYi9NZXNzYWdlQmVhbi5qYXZhCmluZGV4IGEyNDczYmUuLjljZTQzMDcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9tc2dkZXN0L2ptc3dlYi9lamIvTWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvbXNnZGVzdC9qbXN3ZWIvZWpiL01lc3NhZ2VCZWFuLmphdmEKQEAgLTIyLDcgKzIyLDcgQEAKIGltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKIGltcG9ydCBqYXZheC5uYW1pbmcuKjsKIAotcHVibGljIGNsYXNzIE1lc3NhZ2VCZWFuICAKK3B1YmxpYyBjbGFzcyBNZXNzYWdlQmVhbgogICAgIGltcGxlbWVudHMgTWVzc2FnZURyaXZlbkJlYW4sIE1lc3NhZ2VMaXN0ZW5lciB7CiAgICAgcHJpdmF0ZSBNZXNzYWdlRHJpdmVuQ29udGV4dCBtZGM7CiAKQEAgLTM0LDE2ICszNCwxNiBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldE1lc3NhZ2VEcml2ZW5Db250ZXh0KE1lc3NhZ2VEcml2ZW5Db250ZXh0IG1kYykgewotCXRoaXMubWRjID0gbWRjOwotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gTWVzc2FnZURyaXZlbkVKQjo6c2V0TWVzc2FnZURyaXZlbkNvbnRleHQgISEiKTsKKyAgICB0aGlzLm1kYyA9IG1kYzsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIE1lc3NhZ2VEcml2ZW5FSkI6OnNldE1lc3NhZ2VEcml2ZW5Db250ZXh0ICEhIik7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBNZXNzYWdlRHJpdmVuRUpCOjplamJDcmVhdGUgISEiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIE1lc3NhZ2VEcml2ZW5FSkI6OmVqYkNyZWF0ZSAhISIpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIE1lc3NhZ2VEcml2ZW5FSkI6OmVqYlJlbW92ZSAhISIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gTWVzc2FnZURyaXZlbkVKQjo6ZWpiUmVtb3ZlICEhIik7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvbXNnZGVzdC9qbXN3ZWIvc2VydmxldC9KbXNTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvbXNnZGVzdC9qbXN3ZWIvc2VydmxldC9KbXNTZXJ2bGV0LmphdmEKaW5kZXggNWFmZGJkMy4uMWVmYTA0OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL21zZ2Rlc3Qvam1zd2ViL3NlcnZsZXQvSm1zU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9tc2dkZXN0L2ptc3dlYi9zZXJ2bGV0L0ptc1NlcnZsZXQuamF2YQpAQCAtMzIsMjEgKzMyLDIxIEBACiAgICAgcHJpdmF0ZSBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHFjRmFjdG9yeTsKIAogICAgIHB1YmxpYyB2b2lkICBpbml0KCBTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gam1zc2VydmxldC4uLiBpbml0KCkiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXJ2aWNlICggSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSAsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCApIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgICAgICAgIAorCiAgICAgICAgIHJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwLmdldFdyaXRlcigpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogCiAgICAgICAgICAgICBJbml0aWFsQ29udGV4dCBjb250ZXh0ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAKLSAgICAgICAgICAgIFVzZXJUcmFuc2FjdGlvbiB1c2VyVHggPSAoVXNlclRyYW5zYWN0aW9uKSAKKyAgICAgICAgICAgIFVzZXJUcmFuc2FjdGlvbiB1c2VyVHggPSAoVXNlclRyYW5zYWN0aW9uKQogICAgICAgICAgICAgICAgIGNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvVXNlclRyYW5zYWN0aW9uIik7CiAKICAgICAgICAgICAgIHFjRmFjdG9yeSA9IChRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5KSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9qbXMvTXlRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5Iik7CkBAIC02NiwyMCArNjYsMjAgQEAKIAogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxIVE1MPiA8SEVBRD4gPFRJVExFPiBKTVMgU2VydmxldCBPdXRwdXQgPC9USVRMRT4gPC9IRUFEPiA8Qk9EWSBCR0NPTE9SPXdoaXRlPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxDRU5URVI+IDxGT05UIHNpemU9KzEgQ09MT1I9Ymx1ZT5EYXRhYmFzZVNlcnZlbHQgOjogQWxsIGluZm9ybWF0aW9uIEkgY2FuIGdpdmUgPC9GT05UPiA8L0NFTlRFUj4gPHA+ICIgKTsKLSAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gQ29udGV4dCBQYXRoIDogIDwvRk9OVD4gIiArIHJlcS5nZXRDb250ZXh0UGF0aCgpICsgIjxicj4iICk7IAotICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBTZXJ2bGV0IFBhdGggOiAgPC9GT05UPiAiICsgcmVxLmdldFNlcnZsZXRQYXRoKCkgKyAiPGJyPiIgKTsgCi0gICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IFBhdGggSW5mbyA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0UGF0aEluZm8oKSArICI8YnI+IiApOyAKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gQ29udGV4dCBQYXRoIDogIDwvRk9OVD4gIiArIHJlcS5nZXRDb250ZXh0UGF0aCgpICsgIjxicj4iICk7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IFNlcnZsZXQgUGF0aCA6ICA8L0ZPTlQ+ICIgKyByZXEuZ2V0U2VydmxldFBhdGgoKSArICI8YnI+IiApOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBQYXRoIEluZm8gOiAgPC9GT05UPiAiICsgcmVxLmdldFBhdGhJbmZvKCkgKyAiPGJyPiIgKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L0JPRFk+IDwvSFRNTD4gIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9Y2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImptc3NlcnZsZXQgdGVzdCBmYWlsZWQiKTsKICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGV4KTsKLSAgICAgICAgfSAKKyAgICAgICAgfQogICAgIH0KIAogICAgIC8qKgotICAgICAqIFNlbmQgYSBtZXNzYWdlLiAKKyAgICAgKiBTZW5kIGEgbWVzc2FnZS4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIHNlbmRNZXNzYWdlKFN0cmluZyBtc2cpIHRocm93cyBKTVNFeGNlcHRpb24gewogICAgICAgICBRdWV1ZUNvbm5lY3Rpb24gY29ubmVjdGlvbiA9IG51bGw7CkBAIC0xMjksOSArMTI5LDkgQEAKICAgICAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHt9CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCAgZGVzdHJveSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbiBqbXNzZXJ2bGV0IGRlc3Ryb3kiKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9ydW5fdGVzdC5zaCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL2ptcy9ydW5fdGVzdC5zaAppbmRleCAxYzhhNjQzLi5hZDIyOTYyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9qbXMvcnVuX3Rlc3Quc2gKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvam1zL3J1bl90ZXN0LnNoCkBAIC0xOCw3ICsxOCw3IEBACiBsaXN0X3Rlc3RfaWRzKCl7CiAgIGVjaG8gam1zX2FsbAogfQotIAorCiB0ZXN0X3J1bigpewogICBjZCAke0FQU19IT01FfS9kZXZ0ZXN0cy9qbXMKICAgYW50ICR7VEFSR0VUfSB8IHRlZSAke1RFU1RfUlVOX0xPR30KQEAgLTM0LDEzICszNCwxMyBAQAogICBnZW5lcmF0ZV9qdW5pdF9yZXBvcnQgJHsxfQogICBjaGFuZ2VfanVuaXRfcmVwb3J0X2NsYXNzX25hbWVzCiB9Ci0gCisKIGdldF90ZXN0X3RhcmdldCgpewotCWNhc2UgJHsxfSBpbgotCQlqbXNfYWxsICkKLQkJCVRBUkdFVD1hbGwKLQkJCWV4cG9ydCBUQVJHRVQ7OwotCWVzYWMKKyAgICBjYXNlICR7MX0gaW4KKyAgICAgICAgam1zX2FsbCApCisgICAgICAgICAgICBUQVJHRVQ9YWxsCisgICAgICAgICAgICBleHBvcnQgVEFSR0VUOzsKKyAgICBlc2FjCiB9CiAKIE9QVD0kezF9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2J1aWxkLnhtbAppbmRleCA0ZTQ5ODQ0Li4wNmJlODBkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9idWlsZC54bWwKQEAgLTMzLDI1ICszMywyNSBAQAogPHByb3BlcnR5IGZpbGU9ImJ1aWxkLnByb3BlcnRpZXMiIC8+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCI+Ci0JPGRlbGV0ZT4KKyAgICA8ZGVsZXRlPgogICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LkFQU19IT01FfSIgaW5jbHVkZXM9InRlc3RfcmVzdWx0cyoiLz4KICAgICAgICAgPC9kZWxldGU+CiAgICAgICAgIDxkZWxldGU+CiAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9Iioub3V0cHV0Ii8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgICAgICA8cmVjb3JkIG5hbWU9Im5hbWluZy5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiIC8+Ci0JPGFudCBkaXI9ImV4dGVybmFsbmFtZXNlcnZpY2Vsb29rdXAiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9ImluamVjdGlvbiIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0ibGlzdGpuZGkiIHRhcmdldD0iYWxsIi8+Ci08IS0tCTxhbnQgZGlyPSJsb2FkYmFsYW5jaW5nIiB0YXJnZXQ9ImFsbCIvPiAtLT4KLQk8YW50IGRpcj0ibG9va3VwIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJuYW1pbmcyIiB0YXJnZXQ9ImFsbCIvPiAgCi08IS0tCTxhbnQgZGlyPSJub25mYWlsb3ZlciIgdGFyZ2V0PSJhbGwiLz4gLS0+Ci0JPGFudCBkaXI9Im9yYl9hbm5vdGF0aW9uIiB0YXJnZXQ9ImFsbCIvPgotPCEtLQk8YW50IGRpcj0idmlzaWJyb2tlci9sb29rdXAiIHRhcmdldD0iYWxsIj4KLQk8YW50IGRpcj0idmlzaWJyb2tlci9ybWlpaW9wIiB0YXJnZXQ9ImFsbCI+IC0tPgotCTxyZWNvcmQgbmFtZT0ibmFtaW5nLm91dHB1dCIgYWN0aW9uPSJzdG9wIiAvPgotCQorICAgIDxhbnQgZGlyPSJleHRlcm5hbG5hbWVzZXJ2aWNlbG9va3VwIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJpbmplY3Rpb24iIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9Imxpc3RqbmRpIiB0YXJnZXQ9ImFsbCIvPgorPCEtLSAgICA8YW50IGRpcj0ibG9hZGJhbGFuY2luZyIgdGFyZ2V0PSJhbGwiLz4gLS0+CisgICAgPGFudCBkaXI9Imxvb2t1cCIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0ibmFtaW5nMiIgdGFyZ2V0PSJhbGwiLz4KKzwhLS0gICAgPGFudCBkaXI9Im5vbmZhaWxvdmVyIiB0YXJnZXQ9ImFsbCIvPiAtLT4KKyAgICA8YW50IGRpcj0ib3JiX2Fubm90YXRpb24iIHRhcmdldD0iYWxsIi8+Cis8IS0tICAgIDxhbnQgZGlyPSJ2aXNpYnJva2VyL2xvb2t1cCIgdGFyZ2V0PSJhbGwiPgorICAgIDxhbnQgZGlyPSJ2aXNpYnJva2VyL3JtaWlpb3AiIHRhcmdldD0iYWxsIj4gLS0+CisgICAgPHJlY29yZCBuYW1lPSJuYW1pbmcub3V0cHV0IiBhY3Rpb249InN0b3AiIC8+CisKICAgICA8L3RhcmdldD4KLTwvcHJvamVjdD4gICAgCis8L3Byb2plY3Q+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9leHRlcm5hbG5hbWVzZXJ2aWNlbG9va3VwL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvZXh0ZXJuYWxuYW1lc2VydmljZWxvb2t1cC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGIyNzhmZDEuLmVmZmE4Y2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9leHRlcm5hbG5hbWVzZXJ2aWNlbG9va3VwL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2V4dGVybmFsbmFtZXNlcnZpY2Vsb29rdXAvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJleHRlcm5hbG5hbWVzZXJ2aWNlbG9va3VwIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1BcHAiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LUFwcCIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0id2FyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvZXh0ZXJuYWxuYW1lc2VydmljZWxvb2t1cC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvZXh0ZXJuYWxuYW1lc2VydmljZWxvb2t1cC9idWlsZC54bWwKaW5kZXggNjhlNWYyYi4uZDkzMWJjYiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2V4dGVybmFsbmFtZXNlcnZpY2Vsb29rdXAvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9leHRlcm5hbG5hbWVzZXJ2aWNlbG9va3VwL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7ZW52LkpBVkFfSE9NRX0vYmluL2lkbGoiIGZhaWxvbmVycm9yPSJmYWxzZSI+CiAgICAgICAgICAgICA8YXJnIGxpbmU9Ii1mYWxsIHNyYy9IZWxsby5pZGwiLz4KQEAgLTUyLDQwICs1Miw0MCBAQAogICAgICAgICAgICAgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7czFhc3Rlc3QuY2xhc3NwYXRofSIKICAgICAgICAgICAgIGRlYnVnPSJvbiIKLSAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIi8+ICAgICAKKyAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIi8+CiAgICAgPC90YXJnZXQ+CiAKIAogPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgPC9hbnRjYWxsPgogPC90YXJnZXQ+CiAKICAgICA8IS0tdGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS13YXItY29tbW9uIj4gICAgICAKKyAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS13YXItY29tbW9uIj4KICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldC0tPiAKLSAgICAKLSAgIAorICAgIDwvdGFyZ2V0LS0+CisKKwogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxlY2hvIG1lc3NhZ2U9IkRlcGxveWluZyB2aWEgYXNhZG1pbi4uLiIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogCiA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bndlYmNsaWVudC1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJleHRlcm5hbG5hbWVzZXJ2aWNlbG9va3VwIi8+Ci0JPC9hbnRjYWxsPgorICAgIDxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJleHRlcm5hbG5hbWVzZXJ2aWNlbG9va3VwIi8+CisgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCiAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCi0gIAorCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvZXh0ZXJuYWxuYW1lc2VydmljZWxvb2t1cC9zcmMvSGVsbG9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9leHRlcm5hbG5hbWVzZXJ2aWNlbG9va3VwL3NyYy9IZWxsb0NsaWVudC5qYXZhCmluZGV4IDE4MDI5ZDguLjFhYzc1YTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9leHRlcm5hbG5hbWVzZXJ2aWNlbG9va3VwL3NyYy9IZWxsb0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9leHRlcm5hbG5hbWVzZXJ2aWNlbG9va3VwL3NyYy9IZWxsb0NsaWVudC5qYXZhCkBAIC0yNywyMiArMjcsMjIgQEAKICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkKICAgICB7CiAgICAgICB0cnl7Ci0JICBQcm9wZXJ0aWVzIHAyID0gbmV3IFByb3BlcnRpZXMoKTsKKyAgICAgIFByb3BlcnRpZXMgcDIgPSBuZXcgUHJvcGVydGllcygpOwogIHAyLnB1dCggIm9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbEhvc3QiLCAibG9jYWxob3N0IiApOwogICAgICAgICBwMi5wdXQoICJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0IiwgIjM3MDAiICk7Ci0JLy9wMi5wdXQoICJjb20uc3VuLkNPUkJBLk9SQlNlcnZlclBvcnQiLCIzMzcwMCIpOwotCS8vcDIucHV0KCAiY29tLnN1bi5DT1JCQS5QT0EuT1JCUGVyc2lzdGVudFNlcnZlclBvcnQiLCIzMzcwMCIpOworICAgIC8vcDIucHV0KCAiY29tLnN1bi5DT1JCQS5PUkJTZXJ2ZXJQb3J0IiwiMzM3MDAiKTsKKyAgICAvL3AyLnB1dCggImNvbS5zdW4uQ09SQkEuUE9BLk9SQlBlcnNpc3RlbnRTZXJ2ZXJQb3J0IiwiMzM3MDAiKTsKICAgICAgICAgb3JnLm9tZy5DT1JCQS5PUkIgb3JiID0gb3JnLm9tZy5DT1JCQS5PUkIuaW5pdCggbmV3IFN0cmluZ1tdeyIiLCIifSwgcDIgKTsKICAgICAgICAgLy8gY3JlYXRlIGFuZCBpbml0aWFsaXplIHRoZSBPUkIKLQkvL09SQiBvcmIgPSBPUkIuaW5pdChhcmdzLCBudWxsKTsKKyAgICAvL09SQiBvcmIgPSBPUkIuaW5pdChhcmdzLCBudWxsKTsKIAogICAgICAgICAvLyBnZXQgdGhlIHJvb3QgbmFtaW5nIGNvbnRleHQKLSAgICAgICAgb3JnLm9tZy5DT1JCQS5PYmplY3Qgb2JqUmVmID0gCi0JICAgIG9yYi5yZXNvbHZlX2luaXRpYWxfcmVmZXJlbmNlcygiTmFtZVNlcnZpY2UiKTsKLSAgICAgICAgLy8gVXNlIE5hbWluZ0NvbnRleHRFeHQgaW5zdGVhZCBvZiBOYW1pbmdDb250ZXh0LiBUaGlzIGlzIAotICAgICAgICAvLyBwYXJ0IG9mIHRoZSBJbnRlcm9wZXJhYmxlIG5hbWluZyBTZXJ2aWNlLiAgCisgICAgICAgIG9yZy5vbWcuQ09SQkEuT2JqZWN0IG9ialJlZiA9CisgICAgICAgIG9yYi5yZXNvbHZlX2luaXRpYWxfcmVmZXJlbmNlcygiTmFtZVNlcnZpY2UiKTsKKyAgICAgICAgLy8gVXNlIE5hbWluZ0NvbnRleHRFeHQgaW5zdGVhZCBvZiBOYW1pbmdDb250ZXh0LiBUaGlzIGlzCisgICAgICAgIC8vIHBhcnQgb2YgdGhlIEludGVyb3BlcmFibGUgbmFtaW5nIFNlcnZpY2UuCiAgICAgICAgIE5hbWluZ0NvbnRleHRFeHQgbmNSZWYgPSBOYW1pbmdDb250ZXh0RXh0SGVscGVyLm5hcnJvdyhvYmpSZWYpOwotIAorCiAgICAgICAgIC8vIHJlc29sdmUgdGhlIE9iamVjdCBSZWZlcmVuY2UgaW4gTmFtaW5nCiAgICAgICAgIFN0cmluZyBuYW1lID0gIkhlbGxvIjsKICAgICAgICAgaGVsbG9JbXBsID0gSGVsbG9IZWxwZXIubmFycm93KG5jUmVmLnJlc29sdmVfc3RyKG5hbWUpKTsKQEAgLTUxLDEwICs1MSwxMCBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaGVsbG9JbXBsLnNheUhlbGxvKCkpOwogICAgICAgICBoZWxsb0ltcGwuc2h1dGRvd24oKTsKIAotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVSUk9SIDogIiArIGUpIDsKLQkgIGUucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5vdXQpOwotCSAgfQorICAgICAgZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLm91dCk7CisgICAgICB9CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvZXh0ZXJuYWxuYW1lc2VydmljZWxvb2t1cC9zcmMvSGVsbG9TZXJ2ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9leHRlcm5hbG5hbWVzZXJ2aWNlbG9va3VwL3NyYy9IZWxsb1NlcnZlci5qYXZhCmluZGV4IDg4MGU2ZWQuLjc4YmE0YjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9leHRlcm5hbG5hbWVzZXJ2aWNlbG9va3VwL3NyYy9IZWxsb1NlcnZlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9leHRlcm5hbG5hbWVzZXJ2aWNlbG9va3VwL3NyYy9IZWxsb1NlcnZlci5qYXZhCkBAIC0yOSwxNCArMjksMTQgQEAKICAgcHJpdmF0ZSBPUkIgb3JiOwogCiAgIHB1YmxpYyB2b2lkIHNldE9SQihPUkIgb3JiX3ZhbCkgewotICAgIG9yYiA9IG9yYl92YWw7IAorICAgIG9yYiA9IG9yYl92YWw7CiAgIH0KLSAgICAKKwogICAvLyBpbXBsZW1lbnQgc2F5SGVsbG8oKSBtZXRob2QKICAgcHVibGljIFN0cmluZyBzYXlIZWxsbygpIHsKICAgICByZXR1cm4gIlxuSGVsbG8gd29ybGQgISFcbiI7CiAgIH0KLSAgICAKKwogICAvLyBpbXBsZW1lbnQgc2h1dGRvd24oKSBtZXRob2QKICAgcHVibGljIHZvaWQgc2h1dGRvd24oKSB7CiAgICAgb3JiLnNodXRkb3duKGZhbHNlKTsKQEAgLTU3LDEyICs1NywxMiBAQAogCiAgICAgICAvLyBjcmVhdGUgc2VydmFudCBhbmQgcmVnaXN0ZXIgaXQgd2l0aCB0aGUgT1JCCiAgICAgICBIZWxsb0ltcGwgaGVsbG9JbXBsID0gbmV3IEhlbGxvSW1wbCgpOwotICAgICAgaGVsbG9JbXBsLnNldE9SQihvcmIpOyAKKyAgICAgIGhlbGxvSW1wbC5zZXRPUkIob3JiKTsKIAogICAgICAgLy8gZ2V0IG9iamVjdCByZWZlcmVuY2UgZnJvbSB0aGUgc2VydmFudAogICAgICAgb3JnLm9tZy5DT1JCQS5PYmplY3QgcmVmID0gcm9vdHBvYS5zZXJ2YW50X3RvX3JlZmVyZW5jZShoZWxsb0ltcGwpOwogICAgICAgSGVsbG8gaHJlZiA9IEhlbGxvSGVscGVyLm5hcnJvdyhyZWYpOwotCSAgCisKICAgICAgIC8vIGdldCB0aGUgcm9vdCBuYW1pbmcgY29udGV4dAogICAgICAgLy8gTmFtZVNlcnZpY2UgaW52b2tlcyB0aGUgbmFtZSBzZXJ2aWNlCiAgICAgICBvcmcub21nLkNPUkJBLk9iamVjdCBvYmpSZWYgPQpAQCAtODAsMTYgKzgwLDE2IEBACiAKICAgICAgIC8vIHdhaXQgZm9yIGludm9jYXRpb25zIGZyb20gY2xpZW50cwogICAgICAgb3JiLnJ1bigpOwotICAgIH0gCi0JCisgICAgfQorCiAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJFUlJPUjogIiArIGUpOwogICAgICAgICBlLnByaW50U3RhY2tUcmFjZShTeXN0ZW0ub3V0KTsKICAgICAgIH0KLQkgIAorCiAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvU2VydmVyIEV4aXRpbmcgLi4uIik7Ci0JCisKICAgfQogfQotIAorCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9pbmplY3Rpb24vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9pbmplY3Rpb24vYnVpbGQucHJvcGVydGllcwppbmRleCBhODQyOTY4Li4zODYyNGZhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvaW5qZWN0aW9uL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2luamVjdGlvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMSArMTUsMTEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9Im5hbWluZy1pbmplY3Rpb24iLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+IAotPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPlx1MDAyMAorPHByb3BlcnR5IG5hbWU9ImpuZGlyb290IiB2YWx1ZT0iJHthcHBuYW1lfS1lamIiLz4gICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzZS5jbGllbnQiIHZhbHVlPSJ0ZXN0LkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImdsYXNzZmlzaC1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZ2xhc3NmaXNoLWVqYi1qYXIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvaW5qZWN0aW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9pbmplY3Rpb24vYnVpbGQueG1sCmluZGV4IDQ2ZTVlZjYuLjdlNDYzNjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9pbmplY3Rpb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9pbmplY3Rpb24vYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzYWRtaW4uZmlsZSIgdmFsdWU9ImNyZWF0ZV9yZXNvdXJjZXMuYXNhZG1pbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tYmF0Y2gtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXNhZG1pbi5maWxlIiB2YWx1ZT0iZGVsZXRlX3Jlc291cmNlcy5hc2FkbWluIi8+CkBAIC00Niw3ICs0Niw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbi13aXRoLWVuZG9yc2VkLWRpciI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC01OCwxMiArNTgsMTIgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVqYi1qYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIqKi9IZWxsbyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktamFyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNzEsOSArNzEsOSBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuX3NlIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bl9zZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgIDxqYXZhICBmb3JrPSJvbiIgCisgICAgICAgPGphdmEgIGZvcms9Im9uIgogICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIKICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qYXZhZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2dmLWNsaWVudC5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn06JHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgIGNsYXNzbmFtZT0iJHtzZS5jbGllbnR9Ij4KQEAgLTg0LDcgKzg0LDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qYXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9pbmplY3Rpb24vY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2luamVjdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggZDY3NjdmOC4uMjczMjZjNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2luamVjdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2luamVjdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTIzLDMwICsyMywzMCBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgYXBwTmFtZTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKLQlhcHBOYW1lID0gYXJnc1swXTsgCi0Jc3RhdC5hZGREZXNjcmlwdGlvbihhcHBOYW1lKTsKLQlDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsgICAgICAgCi0gICAgICAgIGNsaWVudC5kb1Rlc3QoKTsJCisgICAgYXBwTmFtZSA9IGFyZ3NbMF07CisgICAgc3RhdC5hZGREZXNjcmlwdGlvbihhcHBOYW1lKTsKKyAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKKyAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShhcHBOYW1lICsgIklEIik7CiAgICAgfQogCiAgICAgcHVibGljIENsaWVudChTdHJpbmdbXSBhcmdzKSB7fQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotCXRyeSB7CisgICAgdHJ5IHsKICAgICAgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBIZWxsbyBoZWxsb0JlYW4gPSAoSGVsbG8pIGljLmxvb2t1cCgiamF2YTpnbG9iYWwvIiArIGFwcE5hbWUgKyAiL0hlbGxvQmVhbiIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbnZva2luZyAiICsgaGVsbG9CZWFuICsgIiwgIiArIGhlbGxvQmVhbi5pbmplY3RlZFVSTCgpKTsKLQkgICAgc3RhdC5hZGRTdGF0dXMoYXBwTmFtZSwgc3RhdC5QQVNTKTsKLQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKGFwcE5hbWUsIHN0YXQuRkFJTCk7Ci0JfQorICAgICAgICBzdGF0LmFkZFN0YXR1cyhhcHBOYW1lLCBzdGF0LlBBU1MpOworICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoYXBwTmFtZSwgc3RhdC5GQUlMKTsKKyAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2luamVjdGlvbi9lamIvSGVsbG9CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvaW5qZWN0aW9uL2VqYi9IZWxsb0JlYW4uamF2YQppbmRleCBhNzhkZjk0Li5lYjgwMWE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvaW5qZWN0aW9uL2VqYi9IZWxsb0JlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvaW5qZWN0aW9uL2VqYi9IZWxsb0JlYW4uamF2YQpAQCAtNTQsNyArNTQsNyBAQAogICAgICAgICBpZihBcnJheXMuZXF1YWxzKGV4cGVjdGVkVVJMcywgYWN0dWFsVVJMcykpIHsKICAgICAgICAgICAgIHJldHVybiAoIkdvdCBleHBlY3RlZCAiICsgQXJyYXlzLnRvU3RyaW5nKGFjdHVhbFVSTHMpKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIkV4cGVjdGluZyAiICsgQXJyYXlzLnRvU3RyaW5nKGV4cGVjdGVkVVJMcykgKyAKKyAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIkV4cGVjdGluZyAiICsgQXJyYXlzLnRvU3RyaW5nKGV4cGVjdGVkVVJMcykgKwogICAgICAgICAgICAgICAgICIsIGFjdHVhbCAiICsgQXJyYXlzLnRvU3RyaW5nKGFjdHVhbFVSTHMpKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9saXN0am5kaS9MaXN0Sm5kaUVudHJpZXNUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbGlzdGpuZGkvTGlzdEpuZGlFbnRyaWVzVGVzdC5qYXZhCmluZGV4IDRkZDZhNDguLjkyZmMzOWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9saXN0am5kaS9MaXN0Sm5kaUVudHJpZXNUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xpc3RqbmRpL0xpc3RKbmRpRW50cmllc1Rlc3QuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogICovCiBwdWJsaWMgY2xhc3MgTGlzdEpuZGlFbnRyaWVzVGVzdCBleHRlbmRzIEFkbWluQmFzZURldlRlc3QgewogCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBFWFBFQ1RFRF9UT0tFTlMgPSAKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZ1tdIEVYUEVDVEVEX1RPS0VOUyA9CiAgICAgeyJVc2VyVHJhbnNhY3Rpb246IiwgImphdmE6Z2xvYmFsOiIsICJlamI6IiwgImNvbS5zdW4uZW50ZXJwcmlzZS5uYW1pbmcuaW1wbC5UcmFuc2llbnRDb250ZXh0In07CiAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJTlNUQU5DRV9SRVNPVVJDRV9OQU1FID0gIklOU1RBTkNFX1JFU09VUkNFX05BTUUiOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xpc3RqbmRpL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9saXN0am5kaS9idWlsZC54bWwKaW5kZXggZDE2NzY1Yi4uMTk3ZjgwMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xpc3RqbmRpL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbGlzdGpuZGkvYnVpbGQueG1sCkBAIC01NiwxMiArNTYsMTIgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiPgogICAgICAgICA8bWtkaXIgZGlyPSJidWlsZCIvPgotICAgICAgICA8amF2YWMgIGluY2x1ZGVBbnRSdW50aW1lPSJmYWxzZSIgZGVzdGRpcj0iYnVpbGQiIGRlYnVnPSJ0cnVlIiAKKyAgICAgICAgPGphdmFjICBpbmNsdWRlQW50UnVudGltZT0iZmFsc2UiIGRlc3RkaXI9ImJ1aWxkIiBkZWJ1Zz0idHJ1ZSIKICAgICAgICAgICAgICAgIHNyY2Rpcj0iJHtlbnYuQVBTX0hPTUV9L2RldnRlc3RzL2FkbWluL2NsaS9zcmMiIGluY2x1ZGVzPSIqKi9BZG1pbkJhc2VEZXZUZXN0LmphdmEiPgogCiAgICAgICAgICAgICA8Y2xhc3NwYXRoIHBhdGg9IiR7Y2xhc3NwYXRofSIvPgogICAgICAgICA8L2phdmFjPgotICAgICAgICA8amF2YWMgIGluY2x1ZGVBbnRSdW50aW1lPSJmYWxzZSIgCisgICAgICAgIDxqYXZhYyAgaW5jbHVkZUFudFJ1bnRpbWU9ImZhbHNlIgogICAgICAgICAgICAgICAgZGVzdGRpcj0iYnVpbGQiIGRlYnVnPSJ0cnVlIiBzcmNkaXI9Ii4iIGluY2x1ZGVzPSIqKi8qLmphdmEiPgogICAgICAgICAgICAgPGNsYXNzcGF0aCBwYXRoPSIke2NsYXNzcGF0aH0iLz4KICAgICAgICAgPC9qYXZhYz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb2FkYmFsYW5jaW5nL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb2FkYmFsYW5jaW5nL2J1aWxkLnhtbAppbmRleCBlMmFmN2FjLi5hZmQwYTY3N2MgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb2FkYmFsYW5jaW5nL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9hZGJhbGFuY2luZy9idWlsZC54bWwKQEAgLTc3LDE1ICs3NywxNSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+IFVzYWdlOgotCQlhbnQgZW5yb2xsZXIgKEV4ZWN1dGVzIHRoZSBlbnJvbGxlciB0ZXN0cykKLQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBlamIgYm1wIHRlc3RzKQotCQlhbnQgY2xlYW4gKGNsZWFucyBhbGwgdGhlIGVqYiBibXAgdGVzdHMpCi0JCWFudCBidWlsZCAoYnVpbGRzIGFsbCB0aGUgZWpiIGJtcCB0ZXN0cykKLQkJYW50IHNldHVwIChzZXRzIHVwIGFsbCByZXNvdXJjZXMgZm9yIGJtcCB0ZXN0cykKLQkJYW50IGRlcGxveSAoZGVwbG95cyBhbGwgdGhlIGVqYiBibXAgYXBwcykKLQkJYW50IHVuZGVwbG95ICh1bmRlcGxveXMgYWxsIHRoZSBibXAgYXBwcykKLQkJYW50IHVuc2V0dXAgKHVuc2V0cyBhbGwgcmVzb3VyY2VzIGZvciBibXAgdGVzdHMpCi0JPC9lY2hvPgorICAgIDxlY2hvPiBVc2FnZToKKyAgICAgICAgYW50IGVucm9sbGVyIChFeGVjdXRlcyB0aGUgZW5yb2xsZXIgdGVzdHMpCisgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgZWpiIGJtcCB0ZXN0cykKKyAgICAgICAgYW50IGNsZWFuIChjbGVhbnMgYWxsIHRoZSBlamIgYm1wIHRlc3RzKQorICAgICAgICBhbnQgYnVpbGQgKGJ1aWxkcyBhbGwgdGhlIGVqYiBibXAgdGVzdHMpCisgICAgICAgIGFudCBzZXR1cCAoc2V0cyB1cCBhbGwgcmVzb3VyY2VzIGZvciBibXAgdGVzdHMpCisgICAgICAgIGFudCBkZXBsb3kgKGRlcGxveXMgYWxsIHRoZSBlamIgYm1wIGFwcHMpCisgICAgICAgIGFudCB1bmRlcGxveSAodW5kZXBsb3lzIGFsbCB0aGUgYm1wIGFwcHMpCisgICAgICAgIGFudCB1bnNldHVwICh1bnNldHMgYWxsIHJlc291cmNlcyBmb3IgYm1wIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb2FkYmFsYW5jaW5nL2Vucm9sbGVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9hZGJhbGFuY2luZy9lbnJvbGxlci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDM3ZWZiMWUuLjc3NmQ1NWYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb2FkYmFsYW5jaW5nL2Vucm9sbGVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvYWRiYWxhbmNpbmcvZW5yb2xsZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTkgKzE1LDE5IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJsb2FkYmFsYW5jaW5nIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1BcHAiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LUFwcCIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJkZWZhdWx0LWluc3RhbmNlIiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb2FkYmFsYW5jaW5nL2Vucm9sbGVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb2FkYmFsYW5jaW5nL2Vucm9sbGVyL2J1aWxkLnhtbAppbmRleCAyNTMxNGIwLi5mZDE0NTEwIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9hZGJhbGFuY2luZy9lbnJvbGxlci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvYWRiYWxhbmNpbmcvZW5yb2xsZXIvYnVpbGQueG1sCkBAIC0zMiwxMSArMzIsMTEgQEAKICAgICAmcnVuOwogCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImNsdXN0ZXItc2V0dXAsYnVpbGQsc2V0dXAsZGVwbG95LHJ1bi1hcHBjbGllbnQxLHJ1bi1hcHBjbGllbnQyLHJ1bi1hcHBjbGllbnQzLHJ1bi1hcHBjbGllbnQ0LHVuZGVwbG95LHVuc2V0dXAsY2x1c3Rlci11bnNldHVwIi8+Ci0gICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJzcWwiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDwhLS0KICAgICAgIENsZWFuIHRoZSBkYXRhYmFzZSBhZnRlciB0aGUgcnVuIHNpbmNlIGl0IHByb2hpYml0cyByZS1ydW5uaW5nCkBAIC00OSwzNCArNDksMzQgQEAKICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IG5hbWU9InJ1bi1hcHBjbGllbnQxIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JPGVjaG8gbWVzc2FnZT0icnVubmluZyBpbiBBQ0Mgd2l0aCBTMUFTQ3R4RmFjdG9yeS4uLiIvPgotICAgCTxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiI+Ci0JICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iLXhtbCAuL2Rlc2NyaXB0b3Ivc3VuLWFjYy1sYi54bWwgMTI5LjE0NS4xMzMuNjQgMzM3MDAiLz4KLQk8L2FudGNhbGw+CisgICAgPGVjaG8gbWVzc2FnZT0icnVubmluZyBpbiBBQ0Mgd2l0aCBTMUFTQ3R4RmFjdG9yeS4uLiIvPgorICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiI+CisgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iLXhtbCAuL2Rlc2NyaXB0b3Ivc3VuLWFjYy1sYi54bWwgMTI5LjE0NS4xMzMuNjQgMzM3MDAiLz4KKyAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic3FsIi8+CiA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuLWFwcGNsaWVudDIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQk8ZWNobyBtZXNzYWdlPSJydW5uaW5nIGluIEFDQyB3aXRoIFMxQVNDdHhGYWN0b3J5Li4uIi8+Ci0gICAJPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KLQkgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIteG1sIC4vZGVzY3JpcHRvci9zdW4tYWNjLWxiMS54bWwgMTI5LjE0NS4xMzMuNjQgMzM3MDAiLz4KLQk8L2FudGNhbGw+CisgICAgPGVjaG8gbWVzc2FnZT0icnVubmluZyBpbiBBQ0Mgd2l0aCBTMUFTQ3R4RmFjdG9yeS4uLiIvPgorICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiI+CisgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iLXhtbCAuL2Rlc2NyaXB0b3Ivc3VuLWFjYy1sYjEueG1sIDEyOS4xNDUuMTMzLjY0IDMzNzAwIi8+CisgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InNxbCIvPgogPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi1hcHBjbGllbnQzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JPGVjaG8gbWVzc2FnZT0icnVubmluZyBpbiBBQ0Mgd2l0aCBTMUFTQ3R4RmFjdG9yeS4uLiIvPgotICAgCTxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiI+Ci0JICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iLXhtbCAuL2Rlc2NyaXB0b3Ivc3VuLWFjYy1sYjIueG1sIDEyOS4xNDUuMTMzLjY0IDMzNzAwIi8+Ci0JPC9hbnRjYWxsPgorICAgIDxlY2hvIG1lc3NhZ2U9InJ1bm5pbmcgaW4gQUNDIHdpdGggUzFBU0N0eEZhY3RvcnkuLi4iLz4KKyAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPgorICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9Ii14bWwgLi9kZXNjcmlwdG9yL3N1bi1hY2MtbGIyLnhtbCAxMjkuMTQ1LjEzMy42NCAzMzcwMCIvPgorICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzcWwiLz4KIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4tYXBwY2xpZW50NCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCTxlY2hvIG1lc3NhZ2U9InJ1bm5pbmcgaW4gQUNDIHdpdGggUzFBU0N0eEZhY3RvcnkuLi4iLz4KLSAgIAk8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPgotCSAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9Ii14bWwgLi9kZXNjcmlwdG9yL3N1bi1hY2MtbGIzLnhtbCAxMjkuMTQ1LjEzMy42NCAzMzcwMCIvPgotCTwvYW50Y2FsbD4KKyAgICA8ZWNobyBtZXNzYWdlPSJydW5uaW5nIGluIEFDQyB3aXRoIFMxQVNDdHhGYWN0b3J5Li4uIi8+CisgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KKyAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSIteG1sIC4vZGVzY3JpcHRvci9zdW4tYWNjLWxiMy54bWwgMTI5LjE0NS4xMzMuNjQgMzM3MDAiLz4KKyAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic3FsIi8+CiA8L3RhcmdldD4KIApAQCAtOTEsMTMgKzkxLDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovKlN0dWRlbnQqLmNsYXNzLCoqLypFbnJvbGxlciouY2xhc3MsKiovKkNvdXJzZSouY2xhc3MiIC8+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovQ291cnNlLmNsYXNzLCoqL0Vucm9sbGVyLmNsYXNzLCoqL1N0dWRlbnQuY2xhc3MsKiovKkhvbWUqLmNsYXNzLCoqLypDbGllbnQqLmNsYXNzIiAvPgogICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9kZXJieS5zcWwiLz4KQEAgLTEwNiw0NiArMTA2LDQ2IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5jb25wb29sLm5hbWUiIHZhbHVlPSJibXBFbnJvbGxlclBvb2wiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2JtcC1lbnJvbGxlckRCIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwc2VydmVyLmluc3RhbmNlLm5hbWUiIHZhbHVlPSJDMSIvPgotCTwvYW50Y2FsbD4KLQk8IS0tYW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qbXMtY29tbW9uIi8+CQotCTxhbnRjYWxsIHRhcmdldD0icmVjb25maWctY29tbW9uIi8tLT4KKyAgICA8L2FudGNhbGw+CisgICAgPCEtLWFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktam1zLWNvbW1vbiIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0icmVjb25maWctY29tbW9uIi8tLT4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICA8ZWNobyBtZXNzYWdlPSJEZXBsb3lpbmcgdmlhIGFzYWRtaW4uLi4iLz4gICAgIAorICAgICAgPGVjaG8gbWVzc2FnZT0iRGVwbG95aW5nIHZpYSBhc2FkbWluLi4uIi8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24tZWUiPgogICAgIDxwYXJhbSBuYW1lPSJlZSIgdmFsdWU9ImVudGVycHJpc2UgZWRpdGlvbiIvPgogPHBhcmFtIG5hbWU9ImFwcHNlcnZlci5pbnN0YW5jZS5uYW1lIiB2YWx1ZT0iQzEiLz4KIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogICAgIDwhLS0gVGFyZ2V0IHRvIHJ1biB0aGUgc3RhbmRhbG9uZSBjbGllbnQgd2l0aG91dCBBQ0MgLS0+CiA8IS0tLS0+CiAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KICAgICA8dGFyZ2V0IG5hbWU9InJ1bi1zdGFuZGFsb25lLWNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCTxwcm9wZXJ0eSBuYW1lPSJjbGllbnQudHlwZSIKLQkgICAgICAgICAgdmFsdWU9InN0YW5kYWxvbmUiLz4KLQk8amF2YSBjbGFzc25hbWU9ImNvbS5zdW4uczFwZXFlLmxvYWRiYWxhbmNpbmcuY2xpZW50LkVucm9sbGVyQ2xpZW50IgorICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGllbnQudHlwZSIKKyAgICAgICAgICAgICAgdmFsdWU9InN0YW5kYWxvbmUiLz4KKyAgICA8amF2YSBjbGFzc25hbWU9ImNvbS5zdW4uczFwZXFlLmxvYWRiYWxhbmNpbmcuY2xpZW50LkVucm9sbGVyQ2xpZW50IgogICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LlMxQVNfSE9NRX0vaW1xL2xpYi9pbXEuamFyOiR7ZW52LlMxQVNfSE9NRX0vaW1xL2xpYi9pbXFqbXNyYS5qYXI6JHtlbnYuUzFBU19IT01FfS9pbXEvbGliL2ptcy5qYXI6JHtzMWFzdGVzdC5jbGFzc3BhdGh9OiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwQ2xpZW50LmphciIgZmFpbG9uZXJyb3I9InRydWUiIGZvcms9InRydWUiPgotCTwhLS1qdm1hcmcgdmFsdWU9Ii1Eb3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsSG9zdD0ke2FkbWluLmhvc3R9Ii8+Ci0JPGp2bWFyZyB2YWx1ZT0iLURvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0PSR7b3JiLnBvcnR9Ii8tLT4KKyAgICA8IS0tanZtYXJnIHZhbHVlPSItRG9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbEhvc3Q9JHthZG1pbi5ob3N0fSIvPgorICAgIDxqdm1hcmcgdmFsdWU9Ii1Eb3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydD0ke29yYi5wb3J0fSIvLS0+CiAgICAgICAgIDxqdm1hcmcgdmFsdWU9Ii1EamF2YS5uYW1pbmcucHJvdmlkZXIudXJsPWlpb3A6Ly8xMjkuMTQ1LjEzMy42NDozMzcwMCIvPgogCi0JPCEtLWp2bWFyZyB2YWx1ZT0iLURjb20uc3VuLmFwcHNlcnYuaWlvcC5lbmRwb2ludHM9cGF0aGZpbmRlci5zZmJheS5zdW4uY29tOjM2OTAscGF0aGZpbmRlci5zZmJheS5zdW4uY29tOjM4ODAiLy0tPgotCTxqdm1hcmcgdmFsdWU9Ii1EY29tLnN1bi5hcHBzZXJ2Lmlpb3AubG9hZGJhbGFuY2luZ3BvbGljeT1pYy1iYXNlZCIvPgotCTxhcmcgdmFsdWU9IjEyOS4xNDUuMTMzLjY0Ii8+Ci0JPGFyZyB2YWx1ZT0iMzM3MDAiLz4KLQk8YXJnIHZhbHVlPSIke2NsaWVudC50eXBlfSIvPgorICAgIDwhLS1qdm1hcmcgdmFsdWU9Ii1EY29tLnN1bi5hcHBzZXJ2Lmlpb3AuZW5kcG9pbnRzPXBhdGhmaW5kZXIuc2ZiYXkuc3VuLmNvbTozNjkwLHBhdGhmaW5kZXIuc2ZiYXkuc3VuLmNvbTozODgwIi8tLT4KKyAgICA8anZtYXJnIHZhbHVlPSItRGNvbS5zdW4uYXBwc2Vydi5paW9wLmxvYWRiYWxhbmNpbmdwb2xpY3k9aWMtYmFzZWQiLz4KKyAgICA8YXJnIHZhbHVlPSIxMjkuMTQ1LjEzMy42NCIvPgorICAgIDxhcmcgdmFsdWU9IjMzNzAwIi8+CisgICAgPGFyZyB2YWx1ZT0iJHtjbGllbnQudHlwZX0iLz4KICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KIAotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iPiAgICAgIAorICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iPgogICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcHNlcnZlci5pbnN0YW5jZS5uYW1lIiB2YWx1ZT0iQzEiLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICAgPC90YXJnZXQ+ICAgCisgICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1bnNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8IS0tYW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWptcy1jb21tb24iLy0tPgpAQCAtMTU3LDcgKzE1Nyw3IEBACiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL2JtcC1lbnJvbGxlckRCIi8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZSIgdmFsdWU9IkMxIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb2FkYmFsYW5jaW5nL2Vucm9sbGVyL2NsaWVudC9FbnJvbGxlckNsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvYWRiYWxhbmNpbmcvZW5yb2xsZXIvY2xpZW50L0Vucm9sbGVyQ2xpZW50LmphdmEKaW5kZXggNzA4YjU0NS4uN2ZhNTMzYyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvYWRiYWxhbmNpbmcvZW5yb2xsZXIvY2xpZW50L0Vucm9sbGVyQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvYWRiYWxhbmNpbmcvZW5yb2xsZXIvY2xpZW50L0Vucm9sbGVyQ2xpZW50LmphdmEKQEAgLTM2LDIwICszNiwyMCBAQAogICAgIHByaXZhdGUgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7IAotICAgICAgICBFbnJvbGxlckNsaWVudCBjbGllbnQgPSBuZXcgRW5yb2xsZXJDbGllbnQoKTsgCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBFbnJvbGxlckNsaWVudCBjbGllbnQgPSBuZXcgRW5yb2xsZXJDbGllbnQoKTsKIAogICAgICAgICAvLyBydW4gdGhlIHRlc3RzCi0gICAgICAgIGNsaWVudC5ydW5UZXN0Q2xpZW50KGFyZ3MpOyAgIAorICAgICAgICBjbGllbnQucnVuVGVzdENsaWVudChhcmdzKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBydW5UZXN0Q2xpZW50KFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgdHJ5ewotCSAgICBIYXNodGFibGUgZW52ID0gbmV3IEhhc2h0YWJsZSgpOworICAgICAgICBIYXNodGFibGUgZW52ID0gbmV3IEhhc2h0YWJsZSgpOwogICAgICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVGVzdGluZyBsb2FkYmFsYW5jaW5nIGFwcCAuLi4iKTsKIAogICAgICAgICAgICAgdGVzdDAxKGVudiwgYXJncyk7Ci0JICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJsb2FkYmFsYW5jaW5nQXBwSUQiKTsKKyAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImxvYWRiYWxhbmNpbmdBcHBJRCIpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhjZXB0aW9uIGluIHJ1blRlc3RDbGllbnQ6ICIgKyBleC50b1N0cmluZygpKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwpAQCAtNTgsMTMxICs1OCwxMzEgQEAKIAogCiAgICAgcHJpdmF0ZSB2b2lkIHRlc3QwMShIYXNodGFibGUgZW52LCBTdHJpbmdbXSBhcmdzKSB7Ci0gICAgICAgIAotICAgICAgICB0cnkgewotICAJICAgIGVudi5wdXQoImphdmEubmFtaW5nLmZhY3RvcnkuaW5pdGlhbCIsCi0JCSAgImNvbS5zdW4uYXBwc2Vydi5uYW1pbmcuUzFBU0N0eEZhY3RvcnkiKTsKLQkgICAgQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KGVudik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2luZyB1cCBNRUpCLi4uIik7Ci0JICAgIE9iamVjdCBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiZWpiL21nbXQvTUVKQiIpOyAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29rZWQgdXAgZWpiL21nbXQvTUVKQiB3aXRoIGNvbnRleHQgMCIpOwogCi0JICAgIFN0cmluZyBqbmRpID0gIiI7CSAKLQkgICAgaWYgKGFyZ3MubGVuZ3RoID09IDMgJiYgYXJnc1syXS5lcXVhbHMoInN0YW5kYWxvbmUiKSkgewotCSAgICAgICAgam5kaSA9ICJlamIvTXlTdHVkZW50IjsKLQkgICAgfSBlbHNlIGpuZGkgPSAiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlU3R1ZGVudCI7Ci0JICAgIENvbnRleHQgaW5pdGlhbDEgPSBuZXcgSW5pdGlhbENvbnRleHQoZW52KTsKLQkgICAgb2JqcmVmID0gaW5pdGlhbDEubG9va3VwKGpuZGkpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tlZCB1cCAiICsgam5kaSArICIgd2l0aCBjb250ZXh0IDEiKTsKLQkgICAgU3R1ZGVudEhvbWUgc0hvbWUgPSAKLQkgICAgICAoU3R1ZGVudEhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIAotCQkJCQkJCVN0dWRlbnRIb21lLmNsYXNzKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICBlbnYucHV0KCJqYXZhLm5hbWluZy5mYWN0b3J5LmluaXRpYWwiLAorICAgICAgICAgICJjb20uc3VuLmFwcHNlcnYubmFtaW5nLlMxQVNDdHhGYWN0b3J5Iik7CisgICAgICAgIENvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dChlbnYpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tpbmcgdXAgTUVKQi4uLiIpOworICAgICAgICBPYmplY3Qgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImVqYi9tZ210L01FSkIiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29rZWQgdXAgZWpiL21nbXQvTUVKQiB3aXRoIGNvbnRleHQgMCIpOworCisgICAgICAgIFN0cmluZyBqbmRpID0gIiI7CisgICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PSAzICYmIGFyZ3NbMl0uZXF1YWxzKCJzdGFuZGFsb25lIikpIHsKKyAgICAgICAgICAgIGpuZGkgPSAiZWpiL015U3R1ZGVudCI7CisgICAgICAgIH0gZWxzZSBqbmRpID0gImphdmE6Y29tcC9lbnYvZWpiL1NpbXBsZVN0dWRlbnQiOworICAgICAgICBDb250ZXh0IGluaXRpYWwxID0gbmV3IEluaXRpYWxDb250ZXh0KGVudik7CisgICAgICAgIG9ianJlZiA9IGluaXRpYWwxLmxvb2t1cChqbmRpKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29rZWQgdXAgIiArIGpuZGkgKyAiIHdpdGggY29udGV4dCAxIik7CisgICAgICAgIFN0dWRlbnRIb21lIHNIb21lID0KKyAgICAgICAgICAoU3R1ZGVudEhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3R1ZGVudEhvbWUuY2xhc3MpOwogICAgICAgICAgICAgU3R1ZGVudCBkZW5pc2UgPSBzSG9tZS5jcmVhdGUoIjgyMyIsICJEZW5pc2UgU21pdGgiKTsKIAotCSAgICBDb250ZXh0IGluaXRpYWwyID0gbmV3IEluaXRpYWxDb250ZXh0KGVudik7Ci0JICAgIG9ianJlZj0gaW5pdGlhbDIubG9va3VwKGpuZGkpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tlZCB1cCAiICsgam5kaSArICIgd2l0aCBjb250ZXh0IDIiKTsgICAgICAgICAgICAKLSAgICAgICAgICAgIHNIb21lID0gCi0gICAgICAgICAgICAgICAgKFN0dWRlbnRIb21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCAKKyAgICAgICAgQ29udGV4dCBpbml0aWFsMiA9IG5ldyBJbml0aWFsQ29udGV4dChlbnYpOworICAgICAgICBvYmpyZWY9IGluaXRpYWwyLmxvb2t1cChqbmRpKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29rZWQgdXAgIiArIGpuZGkgKyAiIHdpdGggY29udGV4dCAyIik7CisgICAgICAgICAgICBzSG9tZSA9CisgICAgICAgICAgICAgICAgKFN0dWRlbnRIb21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0dWRlbnRIb21lLmNsYXNzKTsKICAgICAgICAgICAgIFN0dWRlbnQgamltID0gc0hvbWUuY3JlYXRlKCI4MjgiLCAiSmltIEdvb2R5ZWFyIik7CiAKIAotCSAgICBDb250ZXh0IGluaXRpYWwzID0gbmV3IEluaXRpYWxDb250ZXh0KGVudik7Ci0JICAgIG9ianJlZj0gaW5pdGlhbDMubG9va3VwKCJlamIvTXlTdHVkZW50Iik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2VkIHVwIGVqYi9NeVN0dWRlbnQgd2l0aCBjb250ZXh0IDMiKTsKLQkgICAgc0hvbWUgPSAKLQkgICAgICAoU3R1ZGVudEhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIAotCQkJCQkJCVN0dWRlbnRIb21lLmNsYXNzKTsKKyAgICAgICAgQ29udGV4dCBpbml0aWFsMyA9IG5ldyBJbml0aWFsQ29udGV4dChlbnYpOworICAgICAgICBvYmpyZWY9IGluaXRpYWwzLmxvb2t1cCgiZWpiL015U3R1ZGVudCIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tlZCB1cCBlamIvTXlTdHVkZW50IHdpdGggY29udGV4dCAzIik7CisgICAgICAgIHNIb21lID0KKyAgICAgICAgICAoU3R1ZGVudEhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3R1ZGVudEhvbWUuY2xhc3MpOwogICAgICAgICAgICAgU3R1ZGVudCBzY290dCA9IHNIb21lLmNyZWF0ZSgiODI2IiwgIlNjb3R0IFdoaXRlIik7CiAKLQkgICAgQ29udGV4dCBpbml0aWFsNCA9IG5ldyBJbml0aWFsQ29udGV4dChlbnYpOwotCSAgICBvYmpyZWY9IGluaXRpYWw0Lmxvb2t1cCgiZWpiL015U3R1ZGVudCIpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tlZCB1cCBlamIvTXlTdHVkZW50IHdpdGggY29udGV4dCA0Iik7Ci0JICAgIHNIb21lID0gCi0JICAgICAgKFN0dWRlbnRIb21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCAKLQkJCQkJCQlTdHVkZW50SG9tZS5jbGFzcyk7CisgICAgICAgIENvbnRleHQgaW5pdGlhbDQgPSBuZXcgSW5pdGlhbENvbnRleHQoZW52KTsKKyAgICAgICAgb2JqcmVmPSBpbml0aWFsNC5sb29rdXAoImVqYi9NeVN0dWRlbnQiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29rZWQgdXAgZWpiL015U3R1ZGVudCB3aXRoIGNvbnRleHQgNCIpOworICAgICAgICBzSG9tZSA9CisgICAgICAgICAgKFN0dWRlbnRIb21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0dWRlbnRIb21lLmNsYXNzKTsKICAgICAgICAgICAgIFN0dWRlbnQgam9obiA9IHNIb21lLmNyZWF0ZSgiODQ0IiwgIkpvaG4gV2F5bmUiKTsKIAotCSAgICBDb250ZXh0IGluaXRpYWw1ID0gbmV3IEluaXRpYWxDb250ZXh0KGVudik7Ci0JICAgIG9ianJlZiA9IGluaXRpYWw1Lmxvb2t1cCgiY29yYmFuYW1lOmlpb3A6IiArIGFyZ3NbMF0gKyAiOiIgKyBhcmdzWzFdICsgIiNlamIvTXlTdHVkZW50Iik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2VkIHVwIGNvcmJhbmFtZTppaW9wOiIgKyBhcmdzWzBdICsgIjoiICsgYXJnc1sxXSArICIjZWpiL015U3R1ZGVudCIpOwotCSAgICBzSG9tZSA9IAotCSAgICAgIChTdHVkZW50SG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwgCi0JCQkJCQkJU3R1ZGVudEhvbWUuY2xhc3MpOworICAgICAgICBDb250ZXh0IGluaXRpYWw1ID0gbmV3IEluaXRpYWxDb250ZXh0KGVudik7CisgICAgICAgIG9ianJlZiA9IGluaXRpYWw1Lmxvb2t1cCgiY29yYmFuYW1lOmlpb3A6IiArIGFyZ3NbMF0gKyAiOiIgKyBhcmdzWzFdICsgIiNlamIvTXlTdHVkZW50Iik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2VkIHVwIGNvcmJhbmFtZTppaW9wOiIgKyBhcmdzWzBdICsgIjoiICsgYXJnc1sxXSArICIjZWpiL015U3R1ZGVudCIpOworICAgICAgICBzSG9tZSA9CisgICAgICAgICAgKFN0dWRlbnRIb21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0dWRlbnRIb21lLmNsYXNzKTsKICAgICAgICAgICAgIFN0dWRlbnQgdGltID0gc0hvbWUuY3JlYXRlKCI1NTUiLCAiVGltIER1bmNhbiIpOwotCSAgICAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvYWRiYWxhbmNpbmcgZm9yIGphdmE6Y29tcCBuYW1lcyA6Iik7CSAgICAKLQkgICAgU3RyaW5nW10gZGVuaXNlRW5kcG9pbnQgPSBkZW5pc2UuZ2V0U2VydmVySG9zdFBvcnQoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZW5pc2UgU21pdGggY3JlYXRlZCBvbiAiICsgCi0JCQkgICAgICAgZGVuaXNlRW5kcG9pbnRbMF0gKyAiOiIgKyBkZW5pc2VFbmRwb2ludFsxXSk7Ci0JICAgIFN0cmluZ1tdIGppbUVuZHBvaW50ID0gamltLmdldFNlcnZlckhvc3RQb3J0KCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSmltIEdvb2R5ZWFyIGNyZWF0ZWQgb24gIiArIAotCQkJICAgICAgIGppbUVuZHBvaW50WzBdICsgIjoiICsgamltRW5kcG9pbnRbMV0pOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIik7CiAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvYWRiYWxhbmNpbmcgZm9yIGdsb2JhbCBqbmRpIG5hbWVzIDoiKTsgCi0JICAgIFN0cmluZ1tdIHNjb3R0RW5kcG9pbnQgPSBzY290dC5nZXRTZXJ2ZXJIb3N0UG9ydCgpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNjb3R0IFdoaXRlIGNyZWF0ZWQgb24gIiArIAotCQkJICAgICAgIHNjb3R0RW5kcG9pbnRbMF0gKyAiOiIgKyBzY290dEVuZHBvaW50WzFdKTsKLQkgICAgU3RyaW5nW10gam9obkVuZHBvaW50ID0gam9obi5nZXRTZXJ2ZXJIb3N0UG9ydCgpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkpvaG4gV2F5bmUgY3JlYXRlZCBvbiAiICsgCi0JCQkgICAgICAgam9obkVuZHBvaW50WzBdICsgIjoiICsgam9obkVuZHBvaW50WzFdKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9hZGJhbGFuY2luZyBmb3IgamF2YTpjb21wIG5hbWVzIDoiKTsKKyAgICAgICAgU3RyaW5nW10gZGVuaXNlRW5kcG9pbnQgPSBkZW5pc2UuZ2V0U2VydmVySG9zdFBvcnQoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZW5pc2UgU21pdGggY3JlYXRlZCBvbiAiICsKKyAgICAgICAgICAgICAgICAgICBkZW5pc2VFbmRwb2ludFswXSArICI6IiArIGRlbmlzZUVuZHBvaW50WzFdKTsKKyAgICAgICAgU3RyaW5nW10gamltRW5kcG9pbnQgPSBqaW0uZ2V0U2VydmVySG9zdFBvcnQoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJKaW0gR29vZHllYXIgY3JlYXRlZCBvbiAiICsKKyAgICAgICAgICAgICAgICAgICBqaW1FbmRwb2ludFswXSArICI6IiArIGppbUVuZHBvaW50WzFdKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpOworCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb2FkYmFsYW5jaW5nIGZvciBnbG9iYWwgam5kaSBuYW1lcyA6Iik7CisgICAgICAgIFN0cmluZ1tdIHNjb3R0RW5kcG9pbnQgPSBzY290dC5nZXRTZXJ2ZXJIb3N0UG9ydCgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNjb3R0IFdoaXRlIGNyZWF0ZWQgb24gIiArCisgICAgICAgICAgICAgICAgICAgc2NvdHRFbmRwb2ludFswXSArICI6IiArIHNjb3R0RW5kcG9pbnRbMV0pOworICAgICAgICBTdHJpbmdbXSBqb2huRW5kcG9pbnQgPSBqb2huLmdldFNlcnZlckhvc3RQb3J0KCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSm9obiBXYXluZSBjcmVhdGVkIG9uICIgKworICAgICAgICAgICAgICAgICAgIGpvaG5FbmRwb2ludFswXSArICI6IiArIGpvaG5FbmRwb2ludFsxXSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiKTsKIAogCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiKTsKLQkgICAgU3RyaW5nW10gdGltRW5kcG9pbnQgPSB0aW0uZ2V0U2VydmVySG9zdFBvcnQoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaW0gRHVuY2FuIGNyZWF0ZWQgb24gIiArIAotCQkJICAgICAgIHRpbUVuZHBvaW50WzBdICsgIjoiICsgdGltRW5kcG9pbnRbMV0pOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIik7Ci0JICAgIGJvb2xlYW4gcGFzcyA9IGZhbHNlOwotCSAgICBTdHJpbmdbXSBhZGRyID0gZ2V0QWRkcmVzc1BvcnRMaXN0KGFyZ3NbMF0gKyAiOiIgKyBhcmdzWzFdKTsKLQkgICAgZm9yIChpbnQgaiA9IDA7IGogPCBhZGRyLmxlbmd0aDsgaisrKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiKTsKKyAgICAgICAgU3RyaW5nW10gdGltRW5kcG9pbnQgPSB0aW0uZ2V0U2VydmVySG9zdFBvcnQoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaW0gRHVuY2FuIGNyZWF0ZWQgb24gIiArCisgICAgICAgICAgICAgICAgICAgdGltRW5kcG9pbnRbMF0gKyAiOiIgKyB0aW1FbmRwb2ludFsxXSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiKTsKKyAgICAgICAgYm9vbGVhbiBwYXNzID0gZmFsc2U7CisgICAgICAgIFN0cmluZ1tdIGFkZHIgPSBnZXRBZGRyZXNzUG9ydExpc3QoYXJnc1swXSArICI6IiArIGFyZ3NbMV0pOworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGFkZHIubGVuZ3RoOyBqKyspIHsKIFN5c3RlbS5vdXQucHJpbnRsbigiYWRkcltqXS4uLiIgKyBhZGRyW2pdKTsKLQkgICAgICBpZiAoKGFkZHJbal0udHJpbSgpKS5lcXVhbHMoKHRpbUVuZHBvaW50WzBdICsgIjoiICsgdGltRW5kcG9pbnRbMV0pLnRyaW0oKSkpIHsKLQkgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZvdW5kIHJpZ2h0IGFkZHJlc3MuLi4iICsgYWRkcltqXSk7Ci0JICAgICAgcGFzcyA9IHRydWU7Ci0JICAgICAgYnJlYWs7Ci0JICAgICAgfQotCSAgICB9Ci0JICAgIGlmICghZGVuaXNlRW5kcG9pbnRbMF0uZXF1YWxzKGppbUVuZHBvaW50WzBdKSAmJgkJCi0JCSFqb2huRW5kcG9pbnRbMF0uZXF1YWxzKHNjb3R0RW5kcG9pbnRbMF0pICYmIHBhc3MgPT0gdHJ1ZSkgewotCSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidGltRW5kcG9pbnRbMF0gPSIgKyB0aW1FbmRwb2ludFswXSk7Ci0JICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxPQURCQUxBTkNJTkcgU1VDQ0VTU0ZVTCEhIik7Ci0JCXN0YXQuYWRkU3RhdHVzKCJsb2FkIGJhbGFuY2luZyIsIHN0YXQuUEFTUyk7Ci0JICAgIH0gZWxzZSBpZiAoIWRlbmlzZUVuZHBvaW50WzFdLmVxdWFscyhqaW1FbmRwb2ludFsxXSkgJiYJICAgICAgIAotCQkgICAgICAgIWpvaG5FbmRwb2ludFsxXS5lcXVhbHMoc2NvdHRFbmRwb2ludFsxXSkgJiYgcGFzcyA9PSB0cnVlKSB7Ci0JICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxPQURCQUxBTkNJTkcgU1VDQ0VTU0ZVTCEhIik7Ci0JCXN0YXQuYWRkU3RhdHVzKCJsb2FkIGJhbGFuY2luZyIsIHN0YXQuUEFTUyk7Ci0JICAgIH0KLQkgICAgCisgICAgICAgICAgaWYgKChhZGRyW2pdLnRyaW0oKSkuZXF1YWxzKCh0aW1FbmRwb2ludFswXSArICI6IiArIHRpbUVuZHBvaW50WzFdKS50cmltKCkpKSB7CisgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJmb3VuZCByaWdodCBhZGRyZXNzLi4uIiArIGFkZHJbal0pOworICAgICAgICAgIHBhc3MgPSB0cnVlOworICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIWRlbmlzZUVuZHBvaW50WzBdLmVxdWFscyhqaW1FbmRwb2ludFswXSkgJiYKKyAgICAgICAgIWpvaG5FbmRwb2ludFswXS5lcXVhbHMoc2NvdHRFbmRwb2ludFswXSkgJiYgcGFzcyA9PSB0cnVlKSB7CisgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0aW1FbmRwb2ludFswXSA9IiArIHRpbUVuZHBvaW50WzBdKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTE9BREJBTEFOQ0lORyBTVUNDRVNTRlVMISEiKTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvYWQgYmFsYW5jaW5nIiwgc3RhdC5QQVNTKTsKKyAgICAgICAgfSBlbHNlIGlmICghZGVuaXNlRW5kcG9pbnRbMV0uZXF1YWxzKGppbUVuZHBvaW50WzFdKSAmJgorICAgICAgICAgICAgICAgIWpvaG5FbmRwb2ludFsxXS5lcXVhbHMoc2NvdHRFbmRwb2ludFsxXSkgJiYgcGFzcyA9PSB0cnVlKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxPQURCQUxBTkNJTkcgU1VDQ0VTU0ZVTCEhIik7CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2FkIGJhbGFuY2luZyIsIHN0YXQuUEFTUyk7CisgICAgICAgIH0KKwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2FkIGJhbGFuY2luZyIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkNhdWdodCBhbiB1bmV4cGVjdGVkIGV4Y2VwdGlvbiEiKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0gICAgfSAKKyAgICB9CiAKICAgLyoqCiAgICAqIGZvbGxvd2luZyBtZXRob2RzIChvdmVyLWxvYWRlZCkgZm9yIGdldHRpbmcgYWxsIElQIGFkZHJlc3NlcyBjb3JyZXNwb25kaW5nCiAgICAqIHRvIGEgcGFydGljdWxhciBob3N0LgotICAgKiAobXVsdGktaG9tZWQgaG9zdHMpLiAKKyAgICogKG11bHRpLWhvbWVkIGhvc3RzKS4KICAgICovCiAgICAgcHJpdmF0ZSBTdHJpbmcgW10gZ2V0QWRkcmVzc1BvcnRMaXN0KFN0cmluZyBob3N0KSB7CiAgICAgICAgIFZlY3RvciBhZGRyZXNzUG9ydFZlY3RvciA9IG5ldyBWZWN0b3IoKTsKICAgICAgICAgdHJ5IHsKLQkgICAgSWlvcFVybCB1cmwgPSBuZXcgSWlvcFVybCgiaWlvcDovLyIraG9zdCk7Ci0JICAgIFN0cmluZyBbXSBhcExpc3QgPSBnZXRBZGRyZXNzUG9ydExpc3QodXJsKTsKLQkgICAgZm9yIChpbnQgaj0wOyBqPGFwTGlzdC5sZW5ndGg7IGorKykgewotCSAgICAgIGFkZHJlc3NQb3J0VmVjdG9yLmFkZEVsZW1lbnQoYXBMaXN0W2pdKTsKLQkgICAgfQotCX0gY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBtZSkgewotCSAgbWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQotICAgCisgICAgICAgIElpb3BVcmwgdXJsID0gbmV3IElpb3BVcmwoImlpb3A6Ly8iK2hvc3QpOworICAgICAgICBTdHJpbmcgW10gYXBMaXN0ID0gZ2V0QWRkcmVzc1BvcnRMaXN0KHVybCk7CisgICAgICAgIGZvciAoaW50IGo9MDsgajxhcExpc3QubGVuZ3RoOyBqKyspIHsKKyAgICAgICAgICBhZGRyZXNzUG9ydFZlY3Rvci5hZGRFbGVtZW50KGFwTGlzdFtqXSk7CisgICAgICAgIH0KKyAgICB9IGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gbWUpIHsKKyAgICAgIG1lLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KKwogICAgICAgICBTdHJpbmcgW10gcmV0ID0gbmV3IFN0cmluZ1thZGRyZXNzUG9ydFZlY3Rvci5zaXplKCldOwogICAgICAgICBmb3IgKGludCBpPTA7IGk8cmV0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICByZXRbaV0gPSAoU3RyaW5nKWFkZHJlc3NQb3J0VmVjdG9yLmVsZW1lbnRBdChpKTsKQEAgLTE5MCwxOCArMTkwLDE4IEBACiAgICAgICAgIC8vIFdlIHJldHVybiBhIGxpc3Qgb2YgPElQIEFERFJFU1M+OjxQT1JUPiB2YWx1ZXMKICAgICAgICAgcmV0dXJuIHJldDsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIFN0cmluZyBbXSBnZXRBZGRyZXNzUG9ydExpc3QoSWlvcFVybCBpaW9wVXJsKSB7CiAgICAgICAgIC8vIFB1bGwgb3V0IHRoZSBob3N0IG5hbWUgYW5kIHBvcnQKLSAgICAgICAgSWlvcFVybC5BZGRyZXNzIGlpb3BVcmxBZGRyZXNzID0gCisgICAgICAgIElpb3BVcmwuQWRkcmVzcyBpaW9wVXJsQWRkcmVzcyA9CiAgICAgICAgICAgICAgICAgKElpb3BVcmwuQWRkcmVzcykoaWlvcFVybC5nZXRBZGRyZXNzZXMoKS5lbGVtZW50QXQoMCkpOwogICAgICAgICBTdHJpbmcgaG9zdCA9IGlpb3BVcmxBZGRyZXNzLmhvc3Q7CiAgICAgICAgIGludCBwb3J0TnVtYmVyID0gaWlvcFVybEFkZHJlc3MucG9ydDsKICAgICAgICAgU3RyaW5nIHBvcnQgPSBJbnRlZ2VyLnRvU3RyaW5nKHBvcnROdW1iZXIpOwogICAgICAgICAvLyBXZSByZXR1cm4gYSBsaXN0IG9mIDxJUCBBRERSRVNTPjo8UE9SVD4gdmFsdWVzCi0gICAgICAgIHJldHVybiBnZXRBZGRyZXNzUG9ydExpc3QoaG9zdCwgcG9ydCk7ICAgICAgICAKKyAgICAgICAgcmV0dXJuIGdldEFkZHJlc3NQb3J0TGlzdChob3N0LCBwb3J0KTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIFN0cmluZyBbXSBnZXRBZGRyZXNzUG9ydExpc3QoU3RyaW5nIGhvc3QsIFN0cmluZyBwb3J0KSB7CiAgICAgICAgIC8vIEdldCB0aGUgaXAgYWRkcmVzc2VzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGhvc3QKICAgICAgICAgdHJ5IHsKQEAgLTIxMyw4ICsyMTMsOCBAQAogICAgICAgICAgICAgLy8gV2UgcmV0dXJuIGEgbGlzdCBvZiA8SVAgQUREUkVTUz46PFBPUlQ+IHZhbHVlcwogICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICAgICAgfSBjYXRjaCAoVW5rbm93bkhvc3RFeGNlcHRpb24gdWtoZSkgewotCSAgdWtoZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgIHVraGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgfQogICAgIH0KLX0gCit9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9hZGJhbGFuY2luZy9lbnJvbGxlci9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvYWRiYWxhbmNpbmcvZW5yb2xsZXIvZGVzY3JpcHRvci9lamItamFyLnhtbAppbmRleCBkZGYwZjZkLi4xZTY1ODc3IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9hZGJhbGFuY2luZy9lbnJvbGxlci9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb2FkYmFsYW5jaW5nL2Vucm9sbGVyL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTI4LDcgKzI4LDcgQEAKICAgICAgIDxwZXJzaXN0ZW5jZS10eXBlPkJlYW48L3BlcnNpc3RlbmNlLXR5cGU+CiAgICAgICA8cHJpbS1rZXktY2xhc3M+amF2YS5sYW5nLlN0cmluZzwvcHJpbS1rZXktY2xhc3M+CiAgICAgICA8cmVlbnRyYW50PmZhbHNlPC9yZWVudHJhbnQ+Ci0JPHJlc291cmNlLXJlZj4KKyAgICA8cmVzb3VyY2UtcmVmPgogICAgICAgICA8cmVzLXJlZi1uYW1lPmpkYmMvYm1wLWVucm9sbGVyREI8L3Jlcy1yZWYtbmFtZT4KICAgICAgICAgPHJlcy10eXBlPmphdmF4LnNxbC5EYXRhU291cmNlPC9yZXMtdHlwZT4KICAgICAgICAgPHJlcy1hdXRoPkNvbnRhaW5lcjwvcmVzLWF1dGg+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9hZGJhbGFuY2luZy9lbnJvbGxlci9kZXNjcmlwdG9yL3N1bi1hY2MtbGIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvYWRiYWxhbmNpbmcvZW5yb2xsZXIvZGVzY3JpcHRvci9zdW4tYWNjLWxiLnhtbAppbmRleCA0YTY2ZTk1Li5lNmEyNWM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9hZGJhbGFuY2luZy9lbnJvbGxlci9kZXNjcmlwdG9yL3N1bi1hY2MtbGIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb2FkYmFsYW5jaW5nL2Vucm9sbGVyL2Rlc2NyaXB0b3Ivc3VuLWFjYy1sYi54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPCFET0NUWVBFIGNsaWVudC1jb250YWluZXIgUFVCTElDICItLy9TdW4gTWljcm9zeXN0ZW1zIEluYy4vL0RURCBBcHBsaWNhdGlvbiBTZXJ2ZXIgOC4wIEFwcGxpY2F0aW9uIENsaWVudCBDb250YWluZXIvL0VOIiAiaHR0cDovL3d3dy5zdW4uY29tL3NvZnR3YXJlL2FwcHNlcnZlci9kdGRzL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQtY29udGFpbmVyXzFfMC5kdGQiPgogCi08Y2xpZW50LWNvbnRhaW5lcj4gIAorPGNsaWVudC1jb250YWluZXI+CiAgIDxsb2ctc2VydmljZSBmaWxlPSIuLi9hY2MubG9nIiBsZXZlbD0iRklORSIvPgogPHByb3BlcnR5IG5hbWU9ImNvbS5zdW4uYXBwc2Vydi5paW9wLmxvYWRiYWxhbmNpbmdwb2xpY3kiIHZhbHVlPSJpYy1iYXNlZCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbS5zdW4uYXBwc2Vydi5paW9wLmVuZHBvaW50cyIgdmFsdWU9ImxvY2FsaG9zdDozMzcwMixsb2NhbGhvc3Q6MzM3MDEiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb2FkYmFsYW5jaW5nL2Vucm9sbGVyL2Rlc2NyaXB0b3Ivc3VuLWFjYy1sYjMueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvYWRiYWxhbmNpbmcvZW5yb2xsZXIvZGVzY3JpcHRvci9zdW4tYWNjLWxiMy54bWwKaW5kZXggN2FkZTE1MC4uYWZiMzNhZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvYWRiYWxhbmNpbmcvZW5yb2xsZXIvZGVzY3JpcHRvci9zdW4tYWNjLWxiMy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvYWRiYWxhbmNpbmcvZW5yb2xsZXIvZGVzY3JpcHRvci9zdW4tYWNjLWxiMy54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPCFET0NUWVBFIGNsaWVudC1jb250YWluZXIgUFVCTElDICItLy9TdW4gTWljcm9zeXN0ZW1zIEluYy4vL0RURCBBcHBsaWNhdGlvbiBTZXJ2ZXIgOC4wIEFwcGxpY2F0aW9uIENsaWVudCBDb250YWluZXIvL0VOIiAiaHR0cDovL3d3dy5zdW4uY29tL3NvZnR3YXJlL2FwcHNlcnZlci9kdGRzL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQtY29udGFpbmVyXzFfMC5kdGQiPgogCi08Y2xpZW50LWNvbnRhaW5lcj4gIAorPGNsaWVudC1jb250YWluZXI+CiAgIDx0YXJnZXQtc2VydmVyIG5hbWU9ImxvY2FsaG9zdCIgYWRkcmVzcz0ibG9jYWxob3N0IiBwb3J0PSIzMzcwMCIvPgogICA8bG9nLXNlcnZpY2UgZmlsZT0iLi4vYWNjLmxvZyIgbGV2ZWw9IkZJTkUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb20uc3VuLmFwcHNlcnYuaWlvcC5sb2FkYmFsYW5jaW5ncG9saWN5IiB2YWx1ZT0iaWMtYmFzZWQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb2FkYmFsYW5jaW5nL2Vucm9sbGVyL2VqYi9TdHVkZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9hZGJhbGFuY2luZy9lbnJvbGxlci9lamIvU3R1ZGVudC5qYXZhCmluZGV4IDk3ZGU1MjMuLmFjNGIzM2UgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb2FkYmFsYW5jaW5nL2Vucm9sbGVyL2VqYi9TdHVkZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvYWRiYWxhbmNpbmcvZW5yb2xsZXIvZWpiL1N0dWRlbnQuamF2YQpAQCAtMjIsNyArMjIsNyBAQAogCiAKIHB1YmxpYyBpbnRlcmZhY2UgU3R1ZGVudCBleHRlbmRzIEVKQk9iamVjdCB7Ci0gCisKICAgLyoqCiAgICAqIFJldHVybnMgdGhlIE5hbWUgb2YgYSBzdHVkZW50LgogICAgKiBleGNlcHRpb24gUmVtb3RlRXhjZXB0aW9uCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9hZGJhbGFuY2luZy9lbnJvbGxlci9lamIvU3R1ZGVudEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb2FkYmFsYW5jaW5nL2Vucm9sbGVyL2VqYi9TdHVkZW50QmVhbi5qYXZhCmluZGV4IDgwMjNiYjYuLjliNGU2NzggMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb2FkYmFsYW5jaW5nL2Vucm9sbGVyL2VqYi9TdHVkZW50QmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb2FkYmFsYW5jaW5nL2Vucm9sbGVyL2VqYi9TdHVkZW50QmVhbi5qYXZhCkBAIC01OSw3ICs1OSw3IEBACiAKICAgICAgICAgdGhpcy5zdHVkZW50SWQgPSBzdHVkZW50SWQ7CiAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGVkIFN0dWRlbnQgd2l0aCBJRCAiICsgc3R1ZGVudElkICsgIiBhbmQgTmFtZSAiICsgbmFtZSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGVkIFN0dWRlbnQgd2l0aCBJRCAiICsgc3R1ZGVudElkICsgIiBhbmQgTmFtZSAiICsgbmFtZSk7CiAgICAgICAgIHJldHVybiBzdHVkZW50SWQ7CiAgICAgfQogCkBAIC05MCwxMyArOTAsMTMgQEAKIAogICAgIHB1YmxpYyB2b2lkIHNldEVudGl0eUNvbnRleHQoRW50aXR5Q29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7Ci0JdHJ5IHsKLQkgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkgICAgZGF0YVNvdXJjZSA9IAotCSAgICAgIChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvamRiYy9ibXAtZW5yb2xsZXJEQiIpOwotICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7ICAgICAgICAgICAgCi0JICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLQkgfQorICAgIHRyeSB7CisgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgIGRhdGFTb3VyY2UgPQorICAgICAgICAgIChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvamRiYy9ibXAtZW5yb2xsZXJEQiIpOworICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHVuc2V0RW50aXR5Q29udGV4dCgpIHsKQEAgLTIyNywyNCArMjI3LDI0IEBACiAKICAgICBwdWJsaWMgU3RyaW5nW10gZ2V0U2VydmVySG9zdFBvcnQoKSB7CiAgICAgICAgIFN0cmluZyBvcmJIb3N0ID0gbnVsbCwgb3JiUG9ydCA9IG51bGw7Ci0JdHJ5IHsKLQkgICAgU2VydmVyQ29udGV4dCBzZXJ2ZXJDb250ZXh0ID0gQXBwbGljYXRpb25TZXJ2ZXIuZ2V0U2VydmVyQ29udGV4dCgpOwotCSAgICAKLQkgICAgQ29uZmlnQ29udGV4dCBjb25maWdDb250ZXh0ID0gc2VydmVyQ29udGV4dC5nZXRDb25maWdDb250ZXh0KCk7Ci0gICAgICAgICAJICAgIAorICAgIHRyeSB7CisgICAgICAgIFNlcnZlckNvbnRleHQgc2VydmVyQ29udGV4dCA9IEFwcGxpY2F0aW9uU2VydmVyLmdldFNlcnZlckNvbnRleHQoKTsKKworICAgICAgICBDb25maWdDb250ZXh0IGNvbmZpZ0NvbnRleHQgPSBzZXJ2ZXJDb250ZXh0LmdldENvbmZpZ0NvbnRleHQoKTsKKwogICAgICAgICAgICAgU2VydmVyIHNlcnZlckJlYW4gPSBTZXJ2ZXJCZWFuc0ZhY3RvcnkuZ2V0U2VydmVyQmVhbihjb25maWdDb250ZXh0KTsKLSAgICAgICAgCSAgICAKKwogICAgICAgICAgICAgSWlvcFNlcnZpY2UgaWlvcFNlcnZpY2VCZWFuID0gU2VydmVyQmVhbnNGYWN0b3J5LmdldElpb3BTZXJ2aWNlQmVhbihjb25maWdDb250ZXh0KTsKIAotCSAgICBJaW9wTGlzdGVuZXJbXSBpaW9wTGlzdGVuZXJCZWFucyA9IGlpb3BTZXJ2aWNlQmVhbi5nZXRJaW9wTGlzdGVuZXIoKTsKLQkgICAgT3JiIG9yYkJlYW4gPSBpaW9wU2VydmljZUJlYW4uZ2V0T3JiKCk7Ci0gICAgICAgCi0JICAgIG9yYkhvc3QgPSBpaW9wTGlzdGVuZXJCZWFuc1swXS5nZXRBZGRyZXNzKCk7Ci0JICAgIG9yYlBvcnQgPSBpaW9wTGlzdGVuZXJCZWFuc1swXS5nZXRQb3J0KCk7CisgICAgICAgIElpb3BMaXN0ZW5lcltdIGlpb3BMaXN0ZW5lckJlYW5zID0gaWlvcFNlcnZpY2VCZWFuLmdldElpb3BMaXN0ZW5lcigpOworICAgICAgICBPcmIgb3JiQmVhbiA9IGlpb3BTZXJ2aWNlQmVhbi5nZXRPcmIoKTsKKworICAgICAgICBvcmJIb3N0ID0gaWlvcExpc3RlbmVyQmVhbnNbMF0uZ2V0QWRkcmVzcygpOworICAgICAgICBvcmJQb3J0ID0gaWlvcExpc3RlbmVyQmVhbnNbMF0uZ2V0UG9ydCgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gY2ZlKSB7CiAgICAgICAgICAgICBjZmUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgIH0gCi0JcmV0dXJuIG5ldyBTdHJpbmdbXSB7b3JiSG9zdCwgb3JiUG9ydH07CisgICAgICAgIH0KKyAgICByZXR1cm4gbmV3IFN0cmluZ1tdIHtvcmJIb3N0LCBvcmJQb3J0fTsKIAogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb2FkYmFsYW5jaW5nL2Vucm9sbGVyL2VqYi9TdHVkZW50SG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvYWRiYWxhbmNpbmcvZW5yb2xsZXIvZWpiL1N0dWRlbnRIb21lLmphdmEKaW5kZXggMmFlM2RlNS4uZmNhNTQ0NiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvYWRiYWxhbmNpbmcvZW5yb2xsZXIvZWpiL1N0dWRlbnRIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvYWRiYWxhbmNpbmcvZW5yb2xsZXIvZWpiL1N0dWRlbnRIb21lLmphdmEKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgKiBAZXhjZXB0aW9uIHRocm93cyBGaW5kZXJFeGNlcHRpb24gYW5kIFJlbW90ZUV4Y2VwdGlvbi4KICAgICAgKgogICAgICAqLwotIAotICAgIHB1YmxpYyBTdHVkZW50IGZpbmRCeVByaW1hcnlLZXkoU3RyaW5nIHN0dWRlbnRJZCkgCisKKyAgICBwdWJsaWMgU3R1ZGVudCBmaW5kQnlQcmltYXJ5S2V5KFN0cmluZyBzdHVkZW50SWQpCiAgICAgICAgIHRocm93cyBGaW5kZXJFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb2FkYmFsYW5jaW5nL2Vucm9sbGVyL3NxbC9jcmVhdGVfZGVyYnkuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvYWRiYWxhbmNpbmcvZW5yb2xsZXIvc3FsL2NyZWF0ZV9kZXJieS5zcWwKaW5kZXggZjMzM2NkMy4uNzcyODQ5NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvYWRiYWxhbmNpbmcvZW5yb2xsZXIvc3FsL2NyZWF0ZV9kZXJieS5zcWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvYWRiYWxhbmNpbmcvZW5yb2xsZXIvc3FsL2NyZWF0ZV9kZXJieS5zcWwKQEAgLTEsNSArMSw1IEBACi1jcmVhdGUgdGFibGUgc3R1ZGVudCAKLShzdHVkZW50aWQgdmFyY2hhcigzKSBOT1QgTlVMTCAgUFJJTUFSWSBLRVksICAKK2NyZWF0ZSB0YWJsZSBzdHVkZW50Cisoc3R1ZGVudGlkIHZhcmNoYXIoMykgTk9UIE5VTEwgIFBSSU1BUlkgS0VZLAogbmFtZSB2YXJjaGFyKDM2KSk7CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvYWRiYWxhbmNpbmcvZW5yb2xsZXIvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvYWRiYWxhbmNpbmcvZW5yb2xsZXIvc3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsCmluZGV4IDFlMDUzNmUuLjdlOTA4NjggMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb2FkYmFsYW5jaW5nL2Vucm9sbGVyL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9hZGJhbGFuY2luZy9lbnJvbGxlci9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwKQEAgLTEsNSArMSw1IEBACi1jcmVhdGUgdGFibGUgc3R1ZGVudCAKLShzdHVkZW50aWQgdmFyY2hhcigzKSBjb25zdHJhaW50IHBrX3N0dWRlbnQgcHJpbWFyeSBrZXksICAKK2NyZWF0ZSB0YWJsZSBzdHVkZW50Cisoc3R1ZGVudGlkIHZhcmNoYXIoMykgY29uc3RyYWludCBwa19zdHVkZW50IHByaW1hcnkga2V5LAogbmFtZSB2YXJjaGFyKDM2KSk7CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvb2t1cC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9va3VwL2J1aWxkLnhtbAppbmRleCBiN2ZhZDc1Li5lNzVlYmY1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9va3VwL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9va3VwL2J1aWxkLnhtbApAQCAtODIsMTYgKzgyLDE2IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4gVXNhZ2U6Ci0JCWFudCBlbnJvbGxlciAoRXhlY3V0ZXMgdGhlIGVucm9sbGVyIHRlc3RzKQotCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYiBibXAgdGVzdHMpCi0JCWFudCBjbGVhbiAoY2xlYW5zIGFsbCB0aGUgZWpiIGJtcCB0ZXN0cykKLQkJYW50IGJ1aWxkIChidWlsZHMgYWxsIHRoZSBlamIgYm1wIHRlc3RzKQotCQlhbnQgc2V0dXAgKHNldHMgdXAgYWxsIHJlc291cmNlcyBmb3IgYm1wIHRlc3RzKQotCQlhbnQgZGVwbG95IChkZXBsb3lzIGFsbCB0aGUgZWpiIGJtcCBhcHBzKQotCQlhbnQgcnVuIChFeGVjdXRlcyBhbGwgdGhlIGVqYiBibXAgdGVzdHMpCi0JCWFudCB1bmRlcGxveSAodW5kZXBsb3lzIGFsbCB0aGUgYm1wIGFwcHMpCi0JCWFudCB1bnNldHVwICh1bnNldHMgYWxsIHJlc291cmNlcyBmb3IgYm1wIHRlc3RzKQotCTwvZWNobz4KKyAgICA8ZWNobz4gVXNhZ2U6CisgICAgICAgIGFudCBlbnJvbGxlciAoRXhlY3V0ZXMgdGhlIGVucm9sbGVyIHRlc3RzKQorICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIGVqYiBibXAgdGVzdHMpCisgICAgICAgIGFudCBjbGVhbiAoY2xlYW5zIGFsbCB0aGUgZWpiIGJtcCB0ZXN0cykKKyAgICAgICAgYW50IGJ1aWxkIChidWlsZHMgYWxsIHRoZSBlamIgYm1wIHRlc3RzKQorICAgICAgICBhbnQgc2V0dXAgKHNldHMgdXAgYWxsIHJlc291cmNlcyBmb3IgYm1wIHRlc3RzKQorICAgICAgICBhbnQgZGVwbG95IChkZXBsb3lzIGFsbCB0aGUgZWpiIGJtcCBhcHBzKQorICAgICAgICBhbnQgcnVuIChFeGVjdXRlcyBhbGwgdGhlIGVqYiBibXAgdGVzdHMpCisgICAgICAgIGFudCB1bmRlcGxveSAodW5kZXBsb3lzIGFsbCB0aGUgYm1wIGFwcHMpCisgICAgICAgIGFudCB1bnNldHVwICh1bnNldHMgYWxsIHJlc291cmNlcyBmb3IgYm1wIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb29rdXAvZW5yb2xsZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb29rdXAvZW5yb2xsZXIvYnVpbGQucHJvcGVydGllcwppbmRleCAzN2VmYjFlLi43NzZkNTVmIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9va3VwL2Vucm9sbGVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvb2t1cC9lbnJvbGxlci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOSArMTUsMTkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImxvYWRiYWxhbmNpbmciLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LUFwcCIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tQXBwIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImRlZmF1bHQtaW5zdGFuY2UiIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvb2t1cC9lbnJvbGxlci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9va3VwL2Vucm9sbGVyL2J1aWxkLnhtbAppbmRleCBjNzc0NDgyLi5lOWNjYjMzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9va3VwL2Vucm9sbGVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9va3VwL2Vucm9sbGVyL2J1aWxkLnhtbApAQCAtMzcsNyArMzcsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNDksMTMgKzQ5LDEzIEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovKlN0dWRlbnQqLmNsYXNzLCoqLypFbnJvbGxlciouY2xhc3MsKiovKkNvdXJzZSouY2xhc3MiIC8+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICB2YWx1ZT0iKiovQ291cnNlLmNsYXNzLCoqL0Vucm9sbGVyLmNsYXNzLCoqL1N0dWRlbnQuY2xhc3MsKiovKkhvbWUqLmNsYXNzLCoqLypDbGllbnQqLmNsYXNzIiAvPgogICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CkBAIC02MywyMCArNjMsMjAgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktamRiYy1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImpkYmMuY29ucG9vbC5uYW1lIiB2YWx1ZT0iYm1wRW5yb2xsZXJQb29sIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9ibXAtZW5yb2xsZXJEQiIvPgotCTwvYW50Y2FsbD4KLQk8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qbXMtY29tbW9uIi8+CQotCTwhLS08YW50Y2FsbCB0YXJnZXQ9InJlY29uZmlnLWNvbW1vbiIvPi0tPgorICAgIDwvYW50Y2FsbD4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qbXMtY29tbW9uIi8+CisgICAgPCEtLTxhbnRjYWxsIHRhcmdldD0icmVjb25maWctY29tbW9uIi8+LS0+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGVjaG8gbWVzc2FnZT0iRGVwbG95aW5nIHZpYSBhc2FkbWluLi4uIi8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgCTxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiI+CisgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KIAotCTwvYW50Y2FsbD4KKyAgICA8L2FudGNhbGw+CiAgICAgICA8IS0tCiAgICAgICBDbGVhbiB0aGUgZGF0YWJhc2UgYWZ0ZXIgdGhlIHJ1biBzaW5jZSBpdCBwcm9oaWJpdHMgcmUtcnVubmluZwogICAgICAgLS0+CkBAIC04NiwxMiArODYsMTIgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLXNxbC1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNxbC5maWxlIiB2YWx1ZT0ic3FsL2NyZWF0ZV9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLQk8IS0tYW50Y2FsbCB0YXJnZXQ9InJ1bi1zdGFuZGFsb25lLWNsaWVudC10aHJlYWRpbmciPgotCSAgICA8cGFyYW0gbmFtZT0iY3R4RmFjdG9yeSIgdmFsdWU9ImNvbS5zdW4uYXBwc2Vydi5uYW1pbmcuUzFBU0N0eEZhY3RvcnkiLz4KLQk8L2FudGNhbGw+Ci0JPGFudGNhbGwgdGFyZ2V0PSJydW4tc3RhbmRhbG9uZS1jbGllbnQtdGhyZWFkaW5nIj4KLQkgICAgPHBhcmFtIG5hbWU9ImN0eEZhY3RvcnkiIHZhbHVlPSJjb20uc3VuLmVudGVycHJpc2UubmFtaW5nLlNlcmlhbEluaXRDb250ZXh0RmFjdG9yeSIvPgotCTwvYW50Y2FsbC0tPgorICAgIDwhLS1hbnRjYWxsIHRhcmdldD0icnVuLXN0YW5kYWxvbmUtY2xpZW50LXRocmVhZGluZyI+CisgICAgICAgIDxwYXJhbSBuYW1lPSJjdHhGYWN0b3J5IiB2YWx1ZT0iY29tLnN1bi5hcHBzZXJ2Lm5hbWluZy5TMUFTQ3R4RmFjdG9yeSIvPgorICAgIDwvYW50Y2FsbD4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi1zdGFuZGFsb25lLWNsaWVudC10aHJlYWRpbmciPgorICAgICAgICA8cGFyYW0gbmFtZT0iY3R4RmFjdG9yeSIgdmFsdWU9ImNvbS5zdW4uZW50ZXJwcmlzZS5uYW1pbmcuU2VyaWFsSW5pdENvbnRleHRGYWN0b3J5Ii8+CisgICAgPC9hbnRjYWxsLS0+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InNxbCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtMTA2LDI1ICsxMDYsMjUgQEAKICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IG5hbWU9InJ1bi1hcHBjbGllbnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQk8ZWNobyBtZXNzYWdlPSJydW5uaW5nIGluIEFDQyB3aXRoIFNlcmlhbEluaXRDb250ZXh0RmFjdG9yeS4uLiIvPgotICAgCTxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiI+Ci0JICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iLXhtbCAuL2Rlc2NyaXB0b3Ivc3VuLWFjYy1sYi54bWwiLz4KLQk8L2FudGNhbGw+CisgICAgPGVjaG8gbWVzc2FnZT0icnVubmluZyBpbiBBQ0Mgd2l0aCBTZXJpYWxJbml0Q29udGV4dEZhY3RvcnkuLi4iLz4KKyAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPgorICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9Ii14bWwgLi9kZXNjcmlwdG9yL3N1bi1hY2MtbGIueG1sIi8+CisgICAgPC9hbnRjYWxsPgogPC90YXJnZXQ+CiAKICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogICAgIDwhLS0gVGFyZ2V0IHRvIHJ1biB0aGUgc3RhbmRhbG9uZSBjbGllbnQgd2l0aG91dCBBQ0MgLS0+CiAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KICAgICA8dGFyZ2V0IG5hbWU9InJ1bi1zdGFuZGFsb25lLWNsaWVudC10aHJlYWRpbmciIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQk8amF2YSBjbGFzc25hbWU9ImNvbS5zdW4uczFwZXFlLmxvYWRiYWxhbmNpbmcuY2xpZW50LkVucm9sbGVyQ2xpZW50dGhyZWFkaW5nIgorICAgIDxqYXZhIGNsYXNzbmFtZT0iY29tLnN1bi5zMXBlcWUubG9hZGJhbGFuY2luZy5jbGllbnQuRW5yb2xsZXJDbGllbnR0aHJlYWRpbmciCiAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9pbXEvbGliL2ltcS5qYXI6JHtlbnYuUzFBU19IT01FfS9pbXEvbGliL2ltcWptc3JhLmphcjoke2Vudi5TMUFTX0hPTUV9L2ltcS9saWIvam1zLmphcjoke3MxYXN0ZXN0LmNsYXNzcGF0aH06JHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHBDbGllbnQuamFyIgogICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIgZm9yaz0idHJ1ZSI+Ci0JPGp2bWFyZyB2YWx1ZT0iLURvcmcub21nLkNPUkJBLk9SQkluaXRpYWxIb3N0PSR7YWRtaW4uaG9zdH0iLz4KKyAgICA8anZtYXJnIHZhbHVlPSItRG9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbEhvc3Q9JHthZG1pbi5ob3N0fSIvPgogICAgICAgICA8IS0tanZtYXJnIHZhbHVlPSItRGphdmEubmFtaW5nLnByb3ZpZGVyLnVybD1paW9wOi8vJHthZG1pbi5ob3N0fToke29yYi5wb3J0fSIvLS0+Ci0JPGp2bWFyZyB2YWx1ZT0iLURvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0PSR7b3JiLnBvcnR9Ii8+Ci08IS0tCTxqdm1hcmcgdmFsdWU9Ii1EamF2YXgucm1pLkNPUkJBLlV0aWxDbGFzcz1jb20uc3VuLmNvcmJhLmVlLmltcGwuamF2YXgucm1pLkNPUkJBLlV0aWwiLz4KLQk8anZtYXJnIHZhbHVlPSItRG9yZy5vbWcuQ09SQkEuT1JCQ2xhc3M9Y29tLnN1bi5jb3JiYS5lZS5pbXBsLm9yYi5PUkJJbXBsIi8+Ci0JPGp2bWFyZyB2YWx1ZT0iLURvcmcub21nLkNPUkJBLk9SQlNpbmdsZXRvbkNsYXNzPWNvbS5zdW4uY29yYmEuZWUuaW1wbC5vcmIuT1JCU2luZ2xldG9uIi8+IC0tPgorICAgIDxqdm1hcmcgdmFsdWU9Ii1Eb3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydD0ke29yYi5wb3J0fSIvPgorPCEtLSAgICA8anZtYXJnIHZhbHVlPSItRGphdmF4LnJtaS5DT1JCQS5VdGlsQ2xhc3M9Y29tLnN1bi5jb3JiYS5lZS5pbXBsLmphdmF4LnJtaS5DT1JCQS5VdGlsIi8+CisgICAgPGp2bWFyZyB2YWx1ZT0iLURvcmcub21nLkNPUkJBLk9SQkNsYXNzPWNvbS5zdW4uY29yYmEuZWUuaW1wbC5vcmIuT1JCSW1wbCIvPgorICAgIDxqdm1hcmcgdmFsdWU9Ii1Eb3JnLm9tZy5DT1JCQS5PUkJTaW5nbGV0b25DbGFzcz1jb20uc3VuLmNvcmJhLmVlLmltcGwub3JiLk9SQlNpbmdsZXRvbiIvPiAtLT4KICAgICAgICAgPGFyZyB2YWx1ZT0iJHtjdHhGYWN0b3J5fSIvPgogICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgpAQCAtMTMzLDIzICsxMzMsMjMgQEAKICAgICA8IS0tIFRhcmdldCB0byBydW4gdGhlIHN0YW5kYWxvbmUgY2xpZW50IHdpdGhvdXQgQUNDIC0tPgogICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiAgICAgPHRhcmdldCBuYW1lPSJydW4tc3RhbmRhbG9uZS1jbGllbnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQk8cHJvcGVydHkgbmFtZT0iY2xpZW50LnR5cGUiCi0JICAgICAgICAgIHZhbHVlPSJzdGFuZGFsb25lIi8+Ci0JPGphdmEgY2xhc3NuYW1lPSJjb20uc3VuLnMxcGVxZS5sb2FkYmFsYW5jaW5nLmNsaWVudC5FbnJvbGxlckNsaWVudCIKKyAgICA8cHJvcGVydHkgbmFtZT0iY2xpZW50LnR5cGUiCisgICAgICAgICAgICAgIHZhbHVlPSJzdGFuZGFsb25lIi8+CisgICAgPGphdmEgY2xhc3NuYW1lPSJjb20uc3VuLnMxcGVxZS5sb2FkYmFsYW5jaW5nLmNsaWVudC5FbnJvbGxlckNsaWVudCIKICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2ltcS9saWIvaW1xLmphcjoke2Vudi5TMUFTX0hPTUV9L2ltcS9saWIvaW1xam1zcmEuamFyOiR7ZW52LlMxQVNfSE9NRX0vaW1xL2xpYi9qbXMuamFyOiR7czFhc3Rlc3QuY2xhc3NwYXRofToke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcENsaWVudC5qYXIiCiAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIiBmb3JrPSJ0cnVlIj4KLQk8anZtYXJnIHZhbHVlPSItRG9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbEhvc3Q9JHthZG1pbi5ob3N0fSIvPgotCTxqdm1hcmcgdmFsdWU9Ii1Eb3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydD0ke29yYi5wb3J0fSIvPgotPCEtLQk8anZtYXJnIHZhbHVlPSItRGphdmF4LnJtaS5DT1JCQS5VdGlsQ2xhc3M9Y29tLnN1bi5jb3JiYS5lZS5pbXBsLmphdmF4LnJtaS5DT1JCQS5VdGlsIi8+Ci0JPGp2bWFyZyB2YWx1ZT0iLURvcmcub21nLkNPUkJBLk9SQkNsYXNzPWNvbS5zdW4uY29yYmEuZWUuaW1wbC5vcmIuT1JCSW1wbCIvPgotCTxqdm1hcmcgdmFsdWU9Ii1Eb3JnLm9tZy5DT1JCQS5PUkJTaW5nbGV0b25DbGFzcz1jb20uc3VuLmNvcmJhLmVlLmltcGwub3JiLk9SQlNpbmdsZXRvbiIvPiAtLT4KLQk8YXJnIHZhbHVlPSIke2NsaWVudC50eXBlfSIvPgorICAgIDxqdm1hcmcgdmFsdWU9Ii1Eb3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsSG9zdD0ke2FkbWluLmhvc3R9Ii8+CisgICAgPGp2bWFyZyB2YWx1ZT0iLURvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0PSR7b3JiLnBvcnR9Ii8+Cis8IS0tICAgIDxqdm1hcmcgdmFsdWU9Ii1EamF2YXgucm1pLkNPUkJBLlV0aWxDbGFzcz1jb20uc3VuLmNvcmJhLmVlLmltcGwuamF2YXgucm1pLkNPUkJBLlV0aWwiLz4KKyAgICA8anZtYXJnIHZhbHVlPSItRG9yZy5vbWcuQ09SQkEuT1JCQ2xhc3M9Y29tLnN1bi5jb3JiYS5lZS5pbXBsLm9yYi5PUkJJbXBsIi8+CisgICAgPGp2bWFyZyB2YWx1ZT0iLURvcmcub21nLkNPUkJBLk9SQlNpbmdsZXRvbkNsYXNzPWNvbS5zdW4uY29yYmEuZWUuaW1wbC5vcmIuT1JCU2luZ2xldG9uIi8+IC0tPgorICAgIDxhcmcgdmFsdWU9IiR7Y2xpZW50LnR5cGV9Ii8+CiAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgICA8L3RhcmdldD4gICAKKyAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVuc2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktam1zLWNvbW1vbiIvPgpAQCAtMTYwLDcgKzE2MCw3IEBACiAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLmNvbnBvb2wubmFtZSIgdmFsdWU9ImJtcEVucm9sbGVyUG9vbCIvPgogICAgICAgICA8cGFyYW0gbmFtZT0iamRiYy5yZXNvdXJjZS5uYW1lIiB2YWx1ZT0iamRiYy9ibXAtZW5yb2xsZXJEQiIvPgogICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9va3VwL2Vucm9sbGVyL2NsaWVudC9FbnJvbGxlckNsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvb2t1cC9lbnJvbGxlci9jbGllbnQvRW5yb2xsZXJDbGllbnQuamF2YQppbmRleCA2Njg5YmYzLi5iMWJlMWE5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9va3VwL2Vucm9sbGVyL2NsaWVudC9FbnJvbGxlckNsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb29rdXAvZW5yb2xsZXIvY2xpZW50L0Vucm9sbGVyQ2xpZW50LmphdmEKQEAgLTMxLDExICszMSwxMSBAQAogICAgIHByaXZhdGUgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7IAotICAgICAgICBFbnJvbGxlckNsaWVudCBjbGllbnQgPSBuZXcgRW5yb2xsZXJDbGllbnQoKTsgCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBFbnJvbGxlckNsaWVudCBjbGllbnQgPSBuZXcgRW5yb2xsZXJDbGllbnQoKTsKIAogICAgICAgICAvLyBydW4gdGhlIHRlc3RzCi0gICAgICAgIGNsaWVudC5ydW5UZXN0Q2xpZW50KGFyZ3MpOyAgIAorICAgICAgICBjbGllbnQucnVuVGVzdENsaWVudChhcmdzKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBydW5UZXN0Q2xpZW50KFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTUzLDYxICs1Myw2MSBAQAogCiAgICAgcHJpdmF0ZSB2b2lkIHRlc3QwMShTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIFN0cmluZyBlbnJvbGxlclN0cmluZyA9ICIiOwotCVN0cmluZyBxdWV1ZVN0cmluZyA9ICIiOwotICAgICAgICB0cnkgeyAgCSAgIAotCSAgICBpZiAoYXJncy5sZW5ndGggIT0gMCAmJiBhcmdzWzBdLmVxdWFscygic3RhbmRhbG9uZSIpKSB7Ci0JICAgICAgICBlbnJvbGxlclN0cmluZyA9ICJlamIvTXlFbnJvbGxlciI7Ci0JCXF1ZXVlU3RyaW5nID0gImptcy9TYW1wbGVRdWV1ZSI7Ci0JICAgIH0gZWxzZSB7Ci0JICAgICAgICBlbnJvbGxlclN0cmluZyA9ICJqYXZhOmNvbXAvZW52L2VqYi9TaW1wbGVFbnJvbGxlciI7Ci0JCXF1ZXVlU3RyaW5nID0gImphdmE6Y29tcC9lbnYvam1zL1NhbXBsZVF1ZXVlIjsKLQkgICAgfQotCSAgICBQcm9wZXJ0aWVzIGVudiA9IG5ldyBQcm9wZXJ0aWVzKCk7Ci0JICAgIGVudi5wdXQoImphdmEubmFtaW5nLmZhY3RvcnkuaW5pdGlhbCIsICJvcmcuZ2xhc3NmaXNoLmpuZGkuY29zbmFtaW5nLkNOQ3R4RmFjdG9yeSIpOwotCSAgICBPUkJMb2NhdG9yIG9yYkxvY2F0b3IgPSBHbG9iYWxzLmdldERlZmF1bHRIYWJpdGF0KCkuZ2V0U2VydmljZShPUkJMb2NhdG9yLmNsYXNzKTsKLQkgICAgCi0JICAgIGVudi5wdXQoImphdmEubmFtaW5nLmNvcmJhLm9yYiIsIG9yYkxvY2F0b3IuZ2V0T1JCKCkpOwotCSAgICAvLyBJbml0aWFsaXplIHRoZSBDb250ZXh0IHdpdGggSk5ESSBzcGVjaWZpYyBwcm9wZXJ0aWVzCi0JICAgIEluaXRpYWxDb250ZXh0IGN0eCA9IG5ldyBJbml0aWFsQ29udGV4dChlbnYpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oImxvb2tpbmcgdXAgZWpiL015U3R1ZGVudCB1c2luZyBvcmcuZ2xhc3NmaXNoLmpuZGkuY29zbmFtaW5nLkNOQ3R4RmFjdG9yeS4uLiIpOwotCSAgICBPYmplY3Qgb2JqID0gY3R4Lmxvb2t1cCgiZWpiL015U3R1ZGVudCIpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tlZCB1cCBlamIvTXlTdHVkZW50IHdpdGggQ25DdHhGYWN0b3J5Li4uIik7Ci0JICAgIFN0dWRlbnRIb21lIHNIID0gCi0JICAgICAgKFN0dWRlbnRIb21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqLCAKLQkJCQkJCQlTdHVkZW50SG9tZS5jbGFzcyk7Ci0JICAgIFN0dWRlbnQgZGVuaXNlMSA9IHNILmNyZWF0ZSgiMTExIiwgIlRpZmZhbnkgTW9vcmUiKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGVkIHN0dWRlbnQgaWQgMTExIGZvciBUaWZmYW55IE1vb3JlIik7Ci0JICAgIAotCSAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29raW5nIHVwIE1FSkIuLi4iKTsKLQkgICAgT2JqZWN0IG9ianJlZiA9IGluaXRpYWwubG9va3VwKCJlamIvbWdtdC9NRUpCIik7IAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tlZCB1cCBlamIvbWdtdC9NRUpCIik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2luZyB1cCBFSkIgUkVGcyB3aG9zZSBqbmRpIG5hbWUgaXMgc3BlY2lmaWVkIGFzIGEgY29yYmFuYW1lOiB1cmwgPT0+Iik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRpbmcgbmV3IENvbnRleHQgMS4uIik7Ci0gICAgICAgICAgIAotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVzaW5nIENvbnRleHQgMSwgTG9va2luZyB1cCBFSkIgdXNpbmcgY29yYmFuYW1lOiB1cmwgd2l0aCBnbG9iYWwgam5kaSBuYW1lID09PiIpOwotCSAgIAotCSAgICBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiY29yYmFuYW1lOmlpb3A6bG9jYWxob3N0OjM3MDAjZWpiL015U3R1ZGVudCIpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tlZCB1cCBjb3JiYW5hbWU6aWlvcDpsb2NhbGhvc3Q6MzcwMCNlamIvTXlTdHVkZW50Iik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFN0dWRlbnRIb21lIHNIb21lID0gCi0gICAgICAgICAgICAgICAgKFN0dWRlbnRIb21lKSBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCAKKyAgICBTdHJpbmcgcXVldWVTdHJpbmcgPSAiIjsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgaWYgKGFyZ3MubGVuZ3RoICE9IDAgJiYgYXJnc1swXS5lcXVhbHMoInN0YW5kYWxvbmUiKSkgeworICAgICAgICAgICAgZW5yb2xsZXJTdHJpbmcgPSAiZWpiL015RW5yb2xsZXIiOworICAgICAgICBxdWV1ZVN0cmluZyA9ICJqbXMvU2FtcGxlUXVldWUiOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZW5yb2xsZXJTdHJpbmcgPSAiamF2YTpjb21wL2Vudi9lamIvU2ltcGxlRW5yb2xsZXIiOworICAgICAgICBxdWV1ZVN0cmluZyA9ICJqYXZhOmNvbXAvZW52L2ptcy9TYW1wbGVRdWV1ZSI7CisgICAgICAgIH0KKyAgICAgICAgUHJvcGVydGllcyBlbnYgPSBuZXcgUHJvcGVydGllcygpOworICAgICAgICBlbnYucHV0KCJqYXZhLm5hbWluZy5mYWN0b3J5LmluaXRpYWwiLCAib3JnLmdsYXNzZmlzaC5qbmRpLmNvc25hbWluZy5DTkN0eEZhY3RvcnkiKTsKKyAgICAgICAgT1JCTG9jYXRvciBvcmJMb2NhdG9yID0gR2xvYmFscy5nZXREZWZhdWx0SGFiaXRhdCgpLmdldFNlcnZpY2UoT1JCTG9jYXRvci5jbGFzcyk7CisKKyAgICAgICAgZW52LnB1dCgiamF2YS5uYW1pbmcuY29yYmEub3JiIiwgb3JiTG9jYXRvci5nZXRPUkIoKSk7CisgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIENvbnRleHQgd2l0aCBKTkRJIHNwZWNpZmljIHByb3BlcnRpZXMKKyAgICAgICAgSW5pdGlhbENvbnRleHQgY3R4ID0gbmV3IEluaXRpYWxDb250ZXh0KGVudik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibG9va2luZyB1cCBlamIvTXlTdHVkZW50IHVzaW5nIG9yZy5nbGFzc2Zpc2guam5kaS5jb3NuYW1pbmcuQ05DdHhGYWN0b3J5Li4uIik7CisgICAgICAgIE9iamVjdCBvYmogPSBjdHgubG9va3VwKCJlamIvTXlTdHVkZW50Iik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2VkIHVwIGVqYi9NeVN0dWRlbnQgd2l0aCBDbkN0eEZhY3RvcnkuLi4iKTsKKyAgICAgICAgU3R1ZGVudEhvbWUgc0ggPQorICAgICAgICAgIChTdHVkZW50SG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHVkZW50SG9tZS5jbGFzcyk7CisgICAgICAgIFN0dWRlbnQgZGVuaXNlMSA9IHNILmNyZWF0ZSgiMTExIiwgIlRpZmZhbnkgTW9vcmUiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGVkIHN0dWRlbnQgaWQgMTExIGZvciBUaWZmYW55IE1vb3JlIik7CisKKyAgICAgICAgQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2luZyB1cCBNRUpCLi4uIik7CisgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiZWpiL21nbXQvTUVKQiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tlZCB1cCBlamIvbWdtdC9NRUpCIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2luZyB1cCBFSkIgUkVGcyB3aG9zZSBqbmRpIG5hbWUgaXMgc3BlY2lmaWVkIGFzIGEgY29yYmFuYW1lOiB1cmwgPT0+Iik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRpbmcgbmV3IENvbnRleHQgMS4uIik7CisKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVc2luZyBDb250ZXh0IDEsIExvb2tpbmcgdXAgRUpCIHVzaW5nIGNvcmJhbmFtZTogdXJsIHdpdGggZ2xvYmFsIGpuZGkgbmFtZSA9PT4iKTsKKworICAgICAgICBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiY29yYmFuYW1lOmlpb3A6bG9jYWxob3N0OjM3MDAjZWpiL015U3R1ZGVudCIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tlZCB1cCBjb3JiYW5hbWU6aWlvcDpsb2NhbGhvc3Q6MzcwMCNlamIvTXlTdHVkZW50Iik7CisKKyAgICAgICAgICAgIFN0dWRlbnRIb21lIHNIb21lID0KKyAgICAgICAgICAgICAgICAoU3R1ZGVudEhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3R1ZGVudEhvbWUuY2xhc3MpOwogICAgICAgICAgICAgU3R1ZGVudCBkZW5pc2UgPSBzSG9tZS5jcmVhdGUoIjgyMyIsICJEZW5pc2UgU21pdGgiKTsKIAogCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVXNpbmcgQ29udGV4dCAxLCBsb29raW5nIHVwIGdsb2JhbCBqbmRpIG5hbWUgPT0+Iik7CSAgICAKLQkgICAgT2JqZWN0IG9ialJlZiA9IGluaXRpYWwubG9va3VwKCJlamIvTXlDb3Vyc2UiKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29rZWQgdXAgZWpiL015Q291cnNlIik7Ci0JICAgIENvdXJzZUhvbWUgY0hvbWUgPSAoQ291cnNlSG9tZSkgCi0JICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ialJlZiwgCi0JCQkJCSAgQ291cnNlSG9tZS5jbGFzcyk7CSAgICAKLQkgICAgQ291cnNlIHBvd2VyID0gY0hvbWUuY3JlYXRlKCIyMjAiLCAiUG93ZXIgSjJFRSBQcm9ncmFtbWluZyIpOyAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVc2luZyBDb250ZXh0IDEsIGxvb2tpbmcgdXAgZ2xvYmFsIGpuZGkgbmFtZSA9PT4iKTsKKyAgICAgICAgT2JqZWN0IG9ialJlZiA9IGluaXRpYWwubG9va3VwKCJlamIvTXlDb3Vyc2UiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29rZWQgdXAgZWpiL015Q291cnNlIik7CisgICAgICAgIENvdXJzZUhvbWUgY0hvbWUgPSAoQ291cnNlSG9tZSkKKyAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqUmVmLAorICAgICAgICAgICAgICAgICAgICAgIENvdXJzZUhvbWUuY2xhc3MpOworICAgICAgICBDb3Vyc2UgcG93ZXIgPSBjSG9tZS5jcmVhdGUoIjIyMCIsICJQb3dlciBKMkVFIFByb2dyYW1taW5nIik7CiAKLQkgICAgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoZW5yb2xsZXJTdHJpbmcpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tlZCB1cCAiICsgZW5yb2xsZXJTdHJpbmcpOwotICAgICAgICAgICAgRW5yb2xsZXJIb21lIGVIb21lID0gCi0gICAgICAgICAgICAgICAgKEVucm9sbGVySG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwgCisgICAgICAgIG9ianJlZiA9IGluaXRpYWwubG9va3VwKGVucm9sbGVyU3RyaW5nKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29rZWQgdXAgIiArIGVucm9sbGVyU3RyaW5nKTsKKyAgICAgICAgICAgIEVucm9sbGVySG9tZSBlSG9tZSA9CisgICAgICAgICAgICAgICAgKEVucm9sbGVySG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5yb2xsZXJIb21lLmNsYXNzKTsKICAgICAgICAgICAgIEVucm9sbGVyIGVucm9sbGVyID0gZUhvbWUuY3JlYXRlKCk7CiAgICAgICAgICAgICBlbnJvbGxlci5lbnJvbGwoIjgyMyIsICIyMjAiKTsKQEAgLTEyNSw3ICsxMjUsNyBAQAogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjb3Vyc2VJZCArICIgIiArIGNvdXJzZS5nZXROYW1lKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCk7Ci0gCisKICAgICAgICAgICAgIENvdXJzZSBpbnRybyA9IGNIb21lLmZpbmRCeVByaW1hcnlLZXkoIjc3NyIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGludHJvLmdldE5hbWUoKSArICI6Iik7CiAgICAgICAgICAgICBjb3Vyc2VzID0gaW50cm8uZ2V0U3R1ZGVudElkcygpOwpAQCAtMTM2LDQ3ICsxMzYsNDcgQEAKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oc3R1ZGVudElkICsgIiAiICsgc3R1ZGVudC5nZXROYW1lKCkpOwogICAgICAgICAgICAgfQogCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2luZyB1cCBKTVMgUmVzb3VyY2UgUmVmcyA9PT4iKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGluZyBuZXcgQ29udGV4dCAyLi4iKTsKLQkgICAgQ29udGV4dCBpbml0aWFsMSA9IG5ldyBJbml0aWFsQ29udGV4dCgpOyAgICAgICAgICAgIAkgICAgCi0JICAgIGpha2FydGEuam1zLlF1ZXVlIHF1ZXVlID0gKGpha2FydGEuam1zLlF1ZXVlKSBpbml0aWFsMS5sb29rdXAocXVldWVTdHJpbmcpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oImxvb2tlZCB1cCAiICsgcXVldWVTdHJpbmcpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvb2tpbmcgdXAgSk1TIFJlc291cmNlIFJlZnMgPT0+Iik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRpbmcgbmV3IENvbnRleHQgMi4uIik7CisgICAgICAgIENvbnRleHQgaW5pdGlhbDEgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgamFrYXJ0YS5qbXMuUXVldWUgcXVldWUgPSAoamFrYXJ0YS5qbXMuUXVldWUpIGluaXRpYWwxLmxvb2t1cChxdWV1ZVN0cmluZyk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibG9va2VkIHVwICIgKyBxdWV1ZVN0cmluZyk7CiAKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGluZyBuZXcgQ29udGV4dCAzLi4uIik7Ci0JICAgIENvbnRleHQgaW5pdGlhbDIgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkgICAgamFrYXJ0YS5qbXMuUXVldWVDb25uZWN0aW9uRmFjdG9yeSBxdWV1ZUNvbm5lY3Rpb25GYWN0b3J5ID0gCi0JICAgICAgKFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkpCi0JICAgICAgaW5pdGlhbDIubG9va3VwKCJqbXMvUUNGYWN0b3J5Iik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2VkIHVwIGptcy9RQ0ZhY3RvcnkiKTsKLQkgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRpbmcgbmV3IENvbnRleHQgMy4uLiIpOworICAgICAgICBDb250ZXh0IGluaXRpYWwyID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgIGpha2FydGEuam1zLlF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgcXVldWVDb25uZWN0aW9uRmFjdG9yeSA9CisgICAgICAgICAgKFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkpCisgICAgICAgICAgaW5pdGlhbDIubG9va3VwKCJqbXMvUUNGYWN0b3J5Iik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9va2VkIHVwIGptcy9RQ0ZhY3RvcnkiKTsKKwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvYWQgYmFsYW5jaW5nIiwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9hZCBiYWxhbmNpbmciLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJDYXVnaHQgYW4gdW5leHBlY3RlZCBleGNlcHRpb24hIik7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotICAgIH0gCisgICAgfQogCi0JcHJpdmF0ZSB2b2lkIHRlc3RJbkFwcENsaWVudENvbnRhaW5lcigpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGluZyBuZXcgQ29udGV4dCAuLi4iKTsKLQkJdHJ5IHsKLQkJCUluaXRpYWxDb250ZXh0IGN0eCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotCQkJT2JqZWN0IG9iaiA9IGN0eC5sb29rdXAoImphdmE6Y29tcC9JbkFwcENsaWVudENvbnRhaW5lciIpOwotCQkJaWYgKG9iaiA9PSBudWxsKSB7Ci0JCQkJc3RhdC5hZGRTdGF0dXMoInRlc3RJbkFwcENsaWVudENvbnRhaW5lciIsIHN0YXQuRkFJTCk7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQkJQm9vbGVhbiByZXN1bHQgPSAoQm9vbGVhbikgb2JqOwotCQkJaWYgKCFyZXN1bHQpIHsKLQkJCQlzdGF0LmFkZFN0YXR1cygidGVzdEluQXBwQ2xpZW50Q29udGFpbmVyIiwgc3RhdC5GQUlMKTsKLQkJCX0KLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiTG9va2VkIHVwIGphdmE6Y29tcC9JbkFwcENsaWVudENvbnRhaW5lciA6IgotCQkJCQkrIHJlc3VsdCk7Ci0JCQkgc3RhdC5hZGRTdGF0dXMoInRlc3RJbkFwcENsaWVudENvbnRhaW5lciIsIHN0YXQuUEFTUyk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQkJIHN0YXQuYWRkU3RhdHVzKCJ0ZXN0SW5BcHBDbGllbnRDb250YWluZXIiLCBzdGF0LkZBSUwpOwotCSAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiQ2F1Z2h0IGFuIHVuZXhwZWN0ZWQgZXhjZXB0aW9uISIpOwotCSAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQotfSAKKyAgICBwcml2YXRlIHZvaWQgdGVzdEluQXBwQ2xpZW50Q29udGFpbmVyKCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNyZWF0aW5nIG5ldyBDb250ZXh0IC4uLiIpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgSW5pdGlhbENvbnRleHQgY3R4ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgICAgICBPYmplY3Qgb2JqID0gY3R4Lmxvb2t1cCgiamF2YTpjb21wL0luQXBwQ2xpZW50Q29udGFpbmVyIik7CisgICAgICAgICAgICBpZiAob2JqID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygidGVzdEluQXBwQ2xpZW50Q29udGFpbmVyIiwgc3RhdC5GQUlMKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBCb29sZWFuIHJlc3VsdCA9IChCb29sZWFuKSBvYmo7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ0ZXN0SW5BcHBDbGllbnRDb250YWluZXIiLCBzdGF0LkZBSUwpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb29rZWQgdXAgamF2YTpjb21wL0luQXBwQ2xpZW50Q29udGFpbmVyIDoiCisgICAgICAgICAgICAgICAgICAgICsgcmVzdWx0KTsKKyAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygidGVzdEluQXBwQ2xpZW50Q29udGFpbmVyIiwgc3RhdC5QQVNTKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoInRlc3RJbkFwcENsaWVudENvbnRhaW5lciIsIHN0YXQuRkFJTCk7CisgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJDYXVnaHQgYW4gdW5leHBlY3RlZCBleGNlcHRpb24hIik7CisgICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9va3VwL2Vucm9sbGVyL2NsaWVudC9FbnJvbGxlckNsaWVudHRocmVhZGluZy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvb2t1cC9lbnJvbGxlci9jbGllbnQvRW5yb2xsZXJDbGllbnR0aHJlYWRpbmcuamF2YQppbmRleCA1MjJhZmQ4Li41N2NkNzA4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9va3VwL2Vucm9sbGVyL2NsaWVudC9FbnJvbGxlckNsaWVudHRocmVhZGluZy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb29rdXAvZW5yb2xsZXIvY2xpZW50L0Vucm9sbGVyQ2xpZW50dGhyZWFkaW5nLmphdmEKQEAgLTMxLDMwICszMSwzMCBAQAogICAgIHB1YmxpYyBzdGF0aWMgaW50IGNvdW50ID0gMDsKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBjdHhGYWN0b3J5OwogCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeyAKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgY3R4RmFjdG9yeSA9IGFyZ3NbMF07Ci0JU3lzdGVtLm91dC5wcmludGxuKCJVc2luZyAiICsgY3R4RmFjdG9yeSk7Ci0JZm9yIChpbnQgaSA9IDA7IGkgPCAzMDA7IGkrKykgewotCSAgICBuZXcgRW5yb2xsZXJDbGllbnR0aHJlYWRpbmcoKS5zdGFydCgpOwotCX0KKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVzaW5nICIgKyBjdHhGYWN0b3J5KTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDMwMDsgaSsrKSB7CisgICAgICAgIG5ldyBFbnJvbGxlckNsaWVudHRocmVhZGluZygpLnN0YXJ0KCk7CiAgICAgfQotICAKKyAgICB9CisKICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CiAgICAgICAgIHRyeSB7Ci0JICAgIFByb3BlcnRpZXMgZW52ID0gbmV3IFByb3BlcnRpZXMoKTsKLQkgICAgZW52LnB1dCgiamF2YS5uYW1pbmcuZmFjdG9yeS5pbml0aWFsIiwgY3R4RmFjdG9yeSk7CSAgCi0JICAgIEluaXRpYWxDb250ZXh0IGN0eCA9IG5ldyBJbml0aWFsQ29udGV4dChlbnYpOwotCQkgICAgCi0JICAgIE9iamVjdCBvYmpyZWYgPSBjdHgubG9va3VwKCJlamIvTXlTdHVkZW50Iik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhyZWFkICMiICsgKytjb3VudCArICIgbG9va2VkIHVwLi4uZWpiL015U3R1ZGVudCIpOwotCSAgICAKLQkgICAgU3R1ZGVudEhvbWUgc0hvbWUgPSAKLQkgICAgICAoU3R1ZGVudEhvbWUpIFBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdyhvYmpyZWYsIAotCQkJCQkJCVN0dWRlbnRIb21lLmNsYXNzKTsKLQkgICAgCSAgICAKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCX0KKyAgICAgICAgUHJvcGVydGllcyBlbnYgPSBuZXcgUHJvcGVydGllcygpOworICAgICAgICBlbnYucHV0KCJqYXZhLm5hbWluZy5mYWN0b3J5LmluaXRpYWwiLCBjdHhGYWN0b3J5KTsKKyAgICAgICAgSW5pdGlhbENvbnRleHQgY3R4ID0gbmV3IEluaXRpYWxDb250ZXh0KGVudik7CisKKyAgICAgICAgT2JqZWN0IG9ianJlZiA9IGN0eC5sb29rdXAoImVqYi9NeVN0dWRlbnQiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaHJlYWQgIyIgKyArK2NvdW50ICsgIiBsb29rZWQgdXAuLi5lamIvTXlTdHVkZW50Iik7CisKKyAgICAgICAgU3R1ZGVudEhvbWUgc0hvbWUgPQorICAgICAgICAgIChTdHVkZW50SG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHVkZW50SG9tZS5jbGFzcyk7CisKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9va3VwL2Vucm9sbGVyL2VqYi9Db3Vyc2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb29rdXAvZW5yb2xsZXIvZWpiL0NvdXJzZS5qYXZhCmluZGV4IGQyYTQ2NzQuLjA1YjlmYzAgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb29rdXAvZW5yb2xsZXIvZWpiL0NvdXJzZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb29rdXAvZW5yb2xsZXIvZWpiL0NvdXJzZS5qYXZhCkBAIC0yMiwyNCArMjIsMjQgQEAKIAogCiBwdWJsaWMgaW50ZXJmYWNlIENvdXJzZSBleHRlbmRzIEVKQk9iamVjdCB7Ci0gCisKICAgICAvKioKICAgICAgKiBSZXR1cm5zIGFuIGFycmF5bGlzdCBvZiBTdHVkZW50SWRzIHRha2luZyB0aGUgY291cnNlLgotICAgICAqIEBleGNlcHRpb24gUmVtb3RlRXhjZXB0aW9uIAorICAgICAqIEBleGNlcHRpb24gUmVtb3RlRXhjZXB0aW9uCiAgICAgICovCiAgICAgcHVibGljIEFycmF5TGlzdCBnZXRTdHVkZW50SWRzKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGNvdXJzZS4KLSAgICAgKiBAZXhjZXB0aW9uIFJlbW90ZUV4Y2VwdGlvbiAKLSAgICAgKiAKKyAgICAgKiBAZXhjZXB0aW9uIFJlbW90ZUV4Y2VwdGlvbgorICAgICAqCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgIC8qKgogICAgICAqIFNldHMgdGhlIG5hbWUgb2YgdGhlIGNvdXJzZS4KLSAgICAgKiBAZXhjZXB0aW9uIFJlbW90ZUV4Y2VwdGlvbiAKLSAgICAgKiAKKyAgICAgKiBAZXhjZXB0aW9uIFJlbW90ZUV4Y2VwdGlvbgorICAgICAqCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvb2t1cC9lbnJvbGxlci9lamIvQ291cnNlQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvb2t1cC9lbnJvbGxlci9lamIvQ291cnNlQmVhbi5qYXZhCmluZGV4IGMwZmY4YzQuLjE2YmY2MzkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb29rdXAvZW5yb2xsZXIvZWpiL0NvdXJzZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9va3VwL2Vucm9sbGVyL2VqYi9Db3Vyc2VCZWFuLmphdmEKQEAgLTEwNSw3ICsxMDUsNyBAQAogICAgICAgICAgICAgICAgIChEYXRhU291cmNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvamRiYy9ibXAtZW5yb2xsZXJEQiIpOwogICAgICAgICAgICAgQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBPYmplY3Qgb2JqcmVmID0gaW5pdGlhbC5sb29rdXAoImVqYi9NeUVucm9sbGVyIik7Ci0gICAgICAgICAgICBlbnJvbGxlckhvbWUgPSAKKyAgICAgICAgICAgIGVucm9sbGVySG9tZSA9CiAgICAgICAgICAgICAgICAgKEVucm9sbGVySG9tZSkgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5yb2xsZXJIb21lLmNsYXNzKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9va3VwL2Vucm9sbGVyL2VqYi9Db3Vyc2VIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9va3VwL2Vucm9sbGVyL2VqYi9Db3Vyc2VIb21lLmphdmEKaW5kZXggYTk2OWEzYi4uZGU4ZTRmYiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvb2t1cC9lbnJvbGxlci9lamIvQ291cnNlSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb29rdXAvZW5yb2xsZXIvZWpiL0NvdXJzZUhvbWUuamF2YQpAQCAtMzAsMTIgKzMwLDEyIEBACiAgICAgICovCiAgICAgcHVibGljIENvdXJzZSBjcmVhdGUoU3RyaW5nIGNvdXJzZUlkLCBTdHJpbmcgbmFtZSkKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiwgQ3JlYXRlRXhjZXB0aW9uOwotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyBhIHJlZmVyZW5jZSB0byB0aGUgcmVtb3RlIGludGVyZmFjZSB0byB0aGUgQ291cnNlQmVhbiBvYmplY3QgYnkgUHJpbWFyeSBLZXkuCiAgICAgICogQGV4Y2VwdGlvbiB0aHJvd3MgRmluZGVyRXhjZXB0aW9uIGFuZCBSZW1vdGVFeGNlcHRpb24uCiAgICAgICoKICAgICAgKi8KLSAgICBwdWJsaWMgQ291cnNlIGZpbmRCeVByaW1hcnlLZXkoU3RyaW5nIGNvdXJzZUlkKSAKKyAgICBwdWJsaWMgQ291cnNlIGZpbmRCeVByaW1hcnlLZXkoU3RyaW5nIGNvdXJzZUlkKQogICAgICAgICB0aHJvd3MgRmluZGVyRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9va3VwL2Vucm9sbGVyL2VqYi9FbnJvbGxlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvb2t1cC9lbnJvbGxlci9lamIvRW5yb2xsZXIuamF2YQppbmRleCAxZWQ4OGZkLi43Y2RlZWU4IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9va3VwL2Vucm9sbGVyL2VqYi9FbnJvbGxlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb29rdXAvZW5yb2xsZXIvZWpiL0Vucm9sbGVyLmphdmEKQEAgLTIxLDcgKzIxLDcgQEAKIGltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiAKIHB1YmxpYyBpbnRlcmZhY2UgRW5yb2xsZXIgZXh0ZW5kcyBFSkJPYmplY3QgewotIAorCiAgLyoqCiAgICogRW5yb2xscyBhIFN0dWRlbnQgaW4gYSBjb3Vyc2UKICAgKiBAcGFyYW0gc3R1ZGVudElkIHByaW1hcnkga2V5IG9mIHRoZSBzdHVkZW50IG9iamVjdApAQCAtNDAsNyArNDAsNyBAQAogICAgcHVibGljIHZvaWQgdW5FbnJvbGwoU3RyaW5nIHN0dWRlbnRJZCwgU3RyaW5nIGNvdXJzZUlkKQogICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKICAvKioKLSAgKiBEZWxldGVzIGEgU3R1ZGVudCAKKyAgKiBEZWxldGVzIGEgU3R1ZGVudAogICAqIEBwYXJhbSBzdHVkZW50SWQgcHJpbWFyeSBrZXkgb2YgdGhlIHN0dWRlbnQgb2JqZWN0CiAgICogQGV4Y2VwdGlvbiBSZW1vdGVFeGNlcHRpb24KICAgKi8KQEAgLTQ5LDcgKzQ5LDcgQEAKICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAvKioKLSAgKiBEZWxldGVzIGEgQ291cnNlIAorICAqIERlbGV0ZXMgYSBDb3Vyc2UKICAgKiBAcGFyYW0gY291cnNlSWQgcHJpbWFyeSBrZXkgb2YgdGhlIGNvdXJzZSBvYmplY3QKICAgKiBAZXhjZXB0aW9uIFJlbW90ZUV4Y2VwdGlvbgogICAqLwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvb2t1cC9lbnJvbGxlci9lamIvRW5yb2xsZXJCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9va3VwL2Vucm9sbGVyL2VqYi9FbnJvbGxlckJlYW4uamF2YQppbmRleCBjZTk4NzdmLi5hMGI4NDdhIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9va3VwL2Vucm9sbGVyL2VqYi9FbnJvbGxlckJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9va3VwL2Vucm9sbGVyL2VqYi9FbnJvbGxlckJlYW4uamF2YQpAQCAtMTYsNyArMTYsNyBAQAogCiBwYWNrYWdlIGNvbS5zdW4uczFwZXFlLmVqYi5ibXAuZW5yb2xsZXIuZWpiOwogCi1pbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOyAKK2ltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgamFrYXJ0YS5lamIuKjsKIGltcG9ydCBqYXZhLnNxbC4qOwogaW1wb3J0IGphdmF4LnNxbC4qOwpAQCAtMjQsNyArMjQsNyBAQAogaW1wb3J0IGphdmF4Lm5hbWluZy4qOwogCiBwdWJsaWMgY2xhc3MgRW5yb2xsZXJCZWFuIGltcGxlbWVudHMgU2Vzc2lvbkJlYW4gewotIAorCiAgICAgcHJpdmF0ZSBDb25uZWN0aW9uIGNvbjsKICAgICBwcml2YXRlIFN0cmluZyBkYk5hbWUgPSAiamF2YTpjb21wL2Vudi9qZGJjL2JtcC1lbnJvbGxlckRCIjsKICAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IGNvbnRleHQ7CkBAIC01OSw3ICs1OSw3IEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogRGVsZXRlcyBhIFN0dWRlbnQgCisgICAgICogRGVsZXRlcyBhIFN0dWRlbnQKICAgICAgKiBAcGFyYW0gc3R1ZGVudElkIHByaW1hcnkga2V5IG9mIHRoZSBzdHVkZW50IG9iamVjdAogICAgICAqIEBleGNlcHRpb24gUmVtb3RlRXhjZXB0aW9uCiAgICAgICovCkBAIC03Miw3ICs3Miw3IEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogRGVsZXRlcyBhIENvdXJzZSAKKyAgICAgKiBEZWxldGVzIGEgQ291cnNlCiAgICAgICogQHBhcmFtIGNvdXJzZUlkIHByaW1hcnkga2V5IG9mIHRoZSBjb3Vyc2Ugb2JqZWN0CiAgICAgICogQGV4Y2VwdGlvbiBSZW1vdGVFeGNlcHRpb24KICAgICAgKi8KQEAgLTE2Miw3ICsxNjIsNyBAQAogCiAgICAgICAgIFN0cmluZyBpbnNlcnRTdGF0ZW1lbnQgPQogICAgICAgICAgICAgImluc2VydCBpbnRvIGVucm9sbG1lbnQgdmFsdWVzICggPyAsID8gKSI7Ci0gICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHByZXBTdG10ID0gCisgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHByZXBTdG10ID0KICAgICAgICAgICAgIGNvbi5wcmVwYXJlU3RhdGVtZW50KGluc2VydFN0YXRlbWVudCk7CiAKICAgICAgICAgcHJlcFN0bXQuc2V0U3RyaW5nKDEsIHN0dWRlbnRJZCk7CkBAIC0xNzIsNyArMTcyLDcgQEAKICAgICAgICAgcHJlcFN0bXQuY2xvc2UoKTsKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgZGVsZXRlRW50cnkoU3RyaW5nIHN0dWRlbnRJZCwgU3RyaW5nIGNvdXJzZUlkKSAKKyAgICBwcml2YXRlIHZvaWQgZGVsZXRlRW50cnkoU3RyaW5nIHN0dWRlbnRJZCwgU3RyaW5nIGNvdXJzZUlkKQogICAgICAgICB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKIAogICAgICAgICBTdHJpbmcgZGVsZXRlU3RhdGVtZW50ID0KQEAgLTIxNSwxMyArMjE1LDEzIEBACiAgICAgICAgIHByZXBTdG10LmNsb3NlKCk7CiAgICAgfQogCi0gICAgcHJpdmF0ZSBBcnJheUxpc3Qgc2VsZWN0U3R1ZGVudChTdHJpbmcgY291cnNlSWQpIAorICAgIHByaXZhdGUgQXJyYXlMaXN0IHNlbGVjdFN0dWRlbnQoU3RyaW5nIGNvdXJzZUlkKQogICAgICAgICB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKIAogICAgICAgICBTdHJpbmcgc2VsZWN0U3RhdGVtZW50ID0KICAgICAgICAgICAgICJzZWxlY3Qgc3R1ZGVudGlkICIgKwogICAgICAgICAgICAgImZyb20gZW5yb2xsbWVudCB3aGVyZSBjb3Vyc2VpZCA9ID8gIjsKLSAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcFN0bXQgPSAKKyAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcFN0bXQgPQogICAgICAgICAgICAgY29uLnByZXBhcmVTdGF0ZW1lbnQoc2VsZWN0U3RhdGVtZW50KTsKIAogICAgICAgICBwcmVwU3RtdC5zZXRTdHJpbmcoMSwgY291cnNlSWQpOwpAQCAtMjM3LDEzICsyMzcsMTMgQEAKICAgICAgICAgcmV0dXJuIGE7CiAgICAgfQogCi0gICAgcHJpdmF0ZSBBcnJheUxpc3Qgc2VsZWN0Q291cnNlKFN0cmluZyBzdHVkZW50SWQpIAorICAgIHByaXZhdGUgQXJyYXlMaXN0IHNlbGVjdENvdXJzZShTdHJpbmcgc3R1ZGVudElkKQogICAgICAgICB0aHJvd3MgU1FMRXhjZXB0aW9uIHsKIAogICAgICAgICBTdHJpbmcgc2VsZWN0U3RhdGVtZW50ID0KICAgICAgICAgICAgICJzZWxlY3QgY291cnNlaWQgIiArCiAgICAgICAgICAgICAiZnJvbSBlbnJvbGxtZW50IHdoZXJlIHN0dWRlbnRpZCA9ID8gIjsKLSAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcFN0bXQgPSAKKyAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcHJlcFN0bXQgPQogICAgICAgICAgICAgY29uLnByZXBhcmVTdGF0ZW1lbnQoc2VsZWN0U3RhdGVtZW50KTsKIAogICAgICAgICBwcmVwU3RtdC5zZXRTdHJpbmcoMSwgc3R1ZGVudElkKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb29rdXAvZW5yb2xsZXIvZWpiL1N0dWRlbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb29rdXAvZW5yb2xsZXIvZWpiL1N0dWRlbnQuamF2YQppbmRleCA2YThiZDI5Li5jZTNjZWM0IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9va3VwL2Vucm9sbGVyL2VqYi9TdHVkZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvb2t1cC9lbnJvbGxlci9lamIvU3R1ZGVudC5qYXZhCkBAIC0yMiw5ICsyMiw5IEBACiAKIAogcHVibGljIGludGVyZmFjZSBTdHVkZW50IGV4dGVuZHMgRUpCT2JqZWN0IHsKLSAKKwogICAvKioKLSAgICogUmV0dXJucyB0aGUgQ291cnNlSWRzIHRoYXQgYSBzdHVkZW50IGlzIGVucm9sbGVkIGluLiAKKyAgICogUmV0dXJucyB0aGUgQ291cnNlSWRzIHRoYXQgYSBzdHVkZW50IGlzIGVucm9sbGVkIGluLgogICAgKiBAcGFyYW0gc3R1ZGVudElkIHByaW1hcnkga2V5IG9mIHRoZSBzdHVkZW50IG9iamVjdAogICAgKiBAcGFyYW0gY291cnNlSWQgcHJpbWFyeSBrZXkgb2YgdGhlIGNvdXJzZSBvYmplY3QKICAgICogQGV4Y2VwdGlvbiBSZW1vdGVFeGNlcHRpb24KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb29rdXAvZW5yb2xsZXIvZWpiL1N0dWRlbnRCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9va3VwL2Vucm9sbGVyL2VqYi9TdHVkZW50QmVhbi5qYXZhCmluZGV4IDA0ZDk1MWUuLjZiMzlhYWQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb29rdXAvZW5yb2xsZXIvZWpiL1N0dWRlbnRCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvb2t1cC9lbnJvbGxlci9lamIvU3R1ZGVudEJlYW4uamF2YQpAQCAtOTgsNyArOTgsNyBAQAogICAgICAgICBjb3Vyc2VJZHMgPSBuZXcgQXJyYXlMaXN0KCk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICAgICAgICAgZGF0YVNvdXJjZSA9IAorICAgICAgICAgICAgZGF0YVNvdXJjZSA9CiAgICAgICAgICAgICAgICAgKERhdGFTb3VyY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9qZGJjL2JtcC1lbnJvbGxlckRCIik7CiAgICAgICAgICAgICBDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIE9iamVjdCBvYmpyZWYgPSBpbml0aWFsLmxvb2t1cCgiZWpiL015RW5yb2xsZXIiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb29rdXAvZW5yb2xsZXIvZWpiL1N0dWRlbnRIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9va3VwL2Vucm9sbGVyL2VqYi9TdHVkZW50SG9tZS5qYXZhCmluZGV4IDJhZTNkZTUuLmZjYTU0NDYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb29rdXAvZW5yb2xsZXIvZWpiL1N0dWRlbnRIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvb2t1cC9lbnJvbGxlci9lamIvU3R1ZGVudEhvbWUuamF2YQpAQCAtMzYsNyArMzYsNyBAQAogICAgICAqIEBleGNlcHRpb24gdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiBhbmQgUmVtb3RlRXhjZXB0aW9uLgogICAgICAqCiAgICAgICovCi0gCi0gICAgcHVibGljIFN0dWRlbnQgZmluZEJ5UHJpbWFyeUtleShTdHJpbmcgc3R1ZGVudElkKSAKKworICAgIHB1YmxpYyBTdHVkZW50IGZpbmRCeVByaW1hcnlLZXkoU3RyaW5nIHN0dWRlbnRJZCkKICAgICAgICAgdGhyb3dzIEZpbmRlckV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvb2t1cC9lbnJvbGxlci9zcWwvY3JlYXRlX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9va3VwL2Vucm9sbGVyL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAppbmRleCAyMDVkNjBmLi45NjNhOTIzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9va3VwL2Vucm9sbGVyL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9va3VwL2Vucm9sbGVyL3NxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbApAQCAtMSwzNyArMSwzNyBAQAotY3JlYXRlIHRhYmxlIHN0dWRlbnQgDQotKHN0dWRlbnRpZCB2YXJjaGFyKDMpIGNvbnN0cmFpbnQgcGtfc3R1ZGVudCBwcmltYXJ5IGtleSwgIA0KLW5hbWUgdmFyY2hhcigzNikpOw0KLQ0KLWluc2VydCBpbnRvIHN0dWRlbnQNCi12YWx1ZXMgKCcxMjMnLCAnU2FsIEpvbmVzJyk7DQotaW5zZXJ0IGludG8gc3R1ZGVudA0KLXZhbHVlcyAoJzIyMScsICdBbGljZSBTbWl0aCcpOw0KLWluc2VydCBpbnRvIHN0dWRlbnQNCi12YWx1ZXMgKCczODgnLCAnRWxpemFiZXRoIFdpbGxpcycpOw0KLWluc2VydCBpbnRvIHN0dWRlbnQNCi12YWx1ZXMgKCc0NTYnLCAnSm9lIFNtaXRoJyk7DQotDQotDQotY3JlYXRlIHRhYmxlIGNvdXJzZSANCi0oY291cnNlaWQgdmFyY2hhcigzKSBjb25zdHJhaW50IHBrX2NvdXJzZSBwcmltYXJ5IGtleSwgIA0KLW5hbWUgdmFyY2hhcigzNikpOw0KLQ0KLWluc2VydCBpbnRvIGNvdXJzZQ0KLXZhbHVlcyAoJzk5OScsICdBZHZhbmNlZCBKYXZhIFByb2dyYW1taW5nJyk7DQotaW5zZXJ0IGludG8gY291cnNlDQotdmFsdWVzICgnMTExJywgJ0oyRUUgZm9yIFNtYXJ0IFBlb3BsZScpOw0KLWluc2VydCBpbnRvIGNvdXJzZQ0KLXZhbHVlcyAoJzMzMycsICdYTUwgTWFkZSBFYXN5Jyk7DQotaW5zZXJ0IGludG8gY291cnNlDQotdmFsdWVzICgnNzc3JywgJ0FuIEludHJvZHVjdGlvbiB0byBKYXZhIFByb2dyYW1taW5nJyk7DQotDQotY3JlYXRlIHRhYmxlIGVucm9sbG1lbnQNCi0oc3R1ZGVudGlkIHZhcmNoYXIoMyksICANCi1jb3Vyc2VpZCB2YXJjaGFyKDMpLCAgDQotY29uc3RyYWludCBma19zdHVkZW50aWQNCi1mb3JlaWduIGtleSAoc3R1ZGVudGlkKQ0KLXJlZmVyZW5jZXMgc3R1ZGVudChzdHVkZW50aWQpLA0KLWNvbnN0cmFpbnQgZmtfY291cnNlaWQNCi1mb3JlaWduIGtleSAoY291cnNlaWQpDQotcmVmZXJlbmNlcyBjb3Vyc2UoY291cnNlaWQpKTsNCi0NCitjcmVhdGUgdGFibGUgc3R1ZGVudAorKHN0dWRlbnRpZCB2YXJjaGFyKDMpIGNvbnN0cmFpbnQgcGtfc3R1ZGVudCBwcmltYXJ5IGtleSwKK25hbWUgdmFyY2hhcigzNikpOworCitpbnNlcnQgaW50byBzdHVkZW50Cit2YWx1ZXMgKCcxMjMnLCAnU2FsIEpvbmVzJyk7CitpbnNlcnQgaW50byBzdHVkZW50Cit2YWx1ZXMgKCcyMjEnLCAnQWxpY2UgU21pdGgnKTsKK2luc2VydCBpbnRvIHN0dWRlbnQKK3ZhbHVlcyAoJzM4OCcsICdFbGl6YWJldGggV2lsbGlzJyk7CitpbnNlcnQgaW50byBzdHVkZW50Cit2YWx1ZXMgKCc0NTYnLCAnSm9lIFNtaXRoJyk7CisKKworY3JlYXRlIHRhYmxlIGNvdXJzZQorKGNvdXJzZWlkIHZhcmNoYXIoMykgY29uc3RyYWludCBwa19jb3Vyc2UgcHJpbWFyeSBrZXksCituYW1lIHZhcmNoYXIoMzYpKTsKKworaW5zZXJ0IGludG8gY291cnNlCit2YWx1ZXMgKCc5OTknLCAnQWR2YW5jZWQgSmF2YSBQcm9ncmFtbWluZycpOworaW5zZXJ0IGludG8gY291cnNlCit2YWx1ZXMgKCcxMTEnLCAnSjJFRSBmb3IgU21hcnQgUGVvcGxlJyk7CitpbnNlcnQgaW50byBjb3Vyc2UKK3ZhbHVlcyAoJzMzMycsICdYTUwgTWFkZSBFYXN5Jyk7CitpbnNlcnQgaW50byBjb3Vyc2UKK3ZhbHVlcyAoJzc3NycsICdBbiBJbnRyb2R1Y3Rpb24gdG8gSmF2YSBQcm9ncmFtbWluZycpOworCitjcmVhdGUgdGFibGUgZW5yb2xsbWVudAorKHN0dWRlbnRpZCB2YXJjaGFyKDMpLAorY291cnNlaWQgdmFyY2hhcigzKSwKK2NvbnN0cmFpbnQgZmtfc3R1ZGVudGlkCitmb3JlaWduIGtleSAoc3R1ZGVudGlkKQorcmVmZXJlbmNlcyBzdHVkZW50KHN0dWRlbnRpZCksCitjb25zdHJhaW50IGZrX2NvdXJzZWlkCitmb3JlaWduIGtleSAoY291cnNlaWQpCityZWZlcmVuY2VzIGNvdXJzZShjb3Vyc2VpZCkpOworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9va3VwL2Vucm9sbGVyL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbG9va3VwL2Vucm9sbGVyL3NxbC9kcm9wX3BvaW50YmFzZS5zcWwKaW5kZXggMmQwZWQxNS4uMDZlNTcwNSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL2xvb2t1cC9lbnJvbGxlci9zcWwvZHJvcF9wb2ludGJhc2Uuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9sb29rdXAvZW5yb2xsZXIvc3FsL2Ryb3BfcG9pbnRiYXNlLnNxbApAQCAtMSwzICsxLDMgQEAKLWRyb3AgdGFibGUgZW5yb2xsbWVudDsNCi1kcm9wIHRhYmxlIHN0dWRlbnQ7DQotZHJvcCB0YWJsZSBjb3Vyc2U7DQorZHJvcCB0YWJsZSBlbnJvbGxtZW50OworZHJvcCB0YWJsZSBzdHVkZW50OworZHJvcCB0YWJsZSBjb3Vyc2U7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbmFtaW5nMi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbmFtaW5nMi9idWlsZC54bWwKaW5kZXggNThhYmJkMi4uNjM2NDA3NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL25hbWluZzIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9uYW1pbmcyL2J1aWxkLnhtbApAQCAtNDYsNCArNDYsNCBAQAogICAgICAgPC9hcnRpZmFjdDptdm4+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+Ci0gICAgCisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9uYW1pbmcyL2NvbnRleHQvc3JjL21haW4vamF2YS90ZXN0L1Rlc3RCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbmFtaW5nMi9jb250ZXh0L3NyYy9tYWluL2phdmEvdGVzdC9UZXN0QmVhbi5qYXZhCmluZGV4IGMzZGY4MTcuLmJjYzY3NjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9uYW1pbmcyL2NvbnRleHQvc3JjL21haW4vamF2YS90ZXN0L1Rlc3RCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL25hbWluZzIvY29udGV4dC9zcmMvbWFpbi9qYXZhL3Rlc3QvVGVzdEJlYW4uamF2YQpAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dChwcm9wcyk7CiAgICAgICAgIHJldHVybiAoVCkgaWMubG9va3VwKG5hbWUpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBOYW1pbmdFbnVtZXJhdGlvbjxOYW1lQ2xhc3NQYWlyPiBsaXN0RW1wdHlTdHJpbmcoKSB0aHJvd3MgTmFtaW5nRXhjZXB0aW9uIHsKICAgICAgICAgQ29udGV4dCBjb250ZXh0ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgIHJldHVybiBjb250ZXh0Lmxpc3QoIiIpOwpAQCAtNTcsNyArNTcsNyBAQAogICAgICAgICBDb250ZXh0IGNvbnRleHQgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgcmV0dXJuIGNvbnRleHQubGlzdEJpbmRpbmdzKCJqYXZhOmdsb2JhbCIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBOYW1pbmdFbnVtZXJhdGlvbjxOYW1lQ2xhc3NQYWlyPiBsaXN0SmF2YUNvbXAoKSB0aHJvd3MgTmFtaW5nRXhjZXB0aW9uIHsKICAgICAgICAgQ29udGV4dCBjb250ZXh0ID0gKENvbnRleHQpIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpjb21wLyIpOwogICAgICAgICByZXR1cm4gY29udGV4dC5saXN0KCJlbnYiKTsKQEAgLTY3LDcgKzY3LDcgQEAKICAgICAgICAgQ29udGV4dCBjb250ZXh0ID0gKENvbnRleHQpIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpjb21wLyIpOwogICAgICAgICByZXR1cm4gY29udGV4dC5saXN0QmluZGluZ3MoImVudiIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBOYW1pbmdFbnVtZXJhdGlvbjxOYW1lQ2xhc3NQYWlyPiBsaXN0SmF2YU1vZHVsZSgpIHRocm93cyBOYW1pbmdFeGNlcHRpb24gewogICAgICAgICBDb250ZXh0IGNvbnRleHQgPSAoQ29udGV4dCkgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOm1vZHVsZS8iKTsKICAgICAgICAgcmV0dXJuIGNvbnRleHQubGlzdCgiIik7CkBAIC03Nyw3ICs3Nyw3IEBACiAgICAgICAgIENvbnRleHQgY29udGV4dCA9IChDb250ZXh0KSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6bW9kdWxlLyIpOwogICAgICAgICByZXR1cm4gY29udGV4dC5saXN0QmluZGluZ3MoIiIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBOYW1pbmdFbnVtZXJhdGlvbjxOYW1lQ2xhc3NQYWlyPiBsaXN0SmF2YUFwcCgpIHRocm93cyBOYW1pbmdFeGNlcHRpb24gewogICAgICAgICBDb250ZXh0IGNvbnRleHQgPSAoQ29udGV4dCkgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmFwcC8iKTsKICAgICAgICAgcmV0dXJuIGNvbnRleHQubGlzdCgiIik7CkBAIC04NywyMiArODcsMjIgQEAKICAgICAgICAgQ29udGV4dCBjb250ZXh0ID0gKENvbnRleHQpIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTphcHAvIik7CiAgICAgICAgIHJldHVybiBjb250ZXh0Lmxpc3RCaW5kaW5ncygiIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgY2xvc2VOYW1pbmdFbnVtZXJhdGlvbnMoKSB0aHJvd3MgTmFtaW5nRXhjZXB0aW9uIHsKICAgICAgICAgbGlzdEVtcHR5U3RyaW5nKCkuY2xvc2UoKTsKICAgICAgICAgbGlzdEJpbmRpbmdzRW1wdHlTdHJpbmcoKS5jbG9zZSgpOwotICAgICAgICAKKwogICAgICAgICBsaXN0SmF2YUNvbXAoKS5jbG9zZSgpOwogICAgICAgICBsaXN0QmluZGluZ3NKYXZhQ29tcCgpLmNsb3NlKCk7Ci0gICAgICAgIAorCiAgICAgICAgIGxpc3RKYXZhTW9kdWxlKCkuY2xvc2UoKTsKICAgICAgICAgbGlzdEJpbmRpbmdzSmF2YU1vZHVsZSgpLmNsb3NlKCk7Ci0gICAgICAgCisKICAgICAgICAgbGlzdEphdmFBcHAoKS5jbG9zZSgpOwogICAgICAgICBsaXN0QmluZGluZ3NKYXZhQXBwKCkuY2xvc2UoKTsKICAgICB9Ci0gICAgCi0JcHVibGljIEJvb2xlYW4gZ2V0SXNJbkFwcENsaWVudENvbnRhaW5lcigpIHsKLQkJcmV0dXJuIGlzSW5BcHBDbGllbnRDb250YWluZXI7Ci0JfQorCisgICAgcHVibGljIEJvb2xlYW4gZ2V0SXNJbkFwcENsaWVudENvbnRhaW5lcigpIHsKKyAgICAgICAgcmV0dXJuIGlzSW5BcHBDbGllbnRDb250YWluZXI7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL25hbWluZzIvY29udGV4dC9zcmMvdGVzdC9qYXZhL3Rlc3QvQ29udGV4dFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9uYW1pbmcyL2NvbnRleHQvc3JjL3Rlc3QvamF2YS90ZXN0L0NvbnRleHRUZXN0LmphdmEKaW5kZXggNGM4NTVlMi4uOWNiZDlkZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL25hbWluZzIvY29udGV4dC9zcmMvdGVzdC9qYXZhL3Rlc3QvQ29udGV4dFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbmFtaW5nMi9jb250ZXh0L3NyYy90ZXN0L2phdmEvdGVzdC9Db250ZXh0VGVzdC5qYXZhCkBAIC00OCw5ICs0OCw5IEBACiAKICAgICBAUnVsZQogICAgIHB1YmxpYyBUZXN0V2F0Y2hlciByZXBvcnRXYXRjaGVyPW5ldyBSZXBvcnRXYXRjaGVyKHN0YXQsICJOYW1pbmc6Om5hbWluZzI6OkNvbnRleHRUZXN0Iik7Ci0gICAgCisKICAgICBAUnVsZSBwdWJsaWMgVGVzdE5hbWUgdGVzdE5hbWUgPSBuZXcgVGVzdE5hbWUoKTsKLSAgICAKKwogICAgIEBCZWZvcmVDbGFzcyBwdWJsaWMgc3RhdGljIHZvaWQgc2V0VXBDbGFzcygpIHsKICAgICAgICAgZWpiQ29udGFpbmVyID0gRUpCQ29udGFpbmVyLmNyZWF0ZUVKQkNvbnRhaW5lcigpOwogICAgIH0KQEAgLTgwLDM0ICs4MCwzNCBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RCZWFuIGZyb20gbG9va3VwOiAiICsgYik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGF0YVNvdXJjZSBmcm9tIGxvb2t1cDogIiArIGRzKTsKICAgICB9Ci0gICAgCisKICAgICBAVGVzdCBwdWJsaWMgdm9pZCBsaXN0RW1wdHlTdHJpbmcyKCkgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0ZXN0QmVhbi5saXN0RW1wdHlTdHJpbmcoKS50b1N0cmluZygpKTsKICAgICB9Ci0gICAgCisKICAgICBAVGVzdCBwdWJsaWMgdm9pZCBsaXN0RW1wdHlTdHJpbmcoKSB0aHJvd3MgTmFtaW5nRXhjZXB0aW9uIHsKICAgICAgICAgQ29udGV4dCBjb250ZXh0ID0gZWpiQ29udGFpbmVyLmdldENvbnRleHQoKTsKICAgICAgICAgTmFtaW5nRW51bWVyYXRpb248TmFtZUNsYXNzUGFpcj4gbGlzdCA9IGNvbnRleHQubGlzdCgiIik7CiAgICAgICAgIGFzc2VydE5vdE51bGwobGlzdCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IE5hbWVDbGFzc1BhaXI6ICIgKyB0b1N0cmluZyhsaXN0KSk7CiAgICAgfQotICAgIAorCiAgICAgQFRlc3QgcHVibGljIHZvaWQgbGlzdEJpbmRpbmdzRW1wdHlTdHJpbmcyKCkgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0ZXN0QmVhbi5saXN0QmluZGluZ3NFbXB0eVN0cmluZygpLnRvU3RyaW5nKCkpOwogICAgIH0KLSAKKwogICAgIEBUZXN0IHB1YmxpYyB2b2lkIGxpc3RCaW5kaW5nc0VtcHR5U3RyaW5nKCkgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbiB7CiAgICAgICAgIENvbnRleHQgY29udGV4dCA9IGVqYkNvbnRhaW5lci5nZXRDb250ZXh0KCk7CiAgICAgICAgIE5hbWluZ0VudW1lcmF0aW9uPEJpbmRpbmc+IGxpc3QgPSBjb250ZXh0Lmxpc3RCaW5kaW5ncygiIik7CiAgICAgICAgIGFzc2VydE5vdE51bGwobGlzdCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IEJpbmRpbmc6ICIgKyB0b1N0cmluZyhsaXN0KSk7CiAgICAgfQotICAgIAorCiAgICAgQElnbm9yZQogICAgIEBUZXN0IHB1YmxpYyB2b2lkIGxpc3RHbG9iYWwyKCkgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0ZXN0QmVhbi5saXN0R2xvYmFsKCkudG9TdHJpbmcoKSk7CiAgICAgfQotICAgIAorCiAgICAgQElnbm9yZSAvL2dvdCBudWxsIGNvbXBvbmVudElkCiAgICAgQFRlc3QgcHVibGljIHZvaWQgbGlzdEdsb2JhbCgpIHRocm93cyBOYW1pbmdFeGNlcHRpb24gewogICAgICAgICBDb250ZXh0IGNvbnRleHQgPSBlamJDb250YWluZXIuZ2V0Q29udGV4dCgpOwpAQCAtMTE1LDEyICsxMTUsMTIgQEAKICAgICAgICAgYXNzZXJ0Tm90TnVsbChsaXN0KTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgTmFtZUNsYXNzUGFpcjogIiArIHRvU3RyaW5nKGxpc3QpKTsKICAgICB9Ci0gICAgCisKICAgICBASWdub3JlCiAgICAgQFRlc3QgcHVibGljIHZvaWQgbGlzdEJpbmRpbmdzR2xvYmFsMigpIHRocm93cyBOYW1pbmdFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odGVzdEJlYW4ubGlzdEJpbmRpbmdzR2xvYmFsKCkudG9TdHJpbmcoKSk7CiAgICAgfQotICAgIAorCiAgICAgQElnbm9yZQogICAgIEBUZXN0IHB1YmxpYyB2b2lkIGxpc3RCaW5kaW5nc0dsb2JhbCgpIHRocm93cyBOYW1pbmdFeGNlcHRpb24gewogICAgICAgICBDb250ZXh0IGNvbnRleHQgPSBlamJDb250YWluZXIuZ2V0Q29udGV4dCgpOwpAQCAtMTI4LDU0ICsxMjgsNTQgQEAKICAgICAgICAgYXNzZXJ0Tm90TnVsbChsaXN0KTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgQmluZGluZzogIiArIHRvU3RyaW5nKGxpc3QpKTsKICAgICB9Ci0gICAgCisKICAgICBAVGVzdCBwdWJsaWMgdm9pZCBsaXN0SmF2YUNvbXAoKSB0aHJvd3MgTmFtaW5nRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHRlc3RCZWFuLmxpc3RKYXZhQ29tcCgpLnRvU3RyaW5nKCkpOwogICAgIH0KLSAgICAKKwogICAgIEBUZXN0IHB1YmxpYyB2b2lkIGxpc3RCaW5kaW5nc0phdmFDb21wKCkgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0ZXN0QmVhbi5saXN0QmluZGluZ3NKYXZhQ29tcCgpLnRvU3RyaW5nKCkpOwogICAgIH0KLSAgICAKKwogICAgIEBUZXN0IHB1YmxpYyB2b2lkIGxpc3RKYXZhTW9kdWxlKCkgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0ZXN0QmVhbi5saXN0SmF2YU1vZHVsZSgpLnRvU3RyaW5nKCkpOwogICAgIH0KLSAgICAKKwogICAgIEBUZXN0IHB1YmxpYyB2b2lkIGxpc3RCaW5kaW5nc0phdmFNb2R1bGUoKSB0aHJvd3MgTmFtaW5nRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHRlc3RCZWFuLmxpc3RCaW5kaW5nc0phdmFNb2R1bGUoKS50b1N0cmluZygpKTsKICAgICB9Ci0gICAgCisKICAgICBAVGVzdCBwdWJsaWMgdm9pZCBsaXN0SmF2YUFwcCgpIHRocm93cyBOYW1pbmdFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odGVzdEJlYW4ubGlzdEphdmFBcHAoKS50b1N0cmluZygpKTsKICAgICB9Ci0gICAgCisKICAgICBAVGVzdCBwdWJsaWMgdm9pZCBsaXN0QmluZGluZ3NKYXZhQXBwKCkgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0ZXN0QmVhbi5saXN0QmluZGluZ3NKYXZhQXBwKCkudG9TdHJpbmcoKSk7CiAgICAgfQotICAgIAorCiAgICAgQFRlc3QgcHVibGljIHZvaWQgY2xvc2VOYW1pbmdFbnVtZXJhdGlvbnMoKSB0aHJvd3MgTmFtaW5nRXhjZXB0aW9uIHsKICAgICAgICAgdGVzdEJlYW4uY2xvc2VOYW1pbmdFbnVtZXJhdGlvbnMoKTsKICAgICB9Ci0gICAgCi0JQFRlc3QKLQlwdWJsaWMgdm9pZCBnZXRJc0luQXBwQ2xpZW50Q29udGFpbmVyRnJvbUVKQigpIHRocm93cyBOYW1pbmdFeGNlcHRpb24gewotCQlCb29sZWFuIGlzQUNDID0gdGVzdEJlYW4uZ2V0SXNJbkFwcENsaWVudENvbnRhaW5lcigpOwotCQlhc3NlcnRGYWxzZShpc0FDQyk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiZ2V0IGphdmE6Y29tcC9JbkFwcENsaWVudENvbnRhaW5lciBmcm9tIEVKQjoiCi0JCQkJKyBpc0FDQyk7Ci0JfQotCQotCUBUZXN0Ci0JcHVibGljIHZvaWQgZ2V0SXNJbkFwcENsaWVudENvbnRhaW5lckZyb21TRUNsaWVudCgpIHRocm93cyBOYW1pbmdFeGNlcHRpb24gewotCQlTdHJpbmcgam5kaW5hbWUgPSAiamF2YTpjb21wL0luQXBwQ2xpZW50Q29udGFpbmVyIjsKLQkJQ29udGV4dCBjb250ZXh0ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JCUJvb2xlYW4gaXNBQ0MgPSAoQm9vbGVhbikgY29udGV4dC5sb29rdXAoam5kaW5hbWUpOwotCQlhc3NlcnRGYWxzZShpc0FDQyk7Ci0JCVN5c3RlbS5vdXQKLQkJCQkucHJpbnRsbigiZ2V0ICIram5kaW5hbWUrIiBmcm9tIGphdmEgU0UgY2xpZW50OiIKLQkJCQkJCSsgaXNBQ0MpOwotCX0KLQkKKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgZ2V0SXNJbkFwcENsaWVudENvbnRhaW5lckZyb21FSkIoKSB0aHJvd3MgTmFtaW5nRXhjZXB0aW9uIHsKKyAgICAgICAgQm9vbGVhbiBpc0FDQyA9IHRlc3RCZWFuLmdldElzSW5BcHBDbGllbnRDb250YWluZXIoKTsKKyAgICAgICAgYXNzZXJ0RmFsc2UoaXNBQ0MpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImdldCBqYXZhOmNvbXAvSW5BcHBDbGllbnRDb250YWluZXIgZnJvbSBFSkI6IgorICAgICAgICAgICAgICAgICsgaXNBQ0MpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgZ2V0SXNJbkFwcENsaWVudENvbnRhaW5lckZyb21TRUNsaWVudCgpIHRocm93cyBOYW1pbmdFeGNlcHRpb24geworICAgICAgICBTdHJpbmcgam5kaW5hbWUgPSAiamF2YTpjb21wL0luQXBwQ2xpZW50Q29udGFpbmVyIjsKKyAgICAgICAgQ29udGV4dCBjb250ZXh0ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgIEJvb2xlYW4gaXNBQ0MgPSAoQm9vbGVhbikgY29udGV4dC5sb29rdXAoam5kaW5hbWUpOworICAgICAgICBhc3NlcnRGYWxzZShpc0FDQyk7CisgICAgICAgIFN5c3RlbS5vdXQKKyAgICAgICAgICAgICAgICAucHJpbnRsbigiZ2V0ICIram5kaW5hbWUrIiBmcm9tIGphdmEgU0UgY2xpZW50OiIKKyAgICAgICAgICAgICAgICAgICAgICAgICsgaXNBQ0MpOworICAgIH0KKwogICAgIHByaXZhdGUgU3RyaW5nIHRvU3RyaW5nKE5hbWluZ0VudW1lcmF0aW9uPD8gZXh0ZW5kcyBOYW1lQ2xhc3NQYWlyPiBuKSB0aHJvd3MgTmFtaW5nRXhjZXB0aW9uIHsKICAgICAgICAgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CiAgICAgICAgIHNiLmFwcGVuZChuLnRvU3RyaW5nKCkpLmFwcGVuZChOTCk7CkBAIC0xODUsNSArMTg1LDUgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9ub25mYWlsb3Zlci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL25vbmZhaWxvdmVyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMDM0NGVkOC4uNjIxZDAwOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL25vbmZhaWxvdmVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL25vbmZhaWxvdmVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE3ICsxNSwxNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ibmFtaW5nIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1ub25mYWlsb3ZlciIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tbm9uZmFpbG92ZXIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iY29tLnN1bi5zMWFzcGUubmFtaW5nLm5vbmZhaWxvdmVyLmNsaWVudCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJjb20uc3VuLnMxYXNwZS5uYW1pbmcubm9uZmFpbG92ZXIuY2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbm9uZmFpbG92ZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL25vbmZhaWxvdmVyL2J1aWxkLnhtbAppbmRleCBmYWNmZDYyLi43Mjc0MDMwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbm9uZmFpbG92ZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9ub25mYWlsb3Zlci9idWlsZC54bWwKQEAgLTMyLDcgKzMyLDcgQEAKICAgICAmdGVzdHByb3BlcnRpZXM7CiAKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0ic2V0dXAsYnVpbGQscnVuLHVuc2V0dXAiLz4KLSAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qbXMtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC01NiwxMCArNTYsMTAgQEAKICAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBUFBDTElFTlR9IiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgICAgICAgIDxlbnYga2V5PSJBUFBDUEFUSCIgdmFsdWU9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIi8+CiAgICAgICAgICAgPGFyZyBsaW5lPSItY2xpZW50ICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KLQkgIDxhcmcgbGluZT0iLW5hbWUgJHthcHBuYW1lfUNsaWVudCIvPgotCSAgPGFyZyBsaW5lPSItdGV4dGF1dGgiLz4KLQkgIDxhcmcgbGluZT0iLXVzZXIgajJlZSIvPgotCSAgPGFyZyBsaW5lPSItcGFzc3dvcmQgajJlZSIvPgorICAgICAgPGFyZyBsaW5lPSItbmFtZSAke2FwcG5hbWV9Q2xpZW50Ii8+CisgICAgICA8YXJnIGxpbmU9Ii10ZXh0YXV0aCIvPgorICAgICAgPGFyZyBsaW5lPSItdXNlciBqMmVlIi8+CisgICAgICA8YXJnIGxpbmU9Ii1wYXNzd29yZCBqMmVlIi8+CiAgICAgICAgIDwvZXhlYz4KICAgICAgICAgPHNlcXVlbnRpYWw+CiAgICAgICAgICAgPHNsZWVwIHNlY29uZHM9IjMwIi8+CkBAIC02OSw3ICs2OSw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RhcnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQk8YW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQtc2VydmVyLWluc3RhbmNlLWNvbW1vbiIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXItaW5zdGFuY2UtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVuc2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9ub25mYWlsb3Zlci9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvbm9uZmFpbG92ZXIvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDZjZmE1OTEuLjE3ZWI4ZTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9ub25mYWlsb3Zlci9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL25vbmZhaWxvdmVyL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjMsMzAgKzIzLDMwIEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCi0gICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlRoaXMgaXMgdG8gdGVzdCBuYW1pbmcgbm9uZmFpbG92ZXIgc2NlbmFyaW8uXG4iICsgCi0JCQkgICAgIkV4aXNpdG5nIGFuZCBOZXcgSW5pdGlhbENvbnRleHRzIG11c3QgYmUgYWJsZSB0byAiKwotCQkJICAgICJ0YWxrIHRvIHRoZSBzZXJ2ZXIgYWZ0ZXIgYSByZXN0YXJ0IGFzc3VtaW5nIHRoZXJlICIrCi0JCQkgICAgIndlcmUgbm8gcmVxdWVzdHMgZHVyaW5nIHJlc2FydC4iKTsKKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVGhpcyBpcyB0byB0ZXN0IG5hbWluZyBub25mYWlsb3ZlciBzY2VuYXJpby5cbiIgKworICAgICAgICAgICAgICAgICJFeGlzaXRuZyBhbmQgTmV3IEluaXRpYWxDb250ZXh0cyBtdXN0IGJlIGFibGUgdG8gIisKKyAgICAgICAgICAgICAgICAidGFsayB0byB0aGUgc2VydmVyIGFmdGVyIGEgcmVzdGFydCBhc3N1bWluZyB0aGVyZSAiKworICAgICAgICAgICAgICAgICJ3ZXJlIG5vIHJlcXVlc3RzIGR1cmluZyByZXNhcnQuIik7CiAKICAgICAgICAgQ29udGV4dCAgICAgICAgICAgICAgICAgam5kaUNvbnRleHQgPSBudWxsOwogICAgICAgICBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5ICBxdWV1ZUNvbm5lY3Rpb25GYWN0b3J5ID0gbnVsbDsKLQlRdWV1ZSAgICAgICAgICAgICAgICAgICBxdWV1ZSA9IG51bGw7Ci0JYm9vbGVhbiAgICAgICAgICAgICAgICAgcGFzc2VkID0gdHJ1ZTsKKyAgICBRdWV1ZSAgICAgICAgICAgICAgICAgICBxdWV1ZSA9IG51bGw7CisgICAgYm9vbGVhbiAgICAgICAgICAgICAgICAgcGFzc2VkID0gdHJ1ZTsKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgam5kaUNvbnRleHQgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb250ZXh0IGNyZWF0ZWQhISEiKTsKLQl9IGNhdGNoIChOYW1pbmdFeGNlcHRpb24gZSkgewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvdWxkIG5vdCBjcmVhdGUgSk5ESSAiICsKLQkJCSAgICAgImNvbnRleHQ6ICIgKyBlLnRvU3RyaW5nKCkpOwotCSAgICBzdGF0LmFkZFN0YXR1cygibmFtaW5nIG5vbmZhaWxvdmVyIG1haW4iLCBzdGF0LkZBSUwpOwotCSAgICBzdGF0LnByaW50U3VtbWFyeSgibm9uZmFpbG92ZXJJRCIpOwotCSAgICBwYXNzZWQgPSBmYWxzZTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb250ZXh0IGNyZWF0ZWQhISEiKTsKKyAgICB9IGNhdGNoIChOYW1pbmdFeGNlcHRpb24gZSkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvdWxkIG5vdCBjcmVhdGUgSk5ESSAiICsKKyAgICAgICAgICAgICAgICAgImNvbnRleHQ6ICIgKyBlLnRvU3RyaW5nKCkpOworICAgICAgICBzdGF0LmFkZFN0YXR1cygibmFtaW5nIG5vbmZhaWxvdmVyIG1haW4iLCBzdGF0LkZBSUwpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgibm9uZmFpbG92ZXJJRCIpOworICAgICAgICBwYXNzZWQgPSBmYWxzZTsKICAgICAgICAgICAgIFN5c3RlbS5leGl0KDEpOwogICAgICAgICB9CiAKQEAgLTU0LDUzICs1NCw1MyBAQAogICAgICAgICAgICAgcXVldWVDb25uZWN0aW9uRmFjdG9yeSA9IChRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5KQogICAgICAgICAgICAgICAgIGpuZGlDb250ZXh0Lmxvb2t1cAogICAgICAgICAgICAgICAgICgiamF2YTpjb21wL2Vudi9qbXMvUUNGYWN0b3J5Iik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigibG9va2VkIHVwIFF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkuLi4iKTsgICAgICAgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImxvb2tlZCB1cCBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5Li4uIik7CiAgICAgICAgIH0gY2F0Y2ggKE5hbWluZ0V4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkpOREkgbG9va3VwIGZhaWxlZDogIiArCiAgICAgICAgICAgICAgICAgZS50b1N0cmluZygpKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJuYW1pbmcgbm9uZmFpbG92ZXIgbWFpbiIsIHN0YXQuRkFJTCk7Ci0JICAgIHBhc3NlZCA9IGZhbHNlOwotCSAgICBzdGF0LnByaW50U3VtbWFyeSgibm9uZmFpbG92ZXJJRCIpOworICAgICAgICBwYXNzZWQgPSBmYWxzZTsKKyAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoIm5vbmZhaWxvdmVySUQiKTsKICAgICAgICAgICAgIFN5c3RlbS5leGl0KDEpOwogICAgICAgICB9CiAKLQl0cnkgewotCSAgICBUaHJlYWQuc2xlZXAoMjQwMDAwKTsKKyAgICB0cnkgeworICAgICAgICBUaHJlYWQuc2xlZXAoMjQwMDAwKTsKICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIGUpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhjZXB0aW9uIG9jY3VycmVkOiAiICsgZS50b1N0cmluZygpKTsKLQkgICAgcGFzc2VkID0gZmFsc2U7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKCJuYW1pbmcgbm9uZmFpbG92ZXIgbWFpbiIsIHN0YXQuRkFJTCk7Ci0gICAgICAgIH0gIAorICAgICAgICBwYXNzZWQgPSBmYWxzZTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoIm5hbWluZyBub25mYWlsb3ZlciBtYWluIiwgc3RhdC5GQUlMKTsKKyAgICAgICAgfQogCi0JdHJ5IHsKLQkgICAgLy9zZWUgaWYgdGhlIGV4aXN0aW5nIEluaXRpYWxDb250ZXh0IGlzIHN0aWxsIGFsaXZlCi0JICAgIGlmIChqbmRpQ29udGV4dCAhPSBudWxsKSB7Ci0JICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4aXN0aW5nIEluaXRpYWxDb250ZXh0IGlzIGFsaXZlIGFmdGVyIHNlcnZlciByZXN0YXJ0ISIpOwotCSAgICB9Ci0JICAgIAotCSAgICBxdWV1ZSA9IChRdWV1ZSkgam5kaUNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L2ptcy9TYW1wbGVRdWV1ZSIpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oImxvb2tlZCB1cCBRdWV1ZS4uLiIpOwotCSAgICAKLQkgICAgLy9jcmVhdGluZyBuZXcgSW5pdGlhbENvbnRleHQKLQkgICAgam5kaUNvbnRleHQgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGluZyBuZXcgSW5pdGlhbENvbnRleHQuLi4iKTsKLQkgICAgcXVldWVDb25uZWN0aW9uRmFjdG9yeSA9IChRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5KQotCSAgICAgIGpuZGlDb250ZXh0Lmxvb2t1cAotCSAgICAgICgiamF2YTpjb21wL2Vudi9qbXMvUUNGYWN0b3J5Iik7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigibG9va2VkIHVwIFF1ZXVlQ29ubmVjdGlvbkZhY3Rvcnkgd2l0aCBuZXcgSW5pdGlhbENvbnRleHQuLi4iICsgCi0JCQkgICAgICAgcXVldWVDb25uZWN0aW9uRmFjdG9yeSk7IAotCSAgICAKKyAgICB0cnkgeworICAgICAgICAvL3NlZSBpZiB0aGUgZXhpc3RpbmcgSW5pdGlhbENvbnRleHQgaXMgc3RpbGwgYWxpdmUKKyAgICAgICAgaWYgKGpuZGlDb250ZXh0ICE9IG51bGwpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhpc3RpbmcgSW5pdGlhbENvbnRleHQgaXMgYWxpdmUgYWZ0ZXIgc2VydmVyIHJlc3RhcnQhIik7CisgICAgICAgIH0KKworICAgICAgICBxdWV1ZSA9IChRdWV1ZSkgam5kaUNvbnRleHQubG9va3VwKCJqYXZhOmNvbXAvZW52L2ptcy9TYW1wbGVRdWV1ZSIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImxvb2tlZCB1cCBRdWV1ZS4uLiIpOworCisgICAgICAgIC8vY3JlYXRpbmcgbmV3IEluaXRpYWxDb250ZXh0CisgICAgICAgIGpuZGlDb250ZXh0ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRpbmcgbmV3IEluaXRpYWxDb250ZXh0Li4uIik7CisgICAgICAgIHF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkgPSAoUXVldWVDb25uZWN0aW9uRmFjdG9yeSkKKyAgICAgICAgICBqbmRpQ29udGV4dC5sb29rdXAKKyAgICAgICAgICAoImphdmE6Y29tcC9lbnYvam1zL1FDRmFjdG9yeSIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImxvb2tlZCB1cCBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHdpdGggbmV3IEluaXRpYWxDb250ZXh0Li4uIiArCisgICAgICAgICAgICAgICAgICAgcXVldWVDb25uZWN0aW9uRmFjdG9yeSk7CisKICAgICAgICAgfSBjYXRjaCAoTmFtaW5nRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSk5ESSBsb29rdXAgZmFpbGVkOiAiICsKICAgICAgICAgICAgICAgICBlLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIm5hbWluZyBub25mYWlsb3ZlciBtYWluIiwgc3RhdC5GQUlMKTsKLQkgICAgc3RhdC5wcmludFN1bW1hcnkoIm5vbmZhaWxvdmVySUQiKTsKLQkgICAgcGFzc2VkID0gZmFsc2U7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJub25mYWlsb3ZlcklEIik7CisgICAgICAgIHBhc3NlZCA9IGZhbHNlOwogICAgICAgICAgICAgU3lzdGVtLmV4aXQoMSk7CiAgICAgICAgIH0KLQlpZiAocGFzc2VkKSBzdGF0LmFkZFN0YXR1cygibmFtaW5nIG5vbmZhaWxvdmVyIG1haW4iLCBzdGF0LlBBU1MpOwotCXN0YXQucHJpbnRTdW1tYXJ5KCJub25mYWlsb3ZlcklEIik7Ci0JU3lzdGVtLmV4aXQoMCk7CisgICAgaWYgKHBhc3NlZCkgc3RhdC5hZGRTdGF0dXMoIm5hbWluZyBub25mYWlsb3ZlciBtYWluIiwgc3RhdC5QQVNTKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgibm9uZmFpbG92ZXJJRCIpOworICAgIFN5c3RlbS5leGl0KDApOwogICAgIH0gLy8gbWFpbgogfSAvLyBjbGFzcwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvb3JiX2Fubm90YXRpb24vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9vcmJfYW5ub3RhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGY4ZjBlODMuLjliNmY1NDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9vcmJfYW5ub3RhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9vcmJfYW5ub3RhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMSArMTUsMjEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9Im9yYl9hbm5vdGF0aW9uIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9vcmJfYW5ub3RhdGlvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvb3JiX2Fubm90YXRpb24vYnVpbGQueG1sCmluZGV4IGIxMWQ5NTcuLjFhNDYzOGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9vcmJfYW5ub3RhdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL29yYl9hbm5vdGF0aW9uL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsICB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ4LDIwICs0OCwyMCBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ0cnVlIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAotIAorCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNsaWVudCIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhcHBjbGllbnQtamFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudCouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgCisKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJlYXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTcxLDEwICs3MSwxMCBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IiR7aHR0cC5ob3N0fSAke2h0dHAucG9ydH0iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvb3JiX2Fubm90YXRpb24vY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL29yYl9hbm5vdGF0aW9uL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBmMjA4NTljLi45YmFhYjA4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvb3JiX2Fubm90YXRpb24vY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9vcmJfYW5ub3RhdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLlNpbXBsZVJlcG9ydGVyQWRhcHRlcjsKIAogcHVibGljIGNsYXNzIENsaWVudCB7Ci0gICAgCisKICAgICBwcml2YXRlIFN0cmluZyBob3N0OwogICAgIHByaXZhdGUgU3RyaW5nIHBvcnQ7CiAKQEAgLTM1LDIzICszNSwyMyBAQAogICAgICAgICBob3N0ID0gKCBhcmdzLmxlbmd0aCA+IDApID8gYXJnc1swXSA6ICJsb2NhbGhvc3QiOwogICAgICAgICBwb3J0ID0gKCBhcmdzLmxlbmd0aCA+IDEpID8gYXJnc1sxXSA6ICI0ODQ4IjsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIm9yYi1hbm5vdGF0aW9uLWNsaWVudCIpOwogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgib3JiLWFubm90YXRpb25JRCIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIGVudiA9IG51bGw7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyAKKyAgICAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArCiAgICAgICAgICAgICAgICAgIi9vcmJfYW5ub3RhdGlvbi9zZXJ2bGV0IjsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW52b2tpbmcgd2ViY2xpZW50IHNlcnZsZXQgYXQgIiArIHVybCk7CiAgICAgICAgICAgICBpbnQgY29kZSA9IGludm9rZVNlcnZsZXQodXJsKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZihjb2RlICE9IDIwMCkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW5jb3JyZWN0IHJldHVybiBjb2RlOiAiICsgY29kZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndlYmNsaWVudCBtYWluIiwgc3RhdC5GQUlMKTsKQEAgLTYzLDE1ICs2MywxNSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndlYmNsaWVudCBtYWluIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybjsKLSAgICAgICAgCisKICAgICB9CiAKICAgICBwcml2YXRlIGludCBpbnZva2VTZXJ2bGV0KFN0cmluZyB1cmwpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAgICAgCisKICAgICAgICAgVVJMIHUgPSBuZXcgVVJMKHVybCk7Ci0gICAgICAgIAorCiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGMxID0gKEh0dHBVUkxDb25uZWN0aW9uKXUub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgaW50IGNvZGUgPSBjMS5nZXRSZXNwb25zZUNvZGUoKTsKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBjMS5nZXRJbnB1dFN0cmVhbSgpOwpAQCAtODQsNiArODQsNiBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjb2RlOwogICAgIH0KLSAgICAKKwogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvb3JiX2Fubm90YXRpb24vZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvb3JiX2Fubm90YXRpb24vZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwKaW5kZXggODQzOGI0YS4uOWU2ZTVkNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL29yYl9hbm5vdGF0aW9uL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9vcmJfYW5ub3RhdGlvbi9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbApAQCAtMjYsNiArMjYsNiBAQAogICAgIDwvd2ViPgogPC9tb2R1bGU+CiAgIDxtb2R1bGU+Ci0gICAgPGphdmE+b3JiX2Fubm90YXRpb24tY2xpZW50LmphcjwvamF2YT4gCisgICAgPGphdmE+b3JiX2Fubm90YXRpb24tY2xpZW50LmphcjwvamF2YT4KICAgPC9tb2R1bGU+CiA8L2FwcGxpY2F0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL29yYl9hbm5vdGF0aW9uL3NlcnZsZXQvU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL29yYl9hbm5vdGF0aW9uL3NlcnZsZXQvU2VydmxldC5qYXZhCmluZGV4IDlkMTU2ODQuLjZkN2E2ZGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9vcmJfYW5ub3RhdGlvbi9zZXJ2bGV0L1NlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvb3JiX2Fubm90YXRpb24vc2VydmxldC9TZXJ2bGV0LmphdmEKQEAgLTMxLDU0ICszMSw1NCBAQAogCiAgICAgcHJpdmF0ZSBAUmVzb3VyY2Uoc2hhcmVhYmxlPWZhbHNlKSBPUkIgdW5zaGFyZWFibGVPcmI7CiAgICAgcHJpdmF0ZSBAUmVzb3VyY2UgT1JCIHNoYXJlYWJsZU9yYjsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkICBpbml0KCBTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gd2ViY2xpZW50OjpzZXJ2bGV0Li4uIGluaXQoKSIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlcnZpY2UgKCBIdHRwU2VydmxldFJlcXVlc3QgcmVxICwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwICkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLSAgICAgICAgICAgICAgICAgCisKICAgICAgICAgcmVzcC5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3AuZ2V0V3JpdGVyKCk7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAKICAgICAgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAKLQkgICAgLy9vdXQucHJpbnRsbigiZG9pbmcgc2hhcmVhYmxlIG9yYiB0ZXN0Iik7CisgICAgICAgIC8vb3V0LnByaW50bG4oImRvaW5nIHNoYXJlYWJsZSBvcmIgdGVzdCIpOwogICAgICAgICAgICAgLy9vdXQucHJpbnRsbigiT1JCID0gIiArIHNoYXJlYWJsZU9yYik7CiAgICAgICAgICAgICBQT0EgcG9hID0gKFBPQSkgc2hhcmVhYmxlT3JiLnJlc29sdmVfaW5pdGlhbF9yZWZlcmVuY2VzKCJSb290UE9BIik7CiAgICAgICAgICAgICAvL291dC5wcmludGxuKCJQT0EgPSAiICsgcG9hKTsKIAotCSAgICAvL291dC5wcmludGxuKCJkb2luZyB1bnNoYXJlYWJsZSBvcmIgdGVzdCIpOworICAgICAgICAvL291dC5wcmludGxuKCJkb2luZyB1bnNoYXJlYWJsZSBvcmIgdGVzdCIpOwogICAgICAgICAgICAgLy9vdXQucHJpbnRsbigiT1JCID0gIiArIHVuc2hhcmVhYmxlT3JiKTsKICAgICAgICAgICAgIFBPQSBwb2ExID0gKFBPQSkgdW5zaGFyZWFibGVPcmIucmVzb2x2ZV9pbml0aWFsX3JlZmVyZW5jZXMoIlJvb3RQT0EiKTsKICAgICAgICAgICAgIC8vb3V0LnByaW50bG4oIlBPQSA9ICIgKyBwb2ExKTsKIAogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxIVE1MPiA8SEVBRD4gPFRJVExFPiBPUkIgQW5ub3RhdGlvbiBUZXN0ICBTZXJ2bGV0IE91dHB1dCA8L1RJVExFPiA8L0hFQUQ+IDxCT0RZIEJHQ09MT1I9d2hpdGU+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPENFTlRFUj4gPEZPTlQgc2l6ZT0rMSBDT0xPUj1ibHVlPk9SQiBBbm5vdGF0aW9uIFRlc3QgU2VydmxldCA8L0ZPTlQ+IDwvQ0VOVEVSPiA8cD4gIiApOwotICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBkb2luZyB1bnNoYXJlYWJsZSBvcmIgdGVzdCA6ICA8L0ZPTlQ+ICIgKyAiPGJyPiIgKTsgCi0gICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IE9SQiA9ICIgKyB1bnNoYXJlYWJsZU9yYiArICI8L0ZPTlQ+ICIgICsgIjxicj4iICk7IAotICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBQT0EgPSAgPC9GT05UPiAiICsgcG9hMSArICI8YnI+IiApOyAKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gZG9pbmcgdW5zaGFyZWFibGUgb3JiIHRlc3QgOiAgPC9GT05UPiAiICsgIjxicj4iICk7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IE9SQiA9ICIgKyB1bnNoYXJlYWJsZU9yYiArICI8L0ZPTlQ+ICIgICsgIjxicj4iICk7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IFBPQSA9ICA8L0ZPTlQ+ICIgKyBwb2ExICsgIjxicj4iICk7CiAKLW91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gZG9pbmcgc2hhcmVhYmxlIG9yYiB0ZXN0IDogIDwvRk9OVD4gIiArICI8YnI+IiApOyAKLSAgICAgICAgICAgIG91dC5wcmludGxuKCI8Rk9OVCBzaXplPSsxIGNvbG9yPXJlZD4gT1JCID0gIiArIHNoYXJlYWJsZU9yYiArICI8L0ZPTlQ+ICIgICsgIjxicj4iICk7IAotICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBQT0EgPSAgPC9GT05UPiAiICsgcG9hICsgIjxicj4iICk7IAorb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBkb2luZyBzaGFyZWFibGUgb3JiIHRlc3QgOiAgPC9GT05UPiAiICsgIjxicj4iICk7CisgICAgICAgICAgICBvdXQucHJpbnRsbigiPEZPTlQgc2l6ZT0rMSBjb2xvcj1yZWQ+IE9SQiA9ICIgKyBzaGFyZWFibGVPcmIgKyAiPC9GT05UPiAiICArICI8YnI+IiApOworICAgICAgICAgICAgb3V0LnByaW50bG4oIjxGT05UIHNpemU9KzEgY29sb3I9cmVkPiBQT0EgPSAgPC9GT05UPiAiICsgcG9hICsgIjxicj4iICk7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9CT0RZPiA8L0hUTUw+ICIpOwotICAgICAgICAgICAgCisKICAgICAgICAgfWNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ3ZWJjbGllbnQgc2VydmxldCB0ZXN0IGZhaWxlZCIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZXgpOwotICAgICAgICB9IAorICAgICAgICB9CiAgICAgfQogCi0gICAgCi0gICAgCisKKwogICAgIHB1YmxpYyB2b2lkICBkZXN0cm95KCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIHdlYmNsaWVudDo6c2VydmxldCBkZXN0cm95Iik7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvcnVuX3Rlc3Quc2ggYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvcnVuX3Rlc3Quc2gKaW5kZXggODc2NDQxOS4uNjI1ODU5OSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL3J1bl90ZXN0LnNoCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy9ydW5fdGVzdC5zaApAQCAtNTAsMTEgKzUwLDExIEBACiB9CiAKIGdldF90ZXN0X3RhcmdldCgpewotCWNhc2UgJDEgaW4KLQkJbmFtaW5nX2FsbCApCi0JCQlUQVJHRVQ9YWxsCi0JCQlleHBvcnQgVEFSR0VUOzsKLQllc2FjCisgICAgY2FzZSAkMSBpbgorICAgICAgICBuYW1pbmdfYWxsICkKKyAgICAgICAgICAgIFRBUkdFVD1hbGwKKyAgICAgICAgICAgIGV4cG9ydCBUQVJHRVQ7OworICAgIGVzYWMKIH0KIAogT1BUPSR7MX0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy92aXNpYnJva2VyL2xvb2t1cC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL3Zpc2licm9rZXIvbG9va3VwL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYzdkOTM0OS4uODY4OWExZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL3Zpc2licm9rZXIvbG9va3VwL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL3Zpc2licm9rZXIvbG9va3VwL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ibG9va3VwIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1BcHAiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LUFwcCIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0id2FyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvdmlzaWJyb2tlci9sb29rdXAvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL3Zpc2licm9rZXIvbG9va3VwL2J1aWxkLnhtbAppbmRleCBiM2FlYjVkLi44Nzc2ZTlkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvdmlzaWJyb2tlci9sb29rdXAvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy92aXNpYnJva2VyL2xvb2t1cC9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke2Vudi5KQVZBX0hPTUV9L2Jpbi9pZGxqIiBmYWlsb25lcnJvcj0iZmFsc2UiPgogICAgICAgICAgICAgPGFyZyBsaW5lPSItZmFsbCBzcmMvSGVsbG8uaWRsIi8+CkBAIC00NiwyMyArNDYsMjMgQEAKICAgICAgICAgPGNvcHkgdG9kaXI9InNyYy9IZWxsb0FwcCI+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IkhlbGxvQXBwIi8+CiAgICAgICAgIDwvY29weT4KLQk8ZGVsZXRlIGRpcj0iSGVsbG9BcHAiLz4KLQkKKyAgICA8ZGVsZXRlIGRpcj0iSGVsbG9BcHAiLz4KKwogICAgICAgICA8ZWNobyBtZXNzYWdlPSJjb21tb24ueG1sOiBDb21waWxpbmcgdGVzdCBzb3VyY2UgZmlsZXMiIGxldmVsPSJ2ZXJib3NlIi8+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CiAgICAgICAgIDxqYXZhYyBzcmNkaXI9InNyYyIKICAgICAgICAgICAgIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgogICAgICAgICAgICAgY2xhc3NwYXRoPSIke3MxYXN0ZXN0LmNsYXNzcGF0aH0iCiAgICAgICAgICAgICBkZWJ1Zz0ib24iCi0gICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIvPiAgCisgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIvPgogICAgIDwvdGFyZ2V0PgogCiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqLmNsYXNzLCoqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKi5jbGFzcywqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIApAQCAtNzEsMTggKzcxLDE4IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxlY2hvIG1lc3NhZ2U9IkRlcGxveWluZyB2aWEgYXNhZG1pbi4uLiIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW53ZWJjbGllbnQtY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0idGVzdHN1aXRlLmlkIiB2YWx1ZT0ibG9va3VwIi8+Ci0JPC9hbnRjYWxsPgorICAgIDxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJsb29rdXAiLz4KKyAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKLSAgCisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy92aXNpYnJva2VyL2xvb2t1cC9zcmMvSGVsbG9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy92aXNpYnJva2VyL2xvb2t1cC9zcmMvSGVsbG9DbGllbnQuamF2YQppbmRleCAwMmYzNmJiLi5lZjkyZTUwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvdmlzaWJyb2tlci9sb29rdXAvc3JjL0hlbGxvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL3Zpc2licm9rZXIvbG9va3VwL3NyYy9IZWxsb0NsaWVudC5qYXZhCkBAIC0yOSwzMCArMjksMzAgQEAKICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkKICAgICB7CiAgICAgICB0cnl7Ci0JICBQcm9wZXJ0aWVzIHAxID0gbmV3IFByb3BlcnRpZXMoKTsKLQkgIHAxLnB1dCgib3JnLm9tZy5DT1JCQS5PUkJDbGFzcyIsICJjb20uaW5wcmlzZS52YnJva2VyLm9yYi5PUkIiKTsKLQkgIHAxLnB1dCgib3JnLm9tZy5DT1JCQS5PUkJTaW5nbGV0b25DbGFzcyIsICJjb20uaW5wcmlzZS52YnJva2VyLm9yYi5PUkJTaW5nbGV0b24iKTsKLQkgIG9yZy5vbWcuQ09SQkEuT1JCIG9yYiA9IG9yZy5vbWcuQ09SQkEuT1JCLmluaXQoIG5ldyBTdHJpbmdbXXsiIiwiIn0sIHAxICk7Ci0JICAKLQkgIC8vIGdldCB0aGUgcm9vdCBuYW1pbmcgY29udGV4dAotCSAgb3JnLm9tZy5DT1JCQS5PYmplY3Qgb2JqUmVmID0gCi0JICAgIG9yYi5yZXNvbHZlX2luaXRpYWxfcmVmZXJlbmNlcygiTmFtZVNlcnZpY2UiKTsKLQkgIC8vIFVzZSBOYW1pbmdDb250ZXh0RXh0IGluc3RlYWQgb2YgTmFtaW5nQ29udGV4dC4gVGhpcyBpcyAKLQkgIC8vIHBhcnQgb2YgdGhlIEludGVyb3BlcmFibGUgbmFtaW5nIFNlcnZpY2UuICAKLQkgIE5hbWluZ0NvbnRleHRFeHQgbmNSZWYgPSBOYW1pbmdDb250ZXh0RXh0SGVscGVyLm5hcnJvdyhvYmpSZWYpOwotCSAgCi0JICAvLyByZXNvbHZlIHRoZSBPYmplY3QgUmVmZXJlbmNlIGluIE5hbWluZwotCSAgU3RyaW5nIG5hbWUgPSAiSGVsbG8iOwotCSAgaGVsbG9JbXBsID0gSGVsbG9IZWxwZXIubmFycm93KG5jUmVmLnJlc29sdmVfc3RyKG5hbWUpKTsKLQkgIAotCSAgU3lzdGVtLm91dC5wcmludGxuKCJPYnRhaW5lZCBhIGhhbmRsZSBvbiBzZXJ2ZXIgb2JqZWN0OiAiICsgaGVsbG9JbXBsKTsKLQkgIFN5c3RlbS5vdXQucHJpbnRsbihoZWxsb0ltcGwuc2F5SGVsbG8oKSk7Ci0JICBoZWxsb0ltcGwuc2h1dGRvd24oKTsKKyAgICAgIFByb3BlcnRpZXMgcDEgPSBuZXcgUHJvcGVydGllcygpOworICAgICAgcDEucHV0KCJvcmcub21nLkNPUkJBLk9SQkNsYXNzIiwgImNvbS5pbnByaXNlLnZicm9rZXIub3JiLk9SQiIpOworICAgICAgcDEucHV0KCJvcmcub21nLkNPUkJBLk9SQlNpbmdsZXRvbkNsYXNzIiwgImNvbS5pbnByaXNlLnZicm9rZXIub3JiLk9SQlNpbmdsZXRvbiIpOworICAgICAgb3JnLm9tZy5DT1JCQS5PUkIgb3JiID0gb3JnLm9tZy5DT1JCQS5PUkIuaW5pdCggbmV3IFN0cmluZ1tdeyIiLCIifSwgcDEgKTsKIAotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAvLyBnZXQgdGhlIHJvb3QgbmFtaW5nIGNvbnRleHQKKyAgICAgIG9yZy5vbWcuQ09SQkEuT2JqZWN0IG9ialJlZiA9CisgICAgICAgIG9yYi5yZXNvbHZlX2luaXRpYWxfcmVmZXJlbmNlcygiTmFtZVNlcnZpY2UiKTsKKyAgICAgIC8vIFVzZSBOYW1pbmdDb250ZXh0RXh0IGluc3RlYWQgb2YgTmFtaW5nQ29udGV4dC4gVGhpcyBpcworICAgICAgLy8gcGFydCBvZiB0aGUgSW50ZXJvcGVyYWJsZSBuYW1pbmcgU2VydmljZS4KKyAgICAgIE5hbWluZ0NvbnRleHRFeHQgbmNSZWYgPSBOYW1pbmdDb250ZXh0RXh0SGVscGVyLm5hcnJvdyhvYmpSZWYpOworCisgICAgICAvLyByZXNvbHZlIHRoZSBPYmplY3QgUmVmZXJlbmNlIGluIE5hbWluZworICAgICAgU3RyaW5nIG5hbWUgPSAiSGVsbG8iOworICAgICAgaGVsbG9JbXBsID0gSGVsbG9IZWxwZXIubmFycm93KG5jUmVmLnJlc29sdmVfc3RyKG5hbWUpKTsKKworICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJPYnRhaW5lZCBhIGhhbmRsZSBvbiBzZXJ2ZXIgb2JqZWN0OiAiICsgaGVsbG9JbXBsKTsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihoZWxsb0ltcGwuc2F5SGVsbG8oKSk7CisgICAgICBoZWxsb0ltcGwuc2h1dGRvd24oKTsKKworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFUlJPUiA6ICIgKyBlKSA7Ci0JICBlLnByaW50U3RhY2tUcmFjZShTeXN0ZW0ub3V0KTsKLQkgIH0KKyAgICAgIGUucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5vdXQpOworICAgICAgfQogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL3Zpc2licm9rZXIvbG9va3VwL3NyYy9IZWxsb1NlcnZlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL3Zpc2licm9rZXIvbG9va3VwL3NyYy9IZWxsb1NlcnZlci5qYXZhCmluZGV4IDRmMzQ1OTcuLjIxNGE2YjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy92aXNpYnJva2VyL2xvb2t1cC9zcmMvSGVsbG9TZXJ2ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvdmlzaWJyb2tlci9sb29rdXAvc3JjL0hlbGxvU2VydmVyLmphdmEKQEAgLTMzLDE0ICszMywxNCBAQAogICBwcml2YXRlIE9SQiBvcmI7CiAKICAgcHVibGljIHZvaWQgc2V0T1JCKE9SQiBvcmJfdmFsKSB7Ci0gICAgb3JiID0gb3JiX3ZhbDsgCisgICAgb3JiID0gb3JiX3ZhbDsKICAgfQotICAgIAorCiAgIC8vIGltcGxlbWVudCBzYXlIZWxsbygpIG1ldGhvZAogICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKCkgewogICAgIHJldHVybiAiXG5IZWxsbyB3b3JsZCAhIVxuIjsKICAgfQotICAgIAorCiAgIC8vIGltcGxlbWVudCBzaHV0ZG93bigpIG1ldGhvZAogICBwdWJsaWMgdm9pZCBzaHV0ZG93bigpIHsKICAgICBvcmIuc2h1dGRvd24oZmFsc2UpOwpAQCAtNTcsMjYgKzU3LDI2IEBACiAgICAgICAvLyBhZGQgcnVudGltZSBwcm9wZXJ0aWVzIGhlcmUKICAgICAgIHAucHV0KCJvcmcub21nLkNPUkJBLk9SQkNsYXNzIiwgImNvbS5pbnByaXNlLnZicm9rZXIub3JiLk9SQiIpOwogICAgICAgcC5wdXQoIm9yZy5vbWcuQ09SQkEuT1JCU2luZ2xldG9uQ2xhc3MiLCAiY29tLmlucHJpc2UudmJyb2tlci5vcmIuT1JCU2luZ2xldG9uIik7Ci0gICAgICAKLSAgICAgIC8vIGNyZWF0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgT1JCCQkKKworICAgICAgLy8gY3JlYXRlIGFuZCBpbml0aWFsaXplIHRoZSBPUkIKICAgICAgIE9SQiBvcmIgPSBPUkIuaW5pdCggYXJncywgcCApOwogICAgICAgSGFzaHRhYmxlIGVudiA9IG5ldyBIYXNodGFibGUoKTsKICAgICAgIGVudi5wdXQoamF2YXgubmFtaW5nLkNvbnRleHQuSU5JVElBTF9DT05URVhUX0ZBQ1RPUlksIm9yZy5nbGFzc2Zpc2guam5kaS5jb3NuYW1pbmcuQ05DdHhGYWN0b3J5Iik7CiAgICAgICBlbnYucHV0KCJqYXZhLm5hbWluZy5jb3JiYS5vcmIiLCBvcmIpOwotICAgICAgCi0gICAgICAKKworCiAgICAgICAvLyBnZXQgcmVmZXJlbmNlIHRvIHJvb3Rwb2EgJiBhY3RpdmF0ZSB0aGUgUE9BTWFuYWdlcgogICAgICAgUE9BIHJvb3Rwb2EgPSBQT0FIZWxwZXIubmFycm93KG9yYi5yZXNvbHZlX2luaXRpYWxfcmVmZXJlbmNlcygiUm9vdFBPQSIpKTsKICAgICAgIHJvb3Rwb2EudGhlX1BPQU1hbmFnZXIoKS5hY3RpdmF0ZSgpOwotICAgICAgCisKICAgICAgIC8vIGNyZWF0ZSBzZXJ2YW50IGFuZCByZWdpc3RlciBpdCB3aXRoIHRoZSBPUkIKICAgICAgIEhlbGxvSW1wbCBoZWxsb0ltcGwgPSBuZXcgSGVsbG9JbXBsKCk7Ci0gICAgICBoZWxsb0ltcGwuc2V0T1JCKG9yYik7IAotICAgICAgCisgICAgICBoZWxsb0ltcGwuc2V0T1JCKG9yYik7CisKICAgICAgIC8vIGdldCBvYmplY3QgcmVmZXJlbmNlIGZyb20gdGhlIHNlcnZhbnQKICAgICAgIG9yZy5vbWcuQ09SQkEuT2JqZWN0IHJlZiA9IHJvb3Rwb2Euc2VydmFudF90b19yZWZlcmVuY2UoaGVsbG9JbXBsKTsKICAgICAgIEhlbGxvIGhyZWYgPSBIZWxsb0hlbHBlci5uYXJyb3cocmVmKTsKLSAgICAgIAorCiAgICAgICAvLyBnZXQgdGhlIHJvb3QgbmFtaW5nIGNvbnRleHQKICAgICAgIC8vIE5hbWVTZXJ2aWNlIGludm9rZXMgdGhlIG5hbWUgc2VydmljZQogICAgICAgICAgICBvcmcub21nLkNPUkJBLk9iamVjdCBvYmpSZWYgPQpAQCAtOTAsMjcgKzkwLDI3IEBACiAgICAgICBOYW1lQ29tcG9uZW50IHBhdGhbXSA9IG5jUmVmLnRvX25hbWUoIG5hbWUgKTsKICAgICAgIG5jUmVmLnJlYmluZChwYXRoLCBocmVmKTsKIAotICAgICAKKwogICAgICAgamF2YXgubmFtaW5nLkNvbnRleHQgbmN0eCA9IG5ldyBJbml0aWFsQ29udGV4dChlbnYpOwogICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCaW5kIHRoZSBIZWxsb1NlcnZlciBvYmplY3QgdG8gIgogICAgICAgICAgICsgIm5hbWUgIiArICJIZWxsbyIgKyAiLi4uLiIpOwogICAgICAgbmN0eC5yZWJpbmQoIkhlbGxvIiwgaHJlZik7Ci0gICAgICAKKwogCiAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvU2VydmVyIHJlYWR5IGFuZCB3YWl0aW5nIC4uLiIpOwogCiAgICAgICAvLyB3YWl0IGZvciBpbnZvY2F0aW9ucyBmcm9tIGNsaWVudHMKICAgICAgIG9yYi5ydW4oKTsKLSAgICB9IAotCQorICAgIH0KKwogICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRVJST1I6ICIgKyBlKTsKICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLm91dCk7CiAgICAgICB9Ci0JICAKKwogICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIZWxsb1NlcnZlciBFeGl0aW5nIC4uLiIpOwotCQorCiAgIH0KIH0KLSAKKwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvdmlzaWJyb2tlci9ybWlpaW9wL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvdmlzaWJyb2tlci9ybWlpaW9wL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNDE0NzlhOC4uNDQyYTk5MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL3Zpc2licm9rZXIvcm1paWlvcC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy92aXNpYnJva2VyL3JtaWlpb3AvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJybWlpaW9wIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1BcHAiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LUFwcCIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0id2FyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvdmlzaWJyb2tlci9ybWlpaW9wL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy92aXNpYnJva2VyL3JtaWlpb3AvYnVpbGQueG1sCmluZGV4IGY2MjAxN2UuLjVmZGQ1YzQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy92aXNpYnJva2VyL3JtaWlpb3AvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy92aXNpYnJva2VyL3JtaWlpb3AvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iY29tbW9uLnhtbDogQ29tcGlsaW5nIHNvdXJjZSBmaWxlcyB3aXRoIHZiamMuLi4iIGxldmVsPSJ2ZXJib3NlIi8+CiAgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9Ii9zcGFjZS9Cb3JsYW5kL1Zpc2lCcm9rZXIvYmluL3ZiamMiIGRpcj0ic3JjL0JhbmsiIGZhaWxvbmVycm9yPSJmYWxzZSI+CkBAIC00Nyw1NCArNDcsNTQgQEAKICAgICAgICAgPGV4ZWMgIGRpcj0ic3JjIiBleGVjdXRhYmxlPSIvc3BhY2UvQm9ybGFuZC9WaXNpQnJva2VyL2Jpbi9qYXZhMmlpb3AiIGZhaWxvbmVycm9yPSJmYWxzZSI+CiAgICAgICAgICAgICA8YXJnIGxpbmU9IkJhbmsuQWNjb3VudERhdGEgQmFuay5BY2NvdW50TWFuYWdlciIvPgogICAgICAgICA8L2V4ZWM+Ci0gICAgICAgICAgIAorCiAgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CiAgICAgICAgIDxleGVjIGRpcj0ic3JjIiBleGVjdXRhYmxlPSIvc3BhY2UvQm9ybGFuZC9WaXNpQnJva2VyL2Jpbi92YmpjIiAgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICAgICAgICAgIDxhcmcgbGluZT0iQmFuay9BY2NvdW50SGVscGVyLmphdmEgIEJhbmsvQWNjb3VudEhvbGRlci5qYXZhIEJhbmsvQWNjb3VudE1hbmFnZXJIZWxwZXIuamF2YSBCYW5rL0FjY291bnRNYW5hZ2VySG9sZGVyLmphdmEgQmFuay9BY2NvdW50TWFuYWdlclBPQS5qYXZhIEJhbmsvQWNjb3VudE1hbmFnZXJQT0FUaWUuamF2YSBCYW5rL0FjY291bnRPcGVyYXRpb25zLmphdmEgQmFuay9BY2NvdW50UE9BLmphdmEgQmFuay9fQWNjb3VudE1hbmFnZXJTdHViLmphdmEgQmFuay9fQWNjb3VudF9TdHViLmphdmEgQmFuay9fQWNjb3VudF9UaWUuamF2YSIvPgogCiAgICAgICAgIDwvZXhlYz4KIDxleGVjIGRpcj0ic3JjIiBleGVjdXRhYmxlPSIvc3BhY2UvQm9ybGFuZC9WaXNpQnJva2VyL2Jpbi92YmpjIiAgZmFpbG9uZXJyb3I9ImZhbHNlIj4KLSAgICAgICAgICAgIDxhcmcgbGluZT0iQWNjb3VudEltcGwuamF2YQlBY2NvdW50TWFuYWdlckltcGwuamF2YSBDbGllbnQuamF2YSBTZXJ2ZXIuamF2YSIvPgorICAgICAgICAgICAgPGFyZyBsaW5lPSJBY2NvdW50SW1wbC5qYXZhICAgIEFjY291bnRNYW5hZ2VySW1wbC5qYXZhIENsaWVudC5qYXZhIFNlcnZlci5qYXZhIi8+CiAKICAgICAgICAgPC9leGVjPgogCiAgICAgICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSI+Ci0JICAgIDxmaWxlc2V0IGRpcj0ic3JjL0JhbmsiPgorICAgICAgICA8ZmlsZXNldCBkaXI9InNyYy9CYW5rIj4KICAgICAgICAgICAgICAgPGV4Y2x1ZGUgbmFtZT0iKiovKi5qYXZhIi8+CiAgICAgICAgICAgICA8L2ZpbGVzZXQ+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9InNyYyI+Ci0JICAgICAgIDxleGNsdWRlIG5hbWU9IioqLyouamF2YSIvPgorICAgICAgICAgICA8ZXhjbHVkZSBuYW1lPSIqKi8qLmphdmEiLz4KICAgICAgICAgICAgIDwvZmlsZXNldD4KLSAgICAgICAgICAgIAorCiAgICAgICAgIDwvY29weT4KLSAKKwogICAgIDwvdGFyZ2V0PgogCiAKIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKi5jbGFzcywqKi8qLmNsYXNzIi8+IAorICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqLmNsYXNzLCoqLyouY2xhc3MiLz4KICAgICA8L2FudGNhbGw+CiA8L3RhcmdldD4KIAotIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxlY2hvIG1lc3NhZ2U9IkRlcGxveWluZyB2aWEgYXNhZG1pbi4uLiIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogCiA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bndlYmNsaWVudC1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJybWlpaW9wIi8+Ci0JPC9hbnRjYWxsPgorICAgIDxwYXJhbSBuYW1lPSJ0ZXN0c3VpdGUuaWQiIHZhbHVlPSJybWlpaW9wIi8+CisgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCiAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCi0gIAorCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvdmlzaWJyb2tlci9ybWlpaW9wL3NyYy9BY2NvdW50SW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL3Zpc2licm9rZXIvcm1paWlvcC9zcmMvQWNjb3VudEltcGwuamF2YQppbmRleCBlOTgzZTQyLi44NmRiMDI1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvdmlzaWJyb2tlci9ybWlpaW9wL3NyYy9BY2NvdW50SW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy92aXNpYnJva2VyL3JtaWlpb3Avc3JjL0FjY291bnRJbXBsLmphdmEKQEAgLTE3LDcgKzE3LDcgQEAKIC8vIEFjY291bnRJbXBsLmphdmEKIAogcHVibGljIGNsYXNzIEFjY291bnRJbXBsIGV4dGVuZHMgQmFuay5BY2NvdW50UE9BIHsKLSAgCisKICAgcHVibGljIEFjY291bnRJbXBsKEJhbmsuQWNjb3VudERhdGEgZGF0YSkgewogICAgIF9uYW1lID0gZGF0YS5nZXROYW1lKCk7CiAgICAgX2JhbGFuY2UgPSBkYXRhLmdldEJhbGFuY2UoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy92aXNpYnJva2VyL3JtaWlpb3Avc3JjL0JhbmsvQWNjb3VudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL3Zpc2licm9rZXIvcm1paWlvcC9zcmMvQmFuay9BY2NvdW50LmphdmEKaW5kZXggOGNlYjdhOC4uMmRhOTk4NSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL3Zpc2licm9rZXIvcm1paWlvcC9zcmMvQmFuay9BY2NvdW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL3Zpc2licm9rZXIvcm1paWlvcC9zcmMvQmFuay9BY2NvdW50LmphdmEKQEAgLTIxLDQgKzIxLDQgQEAKICAgZmxvYXQgZ2V0QmFsYW5jZSAoKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogICB2b2lkIHNldEJhbGFuY2UgKGZsb2F0IGJhbCkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIH0KLSAgCisKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL25hbWluZy92aXNpYnJva2VyL3JtaWlpb3Avc3JjL0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL3Zpc2licm9rZXIvcm1paWlvcC9zcmMvQ2xpZW50LmphdmEKaW5kZXggMGU5M2RhNC4uMjhlNjkxNCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL3Zpc2licm9rZXIvcm1paWlvcC9zcmMvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL3Zpc2licm9rZXIvcm1paWlvcC9zcmMvQ2xpZW50LmphdmEKQEAgLTI1LDggKzI1LDggQEAKICAgICAgIC8vIEdldCB0aGUgbWFuYWdlciBJZAogICAgICAgYnl0ZVtdIG1hbmFnZXJJZCA9ICJSTUlCYW5rTWFuYWdlciIuZ2V0Qnl0ZXMoKTsKICAgICAgIC8vIExvY2F0ZSBhbiBhY2NvdW50IG1hbmFnZXIuIEdpdmUgdGhlIGZ1bGwgUE9BIG5hbWUgYW5kIHRoZSBzZXJ2YW50IElELgotICAgICAgQmFuay5BY2NvdW50TWFuYWdlciBtYW5hZ2VyID0gCi0JQmFuay5BY2NvdW50TWFuYWdlckhlbHBlci5iaW5kKG9yYiwgIi9ybWlfYmFua19wb2EiLCBtYW5hZ2VySWQpOworICAgICAgQmFuay5BY2NvdW50TWFuYWdlciBtYW5hZ2VyID0KKyAgICBCYW5rLkFjY291bnRNYW5hZ2VySGVscGVyLmJpbmQob3JiLCAiL3JtaV9iYW5rX3BvYSIsIG1hbmFnZXJJZCk7CiAgICAgICAvLyBVc2UgYW55IG51bWJlciBvZiBhcmd1bWVudCBwYWlycyB0byBpbmRpY2F0ZSBuYW1lLGJhbGFuY2Ugb2YgYWNjb3VudHMgdG8gY3JlYXRlCiAgICAgICBpZiAoYXJncy5sZW5ndGggPT0gMCB8fCBhcmdzLmxlbmd0aCAlIDIgIT0gMCkgewogICAgICAgICBhcmdzID0gbmV3IFN0cmluZ1syXTsKQEAgLTQ3LDEwICs0NywxMCBAQAogICAgICAgICBCYW5rLkFjY291bnQgYWNjb3VudCA9IG1hbmFnZXIuY3JlYXRlKGRhdGEpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4KICAgICAgICAgICAoIkNyZWF0ZWQgYWNjb3VudCBmb3IgIiArIG5hbWUgKyAiIHdpdGggb3BlbmluZyBiYWxhbmNlIG9mICQiICsgYmFsYW5jZSk7Ci0gICAgICB9IAotICAgIAorICAgICAgfQorCiAgICAgICBqYXZhLnV0aWwuSGFzaHRhYmxlIGFjY291bnRzID0gbWFuYWdlci5nZXRBY2NvdW50cygpOwotICAgIAorCiAgICAgICBmb3IgKGphdmEudXRpbC5FbnVtZXJhdGlvbiBlID0gYWNjb3VudHMuZWxlbWVudHMoKTsgZS5oYXNNb3JlRWxlbWVudHMoKTspIHsKICAgICAgICAgQmFuay5BY2NvdW50IGFjY291bnQgPSBCYW5rLkFjY291bnRIZWxwZXIubmFycm93KChvcmcub21nLkNPUkJBLk9iamVjdCllLm5leHRFbGVtZW50KCkpOwogICAgICAgICBTdHJpbmcgbmFtZSA9IGFjY291bnQubmFtZSgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvbmFtaW5nL3Zpc2licm9rZXIvcm1paWlvcC9zcmMvU2VydmVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvdmlzaWJyb2tlci9ybWlpaW9wL3NyYy9TZXJ2ZXIuamF2YQppbmRleCBlZTdlOWI4Li4wYjgzZTM3IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvdmlzaWJyb2tlci9ybWlpaW9wL3NyYy9TZXJ2ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9uYW1pbmcvdmlzaWJyb2tlci9ybWlpaW9wL3NyYy9TZXJ2ZXIuamF2YQpAQCAtMjcsMTEgKzI3LDExIEBACiAgICAgICBQT0Egcm9vdFBPQSA9IFBPQUhlbHBlci5uYXJyb3cob3JiLnJlc29sdmVfaW5pdGlhbF9yZWZlcmVuY2VzKCJSb290UE9BIikpOwogCiAgICAgICAvLyBDcmVhdGUgcG9saWNpZXMgZm9yIG91ciBwZXJzaXN0ZW50IFBPQQotICAgICAgb3JnLm9tZy5DT1JCQS5Qb2xpY3lbXSBwb2xpY2llcyA9IHsgCi0gICAgICAgIHJvb3RQT0EuY3JlYXRlX2xpZmVzcGFuX3BvbGljeShMaWZlc3BhblBvbGljeVZhbHVlLlBFUlNJU1RFTlQpIAorICAgICAgb3JnLm9tZy5DT1JCQS5Qb2xpY3lbXSBwb2xpY2llcyA9IHsKKyAgICAgICAgcm9vdFBPQS5jcmVhdGVfbGlmZXNwYW5fcG9saWN5KExpZmVzcGFuUG9saWN5VmFsdWUuUEVSU0lTVEVOVCkKICAgICAgIH07CiAgICAgICAvLyBDcmVhdGUgbXlQT0Egd2l0aCB0aGUgcmlnaHQgcG9saWNpZXMKLSAgICAgIFBPQSBteVBPQSA9IHJvb3RQT0EuY3JlYXRlX1BPQSggInJtaV9iYW5rX3BvYSIsIHJvb3RQT0EudGhlX1BPQU1hbmFnZXIoKSwgCisgICAgICBQT0EgbXlQT0EgPSByb290UE9BLmNyZWF0ZV9QT0EoICJybWlfYmFua19wb2EiLCByb290UE9BLnRoZV9QT0FNYW5hZ2VyKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9saWNpZXMgKTsKICAgICAgIC8vIENyZWF0ZSB0aGUgc2VydmFudAogICAgICAgQWNjb3VudE1hbmFnZXJJbXBsIG1hbmFnZXJTZXJ2YW50ID0gbmV3IEFjY291bnRNYW5hZ2VySW1wbCgpOwpAQCAtNDMsNyArNDMsNyBAQAogICAgICAgLy8gQWN0aXZhdGUgdGhlIFBPQSBtYW5hZ2VyCiAgICAgICByb290UE9BLnRoZV9QT0FNYW5hZ2VyKCkuYWN0aXZhdGUoKTsKIAotICAgICAgU3lzdGVtLm91dC5wcmludGxuKG15UE9BLnNlcnZhbnRfdG9fcmVmZXJlbmNlKG1hbmFnZXJTZXJ2YW50KSArIAorICAgICAgU3lzdGVtLm91dC5wcmludGxuKG15UE9BLnNlcnZhbnRfdG9fcmVmZXJlbmNlKG1hbmFnZXJTZXJ2YW50KSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgIiBpcyByZWFkeS4iKTsKICAgICAgIC8vIFdhaXQgZm9yIGluY29taW5nIHJlcXVlc3RzCiAgICAgICBvcmIucnVuKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS9wZXJzaXN0ZW5jZS1jb21tb24ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvcGVyc2lzdGVuY2UtY29tbW9uLnhtbAppbmRleCBlYmVjNzQ3Li5mODFhNjNiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS9wZXJzaXN0ZW5jZS1jb21tb24ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3BlcnNpc3RlbmNlLWNvbW1vbi54bWwKQEAgLTIyLDE2ICsyMiwxNiBAQAogLS0+CiAKIDwhLS0KLSAgIC1EZGF0YWJhc2UucHJvcGVydGllcyBvcHRpb24gY2FuIGJlIHBhc3NlZCB0byB0aGUgYW50IHRhcmdldCB0byBydW4gdGhlIHBlcnNpc3RlbmNlIAotICAgdGVzdHMgd2l0aCB2YXJpb3VzIGRhdGFiYXNlcy4gVGVzdCBsb2FkcyBkZXJieS5wcm9wZXJ0aWVzIGFzIGRlZmF1bHQgaWYgbm8gZGF0YWJhc2UgCisgICAtRGRhdGFiYXNlLnByb3BlcnRpZXMgb3B0aW9uIGNhbiBiZSBwYXNzZWQgdG8gdGhlIGFudCB0YXJnZXQgdG8gcnVuIHRoZSBwZXJzaXN0ZW5jZQorICAgdGVzdHMgd2l0aCB2YXJpb3VzIGRhdGFiYXNlcy4gVGVzdCBsb2FkcyBkZXJieS5wcm9wZXJ0aWVzIGFzIGRlZmF1bHQgaWYgbm8gZGF0YWJhc2UKICAgIGlzIHNwZWNpZmllZC4KIC0tPgogPHByb3BlcnR5IG5hbWU9ImRhdGFiYXNlLnByb3BlcnRpZXMiIHZhbHVlPSIke2Vudi5BUFNfSE9NRX0vZGV2dGVzdHMvcGVyc2lzdGVuY2UvY29uZmlnL2RlcmJ5LnByb3BlcnRpZXMiIC8+CiA8cHJvcGVydHkgZmlsZT0iJHtkYXRhYmFzZS5wcm9wZXJ0aWVzfSIgLz4KIAogPCEtLQotICAgLURwZXJzaXN0ZW5jZS5wcm92aWRlciBvcHRpb24gY2FuIGJlIHBhc3NlZCB0byB0aGUgYW50IHRhcmdldCB0byBydW4gdGhlIHBlcnNpc3RlbmNlIAotICAgdGVzdHMgd2l0aCB2YXJpb3VzIHByb3ZpZGVycy4gVGVzdCBsb2FkcyBlY2xpcHNlbGluayAgYXMgZGVmYXVsdCBpZiBubyBwcm92aWRlciAKKyAgIC1EcGVyc2lzdGVuY2UucHJvdmlkZXIgb3B0aW9uIGNhbiBiZSBwYXNzZWQgdG8gdGhlIGFudCB0YXJnZXQgdG8gcnVuIHRoZSBwZXJzaXN0ZW5jZQorICAgdGVzdHMgd2l0aCB2YXJpb3VzIHByb3ZpZGVycy4gVGVzdCBsb2FkcyBlY2xpcHNlbGluayAgYXMgZGVmYXVsdCBpZiBubyBwcm92aWRlcgogICAgaXMgc3BlY2lmaWVkLgogLS0+CiA8cHJvcGVydHkgbmFtZT0icGVyc2lzdGVuY2UucHJvdmlkZXIiIHZhbHVlPSJvcmcuZWNsaXBzZS5wZXJzaXN0ZW5jZS5qcGEuUGVyc2lzdGVuY2VQcm92aWRlciIgLz4KQEAgLTEwMSw3ICsxMDEsNyBAQAogICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CiAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHtlbnRpdHkuamFyfSIgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIHVwZGF0ZT0idHJ1ZSIgaW5jbHVkZXMgPSAiJHtlbnRpdHkuY2xhc3N9Ij4KICAgICAgICA8bWV0YWluZiBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIj4KLQkgICA8aW5jbHVkZSBuYW1lPSIqKi8qLnhtbCIvPgorICAgICAgIDxpbmNsdWRlIG5hbWU9IioqLyoueG1sIi8+CiAgICAgICAgPC9tZXRhaW5mPgogICAgIDwvamFyPgogICAgIDxlY2hvIG1lc3NhZ2U9Ii0tLS1HRU5FUkFURUQtLS0tJHtidWlsZC5jbGFzc2VzLmRpcn0vJHtlbnRpdHkuamFyfSIgLz4KQEAgLTExNCwxMCArMTE0LDEwIEBACiAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CiAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfS9saWIiLz4KICAgPG1vdmUgZmlsZT0iJHthc3NlbWJsZS5kaXJ9L2VudGl0eS5qYXIiIHRvZGlyPSIke2Fzc2VtYmxlLmRpcn0vbGliIi8+Ci0gIDxjb3B5IGZpbGU9IiR7YXBwbGljYXRpb24ueG1sfSIgCi0gICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIiAKKyAgPGNvcHkgZmlsZT0iJHthcHBsaWNhdGlvbi54bWx9IgorICAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIKICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gIDxjb3B5IGZpbGU9IiR7Z2xhc3NmaXNoLXJlc291cmNlcy54bWx9IiAKKyAgPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtcmVzb3VyY2VzLnhtbH0iCiAgICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvZ2xhc3NmaXNoLXJlc291cmNlcy54bWwiCiAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciI+CkBAIC0xNzQsNyArMTc0LDcgQEAKICAgICA8L2ZpbGVzZXQ+CiAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSI+CiAgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLQkgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIi8+CisgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIvPgogICAgIDwvZmlsZXNldD4KICAgPC9qYXI+CiA8L3RhcmdldD4KQEAgLTI1Niw3ICsyNTYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi5kbyIvPgogICAgICAgICAgICAgICAgIDwvZmlsZXNldD4KICAgICAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiBjYXNlc2Vuc2l0aXZlPSJ0cnVlIj4KLQkJCSA8aW5jbHVkZSBuYW1lPSJXRUItSU5GL3dlYi54bWwiLz4KKyAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJXRUItSU5GL3dlYi54bWwiLz4KICAgICAgICAgICAgICAgICA8L2ZpbGVzZXQ+CiAgICAgICAgIDwvamFyPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJjcmVhdGVkIHdhciBmaWxlICR7d2FyLmZpbGV9Ii8+CkBAIC0yNzQsOCArMjc0LDggQEAKICAgICAgICAgPGVjaG8gbWVzc2FnZT0id2ViY2xpZW50Lndhci5jbGFzc2VzPSR7d2ViY2xpZW50Lndhci5jbGFzc2VzfSIvPgogICAgICAgICA8Y29weSBmaWxlPSIke3dlYi54bWx9IgogICAgICAgICAgICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vV0VCLUlORi93ZWIueG1sIi8+Ci0JPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vV0VCLUlORi9jbGFzc2VzL01FVEEtSU5GIi8+Ci0JPGNvcHkgZmlsZT0iJHtwZXJzaXN0ZW5jZS54bWx9IgorICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L1dFQi1JTkYvY2xhc3Nlcy9NRVRBLUlORiIvPgorICAgIDxjb3B5IGZpbGU9IiR7cGVyc2lzdGVuY2UueG1sfSIKICAgICAgICAgICAgICAgICB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L1dFQi1JTkYvY2xhc3Nlcy9NRVRBLUlORi9wZXJzaXN0ZW5jZS54bWwiLz4KICAgICAgICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L1dFQi1JTkYvY2xhc3NlcyI+CiAgICAgICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSI+CkBAIC0yOTQsNyArMjk0LDcgQEAKICAgICAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiBjYXNlc2Vuc2l0aXZlPSJ0cnVlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJXRUItSU5GL3dlYi54bWwiLz4KICAgICAgICAgICAgICAgICA8L2ZpbGVzZXQ+Ci0JCSA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiBjYXNlc2Vuc2l0aXZlPSJ0cnVlIj4KKyAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIGNhc2VzZW5zaXRpdmU9InRydWUiPgogICAgICAgICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IldFQi1JTkYvY2xhc3Nlcy9NRVRBLUlORi9wZXJzaXN0ZW5jZS54bWwiLz4KICAgICAgICAgICAgICAgICA8L2ZpbGVzZXQ+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3J1bl90ZXN0LnNoIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvcnVuX3Rlc3Quc2gKaW5kZXggZTVjODJmOS4uY2VlNTdmMCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvcnVuX3Rlc3Quc2gKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvcnVuX3Rlc3Quc2gKQEAgLTQwLDExICs0MCwxMSBAQAogfQogCiBnZXRfdGVzdF90YXJnZXQoKXsKLQljYXNlICR7MX0gaW4KLQkJcGVyc2lzdGVuY2VfYWxsICkKLQkJCVRBUkdFVD1hbGwKLQkJCWV4cG9ydCBUQVJHRVQ7OwotCWVzYWMKKyAgICBjYXNlICR7MX0gaW4KKyAgICAgICAgcGVyc2lzdGVuY2VfYWxsICkKKyAgICAgICAgICAgIFRBUkdFVD1hbGwKKyAgICAgICAgICAgIGV4cG9ydCBUQVJHRVQ7OworICAgIGVzYWMKIH0KIAogT1BUPSR7MX0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3Rlc3RzL3BhY2thZ2luZy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS90ZXN0cy9wYWNrYWdpbmcvYnVpbGQueG1sCmluZGV4IDY4ZDFkNTQuLmI1OWQwMjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3Rlc3RzL3BhY2thZ2luZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdGVzdHMvcGFja2FnaW5nL2J1aWxkLnhtbApAQCAtNDMsMTAgKzQzLDEwIEBACiAgICAgICAgIDwvZGVsZXRlPgogICAgICAgICA8cmVjb3JkIG5hbWU9InBlcnNpc3RlbmNlX3BhY2thZ2luZy5vdXRwdXQiIGFjdGlvbj0ic3RhcnQiIC8+CiAKLQk8YW50IGRpcj0icGtnRWFyTGliVGVzdCIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0icGtnRWpiVGVzdCIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0icGtnV2FyVGVzdCIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0icGtnV2FyVGVzdDEiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9InBrZ0VhckxpYlRlc3QiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9InBrZ0VqYlRlc3QiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9InBrZ1dhclRlc3QiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9InBrZ1dhclRlc3QxIiB0YXJnZXQ9ImFsbCIvPgogCiAKICAgICAgICAgPHJlY29yZCBuYW1lPSJwZXJzaXN0ZW5jZV9wYWNrYWdpbmcub3V0cHV0IiBhY3Rpb249InN0b3AiIC8+CkBAIC02NywxMCArNjcsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icGtnRWpiVGVzdCI+Ci0JPHJlY29yZCBuYW1lPSJwa2dFamJUZXN0Lm91dHB1dCIgYWN0aW9uPSJzdGFydCIgLz4KKyAgICA8cmVjb3JkIG5hbWU9InBrZ0VqYlRlc3Qub3V0cHV0IiBhY3Rpb249InN0YXJ0IiAvPgogICAgICAgICAgICAgPGFudCBkaXI9InBrZ0VqYlRlc3QiIHRhcmdldD0iYWxsIi8+Ci0JPHJlY29yZCBuYW1lPSJwa2dFamJUZXN0Lm91dHB1dCIgYWN0aW9uPSJzdG9wIiAvPgotCTxhbnRjYWxsIHRhcmdldD0icmVwb3J0Ii8+CisgICAgPHJlY29yZCBuYW1lPSJwa2dFamJUZXN0Lm91dHB1dCIgYWN0aW9uPSJzdG9wIiAvPgorICAgIDxhbnRjYWxsIHRhcmdldD0icmVwb3J0Ii8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InBrZ1dhclRlc3QiPgpAQCAtODgsOSArODgsOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+Ci0JCVVzYWdlOgotCQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSBwZXJzaXN0ZW5jZV9wYWNrYWdpbmcgdGVzdHMpCi0JPC9lY2hvPgorICAgIDxlY2hvPgorICAgICAgICBVc2FnZToKKyAgICAgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgcGVyc2lzdGVuY2VfcGFja2FnaW5nIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3Rlc3RzL3BhY2thZ2luZy9wa2dFYXJMaWJUZXN0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS90ZXN0cy9wYWNrYWdpbmcvcGtnRWFyTGliVGVzdC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGNiMWQ0NGQuLmRkNzE1ZGMgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3Rlc3RzL3BhY2thZ2luZy9wa2dFYXJMaWJUZXN0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdGVzdHMvcGFja2FnaW5nL3BrZ0VhckxpYlRlc3QvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItY21wIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1wa2dFYXJMaWJUZXN0Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1wa2dFYXJMaWJUZXN0Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InBlcnNpc3RlbmNlLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvcGVyc2lzdGVuY2UueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdGVzdHMvcGFja2FnaW5nL3BrZ0VhckxpYlRlc3QvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdGVzdHMvcGFja2FnaW5nL3BrZ0VhckxpYlRlc3QvYnVpbGQueG1sCmluZGV4IDJkYWU0ZTguLjRmY2RhOTUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3Rlc3RzL3BhY2thZ2luZy9wa2dFYXJMaWJUZXN0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS90ZXN0cy9wYWNrYWdpbmcvcGtnRWFyTGliVGVzdC9idWlsZC54bWwKQEAgLTY2LDEzICs2NiwxMyBAQAogICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY2xpZW50Ii8+CiAgICAgPC9hbnRjYWxsPgotPC90YXJnZXQ+IAorPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0icGtnLXB1IiBkZXBlbmRzPSJpbml0LWNvbW1vbixjb21waWxlIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2UtcHUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImVudGl0eS5qYXIiIHZhbHVlPSJlbnRpdHkuamFyIi8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJlbnRpdHkuY2xhc3MiIHZhbHVlPSIqKi8qQ3VzdG9tZXIuY2xhc3MsKiovKk9yZGVyLmNsYXNzIi8+Ci0JPHBhcmFtIG5hbWU9InBlcnNpc3RlbmNlLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvcGVyc2lzdGVuY2UueG1sIi8+CisgICAgPHBhcmFtIG5hbWU9InBlcnNpc3RlbmNlLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvcGVyc2lzdGVuY2UueG1sIi8+CiAgICAgPC9hbnRjYWxsPgogPC90YXJnZXQ+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3Rlc3RzL3BhY2thZ2luZy9wa2dFYXJMaWJUZXN0L2NsaWVudC9BcHBDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3Rlc3RzL3BhY2thZ2luZy9wa2dFYXJMaWJUZXN0L2NsaWVudC9BcHBDbGllbnQuamF2YQppbmRleCBmYmIyMWIzLi5lNzA5YmI3IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS90ZXN0cy9wYWNrYWdpbmcvcGtnRWFyTGliVGVzdC9jbGllbnQvQXBwQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdGVzdHMvcGFja2FnaW5nL3BrZ0VhckxpYlRlc3QvY2xpZW50L0FwcENsaWVudC5qYXZhCkBAIC0yOSw3ICsyOSw3IEBACiAKIHB1YmxpYyBjbGFzcyBBcHBDbGllbnQgewogCi0gICAgQEVKQihuYW1lPSJlamIvVGVzdCIpIAorICAgIEBFSkIobmFtZT0iZWpiL1Rlc3QiKQogICAgIHByaXZhdGUgc3RhdGljIFRlc3Qgc2I7CiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RTdWl0ZUlEOwogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0dXMgPQpAQCAtMzcsNTMgKzM3LDUzIEBACiAKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImFyZ3MgLT4iKyBhcmdzKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImFyZ3MwIC0+IisgYXJnc1swXSk7Ci0JdGVzdFN1aXRlSUQgPSBhcmdzWzBdOwkKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImFyZ3MgLT4iKyBhcmdzKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImFyZ3MwIC0+IisgYXJnc1swXSk7CisgICAgdGVzdFN1aXRlSUQgPSBhcmdzWzBdOwogICAgICAgICBBcHBDbGllbnQgdGVzdCA9IG5ldyBBcHBDbGllbnQoKTsKLQlzdGF0dXMuYWRkRGVzY3JpcHRpb24oIlRlc3RpbmcgIEpQQSBwYWNrYWdpbmcgc2NlbmFyaW91cy4uIit0ZXN0U3VpdGVJRCk7Ci0JdGVzdC5ydW5UZXN0KCk7Ci0Jc3RhdHVzLnByaW50U3VtbWFyeSh0ZXN0U3VpdGVJRCk7CisgICAgc3RhdHVzLmFkZERlc2NyaXB0aW9uKCJUZXN0aW5nICBKUEEgcGFja2FnaW5nIHNjZW5hcmlvdXMuLiIrdGVzdFN1aXRlSUQpOworICAgIHRlc3QucnVuVGVzdCgpOworICAgIHN0YXR1cy5wcmludFN1bW1hcnkodGVzdFN1aXRlSUQpOwogICAgIH0KIAogCiAgICAgcHVibGljIHZvaWQgcnVuVGVzdCgpIHsKIAotCQorCiAgICAgICAgIC8vIFBlcnNpc3QgYWxsIGVudGl0aWVzCi0JU3RyaW5nIHRlc3RJbnNlcnQgPSBzYi50ZXN0SW5zZXJ0KCk7CisgICAgU3RyaW5nIHRlc3RJbnNlcnQgPSBzYi50ZXN0SW5zZXJ0KCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW5zZXJ0aW5nIEN1c3RvbWVyIGFuZCBPcmRlcnMuLi4gIiArIHRlc3RJbnNlcnQpOwotCWlmKCJPSyIuZXF1YWxzKHRlc3RJbnNlcnQpKSB7Ci0JCXN0YXR1cy5hZGRTdGF0dXModGVzdFN1aXRlSUQgKyAiLUluc2VydEN1c3RvbWVyIiwgc3RhdHVzLlBBU1MpOwotCX0gZWxzZSB7Ci0JCXN0YXR1cy5hZGRTdGF0dXModGVzdFN1aXRlSUQgKyAiLUluc2VydEN1c3RvbWVyIiwgc3RhdHVzLkZBSUwpOworICAgIGlmKCJPSyIuZXF1YWxzKHRlc3RJbnNlcnQpKSB7CisgICAgICAgIHN0YXR1cy5hZGRTdGF0dXModGVzdFN1aXRlSUQgKyAiLUluc2VydEN1c3RvbWVyIiwgc3RhdHVzLlBBU1MpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXR1cy5hZGRTdGF0dXModGVzdFN1aXRlSUQgKyAiLUluc2VydEN1c3RvbWVyIiwgc3RhdHVzLkZBSUwpOwogICAgICAgICB9CiAKLQlTdHJpbmcgdmVySW5zZXJ0ID0gc2IudmVyaWZ5SW5zZXJ0KCk7CisgICAgU3RyaW5nIHZlckluc2VydCA9IHNiLnZlcmlmeUluc2VydCgpOwogICAgICAgICAvLyBUZXN0IHF1ZXJ5IGFuZCBuYXZpZ2F0aW9uCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVmVyaWZ5aW5nIHRoYXQgYWxsIGFyZSBpbnNlcnRlZC4uLiAiICsgdmVySW5zZXJ0KTsKLQlpZigiT0siLmVxdWFscyh2ZXJJbnNlcnQpKSB7CisgICAgaWYoIk9LIi5lcXVhbHModmVySW5zZXJ0KSkgewogICAgICAgICAgICAgICAgIHN0YXR1cy5hZGRTdGF0dXModGVzdFN1aXRlSUQgKyAiLVZlcmlmeUN1c3RvbWVySW5zZXJ0Iiwgc3RhdHVzLlBBU1MpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHN0YXR1cy5hZGRTdGF0dXModGVzdFN1aXRlSUQgKyAiLVZlcmlmeUN1c3RvbWVySW5zZXJ0Iiwgc3RhdHVzLkZBSUwpOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gR2V0IGEgZGV0YWNoZWQgaW5zdGFuY2UgCisgICAgICAgIC8vIEdldCBhIGRldGFjaGVkIGluc3RhbmNlCiAgICAgICAgIFN0cmluZyBjID0gIkpvZSBTbWl0aCI7Ci0JU3RyaW5nIHRlc3REZWxldGUgPSBzYi50ZXN0RGVsZXRlKGMpOworICAgIFN0cmluZyB0ZXN0RGVsZXRlID0gc2IudGVzdERlbGV0ZShjKTsKIAogICAgICAgICAvLyBSZW1vdmUgYWxsIGVudGl0aWVzCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVtb3ZpbmcgYWxsLi4uICIgKyB0ZXN0RGVsZXRlKTsKLQlpZigiT0siLmVxdWFscyh0ZXN0RGVsZXRlKSkgeworICAgIGlmKCJPSyIuZXF1YWxzKHRlc3REZWxldGUpKSB7CiAgICAgICAgICAgICAgICAgc3RhdHVzLmFkZFN0YXR1cyh0ZXN0U3VpdGVJRCArICItRGVsZXRlQ3VzdG9tZXIiLCBzdGF0dXMuUEFTUyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgc3RhdHVzLmFkZFN0YXR1cyh0ZXN0U3VpdGVJRCArICItRGVsZXRlQ3VzdG9tZXIiLCBzdGF0dXMuRkFJTCk7CiAgICAgICAgIH0KIAotCVN0cmluZyB2ZXJEZWxldGUgPSBzYi52ZXJpZnlEZWxldGUoKTsKKyAgICBTdHJpbmcgdmVyRGVsZXRlID0gc2IudmVyaWZ5RGVsZXRlKCk7CiAgICAgICAgIC8vIFF1ZXJ5IHRoZSByZXN1bHRzCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVmVyaWZ5aW5nIHRoYXQgYWxsIGFyZSByZW1vdmVkLi4uICIgKyB2ZXJEZWxldGUpOwotCWlmKCJPSyIuZXF1YWxzKHZlckRlbGV0ZSkpIHsKKyAgICBpZigiT0siLmVxdWFscyh2ZXJEZWxldGUpKSB7CiAgICAgICAgICAgICAgICAgc3RhdHVzLmFkZFN0YXR1cyh0ZXN0U3VpdGVJRCArICItVmVyaWZ5RGVsZXRlQ3VzdG9tZXIiLCBzdGF0dXMuUEFTUyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgc3RhdHVzLmFkZFN0YXR1cyh0ZXN0U3VpdGVJRCArICItVmVyaWZ5RGVsZXRlQ3VzdG9tZXIiLCBzdGF0dXMuRkFJTCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS90ZXN0cy9wYWNrYWdpbmcvcGtnRWFyTGliVGVzdC9lamIvVGVzdEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3Rlc3RzL3BhY2thZ2luZy9wa2dFYXJMaWJUZXN0L2VqYi9UZXN0QmVhbi5qYXZhCmluZGV4IDBmMmUzNTUuLjIyOGU2MmIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3Rlc3RzL3BhY2thZ2luZy9wa2dFYXJMaWJUZXN0L2VqYi9UZXN0QmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3Rlc3RzL3BhY2thZ2luZy9wa2dFYXJMaWJUZXN0L2VqYi9UZXN0QmVhbi5qYXZhCkBAIC01MiwxMCArNTIsMTAgQEAKICAgICAgICAgb3JkZXIyLnNldElkKDIwMCk7CiAgICAgICAgIG9yZGVyMi5zZXRBZGRyZXNzKCI1NjcgMXN0IFN0LiBSYW5kb20gQ2l0eSwgVVNBIik7CiAKLSAgICAgICAgLy8gQXNzb2NpYXRlIG9yZGVycyB3aXRoIHRoZSBjdXN0b21lci4gVGhlIGFzc29jaWF0aW9uIAotICAgICAgICAvLyBtdXN0IGJlIHNldCBvbiBib3RoIHNpZGVzIG9mIHRoZSByZWxhdGlvbnNoaXA6IG9uIHRoZSAKLSAgICAgICAgLy8gY3VzdG9tZXIgc2lkZSBmb3IgdGhlIG9yZGVycyB0byBiZSBwZXJzaXN0ZWQgd2hlbiAKLSAgICAgICAgLy8gdHJhbnNhY3Rpb24gY29tbWl0cywgYW5kIG9uIHRoZSBvcmRlciBzaWRlIGJlY2F1c2UgaXQgCisgICAgICAgIC8vIEFzc29jaWF0ZSBvcmRlcnMgd2l0aCB0aGUgY3VzdG9tZXIuIFRoZSBhc3NvY2lhdGlvbgorICAgICAgICAvLyBtdXN0IGJlIHNldCBvbiBib3RoIHNpZGVzIG9mIHRoZSByZWxhdGlvbnNoaXA6IG9uIHRoZQorICAgICAgICAvLyBjdXN0b21lciBzaWRlIGZvciB0aGUgb3JkZXJzIHRvIGJlIHBlcnNpc3RlZCB3aGVuCisgICAgICAgIC8vIHRyYW5zYWN0aW9uIGNvbW1pdHMsIGFuZCBvbiB0aGUgb3JkZXIgc2lkZSBiZWNhdXNlIGl0CiAgICAgICAgIC8vIGlzIHRoZSBvd25pbmcgc2lkZS4KICAgICAgICAgY3VzdG9tZXIwLmdldE9yZGVycygpLmFkZChvcmRlcjEpOwogICAgICAgICBvcmRlcjEuc2V0Q3VzdG9tZXIoY3VzdG9tZXIwKTsKQEAgLTY1LDE0ICs2NSwxNCBAQAogCiAgICAgICAgIHJldHVybiAiT0siOwogICAgIH0KLSAgICAgICAgCisKICAgICBwdWJsaWMgU3RyaW5nIHZlcmlmeUluc2VydCgpIHsKIAogICAgICAgICBDdXN0b21lciBjID0gZmluZEN1c3RvbWVyKCJKb2UgU21pdGgiKTsKIAogICAgICAgICBDb2xsZWN0aW9uPE9yZGVyPiBvcmRlcnMgPSBjLmdldE9yZGVycygpOwogICAgICAgICBpZiAob3JkZXJzID09IG51bGwgfHwgb3JkZXJzLnNpemUoKSAhPSAyKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVW5leHBlY3RlZCBudW1iZXIgb2Ygb3JkZXJzOiAiIAorICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlVuZXhwZWN0ZWQgbnVtYmVyIG9mIG9yZGVyczogIgogICAgICAgICAgICAgICAgICAgICArICgob3JkZXJzID09IG51bGwpPyAibnVsbCIgOiAiIiArIG9yZGVycy5zaXplKCkpKTsKICAgICAgICAgfQogCkBAIC0xMTMsMTAgKzExMywxMCBAQAogICAgIH0KIAogICAgIHB1YmxpYyBDdXN0b21lciBmaW5kQ3VzdG9tZXIoU3RyaW5nIG5hbWUpIHsKLQlRdWVyeSBxID0gZW0uY3JlYXRlUXVlcnkoInNlbGVjdCBjIGZyb20gQ3VzdG9tZXIgYyB3aGVyZSBjLm5hbWUgPSA6bmFtZSIpOworICAgIFF1ZXJ5IHEgPSBlbS5jcmVhdGVRdWVyeSgic2VsZWN0IGMgZnJvbSBDdXN0b21lciBjIHdoZXJlIGMubmFtZSA9IDpuYW1lIik7CiAgICAgICAgIHEuc2V0UGFyYW1ldGVyKCJuYW1lIiwgbmFtZSk7CiAgICAgICAgIEN1c3RvbWVyIGMgPSAoQ3VzdG9tZXIpcS5nZXRTaW5nbGVSZXN1bHQoKTsKLQlyZXR1cm4gYzsKKyAgICByZXR1cm4gYzsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3Rlc3RzL3BhY2thZ2luZy9wa2dFamJUZXN0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS90ZXN0cy9wYWNrYWdpbmcvcGtnRWpiVGVzdC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDRjNmEwYjguLjJjNmNmYWYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3Rlc3RzL3BhY2thZ2luZy9wa2dFamJUZXN0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdGVzdHMvcGFja2FnaW5nL3BrZ0VqYlRlc3QvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItY21wIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1wa2dFamJUZXN0Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1wa2dFamJUZXN0Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InBlcnNpc3RlbmNlLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvcGVyc2lzdGVuY2UueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdGVzdHMvcGFja2FnaW5nL3BrZ0VqYlRlc3QvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdGVzdHMvcGFja2FnaW5nL3BrZ0VqYlRlc3QvYnVpbGQueG1sCmluZGV4IGQ4MDg2ZGUuLjE3N2FhNjUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3Rlc3RzL3BhY2thZ2luZy9wa2dFamJUZXN0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS90ZXN0cy9wYWNrYWdpbmcvcGtnRWpiVGVzdC9idWlsZC54bWwKQEAgLTM4LDcgKzM4LDcgQEAKIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgIDxjb3B5IGZpbGU9IiR7cGVyc2lzdGVuY2UueG1sfV9lbCIgdG9maWxlPSIke3BlcnNpc3RlbmNlLnhtbH0iCiAgICAgICAgICAgICAgICBvdmVyd3JpdGU9InRydWUiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotCSAgICAgIDxyZXBsYWNlIGZpbGU9IiR7cGVyc2lzdGVuY2UueG1sfSIgdG9rZW49IkBEQlBST1ZJREVSQCIgdmFsdWU9IiR7cGVyc2lzdGVuY2UucHJvdmlkZXJ9Ii8+CisgICAgICAgICAgPHJlcGxhY2UgZmlsZT0iJHtwZXJzaXN0ZW5jZS54bWx9IiB0b2tlbj0iQERCUFJPVklERVJAIiB2YWx1ZT0iJHtwZXJzaXN0ZW5jZS5wcm92aWRlcn0iLz4KICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmMtcGVyc2lzdGVuY2UtY29ubnBvb2wtY29tbW9uIi8+CiAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1qZGJjLXJlc291cmNlLWNvbW1vbiIvPgogPC90YXJnZXQ+CkBAIC02Niw3ICs2Niw3IEBACiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjbGllbnQiLz4KICAgICA8L2FudGNhbGw+Ci08L3RhcmdldD4gCis8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJwa2ctcHUiIGRlcGVuZHM9ImluaXQtY29tbW9uLGNvbXBpbGUiPgogICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1lbnRpdHktZWpiIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3Rlc3RzL3BhY2thZ2luZy9wa2dFamJUZXN0L2NsaWVudC9BcHBDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3Rlc3RzL3BhY2thZ2luZy9wa2dFamJUZXN0L2NsaWVudC9BcHBDbGllbnQuamF2YQppbmRleCBmYmIyMWIzLi5lNzA5YmI3IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS90ZXN0cy9wYWNrYWdpbmcvcGtnRWpiVGVzdC9jbGllbnQvQXBwQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdGVzdHMvcGFja2FnaW5nL3BrZ0VqYlRlc3QvY2xpZW50L0FwcENsaWVudC5qYXZhCkBAIC0yOSw3ICsyOSw3IEBACiAKIHB1YmxpYyBjbGFzcyBBcHBDbGllbnQgewogCi0gICAgQEVKQihuYW1lPSJlamIvVGVzdCIpIAorICAgIEBFSkIobmFtZT0iZWpiL1Rlc3QiKQogICAgIHByaXZhdGUgc3RhdGljIFRlc3Qgc2I7CiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RTdWl0ZUlEOwogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0dXMgPQpAQCAtMzcsNTMgKzM3LDUzIEBACiAKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImFyZ3MgLT4iKyBhcmdzKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImFyZ3MwIC0+IisgYXJnc1swXSk7Ci0JdGVzdFN1aXRlSUQgPSBhcmdzWzBdOwkKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImFyZ3MgLT4iKyBhcmdzKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImFyZ3MwIC0+IisgYXJnc1swXSk7CisgICAgdGVzdFN1aXRlSUQgPSBhcmdzWzBdOwogICAgICAgICBBcHBDbGllbnQgdGVzdCA9IG5ldyBBcHBDbGllbnQoKTsKLQlzdGF0dXMuYWRkRGVzY3JpcHRpb24oIlRlc3RpbmcgIEpQQSBwYWNrYWdpbmcgc2NlbmFyaW91cy4uIit0ZXN0U3VpdGVJRCk7Ci0JdGVzdC5ydW5UZXN0KCk7Ci0Jc3RhdHVzLnByaW50U3VtbWFyeSh0ZXN0U3VpdGVJRCk7CisgICAgc3RhdHVzLmFkZERlc2NyaXB0aW9uKCJUZXN0aW5nICBKUEEgcGFja2FnaW5nIHNjZW5hcmlvdXMuLiIrdGVzdFN1aXRlSUQpOworICAgIHRlc3QucnVuVGVzdCgpOworICAgIHN0YXR1cy5wcmludFN1bW1hcnkodGVzdFN1aXRlSUQpOwogICAgIH0KIAogCiAgICAgcHVibGljIHZvaWQgcnVuVGVzdCgpIHsKIAotCQorCiAgICAgICAgIC8vIFBlcnNpc3QgYWxsIGVudGl0aWVzCi0JU3RyaW5nIHRlc3RJbnNlcnQgPSBzYi50ZXN0SW5zZXJ0KCk7CisgICAgU3RyaW5nIHRlc3RJbnNlcnQgPSBzYi50ZXN0SW5zZXJ0KCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW5zZXJ0aW5nIEN1c3RvbWVyIGFuZCBPcmRlcnMuLi4gIiArIHRlc3RJbnNlcnQpOwotCWlmKCJPSyIuZXF1YWxzKHRlc3RJbnNlcnQpKSB7Ci0JCXN0YXR1cy5hZGRTdGF0dXModGVzdFN1aXRlSUQgKyAiLUluc2VydEN1c3RvbWVyIiwgc3RhdHVzLlBBU1MpOwotCX0gZWxzZSB7Ci0JCXN0YXR1cy5hZGRTdGF0dXModGVzdFN1aXRlSUQgKyAiLUluc2VydEN1c3RvbWVyIiwgc3RhdHVzLkZBSUwpOworICAgIGlmKCJPSyIuZXF1YWxzKHRlc3RJbnNlcnQpKSB7CisgICAgICAgIHN0YXR1cy5hZGRTdGF0dXModGVzdFN1aXRlSUQgKyAiLUluc2VydEN1c3RvbWVyIiwgc3RhdHVzLlBBU1MpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXR1cy5hZGRTdGF0dXModGVzdFN1aXRlSUQgKyAiLUluc2VydEN1c3RvbWVyIiwgc3RhdHVzLkZBSUwpOwogICAgICAgICB9CiAKLQlTdHJpbmcgdmVySW5zZXJ0ID0gc2IudmVyaWZ5SW5zZXJ0KCk7CisgICAgU3RyaW5nIHZlckluc2VydCA9IHNiLnZlcmlmeUluc2VydCgpOwogICAgICAgICAvLyBUZXN0IHF1ZXJ5IGFuZCBuYXZpZ2F0aW9uCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVmVyaWZ5aW5nIHRoYXQgYWxsIGFyZSBpbnNlcnRlZC4uLiAiICsgdmVySW5zZXJ0KTsKLQlpZigiT0siLmVxdWFscyh2ZXJJbnNlcnQpKSB7CisgICAgaWYoIk9LIi5lcXVhbHModmVySW5zZXJ0KSkgewogICAgICAgICAgICAgICAgIHN0YXR1cy5hZGRTdGF0dXModGVzdFN1aXRlSUQgKyAiLVZlcmlmeUN1c3RvbWVySW5zZXJ0Iiwgc3RhdHVzLlBBU1MpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHN0YXR1cy5hZGRTdGF0dXModGVzdFN1aXRlSUQgKyAiLVZlcmlmeUN1c3RvbWVySW5zZXJ0Iiwgc3RhdHVzLkZBSUwpOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gR2V0IGEgZGV0YWNoZWQgaW5zdGFuY2UgCisgICAgICAgIC8vIEdldCBhIGRldGFjaGVkIGluc3RhbmNlCiAgICAgICAgIFN0cmluZyBjID0gIkpvZSBTbWl0aCI7Ci0JU3RyaW5nIHRlc3REZWxldGUgPSBzYi50ZXN0RGVsZXRlKGMpOworICAgIFN0cmluZyB0ZXN0RGVsZXRlID0gc2IudGVzdERlbGV0ZShjKTsKIAogICAgICAgICAvLyBSZW1vdmUgYWxsIGVudGl0aWVzCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVtb3ZpbmcgYWxsLi4uICIgKyB0ZXN0RGVsZXRlKTsKLQlpZigiT0siLmVxdWFscyh0ZXN0RGVsZXRlKSkgeworICAgIGlmKCJPSyIuZXF1YWxzKHRlc3REZWxldGUpKSB7CiAgICAgICAgICAgICAgICAgc3RhdHVzLmFkZFN0YXR1cyh0ZXN0U3VpdGVJRCArICItRGVsZXRlQ3VzdG9tZXIiLCBzdGF0dXMuUEFTUyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgc3RhdHVzLmFkZFN0YXR1cyh0ZXN0U3VpdGVJRCArICItRGVsZXRlQ3VzdG9tZXIiLCBzdGF0dXMuRkFJTCk7CiAgICAgICAgIH0KIAotCVN0cmluZyB2ZXJEZWxldGUgPSBzYi52ZXJpZnlEZWxldGUoKTsKKyAgICBTdHJpbmcgdmVyRGVsZXRlID0gc2IudmVyaWZ5RGVsZXRlKCk7CiAgICAgICAgIC8vIFF1ZXJ5IHRoZSByZXN1bHRzCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVmVyaWZ5aW5nIHRoYXQgYWxsIGFyZSByZW1vdmVkLi4uICIgKyB2ZXJEZWxldGUpOwotCWlmKCJPSyIuZXF1YWxzKHZlckRlbGV0ZSkpIHsKKyAgICBpZigiT0siLmVxdWFscyh2ZXJEZWxldGUpKSB7CiAgICAgICAgICAgICAgICAgc3RhdHVzLmFkZFN0YXR1cyh0ZXN0U3VpdGVJRCArICItVmVyaWZ5RGVsZXRlQ3VzdG9tZXIiLCBzdGF0dXMuUEFTUyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgc3RhdHVzLmFkZFN0YXR1cyh0ZXN0U3VpdGVJRCArICItVmVyaWZ5RGVsZXRlQ3VzdG9tZXIiLCBzdGF0dXMuRkFJTCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS90ZXN0cy9wYWNrYWdpbmcvcGtnRWpiVGVzdC9lamIvVGVzdEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3Rlc3RzL3BhY2thZ2luZy9wa2dFamJUZXN0L2VqYi9UZXN0QmVhbi5qYXZhCmluZGV4IDBmMmUzNTUuLjIyOGU2MmIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3Rlc3RzL3BhY2thZ2luZy9wa2dFamJUZXN0L2VqYi9UZXN0QmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3Rlc3RzL3BhY2thZ2luZy9wa2dFamJUZXN0L2VqYi9UZXN0QmVhbi5qYXZhCkBAIC01MiwxMCArNTIsMTAgQEAKICAgICAgICAgb3JkZXIyLnNldElkKDIwMCk7CiAgICAgICAgIG9yZGVyMi5zZXRBZGRyZXNzKCI1NjcgMXN0IFN0LiBSYW5kb20gQ2l0eSwgVVNBIik7CiAKLSAgICAgICAgLy8gQXNzb2NpYXRlIG9yZGVycyB3aXRoIHRoZSBjdXN0b21lci4gVGhlIGFzc29jaWF0aW9uIAotICAgICAgICAvLyBtdXN0IGJlIHNldCBvbiBib3RoIHNpZGVzIG9mIHRoZSByZWxhdGlvbnNoaXA6IG9uIHRoZSAKLSAgICAgICAgLy8gY3VzdG9tZXIgc2lkZSBmb3IgdGhlIG9yZGVycyB0byBiZSBwZXJzaXN0ZWQgd2hlbiAKLSAgICAgICAgLy8gdHJhbnNhY3Rpb24gY29tbWl0cywgYW5kIG9uIHRoZSBvcmRlciBzaWRlIGJlY2F1c2UgaXQgCisgICAgICAgIC8vIEFzc29jaWF0ZSBvcmRlcnMgd2l0aCB0aGUgY3VzdG9tZXIuIFRoZSBhc3NvY2lhdGlvbgorICAgICAgICAvLyBtdXN0IGJlIHNldCBvbiBib3RoIHNpZGVzIG9mIHRoZSByZWxhdGlvbnNoaXA6IG9uIHRoZQorICAgICAgICAvLyBjdXN0b21lciBzaWRlIGZvciB0aGUgb3JkZXJzIHRvIGJlIHBlcnNpc3RlZCB3aGVuCisgICAgICAgIC8vIHRyYW5zYWN0aW9uIGNvbW1pdHMsIGFuZCBvbiB0aGUgb3JkZXIgc2lkZSBiZWNhdXNlIGl0CiAgICAgICAgIC8vIGlzIHRoZSBvd25pbmcgc2lkZS4KICAgICAgICAgY3VzdG9tZXIwLmdldE9yZGVycygpLmFkZChvcmRlcjEpOwogICAgICAgICBvcmRlcjEuc2V0Q3VzdG9tZXIoY3VzdG9tZXIwKTsKQEAgLTY1LDE0ICs2NSwxNCBAQAogCiAgICAgICAgIHJldHVybiAiT0siOwogICAgIH0KLSAgICAgICAgCisKICAgICBwdWJsaWMgU3RyaW5nIHZlcmlmeUluc2VydCgpIHsKIAogICAgICAgICBDdXN0b21lciBjID0gZmluZEN1c3RvbWVyKCJKb2UgU21pdGgiKTsKIAogICAgICAgICBDb2xsZWN0aW9uPE9yZGVyPiBvcmRlcnMgPSBjLmdldE9yZGVycygpOwogICAgICAgICBpZiAob3JkZXJzID09IG51bGwgfHwgb3JkZXJzLnNpemUoKSAhPSAyKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVW5leHBlY3RlZCBudW1iZXIgb2Ygb3JkZXJzOiAiIAorICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlVuZXhwZWN0ZWQgbnVtYmVyIG9mIG9yZGVyczogIgogICAgICAgICAgICAgICAgICAgICArICgob3JkZXJzID09IG51bGwpPyAibnVsbCIgOiAiIiArIG9yZGVycy5zaXplKCkpKTsKICAgICAgICAgfQogCkBAIC0xMTMsMTAgKzExMywxMCBAQAogICAgIH0KIAogICAgIHB1YmxpYyBDdXN0b21lciBmaW5kQ3VzdG9tZXIoU3RyaW5nIG5hbWUpIHsKLQlRdWVyeSBxID0gZW0uY3JlYXRlUXVlcnkoInNlbGVjdCBjIGZyb20gQ3VzdG9tZXIgYyB3aGVyZSBjLm5hbWUgPSA6bmFtZSIpOworICAgIFF1ZXJ5IHEgPSBlbS5jcmVhdGVRdWVyeSgic2VsZWN0IGMgZnJvbSBDdXN0b21lciBjIHdoZXJlIGMubmFtZSA9IDpuYW1lIik7CiAgICAgICAgIHEuc2V0UGFyYW1ldGVyKCJuYW1lIiwgbmFtZSk7CiAgICAgICAgIEN1c3RvbWVyIGMgPSAoQ3VzdG9tZXIpcS5nZXRTaW5nbGVSZXN1bHQoKTsKLQlyZXR1cm4gYzsKKyAgICByZXR1cm4gYzsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3Rlc3RzL3BhY2thZ2luZy9wa2dXYXJUZXN0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS90ZXN0cy9wYWNrYWdpbmcvcGtnV2FyVGVzdC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDA4Mzk5MWIuLmIyODUxZWUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3Rlc3RzL3BhY2thZ2luZy9wa2dXYXJUZXN0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdGVzdHMvcGFja2FnaW5nL3BrZ1dhclRlc3QvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItY21wIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1wa2dXYXJUZXN0Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1wa2dXYXJUZXN0Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJwZXJzaXN0ZW5jZS54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3BlcnNpc3RlbmNlLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS90ZXN0cy9wYWNrYWdpbmcvcGtnV2FyVGVzdC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS90ZXN0cy9wYWNrYWdpbmcvcGtnV2FyVGVzdC9idWlsZC54bWwKaW5kZXggNWVjMmI0OC4uM2Y3NjVkYSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdGVzdHMvcGFja2FnaW5nL3BrZ1dhclRlc3QvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3Rlc3RzL3BhY2thZ2luZy9wa2dXYXJUZXN0L2J1aWxkLnhtbApAQCAtNTYsNyArNTYsNyBAQAogCiA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImluaXQtY29tbW9uLGNsZWFuIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iJHtiYXNlZGlyfS8uLi8uLi8uLi91dGlsIi8+CisgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9IiR7YmFzZWRpcn0vLi4vLi4vLi4vdXRpbCIvPgogICAgIDwvYW50Y2FsbD4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNyYy9lbnRpdHkiLz4KQEAgLTY0LDcgKzY0LDcgQEAKICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNyYy93ZWIiLz4KICAgICA8L2FudGNhbGw+Ci08L3RhcmdldD4gCis8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iaW5pdC1jb21tb24sY29tcGlsZSI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtcHUtd2FyIi8+CkBAIC03MiwxMCArNzIsMTAgQEAKICAgICAgICAgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0VXRpbC5qYXZhIi8+Ci0gICAgPGphdmFjIHNyY2Rpcj0ic3JjL3Rlc3QiIAotCWRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgotCWNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCi0gICAgICAgIAkgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgorICAgIDxqYXZhYyBzcmNkaXI9InNyYy90ZXN0IgorICAgIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgorICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCisgICAgICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC04NCw3ICs4NCw3IEBACiAKIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0idGVzdC5XZWJUZXN0IiBmb3JrPSJ0cnVlIj4KLQkgIDxhcmcgdmFsdWU9IiR7dGVzdHN1aXRlLmlkfSIvPgorICAgICAgPGFyZyB2YWx1ZT0iJHt0ZXN0c3VpdGUuaWR9Ii8+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLnBvcnR9Ii8+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtjb250ZXh0cm9vdH0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3Rlc3RzL3BhY2thZ2luZy9wa2dXYXJUZXN0L3NyYy90ZXN0L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3Rlc3RzL3BhY2thZ2luZy9wa2dXYXJUZXN0L3NyYy90ZXN0L1dlYlRlc3QuamF2YQppbmRleCA0NWM4MzcyLi5kNzZhOTQ3IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS90ZXN0cy9wYWNrYWdpbmcvcGtnV2FyVGVzdC9zcmMvdGVzdC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdGVzdHMvcGFja2FnaW5nL3BrZ1dhclRlc3Qvc3JjL3Rlc3QvV2ViVGVzdC5qYXZhCkBAIC00Myw3ICs0Myw3IEBACiAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJVc2FnZTogamF2YSBXZWJUZXN0IDxUZXN0U3VpdGVJRD4gPGhvc3Q+IDxwb3J0PiA8Y29udGV4dFJvb3Q+IDx1cmxQYXR0ZXJuPiAiICk7CiAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gCisKICAgICAgICAgdGVzdFN1aXRlSUQgPSBhcmdzWzBdOwogICAgICAgICBob3N0ID0gYXJnc1sxXTsKICAgICAgICAgcG9ydCA9IGFyZ3NbMl07CkBAIC01MSwyNCArNTEsMjQgQEAKICAgICAgICAgdXJsUGF0dGVybiA9IGFyZ3NbNF07CiAgICAgICAgIFRFU1RfTkFNRSA9IHRlc3RTdWl0ZUlEOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CiAgICAgICAgIHdlYlRlc3QuZG9UZXN0KCk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgCi0gICAgICAgIHRyeSB7IAotICAgICAgICAgICAgV2ViVGVzdFV0aWwgd3R1ID0gbmV3IFdlYlRlc3RVdGlsICggaG9zdCwgcG9ydCwgY29udGV4dFJvb3QsIHVybFBhdHRlcm4sIHRlc3RTdWl0ZUlELCBzdGF0KTsgCi0JICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlBlcnNpc3RlbmNlIFBhY2thZ2UgVGVzdCAiKTsKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFdlYlRlc3RVdGlsIHd0dSA9IG5ldyBXZWJUZXN0VXRpbCAoIGhvc3QsIHBvcnQsIGNvbnRleHRSb290LCB1cmxQYXR0ZXJuLCB0ZXN0U3VpdGVJRCwgc3RhdCk7CisgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlBlcnNpc3RlbmNlIFBhY2thZ2UgVGVzdCAiKTsKICAgICAgICAgICAgIHd0dS50ZXN0KCJ0ZXN0SW5zZXJ0Iik7CiAgICAgICAgICAgICB3dHUudGVzdCgidmVyaWZ5SW5zZXJ0Iik7CiAgICAgICAgICAgICB3dHUudGVzdCgidGVzdERlbGV0ZSIpOwogICAgICAgICAgICAgd3R1LnRlc3QoInZlcmlmeURlbGV0ZSIpOwotCSAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOworICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3Rlc3RzL3BhY2thZ2luZy9wa2dXYXJUZXN0L3NyYy93ZWIvSnBhU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdGVzdHMvcGFja2FnaW5nL3BrZ1dhclRlc3Qvc3JjL3dlYi9KcGFTZXJ2bGV0LmphdmEKaW5kZXggZGNmYmJhMC4uNjM5ZjIwYyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdGVzdHMvcGFja2FnaW5nL3BrZ1dhclRlc3Qvc3JjL3dlYi9KcGFTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdGVzdHMvcGFja2FnaW5nL3BrZ1dhclRlc3Qvc3JjL3dlYi9KcGFTZXJ2bGV0LmphdmEKQEAgLTM5LDcgKzM5LDcgQEAKICAgICBwcml2YXRlIEVudGl0eU1hbmFnZXJGYWN0b3J5IGVtZjsKICAgICBwcml2YXRlIEVudGl0eU1hbmFnZXIgZW07CiAgICAgcHJpdmF0ZSBAUmVzb3VyY2UgVXNlclRyYW5zYWN0aW9uIHV0eDsKLSAgICAKKwogCiAgICAgcHJpdmF0ZSBmaW5hbCBpbnQgY3VzdG9tZXJJZCA9IDE7CiAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgY3VzdG9tZXJOYW1lID0gIkpvZSBTbWl0aCI7CkBAIC01MCwzMSArNTAsMzEgQEAKIAogCiAgICAgcHVibGljIGJvb2xlYW4gcHJvY2Vzc1BhcmFtcyhIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCkgewotICAgICAgdHJ5IHsJCi0JaWYgKHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJjYXNlIikgIT0gbnVsbCkgewotCSAgIHRjID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoImNhc2UiKTsKLQl9IAotCXJldHVybiB0cnVlOworICAgICAgdHJ5IHsKKyAgICBpZiAocmVxdWVzdC5nZXRQYXJhbWV0ZXIoImNhc2UiKSAhPSBudWxsKSB7CisgICAgICAgdGMgPSByZXF1ZXN0LmdldFBhcmFtZXRlcigiY2FzZSIpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKICAgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKLQlTeXN0ZW0uZXJyLnByaW50bG4oIkV4Y2VwdGlvbiB3aGVuIHByb2Nlc3NpbmcgdGhlIHJlcXVlc3QgcGFyYW1zIik7Ci0JZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JcmV0dXJuIGZhbHNlOworICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRXhjZXB0aW9uIHdoZW4gcHJvY2Vzc2luZyB0aGUgcmVxdWVzdCBwYXJhbXMiKTsKKyAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KIAotICAgIH0JCisgICAgfQogCiAgICAgcHVibGljIEVudGl0eU1hbmFnZXIgZ2V0RW50aXR5TWFuYWdlcigpCiAgICAgewotCXJldHVybiAgZW1mLmNyZWF0ZUVudGl0eU1hbmFnZXIoKTsKKyAgICByZXR1cm4gIGVtZi5jcmVhdGVFbnRpdHlNYW5hZ2VyKCk7CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdEluc2VydCgpIHsKICAgICAgICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKIAotCXRyeSB7CisgICAgdHJ5IHsKICAgICAgICAgdXR4LmJlZ2luKCk7CiAgICAgICAgIC8vb3V0LnByaW50bG4oImNyZWF0ZUVNICBFbnRpdHlNYW5hZ2VyPSIgKyBlbSk7Ci0JZW0gPSBnZXRFbnRpdHlNYW5hZ2VyKCk7CisgICAgZW0gPSBnZXRFbnRpdHlNYW5hZ2VyKCk7CiAgICAgICAgIC8vIENyZWF0ZSBuZXcgY3VzdG9tZXIKICAgICAgICAgQ3VzdG9tZXIgY3VzdG9tZXIwID0gbmV3IEN1c3RvbWVyKCk7CiAgICAgICAgIGN1c3RvbWVyMC5zZXRJZChjdXN0b21lcklkKTsKQEAgLTEwMiwzMSArMTAyLDMxIEBACiAKICAgICAgICAgY3VzdG9tZXIwLmdldE9yZGVycygpLmFkZChvcmRlcjIpOwogICAgICAgICBvcmRlcjIuc2V0Q3VzdG9tZXIoY3VzdG9tZXIwKTsKLQl1dHguY29tbWl0KCk7CisgICAgdXR4LmNvbW1pdCgpOwogICAgICAgICByZXN1bHQgPSB0cnVlOwogICAgICB9Y2F0Y2goRXhjZXB0aW9uIGV4KXsKICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICB9IGZpbmFsbHkgewotCWlmIChlbSAhPSBudWxsKSB7Ci0JICAgZW0uY2xvc2UoKTsKLQl9Ci0gICAgICB9CQorICAgIGlmIChlbSAhPSBudWxsKSB7CisgICAgICAgZW0uY2xvc2UoKTsKKyAgICB9CisgICAgICB9CiAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdERlbGV0ZSgpIHsKICAgICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0gICAgICB0cnkgeyAgCisgICAgICB0cnkgewogICAgICAgICB1dHguYmVnaW4oKTsKLQllbSA9IGdldEVudGl0eU1hbmFnZXIoKTsKKyAgICBlbSA9IGdldEVudGl0eU1hbmFnZXIoKTsKICAgICAgICAgQ3VzdG9tZXIgYyA9IGZpbmRDdXN0b21lcihjdXN0b21lck5hbWUpOwogICAgICAgICBDdXN0b21lciBjMCA9IGVtLm1lcmdlKGMpOwotICAgICAgICBlbS5yZW1vdmUoYzApOyAKKyAgICAgICAgZW0ucmVtb3ZlKGMwKTsKICAgICAgICAgdXR4LmNvbW1pdCgpOwogICAgICAgICByZXN1bHQgPSB0cnVlOwogICAgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpewotCWV4LnByaW50U3RhY2tUcmFjZSgpOworICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgaWYgKGVtICE9IG51bGwpIHsKICAgICAgICAgICAgZW0uY2xvc2UoKTsKQEAgLTEzNCwxMyArMTM0LDEzIEBACiAgICAgICB9CiAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KLSAgIAorCiAgICAgIHB1YmxpYyBib29sZWFuIHZlcmlmeUluc2VydCgpIHsKICAgICAgICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKIAotCXRyeSB7CisgICAgdHJ5IHsKICAgICAgICAgZW0gPSBnZXRFbnRpdHlNYW5hZ2VyKCk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJDdXN0b21lciBuYW1lIGluIHZlcmlmeUluc2VydDoiK2N1c3RvbWVyTmFtZSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJDdXN0b21lciBuYW1lIGluIHZlcmlmeUluc2VydDoiK2N1c3RvbWVyTmFtZSk7CiAgICAgICAgIEN1c3RvbWVyIGMgPSBmaW5kQ3VzdG9tZXIoY3VzdG9tZXJOYW1lKTsKIAogICAgICAgICBDb2xsZWN0aW9uPE9yZGVyPiBvcmRlcnMgPSBjLmdldE9yZGVycygpOwpAQCAtMTUwLDkgKzE1MCw5IEBACiAgICAgICAgIH0KICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKICAgICAgICAgfSBmaW5hbGx5IHsKLQlpZiAoZW0gIT0gbnVsbCkgeworICAgIGlmIChlbSAhPSBudWxsKSB7CiAgICAgICAgICAgIGVtLmNsb3NlKCk7Ci0JICAgfQorICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTE2NSwxNCArMTY1LDE0IEBACiAgICAgICBRdWVyeSBxID0gZW0uY3JlYXRlUXVlcnkoInNlbGVjdCBjIGZyb20gQ3VzdG9tZXIgYyIpOwogICAgICAgTGlzdCByZXN1bHRzID0gcS5nZXRSZXN1bHRMaXN0KCk7CiAgICAgICBpZiAocmVzdWx0cyA9PSBudWxsIHx8IHJlc3VsdHMuc2l6ZSgpICE9IDApIHsKLQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVW5leHBlY3RlZCBudW1iZXIgb2YgY3VzdG9tZXJzIGFmdGVyIGRlbGV0ZSIpOworICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJVbmV4cGVjdGVkIG51bWJlciBvZiBjdXN0b21lcnMgYWZ0ZXIgZGVsZXRlIik7CiAgICAgICB9CiAKICAgICAgIHEgPSBlbS5jcmVhdGVRdWVyeSgic2VsZWN0IG8gZnJvbSBPcmRlciBvIik7CiAgICAgICByZXN1bHRzID0gcS5nZXRSZXN1bHRMaXN0KCk7CiAKICAgICAgIGlmIChyZXN1bHRzID09IG51bGwgfHwgcmVzdWx0cy5zaXplKCkgIT0gMCkgewotCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJVbmV4cGVjdGVkIG51bWJlciBvZiBvcmRlcnMgYWZ0ZXIgZGVsZXRlIik7CisgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlVuZXhwZWN0ZWQgbnVtYmVyIG9mIG9yZGVycyBhZnRlciBkZWxldGUiKTsKICAgICAgIH0KICAgICAgIHJlc3VsdCA9IHRydWU7CiAgICAgIH0gZmluYWxseSB7CkBAIC0xODksNSArMTg5LDUgQEAKICAgICAgIEN1c3RvbWVyIGMgPSAoQ3VzdG9tZXIpcS5nZXRTaW5nbGVSZXN1bHQoKTsKICAgICAgIHJldHVybiBjOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdGVzdHMvcGFja2FnaW5nL3BrZ1dhclRlc3QxL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS90ZXN0cy9wYWNrYWdpbmcvcGtnV2FyVGVzdDEvYnVpbGQucHJvcGVydGllcwppbmRleCBjYTI0MjRlLi4wZDgyMDc4IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS90ZXN0cy9wYWNrYWdpbmcvcGtnV2FyVGVzdDEvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS90ZXN0cy9wYWNrYWdpbmcvcGtnV2FyVGVzdDEvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItY21wIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1wa2dXYXJUZXN0MSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tcGtnV2FyVGVzdDEiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9InBlcnNpc3RlbmNlLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvcGVyc2lzdGVuY2UueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3Rlc3RzL3BhY2thZ2luZy9wa2dXYXJUZXN0MS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS90ZXN0cy9wYWNrYWdpbmcvcGtnV2FyVGVzdDEvYnVpbGQueG1sCmluZGV4IGYxMDgwNzAuLmZiODgwMTIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3Rlc3RzL3BhY2thZ2luZy9wa2dXYXJUZXN0MS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdGVzdHMvcGFja2FnaW5nL3BrZ1dhclRlc3QxL2J1aWxkLnhtbApAQCAtNjQsNyArNjQsNyBAQAogICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic3JjL3dlYiIvPgogICAgIDwvYW50Y2FsbD4KLTwvdGFyZ2V0PiAKKzwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9InBrZy1wdSIgZGVwZW5kcz0iaW5pdC1jb21tb24sY29tcGlsZSI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLXB1LWNvbW1vbiI+CkBAIC04MCwxMCArODAsMTAgQEAKICAgICAgICAgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0VXRpbC5qYXZhIi8+Ci0gICAgPGphdmFjIHNyY2Rpcj0ic3JjL3Rlc3QiIAorICAgIDxqYXZhYyBzcmNkaXI9InNyYy90ZXN0IgogICAgICAgICBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKLQljbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgotICAgICAgICAJICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KKyAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgorICAgICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtOTIsMTEgKzkyLDExIEBACiAKIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0idGVzdC5XZWJUZXN0IiBmb3JrPSJ0cnVlIj4KLQkgIDxhcmcgdmFsdWU9IiR7dGVzdHN1aXRlLmlkfSIvPgorICAgICAgPGFyZyB2YWx1ZT0iJHt0ZXN0c3VpdGUuaWR9Ii8+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLnBvcnR9Ii8+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtjb250ZXh0cm9vdH0iLz4KLQkgIDxhcmcgdmFsdWU9IiR7dXJscGF0dGVybn0iLz4KKyAgICAgIDxhcmcgdmFsdWU9IiR7dXJscGF0dGVybn0iLz4KICAgICAgICAgICA8Y2xhc3NwYXRoPgogICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIi8+CiAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3Rlc3RzL3BhY2thZ2luZy9wa2dXYXJUZXN0MS9zcmMvdGVzdC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS90ZXN0cy9wYWNrYWdpbmcvcGtnV2FyVGVzdDEvc3JjL3Rlc3QvV2ViVGVzdC5qYXZhCmluZGV4IGVmMmE5ZDQuLmUwZmVmZGQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3Rlc3RzL3BhY2thZ2luZy9wa2dXYXJUZXN0MS9zcmMvdGVzdC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdGVzdHMvcGFja2FnaW5nL3BrZ1dhclRlc3QxL3NyYy90ZXN0L1dlYlRlc3QuamF2YQpAQCAtNDMsNyArNDMsNyBAQAogICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiVXNhZ2U6IGphdmEgV2ViVGVzdCA8VGVzdFN1aXRlSUQ+IDxob3N0PiA8cG9ydD4gPGNvbnRleHRSb290PiA8dXJsUGF0dGVybj4gIiApOwogICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotIAorCiAgICAgICAgIHRlc3RTdWl0ZUlEID0gYXJnc1swXTsKICAgICAgICAgaG9zdCA9IGFyZ3NbMV07CiAgICAgICAgIHBvcnQgPSBhcmdzWzJdOwpAQCAtNTEsMjQgKzUxLDI0IEBACiAgICAgICAgIHVybFBhdHRlcm4gPSBhcmdzWzRdOwogICAgICAgICBURVNUX05BTUUgPSB0ZXN0U3VpdGVJRDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwogICAgICAgICB3ZWJUZXN0LmRvVGVzdCgpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgIAotICAgICAgICB0cnkgeyAKLSAgICAgICAgICAgIFdlYlRlc3RVdGlsIHd0dSA9IG5ldyBXZWJUZXN0VXRpbCAoIGhvc3QsIHBvcnQsIGNvbnRleHRSb290LCB1cmxQYXR0ZXJuLCB0ZXN0U3VpdGVJRCwgc3RhdCk7IAotCSAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJQZXJzaXN0ZW5jZSBQYWtjYWdlIFRlc3QgIik7CisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBXZWJUZXN0VXRpbCB3dHUgPSBuZXcgV2ViVGVzdFV0aWwgKCBob3N0LCBwb3J0LCBjb250ZXh0Um9vdCwgdXJsUGF0dGVybiwgdGVzdFN1aXRlSUQsIHN0YXQpOworICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJQZXJzaXN0ZW5jZSBQYWtjYWdlIFRlc3QgIik7CiAgICAgICAgICAgICB3dHUudGVzdCgidGVzdEluc2VydCIpOwogICAgICAgICAgICAgd3R1LnRlc3QoInZlcmlmeUluc2VydCIpOwogICAgICAgICAgICAgd3R1LnRlc3QoInRlc3REZWxldGUiKTsKICAgICAgICAgICAgIHd0dS50ZXN0KCJ2ZXJpZnlEZWxldGUiKTsKLQkgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKKyAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS90ZXN0cy9wYWNrYWdpbmcvcGtnV2FyVGVzdDEvc3JjL3dlYi9KcGFTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS90ZXN0cy9wYWNrYWdpbmcvcGtnV2FyVGVzdDEvc3JjL3dlYi9KcGFTZXJ2bGV0LmphdmEKaW5kZXggNmZhMTRlZi4uNzM1OGU3YiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdGVzdHMvcGFja2FnaW5nL3BrZ1dhclRlc3QxL3NyYy93ZWIvSnBhU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3Rlc3RzL3BhY2thZ2luZy9wa2dXYXJUZXN0MS9zcmMvd2ViL0pwYVNlcnZsZXQuamF2YQpAQCAtMzksNyArMzksNyBAQAogICAgIHByaXZhdGUgRW50aXR5TWFuYWdlckZhY3RvcnkgZW1mOwogICAgIHByaXZhdGUgRW50aXR5TWFuYWdlciBlbTsKICAgICBwcml2YXRlIEBSZXNvdXJjZSBVc2VyVHJhbnNhY3Rpb24gdXR4OwotICAgIAorCiAKICAgICBwcml2YXRlIGZpbmFsIGludCBjdXN0b21lcklkID0gMTsKICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBjdXN0b21lck5hbWUgPSAiSm9lIFNtaXRoIjsKQEAgLTUxLDE2ICs1MSwxNiBAQAogCiAgICAgcHVibGljIEVudGl0eU1hbmFnZXIgZ2V0RW50aXR5TWFuYWdlcigpCiAgICAgewotCXJldHVybiAgZW1mLmNyZWF0ZUVudGl0eU1hbmFnZXIoKTsKKyAgICByZXR1cm4gIGVtZi5jcmVhdGVFbnRpdHlNYW5hZ2VyKCk7CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdEluc2VydCgpIHsKICAgICAgICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKIAotCXRyeSB7CisgICAgdHJ5IHsKICAgICAgICAgdXR4LmJlZ2luKCk7CiAgICAgICAgIC8vb3V0LnByaW50bG4oImNyZWF0ZUVNICBFbnRpdHlNYW5hZ2VyPSIgKyBlbSk7Ci0JZW0gPSBnZXRFbnRpdHlNYW5hZ2VyKCk7CisgICAgZW0gPSBnZXRFbnRpdHlNYW5hZ2VyKCk7CiAgICAgICAgIC8vIENyZWF0ZSBuZXcgY3VzdG9tZXIKICAgICAgICAgQ3VzdG9tZXIgY3VzdG9tZXIwID0gbmV3IEN1c3RvbWVyKCk7CiAgICAgICAgIGN1c3RvbWVyMC5zZXRJZChjdXN0b21lcklkKTsKQEAgLTg4LDMxICs4OCwzMSBAQAogCiAgICAgICAgIGN1c3RvbWVyMC5nZXRPcmRlcnMoKS5hZGQob3JkZXIyKTsKICAgICAgICAgb3JkZXIyLnNldEN1c3RvbWVyKGN1c3RvbWVyMCk7Ci0JdXR4LmNvbW1pdCgpOworICAgIHV0eC5jb21taXQoKTsKICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKICAgICAgfWNhdGNoKEV4Y2VwdGlvbiBleCl7CiAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgfSBmaW5hbGx5IHsKLQlpZiAoZW0gIT0gbnVsbCkgewotCSAgIGVtLmNsb3NlKCk7Ci0JfQotICAgICAgfQkKKyAgICBpZiAoZW0gIT0gbnVsbCkgeworICAgICAgIGVtLmNsb3NlKCk7CisgICAgfQorICAgICAgfQogICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKIAogICAgIHB1YmxpYyBib29sZWFuIHRlc3REZWxldGUoKSB7CiAgICAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotICAgICAgdHJ5IHsgIAorICAgICAgdHJ5IHsKICAgICAgICAgdXR4LmJlZ2luKCk7Ci0JZW0gPSBnZXRFbnRpdHlNYW5hZ2VyKCk7CisgICAgZW0gPSBnZXRFbnRpdHlNYW5hZ2VyKCk7CiAgICAgICAgIEN1c3RvbWVyIGMgPSBmaW5kQ3VzdG9tZXIoY3VzdG9tZXJOYW1lKTsKICAgICAgICAgQ3VzdG9tZXIgYzAgPSBlbS5tZXJnZShjKTsKLSAgICAgICAgZW0ucmVtb3ZlKGMwKTsgCisgICAgICAgIGVtLnJlbW92ZShjMCk7CiAgICAgICAgIHV0eC5jb21taXQoKTsKICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KXsKLQlleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgIGlmIChlbSAhPSBudWxsKSB7CiAgICAgICAgICAgIGVtLmNsb3NlKCk7CkBAIC0xMjAsMTMgKzEyMCwxMyBAQAogICAgICAgfQogICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Ci0gICAKKwogICAgICBwdWJsaWMgYm9vbGVhbiB2ZXJpZnlJbnNlcnQoKSB7CiAgICAgICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7CiAKLQl0cnkgeworICAgIHRyeSB7CiAgICAgICAgIGVtID0gZ2V0RW50aXR5TWFuYWdlcigpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiQ3VzdG9tZXIgbmFtZSBpbiB2ZXJpZnlJbnNlcnQ6IitjdXN0b21lck5hbWUpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3VzdG9tZXIgbmFtZSBpbiB2ZXJpZnlJbnNlcnQ6IitjdXN0b21lck5hbWUpOwogICAgICAgICBDdXN0b21lciBjID0gZmluZEN1c3RvbWVyKGN1c3RvbWVyTmFtZSk7CiAKICAgICAgICAgQ29sbGVjdGlvbjxPcmRlcj4gb3JkZXJzID0gYy5nZXRPcmRlcnMoKTsKQEAgLTEzNiw5ICsxMzYsOSBAQAogICAgICAgICB9CiAgICAgICAgIHJlc3VsdCA9IHRydWU7CiAgICAgICAgIH0gZmluYWxseSB7Ci0JaWYgKGVtICE9IG51bGwpIHsKKyAgICBpZiAoZW0gIT0gbnVsbCkgewogICAgICAgICAgICBlbS5jbG9zZSgpOwotCSAgIH0KKyAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC0xNTEsMTQgKzE1MSwxNCBAQAogICAgICAgUXVlcnkgcSA9IGVtLmNyZWF0ZVF1ZXJ5KCJzZWxlY3QgYyBmcm9tIEN1c3RvbWVyIGMiKTsKICAgICAgIExpc3QgcmVzdWx0cyA9IHEuZ2V0UmVzdWx0TGlzdCgpOwogICAgICAgaWYgKHJlc3VsdHMgPT0gbnVsbCB8fCByZXN1bHRzLnNpemUoKSAhPSAwKSB7Ci0JdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlVuZXhwZWN0ZWQgbnVtYmVyIG9mIGN1c3RvbWVycyBhZnRlciBkZWxldGUiKTsKKyAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVW5leHBlY3RlZCBudW1iZXIgb2YgY3VzdG9tZXJzIGFmdGVyIGRlbGV0ZSIpOwogICAgICAgfQogCiAgICAgICBxID0gZW0uY3JlYXRlUXVlcnkoInNlbGVjdCBvIGZyb20gT3JkZXIgbyIpOwogICAgICAgcmVzdWx0cyA9IHEuZ2V0UmVzdWx0TGlzdCgpOwogCiAgICAgICBpZiAocmVzdWx0cyA9PSBudWxsIHx8IHJlc3VsdHMuc2l6ZSgpICE9IDApIHsKLQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVW5leHBlY3RlZCBudW1iZXIgb2Ygb3JkZXJzIGFmdGVyIGRlbGV0ZSIpOworICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJVbmV4cGVjdGVkIG51bWJlciBvZiBvcmRlcnMgYWZ0ZXIgZGVsZXRlIik7CiAgICAgICB9CiAgICAgICByZXN1bHQgPSB0cnVlOwogICAgICB9IGZpbmFsbHkgewpAQCAtMTc1LDUgKzE3NSw1IEBACiAgICAgICBDdXN0b21lciBjID0gKEN1c3RvbWVyKXEuZ2V0U2luZ2xlUmVzdWx0KCk7CiAgICAgICByZXR1cm4gYzsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3Rlc3RzL3BhY2thZ2luZy9yZXBvcnQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdGVzdHMvcGFja2FnaW5nL3JlcG9ydC54bWwKaW5kZXggNjVhMzJhZS4uMDk0ZTM2NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdGVzdHMvcGFja2FnaW5nL3JlcG9ydC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdGVzdHMvcGFja2FnaW5nL3JlcG9ydC54bWwKQEAgLTIzLDcgKzIzLDcgQEAKIDx0YXJnZXQgbmFtZT0icmVwb3J0Ij4KIDxlY2hvIG1lc3NhZ2U9IkNvbXBhcmluZyByZXN1bHRzIHdpdGggZXhwZWN0ZWQgcmVzdWx0cyIvPgogCi0gCisKICAgICA8eHNsdCBzdHlsZT0iJHtzdHlsZXNoZWV0fSIKICAgICAgICAgICAgIGluPSIke3htbGZpbGV9IiBvdXQ9IiR7aHRtbGZpbGV9IgogICAgICAgICAgICAgYmFzZWRpcj0iLiIgZGVzdGRpcj0iLiIgLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3V0aWwvU2VydmxldFV0aWwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3V0aWwvU2VydmxldFV0aWwuamF2YQppbmRleCAwZGNhYjE4Li5mZWJmNDg5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS91dGlsL1NlcnZsZXRVdGlsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdXRpbC9TZXJ2bGV0VXRpbC5qYXZhCkBAIC0zMCw4ICszMCw4IEBACiBpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuVHlwZTsKIAogLyoqIFNlcnZsZXRVdGlsLmphdmEKLSAgKiBUaGlzIHByb2dyYW0gaXMgZ2VuZXJpYyBzZXJ2bGV0IHdoaWNoIHByb2Nlc3MgdGhlIAotICAqIEhUVFAgcmVxdWVzdCBhbmQgaW52b2tlIHRoZSAKKyAgKiBUaGlzIHByb2dyYW0gaXMgZ2VuZXJpYyBzZXJ2bGV0IHdoaWNoIHByb2Nlc3MgdGhlCisgICogSFRUUCByZXF1ZXN0IGFuZCBpbnZva2UgdGhlCiAgICogcHJvcGVyIG1ldGhvZHMgYmFzZWQgb24gdGhlIHJlcXVlc3QgcGFyYW1ldGVycy4KICAgKgogICAqIEBhdXRob3IgICAgICBTYXJhZGEgS29tbWFsYXBhdGkKQEAgLTQyLDI3ICs0MiwyNyBAQAogCiAgICAgcHVibGljIFN0cmluZyB0YzsKIAotICAgIHByb3RlY3RlZCB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCAKLQkJCSBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKQorICAgIHByb3RlY3RlZCB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LAorICAgICAgICAgICAgIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCiAgICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIHByb2Nlc3NBY3Rpb24ocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KLSAgICAKLSAgICBwcm90ZWN0ZWQgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIAotCQkJICBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKQorCisgICAgcHJvdGVjdGVkIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LAorICAgICAgICAgICAgICBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKQogICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBwcm9jZXNzQWN0aW9uKHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBwcm9jZXNzUGFyYW1zKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0KSB7CiAgICAgICB0cnkgewogICAgICAgICBpZiAocmVxdWVzdC5nZXRQYXJhbWV0ZXIoImNhc2UiKSAhPSBudWxsKSB7CiAgICAgICAgICAgIHRjID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoImNhc2UiKTsKLQl9Ci0JcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiB0cnVlOwogICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCkgewogICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkV4Y2VwdGlvbiB3aGVuIHByb2Nlc3NpbmcgdGhlIHJlcXVlc3QgcGFyYW1zIik7Ci0JZXgucHJpbnRTdGFja1RyYWNlKCk7CisgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogCkBAIC03MCwxOCArNzAsMTggQEAKIAogCiAgICAgcHVibGljIHZvaWQgcHJvY2Vzc0FjdGlvbihIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwKLQkJCSAgICAgICBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSAKKyAgICAgICAgICAgICAgICAgICBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKQogICAgICAgdGhyb3dzIElPRXhjZXB0aW9uewotICAgIAorCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigicHJvY2Vzc2luZyB0ZXN0IGRyaXZlciByZXF1ZXN0IC4uLiAiKTsKLSAgICAgICAgCi0JcHJvY2Vzc1BhcmFtcyhyZXF1ZXN0KTsKKworICAgIHByb2Nlc3NQYXJhbXMocmVxdWVzdCk7CiAgICAgICAgIGJvb2xlYW4gc3RhdHVzID0gZmFsc2U7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidGM6Iit0Yyk7CiAKICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvcGxhaW4iKTsKICAgICAgICAgU2VydmxldE91dHB1dFN0cmVhbSBvdXQgPSByZXNwb25zZS5nZXRPdXRwdXRTdHJlYW0oKTsKLQlvdXQucHJpbnRsbigiVGVzdENhc2U6ICIrdGMpOyAgIAorICAgIG91dC5wcmludGxuKCJUZXN0Q2FzZTogIit0Yyk7CiAKICAgICAgICAgaWYgKHRjICE9IG51bGwpIHsKIApAQCAtOTUsMzQgKzk1LDM0IEBACiAgICAgICAgICAgICAgICAgICAgaWYgKCAhbW5hbWUuZXF1YWxzKHRjLnRyaW0oKSApICkgewogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICB9Ci0gCisKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkludm9raW5nIDogIiArIG1uYW1lICk7CiAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICBtLnNldEFjY2Vzc2libGUoIHRydWUpOwogICAgICAgICAgICAgICAgICAgIE9iamVjdCBvID0gbS5pbnZva2UoIHQgKTsKICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJldHVybmVkID0+ICIgKyAoQm9vbGVhbilvICk7Ci0JCSAgIHN0YXR1cyA9IG5ldyBCb29sZWFuKChCb29sZWFuKW8pLmJvb2xlYW5WYWx1ZSgpOyAKKyAgICAgICAgICAgc3RhdHVzID0gbmV3IEJvb2xlYW4oKEJvb2xlYW4pbykuYm9vbGVhblZhbHVlKCk7CiAgICAgICAgICAgICAgICAgICAgLy9IYW5kbGUgYW55IG1ldGhvZHMgdGhyb3duIGJ5IG1ldGhvZCB0byBiZSBpbnZva2VkCiAgICAgICAgICAgICAgICAgfSBjYXRjaCAoIEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24geCApIHsKICAgICAgICAgICAgICAgICAgICBUaHJvd2FibGUgY2F1c2UgPSB4LmdldENhdXNlKCk7Ci0gCisKICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLmZvcm1hdCgiaW52b2NhdGlvbiBvZiAlcyBmYWlsZWQ6ICVzJW4iLCBtbmFtZSwgY2F1c2UuZ2V0TWVzc2FnZSgpICk7CiAgICAgICAgICAgICB9IGNhdGNoICggSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiB4ICkgewogICAgICAgICAgICAgICAgeC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIH0KLSAgCisKICAgICAgICAgICAgfQotCSAgIH0gY2F0Y2ggKCBFeGNlcHRpb24gZXggKSB7Ci0JICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgfSBjYXRjaCAoIEV4Y2VwdGlvbiBleCApIHsKKyAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIH0KIAotCSAgaWYgKHN0YXR1cykgewotCSAgICBvdXQucHJpbnRsbih0YysiOnBhc3MiKTsKLQkgIH0gZWxzZSB7Ci0JICAgIG91dC5wcmludGxuKHRjKyI6ZmFpbCIpOwotCSAgfQorICAgICAgaWYgKHN0YXR1cykgeworICAgICAgICBvdXQucHJpbnRsbih0YysiOnBhc3MiKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIG91dC5wcmludGxuKHRjKyI6ZmFpbCIpOworICAgICAgfQogCiAgICAgICB9CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS91dGlsL1dlYlRlc3RVdGlsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9wZXJzaXN0ZW5jZS91dGlsL1dlYlRlc3RVdGlsLmphdmEKaW5kZXggMTFjYTY1MC4uODMxYzRjZiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvcGVyc2lzdGVuY2UvdXRpbC9XZWJUZXN0VXRpbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3BlcnNpc3RlbmNlL3V0aWwvV2ViVGVzdFV0aWwuamF2YQpAQCAtMjMsNyArMjMsNyBAQAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuU2ltcGxlUmVwb3J0ZXJBZGFwdGVyOwogCiAvKiogV2ViVGVzdFV0aWwuamF2YQotICAqIFRoaXMgcHJvZ3JhbSBvcGVucyBIdHRwVVJMY29ubmVjdGlvbixzZW5kcyB0aGUgcmVxdWVzdCB0byB0aGUgCisgICogVGhpcyBwcm9ncmFtIG9wZW5zIEh0dHBVUkxjb25uZWN0aW9uLHNlbmRzIHRoZSByZXF1ZXN0IHRvIHRoZQogICAqIHNlcnZsZXQgLCAmIHJlY2VpdmVzIHRoZSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2bGV0LgogICAqIFVzaW5nIGNvbW1hbmRsaW5lIGFyZ3MgdGhlIHVzZXIgY2FuIHNwZWNpZnkgZm9yIFdlYlRlc3RVdGlsCiAgICogMS4gdGVzdCBzdWl0ZSBuYW1lCkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgICAgIHRoaXMudXJsUGF0dGVybiA9IHVybFBhdHRlcm47CiAgICAgICAgIHRoaXMuc3RhdCA9IHN0YXQ7CiAgICAgfQotICAgIAorCiAKICAgICBwdWJsaWMgdm9pZCB0ZXN0KCBTdHJpbmcgYykgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICB0aGlzLnRlc3QoIGMsICIiKTsKQEAgLTg0LDIxICs4NCwyMSBAQAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBjb25uLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgICAgICBCdWZmZXJlZFJlYWRlciBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKLQkgICAgU3RyaW5nIGxpbmUgPSBudWxsOwotCSAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7CisgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKKyAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oImxpbmU9IitsaW5lKTsKLQkgICAgICBpZiAobGluZS5jb250YWlucyhFWFBFQ1RFRF9SRVNQT05TRSkpIHsKLQkJc3RhdC5hZGRTdGF0dXMoVEVTVF9DQVNFLCBzdGF0LlBBU1MpOwotCQlicmVhazsKLQkgICAgICB9Ci0JICAgIH0KLQkgICAgCi0JICAgIGlmIChsaW5lID09IG51bGwpIHsKLQkgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuYWJsZSB0byBmaW5kICIgKyBFWFBFQ1RFRF9SRVNQT05TRSArCi0JCQkJICAiIGluIHRoZSByZXNwb25zZSIpOwotCSAgICB9Ci0JICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfQ0FTRSwgc3RhdC5GQUlMKTsKLSAgICAgICAgfSAgICAKKyAgICAgICAgICBpZiAobGluZS5jb250YWlucyhFWFBFQ1RFRF9SRVNQT05TRSkpIHsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9DQVNFLCBzdGF0LlBBU1MpOworICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAobGluZSA9PSBudWxsKSB7CisgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmFibGUgdG8gZmluZCAiICsgRVhQRUNURURfUkVTUE9OU0UgKworICAgICAgICAgICAgICAgICAgIiBpbiB0aGUgcmVzcG9uc2UiKTsKKyAgICAgICAgfQorICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX0NBU0UsIHN0YXQuRkFJTCk7CisgICAgICAgIH0KICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2FueW9uZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvYW55b25lL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNjExMTIwMy4uMmZkNzI5OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvYW55b25lL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvYW55b25lL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InNlY3VyaXR5LWFueW9uZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2FueW9uZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9hbnlvbmUvYnVpbGQueG1sCmluZGV4IGVhNGQ5NTMuLmE1ZjNiY2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2FueW9uZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvYW55b25lL2J1aWxkLnhtbApAQCAtODksNyArODksNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgotICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPiAKKyAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KIAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2UtZWpiamFyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vbm9ud2ViIi8+CkBAIC0xMDMsMzYgKzEwMywzNiBAQAogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1hcHBjbGllbnRqYXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9ub253ZWIiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuamFyIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuamFyIgogICAgICAgICAgICAgICAgIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICAgIHZhbHVlPSJjb20vc3VuLyoqL2NsaWVudC8qLmNsYXNzLGNvbS9zdW4vKiovZWpiL0hlbGxvLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAotICAgICAgICA8Y29weSBmaWxlPSIke2FwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4gCi0gICAgICAgIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+IAotICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciI+IAotICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgotICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KLSAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Iioud2FyIi8+Ci0gICAgICAgICAgICA8L2ZpbGVzZXQ+Ci0gICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ij4KLQkgICAgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIi8+Ci0JICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLSAgICAgICAgICAgIDwvZmlsZXNldD4KLSAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuQVBTX0hPTUV9IiBpbmNsdWRlcz0ibGliL3JlcG9ydGVyLmphciIvPgotICAgICAgICA8L2phcj4gICAKLQotICAgICAgICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIvPiAKKyAgICAgICAgPGNvcHkgZmlsZT0iJHthcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CisgICAgICAgIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIj4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IiouamFyIi8+CiAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLndhciIvPgogICAgICAgICAgICAgPC9maWxlc2V0PgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSI+Ci0JICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KKyAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIi8+CisgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KICAgICAgICAgICAgIDwvZmlsZXNldD4KLSAgICAgICAgPC9qYXI+ICAgCisgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LkFQU19IT01FfSIgaW5jbHVkZXM9ImxpYi9yZXBvcnRlci5qYXIiLz4KKyAgICAgICAgPC9qYXI+CisKKyAgICAgICAgPGNvcHkgZmlsZT0iJHtzdW4tYXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KKyAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiPgorICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgorICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KKyAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Iioud2FyIi8+CisgICAgICAgICAgICA8L2ZpbGVzZXQ+CisgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ij4KKyAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgorICAgICAgICAgICAgPC9maWxlc2V0PgorICAgICAgICA8L2phcj4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9hbnlvbmUvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvYW55b25lL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA5NDVhOGQyLi5mNjE0ZGFiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9hbnlvbmUvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2FueW9uZS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTUxLDcgKzUxLDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gdGVzdFN1aXRlICsgIiBlamI6IGhlbGxvIjsKICAgICAgICAgICAgIGhlbGxvLmhlbGxvKCJTdW4iKTsKLSAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LlBBU1MpOyAgCisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuRkFJTCk7CkBAIC03MSw3ICs3MSw3IEBACiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LkZBSUwpOwogICAgICAgICB9Ci0gCisKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoInNlY3VyaXR5LWFueW9uZSIpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvYXV0aENvbmYvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvYXV0aENvbmYvYnVpbGQueG1sCmluZGV4IDBlMTY4NmUuLjQ3NTc4MWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2F1dGhDb25mL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9hdXRoQ29uZi9idWlsZC54bWwKQEAgLTI5LDcgKzI5LDcgQEAKICAgICBjaGFuZ2VkIGF0IHN0YXJ0dXAuIElzc3VlOiAzMDMzLiBJZiBjaGFuZ2VkIHRvIHRlc3QgYW4KICAgICBlbmQgdG8gZW5kIHNjZW5hcmlvLCBwbGVhc2UgY2hhbmdlIHRoaXMgbWVzc2FnZS4gLS0+CiA8cHJvamVjdCBuYW1lPSJzZWN1cml0eS1hdXRoQ29uZiIgYmFzZWRpcj0iLiIgZGVmYXVsdD0idXNhZ2UiPgotICAKKwogICAmY29tbW9uU2V0dXA7CiAgICZjb21tb25CdWlsZDsKICAgJmNvbW1vblJ1bjsKQEAgLTQzLDE1ICs0MywxNSBAQAogICAgIDwhLS0gc3RvcCBzZXJ2ZXIgLS0+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJzdG9wRG9tYWluIi8+CiAgICAgPHNsZWVwIHNlY29uZHM9IjE1Ii8+Ci0gICAgCisKICAgICA8IS0tIGFkZCBhdXRoLmNvbmYgZmlsZSBhbmQgcHJvdmlkZXIgamFyIC0tPgogICAgIDxjb3B5IGZpbGU9ImNvbmZmaWxlL2F1dGguY29uZiIKICAgICAgICAgdG9kaXI9IiR7YWRtaW4uZG9tYWluLmRpcn0vJHthZG1pbi5kb21haW59L2NvbmZpZyIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtcHJvdmlkZXItamFyIi8+Ci0gICAgCisKICAgICA8IS0tIHN0YXJ0IHNlcnZlciAtLT4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InN0YXJ0RG9tYWluIi8+Ci0gICAgCisKICAgICA8IS0tIHF1aWNrIGRpZmYgb2YgYXV0aCBjb25mIGZpbGUgLS0+CiAgICAgPGxlbmd0aCBmaWxlPSJjb25mZmlsZS9hdXRoLmNvbmYiIHByb3BlcnR5PSJsZW5ndGgub3JpZ2luYWwiLz4KICAgICA8bGVuZ3RoIGZpbGU9IiR7YWRtaW4uZG9tYWluLmRpcn0vJHthZG1pbi5kb21haW59L2NvbmZpZy9hdXRoLmNvbmYiCkBAIC02OSw3ICs2OSw3IEBACiAgICAgICA8L2NvbmRpdGlvbj4KICAgICA8L2ZhaWw+CiAgICAgPGVjaG8gbWVzc2FnZT0iZmlsZXMgYXJlIG9mIHNhbWUgbGVuZ3RoLiBPSyIvPgotICAgIAorCiAgICAgPCEtLSBzdG9wIHNlcnZlciwgY2xlYW4gdXAsIGFuZCByZXN0YXJ0IC0tPgogICAgIDxhbnRjYWxsIHRhcmdldD0ic3RvcERvbWFpbiIvPgogICAgIDxzbGVlcCBzZWNvbmRzPSIxNSIvPgpAQCAtNzcsNyArNzcsNyBAQAogICAgIDxkZWxldGUgZmlsZT0iJHtwcm92aWRlci5qYXJ9Ii8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJzdGFydERvbWFpbiIvPgogICA8L3RhcmdldD4KLSAgCisKICAgPCEtLSBidWlsZCBhbmQgY29weSB0aGUgcHJvdmlkZXIgamFyIGZpbGUgdG8gR0YvbGliIC0tPgogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXByb3ZpZGVyLWphciIgZGVwZW5kcz0iY2xlYW4iPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgpAQCAtODUsMTAgKzg1LDEwIEBACiAgICAgPC9hbnRjYWxsPgogICAgIDxqYXIgZGVzdGZpbGU9IiR7cHJvdmlkZXIuamFyfSIgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgPC90YXJnZXQ+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICA8ZGVsZXRlIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+CiAgIDwvdGFyZ2V0PgotICAKKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvYXV0aENvbmYvcHJvdmlkZXIvY29tL3N1bi9zZWN1cml0eS9hdXRoL21lc3NhZ2UvY29uZmlnL1NlcnZsZXRBdXRoQ29uZmlnUHJvdmlkZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2F1dGhDb25mL3Byb3ZpZGVyL2NvbS9zdW4vc2VjdXJpdHkvYXV0aC9tZXNzYWdlL2NvbmZpZy9TZXJ2bGV0QXV0aENvbmZpZ1Byb3ZpZGVyLmphdmEKaW5kZXggMzNlYjIwZC4uMzIwMTRmYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvYXV0aENvbmYvcHJvdmlkZXIvY29tL3N1bi9zZWN1cml0eS9hdXRoL21lc3NhZ2UvY29uZmlnL1NlcnZsZXRBdXRoQ29uZmlnUHJvdmlkZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9hdXRoQ29uZi9wcm92aWRlci9jb20vc3VuL3NlY3VyaXR5L2F1dGgvbWVzc2FnZS9jb25maWcvU2VydmxldEF1dGhDb25maWdQcm92aWRlci5qYXZhCkBAIC0zMiwzMCArMzIsMzAgQEAKIAogLyoqCiAgKiBUaGlzIGludGVyZmFjZSBpcyBpbXBsZW1lbnRlZCBieSBvYmplY3RzIHRoYXQgY2FuIGJlIHVzZWQgdG8gb2J0YWluCi0gKiBhdXRoZW50aWNhdGlvbiBjb250ZXh0IGNvbmZpZ3VyYXRpb24gb2JqZWN0cywgdGhhdCBpcywgCisgKiBhdXRoZW50aWNhdGlvbiBjb250ZXh0IGNvbmZpZ3VyYXRpb24gb2JqZWN0cywgdGhhdCBpcywKICAqIDxjb2RlPkNsaWVudEF1dGhDb25maWc8L2NvZGU+IG9yIDxjb2RlPlNlcnZlckF1dGhDb25maWc8L2NvZGU+IG9iamVjdHMuCiAgKgotICogPHA+IEF1dGhlbnRpY2F0aW9uIGNvbnRleHQgY29uZmlndXJhdGlvbiBvYmplY3RzIHNlcnZlIGFzIHNvdXJjZXMgb2YgCisgKiA8cD4gQXV0aGVudGljYXRpb24gY29udGV4dCBjb25maWd1cmF0aW9uIG9iamVjdHMgc2VydmUgYXMgc291cmNlcyBvZgogICogdGhlIGF1dGhlbnRpY2F0aW9uIGNvbnRleHQgb2JqZWN0cywgdGhhdCBpcywgPGNvZGU+Q2xpZW50QXV0aENvbnRleHQ8L2NvZGU+IG9yCiAgKiA8Y29kZT5TZXJ2ZXJBdXRoQ29udGV4dDwvY29kZT4gb2JqZWN0cywgZm9yIGEgc3BlY2lmaWMgbWVzc2FnZSBsYXllcgogICogYW5kIG1lc3NhZ2luZyBjb250ZXh0LgotICogCi0gKiA8cD4gQXV0aGVudGljYXRpb24gY29udGV4dCBvYmplY3RzIGVuY2Fwc3VsYXRlIHRoZSBpbml0aWFsaXphdGlvbiwgCisgKgorICogPHA+IEF1dGhlbnRpY2F0aW9uIGNvbnRleHQgb2JqZWN0cyBlbmNhcHN1bGF0ZSB0aGUgaW5pdGlhbGl6YXRpb24sCiAgKiBjb25maWd1cmF0aW9uLCBhbmQgaW52b2NhdGlvbiBvZiBhdXRoZW50aWNhdGlvbiBtb2R1bGVzLCB0aGF0IGlzLAogICogPGNvZGU+Q2xpZW50QXV0aE1vZHVsZTwvY29kZT4gb3IgPGNvZGU+U2VydmVyQXV0aE1vZHVsZTwvY29kZT4gb2JqZWN0cywgZm9yCi0gKiBhIHNwZWNpZmljIG1lc3NhZ2UgZXhjaGFuZ2Ugd2l0aGluIGEgc3BlY2lmaWMgbWVzc2FnZSBsYXllciBhbmQgCisgKiBhIHNwZWNpZmljIG1lc3NhZ2UgZXhjaGFuZ2Ugd2l0aGluIGEgc3BlY2lmaWMgbWVzc2FnZSBsYXllciBhbmQKICAqIG1lc3NhZ2luZyBjb250ZXh0LgotICogCisgKgogICogPHA+IENhbGxlcnMgZG8gbm90IGRpcmVjdGx5IG9wZXJhdGUgb24gYXV0aGVudGljYXRpb24gbW9kdWxlcy4KICAqIEluc3RlYWQsIHRoZXkgcmVseSBvbiBhIENsaWVudEF1dGhDb250ZXh0IG9yIFNlcnZlckF1dGhDb250ZXh0CiAgKiB0byBtYW5hZ2UgdGhlIGludm9jYXRpb24gb2YgbW9kdWxlcy4gQSBjYWxsZXIgb2J0YWlucyBhbiBpbnN0YW5jZQogICogb2YgQ2xpZW50QXV0aENvbnRleHQgb3IgU2VydmVyQXV0aENvbnRleHQgYnkgY2FsbGluZyB0aGUgcmVzcGVjdGl2ZQogICogPGNvZGU+Z2V0QXV0aENvbnRleHQ8L2NvZGU+IG1ldGhvZCBvbiBhIDxjb2RlPkNsaWVudEF1dGhDb25maWc8L2NvZGU+Ci0gKiBvciA8Y29kZT5TZXJ2ZXJBdXRoQ29uZmlnPC9jb2RlPiBvYmplY3Qgb2J0YWluZWQgZnJvbSBhbiAKKyAqIG9yIDxjb2RlPlNlcnZlckF1dGhDb25maWc8L2NvZGU+IG9iamVjdCBvYnRhaW5lZCBmcm9tIGFuCiAgKiBBdXRoQ29uZmlnUHJvdmlkZXIuCiAgKgogICogPHA+IFRoZSBmb2xsb3dpbmcgcmVwcmVzZW50cyBhIHR5cGljYWwgc2VxdWVuY2Ugb2YgY2FsbHMgZm9yIG9idGFpbmluZwotICogYSBjbGllbnQgYXV0aGVudGljYXRpb24gY29udGV4dCBvYmplY3QsIGFuZCB0aGVuIHVzaW5nIGl0IHRvIHNlY3VyZSAKKyAqIGEgY2xpZW50IGF1dGhlbnRpY2F0aW9uIGNvbnRleHQgb2JqZWN0LCBhbmQgdGhlbiB1c2luZyBpdCB0byBzZWN1cmUKICAqIGEgcmVxdWVzdC4KICAqIDxvbD4KICAqIDxsaT5BdXRoQ29uZmlnUHJvdmlkZXIgcHJvdmlkZXI7CkBAIC03MiwxNSArNzIsMTUgQEAKICAqIHB1YmxpYyBBdXRoQ29uZmlnUHJvdmlkZXJJbXBsKE1hcCBwcm9wZXJ0aWVzLCBBdXRoQ29uZmlnRmFjdG9yeSBmYWN0b3J5KTsKICAqIDwvY29kZT4KICAqPC9wcmU+Ci0gKiB3aGVyZSB0aGUgcHJvcGVydGllcyBhcmd1bWVudCBtYXkgYmUgbnVsbCwgYW5kIHdoZXJlIGFsbCB2YWx1ZXMgYW5kIAorICogd2hlcmUgdGhlIHByb3BlcnRpZXMgYXJndW1lbnQgbWF5IGJlIG51bGwsIGFuZCB3aGVyZSBhbGwgdmFsdWVzIGFuZAogICoga2V5cyBvY2N1cnJpbmcgaW4gYSBub24tbnVsbCBwcm9wZXJ0aWVzIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBTdHJpbmcuCiAgKiBXaGVuIHRoZSBmYWN0b3J5IGFyZ3VtZW50IGlzIG5vdCBudWxsLCBpdCBpbmRpY2F0ZXMgdGhhdCB0aGUKICAqIHByb3ZpZGVyIGlzIHRvIHNlbGYtcmVnaXN0ZXIgYXQgdGhlIGZhY3RvcnkgYnkgY2FsbGluZyB0aGUgZm9sbG93aW5nCiAgKiBtZXRob2Qgb24gdGhlIGZhY3Rvcnk6CiAgKiA8cHJlPgogICogPGNvZGU+Ci0gKiBwdWJsaWMgU3RyaW5nIAotICogcmVnaXN0ZXJDb25maWdQcm92aWRlcihBdXRoQ29uZmlnUHJvdmlkZXIgcHJvdmlkZXIsIFN0cmluZyBsYXllciwgCisgKiBwdWJsaWMgU3RyaW5nCisgKiByZWdpc3RlckNvbmZpZ1Byb3ZpZGVyKEF1dGhDb25maWdQcm92aWRlciBwcm92aWRlciwgU3RyaW5nIGxheWVyLAogICogICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgYXBwQ29udGV4dCwgU3RyaW5nIGRlc2NyaXB0aW9uKTsKICAqIDwvY29kZT4KICAqIDwvcHJlPgpAQCAtOTIsNyArOTIsNyBAQAogICovCiBwdWJsaWMgY2xhc3MgU2VydmxldEF1dGhDb25maWdQcm92aWRlciBpbXBsZW1lbnRzIEF1dGhDb25maWdQcm92aWRlciB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBSZWVudHJhbnRSZWFkV3JpdGVMb2NrIHJ3TG9jayA9IAorICAgIHByaXZhdGUgc3RhdGljIFJlZW50cmFudFJlYWRXcml0ZUxvY2sgcndMb2NrID0KICAgICAgICAgbmV3IFJlZW50cmFudFJlYWRXcml0ZUxvY2soKTsKICAgICBwcml2YXRlIHN0YXRpYyBMb2NrIHJMb2NrID0gcndMb2NrLnJlYWRMb2NrKCk7OwogICAgIHByaXZhdGUgc3RhdGljIExvY2sgd0xvY2sgPSByd0xvY2sud3JpdGVMb2NrKCk7CkBAIC0xMDEsNyArMTAxLDcgQEAKICAgICBwcml2YXRlIHN0YXRpYyBIYXNoTWFwIGRlZmF1bHRBdXRoQ29uZmlnTWFwOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIEhUVFBfU0VSVkxFVF9MQVlFUiA9ICJIdHRwU2VydmxldCI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIE1BTkRBVE9SWV9LRVkgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgTUFOREFUT1JZX0tFWSA9CiAgICAgICAgICJqYWthcnRhLnNlY3VyaXR5LmF1dGgubWVzc2FnZS5NZXNzYWdlUG9saWN5LmlzTWFuZGF0b3J5IjsKIAogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBNQU5EQVRPUllfQ09OVEVYVF9JRCA9ICJtYW5kYXRvcnkiOwpAQCAtMTA5LDcgKzEwOSw3IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgQ09OVEVYVFNfS0VZID0gIkFwcENvbnRleHRJRHMiOwogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBNT0RVTEVfS0VZID0gIlNlcnZlckF1dGhNb2R1bGUiOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGRlZmF1bHRNb2R1bGUgPSBudWxsOwogICAgIHByaXZhdGUgc3RhdGljIE1hcCBkZWZhdWx0TW9kdWxlT3B0aW9ucyA9IG51bGw7CiAKQEAgLTEyMywxNDggKzEyMywxNDggQEAKICAgICBwdWJsaWMgU2VydmxldEF1dGhDb25maWdQcm92aWRlcgogICAgICAgICAoTWFwIHByb3BlcnRpZXMsIEF1dGhDb25maWdGYWN0b3J5IGZhY3RvcnkpIHRocm93cyBBdXRoRXhjZXB0aW9uIHsKIAotCWlmIChwcm9wZXJ0aWVzID09IG51bGwpIHsKLQkgICAgdGhyb3cgbmV3IEF1dGhFeGNlcHRpb24oInByb3BlcnRpZXMgcmVxdWlyZWQgZm9yIGNvbnN0cnVjdGlvbiIpOwotCX0KKyAgICBpZiAocHJvcGVydGllcyA9PSBudWxsKSB7CisgICAgICAgIHRocm93IG5ldyBBdXRoRXhjZXB0aW9uKCJwcm9wZXJ0aWVzIHJlcXVpcmVkIGZvciBjb25zdHJ1Y3Rpb24iKTsKKyAgICB9CiAKLQlTdHJpbmcgbW9kdWxlID0gKFN0cmluZykgcHJvcGVydGllcy5nZXQoTU9EVUxFX0tFWSk7Ci0JaWYgKG1vZHVsZSA9PSBudWxsKSB7Ci0JICAgIHRocm93IG5ldyBBdXRoRXhjZXB0aW9uKCJTZXJ2ZXJBdXRoTW9kdWxlIHByb3BlcnR5IGlzIHJlcXVpcmVkIik7Ci0JfQorICAgIFN0cmluZyBtb2R1bGUgPSAoU3RyaW5nKSBwcm9wZXJ0aWVzLmdldChNT0RVTEVfS0VZKTsKKyAgICBpZiAobW9kdWxlID09IG51bGwpIHsKKyAgICAgICAgdGhyb3cgbmV3IEF1dGhFeGNlcHRpb24oIlNlcnZlckF1dGhNb2R1bGUgcHJvcGVydHkgaXMgcmVxdWlyZWQiKTsKKyAgICB9CiAKLQlIYXNoTWFwIG9wdGlvbnMgPSBuZXcgSGFzaE1hcChwcm9wZXJ0aWVzKTsKLQlvcHRpb25zLnJlbW92ZShNT0RVTEVfS0VZKTsKKyAgICBIYXNoTWFwIG9wdGlvbnMgPSBuZXcgSGFzaE1hcChwcm9wZXJ0aWVzKTsKKyAgICBvcHRpb25zLnJlbW92ZShNT0RVTEVfS0VZKTsKIAotCVN0cmluZ1tdIGNvbnRleHRJRCA9IHBhcnNlU3RyaW5nVmFsdWUKLQkgICAgKChTdHJpbmcpIHByb3BlcnRpZXMuZ2V0KENPTlRFWFRTX0tFWSkpOwotCSAKLQlvcHRpb25zLnJlbW92ZShDT05URVhUU19LRVkpOworICAgIFN0cmluZ1tdIGNvbnRleHRJRCA9IHBhcnNlU3RyaW5nVmFsdWUKKyAgICAgICAgKChTdHJpbmcpIHByb3BlcnRpZXMuZ2V0KENPTlRFWFRTX0tFWSkpOwogCi0JU3lzdGVtLmVyci5wcmludGxuKCJjb25zdHJ1Y3RpbmcgU2VydmxldEF1dGhDb25maWdQcm92aWRlcjogIiArCi0JCQkgICBtb2R1bGUpOworICAgIG9wdGlvbnMucmVtb3ZlKENPTlRFWFRTX0tFWSk7CiAKLQlpZiAoY29udGV4dElEICE9IG51bGwpIHsKLQkJCi0JICAgIGZvciAoU3RyaW5nIGFwcENvbnRleHQgOiBjb250ZXh0SUQpIHsKKyAgICBTeXN0ZW0uZXJyLnByaW50bG4oImNvbnN0cnVjdGluZyBTZXJ2bGV0QXV0aENvbmZpZ1Byb3ZpZGVyOiAiICsKKyAgICAgICAgICAgICAgIG1vZHVsZSk7CiAKLQkJU3lzdGVtLmVyci5wcmludGxuKCJjb25zdHJ1Y3RpbmcgU2VydmxldFNlcnZlckF1dGhDb25maWc6ICIgKwotCQkJICAgYXBwQ29udGV4dCk7CisgICAgaWYgKGNvbnRleHRJRCAhPSBudWxsKSB7CiAKLQkJaWYgKGFwcENvbnRleHQgIT0gbnVsbCAmJiBhcHBDb250ZXh0Lmxlbmd0aCgpID4gMCkgeworICAgICAgICBmb3IgKFN0cmluZyBhcHBDb250ZXh0IDogY29udGV4dElEKSB7CiAKLQkJICAgIFNlcnZlckF1dGhDb25maWcgc0FDID0gbmV3IFNlcnZsZXRTZXJ2ZXJBdXRoQ29uZmlnCi0JCQkoYXBwQ29udGV4dCxtb2R1bGUsb3B0aW9ucyk7Ci0JCSAgICAKLQkJICAgIHRyeSB7Ci0JCQl3TG9jay5sb2NrKCk7Ci0JCQlhdXRoQ29uZmlnTWFwLnB1dChhcHBDb250ZXh0LHNBQyk7Ci0JCSAgICB9IGZpbmFsbHkgewotCQkJd0xvY2sudW5sb2NrKCk7Ci0JCSAgICB9CisgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiY29uc3RydWN0aW5nIFNlcnZsZXRTZXJ2ZXJBdXRoQ29uZmlnOiAiICsKKyAgICAgICAgICAgICAgIGFwcENvbnRleHQpOwogCi0JCSAgICBpZiAoZmFjdG9yeSAhPSBudWxsKSB7Ci0JCQlmYWN0b3J5LnJlZ2lzdGVyQ29uZmlnUHJvdmlkZXIKLQkJCSAgICAodGhpcyxIVFRQX1NFUlZMRVRfTEFZRVIsYXBwQ29udGV4dCxtb2R1bGUpOwotCQkgICAgfQotCQl9Ci0JICAgIH0KLQl9IGVsc2UgewotCSAgICAvLyByZWNvcmQgZGVmYXVsdHMgdG8gaGFuZGxlIHJlZ2lzdHJhdGlvbiBmb3IgYWxsIGFwcGNvbnRleHRzCi0JICAgIHRyeSB7Ci0JCXdMb2NrLmxvY2soKTsKLQkJZGVmYXVsdE1vZHVsZSA9IG1vZHVsZTsKLQkJZGVmYXVsdE1vZHVsZU9wdGlvbnMgPSBvcHRpb25zOwotCQlkZWZhdWx0QXV0aENvbmZpZ01hcCA9IG5ldyBIYXNoTWFwKCk7Ci0JICAgIH0gZmluYWxseSB7Ci0JCXdMb2NrLnVubG9jaygpOwotCSAgICB9Ci0JfQorICAgICAgICBpZiAoYXBwQ29udGV4dCAhPSBudWxsICYmIGFwcENvbnRleHQubGVuZ3RoKCkgPiAwKSB7CisKKyAgICAgICAgICAgIFNlcnZlckF1dGhDb25maWcgc0FDID0gbmV3IFNlcnZsZXRTZXJ2ZXJBdXRoQ29uZmlnCisgICAgICAgICAgICAoYXBwQ29udGV4dCxtb2R1bGUsb3B0aW9ucyk7CisKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICB3TG9jay5sb2NrKCk7CisgICAgICAgICAgICBhdXRoQ29uZmlnTWFwLnB1dChhcHBDb250ZXh0LHNBQyk7CisgICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgd0xvY2sudW5sb2NrKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChmYWN0b3J5ICE9IG51bGwpIHsKKyAgICAgICAgICAgIGZhY3RvcnkucmVnaXN0ZXJDb25maWdQcm92aWRlcgorICAgICAgICAgICAgICAgICh0aGlzLEhUVFBfU0VSVkxFVF9MQVlFUixhcHBDb250ZXh0LG1vZHVsZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIHJlY29yZCBkZWZhdWx0cyB0byBoYW5kbGUgcmVnaXN0cmF0aW9uIGZvciBhbGwgYXBwY29udGV4dHMKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgd0xvY2subG9jaygpOworICAgICAgICBkZWZhdWx0TW9kdWxlID0gbW9kdWxlOworICAgICAgICBkZWZhdWx0TW9kdWxlT3B0aW9ucyA9IG9wdGlvbnM7CisgICAgICAgIGRlZmF1bHRBdXRoQ29uZmlnTWFwID0gbmV3IEhhc2hNYXAoKTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgd0xvY2sudW5sb2NrKCk7CisgICAgICAgIH0KKyAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nW10gcGFyc2VTdHJpbmdWYWx1ZShTdHJpbmcgdmFsdWUpIHsKLQlTdHJpbmdbXSBydmFsdWUgPSBudWxsOwotCWlmICh2YWx1ZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAKLQkgICAgLy8gcmVtb3ZlZCBibGFuaworICAgIFN0cmluZ1tdIHJ2YWx1ZSA9IG51bGw7CisgICAgaWYgKHZhbHVlICE9IG51bGwpIHsKKworICAgICAgICAvLyByZW1vdmVkIGJsYW5rCiAgICAgICAgICAgICBTdHJpbmcgZGVsaW0gPSBuZXcgU3RyaW5nKCI6LDsiKTsKLQkgICAgU3RyaW5nVG9rZW5pemVyIHRva2VuaXplciA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodmFsdWUsZGVsaW0pOwotCSAgICBpbnQgY291bnQgPSB0b2tlbml6ZXIuY291bnRUb2tlbnMoKTsKLQkgICAgaWYgKGNvdW50ID4gMCkgewotCQlydmFsdWUgPSBuZXcgU3RyaW5nW2NvdW50XTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0JCSAgICBydmFsdWVbaV0gPSB0b2tlbml6ZXIubmV4dFRva2VuKCk7Ci0JCX0KLQkgICAgfQotCX0KLQlyZXR1cm4gcnZhbHVlOworICAgICAgICBTdHJpbmdUb2tlbml6ZXIgdG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcih2YWx1ZSxkZWxpbSk7CisgICAgICAgIGludCBjb3VudCA9IHRva2VuaXplci5jb3VudFRva2VucygpOworICAgICAgICBpZiAoY291bnQgPiAwKSB7CisgICAgICAgIHJ2YWx1ZSA9IG5ldyBTdHJpbmdbY291bnRdOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgICAgIHJ2YWx1ZVtpXSA9IHRva2VuaXplci5uZXh0VG9rZW4oKTsKKyAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBydmFsdWU7CiAgICAgfQogCiAgICAgcHVibGljIENsaWVudEF1dGhDb25maWcgZ2V0Q2xpZW50QXV0aENvbmZpZwotICAgIChTdHJpbmcgbGF5ZXIsIFN0cmluZyBhcHBDb250ZXh0LCBDYWxsYmFja0hhbmRsZXIgaGFuZGxlcikgCi0JdGhyb3dzIEF1dGhFeGNlcHRpb24gewotCSAgICB0aHJvdyBuZXcgQXV0aEV4Y2VwdGlvbigiTm90IGltcGxlbWVudGVkIik7CisgICAgKFN0cmluZyBsYXllciwgU3RyaW5nIGFwcENvbnRleHQsIENhbGxiYWNrSGFuZGxlciBoYW5kbGVyKQorICAgIHRocm93cyBBdXRoRXhjZXB0aW9uIHsKKyAgICAgICAgdGhyb3cgbmV3IEF1dGhFeGNlcHRpb24oIk5vdCBpbXBsZW1lbnRlZCIpOwogICAgIH0KIAotICAgIHB1YmxpYyBTZXJ2ZXJBdXRoQ29uZmlnIGdldFNlcnZlckF1dGhDb25maWcJCi0JKFN0cmluZyBsYXllciwgU3RyaW5nIGFwcENvbnRleHQsIENhbGxiYWNrSGFuZGxlciBoYW5kbGVyKSAKLQl0aHJvd3MgQXV0aEV4Y2VwdGlvbiB7CisgICAgcHVibGljIFNlcnZlckF1dGhDb25maWcgZ2V0U2VydmVyQXV0aENvbmZpZworICAgIChTdHJpbmcgbGF5ZXIsIFN0cmluZyBhcHBDb250ZXh0LCBDYWxsYmFja0hhbmRsZXIgaGFuZGxlcikKKyAgICB0aHJvd3MgQXV0aEV4Y2VwdGlvbiB7CiAKLQlpZiAoIUhUVFBfU0VSVkxFVF9MQVlFUi5lcXVhbHMobGF5ZXIpKSB7Ci0JICAgIHRocm93IG5ldyBBdXRoRXhjZXB0aW9uKCJMYXllciBOb3QgaW1wbGVtZW50ZWQiKTsKLQl9Ci0JCQotCWlmIChoYW5kbGVyID09IG51bGwpIHsKLQkgICAgdGhyb3cgbmV3IEF1dGhFeGNlcHRpb24oImRlZmF1bHQgaGFuZGxlciBOb3QgaW1wbGVtZW50ZWQiKTsKLQl9CisgICAgaWYgKCFIVFRQX1NFUlZMRVRfTEFZRVIuZXF1YWxzKGxheWVyKSkgeworICAgICAgICB0aHJvdyBuZXcgQXV0aEV4Y2VwdGlvbigiTGF5ZXIgTm90IGltcGxlbWVudGVkIik7CisgICAgfQogCi0JLy8gcmV1c2UgY29uZmlnIGZvciBhIGdpdmVuIGxheWVyIGFuZCBhcHBjb250ZXh0LCBoYW5kbGVyIHdpbGwgYmUgCi0JLy8gc2V0IG9uIGZpcnN0IGFjY2Vzcy4KKyAgICBpZiAoaGFuZGxlciA9PSBudWxsKSB7CisgICAgICAgIHRocm93IG5ldyBBdXRoRXhjZXB0aW9uKCJkZWZhdWx0IGhhbmRsZXIgTm90IGltcGxlbWVudGVkIik7CisgICAgfQogCi0JU2VydmxldFNlcnZlckF1dGhDb25maWcgc1NBQyA9IG51bGw7CisgICAgLy8gcmV1c2UgY29uZmlnIGZvciBhIGdpdmVuIGxheWVyIGFuZCBhcHBjb250ZXh0LCBoYW5kbGVyIHdpbGwgYmUKKyAgICAvLyBzZXQgb24gZmlyc3QgYWNjZXNzLgogCi0JdHJ5IHsKLQkgICAgckxvY2subG9jaygpOwotCSAgICBzU0FDID0gKFNlcnZsZXRTZXJ2ZXJBdXRoQ29uZmlnKSAKLQkJYXV0aENvbmZpZ01hcC5nZXQoYXBwQ29udGV4dCk7Ci0JICAgIGlmIChzU0FDID09IG51bGwpIHsKLQkJaWYgKGRlZmF1bHRBdXRoQ29uZmlnTWFwICE9IG51bGwpIHsKLQkJICAgIHNTQUMgPSAoU2VydmxldFNlcnZlckF1dGhDb25maWcpIAotCQkJZGVmYXVsdEF1dGhDb25maWdNYXAuZ2V0KGFwcENvbnRleHQpOwotCQl9Ci0JICAgIH0KLQkgICAgaWYgKHNTQUMgIT0gbnVsbCkgewotCQlzU0FDLnNldEhhbmRsZXJJZk5vdFNldChoYW5kbGVyKTsKLQkgICAgfQotCX0gZmluYWxseSB7Ci0JICAgIHJMb2NrLnVubG9jaygpOwotCX0KKyAgICBTZXJ2bGV0U2VydmVyQXV0aENvbmZpZyBzU0FDID0gbnVsbDsKIAotCWlmIChzU0FDID09IG51bGwpIHsKLQkgICAgdHJ5IHsKLQkJd0xvY2subG9jaygpOwotCQlpZiAoZGVmYXVsdEF1dGhDb25maWdNYXAgIT0gbnVsbCkgewotCQkgICAgc1NBQyA9IChTZXJ2bGV0U2VydmVyQXV0aENvbmZpZykgCi0JCQlkZWZhdWx0QXV0aENvbmZpZ01hcC5nZXQoYXBwQ29udGV4dCk7Ci0JCX0KLQkJaWYgKHNTQUMgPT0gbnVsbCkgewotCQkgICAgc1NBQyA9IG5ldyBTZXJ2bGV0U2VydmVyQXV0aENvbmZpZwotCQkJKGFwcENvbnRleHQsZGVmYXVsdE1vZHVsZSxkZWZhdWx0TW9kdWxlT3B0aW9ucyk7Ci0JCSAgICBkZWZhdWx0QXV0aENvbmZpZ01hcC5wdXQoYXBwQ29udGV4dCxzU0FDKTsKLQkJfQotCSAgICB9IGZpbmFsbHkgewotCQlyTG9jay51bmxvY2soKTsKLQkgICAgfQotCSAgICBpZiAoc1NBQyAhPSBudWxsKSB7Ci0JCXNTQUMuc2V0SGFuZGxlcklmTm90U2V0KGhhbmRsZXIpOwotCSAgICB9Ci0JfQorICAgIHRyeSB7CisgICAgICAgIHJMb2NrLmxvY2soKTsKKyAgICAgICAgc1NBQyA9IChTZXJ2bGV0U2VydmVyQXV0aENvbmZpZykKKyAgICAgICAgYXV0aENvbmZpZ01hcC5nZXQoYXBwQ29udGV4dCk7CisgICAgICAgIGlmIChzU0FDID09IG51bGwpIHsKKyAgICAgICAgaWYgKGRlZmF1bHRBdXRoQ29uZmlnTWFwICE9IG51bGwpIHsKKyAgICAgICAgICAgIHNTQUMgPSAoU2VydmxldFNlcnZlckF1dGhDb25maWcpCisgICAgICAgICAgICBkZWZhdWx0QXV0aENvbmZpZ01hcC5nZXQoYXBwQ29udGV4dCk7CisgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoc1NBQyAhPSBudWxsKSB7CisgICAgICAgIHNTQUMuc2V0SGFuZGxlcklmTm90U2V0KGhhbmRsZXIpOworICAgICAgICB9CisgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgckxvY2sudW5sb2NrKCk7CisgICAgfQogCi0JaWYgKHNTQUMgPT0gbnVsbCkgewotCSAgICB0aHJvdyBuZXcgQXV0aEV4Y2VwdGlvbigiY29udGV4dDogIiArIGFwcENvbnRleHQgKyAKLQkJCQkgICAgIiBub3QgY29uZmlndXJlZCIpOwotCX0KKyAgICBpZiAoc1NBQyA9PSBudWxsKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgIHdMb2NrLmxvY2soKTsKKyAgICAgICAgaWYgKGRlZmF1bHRBdXRoQ29uZmlnTWFwICE9IG51bGwpIHsKKyAgICAgICAgICAgIHNTQUMgPSAoU2VydmxldFNlcnZlckF1dGhDb25maWcpCisgICAgICAgICAgICBkZWZhdWx0QXV0aENvbmZpZ01hcC5nZXQoYXBwQ29udGV4dCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNTQUMgPT0gbnVsbCkgeworICAgICAgICAgICAgc1NBQyA9IG5ldyBTZXJ2bGV0U2VydmVyQXV0aENvbmZpZworICAgICAgICAgICAgKGFwcENvbnRleHQsZGVmYXVsdE1vZHVsZSxkZWZhdWx0TW9kdWxlT3B0aW9ucyk7CisgICAgICAgICAgICBkZWZhdWx0QXV0aENvbmZpZ01hcC5wdXQoYXBwQ29udGV4dCxzU0FDKTsKKyAgICAgICAgfQorICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICByTG9jay51bmxvY2soKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc1NBQyAhPSBudWxsKSB7CisgICAgICAgIHNTQUMuc2V0SGFuZGxlcklmTm90U2V0KGhhbmRsZXIpOworICAgICAgICB9CisgICAgfQogCi0JcmV0dXJuIHNTQUM7CisgICAgaWYgKHNTQUMgPT0gbnVsbCkgeworICAgICAgICB0aHJvdyBuZXcgQXV0aEV4Y2VwdGlvbigiY29udGV4dDogIiArIGFwcENvbnRleHQgKworICAgICAgICAgICAgICAgICAgICAiIG5vdCBjb25maWd1cmVkIik7CisgICAgfQorCisgICAgcmV0dXJuIHNTQUM7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgcmVmcmVzaCgpIHsKQEAgLTI3MiwyMTQgKzI3MiwyMTQgQEAKIAogICAgIHN0YXRpYyBjbGFzcyBTZXJ2bGV0U2VydmVyQXV0aENvbmZpZyBpbXBsZW1lbnRzIFNlcnZlckF1dGhDb25maWcgewogCi0Jc3RhdGljIGZpbmFsIENsYXNzW10gUEFSQU1TID0geyB9OwotCXN0YXRpYyBmaW5hbCBPYmplY3RbXSBBUkdTID0geyB9OworICAgIHN0YXRpYyBmaW5hbCBDbGFzc1tdIFBBUkFNUyA9IHsgfTsKKyAgICBzdGF0aWMgZmluYWwgT2JqZWN0W10gQVJHUyA9IHsgfTsKIAotCUxvY2sgckxvY2tDb25maWc7Ci0JTG9jayB3TG9ja0NvbmZpZzsKKyAgICBMb2NrIHJMb2NrQ29uZmlnOworICAgIExvY2sgd0xvY2tDb25maWc7CiAKLQlTdHJpbmcgYXBwQ29udGV4dDsKLQlDYWxsYmFja0hhbmRsZXIgY2JoOworICAgIFN0cmluZyBhcHBDb250ZXh0OworICAgIENhbGxiYWNrSGFuZGxlciBjYmg7CiAKLQlTZXJ2ZXJBdXRoTW9kdWxlIG1vZHVsZXNbXSA9IG51bGw7CisgICAgU2VydmVyQXV0aE1vZHVsZSBtb2R1bGVzW10gPSBudWxsOwogCi0JU2VydmVyQXV0aENvbnRleHQgbWFuZGF0b3J5Q29udGV4dDsKLQlTZXJ2ZXJBdXRoQ29udGV4dCBvcHRpb25hbENvbnRleHQ7CisgICAgU2VydmVyQXV0aENvbnRleHQgbWFuZGF0b3J5Q29udGV4dDsKKyAgICBTZXJ2ZXJBdXRoQ29udGV4dCBvcHRpb25hbENvbnRleHQ7CiAKLQlNYXAgb3B0aW9uczsKKyAgICBNYXAgb3B0aW9uczsKIAotCXN0YXRpYyBNZXNzYWdlUG9saWN5IG1hbmRhdG9yeVBvbGljeSA9IG5ldyBNZXNzYWdlUG9saWN5Ci0JICggbmV3IE1lc3NhZ2VQb2xpY3kuVGFyZ2V0UG9saWN5W10gCi0JICAgeyBuZXcgTWVzc2FnZVBvbGljeS5UYXJnZXRQb2xpY3kKLQkJICggKE1lc3NhZ2VQb2xpY3kuVGFyZ2V0W10pIG51bGwsIAotCQkgICBuZXcgU2VydmxldFByb3RlY3Rpb25Qb2xpY3koKSkgfSAsIHRydWUpOworICAgIHN0YXRpYyBNZXNzYWdlUG9saWN5IG1hbmRhdG9yeVBvbGljeSA9IG5ldyBNZXNzYWdlUG9saWN5CisgICAgICggbmV3IE1lc3NhZ2VQb2xpY3kuVGFyZ2V0UG9saWN5W10KKyAgICAgICB7IG5ldyBNZXNzYWdlUG9saWN5LlRhcmdldFBvbGljeQorICAgICAgICAgKCAoTWVzc2FnZVBvbGljeS5UYXJnZXRbXSkgbnVsbCwKKyAgICAgICAgICAgbmV3IFNlcnZsZXRQcm90ZWN0aW9uUG9saWN5KCkpIH0gLCB0cnVlKTsKIAotCXN0YXRpYyBNZXNzYWdlUG9saWN5IG9wdGlvbmFsUG9saWN5ID0gbmV3IE1lc3NhZ2VQb2xpY3kKLQkgKCBuZXcgTWVzc2FnZVBvbGljeS5UYXJnZXRQb2xpY3lbXSAKLQkgICB7IG5ldyBNZXNzYWdlUG9saWN5LlRhcmdldFBvbGljeQotCQkgKChNZXNzYWdlUG9saWN5LlRhcmdldFtdKSBudWxsLCAKLQkJICBuZXcgU2VydmxldFByb3RlY3Rpb25Qb2xpY3koKSkgfSwgZmFsc2UpOwotIAotCVNlcnZsZXRTZXJ2ZXJBdXRoQ29uZmlnIChTdHJpbmcgYXBwQ29udGV4dCwKLQkgICAgZmluYWwgU3RyaW5nIGNsYXp6LCBNYXAgb3B0aW9ucykgdGhyb3dzIEF1dGhFeGNlcHRpb24geworICAgIHN0YXRpYyBNZXNzYWdlUG9saWN5IG9wdGlvbmFsUG9saWN5ID0gbmV3IE1lc3NhZ2VQb2xpY3kKKyAgICAgKCBuZXcgTWVzc2FnZVBvbGljeS5UYXJnZXRQb2xpY3lbXQorICAgICAgIHsgbmV3IE1lc3NhZ2VQb2xpY3kuVGFyZ2V0UG9saWN5CisgICAgICAgICAoKE1lc3NhZ2VQb2xpY3kuVGFyZ2V0W10pIG51bGwsCisgICAgICAgICAgbmV3IFNlcnZsZXRQcm90ZWN0aW9uUG9saWN5KCkpIH0sIGZhbHNlKTsKIAotCSAgICBSZWVudHJhbnRSZWFkV3JpdGVMb2NrIHJ3TG9jayA9IG5ldyBSZWVudHJhbnRSZWFkV3JpdGVMb2NrKCk7Ci0JICAgIHJMb2NrQ29uZmlnID0gcndMb2NrLnJlYWRMb2NrKCk7OwotCSAgICB3TG9ja0NvbmZpZyA9IHJ3TG9jay53cml0ZUxvY2soKTsKKyAgICBTZXJ2bGV0U2VydmVyQXV0aENvbmZpZyAoU3RyaW5nIGFwcENvbnRleHQsCisgICAgICAgIGZpbmFsIFN0cmluZyBjbGF6eiwgTWFwIG9wdGlvbnMpIHRocm93cyBBdXRoRXhjZXB0aW9uIHsKIAotCSAgICB0aGlzLmFwcENvbnRleHQgPSBhcHBDb250ZXh0OwotCSAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zOworICAgICAgICBSZWVudHJhbnRSZWFkV3JpdGVMb2NrIHJ3TG9jayA9IG5ldyBSZWVudHJhbnRSZWFkV3JpdGVMb2NrKCk7CisgICAgICAgIHJMb2NrQ29uZmlnID0gcndMb2NrLnJlYWRMb2NrKCk7OworICAgICAgICB3TG9ja0NvbmZpZyA9IHJ3TG9jay53cml0ZUxvY2soKTsKIAotCSAgICB0cnkgeworICAgICAgICB0aGlzLmFwcENvbnRleHQgPSBhcHBDb250ZXh0OworICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zOwogCi0JCW1vZHVsZXMgID0gKFNlcnZlckF1dGhNb2R1bGVbXSkgQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQKKyAgICAgICAgdHJ5IHsKIAotCQkobmV3IGphdmEuc2VjdXJpdHkuUHJpdmlsZWdlZEV4Y2VwdGlvbkFjdGlvbigpIHsKLQkJICAgIAotCQkgICAgcHVibGljIE9iamVjdCBydW4oKSB0aHJvd3MgCisgICAgICAgIG1vZHVsZXMgID0gKFNlcnZlckF1dGhNb2R1bGVbXSkgQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQKIAotCQkJamF2YS5sYW5nLkNsYXNzTm90Rm91bmRFeGNlcHRpb24sCi0JCQlqYXZhLmxhbmcuTm9TdWNoTWV0aG9kRXhjZXB0aW9uLAotCQkJamF2YS5sYW5nLkluc3RhbnRpYXRpb25FeGNlcHRpb24sCi0JCQlqYXZhLmxhbmcuSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiwKLQkJCWphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25UYXJnZXRFeGNlcHRpb24geworICAgICAgICAobmV3IGphdmEuc2VjdXJpdHkuUHJpdmlsZWdlZEV4Y2VwdGlvbkFjdGlvbigpIHsKIAotCQkJQ2xhc3NMb2FkZXIgbG9hZGVyID0gCi0JCQkgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKTsKKyAgICAgICAgICAgIHB1YmxpYyBPYmplY3QgcnVuKCkgdGhyb3dzCiAKLQkJCUNsYXNzIGMgPSBDbGFzcy5mb3JOYW1lKGNsYXp6LCB0cnVlLCBsb2FkZXIpOworICAgICAgICAgICAgamF2YS5sYW5nLkNsYXNzTm90Rm91bmRFeGNlcHRpb24sCisgICAgICAgICAgICBqYXZhLmxhbmcuTm9TdWNoTWV0aG9kRXhjZXB0aW9uLAorICAgICAgICAgICAgamF2YS5sYW5nLkluc3RhbnRpYXRpb25FeGNlcHRpb24sCisgICAgICAgICAgICBqYXZhLmxhbmcuSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiwKKyAgICAgICAgICAgIGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gewogCi0JCQlqYXZhLmxhbmcucmVmbGVjdC5Db25zdHJ1Y3RvciBjb25zdHJ1Y3RvciA9Ci0JCQkgICAgYy5nZXRDb25zdHJ1Y3RvcihQQVJBTVMpOworICAgICAgICAgICAgQ2xhc3NMb2FkZXIgbG9hZGVyID0KKyAgICAgICAgICAgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldENvbnRleHRDbGFzc0xvYWRlcigpOwogCi0JCQlyZXR1cm4gbmV3IFNlcnZlckF1dGhNb2R1bGVbXSAKLQkJCSAgICB7IChTZXJ2ZXJBdXRoTW9kdWxlKSBjb25zdHJ1Y3Rvci5uZXdJbnN0YW5jZShBUkdTKSwKLQkJCSAgICAgIChTZXJ2ZXJBdXRoTW9kdWxlKSBjb25zdHJ1Y3Rvci5uZXdJbnN0YW5jZShBUkdTKQotCQkJICAgIH07Ci0JCSAgICB9Ci0JCSAgICAKLQkJfSk7Ci0JCQotCSAgICB9IGNhdGNoIChqYXZhLnNlY3VyaXR5LlByaXZpbGVnZWRBY3Rpb25FeGNlcHRpb24gcGFlKSB7Ci0JCUF1dGhFeGNlcHRpb24gYWUgPSBuZXcgQXV0aEV4Y2VwdGlvbigpOwotCQlhZS5pbml0Q2F1c2UocGFlLmdldENhdXNlKCkpOwotCQl0aHJvdyBhZTsKLQkgICAgfSAKKyAgICAgICAgICAgIENsYXNzIGMgPSBDbGFzcy5mb3JOYW1lKGNsYXp6LCB0cnVlLCBsb2FkZXIpOwogCi0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY3JlYXRlZCBTZXJ2bGV0U2VydmVyQXV0aENvbmZpZzogIiArIAotCQkJICAgICAgIGFwcENvbnRleHQgKyAiICIgKyBjbGF6eik7CisgICAgICAgICAgICBqYXZhLmxhbmcucmVmbGVjdC5Db25zdHJ1Y3RvciBjb25zdHJ1Y3RvciA9CisgICAgICAgICAgICAgICAgYy5nZXRDb25zdHJ1Y3RvcihQQVJBTVMpOwogCi0JICAgIG1hbmRhdG9yeUNvbnRleHQgPSBudWxsOwotCSAgICBvcHRpb25hbENvbnRleHQgPSBudWxsOwotCX0KKyAgICAgICAgICAgIHJldHVybiBuZXcgU2VydmVyQXV0aE1vZHVsZVtdCisgICAgICAgICAgICAgICAgeyAoU2VydmVyQXV0aE1vZHVsZSkgY29uc3RydWN0b3IubmV3SW5zdGFuY2UoQVJHUyksCisgICAgICAgICAgICAgICAgICAoU2VydmVyQXV0aE1vZHVsZSkgY29uc3RydWN0b3IubmV3SW5zdGFuY2UoQVJHUykKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfQogCi0JcHVibGljIFNlcnZlckF1dGhDb250ZXh0IAotCWdldEF1dGhDb250ZXh0KFN0cmluZyBhdXRoQ29udGV4dElELCBTdWJqZWN0IHNlcnZpY2VTdWJqZWN0LCAKLQkJICAgICAgIE1hcCBwcm9wZXJ0aWVzKSB0aHJvd3MgQXV0aEV4Y2VwdGlvbiB7CisgICAgICAgIH0pOwogCi0JICAgIGJvb2xlYW4gbWFuZGF0b3J5ID0gZmFsc2U7Ci0JICAgIGlmIChNQU5EQVRPUllfQ09OVEVYVF9JRC5lcXVhbHMoYXV0aENvbnRleHRJRCkpIHsKLQkJbWFuZGF0b3J5ID0gdHJ1ZTsKLQkgICAgfSBlbHNlIGlmICghT1BUSU9OQUxfQ09OVEVYVF9JRC5lcXVhbHMoYXV0aENvbnRleHRJRCkpIHsKLQkJdGhyb3cgbmV3IEF1dGhFeGNlcHRpb24oImludmFsaWQgQXV0aENvbnRleHQgSUQiKTsKLQkgICAgfQorICAgICAgICB9IGNhdGNoIChqYXZhLnNlY3VyaXR5LlByaXZpbGVnZWRBY3Rpb25FeGNlcHRpb24gcGFlKSB7CisgICAgICAgIEF1dGhFeGNlcHRpb24gYWUgPSBuZXcgQXV0aEV4Y2VwdGlvbigpOworICAgICAgICBhZS5pbml0Q2F1c2UocGFlLmdldENhdXNlKCkpOworICAgICAgICB0aHJvdyBhZTsKKyAgICAgICAgfQogCi0JICAgIFNlcnZlckF1dGhDb250ZXh0IHJ2YWx1ZSA9IG51bGw7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY3JlYXRlZCBTZXJ2bGV0U2VydmVyQXV0aENvbmZpZzogIiArCisgICAgICAgICAgICAgICAgICAgYXBwQ29udGV4dCArICIgIiArIGNsYXp6KTsKIAotCSAgICB0cnkgewotCQlyTG9ja0NvbmZpZy5sb2NrKCk7Ci0JCWlmIChtYW5kYXRvcnkpIHsKLQkJICAgIHJ2YWx1ZSA9IG1hbmRhdG9yeUNvbnRleHQ7Ci0JCX0gZWxzZSB7Ci0JCSAgICBydmFsdWUgPSBvcHRpb25hbENvbnRleHQ7Ci0JCX0KLQkgICAgfSBmaW5hbGx5IHsKLQkJckxvY2tDb25maWcudW5sb2NrKCk7Ci0JICAgIH0KLQkgICAgaWYgKHJ2YWx1ZSA9PSBudWxsKSB7Ci0JCXRyeSB7Ci0JCSAgICB3TG9ja0NvbmZpZy5sb2NrKCk7Ci0JCSAgICBpZiAob3B0aW9ucyAhPSBudWxsICYmIHByb3BlcnRpZXMgIT0gbnVsbCkgewotCQkJcHJvcGVydGllcyA9IG5ldyBIYXNoTWFwKHByb3BlcnRpZXMpOwotCQkJcHJvcGVydGllcy5wdXRBbGwob3B0aW9ucyk7Ci0JCSAgICB9Ci0JCSAgICAKLQkJICAgIGlmIChtYW5kYXRvcnkpIHsKLQkJCW1hbmRhdG9yeUNvbnRleHQgPSBuZXcgU2VydmxldFNlcnZlckF1dGhDb250ZXh0Ci0JCQkgICAgKG1vZHVsZXNbMV0sbWFuZGF0b3J5UG9saWN5LGNiaCxwcm9wZXJ0aWVzKTsKLQkJCXJ2YWx1ZSA9IG1hbmRhdG9yeUNvbnRleHQ7Ci0JCSAgICB9IGVsc2UgewotCQkJb3B0aW9uYWxDb250ZXh0ID0gbmV3IFNlcnZsZXRTZXJ2ZXJBdXRoQ29udGV4dAotCQkJICAgIChtb2R1bGVzWzBdLG9wdGlvbmFsUG9saWN5LGNiaCxwcm9wZXJ0aWVzKTsKLQkJCXJ2YWx1ZSA9IG9wdGlvbmFsQ29udGV4dDsKLQkJICAgIH0KLQkJfSBmaW5hbGx5IHsKLQkJICAgIHdMb2NrQ29uZmlnLnVubG9jaygpOwotCQl9Ci0JICAgIH0gCi0JICAgIHJldHVybiBydmFsdWU7Ci0JfQorICAgICAgICBtYW5kYXRvcnlDb250ZXh0ID0gbnVsbDsKKyAgICAgICAgb3B0aW9uYWxDb250ZXh0ID0gbnVsbDsKKyAgICB9CiAKLQlwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2VMYXllcigpIHsKLQkgICAgcmV0dXJuIEhUVFBfU0VSVkxFVF9MQVlFUjsKLQl9CisgICAgcHVibGljIFNlcnZlckF1dGhDb250ZXh0CisgICAgZ2V0QXV0aENvbnRleHQoU3RyaW5nIGF1dGhDb250ZXh0SUQsIFN1YmplY3Qgc2VydmljZVN1YmplY3QsCisgICAgICAgICAgICAgICBNYXAgcHJvcGVydGllcykgdGhyb3dzIEF1dGhFeGNlcHRpb24gewogCi0JcHVibGljIFN0cmluZyBnZXRBcHBDb250ZXh0KCkgewotCSAgICByZXR1cm4gdGhpcy5hcHBDb250ZXh0OwotCX0KLQkKLQlwdWJsaWMgU3RyaW5nIGdldEF1dGhDb250ZXh0SUQoTWVzc2FnZUluZm8gbWVzc2FnZUluZm8pIHsKLQkgICAgaWYgKG1lc3NhZ2VJbmZvLmdldE1hcCgpLmNvbnRhaW5zS2V5KE1BTkRBVE9SWV9LRVkpKSB7Ci0JCXJldHVybiBNQU5EQVRPUllfQ09OVEVYVF9JRDsKLQkgICAgfSBlbHNlIHsKLQkJcmV0dXJuIE9QVElPTkFMX0NPTlRFWFRfSUQ7Ci0JICAgIH0KLQl9CisgICAgICAgIGJvb2xlYW4gbWFuZGF0b3J5ID0gZmFsc2U7CisgICAgICAgIGlmIChNQU5EQVRPUllfQ09OVEVYVF9JRC5lcXVhbHMoYXV0aENvbnRleHRJRCkpIHsKKyAgICAgICAgbWFuZGF0b3J5ID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIGlmICghT1BUSU9OQUxfQ09OVEVYVF9JRC5lcXVhbHMoYXV0aENvbnRleHRJRCkpIHsKKyAgICAgICAgdGhyb3cgbmV3IEF1dGhFeGNlcHRpb24oImludmFsaWQgQXV0aENvbnRleHQgSUQiKTsKKyAgICAgICAgfQogCi0JcHVibGljIHZvaWQgcmVmcmVzaCgpIHsKLQl9CisgICAgICAgIFNlcnZlckF1dGhDb250ZXh0IHJ2YWx1ZSA9IG51bGw7CiAKLQlwdWJsaWMgYm9vbGVhbiBpc1Byb3RlY3RlZCgpIHsKLQkgICAgcmV0dXJuIHRydWU7Ci0JfQorICAgICAgICB0cnkgeworICAgICAgICByTG9ja0NvbmZpZy5sb2NrKCk7CisgICAgICAgIGlmIChtYW5kYXRvcnkpIHsKKyAgICAgICAgICAgIHJ2YWx1ZSA9IG1hbmRhdG9yeUNvbnRleHQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBydmFsdWUgPSBvcHRpb25hbENvbnRleHQ7CisgICAgICAgIH0KKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgckxvY2tDb25maWcudW5sb2NrKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJ2YWx1ZSA9PSBudWxsKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB3TG9ja0NvbmZpZy5sb2NrKCk7CisgICAgICAgICAgICBpZiAob3B0aW9ucyAhPSBudWxsICYmIHByb3BlcnRpZXMgIT0gbnVsbCkgeworICAgICAgICAgICAgcHJvcGVydGllcyA9IG5ldyBIYXNoTWFwKHByb3BlcnRpZXMpOworICAgICAgICAgICAgcHJvcGVydGllcy5wdXRBbGwob3B0aW9ucyk7CisgICAgICAgICAgICB9CiAKLQlib29sZWFuIHNldEhhbmRsZXJJZk5vdFNldChDYWxsYmFja0hhbmRsZXIgaGFuZGxlcikgewotCSAgICB0cnkgewotCQl3TG9ja0NvbmZpZy5sb2NrKCk7Ci0JCWlmICh0aGlzLmNiaCA9PSBudWxsICYmIGhhbmRsZXIgIT0gbnVsbCkgewotCQkgICAgdGhpcy5jYmggPSBoYW5kbGVyOwotCQkgICAgcmV0dXJuIHRydWU7Ci0JCX0gZWxzZSB7Ci0JCSAgICByZXR1cm4gZmFsc2U7Ci0JCX0KLQkgICAgfSBmaW5hbGx5IHsKLQkJd0xvY2tDb25maWcudW5sb2NrKCk7Ci0JICAgIH0KLQl9CisgICAgICAgICAgICBpZiAobWFuZGF0b3J5KSB7CisgICAgICAgICAgICBtYW5kYXRvcnlDb250ZXh0ID0gbmV3IFNlcnZsZXRTZXJ2ZXJBdXRoQ29udGV4dAorICAgICAgICAgICAgICAgIChtb2R1bGVzWzFdLG1hbmRhdG9yeVBvbGljeSxjYmgscHJvcGVydGllcyk7CisgICAgICAgICAgICBydmFsdWUgPSBtYW5kYXRvcnlDb250ZXh0OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG9wdGlvbmFsQ29udGV4dCA9IG5ldyBTZXJ2bGV0U2VydmVyQXV0aENvbnRleHQKKyAgICAgICAgICAgICAgICAobW9kdWxlc1swXSxvcHRpb25hbFBvbGljeSxjYmgscHJvcGVydGllcyk7CisgICAgICAgICAgICBydmFsdWUgPSBvcHRpb25hbENvbnRleHQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICB3TG9ja0NvbmZpZy51bmxvY2soKTsKKyAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBydmFsdWU7CisgICAgfQogCi0Jc3RhdGljIGNsYXNzIFNlcnZsZXRQcm90ZWN0aW9uUG9saWN5IGltcGxlbWVudHMgCi0JTWVzc2FnZVBvbGljeS5Qcm90ZWN0aW9uUG9saWN5IHsKLQkKLQkgICAgU2VydmxldFByb3RlY3Rpb25Qb2xpY3koKSB7Ci0JICAgIH0KLQkKLQkgICAgcHVibGljIFN0cmluZyBnZXRJRCgpIHsKLQkJcmV0dXJuIE1lc3NhZ2VQb2xpY3kuUHJvdGVjdGlvblBvbGljeS5BVVRIRU5USUNBVEVfU0VOREVSOwotCSAgICB9Ci0JfQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0TWVzc2FnZUxheWVyKCkgeworICAgICAgICByZXR1cm4gSFRUUF9TRVJWTEVUX0xBWUVSOworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0QXBwQ29udGV4dCgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuYXBwQ29udGV4dDsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIGdldEF1dGhDb250ZXh0SUQoTWVzc2FnZUluZm8gbWVzc2FnZUluZm8pIHsKKyAgICAgICAgaWYgKG1lc3NhZ2VJbmZvLmdldE1hcCgpLmNvbnRhaW5zS2V5KE1BTkRBVE9SWV9LRVkpKSB7CisgICAgICAgIHJldHVybiBNQU5EQVRPUllfQ09OVEVYVF9JRDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIE9QVElPTkFMX0NPTlRFWFRfSUQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCByZWZyZXNoKCkgeworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIGlzUHJvdGVjdGVkKCkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sZWFuIHNldEhhbmRsZXJJZk5vdFNldChDYWxsYmFja0hhbmRsZXIgaGFuZGxlcikgeworICAgICAgICB0cnkgeworICAgICAgICB3TG9ja0NvbmZpZy5sb2NrKCk7CisgICAgICAgIGlmICh0aGlzLmNiaCA9PSBudWxsICYmIGhhbmRsZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgdGhpcy5jYmggPSBoYW5kbGVyOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgd0xvY2tDb25maWcudW5sb2NrKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgY2xhc3MgU2VydmxldFByb3RlY3Rpb25Qb2xpY3kgaW1wbGVtZW50cworICAgIE1lc3NhZ2VQb2xpY3kuUHJvdGVjdGlvblBvbGljeSB7CisKKyAgICAgICAgU2VydmxldFByb3RlY3Rpb25Qb2xpY3koKSB7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgU3RyaW5nIGdldElEKCkgeworICAgICAgICByZXR1cm4gTWVzc2FnZVBvbGljeS5Qcm90ZWN0aW9uUG9saWN5LkFVVEhFTlRJQ0FURV9TRU5ERVI7CisgICAgICAgIH0KKyAgICB9CiAgICAgfQogCiAgICAgc3RhdGljIGNsYXNzIFNlcnZsZXRTZXJ2ZXJBdXRoQ29udGV4dCBpbXBsZW1lbnRzIFNlcnZlckF1dGhDb250ZXh0IHsKIAotCVNlcnZlckF1dGhNb2R1bGUgbW9kdWxlOworICAgIFNlcnZlckF1dGhNb2R1bGUgbW9kdWxlOwogCi0JU2VydmxldFNlcnZlckF1dGhDb250ZXh0IChTZXJ2ZXJBdXRoTW9kdWxlIG1vZHVsZSwKLQkJCQkgIE1lc3NhZ2VQb2xpY3kgcmVxdWVzdFBvbGljeSwgIAotCQkJCSAgQ2FsbGJhY2tIYW5kbGVyIGNiaCwKLQkJCQkgIE1hcCBvcHRpb25zKSB0aHJvd3MgQXV0aEV4Y2VwdGlvbiB7CisgICAgU2VydmxldFNlcnZlckF1dGhDb250ZXh0IChTZXJ2ZXJBdXRoTW9kdWxlIG1vZHVsZSwKKyAgICAgICAgICAgICAgICAgIE1lc3NhZ2VQb2xpY3kgcmVxdWVzdFBvbGljeSwKKyAgICAgICAgICAgICAgICAgIENhbGxiYWNrSGFuZGxlciBjYmgsCisgICAgICAgICAgICAgICAgICBNYXAgb3B0aW9ucykgdGhyb3dzIEF1dGhFeGNlcHRpb24gewogCi0JICAgIG1vZHVsZS5pbml0aWFsaXplKHJlcXVlc3RQb2xpY3ksbnVsbCxjYmgsb3B0aW9ucyk7Ci0JICAgIHRoaXMubW9kdWxlID0gbW9kdWxlOwotCX0KKyAgICAgICAgbW9kdWxlLmluaXRpYWxpemUocmVxdWVzdFBvbGljeSxudWxsLGNiaCxvcHRpb25zKTsKKyAgICAgICAgdGhpcy5tb2R1bGUgPSBtb2R1bGU7CisgICAgfQogCi0JcHVibGljIEF1dGhTdGF0dXMgdmFsaWRhdGVSZXF1ZXN0Ci0JICAgIChNZXNzYWdlSW5mbyBtZXNzYWdlSW5mbywgU3ViamVjdCBjbGllbnRTdWJqZWN0LCAKLQkgICAgIFN1YmplY3Qgc2VydmljZVN1YmplY3QpIHRocm93cyBBdXRoRXhjZXB0aW9uIHsKLQkJIHJldHVybiBtb2R1bGUudmFsaWRhdGVSZXF1ZXN0Ci0JCSAgICAgKG1lc3NhZ2VJbmZvLGNsaWVudFN1YmplY3Qsc2VydmljZVN1YmplY3QpOwotCX0KKyAgICBwdWJsaWMgQXV0aFN0YXR1cyB2YWxpZGF0ZVJlcXVlc3QKKyAgICAgICAgKE1lc3NhZ2VJbmZvIG1lc3NhZ2VJbmZvLCBTdWJqZWN0IGNsaWVudFN1YmplY3QsCisgICAgICAgICBTdWJqZWN0IHNlcnZpY2VTdWJqZWN0KSB0aHJvd3MgQXV0aEV4Y2VwdGlvbiB7CisgICAgICAgICByZXR1cm4gbW9kdWxlLnZhbGlkYXRlUmVxdWVzdAorICAgICAgICAgICAgIChtZXNzYWdlSW5mbyxjbGllbnRTdWJqZWN0LHNlcnZpY2VTdWJqZWN0KTsKKyAgICB9CiAKLQlwdWJsaWMgQXV0aFN0YXR1cyBzZWN1cmVSZXNwb25zZQotCSAgICAgKE1lc3NhZ2VJbmZvIG1lc3NhZ2VJbmZvLCBTdWJqZWN0IHNlcnZpY2VTdWJqZWN0KQotCSAgICB0aHJvd3MgQXV0aEV4Y2VwdGlvbiB7Ci0JCXJldHVybiBtb2R1bGUuc2VjdXJlUmVzcG9uc2UobWVzc2FnZUluZm8sc2VydmljZVN1YmplY3QpOwotCX0KKyAgICBwdWJsaWMgQXV0aFN0YXR1cyBzZWN1cmVSZXNwb25zZQorICAgICAgICAgKE1lc3NhZ2VJbmZvIG1lc3NhZ2VJbmZvLCBTdWJqZWN0IHNlcnZpY2VTdWJqZWN0KQorICAgICAgICB0aHJvd3MgQXV0aEV4Y2VwdGlvbiB7CisgICAgICAgIHJldHVybiBtb2R1bGUuc2VjdXJlUmVzcG9uc2UobWVzc2FnZUluZm8sc2VydmljZVN1YmplY3QpOworICAgIH0KIAotCXB1YmxpYyB2b2lkIGNsZWFuU3ViamVjdChNZXNzYWdlSW5mbyBtZXNzYWdlSW5mbywgU3ViamVjdCBzdWJqZWN0KQotCSAgICB0aHJvd3MgQXV0aEV4Y2VwdGlvbiB7Ci0JICAgICAgICBtb2R1bGUuY2xlYW5TdWJqZWN0KG1lc3NhZ2VJbmZvLHN1YmplY3QpOwotCX0KLQkKKyAgICBwdWJsaWMgdm9pZCBjbGVhblN1YmplY3QoTWVzc2FnZUluZm8gbWVzc2FnZUluZm8sIFN1YmplY3Qgc3ViamVjdCkKKyAgICAgICAgdGhyb3dzIEF1dGhFeGNlcHRpb24geworICAgICAgICAgICAgbW9kdWxlLmNsZWFuU3ViamVjdChtZXNzYWdlSW5mbyxzdWJqZWN0KTsKKyAgICB9CisKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2F1dGhDb25mL3Byb3ZpZGVyL2NvbS9zdW4vc2VjdXJpdHkvYXV0aC9tZXNzYWdlL21vZHVsZS9TUE5FR09TZXJ2ZXJBdXRoTW9kdWxlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9hdXRoQ29uZi9wcm92aWRlci9jb20vc3VuL3NlY3VyaXR5L2F1dGgvbWVzc2FnZS9tb2R1bGUvU1BORUdPU2VydmVyQXV0aE1vZHVsZS5qYXZhCmluZGV4IDZmNmQwMTguLmU4ZTQ0MjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2F1dGhDb25mL3Byb3ZpZGVyL2NvbS9zdW4vc2VjdXJpdHkvYXV0aC9tZXNzYWdlL21vZHVsZS9TUE5FR09TZXJ2ZXJBdXRoTW9kdWxlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvYXV0aENvbmYvcHJvdmlkZXIvY29tL3N1bi9zZWN1cml0eS9hdXRoL21lc3NhZ2UvbW9kdWxlL1NQTkVHT1NlcnZlckF1dGhNb2R1bGUuamF2YQpAQCAtNTEsNyArNTEsNyBAQAogaW1wb3J0IGNvbS5zdW4uc2VjdXJpdHkuamdzcy5HU1NVdGlsOwogCiAvKioKLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgaW50ZXJmYWNlIGlzIHVzZWQgdG8gdmFsaWRhdGUgcmVjZWl2ZWQgc2VydmljZSAKKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgaW50ZXJmYWNlIGlzIHVzZWQgdG8gdmFsaWRhdGUgcmVjZWl2ZWQgc2VydmljZQogICogcmVxdWVzdCBtZXNzYWdlcywgYW5kIHRvIHNlY3VyZSBzZXJ2aWNlIHJlc3BvbnNlIG1lc3NhZ2VzLgogICoKICAqIEB2ZXJzaW9uICVJJSwgJUclCkBAIC02NSwxNiArNjUsMTYgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBERUJVR19PUFRJT05TX0tFWSA9ImRlYnVnIjsKIAotICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBBU1NJR05fR1JPVVBTX09QVElPTlNfS0VZID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIEFTU0lHTl9HUk9VUFNfT1BUSU9OU19LRVkgPQogICAgICAgICAiYXNzaWduLmdyb3VwcyI7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgUE9MSUNZX0NPTlRFWFRfT1BUSU9OU19LRVkgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgUE9MSUNZX0NPTlRFWFRfT1BUSU9OU19LRVkgPQogICAgICAgICAiamFrYXJ0YS5zZWN1cml0eS5qYWNjLlBvbGljeUNvbnRleHQiOwogCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVVUSF9UWVBFX0lORk9fS0VZID0gCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVVUSF9UWVBFX0lORk9fS0VZID0KICAgICAgICAgImpha2FydGEuc2VydmxldC5odHRwLmF1dGhUeXBlIjsKIAotICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBJU19NQU5EQVRPUllfSU5GT19LRVkgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgSVNfTUFOREFUT1JZX0lORk9fS0VZID0KICAgICAgICAgImpha2FydGEuc2VjdXJpdHkuYXV0aC5tZXNzYWdlLk1lc3NhZ2VQb2xpY3kuaXNNYW5kYXRvcnkiOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIEFVVEhPUklaQVRJT05fSEVBREVSID0gImF1dGhvcml6YXRpb24iOwpAQCAtODUsMTIgKzg1LDEyIEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgTlRMTV9JTklUSUFMX1RPS0VOID0gIk5UTE1TU1AiOwogCi0gICAgcHJpdmF0ZSBzdGF0aWMgQ2xhc3NbXSBzdXBwb3J0ZWRNZXNzYWdlVHlwZXMgPSBuZXcgQ2xhc3NbXSAKLSAgICB7IAotCWpha2FydGEuc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdC5jbGFzcywKLQlqYWthcnRhLnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlLmNsYXNzIAotICAgIH07ICAgICAgICAgICAgCi0gICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgQ2xhc3NbXSBzdXBwb3J0ZWRNZXNzYWdlVHlwZXMgPSBuZXcgQ2xhc3NbXQorICAgIHsKKyAgICBqYWthcnRhLnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QuY2xhc3MsCisgICAgamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZS5jbGFzcworICAgIH07CisKICAgICBwcml2YXRlIE1lc3NhZ2VQb2xpY3kgcmVxdWVzdFBvbGljeTsKIAogICAgIHByaXZhdGUgTWVzc2FnZVBvbGljeSByZXNwb25zZVBvbGljeTsKQEAgLTExOSw3MSArMTE5LDcxIEBACiAgICAgICogPHA+IFRoZSByZXF1ZXN0IHBvbGljeSBhbmQgdGhlIHJlc3BvbnNlIHBvbGljeSBtdXN0IG5vdCBib3RoIGJlIG51bGwuCiAgICAgICoKICAgICAgKiBAcGFyYW0gcmVxdWVzdFBvbGljeSBUaGUgcmVxdWVzdCBwb2xpY3kgdGhpcyBtb2R1bGUgbXVzdCBlbmZvcmNlLAotICAgICAqCQlvciBudWxsLgorICAgICAqICAgICAgICBvciBudWxsLgogICAgICAqCiAgICAgICogQHBhcmFtIHJlc3BvbnNlUG9saWN5IFRoZSByZXNwb25zZSBwb2xpY3kgdGhpcyBtb2R1bGUgbXVzdCBlbmZvcmNlLAotICAgICAqCQlvciBudWxsLgorICAgICAqICAgICAgICBvciBudWxsLgogICAgICAqCiAgICAgICogQHBhcmFtIGhhbmRsZXIgQ2FsbGJhY2tIYW5kbGVyIHVzZWQgdG8gcmVxdWVzdCBpbmZvcm1hdGlvbi4KICAgICAgKgogICAgICAqIEBwYXJhbSBvcHRpb25zIEEgTWFwIG9mIG1vZHVsZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMuCiAgICAgICoKICAgICAgKiBAZXhjZXB0aW9uIEF1dGhFeGNlcHRpb24gSWYgbW9kdWxlIGluaXRpYWxpemF0aW9uIGZhaWxzLCBpbmNsdWRpbmcgZm9yCi0gICAgICogdGhlIGNhc2Ugd2hlcmUgdGhlIG9wdGlvbnMgYXJndW1lbnQgY29udGFpbnMgZWxlbWVudHMgdGhhdCBhcmUgbm90IAorICAgICAqIHRoZSBjYXNlIHdoZXJlIHRoZSBvcHRpb25zIGFyZ3VtZW50IGNvbnRhaW5zIGVsZW1lbnRzIHRoYXQgYXJlIG5vdAogICAgICAqIHN1cHBvcnRlZCBieSB0aGUgbW9kdWxlLgogICAgICAqLwogCiAgICAgcHVibGljIHZvaWQgaW5pdGlhbGl6ZShNZXNzYWdlUG9saWN5IHJlcXVlc3RQb2xpY3ksCi0JICAgICAgIE1lc3NhZ2VQb2xpY3kgcmVzcG9uc2VQb2xpY3ksCi0JICAgICAgIENhbGxiYWNrSGFuZGxlciBoYW5kbGVyLAotCSAgICAgICBNYXAgb3B0aW9ucykKLQl0aHJvd3MgQXV0aEV4Y2VwdGlvbiB7CisgICAgICAgICAgIE1lc3NhZ2VQb2xpY3kgcmVzcG9uc2VQb2xpY3ksCisgICAgICAgICAgIENhbGxiYWNrSGFuZGxlciBoYW5kbGVyLAorICAgICAgICAgICBNYXAgb3B0aW9ucykKKyAgICB0aHJvd3MgQXV0aEV4Y2VwdGlvbiB7CiAKLQkgICAgdGhpcy5yZXF1ZXN0UG9saWN5ID0gcmVxdWVzdFBvbGljeTsKLQkgICAgdGhpcy5yZXNwb25zZVBvbGljeSA9IHJlc3BvbnNlUG9saWN5OworICAgICAgICB0aGlzLnJlcXVlc3RQb2xpY3kgPSByZXF1ZXN0UG9saWN5OworICAgICAgICB0aGlzLnJlc3BvbnNlUG9saWN5ID0gcmVzcG9uc2VQb2xpY3k7CiAKLQkgICAgdGhpcy5pc01hbmRhdG9yeSA9IHJlcXVlc3RQb2xpY3kuaXNNYW5kYXRvcnkoKTsKKyAgICAgICAgdGhpcy5pc01hbmRhdG9yeSA9IHJlcXVlc3RQb2xpY3kuaXNNYW5kYXRvcnkoKTsKIAotCSAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVyOwotCSAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zOwotCSAgIAotCSAgICBpZiAob3B0aW9ucyAhPSBudWxsKSB7Ci0JCWRlYnVnID0gb3B0aW9ucy5jb250YWluc0tleShERUJVR19PUFRJT05TX0tFWSk7Ci0JCXBvbGljeUNvbnRleHRJRCA9IChTdHJpbmcpIAotCQkgICAgb3B0aW9ucy5nZXQoUE9MSUNZX0NPTlRFWFRfT1BUSU9OU19LRVkpOwotCSAgICB9IGVsc2UgewotCQlkZWJ1ZyA9IGZhbHNlOwotCQlwb2xpY3lDb250ZXh0SUQgPSBudWxsOwotCSAgICB9CisgICAgICAgIHRoaXMuaGFuZGxlciA9IGhhbmRsZXI7CisgICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7CiAKLQkgICAgYXNzaWduZWRHcm91cHMgPSBnZXRBc3NpZ25lZEdyb3VwTmFtZXMoKTsKKyAgICAgICAgaWYgKG9wdGlvbnMgIT0gbnVsbCkgeworICAgICAgICBkZWJ1ZyA9IG9wdGlvbnMuY29udGFpbnNLZXkoREVCVUdfT1BUSU9OU19LRVkpOworICAgICAgICBwb2xpY3lDb250ZXh0SUQgPSAoU3RyaW5nKQorICAgICAgICAgICAgb3B0aW9ucy5nZXQoUE9MSUNZX0NPTlRFWFRfT1BUSU9OU19LRVkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICBkZWJ1ZyA9IGZhbHNlOworICAgICAgICBwb2xpY3lDb250ZXh0SUQgPSBudWxsOworICAgICAgICB9CiAKLQkgICAgZGVidWdMZXZlbCA9IChsb2dnZXIuaXNMb2dnYWJsZShMZXZlbC5GSU5FKSAmJiAhZGVidWcpID8gCi0JCUxldmVsLkZJTkUgOiBMZXZlbC5JTkZPOworICAgICAgICBhc3NpZ25lZEdyb3VwcyA9IGdldEFzc2lnbmVkR3JvdXBOYW1lcygpOwogCi0JICAgIGdzc01hbmFnZXIgPSBHU1NNYW5hZ2VyLmdldEluc3RhbmNlKCk7IAorICAgICAgICBkZWJ1Z0xldmVsID0gKGxvZ2dlci5pc0xvZ2dhYmxlKExldmVsLkZJTkUpICYmICFkZWJ1ZykgPworICAgICAgICBMZXZlbC5GSU5FIDogTGV2ZWwuSU5GTzsKKworICAgICAgICBnc3NNYW5hZ2VyID0gR1NTTWFuYWdlci5nZXRJbnN0YW5jZSgpOwogICAgIH0KIAogICAgIC8qKgotICAgICAqIEdldCB0aGUgb25lIG9yIG1vcmUgQ2xhc3Mgb2JqZWN0cyByZXByZXNlbnRpbmcgdGhlIG1lc3NhZ2UgdHlwZXMgCisgICAgICogR2V0IHRoZSBvbmUgb3IgbW9yZSBDbGFzcyBvYmplY3RzIHJlcHJlc2VudGluZyB0aGUgbWVzc2FnZSB0eXBlcwogICAgICAqIHN1cHBvcnRlZCBieSB0aGUgbW9kdWxlLgogICAgICAqCi0gICAgICogQHJldHVybiBBbiBhcnJheSBvZiBDbGFzcyBvYmplY3RzLCB3aXRoIGF0IGxlYXN0IG9uZSBlbGVtZW50IAorICAgICAqIEByZXR1cm4gQW4gYXJyYXkgb2YgQ2xhc3Mgb2JqZWN0cywgd2l0aCBhdCBsZWFzdCBvbmUgZWxlbWVudAogICAgICAqIGRlZmluaW5nIGEgbWVzc2FnZSB0eXBlIHN1cHBvcnRlZCBieSB0aGUgbW9kdWxlLgogICAgICAqLwogICAgIHB1YmxpYyBDbGFzc1tdIGdldFN1cHBvcnRlZE1lc3NhZ2VUeXBlcygpIHsKLQlyZXR1cm4gc3VwcG9ydGVkTWVzc2FnZVR5cGVzOworICAgIHJldHVybiBzdXBwb3J0ZWRNZXNzYWdlVHlwZXM7CiAgICAgfQogCiAgICAgLyoqCiAgICAgICogQXV0aGVudGljYXRlIGEgcmVjZWl2ZWQgc2VydmljZSByZXF1ZXN0LgogICAgICAqCi0gICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIHRyYW5zZm9ybSB0aGUgbWVjaGFuaXNtLXNwZWNpZmljIHJlcXVlc3QgCi0gICAgICogbWVzc2FnZSBhY3F1aXJlZCBieSBjYWxsaW5nIGdldFJlcXVlc3RNZXNzYWdlIChvbiBtZXNzYWdlSW5mbykgCi0gICAgICogaW50byB0aGUgdmFsaWRhdGVkIGFwcGxpY2F0aW9uIG1lc3NhZ2UgdG8gYmUgcmV0dXJuZWQgdG8gdGhlIG1lc3NhZ2UgCi0gICAgICogcHJvY2Vzc2luZyBydW50aW1lLiAKLSAgICAgKiBJZiB0aGUgcmVjZWl2ZWQgbWVzc2FnZSBpcyBhIChtZWNoYW5pc20tc3BlY2lmaWMpIG1ldGEtbWVzc2FnZSwgCi0gICAgICogdGhlIG1ldGhvZCBpbXBsZW1lbnRhdGlvbiBtdXN0IGF0dGVtcHQgdG8gdHJhbnNmb3JtIHRoZSBtZXRhLW1lc3NhZ2UgCisgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIHRyYW5zZm9ybSB0aGUgbWVjaGFuaXNtLXNwZWNpZmljIHJlcXVlc3QKKyAgICAgKiBtZXNzYWdlIGFjcXVpcmVkIGJ5IGNhbGxpbmcgZ2V0UmVxdWVzdE1lc3NhZ2UgKG9uIG1lc3NhZ2VJbmZvKQorICAgICAqIGludG8gdGhlIHZhbGlkYXRlZCBhcHBsaWNhdGlvbiBtZXNzYWdlIHRvIGJlIHJldHVybmVkIHRvIHRoZSBtZXNzYWdlCisgICAgICogcHJvY2Vzc2luZyBydW50aW1lLgorICAgICAqIElmIHRoZSByZWNlaXZlZCBtZXNzYWdlIGlzIGEgKG1lY2hhbmlzbS1zcGVjaWZpYykgbWV0YS1tZXNzYWdlLAorICAgICAqIHRoZSBtZXRob2QgaW1wbGVtZW50YXRpb24gbXVzdCBhdHRlbXB0IHRvIHRyYW5zZm9ybSB0aGUgbWV0YS1tZXNzYWdlCiAgICAgICogaW50byBhIGNvcnJlc3BvbmRpbmcgbWVjaGFuaXNtLXNwZWNpZmljIHJlc3BvbnNlIG1lc3NhZ2UsIG9yIHRvIHRoZQogICAgICAqIHZhbGlkYXRlZCBhcHBsaWNhdGlvbiByZXF1ZXN0IG1lc3NhZ2UuCiAgICAgICogVGhlIHJ1bnRpbWUgd2lsbCBiaW5kIGEgdmFsaWRhdGVkIGFwcGxpY2F0aW9uIG1lc3NhZ2UgaW50byB0aGUKQEAgLTE5MiwyNyArMTkyLDI3IEBACiAgICAgICogYnkgcmV0dXJuaW5nIGFuIEF1dGhTdGF0dXMgdmFsdWUgb3IgYnkgdGhyb3dpbmcgYW4gQXV0aEV4Y2VwdGlvbi4KICAgICAgKgogICAgICAqIEBwYXJhbSBtZXNzYWdlSW5mbyBBIGNvbnRleHR1YWwgb2JqZWN0IHRoYXQgZW5jYXBzdWxhdGVzIHRoZQotICAgICAqICAgICAgICAgIGNsaWVudCByZXF1ZXN0IGFuZCBzZXJ2ZXIgcmVzcG9uc2Ugb2JqZWN0cywgYW5kIHRoYXQgbWF5IGJlIAotICAgICAqICAgICAgICAgIHVzZWQgdG8gc2F2ZSBzdGF0ZSBhY3Jvc3MgYSBzZXF1ZW5jZSBvZiBjYWxscyBtYWRlIHRvIHRoZSAKLSAgICAgKiAgICAgICAgICBtZXRob2RzIG9mIHRoaXMgaW50ZXJmYWNlIGZvciB0aGUgcHVycG9zZSBvZiBjb21wbGV0aW5nIGEgCisgICAgICogICAgICAgICAgY2xpZW50IHJlcXVlc3QgYW5kIHNlcnZlciByZXNwb25zZSBvYmplY3RzLCBhbmQgdGhhdCBtYXkgYmUKKyAgICAgKiAgICAgICAgICB1c2VkIHRvIHNhdmUgc3RhdGUgYWNyb3NzIGEgc2VxdWVuY2Ugb2YgY2FsbHMgbWFkZSB0byB0aGUKKyAgICAgKiAgICAgICAgICBtZXRob2RzIG9mIHRoaXMgaW50ZXJmYWNlIGZvciB0aGUgcHVycG9zZSBvZiBjb21wbGV0aW5nIGEKICAgICAgKiAgICAgICAgICBzZWN1cmUgbWVzc2FnZSBleGNoYW5nZS4KICAgICAgKgotICAgICAqIEBwYXJhbSBjbGllbnRTdWJqZWN0IEEgU3ViamVjdCB0aGF0IHJlcHJlc2VudHMgdGhlIHNvdXJjZSBvZiB0aGUgCi0gICAgICogICAgICAgICAgc2VydmljZSAKKyAgICAgKiBAcGFyYW0gY2xpZW50U3ViamVjdCBBIFN1YmplY3QgdGhhdCByZXByZXNlbnRzIHRoZSBzb3VyY2Ugb2YgdGhlCisgICAgICogICAgICAgICAgc2VydmljZQogICAgICAqICAgICAgICAgIHJlcXVlc3QuICBJdCBpcyB1c2VkIGJ5IHRoZSBtZXRob2QgaW1wbGVtZW50YXRpb24gdG8gc3RvcmUKLSAgICAgKgkJUHJpbmNpcGFscyBhbmQgY3JlZGVudGlhbHMgdmFsaWRhdGVkIGluIHRoZSByZXF1ZXN0LgorICAgICAqICAgICAgICBQcmluY2lwYWxzIGFuZCBjcmVkZW50aWFscyB2YWxpZGF0ZWQgaW4gdGhlIHJlcXVlc3QuCiAgICAgICoKICAgICAgKiBAcGFyYW0gc2VydmljZVN1YmplY3QgQSBTdWJqZWN0IHRoYXQgcmVwcmVzZW50cyB0aGUgcmVjaXBpZW50IG9mIHRoZQotICAgICAqCQlzZXJ2aWNlIHJlcXVlc3QsIG9yIG51bGwuICBJdCBtYXkgYmUgdXNlZCBieSB0aGUgbWV0aG9kIAorICAgICAqICAgICAgICBzZXJ2aWNlIHJlcXVlc3QsIG9yIG51bGwuICBJdCBtYXkgYmUgdXNlZCBieSB0aGUgbWV0aG9kCiAgICAgICogICAgICAgICAgaW1wbGVtZW50YXRpb24gYXMgdGhlIHNvdXJjZSBvZiBQcmluY2lwYWxzIG9yIGNyZWRlbnRpYWxzIHRvCi0gICAgICogICAgICAgICAgYmUgdXNlZCB0byB2YWxpZGF0ZSB0aGUgcmVxdWVzdC4gSWYgdGhlIFN1YmplY3QgaXMgbm90IG51bGwsIAotICAgICAqICAgICAgICAgIHRoZSBtZXRob2QgaW1wbGVtZW50YXRpb24gbWF5IGFkZCBhZGRpdGlvbmFsIFByaW5jaXBhbHMgb3IgCi0gICAgICogICAgICAgICAgY3JlZGVudGlhbHMgKHBlcnRhaW5pbmcgdG8gdGhlIHJlY2lwaWVudCBvZiB0aGUgc2VydmljZSAKKyAgICAgKiAgICAgICAgICBiZSB1c2VkIHRvIHZhbGlkYXRlIHRoZSByZXF1ZXN0LiBJZiB0aGUgU3ViamVjdCBpcyBub3QgbnVsbCwKKyAgICAgKiAgICAgICAgICB0aGUgbWV0aG9kIGltcGxlbWVudGF0aW9uIG1heSBhZGQgYWRkaXRpb25hbCBQcmluY2lwYWxzIG9yCisgICAgICogICAgICAgICAgY3JlZGVudGlhbHMgKHBlcnRhaW5pbmcgdG8gdGhlIHJlY2lwaWVudCBvZiB0aGUgc2VydmljZQogICAgICAqICAgICAgICAgIHJlcXVlc3QpIHRvIHRoZSBTdWJqZWN0LgogICAgICAqCiAgICAgICogQHJldHVybiBBbiBBdXRoU3RhdHVzIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGNvbXBsZXRpb24gc3RhdHVzIG9mCiAgICAgICogICAgICAgICAgdGhlIHByb2Nlc3NpbmcgcGVyZm9ybWVkIGJ5IHRoZSBtZXRob2QuCi0gICAgICogICAgICAgICAgVGhlIEF1dGhTdGF0dXMgdmFsdWVzIHRoYXQgbWF5IGJlIHJldHVybmVkIGJ5IHRoaXMgbWV0aG9kIAorICAgICAqICAgICAgICAgIFRoZSBBdXRoU3RhdHVzIHZhbHVlcyB0aGF0IG1heSBiZSByZXR1cm5lZCBieSB0aGlzIG1ldGhvZAogICAgICAqICAgICAgICAgIGFyZSBkZWZpbmVkIGFzIGZvbGxvd3M6CiAgICAgICoKICAgICAgKiA8dWw+CkBAIC0yMjEsMTYgKzIyMSwxNiBAQAogICAgICAqIGF2YWlsYWJsZSBieSBjYWxsaW5nIGdldFJlcXVlc3RNZXNzYWdlIG9uIG1lc3NhZ2VJbmZvLgogICAgICAqCiAgICAgICogPGxpPiBBdXRoU3RhdHVzLlNFTkRfU1VDQ0VTUyB0byBpbmRpY2F0ZSB0aGF0IHZhbGlkYXRpb24vcHJvY2Vzc2luZwotICAgICAqIG9mIHRoZSByZXF1ZXN0IG1lc3NhZ2Ugc3VjY2Vzc2Z1bGx5IHByb2R1Y2VkIHRoZSBzZWN1cmVkIGFwcGxpY2F0aW9uIAotICAgICAqIHJlc3BvbnNlIG1lc3NhZ2UgKGluIG1lc3NhZ2VJbmZvKS4gVGhlIHNlY3VyZWQgcmVzcG9uc2UgbWVzc2FnZSBpcyAKKyAgICAgKiBvZiB0aGUgcmVxdWVzdCBtZXNzYWdlIHN1Y2Nlc3NmdWxseSBwcm9kdWNlZCB0aGUgc2VjdXJlZCBhcHBsaWNhdGlvbgorICAgICAqIHJlc3BvbnNlIG1lc3NhZ2UgKGluIG1lc3NhZ2VJbmZvKS4gVGhlIHNlY3VyZWQgcmVzcG9uc2UgbWVzc2FnZSBpcwogICAgICAqIGF2YWlsYWJsZSBieSBjYWxsaW5nIGdldFJlc3BvbnNlTWVzc2FnZSBvbiBtZXNzYWdlSW5mby4KICAgICAgKgogICAgICAqIDxsaT4gQXV0aFN0YXR1cy5TRU5EX0NPTlRJTlVFIHRvIGluZGljYXRlIHRoYXQgbWVzc2FnZSB2YWxpZGF0aW9uIGlzCiAgICAgICogaW5jb21wbGV0ZSwgYW5kIHRoYXQgYSBwcmVsaW1pbmFyeSByZXNwb25zZSB3YXMgcmV0dXJuZWQgYXMgdGhlCiAgICAgICogcmVzcG9uc2UgbWVzc2FnZSBpbiBtZXNzYWdlSW5mby4KICAgICAgKgotICAgICAqIFdoZW4gdGhpcyBzdGF0dXMgdmFsdWUgaXMgcmV0dXJuZWQgdG8gY2hhbGxlbmdlIGFuIAotICAgICAqIGFwcGxpY2F0aW9uIHJlcXVlc3QgbWVzc2FnZSwgdGhlIGNoYWxsZW5nZWQgcmVxdWVzdCBtdXN0IGJlIHNhdmVkIAorICAgICAqIFdoZW4gdGhpcyBzdGF0dXMgdmFsdWUgaXMgcmV0dXJuZWQgdG8gY2hhbGxlbmdlIGFuCisgICAgICogYXBwbGljYXRpb24gcmVxdWVzdCBtZXNzYWdlLCB0aGUgY2hhbGxlbmdlZCByZXF1ZXN0IG11c3QgYmUgc2F2ZWQKICAgICAgKiBieSB0aGUgYXV0aGVudGljYXRpb24gbW9kdWxlIHN1Y2ggdGhhdCBpdCBjYW4gYmUgcmVjb3ZlcmVkCiAgICAgICogd2hlbiB0aGUgbW9kdWxlJ3MgdmFsaWRhdGVSZXF1ZXN0IG1lc3NhZ2UgaXMgY2FsbGVkIHRvIHByb2Nlc3MKICAgICAgKiB0aGUgcmVxdWVzdCByZXR1cm5lZCBmb3IgdGhlIGNoYWxsZW5nZS4KQEAgLTI0NCwxNTIgKzI0NCwxNTIgQEAKICAgICAgKiAgICAgICAgICBlc3RhYmxpc2hpbmcgYSBmYWlsdXJlIHJlc3BvbnNlIG1lc3NhZ2UgKGluIG1lc3NhZ2VJbmZvKS4KICAgICAgKi8KICAgICBwdWJsaWMgQXV0aFN0YXR1cyB2YWxpZGF0ZVJlcXVlc3QoTWVzc2FnZUluZm8gbWVzc2FnZUluZm8sCi0JCQkgICAgICAgU3ViamVjdCBjbGllbnRTdWJqZWN0LAotCQkJICAgICAgIFN1YmplY3Qgc2VydmljZVN1YmplY3QpIHRocm93cyBBdXRoRXhjZXB0aW9uIHsKKyAgICAgICAgICAgICAgICAgICBTdWJqZWN0IGNsaWVudFN1YmplY3QsCisgICAgICAgICAgICAgICAgICAgU3ViamVjdCBzZXJ2aWNlU3ViamVjdCkgdGhyb3dzIEF1dGhFeGNlcHRpb24gewogCi0JYXNzZXJ0IChtZXNzYWdlSW5mby5nZXRNYXAoKS5jb250YWluc0tleShJU19NQU5EQVRPUllfSU5GT19LRVkpID09IAotCQl0aGlzLmlzTWFuZGF0b3J5KTsKKyAgICBhc3NlcnQgKG1lc3NhZ2VJbmZvLmdldE1hcCgpLmNvbnRhaW5zS2V5KElTX01BTkRBVE9SWV9JTkZPX0tFWSkgPT0KKyAgICAgICAgdGhpcy5pc01hbmRhdG9yeSk7CiAKLQlIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCA9IAotCSAgICAoSHR0cFNlcnZsZXRSZXF1ZXN0KSBtZXNzYWdlSW5mby5nZXRSZXF1ZXN0TWVzc2FnZSgpOworICAgIEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0ID0KKyAgICAgICAgKEh0dHBTZXJ2bGV0UmVxdWVzdCkgbWVzc2FnZUluZm8uZ2V0UmVxdWVzdE1lc3NhZ2UoKTsKIAotCUh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UgPSAKLQkgICAgKEh0dHBTZXJ2bGV0UmVzcG9uc2UpIG1lc3NhZ2VJbmZvLmdldFJlc3BvbnNlTWVzc2FnZSgpOworICAgIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UgPQorICAgICAgICAoSHR0cFNlcnZsZXRSZXNwb25zZSkgbWVzc2FnZUluZm8uZ2V0UmVzcG9uc2VNZXNzYWdlKCk7CiAKLQlkZWJ1Z1JlcXVlc3QocmVxdWVzdCk7CisgICAgZGVidWdSZXF1ZXN0KHJlcXVlc3QpOwogCi0JLy8gc2hvdWxkIHNwZWNpZnkgZW5jb2RlcgotCVN0cmluZyBhdXRob3JpemF0aW9uID0gcmVxdWVzdC5nZXRIZWFkZXIoQVVUSE9SSVpBVElPTl9IRUFERVIpOworICAgIC8vIHNob3VsZCBzcGVjaWZ5IGVuY29kZXIKKyAgICBTdHJpbmcgYXV0aG9yaXphdGlvbiA9IHJlcXVlc3QuZ2V0SGVhZGVyKEFVVEhPUklaQVRJT05fSEVBREVSKTsKIAotCWlmIChhdXRob3JpemF0aW9uICE9IG51bGwgJiYgYXV0aG9yaXphdGlvbi5zdGFydHNXaXRoKE5FR09USUFURSkpIHsKKyAgICBpZiAoYXV0aG9yaXphdGlvbiAhPSBudWxsICYmIGF1dGhvcml6YXRpb24uc3RhcnRzV2l0aChORUdPVElBVEUpKSB7CiAKLQkgICAgYXV0aG9yaXphdGlvbiA9IGF1dGhvcml6YXRpb24uc3Vic3RyaW5nKE5FR09USUFURS5sZW5ndGgoKSsxKTsKKyAgICAgICAgYXV0aG9yaXphdGlvbiA9IGF1dGhvcml6YXRpb24uc3Vic3RyaW5nKE5FR09USUFURS5sZW5ndGgoKSsxKTsKIAotCSAgICAvLyBzaG91bGQgc3BlY2lmeSBhIGRlY29kZXIKLQkgICAgYnl0ZVtdIHJlcXVlc3RUb2tlbiA9IEJhc2U2NC5kZWNvZGUoYXV0aG9yaXphdGlvbi5nZXRCeXRlcygpKTsKKyAgICAgICAgLy8gc2hvdWxkIHNwZWNpZnkgYSBkZWNvZGVyCisgICAgICAgIGJ5dGVbXSByZXF1ZXN0VG9rZW4gPSBCYXNlNjQuZGVjb2RlKGF1dGhvcml6YXRpb24uZ2V0Qnl0ZXMoKSk7CiAKLQkgICAgdHJ5IHsKKyAgICAgICAgdHJ5IHsKIAotCQlHU1NDb250ZXh0IGdzc0NvbnRleHQgPSAKLQkJICAgIGdzc01hbmFnZXIuY3JlYXRlQ29udGV4dCgoR1NTQ3JlZGVudGlhbCkgbnVsbCk7CisgICAgICAgIEdTU0NvbnRleHQgZ3NzQ29udGV4dCA9CisgICAgICAgICAgICBnc3NNYW5hZ2VyLmNyZWF0ZUNvbnRleHQoKEdTU0NyZWRlbnRpYWwpIG51bGwpOwogCi0JCWJ5dGVbXSBnc3NUb2tlbiA9IGdzc0NvbnRleHQuYWNjZXB0U2VjQ29udGV4dAotCQkgICAgKHJlcXVlc3RUb2tlbiwwLHJlcXVlc3RUb2tlbi5sZW5ndGgpOwotCQkKLQkJaWYgKGdzc1Rva2VuICE9IG51bGwpIHsKKyAgICAgICAgYnl0ZVtdIGdzc1Rva2VuID0gZ3NzQ29udGV4dC5hY2NlcHRTZWNDb250ZXh0CisgICAgICAgICAgICAocmVxdWVzdFRva2VuLDAscmVxdWVzdFRva2VuLmxlbmd0aCk7CiAKLQkJICAgIGJ5dGVbXSByZXNwb25zZVRva2VuID0gQmFzZTY0LmVuY29kZShnc3NUb2tlbik7CisgICAgICAgIGlmIChnc3NUb2tlbiAhPSBudWxsKSB7CiAKLQkJICAgIHJlc3BvbnNlLnNldEhlYWRlcihBVVRIRU5USUNBVElPTl9IRUFERVIsCi0JCQkJICAgICAgICJOZWdvdGlhdGUiICsgcmVzcG9uc2VUb2tlbik7CisgICAgICAgICAgICBieXRlW10gcmVzcG9uc2VUb2tlbiA9IEJhc2U2NC5lbmNvZGUoZ3NzVG9rZW4pOwogCi0JCSAgICBkZWJ1Z1Rva2VuKCJqbWFjLnNlcnZsZXQuYXV0aGVudGljYXRpb24udG9rZW4iLAotCQkJCSAgIHJlc3BvbnNlVG9rZW4pOwotCQl9CisgICAgICAgICAgICByZXNwb25zZS5zZXRIZWFkZXIoQVVUSEVOVElDQVRJT05fSEVBREVSLAorICAgICAgICAgICAgICAgICAgICAgICAiTmVnb3RpYXRlIiArIHJlc3BvbnNlVG9rZW4pOwogCi0JCWlmICghZ3NzQ29udGV4dC5pc0VzdGFibGlzaGVkKCkpIHsKKyAgICAgICAgICAgIGRlYnVnVG9rZW4oImptYWMuc2VydmxldC5hdXRoZW50aWNhdGlvbi50b2tlbiIsCisgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VUb2tlbik7CisgICAgICAgIH0KIAotCQkgICAgaWYgKGRlYnVnIHx8IGxvZ2dlci5pc0xvZ2dhYmxlKExldmVsLkZJTkUpKXsKLQkJCWxvZ2dlci5sb2coZGVidWdMZXZlbCwiam1hYy5nc3NfZGlhbG9nX2NvbnRpbnVlZCIpOwotCQkgICAgfQorICAgICAgICBpZiAoIWdzc0NvbnRleHQuaXNFc3RhYmxpc2hlZCgpKSB7CiAKLQkJICAgIHJlc3BvbnNlLnNldFN0YXR1cyhIdHRwU2VydmxldFJlc3BvbnNlLlNDX1VOQVVUSE9SSVpFRCk7Ci0JCSAgICByZXR1cm4gQXV0aFN0YXR1cy5TRU5EX0NPTlRJTlVFOworICAgICAgICAgICAgaWYgKGRlYnVnIHx8IGxvZ2dlci5pc0xvZ2dhYmxlKExldmVsLkZJTkUpKXsKKyAgICAgICAgICAgIGxvZ2dlci5sb2coZGVidWdMZXZlbCwiam1hYy5nc3NfZGlhbG9nX2NvbnRpbnVlZCIpOworICAgICAgICAgICAgfQogCi0JCX0gZWxzZSB7CisgICAgICAgICAgICByZXNwb25zZS5zZXRTdGF0dXMoSHR0cFNlcnZsZXRSZXNwb25zZS5TQ19VTkFVVEhPUklaRUQpOworICAgICAgICAgICAgcmV0dXJuIEF1dGhTdGF0dXMuU0VORF9DT05USU5VRTsKIAotCQkgICAgU3RyaW5nIG1lY2hJRDsKLQkJICAgIHRyeSB7Ci0JCQlPaWQgb2lkID0gZ3NzQ29udGV4dC5nZXRNZWNoKCk7Ci0JCQltZWNoSUQgPSBvaWQudG9TdHJpbmcoKTsKLQkJICAgIH0gY2F0Y2ggKEdTU0V4Y2VwdGlvbiBnc3NlKSB7Ci0JCQltZWNoSUQgPSAiVW5kZWZpbmVkIEdTUyBNZWNoYW5pc20iOworICAgICAgICB9IGVsc2UgewogCi0JCQlpZiAoZGVidWcgfHwgbG9nZ2VyLmlzTG9nZ2FibGUoTGV2ZWwuRklORSkpewotCQkJICAgIGxvZ2dlci5sb2coZGVidWdMZXZlbCwKLQkJCQkgICAgICAgImptYWMuZ3NzX21lY2hhbmlzbV91bmRlZmluZWQiLGdzc2UpOwotCQkJfQotCQkgICAgfSAKKyAgICAgICAgICAgIFN0cmluZyBtZWNoSUQ7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgT2lkIG9pZCA9IGdzc0NvbnRleHQuZ2V0TWVjaCgpOworICAgICAgICAgICAgbWVjaElEID0gb2lkLnRvU3RyaW5nKCk7CisgICAgICAgICAgICB9IGNhdGNoIChHU1NFeGNlcHRpb24gZ3NzZSkgeworICAgICAgICAgICAgbWVjaElEID0gIlVuZGVmaW5lZCBHU1MgTWVjaGFuaXNtIjsKIAotCQkgICAgR1NTTmFtZSBuYW1lID0gZ3NzQ29udGV4dC5nZXRTcmNOYW1lKCk7CisgICAgICAgICAgICBpZiAoZGVidWcgfHwgbG9nZ2VyLmlzTG9nZ2FibGUoTGV2ZWwuRklORSkpeworICAgICAgICAgICAgICAgIGxvZ2dlci5sb2coZGVidWdMZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgImptYWMuZ3NzX21lY2hhbmlzbV91bmRlZmluZWQiLGdzc2UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogCi0JCSAgICBpZiAoIXNldENhbGxlclByaW5jaXBhbChuYW1lLGNsaWVudFN1YmplY3QpKSB7CisgICAgICAgICAgICBHU1NOYW1lIG5hbWUgPSBnc3NDb250ZXh0LmdldFNyY05hbWUoKTsKIAotCQkJcmV0dXJuIHNlbmRGYWlsdXJlTWVzc2FnZQotCQkJICAgIChyZXNwb25zZSwKLQkJCSAgICAgSHR0cFNlcnZsZXRSZXNwb25zZS5TQ19JTlRFUk5BTF9TRVJWRVJfRVJST1IsCi0JCQkgICAgICJGYWlsZWQgc2V0dGluZyBjYWxsZXIgcHJpbmNpcGFsIik7Ci0JCSAgICB9CisgICAgICAgICAgICBpZiAoIXNldENhbGxlclByaW5jaXBhbChuYW1lLGNsaWVudFN1YmplY3QpKSB7CiAKLQkJICAgIC8qIHdlIG1heSBuZWVkIHRvIGFkZCBzb21ldGhpbmcgbGlrZSBhIGNvb2tpZSB0byB0aGUgCi0JCSAgICAgKiByZXNwb25zZSAodGhhdCB3aWxsIGJlIHJldHVybmVkIGluIHN1YnNlcXVlbnQgcmVxdWVzdHMpLgotCQkgICAgICogQXQgdGhpcyBwb2ludCwgSSBhbSBwcmVzdW1pbmcgdGhhdCB0aGUgYnJvd3NlciB3aWxsCi0JCSAgICAgKiByZXNlbmQgdGhlIGF1dGhvcml6YXRpb24gdG9rZW4uCi0JCSAgICAgKi8KLQkJICAgIG1lc3NhZ2VJbmZvLmdldE1hcCgpLnB1dChBVVRIX1RZUEVfSU5GT19LRVksbWVjaElEKTsKKyAgICAgICAgICAgIHJldHVybiBzZW5kRmFpbHVyZU1lc3NhZ2UKKyAgICAgICAgICAgICAgICAocmVzcG9uc2UsCisgICAgICAgICAgICAgICAgIEh0dHBTZXJ2bGV0UmVzcG9uc2UuU0NfSU5URVJOQUxfU0VSVkVSX0VSUk9SLAorICAgICAgICAgICAgICAgICAiRmFpbGVkIHNldHRpbmcgY2FsbGVyIHByaW5jaXBhbCIpOworICAgICAgICAgICAgfQogCi0JCSAgICBpZiAoZGVidWcgfHwgbG9nZ2VyLmlzTG9nZ2FibGUoTGV2ZWwuRklORSkpewotCQkJbG9nZ2VyLmxvZyhkZWJ1Z0xldmVsLCJqbWFjLmdzc19kaWFsb2dfY29tcGxldGUiKTsKLQkJICAgIH0KKyAgICAgICAgICAgIC8qIHdlIG1heSBuZWVkIHRvIGFkZCBzb21ldGhpbmcgbGlrZSBhIGNvb2tpZSB0byB0aGUKKyAgICAgICAgICAgICAqIHJlc3BvbnNlICh0aGF0IHdpbGwgYmUgcmV0dXJuZWQgaW4gc3Vic2VxdWVudCByZXF1ZXN0cykuCisgICAgICAgICAgICAgKiBBdCB0aGlzIHBvaW50LCBJIGFtIHByZXN1bWluZyB0aGF0IHRoZSBicm93c2VyIHdpbGwKKyAgICAgICAgICAgICAqIHJlc2VuZCB0aGUgYXV0aG9yaXphdGlvbiB0b2tlbi4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgbWVzc2FnZUluZm8uZ2V0TWFwKCkucHV0KEFVVEhfVFlQRV9JTkZPX0tFWSxtZWNoSUQpOwogCi0JCX0KKyAgICAgICAgICAgIGlmIChkZWJ1ZyB8fCBsb2dnZXIuaXNMb2dnYWJsZShMZXZlbC5GSU5FKSl7CisgICAgICAgICAgICBsb2dnZXIubG9nKGRlYnVnTGV2ZWwsImptYWMuZ3NzX2RpYWxvZ19jb21wbGV0ZSIpOworICAgICAgICAgICAgfQogCi0JICAgIH0gY2F0Y2ggKEdTU0V4Y2VwdGlvbiBnc3NlKSB7CisgICAgICAgIH0KIAotCQlpZiAocmVxdWVzdFRva2VuICE9IG51bGwpIHsKKyAgICAgICAgfSBjYXRjaCAoR1NTRXhjZXB0aW9uIGdzc2UpIHsKIAotCQkgICAgZGVidWdUb2tlbigiam1hYy5zZXJ2bGV0LmF1dGhvcml6YXRpb24udG9rZW4iLAotCQkJICAgICAgIHJlcXVlc3RUb2tlbik7CisgICAgICAgIGlmIChyZXF1ZXN0VG9rZW4gIT0gbnVsbCkgewogCi0JCSAgICBpZiAoaXNOVExNVG9rZW4ocmVxdWVzdFRva2VuKSkgeworICAgICAgICAgICAgZGVidWdUb2tlbigiam1hYy5zZXJ2bGV0LmF1dGhvcml6YXRpb24udG9rZW4iLAorICAgICAgICAgICAgICAgICAgIHJlcXVlc3RUb2tlbik7CiAKLQkJCS8vIHVudGlsIHdlIGFkZCBzdXBwb3J0IGZvciBOVExNCi0JCQlyZXR1cm4gc2VuZEZhaWx1cmVNZXNzYWdlCi0JCQkgICAgKHJlc3BvbnNlLAotCQkJICAgICBIdHRwU2VydmxldFJlc3BvbnNlLlNDX05PVF9JTVBMRU1FTlRFRCwKLQkJCSAgICAgIk5vIHN1cHBvcnQgZm9yIE5UTE0iKTsKLQkJICAgIH0KLQkJfSAKKyAgICAgICAgICAgIGlmIChpc05UTE1Ub2tlbihyZXF1ZXN0VG9rZW4pKSB7CiAKLQkJaWYgKGRlYnVnIHx8IGxvZ2dlci5pc0xvZ2dhYmxlKExldmVsLkZJTkUpKXsKLQkJICAgIGxvZ2dlci5sb2coZGVidWdMZXZlbCwiam1hYy5nc3NfZGlhbG9nX2ZhaWxlZCIsZ3NzZSk7Ci0JCX0KKyAgICAgICAgICAgIC8vIHVudGlsIHdlIGFkZCBzdXBwb3J0IGZvciBOVExNCisgICAgICAgICAgICByZXR1cm4gc2VuZEZhaWx1cmVNZXNzYWdlCisgICAgICAgICAgICAgICAgKHJlc3BvbnNlLAorICAgICAgICAgICAgICAgICBIdHRwU2VydmxldFJlc3BvbnNlLlNDX05PVF9JTVBMRU1FTlRFRCwKKyAgICAgICAgICAgICAgICAgIk5vIHN1cHBvcnQgZm9yIE5UTE0iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogCi0JCS8vIGZvciBvdGhlciBlcnJvcnMgdGhyb3cgYW4gQXV0aEV4Y2VwdGlvbgorICAgICAgICBpZiAoZGVidWcgfHwgbG9nZ2VyLmlzTG9nZ2FibGUoTGV2ZWwuRklORSkpeworICAgICAgICAgICAgbG9nZ2VyLmxvZyhkZWJ1Z0xldmVsLCJqbWFjLmdzc19kaWFsb2dfZmFpbGVkIixnc3NlKTsKKyAgICAgICAgfQogCi0JCUF1dGhFeGNlcHRpb24gYWUgPSBuZXcgQXV0aEV4Y2VwdGlvbigpOwotCQlhZS5pbml0Q2F1c2UoZ3NzZSk7Ci0JCXRocm93IGFlOwotCSAgICB9CisgICAgICAgIC8vIGZvciBvdGhlciBlcnJvcnMgdGhyb3cgYW4gQXV0aEV4Y2VwdGlvbgogCi0JfSBlbHNlIGlmICh0aGlzLmlzTWFuZGF0b3J5KSB7CisgICAgICAgIEF1dGhFeGNlcHRpb24gYWUgPSBuZXcgQXV0aEV4Y2VwdGlvbigpOworICAgICAgICBhZS5pbml0Q2F1c2UoZ3NzZSk7CisgICAgICAgIHRocm93IGFlOworICAgICAgICB9CiAKLQkgICAgcmVzcG9uc2Uuc2V0SGVhZGVyKEFVVEhFTlRJQ0FUSU9OX0hFQURFUixORUdPVElBVEUpOwotCSAgICByZXNwb25zZS5zZXRTdGF0dXMoSHR0cFNlcnZsZXRSZXNwb25zZS5TQ19VTkFVVEhPUklaRUQpOworICAgIH0gZWxzZSBpZiAodGhpcy5pc01hbmRhdG9yeSkgewogCi0JICAgIGlmIChkZWJ1ZyB8fCBsb2dnZXIuaXNMb2dnYWJsZShMZXZlbC5GSU5FKSl7Ci0JCWxvZ2dlci5sb2coZGVidWdMZXZlbCwiam1hYy5zZXZsZXRfaGVhZGVyX2FkZGVkX3RvX3Jlc3BvbnNlIiwKLQkJCSAgIE5FR09USUFURSk7Ci0JICAgIH0KKyAgICAgICAgcmVzcG9uc2Uuc2V0SGVhZGVyKEFVVEhFTlRJQ0FUSU9OX0hFQURFUixORUdPVElBVEUpOworICAgICAgICByZXNwb25zZS5zZXRTdGF0dXMoSHR0cFNlcnZsZXRSZXNwb25zZS5TQ19VTkFVVEhPUklaRUQpOwogCi0JICAgIHJldHVybiBBdXRoU3RhdHVzLlNFTkRfQ09OVElOVUU7CisgICAgICAgIGlmIChkZWJ1ZyB8fCBsb2dnZXIuaXNMb2dnYWJsZShMZXZlbC5GSU5FKSl7CisgICAgICAgIGxvZ2dlci5sb2coZGVidWdMZXZlbCwiam1hYy5zZXZsZXRfaGVhZGVyX2FkZGVkX3RvX3Jlc3BvbnNlIiwKKyAgICAgICAgICAgICAgIE5FR09USUFURSk7CisgICAgICAgIH0KIAotCX0gZWxzZSB7CisgICAgICAgIHJldHVybiBBdXRoU3RhdHVzLlNFTkRfQ09OVElOVUU7CiAKLQkgICAgaWYgKGF1dGhvcml6YXRpb24gIT0gbnVsbCkgewotCQlsb2dnZXIud2FybmluZygiam1hYy5zZXJ2bGV0X2F1dGhvcml6YXRpb25faGVhZGVyX2lnbm9yZWQiKTsKLQkgICAgfQorICAgIH0gZWxzZSB7CiAKLQkgICAgaWYgKCFzZXRDYWxsZXJQcmluY2lwYWwobnVsbCxjbGllbnRTdWJqZWN0KSkgewotCQlyZXR1cm4gc2VuZEZhaWx1cmVNZXNzYWdlCi0JCSAgICAocmVzcG9uc2UsCi0JCSAgICAgSHR0cFNlcnZsZXRSZXNwb25zZS5TQ19JTlRFUk5BTF9TRVJWRVJfRVJST1IsCi0JCSAgICAgIkZhaWxlZCBzZXR0aW5nIHVuYXV0aGVudGljYXRlZCBjYWxsZXIgcHJpbmNpcGFsIik7Ci0JICAgIH0KKyAgICAgICAgaWYgKGF1dGhvcml6YXRpb24gIT0gbnVsbCkgeworICAgICAgICBsb2dnZXIud2FybmluZygiam1hYy5zZXJ2bGV0X2F1dGhvcml6YXRpb25faGVhZGVyX2lnbm9yZWQiKTsKKyAgICAgICAgfQogCi0JfQorICAgICAgICBpZiAoIXNldENhbGxlclByaW5jaXBhbChudWxsLGNsaWVudFN1YmplY3QpKSB7CisgICAgICAgIHJldHVybiBzZW5kRmFpbHVyZU1lc3NhZ2UKKyAgICAgICAgICAgIChyZXNwb25zZSwKKyAgICAgICAgICAgICBIdHRwU2VydmxldFJlc3BvbnNlLlNDX0lOVEVSTkFMX1NFUlZFUl9FUlJPUiwKKyAgICAgICAgICAgICAiRmFpbGVkIHNldHRpbmcgdW5hdXRoZW50aWNhdGVkIGNhbGxlciBwcmluY2lwYWwiKTsKKyAgICAgICAgfQogCi0JcmV0dXJuIEF1dGhTdGF0dXMuU1VDQ0VTUzsKKyAgICB9CisKKyAgICByZXR1cm4gQXV0aFN0YXR1cy5TVUNDRVNTOwogICAgIH0KIAogICAgIC8qKgpAQCAtNDAyLDMzICs0MDIsMzMgQEAKICAgICAgKiBieSByZXR1cm5pbmcgYW4gQXV0aFN0YXR1cyB2YWx1ZSBvciBieSB0aHJvd2luZyBhbiBBdXRoRXhjZXB0aW9uLgogICAgICAqCiAgICAgICogQHBhcmFtIG1lc3NhZ2VJbmZvIEEgY29udGV4dHVhbCBvYmplY3QgdGhhdCBlbmNhcHN1bGF0ZXMgdGhlCi0gICAgICogICAgICAgICAgY2xpZW50IHJlcXVlc3QgYW5kIHNlcnZlciByZXNwb25zZSBvYmplY3RzLCBhbmQgdGhhdCBtYXkgYmUgCi0gICAgICogICAgICAgICAgdXNlZCB0byBzYXZlIHN0YXRlIGFjcm9zcyBhIHNlcXVlbmNlIG9mIGNhbGxzIG1hZGUgdG8gdGhlIAotICAgICAqICAgICAgICAgIG1ldGhvZHMgb2YgdGhpcyBpbnRlcmZhY2UgZm9yIHRoZSBwdXJwb3NlIG9mIGNvbXBsZXRpbmcgYSAKKyAgICAgKiAgICAgICAgICBjbGllbnQgcmVxdWVzdCBhbmQgc2VydmVyIHJlc3BvbnNlIG9iamVjdHMsIGFuZCB0aGF0IG1heSBiZQorICAgICAqICAgICAgICAgIHVzZWQgdG8gc2F2ZSBzdGF0ZSBhY3Jvc3MgYSBzZXF1ZW5jZSBvZiBjYWxscyBtYWRlIHRvIHRoZQorICAgICAqICAgICAgICAgIG1ldGhvZHMgb2YgdGhpcyBpbnRlcmZhY2UgZm9yIHRoZSBwdXJwb3NlIG9mIGNvbXBsZXRpbmcgYQogICAgICAqICAgICAgICAgIHNlY3VyZSBtZXNzYWdlIGV4Y2hhbmdlLgogICAgICAqCi0gICAgICogQHBhcmFtIHNlcnZpY2VTdWJqZWN0IEEgU3ViamVjdCB0aGF0IHJlcHJlc2VudHMgdGhlIHNvdXJjZSBvZiB0aGUgCisgICAgICogQHBhcmFtIHNlcnZpY2VTdWJqZWN0IEEgU3ViamVjdCB0aGF0IHJlcHJlc2VudHMgdGhlIHNvdXJjZSBvZiB0aGUKICAgICAgKiAgICAgICAgICBzZXJ2aWNlCiAgICAgICogICAgICAgICAgcmVzcG9uc2UsIG9yIG51bGwuIEl0IG1heSBiZSB1c2VkIGJ5IHRoZSBtZXRob2QgaW1wbGVtZW50YXRpb24KLSAgICAgKiAgICAgICAgICB0byByZXRyaWV2ZSBQcmluY2lwYWxzIGFuZCBjcmVkZW50aWFscyBuZWNlc3NhcnkgdG8gc2VjdXJlIAotICAgICAqICAgICAgICAgIHRoZSByZXNwb25zZS4gSWYgdGhlIFN1YmplY3QgaXMgbm90IG51bGwsIAotICAgICAqICAgICAgICAgIHRoZSBtZXRob2QgaW1wbGVtZW50YXRpb24gbWF5IGFkZCBhZGRpdGlvbmFsIFByaW5jaXBhbHMgb3IgCi0gICAgICogICAgICAgICAgY3JlZGVudGlhbHMgKHBlcnRhaW5pbmcgdG8gdGhlIHNvdXJjZSBvZiB0aGUgc2VydmljZSAKKyAgICAgKiAgICAgICAgICB0byByZXRyaWV2ZSBQcmluY2lwYWxzIGFuZCBjcmVkZW50aWFscyBuZWNlc3NhcnkgdG8gc2VjdXJlCisgICAgICogICAgICAgICAgdGhlIHJlc3BvbnNlLiBJZiB0aGUgU3ViamVjdCBpcyBub3QgbnVsbCwKKyAgICAgKiAgICAgICAgICB0aGUgbWV0aG9kIGltcGxlbWVudGF0aW9uIG1heSBhZGQgYWRkaXRpb25hbCBQcmluY2lwYWxzIG9yCisgICAgICogICAgICAgICAgY3JlZGVudGlhbHMgKHBlcnRhaW5pbmcgdG8gdGhlIHNvdXJjZSBvZiB0aGUgc2VydmljZQogICAgICAqICAgICAgICAgIHJlc3BvbnNlKSB0byB0aGUgU3ViamVjdC4KICAgICAgKgogICAgICAqIEByZXR1cm4gQW4gQXV0aFN0YXR1cyBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBjb21wbGV0aW9uIHN0YXR1cyBvZgotICAgICAqICAgICAgICAgIHRoZSBwcm9jZXNzaW5nIHBlcmZvcm1lZCBieSB0aGUgbWV0aG9kLiAKLSAgICAgKiAgICAgICAgICBUaGUgQXV0aFN0YXR1cyB2YWx1ZXMgdGhhdCBtYXkgYmUgcmV0dXJuZWQgYnkgdGhpcyBtZXRob2QgCisgICAgICogICAgICAgICAgdGhlIHByb2Nlc3NpbmcgcGVyZm9ybWVkIGJ5IHRoZSBtZXRob2QuCisgICAgICogICAgICAgICAgVGhlIEF1dGhTdGF0dXMgdmFsdWVzIHRoYXQgbWF5IGJlIHJldHVybmVkIGJ5IHRoaXMgbWV0aG9kCiAgICAgICogICAgICAgICAgYXJlIGRlZmluZWQgYXMgZm9sbG93czoKICAgICAgKgogICAgICAqIDx1bD4KLSAgICAgKiA8bGk+IEF1dGhTdGF0dXMuU0VORF9TVUNDRVNTIHdoZW4gdGhlIGFwcGxpY2F0aW9uIHJlc3BvbnNlIAorICAgICAqIDxsaT4gQXV0aFN0YXR1cy5TRU5EX1NVQ0NFU1Mgd2hlbiB0aGUgYXBwbGljYXRpb24gcmVzcG9uc2UKICAgICAgKiBtZXNzYWdlIHdhcyBzdWNjZXNzZnVsbHkgc2VjdXJlZC4gVGhlIHNlY3VyZWQgcmVzcG9uc2UgbWVzc2FnZSBtYXkgYmUKICAgICAgKiBvYnRhaW5lZCBieSBjYWxsaW5nIGdldFJlc3BvbnNlTWVzc2FnZSBvbiBtZXNzYWdlSW5mby4KICAgICAgKgotICAgICAqIDxsaT4gQXV0aFN0YXR1cy5TRU5EX0NPTlRJTlVFIHRvIGluZGljYXRlIHRoYXQgdGhlIGFwcGxpY2F0aW9uIHJlc3BvbnNlIAotICAgICAqIG1lc3NhZ2UgKHdpdGhpbiBtZXNzYWdlSW5mbykgd2FzIHJlcGxhY2VkIHdpdGggYSBzZWN1cml0eSBtZXNzYWdlIAotICAgICAqIHRoYXQgc2hvdWxkIGVsaWNpdCBhIHNlY3VyaXR5LXNwZWNpZmljIHJlc3BvbnNlIChpbiB0aGUgZm9ybSBvZiBhIAorICAgICAqIDxsaT4gQXV0aFN0YXR1cy5TRU5EX0NPTlRJTlVFIHRvIGluZGljYXRlIHRoYXQgdGhlIGFwcGxpY2F0aW9uIHJlc3BvbnNlCisgICAgICogbWVzc2FnZSAod2l0aGluIG1lc3NhZ2VJbmZvKSB3YXMgcmVwbGFjZWQgd2l0aCBhIHNlY3VyaXR5IG1lc3NhZ2UKKyAgICAgKiB0aGF0IHNob3VsZCBlbGljaXQgYSBzZWN1cml0eS1zcGVjaWZpYyByZXNwb25zZSAoaW4gdGhlIGZvcm0gb2YgYQogICAgICAqIHJlcXVlc3QpIGZyb20gdGhlIHBlZXIuCiAgICAgICoKICAgICAgKiBUaGlzIHN0YXR1cyB2YWx1ZSBzZXJ2ZXMgdG8gaW5mb3JtIHRoZSBjYWxsaW5nIHJ1bnRpbWUgdGhhdApAQCAtNDM3LDcgKzQzNyw3IEBACiAgICAgICogYXQgbGVhc3Qgb25lIGFkZGl0aW9uYWwgcmVxdWVzdC9yZXNwb25zZSBleGNoYW5nZSAoYWZ0ZXIgaGF2aW5nCiAgICAgICogc2VudCB0aGUgcmVzcG9uc2UgbWVzc2FnZSByZXR1cm5lZCBpbiBtZXNzYWdlSW5mbykuCiAgICAgICoKLSAgICAgKiBXaGVuIHRoaXMgc3RhdHVzIHZhbHVlIGlzIHJldHVybmVkLCB0aGUgYXBwbGljYXRpb24gcmVzcG9uc2UgbXVzdCAKKyAgICAgKiBXaGVuIHRoaXMgc3RhdHVzIHZhbHVlIGlzIHJldHVybmVkLCB0aGUgYXBwbGljYXRpb24gcmVzcG9uc2UgbXVzdAogICAgICAqIGJlIHNhdmVkIGJ5IHRoZSBhdXRoZW50aWNhdGlvbiBtb2R1bGUgc3VjaCB0aGF0IGl0IGNhbiBiZSByZWNvdmVyZWQKICAgICAgKiB3aGVuIHRoZSBtb2R1bGUncyB2YWxpZGF0ZVJlcXVlc3QgbWVzc2FnZSBpcyBjYWxsZWQgdG8gcHJvY2VzcwogICAgICAqIHRoZSBlbGljaXRlZCByZXNwb25zZS4KQEAgLTQ1MCwxNTggKzQ1MCwxNTggQEAKICAgICAgKiBAZXhjZXB0aW9uIEF1dGhFeGNlcHRpb24gV2hlbiB0aGUgbWVzc2FnZSBwcm9jZXNzaW5nIGZhaWxlZCB3aXRob3V0CiAgICAgICogICAgICAgICAgZXN0YWJsaXNoaW5nIGEgZmFpbHVyZSByZXNwb25zZSBtZXNzYWdlIChpbiBtZXNzYWdlSW5mbykuCiAgICAgICovCi0gICAgcHVibGljIEF1dGhTdGF0dXMgc2VjdXJlUmVzcG9uc2UoTWVzc2FnZUluZm8gbWVzc2FnZUluZm8sIAotCVN1YmplY3Qgc2VydmljZVN1YmplY3QpIHRocm93cyBBdXRoRXhjZXB0aW9uIHsgCi0JcmV0dXJuIEF1dGhTdGF0dXMuU0VORF9TVUNDRVNTOworICAgIHB1YmxpYyBBdXRoU3RhdHVzIHNlY3VyZVJlc3BvbnNlKE1lc3NhZ2VJbmZvIG1lc3NhZ2VJbmZvLAorICAgIFN1YmplY3Qgc2VydmljZVN1YmplY3QpIHRocm93cyBBdXRoRXhjZXB0aW9uIHsKKyAgICByZXR1cm4gQXV0aFN0YXR1cy5TRU5EX1NVQ0NFU1M7CiAgICAgfQogCiAgICAgLyoqCiAgICAgICogUmVtb3ZlIG1ldGhvZCBzcGVjaWZpYyBwcmluY2lwYWxzIGFuZCBjcmVkZW50aWFscyBmcm9tIHRoZSBzdWJqZWN0LgogICAgICAqCiAgICAgICogQHBhcmFtIG1lc3NhZ2VJbmZvIGEgY29udGV4dHVhbCBvYmplY3QgdGhhdCBlbmNhcHN1bGF0ZXMgdGhlCi0gICAgICogICAgICAgICAgY2xpZW50IHJlcXVlc3QgYW5kIHNlcnZlciByZXNwb25zZSBvYmplY3RzLCBhbmQgdGhhdCBtYXkgYmUgCi0gICAgICogICAgICAgICAgdXNlZCB0byBzYXZlIHN0YXRlIGFjcm9zcyBhIHNlcXVlbmNlIG9mIGNhbGxzIG1hZGUgdG8gdGhlIAotICAgICAqICAgICAgICAgIG1ldGhvZHMgb2YgdGhpcyBpbnRlcmZhY2UgZm9yIHRoZSBwdXJwb3NlIG9mIGNvbXBsZXRpbmcgYSAKKyAgICAgKiAgICAgICAgICBjbGllbnQgcmVxdWVzdCBhbmQgc2VydmVyIHJlc3BvbnNlIG9iamVjdHMsIGFuZCB0aGF0IG1heSBiZQorICAgICAqICAgICAgICAgIHVzZWQgdG8gc2F2ZSBzdGF0ZSBhY3Jvc3MgYSBzZXF1ZW5jZSBvZiBjYWxscyBtYWRlIHRvIHRoZQorICAgICAqICAgICAgICAgIG1ldGhvZHMgb2YgdGhpcyBpbnRlcmZhY2UgZm9yIHRoZSBwdXJwb3NlIG9mIGNvbXBsZXRpbmcgYQogICAgICAqICAgICAgICAgIHNlY3VyZSBtZXNzYWdlIGV4Y2hhbmdlLgogICAgICAqCi0gICAgICogQHBhcmFtIHN1YmplY3QgdGhlIFN1YmplY3QgaW5zdGFuY2UgZnJvbSB3aGljaCB0aGUgUHJpbmNpcGFscyBhbmQgCisgICAgICogQHBhcmFtIHN1YmplY3QgdGhlIFN1YmplY3QgaW5zdGFuY2UgZnJvbSB3aGljaCB0aGUgUHJpbmNpcGFscyBhbmQKICAgICAgKiAgICAgICAgICBjcmVkZW50aWFscyBhcmUgdG8gYmUgcmVtb3ZlZC4KICAgICAgKgotICAgICAqIEBleGNlcHRpb24gQXV0aEV4Y2VwdGlvbiBJZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIHRoZSBTdWJqZWN0IAorICAgICAqIEBleGNlcHRpb24gQXV0aEV4Y2VwdGlvbiBJZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIHRoZSBTdWJqZWN0CiAgICAgICogICAgICAgICAgcHJvY2Vzc2luZy4KICAgICAgKi8KIAogICAgIHB1YmxpYyB2b2lkIGNsZWFuU3ViamVjdChNZXNzYWdlSW5mbyBtZXNzYWdlSW5mbywgU3ViamVjdCBzdWJqZWN0KQotCXRocm93cyBBdXRoRXhjZXB0aW9uIHsKKyAgICB0aHJvd3MgQXV0aEV4Y2VwdGlvbiB7CiAgICAgfQogCiAgICAgQXV0aFN0YXR1cyBzZW5kRmFpbHVyZU1lc3NhZ2UoSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSwKLQkJCQkgIGludCBzdGF0dXMsIFN0cmluZyBtZXNzYWdlKXsKLQl0cnkgewotCSAgICByZXNwb25zZS5zZXRTdGF0dXMoc3RhdHVzKTsKLQkgICAgcmVzcG9uc2Uuc2VuZEVycm9yKHN0YXR1cyxtZXNzYWdlKTsKLQl9IGNhdGNoIChUaHJvd2FibGUgdCkgewotCSAgICAvLyBzdGF0dXMgY29kZSBoYXMgYmVlbiBzZXQsIGFuZCBwcm9wZXIgQXV0aFN0YXR1cyB3aWxsIGJlIHJldHVybmVkCi0JICAgIGxvZ2dlci5sb2coTGV2ZWwuV0FSTklORywiam1hYy5zZXJ2bGV0X2ZhaWxlZF9zZW5kaW5nX2ZhaWx1cmUiLHQpOwotCX0gZmluYWxseSB7Ci0JICAgIHJldHVybiBBdXRoU3RhdHVzLlNFTkRfRkFJTFVSRTsKLQl9CisgICAgICAgICAgICAgICAgICBpbnQgc3RhdHVzLCBTdHJpbmcgbWVzc2FnZSl7CisgICAgdHJ5IHsKKyAgICAgICAgcmVzcG9uc2Uuc2V0U3RhdHVzKHN0YXR1cyk7CisgICAgICAgIHJlc3BvbnNlLnNlbmRFcnJvcihzdGF0dXMsbWVzc2FnZSk7CisgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKKyAgICAgICAgLy8gc3RhdHVzIGNvZGUgaGFzIGJlZW4gc2V0LCBhbmQgcHJvcGVyIEF1dGhTdGF0dXMgd2lsbCBiZSByZXR1cm5lZAorICAgICAgICBsb2dnZXIubG9nKExldmVsLldBUk5JTkcsImptYWMuc2VydmxldF9mYWlsZWRfc2VuZGluZ19mYWlsdXJlIix0KTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICByZXR1cm4gQXV0aFN0YXR1cy5TRU5EX0ZBSUxVUkU7CisgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgYm9vbGVhbiBzZXRDYWxsZXJQcmluY2lwYWwoR1NTTmFtZSBuYW1lLFN1YmplY3QgY2xpZW50U3ViamVjdCkgewotCQotCVByaW5jaXBhbCBjYWxsZXIgPSBudWxsOwogCi0JaWYgKG5hbWUgIT0gbnVsbCkgeworICAgIFByaW5jaXBhbCBjYWxsZXIgPSBudWxsOwogCi0JICAgIC8vIGNyZWF0ZSBTdWJqZWN0IHdpdGggcHJpbmNpcGFscyBmcm9tIG5hbWUKLQkgICAgU3ViamVjdCBzID0gR1NTVXRpbC5jcmVhdGVTdWJqZWN0KG5hbWUsbnVsbCk7CisgICAgaWYgKG5hbWUgIT0gbnVsbCkgewogCi0JICAgIFNldCBwcmluY2lwYWxzID0gcy5nZXRQcmluY2lwYWxzKCk7Ci0gICAgICAgCi0JICAgIGlmIChwcmluY2lwYWxzLnNpemUoKSA+IDApIHsKKyAgICAgICAgLy8gY3JlYXRlIFN1YmplY3Qgd2l0aCBwcmluY2lwYWxzIGZyb20gbmFtZQorICAgICAgICBTdWJqZWN0IHMgPSBHU1NVdGlsLmNyZWF0ZVN1YmplY3QobmFtZSxudWxsKTsKIAotCQljbGllbnRTdWJqZWN0LmdldFByaW5jaXBhbHMoKS5hZGRBbGwocHJpbmNpcGFscyk7CisgICAgICAgIFNldCBwcmluY2lwYWxzID0gcy5nZXRQcmluY2lwYWxzKCk7CiAKLQkJLy8gaWYgbW9yZSB0aGFuIDEgcHJpbiwgY2FsbGVyIHNlbGVjdGlvbiBpcyB1bnByZWRpY3RhYmxlCisgICAgICAgIGlmIChwcmluY2lwYWxzLnNpemUoKSA+IDApIHsKIAotCQljYWxsZXIgPSAoUHJpbmNpcGFsKSBwcmluY2lwYWxzLml0ZXJhdG9yKCkubmV4dCgpOwotCSAgICB9IGVsc2UgaWYgKGRlYnVnIHx8IGxvZ2dlci5pc0xvZ2dhYmxlKExldmVsLkZJTkUpKXsKLQkJbG9nZ2VyLmxvZyhkZWJ1Z0xldmVsLCJqbWFjLm5vX2dzc19jYWxsZXJfcHJpbmNpcGFsIik7Ci0JICAgIH0KLQl9CisgICAgICAgIGNsaWVudFN1YmplY3QuZ2V0UHJpbmNpcGFscygpLmFkZEFsbChwcmluY2lwYWxzKTsKIAotCUNhbGxlclByaW5jaXBhbENhbGxiYWNrIGNQQ0IgPSAKLQkgICAgbmV3IENhbGxlclByaW5jaXBhbENhbGxiYWNrKGNsaWVudFN1YmplY3QsY2FsbGVyKTsKKyAgICAgICAgLy8gaWYgbW9yZSB0aGFuIDEgcHJpbiwgY2FsbGVyIHNlbGVjdGlvbiBpcyB1bnByZWRpY3RhYmxlCiAKLQlHcm91cFByaW5jaXBhbENhbGxiYWNrIGdQQ0IgPSBuZXcgR3JvdXBQcmluY2lwYWxDYWxsYmFjawotCSAgICAoY2xpZW50U3ViamVjdCwoY2FsbGVyID09IG51bGwgPyBudWxsIDogYXNzaWduZWRHcm91cHMpKTsKKyAgICAgICAgY2FsbGVyID0gKFByaW5jaXBhbCkgcHJpbmNpcGFscy5pdGVyYXRvcigpLm5leHQoKTsKKyAgICAgICAgfSBlbHNlIGlmIChkZWJ1ZyB8fCBsb2dnZXIuaXNMb2dnYWJsZShMZXZlbC5GSU5FKSl7CisgICAgICAgIGxvZ2dlci5sb2coZGVidWdMZXZlbCwiam1hYy5ub19nc3NfY2FsbGVyX3ByaW5jaXBhbCIpOworICAgICAgICB9CisgICAgfQogCi0JdHJ5IHsKLQkgICAgaGFuZGxlci5oYW5kbGUobmV3IENhbGxiYWNrW10geyBjUENCLCBnUENCIH0gKTsKLQkgICAgaWYgKGRlYnVnIHx8IGxvZ2dlci5pc0xvZ2dhYmxlKExldmVsLkZJTkUpKXsKLQkJbG9nZ2VyLmxvZyhkZWJ1Z0xldmVsLCJqbWFjLmNhbGxlcl9wcmluY2lwYWwiLAotCQkJICAgbmV3IE9iamVjdFtdIHsgY2FsbGVyIH0gKTsKLQkgICAgfQotCSAgICByZXR1cm4gdHJ1ZTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICAvLyBzaG91bGQgbm90IGhhcHBlbgotCSAgICBsb2dnZXIubG9nKExldmVsLldBUk5JTkcsImptYWMuZmFpbGVkX3RvX3NldF9jYWxsZXIiLGUpOwotCX0gCisgICAgQ2FsbGVyUHJpbmNpcGFsQ2FsbGJhY2sgY1BDQiA9CisgICAgICAgIG5ldyBDYWxsZXJQcmluY2lwYWxDYWxsYmFjayhjbGllbnRTdWJqZWN0LGNhbGxlcik7CiAKLQlyZXR1cm4gZmFsc2U7CisgICAgR3JvdXBQcmluY2lwYWxDYWxsYmFjayBnUENCID0gbmV3IEdyb3VwUHJpbmNpcGFsQ2FsbGJhY2sKKyAgICAgICAgKGNsaWVudFN1YmplY3QsKGNhbGxlciA9PSBudWxsID8gbnVsbCA6IGFzc2lnbmVkR3JvdXBzKSk7CisKKyAgICB0cnkgeworICAgICAgICBoYW5kbGVyLmhhbmRsZShuZXcgQ2FsbGJhY2tbXSB7IGNQQ0IsIGdQQ0IgfSApOworICAgICAgICBpZiAoZGVidWcgfHwgbG9nZ2VyLmlzTG9nZ2FibGUoTGV2ZWwuRklORSkpeworICAgICAgICBsb2dnZXIubG9nKGRlYnVnTGV2ZWwsImptYWMuY2FsbGVyX3ByaW5jaXBhbCIsCisgICAgICAgICAgICAgICBuZXcgT2JqZWN0W10geyBjYWxsZXIgfSApOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIC8vIHNob3VsZCBub3QgaGFwcGVuCisgICAgICAgIGxvZ2dlci5sb2coTGV2ZWwuV0FSTklORywiam1hYy5mYWlsZWRfdG9fc2V0X2NhbGxlciIsZSk7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIGJvb2xlYW4gaXNOVExNVG9rZW4oYnl0ZVtdIGJ5dGVzKSB7CiAKLQlTdHJpbmcgcyA9IG5ldyBTdHJpbmcoYnl0ZXMpOwotCXJldHVybiBzLnN0YXJ0c1dpdGgoTlRMTV9JTklUSUFMX1RPS0VOKTsKKyAgICBTdHJpbmcgcyA9IG5ldyBTdHJpbmcoYnl0ZXMpOworICAgIHJldHVybiBzLnN0YXJ0c1dpdGgoTlRMTV9JTklUSUFMX1RPS0VOKTsKICAgICB9CiAKICAgICB2b2lkIGRlYnVnVG9rZW4oU3RyaW5nIG1lc3NhZ2UsIGJ5dGVbXSBieXRlcykgewogCi0JaWYgKGRlYnVnIHx8IGxvZ2dlci5pc0xvZ2dhYmxlKExldmVsLkZJTkUpKSB7CisgICAgaWYgKGRlYnVnIHx8IGxvZ2dlci5pc0xvZ2dhYmxlKExldmVsLkZJTkUpKSB7CiAKLQkgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCSAgICBzYi5hcHBlbmQoIlxuIik7Ci0JICAgIHNiLmFwcGVuZCgiVG9rZW4gIiArIAotCQkgICAgICAoQmFzZTY0LmlzQXJyYXlCeXRlQmFzZTY0KGJ5dGVzKSA/ICJpcyIgOiAiaXMgTm90IikgKwotCQkgICAgICAiIEJhc2U2NCBlbmNvZGVkIiArICJcbiIpOwotCSAgICBzYi5hcHBlbmQoImJ5dGVzOiAiICk7Ci0JICAgIGJvb2xlYW4gZmlyc3QgPSB0cnVlOwotCSAgICBmb3IgKGJ5dGUgYiA6IGJ5dGVzKSB7Ci0JCWludCBpID0gYjsKLQkJaWYgKGZpcnN0KSB7Ci0JCSAgICBzYi5hcHBlbmQoaSk7Ci0JCSAgICBmaXJzdCA9IGZhbHNlOwotCQl9IGVsc2UgewotCQkgICAgc2IuYXBwZW5kKCIsICIgKyBpKTsKLQkJfQotCSAgICB9CisgICAgICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgc2IuYXBwZW5kKCJcbiIpOworICAgICAgICBzYi5hcHBlbmQoIlRva2VuICIgKworICAgICAgICAgICAgICAoQmFzZTY0LmlzQXJyYXlCeXRlQmFzZTY0KGJ5dGVzKSA/ICJpcyIgOiAiaXMgTm90IikgKworICAgICAgICAgICAgICAiIEJhc2U2NCBlbmNvZGVkIiArICJcbiIpOworICAgICAgICBzYi5hcHBlbmQoImJ5dGVzOiAiICk7CisgICAgICAgIGJvb2xlYW4gZmlyc3QgPSB0cnVlOworICAgICAgICBmb3IgKGJ5dGUgYiA6IGJ5dGVzKSB7CisgICAgICAgIGludCBpID0gYjsKKyAgICAgICAgaWYgKGZpcnN0KSB7CisgICAgICAgICAgICBzYi5hcHBlbmQoaSk7CisgICAgICAgICAgICBmaXJzdCA9IGZhbHNlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2IuYXBwZW5kKCIsICIgKyBpKTsKKyAgICAgICAgfQorICAgICAgICB9CiAKLQkgICAgbG9nZ2VyLmxvZyhkZWJ1Z0xldmVsLG1lc3NhZ2Usc2IpOwotCX0KKyAgICAgICAgbG9nZ2VyLmxvZyhkZWJ1Z0xldmVsLG1lc3NhZ2Usc2IpOworICAgIH0KICAgICB9CiAKICAgICB2b2lkIGRlYnVnUmVxdWVzdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCkgewogCi0JaWYgKGRlYnVnIHx8IGxvZ2dlci5pc0xvZ2dhYmxlKExldmVsLkZJTkUpKXsKLQkgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCSAgICBzYi5hcHBlbmQoIlxuIik7Ci0JICAgIHRyeSB7Ci0JCXNiLmFwcGVuZCgiUmVxdWVzdDogIiArcmVxdWVzdC5nZXRSZXF1ZXN0VVJMKCkgKyAiXG4iKTsKLQkJc2IuYXBwZW5kKCJVc2VyUHJpbmNpcGFsOiAiICsgcmVxdWVzdC5nZXRVc2VyUHJpbmNpcGFsKCkgKyAiXG4iKTsKLQkJc2IuYXBwZW5kKCJBdXRoVHlwZTogIiArIHJlcXVlc3QuZ2V0QXV0aFR5cGUoKSsgIlxuIik7Ci0JCXNiLmFwcGVuZCgiSGVhZGVyczoiICsgIlxuIik7Ci0JCUVudW1lcmF0aW9uIG5hbWVzID0gcmVxdWVzdC5nZXRIZWFkZXJOYW1lcygpOwotCQl3aGlsZSAobmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLQkJICAgIFN0cmluZyBuYW1lID0gKFN0cmluZykgbmFtZXMubmV4dEVsZW1lbnQoKTsKLQkJICAgIHNiLmFwcGVuZCgiXHQiICsgbmFtZSArICJcdCIgKyByZXF1ZXN0LmdldEhlYWRlcihuYW1lKSArICJcbiIpOwotCQl9Ci0JCQotCQlsb2dnZXIubG9nKGRlYnVnTGV2ZWwsImptYWMuc2VydmxldF9yZXF1ZXN0IixzYik7CisgICAgaWYgKGRlYnVnIHx8IGxvZ2dlci5pc0xvZ2dhYmxlKExldmVsLkZJTkUpKXsKKyAgICAgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBzYi5hcHBlbmQoIlxuIik7CisgICAgICAgIHRyeSB7CisgICAgICAgIHNiLmFwcGVuZCgiUmVxdWVzdDogIiArcmVxdWVzdC5nZXRSZXF1ZXN0VVJMKCkgKyAiXG4iKTsKKyAgICAgICAgc2IuYXBwZW5kKCJVc2VyUHJpbmNpcGFsOiAiICsgcmVxdWVzdC5nZXRVc2VyUHJpbmNpcGFsKCkgKyAiXG4iKTsKKyAgICAgICAgc2IuYXBwZW5kKCJBdXRoVHlwZTogIiArIHJlcXVlc3QuZ2V0QXV0aFR5cGUoKSsgIlxuIik7CisgICAgICAgIHNiLmFwcGVuZCgiSGVhZGVyczoiICsgIlxuIik7CisgICAgICAgIEVudW1lcmF0aW9uIG5hbWVzID0gcmVxdWVzdC5nZXRIZWFkZXJOYW1lcygpOworICAgICAgICB3aGlsZSAobmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKKyAgICAgICAgICAgIFN0cmluZyBuYW1lID0gKFN0cmluZykgbmFtZXMubmV4dEVsZW1lbnQoKTsKKyAgICAgICAgICAgIHNiLmFwcGVuZCgiXHQiICsgbmFtZSArICJcdCIgKyByZXF1ZXN0LmdldEhlYWRlcihuYW1lKSArICJcbiIpOworICAgICAgICB9CiAKLQkgICAgfSBjYXRjaChUaHJvd2FibGUgdCkgewotCQlsb2dnZXIubG9nKExldmVsLldBUk5JTkcsImptYWMuc2VydmxldF9kZWJ1Z19yZXF1ZXN0Iix0KTsKLQkgICAgfQotCX0KKyAgICAgICAgbG9nZ2VyLmxvZyhkZWJ1Z0xldmVsLCJqbWFjLnNlcnZsZXRfcmVxdWVzdCIsc2IpOworCisgICAgICAgIH0gY2F0Y2goVGhyb3dhYmxlIHQpIHsKKyAgICAgICAgbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCJqbWFjLnNlcnZsZXRfZGVidWdfcmVxdWVzdCIsdCk7CisgICAgICAgIH0KKyAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSBTdHJpbmdbXSBnZXRBc3NpZ25lZEdyb3VwTmFtZXMoKSB7Ci0JU3RyaW5nIGdyb3VwTGlzdCA9IChTdHJpbmcpIAotCSAgICBvcHRpb25zLmdldChBU1NJR05fR1JPVVBTX09QVElPTlNfS0VZKTsKLQlTdHJpbmdbXSBncm91cHMgPSBudWxsOwotCWlmIChncm91cExpc3QgIT0gbnVsbCkgewotCSAgICBTdHJpbmdUb2tlbml6ZXIgdG9rZW5pemVyID0gCi0JCW5ldyBTdHJpbmdUb2tlbml6ZXIoZ3JvdXBMaXN0LCIgLDosOyIpOwotCSAgICBpbnQgY291bnQgPSB0b2tlbml6ZXIuY291bnRUb2tlbnMoKTsKLQkgICAgaWYgKGNvdW50ID4gMCkgewotCQlncm91cHMgPSBuZXcgU3RyaW5nW2NvdW50XTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0JCSAgICBncm91cHNbaV0gPSB0b2tlbml6ZXIubmV4dFRva2VuKCk7Ci0JCX0KLQkgICAgfQotCX0KLQlyZXR1cm4gZ3JvdXBzOworICAgIFN0cmluZyBncm91cExpc3QgPSAoU3RyaW5nKQorICAgICAgICBvcHRpb25zLmdldChBU1NJR05fR1JPVVBTX09QVElPTlNfS0VZKTsKKyAgICBTdHJpbmdbXSBncm91cHMgPSBudWxsOworICAgIGlmIChncm91cExpc3QgIT0gbnVsbCkgeworICAgICAgICBTdHJpbmdUb2tlbml6ZXIgdG9rZW5pemVyID0KKyAgICAgICAgbmV3IFN0cmluZ1Rva2VuaXplcihncm91cExpc3QsIiAsOiw7Iik7CisgICAgICAgIGludCBjb3VudCA9IHRva2VuaXplci5jb3VudFRva2VucygpOworICAgICAgICBpZiAoY291bnQgPiAwKSB7CisgICAgICAgIGdyb3VwcyA9IG5ldyBTdHJpbmdbY291bnRdOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgICAgIGdyb3Vwc1tpXSA9IHRva2VuaXplci5uZXh0VG9rZW4oKTsKKyAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBncm91cHM7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvYnVpbGQueG1sCmluZGV4IDlkMGMxMmEuLmEzYjIwMGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9idWlsZC54bWwKQEAgLTg1LDggKzg1LDggQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iZWpiIj4KICAgICAgICAgPGFudCBkaXI9Im5lZ2F0aXZlUmVhbG1QZXJBcHAiIHRhcmdldD0iYWxsIi8+Ci0gICAgICAgIDxhbnQgZGlyPSJyZWFsbVBlckFwcCIgdGFyZ2V0PSJhbGwiLz4gIAotICAgICAgICA8YW50IGRpcj0ic2Z1bCIgdGFyZ2V0PSJhbGwiLz4gIAorICAgICAgICA8YW50IGRpcj0icmVhbG1QZXJBcHAiIHRhcmdldD0iYWxsIi8+CisgICAgICAgIDxhbnQgZGlyPSJzZnVsIiB0YXJnZXQ9ImFsbCIvPgogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgbmFtZT0ic290ZXJpYSI+CiAgICAgICA8ZGVsZXRlPgpAQCAtOTcsMTMgKzk3LDEzIEBACiAgICAgICA8cmVjb3JkIG5hbWU9InNvdGVyaWEub3V0cHV0IiBhY3Rpb249InN0b3AiIC8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlcG9ydCIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgYWxsIChFeGVjdXRlcyBhbGwgc2VjdXJpdHkgdGVzdHMpCisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHNlY3VyaXR5IHRlc3RzKQogICAgICAgICAgICAgICAgICAgICAgICAgYW50IGVqYiAoRXhlY3V0ZXMgYWxsIGVqYi1yZWxhdGVkIHNlY3VyaXR5IHRlc3RzCi0JCQlhbnQgd2ViIChFeGVjdXRlcyB0aGUgd2ViIHRlc3RzIFRCRCkKLQk8L2VjaG8+CisgICAgICAgICAgICBhbnQgd2ViIChFeGVjdXRlcyB0aGUgd2ViIHRlc3RzIFRCRCkKKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jZXJ0LXJlYWxtLWN1c3RvbS1sb2dpbm1vZHVsZS9XZWJTU0xDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NlcnQtcmVhbG0tY3VzdG9tLWxvZ2lubW9kdWxlL1dlYlNTTENsaWVudC5qYXZhCmluZGV4IDRkZWYzYzQuLjQzOTEzYjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NlcnQtcmVhbG0tY3VzdG9tLWxvZ2lubW9kdWxlL1dlYlNTTENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NlcnQtcmVhbG0tY3VzdG9tLWxvZ2lubW9kdWxlL1dlYlNTTENsaWVudC5qYXZhCkBAIC0zNCw3ICszNCw3IEBACiBwdWJsaWMgY2xhc3MgV2ViU1NMQ2xpZW50IHsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX05BTUUKLSAgICAgICAgPSAic2VjdXJpdHktY2VydC1yZWFsbS1jdXN0b20tbG9naW5tb2R1bGUiOyAgICAKKyAgICAgICAgPSAic2VjdXJpdHktY2VydC1yZWFsbS1jdXN0b20tbG9naW5tb2R1bGUiOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVYUEVDVEVEX1JFU1BPTlNFCiAgICAgICAgID0gIlRoaXMgaXMgQ049U1NMVGVzdCwgT1U9U3VuIEphdmEgU3lzdGVtIEFwcGxpY2F0aW9uIFNlcnZlciwgTz1TdW4gTWljcm9zeXN0ZW1zLCBMPVNhbnRhIENsYXJhLCBTVD1DYWxpZm9ybmlhLCBDPVVTIGZyb20gaW5kZXguanNwIjsKQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgU3RyaW5nIHNzbFBhc3N3b3JkID0gYXJnc1s1XTsKIAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImhvc3QvcG9ydD0iICsgaG9zdCArICIvIiArIHBvcnQpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbihURVNUX05BTUUpOwogICAgICAgICAgICAgU1NMU29ja2V0RmFjdG9yeSBzc2YgPSBnZXRTU0xTb2NrZXRGYWN0b3J5KHNzbFBhc3N3b3JkLApAQCAtNjMsOSArNjMsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiL2luZGV4LmpzcCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NmKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBwYXJzZVJlc3BvbnNlKGNvbm5lY3Rpb24pOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIHQucHJpbnRTdGFja1RyYWNlKCk7CkBAIC04Miw3ICs4Miw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbiA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5nZXRJbnB1dFN0cmVhbSgpKSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOwogICAgICAgICAgICAgd2hpbGUgKChsaW5lID0gaW4ucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGlmIChFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKQEAgLTExMiw3ICsxMTIsNyBAQAogCiAgICAgICAgIFNTTENvbnRleHQgY3R4ID0gU1NMQ29udGV4dC5nZXRJbnN0YW5jZSgiVExTIik7CiAKLSAgICAgICAgLy8gS2V5c3RvcmUgCisgICAgICAgIC8vIEtleXN0b3JlCiAgICAgICAgIEtleVN0b3JlIGtzID0gS2V5U3RvcmUuZ2V0SW5zdGFuY2UoIkpLUyIpOwogICAgICAgICBjaGFyW10gcGFzc3BocmFzZSA9IHNzbFBhc3N3b3JkLnRvQ2hhckFycmF5KCk7CiAgICAgICAgIGtzLmxvYWQobmV3IEZpbGVJbnB1dFN0cmVhbShrZXlTdG9yZVBhdGgpLCBwYXNzcGhyYXNlKTsKQEAgLTEyNiw3ICsxMjYsNyBAQAogICAgICAgICB0bWYuaW5pdCh0cnVzdFN0b3JlKTsKIAogICAgICAgICBjdHguaW5pdChrbWYuZ2V0S2V5TWFuYWdlcnMoKSx0bWYuZ2V0VHJ1c3RNYW5hZ2VycygpLCBudWxsKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGN0eC5nZXRTb2NrZXRGYWN0b3J5KCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jZXJ0LXJlYWxtLWN1c3RvbS1sb2dpbm1vZHVsZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY2VydC1yZWFsbS1jdXN0b20tbG9naW5tb2R1bGUvYnVpbGQucHJvcGVydGllcwppbmRleCBkYWI4MjczLi4yMjhhYTFjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jZXJ0LXJlYWxtLWN1c3RvbS1sb2dpbm1vZHVsZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NlcnQtcmVhbG0tY3VzdG9tLWxvZ2lubW9kdWxlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNlcnQtcmVhbG0tY3VzdG9tLWxvZ2lubW9kdWxlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIgLz4KQEAgLTI3LDYgKzI3LDYgQEAKIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0ic3RhdGVmdWxMb2dpbkJlYW4iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0ic3RhdGVmdWxMb2dpbkJlYW4iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NlcnQtcmVhbG0tY3VzdG9tLWxvZ2lubW9kdWxlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NlcnQtcmVhbG0tY3VzdG9tLWxvZ2lubW9kdWxlL2J1aWxkLnhtbAppbmRleCAzOTAwMzI5Li5iYjE0YzM4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jZXJ0LXJlYWxtLWN1c3RvbS1sb2dpbm1vZHVsZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY2VydC1yZWFsbS1jdXN0b20tbG9naW5tb2R1bGUvYnVpbGQueG1sCkBAIC0zMyw3ICszMyw3IEBACiAgICAgJmNvbW1vblJ1bjsKICAgICAmY29tbW9uU2VjdXJpdHk7CiAgICAgJnRlc3RQcm9wZXJ0aWVzOwotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLCBzZXR1cCwgZGVwbG95LCBydW4sIHVuZGVwbG95LCB1bnNldHVwIi8+CiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIgLz4KICAgICAgICAgPC9hbnRjYWxsPgpAQCAtOTcsMjQgKzk3LDI0IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbixwcmVwYXJlLXN0b3JlLWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZW52LWNoZWNrIiAvPgotCTxjb3B5IGZpbGU9IiR7YXNzZW1ibGUuZGlyfS90ZXN0LSR7YXBwbmFtZX0uamFyIgorICAgIDxjb3B5IGZpbGU9IiR7YXNzZW1ibGUuZGlyfS90ZXN0LSR7YXBwbmFtZX0uamFyIgogICAgICAgICAgICAgdG9kaXI9IiR7ZW52LlMxQVNfSE9NRX0vbGliIi8+Ci0JPGNvcHkgZmlsZT0iJHthZG1pbi5kb21haW4uZGlyfS8ke2FkbWluLmRvbWFpbn0vY29uZmlnL2xvZ2luLmNvbmYiCisgICAgPGNvcHkgZmlsZT0iJHthZG1pbi5kb21haW4uZGlyfS8ke2FkbWluLmRvbWFpbn0vY29uZmlnL2xvZ2luLmNvbmYiCiAgICAgICAgICAgICB0b2ZpbGU9IiR7YWRtaW4uZG9tYWluLmRpcn0vJHthZG1pbi5kb21haW59L2NvbmZpZy9sb2dpbi5jb25mLk9SSUciLz4KLQk8Y29uY2F0IGRlc3RmaWxlPSIke2FkbWluLmRvbWFpbi5kaXJ9LyR7YWRtaW4uZG9tYWlufS9jb25maWcvbG9naW4uY29uZiIgYXBwZW5kPSJ0cnVlIj48IVtDREFUQVtjZXJ0UmVhbG0geworICAgIDxjb25jYXQgZGVzdGZpbGU9IiR7YWRtaW4uZG9tYWluLmRpcn0vJHthZG1pbi5kb21haW59L2NvbmZpZy9sb2dpbi5jb25mIiBhcHBlbmQ9InRydWUiPjwhW0NEQVRBW2NlcnRSZWFsbSB7CiAgICAgICAgIGNvbS5zdW4uczFhc2Rldi5zZWN1cml0eS5jZXJ0cmVhbG0ubG0uQ2VydGlmaWNhdGVMTSByZXF1aXJlZDsKIH07XV0+Ci0JPC9jb25jYXQ+CisgICAgPC9jb25jYXQ+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXItaW5zdGFuY2UtY29tbW9uIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0ic2V0IiAvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFzLnByb3BzIiB2YWx1ZT0iJHthcy5wcm9wc30iLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgogICAgICAgICAgICAgICAgICAgIHZhbHVlPSJjb25maWdzLmNvbmZpZy5zZXJ2ZXItY29uZmlnLnNlY3VyaXR5LXNlcnZpY2UuYXV0aC1yZWFsbS5jZXJ0aWZpY2F0ZS5wcm9wZXJ0eS5qYWFzLWNvbnRleHQ9Y2VydFJlYWxtIiAvPgotCTwvYW50Y2FsbD4KKyAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuc2V0dXAiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlc3RvcmUiLz4KICAgICA8L3RhcmdldD4KQEAgLTEzMCw3ICsxMzAsNyBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlbW92ZS1zdG9yZS1jb21tb24iLz4KICAgICAgICAgPG1vdmUgZmlsZT0iJHthZG1pbi5kb21haW4uZGlyfS8ke2FkbWluLmRvbWFpbn0vY29uZmlnL2xvZ2luLmNvbmYuT1JJRyIKICAgICAgICAgICAgIHRvZmlsZT0iJHthZG1pbi5kb21haW4uZGlyfS8ke2FkbWluLmRvbWFpbn0vY29uZmlnL2xvZ2luLmNvbmYiLz4KLQk8ZGVsZXRlIGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vbGliL3Rlc3QtJHthcHBuYW1lfS5qYXIiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICAgIDxkZWxldGUgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9saWIvdGVzdC0ke2FwcG5hbWV9LmphciIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXItaW5zdGFuY2UtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NlcnQtcmVhbG0tY3VzdG9tLWxvZ2lubW9kdWxlL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NlcnQtcmVhbG0tY3VzdG9tLWxvZ2lubW9kdWxlL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCBjYTU5ZjcxLi5jNDkzMDViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jZXJ0LXJlYWxtLWN1c3RvbS1sb2dpbm1vZHVsZS9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY2VydC1yZWFsbS1jdXN0b20tbG9naW5tb2R1bGUvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yMiwxMCArMjIsMTAgQEAKICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiCiAgICAgICAgICB2ZXJzaW9uPSIyLjQiPgotICAgICAKKwogICAgIDxzZWN1cml0eS1jb25zdHJhaW50PgogICAgICAgPHdlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgotCSAgPHdlYi1yZXNvdXJjZS1uYW1lPlByb3RlY3RlZCBBcmVhPC93ZWItcmVzb3VyY2UtbmFtZT4KKyAgICAgIDx3ZWItcmVzb3VyY2UtbmFtZT5Qcm90ZWN0ZWQgQXJlYTwvd2ViLXJlc291cmNlLW5hbWU+CiAgICAgICAgICAgPHVybC1wYXR0ZXJuPi9pbmRleC5qc3A8L3VybC1wYXR0ZXJuPgogICAgICAgICAgIDxodHRwLW1ldGhvZD5ERUxFVEU8L2h0dHAtbWV0aG9kPgogICAgICAgICAgIDxodHRwLW1ldGhvZD5HRVQ8L2h0dHAtbWV0aG9kPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY2VydC1yZWFsbS1jdXN0b20tbG9naW5tb2R1bGUvc3JjL0NlcnRpZmljYXRlTE0uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NlcnQtcmVhbG0tY3VzdG9tLWxvZ2lubW9kdWxlL3NyYy9DZXJ0aWZpY2F0ZUxNLmphdmEKaW5kZXggOWU2ZDMzNC4uNGE1NmJhMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY2VydC1yZWFsbS1jdXN0b20tbG9naW5tb2R1bGUvc3JjL0NlcnRpZmljYXRlTE0uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jZXJ0LXJlYWxtLWN1c3RvbS1sb2dpbm1vZHVsZS9zcmMvQ2VydGlmaWNhdGVMTS5qYXZhCkBAIC0zOCwxMSArMzgsMTEgQEAKICAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIG9uZSBoYXMgdGhlIGFwcGxpY2F0aW9uIG5hbWUgYW5kIHRoZSBETiBvZgogICAgICAgICAgICAgLy8gdGhlIGNlcnRpZmljYXRlLiBBIHN1aXRhYmxlIGxvZ2luIGRlY2lzaW9uIGNhbiBiZSBtYWRlIGhlcmUuCiAgICAgICAgICAgICBpZiAobmV4dC5zdGFydHNXaXRoKCJDTj0iKSkgewotCQlTdHJpbmcgY25hbWUgPSBuZXh0LnN1YnN0cmluZygzKTsKLQkJaWYgKGNuYW1lLmVxdWFscygiU1NMVGVzdCIpKXsKLQkJCWNvbW1pdFVzZXJBdXRoZW50aWNhdGlvbihuZXcgU3RyaW5nW117Z2V0QXBwTmFtZSgpICsgIjphbGljZS1ncm91cCJ9KTsKLQkJCXJldHVybjsKLQkJfQorICAgICAgICBTdHJpbmcgY25hbWUgPSBuZXh0LnN1YnN0cmluZygzKTsKKyAgICAgICAgaWYgKGNuYW1lLmVxdWFscygiU1NMVGVzdCIpKXsKKyAgICAgICAgICAgIGNvbW1pdFVzZXJBdXRoZW50aWNhdGlvbihuZXcgU3RyaW5nW117Z2V0QXBwTmFtZSgpICsgIjphbGljZS1ncm91cCJ9KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHRocm93IG5ldyBMb2dpbkV4Y2VwdGlvbigiTm8gT1UgZm91bmQuIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jaXBoZXJ0ZXN0L0NpcGhlclRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NpcGhlcnRlc3QvQ2lwaGVyVGVzdC5qYXZhCmluZGV4IGZiYjVlMGEuLjNhNGE2Y2MgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NpcGhlcnRlc3QvQ2lwaGVyVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NpcGhlcnRlc3QvQ2lwaGVyVGVzdC5qYXZhCkBAIC03Nyw3ICs3Nyw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCB2ZXJib3NlKFN0cmluZyBtc2cpIHsKLSAgICAgICAgaWYoIFZFUkJPU0VfRkxBRykgCisgICAgICAgIGlmKCBWRVJCT1NFX0ZMQUcpCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obXNnKTsKICAgICB9CiAKQEAgLTExMCw3ICsxMTAsNyBAQAogICAgICAgICAgICAgICAgIHNlcnZlclBvcnQgPSBJbnRlZ2VyLnBhcnNlSW50KGFyZ3NbKytpXSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYoIGFyZ3NbaV0uaW50ZXJuKCkgPT0gU0hPVUxEX1BBU1NfT1BUSU9OLmludGVybigpICkgewogICAgICAgICAgICAgICAgIHNob3VsZFBhc3MgPSBhcmdzWysraV07Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAqIFdvcmthcm91bmQgZm9yIEphdmFTRSBidWcgKDY1MTg4MjcpIHdoZXJlCiAgICAgICAgICAgICAgICAgICogYXJndW1lbnRzIG9mIGxlbmd0aCAwIGFyZSBub3QgcGFzc2VkIGluIG9uIFdpbmRvd3MuCkBAIC0xNjYsMTAgKzE2NiwxMCBAQAogCiAgICAgfQogCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBpbnRlcmFjdGl2ZSgpIAorICAgIHByaXZhdGUgc3RhdGljIHZvaWQgaW50ZXJhY3RpdmUoKQogICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24gewogCi0gICAgICAgIEJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IAorICAgICAgICBCdWZmZXJlZFJlYWRlciByZWFkZXIgPQogICAgICAgICAgICAgbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihTeXN0ZW0uaW4pKTsKIAogICAgICAgICB3aGlsZSh0cnVlKSB7CkBAIC0xOTAsNyArMTkwLDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHByaXZhdGUgc3RhdGljIHZvaWQgbm9uSW50ZXJhY3RpdmUoU3RyaW5nIGVuYWJsZWRDaXBoZXIsIAorICAgIHByaXZhdGUgc3RhdGljIHZvaWQgbm9uSW50ZXJhY3RpdmUoU3RyaW5nIGVuYWJsZWRDaXBoZXIsCiAgICAgICAgIFN0cmluZyBzaG91bGRQYXNzLCBTdHJpbmcgc2hvdWxkRmFpbCkgewogCiAvLyAgICAgICAgIGlmKCBlbmFibGVkQ2lwaGVyID09IG51bGwgKSB7CkBAIC0yMDcsMTMgKzIwNywxMyBAQAogICAgICAgICAgICBjdC5ydW4oKTsKICAgICB9CiAKLSAgICBwcml2YXRlIHN0YXRpYyB2b2lkIG5vbkludGVyYWN0aXZlKFN0cmluZ1tdIGVuYWJsZWRDaXBoZXIsIAorICAgIHByaXZhdGUgc3RhdGljIHZvaWQgbm9uSW50ZXJhY3RpdmUoU3RyaW5nW10gZW5hYmxlZENpcGhlciwKICAgICAgICAgU3RyaW5nIHNob3VsZFBhc3MsIFN0cmluZyBzaG91bGRGYWlsKSB7CiAgICAgICAgIC8vIFRPRE8KICAgICB9CiAKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHJpdmF0ZSBpbnQgc3RhcnRDaXBoZXIgPSAtMTsKQEAgLTIyOCw3ICsyMjgsNyBAQAogICAgICAgICBjaXBoZXJzWzBdID0gU1VQUE9SVEVEX0NJUEhFUlNbc3RhcnRDaXBoZXJdOwogCiAgICAgICAgIHRoaXMuc2hvdWxkUGFzcyA9IHNob3VsZFBhc3M7Ci0gICAgICAgIHRoaXMuc2hvdWxkRmFpbCA9IHNob3VsZEZhaWw7IAorICAgICAgICB0aGlzLnNob3VsZEZhaWwgPSBzaG91bGRGYWlsOwogCiAgICAgfQogCkBAIC0yMzcsOSArMjM3LDkgQEAKICAgICAgICAgICAgIGNpcGhlcnMgPSBuZXcgU3RyaW5nWzFdOwogICAgICAgICAgICAgY2lwaGVyc1swXSA9IGNpcGhlck5hbWU7CiAgICAgICAgIH0KLSAKKwogICAgICAgICB0aGlzLnNob3VsZFBhc3MgPSBzaG91bGRQYXNzOwotICAgICAgICB0aGlzLnNob3VsZEZhaWwgPSBzaG91bGRGYWlsOyAKKyAgICAgICAgdGhpcy5zaG91bGRGYWlsID0gc2hvdWxkRmFpbDsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CkBAIC0yNzQsNyArMjc0LDcgQEAKICAgICAgICAgICAgIGludCBpbmRleCA9IHNob3VsZFBhc3MuaW5kZXhPZih0aGF0UGFzc2VkW2ldKTsKICAgICAgICAgICAgIGlmKCBpbmRleCA8IDAgKSB7CiAgICAgICAgICAgICAgICAgLy8gaXMgbm90IGluIHRoZSBzaG91bGQgcGFzcywgdGVzdCBmYWlsZWQKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNpcGhlciAtICIgKyB0aGF0UGFzc2VkW2ldICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDaXBoZXIgLSAiICsgdGhhdFBhc3NlZFtpXSArCiAgICAgICAgICAgICAgICAgICAgICIgLSBwYXNlZCwgYnV0IHNob3VsZCBub3QgaGF2ZS4gVGVzdCBmYWlsZWQiKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjkyLDcgKzI5Miw3IEBACiAgICAgICAgICAgICBpbnQgaW5kZXggPSBzaG91bGRQYXNzLmluZGV4T2YodGhhdEZhaWxlZFtpXSk7CiAgICAgICAgICAgICBpZiggaW5kZXggPj0gMCApIHsKICAgICAgICAgICAgICAgICAvLyBpcyBpbiB0aGUgc2hvdWxkIHBhc3MsIGJ1dCBkaWQgbm90Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDaXBoZXIgLSAiICsgdGhhdEZhaWxlZFtpXSArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2lwaGVyIC0gIiArIHRoYXRGYWlsZWRbaV0gKwogICAgICAgICAgICAgICAgICAgICAiIC0gZmFpbGVkLCBidXQgc2hvdWxkIGhhdmUgcGFzc2VkLiBUZXN0IGZhaWxlZCIpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0zMDcsNyArMzA3LDcgQEAKIAogICAgIHByaXZhdGUgIHZvaWQgZG9TU0xUZXN0KFN0cmluZ1tdIGVuYWJsZUNpcGhlcnMpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAKLSAgICAgICAgU1NMU29ja2V0RmFjdG9yeSBzc2xTb2NrZXRGYWN0b3J5ID0gIAorICAgICAgICBTU0xTb2NrZXRGYWN0b3J5IHNzbFNvY2tldEZhY3RvcnkgPQogICAgICAgICAgICAgKFNTTFNvY2tldEZhY3RvcnkpU1NMU29ja2V0RmFjdG9yeS5nZXREZWZhdWx0KCk7CiAKICAgICAgICAgU1NMU29ja2V0IHNlY3VyZVNvY2tldCA9IChTU0xTb2NrZXQpCkBAIC0zMTksNyArMzE5LDcgQEAKICAgICAgICAgQnVmZmVyZWRXcml0ZXIgYnVmZldyaXRlciA9IG5ldyBCdWZmZXJlZFdyaXRlcigKICAgICAgICAgICAgIG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIoc2VjdXJlU29ja2V0LmdldE91dHB1dFN0cmVhbSgpKSk7CiAgICAgICAgIGJ1ZmZXcml0ZXIud3JpdGUoSFRUUF9HRVRfUkVRVUVTVCk7Ci0gICAgICAgIGJ1ZmZXcml0ZXIubmV3TGluZSgpOyAKKyAgICAgICAgYnVmZldyaXRlci5uZXdMaW5lKCk7CiAgICAgICAgIGJ1ZmZXcml0ZXIubmV3TGluZSgpOwogICAgICAgICBidWZmV3JpdGVyLmZsdXNoKCk7CiAgICAgICAgIC8vYnVmZldyaXRlci5jbG9zZSgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY2lwaGVydGVzdC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY2lwaGVydGVzdC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDVkYTRiZjkuLjZmYTE3YjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NpcGhlcnRlc3QvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jaXBoZXJ0ZXN0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InNlY3VyaXR5Ii8+CiA8cHJvcGVydHkgbmFtZT0ic3ViLW1vZHVsZSIgdmFsdWU9ImNpcGhlcnRlc3QiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NpcGhlcnRlc3QvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY2lwaGVydGVzdC9idWlsZC54bWwKaW5kZXggODM4YzhkYS4uZDY0ZDdhYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY2lwaGVydGVzdC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY2lwaGVydGVzdC9idWlsZC54bWwKQEAgLTM1LDE5ICszNSwxOSBAQAogICAgJmNvbW1vblNlY3VyaXR5OwogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+Ci0JCVVzYWdlOgotCQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIGNpcGhlcnRlc3RzKQotCTwvZWNobz4KKyAgICA8ZWNobz4KKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgY2lwaGVydGVzdHMpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLCBzZXR1cCwgZGVwbG95LHJ1biwgdW5kZXBsb3ksIHVuc2V0dXAiPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24sIHByZXBhcmUtc3RvcmUtY29tbW9uIj4KLQk8cHJvcGVydHkgbmFtZT0iaHR0cHMuMS5wb3J0IiB2YWx1ZT0iMSR7aHR0cHMucG9ydH0iIC8+Ci0JPHByb3BlcnR5IG5hbWU9Imh0dHBzLjIucG9ydCIgdmFsdWU9IjIke2h0dHBzLnBvcnR9IiAvPgotCTxjb3B5IGZpbGU9InRlc3RzZXR1cC5hc2FkbWluLnRlbXBsYXRlIiB0b2ZpbGU9InRlc3RzZXR1cC5hc2FkbWluIiBvdmVyd3JpdGU9InRydWUiLz4KKyAgICA8cHJvcGVydHkgbmFtZT0iaHR0cHMuMS5wb3J0IiB2YWx1ZT0iMSR7aHR0cHMucG9ydH0iIC8+CisgICAgPHByb3BlcnR5IG5hbWU9Imh0dHBzLjIucG9ydCIgdmFsdWU9IjIke2h0dHBzLnBvcnR9IiAvPgorICAgIDxjb3B5IGZpbGU9InRlc3RzZXR1cC5hc2FkbWluLnRlbXBsYXRlIiB0b2ZpbGU9InRlc3RzZXR1cC5hc2FkbWluIiBvdmVyd3JpdGU9InRydWUiLz4KICAgICAgICAgPHJlcGxhY2UgZmlsZT0idGVzdHNldHVwLmFzYWRtaW4iPgogICAgICAgICAgICAgPHJlcGxhY2VmaWx0ZXIgdG9rZW49IkBIVFRQUzFQT1JUQCIgdmFsdWU9IiR7aHR0cHMuMS5wb3J0fSIvPgogICAgICAgICAgICAgPHJlcGxhY2VmaWx0ZXIgdG9rZW49IkBIVFRQUzJQT1JUQCIgdmFsdWU9IiR7aHR0cHMuMi5wb3J0fSIvPgpAQCAtMTAxLDcgKzEwMSw3IEBACiAKICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iQ2lwaGVyVGVzdCIgZm9yaz0idHJ1ZSI+CiAgICAgICAgIDxjbGFzc3BhdGg+Ci0gIAkgICAgICAgPHBhdGhlbGVtZW50IHBhdGg9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7czFhc3Rlc3QuY2xhc3NwYXRofSIvPgorICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBwYXRoPSIke2J1aWxkLmNsYXNzZXMuZGlyfToke3MxYXN0ZXN0LmNsYXNzcGF0aH0iLz4KICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDxqdm1hcmcgdmFsdWU9Ii1EamF2YXgubmV0LnNzbC50cnVzdFN0b3JlPSR7bXl0cnVzdHN0b3JlLmRiLmZpbGV9Ii8+CiAgICAgICAgIDxqdm1hcmcgdmFsdWU9Ii1EamF2YXgubmV0LnNzbC50cnVzdFN0b3JlUGFzc3dvcmQ9JHtzc2wucGFzc3dvcmR9Ii8+CkBAIC0xMjUsNyArMTI1LDcgQEAKIAogICAgICAgPHByb3BlcnR5IG5hbWU9Imh0dHBzLjEucG9ydCIgdmFsdWU9IjEke2h0dHBzLnBvcnR9IiAvPgogICAgICAgPHByb3BlcnR5IG5hbWU9Imh0dHBzLjIucG9ydCIgdmFsdWU9IjIke2h0dHBzLnBvcnR9IiAvPgotICAgICAgCisKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2lwaGVyLXRlc3QiPgogICAgICAgICA8cGFyYW0gbmFtZT0ic2hvdWxkLXBhc3MtY2lwaGVyIiB2YWx1ZT0iIi8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJlbmFibGUtY2lwaGVyIiAgICAgIHZhbHVlPSJTU0xfUlNBX1dJVEhfREVTX0NCQ19TSEEiLz4KQEAgLTE1OSwxMSArMTU5LDExIEBACiAKIAogICAgIDx0YXJnZXQgbmFtZT0icnVuY2lwaGVydGVzdC0yIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgIAorCiAgICAgIDxwcm9wZXJ0eSBuYW1lPSJodHRwcy4xLnBvcnQiIHZhbHVlPSIxJHtodHRwcy5wb3J0fSIgLz4KICAgICAgPHByb3BlcnR5IG5hbWU9Imh0dHBzLjIucG9ydCIgdmFsdWU9IjIke2h0dHBzLnBvcnR9IiAvPgotIAotPCEtLSBKREsgOCB1MTcyIC0gM0RFUyBjaXBoZXIgc3VpdGVzIGRpc2FibGVkIAorCis8IS0tIEpESyA4IHUxNzIgLSAzREVTIGNpcGhlciBzdWl0ZXMgZGlzYWJsZWQKICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjaXBoZXItdGVzdCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzaG91bGQtcGFzcy1jaXBoZXIiIHZhbHVlPSJTU0xfUlNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQSIvPgogICAgICAgICA8cGFyYW0gbmFtZT0iZW5hYmxlLWNpcGhlciIgICAgICB2YWx1ZT0iU1NMX1JTQV9XSVRIXzNERVNfRURFX0NCQ19TSEEiLz4KQEAgLTE5MCw3ICsxOTAsNyBAQAogICAgICAgICA8cGFyYW0gbmFtZT0iZW5hYmxlLWNpcGhlciIgICAgICB2YWx1ZT0iU1NMX1JTQV9XSVRIX05VTExfTUQ1Ii8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJodHRwcy5wb3J0IiAgICAgICAgIHZhbHVlPSIke2h0dHBzLjIucG9ydH0iLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICAgIAorCiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNpcGhlci10ZXN0Ij4KICAgICAgICAgPHBhcmFtIG5hbWU9InNob3VsZC1wYXNzLWNpcGhlciIgdmFsdWU9IlNTTF9SU0FfV0lUSF9OVUxMX1NIQSIvPgogICAgICAgICA8cGFyYW0gbmFtZT0iZW5hYmxlLWNpcGhlciIgICAgICB2YWx1ZT0iU1NMX1JTQV9XSVRIX05VTExfU0hBIi8+CkBAIC0yMDQsOCArMjA0LDggQEAKICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAotICAgIDx0YXJnZXQgbmFtZT0icnVuY2lwaGVydGVzdC0zIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+ICAgIAotICAgICA8cHJvcGVydHkgbmFtZT0iaHR0cHMuMS5wb3J0IiB2YWx1ZT0iMSR7aHR0cHMucG9ydH0iIC8+ICAgCisgICAgPHRhcmdldCBuYW1lPSJydW5jaXBoZXJ0ZXN0LTMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KKyAgICAgPHByb3BlcnR5IG5hbWU9Imh0dHBzLjEucG9ydCIgdmFsdWU9IjEke2h0dHBzLnBvcnR9IiAvPgogICAgICA8cHJvcGVydHkgbmFtZT0iaHR0cHMuMi5wb3J0IiB2YWx1ZT0iMiR7aHR0cHMucG9ydH0iIC8+CiAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2lwaGVyLXRlc3QiPgogICAgICAgICA8cGFyYW0gbmFtZT0ic2hvdWxkLXBhc3MtY2lwaGVyIiB2YWx1ZT0iIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jb21tb24ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY29tbW9uLnhtbAppbmRleCA0OWQ1MmI5Li5hYjgxOTI4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jb21tb24ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NvbW1vbi54bWwKQEAgLTcxLDkgKzcxLDkgQEAKIAogPHRhcmdldCBuYW1lPSJjcmVhdGUtdXNlciI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLXVzZXItY29tbW9uIj4KLQkgICAgPHBhcmFtIG5hbWU9InVzZXIiIHZhbHVlPSJoYXJwcmVldCIvPgotCSAgICA8cGFyYW0gbmFtZT0icGFzc3dvcmQiIHZhbHVlPSJoYXJwcmVldCIvPgotCSAgICA8cGFyYW0gbmFtZT0iZ3JvdXBzIiB2YWx1ZT0iZW1wbG95ZWUiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InVzZXIiIHZhbHVlPSJoYXJwcmVldCIvPgorICAgICAgICA8cGFyYW0gbmFtZT0icGFzc3dvcmQiIHZhbHVlPSJoYXJwcmVldCIvPgorICAgICAgICA8cGFyYW0gbmFtZT0iZ3JvdXBzIiB2YWx1ZT0iZW1wbG95ZWUiLz4KICAgICAgICA8L2FudGNhbGw+CiA8L3RhcmdldD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY29udGFpbmVyLWF1dGgvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NvbnRhaW5lci1hdXRoL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMzRiNDA1NS4uZmQ5OWUyOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY29udGFpbmVyLWF1dGgvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jb250YWluZXItYXV0aC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw2ICsxNSw2IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzZWN1cml0eSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY29udGFpbmVyLWF1dGgvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY29udGFpbmVyLWF1dGgvYnVpbGQueG1sCmluZGV4IGExZjI1MzcuLjg4ZTY2NzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NvbnRhaW5lci1hdXRoL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jb250YWluZXItYXV0aC9idWlsZC54bWwKQEAgLTMxLDcgKzMxLDcgQEAKICAgICZjb21tb25CdWlsZDsKICAgICZjb21tb25SdW47CiAgICAmdGVzdFByb3BlcnRpZXM7Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQsIHJ1biIvPgogCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtNDAsNDEgKzQwLDQxIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KLQk8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgotICAJPGVjaG8gbWVzc2FnZT0iQ29tcGlsaW5nIHRlc3Qgc291cmNlIGZpbGVzIiBsZXZlbD0idmVyYm9zZSIvPgorICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CisgICAgICA8ZWNobyBtZXNzYWdlPSJDb21waWxpbmcgdGVzdCBzb3VyY2UgZmlsZXMiIGxldmVsPSJ2ZXJib3NlIi8+CiAgICAgIDxqYXZhYyBzcmNkaXI9ImphdXRoIgotICAgIAlkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKLSAgICAJY2xhc3NwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9hcHBzZXJ2LXJ0Lmphcjoke3MxYXN0ZXN0LmNsYXNzcGF0aH0iCi0gICAgCWRlYnVnPSJvbiIKLSAgICAJZmFpbG9uZXJyb3I9InRydWUiCi0JLz4KKyAgICAgICAgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCisgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvYXBwc2Vydi1ydC5qYXI6JHtzMWFzdGVzdC5jbGFzc3BhdGh9IgorICAgICAgICBkZWJ1Zz0ib24iCisgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIgorICAgIC8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICA8L3RhcmdldD4KIAogICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQk8YW50Y2FsbCB0YXJnZXQ9InJ1bmFjY3htbCIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0icnVuYWNjeG1sIi8+CiAgICA8L3RhcmdldD4KLQkKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuYWNjeG1sIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiA8IS0tVE9ETyB1bmNvbW1lbnQgbGF0ZXItLT4KLSAgICAJPGphdmEgY2xhc3NuYW1lPSJBdXRoQ29uZmlnVGVzdCIgZm9yaz0ieWVzIj4KLQk8Y2xhc3NwYXRoPgotCQk8cGF0aGVsZW1lbnQgcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvYXBwc2Vydi1ydC5qYXI6JHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gCi0JCTxwYXRoZWxlbWVudCBwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9hcHBzZXJ2LWFkbWluLmphciIvPiAKLQkJPHBhdGhlbGVtZW50IHBhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2oyZWUuamFyIi8+IAotCQk8cGF0aGVsZW1lbnQgcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvam1hYy1hcGkuamFyIi8+IAotCQk8cGF0aGVsZW1lbnQgcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvZHRkcyIvPiAKLQkJPHBhdGhlbGVtZW50IHBhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL3NjaGVtYXMiLz4gCi0JCTxwYXRoZWxlbWVudCBwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIvPgotCTwvY2xhc3NwYXRoPgotCTxhcmcgdmFsdWU9InhtbC1wYXJzZSIgLz4gCi0JPHN5c3Byb3BlcnR5IGtleT0iamF2YS5zZWN1cml0eS5kZWJ1ZyIgdmFsdWU9ImNvbmZpZ2ZpbGUsY29uZmlneG1scGFyc2VyIi8+Ci0JPHN5c3Byb3BlcnR5IGtleT0ic3VuLWFjYy54bWwudXJsIiB2YWx1ZT0iJHtlbnYuQVBTX0hPTUV9L2RldnRlc3RzL3NlY3VyaXR5L2NvbnRhaW5lci1hdXRoL3Rlc3RDb25maWcvc3VuLWFjYy54bWwiLz4KLQk8IS0tPGp2bWFyZyB2YWx1ZT0iLVhkZWJ1ZyIgLz4KLQk8anZtYXJnIHZhbHVlPSItWHJ1bmpkd3A6dHJhbnNwb3J0PWR0X3NvY2tldCxzZXJ2ZXI9eSxzdXNwZW5kPXksYWRkcmVzcz04MDA4Ii8+LS0+IAotCTwvamF2YT4gCisgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iQXV0aENvbmZpZ1Rlc3QiIGZvcms9InllcyI+CisgICAgPGNsYXNzcGF0aD4KKyAgICAgICAgPHBhdGhlbGVtZW50IHBhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2FwcHNlcnYtcnQuamFyOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CisgICAgICAgIDxwYXRoZWxlbWVudCBwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9hcHBzZXJ2LWFkbWluLmphciIvPgorICAgICAgICA8cGF0aGVsZW1lbnQgcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvajJlZS5qYXIiLz4KKyAgICAgICAgPHBhdGhlbGVtZW50IHBhdGg9IiR7ZW52LlMxQVNfSE9NRX0vbGliL2ptYWMtYXBpLmphciIvPgorICAgICAgICA8cGF0aGVsZW1lbnQgcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvZHRkcyIvPgorICAgICAgICA8cGF0aGVsZW1lbnQgcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvc2NoZW1hcyIvPgorICAgICAgICA8cGF0aGVsZW1lbnQgcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiLz4KKyAgICA8L2NsYXNzcGF0aD4KKyAgICA8YXJnIHZhbHVlPSJ4bWwtcGFyc2UiIC8+CisgICAgPHN5c3Byb3BlcnR5IGtleT0iamF2YS5zZWN1cml0eS5kZWJ1ZyIgdmFsdWU9ImNvbmZpZ2ZpbGUsY29uZmlneG1scGFyc2VyIi8+CisgICAgPHN5c3Byb3BlcnR5IGtleT0ic3VuLWFjYy54bWwudXJsIiB2YWx1ZT0iJHtlbnYuQVBTX0hPTUV9L2RldnRlc3RzL3NlY3VyaXR5L2NvbnRhaW5lci1hdXRoL3Rlc3RDb25maWcvc3VuLWFjYy54bWwiLz4KKyAgICA8IS0tPGp2bWFyZyB2YWx1ZT0iLVhkZWJ1ZyIgLz4KKyAgICA8anZtYXJnIHZhbHVlPSItWHJ1bmpkd3A6dHJhbnNwb3J0PWR0X3NvY2tldCxzZXJ2ZXI9eSxzdXNwZW5kPXksYWRkcmVzcz04MDA4Ii8+LS0+CisgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgogICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NvbnRhaW5lci1hdXRoL2phdXRoL0F1dGhDb25maWdUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jb250YWluZXItYXV0aC9qYXV0aC9BdXRoQ29uZmlnVGVzdC5qYXZhCmluZGV4IGY4ZDNlYWMuLjI4NjM4OWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NvbnRhaW5lci1hdXRoL2phdXRoL0F1dGhDb25maWdUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY29udGFpbmVyLWF1dGgvamF1dGgvQXV0aENvbmZpZ1Rlc3QuamF2YQpAQCAtMjgsMjQgKzI4LDI0IEBACiAgKiAxLiBkb21haW4ueG1sIHRlc3Q6CiAgKgogICogICAgJWphdmEgLURkb21haW4ueG1sLnVybD1kb21haW4ueG1sCi0gKgktRGphdmEuc2VjdXJpdHkuZGVidWc9Y29uZmlnZmlsZSxjb25maWd4bWxwYXJzZXIKLSAqCS1jbGFzc3BhdGggLjpjbGFzc2VzOmNvbmZpZy1hcGkuamFyOmFwcHNlcnYtY29tbW9ucy5qYXI6c2NoZW1hMmJlYW5zLmphcgotICoJQXV0aENvbmZpZ1Rlc3QgeG1sLXBhcnNlCi0gKiAKKyAqICAgIC1EamF2YS5zZWN1cml0eS5kZWJ1Zz1jb25maWdmaWxlLGNvbmZpZ3htbHBhcnNlcgorICogICAgLWNsYXNzcGF0aCAuOmNsYXNzZXM6Y29uZmlnLWFwaS5qYXI6YXBwc2Vydi1jb21tb25zLmphcjpzY2hlbWEyYmVhbnMuamFyCisgKiAgICBBdXRoQ29uZmlnVGVzdCB4bWwtcGFyc2UKKyAqCiAgKiAyLiBzdW4tYWNjLnhtbCB0ZXN0OgogICoKICAqICAgICVqYXZhIC1Ec3VuLWFjYy54bWwudXJsPXN1bi1hY2MueG1sCi0gKgktRGphdmEuc2VjdXJpdHkuZGVidWc9Y29uZmlnZmlsZSxjb25maWd4bWxwYXJzZXIKLSAqCS1jbGFzc3BhdGggLjpjbGFzc2VzOmNvbmZpZy1hcGkuamFyOmFwcHNlcnYtY29tbW9ucy5qYXI6c2NoZW1hMmJlYW5zLmphcgotICoJQXV0aENvbmZpZ1Rlc3QgeG1sLXBhcnNlCi0gKiAKKyAqICAgIC1EamF2YS5zZWN1cml0eS5kZWJ1Zz1jb25maWdmaWxlLGNvbmZpZ3htbHBhcnNlcgorICogICAgLWNsYXNzcGF0aCAuOmNsYXNzZXM6Y29uZmlnLWFwaS5qYXI6YXBwc2Vydi1jb21tb25zLmphcjpzY2hlbWEyYmVhbnMuamFyCisgKiAgICBBdXRoQ29uZmlnVGVzdCB4bWwtcGFyc2UKKyAqCiAgKiAzLiBjdXN0b20gbW9kdWxlIGNvbmZpZyBmaWxlIHRlc3Q6CiAgKgogICogICAgJWphdmEgLURqYXZhLmF1dGhjb25maWc9dGVzdENvbmZpZy9jb25maWcubW9kdWxlCi0gKgktRGNvbmZpZ2ZpbGUucGFyc2VyPWZpbGUKLSAqCS1EamF2YS5zZWN1cml0eS5kZWJ1Zz1jb25maWdmaWxlLGNvbmZpZ2ZpbGVwYXJzZXIKLSAqCS1jbGFzc3BhdGggLjpjbGFzc2VzOmNvbmZpZy1hcGkuamFyOmFwcHNlcnYtY29tbW9ucy5qYXI6c2NoZW1hMmJlYW5zLmphcgotICoJQXV0aENvbmZpZ1Rlc3QgZmlsZS1wYXJzZQorICogICAgLURjb25maWdmaWxlLnBhcnNlcj1maWxlCisgKiAgICAtRGphdmEuc2VjdXJpdHkuZGVidWc9Y29uZmlnZmlsZSxjb25maWdmaWxlcGFyc2VyCisgKiAgICAtY2xhc3NwYXRoIC46Y2xhc3Nlczpjb25maWctYXBpLmphcjphcHBzZXJ2LWNvbW1vbnMuamFyOnNjaGVtYTJiZWFucy5qYXIKKyAqICAgIEF1dGhDb25maWdUZXN0IGZpbGUtcGFyc2UKICAqLwogCiBwdWJsaWMgY2xhc3MgQXV0aENvbmZpZ1Rlc3QgZXh0ZW5kcyBUaHJlYWQgewpAQCAtNTMsNDQgKzUzLDQ0IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNPQVAgPSAiU09BUCI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhUVFAgPSAiSFRUUCI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVKQiA9ICJFSkIiOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIHRlc3RJZCA9ICJTZWM6OkNvbnRhaW5lci1BdXRoX1Rlc3RfTnVtXyI7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBBdXRoUG9saWN5IGNvbmZpZ1JlcXVlc3QgPQotCQluZXcgQXV0aFBvbGljeShBdXRoUG9saWN5LlNPVVJDRV9BVVRIX1NFTkRFUiwgdHJ1ZSwgdHJ1ZSk7CisgICAgICAgIG5ldyBBdXRoUG9saWN5KEF1dGhQb2xpY3kuU09VUkNFX0FVVEhfU0VOREVSLCB0cnVlLCB0cnVlKTsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEF1dGhQb2xpY3kgY29uZmlnUmVzcG9uc2UgPQotCQluZXcgQXV0aFBvbGljeShBdXRoUG9saWN5LlNPVVJDRV9BVVRIX0NPTlRFTlQsIHRydWUsIGZhbHNlKTsKKyAgICAgICAgbmV3IEF1dGhQb2xpY3koQXV0aFBvbGljeS5TT1VSQ0VfQVVUSF9DT05URU5ULCB0cnVlLCBmYWxzZSk7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBBdXRoUG9saWN5IGRkUmVxdWVzdCA9Ci0JCW5ldyBBdXRoUG9saWN5KEF1dGhQb2xpY3kuU09VUkNFX0FVVEhfQ09OVEVOVCwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgbmV3IEF1dGhQb2xpY3koQXV0aFBvbGljeS5TT1VSQ0VfQVVUSF9DT05URU5ULCBmYWxzZSwgZmFsc2UpOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQXV0aFBvbGljeSBkZFJlc3BvbnNlID0KLQkJbmV3IEF1dGhQb2xpY3koQXV0aFBvbGljeS5TT1VSQ0VfQVVUSF9TRU5ERVIsIGZhbHNlLCBmYWxzZSk7CisgICAgICAgIG5ldyBBdXRoUG9saWN5KEF1dGhQb2xpY3kuU09VUkNFX0FVVEhfU0VOREVSLCBmYWxzZSwgZmFsc2UpOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQXV0aFBvbGljeSBkZEh0dHBSZXF1ZXN0ID0KLQkJbmV3IEF1dGhQb2xpY3koQXV0aFBvbGljeS5TT1VSQ0VfQVVUSF9OT05FLCBmYWxzZSwgZmFsc2UpOworICAgICAgICBuZXcgQXV0aFBvbGljeShBdXRoUG9saWN5LlNPVVJDRV9BVVRIX05PTkUsIGZhbHNlLCBmYWxzZSk7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBBdXRoUG9saWN5IGRkSHR0cFJlc3BvbnNlID0KLQkJbmV3IEF1dGhQb2xpY3koQXV0aFBvbGljeS5TT1VSQ0VfQVVUSF9DT05URU5ULCBmYWxzZSwgZmFsc2UpOworICAgICAgICBuZXcgQXV0aFBvbGljeShBdXRoUG9saWN5LlNPVVJDRV9BVVRIX0NPTlRFTlQsIGZhbHNlLCBmYWxzZSk7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBBdXRoUG9saWN5IGRkRWpiUmVzcG9uc2UgPQotCQluZXcgQXV0aFBvbGljeShBdXRoUG9saWN5LlNPVVJDRV9BVVRIX05PTkUsIHRydWUsIGZhbHNlKTsKKyAgICAgICAgbmV3IEF1dGhQb2xpY3koQXV0aFBvbGljeS5TT1VSQ0VfQVVUSF9OT05FLCB0cnVlLCBmYWxzZSk7CiAKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBpbnQgdGVzdG51bSA9IDA7CiAgICAgICAgIGlmIChhcmdzID09IG51bGwgfHwgYXJncy5sZW5ndGggPT0gMCB8fAogICAgICAgICBhcmdzWzBdLmVxdWFsc0lnbm9yZUNhc2UoInhtbC1wYXJzZSIpKSB7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgdGVzdG51bSA9IHhtbFBhcnNlKHRlc3RudW0pOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBlbHNlIGlmIChhcmdzWzBdLmVxdWFsc0lnbm9yZUNhc2UoImZpbGUtcGFyc2UiKSkgewotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHRlc3RudW0gPSBmaWxlUGFyc2UodGVzdG51bSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigidW5yZWNvZ25pemVkIGNvbW1hbmQgZm9yIEF1dGhDb25maWdUZXN0Iik7CiAgICAgICAgIH0KQEAgLTEwMywxMSArMTAzLDExIEBACiAgICAgICAgICAgICBBdXRoQ29uZmlnIGNvbmZpZyA9IEF1dGhDb25maWcuZ2V0QXV0aENvbmZpZygpOwogICAgICAgICAgICAgQ2xpZW50QXV0aENvbnRleHQgY2FjOwogICAgICAgICAgICAgU2VydmVyQXV0aENvbnRleHQgc2FjOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN1YmplY3Qgc3ViamVjdCA9IG5ldyBTdWJqZWN0KCk7CiAgICAgICAgICAgICBIYXNoTWFwIG9wdGlvbnM7CiAgICAgICAgICAgICBUZXN0Q3JlZGVudGlhbCBjcmVkMTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAqIFRlc3QgTlVMTCByZXR1cm4KICAgICAgICAgICAgICAqLwpAQCAtMTE5LDE4ICsxMTksMTggQEAKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0aWQsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB0ZXN0bnVtKys7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RpbmcgQ29udGFpbmVyLWF1dGggdGVzdGlkID0gIit0ZXN0bnVtKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoY29uZmlnLmdldFNlcnZlckF1dGhDb250ZXh0KEVKQiwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCkgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RpZCt0ZXN0bnVtLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfWVsc2UKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0aWQrdGVzdG51bSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIHRlc3RudW0rKzsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAqIFNPQVAgLSBDTElFTlQKICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0aW5nIENvbnRhaW5lci1hdXRoIHRlc3RpZCA9ICIrdGVzdG51bSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgY2FjID0gY29uZmlnLmdldENsaWVudEF1dGhDb250ZXh0KFNPQVAsICJmb28iLCBudWxsLCBudWxsLCBudWxsKTsKICAgICAgICAgICAgIGNhYy5zZWN1cmVSZXF1ZXN0KG51bGwsIHN1YmplY3QsIG51bGwpOwogICAgICAgICAgICAgb3B0aW9ucyA9IG5ldyBIYXNoTWFwKCk7CkBAIC0xNDcsNyArMTQ3LDcgQEAKICAgICAgICAgICAgIGNhYy5kaXNwb3NlU3ViamVjdChzdWJqZWN0LCBudWxsKTsKICAgICAgICAgICAgIHRlc3RudW0rKzsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdGluZyBDb250YWluZXItYXV0aCB0ZXN0aWQgPSAiK3Rlc3RudW0pOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGNhYyA9IGNvbmZpZy5nZXRDbGllbnRBdXRoQ29udGV4dChTT0FQLAogICAgICAgICAgICAgICAgICAgICAiYXBwMSIsCiAgICAgICAgICAgICAgICAgICAgIGRkUmVxdWVzdCwKQEAgLTE1OCw3ICsxNTgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEhhc2hNYXAoKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGRkUmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIGRkUmVzcG9uc2UpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmICghc3ViamVjdC5nZXRQdWJsaWNDcmVkZW50aWFscygpLmNvbnRhaW5zKGNyZWQxKSkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RpZCt0ZXN0bnVtLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfWVsc2UKQEAgLTE2Niw3ICsxNjYsNyBAQAogCiAgICAgICAgICAgICBjYWMuZGlzcG9zZVN1YmplY3Qoc3ViamVjdCwgbnVsbCk7CiAgICAgICAgICAgICB0ZXN0bnVtKys7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0aW5nIENvbnRhaW5lci1hdXRoIHRlc3RpZCA9ICIrdGVzdG51bSk7CiAgICAgICAgICAgICBjYWMgPSBjb25maWcuZ2V0Q2xpZW50QXV0aENvbnRleHQoU09BUCwKICAgICAgICAgICAgICAgICAgICAgICAgICJhcHA0IiwKQEAgLTE3Nyw3ICsxNzcsNyBAQAogICAgICAgICAgICAgY3JlZDEgPSBuZXcgVGVzdENyZWRlbnRpYWwoIkNsaWVudE1vZHVsZTEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBIYXNoTWFwKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRSZXF1ZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwpOyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwpOwogICAgICAgICAgICAgaWYgKCFzdWJqZWN0LmdldFB1YmxpY0NyZWRlbnRpYWxzKCkuY29udGFpbnMoY3JlZDEpKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdGlkK3Rlc3RudW0sIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9ZWxzZQpAQCAtMTg2LDcgKzE4Niw3IEBACiAgICAgICAgICAgICBjYWMuZGlzcG9zZVN1YmplY3Qoc3ViamVjdCwgbnVsbCk7CiAgICAgICAgICAgICB0ZXN0bnVtKys7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RpbmcgQ29udGFpbmVyLWF1dGggdGVzdGlkID0gIit0ZXN0bnVtKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBjYWMgPSBjb25maWcuZ2V0Q2xpZW50QXV0aENvbnRleHQoU09BUCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFwcDMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLApAQCAtMjAxLDExICsyMDEsMTEgQEAKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0aWQrdGVzdG51bSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH1lbHNlCiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdGlkK3Rlc3RudW0sIHN0YXQuUEFTUyk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIGNhYy5kaXNwb3NlU3ViamVjdChzdWJqZWN0LCBudWxsKTsKICAgICAgICAgICAgIHRlc3RudW0rKzsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdGluZyBDb250YWluZXItYXV0aCB0ZXN0aWQgPSAiK3Rlc3RudW0pOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGNhYyA9IGNvbmZpZy5nZXRDbGllbnRBdXRoQ29udGV4dChTT0FQLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvbyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZFJlcXVlc3QsCkBAIC0yMjIsMTEgKzIyMiwxMSBAQAogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RpZCt0ZXN0bnVtLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfWVsc2UKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0aWQrdGVzdG51bSwgc3RhdC5QQVNTKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgY2FjLmRpc3Bvc2VTdWJqZWN0KHN1YmplY3QsIG51bGwpOwogICAgICAgICAgICAgdGVzdG51bSsrOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0aW5nIENvbnRhaW5lci1hdXRoIHRlc3RpZCA9ICIrdGVzdG51bSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgY2FjID0gY29uZmlnLmdldENsaWVudEF1dGhDb250ZXh0KFNPQVAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRSZXF1ZXN0LApAQCAtMjQzLDEyICsyNDMsMTIgQEAKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0aWQrdGVzdG51bSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH1lbHNlCiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdGlkK3Rlc3RudW0sIHN0YXQuUEFTUyk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIGNhYy5kaXNwb3NlU3ViamVjdChzdWJqZWN0LCBudWxsKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICB0ZXN0bnVtKys7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RpbmcgQ29udGFpbmVyLWF1dGggdGVzdGlkID0gIit0ZXN0bnVtKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBjYWMgPSBjb25maWcuZ2V0Q2xpZW50QXV0aENvbnRleHQoU09BUCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcHAxIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkUmVxdWVzdCwKQEAgLTI2MywxMSArMjYzLDExIEBACiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdGlkK3Rlc3RudW0sIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9ZWxzZQogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RpZCt0ZXN0bnVtLCBzdGF0LlBBU1MpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICBjYWMuZGlzcG9zZVN1YmplY3Qoc3ViamVjdCwgbnVsbCk7CiAgICAgICAgICAgICB0ZXN0bnVtKys7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RpbmcgQ29udGFpbmVyLWF1dGggdGVzdGlkID0gIit0ZXN0bnVtKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBjYWMgPSBjb25maWcuZ2V0Q2xpZW50QXV0aENvbnRleHQoU09BUCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcHAxIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCkBAIC0yODIsMTMgKzI4MiwxMyBAQAogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RpZCt0ZXN0bnVtLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfWVsc2UKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0aWQrdGVzdG51bSwgc3RhdC5QQVNTKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgY2FjLmRpc3Bvc2VTdWJqZWN0KHN1YmplY3QsIG51bGwpOwogICAgICAgICAgICAgdGVzdG51bSsrOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0aW5nIENvbnRhaW5lci1hdXRoIHRlc3RpZCA9ICIrdGVzdG51bSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgLy8gU0tJUCBERCBVUkk4IGVudHJ5IGluIFhNTC1QQVJTRSBjYXNlCi0gICAgICAgICAgICAKKwogICAgICAgICAgICAgY2FjID0gY29uZmlnLmdldENsaWVudEF1dGhDb250ZXh0KFNPQVAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRSZXF1ZXN0LApAQCAtMzA5LDcgKzMwOSw3IEBACiAgICAgICAgICAgICBjYWMuZGlzcG9zZVN1YmplY3Qoc3ViamVjdCwgbnVsbCk7CiAgICAgICAgICAgICB0ZXN0bnVtKys7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RpbmcgQ29udGFpbmVyLWF1dGggdGVzdGlkID0gIit0ZXN0bnVtKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBjYWMgPSBjb25maWcuZ2V0Q2xpZW50QXV0aENvbnRleHQoU09BUCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLApAQCAtMzI2LDE1ICszMjYsMTUgQEAKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0aWQrdGVzdG51bSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH1lbHNlCiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdGlkK3Rlc3RudW0sIHN0YXQuUEFTUyk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIGNhYy5kaXNwb3NlU3ViamVjdChzdWJqZWN0LCBudWxsKTsKICAgICAgICAgICAgIHRlc3RudW0rKzsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdGluZyBDb250YWluZXItYXV0aCB0ZXN0aWQgPSAiK3Rlc3RudW0pOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgICogU09BUCAtIFNFUlZFUgogICAgICAgICAgICAgICovCi0gICAgICAgICAgICAKKwogICAgICAgICAgICAgc2FjID0gY29uZmlnLmdldFNlcnZlckF1dGhDb250ZXh0KFNPQVAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRSZXF1ZXN0LApAQCAtMzUyLDcgKzM1Miw3IEBACiAgICAgICAgICAgICBjYWMuZGlzcG9zZVN1YmplY3Qoc3ViamVjdCwgbnVsbCk7CiAgICAgICAgICAgICB0ZXN0bnVtKys7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RpbmcgQ29udGFpbmVyLWF1dGggdGVzdGlkID0gIit0ZXN0bnVtKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBzYWMgPSBjb25maWcuZ2V0U2VydmVyQXV0aENvbnRleHQoU09BUCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLApAQCAtMzY3LDE1ICszNjcsMTUgQEAKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0aWQrdGVzdG51bSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH1lbHNlCiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdGlkK3Rlc3RudW0sIHN0YXQuUEFTUyk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIGNhYy5kaXNwb3NlU3ViamVjdChzdWJqZWN0LCBudWxsKTsKICAgICAgICAgICAgIHRlc3RudW0rKzsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdGluZyBDb250YWluZXItYXV0aCB0ZXN0aWQgPSAiK3Rlc3RudW0pOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgICogU09BUCAtIGNoZWNrIG51bGwgcmVxdWVzdC9yZXNwb25zZSBwb2xpY2llcwogICAgICAgICAgICAgICovCi0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKGNvbmZpZy5nZXRTZXJ2ZXJBdXRoQ29udGV4dChTT0FQLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXBwNiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCkBAIC0zODQsMzMgKzM4NCwzMyBAQAogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RpZCt0ZXN0bnVtLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfWVsc2UKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0aWQrdGVzdG51bSwgc3RhdC5QQVNTKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgdGVzdG51bSsrOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0aW5nIENvbnRhaW5lci1hdXRoIHRlc3RpZCA9ICIrdGVzdG51bSk7CiAgICAgICAgIH1maW5hbGx5ewogICAgICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXR1cm4gdGVzdG51bTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgZmlsZVBhcnNlKGludCB0ZXN0bnVtKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgQXV0aENvbmZpZyBjb25maWcgPSBBdXRoQ29uZmlnLmdldEF1dGhDb25maWcoKTsKICAgICAgICAgQ2xpZW50QXV0aENvbnRleHQgY2FjOwogICAgICAgICBTZXJ2ZXJBdXRoQ29udGV4dCBzYWM7Ci0gICAgICAgIAorCiAgICAgICAgIFN1YmplY3Qgc3ViamVjdCA9IG5ldyBTdWJqZWN0KCk7CiAgICAgICAgIEhhc2hNYXAgb3B0aW9uczsKICAgICAgICAgVGVzdENyZWRlbnRpYWwgY3JlZDE7CiAgICAgICAgIFRlc3RDcmVkZW50aWFsIGNyZWQyOwotICAgICAgICAKKwogICAgICAgICB0ZXN0bnVtID0geG1sUGFyc2UodGVzdG51bSk7Ci0gICAgICAgIAorCiAgICAgICAgIC8qKgogICAgICAgICAgKiB0ZXN0IGNhc2UgZm9yIG11bHRpcGxlIG1vZHVsZXMKICAgICAgICAgICovCi0gICAgICAgIAorCiAgICAgICAgIGNhYyA9IGNvbmZpZy5nZXRDbGllbnRBdXRoQ29udGV4dChTT0FQLAogICAgICAgICAiYXBwNSIsCiAgICAgICAgIGRkUmVxdWVzdCwKQEAgLTQzMSwxMSArNDMxLDExIEBACiAgICAgICAgIH0KICAgICAgICAgY2FjLmRpc3Bvc2VTdWJqZWN0KHN1YmplY3QsIG51bGwpOwogICAgICAgICB0ZXN0bnVtKys7Ci0gICAgICAgIAorCiAgICAgICAgIC8qKgogICAgICAgICAgKiBIVFRQIC0gU0VSVkVSCiAgICAgICAgICAqLwotICAgICAgICAKKwogICAgICAgICBzYWMgPSBjb25maWcuZ2V0U2VydmVyQXV0aENvbnRleHQoSFRUUCwKICAgICAgICAgbnVsbCwKICAgICAgICAgZGRIdHRwUmVxdWVzdCwKQEAgLTQ1Miw3ICs0NTIsNyBAQAogICAgICAgICB9CiAgICAgICAgIHNhYy5kaXNwb3NlU3ViamVjdChzdWJqZWN0LCBudWxsKTsKICAgICAgICAgdGVzdG51bSsrOwotICAgICAgICAKKwogICAgICAgICBzYWMgPSBjb25maWcuZ2V0U2VydmVyQXV0aENvbnRleHQoSFRUUCwKICAgICAgICAgImFwcDkiLAogICAgICAgICBudWxsLApAQCAtNDY5LDcgKzQ2OSw3IEBACiAgICAgICAgIH0KICAgICAgICAgc2FjLmRpc3Bvc2VTdWJqZWN0KHN1YmplY3QsIG51bGwpOwogICAgICAgICB0ZXN0bnVtKys7Ci0gICAgICAgIAorCiAgICAgICAgIC8qKgogICAgICAgICAgKiBFSkIgLSBTRVJWRVIKICAgICAgICAgICovCkBAIC00ODksNyArNDg5LDcgQEAKICAgICAgICAgfQogICAgICAgICBzYWMuZGlzcG9zZVN1YmplY3Qoc3ViamVjdCwgbnVsbCk7CiAgICAgICAgIHRlc3RudW0rKzsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIHRlc3RudW07CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY29udGFpbmVyLWF1dGgvamF1dGgvQ2xpZW50TW9kdWxlMS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY29udGFpbmVyLWF1dGgvamF1dGgvQ2xpZW50TW9kdWxlMS5qYXZhCmluZGV4IDBhN2VhNmEuLmVhOTMwZTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NvbnRhaW5lci1hdXRoL2phdXRoL0NsaWVudE1vZHVsZTEuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jb250YWluZXItYXV0aC9qYXV0aC9DbGllbnRNb2R1bGUxLmphdmEKQEAgLTI2LDI2ICsyNiwyNiBAQAogCiAvKgogICAgIHB1YmxpYyB2b2lkIGluaXRpYWxpemUoQXV0aFBvbGljeSByZXF1ZXN0UG9saWN5LAotCQkJQXV0aFBvbGljeSByZXNwb25zZVBvbGljeSwKLQkJCUNhbGxiYWNrSGFuZGxlciBoYW5kbGVyLAotCQkJTWFwIG9wdGlvbnMpIHsKKyAgICAgICAgICAgIEF1dGhQb2xpY3kgcmVzcG9uc2VQb2xpY3ksCisgICAgICAgICAgICBDYWxsYmFja0hhbmRsZXIgaGFuZGxlciwKKyAgICAgICAgICAgIE1hcCBvcHRpb25zKSB7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2VjdXJlUmVxdWVzdChBdXRoUGFyYW0gcGFyYW0sCi0JCQkJU3ViamVjdCBzdWJqZWN0LAotCQkJCU1hcCBzaGFyZWRTdGF0ZSkKLQkJdGhyb3dzIEF1dGhFeGNlcHRpb24geworICAgICAgICAgICAgICAgIFN1YmplY3Qgc3ViamVjdCwKKyAgICAgICAgICAgICAgICBNYXAgc2hhcmVkU3RhdGUpCisgICAgICAgIHRocm93cyBBdXRoRXhjZXB0aW9uIHsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB2YWxpZGF0ZVJlc3BvbnNlKEF1dGhQYXJhbSBwYXJhbSwKLQkJCQlTdWJqZWN0IHN1YmplY3QsCi0JCQkJTWFwIHNoYXJlZFN0YXRlKQotCQl0aHJvd3MgQXV0aEV4Y2VwdGlvbiB7CisgICAgICAgICAgICAgICAgU3ViamVjdCBzdWJqZWN0LAorICAgICAgICAgICAgICAgIE1hcCBzaGFyZWRTdGF0ZSkKKyAgICAgICAgdGhyb3dzIEF1dGhFeGNlcHRpb24gewogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRpc3Bvc2VTdWJqZWN0KFN1YmplY3Qgc3ViamVjdCwKLQkJCQlNYXAgc2hhcmVkU3RhdGUpCi0JCXRocm93cyBBdXRoRXhjZXB0aW9uIHsKKyAgICAgICAgICAgICAgICBNYXAgc2hhcmVkU3RhdGUpCisgICAgICAgIHRocm93cyBBdXRoRXhjZXB0aW9uIHsKICAgICB9CiAqLwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY29udGFpbmVyLWF1dGgvamF1dGgvQ2xpZW50TW9kdWxlMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY29udGFpbmVyLWF1dGgvamF1dGgvQ2xpZW50TW9kdWxlMi5qYXZhCmluZGV4IDAxY2NhYmMuLjdlZTM0OTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NvbnRhaW5lci1hdXRoL2phdXRoL0NsaWVudE1vZHVsZTIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jb250YWluZXItYXV0aC9qYXV0aC9DbGllbnRNb2R1bGUyLmphdmEKQEAgLTI2LDI2ICsyNiwyNiBAQAogCiAvKgogICAgIHB1YmxpYyB2b2lkIGluaXRpYWxpemUoQXV0aFBvbGljeSByZXF1ZXN0UG9saWN5LAotCQkJQXV0aFBvbGljeSByZXNwb25zZVBvbGljeSwKLQkJCUNhbGxiYWNrSGFuZGxlciBoYW5kbGVyLAotCQkJTWFwIG9wdGlvbnMpIHsKKyAgICAgICAgICAgIEF1dGhQb2xpY3kgcmVzcG9uc2VQb2xpY3ksCisgICAgICAgICAgICBDYWxsYmFja0hhbmRsZXIgaGFuZGxlciwKKyAgICAgICAgICAgIE1hcCBvcHRpb25zKSB7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2VjdXJlUmVxdWVzdChBdXRoUGFyYW0gcGFyYW0sCi0JCQkJU3ViamVjdCBzdWJqZWN0LAotCQkJCU1hcCBzaGFyZWRTdGF0ZSkKLQkJdGhyb3dzIEF1dGhFeGNlcHRpb24geworICAgICAgICAgICAgICAgIFN1YmplY3Qgc3ViamVjdCwKKyAgICAgICAgICAgICAgICBNYXAgc2hhcmVkU3RhdGUpCisgICAgICAgIHRocm93cyBBdXRoRXhjZXB0aW9uIHsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB2YWxpZGF0ZVJlc3BvbnNlKEF1dGhQYXJhbSBwYXJhbSwKLQkJCQlTdWJqZWN0IHN1YmplY3QsCi0JCQkJTWFwIHNoYXJlZFN0YXRlKQotCQl0aHJvd3MgQXV0aEV4Y2VwdGlvbiB7CisgICAgICAgICAgICAgICAgU3ViamVjdCBzdWJqZWN0LAorICAgICAgICAgICAgICAgIE1hcCBzaGFyZWRTdGF0ZSkKKyAgICAgICAgdGhyb3dzIEF1dGhFeGNlcHRpb24gewogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRpc3Bvc2VTdWJqZWN0KFN1YmplY3Qgc3ViamVjdCwKLQkJCQlNYXAgc2hhcmVkU3RhdGUpCi0JCXRocm93cyBBdXRoRXhjZXB0aW9uIHsKKyAgICAgICAgICAgICAgICBNYXAgc2hhcmVkU3RhdGUpCisgICAgICAgIHRocm93cyBBdXRoRXhjZXB0aW9uIHsKICAgICB9CiAqLwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY29udGFpbmVyLWF1dGgvamF1dGgvQ29tbW9uTW9kdWxlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jb250YWluZXItYXV0aC9qYXV0aC9Db21tb25Nb2R1bGUuamF2YQppbmRleCBjYjljNWQ4Li42MWY4ZWViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jb250YWluZXItYXV0aC9qYXV0aC9Db21tb25Nb2R1bGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jb250YWluZXItYXV0aC9qYXV0aC9Db21tb25Nb2R1bGUuamF2YQpAQCAtMzIsNzMgKzMyLDczIEBACiAgICAgcHJvdGVjdGVkIENvbW1vbk1vZHVsZSgpIHsgfQogCiAgICAgcHVibGljIHZvaWQgaW5pdGlhbGl6ZShBdXRoUG9saWN5IHJlcXVlc3RQb2xpY3ksCi0JCQlBdXRoUG9saWN5IHJlc3BvbnNlUG9saWN5LAotCQkJQ2FsbGJhY2tIYW5kbGVyIGhhbmRsZXIsCi0JCQlNYXAgb3B0aW9ucykgewotCXRoaXMucmVxdWVzdFBvbGljeSA9IHJlcXVlc3RQb2xpY3k7Ci0JdGhpcy5yZXNwb25zZVBvbGljeSA9IHJlc3BvbnNlUG9saWN5OwotCXRoaXMuaGFuZGxlciA9IGhhbmRsZXI7Ci0JdGhpcy5vcHRpb25zID0gb3B0aW9uczsKKyAgICAgICAgICAgIEF1dGhQb2xpY3kgcmVzcG9uc2VQb2xpY3ksCisgICAgICAgICAgICBDYWxsYmFja0hhbmRsZXIgaGFuZGxlciwKKyAgICAgICAgICAgIE1hcCBvcHRpb25zKSB7CisgICAgdGhpcy5yZXF1ZXN0UG9saWN5ID0gcmVxdWVzdFBvbGljeTsKKyAgICB0aGlzLnJlc3BvbnNlUG9saWN5ID0gcmVzcG9uc2VQb2xpY3k7CisgICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlcjsKKyAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNlY3VyZVJlcXVlc3QoQXV0aFBhcmFtIHBhcmFtLAotCQkJCVN1YmplY3Qgc3ViamVjdCwKLQkJCQlNYXAgc2hhcmVkU3RhdGUpCi0JCXRocm93cyBBdXRoRXhjZXB0aW9uIHsKLQlpZiAoY3JlZCA9PSBudWxsKSB7Ci0JICAgIGNyZWQgPSBuZXcgVGVzdENyZWRlbnRpYWwodGhpcy5nZXRDbGFzcygpLmdldE5hbWUoKSwKLQkJCQlvcHRpb25zLAotCQkJCXJlcXVlc3RQb2xpY3ksCi0JCQkJcmVzcG9uc2VQb2xpY3kpOwotCX0KLQlzdWJqZWN0LmdldFB1YmxpY0NyZWRlbnRpYWxzKCkuYWRkKGNyZWQpOworICAgICAgICAgICAgICAgIFN1YmplY3Qgc3ViamVjdCwKKyAgICAgICAgICAgICAgICBNYXAgc2hhcmVkU3RhdGUpCisgICAgICAgIHRocm93cyBBdXRoRXhjZXB0aW9uIHsKKyAgICBpZiAoY3JlZCA9PSBudWxsKSB7CisgICAgICAgIGNyZWQgPSBuZXcgVGVzdENyZWRlbnRpYWwodGhpcy5nZXRDbGFzcygpLmdldE5hbWUoKSwKKyAgICAgICAgICAgICAgICBvcHRpb25zLAorICAgICAgICAgICAgICAgIHJlcXVlc3RQb2xpY3ksCisgICAgICAgICAgICAgICAgcmVzcG9uc2VQb2xpY3kpOworICAgIH0KKyAgICBzdWJqZWN0LmdldFB1YmxpY0NyZWRlbnRpYWxzKCkuYWRkKGNyZWQpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHZhbGlkYXRlUmVzcG9uc2UoQXV0aFBhcmFtIHBhcmFtLAotCQkJCVN1YmplY3Qgc3ViamVjdCwKLQkJCQlNYXAgc2hhcmVkU3RhdGUpCi0JCXRocm93cyBBdXRoRXhjZXB0aW9uIHsKLQlpZiAoY3JlZCA9PSBudWxsKSB7Ci0JICAgIGNyZWQgPSBuZXcgVGVzdENyZWRlbnRpYWwodGhpcy5nZXRDbGFzcygpLmdldE5hbWUoKSwKLQkJCQlvcHRpb25zLAotCQkJCXJlcXVlc3RQb2xpY3ksCi0JCQkJcmVzcG9uc2VQb2xpY3kpOwotCX0KLQlzdWJqZWN0LmdldFB1YmxpY0NyZWRlbnRpYWxzKCkuYWRkKGNyZWQpOworICAgICAgICAgICAgICAgIFN1YmplY3Qgc3ViamVjdCwKKyAgICAgICAgICAgICAgICBNYXAgc2hhcmVkU3RhdGUpCisgICAgICAgIHRocm93cyBBdXRoRXhjZXB0aW9uIHsKKyAgICBpZiAoY3JlZCA9PSBudWxsKSB7CisgICAgICAgIGNyZWQgPSBuZXcgVGVzdENyZWRlbnRpYWwodGhpcy5nZXRDbGFzcygpLmdldE5hbWUoKSwKKyAgICAgICAgICAgICAgICBvcHRpb25zLAorICAgICAgICAgICAgICAgIHJlcXVlc3RQb2xpY3ksCisgICAgICAgICAgICAgICAgcmVzcG9uc2VQb2xpY3kpOworICAgIH0KKyAgICBzdWJqZWN0LmdldFB1YmxpY0NyZWRlbnRpYWxzKCkuYWRkKGNyZWQpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHZhbGlkYXRlUmVxdWVzdChBdXRoUGFyYW0gcGFyYW0sCi0JCQkJU3ViamVjdCBzdWJqZWN0LAotCQkJCU1hcCBzaGFyZWRTdGF0ZSkKLQkJdGhyb3dzIEF1dGhFeGNlcHRpb24gewotCWlmIChjcmVkID09IG51bGwpIHsKLQkgICAgY3JlZCA9IG5ldyBUZXN0Q3JlZGVudGlhbCh0aGlzLmdldENsYXNzKCkuZ2V0TmFtZSgpLAotCQkJCW9wdGlvbnMsCi0JCQkJcmVxdWVzdFBvbGljeSwKLQkJCQlyZXNwb25zZVBvbGljeSk7Ci0JfQotCXN1YmplY3QuZ2V0UHVibGljQ3JlZGVudGlhbHMoKS5hZGQoY3JlZCk7CisgICAgICAgICAgICAgICAgU3ViamVjdCBzdWJqZWN0LAorICAgICAgICAgICAgICAgIE1hcCBzaGFyZWRTdGF0ZSkKKyAgICAgICAgdGhyb3dzIEF1dGhFeGNlcHRpb24geworICAgIGlmIChjcmVkID09IG51bGwpIHsKKyAgICAgICAgY3JlZCA9IG5ldyBUZXN0Q3JlZGVudGlhbCh0aGlzLmdldENsYXNzKCkuZ2V0TmFtZSgpLAorICAgICAgICAgICAgICAgIG9wdGlvbnMsCisgICAgICAgICAgICAgICAgcmVxdWVzdFBvbGljeSwKKyAgICAgICAgICAgICAgICByZXNwb25zZVBvbGljeSk7CisgICAgfQorICAgIHN1YmplY3QuZ2V0UHVibGljQ3JlZGVudGlhbHMoKS5hZGQoY3JlZCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2VjdXJlUmVzcG9uc2UoQXV0aFBhcmFtIHBhcmFtLAotCQkJCVN1YmplY3Qgc3ViamVjdCwKLQkJCQlNYXAgc2hhcmVkU3RhdGUpCi0JCXRocm93cyBBdXRoRXhjZXB0aW9uIHsKLQlpZiAoY3JlZCA9PSBudWxsKSB7Ci0JICAgIGNyZWQgPSBuZXcgVGVzdENyZWRlbnRpYWwodGhpcy5nZXRDbGFzcygpLmdldE5hbWUoKSwKLQkJCQlvcHRpb25zLAotCQkJCXJlcXVlc3RQb2xpY3ksCi0JCQkJcmVzcG9uc2VQb2xpY3kpOwotCX0KLQlzdWJqZWN0LmdldFB1YmxpY0NyZWRlbnRpYWxzKCkuYWRkKGNyZWQpOworICAgICAgICAgICAgICAgIFN1YmplY3Qgc3ViamVjdCwKKyAgICAgICAgICAgICAgICBNYXAgc2hhcmVkU3RhdGUpCisgICAgICAgIHRocm93cyBBdXRoRXhjZXB0aW9uIHsKKyAgICBpZiAoY3JlZCA9PSBudWxsKSB7CisgICAgICAgIGNyZWQgPSBuZXcgVGVzdENyZWRlbnRpYWwodGhpcy5nZXRDbGFzcygpLmdldE5hbWUoKSwKKyAgICAgICAgICAgICAgICBvcHRpb25zLAorICAgICAgICAgICAgICAgIHJlcXVlc3RQb2xpY3ksCisgICAgICAgICAgICAgICAgcmVzcG9uc2VQb2xpY3kpOworICAgIH0KKyAgICBzdWJqZWN0LmdldFB1YmxpY0NyZWRlbnRpYWxzKCkuYWRkKGNyZWQpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRpc3Bvc2VTdWJqZWN0KFN1YmplY3Qgc3ViamVjdCwKLQkJCQlNYXAgc2hhcmVkU3RhdGUpCi0JCXRocm93cyBBdXRoRXhjZXB0aW9uIHsKLQlpZiAoY3JlZCAhPSBudWxsKSB7Ci0JICAgIHN1YmplY3QuZ2V0UHVibGljQ3JlZGVudGlhbHMoKS5yZW1vdmUoY3JlZCk7Ci0JfQorICAgICAgICAgICAgICAgIE1hcCBzaGFyZWRTdGF0ZSkKKyAgICAgICAgdGhyb3dzIEF1dGhFeGNlcHRpb24geworICAgIGlmIChjcmVkICE9IG51bGwpIHsKKyAgICAgICAgc3ViamVjdC5nZXRQdWJsaWNDcmVkZW50aWFscygpLnJlbW92ZShjcmVkKTsKKyAgICB9CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jb250YWluZXItYXV0aC9qYXV0aC9TZXJ2ZXJNb2R1bGUxLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jb250YWluZXItYXV0aC9qYXV0aC9TZXJ2ZXJNb2R1bGUxLmphdmEKaW5kZXggNWY1OGRjNi4uMGI2OWRhYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY29udGFpbmVyLWF1dGgvamF1dGgvU2VydmVyTW9kdWxlMS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NvbnRhaW5lci1hdXRoL2phdXRoL1NlcnZlck1vZHVsZTEuamF2YQpAQCAtMjYsMjYgKzI2LDI2IEBACiAKIC8qCiAgICAgcHVibGljIHZvaWQgaW5pdGlhbGl6ZShBdXRoUG9saWN5IHJlcXVlc3RQb2xpY3ksCi0JCQlBdXRoUG9saWN5IHJlc3BvbnNlUG9saWN5LAotCQkJQ2FsbGJhY2tIYW5kbGVyIGhhbmRsZXIsCi0JCQlNYXAgb3B0aW9ucykgeworICAgICAgICAgICAgQXV0aFBvbGljeSByZXNwb25zZVBvbGljeSwKKyAgICAgICAgICAgIENhbGxiYWNrSGFuZGxlciBoYW5kbGVyLAorICAgICAgICAgICAgTWFwIG9wdGlvbnMpIHsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB2YWxpZGF0ZVJlcXVlc3QoQXV0aFBhcmFtIHBhcmFtLAotCQkJCVN1YmplY3Qgc3ViamVjdCwKLQkJCQlNYXAgc2hhcmVkU3RhdGUpCi0JCXRocm93cyBBdXRoRXhjZXB0aW9uIHsKKyAgICAgICAgICAgICAgICBTdWJqZWN0IHN1YmplY3QsCisgICAgICAgICAgICAgICAgTWFwIHNoYXJlZFN0YXRlKQorICAgICAgICB0aHJvd3MgQXV0aEV4Y2VwdGlvbiB7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2VjdXJlUmVzcG9uc2UoQXV0aFBhcmFtIHBhcmFtLAotCQkJCVN1YmplY3Qgc3ViamVjdCwKLQkJCQlNYXAgc2hhcmVkU3RhdGUpCi0JCXRocm93cyBBdXRoRXhjZXB0aW9uIHsKKyAgICAgICAgICAgICAgICBTdWJqZWN0IHN1YmplY3QsCisgICAgICAgICAgICAgICAgTWFwIHNoYXJlZFN0YXRlKQorICAgICAgICB0aHJvd3MgQXV0aEV4Y2VwdGlvbiB7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZGlzcG9zZVN1YmplY3QoU3ViamVjdCBzdWJqZWN0LAotCQkJCU1hcCBzaGFyZWRTdGF0ZSkKLQkJdGhyb3dzIEF1dGhFeGNlcHRpb24geworICAgICAgICAgICAgICAgIE1hcCBzaGFyZWRTdGF0ZSkKKyAgICAgICAgdGhyb3dzIEF1dGhFeGNlcHRpb24gewogICAgIH0KICovCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jb250YWluZXItYXV0aC9qYXV0aC9TZXJ2ZXJNb2R1bGUyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jb250YWluZXItYXV0aC9qYXV0aC9TZXJ2ZXJNb2R1bGUyLmphdmEKaW5kZXggZTM1NzFmYy4uYjAyMWUzNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY29udGFpbmVyLWF1dGgvamF1dGgvU2VydmVyTW9kdWxlMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NvbnRhaW5lci1hdXRoL2phdXRoL1NlcnZlck1vZHVsZTIuamF2YQpAQCAtMjYsMjYgKzI2LDI2IEBACiAKIC8qCiAgICAgcHVibGljIHZvaWQgaW5pdGlhbGl6ZShBdXRoUG9saWN5IHJlcXVlc3RQb2xpY3ksCi0JCQlBdXRoUG9saWN5IHJlc3BvbnNlUG9saWN5LAotCQkJQ2FsbGJhY2tIYW5kbGVyIGhhbmRsZXIsCi0JCQlNYXAgb3B0aW9ucykgeworICAgICAgICAgICAgQXV0aFBvbGljeSByZXNwb25zZVBvbGljeSwKKyAgICAgICAgICAgIENhbGxiYWNrSGFuZGxlciBoYW5kbGVyLAorICAgICAgICAgICAgTWFwIG9wdGlvbnMpIHsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB2YWxpZGF0ZVJlcXVlc3QoQXV0aFBhcmFtIHBhcmFtLAotCQkJCVN1YmplY3Qgc3ViamVjdCwKLQkJCQlNYXAgc2hhcmVkU3RhdGUpCi0JCXRocm93cyBBdXRoRXhjZXB0aW9uIHsKKyAgICAgICAgICAgICAgICBTdWJqZWN0IHN1YmplY3QsCisgICAgICAgICAgICAgICAgTWFwIHNoYXJlZFN0YXRlKQorICAgICAgICB0aHJvd3MgQXV0aEV4Y2VwdGlvbiB7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2VjdXJlUmVzcG9uc2UoQXV0aFBhcmFtIHBhcmFtLAotCQkJCVN1YmplY3Qgc3ViamVjdCwKLQkJCQlNYXAgc2hhcmVkU3RhdGUpCi0JCXRocm93cyBBdXRoRXhjZXB0aW9uIHsKKyAgICAgICAgICAgICAgICBTdWJqZWN0IHN1YmplY3QsCisgICAgICAgICAgICAgICAgTWFwIHNoYXJlZFN0YXRlKQorICAgICAgICB0aHJvd3MgQXV0aEV4Y2VwdGlvbiB7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZGlzcG9zZVN1YmplY3QoU3ViamVjdCBzdWJqZWN0LAotCQkJCU1hcCBzaGFyZWRTdGF0ZSkKLQkJdGhyb3dzIEF1dGhFeGNlcHRpb24geworICAgICAgICAgICAgICAgIE1hcCBzaGFyZWRTdGF0ZSkKKyAgICAgICAgdGhyb3dzIEF1dGhFeGNlcHRpb24gewogICAgIH0KICovCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jb250YWluZXItYXV0aC9qYXV0aC9UZXN0Q3JlZGVudGlhbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY29udGFpbmVyLWF1dGgvamF1dGgvVGVzdENyZWRlbnRpYWwuamF2YQppbmRleCA1YzkwODIwLi5mMDkyODg5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jb250YWluZXItYXV0aC9qYXV0aC9UZXN0Q3JlZGVudGlhbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NvbnRhaW5lci1hdXRoL2phdXRoL1Rlc3RDcmVkZW50aWFsLmphdmEKQEAgLTI2LDQwICsyNiw0MCBAQAogICAgIEF1dGhQb2xpY3kgcmVzcG9uc2VQb2xpY3k7CiAKICAgICBwdWJsaWMgVGVzdENyZWRlbnRpYWwoU3RyaW5nIG1vZHVsZUNsYXNzLAotCQkJTWFwIG9wdGlvbnMsCi0JCQlBdXRoUG9saWN5IHJlcXVlc3RQb2xpY3ksCi0JCQlBdXRoUG9saWN5IHJlc3BvbnNlUG9saWN5KSB7Ci0JdGhpcy5tb2R1bGVDbGFzcyA9IG1vZHVsZUNsYXNzOwotCXRoaXMub3B0aW9ucyA9IG9wdGlvbnM7Ci0JdGhpcy5yZXF1ZXN0UG9saWN5ID0gcmVxdWVzdFBvbGljeTsKLQl0aGlzLnJlc3BvbnNlUG9saWN5ID0gcmVzcG9uc2VQb2xpY3k7CisgICAgICAgICAgICBNYXAgb3B0aW9ucywKKyAgICAgICAgICAgIEF1dGhQb2xpY3kgcmVxdWVzdFBvbGljeSwKKyAgICAgICAgICAgIEF1dGhQb2xpY3kgcmVzcG9uc2VQb2xpY3kpIHsKKyAgICB0aGlzLm1vZHVsZUNsYXNzID0gbW9kdWxlQ2xhc3M7CisgICAgdGhpcy5vcHRpb25zID0gb3B0aW9uczsKKyAgICB0aGlzLnJlcXVlc3RQb2xpY3kgPSByZXF1ZXN0UG9saWN5OworICAgIHRoaXMucmVzcG9uc2VQb2xpY3kgPSByZXNwb25zZVBvbGljeTsKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG8pIHsKLQlpZiAodGhpcyA9PSBvKSB7Ci0JICAgIHJldHVybiB0cnVlOwotCX0KKyAgICBpZiAodGhpcyA9PSBvKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KIAotCWlmICghKG8gaW5zdGFuY2VvZiBUZXN0Q3JlZGVudGlhbCkpIHsKLQkgICAgcmV0dXJuIGZhbHNlOwotCX0KLQlUZXN0Q3JlZGVudGlhbCB0aGF0ID0gKFRlc3RDcmVkZW50aWFsKW87CisgICAgaWYgKCEobyBpbnN0YW5jZW9mIFRlc3RDcmVkZW50aWFsKSkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIFRlc3RDcmVkZW50aWFsIHRoYXQgPSAoVGVzdENyZWRlbnRpYWwpbzsKIAotCWlmICh0aGlzLm1vZHVsZUNsYXNzLmVxdWFscyh0aGF0Lm1vZHVsZUNsYXNzKSAmJgotCSAgICB0aGlzLm9wdGlvbnMuZXF1YWxzKHRoYXQub3B0aW9ucykgJiYKLQkgICAgKHRoaXMucmVxdWVzdFBvbGljeSA9PSB0aGF0LnJlcXVlc3RQb2xpY3kgfHwKLQkJKHRoaXMucmVxdWVzdFBvbGljeSAhPSBudWxsICYmCi0JCQl0aGlzLnJlcXVlc3RQb2xpY3kuZXF1YWxzKHRoYXQucmVxdWVzdFBvbGljeSkpKSAmJgotCSAgICAodGhpcy5yZXNwb25zZVBvbGljeSA9PSB0aGF0LnJlc3BvbnNlUG9saWN5IHx8Ci0JCSh0aGlzLnJlc3BvbnNlUG9saWN5ICE9IG51bGwgJiYKLQkJCXRoaXMucmVzcG9uc2VQb2xpY3kuZXF1YWxzKHRoYXQucmVzcG9uc2VQb2xpY3kpKSkpIHsKLQkgICAgcmV0dXJuIHRydWU7Ci0JfQorICAgIGlmICh0aGlzLm1vZHVsZUNsYXNzLmVxdWFscyh0aGF0Lm1vZHVsZUNsYXNzKSAmJgorICAgICAgICB0aGlzLm9wdGlvbnMuZXF1YWxzKHRoYXQub3B0aW9ucykgJiYKKyAgICAgICAgKHRoaXMucmVxdWVzdFBvbGljeSA9PSB0aGF0LnJlcXVlc3RQb2xpY3kgfHwKKyAgICAgICAgKHRoaXMucmVxdWVzdFBvbGljeSAhPSBudWxsICYmCisgICAgICAgICAgICB0aGlzLnJlcXVlc3RQb2xpY3kuZXF1YWxzKHRoYXQucmVxdWVzdFBvbGljeSkpKSAmJgorICAgICAgICAodGhpcy5yZXNwb25zZVBvbGljeSA9PSB0aGF0LnJlc3BvbnNlUG9saWN5IHx8CisgICAgICAgICh0aGlzLnJlc3BvbnNlUG9saWN5ICE9IG51bGwgJiYKKyAgICAgICAgICAgIHRoaXMucmVzcG9uc2VQb2xpY3kuZXF1YWxzKHRoYXQucmVzcG9uc2VQb2xpY3kpKSkpIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogCi0JcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewotCXJldHVybiBtb2R1bGVDbGFzcy5oYXNoQ29kZSgpICsgb3B0aW9ucy5oYXNoQ29kZSgpOworICAgIHJldHVybiBtb2R1bGVDbGFzcy5oYXNoQ29kZSgpICsgb3B0aW9ucy5oYXNoQ29kZSgpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NvbnRhaW5lci1hdXRoL3Rlc3RDb25maWcvZG9tYWluLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NvbnRhaW5lci1hdXRoL3Rlc3RDb25maWcvZG9tYWluLnhtbAppbmRleCAzYjJjZDdjLi4yZWRkYTYwYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY29udGFpbmVyLWF1dGgvdGVzdENvbmZpZy9kb21haW4ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NvbnRhaW5lci1hdXRoL3Rlc3RDb25maWcvZG9tYWluLnhtbApAQCAtMTQzLDQ4ICsxNDMsNDggQEAKIAogCiAKLQk8bWVzc2FnZS1zZWN1cml0eS1jb25maWcgYXV0aC1sYXllcj0iU09BUCIgZGVmYXVsdC1wcm92aWRlcj0iYXBwNyIgZGVmYXVsdC1jbGllbnQtcHJvdmlkZXI9ImFwcDIiPgotCSAgPHByb3ZpZGVyLWNvbmZpZyBwcm92aWRlci1pZD0iYXBwMSIgcHJvdmlkZXItdHlwZT0iY2xpZW50IiBjbGFzcy1uYW1lPSJDbGllbnRNb2R1bGUxIj4KLQkJPHJlcXVlc3QtcG9saWN5IGF1dGgtc291cmNlPSJzZW5kZXIiIGF1dGgtcmVjaXBpZW50PSJiZWZvcmUtY29udGVudCI+PC9yZXF1ZXN0LXBvbGljeT4KLQkJPHJlc3BvbnNlLXBvbGljeSBhdXRoLXNvdXJjZT0iY29udGVudCIgYXV0aC1yZWNpcGllbnQ9ImFmdGVyLWNvbnRlbnQiPjwvcmVzcG9uc2UtcG9saWN5PgotCSAgPC9wcm92aWRlci1jb25maWc+Ci0JICA8cHJvdmlkZXItY29uZmlnIHByb3ZpZGVyLWlkPSJhcHAyIiBwcm92aWRlci10eXBlPSJjbGllbnQiIGNsYXNzLW5hbWU9IkNsaWVudE1vZHVsZTEiPgotCQk8cmVxdWVzdC1wb2xpY3kgYXV0aC1zb3VyY2U9InNlbmRlciIgYXV0aC1yZWNpcGllbnQ9ImJlZm9yZS1jb250ZW50Ij48L3JlcXVlc3QtcG9saWN5PgotCQk8cmVzcG9uc2UtcG9saWN5IGF1dGgtc291cmNlPSJjb250ZW50IiBhdXRoLXJlY2lwaWVudD0iYWZ0ZXItY29udGVudCI+PC9yZXNwb25zZS1wb2xpY3k+Ci0JCTxwcm9wZXJ0eSBuYW1lPSJvcHRpb24xIiB2YWx1ZT0idHJ1ZSIvPgotCSAgPC9wcm92aWRlci1jb25maWc+Ci0JICA8cHJvdmlkZXItY29uZmlnIHByb3ZpZGVyLWlkPSJhcHAzIiBwcm92aWRlci10eXBlPSJjbGllbnQiIGNsYXNzLW5hbWU9IkNsaWVudE1vZHVsZTEiPgotCQk8cmVxdWVzdC1wb2xpY3kgYXV0aC1zb3VyY2U9InNlbmRlciIgYXV0aC1yZWNpcGllbnQ9ImJlZm9yZS1jb250ZW50Ij48L3JlcXVlc3QtcG9saWN5PgotCSAgPC9wcm92aWRlci1jb25maWc+Ci0JICA8cHJvdmlkZXItY29uZmlnIHByb3ZpZGVyLWlkPSJhcHA0IiBwcm92aWRlci10eXBlPSJjbGllbnQiIGNsYXNzLW5hbWU9IkNsaWVudE1vZHVsZTEiPgotCQk8cmVzcG9uc2UtcG9saWN5IGF1dGgtc291cmNlPSJjb250ZW50IiBhdXRoLXJlY2lwaWVudD0iYWZ0ZXItY29udGVudCI+PC9yZXNwb25zZS1wb2xpY3k+Ci0JICA8L3Byb3ZpZGVyLWNvbmZpZz4KLQkgIDxwcm92aWRlci1jb25maWcgcHJvdmlkZXItaWQ9ImFwcDUiIHByb3ZpZGVyLXR5cGU9ImNsaWVudCIgY2xhc3MtbmFtZT0iQ2xpZW50TW9kdWxlMSI+Ci0JICA8L3Byb3ZpZGVyLWNvbmZpZz4KLQkgIDxwcm92aWRlci1jb25maWcgcHJvdmlkZXItaWQ9ImFwcDYiIHByb3ZpZGVyLXR5cGU9InNlcnZlciIgY2xhc3MtbmFtZT0iU2VydmVyTW9kdWxlMSI+Ci0JICA8L3Byb3ZpZGVyLWNvbmZpZz4KLQkgIDxwcm92aWRlci1jb25maWcgcHJvdmlkZXItaWQ9ImFwcDciIHByb3ZpZGVyLXR5cGU9InNlcnZlciIgY2xhc3MtbmFtZT0iU2VydmVyTW9kdWxlMSI+Ci0JCTxyZXF1ZXN0LXBvbGljeSBhdXRoLXNvdXJjZT0ic2VuZGVyIiBhdXRoLXJlY2lwaWVudD0iYmVmb3JlLWNvbnRlbnQiPjwvcmVxdWVzdC1wb2xpY3k+Ci0JCTxyZXNwb25zZS1wb2xpY3kgYXV0aC1zb3VyY2U9ImNvbnRlbnQiIGF1dGgtcmVjaXBpZW50PSJhZnRlci1jb250ZW50Ij48L3Jlc3BvbnNlLXBvbGljeT4KLQkgIDwvcHJvdmlkZXItY29uZmlnPgotCTwvbWVzc2FnZS1zZWN1cml0eS1jb25maWc+CisgICAgPG1lc3NhZ2Utc2VjdXJpdHktY29uZmlnIGF1dGgtbGF5ZXI9IlNPQVAiIGRlZmF1bHQtcHJvdmlkZXI9ImFwcDciIGRlZmF1bHQtY2xpZW50LXByb3ZpZGVyPSJhcHAyIj4KKyAgICAgIDxwcm92aWRlci1jb25maWcgcHJvdmlkZXItaWQ9ImFwcDEiIHByb3ZpZGVyLXR5cGU9ImNsaWVudCIgY2xhc3MtbmFtZT0iQ2xpZW50TW9kdWxlMSI+CisgICAgICAgIDxyZXF1ZXN0LXBvbGljeSBhdXRoLXNvdXJjZT0ic2VuZGVyIiBhdXRoLXJlY2lwaWVudD0iYmVmb3JlLWNvbnRlbnQiPjwvcmVxdWVzdC1wb2xpY3k+CisgICAgICAgIDxyZXNwb25zZS1wb2xpY3kgYXV0aC1zb3VyY2U9ImNvbnRlbnQiIGF1dGgtcmVjaXBpZW50PSJhZnRlci1jb250ZW50Ij48L3Jlc3BvbnNlLXBvbGljeT4KKyAgICAgIDwvcHJvdmlkZXItY29uZmlnPgorICAgICAgPHByb3ZpZGVyLWNvbmZpZyBwcm92aWRlci1pZD0iYXBwMiIgcHJvdmlkZXItdHlwZT0iY2xpZW50IiBjbGFzcy1uYW1lPSJDbGllbnRNb2R1bGUxIj4KKyAgICAgICAgPHJlcXVlc3QtcG9saWN5IGF1dGgtc291cmNlPSJzZW5kZXIiIGF1dGgtcmVjaXBpZW50PSJiZWZvcmUtY29udGVudCI+PC9yZXF1ZXN0LXBvbGljeT4KKyAgICAgICAgPHJlc3BvbnNlLXBvbGljeSBhdXRoLXNvdXJjZT0iY29udGVudCIgYXV0aC1yZWNpcGllbnQ9ImFmdGVyLWNvbnRlbnQiPjwvcmVzcG9uc2UtcG9saWN5PgorICAgICAgICA8cHJvcGVydHkgbmFtZT0ib3B0aW9uMSIgdmFsdWU9InRydWUiLz4KKyAgICAgIDwvcHJvdmlkZXItY29uZmlnPgorICAgICAgPHByb3ZpZGVyLWNvbmZpZyBwcm92aWRlci1pZD0iYXBwMyIgcHJvdmlkZXItdHlwZT0iY2xpZW50IiBjbGFzcy1uYW1lPSJDbGllbnRNb2R1bGUxIj4KKyAgICAgICAgPHJlcXVlc3QtcG9saWN5IGF1dGgtc291cmNlPSJzZW5kZXIiIGF1dGgtcmVjaXBpZW50PSJiZWZvcmUtY29udGVudCI+PC9yZXF1ZXN0LXBvbGljeT4KKyAgICAgIDwvcHJvdmlkZXItY29uZmlnPgorICAgICAgPHByb3ZpZGVyLWNvbmZpZyBwcm92aWRlci1pZD0iYXBwNCIgcHJvdmlkZXItdHlwZT0iY2xpZW50IiBjbGFzcy1uYW1lPSJDbGllbnRNb2R1bGUxIj4KKyAgICAgICAgPHJlc3BvbnNlLXBvbGljeSBhdXRoLXNvdXJjZT0iY29udGVudCIgYXV0aC1yZWNpcGllbnQ9ImFmdGVyLWNvbnRlbnQiPjwvcmVzcG9uc2UtcG9saWN5PgorICAgICAgPC9wcm92aWRlci1jb25maWc+CisgICAgICA8cHJvdmlkZXItY29uZmlnIHByb3ZpZGVyLWlkPSJhcHA1IiBwcm92aWRlci10eXBlPSJjbGllbnQiIGNsYXNzLW5hbWU9IkNsaWVudE1vZHVsZTEiPgorICAgICAgPC9wcm92aWRlci1jb25maWc+CisgICAgICA8cHJvdmlkZXItY29uZmlnIHByb3ZpZGVyLWlkPSJhcHA2IiBwcm92aWRlci10eXBlPSJzZXJ2ZXIiIGNsYXNzLW5hbWU9IlNlcnZlck1vZHVsZTEiPgorICAgICAgPC9wcm92aWRlci1jb25maWc+CisgICAgICA8cHJvdmlkZXItY29uZmlnIHByb3ZpZGVyLWlkPSJhcHA3IiBwcm92aWRlci10eXBlPSJzZXJ2ZXIiIGNsYXNzLW5hbWU9IlNlcnZlck1vZHVsZTEiPgorICAgICAgICA8cmVxdWVzdC1wb2xpY3kgYXV0aC1zb3VyY2U9InNlbmRlciIgYXV0aC1yZWNpcGllbnQ9ImJlZm9yZS1jb250ZW50Ij48L3JlcXVlc3QtcG9saWN5PgorICAgICAgICA8cmVzcG9uc2UtcG9saWN5IGF1dGgtc291cmNlPSJjb250ZW50IiBhdXRoLXJlY2lwaWVudD0iYWZ0ZXItY29udGVudCI+PC9yZXNwb25zZS1wb2xpY3k+CisgICAgICA8L3Byb3ZpZGVyLWNvbmZpZz4KKyAgICA8L21lc3NhZ2Utc2VjdXJpdHktY29uZmlnPgogCiAKIDwhLS0gbm90IHN1cHBvcnRlZCB5ZXQKIAogCi0JPG1lc3NhZ2Utc2VjdXJpdHktY29uZmlnIGF1dGgtbGF5ZXI9IkhUVFAiIGRlZmF1bHQtcHJvdmlkZXI9ImFwcDgiPgotCSAgPC9wcm92aWRlci1jb25maWc+Ci0JICA8cHJvdmlkZXItY29uZmlnIHByb3ZpZGVyLWlkPSJhcHA4IiBwcm92aWRlci10eXBlPSJzZXJ2ZXIiIGNsYXNzLW5hbWU9IlNlcnZlck1vZHVsZTEiPgotCSAgPC9wcm92aWRlci1jb25maWc+Ci0JICA8cHJvdmlkZXItY29uZmlnIHByb3ZpZGVyLWlkPSJhcHA5IiBwcm92aWRlci10eXBlPSJzZXJ2ZXIiIGNsYXNzLW5hbWU9IlNlcnZlck1vZHVsZTEiPgotCTwvbWVzc2FnZS1zZWN1cml0eS1jb25maWc+CisgICAgPG1lc3NhZ2Utc2VjdXJpdHktY29uZmlnIGF1dGgtbGF5ZXI9IkhUVFAiIGRlZmF1bHQtcHJvdmlkZXI9ImFwcDgiPgorICAgICAgPC9wcm92aWRlci1jb25maWc+CisgICAgICA8cHJvdmlkZXItY29uZmlnIHByb3ZpZGVyLWlkPSJhcHA4IiBwcm92aWRlci10eXBlPSJzZXJ2ZXIiIGNsYXNzLW5hbWU9IlNlcnZlck1vZHVsZTEiPgorICAgICAgPC9wcm92aWRlci1jb25maWc+CisgICAgICA8cHJvdmlkZXItY29uZmlnIHByb3ZpZGVyLWlkPSJhcHA5IiBwcm92aWRlci10eXBlPSJzZXJ2ZXIiIGNsYXNzLW5hbWU9IlNlcnZlck1vZHVsZTEiPgorICAgIDwvbWVzc2FnZS1zZWN1cml0eS1jb25maWc+CiAKIAotCTxtZXNzYWdlLXNlY3VyaXR5LWNvbmZpZyBhdXRoLWxheWVyPSJFSkIiIGRlZmF1bHQtcHJvdmlkZXI9ImFwcDEwIj4KLQkgIDwvcHJvdmlkZXItY29uZmlnPgotCSAgPHByb3ZpZGVyLWNvbmZpZyBwcm92aWRlci1pZD0iYXBwMTAiIHByb3ZpZGVyLXR5cGU9InNlcnZlciIgY2xhc3MtbmFtZT0iU2VydmVyTW9kdWxlMSI+Ci0JPC9tZXNzYWdlLXNlY3VyaXR5LWNvbmZpZz4KKyAgICA8bWVzc2FnZS1zZWN1cml0eS1jb25maWcgYXV0aC1sYXllcj0iRUpCIiBkZWZhdWx0LXByb3ZpZGVyPSJhcHAxMCI+CisgICAgICA8L3Byb3ZpZGVyLWNvbmZpZz4KKyAgICAgIDxwcm92aWRlci1jb25maWcgcHJvdmlkZXItaWQ9ImFwcDEwIiBwcm92aWRlci10eXBlPSJzZXJ2ZXIiIGNsYXNzLW5hbWU9IlNlcnZlck1vZHVsZTEiPgorICAgIDwvbWVzc2FnZS1zZWN1cml0eS1jb25maWc+CiAKIC0tPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jb250YWluZXItYXV0aC90ZXN0Q29uZmlnL3N1bi1hY2MueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY29udGFpbmVyLWF1dGgvdGVzdENvbmZpZy9zdW4tYWNjLnhtbAppbmRleCA2OTBhY2FiLi44NWVmMDM5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jb250YWluZXItYXV0aC90ZXN0Q29uZmlnL3N1bi1hY2MueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NvbnRhaW5lci1hdXRoL3Rlc3RDb25maWcvc3VuLWFjYy54bWwKQEAgLTIzLDQ4ICsyMyw0OCBAQAogICA8dGFyZ2V0LXNlcnZlciBuYW1lPSJkLXVzY2ExNC0xMzMtNzMuU0ZCYXkuU3VuLkNPTSIgYWRkcmVzcz0iZC11c2NhMTQtMTMzLTczLlNGQmF5LlN1bi5DT00iIHBvcnQ9IjM3MDAiLz4KICAgPGxvZy1zZXJ2aWNlIGZpbGU9IiIgbGV2ZWw9IldBUk5JTkciLz4KIAotCSAgPG1lc3NhZ2Utc2VjdXJpdHktY29uZmlnIGF1dGgtbGF5ZXI9IlNPQVAiIGRlZmF1bHQtcHJvdmlkZXI9ImFwcDciIGRlZmF1bHQtY2xpZW50LXByb3ZpZGVyPSJhcHAyIj4KLQkgIDxwcm92aWRlci1jb25maWcgcHJvdmlkZXItaWQ9ImFwcDEiIHByb3ZpZGVyLXR5cGU9ImNsaWVudCIgY2xhc3MtbmFtZT0iQ2xpZW50TW9kdWxlMSI+Ci0JCTxyZXF1ZXN0LXBvbGljeSBhdXRoLXNvdXJjZT0ic2VuZGVyIiBhdXRoLXJlY2lwaWVudD0iYmVmb3JlLWNvbnRlbnQiPjwvcmVxdWVzdC1wb2xpY3k+Ci0JCTxyZXNwb25zZS1wb2xpY3kgYXV0aC1zb3VyY2U9ImNvbnRlbnQiIGF1dGgtcmVjaXBpZW50PSJhZnRlci1jb250ZW50Ij48L3Jlc3BvbnNlLXBvbGljeT4KLQkgIDwvcHJvdmlkZXItY29uZmlnPgotCSAgPHByb3ZpZGVyLWNvbmZpZyBwcm92aWRlci1pZD0iYXBwMiIgcHJvdmlkZXItdHlwZT0iY2xpZW50IiBjbGFzcy1uYW1lPSJDbGllbnRNb2R1bGUxIj4KLQkJPHJlcXVlc3QtcG9saWN5IGF1dGgtc291cmNlPSJzZW5kZXIiIGF1dGgtcmVjaXBpZW50PSJiZWZvcmUtY29udGVudCI+PC9yZXF1ZXN0LXBvbGljeT4KLQkJPHJlc3BvbnNlLXBvbGljeSBhdXRoLXNvdXJjZT0iY29udGVudCIgYXV0aC1yZWNpcGllbnQ9ImFmdGVyLWNvbnRlbnQiPjwvcmVzcG9uc2UtcG9saWN5PgotCQk8cHJvcGVydHkgbmFtZT0ib3B0aW9uMSIgdmFsdWU9InRydWUiLz4KLQkgIDwvcHJvdmlkZXItY29uZmlnPgotCSAgPHByb3ZpZGVyLWNvbmZpZyBwcm92aWRlci1pZD0iYXBwMyIgcHJvdmlkZXItdHlwZT0iY2xpZW50IiBjbGFzcy1uYW1lPSJDbGllbnRNb2R1bGUxIj4KLQkJPHJlcXVlc3QtcG9saWN5IGF1dGgtc291cmNlPSJzZW5kZXIiIGF1dGgtcmVjaXBpZW50PSJiZWZvcmUtY29udGVudCI+PC9yZXF1ZXN0LXBvbGljeT4KLQkgIDwvcHJvdmlkZXItY29uZmlnPgotCSAgPHByb3ZpZGVyLWNvbmZpZyBwcm92aWRlci1pZD0iYXBwNCIgcHJvdmlkZXItdHlwZT0iY2xpZW50IiBjbGFzcy1uYW1lPSJDbGllbnRNb2R1bGUxIj4KLQkJPHJlc3BvbnNlLXBvbGljeSBhdXRoLXNvdXJjZT0iY29udGVudCIgYXV0aC1yZWNpcGllbnQ9ImFmdGVyLWNvbnRlbnQiPjwvcmVzcG9uc2UtcG9saWN5PgotCSAgPC9wcm92aWRlci1jb25maWc+Ci0JICA8cHJvdmlkZXItY29uZmlnIHByb3ZpZGVyLWlkPSJhcHA1IiBwcm92aWRlci10eXBlPSJjbGllbnQiIGNsYXNzLW5hbWU9IkNsaWVudE1vZHVsZTEiPgotCSAgPC9wcm92aWRlci1jb25maWc+Ci0JICA8cHJvdmlkZXItY29uZmlnIHByb3ZpZGVyLWlkPSJhcHA2IiBwcm92aWRlci10eXBlPSJzZXJ2ZXIiIGNsYXNzLW5hbWU9IlNlcnZlck1vZHVsZTEiPgotCSAgPC9wcm92aWRlci1jb25maWc+Ci0JICA8cHJvdmlkZXItY29uZmlnIHByb3ZpZGVyLWlkPSJhcHA3IiBwcm92aWRlci10eXBlPSJzZXJ2ZXIiIGNsYXNzLW5hbWU9IlNlcnZlck1vZHVsZTEiPgotCQk8cmVxdWVzdC1wb2xpY3kgYXV0aC1zb3VyY2U9InNlbmRlciIgYXV0aC1yZWNpcGllbnQ9ImJlZm9yZS1jb250ZW50Ij48L3JlcXVlc3QtcG9saWN5PgotCQk8cmVzcG9uc2UtcG9saWN5IGF1dGgtc291cmNlPSJjb250ZW50IiBhdXRoLXJlY2lwaWVudD0iYWZ0ZXItY29udGVudCI+PC9yZXNwb25zZS1wb2xpY3k+Ci0JICA8L3Byb3ZpZGVyLWNvbmZpZz4KLQk8L21lc3NhZ2Utc2VjdXJpdHktY29uZmlnPgorICAgICAgPG1lc3NhZ2Utc2VjdXJpdHktY29uZmlnIGF1dGgtbGF5ZXI9IlNPQVAiIGRlZmF1bHQtcHJvdmlkZXI9ImFwcDciIGRlZmF1bHQtY2xpZW50LXByb3ZpZGVyPSJhcHAyIj4KKyAgICAgIDxwcm92aWRlci1jb25maWcgcHJvdmlkZXItaWQ9ImFwcDEiIHByb3ZpZGVyLXR5cGU9ImNsaWVudCIgY2xhc3MtbmFtZT0iQ2xpZW50TW9kdWxlMSI+CisgICAgICAgIDxyZXF1ZXN0LXBvbGljeSBhdXRoLXNvdXJjZT0ic2VuZGVyIiBhdXRoLXJlY2lwaWVudD0iYmVmb3JlLWNvbnRlbnQiPjwvcmVxdWVzdC1wb2xpY3k+CisgICAgICAgIDxyZXNwb25zZS1wb2xpY3kgYXV0aC1zb3VyY2U9ImNvbnRlbnQiIGF1dGgtcmVjaXBpZW50PSJhZnRlci1jb250ZW50Ij48L3Jlc3BvbnNlLXBvbGljeT4KKyAgICAgIDwvcHJvdmlkZXItY29uZmlnPgorICAgICAgPHByb3ZpZGVyLWNvbmZpZyBwcm92aWRlci1pZD0iYXBwMiIgcHJvdmlkZXItdHlwZT0iY2xpZW50IiBjbGFzcy1uYW1lPSJDbGllbnRNb2R1bGUxIj4KKyAgICAgICAgPHJlcXVlc3QtcG9saWN5IGF1dGgtc291cmNlPSJzZW5kZXIiIGF1dGgtcmVjaXBpZW50PSJiZWZvcmUtY29udGVudCI+PC9yZXF1ZXN0LXBvbGljeT4KKyAgICAgICAgPHJlc3BvbnNlLXBvbGljeSBhdXRoLXNvdXJjZT0iY29udGVudCIgYXV0aC1yZWNpcGllbnQ9ImFmdGVyLWNvbnRlbnQiPjwvcmVzcG9uc2UtcG9saWN5PgorICAgICAgICA8cHJvcGVydHkgbmFtZT0ib3B0aW9uMSIgdmFsdWU9InRydWUiLz4KKyAgICAgIDwvcHJvdmlkZXItY29uZmlnPgorICAgICAgPHByb3ZpZGVyLWNvbmZpZyBwcm92aWRlci1pZD0iYXBwMyIgcHJvdmlkZXItdHlwZT0iY2xpZW50IiBjbGFzcy1uYW1lPSJDbGllbnRNb2R1bGUxIj4KKyAgICAgICAgPHJlcXVlc3QtcG9saWN5IGF1dGgtc291cmNlPSJzZW5kZXIiIGF1dGgtcmVjaXBpZW50PSJiZWZvcmUtY29udGVudCI+PC9yZXF1ZXN0LXBvbGljeT4KKyAgICAgIDwvcHJvdmlkZXItY29uZmlnPgorICAgICAgPHByb3ZpZGVyLWNvbmZpZyBwcm92aWRlci1pZD0iYXBwNCIgcHJvdmlkZXItdHlwZT0iY2xpZW50IiBjbGFzcy1uYW1lPSJDbGllbnRNb2R1bGUxIj4KKyAgICAgICAgPHJlc3BvbnNlLXBvbGljeSBhdXRoLXNvdXJjZT0iY29udGVudCIgYXV0aC1yZWNpcGllbnQ9ImFmdGVyLWNvbnRlbnQiPjwvcmVzcG9uc2UtcG9saWN5PgorICAgICAgPC9wcm92aWRlci1jb25maWc+CisgICAgICA8cHJvdmlkZXItY29uZmlnIHByb3ZpZGVyLWlkPSJhcHA1IiBwcm92aWRlci10eXBlPSJjbGllbnQiIGNsYXNzLW5hbWU9IkNsaWVudE1vZHVsZTEiPgorICAgICAgPC9wcm92aWRlci1jb25maWc+CisgICAgICA8cHJvdmlkZXItY29uZmlnIHByb3ZpZGVyLWlkPSJhcHA2IiBwcm92aWRlci10eXBlPSJzZXJ2ZXIiIGNsYXNzLW5hbWU9IlNlcnZlck1vZHVsZTEiPgorICAgICAgPC9wcm92aWRlci1jb25maWc+CisgICAgICA8cHJvdmlkZXItY29uZmlnIHByb3ZpZGVyLWlkPSJhcHA3IiBwcm92aWRlci10eXBlPSJzZXJ2ZXIiIGNsYXNzLW5hbWU9IlNlcnZlck1vZHVsZTEiPgorICAgICAgICA8cmVxdWVzdC1wb2xpY3kgYXV0aC1zb3VyY2U9InNlbmRlciIgYXV0aC1yZWNpcGllbnQ9ImJlZm9yZS1jb250ZW50Ij48L3JlcXVlc3QtcG9saWN5PgorICAgICAgICA8cmVzcG9uc2UtcG9saWN5IGF1dGgtc291cmNlPSJjb250ZW50IiBhdXRoLXJlY2lwaWVudD0iYWZ0ZXItY29udGVudCI+PC9yZXNwb25zZS1wb2xpY3k+CisgICAgICA8L3Byb3ZpZGVyLWNvbmZpZz4KKyAgICA8L21lc3NhZ2Utc2VjdXJpdHktY29uZmlnPgogCiAKIDwhLS0gbm90IHN1cHBvcnRlZCB5ZXQKIAogCi0JPG1lc3NhZ2Utc2VjdXJpdHktY29uZmlnIGF1dGgtbGF5ZXI9IkhUVFAiIGRlZmF1bHQtcHJvdmlkZXI9ImFwcDgiPgotCSAgPC9wcm92aWRlci1jb25maWc+Ci0JICA8cHJvdmlkZXItY29uZmlnIHByb3ZpZGVyLWlkPSJhcHA4IiBwcm92aWRlci10eXBlPSJzZXJ2ZXIiIGNsYXNzLW5hbWU9IlNlcnZlck1vZHVsZTEiPgotCSAgPC9wcm92aWRlci1jb25maWc+Ci0JICA8cHJvdmlkZXItY29uZmlnIHByb3ZpZGVyLWlkPSJhcHA5IiBwcm92aWRlci10eXBlPSJzZXJ2ZXIiIGNsYXNzLW5hbWU9IlNlcnZlck1vZHVsZTEiPgotCTwvbWVzc2FnZS1zZWN1cml0eS1jb25maWc+CisgICAgPG1lc3NhZ2Utc2VjdXJpdHktY29uZmlnIGF1dGgtbGF5ZXI9IkhUVFAiIGRlZmF1bHQtcHJvdmlkZXI9ImFwcDgiPgorICAgICAgPC9wcm92aWRlci1jb25maWc+CisgICAgICA8cHJvdmlkZXItY29uZmlnIHByb3ZpZGVyLWlkPSJhcHA4IiBwcm92aWRlci10eXBlPSJzZXJ2ZXIiIGNsYXNzLW5hbWU9IlNlcnZlck1vZHVsZTEiPgorICAgICAgPC9wcm92aWRlci1jb25maWc+CisgICAgICA8cHJvdmlkZXItY29uZmlnIHByb3ZpZGVyLWlkPSJhcHA5IiBwcm92aWRlci10eXBlPSJzZXJ2ZXIiIGNsYXNzLW5hbWU9IlNlcnZlck1vZHVsZTEiPgorICAgIDwvbWVzc2FnZS1zZWN1cml0eS1jb25maWc+CiAKIAotCTxtZXNzYWdlLXNlY3VyaXR5LWNvbmZpZyBhdXRoLWxheWVyPSJFSkIiIGRlZmF1bHQtcHJvdmlkZXI9ImFwcDEwIj4KLQkgIDwvcHJvdmlkZXItY29uZmlnPgotCSAgPHByb3ZpZGVyLWNvbmZpZyBwcm92aWRlci1pZD0iYXBwMTAiIHByb3ZpZGVyLXR5cGU9InNlcnZlciIgY2xhc3MtbmFtZT0iU2VydmVyTW9kdWxlMSI+Ci0JPC9tZXNzYWdlLXNlY3VyaXR5LWNvbmZpZz4KKyAgICA8bWVzc2FnZS1zZWN1cml0eS1jb25maWcgYXV0aC1sYXllcj0iRUpCIiBkZWZhdWx0LXByb3ZpZGVyPSJhcHAxMCI+CisgICAgICA8L3Byb3ZpZGVyLWNvbmZpZz4KKyAgICAgIDxwcm92aWRlci1jb25maWcgcHJvdmlkZXItaWQ9ImFwcDEwIiBwcm92aWRlci10eXBlPSJzZXJ2ZXIiIGNsYXNzLW5hbWU9IlNlcnZlck1vZHVsZTEiPgorICAgIDwvbWVzc2FnZS1zZWN1cml0eS1jb25maWc+CiAKIC0tPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jcGxvZ2luL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jcGxvZ2luL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZTFiYjZkNy4uNDhiNThiZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY3Bsb2dpbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NwbG9naW4vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjggKzE1LDI4IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzZWMtcGxvZ2luIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1jb252ZXJ0ZXIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWNvbnZlcnRlciIvPiAgICAgICAgXHUwMDIwCiAKLTxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgCi0JdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIAotCXZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiXHUwMDIwCisgICAgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciJcdTAwMjAKKyAgICB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPiAgICAgICAgXHUwMDIwCiAKLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9ImNvbS5zdW4uZGV2dGVzdC5zZWN1cml0eS5wbG9naW4uY29udmVydGVyLmNsaWVudC5Db252ZXJ0ZXJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iY29tLnN1bi5kZXZ0ZXN0LnNlY3VyaXR5LnBsb2dpbi5jb252ZXJ0ZXIuY2xpZW50LkNvbnZlcnRlckNsaWVudCIvPgogCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KIAogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIApAQCAtNDUsOCArNDUsOCBAQAogPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiA8IS0tCiA8cHJvcGVydHkgbmFtZT0iam5kaS5uYW1lIiB2YWx1ZT0iUExvZ2luQ29udmVydGVyIi8+Ci08cHJvcGVydHkgbmFtZT0icHJvdmlkZXIudXJsIiB2YWx1ZT0iaWlvcDovL2xvY2FsaG9zdDoke29yYi5wb3J0fSIvPiAKLTxwcm9wZXJ0eSBuYW1lPSJjdHhmYWN0b3J5IiB2YWx1ZT0iY29tLnN1bi5lbnRlcnByaXNlLm5hbWluZy5TZXJpYWxJbml0Q29udGV4dEZhY3RvcnkiLz4gCi08cHJvcGVydHkgbmFtZT0iY3R4ZmFjdG9yeSIgdmFsdWU9ImNvbS5zdW4uam5kaS5jb3NuYW1pbmcuQ05DdHhGYWN0b3J5Ii8+IAorPHByb3BlcnR5IG5hbWU9InByb3ZpZGVyLnVybCIgdmFsdWU9Imlpb3A6Ly9sb2NhbGhvc3Q6JHtvcmIucG9ydH0iLz5cdTAwMjAKKzxwcm9wZXJ0eSBuYW1lPSJjdHhmYWN0b3J5IiB2YWx1ZT0iY29tLnN1bi5lbnRlcnByaXNlLm5hbWluZy5TZXJpYWxJbml0Q29udGV4dEZhY3RvcnkiLz5cdTAwMjAKKzxwcm9wZXJ0eSBuYW1lPSJjdHhmYWN0b3J5IiB2YWx1ZT0iY29tLnN1bi5qbmRpLmNvc25hbWluZy5DTkN0eEZhY3RvcnkiLz5cdTAwMjAKIC0tPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jcGxvZ2luL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NwbG9naW4vYnVpbGQueG1sCmluZGV4IDQxOTJkYTcuLmY1MzUwNTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NwbG9naW4vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NwbG9naW4vYnVpbGQueG1sCkBAIC0zOSw3ICszOSw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTUxLDcgKzUxLDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWF1dGgtZmlsZXJlYWxtIj4KQEAgLTkzLDcgKzkzLDcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLXBlcm1pc3Npb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgIDxjb3B5IGZpbGU9IiR7YWRtaW4uZG9tYWluLmRpcn0vLi4vbGliL2FwcGNsaWVudC9jbGllbnQucG9saWN5IiAKKyAgICAgIDxjb3B5IGZpbGU9IiR7YWRtaW4uZG9tYWluLmRpcn0vLi4vbGliL2FwcGNsaWVudC9jbGllbnQucG9saWN5IgogICAgICAgICB0b2ZpbGU9IiR7YWRtaW4uZG9tYWluLmRpcn0vLi4vbGliL2FwcGNsaWVudC9jbGllbnQucG9saWN5Lm9yZyIKICAgICAgICAgb3ZlcndyaXRlPSJ0cnVlIi8+CiAgICAgICA8IS0tIHJlcGxhY2UgIlwiIGJ5ICIvIiBpbiBQQyBlbnYgLS0+CkBAIC0xMTAsMTggKzExMCwxOCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0b3JlLXBlcm1pc3Npb24iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgIDxjb3B5IGZpbGU9IiR7YWRtaW4uZG9tYWluLmRpcn0vLi4vbGliL2FwcGNsaWVudC9jbGllbnQucG9saWN5Lm9yZyIgCisgICAgICA8Y29weSBmaWxlPSIke2FkbWluLmRvbWFpbi5kaXJ9Ly4uL2xpYi9hcHBjbGllbnQvY2xpZW50LnBvbGljeS5vcmciCiAgICAgICAgIHRvZmlsZT0iJHthZG1pbi5kb21haW4uZGlyfS8uLi9saWIvYXBwY2xpZW50L2NsaWVudC5wb2xpY3kiCi0gICAgICAgIG92ZXJ3cml0ZT0idHJ1ZSIvPiAKKyAgICAgICAgb3ZlcndyaXRlPSJ0cnVlIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWxvY2FsIi8+IAotIAk8YW50Y2FsbCB0YXJnZXQ9InJ1bi1zdGFuZGFsb25lLWNsaWVudCIvPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1sb2NhbCIvPgorICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi1zdGFuZGFsb25lLWNsaWVudCIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW5jbGllbnQtbG9jYWwiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTEyOSwxMiArMTI5LDEyIEBACiAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FQUENMSUVOVH0iPgogICAgICAgICA8YXJnIHZhbHVlPSItY2xpZW50IiAvPgogICAgICAgICA8YXJnIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcENsaWVudC5qYXIiLz4KLSAgCTwhLS0gZHVtbXkgdXNlciBhZGRlZCBhcyBhcHBjbGllbnQgdGhyb3dpbmcgbG9naW4gd2luZG93IC0tPgkKKyAgICAgIDwhLS0gZHVtbXkgdXNlciBhZGRlZCBhcyBhcHBjbGllbnQgdGhyb3dpbmcgbG9naW4gd2luZG93IC0tPgogICAgICAgPC9leGVjPgogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogICAgIDwhLS0gVGFyZ2V0IHRvIHJ1biB0aGUgc3RhbmRhbG9uZSBjbGllbnQgd2l0aG91dCBBQ0MgLS0+CkBAIC0xNTIsNyArMTUyLDcgQEAKICAgICAgICAgPGp2bWFyZyB2YWx1ZT0iLURqYXZhLnNlY3VyaXR5LmF1dGgubG9naW4uY29uZmlnPSR7YWRtaW4uZG9tYWluLmRpcn0vLi4vbGliL2FwcGNsaWVudC9hcHBjbGllbnRsb2dpbi5jb25mIi8+CiAgICAgICAgIDxqdm1hcmcgdmFsdWU9Ii1Eb3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsSG9zdD0ke2FkbWluLmhvc3R9Ii8+CiAgICAgICAgIDxqdm1hcmcgdmFsdWU9Ii1Eb3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydD0ke29yYi5wb3J0fSIvPgotCTxqdm1hcmcgdmFsdWU9Ii1EY29tLnN1bi5DT1JCQS5jb25uZWN0aW9uLk9SQlNvY2tldEZhY3RvcnlDbGFzcz1jb20uc3VuLmVudGVycHJpc2UuaWlvcC5JSU9QU1NMU29ja2V0RmFjdG9yeSIvPgorICAgIDxqdm1hcmcgdmFsdWU9Ii1EY29tLnN1bi5DT1JCQS5jb25uZWN0aW9uLk9SQlNvY2tldEZhY3RvcnlDbGFzcz1jb20uc3VuLmVudGVycHJpc2UuaWlvcC5JSU9QU1NMU29ja2V0RmFjdG9yeSIvPgogPCEtLQogICAgICAgICA8anZtYXJnIHZhbHVlPSItRGphdmF4LnJtaS5DT1JCQS5VdGlsQ2xhc3M9Y29tLnN1bi5jb3JiYS5lZS5pbXBsLmphdmF4LnJtaS5DT1JCQS5VdGlsIi8+CiAgICAgICAgIDxqdm1hcmcgdmFsdWU9Ii1EamF2YXgucm1pLkNPUkJBLlN0dWJDbGFzcz1jb20uc3VuLmNvcmJhLmVlLmltcGwuamF2YXgucm1pLkNPUkJBLlN0dWJEZWxlZ2F0ZUltcGwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NwbG9naW4vY2xpZW50L0NvbnZlcnRlckNsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY3Bsb2dpbi9jbGllbnQvQ29udmVydGVyQ2xpZW50LmphdmEKaW5kZXggZGE1MTI3NS4uNTk0NDFhZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY3Bsb2dpbi9jbGllbnQvQ29udmVydGVyQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY3Bsb2dpbi9jbGllbnQvQ29udmVydGVyQ2xpZW50LmphdmEKQEAgLTI5LDcgKzI5LDcgQEAKIAogLyoqCiAgKiBBIHNpbXBsZSBqYXZhIGNsaWVudC4gVGhpcyB1c2VzIHRoZSBzZXJ2aWNlcyBwcm92aWRlZCBieSB0aGUgPGNvZGU+Q29udmVydGVyQmVhbjwvY29kZT4gYW5kCi0gKiBjb252ZXJ0cyAxMDAgVVMgZG9sbGFycyB0byBZZW4gYW5kIDEwMCBZZW4gdG8gRXVyby4gCisgKiBjb252ZXJ0cyAxMDAgVVMgZG9sbGFycyB0byBZZW4gYW5kIDEwMCBZZW4gdG8gRXVyby4KICAqIDxwPkluIHRoaXMgcmVnYXJkLCBpdCBkb2VzIHRoZSBmb2xsb3dpbmcgaW4gb3JkZXIKICAqIDx1bD4KICAqIDxsaT5Mb2NhdGVzIHRoZSBob21lIGludGVyZmFjZSBvZiB0aGUgZW50ZXJwcmlzZSBiZWFuCkBAIC0zOSwyMSArMzksMjEgQEAKICAqIDxicj4KICAqIDxiPkxvY2F0aW5nIHRoZSBob21lIGludGVyZmFjZTo8L2I+CiAgKiA8YmxvY2txdW90ZT48cHJlPgotICoJQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gKglDb250ZXh0IG15RW52ID0gKENvbnRleHQpaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYiKTsKLSAqCU9iamVjdCBvYmpyZWYgPSBteUVudi5sb29rdXAoImVqYi9TaW1wbGVDb252ZXJ0ZXIiKTsKKyAqICAgIENvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICogICAgQ29udGV4dCBteUVudiA9IChDb250ZXh0KWluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52Iik7CisgKiAgICBPYmplY3Qgb2JqcmVmID0gbXlFbnYubG9va3VwKCJlamIvU2ltcGxlQ29udmVydGVyIik7CiAgKiAgQ29udmVydGVySG9tZSBob21lID0gKENvbnZlcnRlckhvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwgQ29udmVydGVySG9tZS5jbGFzcyk7CiAgKiA8L3ByZT48L2Jsb2NrcXVvdGU+CiAgKiA8YnI+CiAgKiA8Yj5DcmVhdGluZyB0aGUgcmVtb3RlIGludGVyZmFjZTo8L2I+CiAgKiA8YmxvY2txdW90ZT48cHJlPgotICoJQ29udmVydGVyIGN1cnJlbmN5Q29udmVydGVyID0gaG9tZS5jcmVhdGUoKTsKKyAqICAgIENvbnZlcnRlciBjdXJyZW5jeUNvbnZlcnRlciA9IGhvbWUuY3JlYXRlKCk7CiAgKiA8L3ByZT48L2Jsb2NrcXVvdGU+CiAgKiA8YnI+CiAgKiA8Yj5JbnZva2luZyBidXNpbmVzcyBtZXRob2RzOjwvYj4KICAqIDxibG9ja3F1b3RlPjxwcmU+CiAgKiAgQmlnRGVjaW1hbCBwYXJhbSA9IG5ldyBCaWdEZWNpbWFsICgiMTAwLjAwIik7Ci0gKglhbW91bnQgPSBjdXJyZW5jeUNvbnZlcnRlci5kb2xsYXJUb1llbihwYXJhbSk7CisgKiAgICBhbW91bnQgPSBjdXJyZW5jeUNvbnZlcnRlci5kb2xsYXJUb1llbihwYXJhbSk7CiAgKiAgYW1vdW50ID0gY3VycmVuY3lDb252ZXJ0ZXIueWVuVG9FdXJvKHBhcmFtKTsKICAqIDwvcHJlPjwvYmxvY2txdW90ZT4KICAqIDxicj4KQEAgLTgyLDI1ICs4MiwyNSBAQAogICAgICoKICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQlDb252ZXJ0ZXJDbGllbnQgY2xpZW50ID0gbmV3IENvbnZlcnRlckNsaWVudCgpOwotCWNsaWVudC5ydW4oYXJncyk7CisgICAgQ29udmVydGVyQ2xpZW50IGNsaWVudCA9IG5ldyBDb252ZXJ0ZXJDbGllbnQoKTsKKyAgICBjbGllbnQucnVuKGFyZ3MpOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBydW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBTdHJpbmcgdXJsID0gbnVsbDsKLQlTdHJpbmcgdGVzdElkUHJlZml4ID0gbnVsbDsKLQlTdHJpbmcgdGVzdElkID0gIiI7CisgICAgU3RyaW5nIHRlc3RJZFByZWZpeCA9IG51bGw7CisgICAgU3RyaW5nIHRlc3RJZCA9ICIiOwogICAgICAgICBTdHJpbmcgam5kaU5hbWUgPSBudWxsOwogICAgICAgICBDb250ZXh0IGNvbnRleHQgPSBudWxsOwogICAgICAgICBTdHJpbmcgY3R4RmFjdG9yeSA9IG51bGw7Ci0JamF2YS5sYW5nLk9iamVjdCBvYmogPSBudWxsOworICAgIGphdmEubGFuZy5PYmplY3Qgb2JqID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlNlY3VyaXR5OjpjbGllbnQgc2lkZSBwcm9ncmFtbWF0aWMgbG9naW4iKTsKIAogICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09IDMpIHsKICAgICAgICAgICAgICAgICB1cmwgPSBhcmdzWzBdOwogICAgICAgICAgICAgICAgIGN0eEZhY3RvcnkgPSBhcmdzWzFdOwotCQlqbmRpTmFtZSA9IGFyZ3NbMl07CisgICAgICAgIGpuZGlOYW1lID0gYXJnc1syXTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgU3RyaW5nIHVzZXIgPSAic2hpbmd3YWkiOwpAQCAtMTA5LDcgKzEwOSw3IEBACiAgICAgICAgICAgICBQcm9ncmFtbWF0aWNMb2dpbiBwbG9naW4gPSBuZXcgUHJvZ3JhbW1hdGljTG9naW4oKTsKICAgICAgICAgICAgIHBsb2dpbi5sb2dpbih1c2VyLCBwYXNzd29yZCk7CiAgICAgICAgICAgICBib29sZWFuIGlzQXBwQ2xpZW50VGVzdCA9ICh1cmwgPT0gbnVsbCkgfHwgKGN0eEZhY3RvcnkgPT0gbnVsbCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIFVzZXIgdHggaXMgdG8gdGVzdCBpc3N1ZToKICAgICAgICAgICAgICAqIGh0dHBzOi8vZ2xhc3NmaXNoLmRldi5qYXZhLm5ldC9pc3N1ZXMvc2hvd19idWcuY2dpP2lkPTE1NjgKQEAgLTExNyw3ICsxMTcsNyBAQAogICAgICAgICAgICAgVXNlclRyYW5zYWN0aW9uIHV0ID0gbnVsbDsKIAogICAgICAgICAgICAgaWYgKGlzQXBwQ2xpZW50VGVzdCkgewotCQl0ZXN0SWRQcmVmaXggPSAiU2VjOjpQTG9naW4gQ29udmVydGVyIFNhbXBsZSBBcHBDbGllbnQiOworICAgICAgICB0ZXN0SWRQcmVmaXggPSAiU2VjOjpQTG9naW4gQ29udmVydGVyIFNhbXBsZSBBcHBDbGllbnQiOwogICAgICAgICAgICAgICAgIHRlc3RJZCA9IHRlc3RJZFByZWZpeDsKICAgICAgICAgICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBDb250ZXh0IHdpdGggZGVmYXVsdCBwcm9wZXJ0aWVzCiAgICAgICAgICAgICAgICAgY29udGV4dCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwpAQCAtMTI2LDcgKzEyNiw3IEBACiAgICAgICAgICAgICAgICAgb2JqID0gY29udGV4dC5sb29rdXAoImphdmE6Y29tcC9lbnYvZWpiL1BMb2dpblNpbXBsZUNvbnZlcnRlciIpOwogICAgICAgICAgICAgICAgIHV0ID0gKFVzZXJUcmFuc2FjdGlvbikgY29udGV4dC5sb29rdXAoIlVzZXJUcmFuc2FjdGlvbiIpOwogICAgICAgICAgICAgfSBlbHNlIHsKLQkJdGVzdElkUHJlZml4ID0gIlNlYzo6UExvZ2luIFN0YW5kYWxvbmUtQ2xpZW50IjsKKyAgICAgICAgdGVzdElkUHJlZml4ID0gIlNlYzo6UExvZ2luIFN0YW5kYWxvbmUtQ2xpZW50IjsKICAgICAgICAgICAgICAgICB0ZXN0SWQgPSB0ZXN0SWRQcmVmaXg7CiAgICAgICAgICAgICAgICAgUHJvcGVydGllcyBlbnYgPSBuZXcgUHJvcGVydGllcygpOwogICAgICAgICAgICAgICAgIGVudi5wdXQoImphdmEubmFtaW5nLnByb3ZpZGVyLnVybCIsIHVybCk7CkBAIC0xMzcsNyArMTM3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVSTDogIiArIHVybCArICIsIEZhY3Rvcnk6ICIgKyBjdHhGYWN0b3J5KTsKICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgSG9tZSBvYmplY3QKICAgICAgICAgICAgICAgICBvYmogPSBjb250ZXh0Lmxvb2t1cChqbmRpTmFtZSk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICB1dCA9IChVc2VyVHJhbnNhY3Rpb24pIGNvbnRleHQubG9va3VwKCJVc2VyVHJhbnNhY3Rpb24iKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIENvbnZlcnRlclJlbW90ZUhvbWUgaG9tZSA9CkBAIC0xNDUsNyArMTQ1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udmVydGVyUmVtb3RlSG9tZS5jbGFzcyk7CiAKICAgICAgICAgICAgIENvbnZlcnRlclJlbW90ZSBjdXJyZW5jeUNvbnZlcnRlciA9IGhvbWUuY3JlYXRlKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcblxuXG49PT09PT09PT09PUJlZ2lubmluZyBTaW1wbGUgVGVzdD09PT09XG5cbiIpOwogICAgICAgICAgICAgdGVzdElkID0gdGVzdElkUHJlZml4ICsgIiBQcm9ncmFtbWF0aWMgTG9naW4iOwogICAgICAgICAgICAgcHJvY2Vzc1JlcXVlc3QoaG9tZSwgIjEwMCIpOwpAQCAtMTY2LDcgKzE2Niw3IEBACiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiT0shIEdvdCBhbiBleHBlY3RlZCBqYXZhLnJtaS5BY2Nlc3NFeGNlcHRpb24iKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICB0ZXN0SWQgPSB0ZXN0SWRQcmVmaXggKyAiIFByb2dyYW1tYXRpYyBSZWxvZ2luIGFmdGVyIGxvZ291dCI7CiAgICAgICAgICAgICBwbG9naW4ubG9naW4odXNlciwgcGFzc3dvcmQpOwogICAgICAgICAgICAgcHJvY2Vzc1JlcXVlc3QoaG9tZSwgIjUwMCIpOwpAQCAtMTkwLDcgKzE5MCw3IEBACiAgICAgICAgICAgICBwcm9jZXNzUmVxdWVzdChob21lLCAiODAwIik7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSBleCkgewotCSAgICBTeXN0ZW0uZXJyLnByaW50bG4oIlRlc3RJRCIgK3Rlc3RJZCk7CisgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiVGVzdElEIiArdGVzdElkKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiQ2F1Z2h0IGFuIHVuZXhwZWN0ZWQgZXhjZXB0aW9uISIpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CkBAIC0yMDIsMzMgKzIwMiwzMyBAQAogICAgIC8vIGRlZmF1bHQgbWV0aG9kIHRoYXQgZG9lcyBub3QgcmVxdWlyZSB0cmFuc2FjdGlvbgogICAgIHByaXZhdGUgdm9pZCBwcm9jZXNzUmVxdWVzdChDb252ZXJ0ZXJSZW1vdGVIb21lIGhvbWUsIFN0cmluZyBhbXQpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBwcm9jZXNzUmVxdWVzdChob21lLCBhbXQsIG51bGwpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBwcm9jZXNzUmVxdWVzdChDb252ZXJ0ZXJSZW1vdGVIb21lIGhvbWUsIFN0cmluZyBhbXQsCiAgICAgICAgIFVzZXJUcmFuc2FjdGlvbiB0eCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgQ29udmVydGVyUmVtb3RlIGN1cnJlbmN5Q29udmVydGVyID0gaG9tZS5jcmVhdGUoKTsKLSAgICAgICAgICAgIAotICAgICAgICBTdHJpbmcgcyA9IGN1cnJlbmN5Q29udmVydGVyLm15Q2FsbGVyUHJpbmNpcGFsKCk7ICAgICAgICAgICAgCisKKyAgICAgICAgU3RyaW5nIHMgPSBjdXJyZW5jeUNvbnZlcnRlci5teUNhbGxlclByaW5jaXBhbCgpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBUaGUgY2FsbGVyIHByaW5jaXBhbCByZWNlaXZlZCBmcm9tIGVqYiAtPiIrcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICBCaWdEZWNpbWFsIHBhcmFtID0gbmV3IEJpZ0RlY2ltYWwgKGFtdCk7CiAgICAgICAgIGlmICh0eCAhPSBudWxsKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJlZ2lubmluZyB1c2VyIHRyYW5zYWN0aW9uIik7CiAgICAgICAgICAgICB0eC5iZWdpbigpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIEJpZ0RlY2ltYWwgYW1vdW50ID0gY3VycmVuY3lDb252ZXJ0ZXIuZG9sbGFyVG9ZZW4ocGFyYW0pOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiQiICsgYW10ICsgIiBpcyA6ICIrYW1vdW50KyJZZW4iKTsKICAgICAgICAgYW1vdW50ID0gY3VycmVuY3lDb252ZXJ0ZXIueWVuVG9FdXJvKHBhcmFtKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJZZW4gaXMgOiIrYW1vdW50KyJFdXJvXG4iKTsKLSAgICAgICAgCisKICAgICAgICAgaWYgKHR4ICE9IG51bGwpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29tbWl0dGluZyB1c2VyIHRyYW5zYWN0aW9uIik7CiAgICAgICAgICAgICB0eC5jb21taXQoKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY3Bsb2dpbi9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NwbG9naW4vZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwKaW5kZXggZDAyZDA5Yy4uZDAxNDFlZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY3Bsb2dpbi9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jcGxvZ2luL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sCkBAIC0yMyw3ICsyMyw3IEBACiAgICAgPHNtYWxsLWljb24+PC9zbWFsbC1pY29uPgogICAgIDxsYXJnZS1pY29uPjwvbGFyZ2UtaWNvbj4KICAgPC9pY29uPgotICA8ZGlzcGxheS1uYW1lPlBMb2dpbkNvbnZlcnRlckFwcDwvZGlzcGxheS1uYW1lPiAgCisgIDxkaXNwbGF5LW5hbWU+UExvZ2luQ29udmVydGVyQXBwPC9kaXNwbGF5LW5hbWU+CiAgIDxtb2R1bGU+CiAgICAgPGphdmE+c2VjLXBsb2dpbi1jb252ZXJ0ZXItY2xpZW50LmphcjwvamF2YT4KICAgPC9tb2R1bGU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jcGxvZ2luL2VqYi9Db252ZXJ0ZXJCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9jcGxvZ2luL2VqYi9Db252ZXJ0ZXJCZWFuLmphdmEKaW5kZXggNmE4MjQ2MC4uZWZmNjY2NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY3Bsb2dpbi9lamIvQ29udmVydGVyQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NwbG9naW4vZWpiL0NvbnZlcnRlckJlYW4uamF2YQpAQCAtMzMsNyArMzMsNyBAQAogICAgIEJpZ0RlY2ltYWwgeWVuUmF0ZSA9IG5ldyBCaWdEZWNpbWFsKCIxMjEuNjAwMCIpOwogICAgIEJpZ0RlY2ltYWwgZXVyb1JhdGUgPSBuZXcgQmlnRGVjaW1hbCgiMC4wMDc3Iik7CiAgICAgU2Vzc2lvbkNvbnRleHQgbXlzYyA9IG51bGw7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIG15Q2FsbGVyUHJpbmNpcGFsKCl7CiAgICAgICAgIHJldHVybiBteXNjLmdldENhbGxlclByaW5jaXBhbCgpLnRvU3RyaW5nKCk7CiAgICAgfQpAQCAtNDEsNyArNDEsNyBAQAogICAgICAqIFJldHVybnMgdGhlIHllbiB2YWx1ZSBmb3IgYSBnaXZlbiBkb2xsYXIgYW1vdW50LgogICAgICAqIEBwYXJhbSBkb2xsYXJzIGRvbGxhciBhbW91bnQgdG8gYmUgY29udmVydGVkIHRvIHllbi4KICAgICAgKi8KLSAgICBwdWJsaWMgQmlnRGVjaW1hbCBkb2xsYXJUb1llbihCaWdEZWNpbWFsIGRvbGxhcnMpIHsgICAgICAgCisgICAgcHVibGljIEJpZ0RlY2ltYWwgZG9sbGFyVG9ZZW4oQmlnRGVjaW1hbCBkb2xsYXJzKSB7CiAgICAgICAgIEJpZ0RlY2ltYWwgcmVzdWx0ID0gZG9sbGFycy5tdWx0aXBseSh5ZW5SYXRlKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdC5zZXRTY2FsZSgyLEJpZ0RlY2ltYWwuUk9VTkRfVVApOwogICAgIH0KQEAgLTc1LDcgKzc1LDcgQEAKICAgICAgKiBMb2FkcyB0aGUgc3RhdGUgb2YgdGhlIGJlYW4gZnJvbSBzZWNvbmRhcnkgc3RvcmFnZS4gUmVxdWlyZWQgYnkgRUpCIHNwZWMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7fQotICAgIAorCiAgICAgLyoqCiAgICAgICogS2VlcHMgdGhlIHN0YXRlIG9mIHRoZSBiZWFuIHRvIHNlY29uZGFyeSBzdG9yYWdlLiBSZXF1aXJlZCBieSBFSkIgc3BlYy4KICAgICAgKi8KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2NwbG9naW4vZWpiL0NvbnZlcnRlclJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY3Bsb2dpbi9lamIvQ29udmVydGVyUmVtb3RlLmphdmEKaW5kZXggYmMzMWQ3NS4uMjRjZDVmNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY3Bsb2dpbi9lamIvQ29udmVydGVyUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvY3Bsb2dpbi9lamIvQ29udmVydGVyUmVtb3RlLmphdmEKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICAgKiBAcGFyYW0geWVuIHllbiBhbW91bnQgdG8gYmUgY29udmVydGVkIHRvIGV1cm8uCiAgICAgICovCiAgICAgcHVibGljIEJpZ0RlY2ltYWwgeWVuVG9FdXJvKEJpZ0RlY2ltYWwgeWVuKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBteUNhbGxlclByaW5jaXBhbCgpIHRocm93cyBSZW1vdGVFeGNlcHRpb247Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2RlZmF1bHRwMnIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2RlZmF1bHRwMnIvYnVpbGQucHJvcGVydGllcwppbmRleCBiOThlMGZmLi42YmRiNzM1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9kZWZhdWx0cDJyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvZGVmYXVsdHAyci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzZWN1cml0eS1kZWZhdWx0cDJyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIgLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2RlZmF1bHRwMnIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvZGVmYXVsdHAyci9idWlsZC54bWwKaW5kZXggODg5YzhjZC4uYTIwZjRhYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvZGVmYXVsdHAyci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvZGVmYXVsdHAyci9idWlsZC54bWwKQEAgLTI2LDcgKzI2LDcgQEAKIF0+CiAKIDxwcm9qZWN0IG5hbWU9InNlY3VyaXR5LWRlZmF1bHRwMnIiIGJhc2VkaXI9Ii4iIGRlZmF1bHQ9InVzYWdlIj4KLSAgCisKICAgJmNvbW1vblNldHVwOwogICAmY29tbW9uQnVpbGQ7CiAgICZjb21tb25SdW47CkBAIC0zOCwxMCArMzgsMTAgQEAKICAgICA8YW50Y2FsbCB0YXJnZXQ9InRlc3QtcDJyLWRpc2FibGVkIi8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bnNldHVwIi8+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9InRlc3QtcDJyLWVuYWJsZWQiCiAgICAgICBkZXBlbmRzPSJlbmFibGUtcDJyLCBkZXBsb3ksIHJ1biwgdW5kZXBsb3kiLz4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJ0ZXN0LXAyci1kaXNhYmxlZCIKICAgICAgIGRlcGVuZHM9ImRpc2FibGUtcDJyLCBkZXBsb3ksIHJ1bi1uZWdhdGl2ZSwgdW5kZXBsb3kiLz4KIApAQCAtNDksMjUgKzQ5LDI1IEBACiAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CiAgICAgPGRlbGV0ZSBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0id2ViIi8+CiAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+Ci0gICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIiAvPiAKKyAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiIC8+CiAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIj4KICAgICAgIDxwYXJhbSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0iLz4KICAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0icnVud2ViIj4KICAgICAgIDxwYXJhbSBuYW1lPSJzZXJ2bGV0IiB2YWx1ZT0iVGVzdFNlcnZsZXQiLz4KQEAgLTg2LDcgKzg2LDcgQEAKICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0Y2FzZWlkIiB2YWx1ZT0idXNlci1hdXRoLXdpdGgtZ2V0Ii8+CiAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJydW4tbmVnYXRpdmUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bndlYi00MDMiPgogICAgICAgPHBhcmFtIG5hbWU9InNlcnZsZXQiIHZhbHVlPSJUZXN0U2VydmxldCIvPgpAQCAtOTYsNyArOTYsNyBAQAogICAgICAgPHBhcmFtIG5hbWU9InRlc3RjYXNlaWQiIHZhbHVlPSJ1c2VyLWF1dGgtc2hvdWxkLWZhaWwiLz4KICAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9InJ1bndlYiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDx0YXNrZGVmIG5hbWU9IndlYnRlc3QiIGNsYXNzbmFtZT0iJHt3ZWJ0ZXN0LmNsYXNzbmFtZX0iCiAgICAgICAgIGNsYXNzcGF0aD0iJHt3ZWJ0ZXN0LmNsYXNzcGF0aH0iIC8+CkBAIC0xMjYsNyArMTI2LDcgQEAKICAgICAgICAgdGVzdENhc2VEZXNjcmlwdGlvbj0iVGVzdGluZyBkZWZhdWx0IHByaW5jaXBhbCB0byByb2xlIG1hcHBpbmciCiAgICAgICAgIHRlc3RTdHJhdGVneT0iVGVzdGluZyBkZWZhdWx0IHByaW5jaXBhbCB0byByb2xlIG1hcHBpbmciLz4KICAgPC90YXJnZXQ+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0icnVud2ViLTQwMyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDx0YXNrZGVmIG5hbWU9IndlYnRlc3QiIGNsYXNzbmFtZT0iJHt3ZWJ0ZXN0LmNsYXNzbmFtZX0iCiAgICAgICAgIGNsYXNzcGF0aD0iJHt3ZWJ0ZXN0LmNsYXNzcGF0aH0iIC8+CkBAIC0xNTYsMTUgKzE1NiwxNSBAQAogICAgICAgICB0ZXN0Q2FzZURlc2NyaXB0aW9uPSJUZXN0aW5nIGRlZmF1bHQgcDJyIG1hcHBpbmcgZGlzYWJsZWQiCiAgICAgICAgIHRlc3RTdHJhdGVneT0iVGVzdGluZyBkZWZhdWx0IHAyciBtYXBwaW5nIGRpc2FibGVkIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KICAgPC90YXJnZXQ+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLXVzZXItY29tbW9uIj4KICAgICAgIDxwYXJhbSBuYW1lPSJ1c2VyIiB2YWx1ZT0iYm9iYnkiLz4KQEAgLTE3MywxNCArMTczLDE0IEBACiAgICAgPC9hbnRjYWxsPgogICAgPCEtLSA8YW50Y2FsbCB0YXJnZXQ9InJlY29uZmlnLWNvbW1vbiIvPi0tPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJ1bnNldHVwIj4KICAgICA8IS0tIHJlbW92ZSB0ZXN0IHVzZXJzLCBqdXN0IGNsZWFudXAuIC0tPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLXVzZXItY29tbW9uIj4KICAgICAgIDxwYXJhbSBuYW1lPSJ1c2VyIiB2YWx1ZT0iYm9iYnkiLz4KICAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImVuYWJsZS1wMnIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0Ii8+CkBAIC0xODgsNyArMTg4LDcgQEAKICAgICAgICAgICB2YWx1ZT0ic2VydmVyLWNvbmZpZy5zZWN1cml0eS1zZXJ2aWNlLmFjdGl2YXRlLWRlZmF1bHQtcHJpbmNpcGFsLXRvLXJvbGUtbWFwcGluZz10cnVlIi8+CiAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJkaXNhYmxlLXAyciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2RlZmF1bHRwMnIvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvZGVmYXVsdHAyci9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggMjU1MGQyZS4uM2I0ODk4NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvZGVmYXVsdHAyci9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvZGVmYXVsdHAyci9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIC0tPgogCiA8d2ViLWFwcD4KLSAgCisKICAgPGRpc3BsYXktbmFtZT5zZWN1cml0eS1kZWZhdWx0cDJyPC9kaXNwbGF5LW5hbWU+CiAgIDxkaXN0cmlidXRhYmxlPjwvZGlzdHJpYnV0YWJsZT4KICAgPHNlcnZsZXQ+CkBAIC0zMCw3ICszMCw3IEBACiAgICAgPHNlcnZsZXQtbmFtZT5UZXN0U2VydmxldDwvc2VydmxldC1uYW1lPgogICAgIDx1cmwtcGF0dGVybj4vVGVzdFNlcnZsZXQ8L3VybC1wYXR0ZXJuPgogICA8L3NlcnZsZXQtbWFwcGluZz4KLSAgCisKICAgPHNlY3VyaXR5LWNvbnN0cmFpbnQ+CiAgICAgPHdlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgogICAgICAgPHdlYi1yZXNvdXJjZS1uYW1lPnNlY3VyZTwvd2ViLXJlc291cmNlLW5hbWU+CkBAIC00NSwxNCArNDUsMTQgQEAKICAgICAgIDx0cmFuc3BvcnQtZ3VhcmFudGVlPk5PTkU8L3RyYW5zcG9ydC1ndWFyYW50ZWU+CiAgICAgPC91c2VyLWRhdGEtY29uc3RyYWludD4KICAgPC9zZWN1cml0eS1jb25zdHJhaW50PgotICAKKwogICA8bG9naW4tY29uZmlnPgogICAgIDxhdXRoLW1ldGhvZD5CQVNJQzwvYXV0aC1tZXRob2Q+CiAgICAgPHJlYWxtLW5hbWU+ZGVmYXVsdDwvcmVhbG0tbmFtZT4KICAgPC9sb2dpbi1jb25maWc+Ci0gIAorCiAgIDxzZWN1cml0eS1yb2xlPgogICAgIDxyb2xlLW5hbWU+bXlncm91cDwvcm9sZS1uYW1lPgogICA8L3NlY3VyaXR5LXJvbGU+Ci0gIAorCiA8L3dlYi1hcHA+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9kZWZhdWx0cDJyL3dlYi9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvZGVmYXVsdHAyci93ZWIvVGVzdFNlcnZsZXQuamF2YQppbmRleCBkZDRlODgzLi4yMjA4MmU4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9kZWZhdWx0cDJyL3dlYi9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2RlZmF1bHRwMnIvd2ViL1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTI0LDEwICsyNCwxMCBAQAogaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CiAKIHB1YmxpYyBjbGFzcyBUZXN0U2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlcnZpY2UoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQogICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgbWV0aG9kID0gcmVxLmdldE1ldGhvZCgpOwogICAgICAgICBpZiAobWV0aG9kLmVxdWFscygiRk9PIikpIHsKICAgICAgICAgICAgIGRvRm9vKHJlcSwgcmVzcCk7CkBAIC0zNSwxOCArMzUsMTggQEAKICAgICAgICAgICAgIHN1cGVyLnNlcnZpY2UocmVxLCByZXNwKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvRm9vKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkKICAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcC5nZXRXcml0ZXIoKTsKICAgICAgICAgb3V0LnByaW50bG4oImRvRm9vIHdpdGggIiArIHJlcS5nZXRVc2VyUHJpbmNpcGFsKCkpOwogICAgICAgICBvdXQuY2xvc2UoKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCiAgICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3AuZ2V0V3JpdGVyKCk7CiAgICAgICAgIG91dC5wcmludGxuKCJkb0dldCB3aXRoICIgKyByZXEuZ2V0VXNlclByaW5jaXBhbCgpKTsKICAgICAgICAgb3V0LmNsb3NlKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9lamItYXV0aC1hc3luYy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvZWpiLWF1dGgtYXN5bmMvYnVpbGQucHJvcGVydGllcwppbmRleCAzNGI0MDU1Li5mZDk5ZTI5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9lamItYXV0aC1hc3luYy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2VqYi1hdXRoLWFzeW5jL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDYgKzE1LDYgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InNlY3VyaXR5Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9lamItbXV0dWFsLXNzbC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvZWpiLW11dHVhbC1zc2wvYnVpbGQucHJvcGVydGllcwppbmRleCA4Y2IwMzRkLi4wMDNkMDA1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9lamItbXV0dWFsLXNzbC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2VqYi1tdXR1YWwtc3NsL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIxICsxNSwyMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic2VjLXNzbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tY29udmVydGVyIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1jb252ZXJ0ZXIiLz4gICAgICAgIFx1MDAyMAogCi08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJjb20uc3VuLnMxcGVxZS5zZWN1cml0eS5zc2wuY29udmVydGVyLmNsaWVudC5Db252ZXJ0ZXJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iY29tLnN1bi5zMXBlcWUuc2VjdXJpdHkuc3NsLmNvbnZlcnRlci5jbGllbnQuQ29udmVydGVyQ2xpZW50Ii8+CiAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogCiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvZWpiLW11dHVhbC1zc2wvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvZWpiLW11dHVhbC1zc2wvYnVpbGQueG1sCmluZGV4IGJhMWIzOGUuLmNlNTU0MjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2VqYi1tdXR1YWwtc3NsL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9lamItbXV0dWFsLXNzbC9idWlsZC54bWwKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwcmVwYXJlLXN0b3JlLWNvbW1vbiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQiLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5zZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlbW92ZS1zdG9yZS1jb21tb24iLz4KICAgICAgICAgPCEtLWFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0Ii8tLT4KQEAgLTYzLDE1ICs2MywxNSBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWxvY2FsIi8+IAotCTxhbnRjYWxsIHRhcmdldD0icnVuLXN0YW5kYWxvbmUtY2xpZW50Ii8+CisgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1sb2NhbCIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLXN0YW5kYWxvbmUtY2xpZW50Ii8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bmNsaWVudC1sb2NhbCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtODMsNyArODMsNyBAQAogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogICAgIDwhLS0gVGFyZ2V0IHRvIHJ1biB0aGUgc3RhbmRhbG9uZSBjbGllbnQgd2l0aG91dCBBQ0MgLS0+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9lamItbXV0dWFsLXNzbC9jbGllbnQvQ29udmVydGVyQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9lamItbXV0dWFsLXNzbC9jbGllbnQvQ29udmVydGVyQ2xpZW50LmphdmEKaW5kZXggYWNlZGY4ZS4uZTNkNDA0NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvZWpiLW11dHVhbC1zc2wvY2xpZW50L0NvbnZlcnRlckNsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2VqYi1tdXR1YWwtc3NsL2NsaWVudC9Db252ZXJ0ZXJDbGllbnQuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogCiAvKioKICAqIEEgc2ltcGxlIGphdmEgY2xpZW50LiBUaGlzIHVzZXMgdGhlIHNlcnZpY2VzIHByb3ZpZGVkIGJ5IHRoZSA8Y29kZT5Db252ZXJ0ZXJCZWFuPC9jb2RlPiBhbmQKLSAqIGNvbnZlcnRzIDEwMCBVUyBkb2xsYXJzIHRvIFllbiBhbmQgMTAwIFllbiB0byBFdXJvLiAKKyAqIGNvbnZlcnRzIDEwMCBVUyBkb2xsYXJzIHRvIFllbiBhbmQgMTAwIFllbiB0byBFdXJvLgogICogPHA+SW4gdGhpcyByZWdhcmQsIGl0IGRvZXMgdGhlIGZvbGxvd2luZyBpbiBvcmRlcgogICogPHVsPgogICogPGxpPkxvY2F0ZXMgdGhlIGhvbWUgaW50ZXJmYWNlIG9mIHRoZSBlbnRlcnByaXNlIGJlYW4KQEAgLTM3LDIxICszNywyMSBAQAogICogPGJyPgogICogPGI+TG9jYXRpbmcgdGhlIGhvbWUgaW50ZXJmYWNlOjwvYj4KICAqIDxibG9ja3F1b3RlPjxwcmU+Ci0gKglDb250ZXh0IGluaXRpYWwgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAqCUNvbnRleHQgbXlFbnYgPSAoQ29udGV4dClpbml0aWFsLmxvb2t1cCgiamF2YTpjb21wL2VudiIpOwotICoJT2JqZWN0IG9ianJlZiA9IG15RW52Lmxvb2t1cCgiZWpiL1NpbXBsZUNvbnZlcnRlciIpOworICogICAgQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgKiAgICBDb250ZXh0IG15RW52ID0gKENvbnRleHQpaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYiKTsKKyAqICAgIE9iamVjdCBvYmpyZWYgPSBteUVudi5sb29rdXAoImVqYi9TaW1wbGVDb252ZXJ0ZXIiKTsKICAqICBDb252ZXJ0ZXJIb21lIGhvbWUgPSAoQ29udmVydGVySG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCBDb252ZXJ0ZXJIb21lLmNsYXNzKTsKICAqIDwvcHJlPjwvYmxvY2txdW90ZT4KICAqIDxicj4KICAqIDxiPkNyZWF0aW5nIHRoZSByZW1vdGUgaW50ZXJmYWNlOjwvYj4KICAqIDxibG9ja3F1b3RlPjxwcmU+Ci0gKglDb252ZXJ0ZXIgY3VycmVuY3lDb252ZXJ0ZXIgPSBob21lLmNyZWF0ZSgpOworICogICAgQ29udmVydGVyIGN1cnJlbmN5Q29udmVydGVyID0gaG9tZS5jcmVhdGUoKTsKICAqIDwvcHJlPjwvYmxvY2txdW90ZT4KICAqIDxicj4KICAqIDxiPkludm9raW5nIGJ1c2luZXNzIG1ldGhvZHM6PC9iPgogICogPGJsb2NrcXVvdGU+PHByZT4KICAqICBCaWdEZWNpbWFsIHBhcmFtID0gbmV3IEJpZ0RlY2ltYWwgKCIxMDAuMDAiKTsKLSAqCWFtb3VudCA9IGN1cnJlbmN5Q29udmVydGVyLmRvbGxhclRvWWVuKHBhcmFtKTsKKyAqICAgIGFtb3VudCA9IGN1cnJlbmN5Q29udmVydGVyLmRvbGxhclRvWWVuKHBhcmFtKTsKICAqICBhbW91bnQgPSBjdXJyZW5jeUNvbnZlcnRlci55ZW5Ub0V1cm8ocGFyYW0pOwogICogPC9wcmU+PC9ibG9ja3F1b3RlPgogICogPGJyPgpAQCAtNjYsNyArNjYsNyBAQAogCiBwdWJsaWMgY2xhc3MgQ29udmVydGVyQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgQ29udmVydGVyQ2xpZW50KCkgewpAQCAtODAsMzUgKzgwLDM1IEBACiAgICAgKgogICAgICovCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCUNvbnZlcnRlckNsaWVudCBjbGllbnQgPSBuZXcgQ29udmVydGVyQ2xpZW50KCk7Ci0JY2xpZW50LnJ1bihhcmdzKTsKKyAgICBDb252ZXJ0ZXJDbGllbnQgY2xpZW50ID0gbmV3IENvbnZlcnRlckNsaWVudCgpOworICAgIGNsaWVudC5ydW4oYXJncyk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHJ1bihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIFN0cmluZyB1cmwgPSBudWxsOwotCVN0cmluZyB0ZXN0SWQgPSBudWxsOworICAgIFN0cmluZyB0ZXN0SWQgPSBudWxsOwogICAgICAgICBTdHJpbmcgam5kaU5hbWUgPSBudWxsOwogICAgICAgICBDb250ZXh0IGNvbnRleHQgPSBudWxsOwogICAgICAgICBTdHJpbmcgY3R4RmFjdG9yeSA9IG51bGw7Ci0JamF2YS5sYW5nLk9iamVjdCBvYmogPSBudWxsOworICAgIGphdmEubGFuZy5PYmplY3Qgb2JqID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlNlY3VyaXR5OjpTU0wgdGVzdGVyIC1jb252ZXJ0ZXIgc2FtcGxlLiIpOwogCiAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPT0gMykgewogICAgICAgICAgICAgICAgIHVybCA9IGFyZ3NbMF07CiAgICAgICAgICAgICAgICAgY3R4RmFjdG9yeSA9IGFyZ3NbMV07Ci0JCWpuZGlOYW1lID0gYXJnc1syXTsKKyAgICAgICAgam5kaU5hbWUgPSBhcmdzWzJdOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoICh1cmwgPT0gbnVsbCkgfHwgKGN0eEZhY3RvcnkgPT0gbnVsbCkgKSB7Ci0JCXRlc3RJZCA9ICJTZWM6Ok11dHVhbF9TU0xfc2ltcGxlIENvbnZlcnRlciBTYW1wbGUgQXBwQ2xpZW50IjsKKyAgICAgICAgdGVzdElkID0gIlNlYzo6TXV0dWFsX1NTTF9zaW1wbGUgQ29udmVydGVyIFNhbXBsZSBBcHBDbGllbnQiOwogICAgICAgICAgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIENvbnRleHQgd2l0aCBkZWZhdWx0IHByb3BlcnRpZXMKICAgICAgICAgICAgICAgICBjb250ZXh0ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZWZhdWx0IENvbnRleHQgSW5pdGlhbGl6ZWQuLi4iKTsKICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgSG9tZSBvYmplY3QKICAgICAgICAgICAgICAgICBvYmogPSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU1NMU2ltcGxlQ29udmVydGVyIik7CiAgICAgICAgICAgICB9IGVsc2UgewotCQl0ZXN0SWQgPSAiU2VjOjpNdXR1YWxfU1NMX3NpbXBsZSBTdGFuZGFsb25lLUNsaWVudCI7CisgICAgICAgIHRlc3RJZCA9ICJTZWM6Ok11dHVhbF9TU0xfc2ltcGxlIFN0YW5kYWxvbmUtQ2xpZW50IjsKICAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzIGVudiA9IG5ldyBQcm9wZXJ0aWVzKCk7CiAgICAgICAgICAgICAgICAgZW52LnB1dCgiamF2YS5uYW1pbmcucHJvdmlkZXIudXJsIiwgdXJsKTsKICAgICAgICAgICAgICAgICBlbnYucHV0KCJqYXZhLm5hbWluZy5mYWN0b3J5LmluaXRpYWwiLCBjdHhGYWN0b3J5KTsKQEAgLTEyNiwxMiArMTI2LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnZlcnRlclJlbW90ZUhvbWUuY2xhc3MpOwogCiAgICAgICAgICAgICBDb252ZXJ0ZXJSZW1vdGUgY3VycmVuY3lDb252ZXJ0ZXIgPSBob21lLmNyZWF0ZSgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIFN0cmluZyBzID0gY3VycmVuY3lDb252ZXJ0ZXIubXlDYWxsZXJQcmluY2lwYWwoKTsgICAgICAgICAgICAKLSAgICAgICAgICAgIAorCisKKyAgICAgICAgICAgIFN0cmluZyBzID0gY3VycmVuY3lDb252ZXJ0ZXIubXlDYWxsZXJQcmluY2lwYWwoKTsKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgVGhlIGNhbGxlciBwcmluY2lwYWwgcmVjZWl2ZWQgZnJvbSBlamIgLT4iK3MpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmKCFteXMuZXF1YWxzSWdub3JlQ2FzZShzKSl7CiAgICAgICAgICAgICAgICAgU3RyaW5nIGVycm9yID0gIlRoZSBjYWxsZXIgcHJpbmNpcGFscyBkb250IG1hdGNoISEgLSBUZXN0IEZhaWxlZCI7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGVycm9yKTsKQEAgLTE1MSw3ICsxNTEsNyBAQAogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJDYXVnaHQgYW4gdW5leHBlY3RlZCBleGNlcHRpb24hIik7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfSBmaW5hbGx5IHsKLQkgICAgc3RhdC5wcmludFN1bW1hcnkodGVzdElkKTsKKyAgICAgICAgc3RhdC5wcmludFN1bW1hcnkodGVzdElkKTsKICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2VqYi1tdXR1YWwtc3NsL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2VqYi1tdXR1YWwtc3NsL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbAppbmRleCBhYmVkZTk3Li5kYzQxZjhkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9lamItbXV0dWFsLXNzbC9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvZWpiLW11dHVhbC1zc2wvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sCkBAIC0yNCw3ICsyNCw3IEBACiAgICAgPGVudi1lbnRyeS1uYW1lPmNlcnRuYW1lPC9lbnYtZW50cnktbmFtZT4KICAgICA8ZW52LWVudHJ5LXR5cGU+amF2YS5sYW5nLlN0cmluZzwvZW52LWVudHJ5LXR5cGU+CiAgICAgPGVudi1lbnRyeS12YWx1ZT5DTj1TU0xUZXN0LCBPVT1TdW4gSmF2YSBTeXN0ZW0gQXBwbGljYXRpb24gU2VydmVyLCBPPVN1biBNaWNyb3N5c3RlbXMsIEw9U2FudGEgQ2xhcmEsIFNUPUNhbGlmb3JuaWEsIEM9VVM8L2Vudi1lbnRyeS12YWx1ZT4KLSAgPC9lbnYtZW50cnk+ICAKKyAgPC9lbnYtZW50cnk+CiAgIDxlamItcmVmPgogICAgIDxlamItcmVmLW5hbWU+ZWpiL1NTTFNpbXBsZUNvbnZlcnRlcjwvZWpiLXJlZi1uYW1lPgogICAgIDxlamItcmVmLXR5cGU+U2Vzc2lvbjwvZWpiLXJlZi10eXBlPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvZWpiLW11dHVhbC1zc2wvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9lamItbXV0dWFsLXNzbC9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbAppbmRleCAyNmIyMTg5Li42NjE0OTkzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9lamItbXV0dWFsLXNzbC9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9lamItbXV0dWFsLXNzbC9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbApAQCAtMjMsNyArMjMsNyBAQAogICAgIDxzbWFsbC1pY29uPjwvc21hbGwtaWNvbj4KICAgICA8bGFyZ2UtaWNvbj48L2xhcmdlLWljb24+CiAgIDwvaWNvbj4KLSAgPGRpc3BsYXktbmFtZT5TU0xDb252ZXJ0ZXJBcHA8L2Rpc3BsYXktbmFtZT4gIAorICA8ZGlzcGxheS1uYW1lPlNTTENvbnZlcnRlckFwcDwvZGlzcGxheS1uYW1lPgogICA8bW9kdWxlPgogICAgIDxqYXZhPnNlYy1zc2wtY29udmVydGVyLWNsaWVudC5qYXI8L2phdmE+CiAgIDwvbW9kdWxlPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvZWpiLW11dHVhbC1zc2wvZWpiL0NvbnZlcnRlckJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2VqYi1tdXR1YWwtc3NsL2VqYi9Db252ZXJ0ZXJCZWFuLmphdmEKaW5kZXggMjRhYjA0NC4uM2VmYzcyOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvZWpiLW11dHVhbC1zc2wvZWpiL0NvbnZlcnRlckJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9lamItbXV0dWFsLXNzbC9lamIvQ29udmVydGVyQmVhbi5qYXZhCkBAIC0zMyw3ICszMyw3IEBACiAgICAgQmlnRGVjaW1hbCB5ZW5SYXRlID0gbmV3IEJpZ0RlY2ltYWwoIjEyMS42MDAwIik7CiAgICAgQmlnRGVjaW1hbCBldXJvUmF0ZSA9IG5ldyBCaWdEZWNpbWFsKCIwLjAwNzciKTsKICAgICBTZXNzaW9uQ29udGV4dCBteXNjID0gbnVsbDsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgbXlDYWxsZXJQcmluY2lwYWwoKXsKICAgICAgICAgcmV0dXJuIG15c2MuZ2V0Q2FsbGVyUHJpbmNpcGFsKCkudG9TdHJpbmcoKTsKICAgICB9CkBAIC00MSw3ICs0MSw3IEBACiAgICAgICogUmV0dXJucyB0aGUgeWVuIHZhbHVlIGZvciBhIGdpdmVuIGRvbGxhciBhbW91bnQuCiAgICAgICogQHBhcmFtIGRvbGxhcnMgZG9sbGFyIGFtb3VudCB0byBiZSBjb252ZXJ0ZWQgdG8geWVuLgogICAgICAqLwotICAgIHB1YmxpYyBCaWdEZWNpbWFsIGRvbGxhclRvWWVuKEJpZ0RlY2ltYWwgZG9sbGFycykgeyAgICAgICAKKyAgICBwdWJsaWMgQmlnRGVjaW1hbCBkb2xsYXJUb1llbihCaWdEZWNpbWFsIGRvbGxhcnMpIHsKICAgICAgICAgQmlnRGVjaW1hbCByZXN1bHQgPSBkb2xsYXJzLm11bHRpcGx5KHllblJhdGUpOwogICAgICAgICByZXR1cm4gcmVzdWx0LnNldFNjYWxlKDIsQmlnRGVjaW1hbC5ST1VORF9VUCk7CiAgICAgfQpAQCAtNzUsNyArNzUsNyBAQAogICAgICAqIExvYWRzIHRoZSBzdGF0ZSBvZiB0aGUgYmVhbiBmcm9tIHNlY29uZGFyeSBzdG9yYWdlLiBSZXF1aXJlZCBieSBFSkIgc3BlYy4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHt9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBLZWVwcyB0aGUgc3RhdGUgb2YgdGhlIGJlYW4gdG8gc2Vjb25kYXJ5IHN0b3JhZ2UuIFJlcXVpcmVkIGJ5IEVKQiBzcGVjLgogICAgICAqLwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvZWpiLW11dHVhbC1zc2wvZWpiL0NvbnZlcnRlclJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvZWpiLW11dHVhbC1zc2wvZWpiL0NvbnZlcnRlclJlbW90ZS5qYXZhCmluZGV4IGFhMWU5MWIuLjk1MTdhYWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2VqYi1tdXR1YWwtc3NsL2VqYi9Db252ZXJ0ZXJSZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9lamItbXV0dWFsLXNzbC9lamIvQ29udmVydGVyUmVtb3RlLmphdmEKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICAgKiBAcGFyYW0geWVuIHllbiBhbW91bnQgdG8gYmUgY29udmVydGVkIHRvIGV1cm8uCiAgICAgICovCiAgICAgcHVibGljIEJpZ0RlY2ltYWwgeWVuVG9FdXJvKEJpZ0RlY2ltYWwgeWVuKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBteUNhbGxlclByaW5jaXBhbCgpIHRocm93cyBSZW1vdGVFeGNlcHRpb247Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2VqYi1vbmV3YXktc3NsL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9lamItb25ld2F5LXNzbC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDhmYzRlMjMuLjUxNWNlNDcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2VqYi1vbmV3YXktc3NsL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvZWpiLW9uZXdheS1zc2wvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjEgKzE1LDIxIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzZWMtc3NsIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1jb252ZXJ0ZXIiLz4KIAotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iY29tLnN1bi5zMXBlcWUuc2VjdXJpdHkuc3NsLmNvbnZlcnRlci5jbGllbnQuQ29udmVydGVyQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9ImNvbS5zdW4uczFwZXFlLnNlY3VyaXR5LnNzbC5jb252ZXJ0ZXIuY2xpZW50LkNvbnZlcnRlckNsaWVudCIvPgogCiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KIAogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2VqYi1vbmV3YXktc3NsL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2VqYi1vbmV3YXktc3NsL2J1aWxkLnhtbAppbmRleCBmOGI4YjZiLi4xMjBiNGI4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9lamItb25ld2F5LXNzbC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvZWpiLW9uZXdheS1zc2wvYnVpbGQueG1sCkBAIC0zOSw3ICszOSw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTUxLDE0ICs1MSwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWxvY2FsIi8+IAorICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtbG9jYWwiLz4KICAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLXN0YW5kYWxvbmUtY2xpZW50Ii8+CiAgICAgPC90YXJnZXQ+CiAKQEAgLTcxLDcgKzcxLDcgQEAKICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KICAgICA8IS0tIFRhcmdldCB0byBydW4gdGhlIHN0YW5kYWxvbmUgY2xpZW50IHdpdGhvdXQgQUNDIC0tPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvZWpiLW9uZXdheS1zc2wvY2xpZW50L0NvbnZlcnRlckNsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvZWpiLW9uZXdheS1zc2wvY2xpZW50L0NvbnZlcnRlckNsaWVudC5qYXZhCmluZGV4IGRkYmM1MDQuLjU1MWFmMjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2VqYi1vbmV3YXktc3NsL2NsaWVudC9Db252ZXJ0ZXJDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9lamItb25ld2F5LXNzbC9jbGllbnQvQ29udmVydGVyQ2xpZW50LmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKIAogLyoqCiAgKiBBIHNpbXBsZSBqYXZhIGNsaWVudC4gVGhpcyB1c2VzIHRoZSBzZXJ2aWNlcyBwcm92aWRlZCBieSB0aGUgPGNvZGU+Q29udmVydGVyQmVhbjwvY29kZT4gYW5kCi0gKiBjb252ZXJ0cyAxMDAgVVMgZG9sbGFycyB0byBZZW4gYW5kIDEwMCBZZW4gdG8gRXVyby4gCisgKiBjb252ZXJ0cyAxMDAgVVMgZG9sbGFycyB0byBZZW4gYW5kIDEwMCBZZW4gdG8gRXVyby4KICAqIDxwPkluIHRoaXMgcmVnYXJkLCBpdCBkb2VzIHRoZSBmb2xsb3dpbmcgaW4gb3JkZXIKICAqIDx1bD4KICAqIDxsaT5Mb2NhdGVzIHRoZSBob21lIGludGVyZmFjZSBvZiB0aGUgZW50ZXJwcmlzZSBiZWFuCkBAIC0zNywyMSArMzcsMjEgQEAKICAqIDxicj4KICAqIDxiPkxvY2F0aW5nIHRoZSBob21lIGludGVyZmFjZTo8L2I+CiAgKiA8YmxvY2txdW90ZT48cHJlPgotICoJQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gKglDb250ZXh0IG15RW52ID0gKENvbnRleHQpaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYiKTsKLSAqCU9iamVjdCBvYmpyZWYgPSBteUVudi5sb29rdXAoImVqYi9TaW1wbGVDb252ZXJ0ZXIiKTsKKyAqICAgIENvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICogICAgQ29udGV4dCBteUVudiA9IChDb250ZXh0KWluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52Iik7CisgKiAgICBPYmplY3Qgb2JqcmVmID0gbXlFbnYubG9va3VwKCJlamIvU2ltcGxlQ29udmVydGVyIik7CiAgKiAgQ29udmVydGVySG9tZSBob21lID0gKENvbnZlcnRlckhvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwgQ29udmVydGVySG9tZS5jbGFzcyk7CiAgKiA8L3ByZT48L2Jsb2NrcXVvdGU+CiAgKiA8YnI+CiAgKiA8Yj5DcmVhdGluZyB0aGUgcmVtb3RlIGludGVyZmFjZTo8L2I+CiAgKiA8YmxvY2txdW90ZT48cHJlPgotICoJQ29udmVydGVyIGN1cnJlbmN5Q29udmVydGVyID0gaG9tZS5jcmVhdGUoKTsKKyAqICAgIENvbnZlcnRlciBjdXJyZW5jeUNvbnZlcnRlciA9IGhvbWUuY3JlYXRlKCk7CiAgKiA8L3ByZT48L2Jsb2NrcXVvdGU+CiAgKiA8YnI+CiAgKiA8Yj5JbnZva2luZyBidXNpbmVzcyBtZXRob2RzOjwvYj4KICAqIDxibG9ja3F1b3RlPjxwcmU+CiAgKiAgQmlnRGVjaW1hbCBwYXJhbSA9IG5ldyBCaWdEZWNpbWFsICgiMTAwLjAwIik7Ci0gKglhbW91bnQgPSBjdXJyZW5jeUNvbnZlcnRlci5kb2xsYXJUb1llbihwYXJhbSk7CisgKiAgICBhbW91bnQgPSBjdXJyZW5jeUNvbnZlcnRlci5kb2xsYXJUb1llbihwYXJhbSk7CiAgKiAgYW1vdW50ID0gY3VycmVuY3lDb252ZXJ0ZXIueWVuVG9FdXJvKHBhcmFtKTsKICAqIDwvcHJlPjwvYmxvY2txdW90ZT4KICAqIDxicj4KQEAgLTY2LDcgKzY2LDcgQEAKIAogcHVibGljIGNsYXNzIENvbnZlcnRlckNsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIENvbnZlcnRlckNsaWVudCgpIHsKQEAgLTgwLDM1ICs4MCwzNSBAQAogICAgICoKICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQlDb252ZXJ0ZXJDbGllbnQgY2xpZW50ID0gbmV3IENvbnZlcnRlckNsaWVudCgpOwotCWNsaWVudC5ydW4oYXJncyk7CisgICAgQ29udmVydGVyQ2xpZW50IGNsaWVudCA9IG5ldyBDb252ZXJ0ZXJDbGllbnQoKTsKKyAgICBjbGllbnQucnVuKGFyZ3MpOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBydW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBTdHJpbmcgdXJsID0gbnVsbDsKLQlTdHJpbmcgdGVzdElkID0gbnVsbDsKKyAgICBTdHJpbmcgdGVzdElkID0gbnVsbDsKICAgICAgICAgU3RyaW5nIGpuZGlOYW1lID0gbnVsbDsKICAgICAgICAgQ29udGV4dCBjb250ZXh0ID0gbnVsbDsKICAgICAgICAgU3RyaW5nIGN0eEZhY3RvcnkgPSBudWxsOwotCWphdmEubGFuZy5PYmplY3Qgb2JqID0gbnVsbDsKKyAgICBqYXZhLmxhbmcuT2JqZWN0IG9iaiA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJTZWN1cml0eTo6U1NMIE9uZSB3YXkgc3NsLiIpOwogCiAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPT0gMykgewogICAgICAgICAgICAgICAgIHVybCA9IGFyZ3NbMF07CiAgICAgICAgICAgICAgICAgY3R4RmFjdG9yeSA9IGFyZ3NbMV07Ci0JCWpuZGlOYW1lID0gYXJnc1syXTsKKyAgICAgICAgam5kaU5hbWUgPSBhcmdzWzJdOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoICh1cmwgPT0gbnVsbCkgfHwgKGN0eEZhY3RvcnkgPT0gbnVsbCkgKSB7Ci0JCXRlc3RJZCA9ICJTZWM6OlNTTF9zaW1wbGUgQ29udmVydGVyIFNhbXBsZSBBcHBDbGllbnQiOworICAgICAgICB0ZXN0SWQgPSAiU2VjOjpTU0xfc2ltcGxlIENvbnZlcnRlciBTYW1wbGUgQXBwQ2xpZW50IjsKICAgICAgICAgICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBDb250ZXh0IHdpdGggZGVmYXVsdCBwcm9wZXJ0aWVzCiAgICAgICAgICAgICAgICAgY29udGV4dCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiT25lIHdheSBTU0wgVGVzdCBcbiBEZWZhdWx0IENvbnRleHQgSW5pdGlhbGl6ZWQuLi4iKTsKICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgSG9tZSBvYmplY3QKICAgICAgICAgICAgICAgICBvYmogPSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU1NMU2ltcGxlQ29udmVydGVyIik7CiAgICAgICAgICAgICB9IGVsc2UgewotCQl0ZXN0SWQgPSAiU2VjOjpTU0xfc2ltcGxlIFN0YW5kYWxvbmUtQ2xpZW50IjsKKyAgICAgICAgdGVzdElkID0gIlNlYzo6U1NMX3NpbXBsZSBTdGFuZGFsb25lLUNsaWVudCI7CiAgICAgICAgICAgICAgICAgUHJvcGVydGllcyBlbnYgPSBuZXcgUHJvcGVydGllcygpOwogICAgICAgICAgICAgICAgIGVudi5wdXQoImphdmEubmFtaW5nLnByb3ZpZGVyLnVybCIsIHVybCk7CiAgICAgICAgICAgICAgICAgZW52LnB1dCgiamF2YS5uYW1pbmcuZmFjdG9yeS5pbml0aWFsIiwgY3R4RmFjdG9yeSk7CkBAIC0xMjYsMTIgKzEyNiwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb252ZXJ0ZXJSZW1vdGVIb21lLmNsYXNzKTsKIAogICAgICAgICAgICAgQ29udmVydGVyUmVtb3RlIGN1cnJlbmN5Q29udmVydGVyID0gaG9tZS5jcmVhdGUoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgCi0gICAgICAgICAgICBTdHJpbmcgcyA9IGN1cnJlbmN5Q29udmVydGVyLm15Q2FsbGVyUHJpbmNpcGFsKCk7ICAgICAgICAgICAgCi0gICAgICAgICAgICAKKworCisgICAgICAgICAgICBTdHJpbmcgcyA9IGN1cnJlbmN5Q29udmVydGVyLm15Q2FsbGVyUHJpbmNpcGFsKCk7CisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFRoZSBjYWxsZXIgcHJpbmNpcGFsIHJlY2VpdmVkIGZyb20gZWpiIC0+IitzKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZighbXlzLmVxdWFsc0lnbm9yZUNhc2UocykpewogICAgICAgICAgICAgICAgIFN0cmluZyBlcnJvciA9ICJUaGUgY2FsbGVyIHByaW5jaXBhbHMgZG9udCBtYXRjaCEhIC0gVGVzdCBGYWlsZWQiOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihlcnJvcik7CkBAIC0xNTEsNyArMTUxLDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiQ2F1Z2h0IGFuIHVuZXhwZWN0ZWQgZXhjZXB0aW9uISIpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0gZmluYWxseSB7Ci0JICAgIHN0YXQucHJpbnRTdW1tYXJ5KHRlc3RJZCk7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KHRlc3RJZCk7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9lamItb25ld2F5LXNzbC9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2VqYi1vbmV3YXktc3NsL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sCmluZGV4IDI2YjIxODkuLjY2MTQ5OTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2VqYi1vbmV3YXktc3NsL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2VqYi1vbmV3YXktc3NsL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sCkBAIC0yMyw3ICsyMyw3IEBACiAgICAgPHNtYWxsLWljb24+PC9zbWFsbC1pY29uPgogICAgIDxsYXJnZS1pY29uPjwvbGFyZ2UtaWNvbj4KICAgPC9pY29uPgotICA8ZGlzcGxheS1uYW1lPlNTTENvbnZlcnRlckFwcDwvZGlzcGxheS1uYW1lPiAgCisgIDxkaXNwbGF5LW5hbWU+U1NMQ29udmVydGVyQXBwPC9kaXNwbGF5LW5hbWU+CiAgIDxtb2R1bGU+CiAgICAgPGphdmE+c2VjLXNzbC1jb252ZXJ0ZXItY2xpZW50LmphcjwvamF2YT4KICAgPC9tb2R1bGU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9lamItb25ld2F5LXNzbC9lamIvQ29udmVydGVyQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvZWpiLW9uZXdheS1zc2wvZWpiL0NvbnZlcnRlckJlYW4uamF2YQppbmRleCAyNGFiMDQ0Li4zZWZjNzI5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9lamItb25ld2F5LXNzbC9lamIvQ29udmVydGVyQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2VqYi1vbmV3YXktc3NsL2VqYi9Db252ZXJ0ZXJCZWFuLmphdmEKQEAgLTMzLDcgKzMzLDcgQEAKICAgICBCaWdEZWNpbWFsIHllblJhdGUgPSBuZXcgQmlnRGVjaW1hbCgiMTIxLjYwMDAiKTsKICAgICBCaWdEZWNpbWFsIGV1cm9SYXRlID0gbmV3IEJpZ0RlY2ltYWwoIjAuMDA3NyIpOwogICAgIFNlc3Npb25Db250ZXh0IG15c2MgPSBudWxsOwotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBteUNhbGxlclByaW5jaXBhbCgpewogICAgICAgICByZXR1cm4gbXlzYy5nZXRDYWxsZXJQcmluY2lwYWwoKS50b1N0cmluZygpOwogICAgIH0KQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgKiBSZXR1cm5zIHRoZSB5ZW4gdmFsdWUgZm9yIGEgZ2l2ZW4gZG9sbGFyIGFtb3VudC4KICAgICAgKiBAcGFyYW0gZG9sbGFycyBkb2xsYXIgYW1vdW50IHRvIGJlIGNvbnZlcnRlZCB0byB5ZW4uCiAgICAgICovCi0gICAgcHVibGljIEJpZ0RlY2ltYWwgZG9sbGFyVG9ZZW4oQmlnRGVjaW1hbCBkb2xsYXJzKSB7ICAgICAgIAorICAgIHB1YmxpYyBCaWdEZWNpbWFsIGRvbGxhclRvWWVuKEJpZ0RlY2ltYWwgZG9sbGFycykgewogICAgICAgICBCaWdEZWNpbWFsIHJlc3VsdCA9IGRvbGxhcnMubXVsdGlwbHkoeWVuUmF0ZSk7CiAgICAgICAgIHJldHVybiByZXN1bHQuc2V0U2NhbGUoMixCaWdEZWNpbWFsLlJPVU5EX1VQKTsKICAgICB9CkBAIC03NSw3ICs3NSw3IEBACiAgICAgICogTG9hZHMgdGhlIHN0YXRlIG9mIHRoZSBiZWFuIGZyb20gc2Vjb25kYXJ5IHN0b3JhZ2UuIFJlcXVpcmVkIGJ5IEVKQiBzcGVjLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkge30KLSAgICAKKwogICAgIC8qKgogICAgICAqIEtlZXBzIHRoZSBzdGF0ZSBvZiB0aGUgYmVhbiB0byBzZWNvbmRhcnkgc3RvcmFnZS4gUmVxdWlyZWQgYnkgRUpCIHNwZWMuCiAgICAgICovCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9lamItb25ld2F5LXNzbC9lamIvQ29udmVydGVyUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9lamItb25ld2F5LXNzbC9lamIvQ29udmVydGVyUmVtb3RlLmphdmEKaW5kZXggYWExZTkxYi4uOTUxN2FhZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvZWpiLW9uZXdheS1zc2wvZWpiL0NvbnZlcnRlclJlbW90ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2VqYi1vbmV3YXktc3NsL2VqYi9Db252ZXJ0ZXJSZW1vdGUuamF2YQpAQCAtNDQsNyArNDQsNyBAQAogICAgICAqIEBwYXJhbSB5ZW4geWVuIGFtb3VudCB0byBiZSBjb252ZXJ0ZWQgdG8gZXVyby4KICAgICAgKi8KICAgICBwdWJsaWMgQmlnRGVjaW1hbCB5ZW5Ub0V1cm8oQmlnRGVjaW1hbCB5ZW4pIHRocm93cyBSZW1vdGVFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIG15Q2FsbGVyUHJpbmNpcGFsKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvaHR0cE1ldGhvZC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvaHR0cE1ldGhvZC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGZiNjZmMjkuLjgwYmE1YTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2h0dHBNZXRob2QvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9odHRwTWV0aG9kL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InNlY3VyaXR5LWh0dHBNZXRob2QiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9IiAvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvaHR0cE1ldGhvZC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9odHRwTWV0aG9kL2J1aWxkLnhtbAppbmRleCAwOWE5ZTMxLi44MDQyNWEzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9odHRwTWV0aG9kL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9odHRwTWV0aG9kL2J1aWxkLnhtbApAQCAtMzMsNyArMzMsNyBAQAogICAgICZjb21tb25SdW47CiAgICAgJmNvbW1vblNlY3VyaXR5OwogICAgICZ0ZXN0UHJvcGVydGllczsKLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCwgc2V0dXAsIGRlcGxveSwgcnVuLCB1bmRlcGxveSwgdW5zZXR1cCIvPgogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CkBAIC00OCw3ICs0OCw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIiAvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIApAQCAtMTY5LDE4ICsxNjksMTggQEAKIAogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS11c2VyLWNvbW1vbiI+Ci0JICAgIDxwYXJhbSBuYW1lPSJ1c2VyIiB2YWx1ZT0ic2hpbmd3YWkiLz4KLQkgICAgPHBhcmFtIG5hbWU9InBhc3N3b3JkIiB2YWx1ZT0ic2hpbmd3YWkiLz4KLQkgICAgPHBhcmFtIG5hbWU9Imdyb3VwcyIgdmFsdWU9ImVtcGxveWVlIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJ1c2VyIiB2YWx1ZT0ic2hpbmd3YWkiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InBhc3N3b3JkIiB2YWx1ZT0ic2hpbmd3YWkiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9Imdyb3VwcyIgdmFsdWU9ImVtcGxveWVlIi8+CiAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS11c2VyLWNvbW1vbiI+Ci0JICAgIDxwYXJhbSBuYW1lPSJ1c2VyIiB2YWx1ZT0ic3djaGFuIi8+Ci0JICAgIDxwYXJhbSBuYW1lPSJwYXNzd29yZCIgdmFsdWU9InN3Y2hhbiIvPgotCSAgICA8cGFyYW0gbmFtZT0iZ3JvdXBzIiB2YWx1ZT0ic3RhZmYiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InVzZXIiIHZhbHVlPSJzd2NoYW4iLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InBhc3N3b3JkIiB2YWx1ZT0ic3djaGFuIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJncm91cHMiIHZhbHVlPSJzdGFmZiIvPgogICAgICAgIDwvYW50Y2FsbD4KICAgIDwhLS0gICA8YW50Y2FsbCB0YXJnZXQ9InJlY29uZmlnLWNvbW1vbiIvPi0tPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bnNldHVwIj4KICAgICAgIDwhLS0gcmVtb3ZlIHRlc3QgdXNlcnMsIGp1c3QgY2xlYW51cC4gLS0+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS11c2VyLWNvbW1vbiI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9odHRwTWV0aG9kL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2h0dHBNZXRob2QvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDgyYTc5ZDkuLjYwNTJhYzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2h0dHBNZXRob2QvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2h0dHBNZXRob2QvZGVzY3JpcHRvci93ZWIueG1sCkBAIC01Miw3ICs1Miw3IEBACiAgICAgICA8dHJhbnNwb3J0LWd1YXJhbnRlZT5OT05FPC90cmFuc3BvcnQtZ3VhcmFudGVlPgogICAgIDwvdXNlci1kYXRhLWNvbnN0cmFpbnQ+CiAgIDwvc2VjdXJpdHktY29uc3RyYWludD4KLSAgCisKICAgPHNlY3VyaXR5LWNvbnN0cmFpbnQ+CiAgICAgPHdlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgogICAgICAgPHdlYi1yZXNvdXJjZS1uYW1lPnNlY3VyZTI8L3dlYi1yZXNvdXJjZS1uYW1lPgpAQCAtNzEsNyArNzEsNyBAQAogICAgIDxhdXRoLW1ldGhvZD5CQVNJQzwvYXV0aC1tZXRob2Q+CiAgICAgPHJlYWxtLW5hbWU+ZGVmYXVsdDwvcmVhbG0tbmFtZT4KICAgPC9sb2dpbi1jb25maWc+Ci0gIAorCiAgIDxzZWN1cml0eS1yb2xlPgogICAgIDxyb2xlLW5hbWU+bWFuYWdlcjwvcm9sZS1uYW1lPgogICA8L3NlY3VyaXR5LXJvbGU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjQXBpL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjQXBpL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMzRiNDA1NS4uZmQ5OWUyOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNiArMTUsNiBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic2VjdXJpdHkiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvcHJvZy1hdXRoL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvcHJvZy1hdXRoL2J1aWxkLnhtbAppbmRleCA0NmFmNWFkLi5lYTI4NGRmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjQXBpL3Byb2ctYXV0aC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9wcm9nLWF1dGgvYnVpbGQueG1sCkBAIC0yOSw3ICsyOSw3IEBACiAgICAmY29tbW9uU2V0dXA7CiAgICAmY29tbW9uQnVpbGQ7CiAgICAmY29tbW9uUnVuOwotICAgJnRlc3RQcm9wZXJ0aWVzOyAgCisgICAmdGVzdFByb3BlcnRpZXM7CiAgICAgPHByb3BlcnR5IGVudmlyb25tZW50PSJlbnYiLz4KICAgICA8Z2V0IHNyYz0iaHR0cHM6Ly9yZXBvMS5tYXZlbi5vcmcvbWF2ZW4yL29yZy9hcGFjaGUvbWF2ZW4vbWF2ZW4tYW50LXRhc2tzLzIuMS4zL21hdmVuLWFudC10YXNrcy0yLjEuMy5qYXIiIGRlc3Q9IiR7ZW52LkFQU19IT01FfS9saWIvbWF2ZW4tYW50LXRhc2tzLTIuMS4zLmphciIvPgogICAgIDxwYXRoIGlkPSJtYXZlbi1hbnQtdGFza3MuY2xhc3NwYXRoIiBwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL21hdmVuLWFudC10YXNrcy0yLjEuMy5qYXIiIC8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjQXBpL3Byb2ctYXV0aC9jb21tb24vcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvcHJvZy1hdXRoL2NvbW1vbi9wb20ueG1sCmluZGV4IDhiNDRmOTkuLjFhODVmMzQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvcHJvZy1hdXRoL2NvbW1vbi9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvcHJvZy1hdXRoL2NvbW1vbi9wb20ueG1sCkBAIC0yNSw5ICsyNSw5IEBACiAgICAgICAgIDxhcnRpZmFjdElkPnByb2ctYXV0aDwvYXJ0aWZhY3RJZD4KICAgICAgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgICAgPC9wYXJlbnQ+Ci0gICAgCisKICAgICA8YXJ0aWZhY3RJZD5qYWNjQXBpLWNvbW1vbjwvYXJ0aWZhY3RJZD4KLSAgICAKKwogICAgIDxwYWNrYWdpbmc+amFyPC9wYWNrYWdpbmc+CiAgICAgPG5hbWU+SmF2YSBFRSA3IFNhbXBsZTogamFjY0FwaS0gY29tbW9uPC9uYW1lPgogCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmpzb3VwPC9ncm91cElkPgogICAgICAgICAgICAgPGFydGlmYWN0SWQ+anNvdXA8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4xLjExLjI8L3ZlcnNpb24+ICAgICAgICAgICAgCisgICAgICAgICAgICA8dmVyc2lvbj4xLjExLjI8L3ZlcnNpb24+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KIAogICAgICAgICA8ZGVwZW5kZW5jeT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvcHJvZy1hdXRoL2NvbW1vbi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvamFjY0FwaS9jb21tb24vQXJxdWlsbGlhbkJhc2UuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvcHJvZy1hdXRoL2NvbW1vbi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvamFjY0FwaS9jb21tb24vQXJxdWlsbGlhbkJhc2UuamF2YQppbmRleCBkOWI3YzdjLi45ZGE5ZTljIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjQXBpL3Byb2ctYXV0aC9jb21tb24vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL2phY2NBcGkvY29tbW9uL0FycXVpbGxpYW5CYXNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9wcm9nLWF1dGgvY29tbW9uL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9qYWNjQXBpL2NvbW1vbi9BcnF1aWxsaWFuQmFzZS5qYXZhCkBAIC00OCwzNSArNDgsMzUgQEAKIAogLyoqCiAgKgotICogCisgKgogICovCiBwdWJsaWMgY2xhc3MgQXJxdWlsbGlhbkJhc2UgewogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFdFQkFQUF9TUkMgPSAic3JjL21haW4vd2ViYXBwIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihBcnF1aWxsaWFuQmFzZS5jbGFzcy5nZXROYW1lKCkpOwotICAgIAorCiAgICAgcHJpdmF0ZSBXZWJDbGllbnQgd2ViQ2xpZW50OwogICAgIHByaXZhdGUgU3RyaW5nIHJlc3BvbnNlOwotICAgIAorCiAgICAgQFJ1bGUKICAgICBwdWJsaWMgVGVzdFdhdGNoZXIgcnVsZUV4YW1wbGUgPSBuZXcgVGVzdFdhdGNoZXIoKSB7CiAgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwcm90ZWN0ZWQgdm9pZCBmYWlsZWQoVGhyb3dhYmxlIGUsIERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKSB7CiAgICAgICAgICAgICBzdXBlci5mYWlsZWQoZSwgZGVzY3JpcHRpb24pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBsb2dnZXIubG9nKFNFVkVSRSwgCi0gICAgICAgICAgICAgICAgIlxuXG5UZXN0IGZhaWxlZDogIiArIAorCisgICAgICAgICAgICBsb2dnZXIubG9nKFNFVkVSRSwKKyAgICAgICAgICAgICAgICAiXG5cblRlc3QgZmFpbGVkOiAiICsKICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbi5nZXRDbGFzc05hbWUoKSArICIuIiArIGRlc2NyaXB0aW9uLmdldE1ldGhvZE5hbWUoKSArCi0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAiXG5NZXNzYWdlOiAiICsgZS5nZXRNZXNzYWdlKCkgKwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgIlxuTGFzdCByZXNwb25zZTogIiArCi0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAiXG5cbiIgICsgZm9ybWF0SFRNTChyZXNwb25zZSkgKyAiXG5cbiIpOwotICAgICAgICAgICAgCisKICAgICAgICAgfQogICAgIH07Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBmb3JtYXRIVE1MKFN0cmluZyBodG1sKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXR1cm4gcGFyc2UoaHRtbCwgIiIsIHhtbFBhcnNlcigpKS50b1N0cmluZygpOwpAQCAtODgsOSArODgsOSBAQAogICAgIHB1YmxpYyBzdGF0aWMgQXJjaGl2ZTw/PiBkZWZhdWx0QXJjaGl2ZSgpIHsKICAgICAgICAgcmV0dXJuIHRyeVdyYXBFQVIoZGVmYXVsdFdlYkFyY2hpdmUoKSk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyBXZWJBcmNoaXZlIGRlZmF1bHRXZWJBcmNoaXZlKCkgewotICAgICAgICByZXR1cm4gCisgICAgICAgIHJldHVybgogICAgICAgICAgICAgY3JlYXRlKFdlYkFyY2hpdmUuY2xhc3MsICJ0ZXN0LndhciIpCiAgICAgICAgICAgICAgICAgLmFkZFBhY2thZ2VzKHRydWUsICJvcmcuamF2YWVlNy5qYXNwaWMiKQogICAgICAgICAgICAgICAgIC5kZWxldGVDbGFzcyhBcnF1aWxsaWFuQmFzZS5jbGFzcykKQEAgLTEwNCwyMyArMTA0LDIzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAuaW1wb3J0RnJvbShuZXcgRmlsZSgidGFyZ2V0LyIgKyBTeXN0ZW0uZ2V0UHJvcGVydHkoImZpbmFsTmFtZSIpICsgIi53YXIiKSkKICAgICAgICAgICAgICAgICAgICAgICAgIC5hcyhXZWJBcmNoaXZlLmNsYXNzKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIEFyY2hpdmU8Pz4gdHJ5V3JhcEVBUihXZWJBcmNoaXZlIHdlYkFyY2hpdmUpIHsKICAgICAgICAgaWYgKGdldEJvb2xlYW4oInVzZUVhckZvckphc3BpYyIpKSB7CiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgICAgICAvLyBFQVIgYXJjaGl2ZQogICAgICAgICAgICAgICAgIGNyZWF0ZShFbnRlcnByaXNlQXJjaGl2ZS5jbGFzcywgInRlc3QuZWFyIikKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvLyBMaWJlcnR5IG5lZWRzIHRvIGhhdmUgdGhlIGJpbmRpbmcgZmlsZSBpbiBhbiBlYXIuCiAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IHRoaXMgaXMgbm8gbG9uZ2VyIHRoZSBjYXNlIGFuZCB0aGlzIGNvZGUgY2FuIGJlIHJlbW92ZWQgKC1ibmQueG1sCiAgICAgICAgICAgICAgICAgICAgIC8vIG5lZWRzIHRvIGJlIG1vdmVkIHRvIGNvcnJlY3QgcGxhY2UpCiAgICAgICAgICAgICAgICAgICAgIC5hZGRBc01hbmlmZXN0UmVzb3VyY2UocmVzb3VyY2UoImlibS1hcHBsaWNhdGlvbi1ibmQueG1sIikpCi0gICAgCisKICAgICAgICAgICAgICAgICAgICAgLy8gV2ViIG1vZHVsZQogICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIG5lZWRlZCB0byBwcmV2ZW50IEFycXVpbGxpYW4gZ2VuZXJhdGluZyBhbiBpbGxlZ2FsIGFwcGxpY2F0aW9uLnhtbAogICAgICAgICAgICAgICAgICAgICAuYWRkQXNNb2R1bGUoCiAgICAgICAgICAgICAgICAgICAgICAgICB3ZWJBcmNoaXZlCi0gICAgICAgICAgICAgICAgICAgICk7ICAKKyAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHJldHVybiB3ZWJBcmNoaXZlOwogICAgICAgICB9CkBAIC0xMjksNyArMTI5LDcgQEAKICAgICBwdWJsaWMgc3RhdGljIEZpbGUgcmVzb3VyY2UoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgcmV0dXJuIG5ldyBGaWxlKFdFQkFQUF9TUkMgKyAiL1dFQi1JTkYiLCBuYW1lKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIEZpbGUgd2ViKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIHJldHVybiBuZXcgRmlsZShXRUJBUFBfU1JDLCBuYW1lKTsKICAgICB9CkBAIC0xNDgsOCArMTQ4LDggQEAKICAgICAgICAgd2ViQ2xpZW50LmdldENvb2tpZU1hbmFnZXIoKS5jbGVhckNvb2tpZXMoKTsKICAgICAgICAgd2ViQ2xpZW50LmNsb3NlKCk7CiAgICAgfQotICAgIAotICAgIAorCisKIAogICAgIHByb3RlY3RlZCBXZWJDbGllbnQgZ2V0V2ViQ2xpZW50KCkgewogICAgICAgICByZXR1cm4gd2ViQ2xpZW50OwpAQCAtMTYyLDcgKzE2Miw3IEBACiAgICAgLyoqCiAgICAgICogR2V0cyBjb250ZW50IGZyb20gdGhlIHBhdGggdGhhdCdzIHJlbGF0aXZlIHRvIHRoZSBiYXNlIFVSTCBvbiB3aGljaCB0aGUgQXJxdWlsbGlhbiB0ZXN0CiAgICAgICogYXJjaGl2ZSBpcyBkZXBsb3llZC4KLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSBwYXRoIHRoZSBwYXRoIHJlbGF0aXZlIHRvIHRoZSBVUkwgb24gd2hpY2ggdGhlIEFycXVpbGxpYW4gdGVzdCBpcyBkZXBsb3llZAogICAgICAqIEByZXR1cm4gdGhlIHJhdyBjb250ZW50IGFzIGEgc3RyaW5nIGFzIHJldHVybmVkIGJ5IHRoZSBzZXJ2ZXIKICAgICAgKi8KQEAgLTE3OCw3ICsxNzgsNyBAQAogICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIHJlc3BvbnNlOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9wcm9nLWF1dGgvY29tbW9uL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9qYWNjQXBpL2NvbW1vbi9CYXNlU2VydmxldENvbnRleHRMaXN0ZW5lci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9wcm9nLWF1dGgvY29tbW9uL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9qYWNjQXBpL2NvbW1vbi9CYXNlU2VydmxldENvbnRleHRMaXN0ZW5lci5qYXZhCmluZGV4IGJkMTM4ODUuLjJkMzBkMTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvcHJvZy1hdXRoL2NvbW1vbi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvamFjY0FwaS9jb21tb24vQmFzZVNlcnZsZXRDb250ZXh0TGlzdGVuZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjQXBpL3Byb2ctYXV0aC9jb21tb24vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL2phY2NBcGkvY29tbW9uL0Jhc2VTZXJ2bGV0Q29udGV4dExpc3RlbmVyLmphdmEKQEAgLTIwLDcgKzIwLDcgQEAKIGltcG9ydCBqYWthcnRhLnNlcnZsZXQuU2VydmxldENvbnRleHRMaXN0ZW5lcjsKIAogLyoqCi0gKiAKKyAqCiAgKi8KIHB1YmxpYyBjbGFzcyBCYXNlU2VydmxldENvbnRleHRMaXN0ZW5lciBpbXBsZW1lbnRzIFNlcnZsZXRDb250ZXh0TGlzdGVuZXIgewogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjQXBpL3Byb2ctYXV0aC9jb21tb24vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL2phY2NBcGkvY29tbW9uL0phc3BpY1V0aWxzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjQXBpL3Byb2ctYXV0aC9jb21tb24vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL2phY2NBcGkvY29tbW9uL0phc3BpY1V0aWxzLmphdmEKaW5kZXggYzA5YmIxMC4uNWIyNjU2MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9wcm9nLWF1dGgvY29tbW9uL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9qYWNjQXBpL2NvbW1vbi9KYXNwaWNVdGlscy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvcHJvZy1hdXRoL2NvbW1vbi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvamFjY0FwaS9jb21tb24vSmFzcGljVXRpbHMuamF2YQpAQCAtMjIsNyArMjIsNyBAQAogCiAvKioKICAqCi0gKiAKKyAqCiAgKi8KIHB1YmxpYyBmaW5hbCBjbGFzcyBKYXNwaWNVdGlscyB7CiAKQEAgLTMyLDcgKzMyLDcgQEAKICAgICAvKioKICAgICAgKiBSZWdpc3RlcnMgdGhlIGdpdmVuIFNBTSB1c2luZyB0aGUgc3RhbmRhcmQgSkFTUElDIHtAbGluayBBdXRoQ29uZmlnRmFjdG9yeX0gYnV0IHVzaW5nIGEgc21hbGwgc2V0IG9mIHdyYXBwZXJzIHRoYXQganVzdAogICAgICAqIHBhc3MgdGhlIGNhbGxzIHRocm91Z2ggdG8gdGhlIFNBTS4KLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSBzZXJ2ZXJBdXRoTW9kdWxlCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIHJlZ2lzdGVyU0FNKFNlcnZsZXRDb250ZXh0IGNvbnRleHQsIFNlcnZlckF1dGhNb2R1bGUgc2VydmVyQXV0aE1vZHVsZSkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9wcm9nLWF1dGgvY29tbW9uL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9qYWNjQXBpL2NvbW1vbi9UZXN0QXV0aENvbmZpZ1Byb3ZpZGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjQXBpL3Byb2ctYXV0aC9jb21tb24vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL2phY2NBcGkvY29tbW9uL1Rlc3RBdXRoQ29uZmlnUHJvdmlkZXIuamF2YQppbmRleCA3MTdkOTkzLi5kMWZhMTg0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjQXBpL3Byb2ctYXV0aC9jb21tb24vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL2phY2NBcGkvY29tbW9uL1Rlc3RBdXRoQ29uZmlnUHJvdmlkZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjQXBpL3Byb2ctYXV0aC9jb21tb24vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL2phY2NBcGkvY29tbW9uL1Rlc3RBdXRoQ29uZmlnUHJvdmlkZXIuamF2YQpAQCAtMzAsNyArMzAsNyBAQAogLyoqCiAgKiBUaGlzIGNsYXNzIGZ1bmN0aW9ucyBhcyBhIGtpbmQgb2YgZmFjdG9yeS1mYWN0b3J5IGZvciB7QGxpbmsgU2VydmVyQXV0aENvbmZpZ30gaW5zdGFuY2VzLCB3aGljaCBhcmUgYnkgdGhlbXNlbHZlcyBmYWN0b3JpZXMKICAqIGZvciB7QGxpbmsgU2VydmVyQXV0aENvbnRleHR9IGluc3RhbmNlcywgd2hpY2ggYXJlIGRlbGVnYXRlcyBmb3IgdGhlIGFjdHVhbCB7QGxpbmsgU2VydmVyQXV0aE1vZHVsZX0gKFNBTSkgdGhhdCB3ZSdyZSBhZnRlci4KLSAqIAorICoKICAqLwogcHVibGljIGNsYXNzIFRlc3RBdXRoQ29uZmlnUHJvdmlkZXIgaW1wbGVtZW50cyBBdXRoQ29uZmlnUHJvdmlkZXIgewogCkBAIC00NSw3ICs0NSw3IEBACiAKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RvciB3aXRoIHNpZ25hdHVyZSBhbmQgaW1wbGVtZW50YXRpb24gdGhhdCdzIHJlcXVpcmVkIGJ5IEFQSS4KLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSBwcm9wZXJ0aWVzCiAgICAgICogQHBhcmFtIGZhY3RvcnkKICAgICAgKi8KQEAgLTg1LDcgKzg1LDcgQEAKICAgICAgKiBDcmVhdGVzIGEgZGVmYXVsdCBjYWxsYmFjayBoYW5kbGVyIHZpYSB0aGUgc3lzdGVtIHByb3BlcnR5ICJhdXRoY29uZmlncHJvdmlkZXIuY2xpZW50LmNhbGxiYWNraGFuZGxlciIsIGFzIHNlZW1pbmdseQogICAgICAqIHJlcXVpcmVkIGJ5IHRoZSBBUEkgKEFQSSB1c2VzIHdvcmRpbmcgIm1heSIgY3JlYXRlIGRlZmF1bHQgaGFuZGxlcikuIFRPRE86IElzbid0CiAgICAgICogImF1dGhjb25maWdwcm92aWRlci5jbGllbnQuY2FsbGJhY2toYW5kbGVyIiBKQm9zcyBzcGVjaWZpYz8KLSAgICAgKiAKKyAgICAgKgogICAgICAqIEByZXR1cm4KICAgICAgKiBAdGhyb3dzIEF1dGhFeGNlcHRpb24KICAgICAgKi8KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvcHJvZy1hdXRoL2NvbW1vbi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvamFjY0FwaS9jb21tb24vVGVzdFNlcnZlckF1dGhDb25maWcuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvcHJvZy1hdXRoL2NvbW1vbi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvamFjY0FwaS9jb21tb24vVGVzdFNlcnZlckF1dGhDb25maWcuamF2YQppbmRleCBkNWZjMDZkLi43NGU4ODk3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjQXBpL3Byb2ctYXV0aC9jb21tb24vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL2phY2NBcGkvY29tbW9uL1Rlc3RTZXJ2ZXJBdXRoQ29uZmlnLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9wcm9nLWF1dGgvY29tbW9uL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9qYWNjQXBpL2NvbW1vbi9UZXN0U2VydmVyQXV0aENvbmZpZy5qYXZhCkBAIC0yOSw3ICsyOSw3IEBACiAvKioKICAqIFRoaXMgY2xhc3MgZnVuY3Rpb25zIGFzIGEga2luZCBvZiBmYWN0b3J5IGZvciB7QGxpbmsgU2VydmVyQXV0aENvbnRleHR9IGluc3RhbmNlcywgd2hpY2ggYXJlIGRlbGVnYXRlcyBmb3IgdGhlIGFjdHVhbAogICoge0BsaW5rIFNlcnZlckF1dGhNb2R1bGV9IChTQU0pIHRoYXQgd2UncmUgYWZ0ZXIuCi0gKiAKKyAqCiAgKi8KIHB1YmxpYyBjbGFzcyBUZXN0U2VydmVyQXV0aENvbmZpZyBpbXBsZW1lbnRzIFNlcnZlckF1dGhDb25maWcgewogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjQXBpL3Byb2ctYXV0aC9jb21tb24vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL2phY2NBcGkvY29tbW9uL1Rlc3RTZXJ2ZXJBdXRoQ29udGV4dC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9wcm9nLWF1dGgvY29tbW9uL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9qYWNjQXBpL2NvbW1vbi9UZXN0U2VydmVyQXV0aENvbnRleHQuamF2YQppbmRleCA4ZmRhYzA3Li44MTRjZTU3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjQXBpL3Byb2ctYXV0aC9jb21tb24vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL2phY2NBcGkvY29tbW9uL1Rlc3RTZXJ2ZXJBdXRoQ29udGV4dC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvcHJvZy1hdXRoL2NvbW1vbi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvamFjY0FwaS9jb21tb24vVGVzdFNlcnZlckF1dGhDb250ZXh0LmphdmEKQEAgLTM0LDcgKzM0LDcgQEAKICAqIDxwPgogICogU2luY2UgdGhpcyBzaW1wbGUgZXhhbXBsZSBvbmx5IGhhcyBhIHNpbmdsZSBTQU0sIHdlIGRlbGVnYXRlIGRpcmVjdGx5IHRvIHRoYXQgb25lLiBOb3RlIHRoYXQgdGhpcyB7QGxpbmsgU2VydmVyQXV0aENvbnRleHR9CiAgKiBhbmQgdGhlIHtAbGluayBTZXJ2ZXJBdXRoTW9kdWxlfSAoU0FNKSBzaGFyZSBhIGNvbW1vbiBiYXNlIGludGVyZmFjZToge0BsaW5rIFNlcnZlckF1dGh9LgotICogCisgKgogICovCiBwdWJsaWMgY2xhc3MgVGVzdFNlcnZlckF1dGhDb250ZXh0IGltcGxlbWVudHMgU2VydmVyQXV0aENvbnRleHQgewogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjQXBpL3Byb2ctYXV0aC9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9wcm9nLWF1dGgvcG9tLnhtbAppbmRleCA0MzBjOTVmLi45NTg3ZTYzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjQXBpL3Byb2ctYXV0aC9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvcHJvZy1hdXRoL3BvbS54bWwKQEAgLTE5LDExICsxOSwxMSBAQAogCiA8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KICAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+Ci0gICAgPGdyb3VwSWQ+b3JnLmdsYXNzZmlzaC5qYWNjQXBpLnRlc3Q8L2dyb3VwSWQ+ICAgIAorICAgIDxncm91cElkPm9yZy5nbGFzc2Zpc2guamFjY0FwaS50ZXN0PC9ncm91cElkPgogICAgIDxhcnRpZmFjdElkPnByb2ctYXV0aDwvYXJ0aWZhY3RJZD4KICAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgICA8cGFja2FnaW5nPnBvbTwvcGFja2FnaW5nPgotICAgIAorCiAgICAgPG5hbWU+UHJvZ3JhbW1hdGljIGF1dGhlbnRpY2F0aW9uIHdpdGggSmFrYXJ0YSBBdXRob3JpemF0aW9uIGFwaTwvbmFtZT4KICAgICA8cHJvcGVydGllcz4KICAgICAgICAgPGdsYXNzZmlzaC52ZXJzaW9uPjUuMDwvZ2xhc3NmaXNoLnZlcnNpb24+CkBAIC0zMyw3ICszMyw3IEBACiAKICAgICA8bW9kdWxlcz4KICAgICAgICAgPG1vZHVsZT5jb21tb248L21vZHVsZT4KLSAgICAgICAgPG1vZHVsZT5wcm9ncmFtbWF0aWMtYXV0aGVudGljYXRpb248L21vZHVsZT4gICAgICAgCisgICAgICAgIDxtb2R1bGU+cHJvZ3JhbW1hdGljLWF1dGhlbnRpY2F0aW9uPC9tb2R1bGU+CiAgICAgPC9tb2R1bGVzPgogICAgIDxkZXBlbmRlbmN5TWFuYWdlbWVudD4KICAgICAgICAgPGRlcGVuZGVuY2llcz4KQEAgLTYwLDcgKzYwLDcgQEAKICAgICAgICAgICAgIDxhcnRpZmFjdElkPmFycXVpbGxpYW4tanVuaXQtY29udGFpbmVyPC9hcnRpZmFjdElkPgogICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgogICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgICAgCisKICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5uZXQuc291cmNlZm9yZ2UuaHRtbHVuaXQ8L2dyb3VwSWQ+CiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5odG1sdW5pdDwvYXJ0aWZhY3RJZD4KQEAgLTcyLDcgKzcyLDcgQEAKICAgICAgICAgICAgIDxhcnRpZmFjdElkPmphdmFlZS1hcGk8L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICA8dmVyc2lvbj43LjA8L3ZlcnNpb24+CiAgICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPgotICAgICAgICA8L2RlcGVuZGVuY3k+ICAgICAgICAKKyAgICAgICAgPC9kZXBlbmRlbmN5PgogICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPm9yZy5qYm9zcy5hcnF1aWxsaWFuLmNvbnRhaW5lcjwvZ3JvdXBJZD4KICAgICAgICAgICAgIDxhcnRpZmFjdElkPmFycXVpbGxpYW4tZ2xhc3NmaXNoLXJlbW90ZS0zLjE8L2FydGlmYWN0SWQ+CkBAIC04Nyw3ICs4Nyw3IEBACiAgICAgICAgICAgICA8c3lzdGVtUGF0aD4ke0FQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyPC9zeXN0ZW1QYXRoPgogICAgICAgICA8L2RlcGVuZGVuY3k+CiAgICAgPC9kZXBlbmRlbmNpZXM+Ci0gICAgCisKICAgICA8YnVpbGQ+CiAgICAgICAgIDxwbHVnaW5zPgogICAgICAgICAgICA8cGx1Z2luPgpAQCAtMTEwLDcgKzExMCw3IEBACiAgICAgICAgICAgICAgICAgICA8R0xBU1NGSVNIX0hPTUU+JHtlbnYuUzFBU19IT01FfS8uLjwvR0xBU1NGSVNIX0hPTUU+CiAgICAgICAgICAgICAgICAgPC9lbnZpcm9ubWVudFZhcmlhYmxlcz4KICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgotICAgICAgICAgICAgPC9wbHVnaW4+ICAgICAgIAorICAgICAgICAgICAgPC9wbHVnaW4+CiAgICAgICAgIDwvcGx1Z2lucz4KICAgICA8L2J1aWxkPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjQXBpL3Byb2ctYXV0aC9wcm9ncmFtbWF0aWMtYXV0aGVudGljYXRpb24vcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvcHJvZy1hdXRoL3Byb2dyYW1tYXRpYy1hdXRoZW50aWNhdGlvbi9wb20ueG1sCmluZGV4IDc0OTRhNmYuLjExMjUxYjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvcHJvZy1hdXRoL3Byb2dyYW1tYXRpYy1hdXRoZW50aWNhdGlvbi9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvcHJvZy1hdXRoL3Byb2dyYW1tYXRpYy1hdXRoZW50aWNhdGlvbi9wb20ueG1sCkBAIC0yOCw3ICsyOCw3IEBACiAKICAgICA8YXJ0aWZhY3RJZD5wcm9ncmFtbWF0aWMtYXV0aGVudGljYXRpb24tamFjYy1hcGk8L2FydGlmYWN0SWQ+CiAgICAgPHBhY2thZ2luZz53YXI8L3BhY2thZ2luZz4KLSAgICAKKwogICAgIDxuYW1lPkphdmEgRUUgNyBTYW1wbGU6IFByb2dyYW1tYXRpYy1hdXRoZW50aWNhdGlvbiB3aXRoIEphY2MgYXBpPC9uYW1lPgogICAgIDxidWlsZD4KICAgICAgIDxmaW5hbE5hbWU+cHJvZy1hdXRoPC9maW5hbE5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjQXBpL3Byb2ctYXV0aC9wcm9ncmFtbWF0aWMtYXV0aGVudGljYXRpb24vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL2phY2NBcGkvcHJvZ3JhbW1hdGljYXV0aGVudGljYXRpb24vc2FtL1NhbUF1dG9SZWdpc3RyYXRpb25MaXN0ZW5lci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9wcm9nLWF1dGgvcHJvZ3JhbW1hdGljLWF1dGhlbnRpY2F0aW9uL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9qYWNjQXBpL3Byb2dyYW1tYXRpY2F1dGhlbnRpY2F0aW9uL3NhbS9TYW1BdXRvUmVnaXN0cmF0aW9uTGlzdGVuZXIuamF2YQppbmRleCA3YjYyMjdlLi40YjRlMjZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjQXBpL3Byb2ctYXV0aC9wcm9ncmFtbWF0aWMtYXV0aGVudGljYXRpb24vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL2phY2NBcGkvcHJvZ3JhbW1hdGljYXV0aGVudGljYXRpb24vc2FtL1NhbUF1dG9SZWdpc3RyYXRpb25MaXN0ZW5lci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvcHJvZy1hdXRoL3Byb2dyYW1tYXRpYy1hdXRoZW50aWNhdGlvbi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvamFjY0FwaS9wcm9ncmFtbWF0aWNhdXRoZW50aWNhdGlvbi9zYW0vU2FtQXV0b1JlZ2lzdHJhdGlvbkxpc3RlbmVyLmphdmEKQEAgLTIzLDkgKzIzLDkgQEAKIGltcG9ydCBvcmcuZ2xhc3NmaXNoLmphY2NBcGkuY29tbW9uLkphc3BpY1V0aWxzOwogCiAvKioKLSAqIAorICoKICAqIEBhdXRob3IgQXJqYW4gVGlqbXMKLSAqIAorICoKICAqLwogQFdlYkxpc3RlbmVyCiBwdWJsaWMgY2xhc3MgU2FtQXV0b1JlZ2lzdHJhdGlvbkxpc3RlbmVyIGV4dGVuZHMgQmFzZVNlcnZsZXRDb250ZXh0TGlzdGVuZXIgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9wcm9nLWF1dGgvcHJvZ3JhbW1hdGljLWF1dGhlbnRpY2F0aW9uL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9qYWNjQXBpL3Byb2dyYW1tYXRpY2F1dGhlbnRpY2F0aW9uL3NhbS9UZXN0U2VydmVyQXV0aE1vZHVsZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9wcm9nLWF1dGgvcHJvZ3JhbW1hdGljLWF1dGhlbnRpY2F0aW9uL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9qYWNjQXBpL3Byb2dyYW1tYXRpY2F1dGhlbnRpY2F0aW9uL3NhbS9UZXN0U2VydmVyQXV0aE1vZHVsZS5qYXZhCmluZGV4IDY4YzNjMjMuLjJmMWRhOGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvcHJvZy1hdXRoL3Byb2dyYW1tYXRpYy1hdXRoZW50aWNhdGlvbi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvamFjY0FwaS9wcm9ncmFtbWF0aWNhdXRoZW50aWNhdGlvbi9zYW0vVGVzdFNlcnZlckF1dGhNb2R1bGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjQXBpL3Byb2ctYXV0aC9wcm9ncmFtbWF0aWMtYXV0aGVudGljYXRpb24vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL2phY2NBcGkvcHJvZ3JhbW1hdGljYXV0aGVudGljYXRpb24vc2FtL1Rlc3RTZXJ2ZXJBdXRoTW9kdWxlLmphdmEKQEAgLTQwLDkgKzQwLDkgQEAKIC8qKgogICogVmVyeSBiYXNpYyBTQU0gdGhhdCByZXR1cm5zIGEgc2luZ2xlIGhhcmRjb2RlZCB1c2VyIG5hbWVkICJ0ZXN0IiB3aXRoIHJvbGUgImFyY2hpdGVjdCIgd2hlbiB0aGUgcmVxdWVzdCAqYXR0cmlidXRlKgogICogPGNvZGU+ZG9Mb2dpbjwvY29kZT4gaXMgcHJlc2VudC4KLSAqIAorICoKICAqIEBhdXRob3IgQXJqYW4gVGlqbXMKLSAqIAorICoKICAqLwogcHVibGljIGNsYXNzIFRlc3RTZXJ2ZXJBdXRoTW9kdWxlIGltcGxlbWVudHMgU2VydmVyQXV0aE1vZHVsZSB7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvcHJvZy1hdXRoL3Byb2dyYW1tYXRpYy1hdXRoZW50aWNhdGlvbi9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvamFjY0FwaS9wcm9ncmFtbWF0aWNhdXRoZW50aWNhdGlvbi9Qcm9ncmFtbWF0aWNBdXRoZW50aWNhdGlvbklULmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjQXBpL3Byb2ctYXV0aC9wcm9ncmFtbWF0aWMtYXV0aGVudGljYXRpb24vc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL2phY2NBcGkvcHJvZ3JhbW1hdGljYXV0aGVudGljYXRpb24vUHJvZ3JhbW1hdGljQXV0aGVudGljYXRpb25JVC5qYXZhCmluZGV4IDA3ZjMwYWEuLmIzOGYzYjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvcHJvZy1hdXRoL3Byb2dyYW1tYXRpYy1hdXRoZW50aWNhdGlvbi9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvamFjY0FwaS9wcm9ncmFtbWF0aWNhdXRoZW50aWNhdGlvbi9Qcm9ncmFtbWF0aWNBdXRoZW50aWNhdGlvbklULmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9wcm9nLWF1dGgvcHJvZ3JhbW1hdGljLWF1dGhlbnRpY2F0aW9uL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9qYWNjQXBpL3Byb2dyYW1tYXRpY2F1dGhlbnRpY2F0aW9uL1Byb2dyYW1tYXRpY0F1dGhlbnRpY2F0aW9uSVQuamF2YQpAQCAtMzMsNyArMzMsNyBAQAogICogVGhpcyB0ZXN0cyB0aGF0IGEgY2FsbCBmcm9tIGEgU2VydmxldCB0byBIdHRwU2VydmxldFJlcXVlc3QjYXV0aGVudGljYXRlIGNhbiByZXN1bHQKICAqIGluIGEgc3VjY2Vzc2Z1bCBhdXRoZW50aWNhdGlvbi4KICAqCi0gKiAKKyAqCiAgKi8KIEBSdW5XaXRoKEFycXVpbGxpYW4uY2xhc3MpCiBwdWJsaWMgY2xhc3MgUHJvZ3JhbW1hdGljQXV0aGVudGljYXRpb25JVCBleHRlbmRzIEFycXVpbGxpYW5CYXNlIHsKQEAgLTQ5LDYgKzQ5LDYgQEAKICAgICAgICAgU3RyaW5nIHJlc3BvbnNlID0gZ2V0RnJvbVNlcnZlclBhdGgoInB1YmxpYy9hdXRoZW50aWNhdGUiKTsKICAgICAgICAgYXNzZXJ0VHJ1ZSgiU2hvdWxkIGNvbnRhaW4gd2ViIHVzZXIgdGVzdCBhbmQgYXJjaGl0ZWN0IGluIHN1YmplY3QgcHJpbmNpcGFscyIsIHJlc3BvbnNlLmNvbnRhaW5zKCJQcmluY2lwYWxzOiB0ZXN0LCBhcmNoaXRlY3QiKSk7CiAgICAgfQotICAgCisKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9zcmMvRHVtbXlQb2xpY3lDb25maWd1cmF0aW9uRmFjdG9yeS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9zcmMvRHVtbXlQb2xpY3lDb25maWd1cmF0aW9uRmFjdG9yeS5qYXZhCmluZGV4IDlkYTRlNjguLmY1ZDcyNDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvc3JjL0R1bW15UG9saWN5Q29uZmlndXJhdGlvbkZhY3RvcnkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjQXBpL3NyYy9EdW1teVBvbGljeUNvbmZpZ3VyYXRpb25GYWN0b3J5LmphdmEKQEAgLTIxLDkgKzIxLDkgQEAKIGltcG9ydCBqYWthcnRhLnNlY3VyaXR5LmphY2MuUG9saWN5Q29udGV4dEV4Y2VwdGlvbjsKIAogcHVibGljIGNsYXNzIER1bW15UG9saWN5Q29uZmlndXJhdGlvbkZhY3RvcnkgZXh0ZW5kcyBQb2xpY3lDb25maWd1cmF0aW9uRmFjdG9yeSB7Ci0gICAgcHVibGljIFBvbGljeUNvbmZpZ3VyYXRpb24gCisgICAgcHVibGljIFBvbGljeUNvbmZpZ3VyYXRpb24KICAgICAgICAgICAgIGdldFBvbGljeUNvbmZpZ3VyYXRpb24oU3RyaW5nIGNvbnRleHRJRCwgYm9vbGVhbiByZW1vdmUpCi0gICAgCSAgICB0aHJvd3MgamFrYXJ0YS5zZWN1cml0eS5qYWNjLlBvbGljeUNvbnRleHRFeGNlcHRpb24geworICAgICAgICAgICAgdGhyb3dzIGpha2FydGEuc2VjdXJpdHkuamFjYy5Qb2xpY3lDb250ZXh0RXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjQXBpL3NyYy9UZXN0RUpCUGVybXMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvc3JjL1Rlc3RFSkJQZXJtcy5qYXZhCmluZGV4IDgyYTcwODcuLmY3M2I3ZWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvc3JjL1Rlc3RFSkJQZXJtcy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvc3JjL1Rlc3RFSkJQZXJtcy5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIGltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC4qOwogaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnNlY3VyaXR5Lio7IAoraW1wb3J0IGphdmEuc2VjdXJpdHkuKjsKIGltcG9ydCBqYWthcnRhLnNlY3VyaXR5LmphY2MuRUpCTWV0aG9kUGVybWlzc2lvbjsKIGltcG9ydCBqYWthcnRhLnNlY3VyaXR5LmphY2MuRUpCUm9sZVJlZlBlcm1pc3Npb247CiAKQEAgLTUwLDE0ICs1MCwxNCBAQAogCiAgICAgICAgIFBlcm1pc3Npb24gcDIgPSBwMTsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIEZpbGVPdXRwdXRTdHJlYW0gZm91dCA9IG5ldyAKKyAgICAgICAgICAgIEZpbGVPdXRwdXRTdHJlYW0gZm91dCA9IG5ldwogICAgICAgICAgICAgICAgIEZpbGVPdXRwdXRTdHJlYW0oInNlcmlhbC10ZXN0LWZpbGUudG1wIik7CiAgICAgICAgICAgICBPYmplY3RPdXRwdXRTdHJlYW0gc291dCA9IG5ldyBPYmplY3RPdXRwdXRTdHJlYW0oZm91dCk7CiAgICAgICAgICAgICBzb3V0LndyaXRlT2JqZWN0KHAxKTsKICAgICAgICAgICAgIHNvdXQuZmx1c2goKTsKICAgICAgICAgICAgIHNvdXQuY2xvc2UoKTsKICAgICAgICAgICAgIGZvdXQuY2xvc2UoKTsKLSAgICAgICAgfSBjYXRjaCggVGhyb3dhYmxlIHQgKSB7IAorICAgICAgICB9IGNhdGNoKCBUaHJvd2FibGUgdCApIHsKICAgICAgICAgICAgIHQucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBkZWJ1ZyggIi0tIFNlcmlhbGl6YXRpb24gVGVzdCBGYWlsZWQod3JpdGUpLSIgKyBwMS5nZXROYW1lKCkgKyAiLCIgKyBwMS5nZXRBY3Rpb25zKCkpOwogICAgICAgICB9CkBAIC02NywxOCArNjcsMTggQEAKICAgICAgICAgICAgIE9iamVjdElucHV0U3RyZWFtIHNpbiA9IG5ldyBPYmplY3RJbnB1dFN0cmVhbShmaW4pOwogICAgICAgICAgICAgcDIgPSAoUGVybWlzc2lvbikgc2luLnJlYWRPYmplY3QoKTsKICAgICAgICAgICAgIHNpbi5jbG9zZSgpOwotICAgICAgICAgICAgZmluLmNsb3NlKCk7IAotICAgICAgICB9IGNhdGNoKCBUaHJvd2FibGUgdCApIHsgCisgICAgICAgICAgICBmaW4uY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCggVGhyb3dhYmxlIHQgKSB7CiAgICAgICAgICAgICB0LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgZGVidWcoICItLSBTZXJpYWxpemF0aW9uIFRlc3QgRmFpbGVkKHJlYWQpLSIgKyBwMS5nZXROYW1lKCkgKyAiLCIgKyBwMS5nZXRBY3Rpb25zKCkpOwogICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAocmVzdWx0ID09IHRydWUpIHsKLSAgICAgICAgICAgIGlmIChwMi5lcXVhbHMocDEpKSB7IAorICAgICAgICAgICAgaWYgKHAyLmVxdWFscyhwMSkpIHsKICAgICAgICAgICAgICAgICBkZWJ1ZyggIi0tIFNlcmlhbGl6YXRpb24gVGVzdCBTdWNjZWVkZWQgLS0tLS0tLS0tLS0iICsgcDIuZ2V0TmFtZSgpICsgIiwiICsgcDIuZ2V0QWN0aW9ucygpKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5QQVNTKTsKLSAgICAgICAgICAgIH0gZWxzZSB7IAorICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBkZWJ1ZyggIi0tIFNlcmlhbGl6YXRpb24gVGVzdCBGYWlsZWQtIiArIHAxLmdldE5hbWUoKSArICIsIiArIHAxLmdldEFjdGlvbnMoKSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9CkBAIC0xMDUsNyArMTA1LDcgQEAKIAogICAgICAgICAgICAgaWYgKGV4cGVjdGVkVG9TdWNjZWVkKSB7CiAKLSAgICAgICAgICAgICAgICBwMiA9IG5ldyBFSkJNZXRob2RQZXJtaXNzaW9uKHAxLmdldE5hbWUoKSxwMS5nZXRBY3Rpb25zKCkpOyAKKyAgICAgICAgICAgICAgICBwMiA9IG5ldyBFSkJNZXRob2RQZXJtaXNzaW9uKHAxLmdldE5hbWUoKSxwMS5nZXRBY3Rpb25zKCkpOwogICAgICAgICAgICAgICAgIHRlc3RTZXJpYWxpemF0aW9uKHAyKTsKIAogICAgICAgICAgICAgICAgIGlmICghcDEuZXF1YWxzKHAyKSkgewpAQCAtMTIzLDcgKzEyMyw3IEBACiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgfSBjYXRjaCggVGhyb3dhYmxlIHQgKSB7IAorICAgICAgICB9IGNhdGNoKCBUaHJvd2FibGUgdCApIHsKIAogICAgICAgICAgICAgaWYgKGV4cGVjdGVkVG9TdWNjZWVkKSB7CiAgICAgICAgICAgICAgICAgdC5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTE0Niw3ICsxNDYsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgc3RhdGljIHZvaWQgZG9FSkJNZXRob2RQZXJtaXNzaW9uKCBib29sZWFuIGV4cGVjdGVkVG9TdWNjZWVkLAotICAgICAgICAgICBTdHJpbmcgZWpiTmFtZSwgU3RyaW5nIG1ldGhvZE5hbWUsIFN0cmluZyBtZXRob2RJbnRlcmZhY2UsIAorICAgICAgICAgICBTdHJpbmcgZWpiTmFtZSwgU3RyaW5nIG1ldGhvZE5hbWUsIFN0cmluZyBtZXRob2RJbnRlcmZhY2UsCiAgICAgICAgICAgIFN0cmluZ1tdIG1ldGhvZFBhcmFtcykgewogICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSAiZG9FSkJNZXRob2RQZXJtaXNzaW9uV2l0aFBhcmFtczoiICsKICAgICAgICAgICAgIGV4cGVjdGVkVG9TdWNjZWVkICsgIi0iICsgZWpiTmFtZSArICItIiArIG1ldGhvZE5hbWUgKwpAQCAtMTYzLDcgKzE2Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZFBhcmFtcyk7CiAKICAgICAgICAgICAgIGlmIChleHBlY3RlZFRvU3VjY2VlZCkgewotICAgICAgICAgICAgICAgIHAyID0gbmV3IEVKQk1ldGhvZFBlcm1pc3Npb24ocDEuZ2V0TmFtZSgpLHAxLmdldEFjdGlvbnMoKSk7IAorICAgICAgICAgICAgICAgIHAyID0gbmV3IEVKQk1ldGhvZFBlcm1pc3Npb24ocDEuZ2V0TmFtZSgpLHAxLmdldEFjdGlvbnMoKSk7CiAgICAgICAgICAgICAgICAgdGVzdFNlcmlhbGl6YXRpb24ocDIpOwogCiAgICAgICAgICAgICAgICAgaWYgKCFwMS5lcXVhbHMocDIpKSB7CkBAIC0xODEsMTYgKzE4MSwxNiBAQAogICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwogICAgICAgICAgICAgfQogCi0gICAgICAgIH0gY2F0Y2goIFRocm93YWJsZSB0ICkgeyAKKyAgICAgICAgfSBjYXRjaCggVGhyb3dhYmxlIHQgKSB7CiAKICAgICAgICAgICAgIGlmIChleHBlY3RlZFRvU3VjY2VlZCkgewogICAgICAgICAgICAgICAgIHQucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgIH0gCisgICAgICAgIH0KICAgICAgICAgaWYgKHJlc3VsdCA9PSBleHBlY3RlZFRvU3VjY2VlZCkgewotICAgICAgICAgICAgaWYgKGV4cGVjdGVkVG9TdWNjZWVkKSB7IAorICAgICAgICAgICAgaWYgKGV4cGVjdGVkVG9TdWNjZWVkKSB7CiAgICAgICAgICAgICAgICAgZGVidWcoICItLSBDb25zdHJ1Y3QgVGVzdCBTdWNjZWVkZWQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBkZWJ1ZyggIi0tIENvbnN0cnVjdCBUZXN0IFN1Y2NlZWRlZCAobmVnYXRpdmUpLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CkBAIC0yMDYsNyArMjA2LDcgQEAKICAgICAgICAgICAgICBTdHJpbmcgZWpiTmFtZSwgU3RyaW5nIG1ldGhvZEludGVyZmFjZSwgTWV0aG9kIG1ldGhvZCkgewogCiAgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9ICJkb0VKQk1ldGhvZFBlcm1pc3Npb25XaXRoTWV0aG9kOiIgKwotICAgICAgICAgICAgZXhwZWN0ZWRUb1N1Y2NlZWQgKyAiLSIgKyBlamJOYW1lICsgCisgICAgICAgICAgICBleHBlY3RlZFRvU3VjY2VlZCArICItIiArIGVqYk5hbWUgKwogICAgICAgICAgICAgIi0iICsgbWV0aG9kSW50ZXJmYWNlICsgIi0iICsgbWV0aG9kOwogCiAgICAgICAgIGJvb2xlYW4gcmVzdWx0ID0gdHJ1ZTsKQEAgLTI0MSw3ICsyNDEsNyBAQAogICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwogICAgICAgICAgICAgfQogCi0gICAgICAgIH0gY2F0Y2goIFRocm93YWJsZSB0ICkgeyAKKyAgICAgICAgfSBjYXRjaCggVGhyb3dhYmxlIHQgKSB7CiAKICAgICAgICAgICAgIGlmIChleHBlY3RlZFRvU3VjY2VlZCkgewogICAgICAgICAgICAgICAgIHQucHJpbnRTdGFja1RyYWNlKCk7CkBAIC0yNTEsNyArMjUxLDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIGlmIChyZXN1bHQgPT0gZXhwZWN0ZWRUb1N1Y2NlZWQpIHsKLSAgICAgICAgICAgIGlmIChleHBlY3RlZFRvU3VjY2VlZCkgeyAKKyAgICAgICAgICAgIGlmIChleHBlY3RlZFRvU3VjY2VlZCkgewogICAgICAgICAgICAgICAgIGRlYnVnKCAiLS0gQ29uc3RydWN0IFRlc3QgU3VjY2VlZGVkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgZGVidWcoICItLSBDb25zdHJ1Y3QgVGVzdCBTdWNjZWVkZWQgKG5lZ2F0aXZlKS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwpAQCAtMjgxLDcgKzI4MSw3IEBACiAKICAgICAgICAgICAgIGlmIChleHBlY3RlZFRvU3VjY2VlZCkgewogCi0gICAgICAgICAgICAgICAgcDIgPSBuZXcgRUpCUm9sZVJlZlBlcm1pc3Npb24ocDEuZ2V0TmFtZSgpLHAxLmdldEFjdGlvbnMoKSk7IAorICAgICAgICAgICAgICAgIHAyID0gbmV3IEVKQlJvbGVSZWZQZXJtaXNzaW9uKHAxLmdldE5hbWUoKSxwMS5nZXRBY3Rpb25zKCkpOwogICAgICAgICAgICAgICAgIHRlc3RTZXJpYWxpemF0aW9uKHAyKTsKIAogICAgICAgICAgICAgICAgIGlmICghcDEuZXF1YWxzKHAyKSkgewpAQCAtMzAwLDcgKzMwMCw3IEBACiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgfSBjYXRjaCggVGhyb3dhYmxlIHQgKSB7IAorICAgICAgICB9IGNhdGNoKCBUaHJvd2FibGUgdCApIHsKIAogICAgICAgICAgICAgaWYgKGV4cGVjdGVkVG9TdWNjZWVkKSB7CiAgICAgICAgICAgICAgICAgdC5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTMxMCw3ICszMTAsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgaWYgKHJlc3VsdCA9PSBleHBlY3RlZFRvU3VjY2VlZCkgewotICAgICAgICAgICAgaWYgKGV4cGVjdGVkVG9TdWNjZWVkKSB7IAorICAgICAgICAgICAgaWYgKGV4cGVjdGVkVG9TdWNjZWVkKSB7CiAgICAgICAgICAgICAgICAgZGVidWcoICItLSBDb25zdHJ1Y3QgVGVzdCBTdWNjZWVkZWQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgKyBwMS5oYXNoQ29kZSgpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgZGVidWcoICItLSBDb25zdHJ1Y3QgVGVzdCBTdWNjZWVkZWQgKG5lZ2F0aXZlKS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwpAQCAtMzI0LDcgKzMyNCw3IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGRvUGVybWlzc2lvbkltcGxpZXMgKCBib29sZWFuIGV4cGVjdGVkUmVzdWx0LAogICAgICAgICAgICAgUGVybWlzc2lvbiB0aGlzUCwgUGVybWlzc2lvbiBwKSB7Ci0gICAgICAgIC8vU0VDIGlzIGFkZGVkIHRoZXJlIHNvIHRoYXQgaXQgd2lsbCBub3QgY3V0IG9mZiB0aGUgCisgICAgICAgIC8vU0VDIGlzIGFkZGVkIHRoZXJlIHNvIHRoYXQgaXQgd2lsbCBub3QgY3V0IG9mZiB0aGUKICAgICAgICAgLy9maXJzdCBwYXJ0IHdpdGggc3BhY2UsIGFuIGlzc3VlIGluIHJlcG9ydGluZyB0b29scwogICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSAiU0VDIGRvUGVybWlzc2lvbkltcGxpZXM6IiArCiAgICAgICAgICAgICBleHBlY3RlZFJlc3VsdCArICItIiArIHRoaXNQICsgIi0iICsgcDsKQEAgLTMzNiwxNyArMzM2LDE3IEBACiAgICAgICAgICAgICBpZiAodGhpc1AuaW1wbGllcyhwKSAhPSBleHBlY3RlZFJlc3VsdCkgewogICAgICAgICAgICAgICAgIGRlYnVnKAogICAgICAgICAgICAgICAgICAgICAoZXhwZWN0ZWRSZXN1bHQgPyAidW5leHBlY3RlZCBmYWlsdXJlOiIgOiJ1bmV4cGVjdGVkIHN1Y2Nlc3M6IikKLSAgICAgICAgICAgICAgICAgICAgICsgcCArIChleHBlY3RlZFJlc3VsdCA/IiBub3QgaW1wbGllZCBieToiOiIgaW1wbGllZCBieToiKSArIAorICAgICAgICAgICAgICAgICAgICAgKyBwICsgKGV4cGVjdGVkUmVzdWx0ID8iIG5vdCBpbXBsaWVkIGJ5OiI6IiBpbXBsaWVkIGJ5OiIpICsKICAgICAgICAgICAgICAgICAgICAgdGhpc1ApOwogICAgICAgICAgICAgICAgIGRlYnVnKCAiLS0gUGVybWlzc2lvbiBpbXBsaWVzIFRlc3QgRmFpbGVkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZGVidWcocCArIAorICAgICAgICAgICAgICAgIGRlYnVnKHAgKwogICAgICAgICAgICAgICAgICAgIChleHBlY3RlZFJlc3VsdCA/ICIgaW1wbGllZCBieToiOiIgbm90IGltcGxpZWQgYnk6IikgKyB0aGlzUCk7CiAgICAgICAgICAgICAgICAgZGVidWcoICItLSBQZXJtaXNzaW9uIGltcGxpZXMgVGVzdCBTdWNjZWVkZWQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfQotICAgICAgICB9IGNhdGNoKCBUaHJvd2FibGUgdCApIHsgCisgICAgICAgIH0gY2F0Y2goIFRocm93YWJsZSB0ICkgewogICAgICAgICAgICAgZGVidWcoInVuZXhwZWN0ZWQgZXhjZXB0aW9uIik7CiAgICAgICAgICAgICB0LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgZGVidWcoICItLSBQZXJtaXNzaW9uIGltcGxpZXMgVGVzdCBGYWlsZWQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwpAQCAtMzY4LDQxICszNjgsNDEgQEAKICAgICAgICAgICAgIGRvRUpCTWV0aG9kUGVybWlzc2lvbih0cnVlLCJiYW5rYmVhbiIsIndpdGhkcmF3LEhvbWUiKTsKICAgICAgICAgICAgIGRvRUpCTWV0aG9kUGVybWlzc2lvbih0cnVlLCJiYW5rYmVhbiIsIndpdGhkcmF3LEhvbWUsamF2YS5sYW5nLnN0cmluZyIpOwogICAgICAgICAgICAgZG9FSkJNZXRob2RQZXJtaXNzaW9uKHRydWUsImJhbmtiZWFuIiwiLEhvbWUiKTsKLSAgICAKKwogICAgICAgICAgICAgZG9FSkJNZXRob2RQZXJtaXNzaW9uKHRydWUsImJhbmtiZWFuIiwiLEhvbWUsamF2YS5sYW5nLnN0cmluZyIpOwotICAgIAorCiAgICAgICAgICAgICBkb0VKQk1ldGhvZFBlcm1pc3Npb24odHJ1ZSwiYmFua2JlYW4iLCJ3aXRoZHJhdyIpOwogICAgICAgICAgICAgZG9FSkJNZXRob2RQZXJtaXNzaW9uKHRydWUsImJhbmtiZWFuIiwid2l0aGRyYXcsSG9tZSIpOwogICAgICAgICAgICAgZG9FSkJNZXRob2RQZXJtaXNzaW9uKHRydWUsImJhbmtiZWFuIiwid2l0aGRyYXcsLGphdmEubGFuZy5zdHJpbmciKTsKICAgICAgICAgICAgIGRvRUpCTWV0aG9kUGVybWlzc2lvbih0cnVlLCJiYW5rYmVhbiIsIndpdGhkcmF3LCwiKTsKICAgICAgICAgICAgIGRvRUpCTWV0aG9kUGVybWlzc2lvbihmYWxzZSwiYmFua0JlYW4iLCJ3aXRoZHJhdyIsIkhvbWUiLHBhcmFtczMpOwotICAgIAorCiAgICAgICAgICAgICBkb0VKQk1ldGhvZFBlcm1pc3Npb24odHJ1ZSwiYmFua0JlYW4iLCJ3aXRoZHJhdyIsIkhvbWUiLHBhcmFtczEpOwogICAgICAgICAgICAgZG9FSkJNZXRob2RQZXJtaXNzaW9uKHRydWUsImJhbmtCZWFuIiwid2l0aGRyYXciLCJIb21lIixwYXJhbXMyKTsKLSAgICAgCisKICAgICAgICAgICAgIGRvRUpCTWV0aG9kUGVybWlzc2lvbih0cnVlLCJiYW5rQmVhbiIsIndpdGhkcmF3IiwiSG9tZSIsbnVsbCk7Ci0gICAgCisKICAgICAgICAgICAgIGRvRUpCTWV0aG9kUGVybWlzc2lvbih0cnVlLCJiYW5rQmVhbiIsbnVsbCwiSG9tZSIscGFyYW1zMSk7Ci0gICAgICAgIAorCiAgICAgICAgICAgICBkb0VKQk1ldGhvZFBlcm1pc3Npb24odHJ1ZSwiYmFua0JlYW4iLCJ3aXRoZHJhdyIsbnVsbCxwYXJhbXMyKTsKLSAgICAKKwogICAgICAgICAgICAgZG9FSkJNZXRob2RQZXJtaXNzaW9uKHRydWUsImJhbmtCZWFuIixudWxsLG51bGwsbnVsbCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEVKQk1ldGhvZFBlcm1pc3Npb24gYSA9IAorCisgICAgICAgICAgICBFSkJNZXRob2RQZXJtaXNzaW9uIGEgPQogICAgICAgICAgICAgICAgIG5ldyBFSkJNZXRob2RQZXJtaXNzaW9uKCJiYW5rQmVhbiIsIndpdGhkcmF3LEhvbWUsamF2YS5sYW5nLnN0cmluZyIpOwotICAgICAgICAgICAgRUpCTWV0aG9kUGVybWlzc2lvbiBiID0gCisgICAgICAgICAgICBFSkJNZXRob2RQZXJtaXNzaW9uIGIgPQogICAgICAgICAgICAgICAgIG5ldyBFSkJNZXRob2RQZXJtaXNzaW9uKCJteUJlYW4iLCJ3aXRoZHJhdyxIb21lLGphdmEubGFuZy5zdHJpbmciKTsKLSAgICAgICAgICAgIEVKQk1ldGhvZFBlcm1pc3Npb24gYyA9IAorICAgICAgICAgICAgRUpCTWV0aG9kUGVybWlzc2lvbiBjID0KICAgICAgICAgICAgICAgICBuZXcgRUpCTWV0aG9kUGVybWlzc2lvbigibXlCZWFuIiwiLEhvbWUsamF2YS5sYW5nLnN0cmluZyIpOwotICAgICAgICAgICAgRUpCTWV0aG9kUGVybWlzc2lvbiBkID0gCisgICAgICAgICAgICBFSkJNZXRob2RQZXJtaXNzaW9uIGQgPQogICAgICAgICAgICAgICAgIG5ldyBFSkJNZXRob2RQZXJtaXNzaW9uKCJteUJlYW4iLCIsLGphdmEubGFuZy5zdHJpbmciKTsKLSAgICAgICAgICAgIEVKQk1ldGhvZFBlcm1pc3Npb24gZSA9IAorICAgICAgICAgICAgRUpCTWV0aG9kUGVybWlzc2lvbiBlID0KICAgICAgICAgICAgICAgICBuZXcgRUpCTWV0aG9kUGVybWlzc2lvbigibXlCZWFuIiwid2l0aGRyYXcsLGphdmEubGFuZy5zdHJpbmciKTsKLSAgICAgICAgICAgIEVKQk1ldGhvZFBlcm1pc3Npb24gZiA9IAorICAgICAgICAgICAgRUpCTWV0aG9kUGVybWlzc2lvbiBmID0KICAgICAgICAgICAgICAgICBuZXcgRUpCTWV0aG9kUGVybWlzc2lvbigibXlCZWFuIiwid2l0aGRyYXcsLGphdmEubGFuZy5pbnQiKTsKLSAgICAgICAgICAgIEVKQk1ldGhvZFBlcm1pc3Npb24gZyA9IAorICAgICAgICAgICAgRUpCTWV0aG9kUGVybWlzc2lvbiBnID0KICAgICAgICAgICAgICAgICBuZXcgRUpCTWV0aG9kUGVybWlzc2lvbigibXlCZWFuIiwid2l0aGRyYXcsUmVtb3RlLCIpOwotICAgICAgICAgICAgRUpCTWV0aG9kUGVybWlzc2lvbiBoID0gCisgICAgICAgICAgICBFSkJNZXRob2RQZXJtaXNzaW9uIGggPQogICAgICAgICAgICAgICAgIG5ldyBFSkJNZXRob2RQZXJtaXNzaW9uKCJteUJlYW4iLCJ3aXRoZHJhdyIsIlJlbW90ZSIsbmV3IFN0cmluZ1swXSk7CiAgICAgICAgICAgICB0ZXN0U2VyaWFsaXphdGlvbihhKTsKICAgICAgICAgICAgIHRlc3RTZXJpYWxpemF0aW9uKGIpOwpAQCAtNDEyLDcgKzQxMiw3IEBACiAgICAgICAgICAgICB0ZXN0U2VyaWFsaXphdGlvbihmKTsKICAgICAgICAgICAgIHRlc3RTZXJpYWxpemF0aW9uKGcpOwogICAgICAgICAgICAgdGVzdFNlcmlhbGl6YXRpb24oaCk7Ci0gICAgCisKICAgICAgICAgICAgIGRvUGVybWlzc2lvbkltcGxpZXMoZmFsc2UsYSxiKTsKICAgICAgICAgICAgIGRvUGVybWlzc2lvbkltcGxpZXMoZmFsc2UsYixhKTsKICAgICAgICAgICAgIGRvUGVybWlzc2lvbkltcGxpZXMoZmFsc2UsYyxhKTsKQEAgLTQyOCw3ICs0MjgsNyBAQAogICAgICAgICAgICAgZG9QZXJtaXNzaW9uSW1wbGllcyh0cnVlLGQsYyk7CiAgICAgICAgICAgICBkb1Blcm1pc3Npb25JbXBsaWVzKHRydWUsZyxoKTsKICAgICAgICAgICAgIGRvUGVybWlzc2lvbkltcGxpZXModHJ1ZSxoLGcpOwotICAgIAorCiAgICAgICAgICAgICBkb0VKQlJvbGVSZWZQZXJtaXNzaW9uKHRydWUsIkVKQk5hbWUiLCJjdXN0b21lciIpOwogCiAgICAgICAgICAgICBFSkJSb2xlUmVmUGVybWlzc2lvbiBhMSxhMixhMyxhNDsKQEAgLTQ0MSw3ICs0NDEsNyBAQAogICAgICAgICAgICAgdGVzdFNlcmlhbGl6YXRpb24oYTIpOwogICAgICAgICAgICAgdGVzdFNlcmlhbGl6YXRpb24oYTMpOwogICAgICAgICAgICAgdGVzdFNlcmlhbGl6YXRpb24oYTQpOwotICAgIAorCiAgICAgICAgICAgICBkb1Blcm1pc3Npb25JbXBsaWVzKHRydWUsYTEsYTEpOwogICAgICAgICAgICAgZG9QZXJtaXNzaW9uSW1wbGllcyhmYWxzZSxhMSxhMik7CiAgICAgICAgICAgICBkb1Blcm1pc3Npb25JbXBsaWVzKGZhbHNlLGExLGEzKTsKQEAgLTQ2OCw3ICs0NjgsNyBAQAogCiAgICAgICAgIGZvciAoaW50IGk9MDsgaTwgbS5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgZm9yIChpbnQgaj0wOyBqPG0ubGVuZ3RoOyBqKyspIHsKLSAgICAgICAgICAgICAgICBpZiAoaSA9PSBqKSB7IAorICAgICAgICAgICAgICAgIGlmIChpID09IGopIHsKICAgICAgICAgICAgICAgICAgICAgZG9QZXJtaXNzaW9uSW1wbGllcyh0cnVlLHBbaV0scFtqXSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgZG9QZXJtaXNzaW9uSW1wbGllcyhmYWxzZSxwW2ldLHBbal0pOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9zcmMvVGVzdFBDRi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9zcmMvVGVzdFBDRi5qYXZhCmluZGV4IGI1NmQ5NTYuLmU1MDVlMWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvc3JjL1Rlc3RQQ0YuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjQXBpL3NyYy9UZXN0UENGLmphdmEKQEAgLTMyLDE3ICszMiwxNyBAQAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKHRlc3RTdWl0ZSk7CiAgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IG51bGw7CiAgICAgICAgIGJvb2xlYW4gZXhwZWN0QUNFeGNlcHRpb24gPQotICAgICAgICAgICAgKGFyZ3MgIT0gbnVsbCAmJiBhcmdzLmxlbmd0aCA+IDApID8gCisgICAgICAgICAgICAoYXJncyAhPSBudWxsICYmIGFyZ3MubGVuZ3RoID4gMCkgPwogICAgICAgICAgICAgQm9vbGVhbi5wYXJzZUJvb2xlYW4oYXJnc1swXSkgOiB0cnVlOwotICAgICAgICBTdHJpbmcgZXhwZWN0ZWRFeGNlcHRpb24gPSAKKyAgICAgICAgU3RyaW5nIGV4cGVjdGVkRXhjZXB0aW9uID0KICAgICAgICAgICAgIChhcmdzICE9IG51bGwgJiYgYXJncy5sZW5ndGggPiAxKSA/IGFyZ3NbMV0gOiBudWxsOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImV4cGVjdCBBY2Nlc3NDb250cm9sRXhjZXB0aW9uOiAiICsgZXhwZWN0QUNFeGNlcHRpb24pOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImV4cGVjdGVkIEV4Y2VwdGlvbjogIiArIGV4cGVjdGVkRXhjZXB0aW9uKTsKLSAgICAgICAgCisKICAgICAgICAgZGVzY3JpcHRpb24gPSB0ZXN0U3VpdGUgKyAiLSIgKyBleHBlY3RBQ0V4Y2VwdGlvbiArICItIiArCiAgICAgICAgICAgICBleHBlY3RlZEV4Y2VwdGlvbiArICIgd2l0aG91dCBTZWN1cml0eU1hbmFnZXIiOwogICAgICAgICB0cnkgewotICAgICAgICAgICAgUG9saWN5Q29uZmlndXJhdGlvbkZhY3RvcnkgZiA9IAorICAgICAgICAgICAgUG9saWN5Q29uZmlndXJhdGlvbkZhY3RvcnkgZiA9CiAgICAgICAgICAgICAgICAgUG9saWN5Q29uZmlndXJhdGlvbkZhY3RvcnkuZ2V0UG9saWN5Q29uZmlndXJhdGlvbkZhY3RvcnkoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCkgewpAQCAtNjQsNyArNjQsNyBAQAogICAgICAgICBkZXNjcmlwdGlvbiA9IHRlc3RTdWl0ZSArICItIiArIGV4cGVjdEFDRXhjZXB0aW9uICsgIi0iICsKICAgICAgICAgICAgIGV4cGVjdGVkRXhjZXB0aW9uICsgIiB3aXRoIFNlY3VyaXR5TWFuYWdlciI7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBQb2xpY3lDb25maWd1cmF0aW9uRmFjdG9yeSBmID0gCisgICAgICAgICAgICBQb2xpY3lDb25maWd1cmF0aW9uRmFjdG9yeSBmID0KICAgICAgICAgICAgICAgICBQb2xpY3lDb25maWd1cmF0aW9uRmFjdG9yeS5nZXRQb2xpY3lDb25maWd1cmF0aW9uRmFjdG9yeSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2goQWNjZXNzQ29udHJvbEV4Y2VwdGlvbiBhY2UpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvc3JjL1Rlc3RVUkxQYXR0ZXJuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjQXBpL3NyYy9UZXN0VVJMUGF0dGVybi5qYXZhCmluZGV4IGFhMmJiOWEuLmFiNjU3NmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvc3JjL1Rlc3RVUkxQYXR0ZXJuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9zcmMvVGVzdFVSTFBhdHRlcm4uamF2YQpAQCAtMjksNyArMjksNyBAQAogICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSAidGVzdFBhdHRlcm5UeXBlOiIgKyBwOwogICAgICAgICBVUkxQYXR0ZXJuIHUgPSBuZXcgVVJMUGF0dGVybihwKTsKICAgICAgICAgaW50IHJlc3VsdCA9IHUucGF0dGVyblR5cGUoKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBleHBlY3RlZCkgeyAKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBleHBlY3RlZCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJwYXR0ZXJuVHlwZTogIiArIGV4cGVjdGVkICsgIiAiICsKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICsgIiBzdWNjZWRlZCAiICsgdSk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5QQVNTKTsKQEAgLTYyLDE2ICs2MiwxNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICsgIiBzdWNjZWRlZCAiICsgdTEgKyAiXHQiICsgdTIpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQgIT0gMCAmJiB1bmtub3duKSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjb21wYXJlVG8oLT4pOiAhMCAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjb21wYXJlVG8oLT4pOiAhMCAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArICAiIHN1Y2NlZGVkICIgKyB1MSArICJcdCIgKyB1Mik7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY29tcGFyZVRvKC0+KTogIiArIGV4cGVjdGVkICsgIiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjb21wYXJlVG8oLT4pOiAiICsgZXhwZWN0ZWQgKyAiICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICsgIiBmYWlsZWQgICAgIiArIHUxICsgIlx0IiArIHUyKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY29tcGFyZVRvKDwtKTogIiArIGV4cGVjdGVkICogLTEgKyAiICIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY29tcGFyZVRvKDwtKTogIiArIGV4cGVjdGVkICogLTEgKyAiICIgKwogICAgICAgICAgICAgICAgICAgICBpbnZlcnNlICsgIiBmYWlsZWQgICAgIiArIHUyICsgIlx0IiArIHUxKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LkZBSUwpOwogICAgICAgICB9CkBAIC04NiwxMyArODYsMTMgQEAKICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBVUkxQYXR0ZXJuLlBUX0RFRkFVTFQ6ICAgIAorICAgICAgICBjYXNlIFVSTFBhdHRlcm4uUFRfREVGQVVMVDoKICAgICAgICAgICAgIGV4cGVjdGVkID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFVSTFBhdHRlcm4uUFRfRVhURU5TSU9OOgogICAgICAgICAgICAgaWYgKHAyVHlwZSA9PSBVUkxQYXR0ZXJuLlBUX0VYVEVOU0lPTiAmJiBwMS5lcXVhbHMocDIpKSB7CiAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSB0cnVlOwotICAgICAgICAgICAgfSBlbHNlIGlmIChwMlR5cGUgPT0gVVJMUGF0dGVybi5QVF9FWEFDVCAmJiAKKyAgICAgICAgICAgIH0gZWxzZSBpZiAocDJUeXBlID09IFVSTFBhdHRlcm4uUFRfRVhBQ1QgJiYKICAgICAgICAgICAgICAgICAgICAgIHAyLmVuZHNXaXRoKHAxLnN1YnN0cmluZygxKSkpIHsKICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IHRydWU7CiAgICAgICAgICAgICB9CkBAIC0xMDEsNyArMTAxLDcgQEAKICAgICAgICAgICAgIGlmIChwMS5lcXVhbHMoIi8qIikpIHsKICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IHRydWU7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKHAyLnN0YXJ0c1dpdGgocDEuc3Vic3RyaW5nKDAscDEubGVuZ3RoKCktMikpICYmCi0gICAgICAgICAgICAgICAgICAgICAocDIubGVuZ3RoKCkgPT0gcDEubGVuZ3RoKCktMiB8fCAKKyAgICAgICAgICAgICAgICAgICAgIChwMi5sZW5ndGgoKSA9PSBwMS5sZW5ndGgoKS0yIHx8CiAgICAgICAgICAgICAgICAgICAgICAgcDIuc3Vic3RyaW5nKHAxLmxlbmd0aCgpLTIpLnN0YXJ0c1dpdGgoIi8iKSkpIHsKICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IHRydWU7CiAgICAgICAgICAgICB9CkBAIC0xMjQsMTYgKzEyNCwxNiBAQAogICAgICAgICBib29sZWFuIHJlc3VsdCA9IHUxLmltcGxpZXModTIpOwogICAgICAgICBib29sZWFuIGludmVyc2UgPSB1Mi5pbXBsaWVzKHUxKTsKIAotICAgICAgICBpZiAocmVzdWx0ID09IGV4cGVjdGVkKSB7IAotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbXBsaWVzKC0+KTogIiArIGV4cGVjdGVkICsgIiAiICsgcmVzdWx0ICsgCisgICAgICAgIGlmIChyZXN1bHQgPT0gZXhwZWN0ZWQpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW1wbGllcygtPik6ICIgKyBleHBlY3RlZCArICIgIiArIHJlc3VsdCArCiAgICAgICAgICAgICAgICAgICAgICIgc3VjY2VkZWQgIiArIHUxICsgIlx0IiArIHUyKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGVsc2UgaWYgKGludmVyc2UgIT0gZXhwZWN0ZWRJbnZlcnNlKSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImltcGxpZXMoPC0pOiAiICsgZXhwZWN0ZWRJbnZlcnNlICsgIiAiICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImltcGxpZXMoPC0pOiAiICsgZXhwZWN0ZWRJbnZlcnNlICsgIiAiICsKICAgICAgICAgICAgICAgICAgICAgaW52ZXJzZSArICIgZmFpbGVkICAgICIgKyB1MiArICJcdCIgKyB1MSk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5GQUlMKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW1wbGllcygtPik6ICIgKyBleHBlY3RlZCArICIgIiArIHJlc3VsdCArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbXBsaWVzKC0+KTogIiArIGV4cGVjdGVkICsgIiAiICsgcmVzdWx0ICsKICAgICAgICAgICAgICAgICAgICAgIiBmYWlsZWQgICAgIiArIHUxICsgIlx0IiArIHUyKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LkZBSUwpOwogICAgICAgICB9CkBAIC0xNDIsNyArMTQyLDcgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIHZvaWQgdGVzdF9lcXVhbHMoCiAgICAgICAgICAgICBTdHJpbmcgcDEsIGludCBwMVR5cGUsIFN0cmluZyBwMiwgaW50IHAyVHlwZSkgewotICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSAidGVzdEVxdWFsczoiICsgCisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9ICJ0ZXN0RXF1YWxzOiIgKwogICAgICAgICAgICAgcDEgKyAiLSIgKyBwMVR5cGUgKyAiLSIgKyBwMiArICItIiArIHAyVHlwZTsKICAgICAgICAgVVJMUGF0dGVybiB1MSA9IG5ldyBVUkxQYXR0ZXJuKHAxKTsKICAgICAgICAgVVJMUGF0dGVybiB1MiA9IG5ldyBVUkxQYXR0ZXJuKHAyKTsKQEAgLTE1NCw3ICsxNTQsNyBAQAogCiAgICAgICAgIGlmIChyZXN1bHQgPT0gaW52ZXJzZSkgewogICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSB0cnVlICYmICghdTEuaW1wbGllcyh1MikgfHwgIXUyLmltcGxpZXModTEpKSkgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZXF1YWxzKDwtPik6ICIgKyBleHBlY3RlZCArICIgIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZXF1YWxzKDwtPik6ICIgKyBleHBlY3RlZCArICIgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKyAiIGZhaWxlZCAgICAiICsgdTIgKyAiXHQiICsgdTEpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LkZBSUwpOwogCkBAIC0xNjMsMTMgKzE2MywxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICsgIiBzdWNjZWRlZCAiICsgdTEgKyAiXHQiICsgdTIpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LlBBU1MpOwogCi0gICAgICAgICAgICB9IGVsc2UgeyAKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImVxdWFscygtLT4pOiAiICsgZXhwZWN0ZWQgKyAiICIgKyAKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJlcXVhbHMoLS0+KTogIiArIGV4cGVjdGVkICsgIiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArICIgZmFpbGVkICAgICIgKyB1MSArICJcdCIgKyB1Mik7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImVxdWFscyg8LS0pOiAiICsgcmVzdWx0ICsgIiAiICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImVxdWFscyg8LS0pOiAiICsgcmVzdWx0ICsgIiAiICsKICAgICAgICAgICAgICAgICAgICAgaW52ZXJzZSArICIgZmFpbGVkICAgICIgKyB1MiArICJcdCIgKyB1MSk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5GQUlMKTsKICAgICAgICAgfQpAQCAtMTgyLDcgKzE4Miw3IEBACiAgICAgICAgICAgICAiL2EvYi9jLmpzcCIsCiAgICAgICAgICAgICAiL2EvYyIsCiAgICAgICAgICAgICAiLyoiLAotICAgICAgICAgICAgIi9hLyoiLCAKKyAgICAgICAgICAgICIvYS8qIiwKICAgICAgICAgICAgICIvYS9jLyoiLAogICAgICAgICAgICAgIi8vKiIsCiAgICAgICAgICAgICAiKi5qc3AiLApAQCAtMjA0LDE3ICsyMDQsMTcgQEAKICAgICAgICAgICAgIC8qIENPTU1FTlRFRCBPVVQhICxVUkxQYXR0ZXJuLlBUX0RFRkFVTFQgKi8KICAgICAgICAgfTsKIAotICAgICAgICBmb3IgKGludCBpPTA7IGk8dXBBcnJheS5sZW5ndGg7IGkrKykgeyAKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPHVwQXJyYXkubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgIHRlc3RfcGF0dGVyblR5cGUodXBBcnJheVtpXSx1cFR5cGVBcnJheVtpXSk7CiAgICAgICAgIH0KLSAgICAKKwogICAgICAgICBmb3IgKGludCBpPTA7IGk8dXBBcnJheS5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgZm9yIChpbnQgaj0wOyBqPHVwQXJyYXkubGVuZ3RoOyBqKyspIHsKICAgICAgICAgICAgICAgICB0ZXN0X2NvbXBhcmVUbyh1cEFycmF5W2ldLHVwVHlwZUFycmF5W2ldLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwQXJyYXlbal0sdXBUeXBlQXJyYXlbal0pOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgCisKICAgICAgICAgZm9yIChpbnQgaT0wOyBpPHVwQXJyYXkubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgIGZvciAoaW50IGo9MDsgajx1cEFycmF5Lmxlbmd0aDsgaisrKSB7CiAgICAgICAgICAgICAgICAgdGVzdF9pbXBsaWVzKHVwQXJyYXlbaV0sdXBUeXBlQXJyYXlbaV0sCkBAIC0yMjIsMTMgKzIyMiwxMyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgZm9yIChpbnQgaT0wOyBpPHVwQXJyYXkubGVuZ3RoOyBpKyspIHsgCisgICAgICAgIGZvciAoaW50IGk9MDsgaTx1cEFycmF5Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICBmb3IgKGludCBqPTA7IGo8dXBBcnJheS5sZW5ndGg7IGorKykgewogICAgICAgICAgICAgICAgIHRlc3RfZXF1YWxzKHVwQXJyYXlbaV0sdXBUeXBlQXJyYXlbaV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwQXJyYXlbal0sdXBUeXBlQXJyYXlbal0pOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgCisKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkodGVzdFN1aXRlKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjQXBpL3NyYy9UZXN0VVJMUGF0dGVyblNwZWMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvc3JjL1Rlc3RVUkxQYXR0ZXJuU3BlYy5qYXZhCmluZGV4IDYzOTlkZDUuLjA3ODgxYTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvc3JjL1Rlc3RVUkxQYXR0ZXJuU3BlYy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvc3JjL1Rlc3RVUkxQYXR0ZXJuU3BlYy5qYXZhCkBAIC0zMCwyNSArMzAsMjUgQEAKICAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIHRlc3RfY29uc3RydWN0b3IoCiAgICAgICAgICAgICBTdHJpbmcgcCwgYm9vbGVhbiBleHBlY3RlZFRvU3VjY2VlZCkgewogICAgICAgICBib29sZWFuIHJlc3VsdCA9IGV4cGVjdGVkVG9TdWNjZWVkOwotICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBVUkxQYXR0ZXJuU3BlYyB1ID0gbmV3IFVSTFBhdHRlcm5TcGVjKHApOwogCiAgICAgICAgICAgICBpZiAoZXhwZWN0ZWRUb1N1Y2NlZWQpIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNvbnN0cnVjdG9yKCApOiAiICsgZXhwZWN0ZWRUb1N1Y2NlZWQgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNvbnN0cnVjdG9yKCApOiAiICsgZXhwZWN0ZWRUb1N1Y2NlZWQgKwogICAgICAgICAgICAgICAgICAgICAiIHN1Y2NlZGVkICIgKyB1LnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNvbnN0cnVjdG9yKCApOiAiICsgZXhwZWN0ZWRUb1N1Y2NlZWQgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNvbnN0cnVjdG9yKCApOiAiICsgZXhwZWN0ZWRUb1N1Y2NlZWQgKwogICAgICAgICAgICAgICAgICAgICAiIGZhaWxlZCAgICIgKyB1LnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdCkgewotICAgICAgICAgICAgaWYgKCFleHBlY3RlZFRvU3VjY2VlZCkgeyAKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNvbnN0cnVjdG9yKGUpOiAiICsgZXhwZWN0ZWRUb1N1Y2NlZWQgKyAKKyAgICAgICAgICAgIGlmICghZXhwZWN0ZWRUb1N1Y2NlZWQpIHsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNvbnN0cnVjdG9yKGUpOiAiICsgZXhwZWN0ZWRUb1N1Y2NlZWQgKwogICAgICAgICAgICAgICAgICAgICAgIiBzdWNjZWRlZCAiICsgcCk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY29uc3RydWN0b3IoZSk6ICIgKyBleHBlY3RlZFRvU3VjY2VlZCArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY29uc3RydWN0b3IoZSk6ICIgKyBleHBlY3RlZFRvU3VjY2VlZCArCiAgICAgICAgICAgICAgICAgICAgICAiIGZhaWxlZCAgICIgKyBwKTsKICAgICAgICAgICAgICAgICB0LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgfQpAQCAtNzEsNyArNzEsNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJnZXRVUkxQYXR0ZXJuOiBzdWNjZWRlZCAiICsgZXhwZWN0ZWQgKyAiICIgKwogICAgICAgICAgICAgICAgICAgICByZXN1bHQgKyAiICIgKyBzKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZ2V0VVJMUGF0dGVybjogZmFpbGVkICAiICsgZXhwZWN0ZWQgKyAiICIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZ2V0VVJMUGF0dGVybjogZmFpbGVkICAiICsgZXhwZWN0ZWQgKyAiICIgKwogICAgICAgICAgICAgICAgICAgICByZXN1bHQgKyAiICIgKyBzKTsKICAgICAgICAgfQogICAgIH0KQEAgLTg4LDggKzg4LDggQEAKIAogICAgICAgICBpZiAocmVzdWx0ID09IGludmVyc2UpIHsKICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gdHJ1ZSAmJiAoIXUxLmltcGxpZXModTIpIHx8ICF1Mi5pbXBsaWVzKHUxKSkpIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImVxdWFscyg8LT4pOiAiICsgZXhwZWN0ZWQgKyAiICIgKyAKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArICIgZmFpbGVkICAgICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImVxdWFscyg8LT4pOiAiICsgZXhwZWN0ZWQgKyAiICIgKworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICsgIiBmYWlsZWQgICAgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAiXHQiICsgdTEuaW1wbGllcyh1MikgKyB1Mi5pbXBsaWVzKHUxKSsiICIrCiAgICAgICAgICAgICAgICAgICAgICAgICAiXHQiICsgdTIgKyAiXHQiICsgdTEpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LkZBSUwpOwpAQCAtOTcsMTMgKzk3LDEzIEBACiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJlcXVhbHMoLS0+KTogIiArIGV4cGVjdGVkICsgIiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArICIgc3VjY2VkZWQgIiArIHUxICsgIlx0IiArIHUyKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5QQVNTKTsKLSAgICAgICAgICAgIH0gZWxzZSB7IAotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZXF1YWxzKC0tPik6ICIgKyBleHBlY3RlZCArICIgIiArIAorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImVxdWFscygtLT4pOiAiICsgZXhwZWN0ZWQgKyAiICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICsgIiBmYWlsZWQgICAgIiArIHUxICsgIlx0IiArIHUyKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZXF1YWxzKDwtLSk6ICIgKyByZXN1bHQgKyAiICIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZXF1YWxzKDwtLSk6ICIgKyByZXN1bHQgKyAiICIgKwogICAgICAgICAgICAgICAgICAgICBpbnZlcnNlICsgIiBmYWlsZWQgICAgIiArIHUyICsgIlx0IiArIHUxKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LkZBSUwpOwogICAgICAgICB9CkBAIC0xNDksNyArMTQ5LDcgQEAKIAogICAgICAgICBVUkxQYXR0ZXJuU3BlYyB1MiA9IG5ldyBVUkxQYXR0ZXJuU3BlYyhzMi50b1N0cmluZygpKTsKICAgICAgICAgaW50IG90aGVyID0gdTIuaGFzaENvZGUoKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBhZ2FpbiAmJiByZXN1bHQgPT0gb3RoZXIpIHsgCisgICAgICAgIGlmIChyZXN1bHQgPT0gYWdhaW4gJiYgcmVzdWx0ID09IG90aGVyKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImhhc2hDb2RlOiAiICsgcmVzdWx0ICsgIiAiICsKICAgICAgICAgICAgICAgICAgICAgYWdhaW4gKyAiICIgKyBvdGhlciArICIgc3VjY2VkZWQgIiArIHMxICsKICAgICAgICAgICAgICAgICAgICAgIiAiICsgdTIudG9TdHJpbmcoKSk7CkBAIC0xNzMsMTUgKzE3MywxNSBAQAogICAgICAgICBib29sZWFuIGludmVyc2UgPSB1Mi5pbXBsaWVzKHUxKTsKIAogICAgICAgICBpZiAocmVzdWx0ICE9IGV4cGVjdGVkKSB7Ci0gICAgIAkgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbXBsaWVzKC0+KTogIiArIGV4cGVjdGVkICsgIiAiICsgcmVzdWx0ICsgCisgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbXBsaWVzKC0+KTogIiArIGV4cGVjdGVkICsgIiAiICsgcmVzdWx0ICsKICAgICAgICAgICAgICAgICAgICAgIiBzdWNjZWRlZCAiICsgdTEgKyAiXHQiICsgdTIpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuRkFJTCk7CiAgICAgICAgIH0gZWxzZSBpZiAoaW52ZXJzZSAhPSBleHBlY3RlZEludmVyc2UpIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW1wbGllcyg8LSk6ICIgKyBleHBlY3RlZEludmVyc2UgKyAiICIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW1wbGllcyg8LSk6ICIgKyBleHBlY3RlZEludmVyc2UgKyAiICIgKwogICAgICAgICAgICAgICAgICAgICBpbnZlcnNlICsgIiBmYWlsZWQgICAgIiArIHUyICsgIlx0IiArIHUxKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LkZBSUwpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbXBsaWVzKC0+KTogIiArIGV4cGVjdGVkICsgIiAiICsgcmVzdWx0ICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImltcGxpZXMoLT4pOiAiICsgZXhwZWN0ZWQgKyAiICIgKyByZXN1bHQgKwogICAgICAgICAgICAgICAgICAgICAiIGZhaWxlZCAgICAiICsgdTEgKyAiXHQiICsgdTIpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuUEFTUyk7CiAgICAgICAgIH0KQEAgLTE5NCw3ICsxOTQsNyBAQAogICAgICAgICAgICAgIi9hL2MiLAogICAgICAgICAgICAgIi9hL2IvYy5qc3AiLAogICAgICAgICAgICAgIi9hL2MvKiIsCi0gICAgICAgICAgICAiL2EvKiIsIAorICAgICAgICAgICAgIi9hLyoiLAogICAgICAgICAgICAgIi8qIiwKICAgICAgICAgICAgIC8qIENPTU1FTlRFRCBPVVQhICIvLyoiLCovCiAgICAgICAgICAgICAiKi5qc3AiLApAQCAtMjI4LDIxICsyMjgsMjEgQEAKICAgICAgICAgICAgIHRlc3RfZ2V0VVJMUGF0dGVybihzLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgdGVzdF9oYXNoQ29kZShzLnRvU3RyaW5nKCkpOwogCi0gICAgICAgICAgICBVUkxQYXR0ZXJuIHVpID0gbmV3IFVSTFBhdHRlcm4ocEFycmF5W2ldKTsgCi0gCisgICAgICAgICAgICBVUkxQYXR0ZXJuIHVpID0gbmV3IFVSTFBhdHRlcm4ocEFycmF5W2ldKTsKKwogICAgICAgICAgICAgZm9yIChpbnQgaj0wOyBqPHBBcnJheS5sZW5ndGg7IGorKykgewogCiAgICAgICAgICAgICAgICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKIAogICAgICAgICAgICAgICAgIFVSTFBhdHRlcm4gdWogPSBuZXcgVVJMUGF0dGVybihwQXJyYXlbal0pOwogCi0gICAgICAgICAgICAgICAgaWYgKGo9PWkgfHwgdWouaW1wbGllcyh1aSkpIHsgCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRlc3RfY29uc3RydWN0b3Iocy50b1N0cmluZygpICsgIjoiICsgCisgICAgICAgICAgICAgICAgaWYgKGo9PWkgfHwgdWouaW1wbGllcyh1aSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdGVzdF9jb25zdHJ1Y3RvcihzLnRvU3RyaW5nKCkgKyAiOiIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBcnJheVtqXSxmYWxzZSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgc3dpdGNoKHBUeXBlQXJyYXlbaV0pIHsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBVUkxQYXR0ZXJuLlBUX0VYQUNUOgotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdGVzdF9jb25zdHJ1Y3RvcihzLnRvU3RyaW5nKCkgKyAiOiIgKyAKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRlc3RfY29uc3RydWN0b3Iocy50b1N0cmluZygpICsgIjoiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFycmF5W2pdLGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNlIFVSTFBhdHRlcm4uUFRfREVGQVVMVDoKQEAgLTI1MSwxOCArMjUxLDE4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBVUkxQYXR0ZXJuLlBUX0VYVEVOU0lPTjoKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwVHlwZUFycmF5W2pdID09IFVSTFBhdHRlcm4uUFRfUFJFRklYKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdGVzdF9jb25zdHJ1Y3RvcihzLnRvU3RyaW5nKCkgKyAiOiIgKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0ZXN0X2NvbnN0cnVjdG9yKHMudG9TdHJpbmcoKSArICI6IiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQXJyYXlbal0sdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBUeXBlQXJyYXlbal0gPT0gVVJMUGF0dGVybi5QVF9FWEFDVCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwQXJyYXlbal0uZW5kc1dpdGgocEFycmF5W2ldLnN1YnN0cmluZygxKSkpIHsgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRlc3RfY29uc3RydWN0b3Iocy50b1N0cmluZygpICsgIjoiICsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBBcnJheVtqXS5lbmRzV2l0aChwQXJyYXlbaV0uc3Vic3RyaW5nKDEpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0ZXN0X2NvbnN0cnVjdG9yKHMudG9TdHJpbmcoKSArICI6IiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFycmF5W2pdLHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRlc3RfY29uc3RydWN0b3Iocy50b1N0cmluZygpICsgIjoiICsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRlc3RfY29uc3RydWN0b3Iocy50b1N0cmluZygpICsgIjoiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQXJyYXlbal0sZmFsc2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRlc3RfY29uc3RydWN0b3Iocy50b1N0cmluZygpICsgIjoiICsgCisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRlc3RfY29uc3RydWN0b3Iocy50b1N0cmluZygpICsgIjoiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBcnJheVtqXSxmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTI3MSwxNCArMjcxLDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBUeXBlQXJyYXlbal0gPT0gVVJMUGF0dGVybi5QVF9QUkVGSVgpIHsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1aS5pbXBsaWVzKHVqKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0ZXN0X2NvbnN0cnVjdG9yKHMudG9TdHJpbmcoKSArICI6IiArIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBcnJheVtqXSx0cnVlKTsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRlc3RfY29uc3RydWN0b3Iocy50b1N0cmluZygpICsgIjoiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQXJyYXlbal0sdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdGVzdF9jb25zdHJ1Y3RvcihzLnRvU3RyaW5nKCkgKyAiOiIgKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdGVzdF9jb25zdHJ1Y3RvcihzLnRvU3RyaW5nKCkgKyAiOiIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBcnJheVtqXSxmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0ZXN0X2NvbnN0cnVjdG9yKHMudG9TdHJpbmcoKSArICI6IiArIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRlc3RfY29uc3RydWN0b3Iocy50b1N0cmluZygpICsgIjoiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBcnJheVtqXSxmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NBcGkvc3JjL1Rlc3RXZWJQZXJtcy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9zcmMvVGVzdFdlYlBlcm1zLmphdmEKaW5kZXggNWEzODNlZi4uZmVjNWU2NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9zcmMvVGVzdFdlYlBlcm1zLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY0FwaS9zcmMvVGVzdFdlYlBlcm1zLmphdmEKQEAgLTE4LDcgKzE4LDcgQEAKIAogaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lio7CiBpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEuc2VjdXJpdHkuKjsgCitpbXBvcnQgamF2YS5zZWN1cml0eS4qOwogaW1wb3J0IGpha2FydGEuc2VjdXJpdHkuamFjYy5XZWJSZXNvdXJjZVBlcm1pc3Npb247CiBpbXBvcnQgamFrYXJ0YS5zZWN1cml0eS5qYWNjLldlYlVzZXJEYXRhUGVybWlzc2lvbjsKIGltcG9ydCBqYWthcnRhLnNlY3VyaXR5LmphY2MuV2ViUm9sZVJlZlBlcm1pc3Npb247CkBAIC0zNSw3ICszNSw3IEBACiBpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwogCiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci5TaW1wbGVSZXBvcnRlckFkYXB0ZXI7Ci0gCisKIHB1YmxpYyBjbGFzcyBUZXN0V2ViUGVybXMgewogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKQEAgLTU0LDE0ICs1NCwxNCBAQAogCiAgICAgICAgIFBlcm1pc3Npb24gcDIgPSBwMTsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIEZpbGVPdXRwdXRTdHJlYW0gZm91dCA9IG5ldyAKKyAgICAgICAgICAgIEZpbGVPdXRwdXRTdHJlYW0gZm91dCA9IG5ldwogICAgICAgICAgICAgICAgIEZpbGVPdXRwdXRTdHJlYW0oInNlcmlhbC10ZXN0LWZpbGUudG1wIik7CiAgICAgICAgICAgICBPYmplY3RPdXRwdXRTdHJlYW0gc291dCA9IG5ldyBPYmplY3RPdXRwdXRTdHJlYW0oZm91dCk7CiAgICAgICAgICAgICBzb3V0LndyaXRlT2JqZWN0KHAxKTsKICAgICAgICAgICAgIHNvdXQuZmx1c2goKTsKICAgICAgICAgICAgIHNvdXQuY2xvc2UoKTsKICAgICAgICAgICAgIGZvdXQuY2xvc2UoKTsKLSAgICAgICAgfSBjYXRjaCggVGhyb3dhYmxlIHQgKSB7IAorICAgICAgICB9IGNhdGNoKCBUaHJvd2FibGUgdCApIHsKICAgICAgICAgICAgIHQucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBkZWJ1ZyggIi0tIFNlcmlhbGl6YXRpb24gVGVzdCBGYWlsZWQod3JpdGUpLSIgKyBwMS5nZXROYW1lKCkgKyAiLCIgKyBwMS5nZXRBY3Rpb25zKCkpCiA7CkBAIC03MiwxNyArNzIsMTcgQEAKICAgICAgICAgICAgIE9iamVjdElucHV0U3RyZWFtIHNpbiA9IG5ldyBPYmplY3RJbnB1dFN0cmVhbShmaW4pOwogICAgICAgICAgICAgcDIgPSAoUGVybWlzc2lvbikgc2luLnJlYWRPYmplY3QoKTsKICAgICAgICAgICAgIHNpbi5jbG9zZSgpOwotICAgICAgICAgICAgZmluLmNsb3NlKCk7IAotICAgICAgICB9IGNhdGNoKCBUaHJvd2FibGUgdCApIHsgCisgICAgICAgICAgICBmaW4uY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCggVGhyb3dhYmxlIHQgKSB7CiAgICAgICAgICAgICB0LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgZGVidWcoICItLSBTZXJpYWxpemF0aW9uIFRlc3QgRmFpbGVkKHJlYWQpLSIgKyBwMS5nZXROYW1lKCkgKyAiLCIgKyBwMS5nZXRBY3Rpb25zKCkpOwogICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAocmVzdWx0ID09IHRydWUpIHsKLSAgICAgICAgICAgIGlmIChwMi5lcXVhbHMocDEpKSB7IAorICAgICAgICAgICAgaWYgKHAyLmVxdWFscyhwMSkpIHsKICAgICAgICAgICAgICAgICBkZWJ1ZyggIi0tIFNlcmlhbGl6YXRpb24gVGVzdCBTdWNjZWVkZWQgLS0tLS0tLS0tLS0iICsgcDIuZ2V0TmFtZSgpICsgIiwiICsgcDIuZ2V0QWN0aW9ucygpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7IAorICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBkZWJ1ZyggIi0tIFNlcmlhbGl6YXRpb24gVGVzdCBGYWlsZWQtIiArIHAxLmdldE5hbWUoKSArICIsIiArIHAxLmdldEFjdGlvbnMoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CkBAIC0xMjQsNyArMTI0LDcgQEAKIAogICAgICAgICAgICAgaWYgKGV4cGVjdGVkVG9TdWNjZWVkKSB7CiAKLSAgICAgICAgICAgICAgICBwMiA9IG5ldyBXZWJSZXNvdXJjZVBlcm1pc3Npb24ocDEuZ2V0TmFtZSgpLHAxLmdldEFjdGlvbnMoKSk7IAorICAgICAgICAgICAgICAgIHAyID0gbmV3IFdlYlJlc291cmNlUGVybWlzc2lvbihwMS5nZXROYW1lKCkscDEuZ2V0QWN0aW9ucygpKTsKIAogICAgICAgICAgICAgICAgIGlmICghcDEuZXF1YWxzKHAyKSkgewogICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKQEAgLTE0Miw3ICsxNDIsNyBAQAogICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwogICAgICAgICAgICAgfQogCi0gICAgICAgIH0gY2F0Y2goIFRocm93YWJsZSB0ICkgeyAKKyAgICAgICAgfSBjYXRjaCggVGhyb3dhYmxlIHQgKSB7CiAKICAgICAgICAgICAgIGlmIChleHBlY3RlZFRvU3VjY2VlZCkgewogICAgICAgICAgICAgICAgIHQucHJpbnRTdGFja1RyYWNlKCk7CkBAIC0xNjUsNyArMTY1LDcgQEAKICAgICAgICAgICAgIGRlYnVnKCAiLS0gQ29uc3RydWN0IFRlc3QgLS0iKTsKICAgICAgICAgICAgIHAxID0gbmV3IFdlYlJlc291cmNlUGVybWlzc2lvbihVUkxQYXR0ZXJuLG1ldGhvZHMpOwogICAgICAgICAgICAgaWYgKGV4cGVjdGVkVG9TdWNjZWVkKSB7Ci0gICAgICAgICAgICAgICAgcDIgPSBuZXcgV2ViUmVzb3VyY2VQZXJtaXNzaW9uKHAxLmdldE5hbWUoKSxwMS5nZXRBY3Rpb25zKCkpOyAKKyAgICAgICAgICAgICAgICBwMiA9IG5ldyBXZWJSZXNvdXJjZVBlcm1pc3Npb24ocDEuZ2V0TmFtZSgpLHAxLmdldEFjdGlvbnMoKSk7CiAgICAgICAgICAgICAgICAgaWYgKCFwMS5lcXVhbHMocDIpKSB7CiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICBkZWJ1ZygicCAhPSBwXG5cdCIgKyBwMSArICJcblx0IiArIHAyKTsKQEAgLTE3OCw3ICsxNzgsNyBAQAogICAgICAgICAgICAgICAgIGRlYnVnKCJ1bmV4cGVjdGVkIHN1Y2Nlc3NcdCIgKyBwMSk7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gY2F0Y2goIFRocm93YWJsZSB0ICkgeyAKKyAgICAgICAgfSBjYXRjaCggVGhyb3dhYmxlIHQgKSB7CiAgICAgICAgICAgICBpZiAoZXhwZWN0ZWRUb1N1Y2NlZWQpIHsKICAgICAgICAgICAgICAgICB0LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgfQpAQCAtMjAzLDcgKzIwMyw3IEBACiAKICAgICAgICAgICAgIGlmIChleHBlY3RlZFRvU3VjY2VlZCkgewogCi0gICAgICAgICAgICAgICAgcDIgPSBuZXcgV2ViUmVzb3VyY2VQZXJtaXNzaW9uKHAxLmdldE5hbWUoKSxwMS5nZXRBY3Rpb25zKCkpOyAKKyAgICAgICAgICAgICAgICBwMiA9IG5ldyBXZWJSZXNvdXJjZVBlcm1pc3Npb24ocDEuZ2V0TmFtZSgpLHAxLmdldEFjdGlvbnMoKSk7CiAKICAgICAgICAgICAgICAgICBpZiAoIXAxLmVxdWFscyhwMikpIHsKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CkBAIC0yMjEsNyArMjIxLDcgQEAKICAgICAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICB9IGNhdGNoKCBUaHJvd2FibGUgdCApIHsgCisgICAgICAgIH0gY2F0Y2goIFRocm93YWJsZSB0ICkgewogCiAgICAgICAgICAgICBpZiAoZXhwZWN0ZWRUb1N1Y2NlZWQpIHsKICAgICAgICAgICAgICAgICB0LnByaW50U3RhY2tUcmFjZSgpOwpAQCAtMjUwLDcgKzI1MCw3IEBACiAKICAgICAgICAgICAgIGlmIChleHBlY3RlZFRvU3VjY2VlZCkgewogCi0gICAgICAgICAgICAgICAgcDIgPSBuZXcgV2ViUm9sZVJlZlBlcm1pc3Npb24ocDEuZ2V0TmFtZSgpLHAxLmdldEFjdGlvbnMoKSk7IAorICAgICAgICAgICAgICAgIHAyID0gbmV3IFdlYlJvbGVSZWZQZXJtaXNzaW9uKHAxLmdldE5hbWUoKSxwMS5nZXRBY3Rpb25zKCkpOwogCiAgICAgICAgICAgICAgICAgaWYgKCFwMS5lcXVhbHMocDIpKSB7CiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwpAQCAtMjY4LDcgKzI2OCw3IEBACiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgfSBjYXRjaCggVGhyb3dhYmxlIHQgKSB7IAorICAgICAgICB9IGNhdGNoKCBUaHJvd2FibGUgdCApIHsKIAogICAgICAgICAgICAgaWYgKGV4cGVjdGVkVG9TdWNjZWVkKSB7CiAgICAgICAgICAgICAgICAgdC5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTI5NSw3ICsyOTUsNyBAQAogCiAgICAgICAgICAgICBpZiAoZXhwZWN0ZWRUb1N1Y2NlZWQpIHsKIAotICAgICAgICAgICAgICAgIHAyID0gbmV3IFdlYlVzZXJEYXRhUGVybWlzc2lvbihwMS5nZXROYW1lKCkscDEuZ2V0QWN0aW9ucygpKTsgCisgICAgICAgICAgICAgICAgcDIgPSBuZXcgV2ViVXNlckRhdGFQZXJtaXNzaW9uKHAxLmdldE5hbWUoKSxwMS5nZXRBY3Rpb25zKCkpOwogCiAgICAgICAgICAgICAgICAgaWYgKCFwMS5lcXVhbHMocDIpKSB7CiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwpAQCAtMzEzLDcgKzMxMyw3IEBACiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgfSBjYXRjaCggVGhyb3dhYmxlIHQgKSB7IAorICAgICAgICB9IGNhdGNoKCBUaHJvd2FibGUgdCApIHsKIAogICAgICAgICAgICAgaWYgKGV4cGVjdGVkVG9TdWNjZWVkKSB7CiAgICAgICAgICAgICAgICAgdC5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTMzOCw3ICszMzgsNyBAQAogICAgICAgICAgICAgICAgIChVUkxQYXR0ZXJuLG1ha2VXVURBY3Rpb25zKG1ldGhvZHMsdHJhbnNwb3J0VHlwZSkpOwogCiAgICAgICAgICAgICBpZiAoZXhwZWN0ZWRUb1N1Y2NlZWQpIHsKLSAgICAgICAgICAgICAgICBwMiA9IG5ldyBXZWJVc2VyRGF0YVBlcm1pc3Npb24ocDEuZ2V0TmFtZSgpLHAxLmdldEFjdGlvbnMoKSk7IAorICAgICAgICAgICAgICAgIHAyID0gbmV3IFdlYlVzZXJEYXRhUGVybWlzc2lvbihwMS5nZXROYW1lKCkscDEuZ2V0QWN0aW9ucygpKTsKICAgICAgICAgICAgICAgICBpZiAoIXAxLmVxdWFscyhwMikpIHsKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJwICE9IHBcblx0IiArIHAxICsgIlxuXHQiICsgcDIpOwpAQCAtMzUxLDcgKzM1MSw3IEBACiAgICAgICAgICAgICAgICAgZGVidWcoInVuZXhwZWN0ZWQgc3VjY2Vzc1x0IiArIHAxKTsKICAgICAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSBjYXRjaCggVGhyb3dhYmxlIHQgKSB7IAorICAgICAgICB9IGNhdGNoKCBUaHJvd2FibGUgdCApIHsKICAgICAgICAgICAgIGlmIChleHBlY3RlZFRvU3VjY2VlZCkgewogICAgICAgICAgICAgICAgIHQucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB9CkBAIC0zNjYsNyArMzY2LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGRvUGVybWlzc2lvbkltcGxpZXMgKGJvb2xlYW4gZXhwZWN0ZWRSZXN1bHQsCi0gICAgICAgICAgICBQZXJtaXNzaW9uIHRoaXNQLCBQZXJtaXNzaW9uIHApIHsgCisgICAgICAgICAgICBQZXJtaXNzaW9uIHRoaXNQLCBQZXJtaXNzaW9uIHApIHsKICAgICAgICAgYm9vbGVhbiByZXN1bHQgPSB0cnVlOwogICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSAiZG9QZXJtaXNzaW9uSW1wbGllczoiICsKICAgICAgICAgICAgIGV4cGVjdGVkUmVzdWx0ICsgIi0iICsgdGhpc1AgKyAiLSIgKyBwOwpAQCAtMzc3LDE4ICszNzcsMTggQEAKICAgICAgICAgICAgIGlmICh0aGlzUC5pbXBsaWVzKHApICE9IGV4cGVjdGVkUmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgZGVidWcoCiAgICAgICAgICAgICAgICAgICAgIChleHBlY3RlZFJlc3VsdCA/ICJ1bmV4cGVjdGVkIGZhaWx1cmU6IiA6InVuZXhwZWN0ZWQgc3VjY2VzczoiKQotICAgICAgICAgICAgICAgICAgICAgKyBwcmludFAocCkgKyAoZXhwZWN0ZWRSZXN1bHQgPyIgbm90IGltcGxpZWQgYnk6IjoiIGltcGxpZWQgYnk6IikgKyAKKyAgICAgICAgICAgICAgICAgICAgICsgcHJpbnRQKHApICsgKGV4cGVjdGVkUmVzdWx0ID8iIG5vdCBpbXBsaWVkIGJ5OiI6IiBpbXBsaWVkIGJ5OiIpICsKICAgICAgICAgICAgICAgICAgICAgIHByaW50UCh0aGlzUCkpOwogICAgICAgICAgICAgICAgIGRlYnVnKCAiLS0gUGVybWlzc2lvbiBpbXBsaWVzIFRlc3QgZmFpbGVkKG5vdCBpbXBsaWVkKS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKICAgICAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZGVidWcocHJpbnRQKHApICsgCi0gICAgICAgICAgICAgICAgICAgIChleHBlY3RlZFJlc3VsdCA/ICIgaW1wbGllZCBieToiOiIgbm90IGltcGxpZWQgYnk6IikgKyAKKyAgICAgICAgICAgICAgICBkZWJ1ZyhwcmludFAocCkgKworICAgICAgICAgICAgICAgICAgICAoZXhwZWN0ZWRSZXN1bHQgPyAiIGltcGxpZWQgYnk6IjoiIG5vdCBpbXBsaWVkIGJ5OiIpICsKICAgICAgICAgICAgICAgICAgICAgcHJpbnRQKHRoaXNQKSk7CiAgICAgICAgICAgICAgICAgZGVidWcoICItLSBQZXJtaXNzaW9uIGltcGxpZXMgVGVzdCBTdWNjZWVkZWQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gY2F0Y2goIFRocm93YWJsZSB0ICkgeyAKKyAgICAgICAgfSBjYXRjaCggVGhyb3dhYmxlIHQgKSB7CiAgICAgICAgICAgICBkZWJ1ZygidW5leHBlY3RlZCBleGNlcHRpb24iKTsKICAgICAgICAgICAgIHQucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBkZWJ1ZyggIi0tIFBlcm1pc3Npb24gaW1wbGllcyBUZXN0IGZhaWxlZChleGNlcHRpb24pLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CkBAIC00MTIsMjUgKzQxMiwyNSBAQAogICAgICAgICAgICAgICAgIGRlYnVnKCAiLS0gSHR0cE1ldGhvZFNwZWMgaW1wbGllcyBUZXN0IGZhaWxlZChub3QgaW1wbGllZCktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGRlYnVnKHRoYXRTICsgCisgICAgICAgICAgICAgICAgZGVidWcodGhhdFMgKwogICAgICAgICAgICAgICAgICAgICAoZXhwZWN0ZWRSZXN1bHQgPyAiIGltcGxpZWQgYnk6IjoiIG5vdCBpbXBsaWVkIGJ5OiIpICsgdGhpc1MpOwogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICghdGhpc1MuaW1wbGllcyh0aGlzUykpIHsKLSAgICAgICAgICAgICAgICBkZWJ1ZyggInVuZXhwZWN0ZWQgZmFpbHVyZToiIAorICAgICAgICAgICAgICAgIGRlYnVnKCAidW5leHBlY3RlZCBmYWlsdXJlOiIKICAgICAgICAgICAgICAgICAgICAgKyB0aGlzUyArICIgbm90IGltcGxpZWQgYnk6ICIgKyAgdGhpc1MpOwogICAgICAgICAgICAgICAgIGRlYnVnKCAiLS0gSHR0cE1ldGhvZFNwZWMgaW1wbGllcyBUZXN0IGZhaWxlZChub3QgaW1wbGllZCktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICghdGhhdFMuaW1wbGllcyh0aGF0UykpIHsKLSAgICAgICAgICAgICAgICBkZWJ1ZyggInVuZXhwZWN0ZWQgZmFpbHVyZToiIAorICAgICAgICAgICAgICAgIGRlYnVnKCAidW5leHBlY3RlZCBmYWlsdXJlOiIKICAgICAgICAgICAgICAgICAgICAgKyB0aGF0UyArICIgbm90IGltcGxpZWQgYnk6ICIgKyB0aGF0Uyk7CiAgICAgICAgICAgICAgICAgZGVidWcoICItLSBIdHRwTWV0aG9kU3BlYyBpbXBsaWVzIFRlc3QgZmFpbGVkKG5vdCBpbXBsaWVkKS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKICAgICAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSBjYXRjaCggVGhyb3dhYmxlIHQgKSB7IAorICAgICAgICB9IGNhdGNoKCBUaHJvd2FibGUgdCApIHsKICAgICAgICAgICAgIGRlYnVnKCJ1bmV4cGVjdGVkIGV4Y2VwdGlvbiIpOwogICAgICAgICAgICAgdC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIGRlYnVnKCAiLS0gSHR0cE1ldGhvZFNwZWMgaW1wbGllcyBUZXN0IGZhaWxlZChleGNlcHRpb24pLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CkBAIC00NDEsMTEgKzQ0MSwxMSBAQAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKCBTdHJpbmdbXSBhcmdzICkgewogICAgICAgICBib29sZWFuIHJlc3VsdCA9IHRydWU7CiAKLSAgICAgICAgU3RyaW5nIHRBcnJheVtdID0geyAKLSAgICAgICAgICAgIG51bGwsIAotICAgICAgICAgICAgIjpOT05FIiwgCi0gICAgICAgICAgICAiOklOVEVHUkFMIiwgCi0gICAgICAgICAgICAiOkNPTkZJREVOVElBTCIgCisgICAgICAgIFN0cmluZyB0QXJyYXlbXSA9IHsKKyAgICAgICAgICAgIG51bGwsCisgICAgICAgICAgICAiOk5PTkUiLAorICAgICAgICAgICAgIjpJTlRFR1JBTCIsCisgICAgICAgICAgICAiOkNPTkZJREVOVElBTCIKICAgICAgICAgfTsKIAogICAgICAgICBTdHJpbmcgbUFycmF5W10gPSB7CkBAIC00OTEsMTMgKzQ5MSwxMyBAQAogICAgICAgICAgICAgIi9hL2MiLAogICAgICAgICAgICAgIi9hL2IvYy5qc3AiLAogICAgICAgICAgICAgIi9hL2MvKjovYS9jIiwKLSAgICAgICAgICAgICIvYS8qOi9hL2M6L2EvYi9jLmpzcCIsIAorICAgICAgICAgICAgIi9hLyo6L2EvYzovYS9iL2MuanNwIiwKICAgICAgICAgICAgICIvKjovYS9jOi9hL2IvYy5qc3A6L2EvYy8qOi9hLyoiLAogICAgICAgICAgICAgIiouanNwOi9hL2MvKjovYS8qOi9hL2IvYy5qc3AiLAogICAgICAgICAgICAgIiouYXNwOi9hL2MvKjovYS8qIiwKICAgICAgICAgICAgICIvOi9hL2M6L2EvYi9jLmpzcDovYS9jLyo6L2EvKjoqLmpzcDoqLmFzcCIKICAgICAgICAgfTsKLSAKKwogICAgICAgICBmb3IgKGludCBpPTA7IGk8bXNBcnJheS5sZW5ndGg7IGkrKykgewogCiAgICAgICAgICAgICBIdHRwTWV0aG9kU3BlYyBzID0gSHR0cE1ldGhvZFNwZWMuZ2V0U3BlYyhtc0FycmF5W2ldKTsKQEAgLTUwNiw4ICs1MDYsOCBAQAogCiAgICAgICAgICAgICBTdHJpbmcgYWN0aW9ucyA9IHMuZ2V0QWN0aW9ucygpOwogCi0gICAgICAgICAgICBkZWJ1ZygiaW5wdXQgYWN0aW9uczogIiArIG1zQXJyYXlbaV0gKyAKLSAgICAgICAgICAgICAgICAgIiBoYXNoQ29kZTogIiArIGhDb2RlICsgCisgICAgICAgICAgICBkZWJ1ZygiaW5wdXQgYWN0aW9uczogIiArIG1zQXJyYXlbaV0gKworICAgICAgICAgICAgICAgICAiIGhhc2hDb2RlOiAiICsgaENvZGUgKwogICAgICAgICAgICAgICAgICAiIGFjdGlvbnM6IiArIGFjdGlvbnMpOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NtcjgvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NtcjgvYnVpbGQucHJvcGVydGllcwppbmRleCAwOWQxNmQ2Li4yNDFhZjhmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjbXI4L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY21yOC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqYWNjbXI4Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY21yOC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjbXI4L2J1aWxkLnhtbAppbmRleCBmNjE1YTBjLi41YWQwODhiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjbXI4L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjbXI4L2J1aWxkLnhtbApAQCAtMjUsMTQgKzI1LDE0IEBACiBdPgogCiA8cHJvamVjdCBuYW1lPSJqYWNjbXI4IiBkZWZhdWx0PSJ1c2FnZSIgYmFzZWRpcj0iLiI+Ci0gIAorCiAgICZjb21tb25TZXR1cDsKICAgJmNvbW1vbkJ1aWxkOwogICAmdGVzdHByb3BlcnRpZXM7CiAgICZjb21tb25TZWN1cml0eTsKLSAgCisKICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImNsZWFuLCBzZXR1cCwgYnVpbGQsIGRlcGxveSwgcnVuLCB1bmRlcGxveSwgdW5zZXR1cCIvPgotICAKKwogICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtdXNlci1jb21tb24iPgogICAgICAgPHBhcmFtIG5hbWU9InVzZXIiIHZhbHVlPSJqYWNjdXNlciIvPgpAQCAtNTcsNyArNTcsNyBAQAogICAgICAgPGFyZyB2YWx1ZT0ib3RoZXJ1c2VyIi8+CiAgICAgPC9qYXZhPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJ1bnNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtdXNlci1jb21tb24iPgogICAgICAgPHBhcmFtIG5hbWU9InVzZXIiIHZhbHVlPSJqYWNjdXNlciIvPgpAQCAtNjYsMTQgKzY2LDE0IEBACiAgICAgICA8cGFyYW0gbmFtZT0idXNlciIgdmFsdWU9Im90aGVydXNlciIvPgogICAgIDwvYW50Y2FsbD4KICAgPC90YXJnZXQ+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJ3ZWIiLz4KQEAgLTg2LDE1ICs4NiwxNSBAQAogICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgogICAgIDwvYW50Y2FsbD4KLSAgICAKKwogICAgIDxhbnRjYWxsIHRhcmdldD0iZWpiLWphci1jb21tb24iPgogICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiB2YWx1ZT0iKiovSGVsbG8qKi5jbGFzcyIvPgogICAgIDwvYW50Y2FsbD4KIAotICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+IAotICAgIDxjb3B5IGZpbGU9IiR7YXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIvPiAKLSAgICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC1hcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2dsYXNzZmlzaC1hcHBsaWNhdGlvbi54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIvPiAKLSAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciI+IAorICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CisgICAgPGNvcHkgZmlsZT0iJHthcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CisgICAgPGNvcHkgZmlsZT0iJHtnbGFzc2Zpc2gtYXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9nbGFzc2Zpc2gtYXBwbGljYXRpb24ueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KKyAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciI+CiAgICAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSI+CiAgICAgICAgIDxpbmNsdWRlIG5hbWU9IiouamFyIi8+CiAgICAgICAgIDxpbmNsdWRlIG5hbWU9Iioud2FyIi8+CkBAIC0xMDMsMTMgKzEwMywxMyBAQAogICAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiLz4KICAgICAgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvZ2xhc3NmaXNoLWFwcGxpY2F0aW9uLnhtbCIvPgogICAgICAgPC9maWxlc2V0PgotICAgIDwvamFyPiAgIAorICAgIDwvamFyPgogCiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY2xpZW50Ii8+CiAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgPC90YXJnZXQ+CkBAIC0xMTcsNyArMTE3LDcgQEAKICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgogICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NtcjgvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY21yOC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggNGMyYzI1Ny4uMzViMTc1NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY21yOC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY21yOC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI0LDQ4MyArMjQsNDgzIEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci5TaW1wbGVSZXBvcnRlckFkYXB0ZXI7CiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewotCXByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwotCXByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0U3VpdGUgPSAiU2VjdXJpdHk6OkpBQ0NNUjgiOwotCXByaXZhdGUgc3RhdGljIFN0cmluZyBjb250ZXh0UGF0aCA9ICIvamFjY21yOCI7Ci0JCi0JcHJpdmF0ZSBTdHJpbmcgaG9zdDsKLQlwcml2YXRlIFN0cmluZyBwb3J0OwotCXByaXZhdGUgU3RyaW5nIHVzZXJuYW1lOwotCXByaXZhdGUgU3RyaW5nIHBhc3N3b3JkOwotCXByaXZhdGUgU3RyaW5nIHJvbGVuYW1lOwotCXByaXZhdGUgU3RyaW5nIG90aGVydXNlcjsKLQlwcml2YXRlIFN0cmluZyBlamJtb2RlID0gIk5vbmUiOworICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0U3VpdGUgPSAiU2VjdXJpdHk6OkpBQ0NNUjgiOworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBjb250ZXh0UGF0aCA9ICIvamFjY21yOCI7CiAKLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JCXN0YXQuYWRkRGVzY3JpcHRpb24odGVzdFN1aXRlKTsKLQkJQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7Ci0JCWNsaWVudC5kb1Rlc3RzKCk7Ci0JCXN0YXQucHJpbnRTdW1tYXJ5KCk7Ci0JfQorICAgIHByaXZhdGUgU3RyaW5nIGhvc3Q7CisgICAgcHJpdmF0ZSBTdHJpbmcgcG9ydDsKKyAgICBwcml2YXRlIFN0cmluZyB1c2VybmFtZTsKKyAgICBwcml2YXRlIFN0cmluZyBwYXNzd29yZDsKKyAgICBwcml2YXRlIFN0cmluZyByb2xlbmFtZTsKKyAgICBwcml2YXRlIFN0cmluZyBvdGhlcnVzZXI7CisgICAgcHJpdmF0ZSBTdHJpbmcgZWpibW9kZSA9ICJOb25lIjsKIAotCXB1YmxpYyBDbGllbnQoU3RyaW5nW10gYXJncykgewotCQlob3N0ID0gYXJnc1swXTsKLQkJcG9ydCA9IGFyZ3NbMV07Ci0JCXVzZXJuYW1lID0gYXJnc1syXTsKLQkJcGFzc3dvcmQgPSBhcmdzWzNdOwotCQlyb2xlbmFtZSA9IGFyZ3NbNF07Ci0JCW90aGVydXNlciA9IGFyZ3NbNV07Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiICAgICAgSG9zdDogIiArIGhvc3QpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgIFBvcnQ6ICIgKyBwb3J0KTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCIgIFVzZXJuYW1lOiAiICsgdXNlcm5hbWUpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIiAgUm9sZW5hbWU6ICIgKyByb2xlbmFtZSk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiT3RoZXIgVXNlcjogIiArIG90aGVydXNlcik7Ci0JfQorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbih0ZXN0U3VpdGUpOworICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKKyAgICAgICAgY2xpZW50LmRvVGVzdHMoKTsKKyAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICB9CiAKLQlwdWJsaWMgdm9pZCBkb1Rlc3RzKCkgewotCQkvLyBVc2UgdGhlIHN0YXRlZnVsIEVKQiBpbnNpZGUgdGhlIHNlcnZsZXQKLQkJLy8gVGhlIHN0YXRlZnVsIEVKQiB1c2VzIGFubm90YXRpb25zIHRvIHByb3RlY3QgdGhlIEVKQgotCQllamJtb2RlID0gInN0YXRlZnVsIjsKLQkJdGVzdEFueUF1dGhVc2VyKCk7Ci0JCXRlc3RBbnlBdXRoVXNlck90aGVyKCk7Ci0JCXRlc3RBbnlBdXRoVXNlck5vbmUoKTsKLQkJdGVzdERlbnlVbmNvdmVyZWQoKTsKLQkJdGVzdERlbnlVbmNvdmVyZWRPdGhlcigpOwotCQl0ZXN0RGVueVVuY292ZXJlZE5vbmUoKTsKLQkJdGVzdFN0YXIoKTsKLQkJdGVzdFN0YXJPdGhlcigpOwotCQl0ZXN0U3Rhck5vbmUoKTsKLQkJdGVzdFNlcnZsZXQoKTsKLQkJdGVzdFNlcnZsZXRPdGhlcigpOwotCQl0ZXN0U2VydmxldE5vbmUoKTsKLQkJdGVzdEF1dGhVc2VyKCk7Ci0JCXRlc3RBdXRoVXNlck90aGVyKCk7Ci0JCXRlc3RBdXRoVXNlck5vbmUoKTsKKyAgICBwdWJsaWMgQ2xpZW50KFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgaG9zdCA9IGFyZ3NbMF07CisgICAgICAgIHBvcnQgPSBhcmdzWzFdOworICAgICAgICB1c2VybmFtZSA9IGFyZ3NbMl07CisgICAgICAgIHBhc3N3b3JkID0gYXJnc1szXTsKKyAgICAgICAgcm9sZW5hbWUgPSBhcmdzWzRdOworICAgICAgICBvdGhlcnVzZXIgPSBhcmdzWzVdOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgIEhvc3Q6ICIgKyBob3N0KTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgICAgICBQb3J0OiAiICsgcG9ydCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICBVc2VybmFtZTogIiArIHVzZXJuYW1lKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgIFJvbGVuYW1lOiAiICsgcm9sZW5hbWUpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk90aGVyIFVzZXI6ICIgKyBvdGhlcnVzZXIpOworICAgIH0KIAotCQkvLyBVc2UgdGhlIHN0YXRlbGVzcyBFSkIgaW5zaWRlIHRoZSBzZXJ2bGV0Ci0JCS8vIFRoZSBzdGF0ZWxlc3MgRUpCIHVzZXMgdGhlIGRlcGxveW1lbnQgZGVzY3JpcHRvciB0byBwcm90ZWN0IHRoZSBFSkIKLQkJLy8gT25seSByZXBlYXQgdGVzdHMgdGhhdCBhY3R1YWxseSBjYW4gaW52b2tlIHRoZSBzZXJ2bGV0Ci0JCWVqYm1vZGUgPSAic3RhdGVsZXNzIjsKLQkJdGVzdEFueUF1dGhVc2VyKCk7Ci0JCXRlc3RBbnlBdXRoVXNlck90aGVyKCk7Ci0JCXRlc3RTdGFyKCk7Ci0JCXRlc3RBdXRoVXNlcigpOwotCQl0ZXN0U2VydmxldCgpOwotCQl0ZXN0U2VydmxldE90aGVyKCk7Ci0JCXRlc3RTZXJ2bGV0Tm9uZSgpOwotCX0KKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3RzKCkgeworICAgICAgICAvLyBVc2UgdGhlIHN0YXRlZnVsIEVKQiBpbnNpZGUgdGhlIHNlcnZsZXQKKyAgICAgICAgLy8gVGhlIHN0YXRlZnVsIEVKQiB1c2VzIGFubm90YXRpb25zIHRvIHByb3RlY3QgdGhlIEVKQgorICAgICAgICBlamJtb2RlID0gInN0YXRlZnVsIjsKKyAgICAgICAgdGVzdEFueUF1dGhVc2VyKCk7CisgICAgICAgIHRlc3RBbnlBdXRoVXNlck90aGVyKCk7CisgICAgICAgIHRlc3RBbnlBdXRoVXNlck5vbmUoKTsKKyAgICAgICAgdGVzdERlbnlVbmNvdmVyZWQoKTsKKyAgICAgICAgdGVzdERlbnlVbmNvdmVyZWRPdGhlcigpOworICAgICAgICB0ZXN0RGVueVVuY292ZXJlZE5vbmUoKTsKKyAgICAgICAgdGVzdFN0YXIoKTsKKyAgICAgICAgdGVzdFN0YXJPdGhlcigpOworICAgICAgICB0ZXN0U3Rhck5vbmUoKTsKKyAgICAgICAgdGVzdFNlcnZsZXQoKTsKKyAgICAgICAgdGVzdFNlcnZsZXRPdGhlcigpOworICAgICAgICB0ZXN0U2VydmxldE5vbmUoKTsKKyAgICAgICAgdGVzdEF1dGhVc2VyKCk7CisgICAgICAgIHRlc3RBdXRoVXNlck90aGVyKCk7CisgICAgICAgIHRlc3RBdXRoVXNlck5vbmUoKTsKIAotCXB1YmxpYyB2b2lkIHRlc3RBbnlBdXRoVXNlcigpIHsKLQkJU3RyaW5nIHNlcnZsZXQgPSAiL2FueWF1dGh1c2VyIjsKLQkJU3RyaW5nIGRlc2NyaXB0aW9uID0gc2VydmxldCsiLSIrdXNlcm5hbWUrIi0iK2VqYm1vZGU7Ci0JCVN0cmluZ0J1ZmZlciBvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWJvb2xlYW4gc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgMjAwLCB1c2VybmFtZSwgZWpibW9kZSwgb3V0cHV0KTsKLQkJaWYgKCFzdWNjZXNzKSB7Ci0JCQlzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5GQUlMKTsKLQkJCXJldHVybjsKLQkJfQorICAgICAgICAvLyBVc2UgdGhlIHN0YXRlbGVzcyBFSkIgaW5zaWRlIHRoZSBzZXJ2bGV0CisgICAgICAgIC8vIFRoZSBzdGF0ZWxlc3MgRUpCIHVzZXMgdGhlIGRlcGxveW1lbnQgZGVzY3JpcHRvciB0byBwcm90ZWN0IHRoZSBFSkIKKyAgICAgICAgLy8gT25seSByZXBlYXQgdGVzdHMgdGhhdCBhY3R1YWxseSBjYW4gaW52b2tlIHRoZSBzZXJ2bGV0CisgICAgICAgIGVqYm1vZGUgPSAic3RhdGVsZXNzIjsKKyAgICAgICAgdGVzdEFueUF1dGhVc2VyKCk7CisgICAgICAgIHRlc3RBbnlBdXRoVXNlck90aGVyKCk7CisgICAgICAgIHRlc3RTdGFyKCk7CisgICAgICAgIHRlc3RBdXRoVXNlcigpOworICAgICAgICB0ZXN0U2VydmxldCgpOworICAgICAgICB0ZXN0U2VydmxldE90aGVyKCk7CisgICAgICAgIHRlc3RTZXJ2bGV0Tm9uZSgpOworICAgIH0KIAotCQkvLyBDaGVjayByZXN1bHRzIGluIG91dHB1dAotCQlzdWNjZXNzID0gY2hlY2tSZXN1bHRzKG91dHB1dCx0cnVlLHRydWUsdHJ1ZSx0cnVlLHRydWUsdHJ1ZSk7Ci0JCWlmICghc3VjY2VzcykgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJJbmNvcnJlY3QgcmVzdWx0czoiICsgZGVzY3JpcHRpb24pOwotCQkJc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuRkFJTCk7Ci0JCQlyZXR1cm47Ci0JCX0KKyAgICBwdWJsaWMgdm9pZCB0ZXN0QW55QXV0aFVzZXIoKSB7CisgICAgICAgIFN0cmluZyBzZXJ2bGV0ID0gIi9hbnlhdXRodXNlciI7CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IHNlcnZsZXQrIi0iK3VzZXJuYW1lKyItIitlamJtb2RlOworICAgICAgICBTdHJpbmdCdWZmZXIgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBib29sZWFuIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIDIwMCwgdXNlcm5hbWUsIGVqYm1vZGUsIG91dHB1dCk7CisgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuRkFJTCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotCQlzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5QQVNTKTsKLQl9CisgICAgICAgIC8vIENoZWNrIHJlc3VsdHMgaW4gb3V0cHV0CisgICAgICAgIHN1Y2Nlc3MgPSBjaGVja1Jlc3VsdHMob3V0cHV0LHRydWUsdHJ1ZSx0cnVlLHRydWUsdHJ1ZSx0cnVlKTsKKyAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluY29ycmVjdCByZXN1bHRzOiIgKyBkZXNjcmlwdGlvbik7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5GQUlMKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0JcHVibGljIHZvaWQgdGVzdEFueUF1dGhVc2VyT3RoZXIoKSB7Ci0JCVN0cmluZyBzZXJ2bGV0ID0gIi9hbnlhdXRodXNlciI7Ci0JCVN0cmluZyBkZXNjcmlwdGlvbiA9IHNlcnZsZXQrIi0iK290aGVydXNlcisiLSIrZWpibW9kZTsKLQkJU3RyaW5nQnVmZmVyIG91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJYm9vbGVhbiBzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCAyMDAsIG90aGVydXNlciwgZWpibW9kZSwgb3V0cHV0KTsKLQkJaWYgKCFzdWNjZXNzKSB7Ci0JCQlzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5GQUlMKTsKLQkJCXJldHVybjsKLQkJfQorICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5QQVNTKTsKKyAgICB9CiAKLQkJLy8gQ2hlY2sgcmVzdWx0cyBpbiBvdXRwdXQKLQkJc3VjY2VzcyA9IGNoZWNrUmVzdWx0cyhvdXRwdXQsZmFsc2UsdHJ1ZSx0cnVlLGZhbHNlLGZhbHNlLHRydWUpOwotCQlpZiAoIXN1Y2Nlc3MpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiSW5jb3JyZWN0IHJlc3VsdHM6IiArIGRlc2NyaXB0aW9uKTsKLQkJCXN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LkZBSUwpOwotCQkJcmV0dXJuOwotCQl9CisgICAgcHVibGljIHZvaWQgdGVzdEFueUF1dGhVc2VyT3RoZXIoKSB7CisgICAgICAgIFN0cmluZyBzZXJ2bGV0ID0gIi9hbnlhdXRodXNlciI7CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IHNlcnZsZXQrIi0iK290aGVydXNlcisiLSIrZWpibW9kZTsKKyAgICAgICAgU3RyaW5nQnVmZmVyIG91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgYm9vbGVhbiBzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCAyMDAsIG90aGVydXNlciwgZWpibW9kZSwgb3V0cHV0KTsKKyAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5GQUlMKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0JCXN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LlBBU1MpOwotCX0KKyAgICAgICAgLy8gQ2hlY2sgcmVzdWx0cyBpbiBvdXRwdXQKKyAgICAgICAgc3VjY2VzcyA9IGNoZWNrUmVzdWx0cyhvdXRwdXQsZmFsc2UsdHJ1ZSx0cnVlLGZhbHNlLGZhbHNlLHRydWUpOworICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW5jb3JyZWN0IHJlc3VsdHM6IiArIGRlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LkZBSUwpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKLQlwdWJsaWMgdm9pZCB0ZXN0QW55QXV0aFVzZXJOb25lKCkgewotCQlTdHJpbmcgc2VydmxldCA9ICIvYW55YXV0aHVzZXIiOwotCQlTdHJpbmcgZGVzY3JpcHRpb24gPSBzZXJ2bGV0KyItLSIrZWpibW9kZTsKLQkJU3RyaW5nQnVmZmVyIG91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJYm9vbGVhbiBzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCA0MDEsIG51bGwsIGVqYm1vZGUsIG91dHB1dCk7Ci0JCWlmICghc3VjY2VzcykgewotCQkJc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuRkFJTCk7Ci0JCQlyZXR1cm47Ci0JCX0KKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuUEFTUyk7CisgICAgfQogCi0JCS8vIE5vIHJlc3VsdHMgdG8gY2hlY2shCi0JCXN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LlBBU1MpOwotCX0KKyAgICBwdWJsaWMgdm9pZCB0ZXN0QW55QXV0aFVzZXJOb25lKCkgeworICAgICAgICBTdHJpbmcgc2VydmxldCA9ICIvYW55YXV0aHVzZXIiOworICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSBzZXJ2bGV0KyItLSIrZWpibW9kZTsKKyAgICAgICAgU3RyaW5nQnVmZmVyIG91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgYm9vbGVhbiBzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCA0MDEsIG51bGwsIGVqYm1vZGUsIG91dHB1dCk7CisgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuRkFJTCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotCXB1YmxpYyB2b2lkIHRlc3RBdXRoVXNlcigpIHsKLQkJU3RyaW5nIHNlcnZsZXQgPSAiL2F1dGh1c2VyIjsKLQkJU3RyaW5nIGRlc2NyaXB0aW9uID0gc2VydmxldCsiLSIrdXNlcm5hbWUrIi0iK2VqYm1vZGU7Ci0JCVN0cmluZ0J1ZmZlciBvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWJvb2xlYW4gc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgMjAwLCB1c2VybmFtZSwgZWpibW9kZSwgb3V0cHV0KTsKLQkJaWYgKCFzdWNjZXNzKSB7Ci0JCQlzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5GQUlMKTsKLQkJCXJldHVybjsKLQkJfQorICAgICAgICAvLyBObyByZXN1bHRzIHRvIGNoZWNrIQorICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5QQVNTKTsKKyAgICB9CiAKLQkJLy8gQ2hlY2sgcmVzdWx0cyBpbiBvdXRwdXQKLQkJc3VjY2VzcyA9IGNoZWNrUmVzdWx0cyhvdXRwdXQsdHJ1ZSx0cnVlLHRydWUsdHJ1ZSx0cnVlLHRydWUpOwotCQlpZiAoIXN1Y2Nlc3MpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiSW5jb3JyZWN0IHJlc3VsdHM6IiArIGRlc2NyaXB0aW9uKTsKLQkJCXN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LkZBSUwpOwotCQkJcmV0dXJuOwotCQl9CisgICAgcHVibGljIHZvaWQgdGVzdEF1dGhVc2VyKCkgeworICAgICAgICBTdHJpbmcgc2VydmxldCA9ICIvYXV0aHVzZXIiOworICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSBzZXJ2bGV0KyItIit1c2VybmFtZSsiLSIrZWpibW9kZTsKKyAgICAgICAgU3RyaW5nQnVmZmVyIG91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgYm9vbGVhbiBzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCAyMDAsIHVzZXJuYW1lLCBlamJtb2RlLCBvdXRwdXQpOworICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LkZBSUwpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKLQkJc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuUEFTUyk7Ci0JfQorICAgICAgICAvLyBDaGVjayByZXN1bHRzIGluIG91dHB1dAorICAgICAgICBzdWNjZXNzID0gY2hlY2tSZXN1bHRzKG91dHB1dCx0cnVlLHRydWUsdHJ1ZSx0cnVlLHRydWUsdHJ1ZSk7CisgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbmNvcnJlY3QgcmVzdWx0czoiICsgZGVzY3JpcHRpb24pOworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuRkFJTCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotCXB1YmxpYyB2b2lkIHRlc3RBdXRoVXNlck90aGVyKCkgewotCQlTdHJpbmcgc2VydmxldCA9ICIvYXV0aHVzZXIiOwotCQlTdHJpbmcgZGVzY3JpcHRpb24gPSBzZXJ2bGV0KyItIitvdGhlcnVzZXIrIi0iK2VqYm1vZGU7Ci0JCVN0cmluZ0J1ZmZlciBvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWJvb2xlYW4gc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgNDAzLCBvdGhlcnVzZXIsIGVqYm1vZGUsIG91dHB1dCk7Ci0JCWlmICghc3VjY2VzcykgewotCQkJc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuRkFJTCk7Ci0JCQlyZXR1cm47Ci0JCX0KKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuUEFTUyk7CisgICAgfQogCi0JCS8vIE5vIHJlc3VsdHMgdG8gY2hlY2shCi0JCXN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LlBBU1MpOwotCX0KKyAgICBwdWJsaWMgdm9pZCB0ZXN0QXV0aFVzZXJPdGhlcigpIHsKKyAgICAgICAgU3RyaW5nIHNlcnZsZXQgPSAiL2F1dGh1c2VyIjsKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gc2VydmxldCsiLSIrb3RoZXJ1c2VyKyItIitlamJtb2RlOworICAgICAgICBTdHJpbmdCdWZmZXIgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBib29sZWFuIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIDQwMywgb3RoZXJ1c2VyLCBlamJtb2RlLCBvdXRwdXQpOworICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LkZBSUwpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKLQlwdWJsaWMgdm9pZCB0ZXN0QXV0aFVzZXJOb25lKCkgewotCQlTdHJpbmcgc2VydmxldCA9ICIvYXV0aHVzZXIiOwotCQlTdHJpbmcgZGVzY3JpcHRpb24gPSBzZXJ2bGV0KyItLSIrZWpibW9kZTsKLQkJU3RyaW5nQnVmZmVyIG91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJYm9vbGVhbiBzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCA0MDEsIG51bGwsIGVqYm1vZGUsIG91dHB1dCk7Ci0JCWlmICghc3VjY2VzcykgewotCQkJc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuRkFJTCk7Ci0JCQlyZXR1cm47Ci0JCX0KKyAgICAgICAgLy8gTm8gcmVzdWx0cyB0byBjaGVjayEKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuUEFTUyk7CisgICAgfQogCi0JCS8vIE5vIHJlc3VsdHMgdG8gY2hlY2shCi0JCXN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LlBBU1MpOwotCX0KKyAgICBwdWJsaWMgdm9pZCB0ZXN0QXV0aFVzZXJOb25lKCkgeworICAgICAgICBTdHJpbmcgc2VydmxldCA9ICIvYXV0aHVzZXIiOworICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSBzZXJ2bGV0KyItLSIrZWpibW9kZTsKKyAgICAgICAgU3RyaW5nQnVmZmVyIG91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgYm9vbGVhbiBzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCA0MDEsIG51bGwsIGVqYm1vZGUsIG91dHB1dCk7CisgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuRkFJTCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotCXB1YmxpYyB2b2lkIHRlc3RTdGFyKCkgewotCQlTdHJpbmcgc2VydmxldCA9ICIvc3RhciI7Ci0JCVN0cmluZyBkZXNjcmlwdGlvbiA9IHNlcnZsZXQrIi0iK3VzZXJuYW1lKyItIitlamJtb2RlOwotCQlTdHJpbmdCdWZmZXIgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlib29sZWFuIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIDIwMCwgdXNlcm5hbWUsIGVqYm1vZGUsIG91dHB1dCk7Ci0JCWlmICghc3VjY2VzcykgewotCQkJc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuRkFJTCk7Ci0JCQlyZXR1cm47Ci0JCX0KKyAgICAgICAgLy8gTm8gcmVzdWx0cyB0byBjaGVjayEKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuUEFTUyk7CisgICAgfQogCi0JCS8vIENoZWNrIHJlc3VsdHMgaW4gb3V0cHV0Ci0JCXN1Y2Nlc3MgPSBjaGVja1Jlc3VsdHMob3V0cHV0LHRydWUsdHJ1ZSx0cnVlLHRydWUsdHJ1ZSx0cnVlKTsKLQkJaWYgKCFzdWNjZXNzKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkluY29ycmVjdCByZXN1bHRzOiIgKyBkZXNjcmlwdGlvbik7Ci0JCQlzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5GQUlMKTsKLQkJCXJldHVybjsKLQkJfQorICAgIHB1YmxpYyB2b2lkIHRlc3RTdGFyKCkgeworICAgICAgICBTdHJpbmcgc2VydmxldCA9ICIvc3RhciI7CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IHNlcnZsZXQrIi0iK3VzZXJuYW1lKyItIitlamJtb2RlOworICAgICAgICBTdHJpbmdCdWZmZXIgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBib29sZWFuIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIDIwMCwgdXNlcm5hbWUsIGVqYm1vZGUsIG91dHB1dCk7CisgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuRkFJTCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotCQlzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5QQVNTKTsKLQl9CisgICAgICAgIC8vIENoZWNrIHJlc3VsdHMgaW4gb3V0cHV0CisgICAgICAgIHN1Y2Nlc3MgPSBjaGVja1Jlc3VsdHMob3V0cHV0LHRydWUsdHJ1ZSx0cnVlLHRydWUsdHJ1ZSx0cnVlKTsKKyAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluY29ycmVjdCByZXN1bHRzOiIgKyBkZXNjcmlwdGlvbik7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5GQUlMKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0JcHVibGljIHZvaWQgdGVzdFN0YXJPdGhlcigpIHsKLQkJU3RyaW5nIHNlcnZsZXQgPSAiL3N0YXIiOwotCQlTdHJpbmcgZGVzY3JpcHRpb24gPSBzZXJ2bGV0KyItIitvdGhlcnVzZXIrIi0iK2VqYm1vZGU7Ci0JCVN0cmluZ0J1ZmZlciBvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWJvb2xlYW4gc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgNDAzLCBvdGhlcnVzZXIsIGVqYm1vZGUsIG91dHB1dCk7Ci0JCWlmICghc3VjY2VzcykgewotCQkJc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuRkFJTCk7Ci0JCQlyZXR1cm47Ci0JCX0KKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuUEFTUyk7CisgICAgfQogCi0JCS8vIE5vIHJlc3VsdHMgdG8gY2hlY2shCi0JCXN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LlBBU1MpOwotCX0KKyAgICBwdWJsaWMgdm9pZCB0ZXN0U3Rhck90aGVyKCkgeworICAgICAgICBTdHJpbmcgc2VydmxldCA9ICIvc3RhciI7CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IHNlcnZsZXQrIi0iK290aGVydXNlcisiLSIrZWpibW9kZTsKKyAgICAgICAgU3RyaW5nQnVmZmVyIG91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgYm9vbGVhbiBzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCA0MDMsIG90aGVydXNlciwgZWpibW9kZSwgb3V0cHV0KTsKKyAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5GQUlMKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0JcHVibGljIHZvaWQgdGVzdFN0YXJOb25lKCkgewotCQlTdHJpbmcgc2VydmxldCA9ICIvc3RhciI7Ci0JCVN0cmluZyBkZXNjcmlwdGlvbiA9IHNlcnZsZXQrIi0tIitlamJtb2RlOwotCQlTdHJpbmdCdWZmZXIgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlib29sZWFuIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIDQwMSwgbnVsbCwgZWpibW9kZSwgb3V0cHV0KTsKLQkJaWYgKCFzdWNjZXNzKSB7Ci0JCQlzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5GQUlMKTsKLQkJCXJldHVybjsKLQkJfQorICAgICAgICAvLyBObyByZXN1bHRzIHRvIGNoZWNrIQorICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5QQVNTKTsKKyAgICB9CiAKLQkJLy8gTm8gcmVzdWx0cyB0byBjaGVjayEKLQkJc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuUEFTUyk7Ci0JfQorICAgIHB1YmxpYyB2b2lkIHRlc3RTdGFyTm9uZSgpIHsKKyAgICAgICAgU3RyaW5nIHNlcnZsZXQgPSAiL3N0YXIiOworICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSBzZXJ2bGV0KyItLSIrZWpibW9kZTsKKyAgICAgICAgU3RyaW5nQnVmZmVyIG91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgYm9vbGVhbiBzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCA0MDEsIG51bGwsIGVqYm1vZGUsIG91dHB1dCk7CisgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuRkFJTCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotCXB1YmxpYyB2b2lkIHRlc3RTZXJ2bGV0KCkgewotCQlTdHJpbmcgc2VydmxldCA9ICIvc2VydmxldCI7Ci0JCVN0cmluZyBkZXNjcmlwdGlvbiA9IHNlcnZsZXQrIi0iK3VzZXJuYW1lKyItIitlamJtb2RlOwotCQlTdHJpbmdCdWZmZXIgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlib29sZWFuIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIDIwMCwgdXNlcm5hbWUsIGVqYm1vZGUsIG91dHB1dCk7Ci0JCWlmICghc3VjY2VzcykgewotCQkJc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuRkFJTCk7Ci0JCQlyZXR1cm47Ci0JCX0KKyAgICAgICAgLy8gTm8gcmVzdWx0cyB0byBjaGVjayEKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuUEFTUyk7CisgICAgfQogCi0JCS8vIENoZWNrIHJlc3VsdHMgaW4gb3V0cHV0Ci0JCXN1Y2Nlc3MgPSBjaGVja1Jlc3VsdHMob3V0cHV0LGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlKTsKLQkJaWYgKCFzdWNjZXNzKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkluY29ycmVjdCByZXN1bHRzOiIgKyBkZXNjcmlwdGlvbik7Ci0JCQlzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5GQUlMKTsKLQkJCXJldHVybjsKLQkJfQorICAgIHB1YmxpYyB2b2lkIHRlc3RTZXJ2bGV0KCkgeworICAgICAgICBTdHJpbmcgc2VydmxldCA9ICIvc2VydmxldCI7CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IHNlcnZsZXQrIi0iK3VzZXJuYW1lKyItIitlamJtb2RlOworICAgICAgICBTdHJpbmdCdWZmZXIgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBib29sZWFuIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIDIwMCwgdXNlcm5hbWUsIGVqYm1vZGUsIG91dHB1dCk7CisgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuRkFJTCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBDaGVjayByZXN1bHRzIGluIG91dHB1dAorICAgICAgICBzdWNjZXNzID0gY2hlY2tSZXN1bHRzKG91dHB1dCxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSk7CisgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbmNvcnJlY3QgcmVzdWx0czoiICsgZGVzY3JpcHRpb24pOworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuRkFJTCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotCQlzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5QQVNTKTsKLQl9CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LlBBU1MpOworICAgIH0KIAotCXB1YmxpYyB2b2lkIHRlc3RTZXJ2bGV0T3RoZXIoKSB7Ci0JCVN0cmluZyBzZXJ2bGV0ID0gIi9zZXJ2bGV0IjsKLQkJU3RyaW5nIGRlc2NyaXB0aW9uID0gc2VydmxldCsiLSIrb3RoZXJ1c2VyKyItIitlamJtb2RlOwotCQlTdHJpbmdCdWZmZXIgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlib29sZWFuIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIDIwMCwgb3RoZXJ1c2VyLCBlamJtb2RlLCBvdXRwdXQpOwotCQlpZiAoIXN1Y2Nlc3MpIHsKLQkJCXN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LkZBSUwpOwotCQkJcmV0dXJuOwotCQl9CisgICAgcHVibGljIHZvaWQgdGVzdFNlcnZsZXRPdGhlcigpIHsKKyAgICAgICAgU3RyaW5nIHNlcnZsZXQgPSAiL3NlcnZsZXQiOworICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSBzZXJ2bGV0KyItIitvdGhlcnVzZXIrIi0iK2VqYm1vZGU7CisgICAgICAgIFN0cmluZ0J1ZmZlciBvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIGJvb2xlYW4gc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgMjAwLCBvdGhlcnVzZXIsIGVqYm1vZGUsIG91dHB1dCk7CisgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuRkFJTCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotCQkvLyBDaGVjayByZXN1bHRzIGluIG91dHB1dAotCQlzdWNjZXNzID0gY2hlY2tSZXN1bHRzKG91dHB1dCxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSk7Ci0JCWlmICghc3VjY2VzcykgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJJbmNvcnJlY3QgcmVzdWx0czoiICsgZGVzY3JpcHRpb24pOwotCQkJc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuRkFJTCk7Ci0JCQlyZXR1cm47Ci0JCX0KKyAgICAgICAgLy8gQ2hlY2sgcmVzdWx0cyBpbiBvdXRwdXQKKyAgICAgICAgc3VjY2VzcyA9IGNoZWNrUmVzdWx0cyhvdXRwdXQsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UpOworICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW5jb3JyZWN0IHJlc3VsdHM6IiArIGRlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LkZBSUwpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKLQkJc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuUEFTUyk7Ci0JfQorICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5QQVNTKTsKKyAgICB9CiAKLQlwdWJsaWMgdm9pZCB0ZXN0U2VydmxldE5vbmUoKSB7Ci0JCVN0cmluZyBzZXJ2bGV0ID0gIi9zZXJ2bGV0IjsKLQkJU3RyaW5nIGRlc2NyaXB0aW9uID0gc2VydmxldCsiLS0iK2VqYm1vZGU7Ci0JCVN0cmluZ0J1ZmZlciBvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWJvb2xlYW4gc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgMjAwLCBudWxsLCBlamJtb2RlLCBvdXRwdXQpOwotCQlpZiAoIXN1Y2Nlc3MpIHsKLQkJCXN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LkZBSUwpOwotCQkJcmV0dXJuOwotCQl9CisgICAgcHVibGljIHZvaWQgdGVzdFNlcnZsZXROb25lKCkgeworICAgICAgICBTdHJpbmcgc2VydmxldCA9ICIvc2VydmxldCI7CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IHNlcnZsZXQrIi0tIitlamJtb2RlOworICAgICAgICBTdHJpbmdCdWZmZXIgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBib29sZWFuIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIDIwMCwgbnVsbCwgZWpibW9kZSwgb3V0cHV0KTsKKyAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5GQUlMKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0JCS8vIENoZWNrIHJlc3VsdHMgaW4gb3V0cHV0Ci0JCXN1Y2Nlc3MgPSBjaGVja1Jlc3VsdHMob3V0cHV0LGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlKTsKLQkJaWYgKCFzdWNjZXNzKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkluY29ycmVjdCByZXN1bHRzOiIgKyBkZXNjcmlwdGlvbik7Ci0JCQlzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5GQUlMKTsKLQkJCXJldHVybjsKLQkJfQorICAgICAgICAvLyBDaGVjayByZXN1bHRzIGluIG91dHB1dAorICAgICAgICBzdWNjZXNzID0gY2hlY2tSZXN1bHRzKG91dHB1dCxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSk7CisgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbmNvcnJlY3QgcmVzdWx0czoiICsgZGVzY3JpcHRpb24pOworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuRkFJTCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotCQlzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5QQVNTKTsKLQl9CisgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LlBBU1MpOworICAgIH0KIAotCXB1YmxpYyB2b2lkIHRlc3REZW55VW5jb3ZlcmVkKCkgewotCQlTdHJpbmcgc2VydmxldCA9ICIvZGVueXVuY292ZXJlZHBvc3QiOwotCQlTdHJpbmcgZGVzY3JpcHRpb24gPSBzZXJ2bGV0KyItIit1c2VybmFtZSsiLSIrZWpibW9kZTsKLQkJU3RyaW5nQnVmZmVyIG91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJYm9vbGVhbiBzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCA0MDMsIHVzZXJuYW1lLCBlamJtb2RlLCBvdXRwdXQpOwotCQlpZiAoIXN1Y2Nlc3MpIHsKLQkJCXN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LkZBSUwpOwotCQkJcmV0dXJuOwotCQl9CisgICAgcHVibGljIHZvaWQgdGVzdERlbnlVbmNvdmVyZWQoKSB7CisgICAgICAgIFN0cmluZyBzZXJ2bGV0ID0gIi9kZW55dW5jb3ZlcmVkcG9zdCI7CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IHNlcnZsZXQrIi0iK3VzZXJuYW1lKyItIitlamJtb2RlOworICAgICAgICBTdHJpbmdCdWZmZXIgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBib29sZWFuIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIDQwMywgdXNlcm5hbWUsIGVqYm1vZGUsIG91dHB1dCk7CisgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuRkFJTCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotCQkvLyBObyByZXN1bHRzIHRvIGNoZWNrIQotCQlzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5QQVNTKTsKLQl9CisgICAgICAgIC8vIE5vIHJlc3VsdHMgdG8gY2hlY2shCisgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LlBBU1MpOworICAgIH0KIAotCXB1YmxpYyB2b2lkIHRlc3REZW55VW5jb3ZlcmVkT3RoZXIoKSB7Ci0JCVN0cmluZyBzZXJ2bGV0ID0gIi9kZW55dW5jb3ZlcmVkcG9zdCI7Ci0JCVN0cmluZyBkZXNjcmlwdGlvbiA9IHNlcnZsZXQrIi0iK290aGVydXNlcisiLSIrZWpibW9kZTsKLQkJU3RyaW5nQnVmZmVyIG91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJYm9vbGVhbiBzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCA0MDMsIG90aGVydXNlciwgZWpibW9kZSwgb3V0cHV0KTsKLQkJaWYgKCFzdWNjZXNzKSB7Ci0JCQlzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5GQUlMKTsKLQkJCXJldHVybjsKLQkJfQorICAgIHB1YmxpYyB2b2lkIHRlc3REZW55VW5jb3ZlcmVkT3RoZXIoKSB7CisgICAgICAgIFN0cmluZyBzZXJ2bGV0ID0gIi9kZW55dW5jb3ZlcmVkcG9zdCI7CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IHNlcnZsZXQrIi0iK290aGVydXNlcisiLSIrZWpibW9kZTsKKyAgICAgICAgU3RyaW5nQnVmZmVyIG91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgYm9vbGVhbiBzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCA0MDMsIG90aGVydXNlciwgZWpibW9kZSwgb3V0cHV0KTsKKyAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5GQUlMKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0JCS8vIE5vIHJlc3VsdHMgdG8gY2hlY2shCi0JCXN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LlBBU1MpOwotCX0KKyAgICAgICAgLy8gTm8gcmVzdWx0cyB0byBjaGVjayEKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuUEFTUyk7CisgICAgfQogCi0JcHVibGljIHZvaWQgdGVzdERlbnlVbmNvdmVyZWROb25lKCkgewotCQlTdHJpbmcgc2VydmxldCA9ICIvZGVueXVuY292ZXJlZHBvc3QiOwotCQlTdHJpbmcgZGVzY3JpcHRpb24gPSBzZXJ2bGV0KyItLSIrZWpibW9kZTsKLQkJU3RyaW5nQnVmZmVyIG91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJYm9vbGVhbiBzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCA0MDMsIG51bGwsIGVqYm1vZGUsIG91dHB1dCk7Ci0JCWlmICghc3VjY2VzcykgewotCQkJc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuRkFJTCk7Ci0JCQlyZXR1cm47Ci0JCX0KKyAgICBwdWJsaWMgdm9pZCB0ZXN0RGVueVVuY292ZXJlZE5vbmUoKSB7CisgICAgICAgIFN0cmluZyBzZXJ2bGV0ID0gIi9kZW55dW5jb3ZlcmVkcG9zdCI7CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IHNlcnZsZXQrIi0tIitlamJtb2RlOworICAgICAgICBTdHJpbmdCdWZmZXIgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBib29sZWFuIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIDQwMywgbnVsbCwgZWpibW9kZSwgb3V0cHV0KTsKKyAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5GQUlMKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0JCS8vIE5vIHJlc3VsdHMgdG8gY2hlY2shCi0JCXN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LlBBU1MpOwotCX0KKyAgICAgICAgLy8gTm8gcmVzdWx0cyB0byBjaGVjayEKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuUEFTUyk7CisgICAgfQogCi0JLy8gVmFsaWRhdGUgdGhhdCBhbGwgdGhlIHBhc3NlZCBpbiByZXN1bHRzIGFyZSBhcyBleHBlY3RlZAotCS8vIElmIGFueSB2YWx1ZSBpcyBub3QgYXMgZXhwZWN0ZWQgdGhlIG92ZXJhbGwgcmVzdWx0cyBhcmUgZmFsc2UKLQlwcml2YXRlIGJvb2xlYW4gY2hlY2tSZXN1bHRzKFN0cmluZ0J1ZmZlciByZXN1bHRzLAotCQkJYm9vbGVhbiBFSkJpc0NhbGxlckluUm9sZSwgYm9vbGVhbiBFSkJpc1VzZXJJbkFueUF1dGhVc2VyUm9sZSwKLQkJCWJvb2xlYW4gRUpCSW52b2tlQW55QXV0aFVzZXIsIGJvb2xlYW4gRUpCSW52b2tlQXV0aFVzZXIsCi0JCQlib29sZWFuIFdFQmlzVXNlckluUm9sZSwgYm9vbGVhbiBXRUJpc1VzZXJJbkFueUF1dGhVc2VyUm9sZSkgewotCQlpbnQgaW5kZXg7Ci0JCWJvb2xlYW4gcmVzdWx0ID0gdHJ1ZTsKKyAgICAvLyBWYWxpZGF0ZSB0aGF0IGFsbCB0aGUgcGFzc2VkIGluIHJlc3VsdHMgYXJlIGFzIGV4cGVjdGVkCisgICAgLy8gSWYgYW55IHZhbHVlIGlzIG5vdCBhcyBleHBlY3RlZCB0aGUgb3ZlcmFsbCByZXN1bHRzIGFyZSBmYWxzZQorICAgIHByaXZhdGUgYm9vbGVhbiBjaGVja1Jlc3VsdHMoU3RyaW5nQnVmZmVyIHJlc3VsdHMsCisgICAgICAgICAgICBib29sZWFuIEVKQmlzQ2FsbGVySW5Sb2xlLCBib29sZWFuIEVKQmlzVXNlckluQW55QXV0aFVzZXJSb2xlLAorICAgICAgICAgICAgYm9vbGVhbiBFSkJJbnZva2VBbnlBdXRoVXNlciwgYm9vbGVhbiBFSkJJbnZva2VBdXRoVXNlciwKKyAgICAgICAgICAgIGJvb2xlYW4gV0VCaXNVc2VySW5Sb2xlLCBib29sZWFuIFdFQmlzVXNlckluQW55QXV0aFVzZXJSb2xlKSB7CisgICAgICAgIGludCBpbmRleDsKKyAgICAgICAgYm9vbGVhbiByZXN1bHQgPSB0cnVlOwogCi0JCWlmIChFSkJpc0NhbGxlckluUm9sZSkKLQkJCWluZGV4ID0gcmVzdWx0cy5pbmRleE9mKCJFSkIgaXNDYWxsZXJJblJvbGU6IHRydWUiKTsKLQkJZWxzZQotCQkJaW5kZXggPSByZXN1bHRzLmluZGV4T2YoIkVKQiBpc0NhbGxlckluUm9sZTogZmFsc2UiKTsKLQkJaWYgKGluZGV4ID09IC0xKQotCQkJcmVzdWx0ID0gZmFsc2U7CisgICAgICAgIGlmIChFSkJpc0NhbGxlckluUm9sZSkKKyAgICAgICAgICAgIGluZGV4ID0gcmVzdWx0cy5pbmRleE9mKCJFSkIgaXNDYWxsZXJJblJvbGU6IHRydWUiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaW5kZXggPSByZXN1bHRzLmluZGV4T2YoIkVKQiBpc0NhbGxlckluUm9sZTogZmFsc2UiKTsKKyAgICAgICAgaWYgKGluZGV4ID09IC0xKQorICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CiAKLQkJaWYgKCFyZXN1bHQpIHJldHVybiByZXN1bHQ7CisgICAgICAgIGlmICghcmVzdWx0KSByZXR1cm4gcmVzdWx0OwogCi0JCWlmIChFSkJpc1VzZXJJbkFueUF1dGhVc2VyUm9sZSkKLQkJCWluZGV4ID0gcmVzdWx0cy5pbmRleE9mKCJFSkIgaXNVc2VySW5BbnlBdXRoVXNlclJvbGU6IHRydWUiKTsKLQkJZWxzZQotCQkJaW5kZXggPSByZXN1bHRzLmluZGV4T2YoIkVKQiBpc1VzZXJJbkFueUF1dGhVc2VyUm9sZTogZmFsc2UiKTsKLQkJaWYgKGluZGV4ID09IC0xKQotCQkJcmVzdWx0ID0gZmFsc2U7CisgICAgICAgIGlmIChFSkJpc1VzZXJJbkFueUF1dGhVc2VyUm9sZSkKKyAgICAgICAgICAgIGluZGV4ID0gcmVzdWx0cy5pbmRleE9mKCJFSkIgaXNVc2VySW5BbnlBdXRoVXNlclJvbGU6IHRydWUiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaW5kZXggPSByZXN1bHRzLmluZGV4T2YoIkVKQiBpc1VzZXJJbkFueUF1dGhVc2VyUm9sZTogZmFsc2UiKTsKKyAgICAgICAgaWYgKGluZGV4ID09IC0xKQorICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CiAKLQkJaWYgKCFyZXN1bHQpIHJldHVybiByZXN1bHQ7CisgICAgICAgIGlmICghcmVzdWx0KSByZXR1cm4gcmVzdWx0OwogCi0JCWlmIChXRUJpc1VzZXJJblJvbGUpCi0JCQlpbmRleCA9IHJlc3VsdHMuaW5kZXhPZigiV0VCIGlzVXNlckluUm9sZTogdHJ1ZSIpOwotCQllbHNlCi0JCQlpbmRleCA9IHJlc3VsdHMuaW5kZXhPZigiV0VCIGlzVXNlckluUm9sZTogZmFsc2UiKTsKLQkJaWYgKGluZGV4ID09IC0xKQotCQkJcmVzdWx0ID0gZmFsc2U7CisgICAgICAgIGlmIChXRUJpc1VzZXJJblJvbGUpCisgICAgICAgICAgICBpbmRleCA9IHJlc3VsdHMuaW5kZXhPZigiV0VCIGlzVXNlckluUm9sZTogdHJ1ZSIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBpbmRleCA9IHJlc3VsdHMuaW5kZXhPZigiV0VCIGlzVXNlckluUm9sZTogZmFsc2UiKTsKKyAgICAgICAgaWYgKGluZGV4ID09IC0xKQorICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CiAKLQkJaWYgKCFyZXN1bHQpIHJldHVybiByZXN1bHQ7CisgICAgICAgIGlmICghcmVzdWx0KSByZXR1cm4gcmVzdWx0OwogCi0JCWlmIChXRUJpc1VzZXJJbkFueUF1dGhVc2VyUm9sZSkKLQkJCWluZGV4ID0gcmVzdWx0cy5pbmRleE9mKCJXRUIgaXNVc2VySW5BbnlBdXRoVXNlclJvbGU6IHRydWUiKTsKLQkJZWxzZQotCQkJaW5kZXggPSByZXN1bHRzLmluZGV4T2YoIldFQiBpc1VzZXJJbkFueUF1dGhVc2VyUm9sZTogZmFsc2UiKTsKLQkJaWYgKGluZGV4ID09IC0xKQotCQkJcmVzdWx0ID0gZmFsc2U7CisgICAgICAgIGlmIChXRUJpc1VzZXJJbkFueUF1dGhVc2VyUm9sZSkKKyAgICAgICAgICAgIGluZGV4ID0gcmVzdWx0cy5pbmRleE9mKCJXRUIgaXNVc2VySW5BbnlBdXRoVXNlclJvbGU6IHRydWUiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaW5kZXggPSByZXN1bHRzLmluZGV4T2YoIldFQiBpc1VzZXJJbkFueUF1dGhVc2VyUm9sZTogZmFsc2UiKTsKKyAgICAgICAgaWYgKGluZGV4ID09IC0xKQorICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CiAKLQkJaWYgKCFyZXN1bHQpIHJldHVybiByZXN1bHQ7CisgICAgICAgIGlmICghcmVzdWx0KSByZXR1cm4gcmVzdWx0OwogCi0JCWluZGV4ID0gcmVzdWx0cy5pbmRleE9mKCJFSkIgSW52b2tlIEFueUF1dGhVc2VyOiBZZXMiKTsKLQkJaWYgKEVKQkludm9rZUFueUF1dGhVc2VyKQotCQkJcmVzdWx0ID0gKGluZGV4ICE9IC0xKTsKLQkJZWxzZQotCQkJcmVzdWx0ID0gKGluZGV4ID09IC0xKTsKKyAgICAgICAgaW5kZXggPSByZXN1bHRzLmluZGV4T2YoIkVKQiBJbnZva2UgQW55QXV0aFVzZXI6IFllcyIpOworICAgICAgICBpZiAoRUpCSW52b2tlQW55QXV0aFVzZXIpCisgICAgICAgICAgICByZXN1bHQgPSAoaW5kZXggIT0gLTEpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXN1bHQgPSAoaW5kZXggPT0gLTEpOwogCi0JCWlmICghcmVzdWx0KSByZXR1cm4gcmVzdWx0OworICAgICAgICBpZiAoIXJlc3VsdCkgcmV0dXJuIHJlc3VsdDsKIAotCQlpbmRleCA9IHJlc3VsdHMuaW5kZXhPZigiRUpCIEludm9rZSBBdXRoVXNlcjogWWVzIik7Ci0JCWlmIChFSkJJbnZva2VBdXRoVXNlcikKLQkJCXJlc3VsdCA9IChpbmRleCAhPSAtMSk7Ci0JCWVsc2UKLQkJCXJlc3VsdCA9IChpbmRleCA9PSAtMSk7CisgICAgICAgIGluZGV4ID0gcmVzdWx0cy5pbmRleE9mKCJFSkIgSW52b2tlIEF1dGhVc2VyOiBZZXMiKTsKKyAgICAgICAgaWYgKEVKQkludm9rZUF1dGhVc2VyKQorICAgICAgICAgICAgcmVzdWx0ID0gKGluZGV4ICE9IC0xKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVzdWx0ID0gKGluZGV4ID09IC0xKTsKIAotCQlyZXR1cm4gcmVzdWx0OwotCX0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiAKLQlwcml2YXRlIGJvb2xlYW4gZG9JbmRpdmlkdWFsVGVzdChTdHJpbmcgc2VydmxldCwgaW50IGNvZGUsIFN0cmluZyB1c2VyLCBTdHJpbmcgbW9kZSwgU3RyaW5nQnVmZmVyIG91dHB1dCkgewotCQlib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotCQl0cnkgewotCQkJaW50IHJ0bmNvZGU7Ci0JCQlTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0UGF0aCArIHNlcnZsZXQ7CisgICAgcHJpdmF0ZSBib29sZWFuIGRvSW5kaXZpZHVhbFRlc3QoU3RyaW5nIHNlcnZsZXQsIGludCBjb2RlLCBTdHJpbmcgdXNlciwgU3RyaW5nIG1vZGUsIFN0cmluZ0J1ZmZlciBvdXRwdXQpIHsKKyAgICAgICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGludCBydG5jb2RlOworICAgICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFBhdGggKyBzZXJ2bGV0OwogCi0JCQlIYXNodGFibGUgaHQgPSBuZXcgSGFzaHRhYmxlKCk7Ci0JCQlodC5wdXQoIm1vZGUiLCBVUkxFbmNvZGVyLmVuY29kZShtb2RlLCJVVEYtOCIpKTsKLQkJCWh0LnB1dCgibmFtZSIsIFVSTEVuY29kZXIuZW5jb2RlKHJvbGVuYW1lLCJVVEYtOCIpKTsKKyAgICAgICAgICAgIEhhc2h0YWJsZSBodCA9IG5ldyBIYXNodGFibGUoKTsKKyAgICAgICAgICAgIGh0LnB1dCgibW9kZSIsIFVSTEVuY29kZXIuZW5jb2RlKG1vZGUsIlVURi04IikpOworICAgICAgICAgICAgaHQucHV0KCJuYW1lIiwgVVJMRW5jb2Rlci5lbmNvZGUocm9sZW5hbWUsIlVURi04IikpOwogCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlxuSW52b2tpbmcgc2VydmxldCBhdCAiICsgdXJsKTsKLQkJCXJ0bmNvZGUgPSBpbnZva2VTZXJ2bGV0KHVybCwgaHQsIHVzZXIsIG91dHB1dCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSBzZXJ2bGV0IHJldHVybiBjb2RlOiAiICsgcnRuY29kZSk7Ci0JCQlpZiAocnRuY29kZSAhPSBjb2RlKSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJJbmNvcnJlY3QgcmV0dXJuIGNvZGUsIGV4cGVjdGluZzogIiArIGNvZGUpOwotCQkJfQotCQkJZWxzZSByZXN1bHQgPSB0cnVlOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRXhjZXB0aW9uOiAiICsgZXgudG9TdHJpbmcoKSk7Ci0JCQkvL2V4LnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcbkludm9raW5nIHNlcnZsZXQgYXQgIiArIHVybCk7CisgICAgICAgICAgICBydG5jb2RlID0gaW52b2tlU2VydmxldCh1cmwsIGh0LCB1c2VyLCBvdXRwdXQpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgc2VydmxldCByZXR1cm4gY29kZTogIiArIHJ0bmNvZGUpOworICAgICAgICAgICAgaWYgKHJ0bmNvZGUgIT0gY29kZSkgeworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW5jb3JyZWN0IHJldHVybiBjb2RlLCBleHBlY3Rpbmc6ICIgKyBjb2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgcmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4Y2VwdGlvbjogIiArIGV4LnRvU3RyaW5nKCkpOworICAgICAgICAgICAgLy9leC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KIAotCXByaXZhdGUgaW50IGludm9rZVNlcnZsZXQoU3RyaW5nIHVybCwgSGFzaHRhYmxlIGNvbnRlbnRIYXNoLCBTdHJpbmcgdXNlciwgU3RyaW5nQnVmZmVyIG91dHB1dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVVSTCB1ID0gbmV3IFVSTCh1cmwpOwotCQlIdHRwVVJMQ29ubmVjdGlvbiBjMSA9IChIdHRwVVJMQ29ubmVjdGlvbikgdS5vcGVuQ29ubmVjdGlvbigpOwotCQljMS5zZXRBbGxvd1VzZXJJbnRlcmFjdGlvbih0cnVlKTsKLQkJaWYgKCh1c2VyICE9IG51bGwpICYmICh1c2VyLmxlbmd0aCgpID4gMCkpIHsKLQkJCS8vIEFkZCBCQVNJQyBoZWFkZXIgZm9yIGF1dGhlbnRpY2F0aW9uCi0JCQlTdHJpbmcgYXV0aCA9ICB1c2VyICsgIjoiICsgcGFzc3dvcmQ7Ci0JCQlTdHJpbmcgYXV0aEVuY29kZWQgPSBuZXcgc3VuLm1pc2MuQkFTRTY0RW5jb2RlcigpLmVuY29kZShhdXRoLmdldEJ5dGVzKCkpOwotCQkJYzEuc2V0UmVxdWVzdFByb3BlcnR5KCJBdXRob3JpemF0aW9uIiwgIkJhc2ljICIgKyBhdXRoRW5jb2RlZCk7Ci0JCX0KLQkJYzEuc2V0RG9PdXRwdXQodHJ1ZSk7Ci0JCWMxLnNldFVzZUNhY2hlcyhmYWxzZSk7CisgICAgcHJpdmF0ZSBpbnQgaW52b2tlU2VydmxldChTdHJpbmcgdXJsLCBIYXNodGFibGUgY29udGVudEhhc2gsIFN0cmluZyB1c2VyLCBTdHJpbmdCdWZmZXIgb3V0cHV0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgVVJMIHUgPSBuZXcgVVJMKHVybCk7CisgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGMxID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1Lm9wZW5Db25uZWN0aW9uKCk7CisgICAgICAgIGMxLnNldEFsbG93VXNlckludGVyYWN0aW9uKHRydWUpOworICAgICAgICBpZiAoKHVzZXIgIT0gbnVsbCkgJiYgKHVzZXIubGVuZ3RoKCkgPiAwKSkgeworICAgICAgICAgICAgLy8gQWRkIEJBU0lDIGhlYWRlciBmb3IgYXV0aGVudGljYXRpb24KKyAgICAgICAgICAgIFN0cmluZyBhdXRoID0gIHVzZXIgKyAiOiIgKyBwYXNzd29yZDsKKyAgICAgICAgICAgIFN0cmluZyBhdXRoRW5jb2RlZCA9IG5ldyBzdW4ubWlzYy5CQVNFNjRFbmNvZGVyKCkuZW5jb2RlKGF1dGguZ2V0Qnl0ZXMoKSk7CisgICAgICAgICAgICBjMS5zZXRSZXF1ZXN0UHJvcGVydHkoIkF1dGhvcml6YXRpb24iLCAiQmFzaWMgIiArIGF1dGhFbmNvZGVkKTsKKyAgICAgICAgfQorICAgICAgICBjMS5zZXREb091dHB1dCh0cnVlKTsKKyAgICAgICAgYzEuc2V0VXNlQ2FjaGVzKGZhbHNlKTsKIAotCQkvLyBnZXQgdGhlIG91dHB1dCBzdHJlYW0gdG8gUE9TVCB0by4KLQkJRGF0YU91dHB1dFN0cmVhbSBvdXQ7Ci0JCW91dCA9IG5ldyBEYXRhT3V0cHV0U3RyZWFtKGMxLmdldE91dHB1dFN0cmVhbSgpKTsKLQkJU3RyaW5nIGNvbnRlbnQgPSAiIjsKKyAgICAgICAgLy8gZ2V0IHRoZSBvdXRwdXQgc3RyZWFtIHRvIFBPU1QgdG8uCisgICAgICAgIERhdGFPdXRwdXRTdHJlYW0gb3V0OworICAgICAgICBvdXQgPSBuZXcgRGF0YU91dHB1dFN0cmVhbShjMS5nZXRPdXRwdXRTdHJlYW0oKSk7CisgICAgICAgIFN0cmluZyBjb250ZW50ID0gIiI7CiAKLQkJLy8gQ3JlYXRlIGEgc2luZ2xlIFN0cmluZyB2YWx1ZSB0byBiZSBQT1NURUQgZnJvbSB0aGUgcGFyYW1ldGVycyBwYXNzZWQKLQkJLy8gdG8gdXMuIFRoaXMgaXMgZG9uZSBieSBtYWtpbmcgIm5hbWUiPSJ2YWx1ZSIgcGFpcnMgZm9yIGFsbCB0aGUga2V5cwotCQkvLyBpbiB0aGUgSGFzaHRhYmxlIHBhc3NlZCB0byB1cy4KLQkJRW51bWVyYXRpb24gZSA9IGNvbnRlbnRIYXNoLmtleXMoKTsKLQkJYm9vbGVhbiBmaXJzdCA9IHRydWU7Ci0JCXdoaWxlIChlLmhhc01vcmVFbGVtZW50cygpKSB7Ci0JCQkvLyBGb3IgZWFjaCBrZXkgYW5kIHZhbHVlIHBhaXIgaW4gdGhlIGhhc2h0YWJsZQotCQkJT2JqZWN0IGtleSA9IGUubmV4dEVsZW1lbnQoKTsKLQkJCU9iamVjdCB2YWx1ZSA9IGNvbnRlbnRIYXNoLmdldChrZXkpOworICAgICAgICAvLyBDcmVhdGUgYSBzaW5nbGUgU3RyaW5nIHZhbHVlIHRvIGJlIFBPU1RFRCBmcm9tIHRoZSBwYXJhbWV0ZXJzIHBhc3NlZAorICAgICAgICAvLyB0byB1cy4gVGhpcyBpcyBkb25lIGJ5IG1ha2luZyAibmFtZSI9InZhbHVlIiBwYWlycyBmb3IgYWxsIHRoZSBrZXlzCisgICAgICAgIC8vIGluIHRoZSBIYXNodGFibGUgcGFzc2VkIHRvIHVzLgorICAgICAgICBFbnVtZXJhdGlvbiBlID0gY29udGVudEhhc2gua2V5cygpOworICAgICAgICBib29sZWFuIGZpcnN0ID0gdHJ1ZTsKKyAgICAgICAgd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpIHsKKyAgICAgICAgICAgIC8vIEZvciBlYWNoIGtleSBhbmQgdmFsdWUgcGFpciBpbiB0aGUgaGFzaHRhYmxlCisgICAgICAgICAgICBPYmplY3Qga2V5ID0gZS5uZXh0RWxlbWVudCgpOworICAgICAgICAgICAgT2JqZWN0IHZhbHVlID0gY29udGVudEhhc2guZ2V0KGtleSk7CiAKLQkJCS8vIElmIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBrZXktdmFsdWUgcGFpciBpbiB0aGUgaGFzaHRhYmxlLAotCQkJLy8gY29uY2FudGVuYXRlIGFuICImIiBzaWduIHRvIHRoZSBjb25zdHJ1Y3RlZCBTdHJpbmcKLQkJCWlmICghZmlyc3QpCi0JCQkJY29udGVudCArPSAiJiI7CisgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3Qga2V5LXZhbHVlIHBhaXIgaW4gdGhlIGhhc2h0YWJsZSwKKyAgICAgICAgICAgIC8vIGNvbmNhbnRlbmF0ZSBhbiAiJiIgc2lnbiB0byB0aGUgY29uc3RydWN0ZWQgU3RyaW5nCisgICAgICAgICAgICBpZiAoIWZpcnN0KQorICAgICAgICAgICAgICAgIGNvbnRlbnQgKz0gIiYiOwogCi0JCQkvLyBhcHBlbmQgdG8gYSBzaW5nbGUgc3RyaW5nLiBFbmNvZGUgdGhlIHZhbHVlIHBvcnRpb24KLQkJCWNvbnRlbnQgKz0gKFN0cmluZykga2V5ICsgIj0iICsgVVJMRW5jb2Rlci5lbmNvZGUoKFN0cmluZykgdmFsdWUsIlVURi04Iik7CisgICAgICAgICAgICAvLyBhcHBlbmQgdG8gYSBzaW5nbGUgc3RyaW5nLiBFbmNvZGUgdGhlIHZhbHVlIHBvcnRpb24KKyAgICAgICAgICAgIGNvbnRlbnQgKz0gKFN0cmluZykga2V5ICsgIj0iICsgVVJMRW5jb2Rlci5lbmNvZGUoKFN0cmluZykgdmFsdWUsIlVURi04Iik7CiAKLQkJCWZpcnN0ID0gZmFsc2U7Ci0JCX0KKyAgICAgICAgICAgIGZpcnN0ID0gZmFsc2U7CisgICAgICAgIH0KIAotCQkvLyBXcml0ZSBvdXQgdGhlIGJ5dGVzIG9mIHRoZSBjb250ZW50IHN0cmluZyB0byB0aGUgc3RyZWFtLgotCQlvdXQud3JpdGVCeXRlcyhjb250ZW50KTsKLQkJb3V0LmZsdXNoKCk7Ci0JCW91dC5jbG9zZSgpOworICAgICAgICAvLyBXcml0ZSBvdXQgdGhlIGJ5dGVzIG9mIHRoZSBjb250ZW50IHN0cmluZyB0byB0aGUgc3RyZWFtLgorICAgICAgICBvdXQud3JpdGVCeXRlcyhjb250ZW50KTsKKyAgICAgICAgb3V0LmZsdXNoKCk7CisgICAgICAgIG91dC5jbG9zZSgpOwogCi0JCS8vIENvbm5lY3QgYW5kIGdldCB0aGUgcmVzcG9uc2UgY29kZSBhbmQvb3Igb3V0cHV0IHRvIHZlcmlmeQotCQljMS5jb25uZWN0KCk7Ci0JCWludCBjb2RlID0gYzEuZ2V0UmVzcG9uc2VDb2RlKCk7Ci0JCWlmIChjb2RlID09IEh0dHBVUkxDb25uZWN0aW9uLkhUVFBfT0spIHsKLQkJCUlucHV0U3RyZWFtIGlzID0gbnVsbDsKLQkJCUJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gbnVsbDsKLQkJCVN0cmluZyBsaW5lID0gbnVsbDsKLQkJCXRyeSB7Ci0JCQkJaXMgPSBjMS5nZXRJbnB1dFN0cmVhbSgpOwotCQkJCWlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwotCQkJCXdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKLQkJCQkJb3V0cHV0LmFwcGVuZChsaW5lKTsKLQkJCQkJU3lzdGVtLm91dC5wcmludGxuKGxpbmUpOwotCQkJCX0KLQkJCX0KLQkJCWZpbmFsbHkgewotCQkJCXRyeSB7IGlmIChpcyAhPSBudWxsKSBpcy5jbG9zZSgpOyB9Ci0JCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGMpIHt9Ci0JCQkJdHJ5IHsgaWYgKGlucHV0ICE9IG51bGwpIGlucHV0LmNsb3NlKCk7IH0KLQkJCQljYXRjaCAoRXhjZXB0aW9uIGV4Yykge30KLQkJCX0KLQkJfQotCQlyZXR1cm4gY29kZTsKLQl9CisgICAgICAgIC8vIENvbm5lY3QgYW5kIGdldCB0aGUgcmVzcG9uc2UgY29kZSBhbmQvb3Igb3V0cHV0IHRvIHZlcmlmeQorICAgICAgICBjMS5jb25uZWN0KCk7CisgICAgICAgIGludCBjb2RlID0gYzEuZ2V0UmVzcG9uc2VDb2RlKCk7CisgICAgICAgIGlmIChjb2RlID09IEh0dHBVUkxDb25uZWN0aW9uLkhUVFBfT0spIHsKKyAgICAgICAgICAgIElucHV0U3RyZWFtIGlzID0gbnVsbDsKKyAgICAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gbnVsbDsKKyAgICAgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgaXMgPSBjMS5nZXRJbnB1dFN0cmVhbSgpOworICAgICAgICAgICAgICAgIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOworICAgICAgICAgICAgICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChsaW5lKTsKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGxpbmUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpbmFsbHkgeworICAgICAgICAgICAgICAgIHRyeSB7IGlmIChpcyAhPSBudWxsKSBpcy5jbG9zZSgpOyB9CisgICAgICAgICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleGMpIHt9CisgICAgICAgICAgICAgICAgdHJ5IHsgaWYgKGlucHV0ICE9IG51bGwpIGlucHV0LmNsb3NlKCk7IH0KKyAgICAgICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4Yykge30KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gY29kZTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjbXI4L2Rlc2NyaXB0b3IvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjbXI4L2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggY2I2M2U1Mi4uMzVjZmU2NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY21yOC9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NtcjgvZGVzY3JpcHRvci9lamItamFyLnhtbApAQCAtMjEsNDYgKzIxLDQ2IEBACiAgICAgICAgICBtZXRhZGF0YS1jb21wbGV0ZT0iZmFsc2UiIHZlcnNpb249IjMuMSIKICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS9lamItamFyXzNfMS54c2QiPgogICAgIDxtb2R1bGUtbmFtZT5qYWNjbXI4LWVqYjwvbW9kdWxlLW5hbWU+Ci0JPGVudGVycHJpc2UtYmVhbnM+Ci0JCTwhLS0gU2VlIEVKQiBhbm5vdGF0aW9ucworICAgIDxlbnRlcnByaXNlLWJlYW5zPgorICAgICAgICA8IS0tIFNlZSBFSkIgYW5ub3RhdGlvbnMKICAgICAgICAgPHNlc3Npb24+CiAgICAgICAgICAgICA8ZGlzcGxheS1uYW1lPkhlbGxvU3RhdGVmdWxFSkI8L2Rpc3BsYXktbmFtZT4KICAgICAgICAgICAgIDxlamItbmFtZT5IZWxsb1N0YXRlZnVsRUpCPC9lamItbmFtZT4KICAgICAgICAgICAgIDxidXNpbmVzcy1sb2NhbD5vcmcuZ2xhc3NmaXNoLmphY2MudGVzdC5tcjguSGVsbG9TdGF0ZWZ1bDwvYnVzaW5lc3MtbG9jYWw+CiAgICAgICAgICAgICA8ZWpiLWNsYXNzPm9yZy5nbGFzc2Zpc2guamFjYy50ZXN0Lm1yOC5IZWxsb1N0YXRlZnVsRUpCPC9lamItY2xhc3M+CiAgICAgICAgIDwvc2Vzc2lvbj4KLQkJLS0+Ci0JCTxzZXNzaW9uPgotCQkJPGRpc3BsYXktbmFtZT5IZWxsb0VKQjwvZGlzcGxheS1uYW1lPgotCQkJPGVqYi1uYW1lPkhlbGxvRUpCPC9lamItbmFtZT4KLQkJCTxidXNpbmVzcy1sb2NhbD5vcmcuZ2xhc3NmaXNoLmphY2MudGVzdC5tcjguSGVsbG88L2J1c2luZXNzLWxvY2FsPgotCQkJPGVqYi1jbGFzcz5vcmcuZ2xhc3NmaXNoLmphY2MudGVzdC5tcjguSGVsbG9FSkI8L2VqYi1jbGFzcz4KLQkJCTwhLS0gR0xBU1NGSVNILTIwMDM2IGZpeGVzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiB3aGVuIHJvbGUtcmVmcyBhcmUgbm90IGRlY2xhcmVkLgotCQkJICAgICBUaGUgQERlY2xhcmVSb2xlcyBhbm5vdGF0aW9uIHByb3ZpZGVzIHRoZSBsaW5rYWdlIGJldHdlZW4gcm9sZXMgc2lsZW50bHkuCi0JCQk8c2VjdXJpdHktcm9sZS1yZWY+Ci0JCQkJPHJvbGUtbmFtZT5qYXZhVXNlcnM8L3JvbGUtbmFtZT4KLQkJCQk8cm9sZS1saW5rPmphdmFVc2Vyczwvcm9sZS1saW5rPgotCQkJPC9zZWN1cml0eS1yb2xlLXJlZj4KLQkJCS0tPgotCQk8L3Nlc3Npb24+Ci0JPC9lbnRlcnByaXNlLWJlYW5zPgotCTxhc3NlbWJseS1kZXNjcmlwdG9yPgotCQk8c2VjdXJpdHktcm9sZT4KLQkJCTxyb2xlLW5hbWU+amF2YVVzZXJzPC9yb2xlLW5hbWU+Ci0JCTwvc2VjdXJpdHktcm9sZT4KLQkJPG1ldGhvZC1wZXJtaXNzaW9uPgotCQkJPHJvbGUtbmFtZT5qYXZhVXNlcnM8L3JvbGUtbmFtZT4KLQkJCTxtZXRob2Q+Ci0JCQkJPGVqYi1uYW1lPkhlbGxvRUpCPC9lamItbmFtZT4KLQkJCQk8bWV0aG9kLW5hbWU+bWV0aG9kQXV0aFVzZXI8L21ldGhvZC1uYW1lPgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kLXBlcm1pc3Npb24+Ci0JCTxtZXRob2QtcGVybWlzc2lvbj4KLQkJCTxyb2xlLW5hbWU+Kio8L3JvbGUtbmFtZT4KLQkJCTxtZXRob2Q+Ci0JCQkJPGVqYi1uYW1lPkhlbGxvRUpCPC9lamItbmFtZT4KLQkJCQk8bWV0aG9kLW5hbWU+bWV0aG9kQW55QXV0aFVzZXI8L21ldGhvZC1uYW1lPgotCQkJPC9tZXRob2Q+Ci0JCTwvbWV0aG9kLXBlcm1pc3Npb24+Ci0JPC9hc3NlbWJseS1kZXNjcmlwdG9yPgorICAgICAgICAtLT4KKyAgICAgICAgPHNlc3Npb24+CisgICAgICAgICAgICA8ZGlzcGxheS1uYW1lPkhlbGxvRUpCPC9kaXNwbGF5LW5hbWU+CisgICAgICAgICAgICA8ZWpiLW5hbWU+SGVsbG9FSkI8L2VqYi1uYW1lPgorICAgICAgICAgICAgPGJ1c2luZXNzLWxvY2FsPm9yZy5nbGFzc2Zpc2guamFjYy50ZXN0Lm1yOC5IZWxsbzwvYnVzaW5lc3MtbG9jYWw+CisgICAgICAgICAgICA8ZWpiLWNsYXNzPm9yZy5nbGFzc2Zpc2guamFjYy50ZXN0Lm1yOC5IZWxsb0VKQjwvZWpiLWNsYXNzPgorICAgICAgICAgICAgPCEtLSBHTEFTU0ZJU0gtMjAwMzYgZml4ZXMgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIHdoZW4gcm9sZS1yZWZzIGFyZSBub3QgZGVjbGFyZWQuCisgICAgICAgICAgICAgICAgIFRoZSBARGVjbGFyZVJvbGVzIGFubm90YXRpb24gcHJvdmlkZXMgdGhlIGxpbmthZ2UgYmV0d2VlbiByb2xlcyBzaWxlbnRseS4KKyAgICAgICAgICAgIDxzZWN1cml0eS1yb2xlLXJlZj4KKyAgICAgICAgICAgICAgICA8cm9sZS1uYW1lPmphdmFVc2Vyczwvcm9sZS1uYW1lPgorICAgICAgICAgICAgICAgIDxyb2xlLWxpbms+amF2YVVzZXJzPC9yb2xlLWxpbms+CisgICAgICAgICAgICA8L3NlY3VyaXR5LXJvbGUtcmVmPgorICAgICAgICAgICAgLS0+CisgICAgICAgIDwvc2Vzc2lvbj4KKyAgICA8L2VudGVycHJpc2UtYmVhbnM+CisgICAgPGFzc2VtYmx5LWRlc2NyaXB0b3I+CisgICAgICAgIDxzZWN1cml0eS1yb2xlPgorICAgICAgICAgICAgPHJvbGUtbmFtZT5qYXZhVXNlcnM8L3JvbGUtbmFtZT4KKyAgICAgICAgPC9zZWN1cml0eS1yb2xlPgorICAgICAgICA8bWV0aG9kLXBlcm1pc3Npb24+CisgICAgICAgICAgICA8cm9sZS1uYW1lPmphdmFVc2Vyczwvcm9sZS1uYW1lPgorICAgICAgICAgICAgPG1ldGhvZD4KKyAgICAgICAgICAgICAgICA8ZWpiLW5hbWU+SGVsbG9FSkI8L2VqYi1uYW1lPgorICAgICAgICAgICAgICAgIDxtZXRob2QtbmFtZT5tZXRob2RBdXRoVXNlcjwvbWV0aG9kLW5hbWU+CisgICAgICAgICAgICA8L21ldGhvZD4KKyAgICAgICAgPC9tZXRob2QtcGVybWlzc2lvbj4KKyAgICAgICAgPG1ldGhvZC1wZXJtaXNzaW9uPgorICAgICAgICAgICAgPHJvbGUtbmFtZT4qKjwvcm9sZS1uYW1lPgorICAgICAgICAgICAgPG1ldGhvZD4KKyAgICAgICAgICAgICAgICA8ZWpiLW5hbWU+SGVsbG9FSkI8L2VqYi1uYW1lPgorICAgICAgICAgICAgICAgIDxtZXRob2QtbmFtZT5tZXRob2RBbnlBdXRoVXNlcjwvbWV0aG9kLW5hbWU+CisgICAgICAgICAgICA8L21ldGhvZD4KKyAgICAgICAgPC9tZXRob2QtcGVybWlzc2lvbj4KKyAgICA8L2Fzc2VtYmx5LWRlc2NyaXB0b3I+CiA8L2VqYi1qYXI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjbXI4L2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NtcjgvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDBkMTA5MmYuLjZhZjg2NzQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NtcjgvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NtcjgvZGVzY3JpcHRvci93ZWIueG1sCkBAIC00Miw1MCArNDIsNTAgQEAKICAgICA8L3NlcnZsZXQtbWFwcGluZz4KICAgICAtLT4KIAotCTxzZWN1cml0eS1jb25zdHJhaW50PgotCQk8d2ViLXJlc291cmNlLWNvbGxlY3Rpb24+CisgICAgPHNlY3VyaXR5LWNvbnN0cmFpbnQ+CisgICAgICAgIDx3ZWItcmVzb3VyY2UtY29sbGVjdGlvbj4KICAgICAgICAgICAgIDx3ZWItcmVzb3VyY2UtbmFtZT5hdXRodXNlcjwvd2ViLXJlc291cmNlLW5hbWU+Ci0JCQk8dXJsLXBhdHRlcm4+L2F1dGh1c2VyPC91cmwtcGF0dGVybj4KLQkJCTxodHRwLW1ldGhvZD5HRVQ8L2h0dHAtbWV0aG9kPgotCQkJPGh0dHAtbWV0aG9kPlBPU1Q8L2h0dHAtbWV0aG9kPgotCQk8L3dlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgotCQk8YXV0aC1jb25zdHJhaW50PgotCQkJPHJvbGUtbmFtZT5qYXZhVXNlcnM8L3JvbGUtbmFtZT4KLQkJPC9hdXRoLWNvbnN0cmFpbnQ+Ci0JPC9zZWN1cml0eS1jb25zdHJhaW50PgotCTxzZWN1cml0eS1jb25zdHJhaW50PgotCQk8d2ViLXJlc291cmNlLWNvbGxlY3Rpb24+CisgICAgICAgICAgICA8dXJsLXBhdHRlcm4+L2F1dGh1c2VyPC91cmwtcGF0dGVybj4KKyAgICAgICAgICAgIDxodHRwLW1ldGhvZD5HRVQ8L2h0dHAtbWV0aG9kPgorICAgICAgICAgICAgPGh0dHAtbWV0aG9kPlBPU1Q8L2h0dHAtbWV0aG9kPgorICAgICAgICA8L3dlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgorICAgICAgICA8YXV0aC1jb25zdHJhaW50PgorICAgICAgICAgICAgPHJvbGUtbmFtZT5qYXZhVXNlcnM8L3JvbGUtbmFtZT4KKyAgICAgICAgPC9hdXRoLWNvbnN0cmFpbnQ+CisgICAgPC9zZWN1cml0eS1jb25zdHJhaW50PgorICAgIDxzZWN1cml0eS1jb25zdHJhaW50PgorICAgICAgICA8d2ViLXJlc291cmNlLWNvbGxlY3Rpb24+CiAgICAgICAgICAgICA8d2ViLXJlc291cmNlLW5hbWU+YW55YXV0aHVzZXI8L3dlYi1yZXNvdXJjZS1uYW1lPgotCQkJPHVybC1wYXR0ZXJuPi9hbnlhdXRodXNlcjwvdXJsLXBhdHRlcm4+Ci0JCQk8aHR0cC1tZXRob2Q+R0VUPC9odHRwLW1ldGhvZD4KLQkJCTxodHRwLW1ldGhvZD5QT1NUPC9odHRwLW1ldGhvZD4KLQkJPC93ZWItcmVzb3VyY2UtY29sbGVjdGlvbj4KLQkJPGF1dGgtY29uc3RyYWludD4KLQkJCTxyb2xlLW5hbWU+Kio8L3JvbGUtbmFtZT4KLQkJPC9hdXRoLWNvbnN0cmFpbnQ+Ci0JPC9zZWN1cml0eS1jb25zdHJhaW50PgotCTxzZWN1cml0eS1jb25zdHJhaW50PgotCQk8d2ViLXJlc291cmNlLWNvbGxlY3Rpb24+CisgICAgICAgICAgICA8dXJsLXBhdHRlcm4+L2FueWF1dGh1c2VyPC91cmwtcGF0dGVybj4KKyAgICAgICAgICAgIDxodHRwLW1ldGhvZD5HRVQ8L2h0dHAtbWV0aG9kPgorICAgICAgICAgICAgPGh0dHAtbWV0aG9kPlBPU1Q8L2h0dHAtbWV0aG9kPgorICAgICAgICA8L3dlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgorICAgICAgICA8YXV0aC1jb25zdHJhaW50PgorICAgICAgICAgICAgPHJvbGUtbmFtZT4qKjwvcm9sZS1uYW1lPgorICAgICAgICA8L2F1dGgtY29uc3RyYWludD4KKyAgICA8L3NlY3VyaXR5LWNvbnN0cmFpbnQ+CisgICAgPHNlY3VyaXR5LWNvbnN0cmFpbnQ+CisgICAgICAgIDx3ZWItcmVzb3VyY2UtY29sbGVjdGlvbj4KICAgICAgICAgICAgIDx3ZWItcmVzb3VyY2UtbmFtZT5zdGFyPC93ZWItcmVzb3VyY2UtbmFtZT4KLQkJCTx1cmwtcGF0dGVybj4vc3RhcjwvdXJsLXBhdHRlcm4+Ci0JCQk8aHR0cC1tZXRob2Q+R0VUPC9odHRwLW1ldGhvZD4KLQkJCTxodHRwLW1ldGhvZD5QT1NUPC9odHRwLW1ldGhvZD4KLQkJPC93ZWItcmVzb3VyY2UtY29sbGVjdGlvbj4KLQkJPCEtLSBXaWxsIG5vdCBpbmNsdWRlIGFueSBhdXRoZW50aWNhdGVkIHVzZXIgdW5sZXNzIGRlY2xhcmVkIGFzIHNlY3VyaXR5LXJvbGUgLS0+Ci0JCTxhdXRoLWNvbnN0cmFpbnQ+Ci0JCQk8cm9sZS1uYW1lPio8L3JvbGUtbmFtZT4KLQkJCTxyb2xlLW5hbWU+Kio8L3JvbGUtbmFtZT4KLQkJPC9hdXRoLWNvbnN0cmFpbnQ+Ci0JPC9zZWN1cml0eS1jb25zdHJhaW50PgotCTxzZWN1cml0eS1jb25zdHJhaW50PgotCQk8d2ViLXJlc291cmNlLWNvbGxlY3Rpb24+CisgICAgICAgICAgICA8dXJsLXBhdHRlcm4+L3N0YXI8L3VybC1wYXR0ZXJuPgorICAgICAgICAgICAgPGh0dHAtbWV0aG9kPkdFVDwvaHR0cC1tZXRob2Q+CisgICAgICAgICAgICA8aHR0cC1tZXRob2Q+UE9TVDwvaHR0cC1tZXRob2Q+CisgICAgICAgIDwvd2ViLXJlc291cmNlLWNvbGxlY3Rpb24+CisgICAgICAgIDwhLS0gV2lsbCBub3QgaW5jbHVkZSBhbnkgYXV0aGVudGljYXRlZCB1c2VyIHVubGVzcyBkZWNsYXJlZCBhcyBzZWN1cml0eS1yb2xlIC0tPgorICAgICAgICA8YXV0aC1jb25zdHJhaW50PgorICAgICAgICAgICAgPHJvbGUtbmFtZT4qPC9yb2xlLW5hbWU+CisgICAgICAgICAgICA8cm9sZS1uYW1lPioqPC9yb2xlLW5hbWU+CisgICAgICAgIDwvYXV0aC1jb25zdHJhaW50PgorICAgIDwvc2VjdXJpdHktY29uc3RyYWludD4KKyAgICA8c2VjdXJpdHktY29uc3RyYWludD4KKyAgICAgICAgPHdlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgogICAgICAgICAgICAgPHdlYi1yZXNvdXJjZS1uYW1lPmRlbnl1bmNvdmVyZWRwb3N0PC93ZWItcmVzb3VyY2UtbmFtZT4KLQkJCTx1cmwtcGF0dGVybj4vZGVueXVuY292ZXJlZHBvc3Q8L3VybC1wYXR0ZXJuPgotCQkJPGh0dHAtbWV0aG9kPkdFVDwvaHR0cC1tZXRob2Q+Ci0JCTwvd2ViLXJlc291cmNlLWNvbGxlY3Rpb24+Ci0JPC9zZWN1cml0eS1jb25zdHJhaW50PgorICAgICAgICAgICAgPHVybC1wYXR0ZXJuPi9kZW55dW5jb3ZlcmVkcG9zdDwvdXJsLXBhdHRlcm4+CisgICAgICAgICAgICA8aHR0cC1tZXRob2Q+R0VUPC9odHRwLW1ldGhvZD4KKyAgICAgICAgPC93ZWItcmVzb3VyY2UtY29sbGVjdGlvbj4KKyAgICA8L3NlY3VyaXR5LWNvbnN0cmFpbnQ+CiAKLQk8c2VjdXJpdHktcm9sZT4KLQkJPHJvbGUtbmFtZT5qYXZhVXNlcnM8L3JvbGUtbmFtZT4KLQk8L3NlY3VyaXR5LXJvbGU+CisgICAgPHNlY3VyaXR5LXJvbGU+CisgICAgICAgIDxyb2xlLW5hbWU+amF2YVVzZXJzPC9yb2xlLW5hbWU+CisgICAgPC9zZWN1cml0eS1yb2xlPgogPC93ZWItYXBwPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY21yOC9lamIvSGVsbG9FSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NtcjgvZWpiL0hlbGxvRUpCLmphdmEKaW5kZXggYzM2NTYwYi4uYzYyYzExNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY21yOC9lamIvSGVsbG9FSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjbXI4L2VqYi9IZWxsb0VKQi5qYXZhCkBAIC0yNCw0MiArMjQsNDIgQEAKIAogQFN0YXRlbGVzcwogcHVibGljIGNsYXNzIEhlbGxvRUpCIGltcGxlbWVudHMgSGVsbG8gewotCUBSZXNvdXJjZQotCXByaXZhdGUgU2Vzc2lvbkNvbnRleHQgY3R4OwotCQotCXB1YmxpYyBTdHJpbmcgaGVsbG8oU3RyaW5nIG5hbWUpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb0VKQjo6aGVsbG8oJyIrbmFtZSsiJykiKTsKLQkJU3RyaW5nIHByaW5jaXBhbE5hbWUgPSAiTk9ORSI7Ci0gICAgICAgIFN0cmluZyBwcmluY2lwYWxUeXBlID0gIlVOS05PV04iOwotCQlQcmluY2lwYWwgcCA9IGN0eC5nZXRDYWxsZXJQcmluY2lwYWwoKTsKLQkJaWYgKHAgIT0gbnVsbCkgewotCSAgICAgICAgcHJpbmNpcGFsTmFtZSA9IHAuZ2V0TmFtZSgpOwotCSAgICAgICAgcHJpbmNpcGFsVHlwZSA9IHAuZ2V0Q2xhc3MoKS5nZXROYW1lKCk7Ci0JCX0KLQkJU3RyaW5nIHJlc3VsdCA9IHByaW5jaXBhbE5hbWUgKyAiIGlzICIgKyBwcmluY2lwYWxUeXBlOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxlciBQcmluY2lwYWw6ICIgKyByZXN1bHQpOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KKyAgICBAUmVzb3VyY2UKKyAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IGN0eDsKIAotCXB1YmxpYyBib29sZWFuIGluUm9sZShTdHJpbmcgcm9sZU5hbWUpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb0VKQjo6aW5Sb2xlKCciK3JvbGVOYW1lKyInKSIpOwotCQkvL3RyeSB7Ci0JCQlib29sZWFuIHJlc3VsdCA9IGN0eC5pc0NhbGxlckluUm9sZShyb2xlTmFtZSk7IAotCQkJU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb0VKQjo6aW5Sb2xlKCciK3JvbGVOYW1lKyInKSAtICIgKyByZXN1bHQpOwotCQkJcmV0dXJuIHJlc3VsdDsKLQkJLy99Ci0JCS8vY2F0Y2ggKEV4Y2VwdGlvbiBleGMpIHsKLQkJLy8JU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb0VKQiAtIEV4Y2VwdGlvbjogIiArIGV4Yy50b1N0cmluZygpKTsKLQkJLy8JZXhjLnByaW50U3RhY2tUcmFjZSgpOwotCQkvLwlyZXR1cm4gZmFsc2U7Ci0JCS8vfQotCX0KKyAgICBwdWJsaWMgU3RyaW5nIGhlbGxvKFN0cmluZyBuYW1lKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9FSkI6OmhlbGxvKCciK25hbWUrIicpIik7CisgICAgICAgIFN0cmluZyBwcmluY2lwYWxOYW1lID0gIk5PTkUiOworICAgICAgICBTdHJpbmcgcHJpbmNpcGFsVHlwZSA9ICJVTktOT1dOIjsKKyAgICAgICAgUHJpbmNpcGFsIHAgPSBjdHguZ2V0Q2FsbGVyUHJpbmNpcGFsKCk7CisgICAgICAgIGlmIChwICE9IG51bGwpIHsKKyAgICAgICAgICAgIHByaW5jaXBhbE5hbWUgPSBwLmdldE5hbWUoKTsKKyAgICAgICAgICAgIHByaW5jaXBhbFR5cGUgPSBwLmdldENsYXNzKCkuZ2V0TmFtZSgpOworICAgICAgICB9CisgICAgICAgIFN0cmluZyByZXN1bHQgPSBwcmluY2lwYWxOYW1lICsgIiBpcyAiICsgcHJpbmNpcGFsVHlwZTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYWxsZXIgUHJpbmNpcGFsOiAiICsgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBpblJvbGUoU3RyaW5nIHJvbGVOYW1lKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9FSkI6OmluUm9sZSgnIityb2xlTmFtZSsiJykiKTsKKyAgICAgICAgLy90cnkgeworICAgICAgICAgICAgYm9vbGVhbiByZXN1bHQgPSBjdHguaXNDYWxsZXJJblJvbGUocm9sZU5hbWUpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb0VKQjo6aW5Sb2xlKCciK3JvbGVOYW1lKyInKSAtICIgKyByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgLy99CisgICAgICAgIC8vY2F0Y2ggKEV4Y2VwdGlvbiBleGMpIHsKKyAgICAgICAgLy8gICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb0VKQiAtIEV4Y2VwdGlvbjogIiArIGV4Yy50b1N0cmluZygpKTsKKyAgICAgICAgLy8gICAgZXhjLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAvLyAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIC8vfQorICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIG1ldGhvZEF1dGhVc2VyKCkgewotICAgIAlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvRUpCOjptZXRob2RBdXRoVXNlcigpIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9FSkI6Om1ldGhvZEF1dGhVc2VyKCkiKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBtZXRob2RBbnlBdXRoVXNlcigpIHsKLSAgICAJU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb0VKQjo6bWV0aG9kQW55QXV0aFVzZXIoKSIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvRUpCOjptZXRob2RBbnlBdXRoVXNlcigpIik7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY21yOC9lamIvSGVsbG9TdGF0ZWZ1bEVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY21yOC9lamIvSGVsbG9TdGF0ZWZ1bEVKQi5qYXZhCmluZGV4IDc5NTI0YzMuLmQwYzM0ZDcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2NtcjgvZWpiL0hlbGxvU3RhdGVmdWxFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjbXI4L2VqYi9IZWxsb1N0YXRlZnVsRUpCLmphdmEKQEAgLTMwLDQ5ICszMCw0OSBAQAogCiBAU3RhdGVmdWwKIHB1YmxpYyBjbGFzcyBIZWxsb1N0YXRlZnVsRUpCIGltcGxlbWVudHMgSGVsbG9TdGF0ZWZ1bCB7Ci0JQFJlc291cmNlCi0JcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBjdHg7CisgICAgQFJlc291cmNlCisgICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBjdHg7CiAKLQlAUG9zdENvbnN0cnVjdAotCXB1YmxpYyB2b2lkIHBvc3RDb25zdHJ1Y3Rpb24oKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TdGF0ZWZ1bEVKQjo6cG9zdENvbnN0cnVjdGlvbigpIik7Ci0JfQotCi0JcHVibGljIFN0cmluZyBoZWxsbyhTdHJpbmcgbmFtZSkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU3RhdGVmdWxFSkI6OmhlbGxvKCciK25hbWUrIicpIik7Ci0JCVN0cmluZyBwcmluY2lwYWxOYW1lID0gIk5PTkUiOwotICAgICAgICBTdHJpbmcgcHJpbmNpcGFsVHlwZSA9ICJVTktOT1dOIjsKLQkJUHJpbmNpcGFsIHAgPSBjdHguZ2V0Q2FsbGVyUHJpbmNpcGFsKCk7Ci0JCWlmIChwICE9IG51bGwpIHsKLQkgICAgICAgIHByaW5jaXBhbE5hbWUgPSBwLmdldE5hbWUoKTsKLQkgICAgICAgIHByaW5jaXBhbFR5cGUgPSBwLmdldENsYXNzKCkuZ2V0TmFtZSgpOwotCQl9Ci0JCVN0cmluZyByZXN1bHQgPSBwcmluY2lwYWxOYW1lICsgIiBpcyAiICsgcHJpbmNpcGFsVHlwZTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJDYWxsZXIgUHJpbmNpcGFsOiAiICsgcmVzdWx0KTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpblJvbGUoU3RyaW5nIHJvbGVOYW1lKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TdGF0ZWZ1bEVKQjo6aW5Sb2xlKCciK3JvbGVOYW1lKyInKSIpOwotCQkvL3RyeSB7Ci0JCQlib29sZWFuIHJlc3VsdCA9IGN0eC5pc0NhbGxlckluUm9sZShyb2xlTmFtZSk7IAotCQkJU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1N0YXRlZnVsRUpCOjppblJvbGUoJyIrcm9sZU5hbWUrIicpIC0gIiArIHJlc3VsdCk7Ci0JCQlyZXR1cm4gcmVzdWx0OwotCQkvL30KLQkJLy9jYXRjaCAoRXhjZXB0aW9uIGV4YykgewotCQkvLwlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU3RhdGVmdWxFSkIgLSBFeGNlcHRpb246ICIgKyBleGMudG9TdHJpbmcoKSk7Ci0JCS8vCWV4Yy5wcmludFN0YWNrVHJhY2UoKTsKLQkJLy8JcmV0dXJuIGZhbHNlOwotCQkvL30KLQl9Ci0KLQlAUm9sZXNBbGxvd2VkKHsiamF2YVVzZXJzIn0pCi0JcHVibGljIHZvaWQgbWV0aG9kQXV0aFVzZXIoKSB7Ci0gICAgCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TdGF0ZWZ1bEVKQjo6bWV0aG9kQXV0aFVzZXIoKSIpOworICAgIEBQb3N0Q29uc3RydWN0CisgICAgcHVibGljIHZvaWQgcG9zdENvbnN0cnVjdGlvbigpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1N0YXRlZnVsRUpCOjpwb3N0Q29uc3RydWN0aW9uKCkiKTsKICAgICB9CiAKLQlAUm9sZXNBbGxvd2VkKHsiKioifSkKLQlwdWJsaWMgdm9pZCBtZXRob2RBbnlBdXRoVXNlcigpIHsKLSAgICAJU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1N0YXRlZnVsRUpCOjptZXRob2RBbnlBdXRoVXNlcigpIik7CisgICAgcHVibGljIFN0cmluZyBoZWxsbyhTdHJpbmcgbmFtZSkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU3RhdGVmdWxFSkI6OmhlbGxvKCciK25hbWUrIicpIik7CisgICAgICAgIFN0cmluZyBwcmluY2lwYWxOYW1lID0gIk5PTkUiOworICAgICAgICBTdHJpbmcgcHJpbmNpcGFsVHlwZSA9ICJVTktOT1dOIjsKKyAgICAgICAgUHJpbmNpcGFsIHAgPSBjdHguZ2V0Q2FsbGVyUHJpbmNpcGFsKCk7CisgICAgICAgIGlmIChwICE9IG51bGwpIHsKKyAgICAgICAgICAgIHByaW5jaXBhbE5hbWUgPSBwLmdldE5hbWUoKTsKKyAgICAgICAgICAgIHByaW5jaXBhbFR5cGUgPSBwLmdldENsYXNzKCkuZ2V0TmFtZSgpOworICAgICAgICB9CisgICAgICAgIFN0cmluZyByZXN1bHQgPSBwcmluY2lwYWxOYW1lICsgIiBpcyAiICsgcHJpbmNpcGFsVHlwZTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYWxsZXIgUHJpbmNpcGFsOiAiICsgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBpblJvbGUoU3RyaW5nIHJvbGVOYW1lKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TdGF0ZWZ1bEVKQjo6aW5Sb2xlKCciK3JvbGVOYW1lKyInKSIpOworICAgICAgICAvL3RyeSB7CisgICAgICAgICAgICBib29sZWFuIHJlc3VsdCA9IGN0eC5pc0NhbGxlckluUm9sZShyb2xlTmFtZSk7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEhlbGxvU3RhdGVmdWxFSkI6OmluUm9sZSgnIityb2xlTmFtZSsiJykgLSAiICsgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIC8vfQorICAgICAgICAvL2NhdGNoIChFeGNlcHRpb24gZXhjKSB7CisgICAgICAgIC8vICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TdGF0ZWZ1bEVKQiAtIEV4Y2VwdGlvbjogIiArIGV4Yy50b1N0cmluZygpKTsKKyAgICAgICAgLy8gICAgZXhjLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAvLyAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIC8vfQorICAgIH0KKworICAgIEBSb2xlc0FsbG93ZWQoeyJqYXZhVXNlcnMifSkKKyAgICBwdWJsaWMgdm9pZCBtZXRob2RBdXRoVXNlcigpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBIZWxsb1N0YXRlZnVsRUpCOjptZXRob2RBdXRoVXNlcigpIik7CisgICAgfQorCisgICAgQFJvbGVzQWxsb3dlZCh7IioqIn0pCisgICAgcHVibGljIHZvaWQgbWV0aG9kQW55QXV0aFVzZXIoKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSGVsbG9TdGF0ZWZ1bEVKQjo6bWV0aG9kQW55QXV0aFVzZXIoKSIpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2Ntcjgvd2ViL1NlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2phY2Ntcjgvd2ViL1NlcnZsZXQuamF2YQppbmRleCA2NzIwNGNiLi44NTgxZGQzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qYWNjbXI4L3dlYi9TZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamFjY21yOC93ZWIvU2VydmxldC5qYXZhCkBAIC0zMSwxMTMgKzMxLDExMyBAQAogQFdlYlNlcnZsZXQobmFtZSA9ICJTZXJ2bGV0IiwgdXJsUGF0dGVybnMgPSB7Ii9zZXJ2bGV0IiwiL2F1dGh1c2VyIiwiL2FueWF1dGh1c2VyIiwiL3N0YXIiLCIvZGVueXVuY292ZXJlZHBvc3QifSkKIHB1YmxpYyBjbGFzcyBTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewogCi0JQEVKQihiZWFuTmFtZSA9ICJIZWxsb0VKQiIsIGJlYW5JbnRlcmZhY2UgPSBIZWxsby5jbGFzcykKLQlwcml2YXRlIEhlbGxvIGhlbGxvU3RhdGVsZXNzOworICAgIEBFSkIoYmVhbk5hbWUgPSAiSGVsbG9FSkIiLCBiZWFuSW50ZXJmYWNlID0gSGVsbG8uY2xhc3MpCisgICAgcHJpdmF0ZSBIZWxsbyBoZWxsb1N0YXRlbGVzczsKIAotCUBFSkIoYmVhbk5hbWUgPSAiSGVsbG9TdGF0ZWZ1bEVKQiIsIGJlYW5JbnRlcmZhY2UgPSBIZWxsb1N0YXRlZnVsLmNsYXNzKQotCXByaXZhdGUgSGVsbG9TdGF0ZWZ1bCBoZWxsb1N0YXRlZnVsOworICAgIEBFSkIoYmVhbk5hbWUgPSAiSGVsbG9TdGF0ZWZ1bEVKQiIsIGJlYW5JbnRlcmZhY2UgPSBIZWxsb1N0YXRlZnVsLmNsYXNzKQorICAgIHByaXZhdGUgSGVsbG9TdGF0ZWZ1bCBoZWxsb1N0YXRlZnVsOwogCi0JcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewotCQlzdXBlci5pbml0KGNvbmZpZyk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gamFjY21yODo6U2VydmxldC4uLiBpbml0KCkiKTsKLQl9CisgICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24geworICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gamFjY21yODo6U2VydmxldC4uLiBpbml0KCkiKTsKKyAgICB9CiAKLQlwdWJsaWMgdm9pZCBzZXJ2aWNlKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJcmVzcC5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7Ci0JCVByaW50V3JpdGVyIG91dCA9IHJlc3AuZ2V0V3JpdGVyKCk7CisgICAgcHVibGljIHZvaWQgc2VydmljZShIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CisgICAgICAgIHJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOworICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwLmdldFdyaXRlcigpOwogCi0JCVN0cmluZyBtb2RlID0gcmVxLmdldFBhcmFtZXRlcigibW9kZSIpOwotCQlpZiAobW9kZSA9PSBudWxsKSBtb2RlID0gInN0YXRlZnVsIjsKLQkJbW9kZSA9IFVSTERlY29kZXIuZGVjb2RlKG1vZGUsIlVURi04Iik7Ci0JCVN0cmluZyBuYW1lID0gcmVxLmdldFBhcmFtZXRlcigibmFtZSIpOwotCQlpZiAobmFtZSA9PSBudWxsKSBuYW1lID0gIk5vdERlY2xhcmVkIjsKLQkJbmFtZSA9IFVSTERlY29kZXIuZGVjb2RlKG5hbWUsIlVURi04Iik7CisgICAgICAgIFN0cmluZyBtb2RlID0gcmVxLmdldFBhcmFtZXRlcigibW9kZSIpOworICAgICAgICBpZiAobW9kZSA9PSBudWxsKSBtb2RlID0gInN0YXRlZnVsIjsKKyAgICAgICAgbW9kZSA9IFVSTERlY29kZXIuZGVjb2RlKG1vZGUsIlVURi04Iik7CisgICAgICAgIFN0cmluZyBuYW1lID0gcmVxLmdldFBhcmFtZXRlcigibmFtZSIpOworICAgICAgICBpZiAobmFtZSA9PSBudWxsKSBuYW1lID0gIk5vdERlY2xhcmVkIjsKKyAgICAgICAgbmFtZSA9IFVSTERlY29kZXIuZGVjb2RlKG5hbWUsIlVURi04Iik7CiAKLQkJLy8gRUpCIGluZm9ybWF0aW9uCi0JCVN0cmluZyBjYWxsZXJQcmluY2lwYWwgPSAiTk9ORSI7Ci0JCWJvb2xlYW4gaXNJbkVKQlJvbGUgPSBmYWxzZTsKLQkJYm9vbGVhbiBpc0FueUF1dGhVc2VyRUpCID0gZmFsc2U7Ci0JCVN0cmluZyBpbnZva2VBbnlBdXRoVXNlciA9ICJObyI7Ci0JCVN0cmluZyBpbnZva2VBdXRoVXNlciA9ICJObyI7Ci0JCWlmICgic3RhdGVmdWwiLmVxdWFscyhtb2RlKSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJJbnZva2luZyBTdGF0ZWZ1bCBFSkIiKTsKLQkJCWNhbGxlclByaW5jaXBhbCA9IGhlbGxvU3RhdGVmdWwuaGVsbG8obmFtZSk7Ci0JCQlpc0FueUF1dGhVc2VyRUpCID0gaGVsbG9TdGF0ZWZ1bC5pblJvbGUoIioqIik7Ci0JCQlpc0luRUpCUm9sZSA9IGhlbGxvU3RhdGVmdWwuaW5Sb2xlKG5hbWUpOwotCQkJdHJ5IHsKLQkJCQloZWxsb1N0YXRlZnVsLm1ldGhvZEFueUF1dGhVc2VyKCk7Ci0JCQkJaW52b2tlQW55QXV0aFVzZXIgPSAiWWVzIjsKLQkJCX0KLQkJCWNhdGNoIChFeGNlcHRpb24gZXhjKSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJGQUlMRUQgaW52b2tlIG9mIG1ldGhvZEFueUF1dGhVc2VyKCkiKTsKLQkJCQlpbnZva2VBbnlBdXRoVXNlciA9IGV4Yy50b1N0cmluZygpOwotCQkJfQotCQkJdHJ5IHsKLQkJCQloZWxsb1N0YXRlZnVsLm1ldGhvZEF1dGhVc2VyKCk7Ci0JCQkJaW52b2tlQXV0aFVzZXIgPSAiWWVzIjsKLQkJCX0KLQkJCWNhdGNoIChFeGNlcHRpb24gZXhjKSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJGQUlMRUQgaW52b2tlIG9mIG1ldGhvZEF1dGhVc2VyKCkiKTsKLQkJCQlpbnZva2VBdXRoVXNlciA9IGV4Yy50b1N0cmluZygpOwotCQkJfQotCQkJU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgaW52b2tlZCBTdGF0ZWZ1bCBFSkIiKTsKLQkJfSBlbHNlIGlmICgic3RhdGVsZXNzIi5lcXVhbHMobW9kZSkpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiSW52b2tpbmcgU3RhdGVsZXNzIEVKQiIpOwotCQkJY2FsbGVyUHJpbmNpcGFsID0gaGVsbG9TdGF0ZWxlc3MuaGVsbG8obmFtZSk7Ci0JCQlpc0FueUF1dGhVc2VyRUpCID0gaGVsbG9TdGF0ZWxlc3MuaW5Sb2xlKCIqKiIpOwotCQkJaXNJbkVKQlJvbGUgPSBoZWxsb1N0YXRlbGVzcy5pblJvbGUobmFtZSk7Ci0JCQl0cnkgewotCQkJCWhlbGxvU3RhdGVsZXNzLm1ldGhvZEFueUF1dGhVc2VyKCk7Ci0JCQkJaW52b2tlQW55QXV0aFVzZXIgPSAiWWVzIjsKLQkJCX0KLQkJCWNhdGNoIChFeGNlcHRpb24gZXhjKSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJGQUlMRUQgaW52b2tlIG9mIG1ldGhvZEFueUF1dGhVc2VyKCkiKTsKLQkJCQlpbnZva2VBbnlBdXRoVXNlciA9IGV4Yy50b1N0cmluZygpOwotCQkJfQotCQkJdHJ5IHsKLQkJCQloZWxsb1N0YXRlbGVzcy5tZXRob2RBdXRoVXNlcigpOwotCQkJCWludm9rZUF1dGhVc2VyID0gIlllcyI7Ci0JCQl9Ci0JCQljYXRjaCAoRXhjZXB0aW9uIGV4YykgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRkFJTEVEIGludm9rZSBvZiBtZXRob2RBdXRoVXNlcigpIik7Ci0JCQkJaW52b2tlQXV0aFVzZXIgPSBleGMudG9TdHJpbmcoKTsKLQkJCX0KLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGludm9rZWQgU3RhdGVsZXNzIEVKQiIpOwotCQl9IGVsc2UgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJNb2RlOiAiICsgbW9kZSk7Ci0JCX0KKyAgICAgICAgLy8gRUpCIGluZm9ybWF0aW9uCisgICAgICAgIFN0cmluZyBjYWxsZXJQcmluY2lwYWwgPSAiTk9ORSI7CisgICAgICAgIGJvb2xlYW4gaXNJbkVKQlJvbGUgPSBmYWxzZTsKKyAgICAgICAgYm9vbGVhbiBpc0FueUF1dGhVc2VyRUpCID0gZmFsc2U7CisgICAgICAgIFN0cmluZyBpbnZva2VBbnlBdXRoVXNlciA9ICJObyI7CisgICAgICAgIFN0cmluZyBpbnZva2VBdXRoVXNlciA9ICJObyI7CisgICAgICAgIGlmICgic3RhdGVmdWwiLmVxdWFscyhtb2RlKSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbnZva2luZyBTdGF0ZWZ1bCBFSkIiKTsKKyAgICAgICAgICAgIGNhbGxlclByaW5jaXBhbCA9IGhlbGxvU3RhdGVmdWwuaGVsbG8obmFtZSk7CisgICAgICAgICAgICBpc0FueUF1dGhVc2VyRUpCID0gaGVsbG9TdGF0ZWZ1bC5pblJvbGUoIioqIik7CisgICAgICAgICAgICBpc0luRUpCUm9sZSA9IGhlbGxvU3RhdGVmdWwuaW5Sb2xlKG5hbWUpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBoZWxsb1N0YXRlZnVsLm1ldGhvZEFueUF1dGhVc2VyKCk7CisgICAgICAgICAgICAgICAgaW52b2tlQW55QXV0aFVzZXIgPSAiWWVzIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXhjKSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGQUlMRUQgaW52b2tlIG9mIG1ldGhvZEFueUF1dGhVc2VyKCkiKTsKKyAgICAgICAgICAgICAgICBpbnZva2VBbnlBdXRoVXNlciA9IGV4Yy50b1N0cmluZygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBoZWxsb1N0YXRlZnVsLm1ldGhvZEF1dGhVc2VyKCk7CisgICAgICAgICAgICAgICAgaW52b2tlQXV0aFVzZXIgPSAiWWVzIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXhjKSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGQUlMRUQgaW52b2tlIG9mIG1ldGhvZEF1dGhVc2VyKCkiKTsKKyAgICAgICAgICAgICAgICBpbnZva2VBdXRoVXNlciA9IGV4Yy50b1N0cmluZygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzZnVsbHkgaW52b2tlZCBTdGF0ZWZ1bCBFSkIiKTsKKyAgICAgICAgfSBlbHNlIGlmICgic3RhdGVsZXNzIi5lcXVhbHMobW9kZSkpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW52b2tpbmcgU3RhdGVsZXNzIEVKQiIpOworICAgICAgICAgICAgY2FsbGVyUHJpbmNpcGFsID0gaGVsbG9TdGF0ZWxlc3MuaGVsbG8obmFtZSk7CisgICAgICAgICAgICBpc0FueUF1dGhVc2VyRUpCID0gaGVsbG9TdGF0ZWxlc3MuaW5Sb2xlKCIqKiIpOworICAgICAgICAgICAgaXNJbkVKQlJvbGUgPSBoZWxsb1N0YXRlbGVzcy5pblJvbGUobmFtZSk7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGhlbGxvU3RhdGVsZXNzLm1ldGhvZEFueUF1dGhVc2VyKCk7CisgICAgICAgICAgICAgICAgaW52b2tlQW55QXV0aFVzZXIgPSAiWWVzIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXhjKSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGQUlMRUQgaW52b2tlIG9mIG1ldGhvZEFueUF1dGhVc2VyKCkiKTsKKyAgICAgICAgICAgICAgICBpbnZva2VBbnlBdXRoVXNlciA9IGV4Yy50b1N0cmluZygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBoZWxsb1N0YXRlbGVzcy5tZXRob2RBdXRoVXNlcigpOworICAgICAgICAgICAgICAgIGludm9rZUF1dGhVc2VyID0gIlllcyI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4YykgeworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRkFJTEVEIGludm9rZSBvZiBtZXRob2RBdXRoVXNlcigpIik7CisgICAgICAgICAgICAgICAgaW52b2tlQXV0aFVzZXIgPSBleGMudG9TdHJpbmcoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGludm9rZWQgU3RhdGVsZXNzIEVKQiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNb2RlOiAiICsgbW9kZSk7CisgICAgICAgIH0KIAotCQkvLyBTZXJ2bGV0IGluZm9ybWF0aW9uCi0JCVN0cmluZyBwcmluY2lwYWxOYW1lID0gIk5PTkUiOwotCQlTdHJpbmcgcHJpbmNpcGFsVHlwZSA9ICJVTktOT1dOIjsKLQkJUHJpbmNpcGFsIHAgPSByZXEuZ2V0VXNlclByaW5jaXBhbCgpOwotCQlpZiAocCAhPSBudWxsKSB7Ci0JCQlwcmluY2lwYWxOYW1lID0gcC5nZXROYW1lKCk7Ci0JCQlwcmluY2lwYWxUeXBlID0gcC5nZXRDbGFzcygpLmdldE5hbWUoKTsKLQkJfQotCQlTdHJpbmcgdXNlclByaW5jaXBhbCA9IHByaW5jaXBhbE5hbWUgKyAiIGlzICIgKyBwcmluY2lwYWxUeXBlOyAKLQkJYm9vbGVhbiBpc0FueUF1dGhVc2VyV2ViID0gcmVxLmlzVXNlckluUm9sZSgiKioiKTsKLQkJYm9vbGVhbiBpc0luV2ViUm9sZSA9IHJlcS5pc1VzZXJJblJvbGUobmFtZSk7CisgICAgICAgIC8vIFNlcnZsZXQgaW5mb3JtYXRpb24KKyAgICAgICAgU3RyaW5nIHByaW5jaXBhbE5hbWUgPSAiTk9ORSI7CisgICAgICAgIFN0cmluZyBwcmluY2lwYWxUeXBlID0gIlVOS05PV04iOworICAgICAgICBQcmluY2lwYWwgcCA9IHJlcS5nZXRVc2VyUHJpbmNpcGFsKCk7CisgICAgICAgIGlmIChwICE9IG51bGwpIHsKKyAgICAgICAgICAgIHByaW5jaXBhbE5hbWUgPSBwLmdldE5hbWUoKTsKKyAgICAgICAgICAgIHByaW5jaXBhbFR5cGUgPSBwLmdldENsYXNzKCkuZ2V0TmFtZSgpOworICAgICAgICB9CisgICAgICAgIFN0cmluZyB1c2VyUHJpbmNpcGFsID0gcHJpbmNpcGFsTmFtZSArICIgaXMgIiArIHByaW5jaXBhbFR5cGU7CisgICAgICAgIGJvb2xlYW4gaXNBbnlBdXRoVXNlcldlYiA9IHJlcS5pc1VzZXJJblJvbGUoIioqIik7CisgICAgICAgIGJvb2xlYW4gaXNJbldlYlJvbGUgPSByZXEuaXNVc2VySW5Sb2xlKG5hbWUpOwogCi0JCW91dC5wcmludGxuKCI8SFRNTD4gPEhFQUQ+IDxUSVRMRT5TZXJ2bGV0IE91dHB1dDwvVElUTEU+IDwvSEVBRD4gPEJPRFk+Iik7Ci0JCW91dC5wcmludGxuKCI8Q0VOVEVSPkpBQ0MgTVI4IFNlcnZsZXQ8L0NFTlRFUj4gPHA+ICIpOwotCQlvdXQucHJpbnRsbigiIFJlcXVlc3QgVVJMOiAiICsgcmVxLmdldFJlcXVlc3RVUkwoKSArICI8YnI+Iik7Ci0JCW91dC5wcmludGxuKCIgSFRUUCBNZXRob2Q6ICIgKyByZXEuZ2V0TWV0aG9kKCkgKyAiPGJyPiIpOwotCQlvdXQucHJpbnRsbigiQ29udGV4dCBQYXRoOiAiICsgcmVxLmdldENvbnRleHRQYXRoKCkgKyAiPGJyPiIpOwotCQlvdXQucHJpbnRsbigiU2VydmxldCBQYXRoOiAiICsgcmVxLmdldFNlcnZsZXRQYXRoKCkgKyAiPGJyPiIpOwotCQlvdXQucHJpbnRsbigiPGJyPiA8Q0VOVEVSPlJlc3VsdHM8L0NFTlRFUj4gPHA+ICIpOwotCQlvdXQucHJpbnRsbigiRUpCIENhbGxlciBQcmluY2lwYWw6ICIgKyBjYWxsZXJQcmluY2lwYWwgKyAiPGJyPiIpOwotCQlvdXQucHJpbnRsbigiRUpCIGlzQ2FsbGVySW5Sb2xlOiAiICsgaXNJbkVKQlJvbGUgKyAiPGJyPiIpOwotCQlvdXQucHJpbnRsbigiRUpCIGlzVXNlckluQW55QXV0aFVzZXJSb2xlOiAiICsgaXNBbnlBdXRoVXNlckVKQiArICI8YnI+Iik7Ci0JCW91dC5wcmludGxuKCJFSkIgSW52b2tlIEFueUF1dGhVc2VyOiAiICsgaW52b2tlQW55QXV0aFVzZXIgKyAiPGJyPiIpOwotCQlvdXQucHJpbnRsbigiRUpCIEludm9rZSBBdXRoVXNlcjogIiArIGludm9rZUF1dGhVc2VyICsgIjxicj4iKTsKLQkJb3V0LnByaW50bG4oIldFQiBVc2VyIFByaW5jaXBhbDogIiArIHVzZXJQcmluY2lwYWwgKyAiPGJyPiIpOwotCQlvdXQucHJpbnRsbigiV0VCIGlzVXNlckluUm9sZTogIiArIGlzSW5XZWJSb2xlICsgIjxicj4iKTsKLQkJb3V0LnByaW50bG4oIldFQiBpc1VzZXJJbkFueUF1dGhVc2VyUm9sZTogIiArIGlzQW55QXV0aFVzZXJXZWIgKyAiPGJyPiIpOwotCQlvdXQucHJpbnRsbigiPC9CT0RZPiA8L0hUTUw+ICIpOwotCX0KKyAgICAgICAgb3V0LnByaW50bG4oIjxIVE1MPiA8SEVBRD4gPFRJVExFPlNlcnZsZXQgT3V0cHV0PC9USVRMRT4gPC9IRUFEPiA8Qk9EWT4iKTsKKyAgICAgICAgb3V0LnByaW50bG4oIjxDRU5URVI+SkFDQyBNUjggU2VydmxldDwvQ0VOVEVSPiA8cD4gIik7CisgICAgICAgIG91dC5wcmludGxuKCIgUmVxdWVzdCBVUkw6ICIgKyByZXEuZ2V0UmVxdWVzdFVSTCgpICsgIjxicj4iKTsKKyAgICAgICAgb3V0LnByaW50bG4oIiBIVFRQIE1ldGhvZDogIiArIHJlcS5nZXRNZXRob2QoKSArICI8YnI+Iik7CisgICAgICAgIG91dC5wcmludGxuKCJDb250ZXh0IFBhdGg6ICIgKyByZXEuZ2V0Q29udGV4dFBhdGgoKSArICI8YnI+Iik7CisgICAgICAgIG91dC5wcmludGxuKCJTZXJ2bGV0IFBhdGg6ICIgKyByZXEuZ2V0U2VydmxldFBhdGgoKSArICI8YnI+Iik7CisgICAgICAgIG91dC5wcmludGxuKCI8YnI+IDxDRU5URVI+UmVzdWx0czwvQ0VOVEVSPiA8cD4gIik7CisgICAgICAgIG91dC5wcmludGxuKCJFSkIgQ2FsbGVyIFByaW5jaXBhbDogIiArIGNhbGxlclByaW5jaXBhbCArICI8YnI+Iik7CisgICAgICAgIG91dC5wcmludGxuKCJFSkIgaXNDYWxsZXJJblJvbGU6ICIgKyBpc0luRUpCUm9sZSArICI8YnI+Iik7CisgICAgICAgIG91dC5wcmludGxuKCJFSkIgaXNVc2VySW5BbnlBdXRoVXNlclJvbGU6ICIgKyBpc0FueUF1dGhVc2VyRUpCICsgIjxicj4iKTsKKyAgICAgICAgb3V0LnByaW50bG4oIkVKQiBJbnZva2UgQW55QXV0aFVzZXI6ICIgKyBpbnZva2VBbnlBdXRoVXNlciArICI8YnI+Iik7CisgICAgICAgIG91dC5wcmludGxuKCJFSkIgSW52b2tlIEF1dGhVc2VyOiAiICsgaW52b2tlQXV0aFVzZXIgKyAiPGJyPiIpOworICAgICAgICBvdXQucHJpbnRsbigiV0VCIFVzZXIgUHJpbmNpcGFsOiAiICsgdXNlclByaW5jaXBhbCArICI8YnI+Iik7CisgICAgICAgIG91dC5wcmludGxuKCJXRUIgaXNVc2VySW5Sb2xlOiAiICsgaXNJbldlYlJvbGUgKyAiPGJyPiIpOworICAgICAgICBvdXQucHJpbnRsbigiV0VCIGlzVXNlckluQW55QXV0aFVzZXJSb2xlOiAiICsgaXNBbnlBdXRoVXNlcldlYiArICI8YnI+Iik7CisgICAgICAgIG91dC5wcmludGxuKCI8L0JPRFk+IDwvSFRNTD4gIik7CisgICAgfQogCi0JcHVibGljIHZvaWQgZGVzdHJveSgpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJJbiBqYWNjbXI4OjpTZXJ2bGV0IGRlc3Ryb3kiKTsKLQl9CisgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBqYWNjbXI4OjpTZXJ2bGV0IGRlc3Ryb3kiKTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qZGJjcmVhbG0vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2pkYmNyZWFsbS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDFiZGE4ZDkuLjE4N2IzMjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2pkYmNyZWFsbS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2pkYmNyZWFsbS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzZWN1cml0eSIvPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qZGJjcmVhbG0vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamRiY3JlYWxtL2J1aWxkLnhtbAppbmRleCAwZmEzYjNjLi4xYzFmZWIxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qZGJjcmVhbG0vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2pkYmNyZWFsbS9idWlsZC54bWwKQEAgLTMzLDMxICszMywzMSBAQAogICAgJmNvbW1vblJ1bjsKICAgICZjb21tb25TZWN1cml0eTsKICAgICZ0ZXN0UHJvcGVydGllczsKLSAgICAKKwogICAgPHByb3BlcnR5IGZpbGU9Ii4vY29uZmlnLnByb3BlcnRpZXMiLz4KIAogICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImRpc3BsYXktaGVhZGVyIj4KLQkgICA8YW50Y2FsbCB0YXJnZXQ9InNldHVwIi8+Ci0JICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZCIvPgotCSAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95Ii8+Ci0JICAgPGFudGNhbGwgdGFyZ2V0PSJydW4iLz4KLQkgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95Ii8+Ci0JICAgPGFudGNhbGwgdGFyZ2V0PSJ1bnNldHVwIi8+CisgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXR1cCIvPgorICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQiLz4KKyAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveSIvPgorICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuIi8+CisgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveSIvPgorICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5zZXR1cCIvPgogICAgPC90YXJnZXQ+CiAKICAgIDx0YXJnZXQgbmFtZT0iYWxsLW9yYWNsZSIgZGVwZW5kcz0iZGlzcGxheS1oZWFkZXIiPgotCSAgIDxhbnRjYWxsIHRhcmdldD0ic2V0dXAtb3JhY2xlIi8+Ci0JICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZCIvPgotCSAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95Ii8+Ci0JICAgPGFudGNhbGwgdGFyZ2V0PSJydW4iLz4KLQkgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95Ii8+Ci0JICAgPGFudGNhbGwgdGFyZ2V0PSJ1bnNldHVwLW9yYWNsZSIvPgorICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0dXAtb3JhY2xlIi8+CisgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZCIvPgorICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95Ii8+CisgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4iLz4KKyAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95Ii8+CisgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bnNldHVwLW9yYWNsZSIvPgogICAgPC90YXJnZXQ+CiAKICAgIDx0YXJnZXQgbmFtZT0iZGlzcGxheS1oZWFkZXIiPgogICAgICA8ZWNobyBtZXNzYWdlPSItLT5SdW5uaW5nICR7YW50LnByb2plY3QubmFtZX0gdGVzdHMgZnJvbSAke2Jhc2VkaXJ9IC4uLiIvPgogICAgIDwvdGFyZ2V0PgotICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtZGItc2NoZW1hIi8+CiAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtZGItdXNyZ3JwcyIvPgpAQCAtOTUsNyArOTUsNyBAQAogICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvb2pkYmMxNC5qYXI6JHtzMWFzdGVzdC5jbGFzc3BhdGh9IiAvPgogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLWRiLXNjaGVtYS1vcmFjbGUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgIDxlY2hvIG1lc3NhZ2U9IkV4ZWN1dGluZyBzcWwgc3RhdGVtZW50IGF0ICR7YmFzZWRpcn0gZnJvbSAke2RlbGV0ZS5zcWwuZmlsZX0iIAorICAgICAgPGVjaG8gbWVzc2FnZT0iRXhlY3V0aW5nIHNxbCBzdGF0ZW1lbnQgYXQgJHtiYXNlZGlyfSBmcm9tICR7ZGVsZXRlLnNxbC5maWxlfSIKICAgICAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgICAgIDxzcWwKICAgICAgICAgZHJpdmVyPSIke29yYWNsZS5kYi5kcml2ZXJ9IgpAQCAtMTI0LDcgKzEyNCw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1kYi1zY2hlbWEiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgIDxlY2hvIG1lc3NhZ2U9IkV4ZWN1dGluZyBzcWwgc3RhdGVtZW50IGF0ICR7YmFzZWRpcn0gZnJvbSAke2RlbGV0ZS5zcWwuZmlsZX0iIAorICAgICAgPGVjaG8gbWVzc2FnZT0iRXhlY3V0aW5nIHNxbCBzdGF0ZW1lbnQgYXQgJHtiYXNlZGlyfSBmcm9tICR7ZGVsZXRlLnNxbC5maWxlfSIKICAgICAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgICAgIDxzcWwKICAgICAgICAgZHJpdmVyPSIke2RlcmJ5LmRiLmRyaXZlcn0iCkBAIC0xNDQsNyArMTQ0LDcgQEAKICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iY29tLnN1bi5kZXZ0ZXN0cy5zZWN1cml0eS5qZGJjcmVhbG0uUG9wdWxhdGVEQiIgZm9yaz0idHJ1ZSI+CiAgICAgICAgIDxjbGFzc3BhdGg+Ci0gIAkgICAgICAgPHBhdGhlbGVtZW50IHBhdGg9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7czFhc3Rlc3QuY2xhc3NwYXRofSIvPgorICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBwYXRoPSIke2J1aWxkLmNsYXNzZXMuZGlyfToke3MxYXN0ZXN0LmNsYXNzcGF0aH0iLz4KICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDxhcmcgdmFsdWU9Ii11cmwiLz4KICAgICAgICAgPGFyZyB2YWx1ZT0iJHtkZXJieS5kYi51cmx9Ii8+CkBAIC0xNjAsNyArMTYwLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1kYi11c3JncnBzLW9yYWNsZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGphdmEgY2xhc3NuYW1lPSJjb20uc3VuLmRldnRlc3RzLnNlY3VyaXR5LmpkYmNyZWFsbS5Qb3B1bGF0ZURCIiBmb3JrPSJ0cnVlIj4KICAgICAgICAgPGNsYXNzcGF0aD4KLSAgCSAgICAgICA8cGF0aGVsZW1lbnQgcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9vamRiYzE0Lmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke3MxYXN0ZXN0LmNsYXNzcGF0aH0iLz4KKyAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9vamRiYzE0Lmphcjoke2J1aWxkLmNsYXNzZXMuZGlyfToke3MxYXN0ZXN0LmNsYXNzcGF0aH0iLz4KICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDxhcmcgdmFsdWU9Ii11cmwiLz4KICAgICAgICAgPGFyZyB2YWx1ZT0iJHtvcmFjbGUuZGIudXJsfSIvPgpAQCAtMTc2LDcgKzE3Niw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9Im1vZGlmeS1kb21haW4teG1sIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtamRiY3JlYWxtLWNvbm5lY3Rpb24tcG9vbCI+Ci0gICAgICAgICAgIDxwYXJhbSBuYW1lPSJkYi5kYXRhc291cmNlLmNsYXNzbmFtZSIgCisgICAgICAgICAgIDxwYXJhbSBuYW1lPSJkYi5kYXRhc291cmNlLmNsYXNzbmFtZSIKICAgICAgICAgICAgICAgICAgIHZhbHVlPSIke2RlcmJ5LmRiLmRhdGFzb3VyY2UuY2xhc3NuYW1lfSIvPgogICAgICAgICAgICA8cGFyYW0gbmFtZT0iZGIucG9ydCIgdmFsdWU9IiR7ZGVyYnkuZGIucG9ydH0iLz4KICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImRiLmhvc3QiIHZhbHVlPSIke2RlcmJ5LmRiLmhvc3R9Ii8+CkBAIC0yMDEsNyArMjAxLDcgQEAKIAogPCEtLQogICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmNyZWFsbS1jb25uZWN0aW9uLXBvb2wiPgotICAgICAgICAgICA8cGFyYW0gbmFtZT0iZGIuZGF0YXNvdXJjZS5jbGFzc25hbWUiIAorICAgICAgICAgICA8cGFyYW0gbmFtZT0iZGIuZGF0YXNvdXJjZS5jbGFzc25hbWUiCiAgICAgICAgICAgICAgICAgICB2YWx1ZT0iJHtvcmFjbGUuZGIuZGF0YXNvdXJjZS5jbGFzc25hbWV9Ii8+CiAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJkYi5wb3J0IiB2YWx1ZT0iJHtvcmFjbGUuZGIucG9ydH0iLz4KICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImRiLmhvc3QiIHZhbHVlPSIke29yYWNsZS5kYi5ob3N0fSIvPgpAQCAtMjE4LDcgKzIxOCw3IEBACiAgICAgICAgICA8YXJnIHZhbHVlPSJQb3J0TnVtYmVyPSR7b3JhY2xlLmRiLnBvcnR9OnNlcnZlck5hbWU9JHtvcmFjbGUuZGIuaG9zdH06U0lEPSR7b3JhY2xlLmRiLlNJRH0iLz4KICAgICAgICAgIDxhcmcgbGluZT0iJHtvcmFjbGUuZGIucG9vbG5hbWV9Ii8+CiAgICAgICAgPC9leGVjPgotICAKKwogICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWpkYmNyZWFsbS1yZXNvdXJjZSI+CiAgICAgICAgICA8cGFyYW0gbmFtZT0iZGIucG9vbG5hbWUiIHZhbHVlPSIke29yYWNsZS5kYi5wb29sbmFtZX0iLz4KICAgICAgICAgIDxwYXJhbSBuYW1lPSJkYi5qbmRpbmFtZSIgdmFsdWU9IiR7b3JhY2xlLmRiLmpuZGluYW1lfSIvPgpAQCAtMjQ1LDcgKzI0NSw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVuLW1vZGlmeS1kb21haW4teG1sLW9yYWNsZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWF1dGgtamRiY3JlYWxtIi8+IAorICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLWF1dGgtamRiY3JlYWxtIi8+CiAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiY3JlYWxtLXJlc291cmNlIj4KICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImRiLmpuZGluYW1lIiB2YWx1ZT0iJHtvcmFjbGUuZGIuam5kaW5hbWV9Ii8+CiAgICAgICAgPC9hbnRjYWxsPgpAQCAtMjkzLDEwMCArMjkzLDEwMCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtYXV0aC1qZGJjcmVhbG0iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KIAotCSAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtY3VzdG9tLWF1dGgtcmVhbG0iPgotCSAgICA8cGFyYW0gbmFtZT0icmVhbG1uYW1lIiB2YWx1ZT0iSkRCQ1JlYWxtX0NMRUFSIi8+IAotCQk8cGFyYW0gbmFtZT0icmVhbG1jbGFzcyIgdmFsdWU9ImNvbS5zdW4uZW50ZXJwcmlzZS5zZWN1cml0eS5hdXRoLnJlYWxtLmpkYmMuSkRCQ1JlYWxtIi8+Ci0JCTxwYXJhbSBuYW1lPSJyZWFsbXByb3BlcnRpZXMiIHZhbHVlPSJkYXRhc291cmNlLWpuZGk9JHtkYi5qbmRpbmFtZX06amFhcy1jb250ZXh0PWpkYmNSZWFsbTpkYi11c2VyPSR7ZGIudXNlcn06ZGItcGFzc3dvcmQ9JHtkYi5wYXNzfTp1c2VyLW5hbWUtY29sdW1uPVVTRVJOQU1FOnBhc3N3b3JkLWNvbHVtbj1QQVNTV09SRDpncm91cC10YWJsZT1HUk9VUF9UQUJMRTpncm91cC1uYW1lLWNvbHVtbj1HUk9VUE5BTUU6dXNlci10YWJsZT1VU0VSX1RBQkxFOmRpZ2VzdC1hbGdvcml0aG09Tk9ORSIvPgorICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtY3VzdG9tLWF1dGgtcmVhbG0iPgorICAgICAgICA8cGFyYW0gbmFtZT0icmVhbG1uYW1lIiB2YWx1ZT0iSkRCQ1JlYWxtX0NMRUFSIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJyZWFsbWNsYXNzIiB2YWx1ZT0iY29tLnN1bi5lbnRlcnByaXNlLnNlY3VyaXR5LmF1dGgucmVhbG0uamRiYy5KREJDUmVhbG0iLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InJlYWxtcHJvcGVydGllcyIgdmFsdWU9ImRhdGFzb3VyY2Utam5kaT0ke2RiLmpuZGluYW1lfTpqYWFzLWNvbnRleHQ9amRiY1JlYWxtOmRiLXVzZXI9JHtkYi51c2VyfTpkYi1wYXNzd29yZD0ke2RiLnBhc3N9OnVzZXItbmFtZS1jb2x1bW49VVNFUk5BTUU6cGFzc3dvcmQtY29sdW1uPVBBU1NXT1JEOmdyb3VwLXRhYmxlPUdST1VQX1RBQkxFOmdyb3VwLW5hbWUtY29sdW1uPUdST1VQTkFNRTp1c2VyLXRhYmxlPVVTRVJfVEFCTEU6ZGlnZXN0LWFsZ29yaXRobT1OT05FIi8+CiAgICAgICA8L2FudGNhbGw+CiAKLQkgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWN1c3RvbS1hdXRoLXJlYWxtIj4KLQkgICAgPHBhcmFtIG5hbWU9InJlYWxtbmFtZSIgdmFsdWU9IkpEQkNSZWFsbV9DTEVBUl9CQVNFNjQiLz4gCi0JCTxwYXJhbSBuYW1lPSJyZWFsbWNsYXNzIiB2YWx1ZT0iY29tLnN1bi5lbnRlcnByaXNlLnNlY3VyaXR5LmF1dGgucmVhbG0uamRiYy5KREJDUmVhbG0iLz4KLQkJPHBhcmFtIG5hbWU9InJlYWxtcHJvcGVydGllcyIgdmFsdWU9ImRhdGFzb3VyY2Utam5kaT0ke2RiLmpuZGluYW1lfTpqYWFzLWNvbnRleHQ9amRiY1JlYWxtOmRiLXVzZXI9JHtkYi51c2VyfTpkYi1wYXNzd29yZD0ke2RiLnBhc3N9OnVzZXItbmFtZS1jb2x1bW49VVNFUk5BTUU6cGFzc3dvcmQtY29sdW1uPVBBU1NXT1JEOmdyb3VwLXRhYmxlPUdST1VQX1RBQkxFOmdyb3VwLW5hbWUtY29sdW1uPUdST1VQTkFNRTp1c2VyLXRhYmxlPVVTRVJfVEFCTEVfQkFTRTY0OmRpZ2VzdC1hbGdvcml0aG09Tk9ORTplbmNvZGluZz1CQVNFNjQiLz4KKyAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWN1c3RvbS1hdXRoLXJlYWxtIj4KKyAgICAgICAgPHBhcmFtIG5hbWU9InJlYWxtbmFtZSIgdmFsdWU9IkpEQkNSZWFsbV9DTEVBUl9CQVNFNjQiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InJlYWxtY2xhc3MiIHZhbHVlPSJjb20uc3VuLmVudGVycHJpc2Uuc2VjdXJpdHkuYXV0aC5yZWFsbS5qZGJjLkpEQkNSZWFsbSIvPgorICAgICAgICA8cGFyYW0gbmFtZT0icmVhbG1wcm9wZXJ0aWVzIiB2YWx1ZT0iZGF0YXNvdXJjZS1qbmRpPSR7ZGIuam5kaW5hbWV9OmphYXMtY29udGV4dD1qZGJjUmVhbG06ZGItdXNlcj0ke2RiLnVzZXJ9OmRiLXBhc3N3b3JkPSR7ZGIucGFzc306dXNlci1uYW1lLWNvbHVtbj1VU0VSTkFNRTpwYXNzd29yZC1jb2x1bW49UEFTU1dPUkQ6Z3JvdXAtdGFibGU9R1JPVVBfVEFCTEU6Z3JvdXAtbmFtZS1jb2x1bW49R1JPVVBOQU1FOnVzZXItdGFibGU9VVNFUl9UQUJMRV9CQVNFNjQ6ZGlnZXN0LWFsZ29yaXRobT1OT05FOmVuY29kaW5nPUJBU0U2NCIvPgogICAgICAgPC9hbnRjYWxsPgogCi0JICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1jdXN0b20tYXV0aC1yZWFsbSI+Ci0JICAgIDxwYXJhbSBuYW1lPSJyZWFsbW5hbWUiIHZhbHVlPSJKREJDUmVhbG1fQ0xFQVJfSEVYIi8+IAotCQk8cGFyYW0gbmFtZT0icmVhbG1jbGFzcyIgdmFsdWU9ImNvbS5zdW4uZW50ZXJwcmlzZS5zZWN1cml0eS5hdXRoLnJlYWxtLmpkYmMuSkRCQ1JlYWxtIi8+Ci0JCTxwYXJhbSBuYW1lPSJyZWFsbXByb3BlcnRpZXMiIHZhbHVlPSJkYXRhc291cmNlLWpuZGk9JHtkYi5qbmRpbmFtZX06amFhcy1jb250ZXh0PWpkYmNSZWFsbTpkYi11c2VyPSR7ZGIudXNlcn06ZGItcGFzc3dvcmQ9JHtkYi5wYXNzfTp1c2VyLW5hbWUtY29sdW1uPVVTRVJOQU1FOnBhc3N3b3JkLWNvbHVtbj1QQVNTV09SRDpncm91cC10YWJsZT1HUk9VUF9UQUJMRTpncm91cC1uYW1lLWNvbHVtbj1HUk9VUE5BTUU6dXNlci10YWJsZT1VU0VSX1RBQkxFX0hFWDpkaWdlc3QtYWxnb3JpdGhtPU5PTkU6ZW5jb2Rpbmc9SEVYIi8+CisgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1jdXN0b20tYXV0aC1yZWFsbSI+CisgICAgICAgIDxwYXJhbSBuYW1lPSJyZWFsbW5hbWUiIHZhbHVlPSJKREJDUmVhbG1fQ0xFQVJfSEVYIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJyZWFsbWNsYXNzIiB2YWx1ZT0iY29tLnN1bi5lbnRlcnByaXNlLnNlY3VyaXR5LmF1dGgucmVhbG0uamRiYy5KREJDUmVhbG0iLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InJlYWxtcHJvcGVydGllcyIgdmFsdWU9ImRhdGFzb3VyY2Utam5kaT0ke2RiLmpuZGluYW1lfTpqYWFzLWNvbnRleHQ9amRiY1JlYWxtOmRiLXVzZXI9JHtkYi51c2VyfTpkYi1wYXNzd29yZD0ke2RiLnBhc3N9OnVzZXItbmFtZS1jb2x1bW49VVNFUk5BTUU6cGFzc3dvcmQtY29sdW1uPVBBU1NXT1JEOmdyb3VwLXRhYmxlPUdST1VQX1RBQkxFOmdyb3VwLW5hbWUtY29sdW1uPUdST1VQTkFNRTp1c2VyLXRhYmxlPVVTRVJfVEFCTEVfSEVYOmRpZ2VzdC1hbGdvcml0aG09Tk9ORTplbmNvZGluZz1IRVgiLz4KICAgICAgIDwvYW50Y2FsbD4KIAogCiAKIAotCSAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtY3VzdG9tLWF1dGgtcmVhbG0iPgotCSAgICA8cGFyYW0gbmFtZT0icmVhbG1uYW1lIiB2YWx1ZT0iSkRCQ1JlYWxtX01EMl9CQVNFNjQiLz4gCi0JCTxwYXJhbSBuYW1lPSJyZWFsbWNsYXNzIiB2YWx1ZT0iY29tLnN1bi5lbnRlcnByaXNlLnNlY3VyaXR5LmF1dGgucmVhbG0uamRiYy5KREJDUmVhbG0iLz4KLQkJPHBhcmFtIG5hbWU9InJlYWxtcHJvcGVydGllcyIgdmFsdWU9ImRhdGFzb3VyY2Utam5kaT0ke2RiLmpuZGluYW1lfTpqYWFzLWNvbnRleHQ9amRiY1JlYWxtOmRiLXVzZXI9JHtkYi51c2VyfTpkYi1wYXNzd29yZD0ke2RiLnBhc3N9OnVzZXItbmFtZS1jb2x1bW49VVNFUk5BTUU6cGFzc3dvcmQtY29sdW1uPVBBU1NXT1JEOmdyb3VwLXRhYmxlPUdST1VQX1RBQkxFOmdyb3VwLW5hbWUtY29sdW1uPUdST1VQTkFNRTp1c2VyLXRhYmxlPVVTRVJfVEFCTEVfTUQyX0JBU0U2NDpkaWdlc3QtYWxnb3JpdGhtPU1EMjplbmNvZGluZz1CQVNFNjQiLz4KKyAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWN1c3RvbS1hdXRoLXJlYWxtIj4KKyAgICAgICAgPHBhcmFtIG5hbWU9InJlYWxtbmFtZSIgdmFsdWU9IkpEQkNSZWFsbV9NRDJfQkFTRTY0Ii8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJyZWFsbWNsYXNzIiB2YWx1ZT0iY29tLnN1bi5lbnRlcnByaXNlLnNlY3VyaXR5LmF1dGgucmVhbG0uamRiYy5KREJDUmVhbG0iLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InJlYWxtcHJvcGVydGllcyIgdmFsdWU9ImRhdGFzb3VyY2Utam5kaT0ke2RiLmpuZGluYW1lfTpqYWFzLWNvbnRleHQ9amRiY1JlYWxtOmRiLXVzZXI9JHtkYi51c2VyfTpkYi1wYXNzd29yZD0ke2RiLnBhc3N9OnVzZXItbmFtZS1jb2x1bW49VVNFUk5BTUU6cGFzc3dvcmQtY29sdW1uPVBBU1NXT1JEOmdyb3VwLXRhYmxlPUdST1VQX1RBQkxFOmdyb3VwLW5hbWUtY29sdW1uPUdST1VQTkFNRTp1c2VyLXRhYmxlPVVTRVJfVEFCTEVfTUQyX0JBU0U2NDpkaWdlc3QtYWxnb3JpdGhtPU1EMjplbmNvZGluZz1CQVNFNjQiLz4KICAgICAgIDwvYW50Y2FsbD4KIAotCSAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtY3VzdG9tLWF1dGgtcmVhbG0iPgotCSAgICA8cGFyYW0gbmFtZT0icmVhbG1uYW1lIiB2YWx1ZT0iSkRCQ1JlYWxtX01ENV9CQVNFNjQiLz4gCi0JCTxwYXJhbSBuYW1lPSJyZWFsbWNsYXNzIiB2YWx1ZT0iY29tLnN1bi5lbnRlcnByaXNlLnNlY3VyaXR5LmF1dGgucmVhbG0uamRiYy5KREJDUmVhbG0iLz4KLQkJPHBhcmFtIG5hbWU9InJlYWxtcHJvcGVydGllcyIgdmFsdWU9ImRhdGFzb3VyY2Utam5kaT0ke2RiLmpuZGluYW1lfTpqYWFzLWNvbnRleHQ9amRiY1JlYWxtOmRiLXVzZXI9JHtkYi51c2VyfTpkYi1wYXNzd29yZD0ke2RiLnBhc3N9OnVzZXItbmFtZS1jb2x1bW49VVNFUk5BTUU6cGFzc3dvcmQtY29sdW1uPVBBU1NXT1JEOmdyb3VwLXRhYmxlPUdST1VQX1RBQkxFOmdyb3VwLW5hbWUtY29sdW1uPUdST1VQTkFNRTp1c2VyLXRhYmxlPVVTRVJfVEFCTEVfTUQ1X0JBU0U2NDpkaWdlc3QtYWxnb3JpdGhtPU1ENTplbmNvZGluZz1CQVNFNjQiLz4KKyAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWN1c3RvbS1hdXRoLXJlYWxtIj4KKyAgICAgICAgPHBhcmFtIG5hbWU9InJlYWxtbmFtZSIgdmFsdWU9IkpEQkNSZWFsbV9NRDVfQkFTRTY0Ii8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJyZWFsbWNsYXNzIiB2YWx1ZT0iY29tLnN1bi5lbnRlcnByaXNlLnNlY3VyaXR5LmF1dGgucmVhbG0uamRiYy5KREJDUmVhbG0iLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InJlYWxtcHJvcGVydGllcyIgdmFsdWU9ImRhdGFzb3VyY2Utam5kaT0ke2RiLmpuZGluYW1lfTpqYWFzLWNvbnRleHQ9amRiY1JlYWxtOmRiLXVzZXI9JHtkYi51c2VyfTpkYi1wYXNzd29yZD0ke2RiLnBhc3N9OnVzZXItbmFtZS1jb2x1bW49VVNFUk5BTUU6cGFzc3dvcmQtY29sdW1uPVBBU1NXT1JEOmdyb3VwLXRhYmxlPUdST1VQX1RBQkxFOmdyb3VwLW5hbWUtY29sdW1uPUdST1VQTkFNRTp1c2VyLXRhYmxlPVVTRVJfVEFCTEVfTUQ1X0JBU0U2NDpkaWdlc3QtYWxnb3JpdGhtPU1ENTplbmNvZGluZz1CQVNFNjQiLz4KICAgICAgIDwvYW50Y2FsbD4KIAotCSAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtY3VzdG9tLWF1dGgtcmVhbG0iPgotCSAgICA8cGFyYW0gbmFtZT0icmVhbG1uYW1lIiB2YWx1ZT0iSkRCQ1JlYWxtX1NIQV9CQVNFNjQiLz4gCi0JCTxwYXJhbSBuYW1lPSJyZWFsbWNsYXNzIiB2YWx1ZT0iY29tLnN1bi5lbnRlcnByaXNlLnNlY3VyaXR5LmF1dGgucmVhbG0uamRiYy5KREJDUmVhbG0iLz4KLQkJPHBhcmFtIG5hbWU9InJlYWxtcHJvcGVydGllcyIgdmFsdWU9ImRhdGFzb3VyY2Utam5kaT0ke2RiLmpuZGluYW1lfTpqYWFzLWNvbnRleHQ9amRiY1JlYWxtOmRiLXVzZXI9JHtkYi51c2VyfTpkYi1wYXNzd29yZD0ke2RiLnBhc3N9OnVzZXItbmFtZS1jb2x1bW49VVNFUk5BTUU6cGFzc3dvcmQtY29sdW1uPVBBU1NXT1JEOmdyb3VwLXRhYmxlPUdST1VQX1RBQkxFOmdyb3VwLW5hbWUtY29sdW1uPUdST1VQTkFNRTp1c2VyLXRhYmxlPVVTRVJfVEFCTEVfU0hBX0JBU0U2NDpkaWdlc3QtYWxnb3JpdGhtPVNIQTplbmNvZGluZz1CQVNFNjQiLz4KKyAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWN1c3RvbS1hdXRoLXJlYWxtIj4KKyAgICAgICAgPHBhcmFtIG5hbWU9InJlYWxtbmFtZSIgdmFsdWU9IkpEQkNSZWFsbV9TSEFfQkFTRTY0Ii8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJyZWFsbWNsYXNzIiB2YWx1ZT0iY29tLnN1bi5lbnRlcnByaXNlLnNlY3VyaXR5LmF1dGgucmVhbG0uamRiYy5KREJDUmVhbG0iLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InJlYWxtcHJvcGVydGllcyIgdmFsdWU9ImRhdGFzb3VyY2Utam5kaT0ke2RiLmpuZGluYW1lfTpqYWFzLWNvbnRleHQ9amRiY1JlYWxtOmRiLXVzZXI9JHtkYi51c2VyfTpkYi1wYXNzd29yZD0ke2RiLnBhc3N9OnVzZXItbmFtZS1jb2x1bW49VVNFUk5BTUU6cGFzc3dvcmQtY29sdW1uPVBBU1NXT1JEOmdyb3VwLXRhYmxlPUdST1VQX1RBQkxFOmdyb3VwLW5hbWUtY29sdW1uPUdST1VQTkFNRTp1c2VyLXRhYmxlPVVTRVJfVEFCTEVfU0hBX0JBU0U2NDpkaWdlc3QtYWxnb3JpdGhtPVNIQTplbmNvZGluZz1CQVNFNjQiLz4KICAgICAgIDwvYW50Y2FsbD4KIAotCSAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtY3VzdG9tLWF1dGgtcmVhbG0iPgotCSAgICA8cGFyYW0gbmFtZT0icmVhbG1uYW1lIiB2YWx1ZT0iSkRCQ1JlYWxtX1NIQTI1Nl9CQVNFNjQiLz4gCi0JCTxwYXJhbSBuYW1lPSJyZWFsbWNsYXNzIiB2YWx1ZT0iY29tLnN1bi5lbnRlcnByaXNlLnNlY3VyaXR5LmF1dGgucmVhbG0uamRiYy5KREJDUmVhbG0iLz4KLQkJPHBhcmFtIG5hbWU9InJlYWxtcHJvcGVydGllcyIgdmFsdWU9ImRhdGFzb3VyY2Utam5kaT0ke2RiLmpuZGluYW1lfTpqYWFzLWNvbnRleHQ9amRiY1JlYWxtOmRiLXVzZXI9JHtkYi51c2VyfTpkYi1wYXNzd29yZD0ke2RiLnBhc3N9OnVzZXItbmFtZS1jb2x1bW49VVNFUk5BTUU6cGFzc3dvcmQtY29sdW1uPVBBU1NXT1JEOmdyb3VwLXRhYmxlPUdST1VQX1RBQkxFOmdyb3VwLW5hbWUtY29sdW1uPUdST1VQTkFNRTp1c2VyLXRhYmxlPVVTRVJfVEFCTEVfU0hBMjU2X0JBU0U2NDpkaWdlc3QtYWxnb3JpdGhtPVNIQS0yNTY6ZW5jb2Rpbmc9QkFTRTY0Ii8+CisgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1jdXN0b20tYXV0aC1yZWFsbSI+CisgICAgICAgIDxwYXJhbSBuYW1lPSJyZWFsbW5hbWUiIHZhbHVlPSJKREJDUmVhbG1fU0hBMjU2X0JBU0U2NCIvPgorICAgICAgICA8cGFyYW0gbmFtZT0icmVhbG1jbGFzcyIgdmFsdWU9ImNvbS5zdW4uZW50ZXJwcmlzZS5zZWN1cml0eS5hdXRoLnJlYWxtLmpkYmMuSkRCQ1JlYWxtIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJyZWFsbXByb3BlcnRpZXMiIHZhbHVlPSJkYXRhc291cmNlLWpuZGk9JHtkYi5qbmRpbmFtZX06amFhcy1jb250ZXh0PWpkYmNSZWFsbTpkYi11c2VyPSR7ZGIudXNlcn06ZGItcGFzc3dvcmQ9JHtkYi5wYXNzfTp1c2VyLW5hbWUtY29sdW1uPVVTRVJOQU1FOnBhc3N3b3JkLWNvbHVtbj1QQVNTV09SRDpncm91cC10YWJsZT1HUk9VUF9UQUJMRTpncm91cC1uYW1lLWNvbHVtbj1HUk9VUE5BTUU6dXNlci10YWJsZT1VU0VSX1RBQkxFX1NIQTI1Nl9CQVNFNjQ6ZGlnZXN0LWFsZ29yaXRobT1TSEEtMjU2OmVuY29kaW5nPUJBU0U2NCIvPgogICAgICAgPC9hbnRjYWxsPgogCi0JICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1jdXN0b20tYXV0aC1yZWFsbSI+Ci0JICAgIDxwYXJhbSBuYW1lPSJyZWFsbW5hbWUiIHZhbHVlPSJKREJDUmVhbG1fU0hBMzg0X0JBU0U2NCIvPiAKLQkJPHBhcmFtIG5hbWU9InJlYWxtY2xhc3MiIHZhbHVlPSJjb20uc3VuLmVudGVycHJpc2Uuc2VjdXJpdHkuYXV0aC5yZWFsbS5qZGJjLkpEQkNSZWFsbSIvPgotCQk8cGFyYW0gbmFtZT0icmVhbG1wcm9wZXJ0aWVzIiB2YWx1ZT0iZGF0YXNvdXJjZS1qbmRpPSR7ZGIuam5kaW5hbWV9OmphYXMtY29udGV4dD1qZGJjUmVhbG06ZGItdXNlcj0ke2RiLnVzZXJ9OmRiLXBhc3N3b3JkPSR7ZGIucGFzc306dXNlci1uYW1lLWNvbHVtbj1VU0VSTkFNRTpwYXNzd29yZC1jb2x1bW49UEFTU1dPUkQ6Z3JvdXAtdGFibGU9R1JPVVBfVEFCTEU6Z3JvdXAtbmFtZS1jb2x1bW49R1JPVVBOQU1FOmVuY29kaW5nPUJBU0U2NDp1c2VyLXRhYmxlPVVTRVJfVEFCTEVfU0hBMzg0X0JBU0U2NDpkaWdlc3QtYWxnb3JpdGhtPVNIQS0zODQiLz4KKyAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWN1c3RvbS1hdXRoLXJlYWxtIj4KKyAgICAgICAgPHBhcmFtIG5hbWU9InJlYWxtbmFtZSIgdmFsdWU9IkpEQkNSZWFsbV9TSEEzODRfQkFTRTY0Ii8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJyZWFsbWNsYXNzIiB2YWx1ZT0iY29tLnN1bi5lbnRlcnByaXNlLnNlY3VyaXR5LmF1dGgucmVhbG0uamRiYy5KREJDUmVhbG0iLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InJlYWxtcHJvcGVydGllcyIgdmFsdWU9ImRhdGFzb3VyY2Utam5kaT0ke2RiLmpuZGluYW1lfTpqYWFzLWNvbnRleHQ9amRiY1JlYWxtOmRiLXVzZXI9JHtkYi51c2VyfTpkYi1wYXNzd29yZD0ke2RiLnBhc3N9OnVzZXItbmFtZS1jb2x1bW49VVNFUk5BTUU6cGFzc3dvcmQtY29sdW1uPVBBU1NXT1JEOmdyb3VwLXRhYmxlPUdST1VQX1RBQkxFOmdyb3VwLW5hbWUtY29sdW1uPUdST1VQTkFNRTplbmNvZGluZz1CQVNFNjQ6dXNlci10YWJsZT1VU0VSX1RBQkxFX1NIQTM4NF9CQVNFNjQ6ZGlnZXN0LWFsZ29yaXRobT1TSEEtMzg0Ii8+CiAgICAgICA8L2FudGNhbGw+CiAKLQkgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWN1c3RvbS1hdXRoLXJlYWxtIj4KLQkgICAgPHBhcmFtIG5hbWU9InJlYWxtbmFtZSIgdmFsdWU9IkpEQkNSZWFsbV9TSEE1MTJfQkFTRTY0Ii8+IAotCQk8cGFyYW0gbmFtZT0icmVhbG1jbGFzcyIgdmFsdWU9ImNvbS5zdW4uZW50ZXJwcmlzZS5zZWN1cml0eS5hdXRoLnJlYWxtLmpkYmMuSkRCQ1JlYWxtIi8+Ci0JCTxwYXJhbSBuYW1lPSJyZWFsbXByb3BlcnRpZXMiIHZhbHVlPSJkYXRhc291cmNlLWpuZGk9JHtkYi5qbmRpbmFtZX06amFhcy1jb250ZXh0PWpkYmNSZWFsbTpkYi11c2VyPSR7ZGIudXNlcn06ZGItcGFzc3dvcmQ9JHtkYi5wYXNzfTp1c2VyLW5hbWUtY29sdW1uPVVTRVJOQU1FOnBhc3N3b3JkLWNvbHVtbj1QQVNTV09SRDpncm91cC10YWJsZT1HUk9VUF9UQUJMRTpncm91cC1uYW1lLWNvbHVtbj1HUk9VUE5BTUU6ZW5jb2Rpbmc9QkFTRTY0OnVzZXItdGFibGU9VVNFUl9UQUJMRV9TSEE1MTJfQkFTRTY0OmRpZ2VzdC1hbGdvcml0aG09U0hBLTUxMiIvPgorICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtY3VzdG9tLWF1dGgtcmVhbG0iPgorICAgICAgICA8cGFyYW0gbmFtZT0icmVhbG1uYW1lIiB2YWx1ZT0iSkRCQ1JlYWxtX1NIQTUxMl9CQVNFNjQiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InJlYWxtY2xhc3MiIHZhbHVlPSJjb20uc3VuLmVudGVycHJpc2Uuc2VjdXJpdHkuYXV0aC5yZWFsbS5qZGJjLkpEQkNSZWFsbSIvPgorICAgICAgICA8cGFyYW0gbmFtZT0icmVhbG1wcm9wZXJ0aWVzIiB2YWx1ZT0iZGF0YXNvdXJjZS1qbmRpPSR7ZGIuam5kaW5hbWV9OmphYXMtY29udGV4dD1qZGJjUmVhbG06ZGItdXNlcj0ke2RiLnVzZXJ9OmRiLXBhc3N3b3JkPSR7ZGIucGFzc306dXNlci1uYW1lLWNvbHVtbj1VU0VSTkFNRTpwYXNzd29yZC1jb2x1bW49UEFTU1dPUkQ6Z3JvdXAtdGFibGU9R1JPVVBfVEFCTEU6Z3JvdXAtbmFtZS1jb2x1bW49R1JPVVBOQU1FOmVuY29kaW5nPUJBU0U2NDp1c2VyLXRhYmxlPVVTRVJfVEFCTEVfU0hBNTEyX0JBU0U2NDpkaWdlc3QtYWxnb3JpdGhtPVNIQS01MTIiLz4KICAgICAgIDwvYW50Y2FsbD4KIAogCiAKIAotCSAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtY3VzdG9tLWF1dGgtcmVhbG0iPgotCSAgICA8cGFyYW0gbmFtZT0icmVhbG1uYW1lIiB2YWx1ZT0iSkRCQ1JlYWxtX01EMl9IRVgiLz4gCi0JCTxwYXJhbSBuYW1lPSJyZWFsbWNsYXNzIiB2YWx1ZT0iY29tLnN1bi5lbnRlcnByaXNlLnNlY3VyaXR5LmF1dGgucmVhbG0uamRiYy5KREJDUmVhbG0iLz4KLQkJPHBhcmFtIG5hbWU9InJlYWxtcHJvcGVydGllcyIgdmFsdWU9ImRhdGFzb3VyY2Utam5kaT0ke2RiLmpuZGluYW1lfTpqYWFzLWNvbnRleHQ9amRiY1JlYWxtOmRiLXVzZXI9JHtkYi51c2VyfTpkYi1wYXNzd29yZD0ke2RiLnBhc3N9OnVzZXItbmFtZS1jb2x1bW49VVNFUk5BTUU6cGFzc3dvcmQtY29sdW1uPVBBU1NXT1JEOmdyb3VwLXRhYmxlPUdST1VQX1RBQkxFOmdyb3VwLW5hbWUtY29sdW1uPUdST1VQTkFNRTplbmNvZGluZz1IRVg6dXNlci10YWJsZT1VU0VSX1RBQkxFX01EMl9IRVg6ZGlnZXN0LWFsZ29yaXRobT1NRDIiLz4KKyAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWN1c3RvbS1hdXRoLXJlYWxtIj4KKyAgICAgICAgPHBhcmFtIG5hbWU9InJlYWxtbmFtZSIgdmFsdWU9IkpEQkNSZWFsbV9NRDJfSEVYIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJyZWFsbWNsYXNzIiB2YWx1ZT0iY29tLnN1bi5lbnRlcnByaXNlLnNlY3VyaXR5LmF1dGgucmVhbG0uamRiYy5KREJDUmVhbG0iLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InJlYWxtcHJvcGVydGllcyIgdmFsdWU9ImRhdGFzb3VyY2Utam5kaT0ke2RiLmpuZGluYW1lfTpqYWFzLWNvbnRleHQ9amRiY1JlYWxtOmRiLXVzZXI9JHtkYi51c2VyfTpkYi1wYXNzd29yZD0ke2RiLnBhc3N9OnVzZXItbmFtZS1jb2x1bW49VVNFUk5BTUU6cGFzc3dvcmQtY29sdW1uPVBBU1NXT1JEOmdyb3VwLXRhYmxlPUdST1VQX1RBQkxFOmdyb3VwLW5hbWUtY29sdW1uPUdST1VQTkFNRTplbmNvZGluZz1IRVg6dXNlci10YWJsZT1VU0VSX1RBQkxFX01EMl9IRVg6ZGlnZXN0LWFsZ29yaXRobT1NRDIiLz4KICAgICAgIDwvYW50Y2FsbD4KIAotCSAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtY3VzdG9tLWF1dGgtcmVhbG0iPgotCSAgICA8cGFyYW0gbmFtZT0icmVhbG1uYW1lIiB2YWx1ZT0iSkRCQ1JlYWxtX01ENV9IRVgiLz4gCi0JCTxwYXJhbSBuYW1lPSJyZWFsbWNsYXNzIiB2YWx1ZT0iY29tLnN1bi5lbnRlcnByaXNlLnNlY3VyaXR5LmF1dGgucmVhbG0uamRiYy5KREJDUmVhbG0iLz4KLQkJPHBhcmFtIG5hbWU9InJlYWxtcHJvcGVydGllcyIgdmFsdWU9ImRhdGFzb3VyY2Utam5kaT0ke2RiLmpuZGluYW1lfTpqYWFzLWNvbnRleHQ9amRiY1JlYWxtOmRiLXVzZXI9JHtkYi51c2VyfTpkYi1wYXNzd29yZD0ke2RiLnBhc3N9OnVzZXItbmFtZS1jb2x1bW49VVNFUk5BTUU6cGFzc3dvcmQtY29sdW1uPVBBU1NXT1JEOmdyb3VwLXRhYmxlPUdST1VQX1RBQkxFOmdyb3VwLW5hbWUtY29sdW1uPUdST1VQTkFNRTplbmNvZGluZz1IRVg6dXNlci10YWJsZT1VU0VSX1RBQkxFX01ENV9IRVg6ZGlnZXN0LWFsZ29yaXRobT1NRDUiLz4KKyAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWN1c3RvbS1hdXRoLXJlYWxtIj4KKyAgICAgICAgPHBhcmFtIG5hbWU9InJlYWxtbmFtZSIgdmFsdWU9IkpEQkNSZWFsbV9NRDVfSEVYIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJyZWFsbWNsYXNzIiB2YWx1ZT0iY29tLnN1bi5lbnRlcnByaXNlLnNlY3VyaXR5LmF1dGgucmVhbG0uamRiYy5KREJDUmVhbG0iLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InJlYWxtcHJvcGVydGllcyIgdmFsdWU9ImRhdGFzb3VyY2Utam5kaT0ke2RiLmpuZGluYW1lfTpqYWFzLWNvbnRleHQ9amRiY1JlYWxtOmRiLXVzZXI9JHtkYi51c2VyfTpkYi1wYXNzd29yZD0ke2RiLnBhc3N9OnVzZXItbmFtZS1jb2x1bW49VVNFUk5BTUU6cGFzc3dvcmQtY29sdW1uPVBBU1NXT1JEOmdyb3VwLXRhYmxlPUdST1VQX1RBQkxFOmdyb3VwLW5hbWUtY29sdW1uPUdST1VQTkFNRTplbmNvZGluZz1IRVg6dXNlci10YWJsZT1VU0VSX1RBQkxFX01ENV9IRVg6ZGlnZXN0LWFsZ29yaXRobT1NRDUiLz4KICAgICAgIDwvYW50Y2FsbD4KIAotCSAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtY3VzdG9tLWF1dGgtcmVhbG0iPgotCSAgICA8cGFyYW0gbmFtZT0icmVhbG1uYW1lIiB2YWx1ZT0iSkRCQ1JlYWxtX1NIQV9IRVgiLz4gCi0JCTxwYXJhbSBuYW1lPSJyZWFsbWNsYXNzIiB2YWx1ZT0iY29tLnN1bi5lbnRlcnByaXNlLnNlY3VyaXR5LmF1dGgucmVhbG0uamRiYy5KREJDUmVhbG0iLz4KLQkJPHBhcmFtIG5hbWU9InJlYWxtcHJvcGVydGllcyIgdmFsdWU9ImRhdGFzb3VyY2Utam5kaT0ke2RiLmpuZGluYW1lfTpqYWFzLWNvbnRleHQ9amRiY1JlYWxtOmRiLXVzZXI9JHtkYi51c2VyfTpkYi1wYXNzd29yZD0ke2RiLnBhc3N9OnVzZXItbmFtZS1jb2x1bW49VVNFUk5BTUU6cGFzc3dvcmQtY29sdW1uPVBBU1NXT1JEOmdyb3VwLXRhYmxlPUdST1VQX1RBQkxFOmdyb3VwLW5hbWUtY29sdW1uPUdST1VQTkFNRTplbmNvZGluZz1IRVg6dXNlci10YWJsZT1VU0VSX1RBQkxFX1NIQV9IRVg6ZGlnZXN0LWFsZ29yaXRobT1TSEEiLz4KKyAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWN1c3RvbS1hdXRoLXJlYWxtIj4KKyAgICAgICAgPHBhcmFtIG5hbWU9InJlYWxtbmFtZSIgdmFsdWU9IkpEQkNSZWFsbV9TSEFfSEVYIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJyZWFsbWNsYXNzIiB2YWx1ZT0iY29tLnN1bi5lbnRlcnByaXNlLnNlY3VyaXR5LmF1dGgucmVhbG0uamRiYy5KREJDUmVhbG0iLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InJlYWxtcHJvcGVydGllcyIgdmFsdWU9ImRhdGFzb3VyY2Utam5kaT0ke2RiLmpuZGluYW1lfTpqYWFzLWNvbnRleHQ9amRiY1JlYWxtOmRiLXVzZXI9JHtkYi51c2VyfTpkYi1wYXNzd29yZD0ke2RiLnBhc3N9OnVzZXItbmFtZS1jb2x1bW49VVNFUk5BTUU6cGFzc3dvcmQtY29sdW1uPVBBU1NXT1JEOmdyb3VwLXRhYmxlPUdST1VQX1RBQkxFOmdyb3VwLW5hbWUtY29sdW1uPUdST1VQTkFNRTplbmNvZGluZz1IRVg6dXNlci10YWJsZT1VU0VSX1RBQkxFX1NIQV9IRVg6ZGlnZXN0LWFsZ29yaXRobT1TSEEiLz4KICAgICAgIDwvYW50Y2FsbD4KIAotCSAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtY3VzdG9tLWF1dGgtcmVhbG0iPgotCSAgICA8cGFyYW0gbmFtZT0icmVhbG1uYW1lIiB2YWx1ZT0iSkRCQ1JlYWxtX1NIQTI1Nl9IRVgiLz4gCi0JCTxwYXJhbSBuYW1lPSJyZWFsbWNsYXNzIiB2YWx1ZT0iY29tLnN1bi5lbnRlcnByaXNlLnNlY3VyaXR5LmF1dGgucmVhbG0uamRiYy5KREJDUmVhbG0iLz4KLQkJPHBhcmFtIG5hbWU9InJlYWxtcHJvcGVydGllcyIgdmFsdWU9ImRhdGFzb3VyY2Utam5kaT0ke2RiLmpuZGluYW1lfTpqYWFzLWNvbnRleHQ9amRiY1JlYWxtOmRiLXVzZXI9JHtkYi51c2VyfTpkYi1wYXNzd29yZD0ke2RiLnBhc3N9OnVzZXItbmFtZS1jb2x1bW49VVNFUk5BTUU6cGFzc3dvcmQtY29sdW1uPVBBU1NXT1JEOmdyb3VwLXRhYmxlPUdST1VQX1RBQkxFOmdyb3VwLW5hbWUtY29sdW1uPUdST1VQTkFNRTplbmNvZGluZz1IRVg6dXNlci10YWJsZT1VU0VSX1RBQkxFX1NIQTI1Nl9IRVg6ZGlnZXN0LWFsZ29yaXRobT1TSEEtMjU2Ii8+CisgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1jdXN0b20tYXV0aC1yZWFsbSI+CisgICAgICAgIDxwYXJhbSBuYW1lPSJyZWFsbW5hbWUiIHZhbHVlPSJKREJDUmVhbG1fU0hBMjU2X0hFWCIvPgorICAgICAgICA8cGFyYW0gbmFtZT0icmVhbG1jbGFzcyIgdmFsdWU9ImNvbS5zdW4uZW50ZXJwcmlzZS5zZWN1cml0eS5hdXRoLnJlYWxtLmpkYmMuSkRCQ1JlYWxtIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJyZWFsbXByb3BlcnRpZXMiIHZhbHVlPSJkYXRhc291cmNlLWpuZGk9JHtkYi5qbmRpbmFtZX06amFhcy1jb250ZXh0PWpkYmNSZWFsbTpkYi11c2VyPSR7ZGIudXNlcn06ZGItcGFzc3dvcmQ9JHtkYi5wYXNzfTp1c2VyLW5hbWUtY29sdW1uPVVTRVJOQU1FOnBhc3N3b3JkLWNvbHVtbj1QQVNTV09SRDpncm91cC10YWJsZT1HUk9VUF9UQUJMRTpncm91cC1uYW1lLWNvbHVtbj1HUk9VUE5BTUU6ZW5jb2Rpbmc9SEVYOnVzZXItdGFibGU9VVNFUl9UQUJMRV9TSEEyNTZfSEVYOmRpZ2VzdC1hbGdvcml0aG09U0hBLTI1NiIvPgogICAgICAgPC9hbnRjYWxsPgogCi0JICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1jdXN0b20tYXV0aC1yZWFsbSI+Ci0JICAgIDxwYXJhbSBuYW1lPSJyZWFsbW5hbWUiIHZhbHVlPSJKREJDUmVhbG1fU0hBMzg0X0hFWCIvPiAKLQkJPHBhcmFtIG5hbWU9InJlYWxtY2xhc3MiIHZhbHVlPSJjb20uc3VuLmVudGVycHJpc2Uuc2VjdXJpdHkuYXV0aC5yZWFsbS5qZGJjLkpEQkNSZWFsbSIvPgotCQk8cGFyYW0gbmFtZT0icmVhbG1wcm9wZXJ0aWVzIiB2YWx1ZT0iZGF0YXNvdXJjZS1qbmRpPSR7ZGIuam5kaW5hbWV9OmphYXMtY29udGV4dD1qZGJjUmVhbG06ZGItdXNlcj0ke2RiLnVzZXJ9OmRiLXBhc3N3b3JkPSR7ZGIucGFzc306dXNlci1uYW1lLWNvbHVtbj1VU0VSTkFNRTpwYXNzd29yZC1jb2x1bW49UEFTU1dPUkQ6Z3JvdXAtdGFibGU9R1JPVVBfVEFCTEU6Z3JvdXAtbmFtZS1jb2x1bW49R1JPVVBOQU1FOmVuY29kaW5nPUhFWDp1c2VyLXRhYmxlPVVTRVJfVEFCTEVfU0hBMzg0X0hFWDpkaWdlc3QtYWxnb3JpdGhtPVNIQS0zODQiLz4KKyAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWN1c3RvbS1hdXRoLXJlYWxtIj4KKyAgICAgICAgPHBhcmFtIG5hbWU9InJlYWxtbmFtZSIgdmFsdWU9IkpEQkNSZWFsbV9TSEEzODRfSEVYIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJyZWFsbWNsYXNzIiB2YWx1ZT0iY29tLnN1bi5lbnRlcnByaXNlLnNlY3VyaXR5LmF1dGgucmVhbG0uamRiYy5KREJDUmVhbG0iLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InJlYWxtcHJvcGVydGllcyIgdmFsdWU9ImRhdGFzb3VyY2Utam5kaT0ke2RiLmpuZGluYW1lfTpqYWFzLWNvbnRleHQ9amRiY1JlYWxtOmRiLXVzZXI9JHtkYi51c2VyfTpkYi1wYXNzd29yZD0ke2RiLnBhc3N9OnVzZXItbmFtZS1jb2x1bW49VVNFUk5BTUU6cGFzc3dvcmQtY29sdW1uPVBBU1NXT1JEOmdyb3VwLXRhYmxlPUdST1VQX1RBQkxFOmdyb3VwLW5hbWUtY29sdW1uPUdST1VQTkFNRTplbmNvZGluZz1IRVg6dXNlci10YWJsZT1VU0VSX1RBQkxFX1NIQTM4NF9IRVg6ZGlnZXN0LWFsZ29yaXRobT1TSEEtMzg0Ii8+CiAgICAgICA8L2FudGNhbGw+CiAKLQkgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWN1c3RvbS1hdXRoLXJlYWxtIj4KLQkgICAgPHBhcmFtIG5hbWU9InJlYWxtbmFtZSIgdmFsdWU9IkpEQkNSZWFsbV9TSEE1MTJfSEVYIi8+IAotCQk8cGFyYW0gbmFtZT0icmVhbG1jbGFzcyIgdmFsdWU9ImNvbS5zdW4uZW50ZXJwcmlzZS5zZWN1cml0eS5hdXRoLnJlYWxtLmpkYmMuSkRCQ1JlYWxtIi8+Ci0JCTxwYXJhbSBuYW1lPSJyZWFsbXByb3BlcnRpZXMiIHZhbHVlPSJkYXRhc291cmNlLWpuZGk9JHtkYi5qbmRpbmFtZX06amFhcy1jb250ZXh0PWpkYmNSZWFsbTpkYi11c2VyPSR7ZGIudXNlcn06ZGItcGFzc3dvcmQ9JHtkYi5wYXNzfTp1c2VyLW5hbWUtY29sdW1uPVVTRVJOQU1FOnBhc3N3b3JkLWNvbHVtbj1QQVNTV09SRDpncm91cC10YWJsZT1HUk9VUF9UQUJMRTpncm91cC1uYW1lLWNvbHVtbj1HUk9VUE5BTUU6ZW5jb2Rpbmc9SEVYOnVzZXItdGFibGU9VVNFUl9UQUJMRV9TSEE1MTJfSEVYOmRpZ2VzdC1hbGdvcml0aG09U0hBLTUxMiIvPgorICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtY3VzdG9tLWF1dGgtcmVhbG0iPgorICAgICAgICA8cGFyYW0gbmFtZT0icmVhbG1uYW1lIiB2YWx1ZT0iSkRCQ1JlYWxtX1NIQTUxMl9IRVgiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InJlYWxtY2xhc3MiIHZhbHVlPSJjb20uc3VuLmVudGVycHJpc2Uuc2VjdXJpdHkuYXV0aC5yZWFsbS5qZGJjLkpEQkNSZWFsbSIvPgorICAgICAgICA8cGFyYW0gbmFtZT0icmVhbG1wcm9wZXJ0aWVzIiB2YWx1ZT0iZGF0YXNvdXJjZS1qbmRpPSR7ZGIuam5kaW5hbWV9OmphYXMtY29udGV4dD1qZGJjUmVhbG06ZGItdXNlcj0ke2RiLnVzZXJ9OmRiLXBhc3N3b3JkPSR7ZGIucGFzc306dXNlci1uYW1lLWNvbHVtbj1VU0VSTkFNRTpwYXNzd29yZC1jb2x1bW49UEFTU1dPUkQ6Z3JvdXAtdGFibGU9R1JPVVBfVEFCTEU6Z3JvdXAtbmFtZS1jb2x1bW49R1JPVVBOQU1FOmVuY29kaW5nPUhFWDp1c2VyLXRhYmxlPVVTRVJfVEFCTEVfU0hBNTEyX0hFWDpkaWdlc3QtYWxnb3JpdGhtPVNIQS01MTIiLz4KICAgICAgIDwvYW50Y2FsbD4KIAogICAgIDwvdGFyZ2V0PgpAQCAtODU3LDcgKzg1Nyw3IEBACiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQtc2VydmVyLWluc3RhbmNlLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgogCi0gICAgPCEtLSB2YXJpYWJsZXMgbmVlZGVkIGJ5IGN1c3RvbS1idWlsZCAKKyAgICA8IS0tIHZhcmlhYmxlcyBuZWVkZWQgYnkgY3VzdG9tLWJ1aWxkCiAgICAgICAgICAxLiBqZGJjLnJlYWxtLm5hbWUKICAgICAgICAgIDIuIGpkYmMucmVhbG0udXNlcgogICAgICAgICAgMy4gYXBwbmFtZQpAQCAtODY1LDIyICs4NjUsMjIgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImN1c3RvbS1idWlsZCI+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IndlYi54bWwgaXMgZGVmaW5lZCBhcyAke3dlYi54bWx9Ii8+CiAKLSAgCSAgICA8Y29weSBmaWxlPSJ3ZWIueG1sLnRlbXBsYXRlIiB0b2ZpbGU9IiR7d2ViLnhtbH0iIG92ZXJ3cml0ZT0idHJ1ZSIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gICAJICAgIDxyZXBsYWNlIGZpbGU9IiR7d2ViLnhtbH0iIHRva2VuPSJSRUFMTV9OQU1FX0hFUkUiIHZhbHVlPSIke2pkYmMucmVhbG0ubmFtZX0iLz4KLSAgCSAgICA8Y29weSBmaWxlPSJzdW4td2ViLnhtbC50ZW1wbGF0ZSIgdG9maWxlPSIke3N1bi13ZWIueG1sfSIgb3ZlcndyaXRlPSJ0cnVlIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgIAkgICAgPHJlcGxhY2UgZmlsZT0iJHtzdW4td2ViLnhtbH0iIHRva2VuPSJVU0VSX0lEX0hFUkUiIHZhbHVlPSIke2pkYmMucmVhbG0udXNlcn0iLz4KKyAgICAgICAgICA8Y29weSBmaWxlPSJ3ZWIueG1sLnRlbXBsYXRlIiB0b2ZpbGU9IiR7d2ViLnhtbH0iIG92ZXJ3cml0ZT0idHJ1ZSIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CisgICAgICAgICAgIDxyZXBsYWNlIGZpbGU9IiR7d2ViLnhtbH0iIHRva2VuPSJSRUFMTV9OQU1FX0hFUkUiIHZhbHVlPSIke2pkYmMucmVhbG0ubmFtZX0iLz4KKyAgICAgICAgICA8Y29weSBmaWxlPSJzdW4td2ViLnhtbC50ZW1wbGF0ZSIgdG9maWxlPSIke3N1bi13ZWIueG1sfSIgb3ZlcndyaXRlPSJ0cnVlIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KKyAgICAgICAgICAgPHJlcGxhY2UgZmlsZT0iJHtzdW4td2ViLnhtbH0iIHRva2VuPSJVU0VSX0lEX0hFUkUiIHZhbHVlPSIke2pkYmMucmVhbG0udXNlcn0iLz4KIAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0idHJ1ZSIvPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHthcHBuYW1lfSIvPgogICAgICAgICA8L2FudGNhbGw+CiAKLQkgICAgPGRlbGV0ZSBmaWxlPSIke3dlYi54bWx9Ii8+Ci0JICAgIDxkZWxldGUgZmlsZT0iJHtzdW4td2ViLnhtbH0iLz4KKyAgICAgICAgPGRlbGV0ZSBmaWxlPSIke3dlYi54bWx9Ii8+CisgICAgICAgIDxkZWxldGUgZmlsZT0iJHtzdW4td2ViLnhtbH0iLz4KIAogICAgIDwvdGFyZ2V0PgogCi0gICAgPCEtLSB2YXJpYWJsZXMgbmVlZGVkIGJ5IGN1c3RvbS1idWlsZCAKKyAgICA8IS0tIHZhcmlhYmxlcyBuZWVkZWQgYnkgY3VzdG9tLWJ1aWxkCiAgICAgICAgICAxLiBqZGJjLnJlYWxtLnBhc3MKICAgICAgICAgIDIuIGpkYmMucmVhbG0udXNlcgogICAgICAgICAgMy4gYXBwbmFtZQpAQCAtODkxLDcgKzg5MSw3IEBACiAKICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iSHR0cEJhc2ljQXV0aFRlc3QiIGZvcms9InRydWUiPgogICAgICAgICA8Y2xhc3NwYXRoPgotICAJICAgICAgIDxwYXRoZWxlbWVudCBwYXRoPSIke2J1aWxkLmNsYXNzZXMuZGlyfToke3MxYXN0ZXN0LmNsYXNzcGF0aH0iLz4KKyAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgcGF0aD0iJHtidWlsZC5jbGFzc2VzLmRpcn06JHtzMWFzdGVzdC5jbGFzc3BhdGh9Ii8+CiAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8YXJnIHZhbHVlPSItdXJsIi8+CiAgICAgICAgIDxhcmcgdmFsdWU9Imh0dHA6Ly8ke2h0dHAuaG9zdH06JHtodHRwLnBvcnR9LyR7YXBwbmFtZX0vVGVzdFNlcnZsZXQiLz4KQEAgLTkxNCw3ICs5MTQsNyBAQAogCiAgICAgICA8amF2YSBjbGFzc25hbWU9Ikh0dHBCYXNpY0F1dGhUZXN0IiBmb3JrPSJ0cnVlIj4KICAgICAgICAgPGNsYXNzcGF0aD4KLSAgCSAgICAgICA8cGF0aGVsZW1lbnQgcGF0aD0iJHtidWlsZC5jbGFzc2VzLmRpcn06JHtzMWFzdGVzdC5jbGFzc3BhdGh9Ii8+CisgICAgICAgICAgICAgPHBhdGhlbGVtZW50IHBhdGg9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9OiR7czFhc3Rlc3QuY2xhc3NwYXRofSIvPgogICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPGFyZyB2YWx1ZT0iLXVybCIvPgogICAgICAgICA8YXJnIHZhbHVlPSJodHRwOi8vJHtodHRwLmhvc3R9OiR7aHR0cC5wb3J0fS8ke2FwcG5hbWV9L1Rlc3RTZXJ2bGV0Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qZGJjcmVhbG0vY2xpZW50L0h0dHBCYXNpY0F1dGhUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qZGJjcmVhbG0vY2xpZW50L0h0dHBCYXNpY0F1dGhUZXN0LmphdmEKaW5kZXggNzcwZWY3OS4uMTNjNDNkYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamRiY3JlYWxtL2NsaWVudC9IdHRwQmFzaWNBdXRoVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2pkYmNyZWFsbS9jbGllbnQvSHR0cEJhc2ljQXV0aFRlc3QuamF2YQpAQCAtMjIsNyArMjIsNyBAQAogCiBwdWJsaWMgY2xhc3MgSHR0cEJhc2ljQXV0aFRlc3QgaW1wbGVtZW50cyBSdW5uYWJsZSB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHByaXZhdGUgYm9vbGVhbiByZXN1bHQgPSB0cnVlOwpAQCAtNjYsNyArNjYsNyBAQAogCiAgICAgICAgIFRocmVhZCB0YXJyYXlbXSA9IG5ldyBUaHJlYWRbdGhyZWFkQ291bnRdOwogCi0gICAgICAgIGZvcihpbnQgaT0wOyBpPHRocmVhZENvdW50OyBpKyspIAorICAgICAgICBmb3IoaW50IGk9MDsgaTx0aHJlYWRDb3VudDsgaSsrKQogICAgICAgICAgICAgdGFycmF5W2ldID0gbmV3IFRocmVhZCh0aGlzLCAiSHR0cC1yZXF1ZXN0LXRocmVhZC0iICsgaSk7CiAKICAgICAgICAgZm9yKGludCBpPTA7IGk8dGhyZWFkQ291bnQ7IGkrKykKQEAgLTkxLDExICs5MSwxMSBAQAogCiAgICAgICAgIHN0ZERldiA9IE1hdGgucG93KHN0ZERldiwgMC41KTsKIAotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRvdGFsIHJlcXVlc3RzOiAiICsgKHN1eGVzQ291bnQrZmFpbHVyZUNvdW50KSArIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwgc3VjY2VzcyBjb3VudDogIiArIHN1eGVzQ291bnQgKyAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUb3RhbCByZXF1ZXN0czogIiArIChzdXhlc0NvdW50K2ZhaWx1cmVDb3VudCkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwgc3VjY2VzcyBjb3VudDogIiArIHN1eGVzQ291bnQgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwgZmFpbHVyZSBjb3VudDogIiArIGZhaWx1cmVDb3VudCk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTWluL01heC9BdmcvU3RkRGV2OiAobWlsbGlzZWNvbmRzKSAiICsgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5UaW1lICsgIi8iICsgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTWluL01heC9BdmcvU3RkRGV2OiAobWlsbGlzZWNvbmRzKSAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pblRpbWUgKyAiLyIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4VGltZSArICIvIiArIGF2Z1RpbWUgKyAiLyIgKyBzdGREZXYpOwogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIkpEQkNSZWFsbSB0ZXN0IGZvciBVUkwgIiArIHVybCk7CkBAIC0xMDYsNyArMTA2LDcgQEAKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgeyAvLyBuZWdhdGl2ZSB0ZXN0IAorICAgICAgICB9IGVsc2UgeyAvLyBuZWdhdGl2ZSB0ZXN0CiAgICAgICAgICAgICBpZiggcmVzdWx0ICkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0xNDMsNyArMTQzLDcgQEAKICAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQodGhpcykgewogICAgICAgICAgICAgICAgICAgICBmYWlsdXJlQ291bnQrKzsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gdGVzdCBmYWlsZWQod2VsbCBmYWlsZWQgaWYgaXRzIGEgcG9zdGl2ZSB0ZXN0LCB0aGlzCiAgICAgICAgICAgICAgICAgLy8gaXMgZXhwZWN0ZWQgaWYgaXRzIGEgbmVnYXRpdmUgdGVzdCkKIApAQCAtMTU2LDcgKzE1Niw3IEBACiAKICAgICBwcm90ZWN0ZWQgdm9pZCBydW4wKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0TmFtZSgpICsgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldE5hbWUoKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIC0gcnVubmluZyAuLi4iKTsKICAgICAgICAgVVJMIHUgPSBuZXcgVVJMKHVybCk7CiAgICAgICAgIFVSTENvbm5lY3Rpb24gdWNvbm4gPSB1Lm9wZW5Db25uZWN0aW9uKCk7CkBAIC0yMjAsNyArMjIwLDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5leGl0KDEpOwogICAgICAgICB9CiAKLSAgICAgICAgSHR0cEJhc2ljQXV0aFRlc3QgdGVzdCA9IAorICAgICAgICBIdHRwQmFzaWNBdXRoVGVzdCB0ZXN0ID0KICAgICAgICAgICAgIG5ldyBIdHRwQmFzaWNBdXRoVGVzdCh1cmwsIHVzZXIsIHBhc3MsIHRjLCBsYywgcG9zaXRpdmVUZXN0KTsKICAgICAgICAgdGVzdC5kb1Rlc3QoKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qZGJjcmVhbG0vY3JlYXRlLWF1dGgtc2NoZW1hLW9yYWNsZS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qZGJjcmVhbG0vY3JlYXRlLWF1dGgtc2NoZW1hLW9yYWNsZS5zcWwKaW5kZXggMmMzYTQyZC4uYTJmZDQxZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamRiY3JlYWxtL2NyZWF0ZS1hdXRoLXNjaGVtYS1vcmFjbGUuc3FsCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2pkYmNyZWFsbS9jcmVhdGUtYXV0aC1zY2hlbWEtb3JhY2xlLnNxbApAQCAtMSw4NCArMSw4NCBAQAogQ1JFQVRFIFRBQkxFIFVTRVJfVEFCTEUgKAotICAgICAgICBVU0VSTkFNRSBWQVJDSEFSICgyNTUpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLCAKKyAgICAgICAgVVNFUk5BTUUgVkFSQ0hBUiAoMjU1KSBQUklNQVJZIEtFWSBOT1QgTlVMTCwKICAgICAgICAgUEFTU1dPUkQgVkFSQ0hBUiAoMjU1KQogKTsKIAogQ1JFQVRFIFRBQkxFIFVTRVJfVEFCTEVfQkFTRTY0ICgKLSAgICAgICAgVVNFUk5BTUUgVkFSQ0hBUiAoMjU1KSBQUklNQVJZIEtFWSBOT1QgTlVMTCwgCisgICAgICAgIFVTRVJOQU1FIFZBUkNIQVIgKDI1NSkgUFJJTUFSWSBLRVkgTk9UIE5VTEwsCiAgICAgICAgIFBBU1NXT1JEIFZBUkNIQVIgKDI1NSkKICk7CiAKIENSRUFURSBUQUJMRSBVU0VSX1RBQkxFX0hFWCAoCi0gICAgICAgIFVTRVJOQU1FIFZBUkNIQVIgKDI1NSkgUFJJTUFSWSBLRVkgTk9UIE5VTEwsIAorICAgICAgICBVU0VSTkFNRSBWQVJDSEFSICgyNTUpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLAogICAgICAgICBQQVNTV09SRCBWQVJDSEFSICgyNTUpCiApOwogCiAKIAogQ1JFQVRFIFRBQkxFIFVTRVJfVEFCTEVfTUQyX0JBU0U2NCAoCi0gICAgICAgIFVTRVJOQU1FIFZBUkNIQVIgKDI1NSkgUFJJTUFSWSBLRVkgTk9UIE5VTEwsIAotICAgICAgICBQQVNTV09SRCBWQVJDSEFSICgyNTUpIAorICAgICAgICBVU0VSTkFNRSBWQVJDSEFSICgyNTUpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLAorICAgICAgICBQQVNTV09SRCBWQVJDSEFSICgyNTUpCiApOwogCiBDUkVBVEUgVEFCTEUgVVNFUl9UQUJMRV9NRDVfQkFTRTY0ICgKLSAgICAgICAgVVNFUk5BTUUgVkFSQ0hBUiAoMjU1KSBQUklNQVJZIEtFWSBOT1QgTlVMTCwgCi0gICAgICAgIFBBU1NXT1JEIFZBUkNIQVIgKDI1NSkgCisgICAgICAgIFVTRVJOQU1FIFZBUkNIQVIgKDI1NSkgUFJJTUFSWSBLRVkgTk9UIE5VTEwsCisgICAgICAgIFBBU1NXT1JEIFZBUkNIQVIgKDI1NSkKICk7CiAKIENSRUFURSBUQUJMRSBVU0VSX1RBQkxFX1NIQV9CQVNFNjQgKAotICAgICAgICBVU0VSTkFNRSBWQVJDSEFSICgyNTUpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLCAKLSAgICAgICAgUEFTU1dPUkQgVkFSQ0hBUiAoMjU1KSAKKyAgICAgICAgVVNFUk5BTUUgVkFSQ0hBUiAoMjU1KSBQUklNQVJZIEtFWSBOT1QgTlVMTCwKKyAgICAgICAgUEFTU1dPUkQgVkFSQ0hBUiAoMjU1KQogKTsKIAogQ1JFQVRFIFRBQkxFIFVTRVJfVEFCTEVfU0hBMjU2X0JBU0U2NCAoCi0gICAgICAgIFVTRVJOQU1FIFZBUkNIQVIgKDI1NSkgUFJJTUFSWSBLRVkgTk9UIE5VTEwsIAotICAgICAgICBQQVNTV09SRCBWQVJDSEFSICgyNTUpIAorICAgICAgICBVU0VSTkFNRSBWQVJDSEFSICgyNTUpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLAorICAgICAgICBQQVNTV09SRCBWQVJDSEFSICgyNTUpCiApOwogCiBDUkVBVEUgVEFCTEUgVVNFUl9UQUJMRV9TSEEzODRfQkFTRTY0ICgKLSAgICAgICAgVVNFUk5BTUUgVkFSQ0hBUiAoMjU1KSBQUklNQVJZIEtFWSBOT1QgTlVMTCwgCi0gICAgICAgIFBBU1NXT1JEIFZBUkNIQVIgKDI1NSkgCisgICAgICAgIFVTRVJOQU1FIFZBUkNIQVIgKDI1NSkgUFJJTUFSWSBLRVkgTk9UIE5VTEwsCisgICAgICAgIFBBU1NXT1JEIFZBUkNIQVIgKDI1NSkKICk7CiBDUkVBVEUgVEFCTEUgVVNFUl9UQUJMRV9TSEE1MTJfQkFTRTY0ICgKLSAgICAgICAgVVNFUk5BTUUgVkFSQ0hBUiAoMjU1KSBQUklNQVJZIEtFWSBOT1QgTlVMTCwgCi0gICAgICAgIFBBU1NXT1JEIFZBUkNIQVIgKDI1NSkgCisgICAgICAgIFVTRVJOQU1FIFZBUkNIQVIgKDI1NSkgUFJJTUFSWSBLRVkgTk9UIE5VTEwsCisgICAgICAgIFBBU1NXT1JEIFZBUkNIQVIgKDI1NSkKICk7CiAKIAogCiBDUkVBVEUgVEFCTEUgVVNFUl9UQUJMRV9NRDJfSEVYICgKLSAgICAgICAgVVNFUk5BTUUgVkFSQ0hBUiAoMjU1KSBQUklNQVJZIEtFWSBOT1QgTlVMTCwgCi0gICAgICAgIFBBU1NXT1JEIFZBUkNIQVIgKDI1NSkgCisgICAgICAgIFVTRVJOQU1FIFZBUkNIQVIgKDI1NSkgUFJJTUFSWSBLRVkgTk9UIE5VTEwsCisgICAgICAgIFBBU1NXT1JEIFZBUkNIQVIgKDI1NSkKICk7CiAKIENSRUFURSBUQUJMRSBVU0VSX1RBQkxFX01ENV9IRVggKAotICAgICAgICBVU0VSTkFNRSBWQVJDSEFSICgyNTUpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLCAKLSAgICAgICAgUEFTU1dPUkQgVkFSQ0hBUiAoMjU1KSAKKyAgICAgICAgVVNFUk5BTUUgVkFSQ0hBUiAoMjU1KSBQUklNQVJZIEtFWSBOT1QgTlVMTCwKKyAgICAgICAgUEFTU1dPUkQgVkFSQ0hBUiAoMjU1KQogKTsKIAogQ1JFQVRFIFRBQkxFIFVTRVJfVEFCTEVfU0hBX0hFWCAoCi0gICAgICAgIFVTRVJOQU1FIFZBUkNIQVIgKDI1NSkgUFJJTUFSWSBLRVkgTk9UIE5VTEwsIAotICAgICAgICBQQVNTV09SRCBWQVJDSEFSICgyNTUpIAorICAgICAgICBVU0VSTkFNRSBWQVJDSEFSICgyNTUpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLAorICAgICAgICBQQVNTV09SRCBWQVJDSEFSICgyNTUpCiApOwogCiBDUkVBVEUgVEFCTEUgVVNFUl9UQUJMRV9TSEEyNTZfSEVYICgKLSAgICAgICAgVVNFUk5BTUUgVkFSQ0hBUiAoMjU1KSBQUklNQVJZIEtFWSBOT1QgTlVMTCwgCi0gICAgICAgIFBBU1NXT1JEIFZBUkNIQVIgKDI1NSkgCisgICAgICAgIFVTRVJOQU1FIFZBUkNIQVIgKDI1NSkgUFJJTUFSWSBLRVkgTk9UIE5VTEwsCisgICAgICAgIFBBU1NXT1JEIFZBUkNIQVIgKDI1NSkKICk7CiAKIENSRUFURSBUQUJMRSBVU0VSX1RBQkxFX1NIQTM4NF9IRVggKAotICAgICAgICBVU0VSTkFNRSBWQVJDSEFSICgyNTUpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLCAKLSAgICAgICAgUEFTU1dPUkQgVkFSQ0hBUiAoMjU1KSAKKyAgICAgICAgVVNFUk5BTUUgVkFSQ0hBUiAoMjU1KSBQUklNQVJZIEtFWSBOT1QgTlVMTCwKKyAgICAgICAgUEFTU1dPUkQgVkFSQ0hBUiAoMjU1KQogKTsKIAogQ1JFQVRFIFRBQkxFIFVTRVJfVEFCTEVfU0hBNTEyX0hFWCAoCi0gICAgICAgIFVTRVJOQU1FIFZBUkNIQVIgKDI1NSkgUFJJTUFSWSBLRVkgTk9UIE5VTEwsIAotICAgICAgICBQQVNTV09SRCBWQVJDSEFSICgyNTUpIAorICAgICAgICBVU0VSTkFNRSBWQVJDSEFSICgyNTUpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLAorICAgICAgICBQQVNTV09SRCBWQVJDSEFSICgyNTUpCiApOwogCiAKIAogQ1JFQVRFIFRBQkxFIEdST1VQX1RBQkxFICgKLSAgICAgICAgVVNFUk5BTUUgVkFSQ0hBUiAoMjU1KSBOT1QgTlVMTCwgCisgICAgICAgIFVTRVJOQU1FIFZBUkNIQVIgKDI1NSkgTk9UIE5VTEwsCiAgICAgICAgIEdST1VQTkFNRSBWQVJDSEFSICgyNTUpCiApOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamRiY3JlYWxtL2NyZWF0ZS1hdXRoLXNjaGVtYS5zcWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qZGJjcmVhbG0vY3JlYXRlLWF1dGgtc2NoZW1hLnNxbAppbmRleCAyYzNhNDJkLi5hMmZkNDFmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qZGJjcmVhbG0vY3JlYXRlLWF1dGgtc2NoZW1hLnNxbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qZGJjcmVhbG0vY3JlYXRlLWF1dGgtc2NoZW1hLnNxbApAQCAtMSw4NCArMSw4NCBAQAogQ1JFQVRFIFRBQkxFIFVTRVJfVEFCTEUgKAotICAgICAgICBVU0VSTkFNRSBWQVJDSEFSICgyNTUpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLCAKKyAgICAgICAgVVNFUk5BTUUgVkFSQ0hBUiAoMjU1KSBQUklNQVJZIEtFWSBOT1QgTlVMTCwKICAgICAgICAgUEFTU1dPUkQgVkFSQ0hBUiAoMjU1KQogKTsKIAogQ1JFQVRFIFRBQkxFIFVTRVJfVEFCTEVfQkFTRTY0ICgKLSAgICAgICAgVVNFUk5BTUUgVkFSQ0hBUiAoMjU1KSBQUklNQVJZIEtFWSBOT1QgTlVMTCwgCisgICAgICAgIFVTRVJOQU1FIFZBUkNIQVIgKDI1NSkgUFJJTUFSWSBLRVkgTk9UIE5VTEwsCiAgICAgICAgIFBBU1NXT1JEIFZBUkNIQVIgKDI1NSkKICk7CiAKIENSRUFURSBUQUJMRSBVU0VSX1RBQkxFX0hFWCAoCi0gICAgICAgIFVTRVJOQU1FIFZBUkNIQVIgKDI1NSkgUFJJTUFSWSBLRVkgTk9UIE5VTEwsIAorICAgICAgICBVU0VSTkFNRSBWQVJDSEFSICgyNTUpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLAogICAgICAgICBQQVNTV09SRCBWQVJDSEFSICgyNTUpCiApOwogCiAKIAogQ1JFQVRFIFRBQkxFIFVTRVJfVEFCTEVfTUQyX0JBU0U2NCAoCi0gICAgICAgIFVTRVJOQU1FIFZBUkNIQVIgKDI1NSkgUFJJTUFSWSBLRVkgTk9UIE5VTEwsIAotICAgICAgICBQQVNTV09SRCBWQVJDSEFSICgyNTUpIAorICAgICAgICBVU0VSTkFNRSBWQVJDSEFSICgyNTUpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLAorICAgICAgICBQQVNTV09SRCBWQVJDSEFSICgyNTUpCiApOwogCiBDUkVBVEUgVEFCTEUgVVNFUl9UQUJMRV9NRDVfQkFTRTY0ICgKLSAgICAgICAgVVNFUk5BTUUgVkFSQ0hBUiAoMjU1KSBQUklNQVJZIEtFWSBOT1QgTlVMTCwgCi0gICAgICAgIFBBU1NXT1JEIFZBUkNIQVIgKDI1NSkgCisgICAgICAgIFVTRVJOQU1FIFZBUkNIQVIgKDI1NSkgUFJJTUFSWSBLRVkgTk9UIE5VTEwsCisgICAgICAgIFBBU1NXT1JEIFZBUkNIQVIgKDI1NSkKICk7CiAKIENSRUFURSBUQUJMRSBVU0VSX1RBQkxFX1NIQV9CQVNFNjQgKAotICAgICAgICBVU0VSTkFNRSBWQVJDSEFSICgyNTUpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLCAKLSAgICAgICAgUEFTU1dPUkQgVkFSQ0hBUiAoMjU1KSAKKyAgICAgICAgVVNFUk5BTUUgVkFSQ0hBUiAoMjU1KSBQUklNQVJZIEtFWSBOT1QgTlVMTCwKKyAgICAgICAgUEFTU1dPUkQgVkFSQ0hBUiAoMjU1KQogKTsKIAogQ1JFQVRFIFRBQkxFIFVTRVJfVEFCTEVfU0hBMjU2X0JBU0U2NCAoCi0gICAgICAgIFVTRVJOQU1FIFZBUkNIQVIgKDI1NSkgUFJJTUFSWSBLRVkgTk9UIE5VTEwsIAotICAgICAgICBQQVNTV09SRCBWQVJDSEFSICgyNTUpIAorICAgICAgICBVU0VSTkFNRSBWQVJDSEFSICgyNTUpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLAorICAgICAgICBQQVNTV09SRCBWQVJDSEFSICgyNTUpCiApOwogCiBDUkVBVEUgVEFCTEUgVVNFUl9UQUJMRV9TSEEzODRfQkFTRTY0ICgKLSAgICAgICAgVVNFUk5BTUUgVkFSQ0hBUiAoMjU1KSBQUklNQVJZIEtFWSBOT1QgTlVMTCwgCi0gICAgICAgIFBBU1NXT1JEIFZBUkNIQVIgKDI1NSkgCisgICAgICAgIFVTRVJOQU1FIFZBUkNIQVIgKDI1NSkgUFJJTUFSWSBLRVkgTk9UIE5VTEwsCisgICAgICAgIFBBU1NXT1JEIFZBUkNIQVIgKDI1NSkKICk7CiBDUkVBVEUgVEFCTEUgVVNFUl9UQUJMRV9TSEE1MTJfQkFTRTY0ICgKLSAgICAgICAgVVNFUk5BTUUgVkFSQ0hBUiAoMjU1KSBQUklNQVJZIEtFWSBOT1QgTlVMTCwgCi0gICAgICAgIFBBU1NXT1JEIFZBUkNIQVIgKDI1NSkgCisgICAgICAgIFVTRVJOQU1FIFZBUkNIQVIgKDI1NSkgUFJJTUFSWSBLRVkgTk9UIE5VTEwsCisgICAgICAgIFBBU1NXT1JEIFZBUkNIQVIgKDI1NSkKICk7CiAKIAogCiBDUkVBVEUgVEFCTEUgVVNFUl9UQUJMRV9NRDJfSEVYICgKLSAgICAgICAgVVNFUk5BTUUgVkFSQ0hBUiAoMjU1KSBQUklNQVJZIEtFWSBOT1QgTlVMTCwgCi0gICAgICAgIFBBU1NXT1JEIFZBUkNIQVIgKDI1NSkgCisgICAgICAgIFVTRVJOQU1FIFZBUkNIQVIgKDI1NSkgUFJJTUFSWSBLRVkgTk9UIE5VTEwsCisgICAgICAgIFBBU1NXT1JEIFZBUkNIQVIgKDI1NSkKICk7CiAKIENSRUFURSBUQUJMRSBVU0VSX1RBQkxFX01ENV9IRVggKAotICAgICAgICBVU0VSTkFNRSBWQVJDSEFSICgyNTUpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLCAKLSAgICAgICAgUEFTU1dPUkQgVkFSQ0hBUiAoMjU1KSAKKyAgICAgICAgVVNFUk5BTUUgVkFSQ0hBUiAoMjU1KSBQUklNQVJZIEtFWSBOT1QgTlVMTCwKKyAgICAgICAgUEFTU1dPUkQgVkFSQ0hBUiAoMjU1KQogKTsKIAogQ1JFQVRFIFRBQkxFIFVTRVJfVEFCTEVfU0hBX0hFWCAoCi0gICAgICAgIFVTRVJOQU1FIFZBUkNIQVIgKDI1NSkgUFJJTUFSWSBLRVkgTk9UIE5VTEwsIAotICAgICAgICBQQVNTV09SRCBWQVJDSEFSICgyNTUpIAorICAgICAgICBVU0VSTkFNRSBWQVJDSEFSICgyNTUpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLAorICAgICAgICBQQVNTV09SRCBWQVJDSEFSICgyNTUpCiApOwogCiBDUkVBVEUgVEFCTEUgVVNFUl9UQUJMRV9TSEEyNTZfSEVYICgKLSAgICAgICAgVVNFUk5BTUUgVkFSQ0hBUiAoMjU1KSBQUklNQVJZIEtFWSBOT1QgTlVMTCwgCi0gICAgICAgIFBBU1NXT1JEIFZBUkNIQVIgKDI1NSkgCisgICAgICAgIFVTRVJOQU1FIFZBUkNIQVIgKDI1NSkgUFJJTUFSWSBLRVkgTk9UIE5VTEwsCisgICAgICAgIFBBU1NXT1JEIFZBUkNIQVIgKDI1NSkKICk7CiAKIENSRUFURSBUQUJMRSBVU0VSX1RBQkxFX1NIQTM4NF9IRVggKAotICAgICAgICBVU0VSTkFNRSBWQVJDSEFSICgyNTUpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLCAKLSAgICAgICAgUEFTU1dPUkQgVkFSQ0hBUiAoMjU1KSAKKyAgICAgICAgVVNFUk5BTUUgVkFSQ0hBUiAoMjU1KSBQUklNQVJZIEtFWSBOT1QgTlVMTCwKKyAgICAgICAgUEFTU1dPUkQgVkFSQ0hBUiAoMjU1KQogKTsKIAogQ1JFQVRFIFRBQkxFIFVTRVJfVEFCTEVfU0hBNTEyX0hFWCAoCi0gICAgICAgIFVTRVJOQU1FIFZBUkNIQVIgKDI1NSkgUFJJTUFSWSBLRVkgTk9UIE5VTEwsIAotICAgICAgICBQQVNTV09SRCBWQVJDSEFSICgyNTUpIAorICAgICAgICBVU0VSTkFNRSBWQVJDSEFSICgyNTUpIFBSSU1BUlkgS0VZIE5PVCBOVUxMLAorICAgICAgICBQQVNTV09SRCBWQVJDSEFSICgyNTUpCiApOwogCiAKIAogQ1JFQVRFIFRBQkxFIEdST1VQX1RBQkxFICgKLSAgICAgICAgVVNFUk5BTUUgVkFSQ0hBUiAoMjU1KSBOT1QgTlVMTCwgCisgICAgICAgIFVTRVJOQU1FIFZBUkNIQVIgKDI1NSkgTk9UIE5VTEwsCiAgICAgICAgIEdST1VQTkFNRSBWQVJDSEFSICgyNTUpCiApOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamRiY3JlYWxtL3V0aWwvUG9wdWxhdGVEQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamRiY3JlYWxtL3V0aWwvUG9wdWxhdGVEQi5qYXZhCmluZGV4IGY5YjgwOTguLjc4YzE2YjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2pkYmNyZWFsbS91dGlsL1BvcHVsYXRlREIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qZGJjcmVhbG0vdXRpbC9Qb3B1bGF0ZURCLmphdmEKQEAgLTI0LDQxICsyNCw0MSBAQAogcHVibGljIGNsYXNzIFBvcHVsYXRlREIgewogCiAgICAgLy8gdXNlcm5hbWUvcGFzc3dvcmRzCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW11bXSB1c2Vycz0geyB7Inh5eiIsICJ4eXoifSwgCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW11bXSB1c2Vycz0geyB7Inh5eiIsICJ4eXoifSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsiYWJjIiwgImFiYyJ9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJxd2VydCIsICJxd2VydCJ9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJ0ZXN0eSIsICJ0ZXN0eSJ9IH07IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJ0ZXN0eSIsICJ0ZXN0eSJ9IH07CiAKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXVtdIHVzZXJzX0JBU0U2ND0gCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHsicXdlcnRCQVNFNjQiLCAicXdlcnRCQVNFNjQifSB9OyAKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXVtdIHVzZXJzX0hFWD0gCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHsicXdlcnRIRVgiLCAicXdlcnRIRVgifSB9OyAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXVtdIHVzZXJzX0JBU0U2ND0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgeyJxd2VydEJBU0U2NCIsICJxd2VydEJBU0U2NCJ9IH07CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW11bXSB1c2Vyc19IRVg9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHsicXdlcnRIRVgiLCAicXdlcnRIRVgifSB9OwogCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW11bXSB1c2Vyc19NRDJfQkFTRTY0PSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgeyB7InF3ZXJ0TUQyQkFTRTY0IiwgInF3ZXJ0TUQyQkFTRTY0In0gfTsgCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW11bXSB1c2Vyc19NRDVfQkFTRTY0PSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgeyB7InF3ZXJ0TUQ1QkFTRTY0IiwgInF3ZXJ0TUQ1QkFTRTY0In0gfTsgCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW11bXSB1c2Vyc19TSEFfQkFTRTY0PSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgeyB7InF3ZXJ0U0hBQkFTRTY0IiwgInF3ZXJ0U0hBQkFTRTY0In0gfTsgCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW11bXSB1c2Vyc19TSEEyNTZfQkFTRTY0PSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgeyB7InF3ZXJ0U0hBMjU2QkFTRTY0IiwgInF3ZXJ0U0hBMjU2QkFTRTY0In0gfTsgCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW11bXSB1c2Vyc19TSEEzODRfQkFTRTY0PSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgeyB7InF3ZXJ0U0hBMzg0QkFTRTY0IiwgInF3ZXJ0U0hBMzg0QkFTRTY0In0gfTsgCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW11bXSB1c2Vyc19TSEE1MTJfQkFTRTY0PSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgeyB7InF3ZXJ0U0hBNTEyQkFTRTY0IiwgInF3ZXJ0U0hBNTEyQkFTRTY0In0gfTsgCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW11bXSB1c2Vyc19NRDJfQkFTRTY0PQorICAgICAgICAgICAgICAgICAgICAgICAgICB7IHsicXdlcnRNRDJCQVNFNjQiLCAicXdlcnRNRDJCQVNFNjQifSB9OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdW10gdXNlcnNfTUQ1X0JBU0U2ND0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgeyB7InF3ZXJ0TUQ1QkFTRTY0IiwgInF3ZXJ0TUQ1QkFTRTY0In0gfTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXVtdIHVzZXJzX1NIQV9CQVNFNjQ9CisgICAgICAgICAgICAgICAgICAgICAgICAgIHsgeyJxd2VydFNIQUJBU0U2NCIsICJxd2VydFNIQUJBU0U2NCJ9IH07CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW11bXSB1c2Vyc19TSEEyNTZfQkFTRTY0PQorICAgICAgICAgICAgICAgICAgICAgICAgICB7IHsicXdlcnRTSEEyNTZCQVNFNjQiLCAicXdlcnRTSEEyNTZCQVNFNjQifSB9OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdW10gdXNlcnNfU0hBMzg0X0JBU0U2ND0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgeyB7InF3ZXJ0U0hBMzg0QkFTRTY0IiwgInF3ZXJ0U0hBMzg0QkFTRTY0In0gfTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXVtdIHVzZXJzX1NIQTUxMl9CQVNFNjQ9CisgICAgICAgICAgICAgICAgICAgICAgICAgIHsgeyJxd2VydFNIQTUxMkJBU0U2NCIsICJxd2VydFNIQTUxMkJBU0U2NCJ9IH07CiAKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXVtdIHVzZXJzX01EMl9IRVg9IAotICAgICAgICAgICAgICAgICAgICAgICAgICB7IHsicXdlcnRNRDJIRVgiLCAicXdlcnRNRDJIRVgifSB9OyAKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXVtdIHVzZXJzX01ENV9IRVg9IAotICAgICAgICAgICAgICAgICAgICAgICAgICB7IHsicXdlcnRNRDVIRVgiLCAicXdlcnRNRDVIRVgifSB9OyAKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXVtdIHVzZXJzX1NIQV9IRVg9IAotICAgICAgICAgICAgICAgICAgICAgICAgICB7IHsicXdlcnRTSEFIRVgiLCAicXdlcnRTSEFIRVgifSB9OyAKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXVtdIHVzZXJzX1NIQTI1Nl9IRVg9IAotICAgICAgICAgICAgICAgICAgICAgICAgICB7IHsicXdlcnRTSEEyNTZIRVgiLCAicXdlcnRTSEEyNTZIRVgifSB9OyAKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXVtdIHVzZXJzX1NIQTM4NF9IRVg9IAotICAgICAgICAgICAgICAgICAgICAgICAgICB7IHsicXdlcnRTSEEzODRIRVgiLCAicXdlcnRTSEEzODRIRVgifSB9OyAKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXVtdIHVzZXJzX1NIQTUxMl9IRVg9IAotICAgICAgICAgICAgICAgICAgICAgICAgICB7IHsicXdlcnRTSEE1MTJIRVgiLCAicXdlcnRTSEE1MTJIRVgifSB9OyAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXVtdIHVzZXJzX01EMl9IRVg9CisgICAgICAgICAgICAgICAgICAgICAgICAgIHsgeyJxd2VydE1EMkhFWCIsICJxd2VydE1EMkhFWCJ9IH07CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW11bXSB1c2Vyc19NRDVfSEVYPQorICAgICAgICAgICAgICAgICAgICAgICAgICB7IHsicXdlcnRNRDVIRVgiLCAicXdlcnRNRDVIRVgifSB9OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdW10gdXNlcnNfU0hBX0hFWD0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgeyB7InF3ZXJ0U0hBSEVYIiwgInF3ZXJ0U0hBSEVYIn0gfTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXVtdIHVzZXJzX1NIQTI1Nl9IRVg9CisgICAgICAgICAgICAgICAgICAgICAgICAgIHsgeyJxd2VydFNIQTI1NkhFWCIsICJxd2VydFNIQTI1NkhFWCJ9IH07CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW11bXSB1c2Vyc19TSEEzODRfSEVYPQorICAgICAgICAgICAgICAgICAgICAgICAgICB7IHsicXdlcnRTSEEzODRIRVgiLCAicXdlcnRTSEEzODRIRVgifSB9OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdW10gdXNlcnNfU0hBNTEyX0hFWD0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgeyB7InF3ZXJ0U0hBNTEySEVYIiwgInF3ZXJ0U0hBNTEySEVYIn0gfTsKIAogICAgIC8vIHVzZXJuYW1lL2dyb3VwbmFtZQogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdW10gZ3JvdXBzPSB7IHsieHl6IiwgInN0YWZmIn0sCkBAIC04Myw3ICs4Myw3IEBACiAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJxd2VydFNIQTM4NEhFWCIsICJzdGFmZiJ9LAogLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsicXdlcnRTSEE1MTJIRVgiLCAic3RhZmYifSwKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsidGVzdHkiLCAic3RhZmYifSB9OyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7InRlc3R5IiwgInN0YWZmIn0gfTsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBVUkxfT1BUSU9OICAgICAgID0gIi11cmwiOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBWRVJCT1NFX09QVElPTiAgID0gIi12ZXJib3NlIjsKQEAgLTkzLDQwICs5Myw0MCBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiB2ZXJib3NlID0gZmFsc2U7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgSU5TRVJUX1VTRVJfU1RNVF9DTEVBUiA9IAorICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBJTlNFUlRfVVNFUl9TVE1UX0NMRUFSID0KICAgICAgICAgImluc2VydCBpbnRvIFVTRVJfVEFCTEUgdmFsdWVzICg/LCA/KSI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIElOU0VSVF9VU0VSX1NUTVRfQkFTRTY0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIElOU0VSVF9VU0VSX1NUTVRfQkFTRTY0ID0KICAgICAgICAgImluc2VydCBpbnRvIFVTRVJfVEFCTEVfQkFTRTY0IHZhbHVlcyAoPywgPykiOwotICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBJTlNFUlRfVVNFUl9TVE1UX0hFWCA9IAorICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBJTlNFUlRfVVNFUl9TVE1UX0hFWCA9CiAgICAgICAgICJpbnNlcnQgaW50byBVU0VSX1RBQkxFX0hFWCB2YWx1ZXMgKD8sID8pIjsKIAotICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBJTlNFUlRfVVNFUl9TVE1UX01EMl9CQVNFNjQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgSU5TRVJUX1VTRVJfU1RNVF9NRDJfQkFTRTY0ID0KICAgICAgICAgImluc2VydCBpbnRvIFVTRVJfVEFCTEVfTUQyX0JBU0U2NCB2YWx1ZXMgKD8sID8pIjsKLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgSU5TRVJUX1VTRVJfU1RNVF9NRDVfQkFTRTY0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIElOU0VSVF9VU0VSX1NUTVRfTUQ1X0JBU0U2NCA9CiAgICAgICAgICJpbnNlcnQgaW50byBVU0VSX1RBQkxFX01ENV9CQVNFNjQgdmFsdWVzICg/LCA/KSI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIElOU0VSVF9VU0VSX1NUTVRfU0hBX0JBU0U2NCA9IAorICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBJTlNFUlRfVVNFUl9TVE1UX1NIQV9CQVNFNjQgPQogICAgICAgICAiaW5zZXJ0IGludG8gVVNFUl9UQUJMRV9TSEFfQkFTRTY0IHZhbHVlcyAoPywgPykiOwotICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBJTlNFUlRfVVNFUl9TVE1UX1NIQTI1Nl9CQVNFNjQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgSU5TRVJUX1VTRVJfU1RNVF9TSEEyNTZfQkFTRTY0ID0KICAgICAgICAgImluc2VydCBpbnRvIFVTRVJfVEFCTEVfU0hBMjU2X0JBU0U2NCB2YWx1ZXMgKD8sID8pIjsKLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgSU5TRVJUX1VTRVJfU1RNVF9TSEEzODRfQkFTRTY0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIElOU0VSVF9VU0VSX1NUTVRfU0hBMzg0X0JBU0U2NCA9CiAgICAgICAgICJpbnNlcnQgaW50byBVU0VSX1RBQkxFX1NIQTM4NF9CQVNFNjQgdmFsdWVzICg/LCA/KSI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIElOU0VSVF9VU0VSX1NUTVRfU0hBNTEyX0JBU0U2NCA9IAorICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBJTlNFUlRfVVNFUl9TVE1UX1NIQTUxMl9CQVNFNjQgPQogICAgICAgICAiaW5zZXJ0IGludG8gVVNFUl9UQUJMRV9TSEE1MTJfQkFTRTY0IHZhbHVlcyAoPywgPykiOwogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIElOU0VSVF9VU0VSX1NUTVRfTUQyX0hFWCA9IAorICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBJTlNFUlRfVVNFUl9TVE1UX01EMl9IRVggPQogICAgICAgICAiaW5zZXJ0IGludG8gVVNFUl9UQUJMRV9NRDJfSEVYIHZhbHVlcyAoPywgPykiOwotICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBJTlNFUlRfVVNFUl9TVE1UX01ENV9IRVggPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgSU5TRVJUX1VTRVJfU1RNVF9NRDVfSEVYID0KICAgICAgICAgImluc2VydCBpbnRvIFVTRVJfVEFCTEVfTUQ1X0hFWCB2YWx1ZXMgKD8sID8pIjsKLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgSU5TRVJUX1VTRVJfU1RNVF9TSEFfSEVYID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIElOU0VSVF9VU0VSX1NUTVRfU0hBX0hFWCA9CiAgICAgICAgICJpbnNlcnQgaW50byBVU0VSX1RBQkxFX1NIQV9IRVggdmFsdWVzICg/LCA/KSI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIElOU0VSVF9VU0VSX1NUTVRfU0hBMjU2X0hFWCA9IAorICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBJTlNFUlRfVVNFUl9TVE1UX1NIQTI1Nl9IRVggPQogICAgICAgICAiaW5zZXJ0IGludG8gVVNFUl9UQUJMRV9TSEEyNTZfSEVYIHZhbHVlcyAoPywgPykiOwotICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBJTlNFUlRfVVNFUl9TVE1UX1NIQTM4NF9IRVggPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgSU5TRVJUX1VTRVJfU1RNVF9TSEEzODRfSEVYID0KICAgICAgICAgImluc2VydCBpbnRvIFVTRVJfVEFCTEVfU0hBMzg0X0hFWCB2YWx1ZXMgKD8sID8pIjsKLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgSU5TRVJUX1VTRVJfU1RNVF9TSEE1MTJfSEVYID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIElOU0VSVF9VU0VSX1NUTVRfU0hBNTEyX0hFWCA9CiAgICAgICAgICJpbnNlcnQgaW50byBVU0VSX1RBQkxFX1NIQTUxMl9IRVggdmFsdWVzICg/LCA/KSI7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgSU5TRVJUX0dST1VQX1NUTVQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgSU5TRVJUX0dST1VQX1NUTVQgPQogICAgICAgICAiaW5zZXJ0IGludG8gR1JPVVBfVEFCTEUgdmFsdWVzICg/LCA/KSI7CiAKICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHZlcmJvc2UoU3RyaW5nIG1zZykgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamRiY3JlYWxtL3dlYi9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvamRiY3JlYWxtL3dlYi9UZXN0U2VydmxldC5qYXZhCmluZGV4IDZiNzE0YmUuLjg0MzVkOTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2pkYmNyZWFsbS93ZWIvVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qZGJjcmVhbG0vd2ViL1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTI4LDMyICsyOCwzMiBAQAogCiBwdWJsaWMgY2xhc3MgVGVzdFNlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAKLQkvLyBTZWN1cml0eSByb2xlIHJlZmVyZW5jZXMuCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGVtcF9zZWNyb2xlX3JlZiAgID0gInN0YWZmIjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgYWRtaW5fc2Vjcm9sZV9yZWYgPSAiQURNSU4iOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBtZ3Jfc2Vjcm9sZV9yZWYgICA9ICJNYW5hZ2VyIjsKKyAgICAvLyBTZWN1cml0eSByb2xlIHJlZmVyZW5jZXMuCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGVtcF9zZWNyb2xlX3JlZiAgID0gInN0YWZmIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgYWRtaW5fc2Vjcm9sZV9yZWYgPSAiQURNSU4iOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBtZ3Jfc2Vjcm9sZV9yZWYgICA9ICJNYW5hZ2VyIjsKIAogICAgICAgICBTdHJpbmcgdXNlcj0icXdlcnQiOwotICAgIAlQcm9wZXJ0aWVzIHByb3BzPW51bGw7CisgICAgICAgIFByb3BlcnRpZXMgcHJvcHM9bnVsbDsKIAogCi0gICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAKLQl7CisgICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbgorICAgIHsKICAgICAgICAgICAgIFByaW50V3JpdGVyIG91dD0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJyPkJhc2ljIEF1dGhlbnRpY2F0aW9uIHRlc3RzIGZyb20gU2VydmxldDogVGVzdDEsVGVzdDIsVGVzdDMgIik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJyPkF1dGhvcml6YXRpb24gdGVzdCBmcm9tIFNlcnZsZXQ6IFRlc3Q0LFRlc3Q1LT4gSHR0cFNlcnZsZXRSZXF1ZXN0LmlzVXNlckluUm9sZSgpIGF1dGhvcml6YXRpb24gZnJvbSBTZXJ2bGV0LiIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHRlc3QxKHJlcXVlc3QsIHJlc3BvbnNlLCBvdXQpOwogICAgICAgICAgICAgdGVzdDIocmVxdWVzdCwgcmVzcG9uc2UsIG91dCk7CiAgICAgICAgICAgICB0ZXN0MyhyZXF1ZXN0LCByZXNwb25zZSwgb3V0KTsKICAgICAgICAgICAgIHRlc3Q0KHJlcXVlc3QsIHJlc3BvbnNlLCBvdXQpOwogICAgICAgICAgICAgdGVzdDUocmVxdWVzdCwgcmVzcG9uc2UsIG91dCk7Ci0JfQorICAgIH0KIAogCiAgICAgICAgIC8vVGVzdHMgYmVnaW4KLQlwdWJsaWMgdm9pZCB0ZXN0MShIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSwgUHJpbnRXcml0ZXIgb3V0KQotCXsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0MShIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSwgUHJpbnRXcml0ZXIgb3V0KQorICAgIHsKICAgICAgICAgICAgICAgICAvL0NoZWNrIHRoZSBhdXRoIHR5cGUgLSByZXF1ZXN0LmdldEF1dGhUeXBlKCkKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJyPjxicj5UZXN0MS4gUG9zdGl2ZSBjaGVjayBmb3IgdGhlIGNvcnJlY3QgYXV0aGVudGljYXRpb24gdHlwZSIpOwogICAgICAgICAgICAgICAgIFN0cmluZyBhdXRodHlwZT1yZXF1ZXN0LmdldEF1dGhUeXBlKCk7CkBAIC05OCw3ICs5OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJyPkh0dHBTZXJ2bGV0UmVxdWVzdC5pc1VzZXJJblJvbGUoKSB0ZXN0IEZhaWxlZCEiKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxicj5JbmZvOnJlcXVlc3QuaXNVc2VySW5Sb2xlKFwiIitlbXBfc2Vjcm9sZV9yZWYrIlwiKSBpcz0gIitpc0luUHJvcGVyUm9sZSk7Ci0JfQorICAgIH0KIAogICAgICAgICAvL1Rlc3Q1IC0gTmVnYXRpdmUgdGVzdCBmb3IgY2hlY2tpbmcgdGhlIHVzZXIncyBwcm9wZXIgcm9sZQogICAgICAgICBwdWJsaWMgdm9pZCB0ZXN0NShIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSwgUHJpbnRXcml0ZXIgb3V0KXsKQEAgLTExMCw2ICsxMTAsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxicj5IdHRwU2VydmxldFJlcXVlc3QuaXNVc2VySW5Sb2xlKCkgdGVzdCBGYWlsZWQhIik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8YnI+SW5mbzpyZXF1ZXN0LmlzVXNlckluUm9sZShcIiIrbWdyX3NlY3JvbGVfcmVmKyJcIikgaXM9ICIraXNOb3RJbk90aGVyUm9sZSk7Ci0JfQorICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvam1hYy9odHRwU2VydmxldC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvam1hYy9odHRwU2VydmxldC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGExZWMwMTguLjg0MDlmNjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2ptYWMvaHR0cFNlcnZsZXQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qbWFjL2h0dHBTZXJ2bGV0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InNlY3VyaXR5LWptYWMtaHR0cHNlcnZsZXQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qbWFjL2h0dHBTZXJ2bGV0L3NyYy9IdHRwU2VydmxldFRlc3RBdXRoTW9kdWxlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qbWFjL2h0dHBTZXJ2bGV0L3NyYy9IdHRwU2VydmxldFRlc3RBdXRoTW9kdWxlLmphdmEKaW5kZXggMzI1YzI1MC4uMDAyZTE4ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvam1hYy9odHRwU2VydmxldC9zcmMvSHR0cFNlcnZsZXRUZXN0QXV0aE1vZHVsZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2ptYWMvaHR0cFNlcnZsZXQvc3JjL0h0dHBTZXJ2bGV0VGVzdEF1dGhNb2R1bGUuamF2YQpAQCAtNzIsNyArNzIsNyBAQAogICAgICAgICAgICAgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSA9CiAgICAgICAgICAgICAgICAgKEh0dHBTZXJ2bGV0UmVzcG9uc2UpbWVzc2FnZUluZm8uZ2V0UmVzcG9uc2VNZXNzYWdlKCk7CiAgICAgICAgICAgICBTdHJpbmcgYXV0aG9yaXphdGlvbiA9IHJlcXVlc3QuZ2V0SGVhZGVyKCJhdXRob3JpemF0aW9uIik7Ci0gICAgICAgICAgICBpZiAoYXV0aG9yaXphdGlvbiAhPSBudWxsICYmIAorICAgICAgICAgICAgaWYgKGF1dGhvcml6YXRpb24gIT0gbnVsbCAmJgogICAgICAgICAgICAgICAgICAgICBhdXRob3JpemF0aW9uLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgiYmFzaWMgIikpIHsKICAgICAgICAgICAgICAgICBhdXRob3JpemF0aW9uID0gYXV0aG9yaXphdGlvbi5zdWJzdHJpbmcoNikudHJpbSgpOwogICAgICAgICAgICAgICAgIEJBU0U2NERlY29kZXIgZGVjb2RlciA9IG5ldyBCQVNFNjREZWNvZGVyKCk7CkBAIC04Niw3ICs4Niw3IEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICh1c2VybmFtZSA9PSBudWxsIHx8IHBhc3N3b3JkID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICByZXNwb25zZS5zZXRIZWFkZXIoIldXVy1BdXRoZW50aWNhdGUiLCAiQmFzaWMgcmVhbG09XCJkZWZhdWx0XCIiKTsgIAorICAgICAgICAgICAgICAgIHJlc3BvbnNlLnNldEhlYWRlcigiV1dXLUF1dGhlbnRpY2F0ZSIsICJCYXNpYyByZWFsbT1cImRlZmF1bHRcIiIpOwogICAgICAgICAgICAgICAgIHJlc3BvbnNlLnNlbmRFcnJvcihIdHRwU2VydmxldFJlc3BvbnNlLlNDX1VOQVVUSE9SSVpFRCk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJsb2dpbiBwcm9tcHQgZm9yIHVzZXJuYW1lL3Bhc3N3b3JkIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIEF1dGhTdGF0dXMuU0VORF9DT05USU5VRTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2ptYWMvaHR0cFNlcnZsZXQvc3JjL015SHR0cFNlcnZsZXRSZXNwb25zZVdyYXBwZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2ptYWMvaHR0cFNlcnZsZXQvc3JjL015SHR0cFNlcnZsZXRSZXNwb25zZVdyYXBwZXIuamF2YQppbmRleCBkZWU1ZGFiLi4yNDZjYjk4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qbWFjL2h0dHBTZXJ2bGV0L3NyYy9NeUh0dHBTZXJ2bGV0UmVzcG9uc2VXcmFwcGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvam1hYy9odHRwU2VydmxldC9zcmMvTXlIdHRwU2VydmxldFJlc3BvbnNlV3JhcHBlci5qYXZhCkBAIC01Myw3ICs1Myw3IEBACiAgICAgfQogCiAgICAgLy8gb3VyIGpzcCB3cml0ZXIgb25seSB1c2Ugd3JpdGUgY2hhcltdIG9mZiBsZW4KLSAgICBwdWJsaWMgdm9pZCB3cml0ZShjaGFyW10gY2J1ZiwgaW50IG9mZiwgaW50IGxlbikgeyAKKyAgICBwdWJsaWMgdm9pZCB3cml0ZShjaGFyW10gY2J1ZiwgaW50IG9mZiwgaW50IGxlbikgewogICAgICAgICBjb3VudCArPSBsZW4gLSBudW1PZkNSKGNidWYsIG9mZiwgbGVuKTsKICAgICAgICAgc3VwZXIud3JpdGUoY2J1Ziwgb2ZmLCBsZW4pOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2ptYWMvaHR0cFNlcnZsZXRDaGFsbGVuZ2UvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2ptYWMvaHR0cFNlcnZsZXRDaGFsbGVuZ2UvYnVpbGQucHJvcGVydGllcwppbmRleCBjM2JkNzJhLi4yMjdhODU4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qbWFjL2h0dHBTZXJ2bGV0Q2hhbGxlbmdlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvam1hYy9odHRwU2VydmxldENoYWxsZW5nZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzZWN1cml0eS1qbWFjLWh0dHBzZXJ2bGV0Y2hhbGxlbmdlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvam1hYy9odHRwU2VydmxldENoYWxsZW5nZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qbWFjL2h0dHBTZXJ2bGV0Q2hhbGxlbmdlL2J1aWxkLnhtbAppbmRleCBlMTVhMWE5Li5iZTM5YWFkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qbWFjL2h0dHBTZXJ2bGV0Q2hhbGxlbmdlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qbWFjL2h0dHBTZXJ2bGV0Q2hhbGxlbmdlL2J1aWxkLnhtbApAQCAtMTExLDcgKzExMSw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWxpYnJhcmllcyI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXMucHJvcHMiIHZhbHVlPSIke2FzLnByb3BzfSIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImxpYnJhcmllcyIgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0vbGliL3Rlc3QtJHthcHBuYW1lfS1wcm92aWRlci5qYXIiLz4gICAgICAgICAgICAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJsaWJyYXJpZXMiIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9L2xpYi90ZXN0LSR7YXBwbmFtZX0tcHJvdmlkZXIuamFyIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIke2FwcG5hbWV9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2ptYWMvaHR0cFNlcnZsZXRDaGFsbGVuZ2Uvc3JjL0h0dHBTZXJ2bGV0Q2hhbGxlbmdlVGVzdEF1dGhNb2R1bGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2ptYWMvaHR0cFNlcnZsZXRDaGFsbGVuZ2Uvc3JjL0h0dHBTZXJ2bGV0Q2hhbGxlbmdlVGVzdEF1dGhNb2R1bGUuamF2YQppbmRleCA2ZjJiZDFjLi40M2FhZjRjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qbWFjL2h0dHBTZXJ2bGV0Q2hhbGxlbmdlL3NyYy9IdHRwU2VydmxldENoYWxsZW5nZVRlc3RBdXRoTW9kdWxlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvam1hYy9odHRwU2VydmxldENoYWxsZW5nZS9zcmMvSHR0cFNlcnZsZXRDaGFsbGVuZ2VUZXN0QXV0aE1vZHVsZS5qYXZhCkBAIC02MywxMSArNjMsMTEgQEAKICAgICAgICAgU3RyaW5nIHVzZXJuYW1lID0gbnVsbDsKICAgICAgICAgU3RyaW5nIHBhc3N3b3JkID0gbnVsbDsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCA9CiAgICAgICAgICAgICAgICAgKEh0dHBTZXJ2bGV0UmVxdWVzdCltZXNzYWdlSW5mby5nZXRSZXF1ZXN0TWVzc2FnZSgpOwogICAgICAgICAgICAgU3RyaW5nIGF1dGhvcml6YXRpb24gPSByZXF1ZXN0LmdldEhlYWRlcigiYXV0aG9yaXphdGlvbiIpOwotICAgICAgICAgICAgaWYgKGF1dGhvcml6YXRpb24gIT0gbnVsbCAmJiAKKyAgICAgICAgICAgIGlmIChhdXRob3JpemF0aW9uICE9IG51bGwgJiYKICAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXphdGlvbi50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoImJhc2ljICIpKSB7CiAgICAgICAgICAgICAgICAgYXV0aG9yaXphdGlvbiA9IGF1dGhvcml6YXRpb24uc3Vic3RyaW5nKDYpLnRyaW0oKTsKICAgICAgICAgICAgICAgICBCQVNFNjREZWNvZGVyIGRlY29kZXIgPSBuZXcgQkFTRTY0RGVjb2RlcigpOwpAQCAtODMsNyArODMsNyBAQAogICAgICAgICAgICAgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSA9CiAgICAgICAgICAgICAgICAgICAgICAoSHR0cFNlcnZsZXRSZXNwb25zZSltZXNzYWdlSW5mby5nZXRSZXNwb25zZU1lc3NhZ2UoKTsKICAgICAgICAgICAgIGlmICh1c2VybmFtZSA9PSBudWxsIHx8IHBhc3N3b3JkID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICByZXNwb25zZS5zZXRIZWFkZXIoIldXVy1BdXRoZW50aWNhdGUiLCAiQmFzaWMgcmVhbG09XCJkZWZhdWx0XCIiKTsgIAorICAgICAgICAgICAgICAgIHJlc3BvbnNlLnNldEhlYWRlcigiV1dXLUF1dGhlbnRpY2F0ZSIsICJCYXNpYyByZWFsbT1cImRlZmF1bHRcIiIpOwogICAgICAgICAgICAgICAgIHJlc3BvbnNlLnNlbmRFcnJvcihIdHRwU2VydmxldFJlc3BvbnNlLlNDX1VOQVVUSE9SSVpFRCk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJsb2dpbiBwcm9tcHQgZm9yIHVzZXJuYW1lL3Bhc3N3b3JkIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIEF1dGhTdGF0dXMuU0VORF9DT05USU5VRTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2ptYWMvaHR0cFNlcnZsZXRGb3JtL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qbWFjL2h0dHBTZXJ2bGV0Rm9ybS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDFjOGNmMzAuLmYxNDlmOWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2ptYWMvaHR0cFNlcnZsZXRGb3JtL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvam1hYy9odHRwU2VydmxldEZvcm0vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic2VjdXJpdHktam1hYy1odHRwc2VydmxldGZvcm0iLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qbWFjL2h0dHBzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qbWFjL2h0dHBzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMWFjYmI1My4uOGNiNGMwYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvam1hYy9odHRwcy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2ptYWMvaHR0cHMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic2VjdXJpdHktam1hYy1odHRwcyIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2ptYWMvaHR0cHMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvam1hYy9odHRwcy9idWlsZC54bWwKaW5kZXggNTA3NzVjNi4uZTNlOWEwNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvam1hYy9odHRwcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvam1hYy9odHRwcy9idWlsZC54bWwKQEAgLTU4LDcgKzU4LDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcy5wcm9wcyIgdmFsdWU9IiR7YXMucHJvcHN9IC0tbGF5ZXIgSHR0cFNlcnZsZXQiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iaHR0cHNUZXN0QXV0aE1vZHVsZSIvPgogICAgICAgICA8L2FudGNhbGw+Ci0JPGFudGNhbGwgdGFyZ2V0PSJyZW1vdmUtc3RvcmUtY29tbW9uIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJyZW1vdmUtc3RvcmUtY29tbW9uIi8+CiAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0Ii8+CiAgICAgICAgIDwhLS0gbWF5IG5vdCBiZSBhYmxlIHRvIGRlbGV0ZSB0aGlzIGZpbGUgaW4gUEMgZW52aXJvbm1lbnQgLS0+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qbWFjL3NvYXAvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2ptYWMvc29hcC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDlmOTYzNmIuLmYxYjQ2YmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2ptYWMvc29hcC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2ptYWMvc29hcC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzZWN1cml0eS1qbWFjLXNvYXAiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qbWFjL3NvYXAvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvam1hYy9zb2FwL2J1aWxkLnhtbAppbmRleCBkNmM0ZGFjLi5hNzVkYWM2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qbWFjL3NvYXAvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2ptYWMvc29hcC9idWlsZC54bWwKQEAgLTEyMCw3ICsxMjAsNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlLWNsaWVudCI+Ci0gICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPiAKKyAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id3NpbXBvcnQiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndzaW1wb3J0LmFyZ3MiCiAgICAgICAgICAgICAgICAgdmFsdWU9Ii1rZWVwIC1kICR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCBodHRwOi8vJHtodHRwLmhvc3R9OiR7aHR0cC5wb3J0fS9KbWFjU29hcEVqYlNlcnZpY2UvSGVsbG9FamI/V1NETCIvPgpAQCAtMTQyLDcgKzE0Miw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXNlcnZlciIgZGVwZW5kcz0iY29tcGlsZS1zZXJ2ZXIiPgogICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KLSAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4gCisgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CiAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLWVqYmphci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2VqYndzIi8+CkBAIC0xNTYsMTYgKzE1NiwxNiBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9zZXJ2bGV0d3MiLz4KICAgICAgICAgPC9qYXI+CiAKLSAgICAgICAgPGNvcHkgZmlsZT0iJHtzdW4tYXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4gCi0gICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIj4gCisgICAgICAgIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CisgICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIj4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IiouamFyIi8+CiAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLndhciIvPgogICAgICAgICAgICAgPC9maWxlc2V0PgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSI+Ci0JICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KKyAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogICAgICAgICAgICAgPC9maWxlc2V0PgotICAgICAgICA8L2phcj4gICAKKyAgICAgICAgPC9qYXI+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLWNsaWVudCIgZGVwZW5kcz0iY29tcGlsZS1jbGllbnQiPgpAQCAtMTc0LDExICsxNzQsMTEgQEAKICAgICAgICAgPHVuamFyIHNyYz0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIGRlc3Q9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgogICAgICAgICA8Y29weSBmaWxlPSIke2NsaWVudC1oYW5kbGVyLnhtbH0iIHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQvY29tL3N1bi9zMWFzZGV2L3NlY3VyaXR5L2ptYWMvc29hcC9jbGllbnQiIGZhaWxvbmVycm9yPSJ0cnVlIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1hcHBjbGllbnRqYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIKICAgICAgICAgICAgICAgICB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmphciIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmphciIKICAgICAgICAgICAgICAgICB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgICB2YWx1ZT0iY29tL3N1bi8qKi8qLmNsYXNzLCBjb20vc3VuLyoqLyoueG1sIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2ptYWMvc29hcC9jbGllbnQvVGVzdEhhbmRsZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2ptYWMvc29hcC9jbGllbnQvVGVzdEhhbmRsZXIuamF2YQppbmRleCBiZWIwYTA3Li4yYjBjNTA2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qbWFjL3NvYXAvY2xpZW50L1Rlc3RIYW5kbGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvam1hYy9zb2FwL2NsaWVudC9UZXN0SGFuZGxlci5qYXZhCkBAIC0yNiwxMSArMjYsMTEgQEAKIGltcG9ydCBqYWthcnRhLnhtbC5zb2FwLio7CiAKIHB1YmxpYyBjbGFzcyBUZXN0SGFuZGxlciBpbXBsZW1lbnRzIFNPQVBIYW5kbGVyPFNPQVBNZXNzYWdlQ29udGV4dD4gewotICAgIAorCiAgICAgcHVibGljIFNldDxRTmFtZT4gZ2V0SGVhZGVycygpIHsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgaW5pdCgpIHsKICAgICB9CiAKQEAgLTU2LDE0ICs1NiwxNCBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGhhbmRsZUZhdWx0KFNPQVBNZXNzYWdlQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgY2xvc2UoTWVzc2FnZUNvbnRleHQgY29udGV4dCkgewogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2ptYWMvc29hcERlZmF1bHQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2ptYWMvc29hcERlZmF1bHQvYnVpbGQucHJvcGVydGllcwppbmRleCBiOTE0NTA2Li42MjgzMjhiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qbWFjL3NvYXBEZWZhdWx0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvam1hYy9zb2FwRGVmYXVsdC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzZWN1cml0eS1qbWFjLXNvYXBkZWZhdWx0Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvam1hYy9zb2FwRGVmYXVsdC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qbWFjL3NvYXBEZWZhdWx0L2J1aWxkLnhtbAppbmRleCAxOTRkZmIwLi40MGNmM2ZjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qbWFjL3NvYXBEZWZhdWx0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qbWFjL3NvYXBEZWZhdWx0L2J1aWxkLnhtbApAQCAtNzEsNyArNzEsNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSJTT0FQRGVmYXVsdFRlc3RDbGllbnRBdXRoTW9kdWxlIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAotCTxhbnRjYWxsIHRhcmdldD0iZW5hYmxlLXdzcy1tZXNzYWdlLXNlY3VyaXR5LXByb3ZpZGVyIj4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImVuYWJsZS13c3MtbWVzc2FnZS1zZWN1cml0eS1wcm92aWRlciI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0id3NzLnNlcnZlci5wcm92aWRlci5uYW1lIiB2YWx1ZT0iU09BUERlZmF1bHRUZXN0U2VydmVyQXV0aE1vZHVsZSIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Indzcy5jbGllbnQucHJvdmlkZXIubmFtZSIgdmFsdWU9IlNPQVBEZWZhdWx0VGVzdENsaWVudEF1dGhNb2R1bGUiLz4KICAgICAgICAgPC9hbnRjYWxsPgpAQCAtMTE3LDcgKzExNyw3IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9IlNPQVBEZWZhdWx0VGVzdENsaWVudEF1dGhNb2R1bGUiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCi0JPGFudGNhbGwgdGFyZ2V0PSJkaXNhYmxlLXdzcy1tZXNzYWdlLXNlY3VyaXR5LXByb3ZpZGVyIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJkaXNhYmxlLXdzcy1tZXNzYWdlLXNlY3VyaXR5LXByb3ZpZGVyIi8+CiAKICAgICAgICAgPCEtLSBtYXkgbm90IGJlIGFibGUgdG8gZGVsZXRlIHRoaXMgZmlsZSBpbiBQQyBlbnZpcm9ubWVudCAtLT4KICAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2xpYi90ZXN0LSR7YXBwbmFtZX0tcHJvdmlkZXIuamFyIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KQEAgLTEzNSw3ICsxMzUsNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlLWNsaWVudCI+Ci0gICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPiAKKyAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id3NpbXBvcnQiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndzaW1wb3J0LmFyZ3MiCiAgICAgICAgICAgICAgICAgdmFsdWU9Ii1rZWVwIC1kICR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCBodHRwOi8vJHtodHRwLmhvc3R9OiR7aHR0cC5wb3J0fS9KbWFjU29hcERlZmF1bHRFamJTZXJ2aWNlL0hlbGxvRWpiP1dTREwiLz4KQEAgLTE1Nyw3ICsxNTcsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1zZXJ2ZXIiIGRlcGVuZHM9ImNvbXBpbGUtc2VydmVyIj4KICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+Ci0gICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+IAorICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgogCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1lamJqYXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9lamJ3cyIvPgpAQCAtMTcwLDE2ICsxNzAsMTYgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vc2VydmxldHdzIi8+CiAgICAgICAgIDwvamFyPgogCi0gICAgICAgIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+IAotICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciI+IAorICAgICAgICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciI+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSI+CiAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLmphciIvPgogICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi53YXIiLz4KICAgICAgICAgICAgIDwvZmlsZXNldD4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iPgotCSAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIi8+CisgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KICAgICAgICAgICAgIDwvZmlsZXNldD4KLSAgICAgICAgPC9qYXI+ICAgCisgICAgICAgIDwvamFyPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1jbGllbnQiIGRlcGVuZHM9ImNvbXBpbGUtY2xpZW50Ij4KQEAgLTE4NywxMSArMTg3LDExIEBACiAKICAgICAgICAgPHVuamFyIHNyYz0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIGRlc3Q9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2UtYXBwY2xpZW50amFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiCiAgICAgICAgICAgICAgICAgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5qYXIiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5qYXIiCiAgICAgICAgICAgICAgICAgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgICAgdmFsdWU9ImNvbS9zdW4vKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qbWFjL3NvYXBFbWJlZGRlZC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvam1hYy9zb2FwRW1iZWRkZWQvYnVpbGQucHJvcGVydGllcwppbmRleCBjOGYwNzRmLi5mOGE1MDZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qbWFjL3NvYXBFbWJlZGRlZC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2ptYWMvc29hcEVtYmVkZGVkL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InNlY3VyaXR5LWptYWMtc29hcGVtYmVkZGVkIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvam1hYy9zb2FwRW1iZWRkZWQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvam1hYy9zb2FwRW1iZWRkZWQvYnVpbGQueG1sCmluZGV4IGJmMzExYTQuLjgxNjFlZjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2ptYWMvc29hcEVtYmVkZGVkL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qbWFjL3NvYXBFbWJlZGRlZC9idWlsZC54bWwKQEAgLTk5LDcgKzk5LDcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZS13ZWJjbGllbnQiPgotICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQiLz4gCisgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudCIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndzaW1wb3J0Ij4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3c2ltcG9ydC5hcmdzIgogICAgICAgICAgICAgICAgIHZhbHVlPSIta2VlcCAtZCAke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQgaHR0cDovLyR7aHR0cC5ob3N0fToke2h0dHAucG9ydH0vSm1hY1NvYXBFbWJlZGRlZEVqYlNlcnZpY2UvSGVsbG9FamI/V1NETCIvPgpAQCAtMTIxLDcgKzEyMSw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXNlcnZlciIgZGVwZW5kcz0iY29tcGlsZS1zZXJ2ZXIiPgogICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KLSAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4gCisgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CiAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLWVqYmphci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2VqYndzIi8+CkBAIC0xMzUsMTYgKzEzNSwxNiBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9zZXJ2bGV0d3MiLz4KICAgICAgICAgPC9qYXI+CiAKLSAgICAgICAgPGNvcHkgZmlsZT0iJHtzdW4tYXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4gCi0gICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIj4gCisgICAgICAgIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CisgICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIj4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IiouamFyIi8+CiAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLndhciIvPgogICAgICAgICAgICAgPC9maWxlc2V0PgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSI+Ci0JICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KKyAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogICAgICAgICAgICAgPC9maWxlc2V0PgotICAgICAgICA8L2phcj4gICAKKyAgICAgICAgPC9qYXI+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXdlYmNsaWVudCIgZGVwZW5kcz0iY29tcGlsZS13ZWJjbGllbnQiPgpAQCAtMTUzLDkgKzE1Myw5IEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iJHt3ZWIyLnhtbH0iLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9IiR7c3VuLXdlYjIueG1sfSIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9Indhci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3YXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgICB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50Ii8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2FyLmZpbGUiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9Indhci5maWxlIgogICAgICAgICAgICAgICAgIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQtd2ViLndhciIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CkBAIC0yMDYsNyArMjA2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwbmFtZSIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwbmFtZSIKICAgICAgICAgICAgICAgICB2YWx1ZT0iJHthcHBuYW1lfS1jbGllbnQiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvanNwMnNmdWwvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2pzcDJzZnVsL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZWVjYTQ4MC4uM2ZmNjNmNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvanNwMnNmdWwvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qc3Ayc2Z1bC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqc3Ayc2Z1bCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iIC8+CkBAIC0yNSw2ICsyNSw2IEBACiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9InN0YXRlZnVsTG9naW5CZWFuIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9InN0YXRlZnVsTG9naW5CZWFuIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qc3Ayc2Z1bC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qc3Ayc2Z1bC9idWlsZC54bWwKaW5kZXggOTk0NzBjYS4uZjAxNTFhZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvanNwMnNmdWwvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2pzcDJzZnVsL2J1aWxkLnhtbApAQCAtMzMsNyArMzMsNyBAQAogICAgICZjb21tb25SdW47CiAgICAgJmNvbW1vblNlY3VyaXR5OwogICAgICZ0ZXN0UHJvcGVydGllczsKLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCwgc2V0dXAsIGRlcGxveSwgcnVuLCB1bmRlcGxveSwgdW5zZXR1cCIvPgogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CkBAIC00OCw3ICs0OCw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIiAvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVqYi1qYXItY29tbW9uIiAvPgpAQCAtMTYxLDI4ICsxNjEsMjggQEAKIAogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS11c2VyLWNvbW1vbiI+Ci0JICAgIDxwYXJhbSBuYW1lPSJ1c2VyIiB2YWx1ZT0ic2hpbmd3YWkiLz4KLQkgICAgPHBhcmFtIG5hbWU9InBhc3N3b3JkIiB2YWx1ZT0ic2hpbmd3YWkiLz4KLQkgICAgPHBhcmFtIG5hbWU9Imdyb3VwcyIgdmFsdWU9ImVtcGxveWVlIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJ1c2VyIiB2YWx1ZT0ic2hpbmd3YWkiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InBhc3N3b3JkIiB2YWx1ZT0ic2hpbmd3YWkiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9Imdyb3VwcyIgdmFsdWU9ImVtcGxveWVlIi8+CiAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS11c2VyLWNvbW1vbiI+Ci0JICAgIDxwYXJhbSBuYW1lPSJ1c2VyIiB2YWx1ZT0ic3djaGFuIi8+Ci0JICAgIDxwYXJhbSBuYW1lPSJwYXNzd29yZCIgdmFsdWU9InN3Y2hhbiIvPgotCSAgICA8cGFyYW0gbmFtZT0iZ3JvdXBzIiB2YWx1ZT0ic3RhZmYiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InVzZXIiIHZhbHVlPSJzd2NoYW4iLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InBhc3N3b3JkIiB2YWx1ZT0ic3djaGFuIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJncm91cHMiIHZhbHVlPSJzdGFmZiIvPgogICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtdXNlci1jb21tb24iPgotCSAgICA8cGFyYW0gbmFtZT0idXNlciIgdmFsdWU9IndlYnVzZXIiLz4KLQkgICAgPHBhcmFtIG5hbWU9InBhc3N3b3JkIiB2YWx1ZT0id2VidXNlciIvPgotCSAgICA8cGFyYW0gbmFtZT0iZ3JvdXBzIiB2YWx1ZT0iZW1wbG95ZWUiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InVzZXIiIHZhbHVlPSJ3ZWJ1c2VyIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJwYXNzd29yZCIgdmFsdWU9IndlYnVzZXIiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9Imdyb3VwcyIgdmFsdWU9ImVtcGxveWVlIi8+CiAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS11c2VyLWNvbW1vbiI+Ci0JICAgIDxwYXJhbSBuYW1lPSJ1c2VyIiB2YWx1ZT0ibm9hdXRodXNlciIvPgotCSAgICA8cGFyYW0gbmFtZT0icGFzc3dvcmQiIHZhbHVlPSJub2F1dGh1c2VyIi8+Ci0JICAgIDxwYXJhbSBuYW1lPSJncm91cHMiIHZhbHVlPSJlbXBsb3llZSIvPgorICAgICAgICA8cGFyYW0gbmFtZT0idXNlciIgdmFsdWU9Im5vYXV0aHVzZXIiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InBhc3N3b3JkIiB2YWx1ZT0ibm9hdXRodXNlciIvPgorICAgICAgICA8cGFyYW0gbmFtZT0iZ3JvdXBzIiB2YWx1ZT0iZW1wbG95ZWUiLz4KICAgICAgICA8L2FudGNhbGw+CiAgICAgPCEtLSAgPGFudGNhbGwgdGFyZ2V0PSJyZWNvbmZpZy1jb21tb24iLz4tLT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5zZXR1cCI+CiAgICAgICA8IS0tIHJlbW92ZSB0ZXN0IHVzZXJzLCBqdXN0IGNsZWFudXAuIC0tPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtdXNlci1jb21tb24iPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvanNwMnNmdWwvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qc3Ayc2Z1bC9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbAppbmRleCAyMmI5NWIwLi4yNTcyZTBmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qc3Ayc2Z1bC9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qc3Ayc2Z1bC9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbApAQCAtMjUsOCArMjUsOCBAQAogICA8L21vZHVsZT4KICAgPG1vZHVsZT4KICAgICA8d2ViPgotICAgIAk8d2ViLXVyaT5qc3Ayc2Z1bC13ZWIud2FyPC93ZWItdXJpPgotICAgIAk8Y29udGV4dC1yb290PmpzcDJzZnVsPC9jb250ZXh0LXJvb3Q+CisgICAgICAgIDx3ZWItdXJpPmpzcDJzZnVsLXdlYi53YXI8L3dlYi11cmk+CisgICAgICAgIDxjb250ZXh0LXJvb3Q+anNwMnNmdWw8L2NvbnRleHQtcm9vdD4KICAgICA8L3dlYj4KICAgPC9tb2R1bGU+CiA8L2FwcGxpY2F0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvanNwMnNmdWwvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qc3Ayc2Z1bC9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAppbmRleCA3MWExNGZmLi4wYWUxMTI5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qc3Ayc2Z1bC9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qc3Ayc2Z1bC9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbApAQCAtMTksMzAgKzE5LDMwIEBACiAtLT4KIAogPHN1bi1lamItamFyPgotCTxlbnRlcnByaXNlLWJlYW5zPgotCTx1bmlxdWUtaWQ+MDwvdW5pcXVlLWlkPgotCTxlamI+Ci0JCTxlamItbmFtZT5qc3Ayc2Z1bDwvZWpiLW5hbWU+Ci0JCTxqbmRpLW5hbWU+anNwMnNmdWw8L2puZGktbmFtZT4KKyAgICA8ZW50ZXJwcmlzZS1iZWFucz4KKyAgICA8dW5pcXVlLWlkPjA8L3VuaXF1ZS1pZD4KKyAgICA8ZWpiPgorICAgICAgICA8ZWpiLW5hbWU+anNwMnNmdWw8L2VqYi1uYW1lPgorICAgICAgICA8am5kaS1uYW1lPmpzcDJzZnVsPC9qbmRpLW5hbWU+CiAKLQkJPGlvci1zZWN1cml0eS1jb25maWc+Ci0JCQk8dHJhbnNwb3J0LWNvbmZpZz4KLQkJCQk8aW50ZWdyaXR5PnN1cHBvcnRlZDwvaW50ZWdyaXR5PgotCQkJCTxjb25maWRlbnRpYWxpdHk+c3VwcG9ydGVkPC9jb25maWRlbnRpYWxpdHk+Ci0JCQkJPGVzdGFibGlzaC10cnVzdC1pbi10YXJnZXQ+c3VwcG9ydGVkPC9lc3RhYmxpc2gtdHJ1c3QtaW4tdGFyZ2V0PgotCQkJCTxlc3RhYmxpc2gtdHJ1c3QtaW4tY2xpZW50PnN1cHBvcnRlZDwvZXN0YWJsaXNoLXRydXN0LWluLWNsaWVudD4KLQkJCTwvdHJhbnNwb3J0LWNvbmZpZz4KLQkJCTxhcy1jb250ZXh0PgotCQkJCTxhdXRoLW1ldGhvZD51c2VybmFtZV9wYXNzd29yZDwvYXV0aC1tZXRob2Q+Ci0JCQkJPHJlYWxtPmRlZmF1bHQ8L3JlYWxtPgotCQkJCTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci0JCQk8L2FzLWNvbnRleHQ+Ci0JCQk8c2FzLWNvbnRleHQ+Ci0JCQkJPGNhbGxlci1wcm9wYWdhdGlvbj5zdXBwb3J0ZWQ8L2NhbGxlci1wcm9wYWdhdGlvbj4KLQkJCTwvc2FzLWNvbnRleHQ+Ci0JCTwvaW9yLXNlY3VyaXR5LWNvbmZpZz4KLQkJPGdlbi1jbGFzc2VzLz4KLQk8L2VqYj4KLQk8L2VudGVycHJpc2UtYmVhbnM+CisgICAgICAgIDxpb3Itc2VjdXJpdHktY29uZmlnPgorICAgICAgICAgICAgPHRyYW5zcG9ydC1jb25maWc+CisgICAgICAgICAgICAgICAgPGludGVncml0eT5zdXBwb3J0ZWQ8L2ludGVncml0eT4KKyAgICAgICAgICAgICAgICA8Y29uZmlkZW50aWFsaXR5PnN1cHBvcnRlZDwvY29uZmlkZW50aWFsaXR5PgorICAgICAgICAgICAgICAgIDxlc3RhYmxpc2gtdHJ1c3QtaW4tdGFyZ2V0PnN1cHBvcnRlZDwvZXN0YWJsaXNoLXRydXN0LWluLXRhcmdldD4KKyAgICAgICAgICAgICAgICA8ZXN0YWJsaXNoLXRydXN0LWluLWNsaWVudD5zdXBwb3J0ZWQ8L2VzdGFibGlzaC10cnVzdC1pbi1jbGllbnQ+CisgICAgICAgICAgICA8L3RyYW5zcG9ydC1jb25maWc+CisgICAgICAgICAgICA8YXMtY29udGV4dD4KKyAgICAgICAgICAgICAgICA8YXV0aC1tZXRob2Q+dXNlcm5hbWVfcGFzc3dvcmQ8L2F1dGgtbWV0aG9kPgorICAgICAgICAgICAgICAgIDxyZWFsbT5kZWZhdWx0PC9yZWFsbT4KKyAgICAgICAgICAgICAgICA8cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgorICAgICAgICAgICAgPC9hcy1jb250ZXh0PgorICAgICAgICAgICAgPHNhcy1jb250ZXh0PgorICAgICAgICAgICAgICAgIDxjYWxsZXItcHJvcGFnYXRpb24+c3VwcG9ydGVkPC9jYWxsZXItcHJvcGFnYXRpb24+CisgICAgICAgICAgICA8L3Nhcy1jb250ZXh0PgorICAgICAgICA8L2lvci1zZWN1cml0eS1jb25maWc+CisgICAgICAgIDxnZW4tY2xhc3Nlcy8+CisgICAgPC9lamI+CisgICAgPC9lbnRlcnByaXNlLWJlYW5zPgogPC9zdW4tZWpiLWphcj4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvanNwMnNmdWwvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvanNwMnNmdWwvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDMwZTIxMDEuLjcxMWViM2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2pzcDJzZnVsL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qc3Ayc2Z1bC9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTQ5LDcgKzQ5LDcgQEAKICAgICAgICAgPHRyYW5zcG9ydC1ndWFyYW50ZWU+Tk9ORTwvdHJhbnNwb3J0LWd1YXJhbnRlZT4KICAgICA8L3VzZXItZGF0YS1jb25zdHJhaW50PgogICA8L3NlY3VyaXR5LWNvbnN0cmFpbnQ+Ci0gIAorCiAgIDxsb2dpbi1jb25maWc+CiAgICAgPGF1dGgtbWV0aG9kPkZPUk08L2F1dGgtbWV0aG9kPgogICAgIDxyZWFsbS1uYW1lPmRlZmF1bHQ8L3JlYWxtLW5hbWU+CkBAIC01OCwxMSArNTgsMTEgQEAKICAgICAgIDxmb3JtLWVycm9yLXBhZ2U+L2Vycm9yLmh0bWw8L2Zvcm0tZXJyb3ItcGFnZT4KICAgICA8L2Zvcm0tbG9naW4tY29uZmlnPgogICA8L2xvZ2luLWNvbmZpZz4KLSAgCisKICAgPHNlY3VyaXR5LXJvbGU+CiAgICAgPHJvbGUtbmFtZT5lbXBsb3llZTwvcm9sZS1uYW1lPgogICA8L3NlY3VyaXR5LXJvbGU+Ci0gIAorCiAgIDxlamItcmVmPgogICAgIDxlamItcmVmLW5hbWU+anNwMnNmdWw8L2VqYi1yZWYtbmFtZT4KICAgICA8ZWpiLXJlZi10eXBlPlNlc3Npb248L2VqYi1yZWYtdHlwZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2pzcDJzZnVsL3Byb2ZpbGUvUHJvZmlsZUluZm9CZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qc3Ayc2Z1bC9wcm9maWxlL1Byb2ZpbGVJbmZvQmVhbi5qYXZhCmluZGV4IGIyYjNlMGEuLjRlMjk0MjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2pzcDJzZnVsL3Byb2ZpbGUvUHJvZmlsZUluZm9CZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvanNwMnNmdWwvcHJvZmlsZS9Qcm9maWxlSW5mb0JlYW4uamF2YQpAQCAtMjksMTEgKzI5LDExIEBACiAgKi8KIAogcHVibGljIGNsYXNzIFByb2ZpbGVJbmZvQmVhbiBpbXBsZW1lbnRzIFNlc3Npb25CZWFuIHsKLSAgICAKKwogICAgIHByaXZhdGUgU3RyaW5nIG5hbWU7Ci0gICAgCisKICAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IHNjID0gbnVsbDsKLSAgICAKKwogICAgIC8qKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIFByb2ZpZUluZm8gKi8KICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKQEAgLTQ2LDI0ICs0NiwyNCBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VjcmV0SW5mbygpIHsKICAgICAgICAgcmV0dXJuICJLZWVwIEl0IFNlY3JldCEiOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNob3BwaW5nQ2FydCBlamJBY3RpdmF0ZSIpOwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNob3BwaW5nQ2FydCBlamJQYXNzaXZhdGUiKTsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpICB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2hvcHBpbmdDYXJ0IGVqYlJlbW92ZSIpOwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQgc2Vzc2lvbkNvbnRleHQpIHsKICAgICAgICAgc2MgPSBzZXNzaW9uQ29udGV4dDsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2pzcDJzZnVsL3Byb2ZpbGUvUHJvZmlsZUluZm9Ib21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9qc3Ayc2Z1bC9wcm9maWxlL1Byb2ZpbGVJbmZvSG9tZS5qYXZhCmluZGV4IGY0N2FkMmEuLjNkMzQxN2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2pzcDJzZnVsL3Byb2ZpbGUvUHJvZmlsZUluZm9Ib21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvanNwMnNmdWwvcHJvZmlsZS9Qcm9maWxlSW5mb0hvbWUuamF2YQpAQCAtMjIsOCArMjIsOCBAQAogICogQGF1dGhvciAgc3djaGFuMgogICovCiBwdWJsaWMgaW50ZXJmYWNlIFByb2ZpbGVJbmZvSG9tZSBleHRlbmRzIEVKQkhvbWV7Ci0gICAgCi0gICAgcHVibGljIFByb2ZpbGVJbmZvUmVtb3RlIGNyZWF0ZShTdHJpbmcgbmFtZSkgCisKKyAgICBwdWJsaWMgUHJvZmlsZUluZm9SZW1vdGUgY3JlYXRlKFN0cmluZyBuYW1lKQogICAgICAgICB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uLCBqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb247Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2xkYXAvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2xkYXAvYnVpbGQucHJvcGVydGllcwppbmRleCAzMzc5NzY1Li44ZjcwYTFjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9sZGFwL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbGRhcC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzZWN1cml0eSIvPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9sZGFwL3NpbXBsZXdlYi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbGRhcC9zaW1wbGV3ZWIvYnVpbGQucHJvcGVydGllcwppbmRleCA5MWRmMDk2Li40MmZhNDVkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9sZGFwL3NpbXBsZXdlYi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2xkYXAvc2ltcGxld2ViL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJzaW1wbGUtd2ViYXBwIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbGRhcC9zaW1wbGV3ZWIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbGRhcC9zaW1wbGV3ZWIvYnVpbGQueG1sCmluZGV4IGYxMDdiNmEuLjVhZjlkNmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2xkYXAvc2ltcGxld2ViL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9sZGFwL3NpbXBsZXdlYi9idWlsZC54bWwKQEAgLTM1LDcgKzM1LDcgQEAKICAgICZjb21tb25TZWN1cml0eTsKICAgICZ0ZXN0UHJvcGVydGllczsKICAgICZ0ZXN0UHJvcGVydGllczI7Ci0gICAgCisKICAgIDxwcm9wZXJ0eSBmaWxlPSIuLi9jb25maWcucHJvcGVydGllcyIvPgogCiA8IS0tCkBAIC01MCwyNyArNTAsMjcgQEAKICAgIDwvdGFyZ2V0PgogCiAgICA8dGFyZ2V0IG5hbWU9ImFsbC1yZWciIGRlcGVuZHM9ImluaXQtY29tbW9uLGVudi1jaGVjayI+Ci0JICAgPGFudGNhbGwgdGFyZ2V0PSJzZXR1cCIvPgotCSAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQiLz4KLQkgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveSIvPgotCSAgIDxhbnRjYWxsIHRhcmdldD0icnVuIi8+Ci0JICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveSIvPgotCSAgIDxhbnRjYWxsIHRhcmdldD0idW5zZXR1cCIvPgorICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0dXAiLz4KKyAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkIi8+CisgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3kiLz4KKyAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1biIvPgorICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3kiLz4KKyAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuc2V0dXAiLz4KICAgIDwvdGFyZ2V0PgogCiAgICA8dGFyZ2V0IG5hbWU9ImFsbC1zc2wiIGRlcGVuZHM9ImluaXQtY29tbW9uLGVudi1jaGVjayI+Ci0JICAgPGFudGNhbGwgdGFyZ2V0PSJzZXR1cC1zc2wiLz4KLQkgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkIi8+Ci0JICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3kiLz4KLQkgICA8YW50Y2FsbCB0YXJnZXQ9InJ1biIvPgotCSAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3kiLz4KLQkgICA8YW50Y2FsbCB0YXJnZXQ9InVuc2V0dXAtc3NsIi8+CisgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXR1cC1zc2wiLz4KKyAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkIi8+CisgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3kiLz4KKyAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1biIvPgorICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3kiLz4KKyAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuc2V0dXAtc3NsIi8+CiAgICA8L3RhcmdldD4KIAogICAgPHRhcmdldCBuYW1lPSJkaXNwbGF5LWhlYWRlciI+CiAgICAgIDxlY2hvIG1lc3NhZ2U9Ii0tPlJ1bm5pbmcgJHthbnQucHJvamVjdC5uYW1lfSB0ZXN0cyBmcm9tICR7YmFzZWRpcn0gLi4uIi8+CiAgICA8L3RhcmdldD4KLSAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPCEtLSBjcmVhdGUgYXV0aCByZWFsbXMgLS0+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1hdXRoLWxkYXByZWFsbSIvPgpAQCAtMTA2LDcgKzEwNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iSHR0cEJhc2ljQXV0aFRlc3QiIGZvcms9InRydWUiPgogICAgICAgICA8Y2xhc3NwYXRoPgotICAJICAgICAgIDxwYXRoZWxlbWVudCBwYXRoPSIke2J1aWxkLmNsYXNzZXMuZGlyfToke3MxYXN0ZXN0LmNsYXNzcGF0aH0iLz4KKyAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgcGF0aD0iJHtidWlsZC5jbGFzc2VzLmRpcn06JHtzMWFzdGVzdC5jbGFzc3BhdGh9Ii8+CiAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8YXJnIHZhbHVlPSItdXJsIi8+CiAgICAgICAgIDxhcmcgdmFsdWU9Imh0dHA6Ly8ke2h0dHAuaG9zdH06JHtodHRwLnBvcnR9LyR7YXBwbmFtZX0vVGVzdFNlcnZsZXQiLz4KQEAgLTEzMywyNiArMTMzLDI2IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1sZGFwLXVzcmdycHMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KIAotICAJICA8Y29weSBmaWxlPSIke2NyZWF0ZS5sZGlmLmZpbGV9IiB0b2ZpbGU9InRlbXAubGRpZiIgb3ZlcndyaXRlPSJ0cnVlIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgCSAgPHJlcGxhY2UgZmlsZT0idGVtcC5sZGlmIiB0b2tlbj0iVU5JUVVFX1NVQl9DT05URVhUIiB2YWx1ZT0iJHt1bmlxdWUtbGRhcC1zdWItY29udGV4dC1pZH0iLz4KLQkgIDxlY2hvIG1lc3NhZ2U9IkNyZWF0aW5nIGxkYXAgdGVzdCB1c2VycyBhbmQgZ3JvdXBzIGF0IGxkYXA6Ly8ke2RpcmVjdG9yeS5zZXJ2ZXIuaG9zdH06JHtkaXJlY3Rvcnkuc2VydmVyLnBvcnR9Lz9kYz0ke3VuaXF1ZS1sZGFwLXN1Yi1jb250ZXh0LWlkfSwke2RpcmVjdG9yeS5zZXJ2ZXIuYmFzZWRufSIvPgotCSAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLWxkYXAtbGRpZiI+Ci0JCTxwYXJhbSBuYW1lPSJsZGlmLmZpbGUucGF0aCIgdmFsdWU9InRlbXAubGRpZiIvPgotCSAgPC9hbnRjYWxsPgotCSAgPGVjaG8gbWVzc2FnZT0iZGVsZXRpbmcgdGVtcCBmaWxlLi4uIi8+Ci0JICA8ZGVsZXRlIGZpbGU9InRlbXAubGRpZiIvPgorICAgICAgICA8Y29weSBmaWxlPSIke2NyZWF0ZS5sZGlmLmZpbGV9IiB0b2ZpbGU9InRlbXAubGRpZiIgb3ZlcndyaXRlPSJ0cnVlIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KKyAgICAgICAgPHJlcGxhY2UgZmlsZT0idGVtcC5sZGlmIiB0b2tlbj0iVU5JUVVFX1NVQl9DT05URVhUIiB2YWx1ZT0iJHt1bmlxdWUtbGRhcC1zdWItY29udGV4dC1pZH0iLz4KKyAgICAgIDxlY2hvIG1lc3NhZ2U9IkNyZWF0aW5nIGxkYXAgdGVzdCB1c2VycyBhbmQgZ3JvdXBzIGF0IGxkYXA6Ly8ke2RpcmVjdG9yeS5zZXJ2ZXIuaG9zdH06JHtkaXJlY3Rvcnkuc2VydmVyLnBvcnR9Lz9kYz0ke3VuaXF1ZS1sZGFwLXN1Yi1jb250ZXh0LWlkfSwke2RpcmVjdG9yeS5zZXJ2ZXIuYmFzZWRufSIvPgorICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLWxkYXAtbGRpZiI+CisgICAgICAgIDxwYXJhbSBuYW1lPSJsZGlmLmZpbGUucGF0aCIgdmFsdWU9InRlbXAubGRpZiIvPgorICAgICAgPC9hbnRjYWxsPgorICAgICAgPGVjaG8gbWVzc2FnZT0iZGVsZXRpbmcgdGVtcCBmaWxlLi4uIi8+CisgICAgICA8ZGVsZXRlIGZpbGU9InRlbXAubGRpZiIvPgogCiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1sZGFwLXVzcmdycHMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgCSAgPGNvcHkgZmlsZT0iJHtkZWxldGUubGRpZi5maWxlfSIgdG9maWxlPSJ0ZW1wLmxkaWYiIG92ZXJ3cml0ZT0idHJ1ZSIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gIAkgIDxyZXBsYWNlIGZpbGU9InRlbXAubGRpZiIgdG9rZW49IlVOSVFVRV9TVUJfQ09OVEVYVCIgdmFsdWU9IiR7dW5pcXVlLWxkYXAtc3ViLWNvbnRleHQtaWR9Ii8+CisgICAgICAgIDxjb3B5IGZpbGU9IiR7ZGVsZXRlLmxkaWYuZmlsZX0iIHRvZmlsZT0idGVtcC5sZGlmIiBvdmVyd3JpdGU9InRydWUiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICAgICAgICA8cmVwbGFjZSBmaWxlPSJ0ZW1wLmxkaWYiIHRva2VuPSJVTklRVUVfU1VCX0NPTlRFWFQiIHZhbHVlPSIke3VuaXF1ZS1sZGFwLXN1Yi1jb250ZXh0LWlkfSIvPgogICAgICAgPGVjaG8gbWVzc2FnZT0iRGVsZXRpbmcgbGRhcCB0ZXN0IHVzZXJzIGFuZCBncm91cHMgYXQgbGRhcDovLyR7ZGlyZWN0b3J5LnNlcnZlci5ob3N0fToke2RpcmVjdG9yeS5zZXJ2ZXIucG9ydH0vP2RjPSR7dW5pcXVlLWxkYXAtc3ViLWNvbnRleHQtaWR9LCR7ZGlyZWN0b3J5LnNlcnZlci5iYXNlZG59Ii8+Ci0JICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtbGRhcC1sZGlmIj4KLQkJPHBhcmFtIG5hbWU9ImxkaWYuZmlsZS5wYXRoIiB2YWx1ZT0idGVtcC5sZGlmIi8+Ci0JICA8L2FudGNhbGw+Ci0JICA8ZWNobyBtZXNzYWdlPSJkZWxldGluZyB0ZW1wIGZpbGUuLi4iLz4KLQkgIDxkZWxldGUgZmlsZT0idGVtcC5sZGlmIi8+CisgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtbGRhcC1sZGlmIj4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImxkaWYuZmlsZS5wYXRoIiB2YWx1ZT0idGVtcC5sZGlmIi8+CisgICAgICA8L2FudGNhbGw+CisgICAgICA8ZWNobyBtZXNzYWdlPSJkZWxldGluZyB0ZW1wIGZpbGUuLi4iLz4KKyAgICAgIDxkZWxldGUgZmlsZT0idGVtcC5sZGlmIi8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RhcnQiPgpAQCAtMTYxLDM1ICsxNjEsMzUgQEAKIAogCiA8dGFyZ2V0IG5hbWU9ImV4ZWN1dGUtbGRhcC1sZGlmIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JPGphdmEgY2xhc3NuYW1lPSJMREFQTW9kaWZ5IiBmb3JrPSJ0cnVlIiBmYWlsb25lcnJvcj0iZmFsc2UiPgotCQk8YXJnIGxpbmU9Ii1oICR7ZGlyZWN0b3J5LnNlcnZlci5ob3N0fSIvPgotCQk8YXJnIGxpbmU9Ii1wICR7ZGlyZWN0b3J5LnNlcnZlci5wb3J0fSIvPgotCQk8YXJnIGxpbmU9Ii1EICZxdW90OyR7ZGlyZWN0b3J5Lm1hbmFnZXIuZG59JnF1b3Q7Ii8+Ci0JCTxhcmcgbGluZT0iLXcgJHtkaXJlY3RvcnkubWFuYWdlci5wYXNzd2R9Ii8+Ci0JCTxhcmcgbGluZT0iLWYgJHtsZGlmLmZpbGUucGF0aH0iLz4KLQkJPGNsYXNzcGF0aD4KLQkJCTxwYXRoZWxlbWVudCBwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL2xkYXBqZGsuamFyIi8+Ci0JCTwvY2xhc3NwYXRoPgotCTwvamF2YT4KKyAgICA8amF2YSBjbGFzc25hbWU9IkxEQVBNb2RpZnkiIGZvcms9InRydWUiIGZhaWxvbmVycm9yPSJmYWxzZSI+CisgICAgICAgIDxhcmcgbGluZT0iLWggJHtkaXJlY3Rvcnkuc2VydmVyLmhvc3R9Ii8+CisgICAgICAgIDxhcmcgbGluZT0iLXAgJHtkaXJlY3Rvcnkuc2VydmVyLnBvcnR9Ii8+CisgICAgICAgIDxhcmcgbGluZT0iLUQgJnF1b3Q7JHtkaXJlY3RvcnkubWFuYWdlci5kbn0mcXVvdDsiLz4KKyAgICAgICAgPGFyZyBsaW5lPSItdyAke2RpcmVjdG9yeS5tYW5hZ2VyLnBhc3N3ZH0iLz4KKyAgICAgICAgPGFyZyBsaW5lPSItZiAke2xkaWYuZmlsZS5wYXRofSIvPgorICAgICAgICA8Y2xhc3NwYXRoPgorICAgICAgICAgICAgPHBhdGhlbGVtZW50IHBhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvbGRhcGpkay5qYXIiLz4KKyAgICAgICAgPC9jbGFzc3BhdGg+CisgICAgPC9qYXZhPgogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0iY3JlYXRlLWF1dGgtbGRhcHJlYWxtIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JPCEtLSB3b3JrYXJvdW5kIGZvciBoYW5kbGluZyB0aGUgc3BlY2lhbCBjaGFyYWN0ZXIgOiBpbiB0aGUgYWRtaW4gY29tbWFuZCAtLT4KLQk8ZWNobyBtZXNzYWdlPSJkaXJlY3Rvcnk9JHtkaXJlY3Rvcnkuc2VydmVyLnVybH0iIGZpbGU9InRlbXAudHh0Ii8+Ci0JPHJlcGxhY2UgZmlsZT0idGVtcC50eHQiIHRva2VuPSI6IiB2YWx1ZT0iXFw6Ii8+Ci0JPGxvYWRwcm9wZXJ0aWVzIHNyY0ZpbGU9InRlbXAudHh0Ii8+Ci0JPGRlbGV0ZSBmaWxlPSJ0ZW1wLnR4dCIvPgotCTxlY2hvIG1lc3NhZ2U9ImJhc2UtZG49JHtkaXJlY3Rvcnkuc2VydmVyLmJhc2Vkbn0iIGZpbGU9InRlbXAudHh0Ii8+Ci0JPHJlcGxhY2UgZmlsZT0idGVtcC50eHQiIHRva2VuPSJkYz0iIHZhbHVlPSJkY1xcPSIvPgotCTxsb2FkcHJvcGVydGllcyBzcmNGaWxlPSJ0ZW1wLnR4dCIvPgotCTxkZWxldGUgZmlsZT0idGVtcC50eHQiLz4KKyAgICA8IS0tIHdvcmthcm91bmQgZm9yIGhhbmRsaW5nIHRoZSBzcGVjaWFsIGNoYXJhY3RlciA6IGluIHRoZSBhZG1pbiBjb21tYW5kIC0tPgorICAgIDxlY2hvIG1lc3NhZ2U9ImRpcmVjdG9yeT0ke2RpcmVjdG9yeS5zZXJ2ZXIudXJsfSIgZmlsZT0idGVtcC50eHQiLz4KKyAgICA8cmVwbGFjZSBmaWxlPSJ0ZW1wLnR4dCIgdG9rZW49IjoiIHZhbHVlPSJcXDoiLz4KKyAgICA8bG9hZHByb3BlcnRpZXMgc3JjRmlsZT0idGVtcC50eHQiLz4KKyAgICA8ZGVsZXRlIGZpbGU9InRlbXAudHh0Ii8+CisgICAgPGVjaG8gbWVzc2FnZT0iYmFzZS1kbj0ke2RpcmVjdG9yeS5zZXJ2ZXIuYmFzZWRufSIgZmlsZT0idGVtcC50eHQiLz4KKyAgICA8cmVwbGFjZSBmaWxlPSJ0ZW1wLnR4dCIgdG9rZW49ImRjPSIgdmFsdWU9ImRjXFw9Ii8+CisgICAgPGxvYWRwcm9wZXJ0aWVzIHNyY0ZpbGU9InRlbXAudHh0Ii8+CisgICAgPGRlbGV0ZSBmaWxlPSJ0ZW1wLnR4dCIvPgogICAgIDxlY2hvIG1lc3NhZ2U9InVybD0ke2RpcmVjdG9yeX0iLz4KICAgICA8ZWNobyBtZXNzYWdlPSJiYXNlLWRuPSR7YmFzZS1kbn0iLz4KLQkKLQk8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1hdXRoLXJlYWxtIj4KLQkgICAgPHBhcmFtIG5hbWU9InJlYWxtbmFtZSIgdmFsdWU9IiR7bGRhcC5yZWFsbS5uYW1lfSIvPiAKLQkJPHBhcmFtIG5hbWU9InJlYWxtY2xhc3MiIHZhbHVlPSIke2xkYXAucmVhbG0uY2xhc3N9Ii8+Ci0JCTxwYXJhbSBuYW1lPSJyZWFsbXByb3BlcnRpZXMiIHZhbHVlPSItLXByb3BlcnR5IGRpcmVjdG9yeT0ke2RpcmVjdG9yeX06YmFzZS1kbj1kY1w9JHt1bmlxdWUtbGRhcC1zdWItY29udGV4dC1pZH0sJHtiYXNlLWRufTpqYWFzLWNvbnRleHQ9bGRhcFJlYWxtOmNvbS5zdW4uam5kaS5sZGFwLmNvbm5lY3QucG9vbD10cnVlOmNvbS5zdW4uam5kaS5sZGFwLmNvbm5lY3QucG9vbC5tYXhzaXplPTIiLz4KKworICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWF1dGgtcmVhbG0iPgorICAgICAgICA8cGFyYW0gbmFtZT0icmVhbG1uYW1lIiB2YWx1ZT0iJHtsZGFwLnJlYWxtLm5hbWV9Ii8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJyZWFsbWNsYXNzIiB2YWx1ZT0iJHtsZGFwLnJlYWxtLmNsYXNzfSIvPgorICAgICAgICA8cGFyYW0gbmFtZT0icmVhbG1wcm9wZXJ0aWVzIiB2YWx1ZT0iLS1wcm9wZXJ0eSBkaXJlY3Rvcnk9JHtkaXJlY3Rvcnl9OmJhc2UtZG49ZGNcPSR7dW5pcXVlLWxkYXAtc3ViLWNvbnRleHQtaWR9LCR7YmFzZS1kbn06amFhcy1jb250ZXh0PWxkYXBSZWFsbTpjb20uc3VuLmpuZGkubGRhcC5jb25uZWN0LnBvb2w9dHJ1ZTpjb20uc3VuLmpuZGkubGRhcC5jb25uZWN0LnBvb2wubWF4c2l6ZT0yIi8+CiAgICAgICA8L2FudGNhbGw+CiA8L3RhcmdldD4KIApAQCAtMjU0LDIxICsyNTQsMjEgQEAKIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1hdXRoLWxkYXByZWFsbS1zc2wiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQk8ZWNobyBtZXNzYWdlPSJkaXJlY3Rvcnk9JHtkaXJlY3Rvcnkuc2VydmVyLnVybC5zc2x9IiBmaWxlPSJ0ZW1wLnR4dCIvPgotCTxyZXBsYWNlIGZpbGU9InRlbXAudHh0IiB0b2tlbj0iOiIgdmFsdWU9IlxcOiIvPgotCTxsb2FkcHJvcGVydGllcyBzcmNGaWxlPSJ0ZW1wLnR4dCIvPgotCTxkZWxldGUgZmlsZT0idGVtcC50eHQiLz4KLQk8ZWNobyBtZXNzYWdlPSJiYXNlLWRuPSR7ZGlyZWN0b3J5LnNlcnZlci5iYXNlZG59IiBmaWxlPSJ0ZW1wLnR4dCIvPgotCTxyZXBsYWNlIGZpbGU9InRlbXAudHh0IiB0b2tlbj0iZGM9IiB2YWx1ZT0iZGNcXD0iLz4KLQk8bG9hZHByb3BlcnRpZXMgc3JjRmlsZT0idGVtcC50eHQiLz4KLQk8ZGVsZXRlIGZpbGU9InRlbXAudHh0Ii8+CisgICAgPGVjaG8gbWVzc2FnZT0iZGlyZWN0b3J5PSR7ZGlyZWN0b3J5LnNlcnZlci51cmwuc3NsfSIgZmlsZT0idGVtcC50eHQiLz4KKyAgICA8cmVwbGFjZSBmaWxlPSJ0ZW1wLnR4dCIgdG9rZW49IjoiIHZhbHVlPSJcXDoiLz4KKyAgICA8bG9hZHByb3BlcnRpZXMgc3JjRmlsZT0idGVtcC50eHQiLz4KKyAgICA8ZGVsZXRlIGZpbGU9InRlbXAudHh0Ii8+CisgICAgPGVjaG8gbWVzc2FnZT0iYmFzZS1kbj0ke2RpcmVjdG9yeS5zZXJ2ZXIuYmFzZWRufSIgZmlsZT0idGVtcC50eHQiLz4KKyAgICA8cmVwbGFjZSBmaWxlPSJ0ZW1wLnR4dCIgdG9rZW49ImRjPSIgdmFsdWU9ImRjXFw9Ii8+CisgICAgPGxvYWRwcm9wZXJ0aWVzIHNyY0ZpbGU9InRlbXAudHh0Ii8+CisgICAgPGRlbGV0ZSBmaWxlPSJ0ZW1wLnR4dCIvPgogICAgIDxlY2hvIG1lc3NhZ2U9InVybD0ke2RpcmVjdG9yeX0iLz4KICAgICA8ZWNobyBtZXNzYWdlPSJiYXNlLWRuPSR7YmFzZS1kbn0iLz4KLQkKLQk8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1hdXRoLXJlYWxtIj4KLQkgICAgPHBhcmFtIG5hbWU9InJlYWxtbmFtZSIgdmFsdWU9IiR7bGRhcC5yZWFsbS5uYW1lfSIvPiAKLQkJPHBhcmFtIG5hbWU9InJlYWxtY2xhc3MiIHZhbHVlPSIke2xkYXAucmVhbG0uY2xhc3N9Ii8+Ci0JCTxwYXJhbSBuYW1lPSJyZWFsbXByb3BlcnRpZXMiIHZhbHVlPSItLXByb3BlcnR5IGRpcmVjdG9yeT0ke2RpcmVjdG9yeX06YmFzZS1kbj1kY1w9JHt1bmlxdWUtbGRhcC1zdWItY29udGV4dC1pZH0sJHtiYXNlLWRufTpqYWFzLWNvbnRleHQ9bGRhcFJlYWxtOmNvbS5zdW4uam5kaS5sZGFwLmNvbm5lY3QucG9vbD10cnVlOmNvbS5zdW4uam5kaS5sZGFwLmNvbm5lY3QucG9vbC5tYXhzaXplPTIiLz4KKworICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWF1dGgtcmVhbG0iPgorICAgICAgICA8cGFyYW0gbmFtZT0icmVhbG1uYW1lIiB2YWx1ZT0iJHtsZGFwLnJlYWxtLm5hbWV9Ii8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJyZWFsbWNsYXNzIiB2YWx1ZT0iJHtsZGFwLnJlYWxtLmNsYXNzfSIvPgorICAgICAgICA8cGFyYW0gbmFtZT0icmVhbG1wcm9wZXJ0aWVzIiB2YWx1ZT0iLS1wcm9wZXJ0eSBkaXJlY3Rvcnk9JHtkaXJlY3Rvcnl9OmJhc2UtZG49ZGNcPSR7dW5pcXVlLWxkYXAtc3ViLWNvbnRleHQtaWR9LCR7YmFzZS1kbn06amFhcy1jb250ZXh0PWxkYXBSZWFsbTpjb20uc3VuLmpuZGkubGRhcC5jb25uZWN0LnBvb2w9dHJ1ZTpjb20uc3VuLmpuZGkubGRhcC5jb25uZWN0LnBvb2wubWF4c2l6ZT0yIi8+CiAgICAgICA8L2FudGNhbGw+CiA8L3RhcmdldD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbGRhcC9zaW1wbGV3ZWIvY2xpZW50L0h0dHBCYXNpY0F1dGhUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9sZGFwL3NpbXBsZXdlYi9jbGllbnQvSHR0cEJhc2ljQXV0aFRlc3QuamF2YQppbmRleCA5ZDU5ZGJiLi45MTkzNjlmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9sZGFwL3NpbXBsZXdlYi9jbGllbnQvSHR0cEJhc2ljQXV0aFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9sZGFwL3NpbXBsZXdlYi9jbGllbnQvSHR0cEJhc2ljQXV0aFRlc3QuamF2YQpAQCAtNTksNyArNTksNyBAQAogCiAgICAgICAgIFRocmVhZCB0YXJyYXlbXSA9IG5ldyBUaHJlYWRbdGhyZWFkQ291bnRdOwogCi0gICAgICAgIGZvcihpbnQgaT0wOyBpPHRocmVhZENvdW50OyBpKyspIAorICAgICAgICBmb3IoaW50IGk9MDsgaTx0aHJlYWRDb3VudDsgaSsrKQogICAgICAgICAgICAgdGFycmF5W2ldID0gbmV3IFRocmVhZCh0aGlzLCAiSHR0cC1yZXF1ZXN0LXRocmVhZC0iICsgaSk7CiAKICAgICAgICAgZm9yKGludCBpPTA7IGk8dGhyZWFkQ291bnQ7IGkrKykKQEAgLTgzLDExICs4MywxMSBAQAogCiAgICAgICAgIHN0ZERldiA9IE1hdGgucG93KHN0ZERldiwgMC41KTsKIAotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRvdGFsIHJlcXVlc3RzOiAiICsgKHN1eGVzQ291bnQrZmFpbHVyZUNvdW50KSArIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwgc3VjY2VzcyBjb3VudDogIiArIHN1eGVzQ291bnQgKyAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUb3RhbCByZXF1ZXN0czogIiArIChzdXhlc0NvdW50K2ZhaWx1cmVDb3VudCkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwgc3VjY2VzcyBjb3VudDogIiArIHN1eGVzQ291bnQgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwgZmFpbHVyZSBjb3VudDogIiArIGZhaWx1cmVDb3VudCk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTWluL01heC9BdmcvU3RkRGV2OiAobWlsbGlzZWNvbmRzKSAiICsgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5UaW1lICsgIi8iICsgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTWluL01heC9BdmcvU3RkRGV2OiAobWlsbGlzZWNvbmRzKSAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pblRpbWUgKyAiLyIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4VGltZSArICIvIiArIGF2Z1RpbWUgKyAiLyIgKyBzdGREZXYpOwogCiAgICAgICAgIFN0cmluZyB0ZXN0SWQgPSAiU2VjOjpMREFQIEJhc2ljQXV0aCI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9sZGFwL3NpbXBsZXdlYi9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9sZGFwL3NpbXBsZXdlYi9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggNjdjYTg0OS4uMDEyNTAzNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbGRhcC9zaW1wbGV3ZWIvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2xkYXAvc2ltcGxld2ViL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjEsMTIgKzIxLDEyIEBACiAKIAogPHdlYi1hcHA+Ci0gIAorCiAgIDxzZXJ2bGV0PgogICAgIDxzZXJ2bGV0LW5hbWU+VGVzdEpTUDwvc2VydmxldC1uYW1lPgogICAgIDxqc3AtZmlsZT4vVGVzdEpTUC5qc3A8L2pzcC1maWxlPgogICA8L3NlcnZsZXQ+Ci0gCisKICAgPHNlcnZsZXQ+CiAgICAgPHNlcnZsZXQtbmFtZT5UZXN0U2VydmxldDwvc2VydmxldC1uYW1lPgogICAgIDxzZXJ2bGV0LWNsYXNzPmNvbS5zdW4uc2VjdXJpdHkuZGV2dGVzdHMubGRhcC5zaW1wbGUuVGVzdFNlcnZsZXQ8L3NlcnZsZXQtY2xhc3M+CkBAIC00MCw3ICs0MCw3IEBACiAgICAgPHNlcnZsZXQtbmFtZT5UZXN0U2VydmxldDwvc2VydmxldC1uYW1lPgogICAgIDx1cmwtcGF0dGVybj4vVGVzdFNlcnZsZXQ8L3VybC1wYXR0ZXJuPgogICA8L3NlcnZsZXQtbWFwcGluZz4KLSAgCisKICAgPHNlc3Npb24tY29uZmlnPgogICAgIDxzZXNzaW9uLXRpbWVvdXQ+CiAgICAgICAgICAgICAzMApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbGRhcC9zaW1wbGV3ZWIvd2ViL1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9sZGFwL3NpbXBsZXdlYi93ZWIvVGVzdFNlcnZsZXQuamF2YQppbmRleCBmZTk0YzY2Li5jOTRkZDE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9sZGFwL3NpbXBsZXdlYi93ZWIvVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9sZGFwL3NpbXBsZXdlYi93ZWIvVGVzdFNlcnZsZXQuamF2YQpAQCAtMjYsMzUgKzI2LDM1IEBACiBpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CiAKIAotcHVibGljIGNsYXNzIFRlc3RTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgCitwdWJsaWMgY2xhc3MgVGVzdFNlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldAogewotCS8vIFNlY3VyaXR5IHJvbGUgcmVmZXJlbmNlcy4KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgZW1wX3NlY3JvbGVfcmVmICAgPSAiRW1wbG95ZWUiOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBhZG1pbl9zZWNyb2xlX3JlZiA9ICJBRE1JTiI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIG1ncl9zZWNyb2xlX3JlZiAgID0gIk1hbmFnZXIiOworICAgIC8vIFNlY3VyaXR5IHJvbGUgcmVmZXJlbmNlcy4KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgZW1wX3NlY3JvbGVfcmVmICAgPSAiRW1wbG95ZWUiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBhZG1pbl9zZWNyb2xlX3JlZiA9ICJBRE1JTiI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIG1ncl9zZWNyb2xlX3JlZiAgID0gIk1hbmFnZXIiOwogCiAgICAgICAgIFN0cmluZyB1c2VyPSJtdW50YSI7CiAgICAgICAgIFByb3BlcnRpZXMgcHJvcHM9bnVsbDsKIAogCiAKLSAgICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIAotCXsKKyAgICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uCisgICAgewogICAgICAgICAgICAgUHJpbnRXcml0ZXIgb3V0PSByZXNwb25zZS5nZXRXcml0ZXIoKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8YnI+QmFzaWMgQXV0aGVudGljYXRpb24gdGVzdHMgZnJvbSBTZXJ2bGV0OiBUZXN0MSxUZXN0MixUZXN0MyAiKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8YnI+QXV0aG9yaXphdGlvbiB0ZXN0IGZyb20gU2VydmxldDogVGVzdDQsVGVzdDUtPiBIdHRwU2VydmxldFJlcXVlc3QuaXNVc2VySW5Sb2xlKCkgYXV0aG9yaXphdGlvbiBmcm9tIFNlcnZsZXQuIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgdGVzdDEocmVxdWVzdCwgcmVzcG9uc2UsIG91dCk7CiAgICAgICAgICAgICB0ZXN0MihyZXF1ZXN0LCByZXNwb25zZSwgb3V0KTsKICAgICAgICAgICAgIHRlc3QzKHJlcXVlc3QsIHJlc3BvbnNlLCBvdXQpOwogICAgICAgICAgICAgdGVzdDQocmVxdWVzdCwgcmVzcG9uc2UsIG91dCk7CiAgICAgICAgICAgICB0ZXN0NShyZXF1ZXN0LCByZXNwb25zZSwgb3V0KTsKLQl9CisgICAgfQogCiAKICAgICAgICAgLy9UZXN0cyBiZWdpbgotCXB1YmxpYyB2b2lkIHRlc3QxKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlLCBQcmludFdyaXRlciBvdXQpCi0JeworICAgIHB1YmxpYyB2b2lkIHRlc3QxKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlLCBQcmludFdyaXRlciBvdXQpCisgICAgewogICAgICAgICAgICAgICAgIC8vQ2hlY2sgdGhlIGF1dGggdHlwZSAtIHJlcXVlc3QuZ2V0QXV0aFR5cGUoKQogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8YnI+PGJyPlRlc3QxLiBQb3N0aXZlIGNoZWNrIGZvciB0aGUgY29ycmVjdCBhdXRoZW50aWNhdGlvbiB0eXBlIik7CiAgICAgICAgICAgICAgICAgU3RyaW5nIGF1dGh0eXBlPXJlcXVlc3QuZ2V0QXV0aFR5cGUoKTsKQEAgLTk5LDcgKzk5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8YnI+SHR0cFNlcnZsZXRSZXF1ZXN0LmlzVXNlckluUm9sZSgpIHRlc3QgRmFpbGVkISIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJyPkluZm86cmVxdWVzdC5pc1VzZXJJblJvbGUoXCIiK2VtcF9zZWNyb2xlX3JlZisiXCIpIGlzPSAiK2lzSW5Qcm9wZXJSb2xlKTsKLQl9CisgICAgfQogCiAgICAgICAgIC8vVGVzdDUgLSBOZWdhdGl2ZSB0ZXN0IGZvciBjaGVja2luZyB0aGUgdXNlcidzIHByb3BlciByb2xlCiAgICAgICAgIHB1YmxpYyB2b2lkIHRlc3Q1KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlLCBQcmludFdyaXRlciBvdXQpewpAQCAtMTExLDYgKzExMSw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJyPkh0dHBTZXJ2bGV0UmVxdWVzdC5pc1VzZXJJblJvbGUoKSB0ZXN0IEZhaWxlZCEiKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxicj5JbmZvOnJlcXVlc3QuaXNVc2VySW5Sb2xlKFwiIittZ3Jfc2Vjcm9sZV9yZWYrIlwiKSBpcz0gIitpc05vdEluT3RoZXJSb2xlKTsKLQl9CisgICAgfQogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9sZGFwUmVhbG1QZXJBcHAvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2xkYXBSZWFsbVBlckFwcC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDFiNWJlNDUuLjQ1NGFmZTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2xkYXBSZWFsbVBlckFwcC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2xkYXBSZWFsbVBlckFwcC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzZWN1cml0eSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2xkYXBSZWFsbVBlckFwcC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9sZGFwUmVhbG1QZXJBcHAvYnVpbGQueG1sCmluZGV4IDcyY2U4ZGQuLmE3Y2U2MDcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2xkYXBSZWFsbVBlckFwcC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbGRhcFJlYWxtUGVyQXBwL2J1aWxkLnhtbApAQCAtMzEsNyArMzEsNyBAQAogICAgJmNvbW1vbkJ1aWxkOwogICAgJmNvbW1vblJ1bjsKICAgICZ0ZXN0UHJvcGVydGllczsKLSAgICAKKwogICAgPHRhcmdldCBuYW1lPSJhbGwiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY3JlYXRlLWxkYXAtdXNyZ3JwcyIgLz4KQEAgLTE0MywzNyArMTQzLDM3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1sZGFwLXVzcmdycHMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KIAotICAJICA8Y29weSBmaWxlPSIke2NyZWF0ZS5sZGlmLmZpbGV9IiB0b2ZpbGU9InRlbXAubGRpZiIgb3ZlcndyaXRlPSJ0cnVlIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KLSAgCSAgPGVjaG8gbWVzc2FnZT0iQ3JlYXRpbmcgbGRhcCB0ZXN0IHVzZXJzIGFuZCBncm91cHMgYXQgbGRhcDovLyR7ZGlyZWN0b3J5LnNlcnZlci5ob3N0fToke2RpcmVjdG9yeS5zZXJ2ZXIucG9ydH0vPyR7ZGlyZWN0b3J5LnNlcnZlci5iYXNlZG59Ii8+Ci0JICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtbGRhcC1sZGlmIj4KLQkJPHBhcmFtIG5hbWU9ImxkaWYuZmlsZS5wYXRoIiB2YWx1ZT0idGVtcC5sZGlmIi8+Ci0JICA8L2FudGNhbGw+Ci0JICA8ZWNobyBtZXNzYWdlPSJkZWxldGluZyB0ZW1wIGZpbGUuLi4iLz4KLQkgIDxkZWxldGUgZmlsZT0idGVtcC5sZGlmIi8+CisgICAgICAgIDxjb3B5IGZpbGU9IiR7Y3JlYXRlLmxkaWYuZmlsZX0iIHRvZmlsZT0idGVtcC5sZGlmIiBvdmVyd3JpdGU9InRydWUiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICAgICAgICA8ZWNobyBtZXNzYWdlPSJDcmVhdGluZyBsZGFwIHRlc3QgdXNlcnMgYW5kIGdyb3VwcyBhdCBsZGFwOi8vJHtkaXJlY3Rvcnkuc2VydmVyLmhvc3R9OiR7ZGlyZWN0b3J5LnNlcnZlci5wb3J0fS8/JHtkaXJlY3Rvcnkuc2VydmVyLmJhc2Vkbn0iLz4KKyAgICAgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1sZGFwLWxkaWYiPgorICAgICAgICA8cGFyYW0gbmFtZT0ibGRpZi5maWxlLnBhdGgiIHZhbHVlPSJ0ZW1wLmxkaWYiLz4KKyAgICAgIDwvYW50Y2FsbD4KKyAgICAgIDxlY2hvIG1lc3NhZ2U9ImRlbGV0aW5nIHRlbXAgZmlsZS4uLiIvPgorICAgICAgPGRlbGV0ZSBmaWxlPSJ0ZW1wLmxkaWYiLz4KIAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtbGRhcC11c3JncnBzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gIAkgIDxjb3B5IGZpbGU9IiR7ZGVsZXRlLmxkaWYuZmlsZX0iIHRvZmlsZT0idGVtcC5sZGlmIiBvdmVyd3JpdGU9InRydWUiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgotICAJICA8ZWNobyBtZXNzYWdlPSJEZWxldGluZyBsZGFwIHRlc3QgdXNlcnMgYW5kIGdyb3VwcyBhdCBsZGFwOi8vJHtkaXJlY3Rvcnkuc2VydmVyLmhvc3R9OiR7ZGlyZWN0b3J5LnNlcnZlci5wb3J0fS8/JHtkaXJlY3Rvcnkuc2VydmVyLmJhc2Vkbn0iLz4KLQkgIDxhbnRjYWxsIHRhcmdldD0iZXhlY3V0ZS1sZGFwLWxkaWYiPgotCQk8cGFyYW0gbmFtZT0ibGRpZi5maWxlLnBhdGgiIHZhbHVlPSJ0ZW1wLmxkaWYiLz4KLQkgIDwvYW50Y2FsbD4KLQkgIDxlY2hvIG1lc3NhZ2U9ImRlbGV0aW5nIHRlbXAgZmlsZS4uLiIvPgotCSAgPGRlbGV0ZSBmaWxlPSJ0ZW1wLmxkaWYiLz4KKyAgICAgICAgPGNvcHkgZmlsZT0iJHtkZWxldGUubGRpZi5maWxlfSIgdG9maWxlPSJ0ZW1wLmxkaWYiIG92ZXJ3cml0ZT0idHJ1ZSIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CisgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkRlbGV0aW5nIGxkYXAgdGVzdCB1c2VycyBhbmQgZ3JvdXBzIGF0IGxkYXA6Ly8ke2RpcmVjdG9yeS5zZXJ2ZXIuaG9zdH06JHtkaXJlY3Rvcnkuc2VydmVyLnBvcnR9Lz8ke2RpcmVjdG9yeS5zZXJ2ZXIuYmFzZWRufSIvPgorICAgICAgPGFudGNhbGwgdGFyZ2V0PSJleGVjdXRlLWxkYXAtbGRpZiI+CisgICAgICAgIDxwYXJhbSBuYW1lPSJsZGlmLmZpbGUucGF0aCIgdmFsdWU9InRlbXAubGRpZiIvPgorICAgICAgPC9hbnRjYWxsPgorICAgICAgPGVjaG8gbWVzc2FnZT0iZGVsZXRpbmcgdGVtcCBmaWxlLi4uIi8+CisgICAgICA8ZGVsZXRlIGZpbGU9InRlbXAubGRpZiIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJleGVjdXRlLWxkYXAtbGRpZiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCTxqYXZhIGNsYXNzbmFtZT0iTERBUE1vZGlmeSIgZm9yaz0idHJ1ZSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KLQkJPGFyZyBsaW5lPSItaCAke2RpcmVjdG9yeS5zZXJ2ZXIuaG9zdH0iLz4KLQkJPGFyZyBsaW5lPSItcCAke2RpcmVjdG9yeS5zZXJ2ZXIucG9ydH0iLz4KLQkJPGFyZyBsaW5lPSItRCAmcXVvdDske2RpcmVjdG9yeS5tYW5hZ2VyLmRufSZxdW90OyIvPgotCQk8YXJnIGxpbmU9Ii13ICR7ZGlyZWN0b3J5Lm1hbmFnZXIucGFzc3dkfSIvPgotCQk8YXJnIGxpbmU9Ii1mICR7bGRpZi5maWxlLnBhdGh9Ii8+Ci0JCTxjbGFzc3BhdGg+Ci0JCQk8cGF0aGVsZW1lbnQgcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9sZGFwamRrLmphciIvPgotCQk8L2NsYXNzcGF0aD4KLQk8L2phdmE+CisgICAgPGphdmEgY2xhc3NuYW1lPSJMREFQTW9kaWZ5IiBmb3JrPSJ0cnVlIiBmYWlsb25lcnJvcj0iZmFsc2UiPgorICAgICAgICA8YXJnIGxpbmU9Ii1oICR7ZGlyZWN0b3J5LnNlcnZlci5ob3N0fSIvPgorICAgICAgICA8YXJnIGxpbmU9Ii1wICR7ZGlyZWN0b3J5LnNlcnZlci5wb3J0fSIvPgorICAgICAgICA8YXJnIGxpbmU9Ii1EICZxdW90OyR7ZGlyZWN0b3J5Lm1hbmFnZXIuZG59JnF1b3Q7Ii8+CisgICAgICAgIDxhcmcgbGluZT0iLXcgJHtkaXJlY3RvcnkubWFuYWdlci5wYXNzd2R9Ii8+CisgICAgICAgIDxhcmcgbGluZT0iLWYgJHtsZGlmLmZpbGUucGF0aH0iLz4KKyAgICAgICAgPGNsYXNzcGF0aD4KKyAgICAgICAgICAgIDxwYXRoZWxlbWVudCBwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL2xkYXBqZGsuamFyIi8+CisgICAgICAgIDwvY2xhc3NwYXRoPgorICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbGRhcFJlYWxtUGVyQXBwL2NsaWVudC9ScGFDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2xkYXBSZWFsbVBlckFwcC9jbGllbnQvUnBhQ2xpZW50LmphdmEKaW5kZXggN2U2MDAyZS4uNzI2ZGNkMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbGRhcFJlYWxtUGVyQXBwL2NsaWVudC9ScGFDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9sZGFwUmVhbG1QZXJBcHAvY2xpZW50L1JwYUNsaWVudC5qYXZhCkBAIC0zMSwzMSArMzEsMzEgQEAKICAgICAgICAgUnBhQ2xpZW50IGNsaWVudCA9IG5ldyBScGFDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgUnBhQ2xpZW50KFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgLy9zdXBlcihhcmdzKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGRvVGVzdCgpIHsKLSAgICAgICAgCi0JUnBhUmVtb3RlIGhyPW51bGw7CisKKyAgICBScGFSZW1vdGUgaHI9bnVsbDsKICAgICAgICAgU3RyaW5nIHJlcz1udWxsOwogICAgICAgICBDb250ZXh0IGljID0gbnVsbDsKICAgICAgICAgTG9naW5Db250ZXh0IGxjPW51bGw7CiAgICAgICAgIFJwYUhvbWUgaG9tZT1udWxsOwogICAgICAgICBTdHJpbmcgdGVzdElkID0gIlNlYzo6IExEQVAgcmVhbG0iOwotICAgIAl0cnl7CisgICAgICAgIHRyeXsKICAgICAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlNlY3VyaXR5OjogTERBUCByZWFsbSIpOwotCSAgICBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyIAorICAgICAgICBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICAgICAgICAgICAgLy8gY3JlYXRlIEVKQiB1c2luZyBmYWN0b3J5IGZyb20gY29udGFpbmVyCiAgICAgICAgICAgICBqYXZhLmxhbmcuT2JqZWN0IG9ianJlZiA9IGljLmxvb2t1cCgicnBhTG9naW5CZWFuIik7Ci0JCQotCSAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkxvb2tlZCB1cCBob21lISEiKTsKLQkJCi0JICAgIGhvbWUgPSAoUnBhSG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3coCi0JCQkJCSAgIG9ianJlZiwgUnBhSG9tZS5jbGFzcyk7Ci0JICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTmFycm93ZWQgaG9tZSEhIik7Ci0JCQkJCisKKyAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJMb29rZWQgdXAgaG9tZSEhIik7CisKKyAgICAgICAgaG9tZSA9IChScGFIb21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdygKKyAgICAgICAgICAgICAgICAgICAgICAgb2JqcmVmLCBScGFIb21lLmNsYXNzKTsKKyAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJOYXJyb3dlZCBob21lISEiKTsKKwogICAgICAgICAgICAgaHIgPSBob21lLmNyZWF0ZSgiTGl6SHVybGV5Iik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCB0aGUgRUpCISEiKTsKIApAQCAtODEsMTEgKzgxLDExIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxEQVAgUmVhbG06UnBhTG9naW5CZWFuIFRlc3QgRmFpbGVkIik7CiAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgtMSk7Ci0JfSBmaW5hbGx5IHsKKyAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVzOwotICAgICAgICAKKwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbGRhcFJlYWxtUGVyQXBwL3Nob3BwaW5nL1JwYUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2xkYXBSZWFsbVBlckFwcC9zaG9wcGluZy9ScGFCZWFuLmphdmEKaW5kZXggZDY0NjJkZS4uNGYxZWM5MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbGRhcFJlYWxtUGVyQXBwL3Nob3BwaW5nL1JwYUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9sZGFwUmVhbG1QZXJBcHAvc2hvcHBpbmcvUnBhQmVhbi5qYXZhCkBAIC0zNSwyNiArMzUsMjYgQEAKICAqLwogCiBwdWJsaWMgY2xhc3MgUnBhQmVhbiBpbXBsZW1lbnRzIFNlc3Npb25CZWFuIHsKLSAgICAKKwogICAgIHByaXZhdGUgU3RyaW5nIHNob3BwZXIgPSAiYW5vbnltb3VzIjsKICAgICBwcml2YXRlIFN0cmluZyBwcmluY2lwYWwgPSAiajJlZS9zaGluZ3dhaSI7CiAgICAgcHJpdmF0ZSBpbnQgdG90YWxQcmljZSA9IDA7Ci0gICAgCisKICAgICBwcml2YXRlIGludCB0b3RhbEl0ZW1zID0gMDsKLSAgICAKKwogICAgIHByaXZhdGUgTGlzdDxTdHJpbmc+IGl0ZW1zOwotICAgIAorCiAgICAgcHJpdmF0ZSBMaXN0PEludGVnZXI+IGl0ZW1QcmljZTsKLSAgICAKKwogICAgIHByaXZhdGUgU2Vzc2lvbkNvbnRleHQgc2MgPSBudWxsOwotICAgIAorCiAgICAgLyoqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgU2hvcHBpbmdFSkIgKi8KICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoU3RyaW5nIHNob3BwZXJOYW1lKSB7CiAgICAgICAgIHNob3BwZXIgPSBzaG9wcGVyTmFtZTsKICAgICAgICAgaXRlbXMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKICAgICAgICAgaXRlbVByaWNlID0gbmV3IEFycmF5TGlzdDxJbnRlZ2VyPigpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGFkZEl0ZW0oU3RyaW5nIGl0ZW0sIGludCBwcmljZSkgdGhyb3dzIEVKQkV4Y2VwdGlvbiwKICAgICAgICAgUmVtb3RlRXhjZXB0aW9uewogICAgICAgICBjaGVja0NhbGxlclByaW5jaXBhbCgpOwpAQCAtNjYsNDcgKzY2LDQ3IEBACiAgICAgICAgICAgICArIGl0ZW0gKyIgZm9yIHByaWNlID0iKyBwcmljZSArIiAuVG90YWwgSXRlbXMgPSAiK3RvdGFsSXRlbXMgKwogICAgICAgICAgICAgIiAuVG90YWxQcmljZSA9ICIgKyB0b3RhbFByaWNlKTsKICAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgZGVsZXRlSXRlbShTdHJpbmcgaXRlbSkgdGhyb3dzIEVKQkV4Y2VwdGlvbiwgCisKKyAgICBwdWJsaWMgdm9pZCBkZWxldGVJdGVtKFN0cmluZyBpdGVtKSB0aHJvd3MgRUpCRXhjZXB0aW9uLAogICAgICAgICBSZW1vdGVFeGNlcHRpb257CiAgICAgICAgIGNoZWNrQ2FsbGVyUHJpbmNpcGFsKCk7CiAgICAgICAgIGludCBpbmRleCA9IGl0ZW1zLmluZGV4T2YoaXRlbSk7CiAgICAgICAgIGl0ZW1zLnJlbW92ZShpdGVtKTsKICAgICAgICAgSW50ZWdlciBwcmljZSA9IGl0ZW1QcmljZS5nZXQoaW5kZXgpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNob3BwaW5nIENhcnQ6IFJlbW92aW5nIGl0ZW0gIisgaXRlbSArIiBAcHJpY2UgIisgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2hvcHBpbmcgQ2FydDogUmVtb3ZpbmcgaXRlbSAiKyBpdGVtICsiIEBwcmljZSAiKwogICAgICAgICAgICAgcHJpY2UuaW50VmFsdWUoKSk7CiAgICAgICAgIHRvdGFsUHJpY2UgLT0gcHJpY2Uuc2hvcnRWYWx1ZSgpOwotICAgICAgICBpdGVtUHJpY2UucmVtb3ZlKGluZGV4KTsgICAgICAgICAgICAgICAgICAgIAorICAgICAgICBpdGVtUHJpY2UucmVtb3ZlKGluZGV4KTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgU2hvcHBpbmcgQ2FydDogU2hvcHBlciAiKyBzaG9wcGVyICsiICAuVG90YWwgSXRlbXMgPSAiK3RvdGFsSXRlbXMgKwogICAgICAgICAgICAgIiAuVG90YWxQcmljZSA9ICIgKyB0b3RhbFByaWNlKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgZG91YmxlIGdldFRvdGFsQ29zdCgpIHRocm93cyBFSkJFeGNlcHRpb257CiAgICAgICAgIGNoZWNrQ2FsbGVyUHJpbmNpcGFsKCk7CiAgICAgICAgIHJldHVybiB0b3RhbFByaWNlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRJdGVtcygpIHRocm93cyBFSkJFeGNlcHRpb257CiAgICAgICAgIGNoZWNrQ2FsbGVyUHJpbmNpcGFsKCk7CiAgICAgICAgIFN0cmluZ1tdIGl0ZW1OYW1lcyA9IGl0ZW1zLnRvQXJyYXkobmV3IFN0cmluZ1swXSk7CiAgICAgICAgIHJldHVybiBpdGVtTmFtZXM7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gUnBhIGVqYkFjdGl2YXRlIik7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gUnBhIGVqYlBhc3NpdmF0ZSIpOwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBScGEgZWpiUmVtb3ZlIik7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChqYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dCBzZXNzaW9uQ29udGV4dCkgewogICAgICAgICBzYyA9IHNlc3Npb25Db250ZXh0OwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2xkYXBSZWFsbVBlckFwcC9zaG9wcGluZy9ScGFIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9sZGFwUmVhbG1QZXJBcHAvc2hvcHBpbmcvUnBhSG9tZS5qYXZhCmluZGV4IDNkYTVkNjcuLmE2NjA2NWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2xkYXBSZWFsbVBlckFwcC9zaG9wcGluZy9ScGFIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbGRhcFJlYWxtUGVyQXBwL3Nob3BwaW5nL1JwYUhvbWUuamF2YQpAQCAtMjcsOCArMjcsOCBAQAogICogQGF1dGhvciAgSGFycHJlZXQgU2luZ2gKICAqLwogcHVibGljIGludGVyZmFjZSBScGFIb21lIGV4dGVuZHMgRUpCSG9tZXsKLSAgICAKLSAgICBwdWJsaWMgUnBhUmVtb3RlIGNyZWF0ZShqYXZhLmxhbmcuU3RyaW5nIHNob3BwZXJOYW1lKSAKKworICAgIHB1YmxpYyBScGFSZW1vdGUgY3JlYXRlKGphdmEubGFuZy5TdHJpbmcgc2hvcHBlck5hbWUpCiAgICAgICAgIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24sIGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbjsKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbGRhcFJlYWxtUGVyQXBwL3Nob3BwaW5nL1JwYVJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbGRhcFJlYWxtUGVyQXBwL3Nob3BwaW5nL1JwYVJlbW90ZS5qYXZhCmluZGV4IGZiOGE3NzMuLjQzYTM5OTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L2xkYXBSZWFsbVBlckFwcC9zaG9wcGluZy9ScGFSZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9sZGFwUmVhbG1QZXJBcHAvc2hvcHBpbmcvUnBhUmVtb3RlLmphdmEKQEAgLTIzLDE3ICsyMywxNyBAQAogcGFja2FnZSBzaG9wcGluZzsKIGltcG9ydCBqYWthcnRhLmVqYi5FSkJPYmplY3Q7CiAvKioKLSAqIFNob3BwaW5nIENhcnQgU3RhdGVmdWwgU2Vzc2lvbiBCZWFuLiBKdXN0IHRlc3RzIC1EajJlZWxvZ2luLm5hbWUgCisgKiBTaG9wcGluZyBDYXJ0IFN0YXRlZnVsIFNlc3Npb24gQmVhbi4gSnVzdCB0ZXN0cyAtRGoyZWVsb2dpbi5uYW1lCiAgKiAgLURqMmVlbG9naW4ucGFzc3dvcmQgc3lzdGVtIHByb3BlcnRpZXMuCiAgKiBAYXV0aG9yICBoc2luZ2gKICAqLwogcHVibGljIGludGVyZmFjZSBScGFSZW1vdGUgZXh0ZW5kcyBFSkJPYmplY3QgewotICAgICAgICAgICAgCisKICAgICBwdWJsaWMgdm9pZCBhZGRJdGVtKGphdmEubGFuZy5TdHJpbmcgaXRlbSwgaW50IHByaWNlKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgZGVsZXRlSXRlbShqYXZhLmxhbmcuU3RyaW5nIGl0ZW0pIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247Ci0gICAgICAgCisKICAgICBwdWJsaWMgZG91YmxlIGdldFRvdGFsQ29zdCgpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgamF2YS5sYW5nLlN0cmluZ1tdIGdldEl0ZW1zKCkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L21kYi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbWRiL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZjIyNjQyZi4uZjk2MTEyOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbWRiL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbWRiL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIxICsxNSwyMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic2VjdXJpdHktbWRiIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9tZGIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbWRiL2J1aWxkLnhtbAppbmRleCA5N2JlZTcxLi42OTllNDdlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9tZGIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L21kYi9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCAgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ2LDE0ICs0NiwxNCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkJlYW4qLmNsYXNzLCoqLypIZWxsbyoiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovKkNsaWVudCouY2xhc3MiIC8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjMsNyArNjMsNyBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJjcmVhdGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtcmVzb3VyY2VzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1iYXRjaC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhc2FkbWluLmZpbGUiIHZhbHVlPSJkZWxldGVfcmVzb3VyY2VzLmFzYWRtaW4iLz4KQEAgLTc1LDE0ICs3NSwxNCBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9IjEiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+Ci0gICAgICAgIDxlY2hvPiAgICAgICAgIAorICAgICAgICA8ZWNobz4KICAgICAgICAgICBhbnQgY3JlYXRlLXJlc291cmNlcyBDcmVhdGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgICBhbnQgZGVsZXRlLXJlc291cmNlcyBEZWxldGUgYWxsIGRlc3RpbmF0aW9ucyBhbmQgY29ubmVjdGlvbiBmYWN0b3JpZXMKICAgICAgICAgPC9lY2hvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbWRiL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L21kYi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggYmQ5MGMzMy4uZGVhZjllNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbWRiL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9tZGIvY2xpZW50L0NsaWVudC5qYXZhCkBAIC00Miw3ICs0Miw3IEBACiAgICAgfQogCiAKLSAgICBAUmVzb3VyY2UobmFtZT0iRm9vQ0YiLCBtYXBwZWROYW1lPSJqbXMvc2VjdXJpdHlfbWRiX1FDRiIpIAorICAgIEBSZXNvdXJjZShuYW1lPSJGb29DRiIsIG1hcHBlZE5hbWU9Imptcy9zZWN1cml0eV9tZGJfUUNGIikKICAgICBwcml2YXRlIHN0YXRpYyBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHF1ZXVlQ29uRmFjdG9yeTsKIAogICAgIEBSZXNvdXJjZShuYW1lPSJNc2dCZWFuUXVldWUiLCBtYXBwZWROYW1lPSJqbXMvc2VjdXJpdHlfbWRiX0luUXVldWUiKQpAQCAtNTAsNyArNTAsNyBAQAogCiAvLyAgICBAUmVzb3VyY2UobmFtZT0iQ2xpZW50UXVldWUiLCBtYXBwZWROYW1lPSJmb28iKQogLy8gICAgcHJpdmF0ZSBzdGF0aWMgamFrYXJ0YS5qbXMuUXVldWUgY2xpZW50UXVldWU7Ci1AUmVzb3VyY2UobmFtZT0iQ2xpZW50UXVldWUiLCBtYXBwZWROYW1lPSJqbXMvc2VjdXJpdHlfbWRiX091dFF1ZXVlIikgCitAUmVzb3VyY2UobmFtZT0iQ2xpZW50UXVldWUiLCBtYXBwZWROYW1lPSJqbXMvc2VjdXJpdHlfbWRiX091dFF1ZXVlIikKIHByaXZhdGUgc3RhdGljIGpha2FydGEuam1zLlF1ZXVlIGNsaWVudFF1ZXVlOwogCiAKQEAgLTYyLDcgKzYyLDcgQEAKIAogICAgIHByaXZhdGUgaW50IG51bU1lc3NhZ2VzID0gMjsKICAgICBwdWJsaWMgQ2xpZW50KFN0cmluZ1tdIGFyZ3MpIHsKLSAgICAgICAgCisKICAgICAgICAgaWYoIGFyZ3MubGVuZ3RoID09IDEgKSB7CiAgICAgICAgICAgICBudW1NZXNzYWdlcyA9IG5ldyBJbnRlZ2VyKGFyZ3NbMF0pLmludFZhbHVlKCk7CiAgICAgICAgIH0KQEAgLTgyLDE0ICs4MiwxNCBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldHVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIHF1ZXVlQ29uID0gcXVldWVDb25GYWN0b3J5LmNyZWF0ZVF1ZXVlQ29ubmVjdGlvbigpOwogCiAgICAgICAgIHF1ZXVlU2Vzc2lvbiA9IHF1ZXVlQ29uLmNyZWF0ZVF1ZXVlU2Vzc2lvbgotICAgICAgICAgICAgKGZhbHNlLCBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UpOyAKKyAgICAgICAgICAgIChmYWxzZSwgU2Vzc2lvbi5BVVRPX0FDS05PV0xFREdFKTsKIAogICAgICAgICAvLyBQcm9kdWNlciB3aWxsIGJlIHNwZWNpZmllZCB3aGVuIGFjdHVhbCBtc2cgaXMgc2VudC4KLSAgICAgICAgcXVldWVTZW5kZXIgPSBxdWV1ZVNlc3Npb24uY3JlYXRlU2VuZGVyKG51bGwpOyAgICAgICAgCisgICAgICAgIHF1ZXVlU2VuZGVyID0gcXVldWVTZXNzaW9uLmNyZWF0ZVNlbmRlcihudWxsKTsKIAogICAgICAgICBxdWV1ZVJlY2VpdmVyID0gcXVldWVTZXNzaW9uLmNyZWF0ZVJlY2VpdmVyKGNsaWVudFF1ZXVlKTsKIApAQCAtMTA3LDE4ICsxMDcsMTggQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHNlbmRNc2dzKGpha2FydGEuam1zLlF1ZXVlIHF1ZXVlLCBNZXNzYWdlIG1zZywgaW50IG51bSkgCisgICAgcHVibGljIHZvaWQgc2VuZE1zZ3MoamFrYXJ0YS5qbXMuUXVldWUgcXVldWUsIE1lc3NhZ2UgbXNnLCBpbnQgbnVtKQogICAgICAgICB0aHJvd3MgSk1TRXhjZXB0aW9uIHsKICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bTsgaSsrKSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlbmRpbmcgbWVzc2FnZSAiICsgaSArICIgdG8gIiArIHF1ZXVlICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlbmRpbmcgbWVzc2FnZSAiICsgaSArICIgdG8gIiArIHF1ZXVlICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGF0IHRpbWUgIiArIFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsKICAgICAgICAgICAgIHF1ZXVlU2VuZGVyLnNlbmQocXVldWUsIG1zZyk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlbnQgbWVzc2FnZSAiICsgaSArICIgdG8gIiArIHF1ZXVlICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlbnQgbWVzc2FnZSAiICsgaSArICIgdG8gIiArIHF1ZXVlICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGF0IHRpbWUgIiArIFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdChpbnQgbnVtKSAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoaW50IG51bSkKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgRGVzdGluYXRpb24gZGVzdCA9IG1zZ0JlYW5RdWV1ZTsKQEAgLTEzMiw3ICsxMzIsNyBAQAogLyogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV2FpdGluZyBmb3IgcXVldWUgbWVzc2FnZSIpOwogICAgICAgICBNZXNzYWdlIHJlY3ZkbWVzc2FnZSA9IHF1ZXVlUmVjZWl2ZXIucmVjZWl2ZShUSU1FT1VUKTsKICAgICAgICAgaWYoIHJlY3ZkbWVzc2FnZSAhPSBudWxsICkgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZWNlaXZlZCBtZXNzYWdlIDogIiArIAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZWNlaXZlZCBtZXNzYWdlIDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVGV4dE1lc3NhZ2UpcmVjdmRtZXNzYWdlKS5nZXRUZXh0KCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0aW1lb3V0IGFmdGVyICIgKyBUSU1FT1VUICsgIiBzZWNvbmRzIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9tZGIvZWpiL0hlbGxvMS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbWRiL2VqYi9IZWxsbzEuamF2YQppbmRleCA4NzZmMGFiLi5jMDRkNmJjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9tZGIvZWpiL0hlbGxvMS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L21kYi9lamIvSGVsbG8xLmphdmEKQEAgLTE5LDUgKzE5LDUgQEAKIHB1YmxpYyBpbnRlcmZhY2UgSGVsbG8xIHsKIAogICAgIHB1YmxpYyB2b2lkIGhlbGxvKFN0cmluZyBzKTsKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbWRiL2VqYi9IZWxsb1N0YXRlZnVsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9tZGIvZWpiL0hlbGxvU3RhdGVmdWwuamF2YQppbmRleCA1OGFlMzk4Li5lZGMyM2M0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9tZGIvZWpiL0hlbGxvU3RhdGVmdWwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9tZGIvZWpiL0hlbGxvU3RhdGVmdWwuamF2YQpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnKTsKICAgICB9CiAgICAgQFByZURlc3Ryb3kgcHVibGljIHZvaWQgbXlQcmVEZXN0cm95TWV0aG9kKCkgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBSRS1ERVNUUk9ZIGNhbGxiYWNrIHJlY2VpdmVkIGluICIgKyBtc2cpOyAgICAgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUFJFLURFU1RST1kgY2FsbGJhY2sgcmVjZWl2ZWQgaW4gIiArIG1zZyk7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9tZGIvZWpiL0hlbGxvU3RhdGVsZXNzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9tZGIvZWpiL0hlbGxvU3RhdGVsZXNzLmphdmEKaW5kZXggNzc0MGUzNy4uNmMwMjc3MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbWRiL2VqYi9IZWxsb1N0YXRlbGVzcy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L21kYi9lamIvSGVsbG9TdGF0ZWxlc3MuamF2YQpAQCAtMjIsNyArMjIsNyBAQAogLy8gSGVsbG8xIGludGVyZmFjZSBpcyBub3QgYW5ub3RhdGVkIHdpdGggQExvY2FsLiBJZiB0aGUKIC8vIGJlYW4gb25seSBpbXBsZW1lbnRzIG9uZSBpbnRlcmZhY2UgaXQgaXMgYXNzdW1lZCB0byBiZQogLy8gYSBsb2NhbCBidXNpbmVzcyBpbnRlcmZhY2UuCi1AU3RhdGVsZXNzKGRlc2NyaXB0aW9uPSJteSBzdGF0ZWxlc3MgYmVhbiBkZXNjcmlwdGlvbiIpIAorQFN0YXRlbGVzcyhkZXNjcmlwdGlvbj0ibXkgc3RhdGVsZXNzIGJlYW4gZGVzY3JpcHRpb24iKQogcHVibGljIGNsYXNzIEhlbGxvU3RhdGVsZXNzIGltcGxlbWVudHMgSGVsbG8xIHsKIAogICAgIEBSb2xlc0FsbG93ZWQoImphdmFlZSIpCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9tZGIvZWpiL01lc3NhZ2VCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9tZGIvZWpiL01lc3NhZ2VCZWFuLmphdmEKaW5kZXggNjdlYjkxOS4uNWI4MjUwMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbWRiL2VqYi9NZXNzYWdlQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L21kYi9lamIvTWVzc2FnZUJlYW4uamF2YQpAQCAtNDcsOCArNDcsOCBAQAogICAgIEBFSkIgcHJpdmF0ZSBIZWxsbzEgaGVsbG8xOwogICAgIEBFSkIgcHJpdmF0ZSBIZWxsbzIgaGVsbG8yOwogCi0gICAgQFJlc291cmNlKG5hbWU9Imptcy9NeVF1ZXVlQ29ubmVjdGlvbkZhY3RvcnkiLCAKLSAgICAgICAgICAgICAgbWFwcGVkTmFtZT0iam1zL3NlY3VyaXR5X21kYl9RQ0YiKSAKKyAgICBAUmVzb3VyY2UobmFtZT0iam1zL015UXVldWVDb25uZWN0aW9uRmFjdG9yeSIsCisgICAgICAgICAgICAgIG1hcHBlZE5hbWU9Imptcy9zZWN1cml0eV9tZGJfUUNGIikKICAgICBRdWV1ZUNvbm5lY3Rpb25GYWN0b3J5IHFjRmFjdG9yeTsKIAogICAgIEBSZXNvdXJjZShtYXBwZWROYW1lPSJqbXMvc2VjdXJpdHlfbWRiX091dFF1ZXVlIikgUXVldWUgY2xpZW50UXVldWU7CkBAIC01OCw3ICs1OCw3IEBACiAKICAgICAgICAgUXVldWVDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBudWxsOwogICAgICAgICB0cnkgewotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbGluZyBoZWxsbzEgc3RhdGVsZXNzIGJlYW4iKTsKICAgICAgICAgICAgIGhlbGxvMS5oZWxsbygibG9jYWwgZWpiMy4wIHN0YXRlbGVzcyIpOwogCkBAIC03NiwxNCArNzYsMTQgQEAKICAgICAgICAgICAgIFF1ZXVlU2Vzc2lvbiBzZXNzaW9uID0gY29ubmVjdGlvbi5jcmVhdGVRdWV1ZVNlc3Npb24oZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSk7CiAgICAgICAgICAgICBRdWV1ZVNlbmRlciBzZW5kZXIgPSBzZXNzaW9uLmNyZWF0ZVNlbmRlcihjbGllbnRRdWV1ZSk7Ci0JCWNvbm5lY3Rpb24uc3RhcnQoKTsKLSAKKyAgICAgICAgY29ubmVjdGlvbi5zdGFydCgpOworCiAgICAgICAgICAgICBUZXh0TWVzc2FnZSB0bWVzc2FnZSA9IHNlc3Npb24uY3JlYXRlVGV4dE1lc3NhZ2UoKTsKICAgICAgICAgICAgIHRtZXNzYWdlLnNldFRleHQoIm1kYigpIGludm9rZWQiKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VuZGluZyBtZXNzYWdlIik7CiAgICAgICAgICAgICBzZW5kZXIuc2VuZCh0bWVzc2FnZSk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm1lc3NhZ2Ugc2VudCIpOwotCQljb25uZWN0aW9uLmNsb3NlKCk7CisgICAgICAgIGNvbm5lY3Rpb24uY2xvc2UoKTsKIAogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbXVsdGlSb2xlTWFwcGluZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbXVsdGlSb2xlTWFwcGluZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGM1ZjQ2YTQuLjJjNjJmNmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L211bHRpUm9sZU1hcHBpbmcvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9tdWx0aVJvbGVNYXBwaW5nL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InNlY3VyaXR5LW11bHRpcm9sZW1hcHBpbmciLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9tdWx0aVJvbGVNYXBwaW5nL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L211bHRpUm9sZU1hcHBpbmcvYnVpbGQueG1sCmluZGV4IGRlYmY2Y2YuLjVlNjRkOWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L211bHRpUm9sZU1hcHBpbmcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L211bHRpUm9sZU1hcHBpbmcvYnVpbGQueG1sCkBAIC0yNSwxOCArMjUsMTggQEAKIF0+CiAKIDxwcm9qZWN0IG5hbWU9InNlY3VyaXR5LW11bHRpcm9sZW1hcHBpbmciIGRlZmF1bHQ9InVzYWdlIiBiYXNlZGlyPSIuIj4KLSAgCisKICAgJmNvbW1vblNldHVwOwogICAmY29tbW9uQnVpbGQ7CiAgICZ0ZXN0cHJvcGVydGllczsKICAgJmNvbW1vblNlY3VyaXR5OwotICAKKwogICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iY2xlYW4sIHNldHVwLCBidWlsZCwgZGVwbG95LCBydW4sIHVuZGVwbG95LCB1bnNldHVwIi8+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDwhLS0gc2VlIHJlYWRtZSBmb3IgbGlzdCBvZiBob3cgYWxsIHRoZSB1c2VycyBhcmUgdXNlZCAtLT4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS11c2VyLWNvbW1vbiI+CkBAIC0xNDksMTAgKzE0OSwxMCBAQAogICAgICAgPHBhcmFtIG5hbWU9InBhc3N3b3JkIiB2YWx1ZT0iamF2YWVlIi8+CiAgICAgICA8cGFyYW0gbmFtZT0iZ3JvdXBzIiB2YWx1ZT0iYWJjIi8+CiAgICAgPC9hbnRjYWxsPgotICAgIAorCiAgIDwhLS0gIDxhbnRjYWxsIHRhcmdldD0icmVjb25maWctY29tbW9uIi8+LS0+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9InVuc2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS11c2VyLWNvbW1vbiI+CiAgICAgICA8cGFyYW0gbmFtZT0idXNlciIgdmFsdWU9InIxcDEiLz4KQEAgLTIyMSw3ICsyMjEsNyBAQAogICAgICAgPHBhcmFtIG5hbWU9InVzZXIiIHZhbHVlPSJyN3AyIi8+CiAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiMSIvPgpAQCAtMjQ3LDExICsyNDcsMTEgQEAKICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICAtLT4KICAgPC90YXJnZXQ+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgotICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+IAotICAgIAorICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CisKICAgICA8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2UtZWpiamFyLWNvbW1vbiI+CiAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vbm9ud2ViMSIvPgogICAgICAgPHBhcmFtIG5hbWU9ImVqYi5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfTEtZWpiLmphciIvPgpAQCAtMjY5LDIwICsyNjksMjAgQEAKICAgICAgIDxwYXJhbSBuYW1lPSJ3YXIuZmlsZSIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIiLz4KICAgICAgIDxwYXJhbSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KICAgICA8L2FudGNhbGw+Ci0gICAgCisKICAgICA8IS0tCiAgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLWFwcGNsaWVudGphci1jb21tb24iPgogICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L25vbndlYiIvPgotICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5qYXIiIAorICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5qYXIiCiAgICAgICAgICAgICAgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KLSAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgdmFsdWU9ImNvbS9zdW4vKiovY2xpZW50LyouY2xhc3MsY29tL3N1bi8qKi9lamIvSGVsbG8uY2xhc3MiLz4KICAgICA8L2FudGNhbGw+CiAgICAgLS0+Ci0gICAgCi0gICAgPGNvcHkgZmlsZT0iJHthcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+IAotICAgIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+IAotICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIj4gCisKKyAgICA8Y29weSBmaWxlPSIke2FwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KKyAgICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIj4KICAgICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi53YXIiLz4KQEAgLTI5Miw5ICsyOTIsOSBAQAogICAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiAgICAgICA8L2ZpbGVzZXQ+CiAgICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LkFQU19IT01FfS9saWIiIGluY2x1ZGVzPSJyZXBvcnRlci5qYXIiLz4KLSAgICA8L2phcj4gICAKLSAgICAKLSAgICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIvPiAKKyAgICA8L2phcj4KKworICAgIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiPgogICAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgogICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLmphciIvPgpAQCAtMzAzLDkgKzMwMyw5IEBACiAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ij4KICAgICAgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogICAgICAgPC9maWxlc2V0PgotICAgIDwvamFyPiAgIAorICAgIDwvamFyPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgPC90YXJnZXQ+CkBAIC0zMjQsNyArMzI0LDcgQEAKICAgICAgIDxhcmcgbGluZT0iJHtodHRwLmhvc3R9ICR7aHR0cC5wb3J0fSIvPgogICAgIDwvZXhlYz4KICAgICAtLT4KLSAgICAKKwogICAgIDxhbnRjYWxsIHRhcmdldD0icnVud2ViIj4KICAgICAgIDxwYXJhbSBuYW1lPSJzZXJ2bGV0IiB2YWx1ZT0icm9sZTEiLz4KICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJ1c2VyIiB2YWx1ZT0icjFwMSIvPgpAQCAtNTA1LDcgKzUwNSw3IEBACiAgICAgICA8cGFyYW0gbmFtZT0idGVzdGNhc2VpZCIgdmFsdWU9InVzZXItYXV0aC1yN3AyIi8+CiAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJydW53ZWIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8dGFza2RlZiBuYW1lPSJ3ZWJ0ZXN0IiBjbGFzc25hbWU9IiR7d2VidGVzdC5jbGFzc25hbWV9IgogICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHt3ZWJ0ZXN0LmNsYXNzcGF0aH0iIC8+CkBAIC01MzUsNyArNTM1LDcgQEAKICAgICAgICAgICAgICB0ZXN0Q2FzZURlc2NyaXB0aW9uPSJUZXN0aW5nIHJvbGUgbWFwcGluZyIKICAgICAgICAgICAgICB0ZXN0U3RyYXRlZ3k9IlRlc3Rpbmcgcm9sZSBtYXBwaW5nIi8+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9InJ1bndlYi00MDMiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8dGFza2RlZiBuYW1lPSJ3ZWJ0ZXN0IiBjbGFzc25hbWU9IiR7d2VidGVzdC5jbGFzc25hbWV9IgogICAgICAgICBjbGFzc3BhdGg9IiR7d2VidGVzdC5jbGFzc3BhdGh9IiAvPgpAQCAtNTY5LDcgKzU2OSw3IEBACiAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9tdWx0aVJvbGVNYXBwaW5nL2Rlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L211bHRpUm9sZU1hcHBpbmcvZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sCmluZGV4IGQ2M2JiOTMuLjczMTIxYTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L211bHRpUm9sZU1hcHBpbmcvZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L211bHRpUm9sZU1hcHBpbmcvZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAtLT4KIAogPHN1bi1hcHBsaWNhdGlvbj4KLSAgCisKICAgPCEtLSBTZWUgcmVhZG1lIGZvciBhbiBleHBsYW5hdGlvbiBvZiBhbGwgdGhlCiAgICAgICBzZWN1cml0eSByb2xlIG1hcHBpbmdzIGluIHRoaXMgZmlsZSBhbmQKICAgICAgIHRoZSBlamIgYW5kIHdlYiBtb2R1bGUgZmlsZXMuIC0tPgpAQCAtMzEsNyArMzEsNyBAQAogICAgIDxyb2xlLW5hbWU+cm9sZTE8L3JvbGUtbmFtZT4KICAgICA8cHJpbmNpcGFsLW5hbWU+cjFwMjwvcHJpbmNpcGFsLW5hbWU+CiAgIDwvc2VjdXJpdHktcm9sZS1tYXBwaW5nPgotICAKKwogICA8c2VjdXJpdHktcm9sZS1tYXBwaW5nPgogICAgIDxyb2xlLW5hbWU+cm9sZTI8L3JvbGUtbmFtZT4KICAgICA8cHJpbmNpcGFsLW5hbWU+cjJwMTwvcHJpbmNpcGFsLW5hbWU+CkBAIC00NCw3ICs0NCw3IEBACiAgICAgPHJvbGUtbmFtZT5yb2xlMjwvcm9sZS1uYW1lPgogICAgIDxncm91cC1uYW1lPnIyZzI8L2dyb3VwLW5hbWU+CiAgIDwvc2VjdXJpdHktcm9sZS1tYXBwaW5nPgotICAKKwogICA8c2VjdXJpdHktcm9sZS1tYXBwaW5nPgogICAgIDxyb2xlLW5hbWU+cm9sZTM8L3JvbGUtbmFtZT4KICAgICA8cHJpbmNpcGFsLW5hbWU+cjNwMTwvcHJpbmNpcGFsLW5hbWU+CkBAIC01Myw1ICs1Myw1IEBACiAgICAgPHJvbGUtbmFtZT5yb2xlMzwvcm9sZS1uYW1lPgogICAgIDxncm91cC1uYW1lPnIzZzE8L2dyb3VwLW5hbWU+CiAgIDwvc2VjdXJpdHktcm9sZS1tYXBwaW5nPgotICAKKwogPC9zdW4tYXBwbGljYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9tdWx0aVJvbGVNYXBwaW5nL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIxLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L211bHRpUm9sZU1hcHBpbmcvZGVzY3JpcHRvci9zdW4tZWpiLWphcjEueG1sCmluZGV4IDg0ZGJlZTguLmM4NmJlM2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L211bHRpUm9sZU1hcHBpbmcvZGVzY3JpcHRvci9zdW4tZWpiLWphcjEueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L211bHRpUm9sZU1hcHBpbmcvZGVzY3JpcHRvci9zdW4tZWpiLWphcjEueG1sCkBAIC0yNCwxMiArMjQsMTIgQEAKICAgICAgIDxlamItbmFtZT5NZXNzYWdlQmVhbjE8L2VqYi1uYW1lPgogICAgIDwvZWpiPgogICA8L2VudGVycHJpc2UtYmVhbnM+Ci0gIAorCiAgIDxzZWN1cml0eS1yb2xlLW1hcHBpbmc+CiAgICAgPHJvbGUtbmFtZT5yb2xlMTwvcm9sZS1uYW1lPgogICAgIDxwcmluY2lwYWwtbmFtZT5yMXAxPC9wcmluY2lwYWwtbmFtZT4KICAgPC9zZWN1cml0eS1yb2xlLW1hcHBpbmc+Ci0gIAorCiAgIDxzZWN1cml0eS1yb2xlLW1hcHBpbmc+CiAgICAgPHJvbGUtbmFtZT5yb2xlMjwvcm9sZS1uYW1lPgogICAgIDxwcmluY2lwYWwtbmFtZT5yMnAyPC9wcmluY2lwYWwtbmFtZT4KQEAgLTM4LDkgKzM4LDkgQEAKICAgICA8cm9sZS1uYW1lPnJvbGUyPC9yb2xlLW5hbWU+CiAgICAgPGdyb3VwLW5hbWU+cjJnMzwvZ3JvdXAtbmFtZT4KICAgPC9zZWN1cml0eS1yb2xlLW1hcHBpbmc+Ci0gIAorCiAgIDwhLS0gbm8gbWFwcGluZyBmb3Igcm9sZSAzIC0tPgotICAKKwogICA8c2VjdXJpdHktcm9sZS1tYXBwaW5nPgogICAgIDxyb2xlLW5hbWU+cm9sZTQ8L3JvbGUtbmFtZT4KICAgICA8cHJpbmNpcGFsLW5hbWU+cjRwMTwvcHJpbmNpcGFsLW5hbWU+CkBAIC00OSw3ICs0OSw3IEBACiAgICAgPHJvbGUtbmFtZT5yb2xlNDwvcm9sZS1uYW1lPgogICAgIDxncm91cC1uYW1lPnI0ZzE8L2dyb3VwLW5hbWU+CiAgIDwvc2VjdXJpdHktcm9sZS1tYXBwaW5nPgotICAKKwogICA8c2VjdXJpdHktcm9sZS1tYXBwaW5nPgogICAgIDxyb2xlLW5hbWU+cm9sZTU8L3JvbGUtbmFtZT4KICAgICA8cHJpbmNpcGFsLW5hbWU+cjVwMTwvcHJpbmNpcGFsLW5hbWU+CkBAIC01OCw3ICs1OCw3IEBACiAgICAgPHJvbGUtbmFtZT5yb2xlNTwvcm9sZS1uYW1lPgogICAgIDxncm91cC1uYW1lPnI1ZzE8L2dyb3VwLW5hbWU+CiAgIDwvc2VjdXJpdHktcm9sZS1tYXBwaW5nPgotICAKKwogICA8c2VjdXJpdHktcm9sZS1tYXBwaW5nPgogICAgIDxyb2xlLW5hbWU+cm9sZTY8L3JvbGUtbmFtZT4KICAgICA8cHJpbmNpcGFsLW5hbWU+cjZwMTwvcHJpbmNpcGFsLW5hbWU+CkBAIC02Nyw3ICs2Nyw3IEBACiAgICAgPHJvbGUtbmFtZT5yb2xlNjwvcm9sZS1uYW1lPgogICAgIDxwcmluY2lwYWwtbmFtZT5yNnAyPC9wcmluY2lwYWwtbmFtZT4KICAgPC9zZWN1cml0eS1yb2xlLW1hcHBpbmc+Ci0gIAorCiAgIDxzZWN1cml0eS1yb2xlLW1hcHBpbmc+CiAgICAgPHJvbGUtbmFtZT5yb2xlNzwvcm9sZS1uYW1lPgogICAgIDxwcmluY2lwYWwtbmFtZT5yN3AxPC9wcmluY2lwYWwtbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L211bHRpUm9sZU1hcHBpbmcvZGVzY3JpcHRvci9zdW4tZWpiLWphcjIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbXVsdGlSb2xlTWFwcGluZy9kZXNjcmlwdG9yL3N1bi1lamItamFyMi54bWwKaW5kZXggNjlkYzMyYS4uMzViZjg4MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbXVsdGlSb2xlTWFwcGluZy9kZXNjcmlwdG9yL3N1bi1lamItamFyMi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbXVsdGlSb2xlTWFwcGluZy9kZXNjcmlwdG9yL3N1bi1lamItamFyMi54bWwKQEAgLTI0LDcgKzI0LDcgQEAKICAgICAgIDxlamItbmFtZT5NZXNzYWdlQmVhbjI8L2VqYi1uYW1lPgogICAgIDwvZWpiPgogICA8L2VudGVycHJpc2UtYmVhbnM+Ci0gIAorCiAgIDxzZWN1cml0eS1yb2xlLW1hcHBpbmc+CiAgICAgPHJvbGUtbmFtZT5yb2xlMTwvcm9sZS1uYW1lPgogICAgIDxwcmluY2lwYWwtbmFtZT5yMXAxPC9wcmluY2lwYWwtbmFtZT4KQEAgLTMzLDcgKzMzLDcgQEAKICAgICA8cm9sZS1uYW1lPnJvbGUxPC9yb2xlLW5hbWU+CiAgICAgPHByaW5jaXBhbC1uYW1lPnIxcDI8L3ByaW5jaXBhbC1uYW1lPgogICA8L3NlY3VyaXR5LXJvbGUtbWFwcGluZz4KLSAgCisKICAgPHNlY3VyaXR5LXJvbGUtbWFwcGluZz4KICAgICA8cm9sZS1uYW1lPnJvbGUyPC9yb2xlLW5hbWU+CiAgICAgPGdyb3VwLW5hbWU+cjJnMTwvZ3JvdXAtbmFtZT4KQEAgLTQyLDkgKzQyLDkgQEAKICAgICA8cm9sZS1uYW1lPnJvbGUyPC9yb2xlLW5hbWU+CiAgICAgPGdyb3VwLW5hbWU+cjJnMjwvZ3JvdXAtbmFtZT4KICAgPC9zZWN1cml0eS1yb2xlLW1hcHBpbmc+Ci0gIAorCiAgIDwhLS0gbm8gbWFwcGluZyBmb3Igcm9sZSAzIC0tPgotICAKKwogICA8c2VjdXJpdHktcm9sZS1tYXBwaW5nPgogICAgIDxyb2xlLW5hbWU+cm9sZTQ8L3JvbGUtbmFtZT4KICAgICA8cHJpbmNpcGFsLW5hbWU+cjRwMTwvcHJpbmNpcGFsLW5hbWU+CkBAIC01Myw3ICs1Myw3IEBACiAgICAgPHJvbGUtbmFtZT5yb2xlNDwvcm9sZS1uYW1lPgogICAgIDxncm91cC1uYW1lPnI0ZzE8L2dyb3VwLW5hbWU+CiAgIDwvc2VjdXJpdHktcm9sZS1tYXBwaW5nPgotICAKKwogICA8c2VjdXJpdHktcm9sZS1tYXBwaW5nPgogICAgIDxyb2xlLW5hbWU+cm9sZTU8L3JvbGUtbmFtZT4KICAgICA8cHJpbmNpcGFsLW5hbWU+cjVwMTwvcHJpbmNpcGFsLW5hbWU+CkBAIC02Niw3ICs2Niw3IEBACiAgICAgPHJvbGUtbmFtZT5yb2xlNTwvcm9sZS1uYW1lPgogICAgIDxncm91cC1uYW1lPnI1ZzE8L2dyb3VwLW5hbWU+CiAgIDwvc2VjdXJpdHktcm9sZS1tYXBwaW5nPgotICAKKwogICA8c2VjdXJpdHktcm9sZS1tYXBwaW5nPgogICAgIDxyb2xlLW5hbWU+cm9sZTY8L3JvbGUtbmFtZT4KICAgICA8cHJpbmNpcGFsLW5hbWU+cjZwMTwvcHJpbmNpcGFsLW5hbWU+CkBAIC03NSw3ICs3NSw3IEBACiAgICAgPHJvbGUtbmFtZT5yb2xlNjwvcm9sZS1uYW1lPgogICAgIDxncm91cC1uYW1lPnI2ZzE8L2dyb3VwLW5hbWU+CiAgIDwvc2VjdXJpdHktcm9sZS1tYXBwaW5nPgotICAKKwogICA8IS0tIG5vIG1hcHBpbmcgZm9yIHJvbGUgNyAtLT4KIAogPC9zdW4tZWpiLWphcj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L211bHRpUm9sZU1hcHBpbmcvZGVzY3JpcHRvci9zdW4td2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L211bHRpUm9sZU1hcHBpbmcvZGVzY3JpcHRvci9zdW4td2ViLnhtbAppbmRleCA2MjlhYzI4Li4wNmRjNTZmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9tdWx0aVJvbGVNYXBwaW5nL2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbXVsdGlSb2xlTWFwcGluZy9kZXNjcmlwdG9yL3N1bi13ZWIueG1sCkBAIC0yOSw3ICsyOSw3IEBACiAgICAgICA8ZGVzY3JpcHRpb24+TWFpbnRhaW4gYSBvbmUtdG8tb25lIGNvcnJlc3BvbmRlbmNlIGJldHdlZW4gc3RhdGljIGNvbnRlbnQgYW5kIHRoZSBnZW5lcmF0ZWQgc2VydmxldCBjbGFzcycgamF2YSBjb2RlPC9kZXNjcmlwdGlvbj4KICAgICA8L3Byb3BlcnR5PgogICA8L2pzcC1jb25maWc+Ci0gICAgCisKICAgPHNlY3VyaXR5LXJvbGUtbWFwcGluZz4KICAgICA8cm9sZS1uYW1lPnJvbGUxPC9yb2xlLW5hbWU+CiAgICAgPHByaW5jaXBhbC1uYW1lPnIxcDE8L3ByaW5jaXBhbC1uYW1lPgpAQCAtNDIsNyArNDIsNyBAQAogICAgIDxyb2xlLW5hbWU+cm9sZTE8L3JvbGUtbmFtZT4KICAgICA8cHJpbmNpcGFsLW5hbWU+cjFwMzwvcHJpbmNpcGFsLW5hbWU+CiAgIDwvc2VjdXJpdHktcm9sZS1tYXBwaW5nPgotICAKKwogICA8c2VjdXJpdHktcm9sZS1tYXBwaW5nPgogICAgIDxyb2xlLW5hbWU+cm9sZTI8L3JvbGUtbmFtZT4KICAgICA8cHJpbmNpcGFsLW5hbWU+cjJwMjwvcHJpbmNpcGFsLW5hbWU+CkBAIC01MSw5ICs1MSw5IEBACiAgICAgPHJvbGUtbmFtZT5yb2xlMjwvcm9sZS1uYW1lPgogICAgIDxncm91cC1uYW1lPnIyZzE8L2dyb3VwLW5hbWU+CiAgIDwvc2VjdXJpdHktcm9sZS1tYXBwaW5nPgotICAKKwogICA8IS0tIG5vIG1hcHBpbmcgZm9yIHJvbGUgMyAtLT4KLSAgCisKICAgPHNlY3VyaXR5LXJvbGUtbWFwcGluZz4KICAgICA8cm9sZS1uYW1lPnJvbGU0PC9yb2xlLW5hbWU+CiAgICAgPHByaW5jaXBhbC1uYW1lPnI0cDE8L3ByaW5jaXBhbC1uYW1lPgpAQCAtNjIsMTIgKzYyLDEyIEBACiAgICAgPHJvbGUtbmFtZT5yb2xlNDwvcm9sZS1uYW1lPgogICAgIDxncm91cC1uYW1lPnI0ZzE8L2dyb3VwLW5hbWU+CiAgIDwvc2VjdXJpdHktcm9sZS1tYXBwaW5nPgotICAKKwogICA8c2VjdXJpdHktcm9sZS1tYXBwaW5nPgogICAgIDxyb2xlLW5hbWU+cm9sZTU8L3JvbGUtbmFtZT4KICAgICA8cHJpbmNpcGFsLW5hbWU+cjVwMTwvcHJpbmNpcGFsLW5hbWU+CiAgIDwvc2VjdXJpdHktcm9sZS1tYXBwaW5nPgotICAKKwogICA8c2VjdXJpdHktcm9sZS1tYXBwaW5nPgogICAgIDxyb2xlLW5hbWU+cm9sZTY8L3JvbGUtbmFtZT4KICAgICA8cHJpbmNpcGFsLW5hbWU+cjZwMTwvcHJpbmNpcGFsLW5hbWU+CkBAIC03Niw3ICs3Niw3IEBACiAgICAgPHJvbGUtbmFtZT5yb2xlNjwvcm9sZS1uYW1lPgogICAgIDxncm91cC1uYW1lPnI2ZzE8L2dyb3VwLW5hbWU+CiAgIDwvc2VjdXJpdHktcm9sZS1tYXBwaW5nPgotICAKKwogICA8c2VjdXJpdHktcm9sZS1tYXBwaW5nPgogICAgIDxyb2xlLW5hbWU+cm9sZTc8L3JvbGUtbmFtZT4KICAgICA8cHJpbmNpcGFsLW5hbWU+cjdwMTwvcHJpbmNpcGFsLW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9tdWx0aVJvbGVNYXBwaW5nL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L211bHRpUm9sZU1hcHBpbmcvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDRhNzJlZTIuLjM0ZWQ3M2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L211bHRpUm9sZU1hcHBpbmcvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L211bHRpUm9sZU1hcHBpbmcvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yMiwxOCArMjIsMTggQEAKICAgICAgICAgPHNlcnZsZXQtbmFtZT5XZWJUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPmNvbS5zdW4uczFhc2Rldi5zZWN1cml0eS5tdWx0aVJvbGVNYXBwaW5nLndlYi5XZWJUZXN0PC9zZXJ2bGV0LWNsYXNzPgogICAgIDwvc2VydmxldD4KLSAgICAKKwogICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+V2ViVGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+Lyo8L3VybC1wYXR0ZXJuPgogICAgIDwvc2VydmxldC1tYXBwaW5nPgogICAgIDxzZXNzaW9uLWNvbmZpZz4KLSAgICAgIAorCiAgICAgICAgIDxzZXNzaW9uLXRpbWVvdXQ+CiAgICAgICAgICAgICAzMAogICAgICAgICA8L3Nlc3Npb24tdGltZW91dD4KICAgICA8L3Nlc3Npb24tY29uZmlnPgotICAgIAorCiAgICAgPHNlY3VyaXR5LWNvbnN0cmFpbnQ+CiAgICAgICAgIDxkaXNwbGF5LW5hbWU+Y29uc3RyYWludC1yb2xlMTwvZGlzcGxheS1uYW1lPgogICAgICAgICA8d2ViLXJlc291cmNlLWNvbGxlY3Rpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9tdWx0aVJvbGVNYXBwaW5nL2VqYjEvTWVzc2FnZUJlYW4xLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9tdWx0aVJvbGVNYXBwaW5nL2VqYjEvTWVzc2FnZUJlYW4xLmphdmEKaW5kZXggYjRjNTZkNi4uMTBhNmRjNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbXVsdGlSb2xlTWFwcGluZy9lamIxL01lc3NhZ2VCZWFuMS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L211bHRpUm9sZU1hcHBpbmcvZWpiMS9NZXNzYWdlQmVhbjEuamF2YQpAQCAtMjMsMTAgKzIzLDEwIEBACiBAU3RhdGVsZXNzCiBATG9jYWwoe01lc3NhZ2VMb2NhbDEuY2xhc3N9KQogcHVibGljIGNsYXNzIE1lc3NhZ2VCZWFuMSBpbXBsZW1lbnRzIE1lc3NhZ2VMb2NhbDEgewotICAgIAorCiAgICAgLy9AUm9sZXNBbGxvd2VkKCJlamJyb2xlIikKICAgICBwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UoKSB7CiAgICAgICAgIHJldHVybiAiSGVsbG8gZnJvbSBlamIiOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbXVsdGlSb2xlTWFwcGluZy9lamIxL01lc3NhZ2VMb2NhbDEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L211bHRpUm9sZU1hcHBpbmcvZWpiMS9NZXNzYWdlTG9jYWwxLmphdmEKaW5kZXggMWQ2Y2VmZi4uZTcyYWNhMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbXVsdGlSb2xlTWFwcGluZy9lamIxL01lc3NhZ2VMb2NhbDEuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9tdWx0aVJvbGVNYXBwaW5nL2VqYjEvTWVzc2FnZUxvY2FsMS5qYXZhCkBAIC0yNCw1ICsyNCw1IEBACiBATG9jYWwKIHB1YmxpYyBpbnRlcmZhY2UgTWVzc2FnZUxvY2FsMSB7CiAgICAgU3RyaW5nIGdldE1lc3NhZ2UoKTsKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbXVsdGlSb2xlTWFwcGluZy9lamIyL01lc3NhZ2VCZWFuMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbXVsdGlSb2xlTWFwcGluZy9lamIyL01lc3NhZ2VCZWFuMi5qYXZhCmluZGV4IGE0MzUyYTguLjk2MGEzMzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L211bHRpUm9sZU1hcHBpbmcvZWpiMi9NZXNzYWdlQmVhbjIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9tdWx0aVJvbGVNYXBwaW5nL2VqYjIvTWVzc2FnZUJlYW4yLmphdmEKQEAgLTIzLDEwICsyMywxMCBAQAogQFN0YXRlbGVzcwogQExvY2FsKHtNZXNzYWdlTG9jYWwyLmNsYXNzfSkKIHB1YmxpYyBjbGFzcyBNZXNzYWdlQmVhbjIgaW1wbGVtZW50cyBNZXNzYWdlTG9jYWwyIHsKLSAgICAKKwogICAgIC8vQFJvbGVzQWxsb3dlZCgiZWpicm9sZSIpCiAgICAgcHVibGljIFN0cmluZyBnZXRNZXNzYWdlKCkgewogICAgICAgICByZXR1cm4gIkhlbGxvIGZyb20gZWpiIjsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L211bHRpUm9sZU1hcHBpbmcvZWpiMi9NZXNzYWdlTG9jYWwyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9tdWx0aVJvbGVNYXBwaW5nL2VqYjIvTWVzc2FnZUxvY2FsMi5qYXZhCmluZGV4IDAyMDIzOTUuLmNmODg4YjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L211bHRpUm9sZU1hcHBpbmcvZWpiMi9NZXNzYWdlTG9jYWwyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbXVsdGlSb2xlTWFwcGluZy9lamIyL01lc3NhZ2VMb2NhbDIuamF2YQpAQCAtMjQsNSArMjQsNSBAQAogQExvY2FsCiBwdWJsaWMgaW50ZXJmYWNlIE1lc3NhZ2VMb2NhbDIgewogICAgIFN0cmluZyBnZXRNZXNzYWdlKCk7Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L211bHRpUm9sZU1hcHBpbmcvd2ViL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L211bHRpUm9sZU1hcHBpbmcvd2ViL1dlYlRlc3QuamF2YQppbmRleCAwYTlhNTM1Li42MTQxZWVjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9tdWx0aVJvbGVNYXBwaW5nL3dlYi9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbXVsdGlSb2xlTWFwcGluZy93ZWIvV2ViVGVzdC5qYXZhCkBAIC0yMyw3ICsyMyw3IEBACiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuKjsKIAogcHVibGljIGNsYXNzIFdlYlRlc3QgZXh0ZW5kcyBIdHRwU2VydmxldCB7Ci0gICAgCisKICAgICBwcm90ZWN0ZWQgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwKICAgICAgICAgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKIApAQCAtNDQsNSArNDQsNSBAQAogICAgICAgICB9CiAgICAgICAgIG91dC5jbG9zZSgpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbmVnYXRpdmVSZWFsbVBlckFwcC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbmVnYXRpdmVSZWFsbVBlckFwcC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGU2MzhjNGQuLjNkNTdjMGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L25lZ2F0aXZlUmVhbG1QZXJBcHAvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9uZWdhdGl2ZVJlYWxtUGVyQXBwL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InNlY3VyaXR5Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpAQCAtMjYsNCArMjYsNCBAQAogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJuZWdhdGl2ZVJQQUxvZ2luQmVhbiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJuZWdhdGl2ZVJQQUxvZ2luQmVhbiIvPiAgICAgICAgXHUwMDIwCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9uZWdhdGl2ZVJlYWxtUGVyQXBwL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L25lZ2F0aXZlUmVhbG1QZXJBcHAvYnVpbGQueG1sCmluZGV4IDM5OGI4ODkuLjdiNWJjZjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L25lZ2F0aXZlUmVhbG1QZXJBcHAvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L25lZ2F0aXZlUmVhbG1QZXJBcHAvYnVpbGQueG1sCkBAIC0zMyw3ICszMyw3IEBACiAgICAmY29tbW9uUnVuOwogICAgJnRlc3RQcm9wZXJ0aWVzOwogICAgJmNvbW1vblNlY3VyaXR5OwotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLCBkZXBsb3kscnVuLCB1bmRlcGxveSIvPgogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CkBAIC01MCw3ICs1MCw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLTwhLS0JPHByb3BlcnR5IG5hbWU9ImVqYmphci5jbGFzc2VzIiB2YWx1ZT0iKiovKkhvbWUqLmNsYXNzLCoqLypCZWFuKi5jbGFzcywqKi8qRGF0YSouY2xhc3MsKi5kYnNjaGVtYSIvPgorPCEtLSAgICA8cHJvcGVydHkgbmFtZT0iZWpiamFyLmNsYXNzZXMiIHZhbHVlPSIqKi8qSG9tZSouY2xhc3MsKiovKkJlYW4qLmNsYXNzLCoqLypEYXRhKi5jbGFzcywqLmRic2NoZW1hIi8+CiAtLT4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9uZWdhdGl2ZVJlYWxtUGVyQXBwL2NsaWVudC9OZWdhdGl2ZVJQQUNsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbmVnYXRpdmVSZWFsbVBlckFwcC9jbGllbnQvTmVnYXRpdmVSUEFDbGllbnQuamF2YQppbmRleCBhNWQ2Nzk2Li40YzhmN2JmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9uZWdhdGl2ZVJlYWxtUGVyQXBwL2NsaWVudC9OZWdhdGl2ZVJQQUNsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L25lZ2F0aXZlUmVhbG1QZXJBcHAvY2xpZW50L05lZ2F0aXZlUlBBQ2xpZW50LmphdmEKQEAgLTM5LDMxICszOSwzMSBAQAogICAgICAgICBOZWdhdGl2ZVJQQUNsaWVudCBjbGllbnQgPSBuZXcgTmVnYXRpdmVSUEFDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgTmVnYXRpdmVSUEFDbGllbnQoU3RyaW5nW10gYXJncykgewogICAgICAgICAvL3N1cGVyKGFyZ3MpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZG9UZXN0KCkgewotICAgICAgICAKLQlOZWdhdGl2ZVJQQVJlbW90ZSBocj1udWxsOworCisgICAgTmVnYXRpdmVSUEFSZW1vdGUgaHI9bnVsbDsKICAgICAgICAgU3RyaW5nIHJlcz1udWxsOwogICAgICAgICBDb250ZXh0IGljID0gbnVsbDsKICAgICAgICAgTG9naW5Db250ZXh0IGxjPW51bGw7CiAgICAgICAgIE5lZ2F0aXZlUlBBSG9tZSBob21lPW51bGw7CiAgICAgICAgIFN0cmluZyB0ZXN0SWQgPSAiU2VjOjpOZWdhdGl2ZVRlc3QtUmVhbG0gcGVyIGFwcCI7Ci0gICAgCXRyeXsKKyAgICAgICAgdHJ5ewogICAgICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiU2VjdXJpdHk6Ok5lZ2F0aXZlVGVzdCAtIFJlYWxtIHBlciBhcHAiKTsKLQkgICAgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgICAgIC8vIGNyZWF0ZSBFSkIgdXNpbmcgZmFjdG9yeSBmcm9tIGNvbnRhaW5lciAKKyAgICAgICAgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgICAgIC8vIGNyZWF0ZSBFSkIgdXNpbmcgZmFjdG9yeSBmcm9tIGNvbnRhaW5lcgogICAgICAgICAgICAgamF2YS5sYW5nLk9iamVjdCBvYmpyZWYgPSBpYy5sb29rdXAoIm5lZ2F0aXZlUlBBTG9naW5CZWFuIik7Ci0JCQotCSAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkxvb2tlZCB1cCBob21lISEiKTsKLQkJCisKKyAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJMb29rZWQgdXAgaG9tZSEhIik7CisKICAgICAgICAgICAgIGhvbWUgPSAoTmVnYXRpdmVSUEFIb21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdygKLQkJCQkJICAgb2JqcmVmLCBOZWdhdGl2ZVJQQUhvbWUuY2xhc3MpOwotCSAgICBTeXN0ZW0uZXJyLnByaW50bG4oIk5hcnJvd2VkIGhvbWUhISIpOwotCQkJCQorICAgICAgICAgICAgICAgICAgICAgICBvYmpyZWYsIE5lZ2F0aXZlUlBBSG9tZS5jbGFzcyk7CisgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTmFycm93ZWQgaG9tZSEhIik7CisKICAgICAgICAgICAgIGhyID0gaG9tZS5jcmVhdGUoIkxpekh1cmxleSIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgdGhlIEVKQiEhIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCJDYWxsaW5nIGF1dGhvcml6ZWQgbWV0aG9kIC0gYWRkSXRlbSIpOwpAQCAtNzUsMTMgKzc1LDEzIEBACiAgICAgICAgICAgICAvL2V4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgaWYoZXggaW5zdGFuY2VvZiBqYXZhLnJtaS5BY2Nlc3NFeGNlcHRpb24pewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIEdvdCBqYXZhLnJtaS5BY2Nlc3NFeGNlcHRpb24gISEgIik7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJOZWdhdGl2ZVJQQTpTdGF0ZWZ1bExvZ2luQmVhbiBUZXN0IFBhc3NlZDogRXhjZXB0aW9uIGV4cGVjdGVkIik7ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJOZWdhdGl2ZVJQQTpTdGF0ZWZ1bExvZ2luQmVhbiBUZXN0IFBhc3NlZDogRXhjZXB0aW9uIGV4cGVjdGVkIik7CiAgICAgICAgICAgICAgICAgcmVzPSJQQVNTIjsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsIHN0YXQuUEFTUyk7CiAKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJOZWdhdGl2ZVJQQTpTdGF0ZWZ1bExvZ2luQmVhbiBUZXN0IEZhaWxlZCIpOwotICAgICAgICAgICAgICAgIHJlcyA9ICJGQUlMIjsgIAorICAgICAgICAgICAgICAgIHJlcyA9ICJGQUlMIjsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZmluYWxseSB7CkBAIC04OSwxMCArODksMTAgQEAKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiByZXM7Ci0gICAgICAgIAorCiAgICAgfQogCi0gICAgCisKICAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBoZWxsb1N0ciA9ICJIZWxsbyBOZWdhdGl2ZVJQQSEhISI7CiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L25lZ2F0aXZlUmVhbG1QZXJBcHAvc2hvcHBpbmcvTmVnYXRpdmVSUEFCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9uZWdhdGl2ZVJlYWxtUGVyQXBwL3Nob3BwaW5nL05lZ2F0aXZlUlBBQmVhbi5qYXZhCmluZGV4IDgwNGNhMzUuLmQ3MGZkZWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L25lZ2F0aXZlUmVhbG1QZXJBcHAvc2hvcHBpbmcvTmVnYXRpdmVSUEFCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbmVnYXRpdmVSZWFsbVBlckFwcC9zaG9wcGluZy9OZWdhdGl2ZVJQQUJlYW4uamF2YQpAQCAtMzUsNjYgKzM1LDY2IEBACiAgKi8KIAogcHVibGljIGNsYXNzIE5lZ2F0aXZlUlBBQmVhbiBpbXBsZW1lbnRzIFNlc3Npb25CZWFuIHsKLSAgICAKKwogICAgIHByaXZhdGUgU3RyaW5nIHNob3BwZXIgPSAiYW5vbnltb3VzIjsKICAgICBwcml2YXRlIFN0cmluZyBwcmluY2lwYWwgPSAiajJlZSI7CiAgICAgcHJpdmF0ZSBpbnQgdG90YWxQcmljZSA9IDA7Ci0gICAgCisKICAgICBwcml2YXRlIGludCB0b3RhbEl0ZW1zID0gMDsKLSAgICAKKwogICAgIHByaXZhdGUgVmVjdG9yIGl0ZW1zOwotICAgIAorCiAgICAgcHJpdmF0ZSBWZWN0b3IgaXRlbVByaWNlOwotICAgIAorCiAgICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBzYyA9IG51bGw7Ci0gICAgCisKICAgICAvKiogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBTaG9wcGluZ0VKQiAqLwogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZShTdHJpbmcgc2hvcHBlck5hbWUpIHsKICAgICAgICAgc2hvcHBlciA9IHNob3BwZXJOYW1lOwogICAgICAgICBpdGVtcyA9IG5ldyBWZWN0b3IoKTsKICAgICAgICAgaXRlbVByaWNlID0gbmV3IFZlY3RvcigpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGFkZEl0ZW0oamF2YS5sYW5nLlN0cmluZyBpdGVtLCBpbnQgcHJpY2UpIHRocm93cyBFSkJFeGNlcHRpb24sCiAgICAgICAgIFJlbW90ZUV4Y2VwdGlvbnsKICAgICAgICAgLy8gdGhpcyBtZXRob2Qgc2hvdWxkIGJlIHVuY2FsbGFibGUuCiAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiTWV0aG9kIHNob3VsZCBiZSB1bmNhbGxhYmxlICIpOwogICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBkZWxldGVJdGVtKGphdmEubGFuZy5TdHJpbmcgaXRlbSkgdGhyb3dzIEVKQkV4Y2VwdGlvbiwgCisKKyAgICBwdWJsaWMgdm9pZCBkZWxldGVJdGVtKGphdmEubGFuZy5TdHJpbmcgaXRlbSkgdGhyb3dzIEVKQkV4Y2VwdGlvbiwKICAgICAgICAgUmVtb3RlRXhjZXB0aW9uewogICAgICAgICAvLyB0aGlzIG1ldGhvZCBzaG91bGQgYmUgdW5jYWxsYWJsZS4KICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJNZXRob2Qgc2hvdWxkIGJlIHVuY2FsbGFibGUgIik7CiAKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgZG91YmxlIGdldFRvdGFsQ29zdCgpIHRocm93cyBFSkJFeGNlcHRpb257CiAgICAgICAgIC8vIHRoaXMgbWV0aG9kIHNob3VsZCBiZSB1bmNhbGxhYmxlLgogICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIk1ldGhvZCBzaG91bGQgYmUgdW5jYWxsYWJsZSAiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nW10gZ2V0SXRlbXMoKSB0aHJvd3MgRUpCRXhjZXB0aW9uewogICAgICAgIC8vIHRoaXMgbWV0aG9kIHNob3VsZCBiZSB1bmNhbGxhYmxlLgogICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIk1ldGhvZCBzaG91bGQgYmUgdW5jYWxsYWJsZSAiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaG9wcGluZ0NhcnQgZWpiQWN0aXZhdGUiKTsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaG9wcGluZ0NhcnQgZWpiUGFzc2l2YXRlIik7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSAgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNob3BwaW5nQ2FydCBlamJSZW1vdmUiKTsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNlc3Npb25Db250ZXh0KSB7CiAgICAgICAgIHNjID0gc2Vzc2lvbkNvbnRleHQ7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9uZWdhdGl2ZVJlYWxtUGVyQXBwL3Nob3BwaW5nL05lZ2F0aXZlUlBBSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbmVnYXRpdmVSZWFsbVBlckFwcC9zaG9wcGluZy9OZWdhdGl2ZVJQQUhvbWUuamF2YQppbmRleCAzMDNmODliLi44YTRhMzcyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9uZWdhdGl2ZVJlYWxtUGVyQXBwL3Nob3BwaW5nL05lZ2F0aXZlUlBBSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L25lZ2F0aXZlUmVhbG1QZXJBcHAvc2hvcHBpbmcvTmVnYXRpdmVSUEFIb21lLmphdmEKQEAgLTI4LDggKzI4LDggQEAKICAqIEB2ZXJzaW9uCiAgKi8KIHB1YmxpYyBpbnRlcmZhY2UgTmVnYXRpdmVSUEFIb21lIGV4dGVuZHMgRUpCSG9tZXsKLSAgICAKLSAgICBwdWJsaWMgTmVnYXRpdmVSUEFSZW1vdGUgY3JlYXRlKGphdmEubGFuZy5TdHJpbmcgc2hvcHBlck5hbWUpIAorCisgICAgcHVibGljIE5lZ2F0aXZlUlBBUmVtb3RlIGNyZWF0ZShqYXZhLmxhbmcuU3RyaW5nIHNob3BwZXJOYW1lKQogICAgICAgICB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uLCBqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb247Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L25lZ2F0aXZlUmVhbG1QZXJBcHAvc2hvcHBpbmcvTmVnYXRpdmVSUEFSZW1vdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L25lZ2F0aXZlUmVhbG1QZXJBcHAvc2hvcHBpbmcvTmVnYXRpdmVSUEFSZW1vdGUuamF2YQppbmRleCA3YWZkMWQ3Li43YmRiYzgwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9uZWdhdGl2ZVJlYWxtUGVyQXBwL3Nob3BwaW5nL05lZ2F0aXZlUlBBUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvbmVnYXRpdmVSZWFsbVBlckFwcC9zaG9wcGluZy9OZWdhdGl2ZVJQQVJlbW90ZS5qYXZhCkBAIC0yMywxOCArMjMsMTggQEAKIHBhY2thZ2Ugc2hvcHBpbmc7CiBpbXBvcnQgamFrYXJ0YS5lamIuRUpCT2JqZWN0OwogLyoqCi0gKiBOZWdhdGl2ZSBSZWFsbVBlckFQUCBTdGF0ZWZ1bCBTZXNzaW9uIEJlYW4uIAorICogTmVnYXRpdmUgUmVhbG1QZXJBUFAgU3RhdGVmdWwgU2Vzc2lvbiBCZWFuLgogICogVHJpZXMgdG8gbG9nIGludG8gYSBub24gZXhpc3RlbnQgcmVhbG0KICAqIEFsbCBtZXRob2RzIHNob3VsZCBiZSB1bmNhbGxhYmxlTgogICogQGF1dGhvciAgSGFycHJlZXQgU2luZ2gKICAqLwogcHVibGljIGludGVyZmFjZSBOZWdhdGl2ZVJQQVJlbW90ZSBleHRlbmRzIEVKQk9iamVjdCB7Ci0gICAgICAgICAgICAKKwogICAgIHB1YmxpYyB2b2lkIGFkZEl0ZW0oamF2YS5sYW5nLlN0cmluZyBpdGVtLCBpbnQgcHJpY2UpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkZWxldGVJdGVtKGphdmEubGFuZy5TdHJpbmcgaXRlbSkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKLSAgICAgICAKKwogICAgIHB1YmxpYyBkb3VibGUgZ2V0VG90YWxDb3N0KCkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nW10gZ2V0SXRlbXMoKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcGFtcmVhbG0vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3BhbXJlYWxtL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMTlhOWIxZC4uNzliOTRlZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcGFtcmVhbG0vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9wYW1yZWFsbS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzZWMiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9IndlYiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcGFtcmVhbG0vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcGFtcmVhbG0vYnVpbGQueG1sCmluZGV4IDhlMjZlN2UuLjAyMDEzZjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3BhbXJlYWxtL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9wYW1yZWFsbS9idWlsZC54bWwKQEAgLTUwLDcgKzUwLDcgQEAKICAgICAgICAgICAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgICAgICAgPG1rZGlyIGRpcj0iJHtzcmN9Ii8+CiAgICAgICAgIDxqYXZhYyBzcmNkaXI9IiR7c3JjfSIKLSAgICAgICAgICAgICAgIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKICAgICAgICAgICAgICAgIGRlYnVnPSJvbiIKICAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIj4KICAgICAgICAgICAgICA8Y2xhc3NwYXRoIHJlZmlkPSJwYW1jbGllbnQuY2xhc3MucGF0aCIvPgpAQCAtOTgsNyArOTgsNyBAQAogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtwYXNzd29yZH0iLz4KIAogICAgIDwvamF2YT4KLSAgICAgICAgCisKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTExNyw3ICsxMTcsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0YXJ0Ij4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3BhbXJlYWxtL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3BhbXJlYWxtL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCAzODc4MGJmLi43MWNkMmIyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9wYW1yZWFsbS9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcGFtcmVhbG0vZGVzY3JpcHRvci93ZWIueG1sCkBAIC0xOCw3ICsxOCw3IEBACiAtLT4KIAogPHdlYi1hcHAgdmVyc2lvbj0iMy4wIiB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8zXzAueHNkIj4KLSAgICAKKwogICAgIDx3ZWxjb21lLWZpbGUtbGlzdD4KICAgICAgICAgPHdlbGNvbWUtZmlsZT5pbmRleC5qc3A8L3dlbGNvbWUtZmlsZT4KICAgICA8L3dlbGNvbWUtZmlsZS1saXN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcGxvZ2luL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9wbG9naW4vYnVpbGQucHJvcGVydGllcwppbmRleCAyZDI4MGM5Li5hMTRlOTQ5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9wbG9naW4vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9wbG9naW4vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic2VjdXJpdHkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdWItbW9kdWxlIiB2YWx1ZT0iJHttb2R1bGV9LXBsb2dpbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcGxvZ2luL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3Bsb2dpbi9idWlsZC54bWwKaW5kZXggZTlkZDRhNy4uMTUzYmRmNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcGxvZ2luL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9wbG9naW4vYnVpbGQueG1sCkBAIC0zMiw3ICszMiw3IEBACiAgICAgJnJ1bjsKIAogICAgIDx0YXJnZXQgbmFtZT0iYWxsIj4KLQk8YW50IGRpcj0ic3RhbmRhbG9uZSIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0ic3RhbmRhbG9uZSIgdGFyZ2V0PSJhbGwiLz4KICAgICA8L3RhcmdldD4KIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcGxvZ2luL3N0YW5kYWxvbmUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3Bsb2dpbi9zdGFuZGFsb25lL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZDRkYTUyOC4uN2NjNmYzYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcGxvZ2luL3N0YW5kYWxvbmUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9wbG9naW4vc3RhbmRhbG9uZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzZWN1cml0eSIvPgogPHByb3BlcnR5IG5hbWU9InN1Yi1tb2R1bGUiIHZhbHVlPSIke21vZHVsZX0tcGxvZ2luLXN0YW5kYWxvbmUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3Bsb2dpbi9zdGFuZGFsb25lL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3Bsb2dpbi9zdGFuZGFsb25lL2J1aWxkLnhtbAppbmRleCBmMWMyZjkyLi5kMTNmYTRlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9wbG9naW4vc3RhbmRhbG9uZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcGxvZ2luL3N0YW5kYWxvbmUvYnVpbGQueG1sCkBAIC0zNSwxMiArMzUsMTIgQEAKICAgICZjb21tb25TZWN1cml0eTsKIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPgotCQlVc2FnZToKLQkJCWFudCBhbGwgKEV4ZWN1dGVzIGFsbCBzdGFuZGFsb25lIHByb2dyYW1tYXRpYyBsb2dpbiB0ZXN0cykKLQk8L2VjaG8+CisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHN0YW5kYWxvbmUgcHJvZ3JhbW1hdGljIGxvZ2luIHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJidWlsZCwgc2V0dXAsIGRlcGxveSxydW4sIHVuZGVwbG95LCB1bnNldHVwIj4KICAgICA8L3RhcmdldD4KIApAQCAtMTQxLDcgKzE0MSw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJydW4tc3RhbmRhbG9uZS1jbGllbnQtcGVyLXRocmVhZCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogCiAgICAgICA8ZWNobyBtZXNzYWdlPSJSdW5uaW5nIHN0YW5kYWxvbmUgY2xpZW50IHBlci10aHJlYWQgLi4uIi8+Ci0gICAKKwogICAgICAgPGphdmEgY2xhc3NuYW1lPSJQTG9naW5UZXN0IgogICAgICAgICBjbGFzc3BhdGg9IiR7YWRtaW4uZG9tYWluLmRpcn0vLi4vbGliL2FwcHNlcnYtcnQuamFyOiR7czFhc3Rlc3QuY2xhc3NwYXRofToke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcENsaWVudC5qYXIiIGZvcms9InRydWUiPgogICAgICAgICA8anZtYXJnIHZhbHVlPSItRGphdmEuc2VjdXJpdHkuYXV0aC5sb2dpbi5jb25maWc9JHthZG1pbi5kb21haW4uZGlyfS8uLi9saWIvYXBwY2xpZW50L2FwcGNsaWVudGxvZ2luLmNvbmYiLz4KQEAgLTE1Nyw3ICsxNTcsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0icnVuLXN0YW5kYWxvbmUtY2xpZW50LXBlci1wcm9jZXNzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAKICAgICAgIDxlY2hvIG1lc3NhZ2U9IlJ1bm5pbmcgc3RhbmRhbG9uZSBjbGllbnQgcGVyLXByb2Nlc3MgLi4uIi8+Ci0gICAKKwogICAgICAgPGphdmEgY2xhc3NuYW1lPSJQTG9naW5UZXN0IgogICAgICAgICBjbGFzc3BhdGg9IiR7YWRtaW4uZG9tYWluLmRpcn0vLi4vbGliL2FwcHNlcnYtcnQuamFyOiR7czFhc3Rlc3QuY2xhc3NwYXRofToke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcENsaWVudC5qYXIiIGZvcms9InRydWUiPgogICAgICAgICA8anZtYXJnIHZhbHVlPSItRGphdmEuc2VjdXJpdHkuYXV0aC5sb2dpbi5jb25maWc9JHthZG1pbi5kb21haW4uZGlyfS8uLi9saWIvYXBwY2xpZW50L2FwcGNsaWVudGxvZ2luLmNvbmYiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3Bsb2dpbi9zdGFuZGFsb25lL2NsaWVudC9QTG9naW5UZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9wbG9naW4vc3RhbmRhbG9uZS9jbGllbnQvUExvZ2luVGVzdC5qYXZhCmluZGV4IDhmNGI3OTIuLjBmZDc2OWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3Bsb2dpbi9zdGFuZGFsb25lL2NsaWVudC9QTG9naW5UZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcGxvZ2luL3N0YW5kYWxvbmUvY2xpZW50L1BMb2dpblRlc3QuamF2YQpAQCAtMzksNyArMzksNyBAQAogCiAgICAgcHJvdGVjdGVkIE15U2Vzc2lvbjFSZW1vdGUgbXkxciA9IG51bGw7CiAKLSAgICBwdWJsaWMgTXlUaHJlYWRCYXNlKFN0cmluZyB1c2VybmFtZSwgU3RyaW5nIHBhc3N3b3JkLCAKKyAgICBwdWJsaWMgTXlUaHJlYWRCYXNlKFN0cmluZyB1c2VybmFtZSwgU3RyaW5nIHBhc3N3b3JkLAogICAgICAgICBTdHJpbmcgZWpiTG9va3VwTmFtZSwgU3RyaW5nIHRocmVhZE5hbWUpIHsKIAogICAgICAgICBzdXBlcih0aHJlYWROYW1lKTsKQEAgLTg4LDcgKzg4LDcgQEAKICAgICAgICAgICBNeVNlc3Npb24xUmVtb3RlSG9tZSBteTFyaCA9IChNeVNlc3Npb24xUmVtb3RlSG9tZSkKICAgICAgICAgICAgICAgUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG8sIE15U2Vzc2lvbjFSZW1vdGVIb21lLmNsYXNzKTsKIAotICAgICAgICAgIG15MXIgPSBteTFyaC5jcmVhdGUoKTsgCisgICAgICAgICAgbXkxciA9IG15MXJoLmNyZWF0ZSgpOwogICAgICAgICAgIFN0cmluZyByZXR2YWwgPSBkb0J1c2luZXNzKCk7CiAKICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXROYW1lKCkgKyAiIC0gIiArIHJldHZhbCk7CkBAIC05NywxMSArOTcsMTEgQEAKICAgICAgICAgICBkb0xvZ291dCgpOwogCiAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgLy8gR2l2ZSB0aW1lIGZvciBvdGhlciB0aHJlYWQgdG8gCisgICAgICAgICAgICAgIC8vIEdpdmUgdGltZSBmb3Igb3RoZXIgdGhyZWFkIHRvCiAgICAgICAgICAgICAgIFRocmVhZC5zbGVlcChyYW5kb20ubmV4dEludCgxMDApKTsKICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgfQotICAgICAgICB9IAorICAgICAgICB9CiAgICAgfQogCiAgICAgcHVibGljIGFic3RyYWN0IFN0cmluZyBkb0J1c2luZXNzKCkgdGhyb3dzIEV4Y2VwdGlvbiA7CkBAIC0xMTQsNyArMTE0LDcgQEAKIAogICAgIFByb2dyYW1tYXRpY0xvZ2luIGxvZ2luID0gbnVsbDsKIAotICAgIHB1YmxpYyBMb2dpbkJ1c2luZXNzQ2FsbGVyQmFzZShTdHJpbmcgdXNlcm5hbWUsIFN0cmluZyBwYXNzd29yZCwgCisgICAgcHVibGljIExvZ2luQnVzaW5lc3NDYWxsZXJCYXNlKFN0cmluZyB1c2VybmFtZSwgU3RyaW5nIHBhc3N3b3JkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZWpiTG9va3VwTmFtZSwgU3RyaW5nIHRocmVhZE5hbWUpIHsKICAgICAgICAgc3VwZXIodXNlcm5hbWUsIHBhc3N3b3JkLCBlamJMb29rdXBOYW1lLCB0aHJlYWROYW1lKTsKICAgICB9CkBAIC0xMzEsNyArMTMxLDcgQEAKIAogYWJzdHJhY3QgY2xhc3MgTm9Mb2dpbkJ1c2luZXNzQ2FsbGVyQmFzZSBleHRlbmRzIE15VGhyZWFkQmFzZSB7CiAKLSAgICBwdWJsaWMgTm9Mb2dpbkJ1c2luZXNzQ2FsbGVyQmFzZShTdHJpbmcgdXNlcm5hbWUsIFN0cmluZyBwYXNzd29yZCwgCisgICAgcHVibGljIE5vTG9naW5CdXNpbmVzc0NhbGxlckJhc2UoU3RyaW5nIHVzZXJuYW1lLCBTdHJpbmcgcGFzc3dvcmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGVqYkxvb2t1cE5hbWUsIFN0cmluZyB0aHJlYWROYW1lKSB7CiAgICAgICAgIHN1cGVyKHVzZXJuYW1lLCBwYXNzd29yZCwgZWpiTG9va3VwTmFtZSwgdGhyZWFkTmFtZSk7CiAgICAgfQpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAKIGNsYXNzIExvZ2luQnVzaW5lc3NDYWxsZXIgZXh0ZW5kcyBMb2dpbkJ1c2luZXNzQ2FsbGVyQmFzZSB7CiAKLSAgICBwdWJsaWMgTG9naW5CdXNpbmVzc0NhbGxlcihTdHJpbmcgdXNlcm5hbWUsIFN0cmluZyBwYXNzd29yZCwgCisgICAgcHVibGljIExvZ2luQnVzaW5lc3NDYWxsZXIoU3RyaW5nIHVzZXJuYW1lLCBTdHJpbmcgcGFzc3dvcmQsCiAgICAgICAgIFN0cmluZyBlamJMb29rdXBOYW1lLCBTdHJpbmcgdGhyZWFkTmFtZSkgewogICAgICAgICBzdXBlcih1c2VybmFtZSwgcGFzc3dvcmQsIGVqYkxvb2t1cE5hbWUsIHRocmVhZE5hbWUpOwogICAgIH0KQEAgLTE1OSw3ICsxNTksNyBAQAogCiBjbGFzcyBMb2dpbkJ1c2luZXNzQ2FsbGVyMiBleHRlbmRzIExvZ2luQnVzaW5lc3NDYWxsZXJCYXNlIHsKIAotICAgIHB1YmxpYyBMb2dpbkJ1c2luZXNzQ2FsbGVyMihTdHJpbmcgdXNlcm5hbWUsIFN0cmluZyBwYXNzd29yZCwgCisgICAgcHVibGljIExvZ2luQnVzaW5lc3NDYWxsZXIyKFN0cmluZyB1c2VybmFtZSwgU3RyaW5nIHBhc3N3b3JkLAogICAgICAgICBTdHJpbmcgZWpiTG9va3VwTmFtZSwgU3RyaW5nIHRocmVhZE5hbWUpIHsKICAgICAgICAgc3VwZXIodXNlcm5hbWUsIHBhc3N3b3JkLCBlamJMb29rdXBOYW1lLCB0aHJlYWROYW1lKTsKICAgICB9CkBAIC0xNzEsNyArMTcxLDcgQEAKIAogY2xhc3MgTG9naW5CdXNpbmVzc0NhbGxlcjMgZXh0ZW5kcyBMb2dpbkJ1c2luZXNzQ2FsbGVyQmFzZSB7CiAKLSAgICBwdWJsaWMgTG9naW5CdXNpbmVzc0NhbGxlcjMoU3RyaW5nIHVzZXJuYW1lLCBTdHJpbmcgcGFzc3dvcmQsIAorICAgIHB1YmxpYyBMb2dpbkJ1c2luZXNzQ2FsbGVyMyhTdHJpbmcgdXNlcm5hbWUsIFN0cmluZyBwYXNzd29yZCwKICAgICAgICAgU3RyaW5nIGVqYkxvb2t1cE5hbWUsIFN0cmluZyB0aHJlYWROYW1lKSB7CiAgICAgICAgIHN1cGVyKHVzZXJuYW1lLCBwYXNzd29yZCwgZWpiTG9va3VwTmFtZSwgdGhyZWFkTmFtZSk7CiAgICAgfQpAQCAtMTgzLDcgKzE4Myw3IEBACiAKIGNsYXNzIE5vTG9naW5CdXNpbmVzc0NhbGxlciBleHRlbmRzIE5vTG9naW5CdXNpbmVzc0NhbGxlckJhc2UgewogCi0gICAgcHVibGljIE5vTG9naW5CdXNpbmVzc0NhbGxlcihTdHJpbmcgdXNlcm5hbWUsIFN0cmluZyBwYXNzd29yZCwgCisgICAgcHVibGljIE5vTG9naW5CdXNpbmVzc0NhbGxlcihTdHJpbmcgdXNlcm5hbWUsIFN0cmluZyBwYXNzd29yZCwKICAgICAgICAgU3RyaW5nIGVqYkxvb2t1cE5hbWUsIFN0cmluZyB0aHJlYWROYW1lKSB7CiAgICAgICAgIHN1cGVyKHVzZXJuYW1lLCBwYXNzd29yZCwgZWpiTG9va3VwTmFtZSwgdGhyZWFkTmFtZSk7CiAgICAgfQpAQCAtMTk1LDcgKzE5NSw3IEBACiAKIGNsYXNzIE5vTG9naW5CdXNpbmVzc0NhbGxlcjIgZXh0ZW5kcyBOb0xvZ2luQnVzaW5lc3NDYWxsZXJCYXNlIHsKIAotICAgIHB1YmxpYyBOb0xvZ2luQnVzaW5lc3NDYWxsZXIyKFN0cmluZyB1c2VybmFtZSwgU3RyaW5nIHBhc3N3b3JkLCAKKyAgICBwdWJsaWMgTm9Mb2dpbkJ1c2luZXNzQ2FsbGVyMihTdHJpbmcgdXNlcm5hbWUsIFN0cmluZyBwYXNzd29yZCwKICAgICAgICAgU3RyaW5nIGVqYkxvb2t1cE5hbWUsIFN0cmluZyB0aHJlYWROYW1lKSB7CiAgICAgICAgIHN1cGVyKHVzZXJuYW1lLCBwYXNzd29yZCwgZWpiTG9va3VwTmFtZSwgdGhyZWFkTmFtZSk7CiAgICAgfQpAQCAtMjA3LDcgKzIwNyw3IEBACiAKIGNsYXNzIE5vTG9naW5CdXNpbmVzc0NhbGxlcjMgZXh0ZW5kcyBOb0xvZ2luQnVzaW5lc3NDYWxsZXJCYXNlIHsKIAotICAgIHB1YmxpYyBOb0xvZ2luQnVzaW5lc3NDYWxsZXIzKFN0cmluZyB1c2VybmFtZSwgU3RyaW5nIHBhc3N3b3JkLCAKKyAgICBwdWJsaWMgTm9Mb2dpbkJ1c2luZXNzQ2FsbGVyMyhTdHJpbmcgdXNlcm5hbWUsIFN0cmluZyBwYXNzd29yZCwKICAgICAgICAgU3RyaW5nIGVqYkxvb2t1cE5hbWUsIFN0cmluZyB0aHJlYWROYW1lKSB7CiAgICAgICAgIHN1cGVyKHVzZXJuYW1lLCBwYXNzd29yZCwgZWpiTG9va3VwTmFtZSwgdGhyZWFkTmFtZSk7CiAgICAgfQpAQCAtMjE4LDggKzIxOCw4IEBACiB9CiAKIHB1YmxpYyBjbGFzcyBQTG9naW5UZXN0IHsKLSAgICAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7CkBAIC0yMzAsMzIgKzIzMCwzMiBAQAogCiAgICAgICAgIGlmKCBiICkKICAgICAgICAgICAgIHBlclRocmVhZFRlc3QobnVtVGhyZWFkcyk7Ci0gICAgICAgIGVsc2UgCisgICAgICAgIGVsc2UKICAgICAgICAgICAgIHBlclByb2Nlc3NUZXN0KG51bVRocmVhZHMpOwogICAgIH0KIAogICAgIHByaXZhdGUgc3RhdGljIHZvaWQgcGVyVGhyZWFkVGVzdChpbnQgbnVtVGhyZWFkcykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFNldDxNeVRocmVhZEJhc2U+IHRocmVhZFNldCA9IG5ldyBIYXNoU2V0PE15VGhyZWFkQmFzZT4oKTsKIAogICAgICAgICBmb3IoaW50IGk9MDsgaTxudW1UaHJlYWRzOyBpKyspIHsKIAotICAgICAgICAgICAgTG9naW5CdXNpbmVzc0NhbGxlciB0MSA9IAotICAgICAgICAgICAgICAgIG5ldyBMb2dpbkJ1c2luZXNzQ2FsbGVyKCJ0ZXN0eSIsICJ0ZXN0eSIsICJlamIvTXlTZXNzaW9uMUJlYW4iLCAKKyAgICAgICAgICAgIExvZ2luQnVzaW5lc3NDYWxsZXIgdDEgPQorICAgICAgICAgICAgICAgIG5ldyBMb2dpbkJ1c2luZXNzQ2FsbGVyKCJ0ZXN0eSIsICJ0ZXN0eSIsICJlamIvTXlTZXNzaW9uMUJlYW4iLAogICAgICAgICAgICAgICAgICAgICAgICJUSFJFQUQtIisiMS0iK2kpOwogICAgICAgICAgICAgTG9naW5CdXNpbmVzc0NhbGxlcjIgdDIgPQotICAgICAgICAgICAgICAgIG5ldyBMb2dpbkJ1c2luZXNzQ2FsbGVyMigidGVzdHkyIiwgInRlc3R5MiIsICJlamIvTXlTZXNzaW9uMUJlYW4iLCAKKyAgICAgICAgICAgICAgICBuZXcgTG9naW5CdXNpbmVzc0NhbGxlcjIoInRlc3R5MiIsICJ0ZXN0eTIiLCAiZWpiL015U2Vzc2lvbjFCZWFuIiwKICAgICAgICAgICAgICAgICAgICAgICAiVEhSRUFELSIrIjItIitpKTsKLSAgICAgICAgICAgIExvZ2luQnVzaW5lc3NDYWxsZXIzIHQzID0gCi0gICAgICAgICAgICAgICAgbmV3IExvZ2luQnVzaW5lc3NDYWxsZXIzKCJ0ZXN0eTMiLCAidGVzdHkzIiwgImVqYi9NeVNlc3Npb24xQmVhbiIsIAorICAgICAgICAgICAgTG9naW5CdXNpbmVzc0NhbGxlcjMgdDMgPQorICAgICAgICAgICAgICAgIG5ldyBMb2dpbkJ1c2luZXNzQ2FsbGVyMygidGVzdHkzIiwgInRlc3R5MyIsICJlamIvTXlTZXNzaW9uMUJlYW4iLAogICAgICAgICAgICAgICAgICAgICAgICJUSFJFQUQtIisiMy0iK2kpOwogCiAgICAgICAgICAgICB0aHJlYWRTZXQuYWRkKHQxKTsKICAgICAgICAgICAgIHRocmVhZFNldC5hZGQodDIpOwogICAgICAgICAgICAgdGhyZWFkU2V0LmFkZCh0Myk7CiAKLSAgICAgICAgICAgIHQyLnN0YXJ0KCk7ICAgCi0gICAgICAgICAgICB0MS5zdGFydCgpOyAgIAorICAgICAgICAgICAgdDIuc3RhcnQoKTsKKyAgICAgICAgICAgIHQxLnN0YXJ0KCk7CiAgICAgICAgICAgICB0My5zdGFydCgpOwogCiAgICAgICAgIH0KQEAgLTI4NSw3ICsyODUsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgc3RhdGljIHZvaWQgcGVyUHJvY2Vzc1Rlc3QoaW50IG51bVRocmVhZHMpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTZXQ8TXlUaHJlYWRCYXNlPiB0aHJlYWRTZXQgPSBuZXcgSGFzaFNldDxNeVRocmVhZEJhc2U+KCk7CiAKICAgICAgICAgUHJvZ3JhbW1hdGljTG9naW4gbG9naW4gPSBuZXcgUHJvZ3JhbW1hdGljTG9naW4oKTsKQEAgLTI5MywyMiArMjkzLDIyIEBACiAKICAgICAgICAgZm9yKGludCBpPTA7IGk8bnVtVGhyZWFkczsgaSsrKSB7CiAKLSAgICAgICAgICAgIE5vTG9naW5CdXNpbmVzc0NhbGxlciB0MSA9IAotICAgICAgICAgICAgICAgIG5ldyBOb0xvZ2luQnVzaW5lc3NDYWxsZXIoInRlc3R5IiwgInRlc3R5IiwgImVqYi9NeVNlc3Npb24xQmVhbiIsIAorICAgICAgICAgICAgTm9Mb2dpbkJ1c2luZXNzQ2FsbGVyIHQxID0KKyAgICAgICAgICAgICAgICBuZXcgTm9Mb2dpbkJ1c2luZXNzQ2FsbGVyKCJ0ZXN0eSIsICJ0ZXN0eSIsICJlamIvTXlTZXNzaW9uMUJlYW4iLAogICAgICAgICAgICAgICAgICAgICAgICJUSFJFQUQtIisiMS0iK2kpOwogICAgICAgICAgICAgTm9Mb2dpbkJ1c2luZXNzQ2FsbGVyMiB0MiA9Ci0gICAgICAgICAgICAgICAgbmV3IE5vTG9naW5CdXNpbmVzc0NhbGxlcjIoInRlc3R5MiIsICJ0ZXN0eTIiLCAiZWpiL015U2Vzc2lvbjFCZWFuIiwgCisgICAgICAgICAgICAgICAgbmV3IE5vTG9naW5CdXNpbmVzc0NhbGxlcjIoInRlc3R5MiIsICJ0ZXN0eTIiLCAiZWpiL015U2Vzc2lvbjFCZWFuIiwKICAgICAgICAgICAgICAgICAgICAgICAiVEhSRUFELSIrIjItIitpKTsKLSAgICAgICAgICAgIE5vTG9naW5CdXNpbmVzc0NhbGxlcjMgdDMgPSAKLSAgICAgICAgICAgICAgICBuZXcgTm9Mb2dpbkJ1c2luZXNzQ2FsbGVyMygidGVzdHkzIiwgInRlc3R5MyIsICJlamIvTXlTZXNzaW9uMUJlYW4iLCAKKyAgICAgICAgICAgIE5vTG9naW5CdXNpbmVzc0NhbGxlcjMgdDMgPQorICAgICAgICAgICAgICAgIG5ldyBOb0xvZ2luQnVzaW5lc3NDYWxsZXIzKCJ0ZXN0eTMiLCAidGVzdHkzIiwgImVqYi9NeVNlc3Npb24xQmVhbiIsCiAgICAgICAgICAgICAgICAgICAgICAgIlRIUkVBRC0iKyIzLSIraSk7CiAKICAgICAgICAgICAgIHRocmVhZFNldC5hZGQodDEpOwogICAgICAgICAgICAgdGhyZWFkU2V0LmFkZCh0Mik7CiAgICAgICAgICAgICB0aHJlYWRTZXQuYWRkKHQzKTsKIAotICAgICAgICAgICAgdDIuc3RhcnQoKTsgICAKLSAgICAgICAgICAgIHQxLnN0YXJ0KCk7ICAgCisgICAgICAgICAgICB0Mi5zdGFydCgpOworICAgICAgICAgICAgdDEuc3RhcnQoKTsKICAgICAgICAgICAgIHQzLnN0YXJ0KCk7CiAKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcGxvZ2luL3N0YW5kYWxvbmUvZGVzY3JpcHRvci9lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3Bsb2dpbi9zdGFuZGFsb25lL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggOWQ2ZjlhMS4uMjZjZWJmOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcGxvZ2luL3N0YW5kYWxvbmUvZGVzY3JpcHRvci9lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9wbG9naW4vc3RhbmRhbG9uZS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCkBAIC0zNCw0MSArMzQsNDEgQEAKIAogCiAgICAgICAgIDxzZWN1cml0eS1yb2xlPgotICAgICAgIAkgICAgPHJvbGUtbmFtZT5zdGFmZjwvcm9sZS1uYW1lPgorICAgICAgICAgICAgICAgPHJvbGUtbmFtZT5zdGFmZjwvcm9sZS1uYW1lPgogICAgICAgICA8L3NlY3VyaXR5LXJvbGU+CiAgICAgICAgIDxzZWN1cml0eS1yb2xlPgotICAgICAgIAkgICAgPHJvbGUtbmFtZT5zdGFmZjI8L3JvbGUtbmFtZT4KKyAgICAgICAgICAgICAgIDxyb2xlLW5hbWU+c3RhZmYyPC9yb2xlLW5hbWU+CiAgICAgICAgIDwvc2VjdXJpdHktcm9sZT4KICAgICAgICAgPHNlY3VyaXR5LXJvbGU+Ci0gICAgICAgCSAgICA8cm9sZS1uYW1lPnN0YWZmMzwvcm9sZS1uYW1lPgorICAgICAgICAgICAgICAgPHJvbGUtbmFtZT5zdGFmZjM8L3JvbGUtbmFtZT4KICAgICAgICAgPC9zZWN1cml0eS1yb2xlPgogCiAgICAgICAgIDxtZXRob2QtcGVybWlzc2lvbj4KLQkgICAgIDxkZXNjcmlwdGlvbj5tZXRob2QgYXV0aG9yaXplZCB0byBvbmx5IHN0YWZmIHJvbGU8L2Rlc2NyaXB0aW9uPgorICAgICAgICAgPGRlc2NyaXB0aW9uPm1ldGhvZCBhdXRob3JpemVkIHRvIG9ubHkgc3RhZmYgcm9sZTwvZGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgPHJvbGUtbmFtZT5zdGFmZjwvcm9sZS1uYW1lPgogICAgICAgICAgICAgIDxtZXRob2Q+Ci0JICAgICAgICAgPGVqYi1uYW1lPk15U2Vzc2lvbjFCZWFuPC9lamItbmFtZT4KLQkgICAgICAgICA8bWV0aG9kLW5hbWU+YnVzaW5lc3NNZXRob2Q8L21ldGhvZC1uYW1lPgotCSAgICAgPC9tZXRob2Q+CisgICAgICAgICAgICAgPGVqYi1uYW1lPk15U2Vzc2lvbjFCZWFuPC9lamItbmFtZT4KKyAgICAgICAgICAgICA8bWV0aG9kLW5hbWU+YnVzaW5lc3NNZXRob2Q8L21ldGhvZC1uYW1lPgorICAgICAgICAgPC9tZXRob2Q+CiAgICAgICAgIDwvbWV0aG9kLXBlcm1pc3Npb24+CiAKIAogICAgICAgICA8bWV0aG9kLXBlcm1pc3Npb24+Ci0JICAgICA8ZGVzY3JpcHRpb24+bWV0aG9kIGF1dGhvcml6ZWQgdG8gb25seSBzdGFmZjIgcm9sZTwvZGVzY3JpcHRpb24+CisgICAgICAgICA8ZGVzY3JpcHRpb24+bWV0aG9kIGF1dGhvcml6ZWQgdG8gb25seSBzdGFmZjIgcm9sZTwvZGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgPHJvbGUtbmFtZT5zdGFmZjI8L3JvbGUtbmFtZT4KICAgICAgICAgICAgICA8bWV0aG9kPgotCSAgICAgICAgIDxlamItbmFtZT5NeVNlc3Npb24xQmVhbjwvZWpiLW5hbWU+Ci0JICAgICAgICAgPG1ldGhvZC1uYW1lPmJ1c2luZXNzTWV0aG9kMjwvbWV0aG9kLW5hbWU+Ci0JICAgICA8L21ldGhvZD4KKyAgICAgICAgICAgICA8ZWpiLW5hbWU+TXlTZXNzaW9uMUJlYW48L2VqYi1uYW1lPgorICAgICAgICAgICAgIDxtZXRob2QtbmFtZT5idXNpbmVzc01ldGhvZDI8L21ldGhvZC1uYW1lPgorICAgICAgICAgPC9tZXRob2Q+CiAgICAgICAgIDwvbWV0aG9kLXBlcm1pc3Npb24+CiAKICAgICAgICAgPG1ldGhvZC1wZXJtaXNzaW9uPgotCSAgICAgPGRlc2NyaXB0aW9uPm1ldGhvZCBhdXRob3JpemVkIHRvIG9ubHkgc3RhZmYzIHJvbGU8L2Rlc2NyaXB0aW9uPgorICAgICAgICAgPGRlc2NyaXB0aW9uPm1ldGhvZCBhdXRob3JpemVkIHRvIG9ubHkgc3RhZmYzIHJvbGU8L2Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgIDxyb2xlLW5hbWU+c3RhZmYzPC9yb2xlLW5hbWU+CiAgICAgICAgICAgICAgPG1ldGhvZD4KLQkgICAgICAgICA8ZWpiLW5hbWU+TXlTZXNzaW9uMUJlYW48L2VqYi1uYW1lPgotCSAgICAgICAgIDxtZXRob2QtbmFtZT5idXNpbmVzc01ldGhvZDM8L21ldGhvZC1uYW1lPgotCSAgICAgPC9tZXRob2Q+CisgICAgICAgICAgICAgPGVqYi1uYW1lPk15U2Vzc2lvbjFCZWFuPC9lamItbmFtZT4KKyAgICAgICAgICAgICA8bWV0aG9kLW5hbWU+YnVzaW5lc3NNZXRob2QzPC9tZXRob2QtbmFtZT4KKyAgICAgICAgIDwvbWV0aG9kPgogICAgICAgICA8L21ldGhvZC1wZXJtaXNzaW9uPgogCiAgICAgICAgIDxjb250YWluZXItdHJhbnNhY3Rpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9wbG9naW4vc3RhbmRhbG9uZS9kZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9wbG9naW4vc3RhbmRhbG9uZS9kZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwKaW5kZXggM2M3MzA2Yi4uNjFhNjM5YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcGxvZ2luL3N0YW5kYWxvbmUvZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3Bsb2dpbi9zdGFuZGFsb25lL2Rlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbApAQCAtMzIsNyArMzIsNyBAQAogICAgIDxyb2xlLW5hbWU+c3RhZmYzPC9yb2xlLW5hbWU+CiAgICAgPHByaW5jaXBhbC1uYW1lPmNoaWVmPC9wcmluY2lwYWwtbmFtZT4KICAgPC9zZWN1cml0eS1yb2xlLW1hcHBpbmc+Ci0gCisKICAgPHNlY3VyaXR5LXJvbGUtbWFwcGluZz4KICAgICA8cm9sZS1uYW1lPnN0YWZmPC9yb2xlLW5hbWU+CiAgICAgPHByaW5jaXBhbC1uYW1lPnRlc3R5PC9wcmluY2lwYWwtbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3Bsb2dpbi9zdGFuZGFsb25lL2VqYi9NeVNlc3Npb24xQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcGxvZ2luL3N0YW5kYWxvbmUvZWpiL015U2Vzc2lvbjFCZWFuLmphdmEKaW5kZXggNTU2Y2FjZC4uODg5Y2FlZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcGxvZ2luL3N0YW5kYWxvbmUvZWpiL015U2Vzc2lvbjFCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcGxvZ2luL3N0YW5kYWxvbmUvZWpiL015U2Vzc2lvbjFCZWFuLmphdmEKQEAgLTIxLDM2ICsyMSwzNiBAQAogICovCiBwdWJsaWMgY2xhc3MgTXlTZXNzaW9uMUJlYW4gaW1wbGVtZW50cyBTZXNzaW9uQmVhbiwgTXlTZXNzaW9uMVJlbW90ZUJ1c2luZXNzIHsKICAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLlNlc3Npb25CZWFuI3NldFNlc3Npb25Db250ZXh0KGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0KQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IGFDb250ZXh0KSB7CiAgICAgICAgIGNvbnRleHQgPSBhQ29udGV4dDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLlNlc3Npb25CZWFuI2VqYkFjdGl2YXRlKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLlNlc3Npb25CZWFuI2VqYlBhc3NpdmF0ZSgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkgewotICAgICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEBzZWUgamFrYXJ0YS5lamIuU2Vzc2lvbkJlYW4jZWpiUmVtb3ZlKCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7Ci0gICAgICAgIAorCiAgICAgfQogICAgIC8vIDwvZWRpdG9yLWZvbGQ+Ci0gICAgCisKICAgICAvKioKICAgICAgKiBTZWUgc2VjdGlvbiA3LjEwLjMgb2YgdGhlIEVKQiAyLjAgc3BlY2lmaWNhdGlvbgogICAgICAqIFNlZSBzZWN0aW9uIDcuMTEuMyBvZiB0aGUgRUpCIDIuMSBzcGVjaWZpY2F0aW9uCkBAIC02MSw5ICs2MSw5IEBACiAgICAgICAgIC8vIHNwYW5uaW5nIGFsbCBtZXRob2RzIGNhbiBiZSBwZXJmb3JtZWQgaGVyZSBzdWNoIGFzIGhvbWUgaW50ZXJmYWNlcwogICAgICAgICAvLyBhbmQgZGF0YSBzb3VyY2VzLgogICAgIH0KLSAgICAKLSAgICAKLSAgICAKKworCisKICAgICBwdWJsaWMgU3RyaW5nIGJ1c2luZXNzTWV0aG9kKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIHJldHVybiAiaGVsbG8gIiArIG5hbWU7CiAgICAgfQpAQCAtNzUsNyArNzUsNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgYnVzaW5lc3NNZXRob2QzKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIHJldHVybiAiaG93ZHkgIituYW1lOwogICAgIH0KLSAgICAKLSAgICAKLSAgICAKKworCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3Bsb2dpbi9zdGFuZGFsb25lL2VqYi9NeVNlc3Npb24xUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9wbG9naW4vc3RhbmRhbG9uZS9lamIvTXlTZXNzaW9uMVJlbW90ZS5qYXZhCmluZGV4IDc5OGQ0MDYuLjBlOTFlNWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3Bsb2dpbi9zdGFuZGFsb25lL2VqYi9NeVNlc3Npb24xUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcGxvZ2luL3N0YW5kYWxvbmUvZWpiL015U2Vzc2lvbjFSZW1vdGUuamF2YQpAQCAtMjEsNiArMjEsNiBAQAogICogVGhpcyBpcyB0aGUgcmVtb3RlIGludGVyZmFjZSBmb3IgTXlTZXNzaW9uMSBlbnRlcnByaXNlIGJlYW4uCiAgKi8KIHB1YmxpYyBpbnRlcmZhY2UgTXlTZXNzaW9uMVJlbW90ZSBleHRlbmRzIEVKQk9iamVjdCwgTXlTZXNzaW9uMVJlbW90ZUJ1c2luZXNzIHsKLSAgICAKLSAgICAKKworCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9wbG9naW4vc3RhbmRhbG9uZS9lamIvTXlTZXNzaW9uMVJlbW90ZUhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3Bsb2dpbi9zdGFuZGFsb25lL2VqYi9NeVNlc3Npb24xUmVtb3RlSG9tZS5qYXZhCmluZGV4IDdlYmM4ZjAuLjdjMzMwM2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3Bsb2dpbi9zdGFuZGFsb25lL2VqYi9NeVNlc3Npb24xUmVtb3RlSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3Bsb2dpbi9zdGFuZGFsb25lL2VqYi9NeVNlc3Npb24xUmVtb3RlSG9tZS5qYXZhCkBAIC0yMyw4ICsyMyw4IEBACiAgKiBUaGlzIGlzIHRoZSBob21lIGludGVyZmFjZSBmb3IgTXlTZXNzaW9uMSBlbnRlcnByaXNlIGJlYW4uCiAgKi8KIHB1YmxpYyBpbnRlcmZhY2UgTXlTZXNzaW9uMVJlbW90ZUhvbWUgZXh0ZW5kcyBFSkJIb21lIHsKLSAgICAKKwogICAgIE15U2Vzc2lvbjFSZW1vdGUgY3JlYXRlKCkgIHRocm93cyBDcmVhdGVFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKLSAgICAKLSAgICAKKworCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9yZWFsbVBlckFwcC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcmVhbG1QZXJBcHAvYnVpbGQucHJvcGVydGllcwppbmRleCBhMTgzNWQ0Li5mMGY4OTFhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9yZWFsbVBlckFwcC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3JlYWxtUGVyQXBwL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InNlY3VyaXR5Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpAQCAtMjYsNCArMjYsNCBAQAogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJycGFMb2dpbkJlYW4iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0icnBhTG9naW5CZWFuIi8+ICAgICAgICBcdTAwMjAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3JlYWxtUGVyQXBwL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3JlYWxtUGVyQXBwL2J1aWxkLnhtbAppbmRleCA2NmQ2MTVhLi4yODY4MzE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9yZWFsbVBlckFwcC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcmVhbG1QZXJBcHAvYnVpbGQueG1sCkBAIC0zMyw3ICszMyw3IEBACiAgICAmY29tbW9uUnVuOwogICAgJnRlc3RQcm9wZXJ0aWVzOwogICAgJmNvbW1vblNlY3VyaXR5OwotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLCBzZXR1cCwgZGVwbG95LHJ1biwgdW5kZXBsb3ksIHVuc2V0dXAiLz4KIAogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTgxLDcgKzgxLDcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotPCEtLQk8cHJvcGVydHkgbmFtZT0iZWpiamFyLmNsYXNzZXMiIHZhbHVlPSIqKi8qSG9tZSouY2xhc3MsKiovKkJlYW4qLmNsYXNzLCoqLypEYXRhKi5jbGFzcywqLmRic2NoZW1hIi8+Cis8IS0tICAgIDxwcm9wZXJ0eSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgdmFsdWU9IioqLypIb21lKi5jbGFzcywqKi8qQmVhbiouY2xhc3MsKiovKkRhdGEqLmNsYXNzLCouZGJzY2hlbWEiLz4KIC0tPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3JlYWxtUGVyQXBwL2NsaWVudC9ScGFDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3JlYWxtUGVyQXBwL2NsaWVudC9ScGFDbGllbnQuamF2YQppbmRleCA0M2QwNzcyLi4yNTJkYmQ0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9yZWFsbVBlckFwcC9jbGllbnQvUnBhQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcmVhbG1QZXJBcHAvY2xpZW50L1JwYUNsaWVudC5qYXZhCkBAIC0zOCwzMSArMzgsMzEgQEAKICAgICAgICAgUnBhQ2xpZW50IGNsaWVudCA9IG5ldyBScGFDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgUnBhQ2xpZW50KFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgLy9zdXBlcihhcmdzKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGRvVGVzdCgpIHsKLSAgICAgICAgCi0JUnBhUmVtb3RlIGhyPW51bGw7CisKKyAgICBScGFSZW1vdGUgaHI9bnVsbDsKICAgICAgICAgU3RyaW5nIHJlcz1udWxsOwogICAgICAgICBDb250ZXh0IGljID0gbnVsbDsKICAgICAgICAgTG9naW5Db250ZXh0IGxjPW51bGw7CiAgICAgICAgIFJwYUhvbWUgaG9tZT1udWxsOwogICAgICAgICBTdHJpbmcgdGVzdElkID0gIlNlYzo6UmVhbG0gcGVyIGFwcCI7Ci0gICAgCXRyeXsKKyAgICAgICAgdHJ5ewogICAgICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiU2VjdXJpdHk6OlJlYWxtIHBlciBhcHAiKTsKLQkgICAgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgICAgIC8vIGNyZWF0ZSBFSkIgdXNpbmcgZmFjdG9yeSBmcm9tIGNvbnRhaW5lciAKKyAgICAgICAgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgICAgIC8vIGNyZWF0ZSBFSkIgdXNpbmcgZmFjdG9yeSBmcm9tIGNvbnRhaW5lcgogICAgICAgICAgICAgamF2YS5sYW5nLk9iamVjdCBvYmpyZWYgPSBpYy5sb29rdXAoInJwYUxvZ2luQmVhbiIpOwotCQkKLQkgICAgU3lzdGVtLmVyci5wcmludGxuKCJMb29rZWQgdXAgaG9tZSEhIik7Ci0JCQotCSAgICBob21lID0gKFJwYUhvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KAotCQkJCQkgICBvYmpyZWYsIFJwYUhvbWUuY2xhc3MpOwotCSAgICBTeXN0ZW0uZXJyLnByaW50bG4oIk5hcnJvd2VkIGhvbWUhISIpOwotCQkJCQorCisgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTG9va2VkIHVwIGhvbWUhISIpOworCisgICAgICAgIGhvbWUgPSAoUnBhSG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3coCisgICAgICAgICAgICAgICAgICAgICAgIG9ianJlZiwgUnBhSG9tZS5jbGFzcyk7CisgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTmFycm93ZWQgaG9tZSEhIik7CisKICAgICAgICAgICAgIGhyID0gaG9tZS5jcmVhdGUoIkxpekh1cmxleSIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgdGhlIEVKQiEhIik7CiAKQEAgLTg4LDExICs4OCwxMSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZWFsbVBlckFwcDpScGFMb2dpbkJlYW4gVGVzdCBGYWlsZWQiKTsKICAgICAgICAgICAgIFN5c3RlbS5leGl0KC0xKTsKLQl9IGZpbmFsbHkgeworICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiByZXM7Ci0gICAgICAgIAorCiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9yZWFsbVBlckFwcC9zaG9wcGluZy9ScGFCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9yZWFsbVBlckFwcC9zaG9wcGluZy9ScGFCZWFuLmphdmEKaW5kZXggYzczOTQ2ZC4uMjYzYTliYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcmVhbG1QZXJBcHAvc2hvcHBpbmcvUnBhQmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3JlYWxtUGVyQXBwL3Nob3BwaW5nL1JwYUJlYW4uamF2YQpAQCAtMzYsMjYgKzM2LDI2IEBACiAgKi8KIAogcHVibGljIGNsYXNzIFJwYUJlYW4gaW1wbGVtZW50cyBTZXNzaW9uQmVhbiB7Ci0gICAgCisKICAgICBwcml2YXRlIFN0cmluZyBzaG9wcGVyID0gImFub255bW91cyI7CiAgICAgcHJpdmF0ZSBTdHJpbmcgcHJpbmNpcGFsID0gImhhcnByZWV0IjsKICAgICBwcml2YXRlIGludCB0b3RhbFByaWNlID0gMDsKLSAgICAKKwogICAgIHByaXZhdGUgaW50IHRvdGFsSXRlbXMgPSAwOwotICAgIAorCiAgICAgcHJpdmF0ZSBWZWN0b3IgaXRlbXM7Ci0gICAgCisKICAgICBwcml2YXRlIFZlY3RvciBpdGVtUHJpY2U7Ci0gICAgCisKICAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IHNjID0gbnVsbDsKLSAgICAKKwogICAgIC8qKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIFNob3BwaW5nRUpCICovCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKFN0cmluZyBzaG9wcGVyTmFtZSkgewogICAgICAgICBzaG9wcGVyID0gc2hvcHBlck5hbWU7CiAgICAgICAgIGl0ZW1zID0gbmV3IFZlY3RvcigpOwogICAgICAgICBpdGVtUHJpY2UgPSBuZXcgVmVjdG9yKCk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgYWRkSXRlbShqYXZhLmxhbmcuU3RyaW5nIGl0ZW0sIGludCBwcmljZSkgdGhyb3dzIEVKQkV4Y2VwdGlvbiwKICAgICAgICAgUmVtb3RlRXhjZXB0aW9uewogICAgICAgICBjaGVja0NhbGxlclByaW5jaXBhbCgpOwpAQCAtNjcsMjYgKzY3LDI2IEBACiAgICAgICAgICAgICArIGl0ZW0gKyIgZm9yIHByaWNlID0iKyBwcmljZSArIiAuVG90YWwgSXRlbXMgPSAiK3RvdGFsSXRlbXMgKwogICAgICAgICAgICAgIiAuVG90YWxQcmljZSA9ICIgKyB0b3RhbFByaWNlKTsKICAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgZGVsZXRlSXRlbShqYXZhLmxhbmcuU3RyaW5nIGl0ZW0pIHRocm93cyBFSkJFeGNlcHRpb24sIAorCisgICAgcHVibGljIHZvaWQgZGVsZXRlSXRlbShqYXZhLmxhbmcuU3RyaW5nIGl0ZW0pIHRocm93cyBFSkJFeGNlcHRpb24sCiAgICAgICAgIFJlbW90ZUV4Y2VwdGlvbnsKICAgICAgICAgY2hlY2tDYWxsZXJQcmluY2lwYWwoKTsKICAgICAgICAgaW50IGluZGV4ID0gaXRlbXMuaW5kZXhPZihpdGVtKTsKICAgICAgICAgaXRlbXMucmVtb3ZlKGl0ZW0pOwogICAgICAgICBJbnRlZ2VyIHByaWNlID0gKEludGVnZXIpIGl0ZW1QcmljZS5nZXQoaW5kZXgpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNob3BwaW5nIENhcnQ6IFJlbW92aW5nIGl0ZW0gIisgaXRlbSArIiBAcHJpY2UgIisgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2hvcHBpbmcgQ2FydDogUmVtb3ZpbmcgaXRlbSAiKyBpdGVtICsiIEBwcmljZSAiKwogICAgICAgICAgICAgcHJpY2UuaW50VmFsdWUoKSk7CiAgICAgICAgIHRvdGFsUHJpY2UgLT0gcHJpY2Uuc2hvcnRWYWx1ZSgpOwotICAgICAgICBpdGVtUHJpY2UucmVtb3ZlKGluZGV4KTsgICAgICAgICAgICAgICAgICAgIAorICAgICAgICBpdGVtUHJpY2UucmVtb3ZlKGluZGV4KTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgU2hvcHBpbmcgQ2FydDogU2hvcHBlciAiKyBzaG9wcGVyICsiICAuVG90YWwgSXRlbXMgPSAiK3RvdGFsSXRlbXMgKwogICAgICAgICAgICAgIiAuVG90YWxQcmljZSA9ICIgKyB0b3RhbFByaWNlKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgZG91YmxlIGdldFRvdGFsQ29zdCgpIHRocm93cyBFSkJFeGNlcHRpb257CiAgICAgICAgIGNoZWNrQ2FsbGVyUHJpbmNpcGFsKCk7CiAgICAgICAgIHJldHVybiB0b3RhbFByaWNlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRJdGVtcygpIHRocm93cyBFSkJFeGNlcHRpb257CiAgICAgICAgIGNoZWNrQ2FsbGVyUHJpbmNpcGFsKCk7CiAKQEAgLTk4LDI2ICs5OCwyNiBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBpdGVtTmFtZXM7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gUnBhIGVqYkFjdGl2YXRlIik7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gUnBhIGVqYlBhc3NpdmF0ZSIpOwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBScGEgZWpiUmVtb3ZlIik7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChqYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dCBzZXNzaW9uQ29udGV4dCkgewogICAgICAgICBzYyA9IHNlc3Npb25Db250ZXh0OwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBjaGVja0NhbGxlclByaW5jaXBhbCgpIHRocm93cyBFSkJFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxlciBQcmluY2lhbCA9ICIgKyBzYy5nZXRDYWxsZXJQcmluY2lwYWwoKSArCiAgICAgICAgICAgICAgICAgIiBjb21wYXJpbmcgYWdhaW5zdCAiICsgcHJpbmNpcGFsKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3JlYWxtUGVyQXBwL3Nob3BwaW5nL1JwYUhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3JlYWxtUGVyQXBwL3Nob3BwaW5nL1JwYUhvbWUuamF2YQppbmRleCBkNDI2MmQwLi5jOTkzMDkwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9yZWFsbVBlckFwcC9zaG9wcGluZy9ScGFIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcmVhbG1QZXJBcHAvc2hvcHBpbmcvUnBhSG9tZS5qYXZhCkBAIC0yOCw4ICsyOCw4IEBACiAgKiBAYXV0aG9yICBIYXJwcmVldCBTaW5naAogICovCiBwdWJsaWMgaW50ZXJmYWNlIFJwYUhvbWUgZXh0ZW5kcyBFSkJIb21lewotICAgIAotICAgIHB1YmxpYyBScGFSZW1vdGUgY3JlYXRlKGphdmEubGFuZy5TdHJpbmcgc2hvcHBlck5hbWUpIAorCisgICAgcHVibGljIFJwYVJlbW90ZSBjcmVhdGUoamF2YS5sYW5nLlN0cmluZyBzaG9wcGVyTmFtZSkKICAgICAgICAgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbiwgamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uOwotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9yZWFsbVBlckFwcC9zaG9wcGluZy9ScGFSZW1vdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3JlYWxtUGVyQXBwL3Nob3BwaW5nL1JwYVJlbW90ZS5qYXZhCmluZGV4IGZiOGE3NzMuLjQzYTM5OTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3JlYWxtUGVyQXBwL3Nob3BwaW5nL1JwYVJlbW90ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3JlYWxtUGVyQXBwL3Nob3BwaW5nL1JwYVJlbW90ZS5qYXZhCkBAIC0yMywxNyArMjMsMTcgQEAKIHBhY2thZ2Ugc2hvcHBpbmc7CiBpbXBvcnQgamFrYXJ0YS5lamIuRUpCT2JqZWN0OwogLyoqCi0gKiBTaG9wcGluZyBDYXJ0IFN0YXRlZnVsIFNlc3Npb24gQmVhbi4gSnVzdCB0ZXN0cyAtRGoyZWVsb2dpbi5uYW1lIAorICogU2hvcHBpbmcgQ2FydCBTdGF0ZWZ1bCBTZXNzaW9uIEJlYW4uIEp1c3QgdGVzdHMgLURqMmVlbG9naW4ubmFtZQogICogIC1EajJlZWxvZ2luLnBhc3N3b3JkIHN5c3RlbSBwcm9wZXJ0aWVzLgogICogQGF1dGhvciAgaHNpbmdoCiAgKi8KIHB1YmxpYyBpbnRlcmZhY2UgUnBhUmVtb3RlIGV4dGVuZHMgRUpCT2JqZWN0IHsKLSAgICAgICAgICAgIAorCiAgICAgcHVibGljIHZvaWQgYWRkSXRlbShqYXZhLmxhbmcuU3RyaW5nIGl0ZW0sIGludCBwcmljZSkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRlbGV0ZUl0ZW0oamF2YS5sYW5nLlN0cmluZyBpdGVtKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwotICAgICAgIAorCiAgICAgcHVibGljIGRvdWJsZSBnZXRUb3RhbENvc3QoKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljIGphdmEubGFuZy5TdHJpbmdbXSBnZXRJdGVtcygpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9yZXBvcnQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcmVwb3J0LnhtbAppbmRleCA2NWEzMmFlLi4wOTRlMzY1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9yZXBvcnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3JlcG9ydC54bWwKQEAgLTIzLDcgKzIzLDcgQEAKIDx0YXJnZXQgbmFtZT0icmVwb3J0Ij4KIDxlY2hvIG1lc3NhZ2U9IkNvbXBhcmluZyByZXN1bHRzIHdpdGggZXhwZWN0ZWQgcmVzdWx0cyIvPgogCi0gCisKICAgICA8eHNsdCBzdHlsZT0iJHtzdHlsZXNoZWV0fSIKICAgICAgICAgICAgIGluPSIke3htbGZpbGV9IiBvdXQ9IiR7aHRtbGZpbGV9IgogICAgICAgICAgICAgYmFzZWRpcj0iLiIgZGVzdGRpcj0iLiIgLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3Jlc3VsdENvdW50LnNoIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcmVzdWx0Q291bnQuc2gKaW5kZXggZmFkMmQzYy4uYTU1MGM1MSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcmVzdWx0Q291bnQuc2gKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcmVzdWx0Q291bnQuc2gKQEAgLTI0LDExICsyNCwxMSBAQAogRkFJTEVEPTAKIGZvciBpIGluICRGSUxFUwogZG8KLQllY2hvICJpbnB1dCBmaWxlPSRpIgotCVA9YGdyZXAgIlwicGFzc1wiIiAkaSB8ICB3YyAtbGAKLQlGPWBncmVwICJcImZhaWxcIiIgJGkgfCAgd2MgLWxgCi0JUEFTU0VEPWBleHByICRQQVNTRUQgKyAkUGAKLQlGQUlMRUQ9YGV4cHIgJEZBSUxFRCArICRGYAorICAgIGVjaG8gImlucHV0IGZpbGU9JGkiCisgICAgUD1gZ3JlcCAiXCJwYXNzXCIiICRpIHwgIHdjIC1sYAorICAgIEY9YGdyZXAgIlwiZmFpbFwiIiAkaSB8ICB3YyAtbGAKKyAgICBQQVNTRUQ9YGV4cHIgJFBBU1NFRCArICRQYAorICAgIEZBSUxFRD1gZXhwciAkRkFJTEVEICsgJEZgCiBkb25lCiBUT1RBTF9SVU49YGV4cHIgJFBBU1NFRCArICRGQUlMRUQgYAogRE5SPWBleHByICRUT1RBTCAtICRUT1RBTF9SVU4gYApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvcnVuX3Rlc3Quc2ggYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9ydW5fdGVzdC5zaAppbmRleCBlYzFkMzk4Li5lMDlmZmJkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9ydW5fdGVzdC5zaAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9ydW5fdGVzdC5zaApAQCAtMTcsMTAgKzE3LDEwIEBACiAKIHRlc3RfcnVuKCl7CiAKLQkjY3AgLWYgJHtBUFNfSE9NRX0vZGV2dGVzdHMvc2VjdXJpdHkvbGRhcC9vcGVuZHMvWDUwMFNpZ25lci5qYXIgJHtPUEVORFNfSE9NRX0vbGliCisgICAgI2NwIC1mICR7QVBTX0hPTUV9L2RldnRlc3RzL3NlY3VyaXR5L2xkYXAvb3BlbmRzL1g1MDBTaWduZXIuamFyICR7T1BFTkRTX0hPTUV9L2xpYgogCi0JIyBDb25maWd1cmUgYW5kIHN0YXJ0IE9wZW5EUyB1c2luZyB0aGUgZGVmYXVsdCBwb3J0cwotCSR7T1BFTkRTX0hPTUV9L3NldHVwIFwKKyAgICAjIENvbmZpZ3VyZSBhbmQgc3RhcnQgT3BlbkRTIHVzaW5nIHRoZSBkZWZhdWx0IHBvcnRzCisgICAgJHtPUEVORFNfSE9NRX0vc2V0dXAgXAogICAgIC1pIFwKICAgICAtdiBcCiAgICAgLW4gXApAQCAtMzQsMzcgKzM0LDM3IEBACiAgICAgLVcgY2hhbmdlaXQgXAogICAgIC1OIHMxYXMKIAotCSR7UzFBU19IT01FfS9iaW4vYXNhZG1pbiBzdGFydC1kYXRhYmFzZQotCSR7UzFBU19IT01FfS9iaW4vYXNhZG1pbiBzdGFydC1kb21haW4KLQljZCAke0FQU19IT01FfS9kZXZ0ZXN0cy9zZWN1cml0eQorICAgICR7UzFBU19IT01FfS9iaW4vYXNhZG1pbiBzdGFydC1kYXRhYmFzZQorICAgICR7UzFBU19IT01FfS9iaW4vYXNhZG1pbiBzdGFydC1kb21haW4KKyAgICBjZCAke0FQU19IT01FfS9kZXZ0ZXN0cy9zZWN1cml0eQogCi0JYW50ICR7VEFSR0VUfSB8IHRlZSAke1RFU1RfUlVOX0xPR30KKyAgICBhbnQgJHtUQVJHRVR9IHwgdGVlICR7VEVTVF9SVU5fTE9HfQogCi0JJHtTMUFTX0hPTUV9L2Jpbi9hc2FkbWluIHN0b3AtZG9tYWluCi0JJHtTMUFTX0hPTUV9L2Jpbi9hc2FkbWluIHN0b3AtZGF0YWJhc2UKLQkke09QRU5EU19IT01FfS9iaW4vc3RvcC1kcyBcCisgICAgJHtTMUFTX0hPTUV9L2Jpbi9hc2FkbWluIHN0b3AtZG9tYWluCisgICAgJHtTMUFTX0hPTUV9L2Jpbi9hc2FkbWluIHN0b3AtZGF0YWJhc2UKKyAgICAke09QRU5EU19IT01FfS9iaW4vc3RvcC1kcyBcCiAgICAgLXAgNDQ0NCBcCiAgICAgLUQgImNuPURpcmVjdG9yeSBNYW5hZ2VyIiBcCiAgICAgLXcgZG1hbmFnZXIgXAogICAgIC1QICR7T1BFTkRTX0hPTUV9L2NvbmZpZy9hZG1pbi10cnVzdHN0b3JlIFwKICAgICAtVSAke09QRU5EU19IT01FfS9jb25maWcvYWRtaW4ta2V5c3RvcmUucGluCiAKLQkjZWdyZXAgJ0ZBSUxFRD0gKjAnICR7VEVTVF9SVU5fTE9HfQotCSNlZ3JlcCAnRElEIE5PVCBSVU49ICowJyAke1RFU1RfUlVOX0xPR30KLQljZCAtCisgICAgI2VncmVwICdGQUlMRUQ9ICowJyAke1RFU1RfUlVOX0xPR30KKyAgICAjZWdyZXAgJ0RJRCBOT1QgUlVOPSAqMCcgJHtURVNUX1JVTl9MT0d9CisgICAgY2QgLQogfQogCiBnZXRfdGVzdF90YXJnZXQoKXsKLQljYXNlICQxIGluCi0JCXNlY3VyaXR5X2FsbCApCi0JCQlUQVJHRVQ9YWxsCi0JCQlleHBvcnQgVEFSR0VUOzsKLQllc2FjCisgICAgY2FzZSAkMSBpbgorICAgICAgICBzZWN1cml0eV9hbGwgKQorICAgICAgICAgICAgVEFSR0VUPWFsbAorICAgICAgICAgICAgZXhwb3J0IFRBUkdFVDs7CisgICAgZXNhYwogfQogCiBtZXJnZV9yZXN1bHRfZmlsZXMoKXsKLQljYXQgJHtBUFNfSE9NRX0vdGVzdF9yZXN1bHRzVmFsaWQueG1sICR7QVBTX0hPTUV9L3NlY3VyaXR5LWd0ZXN0LXJlc3VsdHMueG1sID4gJHtBUFNfSE9NRX0vdGVtcC54bWwKLQltdiAke0FQU19IT01FfS90ZW1wLnhtbCAke0FQU19IT01FfS90ZXN0X3Jlc3VsdHNWYWxpZC54bWwKKyAgICBjYXQgJHtBUFNfSE9NRX0vdGVzdF9yZXN1bHRzVmFsaWQueG1sICR7QVBTX0hPTUV9L3NlY3VyaXR5LWd0ZXN0LXJlc3VsdHMueG1sID4gJHtBUFNfSE9NRX0vdGVtcC54bWwKKyAgICBtdiAke0FQU19IT01FfS90ZW1wLnhtbCAke0FQU19IT01FfS90ZXN0X3Jlc3VsdHNWYWxpZC54bWwKIH0KIAogcnVuX3Rlc3RfaWQoKXsKQEAgLTczLDE5ICs3MywxOSBAQAogICB1bnppcCAtbyBvcGVuZGotNC4xLjEwLnppcAogICBleHBvcnQgT1BFTkRTX0hPTUU9JHtQV0R9L29wZW5kagogCi0JdW56aXBfdGVzdF9yZXNvdXJjZXMgJHtXT1JLU1BBQ0V9L2J1bmRsZXMvZ2xhc3NmaXNoLnppcAotCWNkIGBkaXJuYW1lICR7MH1gCi0JdGVzdF9pbml0Ci0JZ2V0X3Rlc3RfdGFyZ2V0ICR7MX0KLQl0ZXN0X3J1bgotCW1lcmdlX3Jlc3VsdF9maWxlcwotCWNoZWNrX3N1Y2Nlc3NmdWxfcnVuCisgICAgdW56aXBfdGVzdF9yZXNvdXJjZXMgJHtXT1JLU1BBQ0V9L2J1bmRsZXMvZ2xhc3NmaXNoLnppcAorICAgIGNkIGBkaXJuYW1lICR7MH1gCisgICAgdGVzdF9pbml0CisgICAgZ2V0X3Rlc3RfdGFyZ2V0ICR7MX0KKyAgICB0ZXN0X3J1bgorICAgIG1lcmdlX3Jlc3VsdF9maWxlcworICAgIGNoZWNrX3N1Y2Nlc3NmdWxfcnVuCiAgIGdlbmVyYXRlX2p1bml0X3JlcG9ydCAkezF9CiAgIGNoYW5nZV9qdW5pdF9yZXBvcnRfY2xhc3NfbmFtZXMKIH0KIAogbGlzdF90ZXN0X2lkcygpewotCWVjaG8gc2VjdXJpdHlfYWxsCisgICAgZWNobyBzZWN1cml0eV9hbGwKIH0KIAogT1BUPSR7MX0KQEAgLTkzLDkgKzkzLDkgQEAKIHNvdXJjZSBgZGlybmFtZSAkezB9YC8uLi8uLi8uLi9jb21tb25fdGVzdC5zaAogCiBjYXNlICR7T1BUfSBpbgotCWxpc3RfdGVzdF9pZHMgKQotCQlsaXN0X3Rlc3RfaWRzOzsKLQlydW5fdGVzdF9pZCApCi0JCXRyYXAgImNvcHlfdGVzdF9hcnRpZmFjdHMgJHtURVNUX0lEfSIgRVhJVAotCQlydW5fdGVzdF9pZCAke1RFU1RfSUR9IDs7CisgICAgbGlzdF90ZXN0X2lkcyApCisgICAgICAgIGxpc3RfdGVzdF9pZHM7OworICAgIHJ1bl90ZXN0X2lkICkKKyAgICAgICAgdHJhcCAiY29weV90ZXN0X2FydGlmYWN0cyAke1RFU1RfSUR9IiBFWElUCisgICAgICAgIHJ1bl90ZXN0X2lkICR7VEVTVF9JRH0gOzsKIGVzYWMKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NhbWVFamJOYW1lL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zYW1lRWpiTmFtZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDljY2ZjMzIuLjI3YWIyZmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NhbWVFamJOYW1lL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2FtZUVqYk5hbWUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic2VjdXJpdHktc2FtZUVqYk5hbWUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zYW1lRWpiTmFtZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zYW1lRWpiTmFtZS9idWlsZC54bWwKaW5kZXggZGE2NDY3My4uMzE2NWUxZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2FtZUVqYk5hbWUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NhbWVFamJOYW1lL2J1aWxkLnhtbApAQCAtNjUsNyArNjUsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgotICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPiAKKyAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KIAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2UtZWpiamFyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KQEAgLTgyLDIzICs4MiwyMyBAQAogCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1hcHBjbGllbnRqYXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5qYXIiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5qYXIiCiAgICAgICAgICAgICAgICAgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgICAgdmFsdWU9ImNvbS9zdW4vKiovY2xpZW50LyouY2xhc3MsY29tL3N1bi8qKi9lamIvSGVsbG8uY2xhc3MsY29tL3N1bi8qKi9lamIyL0hlbGxvLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAotICAgICAgICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIvPiAKKyAgICAgICAgPGNvcHkgZmlsZT0iJHtzdW4tYXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiPgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgogICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Iioud2FyIi8+CiAgICAgICAgICAgICA8L2ZpbGVzZXQ+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ij4KLQkgICAgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgorICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiAgICAgICAgICAgICA8L2ZpbGVzZXQ+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LkFQU19IT01FfSIgaW5jbHVkZXM9ImxpYi9yZXBvcnRlci5qYXIiLz4KLSAgICAgICAgPC9qYXI+ICAgCisgICAgICAgIDwvamFyPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NhbWVFamJOYW1lL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NhbWVFamJOYW1lL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBhMGMyZTQzLi4yZGMyNTQwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zYW1lRWpiTmFtZS9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2FtZUVqYk5hbWUvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMywyOSArMzMsMjkgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gdGVzdFN1aXRlICsgIiBlamIxOiByb2xlc0FsbG93ZWQxIjsKICAgICAgICAgICAgIGhlbGxvMS5yb2xlc0FsbG93ZWQxKCJTdW4iKTsKLSAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LlBBU1MpOyAgCisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5QQVNTKTsKIAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IHRlc3RTdWl0ZSArICIgZWpiMTogcm9sZXNBbGxvd2VkMiI7CiAgICAgICAgICAgICAgICAgaGVsbG8xLnJvbGVzQWxsb3dlZDIoIlN1biIpOwotICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LkZBSUwpOyAgCisgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeHBlY3RlZCBmYWlsdXJlOiAiICsgZSk7Ci0gICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuUEFTUyk7ICAKKyAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IHRlc3RTdWl0ZSArICIgZWpiMjogcm9sZXNBbGxvd2VkMSI7CiAgICAgICAgICAgICAgICAgaGVsbG8yLnJvbGVzQWxsb3dlZDEoIkphdmEiKTsKLSAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5GQUlMKTsgIAorICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhwZWN0ZWQgZmFpbHVyZTogIiArIGUpOwotICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LlBBU1MpOyAgCisgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gdGVzdFN1aXRlICsgIiBlamIyOiByb2xlc0FsbG93ZWQyIjsKICAgICAgICAgICAgIGhlbGxvMi5yb2xlc0FsbG93ZWQyKCJKYXZhIik7Ci0gICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbiwgc3RhdC5QQVNTKTsgIAorICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb24sIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uLCBzdGF0LkZBSUwpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2FtZUVqYk5hbWUvZWpiL0hlbGxvLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zYW1lRWpiTmFtZS9lamIvSGVsbG8uamF2YQppbmRleCAxZWJhZTM2Li5iM2M5YjY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zYW1lRWpiTmFtZS9lamIvSGVsbG8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zYW1lRWpiTmFtZS9lamIvSGVsbG8uamF2YQpAQCAtMTgsNiArMTgsNiBAQAogCiBwdWJsaWMgaW50ZXJmYWNlIEhlbGxvIHsKICAgICBwdWJsaWMgU3RyaW5nIHJvbGVzQWxsb3dlZDEoU3RyaW5nIHdobyk7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIHJvbGVzQWxsb3dlZDIoU3RyaW5nIHdobyk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zYW1lRWpiTmFtZS9lamIvSGVsbG9FamIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NhbWVFamJOYW1lL2VqYi9IZWxsb0VqYi5qYXZhCmluZGV4IGE0N2U0ZmMuLjNkMDM0N2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NhbWVFamJOYW1lL2VqYi9IZWxsb0VqYi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NhbWVFamJOYW1lL2VqYi9IZWxsb0VqYi5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiAgICAgcHVibGljIFN0cmluZyByb2xlc0FsbG93ZWQxKFN0cmluZyB3aG8pIHsKICAgICAgICAgcmV0dXJuICJIZWxsbyByb2xlc0FsbG93ZWQxLCAiICsgd2hvOwogICAgIH0KLSAgICAKKwogICAgIEBSb2xlc0FsbG93ZWQodmFsdWU9eyJlamJ1c2VyIn0pCiAgICAgcHVibGljIFN0cmluZyByb2xlc0FsbG93ZWQyKFN0cmluZyB3aG8pIHsKICAgICAgICAgcmV0dXJuICJIZWxsbyByb2xlc0FsbG93ZWQyLCAiICsgd2hvOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2FtZUVqYk5hbWUvZWpiMi9IZWxsby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2FtZUVqYk5hbWUvZWpiMi9IZWxsby5qYXZhCmluZGV4IDIwMjg0ZmUuLjM0YzgwZmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NhbWVFamJOYW1lL2VqYjIvSGVsbG8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zYW1lRWpiTmFtZS9lamIyL0hlbGxvLmphdmEKQEAgLTE4LDYgKzE4LDYgQEAKIAogcHVibGljIGludGVyZmFjZSBIZWxsbyB7CiAgICAgcHVibGljIFN0cmluZyByb2xlc0FsbG93ZWQxKFN0cmluZyB3aG8pOwotICAgIAorCiAgICAgcHVibGljIFN0cmluZyByb2xlc0FsbG93ZWQyKFN0cmluZyB3aG8pOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2FtZUVqYk5hbWUvZWpiMi9IZWxsb0VqYi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2FtZUVqYk5hbWUvZWpiMi9IZWxsb0VqYi5qYXZhCmluZGV4IDVhNWM0MmUuLjI5NDkzNWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NhbWVFamJOYW1lL2VqYjIvSGVsbG9FamIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zYW1lRWpiTmFtZS9lamIyL0hlbGxvRWpiLmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIHJvbGVzQWxsb3dlZDEoU3RyaW5nIHdobykgewogICAgICAgICByZXR1cm4gIkhlbGxvMiByb2xlc0FsbG93ZWQxLCAiICsgd2hvOwogICAgIH0KLSAgICAKKwogICAgIEBSb2xlc0FsbG93ZWQodmFsdWU9eyJqYXZhZWUifSkKICAgICBwdWJsaWMgU3RyaW5nIHJvbGVzQWxsb3dlZDIoU3RyaW5nIHdobykgewogICAgICAgICByZXR1cm4gIkhlbGxvMiByb2xlc0FsbG93ZWQyLCAiICsgd2hvOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2Z1bC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2Z1bC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGQ4ZDEwMzQuLmM4Zjk1ODEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NmdWwvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zZnVsL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InNlY3VyaXR5Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpAQCAtMjYsNCArMjYsNCBAQAogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJzdGF0ZWZ1bExvZ2luQmVhbiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJzdGF0ZWZ1bExvZ2luQmVhbiIvPiAgICAgICAgXHUwMDIwCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zZnVsL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NmdWwvYnVpbGQueG1sCmluZGV4IDI5OWRiNjUuLmE3ZGQ5YjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NmdWwvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NmdWwvYnVpbGQueG1sCkBAIC0zMyw3ICszMyw3IEBACiAgICAmY29tbW9uUnVuOwogICAgJnRlc3RQcm9wZXJ0aWVzOwogICAgJmNvbW1vblNlY3VyaXR5OwotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLCBjcmVhdGUtdXNlciwgZGVwbG95LCBydW4sIHVuZGVwbG95LCBkZWxldGUtdXNlciIvPgogCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtNTEsNyArNTEsNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci08IS0tCTxwcm9wZXJ0eSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgdmFsdWU9IioqLypIb21lKi5jbGFzcywqKi8qQmVhbiouY2xhc3MsKiovKkRhdGEqLmNsYXNzLCouZGJzY2hlbWEiLz4KKzwhLS0gICAgPHByb3BlcnR5IG5hbWU9ImVqYmphci5jbGFzc2VzIiB2YWx1ZT0iKiovKkhvbWUqLmNsYXNzLCoqLypCZWFuKi5jbGFzcywqKi8qRGF0YSouY2xhc3MsKi5kYnNjaGVtYSIvPgogLS0+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2Z1bC9jbGllbnQvU2hvcHBpbmdDYXJ0Q2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zZnVsL2NsaWVudC9TaG9wcGluZ0NhcnRDbGllbnQuamF2YQppbmRleCA4YWIxOGQ0Li45MDVlOWZjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zZnVsL2NsaWVudC9TaG9wcGluZ0NhcnRDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zZnVsL2NsaWVudC9TaG9wcGluZ0NhcnRDbGllbnQuamF2YQpAQCAtMzgsMzEgKzM4LDMxIEBACiAgICAgICAgIFNob3BwaW5nQ2FydENsaWVudCBjbGllbnQgPSBuZXcgU2hvcHBpbmdDYXJ0Q2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFNob3BwaW5nQ2FydENsaWVudChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIC8vc3VwZXIoYXJncyk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBkb1Rlc3QoKSB7Ci0gICAgICAgIAotCVNob3BwaW5nQ2FydFJlbW90ZSBocj1udWxsOworCisgICAgU2hvcHBpbmdDYXJ0UmVtb3RlIGhyPW51bGw7CiAgICAgICAgIFN0cmluZyByZXM9bnVsbDsKICAgICAgICAgQ29udGV4dCBpYyA9IG51bGw7CiAgICAgICAgIExvZ2luQ29udGV4dCBsYz1udWxsOwogICAgICAgICBTaG9wcGluZ0NhcnRIb21lIGhvbWU9bnVsbDsKICAgICAgICAgU3RyaW5nIHRlc3RJZCA9ICJTZWM6OlN0YXRlZnVsIExvZ2luIEJlYW4iOwotICAgIAl0cnkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiU2VjdXJpdHk6OlN0YXRlZnVsZSBMb2dpbiBCZWFuIik7Ci0JICAgIGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgICAgICAvLyBjcmVhdGUgRUpCIHVzaW5nIGZhY3RvcnkgZnJvbSBjb250YWluZXIgCisgICAgICAgIGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgICAgICAvLyBjcmVhdGUgRUpCIHVzaW5nIGZhY3RvcnkgZnJvbSBjb250YWluZXIKICAgICAgICAgICAgIGphdmEubGFuZy5PYmplY3Qgb2JqcmVmID0gaWMubG9va3VwKCJzdGF0ZWZ1bExvZ2luQmVhbiIpOwotCQkKLQkgICAgU3lzdGVtLmVyci5wcmludGxuKCJMb29rZWQgdXAgaG9tZSEhIik7Ci0JCQotCSAgICBob21lID0gKFNob3BwaW5nQ2FydEhvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KAotCQkJCQkgICBvYmpyZWYsIFNob3BwaW5nQ2FydEhvbWUuY2xhc3MpOwotCSAgICBTeXN0ZW0uZXJyLnByaW50bG4oIk5hcnJvd2VkIGhvbWUhISIpOwotCQkJCQorCisgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTG9va2VkIHVwIGhvbWUhISIpOworCisgICAgICAgIGhvbWUgPSAoU2hvcHBpbmdDYXJ0SG9tZSlQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3coCisgICAgICAgICAgICAgICAgICAgICAgIG9ianJlZiwgU2hvcHBpbmdDYXJ0SG9tZS5jbGFzcyk7CisgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTmFycm93ZWQgaG9tZSEhIik7CisKICAgICAgICAgICAgIGhyID0gaG9tZS5jcmVhdGUoIkxpekh1cmxleSIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgdGhlIEVKQiEhIik7CiAKQEAgLTEwMiwxNSArMTAyLDE1IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNob3BwaW5nIENhcnQ6U3RhdGVmdWxMb2dpbkJlYW4gVGVzdCBGYWlsZWQiKTsKICAgICAgICAgICAgIFN5c3RlbS5leGl0KC0xKTsKLQl9IGZpbmFsbHkgeworICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgICAgICB9CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2hvcHBpbmdDYXJ0OlN0YXRlZnVsTG9naW5CZWFuIFRlc3QgUGFzc2VkIik7CiAgICAgICAgIHJldHVybiByZXM7Ci0gICAgICAgIAorCiAgICAgfQogCi0gICAgCisKICAgICBwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBoZWxsb1N0ciA9ICJIZWxsbyBTaG9wcGluZ0NhcnQhISEiOwogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zZnVsL3Nob3BwaW5nL1Nob3BwaW5nQ2FydEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NmdWwvc2hvcHBpbmcvU2hvcHBpbmdDYXJ0QmVhbi5qYXZhCmluZGV4IDIxNWQzMjQuLmM3YjliOTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NmdWwvc2hvcHBpbmcvU2hvcHBpbmdDYXJ0QmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NmdWwvc2hvcHBpbmcvU2hvcHBpbmdDYXJ0QmVhbi5qYXZhCkBAIC0zNSwyNiArMzUsMjYgQEAKICAqLwogCiBwdWJsaWMgY2xhc3MgU2hvcHBpbmdDYXJ0QmVhbiBpbXBsZW1lbnRzIFNlc3Npb25CZWFuIHsKLSAgICAKKwogICAgIHByaXZhdGUgU3RyaW5nIHNob3BwZXIgPSAiYW5vbnltb3VzIjsKICAgICBwcml2YXRlIFN0cmluZyBwcmluY2lwYWwgPSAiaGFycHJlZXQiOwogICAgIHByaXZhdGUgaW50IHRvdGFsUHJpY2UgPSAwOwotICAgIAorCiAgICAgcHJpdmF0ZSBpbnQgdG90YWxJdGVtcyA9IDA7Ci0gICAgCisKICAgICBwcml2YXRlIFZlY3RvciBpdGVtczsKLSAgICAKKwogICAgIHByaXZhdGUgVmVjdG9yIGl0ZW1QcmljZTsKIAogICAgIHByaXZhdGUgU2Vzc2lvbkNvbnRleHQgc2MgPSBudWxsOwotICAgIAorCiAgICAgLyoqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgU2hvcHBpbmdFSkIgKi8KICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoU3RyaW5nIHNob3BwZXJOYW1lKSB7CiAgICAgICAgIHNob3BwZXIgPSBzaG9wcGVyTmFtZTsKICAgICAgICAgaXRlbXMgPSBuZXcgVmVjdG9yKCk7CiAgICAgICAgIGl0ZW1QcmljZSA9IG5ldyBWZWN0b3IoKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBhZGRJdGVtKGphdmEubGFuZy5TdHJpbmcgaXRlbSwgaW50IHByaWNlKSB0aHJvd3MgRUpCRXhjZXB0aW9uLAogICAgICAgICBSZW1vdGVFeGNlcHRpb257CiAgICAgICAgIGl0ZW1zLmFkZChpdGVtKTsKQEAgLTY0LDMwICs2NCwzMCBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBTaG9wcGluZyBDYXJ0OiBTaG9wcGVyICIrIHNob3BwZXIgKyIgaGFzIGJvdWdodCAiCiAgICAgICAgICAgICArIGl0ZW0gKyIgZm9yIHByaWNlID0iKyBwcmljZSArIiAuVG90YWwgSXRlbXMgPSAiK3RvdGFsSXRlbXMgKwogICAgICAgICAgICAgIiAuVG90YWxQcmljZSA9ICIgKyB0b3RhbFByaWNlKTsKLSAgICAgICAgCisKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYWxsZXIgUHJpbmNpcGFsID0gIitzYy5nZXRDYWxsZXJQcmluY2lwYWwoKSk7CiAgICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIGRlbGV0ZUl0ZW0oamF2YS5sYW5nLlN0cmluZyBpdGVtKSB0aHJvd3MgRUpCRXhjZXB0aW9uLCAKKworICAgIHB1YmxpYyB2b2lkIGRlbGV0ZUl0ZW0oamF2YS5sYW5nLlN0cmluZyBpdGVtKSB0aHJvd3MgRUpCRXhjZXB0aW9uLAogICAgICAgICBSZW1vdGVFeGNlcHRpb257CiAgICAgICAgIGludCBpbmRleCA9IGl0ZW1zLmluZGV4T2YoaXRlbSk7CiAgICAgICAgIGl0ZW1zLnJlbW92ZShpdGVtKTsKICAgICAgICAgSW50ZWdlciBwcmljZSA9IChJbnRlZ2VyKSBpdGVtUHJpY2UuZ2V0KGluZGV4KTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTaG9wcGluZyBDYXJ0OiBSZW1vdmluZyBpdGVtICIrIGl0ZW0gKyIgQHByaWNlICIrIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNob3BwaW5nIENhcnQ6IFJlbW92aW5nIGl0ZW0gIisgaXRlbSArIiBAcHJpY2UgIisKICAgICAgICAgICAgIHByaWNlLmludFZhbHVlKCkpOwogICAgICAgICB0b3RhbFByaWNlIC09IHByaWNlLnNob3J0VmFsdWUoKTsKLSAgICAgICAgaXRlbVByaWNlLnJlbW92ZShpbmRleCk7ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgaXRlbVByaWNlLnJlbW92ZShpbmRleCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFNob3BwaW5nIENhcnQ6IFNob3BwZXIgIisgc2hvcHBlciArIiAgLlRvdGFsIEl0ZW1zID0gIit0b3RhbEl0ZW1zICsKICAgICAgICAgICAgICIgLlRvdGFsUHJpY2UgPSAiICsgdG90YWxQcmljZSk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbGVyIFByaW5jaXBhbCA9ICIrc2MuZ2V0Q2FsbGVyUHJpbmNpcGFsKCkpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBkb3VibGUgZ2V0VG90YWxDb3N0KCkgdGhyb3dzIEVKQkV4Y2VwdGlvbnsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYWxsZXIgUHJpbmNpYWwgPSAiK3NjLmdldENhbGxlclByaW5jaXBhbCgpKTsKIAogICAgICAgICByZXR1cm4gdG90YWxQcmljZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nW10gZ2V0SXRlbXMoKSB0aHJvd3MgRUpCRXhjZXB0aW9uewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxlciBQcmluY2lwYWwgPSAiK3NjLmdldENhbGxlclByaW5jaXBhbCgpKTsKIApAQCAtMTAwLDI3ICsxMDAsMjcgQEAKICAgICAgICAgcmV0dXJuIGl0ZW1OYW1lczsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBzYXZlQXNRdW90ZSgpIHsgCisgICAgcHVibGljIHZvaWQgc2F2ZUFzUXVvdGUoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbGVyIFByaW5jaXBhbCA9ICIrc2MuZ2V0Q2FsbGVyUHJpbmNpcGFsKCkpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNob3BwaW5nQ2FydCBlamJBY3RpdmF0ZSIpOwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNob3BwaW5nQ2FydCBlamJQYXNzaXZhdGUiKTsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpICB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2hvcHBpbmdDYXJ0IGVqYlJlbW92ZSIpOwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQgc2Vzc2lvbkNvbnRleHQpIHsKICAgICAgICAgc2MgPSBzZXNzaW9uQ29udGV4dDsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NmdWwvc2hvcHBpbmcvU2hvcHBpbmdDYXJ0SG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2Z1bC9zaG9wcGluZy9TaG9wcGluZ0NhcnRIb21lLmphdmEKaW5kZXggOWQ0NGM4Mi4uYWZiZTQ5ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2Z1bC9zaG9wcGluZy9TaG9wcGluZ0NhcnRIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2Z1bC9zaG9wcGluZy9TaG9wcGluZ0NhcnRIb21lLmphdmEKQEAgLTI4LDggKzI4LDggQEAKICAqIEBhdXRob3IgIGhzaW5naAogICovCiBwdWJsaWMgaW50ZXJmYWNlIFNob3BwaW5nQ2FydEhvbWUgZXh0ZW5kcyBFSkJIb21lewotICAgIAotICAgIHB1YmxpYyBTaG9wcGluZ0NhcnRSZW1vdGUgY3JlYXRlKGphdmEubGFuZy5TdHJpbmcgc2hvcHBlck5hbWUpIAorCisgICAgcHVibGljIFNob3BwaW5nQ2FydFJlbW90ZSBjcmVhdGUoamF2YS5sYW5nLlN0cmluZyBzaG9wcGVyTmFtZSkKICAgICAgICAgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbiwgamFrYXJ0YS5lamIuQ3JlYXRlRXhjZXB0aW9uOwotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zZnVsL3Nob3BwaW5nL1Nob3BwaW5nQ2FydFJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2Z1bC9zaG9wcGluZy9TaG9wcGluZ0NhcnRSZW1vdGUuamF2YQppbmRleCBiYjMyNGQxLi5kN2Q1ZTM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zZnVsL3Nob3BwaW5nL1Nob3BwaW5nQ2FydFJlbW90ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NmdWwvc2hvcHBpbmcvU2hvcHBpbmdDYXJ0UmVtb3RlLmphdmEKQEAgLTIzLDE4ICsyMywxOCBAQAogcGFja2FnZSBzaG9wcGluZzsKIGltcG9ydCBqYWthcnRhLmVqYi5FSkJPYmplY3Q7CiAvKioKLSAqIFNob3BwaW5nIENhcnQgU3RhdGVmdWwgU2Vzc2lvbiBCZWFuLiBKdXN0IHRlc3RzIC1EajJlZWxvZ2luLm5hbWUgCisgKiBTaG9wcGluZyBDYXJ0IFN0YXRlZnVsIFNlc3Npb24gQmVhbi4gSnVzdCB0ZXN0cyAtRGoyZWVsb2dpbi5uYW1lCiAgKiAgLURqMmVlbG9naW4ucGFzc3dvcmQgc3lzdGVtIHByb3BlcnRpZXMuCiAgKiBAYXV0aG9yICBoc2luZ2gKICAqLwogcHVibGljIGludGVyZmFjZSBTaG9wcGluZ0NhcnRSZW1vdGUgZXh0ZW5kcyBFSkJPYmplY3QgewotICAgICAgICAgICAgCisKICAgICBwdWJsaWMgdm9pZCBhZGRJdGVtKGphdmEubGFuZy5TdHJpbmcgaXRlbSwgaW50IHByaWNlKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgZGVsZXRlSXRlbShqYXZhLmxhbmcuU3RyaW5nIGl0ZW0pIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247Ci0gICAgICAgCisKICAgICBwdWJsaWMgZG91YmxlIGdldFRvdGFsQ29zdCgpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgamF2YS5sYW5nLlN0cmluZ1tdIGdldEl0ZW1zKCkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKICAgICBwdWJsaWMgdm9pZCBzYXZlQXNRdW90ZSgpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zaW1wbGUtcGVyZi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2ltcGxlLXBlcmYvYnVpbGQucHJvcGVydGllcwppbmRleCBhZmJlZTQ5Li5mNTM1YTk5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zaW1wbGUtcGVyZi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NpbXBsZS1wZXJmL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDI4ICsxNSwyOCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic2VjLXNzbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tY29udmVydGVyIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1jb252ZXJ0ZXIiLz4gICAgICAgIFx1MDAyMAogCi08cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIAotCXZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiAKLQl2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIlx1MDAyMAorICAgIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiXHUwMDIwCisgICAgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4gICAgICAgIFx1MDAyMAogCi08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJjb20uc3VuLnMxcGVxZS5zZWN1cml0eS5zc2wuY29udmVydGVyLmNsaWVudC5Db252ZXJ0ZXJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iY29tLnN1bi5zMXBlcWUuc2VjdXJpdHkuc3NsLmNvbnZlcnRlci5jbGllbnQuQ29udmVydGVyQ2xpZW50Ii8+CiAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogCiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogCkBAIC00NSw4ICs0NSw4IEBACiA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KIDwhLS0KIDxwcm9wZXJ0eSBuYW1lPSJqbmRpLm5hbWUiIHZhbHVlPSJTU0xjb252ZXJ0ZXIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJwcm92aWRlci51cmwiIHZhbHVlPSJpaW9wOi8vbG9jYWxob3N0OiR7b3JiLnBvcnR9Ii8+IAotPHByb3BlcnR5IG5hbWU9ImN0eGZhY3RvcnkiIHZhbHVlPSJjb20uc3VuLmVudGVycHJpc2UubmFtaW5nLlNlcmlhbEluaXRDb250ZXh0RmFjdG9yeSIvPiAKLTxwcm9wZXJ0eSBuYW1lPSJjdHhmYWN0b3J5IiB2YWx1ZT0iY29tLnN1bi5qbmRpLmNvc25hbWluZy5DTkN0eEZhY3RvcnkiLz4gCis8cHJvcGVydHkgbmFtZT0icHJvdmlkZXIudXJsIiB2YWx1ZT0iaWlvcDovL2xvY2FsaG9zdDoke29yYi5wb3J0fSIvPlx1MDAyMAorPHByb3BlcnR5IG5hbWU9ImN0eGZhY3RvcnkiIHZhbHVlPSJjb20uc3VuLmVudGVycHJpc2UubmFtaW5nLlNlcmlhbEluaXRDb250ZXh0RmFjdG9yeSIvPlx1MDAyMAorPHByb3BlcnR5IG5hbWU9ImN0eGZhY3RvcnkiIHZhbHVlPSJjb20uc3VuLmpuZGkuY29zbmFtaW5nLkNOQ3R4RmFjdG9yeSIvPlx1MDAyMAogLS0+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NpbXBsZS1wZXJmL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NpbXBsZS1wZXJmL2J1aWxkLnhtbAppbmRleCBlMzZhYWZmLi42NzExMDUxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zaW1wbGUtcGVyZi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2ltcGxlLXBlcmYvYnVpbGQueG1sCkBAIC0zNyw3ICszNyw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ5LDE1ICs0OSwxNSBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWxvY2FsIi8+IAotCTxhbnRjYWxsIHRhcmdldD0icnVuLXN0YW5kYWxvbmUtY2xpZW50Ii8+CisgICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1sb2NhbCIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLXN0YW5kYWxvbmUtY2xpZW50Ii8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bmNsaWVudC1sb2NhbCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtNjUsOCArNjUsOCBAQAogICAgICAgICA8ZW52IGtleT0iVk1BUkdTIiB2YWx1ZT0iIC1EamF2YXgubmV0LnNzbC5rZXlTdG9yZT0ke2FkbWluLmRvbWFpbi5kaXJ9LyR7YWRtaW4uZG9tYWlufS9jb25maWcva2V5c3RvcmUuamtzIC1EamF2YXgubmV0LnNzbC50cnVzdFN0b3JlPSR7YWRtaW4uZG9tYWluLmRpcn0vJHthZG1pbi5kb21haW59L2NvbmZpZy9jYWNlcnRzLmprcyIgLz4KICAgICAgICAgPGFyZyB2YWx1ZT0iLWNsaWVudCIgLz4KICAgICAgICAgPGFyZyB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHBDbGllbnQuamFyIi8+Ci0gIAk8IS0tIGR1bW15IHVzZXIgYWRkZWQgYXMgYXBwY2xpZW50IHRocm93aW5nIGxvZ2luIHdpbmRvdyAtLT4JCi0JPGFyZyB2YWx1ZT0iLXRleHRhdXRoIi8+CisgICAgICA8IS0tIGR1bW15IHVzZXIgYWRkZWQgYXMgYXBwY2xpZW50IHRocm93aW5nIGxvZ2luIHdpbmRvdyAtLT4KKyAgICA8YXJnIHZhbHVlPSItdGV4dGF1dGgiLz4KICAgICAgICAgPGFyZyB2YWx1ZT0iLXVzZXIiLz4KICAgICAgICAgPGFyZyB2YWx1ZT0idGVtcCIvPgogICAgICAgICA8YXJnIHZhbHVlPSItcGFzc3dvcmQiLz4KQEAgLTc1LDcgKzc1LDcgQEAKICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KICAgICA8IS0tIFRhcmdldCB0byBydW4gdGhlIHN0YW5kYWxvbmUgY2xpZW50IHdpdGhvdXQgQUNDIC0tPgpAQCAtOTMsNyArOTMsNyBAQAogICAgICAgICA8anZtYXJnIHZhbHVlPSItRG9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQ9JHtvcmIucG9ydH0iLz4KICAgICAgICAgPGp2bWFyZyB2YWx1ZT0iLURqYXZheC5uZXQuc3NsLmtleVN0b3JlPSR7YWRtaW4uZG9tYWluLmRpcn0vJHthZG1pbi5kb21haW59L2NvbmZpZy9rZXlzdG9yZS5qa3MiLz4KICAgICAgICAgPGp2bWFyZyB2YWx1ZT0iLURqYXZheC5uZXQuc3NsLnRydXN0U3RvcmU9JHthZG1pbi5kb21haW4uZGlyfS8ke2FkbWluLmRvbWFpbn0vY29uZmlnL2NhY2VydHMuamtzIi8+Ci0JPGp2bWFyZyB2YWx1ZT0iLURjb20uc3VuLkNPUkJBLmNvbm5lY3Rpb24uT1JCU29ja2V0RmFjdG9yeUNsYXNzPWNvbS5zdW4uZW50ZXJwcmlzZS5paW9wLklJT1BTU0xTb2NrZXRGYWN0b3J5Ii8+CisgICAgPGp2bWFyZyB2YWx1ZT0iLURjb20uc3VuLkNPUkJBLmNvbm5lY3Rpb24uT1JCU29ja2V0RmFjdG9yeUNsYXNzPWNvbS5zdW4uZW50ZXJwcmlzZS5paW9wLklJT1BTU0xTb2NrZXRGYWN0b3J5Ii8+CiAgICAgICAgIDxhcmcgdmFsdWU9IiR7cHJvdmlkZXIudXJsfSIvPgogICAgICAgICA8YXJnIHZhbHVlPSIke2N0eGZhY3Rvcnl9Ii8+CiAgICAgICAgIDxhcmcgdmFsdWU9IiR7am5kaS5uYW1lfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2ltcGxlLXBlcmYvY2xpZW50L0NvbnZlcnRlckNsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2ltcGxlLXBlcmYvY2xpZW50L0NvbnZlcnRlckNsaWVudC5qYXZhCmluZGV4IDIwODY0ZTkuLmU3ZDRjYzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NpbXBsZS1wZXJmL2NsaWVudC9Db252ZXJ0ZXJDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zaW1wbGUtcGVyZi9jbGllbnQvQ29udmVydGVyQ2xpZW50LmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKIAogLyoqCiAgKiBBIHNpbXBsZSBqYXZhIGNsaWVudC4gVGhpcyB1c2VzIHRoZSBzZXJ2aWNlcyBwcm92aWRlZCBieSB0aGUgPGNvZGU+Q29udmVydGVyQmVhbjwvY29kZT4gYW5kCi0gKiBjb252ZXJ0cyAxMDAgVVMgZG9sbGFycyB0byBZZW4gYW5kIDEwMCBZZW4gdG8gRXVyby4gCisgKiBjb252ZXJ0cyAxMDAgVVMgZG9sbGFycyB0byBZZW4gYW5kIDEwMCBZZW4gdG8gRXVyby4KICAqIDxwPkluIHRoaXMgcmVnYXJkLCBpdCBkb2VzIHRoZSBmb2xsb3dpbmcgaW4gb3JkZXIKICAqIDx1bD4KICAqIDxsaT5Mb2NhdGVzIHRoZSBob21lIGludGVyZmFjZSBvZiB0aGUgZW50ZXJwcmlzZSBiZWFuCkBAIC0zNywyMSArMzcsMjEgQEAKICAqIDxicj4KICAqIDxiPkxvY2F0aW5nIHRoZSBob21lIGludGVyZmFjZTo8L2I+CiAgKiA8YmxvY2txdW90ZT48cHJlPgotICoJQ29udGV4dCBpbml0aWFsID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gKglDb250ZXh0IG15RW52ID0gKENvbnRleHQpaW5pdGlhbC5sb29rdXAoImphdmE6Y29tcC9lbnYiKTsKLSAqCU9iamVjdCBvYmpyZWYgPSBteUVudi5sb29rdXAoImVqYi9TaW1wbGVDb252ZXJ0ZXIiKTsKKyAqICAgIENvbnRleHQgaW5pdGlhbCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworICogICAgQ29udGV4dCBteUVudiA9IChDb250ZXh0KWluaXRpYWwubG9va3VwKCJqYXZhOmNvbXAvZW52Iik7CisgKiAgICBPYmplY3Qgb2JqcmVmID0gbXlFbnYubG9va3VwKCJlamIvU2ltcGxlQ29udmVydGVyIik7CiAgKiAgQ29udmVydGVySG9tZSBob21lID0gKENvbnZlcnRlckhvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KG9ianJlZiwgQ29udmVydGVySG9tZS5jbGFzcyk7CiAgKiA8L3ByZT48L2Jsb2NrcXVvdGU+CiAgKiA8YnI+CiAgKiA8Yj5DcmVhdGluZyB0aGUgcmVtb3RlIGludGVyZmFjZTo8L2I+CiAgKiA8YmxvY2txdW90ZT48cHJlPgotICoJQ29udmVydGVyIGN1cnJlbmN5Q29udmVydGVyID0gaG9tZS5jcmVhdGUoKTsKKyAqICAgIENvbnZlcnRlciBjdXJyZW5jeUNvbnZlcnRlciA9IGhvbWUuY3JlYXRlKCk7CiAgKiA8L3ByZT48L2Jsb2NrcXVvdGU+CiAgKiA8YnI+CiAgKiA8Yj5JbnZva2luZyBidXNpbmVzcyBtZXRob2RzOjwvYj4KICAqIDxibG9ja3F1b3RlPjxwcmU+CiAgKiAgQmlnRGVjaW1hbCBwYXJhbSA9IG5ldyBCaWdEZWNpbWFsICgiMTAwLjAwIik7Ci0gKglhbW91bnQgPSBjdXJyZW5jeUNvbnZlcnRlci5kb2xsYXJUb1llbihwYXJhbSk7CisgKiAgICBhbW91bnQgPSBjdXJyZW5jeUNvbnZlcnRlci5kb2xsYXJUb1llbihwYXJhbSk7CiAgKiAgYW1vdW50ID0gY3VycmVuY3lDb252ZXJ0ZXIueWVuVG9FdXJvKHBhcmFtKTsKICAqIDwvcHJlPjwvYmxvY2txdW90ZT4KICAqIDxicj4KQEAgLTY2LDcgKzY2LDcgQEAKIAogcHVibGljIGNsYXNzIENvbnZlcnRlckNsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIENvbnZlcnRlckNsaWVudCgpIHsKQEAgLTgwLDM1ICs4MCwzNSBAQAogICAgICoKICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQlDb252ZXJ0ZXJDbGllbnQgY2xpZW50ID0gbmV3IENvbnZlcnRlckNsaWVudCgpOwotCWNsaWVudC5ydW4oYXJncyk7CisgICAgQ29udmVydGVyQ2xpZW50IGNsaWVudCA9IG5ldyBDb252ZXJ0ZXJDbGllbnQoKTsKKyAgICBjbGllbnQucnVuKGFyZ3MpOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBydW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBTdHJpbmcgdXJsID0gbnVsbDsKLQlTdHJpbmcgdGVzdElkID0gbnVsbDsKKyAgICBTdHJpbmcgdGVzdElkID0gbnVsbDsKICAgICAgICAgU3RyaW5nIGpuZGlOYW1lID0gbnVsbDsKICAgICAgICAgQ29udGV4dCBjb250ZXh0ID0gbnVsbDsKICAgICAgICAgU3RyaW5nIGN0eEZhY3RvcnkgPSBudWxsOwotCWphdmEubGFuZy5PYmplY3Qgb2JqID0gbnVsbDsKKyAgICBqYXZhLmxhbmcuT2JqZWN0IG9iaiA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJTZWN1cml0eTo6U1NMIE9uZSB3YXkgc3NsLiIpOwogCiAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPT0gMykgewogICAgICAgICAgICAgICAgIHVybCA9IGFyZ3NbMF07CiAgICAgICAgICAgICAgICAgY3R4RmFjdG9yeSA9IGFyZ3NbMV07Ci0JCWpuZGlOYW1lID0gYXJnc1syXTsKKyAgICAgICAgam5kaU5hbWUgPSBhcmdzWzJdOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoICh1cmwgPT0gbnVsbCkgfHwgKGN0eEZhY3RvcnkgPT0gbnVsbCkgKSB7Ci0JCXRlc3RJZCA9ICJTZWM6OlNpbXBsZSBQZXJmIENvbnZlcnRlciBTYW1wbGUgQXBwQ2xpZW50IjsKKyAgICAgICAgdGVzdElkID0gIlNlYzo6U2ltcGxlIFBlcmYgQ29udmVydGVyIFNhbXBsZSBBcHBDbGllbnQiOwogICAgICAgICAgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIENvbnRleHQgd2l0aCBkZWZhdWx0IHByb3BlcnRpZXMKICAgICAgICAgICAgICAgICBjb250ZXh0ID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTaW1wbGUgUGVyZiAgVGVzdCBcbiBEZWZhdWx0IENvbnRleHQgSW5pdGlhbGl6ZWQuLi4iKTsKICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgSG9tZSBvYmplY3QKICAgICAgICAgICAgICAgICBvYmogPSBjb250ZXh0Lmxvb2t1cCgiamF2YTpjb21wL2Vudi9lamIvU1NMU2ltcGxlQ29udmVydGVyIik7CiAgICAgICAgICAgICB9IGVsc2UgewotCQl0ZXN0SWQgPSAiU2VjOjpQZXJmIFN0YW5kYWxvbmUtQ2xpZW50IjsKKyAgICAgICAgdGVzdElkID0gIlNlYzo6UGVyZiBTdGFuZGFsb25lLUNsaWVudCI7CiAgICAgICAgICAgICAgICAgUHJvcGVydGllcyBlbnYgPSBuZXcgUHJvcGVydGllcygpOwogICAgICAgICAgICAgICAgIGVudi5wdXQoImphdmEubmFtaW5nLnByb3ZpZGVyLnVybCIsIHVybCk7CiAgICAgICAgICAgICAgICAgZW52LnB1dCgiamF2YS5uYW1pbmcuZmFjdG9yeS5pbml0aWFsIiwgY3R4RmFjdG9yeSk7CkBAIC0xMjYsMjAgKzEyNiwyMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb252ZXJ0ZXJSZW1vdGVIb21lLmNsYXNzKTsKIAogICAgICAgICAgICAgQ29udmVydGVyUmVtb3RlIGN1cnJlbmN5Q29udmVydGVyID0gaG9tZS5jcmVhdGUoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuXG5cbj09PT09PT09PT09QmVnaW5uaW5nIFNpbXBsZSBUZXN0PT09PT1cblxuIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgQmlnRGVjaW1hbCBwYXJhbSA9IG5ldyBCaWdEZWNpbWFsICgiMTAwLjAwIik7Ci0gICAgICAgICAgICBpbnQgdGltZXMgPSAxOyAKKyAgICAgICAgICAgIGludCB0aW1lcyA9IDE7CiAgICAgICAgICAgICB0cnl7Ci0gICAgICAgICAgICAgICAgdGltZXMgPSBJbnRlZ2VyLnBhcnNlSW50KG15dGltZXMpOyAKKyAgICAgICAgICAgICAgICB0aW1lcyA9IEludGVnZXIucGFyc2VJbnQobXl0aW1lcyk7CiAgICAgICAgICAgICB9IGNhdGNoKGphdmEubGFuZy5OdW1iZXJGb3JtYXRFeGNlcHRpb24gbmUpewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGltZXMgaW4gZGVzY3JpcHRvciBkZWNsYXJlZCBpbmNvcnJlY3RseSIpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgQmlnRGVjaW1hbCBhbW91bnQgPSBuZXcgQmlnRGVjaW1hbCgxKTsgCisgICAgICAgICAgICBCaWdEZWNpbWFsIGFtb3VudCA9IG5ldyBCaWdEZWNpbWFsKDEpOwogICAgICAgICAgICAgQmlnRGVjaW1hbCBhbW91bnQyID0gbmV3IEJpZ0RlY2ltYWwoMSk7CiAgICAgICAgICAgICBsb25nIHN0YXJ0dGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGZvcihpbnQgaSA9IDA7IGk8dGltZXM7IGkrKyl7CiAgICAgICAgICAgICAgICAgYW1vdW50ID0gY3VycmVuY3lDb252ZXJ0ZXIuZG9sbGFyVG9ZZW4ocGFyYW0pOwogICAgICAgICAgICAgICAgIGFtb3VudDIgPSBjdXJyZW5jeUNvbnZlcnRlci55ZW5Ub0V1cm8ocGFyYW0pOwpAQCAtMTU1LDcgKzE1NSw3IEBACiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkNhdWdodCBhbiB1bmV4cGVjdGVkIGV4Y2VwdGlvbiEiKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9IGZpbmFsbHkgewotCSAgICBzdGF0LnByaW50U3VtbWFyeSh0ZXN0SWQpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSh0ZXN0SWQpOwogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2ltcGxlLXBlcmYvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2ltcGxlLXBlcmYvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sCmluZGV4IGMwNzY4NWUuLmVlM2VmYTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NpbXBsZS1wZXJmL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zaW1wbGUtcGVyZi9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwKQEAgLTI0LDcgKzI0LDcgQEAKICAgICA8ZW52LWVudHJ5LW5hbWU+dGltZXM8L2Vudi1lbnRyeS1uYW1lPgogICAgIDxlbnYtZW50cnktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9lbnYtZW50cnktdHlwZT4KICAgICA8ZW52LWVudHJ5LXZhbHVlPjUwMDA8L2Vudi1lbnRyeS12YWx1ZT4KLSAgPC9lbnYtZW50cnk+ICAKKyAgPC9lbnYtZW50cnk+CiAgIDxlamItcmVmPgogICAgIDxlamItcmVmLW5hbWU+ZWpiL1NTTFNpbXBsZUNvbnZlcnRlcjwvZWpiLXJlZi1uYW1lPgogICAgIDxlamItcmVmLXR5cGU+U2Vzc2lvbjwvZWpiLXJlZi10eXBlPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2ltcGxlLXBlcmYvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zaW1wbGUtcGVyZi9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbAppbmRleCAyNmIyMTg5Li42NjE0OTkzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zaW1wbGUtcGVyZi9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zaW1wbGUtcGVyZi9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbApAQCAtMjMsNyArMjMsNyBAQAogICAgIDxzbWFsbC1pY29uPjwvc21hbGwtaWNvbj4KICAgICA8bGFyZ2UtaWNvbj48L2xhcmdlLWljb24+CiAgIDwvaWNvbj4KLSAgPGRpc3BsYXktbmFtZT5TU0xDb252ZXJ0ZXJBcHA8L2Rpc3BsYXktbmFtZT4gIAorICA8ZGlzcGxheS1uYW1lPlNTTENvbnZlcnRlckFwcDwvZGlzcGxheS1uYW1lPgogICA8bW9kdWxlPgogICAgIDxqYXZhPnNlYy1zc2wtY29udmVydGVyLWNsaWVudC5qYXI8L2phdmE+CiAgIDwvbW9kdWxlPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2ltcGxlLXBlcmYvZWpiL0NvbnZlcnRlckJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NpbXBsZS1wZXJmL2VqYi9Db252ZXJ0ZXJCZWFuLmphdmEKaW5kZXggMDI3ODNlNC4uMjdlNTI5NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2ltcGxlLXBlcmYvZWpiL0NvbnZlcnRlckJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zaW1wbGUtcGVyZi9lamIvQ29udmVydGVyQmVhbi5qYXZhCkBAIC0zMyw3ICszMyw3IEBACiAgICAgQmlnRGVjaW1hbCB5ZW5SYXRlID0gbmV3IEJpZ0RlY2ltYWwoIjEyMS42MDAwIik7CiAgICAgQmlnRGVjaW1hbCBldXJvUmF0ZSA9IG5ldyBCaWdEZWNpbWFsKCIwLjAwNzciKTsKICAgICBTZXNzaW9uQ29udGV4dCBteXNjID0gbnVsbDsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgbXlDYWxsZXJQcmluY2lwYWwoKXsKICAgICAgICAgcmV0dXJuIG15c2MuZ2V0Q2FsbGVyUHJpbmNpcGFsKCkudG9TdHJpbmcoKTsKICAgICB9CkBAIC00MSw3ICs0MSw3IEBACiAgICAgICogUmV0dXJucyB0aGUgeWVuIHZhbHVlIGZvciBhIGdpdmVuIGRvbGxhciBhbW91bnQuCiAgICAgICogQHBhcmFtIGRvbGxhcnMgZG9sbGFyIGFtb3VudCB0byBiZSBjb252ZXJ0ZWQgdG8geWVuLgogICAgICAqLwotICAgIHB1YmxpYyBCaWdEZWNpbWFsIGRvbGxhclRvWWVuKEJpZ0RlY2ltYWwgZG9sbGFycykgeyAgICAgICAKKyAgICBwdWJsaWMgQmlnRGVjaW1hbCBkb2xsYXJUb1llbihCaWdEZWNpbWFsIGRvbGxhcnMpIHsKICAgICAgICAgQmlnRGVjaW1hbCByZXN1bHQgPSBkb2xsYXJzLm11bHRpcGx5KHllblJhdGUpOwogICAgICAgICByZXR1cm4gcmVzdWx0LnNldFNjYWxlKDIsQmlnRGVjaW1hbC5ST1VORF9VUCk7CiAgICAgfQpAQCAtNzUsNyArNzUsNyBAQAogICAgICAqIExvYWRzIHRoZSBzdGF0ZSBvZiB0aGUgYmVhbiBmcm9tIHNlY29uZGFyeSBzdG9yYWdlLiBSZXF1aXJlZCBieSBFSkIgc3BlYy4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHt9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBLZWVwcyB0aGUgc3RhdGUgb2YgdGhlIGJlYW4gdG8gc2Vjb25kYXJ5IHN0b3JhZ2UuIFJlcXVpcmVkIGJ5IEVKQiBzcGVjLgogICAgICAqLwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2ltcGxlLXBlcmYvZWpiL0NvbnZlcnRlclJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2ltcGxlLXBlcmYvZWpiL0NvbnZlcnRlclJlbW90ZS5qYXZhCmluZGV4IDMwYmU5OTUuLmE4NmZjZDYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NpbXBsZS1wZXJmL2VqYi9Db252ZXJ0ZXJSZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zaW1wbGUtcGVyZi9lamIvQ29udmVydGVyUmVtb3RlLmphdmEKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICAgKiBAcGFyYW0geWVuIHllbiBhbW91bnQgdG8gYmUgY29udmVydGVkIHRvIGV1cm8uCiAgICAgICovCiAgICAgcHVibGljIEJpZ0RlY2ltYWwgeWVuVG9FdXJvKEJpZ0RlY2ltYWwgeWVuKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBteUNhbGxlclByaW5jaXBhbCgpIHRocm93cyBSZW1vdGVFeGNlcHRpb247Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NpbXBsZU11bHRpUm9sZU1hcHBpbmcvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NpbXBsZU11bHRpUm9sZU1hcHBpbmcvYnVpbGQucHJvcGVydGllcwppbmRleCA5NjFkOTNhLi42MTAxMDg3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zaW1wbGVNdWx0aVJvbGVNYXBwaW5nL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2ltcGxlTXVsdGlSb2xlTWFwcGluZy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzZWN1cml0eS1tdWx0aW1hcHBpbmciLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zaW1wbGVNdWx0aVJvbGVNYXBwaW5nL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NpbXBsZU11bHRpUm9sZU1hcHBpbmcvYnVpbGQueG1sCmluZGV4IDYwZWIyMmIuLjM1OTVlNWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NpbXBsZU11bHRpUm9sZU1hcHBpbmcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NpbXBsZU11bHRpUm9sZU1hcHBpbmcvYnVpbGQueG1sCkBAIC0yNSwxOCArMjUsMTggQEAKIF0+CiAKIDxwcm9qZWN0IG5hbWU9InNlY3VyaXR5LW11bHRpbWFwcGluZyIgZGVmYXVsdD0idXNhZ2UiIGJhc2VkaXI9Ii4iPgotICAKKwogICAmY29tbW9uU2V0dXA7CiAgICZjb21tb25CdWlsZDsKICAgJnRlc3Rwcm9wZXJ0aWVzOwogICAmY29tbW9uU2VjdXJpdHk7Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJjbGVhbiwgc2V0dXAsIGJ1aWxkLCBkZXBsb3ksIHJ1biwgdW5kZXBsb3ksIHVuc2V0dXAiLz4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtdXNlci1jb21tb24iPgogICAgICAgPHBhcmFtIG5hbWU9InVzZXIiIHZhbHVlPSJ3ZWJ1c2VyIi8+CkBAIC01MCw3ICs1MCw3IEBACiAgICAgPC9hbnRjYWxsPgogICA8IS0tICA8YW50Y2FsbCB0YXJnZXQ9InJlY29uZmlnLWNvbW1vbiIvPi0tPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJ1bnNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtdXNlci1jb21tb24iPgogICAgICAgPHBhcmFtIG5hbWU9InVzZXIiIHZhbHVlPSJ3ZWJ1c2VyIi8+CkBAIC01OSw3ICs1OSw3IEBACiAgICAgICA8cGFyYW0gbmFtZT0idXNlciIgdmFsdWU9ImJvYmJ5Ii8+CiAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iZWpiIi8+CkBAIC04MSwxMSArODEsMTEgQEAKICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICAtLT4KICAgPC90YXJnZXQ+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgotICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+IAotICAgIAorICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CisKICAgICA8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2UtZWpiamFyLWNvbW1vbiI+CiAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vbm9ud2ViIi8+CiAgICAgICA8cGFyYW0gbmFtZT0iZWpiLmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXIiLz4KQEAgLTk3LDIwICs5NywyMCBAQAogICAgICAgPHBhcmFtIG5hbWU9Indhci5maWxlIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciIvPgogICAgICAgPHBhcmFtIG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogICAgIDwvYW50Y2FsbD4KLSAgICAKKwogICAgIDwhLS0KICAgICA8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2UtYXBwY2xpZW50amFyLWNvbW1vbiI+CiAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vbm9ud2ViIi8+Ci0gICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmphciIgCisgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmphciIKICAgICAgICAgICAgICB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgotICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICB2YWx1ZT0iY29tL3N1bi8qKi9jbGllbnQvKi5jbGFzcyxjb20vc3VuLyoqL2VqYi9IZWxsby5jbGFzcyIvPgogICAgIDwvYW50Y2FsbD4KICAgICAtLT4KLSAgICAKLSAgICA8Y29weSBmaWxlPSIke2FwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4gCi0gICAgPGNvcHkgZmlsZT0iJHtzdW4tYXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4gCi0gICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiPiAKKworICAgIDxjb3B5IGZpbGU9IiR7YXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICAgIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CisgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiPgogICAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgogICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLmphciIvPgogICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLndhciIvPgpAQCAtMTIwLDkgKzEyMCw5IEBACiAgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KICAgICAgIDwvZmlsZXNldD4KICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuQVBTX0hPTUV9L2xpYiIgaW5jbHVkZXM9InJlcG9ydGVyLmphciIvPgotICAgIDwvamFyPiAgIAotICAgIAotICAgIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+IAorICAgIDwvamFyPgorCisgICAgPGNvcHkgZmlsZT0iJHtzdW4tYXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciI+CiAgICAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSI+CiAgICAgICAgIDxpbmNsdWRlIG5hbWU9IiouamFyIi8+CkBAIC0xMzEsMTMgKzEzMSwxMyBAQAogICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSI+CiAgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KICAgICAgIDwvZmlsZXNldD4KLSAgICA8L2phcj4gICAKKyAgICA8L2phcj4KICAgPC90YXJnZXQ+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDwhLS0KICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FQUENMSUVOVH0iPgpAQCAtMTY4LDcgKzE2OCw3IEBACiAgICAgICA8cGFyYW0gbmFtZT0idGVzdGNhc2VpZCIgdmFsdWU9InVzZXItYXV0aC1lamJyb2xlIi8+CiAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJydW53ZWIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8dGFza2RlZiBuYW1lPSJ3ZWJ0ZXN0IiBjbGFzc25hbWU9IiR7d2VidGVzdC5jbGFzc25hbWV9IgogICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHt3ZWJ0ZXN0LmNsYXNzcGF0aH0iIC8+CkBAIC0xOTgsMTEgKzE5OCwxMSBAQAogICAgICAgICAgICAgIHRlc3RDYXNlRGVzY3JpcHRpb249IlRlc3Rpbmcgcm9sZSBtYXBwaW5nIgogICAgICAgICAgICAgIHRlc3RTdHJhdGVneT0iVGVzdGluZyByb2xlIG1hcHBpbmciLz4KICAgPC90YXJnZXQ+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zaW1wbGVNdWx0aVJvbGVNYXBwaW5nL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2ltcGxlTXVsdGlSb2xlTWFwcGluZy9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAppbmRleCA0MGUzZGVjLi4zMTU1NTkzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zaW1wbGVNdWx0aVJvbGVNYXBwaW5nL2Rlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NpbXBsZU11bHRpUm9sZU1hcHBpbmcvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwKQEAgLTI0LDcgKzI0LDcgQEAKICAgICAgIDxlamItbmFtZT5NZXNzYWdlQmVhbjwvZWpiLW5hbWU+CiAgICAgPC9lamI+CiAgIDwvZW50ZXJwcmlzZS1iZWFucz4KLSAgCisKICAgPHNlY3VyaXR5LXJvbGUtbWFwcGluZz4KICAgICA8cm9sZS1uYW1lPmVqYnJvbGU8L3JvbGUtbmFtZT4KICAgICA8cHJpbmNpcGFsLW5hbWU+Ym9iYnk8L3ByaW5jaXBhbC1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2ltcGxlTXVsdGlSb2xlTWFwcGluZy9kZXNjcmlwdG9yL3N1bi13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2ltcGxlTXVsdGlSb2xlTWFwcGluZy9kZXNjcmlwdG9yL3N1bi13ZWIueG1sCmluZGV4IDgzYWMzMWIuLjU2M2VhZjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NpbXBsZU11bHRpUm9sZU1hcHBpbmcvZGVzY3JpcHRvci9zdW4td2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zaW1wbGVNdWx0aVJvbGVNYXBwaW5nL2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwKQEAgLTI5LDEwICsyOSwxMCBAQAogICAgICAgPGRlc2NyaXB0aW9uPk1haW50YWluIGEgb25lLXRvLW9uZSBjb3JyZXNwb25kZW5jZSBiZXR3ZWVuIHN0YXRpYyBjb250ZW50IGFuZCB0aGUgZ2VuZXJhdGVkIHNlcnZsZXQgY2xhc3MnIGphdmEgY29kZTwvZGVzY3JpcHRpb24+CiAgICAgPC9wcm9wZXJ0eT4KICAgPC9qc3AtY29uZmlnPgotICAgIAorCiAgIDxzZWN1cml0eS1yb2xlLW1hcHBpbmc+CiAgICAgPHJvbGUtbmFtZT53ZWJyb2xlPC9yb2xlLW5hbWU+CiAgICAgPGdyb3VwLW5hbWU+d2VidXNlcnM8L2dyb3VwLW5hbWU+CiAgIDwvc2VjdXJpdHktcm9sZS1tYXBwaW5nPgotICAgIAorCiA8L3N1bi13ZWItYXBwPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2ltcGxlTXVsdGlSb2xlTWFwcGluZy9lamIvTWVzc2FnZUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NpbXBsZU11bHRpUm9sZU1hcHBpbmcvZWpiL01lc3NhZ2VCZWFuLmphdmEKaW5kZXggMmNiOTc2Ni4uN2IzM2Q2YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2ltcGxlTXVsdGlSb2xlTWFwcGluZy9lamIvTWVzc2FnZUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zaW1wbGVNdWx0aVJvbGVNYXBwaW5nL2VqYi9NZXNzYWdlQmVhbi5qYXZhCkBAIC0yMywxMCArMjMsMTAgQEAKIEBTdGF0ZWxlc3MKIEBMb2NhbCh7TWVzc2FnZUxvY2FsLmNsYXNzfSkKIHB1YmxpYyBjbGFzcyBNZXNzYWdlQmVhbiBpbXBsZW1lbnRzIE1lc3NhZ2VMb2NhbCB7Ci0gICAgCisKICAgICBAUm9sZXNBbGxvd2VkKCJlamJyb2xlIikKICAgICBwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UoKSB7CiAgICAgICAgIHJldHVybiAiSGVsbG8gZnJvbSBlamIiOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2ltcGxlTXVsdGlSb2xlTWFwcGluZy9lamIvTWVzc2FnZUxvY2FsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zaW1wbGVNdWx0aVJvbGVNYXBwaW5nL2VqYi9NZXNzYWdlTG9jYWwuamF2YQppbmRleCBiODU0NmExLi5lNzgwNzNkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zaW1wbGVNdWx0aVJvbGVNYXBwaW5nL2VqYi9NZXNzYWdlTG9jYWwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zaW1wbGVNdWx0aVJvbGVNYXBwaW5nL2VqYi9NZXNzYWdlTG9jYWwuamF2YQpAQCAtMjQsNSArMjQsNSBAQAogQExvY2FsCiBwdWJsaWMgaW50ZXJmYWNlIE1lc3NhZ2VMb2NhbCB7CiAgICAgU3RyaW5nIGdldE1lc3NhZ2UoKTsKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2ltcGxlTXVsdGlSb2xlTWFwcGluZy93ZWIvRWpiVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2ltcGxlTXVsdGlSb2xlTWFwcGluZy93ZWIvRWpiVGVzdC5qYXZhCmluZGV4IGYzYjIwNjUuLmRhYzM0ODcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NpbXBsZU11bHRpUm9sZU1hcHBpbmcvd2ViL0VqYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zaW1wbGVNdWx0aVJvbGVNYXBwaW5nL3dlYi9FamJUZXN0LmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKIAogICAgIEBFSkIKICAgICBwcml2YXRlIE1lc3NhZ2VMb2NhbCBtZXNzYWdlQmVhbjsKLSAgICAKKwogICAgIHByb3RlY3RlZCB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LAogICAgICAgICBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogCkBAIC00NCw1ICs0NCw1IEBACiAgICAgICAgIG91dC5wcmludGxuKCI8L2h0bWw+Iik7CiAgICAgICAgIG91dC5jbG9zZSgpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2ltcGxlTXVsdGlSb2xlTWFwcGluZy93ZWIvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc2ltcGxlTXVsdGlSb2xlTWFwcGluZy93ZWIvV2ViVGVzdC5qYXZhCmluZGV4IDllYzM5NjUuLmY4ZmZkNjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NpbXBsZU11bHRpUm9sZU1hcHBpbmcvd2ViL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zaW1wbGVNdWx0aVJvbGVNYXBwaW5nL3dlYi9XZWJUZXN0LmphdmEKQEAgLTIzLDcgKzIzLDcgQEAKIGltcG9ydCBqYWthcnRhLnNlcnZsZXQuaHR0cC4qOwogCiBwdWJsaWMgY2xhc3MgV2ViVGVzdCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKLSAgICAKKwogICAgIHByb3RlY3RlZCB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LAogICAgICAgICBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogCkBAIC0zOSw1ICszOSw1IEBACiAgICAgICAgIG91dC5wcmludGxuKCI8L2h0bWw+Iik7CiAgICAgICAgIG91dC5jbG9zZSgpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc29sYXJpc1JlYWxtL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb2xhcmlzUmVhbG0vYnVpbGQucHJvcGVydGllcwppbmRleCBhMTgzNWQ0Li5mMGY4OTFhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb2xhcmlzUmVhbG0vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb2xhcmlzUmVhbG0vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic2VjdXJpdHkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CkBAIC0yNiw0ICsyNiw0IEBACiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9InJwYUxvZ2luQmVhbiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJycGFMb2dpbkJlYW4iLz4gICAgICAgIFx1MDAyMApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc29sYXJpc1JlYWxtL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvbGFyaXNSZWFsbS9idWlsZC54bWwKaW5kZXggNzFmMDdiNC4uNjkzOTFmZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc29sYXJpc1JlYWxtL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb2xhcmlzUmVhbG0vYnVpbGQueG1sCkBAIC0zMSw3ICszMSw3IEBACiAgICAmY29tbW9uQnVpbGQ7CiAgICAmY29tbW9uUnVuOwogICAgJnRlc3RQcm9wZXJ0aWVzOwotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLCBzZXR1cCwgZGVwbG95LCBydW4sIHVuZGVwbG95LCB1bnNldHVwIi8+CiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KQEAgLTQ4LDcgKzQ4LDcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotPCEtLQk8cHJvcGVydHkgbmFtZT0iZWpiamFyLmNsYXNzZXMiIHZhbHVlPSIqKi8qSG9tZSouY2xhc3MsKiovKkJlYW4qLmNsYXNzLCoqLypEYXRhKi5jbGFzcywqLmRic2NoZW1hIi8+Cis8IS0tICAgIDxwcm9wZXJ0eSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgdmFsdWU9IioqLypIb21lKi5jbGFzcywqKi8qQmVhbiouY2xhc3MsKiovKkRhdGEqLmNsYXNzLCouZGJzY2hlbWEiLz4KIC0tPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLWVhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvbGFyaXNSZWFsbS9jbGllbnQvUnBhQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb2xhcmlzUmVhbG0vY2xpZW50L1JwYUNsaWVudC5qYXZhCmluZGV4IDQyYmM1MGQuLjczZTgwN2UgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvbGFyaXNSZWFsbS9jbGllbnQvUnBhQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc29sYXJpc1JlYWxtL2NsaWVudC9ScGFDbGllbnQuamF2YQpAQCAtMzgsMzEgKzM4LDMxIEBACiAgICAgICAgIFJwYUNsaWVudCBjbGllbnQgPSBuZXcgUnBhQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFJwYUNsaWVudChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIC8vc3VwZXIoYXJncyk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBkb1Rlc3QoKSB7Ci0gICAgICAgIAotCVJwYVJlbW90ZSBocj1udWxsOworCisgICAgUnBhUmVtb3RlIGhyPW51bGw7CiAgICAgICAgIFN0cmluZyByZXM9bnVsbDsKICAgICAgICAgQ29udGV4dCBpYyA9IG51bGw7CiAgICAgICAgIExvZ2luQ29udGV4dCBsYz1udWxsOwogICAgICAgICBScGFIb21lIGhvbWU9bnVsbDsKICAgICAgICAgU3RyaW5nIHRlc3RJZCA9ICJTZWM6OlNvbGFyaXMgUmVhbG0iOwotICAgIAl0cnl7CisgICAgICAgIHRyeXsKICAgICAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlNlY3VyaXR5OjpTb2xhcmlzIFJlYWxtIik7Ci0JICAgIGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgICAgICAvLyBjcmVhdGUgRUpCIHVzaW5nIGZhY3RvcnkgZnJvbSBjb250YWluZXIgCisgICAgICAgIGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgICAgICAvLyBjcmVhdGUgRUpCIHVzaW5nIGZhY3RvcnkgZnJvbSBjb250YWluZXIKICAgICAgICAgICAgIGphdmEubGFuZy5PYmplY3Qgb2JqcmVmID0gaWMubG9va3VwKCJycGFMb2dpbkJlYW4iKTsKLQkJCi0JICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTG9va2VkIHVwIGhvbWUhISIpOwotCQkKLQkgICAgaG9tZSA9IChScGFIb21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdygKLQkJCQkJICAgb2JqcmVmLCBScGFIb21lLmNsYXNzKTsKLQkgICAgU3lzdGVtLmVyci5wcmludGxuKCJOYXJyb3dlZCBob21lISEiKTsKLQkJCQkKKworICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkxvb2tlZCB1cCBob21lISEiKTsKKworICAgICAgICBob21lID0gKFJwYUhvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KAorICAgICAgICAgICAgICAgICAgICAgICBvYmpyZWYsIFJwYUhvbWUuY2xhc3MpOworICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIk5hcnJvd2VkIGhvbWUhISIpOworCiAgICAgICAgICAgICBociA9IGhvbWUuY3JlYXRlKCJMaXpIdXJsZXkiKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IHRoZSBFSkIhISIpOwogCkBAIC04OCwxMSArODgsMTEgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU29sYXJpc1JlYWxtOlJwYUxvZ2luQmVhbiBUZXN0IEZhaWxlZCIpOwogICAgICAgICAgICAgU3lzdGVtLmV4aXQoLTEpOwotCX0gZmluYWxseSB7CisgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJlczsKLSAgICAgICAgCisKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvbGFyaXNSZWFsbS9zaG9wcGluZy9ScGFCZWFuLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb2xhcmlzUmVhbG0vc2hvcHBpbmcvUnBhQmVhbi5qYXZhCmluZGV4IDQwNWYzNjkuLjY4YzE4NzIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvbGFyaXNSZWFsbS9zaG9wcGluZy9ScGFCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc29sYXJpc1JlYWxtL3Nob3BwaW5nL1JwYUJlYW4uamF2YQpAQCAtMzYsMjUgKzM2LDI1IEBACiAgKi8KIAogcHVibGljIGNsYXNzIFJwYUJlYW4gaW1wbGVtZW50cyBTZXNzaW9uQmVhbiB7Ci0gICAgCisKICAgICBwcml2YXRlIFN0cmluZyBzaG9wcGVyID0gImFub255bW91cyI7CiAgICAgcHJpdmF0ZSBpbnQgdG90YWxQcmljZSA9IDA7Ci0gICAgCisKICAgICBwcml2YXRlIGludCB0b3RhbEl0ZW1zID0gMDsKLSAgICAKKwogICAgIHByaXZhdGUgVmVjdG9yIGl0ZW1zOwotICAgIAorCiAgICAgcHJpdmF0ZSBWZWN0b3IgaXRlbVByaWNlOwotICAgIAorCiAgICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBzYyA9IG51bGw7Ci0gICAgCisKICAgICAvKiogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBTaG9wcGluZ0VKQiAqLwogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZShTdHJpbmcgc2hvcHBlck5hbWUpIHsKICAgICAgICAgc2hvcHBlciA9IHNob3BwZXJOYW1lOwogICAgICAgICBpdGVtcyA9IG5ldyBWZWN0b3IoKTsKICAgICAgICAgaXRlbVByaWNlID0gbmV3IFZlY3RvcigpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGFkZEl0ZW0oamF2YS5sYW5nLlN0cmluZyBpdGVtLCBpbnQgcHJpY2UpIHRocm93cyBFSkJFeGNlcHRpb24sCiAgICAgICAgIFJlbW90ZUV4Y2VwdGlvbnsKICAgICAgICAgaXRlbXMuYWRkKGl0ZW0pOwpAQCAtNjQsMzAgKzY0LDMwIEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFNob3BwaW5nIENhcnQ6IFNob3BwZXIgIisgc2hvcHBlciArIiBoYXMgYm91Z2h0ICIKICAgICAgICAgICAgICsgaXRlbSArIiBmb3IgcHJpY2UgPSIrIHByaWNlICsiIC5Ub3RhbCBJdGVtcyA9ICIrdG90YWxJdGVtcyArCiAgICAgICAgICAgICAiIC5Ub3RhbFByaWNlID0gIiArIHRvdGFsUHJpY2UpOwotICAgICAgICAKKwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxlciBQcmluY2lhbCA9ICIrc2MuZ2V0Q2FsbGVyUHJpbmNpcGFsKCkpOwogICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBkZWxldGVJdGVtKGphdmEubGFuZy5TdHJpbmcgaXRlbSkgdGhyb3dzIEVKQkV4Y2VwdGlvbiwgCisKKyAgICBwdWJsaWMgdm9pZCBkZWxldGVJdGVtKGphdmEubGFuZy5TdHJpbmcgaXRlbSkgdGhyb3dzIEVKQkV4Y2VwdGlvbiwKICAgICAgICAgUmVtb3RlRXhjZXB0aW9uewogICAgICAgICBpbnQgaW5kZXggPSBpdGVtcy5pbmRleE9mKGl0ZW0pOwogICAgICAgICBpdGVtcy5yZW1vdmUoaXRlbSk7CiAgICAgICAgIEludGVnZXIgcHJpY2UgPSAoSW50ZWdlcikgaXRlbVByaWNlLmdldChpbmRleCk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2hvcHBpbmcgQ2FydDogUmVtb3ZpbmcgaXRlbSAiKyBpdGVtICsiIEBwcmljZSAiKyAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTaG9wcGluZyBDYXJ0OiBSZW1vdmluZyBpdGVtICIrIGl0ZW0gKyIgQHByaWNlICIrCiAgICAgICAgICAgICBwcmljZS5pbnRWYWx1ZSgpKTsKICAgICAgICAgdG90YWxQcmljZSAtPSBwcmljZS5zaG9ydFZhbHVlKCk7Ci0gICAgICAgIGl0ZW1QcmljZS5yZW1vdmUoaW5kZXgpOyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIGl0ZW1QcmljZS5yZW1vdmUoaW5kZXgpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBTaG9wcGluZyBDYXJ0OiBTaG9wcGVyICIrIHNob3BwZXIgKyIgIC5Ub3RhbCBJdGVtcyA9ICIrdG90YWxJdGVtcyArCiAgICAgICAgICAgICAiIC5Ub3RhbFByaWNlID0gIiArIHRvdGFsUHJpY2UpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxlciBQcmluY2lhbCA9ICIrc2MuZ2V0Q2FsbGVyUHJpbmNpcGFsKCkpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBkb3VibGUgZ2V0VG90YWxDb3N0KCkgdGhyb3dzIEVKQkV4Y2VwdGlvbnsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYWxsZXIgUHJpbmNpYWwgPSAiK3NjLmdldENhbGxlclByaW5jaXBhbCgpKTsKIAogICAgICAgICByZXR1cm4gdG90YWxQcmljZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nW10gZ2V0SXRlbXMoKSB0aHJvd3MgRUpCRXhjZXB0aW9uewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxlciBQcmluY2lhbCA9ICIrc2MuZ2V0Q2FsbGVyUHJpbmNpcGFsKCkpOwogCkBAIC05OSwyNCArOTksMjQgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gaXRlbU5hbWVzOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFJwYSBlamJBY3RpdmF0ZSIpOwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFJwYSBlamJQYXNzaXZhdGUiKTsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpICB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gUnBhIGVqYlJlbW92ZSIpOwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQgc2Vzc2lvbkNvbnRleHQpIHsKICAgICAgICAgc2MgPSBzZXNzaW9uQ29udGV4dDsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvbGFyaXNSZWFsbS9zaG9wcGluZy9ScGFIb21lLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb2xhcmlzUmVhbG0vc2hvcHBpbmcvUnBhSG9tZS5qYXZhCmluZGV4IGQ0MjYyZDAuLmM5OTMwOTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvbGFyaXNSZWFsbS9zaG9wcGluZy9ScGFIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc29sYXJpc1JlYWxtL3Nob3BwaW5nL1JwYUhvbWUuamF2YQpAQCAtMjgsOCArMjgsOCBAQAogICogQGF1dGhvciAgSGFycHJlZXQgU2luZ2gKICAqLwogcHVibGljIGludGVyZmFjZSBScGFIb21lIGV4dGVuZHMgRUpCSG9tZXsKLSAgICAKLSAgICBwdWJsaWMgUnBhUmVtb3RlIGNyZWF0ZShqYXZhLmxhbmcuU3RyaW5nIHNob3BwZXJOYW1lKSAKKworICAgIHB1YmxpYyBScGFSZW1vdGUgY3JlYXRlKGphdmEubGFuZy5TdHJpbmcgc2hvcHBlck5hbWUpCiAgICAgICAgIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24sIGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbjsKLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc29sYXJpc1JlYWxtL3Nob3BwaW5nL1JwYVJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc29sYXJpc1JlYWxtL3Nob3BwaW5nL1JwYVJlbW90ZS5qYXZhCmluZGV4IGZiOGE3NzMuLjQzYTM5OTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvbGFyaXNSZWFsbS9zaG9wcGluZy9ScGFSZW1vdGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb2xhcmlzUmVhbG0vc2hvcHBpbmcvUnBhUmVtb3RlLmphdmEKQEAgLTIzLDE3ICsyMywxNyBAQAogcGFja2FnZSBzaG9wcGluZzsKIGltcG9ydCBqYWthcnRhLmVqYi5FSkJPYmplY3Q7CiAvKioKLSAqIFNob3BwaW5nIENhcnQgU3RhdGVmdWwgU2Vzc2lvbiBCZWFuLiBKdXN0IHRlc3RzIC1EajJlZWxvZ2luLm5hbWUgCisgKiBTaG9wcGluZyBDYXJ0IFN0YXRlZnVsIFNlc3Npb24gQmVhbi4gSnVzdCB0ZXN0cyAtRGoyZWVsb2dpbi5uYW1lCiAgKiAgLURqMmVlbG9naW4ucGFzc3dvcmQgc3lzdGVtIHByb3BlcnRpZXMuCiAgKiBAYXV0aG9yICBoc2luZ2gKICAqLwogcHVibGljIGludGVyZmFjZSBScGFSZW1vdGUgZXh0ZW5kcyBFSkJPYmplY3QgewotICAgICAgICAgICAgCisKICAgICBwdWJsaWMgdm9pZCBhZGRJdGVtKGphdmEubGFuZy5TdHJpbmcgaXRlbSwgaW50IHByaWNlKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgZGVsZXRlSXRlbShqYXZhLmxhbmcuU3RyaW5nIGl0ZW0pIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247Ci0gICAgICAgCisKICAgICBwdWJsaWMgZG91YmxlIGdldFRvdGFsQ29zdCgpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgamF2YS5sYW5nLlN0cmluZ1tdIGdldEl0ZW1zKCkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWJ1bmRsZWQtaGFtLWJhc2ljLWxvZ2luLWNvbmZpZy1mb3JtL3BvbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1idW5kbGVkLWhhbS1iYXNpYy1sb2dpbi1jb25maWctZm9ybS9wb20ueG1sCmluZGV4IGU4YTcyY2UuLjRjODQ2Y2UgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWJ1bmRsZWQtaGFtLWJhc2ljLWxvZ2luLWNvbmZpZy1mb3JtL3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtYnVuZGxlZC1oYW0tYmFzaWMtbG9naW4tY29uZmlnLWZvcm0vcG9tLnhtbApAQCAtMTcsMjEgKzE3LDIxIEBACiAtLT4KIAogPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KLQk8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5nbGFzc2Zpc2guc290ZXJpYS50ZXN0PC9ncm91cElkPgogICAgIDxhcnRpZmFjdElkPnNvdGVyaWE8L2FydGlmYWN0SWQ+CiAgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCi0JPGFydGlmYWN0SWQ+YXBwLWJ1bmRsZWQtaGFtLWJhc2ljLWxvZ2luLWNvbmZpZy1mb3JtPC9hcnRpZmFjdElkPgotCTxwYWNrYWdpbmc+d2FyPC9wYWNrYWdpbmc+Ci0JCi0JPGJ1aWxkPgorICAgIDxhcnRpZmFjdElkPmFwcC1idW5kbGVkLWhhbS1iYXNpYy1sb2dpbi1jb25maWctZm9ybTwvYXJ0aWZhY3RJZD4KKyAgICA8cGFja2FnaW5nPndhcjwvcGFja2FnaW5nPgorCisgICAgPGJ1aWxkPgogICAgICAgICA8ZmluYWxOYW1lPmFwcC1idW5kbGVkLWhhbS1iYXNpYy1sb2dpbi1jb25maWctZm9ybTwvZmluYWxOYW1lPgotCTwvYnVpbGQ+Ci0gICAgCisgICAgPC9idWlsZD4KKwogICAgIDxwcm9wZXJ0aWVzPgogICAgICAgICA8ZmFpbE9uTWlzc2luZ1dlYlhtbD5mYWxzZTwvZmFpbE9uTWlzc2luZ1dlYlhtbD4KICAgICA8L3Byb3BlcnRpZXM+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1idW5kbGVkLWhhbS1iYXNpYy1sb2dpbi1jb25maWctZm9ybS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1Rlc3RBdXRoZW50aWNhdGlvbk1lY2hhbmlzbS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtYnVuZGxlZC1oYW0tYmFzaWMtbG9naW4tY29uZmlnLWZvcm0vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9UZXN0QXV0aGVudGljYXRpb25NZWNoYW5pc20uamF2YQppbmRleCBhZTZhY2VjLi5iMjNhOGUzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1idW5kbGVkLWhhbS1iYXNpYy1sb2dpbi1jb25maWctZm9ybS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1Rlc3RBdXRoZW50aWNhdGlvbk1lY2hhbmlzbS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWJ1bmRsZWQtaGFtLWJhc2ljLWxvZ2luLWNvbmZpZy1mb3JtL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvVGVzdEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtLmphdmEKQEAgLTMyLDIwICszMiwyMCBAQAogCiBAUmVxdWVzdFNjb3BlZAogcHVibGljIGNsYXNzIFRlc3RBdXRoZW50aWNhdGlvbk1lY2hhbmlzbSBpbXBsZW1lbnRzIEh0dHBBdXRoZW50aWNhdGlvbk1lY2hhbmlzbSB7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgcHJpdmF0ZSBJZGVudGl0eVN0b3JlSGFuZGxlciBpZGVudGl0eVN0b3JlSGFuZGxlcjsKIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBBdXRoZW50aWNhdGlvblN0YXR1cyB2YWxpZGF0ZVJlcXVlc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UsIEh0dHBNZXNzYWdlQ29udGV4dCBodHRwTWVzc2FnZUNvbnRleHQpIHRocm93cyBBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbiB7CiAKLSAgICAJLy8gR2V0IHRoZSAoY2FsbGVyKSBuYW1lIGFuZCBwYXNzd29yZCBmcm9tIHRoZSByZXF1ZXN0CisgICAgICAgIC8vIEdldCB0aGUgKGNhbGxlcikgbmFtZSBhbmQgcGFzc3dvcmQgZnJvbSB0aGUgcmVxdWVzdAogICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIGZvciB0aGUgc21hbGxlc3QgcG9zc2libGUgZXhhbXBsZSBvbmx5LiBJbiBwcmFjdGljZQogICAgICAgICAvLyBwdXR0aW5nIHRoZSBwYXNzd29yZCBpbiBhIHJlcXVlc3QgcXVlcnkgcGFyYW1ldGVyIGlzIGhpZ2hseQogICAgICAgICAvLyBpbnNlY3VyZQogICAgICAgICBTdHJpbmcgbmFtZSA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJuYW1lIik7CiAgICAgICAgIFN0cmluZyBwYXNzd29yZCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJwYXNzd29yZCIpOwotICAgIAkKKwogICAgICAgICBpZiAobmFtZSAhPSBudWxsICYmIHBhc3N3b3JkICE9IG51bGwpIHsKIAogICAgICAgICAgICAgLy8gRGVsZWdhdGUgdGhlIHtjcmVkZW50aWFscyBpbiAtPiBpZGVudGl0eSBkYXRhIG91dH0gZnVuY3Rpb24gdG8KQEAgLTU1LDggKzU1LDggQEAKIAogICAgICAgICAgICAgaWYgKHJlc3VsdC5nZXRTdGF0dXMoKSA9PSBWQUxJRCkgewogICAgICAgICAgICAgICAgIC8vIENvbW11bmljYXRlIHRoZSBkZXRhaWxzIG9mIHRoZSBhdXRoZW50aWNhdGVkIHVzZXIgdG8gdGhlCi0gICAgICAgICAgICAgICAgLy8gY29udGFpbmVyLiBJbiBtYW55IGNhc2VzIHRoZSB1bmRlcmx5aW5nIGhhbmRsZXIgd2lsbCBqdXN0IHN0b3JlIHRoZSBkZXRhaWxzIAotICAgICAgICAgICAgICAgIC8vIGFuZCB0aGUgY29udGFpbmVyIHdpbGwgYWN0dWFsbHkgaGFuZGxlIHRoZSBsb2dpbiBhZnRlciB3ZSByZXR1cm4gZnJvbSAKKyAgICAgICAgICAgICAgICAvLyBjb250YWluZXIuIEluIG1hbnkgY2FzZXMgdGhlIHVuZGVybHlpbmcgaGFuZGxlciB3aWxsIGp1c3Qgc3RvcmUgdGhlIGRldGFpbHMKKyAgICAgICAgICAgICAgICAvLyBhbmQgdGhlIGNvbnRhaW5lciB3aWxsIGFjdHVhbGx5IGhhbmRsZSB0aGUgbG9naW4gYWZ0ZXIgd2UgcmV0dXJuIGZyb20KICAgICAgICAgICAgICAgICAvLyB0aGlzIG1ldGhvZC4KICAgICAgICAgICAgICAgICByZXNwb25zZS5hZGRIZWFkZXIoIkF1dGhlbnRpY2F0aW9uIE1lY2hhbmlzbSIsICJUZXN0QXV0aGVudGljYXRpb25NZWNoYW5pc20iKTsKICAgICAgICAgICAgICAgICByZXR1cm4gaHR0cE1lc3NhZ2VDb250ZXh0Lm5vdGlmeUNvbnRhaW5lckFib3V0TG9naW4oCkBAIC02NCw5ICs2NCw5IEBACiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHJldHVybiBodHRwTWVzc2FnZUNvbnRleHQucmVzcG9uc2VVbmF1dGhvcml6ZWQoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAKKyAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBodHRwTWVzc2FnZUNvbnRleHQuZG9Ob3RoaW5nKCk7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1idW5kbGVkLWhhbS1iYXNpYy1sb2dpbi1jb25maWctZm9ybS9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtYnVuZGxlZC1oYW0tYmFzaWMtbG9naW4tY29uZmlnLWZvcm0vc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbAppbmRleCAyZGVlMDhkLi4yODg5YmZhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1idW5kbGVkLWhhbS1iYXNpYy1sb2dpbi1jb25maWctZm9ybS9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWJ1bmRsZWQtaGFtLWJhc2ljLWxvZ2luLWNvbmZpZy1mb3JtL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgICAgIDx0cmFuc3BvcnQtZ3VhcmFudGVlPk5PTkU8L3RyYW5zcG9ydC1ndWFyYW50ZWU+CiAgICAgICAgIDwvdXNlci1kYXRhLWNvbnN0cmFpbnQ+CiAgICAgPC9zZWN1cml0eS1jb25zdHJhaW50PgotICAgIAorCiAgICAgPGxvZ2luLWNvbmZpZz4KICAgICAgICAgPGF1dGgtbWV0aG9kPkZPUk08L2F1dGgtbWV0aG9kPgogICAgICAgICA8cmVhbG0tbmFtZT5maWxlPC9yZWFsbS1uYW1lPgpAQCAtNDcsNiArNDcsNiBAQAogICAgICAgICAgICAgPGZvcm0tbG9naW4tcGFnZT4vbG9naW5mb3JtLmpzcDwvZm9ybS1sb2dpbi1wYWdlPgogICAgICAgICAgICAgPGZvcm0tZXJyb3ItcGFnZT4vbG9naW5lcnJvci5qc3A8L2Zvcm0tZXJyb3ItcGFnZT4KICAgICAgICAgPC9mb3JtLWxvZ2luLWNvbmZpZz4KLSAgICA8L2xvZ2luLWNvbmZpZz4gIAorICAgIDwvbG9naW4tY29uZmlnPgogPC93ZWItYXBwPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jYWxsZXItcHJpbmNpcGFsL3BvbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jYWxsZXItcHJpbmNpcGFsL3BvbS54bWwKaW5kZXggNTMwZTc4OS4uNTZjNzg2OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY2FsbGVyLXByaW5jaXBhbC9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWNhbGxlci1wcmluY2lwYWwvcG9tLnhtbApAQCAtMTcsMjEgKzE3LDIxIEBACiAtLT4KIAogPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KLQk8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5nbGFzc2Zpc2guc290ZXJpYS50ZXN0PC9ncm91cElkPgogICAgIDxhcnRpZmFjdElkPnNvdGVyaWE8L2FydGlmYWN0SWQ+CiAgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCi0JPGFydGlmYWN0SWQ+YXBwLWNhbGxlci1wcmluY2lwYWw8L2FydGlmYWN0SWQ+Ci0JPHBhY2thZ2luZz53YXI8L3BhY2thZ2luZz4KLQkKLQk8YnVpbGQ+CisgICAgPGFydGlmYWN0SWQ+YXBwLWNhbGxlci1wcmluY2lwYWw8L2FydGlmYWN0SWQ+CisgICAgPHBhY2thZ2luZz53YXI8L3BhY2thZ2luZz4KKworICAgIDxidWlsZD4KICAgICAgICAgPGZpbmFsTmFtZT5hcHAtY2FsbGVyLXByaW5jaXBhbDwvZmluYWxOYW1lPgotCTwvYnVpbGQ+Ci0gICAgCisgICAgPC9idWlsZD4KKwogICAgIDxwcm9wZXJ0aWVzPgogICAgICAgICA8ZmFpbE9uTWlzc2luZ1dlYlhtbD5mYWxzZTwvZmFpbE9uTWlzc2luZ1dlYlhtbD4KICAgICA8L3Byb3BlcnRpZXM+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jYWxsZXItcHJpbmNpcGFsL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQ2FsbGVyU3ViamVjdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWNhbGxlci1wcmluY2lwYWwvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9DYWxsZXJTdWJqZWN0U2VydmxldC5qYXZhCmluZGV4IGJhM2E5ZjMuLmZkYzc3MzkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWNhbGxlci1wcmluY2lwYWwvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9DYWxsZXJTdWJqZWN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWNhbGxlci1wcmluY2lwYWwvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9DYWxsZXJTdWJqZWN0U2VydmxldC5qYXZhCkBAIC00Miw3ICs0Miw3IEBACiBwdWJsaWMgY2xhc3MgQ2FsbGVyU3ViamVjdFNlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBwcml2YXRlIFNlY3VyaXR5Q29udGV4dCBzZWN1cml0eUNvbnRleHQ7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWNhbGxlci1wcmluY2lwYWwvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9UZXN0QXV0aGVudGljYXRpb25NZWNoYW5pc20uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWNhbGxlci1wcmluY2lwYWwvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9UZXN0QXV0aGVudGljYXRpb25NZWNoYW5pc20uamF2YQppbmRleCBmNjc3ZDNhLi5jMDNiOGNmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jYWxsZXItcHJpbmNpcGFsL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvVGVzdEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY2FsbGVyLXByaW5jaXBhbC9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1Rlc3RBdXRoZW50aWNhdGlvbk1lY2hhbmlzbS5qYXZhCkBAIC0zNSwyMCArMzUsMjAgQEAKIAogQFJlcXVlc3RTY29wZWQKIHB1YmxpYyBjbGFzcyBUZXN0QXV0aGVudGljYXRpb25NZWNoYW5pc20gaW1wbGVtZW50cyBIdHRwQXV0aGVudGljYXRpb25NZWNoYW5pc20gewotICAgIAorCiAgICAgQEluamVjdAogICAgIHByaXZhdGUgSWRlbnRpdHlTdG9yZUhhbmRsZXIgaWRlbnRpdHlTdG9yZUhhbmRsZXI7CiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgQXV0aGVudGljYXRpb25TdGF0dXMgdmFsaWRhdGVSZXF1ZXN0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlLCBIdHRwTWVzc2FnZUNvbnRleHQgaHR0cE1lc3NhZ2VDb250ZXh0KSB0aHJvd3MgQXV0aGVudGljYXRpb25FeGNlcHRpb24gewogCi0gICAgCS8vIEdldCB0aGUgKGNhbGxlcikgbmFtZSBhbmQgcGFzc3dvcmQgZnJvbSB0aGUgcmVxdWVzdAorICAgICAgICAvLyBHZXQgdGhlIChjYWxsZXIpIG5hbWUgYW5kIHBhc3N3b3JkIGZyb20gdGhlIHJlcXVlc3QKICAgICAgICAgLy8gTk9URTogVGhpcyBpcyBmb3IgdGhlIHNtYWxsZXN0IHBvc3NpYmxlIGV4YW1wbGUgb25seS4gSW4gcHJhY3RpY2UKICAgICAgICAgLy8gcHV0dGluZyB0aGUgcGFzc3dvcmQgaW4gYSByZXF1ZXN0IHF1ZXJ5IHBhcmFtZXRlciBpcyBoaWdobHkKICAgICAgICAgLy8gaW5zZWN1cmUKICAgICAgICAgU3RyaW5nIG5hbWUgPSByZXF1ZXN0LmdldFBhcmFtZXRlcigibmFtZSIpOwogICAgICAgICBTdHJpbmcgcGFzc3dvcmQgPSByZXF1ZXN0LmdldFBhcmFtZXRlcigicGFzc3dvcmQiKTsKLSAgICAJCisKICAgICAgICAgaWYgKG5hbWUgIT0gbnVsbCAmJiBwYXNzd29yZCAhPSBudWxsKSB7CiAKICAgICAgICAgICAgIC8vIERlbGVnYXRlIHRoZSB7Y3JlZGVudGlhbHMgaW4gLT4gaWRlbnRpdHkgZGF0YSBvdXR9IGZ1bmN0aW9uIHRvCkBAIC02NCw5ICs2NCw5IEBACiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHJldHVybiBodHRwTWVzc2FnZUNvbnRleHQucmVzcG9uc2VVbmF1dGhvcml6ZWQoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAKKyAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBodHRwTWVzc2FnZUNvbnRleHQuZG9Ob3RoaW5nKCk7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jYWxsZXItcHJpbmNpcGFsL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jYWxsZXItcHJpbmNpcGFsL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKaW5kZXggMDlmZmZiNC4uNmNhMzU0NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY2FsbGVyLXByaW5jaXBhbC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWNhbGxlci1wcmluY2lwYWwvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbApAQCAtMTgsMjcgKzE4LDI3IEBACiAtLT4KIAogPHdlYi1hcHAKLQl4bWxucz0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSIKLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZSBodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlL3dlYi1hcHBfM18xLnhzZCIKLQl2ZXJzaW9uPSIzLjEiCisgICAgeG1sbnM9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUgaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS93ZWItYXBwXzNfMS54c2QiCisgICAgdmVyc2lvbj0iMy4xIgogPgogCi0JPCEtLSBTZWN1cml0eSBjb25zdHJhaW50cyBhbmQgcm9sZXMuIC0tPgorICAgIDwhLS0gU2VjdXJpdHkgY29uc3RyYWludHMgYW5kIHJvbGVzLiAtLT4KIAotCTxzZWN1cml0eS1jb25zdHJhaW50PgotCQk8d2ViLXJlc291cmNlLWNvbGxlY3Rpb24+Ci0JCQk8d2ViLXJlc291cmNlLW5hbWU+VXNlciBwYWdlczwvd2ViLXJlc291cmNlLW5hbWU+Ci0JCQk8dXJsLXBhdHRlcm4+L3Byb3RlY3RlZFNlcnZsZXQ8L3VybC1wYXR0ZXJuPgotCQk8L3dlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgotCQk8YXV0aC1jb25zdHJhaW50PgotCQkJPHJvbGUtbmFtZT5mb288L3JvbGUtbmFtZT4KLQkJPC9hdXRoLWNvbnN0cmFpbnQ+Ci0JPC9zZWN1cml0eS1jb25zdHJhaW50PgorICAgIDxzZWN1cml0eS1jb25zdHJhaW50PgorICAgICAgICA8d2ViLXJlc291cmNlLWNvbGxlY3Rpb24+CisgICAgICAgICAgICA8d2ViLXJlc291cmNlLW5hbWU+VXNlciBwYWdlczwvd2ViLXJlc291cmNlLW5hbWU+CisgICAgICAgICAgICA8dXJsLXBhdHRlcm4+L3Byb3RlY3RlZFNlcnZsZXQ8L3VybC1wYXR0ZXJuPgorICAgICAgICA8L3dlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgorICAgICAgICA8YXV0aC1jb25zdHJhaW50PgorICAgICAgICAgICAgPHJvbGUtbmFtZT5mb288L3JvbGUtbmFtZT4KKyAgICAgICAgPC9hdXRoLWNvbnN0cmFpbnQ+CisgICAgPC9zZWN1cml0eS1jb25zdHJhaW50PgogCiAKLQk8c2VjdXJpdHktcm9sZT4KLQkJPHJvbGUtbmFtZT5mb288L3JvbGUtbmFtZT4KLQk8L3NlY3VyaXR5LXJvbGU+CisgICAgPHNlY3VyaXR5LXJvbGU+CisgICAgICAgIDxyb2xlLW5hbWU+Zm9vPC9yb2xlLW5hbWU+CisgICAgPC9zZWN1cml0eS1yb2xlPgogCiA8L3dlYi1hcHA+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jYWxsZXItcHJpbmNpcGFsL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQXBwQ2FsbGVyUHJpbmNpcGFsSVQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWNhbGxlci1wcmluY2lwYWwvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9BcHBDYWxsZXJQcmluY2lwYWxJVC5qYXZhCmluZGV4IDJmZjdmMDUuLmEyNzI3MzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWNhbGxlci1wcmluY2lwYWwvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9BcHBDYWxsZXJQcmluY2lwYWxJVC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWNhbGxlci1wcmluY2lwYWwvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9BcHBDYWxsZXJQcmluY2lwYWxJVC5qYXZhCkBAIC00NSw3ICs0NSw3IEBACiAgICAgcHVibGljIHN0YXRpYyB2b2lkIHByaW50U3VtbWFyeSgpewogICAgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9Ci0gICAKKwogICAgIEBEZXBsb3ltZW50KHRlc3RhYmxlID0gZmFsc2UpCiAgICAgcHVibGljIHN0YXRpYyBBcmNoaXZlPD8+IGNyZWF0ZURlcGxveW1lbnQoKSB7CiAgICAgICAgIHJldHVybiBtYXZlbldhcigpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tLWlkZW50aXR5LXN0b3JlLWhhbmRsZXIvcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS1pZGVudGl0eS1zdG9yZS1oYW5kbGVyL3BvbS54bWwKaW5kZXggYWE3NjMzZi4uODAwZDJjOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tLWlkZW50aXR5LXN0b3JlLWhhbmRsZXIvcG9tLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jdXN0b20taWRlbnRpdHktc3RvcmUtaGFuZGxlci9wb20ueG1sCkBAIC0xNywyMCArMTcsMjAgQEAKIC0tPgogCiA8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgotCTxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmdsYXNzZmlzaC5zb3RlcmlhLnRlc3Q8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+c290ZXJpYTwvYXJ0aWZhY3RJZD4KICAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKLQk8YXJ0aWZhY3RJZD5hcHAtY3VzdG9tLWlkZW50aXR5LXN0b3JlLWhhbmRsZXI8L2FydGlmYWN0SWQ+Ci0JPHBhY2thZ2luZz53YXI8L3BhY2thZ2luZz4KKyAgICA8YXJ0aWZhY3RJZD5hcHAtY3VzdG9tLWlkZW50aXR5LXN0b3JlLWhhbmRsZXI8L2FydGlmYWN0SWQ+CisgICAgPHBhY2thZ2luZz53YXI8L3BhY2thZ2luZz4KIAotCTxidWlsZD4KKyAgICA8YnVpbGQ+CiAgICAgICAgIDxmaW5hbE5hbWU+YXBwLWN1c3RvbS1pZGVudGl0eS1zdG9yZS1oYW5kbGVyPC9maW5hbE5hbWU+Ci0JPC9idWlsZD4KKyAgICA8L2J1aWxkPgogCiAgICAgPHByb3BlcnRpZXM+CiAgICAgICAgIDxmYWlsT25NaXNzaW5nV2ViWG1sPmZhbHNlPC9mYWlsT25NaXNzaW5nV2ViWG1sPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tLWlkZW50aXR5LXN0b3JlLWhhbmRsZXIvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9MZGFwU2V0dXAuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS1pZGVudGl0eS1zdG9yZS1oYW5kbGVyL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvTGRhcFNldHVwLmphdmEKaW5kZXggNDg2OGFlMi4uMmU1ZTY0YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tLWlkZW50aXR5LXN0b3JlLWhhbmRsZXIvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9MZGFwU2V0dXAuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jdXN0b20taWRlbnRpdHktc3RvcmUtaGFuZGxlci9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0xkYXBTZXR1cC5qYXZhCkBAIC0zMSwxNCArMzEsMTQgQEAKICAqIFN0YXJ0cyB1cCB0aGUgZW1iZWRkZWQgVW5ib3VuZGlkIExEQVAgc2VydmVyIG9uIHBvcnQgMzMzODkgYW5kIGxvYWRzIGEgdGVzdCBkaXJlY3RvcnkKICAqIGludG8gaXQgY29udGFpbmluZyB0aGUgc2FtZSBjYWxsZXItIGFuZCByb2xlcyBuYW1lcyBhcyB0aGUgRGF0YWJhc2UgYW5kIEVtYmVkZGVkIGlkZW5pdHkKICAqIHN0b3JlcyBhcmUgdXNpbmcuCi0gKiAKKyAqCiAgKiBAYXV0aG9yIEFyamFuIFRpam1zCiAgKgogICovCiBAU3RhcnR1cAogQFNpbmdsZXRvbgogcHVibGljIGNsYXNzIExkYXBTZXR1cCB7Ci0gICAgCisKICAgICBwcml2YXRlIEluTWVtb3J5RGlyZWN0b3J5U2VydmVyIGRpcmVjdG9yeVNlcnZlcjsKIAogICAgIEBQb3N0Q29uc3RydWN0CkBAIC00OSw4ICs0OSw4IEBACiAgICAgICAgICAgICAgICAgbmV3IEluTWVtb3J5TGlzdGVuZXJDb25maWcoIm15TGlzdGVuZXIiLCBudWxsLCAzMzM4OSwgbnVsbCwgbnVsbCwgbnVsbCkpOwogCiAgICAgICAgICAgICBkaXJlY3RvcnlTZXJ2ZXIgPSBuZXcgSW5NZW1vcnlEaXJlY3RvcnlTZXJ2ZXIoY29uZmlnKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZGlyZWN0b3J5U2VydmVyLmltcG9ydEZyb21MRElGKHRydWUsIAorCisgICAgICAgICAgICBkaXJlY3RvcnlTZXJ2ZXIuaW1wb3J0RnJvbUxESUYodHJ1ZSwKICAgICAgICAgICAgICAgICBuZXcgTERJRlJlYWRlcih0aGlzLmdldENsYXNzKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbSgiL3Rlc3QubGRpZiIpKSk7CiAKICAgICAgICAgICAgIGRpcmVjdG9yeVNlcnZlci5zdGFydExpc3RlbmluZygpOwpAQCAtNTgsMTAgKzU4LDEwIEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKGUpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgQFByZURlc3Ryb3kKICAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkgewogICAgICAgICBkaXJlY3RvcnlTZXJ2ZXIuc2h1dERvd24odHJ1ZSk7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jdXN0b20taWRlbnRpdHktc3RvcmUtaGFuZGxlci9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1Rlc3RBdXRoZW50aWNhdGlvbk1lY2hhbmlzbS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tLWlkZW50aXR5LXN0b3JlLWhhbmRsZXIvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9UZXN0QXV0aGVudGljYXRpb25NZWNoYW5pc20uamF2YQppbmRleCA2NjVlNzBmLi44OWQ1NzI2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jdXN0b20taWRlbnRpdHktc3RvcmUtaGFuZGxlci9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1Rlc3RBdXRoZW50aWNhdGlvbk1lY2hhbmlzbS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS1pZGVudGl0eS1zdG9yZS1oYW5kbGVyL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvVGVzdEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtLmphdmEKQEAgLTMzLDcgKzMzLDcgQEAKIAogQEFwcGxpY2F0aW9uU2NvcGVkCiBwdWJsaWMgY2xhc3MgVGVzdEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtIGltcGxlbWVudHMgSHR0cEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtIHsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBwcml2YXRlIElkZW50aXR5U3RvcmVIYW5kbGVyIGlkZW50aXR5U3RvcmVIYW5kbGVyOwogCkBAIC01NiwxNyArNTYsMTcgQEAKIAogICAgICAgICAgICAgaWYgKHJlc3VsdC5nZXRTdGF0dXMoKSA9PSBWQUxJRCkgewogICAgICAgICAgICAgICAgIC8vIENvbW11bmljYXRlIHRoZSBkZXRhaWxzIG9mIHRoZSBhdXRoZW50aWNhdGVkIHVzZXIgdG8gdGhlCi0gICAgICAgICAgICAgICAgLy8gY29udGFpbmVyLiBJbiBtYW55IGNhc2VzIHRoZSB1bmRlcmx5aW5nIGhhbmRsZXIgd2lsbCBqdXN0IHN0b3JlIHRoZSBkZXRhaWxzIAotICAgICAgICAgICAgICAgIC8vIGFuZCB0aGUgY29udGFpbmVyIHdpbGwgYWN0dWFsbHkgaGFuZGxlIHRoZSBsb2dpbiBhZnRlciB3ZSByZXR1cm4gZnJvbSAKKyAgICAgICAgICAgICAgICAvLyBjb250YWluZXIuIEluIG1hbnkgY2FzZXMgdGhlIHVuZGVybHlpbmcgaGFuZGxlciB3aWxsIGp1c3Qgc3RvcmUgdGhlIGRldGFpbHMKKyAgICAgICAgICAgICAgICAvLyBhbmQgdGhlIGNvbnRhaW5lciB3aWxsIGFjdHVhbGx5IGhhbmRsZSB0aGUgbG9naW4gYWZ0ZXIgd2UgcmV0dXJuIGZyb20KICAgICAgICAgICAgICAgICAvLyB0aGlzIG1ldGhvZC4KICAgICAgICAgICAgICAgICByZXR1cm4gaHR0cE1lc3NhZ2VDb250ZXh0Lm5vdGlmeUNvbnRhaW5lckFib3V0TG9naW4oCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5nZXRDYWxsZXJQcmluY2lwYWwoKSwgcmVzdWx0LmdldENhbGxlckdyb3VwcygpKTsKLSAgICAgICAgICAgIH0gCi0gICAgICAgICAgICAgICAgCisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIHJldHVybiBodHRwTWVzc2FnZUNvbnRleHQucmVzcG9uc2VVbmF1dGhvcml6ZWQoKTsKLSAgICAgICAgfSAKKyAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBodHRwTWVzc2FnZUNvbnRleHQuZG9Ob3RoaW5nKCk7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jdXN0b20taWRlbnRpdHktc3RvcmUtaGFuZGxlci9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9nbGFzc2Zpc2gtd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS1pZGVudGl0eS1zdG9yZS1oYW5kbGVyL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2dsYXNzZmlzaC13ZWIueG1sCmluZGV4IGNkYWY5NDkuLjZjZWZhNzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS1pZGVudGl0eS1zdG9yZS1oYW5kbGVyL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2dsYXNzZmlzaC13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS1pZGVudGl0eS1zdG9yZS1oYW5kbGVyL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2dsYXNzZmlzaC13ZWIueG1sCkBAIC0yNCwzMiArMjQsMzIgQEAKICAgICAgICAgPHJvbGUtbmFtZT5mb288L3JvbGUtbmFtZT4KICAgICAgICAgPGdyb3VwLW5hbWU+Zm9vPC9ncm91cC1uYW1lPgogICAgIDwvc2VjdXJpdHktcm9sZS1tYXBwaW5nPgotICAgIAorCiAgICAgPHNlY3VyaXR5LXJvbGUtbWFwcGluZz4KICAgICAgICAgPHJvbGUtbmFtZT5iYXI8L3JvbGUtbmFtZT4KICAgICAgICAgPGdyb3VwLW5hbWU+YmFyPC9ncm91cC1uYW1lPgogICAgIDwvc2VjdXJpdHktcm9sZS1tYXBwaW5nPgotICAgIAorCiAgICAgPHNlY3VyaXR5LXJvbGUtbWFwcGluZz4KICAgICAgICAgPHJvbGUtbmFtZT5rYXo8L3JvbGUtbmFtZT4KICAgICAgICAgPGdyb3VwLW5hbWU+a2F6PC9ncm91cC1uYW1lPgogICAgIDwvc2VjdXJpdHktcm9sZS1tYXBwaW5nPgotICAgIAorCiAgICAgPHNlY3VyaXR5LXJvbGUtbWFwcGluZz4KICAgICAgICAgPHJvbGUtbmFtZT5iYXo8L3JvbGUtbmFtZT4KICAgICAgICAgPGdyb3VwLW5hbWU+YmF6PC9ncm91cC1uYW1lPgogICAgIDwvc2VjdXJpdHktcm9sZS1tYXBwaW5nPgotICAgIAorCiAgICAgPHNlY3VyaXR5LXJvbGUtbWFwcGluZz4KICAgICAgICAgPHJvbGUtbmFtZT5ncm91cDE8L3JvbGUtbmFtZT4KICAgICAgICAgPGdyb3VwLW5hbWU+Z3JvdXAxPC9ncm91cC1uYW1lPgogICAgIDwvc2VjdXJpdHktcm9sZS1tYXBwaW5nPgotICAgIAorCiAgICAgIDxzZWN1cml0eS1yb2xlLW1hcHBpbmc+CiAgICAgICAgIDxyb2xlLW5hbWU+Z3JvdXAyPC9yb2xlLW5hbWU+CiAgICAgICAgIDxncm91cC1uYW1lPmdyb3VwMjwvZ3JvdXAtbmFtZT4KICAgICA8L3NlY3VyaXR5LXJvbGUtbWFwcGluZz4KLSAgICAKKwogICAgICA8c2VjdXJpdHktcm9sZS1tYXBwaW5nPgogICAgICAgICA8cm9sZS1uYW1lPmdyb3VwMzwvcm9sZS1uYW1lPgogICAgICAgICA8Z3JvdXAtbmFtZT5ncm91cDM8L2dyb3VwLW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jdXN0b20taWRlbnRpdHktc3RvcmUtaGFuZGxlci9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0FwcEN1c3RvbUlkZW50aXR5U3RvcmVIYW5kbGVySVQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS1pZGVudGl0eS1zdG9yZS1oYW5kbGVyL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQXBwQ3VzdG9tSWRlbnRpdHlTdG9yZUhhbmRsZXJJVC5qYXZhCmluZGV4IDljOTg3ZGMuLjQ5ODI1NDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS1pZGVudGl0eS1zdG9yZS1oYW5kbGVyL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQXBwQ3VzdG9tSWRlbnRpdHlTdG9yZUhhbmRsZXJJVC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS1pZGVudGl0eS1zdG9yZS1oYW5kbGVyL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQXBwQ3VzdG9tSWRlbnRpdHlTdG9yZUhhbmRsZXJJVC5qYXZhCkBAIC01MiwxNiArNTIsMTYgQEAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RBdXRoZW50aWNhdGVkKCkgewogICAgICAgICBhc3NlcnRBdXRoZW50aWNhdGVkKAotICAgICAgICAgICAgIndlYiIsICJyZXphIiwgCisgICAgICAgICAgICAid2ViIiwgInJlemEiLAogICAgICAgICAgICAgcmVhZEZyb21TZXJ2ZXIoIi9zZXJ2bGV0P25hbWU9cmV6YSZwYXNzd29yZD1zZWNyZXQxIiksCi0gICAgICAgICAgICAvLyBPbmx5IGdyb3VwcyBmcm9tIHRoZSAKKyAgICAgICAgICAgIC8vIE9ubHkgZ3JvdXBzIGZyb20gdGhlCiAgICAgICAgICAgICAiYmF6Iik7CiAgICAgfQogCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0QmxhY2tsaXN0ZWQoKSB7CiAgICAgICAgIGFzc2VydE5vdEF1dGhlbnRpY2F0ZWQoCi0gICAgICAgICAgICAid2ViIiwgInJ1ZHkiLCAKKyAgICAgICAgICAgICJ3ZWIiLCAicnVkeSIsCiAgICAgICAgICAgICByZWFkRnJvbVNlcnZlcigiL3NlcnZsZXQ/bmFtZT1ydWR5JnBhc3N3b3JkPXB3IiksCiAgICAgICAgICAgICAiZm9vIiwgImJhciIpOwogICAgIH0KQEAgLTc1LDcgKzc1LDcgQEAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3ROb3RBdXRoZW50aWNhdGVkV3JvbmdOYW1lKCkgewogICAgICAgICBhc3NlcnROb3RBdXRoZW50aWNhdGVkKAotICAgICAgICAgICAgIndlYiIsICJyZXphIiwgCisgICAgICAgICAgICAid2ViIiwgInJlemEiLAogICAgICAgICAgICAgcmVhZEZyb21TZXJ2ZXIoIi9zZXJ2bGV0P25hbWU9cm9tbyZwYXNzd29yZD1zZWNyZXQxIiksCiAgICAgICAgICAgICAiZm9vIiwgImJhciIsICJiYXoiKTsKICAgICB9CkBAIC04Myw3ICs4Myw3IEBACiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0Tm90QXV0aGVudGljYXRlZFdyb25nUGFzc3dvcmQoKSB7CiAgICAgICAgIGFzc2VydE5vdEF1dGhlbnRpY2F0ZWQoCi0gICAgICAgICAgICAid2ViIiwgInJlemEiLCAKKyAgICAgICAgICAgICJ3ZWIiLCAicmV6YSIsCiAgICAgICAgICAgICByZWFkRnJvbVNlcnZlcigiL3NlcnZsZXQ/bmFtZT1yZXphJnBhc3N3b3JkPXdyb25ncGFzc3dvcmQiKSwKICAgICAgICAgICAgICJmb28iLCAiYmFyIiwgImJheiIpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS1yZW1lbWJlcm1lL3BvbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jdXN0b20tcmVtZW1iZXJtZS9wb20ueG1sCmluZGV4IDZmZDQxYzIuLmY3Y2EwMGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS1yZW1lbWJlcm1lL3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tLXJlbWVtYmVybWUvcG9tLnhtbApAQCAtMTcsMjEgKzE3LDIxIEBACiAtLT4KIAogPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KLQk8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5nbGFzc2Zpc2guc290ZXJpYS50ZXN0PC9ncm91cElkPgogICAgIDxhcnRpZmFjdElkPnNvdGVyaWE8L2FydGlmYWN0SWQ+CiAgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCi0JPGFydGlmYWN0SWQ+YXBwLWN1c3RvbS1yZW1lbWJlcm1lPC9hcnRpZmFjdElkPgotCTxwYWNrYWdpbmc+d2FyPC9wYWNrYWdpbmc+Ci0JCi0JPGJ1aWxkPgorICAgIDxhcnRpZmFjdElkPmFwcC1jdXN0b20tcmVtZW1iZXJtZTwvYXJ0aWZhY3RJZD4KKyAgICA8cGFja2FnaW5nPndhcjwvcGFja2FnaW5nPgorCisgICAgPGJ1aWxkPgogICAgICAgICA8ZmluYWxOYW1lPmFwcC1jdXN0b20tcmVtZW1iZXJtZTwvZmluYWxOYW1lPgotCTwvYnVpbGQ+Ci0gICAgCisgICAgPC9idWlsZD4KKwogICAgIDxwcm9wZXJ0aWVzPgogICAgICAgICA8ZmFpbE9uTWlzc2luZ1dlYlhtbD5mYWxzZTwvZmFpbE9uTWlzc2luZ1dlYlhtbD4KICAgICA8L3Byb3BlcnRpZXM+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jdXN0b20tcmVtZW1iZXJtZS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1NlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS1yZW1lbWJlcm1lL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvU2VydmxldC5qYXZhCmluZGV4IDZjZmFiNTcuLmRkYmRkZTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS1yZW1lbWJlcm1lL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS1yZW1lbWJlcm1lL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvU2VydmxldC5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAvKioKICAqIFRlc3QgU2VydmxldCB0aGF0IHByaW50cyBvdXQgdGhlIG5hbWUgb2YgdGhlIGF1dGhlbnRpY2F0ZWQgY2FsbGVyIGFuZCB3aGV0aGVyCiAgKiB0aGlzIGNhbGxlciBpcyBpbiBhbnkgb2YgdGhlIHJvbGVzIHtmb28sIGJhciwga2F6fQotICogCisgKgogICoKICAqLwogQERlY2xhcmVSb2xlcyh7ICJmb28iLCAiYmFyIiwgImtheiIgfSkKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICAgICAgICAgIHJlcXVlc3QubG9nb3V0KCk7IC8vIHNsaWdodGx5IGlsbC1kZWZpbmVkLCBidXQgb25seSBmb3IgY3VycmVudCByZXF1ZXN0CiAgICAgICAgICAgICByZXF1ZXN0LmdldFNlc3Npb24oKS5pbnZhbGlkYXRlKCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmVzcG9uc2UuZ2V0V3JpdGVyKCkud3JpdGUoIlRoaXMgaXMgYSBzZXJ2bGV0IFxuIik7CiAKICAgICAgICAgU3RyaW5nIHdlYk5hbWUgPSBudWxsOwpAQCAtNTcsOSArNTcsOSBAQAogICAgICAgICByZXNwb25zZS5nZXRXcml0ZXIoKS53cml0ZSgid2ViIHVzZXIgaGFzIHJvbGUgXCJmb29cIjogIiArIHJlcXVlc3QuaXNVc2VySW5Sb2xlKCJmb28iKSArICJcbiIpOwogICAgICAgICByZXNwb25zZS5nZXRXcml0ZXIoKS53cml0ZSgid2ViIHVzZXIgaGFzIHJvbGUgXCJiYXJcIjogIiArIHJlcXVlc3QuaXNVc2VySW5Sb2xlKCJiYXIiKSArICJcbiIpOwogICAgICAgICByZXNwb25zZS5nZXRXcml0ZXIoKS53cml0ZSgid2ViIHVzZXIgaGFzIHJvbGUgXCJrYXpcIjogIiArIHJlcXVlc3QuaXNVc2VySW5Sb2xlKCJrYXoiKSArICJcbiIpOwotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgbWVjaGFuaXNtQ2FsbGVkID0gKFN0cmluZykgcmVxdWVzdC5nZXRBdHRyaWJ1dGUoImF1dGhlbnRpY2F0aW9uLW1lY2hhbmlzbS1jYWxsZWQiKTsKLSAgICAgICAgCisKICAgICAgICAgcmVzcG9uc2UuZ2V0V3JpdGVyKCkud3JpdGUoIlxuYXV0aGVudGljYXRpb24gbWVjaGFuaXNtIGNhbGxlZDogIiArIChtZWNoYW5pc21DYWxsZWQgIT0gbnVsbD8gbWVjaGFuaXNtQ2FsbGVkIDogZmFsc2UpICsgIlxuIik7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jdXN0b20tcmVtZW1iZXJtZS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1Rlc3RBdXRoZW50aWNhdGlvbk1lY2hhbmlzbS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tLXJlbWVtYmVybWUvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9UZXN0QXV0aGVudGljYXRpb25NZWNoYW5pc20uamF2YQppbmRleCA4M2YzMGE0Li4xOGFkMGI1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jdXN0b20tcmVtZW1iZXJtZS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1Rlc3RBdXRoZW50aWNhdGlvbk1lY2hhbmlzbS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS1yZW1lbWJlcm1lL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvVGVzdEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtLmphdmEKQEAgLTQ5LDcgKzQ5LDcgQEAKIAogICAgIEBJbmplY3QKICAgICBwcml2YXRlIFJlbWVtYmVyTWVDb25maWdCZWFuIHJlbWVtYmVyTWVDb25maWdCZWFuOwotICAgIAorCiAgICAgQEluamVjdAogICAgIHByaXZhdGUgSWRlbnRpdHlTdG9yZUhhbmRsZXIgaWRlbnRpdHlTdG9yZUhhbmRsZXI7CiAKQEAgLTU3LDcgKzU3LDcgQEAKICAgICBwdWJsaWMgQXV0aGVudGljYXRpb25TdGF0dXMgdmFsaWRhdGVSZXF1ZXN0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlLCBIdHRwTWVzc2FnZUNvbnRleHQgaHR0cE1lc3NhZ2VDb250ZXh0KSB0aHJvd3MgQXV0aGVudGljYXRpb25FeGNlcHRpb24gewogCiAgICAgICAgIHJlcXVlc3Quc2V0QXR0cmlidXRlKCJhdXRoZW50aWNhdGlvbi1tZWNoYW5pc20tY2FsbGVkIiwgInRydWUiKTsKLSAgICAgICAgCisKICAgICAgICAgaWYgKHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJuYW1lIikgIT0gbnVsbCAmJiByZXF1ZXN0LmdldFBhcmFtZXRlcigicGFzc3dvcmQiKSAhPSBudWxsKSB7CiAKICAgICAgICAgICAgIC8vIEdldCB0aGUgKGNhbGxlcikgbmFtZSBhbmQgcGFzc3dvcmQgZnJvbSB0aGUgcmVxdWVzdApAQCAtNzQsMjcgKzc0LDI3IEBACiAKICAgICAgICAgICAgIGlmIChyZXN1bHQuZ2V0U3RhdHVzKCkgPT0gVkFMSUQpIHsKICAgICAgICAgICAgICAgICAvLyBDb21tdW5pY2F0ZSB0aGUgZGV0YWlscyBvZiB0aGUgYXV0aGVudGljYXRlZCB1c2VyIHRvIHRoZQotICAgICAgICAgICAgICAgIC8vIGNvbnRhaW5lci4gSW4gbWFueSBjYXNlcyB0aGUgdW5kZXJseWluZyBoYW5kbGVyIHdpbGwganVzdCBzdG9yZSB0aGUgZGV0YWlscyAKLSAgICAgICAgICAgICAgICAvLyBhbmQgdGhlIGNvbnRhaW5lciB3aWxsIGFjdHVhbGx5IGhhbmRsZSB0aGUgbG9naW4gYWZ0ZXIgd2UgcmV0dXJuIGZyb20gCisgICAgICAgICAgICAgICAgLy8gY29udGFpbmVyLiBJbiBtYW55IGNhc2VzIHRoZSB1bmRlcmx5aW5nIGhhbmRsZXIgd2lsbCBqdXN0IHN0b3JlIHRoZSBkZXRhaWxzCisgICAgICAgICAgICAgICAgLy8gYW5kIHRoZSBjb250YWluZXIgd2lsbCBhY3R1YWxseSBoYW5kbGUgdGhlIGxvZ2luIGFmdGVyIHdlIHJldHVybiBmcm9tCiAgICAgICAgICAgICAgICAgLy8gdGhpcyBtZXRob2QuCiAgICAgICAgICAgICAgICAgcmV0dXJuIGh0dHBNZXNzYWdlQ29udGV4dC5ub3RpZnlDb250YWluZXJBYm91dExvZ2luKAogICAgICAgICAgICAgICAgICAgICByZXN1bHQuZ2V0Q2FsbGVyUHJpbmNpcGFsKCksIHJlc3VsdC5nZXRDYWxsZXJHcm91cHMoKSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHJldHVybiBodHRwTWVzc2FnZUNvbnRleHQucmVzcG9uc2VVbmF1dGhvcml6ZWQoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAKKyAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBodHRwTWVzc2FnZUNvbnRleHQuZG9Ob3RoaW5nKCk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIEJvb2xlYW4gaXNSZW1lbWJlck1lKEh0dHBNZXNzYWdlQ29udGV4dCBodHRwTWVzc2FnZUNvbnRleHQpIHsKICAgICAgICAgcmV0dXJuIGh0dHBNZXNzYWdlQ29udGV4dC5nZXRSZXF1ZXN0KCkuZ2V0UGFyYW1ldGVyKCJyZW1lbWJlcm1lIikgIT0gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICAvLyBXb3JrYXJvdW5kIGZvciBwb3NzaWJsZSBDREkgYnVnOyBhdCBsZWFzdCBpbiBXZWxkIDIuMy4yIGRlZmF1bHQgbWV0aG9kcyBkb24ndCBzZWVtIHRvIGJlIGludGVyY2VwdGVkCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgY2xlYW5TdWJqZWN0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlLCBIdHRwTWVzc2FnZUNvbnRleHQgaHR0cE1lc3NhZ2VDb250ZXh0KSB7Ci0gICAgCUh0dHBBdXRoZW50aWNhdGlvbk1lY2hhbmlzbS5zdXBlci5jbGVhblN1YmplY3QocmVxdWVzdCwgcmVzcG9uc2UsIGh0dHBNZXNzYWdlQ29udGV4dCk7CisgICAgICAgIEh0dHBBdXRoZW50aWNhdGlvbk1lY2hhbmlzbS5zdXBlci5jbGVhblN1YmplY3QocmVxdWVzdCwgcmVzcG9uc2UsIGh0dHBNZXNzYWdlQ29udGV4dCk7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jdXN0b20tcmVtZW1iZXJtZS9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9nbGFzc2Zpc2gtd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS1yZW1lbWJlcm1lL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2dsYXNzZmlzaC13ZWIueG1sCmluZGV4IDY5MzcyNDQuLjExZDBlZTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS1yZW1lbWJlcm1lL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2dsYXNzZmlzaC13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS1yZW1lbWJlcm1lL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2dsYXNzZmlzaC13ZWIueG1sCkBAIC0yNCwxMiArMjQsMTIgQEAKICAgICAgICAgPHJvbGUtbmFtZT5mb288L3JvbGUtbmFtZT4KICAgICAgICAgPGdyb3VwLW5hbWU+Zm9vPC9ncm91cC1uYW1lPgogICAgIDwvc2VjdXJpdHktcm9sZS1tYXBwaW5nPgotICAgIAorCiAgICAgPHNlY3VyaXR5LXJvbGUtbWFwcGluZz4KICAgICAgICAgPHJvbGUtbmFtZT5iYXI8L3JvbGUtbmFtZT4KICAgICAgICAgPGdyb3VwLW5hbWU+YmFyPC9ncm91cC1uYW1lPgogICAgIDwvc2VjdXJpdHktcm9sZS1tYXBwaW5nPgotICAgIAorCiAgICAgPHNlY3VyaXR5LXJvbGUtbWFwcGluZz4KICAgICAgICAgPHJvbGUtbmFtZT5rYXo8L3JvbGUtbmFtZT4KICAgICAgICAgPGdyb3VwLW5hbWU+a2F6PC9ncm91cC1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tLXJlbWVtYmVybWUvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9BcHBDdXN0b21SZW1lbWJlck1lSVQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS1yZW1lbWJlcm1lL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQXBwQ3VzdG9tUmVtZW1iZXJNZUlULmphdmEKaW5kZXggYTM4NzQ3ZS4uYjc5NzNlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tLXJlbWVtYmVybWUvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9BcHBDdXN0b21SZW1lbWJlck1lSVQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jdXN0b20tcmVtZW1iZXJtZS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0FwcEN1c3RvbVJlbWVtYmVyTWVJVC5qYXZhCkBAIC00Niw3ICs0Niw3IEBACiAgICAgcHVibGljIHN0YXRpYyB2b2lkIHByaW50U3VtbWFyeSgpewogICAgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9Ci0gICAKKwogICAgIEBEZXBsb3ltZW50KHRlc3RhYmxlID0gZmFsc2UpCiAgICAgcHVibGljIHN0YXRpYyBBcmNoaXZlPD8+IGNyZWF0ZURlcGxveW1lbnQoKSB7CiAgICAgICAgIHJldHVybiBtYXZlbldhcigpOwpAQCAtNzIsMTI0ICs3MiwxMjQgQEAKICAgICAgICAgYXNzZXJ0RGVmYXVsdEF1dGhlbnRpY2F0ZWQoCiAgICAgICAgICAgICByZWFkRnJvbVNlcnZlcigiL3NlcnZsZXQ/bmFtZT1yZXphJnBhc3N3b3JkPXNlY3JldDEiKSk7CiAgICAgfQotICAgIAorCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0Tm90QXV0aGVudGljYXRlZCgpIHsKICAgICAgICAgYXNzZXJ0RGVmYXVsdE5vdEF1dGhlbnRpY2F0ZWQoCiAgICAgICAgICAgICByZWFkRnJvbVNlcnZlcigiL3NlcnZsZXQiKSk7CiAgICAgfQotICAgIAorCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0Tm90QXV0aGVudGljYXRlZFdyb25nTmFtZSgpIHsKICAgICAgICAgYXNzZXJ0RGVmYXVsdE5vdEF1dGhlbnRpY2F0ZWQoCiAgICAgICAgICAgICByZWFkRnJvbVNlcnZlcigiL3NlcnZsZXQ/bmFtZT1yb21vJnBhc3N3b3JkPXNlY3JldDEiKSk7CiAgICAgfQotICAgIAorCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0Tm90QXV0aGVudGljYXRlZFdyb25nUGFzc3dvcmQoKSB7CiAgICAgICAgIGFzc2VydERlZmF1bHROb3RBdXRoZW50aWNhdGVkKAogICAgICAgICAgICAgcmVhZEZyb21TZXJ2ZXIoIi9zZXJ2bGV0P25hbWU9cmV6YSZwYXNzd29yZD13cm9uZ3Bhc3N3b3JkIikpOwogICAgIH0KLSAgICAKKwogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdEF1dGhlbnRpY2F0ZWRSZW1lbWJlck1lKCkgewotICAgICAgICAKKwogICAgICAgICAvLyAxLiBJbml0aWFsbHkgcmVxdWVzdCBwYWdlIHdoZW4gd2UncmUgbm90IGF1dGhlbnRpY2F0ZWQKLSAgICAgICAgCisKICAgICAgICAgYXNzZXJ0RGVmYXVsdE5vdEF1dGhlbnRpY2F0ZWQoCiAgICAgICAgICAgICByZWFkRnJvbVNlcnZlcigiL3NlcnZsZXQiKSk7Ci0gICAgICAgIAotICAgICAgICAKKworCiAgICAgICAgIC8vIDIuIEF1dGhlbnRpY2F0ZSB3aXRob3V0IHJlbWVtYmVyIG1lCi0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyByZXNwb25zZSA9IHJlYWRGcm9tU2VydmVyKCIvc2VydmxldD9uYW1lPXJlemEmcGFzc3dvcmQ9c2VjcmV0MSIpOwotICAgICAgICAKKwogICAgICAgICBhc3NlcnREZWZhdWx0QXV0aGVudGljYXRlZCgKICAgICAgICAgICAgIHJlc3BvbnNlKTsKLSAgICAgICAgCisKICAgICAgICAgLy8gRm9yIHRoZSBpbml0aWFsIGF1dGhlbnRpY2F0aW9uLCB0aGUgbWVjaGFuaXNtIHNob3VsZCBiZSBjYWxsZWQKLSAgICAgICAgCisKICAgICAgICAgYXNzZXJ0VHJ1ZSgKLSAgICAgICAgICAgICJBdXRoZW50aWNhdGlvbiBtZWNoYW5pc20gc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQsIGJ1dCB3YXNuJ3QiLCAKKyAgICAgICAgICAgICJBdXRoZW50aWNhdGlvbiBtZWNoYW5pc20gc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQsIGJ1dCB3YXNuJ3QiLAogICAgICAgICAgICAgcmVzcG9uc2UuY29udGFpbnMoImF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbSBjYWxsZWQ6IHRydWUiKSk7Ci0gICAgICAgIAotICAgICAgICAKKworCiAgICAgICAgIC8vIDMuIFJlcXVlc3Qgc2FtZSBwYWdlIGFnYWluIHdpdGhpbiBzYW1lIGh0dHAgc2Vzc2lvbiwgd2l0aG91dCByZW1lbWJlciBtZQogICAgICAgICAvLyAgICBzcGVjaWZpZWQgc2hvdWxkIE5PVCBiZSBhdXRoZW50aWNhdGVkCi0gICAgICAgIAorCiAgICAgICAgIHJlc3BvbnNlID0gcmVhZEZyb21TZXJ2ZXIoIi9zZXJ2bGV0Iik7Ci0gICAgICAgIAorCiAgICAgICAgIGFzc2VydERlZmF1bHROb3RBdXRoZW50aWNhdGVkKAogICAgICAgICAgICAgcmVzcG9uc2UpOwotICAgICAgICAKLSAgIAorCisKICAgICAgICAgLy8gNC4gQXV0aGVudGljYXRlIHdpdGggcmVtZW1iZXIgbWUKLSAgICAgICAgCisKICAgICAgICAgcmVzcG9uc2UgPSByZWFkRnJvbVNlcnZlcigiL3NlcnZsZXQ/bmFtZT1yZXphJnBhc3N3b3JkPXNlY3JldDEmcmVtZW1iZXJtZT10cnVlIik7Ci0gICAgICAgIAorCiAgICAgICAgIGFzc2VydERlZmF1bHRBdXRoZW50aWNhdGVkKAogICAgICAgICAgICAgcmVzcG9uc2UpOwotICAgICAgICAKKwogICAgICAgICAvLyBGb3IgdGhlIGluaXRpYWwgYXV0aGVudGljYXRpb24sIHRoZSBtZWNoYW5pc20gc2hvdWxkIGJlIGNhbGxlZCBhZ2FpbgotICAgICAgICAKKwogICAgICAgICBhc3NlcnRUcnVlKAotICAgICAgICAgICAgIkF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbSBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCwgYnV0IHdhc24ndCIsIAorICAgICAgICAgICAgIkF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbSBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCwgYnV0IHdhc24ndCIsCiAgICAgICAgICAgICByZXNwb25zZS5jb250YWlucygiYXV0aGVudGljYXRpb24gbWVjaGFuaXNtIGNhbGxlZDogdHJ1ZSIpKTsKLSAgICAgICAgCi0gICAgICAgIAorCisKICAgICAgICAgLy8gNS4gUmVxdWVzdCBzYW1lIHBhZ2UgYWdhaW4gd2l0aGluIHNhbWUgaHR0cCBzZXNzaW9uLCB3aXRoIHJlbWVtYmVyIG1lCiAgICAgICAgIC8vICAgIHNwZWNpZmllZCBzaG91bGQgYmUgYXV0aGVudGljYXRlZAotICAgICAgICAKKwogICAgICAgICByZXNwb25zZSA9IHJlYWRGcm9tU2VydmVyKCIvc2VydmxldCIpOwotICAgICAgICAKKwogICAgICAgICBhc3NlcnREZWZhdWx0QXV0aGVudGljYXRlZCgKICAgICAgICAgICAgIHJlc3BvbnNlKTsKLSAgICAgICAgCisKICAgICAgICAgLy8gRm9yIHRoZSBzdWJzZXF1ZW50IGF1dGhlbnRpY2F0aW9uLCB0aGUgbWVjaGFuaXNtIHNob3VsZCBub3QgYmUgY2FsbGVkIGFnYWluCiAgICAgICAgIC8vICh0aGUgcmVtZW1iZXIgbWUgaW50ZXJjZXB0b3IgdGFrZXMgY2FyZSBvZiB0aGlzKQotICAgICAgICAKKwogICAgICAgICBhc3NlcnRUcnVlKAotICAgICAgICAgICAgIkF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbSBzaG91bGQgbm90IGhhdmUgYmVlbiBjYWxsZWQsIGJ1dCB3YXMiLCAKKyAgICAgICAgICAgICJBdXRoZW50aWNhdGlvbiBtZWNoYW5pc20gc2hvdWxkIG5vdCBoYXZlIGJlZW4gY2FsbGVkLCBidXQgd2FzIiwKICAgICAgICAgICAgIHJlc3BvbnNlLmNvbnRhaW5zKCJhdXRoZW50aWNhdGlvbiBtZWNoYW5pc20gY2FsbGVkOiBmYWxzZSIpKTsKLSAgICAgICAgCi0gICAgICAgIAorCisKICAgICAgICAgLy8gNi4gIkV4cGlyZSIgdGhlIHNlc3Npb24gYnkgcmVtb3ZpbmcgYWxsIGNvb2tpZXMgZXhjZXB0IHRoZQogICAgICAgICAvLyAgICByZW1lbWJlciBtZSBjb29raWUKLSAgICAgICAgCisKICAgICAgICAgZm9yIChDb29raWUgY29va2llIDogZ2V0V2ViQ2xpZW50KCkuZ2V0Q29va2llTWFuYWdlcigpLmdldENvb2tpZXMoKSkgewogICAgICAgICAgICAgaWYgKCEiR0xBU1NGSVNIQ09PS0lFIi5lcXVhbHMoY29va2llLmdldE5hbWUoKSkpIHsKICAgICAgICAgICAgICAgICBnZXRXZWJDbGllbnQoKS5nZXRDb29raWVNYW5hZ2VyKCkucmVtb3ZlQ29va2llKGNvb2tpZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgLy8gUmVxdWVzdCBzYW1lIHBhZ2UgYWdhaW4KLSAgICAgICAgCisKICAgICAgICAgcmVzcG9uc2UgPSByZWFkRnJvbVNlcnZlcigiL3NlcnZsZXQiKTsKLSAgICAgICAgCisKICAgICAgICAgLy8gU2hvdWxkIHN0aWxsIGJlIGF1dGhlbnRpY2F0ZWQKLSAgICAgICAgCisKICAgICAgICAgYXNzZXJ0RGVmYXVsdEF1dGhlbnRpY2F0ZWQoCiAgICAgICAgICAgICByZXNwb25zZSk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIEZvciB0aGUgc3Vic2VxdWVudCBhdXRoZW50aWNhdGlvbiwgdGhlIG1lY2hhbmlzbSBzaG91bGQgbm90IGJlIGNhbGxlZCBhZ2FpbgogICAgICAgICAvLyAodGhlIHJlbWVtYmVyIG1lIGludGVyY2VwdG9yIHRha2VzIGNhcmUgb2YgdGhpcykKLSAgICAgICAgCisKICAgICAgICAgYXNzZXJ0VHJ1ZSgKLSAgICAgICAgICAgICJBdXRoZW50aWNhdGlvbiBtZWNoYW5pc20gc2hvdWxkIG5vdCBoYXZlIGJlZW4gY2FsbGVkLCBidXQgd2FzIiwgCisgICAgICAgICAgICAiQXV0aGVudGljYXRpb24gbWVjaGFuaXNtIHNob3VsZCBub3QgaGF2ZSBiZWVuIGNhbGxlZCwgYnV0IHdhcyIsCiAgICAgICAgICAgICByZXNwb25zZS5jb250YWlucygiYXV0aGVudGljYXRpb24gbWVjaGFuaXNtIGNhbGxlZDogZmFsc2UiKSk7CiAKLSAgICAgICAgCisKICAgICAgICAgLy8gNy4gTG9nb3V0LiBTaG91bGQgbm90IGJlIGF1dGhlbnRpY2F0ZWQgYW55bW9yZQotICAgICAgICAKKwogICAgICAgICBhc3NlcnREZWZhdWx0Tm90QXV0aGVudGljYXRlZCgKICAgICAgICAgICAgIHJlYWRGcm9tU2VydmVyKCIvc2VydmxldD9sb2dvdXQ9dHJ1ZSIpKTsKLSAgICAgICAgCi0gICAgICAgIAorCisKICAgICAgICAgLy8gOC4gUmVxdWVzdCBzYW1lIHBhZ2UgYWdhaW4sIHNob3VsZCBzdGlsbCBub3QgYmUgYXV0aGVudGljYXRlZAotICAgICAgICAKKwogICAgICAgICBhc3NlcnREZWZhdWx0Tm90QXV0aGVudGljYXRlZCgKICAgICAgICAgICAgIHJlYWRGcm9tU2VydmVyKCIvc2VydmxldCIpKTsKLSAgICAgICAKKwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tLXNlc3Npb24vcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS1zZXNzaW9uL3BvbS54bWwKaW5kZXggZWQ0N2NkMy4uNmZlOWJjZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tLXNlc3Npb24vcG9tLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jdXN0b20tc2Vzc2lvbi9wb20ueG1sCkBAIC0xNywyMSArMTcsMjEgQEAKIC0tPgogCiA8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgotCTxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmdsYXNzZmlzaC5zb3RlcmlhLnRlc3Q8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+c290ZXJpYTwvYXJ0aWZhY3RJZD4KICAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKLQk8YXJ0aWZhY3RJZD5hcHAtY3VzdG9tLXNlc3Npb248L2FydGlmYWN0SWQ+Ci0JPHBhY2thZ2luZz53YXI8L3BhY2thZ2luZz4KLQkKLQk8YnVpbGQ+CisgICAgPGFydGlmYWN0SWQ+YXBwLWN1c3RvbS1zZXNzaW9uPC9hcnRpZmFjdElkPgorICAgIDxwYWNrYWdpbmc+d2FyPC9wYWNrYWdpbmc+CisKKyAgICA8YnVpbGQ+CiAgICAgICAgIDxmaW5hbE5hbWU+YXBwLWN1c3RvbS1zZXNzaW9uPC9maW5hbE5hbWU+Ci0JPC9idWlsZD4KLSAgICAKKyAgICA8L2J1aWxkPgorCiAgICAgPHByb3BlcnRpZXM+CiAgICAgICAgIDxmYWlsT25NaXNzaW5nV2ViWG1sPmZhbHNlPC9mYWlsT25NaXNzaW5nV2ViWG1sPgogICAgIDwvcHJvcGVydGllcz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS1zZXNzaW9uL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tLXNlc3Npb24vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9TZXJ2bGV0LmphdmEKaW5kZXggNmNmYWI1Ny4uZGRiZGRlMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tLXNlc3Npb24vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9TZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tLXNlc3Npb24vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9TZXJ2bGV0LmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKIC8qKgogICogVGVzdCBTZXJ2bGV0IHRoYXQgcHJpbnRzIG91dCB0aGUgbmFtZSBvZiB0aGUgYXV0aGVudGljYXRlZCBjYWxsZXIgYW5kIHdoZXRoZXIKICAqIHRoaXMgY2FsbGVyIGlzIGluIGFueSBvZiB0aGUgcm9sZXMge2ZvbywgYmFyLCBrYXp9Ci0gKiAKKyAqCiAgKgogICovCiBARGVjbGFyZVJvbGVzKHsgImZvbyIsICJiYXIiLCAia2F6IiB9KQpAQCAtNDQsNyArNDQsNyBAQAogICAgICAgICAgICAgcmVxdWVzdC5sb2dvdXQoKTsgLy8gc2xpZ2h0bHkgaWxsLWRlZmluZWQsIGJ1dCBvbmx5IGZvciBjdXJyZW50IHJlcXVlc3QKICAgICAgICAgICAgIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLmludmFsaWRhdGUoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXNwb25zZS5nZXRXcml0ZXIoKS53cml0ZSgiVGhpcyBpcyBhIHNlcnZsZXQgXG4iKTsKIAogICAgICAgICBTdHJpbmcgd2ViTmFtZSA9IG51bGw7CkBAIC01Nyw5ICs1Nyw5IEBACiAgICAgICAgIHJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKCJ3ZWIgdXNlciBoYXMgcm9sZSBcImZvb1wiOiAiICsgcmVxdWVzdC5pc1VzZXJJblJvbGUoImZvbyIpICsgIlxuIik7CiAgICAgICAgIHJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKCJ3ZWIgdXNlciBoYXMgcm9sZSBcImJhclwiOiAiICsgcmVxdWVzdC5pc1VzZXJJblJvbGUoImJhciIpICsgIlxuIik7CiAgICAgICAgIHJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKCJ3ZWIgdXNlciBoYXMgcm9sZSBcImthelwiOiAiICsgcmVxdWVzdC5pc1VzZXJJblJvbGUoImtheiIpICsgIlxuIik7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyBtZWNoYW5pc21DYWxsZWQgPSAoU3RyaW5nKSByZXF1ZXN0LmdldEF0dHJpYnV0ZSgiYXV0aGVudGljYXRpb24tbWVjaGFuaXNtLWNhbGxlZCIpOwotICAgICAgICAKKwogICAgICAgICByZXNwb25zZS5nZXRXcml0ZXIoKS53cml0ZSgiXG5hdXRoZW50aWNhdGlvbiBtZWNoYW5pc20gY2FsbGVkOiAiICsgKG1lY2hhbmlzbUNhbGxlZCAhPSBudWxsPyBtZWNoYW5pc21DYWxsZWQgOiBmYWxzZSkgKyAiXG4iKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS1zZXNzaW9uL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvVGVzdEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jdXN0b20tc2Vzc2lvbi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1Rlc3RBdXRoZW50aWNhdGlvbk1lY2hhbmlzbS5qYXZhCmluZGV4IDhkZjEwMjEuLjIyN2FlNGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS1zZXNzaW9uL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvVGVzdEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tLXNlc3Npb24vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9UZXN0QXV0aGVudGljYXRpb25NZWNoYW5pc20uamF2YQpAQCAtMzYsNyArMzYsNyBAQAogQFJlcXVlc3RTY29wZWQKIEBBdXRvQXBwbHlTZXNzaW9uCiBwdWJsaWMgY2xhc3MgVGVzdEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtIGltcGxlbWVudHMgSHR0cEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtIHsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBwcml2YXRlIElkZW50aXR5U3RvcmVIYW5kbGVyIGlkZW50aXR5U3RvcmVIYW5kbGVyOwogCkBAIC00NCw3ICs0NCw3IEBACiAgICAgcHVibGljIEF1dGhlbnRpY2F0aW9uU3RhdHVzIHZhbGlkYXRlUmVxdWVzdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSwgSHR0cE1lc3NhZ2VDb250ZXh0IGh0dHBNZXNzYWdlQ29udGV4dCkgdGhyb3dzIEF1dGhlbnRpY2F0aW9uRXhjZXB0aW9uIHsKIAogICAgICAgICByZXF1ZXN0LnNldEF0dHJpYnV0ZSgiYXV0aGVudGljYXRpb24tbWVjaGFuaXNtLWNhbGxlZCIsICJ0cnVlIik7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChyZXF1ZXN0LmdldFBhcmFtZXRlcigibmFtZSIpICE9IG51bGwgJiYgcmVxdWVzdC5nZXRQYXJhbWV0ZXIoInBhc3N3b3JkIikgIT0gbnVsbCkgewogCiAgICAgICAgICAgICAvLyBHZXQgdGhlIChjYWxsZXIpIG5hbWUgYW5kIHBhc3N3b3JkIGZyb20gdGhlIHJlcXVlc3QKQEAgLTYxLDE3ICs2MSwxNyBAQAogCiAgICAgICAgICAgICBpZiAocmVzdWx0LmdldFN0YXR1cygpID09IFZBTElEKSB7CiAgICAgICAgICAgICAgICAgLy8gQ29tbXVuaWNhdGUgdGhlIGRldGFpbHMgb2YgdGhlIGF1dGhlbnRpY2F0ZWQgdXNlciB0byB0aGUKLSAgICAgICAgICAgICAgICAvLyBjb250YWluZXIuIEluIG1hbnkgY2FzZXMgdGhlIHVuZGVybHlpbmcgaGFuZGxlciB3aWxsIGp1c3Qgc3RvcmUgdGhlIGRldGFpbHMgCi0gICAgICAgICAgICAgICAgLy8gYW5kIHRoZSBjb250YWluZXIgd2lsbCBhY3R1YWxseSBoYW5kbGUgdGhlIGxvZ2luIGFmdGVyIHdlIHJldHVybiBmcm9tIAorICAgICAgICAgICAgICAgIC8vIGNvbnRhaW5lci4gSW4gbWFueSBjYXNlcyB0aGUgdW5kZXJseWluZyBoYW5kbGVyIHdpbGwganVzdCBzdG9yZSB0aGUgZGV0YWlscworICAgICAgICAgICAgICAgIC8vIGFuZCB0aGUgY29udGFpbmVyIHdpbGwgYWN0dWFsbHkgaGFuZGxlIHRoZSBsb2dpbiBhZnRlciB3ZSByZXR1cm4gZnJvbQogICAgICAgICAgICAgICAgIC8vIHRoaXMgbWV0aG9kLgogICAgICAgICAgICAgICAgIHJldHVybiBodHRwTWVzc2FnZUNvbnRleHQubm90aWZ5Q29udGFpbmVyQWJvdXRMb2dpbigKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmdldENhbGxlclByaW5jaXBhbCgpLCByZXN1bHQuZ2V0Q2FsbGVyR3JvdXBzKCkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICByZXR1cm4gaHR0cE1lc3NhZ2VDb250ZXh0LnJlc3BvbnNlVW5hdXRob3JpemVkKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gCisgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gaHR0cE1lc3NhZ2VDb250ZXh0LmRvTm90aGluZygpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tLXNlc3Npb24vc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvZ2xhc3NmaXNoLXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jdXN0b20tc2Vzc2lvbi9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9nbGFzc2Zpc2gtd2ViLnhtbAppbmRleCA2OTM3MjQ0Li4xMWQwZWU2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jdXN0b20tc2Vzc2lvbi9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9nbGFzc2Zpc2gtd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jdXN0b20tc2Vzc2lvbi9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9nbGFzc2Zpc2gtd2ViLnhtbApAQCAtMjQsMTIgKzI0LDEyIEBACiAgICAgICAgIDxyb2xlLW5hbWU+Zm9vPC9yb2xlLW5hbWU+CiAgICAgICAgIDxncm91cC1uYW1lPmZvbzwvZ3JvdXAtbmFtZT4KICAgICA8L3NlY3VyaXR5LXJvbGUtbWFwcGluZz4KLSAgICAKKwogICAgIDxzZWN1cml0eS1yb2xlLW1hcHBpbmc+CiAgICAgICAgIDxyb2xlLW5hbWU+YmFyPC9yb2xlLW5hbWU+CiAgICAgICAgIDxncm91cC1uYW1lPmJhcjwvZ3JvdXAtbmFtZT4KICAgICA8L3NlY3VyaXR5LXJvbGUtbWFwcGluZz4KLSAgICAKKwogICAgIDxzZWN1cml0eS1yb2xlLW1hcHBpbmc+CiAgICAgICAgIDxyb2xlLW5hbWU+a2F6PC9yb2xlLW5hbWU+CiAgICAgICAgIDxncm91cC1uYW1lPmthejwvZ3JvdXAtbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS1zZXNzaW9uL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQXBwQ3VzdG9tU2Vzc2lvbklULmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jdXN0b20tc2Vzc2lvbi9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0FwcEN1c3RvbVNlc3Npb25JVC5qYXZhCmluZGV4IDU2OGRlMzAuLjY3YzI2YmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS1zZXNzaW9uL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQXBwQ3VzdG9tU2Vzc2lvbklULmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tLXNlc3Npb24vc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9BcHBDdXN0b21TZXNzaW9uSVQuamF2YQpAQCAtNDcsNyArNDcsNyBAQAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBwcmludFN1bW1hcnkoKXsKICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQotICAgCisKICAgICBARGVwbG95bWVudCh0ZXN0YWJsZSA9IGZhbHNlKQogICAgIHB1YmxpYyBzdGF0aWMgQXJjaGl2ZTw/PiBjcmVhdGVEZXBsb3ltZW50KCkgewogICAgICAgICByZXR1cm4gbWF2ZW5XYXIoKTsKQEAgLTU4LDc1ICs1OCw3NSBAQAogICAgICAgICBhc3NlcnREZWZhdWx0QXV0aGVudGljYXRlZCgKICAgICAgICAgICAgIHJlYWRGcm9tU2VydmVyKCIvc2VydmxldD9uYW1lPXJlemEmcGFzc3dvcmQ9c2VjcmV0MSIpKTsKICAgICB9Ci0gICAgCisKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3ROb3RBdXRoZW50aWNhdGVkKCkgewogICAgICAgICBhc3NlcnREZWZhdWx0Tm90QXV0aGVudGljYXRlZCgKICAgICAgICAgICAgIHJlYWRGcm9tU2VydmVyKCIvc2VydmxldCIpKTsKICAgICB9Ci0gICAgCisKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3ROb3RBdXRoZW50aWNhdGVkV3JvbmdOYW1lKCkgewogICAgICAgICBhc3NlcnREZWZhdWx0Tm90QXV0aGVudGljYXRlZCgKICAgICAgICAgICAgIHJlYWRGcm9tU2VydmVyKCIvc2VydmxldD9uYW1lPXJvbW8mcGFzc3dvcmQ9c2VjcmV0MSIpKTsKICAgICB9Ci0gICAgCisKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3ROb3RBdXRoZW50aWNhdGVkV3JvbmdQYXNzd29yZCgpIHsKICAgICAgICAgYXNzZXJ0RGVmYXVsdE5vdEF1dGhlbnRpY2F0ZWQoCiAgICAgICAgICAgICByZWFkRnJvbVNlcnZlcigiL3NlcnZsZXQ/bmFtZT1yZXphJnBhc3N3b3JkPXdyb25ncGFzc3dvcmQiKSk7CiAgICAgfQotICAgIAorCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0QXV0aGVudGljYXRlZFNlc3Npb24oKSB7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIDEuIEluaXRpYWxseSByZXF1ZXN0IHBhZ2Ugd2hlbiB3ZSdyZSBub3QgYXV0aGVudGljYXRlZAotICAgICAgICAKKwogICAgICAgICBhc3NlcnREZWZhdWx0Tm90QXV0aGVudGljYXRlZCgKICAgICAgICAgICAgIHJlYWRGcm9tU2VydmVyKCIvc2VydmxldCIpKTsKLSAgICAgICAgCi0gICAgICAgIAorCisKICAgICAgICAgLy8gMi4gQXV0aGVudGljYXRlCi0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyByZXNwb25zZSA9IHJlYWRGcm9tU2VydmVyKCIvc2VydmxldD9uYW1lPXJlemEmcGFzc3dvcmQ9c2VjcmV0MSIpOwotICAgICAgICAKKwogICAgICAgICBhc3NlcnREZWZhdWx0QXV0aGVudGljYXRlZCgKICAgICAgICAgICAgIHJlc3BvbnNlKTsKLSAgICAgICAgCisKICAgICAgICAgLy8gRm9yIHRoZSBpbml0aWFsIGF1dGhlbnRpY2F0aW9uLCB0aGUgbWVjaGFuaXNtIHNob3VsZCBiZSBjYWxsZWQKLSAgICAgICAgCisKICAgICAgICAgYXNzZXJ0VHJ1ZSgKLSAgICAgICAgICAgICJBdXRoZW50aWNhdGlvbiBtZWNoYW5pc20gc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQsIGJ1dCB3YXNuJ3QiLCAKKyAgICAgICAgICAgICJBdXRoZW50aWNhdGlvbiBtZWNoYW5pc20gc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQsIGJ1dCB3YXNuJ3QiLAogICAgICAgICAgICAgcmVzcG9uc2UuY29udGFpbnMoImF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbSBjYWxsZWQ6IHRydWUiKSk7Ci0gICAgICAgIAotICAgICAgICAKKworCiAgICAgICAgIC8vIDMuIFJlcXVlc3Qgc2FtZSBwYWdlIGFnYWluIHdpdGhpbiBzYW1lIGh0dHAgc2Vzc2lvbiwgc2hvdWxkIHN0aWxsCiAgICAgICAgIC8vICAgIGJlIGF1dGhlbnRpY2F0ZWQKLSAgICAgICAgCisKICAgICAgICAgcmVzcG9uc2UgPSByZWFkRnJvbVNlcnZlcigiL3NlcnZsZXQiKTsKLSAgICAgICAgCisKICAgICAgICAgYXNzZXJ0RGVmYXVsdEF1dGhlbnRpY2F0ZWQoCiAgICAgICAgICAgICByZXNwb25zZSk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIEZvciB0aGUgc3Vic2VxdWVudCBhdXRoZW50aWNhdGlvbiwgdGhlIG1lY2hhbmlzbSBzaG91bGQgTk9UIGJlIGNhbGxlZAogICAgICAgICAvLyAodGhlIHNlc3Npb24gaW50ZXJjZXB0b3IgdGFrZXMgY2FyZSBvZiBhdXRoZW50aWNhdGlvbiBub3cpCi0gICAgICAgIAorCiAgICAgICAgIGFzc2VydFRydWUoCi0gICAgICAgICAgICAiQXV0aGVudGljYXRpb24gbWVjaGFuaXNtIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkLCBidXQgd2Fzbid0IiwgCisgICAgICAgICAgICAiQXV0aGVudGljYXRpb24gbWVjaGFuaXNtIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkLCBidXQgd2Fzbid0IiwKICAgICAgICAgICAgIHJlc3BvbnNlLmNvbnRhaW5zKCJhdXRoZW50aWNhdGlvbiBtZWNoYW5pc20gY2FsbGVkOiBmYWxzZSIpKTsKLSAgICAgICAgCi0gICAgICAgIAorCisKICAgICAgICAgLy8gNC4gTG9nb3V0LiBTaG91bGQgbm90IGJlIGF1dGhlbnRpY2F0ZWQgYW55bW9yZQotICAgICAgICAKKwogICAgICAgICBhc3NlcnREZWZhdWx0Tm90QXV0aGVudGljYXRlZCgKICAgICAgICAgICAgIHJlYWRGcm9tU2VydmVyKCIvc2VydmxldD9sb2dvdXQ9dHJ1ZSIpKTsKLSAgICAgICAgCi0gICAgICAgIAorCisKICAgICAgICAgLy8gNS4gUmVxdWVzdCBzYW1lIHBhZ2UgYWdhaW4sIHNob3VsZCBzdGlsbCBub3QgYmUgYXV0aGVudGljYXRlZAotICAgICAgICAKKwogICAgICAgICBhc3NlcnREZWZhdWx0Tm90QXV0aGVudGljYXRlZCgKICAgICAgICAgICAgIHJlYWRGcm9tU2VydmVyKCIvc2VydmxldCIpKTsKLSAgICAgICAKKwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tL3BvbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jdXN0b20vcG9tLnhtbAppbmRleCA2OWM5YzllLi5lMmQ0OWM4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jdXN0b20vcG9tLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jdXN0b20vcG9tLnhtbApAQCAtMTcsMjEgKzE3LDIxIEBACiAtLT4KIAogPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KLQk8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5nbGFzc2Zpc2guc290ZXJpYS50ZXN0PC9ncm91cElkPgogICAgIDxhcnRpZmFjdElkPnNvdGVyaWE8L2FydGlmYWN0SWQ+CiAgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCi0JPGFydGlmYWN0SWQ+YXBwLWN1c3RvbTwvYXJ0aWZhY3RJZD4KLQk8cGFja2FnaW5nPndhcjwvcGFja2FnaW5nPgotCQotCTxidWlsZD4KKyAgICA8YXJ0aWZhY3RJZD5hcHAtY3VzdG9tPC9hcnRpZmFjdElkPgorICAgIDxwYWNrYWdpbmc+d2FyPC9wYWNrYWdpbmc+CisKKyAgICA8YnVpbGQ+CiAgICAgICAgIDxmaW5hbE5hbWU+YXBwLWN1c3RvbTwvZmluYWxOYW1lPgotCTwvYnVpbGQ+Ci0gICAgCisgICAgPC9idWlsZD4KKwogICAgIDxwcm9wZXJ0aWVzPgogICAgICAgICA8ZmFpbE9uTWlzc2luZ1dlYlhtbD5mYWxzZTwvZmFpbE9uTWlzc2luZ1dlYlhtbD4KICAgICA8L3Byb3BlcnRpZXM+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jdXN0b20vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9Qcm90ZWN0ZWRTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jdXN0b20vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9Qcm90ZWN0ZWRTZXJ2bGV0LmphdmEKaW5kZXggOTgyYjhlOS4uMTA2MzI0YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvUHJvdGVjdGVkU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1Byb3RlY3RlZFNlcnZsZXQuamF2YQpAQCAtMzEsNyArMzEsNyBAQAogLyoqCiAgKiBUZXN0IFNlcnZsZXQgdGhhdCBwcmludHMgb3V0IHRoZSBuYW1lIG9mIHRoZSBhdXRoZW50aWNhdGVkIGNhbGxlciBhbmQgd2hldGhlcgogICogdGhpcyBjYWxsZXIgaXMgaW4gYW55IG9mIHRoZSByb2xlcyB7Zm9vLCBiYXIsIGthen0KLSAqIAorICoKICAqCiAgKi8KIEBXZWJTZXJ2bGV0KCIvcHJvdGVjdGVkU2VydmxldCIpCkBAIC0zOSw3ICszOSw3IEBACiBwdWJsaWMgY2xhc3MgUHJvdGVjdGVkU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotICAgIAorCiAgICAgQEluamVjdAogICAgIHByaXZhdGUgU2VjdXJpdHlDb250ZXh0IHNlY3VyaXR5Q29udGV4dDsKIApAQCAtNTgsMjEgKzU4LDIxIEBACiAgICAgICAgIHJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKCJ3ZWIgdXNlciBoYXMgcm9sZSBcImZvb1wiOiAiICsgcmVxdWVzdC5pc1VzZXJJblJvbGUoImZvbyIpICsgIlxuIik7CiAgICAgICAgIHJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKCJ3ZWIgdXNlciBoYXMgcm9sZSBcImJhclwiOiAiICsgcmVxdWVzdC5pc1VzZXJJblJvbGUoImJhciIpICsgIlxuIik7CiAgICAgICAgIHJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKCJ3ZWIgdXNlciBoYXMgcm9sZSBcImthelwiOiAiICsgcmVxdWVzdC5pc1VzZXJJblJvbGUoImtheiIpICsgIlxuIik7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyBjb250ZXh0TmFtZSA9IG51bGw7CiAgICAgICAgIGlmIChzZWN1cml0eUNvbnRleHQuZ2V0Q2FsbGVyUHJpbmNpcGFsKCkgIT0gbnVsbCkgewogICAgICAgICAgICAgY29udGV4dE5hbWUgPSBzZWN1cml0eUNvbnRleHQuZ2V0Q2FsbGVyUHJpbmNpcGFsKCkuZ2V0TmFtZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKCJjb250ZXh0IHVzZXJuYW1lOiAiICsgY29udGV4dE5hbWUgKyAiXG4iKTsKLSAgICAgICAgCisKICAgICAgICAgcmVzcG9uc2UuZ2V0V3JpdGVyKCkud3JpdGUoImNvbnRleHQgdXNlciBoYXMgcm9sZSBcImZvb1wiOiAiICsgc2VjdXJpdHlDb250ZXh0LmlzQ2FsbGVySW5Sb2xlKCJmb28iKSArICJcbiIpOwogICAgICAgICByZXNwb25zZS5nZXRXcml0ZXIoKS53cml0ZSgiY29udGV4dCB1c2VyIGhhcyByb2xlIFwiYmFyXCI6ICIgKyBzZWN1cml0eUNvbnRleHQuaXNDYWxsZXJJblJvbGUoImJhciIpICsgIlxuIik7CiAgICAgICAgIHJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKCJjb250ZXh0IHVzZXIgaGFzIHJvbGUgXCJrYXpcIjogIiArIHNlY3VyaXR5Q29udGV4dC5pc0NhbGxlckluUm9sZSgia2F6IikgKyAiXG4iKTsKLSAgICAgICAgCisKICAgICAgICAgcmVzcG9uc2UuZ2V0V3JpdGVyKCkud3JpdGUoImhhcyBhY2Nlc3MgIiArIHNlY3VyaXR5Q29udGV4dC5oYXNBY2Nlc3NUb1dlYlJlc291cmNlKCIvc2VydmxldHMiKSk7Ci0gICAgICAgIAotICAgICAgICAKKworCiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jdXN0b20vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9TZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jdXN0b20vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9TZXJ2bGV0LmphdmEKaW5kZXggYTI4MTkwZC4uNTFhMTdlOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1NlcnZsZXQuamF2YQpAQCAtMzIsNyArMzIsNyBAQAogLyoqCiAgKiBUZXN0IFNlcnZsZXQgdGhhdCBwcmludHMgb3V0IHRoZSBuYW1lIG9mIHRoZSBhdXRoZW50aWNhdGVkIGNhbGxlciBhbmQgd2hldGhlcgogICogdGhpcyBjYWxsZXIgaXMgaW4gYW55IG9mIHRoZSByb2xlcyB7Zm9vLCBiYXIsIGthen0KLSAqIAorICoKICAqCiAgKi8KIEBEZWNsYXJlUm9sZXMoeyAiZm9vIiwgImJhciIsICJrYXoiIH0pCkBAIC00MCw3ICs0MCw3IEBACiBwdWJsaWMgY2xhc3MgU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotICAgIAorCiAgICAgQEluamVjdAogICAgIHByaXZhdGUgU2VjdXJpdHlDb250ZXh0IHNlY3VyaXR5Q29udGV4dDsKIApAQCAtNTksMjAgKzU5LDIwIEBACiAgICAgICAgIHJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKCJ3ZWIgdXNlciBoYXMgcm9sZSBcImZvb1wiOiAiICsgcmVxdWVzdC5pc1VzZXJJblJvbGUoImZvbyIpICsgIlxuIik7CiAgICAgICAgIHJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKCJ3ZWIgdXNlciBoYXMgcm9sZSBcImJhclwiOiAiICsgcmVxdWVzdC5pc1VzZXJJblJvbGUoImJhciIpICsgIlxuIik7CiAgICAgICAgIHJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKCJ3ZWIgdXNlciBoYXMgcm9sZSBcImthelwiOiAiICsgcmVxdWVzdC5pc1VzZXJJblJvbGUoImtheiIpICsgIlxuIik7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyBjb250ZXh0TmFtZSA9IG51bGw7CiAgICAgICAgIGlmIChzZWN1cml0eUNvbnRleHQuZ2V0Q2FsbGVyUHJpbmNpcGFsKCkgIT0gbnVsbCkgewogICAgICAgICAgICAgY29udGV4dE5hbWUgPSBzZWN1cml0eUNvbnRleHQuZ2V0Q2FsbGVyUHJpbmNpcGFsKCkuZ2V0TmFtZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKCJjb250ZXh0IHVzZXJuYW1lOiAiICsgY29udGV4dE5hbWUgKyAiXG4iKTsKLSAgICAgICAgCisKICAgICAgICAgcmVzcG9uc2UuZ2V0V3JpdGVyKCkud3JpdGUoImNvbnRleHQgdXNlciBoYXMgcm9sZSBcImZvb1wiOiAiICsgc2VjdXJpdHlDb250ZXh0LmlzQ2FsbGVySW5Sb2xlKCJmb28iKSArICJcbiIpOwogICAgICAgICByZXNwb25zZS5nZXRXcml0ZXIoKS53cml0ZSgiY29udGV4dCB1c2VyIGhhcyByb2xlIFwiYmFyXCI6ICIgKyBzZWN1cml0eUNvbnRleHQuaXNDYWxsZXJJblJvbGUoImJhciIpICsgIlxuIik7CiAgICAgICAgIHJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKCJjb250ZXh0IHVzZXIgaGFzIHJvbGUgXCJrYXpcIjogIiArIHNlY3VyaXR5Q29udGV4dC5pc0NhbGxlckluUm9sZSgia2F6IikgKyAiXG4iKTsKLSAgICAgICAgCisKICAgICAgICAgcmVzcG9uc2UuZ2V0V3JpdGVyKCkud3JpdGUoImhhcyBhY2Nlc3MgIiArIHNlY3VyaXR5Q29udGV4dC5oYXNBY2Nlc3NUb1dlYlJlc291cmNlKCIvcHJvdGVjdGVkU2VydmxldCIpICsgIlxuIik7Ci0gICAgICAgIAorCiAgICAgICAgIHJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKCJBbGwgZGVjbGFyZWQgcm9sZXMgb2YgdXNlciAiICsgKChTZWN1cml0eUNvbnRleHRJbXBsKXNlY3VyaXR5Q29udGV4dCkuZ2V0QWxsRGVjbGFyZWRDYWxsZXJSb2xlcygpICsgIlxuIik7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jdXN0b20vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9UZXN0QXV0aGVudGljYXRpb25NZWNoYW5pc20uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1Rlc3RBdXRoZW50aWNhdGlvbk1lY2hhbmlzbS5qYXZhCmluZGV4IGY1YThkZjQuLjkyZjBmMzEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1Rlc3RBdXRoZW50aWNhdGlvbk1lY2hhbmlzbS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1Rlc3RBdXRoZW50aWNhdGlvbk1lY2hhbmlzbS5qYXZhCkBAIC0zMywyMCArMzMsMjAgQEAKIAogQFJlcXVlc3RTY29wZWQKIHB1YmxpYyBjbGFzcyBUZXN0QXV0aGVudGljYXRpb25NZWNoYW5pc20gaW1wbGVtZW50cyBIdHRwQXV0aGVudGljYXRpb25NZWNoYW5pc20gewotICAgIAorCiAgICAgQEluamVjdAogICAgIHByaXZhdGUgSWRlbnRpdHlTdG9yZUhhbmRsZXIgaWRlbnRpdHlTdG9yZUhhbmRsZXI7CiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgQXV0aGVudGljYXRpb25TdGF0dXMgdmFsaWRhdGVSZXF1ZXN0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlLCBIdHRwTWVzc2FnZUNvbnRleHQgaHR0cE1lc3NhZ2VDb250ZXh0KSB0aHJvd3MgQXV0aGVudGljYXRpb25FeGNlcHRpb24gewogCi0gICAgCS8vIEdldCB0aGUgKGNhbGxlcikgbmFtZSBhbmQgcGFzc3dvcmQgZnJvbSB0aGUgcmVxdWVzdAorICAgICAgICAvLyBHZXQgdGhlIChjYWxsZXIpIG5hbWUgYW5kIHBhc3N3b3JkIGZyb20gdGhlIHJlcXVlc3QKICAgICAgICAgLy8gTk9URTogVGhpcyBpcyBmb3IgdGhlIHNtYWxsZXN0IHBvc3NpYmxlIGV4YW1wbGUgb25seS4gSW4gcHJhY3RpY2UKICAgICAgICAgLy8gcHV0dGluZyB0aGUgcGFzc3dvcmQgaW4gYSByZXF1ZXN0IHF1ZXJ5IHBhcmFtZXRlciBpcyBoaWdobHkKICAgICAgICAgLy8gaW5zZWN1cmUKICAgICAgICAgU3RyaW5nIG5hbWUgPSByZXF1ZXN0LmdldFBhcmFtZXRlcigibmFtZSIpOwogICAgICAgICBTdHJpbmcgcGFzc3dvcmQgPSByZXF1ZXN0LmdldFBhcmFtZXRlcigicGFzc3dvcmQiKTsKLSAgICAJCisKICAgICAgICAgaWYgKG5hbWUgIT0gbnVsbCAmJiBwYXNzd29yZCAhPSBudWxsKSB7CiAKICAgICAgICAgICAgIC8vIERlbGVnYXRlIHRoZSB7Y3JlZGVudGlhbHMgaW4gLT4gaWRlbnRpdHkgZGF0YSBvdXR9IGZ1bmN0aW9uIHRvCkBAIC01NiwxNyArNTYsMTcgQEAKIAogICAgICAgICAgICAgaWYgKHJlc3VsdC5nZXRTdGF0dXMoKSA9PSBWQUxJRCkgewogICAgICAgICAgICAgICAgIC8vIENvbW11bmljYXRlIHRoZSBkZXRhaWxzIG9mIHRoZSBhdXRoZW50aWNhdGVkIHVzZXIgdG8gdGhlCi0gICAgICAgICAgICAgICAgLy8gY29udGFpbmVyLiBJbiBtYW55IGNhc2VzIHRoZSB1bmRlcmx5aW5nIGhhbmRsZXIgd2lsbCBqdXN0IHN0b3JlIHRoZSBkZXRhaWxzIAotICAgICAgICAgICAgICAgIC8vIGFuZCB0aGUgY29udGFpbmVyIHdpbGwgYWN0dWFsbHkgaGFuZGxlIHRoZSBsb2dpbiBhZnRlciB3ZSByZXR1cm4gZnJvbSAKKyAgICAgICAgICAgICAgICAvLyBjb250YWluZXIuIEluIG1hbnkgY2FzZXMgdGhlIHVuZGVybHlpbmcgaGFuZGxlciB3aWxsIGp1c3Qgc3RvcmUgdGhlIGRldGFpbHMKKyAgICAgICAgICAgICAgICAvLyBhbmQgdGhlIGNvbnRhaW5lciB3aWxsIGFjdHVhbGx5IGhhbmRsZSB0aGUgbG9naW4gYWZ0ZXIgd2UgcmV0dXJuIGZyb20KICAgICAgICAgICAgICAgICAvLyB0aGlzIG1ldGhvZC4KICAgICAgICAgICAgICAgICByZXR1cm4gaHR0cE1lc3NhZ2VDb250ZXh0Lm5vdGlmeUNvbnRhaW5lckFib3V0TG9naW4oCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5nZXRDYWxsZXJQcmluY2lwYWwoKSwgcmVzdWx0LmdldENhbGxlckdyb3VwcygpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGh0dHBNZXNzYWdlQ29udGV4dC5yZXNwb25zZVVuYXV0aG9yaXplZCgpOwogICAgICAgICAgICAgfQotICAgICAgICB9IAorICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIGh0dHBNZXNzYWdlQ29udGV4dC5kb05vdGhpbmcoKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKaW5kZXggMDlmZmZiNC4uNmNhMzU0NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKQEAgLTE4LDI3ICsxOCwyNyBAQAogLS0+CiAKIDx3ZWItYXBwCi0JeG1sbnM9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUgaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS93ZWItYXBwXzNfMS54c2QiCi0JdmVyc2lvbj0iMy4xIgorICAgIHhtbG5zPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlIGh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8zXzEueHNkIgorICAgIHZlcnNpb249IjMuMSIKID4KIAotCTwhLS0gU2VjdXJpdHkgY29uc3RyYWludHMgYW5kIHJvbGVzLiAtLT4KKyAgICA8IS0tIFNlY3VyaXR5IGNvbnN0cmFpbnRzIGFuZCByb2xlcy4gLS0+CiAKLQk8c2VjdXJpdHktY29uc3RyYWludD4KLQkJPHdlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgotCQkJPHdlYi1yZXNvdXJjZS1uYW1lPlVzZXIgcGFnZXM8L3dlYi1yZXNvdXJjZS1uYW1lPgotCQkJPHVybC1wYXR0ZXJuPi9wcm90ZWN0ZWRTZXJ2bGV0PC91cmwtcGF0dGVybj4KLQkJPC93ZWItcmVzb3VyY2UtY29sbGVjdGlvbj4KLQkJPGF1dGgtY29uc3RyYWludD4KLQkJCTxyb2xlLW5hbWU+Zm9vPC9yb2xlLW5hbWU+Ci0JCTwvYXV0aC1jb25zdHJhaW50PgotCTwvc2VjdXJpdHktY29uc3RyYWludD4KKyAgICA8c2VjdXJpdHktY29uc3RyYWludD4KKyAgICAgICAgPHdlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgorICAgICAgICAgICAgPHdlYi1yZXNvdXJjZS1uYW1lPlVzZXIgcGFnZXM8L3dlYi1yZXNvdXJjZS1uYW1lPgorICAgICAgICAgICAgPHVybC1wYXR0ZXJuPi9wcm90ZWN0ZWRTZXJ2bGV0PC91cmwtcGF0dGVybj4KKyAgICAgICAgPC93ZWItcmVzb3VyY2UtY29sbGVjdGlvbj4KKyAgICAgICAgPGF1dGgtY29uc3RyYWludD4KKyAgICAgICAgICAgIDxyb2xlLW5hbWU+Zm9vPC9yb2xlLW5hbWU+CisgICAgICAgIDwvYXV0aC1jb25zdHJhaW50PgorICAgIDwvc2VjdXJpdHktY29uc3RyYWludD4KIAogCi0JPHNlY3VyaXR5LXJvbGU+Ci0JCTxyb2xlLW5hbWU+Zm9vPC9yb2xlLW5hbWU+Ci0JPC9zZWN1cml0eS1yb2xlPgorICAgIDxzZWN1cml0eS1yb2xlPgorICAgICAgICA8cm9sZS1uYW1lPmZvbzwvcm9sZS1uYW1lPgorICAgIDwvc2VjdXJpdHktcm9sZT4KIAogPC93ZWItYXBwPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQXBwQ3VzdG9tSVQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWN1c3RvbS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0FwcEN1c3RvbUlULmphdmEKaW5kZXggZjQ4ZjFiOC4uMmE4OWI4MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtY3VzdG9tL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQXBwQ3VzdG9tSVQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1jdXN0b20vc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9BcHBDdXN0b21JVC5qYXZhCkBAIC00NSw3ICs0NSw3IEBACiAgICAgcHVibGljIHN0YXRpYyB2b2lkIHByaW50U3VtbWFyeSgpewogICAgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9Ci0gICAKKwogICAgIEBEZXBsb3ltZW50KHRlc3RhYmxlID0gZmFsc2UpCiAgICAgcHVibGljIHN0YXRpYyBBcmNoaXZlPD8+IGNyZWF0ZURlcGxveW1lbnQoKSB7CiAgICAgICAgIHJldHVybiBtYXZlbldhcigpOwpAQCAtNTYsMTkgKzU2LDE5IEBACiAgICAgICAgIGFzc2VydERlZmF1bHRBdXRoZW50aWNhdGVkKAogICAgICAgICAgICAgICAgIHJlc3BvbnNlRnJvbVNlcnZlcigiL3NlcnZsZXQ/bmFtZT1yZXphJnBhc3N3b3JkPXNlY3JldDEiKSk7CiAgICAgfQotICAgIAorCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0Tm90QXV0aGVudGljYXRlZCgpIHsKICAgICAgICAgYXNzZXJ0RGVmYXVsdE5vdEF1dGhlbnRpY2F0ZWRVbnByb3RlY3RlZCgKICAgICAgICAgICAgICAgICByZXNwb25zZUZyb21TZXJ2ZXIoIi9zZXJ2bGV0IikpOwogICAgIH0KLSAgICAKKwogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdE5vdEF1dGhlbnRpY2F0ZWRXcm9uZ05hbWUoKSB7CiAgICAgICAgIGFzc2VydERlZmF1bHROb3RBdXRoZW50aWNhdGVkKAogICAgICAgICAgICAgICAgIHJlc3BvbnNlRnJvbVNlcnZlcigiL3NlcnZsZXQ/bmFtZT1yb21vJnBhc3N3b3JkPXNlY3JldDEiKSk7CiAgICAgfQotICAgIAorCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0Tm90QXV0aGVudGljYXRlZFdyb25nUGFzc3dvcmQoKSB7CiAgICAgICAgIGFzc2VydERlZmF1bHROb3RBdXRoZW50aWNhdGVkKApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtZGIvcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWRiL3BvbS54bWwKaW5kZXggMWFhNDAxYi4uZmNmMTJjYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtZGIvcG9tLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1kYi9wb20ueG1sCkBAIC0xNywyMSArMTcsMjEgQEAKIC0tPgogCiA8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgotCTxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmdsYXNzZmlzaC5zb3RlcmlhLnRlc3Q8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+c290ZXJpYTwvYXJ0aWZhY3RJZD4KICAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKLQk8YXJ0aWZhY3RJZD5hcHAtZGI8L2FydGlmYWN0SWQ+Ci0JPHBhY2thZ2luZz53YXI8L3BhY2thZ2luZz4KLQkKLQk8YnVpbGQ+CisgICAgPGFydGlmYWN0SWQ+YXBwLWRiPC9hcnRpZmFjdElkPgorICAgIDxwYWNrYWdpbmc+d2FyPC9wYWNrYWdpbmc+CisKKyAgICA8YnVpbGQ+CiAgICAgICAgIDxmaW5hbE5hbWU+YXBwLWRiPC9maW5hbE5hbWU+Ci0JPC9idWlsZD4KLSAgICAKKyAgICA8L2J1aWxkPgorCiAgICAgPHByb3BlcnRpZXM+CiAgICAgICAgIDxmYWlsT25NaXNzaW5nV2ViWG1sPmZhbHNlPC9mYWlsT25NaXNzaW5nV2ViWG1sPgogICAgIDwvcHJvcGVydGllcz4KQEAgLTQ0LDUgKzQ0LDUgQEAKICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KICAgICA8L2RlcGVuZGVuY3k+CiAgIDwvZGVwZW5kZW5jaWVzPgotICAgIAorCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1kYi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0FwcGxpY2F0aW9uQ29uZmlnLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1kYi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0FwcGxpY2F0aW9uQ29uZmlnLmphdmEKaW5kZXggZmQ0OWUyOS4uMDA4MzIxMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtZGIvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9BcHBsaWNhdGlvbkNvbmZpZy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWRiL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQXBwbGljYXRpb25Db25maWcuamF2YQpAQCAtMjEsMjQgKzIxLDI0IEBACiBpbXBvcnQgamF2YXguc2VjdXJpdHkuZW50ZXJwcmlzZS5pZGVudGl0eXN0b3JlLkRhdGFiYXNlSWRlbnRpdHlTdG9yZURlZmluaXRpb247CiAKIEBEYXRhYmFzZUlkZW50aXR5U3RvcmVEZWZpbml0aW9uKAotICAgIGRhdGFTb3VyY2VMb29rdXA9IiR7J2pkYmMvX19kZWZhdWx0J30iLCAKKyAgICBkYXRhU291cmNlTG9va3VwPSIkeydqZGJjL19fZGVmYXVsdCd9IiwKICAgICBjYWxsZXJRdWVyeT0iI3snc2VsZWN0IHBhc3N3b3JkIGZyb20gY2FsbGVyIHdoZXJlIG5hbWUgPSA/J30iLAogICAgIGdyb3Vwc1F1ZXJ5PSJzZWxlY3QgZ3JvdXBfbmFtZSBmcm9tIGNhbGxlcl9ncm91cHMgd2hlcmUgY2FsbGVyX25hbWUgPSA/IiwKICAgICBoYXNoQWxnb3JpdGhtID0gUGxhaW50ZXh0UGFzc3dvcmRIYXNoLmNsYXNzLAogICAgIGhhc2hBbGdvcml0aG1QYXJhbWV0ZXJzID0gewotICAgICAgICAiZm9vPWJhciIsIAotICAgICAgICAia2F4PXphayIsIAorICAgICAgICAiZm9vPWJhciIsCisgICAgICAgICJrYXg9emFrIiwKICAgICAgICAgImZvb3g9JHsnaW9wJ30iLAogICAgICAgICAiJHthcHBsaWNhdGlvbkNvbmZpZy5keW5hfSIKLSAgICAgICAgCisKICAgICB9IC8vIGp1c3QgZm9yIHRlc3QgLyBleGFtcGxlCiApCiBAQXBwbGljYXRpb25TY29wZWQKIEBOYW1lZAogcHVibGljIGNsYXNzIEFwcGxpY2F0aW9uQ29uZmlnIHsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmdbXSBnZXREeW5hKCkgewogICAgICAgICByZXR1cm4gbmV3IFN0cmluZ1tdIHsiZHluPTEiLCJkeW5hPTIiLCJkeW5hbT0zIn07CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1kYi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0RhdGFiYXNlU2V0dXAuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWRiL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvRGF0YWJhc2VTZXR1cC5qYXZhCmluZGV4IGQ1YjcxNTMuLjI4MTAyNjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWRiL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvRGF0YWJhc2VTZXR1cC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWRiL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvRGF0YWJhc2VTZXR1cC5qYXZhCkBAIC0zMSw0MSArMzEsNDEgQEAKIEBTaW5nbGV0b24KIEBTdGFydHVwCiBwdWJsaWMgY2xhc3MgRGF0YWJhc2VTZXR1cCB7Ci0gICAgCi0gICAgQFJlc291cmNlKGxvb2t1cD0iamF2YTpjb21wL0RlZmF1bHREYXRhU291cmNlIikJCisKKyAgICBAUmVzb3VyY2UobG9va3VwPSJqYXZhOmNvbXAvRGVmYXVsdERhdGFTb3VyY2UiKQogICAgIHByaXZhdGUgRGF0YVNvdXJjZSBkYXRhU291cmNlOwogCiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwdWJsaWMgdm9pZCBpbml0KCkgewotICAgICAgICAKKwogICAgICAgICBleGVjdXRlVXBkYXRlKGRhdGFTb3VyY2UsICJDUkVBVEUgVEFCTEUgY2FsbGVyKG5hbWUgVkFSQ0hBUig2NCkgUFJJTUFSWSBLRVksIHBhc3N3b3JkIFZBUkNIQVIoNjQpKSIpOwogICAgICAgICBleGVjdXRlVXBkYXRlKGRhdGFTb3VyY2UsICJDUkVBVEUgVEFCTEUgY2FsbGVyX2dyb3VwcyhjYWxsZXJfbmFtZSBWQVJDSEFSKDY0KSwgZ3JvdXBfbmFtZSBWQVJDSEFSKDY0KSkiKTsKLSAgICAgICAgCisKICAgICAgICAgZXhlY3V0ZVVwZGF0ZShkYXRhU291cmNlLCAiSU5TRVJUIElOVE8gY2FsbGVyIFZBTFVFUygncmV6YScsICdzZWNyZXQxJykiKTsKICAgICAgICAgZXhlY3V0ZVVwZGF0ZShkYXRhU291cmNlLCAiSU5TRVJUIElOVE8gY2FsbGVyIFZBTFVFUygnYWxleCcsICdzZWNyZXQyJykiKTsKICAgICAgICAgZXhlY3V0ZVVwZGF0ZShkYXRhU291cmNlLCAiSU5TRVJUIElOVE8gY2FsbGVyIFZBTFVFUygnYXJqYW4nLCAnc2VjcmV0MicpIik7CiAgICAgICAgIGV4ZWN1dGVVcGRhdGUoZGF0YVNvdXJjZSwgIklOU0VSVCBJTlRPIGNhbGxlciBWQUxVRVMoJ3dlcm5lcicsICdzZWNyZXQyJykiKTsKLSAgICAgICAgCisKICAgICAgICAgZXhlY3V0ZVVwZGF0ZShkYXRhU291cmNlLCAiSU5TRVJUIElOVE8gY2FsbGVyX2dyb3VwcyBWQUxVRVMoJ3JlemEnLCAnZm9vJykiKTsKICAgICAgICAgZXhlY3V0ZVVwZGF0ZShkYXRhU291cmNlLCAiSU5TRVJUIElOVE8gY2FsbGVyX2dyb3VwcyBWQUxVRVMoJ3JlemEnLCAnYmFyJykiKTsKLSAgICAgICAgCisKICAgICAgICAgZXhlY3V0ZVVwZGF0ZShkYXRhU291cmNlLCAiSU5TRVJUIElOVE8gY2FsbGVyX2dyb3VwcyBWQUxVRVMoJ2FsZXgnLCAnZm9vJykiKTsKICAgICAgICAgZXhlY3V0ZVVwZGF0ZShkYXRhU291cmNlLCAiSU5TRVJUIElOVE8gY2FsbGVyX2dyb3VwcyBWQUxVRVMoJ2FsZXgnLCAnYmFyJykiKTsKLSAgICAgICAgCisKICAgICAgICAgZXhlY3V0ZVVwZGF0ZShkYXRhU291cmNlLCAiSU5TRVJUIElOVE8gY2FsbGVyX2dyb3VwcyBWQUxVRVMoJ2FyamFuJywgJ2ZvbycpIik7CiAgICAgICAgIGV4ZWN1dGVVcGRhdGUoZGF0YVNvdXJjZSwgIklOU0VSVCBJTlRPIGNhbGxlcl9ncm91cHMgVkFMVUVTKCd3ZXJuZXInLCAnZm9vJykiKTsKICAgICB9Ci0gICAgCisKICAgICBAUHJlRGVzdHJveQogICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKSB7Ci0gICAgCXRyeSB7Ci0gICAgCQlleGVjdXRlVXBkYXRlKGRhdGFTb3VyY2UsICJEUk9QIFRBQkxFIGNhbGxlciIpOwotICAgIAkJZXhlY3V0ZVVwZGF0ZShkYXRhU291cmNlLCAiRFJPUCBUQUJMRSBjYWxsZXJfZ3JvdXBzIik7Ci0gICAgCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgCQkvLyBzaWxlbnRseSBpZ25vcmUsIGNvbmNlcm5zIGluLW1lbW9yeSBkYXRhYmFzZQotICAgIAl9CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBleGVjdXRlVXBkYXRlKGRhdGFTb3VyY2UsICJEUk9QIFRBQkxFIGNhbGxlciIpOworICAgICAgICAgICAgZXhlY3V0ZVVwZGF0ZShkYXRhU291cmNlLCAiRFJPUCBUQUJMRSBjYWxsZXJfZ3JvdXBzIik7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAvLyBzaWxlbnRseSBpZ25vcmUsIGNvbmNlcm5zIGluLW1lbW9yeSBkYXRhYmFzZQorICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSB2b2lkIGV4ZWN1dGVVcGRhdGUoRGF0YVNvdXJjZSBkYXRhU291cmNlLCBTdHJpbmcgcXVlcnkpIHsKICAgICAgICAgdHJ5IChDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBkYXRhU291cmNlLmdldENvbm5lY3Rpb24oKSkgewogICAgICAgICAgICAgdHJ5IChQcmVwYXJlZFN0YXRlbWVudCBzdGF0ZW1lbnQgPSBjb25uZWN0aW9uLnByZXBhcmVTdGF0ZW1lbnQocXVlcnkpKSB7CkBAIC03NSw1ICs3NSw1IEBACiAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oZSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWRiL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtZGIvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9TZXJ2bGV0LmphdmEKaW5kZXggZjVhYmRlMC4uZTIzYTFmOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtZGIvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9TZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtZGIvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9TZXJ2bGV0LmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKIC8qKgogICogVGVzdCBTZXJ2bGV0IHRoYXQgcHJpbnRzIG91dCB0aGUgbmFtZSBvZiB0aGUgYXV0aGVudGljYXRlZCBjYWxsZXIgYW5kIHdoZXRoZXIKICAqIHRoaXMgY2FsbGVyIGlzIGluIGFueSBvZiB0aGUgcm9sZXMge2ZvbywgYmFyLCBrYXp9Ci0gKiAKKyAqCiAgKgogICovCiBARGVjbGFyZVJvbGVzKHsgImZvbyIsICJiYXIiLCAia2F6IiB9KQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtZGIvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9UZXN0QXV0aGVudGljYXRpb25NZWNoYW5pc20uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWRiL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvVGVzdEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtLmphdmEKaW5kZXggYjdjYjY3ZS4uNDViMjIwOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtZGIvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9UZXN0QXV0aGVudGljYXRpb25NZWNoYW5pc20uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1kYi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1Rlc3RBdXRoZW50aWNhdGlvbk1lY2hhbmlzbS5qYXZhCkBAIC0zNCw3ICszNCw3IEBACiAKIEBSZXF1ZXN0U2NvcGVkCiBwdWJsaWMgY2xhc3MgVGVzdEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtIGltcGxlbWVudHMgSHR0cEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtIHsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBwcml2YXRlIElkZW50aXR5U3RvcmVIYW5kbGVyIGlkZW50aXR5U3RvcmVIYW5kbGVyOwogCkBAIC01NywxNyArNTcsMTcgQEAKIAogICAgICAgICAgICAgaWYgKHJlc3VsdC5nZXRTdGF0dXMoKSA9PSBWQUxJRCkgewogICAgICAgICAgICAgICAgIC8vIENvbW11bmljYXRlIHRoZSBkZXRhaWxzIG9mIHRoZSBhdXRoZW50aWNhdGVkIHVzZXIgdG8gdGhlCi0gICAgICAgICAgICAgICAgLy8gY29udGFpbmVyLiBJbiBtYW55IGNhc2VzIHRoZSB1bmRlcmx5aW5nIGhhbmRsZXIgd2lsbCBqdXN0IHN0b3JlIHRoZSBkZXRhaWxzIAotICAgICAgICAgICAgICAgIC8vIGFuZCB0aGUgY29udGFpbmVyIHdpbGwgYWN0dWFsbHkgaGFuZGxlIHRoZSBsb2dpbiBhZnRlciB3ZSByZXR1cm4gZnJvbSAKKyAgICAgICAgICAgICAgICAvLyBjb250YWluZXIuIEluIG1hbnkgY2FzZXMgdGhlIHVuZGVybHlpbmcgaGFuZGxlciB3aWxsIGp1c3Qgc3RvcmUgdGhlIGRldGFpbHMKKyAgICAgICAgICAgICAgICAvLyBhbmQgdGhlIGNvbnRhaW5lciB3aWxsIGFjdHVhbGx5IGhhbmRsZSB0aGUgbG9naW4gYWZ0ZXIgd2UgcmV0dXJuIGZyb20KICAgICAgICAgICAgICAgICAvLyB0aGlzIG1ldGhvZC4KICAgICAgICAgICAgICAgICByZXR1cm4gaHR0cE1lc3NhZ2VDb250ZXh0Lm5vdGlmeUNvbnRhaW5lckFib3V0TG9naW4oCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5nZXRDYWxsZXJQcmluY2lwYWwoKSwgcmVzdWx0LmdldENhbGxlckdyb3VwcygpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGh0dHBNZXNzYWdlQ29udGV4dC5yZXNwb25zZVVuYXV0aG9yaXplZCgpOwogICAgICAgICAgICAgfQotICAgICAgICB9IAorICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIGh0dHBNZXNzYWdlQ29udGV4dC5kb05vdGhpbmcoKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWRiL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2dsYXNzZmlzaC13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtZGIvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvZ2xhc3NmaXNoLXdlYi54bWwKaW5kZXggNjkzNzI0NC4uMTFkMGVlNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtZGIvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvZ2xhc3NmaXNoLXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtZGIvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvZ2xhc3NmaXNoLXdlYi54bWwKQEAgLTI0LDEyICsyNCwxMiBAQAogICAgICAgICA8cm9sZS1uYW1lPmZvbzwvcm9sZS1uYW1lPgogICAgICAgICA8Z3JvdXAtbmFtZT5mb288L2dyb3VwLW5hbWU+CiAgICAgPC9zZWN1cml0eS1yb2xlLW1hcHBpbmc+Ci0gICAgCisKICAgICA8c2VjdXJpdHktcm9sZS1tYXBwaW5nPgogICAgICAgICA8cm9sZS1uYW1lPmJhcjwvcm9sZS1uYW1lPgogICAgICAgICA8Z3JvdXAtbmFtZT5iYXI8L2dyb3VwLW5hbWU+CiAgICAgPC9zZWN1cml0eS1yb2xlLW1hcHBpbmc+Ci0gICAgCisKICAgICA8c2VjdXJpdHktcm9sZS1tYXBwaW5nPgogICAgICAgICA8cm9sZS1uYW1lPmthejwvcm9sZS1uYW1lPgogICAgICAgICA8Z3JvdXAtbmFtZT5rYXo8L2dyb3VwLW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1kYi9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0FwcERCSVQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWRiL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQXBwREJJVC5qYXZhCmluZGV4IDZmMGI2NTcuLjliZjZhMjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWRiL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQXBwREJJVC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWRiL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQXBwREJJVC5qYXZhCkBAIC00OCw3ICs0OCw3IEBACiAgICAgcHVibGljIHN0YXRpYyB2b2lkIHByaW50U3VtbWFyeSgpewogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KLSAgICAKKwogCiAgICAgQERlcGxveW1lbnQodGVzdGFibGUgPSBmYWxzZSkKICAgICBwdWJsaWMgc3RhdGljIEFyY2hpdmU8Pz4gY3JlYXRlRGVwbG95bWVudCgpIHsKQEAgLTYwLDE5ICs2MCwxOSBAQAogICAgICAgICBhc3NlcnREZWZhdWx0QXV0aGVudGljYXRlZCgKICAgICAgICAgICAgIHJlYWRGcm9tU2VydmVyKCIvc2VydmxldD9uYW1lPXJlemEmcGFzc3dvcmQ9c2VjcmV0MSIpKTsKICAgICB9Ci0gICAgCisKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3ROb3RBdXRoZW50aWNhdGVkKCkgewogICAgICAgICBhc3NlcnREZWZhdWx0Tm90QXV0aGVudGljYXRlZCgKICAgICAgICAgICAgIHJlYWRGcm9tU2VydmVyKCIvc2VydmxldCIpKTsKICAgICB9Ci0gICAgCisKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3ROb3RBdXRoZW50aWNhdGVkV3JvbmdOYW1lKCkgewogICAgICAgICBhc3NlcnREZWZhdWx0Tm90QXV0aGVudGljYXRlZCgKICAgICAgICAgICAgIHJlYWRGcm9tU2VydmVyKCIvc2VydmxldD9uYW1lPXJvbW8mcGFzc3dvcmQ9c2VjcmV0MSIpKTsKICAgICB9Ci0gICAgCisKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3ROb3RBdXRoZW50aWNhdGVkV3JvbmdQYXNzd29yZCgpIHsKICAgICAgICAgYXNzZXJ0RGVmYXVsdE5vdEF1dGhlbnRpY2F0ZWQoCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1kb3VibGUtaGFtL3BvbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1kb3VibGUtaGFtL3BvbS54bWwKaW5kZXggZDE4ZWE4My4uMzdjNzBjMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtZG91YmxlLWhhbS9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWRvdWJsZS1oYW0vcG9tLnhtbApAQCAtMTcsMjUgKzE3LDI1IEBACiAtLT4KIAogPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KLQk8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5nbGFzc2Zpc2guc290ZXJpYS50ZXN0PC9ncm91cElkPgogICAgIDxhcnRpZmFjdElkPnNvdGVyaWE8L2FydGlmYWN0SWQ+CiAgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCi0JPGFydGlmYWN0SWQ+YXBwLWRvdWJsZS1oYW08L2FydGlmYWN0SWQ+Ci0JPHBhY2thZ2luZz53YXI8L3BhY2thZ2luZz4KLQkKLQk8YnVpbGQ+CisgICAgPGFydGlmYWN0SWQ+YXBwLWRvdWJsZS1oYW08L2FydGlmYWN0SWQ+CisgICAgPHBhY2thZ2luZz53YXI8L3BhY2thZ2luZz4KKworICAgIDxidWlsZD4KICAgICAgICAgPGZpbmFsTmFtZT5hcHAtZG91YmxlLWhhbTwvZmluYWxOYW1lPgotCTwvYnVpbGQ+Ci0gICAgCisgICAgPC9idWlsZD4KKwogICAgIDxwcm9wZXJ0aWVzPgogICAgICAgICA8ZmFpbE9uTWlzc2luZ1dlYlhtbD5mYWxzZTwvZmFpbE9uTWlzc2luZ1dlYlhtbD4KICAgICA8L3Byb3BlcnRpZXM+Ci0gICAgCisKICAgICA8ZGVwZW5kZW5jaWVzPgogICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPm9yZy5nbGFzc2Zpc2guc290ZXJpYS50ZXN0PC9ncm91cElkPgpAQCAtNDQsNSArNDQsNSBAQAogICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgogICAgICAgICA8L2RlcGVuZGVuY3k+CiAgICAgPC9kZXBlbmRlbmNpZXM+Ci0gICAgCisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWRvdWJsZS1oYW0vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9Qcm90ZWN0ZWRTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1kb3VibGUtaGFtL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvUHJvdGVjdGVkU2VydmxldC5qYXZhCmluZGV4IDc5OTNmNzIuLmE0YmRjZGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWRvdWJsZS1oYW0vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9Qcm90ZWN0ZWRTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtZG91YmxlLWhhbS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1Byb3RlY3RlZFNlcnZsZXQuamF2YQpAQCAtMzMsNyArMzMsNyBAQAogLyoqCiAgKiBUZXN0IFNlcnZsZXQgdGhhdCBwcmludHMgb3V0IHRoZSBuYW1lIG9mIHRoZSBhdXRoZW50aWNhdGVkIGNhbGxlciBhbmQgd2hldGhlcgogICogdGhpcyBjYWxsZXIgaXMgaW4gYW55IG9mIHRoZSByb2xlcyB7Zm9vLCBiYXIsIGthen0KLSAqIAorICoKICAqCiAgKi8KIApAQCAtNDUsNyArNDUsNyBAQAogcHVibGljIGNsYXNzIFByb3RlY3RlZFNlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBwcml2YXRlIFNlY3VyaXR5Q29udGV4dCBzZWN1cml0eUNvbnRleHQ7CiAKQEAgLTY0LDIxICs2NCwyMSBAQAogICAgICAgICByZXNwb25zZS5nZXRXcml0ZXIoKS53cml0ZSgid2ViIHVzZXIgaGFzIHJvbGUgXCJmb29cIjogIiArIHJlcXVlc3QuaXNVc2VySW5Sb2xlKCJmb28iKSArICJcbiIpOwogICAgICAgICByZXNwb25zZS5nZXRXcml0ZXIoKS53cml0ZSgid2ViIHVzZXIgaGFzIHJvbGUgXCJiYXJcIjogIiArIHJlcXVlc3QuaXNVc2VySW5Sb2xlKCJiYXIiKSArICJcbiIpOwogICAgICAgICByZXNwb25zZS5nZXRXcml0ZXIoKS53cml0ZSgid2ViIHVzZXIgaGFzIHJvbGUgXCJrYXpcIjogIiArIHJlcXVlc3QuaXNVc2VySW5Sb2xlKCJrYXoiKSArICJcbiIpOwotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgY29udGV4dE5hbWUgPSBudWxsOwogICAgICAgICBpZiAoc2VjdXJpdHlDb250ZXh0LmdldENhbGxlclByaW5jaXBhbCgpICE9IG51bGwpIHsKICAgICAgICAgICAgIGNvbnRleHROYW1lID0gc2VjdXJpdHlDb250ZXh0LmdldENhbGxlclByaW5jaXBhbCgpLmdldE5hbWUoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXNwb25zZS5nZXRXcml0ZXIoKS53cml0ZSgiY29udGV4dCB1c2VybmFtZTogIiArIGNvbnRleHROYW1lICsgIlxuIik7Ci0gICAgICAgIAorCiAgICAgICAgIHJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKCJjb250ZXh0IHVzZXIgaGFzIHJvbGUgXCJmb29cIjogIiArIHNlY3VyaXR5Q29udGV4dC5pc0NhbGxlckluUm9sZSgiZm9vIikgKyAiXG4iKTsKICAgICAgICAgcmVzcG9uc2UuZ2V0V3JpdGVyKCkud3JpdGUoImNvbnRleHQgdXNlciBoYXMgcm9sZSBcImJhclwiOiAiICsgc2VjdXJpdHlDb250ZXh0LmlzQ2FsbGVySW5Sb2xlKCJiYXIiKSArICJcbiIpOwogICAgICAgICByZXNwb25zZS5nZXRXcml0ZXIoKS53cml0ZSgiY29udGV4dCB1c2VyIGhhcyByb2xlIFwia2F6XCI6ICIgKyBzZWN1cml0eUNvbnRleHQuaXNDYWxsZXJJblJvbGUoImtheiIpICsgIlxuIik7Ci0gICAgICAgIAorCiAgICAgICAgIHJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKCJoYXMgYWNjZXNzICIgKyBzZWN1cml0eUNvbnRleHQuaGFzQWNjZXNzVG9XZWJSZXNvdXJjZSgiL3NlcnZsZXRzIikpOwotICAgICAgICAKLSAgICAgICAgCisKKwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtZG91YmxlLWhhbS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1NlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWRvdWJsZS1oYW0vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9TZXJ2bGV0LmphdmEKaW5kZXggMWRhYjlmMy4uZDM2ZWEzOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtZG91YmxlLWhhbS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1NlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1kb3VibGUtaGFtL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvU2VydmxldC5qYXZhCkBAIC0zMiw3ICszMiw3IEBACiAvKioKICAqIFRlc3QgU2VydmxldCB0aGF0IHByaW50cyBvdXQgdGhlIG5hbWUgb2YgdGhlIGF1dGhlbnRpY2F0ZWQgY2FsbGVyIGFuZCB3aGV0aGVyCiAgKiB0aGlzIGNhbGxlciBpcyBpbiBhbnkgb2YgdGhlIHJvbGVzIHtmb28sIGJhciwga2F6fQotICogCisgKgogICoKICAqLwogQEJhc2ljQXV0aGVudGljYXRpb25NZWNoYW5pc21EZWZpbml0aW9uKApAQCAtNDMsNyArNDMsNyBAQAogcHVibGljIGNsYXNzIFNlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBwcml2YXRlIFNlY3VyaXR5Q29udGV4dCBzZWN1cml0eUNvbnRleHQ7CiAKQEAgLTYyLDIwICs2MiwyMCBAQAogICAgICAgICByZXNwb25zZS5nZXRXcml0ZXIoKS53cml0ZSgid2ViIHVzZXIgaGFzIHJvbGUgXCJmb29cIjogIiArIHJlcXVlc3QuaXNVc2VySW5Sb2xlKCJmb28iKSArICJcbiIpOwogICAgICAgICByZXNwb25zZS5nZXRXcml0ZXIoKS53cml0ZSgid2ViIHVzZXIgaGFzIHJvbGUgXCJiYXJcIjogIiArIHJlcXVlc3QuaXNVc2VySW5Sb2xlKCJiYXIiKSArICJcbiIpOwogICAgICAgICByZXNwb25zZS5nZXRXcml0ZXIoKS53cml0ZSgid2ViIHVzZXIgaGFzIHJvbGUgXCJrYXpcIjogIiArIHJlcXVlc3QuaXNVc2VySW5Sb2xlKCJrYXoiKSArICJcbiIpOwotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgY29udGV4dE5hbWUgPSBudWxsOwogICAgICAgICBpZiAoc2VjdXJpdHlDb250ZXh0LmdldENhbGxlclByaW5jaXBhbCgpICE9IG51bGwpIHsKICAgICAgICAgICAgIGNvbnRleHROYW1lID0gc2VjdXJpdHlDb250ZXh0LmdldENhbGxlclByaW5jaXBhbCgpLmdldE5hbWUoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXNwb25zZS5nZXRXcml0ZXIoKS53cml0ZSgiY29udGV4dCB1c2VybmFtZTogIiArIGNvbnRleHROYW1lICsgIlxuIik7Ci0gICAgICAgIAorCiAgICAgICAgIHJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKCJjb250ZXh0IHVzZXIgaGFzIHJvbGUgXCJmb29cIjogIiArIHNlY3VyaXR5Q29udGV4dC5pc0NhbGxlckluUm9sZSgiZm9vIikgKyAiXG4iKTsKICAgICAgICAgcmVzcG9uc2UuZ2V0V3JpdGVyKCkud3JpdGUoImNvbnRleHQgdXNlciBoYXMgcm9sZSBcImJhclwiOiAiICsgc2VjdXJpdHlDb250ZXh0LmlzQ2FsbGVySW5Sb2xlKCJiYXIiKSArICJcbiIpOwogICAgICAgICByZXNwb25zZS5nZXRXcml0ZXIoKS53cml0ZSgiY29udGV4dCB1c2VyIGhhcyByb2xlIFwia2F6XCI6ICIgKyBzZWN1cml0eUNvbnRleHQuaXNDYWxsZXJJblJvbGUoImtheiIpICsgIlxuIik7Ci0gICAgICAgIAorCiAgICAgICAgIHJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKCJoYXMgYWNjZXNzICIgKyBzZWN1cml0eUNvbnRleHQuaGFzQWNjZXNzVG9XZWJSZXNvdXJjZSgiL3Byb3RlY3RlZFNlcnZsZXQiKSArICJcbiIpOwotICAgICAgICAKKwogICAgICAgICByZXNwb25zZS5nZXRXcml0ZXIoKS53cml0ZSgiQWxsIGRlY2xhcmVkIHJvbGVzIG9mIHVzZXIgIiArICgoU2VjdXJpdHlDb250ZXh0SW1wbClzZWN1cml0eUNvbnRleHQpLmdldEFsbERlY2xhcmVkQ2FsbGVyUm9sZXMoKSArICJcbiIpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtZG91YmxlLWhhbS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1Rlc3RBdXRoZW50aWNhdGlvbk1lY2hhbmlzbS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtZG91YmxlLWhhbS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1Rlc3RBdXRoZW50aWNhdGlvbk1lY2hhbmlzbS5qYXZhCmluZGV4IGRlZmRhODIuLmExMjIwYTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWRvdWJsZS1oYW0vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9UZXN0QXV0aGVudGljYXRpb25NZWNoYW5pc20uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1kb3VibGUtaGFtL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvVGVzdEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtLmphdmEKQEAgLTMyLDIwICszMiwyMCBAQAogCiBAUmVxdWVzdFNjb3BlZAogcHVibGljIGNsYXNzIFRlc3RBdXRoZW50aWNhdGlvbk1lY2hhbmlzbSBpbXBsZW1lbnRzIEh0dHBBdXRoZW50aWNhdGlvbk1lY2hhbmlzbSB7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgcHJpdmF0ZSBJZGVudGl0eVN0b3JlSGFuZGxlciBpZGVudGl0eVN0b3JlSGFuZGxlcjsKIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBBdXRoZW50aWNhdGlvblN0YXR1cyB2YWxpZGF0ZVJlcXVlc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UsIEh0dHBNZXNzYWdlQ29udGV4dCBodHRwTWVzc2FnZUNvbnRleHQpIHRocm93cyBBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbiB7CiAKLSAgICAJLy8gR2V0IHRoZSAoY2FsbGVyKSBuYW1lIGFuZCBwYXNzd29yZCBmcm9tIHRoZSByZXF1ZXN0CisgICAgICAgIC8vIEdldCB0aGUgKGNhbGxlcikgbmFtZSBhbmQgcGFzc3dvcmQgZnJvbSB0aGUgcmVxdWVzdAogICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIGZvciB0aGUgc21hbGxlc3QgcG9zc2libGUgZXhhbXBsZSBvbmx5LiBJbiBwcmFjdGljZQogICAgICAgICAvLyBwdXR0aW5nIHRoZSBwYXNzd29yZCBpbiBhIHJlcXVlc3QgcXVlcnkgcGFyYW1ldGVyIGlzIGhpZ2hseQogICAgICAgICAvLyBpbnNlY3VyZQogICAgICAgICBTdHJpbmcgbmFtZSA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJuYW1lIik7CiAgICAgICAgIFN0cmluZyBwYXNzd29yZCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJwYXNzd29yZCIpOwotICAgIAkKKwogICAgICAgICBpZiAobmFtZSAhPSBudWxsICYmIHBhc3N3b3JkICE9IG51bGwpIHsKIAogICAgICAgICAgICAgLy8gRGVsZWdhdGUgdGhlIHtjcmVkZW50aWFscyBpbiAtPiBpZGVudGl0eSBkYXRhIG91dH0gZnVuY3Rpb24gdG8KQEAgLTU1LDE3ICs1NSwxNyBAQAogCiAgICAgICAgICAgICBpZiAocmVzdWx0LmdldFN0YXR1cygpID09IFZBTElEKSB7CiAgICAgICAgICAgICAgICAgLy8gQ29tbXVuaWNhdGUgdGhlIGRldGFpbHMgb2YgdGhlIGF1dGhlbnRpY2F0ZWQgdXNlciB0byB0aGUKLSAgICAgICAgICAgICAgICAvLyBjb250YWluZXIuIEluIG1hbnkgY2FzZXMgdGhlIHVuZGVybHlpbmcgaGFuZGxlciB3aWxsIGp1c3Qgc3RvcmUgdGhlIGRldGFpbHMgCi0gICAgICAgICAgICAgICAgLy8gYW5kIHRoZSBjb250YWluZXIgd2lsbCBhY3R1YWxseSBoYW5kbGUgdGhlIGxvZ2luIGFmdGVyIHdlIHJldHVybiBmcm9tIAorICAgICAgICAgICAgICAgIC8vIGNvbnRhaW5lci4gSW4gbWFueSBjYXNlcyB0aGUgdW5kZXJseWluZyBoYW5kbGVyIHdpbGwganVzdCBzdG9yZSB0aGUgZGV0YWlscworICAgICAgICAgICAgICAgIC8vIGFuZCB0aGUgY29udGFpbmVyIHdpbGwgYWN0dWFsbHkgaGFuZGxlIHRoZSBsb2dpbiBhZnRlciB3ZSByZXR1cm4gZnJvbQogICAgICAgICAgICAgICAgIC8vIHRoaXMgbWV0aG9kLgogICAgICAgICAgICAgICAgIHJldHVybiBodHRwTWVzc2FnZUNvbnRleHQubm90aWZ5Q29udGFpbmVyQWJvdXRMb2dpbigKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmdldENhbGxlclByaW5jaXBhbCgpLCByZXN1bHQuZ2V0Q2FsbGVyR3JvdXBzKCkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICByZXR1cm4gaHR0cE1lc3NhZ2VDb250ZXh0LnJlc3BvbnNlVW5hdXRob3JpemVkKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gCisgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gaHR0cE1lc3NhZ2VDb250ZXh0LmRvTm90aGluZygpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtZG91YmxlLWhhbS9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtZG91YmxlLWhhbS9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCmluZGV4IDA5ZmZmYjQuLjZjYTM1NDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWRvdWJsZS1oYW0vc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1kb3VibGUtaGFtL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKQEAgLTE4LDI3ICsxOCwyNyBAQAogLS0+CiAKIDx3ZWItYXBwCi0JeG1sbnM9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUgaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS93ZWItYXBwXzNfMS54c2QiCi0JdmVyc2lvbj0iMy4xIgorICAgIHhtbG5zPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlIGh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8zXzEueHNkIgorICAgIHZlcnNpb249IjMuMSIKID4KIAotCTwhLS0gU2VjdXJpdHkgY29uc3RyYWludHMgYW5kIHJvbGVzLiAtLT4KKyAgICA8IS0tIFNlY3VyaXR5IGNvbnN0cmFpbnRzIGFuZCByb2xlcy4gLS0+CiAKLQk8c2VjdXJpdHktY29uc3RyYWludD4KLQkJPHdlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgotCQkJPHdlYi1yZXNvdXJjZS1uYW1lPlVzZXIgcGFnZXM8L3dlYi1yZXNvdXJjZS1uYW1lPgotCQkJPHVybC1wYXR0ZXJuPi9wcm90ZWN0ZWRTZXJ2bGV0PC91cmwtcGF0dGVybj4KLQkJPC93ZWItcmVzb3VyY2UtY29sbGVjdGlvbj4KLQkJPGF1dGgtY29uc3RyYWludD4KLQkJCTxyb2xlLW5hbWU+Zm9vPC9yb2xlLW5hbWU+Ci0JCTwvYXV0aC1jb25zdHJhaW50PgotCTwvc2VjdXJpdHktY29uc3RyYWludD4KKyAgICA8c2VjdXJpdHktY29uc3RyYWludD4KKyAgICAgICAgPHdlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgorICAgICAgICAgICAgPHdlYi1yZXNvdXJjZS1uYW1lPlVzZXIgcGFnZXM8L3dlYi1yZXNvdXJjZS1uYW1lPgorICAgICAgICAgICAgPHVybC1wYXR0ZXJuPi9wcm90ZWN0ZWRTZXJ2bGV0PC91cmwtcGF0dGVybj4KKyAgICAgICAgPC93ZWItcmVzb3VyY2UtY29sbGVjdGlvbj4KKyAgICAgICAgPGF1dGgtY29uc3RyYWludD4KKyAgICAgICAgICAgIDxyb2xlLW5hbWU+Zm9vPC9yb2xlLW5hbWU+CisgICAgICAgIDwvYXV0aC1jb25zdHJhaW50PgorICAgIDwvc2VjdXJpdHktY29uc3RyYWludD4KIAogCi0JPHNlY3VyaXR5LXJvbGU+Ci0JCTxyb2xlLW5hbWU+Zm9vPC9yb2xlLW5hbWU+Ci0JPC9zZWN1cml0eS1yb2xlPgorICAgIDxzZWN1cml0eS1yb2xlPgorICAgICAgICA8cm9sZS1uYW1lPmZvbzwvcm9sZS1uYW1lPgorICAgIDwvc2VjdXJpdHktcm9sZT4KIAogPC93ZWItYXBwPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtZG91YmxlLWhhbS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0FwcERvdWJsZUhBTUlULmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1kb3VibGUtaGFtL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQXBwRG91YmxlSEFNSVQuamF2YQppbmRleCA3MDFkNDA3Li4xYjVlYjZlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1kb3VibGUtaGFtL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQXBwRG91YmxlSEFNSVQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1kb3VibGUtaGFtL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQXBwRG91YmxlSEFNSVQuamF2YQpAQCAtNDUsNyArNDUsNyBAQAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBwcmludFN1bW1hcnkoKXsKICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQotICAgCisKICAgICBARGVwbG95bWVudCh0ZXN0YWJsZSA9IGZhbHNlKQogICAgIHB1YmxpYyBzdGF0aWMgQXJjaGl2ZTw/PiBjcmVhdGVEZXBsb3ltZW50KCkgewogICAgICAgICByZXR1cm4gbWF2ZW5XYXIoKTsKQEAgLTYyLDcgKzYyLDcgQEAKICAgICAgICAgYXNzZXJ0Tm90QXV0aGVudGljYXRlZEVycm9yKAogICAgICAgICAgICAgICAgIHJlc3BvbnNlRnJvbVNlcnZlcigiL3NlcnZsZXQiKSk7CiAgICAgfQotICAgIAorCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0Q3VzdG9tSGFtKCkgewogICAgICAgICBhc3NlcnROb3RBdXRoZW50aWNhdGVkRXJyb3IoCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1oYW0tb3JkZXJpbmcvcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWhhbS1vcmRlcmluZy9wb20ueG1sCmluZGV4IDZiZGQ1ZjguLjZjOGY2MjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWhhbS1vcmRlcmluZy9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWhhbS1vcmRlcmluZy9wb20ueG1sCkBAIC0xNywyNCArMTcsMjQgQEAKIC0tPgogCiA8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgotCTxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmdsYXNzZmlzaC5zb3RlcmlhLnRlc3Q8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+c290ZXJpYTwvYXJ0aWZhY3RJZD4KICAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKLQk8YXJ0aWZhY3RJZD5hcHAtaGFtLW9yZGVyaW5nPC9hcnRpZmFjdElkPgotCTxwYWNrYWdpbmc+d2FyPC9wYWNrYWdpbmc+Ci0JCi0JPGJ1aWxkPgorICAgIDxhcnRpZmFjdElkPmFwcC1oYW0tb3JkZXJpbmc8L2FydGlmYWN0SWQ+CisgICAgPHBhY2thZ2luZz53YXI8L3BhY2thZ2luZz4KKworICAgIDxidWlsZD4KICAgICAgICAgPGZpbmFsTmFtZT5hcHAtaGFtLW9yZGVyaW5nPC9maW5hbE5hbWU+Ci0JPC9idWlsZD4KLSAgICAKKyAgICA8L2J1aWxkPgorCiAgICAgPHByb3BlcnRpZXM+CiAgICAgICAgIDxmYWlsT25NaXNzaW5nV2ViWG1sPmZhbHNlPC9mYWlsT25NaXNzaW5nV2ViWG1sPgotICAgIDwvcHJvcGVydGllcz4gIAorICAgIDwvcHJvcGVydGllcz4KIAogICA8ZGVwZW5kZW5jaWVzPgogICAgIDxkZXBlbmRlbmN5PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtaGFtLW9yZGVyaW5nL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtaGFtLW9yZGVyaW5nL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvU2VydmxldC5qYXZhCmluZGV4IDJlOTM0OTMuLmY5ZTViZTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWhhbS1vcmRlcmluZy9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1NlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1oYW0tb3JkZXJpbmcvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9TZXJ2bGV0LmphdmEKQEAgLTM1LDcgKzM1LDcgQEAKIC8qKgogICogVGVzdCBTZXJ2bGV0IHRoYXQgcHJpbnRzIG91dCB0aGUgbmFtZSBvZiB0aGUgYXV0aGVudGljYXRlZCBjYWxsZXIgYW5kIHdoZXRoZXIKICAqIHRoaXMgY2FsbGVyIGlzIGluIGFueSBvZiB0aGUgcm9sZXMge2ZvbywgYmFyLCBrYXp9Ci0gKiAKKyAqCiAgKgogICovCiBARGVjbGFyZVJvbGVzKHsgImZvbyIsICJiYXIiLCAia2F6IiB9KQpAQCAtNDMsNyArNDMsNyBAQAogcHVibGljIGNsYXNzIFNlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBwcml2YXRlIFNlY3VyaXR5Q29udGV4dCBzZWN1cml0eUNvbnRleHQ7CiAKQEAgLTc4LDIxICs3OCwyMSBAQAogICAgICAgICByZXNwb25zZS5nZXRXcml0ZXIoKS53cml0ZSgid2ViIHVzZXIgaGFzIHJvbGUgXCJmb29cIjogIiArIHJlcXVlc3QuaXNVc2VySW5Sb2xlKCJmb28iKSArICJcbiIpOwogICAgICAgICByZXNwb25zZS5nZXRXcml0ZXIoKS53cml0ZSgid2ViIHVzZXIgaGFzIHJvbGUgXCJiYXJcIjogIiArIHJlcXVlc3QuaXNVc2VySW5Sb2xlKCJiYXIiKSArICJcbiIpOwogICAgICAgICByZXNwb25zZS5nZXRXcml0ZXIoKS53cml0ZSgid2ViIHVzZXIgaGFzIHJvbGUgXCJrYXpcIjogIiArIHJlcXVlc3QuaXNVc2VySW5Sb2xlKCJrYXoiKSArICJcbiIpOwotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgY29udGV4dE5hbWUgPSBudWxsOwogICAgICAgICBpZiAoc2VjdXJpdHlDb250ZXh0LmdldENhbGxlclByaW5jaXBhbCgpICE9IG51bGwpIHsKICAgICAgICAgICAgIGNvbnRleHROYW1lID0gc2VjdXJpdHlDb250ZXh0LmdldENhbGxlclByaW5jaXBhbCgpLmdldE5hbWUoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXNwb25zZS5nZXRXcml0ZXIoKS53cml0ZSgiY29udGV4dCB1c2VybmFtZTogIiArIGNvbnRleHROYW1lICsgIlxuIik7CiAKLSAgICAgICAgCisKICAgICAgICAgcmVzcG9uc2UuZ2V0V3JpdGVyKCkud3JpdGUoImNvbnRleHQgdXNlciBoYXMgcm9sZSBcImZvb1wiOiAiICsgc2VjdXJpdHlDb250ZXh0LmlzQ2FsbGVySW5Sb2xlKCJmb28iKSArICJcbiIpOwogICAgICAgICByZXNwb25zZS5nZXRXcml0ZXIoKS53cml0ZSgiY29udGV4dCB1c2VyIGhhcyByb2xlIFwiYmFyXCI6ICIgKyBzZWN1cml0eUNvbnRleHQuaXNDYWxsZXJJblJvbGUoImJhciIpICsgIlxuIik7CiAgICAgICAgIHJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKCJjb250ZXh0IHVzZXIgaGFzIHJvbGUgXCJrYXpcIjogIiArIHNlY3VyaXR5Q29udGV4dC5pc0NhbGxlckluUm9sZSgia2F6IikgKyAiXG4iKTsKLSAgICAgICAgCisKICAgICAgICAgcmVzcG9uc2UuZ2V0V3JpdGVyKCkud3JpdGUoImhhcyBhY2Nlc3MgIiArIHNlY3VyaXR5Q29udGV4dC5oYXNBY2Nlc3NUb1dlYlJlc291cmNlKCIvcHJvdGVjdGVkU2VydmxldCIpICsgIlxuIik7Ci0gICAgICAgIAorCiAgICAgICAgIHJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKCJBbGwgZGVjbGFyZWQgcm9sZXMgb2YgdXNlciAiICsgKChTZWN1cml0eUNvbnRleHRJbXBsKXNlY3VyaXR5Q29udGV4dCkuZ2V0QWxsRGVjbGFyZWRDYWxsZXJSb2xlcygpICsgIlxuIik7CiAgICAgICAgIFN0cmluZyBpbnZMaXN0U3RyID0gKFN0cmluZylyZXF1ZXN0LmdldEF0dHJpYnV0ZSgibWV0aG9kSW52TGlzdCIpOwogICAgICAgICByZXNwb25zZS5nZXRXcml0ZXIoKS53cml0ZSgiT3JkZXJpbmdMaXN0OiAiICsgaW52TGlzdFN0cik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1oYW0tb3JkZXJpbmcvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9UZXN0QXV0aGVudGljYXRpb25NZWNoYW5pc20uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWhhbS1vcmRlcmluZy9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1Rlc3RBdXRoZW50aWNhdGlvbk1lY2hhbmlzbS5qYXZhCmluZGV4IGYyNTBkOWUuLmJkNGMxMzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWhhbS1vcmRlcmluZy9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1Rlc3RBdXRoZW50aWNhdGlvbk1lY2hhbmlzbS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWhhbS1vcmRlcmluZy9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1Rlc3RBdXRoZW50aWNhdGlvbk1lY2hhbmlzbS5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiAKIEBSZXF1ZXN0U2NvcGVkCiBwdWJsaWMgY2xhc3MgVGVzdEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtIGltcGxlbWVudHMgSHR0cEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtIHsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBwcml2YXRlIElkZW50aXR5U3RvcmVIYW5kbGVyIGlkZW50aXR5U3RvcmVIYW5kbGVyOwogCkBAIC02MCwxNSArNjAsMTUgQEAKIAogICAgICAgICAgICAgaWYgKHJlc3VsdC5nZXRTdGF0dXMoKSA9PSBWQUxJRCkgewogICAgICAgICAgICAgICAgIC8vIENvbW11bmljYXRlIHRoZSBkZXRhaWxzIG9mIHRoZSBhdXRoZW50aWNhdGVkIHVzZXIgdG8gdGhlCi0gICAgICAgICAgICAgICAgLy8gY29udGFpbmVyLiBJbiBtYW55IGNhc2VzIHRoZSB1bmRlcmx5aW5nIGhhbmRsZXIgd2lsbCBqdXN0IHN0b3JlIHRoZSBkZXRhaWxzIAotICAgICAgICAgICAgICAgIC8vIGFuZCB0aGUgY29udGFpbmVyIHdpbGwgYWN0dWFsbHkgaGFuZGxlIHRoZSBsb2dpbiBhZnRlciB3ZSByZXR1cm4gZnJvbSAKKyAgICAgICAgICAgICAgICAvLyBjb250YWluZXIuIEluIG1hbnkgY2FzZXMgdGhlIHVuZGVybHlpbmcgaGFuZGxlciB3aWxsIGp1c3Qgc3RvcmUgdGhlIGRldGFpbHMKKyAgICAgICAgICAgICAgICAvLyBhbmQgdGhlIGNvbnRhaW5lciB3aWxsIGFjdHVhbGx5IGhhbmRsZSB0aGUgbG9naW4gYWZ0ZXIgd2UgcmV0dXJuIGZyb20KICAgICAgICAgICAgICAgICAvLyB0aGlzIG1ldGhvZC4KICAgICAgICAgICAgICAgICByZXR1cm4gaHR0cE1lc3NhZ2VDb250ZXh0Lm5vdGlmeUNvbnRhaW5lckFib3V0TG9naW4oCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5nZXRDYWxsZXJQcmluY2lwYWwoKSwgcmVzdWx0LmdldENhbGxlckdyb3VwcygpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGh0dHBNZXNzYWdlQ29udGV4dC5yZXNwb25zZVVuYXV0aG9yaXplZCgpOwogICAgICAgICAgICAgfQotICAgICAgICB9IAorICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIGh0dHBNZXNzYWdlQ29udGV4dC5kb05vdGhpbmcoKTsKICAgICB9CkBAIC0xMDcsNSArMTA3LDUgQEAKICAgICAgICAgICAgIHJlcXVlc3Quc2V0QXR0cmlidXRlKCJtZXRob2RJbnZMaXN0IiwgaW52TGlzdC5zdHJlYW0oKS5jb2xsZWN0KENvbGxlY3RvcnMuam9pbmluZygiLCIpKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWhhbS1vcmRlcmluZy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtaGFtLW9yZGVyaW5nL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKaW5kZXggMDlmZmZiNC4uNmNhMzU0NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtaGFtLW9yZGVyaW5nL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtaGFtLW9yZGVyaW5nL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKQEAgLTE4LDI3ICsxOCwyNyBAQAogLS0+CiAKIDx3ZWItYXBwCi0JeG1sbnM9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUgaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS93ZWItYXBwXzNfMS54c2QiCi0JdmVyc2lvbj0iMy4xIgorICAgIHhtbG5zPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlIGh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8zXzEueHNkIgorICAgIHZlcnNpb249IjMuMSIKID4KIAotCTwhLS0gU2VjdXJpdHkgY29uc3RyYWludHMgYW5kIHJvbGVzLiAtLT4KKyAgICA8IS0tIFNlY3VyaXR5IGNvbnN0cmFpbnRzIGFuZCByb2xlcy4gLS0+CiAKLQk8c2VjdXJpdHktY29uc3RyYWludD4KLQkJPHdlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgotCQkJPHdlYi1yZXNvdXJjZS1uYW1lPlVzZXIgcGFnZXM8L3dlYi1yZXNvdXJjZS1uYW1lPgotCQkJPHVybC1wYXR0ZXJuPi9wcm90ZWN0ZWRTZXJ2bGV0PC91cmwtcGF0dGVybj4KLQkJPC93ZWItcmVzb3VyY2UtY29sbGVjdGlvbj4KLQkJPGF1dGgtY29uc3RyYWludD4KLQkJCTxyb2xlLW5hbWU+Zm9vPC9yb2xlLW5hbWU+Ci0JCTwvYXV0aC1jb25zdHJhaW50PgotCTwvc2VjdXJpdHktY29uc3RyYWludD4KKyAgICA8c2VjdXJpdHktY29uc3RyYWludD4KKyAgICAgICAgPHdlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgorICAgICAgICAgICAgPHdlYi1yZXNvdXJjZS1uYW1lPlVzZXIgcGFnZXM8L3dlYi1yZXNvdXJjZS1uYW1lPgorICAgICAgICAgICAgPHVybC1wYXR0ZXJuPi9wcm90ZWN0ZWRTZXJ2bGV0PC91cmwtcGF0dGVybj4KKyAgICAgICAgPC93ZWItcmVzb3VyY2UtY29sbGVjdGlvbj4KKyAgICAgICAgPGF1dGgtY29uc3RyYWludD4KKyAgICAgICAgICAgIDxyb2xlLW5hbWU+Zm9vPC9yb2xlLW5hbWU+CisgICAgICAgIDwvYXV0aC1jb25zdHJhaW50PgorICAgIDwvc2VjdXJpdHktY29uc3RyYWludD4KIAogCi0JPHNlY3VyaXR5LXJvbGU+Ci0JCTxyb2xlLW5hbWU+Zm9vPC9yb2xlLW5hbWU+Ci0JPC9zZWN1cml0eS1yb2xlPgorICAgIDxzZWN1cml0eS1yb2xlPgorICAgICAgICA8cm9sZS1uYW1lPmZvbzwvcm9sZS1uYW1lPgorICAgIDwvc2VjdXJpdHktcm9sZT4KIAogPC93ZWItYXBwPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtaGFtLW9yZGVyaW5nL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQXBwSEFNT3JkZXJpbmdJVC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtaGFtLW9yZGVyaW5nL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQXBwSEFNT3JkZXJpbmdJVC5qYXZhCmluZGV4IDU2NmY2YzguLmNhYWM3MmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLWhhbS1vcmRlcmluZy9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0FwcEhBTU9yZGVyaW5nSVQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1oYW0tb3JkZXJpbmcvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9BcHBIQU1PcmRlcmluZ0lULmphdmEKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgcHJpbnRTdW1tYXJ5KCl7CiAgICAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KLSAgIAorCiAgICAgQERlcGxveW1lbnQodGVzdGFibGUgPSBmYWxzZSkKICAgICBwdWJsaWMgc3RhdGljIEFyY2hpdmU8Pz4gY3JlYXRlRGVwbG95bWVudCgpIHsKICAgICAgICAgcmV0dXJuIG1hdmVuV2FyKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1tZW0tYmFzaWMvcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW1lbS1iYXNpYy9wb20ueG1sCmluZGV4IDQ1N2RhMTUuLjdhYjRhYjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW1lbS1iYXNpYy9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW1lbS1iYXNpYy9wb20ueG1sCkBAIC0xOSwyNCArMTksMjQgQEAKIDxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KICAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+Ci0JCisKICAgICA8cGFyZW50PgogICAgICAgICA8Z3JvdXBJZD5vcmcuZ2xhc3NmaXNoLnNvdGVyaWEudGVzdDwvZ3JvdXBJZD4KICAgICAgICAgPGFydGlmYWN0SWQ+c290ZXJpYTwvYXJ0aWZhY3RJZD4KICAgICAgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgICAgPC9wYXJlbnQ+Ci0JCisKICAgICA8YXJ0aWZhY3RJZD5hcHAtbWVtLWJhc2ljPC9hcnRpZmFjdElkPgogICAgIDxwYWNrYWdpbmc+d2FyPC9wYWNrYWdpbmc+Ci0JCisKICAgICA8YnVpbGQ+CiAgICAgICAgIDxmaW5hbE5hbWU+YXBwLW1lbS1iYXNpYzwvZmluYWxOYW1lPgogICAgIDwvYnVpbGQ+Ci0gICAgICAKKwogICAgIDxwcm9wZXJ0aWVzPgogICAgICAgICA8ZmFpbE9uTWlzc2luZ1dlYlhtbD5mYWxzZTwvZmFpbE9uTWlzc2luZ1dlYlhtbD4KICAgICA8L3Byb3BlcnRpZXM+Ci0gICAgCisKICAgICA8ZGVwZW5kZW5jaWVzPgogICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPm9yZy5nbGFzc2Zpc2guc290ZXJpYS50ZXN0PC9ncm91cElkPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbWVtLWJhc2ljL3NyYy9tYWluL2phdmEvdGVzdC9TZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1tZW0tYmFzaWMvc3JjL21haW4vamF2YS90ZXN0L1NlcnZsZXQuamF2YQppbmRleCBiM2FjZTU4Li40NzYyMzI4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1tZW0tYmFzaWMvc3JjL21haW4vamF2YS90ZXN0L1NlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1tZW0tYmFzaWMvc3JjL21haW4vamF2YS90ZXN0L1NlcnZsZXQuamF2YQpAQCAtMzgsNyArMzgsNyBAQAogICAgIHJlYWxtTmFtZT0idGVzdCByZWFsbSIKICkKIAotQEVtYmVkZGVkSWRlbnRpdHlTdG9yZURlZmluaXRpb24oeyAKK0BFbWJlZGRlZElkZW50aXR5U3RvcmVEZWZpbml0aW9uKHsKICAgICBAQ3JlZGVudGlhbHMoY2FsbGVyTmFtZSA9ICJyZXphIiwgcGFzc3dvcmQgPSAic2VjcmV0MSIsIGdyb3VwcyA9IHsgImZvbyIsICJiYXIiIH0pLAogICAgIEBDcmVkZW50aWFscyhjYWxsZXJOYW1lID0gImFsZXgiLCBwYXNzd29yZCA9ICJzZWNyZXQyIiwgZ3JvdXBzID0geyAiZm9vIiwgImtheiIgfSksCiAgICAgQENyZWRlbnRpYWxzKGNhbGxlck5hbWUgPSAiYXJqYW4iLCBwYXNzd29yZCA9ICJzZWNyZXQzIiwgZ3JvdXBzID0geyAiZm9vIiB9KSB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1tZW0tYmFzaWMvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9BcHBNZW1CYXNpY0lULmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1tZW0tYmFzaWMvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9BcHBNZW1CYXNpY0lULmphdmEKaW5kZXggNmIwNzk3MS4uMTAyYTJjMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbWVtLWJhc2ljL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQXBwTWVtQmFzaWNJVC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW1lbS1iYXNpYy9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0FwcE1lbUJhc2ljSVQuamF2YQpAQCAtNDcsNzUgKzQ3LDc1IEBACiAgICAgcHVibGljIHN0YXRpYyB2b2lkIHByaW50U3VtbWFyeSgpewogICAgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9Ci0gICAgCisKICAgICBARGVwbG95bWVudCh0ZXN0YWJsZSA9IGZhbHNlKQotICAgIHB1YmxpYyBzdGF0aWMgQXJjaGl2ZTw/PiBjcmVhdGVEZXBsb3ltZW50KCkgeyAgICAgICAgCisgICAgcHVibGljIHN0YXRpYyBBcmNoaXZlPD8+IGNyZWF0ZURlcGxveW1lbnQoKSB7CiAgICAgICAgIHJldHVybiBtYXZlbldhcigpOwogICAgIH0KIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdEF1dGhlbnRpY2F0ZWQoKSB7Ci0gICAgCQotICAgIAlEZWZhdWx0Q3JlZGVudGlhbHNQcm92aWRlciBjcmVkZW50aWFsc1Byb3ZpZGVyID0gbmV3IERlZmF1bHRDcmVkZW50aWFsc1Byb3ZpZGVyKCk7Ci0gICAgCWNyZWRlbnRpYWxzUHJvdmlkZXIuYWRkQ3JlZGVudGlhbHMoInJlemEiLCAic2VjcmV0MSIpOwotICAgIAkKLSAgICAJZ2V0V2ViQ2xpZW50KCkuc2V0Q3JlZGVudGlhbHNQcm92aWRlcihjcmVkZW50aWFsc1Byb3ZpZGVyKTsKLSAgICAJCisKKyAgICAgICAgRGVmYXVsdENyZWRlbnRpYWxzUHJvdmlkZXIgY3JlZGVudGlhbHNQcm92aWRlciA9IG5ldyBEZWZhdWx0Q3JlZGVudGlhbHNQcm92aWRlcigpOworICAgICAgICBjcmVkZW50aWFsc1Byb3ZpZGVyLmFkZENyZWRlbnRpYWxzKCJyZXphIiwgInNlY3JldDEiKTsKKworICAgICAgICBnZXRXZWJDbGllbnQoKS5zZXRDcmVkZW50aWFsc1Byb3ZpZGVyKGNyZWRlbnRpYWxzUHJvdmlkZXIpOworCiAgICAgICAgIGFzc2VydERlZmF1bHRBdXRoZW50aWNhdGVkKAogICAgICAgICAgICAgcmVhZEZyb21TZXJ2ZXIoIi9zZXJ2bGV0IikpOwogICAgIH0KLSAgICAKKwogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdE5vdEF1dGhlbnRpY2F0ZWQoKSB7Ci0gICAgICAgIAorCiAgICAgICAgIFdlYlJlc3BvbnNlIHJlc3BvbnNlID0gcmVzcG9uc2VGcm9tU2VydmVyKCIvc2VydmxldCIpOwotICAgICAgICAKKwogICAgICAgICBhc3NlcnRFcXVhbHMoNDAxLCByZXNwb25zZS5nZXRTdGF0dXNDb2RlKCkpOwotICAgICAgICAKKwogICAgICAgICBhc3NlcnRUcnVlKAotICAgICAgICAgICAgIlJlc3BvbnNlIGRpZCBub3QgY29udGFpbiB0aGUgXCJXV1ctQXV0aGVudGljYXRlXCIgaGVhZGVyLCBidXQgc2hvdWxkIGhhdmUiLCAKKyAgICAgICAgICAgICJSZXNwb25zZSBkaWQgbm90IGNvbnRhaW4gdGhlIFwiV1dXLUF1dGhlbnRpY2F0ZVwiIGhlYWRlciwgYnV0IHNob3VsZCBoYXZlIiwKICAgICAgICAgICAgIHJlc3BvbnNlLmdldFJlc3BvbnNlSGVhZGVyVmFsdWUoIldXVy1BdXRoZW50aWNhdGUiKSAhPSBudWxsKTsKLSAgICAgICAgCisKICAgICAgICAgYXNzZXJ0RGVmYXVsdE5vdEF1dGhlbnRpY2F0ZWQoCiAgICAgICAgICAgICByZXNwb25zZS5nZXRDb250ZW50QXNTdHJpbmcoKSk7CiAgICAgfQotICAgIAorCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0Tm90QXV0aGVudGljYXRlZFdyb25nTmFtZSgpIHsKLSAgICAJCi0gICAgCURlZmF1bHRDcmVkZW50aWFsc1Byb3ZpZGVyIGNyZWRlbnRpYWxzUHJvdmlkZXIgPSBuZXcgRGVmYXVsdENyZWRlbnRpYWxzUHJvdmlkZXIoKTsKLSAgICAJY3JlZGVudGlhbHNQcm92aWRlci5hZGRDcmVkZW50aWFscygicm9tbyIsICJzZWNyZXQxIik7Ci0gICAgCQotICAgIAlnZXRXZWJDbGllbnQoKS5zZXRDcmVkZW50aWFsc1Byb3ZpZGVyKGNyZWRlbnRpYWxzUHJvdmlkZXIpOwotICAgIAkKLSAgICAJV2ViUmVzcG9uc2UgcmVzcG9uc2UgPSByZXNwb25zZUZyb21TZXJ2ZXIoIi9zZXJ2bGV0Iik7Ci0gICAgICAgICAgCi0gICAgCWFzc2VydEVxdWFscyg0MDEsIHJlc3BvbnNlLmdldFN0YXR1c0NvZGUoKSk7Ci0gICAgICAgICAgCi0gICAgCWFzc2VydFRydWUoCi0JICAgICAgICAiUmVzcG9uc2UgZGlkIG5vdCBjb250YWluIHRoZSBcIldXVy1BdXRoZW50aWNhdGVcIiBoZWFkZXIsIGJ1dCBzaG91bGQgaGF2ZSIsIAotCSAgICAgICAgcmVzcG9uc2UuZ2V0UmVzcG9uc2VIZWFkZXJWYWx1ZSgiV1dXLUF1dGhlbnRpY2F0ZSIpICE9IG51bGwpOwotICAgICAgICAgIAotICAgIAlhc3NlcnREZWZhdWx0Tm90QXV0aGVudGljYXRlZCgKLQkgICAgICAgIHJlc3BvbnNlLmdldENvbnRlbnRBc1N0cmluZygpKTsKKworICAgICAgICBEZWZhdWx0Q3JlZGVudGlhbHNQcm92aWRlciBjcmVkZW50aWFsc1Byb3ZpZGVyID0gbmV3IERlZmF1bHRDcmVkZW50aWFsc1Byb3ZpZGVyKCk7CisgICAgICAgIGNyZWRlbnRpYWxzUHJvdmlkZXIuYWRkQ3JlZGVudGlhbHMoInJvbW8iLCAic2VjcmV0MSIpOworCisgICAgICAgIGdldFdlYkNsaWVudCgpLnNldENyZWRlbnRpYWxzUHJvdmlkZXIoY3JlZGVudGlhbHNQcm92aWRlcik7CisKKyAgICAgICAgV2ViUmVzcG9uc2UgcmVzcG9uc2UgPSByZXNwb25zZUZyb21TZXJ2ZXIoIi9zZXJ2bGV0Iik7CisKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDQwMSwgcmVzcG9uc2UuZ2V0U3RhdHVzQ29kZSgpKTsKKworICAgICAgICBhc3NlcnRUcnVlKAorICAgICAgICAgICAgIlJlc3BvbnNlIGRpZCBub3QgY29udGFpbiB0aGUgXCJXV1ctQXV0aGVudGljYXRlXCIgaGVhZGVyLCBidXQgc2hvdWxkIGhhdmUiLAorICAgICAgICAgICAgcmVzcG9uc2UuZ2V0UmVzcG9uc2VIZWFkZXJWYWx1ZSgiV1dXLUF1dGhlbnRpY2F0ZSIpICE9IG51bGwpOworCisgICAgICAgIGFzc2VydERlZmF1bHROb3RBdXRoZW50aWNhdGVkKAorICAgICAgICAgICAgcmVzcG9uc2UuZ2V0Q29udGVudEFzU3RyaW5nKCkpOwogICAgIH0KLSAgICAKKwogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdE5vdEF1dGhlbnRpY2F0ZWRXcm9uZ1Bhc3N3b3JkKCkgewotICAgIAkKLSAgICAgIAlEZWZhdWx0Q3JlZGVudGlhbHNQcm92aWRlciBjcmVkZW50aWFsc1Byb3ZpZGVyID0gbmV3IERlZmF1bHRDcmVkZW50aWFsc1Byb3ZpZGVyKCk7Ci0gICAgCWNyZWRlbnRpYWxzUHJvdmlkZXIuYWRkQ3JlZGVudGlhbHMoInJlemEiLCAid3JvbmdwYXNzd29yZCIpOwotICAgIAkKLSAgICAJZ2V0V2ViQ2xpZW50KCkuc2V0Q3JlZGVudGlhbHNQcm92aWRlcihjcmVkZW50aWFsc1Byb3ZpZGVyKTsKLSAgICAJCisKKyAgICAgICAgICBEZWZhdWx0Q3JlZGVudGlhbHNQcm92aWRlciBjcmVkZW50aWFsc1Byb3ZpZGVyID0gbmV3IERlZmF1bHRDcmVkZW50aWFsc1Byb3ZpZGVyKCk7CisgICAgICAgIGNyZWRlbnRpYWxzUHJvdmlkZXIuYWRkQ3JlZGVudGlhbHMoInJlemEiLCAid3JvbmdwYXNzd29yZCIpOworCisgICAgICAgIGdldFdlYkNsaWVudCgpLnNldENyZWRlbnRpYWxzUHJvdmlkZXIoY3JlZGVudGlhbHNQcm92aWRlcik7CisKICAgICAgICAgV2ViUmVzcG9uc2UgcmVzcG9uc2UgPSByZXNwb25zZUZyb21TZXJ2ZXIoIi9zZXJ2bGV0Iik7Ci0gICAgICAgIAorCiAgICAgICAgIGFzc2VydEVxdWFscyg0MDEsIHJlc3BvbnNlLmdldFN0YXR1c0NvZGUoKSk7Ci0gICAgICAgICAgCisKICAgICAgICAgYXNzZXJ0VHJ1ZSgKLSAgICAgICAgICAgICJSZXNwb25zZSBkaWQgbm90IGNvbnRhaW4gdGhlIFwiV1dXLUF1dGhlbnRpY2F0ZVwiIGhlYWRlciwgYnV0IHNob3VsZCBoYXZlIiwgCisgICAgICAgICAgICAiUmVzcG9uc2UgZGlkIG5vdCBjb250YWluIHRoZSBcIldXVy1BdXRoZW50aWNhdGVcIiBoZWFkZXIsIGJ1dCBzaG91bGQgaGF2ZSIsCiAgICAgICAgICAgICByZXNwb25zZS5nZXRSZXNwb25zZUhlYWRlclZhbHVlKCJXV1ctQXV0aGVudGljYXRlIikgIT0gbnVsbCk7Ci0gICAgICAgICAgCisKICAgICAgICAgYXNzZXJ0RGVmYXVsdE5vdEF1dGhlbnRpY2F0ZWQoCiAgICAgICAgICAgICByZXNwb25zZS5nZXRDb250ZW50QXNTdHJpbmcoKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbWVtLWZvcm0vcG9tLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW1lbS1mb3JtL3BvbS54bWwKaW5kZXggZWVkYWUzNC4uMzJmMGMzYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbWVtLWZvcm0vcG9tLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1tZW0tZm9ybS9wb20ueG1sCkBAIC0xNywyNSArMTcsMjUgQEAKIC0tPgogCiA8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgotCTxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmdsYXNzZmlzaC5zb3RlcmlhLnRlc3Q8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+c290ZXJpYTwvYXJ0aWZhY3RJZD4KICAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKLQk8YXJ0aWZhY3RJZD5hcHAtbWVtLWZvcm08L2FydGlmYWN0SWQ+Ci0JPHBhY2thZ2luZz53YXI8L3BhY2thZ2luZz4KLQkKLQk8YnVpbGQ+CisgICAgPGFydGlmYWN0SWQ+YXBwLW1lbS1mb3JtPC9hcnRpZmFjdElkPgorICAgIDxwYWNrYWdpbmc+d2FyPC9wYWNrYWdpbmc+CisKKyAgICA8YnVpbGQ+CiAgICAgICAgIDxmaW5hbE5hbWU+YXBwLW1lbS1mb3JtPC9maW5hbE5hbWU+Ci0JPC9idWlsZD4KKyAgICA8L2J1aWxkPgogCiAgICAgPHByb3BlcnRpZXM+CiAgICAgICAgIDxmYWlsT25NaXNzaW5nV2ViWG1sPmZhbHNlPC9mYWlsT25NaXNzaW5nV2ViWG1sPgogICAgIDwvcHJvcGVydGllcz4KLSAgICAKKwogICAgIDxkZXBlbmRlbmNpZXM+CiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmdsYXNzZmlzaC5zb3RlcmlhLnRlc3Q8L2dyb3VwSWQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1tZW0tZm9ybS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0xvZ2luRXJyb3JTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1tZW0tZm9ybS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0xvZ2luRXJyb3JTZXJ2bGV0LmphdmEKaW5kZXggODY5Mzk1Ny4uZjdkYTJkZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbWVtLWZvcm0vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9Mb2dpbkVycm9yU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW1lbS1mb3JtL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvTG9naW5FcnJvclNlcnZsZXQuamF2YQpAQCAtMjYsNyArMjYsNyBAQAogCiAvKioKICAqIFNlcnZsZXQgdGhhdCBpcyBpbnZva2VkIHdoZW4gdGhlIGNhbGxlciBkaWQgbm90IGF1dGhlbnRpY2F0ZSBjb3JyZWN0bHkKLSAqIAorICoKICAqCiAgKi8KIEBXZWJTZXJ2bGV0KHsiL2xvZ2luLWVycm9yLXNlcnZsZXQifSkKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW1lbS1mb3JtL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvTG9naW5TZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1tZW0tZm9ybS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0xvZ2luU2VydmxldC5qYXZhCmluZGV4IDZjNmNjZTYuLmM3MDNkOTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW1lbS1mb3JtL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvTG9naW5TZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbWVtLWZvcm0vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9Mb2dpblNlcnZsZXQuamF2YQpAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICAgICAgICAgICI8Zm9ybSBtZXRob2Q9XCJQT1NUXCIgYWN0aW9uPVwial9zZWN1cml0eV9jaGVja1wiPiIgKwogICAgICAgICAgICAgICAgICAgICAiPHA+PHN0cm9uZz5Vc2VybmFtZSA8L3N0cm9uZz4iICsKICAgICAgICAgICAgICAgICAgICAgIjxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJqX3VzZXJuYW1lXCI+IiArCi0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgICI8cD48c3Ryb25nPlBhc3N3b3JkIDwvc3Ryb25nPiIgKwogICAgICAgICAgICAgICAgICAgICAiPGlucHV0IHR5cGU9XCJwYXNzd29yZFwiIG5hbWU9XCJqX3Bhc3N3b3JkXCI+IiArCiAgICAgICAgICAgICAgICAgICAgICI8cD4iICsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW1lbS1mb3JtL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbWVtLWZvcm0vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9TZXJ2bGV0LmphdmEKaW5kZXggNWM5MDBiOC4uODhlYTRmMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbWVtLWZvcm0vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9TZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbWVtLWZvcm0vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9TZXJ2bGV0LmphdmEKQEAgLTUzLDMxICs1MywzMSBAQAogICAgICAgICBpZiAocmVxdWVzdC5nZXRVc2VyUHJpbmNpcGFsKCkgIT0gbnVsbCkgewogICAgICAgICAgICAgd2ViTmFtZSA9IHJlcXVlc3QuZ2V0VXNlclByaW5jaXBhbCgpLmdldE5hbWUoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXNwb25zZS5nZXRXcml0ZXIoKS53cml0ZSgKICAgICAgICAgICAgICAgICAiPGh0bWw+PGJvZHk+IFRoaXMgaXMgYSBzZXJ2bGV0IDxicj48YnI+XG4iICsKLSAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgIndlYiB1c2VybmFtZTogIiArIHdlYk5hbWUgKyAiPGJyPjxicj5cbiIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgICJ3ZWIgdXNlciBoYXMgcm9sZSBcImZvb1wiOiAiICsgcmVxdWVzdC5pc1VzZXJJblJvbGUoImZvbyIpICsgIjxicj5cbiIgKwogICAgICAgICAgICAgICAgICAgICAid2ViIHVzZXIgaGFzIHJvbGUgXCJiYXJcIjogIiArIHJlcXVlc3QuaXNVc2VySW5Sb2xlKCJiYXIiKSArICI8YnI+XG4iICsKLSAgICAgICAgICAgICAgICAgICAgIndlYiB1c2VyIGhhcyByb2xlIFwia2F6XCI6ICIgKyByZXF1ZXN0LmlzVXNlckluUm9sZSgia2F6IikgKyAiPGJyPjxicj5cbiIgKyAKKyAgICAgICAgICAgICAgICAgICAgIndlYiB1c2VyIGhhcyByb2xlIFwia2F6XCI6ICIgKyByZXF1ZXN0LmlzVXNlckluUm9sZSgia2F6IikgKyAiPGJyPjxicj5cbiIgKwogCi0gICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAiPGZvcm0gbWV0aG9kPVwiUE9TVFwiPiIgKwogICAgICAgICAgICAgICAgICAgICAgICAgIjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cImxvZ291dFwiIHZhbHVlPVwidHJ1ZVwiICA+IiArCiAgICAgICAgICAgICAgICAgICAgICAgICAiPGlucHV0IHR5cGU9XCJzdWJtaXRcIiB2YWx1ZT1cIkxvZ291dFwiPiIgKwogICAgICAgICAgICAgICAgICAgICAiPC9mb3JtPiIgKwogICAgICAgICAgICAgICAgICI8L2JvZHk+PC9odG1sPiIpOwogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgaWYgKCJ0cnVlIi5lcXVhbHMocmVxdWVzdC5nZXRQYXJhbWV0ZXIoImxvZ291dCIpKSkgewogICAgICAgICAgICAgcmVxdWVzdC5sb2dvdXQoKTsKICAgICAgICAgICAgIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLmludmFsaWRhdGUoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBkb0dldChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1tZW0tZm9ybS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0FwcE1lbUZvcm1JVC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbWVtLWZvcm0vc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9BcHBNZW1Gb3JtSVQuamF2YQppbmRleCAzNjQxNjcxLi4xYWMzYTgwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1tZW0tZm9ybS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0FwcE1lbUZvcm1JVC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW1lbS1mb3JtL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQXBwTWVtRm9ybUlULmphdmEKQEAgLTM1LDcgKzM1LDcgQEAKIAogQFJ1bldpdGgoQXJxdWlsbGlhbi5jbGFzcykKIHB1YmxpYyBjbGFzcyBBcHBNZW1Gb3JtSVQgZXh0ZW5kcyBBcnF1aWxsaWFuQmFzZSB7Ci0gICAgCisKICAgICBARGVwbG95bWVudCh0ZXN0YWJsZSA9IGZhbHNlKQogICAgIHB1YmxpYyBzdGF0aWMgQXJjaGl2ZTw/PiBjcmVhdGVEZXBsb3ltZW50KCkgewogICAgICAgICByZXR1cm4gbWF2ZW5XYXIoKTsKQEAgLTQzLDIxMiArNDMsMjEyIEBACiAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RBdXRoZW50aWNhdGVkKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgCi0gICAgICAgIAorCisKICAgICAgICAgLy8gMS4gSW5pdGlhbGx5IHJlcXVlc3QgcHJvdGVjdGVkIHBhZ2Ugd2hlbiB3ZSdyZSBub3QgYXV0aGVudGljYXRlZAotICAgICAgICAKKwogICAgICAgICBIdG1sUGFnZSBsb2dpblBhZ2UgPSBwYWdlRnJvbVNlcnZlcigiL3NlcnZsZXQiKTsKLSAgICAgICAgCi0gICAgICAgIAorCisKICAgICAgICAgLy8gMi4gU2VydmVyIHNob3VsZCBmb3J3YXJkIHRvIGxvZ2luIHBhZ2UKLSAgICAgICAgCisKICAgICAgICAgYXNzZXJ0VHJ1ZSgKICAgICAgICAgICAgICJUaGUgbG9naW4gcGFnZSBzaG91bGQgaGF2ZSBiZWVuIGRpc3BsYXllZCwgYnV0IHdhcyBub3QiLAogICAgICAgICAgICAgbG9naW5QYWdlLmdldFdlYlJlc3BvbnNlKCkuZ2V0Q29udGVudEFzU3RyaW5nKCkuY29udGFpbnMoIkxvZ2luIHRvIGNvbnRpbnVlIikKICAgICAgICAgKTsKLSAgICAgICAgCi0gICAgICAgIAorCisKICAgICAgICAgLy8gMy4gU3VibWl0IHRoZSBmb3JtIG9uIHRoZSBsb2dpbiBwYWdlIHdpdGggdGhlIGNvcnJlY3QgY3JlZGVudGlhbHMKLSAgICAgICAgCisKICAgICAgICAgSHRtbEZvcm0gZm9ybSA9IGxvZ2luUGFnZS5nZXRGb3JtcygpLmdldCgwKTsKLSAgICAgICAgCisKICAgICAgICAgZm9ybS5nZXRJbnB1dEJ5TmFtZSgial91c2VybmFtZSIpCiAgICAgICAgICAgICAuc2V0VmFsdWVBdHRyaWJ1dGUoInJlemEiKTsKLSAgICAgICAgCisKICAgICAgICAgZm9ybS5nZXRJbnB1dEJ5TmFtZSgial9wYXNzd29yZCIpCiAgICAgICAgICAgICAuc2V0VmFsdWVBdHRyaWJ1dGUoInNlY3JldDEiKTsKLSAgICAgICAgCisKICAgICAgICAgSHRtbFBhZ2UgcGFnZSA9IGZvcm0uZ2V0SW5wdXRCeVZhbHVlKCJTdWJtaXQiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jbGljaygpOwotICAgICAgICAKKwogICAgICAgICAvLyBIYXMgdG8gYmUgYXV0aGVudGljdGVkIG5vdwogICAgICAgICBhc3NlcnREZWZhdWx0QXV0aGVudGljYXRlZCgKICAgICAgICAgICAgIHBhZ2UuZ2V0V2ViUmVzcG9uc2UoKQogICAgICAgICAgICAgICAgIC5nZXRDb250ZW50QXNTdHJpbmcoKSk7Ci0gICAgICAgIAotICAgICAgICAKKworCiAgICAgICAgIC8vIDQuIFJlcXVlc3QgcGFnZSBhZ2Fpbi4gRk9STSBpcyBzdGF0ZWZ1bCAoaHR0cCBzZXNzaW9uIGJvdW5kKSBzbwogICAgICAgICAvLyBzdGlsbCBoYXMgdG8gYmUgYXV0aGVudGljYXRlZC4KLSAgICAgICAgCisKICAgICAgICAgcGFnZSA9IHBhZ2VGcm9tU2VydmVyKCIvc2VydmxldCIpOwotICAgICAgICAKKwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIisrKysrKysrKysrU1RFUCA0ICsrKysrKysrKysrKysgKGJlZm9yZSBhc3NlcnREZWZhdWx0QXV0aGVudGljYXRlZCkgXG5cblxuXG4iICsgcGFnZS5nZXRXZWJSZXNwb25zZSgpCiAgICAgICAgIC5nZXRDb250ZW50QXNTdHJpbmcoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIGFzc2VydERlZmF1bHRBdXRoZW50aWNhdGVkKAogICAgICAgICAgICAgcGFnZS5nZXRXZWJSZXNwb25zZSgpCiAgICAgICAgICAgICAgICAgLmdldENvbnRlbnRBc1N0cmluZygpKTsKLSAgICAgICAgCi0gICAgICAgIAorCisKICAgICAgICAgLy8gNS4gTG9nb3V0Ci0gICAgICAgIAorCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqIFNURVAgNSAqKioqKiAoYmVmb3JlIGdldCBsb2dvdXQpICIgKyBwYWdlLmFzWG1sKCkpOwotICAgICAgICAKKwogICAgICAgICBwYWdlID0gcGFnZS5nZXRGb3JtcygpCiAgICAgICAgICAgICAgICAgICAgLmdldCgwKQogICAgICAgICAgICAgICAgICAgIC5nZXRJbnB1dEJ5VmFsdWUoIkxvZ291dCIpCiAgICAgICAgICAgICAgICAgICAgLmNsaWNrKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBIYXMgdG8gYmUgbG9nZ2VkIG91dCBub3cgKHBhZ2Ugd2lsbCBzdGlsbCBiZSByZW5kZXJlZCwgYnV0IHdpdGggCisKKyAgICAgICAgLy8gSGFzIHRvIGJlIGxvZ2dlZCBvdXQgbm93IChwYWdlIHdpbGwgc3RpbGwgYmUgcmVuZGVyZWQsIGJ1dCB3aXRoCiAgICAgICAgIC8vIHdlYiB1c2VybmFtZSBudWxsIGFuZCBubyByb2xlcy4KLSAgICAgICAgCisKICAgICAgICAgYXNzZXJ0RGVmYXVsdE5vdEF1dGhlbnRpY2F0ZWQoCiAgICAgICAgICAgICBwYWdlLmdldFdlYlJlc3BvbnNlKCkKICAgICAgICAgICAgICAgICAuZ2V0Q29udGVudEFzU3RyaW5nKCkpOwotICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIAorCisKKwogICAgICAgICAvLyA2LiBSZXF1ZXN0IHBhZ2UgYWdhaW4uIFNob3VsZCBzdGlsbCBiZSBsb2dnZWQgb3V0CiAgICAgICAgIC8vIChhbmQgd2lsbCBkaXNwbGF5IGxvZ2luIHRvIGNvbnRpbnVlIGFnYWluIG5vdykKLSAgICAgICAgCisKICAgICAgICAgYXNzZXJ0RGVmYXVsdE5vdEF1dGhlbnRpY2F0ZWQoCiAgICAgICAgICAgICByZWFkRnJvbVNlcnZlcigiL3NlcnZsZXQiKSk7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAorCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0Tm90QXV0aGVudGljYXRlZFdyb25nTmFtZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIDEuIEluaXRpYWxseSByZXF1ZXN0IHByb3RlY3RlZCBwYWdlIHdoZW4gd2UncmUgbm90IGF1dGhlbnRpY2F0ZWQKLSAgICAgICAgCisKICAgICAgICAgSHRtbFBhZ2UgbG9naW5QYWdlID0gcGFnZUZyb21TZXJ2ZXIoIi9zZXJ2bGV0Iik7Ci0gICAgICAgIAotICAgICAgICAKKworCiAgICAgICAgIC8vIDIuIFNlcnZlciBzaG91bGQgZm9yd2FyZCB0byBsb2dpbiBwYWdlCi0gICAgICAgIAorCiAgICAgICAgIGFzc2VydFRydWUoCiAgICAgICAgICAgICAiVGhlIGxvZ2luIHBhZ2Ugc2hvdWxkIGhhdmUgYmVlbiBkaXNwbGF5ZWQsIGJ1dCB3YXMgbm90IiwKICAgICAgICAgICAgIGxvZ2luUGFnZS5nZXRXZWJSZXNwb25zZSgpLmdldENvbnRlbnRBc1N0cmluZygpLmNvbnRhaW5zKCJMb2dpbiB0byBjb250aW51ZSIpCiAgICAgICAgICk7Ci0gICAgICAgIAotICAgICAgICAKKworCiAgICAgICAgIC8vIDMuIFN1Ym1pdCB0aGUgZm9ybSBvbiB0aGUgbG9naW4gcGFnZSB3aXRoIHRoZSBjb3JyZWN0IGNyZWRlbnRpYWxzCi0gICAgICAgIAorCiAgICAgICAgIEh0bWxGb3JtIGZvcm0gPSBsb2dpblBhZ2UuZ2V0Rm9ybXMoKS5nZXQoMCk7Ci0gICAgICAgIAorCiAgICAgICAgIGZvcm0uZ2V0SW5wdXRCeU5hbWUoImpfdXNlcm5hbWUiKQogICAgICAgICAgICAgLnNldFZhbHVlQXR0cmlidXRlKCJyb21vIik7Ci0gICAgICAgIAorCiAgICAgICAgIGZvcm0uZ2V0SW5wdXRCeU5hbWUoImpfcGFzc3dvcmQiKQogICAgICAgICAgICAgLnNldFZhbHVlQXR0cmlidXRlKCJzZWNyZXQxIik7Ci0gICAgICAgIAorCiAgICAgICAgIEh0bWxQYWdlIHBhZ2UgPSBmb3JtLmdldElucHV0QnlWYWx1ZSgiU3VibWl0IikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY2xpY2soKTsKLSAgICAgICAgCisKICAgICAgICAgYXNzZXJ0VHJ1ZSgKICAgICAgICAgICAgICJUaGUgZXJyb3IgcGFnZSBzaG91bGQgaGF2ZSBiZWVuIGRpc3BsYXllZCwgYnV0IHdhcyBub3QiLAogICAgICAgICAgICAgcGFnZS5nZXRXZWJSZXNwb25zZSgpLmdldENvbnRlbnRBc1N0cmluZygpLmNvbnRhaW5zKCJMb2dpbiBmYWlsZWQhIikKICAgICAgICAgKTsKLSAgICAgICAgCisKICAgICAgICAgLy8gU2hvdWxkIG5vdCBiZSBhdXRoZW50aWN0ZWQgbm93CiAgICAgICAgIGFzc2VydERlZmF1bHROb3RBdXRoZW50aWNhdGVkKAogICAgICAgICAgICAgcGFnZS5nZXRXZWJSZXNwb25zZSgpCiAgICAgICAgICAgICAgICAgLmdldENvbnRlbnRBc1N0cmluZygpKTsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3ROb3RBdXRoZW50aWNhdGVkV3JvbmdQYXNzd29yZCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIDEuIEluaXRpYWxseSByZXF1ZXN0IHByb3RlY3RlZCBwYWdlIHdoZW4gd2UncmUgbm90IGF1dGhlbnRpY2F0ZWQKLSAgICAgICAgCisKICAgICAgICAgSHRtbFBhZ2UgbG9naW5QYWdlID0gcGFnZUZyb21TZXJ2ZXIoIi9zZXJ2bGV0Iik7Ci0gICAgICAgIAotICAgICAgICAKKworCiAgICAgICAgIC8vIDIuIFNlcnZlciBzaG91bGQgZm9yd2FyZCB0byBsb2dpbiBwYWdlCi0gICAgICAgIAorCiAgICAgICAgIGFzc2VydFRydWUoCiAgICAgICAgICAgICAiVGhlIGxvZ2luIHBhZ2Ugc2hvdWxkIGhhdmUgYmVlbiBkaXNwbGF5ZWQsIGJ1dCB3YXMgbm90IiwKICAgICAgICAgICAgIGxvZ2luUGFnZS5nZXRXZWJSZXNwb25zZSgpLmdldENvbnRlbnRBc1N0cmluZygpLmNvbnRhaW5zKCJMb2dpbiB0byBjb250aW51ZSIpCiAgICAgICAgICk7Ci0gICAgICAgIAotICAgICAgICAKKworCiAgICAgICAgIC8vIDMuIFN1Ym1pdCB0aGUgZm9ybSBvbiB0aGUgbG9naW4gcGFnZSB3aXRoIHRoZSAqd3JvbmcqIGNyZWRlbnRpYWxzCi0gICAgICAgIAorCiAgICAgICAgIEh0bWxGb3JtIGZvcm0gPSBsb2dpblBhZ2UuZ2V0Rm9ybXMoKS5nZXQoMCk7Ci0gICAgICAgIAorCiAgICAgICAgIGZvcm0uZ2V0SW5wdXRCeU5hbWUoImpfdXNlcm5hbWUiKQogICAgICAgICAgICAgLnNldFZhbHVlQXR0cmlidXRlKCJyZXphIik7Ci0gICAgICAgIAorCiAgICAgICAgIGZvcm0uZ2V0SW5wdXRCeU5hbWUoImpfcGFzc3dvcmQiKQogICAgICAgICAgICAgLnNldFZhbHVlQXR0cmlidXRlKCJ3cm9uZ3Bhc3N3b3JkIik7Ci0gICAgICAgIAorCiAgICAgICAgIEh0bWxQYWdlIHBhZ2UgPSBmb3JtLmdldElucHV0QnlWYWx1ZSgiU3VibWl0IikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY2xpY2soKTsKLSAgICAgICAgCisKICAgICAgICAgYXNzZXJ0VHJ1ZSgKICAgICAgICAgICAgICJUaGUgZXJyb3IgcGFnZSBzaG91bGQgaGF2ZSBiZWVuIGRpc3BsYXllZCwgYnV0IHdhcyBub3QiLAogICAgICAgICAgICAgcGFnZS5nZXRXZWJSZXNwb25zZSgpLmdldENvbnRlbnRBc1N0cmluZygpLmNvbnRhaW5zKCJMb2dpbiBmYWlsZWQhIikKICAgICAgICAgKTsKLSAgICAgICAgCisKICAgICAgICAgLy8gU2hvdWxkIG5vdCBiZSBhdXRoZW50aWN0ZWQgbm93CiAgICAgICAgIGFzc2VydERlZmF1bHROb3RBdXRoZW50aWNhdGVkKAogICAgICAgICAgICAgcGFnZS5nZXRXZWJSZXNwb25zZSgpCiAgICAgICAgICAgICAgICAgLmdldENvbnRlbnRBc1N0cmluZygpKTsKLSAgICAgICAKKwogICAgIH0KLSAgICAKKwogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdE5vdEF1dGhlbnRpY2F0ZWRJbml0aWFsbHlXcm9uZ05hbWVUaGVuQ29ycmVjdCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIDEuIEluaXRpYWxseSByZXF1ZXN0IHByb3RlY3RlZCBwYWdlIHdoZW4gd2UncmUgbm90IGF1dGhlbnRpY2F0ZWQKLSAgICAgICAgCisKICAgICAgICAgSHRtbFBhZ2UgbG9naW5QYWdlID0gcGFnZUZyb21TZXJ2ZXIoIi9zZXJ2bGV0Iik7Ci0gICAgICAgIAotICAgICAgICAKKworCiAgICAgICAgIC8vIDIuIFNlcnZlciBzaG91bGQgZm9yd2FyZCB0byBsb2dpbiBwYWdlCi0gICAgICAgIAorCiAgICAgICAgIGFzc2VydFRydWUoCiAgICAgICAgICAgICAiVGhlIGxvZ2luIHBhZ2Ugc2hvdWxkIGhhdmUgYmVlbiBkaXNwbGF5ZWQsIGJ1dCB3YXMgbm90IiwKICAgICAgICAgICAgIGxvZ2luUGFnZS5nZXRXZWJSZXNwb25zZSgpLmdldENvbnRlbnRBc1N0cmluZygpLmNvbnRhaW5zKCJMb2dpbiB0byBjb250aW51ZSIpCiAgICAgICAgICk7Ci0gICAgICAgIAotICAgICAgICAKKworCiAgICAgICAgIC8vIDMuIFN1Ym1pdCB0aGUgZm9ybSBvbiB0aGUgbG9naW4gcGFnZSB3aXRoIHRoZSBjb3JyZWN0IGNyZWRlbnRpYWxzCi0gICAgICAgIAorCiAgICAgICAgIEh0bWxGb3JtIGZvcm0gPSBsb2dpblBhZ2UuZ2V0Rm9ybXMoKS5nZXQoMCk7Ci0gICAgICAgIAorCiAgICAgICAgIGZvcm0uZ2V0SW5wdXRCeU5hbWUoImpfdXNlcm5hbWUiKQogICAgICAgICAgICAgLnNldFZhbHVlQXR0cmlidXRlKCJyb21vIik7Ci0gICAgICAgIAorCiAgICAgICAgIGZvcm0uZ2V0SW5wdXRCeU5hbWUoImpfcGFzc3dvcmQiKQogICAgICAgICAgICAgLnNldFZhbHVlQXR0cmlidXRlKCJzZWNyZXQxIik7Ci0gICAgICAgIAorCiAgICAgICAgIEh0bWxQYWdlIGVycm9yUGFnZSA9IGZvcm0uZ2V0SW5wdXRCeVZhbHVlKCJTdWJtaXQiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jbGljaygpOwotICAgICAgICAKKwogICAgICAgICAvLyBTaG91bGQgbm90IGJlIGF1dGhlbnRpY3RlZCBub3cKICAgICAgICAgYXNzZXJ0RGVmYXVsdE5vdEF1dGhlbnRpY2F0ZWQoCiAgICAgICAgICAgICBlcnJvclBhZ2UuZ2V0V2ViUmVzcG9uc2UoKQogICAgICAgICAgICAgICAgICAgICAgLmdldENvbnRlbnRBc1N0cmluZygpKTsKLSAgICAgICAgCi0gICAgICAgIAorCisKICAgICAgICAgLy8gNC4gUmVxdWVzdCBsb2dpbiBwYWdlIGRpcmVjdGx5LCBhbmQgbm93IHN1Ym1pdCB3aXRoIHRoZSBjb3JyZWN0IGNyZWRlbnRpYWxzCiAgICAgICAgIC8vIChub3RlIHRoYXQgdGhlIGluaXRpYWwgdGFyZ2V0IFVSTCBvZiAvc2VydmxldCBzaG91bGQgc3RpbGwgYmUgcmVtZW1iZXJlZCkKLSAgICAgICAgCisKICAgICAgICAgbG9naW5QYWdlID0gcGFnZUZyb21TZXJ2ZXIoIi9sb2dpbi1zZXJ2bGV0Iik7Ci0gICAgICAgIAorCiAgICAgICAgIGZvcm0gPSBsb2dpblBhZ2UuZ2V0Rm9ybXMoKS5nZXQoMCk7Ci0gICAgICAgIAorCiAgICAgICAgIGZvcm0uZ2V0SW5wdXRCeU5hbWUoImpfdXNlcm5hbWUiKQogICAgICAgICAgICAgLnNldFZhbHVlQXR0cmlidXRlKCJyZXphIik7Ci0gICAgICAgIAorCiAgICAgICAgIGZvcm0uZ2V0SW5wdXRCeU5hbWUoImpfcGFzc3dvcmQiKQogICAgICAgICAgICAgLnNldFZhbHVlQXR0cmlidXRlKCJzZWNyZXQxIik7Ci0gICAgICAgIAorCiAgICAgICAgIEh0bWxQYWdlIHBhZ2UgPSBmb3JtLmdldElucHV0QnlWYWx1ZSgiU3VibWl0IikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY2xpY2soKTsKLSAgICAgICAgCisKICAgICAgICAgLy8gSGFzIHRvIGJlIGF1dGhlbnRpY3RlZCBub3cKICAgICAgICAgYXNzZXJ0RGVmYXVsdEF1dGhlbnRpY2F0ZWQoCiAgICAgICAgICAgICBwYWdlLmdldFdlYlJlc3BvbnNlKCkKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW11bHRpcGxlLXN0b3JlLWJhY2t1cC9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbXVsdGlwbGUtc3RvcmUtYmFja3VwL3BvbS54bWwKaW5kZXggZDUyYzM3Zi4uMWVjMDQzMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbXVsdGlwbGUtc3RvcmUtYmFja3VwL3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbXVsdGlwbGUtc3RvcmUtYmFja3VwL3BvbS54bWwKQEAgLTE3LDI1ICsxNywyNSBAQAogLS0+CiAKIDxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+Ci0JPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KICAgPHBhcmVudD4KICAgICA8Z3JvdXBJZD5vcmcuZ2xhc3NmaXNoLnNvdGVyaWEudGVzdDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5zb3RlcmlhPC9hcnRpZmFjdElkPgogICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICA8L3BhcmVudD4KIAotCTxhcnRpZmFjdElkPmFwcC1tdWx0aXBsZS1zdG9yZS1iYWNrdXA8L2FydGlmYWN0SWQ+Ci0JPHBhY2thZ2luZz53YXI8L3BhY2thZ2luZz4KLQkKLQk8YnVpbGQ+CisgICAgPGFydGlmYWN0SWQ+YXBwLW11bHRpcGxlLXN0b3JlLWJhY2t1cDwvYXJ0aWZhY3RJZD4KKyAgICA8cGFja2FnaW5nPndhcjwvcGFja2FnaW5nPgorCisgICAgPGJ1aWxkPgogICAgICAgICA8ZmluYWxOYW1lPmFwcC1tdWx0aXBsZS1zdG9yZS1iYWNrdXA8L2ZpbmFsTmFtZT4KLQk8L2J1aWxkPgotICAgIAorICAgIDwvYnVpbGQ+CisKICAgICA8cHJvcGVydGllcz4KICAgICAgICAgPGZhaWxPbk1pc3NpbmdXZWJYbWw+ZmFsc2U8L2ZhaWxPbk1pc3NpbmdXZWJYbWw+CiAgICAgPC9wcm9wZXJ0aWVzPgotICAgIAorCiAgICAgPGRlcGVuZGVuY2llcz4KICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuZ2xhc3NmaXNoLnNvdGVyaWEudGVzdDwvZ3JvdXBJZD4KQEAgLTQ0LDUgKzQ0LDUgQEAKICAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KICAgICAgICAgPC9kZXBlbmRlbmN5PgogICAgIDwvZGVwZW5kZW5jaWVzPgotICAgIAorCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1tdWx0aXBsZS1zdG9yZS1iYWNrdXAvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9UZXN0QXV0aGVudGljYXRpb25NZWNoYW5pc20uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW11bHRpcGxlLXN0b3JlLWJhY2t1cC9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1Rlc3RBdXRoZW50aWNhdGlvbk1lY2hhbmlzbS5qYXZhCmluZGV4IDJkYzYxZGYuLmNlNmYzMjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW11bHRpcGxlLXN0b3JlLWJhY2t1cC9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1Rlc3RBdXRoZW50aWNhdGlvbk1lY2hhbmlzbS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW11bHRpcGxlLXN0b3JlLWJhY2t1cC9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1Rlc3RBdXRoZW50aWNhdGlvbk1lY2hhbmlzbS5qYXZhCkBAIC0zNCw3ICszNCw3IEBACiAKIEBSZXF1ZXN0U2NvcGVkCiBwdWJsaWMgY2xhc3MgVGVzdEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtIGltcGxlbWVudHMgSHR0cEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtIHsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBwcml2YXRlIElkZW50aXR5U3RvcmVIYW5kbGVyIGlkZW50aXR5U3RvcmVIYW5kbGVyOwogCkBAIC01NywxNyArNTcsMTcgQEAKIAogICAgICAgICAgICAgaWYgKHJlc3VsdC5nZXRTdGF0dXMoKSA9PSBWQUxJRCkgewogICAgICAgICAgICAgICAgIC8vIENvbW11bmljYXRlIHRoZSBkZXRhaWxzIG9mIHRoZSBhdXRoZW50aWNhdGVkIHVzZXIgdG8gdGhlCi0gICAgICAgICAgICAgICAgLy8gY29udGFpbmVyLiBJbiBtYW55IGNhc2VzIHRoZSB1bmRlcmx5aW5nIGhhbmRsZXIgd2lsbCBqdXN0IHN0b3JlIHRoZSBkZXRhaWxzIAotICAgICAgICAgICAgICAgIC8vIGFuZCB0aGUgY29udGFpbmVyIHdpbGwgYWN0dWFsbHkgaGFuZGxlIHRoZSBsb2dpbiBhZnRlciB3ZSByZXR1cm4gZnJvbSAKKyAgICAgICAgICAgICAgICAvLyBjb250YWluZXIuIEluIG1hbnkgY2FzZXMgdGhlIHVuZGVybHlpbmcgaGFuZGxlciB3aWxsIGp1c3Qgc3RvcmUgdGhlIGRldGFpbHMKKyAgICAgICAgICAgICAgICAvLyBhbmQgdGhlIGNvbnRhaW5lciB3aWxsIGFjdHVhbGx5IGhhbmRsZSB0aGUgbG9naW4gYWZ0ZXIgd2UgcmV0dXJuIGZyb20KICAgICAgICAgICAgICAgICAvLyB0aGlzIG1ldGhvZC4KICAgICAgICAgICAgICAgICByZXR1cm4gaHR0cE1lc3NhZ2VDb250ZXh0Lm5vdGlmeUNvbnRhaW5lckFib3V0TG9naW4oCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5nZXRDYWxsZXJQcmluY2lwYWwoKSwgcmVzdWx0LmdldENhbGxlckdyb3VwcygpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgcmV0dXJuIGh0dHBNZXNzYWdlQ29udGV4dC5yZXNwb25zZVVuYXV0aG9yaXplZCgpOwotICAgICAgICB9IAorICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIGh0dHBNZXNzYWdlQ29udGV4dC5kb05vdGhpbmcoKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW11bHRpcGxlLXN0b3JlLWJhY2t1cC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9nbGFzc2Zpc2gtd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW11bHRpcGxlLXN0b3JlLWJhY2t1cC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9nbGFzc2Zpc2gtd2ViLnhtbAppbmRleCA2OTM3MjQ0Li4xMWQwZWU2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1tdWx0aXBsZS1zdG9yZS1iYWNrdXAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvZ2xhc3NmaXNoLXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbXVsdGlwbGUtc3RvcmUtYmFja3VwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2dsYXNzZmlzaC13ZWIueG1sCkBAIC0yNCwxMiArMjQsMTIgQEAKICAgICAgICAgPHJvbGUtbmFtZT5mb288L3JvbGUtbmFtZT4KICAgICAgICAgPGdyb3VwLW5hbWU+Zm9vPC9ncm91cC1uYW1lPgogICAgIDwvc2VjdXJpdHktcm9sZS1tYXBwaW5nPgotICAgIAorCiAgICAgPHNlY3VyaXR5LXJvbGUtbWFwcGluZz4KICAgICAgICAgPHJvbGUtbmFtZT5iYXI8L3JvbGUtbmFtZT4KICAgICAgICAgPGdyb3VwLW5hbWU+YmFyPC9ncm91cC1uYW1lPgogICAgIDwvc2VjdXJpdHktcm9sZS1tYXBwaW5nPgotICAgIAorCiAgICAgPHNlY3VyaXR5LXJvbGUtbWFwcGluZz4KICAgICAgICAgPHJvbGUtbmFtZT5rYXo8L3JvbGUtbmFtZT4KICAgICAgICAgPGdyb3VwLW5hbWU+a2F6PC9ncm91cC1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbXVsdGlwbGUtc3RvcmUtYmFja3VwL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQXBwTXVsdGlwbGVTdG9yZUJhY2t1cElULmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1tdWx0aXBsZS1zdG9yZS1iYWNrdXAvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9BcHBNdWx0aXBsZVN0b3JlQmFja3VwSVQuamF2YQppbmRleCBkOWM0OGQ3Li40NmIwZWNmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1tdWx0aXBsZS1zdG9yZS1iYWNrdXAvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9BcHBNdWx0aXBsZVN0b3JlQmFja3VwSVQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1tdWx0aXBsZS1zdG9yZS1iYWNrdXAvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9BcHBNdWx0aXBsZVN0b3JlQmFja3VwSVQuamF2YQpAQCAtNDEsNyArNDEsNyBAQAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBwcmludFN1bW1hcnkoKXsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9Ci0gICAgCisKICAgICBARGVwbG95bWVudCh0ZXN0YWJsZSA9IGZhbHNlKQogICAgIHB1YmxpYyBzdGF0aWMgQXJjaGl2ZTw/PiBjcmVhdGVEZXBsb3ltZW50KCkgewogICAgICAgICByZXR1cm4gbWF2ZW5XYXIoKTsKQEAgLTUyLDM4ICs1MiwzOCBAQAogICAgICAgICBhc3NlcnREZWZhdWx0QXV0aGVudGljYXRlZCgKICAgICAgICAgICAgIHJlYWRGcm9tU2VydmVyKCIvc2VydmxldD9uYW1lPXJlemEmcGFzc3dvcmQ9c2VjcmV0MSIpKTsKICAgICB9Ci0gICAgCisKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RBdXRoZW50aWNhdGVkQmFja3VwUGFzc3dvcmQoKSB7CiAgICAgICAgIC8vIFRoaXMgd2lsbCBmaXJzdCB0cnkgdGhlIGluaXRpYWwgc3RvcmUgd2hpY2ggd2lsbCBmYWlsLCB0aGVuCi0gICAgICAgIC8vIHRyaWVzIHRoZSBzZWNvbmQgc3RvcmUsIHdoaWNoIHNob3VsZCBzdWNjZWVkZWQuIFRoZSB1c2VyIAorICAgICAgICAvLyB0cmllcyB0aGUgc2Vjb25kIHN0b3JlLCB3aGljaCBzaG91bGQgc3VjY2VlZGVkLiBUaGUgdXNlcgogICAgICAgICAvLyBpcyBwcmVzZW50IGluIGJvdGggc3RvcmVzIGJ1dCB3aXRoIGRpZmZlcmVudCBwYXNzd29yZHMuCiAgICAgICAgIGFzc2VydERlZmF1bHRBdXRoZW50aWNhdGVkKAogICAgICAgICAgICAgcmVhZEZyb21TZXJ2ZXIoIi9zZXJ2bGV0P25hbWU9cmV6YSZwYXNzd29yZD1zZWNyZXQyIikpOwogICAgIH0KLSAgICAKKwogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdEF1dGhlbnRpY2F0ZWRCYWNrdXBVc2VyKCkgewogICAgICAgICAvLyBUaGlzIHdpbGwgZmlyc3QgdHJ5IHRoZSBpbml0aWFsIHN0b3JlIHdoaWNoIHdpbGwgZmFpbCwgdGhlbgotICAgICAgICAvLyB0cmllcyB0aGUgc2Vjb25kIHN0b3JlLCB3aGljaCBzaG91bGQgc3VjY2VlZGVkLiBUaGUgdXNlciAKKyAgICAgICAgLy8gdHJpZXMgdGhlIHNlY29uZCBzdG9yZSwgd2hpY2ggc2hvdWxkIHN1Y2NlZWRlZC4gVGhlIHVzZXIKICAgICAgICAgLy8gaXMgb25seSBwcmVzZW50IGluIHRoZSBzZWNvbmQgc3RvcmUuCiAgICAgICAgIEFzc2VydC5hc3NlcnRBdXRoZW50aWNhdGVkKAogICAgICAgICAgICAgIndlYiIsICJhbGV4IiwKICAgICAgICAgICAgIHJlYWRGcm9tU2VydmVyKCIvc2VydmxldD9uYW1lPWFsZXgmcGFzc3dvcmQ9dmVyeXNlY3JldCIpKTsKICAgICB9Ci0gICAgCisKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3ROb3RBdXRoZW50aWNhdGVkKCkgewogICAgICAgICBhc3NlcnREZWZhdWx0Tm90QXV0aGVudGljYXRlZCgKICAgICAgICAgICAgIHJlYWRGcm9tU2VydmVyKCIvc2VydmxldCIpKTsKICAgICB9Ci0gICAgCisKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3ROb3RBdXRoZW50aWNhdGVkV3JvbmdOYW1lKCkgewogICAgICAgICBhc3NlcnREZWZhdWx0Tm90QXV0aGVudGljYXRlZCgKICAgICAgICAgICAgIHJlYWRGcm9tU2VydmVyKCIvc2VydmxldD9uYW1lPXJvbW8mcGFzc3dvcmQ9c2VjcmV0MSIpKTsKICAgICB9Ci0gICAgCisKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3ROb3RBdXRoZW50aWNhdGVkV3JvbmdQYXNzd29yZCgpIHsKICAgICAgICAgYXNzZXJ0RGVmYXVsdE5vdEF1dGhlbnRpY2F0ZWQoCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1tdWx0aXBsZS1zdG9yZS9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbXVsdGlwbGUtc3RvcmUvcG9tLnhtbAppbmRleCA5ZGQ1ZDc4Li5jZDJlYTczIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1tdWx0aXBsZS1zdG9yZS9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW11bHRpcGxlLXN0b3JlL3BvbS54bWwKQEAgLTE3LDIxICsxNywyMSBAQAogLS0+CiAKIDxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+Ci0JPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KICAgPHBhcmVudD4KICAgICA8Z3JvdXBJZD5vcmcuZ2xhc3NmaXNoLnNvdGVyaWEudGVzdDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5zb3RlcmlhPC9hcnRpZmFjdElkPgogICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICA8L3BhcmVudD4KIAotCTxhcnRpZmFjdElkPmFwcC1tdWx0aXBsZS1zdG9yZTwvYXJ0aWZhY3RJZD4KLQk8cGFja2FnaW5nPndhcjwvcGFja2FnaW5nPgotCQotCTxidWlsZD4KKyAgICA8YXJ0aWZhY3RJZD5hcHAtbXVsdGlwbGUtc3RvcmU8L2FydGlmYWN0SWQ+CisgICAgPHBhY2thZ2luZz53YXI8L3BhY2thZ2luZz4KKworICAgIDxidWlsZD4KICAgICAgICAgPGZpbmFsTmFtZT5hcHAtbXVsdGlwbGUtc3RvcmU8L2ZpbmFsTmFtZT4KLQk8L2J1aWxkPgotICAgIAorICAgIDwvYnVpbGQ+CisKICAgICA8cHJvcGVydGllcz4KICAgICAgICAgPGZhaWxPbk1pc3NpbmdXZWJYbWw+ZmFsc2U8L2ZhaWxPbk1pc3NpbmdXZWJYbWw+CiAgICAgPC9wcm9wZXJ0aWVzPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbXVsdGlwbGUtc3RvcmUvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9BdXRoZW50aWNhdGlvbklkZW50aXR5U3RvcmUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW11bHRpcGxlLXN0b3JlL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQXV0aGVudGljYXRpb25JZGVudGl0eVN0b3JlLmphdmEKaW5kZXggNGY3MTIyNi4uYTQzNGFlOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbXVsdGlwbGUtc3RvcmUvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9BdXRoZW50aWNhdGlvbklkZW50aXR5U3RvcmUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1tdWx0aXBsZS1zdG9yZS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0F1dGhlbnRpY2F0aW9uSWRlbnRpdHlTdG9yZS5qYXZhCkBAIC02OCwxMCArNjgsMTAgQEAKIAogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBTZXQ8VmFsaWRhdGlvblR5cGU+IHZhbGlkYXRpb25UeXBlcygpIHsKICAgICAgICAgcmV0dXJuIG5ldyBIYXNoU2V0PD4oYXNMaXN0KFZBTElEQVRFKSk7CiAgICAgfQotICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW11bHRpcGxlLXN0b3JlL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvVGVzdEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1tdWx0aXBsZS1zdG9yZS9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1Rlc3RBdXRoZW50aWNhdGlvbk1lY2hhbmlzbS5qYXZhCmluZGV4IGJkMzA1YTIuLjRjZDA3MzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW11bHRpcGxlLXN0b3JlL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvVGVzdEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbXVsdGlwbGUtc3RvcmUvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9UZXN0QXV0aGVudGljYXRpb25NZWNoYW5pc20uamF2YQpAQCAtMzQsNyArMzQsNyBAQAogCiBAUmVxdWVzdFNjb3BlZAogcHVibGljIGNsYXNzIFRlc3RBdXRoZW50aWNhdGlvbk1lY2hhbmlzbSBpbXBsZW1lbnRzIEh0dHBBdXRoZW50aWNhdGlvbk1lY2hhbmlzbSB7Ci0gICAgCisKICAgICBASW5qZWN0CiAgICAgcHJpdmF0ZSBJZGVudGl0eVN0b3JlSGFuZGxlciBpZGVudGl0eVN0b3JlSGFuZGxlcjsKIApAQCAtNTcsMTggKzU3LDE4IEBACiAKICAgICAgICAgICAgIGlmIChyZXN1bHQuZ2V0U3RhdHVzKCkgPT0gVkFMSUQpIHsKICAgICAgICAgICAgICAgICAvLyBDb21tdW5pY2F0ZSB0aGUgZGV0YWlscyBvZiB0aGUgYXV0aGVudGljYXRlZCB1c2VyIHRvIHRoZQotICAgICAgICAgICAgICAgIC8vIGNvbnRhaW5lci4gSW4gbWFueSBjYXNlcyB0aGUgdW5kZXJseWluZyBoYW5kbGVyIHdpbGwganVzdCBzdG9yZSB0aGUgZGV0YWlscyAKLSAgICAgICAgICAgICAgICAvLyBhbmQgdGhlIGNvbnRhaW5lciB3aWxsIGFjdHVhbGx5IGhhbmRsZSB0aGUgbG9naW4gYWZ0ZXIgd2UgcmV0dXJuIGZyb20gCisgICAgICAgICAgICAgICAgLy8gY29udGFpbmVyLiBJbiBtYW55IGNhc2VzIHRoZSB1bmRlcmx5aW5nIGhhbmRsZXIgd2lsbCBqdXN0IHN0b3JlIHRoZSBkZXRhaWxzCisgICAgICAgICAgICAgICAgLy8gYW5kIHRoZSBjb250YWluZXIgd2lsbCBhY3R1YWxseSBoYW5kbGUgdGhlIGxvZ2luIGFmdGVyIHdlIHJldHVybiBmcm9tCiAgICAgICAgICAgICAgICAgLy8gdGhpcyBtZXRob2QuCiAgICAgICAgICAgICAgICAgcmV0dXJuIGh0dHBNZXNzYWdlQ29udGV4dC5ub3RpZnlDb250YWluZXJBYm91dExvZ2luKAogICAgICAgICAgICAgICAgICAgICByZXN1bHQuZ2V0Q2FsbGVyUHJpbmNpcGFsKCksIHJlc3VsdC5nZXRDYWxsZXJHcm91cHMoKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIHJldHVybiBodHRwTWVzc2FnZUNvbnRleHQucmVzcG9uc2VVbmF1dGhvcml6ZWQoKTsKLSAgICAgICAgICAgIAotICAgICAgICB9IAorCisgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gaHR0cE1lc3NhZ2VDb250ZXh0LmRvTm90aGluZygpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbXVsdGlwbGUtc3RvcmUvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvZ2xhc3NmaXNoLXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1tdWx0aXBsZS1zdG9yZS9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9nbGFzc2Zpc2gtd2ViLnhtbAppbmRleCA2OTM3MjQ0Li4xMWQwZWU2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1tdWx0aXBsZS1zdG9yZS9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9nbGFzc2Zpc2gtd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1tdWx0aXBsZS1zdG9yZS9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9nbGFzc2Zpc2gtd2ViLnhtbApAQCAtMjQsMTIgKzI0LDEyIEBACiAgICAgICAgIDxyb2xlLW5hbWU+Zm9vPC9yb2xlLW5hbWU+CiAgICAgICAgIDxncm91cC1uYW1lPmZvbzwvZ3JvdXAtbmFtZT4KICAgICA8L3NlY3VyaXR5LXJvbGUtbWFwcGluZz4KLSAgICAKKwogICAgIDxzZWN1cml0eS1yb2xlLW1hcHBpbmc+CiAgICAgICAgIDxyb2xlLW5hbWU+YmFyPC9yb2xlLW5hbWU+CiAgICAgICAgIDxncm91cC1uYW1lPmJhcjwvZ3JvdXAtbmFtZT4KICAgICA8L3NlY3VyaXR5LXJvbGUtbWFwcGluZz4KLSAgICAKKwogICAgIDxzZWN1cml0eS1yb2xlLW1hcHBpbmc+CiAgICAgICAgIDxyb2xlLW5hbWU+a2F6PC9yb2xlLW5hbWU+CiAgICAgICAgIDxncm91cC1uYW1lPmthejwvZ3JvdXAtbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW11bHRpcGxlLXN0b3JlL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQXBwTXVsdGlwbGVTdG9yZUlULmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1tdWx0aXBsZS1zdG9yZS9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0FwcE11bHRpcGxlU3RvcmVJVC5qYXZhCmluZGV4IDEyMDYzM2MuLjdjYmJhNjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW11bHRpcGxlLXN0b3JlL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQXBwTXVsdGlwbGVTdG9yZUlULmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbXVsdGlwbGUtc3RvcmUvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9BcHBNdWx0aXBsZVN0b3JlSVQuamF2YQpAQCAtNDEsNyArNDEsNyBAQAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBwcmludFN1bW1hcnkoKXsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9Ci0gICAgCisKICAgICBARGVwbG95bWVudCh0ZXN0YWJsZSA9IGZhbHNlKQogICAgIHB1YmxpYyBzdGF0aWMgQXJjaGl2ZTw/PiBjcmVhdGVEZXBsb3ltZW50KCkgewogICAgICAgICByZXR1cm4gbWF2ZW5XYXIoKTsKQEAgLTUyLDE5ICs1MiwxOSBAQAogICAgICAgICBhc3NlcnREZWZhdWx0QXV0aGVudGljYXRlZCgKICAgICAgICAgICAgIHJlYWRGcm9tU2VydmVyKCIvc2VydmxldD9uYW1lPXJlemEmcGFzc3dvcmQ9c2VjcmV0MSIpKTsKICAgICB9Ci0gICAgCisKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3ROb3RBdXRoZW50aWNhdGVkKCkgewogICAgICAgICBhc3NlcnREZWZhdWx0Tm90QXV0aGVudGljYXRlZCgKICAgICAgICAgICAgIHJlYWRGcm9tU2VydmVyKCIvc2VydmxldCIpKTsKICAgICB9Ci0gICAgCisKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3ROb3RBdXRoZW50aWNhdGVkV3JvbmdOYW1lKCkgewogICAgICAgICBhc3NlcnREZWZhdWx0Tm90QXV0aGVudGljYXRlZCgKICAgICAgICAgICAgIHJlYWRGcm9tU2VydmVyKCIvc2VydmxldD9uYW1lPXJvbW8mcGFzc3dvcmQ9c2VjcmV0MSIpKTsKICAgICB9Ci0gICAgCisKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3ROb3RBdXRoZW50aWNhdGVkV3JvbmdQYXNzd29yZCgpIHsKICAgICAgICAgYXNzZXJ0RGVmYXVsdE5vdEF1dGhlbnRpY2F0ZWQoCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1uby1hcHBsaWNhdGlvbi1jYWxsZXItcHJpbmNpcGFsL3BvbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1uby1hcHBsaWNhdGlvbi1jYWxsZXItcHJpbmNpcGFsL3BvbS54bWwKaW5kZXggMWU5ZDY2Ni4uNjRkZWZjNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbm8tYXBwbGljYXRpb24tY2FsbGVyLXByaW5jaXBhbC9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW5vLWFwcGxpY2F0aW9uLWNhbGxlci1wcmluY2lwYWwvcG9tLnhtbApAQCAtMTcsMjEgKzE3LDIxIEBACiAtLT4KIAogPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KLQk8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5nbGFzc2Zpc2guc290ZXJpYS50ZXN0PC9ncm91cElkPgogICAgIDxhcnRpZmFjdElkPnNvdGVyaWE8L2FydGlmYWN0SWQ+CiAgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCi0JPGFydGlmYWN0SWQ+YXBwLW5vLWFwcGxpY2F0aW9uLWNhbGxlci1wcmluY2lwYWw8L2FydGlmYWN0SWQ+Ci0JPHBhY2thZ2luZz53YXI8L3BhY2thZ2luZz4KLQkKLQk8YnVpbGQ+CisgICAgPGFydGlmYWN0SWQ+YXBwLW5vLWFwcGxpY2F0aW9uLWNhbGxlci1wcmluY2lwYWw8L2FydGlmYWN0SWQ+CisgICAgPHBhY2thZ2luZz53YXI8L3BhY2thZ2luZz4KKworICAgIDxidWlsZD4KICAgICAgICAgPGZpbmFsTmFtZT5hcHAtbm8tYXBwbGljYXRpb24tY2FsbGVyLXByaW5jaXBhbDwvZmluYWxOYW1lPgotCTwvYnVpbGQ+Ci0gICAgCisgICAgPC9idWlsZD4KKwogICAgIDxwcm9wZXJ0aWVzPgogICAgICAgICA8ZmFpbE9uTWlzc2luZ1dlYlhtbD5mYWxzZTwvZmFpbE9uTWlzc2luZ1dlYlhtbD4KICAgICA8L3Byb3BlcnRpZXM+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1uby1hcHBsaWNhdGlvbi1jYWxsZXItcHJpbmNpcGFsL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvVGVzdEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1uby1hcHBsaWNhdGlvbi1jYWxsZXItcHJpbmNpcGFsL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvVGVzdEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtLmphdmEKaW5kZXggZjg0NWMxNi4uNDBkYjAxZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbm8tYXBwbGljYXRpb24tY2FsbGVyLXByaW5jaXBhbC9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1Rlc3RBdXRoZW50aWNhdGlvbk1lY2hhbmlzbS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW5vLWFwcGxpY2F0aW9uLWNhbGxlci1wcmluY2lwYWwvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9UZXN0QXV0aGVudGljYXRpb25NZWNoYW5pc20uamF2YQpAQCAtMzIsMjAgKzMyLDIwIEBACiAKIEBSZXF1ZXN0U2NvcGVkCiBwdWJsaWMgY2xhc3MgVGVzdEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtIGltcGxlbWVudHMgSHR0cEF1dGhlbnRpY2F0aW9uTWVjaGFuaXNtIHsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBwcml2YXRlIElkZW50aXR5U3RvcmVIYW5kbGVyIGlkZW50aXR5U3RvcmVIYW5kbGVyOwogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIEF1dGhlbnRpY2F0aW9uU3RhdHVzIHZhbGlkYXRlUmVxdWVzdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSwgSHR0cE1lc3NhZ2VDb250ZXh0IGh0dHBNZXNzYWdlQ29udGV4dCkgdGhyb3dzIEF1dGhlbnRpY2F0aW9uRXhjZXB0aW9uIHsKIAotICAgIAkvLyBHZXQgdGhlIChjYWxsZXIpIG5hbWUgYW5kIHBhc3N3b3JkIGZyb20gdGhlIHJlcXVlc3QKKyAgICAgICAgLy8gR2V0IHRoZSAoY2FsbGVyKSBuYW1lIGFuZCBwYXNzd29yZCBmcm9tIHRoZSByZXF1ZXN0CiAgICAgICAgIC8vIE5PVEU6IFRoaXMgaXMgZm9yIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBleGFtcGxlIG9ubHkuIEluIHByYWN0aWNlCiAgICAgICAgIC8vIHB1dHRpbmcgdGhlIHBhc3N3b3JkIGluIGEgcmVxdWVzdCBxdWVyeSBwYXJhbWV0ZXIgaXMgaGlnaGx5CiAgICAgICAgIC8vIGluc2VjdXJlCiAgICAgICAgIFN0cmluZyBuYW1lID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoIm5hbWUiKTsKICAgICAgICAgU3RyaW5nIHBhc3N3b3JkID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoInBhc3N3b3JkIik7Ci0gICAgCQorCiAgICAgICAgIGlmIChuYW1lICE9IG51bGwgJiYgcGFzc3dvcmQgIT0gbnVsbCkgewogCiAgICAgICAgICAgICAvLyBEZWxlZ2F0ZSB0aGUge2NyZWRlbnRpYWxzIGluIC0+IGlkZW50aXR5IGRhdGEgb3V0fSBmdW5jdGlvbiB0bwpAQCAtNTksOSArNTksOSBAQAogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICByZXR1cm4gaHR0cE1lc3NhZ2VDb250ZXh0LnJlc3BvbnNlVW5hdXRob3JpemVkKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gCisgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gaHR0cE1lc3NhZ2VDb250ZXh0LmRvTm90aGluZygpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbm8tYXBwbGljYXRpb24tY2FsbGVyLXByaW5jaXBhbC9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1ZhbGlkYXRlQXZhaWxhYmxlUHJpbmNpcGFsU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbm8tYXBwbGljYXRpb24tY2FsbGVyLXByaW5jaXBhbC9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1ZhbGlkYXRlQXZhaWxhYmxlUHJpbmNpcGFsU2VydmxldC5qYXZhCmluZGV4IDdhOTg4YmMuLmQ4ZjY1ZTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW5vLWFwcGxpY2F0aW9uLWNhbGxlci1wcmluY2lwYWwvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9WYWxpZGF0ZUF2YWlsYWJsZVByaW5jaXBhbFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1uby1hcHBsaWNhdGlvbi1jYWxsZXItcHJpbmNpcGFsL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvVmFsaWRhdGVBdmFpbGFibGVQcmluY2lwYWxTZXJ2bGV0LmphdmEKQEAgLTQyLDcgKzQyLDcgQEAKIHB1YmxpYyBjbGFzcyBWYWxpZGF0ZUF2YWlsYWJsZVByaW5jaXBhbFNlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLSAgICAKKwogICAgIEBJbmplY3QKICAgICBwcml2YXRlIFNlY3VyaXR5Q29udGV4dCBzZWN1cml0eUNvbnRleHQ7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW5vLWFwcGxpY2F0aW9uLWNhbGxlci1wcmluY2lwYWwvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW5vLWFwcGxpY2F0aW9uLWNhbGxlci1wcmluY2lwYWwvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbAppbmRleCBhMGQ5NmQwLi43YjcyN2RhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1uby1hcHBsaWNhdGlvbi1jYWxsZXItcHJpbmNpcGFsL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbm8tYXBwbGljYXRpb24tY2FsbGVyLXByaW5jaXBhbC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCkBAIC0xOCwyNiArMTgsMjYgQEAKIC0tPgogCiA8d2ViLWFwcAotCXhtbG5zPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8veG1sbnMuamNwLm9yZy94bWwvbnMvamF2YWVlIGh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8zXzEueHNkIgotCXZlcnNpb249IjMuMSI+CisgICAgeG1sbnM9Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUgaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS93ZWItYXBwXzNfMS54c2QiCisgICAgdmVyc2lvbj0iMy4xIj4KIAotCTwhLS0gU2VjdXJpdHkgY29uc3RyYWludHMgYW5kIHJvbGVzLiAtLT4KKyAgICA8IS0tIFNlY3VyaXR5IGNvbnN0cmFpbnRzIGFuZCByb2xlcy4gLS0+CiAKLQk8c2VjdXJpdHktY29uc3RyYWludD4KLQkJPHdlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgotCQkJPHdlYi1yZXNvdXJjZS1uYW1lPlVzZXIgcGFnZXM8L3dlYi1yZXNvdXJjZS1uYW1lPgotCQkJPHVybC1wYXR0ZXJuPi9wcm90ZWN0ZWRTZXJ2bGV0PC91cmwtcGF0dGVybj4KLQkJPC93ZWItcmVzb3VyY2UtY29sbGVjdGlvbj4KLQkJPGF1dGgtY29uc3RyYWludD4KLQkJCTxyb2xlLW5hbWU+Zm9vPC9yb2xlLW5hbWU+Ci0JCTwvYXV0aC1jb25zdHJhaW50PgotCTwvc2VjdXJpdHktY29uc3RyYWludD4KKyAgICA8c2VjdXJpdHktY29uc3RyYWludD4KKyAgICAgICAgPHdlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgorICAgICAgICAgICAgPHdlYi1yZXNvdXJjZS1uYW1lPlVzZXIgcGFnZXM8L3dlYi1yZXNvdXJjZS1uYW1lPgorICAgICAgICAgICAgPHVybC1wYXR0ZXJuPi9wcm90ZWN0ZWRTZXJ2bGV0PC91cmwtcGF0dGVybj4KKyAgICAgICAgPC93ZWItcmVzb3VyY2UtY29sbGVjdGlvbj4KKyAgICAgICAgPGF1dGgtY29uc3RyYWludD4KKyAgICAgICAgICAgIDxyb2xlLW5hbWU+Zm9vPC9yb2xlLW5hbWU+CisgICAgICAgIDwvYXV0aC1jb25zdHJhaW50PgorICAgIDwvc2VjdXJpdHktY29uc3RyYWludD4KIAogCi0JPHNlY3VyaXR5LXJvbGU+Ci0JCTxyb2xlLW5hbWU+Zm9vPC9yb2xlLW5hbWU+Ci0JPC9zZWN1cml0eS1yb2xlPgorICAgIDxzZWN1cml0eS1yb2xlPgorICAgICAgICA8cm9sZS1uYW1lPmZvbzwvcm9sZS1uYW1lPgorICAgIDwvc2VjdXJpdHktcm9sZT4KIAogPC93ZWItYXBwPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbm8tYXBwbGljYXRpb24tY2FsbGVyLXByaW5jaXBhbC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1ZhbGlkYXRlQXZhaWxhYmxlUHJpbmNpcGFsSVQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW5vLWFwcGxpY2F0aW9uLWNhbGxlci1wcmluY2lwYWwvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9WYWxpZGF0ZUF2YWlsYWJsZVByaW5jaXBhbElULmphdmEKaW5kZXggZDdmZjA4MS4uYWY5Y2QzNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbm8tYXBwbGljYXRpb24tY2FsbGVyLXByaW5jaXBhbC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1ZhbGlkYXRlQXZhaWxhYmxlUHJpbmNpcGFsSVQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1uby1hcHBsaWNhdGlvbi1jYWxsZXItcHJpbmNpcGFsL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvVmFsaWRhdGVBdmFpbGFibGVQcmluY2lwYWxJVC5qYXZhCkBAIC00NSw3ICs0NSw3IEBACiAgICAgcHVibGljIHN0YXRpYyB2b2lkIHByaW50U3VtbWFyeSgpewogICAgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9Ci0gICAKKwogICAgIEBEZXBsb3ltZW50KHRlc3RhYmxlID0gZmFsc2UpCiAgICAgcHVibGljIHN0YXRpYyBBcmNoaXZlPD8+IGNyZWF0ZURlcGxveW1lbnQoKSB7CiAgICAgICAgIHJldHVybiBtYXZlbldhcigpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbm8tcm9sZS1tYXBwaW5nL3BvbS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1uby1yb2xlLW1hcHBpbmcvcG9tLnhtbAppbmRleCAzN2I4NWMwLi5iMDFmYTdiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1uby1yb2xlLW1hcHBpbmcvcG9tLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1uby1yb2xlLW1hcHBpbmcvcG9tLnhtbApAQCAtMjAsMjQgKzIwLDI0IEBACiA8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CiAgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgotCQorCiAgICAgPHBhcmVudD4KICAgICAgICAgPGdyb3VwSWQ+b3JnLmdsYXNzZmlzaC5zb3RlcmlhLnRlc3Q8L2dyb3VwSWQ+CiAgICAgICAgIDxhcnRpZmFjdElkPnNvdGVyaWE8L2FydGlmYWN0SWQ+CiAgICAgICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICAgIDwvcGFyZW50PgotCQorCiAgICAgPGFydGlmYWN0SWQ+YXBwLW5vLXJvbGUtbWFwcGluZzwvYXJ0aWZhY3RJZD4KICAgICA8cGFja2FnaW5nPndhcjwvcGFja2FnaW5nPgotCQorCiAgICAgPGJ1aWxkPgogICAgICAgICA8ZmluYWxOYW1lPmFwcC1uby1yb2xlLW1hcHBpbmc8L2ZpbmFsTmFtZT4KICAgICA8L2J1aWxkPgotICAgICAgCisKICAgICA8cHJvcGVydGllcz4KICAgICAgICAgPGZhaWxPbk1pc3NpbmdXZWJYbWw+ZmFsc2U8L2ZhaWxPbk1pc3NpbmdXZWJYbWw+CiAgICAgPC9wcm9wZXJ0aWVzPgotICAgIAorCiAgICAgPGRlcGVuZGVuY2llcz4KICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuZ2xhc3NmaXNoLnNvdGVyaWEudGVzdDwvZ3JvdXBJZD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW5vLXJvbGUtbWFwcGluZy9zcmMvbWFpbi9qYXZhL3Rlc3QvU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbm8tcm9sZS1tYXBwaW5nL3NyYy9tYWluL2phdmEvdGVzdC9TZXJ2bGV0LmphdmEKaW5kZXggMjk2ZjMwMS4uNjdkMzgxYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbm8tcm9sZS1tYXBwaW5nL3NyYy9tYWluL2phdmEvdGVzdC9TZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbm8tcm9sZS1tYXBwaW5nL3NyYy9tYWluL2phdmEvdGVzdC9TZXJ2bGV0LmphdmEKQEAgLTM4LDcgKzM4LDcgQEAKICAgICByZWFsbU5hbWU9InRlc3QgcmVhbG0iCiApCiAKLUBFbWJlZGRlZElkZW50aXR5U3RvcmVEZWZpbml0aW9uKHsgCitARW1iZWRkZWRJZGVudGl0eVN0b3JlRGVmaW5pdGlvbih7CiAgICAgQENyZWRlbnRpYWxzKGNhbGxlck5hbWUgPSAicmV6YSIsIHBhc3N3b3JkID0gInNlY3JldDEiLCBncm91cHMgPSB7ICJmb28iLCAiYmFyIiB9KSwKICAgICBAQ3JlZGVudGlhbHMoY2FsbGVyTmFtZSA9ICJhbGV4IiwgcGFzc3dvcmQgPSAic2VjcmV0MiIsIGdyb3VwcyA9IHsgImZvbyIsICJrYXoiIH0pLAogICAgIEBDcmVkZW50aWFscyhjYWxsZXJOYW1lID0gImFyamFuIiwgcGFzc3dvcmQgPSAic2VjcmV0MyIsIGdyb3VwcyA9IHsgImZvbyIgfSkgLApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbm8tcm9sZS1tYXBwaW5nL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQXBwTWVtQmFzaWNJVC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtbm8tcm9sZS1tYXBwaW5nL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQXBwTWVtQmFzaWNJVC5qYXZhCmluZGV4IGEzMzJjMTEuLmJlNmFiYTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLW5vLXJvbGUtbWFwcGluZy9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0FwcE1lbUJhc2ljSVQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1uby1yb2xlLW1hcHBpbmcvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9BcHBNZW1CYXNpY0lULmphdmEKQEAgLTQ3LDc1ICs0Nyw3NSBAQAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBwcmludFN1bW1hcnkoKXsKICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQotICAgIAorCiAgICAgQERlcGxveW1lbnQodGVzdGFibGUgPSBmYWxzZSkKLSAgICBwdWJsaWMgc3RhdGljIEFyY2hpdmU8Pz4gY3JlYXRlRGVwbG95bWVudCgpIHsgICAgICAgIAorICAgIHB1YmxpYyBzdGF0aWMgQXJjaGl2ZTw/PiBjcmVhdGVEZXBsb3ltZW50KCkgewogICAgICAgICByZXR1cm4gbWF2ZW5XYXIoKTsKICAgICB9CiAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RBdXRoZW50aWNhdGVkKCkgewotICAgIAkKLSAgICAJRGVmYXVsdENyZWRlbnRpYWxzUHJvdmlkZXIgY3JlZGVudGlhbHNQcm92aWRlciA9IG5ldyBEZWZhdWx0Q3JlZGVudGlhbHNQcm92aWRlcigpOwotICAgIAljcmVkZW50aWFsc1Byb3ZpZGVyLmFkZENyZWRlbnRpYWxzKCJyZXphIiwgInNlY3JldDEiKTsKLSAgICAJCi0gICAgCWdldFdlYkNsaWVudCgpLnNldENyZWRlbnRpYWxzUHJvdmlkZXIoY3JlZGVudGlhbHNQcm92aWRlcik7Ci0gICAgCQorCisgICAgICAgIERlZmF1bHRDcmVkZW50aWFsc1Byb3ZpZGVyIGNyZWRlbnRpYWxzUHJvdmlkZXIgPSBuZXcgRGVmYXVsdENyZWRlbnRpYWxzUHJvdmlkZXIoKTsKKyAgICAgICAgY3JlZGVudGlhbHNQcm92aWRlci5hZGRDcmVkZW50aWFscygicmV6YSIsICJzZWNyZXQxIik7CisKKyAgICAgICAgZ2V0V2ViQ2xpZW50KCkuc2V0Q3JlZGVudGlhbHNQcm92aWRlcihjcmVkZW50aWFsc1Byb3ZpZGVyKTsKKwogICAgICAgICBhc3NlcnREZWZhdWx0QXV0aGVudGljYXRlZCgKICAgICAgICAgICAgIHJlYWRGcm9tU2VydmVyKCIvc2VydmxldCIpKTsKICAgICB9Ci0gICAgCisKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3ROb3RBdXRoZW50aWNhdGVkKCkgewotICAgICAgICAKKwogICAgICAgICBXZWJSZXNwb25zZSByZXNwb25zZSA9IHJlc3BvbnNlRnJvbVNlcnZlcigiL3NlcnZsZXQiKTsKLSAgICAgICAgCisKICAgICAgICAgYXNzZXJ0RXF1YWxzKDQwMSwgcmVzcG9uc2UuZ2V0U3RhdHVzQ29kZSgpKTsKLSAgICAgICAgCisKICAgICAgICAgYXNzZXJ0VHJ1ZSgKLSAgICAgICAgICAgICJSZXNwb25zZSBkaWQgbm90IGNvbnRhaW4gdGhlIFwiV1dXLUF1dGhlbnRpY2F0ZVwiIGhlYWRlciwgYnV0IHNob3VsZCBoYXZlIiwgCisgICAgICAgICAgICAiUmVzcG9uc2UgZGlkIG5vdCBjb250YWluIHRoZSBcIldXVy1BdXRoZW50aWNhdGVcIiBoZWFkZXIsIGJ1dCBzaG91bGQgaGF2ZSIsCiAgICAgICAgICAgICByZXNwb25zZS5nZXRSZXNwb25zZUhlYWRlclZhbHVlKCJXV1ctQXV0aGVudGljYXRlIikgIT0gbnVsbCk7Ci0gICAgICAgIAorCiAgICAgICAgIGFzc2VydERlZmF1bHROb3RBdXRoZW50aWNhdGVkKAogICAgICAgICAgICAgcmVzcG9uc2UuZ2V0Q29udGVudEFzU3RyaW5nKCkpOwogICAgIH0KLSAgICAKKwogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdE5vdEF1dGhlbnRpY2F0ZWRXcm9uZ05hbWUoKSB7Ci0gICAgCQotICAgIAlEZWZhdWx0Q3JlZGVudGlhbHNQcm92aWRlciBjcmVkZW50aWFsc1Byb3ZpZGVyID0gbmV3IERlZmF1bHRDcmVkZW50aWFsc1Byb3ZpZGVyKCk7Ci0gICAgCWNyZWRlbnRpYWxzUHJvdmlkZXIuYWRkQ3JlZGVudGlhbHMoInJvbW8iLCAic2VjcmV0MSIpOwotICAgIAkKLSAgICAJZ2V0V2ViQ2xpZW50KCkuc2V0Q3JlZGVudGlhbHNQcm92aWRlcihjcmVkZW50aWFsc1Byb3ZpZGVyKTsKLSAgICAJCi0gICAgCVdlYlJlc3BvbnNlIHJlc3BvbnNlID0gcmVzcG9uc2VGcm9tU2VydmVyKCIvc2VydmxldCIpOwotICAgICAgICAgIAotICAgIAlhc3NlcnRFcXVhbHMoNDAxLCByZXNwb25zZS5nZXRTdGF0dXNDb2RlKCkpOwotICAgICAgICAgIAotICAgIAlhc3NlcnRUcnVlKAotCSAgICAgICAgIlJlc3BvbnNlIGRpZCBub3QgY29udGFpbiB0aGUgXCJXV1ctQXV0aGVudGljYXRlXCIgaGVhZGVyLCBidXQgc2hvdWxkIGhhdmUiLCAKLQkgICAgICAgIHJlc3BvbnNlLmdldFJlc3BvbnNlSGVhZGVyVmFsdWUoIldXVy1BdXRoZW50aWNhdGUiKSAhPSBudWxsKTsKLSAgICAgICAgICAKLSAgICAJYXNzZXJ0RGVmYXVsdE5vdEF1dGhlbnRpY2F0ZWQoCi0JICAgICAgICByZXNwb25zZS5nZXRDb250ZW50QXNTdHJpbmcoKSk7CisKKyAgICAgICAgRGVmYXVsdENyZWRlbnRpYWxzUHJvdmlkZXIgY3JlZGVudGlhbHNQcm92aWRlciA9IG5ldyBEZWZhdWx0Q3JlZGVudGlhbHNQcm92aWRlcigpOworICAgICAgICBjcmVkZW50aWFsc1Byb3ZpZGVyLmFkZENyZWRlbnRpYWxzKCJyb21vIiwgInNlY3JldDEiKTsKKworICAgICAgICBnZXRXZWJDbGllbnQoKS5zZXRDcmVkZW50aWFsc1Byb3ZpZGVyKGNyZWRlbnRpYWxzUHJvdmlkZXIpOworCisgICAgICAgIFdlYlJlc3BvbnNlIHJlc3BvbnNlID0gcmVzcG9uc2VGcm9tU2VydmVyKCIvc2VydmxldCIpOworCisgICAgICAgIGFzc2VydEVxdWFscyg0MDEsIHJlc3BvbnNlLmdldFN0YXR1c0NvZGUoKSk7CisKKyAgICAgICAgYXNzZXJ0VHJ1ZSgKKyAgICAgICAgICAgICJSZXNwb25zZSBkaWQgbm90IGNvbnRhaW4gdGhlIFwiV1dXLUF1dGhlbnRpY2F0ZVwiIGhlYWRlciwgYnV0IHNob3VsZCBoYXZlIiwKKyAgICAgICAgICAgIHJlc3BvbnNlLmdldFJlc3BvbnNlSGVhZGVyVmFsdWUoIldXVy1BdXRoZW50aWNhdGUiKSAhPSBudWxsKTsKKworICAgICAgICBhc3NlcnREZWZhdWx0Tm90QXV0aGVudGljYXRlZCgKKyAgICAgICAgICAgIHJlc3BvbnNlLmdldENvbnRlbnRBc1N0cmluZygpKTsKICAgICB9Ci0gICAgCisKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3ROb3RBdXRoZW50aWNhdGVkV3JvbmdQYXNzd29yZCgpIHsKLSAgICAJCi0gICAgICAJRGVmYXVsdENyZWRlbnRpYWxzUHJvdmlkZXIgY3JlZGVudGlhbHNQcm92aWRlciA9IG5ldyBEZWZhdWx0Q3JlZGVudGlhbHNQcm92aWRlcigpOwotICAgIAljcmVkZW50aWFsc1Byb3ZpZGVyLmFkZENyZWRlbnRpYWxzKCJyZXphIiwgIndyb25ncGFzc3dvcmQiKTsKLSAgICAJCi0gICAgCWdldFdlYkNsaWVudCgpLnNldENyZWRlbnRpYWxzUHJvdmlkZXIoY3JlZGVudGlhbHNQcm92aWRlcik7Ci0gICAgCQorCisgICAgICAgICAgRGVmYXVsdENyZWRlbnRpYWxzUHJvdmlkZXIgY3JlZGVudGlhbHNQcm92aWRlciA9IG5ldyBEZWZhdWx0Q3JlZGVudGlhbHNQcm92aWRlcigpOworICAgICAgICBjcmVkZW50aWFsc1Byb3ZpZGVyLmFkZENyZWRlbnRpYWxzKCJyZXphIiwgIndyb25ncGFzc3dvcmQiKTsKKworICAgICAgICBnZXRXZWJDbGllbnQoKS5zZXRDcmVkZW50aWFsc1Byb3ZpZGVyKGNyZWRlbnRpYWxzUHJvdmlkZXIpOworCiAgICAgICAgIFdlYlJlc3BvbnNlIHJlc3BvbnNlID0gcmVzcG9uc2VGcm9tU2VydmVyKCIvc2VydmxldCIpOwotICAgICAgICAKKwogICAgICAgICBhc3NlcnRFcXVhbHMoNDAxLCByZXNwb25zZS5nZXRTdGF0dXNDb2RlKCkpOwotICAgICAgICAgIAorCiAgICAgICAgIGFzc2VydFRydWUoCi0gICAgICAgICAgICAiUmVzcG9uc2UgZGlkIG5vdCBjb250YWluIHRoZSBcIldXVy1BdXRoZW50aWNhdGVcIiBoZWFkZXIsIGJ1dCBzaG91bGQgaGF2ZSIsIAorICAgICAgICAgICAgIlJlc3BvbnNlIGRpZCBub3QgY29udGFpbiB0aGUgXCJXV1ctQXV0aGVudGljYXRlXCIgaGVhZGVyLCBidXQgc2hvdWxkIGhhdmUiLAogICAgICAgICAgICAgcmVzcG9uc2UuZ2V0UmVzcG9uc2VIZWFkZXJWYWx1ZSgiV1dXLUF1dGhlbnRpY2F0ZSIpICE9IG51bGwpOwotICAgICAgICAgIAorCiAgICAgICAgIGFzc2VydERlZmF1bHROb3RBdXRoZW50aWNhdGVkKAogICAgICAgICAgICAgcmVzcG9uc2UuZ2V0Q29udGVudEFzU3RyaW5nKCkpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLXNlY3VyaXR5Y29udGV4dC1hdXRoLWVqYi9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtc2VjdXJpdHljb250ZXh0LWF1dGgtZWpiL3BvbS54bWwKaW5kZXggMWJkNzNlZi4uNGNlNmExZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtc2VjdXJpdHljb250ZXh0LWF1dGgtZWpiL3BvbS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtc2VjdXJpdHljb250ZXh0LWF1dGgtZWpiL3BvbS54bWwKQEAgLTE3LDI2ICsxNywyNiBAQAogLS0+CiAKIDxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+Ci0JPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KIAogICAgIDxwYXJlbnQ+CiAgICAgICAgIDxncm91cElkPm9yZy5nbGFzc2Zpc2guc290ZXJpYS50ZXN0PC9ncm91cElkPgogICAgICAgICA8YXJ0aWZhY3RJZD5zb3RlcmlhPC9hcnRpZmFjdElkPgogICAgICAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgICA8L3BhcmVudD4KLQkKLQk8YXJ0aWZhY3RJZD5hcHAtc2VjdXJpdHljb250ZXh0LWF1dGgtZWpiPC9hcnRpZmFjdElkPgotCTxwYWNrYWdpbmc+d2FyPC9wYWNrYWdpbmc+Ci0JCi0JPGJ1aWxkPgorCisgICAgPGFydGlmYWN0SWQ+YXBwLXNlY3VyaXR5Y29udGV4dC1hdXRoLWVqYjwvYXJ0aWZhY3RJZD4KKyAgICA8cGFja2FnaW5nPndhcjwvcGFja2FnaW5nPgorCisgICAgPGJ1aWxkPgogICAgICAgICA8ZmluYWxOYW1lPmFwcC1zZWN1cml0eWNvbnRleHQtYXV0aC1lamI8L2ZpbmFsTmFtZT4KLQk8L2J1aWxkPgotICAgIAorICAgIDwvYnVpbGQ+CisKICAgICA8cHJvcGVydGllcz4KICAgICAgICAgPGZhaWxPbk1pc3NpbmdXZWJYbWw+ZmFsc2U8L2ZhaWxPbk1pc3NpbmdXZWJYbWw+CiAgICAgPC9wcm9wZXJ0aWVzPgotICAgIAorCiAgICAgPGRlcGVuZGVuY2llcz4KICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuZ2xhc3NmaXNoLnNvdGVyaWEudGVzdDwvZ3JvdXBJZD4KQEAgLTQ1LDUgKzQ1LDUgQEAKICAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KICAgICAgICAgPC9kZXBlbmRlbmN5PgogICAgIDwvZGVwZW5kZW5jaWVzPgotICAgIAorCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1zZWN1cml0eWNvbnRleHQtYXV0aC1lamIvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9BcHBTZWN1cml0eUNvbnRleHRBdXRoSVQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLXNlY3VyaXR5Y29udGV4dC1hdXRoLWVqYi9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0FwcFNlY3VyaXR5Q29udGV4dEF1dGhJVC5qYXZhCmluZGV4IDQ2Y2NhMmEuLjhjM2RjZDMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLXNlY3VyaXR5Y29udGV4dC1hdXRoLWVqYi9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0FwcFNlY3VyaXR5Q29udGV4dEF1dGhJVC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLXNlY3VyaXR5Y29udGV4dC1hdXRoLWVqYi9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0FwcFNlY3VyaXR5Q29udGV4dEF1dGhJVC5qYXZhCkBAIC00MywxOSArNDMsMTkgQEAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgcHJpbnRTdW1tYXJ5KCl7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQotICAgIAorCiAgICAgQERlcGxveW1lbnQodGVzdGFibGUgPSBmYWxzZSkKICAgICBwdWJsaWMgc3RhdGljIEFyY2hpdmU8Pz4gY3JlYXRlRGVwbG95bWVudCgpIHsKICAgICAgICAgcmV0dXJuIG1hdmVuV2FyKCk7CiAgICAgfQotICAgIAorCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0QXV0aGVudGljYXRlZFN0YXR1cygpIHsKICAgICAgICAgYXNzZXJ0VHJ1ZSgKICAgICAgICAgICAgIHJlYWRGcm9tU2VydmVyKCIvc2VydmxldD9uYW1lPXJlemEiKQogICAgICAgICAgICAgICAgIC5jb250YWlucygiQXV0aGVudGljYXRlZCB3aXRoIHN0YXR1czogU1VDQ0VTUyIpKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUaGUgbmFtZSAicmV6YXgiIHdpbGwgY2F1c2UgdGhlIGN1c3RvbSBhdXRoZW50aWNhdGlvbiBwcm92aWRlcgogICAgICAqIHRvIHRocm93IGFuIGF1dGggZXhjZXB0aW9uLCB3aGljaCBzaG91bGQgdWx0aW1hdGVseSByZXN1bHQgaW4KQEAgLTY3LDcgKzY3LDcgQEAKICAgICAgICAgICAgIHJlYWRGcm9tU2VydmVyKCIvc2VydmxldD9uYW1lPXJlemF4IikKICAgICAgICAgICAgICAgICAuY29udGFpbnMoIkF1dGhlbnRpY2F0ZWQgd2l0aCBzdGF0dXM6IFNFTkRfRkFJTFVSRSIpKTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBUaGUgbmFtZSAidW5rbm93biIgd2lsbCBjYXVzZSB0aGUgY3VzdG9tIGF1dGhlbnRpY2F0aW9uIHByb3ZpZGVyCiAgICAgICogdG8gcmV0dXJuIFNFTkRfRkFJTFVSRSwgd2hpY2ggc2hvdWxkIHVsdGltYXRlbHkgcmVzdWx0IGluCkBAIC0xMTksMTQgKzExOSwxNCBAQAogICAgICAgICAgICAgICAgICIvcHJvdGVjdGVkU2VydmxldCIsCiAgICAgICAgICAgICAgICAgcmVhZEZyb21TZXJ2ZXIoIi9zZXJ2bGV0P25hbWU9cmV6YSIpKTsKICAgICB9Ci0gICAgCisKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3ROb3RBdXRoZW50aWNhdGVkKCkgewogICAgICAgICBhc3NlcnREZWZhdWx0Tm90QXV0aGVudGljYXRlZCgKICAgICAgICAgICAgIHJlYWRGcm9tU2VydmVyKCIvc2VydmxldCIpKTsKICAgICB9Ci0gICAgCi0gIAotICAgIAorCisKKwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1zZWN1cml0eWNvbnRleHQtYXV0aC9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtc2VjdXJpdHljb250ZXh0LWF1dGgvcG9tLnhtbAppbmRleCAxMTY1M2M0Li4xNmMxZmJhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1zZWN1cml0eWNvbnRleHQtYXV0aC9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLXNlY3VyaXR5Y29udGV4dC1hdXRoL3BvbS54bWwKQEAgLTE3LDI2ICsxNywyNiBAQAogLS0+CiAKIDxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+Ci0JPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KIAogICAgIDxwYXJlbnQ+CiAgICAgICAgIDxncm91cElkPm9yZy5nbGFzc2Zpc2guc290ZXJpYS50ZXN0PC9ncm91cElkPgogICAgICAgICA8YXJ0aWZhY3RJZD5zb3RlcmlhPC9hcnRpZmFjdElkPgogICAgICAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgICA8L3BhcmVudD4KLQkKLQk8YXJ0aWZhY3RJZD5hcHAtc2VjdXJpdHljb250ZXh0LWF1dGg8L2FydGlmYWN0SWQ+Ci0JPHBhY2thZ2luZz53YXI8L3BhY2thZ2luZz4KLQkKLQk8YnVpbGQ+CisKKyAgICA8YXJ0aWZhY3RJZD5hcHAtc2VjdXJpdHljb250ZXh0LWF1dGg8L2FydGlmYWN0SWQ+CisgICAgPHBhY2thZ2luZz53YXI8L3BhY2thZ2luZz4KKworICAgIDxidWlsZD4KICAgICAgICAgPGZpbmFsTmFtZT5hcHAtc2VjdXJpdHljb250ZXh0LWF1dGg8L2ZpbmFsTmFtZT4KLQk8L2J1aWxkPgotICAgIAorICAgIDwvYnVpbGQ+CisKICAgICA8cHJvcGVydGllcz4KICAgICAgICAgPGZhaWxPbk1pc3NpbmdXZWJYbWw+ZmFsc2U8L2ZhaWxPbk1pc3NpbmdXZWJYbWw+CiAgICAgPC9wcm9wZXJ0aWVzPgotICAgIAorCiAgICAgPGRlcGVuZGVuY2llcz4KICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuZ2xhc3NmaXNoLnNvdGVyaWEudGVzdDwvZ3JvdXBJZD4KQEAgLTQ1LDUgKzQ1LDUgQEAKICAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KICAgICAgICAgPC9kZXBlbmRlbmN5PgogICAgIDwvZGVwZW5kZW5jaWVzPgotICAgIAorCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1zZWN1cml0eWNvbnRleHQtYXV0aC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0FwcFNlY3VyaXR5Q29udGV4dEF1dGhJVC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9hcHAtc2VjdXJpdHljb250ZXh0LWF1dGgvc3JjL3Rlc3QvamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9BcHBTZWN1cml0eUNvbnRleHRBdXRoSVQuamF2YQppbmRleCAyMmFiZWNhLi5jZmRkZjg4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2FwcC1zZWN1cml0eWNvbnRleHQtYXV0aC9zcmMvdGVzdC9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0FwcFNlY3VyaXR5Q29udGV4dEF1dGhJVC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYXBwLXNlY3VyaXR5Y29udGV4dC1hdXRoL3NyYy90ZXN0L2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQXBwU2VjdXJpdHlDb250ZXh0QXV0aElULmphdmEKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgcHJpbnRTdW1tYXJ5KCl7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQotICAgIAorCiAgICAgQERlcGxveW1lbnQodGVzdGFibGUgPSBmYWxzZSkKICAgICBwdWJsaWMgc3RhdGljIEFyY2hpdmU8Pz4gY3JlYXRlRGVwbG95bWVudCgpIHsKICAgICAgICAgcmV0dXJuIG1hdmVuV2FyKCk7CkBAIC01NSwxNCArNTUsMTQgQEAKICAgICAgICAgYXNzZXJ0RGVmYXVsdEF1dGhlbnRpY2F0ZWQoCiAgICAgICAgICAgICByZWFkRnJvbVNlcnZlcigiL3NlcnZsZXQ/bmFtZT1yZXphIikpOwogICAgIH0KLSAgICAKKwogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdEF1dGhlbnRpY2F0ZWRTdGF0dXMoKSB7CiAgICAgICAgIGFzc2VydFRydWUoCiAgICAgICAgICAgICByZWFkRnJvbVNlcnZlcigiL3NlcnZsZXQ/bmFtZT1yZXphIikKICAgICAgICAgICAgICAgICAuY29udGFpbnMoIkF1dGhlbnRpY2F0ZWQgd2l0aCBzdGF0dXM6IFNVQ0NFU1MiKSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGhlIG5hbWUgInJlemF4IiB3aWxsIGNhdXNlIHRoZSBjdXN0b20gYXV0aGVudGljYXRpb24gcHJvdmlkZXIKICAgICAgKiB0byB0aHJvdyBhbiBhdXRoIGV4Y2VwdGlvbiwgd2hpY2ggc2hvdWxkIHVsdGltYXRlbHkgcmVzdWx0IGluCkBAIC03NCw3ICs3NCw3IEBACiAgICAgICAgICAgICByZWFkRnJvbVNlcnZlcigiL3NlcnZsZXQ/bmFtZT1yZXpheCIpCiAgICAgICAgICAgICAgICAgLmNvbnRhaW5zKCJBdXRoZW50aWNhdGVkIHdpdGggc3RhdHVzOiBTRU5EX0ZBSUxVUkUiKSk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogVGhlIG5hbWUgInVua25vd24iIHdpbGwgY2F1c2UgdGhlIGN1c3RvbSBhdXRoZW50aWNhdGlvbiBwcm92aWRlcgogICAgICAqIHRvIHJldHVybiBTRU5EX0ZBSUxVUkUsIHdoaWNoIHNob3VsZCB1bHRpbWF0ZWx5IHJlc3VsdCBpbgpAQCAtMTE4LDE0ICsxMTgsMTQgQEAKICAgICAgICAgICAgICAgICAiL3Byb3RlY3RlZFNlcnZsZXQiLAogICAgICAgICAgICAgICAgIHJlYWRGcm9tU2VydmVyKCIvc2VydmxldD9uYW1lPXJlemEiKSk7CiAgICAgfQotICAgIAorCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0Tm90QXV0aGVudGljYXRlZCgpIHsKICAgICAgICAgYXNzZXJ0RGVmYXVsdE5vdEF1dGhlbnRpY2F0ZWQoCiAgICAgICAgICAgICByZWFkRnJvbVNlcnZlcigiL3NlcnZsZXQiKSk7CiAgICAgfQotICAgIAotICAKLSAgICAKKworCisKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDRjNWVjYTUuLmZhYmYxZDAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InNlY3VyaXR5Ii8+CiA8cHJvcGVydHkgbmFtZT0ic3ViLW1vZHVsZSIgdmFsdWU9IiR7bW9kdWxlfS1zb3RlcmlhIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2NvbW1vbi9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9jb21tb24vcG9tLnhtbAppbmRleCA3NTkxNmVkLi5hOTY0ZDBlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2NvbW1vbi9wb20ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvY29tbW9uL3BvbS54bWwKQEAgLTE3LDE3ICsxNywxNyBAQAogLS0+CiAKIDxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+Ci0JPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KIAogICAgIDxwYXJlbnQ+CiAgICAgICAgIDxncm91cElkPm9yZy5nbGFzc2Zpc2guc290ZXJpYS50ZXN0PC9ncm91cElkPgogICAgICAgICA8YXJ0aWZhY3RJZD5zb3RlcmlhPC9hcnRpZmFjdElkPgogICAgICAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgICA8L3BhcmVudD4KLSAgICAKKwogICAgIDxhcnRpZmFjdElkPmNvbW1vbjwvYXJ0aWZhY3RJZD4KLSAgICAKKwogICAgIDxwYWNrYWdpbmc+amFyPC9wYWNrYWdpbmc+CiAKICAgICA8ZGVwZW5kZW5jaWVzPgpAQCAtMzgsMTMgKzM4LDEzIEBACiAgICAgICAgIDwvZGVwZW5kZW5jeT4KICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuamJvc3MuYXJxdWlsbGlhbi5qdW5pdDwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPmFycXVpbGxpYW4tanVuaXQtY29udGFpbmVyPC9hcnRpZmFjdElkPiAgICAgICAgICAgIAorICAgICAgICAgICAgPGFydGlmYWN0SWQ+YXJxdWlsbGlhbi1qdW5pdC1jb250YWluZXI8L2FydGlmYWN0SWQ+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICAgICAgCisKICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5uZXQuc291cmNlZm9yZ2UuaHRtbHVuaXQ8L2dyb3VwSWQ+CiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5odG1sdW5pdDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMjk8L3ZlcnNpb24+ICAgICAgICAgICAgCisgICAgICAgICAgICA8dmVyc2lvbj4yLjI5PC92ZXJzaW9uPgogICAgICAgICA8L2RlcGVuZGVuY3k+CiAgICAgPC9kZXBlbmRlbmNpZXM+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2NvbW1vbi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0FycXVpbGxpYW5CYXNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2NvbW1vbi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0FycXVpbGxpYW5CYXNlLmphdmEKaW5kZXggNmMwMmJiNi4uYWM3ZTE4MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9jb21tb24vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9BcnF1aWxsaWFuQmFzZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvY29tbW9uL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQXJxdWlsbGlhbkJhc2UuamF2YQpAQCAtMzcsMzEgKzM3LDMxIEBACiBpbXBvcnQgY29tLmdhcmdveWxlc29mdHdhcmUuaHRtbHVuaXQuV2ViUmVzcG9uc2U7CiAKIHB1YmxpYyBjbGFzcyBBcnF1aWxsaWFuQmFzZSB7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihBcnF1aWxsaWFuQmFzZS5jbGFzcy5nZXROYW1lKCkpOwotICAgIAorCiAgICAgcHJpdmF0ZSBXZWJDbGllbnQgd2ViQ2xpZW50OwogICAgIHByaXZhdGUgU3RyaW5nIHJlc3BvbnNlOwogCi0JQEFycXVpbGxpYW5SZXNvdXJjZQorICAgIEBBcnF1aWxsaWFuUmVzb3VyY2UKICAgICBwcml2YXRlIFVSTCBiYXNlOwotCQorCiAgICAgQFJ1bGUKICAgICBwdWJsaWMgVGVzdFdhdGNoZXIgcnVsZUV4YW1wbGUgPSBuZXcgVGVzdFdhdGNoZXIoKSB7CiAgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwcm90ZWN0ZWQgdm9pZCBmYWlsZWQoVGhyb3dhYmxlIGUsIERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKSB7CiAgICAgICAgICAgICBzdXBlci5mYWlsZWQoZSwgZGVzY3JpcHRpb24pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBsb2dnZXIubG9nKFNFVkVSRSwgCi0gICAgICAgICAgICAgICAgIlxuXG5UZXN0IGZhaWxlZDogIiArIAorCisgICAgICAgICAgICBsb2dnZXIubG9nKFNFVkVSRSwKKyAgICAgICAgICAgICAgICAiXG5cblRlc3QgZmFpbGVkOiAiICsKICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbi5nZXRDbGFzc05hbWUoKSArICIuIiArIGRlc2NyaXB0aW9uLmdldE1ldGhvZE5hbWUoKSArCi0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAiXG5NZXNzYWdlOiAiICsgZS5nZXRNZXNzYWdlKCkgKwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgIlxuTGFzdCByZXNwb25zZTogIiArCi0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAiXG5cbiIgICsgcmVzcG9uc2UgKyAiXG5cbiIpOwotICAgICAgICAgICAgCisKICAgICAgICAgfQogICAgIH07CiAKQEAgLTY5LDcgKzY5LDcgQEAKICAgICBwdWJsaWMgdm9pZCBzZXRVcCgpIHsKICAgICAgICAgcmVzcG9uc2UgPSBudWxsOwogICAgICAgICB3ZWJDbGllbnQgPSBuZXcgV2ViQ2xpZW50KCkgewotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwogCiAgICAgICAgICAgICBAT3ZlcnJpZGUKQEAgLTg5LDIxICs4OSwyMSBAQAogICAgICAgICB3ZWJDbGllbnQuZ2V0Q29va2llTWFuYWdlcigpLmNsZWFyQ29va2llcygpOwogICAgICAgICB3ZWJDbGllbnQuY2xvc2UoKTsKICAgICB9Ci0gICAgCisKICAgICBwcm90ZWN0ZWQgU3RyaW5nIHJlYWRGcm9tU2VydmVyKFN0cmluZyBwYXRoKSB7CiAgICAgICAgIHJlc3BvbnNlID0gIiI7CiAgICAgICAgIFdlYlJlc3BvbnNlIGxvY2FsUmVzcG9uc2UgPSByZXNwb25zZUZyb21TZXJ2ZXIocGF0aCk7CiAgICAgICAgIGlmIChsb2NhbFJlc3BvbnNlICE9IG51bGwpIHsKICAgICAgICAgICAgIHJlc3BvbnNlID0gbG9jYWxSZXNwb25zZS5nZXRDb250ZW50QXNTdHJpbmcoKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAJcmV0dXJuIHJlc3BvbnNlOworCisgICAgICAgIHJldHVybiByZXNwb25zZTsKICAgICB9Ci0gICAgCisKICAgICBwcm90ZWN0ZWQgV2ViUmVzcG9uc2UgcmVzcG9uc2VGcm9tU2VydmVyKFN0cmluZyBwYXRoKSB7Ci0gICAgICAgIAorCiAgICAgICAgIFdlYlJlc3BvbnNlIHdlYlJlc3BvbnNlID0gbnVsbDsKLSAgICAgICAgCisKICAgICAgICAgUGFnZSBwYWdlID0gcGFnZUZyb21TZXJ2ZXIocGF0aCk7CiAgICAgICAgIGlmIChwYWdlICE9IG51bGwpIHsKICAgICAgICAgICAgIHdlYlJlc3BvbnNlID0gcGFnZS5nZXRXZWJSZXNwb25zZSgpOwpAQCAtMTExLDM3ICsxMTEsMzcgQEAKICAgICAgICAgICAgICAgICByZXNwb25zZSA9IHdlYlJlc3BvbnNlLmdldENvbnRlbnRBc1N0cmluZygpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiB3ZWJSZXNwb25zZTsKICAgICB9Ci0gICAgCisKICAgICBwcm90ZWN0ZWQgPFAgZXh0ZW5kcyBQYWdlPiBQIHBhZ2VGcm9tU2VydmVyKFN0cmluZyBwYXRoKSB7Ci0gICAgCQotICAgIAlpZiAoYmFzZS50b1N0cmluZygpLmVuZHNXaXRoKCIvIikgJiYgcGF0aC5zdGFydHNXaXRoKCIvIikpIHsKLSAgICAJCXBhdGggPSBwYXRoLnN1YnN0cmluZygxKTsKLSAgICAJfQotICAgIAkKKworICAgICAgICBpZiAoYmFzZS50b1N0cmluZygpLmVuZHNXaXRoKCIvIikgJiYgcGF0aC5zdGFydHNXaXRoKCIvIikpIHsKKyAgICAgICAgICAgIHBhdGggPSBwYXRoLnN1YnN0cmluZygxKTsKKyAgICAgICAgfQorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXNwb25zZSA9ICIiOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFAgcGFnZSA9IHdlYkNsaWVudC5nZXRQYWdlKGJhc2UgKyBwYXRoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAocGFnZSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgV2ViUmVzcG9uc2UgbG9jYWxSZXNwb25zZSA9IHBhZ2UuZ2V0V2ViUmVzcG9uc2UoKTsKICAgICAgICAgICAgICAgICBpZiAobG9jYWxSZXNwb25zZSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gbG9jYWxSZXNwb25zZS5nZXRDb250ZW50QXNTdHJpbmcoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgcmV0dXJuIHBhZ2U7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChGYWlsaW5nSHR0cFN0YXR1c0NvZGVFeGNlcHRpb24gfCBJT0V4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKGUpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJvdGVjdGVkIFdlYkNsaWVudCBnZXRXZWJDbGllbnQoKSB7Ci0gCQlyZXR1cm4gd2ViQ2xpZW50OwotIAl9Ci0gICAgCisgICAgICAgICByZXR1cm4gd2ViQ2xpZW50OworICAgICB9CisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvY29tbW9uL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQXNzZXJ0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2NvbW1vbi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L0Fzc2VydC5qYXZhCmluZGV4IDEyZTZlYjQuLjBjZGFkNmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvY29tbW9uL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9zb3RlcmlhL3Rlc3QvQXNzZXJ0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9jb21tb24vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9Bc3NlcnQuamF2YQpAQCAtMjUsNyArMjUsNyBAQAogaW1wb3J0IGNvbS5nYXJnb3lsZXNvZnR3YXJlLmh0bWx1bml0LldlYlJlc3BvbnNlOwogCiBwdWJsaWMgZmluYWwgY2xhc3MgQXNzZXJ0IHsKLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBhc3NlcnREZWZhdWx0QXV0aGVudGljYXRlZChTdHJpbmcgcmVzcG9uc2UpIHsKICAgICAgICAgYXNzZXJ0QXV0aGVudGljYXRlZCgid2ViIiwgInJlemEiLCByZXNwb25zZSwgImZvbyIsICJiYXIiKTsKICAgICB9CkBAIC0zNSw3ICszNSw3IEBACiAgICAgICAgIGFzc2VydEVxdWFscygyMDAsIHJlc3BvbnNlLmdldFN0YXR1c0NvZGUoKSk7CiAgICAgICAgIGFzc2VydEF1dGhlbnRpY2F0ZWQoIndlYiIsICJyZXphIiwgcmVzcG9uc2UuZ2V0Q29udGVudEFzU3RyaW5nKCksICJmb28iLCAiYmFyIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIGFzc2VydERlZmF1bHROb3RBdXRoZW50aWNhdGVkKFN0cmluZyByZXNwb25zZSkgewogICAgICAgICBhc3NlcnROb3RBdXRoZW50aWNhdGVkKCJ3ZWIiLCAicmV6YSIsIHJlc3BvbnNlLCAiZm9vIiwgImJhciIpOwogICAgIH0KQEAgLTc3LDMwICs3NywzMCBAQAogICAgICAgICBhc3NlcnRCb3RoQ29udGFpbmVyQW5kQXBwbGljYXRpb25QcmluY2lwYWxzQXJlU2FtZSgicmV6YSIsICJmb28iLCByZXNwb25zZQogICAgICAgICAgICAgICAgIC5nZXRDb250ZW50QXNTdHJpbmcoKSk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIGFzc2VydEF1dGhlbnRpY2F0ZWQoU3RyaW5nIHVzZXJUeXBlLCBTdHJpbmcgbmFtZSwgU3RyaW5nIHJlc3BvbnNlLCBTdHJpbmcuLi4gcm9sZXMpIHsKICAgICAgICAgYXNzZXJ0VHJ1ZSgKLSAgICAgICAgICAgICJTaG91bGQgYmUgYXV0aGVudGljYXRlZCBhcyB1c2VyICIgKyBuYW1lICsgIiBidXQgd2FzIG5vdCBcbiBSZXNwb25zZTogXG4iICsgCisgICAgICAgICAgICAiU2hvdWxkIGJlIGF1dGhlbnRpY2F0ZWQgYXMgdXNlciAiICsgbmFtZSArICIgYnV0IHdhcyBub3QgXG4gUmVzcG9uc2U6IFxuIiArCiAgICAgICAgICAgICByZXNwb25zZSArICJcbiBzZWFyY2g6ICIgKyB1c2VyVHlwZSArICIgdXNlcm5hbWU6ICIgKyBuYW1lLAogICAgICAgICAgICAgcmVzcG9uc2UuY29udGFpbnModXNlclR5cGUgKyAiIHVzZXJuYW1lOiAiICsgbmFtZSkpOwotICAgICAgICAKKwogICAgICAgICBmb3IgKFN0cmluZyByb2xlIDogcm9sZXMpIHsKICAgICAgICAgICAgIGFzc2VydFRydWUoCi0gICAgICAgICAgICAgICAgIkF1dGhlbnRpY2F0ZWQgdXNlciBzaG91bGQgaGF2ZSByb2xlIFwiIiArIHJvbGUgKyAiXCIsIGJ1dCBkaWQgbm90IFxuIFJlc3BvbnNlOiBcbiIgKyAKKyAgICAgICAgICAgICAgICAiQXV0aGVudGljYXRlZCB1c2VyIHNob3VsZCBoYXZlIHJvbGUgXCIiICsgcm9sZSArICJcIiwgYnV0IGRpZCBub3QgXG4gUmVzcG9uc2U6IFxuIiArCiAgICAgICAgICAgICAgICAgcmVzcG9uc2UsCiAgICAgICAgICAgICAgICAgcmVzcG9uc2UuY29udGFpbnModXNlclR5cGUgKyAiIHVzZXIgaGFzIHJvbGUgXCIiICsgcm9sZSArICJcIjogdHJ1ZSIpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBhc3NlcnROb3RBdXRoZW50aWNhdGVkKFN0cmluZyB1c2VyVHlwZSwgU3RyaW5nIG5hbWUsIFN0cmluZyByZXNwb25zZSwgU3RyaW5nLi4uIHJvbGVzKSB7CiAgICAgICAgIGFzc2VydEZhbHNlKAotICAgICAgICAgICAgIlNob3VsZCBub3QgYmUgYXV0aGVudGljYXRlZCBhcyB1c2VyICIgKyBuYW1lICsgIiBidXQgd2FzIFxuIFJlc3BvbnNlOiBcbiIgKyAKKyAgICAgICAgICAgICJTaG91bGQgbm90IGJlIGF1dGhlbnRpY2F0ZWQgYXMgdXNlciAiICsgbmFtZSArICIgYnV0IHdhcyBcbiBSZXNwb25zZTogXG4iICsKICAgICAgICAgICAgIHJlc3BvbnNlICsgIlxuIHNlYXJjaDogIiArIHVzZXJUeXBlICsgIiB1c2VybmFtZTogIiArIG5hbWUsCiAgICAgICAgICAgICByZXNwb25zZS5jb250YWlucyh1c2VyVHlwZSArICIgdXNlcm5hbWU6ICIgKyBuYW1lKSk7Ci0gICAgICAgIAorCiAgICAgICAgIGZvciAoU3RyaW5nIHJvbGUgOiByb2xlcykgewogICAgICAgICAgICAgYXNzZXJ0RmFsc2UoCi0gICAgICAgICAgICAgICAgIkF1dGhlbnRpY2F0ZWQgdXNlciBzaG91bGQgbm90IGhhdmUgcm9sZSBcIiIgKyByb2xlICsgIlwiLCBidXQgZGlkIFxuIFJlc3BvbnNlOiBcbiIgKyAKKyAgICAgICAgICAgICAgICAiQXV0aGVudGljYXRlZCB1c2VyIHNob3VsZCBub3QgaGF2ZSByb2xlIFwiIiArIHJvbGUgKyAiXCIsIGJ1dCBkaWQgXG4gUmVzcG9uc2U6IFxuIiArCiAgICAgICAgICAgICAgICAgcmVzcG9uc2UsCiAgICAgICAgICAgICAgICAgcmVzcG9uc2UuY29udGFpbnModXNlclR5cGUgKyAiIHVzZXIgaGFzIHJvbGUgXCIiICsgcm9sZSArICJcIjogdHJ1ZSIpKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9jb21tb24vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL3NvdGVyaWEvdGVzdC9TaHJpbmtXcmFwLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2NvbW1vbi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1Nocmlua1dyYXAuamF2YQppbmRleCA1OTAyOWViLi4wMTc1N2YxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2NvbW1vbi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1Nocmlua1dyYXAuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2NvbW1vbi9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvc290ZXJpYS90ZXN0L1Nocmlua1dyYXAuamF2YQpAQCAtMjYsMTEgKzI2LDExIEBACiAKIHB1YmxpYyBjbGFzcyBTaHJpbmtXcmFwIHsKIAotICAgIHB1YmxpYyBzdGF0aWMgV2ViQXJjaGl2ZSBtYXZlbldhcigpIHsgICAgICAgIAotICAgICAgICByZXR1cm4gCisgICAgcHVibGljIHN0YXRpYyBXZWJBcmNoaXZlIG1hdmVuV2FyKCkgeworICAgICAgICByZXR1cm4KICAgICAgICAgICAgIGNyZWF0ZShaaXBJbXBvcnRlci5jbGFzcywgZ2V0UHJvcGVydHkoImZpbmFsTmFtZSIpICsgIi53YXIiKQogICAgICAgICAgICAgICAgIC5pbXBvcnRGcm9tKG5ldyBGaWxlKCJ0YXJnZXQvIiArIGdldFByb3BlcnR5KCJmaW5hbE5hbWUiKSArICIud2FyIikpCiAgICAgICAgICAgICAgICAgLmFzKFdlYkFyY2hpdmUuY2xhc3MpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9jb21tb24vc3JjL21haW4vcmVzb3VyY2VzL3NlcnZlci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2NvbW1vbi9zcmMvbWFpbi9yZXNvdXJjZXMvc2VydmVyLnhtbAppbmRleCAzMWNhMmI4Li5kYWQyYmNkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2NvbW1vbi9zcmMvbWFpbi9yZXNvdXJjZXMvc2VydmVyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL2NvbW1vbi9zcmMvbWFpbi9yZXNvdXJjZXMvc2VydmVyLnhtbApAQCAtMjMsOSArMjMsOSBAQAogICAgICAgICA8ZmVhdHVyZT5qYXZhZWUtNy4wPC9mZWF0dXJlPgogICAgICAgICA8ZmVhdHVyZT5sb2NhbENvbm5lY3Rvci0xLjA8L2ZlYXR1cmU+CiAgICAgPC9mZWF0dXJlTWFuYWdlcj4KLSAgICAKKwogICAgIDxodHRwRW5kcG9pbnQgaHR0cFBvcnQ9IjkwODAiIGh0dHBzUG9ydD0iOTQ0MyIgaWQ9ImRlZmF1bHRIdHRwRW5kcG9pbnQiLz4KLSAgICAgICAgICAgICAgICAgIAorCiAgICAgPGFwcGxpY2F0aW9uTWFuYWdlciBhdXRvRXhwYW5kPSJ0cnVlIi8+CiAKIDwvc2VydmVyPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9wb20ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc290ZXJpYS9wb20ueG1sCmluZGV4IDg2ZjJmZTcuLjUzMmM3ZDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3NvdGVyaWEvcG9tLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zb3RlcmlhL3BvbS54bWwKQEAgLTIzLDkgKzIzLDkgQEAKICAgICA8YXJ0aWZhY3RJZD5zb3RlcmlhPC9hcnRpZmFjdElkPgogICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICAgIDxwYWNrYWdpbmc+cG9tPC9wYWNrYWdpbmc+Ci0gICAgCisKICAgICA8bmFtZT5Tb3RlcmlhICR7cHJvamVjdC52ZXJzaW9ufSBJbnRlZ3JhdGlvbiB0ZXN0cyBhbmQgZXhhbXBsZXM8L25hbWU+Ci0gICAgCisKICAgICA8cHJvcGVydGllcz4KICAgICAgICAgPGdsYXNzZmlzaC52ZXJzaW9uPjUuMDwvZ2xhc3NmaXNoLnZlcnNpb24+CiAgICAgICAgIDxtYXZlbi5jb21waWxlci5zb3VyY2U+MS44PC9tYXZlbi5jb21waWxlci5zb3VyY2U+CkBAIC00OCwxMCArNDgsMTAgQEAKICAgICAgICAgPG1vZHVsZT5hcHAtbXVsdGlwbGUtc3RvcmUtYmFja3VwPC9tb2R1bGU+CiAgICAgICAgIDxtb2R1bGU+YXBwLW5vLXJvbGUtbWFwcGluZzwvbW9kdWxlPgogICAgICAgICA8bW9kdWxlPmFwcC1idW5kbGVkLWhhbS1iYXNpYy1sb2dpbi1jb25maWctZm9ybTwvbW9kdWxlPgotICAgICAgICA8bW9kdWxlPmFwcC1jYWxsZXItcHJpbmNpcGFsPC9tb2R1bGU+IAorICAgICAgICA8bW9kdWxlPmFwcC1jYWxsZXItcHJpbmNpcGFsPC9tb2R1bGU+CiAgICAgICAgIDxtb2R1bGU+YXBwLW5vLWFwcGxpY2F0aW9uLWNhbGxlci1wcmluY2lwYWw8L21vZHVsZT4KICAgICA8L21vZHVsZXM+Ci0gICAgCisKICAgICA8ZGVwZW5kZW5jeU1hbmFnZW1lbnQ+CiAgICAgICAgIDxkZXBlbmRlbmNpZXM+CiAgICAgICAgICAgICA8ZGVwZW5kZW5jeT4KQEAgLTY4LDIwICs2OCwyMCBAQAogICAgICAgICA8L2RlcGVuZGVuY3k+CiAgICAgICAgIDwvZGVwZW5kZW5jaWVzPgogICAgIDwvZGVwZW5kZW5jeU1hbmFnZW1lbnQ+Ci0gICAgCisKICAgICA8ZGVwZW5kZW5jaWVzPgogICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPgogICAgICAgICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICA8dmVyc2lvbj40LjEzLjI8L3ZlcnNpb24+Ci0gICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+ICAgICAgICAgICAgCi0gICAgICAgIDwvZGVwZW5kZW5jeT4gICAgICAKKyAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgogICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPmphdmF4PC9ncm91cElkPgogICAgICAgICAgICAgPGFydGlmYWN0SWQ+amF2YWVlLWFwaTwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgIDx2ZXJzaW9uPjcuMDwvdmVyc2lvbj4KICAgICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4gICAgICAgIAorICAgICAgICA8L2RlcGVuZGVuY3k+CiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+amF2YXguc2VjdXJpdHkuZW50ZXJwcmlzZTwvZ3JvdXBJZD4KICAgICAgICAgICAgIDxhcnRpZmFjdElkPmphdmF4LnNlY3VyaXR5LmVudGVycHJpc2UtYXBpPC9hcnRpZmFjdElkPgpAQCAtMTA4LDcgKzEwOCw3IEBACiAgICAgICAgICAgICA8c3lzdGVtUGF0aD4ke0FQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyPC9zeXN0ZW1QYXRoPgogICAgICAgICA8L2RlcGVuZGVuY3k+CiAgICAgPC9kZXBlbmRlbmNpZXM+Ci0gICAgCisKICAgICA8YnVpbGQ+CiAgICAgICAgIDxwbHVnaW5zPgogICAgICAgICAgICA8cGx1Z2luPgpAQCAtMTMxLDcgKzEzMSw3IEBACiAgICAgICAgICAgICAgICAgICA8R0xBU1NGSVNIX0hPTUU+JHtlbnYuUzFBU19IT01FfS8uLjwvR0xBU1NGSVNIX0hPTUU+CiAgICAgICAgICAgICAgICAgPC9lbnZpcm9ubWVudFZhcmlhYmxlcz4KICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgotICAgICAgICAgICAgPC9wbHVnaW4+ICAgICAgIAorICAgICAgICAgICAgPC9wbHVnaW4+CiAgICAgICAgIDwvcGx1Z2lucz4KICAgICA8L2J1aWxkPgogICAgPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc3RhbmRhbG9uZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc3RhbmRhbG9uZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDlmN2JmYjUuLjlmMDk2OTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3N0YW5kYWxvbmUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zdGFuZGFsb25lL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InNlY3VyaXR5Ii8+CiA8cHJvcGVydHkgbmFtZT0ic3ViLW1vZHVsZSIgdmFsdWU9IiR7bW9kdWxlfS1zdGFuZGFsb25lIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zdGFuZGFsb25lL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3N0YW5kYWxvbmUvYnVpbGQueG1sCmluZGV4IGRlZTdjZmEuLjBlZjA5YTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3N0YW5kYWxvbmUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3N0YW5kYWxvbmUvYnVpbGQueG1sCkBAIC0zMiw3ICszMiw3IEBACiAgICAgJnJ1bjsKIAogICAgIDx0YXJnZXQgbmFtZT0iYWxsIj4KLQk8YW50IGRpcj0ibG9naW5jdHhkcml2ZXIiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9ImxvZ2luY3R4ZHJpdmVyIiB0YXJnZXQ9ImFsbCIvPgogICAgIDwvdGFyZ2V0PgogCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zdGFuZGFsb25lL2xvZ2luY3R4ZHJpdmVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zdGFuZGFsb25lL2xvZ2luY3R4ZHJpdmVyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZWRiMTMxOS4uNzM2NWYyNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc3RhbmRhbG9uZS9sb2dpbmN0eGRyaXZlci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3N0YW5kYWxvbmUvbG9naW5jdHhkcml2ZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic2VjdXJpdHkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdWItbW9kdWxlIiB2YWx1ZT0iJHttb2R1bGV9LXN0YW5kYWxvbmUtbG9naW5jdHhkcml2ZXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3N0YW5kYWxvbmUvbG9naW5jdHhkcml2ZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc3RhbmRhbG9uZS9sb2dpbmN0eGRyaXZlci9idWlsZC54bWwKaW5kZXggZGQwNTk1ZS4uOGQ3OWY3NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc3RhbmRhbG9uZS9sb2dpbmN0eGRyaXZlci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc3RhbmRhbG9uZS9sb2dpbmN0eGRyaXZlci9idWlsZC54bWwKQEAgLTM1LDEyICszNSwxMiBAQAogICAgJmNvbW1vblNlY3VyaXR5OwogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+Ci0JCVVzYWdlOgotCQkJYW50IGFsbCAoRXhlY3V0ZXMgc3RhbmRhbG9uZSBsb2dpbiBjb250ZXh0IGRyaXZlciB0ZXN0cykKLQk8L2VjaG8+CisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgc3RhbmRhbG9uZSBsb2dpbiBjb250ZXh0IGRyaXZlciB0ZXN0cykKKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQsIHNldHVwLCBkZXBsb3kscnVuLCB1bmRlcGxveSwgdW5zZXR1cCI+CiAgICAgPC90YXJnZXQ+CiAKQEAgLTEwMSw3ICsxMDEsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJydW4tc3RhbmRhbG9uZS1jbGllbnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxlY2hvIG1lc3NhZ2U9IlJ1bm5pbmcgc3RhbmRhbG9uZSBjbGllbnQgLi4uIi8+Ci0gICAKKwogICAgICAgPGphdmEgY2xhc3NuYW1lPSJMb2dpbkNvbnRleHREcml2ZXJUZXN0IgogICAgICAgICBjbGFzc3BhdGg9IiR7YWRtaW4uZG9tYWluLmRpcn0vLi4vbGliL2FwcHNlcnYtcnQuamFyOiR7czFhc3Rlc3QuY2xhc3NwYXRofToke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcENsaWVudC5qYXIiIGZvcms9InRydWUiPgogICAgICAgICA8anZtYXJnIHZhbHVlPSItRGphdmEuc2VjdXJpdHkuYXV0aC5sb2dpbi5jb25maWc9JHthZG1pbi5kb21haW4uZGlyfS8uLi9saWIvYXBwY2xpZW50L2FwcGNsaWVudGxvZ2luLmNvbmYiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3N0YW5kYWxvbmUvbG9naW5jdHhkcml2ZXIvY2xpZW50L0xvZ2luQ29udGV4dERyaXZlclRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3N0YW5kYWxvbmUvbG9naW5jdHhkcml2ZXIvY2xpZW50L0xvZ2luQ29udGV4dERyaXZlclRlc3QuamF2YQppbmRleCA3MzgxYmRmLi4xNGY3ZDQ1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zdGFuZGFsb25lL2xvZ2luY3R4ZHJpdmVyL2NsaWVudC9Mb2dpbkNvbnRleHREcml2ZXJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc3RhbmRhbG9uZS9sb2dpbmN0eGRyaXZlci9jbGllbnQvTG9naW5Db250ZXh0RHJpdmVyVGVzdC5qYXZhCkBAIC0zNCwyMCArMzQsMjAgQEAKICAqLwogcHVibGljIGNsYXNzIExvZ2luQ29udGV4dERyaXZlclRlc3QgewogCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RJZD0iU3RhbmRhbG9uZS1jbGllbnQtbG9naW4tY29udGV4dC1kcml2ZXIiOworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0SWQ9IlN0YW5kYWxvbmUtY2xpZW50LWxvZ2luLWNvbnRleHQtZHJpdmVyIjsKICAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIHRlc3RTdGF0dXM9ZmFsc2U7CiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgSW5pdGlhbENvbnRleHQgaWMgPSBudWxsOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgTXlTZXNzaW9uMVJlbW90ZSBteTFyID0gbnVsbDsKLSAgICAgICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiU2VjdXJpdHk6OkVKQiBNZXRob2QgcGVybWlzc2lvbnMgdGVzdCB1c2luZyAiICsKICAgICAgICAgICAgICAgICAiTG9naW4gQ29udGV4dCBEcml2ZXIgU3RhbmRhbG9uZSBDbGllbnQiKTsKLSAgICAKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKiogRUpCTWV0aG9kIFBlcm1pc3Npb24gVGVzdCB1c2luZyBMb2dpbiBDb250ZXh0IERyaXZlciBTdGFuZGFsb25lIGNsaWVudCAqKioiKTsgIAorCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqIEVKQk1ldGhvZCBQZXJtaXNzaW9uIFRlc3QgdXNpbmcgTG9naW4gQ29udGV4dCBEcml2ZXIgU3RhbmRhbG9uZSBjbGllbnQgKioqIik7CiAKIAogICAgICAgICB0cnl7CkBAIC01OCwxNiArNTgsMTYgQEAKIAogICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgQ29udGV4dAogICAgICAgICAgICAgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVKQiBsb29rdXAgc3RhcnQuLi4iKTsKLSAgICAgICAgICAgIGphdmEubGFuZy5PYmplY3Qgb2JqcmVmID0gaWMubG9va3VwKCJlamIvTXlTZXNzaW9uMUJlYW4iKTsJCQotICAgICAgICAgICAgCisgICAgICAgICAgICBqYXZhLmxhbmcuT2JqZWN0IG9ianJlZiA9IGljLmxvb2t1cCgiZWpiL015U2Vzc2lvbjFCZWFuIik7CisKICAgICAgICAgICAgIE15U2Vzc2lvbjFSZW1vdGVIb21lIG15MXJoID0gKE15U2Vzc2lvbjFSZW1vdGVIb21lKQogICAgICAgICAgICAgICBQb3J0YWJsZVJlbW90ZU9iamVjdC5uYXJyb3cob2JqcmVmLCBNeVNlc3Npb24xUmVtb3RlSG9tZS5jbGFzcyk7CiAKLSAgICAgICAgICAgIG15MXIgPSBteTFyaC5jcmVhdGUoKTsgCi0gICAgICAgICAgICAKLQkgICAgIAlTdHJpbmcgcmV0VmFsdWUgPSBteTFyLmJ1c2luZXNzTWV0aG9kKCJibGFoIik7CisgICAgICAgICAgICBteTFyID0gbXkxcmguY3JlYXRlKCk7CisKKyAgICAgICAgICAgICBTdHJpbmcgcmV0VmFsdWUgPSBteTFyLmJ1c2luZXNzTWV0aG9kKCJibGFoIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInJldFZhbHVlPSIrcmV0VmFsdWUpOwogCiAgICAgICAgICAgICB0ZXN0U3RhdHVzID0gdHJ1ZTsKQEAgLTc1LDcgKzc1LDcgQEAKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgIGlmKCB0ZXN0U3RhdHVzKSAKKyAgICAgICAgICAgIGlmKCB0ZXN0U3RhdHVzKQogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsIHN0YXQuRkFJTCk7CkBAIC04Myw1ICs4Myw1IEBACiAgICAgICAgICAgICBzdGF0LnByaW50U3VtbWFyeSh0ZXN0SWQpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zdGFuZGFsb25lL2xvZ2luY3R4ZHJpdmVyL2Rlc2NyaXB0b3IvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zdGFuZGFsb25lL2xvZ2luY3R4ZHJpdmVyL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggZGZiMjBhMi4uODM1MDg3YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc3RhbmRhbG9uZS9sb2dpbmN0eGRyaXZlci9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3N0YW5kYWxvbmUvbG9naW5jdHhkcml2ZXIvZGVzY3JpcHRvci9lamItamFyLnhtbApAQCAtMzQsMTYgKzM0LDE2IEBACiAKIAogICAgICAgICA8c2VjdXJpdHktcm9sZT4KLSAgICAgICAJICAgIDxyb2xlLW5hbWU+c3RhZmY8L3JvbGUtbmFtZT4KKyAgICAgICAgICAgICAgIDxyb2xlLW5hbWU+c3RhZmY8L3JvbGUtbmFtZT4KICAgICAgICAgPC9zZWN1cml0eS1yb2xlPgogCiAgICAgICAgIDxtZXRob2QtcGVybWlzc2lvbj4KLQkgICAgIDxkZXNjcmlwdGlvbj5tZXRob2QgYXV0aG9yaXplZCB0byBvbmx5IHN0YWZmIHJvbGU8L2Rlc2NyaXB0aW9uPgorICAgICAgICAgPGRlc2NyaXB0aW9uPm1ldGhvZCBhdXRob3JpemVkIHRvIG9ubHkgc3RhZmYgcm9sZTwvZGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgPHJvbGUtbmFtZT5zdGFmZjwvcm9sZS1uYW1lPgogICAgICAgICAgICAgIDxtZXRob2Q+Ci0JICAgICAgICAgPGVqYi1uYW1lPk15U2Vzc2lvbjFCZWFuPC9lamItbmFtZT4KLQkgICAgICAgICA8bWV0aG9kLW5hbWU+YnVzaW5lc3NNZXRob2Q8L21ldGhvZC1uYW1lPgotCSAgICAgPC9tZXRob2Q+CisgICAgICAgICAgICAgPGVqYi1uYW1lPk15U2Vzc2lvbjFCZWFuPC9lamItbmFtZT4KKyAgICAgICAgICAgICA8bWV0aG9kLW5hbWU+YnVzaW5lc3NNZXRob2Q8L21ldGhvZC1uYW1lPgorICAgICAgICAgPC9tZXRob2Q+CiAgICAgICAgIDwvbWV0aG9kLXBlcm1pc3Npb24+CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc3RhbmRhbG9uZS9sb2dpbmN0eGRyaXZlci9lamIvTXlTZXNzaW9uMUJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3N0YW5kYWxvbmUvbG9naW5jdHhkcml2ZXIvZWpiL015U2Vzc2lvbjFCZWFuLmphdmEKaW5kZXggNTU2Y2FjZC4uODg5Y2FlZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc3RhbmRhbG9uZS9sb2dpbmN0eGRyaXZlci9lamIvTXlTZXNzaW9uMUJlYW4uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zdGFuZGFsb25lL2xvZ2luY3R4ZHJpdmVyL2VqYi9NeVNlc3Npb24xQmVhbi5qYXZhCkBAIC0yMSwzNiArMjEsMzYgQEAKICAqLwogcHVibGljIGNsYXNzIE15U2Vzc2lvbjFCZWFuIGltcGxlbWVudHMgU2Vzc2lvbkJlYW4sIE15U2Vzc2lvbjFSZW1vdGVCdXNpbmVzcyB7CiAgICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5TZXNzaW9uQmVhbiNzZXRTZXNzaW9uQ29udGV4dChqYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dCkKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBhQ29udGV4dCkgewogICAgICAgICBjb250ZXh0ID0gYUNvbnRleHQ7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5TZXNzaW9uQmVhbiNlamJBY3RpdmF0ZSgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQHNlZSBqYWthcnRhLmVqYi5TZXNzaW9uQmVhbiNlamJQYXNzaXZhdGUoKQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHsKLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBAc2VlIGpha2FydGEuZWpiLlNlc3Npb25CZWFuI2VqYlJlbW92ZSgpCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgewotICAgICAgICAKKwogICAgIH0KICAgICAvLyA8L2VkaXRvci1mb2xkPgotICAgIAorCiAgICAgLyoqCiAgICAgICogU2VlIHNlY3Rpb24gNy4xMC4zIG9mIHRoZSBFSkIgMi4wIHNwZWNpZmljYXRpb24KICAgICAgKiBTZWUgc2VjdGlvbiA3LjExLjMgb2YgdGhlIEVKQiAyLjEgc3BlY2lmaWNhdGlvbgpAQCAtNjEsOSArNjEsOSBAQAogICAgICAgICAvLyBzcGFubmluZyBhbGwgbWV0aG9kcyBjYW4gYmUgcGVyZm9ybWVkIGhlcmUgc3VjaCBhcyBob21lIGludGVyZmFjZXMKICAgICAgICAgLy8gYW5kIGRhdGEgc291cmNlcy4KICAgICB9Ci0gICAgCi0gICAgCi0gICAgCisKKworCiAgICAgcHVibGljIFN0cmluZyBidXNpbmVzc01ldGhvZChTdHJpbmcgbmFtZSkgewogICAgICAgICByZXR1cm4gImhlbGxvICIgKyBuYW1lOwogICAgIH0KQEAgLTc1LDcgKzc1LDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGJ1c2luZXNzTWV0aG9kMyhTdHJpbmcgbmFtZSkgewogICAgICAgICByZXR1cm4gImhvd2R5ICIrbmFtZTsKICAgICB9Ci0gICAgCi0gICAgCi0gICAgCisKKworCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zdGFuZGFsb25lL2xvZ2luY3R4ZHJpdmVyL2VqYi9NeVNlc3Npb24xUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zdGFuZGFsb25lL2xvZ2luY3R4ZHJpdmVyL2VqYi9NeVNlc3Npb24xUmVtb3RlLmphdmEKaW5kZXggNzk4ZDQwNi4uMGU5MWU1YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc3RhbmRhbG9uZS9sb2dpbmN0eGRyaXZlci9lamIvTXlTZXNzaW9uMVJlbW90ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3N0YW5kYWxvbmUvbG9naW5jdHhkcml2ZXIvZWpiL015U2Vzc2lvbjFSZW1vdGUuamF2YQpAQCAtMjEsNiArMjEsNiBAQAogICogVGhpcyBpcyB0aGUgcmVtb3RlIGludGVyZmFjZSBmb3IgTXlTZXNzaW9uMSBlbnRlcnByaXNlIGJlYW4uCiAgKi8KIHB1YmxpYyBpbnRlcmZhY2UgTXlTZXNzaW9uMVJlbW90ZSBleHRlbmRzIEVKQk9iamVjdCwgTXlTZXNzaW9uMVJlbW90ZUJ1c2luZXNzIHsKLSAgICAKLSAgICAKKworCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zdGFuZGFsb25lL2xvZ2luY3R4ZHJpdmVyL2VqYi9NeVNlc3Npb24xUmVtb3RlSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvc3RhbmRhbG9uZS9sb2dpbmN0eGRyaXZlci9lamIvTXlTZXNzaW9uMVJlbW90ZUhvbWUuamF2YQppbmRleCA3ZWJjOGYwLi43YzMzMDNmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS9zdGFuZGFsb25lL2xvZ2luY3R4ZHJpdmVyL2VqYi9NeVNlc3Npb24xUmVtb3RlSG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3N0YW5kYWxvbmUvbG9naW5jdHhkcml2ZXIvZWpiL015U2Vzc2lvbjFSZW1vdGVIb21lLmphdmEKQEAgLTIzLDggKzIzLDggQEAKICAqIFRoaXMgaXMgdGhlIGhvbWUgaW50ZXJmYWNlIGZvciBNeVNlc3Npb24xIGVudGVycHJpc2UgYmVhbi4KICAqLwogcHVibGljIGludGVyZmFjZSBNeVNlc3Npb24xUmVtb3RlSG9tZSBleHRlbmRzIEVKQkhvbWUgewotICAgIAorCiAgICAgTXlTZXNzaW9uMVJlbW90ZSBjcmVhdGUoKSAgdGhyb3dzIENyZWF0ZUV4Y2VwdGlvbiwgUmVtb3RlRXhjZXB0aW9uOwotICAgIAotICAgIAorCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3RpbWVyU3RhbmRhbG9uZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvdGltZXJTdGFuZGFsb25lL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMDEwYjc2MS4uYjMyZjQ1NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvdGltZXJTdGFuZGFsb25lL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvdGltZXJTdGFuZGFsb25lL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InNlY3VyaXR5LXRpbWVyU3RhbmRhbG9uZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3RpbWVyU3RhbmRhbG9uZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS90aW1lclN0YW5kYWxvbmUvYnVpbGQueG1sCmluZGV4IDY1Y2FhNTguLmY5NmY3ZTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3RpbWVyU3RhbmRhbG9uZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvdGltZXJTdGFuZGFsb25lL2J1aWxkLnhtbApAQCAtNjIsMTYgKzYyLDE2IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJlamItamFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovU2Z1bCouY2xhc3MsKiovU2xlc3MqLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhcHBjbGllbnQtamFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iKiovQ2xpZW50LmNsYXNzLCoqL1NmdWwuY2xhc3MsKiovU2xlc3MuY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJhcHBjbGllbnQuamFyPSR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KICAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIiB1cGRhdGU9InllcyI+Ci0gICAgICAgICAgICA8emlwZmlsZXNldCBzcmM9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiAKKyAgICAgICAgICAgIDx6aXBmaWxlc2V0IHNyYz0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICAgICAgICAgICAgICBleGNsdWRlcz0iTUVUQS1JTkYvKioiLz4KICAgICAgICAgPC9qYXI+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS90aW1lclN0YW5kYWxvbmUvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvdGltZXJTdGFuZGFsb25lL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBiMGMzNzI3Li41ZDdkMDE3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS90aW1lclN0YW5kYWxvbmUvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3RpbWVyU3RhbmRhbG9uZS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTIyLDcgKzIyLDcgQEAKIAogcHVibGljIGNsYXNzIENsaWVudCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IAorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTMxLDggKzMxLDggQEAKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoInNlY3VyaXR5LXRpbWVyU3RhbmRhbG9uZSIpOwotICAgIH0gIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyBDbGllbnQgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICB9CiAKQEAgLTc0LDcgKzc0LDcgQEAKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWwgbWFpbiIgLCBzdGF0LkZBSUwpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgIAlyZXR1cm47CisKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3RpbWVyU3RhbmRhbG9uZS9lamIvU2xlc3NFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3RpbWVyU3RhbmRhbG9uZS9lamIvU2xlc3NFSkIuamF2YQppbmRleCBlNmIwODAxLi44NTg4NWMzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS90aW1lclN0YW5kYWxvbmUvZWpiL1NsZXNzRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvdGltZXJTdGFuZGFsb25lL2VqYi9TbGVzc0VKQi5qYXZhCkBAIC00OSwxMSArNDksMTEgQEAKICAgICAgICAgcmV0dXJuIHRpbWVvdXRXYXNDYWxsZWQ7CiAgICAgfQogCi0gICAgQFRpbWVvdXQgCisgICAgQFRpbWVvdXQKICAgICBwcml2YXRlIHZvaWQgdGltZW91dChUaW1lciB0KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW4gU2xlc3NFSkI6dGltZW91dCIpOwogICAgICAgICBzYy5pc0NhbGxlckluUm9sZSgiZHVtbXkiKTsKICAgICAgICAgdGltZW91dFdhc0NhbGxlZCA9IHRydWU7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS91bmNvdmVyZWQtaHR0cC1tZXRob2RzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS91bmNvdmVyZWQtaHR0cC1tZXRob2RzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYmZmOTNiMC4uZjQyMzhhYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvdW5jb3ZlcmVkLWh0dHAtbWV0aG9kcy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3VuY292ZXJlZC1odHRwLW1ldGhvZHMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iVW5jb3ZlcmVkSFRUUE1ldGhvZHMiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS91bmNvdmVyZWQtaHR0cC1tZXRob2RzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3VuY292ZXJlZC1odHRwLW1ldGhvZHMvYnVpbGQueG1sCmluZGV4IDQ4ZWYzNTAuLjYwMWUxNTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3VuY292ZXJlZC1odHRwLW1ldGhvZHMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3VuY292ZXJlZC1odHRwLW1ldGhvZHMvYnVpbGQueG1sCkBAIC0yNSwxNCArMjUsMTQgQEAKIF0+CiAKIDxwcm9qZWN0IG5hbWU9InVuY292ZXJlZC1odHRwLW1ldGhvZHMiIGRlZmF1bHQ9InVzYWdlIiBiYXNlZGlyPSIuIj4KLSAgCisKICAgJmNvbW1vblNldHVwOwogICAmY29tbW9uQnVpbGQ7CiAgICZ0ZXN0cHJvcGVydGllczsKICAgJmNvbW1vblNlY3VyaXR5OwotICAKKwogICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iY2xlYW4sIHNldHVwLCBidWlsZCwgZGVwbG95LCBydW4sIHVuZGVwbG95LCB1bnNldHVwIi8+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS11c2VyLWNvbW1vbiI+CiAgICAgICA8cGFyYW0gbmFtZT0idXNlciIgdmFsdWU9InRlc3R1c2VyIi8+CkBAIC01MCwyMCArNTAsMjAgQEAKICAgICAgICAgPGFyZyB2YWx1ZT0iamF2YWVlIi8+CiAgICAgPC9qYXZhPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJ1bnNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtdXNlci1jb21tb24iPgogICAgICAgPHBhcmFtIG5hbWU9InVzZXIiIHZhbHVlPSJ0ZXN0dXNlciIvPgogICAgIDwvYW50Y2FsbD4KICAgPC90YXJnZXQ+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJ3ZWIiLz4KQEAgLTgwLDEwICs4MCwxMCBAQAogICAgICAgPHBhcmFtIG5hbWU9Indhci5maWxlIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9L2RlbnlVbmNvdmVyZWRTZXJ2bGV0VGVzdC13ZWIud2FyIi8+CiAgICAgPC9hbnRjYWxsPgogCi0gICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4gCi0gICAgPGNvcHkgZmlsZT0iJHthcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+IAotICAgIDxjb3B5IGZpbGU9IiR7Z2xhc3NmaXNoLWFwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvZ2xhc3NmaXNoLWFwcGxpY2F0aW9uLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+IAotICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIj4gCisgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KKyAgICA8Y29weSBmaWxlPSIke2FwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KKyAgICA8Y29weSBmaWxlPSIke2dsYXNzZmlzaC1hcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2dsYXNzZmlzaC1hcHBsaWNhdGlvbi54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIj4KICAgICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi53YXIiLz4KICAgICAgIDwvZmlsZXNldD4KQEAgLTkxLDEzICs5MSwxMyBAQAogICAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiLz4KICAgICAgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvZ2xhc3NmaXNoLWFwcGxpY2F0aW9uLnhtbCIvPgogICAgICAgPC9maWxlc2V0PgotICAgIDwvamFyPiAgIAorICAgIDwvamFyPgogCiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY2xpZW50Ii8+CiAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgPC90YXJnZXQ+CkBAIC0xMDUsNyArMTA1LDcgQEAKICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgogICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3VuY292ZXJlZC1odHRwLW1ldGhvZHMvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvdW5jb3ZlcmVkLWh0dHAtbWV0aG9kcy9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggOTIyMzkwNi4uNzg3ZTZiOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvdW5jb3ZlcmVkLWh0dHAtbWV0aG9kcy9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvdW5jb3ZlcmVkLWh0dHAtbWV0aG9kcy9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI0LDQxOSArMjQsNDE5IEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci5TaW1wbGVSZXBvcnRlckFkYXB0ZXI7CiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewotCXByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwotCXByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0U3VpdGUgPSAiU2VjdXJpdHk6OlVuY292ZXJlZEhUVFBNZXRob2RzIjsKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgY29udGV4dFBhdGhPcGVuID0gIi9vcGVuIjsKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgY29udGV4dFBhdGhEZW55ID0gIi9kZW55IjsKLQkKLQlwcml2YXRlIFN0cmluZyBob3N0OwotCXByaXZhdGUgU3RyaW5nIHBvcnQ7Ci0JcHJpdmF0ZSBTdHJpbmcgdXNlcm5hbWU7Ci0JcHJpdmF0ZSBTdHJpbmcgcGFzc3dvcmQ7CisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RTdWl0ZSA9ICJTZWN1cml0eTo6VW5jb3ZlcmVkSFRUUE1ldGhvZHMiOworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBjb250ZXh0UGF0aE9wZW4gPSAiL29wZW4iOworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBjb250ZXh0UGF0aERlbnkgPSAiL2RlbnkiOwogCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCQlzdGF0LmFkZERlc2NyaXB0aW9uKHRlc3RTdWl0ZSk7Ci0JCUNsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwotCQljbGllbnQuZG9UZXN0cygpOwotCQlzdGF0LnByaW50U3VtbWFyeSgpOwotCX0KKyAgICBwcml2YXRlIFN0cmluZyBob3N0OworICAgIHByaXZhdGUgU3RyaW5nIHBvcnQ7CisgICAgcHJpdmF0ZSBTdHJpbmcgdXNlcm5hbWU7CisgICAgcHJpdmF0ZSBTdHJpbmcgcGFzc3dvcmQ7CiAKLQlwdWJsaWMgQ2xpZW50KFN0cmluZ1tdIGFyZ3MpIHsKLQkJaG9zdCA9IGFyZ3NbMF07Ci0JCXBvcnQgPSBhcmdzWzFdOwotCQl1c2VybmFtZSA9IGFyZ3NbMl07Ci0JCXBhc3N3b3JkID0gYXJnc1szXTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCIgICAgICBIb3N0OiAiICsgaG9zdCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiICAgICAgUG9ydDogIiArIHBvcnQpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIiAgVXNlcm5hbWU6ICIgKyB1c2VybmFtZSk7Ci0JfQorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbih0ZXN0U3VpdGUpOworICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudChhcmdzKTsKKyAgICAgICAgY2xpZW50LmRvVGVzdHMoKTsKKyAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICB9CiAKLQlwdWJsaWMgdm9pZCBkb1Rlc3RzKCkgewotCQl0ZXN0RXhhbXBsZTEoKTsKLQkJdGVzdEV4YW1wbGUxUHV0KCk7Ci0JCXRlc3RFeGFtcGxlMigpOwotCQl0ZXN0RXhhbXBsZTJEZWxldGUoKTsKLQkJdGVzdEV4YW1wbGUzYSgpOwotCQl0ZXN0RXhhbXBsZTNhUHV0KCk7Ci0JCXRlc3RFeGFtcGxlM2JQb3N0KCk7Ci0JCXRlc3RFeGFtcGxlM2JEZWxldGUoKTsKLQkJdGVzdENvdmVyZWQxUG9zdCgpOwotCQl0ZXN0Q292ZXJlZDFQdXQoKTsKLQkJdGVzdENvdmVyZWQyKCk7Ci0JCXRlc3RDb3ZlcmVkMlB1dCgpOwotCQl0ZXN0Q292ZXJlZDNhUG9zdCgpOwotCQl0ZXN0Q292ZXJlZDNhRGVsZXRlKCk7Ci0JCXRlc3RDb3ZlcmVkM2IoKTsKLQkJdGVzdENvdmVyZWQzYlB1dCgpOwotCX0KKyAgICBwdWJsaWMgQ2xpZW50KFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgaG9zdCA9IGFyZ3NbMF07CisgICAgICAgIHBvcnQgPSBhcmdzWzFdOworICAgICAgICB1c2VybmFtZSA9IGFyZ3NbMl07CisgICAgICAgIHBhc3N3b3JkID0gYXJnc1szXTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgICAgICBIb3N0OiAiICsgaG9zdCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgICAgUG9ydDogIiArIHBvcnQpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgVXNlcm5hbWU6ICIgKyB1c2VybmFtZSk7CisgICAgfQogCi0JcHVibGljIHZvaWQgdGVzdEV4YW1wbGUxKCkgewotCQlTdHJpbmcgc2VydmxldCA9ICIvRXhhbXBsZTEiOwotCQlTdHJpbmcgZGVzY3JpcHRpb25PcGVuID0gY29udGV4dFBhdGhPcGVuK3NlcnZsZXQ7Ci0JCVN0cmluZyBkZXNjcmlwdGlvbkRlbnkgPSBjb250ZXh0UGF0aERlbnkrc2VydmxldDsKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3RzKCkgeworICAgICAgICB0ZXN0RXhhbXBsZTEoKTsKKyAgICAgICAgdGVzdEV4YW1wbGUxUHV0KCk7CisgICAgICAgIHRlc3RFeGFtcGxlMigpOworICAgICAgICB0ZXN0RXhhbXBsZTJEZWxldGUoKTsKKyAgICAgICAgdGVzdEV4YW1wbGUzYSgpOworICAgICAgICB0ZXN0RXhhbXBsZTNhUHV0KCk7CisgICAgICAgIHRlc3RFeGFtcGxlM2JQb3N0KCk7CisgICAgICAgIHRlc3RFeGFtcGxlM2JEZWxldGUoKTsKKyAgICAgICAgdGVzdENvdmVyZWQxUG9zdCgpOworICAgICAgICB0ZXN0Q292ZXJlZDFQdXQoKTsKKyAgICAgICAgdGVzdENvdmVyZWQyKCk7CisgICAgICAgIHRlc3RDb3ZlcmVkMlB1dCgpOworICAgICAgICB0ZXN0Q292ZXJlZDNhUG9zdCgpOworICAgICAgICB0ZXN0Q292ZXJlZDNhRGVsZXRlKCk7CisgICAgICAgIHRlc3RDb3ZlcmVkM2IoKTsKKyAgICAgICAgdGVzdENvdmVyZWQzYlB1dCgpOworICAgIH0KIAotCQlTdHJpbmdCdWZmZXIgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlib29sZWFuIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIG51bGwsIDMwMiwgdXNlcm5hbWUsIGNvbnRleHRQYXRoT3Blbiwgb3V0cHV0KTsKLQkJaW50IGluZGV4ID0gb3V0cHV0LmluZGV4T2YoImh0dHBzOi8vIik7Ci0JCWlmIChzdWNjZXNzICYmIChpbmRleCAhPSAtMSkpIHsKLQkJCXN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uT3Blbiwgc3RhdC5QQVNTKTsKLQkJfQotCQllbHNlIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uT3Blbiwgc3RhdC5GQUlMKTsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0RXhhbXBsZTEoKSB7CisgICAgICAgIFN0cmluZyBzZXJ2bGV0ID0gIi9FeGFtcGxlMSI7CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbk9wZW4gPSBjb250ZXh0UGF0aE9wZW4rc2VydmxldDsKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uRGVueSA9IGNvbnRleHRQYXRoRGVueStzZXJ2bGV0OwogCi0JCW91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgbnVsbCwgMzAyLCB1c2VybmFtZSwgY29udGV4dFBhdGhEZW55LCBvdXRwdXQpOwotCQlpZiAoc3VjY2Vzcykgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25EZW55LCBzdGF0LlBBU1MpOwotCQllbHNlIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uRGVueSwgc3RhdC5GQUlMKTsKLQl9CisgICAgICAgIFN0cmluZ0J1ZmZlciBvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIGJvb2xlYW4gc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgbnVsbCwgMzAyLCB1c2VybmFtZSwgY29udGV4dFBhdGhPcGVuLCBvdXRwdXQpOworICAgICAgICBpbnQgaW5kZXggPSBvdXRwdXQuaW5kZXhPZigiaHR0cHM6Ly8iKTsKKyAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGluZGV4ICE9IC0xKSkgeworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25PcGVuLCBzdGF0LlBBU1MpOworICAgICAgICB9CisgICAgICAgIGVsc2Ugc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25PcGVuLCBzdGF0LkZBSUwpOwogCi0JcHVibGljIHZvaWQgdGVzdEV4YW1wbGUxUHV0KCkgewotCQlTdHJpbmcgc2VydmxldCA9ICIvRXhhbXBsZTEiOwotCQlTdHJpbmcgbWV0aG9kID0gIlBVVCI7Ci0JCVN0cmluZyBkZXNjcmlwdGlvbk9wZW4gPSBjb250ZXh0UGF0aE9wZW4rc2VydmxldCsiLSIrbWV0aG9kOwotCQlTdHJpbmcgZGVzY3JpcHRpb25EZW55ID0gY29udGV4dFBhdGhEZW55K3NlcnZsZXQrIi0iK21ldGhvZDsKKyAgICAgICAgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCBudWxsLCAzMDIsIHVzZXJuYW1lLCBjb250ZXh0UGF0aERlbnksIG91dHB1dCk7CisgICAgICAgIGlmIChzdWNjZXNzKSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbkRlbnksIHN0YXQuUEFTUyk7CisgICAgICAgIGVsc2Ugc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25EZW55LCBzdGF0LkZBSUwpOworICAgIH0KIAotCQlTdHJpbmdCdWZmZXIgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlib29sZWFuIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIG1ldGhvZCwgMjAwLCB1c2VybmFtZSwgY29udGV4dFBhdGhPcGVuLCBvdXRwdXQpOwotCQlpZiAoc3VjY2VzcykgewotCQkJc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25PcGVuLCBzdGF0LlBBU1MpOwotCQl9Ci0JCWVsc2Ugc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25PcGVuLCBzdGF0LkZBSUwpOworICAgIHB1YmxpYyB2b2lkIHRlc3RFeGFtcGxlMVB1dCgpIHsKKyAgICAgICAgU3RyaW5nIHNlcnZsZXQgPSAiL0V4YW1wbGUxIjsKKyAgICAgICAgU3RyaW5nIG1ldGhvZCA9ICJQVVQiOworICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb25PcGVuID0gY29udGV4dFBhdGhPcGVuK3NlcnZsZXQrIi0iK21ldGhvZDsKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uRGVueSA9IGNvbnRleHRQYXRoRGVueStzZXJ2bGV0KyItIittZXRob2Q7CiAKLQkJb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCBtZXRob2QsIDQwMywgdXNlcm5hbWUsIGNvbnRleHRQYXRoRGVueSwgb3V0cHV0KTsKLQkJaWYgKHN1Y2Nlc3MpIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uRGVueSwgc3RhdC5QQVNTKTsKLQkJZWxzZSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbkRlbnksIHN0YXQuRkFJTCk7Ci0JfQorICAgICAgICBTdHJpbmdCdWZmZXIgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBib29sZWFuIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIG1ldGhvZCwgMjAwLCB1c2VybmFtZSwgY29udGV4dFBhdGhPcGVuLCBvdXRwdXQpOworICAgICAgICBpZiAoc3VjY2VzcykgeworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25PcGVuLCBzdGF0LlBBU1MpOworICAgICAgICB9CisgICAgICAgIGVsc2Ugc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25PcGVuLCBzdGF0LkZBSUwpOwogCi0JcHVibGljIHZvaWQgdGVzdEV4YW1wbGUyKCkgewotCQlTdHJpbmcgc2VydmxldCA9ICIvRXhhbXBsZTIiOwotCQlTdHJpbmcgZGVzY3JpcHRpb25PcGVuID0gY29udGV4dFBhdGhPcGVuK3NlcnZsZXQ7Ci0JCVN0cmluZyBkZXNjcmlwdGlvbkRlbnkgPSBjb250ZXh0UGF0aERlbnkrc2VydmxldDsKKyAgICAgICAgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCBtZXRob2QsIDQwMywgdXNlcm5hbWUsIGNvbnRleHRQYXRoRGVueSwgb3V0cHV0KTsKKyAgICAgICAgaWYgKHN1Y2Nlc3MpIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uRGVueSwgc3RhdC5QQVNTKTsKKyAgICAgICAgZWxzZSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbkRlbnksIHN0YXQuRkFJTCk7CisgICAgfQogCi0JCVN0cmluZ0J1ZmZlciBvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWJvb2xlYW4gc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgbnVsbCwgMjAwLCB1c2VybmFtZSwgY29udGV4dFBhdGhPcGVuLCBvdXRwdXQpOwotCQlpZiAoc3VjY2VzcykgewotCQkJc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25PcGVuLCBzdGF0LlBBU1MpOwotCQl9Ci0JCWVsc2Ugc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25PcGVuLCBzdGF0LkZBSUwpOworICAgIHB1YmxpYyB2b2lkIHRlc3RFeGFtcGxlMigpIHsKKyAgICAgICAgU3RyaW5nIHNlcnZsZXQgPSAiL0V4YW1wbGUyIjsKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uT3BlbiA9IGNvbnRleHRQYXRoT3BlbitzZXJ2bGV0OworICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb25EZW55ID0gY29udGV4dFBhdGhEZW55K3NlcnZsZXQ7CiAKLQkJb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCBudWxsLCA0MDMsIHVzZXJuYW1lLCBjb250ZXh0UGF0aERlbnksIG91dHB1dCk7Ci0JCWlmIChzdWNjZXNzKSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbkRlbnksIHN0YXQuUEFTUyk7Ci0JCWVsc2Ugc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25EZW55LCBzdGF0LkZBSUwpOwotCX0KKyAgICAgICAgU3RyaW5nQnVmZmVyIG91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgYm9vbGVhbiBzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCBudWxsLCAyMDAsIHVzZXJuYW1lLCBjb250ZXh0UGF0aE9wZW4sIG91dHB1dCk7CisgICAgICAgIGlmIChzdWNjZXNzKSB7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbk9wZW4sIHN0YXQuUEFTUyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbk9wZW4sIHN0YXQuRkFJTCk7CiAKLQlwdWJsaWMgdm9pZCB0ZXN0RXhhbXBsZTJEZWxldGUoKSB7Ci0JCVN0cmluZyBzZXJ2bGV0ID0gIi9FeGFtcGxlMiI7Ci0JCVN0cmluZyBtZXRob2QgPSAiREVMRVRFIjsKLQkJU3RyaW5nIGRlc2NyaXB0aW9uT3BlbiA9IGNvbnRleHRQYXRoT3BlbitzZXJ2bGV0KyItIittZXRob2Q7Ci0JCVN0cmluZyBkZXNjcmlwdGlvbkRlbnkgPSBjb250ZXh0UGF0aERlbnkrc2VydmxldCsiLSIrbWV0aG9kOworICAgICAgICBvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIG51bGwsIDQwMywgdXNlcm5hbWUsIGNvbnRleHRQYXRoRGVueSwgb3V0cHV0KTsKKyAgICAgICAgaWYgKHN1Y2Nlc3MpIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uRGVueSwgc3RhdC5QQVNTKTsKKyAgICAgICAgZWxzZSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbkRlbnksIHN0YXQuRkFJTCk7CisgICAgfQogCi0JCVN0cmluZ0J1ZmZlciBvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWJvb2xlYW4gc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgbWV0aG9kLCA0MDMsIHVzZXJuYW1lLCBjb250ZXh0UGF0aE9wZW4sIG91dHB1dCk7Ci0JCWlmIChzdWNjZXNzKSB7Ci0JCQlzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbk9wZW4sIHN0YXQuUEFTUyk7Ci0JCX0KLQkJZWxzZSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbk9wZW4sIHN0YXQuRkFJTCk7CisgICAgcHVibGljIHZvaWQgdGVzdEV4YW1wbGUyRGVsZXRlKCkgeworICAgICAgICBTdHJpbmcgc2VydmxldCA9ICIvRXhhbXBsZTIiOworICAgICAgICBTdHJpbmcgbWV0aG9kID0gIkRFTEVURSI7CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbk9wZW4gPSBjb250ZXh0UGF0aE9wZW4rc2VydmxldCsiLSIrbWV0aG9kOworICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb25EZW55ID0gY29udGV4dFBhdGhEZW55K3NlcnZsZXQrIi0iK21ldGhvZDsKIAotCQlvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCXN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIG1ldGhvZCwgNDAzLCB1c2VybmFtZSwgY29udGV4dFBhdGhEZW55LCBvdXRwdXQpOwotCQlpZiAoc3VjY2Vzcykgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25EZW55LCBzdGF0LlBBU1MpOwotCQllbHNlIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uRGVueSwgc3RhdC5GQUlMKTsKLQl9CisgICAgICAgIFN0cmluZ0J1ZmZlciBvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIGJvb2xlYW4gc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgbWV0aG9kLCA0MDMsIHVzZXJuYW1lLCBjb250ZXh0UGF0aE9wZW4sIG91dHB1dCk7CisgICAgICAgIGlmIChzdWNjZXNzKSB7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbk9wZW4sIHN0YXQuUEFTUyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbk9wZW4sIHN0YXQuRkFJTCk7CiAKLQlwdWJsaWMgdm9pZCB0ZXN0RXhhbXBsZTNhKCkgewotCQlTdHJpbmcgc2VydmxldCA9ICIvRXhhbXBsZTNhIjsKLQkJU3RyaW5nIGRlc2NyaXB0aW9uT3BlbiA9IGNvbnRleHRQYXRoT3BlbitzZXJ2bGV0OwotCQlTdHJpbmcgZGVzY3JpcHRpb25EZW55ID0gY29udGV4dFBhdGhEZW55K3NlcnZsZXQ7CisgICAgICAgIG91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgbWV0aG9kLCA0MDMsIHVzZXJuYW1lLCBjb250ZXh0UGF0aERlbnksIG91dHB1dCk7CisgICAgICAgIGlmIChzdWNjZXNzKSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbkRlbnksIHN0YXQuUEFTUyk7CisgICAgICAgIGVsc2Ugc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25EZW55LCBzdGF0LkZBSUwpOworICAgIH0KIAotCQlTdHJpbmdCdWZmZXIgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlib29sZWFuIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIG51bGwsIDIwMCwgdXNlcm5hbWUsIGNvbnRleHRQYXRoT3Blbiwgb3V0cHV0KTsKLQkJaWYgKHN1Y2Nlc3MpIHsKLQkJCXN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uT3Blbiwgc3RhdC5QQVNTKTsKLQkJfQotCQllbHNlIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uT3Blbiwgc3RhdC5GQUlMKTsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0RXhhbXBsZTNhKCkgeworICAgICAgICBTdHJpbmcgc2VydmxldCA9ICIvRXhhbXBsZTNhIjsKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uT3BlbiA9IGNvbnRleHRQYXRoT3BlbitzZXJ2bGV0OworICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb25EZW55ID0gY29udGV4dFBhdGhEZW55K3NlcnZsZXQ7CiAKLQkJb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCBudWxsLCAyMDAsIHVzZXJuYW1lLCBjb250ZXh0UGF0aERlbnksIG91dHB1dCk7Ci0JCWlmIChzdWNjZXNzKSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbkRlbnksIHN0YXQuUEFTUyk7Ci0JCWVsc2Ugc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25EZW55LCBzdGF0LkZBSUwpOwotCX0KKyAgICAgICAgU3RyaW5nQnVmZmVyIG91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgYm9vbGVhbiBzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCBudWxsLCAyMDAsIHVzZXJuYW1lLCBjb250ZXh0UGF0aE9wZW4sIG91dHB1dCk7CisgICAgICAgIGlmIChzdWNjZXNzKSB7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbk9wZW4sIHN0YXQuUEFTUyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbk9wZW4sIHN0YXQuRkFJTCk7CiAKLQlwdWJsaWMgdm9pZCB0ZXN0RXhhbXBsZTNhUHV0KCkgewotCQlTdHJpbmcgc2VydmxldCA9ICIvRXhhbXBsZTNhIjsKLQkJU3RyaW5nIG1ldGhvZCA9ICJQVVQiOwotCQlTdHJpbmcgZGVzY3JpcHRpb25PcGVuID0gY29udGV4dFBhdGhPcGVuK3NlcnZsZXQrIi0iK21ldGhvZDsKLQkJU3RyaW5nIGRlc2NyaXB0aW9uRGVueSA9IGNvbnRleHRQYXRoRGVueStzZXJ2bGV0KyItIittZXRob2Q7CisgICAgICAgIG91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgbnVsbCwgMjAwLCB1c2VybmFtZSwgY29udGV4dFBhdGhEZW55LCBvdXRwdXQpOworICAgICAgICBpZiAoc3VjY2Vzcykgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25EZW55LCBzdGF0LlBBU1MpOworICAgICAgICBlbHNlIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uRGVueSwgc3RhdC5GQUlMKTsKKyAgICB9CiAKLQkJU3RyaW5nQnVmZmVyIG91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJYm9vbGVhbiBzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCBtZXRob2QsIDIwMCwgdXNlcm5hbWUsIGNvbnRleHRQYXRoT3Blbiwgb3V0cHV0KTsKLQkJaWYgKHN1Y2Nlc3MpIHsKLQkJCXN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uT3Blbiwgc3RhdC5QQVNTKTsKLQkJfQotCQllbHNlIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uT3Blbiwgc3RhdC5GQUlMKTsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0RXhhbXBsZTNhUHV0KCkgeworICAgICAgICBTdHJpbmcgc2VydmxldCA9ICIvRXhhbXBsZTNhIjsKKyAgICAgICAgU3RyaW5nIG1ldGhvZCA9ICJQVVQiOworICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb25PcGVuID0gY29udGV4dFBhdGhPcGVuK3NlcnZsZXQrIi0iK21ldGhvZDsKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uRGVueSA9IGNvbnRleHRQYXRoRGVueStzZXJ2bGV0KyItIittZXRob2Q7CiAKLQkJb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCBtZXRob2QsIDQwMywgdXNlcm5hbWUsIGNvbnRleHRQYXRoRGVueSwgb3V0cHV0KTsKLQkJaWYgKHN1Y2Nlc3MpIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uRGVueSwgc3RhdC5QQVNTKTsKLQkJZWxzZSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbkRlbnksIHN0YXQuRkFJTCk7Ci0JfQorICAgICAgICBTdHJpbmdCdWZmZXIgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBib29sZWFuIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIG1ldGhvZCwgMjAwLCB1c2VybmFtZSwgY29udGV4dFBhdGhPcGVuLCBvdXRwdXQpOworICAgICAgICBpZiAoc3VjY2VzcykgeworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25PcGVuLCBzdGF0LlBBU1MpOworICAgICAgICB9CisgICAgICAgIGVsc2Ugc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25PcGVuLCBzdGF0LkZBSUwpOwogCi0JcHVibGljIHZvaWQgdGVzdEV4YW1wbGUzYlBvc3QoKSB7Ci0JCVN0cmluZyBzZXJ2bGV0ID0gIi9FeGFtcGxlM2IiOwotCQlTdHJpbmcgbWV0aG9kID0gIlBPU1QiOwotCQlTdHJpbmcgZGVzY3JpcHRpb25PcGVuID0gY29udGV4dFBhdGhPcGVuK3NlcnZsZXQrIi0iK21ldGhvZDsKLQkJU3RyaW5nIGRlc2NyaXB0aW9uRGVueSA9IGNvbnRleHRQYXRoRGVueStzZXJ2bGV0KyItIittZXRob2Q7CisgICAgICAgIG91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgbWV0aG9kLCA0MDMsIHVzZXJuYW1lLCBjb250ZXh0UGF0aERlbnksIG91dHB1dCk7CisgICAgICAgIGlmIChzdWNjZXNzKSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbkRlbnksIHN0YXQuUEFTUyk7CisgICAgICAgIGVsc2Ugc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25EZW55LCBzdGF0LkZBSUwpOworICAgIH0KIAotCQlTdHJpbmdCdWZmZXIgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlib29sZWFuIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIG1ldGhvZCwgMjAwLCB1c2VybmFtZSwgY29udGV4dFBhdGhPcGVuLCBvdXRwdXQpOwotCQlpZiAoc3VjY2VzcykgewotCQkJc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25PcGVuLCBzdGF0LlBBU1MpOwotCQl9Ci0JCWVsc2Ugc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25PcGVuLCBzdGF0LkZBSUwpOworICAgIHB1YmxpYyB2b2lkIHRlc3RFeGFtcGxlM2JQb3N0KCkgeworICAgICAgICBTdHJpbmcgc2VydmxldCA9ICIvRXhhbXBsZTNiIjsKKyAgICAgICAgU3RyaW5nIG1ldGhvZCA9ICJQT1NUIjsKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uT3BlbiA9IGNvbnRleHRQYXRoT3BlbitzZXJ2bGV0KyItIittZXRob2Q7CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbkRlbnkgPSBjb250ZXh0UGF0aERlbnkrc2VydmxldCsiLSIrbWV0aG9kOwogCi0JCW91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgbWV0aG9kLCAyMDAsIHVzZXJuYW1lLCBjb250ZXh0UGF0aERlbnksIG91dHB1dCk7Ci0JCWlmIChzdWNjZXNzKSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbkRlbnksIHN0YXQuUEFTUyk7Ci0JCWVsc2Ugc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25EZW55LCBzdGF0LkZBSUwpOwotCX0KKyAgICAgICAgU3RyaW5nQnVmZmVyIG91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgYm9vbGVhbiBzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCBtZXRob2QsIDIwMCwgdXNlcm5hbWUsIGNvbnRleHRQYXRoT3Blbiwgb3V0cHV0KTsKKyAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uT3Blbiwgc3RhdC5QQVNTKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uT3Blbiwgc3RhdC5GQUlMKTsKIAotCXB1YmxpYyB2b2lkIHRlc3RFeGFtcGxlM2JEZWxldGUoKSB7Ci0JCVN0cmluZyBzZXJ2bGV0ID0gIi9FeGFtcGxlM2IiOwotCQlTdHJpbmcgbWV0aG9kID0gIkRFTEVURSI7Ci0JCVN0cmluZyBkZXNjcmlwdGlvbk9wZW4gPSBjb250ZXh0UGF0aE9wZW4rc2VydmxldCsiLSIrbWV0aG9kOwotCQlTdHJpbmcgZGVzY3JpcHRpb25EZW55ID0gY29udGV4dFBhdGhEZW55K3NlcnZsZXQrIi0iK21ldGhvZDsKKyAgICAgICAgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCBtZXRob2QsIDIwMCwgdXNlcm5hbWUsIGNvbnRleHRQYXRoRGVueSwgb3V0cHV0KTsKKyAgICAgICAgaWYgKHN1Y2Nlc3MpIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uRGVueSwgc3RhdC5QQVNTKTsKKyAgICAgICAgZWxzZSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbkRlbnksIHN0YXQuRkFJTCk7CisgICAgfQogCi0JCVN0cmluZ0J1ZmZlciBvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWJvb2xlYW4gc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgbWV0aG9kLCAyMDAsIHVzZXJuYW1lLCBjb250ZXh0UGF0aE9wZW4sIG91dHB1dCk7Ci0JCWlmIChzdWNjZXNzKSB7Ci0JCQlzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbk9wZW4sIHN0YXQuUEFTUyk7Ci0JCX0KLQkJZWxzZSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbk9wZW4sIHN0YXQuRkFJTCk7CisgICAgcHVibGljIHZvaWQgdGVzdEV4YW1wbGUzYkRlbGV0ZSgpIHsKKyAgICAgICAgU3RyaW5nIHNlcnZsZXQgPSAiL0V4YW1wbGUzYiI7CisgICAgICAgIFN0cmluZyBtZXRob2QgPSAiREVMRVRFIjsKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uT3BlbiA9IGNvbnRleHRQYXRoT3BlbitzZXJ2bGV0KyItIittZXRob2Q7CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbkRlbnkgPSBjb250ZXh0UGF0aERlbnkrc2VydmxldCsiLSIrbWV0aG9kOwogCi0JCW91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgbWV0aG9kLCA0MDMsIHVzZXJuYW1lLCBjb250ZXh0UGF0aERlbnksIG91dHB1dCk7Ci0JCWlmIChzdWNjZXNzKSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbkRlbnksIHN0YXQuUEFTUyk7Ci0JCWVsc2Ugc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25EZW55LCBzdGF0LkZBSUwpOwotCX0KKyAgICAgICAgU3RyaW5nQnVmZmVyIG91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgYm9vbGVhbiBzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCBtZXRob2QsIDIwMCwgdXNlcm5hbWUsIGNvbnRleHRQYXRoT3Blbiwgb3V0cHV0KTsKKyAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uT3Blbiwgc3RhdC5QQVNTKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uT3Blbiwgc3RhdC5GQUlMKTsKIAotCXB1YmxpYyB2b2lkIHRlc3RDb3ZlcmVkMVBvc3QoKSB7Ci0JCVN0cmluZyBzZXJ2bGV0ID0gIi9Db3ZlcmVkMSI7Ci0JCVN0cmluZyBtZXRob2QgPSAiUE9TVCI7Ci0JCVN0cmluZyBkZXNjcmlwdGlvbk9wZW4gPSBjb250ZXh0UGF0aE9wZW4rc2VydmxldCsiLSIrbWV0aG9kOwotCQlTdHJpbmcgZGVzY3JpcHRpb25EZW55ID0gY29udGV4dFBhdGhEZW55K3NlcnZsZXQrIi0iK21ldGhvZDsKKyAgICAgICAgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCBtZXRob2QsIDQwMywgdXNlcm5hbWUsIGNvbnRleHRQYXRoRGVueSwgb3V0cHV0KTsKKyAgICAgICAgaWYgKHN1Y2Nlc3MpIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uRGVueSwgc3RhdC5QQVNTKTsKKyAgICAgICAgZWxzZSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbkRlbnksIHN0YXQuRkFJTCk7CisgICAgfQogCi0JCVN0cmluZ0J1ZmZlciBvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWJvb2xlYW4gc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgbWV0aG9kLCAzMDIsIHVzZXJuYW1lLCBjb250ZXh0UGF0aE9wZW4sIG91dHB1dCk7Ci0JCWludCBpbmRleCA9IG91dHB1dC5pbmRleE9mKCJodHRwczovLyIpOwotCQlpZiAoc3VjY2VzcyAmJiAoaW5kZXggIT0gLTEpKSB7Ci0JCQlzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbk9wZW4sIHN0YXQuUEFTUyk7Ci0JCX0KLQkJZWxzZSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbk9wZW4sIHN0YXQuRkFJTCk7CisgICAgcHVibGljIHZvaWQgdGVzdENvdmVyZWQxUG9zdCgpIHsKKyAgICAgICAgU3RyaW5nIHNlcnZsZXQgPSAiL0NvdmVyZWQxIjsKKyAgICAgICAgU3RyaW5nIG1ldGhvZCA9ICJQT1NUIjsKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uT3BlbiA9IGNvbnRleHRQYXRoT3BlbitzZXJ2bGV0KyItIittZXRob2Q7CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbkRlbnkgPSBjb250ZXh0UGF0aERlbnkrc2VydmxldCsiLSIrbWV0aG9kOwogCi0JCW91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgbWV0aG9kLCAzMDIsIHVzZXJuYW1lLCBjb250ZXh0UGF0aERlbnksIG91dHB1dCk7Ci0JCWlmIChzdWNjZXNzKSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbkRlbnksIHN0YXQuUEFTUyk7Ci0JCWVsc2Ugc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25EZW55LCBzdGF0LkZBSUwpOwotCX0KKyAgICAgICAgU3RyaW5nQnVmZmVyIG91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgYm9vbGVhbiBzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCBtZXRob2QsIDMwMiwgdXNlcm5hbWUsIGNvbnRleHRQYXRoT3Blbiwgb3V0cHV0KTsKKyAgICAgICAgaW50IGluZGV4ID0gb3V0cHV0LmluZGV4T2YoImh0dHBzOi8vIik7CisgICAgICAgIGlmIChzdWNjZXNzICYmIChpbmRleCAhPSAtMSkpIHsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uT3Blbiwgc3RhdC5QQVNTKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uT3Blbiwgc3RhdC5GQUlMKTsKIAotCXB1YmxpYyB2b2lkIHRlc3RDb3ZlcmVkMVB1dCgpIHsKLQkJU3RyaW5nIHNlcnZsZXQgPSAiL0NvdmVyZWQxIjsKLQkJU3RyaW5nIG1ldGhvZCA9ICJQVVQiOwotCQlTdHJpbmcgZGVzY3JpcHRpb25PcGVuID0gY29udGV4dFBhdGhPcGVuK3NlcnZsZXQrIi0iK21ldGhvZDsKLQkJU3RyaW5nIGRlc2NyaXB0aW9uRGVueSA9IGNvbnRleHRQYXRoRGVueStzZXJ2bGV0KyItIittZXRob2Q7CisgICAgICAgIG91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgbWV0aG9kLCAzMDIsIHVzZXJuYW1lLCBjb250ZXh0UGF0aERlbnksIG91dHB1dCk7CisgICAgICAgIGlmIChzdWNjZXNzKSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbkRlbnksIHN0YXQuUEFTUyk7CisgICAgICAgIGVsc2Ugc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25EZW55LCBzdGF0LkZBSUwpOworICAgIH0KIAotCQlTdHJpbmdCdWZmZXIgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlib29sZWFuIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIG1ldGhvZCwgMzAyLCB1c2VybmFtZSwgY29udGV4dFBhdGhPcGVuLCBvdXRwdXQpOwotCQlpbnQgaW5kZXggPSBvdXRwdXQuaW5kZXhPZigiaHR0cHM6Ly8iKTsKLQkJaWYgKHN1Y2Nlc3MgJiYgKGluZGV4ICE9IC0xKSkgewotCQkJc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25PcGVuLCBzdGF0LlBBU1MpOwotCQl9Ci0JCWVsc2Ugc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25PcGVuLCBzdGF0LkZBSUwpOworICAgIHB1YmxpYyB2b2lkIHRlc3RDb3ZlcmVkMVB1dCgpIHsKKyAgICAgICAgU3RyaW5nIHNlcnZsZXQgPSAiL0NvdmVyZWQxIjsKKyAgICAgICAgU3RyaW5nIG1ldGhvZCA9ICJQVVQiOworICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb25PcGVuID0gY29udGV4dFBhdGhPcGVuK3NlcnZsZXQrIi0iK21ldGhvZDsKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uRGVueSA9IGNvbnRleHRQYXRoRGVueStzZXJ2bGV0KyItIittZXRob2Q7CiAKLQkJb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCBtZXRob2QsIDMwMiwgdXNlcm5hbWUsIGNvbnRleHRQYXRoRGVueSwgb3V0cHV0KTsKLQkJaWYgKHN1Y2Nlc3MpIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uRGVueSwgc3RhdC5QQVNTKTsKLQkJZWxzZSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbkRlbnksIHN0YXQuRkFJTCk7Ci0JfQorICAgICAgICBTdHJpbmdCdWZmZXIgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBib29sZWFuIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIG1ldGhvZCwgMzAyLCB1c2VybmFtZSwgY29udGV4dFBhdGhPcGVuLCBvdXRwdXQpOworICAgICAgICBpbnQgaW5kZXggPSBvdXRwdXQuaW5kZXhPZigiaHR0cHM6Ly8iKTsKKyAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGluZGV4ICE9IC0xKSkgeworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25PcGVuLCBzdGF0LlBBU1MpOworICAgICAgICB9CisgICAgICAgIGVsc2Ugc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25PcGVuLCBzdGF0LkZBSUwpOwogCi0JcHVibGljIHZvaWQgdGVzdENvdmVyZWQyKCkgewotCQlTdHJpbmcgc2VydmxldCA9ICIvQ292ZXJlZDIiOwotCQlTdHJpbmcgZGVzY3JpcHRpb25PcGVuID0gY29udGV4dFBhdGhPcGVuK3NlcnZsZXQ7Ci0JCVN0cmluZyBkZXNjcmlwdGlvbkRlbnkgPSBjb250ZXh0UGF0aERlbnkrc2VydmxldDsKKyAgICAgICAgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCBtZXRob2QsIDMwMiwgdXNlcm5hbWUsIGNvbnRleHRQYXRoRGVueSwgb3V0cHV0KTsKKyAgICAgICAgaWYgKHN1Y2Nlc3MpIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uRGVueSwgc3RhdC5QQVNTKTsKKyAgICAgICAgZWxzZSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbkRlbnksIHN0YXQuRkFJTCk7CisgICAgfQogCi0JCVN0cmluZ0J1ZmZlciBvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWJvb2xlYW4gc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgbnVsbCwgMzAyLCB1c2VybmFtZSwgY29udGV4dFBhdGhPcGVuLCBvdXRwdXQpOwotCQlpbnQgaW5kZXggPSBvdXRwdXQuaW5kZXhPZigiaHR0cHM6Ly8iKTsKLQkJaWYgKHN1Y2Nlc3MgJiYgKGluZGV4ICE9IC0xKSkgewotCQkJc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25PcGVuLCBzdGF0LlBBU1MpOwotCQl9Ci0JCWVsc2Ugc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25PcGVuLCBzdGF0LkZBSUwpOworICAgIHB1YmxpYyB2b2lkIHRlc3RDb3ZlcmVkMigpIHsKKyAgICAgICAgU3RyaW5nIHNlcnZsZXQgPSAiL0NvdmVyZWQyIjsKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uT3BlbiA9IGNvbnRleHRQYXRoT3BlbitzZXJ2bGV0OworICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb25EZW55ID0gY29udGV4dFBhdGhEZW55K3NlcnZsZXQ7CiAKLQkJb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCBudWxsLCAzMDIsIHVzZXJuYW1lLCBjb250ZXh0UGF0aERlbnksIG91dHB1dCk7Ci0JCWlmIChzdWNjZXNzKSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbkRlbnksIHN0YXQuUEFTUyk7Ci0JCWVsc2Ugc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25EZW55LCBzdGF0LkZBSUwpOwotCX0KKyAgICAgICAgU3RyaW5nQnVmZmVyIG91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgYm9vbGVhbiBzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCBudWxsLCAzMDIsIHVzZXJuYW1lLCBjb250ZXh0UGF0aE9wZW4sIG91dHB1dCk7CisgICAgICAgIGludCBpbmRleCA9IG91dHB1dC5pbmRleE9mKCJodHRwczovLyIpOworICAgICAgICBpZiAoc3VjY2VzcyAmJiAoaW5kZXggIT0gLTEpKSB7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbk9wZW4sIHN0YXQuUEFTUyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbk9wZW4sIHN0YXQuRkFJTCk7CiAKLQlwdWJsaWMgdm9pZCB0ZXN0Q292ZXJlZDJQdXQoKSB7Ci0JCVN0cmluZyBzZXJ2bGV0ID0gIi9Db3ZlcmVkMiI7Ci0JCVN0cmluZyBtZXRob2QgPSAiUFVUIjsKLQkJU3RyaW5nIGRlc2NyaXB0aW9uT3BlbiA9IGNvbnRleHRQYXRoT3BlbitzZXJ2bGV0KyItIittZXRob2Q7Ci0JCVN0cmluZyBkZXNjcmlwdGlvbkRlbnkgPSBjb250ZXh0UGF0aERlbnkrc2VydmxldCsiLSIrbWV0aG9kOworICAgICAgICBvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIG51bGwsIDMwMiwgdXNlcm5hbWUsIGNvbnRleHRQYXRoRGVueSwgb3V0cHV0KTsKKyAgICAgICAgaWYgKHN1Y2Nlc3MpIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uRGVueSwgc3RhdC5QQVNTKTsKKyAgICAgICAgZWxzZSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbkRlbnksIHN0YXQuRkFJTCk7CisgICAgfQogCi0JCVN0cmluZ0J1ZmZlciBvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWJvb2xlYW4gc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgbWV0aG9kLCA0MDMsIHVzZXJuYW1lLCBjb250ZXh0UGF0aE9wZW4sIG91dHB1dCk7Ci0JCWlmIChzdWNjZXNzKSB7Ci0JCQlzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbk9wZW4sIHN0YXQuUEFTUyk7Ci0JCX0KLQkJZWxzZSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbk9wZW4sIHN0YXQuRkFJTCk7CisgICAgcHVibGljIHZvaWQgdGVzdENvdmVyZWQyUHV0KCkgeworICAgICAgICBTdHJpbmcgc2VydmxldCA9ICIvQ292ZXJlZDIiOworICAgICAgICBTdHJpbmcgbWV0aG9kID0gIlBVVCI7CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbk9wZW4gPSBjb250ZXh0UGF0aE9wZW4rc2VydmxldCsiLSIrbWV0aG9kOworICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb25EZW55ID0gY29udGV4dFBhdGhEZW55K3NlcnZsZXQrIi0iK21ldGhvZDsKIAotCQlvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCXN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIG1ldGhvZCwgNDAzLCB1c2VybmFtZSwgY29udGV4dFBhdGhEZW55LCBvdXRwdXQpOwotCQlpZiAoc3VjY2Vzcykgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25EZW55LCBzdGF0LlBBU1MpOwotCQllbHNlIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uRGVueSwgc3RhdC5GQUlMKTsKLQl9CisgICAgICAgIFN0cmluZ0J1ZmZlciBvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIGJvb2xlYW4gc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgbWV0aG9kLCA0MDMsIHVzZXJuYW1lLCBjb250ZXh0UGF0aE9wZW4sIG91dHB1dCk7CisgICAgICAgIGlmIChzdWNjZXNzKSB7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbk9wZW4sIHN0YXQuUEFTUyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbk9wZW4sIHN0YXQuRkFJTCk7CiAKLQlwdWJsaWMgdm9pZCB0ZXN0Q292ZXJlZDNhUG9zdCgpIHsKLQkJU3RyaW5nIHNlcnZsZXQgPSAiL0NvdmVyZWQzYSI7Ci0JCVN0cmluZyBtZXRob2QgPSAiUE9TVCI7Ci0JCVN0cmluZyBkZXNjcmlwdGlvbk9wZW4gPSBjb250ZXh0UGF0aE9wZW4rc2VydmxldCsiLSIrbWV0aG9kOwotCQlTdHJpbmcgZGVzY3JpcHRpb25EZW55ID0gY29udGV4dFBhdGhEZW55K3NlcnZsZXQrIi0iK21ldGhvZDsKKyAgICAgICAgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCBtZXRob2QsIDQwMywgdXNlcm5hbWUsIGNvbnRleHRQYXRoRGVueSwgb3V0cHV0KTsKKyAgICAgICAgaWYgKHN1Y2Nlc3MpIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uRGVueSwgc3RhdC5QQVNTKTsKKyAgICAgICAgZWxzZSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbkRlbnksIHN0YXQuRkFJTCk7CisgICAgfQogCi0JCVN0cmluZ0J1ZmZlciBvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWJvb2xlYW4gc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgbWV0aG9kLCAyMDAsIHVzZXJuYW1lLCBjb250ZXh0UGF0aE9wZW4sIG91dHB1dCk7Ci0JCWlmIChzdWNjZXNzKSB7Ci0JCQlzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbk9wZW4sIHN0YXQuUEFTUyk7Ci0JCX0KLQkJZWxzZSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbk9wZW4sIHN0YXQuRkFJTCk7CisgICAgcHVibGljIHZvaWQgdGVzdENvdmVyZWQzYVBvc3QoKSB7CisgICAgICAgIFN0cmluZyBzZXJ2bGV0ID0gIi9Db3ZlcmVkM2EiOworICAgICAgICBTdHJpbmcgbWV0aG9kID0gIlBPU1QiOworICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb25PcGVuID0gY29udGV4dFBhdGhPcGVuK3NlcnZsZXQrIi0iK21ldGhvZDsKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uRGVueSA9IGNvbnRleHRQYXRoRGVueStzZXJ2bGV0KyItIittZXRob2Q7CiAKLQkJb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCBtZXRob2QsIDIwMCwgdXNlcm5hbWUsIGNvbnRleHRQYXRoRGVueSwgb3V0cHV0KTsKLQkJaWYgKHN1Y2Nlc3MpIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uRGVueSwgc3RhdC5QQVNTKTsKLQkJZWxzZSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbkRlbnksIHN0YXQuRkFJTCk7Ci0JfQorICAgICAgICBTdHJpbmdCdWZmZXIgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBib29sZWFuIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIG1ldGhvZCwgMjAwLCB1c2VybmFtZSwgY29udGV4dFBhdGhPcGVuLCBvdXRwdXQpOworICAgICAgICBpZiAoc3VjY2VzcykgeworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25PcGVuLCBzdGF0LlBBU1MpOworICAgICAgICB9CisgICAgICAgIGVsc2Ugc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25PcGVuLCBzdGF0LkZBSUwpOwogCi0JcHVibGljIHZvaWQgdGVzdENvdmVyZWQzYURlbGV0ZSgpIHsKLQkJU3RyaW5nIHNlcnZsZXQgPSAiL0NvdmVyZWQzYSI7Ci0JCVN0cmluZyBtZXRob2QgPSAiREVMRVRFIjsKLQkJU3RyaW5nIGRlc2NyaXB0aW9uT3BlbiA9IGNvbnRleHRQYXRoT3BlbitzZXJ2bGV0KyItIittZXRob2Q7Ci0JCVN0cmluZyBkZXNjcmlwdGlvbkRlbnkgPSBjb250ZXh0UGF0aERlbnkrc2VydmxldCsiLSIrbWV0aG9kOworICAgICAgICBvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIG1ldGhvZCwgMjAwLCB1c2VybmFtZSwgY29udGV4dFBhdGhEZW55LCBvdXRwdXQpOworICAgICAgICBpZiAoc3VjY2Vzcykgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25EZW55LCBzdGF0LlBBU1MpOworICAgICAgICBlbHNlIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uRGVueSwgc3RhdC5GQUlMKTsKKyAgICB9CiAKLQkJU3RyaW5nQnVmZmVyIG91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJYm9vbGVhbiBzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCBtZXRob2QsIDIwMCwgdXNlcm5hbWUsIGNvbnRleHRQYXRoT3Blbiwgb3V0cHV0KTsKLQkJaWYgKHN1Y2Nlc3MpIHsKLQkJCXN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uT3Blbiwgc3RhdC5QQVNTKTsKLQkJfQotCQllbHNlIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uT3Blbiwgc3RhdC5GQUlMKTsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0Q292ZXJlZDNhRGVsZXRlKCkgeworICAgICAgICBTdHJpbmcgc2VydmxldCA9ICIvQ292ZXJlZDNhIjsKKyAgICAgICAgU3RyaW5nIG1ldGhvZCA9ICJERUxFVEUiOworICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb25PcGVuID0gY29udGV4dFBhdGhPcGVuK3NlcnZsZXQrIi0iK21ldGhvZDsKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uRGVueSA9IGNvbnRleHRQYXRoRGVueStzZXJ2bGV0KyItIittZXRob2Q7CiAKLQkJb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCBtZXRob2QsIDIwMCwgdXNlcm5hbWUsIGNvbnRleHRQYXRoRGVueSwgb3V0cHV0KTsKLQkJaWYgKHN1Y2Nlc3MpIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uRGVueSwgc3RhdC5QQVNTKTsKLQkJZWxzZSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbkRlbnksIHN0YXQuRkFJTCk7Ci0JfQorICAgICAgICBTdHJpbmdCdWZmZXIgb3V0cHV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBib29sZWFuIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIG1ldGhvZCwgMjAwLCB1c2VybmFtZSwgY29udGV4dFBhdGhPcGVuLCBvdXRwdXQpOworICAgICAgICBpZiAoc3VjY2VzcykgeworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25PcGVuLCBzdGF0LlBBU1MpOworICAgICAgICB9CisgICAgICAgIGVsc2Ugc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25PcGVuLCBzdGF0LkZBSUwpOwogCi0JcHVibGljIHZvaWQgdGVzdENvdmVyZWQzYigpIHsKLQkJU3RyaW5nIHNlcnZsZXQgPSAiL0NvdmVyZWQzYiI7Ci0JCVN0cmluZyBkZXNjcmlwdGlvbk9wZW4gPSBjb250ZXh0UGF0aE9wZW4rc2VydmxldDsKLQkJU3RyaW5nIGRlc2NyaXB0aW9uRGVueSA9IGNvbnRleHRQYXRoRGVueStzZXJ2bGV0OworICAgICAgICBvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIG1ldGhvZCwgMjAwLCB1c2VybmFtZSwgY29udGV4dFBhdGhEZW55LCBvdXRwdXQpOworICAgICAgICBpZiAoc3VjY2Vzcykgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25EZW55LCBzdGF0LlBBU1MpOworICAgICAgICBlbHNlIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uRGVueSwgc3RhdC5GQUlMKTsKKyAgICB9CiAKLQkJU3RyaW5nQnVmZmVyIG91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJYm9vbGVhbiBzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCBudWxsLCAzMDIsIHVzZXJuYW1lLCBjb250ZXh0UGF0aE9wZW4sIG91dHB1dCk7Ci0JCWludCBpbmRleCA9IG91dHB1dC5pbmRleE9mKCJodHRwczovLyIpOwotCQlpZiAoc3VjY2VzcyAmJiAoaW5kZXggIT0gLTEpKSB7Ci0JCQlzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbk9wZW4sIHN0YXQuUEFTUyk7Ci0JCX0KLQkJZWxzZSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbk9wZW4sIHN0YXQuRkFJTCk7CisgICAgcHVibGljIHZvaWQgdGVzdENvdmVyZWQzYigpIHsKKyAgICAgICAgU3RyaW5nIHNlcnZsZXQgPSAiL0NvdmVyZWQzYiI7CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbk9wZW4gPSBjb250ZXh0UGF0aE9wZW4rc2VydmxldDsKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uRGVueSA9IGNvbnRleHRQYXRoRGVueStzZXJ2bGV0OwogCi0JCW91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgbnVsbCwgMzAyLCB1c2VybmFtZSwgY29udGV4dFBhdGhEZW55LCBvdXRwdXQpOwotCQlpZiAoc3VjY2Vzcykgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25EZW55LCBzdGF0LlBBU1MpOwotCQllbHNlIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uRGVueSwgc3RhdC5GQUlMKTsKLQl9CisgICAgICAgIFN0cmluZ0J1ZmZlciBvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIGJvb2xlYW4gc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgbnVsbCwgMzAyLCB1c2VybmFtZSwgY29udGV4dFBhdGhPcGVuLCBvdXRwdXQpOworICAgICAgICBpbnQgaW5kZXggPSBvdXRwdXQuaW5kZXhPZigiaHR0cHM6Ly8iKTsKKyAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGluZGV4ICE9IC0xKSkgeworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25PcGVuLCBzdGF0LlBBU1MpOworICAgICAgICB9CisgICAgICAgIGVsc2Ugc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25PcGVuLCBzdGF0LkZBSUwpOwogCi0JcHVibGljIHZvaWQgdGVzdENvdmVyZWQzYlB1dCgpIHsKLQkJU3RyaW5nIHNlcnZsZXQgPSAiL0NvdmVyZWQzYiI7Ci0JCVN0cmluZyBtZXRob2QgPSAiUFVUIjsKLQkJU3RyaW5nIGRlc2NyaXB0aW9uT3BlbiA9IGNvbnRleHRQYXRoT3BlbitzZXJ2bGV0KyItIittZXRob2Q7Ci0JCVN0cmluZyBkZXNjcmlwdGlvbkRlbnkgPSBjb250ZXh0UGF0aERlbnkrc2VydmxldCsiLSIrbWV0aG9kOworICAgICAgICBvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIHN1Y2Nlc3MgPSBkb0luZGl2aWR1YWxUZXN0KHNlcnZsZXQsIG51bGwsIDMwMiwgdXNlcm5hbWUsIGNvbnRleHRQYXRoRGVueSwgb3V0cHV0KTsKKyAgICAgICAgaWYgKHN1Y2Nlc3MpIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uRGVueSwgc3RhdC5QQVNTKTsKKyAgICAgICAgZWxzZSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbkRlbnksIHN0YXQuRkFJTCk7CisgICAgfQogCi0JCVN0cmluZ0J1ZmZlciBvdXRwdXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWJvb2xlYW4gc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgbWV0aG9kLCAzMDIsIHVzZXJuYW1lLCBjb250ZXh0UGF0aE9wZW4sIG91dHB1dCk7Ci0JCWludCBpbmRleCA9IG91dHB1dC5pbmRleE9mKCJodHRwczovLyIpOwotCQlpZiAoc3VjY2VzcyAmJiAoaW5kZXggIT0gLTEpKSB7Ci0JCQlzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbk9wZW4sIHN0YXQuUEFTUyk7Ci0JCX0KLQkJZWxzZSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbk9wZW4sIHN0YXQuRkFJTCk7CisgICAgcHVibGljIHZvaWQgdGVzdENvdmVyZWQzYlB1dCgpIHsKKyAgICAgICAgU3RyaW5nIHNlcnZsZXQgPSAiL0NvdmVyZWQzYiI7CisgICAgICAgIFN0cmluZyBtZXRob2QgPSAiUFVUIjsKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uT3BlbiA9IGNvbnRleHRQYXRoT3BlbitzZXJ2bGV0KyItIittZXRob2Q7CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbkRlbnkgPSBjb250ZXh0UGF0aERlbnkrc2VydmxldCsiLSIrbWV0aG9kOwogCi0JCW91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgbWV0aG9kLCAzMDIsIHVzZXJuYW1lLCBjb250ZXh0UGF0aERlbnksIG91dHB1dCk7Ci0JCWlmIChzdWNjZXNzKSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbkRlbnksIHN0YXQuUEFTUyk7Ci0JCWVsc2Ugc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25EZW55LCBzdGF0LkZBSUwpOwotCX0KKyAgICAgICAgU3RyaW5nQnVmZmVyIG91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgYm9vbGVhbiBzdWNjZXNzID0gZG9JbmRpdmlkdWFsVGVzdChzZXJ2bGV0LCBtZXRob2QsIDMwMiwgdXNlcm5hbWUsIGNvbnRleHRQYXRoT3Blbiwgb3V0cHV0KTsKKyAgICAgICAgaW50IGluZGV4ID0gb3V0cHV0LmluZGV4T2YoImh0dHBzOi8vIik7CisgICAgICAgIGlmIChzdWNjZXNzICYmIChpbmRleCAhPSAtMSkpIHsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uT3Blbiwgc3RhdC5QQVNTKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHN0YXQuYWRkU3RhdHVzKGRlc2NyaXB0aW9uT3Blbiwgc3RhdC5GQUlMKTsKIAotCXByaXZhdGUgYm9vbGVhbiBkb0luZGl2aWR1YWxUZXN0KFN0cmluZyBzZXJ2bGV0LCBTdHJpbmcgbWV0aG9kLCBpbnQgY29kZSwgU3RyaW5nIHVzZXIsIFN0cmluZyBjb250ZXh0LCBTdHJpbmdCdWZmZXIgb3V0cHV0KSB7Ci0JCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0JCXRyeSB7Ci0JCQlpbnQgcnRuY29kZTsKLQkJCVN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHQgKyBzZXJ2bGV0OwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJcbkludm9raW5nIHNlcnZsZXQgYXQgIiArIHVybCk7Ci0JCQlydG5jb2RlID0gaW52b2tlU2VydmxldCh1cmwsIG1ldGhvZCwgdXNlciwgb3V0cHV0KTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiVGhlIHNlcnZsZXQgcmV0dXJuIGNvZGU6ICIgKyBydG5jb2RlKTsKLQkJCWlmIChydG5jb2RlICE9IGNvZGUpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkluY29ycmVjdCByZXR1cm4gY29kZSwgZXhwZWN0aW5nOiAiICsgY29kZSk7Ci0JCQl9Ci0JCQllbHNlIHJlc3VsdCA9IHRydWU7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJFeGNlcHRpb246ICIgKyBleC50b1N0cmluZygpKTsKLQkJCS8vZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9CisgICAgICAgIG91dHB1dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgc3VjY2VzcyA9IGRvSW5kaXZpZHVhbFRlc3Qoc2VydmxldCwgbWV0aG9kLCAzMDIsIHVzZXJuYW1lLCBjb250ZXh0UGF0aERlbnksIG91dHB1dCk7CisgICAgICAgIGlmIChzdWNjZXNzKSBzdGF0LmFkZFN0YXR1cyhkZXNjcmlwdGlvbkRlbnksIHN0YXQuUEFTUyk7CisgICAgICAgIGVsc2Ugc3RhdC5hZGRTdGF0dXMoZGVzY3JpcHRpb25EZW55LCBzdGF0LkZBSUwpOworICAgIH0KIAotCXByaXZhdGUgaW50IGludm9rZVNlcnZsZXQoU3RyaW5nIHVybCwgU3RyaW5nIG1ldGhvZCwgU3RyaW5nIHVzZXIsIFN0cmluZ0J1ZmZlciBvdXRwdXQpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmcgaHR0cE1ldGhvZCA9ICJHRVQiOwotCQlpZiAoKG1ldGhvZCAhPSBudWxsKSAmJiAobWV0aG9kLmxlbmd0aCgpID4gMCkpIGh0dHBNZXRob2QgPSBtZXRob2Q7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiSW52b2tpbmcgc2VydmxldCB3aXRoIEhUVFAgbWV0aG9kOiAiICsgaHR0cE1ldGhvZCk7Ci0JCVVSTCB1ID0gbmV3IFVSTCh1cmwpOwotCQlIdHRwVVJMQ29ubmVjdGlvbiBjMSA9IChIdHRwVVJMQ29ubmVjdGlvbikgdS5vcGVuQ29ubmVjdGlvbigpOwotCQljMS5zZXRSZXF1ZXN0TWV0aG9kKGh0dHBNZXRob2QpOwotCQlpZiAoKHVzZXIgIT0gbnVsbCkgJiYgKHVzZXIubGVuZ3RoKCkgPiAwKSkgewotCQkJLy8gQWRkIEJBU0lDIGhlYWRlciBmb3IgYXV0aGVudGljYXRpb24KLQkJCVN0cmluZyBhdXRoID0gIHVzZXIgKyAiOiIgKyBwYXNzd29yZDsKLQkJCVN0cmluZyBhdXRoRW5jb2RlZCA9IG5ldyBzdW4ubWlzYy5CQVNFNjRFbmNvZGVyKCkuZW5jb2RlKGF1dGguZ2V0Qnl0ZXMoKSk7Ci0JCQljMS5zZXRSZXF1ZXN0UHJvcGVydHkoIkF1dGhvcml6YXRpb24iLCAiQmFzaWMgIiArIGF1dGhFbmNvZGVkKTsKLQkJfQotCQljMS5zZXRVc2VDYWNoZXMoZmFsc2UpOworICAgIHByaXZhdGUgYm9vbGVhbiBkb0luZGl2aWR1YWxUZXN0KFN0cmluZyBzZXJ2bGV0LCBTdHJpbmcgbWV0aG9kLCBpbnQgY29kZSwgU3RyaW5nIHVzZXIsIFN0cmluZyBjb250ZXh0LCBTdHJpbmdCdWZmZXIgb3V0cHV0KSB7CisgICAgICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpbnQgcnRuY29kZTsKKyAgICAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHQgKyBzZXJ2bGV0OworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcbkludm9raW5nIHNlcnZsZXQgYXQgIiArIHVybCk7CisgICAgICAgICAgICBydG5jb2RlID0gaW52b2tlU2VydmxldCh1cmwsIG1ldGhvZCwgdXNlciwgb3V0cHV0KTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGhlIHNlcnZsZXQgcmV0dXJuIGNvZGU6ICIgKyBydG5jb2RlKTsKKyAgICAgICAgICAgIGlmIChydG5jb2RlICE9IGNvZGUpIHsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluY29ycmVjdCByZXR1cm4gY29kZSwgZXhwZWN0aW5nOiAiICsgY29kZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHJlc3VsdCA9IHRydWU7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGNlcHRpb246ICIgKyBleC50b1N0cmluZygpKTsKKyAgICAgICAgICAgIC8vZXgucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiAKLQkJLy8gQ29ubmVjdCBhbmQgZ2V0IHRoZSByZXNwb25zZSBjb2RlIGFuZC9vciBvdXRwdXQgdG8gdmVyaWZ5Ci0JCWMxLmNvbm5lY3QoKTsKLQkJaW50IGNvZGUgPSBjMS5nZXRSZXNwb25zZUNvZGUoKTsKLQkJaWYgKGNvZGUgPT0gSHR0cFVSTENvbm5lY3Rpb24uSFRUUF9PSykgewotCQkJSW5wdXRTdHJlYW0gaXMgPSBudWxsOwotCQkJQnVmZmVyZWRSZWFkZXIgaW5wdXQgPSBudWxsOwotCQkJU3RyaW5nIGxpbmUgPSBudWxsOwotCQkJdHJ5IHsKLQkJCQlpcyA9IGMxLmdldElucHV0U3RyZWFtKCk7Ci0JCQkJaW5wdXQgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7Ci0JCQkJd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewotCQkJCQlvdXRwdXQuYXBwZW5kKGxpbmUpOwotCQkJCQkvL1N5c3RlbS5vdXQucHJpbnRsbihsaW5lKTsKLQkJCQl9Ci0JCQl9Ci0JCQlmaW5hbGx5IHsKLQkJCQl0cnkgeyBpZiAoaXMgIT0gbnVsbCkgaXMuY2xvc2UoKTsgfQotCQkJCWNhdGNoIChFeGNlcHRpb24gZXhjKSB7fQotCQkJCXRyeSB7IGlmIChpbnB1dCAhPSBudWxsKSBpbnB1dC5jbG9zZSgpOyB9Ci0JCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGMpIHt9Ci0JCQl9Ci0JCX0KLQkJZWxzZSBpZiAoY29kZSA9PSBIdHRwVVJMQ29ubmVjdGlvbi5IVFRQX01PVkVEX1RFTVApIHsKLQkJCVVSTCByZWRpciA9IG5ldyBVUkwoYzEuZ2V0SGVhZGVyRmllbGQoIkxvY2F0aW9uIikpOwotCQkJU3RyaW5nIGxpbmUgPSAiU2VydmxldCByZWRpcmVjdGVkIHRvOiAiICsgcmVkaXIudG9TdHJpbmcoKTsKLQkJCW91dHB1dC5hcHBlbmQobGluZSk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4obGluZSk7Ci0JCX0KLQkJcmV0dXJuIGNvZGU7Ci0JfQorICAgIHByaXZhdGUgaW50IGludm9rZVNlcnZsZXQoU3RyaW5nIHVybCwgU3RyaW5nIG1ldGhvZCwgU3RyaW5nIHVzZXIsIFN0cmluZ0J1ZmZlciBvdXRwdXQpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTdHJpbmcgaHR0cE1ldGhvZCA9ICJHRVQiOworICAgICAgICBpZiAoKG1ldGhvZCAhPSBudWxsKSAmJiAobWV0aG9kLmxlbmd0aCgpID4gMCkpIGh0dHBNZXRob2QgPSBtZXRob2Q7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW52b2tpbmcgc2VydmxldCB3aXRoIEhUVFAgbWV0aG9kOiAiICsgaHR0cE1ldGhvZCk7CisgICAgICAgIFVSTCB1ID0gbmV3IFVSTCh1cmwpOworICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjMSA9IChIdHRwVVJMQ29ubmVjdGlvbikgdS5vcGVuQ29ubmVjdGlvbigpOworICAgICAgICBjMS5zZXRSZXF1ZXN0TWV0aG9kKGh0dHBNZXRob2QpOworICAgICAgICBpZiAoKHVzZXIgIT0gbnVsbCkgJiYgKHVzZXIubGVuZ3RoKCkgPiAwKSkgeworICAgICAgICAgICAgLy8gQWRkIEJBU0lDIGhlYWRlciBmb3IgYXV0aGVudGljYXRpb24KKyAgICAgICAgICAgIFN0cmluZyBhdXRoID0gIHVzZXIgKyAiOiIgKyBwYXNzd29yZDsKKyAgICAgICAgICAgIFN0cmluZyBhdXRoRW5jb2RlZCA9IG5ldyBzdW4ubWlzYy5CQVNFNjRFbmNvZGVyKCkuZW5jb2RlKGF1dGguZ2V0Qnl0ZXMoKSk7CisgICAgICAgICAgICBjMS5zZXRSZXF1ZXN0UHJvcGVydHkoIkF1dGhvcml6YXRpb24iLCAiQmFzaWMgIiArIGF1dGhFbmNvZGVkKTsKKyAgICAgICAgfQorICAgICAgICBjMS5zZXRVc2VDYWNoZXMoZmFsc2UpOworCisgICAgICAgIC8vIENvbm5lY3QgYW5kIGdldCB0aGUgcmVzcG9uc2UgY29kZSBhbmQvb3Igb3V0cHV0IHRvIHZlcmlmeQorICAgICAgICBjMS5jb25uZWN0KCk7CisgICAgICAgIGludCBjb2RlID0gYzEuZ2V0UmVzcG9uc2VDb2RlKCk7CisgICAgICAgIGlmIChjb2RlID09IEh0dHBVUkxDb25uZWN0aW9uLkhUVFBfT0spIHsKKyAgICAgICAgICAgIElucHV0U3RyZWFtIGlzID0gbnVsbDsKKyAgICAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gbnVsbDsKKyAgICAgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgaXMgPSBjMS5nZXRJbnB1dFN0cmVhbSgpOworICAgICAgICAgICAgICAgIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOworICAgICAgICAgICAgICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChsaW5lKTsKKyAgICAgICAgICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4obGluZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZmluYWxseSB7CisgICAgICAgICAgICAgICAgdHJ5IHsgaWYgKGlzICE9IG51bGwpIGlzLmNsb3NlKCk7IH0KKyAgICAgICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4Yykge30KKyAgICAgICAgICAgICAgICB0cnkgeyBpZiAoaW5wdXQgIT0gbnVsbCkgaW5wdXQuY2xvc2UoKTsgfQorICAgICAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXhjKSB7fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGNvZGUgPT0gSHR0cFVSTENvbm5lY3Rpb24uSFRUUF9NT1ZFRF9URU1QKSB7CisgICAgICAgICAgICBVUkwgcmVkaXIgPSBuZXcgVVJMKGMxLmdldEhlYWRlckZpZWxkKCJMb2NhdGlvbiIpKTsKKyAgICAgICAgICAgIFN0cmluZyBsaW5lID0gIlNlcnZsZXQgcmVkaXJlY3RlZCB0bzogIiArIHJlZGlyLnRvU3RyaW5nKCk7CisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKGxpbmUpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGxpbmUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBjb2RlOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3VuY292ZXJlZC1odHRwLW1ldGhvZHMvZGVzY3JpcHRvci9kZW55LXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS91bmNvdmVyZWQtaHR0cC1tZXRob2RzL2Rlc2NyaXB0b3IvZGVueS13ZWIueG1sCmluZGV4IGU5YjQ2NmEuLmRlZDgyY2UgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3VuY292ZXJlZC1odHRwLW1ldGhvZHMvZGVzY3JpcHRvci9kZW55LXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvdW5jb3ZlcmVkLWh0dHAtbWV0aG9kcy9kZXNjcmlwdG9yL2Rlbnktd2ViLnhtbApAQCAtMzUsNyArMzUsNyBAQAogICAgICAgICAgICAgPHRyYW5zcG9ydC1ndWFyYW50ZWU+Q09ORklERU5USUFMPC90cmFuc3BvcnQtZ3VhcmFudGVlPgogICAgICAgICA8L3VzZXItZGF0YS1jb25zdHJhaW50PgogICAgIDwvc2VjdXJpdHktY29uc3RyYWludD4KLSAgICAKKwogICAgIDxzZWN1cml0eS1jb25zdHJhaW50PgogICAgICAgICA8d2ViLXJlc291cmNlLWNvbGxlY3Rpb24+CiAgICAgICAgICAgICA8d2ViLXJlc291cmNlLW5hbWU+RXhhbXBsZTI8L3dlYi1yZXNvdXJjZS1uYW1lPgpAQCAtNDUsNyArNDUsNyBAQAogICAgICAgICA8L3dlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgogICAgICAgICA8YXV0aC1jb25zdHJhaW50Lz4KICAgICA8L3NlY3VyaXR5LWNvbnN0cmFpbnQ+Ci0gICAgCisKICAgICA8c2VjdXJpdHktY29uc3RyYWludD4KICAgICAgICAgPHdlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgogICAgICAgICAgICAgPHdlYi1yZXNvdXJjZS1uYW1lPkNvdmVyZWQxPC93ZWItcmVzb3VyY2UtbmFtZT4KQEAgLTc0LDUgKzc0LDUgQEAKICAgICAgICAgICAgIDx0cmFuc3BvcnQtZ3VhcmFudGVlPkNPTkZJREVOVElBTDwvdHJhbnNwb3J0LWd1YXJhbnRlZT4KICAgICAgICAgPC91c2VyLWRhdGEtY29uc3RyYWludD4KICAgICA8L3NlY3VyaXR5LWNvbnN0cmFpbnQ+Ci0gICAgCisKIDwvd2ViLWFwcD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3VuY292ZXJlZC1odHRwLW1ldGhvZHMvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvdW5jb3ZlcmVkLWh0dHAtbWV0aG9kcy9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggM2RkM2Q4MC4uNmI3N2Q1OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvdW5jb3ZlcmVkLWh0dHAtbWV0aG9kcy9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvdW5jb3ZlcmVkLWh0dHAtbWV0aG9kcy9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTMzLDcgKzMzLDcgQEAKICAgICAgICAgICAgIDx0cmFuc3BvcnQtZ3VhcmFudGVlPkNPTkZJREVOVElBTDwvdHJhbnNwb3J0LWd1YXJhbnRlZT4KICAgICAgICAgPC91c2VyLWRhdGEtY29uc3RyYWludD4KICAgICA8L3NlY3VyaXR5LWNvbnN0cmFpbnQ+Ci0gICAgCisKICAgICA8c2VjdXJpdHktY29uc3RyYWludD4KICAgICAgICAgPHdlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgogICAgICAgICAgICAgPHdlYi1yZXNvdXJjZS1uYW1lPkV4YW1wbGUyPC93ZWItcmVzb3VyY2UtbmFtZT4KQEAgLTQzLDcgKzQzLDcgQEAKICAgICAgICAgPC93ZWItcmVzb3VyY2UtY29sbGVjdGlvbj4KICAgICAgICAgPGF1dGgtY29uc3RyYWludC8+CiAgICAgPC9zZWN1cml0eS1jb25zdHJhaW50PgotICAgIAorCiAgICAgPHNlY3VyaXR5LWNvbnN0cmFpbnQ+CiAgICAgICAgIDx3ZWItcmVzb3VyY2UtY29sbGVjdGlvbj4KICAgICAgICAgICAgIDx3ZWItcmVzb3VyY2UtbmFtZT5Db3ZlcmVkMTwvd2ViLXJlc291cmNlLW5hbWU+CkBAIC03Miw1ICs3Miw1IEBACiAgICAgICAgICAgICA8dHJhbnNwb3J0LWd1YXJhbnRlZT5DT05GSURFTlRJQUw8L3RyYW5zcG9ydC1ndWFyYW50ZWU+CiAgICAgICAgIDwvdXNlci1kYXRhLWNvbnN0cmFpbnQ+CiAgICAgPC9zZWN1cml0eS1jb25zdHJhaW50PgotICAgIAorCiA8L3dlYi1hcHA+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS91c2VyV2l0aEF0U3ltYm9sL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS91c2VyV2l0aEF0U3ltYm9sL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYTE4MzVkNC4uZjBmODkxYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvdXNlcldpdGhBdFN5bWJvbC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3VzZXJXaXRoQXRTeW1ib2wvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic2VjdXJpdHkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CkBAIC0yNiw0ICsyNiw0IEBACiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9InJwYUxvZ2luQmVhbiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJycGFMb2dpbkJlYW4iLz4gICAgICAgIFx1MDAyMApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvdXNlcldpdGhBdFN5bWJvbC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS91c2VyV2l0aEF0U3ltYm9sL2J1aWxkLnhtbAppbmRleCBjYmY4YjZjLi41NDlhNDc5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS91c2VyV2l0aEF0U3ltYm9sL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS91c2VyV2l0aEF0U3ltYm9sL2J1aWxkLnhtbApAQCAtMzMsMjUgKzMzLDI1IEBACiAgICAmY29tbW9uUnVuOwogICAgJnRlc3RQcm9wZXJ0aWVzOwogICAgJmNvbW1vblNlY3VyaXR5OwotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImJ1aWxkLCBzZXR1cCwgZGVwbG95LHJ1biwgdW5kZXBsb3ksIHVuc2V0dXAiLz4KIAogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPHByb3BlcnR5IGVudmlyb25tZW50PSJlbnYiLz4KLQk8ZWNobyBtZXNzYWdlPSJmaWxlPSR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2NvbmZpZy9rZXlmaWxlMiIgZmlsZT0idGVtcC50eHQiLz4KLQk8cmVwbGFjZSBmaWxlPSJ0ZW1wLnR4dCIgdG9rZW49IjoiIHZhbHVlPSJcOiIvPgotCTxyZXBsYWNlIGZpbGU9InRlbXAudHh0IiB0b2tlbj0iXCIgdmFsdWU9IlxcIi8+Ci0JPGxvYWRwcm9wZXJ0aWVzIHNyY0ZpbGU9InRlbXAudHh0Ii8+CisgICAgPGVjaG8gbWVzc2FnZT0iZmlsZT0ke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9jb25maWcva2V5ZmlsZTIiIGZpbGU9InRlbXAudHh0Ii8+CisgICAgPHJlcGxhY2UgZmlsZT0idGVtcC50eHQiIHRva2VuPSI6IiB2YWx1ZT0iXDoiLz4KKyAgICA8cmVwbGFjZSBmaWxlPSJ0ZW1wLnR4dCIgdG9rZW49IlwiIHZhbHVlPSJcXCIvPgorICAgIDxsb2FkcHJvcGVydGllcyBzcmNGaWxlPSJ0ZW1wLnR4dCIvPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSIke2ZpbGV9Ii8+CiAgICAgICAgIDxkZWxldGUgZmlsZT0idGVtcC50eHQiLz4KLQkKKwogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0iY3JlYXRlLWF1dGgtcmVhbG0iIC8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9Ii0tY2xhc3NuYW1lIGNvbS5zdW4uZW50ZXJwcmlzZS5zZWN1cml0eS5hdXRoLnJlYWxtLmZpbGUuRmlsZVJlYWxtIC0tcHJvcGVydHkgZmlsZT0ke2ZpbGV9OmphYXMtY29udGV4dD1maWxlUmVhbG0gZmlsZTIiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgPCEtLSAgPGFudGNhbGwgdGFyZ2V0PSJyZWNvbmZpZy1jb21tb24iLz4tLT4KIAotCTxlY2hvIG1lc3NhZ2U9IkNyZWF0aW5nIHVzZXIgd2l0aCBhbiBAIHN5bWJvbDogaGFycHJlZXRAZm9vYmFyLmNvbSIvPgorICAgIDxlY2hvIG1lc3NhZ2U9IkNyZWF0aW5nIHVzZXIgd2l0aCBhbiBAIHN5bWJvbDogaGFycHJlZXRAZm9vYmFyLmNvbSIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS11c2VyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0idXNlciIgdmFsdWU9ImhhcnByZWV0QGZvb2Jhci5jb20iLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJwYXNzd29yZCIgdmFsdWU9ImhhcnByZWV0Ii8+CkBAIC04OSw3ICs4OSw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLTwhLS0JPHByb3BlcnR5IG5hbWU9ImVqYmphci5jbGFzc2VzIiB2YWx1ZT0iKiovKkhvbWUqLmNsYXNzLCoqLypCZWFuKi5jbGFzcywqKi8qRGF0YSouY2xhc3MsKi5kYnNjaGVtYSIvPgorPCEtLSAgICA8cHJvcGVydHkgbmFtZT0iZWpiamFyLmNsYXNzZXMiIHZhbHVlPSIqKi8qSG9tZSouY2xhc3MsKiovKkJlYW4qLmNsYXNzLCoqLypEYXRhKi5jbGFzcywqLmRic2NoZW1hIi8+CiAtLT4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZC1lYXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS91c2VyV2l0aEF0U3ltYm9sL2NsaWVudC9ScGFDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3VzZXJXaXRoQXRTeW1ib2wvY2xpZW50L1JwYUNsaWVudC5qYXZhCmluZGV4IDJmZmM0MmEuLjIzNTZkMjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3VzZXJXaXRoQXRTeW1ib2wvY2xpZW50L1JwYUNsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3VzZXJXaXRoQXRTeW1ib2wvY2xpZW50L1JwYUNsaWVudC5qYXZhCkBAIC0zOCwzMSArMzgsMzEgQEAKICAgICAgICAgUnBhQ2xpZW50IGNsaWVudCA9IG5ldyBScGFDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgUnBhQ2xpZW50KFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgLy9zdXBlcihhcmdzKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGRvVGVzdCgpIHsKLSAgICAgICAgCi0JUnBhUmVtb3RlIGhyPW51bGw7CisKKyAgICBScGFSZW1vdGUgaHI9bnVsbDsKICAgICAgICAgU3RyaW5nIHJlcz1udWxsOwogICAgICAgICBDb250ZXh0IGljID0gbnVsbDsKICAgICAgICAgTG9naW5Db250ZXh0IGxjPW51bGw7CiAgICAgICAgIFJwYUhvbWUgaG9tZT1udWxsOwogICAgICAgICBTdHJpbmcgdGVzdElkID0gIlNlYzo6VXNlcm5hbWUgd2l0aCBAIjsKLSAgICAJdHJ5eworICAgICAgICB0cnl7CiAgICAgICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJTZWN1cml0eTo6VXNlcm5hbWUgd2l0aCBAIik7Ci0JICAgIGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgICAgICAvLyBjcmVhdGUgRUpCIHVzaW5nIGZhY3RvcnkgZnJvbSBjb250YWluZXIgCisgICAgICAgIGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgICAgICAvLyBjcmVhdGUgRUpCIHVzaW5nIGZhY3RvcnkgZnJvbSBjb250YWluZXIKICAgICAgICAgICAgIGphdmEubGFuZy5PYmplY3Qgb2JqcmVmID0gaWMubG9va3VwKCJycGFMb2dpbkJlYW4iKTsKLQkJCi0JICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTG9va2VkIHVwIGhvbWUhISIpOwotCQkKLQkgICAgaG9tZSA9IChScGFIb21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdygKLQkJCQkJICAgb2JqcmVmLCBScGFIb21lLmNsYXNzKTsKLQkgICAgU3lzdGVtLmVyci5wcmludGxuKCJOYXJyb3dlZCBob21lISEiKTsKLQkJCQkKKworICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkxvb2tlZCB1cCBob21lISEiKTsKKworICAgICAgICBob21lID0gKFJwYUhvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KAorICAgICAgICAgICAgICAgICAgICAgICBvYmpyZWYsIFJwYUhvbWUuY2xhc3MpOworICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIk5hcnJvd2VkIGhvbWUhISIpOworCiAgICAgICAgICAgICBociA9IGhvbWUuY3JlYXRlKCJMaXpIdXJsZXkiKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IHRoZSBFSkIhISIpOwogCkBAIC04OCwxMSArODgsMTEgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVXNlcm5hbWUgd2l0aCBAOlJwYUxvZ2luQmVhbiBUZXN0IEZhaWxlZCIpOwogICAgICAgICAgICAgU3lzdGVtLmV4aXQoLTEpOwotCX0gZmluYWxseSB7CisgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJlczsKLSAgICAgICAgCisKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3VzZXJXaXRoQXRTeW1ib2wvc2hvcHBpbmcvUnBhQmVhbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvdXNlcldpdGhBdFN5bWJvbC9zaG9wcGluZy9ScGFCZWFuLmphdmEKaW5kZXggNGI1M2JkNC4uNjYwYjdjMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvdXNlcldpdGhBdFN5bWJvbC9zaG9wcGluZy9ScGFCZWFuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvdXNlcldpdGhBdFN5bWJvbC9zaG9wcGluZy9ScGFCZWFuLmphdmEKQEAgLTM2LDI2ICszNiwyNiBAQAogICovCiAKIHB1YmxpYyBjbGFzcyBScGFCZWFuIGltcGxlbWVudHMgU2Vzc2lvbkJlYW4gewotICAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgc2hvcHBlciA9ICJhbm9ueW1vdXMiOwogICAgIHByaXZhdGUgU3RyaW5nIHByaW5jaXBhbCA9ICJoYXJwcmVldEBmb29iYXIuY29tIjsKICAgICBwcml2YXRlIGludCB0b3RhbFByaWNlID0gMDsKLSAgICAKKwogICAgIHByaXZhdGUgaW50IHRvdGFsSXRlbXMgPSAwOwotICAgIAorCiAgICAgcHJpdmF0ZSBWZWN0b3IgaXRlbXM7Ci0gICAgCisKICAgICBwcml2YXRlIFZlY3RvciBpdGVtUHJpY2U7Ci0gICAgCisKICAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IHNjID0gbnVsbDsKLSAgICAKKwogICAgIC8qKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIFNob3BwaW5nRUpCICovCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKFN0cmluZyBzaG9wcGVyTmFtZSkgewogICAgICAgICBzaG9wcGVyID0gc2hvcHBlck5hbWU7CiAgICAgICAgIGl0ZW1zID0gbmV3IFZlY3RvcigpOwogICAgICAgICBpdGVtUHJpY2UgPSBuZXcgVmVjdG9yKCk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgYWRkSXRlbShqYXZhLmxhbmcuU3RyaW5nIGl0ZW0sIGludCBwcmljZSkgdGhyb3dzIEVKQkV4Y2VwdGlvbiwKICAgICAgICAgUmVtb3RlRXhjZXB0aW9uewogICAgICAgICBjaGVja0NhbGxlclByaW5jaXBhbCgpOwpAQCAtNjcsMjYgKzY3LDI2IEBACiAgICAgICAgICAgICArIGl0ZW0gKyIgZm9yIHByaWNlID0iKyBwcmljZSArIiAuVG90YWwgSXRlbXMgPSAiK3RvdGFsSXRlbXMgKwogICAgICAgICAgICAgIiAuVG90YWxQcmljZSA9ICIgKyB0b3RhbFByaWNlKTsKICAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgZGVsZXRlSXRlbShqYXZhLmxhbmcuU3RyaW5nIGl0ZW0pIHRocm93cyBFSkJFeGNlcHRpb24sIAorCisgICAgcHVibGljIHZvaWQgZGVsZXRlSXRlbShqYXZhLmxhbmcuU3RyaW5nIGl0ZW0pIHRocm93cyBFSkJFeGNlcHRpb24sCiAgICAgICAgIFJlbW90ZUV4Y2VwdGlvbnsKICAgICAgICAgY2hlY2tDYWxsZXJQcmluY2lwYWwoKTsKICAgICAgICAgaW50IGluZGV4ID0gaXRlbXMuaW5kZXhPZihpdGVtKTsKICAgICAgICAgaXRlbXMucmVtb3ZlKGl0ZW0pOwogICAgICAgICBJbnRlZ2VyIHByaWNlID0gKEludGVnZXIpIGl0ZW1QcmljZS5nZXQoaW5kZXgpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNob3BwaW5nIENhcnQ6IFJlbW92aW5nIGl0ZW0gIisgaXRlbSArIiBAcHJpY2UgIisgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2hvcHBpbmcgQ2FydDogUmVtb3ZpbmcgaXRlbSAiKyBpdGVtICsiIEBwcmljZSAiKwogICAgICAgICAgICAgcHJpY2UuaW50VmFsdWUoKSk7CiAgICAgICAgIHRvdGFsUHJpY2UgLT0gcHJpY2Uuc2hvcnRWYWx1ZSgpOwotICAgICAgICBpdGVtUHJpY2UucmVtb3ZlKGluZGV4KTsgICAgICAgICAgICAgICAgICAgIAorICAgICAgICBpdGVtUHJpY2UucmVtb3ZlKGluZGV4KTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgU2hvcHBpbmcgQ2FydDogU2hvcHBlciAiKyBzaG9wcGVyICsiICAuVG90YWwgSXRlbXMgPSAiK3RvdGFsSXRlbXMgKwogICAgICAgICAgICAgIiAuVG90YWxQcmljZSA9ICIgKyB0b3RhbFByaWNlKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgZG91YmxlIGdldFRvdGFsQ29zdCgpIHRocm93cyBFSkJFeGNlcHRpb257CiAgICAgICAgIGNoZWNrQ2FsbGVyUHJpbmNpcGFsKCk7CiAgICAgICAgIHJldHVybiB0b3RhbFByaWNlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRJdGVtcygpIHRocm93cyBFSkJFeGNlcHRpb257CiAgICAgICAgIGNoZWNrQ2FsbGVyUHJpbmNpcGFsKCk7CiAKQEAgLTk4LDI2ICs5OCwyNiBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBpdGVtTmFtZXM7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gUnBhIGVqYkFjdGl2YXRlIik7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gUnBhIGVqYlBhc3NpdmF0ZSIpOwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBScGEgZWpiUmVtb3ZlIik7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChqYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dCBzZXNzaW9uQ29udGV4dCkgewogICAgICAgICBzYyA9IHNlc3Npb25Db250ZXh0OwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBjaGVja0NhbGxlclByaW5jaXBhbCgpIHRocm93cyBFSkJFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxlciBQcmluY2lhbCA9ICIgKyBzYy5nZXRDYWxsZXJQcmluY2lwYWwoKSArCiAgICAgICAgICAgICAgICAgIiBjb21wYXJpbmcgYWdhaW5zdCAiICsgcHJpbmNpcGFsKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3VzZXJXaXRoQXRTeW1ib2wvc2hvcHBpbmcvUnBhSG9tZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvdXNlcldpdGhBdFN5bWJvbC9zaG9wcGluZy9ScGFIb21lLmphdmEKaW5kZXggZDQyNjJkMC4uYzk5MzA5MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvdXNlcldpdGhBdFN5bWJvbC9zaG9wcGluZy9ScGFIb21lLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvdXNlcldpdGhBdFN5bWJvbC9zaG9wcGluZy9ScGFIb21lLmphdmEKQEAgLTI4LDggKzI4LDggQEAKICAqIEBhdXRob3IgIEhhcnByZWV0IFNpbmdoCiAgKi8KIHB1YmxpYyBpbnRlcmZhY2UgUnBhSG9tZSBleHRlbmRzIEVKQkhvbWV7Ci0gICAgCi0gICAgcHVibGljIFJwYVJlbW90ZSBjcmVhdGUoamF2YS5sYW5nLlN0cmluZyBzaG9wcGVyTmFtZSkgCisKKyAgICBwdWJsaWMgUnBhUmVtb3RlIGNyZWF0ZShqYXZhLmxhbmcuU3RyaW5nIHNob3BwZXJOYW1lKQogICAgICAgICB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uLCBqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb247Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3VzZXJXaXRoQXRTeW1ib2wvc2hvcHBpbmcvUnBhUmVtb3RlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS91c2VyV2l0aEF0U3ltYm9sL3Nob3BwaW5nL1JwYVJlbW90ZS5qYXZhCmluZGV4IGZiOGE3NzMuLjQzYTM5OTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3VzZXJXaXRoQXRTeW1ib2wvc2hvcHBpbmcvUnBhUmVtb3RlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvdXNlcldpdGhBdFN5bWJvbC9zaG9wcGluZy9ScGFSZW1vdGUuamF2YQpAQCAtMjMsMTcgKzIzLDE3IEBACiBwYWNrYWdlIHNob3BwaW5nOwogaW1wb3J0IGpha2FydGEuZWpiLkVKQk9iamVjdDsKIC8qKgotICogU2hvcHBpbmcgQ2FydCBTdGF0ZWZ1bCBTZXNzaW9uIEJlYW4uIEp1c3QgdGVzdHMgLURqMmVlbG9naW4ubmFtZSAKKyAqIFNob3BwaW5nIENhcnQgU3RhdGVmdWwgU2Vzc2lvbiBCZWFuLiBKdXN0IHRlc3RzIC1EajJlZWxvZ2luLm5hbWUKICAqICAtRGoyZWVsb2dpbi5wYXNzd29yZCBzeXN0ZW0gcHJvcGVydGllcy4KICAqIEBhdXRob3IgIGhzaW5naAogICovCiBwdWJsaWMgaW50ZXJmYWNlIFJwYVJlbW90ZSBleHRlbmRzIEVKQk9iamVjdCB7Ci0gICAgICAgICAgICAKKwogICAgIHB1YmxpYyB2b2lkIGFkZEl0ZW0oamF2YS5sYW5nLlN0cmluZyBpdGVtLCBpbnQgcHJpY2UpIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkZWxldGVJdGVtKGphdmEubGFuZy5TdHJpbmcgaXRlbSkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKLSAgICAgICAKKwogICAgIHB1YmxpYyBkb3VibGUgZ2V0VG90YWxDb3N0KCkgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKLSAgICAKKwogICAgIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nW10gZ2V0SXRlbXMoKSB0aHJvd3MgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd2ViLW11dHVhbC1zc2wvV2ViU1NMQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93ZWItbXV0dWFsLXNzbC9XZWJTU0xDbGllbnQuamF2YQppbmRleCBiYjRmNTY1Li5lOTlkZTZlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93ZWItbXV0dWFsLXNzbC9XZWJTU0xDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93ZWItbXV0dWFsLXNzbC9XZWJTU0xDbGllbnQuamF2YQpAQCAtMzMsNyArMzMsNyBAQAogcHVibGljIGNsYXNzIFdlYlNTTENsaWVudCB7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9OQU1FCi0gICAgICAgID0gInNlY3VyaXR5LXdlYi1tdXR1YWwtc3NsIjsgICAgCisgICAgICAgID0gInNlY3VyaXR5LXdlYi1tdXR1YWwtc3NsIjsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFWFBFQ1RFRF9SRVNQT05TRQogICAgICAgICA9ICJbTGphdmEuc2VjdXJpdHkuY2VydC5YNTA5Q2VydGlmaWNhdGU7IjsKQEAgLTUyLDcgKzUyLDcgQEAKICAgICAgICAgU3RyaW5nIHNzbFBhc3N3b3JkID0gYXJnc1s1XTsKIAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImhvc3QvcG9ydD0iICsgaG9zdCArICIvIiArIHBvcnQpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbihURVNUX05BTUUpOwogICAgICAgICAgICAgU1NMU29ja2V0RmFjdG9yeSBzc2YgPSBnZXRTU0xTb2NrZXRGYWN0b3J5KHNzbFBhc3N3b3JkLApAQCAtNjIsOSArNjIsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiL1Rlc3RDbGllbnRDZXJ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2YpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHBhcnNlUmVzcG9uc2UoY29ubmVjdGlvbik7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdCkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgdC5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTgxLDcgKzgxLDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGluID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uLmdldElucHV0U3RyZWFtKCkpKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CiAgICAgICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbi5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgaWYgKEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewpAQCAtMTExLDcgKzExMSw3IEBACiAKICAgICAgICAgU1NMQ29udGV4dCBjdHggPSBTU0xDb250ZXh0LmdldEluc3RhbmNlKCJUTFMiKTsKIAotICAgICAgICAvLyBLZXlzdG9yZSAKKyAgICAgICAgLy8gS2V5c3RvcmUKICAgICAgICAgS2V5U3RvcmUga3MgPSBLZXlTdG9yZS5nZXRJbnN0YW5jZSgiSktTIik7CiAgICAgICAgIGNoYXJbXSBwYXNzcGhyYXNlID0gc3NsUGFzc3dvcmQudG9DaGFyQXJyYXkoKTsKICAgICAgICAga3MubG9hZChuZXcgRmlsZUlucHV0U3RyZWFtKGtleVN0b3JlUGF0aCksIHBhc3NwaHJhc2UpOwpAQCAtMTI1LDcgKzEyNSw3IEBACiAgICAgICAgIHRtZi5pbml0KHRydXN0U3RvcmUpOwogCiAgICAgICAgIGN0eC5pbml0KGttZi5nZXRLZXlNYW5hZ2VycygpLHRtZi5nZXRUcnVzdE1hbmFnZXJzKCksIG51bGwpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gY3R4LmdldFNvY2tldEZhY3RvcnkoKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dlYi1tdXR1YWwtc3NsL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93ZWItbXV0dWFsLXNzbC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDc3OGMwNmQuLjc2MjZjNDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dlYi1tdXR1YWwtc3NsL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd2ViLW11dHVhbC1zc2wvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViLW11dHVhbC1zc2wiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9IiAvPgpAQCAtMjcsNiArMjcsNiBAQAogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJzdGF0ZWZ1bExvZ2luQmVhbiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJzdGF0ZWZ1bExvZ2luQmVhbiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd2ViLW11dHVhbC1zc2wvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd2ViLW11dHVhbC1zc2wvYnVpbGQueG1sCmluZGV4IDI0YmExNzYuLjA5NTAyYmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dlYi1tdXR1YWwtc3NsL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93ZWItbXV0dWFsLXNzbC9idWlsZC54bWwKQEAgLTMzLDcgKzMzLDcgQEAKICAgICAmY29tbW9uUnVuOwogICAgICZjb21tb25TZWN1cml0eTsKICAgICAmdGVzdFByb3BlcnRpZXM7Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iYnVpbGQsIHNldHVwLCBkZXBsb3ksIHJ1biwgdW5kZXBsb3ksIHVuc2V0dXAiLz4KICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgpAQCAtNTAsMTAgKzUwLDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKQEAgLTEwMCw3ICsxMDAsNyBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImdlbmVyYXRlLWNhLWNsaWVudC1jZXJ0cy1lZSIgLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXNlcnZlci1pbnN0YW5jZS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5zZXR1cCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdG9yZSIvPgogICAgIDwvdGFyZ2V0PgpAQCAtMTQ4LDExICsxNDgsMTEgQEAKICAgICA8L2V4ZWM+CiA8L3RhcmdldD4KIAotPCEtLSAKKzwhLS0KICAgIGdlbmVyYXRlIHNlbGZzaWduZWQgQ0EgY2VydCB0ZXN0Y2EsIGFuZCB0ZXN0Y2VydDEoaXNzdWVkIGJ5L3NpZ25lZCBieSB0ZXN0Y2EpIGluICR7bnNzLmRiLmRpcn07CiAgICBleHBvcnQgdGVzdGNhICAgIHRvIHRlc3RjYS5yZmMgYW5kIHRoZW4gaW1wb3J0IHRvICR7bXl0cnVzdHN0b3JlLmRiLmZpbGV9OwogICAgZXhwb3J0IHRlc3RjZXJ0MSB0byB0ZXN0Y2VydC5wMTIgYW5kIHRoZW4gaW1wb3J0IGl0IHRvICR7bXlrZXlzdG9yZS5kYi5maWxlfS4KLS0tPiAgIAorLS0+CiA8dGFyZ2V0IG5hbWU9ImdlbmVyYXRlLWNhLWNsaWVudC1jZXJ0cy1lZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iIGlmPSJpc05TUyI+CiAgICAgPG1rZGlyIGRpcj0iYnVpbGQiLz4KICAgICA8ZWNobyBtZXNzYWdlPSIke3NzbC5wYXNzd29yZH0iICAgZmlsZT0iYnVpbGQvcGFzc2ZpbGUiLz4KQEAgLTIwNCw3ICsyMDQsNyBAQAogICAgICAgICA8ZW52IGtleT0iTERfTElCUkFSWV9QQVRIIiBwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYiIvPgogICAgICAgICA8YXJnIGxpbmU9Ii1EIC1uIHRlc3RjZXJ0MSAgLWQgJHtuc3MuZGIuZGlyfSIvPgogICAgIDwvZXhlYz4KLSAgICAKKwogPC90YXJnZXQ+CiAKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dlYi1tdXR1YWwtc3NsL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dlYi1tdXR1YWwtc3NsL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCAzYzZhNmViLi5kNjI3NTMxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93ZWItbXV0dWFsLXNzbC9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd2ViLW11dHVhbC1zc2wvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yMiwxMyArMjIsMTMgQEAKICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiCiAgICAgICAgICB2ZXJzaW9uPSIyLjQiPgotICAgICAKKwogICAgIDxzZXJ2bGV0PgogICAgICAgPGRpc3BsYXktbmFtZT5UZXN0Q2xpZW50Q2VydDwvZGlzcGxheS1uYW1lPgogICAgICAgPHNlcnZsZXQtbmFtZT5UZXN0Q2xpZW50Q2VydDwvc2VydmxldC1uYW1lPgogICAgICAgPHNlcnZsZXQtY2xhc3M+ZGV2dGVzdHMuc2VjdXJpdHkuVGVzdENsaWVudENlcnQ8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCi0gICAgCisgICAgPC9zZXJ2bGV0PgorCiAgICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgIDxzZXJ2bGV0LW5hbWU+VGVzdENsaWVudENlcnQ8L3NlcnZsZXQtbmFtZT4KICAgICAgIDx1cmwtcGF0dGVybj4vVGVzdENsaWVudENlcnQ8L3VybC1wYXR0ZXJuPgpAQCAtMzYsNyArMzYsNyBAQAogCiAgICAgPHNlY3VyaXR5LWNvbnN0cmFpbnQ+CiAgICAgICA8d2ViLXJlc291cmNlLWNvbGxlY3Rpb24+Ci0JICA8d2ViLXJlc291cmNlLW5hbWU+UHJvdGVjdGVkIEFyZWE8L3dlYi1yZXNvdXJjZS1uYW1lPgorICAgICAgPHdlYi1yZXNvdXJjZS1uYW1lPlByb3RlY3RlZCBBcmVhPC93ZWItcmVzb3VyY2UtbmFtZT4KICAgICAgICAgICA8dXJsLXBhdHRlcm4+L1Rlc3RDbGllbnRDZXJ0PC91cmwtcGF0dGVybj4KICAgICAgICAgICA8aHR0cC1tZXRob2Q+REVMRVRFPC9odHRwLW1ldGhvZD4KICAgICAgICAgICA8aHR0cC1tZXRob2Q+R0VUPC9odHRwLW1ldGhvZD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dlYi1tdXR1YWwtc3NsL3NlcnZsZXQvVGVzdENsaWVudENlcnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dlYi1tdXR1YWwtc3NsL3NlcnZsZXQvVGVzdENsaWVudENlcnQuamF2YQppbmRleCAwMDE4M2QyLi5hNzliMDNhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93ZWItbXV0dWFsLXNzbC9zZXJ2bGV0L1Rlc3RDbGllbnRDZXJ0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd2ViLW11dHVhbC1zc2wvc2VydmxldC9UZXN0Q2xpZW50Q2VydC5qYXZhCkBAIC0zNCw5ICszNCw5IEBACiAgICAgICAgIGlmIChjZXJ0cyAhPSBudWxsKSB7CiAgICAgICAgICAgICBmb3IgKFg1MDlDZXJ0aWZpY2F0ZSBjZXJ0IDogY2VydHMpIHsKICAgICAgICAgICAgICAgIGdldFNlcnZsZXRDb250ZXh0KCkubG9nKGNlcnQudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICB9ICAgICAgICAgICAgCisgICAgICAgICAgICB9CiAgICAgICAgICAgICBjbE5hbWUgPSBjZXJ0cy5nZXRDbGFzcygpLmdldE5hbWUoKTsKLQl9IGVsc2UgeworICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBjbE5hbWUgPSAiY2VydCBpcyBudWxsIjsKICAgICAgICAgfQogICAgICAgICByZXMuZ2V0V3JpdGVyKCkucHJpbnQoY2xOYW1lKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dlYmxvZ2ljLWRkL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93ZWJsb2dpYy1kZC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDI5NGYyMzUuLjVmOGJhM2MgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dlYmxvZ2ljLWRkL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd2VibG9naWMtZGQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2VibG9naWMtZGQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9IiAvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd2VibG9naWMtZGQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd2VibG9naWMtZGQvYnVpbGQueG1sCmluZGV4IDExNTI1NjMuLjZmYjc5NTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dlYmxvZ2ljLWRkL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93ZWJsb2dpYy1kZC9idWlsZC54bWwKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRpc3BsYXktaGVhZGVyIj4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iLS0+UnVubmluZyAke2FudC5wcm9qZWN0Lm5hbWV9IHRlc3RzIGZyb20gJHtiYXNlZGlyfSAuLi4iLz4KICAgICA8L3RhcmdldD4KLSAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS11c2VyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0idXNlciIgdmFsdWU9IndsVXNlciIvPgpAQCAtNzYsNyArNzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTExNCw3ICsxMTQsNyBAQAogICAgICAgICA8L2phcj4KICAgICA8L3RhcmdldD4KIAotICAgIDwhLS0gdmFyaWFibGVzIG5lZWRlZCBieSBjdXN0b20tYnVpbGQgCisgICAgPCEtLSB2YXJpYWJsZXMgbmVlZGVkIGJ5IGN1c3RvbS1idWlsZAogICAgICAgICAgMS4gd2xwYXNzCiAgICAgICAgICAyLiB3bHVzZXIKICAgICAgICAgIDMuIHdscm9sZQpAQCAtMTc4LDcgKzE3OCw3IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2xyb2xlIiB2YWx1ZT0id2VibG9naWMtYXBwLXhtbCIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi1uZWdhdGl2ZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImN1c3RvbS1uZWctcnVuIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3bHVzZXIiIHZhbHVlPSJ3bFVzZXIiLz4KQEAgLTE5Myw3ICsxOTMsNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Indscm9sZSIgdmFsdWU9IndlYmxvZ2ljLWFwcC14bWwiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL2J1aWxkLnhtbAppbmRleCA3NmY5ODA0Li44YWNiMjUwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCI+CiAgICAgICAgIDxyZWNvcmQgbmFtZT0ic2VjdXJpdHktd3NzLm91dHB1dCIgYWN0aW9uPSJzdGFydCIgLz4KIAotCTxhbnQgZGlyPSJlbmNUaGVuU2lnbi1kZWZhdWx0LWNvbmYiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9ImVuY1RoZW5TaWduLWRlZmF1bHQtY29uZiIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9InBlcm1ldGhvZCIgdGFyZ2V0PSJhbGwiLz4KIAogICAgICAgICA8IS0tIEpXUyAyLjAgLS0+CkBAIC00NCw2ICs0NCw2IEBACiA8IS0tICAgICAgICA8YW50IGRpcj0ic3NsIiB0YXJnZXQ9ImFsbCIvPi0tPgogPCEtLSAgICAgICAgPGFudCBkaXI9InNzbGNsaWVudGNlcnQiIHRhcmdldD0iYWxsIi8+LS0+CiAKLSAgICAgICAgPHJlY29yZCBuYW1lPSJzZWN1cml0eS13c3Mub3V0cHV0IiBhY3Rpb249InN0b3AiIC8+ICAgIAorICAgICAgICA8cmVjb3JkIG5hbWU9InNlY3VyaXR5LXdzcy5vdXRwdXQiIGFjdGlvbj0ic3RvcCIgLz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9lbmNUaGVuU2lnbi1kZWZhdWx0LWNvbmYvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL2VuY1RoZW5TaWduLWRlZmF1bHQtY29uZi9idWlsZC54bWwKaW5kZXggZmM3YWYwMy4uMjFkM2RhYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL2VuY1RoZW5TaWduLWRlZmF1bHQtY29uZi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL2VuY1RoZW5TaWduLWRlZmF1bHQtY29uZi9idWlsZC54bWwKQEAgLTM1LDExNCArMzUsMTE0IEBACiAKIDwhLS0gPT09PT09PT0gVGFyZ2V0cyBieSBleGVjdXRpb24gZ3JhbnVsYXJpdHkgPT09PT09PT09PSAtLT4KICAgICA8dGFyZ2V0IG5hbWU9ImFsbCI+Ci0JPGFudGNhbGwgdGFyZ2V0PSJzZXR1cCIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0dXAiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW53c3RhcmdldHMiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndzLXRhcmdldCIgdmFsdWU9ImFsbCIvPgogICAgICAgICA8L2FudGNhbGw+Ci0JPGFudGNhbGwgdGFyZ2V0PSJ1bnNldHVwIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bnNldHVwIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuLXRlc3QiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bndzdGFyZ2V0cyI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0id3MtdGFyZ2V0IiB2YWx1ZT0icnVuLXRlc3QiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW53c3RhcmdldHMiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndzLXRhcmdldCIgdmFsdWU9ImNsZWFuIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVud3N0YXJnZXRzIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3cy10YXJnZXQiIHZhbHVlPSJidWlsZCIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95Ij4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW53c3RhcmdldHMiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndzLXRhcmdldCIgdmFsdWU9ImRlcGxveSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bndzdGFyZ2V0cyI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0id3MtdGFyZ2V0IiB2YWx1ZT0idW5kZXBsb3kiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVud3N0YXJnZXRzIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3cy10YXJnZXQiIHZhbHVlPSJydW4iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JPCEtLSBleHBvcnRzIGNlcnRkYiBzdHVmZiBhbmQgaW1wb3J0cyBpbnRvIGtleXN0b3JlIC0tPgotCTxhbnRjYWxsIHRhcmdldD0icHJlcGFyZS1zdG9yZS1uaWNrbmFtZS1jb21tb24iPgorICAgIDwhLS0gZXhwb3J0cyBjZXJ0ZGIgc3R1ZmYgYW5kIGltcG9ydHMgaW50byBrZXlzdG9yZSAtLT4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InByZXBhcmUtc3RvcmUtbmlja25hbWUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJjZXJ0Lm5pY2tuYW1lIiB2YWx1ZT0iczFhcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0JPGFudGNhbGwgdGFyZ2V0PSJlbmFibGUtd3NzLW1lc3NhZ2Utc2VjdXJpdHktcHJvdmlkZXIiPgorICAgIDxhbnRjYWxsIHRhcmdldD0iZW5hYmxlLXdzcy1tZXNzYWdlLXNlY3VyaXR5LXByb3ZpZGVyIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3c3Muc2VydmVyLnByb3ZpZGVyLm5hbWUiIHZhbHVlPSJTZXJ2ZXJQcm92aWRlciIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Indzcy5jbGllbnQucHJvdmlkZXIubmFtZSIgdmFsdWU9IkNsaWVudFByb3ZpZGVyIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAotCTxhbnRjYWxsIHRhcmdldD0ic2V0LXdzcy1wcm92aWRlci1yZXF1ZXN0LWF1dGgtcmVjaXBpZW50Ij4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InNldC13c3MtcHJvdmlkZXItcmVxdWVzdC1hdXRoLXJlY2lwaWVudCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0id3NzLnByb3ZpZGVyLm5hbWUiIHZhbHVlPSJTZXJ2ZXJQcm92aWRlciIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InJlcXVlc3QuYXV0aC5yZWNpcGllbnQiIHZhbHVlPSJiZWZvcmUtY29udGVudCIvPgogICAgICAgICA8L2FudGNhbGw+Ci0JPGFudGNhbGwgdGFyZ2V0PSJzZXQtd3NzLXByb3ZpZGVyLXJlc3BvbnNlLWF1dGgtcmVjaXBpZW50Ij4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InNldC13c3MtcHJvdmlkZXItcmVzcG9uc2UtYXV0aC1yZWNpcGllbnQiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Indzcy5wcm92aWRlci5uYW1lIiB2YWx1ZT0iU2VydmVyUHJvdmlkZXIiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJyZXNwb25zZS5hdXRoLnJlY2lwaWVudCIgdmFsdWU9ImFmdGVyLWNvbnRlbnQiLz4KICAgICAgICAgPC9hbnRjYWxsPgotCTxhbnRjYWxsIHRhcmdldD0ic2V0LXdzcy1wcm92aWRlci1yZXF1ZXN0LWF1dGgtcmVjaXBpZW50Ij4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InNldC13c3MtcHJvdmlkZXItcmVxdWVzdC1hdXRoLXJlY2lwaWVudCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0id3NzLnByb3ZpZGVyLm5hbWUiIHZhbHVlPSJDbGllbnRQcm92aWRlciIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InJlcXVlc3QuYXV0aC5yZWNpcGllbnQiIHZhbHVlPSJiZWZvcmUtY29udGVudCIvPgogICAgICAgICA8L2FudGNhbGw+Ci0JPGFudGNhbGwgdGFyZ2V0PSJzZXQtd3NzLXByb3ZpZGVyLXJlc3BvbnNlLWF1dGgtcmVjaXBpZW50Ij4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InNldC13c3MtcHJvdmlkZXItcmVzcG9uc2UtYXV0aC1yZWNpcGllbnQiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Indzcy5wcm92aWRlci5uYW1lIiB2YWx1ZT0iQ2xpZW50UHJvdmlkZXIiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJyZXNwb25zZS5hdXRoLnJlY2lwaWVudCIgdmFsdWU9ImFmdGVyLWNvbnRlbnQiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCi0JPGFudGNhbGwgdGFyZ2V0PSJiYWNrdXAtZ2xhc3NmaXNoLWFjYy54bWwiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9ImVuYWJsZS13c3MtYXBwY2xpZW50LW1lc3NhZ2Utc2VjdXJpdHktcHJvdmlkZXIiPgorICAgIDxhbnRjYWxsIHRhcmdldD0iYmFja3VwLWdsYXNzZmlzaC1hY2MueG1sIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJlbmFibGUtd3NzLWFwcGNsaWVudC1tZXNzYWdlLXNlY3VyaXR5LXByb3ZpZGVyIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3c3MuY2xpZW50LnByb3ZpZGVyLm5hbWUiIHZhbHVlPSJDbGllbnRQcm92aWRlciIvPgogICAgICAgICA8L2FudGNhbGw+Ci0JPGFudGNhbGwgdGFyZ2V0PSJzZXQtd3NzLWFwcGNsaWVudC1yZXF1ZXN0LXJlY2lwaWVudCI+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXQtd3NzLWFwcGNsaWVudC1yZXF1ZXN0LXJlY2lwaWVudCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0icmVxdWVzdC5hdXRoLnJlY2lwaWVudCIgdmFsdWU9ImJlZm9yZS1jb250ZW50Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KLQk8YW50Y2FsbCB0YXJnZXQ9InNldC13c3MtYXBwY2xpZW50LXJlc3BvbnNlLXJlY2lwaWVudCI+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXQtd3NzLWFwcGNsaWVudC1yZXNwb25zZS1yZWNpcGllbnQiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InJlc3BvbnNlLmF1dGgucmVjaXBpZW50IiB2YWx1ZT0iYWZ0ZXItY29udGVudCIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXItaW5zdGFuY2UtY29tbW9uIiAvPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InVuc2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIiA+Ci0JPGFudGNhbGwgdGFyZ2V0PSJzZXQtd3NzLXByb3ZpZGVyLXJlcXVlc3QtYXV0aC1yZWNpcGllbnQiPgorICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0LXdzcy1wcm92aWRlci1yZXF1ZXN0LWF1dGgtcmVjaXBpZW50Ij4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3c3MucHJvdmlkZXIubmFtZSIgdmFsdWU9IlNlcnZlclByb3ZpZGVyIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0icmVxdWVzdC5hdXRoLnJlY2lwaWVudCIgdmFsdWU9IiIvPgogICAgICAgICA8L2FudGNhbGw+Ci0JPGFudGNhbGwgdGFyZ2V0PSJzZXQtd3NzLXByb3ZpZGVyLXJlc3BvbnNlLWF1dGgtcmVjaXBpZW50Ij4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InNldC13c3MtcHJvdmlkZXItcmVzcG9uc2UtYXV0aC1yZWNpcGllbnQiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Indzcy5wcm92aWRlci5uYW1lIiB2YWx1ZT0iU2VydmVyUHJvdmlkZXIiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJyZXNwb25zZS5hdXRoLnJlY2lwaWVudCIgdmFsdWU9IiIvPgogICAgICAgICA8L2FudGNhbGw+Ci0JPGFudGNhbGwgdGFyZ2V0PSJzZXQtd3NzLXByb3ZpZGVyLXJlcXVlc3QtYXV0aC1yZWNpcGllbnQiPgorICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0LXdzcy1wcm92aWRlci1yZXF1ZXN0LWF1dGgtcmVjaXBpZW50Ij4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3c3MucHJvdmlkZXIubmFtZSIgdmFsdWU9IkNsaWVudFByb3ZpZGVyIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0icmVxdWVzdC5hdXRoLnJlY2lwaWVudCIgdmFsdWU9IiIvPgogICAgICAgICA8L2FudGNhbGw+Ci0JPGFudGNhbGwgdGFyZ2V0PSJzZXQtd3NzLXByb3ZpZGVyLXJlc3BvbnNlLWF1dGgtcmVjaXBpZW50Ij4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InNldC13c3MtcHJvdmlkZXItcmVzcG9uc2UtYXV0aC1yZWNpcGllbnQiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Indzcy5wcm92aWRlci5uYW1lIiB2YWx1ZT0iQ2xpZW50UHJvdmlkZXIiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJyZXNwb25zZS5hdXRoLnJlY2lwaWVudCIgdmFsdWU9IiIvPgogICAgICAgICA8L2FudGNhbGw+Ci0JPGFudGNhbGwgdGFyZ2V0PSJkaXNhYmxlLXdzcy1tZXNzYWdlLXNlY3VyaXR5LXByb3ZpZGVyIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJkaXNhYmxlLXdzcy1hcHBjbGllbnQtbWVzc2FnZS1zZWN1cml0eS1wcm92aWRlciI+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJkaXNhYmxlLXdzcy1tZXNzYWdlLXNlY3VyaXR5LXByb3ZpZGVyIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJkaXNhYmxlLXdzcy1hcHBjbGllbnQtbWVzc2FnZS1zZWN1cml0eS1wcm92aWRlciI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0id3NzLmNsaWVudC5wcm92aWRlci5uYW1lIiB2YWx1ZT0iQ2xpZW50UHJvdmlkZXIiLz4KICAgICAgICAgPC9hbnRjYWxsPgotCTxhbnRjYWxsIHRhcmdldD0idW5zZXQtd3NzLWFwcGNsaWVudC1yZXF1ZXN0LXJlY2lwaWVudCI+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bnNldC13c3MtYXBwY2xpZW50LXJlcXVlc3QtcmVjaXBpZW50Ij4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJyZXF1ZXN0LmF1dGgucmVjaXBpZW50IiB2YWx1ZT0iYmVmb3JlLWNvbnRlbnQiLz4KICAgICAgICAgPC9hbnRjYWxsPgotCTxhbnRjYWxsIHRhcmdldD0idW5zZXQtd3NzLWFwcGNsaWVudC1yZXNwb25zZS1yZWNpcGllbnQiPgorICAgIDxhbnRjYWxsIHRhcmdldD0idW5zZXQtd3NzLWFwcGNsaWVudC1yZXNwb25zZS1yZWNpcGllbnQiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InJlc3BvbnNlLmF1dGgucmVjaXBpZW50IiB2YWx1ZT0iYWZ0ZXItY29udGVudCIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXItaW5zdGFuY2UtY29tbW9uIiAvPgpAQCAtMTYxLDcgKzE2MSw3IEBACiAgICAgICAgIDxyZWNvcmQgbmFtZT0ic2VjdXJpdHktd3NzLm91dHB1dCIgYWN0aW9uPSJzdG9wIiAvPgogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPiBVc2FnZToKKyAgICA8ZWNobz4gVXNhZ2U6CiAgICAgPT09PT09PT0gVGFyZ2V0cyBieSBleGVjdXRpb24gZ3JhbnVsYXJpdHkgPT09PT09PT09CiAKICAgICBhbnQgY2xlYW4gKENsZWFucyBhbGwgd3MgdGVzdHMpCkBAIC0xNzgsMTEgKzE3OCwxMSBAQAogICAgIGFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgd3MgdGVzdHMpCiAKICAgICA9PT09PSBUYXJnZXRzIGJ5IHRlY2hub2xveSBhbmQgZXhlY3V0aW9uIGdyYW51bGFyaXR5ID09PT09PQotICAgIE5vdGU6IFJ1biB0aGUgY29tbWFuZCBvZiB0aGUgZm9sbG93aW5nIHR5cGU6IAorICAgIE5vdGU6IFJ1biB0aGUgY29tbWFuZCBvZiB0aGUgZm9sbG93aW5nIHR5cGU6CiAKICAgICAgICAgICAgICUgYW50IHNlcnZsZXR3cyAtRHdzLXRhcmdldD1jbGVhbgogCiAgICAgdG8gcnVuIHRoZSAnY2xlYW4nIHRhcmdldCBmb3IgJ3NlcnZsZXR3cycgdGVzdHMKLQk8L2VjaG8+CisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL2VuY1RoZW5TaWduLWRlZmF1bHQtY29uZi9zZXJ2bGV0d3MvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9lbmNUaGVuU2lnbi1kZWZhdWx0LWNvbmYvc2VydmxldHdzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNjE3YjRmYS4uN2FjNDg3OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL2VuY1RoZW5TaWduLWRlZmF1bHQtY29uZi9zZXJ2bGV0d3MvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvZW5jVGhlblNpZ24tZGVmYXVsdC1jb25mL3NlcnZsZXR3cy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxOSArMTUsMTkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndzIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS10YXhjYWwiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXRheGNhbCIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJjb20uc3VuLnMxYXNkZXYuc2VjdXJpdHkud3NzLmRlZnByb3ZpZGVyLnNlcnZsZXQudGF4Y2FsLmNsaWVudC5UYXhDYWxDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iY29tLnN1bi5zMWFzZGV2LnNlY3VyaXR5Lndzcy5kZWZwcm92aWRlci5zZXJ2bGV0LnRheGNhbC5jbGllbnQuVGF4Q2FsQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3c2RsLWZpbGUiIHZhbHVlPSJ3c2RsL1RheENhbFNlcnZsZXRTZXJ2aWNlLndzZGwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9lbmNUaGVuU2lnbi1kZWZhdWx0LWNvbmYvc2VydmxldHdzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9lbmNUaGVuU2lnbi1kZWZhdWx0LWNvbmYvc2VydmxldHdzL2J1aWxkLnhtbAppbmRleCA4ZWExMWMxLi44NGVjYjJhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvZW5jVGhlblNpZ24tZGVmYXVsdC1jb25mL3NlcnZsZXR3cy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL2VuY1RoZW5TaWduLWRlZmF1bHQtY29uZi9zZXJ2bGV0d3MvYnVpbGQueG1sCkBAIC0zMSwxMCArMzEsMTAgQEAKICAgICAmdGVzdHByb3BlcnRpZXM7CiAgICAgJmNvbW1vblNlY3VyaXR5OwogCi0gICAgPHRhcmdldCBuYW1lPSJhbGwiIAorICAgIDx0YXJnZXQgbmFtZT0iYWxsIgogICAgIGRlcGVuZHM9ImNsZWFuLCBidWlsZCwgc2V0dXAsIGRlcGxveSwgcnVuLCB1bmRlcGxveSwgdW5zZXR1cCIvPgotICAgICAKLSAgICA8dGFyZ2V0IG5hbWU9InJ1bi10ZXN0IiAKKworICAgIDx0YXJnZXQgbmFtZT0icnVuLXRlc3QiCiAgICAgZGVwZW5kcz0iY2xlYW4sIGJ1aWxkLCBkZXBsb3ksIHJ1biwgdW5kZXBsb3kiLz4KIAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTU1LDE0ICs1NSwxNCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJnZW5lcmF0ZS1hcnRpZmFjdHMiPgotCTxlY2hvIG1lc3NhZ2U9IiBDbGllbnQgTWFwcGluZyBmaWxlIDogJHtjbGllbnQtbWFwcGluZy54bWx9Ii8+CisgICAgPGVjaG8gbWVzc2FnZT0iIENsaWVudCBNYXBwaW5nIGZpbGUgOiAke2NsaWVudC1tYXBwaW5nLnhtbH0iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJpbXBvcnQtd3NkbCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ibWFwcGluZy5maWxlIgogICAgICAgICAgICAgdmFsdWU9IiR7Y2xpZW50LW1hcHBpbmcueG1sfSIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImNvbmZpZy13c2RsLmZpbGUiCiAgICAgICAgICAgICB2YWx1ZT0iY29uZmlnL2NvbmZpZy1jbGllbnQueG1sIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLQk8ZWNobyBtZXNzYWdlPSJXZWIgTWFwcGluZyBGaWxlIDogJHt3ZWItbWFwcGluZy54bWx9Ii8+CisgICAgPGVjaG8gbWVzc2FnZT0iV2ViIE1hcHBpbmcgRmlsZSA6ICR7d2ViLW1hcHBpbmcueG1sfSIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImltcG9ydC13c2RsIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJtYXBwaW5nLmZpbGUiCiAgICAgICAgICAgICB2YWx1ZT0iJHt3ZWItbWFwcGluZy54bWx9Ii8+CkBAIC0xMzcsNjcgKzEzNyw2NyBAQAogICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImluaXQtY29tbW9uLGNvbXBpbGUiPgotCTxhbnRjYWxsIHRhcmdldD0id3MtcGFja2FnZS1hcHBjbGllbnRqYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgPGFudGNhbGwgdGFyZ2V0PSJ3cy1wYWNrYWdlLWFwcGNsaWVudGphci1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iY29tL3N1bi9zMWFzZGV2L3NlY3VyaXR5L3dzcy9kZWZwcm92aWRlci9zZXJ2bGV0L3RheGNhbC9jbGllbnQvKi5jbGFzcyIgLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5qYXIiCiAgICAgICAgICAgICAgIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+Ci0JPC9hbnRjYWxsPgotCTwhLS1hbnRjYWxsIHRhcmdldD0id3Mtd2FyLWNvbW1vbiItLT4KLQk8YW50Y2FsbCB0YXJnZXQ9IndzLXBhY2thZ2Utd2FyLWNvbW1vbiI+CisgICAgPC9hbnRjYWxsPgorICAgIDwhLS1hbnRjYWxsIHRhcmdldD0id3Mtd2FyLWNvbW1vbiItLT4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9IndzLXBhY2thZ2Utd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2FyLmZpbGUiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2FyLmNsYXNzZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9Indhci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iY29tL3N1bi9zMWFzZGV2L3NlY3VyaXR5L3dzcy9kZWZwcm92aWRlci9zZXJ2bGV0L3RheGNhbC8qLmNsYXNzIiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im1hcHBpbmdmaWxlLm5hbWUiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im1hcHBpbmdmaWxlLm5hbWUiCiAgICAgICAgICAgICAgIHZhbHVlPSIke3dlYi1tYXBwaW5nLnhtbH0iIC8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0ibWFwcGluZ2ZpbGUubG9jYXRpb24iIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im1hcHBpbmdmaWxlLmxvY2F0aW9uIgogICAgICAgICAgICAgICB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJzZXJ2aWNlcy54bWwiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYnNlcnZpY2VzLnhtbCIKICAgICAgICAgICAgICAgdmFsdWU9IiR7d2ViLXdlYnNlcnZpY2VzLnhtbH0iIC8+Ci0JPC9hbnRjYWxsPgorICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJlYXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotCSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JPHByb3BlcnR5IG5hbWU9IlZNQVJHUyIgdmFsdWU9Ii1EamF2YXgubmV0LnNzbC5rZXlTdG9yZT0ke215a2V5c3RvcmUuZGIuZmlsZX0gLURqYXZheC5uZXQuc3NsLnRydXN0U3RvcmU9JHtteXRydXN0c3RvcmUuZGIuZmlsZX0gLURqYXZheC5uZXQuc3NsLmtleVN0b3JlUGFzc3dvcmQ9JHtzc2wucGFzc3dvcmR9IC1EamF2YXgubmV0LnNzbC50cnVzdFN0b3JlUGFzc3dvcmQ9JHtzc2wucGFzc3dvcmR9Ii8+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzdGF0ZXRheC1lbmRwb2ludC11cmwiIAorICAgIDxwcm9wZXJ0eSBuYW1lPSJWTUFSR1MiIHZhbHVlPSItRGphdmF4Lm5ldC5zc2wua2V5U3RvcmU9JHtteWtleXN0b3JlLmRiLmZpbGV9IC1EamF2YXgubmV0LnNzbC50cnVzdFN0b3JlPSR7bXl0cnVzdHN0b3JlLmRiLmZpbGV9IC1EamF2YXgubmV0LnNzbC5rZXlTdG9yZVBhc3N3b3JkPSR7c3NsLnBhc3N3b3JkfSAtRGphdmF4Lm5ldC5zc2wudHJ1c3RTdG9yZVBhc3N3b3JkPSR7c3NsLnBhc3N3b3JkfSIvPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0ic3RhdGV0YXgtZW5kcG9pbnQtdXJsIgogICAgICAgICAgICAgdmFsdWU9Imh0dHA6Ly8ke2h0dHAuaG9zdH06JHtodHRwLnBvcnR9L1RheENhbFdTU2VydmxldC9zdGF0ZXRheHNlcnZsZXQiLz4KLQk8ZWNobyBtZXNzYWdlPSJTdGF0ZSBUYXggRW5kcG9pbnQgVVJMID0gJHtzdGF0ZXRheC1lbmRwb2ludC11cmx9Ii8+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJmZWR0YXgtZW5kcG9pbnQtdXJsIiAKKyAgICA8ZWNobyBtZXNzYWdlPSJTdGF0ZSBUYXggRW5kcG9pbnQgVVJMID0gJHtzdGF0ZXRheC1lbmRwb2ludC11cmx9Ii8+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJmZWR0YXgtZW5kcG9pbnQtdXJsIgogICAgICAgICAgICAgdmFsdWU9Imh0dHA6Ly8ke2h0dHAuaG9zdH06JHtodHRwLnBvcnR9L1RheENhbFdTU2VydmxldC9mZWR0YXhzZXJ2bGV0Ii8+Ci0JPGVjaG8gbWVzc2FnZT0iRmVkIFRheCBFbmRwb2ludCBVUkwgPSAke2ZlZHRheC1lbmRwb2ludC11cmx9Ii8+Ci0JPGVjaG8gbWVzc2FnZT0iVk1BUkdTPSAke1ZNQVJHU30iLz4KLSAgIAk8ZXhlYyBleGVjdXRhYmxlPSIke0FQUENMSUVOVH0iPgotICAgICAgCQk8ZW52IGtleT0iVk1BUkdTIiB2YWx1ZT0iJHtWTUFSR1N9Ii8+Ci0gICAgICAgIAk8YXJnIHZhbHVlPSItY2xpZW50IiAvPgotICAgICAgICAJPGFyZyB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHBDbGllbnQuamFyIi8+Ci0gICAgICAgIAk8YXJnIHZhbHVlPSItdGV4dGF1dGgiLz4KLSAgICAgICAgCTxhcmcgdmFsdWU9Ii11c2VyIi8+Ci0gICAgICAgIAk8YXJnIHZhbHVlPSJqMmVlIi8+Ci0gICAgICAgCQk8YXJnIHZhbHVlPSItcGFzc3dvcmQiLz4KLSAgICAgICAgCTxhcmcgdmFsdWU9ImoyZWUiLz4KLSAgICAgICAgCTxhcmcgbGluZT0iLXhtbCAke2FkbWluLmRvbWFpbi5kaXJ9LyR7YWRtaW4uZG9tYWlufS9jb25maWcvZ2xhc3NmaXNoLWFjYy54bWwiLz4KLSAgICAgICAgCTxhcmcgbGluZT0iJHtzdGF0ZXRheC1lbmRwb2ludC11cmx9ICR7ZmVkdGF4LWVuZHBvaW50LXVybH0iLz4KKyAgICA8ZWNobyBtZXNzYWdlPSJGZWQgVGF4IEVuZHBvaW50IFVSTCA9ICR7ZmVkdGF4LWVuZHBvaW50LXVybH0iLz4KKyAgICA8ZWNobyBtZXNzYWdlPSJWTUFSR1M9ICR7Vk1BUkdTfSIvPgorICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVBQQ0xJRU5UfSI+CisgICAgICAgICAgICAgIDxlbnYga2V5PSJWTUFSR1MiIHZhbHVlPSIke1ZNQVJHU30iLz4KKyAgICAgICAgICAgIDxhcmcgdmFsdWU9Ii1jbGllbnQiIC8+CisgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcENsaWVudC5qYXIiLz4KKyAgICAgICAgICAgIDxhcmcgdmFsdWU9Ii10ZXh0YXV0aCIvPgorICAgICAgICAgICAgPGFyZyB2YWx1ZT0iLXVzZXIiLz4KKyAgICAgICAgICAgIDxhcmcgdmFsdWU9ImoyZWUiLz4KKyAgICAgICAgICAgICAgIDxhcmcgdmFsdWU9Ii1wYXNzd29yZCIvPgorICAgICAgICAgICAgPGFyZyB2YWx1ZT0iajJlZSIvPgorICAgICAgICAgICAgPGFyZyBsaW5lPSIteG1sICR7YWRtaW4uZG9tYWluLmRpcn0vJHthZG1pbi5kb21haW59L2NvbmZpZy9nbGFzc2Zpc2gtYWNjLnhtbCIvPgorICAgICAgICAgICAgPGFyZyBsaW5lPSIke3N0YXRldGF4LWVuZHBvaW50LXVybH0gJHtmZWR0YXgtZW5kcG9pbnQtdXJsfSIvPgogICAgICAgPC9leGVjPgogICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KIAotICA8IS0tIAotICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IAorICA8IS0tCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgVXNlciBEZWZpbmVkIHNwZWNpZmljIHRhcmdldHMKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAtLT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9lbmNUaGVuU2lnbi1kZWZhdWx0LWNvbmYvc2VydmxldHdzL2NsaWVudC9UYXhDYWxDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9lbmNUaGVuU2lnbi1kZWZhdWx0LWNvbmYvc2VydmxldHdzL2NsaWVudC9UYXhDYWxDbGllbnQuamF2YQppbmRleCBiNzdkZGUzLi5iNTVhMDM5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvZW5jVGhlblNpZ24tZGVmYXVsdC1jb25mL3NlcnZsZXR3cy9jbGllbnQvVGF4Q2FsQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL2VuY1RoZW5TaWduLWRlZmF1bHQtY29uZi9zZXJ2bGV0d3MvY2xpZW50L1RheENhbENsaWVudC5qYXZhCkBAIC0yNCw5NSArMjQsOTUgQEAKIAogcHVibGljIGNsYXNzIFRheENhbENsaWVudCB7CiAKLQlwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgc3RhdGVUYXhFbmRwb2ludCA9IG51bGw7Ci0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGZlZFRheEVuZHBvaW50ID0gbnVsbDsKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdFN1aXRlID0gIlNlYzo6U2VydmxldF9CYXNlZF9XU1NfdGVzdCBFbmNyeXB0IHRoZW4gU2lnbiI7Ci0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RDYXNlID0gbnVsbDsKLQlwcml2YXRlIHN0YXRpYyBUYXhDYWxTZXJ2bGV0U2VydmljZSB0YXhDYWxTZXJ2aWNlID0gbnVsbDsKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgc3RhdGVUYXhFbmRwb2ludCA9IG51bGw7CisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGZlZFRheEVuZHBvaW50ID0gbnVsbDsKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdFN1aXRlID0gIlNlYzo6U2VydmxldF9CYXNlZF9XU1NfdGVzdCBFbmNyeXB0IHRoZW4gU2lnbiI7CisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RDYXNlID0gbnVsbDsKKyAgICBwcml2YXRlIHN0YXRpYyBUYXhDYWxTZXJ2bGV0U2VydmljZSB0YXhDYWxTZXJ2aWNlID0gbnVsbDsKIAotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKIAotCQlpZihhcmdzWzBdID09IG51bGwgfHwgYXJnc1sxXSA9PSBudWxsKXsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiVGF4Q2FsIGNsaWVudDogQXJndW1lbnQgbWlzc2luZy4gUGxlYXNlIHByb3ZpZGUgdGFyZ2V0IiArCi0JCQkJICJlbmRwb2ludCBhZGRyZXNzIGFzIGFyZ3VtZW50Iik7Ci0JCQlTeXN0ZW0uZXhpdCgxKTsKLQkJfSBlbHNlIHsKLQkJCXN0YXRlVGF4RW5kcG9pbnQgPSBhcmdzWzBdOwotCQkJZmVkVGF4RW5kcG9pbnQgPSBhcmdzWzFdOwotCQl9CisgICAgICAgIGlmKGFyZ3NbMF0gPT0gbnVsbCB8fCBhcmdzWzFdID09IG51bGwpeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUYXhDYWwgY2xpZW50OiBBcmd1bWVudCBtaXNzaW5nLiBQbGVhc2UgcHJvdmlkZSB0YXJnZXQiICsKKyAgICAgICAgICAgICAgICAgImVuZHBvaW50IGFkZHJlc3MgYXMgYXJndW1lbnQiKTsKKyAgICAgICAgICAgIFN5c3RlbS5leGl0KDEpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3RhdGVUYXhFbmRwb2ludCA9IGFyZ3NbMF07CisgICAgICAgICAgICBmZWRUYXhFbmRwb2ludCA9IGFyZ3NbMV07CisgICAgICAgIH0KIAotCQlzdGF0LmFkZERlc2NyaXB0aW9uKHRlc3RTdWl0ZSk7Ci0JCXRyeSB7IAotCQkJVGF4Q2FsQ2xpZW50IGNsaWVudCA9IG5ldyBUYXhDYWxDbGllbnQoKTsKLQkJCUNvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkJCXRheENhbFNlcnZpY2UgPSAoVGF4Q2FsU2VydmxldFNlcnZpY2UpCi0JCQkJaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3NlcnZpY2UvVGF4Q2FsU2VydmxldFNlcnZpY2UiKTsKKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbih0ZXN0U3VpdGUpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgVGF4Q2FsQ2xpZW50IGNsaWVudCA9IG5ldyBUYXhDYWxDbGllbnQoKTsKKyAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgICAgIHRheENhbFNlcnZpY2UgPSAoVGF4Q2FsU2VydmxldFNlcnZpY2UpCisgICAgICAgICAgICAgICAgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3NlcnZpY2UvVGF4Q2FsU2VydmxldFNlcnZpY2UiKTsKIAotCQkJY2xpZW50LmNhbGxTdGF0ZVRheFNlcnZpY2UoKTsKLQkJCWNsaWVudC5jYWxsRmVkVGF4U2VydmljZSgpOwotCQkJc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlLCBzdGF0LlBBU1MpOwotCQl9Y2F0Y2goRXhjZXB0aW9uIGUpewotCQkJc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlLCBzdGF0LkZBSUwpOwotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQorICAgICAgICAgICAgY2xpZW50LmNhbGxTdGF0ZVRheFNlcnZpY2UoKTsKKyAgICAgICAgICAgIGNsaWVudC5jYWxsRmVkVGF4U2VydmljZSgpOworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlLCBzdGF0LlBBU1MpOworICAgICAgICB9Y2F0Y2goRXhjZXB0aW9uIGUpeworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlLCBzdGF0LkZBSUwpOworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQogCi0JCXN0YXQucHJpbnRTdW1tYXJ5KHRlc3RTdWl0ZSk7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KHRlc3RTdWl0ZSk7CiAgICAgfQotICAgIAotCXB1YmxpYyB2b2lkIGNhbGxTdGF0ZVRheFNlcnZpY2UoKSB7Ci0JCWRvdWJsZSBpbmNvbWUgPSA4NTAwMC4wMDsKLQkJZG91YmxlIGRlZHVjdGlvbnMgPSA1MDAwLjAwOwogCi0JCS8vU3RyaW5nIHRhcmdldEVuZHBvaW50QWRkcmVzcyA9Ci0JCS8vCSJodHRwOi8vbG9jYWxob3N0OjEwMjQvdGF4Y2FsY3VsYXRvciI7CisgICAgcHVibGljIHZvaWQgY2FsbFN0YXRlVGF4U2VydmljZSgpIHsKKyAgICAgICAgZG91YmxlIGluY29tZSA9IDg1MDAwLjAwOworICAgICAgICBkb3VibGUgZGVkdWN0aW9ucyA9IDUwMDAuMDA7CiAKLQkJdHJ5IHsKKyAgICAgICAgLy9TdHJpbmcgdGFyZ2V0RW5kcG9pbnRBZGRyZXNzID0KKyAgICAgICAgLy8gICAgImh0dHA6Ly9sb2NhbGhvc3Q6MTAyNC90YXhjYWxjdWxhdG9yIjsKIAotCQkJU3RhdGVUYXhJRiB0YXhDYWxJRlBvcnQgPSB0YXhDYWxTZXJ2aWNlLmdldFN0YXRlVGF4SUZQb3J0KCk7CisgICAgICAgIHRyeSB7CiAKLQkJCSgoU3R1Yil0YXhDYWxJRlBvcnQpLl9zZXRQcm9wZXJ0eSAoU3R1Yi5FTkRQT0lOVF9BRERSRVNTX1BST1BFUlRZLAotCQkJCXN0YXRlVGF4RW5kcG9pbnQpOworICAgICAgICAgICAgU3RhdGVUYXhJRiB0YXhDYWxJRlBvcnQgPSB0YXhDYWxTZXJ2aWNlLmdldFN0YXRlVGF4SUZQb3J0KCk7CiAKLQkJCWRvdWJsZSBzdGF0ZVRheCA9IHRheENhbElGUG9ydC5nZXRTdGF0ZVRheChpbmNvbWUsIGRlZHVjdGlvbnMpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZSB0YXggZnJvbSBzZXJ2bGV0IGJhc2VkIFRheENhbFNlcnZpY2UgOiIgKyBzdGF0ZVRheCk7CisgICAgICAgICAgICAoKFN0dWIpdGF4Q2FsSUZQb3J0KS5fc2V0UHJvcGVydHkgKFN0dWIuRU5EUE9JTlRfQUREUkVTU19QUk9QRVJUWSwKKyAgICAgICAgICAgICAgICBzdGF0ZVRheEVuZHBvaW50KTsKIAotCQkJaWYoc3RhdGVUYXggPT0gMjQwMDAuMDApCi0JCQkJc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiBTdGF0ZVRheFBvcnQiLCBzdGF0LlBBU1MpOwotCQkJZWxzZQotCQkJCXN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgU3RhdGVUYXhQb3J0Iiwgc3RhdC5GQUlMKTsKKyAgICAgICAgICAgIGRvdWJsZSBzdGF0ZVRheCA9IHRheENhbElGUG9ydC5nZXRTdGF0ZVRheChpbmNvbWUsIGRlZHVjdGlvbnMpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZSB0YXggZnJvbSBzZXJ2bGV0IGJhc2VkIFRheENhbFNlcnZpY2UgOiIgKyBzdGF0ZVRheCk7CiAKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRheENhbEVqYldlYnNlcnZpY2UgY2xpZW50IGZhaWxlZCIpOwotCQkJc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiBTdGF0ZVRheFBvcnQiLCBzdGF0LkZBSUwpOwotCQkJZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0gCi0JfQorICAgICAgICAgICAgaWYoc3RhdGVUYXggPT0gMjQwMDAuMDApCisgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiBTdGF0ZVRheFBvcnQiLCBzdGF0LlBBU1MpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgU3RhdGVUYXhQb3J0Iiwgc3RhdC5GQUlMKTsKIAotCXB1YmxpYyB2b2lkIGNhbGxGZWRUYXhTZXJ2aWNlKCkgewotCQlkb3VibGUgaW5jb21lID0gOTcwMDAuMDA7Ci0JCWRvdWJsZSBkZWR1Y3Rpb25zID0gNzAwMC4wMDsKLQkJdHJ5IHsKLQkJCS8vU3RyaW5nIHRhcmdldEVuZHBvaW50QWRkcmVzcyA9Ci0JCQkvLyJodHRwOi8vbG9jYWxob3N0OjEwMjQvRmluZEludGVyZXN0U2VydmxldC9GaW5kSW50ZXJlc3QiOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGF4Q2FsRWpiV2Vic2VydmljZSBjbGllbnQgZmFpbGVkIik7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIFN0YXRlVGF4UG9ydCIsIHN0YXQuRkFJTCk7CisgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQorICAgIH0KIAotCQkJRmVkVGF4SUYgdGF4Q2FsSUZQb3J0ID0gdGF4Q2FsU2VydmljZS5nZXRGZWRUYXhJRlBvcnQoKTsKLQkJCSgoU3R1Yil0YXhDYWxJRlBvcnQpLl9zZXRQcm9wZXJ0eSAoU3R1Yi5FTkRQT0lOVF9BRERSRVNTX1BST1BFUlRZLAotCQkJCWZlZFRheEVuZHBvaW50KTsKKyAgICBwdWJsaWMgdm9pZCBjYWxsRmVkVGF4U2VydmljZSgpIHsKKyAgICAgICAgZG91YmxlIGluY29tZSA9IDk3MDAwLjAwOworICAgICAgICBkb3VibGUgZGVkdWN0aW9ucyA9IDcwMDAuMDA7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICAvL1N0cmluZyB0YXJnZXRFbmRwb2ludEFkZHJlc3MgPQorICAgICAgICAgICAgLy8iaHR0cDovL2xvY2FsaG9zdDoxMDI0L0ZpbmRJbnRlcmVzdFNlcnZsZXQvRmluZEludGVyZXN0IjsKIAotCQkJZG91YmxlIGZlZFRheCA9IHRheENhbElGUG9ydC5nZXRGZWRUYXgoaW5jb21lLCBkZWR1Y3Rpb25zKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRmVkIHRheCBmcm9tIFNlcnZsZXQgYmFzZWQgVGF4Q2FsU2VydmljZSA6IiArIGZlZFRheCk7CisgICAgICAgICAgICBGZWRUYXhJRiB0YXhDYWxJRlBvcnQgPSB0YXhDYWxTZXJ2aWNlLmdldEZlZFRheElGUG9ydCgpOworICAgICAgICAgICAgKChTdHViKXRheENhbElGUG9ydCkuX3NldFByb3BlcnR5IChTdHViLkVORFBPSU5UX0FERFJFU1NfUFJPUEVSVFksCisgICAgICAgICAgICAgICAgZmVkVGF4RW5kcG9pbnQpOwogCi0JCQlpZihmZWRUYXggPT0gMTgwMDAuMDApCi0JCQkJc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiBGZWRUYXhQb3J0Iiwgc3RhdC5QQVNTKTsKLQkJCWVsc2UKLQkJCQlzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIEZlZFRheFBvcnQiLCBzdGF0LkZBSUwpOwotICAgICAgICAgICAgICAgIAotCQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiVGF4Q2FsU2VydmxldFdlYlNlcnZpY2UgY2xpZW50IGZhaWxlZCIpOwotCQkJc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiBGZWRUYXhQb3J0Iiwgc3RhdC5GQUlMKTsKLQkJCWV4LnByaW50U3RhY2tUcmFjZSgpOwotCQl9IAotCX0KKyAgICAgICAgICAgIGRvdWJsZSBmZWRUYXggPSB0YXhDYWxJRlBvcnQuZ2V0RmVkVGF4KGluY29tZSwgZGVkdWN0aW9ucyk7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZlZCB0YXggZnJvbSBTZXJ2bGV0IGJhc2VkIFRheENhbFNlcnZpY2UgOiIgKyBmZWRUYXgpOworCisgICAgICAgICAgICBpZihmZWRUYXggPT0gMTgwMDAuMDApCisgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiBGZWRUYXhQb3J0Iiwgc3RhdC5QQVNTKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIEZlZFRheFBvcnQiLCBzdGF0LkZBSUwpOworCisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUYXhDYWxTZXJ2bGV0V2ViU2VydmljZSBjbGllbnQgZmFpbGVkIik7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0U3VpdGUgKyAiIEZlZFRheFBvcnQiLCBzdGF0LkZBSUwpOworICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KKyAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9lbmNUaGVuU2lnbi1kZWZhdWx0LWNvbmYvc2VydmxldHdzL2NvbmZpZy9jb25maWctY2xpZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9lbmNUaGVuU2lnbi1kZWZhdWx0LWNvbmYvc2VydmxldHdzL2NvbmZpZy9jb25maWctY2xpZW50LnhtbAppbmRleCBkNTJmMDJjLi5lOTk4NTA4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvZW5jVGhlblNpZ24tZGVmYXVsdC1jb25mL3NlcnZsZXR3cy9jb25maWcvY29uZmlnLWNsaWVudC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL2VuY1RoZW5TaWduLWRlZmF1bHQtY29uZi9zZXJ2bGV0d3MvY29uZmlnL2NvbmZpZy1jbGllbnQueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxjb25maWd1cmF0aW9uCiAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+Ci0gIDx3c2RsIAorICA8d3NkbAogICAgICAgbG9jYXRpb249IndzZGwvVGF4Q2FsU2VydmxldFNlcnZpY2Uud3NkbCIKICAgICAgIHBhY2thZ2VOYW1lPSJjb20uc3VuLnMxYXNkZXYuc2VjdXJpdHkud3NzLmRlZnByb3ZpZGVyLnNlcnZsZXQudGF4Y2FsLmNsaWVudCIvPgogPC9jb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL2VuY1RoZW5TaWduLWRlZmF1bHQtY29uZi9zZXJ2bGV0d3MvY29uZmlnL2NvbmZpZy1zZWkueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL2VuY1RoZW5TaWduLWRlZmF1bHQtY29uZi9zZXJ2bGV0d3MvY29uZmlnL2NvbmZpZy1zZWkueG1sCmluZGV4IDNlMzliNjcuLmNmODBlMGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9lbmNUaGVuU2lnbi1kZWZhdWx0LWNvbmYvc2VydmxldHdzL2NvbmZpZy9jb25maWctc2VpLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvZW5jVGhlblNpZ24tZGVmYXVsdC1jb25mL3NlcnZsZXR3cy9jb25maWcvY29uZmlnLXNlaS54bWwKQEAgLTE4LDE2ICsxOCwxNiBAQAogLS0+CiAKIDxjb25maWd1cmF0aW9uCi0JeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheC1ycGMvcmkvY29uZmlnIj4KLQk8c2VydmljZSBuYW1lPSJUYXhDYWxTZXJ2bGV0U2VydmljZSIKLQkJdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGF4Lm9yZy93c2RsIgotCQl0eXBlTmFtZXNwYWNlPSJodHRwOi8vdGF4Lm9yZy90eXBlcyIKLQkJcGFja2FnZU5hbWU9ImNvbS5zdW4uczFhc2Rldi5zZWN1cml0eS53c3MuZGVmcHJvdmlkZXIuc2VydmxldC50YXhjYWwiPgotCQk8aW50ZXJmYWNlIG5hbWU9ImNvbS5zdW4uczFhc2Rldi5zZWN1cml0eS53c3MuZGVmcHJvdmlkZXIuc2VydmxldC50YXhjYWwuRmVkVGF4SUYiCi0JCQlzZXJ2YW50TmFtZT0iY29tLnN1bi5zMWFzZGV2LnNlY3VyaXR5Lndzcy5kZWZwcm92aWRlci5zZXJ2bGV0LnRheGNhbC5GZWRUYXhTZXJ2bGV0Ii8+Ci0JCTxpbnRlcmZhY2UgbmFtZT0iY29tLnN1bi5zMWFzZGV2LnNlY3VyaXR5Lndzcy5kZWZwcm92aWRlci5zZXJ2bGV0LnRheGNhbC5TdGF0ZVRheElGIgotCQkJc2VydmFudE5hbWU9ImNvbS5zdW4uczFhc2Rldi5zZWN1cml0eS53c3MuZGVmcHJvdmlkZXIuc2VydmxldC50YXhjYWwuU3RhdGVUYXhTZXJ2bGV0Ij4KLQkJPC9pbnRlcmZhY2U+Ci0JPC9zZXJ2aWNlPgorICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+CisgICAgPHNlcnZpY2UgbmFtZT0iVGF4Q2FsU2VydmxldFNlcnZpY2UiCisgICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RheC5vcmcvd3NkbCIKKyAgICAgICAgdHlwZU5hbWVzcGFjZT0iaHR0cDovL3RheC5vcmcvdHlwZXMiCisgICAgICAgIHBhY2thZ2VOYW1lPSJjb20uc3VuLnMxYXNkZXYuc2VjdXJpdHkud3NzLmRlZnByb3ZpZGVyLnNlcnZsZXQudGF4Y2FsIj4KKyAgICAgICAgPGludGVyZmFjZSBuYW1lPSJjb20uc3VuLnMxYXNkZXYuc2VjdXJpdHkud3NzLmRlZnByb3ZpZGVyLnNlcnZsZXQudGF4Y2FsLkZlZFRheElGIgorICAgICAgICAgICAgc2VydmFudE5hbWU9ImNvbS5zdW4uczFhc2Rldi5zZWN1cml0eS53c3MuZGVmcHJvdmlkZXIuc2VydmxldC50YXhjYWwuRmVkVGF4U2VydmxldCIvPgorICAgICAgICA8aW50ZXJmYWNlIG5hbWU9ImNvbS5zdW4uczFhc2Rldi5zZWN1cml0eS53c3MuZGVmcHJvdmlkZXIuc2VydmxldC50YXhjYWwuU3RhdGVUYXhJRiIKKyAgICAgICAgICAgIHNlcnZhbnROYW1lPSJjb20uc3VuLnMxYXNkZXYuc2VjdXJpdHkud3NzLmRlZnByb3ZpZGVyLnNlcnZsZXQudGF4Y2FsLlN0YXRlVGF4U2VydmxldCI+CisgICAgICAgIDwvaW50ZXJmYWNlPgorICAgIDwvc2VydmljZT4KIDwvY29uZmlndXJhdGlvbj4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL2VuY1RoZW5TaWduLWRlZmF1bHQtY29uZi9zZXJ2bGV0d3MvY29uZmlnL2NvbmZpZy13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL2VuY1RoZW5TaWduLWRlZmF1bHQtY29uZi9zZXJ2bGV0d3MvY29uZmlnL2NvbmZpZy13ZWIueG1sCmluZGV4IDllMDY3MDYuLjRiMDFlOGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9lbmNUaGVuU2lnbi1kZWZhdWx0LWNvbmYvc2VydmxldHdzL2NvbmZpZy9jb25maWctd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvZW5jVGhlblNpZ24tZGVmYXVsdC1jb25mL3NlcnZsZXR3cy9jb25maWcvY29uZmlnLXdlYi54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPGNvbmZpZ3VyYXRpb24KICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheC1ycGMvcmkvY29uZmlnIj4KLSAgPHdzZGwgCisgIDx3c2RsCiAgICAgICBsb2NhdGlvbj0id3NkbC9UYXhDYWxTZXJ2bGV0U2VydmljZS53c2RsIgogICAgICAgcGFja2FnZU5hbWU9ImNvbS5zdW4uczFhc2Rldi5zZWN1cml0eS53c3MuZGVmcHJvdmlkZXIuc2VydmxldC50YXhjYWwiLz4KIDwvY29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9lbmNUaGVuU2lnbi1kZWZhdWx0LWNvbmYvc2VydmxldHdzL3dlYi9GZWRUYXhJRi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL2VuY1RoZW5TaWduLWRlZmF1bHQtY29uZi9zZXJ2bGV0d3Mvd2ViL0ZlZFRheElGLmphdmEKaW5kZXggYmI4YjQ4YS4uMDFlNjgyMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL2VuY1RoZW5TaWduLWRlZmF1bHQtY29uZi9zZXJ2bGV0d3Mvd2ViL0ZlZFRheElGLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL2VuY1RoZW5TaWduLWRlZmF1bHQtY29uZi9zZXJ2bGV0d3Mvd2ViL0ZlZFRheElGLmphdmEKQEAgLTIyLDYgKzIyLDYgQEAKIAogcHVibGljIGludGVyZmFjZSBGZWRUYXhJRiBleHRlbmRzIFJlbW90ZXsKIAotCXB1YmxpYyBkb3VibGUgZ2V0RmVkVGF4KGRvdWJsZSBpbmNvbWUsIGRvdWJsZSBkZWR1Y3Rpb25zKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHB1YmxpYyBkb3VibGUgZ2V0RmVkVGF4KGRvdWJsZSBpbmNvbWUsIGRvdWJsZSBkZWR1Y3Rpb25zKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvZW5jVGhlblNpZ24tZGVmYXVsdC1jb25mL3NlcnZsZXR3cy93ZWIvRmVkVGF4U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL2VuY1RoZW5TaWduLWRlZmF1bHQtY29uZi9zZXJ2bGV0d3Mvd2ViL0ZlZFRheFNlcnZsZXQuamF2YQppbmRleCA2MzE5NDU4Li4wMjlkMGViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvZW5jVGhlblNpZ24tZGVmYXVsdC1jb25mL3NlcnZsZXR3cy93ZWIvRmVkVGF4U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9lbmNUaGVuU2lnbi1kZWZhdWx0LWNvbmYvc2VydmxldHdzL3dlYi9GZWRUYXhTZXJ2bGV0LmphdmEKQEAgLTIxLDE1ICsyMSwxNSBAQAogaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7CiBpbXBvcnQgamF2YXgueG1sLnJwYy5DYWxsOwogaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOwotaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsgCitpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGphdmF4Lm5hbWluZy4qOwogaW1wb3J0IGphdmF4LnhtbC5ycGMuU2VydmljZTsKIGltcG9ydCBqYXZheC54bWwucnBjLnNlcnZlci5TZXJ2aWNlTGlmZWN5Y2xlOwogaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7CiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0LlNpbmdsZVRocmVhZE1vZGVsOwogCi1wdWJsaWMgY2xhc3MgRmVkVGF4U2VydmxldCBpbXBsZW1lbnRzIAotCQkJU2luZ2xlVGhyZWFkTW9kZWwsIFNlcnZpY2VMaWZlY3ljbGUgeworcHVibGljIGNsYXNzIEZlZFRheFNlcnZsZXQgaW1wbGVtZW50cworICAgICAgICAgICAgU2luZ2xlVGhyZWFkTW9kZWwsIFNlcnZpY2VMaWZlY3ljbGUgewogCiAgICAgcHVibGljIEZlZFRheFNlcnZsZXQoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRmVkVGF4U2VydmxldCgpIGluc3RhbnRpYXRlZCIpOwpAQCAtNDQsNyArNDQsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyBkb3VibGUgZ2V0RmVkVGF4KGRvdWJsZSBpbmNvbWUsIGRvdWJsZSBkZWR1Y3Rpb25zKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJnZXRTdGF0ZVRheCBpbnZva2VkIGZyb20gc2VydmxldCBlbmRwb2ludCIpOwotCSByZXR1cm4gKChpbmNvbWUgLSAgZGVkdWN0aW9ucykgKiAwLjIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZ2V0U3RhdGVUYXggaW52b2tlZCBmcm9tIHNlcnZsZXQgZW5kcG9pbnQiKTsKKyAgICAgcmV0dXJuICgoaW5jb21lIC0gIGRlZHVjdGlvbnMpICogMC4yKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvZW5jVGhlblNpZ24tZGVmYXVsdC1jb25mL3NlcnZsZXR3cy93ZWIvU3RhdGVUYXhJRi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL2VuY1RoZW5TaWduLWRlZmF1bHQtY29uZi9zZXJ2bGV0d3Mvd2ViL1N0YXRlVGF4SUYuamF2YQppbmRleCAzYTc1ZDI3Li5jYzRmMDdhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvZW5jVGhlblNpZ24tZGVmYXVsdC1jb25mL3NlcnZsZXR3cy93ZWIvU3RhdGVUYXhJRi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9lbmNUaGVuU2lnbi1kZWZhdWx0LWNvbmYvc2VydmxldHdzL3dlYi9TdGF0ZVRheElGLmphdmEKQEAgLTIyLDYgKzIyLDYgQEAKIAogcHVibGljIGludGVyZmFjZSBTdGF0ZVRheElGIGV4dGVuZHMgUmVtb3RlewogCi0JcHVibGljIGRvdWJsZSBnZXRTdGF0ZVRheChkb3VibGUgaW5jb21lLCBkb3VibGUgZGVkdWN0aW9ucykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICBwdWJsaWMgZG91YmxlIGdldFN0YXRlVGF4KGRvdWJsZSBpbmNvbWUsIGRvdWJsZSBkZWR1Y3Rpb25zKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvZW5jVGhlblNpZ24tZGVmYXVsdC1jb25mL3NlcnZsZXR3cy93ZWIvU3RhdGVUYXhTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvZW5jVGhlblNpZ24tZGVmYXVsdC1jb25mL3NlcnZsZXR3cy93ZWIvU3RhdGVUYXhTZXJ2bGV0LmphdmEKaW5kZXggN2E1MWIyYi4uOTM4YjdlNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL2VuY1RoZW5TaWduLWRlZmF1bHQtY29uZi9zZXJ2bGV0d3Mvd2ViL1N0YXRlVGF4U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9lbmNUaGVuU2lnbi1kZWZhdWx0LWNvbmYvc2VydmxldHdzL3dlYi9TdGF0ZVRheFNlcnZsZXQuamF2YQpAQCAtMjEsMTUgKzIxLDE1IEBACiBpbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKIGltcG9ydCBqYXZheC54bWwucnBjLkNhbGw7CiBpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7Ci1pbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOyAKK2ltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgamF2YXgubmFtaW5nLio7CiBpbXBvcnQgamF2YXgueG1sLnJwYy5TZXJ2aWNlOwogaW1wb3J0IGphdmF4LnhtbC5ycGMuc2VydmVyLlNlcnZpY2VMaWZlY3ljbGU7CiBpbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKIGltcG9ydCBqYWthcnRhLnNlcnZsZXQuU2luZ2xlVGhyZWFkTW9kZWw7CiAKLXB1YmxpYyBjbGFzcyBTdGF0ZVRheFNlcnZsZXQgaW1wbGVtZW50cyAKLQkJCVNpbmdsZVRocmVhZE1vZGVsLCBTZXJ2aWNlTGlmZWN5Y2xlIHsKK3B1YmxpYyBjbGFzcyBTdGF0ZVRheFNlcnZsZXQgaW1wbGVtZW50cworICAgICAgICAgICAgU2luZ2xlVGhyZWFkTW9kZWwsIFNlcnZpY2VMaWZlY3ljbGUgewogCiAgICAgcHVibGljIFN0YXRlVGF4U2VydmxldCgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGF0ZVRheFNlcnZsZXQoKSBpbnN0YW50aWF0ZWQiKTsKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgZG91YmxlIGdldFN0YXRlVGF4KGRvdWJsZSBpbmNvbWUsIGRvdWJsZSBkZWR1Y3Rpb25zKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJnZXRTdGF0ZVRheCBpbnZva2VkIGZyb20gc2VydmxldCBlbmRwb2ludCIpOwotCSByZXR1cm4gKChpbmNvbWUgLSAgZGVkdWN0aW9ucykgKiAwLjMpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZ2V0U3RhdGVUYXggaW52b2tlZCBmcm9tIHNlcnZsZXQgZW5kcG9pbnQiKTsKKyAgICAgcmV0dXJuICgoaW5jb21lIC0gIGRlZHVjdGlvbnMpICogMC4zKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvZ2FydG5lci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL2dhcnRuZXIvYnVpbGQucHJvcGVydGllcwppbmRleCBiYzE3NjBjLi45ZDgwMjkzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvZ2FydG5lci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9nYXJ0bmVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InNlY3VyaXR5LXdzcy1nYXJ0bmVyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL2dhcnRuZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL2dhcnRuZXIvYnVpbGQueG1sCmluZGV4IDM4YTg5NmQuLjFkZDhlYjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9nYXJ0bmVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvZ2FydG5lci9idWlsZC54bWwKQEAgLTk1LDcgKzk1LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS5lYXIiLz4KICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+Ci0gICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+IAorICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgogCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1lamJqYXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9lamJ3cyIvPgpAQCAtMTAzLDcgKzEwMyw3IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIHZhbHVlPSJjb20vc3VuLyoqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCi0gICAgICAgIDxjb3B5IGZpbGU9IiR7c3VuLXdlYi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3NlcnZsZXR3cy9XRUItSU5GL3N1bi13ZWIueG1sIiBmYWlsb25lcnJvcj0idHJ1ZSIvPiAKKyAgICAgICAgPGNvcHkgZmlsZT0iJHtzdW4td2ViLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vc2VydmxldHdzL1dFQi1JTkYvc3VuLXdlYi54bWwiIGZhaWxvbmVycm9yPSJ0cnVlIi8+CiAgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIiPgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9zZXJ2bGV0d3MiLz4KICAgICAgICAgPC9qYXI+CkBAIC0xMjMsMTkgKzEyMywxOSBAQAogICAgICAgICAgICAgPC9tZXRhaW5mPgogICAgICAgICA8L2phcj4KIAotICAgICAgICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIvPiAKLSAgICAgICAgPGNvcHkgZmlsZT0iJHthcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+IAotICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciI+IAorICAgICAgICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICAgICAgICA8Y29weSBmaWxlPSIke2FwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KKyAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiPgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iPgogICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Iioud2FyIi8+CiAgICAgICAgICAgICA8L2ZpbGVzZXQ+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ij4KLQkgICAgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotCSAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiLz4KKyAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgorICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiLz4KICAgICAgICAgICAgIDwvZmlsZXNldD4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuQVBTX0hPTUV9IiBpbmNsdWRlcz0ibGliL3JlcG9ydGVyLmphciIvPgotICAgICAgICA8L2phcj4gICAgICAgCisgICAgICAgIDwvamFyPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTE0OSw4ICsxNDksOCBAQAogICAgICAgICAgICAgPGVudiBrZXk9IlZNQVJHUyIgdmFsdWU9IiR7Vk1BUkdTfSIvPgogICAgICAgICAgICAgPGFyZyBsaW5lPSItY2xpZW50IiAvPgogICAgICAgICAgICAgPGFyZyBsaW5lPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcENsaWVudC5qYXIiLz4KLSAgICAgICAgICAgIDxhcmcgbGluZT0iJHtodHRwLmhvc3R9Ii8+ICAgCi0gICAgICAgICAgICA8YXJnIGxpbmU9IiR7aHR0cC5wb3J0fSIvPiAgIAorICAgICAgICAgICAgPGFyZyBsaW5lPSIke2h0dHAuaG9zdH0iLz4KKyAgICAgICAgICAgIDxhcmcgbGluZT0iJHtodHRwLnBvcnR9Ii8+CiAgICAgICAgIDwvZXhlYz4KICAgICA8L3RhcmdldD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL2dhcnRuZXIvY2xpZW50L1BpbmdDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9nYXJ0bmVyL2NsaWVudC9QaW5nQ2xpZW50LmphdmEKaW5kZXggYThiYjRlMS4uYjMzMWU4NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL2dhcnRuZXIvY2xpZW50L1BpbmdDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvZ2FydG5lci9jbGllbnQvUGluZ0NsaWVudC5qYXZhCkBAIC00MSw3ICs0MSw3IEBACiAKICAgICAgICAgICAgICgoQmluZGluZ1Byb3ZpZGVyKXBpbmdFamJQb3J0KS5nZXRSZXF1ZXN0Q29udGV4dCgpLnB1dCgKICAgICAgICAgICAgICAgICBCaW5kaW5nUHJvdmlkZXIuRU5EUE9JTlRfQUREUkVTU19QUk9QRVJUWSwKLSAgICAgICAgICAgICAgICAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIAorICAgICAgICAgICAgICAgICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsKICAgICAgICAgICAgICAgICAiL1BpbmdFamJTZXJ2aWNlL1BpbmdFamI/V1NETCIpOwogCiAgICAgICAgICAgICBTdHJpbmcgcmVzdWx0ID0gcGluZ0VqYlBvcnQucGluZygiSGVsbG8iKTsKQEAgLTYwLDcgKzYwLDcgQEAKIAogICAgICAgICAgICAgKChCaW5kaW5nUHJvdmlkZXIpcGluZ1NlcnZsZXRQb3J0KS5nZXRSZXF1ZXN0Q29udGV4dCgpLnB1dCgKICAgICAgICAgICAgICAgICBCaW5kaW5nUHJvdmlkZXIuRU5EUE9JTlRfQUREUkVTU19QUk9QRVJUWSwKLSAgICAgICAgICAgICAgICAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIAorICAgICAgICAgICAgICAgICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsKICAgICAgICAgICAgICAgICAiL3NlY3VyaXR5LXdzcy1nYXJ0bmVyLXdlYi9QaW5nU2VydmxldFNlcnZpY2U/V1NETCIpOwogCiAgICAgICAgICAgICBTdHJpbmcgcmVzdWx0ID0gcGluZ1NlcnZsZXRQb3J0LnBpbmcoIkhlbGxvIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvZ2FydG5lci9jdXN0b20tY2xpZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9nYXJ0bmVyL2N1c3RvbS1jbGllbnQueG1sCmluZGV4IDY5M2U3ZmMuLjRmMDc1MTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9nYXJ0bmVyL2N1c3RvbS1jbGllbnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9nYXJ0bmVyL2N1c3RvbS1jbGllbnQueG1sCkBAIC0xNyw3ICsxNyw3IEBACiAKIC0tPgogCi08YmluZGluZ3MgCis8YmluZGluZ3MKICAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgogICAgIHhtbG5zOmpheGI9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheGIiCiAgICAgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvZ2FydG5lci9jdXN0b20tY2xpZW50Mi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvZ2FydG5lci9jdXN0b20tY2xpZW50Mi54bWwKaW5kZXggYTVmY2RlOS4uYzRkM2QwOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL2dhcnRuZXIvY3VzdG9tLWNsaWVudDIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9nYXJ0bmVyL2N1c3RvbS1jbGllbnQyLnhtbApAQCAtMTcsNyArMTcsNyBAQAogCiAtLT4KIAotPGJpbmRpbmdzIAorPGJpbmRpbmdzCiAgICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKICAgICB4bWxuczpqYXhiPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXhiIgogICAgIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL2dhcnRuZXIvZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9nYXJ0bmVyL2Rlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwKaW5kZXggMTRjNzBjMy4uN2QxNmU4ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL2dhcnRuZXIvZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvZ2FydG5lci9kZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sCkBAIC0zNSw3ICszNSw3IEBACiAgICAgICAgICAgICA8bWVzc2FnZS8+CiAgICAgICAgICAgICA8cmVxdWVzdC1wcm90ZWN0aW9uCiAgICAgICAgICAgICAgIGF1dGgtc291cmNlPSJjb250ZW50IiBhdXRoLXJlY2lwaWVudD0iYWZ0ZXItY29udGVudCIvPgotICAgICAgICAgICAgPHJlc3BvbnNlLXByb3RlY3Rpb24gCisgICAgICAgICAgICA8cmVzcG9uc2UtcHJvdGVjdGlvbgogICAgICAgICAgICAgICBhdXRoLXNvdXJjZT0iY29udGVudCIgYXV0aC1yZWNpcGllbnQ9ImFmdGVyLWNvbnRlbnQiLz4KICAgICAgICAgICA8L21lc3NhZ2Utc2VjdXJpdHk+CiAgICAgICAgIDwvbWVzc2FnZS1zZWN1cml0eS1iaW5kaW5nPgpAQCAtNTUsNyArNTUsNyBAQAogICAgICAgICAgICAgPG1lc3NhZ2UvPgogICAgICAgICAgICAgPHJlcXVlc3QtcHJvdGVjdGlvbgogICAgICAgICAgICAgICBhdXRoLXNvdXJjZT0iY29udGVudCIgYXV0aC1yZWNpcGllbnQ9ImFmdGVyLWNvbnRlbnQiLz4KLSAgICAgICAgICAgIDxyZXNwb25zZS1wcm90ZWN0aW9uIAorICAgICAgICAgICAgPHJlc3BvbnNlLXByb3RlY3Rpb24KICAgICAgICAgICAgICAgYXV0aC1zb3VyY2U9ImNvbnRlbnQiIGF1dGgtcmVjaXBpZW50PSJhZnRlci1jb250ZW50Ii8+CiAgICAgICAgICAgPC9tZXNzYWdlLXNlY3VyaXR5PgogICAgICAgICA8L21lc3NhZ2Utc2VjdXJpdHktYmluZGluZz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9wZXJtZXRob2QvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3Blcm1ldGhvZC9idWlsZC54bWwKaW5kZXggNjhkYjAwZC4uNjJiNTE4MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3Blcm1ldGhvZC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3Blcm1ldGhvZC9idWlsZC54bWwKQEAgLTM1LDU2ICszNSw1NiBAQAogCiA8IS0tID09PT09PT09IFRhcmdldHMgYnkgZXhlY3V0aW9uIGdyYW51bGFyaXR5ID09PT09PT09PT0gLS0+CiAgICAgPHRhcmdldCBuYW1lPSJhbGwiPgotCTxhbnRjYWxsIHRhcmdldD0ic2V0dXAiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InNldHVwIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVud3N0YXJnZXRzIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3cy10YXJnZXQiIHZhbHVlPSJhbGwiLz4KICAgICAgICAgPC9hbnRjYWxsPgotCTxhbnRjYWxsIHRhcmdldD0idW5zZXR1cCIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0idW5zZXR1cCIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi10ZXN0Ij4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW53c3RhcmdldHMiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndzLXRhcmdldCIgdmFsdWU9InJ1bi10ZXN0Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVud3N0YXJnZXRzIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3cy10YXJnZXQiIHZhbHVlPSJjbGVhbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bndzdGFyZ2V0cyI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0id3MtdGFyZ2V0IiB2YWx1ZT0iYnVpbGQiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVud3N0YXJnZXRzIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3cy10YXJnZXQiIHZhbHVlPSJkZXBsb3kiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95Ij4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW53c3RhcmdldHMiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndzLXRhcmdldCIgdmFsdWU9InVuZGVwbG95Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bndzdGFyZ2V0cyI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0id3MtdGFyZ2V0IiB2YWx1ZT0icnVuIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAgICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCTwhLS0gZXhwb3J0cyBjZXJ0ZGIgc3R1ZmYgYW5kIGltcG9ydHMgaW50byBrZXlzdG9yZSAtLT4KLQk8YW50Y2FsbCB0YXJnZXQ9InByZXBhcmUtc3RvcmUtbmlja25hbWUtY29tbW9uIj4KKyAgICA8IS0tIGV4cG9ydHMgY2VydGRiIHN0dWZmIGFuZCBpbXBvcnRzIGludG8ga2V5c3RvcmUgLS0+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJwcmVwYXJlLXN0b3JlLW5pY2tuYW1lLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iY2VydC5uaWNrbmFtZSIgdmFsdWU9InMxYXMiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgICAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InVuc2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIiA+CiAgICAgPC90YXJnZXQ+CiAKQEAgLTEwMSw3ICsxMDEsNyBAQAogICAgICAgICA8cmVjb3JkIG5hbWU9InNlY3VyaXR5LXdzcy5vdXRwdXQiIGFjdGlvbj0ic3RvcCIgLz4KICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4gVXNhZ2U6CisgICAgPGVjaG8+IFVzYWdlOgogICAgID09PT09PT09IFRhcmdldHMgYnkgZXhlY3V0aW9uIGdyYW51bGFyaXR5ID09PT09PT09PQogCiAgICAgYW50IGNsZWFuIChDbGVhbnMgYWxsIHdzIHRlc3RzKQpAQCAtMTE4LDExICsxMTgsMTEgQEAKICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIHdzIHRlc3RzKQogCiAgICAgPT09PT0gVGFyZ2V0cyBieSB0ZWNobm9sb3kgYW5kIGV4ZWN1dGlvbiBncmFudWxhcml0eSA9PT09PT0KLSAgICBOb3RlOiBSdW4gdGhlIGNvbW1hbmQgb2YgdGhlIGZvbGxvd2luZyB0eXBlOiAKKyAgICBOb3RlOiBSdW4gdGhlIGNvbW1hbmQgb2YgdGhlIGZvbGxvd2luZyB0eXBlOgogCiAgICAgICAgICAgICAlIGFudCBzZXJ2bGV0d3MgLUR3cy10YXJnZXQ9Y2xlYW4KIAogICAgIHRvIHJ1biB0aGUgJ2NsZWFuJyB0YXJnZXQgZm9yICdzZXJ2bGV0d3MnIHRlc3RzCi0JPC9lY2hvPgorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9wZXJtZXRob2Qvc2VydmxldHdzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvcGVybWV0aG9kL3NlcnZsZXR3cy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDA3OWIzNmIuLmUwNzgzYWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9wZXJtZXRob2Qvc2VydmxldHdzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3Blcm1ldGhvZC9zZXJ2bGV0d3MvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTkgKzE1LDE5IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzZWN1cml0eS13c3MtcGVybWV0aG9kLXNlcnZsZXQiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJjb20uc3VuLnMxYXNkZXYuc2VjdXJpdHkud3NzLnBlcm1ldGhvZC5zZXJ2bGV0LmNsaWVudC5DbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iY29tLnN1bi5zMWFzZGV2LnNlY3VyaXR5Lndzcy5wZXJtZXRob2Quc2VydmxldC5jbGllbnQuQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3c2RsLWZpbGUiIHZhbHVlPSJ3c2RsL0hlbGxvU2VydmxldFNlcnZpY2Uud3NkbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3Blcm1ldGhvZC9zZXJ2bGV0d3MvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3Blcm1ldGhvZC9zZXJ2bGV0d3MvYnVpbGQueG1sCmluZGV4IDFhOWJlODkuLjZmZDAxOTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9wZXJtZXRob2Qvc2VydmxldHdzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvcGVybWV0aG9kL3NlcnZsZXR3cy9idWlsZC54bWwKQEAgLTMxLDEwICszMSwxMCBAQAogICAgICZ0ZXN0cHJvcGVydGllczsKICAgICAmY29tbW9uU2VjdXJpdHk7CiAKLSAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgCisgICAgPHRhcmdldCBuYW1lPSJhbGwiCiAgICAgZGVwZW5kcz0iY2xlYW4sIGJ1aWxkLCBzZXR1cCwgZGVwbG95LCBydW4sIHVuZGVwbG95LCB1bnNldHVwIi8+CiAKLSAgICA8dGFyZ2V0IG5hbWU9InJ1bi10ZXN0IiAKKyAgICA8dGFyZ2V0IG5hbWU9InJ1bi10ZXN0IgogICAgIGRlcGVuZHM9ImNsZWFuLCBidWlsZCwgZGVwbG95LCBydW4sIHVuZGVwbG95Ii8+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC02NSwxNCArNjUsMTQgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZ2VuZXJhdGUtYXJ0aWZhY3RzIj4KLQk8ZWNobyBtZXNzYWdlPSIgQ2xpZW50IE1hcHBpbmcgZmlsZSA6ICR7Y2xpZW50LW1hcHBpbmcueG1sfSIvPgorICAgIDxlY2hvIG1lc3NhZ2U9IiBDbGllbnQgTWFwcGluZyBmaWxlIDogJHtjbGllbnQtbWFwcGluZy54bWx9Ii8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iaW1wb3J0LXdzZGwiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im1hcHBpbmcuZmlsZSIKICAgICAgICAgICAgIHZhbHVlPSIke2NsaWVudC1tYXBwaW5nLnhtbH0iLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJjb25maWctd3NkbC5maWxlIgogICAgICAgICAgICAgdmFsdWU9ImNvbmZpZy9jb25maWctY2xpZW50LnhtbCIvPgogICAgICAgICA8L2FudGNhbGw+Ci0JPGVjaG8gbWVzc2FnZT0iV2ViIE1hcHBpbmcgRmlsZSA6ICR7d2ViLW1hcHBpbmcueG1sfSIvPgorICAgIDxlY2hvIG1lc3NhZ2U9IldlYiBNYXBwaW5nIEZpbGUgOiAke3dlYi1tYXBwaW5nLnhtbH0iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJpbXBvcnQtd3NkbCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ibWFwcGluZy5maWxlIgogICAgICAgICAgICAgdmFsdWU9IiR7d2ViLW1hcHBpbmcueG1sfSIvPgpAQCAtMTUzLDYzICsxNTMsNjMgQEAKICAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJpbml0LWNvbW1vbixjb21waWxlIj4KLQk8YW50Y2FsbCB0YXJnZXQ9IndzLXBhY2thZ2UtYXBwY2xpZW50amFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgIDxhbnRjYWxsIHRhcmdldD0id3MtcGFja2FnZS1hcHBjbGllbnRqYXItY29tbW9uIj4KKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9ImNvbS9zdW4vczFhc2Rldi9zZWN1cml0eS93c3MvcGVybWV0aG9kL3NlcnZsZXQvY2xpZW50LyouY2xhc3MiIC8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIgogICAgICAgICAgICAgICB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuamFyIgogICAgICAgICAgICAgICB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgotCTwvYW50Y2FsbD4KLQk8IS0tYW50Y2FsbCB0YXJnZXQ9IndzLXdhci1jb21tb24iLS0+Ci0JPGFudGNhbGwgdGFyZ2V0PSJ3cy1wYWNrYWdlLXdhci1jb21tb24iPgorICAgIDwvYW50Y2FsbD4KKyAgICA8IS0tYW50Y2FsbCB0YXJnZXQ9IndzLXdhci1jb21tb24iLS0+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJ3cy1wYWNrYWdlLXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Indhci5maWxlIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9Indhci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3YXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgdmFsdWU9ImNvbS9zdW4vczFhc2Rldi9zZWN1cml0eS93c3MvcGVybWV0aG9kL3NlcnZsZXQvKi5jbGFzcyIgLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJtYXBwaW5nZmlsZS5uYW1lIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJtYXBwaW5nZmlsZS5uYW1lIgogICAgICAgICAgICAgICB2YWx1ZT0iJHt3ZWItbWFwcGluZy54bWx9IiAvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im1hcHBpbmdmaWxlLmxvY2F0aW9uIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJtYXBwaW5nZmlsZS5sb2NhdGlvbiIKICAgICAgICAgICAgICAgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2Vic2VydmljZXMueG1sIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJzZXJ2aWNlcy54bWwiCiAgICAgICAgICAgICAgIHZhbHVlPSIke3dlYi13ZWJzZXJ2aWNlcy54bWx9IiAvPgotCTwvYW50Y2FsbD4KKyAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZWFyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLQkgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCTxwcm9wZXJ0eSBuYW1lPSJWTUFSR1MiIHZhbHVlPSItRGphdmF4Lm5ldC5zc2wua2V5U3RvcmU9JHtteWtleXN0b3JlLmRiLmZpbGV9IC1EamF2YXgubmV0LnNzbC50cnVzdFN0b3JlPSR7bXl0cnVzdHN0b3JlLmRiLmZpbGV9IC1EamF2YXgubmV0LnNzbC5rZXlTdG9yZVBhc3N3b3JkPSR7c3NsLnBhc3N3b3JkfSAtRGphdmF4Lm5ldC5zc2wudHJ1c3RTdG9yZVBhc3N3b3JkPSR7c3NsLnBhc3N3b3JkfSIvPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGVsbG8tZW5kcG9pbnQtdXJsIiAKKyAgICA8cHJvcGVydHkgbmFtZT0iVk1BUkdTIiB2YWx1ZT0iLURqYXZheC5uZXQuc3NsLmtleVN0b3JlPSR7bXlrZXlzdG9yZS5kYi5maWxlfSAtRGphdmF4Lm5ldC5zc2wudHJ1c3RTdG9yZT0ke215dHJ1c3RzdG9yZS5kYi5maWxlfSAtRGphdmF4Lm5ldC5zc2wua2V5U3RvcmVQYXNzd29yZD0ke3NzbC5wYXNzd29yZH0gLURqYXZheC5uZXQuc3NsLnRydXN0U3RvcmVQYXNzd29yZD0ke3NzbC5wYXNzd29yZH0iLz4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9ImhlbGxvLWVuZHBvaW50LXVybCIKICAgICAgICAgICAgIHZhbHVlPSJodHRwOi8vJHtodHRwLmhvc3R9OiR7aHR0cC5wb3J0fS8ke2FwcG5hbWV9L2hlbGxvc2VydmxldCIvPgotCTxlY2hvIG1lc3NhZ2U9IlZNQVJHUz0gJHtWTUFSR1N9Ii8+Ci0gICAJPGV4ZWMgZXhlY3V0YWJsZT0iJHtBUFBDTElFTlR9Ij4KLSAgICAgIAkJPGVudiBrZXk9IlZNQVJHUyIgdmFsdWU9IiR7Vk1BUkdTfSIvPgotICAgICAgICAJPGFyZyB2YWx1ZT0iLWNsaWVudCIgLz4KLSAgICAgICAgCTxhcmcgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwQ2xpZW50LmphciIvPgotICAgICAgICAJPGFyZyB2YWx1ZT0iLXRleHRhdXRoIi8+Ci0gICAgICAgIAk8YXJnIHZhbHVlPSItdXNlciIvPgotICAgICAgICAJPGFyZyB2YWx1ZT0iajJlZSIvPgotICAgICAgIAkJPGFyZyB2YWx1ZT0iLXBhc3N3b3JkIi8+Ci0gICAgICAgIAk8YXJnIHZhbHVlPSJqMmVlIi8+Ci0gICAgICAgIAk8YXJnIGxpbmU9Ii14bWwgJHthZG1pbi5kb21haW4uZGlyfS8ke2FkbWluLmRvbWFpbn0vY29uZmlnL2dsYXNzZmlzaC1hY2MueG1sIi8+Ci0gICAgICAgIAk8YXJnIGxpbmU9IiR7aGVsbG8tZW5kcG9pbnQtdXJsfSIvPgorICAgIDxlY2hvIG1lc3NhZ2U9IlZNQVJHUz0gJHtWTUFSR1N9Ii8+CisgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBUFBDTElFTlR9Ij4KKyAgICAgICAgICAgICAgPGVudiBrZXk9IlZNQVJHUyIgdmFsdWU9IiR7Vk1BUkdTfSIvPgorICAgICAgICAgICAgPGFyZyB2YWx1ZT0iLWNsaWVudCIgLz4KKyAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwQ2xpZW50LmphciIvPgorICAgICAgICAgICAgPGFyZyB2YWx1ZT0iLXRleHRhdXRoIi8+CisgICAgICAgICAgICA8YXJnIHZhbHVlPSItdXNlciIvPgorICAgICAgICAgICAgPGFyZyB2YWx1ZT0iajJlZSIvPgorICAgICAgICAgICAgICAgPGFyZyB2YWx1ZT0iLXBhc3N3b3JkIi8+CisgICAgICAgICAgICA8YXJnIHZhbHVlPSJqMmVlIi8+CisgICAgICAgICAgICA8YXJnIGxpbmU9Ii14bWwgJHthZG1pbi5kb21haW4uZGlyfS8ke2FkbWluLmRvbWFpbn0vY29uZmlnL2dsYXNzZmlzaC1hY2MueG1sIi8+CisgICAgICAgICAgICA8YXJnIGxpbmU9IiR7aGVsbG8tZW5kcG9pbnQtdXJsfSIvPgogICAgICAgPC9leGVjPgogICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KIAotICA8IS0tIAotICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IAorICA8IS0tCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgVXNlciBEZWZpbmVkIHNwZWNpZmljIHRhcmdldHMKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAtLT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9wZXJtZXRob2Qvc2VydmxldHdzL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9wZXJtZXRob2Qvc2VydmxldHdzL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA1OGQ1Y2NiLi40NTkyMjc2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvcGVybWV0aG9kL3NlcnZsZXR3cy9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3Blcm1ldGhvZC9zZXJ2bGV0d3MvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zNyw5ICszNyw5IEBACiAgICAgICAgIH0KIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKHRlc3RTdWl0ZSk7Ci0gICAgICAgIAorCiAgICAgICAgIEhlbGxvSUYgaGVsbG9JRlBvcnQgPSBudWxsOwotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIEhlbGxvU2VydmxldFNlcnZpY2UgaGVsbG9TZXJ2aWNlID0gKEhlbGxvU2VydmxldFNlcnZpY2UpCiAgICAgICAgICAgICAgICAgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3NlcnZpY2UvSGVsbG9TZXJ2bGV0U2VydmljZSIpOwpAQCAtNTQsNyArNTQsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiBzYXlIZWxsbyIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0gICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbGluZyBzZW5kU2VjcmV0Iik7CiAgICAgICAgICAgICBpbnQgY29kZSA9IGhlbGxvSUZQb3J0LnNlbmRTZWNyZXQoIkl0IGlzIGEgc2VjcmV0Iik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvcGVybWV0aG9kL3NlcnZsZXR3cy9jb25maWcvY29uZmlnLWNsaWVudC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvcGVybWV0aG9kL3NlcnZsZXR3cy9jb25maWcvY29uZmlnLWNsaWVudC54bWwKaW5kZXggMmYwNTFkOC4uNzExOGNlZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3Blcm1ldGhvZC9zZXJ2bGV0d3MvY29uZmlnL2NvbmZpZy1jbGllbnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9wZXJtZXRob2Qvc2VydmxldHdzL2NvbmZpZy9jb25maWctY2xpZW50LnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8Y29uZmlndXJhdGlvbgogICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4LXJwYy9yaS9jb25maWciPgotICA8d3NkbCAKKyAgPHdzZGwKICAgICAgIGxvY2F0aW9uPSJ3c2RsL0hlbGxvU2VydmxldFNlcnZpY2Uud3NkbCIKICAgICAgIHBhY2thZ2VOYW1lPSJjb20uc3VuLnMxYXNkZXYuc2VjdXJpdHkud3NzLnBlcm1ldGhvZC5zZXJ2bGV0LmNsaWVudCIvPgogPC9jb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3Blcm1ldGhvZC9zZXJ2bGV0d3MvY29uZmlnL2NvbmZpZy1zZWkueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3Blcm1ldGhvZC9zZXJ2bGV0d3MvY29uZmlnL2NvbmZpZy1zZWkueG1sCmluZGV4IGViNjliN2QuLmQ4Y2FjNDcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9wZXJtZXRob2Qvc2VydmxldHdzL2NvbmZpZy9jb25maWctc2VpLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvcGVybWV0aG9kL3NlcnZsZXR3cy9jb25maWcvY29uZmlnLXNlaS54bWwKQEAgLTE4LDE0ICsxOCwxNCBAQAogLS0+CiAKIDxjb25maWd1cmF0aW9uCi0JeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheC1ycGMvcmkvY29uZmlnIj4KLQk8c2VydmljZSBuYW1lPSJIZWxsb1NlcnZsZXRTZXJ2aWNlIgotCQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9oZWxsby5vcmcvd3NkbCIKLQkJdHlwZU5hbWVzcGFjZT0iaHR0cDovL2hlbGxvLm9yZy90eXBlcyIKLQkJcGFja2FnZU5hbWU9ImNvbS5zdW4uczFhc2Rldi5zZWN1cml0eS53c3MucGVybWV0aG9kLnNlcnZsZXQiPgotCQk8aW50ZXJmYWNlIG5hbWU9ImNvbS5zdW4uczFhc2Rldi5zZWN1cml0eS53c3MucGVybWV0aG9kLnNlcnZsZXQuSGVsbG9JRiIKLQkJCXNlcnZhbnROYW1lPSJjb20uc3VuLnMxYXNkZXYuc2VjdXJpdHkud3NzLnBlcm1ldGhvZC5zZXJ2bGV0LkhlbGxvU2VydmxldCIvPgotCQk8L2ludGVyZmFjZT4KLQk8L3NlcnZpY2U+CisgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheC1ycGMvcmkvY29uZmlnIj4KKyAgICA8c2VydmljZSBuYW1lPSJIZWxsb1NlcnZsZXRTZXJ2aWNlIgorICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9oZWxsby5vcmcvd3NkbCIKKyAgICAgICAgdHlwZU5hbWVzcGFjZT0iaHR0cDovL2hlbGxvLm9yZy90eXBlcyIKKyAgICAgICAgcGFja2FnZU5hbWU9ImNvbS5zdW4uczFhc2Rldi5zZWN1cml0eS53c3MucGVybWV0aG9kLnNlcnZsZXQiPgorICAgICAgICA8aW50ZXJmYWNlIG5hbWU9ImNvbS5zdW4uczFhc2Rldi5zZWN1cml0eS53c3MucGVybWV0aG9kLnNlcnZsZXQuSGVsbG9JRiIKKyAgICAgICAgICAgIHNlcnZhbnROYW1lPSJjb20uc3VuLnMxYXNkZXYuc2VjdXJpdHkud3NzLnBlcm1ldGhvZC5zZXJ2bGV0LkhlbGxvU2VydmxldCIvPgorICAgICAgICA8L2ludGVyZmFjZT4KKyAgICA8L3NlcnZpY2U+CiA8L2NvbmZpZ3VyYXRpb24+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9wZXJtZXRob2Qvc2VydmxldHdzL2NvbmZpZy9jb25maWctd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9wZXJtZXRob2Qvc2VydmxldHdzL2NvbmZpZy9jb25maWctd2ViLnhtbAppbmRleCA0ZWI1MjBmLi5kOGE3NTFkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvcGVybWV0aG9kL3NlcnZsZXR3cy9jb25maWcvY29uZmlnLXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3Blcm1ldGhvZC9zZXJ2bGV0d3MvY29uZmlnL2NvbmZpZy13ZWIueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxjb25maWd1cmF0aW9uCiAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+Ci0gIDx3c2RsIAorICA8d3NkbAogICAgICAgbG9jYXRpb249IndzZGwvSGVsbG9TZXJ2bGV0U2VydmljZS53c2RsIgogICAgICAgcGFja2FnZU5hbWU9ImNvbS5zdW4uczFhc2Rldi5zZWN1cml0eS53c3MucGVybWV0aG9kLnNlcnZsZXQiLz4KIDwvY29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9wZXJtZXRob2Qvc2VydmxldHdzL2Rlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvcGVybWV0aG9kL3NlcnZsZXR3cy9kZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sCmluZGV4IGU1YjQ5YzIuLjYzMGU0ZTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9wZXJtZXRob2Qvc2VydmxldHdzL2Rlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3Blcm1ldGhvZC9zZXJ2bGV0d3MvZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbApAQCAtMzUsMjQgKzM1LDI0IEBACiAgICAgICAgICAgICA8cmVxdWVzdC1wcm90ZWN0aW9uLz4KICAgICAgICAgICAgIDxyZXNwb25zZS1wcm90ZWN0aW9uLz4KICAgICAgICAgICA8L21lc3NhZ2Utc2VjdXJpdHk+Ci0JICA8bWVzc2FnZS1zZWN1cml0eT4KKyAgICAgIDxtZXNzYWdlLXNlY3VyaXR5PgogICAgICAgICAgICAgPG1lc3NhZ2U+CiAgICAgICAgICAgICAgIDxvcGVyYXRpb24tbmFtZT5zZW5kU2VjcmV0PC9vcGVyYXRpb24tbmFtZT4KICAgICAgICAgICAgIDwvbWVzc2FnZT4KLQkgICAgPHJlcXVlc3QtcHJvdGVjdGlvbgorICAgICAgICA8cmVxdWVzdC1wcm90ZWN0aW9uCiAgICAgICAgICAgICAgIGF1dGgtc291cmNlPSJjb250ZW50Ii8+Ci0JICAgIDxyZXNwb25zZS1wcm90ZWN0aW9uCisgICAgICAgIDxyZXNwb25zZS1wcm90ZWN0aW9uCiAgICAgICAgICAgICAgIGF1dGgtc291cmNlPSJjb250ZW50Ii8+Ci0JICA8L21lc3NhZ2Utc2VjdXJpdHk+Ci0JICA8bWVzc2FnZS1zZWN1cml0eT4KKyAgICAgIDwvbWVzc2FnZS1zZWN1cml0eT4KKyAgICAgIDxtZXNzYWdlLXNlY3VyaXR5PgogICAgICAgICAgICAgPG1lc3NhZ2U+CiAgICAgICAgICAgICAgIDxvcGVyYXRpb24tbmFtZT5nZXRTZWNyZXQ8L29wZXJhdGlvbi1uYW1lPgogICAgICAgICAgICAgPC9tZXNzYWdlPgotCSAgICA8cmVxdWVzdC1wcm90ZWN0aW9uCisgICAgICAgIDxyZXF1ZXN0LXByb3RlY3Rpb24KICAgICAgICAgICAgICAgYXV0aC1zb3VyY2U9InNlbmRlciIvPgotCSAgICA8cmVzcG9uc2UtcHJvdGVjdGlvbgorICAgICAgICA8cmVzcG9uc2UtcHJvdGVjdGlvbgogICAgICAgICAgICAgICBhdXRoLXNvdXJjZT0iY29udGVudCIvPgotCSAgPC9tZXNzYWdlLXNlY3VyaXR5PgorICAgICAgPC9tZXNzYWdlLXNlY3VyaXR5PgogICAgICAgICA8L21lc3NhZ2Utc2VjdXJpdHktYmluZGluZz4KICAgICAgIDwvcG9ydC1pbmZvPgogICAgIDwvc2VydmljZS1yZWY+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvcGVybWV0aG9kL3NlcnZsZXR3cy93ZWIvSGVsbG9TZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3MvcGVybWV0aG9kL3NlcnZsZXR3cy93ZWIvSGVsbG9TZXJ2bGV0LmphdmEKaW5kZXggZjY2MGNkZi4uNTYwYmZmMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3Blcm1ldGhvZC9zZXJ2bGV0d3Mvd2ViL0hlbGxvU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9wZXJtZXRob2Qvc2VydmxldHdzL3dlYi9IZWxsb1NlcnZsZXQuamF2YQpAQCAtMTksOCArMTksOCBAQAogaW1wb3J0IGpha2FydGEuc2VydmxldC5TaW5nbGVUaHJlYWRNb2RlbDsKIGltcG9ydCBqYXZheC54bWwucnBjLnNlcnZlci5TZXJ2aWNlTGlmZWN5Y2xlOwogCi1wdWJsaWMgY2xhc3MgSGVsbG9TZXJ2bGV0IGltcGxlbWVudHMgCi0JCQlTaW5nbGVUaHJlYWRNb2RlbCwgU2VydmljZUxpZmVjeWNsZSB7CitwdWJsaWMgY2xhc3MgSGVsbG9TZXJ2bGV0IGltcGxlbWVudHMKKyAgICAgICAgICAgIFNpbmdsZVRocmVhZE1vZGVsLCBTZXJ2aWNlTGlmZWN5Y2xlIHsKIAogICAgIHB1YmxpYyBIZWxsb1NlcnZsZXQoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG9TZXJ2bGV0KCkgaW5zdGFudGlhdGVkIik7CkBAIC00Myw3ICs0Myw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigic2VuZFNlY3JldCBpbnZva2VkIGZyb20gc2VydmxldCBlbmRwb2ludCIpOwogICAgICAgICByZXR1cm4gbWVzc2FnZS5oYXNoQ29kZSgpOwogICAgIH0KLSAgICAgICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldFNlY3JldChkb3VibGUga2V5KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZ2V0U2VjcmV0IGludm9rZWQgZnJvbSBzZXJ2bGV0IGVuZHBvaW50Iik7CiAgICAgICAgIHJldHVybiAiU2VjcmV0LSIgKyBrZXk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3Mvcm9sZXMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9yb2xlcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDVlODJmODQuLjMzMTMxMGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9yb2xlcy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9yb2xlcy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzZWN1cml0eS13c3Mtcm9sZXMiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3Mvcm9sZXMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3JvbGVzL2J1aWxkLnhtbAppbmRleCBjZTdmM2ExLi5lZTc0NDQwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3Mvcm9sZXMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9yb2xlcy9idWlsZC54bWwKQEAgLTc5LDcgKzc5LDcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZS1jbGllbnQiPgotICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4gCisgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndzaW1wb3J0Ij4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3c2ltcG9ydC5hcmdzIgogICAgICAgICAgICAgICAgIHZhbHVlPSIta2VlcCAtZCAke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQgaHR0cDovLyR7aHR0cC5ob3N0fToke2h0dHAucG9ydH0vV3NzUm9sZXNFamJTZXJ2aWNlL0hlbGxvRWpiP1dTREwiLz4KQEAgLTEwNSw3ICsxMDUsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1zZXJ2ZXIiIGRlcGVuZHM9ImNvbXBpbGUtc2VydmVyIj4KICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+Ci0gICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+IAorICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgogCiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1lamJqYXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9lamJ3cyIvPgpAQCAtMTIyLDE2ICsxMjIsMTYgQEAKICAgICAgICAgICAgIDxjbGFzc2VzIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vc2VydmxldHdzIi8+CiAgICAgICAgIDwvd2FyPgogCi0gICAgICAgIDxjb3B5IGZpbGU9IiR7c3VuLWFwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+IAotICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciI+IAorICAgICAgICA8Y29weSBmaWxlPSIke3N1bi1hcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciI+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSI+CiAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLmphciIvPgogICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi53YXIiLz4KICAgICAgICAgICAgIDwvZmlsZXNldD4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iPgotCSAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIi8+CisgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KICAgICAgICAgICAgIDwvZmlsZXNldD4KLSAgICAgICAgPC9qYXI+ICAgCisgICAgICAgIDwvamFyPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1jbGllbnQiIGRlcGVuZHM9ImNvbXBpbGUtY2xpZW50Ij4KQEAgLTEzOSwxMSArMTM5LDExIEBACiAKICAgICAgICAgPHVuamFyIHNyYz0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIGRlc3Q9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2UtYXBwY2xpZW50amFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiCiAgICAgICAgICAgICAgICAgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5qYXIiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5qYXIiCiAgICAgICAgICAgICAgICAgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgICAgdmFsdWU9ImNvbS9zdW4vKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3Mvcm9sZXMvZWpid3MvSGVsbG9FamIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9yb2xlcy9lamJ3cy9IZWxsb0VqYi5qYXZhCmluZGV4IDk5Y2U1OTMuLjU1NjRhNmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9yb2xlcy9lamJ3cy9IZWxsb0VqYi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9yb2xlcy9lamJ3cy9IZWxsb0VqYi5qYXZhCkBAIC01NSw3ICs1NSw3IEBACiAgICAgcHVibGljIFN0cmluZyByb2xlc0FsbG93ZWQxKFN0cmluZyB3aG8pIHsKICAgICAgICAgcmV0dXJuICJIZWxsbywgIiArIHdobzsKICAgICB9Ci0gICAgCisKICAgICBAUm9sZXNBbGxvd2VkKHZhbHVlPXsid2VidXNlciJ9KQogICAgIHB1YmxpYyBTdHJpbmcgcm9sZXNBbGxvd2VkMihTdHJpbmcgd2hvKSB7CiAgICAgICAgIHJldHVybiAiSGVsbG8sICIgKyB3aG87CkBAIC02OSw3ICs2OSw3IEBACiAgICAgQFBlcm1pdEFsbAogICAgIHB1YmxpYyBTdHJpbmcgcGVybWl0QWxsKFN0cmluZyB3aG8pIHsKICAgICAgICAgcmV0dXJuICJIZWxsbywgIiArIHdobzsKLSAgICB9ICAgIAorICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgcnVuQXMxKCkgewogICAgICAgICByZXR1cm4gc2Z1bC5oZWxsbygpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3JvbGVzL2VqYndzMi9IZWxsb0VqYjIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9yb2xlcy9lamJ3czIvSGVsbG9FamIyLmphdmEKaW5kZXggYmEwNjIzMS4uZDcyMmQ3ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3JvbGVzL2VqYndzMi9IZWxsb0VqYjIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3Mvcm9sZXMvZWpid3MyL0hlbGxvRWpiMi5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiAgICAgcHVibGljIFN0cmluZyByb2xlc0FsbG93ZWQxKFN0cmluZyB3aG8pIHsKICAgICAgICAgcmV0dXJuICJIZWxsbywgIiArIHdobzsKICAgICB9Ci0gICAgCisKICAgICBAUm9sZXNBbGxvd2VkKHZhbHVlPXsid2VidXNlciJ9KQogICAgIHB1YmxpYyBTdHJpbmcgcm9sZXNBbGxvd2VkMihTdHJpbmcgd2hvKSB7CiAgICAgICAgIHJldHVybiAiSGVsbG8sICIgKyB3aG87CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3Mvcm9sZXMyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3Mvcm9sZXMyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggN2YzNjQyZi4uNzA5N2MwYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3JvbGVzMi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9yb2xlczIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic2VjdXJpdHktd3NzLXJvbGVzMiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9yb2xlczIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3JvbGVzMi9idWlsZC54bWwKaW5kZXggNDcxOTZhNi4uMDRhNzBjYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3JvbGVzMi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3JvbGVzMi9idWlsZC54bWwKQEAgLTYzLDcgKzYzLDcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZS1jbGllbnQiPgotICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4gCisgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndzaW1wb3J0Ij4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3c2ltcG9ydC5hcmdzIgogICAgICAgICAgICAgICAgIHZhbHVlPSIta2VlcCAtZCAke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQgaHR0cDovLyR7aHR0cC5ob3N0fToke2h0dHAucG9ydH0vV3NzUm9sZXMyRWpiU2VydmljZS9IZWxsb0VqYj9XU0RMIi8+CkBAIC04MSw3ICs4MSw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXNlcnZlciIgZGVwZW5kcz0iY29tcGlsZS1zZXJ2ZXIiPgogICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KLSAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4gCisgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CiAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLWVqYmphci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2VqYndzIi8+CkBAIC05NSwxMSArOTUsMTEgQEAKIAogICAgICAgICA8dW5qYXIgc3JjPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgZGVzdD0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1hcHBjbGllbnRqYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIKICAgICAgICAgICAgICAgICB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmphciIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmphciIKICAgICAgICAgICAgICAgICB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgICB2YWx1ZT0iY29tL3N1bi8qKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9yb2xlczIvZWpid3MvSGVsbG9FamIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9yb2xlczIvZWpid3MvSGVsbG9FamIuamF2YQppbmRleCBjNjdjYzE4Li40NjdmMGZhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3Mvcm9sZXMyL2VqYndzL0hlbGxvRWpiLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3JvbGVzMi9lamJ3cy9IZWxsb0VqYi5qYXZhCkBAIC01MSw3ICs1MSw3IEBACiAgICAgcHVibGljIFN0cmluZyByb2xlc0FsbG93ZWQxKFN0cmluZyB3aG8pIHsKICAgICAgICAgcmV0dXJuICJIZWxsbywgIiArIHdobzsKICAgICB9Ci0gICAgCisKICAgICBAUm9sZXNBbGxvd2VkKHZhbHVlPXsid2VidXNlciJ9KQogICAgIHB1YmxpYyBTdHJpbmcgcm9sZXNBbGxvd2VkMihTdHJpbmcgd2hvKSB7CiAgICAgICAgIHJldHVybiAiSGVsbG8sICIgKyB3aG87CkBAIC02NSw3ICs2NSw3IEBACiAgICAgQFBlcm1pdEFsbAogICAgIHB1YmxpYyBTdHJpbmcgcGVybWl0QWxsKFN0cmluZyB3aG8pIHsKICAgICAgICAgcmV0dXJuICJIZWxsbywgIiArIHdobzsKLSAgICB9ICAgIAorICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgcnVuQXMxKCkgewogICAgICAgICByZXR1cm4gc2Z1bC5oZWxsbygpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3JvbGVzMi9lamJ3cy9TZnVsRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3Mvcm9sZXMyL2VqYndzL1NmdWxFSkIuamF2YQppbmRleCBjMTNmOTBiLi40ZjFmYWY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3Mvcm9sZXMyL2VqYndzL1NmdWxFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3Mvcm9sZXMyL2VqYndzL1NmdWxFSkIuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogQFJ1bkFzKCJqMmVlIikKIHB1YmxpYyBjbGFzcyBTZnVsRUpCIGltcGxlbWVudHMgU2Z1bExvY2FsIHsKICAgICBARUpCIHByaXZhdGUgU2xlc3NMb2NhbCBzbGVzczsKLSAKKwogICAgIEBSb2xlc0FsbG93ZWQodmFsdWU9eyJqYXZhZWUifSkKICAgICBwdWJsaWMgU3RyaW5nIGhlbGxvKCkgewogICAgICAgICByZXR1cm4gImhlbGxvIGZyb20gU2Z1bCI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3Mvc3NsL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3Mvc3NsL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNDRjNjNmOS4uZTkxYTI0OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3NzbC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9zc2wvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic2VjdXJpdHktd3NzLXNzbCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9zc2wvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3NzbC9idWlsZC54bWwKaW5kZXggZjRjMWI1MC4uMjE0YzExMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3NzbC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3NzbC9idWlsZC54bWwKQEAgLTU1LDcgKzU1LDcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZS1jbGllbnQiIGRlcGVuZHM9InByZXBhcmUtdHJ1c3RzdG9yZS1jb21tb24sIGluaXQtc2VjdXJpdHktdXRpbCI+Ci0gICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPiAKKyAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id3NpbXBvcnQiPgogICAgICAgICAgICAgICAgIDwhLS12YWx1ZT0iLWtlZXAgLWQgJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IGh0dHBzOi8vJHtzMWFzQ059OiR7aHR0cHMucG9ydH0vV3NzU3NsRWpiU2VydmljZS9IZWxsb0VqYj9XU0RMIi8+LS0+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0id3NpbXBvcnQuVk1BUkdTIiB2YWx1ZT0iIC1EamF2YXgubmV0LnNzbC50cnVzdFN0b3JlPSR7YnVpbGQuYmFzZS5kaXJ9L2NhY2VydHMuamtzIC1EamF2YXgubmV0LnNzbC50cnVzdFN0b3JlUGFzc3dvcmQ9JHtzc2wucGFzc3dvcmR9Ii8+CkBAIC04MCw3ICs4MCw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXNlcnZlciIgZGVwZW5kcz0iY29tcGlsZS1zZXJ2ZXIiPgogICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KLSAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4gCisgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CiAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLWVqYmphci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2VqYndzIi8+CkBAIC05MywxNiArOTMsMTYgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3YXIuZmlsZSIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCi0gICAgICAgIDxjb3B5IGZpbGU9IiR7YXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIvPiAKLSAgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiPiAKKyAgICAgICAgPGNvcHkgZmlsZT0iJHthcHBsaWNhdGlvbi54bWx9IiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CisgICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIj4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9Ij4KICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IiouamFyIi8+CiAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLndhciIvPgogICAgICAgICAgICAgPC9maWxlc2V0PgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSI+Ci0JICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL2FwcGxpY2F0aW9uLnhtbCIvPgorICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiLz4KICAgICAgICAgICAgIDwvZmlsZXNldD4KLSAgICAgICAgPC9qYXI+ICAgCisgICAgICAgIDwvamFyPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1jbGllbnQiIGRlcGVuZHM9ImNvbXBpbGUtY2xpZW50Ij4KQEAgLTExMCwxMSArMTEwLDExIEBACiAKICAgICAgICAgPHVuamFyIHNyYz0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIGRlc3Q9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InBhY2thZ2UtYXBwY2xpZW50amFyLWNvbW1vbiI+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiCiAgICAgICAgICAgICAgICAgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5qYXIiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5qYXIiCiAgICAgICAgICAgICAgICAgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgICAgdmFsdWU9ImNvbS9zdW4vKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3Mvc3NsY2xpZW50Y2VydC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3NzbGNsaWVudGNlcnQvYnVpbGQucHJvcGVydGllcwppbmRleCAyMDE4YTY1Li4wNTBjOGI1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3Mvc3NsY2xpZW50Y2VydC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9zc2xjbGllbnRjZXJ0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InNlY3VyaXR5LXdzcy1zc2xjbGllbnRjZXJ0Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3NzbGNsaWVudGNlcnQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvc2VjdXJpdHkvd3NzL3NzbGNsaWVudGNlcnQvYnVpbGQueG1sCmluZGV4IDRhNWVkM2MuLmYyMDNhNzIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3NlY3VyaXR5L3dzcy9zc2xjbGllbnRjZXJ0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy9zZWN1cml0eS93c3Mvc3NsY2xpZW50Y2VydC9idWlsZC54bWwKQEAgLTM4LDggKzM4LDggQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQk8IS0tIGV4cG9ydHMgY2VydGRiIHN0dWZmIGFuZCBpbXBvcnRzIGludG8ga2V5c3RvcmUgLS0+Ci0JPGFudGNhbGwgdGFyZ2V0PSJwcmVwYXJlLXN0b3JlLW5pY2tuYW1lLWNvbW1vbiI+CisgICAgPCEtLSBleHBvcnRzIGNlcnRkYiBzdHVmZiBhbmQgaW1wb3J0cyBpbnRvIGtleXN0b3JlIC0tPgorICAgIDxhbnRjYWxsIHRhcmdldD0icHJlcGFyZS1zdG9yZS1uaWNrbmFtZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImNlcnQubmlja25hbWUiIHZhbHVlPSJzMWFzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KQEAgLTU5LDcgKzU5LDcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZS1jbGllbnQiIGRlcGVuZHM9ImluaXQtY29tbW9uLCBpbml0LXNlY3VyaXR5LXV0aWwiPgotICAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4gCisgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndzaW1wb3J0Ij4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3c2ltcG9ydC5WTUFSR1MiIHZhbHVlPSIgLURqYXZheC5uZXQuc3NsLnRydXN0U3RvcmU9JHtteXRydXN0c3RvcmUuZGIuZmlsZX0gLURqYXZheC5uZXQuc3NsLnRydXN0U3RvcmVQYXNzd29yZD0ke3NzbC5wYXNzd29yZH0iLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3c2ltcG9ydC5hcmdzIgpAQCAtODMsNyArODMsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1zZXJ2ZXIiIGRlcGVuZHM9ImNvbXBpbGUtc2VydmVyLCBpbml0LXNlY3VyaXR5LXV0aWwiPgogICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KLSAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4gCisgICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CiAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwYWNrYWdlLWVqYmphci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2VqYndzIi8+CkBAIC0xMDAsMTcgKzEwMCwxNyBAQAogICAgICAgICA8cmVwbGFjZSBmaWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIj4KICAgICAgICAgICAgIDxyZXBsYWNlZmlsdGVyIHRva2VuPSJASE9TVEAiIHZhbHVlPSIke3MxYXNDTn0iLz4KICAgICAgICAgPC9yZXBsYWNlPgotICAgICAgICA8Y29weSBmaWxlPSIke2FwcGxpY2F0aW9uLnhtbH0iIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvYXBwbGljYXRpb24ueG1sIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4gCi0gICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIj4gCisgICAgICAgIDxjb3B5IGZpbGU9IiR7YXBwbGljYXRpb24ueG1sfSIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgorICAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciI+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSI+CiAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLmphciIvPgogICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi53YXIiLz4KICAgICAgICAgICAgIDwvZmlsZXNldD4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iPgotCSAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiLz4KLQkgICAgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgorICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9hcHBsaWNhdGlvbi54bWwiLz4KKyAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogICAgICAgICAgICAgPC9maWxlc2V0PgotICAgICAgICA8L2phcj4gICAKKyAgICAgICAgPC9qYXI+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLWNsaWVudCIgZGVwZW5kcz0iY29tcGlsZS1jbGllbnQiPgpAQCAtMTE4LDExICsxMTgsMTEgQEAKIAogICAgICAgICA8dW5qYXIgc3JjPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgZGVzdD0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGFja2FnZS1hcHBjbGllbnRqYXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIKICAgICAgICAgICAgICAgICB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmphciIgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmphciIKICAgICAgICAgICAgICAgICB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICAgICB2YWx1ZT0iY29tL3N1bi8qKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL2F1dG9yZWNvdmVyeS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvYXV0b3JlY292ZXJ5L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMDNjODJiOS4uZmVkZmE2OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvYXV0b3JlY292ZXJ5L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvYXV0b3JlY292ZXJ5L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InR4LWVlLWF1dG9yZWNvdmVyeSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL2F1dG9yZWNvdmVyeS9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9hdXRvcmVjb3ZlcnkvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGY0ZWI4YmIuLmVjMmE1N2MgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL2F1dG9yZWNvdmVyeS9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvYXV0b3JlY292ZXJ5L2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogaW1wb3J0IGphdmEudXRpbC4qOwogCiAvKgotICogQ0xJIERldiB0ZXN0IAorICogQ0xJIERldiB0ZXN0CiAgKiBAYXV0aG9yIG12YXRraW5hCiAgKi8KIHB1YmxpYyBjbGFzcyBDbGllbnQgZXh0ZW5kcyBDbGllbnRCYXNlIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL2F1dG9yZWNvdmVyeS93YXIvVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL2F1dG9yZWNvdmVyeS93YXIvVGVzdFNlcnZsZXQuamF2YQppbmRleCA3ODNlYTRmLi41ODViZGIyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9hdXRvcmVjb3Zlcnkvd2FyL1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvYXV0b3JlY292ZXJ5L3dhci9UZXN0U2VydmxldC5qYXZhCkBAIC00Myw3ICs0Myw3IEBACiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKIAogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwLmdldFdyaXRlcigpOwotCXJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOworICAgIHJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogCiAgICAgICAgIFN0cmluZyB0eXBlID0gcmVxLmdldFF1ZXJ5U3RyaW5nKCk7CiAgICAgICAgIG91dC5wcmludGxuKCI8aHRtbD4iKTsKQEAgLTUyLDcgKzUyLDcgQEAKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L2hlYWQ+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJvZHk+Iik7CiAgICAgICAgIHRyeSB7Ci0JICAgIG91dC5wcmludGxuKCIiICsgKCh0eXBlID09IG51bGwpPyBiZWFuLnRlc3RvbmUocmVxLmdldExvY2FsUG9ydCgpKSA6IGJlYW4udGVzdHR3byhyZXEuZ2V0TG9jYWxQb3J0KCkpKSk7CisgICAgICAgIG91dC5wcmludGxuKCIiICsgKCh0eXBlID09IG51bGwpPyBiZWFuLnRlc3RvbmUocmVxLmdldExvY2FsUG9ydCgpKSA6IGJlYW4udGVzdHR3byhyZXEuZ2V0TG9jYWxQb3J0KCkpKSk7CiAgICAgICAgIH1jYXRjaChUaHJvd2FibGUgZSl7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiZ290IGV4Y2VwdGlvbiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oZSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9hdXRvcmVjb3Zlcnkvd2FyL1ZlcmlmeVNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL2F1dG9yZWNvdmVyeS93YXIvVmVyaWZ5U2VydmxldC5qYXZhCmluZGV4IGMwM2FmNzguLjJhNDEzNTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL2F1dG9yZWNvdmVyeS93YXIvVmVyaWZ5U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL2F1dG9yZWNvdmVyeS93YXIvVmVyaWZ5U2VydmxldC5qYXZhCkBAIC00Myw3ICs0Myw3IEBACiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKIAogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwLmdldFdyaXRlcigpOwotCXJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOworICAgIHJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogCiAgICAgICAgIFN0cmluZyB0eXBlID0gcmVxLmdldFF1ZXJ5U3RyaW5nKCk7CiAgICAgICAgIG91dC5wcmludGxuKCI8aHRtbD4iKTsKQEAgLTUyLDcgKzUyLDcgQEAKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L2hlYWQ+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJvZHk+Iik7CiAgICAgICAgIHRyeSB7Ci0JICAgIG91dC5wcmludGxuKCJSRVNVTFQ6IiArICgodHlwZSA9PSBudWxsKT8gYmVhbi52ZXJpZnlkZWZhdWx0KCkgOiBiZWFuLnZlcmlmeXhhKCkpKTsKKyAgICAgICAgb3V0LnByaW50bG4oIlJFU1VMVDoiICsgKCh0eXBlID09IG51bGwpPyBiZWFuLnZlcmlmeWRlZmF1bHQoKSA6IGJlYW4udmVyaWZ5eGEoKSkpOwogICAgICAgICB9Y2F0Y2goVGhyb3dhYmxlIGUpewogICAgICAgICAgICAgb3V0LnByaW50bG4oImdvdCBleGNlcHRpb24iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKGUpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvY2xpL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9jbGkvYnVpbGQucHJvcGVydGllcwppbmRleCBkZjIyMjhmLi5jYzQ0ZTI5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9jbGkvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9jbGkvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0idHgtZWUtY2xpIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvY2xpL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL2NsaS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMzIwZDc5ZS4uY2Q5MWI1YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvY2xpL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9jbGkvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiBpbXBvcnQgamF2YS51dGlsLio7CiAKIC8qCi0gKiBDTEkgRGV2IHRlc3QgCisgKiBDTEkgRGV2IHRlc3QKICAqIEBhdXRob3IgbXZhdGtpbmEKICAqLwogcHVibGljIGNsYXNzIENsaWVudCBleHRlbmRzIENsaWVudEJhc2UgewpAQCAtMTQwLDEwICsxNDAsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIC5hcHBlbmQoRmlsZS5zZXBhcmF0b3IpLmFwcGVuZChJTlNUQU5DRTFfTkFNRSkuYXBwZW5kKEZpbGUuc2VwYXJhdG9yKQogICAgICAgICAgICAgICAgICAgICAgICAgLmFwcGVuZCgibG9ncyIpLmFwcGVuZChGaWxlLnNlcGFyYXRvcikuYXBwZW5kKElOU1RBTkNFMV9OQU1FKQogICAgICAgICAgICAgICAgICAgICAgICAgLmFwcGVuZChGaWxlLnNlcGFyYXRvcikuYXBwZW5kKCJ0eCIpLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gYXNhZG1pbldpdGhPdXRwdXQoInJlY292ZXItdHJhbnNhY3Rpb25zIiwgIi0tdGFyZ2V0IiwgSU5TVEFOQ0UyX05BTUUsIAotICAgICAgICAgICAgICAgICAgICAgICAgIi0tdHJhbnNhY3Rpb25sb2dkaXIiLCB0eExvZywgSU5TVEFOQ0UxX05BTUUpOyAKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBhc2FkbWluV2l0aE91dHB1dCgicmVjb3Zlci10cmFuc2FjdGlvbnMiLCAiLS10YXJnZXQiLCBJTlNUQU5DRTJfTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICItLXRyYW5zYWN0aW9ubG9nZGlyIiwgdHhMb2csIElOU1RBTkNFMV9OQU1FKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gYXNhZG1pbldpdGhPdXRwdXQoInJlY292ZXItdHJhbnNhY3Rpb25zIiwgSU5TVEFOQ0UxX05BTUUpOyAKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBhc2FkbWluV2l0aE91dHB1dCgicmVjb3Zlci10cmFuc2FjdGlvbnMiLCBJTlNUQU5DRTFfTkFNRSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4ZWN1dGVkIGNvbW1hbmQ6ICIgKyByZXN1bHQub3V0KTsKICAgICAgICAgICAgIGlmICghcmVzdWx0LnJldHVyblZhbHVlKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9jbGkvd2FyL1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9jbGkvd2FyL1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggNzgzZWE0Zi4uNTg1YmRiMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvY2xpL3dhci9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL2NsaS93YXIvVGVzdFNlcnZsZXQuamF2YQpAQCAtNDMsNyArNDMsNyBAQAogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcC5nZXRXcml0ZXIoKTsKLQlyZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKKyAgICByZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKIAogICAgICAgICBTdHJpbmcgdHlwZSA9IHJlcS5nZXRRdWVyeVN0cmluZygpOwogICAgICAgICBvdXQucHJpbnRsbigiPGh0bWw+Iik7CkBAIC01Miw3ICs1Miw3IEBACiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9oZWFkPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxib2R5PiIpOwogICAgICAgICB0cnkgewotCSAgICBvdXQucHJpbnRsbigiIiArICgodHlwZSA9PSBudWxsKT8gYmVhbi50ZXN0b25lKHJlcS5nZXRMb2NhbFBvcnQoKSkgOiBiZWFuLnRlc3R0d28ocmVxLmdldExvY2FsUG9ydCgpKSkpOworICAgICAgICBvdXQucHJpbnRsbigiIiArICgodHlwZSA9PSBudWxsKT8gYmVhbi50ZXN0b25lKHJlcS5nZXRMb2NhbFBvcnQoKSkgOiBiZWFuLnRlc3R0d28ocmVxLmdldExvY2FsUG9ydCgpKSkpOwogICAgICAgICB9Y2F0Y2goVGhyb3dhYmxlIGUpewogICAgICAgICAgICAgb3V0LnByaW50bG4oImdvdCBleGNlcHRpb24iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKGUpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvY2xpL3dhci9WZXJpZnlTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9jbGkvd2FyL1ZlcmlmeVNlcnZsZXQuamF2YQppbmRleCBjMDNhZjc4Li4yYTQxMzUyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9jbGkvd2FyL1ZlcmlmeVNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9jbGkvd2FyL1ZlcmlmeVNlcnZsZXQuamF2YQpAQCAtNDMsNyArNDMsNyBAQAogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcC5nZXRXcml0ZXIoKTsKLQlyZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKKyAgICByZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKIAogICAgICAgICBTdHJpbmcgdHlwZSA9IHJlcS5nZXRRdWVyeVN0cmluZygpOwogICAgICAgICBvdXQucHJpbnRsbigiPGh0bWw+Iik7CkBAIC01Miw3ICs1Miw3IEBACiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9oZWFkPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxib2R5PiIpOwogICAgICAgICB0cnkgewotCSAgICBvdXQucHJpbnRsbigiUkVTVUxUOiIgKyAoKHR5cGUgPT0gbnVsbCk/IGJlYW4udmVyaWZ5ZGVmYXVsdCgpIDogYmVhbi52ZXJpZnl4YSgpKSk7CisgICAgICAgIG91dC5wcmludGxuKCJSRVNVTFQ6IiArICgodHlwZSA9PSBudWxsKT8gYmVhbi52ZXJpZnlkZWZhdWx0KCkgOiBiZWFuLnZlcmlmeXhhKCkpKTsKICAgICAgICAgfWNhdGNoKFRocm93YWJsZSBlKXsKICAgICAgICAgICAgIG91dC5wcmludGxuKCJnb3QgZXhjZXB0aW9uIik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbihlKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL2NvbW1vbi9DbGllbnRCYXNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9jb21tb24vQ2xpZW50QmFzZS5qYXZhCmluZGV4IGUzNzMyN2UuLmViZjM5NjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL2NvbW1vbi9DbGllbnRCYXNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvY29tbW9uL0NsaWVudEJhc2UuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogaW1wb3J0IGphdmEudXRpbC4qOwogCiAvKgotICogQ0xJIERldiB0ZXN0IAorICogQ0xJIERldiB0ZXN0CiAgKiBAYXV0aG9yIG12YXRraW5hCiAgKi8KIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBDbGllbnRCYXNlIGV4dGVuZHMgQWRtaW5CYXNlRGV2VGVzdCB7CkBAIC0xMTksNyArMTE5LDcgQEAKIAogICAgICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBjb25uLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgICAgICBCdWZmZXJlZFJlYWRlciBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKLSAgCisKICAgICAgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKICAgICAgICAgICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlByb2Nlc3NpbmcgbGluZTogIiArIGxpbmUpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvZGJsb2dzL2Jhc2UvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL2RibG9ncy9iYXNlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNDc4YzZjYS4uZGRkYTFjMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvZGJsb2dzL2Jhc2UvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9kYmxvZ3MvYmFzZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ0eC1lZS1kYmxvZ3MtYmFzZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL2RibG9ncy9iYXNlL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL2RibG9ncy9iYXNlL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA5MjZiOGRlLi5iZGJjZmRiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9kYmxvZ3MvYmFzZS9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvZGJsb2dzL2Jhc2UvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiBpbXBvcnQgamF2YS51dGlsLio7CiAKIC8qCi0gKiBDTEkgRGV2IHRlc3QgCisgKiBDTEkgRGV2IHRlc3QKICAqIEBhdXRob3IgbXZhdGtpbmEKICAqLwogcHVibGljIGNsYXNzIENsaWVudCBleHRlbmRzIENsaWVudEJhc2UgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvZGJsb2dzL2Jhc2Uvd2FyL1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9kYmxvZ3MvYmFzZS93YXIvVGVzdFNlcnZsZXQuamF2YQppbmRleCA3ODNlYTRmLi41ODViZGIyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9kYmxvZ3MvYmFzZS93YXIvVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9kYmxvZ3MvYmFzZS93YXIvVGVzdFNlcnZsZXQuamF2YQpAQCAtNDMsNyArNDMsNyBAQAogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcC5nZXRXcml0ZXIoKTsKLQlyZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKKyAgICByZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKIAogICAgICAgICBTdHJpbmcgdHlwZSA9IHJlcS5nZXRRdWVyeVN0cmluZygpOwogICAgICAgICBvdXQucHJpbnRsbigiPGh0bWw+Iik7CkBAIC01Miw3ICs1Miw3IEBACiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9oZWFkPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxib2R5PiIpOwogICAgICAgICB0cnkgewotCSAgICBvdXQucHJpbnRsbigiIiArICgodHlwZSA9PSBudWxsKT8gYmVhbi50ZXN0b25lKHJlcS5nZXRMb2NhbFBvcnQoKSkgOiBiZWFuLnRlc3R0d28ocmVxLmdldExvY2FsUG9ydCgpKSkpOworICAgICAgICBvdXQucHJpbnRsbigiIiArICgodHlwZSA9PSBudWxsKT8gYmVhbi50ZXN0b25lKHJlcS5nZXRMb2NhbFBvcnQoKSkgOiBiZWFuLnRlc3R0d28ocmVxLmdldExvY2FsUG9ydCgpKSkpOwogICAgICAgICB9Y2F0Y2goVGhyb3dhYmxlIGUpewogICAgICAgICAgICAgb3V0LnByaW50bG4oImdvdCBleGNlcHRpb24iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKGUpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvZGJsb2dzL2Jhc2Uvd2FyL1ZlcmlmeVNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL2RibG9ncy9iYXNlL3dhci9WZXJpZnlTZXJ2bGV0LmphdmEKaW5kZXggYzAzYWY3OC4uMmE0MTM1MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvZGJsb2dzL2Jhc2Uvd2FyL1ZlcmlmeVNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9kYmxvZ3MvYmFzZS93YXIvVmVyaWZ5U2VydmxldC5qYXZhCkBAIC00Myw3ICs0Myw3IEBACiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKIAogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwLmdldFdyaXRlcigpOwotCXJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOworICAgIHJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogCiAgICAgICAgIFN0cmluZyB0eXBlID0gcmVxLmdldFF1ZXJ5U3RyaW5nKCk7CiAgICAgICAgIG91dC5wcmludGxuKCI8aHRtbD4iKTsKQEAgLTUyLDcgKzUyLDcgQEAKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L2hlYWQ+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJvZHk+Iik7CiAgICAgICAgIHRyeSB7Ci0JICAgIG91dC5wcmludGxuKCJSRVNVTFQ6IiArICgodHlwZSA9PSBudWxsKT8gYmVhbi52ZXJpZnlkZWZhdWx0KCkgOiBiZWFuLnZlcmlmeXhhKCkpKTsKKyAgICAgICAgb3V0LnByaW50bG4oIlJFU1VMVDoiICsgKCh0eXBlID09IG51bGwpPyBiZWFuLnZlcmlmeWRlZmF1bHQoKSA6IGJlYW4udmVyaWZ5eGEoKSkpOwogICAgICAgICB9Y2F0Y2goVGhyb3dhYmxlIGUpewogICAgICAgICAgICAgb3V0LnByaW50bG4oImdvdCBleGNlcHRpb24iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKGUpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvZGJsb2dzL21kYi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvZGJsb2dzL21kYi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDIxMWJiMzUuLjBhZWEyYzkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL2RibG9ncy9tZGIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9kYmxvZ3MvbWRiL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InR4LWVlLWRibG9ncy1tZGIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9kYmxvZ3MvbWRiL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL2RibG9ncy9tZGIvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDhhMjMxNzYuLjVlZDFhYWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL2RibG9ncy9tZGIvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL2RibG9ncy9tZGIvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiBpbXBvcnQgamF2YS51dGlsLio7CiAKIC8qCi0gKiBDTEkgRGV2IHRlc3QgCisgKiBDTEkgRGV2IHRlc3QKICAqIEBhdXRob3IgbXZhdGtpbmEKICAqLwogcHVibGljIGNsYXNzIENsaWVudCBleHRlbmRzIENsaWVudEJhc2UgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvZGJsb2dzL21kYi93YXIvVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL2RibG9ncy9tZGIvd2FyL1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggM2UzMTBhMy4uNzIxMWUzNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvZGJsb2dzL21kYi93YXIvVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9kYmxvZ3MvbWRiL3dhci9UZXN0U2VydmxldC5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKIAogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwLmdldFdyaXRlcigpOwotCXJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOworICAgIHJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogCiAgICAgICAgIFN0cmluZyB0eXBlID0gcmVxLmdldFF1ZXJ5U3RyaW5nKCk7CiAgICAgICAgIG91dC5wcmludGxuKCI8aHRtbD4iKTsKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L2hlYWQ+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJvZHk+Iik7CiAgICAgICAgIHRyeSB7Ci0JICAgICBvdXQucHJpbnRsbigiIiArICgodHlwZSA9PSBudWxsKT8gYmVhbi50ZXN0dHdvKHJlcS5nZXRMb2NhbFBvcnQoKSwgZmFsc2UpIDogYmVhbi50ZXN0dHdvKHJlcS5nZXRMb2NhbFBvcnQoKSwgdHJ1ZSkpKTsKKyAgICAgICAgIG91dC5wcmludGxuKCIiICsgKCh0eXBlID09IG51bGwpPyBiZWFuLnRlc3R0d28ocmVxLmdldExvY2FsUG9ydCgpLCBmYWxzZSkgOiBiZWFuLnRlc3R0d28ocmVxLmdldExvY2FsUG9ydCgpLCB0cnVlKSkpOwogICAgICAgICB9Y2F0Y2goVGhyb3dhYmxlIGUpewogICAgICAgICAgICAgb3V0LnByaW50bG4oImdvdCBleGNlcHRpb24iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKGUpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvZGJsb2dzL21kYi93YXIvVmVyaWZ5U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvZGJsb2dzL21kYi93YXIvVmVyaWZ5U2VydmxldC5qYXZhCmluZGV4IGQ1MDE0ODMuLmJjM2VmZTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL2RibG9ncy9tZGIvd2FyL1ZlcmlmeVNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9kYmxvZ3MvbWRiL3dhci9WZXJpZnlTZXJ2bGV0LmphdmEKQEAgLTM3LDcgKzM3LDcgQEAKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogCiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3AuZ2V0V3JpdGVyKCk7Ci0JcmVzcC5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CisgICAgcmVzcC5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAKICAgICAgICAgU3RyaW5nIHR5cGUgPSByZXEuZ2V0UXVlcnlTdHJpbmcoKTsKICAgICAgICAgb3V0LnByaW50bG4oIjxodG1sPiIpOwpAQCAtNDYsOCArNDYsOCBAQAogICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvaGVhZD4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8Ym9keT4iKTsKICAgICAgICAgdHJ5IHsKLQkgICAgb3V0LnByaW50bG4oIlJFU1VMVDoiICsgYmVhbi52ZXJpZnl4YSgpKTsKLQkgICAgLy9vdXQucHJpbnRsbigiUkVTVUxUOiIgKyAoKHR5cGUgPT0gbnVsbCk/IGJlYW4udmVyaWZ5ZGVmYXVsdCgpIDogYmVhbi52ZXJpZnl4YSgpKSk7CisgICAgICAgIG91dC5wcmludGxuKCJSRVNVTFQ6IiArIGJlYW4udmVyaWZ5eGEoKSk7CisgICAgICAgIC8vb3V0LnByaW50bG4oIlJFU1VMVDoiICsgKCh0eXBlID09IG51bGwpPyBiZWFuLnZlcmlmeWRlZmF1bHQoKSA6IGJlYW4udmVyaWZ5eGEoKSkpOwogICAgICAgICB9Y2F0Y2goVGhyb3dhYmxlIGUpewogICAgICAgICAgICAgb3V0LnByaW50bG4oImdvdCBleGNlcHRpb24iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKGUpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvbWRiL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9tZGIvYnVpbGQucHJvcGVydGllcwppbmRleCA5YmNiYWFhLi5hNGM0YzgwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9tZGIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9tZGIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0idHgtZWUtbWRiIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvbWRiL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL21kYi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggNGJmNGYwZS4uNzVkZTc4OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvbWRiL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9tZGIvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiBpbXBvcnQgamF2YS51dGlsLio7CiAKIC8qCi0gKiBDTEkgRGV2IHRlc3QgCisgKiBDTEkgRGV2IHRlc3QKICAqIEBhdXRob3IgbXZhdGtpbmEKICAqLwogcHVibGljIGNsYXNzIENsaWVudCBleHRlbmRzIENsaWVudEJhc2UgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvbWRiL3dhci9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvbWRiL3dhci9UZXN0U2VydmxldC5qYXZhCmluZGV4IGJmNWNkZjMuLmFjMDgxOTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL21kYi93YXIvVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9tZGIvd2FyL1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTM3LDcgKzM3LDcgQEAKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogCiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3AuZ2V0V3JpdGVyKCk7Ci0JcmVzcC5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CisgICAgcmVzcC5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAKICAgICAgICAgU3RyaW5nIHR5cGUgPSByZXEuZ2V0UXVlcnlTdHJpbmcoKTsKICAgICAgICAgb3V0LnByaW50bG4oIjxodG1sPiIpOwpAQCAtNDYsOCArNDYsOCBAQAogICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvaGVhZD4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8Ym9keT4iKTsKICAgICAgICAgdHJ5IHsKLQkgICAgLy9vdXQucHJpbnRsbigiIiArICgodHlwZSA9PSBudWxsKT8gYmVhbi50ZXN0b25lKHJlcS5nZXRMb2NhbFBvcnQoKSkgOiBiZWFuLnRlc3R0d28ocmVxLmdldExvY2FsUG9ydCgpKSkpOwotCSAgICBvdXQucHJpbnRsbigiIiArIGJlYW4udGVzdHR3byhyZXEuZ2V0TG9jYWxQb3J0KCkpKTsKKyAgICAgICAgLy9vdXQucHJpbnRsbigiIiArICgodHlwZSA9PSBudWxsKT8gYmVhbi50ZXN0b25lKHJlcS5nZXRMb2NhbFBvcnQoKSkgOiBiZWFuLnRlc3R0d28ocmVxLmdldExvY2FsUG9ydCgpKSkpOworICAgICAgICBvdXQucHJpbnRsbigiIiArIGJlYW4udGVzdHR3byhyZXEuZ2V0TG9jYWxQb3J0KCkpKTsKICAgICAgICAgfWNhdGNoKFRocm93YWJsZSBlKXsKICAgICAgICAgICAgIG91dC5wcmludGxuKCJnb3QgZXhjZXB0aW9uIik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbihlKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL21kYi93YXIvVmVyaWZ5U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvbWRiL3dhci9WZXJpZnlTZXJ2bGV0LmphdmEKaW5kZXggZDUwMTQ4My4uYmMzZWZlNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvbWRiL3dhci9WZXJpZnlTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvbWRiL3dhci9WZXJpZnlTZXJ2bGV0LmphdmEKQEAgLTM3LDcgKzM3LDcgQEAKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogCiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3AuZ2V0V3JpdGVyKCk7Ci0JcmVzcC5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CisgICAgcmVzcC5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAKICAgICAgICAgU3RyaW5nIHR5cGUgPSByZXEuZ2V0UXVlcnlTdHJpbmcoKTsKICAgICAgICAgb3V0LnByaW50bG4oIjxodG1sPiIpOwpAQCAtNDYsOCArNDYsOCBAQAogICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvaGVhZD4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8Ym9keT4iKTsKICAgICAgICAgdHJ5IHsKLQkgICAgb3V0LnByaW50bG4oIlJFU1VMVDoiICsgYmVhbi52ZXJpZnl4YSgpKTsKLQkgICAgLy9vdXQucHJpbnRsbigiUkVTVUxUOiIgKyAoKHR5cGUgPT0gbnVsbCk/IGJlYW4udmVyaWZ5ZGVmYXVsdCgpIDogYmVhbi52ZXJpZnl4YSgpKSk7CisgICAgICAgIG91dC5wcmludGxuKCJSRVNVTFQ6IiArIGJlYW4udmVyaWZ5eGEoKSk7CisgICAgICAgIC8vb3V0LnByaW50bG4oIlJFU1VMVDoiICsgKCh0eXBlID09IG51bGwpPyBiZWFuLnZlcmlmeWRlZmF1bHQoKSA6IGJlYW4udmVyaWZ5eGEoKSkpOwogICAgICAgICB9Y2F0Y2goVGhyb3dhYmxlIGUpewogICAgICAgICAgICAgb3V0LnByaW50bG4oImdvdCBleGNlcHRpb24iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKGUpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvcmVzZW5kYXV0b3JlY292ZXJ5L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9yZXNlbmRhdXRvcmVjb3ZlcnkvYnVpbGQucHJvcGVydGllcwppbmRleCBmMGIxZGJmLi4wODQwMmI2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9yZXNlbmRhdXRvcmVjb3ZlcnkvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9yZXNlbmRhdXRvcmVjb3ZlcnkvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0idHgtZWUtcmVzZW5kYXV0b3JlY292ZXJ5Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvcmVzZW5kYXV0b3JlY292ZXJ5L2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL3Jlc2VuZGF1dG9yZWNvdmVyeS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMzg1N2U1Mi4uYjBkY2U4YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvcmVzZW5kYXV0b3JlY292ZXJ5L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9yZXNlbmRhdXRvcmVjb3ZlcnkvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiBpbXBvcnQgamF2YS51dGlsLio7CiAKIC8qCi0gKiBDTEkgRGV2IHRlc3QgCisgKiBDTEkgRGV2IHRlc3QKICAqIEBhdXRob3IgbXZhdGtpbmEKICAqLwogcHVibGljIGNsYXNzIENsaWVudCBleHRlbmRzIENsaWVudEJhc2UgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvcmVzZW5kYXV0b3JlY292ZXJ5L3dhci9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvcmVzZW5kYXV0b3JlY292ZXJ5L3dhci9UZXN0U2VydmxldC5qYXZhCmluZGV4IGM1ODNjZTguLjMyMzg5ZmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL3Jlc2VuZGF1dG9yZWNvdmVyeS93YXIvVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9yZXNlbmRhdXRvcmVjb3Zlcnkvd2FyL1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTQzLDcgKzQzLDcgQEAKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogCiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3AuZ2V0V3JpdGVyKCk7Ci0JcmVzcC5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CisgICAgcmVzcC5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAKICAgICAgICAgU3RyaW5nIHR5cGUgPSByZXEuZ2V0UXVlcnlTdHJpbmcoKTsKICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJSVDogIiArIHR5cGUpOwpAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvaGVhZD4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8Ym9keT4iKTsKICAgICAgICAgdHJ5IHsKLQkgICAgb3V0LnByaW50bG4oIiIgKyAoKHR5cGUgPT0gbnVsbCk/IGJlYW4udGVzdG9uZShyZXEuZ2V0TG9jYWxQb3J0KCkpIDogYmVhbi50ZXN0dHdvKHJlcS5nZXRMb2NhbFBvcnQoKSkpKTsKKyAgICAgICAgb3V0LnByaW50bG4oIiIgKyAoKHR5cGUgPT0gbnVsbCk/IGJlYW4udGVzdG9uZShyZXEuZ2V0TG9jYWxQb3J0KCkpIDogYmVhbi50ZXN0dHdvKHJlcS5nZXRMb2NhbFBvcnQoKSkpKTsKICAgICAgICAgfWNhdGNoKFRocm93YWJsZSBlKXsKICAgICAgICAgICAgIG91dC5wcmludGxuKCJnb3QgZXhjZXB0aW9uIik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbihlKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL3Jlc2VuZGF1dG9yZWNvdmVyeS93YXIvVmVyaWZ5U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvcmVzZW5kYXV0b3JlY292ZXJ5L3dhci9WZXJpZnlTZXJ2bGV0LmphdmEKaW5kZXggYzAzYWY3OC4uMmE0MTM1MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvcmVzZW5kYXV0b3JlY292ZXJ5L3dhci9WZXJpZnlTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvcmVzZW5kYXV0b3JlY292ZXJ5L3dhci9WZXJpZnlTZXJ2bGV0LmphdmEKQEAgLTQzLDcgKzQzLDcgQEAKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogCiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3AuZ2V0V3JpdGVyKCk7Ci0JcmVzcC5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CisgICAgcmVzcC5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAKICAgICAgICAgU3RyaW5nIHR5cGUgPSByZXEuZ2V0UXVlcnlTdHJpbmcoKTsKICAgICAgICAgb3V0LnByaW50bG4oIjxodG1sPiIpOwpAQCAtNTIsNyArNTIsNyBAQAogICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvaGVhZD4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8Ym9keT4iKTsKICAgICAgICAgdHJ5IHsKLQkgICAgb3V0LnByaW50bG4oIlJFU1VMVDoiICsgKCh0eXBlID09IG51bGwpPyBiZWFuLnZlcmlmeWRlZmF1bHQoKSA6IGJlYW4udmVyaWZ5eGEoKSkpOworICAgICAgICBvdXQucHJpbnRsbigiUkVTVUxUOiIgKyAoKHR5cGUgPT0gbnVsbCk/IGJlYW4udmVyaWZ5ZGVmYXVsdCgpIDogYmVhbi52ZXJpZnl4YSgpKSk7CiAgICAgICAgIH1jYXRjaChUaHJvd2FibGUgZSl7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiZ290IGV4Y2VwdGlvbiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oZSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9zZWxmcmVjb3ZlcnkvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL3NlbGZyZWNvdmVyeS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGYwMDJhMmUuLjZlZDU0OWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL3NlbGZyZWNvdmVyeS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL3NlbGZyZWNvdmVyeS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ0eC1lZS1zZWxmcmVjb3ZlcnkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9zZWxmcmVjb3ZlcnkvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvc2VsZnJlY292ZXJ5L2NsaWVudC9DbGllbnQuamF2YQppbmRleCBmOGUyOGFiLi43YmFiYWIxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9zZWxmcmVjb3ZlcnkvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL3NlbGZyZWNvdmVyeS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKIGltcG9ydCBqYXZhLnV0aWwuKjsKIAogLyoKLSAqIENMSSBEZXYgdGVzdCAKKyAqIENMSSBEZXYgdGVzdAogICogQGF1dGhvciBtdmF0a2luYQogICovCiBwdWJsaWMgY2xhc3MgQ2xpZW50IGV4dGVuZHMgQ2xpZW50QmFzZSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9zZWxmcmVjb3Zlcnkvd2FyL1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9zZWxmcmVjb3Zlcnkvd2FyL1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggNzgzZWE0Zi4uNTg1YmRiMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvc2VsZnJlY292ZXJ5L3dhci9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL3NlbGZyZWNvdmVyeS93YXIvVGVzdFNlcnZsZXQuamF2YQpAQCAtNDMsNyArNDMsNyBAQAogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcC5nZXRXcml0ZXIoKTsKLQlyZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKKyAgICByZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKIAogICAgICAgICBTdHJpbmcgdHlwZSA9IHJlcS5nZXRRdWVyeVN0cmluZygpOwogICAgICAgICBvdXQucHJpbnRsbigiPGh0bWw+Iik7CkBAIC01Miw3ICs1Miw3IEBACiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9oZWFkPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxib2R5PiIpOwogICAgICAgICB0cnkgewotCSAgICBvdXQucHJpbnRsbigiIiArICgodHlwZSA9PSBudWxsKT8gYmVhbi50ZXN0b25lKHJlcS5nZXRMb2NhbFBvcnQoKSkgOiBiZWFuLnRlc3R0d28ocmVxLmdldExvY2FsUG9ydCgpKSkpOworICAgICAgICBvdXQucHJpbnRsbigiIiArICgodHlwZSA9PSBudWxsKT8gYmVhbi50ZXN0b25lKHJlcS5nZXRMb2NhbFBvcnQoKSkgOiBiZWFuLnRlc3R0d28ocmVxLmdldExvY2FsUG9ydCgpKSkpOwogICAgICAgICB9Y2F0Y2goVGhyb3dhYmxlIGUpewogICAgICAgICAgICAgb3V0LnByaW50bG4oImdvdCBleGNlcHRpb24iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKGUpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvc2VsZnJlY292ZXJ5L3dhci9WZXJpZnlTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9zZWxmcmVjb3Zlcnkvd2FyL1ZlcmlmeVNlcnZsZXQuamF2YQppbmRleCBjMDNhZjc4Li4yYTQxMzUyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9zZWxmcmVjb3Zlcnkvd2FyL1ZlcmlmeVNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS9zZWxmcmVjb3Zlcnkvd2FyL1ZlcmlmeVNlcnZsZXQuamF2YQpAQCAtNDMsNyArNDMsNyBAQAogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcC5nZXRXcml0ZXIoKTsKLQlyZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKKyAgICByZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKIAogICAgICAgICBTdHJpbmcgdHlwZSA9IHJlcS5nZXRRdWVyeVN0cmluZygpOwogICAgICAgICBvdXQucHJpbnRsbigiPGh0bWw+Iik7CkBAIC01Miw3ICs1Miw3IEBACiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9oZWFkPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxib2R5PiIpOwogICAgICAgICB0cnkgewotCSAgICBvdXQucHJpbnRsbigiUkVTVUxUOiIgKyAoKHR5cGUgPT0gbnVsbCk/IGJlYW4udmVyaWZ5ZGVmYXVsdCgpIDogYmVhbi52ZXJpZnl4YSgpKSk7CisgICAgICAgIG91dC5wcmludGxuKCJSRVNVTFQ6IiArICgodHlwZSA9PSBudWxsKT8gYmVhbi52ZXJpZnlkZWZhdWx0KCkgOiBiZWFuLnZlcmlmeXhhKCkpKTsKICAgICAgICAgfWNhdGNoKFRocm93YWJsZSBlKXsKICAgICAgICAgICAgIG91dC5wcmludGxuKCJnb3QgZXhjZXB0aW9uIik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbihlKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL3RpbWVyX3dpdGhfYXV0b3JlY292ZXJ5L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS90aW1lcl93aXRoX2F1dG9yZWNvdmVyeS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGM2ZjQ0MzQuLmQ1NjQ2YWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL3RpbWVyX3dpdGhfYXV0b3JlY292ZXJ5L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvdGltZXJfd2l0aF9hdXRvcmVjb3ZlcnkvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0idHgtZWUtdGltZXItd2l0aC1hdXRvcmVjb3ZlcnkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS90aW1lcl93aXRoX2F1dG9yZWNvdmVyeS9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS90aW1lcl93aXRoX2F1dG9yZWNvdmVyeS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggM2NjM2Q1Zi4uNDlhYWE5ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvdGltZXJfd2l0aF9hdXRvcmVjb3ZlcnkvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL3RpbWVyX3dpdGhfYXV0b3JlY292ZXJ5L2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogaW1wb3J0IGphdmEudXRpbC4qOwogCiAvKgotICogQ0xJIERldiB0ZXN0IAorICogQ0xJIERldiB0ZXN0CiAgKiBAYXV0aG9yIG12YXRraW5hCiAgKi8KIHB1YmxpYyBjbGFzcyBDbGllbnQgZXh0ZW5kcyBDbGllbnRCYXNlIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL3RpbWVyX3dpdGhfYXV0b3JlY292ZXJ5L3dhci9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvdGltZXJfd2l0aF9hdXRvcmVjb3Zlcnkvd2FyL1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggZDcxODUyMS4uOGYxY2MzMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvdGltZXJfd2l0aF9hdXRvcmVjb3Zlcnkvd2FyL1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvdGltZXJfd2l0aF9hdXRvcmVjb3Zlcnkvd2FyL1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTQzLDcgKzQzLDcgQEAKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogCiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3AuZ2V0V3JpdGVyKCk7Ci0JcmVzcC5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CisgICAgcmVzcC5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAKICAgICAgICAgU3RyaW5nIHR5cGUgPSByZXEuZ2V0UXVlcnlTdHJpbmcoKTsKICAgICAgICAgb3V0LnByaW50bG4oIjxodG1sPiIpOwpAQCAtNTIsNyArNTIsNyBAQAogICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvaGVhZD4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8Ym9keT4iKTsKICAgICAgICAgdHJ5IHsKLQkgICAgb3V0LnByaW50bG4oIiIgKyAoKHR5cGUgPT0gbnVsbCk/IGJlYW4uY3JlYXRlX3RpbWVyKHJlcS5nZXRMb2NhbFBvcnQoKSkgOiBiZWFuLnRlc3R0d28ocmVxLmdldExvY2FsUG9ydCgpKSkpOworICAgICAgICBvdXQucHJpbnRsbigiIiArICgodHlwZSA9PSBudWxsKT8gYmVhbi5jcmVhdGVfdGltZXIocmVxLmdldExvY2FsUG9ydCgpKSA6IGJlYW4udGVzdHR3byhyZXEuZ2V0TG9jYWxQb3J0KCkpKSk7CiAgICAgICAgIH1jYXRjaChUaHJvd2FibGUgZSl7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiZ290IGV4Y2VwdGlvbiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oZSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS90aW1lcl93aXRoX2F1dG9yZWNvdmVyeS93YXIvVmVyaWZ5U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vZWUvdGltZXJfd2l0aF9hdXRvcmVjb3Zlcnkvd2FyL1ZlcmlmeVNlcnZsZXQuamF2YQppbmRleCBjMDNhZjc4Li4yYTQxMzUyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi9lZS90aW1lcl93aXRoX2F1dG9yZWNvdmVyeS93YXIvVmVyaWZ5U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL2VlL3RpbWVyX3dpdGhfYXV0b3JlY292ZXJ5L3dhci9WZXJpZnlTZXJ2bGV0LmphdmEKQEAgLTQzLDcgKzQzLDcgQEAKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogCiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3AuZ2V0V3JpdGVyKCk7Ci0JcmVzcC5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CisgICAgcmVzcC5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAKICAgICAgICAgU3RyaW5nIHR5cGUgPSByZXEuZ2V0UXVlcnlTdHJpbmcoKTsKICAgICAgICAgb3V0LnByaW50bG4oIjxodG1sPiIpOwpAQCAtNTIsNyArNTIsNyBAQAogICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvaGVhZD4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8Ym9keT4iKTsKICAgICAgICAgdHJ5IHsKLQkgICAgb3V0LnByaW50bG4oIlJFU1VMVDoiICsgKCh0eXBlID09IG51bGwpPyBiZWFuLnZlcmlmeWRlZmF1bHQoKSA6IGJlYW4udmVyaWZ5eGEoKSkpOworICAgICAgICBvdXQucHJpbnRsbigiUkVTVUxUOiIgKyAoKHR5cGUgPT0gbnVsbCk/IGJlYW4udmVyaWZ5ZGVmYXVsdCgpIDogYmVhbi52ZXJpZnl4YSgpKSk7CiAgICAgICAgIH1jYXRjaChUaHJvd2FibGUgZSl7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiZ290IGV4Y2VwdGlvbiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oZSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90d29wY3JlYWRvbmx5L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90d29wY3JlYWRvbmx5L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOTE5YjA5YS4uM2U4MGY2NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHdvcGNyZWFkb25seS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R3b3BjcmVhZG9ubHkvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0idHJhbnNhY3Rpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgpAQCAtMjMsOSArMjMsOSBAQAogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJ0eGdsb2JhbCIvPiAgICAgICAgIAotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCi08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS90eGdsb2JhbC1jbGllbnQuamFyIi8+IAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJ0eGdsb2JhbCIvPiAgICAgICAgXHUwMDIwCis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vdHhnbG9iYWwtY2xpZW50LmphciIvPlx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImpkYmMucmVzb3VyY2UudHlwZSIgdmFsdWU9ImphdmF4LnNxbC5YQURhdGFTb3VyY2UiLz4KIDxwcm9wZXJ0eSBuYW1lPSJkYi51cmwxIiB2YWx1ZT0iamRiYzpvcmFjbGU6dGhpbjpAbWlnOjE1MjE6bWlnIi8+CiA8cHJvcGVydHkgbmFtZT0iZGIudXJsMiIgdmFsdWU9ImpkYmM6b3JhY2xlOnRoaW46QDEyOS4xNTguMjI5LjU5OjE1MjE6T1JDTDkiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R3b3BjcmVhZG9ubHkvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHdvcGNyZWFkb25seS9idWlsZC54bWwKaW5kZXggZTlkNWVhYS4uMzQ3NzQwYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHdvcGNyZWFkb25seS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHdvcGNyZWFkb25seS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIiAvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYi9iZWFuQiIvPgpAQCAtNDgsOCArNDgsOCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtZWFyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAtcG9pbnRiYXNlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9jcmVhdGVfcG9pbnRiYXNlLnNxbCIvPgpAQCAtMTA3LDExICsxMDcsMTEgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5zZXR1cC1wb2ludGJhc2UiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtamRiYy1yZXNvdXJjZS1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJqZGJjLnJlc291cmNlLm5hbWUiIHZhbHVlPSJqZGJjL3MxcWVEQjEiLz4KQEAgLTEzMCw3ICsxMzAsNyBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcWwuZmlsZSIgdmFsdWU9InNxbC9kcm9wX3BvaW50YmFzZS5zcWwiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImV4ZWN1dGUtc3FsLWNvbW1vbiI+Ci0gICAgICAgICAgPHBhcmFtIG5hbWU9ImRiLnVybCIgCisgICAgICAgICAgPHBhcmFtIG5hbWU9ImRiLnVybCIKICAgICAgICAgICB2YWx1ZT0iamRiYzpwb2ludGJhc2U6c2VydmVyOi8vJHtkYi5ob3N0fTo5MDkzL3N1bi1hcHBzZXJ2LXNhbXBsZXMiLz4KICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3FsLmZpbGUiIHZhbHVlPSJzcWwvZHJvcF9wb2ludGJhc2Uuc3FsIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R3b3BjcmVhZG9ubHkvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHdvcGNyZWFkb25seS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggNTMyN2QyNC4uMDgxOTk4ZiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHdvcGNyZWFkb25seS9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHdvcGNyZWFkb25seS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTMyLDE1ICszMiwxNSBAQAogICAgIHB1YmxpYyBDbGllbnQoKSB7CiAgICAgfQogCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeyAKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcblN0YXJ0aW5nIFR4Z2xvYmFsIFRlc3QgU3VpdGUiKTsgIAotICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOyAKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG5TdGFydGluZyBUeGdsb2JhbCBUZXN0IFN1aXRlIik7CisgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7CiAKICAgICAgICAgLy8gaW5pdGlhbGl6ZSB0aGUgY29udGV4dCBhbmQgaG9tZSBvYmplY3QKICAgICAgICAgY2xpZW50LnNldHVwKCk7CiAKICAgICAgICAgLy8gcnVuIHRoZSB0ZXN0cwotICAgICAgICBjbGllbnQucnVuVGVzdENsaWVudCgpOyAgIAorICAgICAgICBjbGllbnQucnVuVGVzdENsaWVudCgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldHVwKCkgewpAQCAtNzMsNyArNzMsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHRlc3QxKCkgewotICAgICAgICB0cnkgeyAgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4ZWN1dGUgQmVhbkI6OnRlc3QxIik7CiAKICAgICAgICAgICAgIFR4UmVtb3RlQiBiZWFuQiA9IGhvbWUuY3JlYXRlKCk7CkBAIC04Miw3ICs4Miw3IEBACiAKICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gMCkgewogICAgICAgICAgICAgICAgIHN0YXR1cy5hZGRTdGF0dXMoInR4Z2xvYmFsIHRlc3QxOiAiLCBzdGF0dXMuUEFTUyk7Ci0gICAgICAgICAgICB9IGVsc2UgewkgCisgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHN0YXR1cy5hZGRTdGF0dXMoInR4Z2xvYmFsIHRlc3QxOiAiLCBzdGF0dXMuRkFJTCk7CiAgICAgICAgICAgICB9CiAKQEAgLTk2LDcgKzk2LDcgQEAKIAogICAgIHB1YmxpYyB2b2lkIHRlc3QyKCkgewogICAgICAgICBUeFJlbW90ZUIgYmVhbkIgPSBudWxsOwotICAgICAgICB0cnkgeyAgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4ZWN1dGUgQmVhbkI6OnRlc3QyIik7CiAKICAgICAgICAgICAgIGJlYW5CID0gaG9tZS5jcmVhdGUoKTsKQEAgLTEwNSw3ICsxMDUsNyBAQAogCiAgICAgICAgICAgICBpZiAocmVzdWx0ID09IDEpIHsKICAgICAgICAgICAgICAgICBzdGF0dXMuYWRkU3RhdHVzKCJ0eGdsb2JhbCB0ZXN0MjogIiwgc3RhdHVzLlBBU1MpOwotICAgICAgICAgICAgfSBlbHNlIHsJIAorICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBzdGF0dXMuYWRkU3RhdHVzKCJ0eGdsb2JhbCB0ZXN0MjogIiwgc3RhdHVzLkZBSUwpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYmVhbkIucmVtb3ZlKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90d29wY3JlYWRvbmx5L2Rlc2NyaXB0b3IvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90d29wY3JlYWRvbmx5L2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggNGUxZGE1OS4uZDgwNTk2NSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHdvcGNyZWFkb25seS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R3b3BjcmVhZG9ubHkvZGVzY3JpcHRvci9lamItamFyLnhtbApAQCAtNzMsNyArNzMsNyBAQAogICAgICAgICAgICAgICA8bWV0aG9kLW5hbWU+dGVzdDE8L21ldGhvZC1uYW1lPgogICAgICAgICAgIDwvbWV0aG9kPgogICAgICAgICAgIDx0cmFucy1hdHRyaWJ1dGU+UmVxdWlyZWQ8L3RyYW5zLWF0dHJpYnV0ZT4KLSAgICAgIDwvY29udGFpbmVyLXRyYW5zYWN0aW9uPiAKKyAgICAgIDwvY29udGFpbmVyLXRyYW5zYWN0aW9uPgogICAgICAgPGNvbnRhaW5lci10cmFuc2FjdGlvbj4KICAgICAgICAgICA8bWV0aG9kPgogICAgICAgICAgICAgICA8ZWpiLW5hbWU+VHhCZWFuQjwvZWpiLW5hbWU+CkBAIC04MSw3ICs4MSw3IEBACiAgICAgICAgICAgICAgIDxtZXRob2QtbmFtZT50ZXN0MjwvbWV0aG9kLW5hbWU+CiAgICAgICAgICAgPC9tZXRob2Q+CiAgICAgICAgICAgPHRyYW5zLWF0dHJpYnV0ZT5SZXF1aXJlZDwvdHJhbnMtYXR0cmlidXRlPgotICAgICAgPC9jb250YWluZXItdHJhbnNhY3Rpb24+IAorICAgICAgPC9jb250YWluZXItdHJhbnNhY3Rpb24+CiAgICAgICA8Y29udGFpbmVyLXRyYW5zYWN0aW9uPgogICAgICAgICAgIDxtZXRob2Q+CiAgICAgICAgICAgICAgIDxlamItbmFtZT5UeEJlYW5CPC9lamItbmFtZT4KQEAgLTg5LDYgKzg5LDYgQEAKICAgICAgICAgICAgICAgPG1ldGhvZC1uYW1lPmdldENvbW1pdFN0YXR1czwvbWV0aG9kLW5hbWU+CiAgICAgICAgICAgPC9tZXRob2Q+CiAgICAgICAgICAgPHRyYW5zLWF0dHJpYnV0ZT5Ob3RTdXBwb3J0ZWQ8L3RyYW5zLWF0dHJpYnV0ZT4KLSAgICAgIDwvY29udGFpbmVyLXRyYW5zYWN0aW9uPiAKKyAgICAgIDwvY29udGFpbmVyLXRyYW5zYWN0aW9uPgogICA8L2Fzc2VtYmx5LWRlc2NyaXB0b3I+CiA8L2VqYi1qYXI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90d29wY3JlYWRvbmx5L2VqYi9iZWFuQi9UeEJlYW5CLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90d29wY3JlYWRvbmx5L2VqYi9iZWFuQi9UeEJlYW5CLmphdmEKaW5kZXggNTgyNzNjMi4uYjQyYTUxYyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHdvcGNyZWFkb25seS9lamIvYmVhbkIvVHhCZWFuQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R3b3BjcmVhZG9ubHkvZWpiL2JlYW5CL1R4QmVhbkIuamF2YQpAQCAtMzYsMTQgKzM2LDE0IEBACiAgICAgcHJpdmF0ZSBTdHJpbmcgZGJVUkwxID0gbnVsbDsKICAgICBwcml2YXRlIFN0cmluZyBkYlVSTDIgPSBudWxsOwogICAgIHByaXZhdGUgU3RyaW5nIHBhc3N3b3JkID0gbnVsbDsKLSAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IGN0eCA9IG51bGw7ICAgCisgICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBjdHggPSBudWxsOwogICAgIHByaXZhdGUgaW50IGNvbW1pdFN0YXR1cyA9IDI7IC8vIDAgLSBjb21taXQsIDEgLSByb2xsYmFjaywgMiAtIGRvbid0IGtub3cKIAogICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIC8vIENvbnRhaW5lciBSZXF1aXJlZCBNZXRob2RzCiAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgc2MpIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJzZXRTZXNzaW9uQ29udGV4dCBpbiBCZWFuQiIpOyAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigic2V0U2Vzc2lvbkNvbnRleHQgaW4gQmVhbkIiKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGN0eCA9IHNjOwogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwpAQCAtNTksMjMgKzU5LDIzIEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImVqYkNyZWF0ZSBpbiBCZWFuQiIpOyAgCi0gICAgfSAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJlamJDcmVhdGUgaW4gQmVhbkIiKTsKKyAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJEZXN0cm95KCkgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImVqYkRlc3Ryb3kgaW4gQmVhbkIiKTsgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImVqYkRlc3Ryb3kgaW4gQmVhbkIiKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJlamJBY3RpdmF0ZSBpbiBCZWFuQiIpOyAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZWpiQWN0aXZhdGUgaW4gQmVhbkIiKTsKICAgICB9Ci0gIAorCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImVqYlBhc3NpdmF0ZSBpbiBCZWFuQiIpOyAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZWpiUGFzc2l2YXRlIGluIEJlYW5CIik7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImVqYlJlbW92ZSBpbiBCZWFuQiIpOyAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZWpiUmVtb3ZlIGluIEJlYW5CIik7CiAgICAgfQogCiAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC04OCw3ICs4OCw3IEBACiAgICAgICAgIFN0YXRlbWVudCBzdG10MiA9IG51bGw7CiAgICAgICAgIFJlc3VsdFNldCByczEgPSBudWxsOwogICAgICAgICBSZXN1bHRTZXQgcnMyID0gbnVsbDsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0ZXN0MSBpbiBCZWFuQiIpOyAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigidGVzdDEgaW4gQmVhbkIiKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGNvbjEgPSBnZXRDb25uZWN0aW9uKGRiVVJMMSk7CiAgICAgICAgICAgICBzdG10MSA9IGNvbjEuY3JlYXRlU3RhdGVtZW50KCk7CkBAIC0xMzEsNyArMTMxLDcgQEAKICAgICAgICAgU3RhdGVtZW50IHN0bXQyID0gbnVsbDsKICAgICAgICAgUmVzdWx0U2V0IHJzMSA9IG51bGw7CiAgICAgICAgIFJlc3VsdFNldCByczIgPSBudWxsOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRlc3QyIGluIEJlYW5CIik7ICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0ZXN0MiBpbiBCZWFuQiIpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgY29uMSA9IGdldENvbm5lY3Rpb24oZGJVUkwxKTsKICAgICAgICAgICAgIHN0bXQxID0gY29uMS5jcmVhdGVTdGF0ZW1lbnQoKTsKQEAgLTE5NCw3ICsxOTQsNyBAQAogCiAgICAgcHJpdmF0ZSBDb25uZWN0aW9uIGdldENvbm5lY3Rpb24oU3RyaW5nIGRiVVJMKSB7CiAgICAgICAgIENvbm5lY3Rpb24gY29uID0gbnVsbDsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJnZXRDb25uZWN0aW9uIGluIEJlYW5CIik7ICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJnZXRDb25uZWN0aW9uIGluIEJlYW5CIik7CiAgICAgICAgIHRyeXsKICAgICAgICAgICAgIENvbnRleHQgY29udGV4dCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgRGF0YVNvdXJjZSBkcyA9IChEYXRhU291cmNlKSBjb250ZXh0Lmxvb2t1cChkYlVSTCk7CkBAIC0yMDMsNyArMjAzLDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IERCIENvbm5lY3Rpb24gU3VjY2Vzc2Z1bGx5Li4uIik7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGNlcHRpb24gaW4gZ2V0Q29ubmVjdGlvbjogIiArIGV4LnRvU3RyaW5nKCkpOwotCSAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNvbjsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90eGh1bmcvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4aHVuZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDIxNDA4MWUuLmNkMmZiODAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4aHVuZy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4aHVuZy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ0cmFuc2FjdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CkBAIC0yNCw2ICsyNCw2IEBACiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJ0eGh1bmciLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9L3R4aHVuZy1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iamRiYy5yZXNvdXJjZS50eXBlIiB2YWx1ZT0iamF2YXguc3FsLlhBRGF0YVNvdXJjZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhodW5nL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4aHVuZy9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggYTlmMzhiMi4uNmVlZTg5NCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhodW5nL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90eGh1bmcvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMyw5ICszMyw5IEBACiAgICAgc3RhdHVzID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogICAgIH0KIAotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCVN5c3RlbS5vdXQucHJpbnRsbigiXG5TdGFydGluZyBUeGdsb2JhbCBUZXN0IFN1aXRlIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJcblN0YXJ0aW5nIFR4Z2xvYmFsIFRlc3QgU3VpdGUiKTsKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKIAogICAgICAgICAvLyBydW4gdGhlIHRlc3RzCkBAIC00Myw3ICs0Myw3IEBACiAKICAgICB9CiAgICAgcHVibGljIHZvaWQgcnVuVGVzdENsaWVudCgpIHsKLQlzdGF0dXMuYWRkRGVzY3JpcHRpb24oIlRoaXMgaXMgdG8gdGVzdCB0aGUgaHVuZyB0cmFuc2FjdGlvbiEiKTsKKyAgICBzdGF0dXMuYWRkRGVzY3JpcHRpb24oIlRoaXMgaXMgdG8gdGVzdCB0aGUgaHVuZyB0cmFuc2FjdGlvbiEiKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU1RBUlQiKTsKIApAQCAtNTksMTIgKzU5LDEyIEBACiAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdC50ZXN0QTEoeGEpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRFU1QgRkFJTEVEIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVEVTVCBGQUlMRUQiKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGVFeGNlcHRpb24iKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJURVNUIEZBSUxFRCIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRFU1QgRkFJTEVEIik7CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRFU1QgUEFTU0VEIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVEVTVCBQQVNTRUQiKTsKICAgICAgICAgICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigiIitlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoIXJlc3VsdCkgewpAQCAtNzIsMTYgKzcyLDE2IEBACiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHN0YXR1cy5hZGRTdGF0dXMoInR4aHVuZyB0ZXN0QTEgIiwgc3RhdHVzLkZBSUwpOwogICAgICAgICAgICAgfQotCSAgICByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgcmVzdWx0ID0gZmFsc2U7CiAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdC50ZXN0QTEobm9ueGEpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRFU1QgRkFJTEVEIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVEVTVCBGQUlMRUQiKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGVFeGNlcHRpb24iKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJURVNUIEZBSUxFRCIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRFU1QgRkFJTEVEIik7CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRFU1QgUEFTU0VEIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVEVTVCBQQVNTRUQiKTsKICAgICAgICAgICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigiIitlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoIXJlc3VsdCkgewpAQCAtOTksNiArOTksNiBAQAogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBzdGF0dXMuYWRkU3RhdHVzKCJ0eGh1bmcgdGVzdEExICIsIHN0YXR1cy5GQUlMKTsKICAgICAgICAgfQotCX0KLSAgICAKKyAgICB9CisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4aHVuZy9kZXNjcmlwdG9yL2VqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhodW5nL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggMDQzNDIzZC4uYTBjNTI0NiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhodW5nL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhodW5nL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKQEAgLTY0LDcgKzY0LDcgQEAKICAgICA8L3Nlc3Npb24+CiAgIDwvZW50ZXJwcmlzZS1iZWFucz4KICAgPGFzc2VtYmx5LWRlc2NyaXB0b3I+Ci0JPGNvbnRhaW5lci10cmFuc2FjdGlvbj4KKyAgICA8Y29udGFpbmVyLXRyYW5zYWN0aW9uPgogICAgICAgICAgICAgIDxtZXRob2Q+CiAgICAgICAgICAgICAgICAgPGVqYi1uYW1lPlRlc3RIdW5nPC9lamItbmFtZT4KICAgICAgICAgICAgICAgICA8bWV0aG9kLW5hbWU+KjwvbWV0aG9kLW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90eGh1bmcvZWpiL3Rlc3QvVGVzdEJlYW4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4aHVuZy9lamIvdGVzdC9UZXN0QmVhbi5qYXZhCmluZGV4IDlmYzAyNzMuLjUzNTA1NjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4aHVuZy9lamIvdGVzdC9UZXN0QmVhbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4aHVuZy9lamIvdGVzdC9UZXN0QmVhbi5qYXZhCkBAIC00MiwxNSArNDIsMTUgQEAKIAogCiAgICAgLy8gU2Vzc2lvbkJlYW4gbWV0aG9kcwotIAotICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiVGVzdEJlYW4gZWpiQ3JlYXRlIik7CiAKLSAgICB9ICAgIAotIAorICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBDcmVhdGVFeGNlcHRpb24geworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdEJlYW4gZWpiQ3JlYXRlIik7CisKKyAgICB9CisKICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0QmVhbiBlamJBY3RpdmF0ZSIpOwotICAgIH0gICAgCisgICAgfQogCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkgewogICAgIH0KQEAgLTU4LDcgKzU4LDcgQEAKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB7CiAKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInNldFNlc3Npb25Db250ZXh0IGluIEJlYW5CIik7CiAgICAgICAgIHRyeSB7CkBAIC02Nyw3ICs2Nyw3IEBACiAgICAgICAgICAgICB1c2VyID0gKFN0cmluZykgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3VzZXIiKTsKICAgICAgICAgICAgIHBhc3N3b3JkID0gKFN0cmluZykgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3Bhc3N3b3JkIik7CiAgICAgICAgICAgICBkYlVSTDFYQSA9IChTdHJpbmcpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9kYlVSTDEtWEEiKTsKLQkgICAgZGJVUkwxTm9uWEEgPSAoU3RyaW5nKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZGJVUkwxLU5vblhBIik7CisgICAgICAgIGRiVVJMMU5vblhBID0gKFN0cmluZykgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2RiVVJMMS1Ob25YQSIpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhjZXB0aW9uIGluIHNldFNlc3Npb25Db250ZXh0OiAiICtleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CkBAIC03OCwzNSArNzgsMzUgQEAKIAogCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdEExKGJvb2xlYW4geGEpIHRocm93cyBDcmVhdGVFeGNlcHRpb24gewotCWlmKHhhKQotCXJlc291cmNlID0gZGJVUkwxWEE7CisgICAgaWYoeGEpCisgICAgcmVzb3VyY2UgPSBkYlVSTDFYQTsKICAgICAgICAgZWxzZQotCXJlc291cmNlID0gZGJVUkwxTm9uWEE7CisgICAgcmVzb3VyY2UgPSBkYlVSTDFOb25YQTsKIAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4ZWN1dGluZyB0aGUgYnVzaW5lc3MgbWV0aG9kIHRlc3RBMSIpOwotCXJldHVybiB0cnVlOworICAgIHJldHVybiB0cnVlOwogCiAgICAgfQogCiAKICAgICBwdWJsaWMgdm9pZCBiZWZvcmVDb21wbGV0aW9uKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluIGJlZm9yZUNvbXBsZXRpb24iKTsKLSAgICAJQ29ubmVjdGlvbiBjb24xID0gbnVsbDsKKyAgICAgICAgQ29ubmVjdGlvbiBjb24xID0gbnVsbDsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnNlcnQgaW4gQmVhbkIiKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGNvbjEgPSBnZXRDb25uZWN0aW9uKHJlc291cmNlKTsKICAgICAgICAgICAgIFN0YXRlbWVudCBzdG10MSA9IGNvbjEuY3JlYXRlU3RhdGVtZW50KCk7Ci0JICAgIFN0cmluZyBhY2MgPSAiMTAwIjsKKyAgICAgICAgU3RyaW5nIGFjYyA9ICIxMDAiOwogICAgICAgICAgICAgZmxvYXQgYmFsID0gNTAwMDsKICAgICAgICAgICAgIHN0bXQxLmV4ZWN1dGVVcGRhdGUoIklOU0VSVCBJTlRPIHR4QWNjb3VudCBWQUxVRVMgKCciICsgYWNjICsgIicsICIgKyBiYWwgKyAiKSIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBY2NvdW50IGFkZGVkIFN1Y2Nlc3NmdWxseSBpbiAiK3Jlc291cmNlKyIuLi4iKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUm9sbGluZyBiYWNrIHRoZSB0cmFuc2FjdGlvbiIpOwotCSAgICBjdHguc2V0Um9sbGJhY2tPbmx5KCk7CisgICAgICAgIGN0eC5zZXRSb2xsYmFja09ubHkoKTsKICAgICAgICAgICAgIC8vcmV0dXJuIHRydWU7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFeGNlcHRpb24gaW4gaW5zZXJ0OiAiICsgZXgudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgLy9yZXR1cm4gZmFsc2U7CisgICAgICAgIC8vcmV0dXJuIGZhbHNlOwogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBjb24xLmNsb3NlKCk7CkBAIC0xNDAsNCArMTQwLDQgQEAKIAogCiAKLX0gCit9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90eGh1bmcvZWpiL3Rlc3QvVGVzdEhvbWUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4aHVuZy9lamIvdGVzdC9UZXN0SG9tZS5qYXZhCmluZGV4IGE2YTJkY2IuLjlhYWQ4OWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4aHVuZy9lamIvdGVzdC9UZXN0SG9tZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4aHVuZy9lamIvdGVzdC9UZXN0SG9tZS5qYXZhCkBAIC0yMCw2ICsyMCw2IEBACiBpbXBvcnQgamF2YS5ybWkuKjsKIAogcHVibGljIGludGVyZmFjZSBUZXN0SG9tZSBleHRlbmRzIEVKQkhvbWUgewotIAorCiAgICAgVGVzdFJlbW90ZSBjcmVhdGUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uLCBDcmVhdGVFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90eGh1bmcvZWpiL3Rlc3QvVGVzdFJlbW90ZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhodW5nL2VqYi90ZXN0L1Rlc3RSZW1vdGUuamF2YQppbmRleCAyMjhjMWY0Li5jYTVkNjczIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90eGh1bmcvZWpiL3Rlc3QvVGVzdFJlbW90ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4aHVuZy9lamIvdGVzdC9UZXN0UmVtb3RlLmphdmEKQEAgLTIwLDcgKzIwLDcgQEAKIGltcG9ydCBqYXZhLnJtaS4qOwogCiBwdWJsaWMgaW50ZXJmYWNlIFRlc3RSZW1vdGUgZXh0ZW5kcyBFSkJPYmplY3QgewotIAorCiAgICAgcHVibGljIGJvb2xlYW4gdGVzdEExKGJvb2xlYW4geGEpIHRocm93cyBDcmVhdGVFeGNlcHRpb24sIFJlbW90ZUV4Y2VwdGlvbjsKLSAgICAgICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4bGFvL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90eGxhby9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGQ4OWEzYjQuLmRhOTdhMmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4bGFvL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhsYW8vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0idHJhbnNhY3Rpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgpAQCAtMjQsNiArMjQsNiBAQAogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0idHhsYW8iLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9L3R4bGFvLWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJqZGJjLnJlc291cmNlLnR5cGUiIHZhbHVlPSJqYXZheC5zcWwuWEFEYXRhU291cmNlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90eGxhby9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90eGxhby9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggNjg4MWY5MC4uYmViYjViZSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhsYW8vY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4bGFvL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzQsMTUgKzM0LDE1IEBACiAgICAgcHVibGljIENsaWVudCgpIHsKICAgICB9CiAKLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7IAotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuU3RhcnRpbmcgVHhnbG9iYWwgVGVzdCBTdWl0ZSIpOyAgCi0gICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7IAorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcblN0YXJ0aW5nIFR4Z2xvYmFsIFRlc3QgU3VpdGUiKTsKKyAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKIAogICAgICAgICAvLyBpbml0aWFsaXplIHRoZSBjb250ZXh0IGFuZCBob21lIG9iamVjdAogICAgICAgICBjbGllbnQuc2V0dXAoKTsKIAogICAgICAgICAvLyBydW4gdGhlIHRlc3RzCi0gICAgICAgIGNsaWVudC5ydW5UZXN0Q2xpZW50KCk7ICAgCisgICAgICAgIGNsaWVudC5ydW5UZXN0Q2xpZW50KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0dXAoKSB7CkBAIC0yNTUsNyArMjU1LDcgQEAKICAgICAgICAgfQogICAgIH0KICAgICBwdWJsaWMgdm9pZCB0ZXN0VHhDb21taXQoKSB7Ci0gICAgICAgIHRyeSB7ICAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhlY3V0ZSBCZWFuQTo6dGVzdFR4Q29tbWl0Iik7CiAKICAgICAgICAgICAgIFR4UmVtb3RlQSBiZWFuQSA9IGhvbWUuY3JlYXRlKCk7CkBAIC0yNjMsNyArMjYzLDcgQEAKIAogICAgICAgICAgICAgaWYgKHJlc3VsdCkgewogICAgICAgICAgICAgICAgIHN0YXR1cy5hZGRTdGF0dXMoInR4bGFvIHRlc3RUeENvbW1pdDogIiwgc3RhdHVzLlBBU1MpOwotICAgICAgICAgICAgfSBlbHNlIHsJIAorICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBzdGF0dXMuYWRkU3RhdHVzKCJ0eGxhbyB0ZXN0VHhDb21taXQ6ICIsIHN0YXR1cy5GQUlMKTsKICAgICAgICAgICAgIH0KIApAQCAtMjc2LDcgKzI3Niw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgdGVzdFR4Um9sbGJhY2soKSB7Ci0gICAgICAgIHRyeSB7ICAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhlY3V0ZSBCZWFuQTo6dGVzdFR4Um9sbGJhY2siKTsKIAogICAgICAgICAgICAgVHhSZW1vdGVBIGJlYW5BID0gaG9tZS5jcmVhdGUoKTsKQEAgLTI4NCw3ICsyODQsNyBAQAogCiAgICAgICAgICAgICBpZiAocmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgc3RhdHVzLmFkZFN0YXR1cygidHhsYW8gdGVzdFR4Um9sbGJhY2s6ICIsIHN0YXR1cy5QQVNTKTsKLSAgICAgICAgICAgIH0gZWxzZSB7CSAKKyAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgc3RhdHVzLmFkZFN0YXR1cygidHhsYW8gdGVzdFR4Um9sbGJhY2s6ICIsIHN0YXR1cy5GQUlMKTsKICAgICAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhsYW8vZWpiL2JlYW5BL1R4QmVhbkEuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4bGFvL2VqYi9iZWFuQS9UeEJlYW5BLmphdmEKaW5kZXggYWVjYTAzMy4uNTkzYmM2MiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhsYW8vZWpiL2JlYW5BL1R4QmVhbkEuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90eGxhby9lamIvYmVhbkEvVHhCZWFuQS5qYXZhCkBAIC01NSw3ICs1NSw3IEBACiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImVqYlJlbW92ZSBpbiBCZWFuQSIpOwogICAgIH0KLSAgCisKICAgICBwdWJsaWMgdm9pZCBlamJEZXN0cm95KCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImVqYkRlc3Ryb3kgaW4gQmVhbkEiKTsKICAgICB9CkBAIC00MjAsNyArNDIwLDcgQEAKICAgICAgICAgICAgIGlmICggKGJlYW5CID09IG51bGwpIHx8ICh0eCA9PSBudWxsKSApIHsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oKTsKICAgICAgICAgICAgIH0KLSAgICAgCisKICAgICAgICAgICAgIHR4LmJlZ2luKCk7CiAgICAgICAgICAgICBiZWFuQi5kZWxldGUoIkExMDAxIik7CiAgICAgICAgICAgICBiZWFuQi5pbnNlcnQoIkExMDAzIiwgODAwMCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90eGxhby9lamIvYmVhbkIvVHhCZWFuQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhsYW8vZWpiL2JlYW5CL1R4QmVhbkIuamF2YQppbmRleCAxNDQ0NDdmLi4xNzg5MjBmIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90eGxhby9lamIvYmVhbkIvVHhCZWFuQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4bGFvL2VqYi9iZWFuQi9UeEJlYW5CLmphdmEKQEAgLTUwOCw3ICs1MDgsNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgREIgQ29ubmVjdGlvbiBTdWNjZXNzZnVsbHkuLi4iKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4Y2VwdGlvbiBpbiBnZXRDb25uZWN0aW9uOiAiICsgZXgudG9TdHJpbmcoKSk7Ci0JICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY29uOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4bmVnYXRpdmUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4bmVnYXRpdmUvYnVpbGQucHJvcGVydGllcwppbmRleCBjM2ZmZDJhLi5lZGE0M2JhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90eG5lZ2F0aXZlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhuZWdhdGl2ZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ0cmFuc2FjdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CkBAIC0yNCw2ICsyNCw2IEBACiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJ0eG5lZ2F0aXZlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS90eG5lZ2F0aXZlLWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJqZGJjLnJlc291cmNlLnR5cGUiIHZhbHVlPSJqYXZheC5zcWwuWEFEYXRhU291cmNlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90eG5lZ2F0aXZlL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4bmVnYXRpdmUvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDkwMDlkNDcuLjdjYTU4YTYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4bmVnYXRpdmUvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4bmVnYXRpdmUvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zNiwxMyArMzYsMTMgQEAKICAgICB0cnl7CiAgICAgdXNlclRyYW5zYWN0aW9uID0gKFVzZXJUcmFuc2FjdGlvbikgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmNvbXAvVXNlclRyYW5zYWN0aW9uIik7CiAgICAgfWNhdGNoKEV4Y2VwdGlvbiBleCkgewotICAgIAlleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgfQogICAgIH0KIAotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCVN5c3RlbS5vdXQucHJpbnRsbigiXG5TdGFydGluZyBUeGdsb2JhbCBUZXN0IFN1aXRlIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJcblN0YXJ0aW5nIFR4Z2xvYmFsIFRlc3QgU3VpdGUiKTsKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKIAogICAgICAgICAvLyBydW4gdGhlIHRlc3RzCkBAIC01MCw3ICs1MCw3IEBACiAKICAgICB9CiAgICAgcHVibGljIHZvaWQgcnVuVGVzdENsaWVudCgpIHsKLQlzdGF0dXMuYWRkRGVzY3JpcHRpb24oIlRoaXMgaXMgdG8gdGVzdCB0aGUgdmFsaWQgdHJhbnNhY3Rpb24gZXhjZXB0aW9uISIpOworICAgIHN0YXR1cy5hZGREZXNjcmlwdGlvbigiVGhpcyBpcyB0byB0ZXN0IHRoZSB2YWxpZCB0cmFuc2FjdGlvbiBleGNlcHRpb24hIik7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNUQVJUIik7CiAKQEAgLTY2LDI4ICs2NiwyOCBAQAogCiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHQudGVzdEExKHhhKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJURVNUIEZBSUxFRCIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRFU1QgRkFJTEVEIik7CiAgICAgICAgICAgICB9IGNhdGNoIChqYWthcnRhLmVqYi5DcmVhdGVFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3JlYXRlRXhjZXB0aW9uIik7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiVEVTVCBGQUlMRUQiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJURVNUIEZBSUxFRCIpOwogICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJURVNUIFBBU1NFRCIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRFU1QgUEFTU0VEIik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoIXJlc3VsdCkgewogICAgICAgICAgICAgICAgIHN0YXR1cy5hZGRTdGF0dXMoInR4bmVnYXRpdmUgdGVzdEExICIsIHN0YXR1cy5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgc3RhdHVzLmFkZFN0YXR1cygidHhuZWdhdGl2ZSB0ZXN0QTEgIiwgc3RhdHVzLkZBSUwpOwogICAgICAgICAgICAgfQotCSAgICByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgcmVzdWx0ID0gZmFsc2U7CiAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdC50ZXN0QTEobm9ueGEpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRFU1QgRkFJTEVEIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVEVTVCBGQUlMRUQiKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKGpha2FydGEuZWpiLkNyZWF0ZUV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGVFeGNlcHRpb24iKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJURVNUIEZBSUxFRCIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRFU1QgRkFJTEVEIik7CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRFU1QgUEFTU0VEIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVEVTVCBQQVNTRUQiKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgc3RhdHVzLmFkZFN0YXR1cygidHhuZWdhdGl2ZSB0ZXN0QTIgIiwgc3RhdHVzLlBBU1MpOwpAQCAtOTcsODMgKzk3LDgzIEBACiAgICAgICAgICAgICBib29sZWFuIHJlc3VsdD1mYWxzZTsKIAogICAgICAgICAgICAgdHJ5IHsKLQkJdXNlclRyYW5zYWN0aW9uLmJlZ2luKCk7Ci0JCXVzZXJUcmFuc2FjdGlvbi5iZWdpbigpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRFU1QgRkFJTEVEIik7CisgICAgICAgIHVzZXJUcmFuc2FjdGlvbi5iZWdpbigpOworICAgICAgICB1c2VyVHJhbnNhY3Rpb24uYmVnaW4oKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJURVNUIEZBSUxFRCIpOwogICAgICAgICAgICAgfSBjYXRjaCAoTm90U3VwcG9ydGVkRXhjZXB0aW9uIG5lKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJOb3RTdXBwb3J0ZWRFeGNlcHRpb24iKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJURVNUIFBBU1NFRCIpOwotCQlyZXN1bHQgPSB0cnVlOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRFU1QgUEFTU0VEIik7CisgICAgICAgIHJlc3VsdCA9IHRydWU7CiAgICAgICAgICAgICB9IGNhdGNoIChTeXN0ZW1FeGNlcHRpb24gbmUpIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN5c3RlbUV4Y2VwdGlvbiIpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRFU1QgUEFTU0VEIik7Ci0JCXJlc3VsdCA9IHRydWU7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVEVTVCBQQVNTRUQiKTsKKyAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiVEVTVCBGQUlMRUQiKTsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJURVNUIEZBSUxFRCIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHJlc3VsdCkgewogICAgICAgICAgICAgICAgIHN0YXR1cy5hZGRTdGF0dXMoInR4bmVnYXRpdmUgdDEgIiwgc3RhdHVzLlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBzdGF0dXMuYWRkU3RhdHVzKCJ0eG5lZ2F0aXZlIHQxICIsIHN0YXR1cy5GQUlMKTsKICAgICAgICAgICAgIH0KLQkgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgICAgIHJlc3VsdCA9IGZhbHNlOwogICAgICAgICAgICAgdHJ5IHsKLQkJdXNlclRyYW5zYWN0aW9uLmNvbW1pdCgpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRFU1QgRkFJTEVEIik7CisgICAgICAgIHVzZXJUcmFuc2FjdGlvbi5jb21taXQoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJURVNUIEZBSUxFRCIpOwogICAgICAgICAgICAgfSBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIG5lKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbGxlZ2FsU3RhdGVFeGNlcHRpb24iKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJURVNUIFBBU1NFRCIpOwotCQlyZXN1bHQgPSB0cnVlOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRFU1QgUEFTU0VEIik7CisgICAgICAgIHJlc3VsdCA9IHRydWU7CiAgICAgICAgICAgICB9IGNhdGNoIChTeXN0ZW1FeGNlcHRpb24gbmUpIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN5c3RlbUV4Y2VwdGlvbiIpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRFU1QgUEFTU0VEIik7Ci0JCXJlc3VsdCA9IHRydWU7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVEVTVCBQQVNTRUQiKTsKKyAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiVEVTVCBGQUlMRUQiKTsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJURVNUIEZBSUxFRCIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHJlc3VsdCkgewogICAgICAgICAgICAgICAgIHN0YXR1cy5hZGRTdGF0dXMoInR4bmVnYXRpdmUgdDIgIiwgc3RhdHVzLlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBzdGF0dXMuYWRkU3RhdHVzKCJ0eG5lZ2F0aXZlIHQyICIsIHN0YXR1cy5GQUlMKTsKICAgICAgICAgICAgIH0KLQkgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgICAgIHJlc3VsdCA9IGZhbHNlOwogICAgICAgICAgICAgdHJ5IHsKLQkJdXNlclRyYW5zYWN0aW9uLnJvbGxiYWNrKCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiVEVTVCBGQUlMRUQiKTsKKyAgICAgICAgdXNlclRyYW5zYWN0aW9uLnJvbGxiYWNrKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVEVTVCBGQUlMRUQiKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBuZSkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSWxsZWdhbFN0YXRlRXhjZXB0aW9uIik7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiVEVTVCBQQVNTRUQiKTsKLQkJcmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJURVNUIFBBU1NFRCIpOworICAgICAgICByZXN1bHQgPSB0cnVlOwogICAgICAgICAgICAgfSBjYXRjaCAoU3lzdGVtRXhjZXB0aW9uIG5lKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTeXN0ZW1FeGNlcHRpb24iKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJURVNUIFBBU1NFRCIpOwotCQlyZXN1bHQgPSB0cnVlOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRFU1QgUEFTU0VEIik7CisgICAgICAgIHJlc3VsdCA9IHRydWU7CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRFU1QgRkFJTEVEIik7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVEVTVCBGQUlMRUQiKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChyZXN1bHQpIHsKICAgICAgICAgICAgICAgICBzdGF0dXMuYWRkU3RhdHVzKCJ0eG5lZ2F0aXZlIHQzICIsIHN0YXR1cy5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgc3RhdHVzLmFkZFN0YXR1cygidHhuZWdhdGl2ZSB0MyAiLCBzdGF0dXMuRkFJTCk7CiAgICAgICAgICAgICB9Ci0JICAgIHJlc3VsdCA9IGZhbHNlOworICAgICAgICByZXN1bHQgPSBmYWxzZTsKICAgICAgICAgICAgIHRyeSB7Ci0JCXVzZXJUcmFuc2FjdGlvbi5zZXRSb2xsYmFja09ubHkoKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJURVNUIEZBSUxFRCIpOworICAgICAgICB1c2VyVHJhbnNhY3Rpb24uc2V0Um9sbGJhY2tPbmx5KCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVEVTVCBGQUlMRUQiKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBuZSkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSWxsZWdhbFN0YXRlRXhjZXB0aW9uIik7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiVEVTVCBQQVNTRUQiKTsKLQkJcmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJURVNUIFBBU1NFRCIpOworICAgICAgICByZXN1bHQgPSB0cnVlOwogICAgICAgICAgICAgfSBjYXRjaCAoU3lzdGVtRXhjZXB0aW9uIG5lKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTeXN0ZW1FeGNlcHRpb24iKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJURVNUIFBBU1NFRCIpOwotCQlyZXN1bHQgPSB0cnVlOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRFU1QgUEFTU0VEIik7CisgICAgICAgIHJlc3VsdCA9IHRydWU7CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRFU1QgRkFJTEVEIik7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVEVTVCBGQUlMRUQiKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChyZXN1bHQpIHsKICAgICAgICAgICAgICAgICBzdGF0dXMuYWRkU3RhdHVzKCJ0eG5lZ2F0aXZlIHQ0ICIsIHN0YXR1cy5QQVNTKTsKQEAgLTE5MSw2ICsxOTEsNiBAQAogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBzdGF0dXMuYWRkU3RhdHVzKCJ0eG5lZ2F0aXZlIHRlc3RBMSAiLCBzdGF0dXMuRkFJTCk7CiAgICAgICAgIH0KLQl9Ci0gICAgCisgICAgfQorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90eG5lZ2F0aXZlL2Rlc2NyaXB0b3IvZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90eG5lZ2F0aXZlL2Rlc2NyaXB0b3IvZWpiLWphci54bWwKaW5kZXggMDQzNDIzZC4uYTBjNTI0NiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhuZWdhdGl2ZS9kZXNjcmlwdG9yL2VqYi1qYXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4bmVnYXRpdmUvZGVzY3JpcHRvci9lamItamFyLnhtbApAQCAtNjQsNyArNjQsNyBAQAogICAgIDwvc2Vzc2lvbj4KICAgPC9lbnRlcnByaXNlLWJlYW5zPgogICA8YXNzZW1ibHktZGVzY3JpcHRvcj4KLQk8Y29udGFpbmVyLXRyYW5zYWN0aW9uPgorICAgIDxjb250YWluZXItdHJhbnNhY3Rpb24+CiAgICAgICAgICAgICAgPG1ldGhvZD4KICAgICAgICAgICAgICAgICA8ZWpiLW5hbWU+VGVzdEh1bmc8L2VqYi1uYW1lPgogICAgICAgICAgICAgICAgIDxtZXRob2QtbmFtZT4qPC9tZXRob2QtbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4c3RyZXNzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90eHN0cmVzcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGYyNmVlMjIuLmNlNWRkMTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4c3RyZXNzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhzdHJlc3MvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0idHJhbnNhY3Rpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhzdHJlc3MvZWpiL2JlYW5CL1R4QmVhbkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4c3RyZXNzL2VqYi9iZWFuQi9UeEJlYW5CLmphdmEKaW5kZXggZGViZTJmNi4uMGU2ZDZlZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhzdHJlc3MvZWpiL2JlYW5CL1R4QmVhbkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90eHN0cmVzcy9lamIvYmVhbkIvVHhCZWFuQi5qYXZhCkBAIC0xMjEsNyArMTIxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIicsICIgKyBiYWwgKyAiKSIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFjY291bnQgYWRkZWQgU3VjY2Vzc2Z1bGx5IGluIERCMi4uLiIpOwogICAgICAgICBzdG10MS5jbG9zZSgpOwotCSAgICBjb24xLmNsb3NlKCk7CisgICAgICAgIGNvbjEuY2xvc2UoKTsKICAgICAgICAgc3RtdDIuY2xvc2UoKTsKICAgICAgICAgY29uMi5jbG9zZSgpOwogICAgICAgICB0eC5jb21taXQoKTsKQEAgLTEzMyw3ICsxMzMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICInLCAiICsgYmFsICsgIikiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBY2NvdW50IGFkZGVkIFN1Y2Nlc3NmdWxseSBpbiBEQjEuLi4iKTsKICAgICAgICAgc3RtdDIuY2xvc2UoKTsKLQkgICAgY29uMi5jbG9zZSgpOworICAgICAgICBjb24yLmNsb3NlKCk7CiAgICAgICAgIHR4LmNvbW1pdCgpOwogICAgICAgICB0eC5iZWdpbigpOwogICAgICAgICBjb24xID0gZ2V0Q29ubmVjdGlvbihkYlVSTDEsdXNlcjEscGFzc3dvcmQxKTsKQEAgLTE3Nyw3ICsxNzcsNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgREIgQ29ubmVjdGlvbiBTdWNjZXNzZnVsbHkuLi4iKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4Y2VwdGlvbiBpbiBnZXRDb25uZWN0aW9uOiAiICsgZXgudG9TdHJpbmcoKSk7Ci0JICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY29uOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4c3RyZXNzL3NlcnZsZXQvSGVsbG8uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4c3RyZXNzL3NlcnZsZXQvSGVsbG8uamF2YQppbmRleCA2ZWNlZDBlLi4yOWEwNTkzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90eHN0cmVzcy9zZXJ2bGV0L0hlbGxvLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhzdHJlc3Mvc2VydmxldC9IZWxsby5qYXZhCkBAIC04Niw0NSArODYsNDUgQEAKICAgICAgICAgfQogCiAKLQlyZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7Ci0JUHJpbnRXcml0ZXIgd3JpdGVyID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7CisgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOworICAgIFByaW50V3JpdGVyIHdyaXRlciA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwogCi0Jd3JpdGVyLnByaW50bG4oIjxodG1sPiIpOwotCXdyaXRlci5wcmludGxuKCI8aGVhZD4iKTsKLQl3cml0ZXIucHJpbnRsbigiPHRpdGxlPlNhbXBsZSBUcmFuc2FjdGlvbiBTdHJlc3MgVGVzdCBBcHBsaWNhdGlvbjwvdGl0bGU+Iik7Ci0Jd3JpdGVyLnByaW50bG4oIjwvaGVhZD4iKTsKLQl3cml0ZXIucHJpbnRsbigiPGJvZHkgYmdjb2xvcj13aGl0ZT4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPGh0bWw+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIjxoZWFkPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8dGl0bGU+U2FtcGxlIFRyYW5zYWN0aW9uIFN0cmVzcyBUZXN0IEFwcGxpY2F0aW9uPC90aXRsZT4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPC9oZWFkPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8Ym9keSBiZ2NvbG9yPXdoaXRlPiIpOwogCi0Jd3JpdGVyLnByaW50bG4oIjx0YWJsZSBib3JkZXI9XCIwXCI+Iik7Ci0Jd3JpdGVyLnByaW50bG4oIjx0cj4iKTsKLQl3cml0ZXIucHJpbnRsbigiPHRkPiIpOwotCS8vd3JpdGVyLnByaW50bG4oIjxpbWcgc3JjPVwiaW1hZ2VzL3RvbWNhdC5naWZcIj4iKTsKLQl3cml0ZXIucHJpbnRsbigiPC90ZD4iKTsKLQl3cml0ZXIucHJpbnRsbigiPHRkPiIpOwotCXdyaXRlci5wcmludGxuKCI8aDE+U2FtcGxlIFRyYW5zYWN0aW9uIFN0cmVzcyBUZXN0IEFwcGxpY2F0aW9uPC9oMT4iKTsKLQl3cml0ZXIucHJpbnRsbigiVGhpcyBpcyB0aGUgb3V0cHV0IG9mIGEgc2VydmxldCB0aGF0IGlzIHBhcnQgb2YiKTsKLQl3cml0ZXIucHJpbnRsbigidGhlIEhlbGxvLCBXb3JsZCBhcHBsaWNhdGlvbi4gIEl0IGRpc3BsYXlzIHRoZSIpOwotCXdyaXRlci5wcmludGxuKCJOdW1iZXIgdGhhdCB5b3UgaW5wdXQuIik7Ci0Jd3JpdGVyLnByaW50bG4oIjwvdGQ+Iik7Ci0Jd3JpdGVyLnByaW50bG4oIjwvdHI+Iik7Ci0Jd3JpdGVyLnByaW50bG4oIjwvdGFibGU+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIjx0YWJsZSBib3JkZXI9XCIwXCI+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIjx0cj4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPHRkPiIpOworICAgIC8vd3JpdGVyLnByaW50bG4oIjxpbWcgc3JjPVwiaW1hZ2VzL3RvbWNhdC5naWZcIj4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPC90ZD4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPHRkPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8aDE+U2FtcGxlIFRyYW5zYWN0aW9uIFN0cmVzcyBUZXN0IEFwcGxpY2F0aW9uPC9oMT4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiVGhpcyBpcyB0aGUgb3V0cHV0IG9mIGEgc2VydmxldCB0aGF0IGlzIHBhcnQgb2YiKTsKKyAgICB3cml0ZXIucHJpbnRsbigidGhlIEhlbGxvLCBXb3JsZCBhcHBsaWNhdGlvbi4gIEl0IGRpc3BsYXlzIHRoZSIpOworICAgIHdyaXRlci5wcmludGxuKCJOdW1iZXIgdGhhdCB5b3UgaW5wdXQuIik7CisgICAgd3JpdGVyLnByaW50bG4oIjwvdGQ+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIjwvdHI+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIjwvdGFibGU+Iik7CiAKLQl3cml0ZXIucHJpbnRsbigiPHRhYmxlIGJvcmRlcj1cIjBcIiB3aWR0aD1cIjEwMCVcIj4iKTsKLQkvKkVudW1lcmF0aW9uIG5hbWVzID0gcmVxdWVzdC5nZXRIZWFkZXJOYW1lcygpOwotCXdoaWxlIChuYW1lcy5oYXNNb3JlRWxlbWVudHMoKSkgewotCSAgICBTdHJpbmcgbmFtZSA9IChTdHJpbmcpIG5hbWVzLm5leHRFbGVtZW50KCk7Ci0JICAgIHdyaXRlci5wcmludGxuKCI8dHI+Iik7Ci0JICAgIHdyaXRlci5wcmludGxuKCIgIDx0aCBhbGlnbj1cInJpZ2h0XCI+IiArIG5hbWUgKyAiOjwvdGg+Iik7Ci0JICAgIHdyaXRlci5wcmludGxuKCIgIDx0ZD4iICsgcmVxdWVzdC5nZXRIZWFkZXIobmFtZSkgKyAiPC90ZD4iKTsKLQkgICAgd3JpdGVyLnByaW50bG4oIjwvdHI+Iik7Ci0JfSovCi0JICAgIHdyaXRlci5wcmludGxuKCI8dHI+Iik7Ci0JICAgIHdyaXRlci5wcmludGxuKCIgIDx0ZD4iICsgIlZhbHVlIHN1cHBsaWVkIGFzIElucHV0IHBhcmFtIGlzICIgKyBpZGVudGl0eSsiPC90ZD4iKTsKLQkgICAgd3JpdGVyLnByaW50bG4oIjwvdHI+Iik7Ci0Jd3JpdGVyLnByaW50bG4oIjwvdGFibGU+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIjx0YWJsZSBib3JkZXI9XCIwXCIgd2lkdGg9XCIxMDAlXCI+Iik7CisgICAgLypFbnVtZXJhdGlvbiBuYW1lcyA9IHJlcXVlc3QuZ2V0SGVhZGVyTmFtZXMoKTsKKyAgICB3aGlsZSAobmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKKyAgICAgICAgU3RyaW5nIG5hbWUgPSAoU3RyaW5nKSBuYW1lcy5uZXh0RWxlbWVudCgpOworICAgICAgICB3cml0ZXIucHJpbnRsbigiPHRyPiIpOworICAgICAgICB3cml0ZXIucHJpbnRsbigiICA8dGggYWxpZ249XCJyaWdodFwiPiIgKyBuYW1lICsgIjo8L3RoPiIpOworICAgICAgICB3cml0ZXIucHJpbnRsbigiICA8dGQ+IiArIHJlcXVlc3QuZ2V0SGVhZGVyKG5hbWUpICsgIjwvdGQ+Iik7CisgICAgICAgIHdyaXRlci5wcmludGxuKCI8L3RyPiIpOworICAgIH0qLworICAgICAgICB3cml0ZXIucHJpbnRsbigiPHRyPiIpOworICAgICAgICB3cml0ZXIucHJpbnRsbigiICA8dGQ+IiArICJWYWx1ZSBzdXBwbGllZCBhcyBJbnB1dCBwYXJhbSBpcyAiICsgaWRlbnRpdHkrIjwvdGQ+Iik7CisgICAgICAgIHdyaXRlci5wcmludGxuKCI8L3RyPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8L3RhYmxlPiIpOwogCi0Jd3JpdGVyLnByaW50bG4oIjwvYm9keT4iKTsKLQl3cml0ZXIucHJpbnRsbigiPC9odG1sPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8L2JvZHk+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIjwvaHRtbD4iKTsKIAogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhzdHJlc3NyZWFkb25seS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhzdHJlc3NyZWFkb25seS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDZmODJhYjQuLmJiYzkxZDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4c3RyZXNzcmVhZG9ubHkvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90eHN0cmVzc3JlYWRvbmx5L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InRyYW5zYWN0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4c3RyZXNzcmVhZG9ubHkvZWpiL2JlYW5CL1R4QmVhbkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4c3RyZXNzcmVhZG9ubHkvZWpiL2JlYW5CL1R4QmVhbkIuamF2YQppbmRleCA4NTMyNGI3Li44ZDI5NTUxIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90eHN0cmVzc3JlYWRvbmx5L2VqYi9iZWFuQi9UeEJlYW5CLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhzdHJlc3NyZWFkb25seS9lamIvYmVhbkIvVHhCZWFuQi5qYXZhCkBAIC0xMTksNyArMTE5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIicsICIgKyBiYWwgKyAiKSIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFjY291bnQgYWRkZWQgU3VjY2Vzc2Z1bGx5IGluIERCMi4uLiIpOwogICAgICAgICBzdG10MS5jbG9zZSgpOwotCSAgICBjb24xLmNsb3NlKCk7CisgICAgICAgIGNvbjEuY2xvc2UoKTsKICAgICAgICAgc3RtdDIuY2xvc2UoKTsKICAgICAgICAgY29uMi5jbG9zZSgpOwogICAgICAgICB0eC5jb21taXQoKTsKQEAgLTE1Niw3ICsxNTYsNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgREIgQ29ubmVjdGlvbiBTdWNjZXNzZnVsbHkuLi4iKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkV4Y2VwdGlvbiBpbiBnZXRDb25uZWN0aW9uOiAiICsgZXgudG9TdHJpbmcoKSk7Ci0JICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY29uOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4c3RyZXNzcmVhZG9ubHkvZWpiL2JlYW5CL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90eHN0cmVzc3JlYWRvbmx5L2VqYi9iZWFuQi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDZmODJhYjQuLmJiYzkxZDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3RyYW5zYWN0aW9uL3R4c3RyZXNzcmVhZG9ubHkvZWpiL2JlYW5CL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhzdHJlc3NyZWFkb25seS9lamIvYmVhbkIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0idHJhbnNhY3Rpb24iLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvdHJhbnNhY3Rpb24vdHhzdHJlc3NyZWFkb25seS9zZXJ2bGV0L0hlbGxvLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90eHN0cmVzc3JlYWRvbmx5L3NlcnZsZXQvSGVsbG8uamF2YQppbmRleCA2NWZmOWJjLi4zNzUxZmQwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90eHN0cmVzc3JlYWRvbmx5L3NlcnZsZXQvSGVsbG8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy90cmFuc2FjdGlvbi90eHN0cmVzc3JlYWRvbmx5L3NlcnZsZXQvSGVsbG8uamF2YQpAQCAtODIsNDUgKzgyLDQ1IEBACiAgICAgICAgIH0KIAogCi0JcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwotCVByaW50V3JpdGVyIHdyaXRlciA9IHJlc3BvbnNlLmdldFdyaXRlcigpOworICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKKyAgICBQcmludFdyaXRlciB3cml0ZXIgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKIAotCXdyaXRlci5wcmludGxuKCI8aHRtbD4iKTsKLQl3cml0ZXIucHJpbnRsbigiPGhlYWQ+Iik7Ci0Jd3JpdGVyLnByaW50bG4oIjx0aXRsZT5TYW1wbGUgVHJhbnNhY3Rpb24gU3RyZXNzIFRlc3QgQXBwbGljYXRpb248L3RpdGxlPiIpOwotCXdyaXRlci5wcmludGxuKCI8L2hlYWQ+Iik7Ci0Jd3JpdGVyLnByaW50bG4oIjxib2R5IGJnY29sb3I9d2hpdGU+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIjxodG1sPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8aGVhZD4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPHRpdGxlPlNhbXBsZSBUcmFuc2FjdGlvbiBTdHJlc3MgVGVzdCBBcHBsaWNhdGlvbjwvdGl0bGU+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIjwvaGVhZD4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPGJvZHkgYmdjb2xvcj13aGl0ZT4iKTsKIAotCXdyaXRlci5wcmludGxuKCI8dGFibGUgYm9yZGVyPVwiMFwiPiIpOwotCXdyaXRlci5wcmludGxuKCI8dHI+Iik7Ci0Jd3JpdGVyLnByaW50bG4oIjx0ZD4iKTsKLQkvL3dyaXRlci5wcmludGxuKCI8aW1nIHNyYz1cImltYWdlcy90b21jYXQuZ2lmXCI+Iik7Ci0Jd3JpdGVyLnByaW50bG4oIjwvdGQ+Iik7Ci0Jd3JpdGVyLnByaW50bG4oIjx0ZD4iKTsKLQl3cml0ZXIucHJpbnRsbigiPGgxPlNhbXBsZSBUcmFuc2FjdGlvbiBTdHJlc3MgVGVzdCBBcHBsaWNhdGlvbjwvaDE+Iik7Ci0Jd3JpdGVyLnByaW50bG4oIlRoaXMgaXMgdGhlIG91dHB1dCBvZiBhIHNlcnZsZXQgdGhhdCBpcyBwYXJ0IG9mIik7Ci0Jd3JpdGVyLnByaW50bG4oInRoZSBIZWxsbywgV29ybGQgYXBwbGljYXRpb24uICBJdCBkaXNwbGF5cyB0aGUiKTsKLQl3cml0ZXIucHJpbnRsbigiTnVtYmVyIHRoYXQgeW91IGlucHV0LiIpOwotCXdyaXRlci5wcmludGxuKCI8L3RkPiIpOwotCXdyaXRlci5wcmludGxuKCI8L3RyPiIpOwotCXdyaXRlci5wcmludGxuKCI8L3RhYmxlPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8dGFibGUgYm9yZGVyPVwiMFwiPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8dHI+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIjx0ZD4iKTsKKyAgICAvL3dyaXRlci5wcmludGxuKCI8aW1nIHNyYz1cImltYWdlcy90b21jYXQuZ2lmXCI+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIjwvdGQ+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIjx0ZD4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPGgxPlNhbXBsZSBUcmFuc2FjdGlvbiBTdHJlc3MgVGVzdCBBcHBsaWNhdGlvbjwvaDE+Iik7CisgICAgd3JpdGVyLnByaW50bG4oIlRoaXMgaXMgdGhlIG91dHB1dCBvZiBhIHNlcnZsZXQgdGhhdCBpcyBwYXJ0IG9mIik7CisgICAgd3JpdGVyLnByaW50bG4oInRoZSBIZWxsbywgV29ybGQgYXBwbGljYXRpb24uICBJdCBkaXNwbGF5cyB0aGUiKTsKKyAgICB3cml0ZXIucHJpbnRsbigiTnVtYmVyIHRoYXQgeW91IGlucHV0LiIpOworICAgIHdyaXRlci5wcmludGxuKCI8L3RkPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8L3RyPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8L3RhYmxlPiIpOwogCi0Jd3JpdGVyLnByaW50bG4oIjx0YWJsZSBib3JkZXI9XCIwXCIgd2lkdGg9XCIxMDAlXCI+Iik7Ci0JLypFbnVtZXJhdGlvbiBuYW1lcyA9IHJlcXVlc3QuZ2V0SGVhZGVyTmFtZXMoKTsKLQl3aGlsZSAobmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLQkgICAgU3RyaW5nIG5hbWUgPSAoU3RyaW5nKSBuYW1lcy5uZXh0RWxlbWVudCgpOwotCSAgICB3cml0ZXIucHJpbnRsbigiPHRyPiIpOwotCSAgICB3cml0ZXIucHJpbnRsbigiICA8dGggYWxpZ249XCJyaWdodFwiPiIgKyBuYW1lICsgIjo8L3RoPiIpOwotCSAgICB3cml0ZXIucHJpbnRsbigiICA8dGQ+IiArIHJlcXVlc3QuZ2V0SGVhZGVyKG5hbWUpICsgIjwvdGQ+Iik7Ci0JICAgIHdyaXRlci5wcmludGxuKCI8L3RyPiIpOwotCX0qLwotCSAgICB3cml0ZXIucHJpbnRsbigiPHRyPiIpOwotCSAgICB3cml0ZXIucHJpbnRsbigiICA8dGQ+IiArICJWYWx1ZSBzdXBwbGllZCBhcyBJbnB1dCBwYXJhbSBpcyAiICsgaWRlbnRpdHkrIjwvdGQ+Iik7Ci0JICAgIHdyaXRlci5wcmludGxuKCI8L3RyPiIpOwotCXdyaXRlci5wcmludGxuKCI8L3RhYmxlPiIpOworICAgIHdyaXRlci5wcmludGxuKCI8dGFibGUgYm9yZGVyPVwiMFwiIHdpZHRoPVwiMTAwJVwiPiIpOworICAgIC8qRW51bWVyYXRpb24gbmFtZXMgPSByZXF1ZXN0LmdldEhlYWRlck5hbWVzKCk7CisgICAgd2hpbGUgKG5hbWVzLmhhc01vcmVFbGVtZW50cygpKSB7CisgICAgICAgIFN0cmluZyBuYW1lID0gKFN0cmluZykgbmFtZXMubmV4dEVsZW1lbnQoKTsKKyAgICAgICAgd3JpdGVyLnByaW50bG4oIjx0cj4iKTsKKyAgICAgICAgd3JpdGVyLnByaW50bG4oIiAgPHRoIGFsaWduPVwicmlnaHRcIj4iICsgbmFtZSArICI6PC90aD4iKTsKKyAgICAgICAgd3JpdGVyLnByaW50bG4oIiAgPHRkPiIgKyByZXF1ZXN0LmdldEhlYWRlcihuYW1lKSArICI8L3RkPiIpOworICAgICAgICB3cml0ZXIucHJpbnRsbigiPC90cj4iKTsKKyAgICB9Ki8KKyAgICAgICAgd3JpdGVyLnByaW50bG4oIjx0cj4iKTsKKyAgICAgICAgd3JpdGVyLnByaW50bG4oIiAgPHRkPiIgKyAiVmFsdWUgc3VwcGxpZWQgYXMgSW5wdXQgcGFyYW0gaXMgIiArIGlkZW50aXR5KyI8L3RkPiIpOworICAgICAgICB3cml0ZXIucHJpbnRsbigiPC90cj4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPC90YWJsZT4iKTsKIAotCXdyaXRlci5wcmludGxuKCI8L2JvZHk+Iik7Ci0Jd3JpdGVyLnByaW50bG4oIjwvaHRtbD4iKTsKKyAgICB3cml0ZXIucHJpbnRsbigiPC9ib2R5PiIpOworICAgIHdyaXRlci5wcmludGxuKCI8L2h0bWw+Iik7CiAKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hY2Nlc3NMb2dnaW5nQmFkUmVxdWVzdHMvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FjY2Vzc0xvZ2dpbmdCYWRSZXF1ZXN0cy9XZWJUZXN0LmphdmEKaW5kZXggNjE0NTlhNi4uMjQ2NjFjNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FjY2Vzc0xvZ2dpbmdCYWRSZXF1ZXN0cy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FjY2Vzc0xvZ2dpbmdCYWRSZXF1ZXN0cy9XZWJUZXN0LmphdmEKQEAgLTIxLDcgKzIxLDcgQEAKIC8qKgogICogVW5pdCB0ZXN0IGZvcjoKICAqCi0gKiAgIGh0dHBzOi8vYnVnLm9yYWNsZWNvcnAuY29tL3Bscy9idWcvd2ViYnVnX3ByaW50LnNob3c/Y19ycHRubz0xMjMwMzIzMiAKKyAqICAgaHR0cHM6Ly9idWcub3JhY2xlY29ycC5jb20vcGxzL2J1Zy93ZWJidWdfcHJpbnQuc2hvdz9jX3JwdG5vPTEyMzAzMjMyCiAgKiAgICgiQUNDRVNTIExPRyBET0VTIE5PVCBSRUNPUkQgUkVRVUVTVFMgVEhBVCBGQUlMIFdJVEggQU4gSFRUUCA0MDAgRVJST1IiKQogICovCiBwdWJsaWMgY2xhc3MgV2ViVGVzdCB7CkBAIC0zNywxNCArMzcsMTQgQEAKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgICAgICBsb2NhdGlvbiA9IGFyZ3NbM107CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKICAgICAgICAgd2ViVGVzdC5kb1Rlc3QoKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CkBAIC04NSw2ICs4NSw2IEBACiAgICAgICAgICAgICAgICAgLy8gaWdub3JlCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYWNjZXNzTG9nZ2luZ0JhZFJlcXVlc3RzL1dlYlRlc3QyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYWNjZXNzTG9nZ2luZ0JhZFJlcXVlc3RzL1dlYlRlc3QyLmphdmEKaW5kZXggMzM5ZGIzYS4uNjE3YWEwMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FjY2Vzc0xvZ2dpbmdCYWRSZXF1ZXN0cy9XZWJUZXN0Mi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hY2Nlc3NMb2dnaW5nQmFkUmVxdWVzdHMvV2ViVGVzdDIuamF2YQpAQCAtMjEsNyArMjEsNyBAQAogLyoqCiAgKiBVbml0IHRlc3QgZm9yOgogICoKLSAqICAgaHR0cHM6Ly9idWcub3JhY2xlY29ycC5jb20vcGxzL2J1Zy93ZWJidWdfcHJpbnQuc2hvdz9jX3JwdG5vPTEyMzAzMjMyIAorICogICBodHRwczovL2J1Zy5vcmFjbGVjb3JwLmNvbS9wbHMvYnVnL3dlYmJ1Z19wcmludC5zaG93P2NfcnB0bm89MTIzMDMyMzIKICAqICAgKCJBQ0NFU1MgTE9HIERPRVMgTk9UIFJFQ09SRCBSRVFVRVNUUyBUSEFUIEZBSUwgV0lUSCBBTiBIVFRQIDQwMCBFUlJPUiIpCiAgKi8KIApAQCAtNDUsNyArNDUsNyBAQAogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgICAgIGxvY2F0aW9uID0gYXJnc1szXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgR2xhc3NGaXNoIElzc3VlIDEyMzAzMjMyIik7CiAgICAgICAgIFdlYlRlc3QyIHdlYlRlc3QgPSBuZXcgV2ViVGVzdDIoYXJncyk7CkBAIC01Myw4ICs1Myw4IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTY0LDcgKzY0LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIi9DaGVja0FjY2Vzc0xvZz9sb2NhdGlvbj0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgVVJMRW5jb2Rlci5lbmNvZGUobG9jYXRpb24pKTsKQEAgLTcyLDcgKzcyLDcgQEAKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsgCisgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZSBjb2RlLiBFeHBlY3RlZDogMjAwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIHJlY2VpdmVkOiAiICsgcmVzcG9uc2VDb2RlKTsKICAgICAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hY2Nlc3NMb2dnaW5nQmFkUmVxdWVzdHMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hY2Nlc3NMb2dnaW5nQmFkUmVxdWVzdHMvYnVpbGQucHJvcGVydGllcwppbmRleCBhOWE4MDU3Li5lNDZkYjY3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYWNjZXNzTG9nZ2luZ0JhZFJlcXVlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FjY2Vzc0xvZ2dpbmdCYWRSZXF1ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWFjY2Vzcy1sb2dnaW5nLWJhZC1yZXF1ZXN0cyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FjY2Vzc0xvZ2dpbmdCYWRSZXF1ZXN0cy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYWNjZXNzTG9nZ2luZ0JhZFJlcXVlc3RzL2J1aWxkLnhtbAppbmRleCBmYjY1NTNiLi5iNmQyY2ZjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYWNjZXNzTG9nZ2luZ0JhZFJlcXVlc3RzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYWNjZXNzTG9nZ2luZ0JhZFJlcXVlc3RzL2J1aWxkLnhtbApAQCAtNDAsNyArNDAsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDgsMTYgKzQ4LDE2IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0KiIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZW5hYmxlLWFjY2Vzcy1sb2dnaW5nIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8ZGVsZXRlIGRpcj0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvbG9ncy9hY2Nlc3MiLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgpAQCAtNzcsNyArNzcsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC0xMDEsMTAgKzEwMSwxMCBAQAogICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRpc2FibGUtYWNjZXNzLWxvZ2dpbmciIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FjY2Vzc0xvZ2dpbmdCYWRSZXF1ZXN0cy9zZXJ2bGV0L0NoZWNrQWNjZXNzTG9nLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYWNjZXNzTG9nZ2luZ0JhZFJlcXVlc3RzL3NlcnZsZXQvQ2hlY2tBY2Nlc3NMb2cuamF2YQppbmRleCA1ZDkwMTNiLi5mMmVjOWFjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYWNjZXNzTG9nZ2luZ0JhZFJlcXVlc3RzL3NlcnZsZXQvQ2hlY2tBY2Nlc3NMb2cuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYWNjZXNzTG9nZ2luZ0JhZFJlcXVlc3RzL3NlcnZsZXQvQ2hlY2tBY2Nlc3NMb2cuamF2YQpAQCAtNDIsNiArNDIsNiBAQAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FjY2Vzc0xvZ2dpbmdEeW5hbWljUmVjb25maWcvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FjY2Vzc0xvZ2dpbmdEeW5hbWljUmVjb25maWcvV2ViVGVzdC5qYXZhCmluZGV4IDVhYzFiNmEuLjkyN2U3ZWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hY2Nlc3NMb2dnaW5nRHluYW1pY1JlY29uZmlnL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYWNjZXNzTG9nZ2luZ0R5bmFtaWNSZWNvbmZpZy9XZWJUZXN0LmphdmEKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgICAgICBsb2NhdGlvbiA9IGFyZ3NbM107CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEdsYXNzRmlzaCBJc3N1ZSAzMzk4Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTMsOCArNTMsOCBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CkBAIC02NCw3ICs2NCw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgICAgICAgICAgICAgICArICIvQ2hlY2tBY2Nlc3NMb2c/bG9jYXRpb249IgogICAgICAgICAgICAgICAgICAgICAgICAgICArIFVSTEVuY29kZXIuZW5jb2RlKGxvY2F0aW9uKSk7CkBAIC03Miw3ICs3Miw3IEBACiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOwogICAgICAgICBjb25uLmNvbm5lY3QoKTsKICAgICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm4uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7IAorICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UgY29kZS4gRXhwZWN0ZWQ6IDIwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCByZWNlaXZlZDogIiArIHJlc3BvbnNlQ29kZSk7CiAgICAgICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYWNjZXNzTG9nZ2luZ0R5bmFtaWNSZWNvbmZpZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FjY2Vzc0xvZ2dpbmdEeW5hbWljUmVjb25maWcvYnVpbGQucHJvcGVydGllcwppbmRleCBkMmFhNWUyLi5mYjVlMDJhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYWNjZXNzTG9nZ2luZ0R5bmFtaWNSZWNvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hY2Nlc3NMb2dnaW5nRHluYW1pY1JlY29uZmlnL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tYWNjZXNzLWxvZ2dpbmctZHluYW1pYy1yZWNvbmZpZyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FjY2Vzc0xvZ2dpbmdEeW5hbWljUmVjb25maWcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FjY2Vzc0xvZ2dpbmdEeW5hbWljUmVjb25maWcvYnVpbGQueG1sCmluZGV4IDQyMDE3YzMuLjQyYzFmZGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hY2Nlc3NMb2dnaW5nRHluYW1pY1JlY29uZmlnL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYWNjZXNzTG9nZ2luZ0R5bmFtaWNSZWNvbmZpZy9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDE2ICs0NCwxNiBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJlbmFibGUtYWNjZXNzLWxvZ2dpbmciIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxkZWxldGUgZGlyPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9sb2dzL2FjY2VzcyIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CkBAIC02OCw3ICs2OCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTgxLDEwICs4MSwxMCBAQAogICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRpc2FibGUtYWNjZXNzLWxvZ2dpbmciIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FjY2Vzc0xvZ2dpbmdEeW5hbWljUmVjb25maWcvc2VydmxldC9DaGVja0FjY2Vzc0xvZy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FjY2Vzc0xvZ2dpbmdEeW5hbWljUmVjb25maWcvc2VydmxldC9DaGVja0FjY2Vzc0xvZy5qYXZhCmluZGV4IGE4NTkyMTIuLjY0NDIyMTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hY2Nlc3NMb2dnaW5nRHluYW1pY1JlY29uZmlnL3NlcnZsZXQvQ2hlY2tBY2Nlc3NMb2cuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYWNjZXNzTG9nZ2luZ0R5bmFtaWNSZWNvbmZpZy9zZXJ2bGV0L0NoZWNrQWNjZXNzTG9nLmphdmEKQEAgLTI3LDYgKzI3LDYgQEAKICAgICAgICAgU3RyaW5nW10gZmlsZXMgPSBuZXcgRmlsZShsb2NhdGlvbiArICIvZG9tYWlucy9kb21haW4xL2xvZ3MvYWNjZXNzIikubGlzdCgpOwogICAgICAgICBpZiAoZmlsZXMgIT0gbnVsbCAmJiBmaWxlcy5sZW5ndGggPT0gMikgewogICAgICAgICAgICAgcmVzcC5nZXRXcml0ZXIoKS5wcmludGxuKCJTVUNDRVNTISIpOwotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FjY2Vzc0xvZ2dpbmdXcml0ZUludGVydmFsU2Vjb25kcy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYWNjZXNzTG9nZ2luZ1dyaXRlSW50ZXJ2YWxTZWNvbmRzL1dlYlRlc3QuamF2YQppbmRleCAyZjRkMmZkLi41MDFhMmY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYWNjZXNzTG9nZ2luZ1dyaXRlSW50ZXJ2YWxTZWNvbmRzL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYWNjZXNzTG9nZ2luZ1dyaXRlSW50ZXJ2YWxTZWNvbmRzL1dlYlRlc3QuamF2YQpAQCAtMzcsMTQgKzM3LDE0IEBACiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICAgICAgbG9jYXRpb24gPSBhcmdzWzNdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CiAgICAgICAgIHdlYlRlc3QuZG9UZXN0KCk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwpAQCAtNTIsMTQgKzUyLDE0IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgICAgICAgICAgICAgICArICIvaW5kZXguanNwIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsgCisgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZSBjb2RlLiBFeHBlY3RlZDogMjAwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIHJlY2VpdmVkOiAiICsgcmVzcG9uc2VDb2RlKTsKICAgICAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hY2Nlc3NMb2dnaW5nV3JpdGVJbnRlcnZhbFNlY29uZHMvV2ViVGVzdDIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hY2Nlc3NMb2dnaW5nV3JpdGVJbnRlcnZhbFNlY29uZHMvV2ViVGVzdDIuamF2YQppbmRleCA1ZGI5OTk1Li4zYzI1NTQ2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYWNjZXNzTG9nZ2luZ1dyaXRlSW50ZXJ2YWxTZWNvbmRzL1dlYlRlc3QyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FjY2Vzc0xvZ2dpbmdXcml0ZUludGVydmFsU2Vjb25kcy9XZWJUZXN0Mi5qYXZhCkBAIC00NSw3ICs0NSw3IEBACiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICAgICAgbG9jYXRpb24gPSBhcmdzWzNdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBHbGFzc0Zpc2ggSXNzdWUgMTM0NTAiKTsKICAgICAgICAgV2ViVGVzdDIgd2ViVGVzdCA9IG5ldyBXZWJUZXN0MihhcmdzKTsKQEAgLTUzLDggKzUzLDggQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpAQCAtNjQsNyArNjQsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiL0NoZWNrQWNjZXNzTG9nP2xvY2F0aW9uPSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBVUkxFbmNvZGVyLmVuY29kZShsb2NhdGlvbikpOwpAQCAtNzIsNyArNzIsNyBAQAogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgY29ubi5jb25uZWN0KCk7CiAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgeyAKKyAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlIGNvZGUuIEV4cGVjdGVkOiAyMDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgcmVjZWl2ZWQ6ICIgKyByZXNwb25zZUNvZGUpOwogICAgICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FjY2Vzc0xvZ2dpbmdXcml0ZUludGVydmFsU2Vjb25kcy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FjY2Vzc0xvZ2dpbmdXcml0ZUludGVydmFsU2Vjb25kcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDA0MjYzNzcuLjZkNzMzZDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hY2Nlc3NMb2dnaW5nV3JpdGVJbnRlcnZhbFNlY29uZHMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYWNjZXNzTG9nZ2luZ1dyaXRlSW50ZXJ2YWxTZWNvbmRzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tYWNjZXNzLWxvZ2dpbmctd3JpdGUtaW50ZXJ2YWwtc2Vjb25kcyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FjY2Vzc0xvZ2dpbmdXcml0ZUludGVydmFsU2Vjb25kcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYWNjZXNzTG9nZ2luZ1dyaXRlSW50ZXJ2YWxTZWNvbmRzL2J1aWxkLnhtbAppbmRleCBjNmFiZTZlLi5mMzU4NWFmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYWNjZXNzTG9nZ2luZ1dyaXRlSW50ZXJ2YWxTZWNvbmRzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYWNjZXNzTG9nZ2luZ1dyaXRlSW50ZXJ2YWxTZWNvbmRzL2J1aWxkLnhtbApAQCAtNDAsNyArNDAsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDgsMTYgKzQ4LDE2IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0KiIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZW5hYmxlLWFjY2Vzcy1sb2dnaW5nIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8ZGVsZXRlIGRpcj0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvbG9ncy9hY2Nlc3MiLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgpAQCAtNzcsNyArNzcsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC0xMDEsMTAgKzEwMSwxMCBAQAogICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRpc2FibGUtYWNjZXNzLWxvZ2dpbmciIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FjY2Vzc0xvZ2dpbmdXcml0ZUludGVydmFsU2Vjb25kcy9zZXJ2bGV0L0NoZWNrQWNjZXNzTG9nLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYWNjZXNzTG9nZ2luZ1dyaXRlSW50ZXJ2YWxTZWNvbmRzL3NlcnZsZXQvQ2hlY2tBY2Nlc3NMb2cuamF2YQppbmRleCAzNGEwMGMxLi5mNzYzMzhhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYWNjZXNzTG9nZ2luZ1dyaXRlSW50ZXJ2YWxTZWNvbmRzL3NlcnZsZXQvQ2hlY2tBY2Nlc3NMb2cuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYWNjZXNzTG9nZ2luZ1dyaXRlSW50ZXJ2YWxTZWNvbmRzL3NlcnZsZXQvQ2hlY2tBY2Nlc3NMb2cuamF2YQpAQCAtMzYsNiArMzYsNiBAQAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FsbG93RW5jb2RlZFNsYXNoL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hbGxvd0VuY29kZWRTbGFzaC9idWlsZC54bWwKaW5kZXggY2M1NjRjYi4uZDBmYjRkNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FsbG93RW5jb2RlZFNsYXNoL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYWxsb3dFbmNvZGVkU2xhc2gvYnVpbGQueG1sCkBAIC0zMCw3ICszMCw3IEBACiAgICAgJnJ1bjsKIAogICAgIDxpbXBvcnQgZmlsZT0iYnVpbGQtcHJvcGVydGllcy54bWwiLz4KLSAgICAKKwogICAgIDxwYXRoIGlkPSJjbGFzcy5wYXRoIj4KICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIi8+CiAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iYnVpbGQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hbGxvd0VuY29kZWRTbGFzaC9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvZGV2dGVzdHMvd2ViL2FsbG93ZW5jb2RlZHNsYXNoL0FsbG93RW5jb2RlZFNsYXNoLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYWxsb3dFbmNvZGVkU2xhc2gvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL2RldnRlc3RzL3dlYi9hbGxvd2VuY29kZWRzbGFzaC9BbGxvd0VuY29kZWRTbGFzaC5qYXZhCmluZGV4IGQ1YzM0YmIuLjIxZDY3YzEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hbGxvd0VuY29kZWRTbGFzaC9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvZGV2dGVzdHMvd2ViL2FsbG93ZW5jb2RlZHNsYXNoL0FsbG93RW5jb2RlZFNsYXNoLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FsbG93RW5jb2RlZFNsYXNoL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9kZXZ0ZXN0cy93ZWIvYWxsb3dlbmNvZGVkc2xhc2gvQWxsb3dFbmNvZGVkU2xhc2guamF2YQpAQCAtNjEsNyArNjEsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgY29ubmVjdGlvbiA9IChIdHRwVVJMQ29ubmVjdGlvbikgbmV3IFVSTCgiaHR0cDovL2xvY2FsaG9zdDoiICsgYWRtaW5Qb3J0ICsgIi9tYW5hZ2VtZW50L2RvbWFpbi9yZXNvdXJjZXMvamRiYy1yZXNvdXJjZS9qZGJjJTJGX19UaW1lclBvb2wueG1sIikub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgICAgIGNvbm5lY3Rpb24uc2V0UmVxdWVzdFByb3BlcnR5KCJYLUdsYXNzRmlzaC0zIiwgInRydWUiKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGlvbiByZXNwb25zZSBjb2RlIHJldHVybmVkICIrY29ubmVjdGlvbi5nZXRSZXNwb25zZUNvZGUoKSk7IAorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW9uIHJlc3BvbnNlIGNvZGUgcmV0dXJuZWQgIitjb25uZWN0aW9uLmdldFJlc3BvbnNlQ29kZSgpKTsKICAgICAgICAgICAgIHJlcG9ydCgicmVzcG9uc2UtIiArIGV4cGVjdGVkQ29kZSArICItdHJ5LSIgKyBjb3VudCwgZXhwZWN0ZWRDb2RlID09IGNvbm5lY3Rpb24uZ2V0UmVzcG9uc2VDb2RlKCkpOwogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgaWYoY29ubmVjdGlvbiAhPSBudWxsKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYW5vbnltb3VzQWNjZXNzRm9yYmlkZGVuL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hbm9ueW1vdXNBY2Nlc3NGb3JiaWRkZW4vV2ViVGVzdC5qYXZhCmluZGV4IDM1YjljNzYuLmU4YTYzMTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hbm9ueW1vdXNBY2Nlc3NGb3JiaWRkZW4vV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hbm9ueW1vdXNBY2Nlc3NGb3JiaWRkZW4vV2ViVGVzdC5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIDQ5MzI1NDciKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC00Niw4ICs0Niw4IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAKLSAgICAgICAgdHJ5IHsgCisKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290KTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKICAgICAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Fub255bW91c0FjY2Vzc0ZvcmJpZGRlbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Fub255bW91c0FjY2Vzc0ZvcmJpZGRlbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDA2NGJhMjEuLmUwNzVlM2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hbm9ueW1vdXNBY2Nlc3NGb3JiaWRkZW4vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYW5vbnltb3VzQWNjZXNzRm9yYmlkZGVuL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tYW5vbnltb3VzLWFjY2Vzcy1mb3JiaWRkZW4iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hbm9ueW1vdXNBY2Nlc3NGb3JiaWRkZW4vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Fub255bW91c0FjY2Vzc0ZvcmJpZGRlbi9idWlsZC54bWwKaW5kZXggODU0MmU5MS4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Fub255bW91c0FjY2Vzc0ZvcmJpZGRlbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Fub255bW91c0FjY2Vzc0ZvcmJpZGRlbi9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE3ICs0MiwxNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Fub255bW91c0FjY2Vzc0ZvcmJpZGRlbi9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYW5vbnltb3VzQWNjZXNzRm9yYmlkZGVuL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCA1ZTA3MTU0Li41NGVjNTgxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYW5vbnltb3VzQWNjZXNzRm9yYmlkZGVuL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYW5vbnltb3VzQWNjZXNzRm9yYmlkZGVuL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMzUsNyArMzUsNyBAQAogICA8c2VjdXJpdHktcm9sZT4KICAgICA8ZGVzY3JpcHRpb24+dGVzdCByb2xlPC9kZXNjcmlwdGlvbj4KICAgICA8cm9sZS1uYW1lPnRlc3Ryb2xlPC9yb2xlLW5hbWU+Ci0gIDwvc2VjdXJpdHktcm9sZT4gCisgIDwvc2VjdXJpdHktcm9sZT4KIAogPC93ZWItYXBwPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXBwbGljYXRpb25EaXNwYXRjaGVyL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hcHBsaWNhdGlvbkRpc3BhdGNoZXIvV2ViVGVzdC5qYXZhCmluZGV4IDgxNGI4ZGYuLmJjNDFhZGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hcHBsaWNhdGlvbkRpc3BhdGNoZXIvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hcHBsaWNhdGlvbkRpc3BhdGNoZXIvV2ViVGVzdC5qYXZhCkBAIC0yMSwxMCArMjEsMTAgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLio7CiAKIHB1YmxpYyBjbGFzcyBXZWJUZXN0IHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGludCBjb3VudCA9IDA7CiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IEVYUEVDVEVEX0NPVU5UID0gMTsKLSAgICAKKwogICAgIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdD0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCkBAIC0zMiw3ICszMiw3IEBACiAKICAgICAgICAgLy8gVGhlIHN0YXQgcmVwb3J0ZXIgd3JpdGVzIG91dCB0aGUgdGVzdCBpbmZvIGFuZCByZXN1bHRzCiAgICAgICAgIC8vIGludG8gdGhlIHRvcC1sZXZlbCBxdWlja2xvb2sgZGlyZWN0b3J5IGR1cmluZyBhIHJ1bi4KLSAgICAgIAorCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlJlcXVlc3QgRGlzcGF0Y2hlciBpbiBTZXJ2bGV0LmluaXQoKSIpOwogCiAgICAgICAgIFN0cmluZyBob3N0ID0gYXJnc1swXTsKQEAgLTQxLDE2ICs0MSwxNiBAQAogCiAgICAgICAgIGludCBwb3J0ID0gbmV3IEludGVnZXIocG9ydFMpLmludFZhbHVlKCk7CiAgICAgICAgIFN0cmluZyBuYW1lOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgZ29HZXQoaG9zdCwgcG9ydCwgIkFwcGxpY2F0aW9uRGlzcGF0Y2hlciIsIGNvbnRleHRSb290ICsgIi9TZXJ2bGV0VGVzdCIgKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0KSB7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoY291bnQgIT0gRVhQRUNURURfQ09VTlQpewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImFwcGxpY2F0aW9uRGlzcGF0Y2hlciIsIHN0YXQuRkFJTCk7Ci0gICAgICAgIH0gICAgICAgICAgIAorICAgICAgICB9CiAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoIndlYi9hcHBsaWNhdGlvbkRpc3BhdGNoZXItLS0+IGV4cGVjdCAyIFBBU1MiKTsKICAgICB9CkBAIC02NSw3ICs2NSw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigoIkdFVCAiICsgY29udGV4dFBhdGggKyAiIEhUVFAvMS4wXG4iKSk7CiAgICAgICAgIG9zLndyaXRlKCgiR0VUICIgKyBjb250ZXh0UGF0aCArICIgSFRUUC8xLjBcbiIpLmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHMuZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYmlzID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CkBAIC03NywyMCArNzcsMjAgQEAKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obGluZU51bSArICI6ICAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBzdGF0dXMgPSBsaW5lLnN1YnN0cmluZyhpbmRleCsyKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5lcXVhbHNJZ25vcmVDYXNlKCJQQVNTIikpewogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImFwcGxpY2F0aW9uRGlzcGF0Y2hlcjogIiArIGxpbmUuc3Vic3RyaW5nKDAsaW5kZXgpLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImFwcGxpY2F0aW9uRGlzcGF0Y2hlcjogIiArIGxpbmUuc3Vic3RyaW5nKDAsaW5kZXgpLCBzdGF0LkZBSUwpOyAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiYXBwbGljYXRpb25EaXNwYXRjaGVyOiAiICsgbGluZS5zdWJzdHJpbmcoMCxpbmRleCksIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBsaW5lTnVtKys7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBleCl7Ci0gICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsgICAKKyAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiVGVzdCBVTlBSRURJQ1RFRC1GQUlMVVJFIik7CiAgICAgICAgICB9CiAgICB9Ci0gIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXBwbGljYXRpb25EaXNwYXRjaGVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXBwbGljYXRpb25EaXNwYXRjaGVyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNTg4MzU2YS4uZmZjM2IyZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FwcGxpY2F0aW9uRGlzcGF0Y2hlci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hcHBsaWNhdGlvbkRpc3BhdGNoZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTQgKzE1LDE0IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWFwcGxpY2F0aW9uRGlzcGF0Y2hlciIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tYXBwbGljYXRpb25EaXNwYXRjaGVyIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iL3dlYi1hcHBsaWNhdGlvbkRpc3BhdGNoZXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hcHBsaWNhdGlvbkRpc3BhdGNoZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FwcGxpY2F0aW9uRGlzcGF0Y2hlci9idWlsZC54bWwKaW5kZXggY2Y5M2ZhNC4uMjgyNzVhOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FwcGxpY2F0aW9uRGlzcGF0Y2hlci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FwcGxpY2F0aW9uRGlzcGF0Y2hlci9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDEwICs0MiwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgIDxqYXZhYwpAQCAtNTMsMTAgKzUzLDEwIEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjQsNyArNjQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXBwbGljYXRpb25EaXNwYXRjaGVyL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hcHBsaWNhdGlvbkRpc3BhdGNoZXIvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDY1NWMwY2EuLjEyNTU0ZjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hcHBsaWNhdGlvbkRpc3BhdGNoZXIvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hcHBsaWNhdGlvbkRpc3BhdGNoZXIvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yOCwxMiArMjgsMTIgQEAKICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0PC9zZXJ2bGV0LWNsYXNzPgogICAgICAgICA8bG9hZC1vbi1zdGFydHVwPjEwMDA8L2xvYWQtb24tc3RhcnR1cD4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAKICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi8qPC91cmwtcGF0dGVybj4KLSAgICA8L3NlcnZsZXQtbWFwcGluZz4gICAgCisgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiAKIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FwcGxpY2F0aW9uRGlzcGF0Y2hlci9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXBwbGljYXRpb25EaXNwYXRjaGVyL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQppbmRleCA1ZGVjMTQ3Li5kYWU4ODYxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXBwbGljYXRpb25EaXNwYXRjaGVyL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXBwbGljYXRpb25EaXNwYXRjaGVyL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQpAQCAtMzQsMjMgKzM0LDIzIEBACiAKICAgICBwcml2YXRlIFNlcnZsZXRDb250ZXh0IGNvbnRleHQ7CiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHN0YXR1cyA9ICJBcHBsaWNhdGlvbkRpc3BhdGNoZXI6OlBBU1MiOwotICAgCisKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5pbml0XSIpOwogCiAgICAgICAgIHRyeXsKLSAgICAgICAgICAgIFJlcXVlc3REaXNwYXRjaGVyIHJlcXVlc3REID0gCisgICAgICAgICAgICBSZXF1ZXN0RGlzcGF0Y2hlciByZXF1ZXN0RCA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0U2VydmxldENvbnRleHQoKS5nZXRSZXF1ZXN0RGlzcGF0Y2hlcigiL3Rlc3QuanNwIik7CiAKICAgICAgICAgICAgIGlmICggcmVxdWVzdEQgPT0gbnVsbCl7Ci0gICAgICAgICAgICAgICAgc3RhdHVzID0gIkFwcGxpY2F0aW9uRGlzcGF0Y2hlcjo6RkFJTCI7ICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN0YXR1cyA9ICJBcHBsaWNhdGlvbkRpc3BhdGNoZXI6OkZBSUwiOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5SZXF1ZXN0RGlzcGF0Y2hlcjogIiArIHJlcXVlc3REICsgIl0iKTsKICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHQpewotICAgICAgICAgICAgICAgIHN0YXR1cyA9ICJBcHBsaWNhdGlvbkRpc3BhdGNoZXI6OkZBSUwiOyAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSAiQXBwbGljYXRpb25EaXNwYXRjaGVyOjpGQUlMIjsKICAgICAgICAgfQotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInN0YXR1czogIiArIHN0YXR1cyk7IAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInN0YXR1czogIiArIHN0YXR1cyk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CkBAIC01OCw3ICs1OCw3IEBACiAgICAgICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAgICAgICAgCisgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmRvUG9zdF0iKTsKIAogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hc2FkbWluRGVsZXRlcy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FzYWRtaW5EZWxldGVzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNDZiMTIwZS4uNjk0Y2JiOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FzYWRtaW5EZWxldGVzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2FzYWRtaW5EZWxldGVzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tYXNhZG1pbi1kZWxldGVzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXNhZG1pbkRlbGV0ZXNUYXJnZXQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hc2FkbWluRGVsZXRlc1RhcmdldC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDRkYmY3NDcuLjE5MzUxMTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hc2FkbWluRGVsZXRlc1RhcmdldC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hc2FkbWluRGVsZXRlc1RhcmdldC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWFzYWRtaW4tZGVsZXRlcy10YXJnZXQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hHZXRSZW1vdGVBZGRyZXNzL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hHZXRSZW1vdGVBZGRyZXNzL1dlYlRlc3QuamF2YQppbmRleCA0NDEwNWQ2Li5kZGQxYTVmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoR2V0UmVtb3RlQWRkcmVzcy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaEdldFJlbW90ZUFkZHJlc3MvV2ViVGVzdC5qYXZhCkBAIC0zMiw3ICszMiw3IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQKICAgICAgICAgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhQRUNURURfUkVTUE9OU0UgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhQRUNURURfUkVTUE9OU0UgPQogICAgICAgICAiUmVtb3RlQWRkcmVzcz0xMjMuNDU2Ljc4OSI7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9OQU1FID0KQEAgLTQ4LDcgKzQ4LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgNjM0NzIxNSIpOwogICAgICAgICBXZWJUZXN0IHRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTcyLDcgKzcyLDcgQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7ICAgICAgICAgCisgICAgcHJpdmF0ZSB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBzb2NrID0gbmV3IFNvY2tldChob3N0LCBuZXcgSW50ZWdlcihwb3J0KS5pbnRWYWx1ZSgpKTsKICAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gc29jay5nZXRPdXRwdXRTdHJlYW0oKTsKICAgICAgICAgU3RyaW5nIGdldCA9ICJHRVQgIiArIGNvbnRleHRSb290ICsgIi9qc3AvcmVtb3RlQWRkcmVzcy5qc3AgIgpAQCAtODEsNyArODEsNyBAQAogICAgICAgICBvcy53cml0ZShnZXQuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCJQcm94eS1pcDogMTIzLjQ1Ni43ODlcbiIuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gbnVsbDsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYmlzID0gbnVsbDsKICAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaEdldFJlbW90ZUFkZHJlc3MvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hHZXRSZW1vdGVBZGRyZXNzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZWJiMDVhMi4uM2M2ZmE0NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaEdldFJlbW90ZUFkZHJlc3MvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoR2V0UmVtb3RlQWRkcmVzcy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWF1dGgtcGFzc3Rocm91Z2gtZ2V0LXJlbW90ZS1hZGRyZXNzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoR2V0UmVtb3RlQWRkcmVzcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoR2V0UmVtb3RlQWRkcmVzcy9idWlsZC54bWwKaW5kZXggZmZiNjY1Ny4uZGYyZjg4YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaEdldFJlbW90ZUFkZHJlc3MvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hHZXRSZW1vdGVBZGRyZXNzL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMTggKzQ0LDE4IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0IiAvPgpAQCAtNzEsNyArNzEsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC04MywxMCArODMsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0b3JlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaEdldFJlbW90ZUhvc3QvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaEdldFJlbW90ZUhvc3QvV2ViVGVzdC5qYXZhCmluZGV4IGZlNzRkYTguLmI3ZTYzYjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hHZXRSZW1vdGVIb3N0L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoR2V0UmVtb3RlSG9zdC9XZWJUZXN0LmphdmEKQEAgLTM0LDcgKzM0LDcgQEAKICAgICAgICAgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgRVhQRUNURURfUkVTUE9OU0UgPSBudWxsOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFWFBFQ1RFRF9SRVNQT05TRV9MT0NBTEhPU1QgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhQRUNURURfUkVTUE9OU0VfTE9DQUxIT1NUID0KICAgICAgICAgIlJlbW90ZUhvc3Q9bG9jYWxob3N0IjsKIAogICAgIHN0YXRpY3sKQEAgLTY4LDcgKzY4LDcgQEAKIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKIAotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHRlc3RSZW1vdGVBZGRyZXNzKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaEdldFJlbW90ZUhvc3QvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hHZXRSZW1vdGVIb3N0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggN2NiZmE1ZC4uOWJlODNkZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaEdldFJlbW90ZUhvc3QvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoR2V0UmVtb3RlSG9zdC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWF1dGgtcGFzc3Rocm91Z2gtZ2V0LXJlbW90ZS1ob3N0Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoR2V0UmVtb3RlSG9zdC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoR2V0UmVtb3RlSG9zdC9idWlsZC54bWwKaW5kZXggM2QxZmQ4Yi4uZjhhZGJhNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaEdldFJlbW90ZUhvc3QvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hHZXRSZW1vdGVIb3N0L2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMTggKzQ0LDE4IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0IiAvPgpAQCAtNzYsNyArNzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC04OCwxMCArODgsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0b3JlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaEdldFNjaGVtZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoR2V0U2NoZW1lL1dlYlRlc3QuamF2YQppbmRleCBkZTk1ZGU5Li4zYTk1MTZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoR2V0U2NoZW1lL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoR2V0U2NoZW1lL1dlYlRlc3QuamF2YQpAQCAtNDIsNyArNDIsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciA2MTcwNDUwIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTEsOCArNTEsOCBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgCi0gICAgICAgIHRyeSB7IAorCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2VKc3AoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CkBAIC03MSw3ICs3MSw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZUpzcCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAgCisKICAgICAgICAgc29jayA9IG5ldyBTb2NrZXQoaG9zdCwgbmV3IEludGVnZXIocG9ydCkuaW50VmFsdWUoKSk7CiAgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IHNvY2suZ2V0T3V0cHV0U3RyZWFtKCk7CiAgICAgICAgIFN0cmluZyBnZXQgPSAiR0VUICIgKyBjb250ZXh0Um9vdCArICIvanNwL3Rlc3QuanNwIiArICIgSFRUUC8xLjBcbiI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoR2V0U2NoZW1lL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoR2V0U2NoZW1lL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZjlmZWNlNi4uM2EzY2FiZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaEdldFNjaGVtZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hHZXRTY2hlbWUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1hdXRoLXBhc3N0aHJvdWdoLWdldC1zY2hlbWUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hHZXRTY2hlbWUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaEdldFNjaGVtZS9idWlsZC54bWwKaW5kZXggZmZiNjY1Ny4uZGYyZjg4YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaEdldFNjaGVtZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaEdldFNjaGVtZS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDE4ICs0NCwxOCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIgLz4KQEAgLTcxLDcgKzcxLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtODMsMTAgKzgzLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVzdG9yZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hSZXF1ZXN0SXNTZWN1cmUvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaFJlcXVlc3RJc1NlY3VyZS9XZWJUZXN0LmphdmEKaW5kZXggMTRhZWFlNi4uYjY3YWVjYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaFJlcXVlc3RJc1NlY3VyZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaFJlcXVlc3RJc1NlY3VyZS9XZWJUZXN0LmphdmEKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgNjM5NzIxOCIpOwogICAgICAgICBXZWJUZXN0IHRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTcxLDcgKzcxLDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlSnNwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgICAKKwogICAgICAgICBzb2NrID0gbmV3IFNvY2tldChob3N0LCBuZXcgSW50ZWdlcihwb3J0KS5pbnRWYWx1ZSgpKTsKICAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gc29jay5nZXRPdXRwdXRTdHJlYW0oKTsKICAgICAgICAgU3RyaW5nIGdldCA9ICJHRVQgIiArIGNvbnRleHRSb290ICsgIi9qc3AvdGVzdC5qc3AiICsgIiBIVFRQLzEuMFxuIjsKQEAgLTgwLDcgKzgwLDcgQEAKICAgICAgICAgb3Mud3JpdGUoIlByb3h5LWtleXNpemU6IDUxMlxuIi5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlByb3h5LWlwOiAxMjMuNDU2Ljc4OVxuIi5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBudWxsOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBiaXMgPSBudWxsOwogICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoUmVxdWVzdElzU2VjdXJlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoUmVxdWVzdElzU2VjdXJlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZTVmMmJhNy4uNTQ5NmEzZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaFJlcXVlc3RJc1NlY3VyZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hSZXF1ZXN0SXNTZWN1cmUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1hdXRoLXBhc3N0aHJvdWdoLXJlcXVlc3QtaXMtc2VjdXJlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoUmVxdWVzdElzU2VjdXJlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hSZXF1ZXN0SXNTZWN1cmUvYnVpbGQueG1sCmluZGV4IGZmYjY2NTcuLmRmMmY4OGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hSZXF1ZXN0SXNTZWN1cmUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hSZXF1ZXN0SXNTZWN1cmUvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwxOCArNDQsMTggQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiIC8+CkBAIC03MSw3ICs3MSw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTgzLDEwICs4MywxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RvcmUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoU2VuZFJlZGlyZWN0RnJvbUpzcFdpdGhIdHRwc1NlcnZlck5hbWUvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaFNlbmRSZWRpcmVjdEZyb21Kc3BXaXRoSHR0cHNTZXJ2ZXJOYW1lL1dlYlRlc3QuamF2YQppbmRleCA3NzViNTdmLi41Yzk3ZDNiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoU2VuZFJlZGlyZWN0RnJvbUpzcFdpdGhIdHRwc1NlcnZlck5hbWUvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hTZW5kUmVkaXJlY3RGcm9tSnNwV2l0aEh0dHBzU2VydmVyTmFtZS9XZWJUZXN0LmphdmEKQEAgLTM5LDcgKzM5LDcgQEAKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdAogICAgICAgICA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFWFBFQ1RFRF9MT0NBVElPTiA9IAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFWFBFQ1RFRF9MT0NBVElPTiA9CiAgICAgICAgICJodHRwczovL2xiaG9zdDo4ODg4L2pzcC9yZWRpcmVjdC90YXJnZXQuanNwIjsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX05BTUUgPQpAQCAtNTUsNyArNTUsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciA2MjY5MTAyIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNjQsOCArNjQsOCBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgCi0gICAgICAgIHRyeSB7IAorCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICB0ZXN0UmVtb3RlQWRkcmVzcygpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTgzLDcgKzgzLDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgdGVzdFJlbW90ZUFkZHJlc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgIAorCiAgICAgICAgIHNvY2sgPSBuZXcgU29ja2V0KGhvc3QsIG5ldyBJbnRlZ2VyKHBvcnQpLmludFZhbHVlKCkpOwogICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSBzb2NrLmdldE91dHB1dFN0cmVhbSgpOwogICAgICAgICBTdHJpbmcgZ2V0ID0gIkdFVCAiICsgY29udGV4dFJvb3QgKyAiL2pzcC9zZW5kUmVkaXJlY3QuanNwICIKQEAgLTkzLDcgKzkzLDcgQEAKICAgICAgICAgb3Mud3JpdGUoIlByb3h5LWtleXNpemU6IDUxMlxuIi5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlByb3h5LWlwOiAxMjMuNDU2Ljc4OVxuIi5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBudWxsOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBiaXMgPSBudWxsOwogICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoU2VuZFJlZGlyZWN0RnJvbUpzcFdpdGhIdHRwc1NlcnZlck5hbWUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hTZW5kUmVkaXJlY3RGcm9tSnNwV2l0aEh0dHBzU2VydmVyTmFtZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDMzMzg5MzEuLjI2YmQyZDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hTZW5kUmVkaXJlY3RGcm9tSnNwV2l0aEh0dHBzU2VydmVyTmFtZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hTZW5kUmVkaXJlY3RGcm9tSnNwV2l0aEh0dHBzU2VydmVyTmFtZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWF1dGgtcGFzc3Rocm91Z2gtc2VuZC1yZWRpcmVjdC1mcm9tLWpzcC13aXRoLWh0dHBzLXNlcnZlci1uYW1lIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoU2VuZFJlZGlyZWN0RnJvbUpzcFdpdGhIdHRwc1NlcnZlck5hbWUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaFNlbmRSZWRpcmVjdEZyb21Kc3BXaXRoSHR0cHNTZXJ2ZXJOYW1lL2J1aWxkLnhtbAppbmRleCAyYjFlMmI5Li4xOGMxZDlmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoU2VuZFJlZGlyZWN0RnJvbUpzcFdpdGhIdHRwc1NlcnZlck5hbWUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hTZW5kUmVkaXJlY3RGcm9tSnNwV2l0aEh0dHBzU2VydmVyTmFtZS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDE4ICs0NCwxOCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIgLz4KQEAgLTc2LDcgKzc2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtODgsMTAgKzg4LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVzdG9yZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hTZW5kUmVkaXJlY3RIb3N0UmVxdWVzdEhlYWRlcldpdGhvdXRQb3J0L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hTZW5kUmVkaXJlY3RIb3N0UmVxdWVzdEhlYWRlcldpdGhvdXRQb3J0L1dlYlRlc3QuamF2YQppbmRleCBiMmRjM2U5Li41MjQ3OTRmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoU2VuZFJlZGlyZWN0SG9zdFJlcXVlc3RIZWFkZXJXaXRob3V0UG9ydC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaFNlbmRSZWRpcmVjdEhvc3RSZXF1ZXN0SGVhZGVyV2l0aG91dFBvcnQvV2ViVGVzdC5qYXZhCkBAIC01MCw3ICs1MCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIDY1OTA5MjEiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC01OSw4ICs1OSw4IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAKLSAgICAgICAgdHJ5IHsgCisKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHRlc3RSZW1vdGVBZGRyZXNzKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpAQCAtNzgsNyArNzgsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCB0ZXN0UmVtb3RlQWRkcmVzcygpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAgCisKICAgICAgICAgc29jayA9IG5ldyBTb2NrZXQoaG9zdCwgbmV3IEludGVnZXIocG9ydCkuaW50VmFsdWUoKSk7CiAgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IHNvY2suZ2V0T3V0cHV0U3RyZWFtKCk7CiAgICAgICAgIFN0cmluZyBnZXQgPSAiR0VUICIgKyBjb250ZXh0Um9vdCArICIgSFRUUC8xLjBcbiI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoU2VuZFJlZGlyZWN0SG9zdFJlcXVlc3RIZWFkZXJXaXRob3V0UG9ydC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaFNlbmRSZWRpcmVjdEhvc3RSZXF1ZXN0SGVhZGVyV2l0aG91dFBvcnQvYnVpbGQucHJvcGVydGllcwppbmRleCAwNGI4MjllLi4zMmFkZDM1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoU2VuZFJlZGlyZWN0SG9zdFJlcXVlc3RIZWFkZXJXaXRob3V0UG9ydC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hTZW5kUmVkaXJlY3RIb3N0UmVxdWVzdEhlYWRlcldpdGhvdXRQb3J0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tYXV0aC1wYXNzdGhyb3VnaC1zZW5kLXJlZGlyZWN0LWhvc3QtcmVxdWVzdC1oZWFkZXItd2l0aG91dC1wb3J0Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoU2VuZFJlZGlyZWN0SG9zdFJlcXVlc3RIZWFkZXJXaXRob3V0UG9ydC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoU2VuZFJlZGlyZWN0SG9zdFJlcXVlc3RIZWFkZXJXaXRob3V0UG9ydC9idWlsZC54bWwKaW5kZXggZmZiNjY1Ny4uZGYyZjg4YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaFNlbmRSZWRpcmVjdEhvc3RSZXF1ZXN0SGVhZGVyV2l0aG91dFBvcnQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hTZW5kUmVkaXJlY3RIb3N0UmVxdWVzdEhlYWRlcldpdGhvdXRQb3J0L2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMTggKzQ0LDE4IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0IiAvPgpAQCAtNzEsNyArNzEsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC04MywxMCArODMsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0b3JlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaFNlbmRSZWRpcmVjdFdpdGhIdHRwc1NlcnZlck5hbWUvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaFNlbmRSZWRpcmVjdFdpdGhIdHRwc1NlcnZlck5hbWUvV2ViVGVzdC5qYXZhCmluZGV4IDg0YTg4ZWQuLjM4ZGJhOWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hTZW5kUmVkaXJlY3RXaXRoSHR0cHNTZXJ2ZXJOYW1lL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoU2VuZFJlZGlyZWN0V2l0aEh0dHBzU2VydmVyTmFtZS9XZWJUZXN0LmphdmEKQEAgLTU1LDcgKzU1LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgNjI2OTEwMiIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTY0LDggKzY0LDggQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgIAotICAgICAgICB0cnkgeyAKKworICAgICAgICB0cnkgewogICAgICAgICAgICAgdGVzdFJlbW90ZUFkZHJlc3MoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CkBAIC04Myw3ICs4Myw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHRlc3RSZW1vdGVBZGRyZXNzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgICAKKwogICAgICAgICBzb2NrID0gbmV3IFNvY2tldChob3N0LCBuZXcgSW50ZWdlcihwb3J0KS5pbnRWYWx1ZSgpKTsKICAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gc29jay5nZXRPdXRwdXRTdHJlYW0oKTsKICAgICAgICAgU3RyaW5nIGdldCA9ICJHRVQgIiArIGNvbnRleHRSb290ICsgIiBIVFRQLzEuMFxuIjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hTZW5kUmVkaXJlY3RXaXRoSHR0cHNTZXJ2ZXJOYW1lL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoU2VuZFJlZGlyZWN0V2l0aEh0dHBzU2VydmVyTmFtZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDlkMDNjYTUuLjIzNDM1NmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hTZW5kUmVkaXJlY3RXaXRoSHR0cHNTZXJ2ZXJOYW1lL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaFNlbmRSZWRpcmVjdFdpdGhIdHRwc1NlcnZlck5hbWUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1hdXRoLXBhc3N0aHJvdWdoLXNlbmQtcmVkaXJlY3Qtd2l0aC1odHRwcy1zZXJ2ZXItbmFtZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaFNlbmRSZWRpcmVjdFdpdGhIdHRwc1NlcnZlck5hbWUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2F1dGhQYXNzdGhyb3VnaFNlbmRSZWRpcmVjdFdpdGhIdHRwc1NlcnZlck5hbWUvYnVpbGQueG1sCmluZGV4IDJiMWUyYjkuLjE4YzFkOWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9hdXRoUGFzc3Rocm91Z2hTZW5kUmVkaXJlY3RXaXRoSHR0cHNTZXJ2ZXJOYW1lL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYXV0aFBhc3N0aHJvdWdoU2VuZFJlZGlyZWN0V2l0aEh0dHBzU2VydmVyTmFtZS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDE4ICs0NCwxOCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIgLz4KQEAgLTc2LDcgKzc2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtODgsMTAgKzg4LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVzdG9yZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9ib2R5VGFnL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9ib2R5VGFnL1dlYlRlc3QuamF2YQppbmRleCA0YTc0ODNjLi43M2ZlM2E3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYm9keVRhZy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2JvZHlUYWcvV2ViVGVzdC5qYXZhCkBAIC0yMiw5ICsyMiw5IEBACiAKIHB1YmxpYyBjbGFzcyBXZWJUZXN0CiB7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIHBhc3MgPSBmYWxzZTsKLSAgICAKKwogICAgIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdD0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCkBAIC0zMywxNCArMzMsMTQgQEAKIAogICAgICAgICAvLyBUaGUgc3RhdCByZXBvcnRlciB3cml0ZXMgb3V0IHRoZSB0ZXN0IGluZm8gYW5kIHJlc3VsdHMKICAgICAgICAgLy8gaW50byB0aGUgdG9wLWxldmVsIHF1aWNrbG9vayBkaXJlY3RvcnkgZHVyaW5nIGEgcnVuLgotICAgICAgCisKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVGVzdCBCb2R5VGFnIGJlaGF2aW9yIHdoZW4gdGFnIGlzIHJldXNlZCIpOwogCiAgICAgICAgIFN0cmluZyBob3N0ID0gYXJnc1swXTsKICAgICAgICAgU3RyaW5nIHBvcnRTID0gYXJnc1sxXTsKICAgICAgICAgU3RyaW5nIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICAgICAgaW50IHBvcnQgPSBuZXcgSW50ZWdlcihwb3J0UykuaW50VmFsdWUoKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGdvR2V0KGhvc3QsIHBvcnQsIGNvbnRleHRSb290ICsgIi90ZXN0LmpzcCIgKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJCb2R5VGFnIHRlc3QiLCBwYXNzPyBzdGF0LlBBU1M6IHN0YXQuRkFJTCk7CkBAIC02MSw3ICs2MSw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR0VUICIgKyBjb250ZXh0UGF0aCArICIgSFRUUC8xLjAiKTsKICAgICAgICAgb3Mud3JpdGUoKCJHRVQgIiArIGNvbnRleHRQYXRoICsgIiBIVFRQLzEuMFxuIikuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gcy5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBiaXMgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKQEAgLTc1LDcgKzc1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGV4KXsKLSAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOyAgIAorICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJUZXN0IFVOUFJFRElDVEVELUZBSUxVUkUiKTsKICAgICAgICAgfQogICAgICAgICBpZiAoY291bnQgPT0gMSkKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9ib2R5VGFnL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYm9keVRhZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDllYWY1YWEuLmNjMzM1NWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9ib2R5VGFnL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2JvZHlUYWcvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1ib2R5dGFnIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYm9keVRhZy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYm9keVRhZy9idWlsZC54bWwKaW5kZXggMDBmZGFkMy4uYzM5Nzc2ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2JvZHlUYWcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9ib2R5VGFnL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMjMgKzQyLDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzAsMTAgKzcwLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2JvZHlUYWcvc2VydmxldC9teXBhY2svTXlCb2R5LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYm9keVRhZy9zZXJ2bGV0L215cGFjay9NeUJvZHkuamF2YQppbmRleCAyZGNlMzkxLi43MzdhN2JmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYm9keVRhZy9zZXJ2bGV0L215cGFjay9NeUJvZHkuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYm9keVRhZy9zZXJ2bGV0L215cGFjay9NeUJvZHkuamF2YQpAQCAtMjEsNyArMjEsNyBAQAogCiAKIHB1YmxpYyBjbGFzcyBNeUJvZHkgZXh0ZW5kcyBCb2R5VGFnU3VwcG9ydCB7Ci0JCisKICAgcHVibGljIGludCBkb0VuZFRhZygpIHsKIAogICAgIHRyeSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYnJva2VuX3dlYmFwcC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYnJva2VuX3dlYmFwcC9XZWJUZXN0LmphdmEKaW5kZXggOTY1NmU0Yi4uZGQzZDZhYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Jyb2tlbl93ZWJhcHAvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9icm9rZW5fd2ViYXBwL1dlYlRlc3QuamF2YQpAQCAtMzAsOCArMzAsOCBAQAogICAgIHByaXZhdGUgc3RhdGljIFVSTENvbm5lY3Rpb24gY29ubiA9IG51bGw7CiAgICAgcHJpdmF0ZSBzdGF0aWMgVVJMIHVybDsKICAgICBwcml2YXRlIHN0YXRpYyBPYmplY3RPdXRwdXRTdHJlYW0gb2JqZWN0V3JpdGVyID0gbnVsbDsKLSAgICBwcml2YXRlIHN0YXRpYyBPYmplY3RJbnB1dFN0cmVhbSBvYmplY3RSZWFkZXIgPSBudWxsOyAgCi0gICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgT2JqZWN0SW5wdXRTdHJlYW0gb2JqZWN0UmVhZGVyID0gbnVsbDsKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHRocm93cyBFeGNlcHRpb257CiAgICAgICAgIFN0cmluZyBob3N0ID0gYXJnc1swXTsKICAgICAgICAgU3RyaW5nIHBvcnQgPSBhcmdzWzFdOwpAQCAtNDgsMTIgKzQ4LDEyIEBACiAgICAgICAgICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gdXJsQ29ubmVjdGlvbiA9IChIdHRwVVJMQ29ubmVjdGlvbiljb25uOwogICAgICAgICAgICAgICAgIHVybENvbm5lY3Rpb24uc2V0RG9PdXRwdXQodHJ1ZSk7CiAKLSAgICAgICAgICAgICAgICBEYXRhT3V0cHV0U3RyZWFtIG91dCA9IAorICAgICAgICAgICAgICAgIERhdGFPdXRwdXRTdHJlYW0gb3V0ID0KICAgICAgICAgICAgICAgICAgICBuZXcgRGF0YU91dHB1dFN0cmVhbSh1cmxDb25uZWN0aW9uLmdldE91dHB1dFN0cmVhbSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC53cml0ZUJ5dGUoMSk7CiAKICAgICAgICAgICAgICAgIGludCByZXNwb25zZUNvZGU9ICB1cmxDb25uZWN0aW9uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJicm9rZW5fd2ViYXBwOiAiICsgcmVzcG9uc2VDb2RlICsgIiBFeHBlY3RlZCBjb2RlOiA0MDQiKTsgCisgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImJyb2tlbl93ZWJhcHA6ICIgKyByZXNwb25zZUNvZGUgKyAiIEV4cGVjdGVkIGNvZGU6IDQwNCIpOwogICAgICAgICAgICAgICAgaWYgKHVybENvbm5lY3Rpb24uZ2V0UmVzcG9uc2VDb2RlKCkgIT0gNDA0KXsKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIlRlc3QgYnJva2VuX3dlYmFwcCIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Jyb2tlbl93ZWJhcHAvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9icm9rZW5fd2ViYXBwL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNWQ4M2Y2Ny4uNjRlOGQ0ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Jyb2tlbl93ZWJhcHAvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYnJva2VuX3dlYmFwcC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNCArMTUsMTQgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tYnJva2VuX3dlYmFwcCIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tYnJva2VuX3dlYmFwcCIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii93ZWItYnJva2VuX3dlYmFwcCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Jyb2tlbl93ZWJhcHAvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Jyb2tlbl93ZWJhcHAvYnVpbGQueG1sCmluZGV4IDBiMDEwNDYuLjQ4NTI4MGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9icm9rZW5fd2ViYXBwL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYnJva2VuX3dlYmFwcC9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDI0ICs0NCwyNCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgIDxqYXZhYwogICAgICAgICAgICAgc3JjZGlyPSIuIgogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzMsMTAgKzczLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Jyb2tlbl93ZWJhcHAvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Jyb2tlbl93ZWJhcHAvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDI5YWM3OGIuLmM3ZGY5ZDUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9icm9rZW5fd2ViYXBwL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYnJva2VuX3dlYmFwcC9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTIyLDEyICsyMiwxMiBAQAogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCIKICAgICAgICAgIHZlcnNpb249IjIuNCI+Ci0gICAgIAorCiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldFRlc3Q8L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0PC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAorICAgIDwvc2VydmxldD4KICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPlNlcnZsZXRUZXN0PC91cmwtcGF0dGVybj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9icm9rZW5fd2ViYXBwL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9icm9rZW5fd2ViYXBwL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQppbmRleCA1ZjVmMzc4Li44MDc0ODBmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYnJva2VuX3dlYmFwcC9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Jyb2tlbl93ZWJhcHAvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCkBAIC00NiwxMSArNDYsMTEgQEAKIHB1YmxpYyBjbGFzcyBTZXJ2bGV0VGVzdCBleHRlbmRzIEh0dHBTZXJ2bGV0ewogCiAgICAgcHJpdmF0ZSBTdHJpbmcgc3RhdHVzID0gIkRlbGVnYXRlVGVzdDo6RkFJTCI7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5pbml0XSIpOyAgICAgICAgCi0gICAgICAgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmluaXRdIik7CisKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKQEAgLTU4LDE2ICs1OCwxNiBAQAogICAgICAgICBkb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgICAgICAgIAorICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5kb1Bvc3RdIik7Ci0gICAgICAgIAorCiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwogICAgICAgICBvdXQucHJpbnRsbihzdGF0dXMpOwogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7Ci0gICAgICAgIAorCiAgICAgICAgIHN0YXR1cyA9ICJicm9rZW5fd2ViYXBwOjpGQUlMIjsKICAgICAgICAgb3V0LnByaW50bG4oc3RhdHVzKTsKLSAgICAgICAgCisKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvYnVpbGQueG1sCmluZGV4IDg4NzFhNDcuLmQzOTFmOGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2J1aWxkLnhtbApAQCAtNTcsNyArNTcsNyBAQAogICAgICAgICA8YW50IGRpcj0ianNwQ29uZmlnSW5jbHVkZUNoYWluIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0ianNwQ29uZmlnSmF2YWNTb3VyY2UiIHRhcmdldD0iYnVpbGQtcHVibGlzaC13YXIiLz4KICAgICAgICAgPGFudCBkaXI9ImpzcENvbmZpZ0pzcEZpbGUiIHRhcmdldD0iYWxsIi8+Ci0gICAgICAgIDxhbnQgZGlyPSJqc3BDb25maWdNb2RpZmljYXRpb25UZXN0SW50ZXJ2YWwiIHRhcmdldD0iYWxsIi8+ICAgICAgICAKKyAgICAgICAgPGFudCBkaXI9ImpzcENvbmZpZ01vZGlmaWNhdGlvblRlc3RJbnRlcnZhbCIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9ImpzcENvbmZpZ1VuZGVjbGFyZWROUyIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9ImpzcENvbmZpZ1VzZVByZWNvbXBpbGVkIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0ianNwQ29uZmlnVXNlUHJlY29tcGlsZWQyIiB0YXJnZXQ9ImFsbCIvPgpAQCAtODEsMTUgKzgxLDE1IEBACiAgICAgICAgIDxhbnQgZGlyPSJqc3BOdWxsRnJhZ21lbnQiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxhbnQgZGlyPSJqc3BQb3VuZFN5bnRheCIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9ImpzcFByZWNvbXBpbGVDb25zaWRlckRvbWFpbkxpYkphckZpbGVzQW5kQ2xhc3NlcyIgdGFyZ2V0PSJhbGwiLz4KLSAgICAgICAgPGFudCBkaXI9ImpzcFByZWNvbXBpbGVEZXBsb3lEYXNoRGFzaExpYnJhcmllcyIgdGFyZ2V0PSJhbGwiLz4gICAgCisgICAgICAgIDxhbnQgZGlyPSJqc3BQcmVjb21waWxlRGVwbG95RGFzaERhc2hMaWJyYXJpZXMiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxhbnQgZGlyPSJqc3BQcmVjb21waWxlSWdub3JlRnJhZ21lbnRFcnJvcnMiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxhbnQgZGlyPSJqc3BSZWxvYWRHZW5lcmF0ZWRTZXJ2bGV0SWZVcGRhdGVkIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0ianNwUmVzb3VyY2VJbmplY3Rpb25Db250ZXh0TGlzdGVuZXIiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxhbnQgZGlyPSJqc3BSZXNvdXJjZUluamVjdGlvblNpbXBsZVRhZ0hhbmRsZXIiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxhbnQgZGlyPSJqc3BSZXNvdXJjZUluamVjdGlvblRhZ0hhbmRsZXIiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxhbnQgZGlyPSJqc3BSZXNvdXJjZUluamVjdGlvblRhZ0hhbmRsZXJQb29saW5nRGlzYWJsZWQiIHRhcmdldD0iYWxsIi8+Ci0gICAgICAgIDxhbnQgZGlyPSJqc3BSdW50aW1lQ29tcGlsZUNvbnNpZGVyRG9tYWluTGliSmFyRmlsZXNBbmRDbGFzc2VzIiB0YXJnZXQ9ImFsbCIvPiAgCi0gICAgICAgIDxhbnQgZGlyPSJqc3BSdW50aW1lRGVwbG95RGFzaERhc2hMaWJyYXJpZXMiIHRhcmdldD0iYWxsIi8+ICAKKyAgICAgICAgPGFudCBkaXI9ImpzcFJ1bnRpbWVDb21waWxlQ29uc2lkZXJEb21haW5MaWJKYXJGaWxlc0FuZENsYXNzZXMiIHRhcmdldD0iYWxsIi8+CisgICAgICAgIDxhbnQgZGlyPSJqc3BSdW50aW1lRGVwbG95RGFzaERhc2hMaWJyYXJpZXMiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxhbnQgZGlyPSJqc3BTY3JpcHRsZXNzVGFnQm9keUpzcERvY3VtZW50IiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0ianNwU2NyaXB0bGV0QWZ0ZXJTY3JpcHRsZXNzVGFnIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0ianNwU2NyaXB0bGV0RGVjbE5lc3RlZEluQ3VzdG9tQWN0aW9uIiB0YXJnZXQ9ImFsbCIvPgpAQCAtMTQ1LDcgKzE0NSw3IEBACiAgICAgICAgIDxhbnQgZGlyPSJjYWNoZUZpbHRlck1hcHBpbmdEaXNwYXRjaGVyIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0iY2FjaGVIZWxwZXJSZWYiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxhbnQgZGlyPSJjb250ZW50bGVuZ3RoIiB0YXJnZXQ9ImFsbCIvPgotICAgICAgICA8YW50IGRpcj0iY29va2llUHJvcGVydGllc1N1bldlYlhtbCIgdGFyZ2V0PSJhbGwiLz4gIAorICAgICAgICA8YW50IGRpcj0iY29va2llUHJvcGVydGllc1N1bldlYlhtbCIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9ImRlZmF1bHRDaGFyc2V0IiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0iZGlyTGlzdGluZyIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9ImRlZmF1bHRTZXJ2bGV0V2l0aFN1YmRpcmVjdG9yeU1hcHBpbmciIHRhcmdldD0iYWxsIi8+CkBAIC0xNTMsOCArMTUzLDggQEAKICAgICAgICAgPGFudCBkaXI9ImVycm9yUGFnZUV4Y2VwdGlvblR5cGVXcmFwcGVyIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0iZXJyb3JQYWdlSGFuZGxpbmdGb3JFcnJvciIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9InNlcnZsZXRJbml0QmVmb3JlR2V0U2VydmxldENvbmZpZyIgdGFyZ2V0PSJhbGwiLz4KLSAgICAgICAgPGFudCBkaXI9Imxpc3RlbmVyRmlsdGVyU2VydmxldEluaXQiIHRhcmdldD0iYWxsIi8+ICAKLSAgICAgICAgPGFudCBkaXI9ImZpbHRlck11bHRpcGxlSW5pdCIgdGFyZ2V0PSJhbGwiLz4gIAorICAgICAgICA8YW50IGRpcj0ibGlzdGVuZXJGaWx0ZXJTZXJ2bGV0SW5pdCIgdGFyZ2V0PSJhbGwiLz4KKyAgICAgICAgPGFudCBkaXI9ImZpbHRlck11bHRpcGxlSW5pdCIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9ImZpbHRlclVSSU1hcHBpbmciIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxhbnQgZGlyPSJmb3J3YXJkV2l0aFF1ZXJ5U3RyaW5nIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0iZ2V0QXR0cmlidXRlQWZ0ZXJGb3J3YXJkIiB0YXJnZXQ9ImFsbCIvPgpAQCAtMjEwLDcgKzIxMCw3IEBACiAgICAgICAgIDxhbnQgZGlyPSJzZXJ2bGV0LTMuMC9hc3luY1RpbWVvdXROb0xpc3RlbmVyIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0ic2VydmxldC0zLjAvYXN5bmNEZWxheURpc3BhdGNoQW5kQ29tcGxldGUiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxhbnQgZGlyPSJzZXJ2bGV0LTMuMC9kaXNwYXRjaEZvcndhcmRBc3luY0Rpc3BhdGNoIiB0YXJnZXQ9ImFsbCIvPgotICAgICAgICA8YW50IGRpcj0ic2VydmxldC0zLjAvY29va2llSHR0cE9ubHkiIHRhcmdldD0iYWxsIi8+ICAKKyAgICAgICAgPGFudCBkaXI9InNlcnZsZXQtMy4wL2Nvb2tpZUh0dHBPbmx5IiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0ic2VydmxldC0zLjAvZGVmYXVsdEVycm9yUGFnZSIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9InNlcnZsZXQtMy4wL2phdmF4U2VydmxldENvbnRleHRPcmRlcmVkTGlicyIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9InNlcnZsZXQtMy4wL211bHRpV2ViRnJhZ21lbnRzIiB0YXJnZXQ9ImFsbCIvPgpAQCAtMzA2LDkgKzMwNiw5IEBACiAgICAgICAgIDxhbnQgZGlyPSJzZXNzaW9uU2V0TWF4SW5hY3RpdmVJbnRlcnZhbEV4cGlyZSIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9InNlc3Npb25TZXRNYXhJbmFjdGl2ZUludGVydmFsVG9aZXJvQW5kSW52YWxpZGF0ZSIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9InNldE11bHRpVmFsdWVkUmVzcG9uc2VIZWFkZXIiIHRhcmdldD0iYWxsIi8+Ci0gICAgICAgIDxhbnQgZGlyPSJzdGFuZGFsb25ld2FyIiB0YXJnZXQ9ImFsbCIvPiAgCi0gICAgICAgIDxhbnQgZGlyPSJzZXNzaW9uV2l0aG91dENvb2tpZSIgdGFyZ2V0PSJhbGwiLz4gIAotICAgICAgICA8YW50IGRpcj0iY3JlYXRlU2Vzc2lvbkluU2VydmxldFJlcXVlc3RMaXN0ZW5lciIgdGFyZ2V0PSJhbGwiLz4gIAorICAgICAgICA8YW50IGRpcj0ic3RhbmRhbG9uZXdhciIgdGFyZ2V0PSJhbGwiLz4KKyAgICAgICAgPGFudCBkaXI9InNlc3Npb25XaXRob3V0Q29va2llIiB0YXJnZXQ9ImFsbCIvPgorICAgICAgICA8YW50IGRpcj0iY3JlYXRlU2Vzc2lvbkluU2VydmxldFJlcXVlc3RMaXN0ZW5lciIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9InNlcnZsZXQtMy4xL25ldHdvcmtQYXRoUmVmZXJlbmNlIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0ic2VydmxldC0zLjEvbm9uQmxvY2tpbmdPdXRwdXQiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxhbnQgZGlyPSJzZXJ2bGV0LTMuMS9ub25CbG9ja2luZ0lucHV0IiB0YXJnZXQ9ImFsbCIvPgpAQCAtMzU1LDEzICszNTUsMTMgQEAKICAgICAgICAgPGFudCBkaXI9ImNvbnRleHRQYXRoWG1sQ29uZmlnIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0iY29udGV4dFJvb3QiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxhbnQgZGlyPSJjb250ZXh0VmFsdmVTZXRSZXF1ZXN0ZWRTZXNzaW9uQ29va2llUGF0aCIgdGFyZ2V0PSJhbGwiLz4KLSAgICAgICAgPGFudCBkaXI9ImNvbnRleHRYbWxDb25maWciIHRhcmdldD0iYWxsIi8+IAorICAgICAgICA8YW50IGRpcj0iY29udGV4dFhtbENvbmZpZyIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9ImNvbnRleHRYbWxMaWZlY3ljbGVMaXN0ZW5lciIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9ImNvbnRleHRYbWxMaWZlY3ljbGVMaXN0ZW5lckdsb2JhbCIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9ImNvbnRleHRYbWxSZW1vdGVIb3N0VmFsdmUiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxhbnQgZGlyPSJjb29raWVWYWx1ZVdpdGhFcXVhbHMiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxhbnQgZGlyPSJjb29raWVWYWx1ZVdpdGhTcGFjZXMiIHRhcmdldD0iYWxsIi8+Ci0gICAgICAgIDxhbnQgZGlyPSJjcm9zc0NvbnRleHREaXNwYXRjaExvbmdlc3RDb250ZXh0Um9vdE1hdGNoIiB0YXJnZXQ9ImFsbCIvPiAKKyAgICAgICAgPGFudCBkaXI9ImNyb3NzQ29udGV4dERpc3BhdGNoTG9uZ2VzdENvbnRleHRSb290TWF0Y2giIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxhbnQgZGlyPSJkZWxlZ2F0ZSIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9ImRpc2FibGVEZWZhdWx0RXJyb3JQYWdlIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0iZW1wdHlDb250ZXh0Um9vdCIgdGFyZ2V0PSJhbGwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYWNoZUNvbnRyb2xSZXNwb25zZUhlYWRlcnMvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NhY2hlQ29udHJvbFJlc3BvbnNlSGVhZGVycy9XZWJUZXN0LmphdmEKaW5kZXggZWNhNjQxZi4uNzA4ODhmOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NhY2hlQ29udHJvbFJlc3BvbnNlSGVhZGVycy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NhY2hlQ29udHJvbFJlc3BvbnNlSGVhZGVycy9XZWJUZXN0LmphdmEKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgNjE3NTY0MiIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTUyLDggKzUyLDggQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlSnNwKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQuIik7CkBAIC02MywxNCArNjMsMTQgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlSnNwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgICAKKwogICAgICAgICBTb2NrZXQgc29jayA9IG5ldyBTb2NrZXQoaG9zdCwgbmV3IEludGVnZXIocG9ydCkuaW50VmFsdWUoKSk7CiAgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IHNvY2suZ2V0T3V0cHV0U3RyZWFtKCk7CiAgICAgICAgIFN0cmluZyBnZXQgPSAiR0VUICIgKyBjb250ZXh0Um9vdCArICIvanNwL3Rlc3QuanNwIiArICIgSFRUUC8xLjBcbiI7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihnZXQpOwogICAgICAgICBvcy53cml0ZShnZXQuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gc29jay5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBiaXMgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYWNoZUNvbnRyb2xSZXNwb25zZUhlYWRlcnMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYWNoZUNvbnRyb2xSZXNwb25zZUhlYWRlcnMvYnVpbGQucHJvcGVydGllcwppbmRleCA5OWIwYmUxLi5lZTM2ZGYzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2FjaGVDb250cm9sUmVzcG9uc2VIZWFkZXJzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NhY2hlQ29udHJvbFJlc3BvbnNlSGVhZGVycy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWNhY2hlLWNvbnRyb2wtcmVzcG9uc2UtaGVhZGVycyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NhY2hlQ29udHJvbFJlc3BvbnNlSGVhZGVycy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2FjaGVDb250cm9sUmVzcG9uc2VIZWFkZXJzL2J1aWxkLnhtbAppbmRleCA0MzE0NzNmLi5hZjI4ZGU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2FjaGVDb250cm9sUmVzcG9uc2VIZWFkZXJzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2FjaGVDb250cm9sUmVzcG9uc2VIZWFkZXJzL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMTYgKzQ0LDE2IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiIC8+CkBAIC03NSw3ICs3NSw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTg3LDEwICs4NywxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYWNoZUZpbHRlck1hcHBpbmdEaXNwYXRjaGVyL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYWNoZUZpbHRlck1hcHBpbmdEaXNwYXRjaGVyL1dlYlRlc3QuamF2YQppbmRleCBhYWFjOTQ5Li4xODU4MDhjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2FjaGVGaWx0ZXJNYXBwaW5nRGlzcGF0Y2hlci9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NhY2hlRmlsdGVyTWFwcGluZ0Rpc3BhdGNoZXIvV2ViVGVzdC5qYXZhCkBAIC00OSw5ICs0OSw5IEBACiAgICAgICAgICAqIGJvZHkuCiAgICAgICAgICAqIENvdW50ZXIgaW4gL2Rpc3BhdGNoVG8gZ2V0cyBpbmNyZW1lbnRlZC4KICAgICAgICAgICovCi0gICAgICAgIHN1Y2Nlc3MgPSBkb1Rlc3QoImh0dHA6Ly8iICsgaG9zdFBvcnRSb290ICsgIi9kaXNwYXRjaFRvIiwgCisgICAgICAgIHN1Y2Nlc3MgPSBkb1Rlc3QoImh0dHA6Ly8iICsgaG9zdFBvcnRSb290ICsgIi9kaXNwYXRjaFRvIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAiUkVTUE9OU0UtMCIpOwotICAgICAgICAKKwogICAgICAgICBpZiAoc3VjY2VzcykgewogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIEFjY2VzcyAvZGlzcGF0Y2hUbyBkaXJlY3RseSwgZXhwZWN0ICJSRVNQT05TRS0xIiBpbiByZXNwb25zZQpAQCAtMTE0LDcgKzExNCw3IEBACiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIHN1Y2Nlc3MgPSBkb1Rlc3QoImh0dHA6Ly8iICsgaG9zdFBvcnRSb290ICsgIi9kaXNwYXRjaEZyb20/YWN0aW9uPWluY2x1ZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUkVTUE9OU0UtNCIpOwotICAgICAgICB9ICAgICAgICAKKyAgICAgICAgfQogCiAgICAgICAgIGlmIChzdWNjZXNzKSB7CiAgICAgICAgICAgICAvKgpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAgICAgICAgICAgICBjb25uLmNvbm5lY3QoKTsKIAogICAgICAgICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm4uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgeyAKKyAgICAgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZSBjb2RlLiBFeHBlY3RlZDogMjAwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIHJlY2VpdmVkOiAiICsgcmVzcG9uc2VDb2RlKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2FjaGVGaWx0ZXJNYXBwaW5nRGlzcGF0Y2hlci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NhY2hlRmlsdGVyTWFwcGluZ0Rpc3BhdGNoZXIvYnVpbGQucHJvcGVydGllcwppbmRleCBjYTQ0NGM1Li5jYjdiNjIzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2FjaGVGaWx0ZXJNYXBwaW5nRGlzcGF0Y2hlci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYWNoZUZpbHRlck1hcHBpbmdEaXNwYXRjaGVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tY2FjaGUtZmlsdGVyLW1hcHBpbmctZGlzcGF0Y2hlciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NhY2hlRmlsdGVyTWFwcGluZ0Rpc3BhdGNoZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NhY2hlRmlsdGVyTWFwcGluZ0Rpc3BhdGNoZXIvYnVpbGQueG1sCmluZGV4IDAwZmRhZDMuLmMzOTc3NmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYWNoZUZpbHRlck1hcHBpbmdEaXNwYXRjaGVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2FjaGVGaWx0ZXJNYXBwaW5nRGlzcGF0Y2hlci9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDIzICs0MiwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTcwLDEwICs3MCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYWNoZUZpbHRlck1hcHBpbmdEaXNwYXRjaGVyL2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2FjaGVGaWx0ZXJNYXBwaW5nRGlzcGF0Y2hlci9kZXNjcmlwdG9yL3N1bi13ZWIueG1sCmluZGV4IDQ4YmI3ODcuLjc2ZTU2NjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYWNoZUZpbHRlck1hcHBpbmdEaXNwYXRjaGVyL2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NhY2hlRmlsdGVyTWFwcGluZ0Rpc3BhdGNoZXIvZGVzY3JpcHRvci9zdW4td2ViLnhtbApAQCAtMjcsNiArMjcsNiBAQAogICAgICAgPGRpc3BhdGNoZXI+Rk9SV0FSRDwvZGlzcGF0Y2hlcj4KICAgICAgIDxkaXNwYXRjaGVyPklOQ0xVREU8L2Rpc3BhdGNoZXI+CiAgICAgPC9jYWNoZS1tYXBwaW5nPgotICA8L2NhY2hlPiAKKyAgPC9jYWNoZT4KIAogPC9zdW4td2ViLWFwcD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYWNoZUhhbmcvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NhY2hlSGFuZy9XZWJUZXN0LmphdmEKaW5kZXggNjMzYWE2NC4uODM0ZGE1MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NhY2hlSGFuZy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NhY2hlSGFuZy9XZWJUZXN0LmphdmEKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBJVCAxMjg5MSwgMTczNzciKTsKQEAgLTYzLDggKzYzLDggQEAKIAogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IG51bGw7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gbnVsbDsKLSAgICAgICAKLSAgICAgICAgdHJ5IHsgICAgIAorCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQgKwogICAgICAgICAgICAgICAgIGNvbnRleHRSb290ICsgIi8iICsgcGF0aCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2FjaGVIYW5nL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2FjaGVIYW5nL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMzQ0NzhmYS4uZTViOGEwMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NhY2hlSGFuZy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYWNoZUhhbmcvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1jYWNoZS1oYW5nIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2FjaGVIYW5nL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYWNoZUhhbmcvYnVpbGQueG1sCmluZGV4IDdlOGNmODUuLjk0N2Q1YmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYWNoZUhhbmcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYWNoZUhhbmcvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgICA8ZGVsZXRlIGZpbGU9IldlYlRlc3QuY2xhc3MiLz4KICAgICAgIDxkZWxldGUgZmlsZT0iUmVwUnVuQ29uZi50eHQiLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwxOSArNDQsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgpAQCAtNzIsOSArNzIsOSBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYWNoZUhlbHBlclJlZi9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2FjaGVIZWxwZXJSZWYvV2ViVGVzdC5qYXZhCmluZGV4IDQ3MTBlYzAuLmExZjI2NTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYWNoZUhlbHBlclJlZi9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NhY2hlSGVscGVyUmVmL1dlYlRlc3QuamF2YQpAQCAtMzcsMjQgKzM3LDI0IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIENSIDYyNDA1MzkiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CiAgICAgICAgIHdlYlRlc3QuZG9UZXN0KCk7Ci0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgCi0gICAgICAgIHRyeSB7IAorCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL1Rlc3RTZXJ2bGV0Iik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogICAgICAgICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm4uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgeyAKKyAgICAgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJXcm9uZyByZXNwb25zZSBjb2RlLiBFeHBlY3RlZDogMjAwLCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgInJlY2VpdmVkOiAiICsgcmVzcG9uc2VDb2RlKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2FjaGVIZWxwZXJSZWYvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYWNoZUhlbHBlclJlZi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGUxN2I4MzQuLjc1OTk0YTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYWNoZUhlbHBlclJlZi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYWNoZUhlbHBlclJlZi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWNhY2hlLWhlbHBlci1yZWYiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYWNoZUhlbHBlclJlZi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2FjaGVIZWxwZXJSZWYvYnVpbGQueG1sCmluZGV4IDAwZmRhZDMuLmMzOTc3NmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYWNoZUhlbHBlclJlZi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NhY2hlSGVscGVyUmVmL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMjMgKzQyLDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzAsMTAgKzcwLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NhY2hlSGVscGVyUmVmL3NlcnZsZXQvaGVscGVycy9NeUNhY2hlSGVscGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2FjaGVIZWxwZXJSZWYvc2VydmxldC9oZWxwZXJzL015Q2FjaGVIZWxwZXIuamF2YQppbmRleCAxYzE4ZGIyLi5lNTdlMTdhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2FjaGVIZWxwZXJSZWYvc2VydmxldC9oZWxwZXJzL015Q2FjaGVIZWxwZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2FjaGVIZWxwZXJSZWYvc2VydmxldC9oZWxwZXJzL015Q2FjaGVIZWxwZXIuamF2YQpAQCAtMjksMjEgKzI5LDIxIEBACiBwdWJsaWMgY2xhc3MgTXlDYWNoZUhlbHBlciBpbXBsZW1lbnRzIENhY2hlSGVscGVyIHsKIAogICAgIC8vIFZhbHVlcyBpcyBpbml0aWFsaXplZCAgdG8gQ2FjaGVBYmxlCi0gICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGNhY2hlS2V5PSJteUtleSI7IAorICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBjYWNoZUtleT0ibXlLZXkiOwogICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNDYWNoZUFibGU9dHJ1ZTsKICAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzUmVmcmVzaE5lZWRlZD1mYWxzZTsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgdGltZU91dD0yMDsKLSAgCi0gICAgCisKKwogICAgIHB1YmxpYyB2b2lkIGluaXQgKFNlcnZsZXRDb250ZXh0IGNvbnRleHQsIE1hcCBwcm9wcykgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibXlDYWNoZUhlbHBlcjI6aW5pdCIpOwogICAgICAgICAvLyBOb3RoaW5nIHRvIGluaXRpYWxpemUKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibXlDYWNoZUhlbHBlcjI6ZXhpdCIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q2FjaGVLZXkoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm15Q2FjaGVIZWxwZXIyOmdldENhY2hlS2V5Iik7CiAgICAgICAgIFN0cmluZyBrZXkgPSByZXEuZ2V0UGFyYW1ldGVyKCJjYWNoZUtleSIpOwpAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICAgICAgLy8gSWYgdXNlciBkbyBub3QgZW50ZXIgYSBrZXksIHRoZSBkZWZhdWx0IHZhbHVlIGlzICJteUtleSIKICAgICAgICAgcmV0dXJuIGNhY2hlS2V5OwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBpbnQgZ2V0VGltZW91dChIdHRwU2VydmxldFJlcXVlc3QgcmVxKSB7CiAgICAgICAgIFN0cmluZyB0aW1lT3V0U3RyID0gbnVsbDsKICAgICAgICAgaW50IHRpbWUgPSAwOwpAQCAtNjYsNyArNjYsNyBAQAogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTnVtYmVyIEZvcm1hdCBFeGNlcHRpb24gT2NjdXJzOiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgbmZlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBOZWdhdGl2ZSB0aW1lIG91dCB2YWx1ZSB0cmVhdCBhcyAwIAorICAgICAgICAgICAgLy8gTmVnYXRpdmUgdGltZSBvdXQgdmFsdWUgdHJlYXQgYXMgMAogICAgICAgICAgICAgaWYgKHRpbWUgPiAwKQogICAgICAgICAgICAgICAgIHJldHVybiB0aW1lOwogICAgICAgICAgICAgZWxzZSByZXR1cm4gMDsKQEAgLTc0LDE4ICs3NCwxOCBAQAogICAgICAgICAvLyBpZiB1c2VyIGRvIG5vdCBlbnRlciB0aW1lIG91dCwgdXNlIGRlZmF1bHQgdGltZU91dCB2YWx1ZQogICAgICAgICBlbHNlIHJldHVybiB0aW1lT3V0OwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGlzQ2FjaGVhYmxlKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEpIHsKICAgICAgICAgU3RyaW5nIGlzQ2FjaGVBYmxlU3RyID0gbnVsbDsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJteUNhY2hlSGVscGVyMjppc0NhY2hlYWJsZSIpOwogICAgICAgICBpc0NhY2hlQWJsZVN0ciA9IChTdHJpbmcpcmVxLmdldFBhcmFtZXRlcigiaXNDYWNoZUFibGUiKTsKLSAgICAgICAgLy8gQ2hlY2sgaWYgaXNDYWNoZUFibGUgbnVsbCAKKyAgICAgICAgLy8gQ2hlY2sgaWYgaXNDYWNoZUFibGUgbnVsbAogICAgICAgICBpZiAoKGlzQ2FjaGVBYmxlU3RyICE9IG51bGwpCiAgICAgICAgICAgICAgICAgJiYgKGlzQ2FjaGVBYmxlU3RyLmNvbXBhcmVUbygiZmFsc2UiKSAhPSAwKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgZWxzZSByZXR1cm4gaXNDYWNoZUFibGU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gaXNSZWZyZXNoTmVlZGVkKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEpIHsKICAgICAgICAgU3RyaW5nIGlzUmVmcmVzaE5lZWRlZFN0ciA9IG51bGw7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibXlDYWNoZUhlbHBlcjI6aXNSZWZyZXNoTmVlZGVkIik7CkBAIC05NCw2ICs5NCw2IEBACiAgICAgICAgICAgICAgICAgJiYgKGlzUmVmcmVzaE5lZWRlZFN0ci5jb21wYXJlVG8oInRydWUiKSAhPTApKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGVsc2UgcmV0dXJuIGlzUmVmcmVzaE5lZWRlZDsKLSAgICB9ICAgCisgICAgfQogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2FjaGVIZWxwZXJSZWYvc2VydmxldC9zZXJ2bGV0cy9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NhY2hlSGVscGVyUmVmL3NlcnZsZXQvc2VydmxldHMvVGVzdFNlcnZsZXQuamF2YQppbmRleCAwMjZmMGIwLi43MDNmZWMxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2FjaGVIZWxwZXJSZWYvc2VydmxldC9zZXJ2bGV0cy9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYWNoZUhlbHBlclJlZi9zZXJ2bGV0L3NlcnZsZXRzL1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTIxLDkgKzIxLDkgQEAKIGltcG9ydCBqYWthcnRhLnNlcnZsZXQuaHR0cC4qOwogCiBwdWJsaWMgY2xhc3MgVGVzdFNlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlcykKICAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIC8vIERvIG5vdGhpbmcKLSAgICB9ICAgCisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Nhc2VTZW5zaXRpdmVIb3N0TWFwcGluZy9TZXJ2bGV0VGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Nhc2VTZW5zaXRpdmVIb3N0TWFwcGluZy9TZXJ2bGV0VGVzdC5qYXZhCmluZGV4IDM1YjhiNjEuLmNjMzliNzkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYXNlU2Vuc2l0aXZlSG9zdE1hcHBpbmcvU2VydmxldFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2FzZVNlbnNpdGl2ZUhvc3RNYXBwaW5nL1NlcnZsZXRUZXN0LmphdmEKQEAgLTI1LDcgKzI1LDcgQEAKIHB1YmxpYyBjbGFzcyBTZXJ2bGV0VGVzdCBleHRlbmRzIEh0dHBTZXJ2bGV0ewogCiAgICAgcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7CiAgICAgfQpAQCAtMzQsNyArMzQsNyBAQAogICAgICAgICBkb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgICAgICAgIAorICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYXNlU2Vuc2l0aXZlSG9zdE1hcHBpbmcvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYXNlU2Vuc2l0aXZlSG9zdE1hcHBpbmcvYnVpbGQucHJvcGVydGllcwppbmRleCA5OTg2YTIyLi4wYzQwNTVmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2FzZVNlbnNpdGl2ZUhvc3RNYXBwaW5nL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Nhc2VTZW5zaXRpdmVIb3N0TWFwcGluZy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMSArMTUsMTEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tY2FzZS1zZW5zaXRpdmUtaG9zdC1tYXBwaW5nIi8+CiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii8ke2FwcG5hbWV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2FzZVNlbnNpdGl2ZUhvc3RNYXBwaW5nL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYXNlU2Vuc2l0aXZlSG9zdE1hcHBpbmcvYnVpbGQueG1sCmluZGV4IDRjNGQ0ZGMuLjZjOTcxNGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYXNlU2Vuc2l0aXZlSG9zdE1hcHBpbmcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYXNlU2Vuc2l0aXZlSG9zdE1hcHBpbmcvYnVpbGQueG1sCkBAIC0zOCw3ICszOCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NiwxMCArNDYsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTU3LDE0ICs1NywxNCBAQAogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCi0gICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4gCisgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2FzZVNlbnNpdGl2ZUhvc3RNYXBwaW5nL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYXNlU2Vuc2l0aXZlSG9zdE1hcHBpbmcvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IGZlMjRhMGYuLmZmZDY2OGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYXNlU2Vuc2l0aXZlSG9zdE1hcHBpbmcvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jYXNlU2Vuc2l0aXZlSG9zdE1hcHBpbmcvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yNiw3ICsyNiw3IEBACiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAKICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jaGFuZ2VTZXNzaW9uSWRPbkF1dGhlbnRpY2F0aW9uL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jaGFuZ2VTZXNzaW9uSWRPbkF1dGhlbnRpY2F0aW9uL1dlYlRlc3QuamF2YQppbmRleCA2OTljZmFhLi45OTA5NmE1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2hhbmdlU2Vzc2lvbklkT25BdXRoZW50aWNhdGlvbi9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NoYW5nZVNlc3Npb25JZE9uQXV0aGVudGljYXRpb24vV2ViVGVzdC5qYXZhCkBAIC0yMywxMCArMjMsMTAgQEAKICAqIEZpeCBmb3IgQ1IgNjk0NzI5NgogICovCiBwdWJsaWMgY2xhc3MgV2ViVGVzdCB7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9OQU1FID0gImNoYW5nZS1zZXNzaW9uLWlkLW9uLWF1dGhlbnRpY2F0aW9uIjsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgRVhQRUNURURfQ09VTlQgPSAxOwotICAgIAorCiAgICAgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0PQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgU3RyaW5nIGNvbnRleHRSb290ID0gYXJnc1syXTsKIAogICAgICAgICBpbnQgcG9ydCA9IG5ldyBJbnRlZ2VyKHBvcnRTKS5pbnRWYWx1ZSgpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgU3RyaW5nIHJlc3VsdCA9IGdvR2V0KGhvc3QsIHBvcnQsIGNvbnRleHRSb290ICsgIi93ZWxjb21lLmpzcCIsCiAgICAgICAgICAgICAgICAgICAgbnVsbCwgZmFsc2UpOwpAQCAtNDcsMTIgKzQ3LDEyIEBACiAgICAgICAgICAgICBpZiAocmVzdWx0ICE9IG51bGwgJiYgcmVzdWx0Lmxlbmd0aCgpID4gMCkgewogICAgICAgICAgICAgICAgIHJlc3VsdDIgPSBnb0dldChob3N0LCBwb3J0LCBjb250ZXh0Um9vdCArICIvc2VjdXJlLmpzcCIsCiAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQsIHRydWUpOwotICAgICAgICAgICAgfSAKLSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLAogICAgICAgICAgICAgICAgICAgICAocmVzdWx0ICE9IG51bGwgJiYgcmVzdWx0Lmxlbmd0aCgpID4gMCAmJgogICAgICAgICAgICAgICAgICAgICByZXN1bHQyICE9IG51bGwgJiYgcmVzdWx0Mi5sZW5ndGgoKSA+IDAgJiYKLSAgICAgICAgICAgICAgICAgICAgIXJlc3VsdC5lcXVhbHMocmVzdWx0MikpID8gCisgICAgICAgICAgICAgICAgICAgICFyZXN1bHQuZXF1YWxzKHJlc3VsdDIpKSA/CiAgICAgICAgICAgICAgICAgICAgIHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7CiAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odC5nZXRNZXNzYWdlKCkpOwpAQCAtOTcsNyArOTcsNyBAQAogICAgICAgICAgICAgICAgIGxpbmVOdW0rKzsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGV4KXsKLSAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOyAgIAorICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJUZXN0IFVOUFJFRElDVEVELUZBSUxVUkUiKTsKICAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICB0cnkgewpAQCAtMTE4LDUgKzExOCw1IEBACiAgICAgICAgIH0KIAogICAgfQotICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NoYW5nZVNlc3Npb25JZE9uQXV0aGVudGljYXRpb24vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jaGFuZ2VTZXNzaW9uSWRPbkF1dGhlbnRpY2F0aW9uL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNTE2NzBmMS4uOWIyMTk3NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NoYW5nZVNlc3Npb25JZE9uQXV0aGVudGljYXRpb24vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2hhbmdlU2Vzc2lvbklkT25BdXRoZW50aWNhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMiArMTUsMTIgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tY2hhbmdlLXNlc3Npb24taWQtb24tYXV0aGVudGljYXRpb24iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWNoYW5nZS1zZXNzaW9uLWlkLW9uLWF1dGhlbnRpY2F0aW9uIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHQueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9jb250ZXh0LnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NoYW5nZVNlc3Npb25JZE9uQXV0aGVudGljYXRpb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NoYW5nZVNlc3Npb25JZE9uQXV0aGVudGljYXRpb24vYnVpbGQueG1sCmluZGV4IDZmMDYyYjAuLjIxZDg4YjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jaGFuZ2VTZXNzaW9uSWRPbkF1dGhlbnRpY2F0aW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2hhbmdlU2Vzc2lvbklkT25BdXRoZW50aWNhdGlvbi9idWlsZC54bWwKQEAgLTM1LDcgKzM1LDcgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgICA8ZGVsZXRlIGZpbGU9IldlYlRlc3QuY2xhc3MiLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MywxMCArNDMsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjCkBAIC01NCw3ICs1NCw3IEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCkBAIC02NSwxMSArNjUsMTEgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJncm91cHMiIHZhbHVlPSJqYXZhZWUiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTgxLDEwICs4MSwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RvcmUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS11c2VyLWNvbW1vbiI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2h1bmtpbmdEaXNhYmxlZC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2h1bmtpbmdEaXNhYmxlZC9XZWJUZXN0LmphdmEKaW5kZXggZjhmY2UxMy4uZmI5MmIwOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NodW5raW5nRGlzYWJsZWQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jaHVua2luZ0Rpc2FibGVkL1dlYlRlc3QuamF2YQpAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciA0ODYxOTMzIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTQsOCArNTQsOCBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2VTZXJ2bGV0KCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQuIik7CkBAIC02NSw3ICs2NSw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZVNlcnZsZXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU29ja2V0IHNvY2sgPSBuZXcgU29ja2V0KGhvc3QsIG5ldyBJbnRlZ2VyKHBvcnQpLmludFZhbHVlKCkpOwogICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSBzb2NrLmdldE91dHB1dFN0cmVhbSgpOwogCkBAIC03Niw3ICs3Niw3IEBACiAgICAgICAgIG9zLndyaXRlKGhvc3RIZWFkZXIuZ2V0Qnl0ZXMoKSk7CiAKICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJpcyA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NodW5raW5nRGlzYWJsZWQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jaHVua2luZ0Rpc2FibGVkL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOWQ3YzFkOS4uMWI5ZTBiNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NodW5raW5nRGlzYWJsZWQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2h1bmtpbmdEaXNhYmxlZC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWNodW5raW5nLWRpc2FibGVkIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2h1bmtpbmdEaXNhYmxlZC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2h1bmtpbmdEaXNhYmxlZC9idWlsZC54bWwKaW5kZXggZWIzZGM2OC4uOGM4MmU2OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NodW5raW5nRGlzYWJsZWQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jaHVua2luZ0Rpc2FibGVkL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMTYgKzQ0LDE2IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiIC8+CkBAIC02Nyw3ICs2Nyw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc5LDEwICs3OSwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RvcmUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2h1bmtpbmdEaXNhYmxlZC9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2h1bmtpbmdEaXNhYmxlZC9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggNGQ5ZDRhMC4uOThkMTY4NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NodW5raW5nRGlzYWJsZWQvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jaHVua2luZ0Rpc2FibGVkL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjcsNyArMjcsNyBAQAogICAgICAgICA8ZGlzcGxheS1uYW1lPlRlc3RTZXJ2bGV0PC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+VGVzdFNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+VGVzdFNlcnZsZXQ8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCisgICAgPC9zZXJ2bGV0PgogCiAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2h1bmtpbmdEaXNhYmxlZC9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2h1bmtpbmdEaXNhYmxlZC9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggNjAxM2I2OS4uMTk5MTBmMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NodW5raW5nRGlzYWJsZWQvc2VydmxldC9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jaHVua2luZ0Rpc2FibGVkL3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uIHsKIAogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXMuZ2V0V3JpdGVyKCk7Ci0gCisKICAgICAgICAgLyoKICAgICAgICAgICogQ2hlY2sgdG8gc2VlIGlmIHdlIGFyZSBpbiBTRS9FRSwgYnkgdHJ5aW5nIHRvIGxvYWQgYSBjbGFzcyB0aGF0J3MKICAgICAgICAgICogYXZhaWxhYmxlIG9ubHkgaW4gU0UvRUUuCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICJjb20uc3VuLmVudGVycHJpc2UuZWUud2ViLmF1dGhlbnRpY2F0b3IuSEFTaW5nbGVTaWduT24iKTsKICAgICAgICAgICAgIC8vIEVFCiAgICAgICAgICAgICBvdXQucHJpbnRsbigiVGhpcyBpcyBFRSIpOwotCX0gY2F0Y2ggKENsYXNzTm90Rm91bmRFeGNlcHRpb24gZSkgeworICAgIH0gY2F0Y2ggKENsYXNzTm90Rm91bmRFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgLy8gUEUKICAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaTxCVUZGRVJfU0laRTsgaSsrKSB7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50KCJYIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2xhc3NQYXRoTWFuaWZlc3RBdHRyaWJ1dGUvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NsYXNzUGF0aE1hbmlmZXN0QXR0cmlidXRlL1dlYlRlc3QuamF2YQppbmRleCAxMTk1ODg3Li5kZjc5NWYwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2xhc3NQYXRoTWFuaWZlc3RBdHRyaWJ1dGUvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jbGFzc1BhdGhNYW5pZmVzdEF0dHJpYnV0ZS9XZWJUZXN0LmphdmEKQEAgLTUwLDcgKzUwLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBHbGFzc0Zpc2ggSVQgMTE0MTcgYW5kIElUIDExNDE5Iik7CkBAIC02NSwxMSArNjUsMTEgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmcganNwKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QgKyBqc3ApOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jbGFzc1BhdGhNYW5pZmVzdEF0dHJpYnV0ZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NsYXNzUGF0aE1hbmlmZXN0QXR0cmlidXRlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNmE4YzBiMC4uYTMxOWY5YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NsYXNzUGF0aE1hbmlmZXN0QXR0cmlidXRlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NsYXNzUGF0aE1hbmlmZXN0QXR0cmlidXRlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tY2xhc3MtcGF0aC1tYW5pZmVzdC1hdHRyaWJ1dGUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jbGFzc1BhdGhNYW5pZmVzdEF0dHJpYnV0ZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2xhc3NQYXRoTWFuaWZlc3RBdHRyaWJ1dGUvYnVpbGQueG1sCmluZGV4IGIxYjU1ZWYuLmJhZWQ0ZjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jbGFzc1BhdGhNYW5pZmVzdEF0dHJpYnV0ZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NsYXNzUGF0aE1hbmlmZXN0QXR0cmlidXRlL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDYsMjMgKzQ2LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NsYXNzUGF0aE1hbmlmZXN0QXR0cmlidXRlUHJlY29tcGlsZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2xhc3NQYXRoTWFuaWZlc3RBdHRyaWJ1dGVQcmVjb21waWxlL1dlYlRlc3QuamF2YQppbmRleCA5ZWQ5NTRkLi4wNzg0ZWJiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2xhc3NQYXRoTWFuaWZlc3RBdHRyaWJ1dGVQcmVjb21waWxlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2xhc3NQYXRoTWFuaWZlc3RBdHRyaWJ1dGVQcmVjb21waWxlL1dlYlRlc3QuamF2YQpAQCAtNTAsNyArNTAsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEdsYXNzRmlzaCBJVCAxMTQxNyBhbmQgSVQgMTE0MTkiKTsKQEAgLTY1LDExICs2NSwxMSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZyBqc3ApIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdCArIGpzcCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NsYXNzUGF0aE1hbmlmZXN0QXR0cmlidXRlUHJlY29tcGlsZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NsYXNzUGF0aE1hbmlmZXN0QXR0cmlidXRlUHJlY29tcGlsZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGYyNWI1OGEuLmQzNDBiM2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jbGFzc1BhdGhNYW5pZmVzdEF0dHJpYnV0ZVByZWNvbXBpbGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2xhc3NQYXRoTWFuaWZlc3RBdHRyaWJ1dGVQcmVjb21waWxlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tY2xhc3MtcGF0aC1tYW5pZmVzdC1hdHRyaWJ1dGUtcHJlY29tcGlsZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NsYXNzUGF0aE1hbmlmZXN0QXR0cmlidXRlUHJlY29tcGlsZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2xhc3NQYXRoTWFuaWZlc3RBdHRyaWJ1dGVQcmVjb21waWxlL2J1aWxkLnhtbAppbmRleCBiMWI1NWVmLi5iYWVkNGY5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2xhc3NQYXRoTWFuaWZlc3RBdHRyaWJ1dGVQcmVjb21waWxlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2xhc3NQYXRoTWFuaWZlc3RBdHRyaWJ1dGVQcmVjb21waWxlL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDYsMjMgKzQ2LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NsYXNzbG9hZGVyR2V0UmVzb3VyY2VKYXJGaWxlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jbGFzc2xvYWRlckdldFJlc291cmNlSmFyRmlsZS9XZWJUZXN0LmphdmEKaW5kZXggN2Y4MWZmNS4uMDhjZGRhMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NsYXNzbG9hZGVyR2V0UmVzb3VyY2VKYXJGaWxlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2xhc3Nsb2FkZXJHZXRSZXNvdXJjZUphckZpbGUvV2ViVGVzdC5qYXZhCkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgNjQ5NTk5MSIpOwpAQCAtNTQsMTEgKzU0LDExIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QgKyAiL3Rlc3QuanNwIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKIApAQCAtNzEsNiArNzEsNiBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwotICAgICAgICB9ICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jbGFzc2xvYWRlckdldFJlc291cmNlSmFyRmlsZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NsYXNzbG9hZGVyR2V0UmVzb3VyY2VKYXJGaWxlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNGYyMzZiNi4uMWIzNDNhZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NsYXNzbG9hZGVyR2V0UmVzb3VyY2VKYXJGaWxlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NsYXNzbG9hZGVyR2V0UmVzb3VyY2VKYXJGaWxlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tY2xhc3Nsb2FkZXItZ2V0LXJlc291cmNlLWphci1maWxlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2xhc3Nsb2FkZXJHZXRSZXNvdXJjZUphckZpbGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NsYXNzbG9hZGVyR2V0UmVzb3VyY2VKYXJGaWxlL2J1aWxkLnhtbAppbmRleCAwMGZkYWQzLi5jMzk3NzZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2xhc3Nsb2FkZXJHZXRSZXNvdXJjZUphckZpbGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jbGFzc2xvYWRlckdldFJlc291cmNlSmFyRmlsZS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDIzICs0MiwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTcwLDEwICs3MCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jbGFzc2xvYWRlckdldFJlc291cmNlSmFyRmlsZS9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2xhc3Nsb2FkZXJHZXRSZXNvdXJjZUphckZpbGUvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IGI3YzExYjAuLmM3ODRlODEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jbGFzc2xvYWRlckdldFJlc291cmNlSmFyRmlsZS9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NsYXNzbG9hZGVyR2V0UmVzb3VyY2VKYXJGaWxlL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMTgsNiArMTgsNiBAQAogLS0+CiAKIDx3ZWItYXBwIHZlcnNpb249IjIuNSIgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+Ci0gICAgIAorCiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jbGFzc2xvYWRlckdldFJlc291cmNlSmFyRmlsZS9zZXJ2bGV0L3Rlc3QvRHVtbXkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jbGFzc2xvYWRlckdldFJlc291cmNlSmFyRmlsZS9zZXJ2bGV0L3Rlc3QvRHVtbXkuamF2YQppbmRleCBiZGI5NjVkLi5lYzFhZDk3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2xhc3Nsb2FkZXJHZXRSZXNvdXJjZUphckZpbGUvc2VydmxldC90ZXN0L0R1bW15LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NsYXNzbG9hZGVyR2V0UmVzb3VyY2VKYXJGaWxlL3NlcnZsZXQvdGVzdC9EdW1teS5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIC8qCiAgKiBEdW1teSBjbGFzcyB0byBtYWtlIHN1cmUgdGhlIHdhciBoYXMgV0VCLUlORi9jbGFzc2VzIGZvbGRlci4gVGhlIHRlc3QuanNwCi0gKiBpbiB0aGlzIHdlYiBhcHBsaWNhdGlvbiBkb2VzIGdldFJlc291cmNlIHdpdGggYSByZXNvdXJjZSBwYXRoIHRoYXQgaXMgCisgKiBpbiB0aGlzIHdlYiBhcHBsaWNhdGlvbiBkb2VzIGdldFJlc291cmNlIHdpdGggYSByZXNvdXJjZSBwYXRoIHRoYXQgaXMKICAqIHJlbGF0aXZlIHRvIFdFQi1JTkYvY2xhc3NlcyBmb2xkZXIuCiAgKi8KIHB1YmxpYyBjbGFzcyBEdW1teSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2xhc3Nsb2FkZXJHZXRSZXNvdXJjZXNEZWxlZ2F0ZUZhbHNlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jbGFzc2xvYWRlckdldFJlc291cmNlc0RlbGVnYXRlRmFsc2UvV2ViVGVzdC5qYXZhCmluZGV4IGZiYWNjOTkuLmRkYmVmZDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jbGFzc2xvYWRlckdldFJlc291cmNlc0RlbGVnYXRlRmFsc2UvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jbGFzc2xvYWRlckdldFJlc291cmNlc0RlbGVnYXRlRmFsc2UvV2ViVGVzdC5qYXZhCkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgR2xhc3NGaXNoIElzc3VlIDY1NjgiKTsKQEAgLTU0LDExICs1NCwxMSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArCiAgICAgICAgICAgICBjb250ZXh0Um9vdCArICIvdGVzdCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CkBAIC03Miw2ICs3Miw2IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7Ci0gICAgICAgIH0gIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NsYXNzbG9hZGVyR2V0UmVzb3VyY2VzRGVsZWdhdGVGYWxzZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NsYXNzbG9hZGVyR2V0UmVzb3VyY2VzRGVsZWdhdGVGYWxzZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDcxMDIzNmYuLmM0YzIxNjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jbGFzc2xvYWRlckdldFJlc291cmNlc0RlbGVnYXRlRmFsc2UvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2xhc3Nsb2FkZXJHZXRSZXNvdXJjZXNEZWxlZ2F0ZUZhbHNlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tY2xhc3Nsb2FkZXItZ2V0LXJlc291cmNlcy1kZWxlZ2F0ZS1mYWxzZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NsYXNzbG9hZGVyR2V0UmVzb3VyY2VzRGVsZWdhdGVGYWxzZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2xhc3Nsb2FkZXJHZXRSZXNvdXJjZXNEZWxlZ2F0ZUZhbHNlL2J1aWxkLnhtbAppbmRleCA0MzQ1YzBkLi5kODQzZDY3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2xhc3Nsb2FkZXJHZXRSZXNvdXJjZXNEZWxlZ2F0ZUZhbHNlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2xhc3Nsb2FkZXJHZXRSZXNvdXJjZXNEZWxlZ2F0ZUZhbHNlL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMjIgKzQ0LDIyIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTcxLDEwICs3MSwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29weVJlc291cmNlcyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NsYXNzbG9hZGVyR2V0UmVzb3VyY2VzRGVsZWdhdGVGYWxzZS9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2xhc3Nsb2FkZXJHZXRSZXNvdXJjZXNEZWxlZ2F0ZUZhbHNlL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCBiMWM4NmMzLi5lYTY5YzQxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2xhc3Nsb2FkZXJHZXRSZXNvdXJjZXNEZWxlZ2F0ZUZhbHNlL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY2xhc3Nsb2FkZXJHZXRSZXNvdXJjZXNEZWxlZ2F0ZUZhbHNlL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjgsNiArMjgsNiBAQAogICAgICAgICA8c2VydmxldC1uYW1lPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vdGVzdDwvdXJsLXBhdHRlcm4+CiAgICAgPC9zZXJ2bGV0LW1hcHBpbmc+Ci0gICAgIAorCiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jbGFzc2xvYWRlckdldFJlc291cmNlc0RlbGVnYXRlRmFsc2Uvc2VydmxldC9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NsYXNzbG9hZGVyR2V0UmVzb3VyY2VzRGVsZWdhdGVGYWxzZS9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggYzIyZWZkYS4uMGFmMzVkYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NsYXNzbG9hZGVyR2V0UmVzb3VyY2VzRGVsZWdhdGVGYWxzZS9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NsYXNzbG9hZGVyR2V0UmVzb3VyY2VzRGVsZWdhdGVGYWxzZS9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTMyLDcgKzMyLDcgQEAKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgICAgIldyb25nIG51bWJlciBvZiByZXNvdXJjZSBVUkxzLCBleHBlY3RlZCAyIik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB1cmxzW2krK10gPSBlLm5leHRFbGVtZW50KCk7ICAgICAgICAgICAgCisgICAgICAgICAgICB1cmxzW2krK10gPSBlLm5leHRFbGVtZW50KCk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoaSAhPSAyKSB7CkBAIC01MSwxNCArNTEsMTQgQEAKICAgICAgICAgLyoKICAgICAgICAgICogU2luY2UgZGVsZWdhdGUgaXMgc2V0IHRvIGZhbHNlLCB3ZSBleHBlY3QgdGhlIGZpcnN0IFVSTCBpbiB0aGUKICAgICAgICAgICogcmV0dXJuZWQgZW51bToKLSAgICAgICAgICogCisgICAgICAgICAqCiAgICAgICAgICAqIGphcjpmaWxlOi9zcGFjZS9sdWVoZS93cy92My9kaXN0cmlidXRpb25zL3dlYi90YXJnZXQvZ2xhc3NmaXNoXAotCSAqICAgICAvZG9tYWlucy9kb21haW4xL2FwcGxpY2F0aW9uc1wKKyAgICAgKiAgICAgL2RvbWFpbnMvZG9tYWluMS9hcHBsaWNhdGlvbnNcCiAgICAgICAgICAqICAgICAvd2ViLWNsYXNzbG9hZGVyLWdldC1yZXNvdXJjZXMtZGVsZWdhdGUtZmFsc2Utd2ViL1dFQi1JTkYvbGliXAogICAgICAgICAgKiAgICAgL215dGVzdC5qYXIhL3Rlc3QudHh0Ci0gICAgICAgICAqIAorICAgICAgICAgKgogICAgICAgICAgKiB0byBiZSBsb25nZXIgdGhhbiB0aGUgc2Vjb25kOgotICAgICAgICAgKiAKKyAgICAgICAgICoKICAgICAgICAgICogamFyOmZpbGU6L3NwYWNlL2x1ZWhlL3dzL3YzL2Rpc3RyaWJ1dGlvbnMvd2ViL3RhcmdldC9nbGFzc2Zpc2hcCiAgICAgICAgICAqICAgICAvbGliL3Rlc3QuamFyIS90ZXN0LnR4dHwjXQogICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb21ldEVjaG8vV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbWV0RWNoby9XZWJUZXN0LmphdmEKaW5kZXggMGQ1NmQ5Yy4uNjAxNDdjYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbWV0RWNoby9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbWV0RWNoby9XZWJUZXN0LmphdmEKQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBjb21ldDogZWNobyIpOwpAQCAtMTI2LDcgKzEyNiw3IEBACiAgICAgICAgICAgICBpbnQgc3RhdHVzQ29kZSA9IHVybENvbm5lY3Rpb24uZ2V0UmVzcG9uc2VDb2RlKCk7CiAgICAgICAgICAgICBpZiAoSHR0cFVSTENvbm5lY3Rpb24uSFRUUF9PSyAhPSBzdGF0dXNDb2RlKSB7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiSW5jb3JyZWN0IHJldHVybiBjb2RlOiAiICsgc3RhdHVzQ29kZSk7Ci0gICAgICAgICAgICB9IAorICAgICAgICAgICAgfQogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBpZiAob3MgIT0gbnVsbCkgewpAQCAtMTc4LDcgKzE3OCw3IEBACiAgICAgICAgICAgICAgICAgbGlzdGVuTWVzc2FnZSA9IGJyLnJlYWRMaW5lKCk7CiAgICAgICAgICAgICAgICAgZW5kU2lnbmFsLmNvdW50RG93bigpOwogICAgICAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGV4KXsKLSAgICAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsgICAKKyAgICAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJUZXN0IFVOUFJFRElDVEVELUZBSUxVUkUiKTsKICAgICAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICAgICAgdHJ5IHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb21ldEVjaG8vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb21ldEVjaG8vYnVpbGQucHJvcGVydGllcwppbmRleCA0YjFkYTE3Li5jMDNhMWM5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29tZXRFY2hvL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbWV0RWNoby9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWNvbWV0LWVjaG8iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb21ldEVjaG8vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbWV0RWNoby9idWlsZC54bWwKaW5kZXggNzkzMWEwZi4uNGIzOTllMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbWV0RWNoby9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbWV0RWNoby9idWlsZC54bWwKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YmFzZWRpcn0iIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NywyMCArNDcsMjAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgICA8amF2YWMKICAgICAgICAgICAgIHNyY2Rpcj0iLiIKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9hcHBzZXJ2LXJ0LmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtODEsNyArODEsNyBAQAogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC05Niw3ICs5Niw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29tZXRFY2hvL3NlcnZsZXQvQ29tZXRFY2hvU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbWV0RWNoby9zZXJ2bGV0L0NvbWV0RWNob1NlcnZsZXQuamF2YQppbmRleCA5ODk2YzlkLi40NTg3OTQ4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29tZXRFY2hvL3NlcnZsZXQvQ29tZXRFY2hvU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb21ldEVjaG8vc2VydmxldC9Db21ldEVjaG9TZXJ2bGV0LmphdmEKQEAgLTgzLDcgKzgzLDcgQEAKICAgICAgICAgcmVzLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgcmVzLnNldEhlYWRlcigiQ2FjaGUtQ29udHJvbCIsICJwcml2YXRlIik7CiAgICAgICAgIHJlcy5zZXRIZWFkZXIoIlByYWdtYSIsICJuby1jYWNoZSIpOwotICAgICAgICAKKwogICAgICAgICBQcmludFdyaXRlciB3cml0ZXIgPSByZXMuZ2V0V3JpdGVyKCk7CiAgICAgICAgIENoYXRMaXN0bmVySGFuZGxlciBoYW5kbGVyID0gbmV3IENoYXRMaXN0bmVySGFuZGxlcigpOwogICAgICAgICBoYW5kbGVyLmF0dGFjaCh3cml0ZXIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbW1vbnNEaWdlc3RlckNsYXNzTm90Rm91bmRFeGNlcHRpb24vV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbW1vbnNEaWdlc3RlckNsYXNzTm90Rm91bmRFeGNlcHRpb24vV2ViVGVzdC5qYXZhCmluZGV4IDhmYTRlYmMuLjQ4MDQwODAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb21tb25zRGlnZXN0ZXJDbGFzc05vdEZvdW5kRXhjZXB0aW9uL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29tbW9uc0RpZ2VzdGVyQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbi9XZWJUZXN0LmphdmEKQEAgLTQyLDcgKzQyLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgNjMxNDkxMiIpOwogCkBAIC01OCw3ICs1OCw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiL1Rlc3RTZXJ2bGV0Iik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKQEAgLTc2LDcgKzc2LDcgQEAKICAgICAgICAgICAgIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogICAgICAgICAgICAgU3RyaW5nIGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpOwogICAgICAgICAgICAgaWYgKCFFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZmluYWxseSB7CkBAIC05NCw2ICs5NCw2IEBACiAgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHsKICAgICAgICAgICAgICAgICAvLyBpZ25vcmUKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb21tb25zRGlnZXN0ZXJDbGFzc05vdEZvdW5kRXhjZXB0aW9uL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29tbW9uc0RpZ2VzdGVyQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDY4MmJmNTIuLjBlZWZhYjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb21tb25zRGlnZXN0ZXJDbGFzc05vdEZvdW5kRXhjZXB0aW9uL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbW1vbnNEaWdlc3RlckNsYXNzTm90Rm91bmRFeGNlcHRpb24vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1jb21tb25zLWRpZ2VzdGVyLWNsYXNzLW5vdC1mb3VuZC1leGNlcHRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb21tb25zRGlnZXN0ZXJDbGFzc05vdEZvdW5kRXhjZXB0aW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb21tb25zRGlnZXN0ZXJDbGFzc05vdEZvdW5kRXhjZXB0aW9uL2J1aWxkLnhtbAppbmRleCBhYmViNmZlLi42MjEwOWQyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29tbW9uc0RpZ2VzdGVyQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbW1vbnNEaWdlc3RlckNsYXNzTm90Rm91bmRFeGNlcHRpb24vYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwxMCArNDQsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTU1LDE0ICs1NSwxNCBAQAogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29tbW9uc0xvZ2dpbmcvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbW1vbnNMb2dnaW5nL1dlYlRlc3QuamF2YQppbmRleCBjMDA3YjUxLi4xMTU4NjNhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29tbW9uc0xvZ2dpbmcvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb21tb25zTG9nZ2luZy9XZWJUZXN0LmphdmEKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgNjIyMDgxOCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ3LDggKzQ3LDggQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlU2VydmxldCgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVNUX05BTUUgKyAiIHRlc3QgZmFpbGVkLiIpOwpAQCAtNTgsNyArNTgsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2VTZXJ2bGV0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgICAgICAgICAgICAgICArICIvRnJvbSIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29tbW9uc0xvZ2dpbmcvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb21tb25zTG9nZ2luZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDRkMDBmOGQuLjk3ODI2MGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb21tb25zTG9nZ2luZy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb21tb25zTG9nZ2luZy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWNvbW1vbnMtbG9nZ2luZyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbW1vbnNMb2dnaW5nL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb21tb25zTG9nZ2luZy9idWlsZC54bWwKaW5kZXggM2YxZjhmNS4uOWI0ZTU0MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbW1vbnNMb2dnaW5nL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29tbW9uc0xvZ2dpbmcvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxMCArNDIsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTUzLDE0ICs1MywxNCBAQAogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MiwxMCArNzIsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29tbW9uc0xvZ2dpbmcvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbW1vbnNMb2dnaW5nL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCA2NmI5ODc1Li40MTc2N2E4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29tbW9uc0xvZ2dpbmcvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb21tb25zTG9nZ2luZy9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTQyLDYgKzQyLDYgQEAKICAgICAgICAgPHNlcnZsZXQtbmFtZT5Ubzwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L1RvPC91cmwtcGF0dGVybj4KICAgICA8L3NlcnZsZXQtbWFwcGluZz4KLSAgICAgCisKIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbW1vbnNMb2dnaW5nTG9jYWxBbmRHbG9iYWwvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbW1vbnNMb2dnaW5nTG9jYWxBbmRHbG9iYWwvV2ViVGVzdC5qYXZhCmluZGV4IDg5NmM0Y2IuLjc4NTYzYzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb21tb25zTG9nZ2luZ0xvY2FsQW5kR2xvYmFsL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29tbW9uc0xvZ2dpbmdMb2NhbEFuZEdsb2JhbC9XZWJUZXN0LmphdmEKQEAgLTQzLDcgKzQzLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBHbGFzc0Zpc2ggSXNzdWUgMjY5MiIpOwpAQCAtNTcsMTEgKzU3LDExIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL1Rlc3RTZXJ2bGV0Iik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKQEAgLTgwLDcgKzgwLDcgQEAKICAgICAgICAgICAgIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogICAgICAgICAgICAgU3RyaW5nIGxpbmUgPSBici5yZWFkTGluZSgpOwogICAgICAgICAgICAgaWYgKCFFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZmluYWxseSB7CkBAIC05OCw2ICs5OCw2IEBACiAgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHsKICAgICAgICAgICAgICAgICAvLyBpZ25vcmUKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb21tb25zTG9nZ2luZ0xvY2FsQW5kR2xvYmFsL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29tbW9uc0xvZ2dpbmdMb2NhbEFuZEdsb2JhbC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGFkMzI1YTIuLmE5NmE5NWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb21tb25zTG9nZ2luZ0xvY2FsQW5kR2xvYmFsL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbW1vbnNMb2dnaW5nTG9jYWxBbmRHbG9iYWwvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1jb21tb25zLWxvZ2dpbmctbG9jYWwtYW5kLWdsb2JhbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbW1vbnNMb2dnaW5nTG9jYWxBbmRHbG9iYWwvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbW1vbnNMb2dnaW5nTG9jYWxBbmRHbG9iYWwvYnVpbGQueG1sCmluZGV4IDQ2OWJhMzMuLjdjMzRkYzEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb21tb25zTG9nZ2luZ0xvY2FsQW5kR2xvYmFsL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29tbW9uc0xvZ2dpbmdMb2NhbEFuZEdsb2JhbC9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ2LDIzICs0NiwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29weVJlc291cmNlcyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbW1vbnNMb2dnaW5nTG9jYWxBbmRHbG9iYWwvbGliL3Rlc3QvTXlUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29tbW9uc0xvZ2dpbmdMb2NhbEFuZEdsb2JhbC9saWIvdGVzdC9NeVRlc3QuamF2YQppbmRleCA1NGNiMmMwLi4xNzc1ZWZlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29tbW9uc0xvZ2dpbmdMb2NhbEFuZEdsb2JhbC9saWIvdGVzdC9NeVRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29tbW9uc0xvZ2dpbmdMb2NhbEFuZEdsb2JhbC9saWIvdGVzdC9NeVRlc3QuamF2YQpAQCAtMjMsNyArMjMsNyBAQAogCiAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKICAgICAgICAgTG9nIGxvZyA9IExvZ0ZhY3RvcnkuZ2V0TG9nKE15VGVzdC5jbGFzcyk7Ci0JcmV0dXJuICJTVUNDRVNTIjsKKyAgICByZXR1cm4gIlNVQ0NFU1MiOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbW1vbnNMb2dnaW5nTG9jYWxBbmRHbG9iYWwvc2VydmxldC9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbW1vbnNMb2dnaW5nTG9jYWxBbmRHbG9iYWwvc2VydmxldC9UZXN0U2VydmxldC5qYXZhCmluZGV4IDg5NjRjMzYuLjFlNWNjMjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb21tb25zTG9nZ2luZ0xvY2FsQW5kR2xvYmFsL3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29tbW9uc0xvZ2dpbmdMb2NhbEFuZEdsb2JhbC9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTI2LDggKzI2LDggQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIE9iamVjdCBvID0gQ2xhc3MuZm9yTmFtZSgidGVzdC5NeVRlc3QiKS5uZXdJbnN0YW5jZSgpOwogICAgICAgICAgICAgcmVzLmdldFdyaXRlcigpLnByaW50bG4oby50b1N0cmluZygpKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlKTsKLQl9CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZSk7CisgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZW50bGVuZ3RoL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZW50bGVuZ3RoL1dlYlRlc3QuamF2YQppbmRleCBiODVkMmE5Li42YzNjODY5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGVudGxlbmd0aC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRlbnRsZW5ndGgvV2ViVGVzdC5qYXZhCkBAIC0yNiw4ICsyNiw4IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgVVJMQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKICAgICBwcml2YXRlIHN0YXRpYyBVUkwgdXJsOwogICAgIHByaXZhdGUgc3RhdGljIE9iamVjdE91dHB1dFN0cmVhbSBvYmplY3RXcml0ZXIgPSBudWxsOwotICAgIHByaXZhdGUgc3RhdGljIE9iamVjdElucHV0U3RyZWFtIG9iamVjdFJlYWRlciA9IG51bGw7ICAKLSAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBPYmplY3RJbnB1dFN0cmVhbSBvYmplY3RSZWFkZXIgPSBudWxsOworCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgdGhyb3dzIEV4Y2VwdGlvbnsKICAgICAgICAgU3RyaW5nIGhvc3QgPSBhcmdzWzBdOwogICAgICAgICBTdHJpbmcgcG9ydCA9IGFyZ3NbMV07CkBAIC0zNSw3ICszNSw3IEBACiAKICAgICAgICAgdHJ5ewogICAgICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiU3RhbmRhbG9uZSBTZXJ2bGV0L0ZpbHRlciB3YXIgdGVzdCIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUnVubmluZyB0ZXN0Iik7CiAgICAgICAgICAgICB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290ICsgIi9TZXJ2bGV0VGVzdCIpOwogICAgICAgICAgICAgU3RyaW5nIG9yaWdpbmFsTG9jID0gdXJsLnRvU3RyaW5nKCk7CkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgICAgICAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIHVybENvbm5lY3Rpb24gPSAoSHR0cFVSTENvbm5lY3Rpb24pY29ubjsKICAgICAgICAgICAgICAgICAgICAgdXJsQ29ubmVjdGlvbi5zZXREb091dHB1dCh0cnVlKTsKIAotICAgICAgICAgICAgICAgICAgICBEYXRhT3V0cHV0U3RyZWFtIG91dCA9IAorICAgICAgICAgICAgICAgICAgICBEYXRhT3V0cHV0U3RyZWFtIG91dCA9CiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEYXRhT3V0cHV0U3RyZWFtKHVybENvbm5lY3Rpb24uZ2V0T3V0cHV0U3RyZWFtKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC53cml0ZUJ5dGUoMSk7CiAKQEAgLTU0LDEzICs1NCwxMyBAQAogICAgICAgICAgICAgICAgICAgIFN0cmluZyBlbmNvZGVkVVJMID0gdXJsQ29ubmVjdGlvbi5nZXRIZWFkZXJGaWVsZCAoIkxvY2F0aW9uIik7CiAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJyZXNwb25zZUNvZGU6ICIgKyByZXNwb25zZUNvZGUpOwogICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiZW5jb2RlZFVSTCA6ICIgKyBlbmNvZGVkVVJMKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICBpZiAodXJsQ29ubmVjdGlvbi5nZXRSZXNwb25zZUNvZGUoKSAhPSAyMDEpewogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImNvbnRlbnRMZW5ndGgtcmVzcG9uc2VDb2RlIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImNvbnRlbnRMZW5ndGgtcmVzcG9uc2VDb2RlIiwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICBpZiAoZW5jb2RlZFVSTCAhPSBudWxsICYmICFlbmNvZGVkVVJMLnN0YXJ0c1dpdGgob3JpZ2luYWxMb2MpKXsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJjb250ZW50TGVuZ3RoLWhlYWRlciIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZW50bGVuZ3RoL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGVudGxlbmd0aC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDU3MDYyNDEuLjA5MjM2MmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZW50bGVuZ3RoL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRlbnRsZW5ndGgvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTQgKzE1LDE0IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWNvbnRlbnRUeXBlIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1jb250ZW50VHlwZSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii93ZWItY29udGVudFR5cGUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZW50bGVuZ3RoL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZW50bGVuZ3RoL2J1aWxkLnhtbAppbmRleCAzZjFmOGY1Li45YjRlNTQzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGVudGxlbmd0aC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRlbnRsZW5ndGgvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxMCArNDIsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTUzLDE0ICs1MywxNCBAQAogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MiwxMCArNzIsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGVudGxlbmd0aC9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGVudGxlbmd0aC9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggMGNmZTgxMi4uODFiMTQ1NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRlbnRsZW5ndGgvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZW50bGVuZ3RoL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjMsNyArMjMsNyBAQAogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiCiAgICAgICAgICB2ZXJzaW9uPSIyLjQiPgogCi0gICAgPGxpc3RlbmVyPiAgICAgCisgICAgPGxpc3RlbmVyPgogICAgICAgICA8bGlzdGVuZXItY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDwvbGlzdGVuZXItY2xhc3M+CiAgICAgPC9saXN0ZW5lcj4KIApAQCAtMzEsNyArMzEsNyBAQAogICAgICAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXRUZXN0PC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAKICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZW50bGVuZ3RoL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZW50bGVuZ3RoL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQppbmRleCA3ODc1MWE3Li45NjYwNWNiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGVudGxlbmd0aC9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRlbnRsZW5ndGgvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCkBAIC0zMyw3ICszMyw3IEBACiBwdWJsaWMgY2xhc3MgU2VydmxldFRlc3QgZXh0ZW5kcyBIdHRwU2VydmxldCBpbXBsZW1lbnRzIEh0dHBTZXNzaW9uTGlzdGVuZXIgewogCiAgICAgcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuaW5pdF0iKTsKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICAgICAgZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7ICAgICAgICAKKyAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuZG9Qb3N0XSIpOwogICAgICAgICBIdHRwU2Vzc2lvbiBzZXNzaW9uID0gcmVxdWVzdC5nZXRTZXNzaW9uKHRydWUpOwogCkBAIC02Miw3ICs2Miw3IEBACiAgICAgcHVibGljIHZvaWQgc2Vzc2lvbkNyZWF0ZWQoamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb25FdmVudCBodHRwU2Vzc2lvbkV2ZW50KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuc2Vzc2lvbkNyZWF0ZWRdIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2Vzc2lvbkRlc3Ryb3llZChqYWthcnRhLnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbkV2ZW50IGh0dHBTZXNzaW9uRXZlbnQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5zZXNzaW9uRGVzdHJveWVkXSIpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0UGF0aFhtbENvbmZpZy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFBhdGhYbWxDb25maWcvV2ViVGVzdC5qYXZhCmluZGV4IGFjY2MyMzAuLjYxYzczMzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0UGF0aFhtbENvbmZpZy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRQYXRoWG1sQ29uZmlnL1dlYlRlc3QuamF2YQpAQCAtMjEsOCArMjEsOCBAQAogLyoKICAqIFVuaXQgdGVzdCBmb3IgZ2xhc3NmaXNoL2RvbWFpbnMvZG9tYWluMS9jb25maWcvd2ViLWNvbnRleHQtcGF0aC14bWwtY29uZmlnLnhtbAogICoKLSAqIFRoaXMgdW5pdCB0ZXN0IGVuc3VyZXMgd2ViYXBwIGNvbnRleHRfcGF0aC54bWwgcGFja2FnZWQgb3V0c2lkZSBvZiB0aGUgYXJjaGl2ZS4gIE5lZWRzIHRvIGJlIGEgc2VwYXJhdGUgdGVzdCBmcm9tIGNvbnRleHRYbWxDb25maWcgc2luY2UgY29udGV4dFhtbENvbmZpZyB0ZXN0cyB3ZWJhcHAvTUVUQS1JTkYvY29udGV4dC54bWwgcGFja2FnZWQgaW5zaWRlIHRoZSBXQVIgCi0gKiAKKyAqIFRoaXMgdW5pdCB0ZXN0IGVuc3VyZXMgd2ViYXBwIGNvbnRleHRfcGF0aC54bWwgcGFja2FnZWQgb3V0c2lkZSBvZiB0aGUgYXJjaGl2ZS4gIE5lZWRzIHRvIGJlIGEgc2VwYXJhdGUgdGVzdCBmcm9tIGNvbnRleHRYbWxDb25maWcgc2luY2UgY29udGV4dFhtbENvbmZpZyB0ZXN0cyB3ZWJhcHAvTUVUQS1JTkYvY29udGV4dC54bWwgcGFja2FnZWQgaW5zaWRlIHRoZSBXQVIKKyAqCiAgKi8KIHB1YmxpYyBjbGFzcyBXZWJUZXN0IHsKIApAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGNvbnRleHRfcGF0aC54bWwiKTsKQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogCiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFBhdGhYbWxDb25maWcvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0UGF0aFhtbENvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGU0MDVmOWUuLjU1YjUxMDAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0UGF0aFhtbENvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0UGF0aFhtbENvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWNvbnRleHQtcGF0aC14bWwtY29uZmlnIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFBhdGhYbWxDb25maWcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRQYXRoWG1sQ29uZmlnL2J1aWxkLnhtbAppbmRleCAyOTRhZDljLi42MzBmNmUyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFBhdGhYbWxDb25maWcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0UGF0aFhtbENvbmZpZy9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDE2ICs0NCwxNiBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8Y29weSBmaWxlPSJkZXNjcmlwdG9yL3dlYi1jb250ZXh0LXBhdGgteG1sLWNvbmZpZy54bWwiIHRvZGlyPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9jb25maWciLz4KICAgICA8L3RhcmdldD4KQEAgLTcxLDcgKzcxLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtODMsMTAgKzgzLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRSb290L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0Um9vdC9XZWJUZXN0LmphdmEKaW5kZXggNjVjMmFmZS4uOTVmZTdmMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRSb290L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFJvb3QvV2ViVGVzdC5qYXZhCkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGNvbnRleHQtcm9vdCBzZXR0aW5nIGluICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJzdW4td2ViLnhtbCIpOwpAQCAtNTAsOCArNTAsOCBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2VKc3AoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZC4iKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0Um9vdC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRSb290L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNWM3NWNmMy4uZmEyZmNiYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRSb290L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRSb290L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tY29udGV4dC1yb290Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFJvb3QvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRSb290L2J1aWxkLnhtbAppbmRleCA2NTQwNGY4Li42YzdhMjg2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFJvb3QvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0Um9vdC9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDIzICs0NCwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLW5vLWNvbnRleHQtcm9vdCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTcyLDEwICs3MiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0Um9vdC9kZXNjcmlwdG9yL3N1bi13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRSb290L2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwKaW5kZXggMzIxNGM5ZC4uYzcyY2IxNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRSb290L2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRSb290L2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwKQEAgLTIwLDUgKzIwLDUgQEAKIDwhRE9DVFlQRSBzdW4td2ViLWFwcCBQVUJMSUMgIi0vL1N1biBNaWNyb3N5c3RlbXMsIEluYy4vL0RURCBBcHBsaWNhdGlvbiBTZXJ2ZXIgOC4xIFNlcnZsZXQgMi40Ly9FTiIgImh0dHA6Ly93d3cuc3VuLmNvbS9zb2Z0d2FyZS9zdW5vbmUvYXBwc2VydmVyL2R0ZHMvc3VuLXdlYi1hcHBfMl80LTEuZHRkIj4KIAogPHN1bi13ZWItYXBwPgotICA8Y29udGV4dC1yb290Pm15Y29udGV4dHJvb3Q8L2NvbnRleHQtcm9vdD4gCisgIDxjb250ZXh0LXJvb3Q+bXljb250ZXh0cm9vdDwvY29udGV4dC1yb290PgogPC9zdW4td2ViLWFwcD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0Um9vdER1cGxpY2F0ZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFJvb3REdXBsaWNhdGUvV2ViVGVzdC5qYXZhCmluZGV4IDlkNTdmZGUuLmUxY2Q4ZDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0Um9vdER1cGxpY2F0ZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRSb290RHVwbGljYXRlL1dlYlRlc3QuamF2YQpAQCAtMTksOCArMTksOCBAQAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuKjsKIAogLyoKLSAqIFVuaXQgdGVzdCBmb3IgR0xBU1NGSVNILTE4ODYxIAotICogCisgKiBVbml0IHRlc3QgZm9yIEdMQVNTRklTSC0xODg2MQorICoKICAqIEFmdGVyIHNldHRpbmcgY29udGV4dCByb290IG9mIHR3byB3YXJzIHdoaWNoIGRlcGxveWVkIG9uIHRoZSBzZXJ2ZXIgdGFyZ2V0IHdpdGggdGhlIHNhbWUgdmFsdWUsCiAgKiBib3RoIG9mIHRoZSB0d28gd2FycyBhY2Nlc3NlZCBmYWlsZWQuCiAgKgpAQCAtNDIsNyArNDIsNyBAQAogICAgICAgICBjb250ZXh0Um9vdDEgPSBhcmdzWzJdOwogICAgICAgICBjb250ZXh0Um9vdDIgPSBhcmdzWzNdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBHTEFTU0ZJU0gtMTg4NjEiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC01MCw4ICs1MCw4IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZUpzcCgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVNUX05BTUUgKyAiIHRlc3QgZmFpbGVkLiIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRSb290RHVwbGljYXRlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFJvb3REdXBsaWNhdGUvYnVpbGQucHJvcGVydGllcwppbmRleCBiMTFhYzlmLi5mODA1ZDZiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFJvb3REdXBsaWNhdGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFJvb3REdXBsaWNhdGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1jb250ZXh0LXJvb3QtZHVwbGljYXRlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFJvb3REdXBsaWNhdGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRSb290RHVwbGljYXRlL2J1aWxkLnhtbAppbmRleCA1NjdlM2VkLi5iNTQ0YzU2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFJvb3REdXBsaWNhdGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0Um9vdER1cGxpY2F0ZS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDE3ICs0NCwxNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTkyLDcgKzkyLDcgQEAKICAgICAgICAgICAgICAgICB2YWx1ZT0iYXBwbGljYXRpb25zLmFwcGxpY2F0aW9uLmNvbnRleHRyb290Mi5jb250ZXh0LXJvb3Q9Y29udGV4dHJvb3QxIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC0xMDUsNyArMTA1LDcgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CiAgICAgICAgICAgICA8YXJnIGxpbmU9InVuZGVwbG95Ii8+CkBAIC0xMTksNyArMTE5LDcgQEAKICAgICAgICAgICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KICAgICAgICAgICAgIDxhcmcgbGluZT0iJHtjb250ZXh0cm9vdDJ9Ii8+CiAgICAgICAgIDwvZXhlYz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRWYWx2ZVNldFJlcXVlc3RlZFNlc3Npb25Db29raWVQYXRoL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0VmFsdmVTZXRSZXF1ZXN0ZWRTZXNzaW9uQ29va2llUGF0aC9XZWJUZXN0LmphdmEKaW5kZXggMjZjYzhmOC4uMGI3ZjAxNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRWYWx2ZVNldFJlcXVlc3RlZFNlc3Npb25Db29raWVQYXRoL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFZhbHZlU2V0UmVxdWVzdGVkU2Vzc2lvbkNvb2tpZVBhdGgvV2ViVGVzdC5qYXZhCkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgSVQgNzQyNiIpOwpAQCAtNTUsMTEgKzU1LDExIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL3Rlc3QiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRWYWx2ZVNldFJlcXVlc3RlZFNlc3Npb25Db29raWVQYXRoL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFZhbHZlU2V0UmVxdWVzdGVkU2Vzc2lvbkNvb2tpZVBhdGgvYnVpbGQucHJvcGVydGllcwppbmRleCA2NDNlZTMxLi4zZDBjOTRkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFZhbHZlU2V0UmVxdWVzdGVkU2Vzc2lvbkNvb2tpZVBhdGgvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFZhbHZlU2V0UmVxdWVzdGVkU2Vzc2lvbkNvb2tpZVBhdGgvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1jb250ZXh0LXZhbHZlLXNldC1yZXF1ZXN0ZWQtc2Vzc2lvbi1jb29raWUtcGF0aCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRWYWx2ZVNldFJlcXVlc3RlZFNlc3Npb25Db29raWVQYXRoL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0VmFsdmVTZXRSZXF1ZXN0ZWRTZXNzaW9uQ29va2llUGF0aC9idWlsZC54bWwKaW5kZXggNWYzNjcxNS4uNjJkYjlkMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRWYWx2ZVNldFJlcXVlc3RlZFNlc3Npb25Db29raWVQYXRoL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFZhbHZlU2V0UmVxdWVzdGVkU2Vzc2lvbkNvb2tpZVBhdGgvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwyMiArNDIsMjIgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNjksMTAgKzY5LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRYbWxDb25maWcvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRYbWxDb25maWcvV2ViVGVzdC5qYXZhCmluZGV4IGQ4NGU4MjguLjczMmEyOWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0WG1sQ29uZmlnL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFhtbENvbmZpZy9XZWJUZXN0LmphdmEKQEAgLTIzLDE4ICsyMywxOCBAQAogICogKCJBZGQgc3VwcG9ydCBmb3IgY29udGV4dC54bWwiKToKICAqCiAgKiBUaGlzIHVuaXQgdGVzdCBlbnN1cmVzIHRoZSBmb2xsb3dpbmcgY29udGV4dC54bWwgY29uZmlndXJhdGlvbi4KLSAqIAotICogMS4gZGVmYXVsdCB2aXJ0dWFsLXNlcnZlciBjb250ZXh0LnhtbCB1c2luZyB2aXJ0dWFsLXNlcnZlciBwcm9wZXJ0eSAKLSAqICJjb250ZXh0WG1sRGVmYXVsdCIgCi0gKiAKKyAqCisgKiAxLiBkZWZhdWx0IHZpcnR1YWwtc2VydmVyIGNvbnRleHQueG1sIHVzaW5nIHZpcnR1YWwtc2VydmVyIHByb3BlcnR5CisgKiAiY29udGV4dFhtbERlZmF1bHQiCisgKgogICogMi4gZGVwbG95ZWQgd2ViYXBwcydzIGNvbnRleHQueG1sIChNRVRBLUlORi9jb250ZXh0LnhtbCkKICAqCiAgKiBUaGUgZ2xvYmFsIGNvbnRleHQueG1sIGFuZCB2aXJ0dWFsLXNlcnZlciBjb250ZXh0LnhtbCB3aWxsIGJlIGNvcGllZCB0byBjb25maWcKICAqIGFuZCByZW1vdmVkIGFmdGVyIHRoaXMgdW5pdCB0ZXN0LgotICogCisgKgogICogVGhlICJjb250ZXh0WG1sIiBwcm9wZXJ0eSBvZiB0aGUgdmlydHVhbC1zZXJ2ZXIgInNlcnZlciIgaXMgYWRkZWQgKGJlZm9yZQogICogdGhlIHdlYmFwcCdzIGRlcGxveW1lbnQpIGFuZCByZW1vdmVkIChhZnRlciB0aGUgd2ViYXBwJ3MgdW5kZXBsb3ltZW50KQotICogCisgKgogICovCiBwdWJsaWMgY2xhc3MgV2ViVGVzdCB7CiAKQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBHbGFzc0Zpc2ggSXNzdWUgMjQzOSIpOwpAQCAtNjYsNyArNjYsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAKICAgICB9CiAKQEAgLTkzLDcgKzkzLDcgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGdldCk7CiAgICAgICAgIG9zLndyaXRlKGdldC5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFhtbENvbmZpZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRYbWxDb25maWcvYnVpbGQucHJvcGVydGllcwppbmRleCA5YzJhMTU0Li40ZmYyNWU2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFhtbENvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0WG1sQ29uZmlnL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tY29udGV4dC14bWwtY29uZmlnIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFhtbENvbmZpZy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFhtbENvbmZpZy9idWlsZC54bWwKaW5kZXggODBhMjI4Yy4uOGVmN2NlMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRYbWxDb25maWcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0WG1sQ29uZmlnL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMTYgKzQ0LDE2IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxjb3B5IGZpbGU9ImRlc2NyaXB0b3IvY29udGV4dC54bWwiIHRvZGlyPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9jb25maWciLz4KICAgICAgICAgPGNvcHkgZmlsZT0iZGVzY3JpcHRvci9jb250ZXh0LnhtbC5kZWZhdWx0IiB0b2Rpcj0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvY29uZmlnIi8+CkBAIC04Myw3ICs4Myw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTk1LDEwICs5NSwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0WG1sTGlmZWN5Y2xlTGlzdGVuZXIvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRYbWxMaWZlY3ljbGVMaXN0ZW5lci9XZWJUZXN0LmphdmEKaW5kZXggYzJiZjUxNy4uZjFlOGYwZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRYbWxMaWZlY3ljbGVMaXN0ZW5lci9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRYbWxMaWZlY3ljbGVMaXN0ZW5lci9XZWJUZXN0LmphdmEKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBMaWZlY3ljbGVMaXN0ZW5lciBpbiBjb250ZXh0LnhtbCIpOwpAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0WG1sTGlmZWN5Y2xlTGlzdGVuZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0WG1sTGlmZWN5Y2xlTGlzdGVuZXIvYnVpbGQucHJvcGVydGllcwppbmRleCBjNTc3OTNlLi44YzA3OWFiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFhtbExpZmVjeWNsZUxpc3RlbmVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRYbWxMaWZlY3ljbGVMaXN0ZW5lci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWNvbnRleHQteG1sLWxpZmVjeWNsZS1saXN0ZW5lciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRYbWxMaWZlY3ljbGVMaXN0ZW5lci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFhtbExpZmVjeWNsZUxpc3RlbmVyL2J1aWxkLnhtbAppbmRleCA0MmQyNjVkLi5iMWMyNThkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFhtbExpZmVjeWNsZUxpc3RlbmVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFhtbExpZmVjeWNsZUxpc3RlbmVyL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMjIgKzQ0LDIyIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTcxLDEwICs3MSwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0WG1sTGlmZWN5Y2xlTGlzdGVuZXIvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRYbWxMaWZlY3ljbGVMaXN0ZW5lci9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKaW5kZXggZDIxODI3Yy4uZmRlZDE3NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRYbWxMaWZlY3ljbGVMaXN0ZW5lci9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRYbWxMaWZlY3ljbGVMaXN0ZW5lci9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKQEAgLTMzLDcgKzMzLDcgQEAKIHB1YmxpYyBjbGFzcyBTZXJ2bGV0VGVzdCBleHRlbmRzIEh0dHBTZXJ2bGV0IGltcGxlbWVudHMgSHR0cFNlc3Npb25MaXN0ZW5lciB7CiAKICAgICBwcml2YXRlIFNlcnZsZXRDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5pbml0XSIpOwpAQCAtNTQsNyArNTQsNyBAQAogICAgIHB1YmxpYyB2b2lkIHNlc3Npb25DcmVhdGVkKGpha2FydGEuc2VydmxldC5odHRwLkh0dHBTZXNzaW9uRXZlbnQgaHR0cFNlc3Npb25FdmVudCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LnNlc3Npb25DcmVhdGVkXSIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlc3Npb25EZXN0cm95ZWQoamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb25FdmVudCBodHRwU2Vzc2lvbkV2ZW50KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuc2Vzc2lvbkRlc3Ryb3llZF0iKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFhtbExpZmVjeWNsZUxpc3RlbmVyR2xvYmFsL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0WG1sTGlmZWN5Y2xlTGlzdGVuZXJHbG9iYWwvV2ViVGVzdC5qYXZhCmluZGV4IDQ2OWVhMGIuLjdjMDM1NzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0WG1sTGlmZWN5Y2xlTGlzdGVuZXJHbG9iYWwvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0WG1sTGlmZWN5Y2xlTGlzdGVuZXJHbG9iYWwvV2ViVGVzdC5qYXZhCkBAIC0yMCw3ICsyMCw3IEBACiAKIC8qCiAgKgotICogVGhpcyB1bml0IHRlc3QgY2hlY2tlcyBMaWZlY3ljbGVMaXN0ZW5lciBpbiBjb250ZXh0LnhtbCBjb25maWd1cmF0aW9uLiAKKyAqIFRoaXMgdW5pdCB0ZXN0IGNoZWNrZXMgTGlmZWN5Y2xlTGlzdGVuZXIgaW4gY29udGV4dC54bWwgY29uZmlndXJhdGlvbi4KICAqIFRoZSBnbG9iYWwgY29udGV4dC54bWwgc2hvdWxkIGJlIHNoYXJlZCBhY3Jvc3MgYnkgYWxsIHdlYmFwcHMuCiAgKi8KIHB1YmxpYyBjbGFzcyBXZWJUZXN0IHsKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBnbG9iYWwgTGlmZWN5Y2xlTGlzdGVuZXIgaW4gY29udGV4dC54bWwiKTsKQEAgLTU1LDcgKzU1LDcgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogCiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFhtbExpZmVjeWNsZUxpc3RlbmVyR2xvYmFsL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFhtbExpZmVjeWNsZUxpc3RlbmVyR2xvYmFsL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOWU2YjA2MC4uNGE1NDAyZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRYbWxMaWZlY3ljbGVMaXN0ZW5lckdsb2JhbC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0WG1sTGlmZWN5Y2xlTGlzdGVuZXJHbG9iYWwvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1jb250ZXh0LXhtbC1saWZlY3ljbGUtbGlzdGVuZXItZ2xvYmFsIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFhtbExpZmVjeWNsZUxpc3RlbmVyR2xvYmFsL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0WG1sTGlmZWN5Y2xlTGlzdGVuZXJHbG9iYWwvYnVpbGQueG1sCmluZGV4IDE5ZjhhN2EuLjhkNjcxNzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0WG1sTGlmZWN5Y2xlTGlzdGVuZXJHbG9iYWwvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0WG1sTGlmZWN5Y2xlTGlzdGVuZXJHbG9iYWwvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwxMCArNDQsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KQEAgLTU5LDcgKzU5LDcgQEAKICAgICAgICAgPGNvcHkgZmlsZT0ibGliL3Rlc3QuamFyIiB0b2Rpcj0iJHtlbnYuUzFBU19IT01FfS9saWIiCiAgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIi8+CiAtLT4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29weVJlc291cmNlcyIvPgpAQCAtODYsMTMgKzg2LDEzIEBACiAgICAgICAgIDwvZGVsZXRlPgogICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2NvbmZpZy9jb250ZXh0LnhtbCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC0xMDQsMTAgKzEwNCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0WG1sTGlmZWN5Y2xlTGlzdGVuZXJHbG9iYWwvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRYbWxMaWZlY3ljbGVMaXN0ZW5lckdsb2JhbC9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKaW5kZXggZDIxODI3Yy4uZmRlZDE3NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRYbWxMaWZlY3ljbGVMaXN0ZW5lckdsb2JhbC9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRYbWxMaWZlY3ljbGVMaXN0ZW5lckdsb2JhbC9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKQEAgLTMzLDcgKzMzLDcgQEAKIHB1YmxpYyBjbGFzcyBTZXJ2bGV0VGVzdCBleHRlbmRzIEh0dHBTZXJ2bGV0IGltcGxlbWVudHMgSHR0cFNlc3Npb25MaXN0ZW5lciB7CiAKICAgICBwcml2YXRlIFNlcnZsZXRDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5pbml0XSIpOwpAQCAtNTQsNyArNTQsNyBAQAogICAgIHB1YmxpYyB2b2lkIHNlc3Npb25DcmVhdGVkKGpha2FydGEuc2VydmxldC5odHRwLkh0dHBTZXNzaW9uRXZlbnQgaHR0cFNlc3Npb25FdmVudCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LnNlc3Npb25DcmVhdGVkXSIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlc3Npb25EZXN0cm95ZWQoamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb25FdmVudCBodHRwU2Vzc2lvbkV2ZW50KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuc2Vzc2lvbkRlc3Ryb3llZF0iKTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFhtbFJlbW90ZUhvc3RWYWx2ZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFhtbFJlbW90ZUhvc3RWYWx2ZS9XZWJUZXN0LmphdmEKaW5kZXggYjZiOGJmNy4uMjY3ZjkxMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRYbWxSZW1vdGVIb3N0VmFsdmUvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0WG1sUmVtb3RlSG9zdFZhbHZlL1dlYlRlc3QuamF2YQpAQCAtMzksNyArMzksNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIFZhbHZlIGluIGNvbnRleHQueG1sIik7CkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKIAogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRYbWxSZW1vdGVIb3N0VmFsdmUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0WG1sUmVtb3RlSG9zdFZhbHZlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYmI3MGZlMi4uZmYzNzhhOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRYbWxSZW1vdGVIb3N0VmFsdmUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFhtbFJlbW90ZUhvc3RWYWx2ZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWNvbnRleHQteG1sLXJlbW90ZS1ob3N0LXZhbHZlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFhtbFJlbW90ZUhvc3RWYWx2ZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFhtbFJlbW90ZUhvc3RWYWx2ZS9idWlsZC54bWwKaW5kZXggNGJmNzFjZC4uMTI3ZWIzMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRYbWxSZW1vdGVIb3N0VmFsdmUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0WG1sUmVtb3RlSG9zdFZhbHZlL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMjIgKzQ0LDIyIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTcxLDEwICs3MSwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0WG1sUmVtb3RlSG9zdFZhbHZlL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0WG1sUmVtb3RlSG9zdFZhbHZlL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQppbmRleCA1N2Y4OWJlLi43N2JjZjQ0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFhtbFJlbW90ZUhvc3RWYWx2ZS9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRYbWxSZW1vdGVIb3N0VmFsdmUvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCkBAIC0zMyw3ICszMyw3IEBACiBwdWJsaWMgY2xhc3MgU2VydmxldFRlc3QgZXh0ZW5kcyBIdHRwU2VydmxldCBpbXBsZW1lbnRzIEh0dHBTZXNzaW9uTGlzdGVuZXIgewogCiAgICAgcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuaW5pdF0iKTsKQEAgLTQ0LDE0ICs0NCwxNCBAQAogICAgICAgICBkb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgICAgICAgIAorICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5kb1Bvc3RdIik7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2Vzc2lvbkNyZWF0ZWQoamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb25FdmVudCBodHRwU2Vzc2lvbkV2ZW50KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuc2Vzc2lvbkNyZWF0ZWRdIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2Vzc2lvbkRlc3Ryb3llZChqYWthcnRhLnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbkV2ZW50IGh0dHBTZXNzaW9uRXZlbnQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5zZXNzaW9uRGVzdHJveWVkXSIpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0WG1sUmVtb3RlSG9zdFZhbHZlL3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb250ZXh0WG1sUmVtb3RlSG9zdFZhbHZlL3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQppbmRleCAzMzRhYzNjLi43YmRhNjRlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29udGV4dFhtbFJlbW90ZUhvc3RWYWx2ZS9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NvbnRleHRYbWxSZW1vdGVIb3N0VmFsdmUvc2VydmxldC9UZXN0U2VydmxldC5qYXZhCkBAIC0zMyw3ICszMyw3IEBACiAgICAgICAgICAgICAgICAgISJWQUxVRV8zIi5lcXVhbHMocmVxLmdldEF0dHJpYnV0ZSgiQVRUUl8zIikpKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbigiTWlzc2luZyByZXF1ZXN0IGF0dHJpYnV0ZXMiKTsKICovCi0gICAgICAgIGlmICghIlZBTFVFXzEiLmVxdWFscyhyZXEuZ2V0QXR0cmlidXRlKCJBVFRSXzEiKSkpIHsgCisgICAgICAgIGlmICghIlZBTFVFXzEiLmVxdWFscyhyZXEuZ2V0QXR0cmlidXRlKCJBVFRSXzEiKSkpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKCJNaXNzaW5nIHJlcXVlc3QgYXR0cmlidXRlcyIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcmVzLmdldFdyaXRlcigpLnByaW50KHRydWUpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Nvb2tpZVByb3BlcnRpZXNTdW5XZWJYbWwvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Nvb2tpZVByb3BlcnRpZXNTdW5XZWJYbWwvV2ViVGVzdC5qYXZhCmluZGV4IDk1MTEyMmYuLjEwOTc5MTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb29raWVQcm9wZXJ0aWVzU3VuV2ViWG1sL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29va2llUHJvcGVydGllc1N1bldlYlhtbC9XZWJUZXN0LmphdmEKQEAgLTE5LDcgKzE5LDcgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLio7CiAKIC8qCi0gKiBUaGlzIHVuaXQgdGVzdHMgZXhwZWN0cyB0aGUgZm9sbG93aW5nIFNldC1Db29raWUgcmVzcG9uc2UgaGVhZGVyLCBiYXNlZCBvbiAKKyAqIFRoaXMgdW5pdCB0ZXN0cyBleHBlY3RzIHRoZSBmb2xsb3dpbmcgU2V0LUNvb2tpZSByZXNwb25zZSBoZWFkZXIsIGJhc2VkIG9uCiAgKiB0aGUgY29va2llLXByb3BlcnRpZXMgc3BlY2lmaWVkIGluIHN1bi13ZWIueG1sOgogICoKICAqICAgU2V0LUNvb2tpZTogSlNFU1NJT05JRD1bLi4uXTsgRG9tYWluPS5pcGxhbmV0LmNvbTsgUGF0aD0vCkBAIC02Miw3ICs2Miw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEJ1Z3RyYXEgNDkyNDk0OCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTcxLDggKzcxLDggQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgIAotICAgICAgICB0cnkgeyAKKworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlSnNwKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb29raWVQcm9wZXJ0aWVzU3VuV2ViWG1sL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29va2llUHJvcGVydGllc1N1bldlYlhtbC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGZlZWE4NTQuLjJlZTUwM2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb29raWVQcm9wZXJ0aWVzU3VuV2ViWG1sL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Nvb2tpZVByb3BlcnRpZXNTdW5XZWJYbWwvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWNvb2tpZS1wcm9wZXJ0aWVzIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1jb29raWUtcHJvcGVydGllcyIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29va2llUHJvcGVydGllc1N1bldlYlhtbC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29va2llUHJvcGVydGllc1N1bldlYlhtbC9idWlsZC54bWwKaW5kZXggMDBmZGFkMy4uYzM5Nzc2ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Nvb2tpZVByb3BlcnRpZXNTdW5XZWJYbWwvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb29raWVQcm9wZXJ0aWVzU3VuV2ViWG1sL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMjMgKzQyLDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzAsMTAgKzcwLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Nvb2tpZVZhbHVlV2l0aEVxdWFscy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29va2llVmFsdWVXaXRoRXF1YWxzL1dlYlRlc3QuamF2YQppbmRleCA5NGMzMDE1Li4yZTUzMjc0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29va2llVmFsdWVXaXRoRXF1YWxzL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29va2llVmFsdWVXaXRoRXF1YWxzL1dlYlRlc3QuamF2YQpAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBDUiA2NDU2NTUzIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDksOCArNDksOCBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgCi0gICAgICAgIHRyeSB7IAorCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2VDcmVhdGVDb29raWUoKTsKICAgICAgICAgICAgIGludm9rZUdldENvb2tpZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Nvb2tpZVZhbHVlV2l0aEVxdWFscy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Nvb2tpZVZhbHVlV2l0aEVxdWFscy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGI2Y2ExMjYuLjE1YmMzZTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb29raWVWYWx1ZVdpdGhFcXVhbHMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29va2llVmFsdWVXaXRoRXF1YWxzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tY29va2llLXZhbHVlLXdpdGgtZXF1YWxzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29va2llVmFsdWVXaXRoRXF1YWxzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb29raWVWYWx1ZVdpdGhFcXVhbHMvYnVpbGQueG1sCmluZGV4IDRkODQ1ZWUuLjM5MmNlOGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb29raWVWYWx1ZVdpdGhFcXVhbHMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb29raWVWYWx1ZVdpdGhFcXVhbHMvYnVpbGQueG1sCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ1LDIzICs0NSwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTczLDEwICs3MywxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb29raWVWYWx1ZVdpdGhTcGFjZXMvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Nvb2tpZVZhbHVlV2l0aFNwYWNlcy9XZWJUZXN0LmphdmEKaW5kZXggYTljYTY3Ni4uNmY2YTQ5ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Nvb2tpZVZhbHVlV2l0aFNwYWNlcy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Nvb2tpZVZhbHVlV2l0aFNwYWNlcy9XZWJUZXN0LmphdmEKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgQ1IgNjQ1NjU1MyIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTUwLDggKzUwLDggQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgIAotICAgICAgICB0cnkgeyAKKworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlQ3JlYXRlQ29va2llKCk7CiAgICAgICAgICAgICBpbnZva2VHZXRDb29raWUoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb29raWVWYWx1ZVdpdGhTcGFjZXMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jb29raWVWYWx1ZVdpdGhTcGFjZXMvYnVpbGQucHJvcGVydGllcwppbmRleCAwZmEzZDcwLi42MWMwMzc2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29va2llVmFsdWVXaXRoU3BhY2VzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Nvb2tpZVZhbHVlV2l0aFNwYWNlcy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWNvb2tpZS12YWx1ZS13aXRoLXNwYWNlcyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Nvb2tpZVZhbHVlV2l0aFNwYWNlcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29va2llVmFsdWVXaXRoU3BhY2VzL2J1aWxkLnhtbAppbmRleCAwMGZkYWQzLi5jMzk3NzZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29va2llVmFsdWVXaXRoU3BhY2VzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY29va2llVmFsdWVXaXRoU3BhY2VzL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMjMgKzQyLDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzAsMTAgKzcwLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NyZWF0ZUh0dHBzTGlzdGVuZXIvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NyZWF0ZUh0dHBzTGlzdGVuZXIvV2ViVGVzdC5qYXZhCmluZGV4IDMyMWExMDMuLjNhMjAyMjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jcmVhdGVIdHRwc0xpc3RlbmVyL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY3JlYXRlSHR0cHNMaXN0ZW5lci9XZWJUZXN0LmphdmEKQEAgLTIxLDE2ICsyMSwxNiBAQAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuKjsKIAogcHVibGljIGNsYXNzIFdlYlRlc3QgewotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50ID0gMDsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgRVhQRUNURURfQ09VTlQgPSAxOwotICAgIAorCiAgICAgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0PQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAgICAgcHJpdmF0ZSBzdGF0aWMgVVJMQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKICAgICBwcml2YXRlIHN0YXRpYyBVUkwgdXJsOwogICAgIHByaXZhdGUgc3RhdGljIE9iamVjdE91dHB1dFN0cmVhbSBvYmplY3RXcml0ZXIgPSBudWxsOwotICAgIHByaXZhdGUgc3RhdGljIE9iamVjdElucHV0U3RyZWFtIG9iamVjdFJlYWRlciA9IG51bGw7ICAKKyAgICBwcml2YXRlIHN0YXRpYyBPYmplY3RJbnB1dFN0cmVhbSBvYmplY3RSZWFkZXIgPSBudWxsOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewogCkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiB1cmxDb25uZWN0aW9uID0gKEh0dHBVUkxDb25uZWN0aW9uKWNvbm47CiAgICAgICAgICAgICAgICB1cmxDb25uZWN0aW9uLnNldERvT3V0cHV0KHRydWUpOwogICAgICAgICAgICAgICAgaW50IHJlc3BvbnNlQ29kZT0gIHVybENvbm5lY3Rpb24uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc3BvbnNlIGNvZGU6ICIgKyByZXNwb25zZUNvZGUgKyAiIEV4cGVjdGVkIGNvZGU6IDIwMCIpOyAKKyAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzcG9uc2UgY29kZTogIiArIHJlc3BvbnNlQ29kZSArICIgRXhwZWN0ZWQgY29kZTogMjAwIik7CiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCl7CiAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJjcmVhdGVIdHRwc0xpc3RlbmVyIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY3JlYXRlSHR0cHNMaXN0ZW5lci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NyZWF0ZUh0dHBzTGlzdGVuZXIvYnVpbGQucHJvcGVydGllcwppbmRleCBiMzAxZjQ2Li40NTk4NjdlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY3JlYXRlSHR0cHNMaXN0ZW5lci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jcmVhdGVIdHRwc0xpc3RlbmVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE0ICsxNSwxNCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1jcmVhdGVIdHRwc0xpc3RlbmVyIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1jcmVhdGVIdHRwc0xpc3RlbmVyIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iLyR7YXBwbmFtZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jcmVhdGVIdHRwc0xpc3RlbmVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jcmVhdGVIdHRwc0xpc3RlbmVyL2J1aWxkLnhtbAppbmRleCBjYThiYzgxLi45ZDU1ZWEyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY3JlYXRlSHR0cHNMaXN0ZW5lci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NyZWF0ZUh0dHBzTGlzdGVuZXIvYnVpbGQueG1sCkBAIC01MCw3ICs1MCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC01OCwxMCArNTgsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgIDxqYXZhYwpAQCAtNjksMTAgKzY5LDEwIEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iKi5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtODAsNyArODAsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC05MiwxMCArOTIsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY3JlYXRlSHR0cHNMaXN0ZW5lci9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY3JlYXRlSHR0cHNMaXN0ZW5lci9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggZmRiMGMxNy4uYzFkNGJiNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NyZWF0ZUh0dHBzTGlzdGVuZXIvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jcmVhdGVIdHRwc0xpc3RlbmVyL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjIsMTIgKzIyLDEyIEBACiAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIgogICAgICAgICAgdmVyc2lvbj0iMi40Ij4KLSAgICAgCisKICAgICA8c2VydmxldD4KICAgICAgICAgPGRpc3BsYXktbmFtZT5TZXJ2bGV0VGVzdDwvZGlzcGxheS1uYW1lPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuU2VydmxldFRlc3Q8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCisgICAgPC9zZXJ2bGV0PgogICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L1NlcnZsZXRUZXN0PC91cmwtcGF0dGVybj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jcmVhdGVIdHRwc0xpc3RlbmVyL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jcmVhdGVIdHRwc0xpc3RlbmVyL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQppbmRleCAwZjczNmE4Li41OWRjOThjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY3JlYXRlSHR0cHNMaXN0ZW5lci9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NyZWF0ZUh0dHBzTGlzdGVuZXIvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiBwdWJsaWMgY2xhc3MgU2VydmxldFRlc3QgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAKICAgICBwcml2YXRlIFNlcnZsZXRDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKICAgICAgICAgY29udGV4dCA9IGNvbmZpZy5nZXRTZXJ2bGV0Q29udGV4dCgpOwpAQCAtMzQsMTIgKzM0LDEyIEBACiAgICAgICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAgICAgICAgCisgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmRvUG9zdF0iKTsKLSAgICAgICAgCisKICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKLSAgICAgICAgCQorCiAgICAgICAgIG91dC5wcmludGxuKCJURVNUOjpQQVNTIik7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NyZWF0ZVNlc3Npb25JblNlcnZsZXRSZXF1ZXN0TGlzdGVuZXIvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NyZWF0ZVNlc3Npb25JblNlcnZsZXRSZXF1ZXN0TGlzdGVuZXIvV2ViVGVzdC5qYXZhCmluZGV4IDhlZTc5ZGIuLmExMjY4ZWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jcmVhdGVTZXNzaW9uSW5TZXJ2bGV0UmVxdWVzdExpc3RlbmVyL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY3JlYXRlU2Vzc2lvbkluU2VydmxldFJlcXVlc3RMaXN0ZW5lci9XZWJUZXN0LmphdmEKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgImNyZWF0ZSBzZXNzaW9uIGluIEh0dHBSZXF1ZXN0TGlzdGVuZXIucmVxdWVzdEluaXRpYWxpemVkIik7CkBAIC00OSw3ICs0OSw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTYwLDcgKzYwLDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICArICIvY2hlY2tyZXN1bHQiOwogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKQpAQCAtOTQsNyArOTQsNyBAQAogICAgICAgICAgICAgaW5wdXQgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAgICAgICAgICAgICBTdHJpbmcgbGluZSA9IGlucHV0LnJlYWRMaW5lKCk7CiAgICAgICAgICAgICBpZiAoIUVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBmaW5hbGx5IHsKQEAgLTExNCw3ICsxMTQsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgZ2V0U2Vzc2lvbklkKEh0dHBVUkxDb25uZWN0aW9uIGNvbm4pIHsKICAgICAgICAgU3RyaW5nIHNlc3Npb25JZCA9IG51bGw7CiAgICAgICAgIFN0cmluZyBjb29raWVTdHJpbmcgPSBjb25uLmdldEhlYWRlckZpZWxkKCJTZXQtQ29va2llIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY3JlYXRlU2Vzc2lvbkluU2VydmxldFJlcXVlc3RMaXN0ZW5lci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NyZWF0ZVNlc3Npb25JblNlcnZsZXRSZXF1ZXN0TGlzdGVuZXIvYnVpbGQucHJvcGVydGllcwppbmRleCBlNWMxZDQ4Li45YzkxNmE0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY3JlYXRlU2Vzc2lvbkluU2VydmxldFJlcXVlc3RMaXN0ZW5lci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jcmVhdGVTZXNzaW9uSW5TZXJ2bGV0UmVxdWVzdExpc3RlbmVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tY3JlYXRlLXNlc3Npb24taW4tc2VydmxldC1yZXF1ZXN0LWxpc3RlbmVyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY3JlYXRlU2Vzc2lvbkluU2VydmxldFJlcXVlc3RMaXN0ZW5lci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY3JlYXRlU2Vzc2lvbkluU2VydmxldFJlcXVlc3RMaXN0ZW5lci9idWlsZC54bWwKaW5kZXggY2Y5M2ZhNC4uMjgyNzVhOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NyZWF0ZVNlc3Npb25JblNlcnZsZXRSZXF1ZXN0TGlzdGVuZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jcmVhdGVTZXNzaW9uSW5TZXJ2bGV0UmVxdWVzdExpc3RlbmVyL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTAgKzQyLDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCkBAIC01MywxMCArNTMsMTAgQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02NCw3ICs2NCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jcmVhdGVTZXNzaW9uSW5TZXJ2bGV0UmVxdWVzdExpc3RlbmVyL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jcmVhdGVTZXNzaW9uSW5TZXJ2bGV0UmVxdWVzdExpc3RlbmVyL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCA0YjAxYjQ1Li42ZTVmNGE3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY3JlYXRlU2Vzc2lvbkluU2VydmxldFJlcXVlc3RMaXN0ZW5lci9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NyZWF0ZVNlc3Npb25JblNlcnZsZXRSZXF1ZXN0TGlzdGVuZXIvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0xOCw3ICsxOCw3IEBACiAtLT4KIAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMy4wIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8zXzAueHNkIj4KLSAgPGxpc3RlbmVyPiAgICAgCisgIDxsaXN0ZW5lcj4KICAgICAgIDxsaXN0ZW5lci1jbGFzcz50ZXN0Lk15U2VydmxldFJlcXVlc3RMaXN0ZW5lcjwvbGlzdGVuZXItY2xhc3M+CiAgIDwvbGlzdGVuZXI+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jcmVhdGVTZXNzaW9uSW5TZXJ2bGV0UmVxdWVzdExpc3RlbmVyL3NlcnZsZXQvdGVzdC9DaGVja1Jlc3VsdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NyZWF0ZVNlc3Npb25JblNlcnZsZXRSZXF1ZXN0TGlzdGVuZXIvc2VydmxldC90ZXN0L0NoZWNrUmVzdWx0LmphdmEKaW5kZXggMzY1NzJlZi4uOTdhNTA5MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NyZWF0ZVNlc3Npb25JblNlcnZsZXRSZXF1ZXN0TGlzdGVuZXIvc2VydmxldC90ZXN0L0NoZWNrUmVzdWx0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NyZWF0ZVNlc3Npb25JblNlcnZsZXRSZXF1ZXN0TGlzdGVuZXIvc2VydmxldC90ZXN0L0NoZWNrUmVzdWx0LmphdmEKQEAgLTM4LDYgKzM4LDYgQEAKICAgICAgICAgICAgICAgICAgICAgKGN1cnJlbnRUaW1lIC0gbGFzdEFjY2Vzc2VkVGltZSA8PSBtYXhJZGxlVGltZSkpOwogICAgICAgICB9CiAgICAgICAgIG91dC5wcmludGxuKHJlc3VsdCk7Ci0gICAgICAgIAorCiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Nyb3NzQ29udGV4dERpc3BhdGNoTG9uZ2VzdENvbnRleHRSb290TWF0Y2gvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Nyb3NzQ29udGV4dERpc3BhdGNoTG9uZ2VzdENvbnRleHRSb290TWF0Y2gvV2ViVGVzdC5qYXZhCmluZGV4IDE5NTMyY2EuLmU5NTFhMjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jcm9zc0NvbnRleHREaXNwYXRjaExvbmdlc3RDb250ZXh0Um9vdE1hdGNoL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY3Jvc3NDb250ZXh0RGlzcGF0Y2hMb25nZXN0Q29udGV4dFJvb3RNYXRjaC9XZWJUZXN0LmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgaG9zdCA9IGFyZ3NbMF07CiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBHbGFzc0Zpc2ggSXNzdWUgMzI4NCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTU3LDEzICs1NywxMyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQgKyAiLzEyMy9Gcm9tIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsgCisgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZSBjb2RlLiBFeHBlY3RlZDogMjAwIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsIHJlY2VpdmVkOiAiICsgcmVzcG9uc2VDb2RlKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Nyb3NzQ29udGV4dERpc3BhdGNoTG9uZ2VzdENvbnRleHRSb290TWF0Y2gvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jcm9zc0NvbnRleHREaXNwYXRjaExvbmdlc3RDb250ZXh0Um9vdE1hdGNoL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMWE3NDdmMi4uYjBmNDRkZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Nyb3NzQ29udGV4dERpc3BhdGNoTG9uZ2VzdENvbnRleHRSb290TWF0Y2gvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY3Jvc3NDb250ZXh0RGlzcGF0Y2hMb25nZXN0Q29udGV4dFJvb3RNYXRjaC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNCArMTUsMTQgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tY3Jvc3MtY29udGV4dC1kaXNwYXRjaC1sb25nZXN0LWNvbnRleHQtcm9vdC1tYXRjaCIvPgogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImZyb20ud2FyIiB2YWx1ZT0iZnJvbS53YXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jcm9zc0NvbnRleHREaXNwYXRjaExvbmdlc3RDb250ZXh0Um9vdE1hdGNoL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jcm9zc0NvbnRleHREaXNwYXRjaExvbmdlc3RDb250ZXh0Um9vdE1hdGNoL2J1aWxkLnhtbAppbmRleCA4NTQ0ZjBjLi4xY2MwN2ZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY3Jvc3NDb250ZXh0RGlzcGF0Y2hMb25nZXN0Q29udGV4dFJvb3RNYXRjaC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Nyb3NzQ29udGV4dERpc3BhdGNoTG9uZ2VzdENvbnRleHRSb290TWF0Y2gvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KICAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHtmcm9tLndhcn0iLz4KQEAgLTQ4LDggKzQ4LDggQEAKICAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiLz4KICAgICAgICAgPGVhciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIiBhcHB4bWw9IiR7YXBwbGljYXRpb24ueG1sfSI+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSIgaW5jbHVkZXM9Iioud2FyIi8+Ci0gICAgICAgIDwvZWFyPiAKLSAgICA8L3RhcmdldD4gCisgICAgICAgIDwvZWFyPgorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgpAQCAtNjIsOCArNjIsOCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgIAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDcgKzc0LDcgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY3NyZkZpbHRlci9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY3NyZkZpbHRlci9XZWJUZXN0LmphdmEKaW5kZXggYTIzOTI1MS4uMDI0ZjY2MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NzcmZGaWx0ZXIvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jc3JmRmlsdGVyL1dlYlRlc3QuamF2YQpAQCAtNDMsNyArNDMsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIElUIEdMQVNTRklTSC0xNjc2OCIpOwpAQCAtNzksNyArNzksNyBAQAogICAgICAgICAgICAgc2IuYXBwZW5kKCI/IikuYXBwZW5kKHBhcmFtKTsKICAgICAgICAgfQogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTChzYi50b1N0cmluZygpKTsKLSAgICAgCisKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwogCiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NzcmZGaWx0ZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jc3JmRmlsdGVyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYzVlNGU3Ni4uN2M2ZTc2MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NzcmZGaWx0ZXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY3NyZkZpbHRlci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWNzcmYtZmlsdGVyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY3NyZkZpbHRlci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY3NyZkZpbHRlci9idWlsZC54bWwKaW5kZXggMDVjNzFkOC4uODJhZTAwNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NzcmZGaWx0ZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jc3JmRmlsdGVyL2J1aWxkLnhtbApAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YmFzZWRpcn0iIGluY2x1ZGVzPSJXZWJUZXN0Ki5jbGFzcyIvPgogICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDUsMjMgKzQ1LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzMsMTAgKzczLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NzcmZGaWx0ZXIvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2NzcmZGaWx0ZXIvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDFjNTUzNzIuLmJmNDUxNDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9jc3JmRmlsdGVyL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvY3NyZkZpbHRlci9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTIyLDcgKzIyLDcgQEAKICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8zXzAueHNkIgogICAgICAgICAgdmVyc2lvbj0iMy4wIj4KLSAgICAgCisKICAgICA8ZmlsdGVyPgogICAgICAgICA8ZmlsdGVyLW5hbWU+Y3NyZjwvZmlsdGVyLW5hbWU+CiAgICAgICAgIDxmaWx0ZXItY2xhc3M+b3JnLmFwYWNoZS5jYXRhbGluYS5maWx0ZXJzLkNzcmZQcmV2ZW50aW9uRmlsdGVyPC9maWx0ZXItY2xhc3M+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGVmYXVsdENoYXJzZXQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RlZmF1bHRDaGFyc2V0L1dlYlRlc3QuamF2YQppbmRleCA2MzcxNDk0Li5kMTU3MDM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGVmYXVsdENoYXJzZXQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kZWZhdWx0Q2hhcnNldC9XZWJUZXN0LmphdmEKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgNDkyMTMyOSIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTUzLDggKzUzLDggQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImRlZmF1bHQtY2hhcnNldCIpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2VKc3AoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImRlZmF1bHQtY2hhcnNldCB0ZXN0IGZhaWxlZC4iKTsKQEAgLTY0LDcgKzY0LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlSnNwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgICAKKwogICAgICAgICBTb2NrZXQgc29jayA9IG5ldyBTb2NrZXQoaG9zdCwgbmV3IEludGVnZXIocG9ydCkuaW50VmFsdWUoKSk7CiAgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IHNvY2suZ2V0T3V0cHV0U3RyZWFtKCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigoIkdFVCAiICsgY29udGV4dFJvb3QgKyAiL2pzcC9nZXRSZXF1ZXN0Q2hhcnNldC5qc3AiCkBAIC03Miw3ICs3Miw3IEBACiAgICAgICAgIG9zLndyaXRlKCgiR0VUICIgKyBjb250ZXh0Um9vdCArICIvanNwL2dldFJlcXVlc3RDaGFyc2V0LmpzcCIKICAgICAgICAgICAgICsgIiBIVFRQLzEuMFxuIikuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gc29jay5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBiaXMgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kZWZhdWx0Q2hhcnNldC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RlZmF1bHRDaGFyc2V0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYWQ1YTQyNi4uNWJmODU1NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RlZmF1bHRDaGFyc2V0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RlZmF1bHRDaGFyc2V0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1kZWZhdWx0LWNoYXJzZXQiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWRlZmF1bHQtY2hhcnNldCIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGVmYXVsdENoYXJzZXQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RlZmF1bHRDaGFyc2V0L2J1aWxkLnhtbAppbmRleCA1MjVjNjI3Li5jMzk3NzZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGVmYXVsdENoYXJzZXQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kZWZhdWx0Q2hhcnNldC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDIzICs0MiwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTcwLDEwICs3MCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kZWZhdWx0Q29udGVudFR5cGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kZWZhdWx0Q29udGVudFR5cGUvYnVpbGQucHJvcGVydGllcwppbmRleCBhNDcyNWY5Li41N2QzNmEyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGVmYXVsdENvbnRlbnRUeXBlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RlZmF1bHRDb250ZW50VHlwZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWRlZmF1bHQtY29udGVudC10eXBlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGVmYXVsdENvbnRlbnRUeXBlL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kZWZhdWx0Q29udGVudFR5cGUvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDRkOWQ0YTAuLjk4ZDE2ODQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kZWZhdWx0Q29udGVudFR5cGUvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kZWZhdWx0Q29udGVudFR5cGUvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yNyw3ICsyNyw3IEBACiAgICAgICAgIDxkaXNwbGF5LW5hbWU+VGVzdFNlcnZsZXQ8L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5UZXN0U2VydmxldDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz5UZXN0U2VydmxldDwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAKICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+VGVzdFNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kZWZhdWx0S2VlcEFsaXZlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGVmYXVsdEtlZXBBbGl2ZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDFjYTUxYTQuLjI3MDc3YzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kZWZhdWx0S2VlcEFsaXZlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RlZmF1bHRLZWVwQWxpdmUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTQgKzE1LDE0IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWRlZmF1bHRLZWVwQWxpdmUiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWRlZmF1bHRLZWVwQWxpdmUiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvd2ViLWRlZmF1bHRLZWVwQWxpdmUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kZWZhdWx0S2VlcEFsaXZlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kZWZhdWx0S2VlcEFsaXZlL2J1aWxkLnhtbAppbmRleCBmNTQ5MWIxLi4zMTA1NTI4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGVmYXVsdEtlZXBBbGl2ZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RlZmF1bHRLZWVwQWxpdmUvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAKICAgICAgICAgICA8amF2YWMKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kZWZhdWx0UmVzcG9uc2VUeXBlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kZWZhdWx0UmVzcG9uc2VUeXBlL1dlYlRlc3QuamF2YQppbmRleCAzZjAyM2Y1Li5jY2YwMmYwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGVmYXVsdFJlc3BvbnNlVHlwZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RlZmF1bHRSZXNwb25zZVR5cGUvV2ViVGVzdC5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJkZWZhdWx0UmVzcG9uc2VUeXBlIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDUsOCArNDUsOCBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0ICsgIi90ZXN0Lnh5eiIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RlZmF1bHRSZXNwb25zZVR5cGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kZWZhdWx0UmVzcG9uc2VUeXBlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYjRhMzE3OC4uZDUzNTNhOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RlZmF1bHRSZXNwb25zZVR5cGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGVmYXVsdFJlc3BvbnNlVHlwZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWRlZmF1bHQtcmVzcG9uc2UtdHlwZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RlZmF1bHRSZXNwb25zZVR5cGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RlZmF1bHRSZXNwb25zZVR5cGUvYnVpbGQueG1sCmluZGV4IDFmZTdhMjcuLmJmYjQzNTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kZWZhdWx0UmVzcG9uc2VUeXBlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGVmYXVsdFJlc3BvbnNlVHlwZS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDE2ICs0NCwxNiBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPGNvcHkgZmlsZT0iZG9jcm9vdC90ZXN0Lnh5eiIgCisgICAgICAgIDxjb3B5IGZpbGU9ImRvY3Jvb3QvdGVzdC54eXoiCiAgICAgICAgICAgICAgIHRvZGlyPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9kb2Nyb290Ii8+CiAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CkBAIC03Myw3ICs3Myw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgpAQCAtODcsMTAgKzg3LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVzdG9yZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kZWZhdWx0U2VydmxldFdpdGhTdWJkaXJlY3RvcnlNYXBwaW5nL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kZWZhdWx0U2VydmxldFdpdGhTdWJkaXJlY3RvcnlNYXBwaW5nL1dlYlRlc3QuamF2YQppbmRleCAyMTM5N2VhLi44MGJjMjFhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGVmYXVsdFNlcnZsZXRXaXRoU3ViZGlyZWN0b3J5TWFwcGluZy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RlZmF1bHRTZXJ2bGV0V2l0aFN1YmRpcmVjdG9yeU1hcHBpbmcvV2ViVGVzdC5qYXZhCkBAIC0yNCw5ICsyNCw5IEBACiAgKiBJc3N1ZTogR0xBU1NGSVNILTE3NDEzCiAgKi8KIHB1YmxpYyBjbGFzcyBXZWJUZXN0IHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX05BTUUgPSAid2ViLWRlZmF1bHQtc2VydmxldC13aXRoLXN1YmRpcmVjdG9yeS1tYXBwaW5nIjsKLSAgICAKKwogICAgIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdD0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCkBAIC0zNCw3ICszNCw3IEBACiAKICAgICAgICAgLy8gVGhlIHN0YXQgcmVwb3J0ZXIgd3JpdGVzIG91dCB0aGUgdGVzdCBpbmZvIGFuZCByZXN1bHRzCiAgICAgICAgIC8vIGludG8gdGhlIHRvcC1sZXZlbCBxdWlja2xvb2sgZGlyZWN0b3J5IGR1cmluZyBhIHJ1bi4KLSAgICAgIAorCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIkRlZmF1bHRTZXJ2bGV0IHdpdGggc3ViLWRpcmVjdG9yeSBtYXBwaW5nLiIpOwogCiAgICAgICAgIFN0cmluZyBob3N0ID0gYXJnc1swXTsKQEAgLTQzLDExICs0MywxMSBAQAogCiAgICAgICAgIGludCBwb3J0ID0gbmV3IEludGVnZXIocG9ydFMpLmludFZhbHVlKCk7CiAgICAgICAgIFN0cmluZyBuYW1lOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgYm9vbGVhbiBvayA9IGdvR2V0KGhvc3QsIHBvcnQsICJGcm9tIGluZGV4LmpzcCIsIGNvbnRleHRSb290ICsgIi9pbmRleC5qc3AiICk7CiAgICAgICAgICAgICBvayA9IG9rICYmIGdvR2V0KGhvc3QsIHBvcnQsICJGcm9tIHRlc3QudHh0IiwgY29udGV4dFJvb3QgKyAiL3N0YXRpYy90ZXN0LnR4dCIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwKICAgICAgICAgICAgICAgICAgICAgKChvayk/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCkpOwogICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdCkgewpAQCAtNjksNyArNjksNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCgiR0VUICIgKyBjb250ZXh0UGF0aCArICIgSFRUUC8xLjBcbiIpKTsKICAgICAgICAgICAgIG9zLndyaXRlKCgiR0VUICIgKyBjb250ZXh0UGF0aCArICIgSFRUUC8xLjBcbiIpLmdldEJ5dGVzKCkpOwogICAgICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHMuZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJpcyA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKICAgICAgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKQEAgLTg1LDExICs4NSwxMSBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGV4KXsKLSAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOyAgIAorICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJUZXN0IFVOUFJFRElDVEVELUZBSUxVUkUiKTsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBvazsKICAgIH0KLSAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kZWZhdWx0U2VydmxldFdpdGhTdWJkaXJlY3RvcnlNYXBwaW5nL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGVmYXVsdFNlcnZsZXRXaXRoU3ViZGlyZWN0b3J5TWFwcGluZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGNjMzViZTUuLjU2NjIyOTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kZWZhdWx0U2VydmxldFdpdGhTdWJkaXJlY3RvcnlNYXBwaW5nL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RlZmF1bHRTZXJ2bGV0V2l0aFN1YmRpcmVjdG9yeU1hcHBpbmcvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTQgKzE1LDE0IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWRlZmF1bHQtc2VydmxldC13aXRoLXN1YmRpcmVjdG9yeS1tYXBwaW5nIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1kZWZhdWx0LXNlcnZsZXQtd2l0aC1zdWJkaXJlY3RvcnktbWFwcGluZyIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii93ZWItZGlyZWN0b3J5TGlzdGluZyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RlZmF1bHRTZXJ2bGV0V2l0aFN1YmRpcmVjdG9yeU1hcHBpbmcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RlZmF1bHRTZXJ2bGV0V2l0aFN1YmRpcmVjdG9yeU1hcHBpbmcvYnVpbGQueG1sCmluZGV4IGEwMmM5NDUuLmU0MWJhNzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kZWZhdWx0U2VydmxldFdpdGhTdWJkaXJlY3RvcnlNYXBwaW5nL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGVmYXVsdFNlcnZsZXRXaXRoU3ViZGlyZWN0b3J5TWFwcGluZy9idWlsZC54bWwKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NSwyMCArNDUsMjAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgIDxqYXZhYwogICAgICAgICAgICAgc3JjZGlyPSIuIgpAQCAtNzUsMTAgKzc1LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RlbGVnYXRlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kZWxlZ2F0ZS9XZWJUZXN0LmphdmEKaW5kZXggOGY3ODNlZS4uZDNhNTZhMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RlbGVnYXRlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGVsZWdhdGUvV2ViVGVzdC5qYXZhCkBAIC0yMywxMCArMjMsMTAgQEAKICAqCiAgKi8KIHB1YmxpYyBjbGFzcyBXZWJUZXN0IHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGludCBjb3VudCA9IDA7CiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IEVYUEVDVEVEX0NPVU5UID0gMjsKLSAgICAKKwogICAgIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdD0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCkBAIC0zNCw3ICszNCw3IEBACiAKICAgICAgICAgLy8gVGhlIHN0YXQgcmVwb3J0ZXIgd3JpdGVzIG91dCB0aGUgdGVzdCBpbmZvIGFuZCByZXN1bHRzCiAgICAgICAgIC8vIGludG8gdGhlIHRvcC1sZXZlbCBxdWlja2xvb2sgZGlyZWN0b3J5IGR1cmluZyBhIHJ1bi4KLSAgICAgIAorCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIkNsYXNzbG9hZGVyIGRlbGVnYXRlIGZsYWciKTsKIAogICAgICAgICBTdHJpbmcgaG9zdCA9IGFyZ3NbMF07CkBAIC00MywxNiArNDMsMTYgQEAKIAogICAgICAgICBpbnQgcG9ydCA9IG5ldyBJbnRlZ2VyKHBvcnRTKS5pbnRWYWx1ZSgpOwogICAgICAgICBTdHJpbmcgbmFtZTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGdvR2V0KGhvc3QsIHBvcnQsICJkZWxlZ2F0ZS1mbGFnIiwgY29udGV4dFJvb3QgKyAiL1NlcnZsZXRUZXN0IiApOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGNvdW50ICE9IEVYUEVDVEVEX0NPVU5UKXsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJkZWxlZ2F0ZSIsIHN0YXQuRkFJTCk7Ci0gICAgICAgIH0gICAgICAgICAgIAorICAgICAgICB9CiAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoIndlYi9kZWxlZ2F0ZUZsYWctLS0+IGV4cGVjdCAiICsgRVhQRUNURURfQ09VTlQgKyAiIFBBU1MiKTsKICAgICB9CkBAIC02Niw3ICs2Niw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigoIkdFVCAiICsgY29udGV4dFBhdGggKyAiIEhUVFAvMS4wXG4iKSk7CiAgICAgICAgIG9zLndyaXRlKCgiR0VUICIgKyBjb250ZXh0UGF0aCArICIgSFRUUC8xLjBcbiIpLmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHMuZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYmlzID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CkBAIC03OCwyMCArNzgsMjAgQEAKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obGluZU51bSArICI6ICAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBzdGF0dXMgPSBsaW5lLnN1YnN0cmluZyhpbmRleCsyKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5lcXVhbHNJZ25vcmVDYXNlKCJQQVNTIikpewogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMocmVzdWx0ICsiOiAiICsgbGluZS5zdWJzdHJpbmcoMCxpbmRleCksIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhyZXN1bHQgKyI6ICIgKyBsaW5lLnN1YnN0cmluZygwLGluZGV4KSwgc3RhdC5GQUlMKTsgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMocmVzdWx0ICsiOiAiICsgbGluZS5zdWJzdHJpbmcoMCxpbmRleCksIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBsaW5lTnVtKys7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBleCl7Ci0gICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsgICAKKyAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiVGVzdCBVTlBSRURJQ1RFRC1GQUlMVVJFIik7CiAgICAgICAgICB9CiAgICB9Ci0gIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGVsZWdhdGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kZWxlZ2F0ZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDA4MjlkZGQuLjU2YmNkYTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kZWxlZ2F0ZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kZWxlZ2F0ZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNCArMTUsMTQgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZGVsZWdhdGUiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWRlbGVnYXRlIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImdsYXNzZmlzaC13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9nbGFzc2Zpc2gtd2ViLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RlbGVnYXRlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kZWxlZ2F0ZS9idWlsZC54bWwKaW5kZXggNzk3OTMxYi4uYWFjMDc3NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RlbGVnYXRlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGVsZWdhdGUvYnVpbGQueG1sCkBAIC00MSw5ICs0MSw5IEBACiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4vc2hhcmVkL3Rlc3QiCiAgICAgICAgICAgICAgICBkZXN0ZGlyPSIuL3NoYXJlZCIgaW5jbHVkZXM9IiouamF2YSIvPgogICAgICAgICA8amFyIGRlc3RmaWxlPSJzaGFyZWQuamFyIiBiYXNlZGlyPSJzaGFyZWQiLz4KLSAgICAgICAgPGNvcHkgZmlsZT0ic2hhcmVkLmphciIgCisgICAgICAgIDxjb3B5IGZpbGU9InNoYXJlZC5qYXIiCiAgICAgICAgICAgICAgIHRvZGlyPSIke2Vudi5TMUFTX0hPTUV9L2xpYiIvPgotICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQtc2VydmVyLWluc3RhbmNlLWNvbW1vbiIvPiAgICAgICAgCisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXItaW5zdGFuY2UtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InRlc3Qtc3VuLXdlYi14bWwiPgpAQCAtNjEsNyArNjEsNyBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1biIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtODEsMTAgKzgxLDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCkBAIC05NCwxNCArOTQsMTQgQEAKIAogICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7c3VuLXdlYi54bWx9IiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2dsYXNzZmlzaC13ZWIueG1sfSIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC0xMTMsMTQgKzExMywxNCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RvcmUtYXBwc2VydiIgZGVwZW5kcz0ic2V0dXAtYXBwc2VydiI+CiAgICAgICAgIDxkZWxldGUgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9saWIvc2hhcmVkLmphciIvPgotICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQtc2VydmVyLWluc3RhbmNlLWNvbW1vbiIvPiAgICAgICAgCisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXItaW5zdGFuY2UtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kZWxlZ2F0ZS9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGVsZWdhdGUvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDE5NmE2MDQuLjgxZTYyZTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kZWxlZ2F0ZS9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RlbGVnYXRlL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjIsMTIgKzIyLDEyIEBACiAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIgogICAgICAgICAgdmVyc2lvbj0iMi40Ij4KLSAgICAgCisKICAgICA8c2VydmxldD4KICAgICAgICAgPGRpc3BsYXktbmFtZT5TZXJ2bGV0VGVzdDwvZGlzcGxheS1uYW1lPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuU2VydmxldFRlc3Q8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCisgICAgPC9zZXJ2bGV0PgogICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L1NlcnZsZXRUZXN0PC91cmwtcGF0dGVybj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kZWxlZ2F0ZS9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGVsZWdhdGUvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCmluZGV4IGVjZWE5NmIuLjBhNTFkM2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kZWxlZ2F0ZS9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RlbGVnYXRlL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQpAQCAtMjUsMTEgKzI1LDExIEBACiBwdWJsaWMgY2xhc3MgU2VydmxldFRlc3QgZXh0ZW5kcyBIdHRwU2VydmxldHsKIAogICAgIHByaXZhdGUgU3RyaW5nIHN0YXR1cyA9ICJEZWxlZ2F0ZVRlc3Q6OkZBSUwiOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuaW5pdF0iKTsgICAgICAgIAotICAgICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5pbml0XSIpOworCiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CkBAIC0zNywxMSArMzcsMTEgQEAKICAgICAgICAgZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7ICAgICAgICAKKyAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuZG9Qb3N0XSIpOwotICAgICAgICAKKwogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7Ci0gICAgICAgIAorCiAgICAgICAgIERlbGVnYXRlVGVzdCBkZWxlZ2F0ZSA9IG51bGw7CiAgICAgICAgIHRyeXsKICAgICAgICAgICAgIENsYXNzIGNsYXp6ID0gQ2xhc3MuZm9yTmFtZSgidGVzdC5EZWxlZ2F0ZVRlc3QiKTsKQEAgLTU0LDcgKzU0LDcgQEAKIAogICAgICAgICBpZiAoZGVsZWdhdGUgIT0gbnVsbCl7CiAgICAgICAgICAgICB0cnl7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZWxlZ2F0ZTogIiArIGRlbGVnYXRlLmdldENoaWxkTmFtZSgpKTsgICAgICAgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZWxlZ2F0ZTogIiArIGRlbGVnYXRlLmdldENoaWxkTmFtZSgpKTsKICAgICAgICAgICAgICAgICBzdGF0dXMgPSAiRGVsZWdhdGVUZXN0OjpQQVNTIjsKICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCl7CiAgICAgICAgICAgICAgICAgc3RhdHVzID0gIkRlbGVnYXRlVGVzdDo6RkFJTCI7CkBAIC03MiwxMyArNzIsMTMgQEAKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgc3RhdHVzID0gIk92ZXJyaWRhYmxlSmF2YXg6OlBBU1MiOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KXsKICAgICAgICAgICAgIHN0YXR1cyA9ICJPdmVycmlkYWJsZUphdmF4OjpGQUlMIjsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CiAgICAgICAgIG91dC5wcmludGxuKHN0YXR1cyk7Ci0gICAgICAgIAorCiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGlyTGlzdGluZy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGlyTGlzdGluZy9XZWJUZXN0LmphdmEKaW5kZXggZDY5MzRjOC4uMjYzMWEwZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Rpckxpc3RpbmcvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kaXJMaXN0aW5nL1dlYlRlc3QuamF2YQpAQCAtMjQsOSArMjQsOSBAQAogICogQnVnIDYxNzI4MzkKICAqLwogcHVibGljIGNsYXNzIFdlYlRlc3QgewotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IEVYUEVDVEVEX0NPVU5UID0gMTsKLSAgICAKKwogICAgIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdD0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCkBAIC0zNCw3ICszNCw3IEBACiAKICAgICAgICAgLy8gVGhlIHN0YXQgcmVwb3J0ZXIgd3JpdGVzIG91dCB0aGUgdGVzdCBpbmZvIGFuZCByZXN1bHRzCiAgICAgICAgIC8vIGludG8gdGhlIHRvcC1sZXZlbCBxdWlja2xvb2sgZGlyZWN0b3J5IGR1cmluZyBhIHJ1bi4KLSAgICAgIAorCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlN0YW5kYWxvbmUgU2Vzc2lvbiBJbnZhbGlkIHdhciB0ZXN0Iik7CiAKICAgICAgICAgU3RyaW5nIGhvc3QgPSBhcmdzWzBdOwpAQCAtNDMsMTAgKzQzLDEwIEBACiAKICAgICAgICAgaW50IHBvcnQgPSBuZXcgSW50ZWdlcihwb3J0UykuaW50VmFsdWUoKTsKICAgICAgICAgU3RyaW5nIG5hbWU7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBib29sZWFuIG9rID0gZ29HZXQoaG9zdCwgcG9ydCwgIiIsIGNvbnRleHRSb290ICsgIi8iICk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndlYi1kaXJlY3RvcnlMaXN0aW5nIiwKICAgICAgICAgICAgICAgICAgICAgKChvayk/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCkpOwogICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdCkgewpAQCAtNjksNyArNjksNyBAQAogICAgICAgICAgICAgb3Mud3JpdGUoKCJHRVQgIiArIGNvbnRleHRQYXRoICsgIiBIVFRQLzEuMFxuIikuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgICAgICBvcy53cml0ZSgiQXV0aG9yaXphdGlvbjogQmFzaWMgYWpKbFpUcHFNbVZsXG4iLmdldEJ5dGVzKCkpOwogICAgICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHMuZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJpcyA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKICAgICAgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKQEAgLTg2LDExICs4NiwxMSBAQAogICAgICAgICAgICAgICAgIGxpbmVOdW0rKzsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGV4KXsKLSAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOyAgIAorICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJUZXN0IFVOUFJFRElDVEVELUZBSUxVUkUiKTsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiAoY291bnQgPT0gRVhQRUNURURfQ09VTlQpOwogICAgfQotICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Rpckxpc3RpbmcvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kaXJMaXN0aW5nL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMmViY2UyOS4uODQ3N2QxNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Rpckxpc3RpbmcvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGlyTGlzdGluZy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNCArMTUsMTQgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZGlyZWN0b3J5TGlzdGluZyIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZGlyZWN0b3J5TGlzdGluZyIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii93ZWItZGlyZWN0b3J5TGlzdGluZyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Rpckxpc3RpbmcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Rpckxpc3RpbmcvYnVpbGQueG1sCmluZGV4IGRjZTRiNzUuLjNmMjhiMGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kaXJMaXN0aW5nL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGlyTGlzdGluZy9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDIwICs0MiwyMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICAgPGphdmFjCiAgICAgICAgICAgICBzcmNkaXI9Ii4iCkBAIC03MiwxMCArNzIsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGlyTGlzdGluZy9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGlyTGlzdGluZy9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggNmY0M2UwOC4uOTNlMjUxOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Rpckxpc3RpbmcvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kaXJMaXN0aW5nL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjMsNyArMjMsNyBAQAogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiCiAgICAgICAgICB2ZXJzaW9uPSIyLjQiPgogCi0gICAgPGxpc3RlbmVyPiAgICAgCisgICAgPGxpc3RlbmVyPgogICAgICAgICA8bGlzdGVuZXItY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDwvbGlzdGVuZXItY2xhc3M+CiAgICAgPC9saXN0ZW5lcj4KIApAQCAtMzEsNyArMzEsNyBAQAogICAgICAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXRUZXN0PC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAKICAgICA8c2VydmxldD4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5kZWZhdWx0PC9zZXJ2bGV0LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGlyTGlzdGluZy9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGlyTGlzdGluZy9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKaW5kZXggODYwYmNjNC4uZTdhN2MwOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Rpckxpc3Rpbmcvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kaXJMaXN0aW5nL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQpAQCAtMzMsNyArMzMsNyBAQAogcHVibGljIGNsYXNzIFNlcnZsZXRUZXN0IGV4dGVuZHMgSHR0cFNlcnZsZXQgaW1wbGVtZW50cyBIdHRwU2Vzc2lvbkxpc3RlbmVyIHsKIAogICAgIHByaXZhdGUgU2VydmxldENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmluaXRdIik7CkBAIC00NCw3ICs0NCw3IEBACiAgICAgICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAgICAgICAgCisgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmRvUG9zdF0iKTsKICAgICB9CiAKQEAgLTUyLDcgKzUyLDcgQEAKICAgICBwdWJsaWMgdm9pZCBzZXNzaW9uQ3JlYXRlZChqYWthcnRhLnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbkV2ZW50IGh0dHBTZXNzaW9uRXZlbnQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5zZXNzaW9uQ3JlYXRlZF0iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXNzaW9uRGVzdHJveWVkKGpha2FydGEuc2VydmxldC5odHRwLkh0dHBTZXNzaW9uRXZlbnQgaHR0cFNlc3Npb25FdmVudCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LnNlc3Npb25EZXN0cm95ZWRdIik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Rpc2FibGVEZWZhdWx0RXJyb3JQYWdlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kaXNhYmxlRGVmYXVsdEVycm9yUGFnZS9XZWJUZXN0LmphdmEKaW5kZXggN2E5OTU1Ny4uODc3MDdiNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Rpc2FibGVEZWZhdWx0RXJyb3JQYWdlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGlzYWJsZURlZmF1bHRFcnJvclBhZ2UvV2ViVGVzdC5qYXZhCkBAIC00Miw3ICs0Miw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEdsYXNzRmlzaCBJVCAxMTQyMyIpOwogCkBAIC02Niw3ICs2Niw3IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24geyAgICAgICAgIAorICAgIHByaXZhdGUgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgc29jayA9IG5ldyBTb2NrZXQoaG9zdCwgbmV3IEludGVnZXIocG9ydCkuaW50VmFsdWUoKSk7CiAgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IHNvY2suZ2V0T3V0cHV0U3RyZWFtKCk7CiAgICAgICAgIFN0cmluZyBnZXQgPSAiR0VUICIgKyBjb250ZXh0Um9vdCArICIvdGVzdCIgKyAiIEhUVFAvMS4wXG4iOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Rpc2FibGVEZWZhdWx0RXJyb3JQYWdlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGlzYWJsZURlZmF1bHRFcnJvclBhZ2UvYnVpbGQucHJvcGVydGllcwppbmRleCA2MzRlODEzLi4zZmQzZDgzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGlzYWJsZURlZmF1bHRFcnJvclBhZ2UvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGlzYWJsZURlZmF1bHRFcnJvclBhZ2UvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1kaXNhYmxlLWRlZmF1bHQtZXJyb3ItcGFnZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Rpc2FibGVEZWZhdWx0RXJyb3JQYWdlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kaXNhYmxlRGVmYXVsdEVycm9yUGFnZS9idWlsZC54bWwKaW5kZXggMDBmZGFkMy4uYzM5Nzc2ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Rpc2FibGVEZWZhdWx0RXJyb3JQYWdlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGlzYWJsZURlZmF1bHRFcnJvclBhZ2UvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwyMyArNDIsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MCwxMCArNzAsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGlzdHJpYnV0YWJsZVdlYmFwcEVuZm9yY2VTZXJpYWxpemFibGVTZXNzaW9uQXR0cnMvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Rpc3RyaWJ1dGFibGVXZWJhcHBFbmZvcmNlU2VyaWFsaXphYmxlU2Vzc2lvbkF0dHJzL1dlYlRlc3QuamF2YQppbmRleCBiMGQwMWUzLi41NWJjOTE1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGlzdHJpYnV0YWJsZVdlYmFwcEVuZm9yY2VTZXJpYWxpemFibGVTZXNzaW9uQXR0cnMvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kaXN0cmlidXRhYmxlV2ViYXBwRW5mb3JjZVNlcmlhbGl6YWJsZVNlc3Npb25BdHRycy9XZWJUZXN0LmphdmEKQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgNDk4MTAyOCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwpAQCAtNTYsNyArNTYsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgICsgIi9UZXN0U2VydmxldCI7CiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGlzdHJpYnV0YWJsZVdlYmFwcEVuZm9yY2VTZXJpYWxpemFibGVTZXNzaW9uQXR0cnMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kaXN0cmlidXRhYmxlV2ViYXBwRW5mb3JjZVNlcmlhbGl6YWJsZVNlc3Npb25BdHRycy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGI0MmEwMDUuLjRiNDc5NzkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kaXN0cmlidXRhYmxlV2ViYXBwRW5mb3JjZVNlcmlhbGl6YWJsZVNlc3Npb25BdHRycy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kaXN0cmlidXRhYmxlV2ViYXBwRW5mb3JjZVNlcmlhbGl6YWJsZVNlc3Npb25BdHRycy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWRpc3RyaWJ1dGFibGUtd2ViYXBwLWVuZm9yY2Utc2VyaWFsaXphYmxlLXNlc3Npb24tYXR0cnMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kaXN0cmlidXRhYmxlV2ViYXBwRW5mb3JjZVNlcmlhbGl6YWJsZVNlc3Npb25BdHRycy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZGlzdHJpYnV0YWJsZVdlYmFwcEVuZm9yY2VTZXJpYWxpemFibGVTZXNzaW9uQXR0cnMvYnVpbGQueG1sCmluZGV4IDg1NDJlOTEuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kaXN0cmlidXRhYmxlV2ViYXBwRW5mb3JjZVNlcmlhbGl6YWJsZVNlc3Npb25BdHRycy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Rpc3RyaWJ1dGFibGVXZWJhcHBFbmZvcmNlU2VyaWFsaXphYmxlU2Vzc2lvbkF0dHJzL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTcgKzQyLDE3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZG9zQnJva2VuUG9zdC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Rvc0Jyb2tlblBvc3QvYnVpbGQucHJvcGVydGllcwppbmRleCAzY2IxNGIzLi5mMzZjZjEyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZG9zQnJva2VuUG9zdC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kb3NCcm9rZW5Qb3N0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE0ICsxNSwxNCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1kb3NCcm9rZW5Qb3N0Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1kb3NCcm9rZW5Qb3N0Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iL3dlYi1kb3NCcm9rZW5Qb3N0Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZG9zQnJva2VuUG9zdC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZG9zQnJva2VuUG9zdC9idWlsZC54bWwKaW5kZXggNjY3ODBlYi4uYzdjNWM2NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Rvc0Jyb2tlblBvc3QvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kb3NCcm9rZW5Qb3N0L2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTMgKzQyLDEzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtNTgsNyArNTgsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kb3NCcm9rZW5Qb3N0L2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kb3NCcm9rZW5Qb3N0L2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCAwY2ZlODEyLi44MWIxNDU1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZG9zQnJva2VuUG9zdC9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Rvc0Jyb2tlblBvc3QvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yMyw3ICsyMyw3IEBACiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCIKICAgICAgICAgIHZlcnNpb249IjIuNCI+CiAKLSAgICA8bGlzdGVuZXI+ICAgICAKKyAgICA8bGlzdGVuZXI+CiAgICAgICAgIDxsaXN0ZW5lci1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0PC9saXN0ZW5lci1jbGFzcz4KICAgICA8L2xpc3RlbmVyPgogCkBAIC0zMSw3ICszMSw3IEBACiAgICAgICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldFRlc3Q8L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0PC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAorICAgIDwvc2VydmxldD4KIAogICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Rvc0Jyb2tlblBvc3Qvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Rvc0Jyb2tlblBvc3Qvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCmluZGV4IDc4NzUxYTcuLjk2NjA1Y2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kb3NCcm9rZW5Qb3N0L3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZG9zQnJva2VuUG9zdC9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKQEAgLTMzLDcgKzMzLDcgQEAKIHB1YmxpYyBjbGFzcyBTZXJ2bGV0VGVzdCBleHRlbmRzIEh0dHBTZXJ2bGV0IGltcGxlbWVudHMgSHR0cFNlc3Npb25MaXN0ZW5lciB7CiAKICAgICBwcml2YXRlIFNlcnZsZXRDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5pbml0XSIpOwpAQCAtNDQsNyArNDQsNyBAQAogICAgICAgICBkb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgICAgICAgIAorICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5kb1Bvc3RdIik7CiAgICAgICAgIEh0dHBTZXNzaW9uIHNlc3Npb24gPSByZXF1ZXN0LmdldFNlc3Npb24odHJ1ZSk7CiAKQEAgLTYyLDcgKzYyLDcgQEAKICAgICBwdWJsaWMgdm9pZCBzZXNzaW9uQ3JlYXRlZChqYWthcnRhLnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbkV2ZW50IGh0dHBTZXNzaW9uRXZlbnQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5zZXNzaW9uQ3JlYXRlZF0iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXNzaW9uRGVzdHJveWVkKGpha2FydGEuc2VydmxldC5odHRwLkh0dHBTZXNzaW9uRXZlbnQgaHR0cFNlc3Npb25FdmVudCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LnNlc3Npb25EZXN0cm95ZWRdIik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Rvc1Nsb3dDbGllbnQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Rvc1Nsb3dDbGllbnQvV2ViVGVzdC5qYXZhCmluZGV4IDJiMTc3NTUuLjcwNzNiZDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kb3NTbG93Q2xpZW50L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZG9zU2xvd0NsaWVudC9XZWJUZXN0LmphdmEKQEAgLTE4LDMwICsxOCwzMCBAQAogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmF0b21pYy5BdG9taWNJbnRlZ2VyOwogCiBwdWJsaWMgY2xhc3MgV2ViVGVzdCBleHRlbmRzIFRocmVhZHsKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgVEVTVF9OQU1FID0gImRvcy1zbG93LWNsaWVudCI7CisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIFRFU1RfTkFNRSA9ICJkb3Mtc2xvdy1jbGllbnQiOwogCi0JcHVibGljIHN0YXRpYyBmaW5hbCBBdG9taWNJbnRlZ2VyIGNvdW50ID0gbmV3IEF0b21pY0ludGVnZXIoKTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEF0b21pY0ludGVnZXIgY291bnQgPSBuZXcgQXRvbWljSW50ZWdlcigpOwogCi0Jc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIsIFRFU1RfTkFNRSk7CisgICAgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIsIFRFU1RfTkFNRSk7CiAKLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24geworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7CiAKLQkJLy8gVGhlIHN0YXQgcmVwb3J0ZXIgd3JpdGVzIG91dCB0aGUgdGVzdCBpbmZvIGFuZCByZXN1bHRzCi0JCS8vIGludG8gdGhlIHRvcC1sZXZlbCBxdWlja2xvb2sgZGlyZWN0b3J5IGR1cmluZyBhIHJ1bi4KKyAgICAgICAgLy8gVGhlIHN0YXQgcmVwb3J0ZXIgd3JpdGVzIG91dCB0aGUgdGVzdCBpbmZvIGFuZCByZXN1bHRzCisgICAgICAgIC8vIGludG8gdGhlIHRvcC1sZXZlbCBxdWlja2xvb2sgZGlyZWN0b3J5IGR1cmluZyBhIHJ1bi4KIAotCQlzdGF0LmFkZERlc2NyaXB0aW9uKCJTbG93IGNsaWVudCBieXRlcyB3cml0ZSIpOworICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJTbG93IGNsaWVudCBieXRlcyB3cml0ZSIpOwogCi0JCVN0cmluZyBob3N0ID0gYXJnc1swXTsKLQkJaW50IHBvcnQgPSBJbnRlZ2VyLnBhcnNlSW50KGFyZ3NbMV0pOwotCQlpbnQgbnVtID0gSW50ZWdlci5wYXJzZUludChhcmdzWzJdKTsKKyAgICAgICAgU3RyaW5nIGhvc3QgPSBhcmdzWzBdOworICAgICAgICBpbnQgcG9ydCA9IEludGVnZXIucGFyc2VJbnQoYXJnc1sxXSk7CisgICAgICAgIGludCBudW0gPSBJbnRlZ2VyLnBhcnNlSW50KGFyZ3NbMl0pOwogCi0JCWZvciAoaW50IGk9MDsgaSA8IG51bTsgaSsrKSB7Ci0JCQluZXcgU2xvd0NsaWVudChob3N0LCBwb3J0LCBuZXcgV2ViVGVzdCgpKTsKLQkJfQotCQlUaHJlYWQuc2xlZXAoMzAwMDApOworICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBudW07IGkrKykgeworICAgICAgICAgICAgbmV3IFNsb3dDbGllbnQoaG9zdCwgcG9ydCwgbmV3IFdlYlRlc3QoKSk7CisgICAgICAgIH0KKyAgICAgICAgVGhyZWFkLnNsZWVwKDMwMDAwKTsKIAotCQlzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIGNvdW50LmdldCgpID09IG51bSA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7Ci0JCXN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7Ci0JfQorICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIGNvdW50LmdldCgpID09IG51bSA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CisgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZG9zU2xvd0NsaWVudC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Rvc1Nsb3dDbGllbnQvYnVpbGQucHJvcGVydGllcwppbmRleCA5YTkzMzk1Li44ZWJlNDE3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZG9zU2xvd0NsaWVudC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kb3NTbG93Q2xpZW50L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE0ICsxNSwxNCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1kb3NTbG93Q2xpZW50Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1kb3NTbG93Q2xpZW50Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iL3dlYi1kb3NTbG93Q2xpZW50Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZG9zU2xvd0NsaWVudC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZG9zU2xvd0NsaWVudC9idWlsZC54bWwKaW5kZXggOWE2NjM5YS4uZDlmODUwMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Rvc1Nsb3dDbGllbnQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kb3NTbG93Q2xpZW50L2J1aWxkLnhtbApAQCAtNTYsNyArNTYsNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9ImNvbmZpZ3MuY29uZmlnLnNlcnZlci1jb25maWcubmV0d29yay1jb25maWcucHJvdG9jb2xzLnByb3RvY29sLmh0dHAtbGlzdGVuZXItMS5odHRwLnRpbWVvdXQtc2Vjb25kcz01Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KLQkJICAKKwogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0b3JlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZG91YmxlQ29udGVudExlbmd0aC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZG91YmxlQ29udGVudExlbmd0aC9XZWJUZXN0LmphdmEKaW5kZXggYjAyOThkYS4uN2ViNGEzOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RvdWJsZUNvbnRlbnRMZW5ndGgvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kb3VibGVDb250ZW50TGVuZ3RoL1dlYlRlc3QuamF2YQpAQCAtMjEsMTAgKzIxLDEwIEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci4qOwogCiBwdWJsaWMgY2xhc3MgV2ViVGVzdCB7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnQgPSAwOwogICAgIHByaXZhdGUgc3RhdGljIGludCBFWFBFQ1RFRF9DT1VOVCA9IDE7Ci0gICAgCisKICAgICBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQ9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIApAQCAtMzIsNyArMzIsNyBAQAogCiAgICAgICAgIC8vIFRoZSBzdGF0IHJlcG9ydGVyIHdyaXRlcyBvdXQgdGhlIHRlc3QgaW5mbyBhbmQgcmVzdWx0cwogICAgICAgICAvLyBpbnRvIHRoZSB0b3AtbGV2ZWwgcXVpY2tsb29rIGRpcmVjdG9yeSBkdXJpbmcgYSBydW4uCi0gICAgICAKKwogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJEb3VibGUgY29udGVudC1sZW5ndGggaGVhZGVyIik7CiAKICAgICAgICAgU3RyaW5nIGhvc3QgPSBhcmdzWzBdOwpAQCAtNDEsMTUgKzQxLDE1IEBACiAKICAgICAgICAgaW50IHBvcnQgPSBuZXcgSW50ZWdlcihwb3J0UykuaW50VmFsdWUoKTsKICAgICAgICAgU3RyaW5nIG5hbWU7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBnb0dldChob3N0LCBwb3J0LCAiRVhQSVJFRCIsIGNvbnRleHRSb290ICsgIi9TZXJ2bGV0VGVzdCIgKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0KSB7CiAgICAgICAgIH0gZmluYWxseXsKICAgICAgICAgICAgIGlmIChjb3VudCAhPSBFWFBFQ1RFRF9DT1VOVCl7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndlYi1kb3VibGVDb250ZW50TGVuZ3RoIiwgc3RhdC5GQUlMKTsKLSAgICAgICAgICAgIH0gICAgICAgICAgIAorICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoIndlYi9kb3VibGVDb250ZW50TGVuZ3RoLS0tPiBleHBlY3QgMiBQQVNTIik7CkBAIC03Myw3ICs3Myw3IEBACiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAvLyBXZWIgc2VydmVyIHNvbWV0aW1lcyBzZW5kcyB0aGUgcmVzcG9uc2Ugd2l0aCA0MDAgc3RhdHVzCiAgICAgICAgICAgICAvLyBjb2RlIHJpZ2h0IGFmdGVyIHRoZSBzZWNvbmQgY29udGVudC1sZW5ndGggaGVhZGVyIGluIHdoaWNoCi0gICAgICAgICAgICAvLyBjYXNlIG5leHQgb3Mud3JpdGUgd2lsbCBjYXVzZSBhbiBleGNlcHRpb24uIAorICAgICAgICAgICAgLy8gY2FzZSBuZXh0IG9zLndyaXRlIHdpbGwgY2F1c2UgYW4gZXhjZXB0aW9uLgogICAgICAgICB9CiAKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzLmdldElucHV0U3RyZWFtKCk7CkBAIC04OSwxMSArODksMTEgQEAKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndlYi1kb3VibGVDb250ZW50TGVuZ3RoIiwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbGluZU51bSsrOwogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZXgpewogICAgICAgICAgfQogICAgfQotICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RvdWJsZUNvbnRlbnRMZW5ndGgvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kb3VibGVDb250ZW50TGVuZ3RoL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNjRkNzQxZC4uYWMzOGQ3YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RvdWJsZUNvbnRlbnRMZW5ndGgvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZG91YmxlQ29udGVudExlbmd0aC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNCArMTUsMTQgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZG91YmxlQ29udGVudExlbmd0aCIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZG91YmxlQ29udGVudExlbmd0aCIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii93ZWItZG91YmxlQ29udGVudExlbmd0aCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RvdWJsZUNvbnRlbnRMZW5ndGgvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RvdWJsZUNvbnRlbnRMZW5ndGgvYnVpbGQueG1sCmluZGV4IDMyZDQ5ZDYuLjUxYTFjYmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kb3VibGVDb250ZW50TGVuZ3RoL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZG91YmxlQ29udGVudExlbmd0aC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDEzICs0MiwxMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTU4LDcgKzU4LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogCiAgICAgICAgICAgPGphdmFjCkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZG91YmxlQ29udGVudExlbmd0aC9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZG91YmxlQ29udGVudExlbmd0aC9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggMGNmZTgxMi4uODFiMTQ1NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RvdWJsZUNvbnRlbnRMZW5ndGgvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kb3VibGVDb250ZW50TGVuZ3RoL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjMsNyArMjMsNyBAQAogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiCiAgICAgICAgICB2ZXJzaW9uPSIyLjQiPgogCi0gICAgPGxpc3RlbmVyPiAgICAgCisgICAgPGxpc3RlbmVyPgogICAgICAgICA8bGlzdGVuZXItY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDwvbGlzdGVuZXItY2xhc3M+CiAgICAgPC9saXN0ZW5lcj4KIApAQCAtMzEsNyArMzEsNyBAQAogICAgICAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXRUZXN0PC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAKICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kb3VibGVDb250ZW50TGVuZ3RoL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9kb3VibGVDb250ZW50TGVuZ3RoL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQppbmRleCA3ODc1MWE3Li45NjYwNWNiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZG91YmxlQ29udGVudExlbmd0aC9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2RvdWJsZUNvbnRlbnRMZW5ndGgvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCkBAIC0zMyw3ICszMyw3IEBACiBwdWJsaWMgY2xhc3MgU2VydmxldFRlc3QgZXh0ZW5kcyBIdHRwU2VydmxldCBpbXBsZW1lbnRzIEh0dHBTZXNzaW9uTGlzdGVuZXIgewogCiAgICAgcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuaW5pdF0iKTsKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICAgICAgZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7ICAgICAgICAKKyAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuZG9Qb3N0XSIpOwogICAgICAgICBIdHRwU2Vzc2lvbiBzZXNzaW9uID0gcmVxdWVzdC5nZXRTZXNzaW9uKHRydWUpOwogCkBAIC02Miw3ICs2Miw3IEBACiAgICAgcHVibGljIHZvaWQgc2Vzc2lvbkNyZWF0ZWQoamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb25FdmVudCBodHRwU2Vzc2lvbkV2ZW50KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuc2Vzc2lvbkNyZWF0ZWRdIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2Vzc2lvbkRlc3Ryb3llZChqYWthcnRhLnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbkV2ZW50IGh0dHBTZXNzaW9uRXZlbnQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5zZXNzaW9uRGVzdHJveWVkXSIpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lbEJpZ0RlY2ltYWwvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2VsQmlnRGVjaW1hbC9XZWJUZXN0LmphdmEKaW5kZXggZDcyOTk4ZC4uOTU3OGIzZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2VsQmlnRGVjaW1hbC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2VsQmlnRGVjaW1hbC9XZWJUZXN0LmphdmEKQEAgLTM3LDkgKzM3LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5tYXRoLkJpZ0RlY2ltYWwuY2xhc3MpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc3VsdDogIiArIG8pOwogICAgICAgICBpZiAoIjEyMzQ1Njc4OTAxMjM0NTY3ODkiLmVxdWFscyhvLnRvU3RyaW5nKCkpKQotICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdE5hbWUsIHN0YXQuUEFTUyk7ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdE5hbWUsIHN0YXQuUEFTUyk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3ROYW1lLCBzdGF0LkZBSUwpOyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3ROYW1lLCBzdGF0LkZBSUwpOwogCiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2VsQmlnRGVjaW1hbC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZWxCaWdEZWNpbWFsL2J1aWxkLnhtbAppbmRleCA4MDdiMmQyLi40ZmNmNzMyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZWxCaWdEZWNpbWFsL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZWxCaWdEZWNpbWFsL2J1aWxkLnhtbApAQCAtMzIsMTQgKzMyLDE0IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiI+CiAgICAgICAgIDxkZWxldGUgZmlsZT0iV2ViVGVzdC5jbGFzcyIgLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSI+CiAgICAgICAgIDxqYXZhYwogICAgICAgICAgICAgc3JjZGlyPSIuIgogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyOyR7ZW52LlMxQVNfSE9NRX0vbW9kdWxlcy9qYWthcnRhLmVsLmphcjske2Vudi5TMUFTX0hPTUV9L21vZHVsZXMvamFrYXJ0YS5lbC1hcGkuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgpAQCAtNTEsNyArNTEsNyBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2VsRnVuY3Rpb25XaXRob3V0UGFyYW1zL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lbEZ1bmN0aW9uV2l0aG91dFBhcmFtcy9XZWJUZXN0LmphdmEKaW5kZXggOTE0YWI3YS4uZjUxODRjMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2VsRnVuY3Rpb25XaXRob3V0UGFyYW1zL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZWxGdW5jdGlvbldpdGhvdXRQYXJhbXMvV2ViVGVzdC5qYXZhCkBAIC0zNiw3ICszNiw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEJ1Z3ppbGxhIDI2NjI4Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDQsOCArNDQsOCBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2VKc3AoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CkBAIC01NiwxNCArNTYsMTQgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlSnNwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgICAKKwogICAgICAgICBTb2NrZXQgc29jayA9IG5ldyBTb2NrZXQoaG9zdCwgbmV3IEludGVnZXIocG9ydCkuaW50VmFsdWUoKSk7CiAgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IHNvY2suZ2V0T3V0cHV0U3RyZWFtKCk7CiAgICAgICAgIFN0cmluZyBnZXQgPSAiR0VUICIgKyBjb250ZXh0Um9vdCArICIvanNwL2Zvby5qc3AgSFRUUC8xLjBcbiI7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihnZXQpOwogICAgICAgICBvcy53cml0ZShnZXQuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gc29jay5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBiaXMgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lbEZ1bmN0aW9uV2l0aG91dFBhcmFtcy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2VsRnVuY3Rpb25XaXRob3V0UGFyYW1zL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMGI2YTJmMi4uODVlZTI5NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2VsRnVuY3Rpb25XaXRob3V0UGFyYW1zL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2VsRnVuY3Rpb25XaXRob3V0UGFyYW1zL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZWwtZnVuY3Rpb24td2l0aG91dC1wYXJhbXMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lbEZ1bmN0aW9uV2l0aG91dFBhcmFtcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZWxGdW5jdGlvbldpdGhvdXRQYXJhbXMvYnVpbGQueG1sCmluZGV4IDg1NDJlOTEuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lbEZ1bmN0aW9uV2l0aG91dFBhcmFtcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2VsRnVuY3Rpb25XaXRob3V0UGFyYW1zL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTcgKzQyLDE3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZWxVbmludGVycHJldGVkVGFnL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lbFVuaW50ZXJwcmV0ZWRUYWcvV2ViVGVzdC5qYXZhCmluZGV4IDUwYTExOGYuLmM0OTQwNGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lbFVuaW50ZXJwcmV0ZWRUYWcvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lbFVuaW50ZXJwcmV0ZWRUYWcvV2ViVGVzdC5qYXZhCkBAIC0yMiw5ICsyMiw5IEBACiAKIHB1YmxpYyBjbGFzcyBXZWJUZXN0CiB7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIHBhc3MgPSBmYWxzZTsKLSAgICAKKwogICAgIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdD0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCkBAIC0zMywxNCArMzMsMTQgQEAKIAogICAgICAgICAvLyBUaGUgc3RhdCByZXBvcnRlciB3cml0ZXMgb3V0IHRoZSB0ZXN0IGluZm8gYW5kIHJlc3VsdHMKICAgICAgICAgLy8gaW50byB0aGUgdG9wLWxldmVsIHF1aWNrbG9vayBkaXJlY3RvcnkgZHVyaW5nIGEgcnVuLgotICAgICAgCisKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVGVzdCBFTCBpcyBlbXB0eSBpbnN0ZWFkIG9mIG51bGwgd2hlbiBhcHBlYXIgaW4gdW5pbnRlcnByZXRlZCB0YWcgYXR0cmlidXRlcyIpOwogCiAgICAgICAgIFN0cmluZyBob3N0ID0gYXJnc1swXTsKICAgICAgICAgU3RyaW5nIHBvcnRTID0gYXJnc1sxXTsKICAgICAgICAgU3RyaW5nIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICAgICAgaW50IHBvcnQgPSBuZXcgSW50ZWdlcihwb3J0UykuaW50VmFsdWUoKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGdvR2V0KGhvc3QsIHBvcnQsIGNvbnRleHRSb290ICsgIi90ZXN0LmpzcHgiICk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiQm9keVRhZyB0ZXN0IiwgcGFzcz8gc3RhdC5QQVNTOiBzdGF0LkZBSUwpOwpAQCAtNjEsNyArNjEsNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdFVCAiICsgY29udGV4dFBhdGggKyAiIEhUVFAvMS4wIik7CiAgICAgICAgIG9zLndyaXRlKCgiR0VUICIgKyBjb250ZXh0UGF0aCArICIgSFRUUC8xLjBcbiIpLmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHMuZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYmlzID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CkBAIC03Niw3ICs3Niw3IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZXgpewotICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7ICAgCisgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlRlc3QgVU5QUkVESUNURUQtRkFJTFVSRSIpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2VsVW5pbnRlcnByZXRlZFRhZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2VsVW5pbnRlcnByZXRlZFRhZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDA1YjY2YWYuLjQwMWIyMzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lbFVuaW50ZXJwcmV0ZWRUYWcvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZWxVbmludGVycHJldGVkVGFnL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZWxVbmludGVycHJldGVkVGFnIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZWxVbmludGVycHJldGVkVGFnL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lbFVuaW50ZXJwcmV0ZWRUYWcvYnVpbGQueG1sCmluZGV4IDg1NDJlOTEuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lbFVuaW50ZXJwcmV0ZWRUYWcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lbFVuaW50ZXJwcmV0ZWRUYWcvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxNyArNDIsMTcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIAogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lbGVxdWFscy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZWxlcXVhbHMvV2ViVGVzdC5qYXZhCmluZGV4IDU2NWE1MWMuLjIxOWFlZDIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lbGVxdWFscy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2VsZXF1YWxzL1dlYlRlc3QuamF2YQpAQCAtNDcsNyArNDcsNyBAQAogICAgICAgICAgICAgd2ViVGVzdC50ZXN0KCIvZXF1YWxzLmpzcCIpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdE5hbWUsIHN0YXQuRkFJTCk7ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdE5hbWUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2VsZXF1YWxzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZWxlcXVhbHMvYnVpbGQucHJvcGVydGllcwppbmRleCAxZmJiNjFiLi5kYjMxNjE2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZWxlcXVhbHMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZWxlcXVhbHMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTIgKzE1LDEyIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWVsZXhwci1lcXVhbHMiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWVsZXhwci1lcXVhbHMiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIke2FwcG5hbWV9Ii8+CiA8cHJvcGVydHkgbmFtZT0icHJlY29tcGlsZWpzcCIgdmFsdWU9ImZhbHNlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZWxlcXVhbHMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2VsZXF1YWxzL2J1aWxkLnhtbAppbmRleCA4N2RiZDRjLi41YTFmMGM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZWxlcXVhbHMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lbGVxdWFscy9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDEwICs0MiwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgIDxqYXZhYwpAQCAtNTMsMTAgKzUzLDEwIEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjQsNyArNjQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZW1wdHlDb250ZXh0Um9vdC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZW1wdHlDb250ZXh0Um9vdC9XZWJUZXN0LmphdmEKaW5kZXggYjYxMWI3ZC4uOGJmZDk3YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2VtcHR5Q29udGV4dFJvb3QvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lbXB0eUNvbnRleHRSb290L1dlYlRlc3QuamF2YQpAQCAtMjYsNyArMjYsNyBAQAogICogc3VuLXdlYi54bWwsIGFzIGZvbGxvd3M6CiAgKgogICogIDxzdW4td2ViLWFwcD4KLSAqICAgIDxjb250ZXh0LXJvb3Q+LzwvY29udGV4dC1yb290PiAKKyAqICAgIDxjb250ZXh0LXJvb3Q+LzwvY29udGV4dC1yb290PgogICogIDwvc3VuLXdlYi1hcHA+CiAgKi8KIHB1YmxpYyBjbGFzcyBXZWJUZXN0IHsKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICAgICAgaG9zdCA9IGFyZ3NbMF07CiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBjb250ZXh0LXJvb3Qgc2V0dGluZyBpbiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAic3VuLXdlYi54bWwiKTsKQEAgLTU0LDggKzU0LDggQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlSnNwKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpAQCAtMTA4LDYgKzEwOCw2IEBACiAgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHsKICAgICAgICAgICAgICAgICAvLyBpZ25vcmUKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lbXB0eUNvbnRleHRSb290L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZW1wdHlDb250ZXh0Um9vdC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGVkMDBjMjguLjc5NThlMzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lbXB0eUNvbnRleHRSb290L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2VtcHR5Q29udGV4dFJvb3QvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1lbXB0eS1jb250ZXh0LXJvb3QiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lbXB0eUNvbnRleHRSb290L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lbXB0eUNvbnRleHRSb290L2J1aWxkLnhtbAppbmRleCA2Yzk2ODNmLi45NjhkZWI5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZW1wdHlDb250ZXh0Um9vdC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2VtcHR5Q29udGV4dFJvb3QvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwyMyArNDIsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1uby1jb250ZXh0LXJvb3QiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MCwxMCArNzAsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZW1wdHlDb250ZXh0Um9vdC9kZXNjcmlwdG9yL3N1bi13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2VtcHR5Q29udGV4dFJvb3QvZGVzY3JpcHRvci9zdW4td2ViLnhtbAppbmRleCA2NTZjNTJjLi4xMjkyMWQyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZW1wdHlDb250ZXh0Um9vdC9kZXNjcmlwdG9yL3N1bi13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lbXB0eUNvbnRleHRSb290L2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwKQEAgLTIwLDUgKzIwLDUgQEAKIDwhRE9DVFlQRSBzdW4td2ViLWFwcCBQVUJMSUMgIi0vL1N1biBNaWNyb3N5c3RlbXMsIEluYy4vL0RURCBBcHBsaWNhdGlvbiBTZXJ2ZXIgOC4xIFNlcnZsZXQgMi40Ly9FTiIgImh0dHA6Ly93d3cuc3VuLmNvbS9zb2Z0d2FyZS9zdW5vbmUvYXBwc2VydmVyL2R0ZHMvc3VuLXdlYi1hcHBfMl80LTEuZHRkIj4KIAogPHN1bi13ZWItYXBwPgotICA8Y29udGV4dC1yb290Pi88L2NvbnRleHQtcm9vdD4gCisgIDxjb250ZXh0LXJvb3Q+LzwvY29udGV4dC1yb290PgogPC9zdW4td2ViLWFwcD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lbXB0eVNlcnZsZXRQYXRoSnNwSW5jbHVkZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZW1wdHlTZXJ2bGV0UGF0aEpzcEluY2x1ZGUvV2ViVGVzdC5qYXZhCmluZGV4IDM3ODc0ODIuLmU4Mjk2ZTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lbXB0eVNlcnZsZXRQYXRoSnNwSW5jbHVkZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2VtcHR5U2VydmxldFBhdGhKc3BJbmNsdWRlL1dlYlRlc3QuamF2YQpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBCdWd6aWxsYSAyODA1OCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ5LDE1ICs0OSwxNSBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiL2pzcC90ZXN0LmpzcCIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgICAgICBjb25uLmNvbm5lY3QoKTsKICAgICAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsgCisgICAgICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UgY29kZS4gRXhwZWN0ZWQ6IDIwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCByZWNlaXZlZDogIiArIHJlc3BvbnNlQ29kZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2VtcHR5U2VydmxldFBhdGhKc3BJbmNsdWRlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZW1wdHlTZXJ2bGV0UGF0aEpzcEluY2x1ZGUvYnVpbGQucHJvcGVydGllcwppbmRleCBmMDc1NmU3Li5hZDNhOGEwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZW1wdHlTZXJ2bGV0UGF0aEpzcEluY2x1ZGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZW1wdHlTZXJ2bGV0UGF0aEpzcEluY2x1ZGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1lbXB0eS1zZXJ2bGV0LXBhdGgtanNwLWluY2x1ZGUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lbXB0eVNlcnZsZXRQYXRoSnNwSW5jbHVkZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZW1wdHlTZXJ2bGV0UGF0aEpzcEluY2x1ZGUvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lbXB0eVNlcnZsZXRQYXRoSnNwSW5jbHVkZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2VtcHR5U2VydmxldFBhdGhKc3BJbmNsdWRlL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lbXB0eVNlcnZsZXRQYXRoSnNwSW5jbHVkZS9zZXJ2bGV0L0Zvby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2VtcHR5U2VydmxldFBhdGhKc3BJbmNsdWRlL3NlcnZsZXQvRm9vLmphdmEKaW5kZXggZjJjNmI5OS4uMjgzM2FlYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2VtcHR5U2VydmxldFBhdGhKc3BJbmNsdWRlL3NlcnZsZXQvRm9vLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2VtcHR5U2VydmxldFBhdGhKc3BJbmNsdWRlL3NlcnZsZXQvRm9vLmphdmEKQEAgLTI3LDYgKzI3LDYgQEAKIFN5c3RlbS5vdXQucHJpbnRsbigiRk9PRk9POiAiICsgcmVxLmdldFJlcXVlc3RVUkwoKSk7CiAgICAgICAgIFJlcXVlc3REaXNwYXRjaGVyIHJkID0gZ2V0U2VydmxldENvbmZpZygpLmdldFNlcnZsZXRDb250ZXh0KCkuZ2V0TmFtZWREaXNwYXRjaGVyKCJqc3AiKTsKICAgICAgICAgcmQuZm9yd2FyZChyZXEsIHJlcyk7Ci0gICAgICAgCisKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXJyb3JQYWdlRXhjZXB0aW9uVHlwZU1hcHBpbmcvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Vycm9yUGFnZUV4Y2VwdGlvblR5cGVNYXBwaW5nL1dlYlRlc3QuamF2YQppbmRleCBmMGFlNTkxLi5kOTkxZTMyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXJyb3JQYWdlRXhjZXB0aW9uVHlwZU1hcHBpbmcvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lcnJvclBhZ2VFeGNlcHRpb25UeXBlTWFwcGluZy9XZWJUZXN0LmphdmEKQEAgLTUxLDcgKzUxLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oCiAgICAgICAgICAgICAiVW5pdCB0ZXN0IGZvciBleGNlcHRpb24tdHlwZS10by1jdXN0b20tZXJyb3ItcGFnZSBtYXBwaW5nIik7CkBAIC02MCw4ICs2MCw4IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTc5LDcgKzc5LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgICAKKwogICAgICAgICBzb2NrID0gbmV3IFNvY2tldChob3N0LCBuZXcgSW50ZWdlcihwb3J0KS5pbnRWYWx1ZSgpKTsKICAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gc29jay5nZXRPdXRwdXRTdHJlYW0oKTsKICAgICAgICAgU3RyaW5nIGdldCA9ICJHRVQgIiArIGNvbnRleHRSb290ICsgIi9zcWxFeGNlcHRpb24uanNwIEhUVFAvMS4wXG4iOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Vycm9yUGFnZUV4Y2VwdGlvblR5cGVNYXBwaW5nL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXJyb3JQYWdlRXhjZXB0aW9uVHlwZU1hcHBpbmcvYnVpbGQucHJvcGVydGllcwppbmRleCAyZjg2NDgyLi40YmI0MTE0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXJyb3JQYWdlRXhjZXB0aW9uVHlwZU1hcHBpbmcvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXJyb3JQYWdlRXhjZXB0aW9uVHlwZU1hcHBpbmcvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1lcnJvci1wYWdlLWV4Y2VwdGlvbi10eXBlLW1hcHBpbmciLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lcnJvclBhZ2VFeGNlcHRpb25UeXBlTWFwcGluZy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXJyb3JQYWdlRXhjZXB0aW9uVHlwZU1hcHBpbmcvYnVpbGQueG1sCmluZGV4IDAwZmRhZDMuLmMzOTc3NmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lcnJvclBhZ2VFeGNlcHRpb25UeXBlTWFwcGluZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Vycm9yUGFnZUV4Y2VwdGlvblR5cGVNYXBwaW5nL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMjMgKzQyLDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzAsMTAgKzcwLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Vycm9yUGFnZUV4Y2VwdGlvblR5cGVXcmFwcGVyL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lcnJvclBhZ2VFeGNlcHRpb25UeXBlV3JhcHBlci9XZWJUZXN0LmphdmEKaW5kZXggNDM2MzNjMS4uYWY5MzFkMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Vycm9yUGFnZUV4Y2VwdGlvblR5cGVXcmFwcGVyL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXJyb3JQYWdlRXhjZXB0aW9uVHlwZVdyYXBwZXIvV2ViVGVzdC5qYXZhCkBAIC01Miw3ICs1Miw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEJ1Z3ppbGxhIDEzOTI0Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNjAsMTUgKzYwLDE1IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFNvY2tldCBzb2NrID0gbmV3IFNvY2tldChob3N0LCBuZXcgSW50ZWdlcihwb3J0KS5pbnRWYWx1ZSgpKTsKICAgICAgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IHNvY2suZ2V0T3V0cHV0U3RyZWFtKCk7CiAgICAgICAgICAgICBTdHJpbmcgZ2V0ID0gIkdFVCAiICsgY29udGV4dFJvb3QgKyAiL3Rlc3QiICsgIiBIVFRQLzEuMFxuIjsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihnZXQpOwogICAgICAgICAgICAgb3Mud3JpdGUoZ2V0LmdldEJ5dGVzKCkpOwogICAgICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgICAgIElucHV0U3RyZWFtIGlzID0gc29jay5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYmlzID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXJyb3JQYWdlRXhjZXB0aW9uVHlwZVdyYXBwZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lcnJvclBhZ2VFeGNlcHRpb25UeXBlV3JhcHBlci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDQ4OTNhY2UuLjRjZjI4NjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lcnJvclBhZ2VFeGNlcHRpb25UeXBlV3JhcHBlci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lcnJvclBhZ2VFeGNlcHRpb25UeXBlV3JhcHBlci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWVycm9yLXBhZ2UtZXhjZXB0aW9uLXR5cGUtd3JhcHBlciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Vycm9yUGFnZUV4Y2VwdGlvblR5cGVXcmFwcGVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lcnJvclBhZ2VFeGNlcHRpb25UeXBlV3JhcHBlci9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Vycm9yUGFnZUV4Y2VwdGlvblR5cGVXcmFwcGVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXJyb3JQYWdlRXhjZXB0aW9uVHlwZVdyYXBwZXIvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Vycm9yUGFnZUhhbmRsaW5nRm9yRXJyb3IvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Vycm9yUGFnZUhhbmRsaW5nRm9yRXJyb3IvV2ViVGVzdC5qYXZhCmluZGV4IDJkMmNmODEuLmM4NDY1Y2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lcnJvclBhZ2VIYW5kbGluZ0ZvckVycm9yL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXJyb3JQYWdlSGFuZGxpbmdGb3JFcnJvci9XZWJUZXN0LmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oCiAgICAgICAgICAgICAiVW5pdCB0ZXN0IGZvciBlcnJvci1wYWdlLWhhbmRsaW5nLWZvci1lcnJvciIpOwpAQCAtNDksOCArNDksOCBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoIkhlbGxvU2VydmxldCIsCiAgICAgICAgICAgICAgICAgICAgICJIVFRQLzEuMSA1MDAgIiwKICAgICAgICAgICAgICAgICAgICAgIkVycm9yIHBhZ2UgZm9yIEhlbGxvIEV4Y2VwdGlvbiIpOwpAQCAtODEsNyArODEsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoU3RyaW5nIHBhZ2UsIFN0cmluZyBleHBlY3RlZFN0YXR1cywgU3RyaW5nIGV4cGVjdGVkUmVzcG9uc2VCb2R5KSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgIAorCiAgICAgICAgIHNvY2sgPSBuZXcgU29ja2V0KGhvc3QsIG5ldyBJbnRlZ2VyKHBvcnQpLmludFZhbHVlKCkpOwogICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSBzb2NrLmdldE91dHB1dFN0cmVhbSgpOwogICAgICAgICBTdHJpbmcgZ2V0ID0gIkdFVCAiICsgY29udGV4dFJvb3QgKyAiLyIgKyBwYWdlICsgIiBIVFRQLzEuMFxuIjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lcnJvclBhZ2VIYW5kbGluZ0ZvckVycm9yL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXJyb3JQYWdlSGFuZGxpbmdGb3JFcnJvci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDkyYzgyZDAuLmNiMWFjYTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lcnJvclBhZ2VIYW5kbGluZ0ZvckVycm9yL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Vycm9yUGFnZUhhbmRsaW5nRm9yRXJyb3IvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1lcnJvci1wYWdlLWhhbmRsaW5nLWZvci1lcnJvciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Vycm9yUGFnZUhhbmRsaW5nRm9yRXJyb3IvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Vycm9yUGFnZUhhbmRsaW5nRm9yRXJyb3IvYnVpbGQueG1sCmluZGV4IDAwZmRhZDMuLmMzOTc3NmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lcnJvclBhZ2VIYW5kbGluZ0ZvckVycm9yL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXJyb3JQYWdlSGFuZGxpbmdGb3JFcnJvci9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDIzICs0MiwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTcwLDEwICs3MCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lcnJvclBhZ2VIYW5kbGluZ0ZvckVycm9yL3NlcnZsZXQvdGVzdC9IZWxsb1NlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lcnJvclBhZ2VIYW5kbGluZ0ZvckVycm9yL3NlcnZsZXQvdGVzdC9IZWxsb1NlcnZsZXQuamF2YQppbmRleCBjY2FkOWVmLi5mNzdjZjYwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXJyb3JQYWdlSGFuZGxpbmdGb3JFcnJvci9zZXJ2bGV0L3Rlc3QvSGVsbG9TZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Vycm9yUGFnZUhhbmRsaW5nRm9yRXJyb3Ivc2VydmxldC90ZXN0L0hlbGxvU2VydmxldC5qYXZhCkBAIC0zNSw4ICszNSw4IEBACiAgKi8KIEBXZWJTZXJ2bGV0KG5hbWU9IkhlbGxvU2VydmxldCIsIHVybFBhdHRlcm5zPXsiL0hlbGxvU2VydmxldCJ9KQogcHVibGljIGNsYXNzIEhlbGxvU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKLSAgIAotICAgIC8qKiAKKworICAgIC8qKgogICAgICAqIFByb2Nlc3NlcyByZXF1ZXN0cyBmb3IgYm90aCBIVFRQIDxjb2RlPkdFVDwvY29kZT4gYW5kIDxjb2RlPlBPU1Q8L2NvZGU+IG1ldGhvZHMuCiAgICAgICogQHBhcmFtIHJlcXVlc3Qgc2VydmxldCByZXF1ZXN0CiAgICAgICogQHBhcmFtIHJlc3BvbnNlIHNlcnZsZXQgcmVzcG9uc2UKQEAgLTUzLDEwICs1MywxMCBAQAogICAgICAgICAvLyB0aGUgc2VydmxldCByZXR1cm5zIDIwMCBpZiBQcmludFdyaXRlciBpcyBjbG9zZWQKICAgICAgICAgLy8gICAgb3V0LmNsb3NlKCk7CiAgICAgICAgIH0KLSAgICB9IAorICAgIH0KIAogICAgIC8vIDxlZGl0b3ItZm9sZCBkZWZhdWx0c3RhdGU9ImNvbGxhcHNlZCIgZGVzYz0iSHR0cFNlcnZsZXQgbWV0aG9kcy4gQ2xpY2sgb24gdGhlICsgc2lnbiBvbiB0aGUgbGVmdCB0byBlZGl0IHRoZSBjb2RlLiI+Ci0gICAgLyoqIAorICAgIC8qKgogICAgICAqIEhhbmRsZXMgdGhlIEhUVFAgPGNvZGU+R0VUPC9jb2RlPiBtZXRob2QuCiAgICAgICogQHBhcmFtIHJlcXVlc3Qgc2VydmxldCByZXF1ZXN0CiAgICAgICogQHBhcmFtIHJlc3BvbnNlIHNlcnZsZXQgcmVzcG9uc2UKQEAgLTY3LDkgKzY3LDkgQEAKICAgICBwcm90ZWN0ZWQgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBwcm9jZXNzUmVxdWVzdChyZXF1ZXN0LCByZXNwb25zZSk7Ci0gICAgfSAKKyAgICB9CiAKLSAgICAvKiogCisgICAgLyoqCiAgICAgICogSGFuZGxlcyB0aGUgSFRUUCA8Y29kZT5QT1NUPC9jb2RlPiBtZXRob2QuCiAgICAgICogQHBhcmFtIHJlcXVlc3Qgc2VydmxldCByZXF1ZXN0CiAgICAgICogQHBhcmFtIHJlc3BvbnNlIHNlcnZsZXQgcmVzcG9uc2UKQEAgLTgyLDcgKzgyLDcgQEAKICAgICAgICAgcHJvY2Vzc1JlcXVlc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIC8qKiAKKyAgICAvKioKICAgICAgKiBSZXR1cm5zIGEgc2hvcnQgZGVzY3JpcHRpb24gb2YgdGhlIHNlcnZsZXQuCiAgICAgICogQHJldHVybiBhIFN0cmluZyBjb250YWluaW5nIHNlcnZsZXQgZGVzY3JpcHRpb24KICAgICAgKi8KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9lcnJvclBhZ2VIYW5kbGluZ0ZvckVycm9yL3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Vycm9yUGFnZUhhbmRsaW5nRm9yRXJyb3Ivc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggODhkZGNiNS4uOTQ0ZjUwNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Vycm9yUGFnZUhhbmRsaW5nRm9yRXJyb3Ivc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Vycm9yUGFnZUhhbmRsaW5nRm9yRXJyb3Ivc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTI1LDYgKzI1LDYgQEAKICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlcykKICAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbiB7CiAKLSAgICAgICAgaWYgKHRydWUpIHRocm93IG5ldyBOb0NsYXNzRGVmRm91bmRFcnJvcigpOyAKKyAgICAgICAgaWYgKHRydWUpIHRocm93IG5ldyBOb0NsYXNzRGVmRm91bmRFcnJvcigpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9leHBsb2RlZFdhci9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXhwbG9kZWRXYXIvV2ViVGVzdC5qYXZhCmluZGV4IDc4ZjJjODcuLjIyZDA0YjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9leHBsb2RlZFdhci9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2V4cGxvZGVkV2FyL1dlYlRlc3QuamF2YQpAQCAtMjYsNyArMjYsNyBAQAogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7Ci0gICAgICAKKwogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJJVCAxMTgwMjogZXhwbG9kZWQgd2FyIHN1cHBvcnQiKTsKIAogICAgICAgICBTdHJpbmcgaG9zdCA9IGFyZ3NbMF07CkBAIC0zNSw3ICszNSw3IEBACiAKICAgICAgICAgaW50IHBvcnQgPSBuZXcgSW50ZWdlcihwb3J0UykuaW50VmFsdWUoKTsKICAgICAgICAgU3RyaW5nIG5hbWU7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBnb0dldChob3N0LCBwb3J0LCBjb250ZXh0Um9vdCArICIvU2VydmxldFRlc3QiICk7CiAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0KSB7CkBAIC02MCw3ICs2MCw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZ2V0U3RyaW5nKTsKICAgICAgICAgICAgIG9zLndyaXRlKGdldFN0cmluZy5nZXRCeXRlcygpKTsKICAgICAgICAgICAgIG9zLndyaXRlKCJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaXMgPSBzLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgICAgICBiaXMgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAgICAgICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CkBAIC05MCw1ICs5MCw1IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgIH0KLSAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9leHBsb2RlZFdhci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2V4cGxvZGVkV2FyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYTQ1MjdhMC4uY2EyNWY4MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2V4cGxvZGVkV2FyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2V4cGxvZGVkV2FyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1leHBsb2RlZC13YXIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWV4cGxvZGVkLXdhciIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2V4cGxvZGVkV2FyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9leHBsb2RlZFdhci9idWlsZC54bWwKaW5kZXggMDI2Zjg5YS4uMmIxMTk5MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2V4cGxvZGVkV2FyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXhwbG9kZWRXYXIvYnVpbGQueG1sCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgICAgPGRlbGV0ZSBmaWxlPSJXZWJUZXN0LmNsYXNzIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNjAsMTcgKzYwLDE3IEBACiAgICAgICAgIDxjb3B5IGZpbGU9IiR7d2ViLnhtbH0iIHRvZGlyPSIke2Fzc2VtYmxlLmRpcn0vV0VCLUlORiIvPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJ0ZXN0LlNlcnZsZXRDb250YWluZXJJbml0aWFsaXplclRlc3QiCiAgICAgICAgICAgICBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vV0VCLUlORi9saWIvZm9vLmphci9NRVRBLUlORi9zZXJ2aWNlcy9qYWthcnRhLnNlcnZsZXQuU2VydmxldENvbnRhaW5lckluaXRpYWxpemVyIi8+Ci0gICAgICAgIAorCiAgICAgICAgIDxqYXZhYwogICAgICAgICAgICAgc3JjZGlyPSIuIgogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWRpciIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTgyLDEwICs4MiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9leHBsb2RlZFdhci9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXhwbG9kZWRXYXIvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IGRiOGJjM2EuLjJhNTI4OWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9leHBsb2RlZFdhci9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2V4cGxvZGVkV2FyL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjEsMTQgKzIxLDE0IEBACiAgICAgPGZpbHRlcj4KICAgICAgICAgPGZpbHRlci1uYW1lPkZpbHRlclRlc3Q8L2ZpbHRlci1uYW1lPgogICAgICAgICA8ZmlsdGVyLWNsYXNzPnRlc3QuRmlsdGVyVGVzdDwvZmlsdGVyLWNsYXNzPgotICAgIDwvZmlsdGVyPiAgICAKLSAgICAgICAgCisgICAgPC9maWx0ZXI+CisKICAgICA8ZmlsdGVyLW1hcHBpbmc+CiAgICAgICAgIDxmaWx0ZXItbmFtZT5GaWx0ZXJUZXN0PC9maWx0ZXItbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi8qPC91cmwtcGF0dGVybj4KICAgICAgICAgPGRpc3BhdGNoZXI+UkVRVUVTVDwvZGlzcGF0Y2hlcj4KICAgICAgICAgPGRpc3BhdGNoZXI+SU5DTFVERTwvZGlzcGF0Y2hlcj4KLSAgICAgICAgPGRpc3BhdGNoZXI+Rk9SV0FSRDwvZGlzcGF0Y2hlcj4gIAotICAgICAgICA8ZGlzcGF0Y2hlcj5FUlJPUjwvZGlzcGF0Y2hlcj4gCisgICAgICAgIDxkaXNwYXRjaGVyPkZPUldBUkQ8L2Rpc3BhdGNoZXI+CisgICAgICAgIDxkaXNwYXRjaGVyPkVSUk9SPC9kaXNwYXRjaGVyPgogICAgIDwvZmlsdGVyLW1hcHBpbmc+CiA8L3dlYi1hcHA+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXhwbG9kZWRXYXIvc2VydmxldC9GaWx0ZXJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXhwbG9kZWRXYXIvc2VydmxldC9GaWx0ZXJUZXN0LmphdmEKaW5kZXggYTcxZjYzNi4uYmQ3ZjU3NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2V4cGxvZGVkV2FyL3NlcnZsZXQvRmlsdGVyVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9leHBsb2RlZFdhci9zZXJ2bGV0L0ZpbHRlclRlc3QuamF2YQpAQCAtMTksMTkgKzE5LDE5IEBACiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lio7CiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuKjsKIHB1YmxpYyBjbGFzcyBGaWx0ZXJUZXN0IGltcGxlbWVudHMgRmlsdGVyewotICAgIAorCiAgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbRmlsdGVyLmRlc3Ryb3ldIik7Ci0gICAgfSAgICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgdm9pZCBkb0ZpbHRlcihTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UsIEZpbHRlckNoYWluIGZpbHRlckNoYWluKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiwgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltGaWx0ZXIuZG9GaWx0ZXJdIik7Ci0gICAgICAgICAgCisKICAgICAgICAgKChIdHRwU2VydmxldFJlcXVlc3QpcmVxdWVzdCkuZ2V0U2Vzc2lvbih0cnVlKS5zZXRBdHRyaWJ1dGUoIkZJTFRFUiIsICJQQVNTIik7CiAgICAgICAgIGZpbHRlckNoYWluLmRvRmlsdGVyKHJlcXVlc3QsIHJlc3BvbnNlKTsKLSAgICAgICAgCi0gICAgfSAgICAKLSAgICAKKworICAgIH0KKwogICAgIHB1YmxpYyB2b2lkIGluaXQoamFrYXJ0YS5zZXJ2bGV0LkZpbHRlckNvbmZpZyBmaWx0ZXJDb25maWcpIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW0ZpbHRlci5pbml0XSIpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9leHBsb2RlZFdhci9zZXJ2bGV0L0ZpbHRlclRlc3QyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXhwbG9kZWRXYXIvc2VydmxldC9GaWx0ZXJUZXN0Mi5qYXZhCmluZGV4IGFjNzAyZDUuLmNhNTIxODEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9leHBsb2RlZFdhci9zZXJ2bGV0L0ZpbHRlclRlc3QyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2V4cGxvZGVkV2FyL3NlcnZsZXQvRmlsdGVyVGVzdDIuamF2YQpAQCAtMjIsMTkgKzIyLDE5IEBACiAKIEBXZWJGaWx0ZXIoIi8qIikKIHB1YmxpYyBjbGFzcyBGaWx0ZXJUZXN0MiBpbXBsZW1lbnRzIEZpbHRlcnsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW0ZpbHRlci5kZXN0cm95XSIpOwotICAgIH0gICAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIHZvaWQgZG9GaWx0ZXIoU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlLCBGaWx0ZXJDaGFpbiBmaWx0ZXJDaGFpbikgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24sIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbRmlsdGVyLmRvRmlsdGVyXSIpOwotICAgICAgICAgIAorCiAgICAgICAgICgoSHR0cFNlcnZsZXRSZXF1ZXN0KXJlcXVlc3QpLmdldFNlc3Npb24odHJ1ZSkuc2V0QXR0cmlidXRlKCJGSUxURVIyIiwgIlBBU1MiKTsKICAgICAgICAgZmlsdGVyQ2hhaW4uZG9GaWx0ZXIocmVxdWVzdCwgcmVzcG9uc2UpOwotICAgICAgICAKLSAgICB9ICAgIAotICAgIAorCisgICAgfQorCiAgICAgcHVibGljIHZvaWQgaW5pdChqYWthcnRhLnNlcnZsZXQuRmlsdGVyQ29uZmlnIGZpbHRlckNvbmZpZykgdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbRmlsdGVyLmluaXRdIik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2V4cGxvZGVkV2FyL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9leHBsb2RlZFdhci9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKaW5kZXggNDBkOGJlNC4uMjc3MThiYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2V4cGxvZGVkV2FyL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXhwbG9kZWRXYXIvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCkBAIC0yOCwxMiArMjgsMTIgQEAKICAgICAgICAgZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7ICAgICAgICAKKyAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7CiAgICAgICAgIG91dC5wcmludGxuKHJlcXVlc3QuZ2V0U2Vzc2lvbih0cnVlKS5nZXRBdHRyaWJ1dGUoIkZJTFRFUiIpICsgIiAiICsKICAgICAgICAgICAgICAgIHJlcXVlc3QuZ2V0U2Vzc2lvbih0cnVlKS5nZXRBdHRyaWJ1dGUoIkZJTFRFUjIiKSArICIgIiArCi0gICAgICAgICAgICAgICBnZXRTZXJ2bGV0Q29udGV4dCgpLmdldEF0dHJpYnV0ZSgiU0NJbml0IikpOyAgCisgICAgICAgICAgICAgICBnZXRTZXJ2bGV0Q29udGV4dCgpLmdldEF0dHJpYnV0ZSgiU0NJbml0IikpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2V4dHJhQ2xhc3NQYXRoSmFyVXJsL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9leHRyYUNsYXNzUGF0aEphclVybC9XZWJUZXN0LmphdmEKaW5kZXggNjgxYTE5My4uNTliYWZiZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2V4dHJhQ2xhc3NQYXRoSmFyVXJsL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXh0cmFDbGFzc1BhdGhKYXJVcmwvV2ViVGVzdC5qYXZhCkBAIC0yMyw4ICsyMyw4IEBACiAgKiAoQWRkIHN1cHBvcnQgZm9yIG5lc3RlZCBKQVIgZmlsZXMgdG8gPHN1bi13ZWItYXBwPjxjbGFzcy1sb2FkZXI+J3MKICAqICBleHRyYS1jbGFzcy1wYXRoIGF0dHJpYnV0ZSBhbmQgdG8gImFzYWRtaW4gZGVwbG95IC0tbGlicmFyaWVzIik6CiAgKgotICogVGhpcyB1bml0IGFkZHMgImphcjpmaWxlOi90bXAvYWJjLmphciEvIiB0byB0aGUgZXh0cmEtY2xhc3MtcGF0aCBpbiAKLSAqIHN1bi13ZWIueG1sLCBhbmQgZXhwZWN0cyB0aGUgc2VydmxldCB0byBiZSBhYmxlIHRvIGluc3RhbnRpYXRlIHRoZSAKKyAqIFRoaXMgdW5pdCBhZGRzICJqYXI6ZmlsZTovdG1wL2FiYy5qYXIhLyIgdG8gdGhlIGV4dHJhLWNsYXNzLXBhdGggaW4KKyAqIHN1bi13ZWIueG1sLCBhbmQgZXhwZWN0cyB0aGUgc2VydmxldCB0byBiZSBhYmxlIHRvIGluc3RhbnRpYXRlIHRoZQogICogYWFhLmJiYi5jY2MuVGVzdCBjbGFzcyBmcm9tIHRoaXMgSkFSIGZpbGUuCiAgKgogICogTm90aWNlIHRoYXQgYmVjYXVzZSBvZiA0NzM1NjM5ICgiVVJMQ2xhc3NMb2FkZXIgZG9lcyBub3Qgd29yayB3aXRoCkBAIC00OCw3ICs0OCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgR2xhc3NGaXNoIDI5MTciKTsKQEAgLTYxLDExICs2MSwxMSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgICArIGNvbnRleHRSb290ICsgIi9UZXN0U2VydmxldCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CkBAIC04NCwxMCArODQsMTAgQEAKICAgICAgICAgICAgIGlmIChFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2V4dHJhQ2xhc3NQYXRoSmFyVXJsL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXh0cmFDbGFzc1BhdGhKYXJVcmwvYnVpbGQucHJvcGVydGllcwppbmRleCBjOTU1NDFiLi40YTc4NTkwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXh0cmFDbGFzc1BhdGhKYXJVcmwvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXh0cmFDbGFzc1BhdGhKYXJVcmwvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1leHRyYS1jbGFzcy1wYXRoLWphci11cmwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9leHRyYUNsYXNzUGF0aEphclVybC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXh0cmFDbGFzc1BhdGhKYXJVcmwvYnVpbGQueG1sCmluZGV4IDUwMDZlOTMuLjIzZjczNzkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9leHRyYUNsYXNzUGF0aEphclVybC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2V4dHJhQ2xhc3NQYXRoSmFyVXJsL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDYsMjMgKzQ2LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iCiAgICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8Y29weSBmaWxlPSJhYmMuamFyIiB0b2Rpcj0iL3RtcCIgZmFpbG9uZXJyb3I9InRydWUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9leHRyYUNsYXNzUGF0aFJlbGF0aXZlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9leHRyYUNsYXNzUGF0aFJlbGF0aXZlL1dlYlRlc3QuamF2YQppbmRleCAwMzQ3MmEwLi41YjRiY2ExIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXh0cmFDbGFzc1BhdGhSZWxhdGl2ZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2V4dHJhQ2xhc3NQYXRoUmVsYXRpdmUvV2ViVGVzdC5qYXZhCkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgR2xhc3NGaXNoIDkwNCIpOwpAQCAtNTQsMTEgKzU0LDExIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL1Rlc3RTZXJ2bGV0Iik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKQEAgLTc3LDEwICs3NywxMCBAQAogICAgICAgICAgICAgaWYgKEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXh0cmFDbGFzc1BhdGhSZWxhdGl2ZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2V4dHJhQ2xhc3NQYXRoUmVsYXRpdmUvYnVpbGQucHJvcGVydGllcwppbmRleCAyOGQwY2M0Li45Yjc3NGUwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXh0cmFDbGFzc1BhdGhSZWxhdGl2ZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9leHRyYUNsYXNzUGF0aFJlbGF0aXZlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZXh0cmEtY2xhc3MtcGF0aC1yZWxhdGl2ZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2V4dHJhQ2xhc3NQYXRoUmVsYXRpdmUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2V4dHJhQ2xhc3NQYXRoUmVsYXRpdmUvYnVpbGQueG1sCmluZGV4IDNjZWJmOGYuLjNmYjVmMTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9leHRyYUNsYXNzUGF0aFJlbGF0aXZlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZXh0cmFDbGFzc1BhdGhSZWxhdGl2ZS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDIzICs0NCwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIgogICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzIsMTAgKzcyLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ZpbGVEb3dubG9hZFRpbWVvdXQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9maWxlRG93bmxvYWRUaW1lb3V0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZTBlNWU2Yi4uMjJiNDQ2ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ZpbGVEb3dubG9hZFRpbWVvdXQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZmlsZURvd25sb2FkVGltZW91dC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWZpbGUtZG93bmxvYWQtdGltZW91dCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ZpbGVEb3dubG9hZFRpbWVvdXQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ZpbGVEb3dubG9hZFRpbWVvdXQvYnVpbGQueG1sCmluZGV4IDZmNGMzODguLjc5MzQzODYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9maWxlRG93bmxvYWRUaW1lb3V0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZmlsZURvd25sb2FkVGltZW91dC9idWlsZC54bWwKQEAgLTQ1LDMxICs0NSwzMSBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCI+CiAgICAgICAgIDxta2RpciBkaXI9ImJ1aWxkL3dlYmFwcCIvPgotCQkgIDxjb3B5IGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vbW9kdWxlcy93ZWJzZXJ2aWNlcy1vc2dpLmphciIgdG9kaXI9ImJ1aWxkL3dlYmFwcCIvPgorICAgICAgICAgIDxjb3B5IGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vbW9kdWxlcy93ZWJzZXJ2aWNlcy1vc2dpLmphciIgdG9kaXI9ImJ1aWxkL3dlYmFwcCIvPgogICAgICAgICA8amF2YWMgc3JjZGlyPSJzcmMvbWFpbi9qYXZhIiBkZXN0ZGlyPSJidWlsZCIgZGVidWc9InRydWUiCiAgICAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7dGVzdH0iCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iKiovKi5qYXZhIi8+CiAKLQkJCTx6aXAgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciI+Ci0JCQkJPGZpbGVzZXQgZGlyPSJidWlsZC93ZWJhcHAiLz4KLQkJCQk8ZmlsZXNldCBkaXI9InNyYy9tYWluL3dlYmFwcCIvPgotCQkJPC96aXA+CisgICAgICAgICAgICA8emlwIGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIiPgorICAgICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iYnVpbGQvd2ViYXBwIi8+CisgICAgICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSJzcmMvbWFpbi93ZWJhcHAiLz4KKyAgICAgICAgICAgIDwvemlwPgogICAgIDwvdGFyZ2V0PgogCi0JIDx0YXJnZXQgbmFtZT0iZGVwbG95Ij4KLQkJPHByb3BlcnR5IG5hbWU9ImZvcmNlIiB2YWx1ZT0idHJ1ZSIvPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+Ci0JIDwvdGFyZ2V0PgorICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSI+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJmb3JjZSIgdmFsdWU9InRydWUiLz4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgorICAgICA8L3RhcmdldD4KIAotCSA8dGFyZ2V0IG5hbWU9InVuZGVwbG95Ij4KLQkJPHByb3BlcnR5IG5hbWU9ImZvcmNlIiB2YWx1ZT0idHJ1ZSIvPgotCQk8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLQkgPC90YXJnZXQ+CisgICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0iZm9yY2UiIHZhbHVlPSJ0cnVlIi8+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgorICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJpbml0LWNvbW1vbiwgYnVpbGQsIHJ1biwgZGVwbG95LCB1bmRlcGxveSIvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uLCBidWlsZCwgZGVwbG95Ij4KLQkJPGphdmEgY2xhc3NuYW1lPSJvcmcuZ2xhc3NmaXNoLmRldnRlc3RzLndlYi5maWxlZG93bmxvYWQuV2ViVGVzdCIgY2xhc3NwYXRoPSIke3Rlc3R9Ii8+CisgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0ib3JnLmdsYXNzZmlzaC5kZXZ0ZXN0cy53ZWIuZmlsZWRvd25sb2FkLldlYlRlc3QiIGNsYXNzcGF0aD0iJHt0ZXN0fSIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZmlsZURvd25sb2FkVGltZW91dC9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvZGV2dGVzdHMvd2ViL2ZpbGVkb3dubG9hZC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZmlsZURvd25sb2FkVGltZW91dC9zcmMvbWFpbi9qYXZhL29yZy9nbGFzc2Zpc2gvZGV2dGVzdHMvd2ViL2ZpbGVkb3dubG9hZC9XZWJUZXN0LmphdmEKaW5kZXggYTdkZjUzOC4uZTk2NDEyNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ZpbGVEb3dubG9hZFRpbWVvdXQvc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL2RldnRlc3RzL3dlYi9maWxlZG93bmxvYWQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9maWxlRG93bmxvYWRUaW1lb3V0L3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9kZXZ0ZXN0cy93ZWIvZmlsZWRvd25sb2FkL1dlYlRlc3QuamF2YQpAQCAtMzAsNjMgKzMwLDYzIEBACiAgKiBAYXV0aG9yIGp1c3Rpbi5kLmxlZUBvcmFjbGUuY29tCiAgKi8KIHB1YmxpYyBjbGFzcyBXZWJUZXN0IGV4dGVuZHMgQmFzZURldlRlc3QgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX05BTUUgPSAiZGVmYXVsdC1yZXNwb25zZS10eXBlIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9OQU1FID0gImRlZmF1bHQtcmVzcG9uc2UtdHlwZSI7CiAKLQlieXRlW10gYmEgPSBuZXcgYnl0ZVsxMDI0XTsKKyAgICBieXRlW10gYmEgPSBuZXcgYnl0ZVsxMDI0XTsKIAotCUBPdmVycmlkZQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdERlc2NyaXB0aW9uKCkgewotCQlyZXR1cm4gImZpbGUgZG93bmxvYWQgdGltZSBvdXQgdGVzdCI7Ci0JfQorICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0VGVzdERlc2NyaXB0aW9uKCkgeworICAgICAgICByZXR1cm4gImZpbGUgZG93bmxvYWQgdGltZSBvdXQgdGVzdCI7CisgICAgfQogCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRUZXN0TmFtZSgpIHsKLQkJcmV0dXJuIFRFU1RfTkFNRTsKLQl9CisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIFN0cmluZyBnZXRUZXN0TmFtZSgpIHsKKyAgICAgICAgcmV0dXJuIFRFU1RfTkFNRTsKKyAgICB9CiAKIAotCS8qKgotCSAqIEBwYXJhbSBhcmdzIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzCi0JICovCi0JcHVibGljIHZvaWQgcnVuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWFzYWRtaW4oInNldCIsICJjb25maWdzLmNvbmZpZy5zZXJ2ZXItY29uZmlnLm5ldHdvcmstY29uZmlnLnByb3RvY29scy5wcm90b2NvbC5odHRwLWxpc3RlbmVyLTEuaHR0cC50aW1lb3V0LXNlY29uZHM9MzAwIik7Ci0JCS8vIFRPRE8gY29kZSBhcHBsaWNhdGlvbiBsb2dpYyBoZXJlCi0JCVVSTCB1ID0gbmV3IFVSTCgiaHR0cDovL2xvY2FsaG9zdDoiICsgYW50UHJvcCgiaHR0cC5wb3J0IikgKyAiL3dlYi1maWxlLWRvd25sb2FkLXRpbWVvdXQvd2Vic2VydmljZXMtb3NnaS5qYXIiKTsKLQkJSHR0cFVSTENvbm5lY3Rpb24gaHVjID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1Lm9wZW5Db25uZWN0aW9uKCk7Ci0JCWh1Yy5zZXRSZXF1ZXN0TWV0aG9kKCJHRVQiKTsKLQkJaHVjLnNldFJlYWRUaW1lb3V0KDApOworICAgIC8qKgorICAgICAqIEBwYXJhbSBhcmdzIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzCisgICAgICovCisgICAgcHVibGljIHZvaWQgcnVuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGFzYWRtaW4oInNldCIsICJjb25maWdzLmNvbmZpZy5zZXJ2ZXItY29uZmlnLm5ldHdvcmstY29uZmlnLnByb3RvY29scy5wcm90b2NvbC5odHRwLWxpc3RlbmVyLTEuaHR0cC50aW1lb3V0LXNlY29uZHM9MzAwIik7CisgICAgICAgIC8vIFRPRE8gY29kZSBhcHBsaWNhdGlvbiBsb2dpYyBoZXJlCisgICAgICAgIFVSTCB1ID0gbmV3IFVSTCgiaHR0cDovL2xvY2FsaG9zdDoiICsgYW50UHJvcCgiaHR0cC5wb3J0IikgKyAiL3dlYi1maWxlLWRvd25sb2FkLXRpbWVvdXQvd2Vic2VydmljZXMtb3NnaS5qYXIiKTsKKyAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gaHVjID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1Lm9wZW5Db25uZWN0aW9uKCk7CisgICAgICAgIGh1Yy5zZXRSZXF1ZXN0TWV0aG9kKCJHRVQiKTsKKyAgICAgICAgaHVjLnNldFJlYWRUaW1lb3V0KDApOwogCi0JCUlucHV0U3RyZWFtIGlzID0gaHVjLmdldElucHV0U3RyZWFtKCk7CisgICAgICAgIElucHV0U3RyZWFtIGlzID0gaHVjLmdldElucHV0U3RyZWFtKCk7CiAKLQkJRmlsZSBiYXNlID0gbmV3IEZpbGUoInNyYy9tYWluL3dlYmFwcC93ZWJzZXJ2aWNlcy1vc2dpLmphciIpOwotCQlGaWxlIHRtcCA9IG5ldyBGaWxlKCIvdG1wIik7Ci0JCWlmKCF0bXAuZXhpc3RzKCkpIHsKLQkJCXRtcCA9IG5ldyBGaWxlKFN5c3RlbS5nZXRQcm9wZXJ0eSgiamF2YS5pby50bXBkaXIiKSk7Ci0JCX0KLQkJRmlsZSBmaWxlID0gRmlsZS5jcmVhdGVUZW1wRmlsZSgid2Vic2VydmljZXMtb3NnaSIsICIuamFyIiwgdG1wKTsKLQkJZmlsZS5kZWxldGVPbkV4aXQoKTsKLQkJRmlsZU91dHB1dFN0cmVhbSBmb3MgPSBuZXcgRmlsZU91dHB1dFN0cmVhbShmaWxlKTsKKyAgICAgICAgRmlsZSBiYXNlID0gbmV3IEZpbGUoInNyYy9tYWluL3dlYmFwcC93ZWJzZXJ2aWNlcy1vc2dpLmphciIpOworICAgICAgICBGaWxlIHRtcCA9IG5ldyBGaWxlKCIvdG1wIik7CisgICAgICAgIGlmKCF0bXAuZXhpc3RzKCkpIHsKKyAgICAgICAgICAgIHRtcCA9IG5ldyBGaWxlKFN5c3RlbS5nZXRQcm9wZXJ0eSgiamF2YS5pby50bXBkaXIiKSk7CisgICAgICAgIH0KKyAgICAgICAgRmlsZSBmaWxlID0gRmlsZS5jcmVhdGVUZW1wRmlsZSgid2Vic2VydmljZXMtb3NnaSIsICIuamFyIiwgdG1wKTsKKyAgICAgICAgZmlsZS5kZWxldGVPbkV4aXQoKTsKKyAgICAgICAgRmlsZU91dHB1dFN0cmVhbSBmb3MgPSBuZXcgRmlsZU91dHB1dFN0cmVhbShmaWxlKTsKIAotCQlpbnQgYzsKLQkJTG9uZyBzdGFydCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQl0cnkgewotCQkJd2hpbGUgKChjID0gaXMucmVhZChiYSkpICE9IC0xKSB7Ci0JCQkJZm9zLndyaXRlKGJhLCAwLCBjKTsKLQkJCQlUaHJlYWQuc2xlZXAoMTApOwotCQkJfQotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfSBmaW5hbGx5IHsKLQkJCWlzLmNsb3NlKCk7Ci0JCQlmb3MuY2xvc2UoKTsKLQkJCWFzYWRtaW4oInNldCIsICJjb25maWdzLmNvbmZpZy5zZXJ2ZXItY29uZmlnLm5ldHdvcmstY29uZmlnLnByb3RvY29scy5wcm90b2NvbC5odHRwLWxpc3RlbmVyLTEuaHR0cC50aW1lb3V0LXNlY29uZHM9Iik7Ci0JCX0KLQkJTG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICAgICAgaW50IGM7CisgICAgICAgIExvbmcgc3RhcnQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHdoaWxlICgoYyA9IGlzLnJlYWQoYmEpKSAhPSAtMSkgeworICAgICAgICAgICAgICAgIGZvcy53cml0ZShiYSwgMCwgYyk7CisgICAgICAgICAgICAgICAgVGhyZWFkLnNsZWVwKDEwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBpcy5jbG9zZSgpOworICAgICAgICAgICAgZm9zLmNsb3NlKCk7CisgICAgICAgICAgICBhc2FkbWluKCJzZXQiLCAiY29uZmlncy5jb25maWcuc2VydmVyLWNvbmZpZy5uZXR3b3JrLWNvbmZpZy5wcm90b2NvbHMucHJvdG9jb2wuaHR0cC1saXN0ZW5lci0xLmh0dHAudGltZW91dC1zZWNvbmRzPSIpOworICAgICAgICB9CisgICAgICAgIExvbmcgZW5kID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAKLQkJcmVwb3J0KFRFU1RfTkFNRSwgMzAgPD0gKGVuZCAtIHN0YXJ0KS8xMDAwKTsKLQkJYm9vbGVhbiBzYW1lID0gYmFzZS5sZW5ndGgoKSA9PSBmaWxlLmxlbmd0aCgpOwotCQlyZXBvcnQoVEVTVF9OQU1FLCBzYW1lKTsKLQl9CisgICAgICAgIHJlcG9ydChURVNUX05BTUUsIDMwIDw9IChlbmQgLSBzdGFydCkvMTAwMCk7CisgICAgICAgIGJvb2xlYW4gc2FtZSA9IGJhc2UubGVuZ3RoKCkgPT0gZmlsZS5sZW5ndGgoKTsKKyAgICAgICAgcmVwb3J0KFRFU1RfTkFNRSwgc2FtZSk7CisgICAgfQogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIG5ldyBXZWJUZXN0KCkucnVuKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZmlsdGVyTXVsdGlwbGVJbml0L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9maWx0ZXJNdWx0aXBsZUluaXQvV2ViVGVzdC5qYXZhCmluZGV4IDM4N2I4ODcuLjI4OGE4ZDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9maWx0ZXJNdWx0aXBsZUluaXQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9maWx0ZXJNdWx0aXBsZUluaXQvV2ViVGVzdC5qYXZhCkBAIC00Myw3ICs0Myw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgSVQgMTE5NzkiKTsKQEAgLTc4LDcgKzc4LDcgQEAKICAgICBwdWJsaWMgYm9vbGVhbiBkb1Rlc3QoU3RyaW5nIHBhZ2UpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjb250ZXh0Um9vdCArICIvIiArIHBhZ2UpOwotICAgICAKKwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CiAKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZmlsdGVyTXVsdGlwbGVJbml0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZmlsdGVyTXVsdGlwbGVJbml0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNjU3NTBiYS4uYjgwNmYzMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ZpbHRlck11bHRpcGxlSW5pdC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9maWx0ZXJNdWx0aXBsZUluaXQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1maWx0ZXItbXVsdGlwbGUtaW5pdCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ZpbHRlck11bHRpcGxlSW5pdC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZmlsdGVyTXVsdGlwbGVJbml0L2J1aWxkLnhtbAppbmRleCBiYzg3MzkwLi41ZTcwNDE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZmlsdGVyTXVsdGlwbGVJbml0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZmlsdGVyTXVsdGlwbGVJbml0L2J1aWxkLnhtbApAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YmFzZWRpcn0iIGluY2x1ZGVzPSJXZWJUZXN0Ki5jbGFzcyIvPgogICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDUsMjMgKzQ1LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzMsMTAgKzczLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ZpbHRlclVSSU1hcHBpbmcvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ZpbHRlclVSSU1hcHBpbmcvV2ViVGVzdC5qYXZhCmluZGV4IDY5YWU2MjQuLjNjZTIwYmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9maWx0ZXJVUklNYXBwaW5nL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZmlsdGVyVVJJTWFwcGluZy9XZWJUZXN0LmphdmEKQEAgLTIyLDcgKzIyLDcgQEAKIAogcHVibGljIGNsYXNzIFdlYlRlc3QKIHsKLSAgICAKKwogICAgIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdD0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCkBAIC00MywxNiArNDMsMTYgQEAKIAogICAgICAgICAvLyBUaGUgc3RhdCByZXBvcnRlciB3cml0ZXMgb3V0IHRoZSB0ZXN0IGluZm8gYW5kIHJlc3VsdHMKICAgICAgICAgLy8gaW50byB0aGUgdG9wLWxldmVsIHF1aWNrbG9vayBkaXJlY3RvcnkgZHVyaW5nIGEgcnVuLgotICAgICAgCisKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciA0OTAzMjA5Iik7CiAKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CiAKICAgICAgICAgaW50IHBvcnQgPSBuZXcgSW50ZWdlcih3ZWJUZXN0LnBvcnRTKS5pbnRWYWx1ZSgpOwogICAgICAgICBTdHJpbmcgbmFtZTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIC8vIENoZWNrIGlmIGl0IHN0cmlwcyBvdXQgdXJpIHBhcmFtZXRlcnMgKCI7LioiKSAKKyAgICAgICAgICAgIC8vIENoZWNrIGlmIGl0IHN0cmlwcyBvdXQgdXJpIHBhcmFtZXRlcnMgKCI7LioiKQogICAgICAgICAgICAgLy8gYmVmb3JlIG1hcHBpbmcgdG8gd2ViYXBwcwogICAgICAgICAgICAgd2ViVGVzdC5nb0dldCh3ZWJUZXN0Lmhvc3QsIHBvcnQsCiAgICAgICAgICAgICAgICAgd2ViVGVzdC5jb250ZXh0Um9vdCArICIvU2VydmxldFRlc3Q7dGVzdD1hYWEiICk7CkBAIC04Miw3ICs4Miw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigoIkdFVCAiICsgY29udGV4dFBhdGggKyAiIEhUVFAvMS4wXG4iKSk7CiAgICAgICAgIG9zLndyaXRlKCgiR0VUICIgKyBjb250ZXh0UGF0aCArICIgSFRUUC8xLjBcbiIpLmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IG51bGw7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJpcyA9IG51bGw7CiAgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKQEAgLTEyMyw1ICsxMjMsNSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FICsgIiBGQUlMRUQiLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAgICB9Ci0gIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZmlsdGVyVVJJTWFwcGluZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ZpbHRlclVSSU1hcHBpbmcvYnVpbGQucHJvcGVydGllcwppbmRleCA0MWIzN2U4Li40MDVlMGNiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZmlsdGVyVVJJTWFwcGluZy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9maWx0ZXJVUklNYXBwaW5nL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE0ICsxNSwxNCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1maWx0ZXJVUklNYXBwaW5nIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1maWx0ZXJVUklNYXBwaW5nIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iL3dlYi1maWx0ZXJVUklNYXBwaW5nIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZmlsdGVyVVJJTWFwcGluZy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZmlsdGVyVVJJTWFwcGluZy9idWlsZC54bWwKaW5kZXggODU0MmU5MS4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ZpbHRlclVSSU1hcHBpbmcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9maWx0ZXJVUklNYXBwaW5nL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTcgKzQyLDE3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZmlsdGVyVVJJTWFwcGluZy9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZmlsdGVyVVJJTWFwcGluZy9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggYzliODFmZS4uMWQ3MDJiOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ZpbHRlclVSSU1hcHBpbmcvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9maWx0ZXJVUklNYXBwaW5nL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjYsMjMgKzI2LDIzIEBACiAgICAgPGZpbHRlcj4KICAgICAgICAgPGZpbHRlci1uYW1lPkZpbHRlclRlc3Q8L2ZpbHRlci1uYW1lPgogICAgICAgICA8ZmlsdGVyLWNsYXNzPnRlc3QuRmlsdGVyVGVzdDwvZmlsdGVyLWNsYXNzPgotICAgIDwvZmlsdGVyPiAgICAKLSAgICAgICAgCisgICAgPC9maWx0ZXI+CisKICAgICA8ZmlsdGVyLW1hcHBpbmc+CiAgICAgICAgIDxmaWx0ZXItbmFtZT5GaWx0ZXJUZXN0PC9maWx0ZXItbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi9TZXJ2bGV0VGVzdDwvdXJsLXBhdHRlcm4+CiAgICAgICAgIDxkaXNwYXRjaGVyPlJFUVVFU1Q8L2Rpc3BhdGNoZXI+CiAgICAgICAgIDxkaXNwYXRjaGVyPklOQ0xVREU8L2Rpc3BhdGNoZXI+Ci0gICAgICAgIDxkaXNwYXRjaGVyPkZPUldBUkQ8L2Rpc3BhdGNoZXI+ICAKLSAgICAgICAgPGRpc3BhdGNoZXI+RVJST1I8L2Rpc3BhdGNoZXI+IAorICAgICAgICA8ZGlzcGF0Y2hlcj5GT1JXQVJEPC9kaXNwYXRjaGVyPgorICAgICAgICA8ZGlzcGF0Y2hlcj5FUlJPUjwvZGlzcGF0Y2hlcj4KICAgICA8L2ZpbHRlci1tYXBwaW5nPgogCiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldFRlc3Q8L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0PC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAotICAgIAorICAgIDwvc2VydmxldD4KKwogICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi9TZXJ2bGV0VGVzdDwvdXJsLXBhdHRlcm4+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZmlsdGVyVVJJTWFwcGluZy9zZXJ2bGV0L0ZpbHRlclRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9maWx0ZXJVUklNYXBwaW5nL3NlcnZsZXQvRmlsdGVyVGVzdC5qYXZhCmluZGV4IGZjZjM2MjQuLmVlYzk1N2UgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9maWx0ZXJVUklNYXBwaW5nL3NlcnZsZXQvRmlsdGVyVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9maWx0ZXJVUklNYXBwaW5nL3NlcnZsZXQvRmlsdGVyVGVzdC5qYXZhCkBAIC0xOSwyNSArMTksMjUgQEAKIGltcG9ydCBqYWthcnRhLnNlcnZsZXQuKjsKIGltcG9ydCBqYWthcnRhLnNlcnZsZXQuaHR0cC4qOwogcHVibGljIGNsYXNzIEZpbHRlclRlc3QgaW1wbGVtZW50cyBGaWx0ZXJ7Ci0gICAgCisKICAgICBwcml2YXRlIFNlcnZsZXRDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltGaWx0ZXIuZGVzdHJveV0iKTsKLSAgICB9ICAgIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyB2b2lkIGRvRmlsdGVyKFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSwgRmlsdGVyQ2hhaW4gZmlsdGVyQ2hhaW4pIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uLCBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW0ZpbHRlci5kb0ZpbHRlcl0iKTsKLSAgICAgICAgICAKKwogICAgICAgICAoKEh0dHBTZXJ2bGV0UmVxdWVzdClyZXF1ZXN0KS5nZXRTZXNzaW9uKCkuc2V0QXR0cmlidXRlKCJGSUxURVIiLCAiUEFTUyIpOwogICAgICAgICBmaWx0ZXJDaGFpbi5kb0ZpbHRlcihyZXF1ZXN0LCByZXNwb25zZSk7Ci0gICAgICAgIAotICAgIH0gICAgCi0gICAgCi0gICAgCisKKyAgICB9CisKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoamFrYXJ0YS5zZXJ2bGV0LkZpbHRlckNvbmZpZyBmaWx0ZXJDb25maWcpIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW0ZpbHRlci5pbml0XSIpOwogICAgICAgICBjb250ZXh0ID0gZmlsdGVyQ29uZmlnLmdldFNlcnZsZXRDb250ZXh0KCk7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZmlsdGVyVVJJTWFwcGluZy9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZmlsdGVyVVJJTWFwcGluZy9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKaW5kZXggYTc2Zjg4Mi4uZjFmNjI3YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ZpbHRlclVSSU1hcHBpbmcvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9maWx0ZXJVUklNYXBwaW5nL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQpAQCAtMjUsMTMgKzI1LDEzIEBACiBwdWJsaWMgY2xhc3MgU2VydmxldFRlc3QgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAKICAgICBwcml2YXRlIFNlcnZsZXRDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5pbml0XSIpOyAgICAgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuaW5pdF0iKTsKICAgICAgICAgY29udGV4dCA9IGNvbmZpZy5nZXRTZXJ2bGV0Q29udGV4dCgpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmluaXRdICIgKyBjb250ZXh0LmdldE1ham9yVmVyc2lvbigpKTsKLSAgICAgICAgCisKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKQEAgLTM5LDE4ICszOSwxOCBAQAogICAgICAgICBkb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgICAgICAgIAorICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5kb1Bvc3RdIik7Ci0gICAgICAgIAorCiAgICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7Ci0gICAgICAgIAorCiAgICAgICAgIE9iamVjdCBvYmogPSByZXF1ZXN0LmdldFNlc3Npb24oKS5nZXRBdHRyaWJ1dGUoIkZJTFRFUiIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ob2JqKTsKICAgICAgICAgaWYgKChvYmogIT0gbnVsbCkgJiYgKG9iai5lcXVhbHMoIlBBU1MiKSkpIHsKICAgICAgICAgICAgIG91dC5wcmludGxuKCJGaWx0ZXIgaW52b2tlZCIpOwogICAgICAgICB9Ci0gICAgICAgIAkKKwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm0tYmFzZWQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm0tYmFzZWQvV2ViVGVzdC5qYXZhCmluZGV4IDdiNmFmNjYuLjdhZjQ2MDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtLWJhc2VkL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybS1iYXNlZC9XZWJUZXN0LmphdmEKQEAgLTIyLDcgKzIyLDcgQEAKIAogcHVibGljIGNsYXNzIFdlYlRlc3QKIHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX05BTUUgPSAiZm9ybS1iYXNlZCI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEpTRVNTSU9OSUQgPSAiSlNFU1NJT05JRCI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEZJTFRFUl9SRVFVRVNUID0gIkZJTFRFUi1SRVFVRVNUOiI7CkBAIC01Miw3ICs1Miw3IEBACiAKICAgICAgICAgLy8gVGhlIHN0YXQgcmVwb3J0ZXIgd3JpdGVzIG91dCB0aGUgdGVzdCBpbmZvIGFuZCByZXN1bHRzCiAgICAgICAgIC8vIGludG8gdGhlIHRvcC1sZXZlbCBxdWlja2xvb2sgZGlyZWN0b3J5IGR1cmluZyBhIHJ1bi4KLSAgICAgIAorCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlN0YW5kYWxvbmUganNyMTE1ICB3YXIgdGVzdCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKIApAQCAtOTIsNyArOTIsNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludChnZXQpOwogICAgICAgICAgICAgb3Mud3JpdGUoZ2V0LmdldEJ5dGVzKCkpOwogICAgICAgICAgICAgb3Mud3JpdGUoIlxyXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICAgICAgaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgICAgICBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKIApAQCAtMTExLDcgKzExMSw3IEBACiAgICAgICAgICAgICBjbG9zZShpcyk7CiAgICAgICAgICAgICBjbG9zZShicik7CiAgICAgICAgIH0KLSAKKwogICAgICAgICBpZiAoY29va2llID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIk1pc3NpbmcgU2V0LUNvb2tpZSByZXNwb25zZSBoZWFkZXIiKTsKICAgICAgICAgfQpAQCAtMTQxLDcgKzE0MSw3IEBACiAgICAgICAgICAgICBTdHJpbmcgY29va2llID0gIkNvb2tpZTogIiArIGpzZXNzaW9uSWQgKyAiXG4iOwogICAgICAgICAgICAgb3Mud3JpdGUoY29va2llLmdldEJ5dGVzKCkpOwogICAgICAgICAgICAgb3Mud3JpdGUoIlxyXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICAgICAgaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgICAgICBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKIApAQCAtMTg4LDcgKzE4OCw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oc2VuZENvb2tpZSk7CiAgICAgICAgICAgICBvcy53cml0ZShzZW5kQ29va2llLmdldEJ5dGVzKCkpOwogICAgICAgICAgICAgb3Mud3JpdGUoIlxyXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICAgICAgaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgICAgICBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm0tYmFzZWQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtLWJhc2VkL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggM2Y0MmM1OC4uNjk1ZmM4MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm0tYmFzZWQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybS1iYXNlZC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNCArMTUsMTQgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZm9ybS1iYXNlZCIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZm9ybS1iYXNlZCIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii93ZWItZm9ybS1iYXNlZCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm0tYmFzZWQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm0tYmFzZWQvYnVpbGQueG1sCmluZGV4IDQ3Njc1ODYuLmRjMzk4NGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtLWJhc2VkL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybS1iYXNlZC9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTUyLDExICs1MiwxMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmpzcCIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5qc3AiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCkBAIC02NCw4ICs2NCw4IEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTc1LDcgKzc1LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtODksMTAgKzg5LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVzdG9yZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS11c2VyLWNvbW1vbiI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybS1iYXNlZC9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybS1iYXNlZC9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggZjE1ZjRjMy4uNzM5MWQ3OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm0tYmFzZWQvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtLWJhc2VkL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjIsMzcgKzIyLDM3IEBACiAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIgogICAgICAgICAgdmVyc2lvbj0iMi40Ij4KLSAgICAgCisKICAgICA8ZmlsdGVyPgogICAgICAgICA8ZmlsdGVyLW5hbWU+RmlsdGVyVGVzdDwvZmlsdGVyLW5hbWU+CiAgICAgICAgIDxmaWx0ZXItY2xhc3M+dGVzdC5GaWx0ZXJUZXN0PC9maWx0ZXItY2xhc3M+Ci0gICAgPC9maWx0ZXI+ICAgIAotICAgICAgICAKKyAgICA8L2ZpbHRlcj4KKwogICAgIDxmaWx0ZXItbWFwcGluZz4KICAgICAgICAgPGZpbHRlci1uYW1lPkZpbHRlclRlc3Q8L2ZpbHRlci1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+Lyo8L3VybC1wYXR0ZXJuPgogICAgICAgICA8ZGlzcGF0Y2hlcj5SRVFVRVNUPC9kaXNwYXRjaGVyPgogICAgICAgICA8ZGlzcGF0Y2hlcj5JTkNMVURFPC9kaXNwYXRjaGVyPgotICAgICAgICA8ZGlzcGF0Y2hlcj5GT1JXQVJEPC9kaXNwYXRjaGVyPiAgCi0gICAgICAgIDxkaXNwYXRjaGVyPkVSUk9SPC9kaXNwYXRjaGVyPiAKKyAgICAgICAgPGRpc3BhdGNoZXI+Rk9SV0FSRDwvZGlzcGF0Y2hlcj4KKyAgICAgICAgPGRpc3BhdGNoZXI+RVJST1I8L2Rpc3BhdGNoZXI+CiAgICAgPC9maWx0ZXItbWFwcGluZz4KLSAgICAKKwogICAgIDxzZXJ2bGV0PgogICAgICAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXRUZXN0PC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldFRlc3QyPC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3QyPC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuU2VydmxldFRlc3QyPC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAorICAgIDwvc2VydmxldD4KICAgICA8c2VydmxldD4KICAgICAgICAgPGRpc3BsYXktbmFtZT5TZXJ2bGV0VGVzdDM8L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDM8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDM8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCi0gICAgCisgICAgPC9zZXJ2bGV0PgorCiAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vU2VydmxldFRlc3Q8L3VybC1wYXR0ZXJuPgpAQCAtNjUsNyArNjUsNyBAQAogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0Mzwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L1NlcnZsZXRUZXN0MzwvdXJsLXBhdHRlcm4+CiAgICAgPC9zZXJ2bGV0LW1hcHBpbmc+Ci0gICAgCisKICAgICA8c2Vzc2lvbi1jb25maWc+CiAgICAgICAgIDxzZXNzaW9uLXRpbWVvdXQ+MTA8L3Nlc3Npb24tdGltZW91dD4KICAgICA8L3Nlc3Npb24tY29uZmlnPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm0tYmFzZWQvc2VydmxldC9GaWx0ZXJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybS1iYXNlZC9zZXJ2bGV0L0ZpbHRlclRlc3QuamF2YQppbmRleCBmY2YzNjI0Li5lZWM5NTdlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybS1iYXNlZC9zZXJ2bGV0L0ZpbHRlclRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybS1iYXNlZC9zZXJ2bGV0L0ZpbHRlclRlc3QuamF2YQpAQCAtMTksMjUgKzE5LDI1IEBACiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lio7CiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuKjsKIHB1YmxpYyBjbGFzcyBGaWx0ZXJUZXN0IGltcGxlbWVudHMgRmlsdGVyewotICAgIAorCiAgICAgcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbRmlsdGVyLmRlc3Ryb3ldIik7Ci0gICAgfSAgICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgdm9pZCBkb0ZpbHRlcihTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UsIEZpbHRlckNoYWluIGZpbHRlckNoYWluKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiwgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltGaWx0ZXIuZG9GaWx0ZXJdIik7Ci0gICAgICAgICAgCisKICAgICAgICAgKChIdHRwU2VydmxldFJlcXVlc3QpcmVxdWVzdCkuZ2V0U2Vzc2lvbigpLnNldEF0dHJpYnV0ZSgiRklMVEVSIiwgIlBBU1MiKTsKICAgICAgICAgZmlsdGVyQ2hhaW4uZG9GaWx0ZXIocmVxdWVzdCwgcmVzcG9uc2UpOwotICAgICAgICAKLSAgICB9ICAgIAotICAgIAotICAgIAorCisgICAgfQorCisKICAgICBwdWJsaWMgdm9pZCBpbml0KGpha2FydGEuc2VydmxldC5GaWx0ZXJDb25maWcgZmlsdGVyQ29uZmlnKSB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltGaWx0ZXIuaW5pdF0iKTsKICAgICAgICAgY29udGV4dCA9IGZpbHRlckNvbmZpZy5nZXRTZXJ2bGV0Q29udGV4dCgpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm0tYmFzZWQvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm0tYmFzZWQvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCmluZGV4IGQ0YTMxNzQuLmRhYTgwNTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtLWJhc2VkL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybS1iYXNlZC9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKQEAgLTQ2LDEzICs0NiwxMyBAQAogcHVibGljIGNsYXNzIFNlcnZsZXRUZXN0IGV4dGVuZHMgSHR0cFNlcnZsZXQgaW1wbGVtZW50cyBIdHRwU2Vzc2lvbkxpc3RlbmVyIHsKIAogICAgIHByaXZhdGUgU2VydmxldENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmluaXRdIik7ICAgICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5pbml0XSIpOwogICAgICAgICBjb250ZXh0ID0gY29uZmlnLmdldFNlcnZsZXRDb250ZXh0KCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuaW5pdF0gIiArIGNvbnRleHQuZ2V0TWFqb3JWZXJzaW9uKCkpOwotICAgICAgICAKKwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewpAQCAtNjAsMjMgKzYwLDIzIEBACiAgICAgICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAgICAgICAgCisgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmRvUG9zdF0iKTsKLSAgICAgICAgCisKICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKLSAgICAgICAgCisKICAgICAgICAgcmVxdWVzdC5nZXRTZXNzaW9uKCkuc2V0QXR0cmlidXRlKCJGSUxURVItUkVRVUVTVCIsIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLmdldEF0dHJpYnV0ZSgiRklMVEVSIikpOwotICAgICAgICByZXF1ZXN0LmdldFNlc3Npb24oKS5zZXRBdHRyaWJ1dGUoIkZJTFRFUiIsICJGQUlMIik7ICAgICAgICAKLSAgICAgICAgCQorICAgICAgICByZXF1ZXN0LmdldFNlc3Npb24oKS5zZXRBdHRyaWJ1dGUoIkZJTFRFUiIsICJGQUlMIik7CisKICAgICAgICAgUmVxdWVzdERpc3BhdGNoZXIgcmQgPSBjb250ZXh0LmdldFJlcXVlc3REaXNwYXRjaGVyKCIvU2VydmxldFRlc3QyIik7Ci0gICAgICAgIHJkLmZvcndhcmQocmVxdWVzdCwgcmVzcG9uc2UpOyAgICAgICAKKyAgICAgICAgcmQuZm9yd2FyZChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2Vzc2lvbkNyZWF0ZWQoamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb25FdmVudCBodHRwU2Vzc2lvbkV2ZW50KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuc2Vzc2lvbkNyZWF0ZWRdIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2Vzc2lvbkRlc3Ryb3llZChqYWthcnRhLnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbkV2ZW50IGh0dHBTZXNzaW9uRXZlbnQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5zZXNzaW9uRGVzdHJveWVkXSIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkF0dHJpYnV0ZXM6ICIgKyBodHRwU2Vzc2lvbkV2ZW50LmdldFNlc3Npb24oKS5nZXRBdHRyaWJ1dGUoInRlc3QiKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybS1iYXNlZC9zZXJ2bGV0L1NlcnZsZXRUZXN0Mi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm0tYmFzZWQvc2VydmxldC9TZXJ2bGV0VGVzdDIuamF2YQppbmRleCBkYjJjYjUwLi4wMDc3NWE2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybS1iYXNlZC9zZXJ2bGV0L1NlcnZsZXRUZXN0Mi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtLWJhc2VkL3NlcnZsZXQvU2VydmxldFRlc3QyLmphdmEKQEAgLTI1LDEwICsyNSwxMCBAQAogcHVibGljIGNsYXNzIFNlcnZsZXRUZXN0MiBleHRlbmRzIEh0dHBTZXJ2bGV0IGltcGxlbWVudHMgSHR0cFNlc3Npb25MaXN0ZW5lciB7CiAKICAgICBwcml2YXRlIFNlcnZsZXRDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldDIuaW5pdF0iKTsgICAgICAgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0Mi5pbml0XSIpOwogICAgICAgICBjb250ZXh0ID0gY29uZmlnLmdldFNlcnZsZXRDb250ZXh0KCk7CiAgICAgfQogCkBAIC0zNywyMyArMzcsMjMgQEAKICAgICAgICAgZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7ICAgICAgICAKKyAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQyLmRvUG9zdF0iKTsKLSAgICAgIAorCiAgICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7Ci0gICAgICAgIAorCiAgICAgICAgIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLnNldEF0dHJpYnV0ZSgiRklMVEVSLUZPUldBUkQiLHJlcXVlc3QuZ2V0U2Vzc2lvbigpLmdldEF0dHJpYnV0ZSgiRklMVEVSIikpOwotICAgICAgICByZXF1ZXN0LmdldFNlc3Npb24oKS5zZXRBdHRyaWJ1dGUoIkZJTFRFUiIsICJGQUlMIik7ICAgICAgICAKLSAgICAgICAgCisgICAgICAgIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLnNldEF0dHJpYnV0ZSgiRklMVEVSIiwgIkZBSUwiKTsKKwogICAgICAgICBSZXF1ZXN0RGlzcGF0Y2hlciByZCA9IHJlcXVlc3QuZ2V0UmVxdWVzdERpc3BhdGNoZXIoIi9TZXJ2bGV0VGVzdDMiKTsKLSAgICAgICAgcmQuaW5jbHVkZShyZXF1ZXN0LCByZXNwb25zZSk7ICAgICAKKyAgICAgICAgcmQuaW5jbHVkZShyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQotIAorCiAgICAgcHVibGljIHZvaWQgc2Vzc2lvbkNyZWF0ZWQoamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb25FdmVudCBodHRwU2Vzc2lvbkV2ZW50KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuc2Vzc2lvbkNyZWF0ZWRdIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2Vzc2lvbkRlc3Ryb3llZChqYWthcnRhLnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbkV2ZW50IGh0dHBTZXNzaW9uRXZlbnQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5zZXNzaW9uRGVzdHJveWVkXSIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkF0dHJpYnV0ZXM6ICIgKyBodHRwU2Vzc2lvbkV2ZW50LmdldFNlc3Npb24oKS5nZXRBdHRyaWJ1dGUoInRlc3QiKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybS1iYXNlZC9zZXJ2bGV0L1NlcnZsZXRUZXN0My5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm0tYmFzZWQvc2VydmxldC9TZXJ2bGV0VGVzdDMuamF2YQppbmRleCAzZThkMjViLi5lNzhmZWMyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybS1iYXNlZC9zZXJ2bGV0L1NlcnZsZXRUZXN0My5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtLWJhc2VkL3NlcnZsZXQvU2VydmxldFRlc3QzLmphdmEKQEAgLTQ2LDExICs0NiwxMSBAQAogcHVibGljIGNsYXNzIFNlcnZsZXRUZXN0MyBleHRlbmRzIEh0dHBTZXJ2bGV0ewogCiAgICAgcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQzLmluaXRdIik7ICAgICAgICAKLSAgICAgICAgY29udGV4dCA9IGNvbmZpZy5nZXRTZXJ2bGV0Q29udGV4dCgpOyAgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQzLmluaXRdIik7CisgICAgICAgIGNvbnRleHQgPSBjb25maWcuZ2V0U2VydmxldENvbnRleHQoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKQEAgLTU4LDEyICs1OCwxMiBAQAogICAgICAgICBkb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgICAgICAgIAorICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldDMuZG9Qb3N0XSIpOwotICAgICAgICAKKwogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwotICAgICAgICAKKwogICAgICAgICBvdXQucHJpbnRsbigiRklMVEVSLVJFUVVFU1Q6IiArIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLmdldEF0dHJpYnV0ZSgiRklMVEVSLVJFUVVFU1QiKSk7CiAgICAgICAgIG91dC5wcmludGxuKCJGSUxURVItRk9SV0FSRDoiICsgcmVxdWVzdC5nZXRTZXNzaW9uKCkuZ2V0QXR0cmlidXRlKCJGSUxURVItRk9SV0FSRCIpKTsKICAgICAgICAgb3V0LnByaW50bG4oIkZJTFRFUi1JTkNMVURFOiIgKyByZXF1ZXN0LmdldFNlc3Npb24oKS5nZXRBdHRyaWJ1dGUoIkZJTFRFUiIpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtSGludEZpZWxkL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtSGludEZpZWxkL1dlYlRlc3QuamF2YQppbmRleCAwOTI1NzI5Li42NDNmYmY1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUhpbnRGaWVsZC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1IaW50RmllbGQvV2ViVGVzdC5qYXZhCkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIDQ5MjU0MDYiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC01OSw4ICs1OSw4IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZUpzcCgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtSGludEZpZWxkL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUhpbnRGaWVsZC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGM4YWFiNGEuLjI3MDExZjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtSGludEZpZWxkL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1IaW50RmllbGQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWZvcm0taGludC1maWVsZCIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZm9ybS1oaW50LWZpZWxkIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtSGludEZpZWxkL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtSGludEZpZWxkL2J1aWxkLnhtbAppbmRleCA4NTQyZTkxLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUhpbnRGaWVsZC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1IaW50RmllbGQvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxNyArNDIsMTcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIAogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtSGludEZpZWxkUG9zdFdpdGhRdWVyeVBhcmFtL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtSGludEZpZWxkUG9zdFdpdGhRdWVyeVBhcmFtL1dlYlRlc3QuamF2YQppbmRleCAzNmQ5MzE5Li5hNjJkNzEwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUhpbnRGaWVsZFBvc3RXaXRoUXVlcnlQYXJhbS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1IaW50RmllbGRQb3N0V2l0aFF1ZXJ5UGFyYW0vV2ViVGVzdC5qYXZhCkBAIC0yNSw3ICsyNSw3IEBACiAgKiBmb3JtLWhpbnQtZmllbGQgaWYgZm9ybSBhY3Rpb24gY29udGFpbnMgcXVlcnkgcGFyYW1ldGVycy4KICAqLwogcHVibGljIGNsYXNzIFdlYlRlc3QgewotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQKICAgICAgICAgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfTkFNRQpAQCAtNDksOCArNDksOCBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBydW4oKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CkBAIC02NiwxMCArNjYsMTAgQEAKICAgICAgICAgLy8gQ29uc3RydWN0IGJvZHkKICAgICAgICAgU3RyaW5nIGJvZHkgPSBVUkxFbmNvZGVyLmVuY29kZSgial9lbmNvZGluZyIsICJVVEYtOCIpCiAgICAgICAgICAgICArICI9IiArIFVSTEVuY29kZXIuZW5jb2RlKCJTaGlmdF9KSVMiLCAiVVRGLTgiKTsKLSAgICAKKwogICAgICAgICAvLyBDcmVhdGUgYSBzb2NrZXQgdG8gdGhlIGhvc3QKICAgICAgICAgU29ja2V0IHNvY2tldCA9IG5ldyBTb2NrZXQoaG9zdCwgbmV3IEludGVnZXIocG9ydCkuaW50VmFsdWUoKSk7Ci0gICAgCisKICAgICAgICAgLy8gU2VuZCBoZWFkZXIKICAgICAgICAgQnVmZmVyZWRXcml0ZXIgd3IgPSBuZXcgQnVmZmVyZWRXcml0ZXIobmV3IE91dHB1dFN0cmVhbVdyaXRlcigKICAgICAgICAgICAgIHNvY2tldC5nZXRPdXRwdXRTdHJlYW0oKSwgIlVURjgiKSk7CkBAIC03OCw3ICs3OCw3IEBACiAgICAgICAgIHdyLndyaXRlKCJDb250ZW50LUxlbmd0aDogIiArIGJvZHkubGVuZ3RoKCkgKyAiXHJcbiIpOwogICAgICAgICB3ci53cml0ZSgiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcclxuIik7CiAgICAgICAgIHdyLndyaXRlKCJcclxuIik7Ci0gICAgCisKICAgICAgICAgLy8gU2VuZCBib2R5CiAgICAgICAgIHdyLndyaXRlKGJvZHkpOwogICAgICAgICB3ci5mbHVzaCgpOwpAQCAtMTAxLDUgKzEwMSw1IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0KICAgIH0KLSAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtSGludEZpZWxkUG9zdFdpdGhRdWVyeVBhcmFtL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUhpbnRGaWVsZFBvc3RXaXRoUXVlcnlQYXJhbS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDk1OTBjN2YuLmZjYjk1Y2MgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtSGludEZpZWxkUG9zdFdpdGhRdWVyeVBhcmFtL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1IaW50RmllbGRQb3N0V2l0aFF1ZXJ5UGFyYW0vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1mb3JtLWhpbnQtZmllbGQtcG9zdC13aXRoLXF1ZXJ5LXBhcmFtIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUhpbnRGaWVsZFBvc3RXaXRoUXVlcnlQYXJhbS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUhpbnRGaWVsZFBvc3RXaXRoUXVlcnlQYXJhbS9idWlsZC54bWwKaW5kZXggODU0MmU5MS4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1IaW50RmllbGRQb3N0V2l0aFF1ZXJ5UGFyYW0vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtSGludEZpZWxkUG9zdFdpdGhRdWVyeVBhcmFtL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTcgKzQyLDE3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUhpbnRGaWVsZFBvc3RXaXRoUXVlcnlQYXJhbVByZWNlZGVuY2UvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1IaW50RmllbGRQb3N0V2l0aFF1ZXJ5UGFyYW1QcmVjZWRlbmNlL1dlYlRlc3QuamF2YQppbmRleCA3OGJmZTkzLi42YjFiN2ZhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUhpbnRGaWVsZFBvc3RXaXRoUXVlcnlQYXJhbVByZWNlZGVuY2UvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtSGludEZpZWxkUG9zdFdpdGhRdWVyeVBhcmFtUHJlY2VkZW5jZS9XZWJUZXN0LmphdmEKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgNjM0NjczOCIpOwogICAgICAgICBXZWJUZXN0IHRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTY3LDcgKzY3LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewpAQCAtNzYsNyArNzYsNyBAQAogCiAgICAgICAgIC8vIENyZWF0ZSBhIHNvY2tldCB0byB0aGUgaG9zdAogICAgICAgICBzb2NrZXQgPSBuZXcgU29ja2V0KGhvc3QsIG5ldyBJbnRlZ2VyKHBvcnQpLmludFZhbHVlKCkpOwotICAgIAorCiAgICAgICAgIC8vIFNlbmQgaGVhZGVyCiAgICAgICAgIEJ1ZmZlcmVkV3JpdGVyIHdyID0gbmV3IEJ1ZmZlcmVkV3JpdGVyKG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldC5nZXRPdXRwdXRTdHJlYW0oKSkpOwpAQCAtODUsNyArODUsNyBAQAogICAgICAgICB3ci53cml0ZSgiQ29udGVudC1MZW5ndGg6ICIgKyBib2R5Lmxlbmd0aCgpICsgIlxyXG4iKTsKICAgICAgICAgd3Iud3JpdGUoIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXHJcbiIpOwogICAgICAgICB3ci53cml0ZSgiXHJcbiIpOwotICAgIAorCiAgICAgICAgIC8vIFNlbmQgYm9keQogICAgICAgICB3ci53cml0ZShib2R5KTsKICAgICAgICAgd3IuZmx1c2goKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtSGludEZpZWxkUG9zdFdpdGhRdWVyeVBhcmFtUHJlY2VkZW5jZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1IaW50RmllbGRQb3N0V2l0aFF1ZXJ5UGFyYW1QcmVjZWRlbmNlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZjAwMDk1Yi4uNWRmNjVjNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1IaW50RmllbGRQb3N0V2l0aFF1ZXJ5UGFyYW1QcmVjZWRlbmNlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1IaW50RmllbGRQb3N0V2l0aFF1ZXJ5UGFyYW1QcmVjZWRlbmNlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZm9ybS1oaW50LWZpZWxkLXBvc3Qtd2l0aC1xdWVyeS1wYXJhbS1wcmVjZWRlbmNlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUhpbnRGaWVsZFBvc3RXaXRoUXVlcnlQYXJhbVByZWNlZGVuY2UvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1IaW50RmllbGRQb3N0V2l0aFF1ZXJ5UGFyYW1QcmVjZWRlbmNlL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUhpbnRGaWVsZFBvc3RXaXRoUXVlcnlQYXJhbVByZWNlZGVuY2UvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtSGludEZpZWxkUG9zdFdpdGhRdWVyeVBhcmFtUHJlY2VkZW5jZS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUhpbnRGaWVsZFByZWNlZGVuY2UvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1IaW50RmllbGRQcmVjZWRlbmNlL1dlYlRlc3QuamF2YQppbmRleCAwMjUyMjIzLi42MTk1ZTc4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUhpbnRGaWVsZFByZWNlZGVuY2UvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtSGludEZpZWxkUHJlY2VkZW5jZS9XZWJUZXN0LmphdmEKQEAgLTI0LDggKzI0LDggQEAKICAqIDxsb2NhbGUtY2hhcnNldC1pbmZvPiwgd2hpY2ggaGFzIGJlZW4gZGVwcmVjYXRlZC4KICAqCiAgKiBJbiBpdHMgc3VuLXdlYi54bWwsIHRoaXMgd2ViIG1vZHVsZSBzcGVjaWZpZXMgdHdvIHBhcmFtZXRlci1lbmNvZGluZwotICogZWxlbWVudHMsIGVhY2ggd2l0aCBhIGZvcm0taGludC1maWVsZCBhdHRyaWJ1dGU6IHRoZSB2YWx1ZSBvZiB0aGUgCi0gKiBmb3JtLWhpbnQtZmllbGQgYXR0cmlidXRlIG9mIHRoZSA8cGFyYW1ldGVyLWVuY29kaW5nPiBzdWJlbGVtZW50IG9mIAorICogZWxlbWVudHMsIGVhY2ggd2l0aCBhIGZvcm0taGludC1maWVsZCBhdHRyaWJ1dGU6IHRoZSB2YWx1ZSBvZiB0aGUKKyAqIGZvcm0taGludC1maWVsZCBhdHRyaWJ1dGUgb2YgdGhlIDxwYXJhbWV0ZXItZW5jb2Rpbmc+IHN1YmVsZW1lbnQgb2YKICAqIDxzdW4td2ViLWFwcD4gaXMgJ3N1bldlYkFwcEZyb21IaW50RmllbGQnLCB3aGVyZWFzIHRoZSB2YWx1ZSBvZiB0aGUKICAqIGZvcm0taGludC1maWVsZCBhdHRyaWJ1dGUgb2YgdGhlIDxwYXJhbWV0ZXItZW5jb2Rpbmc+IHN1YmVsZW1lbnQgb2YKICAqIDxsb2NhbGUtY2hhcnNldC1pbmZvPiBpcyAnbG9jYWxlQ2hhcnNldEluZm9Gb3JtSGludEZpZWxkJy4KQEAgLTY5LDcgKzY5LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oVEVTVF9OQU1FKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC03Nyw4ICs3Nyw4IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZUpzcCgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtSGludEZpZWxkUHJlY2VkZW5jZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1IaW50RmllbGRQcmVjZWRlbmNlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNDNhMTQxZi4uMWE4OTVjOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1IaW50RmllbGRQcmVjZWRlbmNlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1IaW50RmllbGRQcmVjZWRlbmNlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1mb3JtLWhpbnQtZmllbGQtcHJlY2VkZW5jZSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZm9ybS1oaW50LWZpZWxkLXByZWNlZGVuY2UiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1IaW50RmllbGRQcmVjZWRlbmNlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtSGludEZpZWxkUHJlY2VkZW5jZS9idWlsZC54bWwKaW5kZXggODU0MmU5MS4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1IaW50RmllbGRQcmVjZWRlbmNlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUhpbnRGaWVsZFByZWNlZGVuY2UvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxNyArNDIsMTcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIAogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtTG9naW5BY2Nlc3NTZXNzaW9uT25SZXN1bWVkUmVxdWVzdC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUxvZ2luQWNjZXNzU2Vzc2lvbk9uUmVzdW1lZFJlcXVlc3QvV2ViVGVzdC5qYXZhCmluZGV4IGNjYzE5ZWIuLjk3ODFkOTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtTG9naW5BY2Nlc3NTZXNzaW9uT25SZXN1bWVkUmVxdWVzdC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1Mb2dpbkFjY2Vzc1Nlc3Npb25PblJlc3VtZWRSZXF1ZXN0L1dlYlRlc3QuamF2YQpAQCAtMjAsNyArMjAsNyBAQAogCiAvKgogICogVW5pdCB0ZXN0IGZvciBodHRwOi8vZm9ydW1zLmphdmEubmV0L2ppdmUvdGhyZWFkLmpzcGE/bWVzc2FnZUlEPTI5OTg5OQotICogCisgKgogICogTWFrZSBzdXJlIHRoYXQgc2Vzc2lvbiBlc3RhYmxpc2hlZCBieSBGb3JtQXV0aGVudGljYXRvciBtYXkgYmUgYWNjZXNzZWQKICAqIChyZXN1bWVkKSBieSBwcm90ZWN0ZWQgcmVzb3VyY2UgKGluIHRoaXMgY2FzZSwgQWNjZXNzU2Vzc2lvbiBzZXJ2bGV0KSBldmVuCiAgKiBpZiB0aGUgb3JpZ2luYWwgcmVxdWVzdCB0aGF0IGNhdXNlZCBhIChyZSlsb2dpbiBjb250YWlucyBhIGNvb2tpZSB3aXRoIGFuCkBAIC01Niw3ICs1Niw3IEBACiAgICAgICAgIGFkbWluVXNlciA9IGFyZ3NbM107CiAgICAgICAgIGFkbWluUGFzc3dvcmQgPSBhcmdzWzRdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgdGhhdCBhY2Nlc3NlcyBzZXNzaW9uIGVzdGFibGlzaGVkIGJ5ICIgKwpAQCAtNzEsNyArNzEsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgcnVuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CkBAIC0xMDIsNyArMTAyLDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzZW5kQ29va2llKTsKICAgICAgICAgICAgIG9zLndyaXRlKHNlbmRDb29raWUuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgICAgICBvcy53cml0ZSgiXHJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgICAgICBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgICAgIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogCkBAIC0xMjEsNyArMTIxLDcgQEAKICAgICAgICAgICAgIGNsb3NlKGlzKTsKICAgICAgICAgICAgIGNsb3NlKGJyKTsKICAgICAgICAgfQotIAorCiAgICAgICAgIGlmIChjb29raWUgPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiTWlzc2luZyBTZXQtQ29va2llIHJlc3BvbnNlIGhlYWRlciIpOwogICAgICAgICB9CkBAIC0xNTEsNyArMTUxLDcgQEAKICAgICAgICAgICAgIFN0cmluZyBjb29raWUgPSAiQ29va2llOiAiICsganNlc3Npb25JZCArICJcbiI7CiAgICAgICAgICAgICBvcy53cml0ZShjb29raWUuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgICAgICBvcy53cml0ZSgiXHJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgICAgICBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgICAgIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogCkBAIC0xOTgsNyArMTk4LDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzZW5kQ29va2llKTsKICAgICAgICAgICAgIG9zLndyaXRlKHNlbmRDb29raWUuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgICAgICBvcy53cml0ZSgiXHJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgICAgICBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgICAgIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUxvZ2luQWNjZXNzU2Vzc2lvbk9uUmVzdW1lZFJlcXVlc3QvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtTG9naW5BY2Nlc3NTZXNzaW9uT25SZXN1bWVkUmVxdWVzdC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGYxMmExOWEuLmFhMjIxNGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtTG9naW5BY2Nlc3NTZXNzaW9uT25SZXN1bWVkUmVxdWVzdC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtTG9naW5BY2Nlc3NTZXNzaW9uT25SZXN1bWVkUmVxdWVzdC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWZvcm0tbG9naW4tYWNjZXNzLXNlc3Npb24tb24tcmVzdW1lZC1yZXF1ZXN0Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUxvZ2luQWNjZXNzU2Vzc2lvbk9uUmVzdW1lZFJlcXVlc3QvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1Mb2dpbkFjY2Vzc1Nlc3Npb25PblJlc3VtZWRSZXF1ZXN0L2J1aWxkLnhtbAppbmRleCA0MTdmODQ1Li41M2JkYmYyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUxvZ2luQWNjZXNzU2Vzc2lvbk9uUmVzdW1lZFJlcXVlc3QvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtTG9naW5BY2Nlc3NTZXNzaW9uT25SZXN1bWVkUmVxdWVzdC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTUwLDEwICs1MCwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgIDxqYXZhYwpAQCAtNjEsMTQgKzYxLDE0IEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvYXBwc2Vydi1ydC5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTg1LDcgKzg1LDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RvcmUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtdXNlci1jb21tb24iPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1Mb2dpbkFjY2Vzc1Nlc3Npb25PblJlc3VtZWRSZXF1ZXN0L2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtTG9naW5BY2Nlc3NTZXNzaW9uT25SZXN1bWVkUmVxdWVzdC9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggOTlmZDFkNy4uNWQ4Yjk5MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1Mb2dpbkFjY2Vzc1Nlc3Npb25PblJlc3VtZWRSZXF1ZXN0L2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUxvZ2luQWNjZXNzU2Vzc2lvbk9uUmVzdW1lZFJlcXVlc3QvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0zNSwxMiArMzUsMTIgQEAKIAogICA8c2VjdXJpdHktY29uc3RyYWludD4KICAgICA8d2ViLXJlc291cmNlLWNvbGxlY3Rpb24+Ci0JPHdlYi1yZXNvdXJjZS1uYW1lPlByb3RlY3RlZCBBcmVhPC93ZWItcmVzb3VyY2UtbmFtZT4KLQk8dXJsLXBhdHRlcm4+Lyo8L3VybC1wYXR0ZXJuPgotCTxodHRwLW1ldGhvZD5ERUxFVEU8L2h0dHAtbWV0aG9kPgotCTxodHRwLW1ldGhvZD5HRVQ8L2h0dHAtbWV0aG9kPgotCTxodHRwLW1ldGhvZD5QT1NUPC9odHRwLW1ldGhvZD4KLQk8aHR0cC1tZXRob2Q+UFVUPC9odHRwLW1ldGhvZD4KKyAgICA8d2ViLXJlc291cmNlLW5hbWU+UHJvdGVjdGVkIEFyZWE8L3dlYi1yZXNvdXJjZS1uYW1lPgorICAgIDx1cmwtcGF0dGVybj4vKjwvdXJsLXBhdHRlcm4+CisgICAgPGh0dHAtbWV0aG9kPkRFTEVURTwvaHR0cC1tZXRob2Q+CisgICAgPGh0dHAtbWV0aG9kPkdFVDwvaHR0cC1tZXRob2Q+CisgICAgPGh0dHAtbWV0aG9kPlBPU1Q8L2h0dHAtbWV0aG9kPgorICAgIDxodHRwLW1ldGhvZD5QVVQ8L2h0dHAtbWV0aG9kPgogICAgIDwvd2ViLXJlc291cmNlLWNvbGxlY3Rpb24+CiAKICAgICA8YXV0aC1jb25zdHJhaW50PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1Mb2dpbkFjY2Vzc1Nlc3Npb25PblJlc3VtZWRSZXF1ZXN0L3NlcnZsZXQvQWNjZXNzU2Vzc2lvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1Mb2dpbkFjY2Vzc1Nlc3Npb25PblJlc3VtZWRSZXF1ZXN0L3NlcnZsZXQvQWNjZXNzU2Vzc2lvbi5qYXZhCmluZGV4IGU4NzFhYTEuLjU0MDE2NTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtTG9naW5BY2Nlc3NTZXNzaW9uT25SZXN1bWVkUmVxdWVzdC9zZXJ2bGV0L0FjY2Vzc1Nlc3Npb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUxvZ2luQWNjZXNzU2Vzc2lvbk9uUmVzdW1lZFJlcXVlc3Qvc2VydmxldC9BY2Nlc3NTZXNzaW9uLmphdmEKQEAgLTMyLDcgKzMyLDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIEh0dHBTZXNzaW9uIHNlc3Npb24gPSByZXEuZ2V0U2Vzc2lvbihmYWxzZSk7Ci0JaWYgKHNlc3Npb24gPT0gbnVsbCkgeworICAgIGlmIChzZXNzaW9uID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKCJVbmFibGUgdG8gYWNjZXNzIGxvZ2luIHNlc3Npb24iKTsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUxvZ2luSlNlY3VyaXR5Q2hlY2tEaXJlY3RBY2Nlc3MvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1Mb2dpbkpTZWN1cml0eUNoZWNrRGlyZWN0QWNjZXNzL1dlYlRlc3QuamF2YQppbmRleCA4MGRiMzViLi44NjhlN2JmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUxvZ2luSlNlY3VyaXR5Q2hlY2tEaXJlY3RBY2Nlc3MvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtTG9naW5KU2VjdXJpdHlDaGVja0RpcmVjdEFjY2Vzcy9XZWJUZXN0LmphdmEKQEAgLTQ4LDcgKzQ4LDcgQEAKICAgICAgICAgYWRtaW5Vc2VyID0gYXJnc1szXTsKICAgICAgICAgYWRtaW5QYXNzd29yZCA9IGFyZ3NbNF07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgR2xhc3NGaXNoIElzc3VlIDE5MzMiKTsKQEAgLTYyLDcgKzYyLDcgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHJ1bigpIHRocm93cyBFeGNlcHRpb24gewpAQCAtMTIyLDcgKzEyMiw3IEBACiAgICAgICAgIFN0cmluZyBjb29raWUgPSAiQ29va2llOiAiICsganNlc3Npb25JZCArICJcbiI7CiAgICAgICAgIG9zLndyaXRlKGNvb2tpZS5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUxvZ2luSlNlY3VyaXR5Q2hlY2tEaXJlY3RBY2Nlc3MvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtTG9naW5KU2VjdXJpdHlDaGVja0RpcmVjdEFjY2Vzcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGQ2NzNhNDcuLjFhNjU2MmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtTG9naW5KU2VjdXJpdHlDaGVja0RpcmVjdEFjY2Vzcy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtTG9naW5KU2VjdXJpdHlDaGVja0RpcmVjdEFjY2Vzcy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWZvcm0tbG9naW4tanNlY3VyaXR5LWNoZWNrLWRpcmVjdC1hY2Nlc3MiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtTG9naW5KU2VjdXJpdHlDaGVja0RpcmVjdEFjY2Vzcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUxvZ2luSlNlY3VyaXR5Q2hlY2tEaXJlY3RBY2Nlc3MvYnVpbGQueG1sCmluZGV4IDQxN2Y4NDUuLjUzYmRiZjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtTG9naW5KU2VjdXJpdHlDaGVja0RpcmVjdEFjY2Vzcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1Mb2dpbkpTZWN1cml0eUNoZWNrRGlyZWN0QWNjZXNzL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNTAsMTAgKzUwLDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCkBAIC02MSwxNCArNjEsMTQgQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9hcHBzZXJ2LXJ0LmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtODUsNyArODUsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVzdG9yZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS11c2VyLWNvbW1vbiI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUxvZ2luSlNlY3VyaXR5Q2hlY2tEaXJlY3RBY2Nlc3MvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1Mb2dpbkpTZWN1cml0eUNoZWNrRGlyZWN0QWNjZXNzL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCAxNjJlODQzLi5iYzZkYzI2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUxvZ2luSlNlY3VyaXR5Q2hlY2tEaXJlY3RBY2Nlc3MvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtTG9naW5KU2VjdXJpdHlDaGVja0RpcmVjdEFjY2Vzcy9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTI1LDEyICsyNSwxMiBAQAogCiAgIDxzZWN1cml0eS1jb25zdHJhaW50PgogICAgIDx3ZWItcmVzb3VyY2UtY29sbGVjdGlvbj4KLQk8d2ViLXJlc291cmNlLW5hbWU+UHJvdGVjdGVkIEFyZWE8L3dlYi1yZXNvdXJjZS1uYW1lPgotCTx1cmwtcGF0dGVybj4vKjwvdXJsLXBhdHRlcm4+Ci0JPGh0dHAtbWV0aG9kPkRFTEVURTwvaHR0cC1tZXRob2Q+Ci0JPGh0dHAtbWV0aG9kPkdFVDwvaHR0cC1tZXRob2Q+Ci0JPGh0dHAtbWV0aG9kPlBPU1Q8L2h0dHAtbWV0aG9kPgotCTxodHRwLW1ldGhvZD5QVVQ8L2h0dHAtbWV0aG9kPgorICAgIDx3ZWItcmVzb3VyY2UtbmFtZT5Qcm90ZWN0ZWQgQXJlYTwvd2ViLXJlc291cmNlLW5hbWU+CisgICAgPHVybC1wYXR0ZXJuPi8qPC91cmwtcGF0dGVybj4KKyAgICA8aHR0cC1tZXRob2Q+REVMRVRFPC9odHRwLW1ldGhvZD4KKyAgICA8aHR0cC1tZXRob2Q+R0VUPC9odHRwLW1ldGhvZD4KKyAgICA8aHR0cC1tZXRob2Q+UE9TVDwvaHR0cC1tZXRob2Q+CisgICAgPGh0dHAtbWV0aG9kPlBVVDwvaHR0cC1tZXRob2Q+CiAgICAgPC93ZWItcmVzb3VyY2UtY29sbGVjdGlvbj4KIAogICAgIDxhdXRoLWNvbnN0cmFpbnQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUxvZ2luVHJhbnNwb3J0R3VhcmFudGVlQ29uZmlkZW50aWFsL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtTG9naW5UcmFuc3BvcnRHdWFyYW50ZWVDb25maWRlbnRpYWwvV2ViVGVzdC5qYXZhCmluZGV4IDRiMWZkMTMuLmE0NTYwZjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtTG9naW5UcmFuc3BvcnRHdWFyYW50ZWVDb25maWRlbnRpYWwvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtTG9naW5UcmFuc3BvcnRHdWFyYW50ZWVDb25maWRlbnRpYWwvV2ViVGVzdC5qYXZhCkBAIC0yNSw3ICsyNSw3IEBACiAgKgogICogVGhpcyB1bml0IHRlc3QgaGFzIGJlZW4gcmV3b3JrZWQgaW4gbGlnaHQgb2YgdGhlIGZpeCBmb3IgQ1IgNjYzMzI1NzoKICAqIFJhdGhlciB0aGFuIGlzc3VpbmcgYSByZWRpcmVjdCBvdmVyIGh0dHBzIHRvIHRoZSBsb2dpbi5qc3AgbG9naW4gcGFnZQotICogKHdoaWNoIGlzIHByb3RlY3RlZCBieSBhIHRyYW5zcG9ydC1ndWFyYW50ZWUgb2YgQ09ORklERU5USUFMKSwgdGhlIAorICogKHdoaWNoIGlzIHByb3RlY3RlZCBieSBhIHRyYW5zcG9ydC1ndWFyYW50ZWUgb2YgQ09ORklERU5USUFMKSwgdGhlCiAgKiByZWRpcmVjdCBvdmVyIGh0dHBzIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgb3JpZ2luYWwgcmVxdWVzdCAodGhhdCBpcywKICAqIHRvIHByb3RlY3RlZC5qc3ApLCBmb2xsb3dlZCBieSBhIEZPUldBUkQgZGlzcGF0Y2ggdG8gbG9naW4uanNwLgogICoKQEAgLTUxLDcgKzUxLDcgQEAKICAgICAgICAgaHR0cHNQb3J0ID0gYXJnc1syXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzNdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEdsYXNzRmlzaCBJc3N1ZSAzMzc0Iik7CkBAIC04MCwxMSArODAsMTEgQEAKICAgICAgICAgfQogICAgICAgICBTdHJpbmcgcmVkaXJlY3RMb2NhdGlvbiA9IGNvbm4uZ2V0SGVhZGVyRmllbGQoIkxvY2F0aW9uIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9jYXRpb246ICIgKyByZWRpcmVjdExvY2F0aW9uKTsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIGV4cGVjdGVkUmVkaXJlY3RMb2NhdGlvbiA9ICJodHRwczovLyIgKyBob3N0ICsgIjoiICsgaHR0cHNQb3J0CiAgICAgICAgICAgICArIGNvbnRleHRSb290ICsgIi9wcm90ZWN0ZWQuanNwIjsKICAgICAgICAgaWYgKCFleHBlY3RlZFJlZGlyZWN0TG9jYXRpb24uZXF1YWxzKHJlZGlyZWN0TG9jYXRpb24pKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJVbmV4cGVjdGVkIHJlZGlyZWN0IGxvY2F0aW9uIik7Ci0gICAgICAgIH0gICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtTG9naW5UcmFuc3BvcnRHdWFyYW50ZWVDb25maWRlbnRpYWwvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtTG9naW5UcmFuc3BvcnRHdWFyYW50ZWVDb25maWRlbnRpYWwvYnVpbGQucHJvcGVydGllcwppbmRleCBkMTk3NTM1Li5iMzE0OWIyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9ybUxvZ2luVHJhbnNwb3J0R3VhcmFudGVlQ29uZmlkZW50aWFsL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1Mb2dpblRyYW5zcG9ydEd1YXJhbnRlZUNvbmZpZGVudGlhbC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWZvcm0tbG9naW4tdHJhbnNwb3J0LWd1YXJhbnRlZS1jb25maWRlbnRpYWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3JtTG9naW5UcmFuc3BvcnRHdWFyYW50ZWVDb25maWRlbnRpYWwvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1Mb2dpblRyYW5zcG9ydEd1YXJhbnRlZUNvbmZpZGVudGlhbC9idWlsZC54bWwKaW5kZXggNzVkNzhmZi4uZGEzODk1OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1Mb2dpblRyYW5zcG9ydEd1YXJhbnRlZUNvbmZpZGVudGlhbC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2Zvcm1Mb2dpblRyYW5zcG9ydEd1YXJhbnRlZUNvbmZpZGVudGlhbC9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDIzICs0NCwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICA8L2FudGNhbGw+CiAKICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iCiAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2FwcHNlcnYtcnQuamFyIgogICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc2LDcgKzc2LDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ZvcndhcmRXaXRoUXVlcnlTdHJpbmcvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ZvcndhcmRXaXRoUXVlcnlTdHJpbmcvV2ViVGVzdC5qYXZhCmluZGV4IGEwYmU4NjIuLjczOGViNDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3J3YXJkV2l0aFF1ZXJ5U3RyaW5nL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9yd2FyZFdpdGhRdWVyeVN0cmluZy9XZWJUZXN0LmphdmEKQEAgLTIxLDEwICsyMSwxMCBAQAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuKjsKIAogcHVibGljIGNsYXNzIFdlYlRlc3QgewotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50ID0gMDsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgRVhQRUNURURfQ09VTlQgPSAxOwotICAgIAorCiAgICAgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0PQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKQEAgLTMyLDcgKzMyLDcgQEAKIAogICAgICAgICAvLyBUaGUgc3RhdCByZXBvcnRlciB3cml0ZXMgb3V0IHRoZSB0ZXN0IGluZm8gYW5kIHJlc3VsdHMKICAgICAgICAgLy8gaW50byB0aGUgdG9wLWxldmVsIHF1aWNrbG9vayBkaXJlY3RvcnkgZHVyaW5nIGEgcnVuLgotICAgICAgCisKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiRm9yd2FyZCBXaXRoIFF1ZXJ5IFN0cmluZyIpOwogCiAgICAgICAgIFN0cmluZyBob3N0ID0gYXJnc1swXTsKQEAgLTQxLDcgKzQxLDcgQEAKIAogICAgICAgICBpbnQgcG9ydCA9IG5ldyBJbnRlZ2VyKHBvcnRTKS5pbnRWYWx1ZSgpOwogICAgICAgICBTdHJpbmcgbmFtZTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGdvR2V0KGhvc3QsIHBvcnQsICJGSUxURVIiLCBjb250ZXh0Um9vdCArICIvU2VydmxldFRlc3Q/cXVlcnlTdHJpbmc9dGVzdCIgKTsKICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKQEAgLTUwLDcgKzUwLDcgQEAKIAogICAgICAgICBpZiAoY291bnQgIT0gRVhQRUNURURfQ09VTlQpewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImZvcndhcmRXaXRoUXVlcnlTdHJpbmciLCBzdGF0LkZBSUwpOwotICAgICAgICB9ICAgICAgICAgICAKKyAgICAgICAgfQogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgid2ViL2ZvcndhcmRXaXRoUXVlcnlTdHJpbmctLS0+IGV4cGVjdCAiICsgRVhQRUNURURfQ09VTlQpOwogICAgIH0KIApAQCAtNjUsNyArNjUsNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKCJHRVQgIiArIGNvbnRleHRQYXRoICsgIiBIVFRQLzEuMFxuIikpOwogICAgICAgICBvcy53cml0ZSgoIkdFVCAiICsgY29udGV4dFBhdGggKyAiIEhUVFAvMS4wXG4iKS5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGltZTogIiArIChTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIHRpbWUpKTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYmlzID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwpAQCAtODAsMTggKzgwLDE4IEBACiAgICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gbGluZS5pbmRleE9mKCI6Iik7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBzdGF0dXMgPSBsaW5lLnN1YnN0cmluZyhpbmRleCsxKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5lcXVhbHNJZ25vcmVDYXNlKCJQQVNTIikpewogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndlYi1mb3J3YXJkV2l0aFF1ZXJ5U3RyaW5nOiAiICsgbGluZS5zdWJzdHJpbmcoMCxpbmRleCksIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2ViLWZvcndhcmRXaXRoUXVlcnlTdHJpbmc6ICIgKyBsaW5lLnN1YnN0cmluZygwLGluZGV4KSwgc3RhdC5GQUlMKTsgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndlYi1mb3J3YXJkV2l0aFF1ZXJ5U3RyaW5nOiAiICsgbGluZS5zdWJzdHJpbmcoMCxpbmRleCksIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGV4KXsKLSAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOyAgIAorICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KICAgIH0KLSAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3J3YXJkV2l0aFF1ZXJ5U3RyaW5nL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9yd2FyZFdpdGhRdWVyeVN0cmluZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGI0NzBlZTUuLjliYWZiMTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3J3YXJkV2l0aFF1ZXJ5U3RyaW5nL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ZvcndhcmRXaXRoUXVlcnlTdHJpbmcvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTQgKzE1LDE0IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWZvcndhcmRXaXRoUXVlcnlTdHJpbmciLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWZvcndhcmRXaXRoUXVlcnlTdHJpbmciLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvd2ViLWZvcndhcmRXaXRoUXVlcnlTdHJpbmciLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3J3YXJkV2l0aFF1ZXJ5U3RyaW5nL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3J3YXJkV2l0aFF1ZXJ5U3RyaW5nL2J1aWxkLnhtbAppbmRleCA3NDM0NzBkLi5hOTM3ZDdhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9yd2FyZFdpdGhRdWVyeVN0cmluZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ZvcndhcmRXaXRoUXVlcnlTdHJpbmcvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxNSArNDIsMTUgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKIAotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtNjAsNyArNjAsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgICAgPGphdmFjCiAgICAgICAgICAgICBzcmNkaXI9Ii4iCkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9yd2FyZFdpdGhRdWVyeVN0cmluZy9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9yd2FyZFdpdGhRdWVyeVN0cmluZy9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggZjk4NjFkZi4uMWY4NGNlZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ZvcndhcmRXaXRoUXVlcnlTdHJpbmcvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3J3YXJkV2l0aFF1ZXJ5U3RyaW5nL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjIsMzcgKzIyLDM3IEBACiAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIgogICAgICAgICAgdmVyc2lvbj0iMi40Ij4KLSAgICAgCisKICAgICA8ZmlsdGVyPgogICAgICAgICA8ZmlsdGVyLW5hbWU+RmlsdGVyVGVzdDwvZmlsdGVyLW5hbWU+CiAgICAgICAgIDxmaWx0ZXItY2xhc3M+dGVzdC5GaWx0ZXJUZXN0PC9maWx0ZXItY2xhc3M+Ci0gICAgPC9maWx0ZXI+ICAgIAotICAgICAgICAKKyAgICA8L2ZpbHRlcj4KKwogICAgIDxmaWx0ZXItbWFwcGluZz4KICAgICAgICAgPGZpbHRlci1uYW1lPkZpbHRlclRlc3Q8L2ZpbHRlci1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+Lyo8L3VybC1wYXR0ZXJuPgogICAgICAgICA8ZGlzcGF0Y2hlcj5SRVFVRVNUPC9kaXNwYXRjaGVyPgogICAgICAgICA8ZGlzcGF0Y2hlcj5JTkNMVURFPC9kaXNwYXRjaGVyPgotICAgICAgICA8ZGlzcGF0Y2hlcj5GT1JXQVJEPC9kaXNwYXRjaGVyPiAgCi0gICAgICAgIDxkaXNwYXRjaGVyPkVSUk9SPC9kaXNwYXRjaGVyPiAKKyAgICAgICAgPGRpc3BhdGNoZXI+Rk9SV0FSRDwvZGlzcGF0Y2hlcj4KKyAgICAgICAgPGRpc3BhdGNoZXI+RVJST1I8L2Rpc3BhdGNoZXI+CiAgICAgPC9maWx0ZXItbWFwcGluZz4KLSAgICAKKwogICAgIDxzZXJ2bGV0PgogICAgICAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXRUZXN0PC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldFRlc3QyPC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3QyPC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuU2VydmxldFRlc3QyPC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAorICAgIDwvc2VydmxldD4KICAgICA8c2VydmxldD4KICAgICAgICAgPGRpc3BsYXktbmFtZT5TZXJ2bGV0VGVzdDM8L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDM8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDM8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCi0gICAgCisgICAgPC9zZXJ2bGV0PgorCiAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vU2VydmxldFRlc3Q8L3VybC1wYXR0ZXJuPgpAQCAtNjUsNyArNjUsNyBAQAogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0Mzwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L1NlcnZsZXRUZXN0MzwvdXJsLXBhdHRlcm4+CiAgICAgPC9zZXJ2bGV0LW1hcHBpbmc+Ci0gICAgCisKICAgICA8c2Vzc2lvbi1jb25maWc+CiAgICAgICAgIDxzZXNzaW9uLXRpbWVvdXQ+MTA8L3Nlc3Npb24tdGltZW91dD4KICAgICA8L3Nlc3Npb24tY29uZmlnPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ZvcndhcmRXaXRoUXVlcnlTdHJpbmcvc2VydmxldC9GaWx0ZXJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9yd2FyZFdpdGhRdWVyeVN0cmluZy9zZXJ2bGV0L0ZpbHRlclRlc3QuamF2YQppbmRleCBkNDM3MWY2Li4xNDdlOGFjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9yd2FyZFdpdGhRdWVyeVN0cmluZy9zZXJ2bGV0L0ZpbHRlclRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9yd2FyZFdpdGhRdWVyeVN0cmluZy9zZXJ2bGV0L0ZpbHRlclRlc3QuamF2YQpAQCAtMTksMTggKzE5LDE4IEBACiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lio7CiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuKjsKIHB1YmxpYyBjbGFzcyBGaWx0ZXJUZXN0IGltcGxlbWVudHMgRmlsdGVyewotICAgIAorCiAgICAgcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHsKLSAgICB9ICAgIAotICAgIAorICAgIH0KKwogICAgIHB1YmxpYyB2b2lkIGRvRmlsdGVyKFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSwgRmlsdGVyQ2hhaW4gZmlsdGVyQ2hhaW4pIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uLCBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIGZpbHRlckNoYWluLmRvRmlsdGVyKHJlcXVlc3QsIHJlc3BvbnNlKTsKLSAgICB9ICAgIAotICAgIAotICAgIAorICAgIH0KKworCiAgICAgcHVibGljIHZvaWQgaW5pdChqYWthcnRhLnNlcnZsZXQuRmlsdGVyQ29uZmlnIGZpbHRlckNvbmZpZykgdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3J3YXJkV2l0aFF1ZXJ5U3RyaW5nL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3J3YXJkV2l0aFF1ZXJ5U3RyaW5nL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQppbmRleCA0Y2Q5MzNlLi45OTU2NzFkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9yd2FyZFdpdGhRdWVyeVN0cmluZy9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ZvcndhcmRXaXRoUXVlcnlTdHJpbmcvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiBwdWJsaWMgY2xhc3MgU2VydmxldFRlc3QgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAKICAgICBwcml2YXRlIFNlcnZsZXRDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKICAgICAgICAgY29udGV4dCA9IGNvbmZpZy5nZXRTZXJ2bGV0Q29udGV4dCgpOwpAQCAtMzgsMTIgKzM4LDEyIEBACiAgICAgICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAgICAgICAgCisgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwotICAgICAgICAgICAgCisKICAgICAgICAgUmVxdWVzdERpc3BhdGNoZXIgcmQgPSBjb250ZXh0LmdldFJlcXVlc3REaXNwYXRjaGVyKCIvU2VydmxldFRlc3QyIik7Ci0gICAgICAgIHJkLmZvcndhcmQocmVxdWVzdCwgcmVzcG9uc2UpOyAgICAgICAKKyAgICAgICAgcmQuZm9yd2FyZChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9yd2FyZFdpdGhRdWVyeVN0cmluZy9zZXJ2bGV0L1NlcnZsZXRUZXN0Mi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ZvcndhcmRXaXRoUXVlcnlTdHJpbmcvc2VydmxldC9TZXJ2bGV0VGVzdDIuamF2YQppbmRleCAwYTUxYWUyLi5kMzMwNDkzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9yd2FyZFdpdGhRdWVyeVN0cmluZy9zZXJ2bGV0L1NlcnZsZXRUZXN0Mi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3J3YXJkV2l0aFF1ZXJ5U3RyaW5nL3NlcnZsZXQvU2VydmxldFRlc3QyLmphdmEKQEAgLTI1LDcgKzI1LDcgQEAKIHB1YmxpYyBjbGFzcyBTZXJ2bGV0VGVzdDIgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAKICAgICBwcml2YXRlIFNlcnZsZXRDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKICAgICAgICAgY29udGV4dCA9IGNvbmZpZy5nZXRTZXJ2bGV0Q29udGV4dCgpOwpAQCAtMzUsMTMgKzM1LDEzIEBACiAgICAgICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAgICAgICAgCi0gICAgICAKKyAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CisKICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKLSAgICAgICAgCisKICAgICAgICAgUmVxdWVzdERpc3BhdGNoZXIgcmQgPSByZXF1ZXN0LmdldFJlcXVlc3REaXNwYXRjaGVyKCIvU2VydmxldFRlc3QzIik7Ci0gICAgICAgIHJkLmluY2x1ZGUocmVxdWVzdCwgcmVzcG9uc2UpOyAgICAgCisgICAgICAgIHJkLmluY2x1ZGUocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ZvcndhcmRXaXRoUXVlcnlTdHJpbmcvc2VydmxldC9TZXJ2bGV0VGVzdDMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9mb3J3YXJkV2l0aFF1ZXJ5U3RyaW5nL3NlcnZsZXQvU2VydmxldFRlc3QzLmphdmEKaW5kZXggMjZkNWNhNS4uNTA4ZDY3YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ZvcndhcmRXaXRoUXVlcnlTdHJpbmcvc2VydmxldC9TZXJ2bGV0VGVzdDMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZm9yd2FyZFdpdGhRdWVyeVN0cmluZy9zZXJ2bGV0L1NlcnZsZXRUZXN0My5qYXZhCkBAIC0yNSwyMCArMjUsMjAgQEAKIHB1YmxpYyBjbGFzcyBTZXJ2bGV0VGVzdDMgZXh0ZW5kcyBIdHRwU2VydmxldHsKIAogICAgIHByaXZhdGUgU2VydmxldENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwotICAgICAgICBjb250ZXh0ID0gY29uZmlnLmdldFNlcnZsZXRDb250ZXh0KCk7ICAgICAKKyAgICAgICAgY29udGV4dCA9IGNvbmZpZy5nZXRTZXJ2bGV0Q29udGV4dCgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBkb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgICAgICAgIAorICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKLSAgICAgICAgCisKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJxdWVyeVN0cmluZzogIiArIHJlcXVlc3QuZ2V0UXVlcnlTdHJpbmcoKSk7CiAgICAgICAgIG91dC5wcmludGxuKCJGSUxURVItUVVFUllTVFJJTkc6IiArCiAgICAgICAgICAgICAgICAgKHJlcXVlc3QuZ2V0UXVlcnlTdHJpbmcoKSAhPSBudWxsID8gIlBBU1MiIDogIkZBSUwiKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZ2V0QXR0cmlidXRlQWZ0ZXJGb3J3YXJkL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9nZXRBdHRyaWJ1dGVBZnRlckZvcndhcmQvV2ViVGVzdC5qYXZhCmluZGV4IDJkMDQ2YWEuLjcyNmEwZmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9nZXRBdHRyaWJ1dGVBZnRlckZvcndhcmQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9nZXRBdHRyaWJ1dGVBZnRlckZvcndhcmQvV2ViVGVzdC5qYXZhCkBAIC0yMSw3ICsyMSw3IEBACiBwdWJsaWMgY2xhc3MgV2ViVGVzdCB7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9OQU1FID0gImdldC1hdHRyaWJ1dGUtYWZ0ZXItZm9yd2FyZCI7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdD0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIkdldCBhdHRyaWJ1dGUgYWZ0ZXIgZm9yd2FyZCIpOwogCiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgd2ViVGVzdC5kb1Rlc3QoCiAgICAgICAgICAgICAgICAgIi9mb3J3YXJkLmpzcD9mb3J3YXJkPWluY2x1ZGUuanNwJmluY2x1ZGU9cHJvY2Vzcy5qc3AiICk7CkBAIC02Myw1ICs2Myw1IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZSBjb2RlLiBFeHBlY3RlZDogMjAwIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsIHJlY2VpdmVkOiAiICsgcmVzcG9uc2VDb2RlKTsKICAgICAgICAgfQotICAgIH0gIAorICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9nZXRBdHRyaWJ1dGVBZnRlckZvcndhcmQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9nZXRBdHRyaWJ1dGVBZnRlckZvcndhcmQvYnVpbGQucHJvcGVydGllcwppbmRleCA3ZmRjOWY5Li4xM2JhZWFiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZ2V0QXR0cmlidXRlQWZ0ZXJGb3J3YXJkL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2dldEF0dHJpYnV0ZUFmdGVyRm9yd2FyZC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMSArMTUsMTEgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZ2V0LWF0dHJpYnV0ZS1hZnRlci1mb3J3YXJkIi8+CiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii8ke2FwcG5hbWV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZ2V0QXR0cmlidXRlQWZ0ZXJGb3J3YXJkL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9nZXRBdHRyaWJ1dGVBZnRlckZvcndhcmQvYnVpbGQueG1sCmluZGV4IDFhMGZjM2UuLjI4Mjc1YTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9nZXRBdHRyaWJ1dGVBZnRlckZvcndhcmQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9nZXRBdHRyaWJ1dGVBZnRlckZvcndhcmQvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxMCArNDIsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTUzLDggKzUzLDggQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtNjQsNyArNjQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZ2V0QXR0cmlidXRlQWZ0ZXJJbmNsdWRlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9nZXRBdHRyaWJ1dGVBZnRlckluY2x1ZGUvV2ViVGVzdC5qYXZhCmluZGV4IGJjZjEwYjcuLjQ3YWNkZWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9nZXRBdHRyaWJ1dGVBZnRlckluY2x1ZGUvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9nZXRBdHRyaWJ1dGVBZnRlckluY2x1ZGUvV2ViVGVzdC5qYXZhCkBAIC0xOSw3ICsxOSw3IEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci4qOwogCiBwdWJsaWMgY2xhc3MgV2ViVGVzdCB7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9OQU1FID0gImdldC1hdHRyaWJ1dGUtYWZ0ZXItaW5jbHVkZSI7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZ2V0QXR0cmlidXRlQWZ0ZXJJbmNsdWRlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZ2V0QXR0cmlidXRlQWZ0ZXJJbmNsdWRlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggODZlYmEyMS4uYzIwNTYwYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2dldEF0dHJpYnV0ZUFmdGVySW5jbHVkZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9nZXRBdHRyaWJ1dGVBZnRlckluY2x1ZGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTEgKzE1LDExIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWdldC1hdHRyaWJ1dGUtYWZ0ZXItaW5jbHVkZSIvPgogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvJHthcHBuYW1lfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2dldEF0dHJpYnV0ZUFmdGVySW5jbHVkZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZ2V0QXR0cmlidXRlQWZ0ZXJJbmNsdWRlL2J1aWxkLnhtbAppbmRleCAxYTBmYzNlLi4yODI3NWE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZ2V0QXR0cmlidXRlQWZ0ZXJJbmNsdWRlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZ2V0QXR0cmlidXRlQWZ0ZXJJbmNsdWRlL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTAgKzQyLDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCkBAIC01Myw4ICs1Myw4IEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTY0LDcgKzY0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2dldExvY2FsUG9ydC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZ2V0TG9jYWxQb3J0L1dlYlRlc3QuamF2YQppbmRleCA2MjUzNzMzLi5kYmU1ZTg2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZ2V0TG9jYWxQb3J0L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZ2V0TG9jYWxQb3J0L1dlYlRlc3QuamF2YQpAQCAtMjIsMTAgKzIyLDEwIEBACiAKIHB1YmxpYyBjbGFzcyBXZWJUZXN0CiB7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnQgPSAwOwogICAgIHByaXZhdGUgc3RhdGljIGludCBFWFBFQ1RFRF9DT1VOVCA9IDE7Ci0gICAgCisKICAgICBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQ9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIApAQCAtMzQsNyArMzQsNyBAQAogCiAgICAgICAgIC8vIFRoZSBzdGF0IHJlcG9ydGVyIHdyaXRlcyBvdXQgdGhlIHRlc3QgaW5mbyBhbmQgcmVzdWx0cwogICAgICAgICAvLyBpbnRvIHRoZSB0b3AtbGV2ZWwgcXVpY2tsb29rIGRpcmVjdG9yeSBkdXJpbmcgYSBydW4uCi0gICAgICAKKwogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJUZXN0IGZvciBnZXRMb2NhbE5hbWUoKSBnZXRMb2NhbFBvcnQgU2VydmxldCAyLjQgbmV3IEZlYXR1cmVzIik7CiAKIApAQCAtNDQsMTMgKzQ0LDEzIEBACiAKICAgICAgICAgaW50IHBvcnQgPSBuZXcgSW50ZWdlcihwb3J0UykuaW50VmFsdWUoKTsKICAgICAgICAgU3RyaW5nIG5hbWU7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBnb0dldChob3N0LCBwb3J0LCAiZ2V0TG9jYWxQb3J0IiwgY29udGV4dFJvb3QgKyAiL1NlcnZsZXRUZXN0IiApOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmIChjb3VudCAhPSBFWFBFQ1RFRF9DT1VOVCl7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvY2FsUG9ydCBnZXRMb2NhbFBvcnQgVU5QUkVESUNURUQtRkFJTFVSRSIsIHN0YXQuRkFJTCk7Ci0gICAgICAgICAgICB9ICAgICAgICAgICAKKyAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9jYWxQb3J0IGdldExvY2FsUG9ydCBVTlBSRURJQ1RFRC1GQUlMVVJFIiwgc3RhdC5GQUlMKTsKQEAgLTcyLDcgKzcyLDcgQEAKICAgICAgICAgb3Mud3JpdGUoKCJHRVQgIiArIGNvbnRleHRQYXRoICsgIiBIVFRQLzEuMVxuIikuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCJIb3N0OiBsb2NhbGhvc3RcbiIuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gcy5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRpbWU6ICIgKyAoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSB0aW1lKSk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJpcyA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKQEAgLTg3LDE5ICs4NywxOSBAQAogICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPSAtMSkgewogICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGxpbmUuaW5kZXhPZigiOiIpOwogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgc3RhdHVzID0gbGluZS5zdWJzdHJpbmcoaW5kZXgrMSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMuZXF1YWxzSWdub3JlQ2FzZShTdHJpbmcudmFsdWVPZihwb3J0KSkpewogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndlYi1sb2NhbFBvcnQ6ICIgKyBsaW5lLnN1YnN0cmluZygwLGluZGV4KSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3ZWItbG9jYWxQb3J0OiAiICsgbGluZS5zdWJzdHJpbmcoMCxpbmRleCksIHN0YXQuRkFJTCk7ICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3ZWItbG9jYWxQb3J0OiAiICsgbGluZS5zdWJzdHJpbmcoMCxpbmRleCksIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGV4KXsKLSAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOyAgIAorICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJsb2NhbFBvcnQgZ2V0TG9jYWxQb3J0IFVOUFJFRElDVEVELUZBSUxVUkUiKTsKICAgICAgICAgIH0KICAgIH0KLSAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9nZXRMb2NhbFBvcnQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9nZXRMb2NhbFBvcnQvYnVpbGQucHJvcGVydGllcwppbmRleCA2Y2NhZGFmLi5hY2M4OTM0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZ2V0TG9jYWxQb3J0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2dldExvY2FsUG9ydC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNCArMTUsMTQgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tbG9jYWxOYW1lIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1sb2NhbE5hbWUiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvd2ViLWxvY2FsTmFtZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2dldExvY2FsUG9ydC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZ2V0TG9jYWxQb3J0L2J1aWxkLnhtbAppbmRleCBlZWMzYmVjLi41YTFmMGM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZ2V0TG9jYWxQb3J0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZ2V0TG9jYWxQb3J0L2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTAgKzQyLDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCkBAIC01MywxMCArNTMsMTAgQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02NCw3ICs2NCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9nZXRMb2NhbFBvcnQvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2dldExvY2FsUG9ydC9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggNmJlNDA3My4uM2RjZmY3ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2dldExvY2FsUG9ydC9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2dldExvY2FsUG9ydC9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTI3LDE0ICsyNywxNCBAQAogICAgICAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXRUZXN0PC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAKICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi9TZXJ2bGV0VGVzdDwvdXJsLXBhdHRlcm4+CiAgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiAKLSAgICAKKwogCiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9nZXRMb2NhbFBvcnQvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2dldExvY2FsUG9ydC9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKaW5kZXggNjgyOTZjOS4uN2U1MmU2MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2dldExvY2FsUG9ydC9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2dldExvY2FsUG9ydC9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKQEAgLTIzLDEzICsyMywxMyBAQAogcHVibGljIGNsYXNzIFNlcnZsZXRUZXN0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewogCiAgICAgcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuaW5pdF0iKTsgICAgICAgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmluaXRdIik7CiAgICAgICAgIGNvbnRleHQgPSBjb25maWcuZ2V0U2VydmxldENvbnRleHQoKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5pbml0XSAiICsgY29udGV4dC5nZXRNYWpvclZlcnNpb24oKSk7Ci0gICAgICAgIAorCiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CkBAIC0zNywxMiArMzcsMTIgQEAKICAgICAgICAgZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7ICAgICAgICAKKyAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuZG9Qb3N0XSIpOwotICAgICAgICAKKwogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwotICAgICAgICAKKwogICAgICAgICBvdXQucHJpbnRsbigiZ2V0TG9jYWxQb3J0OiIgKyByZXF1ZXN0LmdldExvY2FsUG9ydCgpKTsKICAgICAgICAgb3V0LmZsdXNoKCk7CiAgICAgICAgIG91dC5jbG9zZSgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2dldFJlcXVlc3RVUkkvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2dldFJlcXVlc3RVUkkvV2ViVGVzdC5qYXZhCmluZGV4IGRhMWUxOGMuLmI3NGUyYjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9nZXRSZXF1ZXN0VVJJL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZ2V0UmVxdWVzdFVSSS9XZWJUZXN0LmphdmEKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgQnVndHJhcSA0ODk0NjU0Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDgsOCArNDgsOCBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgCi0gICAgICAgIHRyeSB7IAorCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2VKU1AoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZCIpOwpAQCAtNjUsMTQgKzY1LDE0IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZUpTUCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAgCisKICAgICAgICAgU29ja2V0IHNvY2sgPSBuZXcgU29ja2V0KGhvc3QsIG5ldyBJbnRlZ2VyKHBvcnQpLmludFZhbHVlKCkpOwogICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSBzb2NrLmdldE91dHB1dFN0cmVhbSgpOwogICAgICAgICBTdHJpbmcgZ2V0ID0gIkdFVCAiICsgY29udGV4dFJvb3QgKyAiL2pzcC9tYWluLmpzcCIgKyAiIEhUVFAvMS4wXG4iOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZ2V0KTsKICAgICAgICAgb3Mud3JpdGUoZ2V0LmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYmlzID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogCkBAIC05Myw3ICs5Myw3IEBACiAgICAgICAgICAgICBpbnQgaSA9IGxpbmUuaW5kZXhPZigiL2pzcC9maXJzdC5qc3AiKTsKICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN1YnN0cmluZyhpKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihsaW5lKTsKLSAgICAgICAgCisKICAgICAgICAgICAgIFNvY2tldCBzb2NrMiA9IG5ldyBTb2NrZXQoaG9zdCwgbmV3IEludGVnZXIocG9ydCkuaW50VmFsdWUoKSk7CiAgICAgICAgICAgICBvcyA9IHNvY2syLmdldE91dHB1dFN0cmVhbSgpOwogICAgICAgICAgICAgZ2V0ID0gIkdFVCAiKyBjb250ZXh0Um9vdCArIGxpbmUgKyAiIEhUVFAvMS4wXG4iOwpAQCAtMTA1LDcgKzEwNSw3IEBACiAKICAgICAgICAgICAgIHdoaWxlICgobGluZSA9IGJpcy5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICBpID0gbGluZS5pbmRleE9mKCJpUGxhbmV0RGlyZWN0b3J5UHJvPSIpOwotICAgICAgICAgICAgICAgaWYgKGkgPiAwKSB7IAorICAgICAgICAgICAgICAgaWYgKGkgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgcGFyYW0xID0gbGluZS5zdWJzdHJpbmcoaSk7CiAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGaXJzdCBwYXJhbSBpcyAiICsgcGFyYW0xKTsKICAgICAgICAgICAgICAgICAgICBpZiAoKGxpbmUgPSBiaXMucmVhZExpbmUoKSkgIT0gbnVsbCkgewpAQCAtMTEzLDcgKzExMyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW0yID0gbGluZS5zdWJzdHJpbmcoaSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNlY29uZCBwYXJhbSBpcyAiICsgcGFyYW0yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTEyOCw3ICsxMjgsNyBAQAogICAgICAgICAgICAgZmFpbCA9IGZhbHNlOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiUGFyYW1ldGVycyBlbmNvZGluZy9kZWNvZGluZyBpcyBub3QgY29uc2lzdGVudCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LkZBSUwpOyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuRkFJTCk7CiAgICAgICAgICAgIGZhaWwgPSB0cnVlOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2dldFJlcXVlc3RVUkkvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9nZXRSZXF1ZXN0VVJJL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMTBlZWNjYS4uOWJjNDIwZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2dldFJlcXVlc3RVUkkvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZ2V0UmVxdWVzdFVSSS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNCArMTUsMTQgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZ2V0UmVxdWVzdFVSSSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZ2V0UmVxdWVzdFVSSSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii93ZWItZ2V0UmVxdWVzdFVSSSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2dldFJlcXVlc3RVUkkvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2dldFJlcXVlc3RVUkkvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9nZXRSZXF1ZXN0VVJJL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZ2V0UmVxdWVzdFVSSS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZ2V0UmVxdWVzdFVSSS9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZ2V0UmVxdWVzdFVSSS9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggM2JjYmNjZC4uOGVkOTM0ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2dldFJlcXVlc3RVUkkvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9nZXRSZXF1ZXN0VVJJL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjIsMTMgKzIyLDEzIEBACiAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIgogICAgICAgICAgdmVyc2lvbj0iMi40Ij4KLSAgICAgCisKICAgICA8c2VydmxldD4KICAgICAgICAgPGRpc3BsYXktbmFtZT5TZXJ2bGV0VGVzdDwvZGlzcGxheS1uYW1lPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuU2VydmxldFRlc3Q8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCi0gICAgCisgICAgPC9zZXJ2bGV0PgorCiAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vU2VydmxldFRlc3Q8L3VybC1wYXR0ZXJuPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2dldFNlcnZlck5hbWVBbmRQb3J0L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9nZXRTZXJ2ZXJOYW1lQW5kUG9ydC9XZWJUZXN0LmphdmEKaW5kZXggZjIyOTJiOC4uNzQxNWU5ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2dldFNlcnZlck5hbWVBbmRQb3J0L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZ2V0U2VydmVyTmFtZUFuZFBvcnQvV2ViVGVzdC5qYXZhCkBAIC00NSw3ICs0NSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIDYwMjExMTkiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC01Myw4ICs1Myw4IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZVNlcnZsZXQoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZC4iKTsKQEAgLTc4LDcgKzc4LDcgQEAKICAgICAgICAgb3Mud3JpdGUoKCJHRVQgIiArIGNvbnRleHRSb290ICsgIi9UZXN0U2VydmxldCBIVFRQLzEuMVxuIikuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCgiSG9zdDogIiArIFNFUlZFUl9OQU1FICsgIjoiICsgU0VSVkVSX1BPUlQgKyAiXG4iKS5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBudWxsOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBiaXMgPSBudWxsOwogICAgICAgICB0cnkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2dldFNlcnZlck5hbWVBbmRQb3J0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZ2V0U2VydmVyTmFtZUFuZFBvcnQvYnVpbGQucHJvcGVydGllcwppbmRleCBiNDgyOWMxLi45MDUxN2MzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZ2V0U2VydmVyTmFtZUFuZFBvcnQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZ2V0U2VydmVyTmFtZUFuZFBvcnQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1nZXQtc2VydmVyLW5hbWUtYW5kLXBvcnQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9nZXRTZXJ2ZXJOYW1lQW5kUG9ydC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvZ2V0U2VydmVyTmFtZUFuZFBvcnQvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9nZXRTZXJ2ZXJOYW1lQW5kUG9ydC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2dldFNlcnZlck5hbWVBbmRQb3J0L2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL2hhLXdlYi9TRlNCRHJpdmVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL2hhLXdlYi9TRlNCRHJpdmVyL2J1aWxkLnhtbAppbmRleCBmNTc5NTU5Li43N2Q2OTBjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9oYS13ZWIvU0ZTQkRyaXZlci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvaGEtd2ViL1NGU0JEcml2ZXIvYnVpbGQueG1sCkBAIC0zMCwyNyArMzAsMjcgQEAKICAgICA8aW1wb3J0IGZpbGU9Im5icHJvamVjdC9idWlsZC1pbXBsLnhtbCIvPgogICAgIDwhLS0KIAotICAgIFRoZXJlIGV4aXN0IHNldmVyYWwgdGFyZ2V0cyB3aGljaCBhcmUgYnkgZGVmYXVsdCBlbXB0eSBhbmQgd2hpY2ggY2FuIGJlIAotICAgIHVzZWQgZm9yIGV4ZWN1dGlvbiBvZiB5b3VyIHRhc2tzLiBUaGVzZSB0YXJnZXRzIGFyZSB1c3VhbGx5IGV4ZWN1dGVkIAotICAgIGJlZm9yZSBhbmQgYWZ0ZXIgc29tZSBtYWluIHRhcmdldHMuIFRoZXkgYXJlOiAKKyAgICBUaGVyZSBleGlzdCBzZXZlcmFsIHRhcmdldHMgd2hpY2ggYXJlIGJ5IGRlZmF1bHQgZW1wdHkgYW5kIHdoaWNoIGNhbiBiZQorICAgIHVzZWQgZm9yIGV4ZWN1dGlvbiBvZiB5b3VyIHRhc2tzLiBUaGVzZSB0YXJnZXRzIGFyZSB1c3VhbGx5IGV4ZWN1dGVkCisgICAgYmVmb3JlIGFuZCBhZnRlciBzb21lIG1haW4gdGFyZ2V0cy4gVGhleSBhcmU6CiAKLSAgICAgIC1wcmUtaW5pdDogICAgICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgaW5pdGlhbGl6YXRpb24gb2YgcHJvamVjdCBwcm9wZXJ0aWVzIAotICAgICAgLXBvc3QtaW5pdDogICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGluaXRpYWxpemF0aW9uIG9mIHByb2plY3QgcHJvcGVydGllcyAKLSAgICAgIC1wcmUtY29tcGlsZTogICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgamF2YWMgY29tcGlsYXRpb24gCi0gICAgICAtcG9zdC1jb21waWxlOiAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgamF2YWMgY29tcGlsYXRpb24gCisgICAgICAtcHJlLWluaXQ6ICAgICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGluaXRpYWxpemF0aW9uIG9mIHByb2plY3QgcHJvcGVydGllcworICAgICAgLXBvc3QtaW5pdDogICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGluaXRpYWxpemF0aW9uIG9mIHByb2plY3QgcHJvcGVydGllcworICAgICAgLXByZS1jb21waWxlOiAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBqYXZhYyBjb21waWxhdGlvbgorICAgICAgLXBvc3QtY29tcGlsZTogICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGphdmFjIGNvbXBpbGF0aW9uCiAgICAgICAtcHJlLWNvbXBpbGUtc2luZ2xlOiAgICAgICBjYWxsZWQgYmVmb3JlIGphdmFjIGNvbXBpbGF0aW9uIG9mIHNpbmdsZSBmaWxlCiAgICAgICAtcG9zdC1jb21waWxlLXNpbmdsZTogICAgICBjYWxsZWQgYWZ0ZXIgamF2YWMgY29tcGlsYXRpb24gb2Ygc2luZ2xlIGZpbGUKICAgICAgIC1wcmUtY29tcGlsZS10ZXN0OiAgICAgICAgIGNhbGxlZCBiZWZvcmUgamF2YWMgY29tcGlsYXRpb24gb2YgSlVuaXQgdGVzdHMKICAgICAgIC1wb3N0LWNvbXBpbGUtdGVzdDogICAgICAgIGNhbGxlZCBhZnRlciBqYXZhYyBjb21waWxhdGlvbiBvZiBKVW5pdCB0ZXN0cwogICAgICAgLXByZS1jb21waWxlLXRlc3Qtc2luZ2xlOiAgY2FsbGVkIGJlZm9yZSBqYXZhYyBjb21waWxhdGlvbiBvZiBzaW5nbGUgSlVuaXQgdGVzdAogICAgICAgLXBvc3QtY29tcGlsZS10ZXN0LXNpbmdsZTogY2FsbGVkIGFmdGVyIGphdmFjIGNvbXBpbGF0aW9uIG9mIHNpbmdsZSBKVXVuaXQgdGVzdAotICAgICAgLXByZS1kaXN0OiAgICAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBhcmNoaXZlIGJ1aWxkaW5nIAotICAgICAgLXBvc3QtZGlzdDogICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGFyY2hpdmUgYnVpbGRpbmcgCi0gICAgICAtcG9zdC1jbGVhbjogICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgY2xlYW5pbmcgYnVpbGQgcHJvZHVjdHMgCisgICAgICAtcHJlLWRpc3Q6ICAgICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGFyY2hpdmUgYnVpbGRpbmcKKyAgICAgIC1wb3N0LWRpc3Q6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBhcmNoaXZlIGJ1aWxkaW5nCisgICAgICAtcG9zdC1jbGVhbjogICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgY2xlYW5pbmcgYnVpbGQgcHJvZHVjdHMKICAgICAgIC1wcmUtcnVuLWRlcGxveTogICAgICAgICAgIGNhbGxlZCBiZWZvcmUgZGVwbG95aW5nCiAgICAgICAtcG9zdC1ydW4tZGVwbG95OiAgICAgICAgICBjYWxsZWQgYWZ0ZXIgZGVwbG95aW5nCiAKLSAgICBFeGFtcGxlIG9mIHBsdWdpbmcgYW4gb2JmdXNjYXRvciBhZnRlciB0aGUgY29tcGlsYXRpb24gY291bGQgbG9vayBsaWtlIAorICAgIEV4YW1wbGUgb2YgcGx1Z2luZyBhbiBvYmZ1c2NhdG9yIGFmdGVyIHRoZSBjb21waWxhdGlvbiBjb3VsZCBsb29rIGxpa2UKIAogICAgICAgICA8dGFyZ2V0IG5hbWU9Ii1wb3N0LWNvbXBpbGUiPgogICAgICAgICAgICAgPG9iZnVzY2F0ZT4KQEAgLTU4LDIxICs1OCwyMSBAQAogICAgICAgICAgICAgPC9vYmZ1c2NhdGU+CiAgICAgICAgIDwvdGFyZ2V0PgogCi0gICAgRm9yIGxpc3Qgb2YgYXZhaWxhYmxlIHByb3BlcnRpZXMgY2hlY2sgdGhlIGltcG9ydGVkIAotICAgIG5icHJvamVjdC9idWlsZC1pbXBsLnhtbCBmaWxlLiAKKyAgICBGb3IgbGlzdCBvZiBhdmFpbGFibGUgcHJvcGVydGllcyBjaGVjayB0aGUgaW1wb3J0ZWQKKyAgICBuYnByb2plY3QvYnVpbGQtaW1wbC54bWwgZmlsZS4KIAogCiAgICAgT3RoZXIgd2F5IGhvdyB0byBjdXN0b21pemUgdGhlIGJ1aWxkIGlzIGJ5IG92ZXJyaWRpbmcgZXhpc3RpbmcgbWFpbiB0YXJnZXRzLgotICAgIFRoZSB0YXJnZXQgb2YgaW50ZXJlc3QgYXJlOiAKKyAgICBUaGUgdGFyZ2V0IG9mIGludGVyZXN0IGFyZToKIAogICAgICAgaW5pdC1tYWNyb2RlZi1qYXZhYzogICAgZGVmaW5lcyBtYWNybyBmb3IgamF2YWMgY29tcGlsYXRpb24KICAgICAgIGluaXQtbWFjcm9kZWYtanVuaXQ6ICAgZGVmaW5lcyBtYWNybyBmb3IganVuaXQgZXhlY3V0aW9uCiAgICAgICBpbml0LW1hY3JvZGVmLWRlYnVnOiAgICBkZWZpbmVzIG1hY3JvIGZvciBjbGFzcyBkZWJ1Z2dpbmcKICAgICAgIGRvLWRpc3Q6ICAgICAgICAgICAgICAgIGFyY2hpdmUgYnVpbGRpbmcKLSAgICAgIHJ1bjogICAgICAgICAgICAgICAgICAgIGV4ZWN1dGlvbiBvZiBwcm9qZWN0IAotICAgICAgamF2YWRvYy1idWlsZDogICAgICAgICAgamF2YWRvYyBnZW5lcmF0aW9uIAorICAgICAgcnVuOiAgICAgICAgICAgICAgICAgICAgZXhlY3V0aW9uIG9mIHByb2plY3QKKyAgICAgIGphdmFkb2MtYnVpbGQ6ICAgICAgICAgIGphdmFkb2MgZ2VuZXJhdGlvbgogCi0gICAgRXhhbXBsZSBvZiBvdmVycmlkaW5nIHRoZSB0YXJnZXQgZm9yIHByb2plY3QgZXhlY3V0aW9uIGNvdWxkIGxvb2sgbGlrZSAKKyAgICBFeGFtcGxlIG9mIG92ZXJyaWRpbmcgdGhlIHRhcmdldCBmb3IgcHJvamVjdCBleGVjdXRpb24gY291bGQgbG9vayBsaWtlCiAKICAgICAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9IjxQUk9KTkFNRT4taW1wbC5qYXIiPgogICAgICAgICAgICAgPGV4ZWMgZGlyPSJiaW4iIGV4ZWN1dGFibGU9ImxhdW5jaGVyLmV4ZSI+CkBAIC04MCwxMCArODAsMTAgQEAKICAgICAgICAgICAgIDwvZXhlYz4KICAgICAgICAgPC90YXJnZXQ+CiAKLSAgICBOb3RpY2UgdGhhdCBvdmVycmlkZGVuIHRhcmdldCBkZXBlbmRzIG9uIGphciB0YXJnZXQgYW5kIG5vdCBvbmx5IG9uIAotICAgIGNvbXBpbGUgdGFyZ2V0IGFzIHJlZ3VsYXIgcnVuIHRhcmdldCBkb2VzLiBBZ2FpbiwgZm9yIGxpc3Qgb2YgYXZhaWxhYmxlIAotICAgIHByb3BlcnRpZXMgd2hpY2ggeW91IGNhbiB1c2UgY2hlY2sgdGhlIHRhcmdldCB5b3UgYXJlIG92ZXJyaWRpbmcgaW4gCi0gICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuIAorICAgIE5vdGljZSB0aGF0IG92ZXJyaWRkZW4gdGFyZ2V0IGRlcGVuZHMgb24gamFyIHRhcmdldCBhbmQgbm90IG9ubHkgb24KKyAgICBjb21waWxlIHRhcmdldCBhcyByZWd1bGFyIHJ1biB0YXJnZXQgZG9lcy4gQWdhaW4sIGZvciBsaXN0IG9mIGF2YWlsYWJsZQorICAgIHByb3BlcnRpZXMgd2hpY2ggeW91IGNhbiB1c2UgY2hlY2sgdGhlIHRhcmdldCB5b3UgYXJlIG92ZXJyaWRpbmcgaW4KKyAgICBuYnByb2plY3QvYnVpbGQtaW1wbC54bWwgZmlsZS4KIAogICAgIC0tPgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvaGEtd2ViL1NGU0JEcml2ZXIvbmJwcm9qZWN0L2FudC1kZXBsb3kueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvaGEtd2ViL1NGU0JEcml2ZXIvbmJwcm9qZWN0L2FudC1kZXBsb3kueG1sCmluZGV4IGY3YjU1MTIuLjBkNGJmYTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL2hhLXdlYi9TRlNCRHJpdmVyL25icHJvamVjdC9hbnQtZGVwbG95LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9oYS13ZWIvU0ZTQkRyaXZlci9uYnByb2plY3QvYW50LWRlcGxveS54bWwKQEAgLTI1LDcgKzI1LDcgQEAKICAgICAgICAgPHRlbXBmaWxlIHByZWZpeD0iZ2Z2MyIgcHJvcGVydHk9ImdmdjMucGFzc3dvcmQuZmlsZSIgZGVzdGRpcj0iJHtqYXZhLmlvLnRtcGRpcn0iLz4gIDwhLS0gZG8gbm90IGZvcmdldCB0byBkZWxldGUgdGhpcyEgLS0+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkFTX0FETUlOX1BBU1NXT1JEPSR7Z2Z2My5wYXNzd29yZH0iIGZpbGU9IiR7Z2Z2My5wYXNzd29yZC5maWxlfSIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSItcGFyc2Utc3VuLXdlYiIgZGVwZW5kcz0iLWluaXQtY2wtZGVwbG95bWVudC1lbnYiIGlmPSJzdW4ud2ViLnByZXNlbnQiPgogICAgICAgICA8dGVtcGZpbGUgcHJlZml4PSJnZnYzIiBwcm9wZXJ0eT0idGVtcC5zdW4ud2ViIiBkZXN0ZGlyPSIke2phdmEuaW8udG1wZGlyfSIvPgogICAgICAgICA8Y29weSBmaWxlPSIke2RlcGxveS5hbnQuZG9jYmFzZS5kaXJ9L1dFQi1JTkYvc3VuLXdlYi54bWwiIHRvZmlsZT0iJHt0ZW1wLnN1bi53ZWJ9Ii8+CkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgICAgICA8cmVwbGFjZXZhbHVlPjwhW0NEQVRBWy0tPiA8c3VuLXdlYi1hcHBdXT48L3JlcGxhY2V2YWx1ZT4KICAgICAgICAgPC9yZXBsYWNlPgogICAgICAgICA8eG1scHJvcGVydHkgZmlsZT0iJHt0ZW1wLnN1bi53ZWJ9IiB2YWxpZGF0ZT0iZmFsc2UiPgotICAgICAgICA8L3htbHByb3BlcnR5PiAgICAKKyAgICAgICAgPC94bWxwcm9wZXJ0eT4KICAgICAgICAgPGRlbGV0ZSBmaWxlPSIke3RlbXAuc3VuLndlYn0iLz4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImRlcGxveS5hbnQuY2xpZW50LnVybCIgdmFsdWU9IiR7Z2Z2My51cmx9JHtzdW4td2ViLWFwcC5jb250ZXh0LXJvb3R9Ii8+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkZXBsb3kuY29udGV4dC5yb290LmFyZ3VtZW50IiB2YWx1ZT0iJmFtcDtjb250ZXh0cm9vdD0ke3N1bi13ZWItYXBwLmNvbnRleHQtcm9vdH0iLz4KQEAgLTcxLDcgKzcxLDcgQEAKICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImZ1bGwuZGVwbG95LmFudC5hcmNoaXZlIiBsb2NhdGlvbj0iJHtkZXBsb3kuYW50LmFyY2hpdmV9Ii8+CiAgICAgICAgIDxnZXQgc3JjPSIke2dmdjMuYWRtaW4udXJsfS9fX2FzYWRtaW4vZGVwbG95P3BhdGg9JHtmdWxsLmRlcGxveS5hbnQuYXJjaGl2ZX0ke2RlcGxveS5jb250ZXh0LnJvb3QuYXJndW1lbnR9JmFtcDtmb3JjZT10cnVlJmFtcDtuYW1lPSR7YW50LnByb2plY3QubmFtZX0iCiAgICAgICAgICAgICBkZXN0PSIke2dmdjMucmVzdWx0cy5maWxlfSIvPgotICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Z2Z2My5yZXN1bHRzLmZpbGV9Ii8+ICAgIAorICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Z2Z2My5yZXN1bHRzLmZpbGV9Ii8+CiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBuYW1lPSItZGVwbG95LXdpdGgtcHciIGlmPSJnZnYzLnBhc3N3b3JkIj4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iRGVwbG95aW5nICR7ZGVwbG95LmFudC5hcmNoaXZlfSIvPgpAQCAtOTEsNyArOTEsNyBAQAogICAgICAgICA8dGVtcGZpbGUgcHJlZml4PSJnZnYzIiBwcm9wZXJ0eT0iZ2Z2My5yZXN1bHRzLmZpbGUiIGRlc3RkaXI9IiR7amF2YS5pby50bXBkaXJ9Ii8+ICA8IS0tIGRvIG5vdCBmb3JnZXQgdG8gZGVsZXRlIHRoaXMhIC0tPgogICAgICAgICA8Z2V0IHNyYz0iJHtnZnYzLmFkbWluLnVybH0vX19hc2FkbWluL3VuZGVwbG95P25hbWU9JHthbnQucHJvamVjdC5uYW1lfSIKICAgICAgICAgICAgIGRlc3Q9IiR7Z2Z2My5yZXN1bHRzLmZpbGV9Ii8+Ci0gICAgICAgIDxkZWxldGUgZmlsZT0iJHtnZnYzLnJlc3VsdHMuZmlsZX0iLz4gICAgCisgICAgICAgIDxkZWxldGUgZmlsZT0iJHtnZnYzLnJlc3VsdHMuZmlsZX0iLz4KICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IG5hbWU9Ii11bmRlcGxveS13aXRoLXB3IiBpZj0iZ2Z2My5wYXNzd29yZCI+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IlVuZGVwbG95aW5nICR7ZGVwbG95LmFudC5hcmNoaXZlfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvaGEtd2ViL1NGU0JEcml2ZXIvbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvaGEtd2ViL1NGU0JEcml2ZXIvbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sCmluZGV4IDEzYjE4MDMuLjM5MDQ5ZWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL2hhLXdlYi9TRlNCRHJpdmVyL25icHJvamVjdC9idWlsZC1pbXBsLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9oYS13ZWIvU0ZTQkRyaXZlci9uYnByb2plY3QvYnVpbGQtaW1wbC54bWwKQEAgLTQ3Nyw5ICs0NzcsOSBAQAogICAgIDx0YXJnZXQgbmFtZT0iLWluaXQtdGFza2RlZnMiPgogICAgICAgICA8ZmFpbCB1bmxlc3M9ImxpYnMuQ29weUxpYnMuY2xhc3NwYXRoIj4KIFRoZSBsaWJzLkNvcHlMaWJzLmNsYXNzcGF0aCBwcm9wZXJ0eSBpcyBub3Qgc2V0IHVwLgotVGhpcyBwcm9wZXJ0eSBtdXN0IHBvaW50IHRvIAorVGhpcyBwcm9wZXJ0eSBtdXN0IHBvaW50IHRvCiBvcmctbmV0YmVhbnMtbW9kdWxlcy1qYXZhLWoyc2Vwcm9qZWN0LWNvcHlsaWJzdGFzay5qYXIgZmlsZSB3aGljaCBpcyBwYXJ0Ci1vZiBOZXRCZWFucyBJREUgaW5zdGFsbGF0aW9uIGFuZCBpcyB1c3VhbGx5IGxvY2F0ZWQgYXQgCitvZiBOZXRCZWFucyBJREUgaW5zdGFsbGF0aW9uIGFuZCBpcyB1c3VhbGx5IGxvY2F0ZWQgYXQKICZsdDtuZXRiZWFuc19pbnN0YWxsYXRpb24mZ3Q7L2phdmEmbHQ7dmVyc2lvbiZndDsvYW50L2V4dHJhIGZvbGRlci4KIEVpdGhlciBvcGVuIHRoZSBwcm9qZWN0IGluIHRoZSBJREUgYW5kIG1ha2Ugc3VyZSBDb3B5TGlicyBsaWJyYXJ5CiBleGlzdHMgb3Igc2V0dXAgdGhlIHByb3BlcnR5IG1hbnVhbGx5LiBGb3IgZXhhbXBsZSBsaWtlIHRoaXM6CkBAIC04NTUsNyArODU1LDcgQEAKICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQsamF2YWRvYy1idWlsZCxqYXZhZG9jLWJyb3dzZSIgZGVzY3JpcHRpb249IkJ1aWxkIEphdmFkb2MuIiBuYW1lPSJqYXZhZG9jIi8+CiAgICAgPCEtLQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgSlVOSVQgQ09NUElMQVRJT04gU0VDVElPTgogICAgICAgICAgICAgLS0+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0LGNvbXBpbGUiIGlmPSJoYXZlLnRlc3RzIiBuYW1lPSItcHJlLXByZS1jb21waWxlLXRlc3QiPgpAQCAtODk0LDcgKzg5NCw3IEBACiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0LGNvbXBpbGUsLXByZS1wcmUtY29tcGlsZS10ZXN0LC1wcmUtY29tcGlsZS10ZXN0LXNpbmdsZSwtZG8tY29tcGlsZS10ZXN0LXNpbmdsZSwtcG9zdC1jb21waWxlLXRlc3Qtc2luZ2xlIiBuYW1lPSJjb21waWxlLXRlc3Qtc2luZ2xlIi8+CiAgICAgPCEtLQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgSlVOSVQgRVhFQ1VUSU9OIFNFQ1RJT04KICAgICAgICAgICAgIC0tPgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCIgaWY9ImhhdmUudGVzdHMiIG5hbWU9Ii1wcmUtdGVzdC1ydW4iPgpAQCAtOTIxLDcgKzkyMSw3IEBACiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0LGNvbXBpbGUtdGVzdC1zaW5nbGUsLXByZS10ZXN0LXJ1bi1zaW5nbGUsLWRvLXRlc3QtcnVuLXNpbmdsZSwtcG9zdC10ZXN0LXJ1bi1zaW5nbGUiIGRlc2NyaXB0aW9uPSJSdW4gc2luZ2xlIHVuaXQgdGVzdC4iIG5hbWU9InRlc3Qtc2luZ2xlIi8+CiAgICAgPCEtLQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgSlVOSVQgREVCVUdHSU5HIFNFQ1RJT04KICAgICAgICAgICAgIC0tPgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCxjb21waWxlLXRlc3QiIGlmPSJoYXZlLnRlc3RzIiBuYW1lPSItZGVidWctc3RhcnQtZGVidWdnZWUtdGVzdCI+CkBAIC05NDcsNyArOTQ3LDcgQEAKICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQsLXByZS1kZWJ1Zy1maXgsLWRvLWRlYnVnLWZpeC10ZXN0IiBpZj0ibmV0YmVhbnMuaG9tZSIgbmFtZT0iZGVidWctZml4LXRlc3QiLz4KICAgICA8IS0tCi0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBDTEVBTlVQIFNFQ1RJT04KICAgICAgICAgICAgIC0tPgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCIgaWY9Im5vLmRpc3QuZWFyLmRpciIgbmFtZT0iZGVwcy1jbGVhbiIgdW5sZXNzPSJuby5kZXBzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9oYS13ZWIvU0ZTQkRyaXZlci9zcmMvamF2YS9uZXQvbWF4L2VlL3Nmc2IvU0ZTQkRyaXZlclNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL2hhLXdlYi9TRlNCRHJpdmVyL3NyYy9qYXZhL25ldC9tYXgvZWUvc2ZzYi9TRlNCRHJpdmVyU2VydmxldC5qYXZhCmluZGV4IDAzYWViNDYuLjkyZDBmMmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL2hhLXdlYi9TRlNCRHJpdmVyL3NyYy9qYXZhL25ldC9tYXgvZWUvc2ZzYi9TRlNCRHJpdmVyU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL2hhLXdlYi9TRlNCRHJpdmVyL3NyYy9qYXZhL25ldC9tYXgvZWUvc2ZzYi9TRlNCRHJpdmVyU2VydmxldC5qYXZhCkBAIC0zMiw4ICszMiw4IEBACiAKIHB1YmxpYyBjbGFzcyBTRlNCRHJpdmVyU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIAotICAgCi0gICAgLyoqIAorCisgICAgLyoqCiAgICAgICogUHJvY2Vzc2VzIHJlcXVlc3RzIGZvciBib3RoIEhUVFAgPGNvZGU+R0VUPC9jb2RlPiBhbmQgPGNvZGU+UE9TVDwvY29kZT4gbWV0aG9kcy4KICAgICAgKiBAcGFyYW0gcmVxdWVzdCBzZXJ2bGV0IHJlcXVlc3QKICAgICAgKiBAcGFyYW0gcmVzcG9uc2Ugc2VydmxldCByZXNwb25zZQpAQCAtNDcsNyArNDcsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxodG1sPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoZWFkPiIpOwotICAgICAgICAgICAgb3V0LnByaW50bG4oIjx0aXRsZT5TZXJ2bGV0IFNGU0JEcml2ZXJTZXJ2bGV0PC90aXRsZT4iKTsgIAorICAgICAgICAgICAgb3V0LnByaW50bG4oIjx0aXRsZT5TZXJ2bGV0IFNGU0JEcml2ZXJTZXJ2bGV0PC90aXRsZT4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L2hlYWQ+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJvZHk+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGgxPlNlcnZsZXQgU0ZTQkRyaXZlclNlcnZsZXQgYXQgIiArIHJlcXVlc3QuZ2V0Q29udGV4dFBhdGggKCkgKyAiPC9oMT4iKTsKQEAgLTYzLDEzICs2MywxMyBAQAogICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvaHRtbD4iKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIG5tRXgpIHsKICAgICAgICAgICAgIG5tRXgucHJpbnRTdGFja1RyYWNlKG91dCk7Ci0gICAgICAgIH0gZmluYWxseSB7IAorICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgb3V0LmNsb3NlKCk7CiAgICAgICAgIH0KLSAgICB9IAorICAgIH0KIAogICAgIC8vIDxlZGl0b3ItZm9sZCBkZWZhdWx0c3RhdGU9ImNvbGxhcHNlZCIgZGVzYz0iSHR0cFNlcnZsZXQgbWV0aG9kcy4gQ2xpY2sgb24gdGhlICsgc2lnbiBvbiB0aGUgbGVmdCB0byBlZGl0IHRoZSBjb2RlLiI+Ci0gICAgLyoqIAorICAgIC8qKgogICAgICAqIEhhbmRsZXMgdGhlIEhUVFAgPGNvZGU+R0VUPC9jb2RlPiBtZXRob2QuCiAgICAgICogQHBhcmFtIHJlcXVlc3Qgc2VydmxldCByZXF1ZXN0CiAgICAgICogQHBhcmFtIHJlc3BvbnNlIHNlcnZsZXQgcmVzcG9uc2UKQEAgLTgwLDkgKzgwLDkgQEAKICAgICBwcm90ZWN0ZWQgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBwcm9jZXNzUmVxdWVzdChyZXF1ZXN0LCByZXNwb25zZSk7Ci0gICAgfSAKKyAgICB9CiAKLSAgICAvKiogCisgICAgLyoqCiAgICAgICogSGFuZGxlcyB0aGUgSFRUUCA8Y29kZT5QT1NUPC9jb2RlPiBtZXRob2QuCiAgICAgICogQHBhcmFtIHJlcXVlc3Qgc2VydmxldCByZXF1ZXN0CiAgICAgICogQHBhcmFtIHJlc3BvbnNlIHNlcnZsZXQgcmVzcG9uc2UKQEAgLTk1LDcgKzk1LDcgQEAKICAgICAgICAgcHJvY2Vzc1JlcXVlc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIC8qKiAKKyAgICAvKioKICAgICAgKiBSZXR1cm5zIGEgc2hvcnQgZGVzY3JpcHRpb24gb2YgdGhlIHNlcnZsZXQuCiAgICAgICogQHJldHVybiBhIFN0cmluZyBjb250YWluaW5nIHNlcnZsZXQgZGVzY3JpcHRpb24KICAgICAgKi8KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL2hhLXdlYi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvaGEtd2ViL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggN2E4ZjEwNC4uMzI3MWMyNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvaGEtd2ViL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvaGEtd2ViL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0taGEtd2ViIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9oYS13ZWIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvaGEtd2ViL2J1aWxkLnhtbAppbmRleCA1M2M3NjEyLi4zOGE1N2MwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9oYS13ZWIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL2hhLXdlYi9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE2ICs0MiwxNiBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29weVJlc291cmNlcyIvPgpAQCAtNzIsMTEgKzcyLDExIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTg4LDEwICs4OCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RvcmUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZW1vdmVSZXNvdXJjZXMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL2hhLXdlYi9zcmMvbWFpbi9qYXZhL2NvbS9hY21lL0h0dHBDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL2hhLXdlYi9zcmMvbWFpbi9qYXZhL2NvbS9hY21lL0h0dHBDbGllbnQuamF2YQppbmRleCA4YjE1ZjM3Li5hNmUxYTc1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9oYS13ZWIvc3JjL21haW4vamF2YS9jb20vYWNtZS9IdHRwQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvaGEtd2ViL3NyYy9tYWluL2phdmEvY29tL2FjbWUvSHR0cENsaWVudC5qYXZhCkBAIC0xMTYsNyArMTE2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGYWlsZWQgIiArIGluZm8pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CkBAIC0xMzQsNyArMTM0LDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIGlmICh0bXBTZXNzU3RhdGUuZ2V0SnNlc3Npb25Db29raWUoKSA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0bXBTZXNzU3RhdGUuc2V0SnNlc3Npb25Db29raWUoY29va2llKTsgICAgCisgICAgICAgICAgICB0bXBTZXNzU3RhdGUuc2V0SnNlc3Npb25Db29raWUoY29va2llKTsKICAgICAgICAgfQogICAgICAgICBpbnQgY29kZSA9ICgoSHR0cFVSTENvbm5lY3Rpb24pIHVjKS5nZXRSZXNwb25zZUNvZGUoKTsKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSB1Yy5nZXRJbnB1dFN0cmVhbSgpOwpAQCAtMTY5LDcgKzE2OSw3IEBACiAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgcHJldi5nZXRKc2Vzc2lvbkNvb2tpZSgpLmVxdWFscyhjdXJyZW50LmdldEpzZXNzaW9uQ29va2llKCkpOwogCiAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgcHJldi5nZXRIdHRwQ291bnRlcigpIDwgY3VycmVudC5nZXRIdHRwQ291bnRlcigpOwotICAgICAgICAgICAgCisKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL2hhLXdlYi9zcmMvdGVzdC9qYXZhL2NvbS9hY21lL0FwcFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL2hhLXdlYi9zcmMvdGVzdC9qYXZhL2NvbS9hY21lL0FwcFRlc3QuamF2YQppbmRleCBjNGI2MDhiLi4wY2Y3MjU1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9oYS13ZWIvc3JjL3Rlc3QvamF2YS9jb20vYWNtZS9BcHBUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvaGEtd2ViL3NyYy90ZXN0L2phdmEvY29tL2FjbWUvQXBwVGVzdC5qYXZhCkBAIC0yMyw3ICsyMyw3IEBACiAvKioKICAqIFVuaXQgdGVzdCBmb3Igc2ltcGxlIEFwcC4KICAqLwotcHVibGljIGNsYXNzIEFwcFRlc3QgCitwdWJsaWMgY2xhc3MgQXBwVGVzdAogICAgIGV4dGVuZHMgVGVzdENhc2UKIHsKICAgICAvKioKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci1tb2RpZmllZC1hdHRyaWJ1dGUvU0ZTQk1vZGlmaWVkQXR0cmlidXRlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci1tb2RpZmllZC1hdHRyaWJ1dGUvU0ZTQk1vZGlmaWVkQXR0cmlidXRlL2J1aWxkLnhtbAppbmRleCBjNTFhMmI5Li45YTg5YzAxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXItbW9kaWZpZWQtYXR0cmlidXRlL1NGU0JNb2RpZmllZEF0dHJpYnV0ZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyLW1vZGlmaWVkLWF0dHJpYnV0ZS9TRlNCTW9kaWZpZWRBdHRyaWJ1dGUvYnVpbGQueG1sCkBAIC0zMCwyNyArMzAsMjcgQEAKICAgICA8aW1wb3J0IGZpbGU9Im5icHJvamVjdC9idWlsZC1pbXBsLnhtbCIvPgogICAgIDwhLS0KIAotICAgIFRoZXJlIGV4aXN0IHNldmVyYWwgdGFyZ2V0cyB3aGljaCBhcmUgYnkgZGVmYXVsdCBlbXB0eSBhbmQgd2hpY2ggY2FuIGJlIAotICAgIHVzZWQgZm9yIGV4ZWN1dGlvbiBvZiB5b3VyIHRhc2tzLiBUaGVzZSB0YXJnZXRzIGFyZSB1c3VhbGx5IGV4ZWN1dGVkIAotICAgIGJlZm9yZSBhbmQgYWZ0ZXIgc29tZSBtYWluIHRhcmdldHMuIFRoZXkgYXJlOiAKKyAgICBUaGVyZSBleGlzdCBzZXZlcmFsIHRhcmdldHMgd2hpY2ggYXJlIGJ5IGRlZmF1bHQgZW1wdHkgYW5kIHdoaWNoIGNhbiBiZQorICAgIHVzZWQgZm9yIGV4ZWN1dGlvbiBvZiB5b3VyIHRhc2tzLiBUaGVzZSB0YXJnZXRzIGFyZSB1c3VhbGx5IGV4ZWN1dGVkCisgICAgYmVmb3JlIGFuZCBhZnRlciBzb21lIG1haW4gdGFyZ2V0cy4gVGhleSBhcmU6CiAKLSAgICAgIC1wcmUtaW5pdDogICAgICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgaW5pdGlhbGl6YXRpb24gb2YgcHJvamVjdCBwcm9wZXJ0aWVzIAotICAgICAgLXBvc3QtaW5pdDogICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGluaXRpYWxpemF0aW9uIG9mIHByb2plY3QgcHJvcGVydGllcyAKLSAgICAgIC1wcmUtY29tcGlsZTogICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgamF2YWMgY29tcGlsYXRpb24gCi0gICAgICAtcG9zdC1jb21waWxlOiAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgamF2YWMgY29tcGlsYXRpb24gCisgICAgICAtcHJlLWluaXQ6ICAgICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGluaXRpYWxpemF0aW9uIG9mIHByb2plY3QgcHJvcGVydGllcworICAgICAgLXBvc3QtaW5pdDogICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGluaXRpYWxpemF0aW9uIG9mIHByb2plY3QgcHJvcGVydGllcworICAgICAgLXByZS1jb21waWxlOiAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBqYXZhYyBjb21waWxhdGlvbgorICAgICAgLXBvc3QtY29tcGlsZTogICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGphdmFjIGNvbXBpbGF0aW9uCiAgICAgICAtcHJlLWNvbXBpbGUtc2luZ2xlOiAgICAgICBjYWxsZWQgYmVmb3JlIGphdmFjIGNvbXBpbGF0aW9uIG9mIHNpbmdsZSBmaWxlCiAgICAgICAtcG9zdC1jb21waWxlLXNpbmdsZTogICAgICBjYWxsZWQgYWZ0ZXIgamF2YWMgY29tcGlsYXRpb24gb2Ygc2luZ2xlIGZpbGUKICAgICAgIC1wcmUtY29tcGlsZS10ZXN0OiAgICAgICAgIGNhbGxlZCBiZWZvcmUgamF2YWMgY29tcGlsYXRpb24gb2YgSlVuaXQgdGVzdHMKICAgICAgIC1wb3N0LWNvbXBpbGUtdGVzdDogICAgICAgIGNhbGxlZCBhZnRlciBqYXZhYyBjb21waWxhdGlvbiBvZiBKVW5pdCB0ZXN0cwogICAgICAgLXByZS1jb21waWxlLXRlc3Qtc2luZ2xlOiAgY2FsbGVkIGJlZm9yZSBqYXZhYyBjb21waWxhdGlvbiBvZiBzaW5nbGUgSlVuaXQgdGVzdAogICAgICAgLXBvc3QtY29tcGlsZS10ZXN0LXNpbmdsZTogY2FsbGVkIGFmdGVyIGphdmFjIGNvbXBpbGF0aW9uIG9mIHNpbmdsZSBKVXVuaXQgdGVzdAotICAgICAgLXByZS1kaXN0OiAgICAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBhcmNoaXZlIGJ1aWxkaW5nIAotICAgICAgLXBvc3QtZGlzdDogICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGFyY2hpdmUgYnVpbGRpbmcgCi0gICAgICAtcG9zdC1jbGVhbjogICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgY2xlYW5pbmcgYnVpbGQgcHJvZHVjdHMgCisgICAgICAtcHJlLWRpc3Q6ICAgICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGFyY2hpdmUgYnVpbGRpbmcKKyAgICAgIC1wb3N0LWRpc3Q6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBhcmNoaXZlIGJ1aWxkaW5nCisgICAgICAtcG9zdC1jbGVhbjogICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgY2xlYW5pbmcgYnVpbGQgcHJvZHVjdHMKICAgICAgIC1wcmUtcnVuLWRlcGxveTogICAgICAgICAgIGNhbGxlZCBiZWZvcmUgZGVwbG95aW5nCiAgICAgICAtcG9zdC1ydW4tZGVwbG95OiAgICAgICAgICBjYWxsZWQgYWZ0ZXIgZGVwbG95aW5nCiAKLSAgICBFeGFtcGxlIG9mIHBsdWdpbmcgYW4gb2JmdXNjYXRvciBhZnRlciB0aGUgY29tcGlsYXRpb24gY291bGQgbG9vayBsaWtlIAorICAgIEV4YW1wbGUgb2YgcGx1Z2luZyBhbiBvYmZ1c2NhdG9yIGFmdGVyIHRoZSBjb21waWxhdGlvbiBjb3VsZCBsb29rIGxpa2UKIAogICAgICAgICA8dGFyZ2V0IG5hbWU9Ii1wb3N0LWNvbXBpbGUiPgogICAgICAgICAgICAgPG9iZnVzY2F0ZT4KQEAgLTU4LDIxICs1OCwyMSBAQAogICAgICAgICAgICAgPC9vYmZ1c2NhdGU+CiAgICAgICAgIDwvdGFyZ2V0PgogCi0gICAgRm9yIGxpc3Qgb2YgYXZhaWxhYmxlIHByb3BlcnRpZXMgY2hlY2sgdGhlIGltcG9ydGVkIAotICAgIG5icHJvamVjdC9idWlsZC1pbXBsLnhtbCBmaWxlLiAKKyAgICBGb3IgbGlzdCBvZiBhdmFpbGFibGUgcHJvcGVydGllcyBjaGVjayB0aGUgaW1wb3J0ZWQKKyAgICBuYnByb2plY3QvYnVpbGQtaW1wbC54bWwgZmlsZS4KIAogCiAgICAgT3RoZXIgd2F5IGhvdyB0byBjdXN0b21pemUgdGhlIGJ1aWxkIGlzIGJ5IG92ZXJyaWRpbmcgZXhpc3RpbmcgbWFpbiB0YXJnZXRzLgotICAgIFRoZSB0YXJnZXQgb2YgaW50ZXJlc3QgYXJlOiAKKyAgICBUaGUgdGFyZ2V0IG9mIGludGVyZXN0IGFyZToKIAogICAgICAgaW5pdC1tYWNyb2RlZi1qYXZhYzogICAgZGVmaW5lcyBtYWNybyBmb3IgamF2YWMgY29tcGlsYXRpb24KICAgICAgIGluaXQtbWFjcm9kZWYtanVuaXQ6ICAgZGVmaW5lcyBtYWNybyBmb3IganVuaXQgZXhlY3V0aW9uCiAgICAgICBpbml0LW1hY3JvZGVmLWRlYnVnOiAgICBkZWZpbmVzIG1hY3JvIGZvciBjbGFzcyBkZWJ1Z2dpbmcKICAgICAgIGRvLWRpc3Q6ICAgICAgICAgICAgICAgIGFyY2hpdmUgYnVpbGRpbmcKLSAgICAgIHJ1bjogICAgICAgICAgICAgICAgICAgIGV4ZWN1dGlvbiBvZiBwcm9qZWN0IAotICAgICAgamF2YWRvYy1idWlsZDogICAgICAgICAgamF2YWRvYyBnZW5lcmF0aW9uIAorICAgICAgcnVuOiAgICAgICAgICAgICAgICAgICAgZXhlY3V0aW9uIG9mIHByb2plY3QKKyAgICAgIGphdmFkb2MtYnVpbGQ6ICAgICAgICAgIGphdmFkb2MgZ2VuZXJhdGlvbgogCi0gICAgRXhhbXBsZSBvZiBvdmVycmlkaW5nIHRoZSB0YXJnZXQgZm9yIHByb2plY3QgZXhlY3V0aW9uIGNvdWxkIGxvb2sgbGlrZSAKKyAgICBFeGFtcGxlIG9mIG92ZXJyaWRpbmcgdGhlIHRhcmdldCBmb3IgcHJvamVjdCBleGVjdXRpb24gY291bGQgbG9vayBsaWtlCiAKICAgICAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9IjxQUk9KTkFNRT4taW1wbC5qYXIiPgogICAgICAgICAgICAgPGV4ZWMgZGlyPSJiaW4iIGV4ZWN1dGFibGU9ImxhdW5jaGVyLmV4ZSI+CkBAIC04MCwxMCArODAsMTAgQEAKICAgICAgICAgICAgIDwvZXhlYz4KICAgICAgICAgPC90YXJnZXQ+CiAKLSAgICBOb3RpY2UgdGhhdCBvdmVycmlkZGVuIHRhcmdldCBkZXBlbmRzIG9uIGphciB0YXJnZXQgYW5kIG5vdCBvbmx5IG9uIAotICAgIGNvbXBpbGUgdGFyZ2V0IGFzIHJlZ3VsYXIgcnVuIHRhcmdldCBkb2VzLiBBZ2FpbiwgZm9yIGxpc3Qgb2YgYXZhaWxhYmxlIAotICAgIHByb3BlcnRpZXMgd2hpY2ggeW91IGNhbiB1c2UgY2hlY2sgdGhlIHRhcmdldCB5b3UgYXJlIG92ZXJyaWRpbmcgaW4gCi0gICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuIAorICAgIE5vdGljZSB0aGF0IG92ZXJyaWRkZW4gdGFyZ2V0IGRlcGVuZHMgb24gamFyIHRhcmdldCBhbmQgbm90IG9ubHkgb24KKyAgICBjb21waWxlIHRhcmdldCBhcyByZWd1bGFyIHJ1biB0YXJnZXQgZG9lcy4gQWdhaW4sIGZvciBsaXN0IG9mIGF2YWlsYWJsZQorICAgIHByb3BlcnRpZXMgd2hpY2ggeW91IGNhbiB1c2UgY2hlY2sgdGhlIHRhcmdldCB5b3UgYXJlIG92ZXJyaWRpbmcgaW4KKyAgICBuYnByb2plY3QvYnVpbGQtaW1wbC54bWwgZmlsZS4KIAogICAgIC0tPgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyLW1vZGlmaWVkLWF0dHJpYnV0ZS9TRlNCTW9kaWZpZWRBdHRyaWJ1dGUvbmJwcm9qZWN0L2FudC1kZXBsb3kueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyLW1vZGlmaWVkLWF0dHJpYnV0ZS9TRlNCTW9kaWZpZWRBdHRyaWJ1dGUvbmJwcm9qZWN0L2FudC1kZXBsb3kueG1sCmluZGV4IDNkOTNlMTAuLmMzN2Q4NjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci1tb2RpZmllZC1hdHRyaWJ1dGUvU0ZTQk1vZGlmaWVkQXR0cmlidXRlL25icHJvamVjdC9hbnQtZGVwbG95LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXItbW9kaWZpZWQtYXR0cmlidXRlL1NGU0JNb2RpZmllZEF0dHJpYnV0ZS9uYnByb2plY3QvYW50LWRlcGxveS54bWwKQEAgLTI1LDcgKzI1LDcgQEAKICAgICAgICAgPHRlbXBmaWxlIHByZWZpeD0iZ2Z2MyIgcHJvcGVydHk9ImdmdjMucGFzc3dvcmQuZmlsZSIgZGVzdGRpcj0iJHtqYXZhLmlvLnRtcGRpcn0iLz4gIDwhLS0gZG8gbm90IGZvcmdldCB0byBkZWxldGUgdGhpcyEgLS0+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkFTX0FETUlOX1BBU1NXT1JEPSR7Z2Z2My5wYXNzd29yZH0iIGZpbGU9IiR7Z2Z2My5wYXNzd29yZC5maWxlfSIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSItcGFyc2Utc3VuLXdlYiIgZGVwZW5kcz0iLWluaXQtY2wtZGVwbG95bWVudC1lbnYiIGlmPSJzdW4ud2ViLnByZXNlbnQiPgogICAgICAgICA8dGVtcGZpbGUgcHJlZml4PSJnZnYzIiBwcm9wZXJ0eT0idGVtcC5zdW4ud2ViIiBkZXN0ZGlyPSIke2phdmEuaW8udG1wZGlyfSIvPgogICAgICAgICA8Y29weSBmaWxlPSIke2RlcGxveS5hbnQuZG9jYmFzZS5kaXJ9L1dFQi1JTkYvc3VuLXdlYi54bWwiIHRvZmlsZT0iJHt0ZW1wLnN1bi53ZWJ9Ii8+CkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgICAgICA8cmVwbGFjZXZhbHVlPjwhW0NEQVRBWy0tPiA8c3VuLXdlYi1hcHBdXT48L3JlcGxhY2V2YWx1ZT4KICAgICAgICAgPC9yZXBsYWNlPgogICAgICAgICA8eG1scHJvcGVydHkgZmlsZT0iJHt0ZW1wLnN1bi53ZWJ9IiB2YWxpZGF0ZT0iZmFsc2UiPgotICAgICAgICA8L3htbHByb3BlcnR5PiAgICAKKyAgICAgICAgPC94bWxwcm9wZXJ0eT4KICAgICAgICAgPGRlbGV0ZSBmaWxlPSIke3RlbXAuc3VuLndlYn0iLz4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImRlcGxveS5hbnQuY2xpZW50LnVybCIgdmFsdWU9IiR7Z2Z2My51cmx9JHtzdW4td2ViLWFwcC5jb250ZXh0LXJvb3R9Ii8+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkZXBsb3kuY29udGV4dC5yb290LmFyZ3VtZW50IiB2YWx1ZT0iJmFtcDtjb250ZXh0cm9vdD0ke3N1bi13ZWItYXBwLmNvbnRleHQtcm9vdH0iLz4KQEAgLTcxLDcgKzcxLDcgQEAKICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImZ1bGwuZGVwbG95LmFudC5hcmNoaXZlIiBsb2NhdGlvbj0iJHtkZXBsb3kuYW50LmFyY2hpdmV9Ii8+CiAgICAgICAgIDxnZXQgc3JjPSIke2dmdjMuYWRtaW4udXJsfS9fX2FzYWRtaW4vZGVwbG95P3BhdGg9JHtmdWxsLmRlcGxveS5hbnQuYXJjaGl2ZX0ke2RlcGxveS5jb250ZXh0LnJvb3QuYXJndW1lbnR9JmFtcDtmb3JjZT10cnVlJmFtcDtuYW1lPSR7YW50LnByb2plY3QubmFtZX0iCiAgICAgICAgICAgICBkZXN0PSIke2dmdjMucmVzdWx0cy5maWxlfSIvPgotICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Z2Z2My5yZXN1bHRzLmZpbGV9Ii8+ICAgIAorICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Z2Z2My5yZXN1bHRzLmZpbGV9Ii8+CiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBuYW1lPSItZGVwbG95LXdpdGgtcHciIGlmPSJnZnYzLnBhc3N3b3JkIj4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iRGVwbG95aW5nICR7ZGVwbG95LmFudC5hcmNoaXZlfSIvPgpAQCAtOTEsNyArOTEsNyBAQAogICAgICAgICA8dGVtcGZpbGUgcHJlZml4PSJnZnYzIiBwcm9wZXJ0eT0iZ2Z2My5yZXN1bHRzLmZpbGUiIGRlc3RkaXI9IiR7amF2YS5pby50bXBkaXJ9Ii8+ICA8IS0tIGRvIG5vdCBmb3JnZXQgdG8gZGVsZXRlIHRoaXMhIC0tPgogICAgICAgICA8Z2V0IHNyYz0iJHtnZnYzLmFkbWluLnVybH0vX19hc2FkbWluL3VuZGVwbG95P25hbWU9JHthbnQucHJvamVjdC5uYW1lfSIKICAgICAgICAgICAgIGRlc3Q9IiR7Z2Z2My5yZXN1bHRzLmZpbGV9Ii8+Ci0gICAgICAgIDxkZWxldGUgZmlsZT0iJHtnZnYzLnJlc3VsdHMuZmlsZX0iLz4gICAgCisgICAgICAgIDxkZWxldGUgZmlsZT0iJHtnZnYzLnJlc3VsdHMuZmlsZX0iLz4KICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IG5hbWU9Ii11bmRlcGxveS13aXRoLXB3IiBpZj0iZ2Z2My5wYXNzd29yZCI+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IlVuZGVwbG95aW5nICR7ZGVwbG95LmFudC5hcmNoaXZlfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyLW1vZGlmaWVkLWF0dHJpYnV0ZS9TRlNCTW9kaWZpZWRBdHRyaWJ1dGUvbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyLW1vZGlmaWVkLWF0dHJpYnV0ZS9TRlNCTW9kaWZpZWRBdHRyaWJ1dGUvbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sCmluZGV4IDAwMWIxZGQuLjRjNjgyZjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci1tb2RpZmllZC1hdHRyaWJ1dGUvU0ZTQk1vZGlmaWVkQXR0cmlidXRlL25icHJvamVjdC9idWlsZC1pbXBsLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXItbW9kaWZpZWQtYXR0cmlidXRlL1NGU0JNb2RpZmllZEF0dHJpYnV0ZS9uYnByb2plY3QvYnVpbGQtaW1wbC54bWwKQEAgLTQ3Nyw5ICs0NzcsOSBAQAogICAgIDx0YXJnZXQgbmFtZT0iLWluaXQtdGFza2RlZnMiPgogICAgICAgICA8ZmFpbCB1bmxlc3M9ImxpYnMuQ29weUxpYnMuY2xhc3NwYXRoIj4KIFRoZSBsaWJzLkNvcHlMaWJzLmNsYXNzcGF0aCBwcm9wZXJ0eSBpcyBub3Qgc2V0IHVwLgotVGhpcyBwcm9wZXJ0eSBtdXN0IHBvaW50IHRvIAorVGhpcyBwcm9wZXJ0eSBtdXN0IHBvaW50IHRvCiBvcmctbmV0YmVhbnMtbW9kdWxlcy1qYXZhLWoyc2Vwcm9qZWN0LWNvcHlsaWJzdGFzay5qYXIgZmlsZSB3aGljaCBpcyBwYXJ0Ci1vZiBOZXRCZWFucyBJREUgaW5zdGFsbGF0aW9uIGFuZCBpcyB1c3VhbGx5IGxvY2F0ZWQgYXQgCitvZiBOZXRCZWFucyBJREUgaW5zdGFsbGF0aW9uIGFuZCBpcyB1c3VhbGx5IGxvY2F0ZWQgYXQKICZsdDtuZXRiZWFuc19pbnN0YWxsYXRpb24mZ3Q7L2phdmEmbHQ7dmVyc2lvbiZndDsvYW50L2V4dHJhIGZvbGRlci4KIEVpdGhlciBvcGVuIHRoZSBwcm9qZWN0IGluIHRoZSBJREUgYW5kIG1ha2Ugc3VyZSBDb3B5TGlicyBsaWJyYXJ5CiBleGlzdHMgb3Igc2V0dXAgdGhlIHByb3BlcnR5IG1hbnVhbGx5LiBGb3IgZXhhbXBsZSBsaWtlIHRoaXM6CkBAIC04NTUsNyArODU1LDcgQEAKICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQsamF2YWRvYy1idWlsZCxqYXZhZG9jLWJyb3dzZSIgZGVzY3JpcHRpb249IkJ1aWxkIEphdmFkb2MuIiBuYW1lPSJqYXZhZG9jIi8+CiAgICAgPCEtLQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgSlVOSVQgQ09NUElMQVRJT04gU0VDVElPTgogICAgICAgICAgICAgLS0+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0LGNvbXBpbGUiIGlmPSJoYXZlLnRlc3RzIiBuYW1lPSItcHJlLXByZS1jb21waWxlLXRlc3QiPgpAQCAtODk0LDcgKzg5NCw3IEBACiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0LGNvbXBpbGUsLXByZS1wcmUtY29tcGlsZS10ZXN0LC1wcmUtY29tcGlsZS10ZXN0LXNpbmdsZSwtZG8tY29tcGlsZS10ZXN0LXNpbmdsZSwtcG9zdC1jb21waWxlLXRlc3Qtc2luZ2xlIiBuYW1lPSJjb21waWxlLXRlc3Qtc2luZ2xlIi8+CiAgICAgPCEtLQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgSlVOSVQgRVhFQ1VUSU9OIFNFQ1RJT04KICAgICAgICAgICAgIC0tPgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCIgaWY9ImhhdmUudGVzdHMiIG5hbWU9Ii1wcmUtdGVzdC1ydW4iPgpAQCAtOTIxLDcgKzkyMSw3IEBACiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0LGNvbXBpbGUtdGVzdC1zaW5nbGUsLXByZS10ZXN0LXJ1bi1zaW5nbGUsLWRvLXRlc3QtcnVuLXNpbmdsZSwtcG9zdC10ZXN0LXJ1bi1zaW5nbGUiIGRlc2NyaXB0aW9uPSJSdW4gc2luZ2xlIHVuaXQgdGVzdC4iIG5hbWU9InRlc3Qtc2luZ2xlIi8+CiAgICAgPCEtLQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgSlVOSVQgREVCVUdHSU5HIFNFQ1RJT04KICAgICAgICAgICAgIC0tPgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCxjb21waWxlLXRlc3QiIGlmPSJoYXZlLnRlc3RzIiBuYW1lPSItZGVidWctc3RhcnQtZGVidWdnZWUtdGVzdCI+CkBAIC05NDcsNyArOTQ3LDcgQEAKICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQsLXByZS1kZWJ1Zy1maXgsLWRvLWRlYnVnLWZpeC10ZXN0IiBpZj0ibmV0YmVhbnMuaG9tZSIgbmFtZT0iZGVidWctZml4LXRlc3QiLz4KICAgICA8IS0tCi0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBDTEVBTlVQIFNFQ1RJT04KICAgICAgICAgICAgIC0tPgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCIgaWY9Im5vLmRpc3QuZWFyLmRpciIgbmFtZT0iZGVwcy1jbGVhbiIgdW5sZXNzPSJuby5kZXBzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXItbW9kaWZpZWQtYXR0cmlidXRlL1NGU0JNb2RpZmllZEF0dHJpYnV0ZS9zcmMvamF2YS9uZXQvbWF4L2VlL3Nmc2IvU0ZTQkRyaXZlclNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci1tb2RpZmllZC1hdHRyaWJ1dGUvU0ZTQk1vZGlmaWVkQXR0cmlidXRlL3NyYy9qYXZhL25ldC9tYXgvZWUvc2ZzYi9TRlNCRHJpdmVyU2VydmxldC5qYXZhCmluZGV4IGVkNjRiNzIuLjBmMTI5NjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci1tb2RpZmllZC1hdHRyaWJ1dGUvU0ZTQk1vZGlmaWVkQXR0cmlidXRlL3NyYy9qYXZhL25ldC9tYXgvZWUvc2ZzYi9TRlNCRHJpdmVyU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci1tb2RpZmllZC1hdHRyaWJ1dGUvU0ZTQk1vZGlmaWVkQXR0cmlidXRlL3NyYy9qYXZhL25ldC9tYXgvZWUvc2ZzYi9TRlNCRHJpdmVyU2VydmxldC5qYXZhCkBAIC0zOCw4ICszOCw4IEBACiAgKi8KIHB1YmxpYyBjbGFzcyBTRlNCRHJpdmVyU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIAotICAgCi0gICAgLyoqIAorCisgICAgLyoqCiAgICAgICogUHJvY2Vzc2VzIHJlcXVlc3RzIGZvciBib3RoIEhUVFAgPGNvZGU+R0VUPC9jb2RlPiBhbmQgPGNvZGU+UE9TVDwvY29kZT4gbWV0aG9kcy4KICAgICAgKiBAcGFyYW0gcmVxdWVzdCBzZXJ2bGV0IHJlcXVlc3QKICAgICAgKiBAcGFyYW0gcmVzcG9uc2Ugc2VydmxldCByZXNwb25zZQpAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxodG1sPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoZWFkPiIpOwotICAgICAgICAgICAgb3V0LnByaW50bG4oIjx0aXRsZT5TZXJ2bGV0IFNGU0JEcml2ZXJTZXJ2bGV0PC90aXRsZT4iKTsgIAorICAgICAgICAgICAgb3V0LnByaW50bG4oIjx0aXRsZT5TZXJ2bGV0IFNGU0JEcml2ZXJTZXJ2bGV0PC90aXRsZT4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L2hlYWQ+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGJvZHk+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGgxPlNlcnZsZXQgU0ZTQkRyaXZlclNlcnZsZXQgYXQgIiArIHJlcXVlc3QuZ2V0Q29udGV4dFBhdGggKCkgKyAiPC9oMT4iKTsKQEAgLTc1LDcgKzc1LDcgQEAKIAogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aDE+RnJvbSBzZXNzaW9uIFNGU0JbMV0gTk9UIE5VTEwgPzogIiArICgiIiArIChzZnNiMSAhPSBudWxsKSkgKyAiIDwvaDE+Iik7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoMT5Gcm9tIHNlc3Npb24gU0ZTQlsyXSBOT1QgTlVMTD8gOiAiICsgKCIiICsgKHNmc2IyICE9IG51bGwpKSArICIgPC9oMT4iKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoc2ZzYjEgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIEluaXRpYWxDb250ZXh0IGN0eCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogCkBAIC04NCw3ICs4NCw3IEBACiAgICAgICAgICAgICAgICAgc2Vzc2lvbi5zZXRBdHRyaWJ1dGUoS0VZXzEsIHNmc2IxKTsKICAgICAgICAgICAgICAgICBzZXNzaW9uLnNldEF0dHJpYnV0ZShLRVlfMiwgc2ZzYjIpOwogCi0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGgzPkNyZWF0ZWQgU0ZTQlsxXTogIiArIHNmc2IxLmFzU3RyaW5nKCkgKyAiIDwvaDE+Iik7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoMz5DcmVhdGVkIFNGU0JbMl06ICIgKyBzZnNiMi5hc1N0cmluZygpICsgIiA8L2gxPiIpOwogCkBAIC0xMTMsMTMgKzExMywxMyBAQAogICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvaHRtbD4iKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIG5tRXgpIHsKICAgICAgICAgICAgIG5tRXgucHJpbnRTdGFja1RyYWNlKG91dCk7Ci0gICAgICAgIH0gZmluYWxseSB7IAorICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgb3V0LmNsb3NlKCk7CiAgICAgICAgIH0KLSAgICB9IAorICAgIH0KIAogICAgIC8vIDxlZGl0b3ItZm9sZCBkZWZhdWx0c3RhdGU9ImNvbGxhcHNlZCIgZGVzYz0iSHR0cFNlcnZsZXQgbWV0aG9kcy4gQ2xpY2sgb24gdGhlICsgc2lnbiBvbiB0aGUgbGVmdCB0byBlZGl0IHRoZSBjb2RlLiI+Ci0gICAgLyoqIAorICAgIC8qKgogICAgICAqIEhhbmRsZXMgdGhlIEhUVFAgPGNvZGU+R0VUPC9jb2RlPiBtZXRob2QuCiAgICAgICogQHBhcmFtIHJlcXVlc3Qgc2VydmxldCByZXF1ZXN0CiAgICAgICogQHBhcmFtIHJlc3BvbnNlIHNlcnZsZXQgcmVzcG9uc2UKQEAgLTEzMCw5ICsxMzAsOSBAQAogICAgIHByb3RlY3RlZCB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKQogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIHByb2Nlc3NSZXF1ZXN0KHJlcXVlc3QsIHJlc3BvbnNlKTsKLSAgICB9IAorICAgIH0KIAotICAgIC8qKiAKKyAgICAvKioKICAgICAgKiBIYW5kbGVzIHRoZSBIVFRQIDxjb2RlPlBPU1Q8L2NvZGU+IG1ldGhvZC4KICAgICAgKiBAcGFyYW0gcmVxdWVzdCBzZXJ2bGV0IHJlcXVlc3QKICAgICAgKiBAcGFyYW0gcmVzcG9uc2Ugc2VydmxldCByZXNwb25zZQpAQCAtMTQ1LDcgKzE0NSw3IEBACiAgICAgICAgIHByb2Nlc3NSZXF1ZXN0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICAvKiogCisgICAgLyoqCiAgICAgICogUmV0dXJucyBhIHNob3J0IGRlc2NyaXB0aW9uIG9mIHRoZSBzZXJ2bGV0LgogICAgICAqIEByZXR1cm4gYSBTdHJpbmcgY29udGFpbmluZyBzZXJ2bGV0IGRlc2NyaXB0aW9uCiAgICAgICovCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXItbW9kaWZpZWQtYXR0cmlidXRlL3NyYy9tYWluL2phdmEvY29tL2FjbWUvSHR0cENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyLW1vZGlmaWVkLWF0dHJpYnV0ZS9zcmMvbWFpbi9qYXZhL2NvbS9hY21lL0h0dHBDbGllbnQuamF2YQppbmRleCA5YmUwNGU0Li41MWIxMGM4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXItbW9kaWZpZWQtYXR0cmlidXRlL3NyYy9tYWluL2phdmEvY29tL2FjbWUvSHR0cENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci1tb2RpZmllZC1hdHRyaWJ1dGUvc3JjL21haW4vamF2YS9jb20vYWNtZS9IdHRwQ2xpZW50LmphdmEKQEAgLTExMyw3ICsxMTMsNyBAQAogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZhaWxlZCAiICsgaW5mbyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KQEAgLTEzMSw3ICsxMzEsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgaWYgKHRtcFNlc3NTdGF0ZS5nZXRKc2Vzc2lvbkNvb2tpZSgpID09IG51bGwpIHsKLSAgICAgICAgICAgIHRtcFNlc3NTdGF0ZS5zZXRKc2Vzc2lvbkNvb2tpZShjb29raWUpOyAgICAKKyAgICAgICAgICAgIHRtcFNlc3NTdGF0ZS5zZXRKc2Vzc2lvbkNvb2tpZShjb29raWUpOwogICAgICAgICB9CiAgICAgICAgIGludCBjb2RlID0gKChIdHRwVVJMQ29ubmVjdGlvbikgdWMpLmdldFJlc3BvbnNlQ29kZSgpOwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHVjLmdldElucHV0U3RyZWFtKCk7CkBAIC0xOTgsNyArMTk4LDcgQEAKICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiBwcmV2LmdldEh0dHBDb3VudGVyKCkgPCBjdXJyZW50LmdldEh0dHBDb3VudGVyKCk7CiAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgcHJldi5nZXRFamIxQ291bnRlcigpIDwgY3VycmVudC5nZXRFamIxQ291bnRlcigpOwogICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIHByZXYuZ2V0RWpiMkNvdW50ZXIoKSA8IGN1cnJlbnQuZ2V0RWpiMkNvdW50ZXIoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXItbW9kaWZpZWQtYXR0cmlidXRlL3NyYy90ZXN0L2phdmEvY29tL2FjbWUvQXBwVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyLW1vZGlmaWVkLWF0dHJpYnV0ZS9zcmMvdGVzdC9qYXZhL2NvbS9hY21lL0FwcFRlc3QuamF2YQppbmRleCA1MGExMTgzLi5hOGFmYzY2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXItbW9kaWZpZWQtYXR0cmlidXRlL3NyYy90ZXN0L2phdmEvY29tL2FjbWUvQXBwVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci1tb2RpZmllZC1hdHRyaWJ1dGUvc3JjL3Rlc3QvamF2YS9jb20vYWNtZS9BcHBUZXN0LmphdmEKQEAgLTIzLDcgKzIzLDcgQEAKIC8qKgogICogVW5pdCB0ZXN0IGZvciBzaW1wbGUgQXBwLgogICovCi1wdWJsaWMgY2xhc3MgQXBwVGVzdCAKK3B1YmxpYyBjbGFzcyBBcHBUZXN0CiAgICAgZXh0ZW5kcyBUZXN0Q2FzZQogewogICAgIC8qKgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyLW1vZGlmaWVkLXNlc3Npb24vU0ZTQk1vZGlmaWVkU2Vzc2lvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXItbW9kaWZpZWQtc2Vzc2lvbi9TRlNCTW9kaWZpZWRTZXNzaW9uL2J1aWxkLnhtbAppbmRleCAzZGFmZTA1Li5hMDY4N2UwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXItbW9kaWZpZWQtc2Vzc2lvbi9TRlNCTW9kaWZpZWRTZXNzaW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXItbW9kaWZpZWQtc2Vzc2lvbi9TRlNCTW9kaWZpZWRTZXNzaW9uL2J1aWxkLnhtbApAQCAtMzAsMjcgKzMwLDI3IEBACiAgICAgPGltcG9ydCBmaWxlPSJuYnByb2plY3QvYnVpbGQtaW1wbC54bWwiLz4KICAgICA8IS0tCiAKLSAgICBUaGVyZSBleGlzdCBzZXZlcmFsIHRhcmdldHMgd2hpY2ggYXJlIGJ5IGRlZmF1bHQgZW1wdHkgYW5kIHdoaWNoIGNhbiBiZSAKLSAgICB1c2VkIGZvciBleGVjdXRpb24gb2YgeW91ciB0YXNrcy4gVGhlc2UgdGFyZ2V0cyBhcmUgdXN1YWxseSBleGVjdXRlZCAKLSAgICBiZWZvcmUgYW5kIGFmdGVyIHNvbWUgbWFpbiB0YXJnZXRzLiBUaGV5IGFyZTogCisgICAgVGhlcmUgZXhpc3Qgc2V2ZXJhbCB0YXJnZXRzIHdoaWNoIGFyZSBieSBkZWZhdWx0IGVtcHR5IGFuZCB3aGljaCBjYW4gYmUKKyAgICB1c2VkIGZvciBleGVjdXRpb24gb2YgeW91ciB0YXNrcy4gVGhlc2UgdGFyZ2V0cyBhcmUgdXN1YWxseSBleGVjdXRlZAorICAgIGJlZm9yZSBhbmQgYWZ0ZXIgc29tZSBtYWluIHRhcmdldHMuIFRoZXkgYXJlOgogCi0gICAgICAtcHJlLWluaXQ6ICAgICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGluaXRpYWxpemF0aW9uIG9mIHByb2plY3QgcHJvcGVydGllcyAKLSAgICAgIC1wb3N0LWluaXQ6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBpbml0aWFsaXphdGlvbiBvZiBwcm9qZWN0IHByb3BlcnRpZXMgCi0gICAgICAtcHJlLWNvbXBpbGU6ICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGphdmFjIGNvbXBpbGF0aW9uIAotICAgICAgLXBvc3QtY29tcGlsZTogICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGphdmFjIGNvbXBpbGF0aW9uIAorICAgICAgLXByZS1pbml0OiAgICAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBpbml0aWFsaXphdGlvbiBvZiBwcm9qZWN0IHByb3BlcnRpZXMKKyAgICAgIC1wb3N0LWluaXQ6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBpbml0aWFsaXphdGlvbiBvZiBwcm9qZWN0IHByb3BlcnRpZXMKKyAgICAgIC1wcmUtY29tcGlsZTogICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgamF2YWMgY29tcGlsYXRpb24KKyAgICAgIC1wb3N0LWNvbXBpbGU6ICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBqYXZhYyBjb21waWxhdGlvbgogICAgICAgLXByZS1jb21waWxlLXNpbmdsZTogICAgICAgY2FsbGVkIGJlZm9yZSBqYXZhYyBjb21waWxhdGlvbiBvZiBzaW5nbGUgZmlsZQogICAgICAgLXBvc3QtY29tcGlsZS1zaW5nbGU6ICAgICAgY2FsbGVkIGFmdGVyIGphdmFjIGNvbXBpbGF0aW9uIG9mIHNpbmdsZSBmaWxlCiAgICAgICAtcHJlLWNvbXBpbGUtdGVzdDogICAgICAgICBjYWxsZWQgYmVmb3JlIGphdmFjIGNvbXBpbGF0aW9uIG9mIEpVbml0IHRlc3RzCiAgICAgICAtcG9zdC1jb21waWxlLXRlc3Q6ICAgICAgICBjYWxsZWQgYWZ0ZXIgamF2YWMgY29tcGlsYXRpb24gb2YgSlVuaXQgdGVzdHMKICAgICAgIC1wcmUtY29tcGlsZS10ZXN0LXNpbmdsZTogIGNhbGxlZCBiZWZvcmUgamF2YWMgY29tcGlsYXRpb24gb2Ygc2luZ2xlIEpVbml0IHRlc3QKICAgICAgIC1wb3N0LWNvbXBpbGUtdGVzdC1zaW5nbGU6IGNhbGxlZCBhZnRlciBqYXZhYyBjb21waWxhdGlvbiBvZiBzaW5nbGUgSlV1bml0IHRlc3QKLSAgICAgIC1wcmUtZGlzdDogICAgICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgYXJjaGl2ZSBidWlsZGluZyAKLSAgICAgIC1wb3N0LWRpc3Q6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBhcmNoaXZlIGJ1aWxkaW5nIAotICAgICAgLXBvc3QtY2xlYW46ICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGNsZWFuaW5nIGJ1aWxkIHByb2R1Y3RzIAorICAgICAgLXByZS1kaXN0OiAgICAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBhcmNoaXZlIGJ1aWxkaW5nCisgICAgICAtcG9zdC1kaXN0OiAgICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgYXJjaGl2ZSBidWlsZGluZworICAgICAgLXBvc3QtY2xlYW46ICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGNsZWFuaW5nIGJ1aWxkIHByb2R1Y3RzCiAgICAgICAtcHJlLXJ1bi1kZXBsb3k6ICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGRlcGxveWluZwogICAgICAgLXBvc3QtcnVuLWRlcGxveTogICAgICAgICAgY2FsbGVkIGFmdGVyIGRlcGxveWluZwogCi0gICAgRXhhbXBsZSBvZiBwbHVnaW5nIGFuIG9iZnVzY2F0b3IgYWZ0ZXIgdGhlIGNvbXBpbGF0aW9uIGNvdWxkIGxvb2sgbGlrZSAKKyAgICBFeGFtcGxlIG9mIHBsdWdpbmcgYW4gb2JmdXNjYXRvciBhZnRlciB0aGUgY29tcGlsYXRpb24gY291bGQgbG9vayBsaWtlCiAKICAgICAgICAgPHRhcmdldCBuYW1lPSItcG9zdC1jb21waWxlIj4KICAgICAgICAgICAgIDxvYmZ1c2NhdGU+CkBAIC01OCwyMSArNTgsMjEgQEAKICAgICAgICAgICAgIDwvb2JmdXNjYXRlPgogICAgICAgICA8L3RhcmdldD4KIAotICAgIEZvciBsaXN0IG9mIGF2YWlsYWJsZSBwcm9wZXJ0aWVzIGNoZWNrIHRoZSBpbXBvcnRlZCAKLSAgICBuYnByb2plY3QvYnVpbGQtaW1wbC54bWwgZmlsZS4gCisgICAgRm9yIGxpc3Qgb2YgYXZhaWxhYmxlIHByb3BlcnRpZXMgY2hlY2sgdGhlIGltcG9ydGVkCisgICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuCiAKIAogICAgIE90aGVyIHdheSBob3cgdG8gY3VzdG9taXplIHRoZSBidWlsZCBpcyBieSBvdmVycmlkaW5nIGV4aXN0aW5nIG1haW4gdGFyZ2V0cy4KLSAgICBUaGUgdGFyZ2V0IG9mIGludGVyZXN0IGFyZTogCisgICAgVGhlIHRhcmdldCBvZiBpbnRlcmVzdCBhcmU6CiAKICAgICAgIGluaXQtbWFjcm9kZWYtamF2YWM6ICAgIGRlZmluZXMgbWFjcm8gZm9yIGphdmFjIGNvbXBpbGF0aW9uCiAgICAgICBpbml0LW1hY3JvZGVmLWp1bml0OiAgIGRlZmluZXMgbWFjcm8gZm9yIGp1bml0IGV4ZWN1dGlvbgogICAgICAgaW5pdC1tYWNyb2RlZi1kZWJ1ZzogICAgZGVmaW5lcyBtYWNybyBmb3IgY2xhc3MgZGVidWdnaW5nCiAgICAgICBkby1kaXN0OiAgICAgICAgICAgICAgICBhcmNoaXZlIGJ1aWxkaW5nCi0gICAgICBydW46ICAgICAgICAgICAgICAgICAgICBleGVjdXRpb24gb2YgcHJvamVjdCAKLSAgICAgIGphdmFkb2MtYnVpbGQ6ICAgICAgICAgIGphdmFkb2MgZ2VuZXJhdGlvbiAKKyAgICAgIHJ1bjogICAgICAgICAgICAgICAgICAgIGV4ZWN1dGlvbiBvZiBwcm9qZWN0CisgICAgICBqYXZhZG9jLWJ1aWxkOiAgICAgICAgICBqYXZhZG9jIGdlbmVyYXRpb24KIAotICAgIEV4YW1wbGUgb2Ygb3ZlcnJpZGluZyB0aGUgdGFyZ2V0IGZvciBwcm9qZWN0IGV4ZWN1dGlvbiBjb3VsZCBsb29rIGxpa2UgCisgICAgRXhhbXBsZSBvZiBvdmVycmlkaW5nIHRoZSB0YXJnZXQgZm9yIHByb2plY3QgZXhlY3V0aW9uIGNvdWxkIGxvb2sgbGlrZQogCiAgICAgICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSI8UFJPSk5BTUU+LWltcGwuamFyIj4KICAgICAgICAgICAgIDxleGVjIGRpcj0iYmluIiBleGVjdXRhYmxlPSJsYXVuY2hlci5leGUiPgpAQCAtODAsMTAgKzgwLDEwIEBACiAgICAgICAgICAgICA8L2V4ZWM+CiAgICAgICAgIDwvdGFyZ2V0PgogCi0gICAgTm90aWNlIHRoYXQgb3ZlcnJpZGRlbiB0YXJnZXQgZGVwZW5kcyBvbiBqYXIgdGFyZ2V0IGFuZCBub3Qgb25seSBvbiAKLSAgICBjb21waWxlIHRhcmdldCBhcyByZWd1bGFyIHJ1biB0YXJnZXQgZG9lcy4gQWdhaW4sIGZvciBsaXN0IG9mIGF2YWlsYWJsZSAKLSAgICBwcm9wZXJ0aWVzIHdoaWNoIHlvdSBjYW4gdXNlIGNoZWNrIHRoZSB0YXJnZXQgeW91IGFyZSBvdmVycmlkaW5nIGluIAotICAgIG5icHJvamVjdC9idWlsZC1pbXBsLnhtbCBmaWxlLiAKKyAgICBOb3RpY2UgdGhhdCBvdmVycmlkZGVuIHRhcmdldCBkZXBlbmRzIG9uIGphciB0YXJnZXQgYW5kIG5vdCBvbmx5IG9uCisgICAgY29tcGlsZSB0YXJnZXQgYXMgcmVndWxhciBydW4gdGFyZ2V0IGRvZXMuIEFnYWluLCBmb3IgbGlzdCBvZiBhdmFpbGFibGUKKyAgICBwcm9wZXJ0aWVzIHdoaWNoIHlvdSBjYW4gdXNlIGNoZWNrIHRoZSB0YXJnZXQgeW91IGFyZSBvdmVycmlkaW5nIGluCisgICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuCiAKICAgICAtLT4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci1tb2RpZmllZC1zZXNzaW9uL1NGU0JNb2RpZmllZFNlc3Npb24vbmJwcm9qZWN0L2FudC1kZXBsb3kueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyLW1vZGlmaWVkLXNlc3Npb24vU0ZTQk1vZGlmaWVkU2Vzc2lvbi9uYnByb2plY3QvYW50LWRlcGxveS54bWwKaW5kZXggM2Q5M2UxMC4uYzM3ZDg2MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyLW1vZGlmaWVkLXNlc3Npb24vU0ZTQk1vZGlmaWVkU2Vzc2lvbi9uYnByb2plY3QvYW50LWRlcGxveS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyLW1vZGlmaWVkLXNlc3Npb24vU0ZTQk1vZGlmaWVkU2Vzc2lvbi9uYnByb2plY3QvYW50LWRlcGxveS54bWwKQEAgLTI1LDcgKzI1LDcgQEAKICAgICAgICAgPHRlbXBmaWxlIHByZWZpeD0iZ2Z2MyIgcHJvcGVydHk9ImdmdjMucGFzc3dvcmQuZmlsZSIgZGVzdGRpcj0iJHtqYXZhLmlvLnRtcGRpcn0iLz4gIDwhLS0gZG8gbm90IGZvcmdldCB0byBkZWxldGUgdGhpcyEgLS0+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkFTX0FETUlOX1BBU1NXT1JEPSR7Z2Z2My5wYXNzd29yZH0iIGZpbGU9IiR7Z2Z2My5wYXNzd29yZC5maWxlfSIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSItcGFyc2Utc3VuLXdlYiIgZGVwZW5kcz0iLWluaXQtY2wtZGVwbG95bWVudC1lbnYiIGlmPSJzdW4ud2ViLnByZXNlbnQiPgogICAgICAgICA8dGVtcGZpbGUgcHJlZml4PSJnZnYzIiBwcm9wZXJ0eT0idGVtcC5zdW4ud2ViIiBkZXN0ZGlyPSIke2phdmEuaW8udG1wZGlyfSIvPgogICAgICAgICA8Y29weSBmaWxlPSIke2RlcGxveS5hbnQuZG9jYmFzZS5kaXJ9L1dFQi1JTkYvc3VuLXdlYi54bWwiIHRvZmlsZT0iJHt0ZW1wLnN1bi53ZWJ9Ii8+CkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgICAgICA8cmVwbGFjZXZhbHVlPjwhW0NEQVRBWy0tPiA8c3VuLXdlYi1hcHBdXT48L3JlcGxhY2V2YWx1ZT4KICAgICAgICAgPC9yZXBsYWNlPgogICAgICAgICA8eG1scHJvcGVydHkgZmlsZT0iJHt0ZW1wLnN1bi53ZWJ9IiB2YWxpZGF0ZT0iZmFsc2UiPgotICAgICAgICA8L3htbHByb3BlcnR5PiAgICAKKyAgICAgICAgPC94bWxwcm9wZXJ0eT4KICAgICAgICAgPGRlbGV0ZSBmaWxlPSIke3RlbXAuc3VuLndlYn0iLz4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImRlcGxveS5hbnQuY2xpZW50LnVybCIgdmFsdWU9IiR7Z2Z2My51cmx9JHtzdW4td2ViLWFwcC5jb250ZXh0LXJvb3R9Ii8+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkZXBsb3kuY29udGV4dC5yb290LmFyZ3VtZW50IiB2YWx1ZT0iJmFtcDtjb250ZXh0cm9vdD0ke3N1bi13ZWItYXBwLmNvbnRleHQtcm9vdH0iLz4KQEAgLTcxLDcgKzcxLDcgQEAKICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImZ1bGwuZGVwbG95LmFudC5hcmNoaXZlIiBsb2NhdGlvbj0iJHtkZXBsb3kuYW50LmFyY2hpdmV9Ii8+CiAgICAgICAgIDxnZXQgc3JjPSIke2dmdjMuYWRtaW4udXJsfS9fX2FzYWRtaW4vZGVwbG95P3BhdGg9JHtmdWxsLmRlcGxveS5hbnQuYXJjaGl2ZX0ke2RlcGxveS5jb250ZXh0LnJvb3QuYXJndW1lbnR9JmFtcDtmb3JjZT10cnVlJmFtcDtuYW1lPSR7YW50LnByb2plY3QubmFtZX0iCiAgICAgICAgICAgICBkZXN0PSIke2dmdjMucmVzdWx0cy5maWxlfSIvPgotICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Z2Z2My5yZXN1bHRzLmZpbGV9Ii8+ICAgIAorICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7Z2Z2My5yZXN1bHRzLmZpbGV9Ii8+CiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBuYW1lPSItZGVwbG95LXdpdGgtcHciIGlmPSJnZnYzLnBhc3N3b3JkIj4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iRGVwbG95aW5nICR7ZGVwbG95LmFudC5hcmNoaXZlfSIvPgpAQCAtOTEsNyArOTEsNyBAQAogICAgICAgICA8dGVtcGZpbGUgcHJlZml4PSJnZnYzIiBwcm9wZXJ0eT0iZ2Z2My5yZXN1bHRzLmZpbGUiIGRlc3RkaXI9IiR7amF2YS5pby50bXBkaXJ9Ii8+ICA8IS0tIGRvIG5vdCBmb3JnZXQgdG8gZGVsZXRlIHRoaXMhIC0tPgogICAgICAgICA8Z2V0IHNyYz0iJHtnZnYzLmFkbWluLnVybH0vX19hc2FkbWluL3VuZGVwbG95P25hbWU9JHthbnQucHJvamVjdC5uYW1lfSIKICAgICAgICAgICAgIGRlc3Q9IiR7Z2Z2My5yZXN1bHRzLmZpbGV9Ii8+Ci0gICAgICAgIDxkZWxldGUgZmlsZT0iJHtnZnYzLnJlc3VsdHMuZmlsZX0iLz4gICAgCisgICAgICAgIDxkZWxldGUgZmlsZT0iJHtnZnYzLnJlc3VsdHMuZmlsZX0iLz4KICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IG5hbWU9Ii11bmRlcGxveS13aXRoLXB3IiBpZj0iZ2Z2My5wYXNzd29yZCI+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IlVuZGVwbG95aW5nICR7ZGVwbG95LmFudC5hcmNoaXZlfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyLW1vZGlmaWVkLXNlc3Npb24vU0ZTQk1vZGlmaWVkU2Vzc2lvbi9uYnByb2plY3QvYnVpbGQtaW1wbC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXItbW9kaWZpZWQtc2Vzc2lvbi9TRlNCTW9kaWZpZWRTZXNzaW9uL25icHJvamVjdC9idWlsZC1pbXBsLnhtbAppbmRleCA1NGRlZTBlLi5hMjAzMjQ5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXItbW9kaWZpZWQtc2Vzc2lvbi9TRlNCTW9kaWZpZWRTZXNzaW9uL25icHJvamVjdC9idWlsZC1pbXBsLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXItbW9kaWZpZWQtc2Vzc2lvbi9TRlNCTW9kaWZpZWRTZXNzaW9uL25icHJvamVjdC9idWlsZC1pbXBsLnhtbApAQCAtNDc3LDkgKzQ3Nyw5IEBACiAgICAgPHRhcmdldCBuYW1lPSItaW5pdC10YXNrZGVmcyI+CiAgICAgICAgIDxmYWlsIHVubGVzcz0ibGlicy5Db3B5TGlicy5jbGFzc3BhdGgiPgogVGhlIGxpYnMuQ29weUxpYnMuY2xhc3NwYXRoIHByb3BlcnR5IGlzIG5vdCBzZXQgdXAuCi1UaGlzIHByb3BlcnR5IG11c3QgcG9pbnQgdG8gCitUaGlzIHByb3BlcnR5IG11c3QgcG9pbnQgdG8KIG9yZy1uZXRiZWFucy1tb2R1bGVzLWphdmEtajJzZXByb2plY3QtY29weWxpYnN0YXNrLmphciBmaWxlIHdoaWNoIGlzIHBhcnQKLW9mIE5ldEJlYW5zIElERSBpbnN0YWxsYXRpb24gYW5kIGlzIHVzdWFsbHkgbG9jYXRlZCBhdCAKK29mIE5ldEJlYW5zIElERSBpbnN0YWxsYXRpb24gYW5kIGlzIHVzdWFsbHkgbG9jYXRlZCBhdAogJmx0O25ldGJlYW5zX2luc3RhbGxhdGlvbiZndDsvamF2YSZsdDt2ZXJzaW9uJmd0Oy9hbnQvZXh0cmEgZm9sZGVyLgogRWl0aGVyIG9wZW4gdGhlIHByb2plY3QgaW4gdGhlIElERSBhbmQgbWFrZSBzdXJlIENvcHlMaWJzIGxpYnJhcnkKIGV4aXN0cyBvciBzZXR1cCB0aGUgcHJvcGVydHkgbWFudWFsbHkuIEZvciBleGFtcGxlIGxpa2UgdGhpczoKQEAgLTg1NSw3ICs4NTUsNyBAQAogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCxqYXZhZG9jLWJ1aWxkLGphdmFkb2MtYnJvd3NlIiBkZXNjcmlwdGlvbj0iQnVpbGQgSmF2YWRvYy4iIG5hbWU9ImphdmFkb2MiLz4KICAgICA8IS0tCi0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBKVU5JVCBDT01QSUxBVElPTiBTRUNUSU9OCiAgICAgICAgICAgICAtLT4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQsY29tcGlsZSIgaWY9ImhhdmUudGVzdHMiIG5hbWU9Ii1wcmUtcHJlLWNvbXBpbGUtdGVzdCI+CkBAIC04OTQsNyArODk0LDcgQEAKICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQsY29tcGlsZSwtcHJlLXByZS1jb21waWxlLXRlc3QsLXByZS1jb21waWxlLXRlc3Qtc2luZ2xlLC1kby1jb21waWxlLXRlc3Qtc2luZ2xlLC1wb3N0LWNvbXBpbGUtdGVzdC1zaW5nbGUiIG5hbWU9ImNvbXBpbGUtdGVzdC1zaW5nbGUiLz4KICAgICA8IS0tCi0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBKVU5JVCBFWEVDVVRJT04gU0VDVElPTgogICAgICAgICAgICAgLS0+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0IiBpZj0iaGF2ZS50ZXN0cyIgbmFtZT0iLXByZS10ZXN0LXJ1biI+CkBAIC05MjEsNyArOTIxLDcgQEAKICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQsY29tcGlsZS10ZXN0LXNpbmdsZSwtcHJlLXRlc3QtcnVuLXNpbmdsZSwtZG8tdGVzdC1ydW4tc2luZ2xlLC1wb3N0LXRlc3QtcnVuLXNpbmdsZSIgZGVzY3JpcHRpb249IlJ1biBzaW5nbGUgdW5pdCB0ZXN0LiIgbmFtZT0idGVzdC1zaW5nbGUiLz4KICAgICA8IS0tCi0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBKVU5JVCBERUJVR0dJTkcgU0VDVElPTgogICAgICAgICAgICAgLS0+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0LGNvbXBpbGUtdGVzdCIgaWY9ImhhdmUudGVzdHMiIG5hbWU9Ii1kZWJ1Zy1zdGFydC1kZWJ1Z2dlZS10ZXN0Ij4KQEAgLTk0Nyw3ICs5NDcsNyBAQAogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCwtcHJlLWRlYnVnLWZpeCwtZG8tZGVidWctZml4LXRlc3QiIGlmPSJuZXRiZWFucy5ob21lIiBuYW1lPSJkZWJ1Zy1maXgtdGVzdCIvPgogICAgIDwhLS0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIENMRUFOVVAgU0VDVElPTgogICAgICAgICAgICAgLS0+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0IiBpZj0ibm8uZGlzdC5lYXIuZGlyIiBuYW1lPSJkZXBzLWNsZWFuIiB1bmxlc3M9Im5vLmRlcHMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci1tb2RpZmllZC1zZXNzaW9uL1NGU0JNb2RpZmllZFNlc3Npb24vc3JjL2phdmEvbmV0L21heC9lZS9zZnNiL1NGU0JEcml2ZXJTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXItbW9kaWZpZWQtc2Vzc2lvbi9TRlNCTW9kaWZpZWRTZXNzaW9uL3NyYy9qYXZhL25ldC9tYXgvZWUvc2ZzYi9TRlNCRHJpdmVyU2VydmxldC5qYXZhCmluZGV4IGEwYjY0OWEuLmIwMzZhMjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci1tb2RpZmllZC1zZXNzaW9uL1NGU0JNb2RpZmllZFNlc3Npb24vc3JjL2phdmEvbmV0L21heC9lZS9zZnNiL1NGU0JEcml2ZXJTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyLW1vZGlmaWVkLXNlc3Npb24vU0ZTQk1vZGlmaWVkU2Vzc2lvbi9zcmMvamF2YS9uZXQvbWF4L2VlL3Nmc2IvU0ZTQkRyaXZlclNlcnZsZXQuamF2YQpAQCAtMzgsOCArMzgsOCBAQAogICovCiBwdWJsaWMgY2xhc3MgU0ZTQkRyaXZlclNlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAKLSAgIAotICAgIC8qKiAKKworICAgIC8qKgogICAgICAqIFByb2Nlc3NlcyByZXF1ZXN0cyBmb3IgYm90aCBIVFRQIDxjb2RlPkdFVDwvY29kZT4gYW5kIDxjb2RlPlBPU1Q8L2NvZGU+IG1ldGhvZHMuCiAgICAgICogQHBhcmFtIHJlcXVlc3Qgc2VydmxldCByZXF1ZXN0CiAgICAgICogQHBhcmFtIHJlc3BvbnNlIHNlcnZsZXQgcmVzcG9uc2UKQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aHRtbD4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aGVhZD4iKTsKLSAgICAgICAgICAgIG91dC5wcmludGxuKCI8dGl0bGU+U2VydmxldCBTRlNCRHJpdmVyU2VydmxldDwvdGl0bGU+Iik7ICAKKyAgICAgICAgICAgIG91dC5wcmludGxuKCI8dGl0bGU+U2VydmxldCBTRlNCRHJpdmVyU2VydmxldDwvdGl0bGU+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9oZWFkPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxib2R5PiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoMT5TZXJ2bGV0IFNGU0JEcml2ZXJTZXJ2bGV0IGF0ICIgKyByZXF1ZXN0LmdldENvbnRleHRQYXRoICgpICsgIjwvaDE+Iik7CkBAIC03NSwxMyArNzUsMTMgQEAKIAogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aDE+RnJvbSBzZXNzaW9uIFNGU0JbMV0gTk9UIE5VTEwgPzogIiArICgiIiArIChzZnNiMSAhPSBudWxsKSkgKyAiIDwvaDE+Iik7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoMT5Gcm9tIHNlc3Npb24gU0ZTQlsyXSBOT1QgTlVMTD8gOiAiICsgKCIiICsgKHNmc2IyICE9IG51bGwpKSArICIgPC9oMT4iKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoc2ZzYjEgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIEluaXRpYWxDb250ZXh0IGN0eCA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogCiAgICAgICAgICAgICAgICAgc2ZzYjEgPSAoU2ltcGxlU2Vzc2lvbkJlYW4pIGN0eC5sb29rdXAoImphdmE6Z2xvYmFsL1NGU0JEcml2ZXIvU2ltcGxlU2Vzc2lvbkJlYW4iKTsKICAgICAgICAgICAgICAgICBzZnNiMiA9IChTaW1wbGVTZXNzaW9uQmVhbikgY3R4Lmxvb2t1cCgiamF2YTpnbG9iYWwvU0ZTQkRyaXZlci9TaW1wbGVTZXNzaW9uQmVhbiIpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoMT5DcmVhdGVkIFNGU0JbMV06ICIgKyBzZnNiMS5hc1N0cmluZygpICsgIiA8L2gxPiIpOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aDE+Q3JlYXRlZCBTRlNCWzJdOiAiICsgc2ZzYjIuYXNTdHJpbmcoKSArICIgPC9oMT4iKTsKIApAQCAtMTA5LDEzICsxMDksMTMgQEAKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L2h0bWw+Iik7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBubUV4KSB7CiAgICAgICAgICAgICBubUV4LnByaW50U3RhY2tUcmFjZShvdXQpOwotICAgICAgICB9IGZpbmFsbHkgeyAKKyAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIG91dC5jbG9zZSgpOwogICAgICAgICB9Ci0gICAgfSAKKyAgICB9CiAKICAgICAvLyA8ZWRpdG9yLWZvbGQgZGVmYXVsdHN0YXRlPSJjb2xsYXBzZWQiIGRlc2M9Ikh0dHBTZXJ2bGV0IG1ldGhvZHMuIENsaWNrIG9uIHRoZSArIHNpZ24gb24gdGhlIGxlZnQgdG8gZWRpdCB0aGUgY29kZS4iPgotICAgIC8qKiAKKyAgICAvKioKICAgICAgKiBIYW5kbGVzIHRoZSBIVFRQIDxjb2RlPkdFVDwvY29kZT4gbWV0aG9kLgogICAgICAqIEBwYXJhbSByZXF1ZXN0IHNlcnZsZXQgcmVxdWVzdAogICAgICAqIEBwYXJhbSByZXNwb25zZSBzZXJ2bGV0IHJlc3BvbnNlCkBAIC0xMjYsOSArMTI2LDkgQEAKICAgICBwcm90ZWN0ZWQgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkKICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBwcm9jZXNzUmVxdWVzdChyZXF1ZXN0LCByZXNwb25zZSk7Ci0gICAgfSAKKyAgICB9CiAKLSAgICAvKiogCisgICAgLyoqCiAgICAgICogSGFuZGxlcyB0aGUgSFRUUCA8Y29kZT5QT1NUPC9jb2RlPiBtZXRob2QuCiAgICAgICogQHBhcmFtIHJlcXVlc3Qgc2VydmxldCByZXF1ZXN0CiAgICAgICogQHBhcmFtIHJlc3BvbnNlIHNlcnZsZXQgcmVzcG9uc2UKQEAgLTE0MSw3ICsxNDEsNyBAQAogICAgICAgICBwcm9jZXNzUmVxdWVzdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgLyoqIAorICAgIC8qKgogICAgICAqIFJldHVybnMgYSBzaG9ydCBkZXNjcmlwdGlvbiBvZiB0aGUgc2VydmxldC4KICAgICAgKiBAcmV0dXJuIGEgU3RyaW5nIGNvbnRhaW5pbmcgc2VydmxldCBkZXNjcmlwdGlvbgogICAgICAqLwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyLW1vZGlmaWVkLXNlc3Npb24vc3JjL21haW4vamF2YS9jb20vYWNtZS9IdHRwQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXItbW9kaWZpZWQtc2Vzc2lvbi9zcmMvbWFpbi9qYXZhL2NvbS9hY21lL0h0dHBDbGllbnQuamF2YQppbmRleCBiNjc2ODM1Li5mZWVkOTNmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXItbW9kaWZpZWQtc2Vzc2lvbi9zcmMvbWFpbi9qYXZhL2NvbS9hY21lL0h0dHBDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXItbW9kaWZpZWQtc2Vzc2lvbi9zcmMvbWFpbi9qYXZhL2NvbS9hY21lL0h0dHBDbGllbnQuamF2YQpAQCAtMTEzLDcgKzExMyw3IEBACiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRmFpbGVkICIgKyBpbmZvKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQpAQCAtMTMxLDcgKzEzMSw3IEBACiAgICAgICAgIH0KIAogICAgICAgICBpZiAodG1wU2Vzc1N0YXRlLmdldEpzZXNzaW9uQ29va2llKCkgPT0gbnVsbCkgewotICAgICAgICAgICAgdG1wU2Vzc1N0YXRlLnNldEpzZXNzaW9uQ29va2llKGNvb2tpZSk7ICAgIAorICAgICAgICAgICAgdG1wU2Vzc1N0YXRlLnNldEpzZXNzaW9uQ29va2llKGNvb2tpZSk7CiAgICAgICAgIH0KICAgICAgICAgaW50IGNvZGUgPSAoKEh0dHBVUkxDb25uZWN0aW9uKSB1YykuZ2V0UmVzcG9uc2VDb2RlKCk7CiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gdWMuZ2V0SW5wdXRTdHJlYW0oKTsKQEAgLTE5OCw3ICsxOTgsNyBAQAogICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIHByZXYuZ2V0SHR0cENvdW50ZXIoKSA8IGN1cnJlbnQuZ2V0SHR0cENvdW50ZXIoKTsKICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiBwcmV2LmdldEVqYjFDb3VudGVyKCkgPCBjdXJyZW50LmdldEVqYjFDb3VudGVyKCk7CiAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgcHJldi5nZXRFamIyQ291bnRlcigpIDwgY3VycmVudC5nZXRFamIyQ291bnRlcigpOwotICAgICAgICAgICAgCisKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci1tb2RpZmllZC1zZXNzaW9uL3NyYy90ZXN0L2phdmEvY29tL2FjbWUvQXBwVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyLW1vZGlmaWVkLXNlc3Npb24vc3JjL3Rlc3QvamF2YS9jb20vYWNtZS9BcHBUZXN0LmphdmEKaW5kZXggNTBhMTE4My4uYThhZmM2NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyLW1vZGlmaWVkLXNlc3Npb24vc3JjL3Rlc3QvamF2YS9jb20vYWNtZS9BcHBUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyLW1vZGlmaWVkLXNlc3Npb24vc3JjL3Rlc3QvamF2YS9jb20vYWNtZS9BcHBUZXN0LmphdmEKQEAgLTIzLDcgKzIzLDcgQEAKIC8qKgogICogVW5pdCB0ZXN0IGZvciBzaW1wbGUgQXBwLgogICovCi1wdWJsaWMgY2xhc3MgQXBwVGVzdCAKK3B1YmxpYyBjbGFzcyBBcHBUZXN0CiAgICAgZXh0ZW5kcyBUZXN0Q2FzZQogewogICAgIC8qKgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyL1NGU0JEcml2ZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyL1NGU0JEcml2ZXIvYnVpbGQueG1sCmluZGV4IGY1Nzk1NTkuLjc3ZDY5MGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci9TRlNCRHJpdmVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXIvU0ZTQkRyaXZlci9idWlsZC54bWwKQEAgLTMwLDI3ICszMCwyNyBAQAogICAgIDxpbXBvcnQgZmlsZT0ibmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIi8+CiAgICAgPCEtLQogCi0gICAgVGhlcmUgZXhpc3Qgc2V2ZXJhbCB0YXJnZXRzIHdoaWNoIGFyZSBieSBkZWZhdWx0IGVtcHR5IGFuZCB3aGljaCBjYW4gYmUgCi0gICAgdXNlZCBmb3IgZXhlY3V0aW9uIG9mIHlvdXIgdGFza3MuIFRoZXNlIHRhcmdldHMgYXJlIHVzdWFsbHkgZXhlY3V0ZWQgCi0gICAgYmVmb3JlIGFuZCBhZnRlciBzb21lIG1haW4gdGFyZ2V0cy4gVGhleSBhcmU6IAorICAgIFRoZXJlIGV4aXN0IHNldmVyYWwgdGFyZ2V0cyB3aGljaCBhcmUgYnkgZGVmYXVsdCBlbXB0eSBhbmQgd2hpY2ggY2FuIGJlCisgICAgdXNlZCBmb3IgZXhlY3V0aW9uIG9mIHlvdXIgdGFza3MuIFRoZXNlIHRhcmdldHMgYXJlIHVzdWFsbHkgZXhlY3V0ZWQKKyAgICBiZWZvcmUgYW5kIGFmdGVyIHNvbWUgbWFpbiB0YXJnZXRzLiBUaGV5IGFyZToKIAotICAgICAgLXByZS1pbml0OiAgICAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBpbml0aWFsaXphdGlvbiBvZiBwcm9qZWN0IHByb3BlcnRpZXMgCi0gICAgICAtcG9zdC1pbml0OiAgICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgaW5pdGlhbGl6YXRpb24gb2YgcHJvamVjdCBwcm9wZXJ0aWVzIAotICAgICAgLXByZS1jb21waWxlOiAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBqYXZhYyBjb21waWxhdGlvbiAKLSAgICAgIC1wb3N0LWNvbXBpbGU6ICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBqYXZhYyBjb21waWxhdGlvbiAKKyAgICAgIC1wcmUtaW5pdDogICAgICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgaW5pdGlhbGl6YXRpb24gb2YgcHJvamVjdCBwcm9wZXJ0aWVzCisgICAgICAtcG9zdC1pbml0OiAgICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgaW5pdGlhbGl6YXRpb24gb2YgcHJvamVjdCBwcm9wZXJ0aWVzCisgICAgICAtcHJlLWNvbXBpbGU6ICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGphdmFjIGNvbXBpbGF0aW9uCisgICAgICAtcG9zdC1jb21waWxlOiAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgamF2YWMgY29tcGlsYXRpb24KICAgICAgIC1wcmUtY29tcGlsZS1zaW5nbGU6ICAgICAgIGNhbGxlZCBiZWZvcmUgamF2YWMgY29tcGlsYXRpb24gb2Ygc2luZ2xlIGZpbGUKICAgICAgIC1wb3N0LWNvbXBpbGUtc2luZ2xlOiAgICAgIGNhbGxlZCBhZnRlciBqYXZhYyBjb21waWxhdGlvbiBvZiBzaW5nbGUgZmlsZQogICAgICAgLXByZS1jb21waWxlLXRlc3Q6ICAgICAgICAgY2FsbGVkIGJlZm9yZSBqYXZhYyBjb21waWxhdGlvbiBvZiBKVW5pdCB0ZXN0cwogICAgICAgLXBvc3QtY29tcGlsZS10ZXN0OiAgICAgICAgY2FsbGVkIGFmdGVyIGphdmFjIGNvbXBpbGF0aW9uIG9mIEpVbml0IHRlc3RzCiAgICAgICAtcHJlLWNvbXBpbGUtdGVzdC1zaW5nbGU6ICBjYWxsZWQgYmVmb3JlIGphdmFjIGNvbXBpbGF0aW9uIG9mIHNpbmdsZSBKVW5pdCB0ZXN0CiAgICAgICAtcG9zdC1jb21waWxlLXRlc3Qtc2luZ2xlOiBjYWxsZWQgYWZ0ZXIgamF2YWMgY29tcGlsYXRpb24gb2Ygc2luZ2xlIEpVdW5pdCB0ZXN0Ci0gICAgICAtcHJlLWRpc3Q6ICAgICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGFyY2hpdmUgYnVpbGRpbmcgCi0gICAgICAtcG9zdC1kaXN0OiAgICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgYXJjaGl2ZSBidWlsZGluZyAKLSAgICAgIC1wb3N0LWNsZWFuOiAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBjbGVhbmluZyBidWlsZCBwcm9kdWN0cyAKKyAgICAgIC1wcmUtZGlzdDogICAgICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgYXJjaGl2ZSBidWlsZGluZworICAgICAgLXBvc3QtZGlzdDogICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGFyY2hpdmUgYnVpbGRpbmcKKyAgICAgIC1wb3N0LWNsZWFuOiAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBjbGVhbmluZyBidWlsZCBwcm9kdWN0cwogICAgICAgLXByZS1ydW4tZGVwbG95OiAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBkZXBsb3lpbmcKICAgICAgIC1wb3N0LXJ1bi1kZXBsb3k6ICAgICAgICAgIGNhbGxlZCBhZnRlciBkZXBsb3lpbmcKIAotICAgIEV4YW1wbGUgb2YgcGx1Z2luZyBhbiBvYmZ1c2NhdG9yIGFmdGVyIHRoZSBjb21waWxhdGlvbiBjb3VsZCBsb29rIGxpa2UgCisgICAgRXhhbXBsZSBvZiBwbHVnaW5nIGFuIG9iZnVzY2F0b3IgYWZ0ZXIgdGhlIGNvbXBpbGF0aW9uIGNvdWxkIGxvb2sgbGlrZQogCiAgICAgICAgIDx0YXJnZXQgbmFtZT0iLXBvc3QtY29tcGlsZSI+CiAgICAgICAgICAgICA8b2JmdXNjYXRlPgpAQCAtNTgsMjEgKzU4LDIxIEBACiAgICAgICAgICAgICA8L29iZnVzY2F0ZT4KICAgICAgICAgPC90YXJnZXQ+CiAKLSAgICBGb3IgbGlzdCBvZiBhdmFpbGFibGUgcHJvcGVydGllcyBjaGVjayB0aGUgaW1wb3J0ZWQgCi0gICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuIAorICAgIEZvciBsaXN0IG9mIGF2YWlsYWJsZSBwcm9wZXJ0aWVzIGNoZWNrIHRoZSBpbXBvcnRlZAorICAgIG5icHJvamVjdC9idWlsZC1pbXBsLnhtbCBmaWxlLgogCiAKICAgICBPdGhlciB3YXkgaG93IHRvIGN1c3RvbWl6ZSB0aGUgYnVpbGQgaXMgYnkgb3ZlcnJpZGluZyBleGlzdGluZyBtYWluIHRhcmdldHMuCi0gICAgVGhlIHRhcmdldCBvZiBpbnRlcmVzdCBhcmU6IAorICAgIFRoZSB0YXJnZXQgb2YgaW50ZXJlc3QgYXJlOgogCiAgICAgICBpbml0LW1hY3JvZGVmLWphdmFjOiAgICBkZWZpbmVzIG1hY3JvIGZvciBqYXZhYyBjb21waWxhdGlvbgogICAgICAgaW5pdC1tYWNyb2RlZi1qdW5pdDogICBkZWZpbmVzIG1hY3JvIGZvciBqdW5pdCBleGVjdXRpb24KICAgICAgIGluaXQtbWFjcm9kZWYtZGVidWc6ICAgIGRlZmluZXMgbWFjcm8gZm9yIGNsYXNzIGRlYnVnZ2luZwogICAgICAgZG8tZGlzdDogICAgICAgICAgICAgICAgYXJjaGl2ZSBidWlsZGluZwotICAgICAgcnVuOiAgICAgICAgICAgICAgICAgICAgZXhlY3V0aW9uIG9mIHByb2plY3QgCi0gICAgICBqYXZhZG9jLWJ1aWxkOiAgICAgICAgICBqYXZhZG9jIGdlbmVyYXRpb24gCisgICAgICBydW46ICAgICAgICAgICAgICAgICAgICBleGVjdXRpb24gb2YgcHJvamVjdAorICAgICAgamF2YWRvYy1idWlsZDogICAgICAgICAgamF2YWRvYyBnZW5lcmF0aW9uCiAKLSAgICBFeGFtcGxlIG9mIG92ZXJyaWRpbmcgdGhlIHRhcmdldCBmb3IgcHJvamVjdCBleGVjdXRpb24gY291bGQgbG9vayBsaWtlIAorICAgIEV4YW1wbGUgb2Ygb3ZlcnJpZGluZyB0aGUgdGFyZ2V0IGZvciBwcm9qZWN0IGV4ZWN1dGlvbiBjb3VsZCBsb29rIGxpa2UKIAogICAgICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iPFBST0pOQU1FPi1pbXBsLmphciI+CiAgICAgICAgICAgICA8ZXhlYyBkaXI9ImJpbiIgZXhlY3V0YWJsZT0ibGF1bmNoZXIuZXhlIj4KQEAgLTgwLDEwICs4MCwxMCBAQAogICAgICAgICAgICAgPC9leGVjPgogICAgICAgICA8L3RhcmdldD4KIAotICAgIE5vdGljZSB0aGF0IG92ZXJyaWRkZW4gdGFyZ2V0IGRlcGVuZHMgb24gamFyIHRhcmdldCBhbmQgbm90IG9ubHkgb24gCi0gICAgY29tcGlsZSB0YXJnZXQgYXMgcmVndWxhciBydW4gdGFyZ2V0IGRvZXMuIEFnYWluLCBmb3IgbGlzdCBvZiBhdmFpbGFibGUgCi0gICAgcHJvcGVydGllcyB3aGljaCB5b3UgY2FuIHVzZSBjaGVjayB0aGUgdGFyZ2V0IHlvdSBhcmUgb3ZlcnJpZGluZyBpbiAKLSAgICBuYnByb2plY3QvYnVpbGQtaW1wbC54bWwgZmlsZS4gCisgICAgTm90aWNlIHRoYXQgb3ZlcnJpZGRlbiB0YXJnZXQgZGVwZW5kcyBvbiBqYXIgdGFyZ2V0IGFuZCBub3Qgb25seSBvbgorICAgIGNvbXBpbGUgdGFyZ2V0IGFzIHJlZ3VsYXIgcnVuIHRhcmdldCBkb2VzLiBBZ2FpbiwgZm9yIGxpc3Qgb2YgYXZhaWxhYmxlCisgICAgcHJvcGVydGllcyB3aGljaCB5b3UgY2FuIHVzZSBjaGVjayB0aGUgdGFyZ2V0IHlvdSBhcmUgb3ZlcnJpZGluZyBpbgorICAgIG5icHJvamVjdC9idWlsZC1pbXBsLnhtbCBmaWxlLgogCiAgICAgLS0+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXIvU0ZTQkRyaXZlci9uYnByb2plY3QvYW50LWRlcGxveS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXIvU0ZTQkRyaXZlci9uYnByb2plY3QvYW50LWRlcGxveS54bWwKaW5kZXggZjdiNTUxMi4uMGQ0YmZhMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyL1NGU0JEcml2ZXIvbmJwcm9qZWN0L2FudC1kZXBsb3kueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci9TRlNCRHJpdmVyL25icHJvamVjdC9hbnQtZGVwbG95LnhtbApAQCAtMjUsNyArMjUsNyBAQAogICAgICAgICA8dGVtcGZpbGUgcHJlZml4PSJnZnYzIiBwcm9wZXJ0eT0iZ2Z2My5wYXNzd29yZC5maWxlIiBkZXN0ZGlyPSIke2phdmEuaW8udG1wZGlyfSIvPiAgPCEtLSBkbyBub3QgZm9yZ2V0IHRvIGRlbGV0ZSB0aGlzISAtLT4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iQVNfQURNSU5fUEFTU1dPUkQ9JHtnZnYzLnBhc3N3b3JkfSIgZmlsZT0iJHtnZnYzLnBhc3N3b3JkLmZpbGV9Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9Ii1wYXJzZS1zdW4td2ViIiBkZXBlbmRzPSItaW5pdC1jbC1kZXBsb3ltZW50LWVudiIgaWY9InN1bi53ZWIucHJlc2VudCI+CiAgICAgICAgIDx0ZW1wZmlsZSBwcmVmaXg9ImdmdjMiIHByb3BlcnR5PSJ0ZW1wLnN1bi53ZWIiIGRlc3RkaXI9IiR7amF2YS5pby50bXBkaXJ9Ii8+CiAgICAgICAgIDxjb3B5IGZpbGU9IiR7ZGVwbG95LmFudC5kb2NiYXNlLmRpcn0vV0VCLUlORi9zdW4td2ViLnhtbCIgdG9maWxlPSIke3RlbXAuc3VuLndlYn0iLz4KQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgICAgIDxyZXBsYWNldmFsdWU+PCFbQ0RBVEFbLS0+IDxzdW4td2ViLWFwcF1dPjwvcmVwbGFjZXZhbHVlPgogICAgICAgICA8L3JlcGxhY2U+CiAgICAgICAgIDx4bWxwcm9wZXJ0eSBmaWxlPSIke3RlbXAuc3VuLndlYn0iIHZhbGlkYXRlPSJmYWxzZSI+Ci0gICAgICAgIDwveG1scHJvcGVydHk+ICAgIAorICAgICAgICA8L3htbHByb3BlcnR5PgogICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7dGVtcC5zdW4ud2VifSIvPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0iZGVwbG95LmFudC5jbGllbnQudXJsIiB2YWx1ZT0iJHtnZnYzLnVybH0ke3N1bi13ZWItYXBwLmNvbnRleHQtcm9vdH0iLz4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImRlcGxveS5jb250ZXh0LnJvb3QuYXJndW1lbnQiIHZhbHVlPSImYW1wO2NvbnRleHRyb290PSR7c3VuLXdlYi1hcHAuY29udGV4dC1yb290fSIvPgpAQCAtNzEsNyArNzEsNyBAQAogICAgICAgICA8cHJvcGVydHkgbmFtZT0iZnVsbC5kZXBsb3kuYW50LmFyY2hpdmUiIGxvY2F0aW9uPSIke2RlcGxveS5hbnQuYXJjaGl2ZX0iLz4KICAgICAgICAgPGdldCBzcmM9IiR7Z2Z2My5hZG1pbi51cmx9L19fYXNhZG1pbi9kZXBsb3k/cGF0aD0ke2Z1bGwuZGVwbG95LmFudC5hcmNoaXZlfSR7ZGVwbG95LmNvbnRleHQucm9vdC5hcmd1bWVudH0mYW1wO2ZvcmNlPXRydWUmYW1wO25hbWU9JHthbnQucHJvamVjdC5uYW1lfSIKICAgICAgICAgICAgIGRlc3Q9IiR7Z2Z2My5yZXN1bHRzLmZpbGV9Ii8+Ci0gICAgICAgIDxkZWxldGUgZmlsZT0iJHtnZnYzLnJlc3VsdHMuZmlsZX0iLz4gICAgCisgICAgICAgIDxkZWxldGUgZmlsZT0iJHtnZnYzLnJlc3VsdHMuZmlsZX0iLz4KICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IG5hbWU9Ii1kZXBsb3ktd2l0aC1wdyIgaWY9ImdmdjMucGFzc3dvcmQiPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJEZXBsb3lpbmcgJHtkZXBsb3kuYW50LmFyY2hpdmV9Ii8+CkBAIC05MSw3ICs5MSw3IEBACiAgICAgICAgIDx0ZW1wZmlsZSBwcmVmaXg9ImdmdjMiIHByb3BlcnR5PSJnZnYzLnJlc3VsdHMuZmlsZSIgZGVzdGRpcj0iJHtqYXZhLmlvLnRtcGRpcn0iLz4gIDwhLS0gZG8gbm90IGZvcmdldCB0byBkZWxldGUgdGhpcyEgLS0+CiAgICAgICAgIDxnZXQgc3JjPSIke2dmdjMuYWRtaW4udXJsfS9fX2FzYWRtaW4vdW5kZXBsb3k/bmFtZT0ke2FudC5wcm9qZWN0Lm5hbWV9IgogICAgICAgICAgICAgZGVzdD0iJHtnZnYzLnJlc3VsdHMuZmlsZX0iLz4KLSAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2dmdjMucmVzdWx0cy5maWxlfSIvPiAgICAKKyAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2dmdjMucmVzdWx0cy5maWxlfSIvPgogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgbmFtZT0iLXVuZGVwbG95LXdpdGgtcHciIGlmPSJnZnYzLnBhc3N3b3JkIj4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iVW5kZXBsb3lpbmcgJHtkZXBsb3kuYW50LmFyY2hpdmV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXIvU0ZTQkRyaXZlci9uYnByb2plY3QvYnVpbGQtaW1wbC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXIvU0ZTQkRyaXZlci9uYnByb2plY3QvYnVpbGQtaW1wbC54bWwKaW5kZXggMTNiMTgwMy4uMzkwNDllYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyL1NGU0JEcml2ZXIvbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci9TRlNCRHJpdmVyL25icHJvamVjdC9idWlsZC1pbXBsLnhtbApAQCAtNDc3LDkgKzQ3Nyw5IEBACiAgICAgPHRhcmdldCBuYW1lPSItaW5pdC10YXNrZGVmcyI+CiAgICAgICAgIDxmYWlsIHVubGVzcz0ibGlicy5Db3B5TGlicy5jbGFzc3BhdGgiPgogVGhlIGxpYnMuQ29weUxpYnMuY2xhc3NwYXRoIHByb3BlcnR5IGlzIG5vdCBzZXQgdXAuCi1UaGlzIHByb3BlcnR5IG11c3QgcG9pbnQgdG8gCitUaGlzIHByb3BlcnR5IG11c3QgcG9pbnQgdG8KIG9yZy1uZXRiZWFucy1tb2R1bGVzLWphdmEtajJzZXByb2plY3QtY29weWxpYnN0YXNrLmphciBmaWxlIHdoaWNoIGlzIHBhcnQKLW9mIE5ldEJlYW5zIElERSBpbnN0YWxsYXRpb24gYW5kIGlzIHVzdWFsbHkgbG9jYXRlZCBhdCAKK29mIE5ldEJlYW5zIElERSBpbnN0YWxsYXRpb24gYW5kIGlzIHVzdWFsbHkgbG9jYXRlZCBhdAogJmx0O25ldGJlYW5zX2luc3RhbGxhdGlvbiZndDsvamF2YSZsdDt2ZXJzaW9uJmd0Oy9hbnQvZXh0cmEgZm9sZGVyLgogRWl0aGVyIG9wZW4gdGhlIHByb2plY3QgaW4gdGhlIElERSBhbmQgbWFrZSBzdXJlIENvcHlMaWJzIGxpYnJhcnkKIGV4aXN0cyBvciBzZXR1cCB0aGUgcHJvcGVydHkgbWFudWFsbHkuIEZvciBleGFtcGxlIGxpa2UgdGhpczoKQEAgLTg1NSw3ICs4NTUsNyBAQAogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCxqYXZhZG9jLWJ1aWxkLGphdmFkb2MtYnJvd3NlIiBkZXNjcmlwdGlvbj0iQnVpbGQgSmF2YWRvYy4iIG5hbWU9ImphdmFkb2MiLz4KICAgICA8IS0tCi0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBKVU5JVCBDT01QSUxBVElPTiBTRUNUSU9OCiAgICAgICAgICAgICAtLT4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQsY29tcGlsZSIgaWY9ImhhdmUudGVzdHMiIG5hbWU9Ii1wcmUtcHJlLWNvbXBpbGUtdGVzdCI+CkBAIC04OTQsNyArODk0LDcgQEAKICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQsY29tcGlsZSwtcHJlLXByZS1jb21waWxlLXRlc3QsLXByZS1jb21waWxlLXRlc3Qtc2luZ2xlLC1kby1jb21waWxlLXRlc3Qtc2luZ2xlLC1wb3N0LWNvbXBpbGUtdGVzdC1zaW5nbGUiIG5hbWU9ImNvbXBpbGUtdGVzdC1zaW5nbGUiLz4KICAgICA8IS0tCi0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBKVU5JVCBFWEVDVVRJT04gU0VDVElPTgogICAgICAgICAgICAgLS0+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0IiBpZj0iaGF2ZS50ZXN0cyIgbmFtZT0iLXByZS10ZXN0LXJ1biI+CkBAIC05MjEsNyArOTIxLDcgQEAKICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IGRlcGVuZHM9ImluaXQsY29tcGlsZS10ZXN0LXNpbmdsZSwtcHJlLXRlc3QtcnVuLXNpbmdsZSwtZG8tdGVzdC1ydW4tc2luZ2xlLC1wb3N0LXRlc3QtcnVuLXNpbmdsZSIgZGVzY3JpcHRpb249IlJ1biBzaW5nbGUgdW5pdCB0ZXN0LiIgbmFtZT0idGVzdC1zaW5nbGUiLz4KICAgICA8IS0tCi0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBKVU5JVCBERUJVR0dJTkcgU0VDVElPTgogICAgICAgICAgICAgLS0+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0LGNvbXBpbGUtdGVzdCIgaWY9ImhhdmUudGVzdHMiIG5hbWU9Ii1kZWJ1Zy1zdGFydC1kZWJ1Z2dlZS10ZXN0Ij4KQEAgLTk0Nyw3ICs5NDcsNyBAQAogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgZGVwZW5kcz0iaW5pdCwtcHJlLWRlYnVnLWZpeCwtZG8tZGVidWctZml4LXRlc3QiIGlmPSJuZXRiZWFucy5ob21lIiBuYW1lPSJkZWJ1Zy1maXgtdGVzdCIvPgogICAgIDwhLS0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIENMRUFOVVAgU0VDVElPTgogICAgICAgICAgICAgLS0+CiAgICAgPHRhcmdldCBkZXBlbmRzPSJpbml0IiBpZj0ibm8uZGlzdC5lYXIuZGlyIiBuYW1lPSJkZXBzLWNsZWFuIiB1bmxlc3M9Im5vLmRlcHMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci9TRlNCRHJpdmVyL3NyYy9qYXZhL25ldC9tYXgvZWUvc2ZzYi9TRlNCRHJpdmVyU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyL1NGU0JEcml2ZXIvc3JjL2phdmEvbmV0L21heC9lZS9zZnNiL1NGU0JEcml2ZXJTZXJ2bGV0LmphdmEKaW5kZXggZjgxZjkzMy4uMzFiZTAxYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyL1NGU0JEcml2ZXIvc3JjL2phdmEvbmV0L21heC9lZS9zZnNiL1NGU0JEcml2ZXJTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyL1NGU0JEcml2ZXIvc3JjL2phdmEvbmV0L21heC9lZS9zZnNiL1NGU0JEcml2ZXJTZXJ2bGV0LmphdmEKQEAgLTM4LDggKzM4LDggQEAKICAqLwogcHVibGljIGNsYXNzIFNGU0JEcml2ZXJTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewogCi0gICAKLSAgICAvKiogCisKKyAgICAvKioKICAgICAgKiBQcm9jZXNzZXMgcmVxdWVzdHMgZm9yIGJvdGggSFRUUCA8Y29kZT5HRVQ8L2NvZGU+IGFuZCA8Y29kZT5QT1NUPC9jb2RlPiBtZXRob2RzLgogICAgICAqIEBwYXJhbSByZXF1ZXN0IHNlcnZsZXQgcmVxdWVzdAogICAgICAqIEBwYXJhbSByZXNwb25zZSBzZXJ2bGV0IHJlc3BvbnNlCkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGh0bWw+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGhlYWQ+Iik7Ci0gICAgICAgICAgICBvdXQucHJpbnRsbigiPHRpdGxlPlNlcnZsZXQgU0ZTQkRyaXZlclNlcnZsZXQ8L3RpdGxlPiIpOyAgCisgICAgICAgICAgICBvdXQucHJpbnRsbigiPHRpdGxlPlNlcnZsZXQgU0ZTQkRyaXZlclNlcnZsZXQ8L3RpdGxlPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvaGVhZD4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8Ym9keT4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aDE+U2VydmxldCBTRlNCRHJpdmVyU2VydmxldCBhdCAiICsgcmVxdWVzdC5nZXRDb250ZXh0UGF0aCAoKSArICI8L2gxPiIpOwpAQCAtNzUsMTMgKzc1LDEzIEBACiAKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGgxPkZyb20gc2Vzc2lvbiBTRlNCWzFdIE5PVCBOVUxMID86ICIgKyAoIiIgKyAoc2ZzYjEgIT0gbnVsbCkpICsgIiA8L2gxPiIpOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aDE+RnJvbSBzZXNzaW9uIFNGU0JbMl0gTk9UIE5VTEw/IDogIiArICgiIiArIChzZnNiMiAhPSBudWxsKSkgKyAiIDwvaDE+Iik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKHNmc2IxID09IG51bGwpIHsKICAgICAgICAgICAgICAgICBJbml0aWFsQ29udGV4dCBjdHggPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKIAogICAgICAgICAgICAgICAgIHNmc2IxID0gKFNpbXBsZVNlc3Npb25CZWFuKSBjdHgubG9va3VwKCJqYXZhOmdsb2JhbC9TRlNCRHJpdmVyL1NpbXBsZVNlc3Npb25CZWFuIik7CiAgICAgICAgICAgICAgICAgc2ZzYjIgPSAoU2ltcGxlU2Vzc2lvbkJlYW4pIGN0eC5sb29rdXAoImphdmE6Z2xvYmFsL1NGU0JEcml2ZXIvU2ltcGxlU2Vzc2lvbkJlYW4iKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aDE+Q3JlYXRlZCBTRlNCWzFdOiAiICsgc2ZzYjEuYXNTdHJpbmcoKSArICIgPC9oMT4iKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGgxPkNyZWF0ZWQgU0ZTQlsyXTogIiArIHNmc2IyLmFzU3RyaW5nKCkgKyAiIDwvaDE+Iik7CiAKQEAgLTEwOSwxMyArMTA5LDEzIEBACiAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9odG1sPiIpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gbm1FeCkgewogICAgICAgICAgICAgbm1FeC5wcmludFN0YWNrVHJhY2Uob3V0KTsKLSAgICAgICAgfSBmaW5hbGx5IHsgCisgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICBvdXQuY2xvc2UoKTsKICAgICAgICAgfQotICAgIH0gCisgICAgfQogCiAgICAgLy8gPGVkaXRvci1mb2xkIGRlZmF1bHRzdGF0ZT0iY29sbGFwc2VkIiBkZXNjPSJIdHRwU2VydmxldCBtZXRob2RzLiBDbGljayBvbiB0aGUgKyBzaWduIG9uIHRoZSBsZWZ0IHRvIGVkaXQgdGhlIGNvZGUuIj4KLSAgICAvKiogCisgICAgLyoqCiAgICAgICogSGFuZGxlcyB0aGUgSFRUUCA8Y29kZT5HRVQ8L2NvZGU+IG1ldGhvZC4KICAgICAgKiBAcGFyYW0gcmVxdWVzdCBzZXJ2bGV0IHJlcXVlc3QKICAgICAgKiBAcGFyYW0gcmVzcG9uc2Ugc2VydmxldCByZXNwb25zZQpAQCAtMTI2LDkgKzEyNiw5IEBACiAgICAgcHJvdGVjdGVkIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgcHJvY2Vzc1JlcXVlc3QocmVxdWVzdCwgcmVzcG9uc2UpOwotICAgIH0gCisgICAgfQogCi0gICAgLyoqIAorICAgIC8qKgogICAgICAqIEhhbmRsZXMgdGhlIEhUVFAgPGNvZGU+UE9TVDwvY29kZT4gbWV0aG9kLgogICAgICAqIEBwYXJhbSByZXF1ZXN0IHNlcnZsZXQgcmVxdWVzdAogICAgICAqIEBwYXJhbSByZXNwb25zZSBzZXJ2bGV0IHJlc3BvbnNlCkBAIC0xNDEsNyArMTQxLDcgQEAKICAgICAgICAgcHJvY2Vzc1JlcXVlc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIC8qKiAKKyAgICAvKioKICAgICAgKiBSZXR1cm5zIGEgc2hvcnQgZGVzY3JpcHRpb24gb2YgdGhlIHNlcnZsZXQuCiAgICAgICogQHJldHVybiBhIFN0cmluZyBjb250YWluaW5nIHNlcnZsZXQgZGVzY3JpcHRpb24KICAgICAgKi8KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci9zcmMvbWFpbi9qYXZhL2NvbS9hY21lL0h0dHBDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci9zcmMvbWFpbi9qYXZhL2NvbS9hY21lL0h0dHBDbGllbnQuamF2YQppbmRleCA2MmY0ZGZkLi42MDQwMTMzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXIvc3JjL21haW4vamF2YS9jb20vYWNtZS9IdHRwQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyL3NyYy9tYWluL2phdmEvY29tL2FjbWUvSHR0cENsaWVudC5qYXZhCkBAIC0xMTMsNyArMTEzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGYWlsZWQgIiArIGluZm8pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CkBAIC0xMzEsNyArMTMxLDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIGlmICh0bXBTZXNzU3RhdGUuZ2V0SnNlc3Npb25Db29raWUoKSA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0bXBTZXNzU3RhdGUuc2V0SnNlc3Npb25Db29raWUoY29va2llKTsgICAgCisgICAgICAgICAgICB0bXBTZXNzU3RhdGUuc2V0SnNlc3Npb25Db29raWUoY29va2llKTsKICAgICAgICAgfQogICAgICAgICBpbnQgY29kZSA9ICgoSHR0cFVSTENvbm5lY3Rpb24pIHVjKS5nZXRSZXNwb25zZUNvZGUoKTsKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSB1Yy5nZXRJbnB1dFN0cmVhbSgpOwpAQCAtMTk4LDcgKzE5OCw3IEBACiAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgcHJldi5nZXRIdHRwQ291bnRlcigpIDwgY3VycmVudC5nZXRIdHRwQ291bnRlcigpOwogICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIHByZXYuZ2V0RWpiMUNvdW50ZXIoKSA8IGN1cnJlbnQuZ2V0RWpiMUNvdW50ZXIoKTsKICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiBwcmV2LmdldEVqYjJDb3VudGVyKCkgPCBjdXJyZW50LmdldEVqYjJDb3VudGVyKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyL3NyYy90ZXN0L2phdmEvY29tL2FjbWUvQXBwVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL2NsdXN0ZXItdGVzdHMvc2ltcGxlLWZhaWxvdmVyL3NyYy90ZXN0L2phdmEvY29tL2FjbWUvQXBwVGVzdC5qYXZhCmluZGV4IGM0YjYwOGIuLjBjZjcyNTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9jbHVzdGVyLXRlc3RzL3NpbXBsZS1mYWlsb3Zlci9zcmMvdGVzdC9qYXZhL2NvbS9hY21lL0FwcFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvY2x1c3Rlci10ZXN0cy9zaW1wbGUtZmFpbG92ZXIvc3JjL3Rlc3QvamF2YS9jb20vYWNtZS9BcHBUZXN0LmphdmEKQEAgLTIzLDcgKzIzLDcgQEAKIC8qKgogICogVW5pdCB0ZXN0IGZvciBzaW1wbGUgQXBwLgogICovCi1wdWJsaWMgY2xhc3MgQXBwVGVzdCAKK3B1YmxpYyBjbGFzcyBBcHBUZXN0CiAgICAgZXh0ZW5kcyBUZXN0Q2FzZQogewogICAgIC8qKgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL3Nzb0ZhaWxvdmVyL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9zc29GYWlsb3Zlci9XZWJUZXN0LmphdmEKaW5kZXggYjEzNjE3ZC4uZGExNWIxMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL3Nzb0ZhaWxvdmVyL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvc3NvRmFpbG92ZXIvV2ViVGVzdC5qYXZhCkBAIC02NCw3ICs2NCw3IEBACiAgICAgICAgIHVzZXIgPSBhcmdzWzVdOwogICAgICAgICBwYXNzd29yZCA9IGFyZ3NbNl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgR2xhc3NGaXNoIElzc3VlIDE5MzMiKTsKQEAgLTE1Miw3ICsxNTIsNyBAQAogICAgICAgICAgICAgLy8gZm9sbG93IHRoZSByZWRpcmVjdAogICAgICAgICAgICAgaW50IGNBMSA9IGdvKHBvcnQxLCBuZXcgVVJMKHJlZGlyZWN0KS5nZXRQYXRoKCksICJBIik7CiAgICAgICAgICAgICBpbnQgY0IxID0gZ28ocG9ydDEsIGNvbnRleHRSb290UHJlZml4ICsgIi1iL2luZGV4LmpzcCIsICJCIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgLy8gc3RvcCBpbnN0MQogICAgICAgICAgICAgYXNhZG1pbigic3RvcC1sb2NhbC1pbnN0YW5jZSIsIGluc3RhbmNlbmFtZTEpOwogCkBAIC0yMDgsNyArMjA4LDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzYik7CiAKICAgICAgICAgICAgIG9zLndyaXRlKCJcblxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgICAgIGlzID0gc29jay5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICAgICAgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAKQEAgLTIzMSw3ICsyMzEsNyBAQAogICAgICAgICAgICAgY2xvc2Uob3MpOwogICAgICAgICAgICAgY2xvc2UoYnIpOwogICAgICAgICAgICAgY2xvc2UoaXMpOwotICAgICAgICB9IAorICAgICAgICB9CiAKICAgICAgICAgaWYgKGNvdW50ID09IC0xKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJGYWlsZWQgdG8gYWNjZXNzIGluZGV4LmpzcCIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL3Nzb0ZhaWxvdmVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvc3NvRmFpbG92ZXIvYnVpbGQucHJvcGVydGllcwppbmRleCBlYjg0NTFiLi40NjY3OWE1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvc3NvRmFpbG92ZXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvc3NvRmFpbG92ZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1oYS1zc28tZmFpbG92ZXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9zc29GYWlsb3Zlci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvc3NvRmFpbG92ZXIvYnVpbGQueG1sCmluZGV4IDNmNDNmZTUuLjc2OWM5NjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9zc29GYWlsb3Zlci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL3Nzb0ZhaWxvdmVyL2J1aWxkLnhtbApAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IldlYlRlc3QqLmNsYXNzIi8+CiAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00Nyw3ICs0Nyw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogCiAgICAgICAgIDxkZWxldGUgZmlsZT0iJHtiYXNlZGlyfS9kb2Nyb290L2luZGV4LmpzcCIvPgogICAgICAgICA8Y29weSBmaWxlPSIke2Jhc2VkaXJ9L2RvY3Jvb3QvaW5kZXguanNwLmEiIHRvZmlsZT0iJHtiYXNlZGlyfS9kb2Nyb290L2luZGV4LmpzcCIvPgpAQCAtNjgsNyArNjgsNyBAQAogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIApAQCAtMTE4LDcgKzExOCw3IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9Ii0tY2x1c3RlciAke2NsdXN0ZXIubmFtZX0gLS1zeXN0ZW1wcm9wZXJ0aWVzIEhUVFBfTElTVEVORVJfUE9SVD0ke2luc3RhbmNlLmh0dHAucG9ydH0gJHtpbnN0YW5jZS5uYW1lfSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHthcHBuYW1lfS1hIi8+CkBAIC0xNTcsNyArMTU3LDcgQEAKICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1biIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke2FwcG5hbWV9LWEiLz4KQEAgLTE2Nyw3ICsxNjcsNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke2FwcG5hbWV9LWIiLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZSIgdmFsdWU9IiR7Y2x1c3Rlci5uYW1lfSIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RvcmUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvc3NvRmFpbG92ZXIvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hhL3Nzb0ZhaWxvdmVyL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCBiYjVkNTE2Li40ODUxYzc0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGEvc3NvRmFpbG92ZXIvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oYS9zc29GYWlsb3Zlci9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTI2LDEyICsyNiwxMiBAQAogICA8ZGlzdHJpYnV0YWJsZS8+CiAgIDxzZWN1cml0eS1jb25zdHJhaW50PgogICAgIDx3ZWItcmVzb3VyY2UtY29sbGVjdGlvbj4KLQk8d2ViLXJlc291cmNlLW5hbWU+UHJvdGVjdGVkIEFyZWE8L3dlYi1yZXNvdXJjZS1uYW1lPgotCTx1cmwtcGF0dGVybj4vKjwvdXJsLXBhdHRlcm4+Ci0JPGh0dHAtbWV0aG9kPkRFTEVURTwvaHR0cC1tZXRob2Q+Ci0JPGh0dHAtbWV0aG9kPkdFVDwvaHR0cC1tZXRob2Q+Ci0JPGh0dHAtbWV0aG9kPlBPU1Q8L2h0dHAtbWV0aG9kPgotCTxodHRwLW1ldGhvZD5QVVQ8L2h0dHAtbWV0aG9kPgorICAgIDx3ZWItcmVzb3VyY2UtbmFtZT5Qcm90ZWN0ZWQgQXJlYTwvd2ViLXJlc291cmNlLW5hbWU+CisgICAgPHVybC1wYXR0ZXJuPi8qPC91cmwtcGF0dGVybj4KKyAgICA8aHR0cC1tZXRob2Q+REVMRVRFPC9odHRwLW1ldGhvZD4KKyAgICA8aHR0cC1tZXRob2Q+R0VUPC9odHRwLW1ldGhvZD4KKyAgICA8aHR0cC1tZXRob2Q+UE9TVDwvaHR0cC1tZXRob2Q+CisgICAgPGh0dHAtbWV0aG9kPlBVVDwvaHR0cC1tZXRob2Q+CiAgICAgPC93ZWItcmVzb3VyY2UtY29sbGVjdGlvbj4KIAogICAgIDxhdXRoLWNvbnN0cmFpbnQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGVhZGVyQnVmZmVyRnVsbC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGVhZGVyQnVmZmVyRnVsbC9XZWJUZXN0LmphdmEKaW5kZXggOWNhNTM5Zi4uMjEzMzEzOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hlYWRlckJ1ZmZlckZ1bGwvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oZWFkZXJCdWZmZXJGdWxsL1dlYlRlc3QuamF2YQpAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJoZWFkZXJCdWZmZXJTaXplIik7CkBAIC02Miw3ICs2Miw3IEBACiAgICAgICAgIG9zLndyaXRlKGdldC5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIkhvc3Q6IGxvY2FsaG9zdFxuIi5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJpcyA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKIApAQCAtODYsNiArODYsNiBAQAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9Ci0gICAgIAorCiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hlYWRlckJ1ZmZlckZ1bGwvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oZWFkZXJCdWZmZXJGdWxsL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMzA3ODBmNS4uYzU2NTc3ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hlYWRlckJ1ZmZlckZ1bGwvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGVhZGVyQnVmZmVyRnVsbC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWhlYWRlckJ1ZmZlckZ1bGwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oZWFkZXJCdWZmZXJGdWxsL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oZWFkZXJCdWZmZXJGdWxsL2J1aWxkLnhtbAppbmRleCA1YjQzZmIwLi5kM2FiYzEyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGVhZGVyQnVmZmVyRnVsbC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hlYWRlckJ1ZmZlckZ1bGwvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxNSArNDIsMTUgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTc0LDcgKzc0LDcgQEAKICAgICAgICAgICAgICAgICB2YWx1ZT0iY29uZmlncy5jb25maWcuc2VydmVyLWNvbmZpZy5uZXR3b3JrLWNvbmZpZy5wcm90b2NvbHMucHJvdG9jb2wuaHR0cC1saXN0ZW5lci0xLmh0dHAubWF4LXJlc3BvbnNlLWhlYWRlcnM9MTAwIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgpAQCAtOTAsMTAgKzkwLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hlYWRlckJ1ZmZlclNpemUvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hlYWRlckJ1ZmZlclNpemUvV2ViVGVzdC5qYXZhCmluZGV4IGVkOWM1MTguLmVlYTk5NmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oZWFkZXJCdWZmZXJTaXplL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGVhZGVyQnVmZmVyU2l6ZS9XZWJUZXN0LmphdmEKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgICAgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfTkFNRSA9ICJoZWFkZXJCdWZmZXJTaXplIjsKIAotCS8vIFJlcXVlc3Qga2V5cworICAgIC8vIFJlcXVlc3Qga2V5cwogICAgIC8qKiBIYXNodGFibGUga2V5IGZvciBoZWFkZXJzIHByb3BlcnR5ICh0eXBlIG9mIGNvcnJlc3BvbmRpbmcgdmFsdWUgPSBIYXNodGFibGUpLiAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUlMgPSAiaGVhZGVycyI7CiAKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAvKiogSGFzaHRhYmxlIGtleSBmb3IgcmVxdWVzdCBwYXJhbWV0ZXJzIHByb3BlcnR5ICh0eXBlIG9mIGNvcnJlc3BvbmRpbmcgdmFsdWUgPSBIYXNodGFibGUpLiAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFUVVFU1RfUEFSQU1TID0gInJlcXVlc3RfcGFyYW1zIjsKIAotCS8vIFJlc3BvbnNlIGtleXMKKyAgICAvLyBSZXNwb25zZSBrZXlzCiAgICAgLyoqIEhhc2h0YWJsZSBrZXkgZm9yIHJlc3BvbnNlIGNvZGUgcHJvcGVydHkgKHR5cGUgb2YgY29ycmVzcG9uZGluZyB2YWx1ZSA9IEludGVnZXIpLiAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFU1BPTlNFX0NPREUgPSAicmVzcG9uc2VfY29kZSI7CiAKQEAgLTU2LDE4ICs1NiwxOCBAQAogICAgIC8qKiBIYXNodGFibGUga2V5IGZvciByZXNwb25zZSBjb250ZW50IHByb3BlcnR5ICh0eXBlIG9mIGNvcnJlc3BvbmRpbmcgdmFsdWUgPSBTdHJpbmcpLiAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFU1BPTlNFX0NPTlRFTlQgPSAicmVzcG9uc2VfY29udGVudCI7CiAKLQkvLyBSZXF1ZXN0IGFuZCByZXNwb25zZSBrZXlzCisgICAgLy8gUmVxdWVzdCBhbmQgcmVzcG9uc2Uga2V5cwogICAgIC8qKiBIYXNodGFibGUga2V5IGZvciBjb29raWVzIHByb3BlcnR5ICh0eXBlIG9mIGNvcnJlc3BvbmRpbmcgdmFsdWUgPSBTdHJpbmdbXSkuICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09PS0lFUyA9ICJjb29raWVzIjsKIAotCS8vIFZhbHVlcworICAgIC8vIFZhbHVlcwogICAgIC8qKiBHRVQgdmFsdWUgZm9yIHByb3BlcnR5IG1ldGhvZC4gKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBHRVRfTUVUSE9EID0gIkdFVCI7CiAKICAgICAvKiogUE9TVCB2YWx1ZSBmb3IgcHJvcGVydHkgbWV0aG9kLiAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBPU1RfTUVUSE9EID0gIlBPU1QiOwogCi0JLy8gRGVmYXVsdCB2YWx1ZXMKKyAgICAvLyBEZWZhdWx0IHZhbHVlcwogICAgIC8qKiBEZWZhdWx0IHZhbHVlIGZvciBwcm9wZXJ0eSBtZXRob2QuICovCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfTUVUSE9EID0gR0VUX01FVEhPRDsKIApAQCAtNzcsNyArNzcsNyBAQAogICAgIC8qKiBEZWZhdWx0IHZhbHVlIGZvciB1c2VyLWFnZW50IGhlYWRlci4gKi8KICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9DT05ORUNUSU9OX0hFQURFUiA9ICJjbG9zZSI7CiAKLQkvLyBTdGF0aWMgbWV0aG9kcworICAgIC8vIFN0YXRpYyBtZXRob2RzCiAKICAgICAvKioKICAgICAgKiogTWFpbiBtZXRob2QgZm9yIHRlc3RpbmcgcHVycG9zZXMuCkBAIC04OSw2MiArODksNjIgQEAKICAgICAgICAgU3RyaW5nIGhvc3QgPSBhcmdzWzBdOwogICAgICAgICBTdHJpbmcgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIFN0cmluZyBjb250ZXh0Um9vdCA9IGFyZ3NbMl07Ci0gICAgICAgIAotICAgIAl0cnkgewotCSAgICAJU3RyaW5nW10gdGVzdFVybHMgPSBuZXcgU3RyaW5nWzFdOwotCSAgICAJdGVzdFVybHNbMF0gPSAiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdAorCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBTdHJpbmdbXSB0ZXN0VXJscyA9IG5ldyBTdHJpbmdbMV07CisgICAgICAgICAgICB0ZXN0VXJsc1swXSA9ICJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgKyAiL2pzcC90ZXN0LmpzcCI7Ci0JICAgIAlTdHJpbmdbXSBtZXRob2RzID0gbmV3IFN0cmluZ1syXTsKLQkgICAgCW1ldGhvZHNbMF0gPSAiR0VUIjsKLQkgICAgCW1ldGhvZHNbMV0gPSAiR0VUIjsKLQkgICAgCUhhc2h0YWJsZVtdIHBhcmFtc1RhYmxlcyA9IG5ldyBIYXNodGFibGVbNF07Ci0JICAgIAlIYXNodGFibGUgcGFyYW1zMSA9IG5ldyBIYXNodGFibGUoKTsKLQkgICAgCXBhcmFtczEucHV0KCJ0ZXN0IiwgIm9uIik7Ci0JICAgIAlwYXJhbXMxLnB1dCgibnVtX3RlbCIsICIwNjUyMTY0NjQiKTsKLQkgICAgCUhhc2h0YWJsZSBwYXJhbXMyID0gbmV3IEhhc2h0YWJsZSgpOwotCSAgICAJcGFyYW1zMi5wdXQoInRlc3QiLCAib24iKTsKLQkgICAgCXBhcmFtczIucHV0KCJudW1fdGVsIiwgIjA1Nzc3NDkwNTkiKTsKLQkgICAgCUhhc2h0YWJsZSBwYXJhbXMzID0gbmV3IEhhc2h0YWJsZSgpOwotCSAgICAJcGFyYW1zMy5wdXQoIm51bV90ZWwiLCAiMDY1MjM2MTQ1NiIpOwotCSAgICAJSGFzaHRhYmxlIHBhcmFtczQgPSBuZXcgSGFzaHRhYmxlKCk7Ci0JICAgIAlTdHJpbmdbXSBtdWx0aXBsZVBhcmFtID0gbmV3IFN0cmluZ1szXTsKLQkgICAgCW11bHRpcGxlUGFyYW1bMF0gPSAiMSI7Ci0JICAgIAltdWx0aXBsZVBhcmFtWzFdID0gIjIiOwotCSAgICAJbXVsdGlwbGVQYXJhbVsyXSA9ICIzIjsKLQkgICAgCXBhcmFtczQucHV0KCJhIiwgbXVsdGlwbGVQYXJhbSk7Ci0JICAgIAlwYXJhbXM0LnB1dCgiYiIsICIyIik7Ci0JICAgIAlwYXJhbXM0LnB1dCgiYyIsICIzIik7Ci0JICAgIAlwYXJhbXNUYWJsZXNbMF0gPSBwYXJhbXMxOwotCSAgICAJcGFyYW1zVGFibGVzWzFdID0gcGFyYW1zMjsKLQkgICAgCXBhcmFtc1RhYmxlc1syXSA9IHBhcmFtczM7Ci0JICAgIAlwYXJhbXNUYWJsZXNbM10gPSBwYXJhbXM0OwotCSAgICAJZm9yKGludCBpID0gMDsgaSA8IDE7IGkrKykgewotCSAgICAJCUhhc2h0YWJsZSByZXFQcm9wZXJ0aWVzID0gbmV3IEhhc2h0YWJsZSgpOwotCSAgICAJCXJlcVByb3BlcnRpZXMucHV0KE1FVEhPRCwgbWV0aG9kc1tpXSk7Ci0JICAgIAkJcmVxUHJvcGVydGllcy5wdXQoUkVRVUVTVF9QQVJBTVMsIHBhcmFtc1RhYmxlc1tpXSk7Ci0JICAgIAkJU3lzdGVtLm91dC5wcmludGxuKCJURVNUICIgKyAoaSArIDEpICsgIjogIiArIHRlc3RVcmxzW2ldICsgIiAoIiArIG1ldGhvZHNbaV0gKyAiKSIpOwotCSAgICAJCVN5c3RlbS5vdXQucHJpbnRsbigiUGFyYW1ldGVyczoiKTsKLQkJICAgICAgICBmb3IoRW51bWVyYXRpb24ga2V5cyA9IChwYXJhbXNUYWJsZXNbaV0pLmtleXMoKTsga2V5cy5oYXNNb3JlRWxlbWVudHMoKTsgKSB7Ci0JCSAgICAgICAgICAgIFN0cmluZyBwYXJhbU5hbWUgPSAoU3RyaW5nKSBrZXlzLm5leHRFbGVtZW50KCk7Ci0JCSAgICAgICAgICAgIE9iamVjdCBwYXJhbVZhbHVlcyA9IChwYXJhbXNUYWJsZXNbaV0pLmdldChwYXJhbU5hbWUpOwotCQkgICAgICAgICAgICBpZihwYXJhbVZhbHVlcyBpbnN0YW5jZW9mIFN0cmluZ1tdKSB7Ci0JCSAgICAgICAgICAgIAkvLyBNdWx0aXBsZSBwYXJhbWV0ZXIgdmFsdWVzCi0JCSAgICAgICAgICAgIAlTdHJpbmdbXSBwYXJhbVZhbHVlTGlzdCA9IChTdHJpbmdbXSkgcGFyYW1WYWx1ZXM7Ci0JCSAgICAgICAgICAgIAlmb3IoaW50IGogPSAwOyBqIDwgcGFyYW1WYWx1ZUxpc3QubGVuZ3RoOyBqKyspIHsKLQkJICAgICAgICAgICAgCQlTdHJpbmcgcGFyYW1WYWx1ZSA9IHBhcmFtVmFsdWVMaXN0W2pdOwotCQkJICAgICAgICAgICAgCWlmKGogPT0gMCkKLQkJCSAgICAgICAgICAgIAkJU3lzdGVtLm91dC5wcmludChwYXJhbU5hbWUgKyAiID0gIiArIHBhcmFtVmFsdWUpOwotCQkJICAgICAgICAgICAgCWVsc2UKLQkJCSAgICAgICAgICAgIAkJU3lzdGVtLm91dC5wcmludCgiLCAiICsgcGFyYW1WYWx1ZSk7Ci0JCQkgICAgICAgICAgICB9Ci0JCQkgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJICAgICAgICAgICAgfQotCQkgICAgICAgICAgICBlbHNlIHsKLQkJICAgICAgICAgICAgCS8vIFNpbmdsZSBwYXJhbWV0ZXIgdmFsdWUKLQkJICAgICAgICAgICAgCVN0cmluZyBwYXJhbVZhbHVlID0gKFN0cmluZykgcGFyYW1WYWx1ZXM7Ci0JCQkgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocGFyYW1OYW1lICsgIiA9ICIgKyBwYXJhbVZhbHVlKTsKLQkJICAgICAgICAgICAgfQotCQkgICAgICAgIH0KKyAgICAgICAgICAgIFN0cmluZ1tdIG1ldGhvZHMgPSBuZXcgU3RyaW5nWzJdOworICAgICAgICAgICAgbWV0aG9kc1swXSA9ICJHRVQiOworICAgICAgICAgICAgbWV0aG9kc1sxXSA9ICJHRVQiOworICAgICAgICAgICAgSGFzaHRhYmxlW10gcGFyYW1zVGFibGVzID0gbmV3IEhhc2h0YWJsZVs0XTsKKyAgICAgICAgICAgIEhhc2h0YWJsZSBwYXJhbXMxID0gbmV3IEhhc2h0YWJsZSgpOworICAgICAgICAgICAgcGFyYW1zMS5wdXQoInRlc3QiLCAib24iKTsKKyAgICAgICAgICAgIHBhcmFtczEucHV0KCJudW1fdGVsIiwgIjA2NTIxNjQ2NCIpOworICAgICAgICAgICAgSGFzaHRhYmxlIHBhcmFtczIgPSBuZXcgSGFzaHRhYmxlKCk7CisgICAgICAgICAgICBwYXJhbXMyLnB1dCgidGVzdCIsICJvbiIpOworICAgICAgICAgICAgcGFyYW1zMi5wdXQoIm51bV90ZWwiLCAiMDU3Nzc0OTA1OSIpOworICAgICAgICAgICAgSGFzaHRhYmxlIHBhcmFtczMgPSBuZXcgSGFzaHRhYmxlKCk7CisgICAgICAgICAgICBwYXJhbXMzLnB1dCgibnVtX3RlbCIsICIwNjUyMzYxNDU2Iik7CisgICAgICAgICAgICBIYXNodGFibGUgcGFyYW1zNCA9IG5ldyBIYXNodGFibGUoKTsKKyAgICAgICAgICAgIFN0cmluZ1tdIG11bHRpcGxlUGFyYW0gPSBuZXcgU3RyaW5nWzNdOworICAgICAgICAgICAgbXVsdGlwbGVQYXJhbVswXSA9ICIxIjsKKyAgICAgICAgICAgIG11bHRpcGxlUGFyYW1bMV0gPSAiMiI7CisgICAgICAgICAgICBtdWx0aXBsZVBhcmFtWzJdID0gIjMiOworICAgICAgICAgICAgcGFyYW1zNC5wdXQoImEiLCBtdWx0aXBsZVBhcmFtKTsKKyAgICAgICAgICAgIHBhcmFtczQucHV0KCJiIiwgIjIiKTsKKyAgICAgICAgICAgIHBhcmFtczQucHV0KCJjIiwgIjMiKTsKKyAgICAgICAgICAgIHBhcmFtc1RhYmxlc1swXSA9IHBhcmFtczE7CisgICAgICAgICAgICBwYXJhbXNUYWJsZXNbMV0gPSBwYXJhbXMyOworICAgICAgICAgICAgcGFyYW1zVGFibGVzWzJdID0gcGFyYW1zMzsKKyAgICAgICAgICAgIHBhcmFtc1RhYmxlc1szXSA9IHBhcmFtczQ7CisgICAgICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgMTsgaSsrKSB7CisgICAgICAgICAgICAgICAgSGFzaHRhYmxlIHJlcVByb3BlcnRpZXMgPSBuZXcgSGFzaHRhYmxlKCk7CisgICAgICAgICAgICAgICAgcmVxUHJvcGVydGllcy5wdXQoTUVUSE9ELCBtZXRob2RzW2ldKTsKKyAgICAgICAgICAgICAgICByZXFQcm9wZXJ0aWVzLnB1dChSRVFVRVNUX1BBUkFNUywgcGFyYW1zVGFibGVzW2ldKTsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRFU1QgIiArIChpICsgMSkgKyAiOiAiICsgdGVzdFVybHNbaV0gKyAiICgiICsgbWV0aG9kc1tpXSArICIpIik7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQYXJhbWV0ZXJzOiIpOworICAgICAgICAgICAgICAgIGZvcihFbnVtZXJhdGlvbiBrZXlzID0gKHBhcmFtc1RhYmxlc1tpXSkua2V5cygpOyBrZXlzLmhhc01vcmVFbGVtZW50cygpOyApIHsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHBhcmFtTmFtZSA9IChTdHJpbmcpIGtleXMubmV4dEVsZW1lbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgT2JqZWN0IHBhcmFtVmFsdWVzID0gKHBhcmFtc1RhYmxlc1tpXSkuZ2V0KHBhcmFtTmFtZSk7CisgICAgICAgICAgICAgICAgICAgIGlmKHBhcmFtVmFsdWVzIGluc3RhbmNlb2YgU3RyaW5nW10pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIE11bHRpcGxlIHBhcmFtZXRlciB2YWx1ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ1tdIHBhcmFtVmFsdWVMaXN0ID0gKFN0cmluZ1tdKSBwYXJhbVZhbHVlczsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpbnQgaiA9IDA7IGogPCBwYXJhbVZhbHVlTGlzdC5sZW5ndGg7IGorKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBwYXJhbVZhbHVlID0gcGFyYW1WYWx1ZUxpc3Rbal07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoaiA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KHBhcmFtTmFtZSArICIgPSAiICsgcGFyYW1WYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCIsICIgKyBwYXJhbVZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2luZ2xlIHBhcmFtZXRlciB2YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHBhcmFtVmFsdWUgPSAoU3RyaW5nKSBwYXJhbVZhbHVlczsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihwYXJhbU5hbWUgKyAiID0gIiArIHBhcmFtVmFsdWUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQogCiAKICAgICAgICAgICAgICAgICBTdHJpbmdbXSBjb29raWVMaXN0ID0gbmV3IFN0cmluZ1s5XTsKQEAgLTE4MCwzNSArMTgwLDM1IEBACiAKICAgICAgICAgICAgICAgICByZXFQcm9wZXJ0aWVzLnB1dChDT09LSUVTLCBjb29raWVMaXN0KTsKIAotCSAgICAJCUhhc2h0YWJsZSByZXN1bHQgPSBjYWxsKHRlc3RVcmxzW2ldLCByZXFQcm9wZXJ0aWVzKTsKLQkgICAgCQlTeXN0ZW0ub3V0LnByaW50bG4oIlJlc3VsdDoiKTsKLQkgICAgCQlTeXN0ZW0ub3V0LnByaW50bG4oICJSZXNwb25zZSBDb2RlID0gIiArICggKEludGVnZXIpIHJlc3VsdC5nZXQoUkVTUE9OU0VfQ09ERSkgKS50b1N0cmluZygpICk7Ci0JICAgIAkJU3lzdGVtLm91dC5wcmludGxuKCAiUmVzcG9uc2UgTWVzc2FnZSA9ICIgKyAoU3RyaW5nKSByZXN1bHQuZ2V0KFJFU1BPTlNFX01FU1NBR0UpICk7Ci0JICAgIAkJU3lzdGVtLm91dC5wcmludGxuKCJSZXNwb25zZSBDb250ZW50OiIpOwotCSAgICAJCVN5c3RlbS5vdXQucHJpbnRsbiggKFN0cmluZykgcmVzdWx0LmdldChSRVNQT05TRV9DT05URU5UKSApOwotCSAgICAJCVN0cmluZ1tdIHNldENvb2tpZXMgPSAoU3RyaW5nW10pIHJlc3VsdC5nZXQoQ09PS0lFUyk7Ci0JICAgIAkJaWYoIChzZXRDb29raWVzICE9IG51bGwpICYmIChzZXRDb29raWVzLmxlbmd0aCA+IDApICkgewotCSAgICAJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNvb2tpZXMgc2V0IGJ5IFNlcnZlcjoiKTsKLQkgICAgCQkJZm9yKGludCBqID0gMDsgaiA8IHNldENvb2tpZXMubGVuZ3RoOyBqKyspIHsKLQkgICAgCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQ29va2llICIgKyAoaiArIDEpICsgIiA9ICIgKyBzZXRDb29raWVzW2pdKTsKLQkgICAgCQkJfQotCSAgICAJCX0KLQkgICAgCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkgICAgCQlTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKLQkgICAgCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkgICAgCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKKyAgICAgICAgICAgICAgICBIYXNodGFibGUgcmVzdWx0ID0gY2FsbCh0ZXN0VXJsc1tpXSwgcmVxUHJvcGVydGllcyk7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXN1bHQ6Iik7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiUmVzcG9uc2UgQ29kZSA9ICIgKyAoIChJbnRlZ2VyKSByZXN1bHQuZ2V0KFJFU1BPTlNFX0NPREUpICkudG9TdHJpbmcoKSApOworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIlJlc3BvbnNlIE1lc3NhZ2UgPSAiICsgKFN0cmluZykgcmVzdWx0LmdldChSRVNQT05TRV9NRVNTQUdFKSApOworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzcG9uc2UgQ29udGVudDoiKTsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIChTdHJpbmcpIHJlc3VsdC5nZXQoUkVTUE9OU0VfQ09OVEVOVCkgKTsKKyAgICAgICAgICAgICAgICBTdHJpbmdbXSBzZXRDb29raWVzID0gKFN0cmluZ1tdKSByZXN1bHQuZ2V0KENPT0tJRVMpOworICAgICAgICAgICAgICAgIGlmKCAoc2V0Q29va2llcyAhPSBudWxsKSAmJiAoc2V0Q29va2llcy5sZW5ndGggPiAwKSApIHsKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb29raWVzIHNldCBieSBTZXJ2ZXI6Iik7CisgICAgICAgICAgICAgICAgICAgIGZvcihpbnQgaiA9IDA7IGogPCBzZXRDb29raWVzLmxlbmd0aDsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvb2tpZSAiICsgKGogKyAxKSArICIgPSAiICsgc2V0Q29va2llc1tqXSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCk7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCk7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCk7CiAKICAgICAgICAgICAgICAgICBpZiAoICgoSW50ZWdlcilyZXN1bHQuZ2V0KFJFU1BPTlNFX0NPREUpKSA9PSAyMDApewogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgIH0KLQkgICAgCX0KLQkgICAgfSBjYXRjaChFeGNlcHRpb24gZXhjKSB7Ci0JICAgIAlTeXN0ZW0uZXJyLnByaW50bG4oICJFeGNlcHRpb24gb2NjdXJyZWQ6ICIgKyBleGMuZ2V0TWVzc2FnZSgpICk7Ci0JICAgIAlleGMucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5lcnIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleGMpIHsKKyAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbiggIkV4Y2VwdGlvbiBvY2N1cnJlZDogIiArIGV4Yy5nZXRNZXNzYWdlKCkgKTsKKyAgICAgICAgICAgIGV4Yy5wcmludFN0YWNrVHJhY2UoU3lzdGVtLmVycik7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7Ci0JICAgIH0KKyAgICAgICAgfQogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgIH0KIApAQCAtMjUyLDMzICsyNTIsMzMgQEAKICAgICAgKiogQHRocm93cyBJT0V4Y2VwdGlvbiBpZiBhbiBJL08gZXhjZXB0aW9uIG9jY3VycyBkdXJpbmcgdGhlIEhUVFAgcmVxdWVzdAogICAgICAqKi8KICAgICBwdWJsaWMgc3RhdGljIEhhc2h0YWJsZSBjYWxsKFN0cmluZyB1cmwsIEhhc2h0YWJsZSByZXF1ZXN0UHJvcGVydGllcykKLSAgICAJCXRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJaWYodXJsID09IG51bGwpCi0JCQl0aHJvdyBuZXcgTWFsZm9ybWVkVVJMRXhjZXB0aW9uKCJVUkwgYWRkcmVzcyBjYW5ub3QgYmUgbnVsbCEiKTsKLQkJaWYocmVxdWVzdFByb3BlcnRpZXMgPT0gbnVsbCkKLQkJCXRocm93IG5ldyBNYWxmb3JtZWRVUkxFeGNlcHRpb24oIlVSTCByZXF1ZXN0IHByb3BlcnRpZXMgY2Fubm90IGJlIG51bGwhIik7Ci0JCS8vIGVsc2UKLQkJSGFzaHRhYmxlIGhlYWRlcnMgPSAoSGFzaHRhYmxlKSByZXF1ZXN0UHJvcGVydGllcy5nZXQoSEVBREVSUyk7Ci0JCWlmKGhlYWRlcnMgPT0gbnVsbCkKLQkJCWhlYWRlcnMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0JCWlmKCAoICggKFN0cmluZykgaGVhZGVycy5nZXQoIlVzZXItQWdlbnQiKSApID09IG51bGwgKSB8fCAoICggKFN0cmluZykgaGVhZGVycy5nZXQoIlVzZXItQWdlbnQiKSApLmVxdWFscygiIikgKSApCi0JCQloZWFkZXJzLnB1dCgiVXNlci1BZ2VudCIsIERFRkFVTFRfVVNFUl9BR0VOVF9IRUFERVIpOwotCQlpZiggKCAoIChTdHJpbmcpIGhlYWRlcnMuZ2V0KCJDb25uZWN0aW9uIikgKSA9PSBudWxsICkgfHwgKCAoIChTdHJpbmcpIGhlYWRlcnMuZ2V0KCJDb25uZWN0aW9uIikgKS5lcXVhbHMoIiIpICkgKQotCQkJaGVhZGVycy5wdXQoIkNvbm5lY3Rpb24iLCBERUZBVUxUX0NPTk5FQ1RJT05fSEVBREVSKTsKLQkJU3RyaW5nIG1ldGhvZCA9IChTdHJpbmcpIHJlcXVlc3RQcm9wZXJ0aWVzLmdldChNRVRIT0QpOwotCQlpZiggKG1ldGhvZCA9PSBudWxsKSB8fCAhKCBtZXRob2QuZXF1YWxzSWdub3JlQ2FzZShHRVRfTUVUSE9EKSB8fCBtZXRob2QuZXF1YWxzSWdub3JlQ2FzZShQT1NUX01FVEhPRCkgKSApCi0JCQltZXRob2QgPSBERUZBVUxUX01FVEhPRDsKLQkJSGFzaHRhYmxlIHJlcXVlc3RQYXJhbXMgPSAoSGFzaHRhYmxlKSByZXF1ZXN0UHJvcGVydGllcy5nZXQoUkVRVUVTVF9QQVJBTVMpOwotCQlpZihyZXF1ZXN0UGFyYW1zID09IG51bGwpCi0JCQlyZXF1ZXN0UGFyYW1zID0gbmV3IEhhc2h0YWJsZSgpOwotCQlTdHJpbmdbXSBjb29raWVzID0gKFN0cmluZ1tdKSByZXF1ZXN0UHJvcGVydGllcy5nZXQoQ09PS0lFUyk7Ci0JCWlmKGNvb2tpZXMgPT0gbnVsbCkKLQkJCWNvb2tpZXMgPSBuZXcgU3RyaW5nWzBdOwotCQlpZiggbWV0aG9kLmVxdWFsc0lnbm9yZUNhc2UoR0VUX01FVEhPRCkgKQotCQkJcmV0dXJuKCBkb0dldENhbGwodXJsLCBoZWFkZXJzLCBjb29raWVzLCByZXF1ZXN0UGFyYW1zKSApOwotCQllbHNlCi0JCQlyZXR1cm4oIGRvUG9zdENhbGwodXJsLCBoZWFkZXJzLCBjb29raWVzLCByZXF1ZXN0UGFyYW1zKSApOwotCX0KKyAgICAgICAgICAgIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKKyAgICAgICAgaWYodXJsID09IG51bGwpCisgICAgICAgICAgICB0aHJvdyBuZXcgTWFsZm9ybWVkVVJMRXhjZXB0aW9uKCJVUkwgYWRkcmVzcyBjYW5ub3QgYmUgbnVsbCEiKTsKKyAgICAgICAgaWYocmVxdWVzdFByb3BlcnRpZXMgPT0gbnVsbCkKKyAgICAgICAgICAgIHRocm93IG5ldyBNYWxmb3JtZWRVUkxFeGNlcHRpb24oIlVSTCByZXF1ZXN0IHByb3BlcnRpZXMgY2Fubm90IGJlIG51bGwhIik7CisgICAgICAgIC8vIGVsc2UKKyAgICAgICAgSGFzaHRhYmxlIGhlYWRlcnMgPSAoSGFzaHRhYmxlKSByZXF1ZXN0UHJvcGVydGllcy5nZXQoSEVBREVSUyk7CisgICAgICAgIGlmKGhlYWRlcnMgPT0gbnVsbCkKKyAgICAgICAgICAgIGhlYWRlcnMgPSBuZXcgSGFzaHRhYmxlKCk7CisgICAgICAgIGlmKCAoICggKFN0cmluZykgaGVhZGVycy5nZXQoIlVzZXItQWdlbnQiKSApID09IG51bGwgKSB8fCAoICggKFN0cmluZykgaGVhZGVycy5nZXQoIlVzZXItQWdlbnQiKSApLmVxdWFscygiIikgKSApCisgICAgICAgICAgICBoZWFkZXJzLnB1dCgiVXNlci1BZ2VudCIsIERFRkFVTFRfVVNFUl9BR0VOVF9IRUFERVIpOworICAgICAgICBpZiggKCAoIChTdHJpbmcpIGhlYWRlcnMuZ2V0KCJDb25uZWN0aW9uIikgKSA9PSBudWxsICkgfHwgKCAoIChTdHJpbmcpIGhlYWRlcnMuZ2V0KCJDb25uZWN0aW9uIikgKS5lcXVhbHMoIiIpICkgKQorICAgICAgICAgICAgaGVhZGVycy5wdXQoIkNvbm5lY3Rpb24iLCBERUZBVUxUX0NPTk5FQ1RJT05fSEVBREVSKTsKKyAgICAgICAgU3RyaW5nIG1ldGhvZCA9IChTdHJpbmcpIHJlcXVlc3RQcm9wZXJ0aWVzLmdldChNRVRIT0QpOworICAgICAgICBpZiggKG1ldGhvZCA9PSBudWxsKSB8fCAhKCBtZXRob2QuZXF1YWxzSWdub3JlQ2FzZShHRVRfTUVUSE9EKSB8fCBtZXRob2QuZXF1YWxzSWdub3JlQ2FzZShQT1NUX01FVEhPRCkgKSApCisgICAgICAgICAgICBtZXRob2QgPSBERUZBVUxUX01FVEhPRDsKKyAgICAgICAgSGFzaHRhYmxlIHJlcXVlc3RQYXJhbXMgPSAoSGFzaHRhYmxlKSByZXF1ZXN0UHJvcGVydGllcy5nZXQoUkVRVUVTVF9QQVJBTVMpOworICAgICAgICBpZihyZXF1ZXN0UGFyYW1zID09IG51bGwpCisgICAgICAgICAgICByZXF1ZXN0UGFyYW1zID0gbmV3IEhhc2h0YWJsZSgpOworICAgICAgICBTdHJpbmdbXSBjb29raWVzID0gKFN0cmluZ1tdKSByZXF1ZXN0UHJvcGVydGllcy5nZXQoQ09PS0lFUyk7CisgICAgICAgIGlmKGNvb2tpZXMgPT0gbnVsbCkKKyAgICAgICAgICAgIGNvb2tpZXMgPSBuZXcgU3RyaW5nWzBdOworICAgICAgICBpZiggbWV0aG9kLmVxdWFsc0lnbm9yZUNhc2UoR0VUX01FVEhPRCkgKQorICAgICAgICAgICAgcmV0dXJuKCBkb0dldENhbGwodXJsLCBoZWFkZXJzLCBjb29raWVzLCByZXF1ZXN0UGFyYW1zKSApOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4oIGRvUG9zdENhbGwodXJsLCBoZWFkZXJzLCBjb29raWVzLCByZXF1ZXN0UGFyYW1zKSApOworICAgIH0KIAogICAgIC8qKgogICAgICAqKiBTdGF0aWMgcHJvdGVjdGVkIG1ldGhvZCBmb3IgcGVyZm9ybWluZyBHRVQgSFRUUCByZXF1ZXN0IHRvIHRoZSBzcGVjaWZpZWQgVVJMLjxicj4KQEAgLTI5Myw3ICsyOTMsNyBAQAogICAgICAqKiBAdGhyb3dzIElPRXhjZXB0aW9uIGlmIGFuIEkvTyBleGNlcHRpb24gb2NjdXJzIGR1cmluZyB0aGUgSFRUUCByZXF1ZXN0CiAgICAgICoqLwogICAgIHByb3RlY3RlZCBzdGF0aWMgSGFzaHRhYmxlIGRvR2V0Q2FsbChTdHJpbmcgdXJsLCBIYXNodGFibGUgaGVhZGVycywgU3RyaW5nW10gY29va2llcywgSGFzaHRhYmxlIHJlcXVlc3RQYXJhbXMpCi0JCQl0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CisgICAgICAgICAgICB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIC8vIFNldCBwYXJhbWV0ZXJzCiAKICAgICAgICAgU3RyaW5nQnVmZmVyIHF1ZXJ5U3RyaW5nID0gbmV3IFN0cmluZ0J1ZmZlcigpOwpAQCAtMzAxLDI1ICszMDEsMjUgQEAKICAgICAgICAgICAgIFN0cmluZyBwYXJhbU5hbWUgPSAoU3RyaW5nKSBrZXlzLm5leHRFbGVtZW50KCk7CiAgICAgICAgICAgICBPYmplY3QgcGFyYW1WYWx1ZXMgPSByZXF1ZXN0UGFyYW1zLmdldChwYXJhbU5hbWUpOwogICAgICAgICAgICAgaWYocGFyYW1WYWx1ZXMgaW5zdGFuY2VvZiBTdHJpbmdbXSkgewotICAgICAgICAgICAgCS8vIE11bHRpcGxlIHBhcmFtZXRlciB2YWx1ZXMKLSAgICAgICAgICAgIAlTdHJpbmdbXSBwYXJhbVZhbHVlTGlzdCA9IChTdHJpbmdbXSkgcGFyYW1WYWx1ZXM7Ci0gICAgICAgICAgICAJZm9yKGludCBpID0gMDsgaSA8IHBhcmFtVmFsdWVMaXN0Lmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAJCVN0cmluZyBwYXJhbVZhbHVlID0gcGFyYW1WYWx1ZUxpc3RbaV07Ci0JICAgICAgICAgICAgCWlmKHF1ZXJ5U3RyaW5nLmxlbmd0aCgpID09IDApCi0JICAgICAgICAgICAgCQlxdWVyeVN0cmluZy5hcHBlbmQoIj8iKTsKLQkgICAgICAgICAgICAJZWxzZQotCSAgICAgICAgICAgIAkJcXVlcnlTdHJpbmcuYXBwZW5kKCImIik7Ci0JICAgICAgICAgICAgCXF1ZXJ5U3RyaW5nLmFwcGVuZCggVVJMRW5jb2Rlci5lbmNvZGUocGFyYW1OYW1lLCJJU084ODU5LTEiKSArICI9IiArIFVSTEVuY29kZXIuZW5jb2RlKHBhcmFtVmFsdWUsIklTTzg4NTktMSIpICk7Ci0JICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIE11bHRpcGxlIHBhcmFtZXRlciB2YWx1ZXMKKyAgICAgICAgICAgICAgICBTdHJpbmdbXSBwYXJhbVZhbHVlTGlzdCA9IChTdHJpbmdbXSkgcGFyYW1WYWx1ZXM7CisgICAgICAgICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IHBhcmFtVmFsdWVMaXN0Lmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBwYXJhbVZhbHVlID0gcGFyYW1WYWx1ZUxpc3RbaV07CisgICAgICAgICAgICAgICAgICAgIGlmKHF1ZXJ5U3RyaW5nLmxlbmd0aCgpID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVN0cmluZy5hcHBlbmQoIj8iKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlTdHJpbmcuYXBwZW5kKCImIik7CisgICAgICAgICAgICAgICAgICAgIHF1ZXJ5U3RyaW5nLmFwcGVuZCggVVJMRW5jb2Rlci5lbmNvZGUocGFyYW1OYW1lLCJJU084ODU5LTEiKSArICI9IiArIFVSTEVuY29kZXIuZW5jb2RlKHBhcmFtVmFsdWUsIklTTzg4NTktMSIpICk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAJLy8gU2luZ2xlIHBhcmFtZXRlciB2YWx1ZQotICAgICAgICAgICAgCVN0cmluZyBwYXJhbVZhbHVlID0gKFN0cmluZykgcGFyYW1WYWx1ZXM7Ci0gICAgICAgICAgICAJaWYocXVlcnlTdHJpbmcubGVuZ3RoKCkgPT0gMCkKLSAgICAgICAgICAgIAkJcXVlcnlTdHJpbmcuYXBwZW5kKCI/Iik7Ci0gICAgICAgICAgICAJZWxzZQotICAgICAgICAgICAgCQlxdWVyeVN0cmluZy5hcHBlbmQoIiYiKTsKLSAgICAgICAgICAgIAlxdWVyeVN0cmluZy5hcHBlbmQoIFVSTEVuY29kZXIuZW5jb2RlKHBhcmFtTmFtZSwiSVNPODg1OS0xIikgKyAiPSIgKyBVUkxFbmNvZGVyLmVuY29kZShwYXJhbVZhbHVlLCJJU084ODU5LTEiKSApOworICAgICAgICAgICAgICAgIC8vIFNpbmdsZSBwYXJhbWV0ZXIgdmFsdWUKKyAgICAgICAgICAgICAgICBTdHJpbmcgcGFyYW1WYWx1ZSA9IChTdHJpbmcpIHBhcmFtVmFsdWVzOworICAgICAgICAgICAgICAgIGlmKHF1ZXJ5U3RyaW5nLmxlbmd0aCgpID09IDApCisgICAgICAgICAgICAgICAgICAgIHF1ZXJ5U3RyaW5nLmFwcGVuZCgiPyIpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcXVlcnlTdHJpbmcuYXBwZW5kKCImIik7CisgICAgICAgICAgICAgICAgcXVlcnlTdHJpbmcuYXBwZW5kKCBVUkxFbmNvZGVyLmVuY29kZShwYXJhbU5hbWUsIklTTzg4NTktMSIpICsgIj0iICsgVVJMRW5jb2Rlci5lbmNvZGUocGFyYW1WYWx1ZSwiSVNPODg1OS0xIikgKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBVUkwgdXJsVG9DYWxsID0gbmV3IFVSTCggdXJsICsgcXVlcnlTdHJpbmcudG9TdHJpbmcoKSApOwpAQCAtMzMyLDE2ICszMzIsMTYgQEAKICAgICAgICAgICAgIFN0cmluZyBoZWFkZXJOYW1lID0gKFN0cmluZykga2V5cy5uZXh0RWxlbWVudCgpOwogICAgICAgICAgICAgU3RyaW5nIGhlYWRlclZhbHVlID0gKFN0cmluZykgaGVhZGVycy5nZXQoaGVhZGVyTmFtZSk7CiAgICAgICAgICAgICBpZiggaGVhZGVyTmFtZS5lcXVhbHNJZ25vcmVDYXNlKCJDb29raWUiKSApCi0gICAgICAgICAgICAJY29va2llc0xpc3QuYXBwZW5kKGhlYWRlclZhbHVlKTsKKyAgICAgICAgICAgICAgICBjb29raWVzTGlzdC5hcHBlbmQoaGVhZGVyVmFsdWUpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAJCXVybENvbm5lY3Rpb24uc2V0UmVxdWVzdFByb3BlcnR5KGhlYWRlck5hbWUsIGhlYWRlclZhbHVlKTsKKyAgICAgICAgICAgICAgICB1cmxDb25uZWN0aW9uLnNldFJlcXVlc3RQcm9wZXJ0eShoZWFkZXJOYW1lLCBoZWFkZXJWYWx1ZSk7CiAgICAgICAgIH0KICAgICAgICAgLy8gU2V0IGNvb2tpZXMKICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IGNvb2tpZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgCWlmKGNvb2tpZXNMaXN0Lmxlbmd0aCgpID4gMCkKLSAgICAgICAgCQljb29raWVzTGlzdC5hcHBlbmQoIiwiICsgY29va2llc1tpXSk7Ci0gICAgICAgIAllbHNlCi0gICAgICAgIAkJY29va2llc0xpc3QuYXBwZW5kKGNvb2tpZXNbaV0pOworICAgICAgICAgICAgaWYoY29va2llc0xpc3QubGVuZ3RoKCkgPiAwKQorICAgICAgICAgICAgICAgIGNvb2tpZXNMaXN0LmFwcGVuZCgiLCIgKyBjb29raWVzW2ldKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjb29raWVzTGlzdC5hcHBlbmQoY29va2llc1tpXSk7CiAgICAgICAgIH0KICAgICAgICAgdXJsQ29ubmVjdGlvbi5zZXRSZXF1ZXN0UHJvcGVydHkoICJDb29raWUiLCBjb29raWVzTGlzdC50b1N0cmluZygpICk7CiAgICAgICAgIC8vIFNldHRpbmcgR0VUIG1ldGhvZApAQCAtMzY1LDIxICszNjUsMjEgQEAKICAgICAgICAgLy8gR2V0IHJlc3BvbnNlIG1lc3NhZ2UKICAgICAgICAgU3RyaW5nIHJlc3BvbnNlTWVzc2FnZSA9IHVybENvbm5lY3Rpb24uZ2V0UmVzcG9uc2VNZXNzYWdlKCk7CiAgICAgICAgIGlmKHJlc3BvbnNlTWVzc2FnZSAhPSBudWxsKQotICAgICAgICAJcmVzdWx0LnB1dChSRVNQT05TRV9NRVNTQUdFLCByZXNwb25zZU1lc3NhZ2UpOworICAgICAgICAgICAgcmVzdWx0LnB1dChSRVNQT05TRV9NRVNTQUdFLCByZXNwb25zZU1lc3NhZ2UpOwogICAgICAgICAvLyBSZWNlaXZlIGNvb2tpZXMKICAgICAgICAgU3RyaW5nIHJldHVybmVkQ29va2llc1N0ciA9IHVybENvbm5lY3Rpb24uZ2V0SGVhZGVyRmllbGQoIlNldC1Db29raWUiKTsKICAgICAgICAgaWYocmV0dXJuZWRDb29raWVzU3RyICE9IG51bGwpIHsKLSAgICAgICAgCVN0cmluZ1Rva2VuaXplciBjb21tYVRva2VuaXplciA9IG5ldyBTdHJpbmdUb2tlbml6ZXIocmV0dXJuZWRDb29raWVzU3RyLCAiLCIsIGZhbHNlKTsKLSAgICAgICAgCWludCB0b2tlbnMgPSBjb21tYVRva2VuaXplci5jb3VudFRva2VucygpOwotICAgICAgICAJaWYodG9rZW5zID4gMCkgewotCSAgICAgICAgCVN0cmluZ1tdIHJldHVybmVkQ29va2llcyA9IG5ldyBTdHJpbmdbdG9rZW5zXTsKLQkgICAgICAgIAlpbnQgeiA9IDA7Ci0JICAgICAgICAJd2hpbGUoIGNvbW1hVG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSApIHsKLQkgICAgICAgIAkJcmV0dXJuZWRDb29raWVzW3pdID0gY29tbWFUb2tlbml6ZXIubmV4dFRva2VuKCk7Ci0JICAgICAgICAJCXorKzsKLQkJCQl9Ci0JICAgICAgICAJcmVzdWx0LnB1dChDT09LSUVTLCByZXR1cm5lZENvb2tpZXMpOwotCSAgICAgICAgfQorICAgICAgICAgICAgU3RyaW5nVG9rZW5pemVyIGNvbW1hVG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcihyZXR1cm5lZENvb2tpZXNTdHIsICIsIiwgZmFsc2UpOworICAgICAgICAgICAgaW50IHRva2VucyA9IGNvbW1hVG9rZW5pemVyLmNvdW50VG9rZW5zKCk7CisgICAgICAgICAgICBpZih0b2tlbnMgPiAwKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nW10gcmV0dXJuZWRDb29raWVzID0gbmV3IFN0cmluZ1t0b2tlbnNdOworICAgICAgICAgICAgICAgIGludCB6ID0gMDsKKyAgICAgICAgICAgICAgICB3aGlsZSggY29tbWFUb2tlbml6ZXIuaGFzTW9yZVRva2VucygpICkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm5lZENvb2tpZXNbel0gPSBjb21tYVRva2VuaXplci5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAgICAgICAgICAgeisrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXN1bHQucHV0KENPT0tJRVMsIHJldHVybmVkQ29va2llcyk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmVzcG9uc2VSZWFkZXIuY2xvc2UoKTsKICAgICAgICAgcmV0dXJuKHJlc3VsdCk7CkBAIC0zOTgsNyArMzk4LDcgQEAKICAgICAgKiogQHRocm93cyBJT0V4Y2VwdGlvbiBpZiBhbiBJL08gZXhjZXB0aW9uIG9jY3VycyBkdXJpbmcgdGhlIEhUVFAgcmVxdWVzdAogICAgICAqKi8KICAgICBwcm90ZWN0ZWQgc3RhdGljIEhhc2h0YWJsZSBkb1Bvc3RDYWxsKFN0cmluZyB1cmwsIEhhc2h0YWJsZSBoZWFkZXJzLCBTdHJpbmdbXSBjb29raWVzLCBIYXNodGFibGUgcmVxdWVzdFBhcmFtcykKLQkJCXRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgVVJMIHVybFRvQ2FsbCA9IG5ldyBVUkwodXJsKTsKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gdXJsQ29ubmVjdGlvbiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsVG9DYWxsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgIHVybENvbm5lY3Rpb24uc2V0SW5zdGFuY2VGb2xsb3dSZWRpcmVjdHModHJ1ZSk7CkBAIC00MDksMTYgKzQwOSwxNiBAQAogICAgICAgICAgICAgU3RyaW5nIGhlYWRlck5hbWUgPSAoU3RyaW5nKSBrZXlzLm5leHRFbGVtZW50KCk7CiAgICAgICAgICAgICBTdHJpbmcgaGVhZGVyVmFsdWUgPSAoU3RyaW5nKSBoZWFkZXJzLmdldChoZWFkZXJOYW1lKTsKICAgICAgICAgICAgIGlmKCBoZWFkZXJOYW1lLmVxdWFsc0lnbm9yZUNhc2UoIkNvb2tpZSIpICkKLSAgICAgICAgICAgIAljb29raWVzTGlzdC5hcHBlbmQoaGVhZGVyVmFsdWUpOworICAgICAgICAgICAgICAgIGNvb2tpZXNMaXN0LmFwcGVuZChoZWFkZXJWYWx1ZSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgIAkJdXJsQ29ubmVjdGlvbi5zZXRSZXF1ZXN0UHJvcGVydHkoaGVhZGVyTmFtZSwgaGVhZGVyVmFsdWUpOworICAgICAgICAgICAgICAgIHVybENvbm5lY3Rpb24uc2V0UmVxdWVzdFByb3BlcnR5KGhlYWRlck5hbWUsIGhlYWRlclZhbHVlKTsKICAgICAgICAgfQogICAgICAgICAvLyBTZXQgY29va2llcwogICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgY29va2llcy5sZW5ndGg7IGkrKykgewotICAgICAgICAJaWYoY29va2llc0xpc3QubGVuZ3RoKCkgPiAwKQotICAgICAgICAJCWNvb2tpZXNMaXN0LmFwcGVuZCgiLCIgKyBjb29raWVzW2ldKTsKLSAgICAgICAgCWVsc2UKLSAgICAgICAgCQljb29raWVzTGlzdC5hcHBlbmQoY29va2llc1tpXSk7CisgICAgICAgICAgICBpZihjb29raWVzTGlzdC5sZW5ndGgoKSA+IDApCisgICAgICAgICAgICAgICAgY29va2llc0xpc3QuYXBwZW5kKCIsIiArIGNvb2tpZXNbaV0pOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNvb2tpZXNMaXN0LmFwcGVuZChjb29raWVzW2ldKTsKICAgICAgICAgfQogICAgICAgICB1cmxDb25uZWN0aW9uLnNldFJlcXVlc3RQcm9wZXJ0eSggIkNvb2tpZSIsIGNvb2tpZXNMaXN0LnRvU3RyaW5nKCkgKTsKICAgICAgICAgLy8gU2V0dGluZyBQT1NUIG1ldGhvZApAQCAtNDMzLDI5ICs0MzMsMjkgQEAKICAgICAgICAgICAgIFN0cmluZyBwYXJhbU5hbWUgPSAoU3RyaW5nKSBrZXlzLm5leHRFbGVtZW50KCk7CiAgICAgICAgICAgICBPYmplY3QgcGFyYW1WYWx1ZXMgPSByZXF1ZXN0UGFyYW1zLmdldChwYXJhbU5hbWUpOwogICAgICAgICAgICAgaWYocGFyYW1WYWx1ZXMgaW5zdGFuY2VvZiBTdHJpbmdbXSkgewotICAgICAgICAgICAgCS8vIE11bHRpcGxlIHBhcmFtZXRlciB2YWx1ZXMKLSAgICAgICAgICAgIAlTdHJpbmdbXSBwYXJhbVZhbHVlTGlzdCA9IChTdHJpbmdbXSkgcGFyYW1WYWx1ZXM7Ci0gICAgICAgICAgICAJZm9yKGludCBpID0gMDsgaSA8IHBhcmFtVmFsdWVMaXN0Lmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAJCVN0cmluZyBwYXJhbVZhbHVlID0gcGFyYW1WYWx1ZUxpc3RbaV07Ci0JCSAgICAgICAgICAgIGlmKHdyaXR0ZW5QYXJhbXMgPiAwKSB7Ci0JCSAgICAgICAgICAgIAlvdXQucHJpbnQoICImIiArIFVSTEVuY29kZXIuZW5jb2RlKHBhcmFtTmFtZSwiSVNPODg1OS0xIikgKyAiPSIgKyBVUkxFbmNvZGVyLmVuY29kZShwYXJhbVZhbHVlLCJJU084ODU5LTEiKSApOwotCQkgICAgICAgICAgICB9Ci0JCSAgICAgICAgICAgIGVsc2UgewotCQkgICAgICAgICAgICAJb3V0LnByaW50KCBVUkxFbmNvZGVyLmVuY29kZShwYXJhbU5hbWUsIklTTzg4NTktMSIpICsgIj0iICsgVVJMRW5jb2Rlci5lbmNvZGUocGFyYW1WYWx1ZSwiSVNPODg1OS0xIikgKTsKLQkJICAgICAgICAgICAgfQotICAgICAgICAgICAgCQl3cml0dGVuUGFyYW1zKys7Ci0JICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIE11bHRpcGxlIHBhcmFtZXRlciB2YWx1ZXMKKyAgICAgICAgICAgICAgICBTdHJpbmdbXSBwYXJhbVZhbHVlTGlzdCA9IChTdHJpbmdbXSkgcGFyYW1WYWx1ZXM7CisgICAgICAgICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IHBhcmFtVmFsdWVMaXN0Lmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBwYXJhbVZhbHVlID0gcGFyYW1WYWx1ZUxpc3RbaV07CisgICAgICAgICAgICAgICAgICAgIGlmKHdyaXR0ZW5QYXJhbXMgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoICImIiArIFVSTEVuY29kZXIuZW5jb2RlKHBhcmFtTmFtZSwiSVNPODg1OS0xIikgKyAiPSIgKyBVUkxFbmNvZGVyLmVuY29kZShwYXJhbVZhbHVlLCJJU084ODU5LTEiKSApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCBVUkxFbmNvZGVyLmVuY29kZShwYXJhbU5hbWUsIklTTzg4NTktMSIpICsgIj0iICsgVVJMRW5jb2Rlci5lbmNvZGUocGFyYW1WYWx1ZSwiSVNPODg1OS0xIikgKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB3cml0dGVuUGFyYW1zKys7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAJLy8gU2luZ2xlIHBhcmFtZXRlciB2YWx1ZQotICAgICAgICAgICAgCVN0cmluZyBwYXJhbVZhbHVlID0gKFN0cmluZykgcGFyYW1WYWx1ZXM7Ci0JICAgICAgICAgICAgaWYod3JpdHRlblBhcmFtcyA+IDApIHsKLQkgICAgICAgICAgICAJb3V0LnByaW50KCAiJiIgKyBVUkxFbmNvZGVyLmVuY29kZShwYXJhbU5hbWUsIklTTzg4NTktMSIpICsgIj0iICsgVVJMRW5jb2Rlci5lbmNvZGUocGFyYW1WYWx1ZSwiSVNPODg1OS0xIikgKTsKLQkgICAgICAgICAgICB9Ci0JICAgICAgICAgICAgZWxzZSB7Ci0JICAgICAgICAgICAgCW91dC5wcmludCggVVJMRW5jb2Rlci5lbmNvZGUocGFyYW1OYW1lLCJJU084ODU5LTEiKSArICI9IiArIFVSTEVuY29kZXIuZW5jb2RlKHBhcmFtVmFsdWUsIklTTzg4NTktMSIpICk7Ci0JICAgICAgICAgICAgfQotICAgICAgICAJCXdyaXR0ZW5QYXJhbXMrKzsKKyAgICAgICAgICAgICAgICAvLyBTaW5nbGUgcGFyYW1ldGVyIHZhbHVlCisgICAgICAgICAgICAgICAgU3RyaW5nIHBhcmFtVmFsdWUgPSAoU3RyaW5nKSBwYXJhbVZhbHVlczsKKyAgICAgICAgICAgICAgICBpZih3cml0dGVuUGFyYW1zID4gMCkgeworICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoICImIiArIFVSTEVuY29kZXIuZW5jb2RlKHBhcmFtTmFtZSwiSVNPODg1OS0xIikgKyAiPSIgKyBVUkxFbmNvZGVyLmVuY29kZShwYXJhbVZhbHVlLCJJU084ODU5LTEiKSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCBVUkxFbmNvZGVyLmVuY29kZShwYXJhbU5hbWUsIklTTzg4NTktMSIpICsgIj0iICsgVVJMRW5jb2Rlci5lbmNvZGUocGFyYW1WYWx1ZSwiSVNPODg1OS0xIikgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgd3JpdHRlblBhcmFtcysrOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIG91dC5jbG9zZSgpOwpAQCAtNDc1LDIxICs0NzUsMjEgQEAKICAgICAgICAgLy8gR2V0IHJlc3BvbnNlIG1lc3NhZ2UKICAgICAgICAgU3RyaW5nIHJlc3BvbnNlTWVzc2FnZSA9IHVybENvbm5lY3Rpb24uZ2V0UmVzcG9uc2VNZXNzYWdlKCk7CiAgICAgICAgIGlmKHJlc3BvbnNlTWVzc2FnZSAhPSBudWxsKQotICAgICAgICAJcmVzdWx0LnB1dChSRVNQT05TRV9NRVNTQUdFLCByZXNwb25zZU1lc3NhZ2UpOworICAgICAgICAgICAgcmVzdWx0LnB1dChSRVNQT05TRV9NRVNTQUdFLCByZXNwb25zZU1lc3NhZ2UpOwogICAgICAgICAvLyBSZWNlaXZlIGNvb2tpZXMKICAgICAgICAgU3RyaW5nIHJldHVybmVkQ29va2llc1N0ciA9IHVybENvbm5lY3Rpb24uZ2V0SGVhZGVyRmllbGQoIlNldC1Db29raWUiKTsKICAgICAgICAgaWYocmV0dXJuZWRDb29raWVzU3RyICE9IG51bGwpIHsKLSAgICAgICAgCVN0cmluZ1Rva2VuaXplciBjb21tYVRva2VuaXplciA9IG5ldyBTdHJpbmdUb2tlbml6ZXIocmV0dXJuZWRDb29raWVzU3RyLCAiLCIsIGZhbHNlKTsKLSAgICAgICAgCWludCB0b2tlbnMgPSBjb21tYVRva2VuaXplci5jb3VudFRva2VucygpOwotICAgICAgICAJaWYodG9rZW5zID4gMCkgewotCSAgICAgICAgCVN0cmluZ1tdIHJldHVybmVkQ29va2llcyA9IG5ldyBTdHJpbmdbdG9rZW5zXTsKLQkgICAgICAgIAlpbnQgeiA9IDA7Ci0JICAgICAgICAJd2hpbGUoIGNvbW1hVG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSApIHsKLQkgICAgICAgIAkJcmV0dXJuZWRDb29raWVzW3pdID0gY29tbWFUb2tlbml6ZXIubmV4dFRva2VuKCk7Ci0JICAgICAgICAJCXorKzsKLQkJCQl9Ci0JICAgICAgICAJcmVzdWx0LnB1dChDT09LSUVTLCByZXR1cm5lZENvb2tpZXMpOwotCSAgICAgICAgfQorICAgICAgICAgICAgU3RyaW5nVG9rZW5pemVyIGNvbW1hVG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcihyZXR1cm5lZENvb2tpZXNTdHIsICIsIiwgZmFsc2UpOworICAgICAgICAgICAgaW50IHRva2VucyA9IGNvbW1hVG9rZW5pemVyLmNvdW50VG9rZW5zKCk7CisgICAgICAgICAgICBpZih0b2tlbnMgPiAwKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nW10gcmV0dXJuZWRDb29raWVzID0gbmV3IFN0cmluZ1t0b2tlbnNdOworICAgICAgICAgICAgICAgIGludCB6ID0gMDsKKyAgICAgICAgICAgICAgICB3aGlsZSggY29tbWFUb2tlbml6ZXIuaGFzTW9yZVRva2VucygpICkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm5lZENvb2tpZXNbel0gPSBjb21tYVRva2VuaXplci5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAgICAgICAgICAgeisrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXN1bHQucHV0KENPT0tJRVMsIHJldHVybmVkQ29va2llcyk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmVzcG9uc2VSZWFkZXIuY2xvc2UoKTsKICAgICAgICAgcmV0dXJuKHJlc3VsdCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGVhZGVyQnVmZmVyU2l6ZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hlYWRlckJ1ZmZlclNpemUvYnVpbGQucHJvcGVydGllcwppbmRleCBiZTEzODViLi5kNzg3NjM5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGVhZGVyQnVmZmVyU2l6ZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oZWFkZXJCdWZmZXJTaXplL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1oZWFkZXJCdWZmZXJTaXplIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1oZWFkZXJCdWZmZXJTaXplIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oZWFkZXJCdWZmZXJTaXplL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9oZWFkZXJCdWZmZXJTaXplL2J1aWxkLnhtbAppbmRleCA5OTc2YWU5Li44NTlmZGFkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaGVhZGVyQnVmZmVyU2l6ZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2hlYWRlckJ1ZmZlclNpemUvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwxNiArNDQsMTYgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNzMsNyArNzMsNyBAQAogICAgICAgICAgICAgICAgICAgIHZhbHVlPSJjb25maWdzLmNvbmZpZy5zZXJ2ZXItY29uZmlnLm5ldHdvcmstY29uZmlnLnRyYW5zcG9ydHMudHJhbnNwb3J0LnRjcC5idWZmZXItc2l6ZS1ieXRlcz0iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgpAQCAtODgsMTAgKzg4LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBDb21wcmVzc2lvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBDb21wcmVzc2lvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDQ2YjEyMGUuLjY5NGNiYjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwQ29tcHJlc3Npb24vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cENvbXByZXNzaW9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tYXNhZG1pbi1kZWxldGVzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cENvbXByZXNzaW9uL3NyYy9tYWluL2phdmEvb3JnL2dsYXNzZmlzaC9kZXZ0ZXN0cy93ZWIvaHR0cGNvbXByZXNzaW9uL0h0dHBDb21wcmVzc2lvblRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwQ29tcHJlc3Npb24vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL2RldnRlc3RzL3dlYi9odHRwY29tcHJlc3Npb24vSHR0cENvbXByZXNzaW9uVGVzdC5qYXZhCmluZGV4IDZhMDZjZmYuLjMyYzcyMmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwQ29tcHJlc3Npb24vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL2RldnRlc3RzL3dlYi9odHRwY29tcHJlc3Npb24vSHR0cENvbXByZXNzaW9uVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwQ29tcHJlc3Npb24vc3JjL21haW4vamF2YS9vcmcvZ2xhc3NmaXNoL2RldnRlc3RzL3dlYi9odHRwY29tcHJlc3Npb24vSHR0cENvbXByZXNzaW9uVGVzdC5qYXZhCkBAIC00Myw3ICs0Myw3IEBACiAgICAgcHVibGljIHZvaWQgcnVuKCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgZmluYWwgaW50IHBvcnQgPSBJbnRlZ2VyLnZhbHVlT2YoYW50UHJvcCgiaHR0cC5wb3J0IikpOwotCQkJCWZpbmFsIFN0cmluZyBwYXRoID0gImNvbmZpZ3MuY29uZmlnLnNlcnZlci1jb25maWcubmV0d29yay1jb25maWcucHJvdG9jb2xzLnByb3RvY29sLmh0dHAtbGlzdGVuZXItMS5odHRwLmNvbXByZXNzaW9uPSI7CisgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIHBhdGggPSAiY29uZmlncy5jb25maWcuc2VydmVyLWNvbmZpZy5uZXR3b3JrLWNvbmZpZy5wcm90b2NvbHMucHJvdG9jb2wuaHR0cC1saXN0ZW5lci0xLmh0dHAuY29tcHJlc3Npb249IjsKICAgICAgICAgICAgIGZpbmFsIFN0cmluZ1tdIHNjaGVtZXMgPSB7Imd6aXAiLCAibHptYSJ9OwogICAgICAgICAgICAgZm9yIChTdHJpbmcgc2NoZW1lIDogc2NoZW1lcykgewogICAgICAgICAgICAgICAgIFN0cmluZyBoZWFkZXIgPSBzY2hlbWUgKyAiLSI7CkBAIC02Niw3ICs2Niw3IEBACiAgICAgICAgICAgICAgICAgZ2V0KCJsb2NhbGhvc3QiLCBwb3J0LCBmYWxzZSwgImNvbXByZXNzZWQtb3V0cHV0LW9mZi0yIiwgc2NoZW1lKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCSAgcmVwb3J0KGUuZ2V0TWVzc2FnZSgpLCBmYWxzZSk7CisgICAgICAgICAgICAgIHJlcG9ydChlLmdldE1lc3NhZ2UoKSwgZmFsc2UpOwogICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCksIGUpOwogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKQEAgLTk0LDggKzk0LDggQEAKICAgICAgICAgICAgICAgICBmb3VuZCB8PSBsaW5lLnRvTG93ZXJDYXNlKCkuY29udGFpbnMoImNvbnRlbnQtZW5jb2Rpbmc6ICIgKyBjb21wU2NoZW1lKTsKICAgICAgICAgICAgICAgICBpZiAoemlwcGVkKSB7CiAgICAgICAgICAgICAgICAgICAgY2h1bmtlZCB8PSBsaW5lLnRvTG93ZXJDYXNlKCkuY29udGFpbnMoInRyYW5zZmVyLWVuY29kaW5nOiBjaHVua2VkIik7Ci0gICAgICAgICAgICAgICAgICAgY29udGVudExlbmd0aCB8PSAhbGluZS50b0xvd2VyQ2FzZSgpLmNvbnRhaW5zKCJjb250ZW50LWxlbmd0aCIpOyAKLQkJfQorICAgICAgICAgICAgICAgICAgIGNvbnRlbnRMZW5ndGggfD0gIWxpbmUudG9Mb3dlckNhc2UoKS5jb250YWlucygiY29udGVudC1sZW5ndGgiKTsKKyAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgcy5jbG9zZSgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBDb25uZWN0b3JLZWVwQWxpdmUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwQ29ubmVjdG9yS2VlcEFsaXZlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYTUyYzVhNC4uYzg0NDcxYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBDb25uZWN0b3JLZWVwQWxpdmUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cENvbm5lY3RvcktlZXBBbGl2ZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNCArMTUsMTQgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0taHR0cENvbm5lY3RvcktlZXBBbGl2ZSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0taHR0cENvbm5lY3RvcktlZXBBbGl2ZSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii93ZWItaHR0cENvbm5lY3RvcktlZXBBbGl2ZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBDb25uZWN0b3JLZWVwQWxpdmUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBDb25uZWN0b3JLZWVwQWxpdmUvYnVpbGQueG1sCmluZGV4IGY2MzY2NTguLjEyNjk5MzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwQ29ubmVjdG9yS2VlcEFsaXZlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cENvbm5lY3RvcktlZXBBbGl2ZS9idWlsZC54bWwKQEAgLTM2LDEzICszNiwxMyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiIC8+CkBAIC02MCwxNiArNjAsMTYgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNzcsNyArNzcsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgICAgPGphdmFjCiAgICAgICAgICAgICBzcmNkaXI9Ii4iCkBAIC05NCwxMCArOTQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cExpc3RlbmVyQWRtaW5SZWNvbmZpZy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cExpc3RlbmVyQWRtaW5SZWNvbmZpZy9XZWJUZXN0LmphdmEKaW5kZXggNTIwY2E1Ni4uN2I4ZTdmOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBMaXN0ZW5lckFkbWluUmVjb25maWcvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwTGlzdGVuZXJBZG1pblJlY29uZmlnL1dlYlRlc3QuamF2YQpAQCAtMzYsNyArMzYsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiYWRtaW5SZWNvbmZpZyIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ0LDggKzQ0LDggQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQuIik7CkBAIC01NSw3ICs1NSw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAgCisKICAgICAgICAgU29ja2V0IHNvY2sgPSBuZXcgU29ja2V0KGhvc3QsIG5ldyBJbnRlZ2VyKHBvcnQpLmludFZhbHVlKCkpOwogICAgICAgICBzb2NrLnNldFNvVGltZW91dCg1MDAwKTsKICAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gc29jay5nZXRPdXRwdXRTdHJlYW0oKTsKQEAgLTY0LDcgKzY0LDcgQEAKICAgICAgICAgb3Mud3JpdGUoZ2V0LmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiSG9zdDogbG9jYWxob3N0XG4iLmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYmlzID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cExpc3RlbmVyQWRtaW5SZWNvbmZpZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBMaXN0ZW5lckFkbWluUmVjb25maWcvYnVpbGQucHJvcGVydGllcwppbmRleCAxNzZmYzY4Li5hYjUxNjU4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cExpc3RlbmVyQWRtaW5SZWNvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwTGlzdGVuZXJBZG1pblJlY29uZmlnL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE0ICsxNSwxNCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1hZG1pblJlY29uZmlnIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1hZG1pblJlY29uZmlnIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iL3dlYi1hZG1pblJlY29uZmlnIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cExpc3RlbmVyQWRtaW5SZWNvbmZpZy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cExpc3RlbmVyQWRtaW5SZWNvbmZpZy9idWlsZC54bWwKaW5kZXggYzFkOTg2OC4uMjViMzUwNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBMaXN0ZW5lckFkbWluUmVjb25maWcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwTGlzdGVuZXJBZG1pblJlY29uZmlnL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNjMsNyArNjMsNyBAQAogICAgICAgICAgICAgICAgICAgIHZhbHVlPSJjb25maWdzLmNvbmZpZy5zZXJ2ZXItY29uZmlnLm5ldHdvcmstY29uZmlnLnByb3RvY29scy5wcm90b2NvbC5hZG1pbi1saXN0ZW5lci5zZWN1cml0eS1lbmFibGVkPWZhbHNlIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KQEAgLTc3LDcgKzc3LDcgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBMaXN0ZW5lckR5bmFtaWNDb25maWcvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBMaXN0ZW5lckR5bmFtaWNDb25maWcvV2ViVGVzdC5qYXZhCmluZGV4IDM4NTk3ZGEuLjJmMTEzODAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwTGlzdGVuZXJEeW5hbWljQ29uZmlnL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cExpc3RlbmVyRHluYW1pY0NvbmZpZy9XZWJUZXN0LmphdmEKQEAgLTIxLDE2ICsyMSwxNiBAQAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuKjsKIAogcHVibGljIGNsYXNzIFdlYlRlc3QgewotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50ID0gMDsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgRVhQRUNURURfQ09VTlQgPSAxOwotICAgIAorCiAgICAgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0PQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAgICAgcHJpdmF0ZSBzdGF0aWMgVVJMQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKICAgICBwcml2YXRlIHN0YXRpYyBVUkwgdXJsOwogICAgIHByaXZhdGUgc3RhdGljIE9iamVjdE91dHB1dFN0cmVhbSBvYmplY3RXcml0ZXIgPSBudWxsOwotICAgIHByaXZhdGUgc3RhdGljIE9iamVjdElucHV0U3RyZWFtIG9iamVjdFJlYWRlciA9IG51bGw7ICAKKyAgICBwcml2YXRlIHN0YXRpYyBPYmplY3RJbnB1dFN0cmVhbSBvYmplY3RSZWFkZXIgPSBudWxsOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewogCkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiB1cmxDb25uZWN0aW9uID0gKEh0dHBVUkxDb25uZWN0aW9uKWNvbm47CiAgICAgICAgICAgICAgICB1cmxDb25uZWN0aW9uLnNldERvT3V0cHV0KHRydWUpOwogICAgICAgICAgICAgICAgaW50IHJlc3BvbnNlQ29kZT0gIHVybENvbm5lY3Rpb24uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc3BvbnNlIGNvZGU6ICIgKyByZXNwb25zZUNvZGUgKyAiIEV4cGVjdGVkIGNvZGU6IDIwMCIpOyAKKyAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzcG9uc2UgY29kZTogIiArIHJlc3BvbnNlQ29kZSArICIgRXhwZWN0ZWQgY29kZTogMjAwIik7CiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VDb2RlID09IDIwMCl7CiAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJodHRwTGlzdGVuZXJEeW5hbWljQ29uZmlnIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cExpc3RlbmVyRHluYW1pY0NvbmZpZy9XZWJUZXN0Mi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBMaXN0ZW5lckR5bmFtaWNDb25maWcvV2ViVGVzdDIuamF2YQppbmRleCBiMTdhOTU3Li4xODc0M2M1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cExpc3RlbmVyRHluYW1pY0NvbmZpZy9XZWJUZXN0Mi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwTGlzdGVuZXJEeW5hbWljQ29uZmlnL1dlYlRlc3QyLmphdmEKQEAgLTIxLDE2ICsyMSwxNiBAQAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuKjsKIAogcHVibGljIGNsYXNzIFdlYlRlc3QyIHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGludCBjb3VudCA9IDA7CiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IEVYUEVDVEVEX0NPVU5UID0gMTsKLSAgICAKKwogICAgIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdD0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogICAgIHByaXZhdGUgc3RhdGljIFVSTENvbm5lY3Rpb24gY29ubiA9IG51bGw7CiAgICAgcHJpdmF0ZSBzdGF0aWMgVVJMIHVybDsKICAgICBwcml2YXRlIHN0YXRpYyBPYmplY3RPdXRwdXRTdHJlYW0gb2JqZWN0V3JpdGVyID0gbnVsbDsKLSAgICBwcml2YXRlIHN0YXRpYyBPYmplY3RJbnB1dFN0cmVhbSBvYmplY3RSZWFkZXIgPSBudWxsOyAgCisgICAgcHJpdmF0ZSBzdGF0aWMgT2JqZWN0SW5wdXRTdHJlYW0gb2JqZWN0UmVhZGVyID0gbnVsbDsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKIApAQCAtNTEsNyArNTEsNyBAQAogICAgICAgICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gdXJsQ29ubmVjdGlvbiA9IChIdHRwVVJMQ29ubmVjdGlvbiljb25uOwogICAgICAgICAgICAgICAgdXJsQ29ubmVjdGlvbi5zZXREb091dHB1dCh0cnVlKTsKICAgICAgICAgICAgICAgIGludCByZXNwb25zZUNvZGU9ICB1cmxDb25uZWN0aW9uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXNwb25zZSBjb2RlOiAiICsgcmVzcG9uc2VDb2RlICsgIiBFeHBlY3RlZCBjb2RlOiAyMDAiKTsgCisgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc3BvbnNlIGNvZGU6ICIgKyByZXNwb25zZUNvZGUgKyAiIEV4cGVjdGVkIGNvZGU6IDIwMCIpOwogICAgICAgICAgICAgICAgaWYgKHVybENvbm5lY3Rpb24uZ2V0UmVzcG9uc2VDb2RlKCkgPT0gMjAwKXsKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImh0dHBMaXN0ZW5lckR5bmFtaWNDb25maWctYWZ0ZXJSZWNvbmYiLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwTGlzdGVuZXJEeW5hbWljQ29uZmlnL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cExpc3RlbmVyRHluYW1pY0NvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGFkMzlhYzIuLjM5OWI3ZjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwTGlzdGVuZXJEeW5hbWljQ29uZmlnL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBMaXN0ZW5lckR5bmFtaWNDb25maWcvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTQgKzE1LDE0IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWh0dHBMaXN0ZW5lckR5bmFtaWNDb25maWciLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWh0dHBMaXN0ZW5lckR5bmFtaWNDb25maWciLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvd2ViLWh0dHBMaXN0ZW5lckR5bmFtaWNDb25maWciLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwTGlzdGVuZXJEeW5hbWljQ29uZmlnL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwTGlzdGVuZXJEeW5hbWljQ29uZmlnL2J1aWxkLnhtbAppbmRleCBiZGY2ZGY4Li5lYzQxOTRmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cExpc3RlbmVyRHluYW1pY0NvbmZpZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBMaXN0ZW5lckR5bmFtaWNDb25maWcvYnVpbGQueG1sCkBAIC01MCw3ICs1MCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC01OCwxMCArNTgsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgIDxqYXZhYwpAQCAtNjksMTAgKzY5LDEwIEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iKi5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtODAsNyArODAsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC05Miw3ICs5Miw3IEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4tYWdhaW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0MiI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC0xMDcsNyArMTA3LDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwTGlzdGVuZXJEeW5hbWljQ29uZmlnL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwTGlzdGVuZXJEeW5hbWljQ29uZmlnL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCBmZGIwYzE3Li5jMWQ0YmI2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cExpc3RlbmVyRHluYW1pY0NvbmZpZy9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBMaXN0ZW5lckR5bmFtaWNDb25maWcvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yMiwxMiArMjIsMTIgQEAKICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiCiAgICAgICAgICB2ZXJzaW9uPSIyLjQiPgotICAgICAKKwogICAgIDxzZXJ2bGV0PgogICAgICAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXRUZXN0PC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vU2VydmxldFRlc3Q8L3VybC1wYXR0ZXJuPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBMaXN0ZW5lckR5bmFtaWNDb25maWcvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBMaXN0ZW5lckR5bmFtaWNDb25maWcvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCmluZGV4IDc4MWJjY2YuLmMwNzMyNzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwTGlzdGVuZXJEeW5hbWljQ29uZmlnL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cExpc3RlbmVyRHluYW1pY0NvbmZpZy9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKIHB1YmxpYyBjbGFzcyBTZXJ2bGV0VGVzdCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIAogICAgIHByaXZhdGUgU2VydmxldENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwogICAgICAgICBjb250ZXh0ID0gY29uZmlnLmdldFNlcnZsZXRDb250ZXh0KCk7CkBAIC0zNCwxMiArMzQsMTIgQEAKICAgICAgICAgZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7ICAgICAgICAKKyAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuZG9Qb3N0XSIpOwotICAgICAgICAKKwogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwotICAgICAgICAJCisKICAgICAgICAgb3V0LnByaW50bG4oIlRFU1Q6OlBBU1MiKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFJlcXVlc3RJZ25vcmVJbnZhbGlkQWNjZXB0TGFuZ3VhZ2VIZWFkZXIvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBSZXF1ZXN0SWdub3JlSW52YWxpZEFjY2VwdExhbmd1YWdlSGVhZGVyL1dlYlRlc3QuamF2YQppbmRleCA0ZTEzYmE3Li44MmMxNGRhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFJlcXVlc3RJZ25vcmVJbnZhbGlkQWNjZXB0TGFuZ3VhZ2VIZWFkZXIvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwUmVxdWVzdElnbm9yZUludmFsaWRBY2NlcHRMYW5ndWFnZUhlYWRlci9XZWJUZXN0LmphdmEKQEAgLTQyLDcgKzQyLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgR2xhc3NGaXNoIElzc3VlIDE3MDMiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC01MSw4ICs1MSw4IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAKLSAgICAgICAgdHJ5IHsgCisKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVNUX05BTUUgKyAiIHRlc3QgZmFpbGVkIik7CkBAIC02MiwxOSArNjIsMTkgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgICAKKwogICAgICAgICBTb2NrZXQgc29jayA9IG5ldyBTb2NrZXQoaG9zdCwgbmV3IEludGVnZXIocG9ydCkuaW50VmFsdWUoKSk7CiAgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IHNvY2suZ2V0T3V0cHV0U3RyZWFtKCk7CiAgICAgICAgIFN0cmluZyBnZXQgPSAiR0VUICIgKyBjb250ZXh0Um9vdCArICIvVGVzdFNlcnZsZXQiICsgIiBIVFRQLzEuMFxuIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGdldCk7CiAgICAgICAgIG9zLndyaXRlKGdldC5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIkFjY2VwdC1MYW5ndWFnZTogZGVcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIC8vIFNlbmQgQWNjZXB0LUxhbmd1YWdlIGhlYWRlciB3aXRoIGludmFsaWQgbG9jYWxlIGNvZGUuIE1ha2Ugc3VyZSAKLSAgICAgICAgLy8gdGhpcyBsb2NhbGUgaXMgZ2V0dGluZyBpZ25vcmVkIAorICAgICAgICAvLyBTZW5kIEFjY2VwdC1MYW5ndWFnZSBoZWFkZXIgd2l0aCBpbnZhbGlkIGxvY2FsZSBjb2RlLiBNYWtlIHN1cmUKKyAgICAgICAgLy8gdGhpcyBsb2NhbGUgaXMgZ2V0dGluZyBpZ25vcmVkCiAgICAgICAgIG9zLndyaXRlKCJBY2NlcHQtTGFuZ3VhZ2U6IDEyXG4iLmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiQWNjZXB0LUxhbmd1YWdlOiBGUlxuIi5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJpcyA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBSZXF1ZXN0SWdub3JlSW52YWxpZEFjY2VwdExhbmd1YWdlSGVhZGVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFJlcXVlc3RJZ25vcmVJbnZhbGlkQWNjZXB0TGFuZ3VhZ2VIZWFkZXIvYnVpbGQucHJvcGVydGllcwppbmRleCBjNzg4MzYwLi4xM2M4ODExIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFJlcXVlc3RJZ25vcmVJbnZhbGlkQWNjZXB0TGFuZ3VhZ2VIZWFkZXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFJlcXVlc3RJZ25vcmVJbnZhbGlkQWNjZXB0TGFuZ3VhZ2VIZWFkZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1odHRwLXJlcXVlc3QtaWdub3JlLWludmFsaWQtYWNjZXB0LWxhbmd1YWdlLWhlYWRlciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBSZXF1ZXN0SWdub3JlSW52YWxpZEFjY2VwdExhbmd1YWdlSGVhZGVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwUmVxdWVzdElnbm9yZUludmFsaWRBY2NlcHRMYW5ndWFnZUhlYWRlci9idWlsZC54bWwKaW5kZXggNDEwMzMxMS4uZGUxZGNmYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBSZXF1ZXN0SWdub3JlSW52YWxpZEFjY2VwdExhbmd1YWdlSGVhZGVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFJlcXVlc3RJZ25vcmVJbnZhbGlkQWNjZXB0TGFuZ3VhZ2VIZWFkZXIvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwyMiArNDQsMjIgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzEsMTAgKzcxLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBSZXF1ZXN0SWdub3JlSW52YWxpZEFjY2VwdExhbmd1YWdlSGVhZGVyL3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBSZXF1ZXN0SWdub3JlSW52YWxpZEFjY2VwdExhbmd1YWdlSGVhZGVyL3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhCmluZGV4IDBmMjFmNTYuLjdjYmQ0ZTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwUmVxdWVzdElnbm9yZUludmFsaWRBY2NlcHRMYW5ndWFnZUhlYWRlci9zZXJ2bGV0L3Rlc3QvVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFJlcXVlc3RJZ25vcmVJbnZhbGlkQWNjZXB0TGFuZ3VhZ2VIZWFkZXIvc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTQzLDcgKzQzLDcgQEAKICAgICAgICAgYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKICAgICAgICAgaWYgKG51bSA9PSAyICYmIGRlTG9jYWxlU2VlbiAmJiBmckxvY2FsZVNlZW4pIHsKICAgICAgICAgICAgIHBhc3NlZCA9IHRydWU7Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICAgICAgcmVzLmdldFdyaXRlcigpLnByaW50KHBhc3NlZCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBSZXF1ZXN0V2hpdGVzcGFjZVRvbGVyYW5jZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFJlcXVlc3RXaGl0ZXNwYWNlVG9sZXJhbmNlL1dlYlRlc3QuamF2YQppbmRleCBlNWViYjQwLi42ZTlhYTg5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFJlcXVlc3RXaGl0ZXNwYWNlVG9sZXJhbmNlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFJlcXVlc3RXaGl0ZXNwYWNlVG9sZXJhbmNlL1dlYlRlc3QuamF2YQpAQCAtNDQsNyArNDQsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBIdHRwIFJlcXVlc3Qgd2hpdGVzcGFjZSB0b2xlcmFuY2UiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC01Miw4ICs1Miw4IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKQEAgLTYzLDcgKzYzLDcgQEAKIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhvc3Q9IiArIGhvc3QgKyAiLCBwb3J0PSIgKyBwb3J0KTsgICAgICAgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhvc3Q9IiArIGhvc3QgKyAiLCBwb3J0PSIgKyBwb3J0KTsKICAgICAgICAgU29ja2V0IHNvY2sgPSBuZXcgU29ja2V0KGhvc3QsIG5ldyBJbnRlZ2VyKHBvcnQpLmludFZhbHVlKCkpOwogICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSBzb2NrLmdldE91dHB1dFN0cmVhbSgpOwogICAgICAgICBTdHJpbmcgZ2V0ID0gIkdFVCAgICIgKyBjb250ZXh0Um9vdCArICIvaW5kZXguanNwICBIVFRQLzEuMVxuIjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwUmVxdWVzdFdoaXRlc3BhY2VUb2xlcmFuY2UvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwUmVxdWVzdFdoaXRlc3BhY2VUb2xlcmFuY2UvYnVpbGQucHJvcGVydGllcwppbmRleCAxMzVkNTdmLi5lZTljNDM0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFJlcXVlc3RXaGl0ZXNwYWNlVG9sZXJhbmNlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBSZXF1ZXN0V2hpdGVzcGFjZVRvbGVyYW5jZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWh0dHAtcmVxdWVzdC13aGl0ZXNwYWNlLXRvbGVyYW5jZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBSZXF1ZXN0V2hpdGVzcGFjZVRvbGVyYW5jZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFJlcXVlc3RXaGl0ZXNwYWNlVG9sZXJhbmNlL2J1aWxkLnhtbAppbmRleCBhZDAyNWQ5Li5kZTFkY2ZhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFJlcXVlc3RXaGl0ZXNwYWNlVG9sZXJhbmNlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFJlcXVlc3RXaGl0ZXNwYWNlVG9sZXJhbmNlL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMjIgKzQ0LDIyIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTcxLDEwICs3MSwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwUmVzcG9uc2VFcnJvck1lc3NhZ2UvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBSZXNwb25zZUVycm9yTWVzc2FnZS9XZWJUZXN0LmphdmEKaW5kZXggN2RmZWE3Yy4uYTE0M2QyZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBSZXNwb25zZUVycm9yTWVzc2FnZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBSZXNwb25zZUVycm9yTWVzc2FnZS9XZWJUZXN0LmphdmEKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgWFNTIEh0dHBTZXJ2bGV0UmVzcG9uc2Uuc2VuZEVycm9yIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTQsOCArNTQsOCBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CkBAIC03Myw3ICs3Myw3IEBACiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIb3N0PSIgKyBob3N0ICsgIiwgcG9ydD0iICsgcG9ydCk7ICAgICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIb3N0PSIgKyBob3N0ICsgIiwgcG9ydD0iICsgcG9ydCk7CiAgICAgICAgIHNvY2sgPSBuZXcgU29ja2V0KGhvc3QsIG5ldyBJbnRlZ2VyKHBvcnQpLmludFZhbHVlKCkpOwogICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSBzb2NrLmdldE91dHB1dFN0cmVhbSgpOwogICAgICAgICBTdHJpbmcgZ2V0ID0gIkdFVCAiICsgY29udGV4dFJvb3QgKyAiL2luZGV4LmpzcCBIVFRQLzEuMVxuIjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwUmVzcG9uc2VFcnJvck1lc3NhZ2UvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwUmVzcG9uc2VFcnJvck1lc3NhZ2UvYnVpbGQucHJvcGVydGllcwppbmRleCA4MGU3YzljLi4zMWYzNTEzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFJlc3BvbnNlRXJyb3JNZXNzYWdlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBSZXNwb25zZUVycm9yTWVzc2FnZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWh0dHAtcmVzcG9uc2UtZXJyb3ItbWVzc2FnZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBSZXNwb25zZUVycm9yTWVzc2FnZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFJlc3BvbnNlRXJyb3JNZXNzYWdlL2J1aWxkLnhtbAppbmRleCBhZDAyNWQ5Li5kZTFkY2ZhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFJlc3BvbnNlRXJyb3JNZXNzYWdlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFJlc3BvbnNlRXJyb3JNZXNzYWdlL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMjIgKzQ0LDIyIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTcxLDEwICs3MSwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwUmVzcG9uc2VTZXJ2ZXJIZWFkZXIvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBSZXNwb25zZVNlcnZlckhlYWRlci9XZWJUZXN0LmphdmEKaW5kZXggMmQ0YmRmNC4uNTdiNDMzMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBSZXNwb25zZVNlcnZlckhlYWRlci9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBSZXNwb25zZVNlcnZlckhlYWRlci9XZWJUZXN0LmphdmEKQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciA2MzIwNzUwIik7CkBAIC00OSwxMiArNDksMTIgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogCiAgICAgcHJpdmF0ZSB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjb250ZXh0Um9vdCArICIvIiArICJ0ZXN0LmpzcCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CkBAIC02MiwxMiArNjIsMTIgQEAKICAgICAgICAgY29ubi5jb25uZWN0KCk7CiAKICAgICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm4uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7IAorICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgewogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJXcm9uZyByZXNwb25zZSBjb2RlLiBFeHBlY3RlZDogMjAwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgcmVjZWl2ZWQ6ICIgKyByZXNwb25zZUNvZGUpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9IAorICAgICAgICB9CiAKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBjb25uLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIFN0cmluZyBzZXJ2ZXJIZWFkZXIgPSBjb25uLmdldEhlYWRlckZpZWxkKCJTZXJ2ZXIiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwUmVzcG9uc2VTZXJ2ZXJIZWFkZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwUmVzcG9uc2VTZXJ2ZXJIZWFkZXIvYnVpbGQucHJvcGVydGllcwppbmRleCBjZmZhMjNjLi42ODVkNjg4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFJlc3BvbnNlU2VydmVySGVhZGVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBSZXNwb25zZVNlcnZlckhlYWRlci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWh0dHAtcmVzcG9uc2Utc2VydmVyLWhlYWRlciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBSZXNwb25zZVNlcnZlckhlYWRlci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFJlc3BvbnNlU2VydmVySGVhZGVyL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFJlc3BvbnNlU2VydmVySGVhZGVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFJlc3BvbnNlU2VydmVySGVhZGVyL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwU2VydmxldERvUG9zdC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBTZXJ2bGV0RG9Qb3N0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYTZhZGI3YS4uNTQ2NjY4YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBTZXJ2bGV0RG9Qb3N0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBTZXJ2bGV0RG9Qb3N0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE0ICsxNSwxNCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1odHRwU2VydmxldERvUG9zdCIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0taHR0cFNlcnZsZXREb1Bvc3QiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvd2ViLWh0dHBTZXJ2bGV0RG9Qb3N0Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFNlcnZsZXREb1Bvc3QvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBTZXJ2bGV0RG9Qb3N0L2J1aWxkLnhtbAppbmRleCA4ZWVkNjYxLi5jN2EwODRmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFNlcnZsZXREb1Bvc3QvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwU2VydmxldERvUG9zdC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE2ICs0MiwxNiBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC01OSw3ICs1OSw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgICA8amF2YWMKICAgICAgICAgICAgIHNyY2Rpcj0iLiIKQEAgLTc3LDEwICs3NywxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwU2VydmxldERvUG9zdC9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFNlcnZsZXREb1Bvc3QvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDM2ZTU5NjUuLmM4ZTFjOGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwU2VydmxldERvUG9zdC9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBTZXJ2bGV0RG9Qb3N0L2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjIsMTIgKzIyLDEyIEBACiAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIgogICAgICAgICAgdmVyc2lvbj0iMi40Ij4KLSAgICAgCisKICAgICA8c2VydmxldD4KICAgICAgICAgPGRpc3BsYXktbmFtZT5TZXJ2bGV0VGVzdDwvZGlzcGxheS1uYW1lPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnNlcnZsZXQuU2VydmxldFRlc3Q8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCisgICAgPC9zZXJ2bGV0PgogICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L1NlcnZsZXRUZXN0PC91cmwtcGF0dGVybj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwU2VydmxldERvUG9zdC9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFNlcnZsZXREb1Bvc3Qvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCmluZGV4IGYzMWY4ODQuLmI3MTVmZjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwU2VydmxldERvUG9zdC9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBTZXJ2bGV0RG9Qb3N0L3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQpAQCAtMjgsNyArMjgsNyBAQAogcHVibGljIGNsYXNzIFNlcnZsZXRUZXN0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewogCiAgICAgcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7CiAgICAgfQpAQCAtMzYsNyArMzYsNyBAQAogICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgICAgICAgIAorICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKIAogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBTZXJ2bGV0R2V0QWxsRGVjbGFyZWRNZXRob2RzL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwU2VydmxldEdldEFsbERlY2xhcmVkTWV0aG9kcy9XZWJUZXN0LmphdmEKaW5kZXggN2E2NzA2NS4uOThlZTlmNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBTZXJ2bGV0R2V0QWxsRGVjbGFyZWRNZXRob2RzL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFNlcnZsZXRHZXRBbGxEZWNsYXJlZE1ldGhvZHMvV2ViVGVzdC5qYXZhCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIDQ5Njg4NDEiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC00Nyw4ICs0Nyw4IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZVNlcnZsZXQoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZC4iKTsKQEAgLTU4LDcgKzU4LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlU2VydmxldCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAgCisKICAgICAgICAgU29ja2V0IHNvY2sgPSBuZXcgU29ja2V0KGhvc3QsIG5ldyBJbnRlZ2VyKHBvcnQpLmludFZhbHVlKCkpOwogICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSBzb2NrLmdldE91dHB1dFN0cmVhbSgpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKCJPUFRJT05TICIgKyBjb250ZXh0Um9vdCArICIvVGVzdFNlcnZsZXQiCkBAIC02Niw3ICs2Niw3IEBACiAgICAgICAgIG9zLndyaXRlKCgiT1BUSU9OUyAiICsgY29udGV4dFJvb3QgKyAiL1Rlc3RTZXJ2bGV0IgogICAgICAgICAgICAgKyAiIEhUVFAvMS4wXG4iKS5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJpcyA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBTZXJ2bGV0R2V0QWxsRGVjbGFyZWRNZXRob2RzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFNlcnZsZXRHZXRBbGxEZWNsYXJlZE1ldGhvZHMvYnVpbGQucHJvcGVydGllcwppbmRleCAyMzVhMGM4Li5kODM2MzQ0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFNlcnZsZXRHZXRBbGxEZWNsYXJlZE1ldGhvZHMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFNlcnZsZXRHZXRBbGxEZWNsYXJlZE1ldGhvZHMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1odHRwLXNlcnZsZXQtZ2V0LWFsbC1kZWNsYXJlZC1tZXRob2RzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFNlcnZsZXRHZXRBbGxEZWNsYXJlZE1ldGhvZHMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2h0dHBTZXJ2bGV0R2V0QWxsRGVjbGFyZWRNZXRob2RzL2J1aWxkLnhtbAppbmRleCAzOGQ1ZjFlLi4zYWEzYjUyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaHR0cFNlcnZsZXRHZXRBbGxEZWNsYXJlZE1ldGhvZHMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9odHRwU2VydmxldEdldEFsbERlY2xhcmVkTWV0aG9kcy9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE3ICs0MiwxNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9pbmNsdWRlRXJyb3JQYWdlQWZ0ZXJSZXNwb25zZUNvbW1pdC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaW5jbHVkZUVycm9yUGFnZUFmdGVyUmVzcG9uc2VDb21taXQvV2ViVGVzdC5qYXZhCmluZGV4IDM4MjhhYWMuLjk1OGJmY2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9pbmNsdWRlRXJyb3JQYWdlQWZ0ZXJSZXNwb25zZUNvbW1pdC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2luY2x1ZGVFcnJvclBhZ2VBZnRlclJlc3BvbnNlQ29tbWl0L1dlYlRlc3QuamF2YQpAQCAtNDgsNyArNDgsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciAiICsgVEVTVF9OQU1FKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC01Niw4ICs1Niw4IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTc1LDcgKzc1LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgICAKKwogICAgICAgICBzb2NrID0gbmV3IFNvY2tldChob3N0LCBuZXcgSW50ZWdlcihwb3J0KS5pbnRWYWx1ZSgpKTsKICAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gc29jay5nZXRPdXRwdXRTdHJlYW0oKTsKICAgICAgICAgU3RyaW5nIGdldCA9ICJHRVQgIiArIGNvbnRleHRSb290ICsgIi9zcWxFeGNlcHRpb24uanNwIEhUVFAvMS4wXG4iOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2luY2x1ZGVFcnJvclBhZ2VBZnRlclJlc3BvbnNlQ29tbWl0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaW5jbHVkZUVycm9yUGFnZUFmdGVyUmVzcG9uc2VDb21taXQvYnVpbGQucHJvcGVydGllcwppbmRleCA4NDNlMDcyLi4wMDEzZjFlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaW5jbHVkZUVycm9yUGFnZUFmdGVyUmVzcG9uc2VDb21taXQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaW5jbHVkZUVycm9yUGFnZUFmdGVyUmVzcG9uc2VDb21taXQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1lcnJvci1wYWdlLWFmdGVyLXJlc3BvbnNlLWNvbW1pdCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2luY2x1ZGVFcnJvclBhZ2VBZnRlclJlc3BvbnNlQ29tbWl0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9pbmNsdWRlRXJyb3JQYWdlQWZ0ZXJSZXNwb25zZUNvbW1pdC9idWlsZC54bWwKaW5kZXggMDBhZTcxMS4uZmQ0ZmZkZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2luY2x1ZGVFcnJvclBhZ2VBZnRlclJlc3BvbnNlQ29tbWl0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaW5jbHVkZUVycm9yUGFnZUFmdGVyUmVzcG9uc2VDb21taXQvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgICA8ZGVsZXRlIGZpbGU9IldlYlRlc3QuY2xhc3MiLz4KICAgICAgIDxkZWxldGUgZmlsZT0iUmVwUnVuQ29uZi50eHQiLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwyMyArNDQsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MiwxMCArNzIsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaW5kZXgvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2luZGV4L1dlYlRlc3QuamF2YQppbmRleCBiN2JlM2Y2Li5iYjZlYjA4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaW5kZXgvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9pbmRleC9XZWJUZXN0LmphdmEKQEAgLTI2LDggKzI2LDggQEAKICAgICBwcml2YXRlIHN0YXRpYyBVUkxDb25uZWN0aW9uIGNvbm4gPSBudWxsOwogICAgIHByaXZhdGUgc3RhdGljIFVSTCB1cmw7CiAgICAgcHJpdmF0ZSBzdGF0aWMgT2JqZWN0T3V0cHV0U3RyZWFtIG9iamVjdFdyaXRlciA9IG51bGw7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgT2JqZWN0SW5wdXRTdHJlYW0gb2JqZWN0UmVhZGVyID0gbnVsbDsgIAotICAgIAorICAgIHByaXZhdGUgc3RhdGljIE9iamVjdElucHV0U3RyZWFtIG9iamVjdFJlYWRlciA9IG51bGw7CisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB0aHJvd3MgRXhjZXB0aW9uewogICAgICAgICBTdHJpbmcgaG9zdCA9IGFyZ3NbMF07CiAgICAgICAgIFN0cmluZyBwb3J0ID0gYXJnc1sxXTsKQEAgLTQ0LDEyICs0NCwxMiBAQAogICAgICAgICAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIHVybENvbm5lY3Rpb24gPSAoSHR0cFVSTENvbm5lY3Rpb24pY29ubjsKICAgICAgICAgICAgICAgICB1cmxDb25uZWN0aW9uLnNldERvT3V0cHV0KHRydWUpOwogCi0gICAgICAgICAgICAgICAgRGF0YU91dHB1dFN0cmVhbSBvdXQgPSAKKyAgICAgICAgICAgICAgICBEYXRhT3V0cHV0U3RyZWFtIG91dCA9CiAgICAgICAgICAgICAgICAgICAgbmV3IERhdGFPdXRwdXRTdHJlYW0odXJsQ29ubmVjdGlvbi5nZXRPdXRwdXRTdHJlYW0oKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGVCeXRlKDEpOwogCiAgICAgICAgICAgICAgICBpbnQgcmVzcG9uc2VDb2RlPSAgdXJsQ29ubmVjdGlvbi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzcG9uc2UgY29kZTogIiArIHJlc3BvbnNlQ29kZSArICIgRXhwZWN0ZWQgY29kZTogMjAwIik7IAorICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXNwb25zZSBjb2RlOiAiICsgcmVzcG9uc2VDb2RlICsgIiBFeHBlY3RlZCBjb2RlOiAyMDAiKTsKICAgICAgICAgICAgICAgIGlmICh1cmxDb25uZWN0aW9uLmdldFJlc3BvbnNlQ29kZSgpICE9IDIwMCl7CiAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJpbmRleCIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2luZGV4L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaW5kZXgvYnVpbGQucHJvcGVydGllcwppbmRleCA5YjU2MjA0Li4wYmQ4MzVhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaW5kZXgvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaW5kZXgvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTQgKzE1LDE0IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWluZGV4Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1pbmRleCIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii93ZWItaW5kZXgiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9pbmRleC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaW5kZXgvYnVpbGQueG1sCmluZGV4IGQ5ZTAyMzQuLmZkYWY4ZmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9pbmRleC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2luZGV4L2J1aWxkLnhtbApAQCAtMzMsNyArMzMsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgPC90YXJnZXQ+CiAKQEAgLTQyLDExICs0MiwxMSBAQAogICAgICAgICAgICAgc3JjZGlyPSIuIgogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgPC90YXJnZXQ+IAorICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTU4LDkgKzU4LDkgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9pbnN0YWxsYXRpb25QYXRoRGlzY2xvc3VyZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaW5zdGFsbGF0aW9uUGF0aERpc2Nsb3N1cmUvV2ViVGVzdC5qYXZhCmluZGV4IDllYWFiMTMuLjAwM2VlYWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9pbnN0YWxsYXRpb25QYXRoRGlzY2xvc3VyZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2luc3RhbGxhdGlvblBhdGhEaXNjbG9zdXJlL1dlYlRlc3QuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogICAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAgICAgcHJpdmF0ZSBzdGF0aWMgVVJMQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKICAgICBwcml2YXRlIHN0YXRpYyBVUkwgdXJsOwotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgdGhyb3dzIEV4Y2VwdGlvbnsKICAgICAgICAgU3RyaW5nIGhvc3QgPSBhcmdzWzBdOwogICAgICAgICBTdHJpbmcgcG9ydCA9IGFyZ3NbMV07CkBAIC00Nyw3ICs0Nyw3IEBACiAgICAgICAgICAgICAgICAgd3JpdGVPbmVCeXRlKHVybENvbm5lY3Rpb24pOwogCiAgICAgICAgICAgICAgICAgaW50IHJlc3BvbnNlQ29kZT0gIHVybENvbm5lY3Rpb24uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnN0YWxsYXRpb25QYXRoRGlzY2xvc3VyZTogIiArIHJlc3BvbnNlQ29kZSArICIgRXhwZWN0ZWQgY29kZTogNDBYIik7IAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW5zdGFsbGF0aW9uUGF0aERpc2Nsb3N1cmU6ICIgKyByZXNwb25zZUNvZGUgKyAiIEV4cGVjdGVkIGNvZGU6IDQwWCIpOwogICAgICAgICAgICAgICAgIGlmICh1cmxDb25uZWN0aW9uLmdldFJlc3BvbnNlQ29kZSgpID49IDQwMCAmJiB1cmxDb25uZWN0aW9uLmdldFJlc3BvbnNlQ29kZSgpIDwgNTAwKXsKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIlRlc3QgaW5zdGFsbGF0aW9uUGF0aERpc2Nsb3N1cmUiLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC02NSw3ICs2NSw3IEBACiAgICAgICAgICAgICAgICAgd3JpdGVPbmVCeXRlKHVybENvbm5lY3Rpb24pOwogCiAgICAgICAgICAgICAgICAgaW50IHJlc3BvbnNlQ29kZT0gIHVybENvbm5lY3Rpb24uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnN0YWxsYXRpb25QYXRoRGlzY2xvc3VyZTogIiArIHJlc3BvbnNlQ29kZSArICIgRXhwZWN0ZWQgY29kZTogNDBYIik7IAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW5zdGFsbGF0aW9uUGF0aERpc2Nsb3N1cmU6ICIgKyByZXNwb25zZUNvZGUgKyAiIEV4cGVjdGVkIGNvZGU6IDQwWCIpOwogICAgICAgICAgICAgICAgIGlmICh1cmxDb25uZWN0aW9uLmdldFJlc3BvbnNlQ29kZSgpID49IDQwMCAmJiB1cmxDb25uZWN0aW9uLmdldFJlc3BvbnNlQ29kZSgpIDwgNTAwKXsKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIlRlc3QgaW5zdGFsbGF0aW9uUGF0aERpc2Nsb3N1cmUtd3JvbmdVcmwiLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaW5zdGFsbGF0aW9uUGF0aERpc2Nsb3N1cmUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9pbnN0YWxsYXRpb25QYXRoRGlzY2xvc3VyZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGYwZGI4NDUuLjFlODA0YmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9pbnN0YWxsYXRpb25QYXRoRGlzY2xvc3VyZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9pbnN0YWxsYXRpb25QYXRoRGlzY2xvc3VyZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNCArMTUsMTQgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0taW5zdGFsbGF0aW9uUGF0aERpc2Nsb3N1cmUiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWluc3RhbGxhdGlvblBhdGhEaXNjbG9zdXJlIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iL3dlYi1pbnN0YWxsYXRpb25QYXRoRGlzY2xvc3VyZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2luc3RhbGxhdGlvblBhdGhEaXNjbG9zdXJlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9pbnN0YWxsYXRpb25QYXRoRGlzY2xvc3VyZS9idWlsZC54bWwKaW5kZXggZDllMDIzNC4uZmRhZjhmZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2luc3RhbGxhdGlvblBhdGhEaXNjbG9zdXJlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaW5zdGFsbGF0aW9uUGF0aERpc2Nsb3N1cmUvYnVpbGQueG1sCkBAIC0zMyw3ICszMyw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICA8L3RhcmdldD4KIApAQCAtNDIsMTEgKzQyLDExIEBACiAgICAgICAgICAgICBzcmNkaXI9Ii4iCiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICA8L3RhcmdldD4gCisgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNTgsOSArNTgsOSBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2luc3RhbmNlSHR0cFBvcnREeW5hbWljUmVjb25maWcvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2luc3RhbmNlSHR0cFBvcnREeW5hbWljUmVjb25maWcvV2ViVGVzdC5qYXZhCmluZGV4IDBjYjhiYTIuLjBlNGNlZjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9pbnN0YW5jZUh0dHBQb3J0RHluYW1pY1JlY29uZmlnL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaW5zdGFuY2VIdHRwUG9ydER5bmFtaWNSZWNvbmZpZy9XZWJUZXN0LmphdmEKQEAgLTIyLDcgKzIyLDcgQEAKICAqIFVuaXQgdGVzdCBmb3I6CiAgKgogICogICBodHRwOi8vamF2YS5uZXQvamlyYS9icm93c2UvR0xBU1NGSVNILTE2MDEzCi0gKiAgICgiUmVzdGFydFJlcXVpcmVkOiBjaGFuZ2luZyBodHRwIHBvcnQgZG9lcyBub3QgdHJpZ2dlciByZXN0YXJ0IHJlcXVpcmVkIG1lc3NhZ2UgCisgKiAgICgiUmVzdGFydFJlcXVpcmVkOiBjaGFuZ2luZyBodHRwIHBvcnQgZG9lcyBub3QgdHJpZ2dlciByZXN0YXJ0IHJlcXVpcmVkIG1lc3NhZ2UKICAqICAgZm9yIGEgc3RhbmRhbG9uZSBpbnN0YW5jZSIpCiAgKi8KIHB1YmxpYyBjbGFzcyBXZWJUZXN0IHsKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICAgICAgbG9jYXRpb24gPSBhcmdzWzNdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbNF07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEdsYXNzRmlzaCBJc3N1ZSAxNjAxMyIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTU1LDggKzU1LDggQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpAQCAtNjYsMTMgKzY2LDEzIEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKLSAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBuZXdQb3J0ICsgY29udGV4dFJvb3QpOyAKKworICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIG5ld1BvcnQgKyBjb250ZXh0Um9vdCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyAuLi4gIit1cmwpOwogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgY29ubi5jb25uZWN0KCk7CiAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgeyAKKyAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlIGNvZGUuIEV4cGVjdGVkOiAyMDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgcmVjZWl2ZWQ6ICIgKyByZXNwb25zZUNvZGUpOwogICAgICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2luc3RhbmNlSHR0cFBvcnREeW5hbWljUmVjb25maWcvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9pbnN0YW5jZUh0dHBQb3J0RHluYW1pY1JlY29uZmlnL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggY2IxYmNmZC4uNzBhMGU1MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2luc3RhbmNlSHR0cFBvcnREeW5hbWljUmVjb25maWcvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaW5zdGFuY2VIdHRwUG9ydER5bmFtaWNSZWNvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWluc3RhbmNlLWh0dHAtcG9ydC1keW5hbWljLXJlY29uZmlnIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaW5zdGFuY2VIdHRwUG9ydER5bmFtaWNSZWNvbmZpZy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaW5zdGFuY2VIdHRwUG9ydER5bmFtaWNSZWNvbmZpZy9idWlsZC54bWwKaW5kZXggODI1NjhmNS4uZGVkZDY0ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2luc3RhbmNlSHR0cFBvcnREeW5hbWljUmVjb25maWcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9pbnN0YW5jZUh0dHBQb3J0RHluYW1pY1JlY29uZmlnL2J1aWxkLnhtbApAQCAtMzgsNyArMzgsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDYsMTUgKzQ2LDE1IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1pbnN0YW5jZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNyZWF0ZS1pbnN0YW5jZS1jb21tb24iLz4KQEAgLTc5LDEzICs3OSwxMyBAQAogICAgICAgICAgICAgICAgdmFsdWU9Ii0tdGFyZ2V0ICR7aW5zdGFuY2UubmFtZX0gSFRUUF9MSVNURU5FUl9QT1JUPSR7aW5zdGFuY2UuaHR0cC5wb3J0LjJ9Ii8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1pbnN0YW5jZSIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtOTksMTAgKzk5LDEwIEBACiAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1pbnN0YW5jZSIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaW52b2tlclNlcnZsZXREaXNhYmxlZC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaW52b2tlclNlcnZsZXREaXNhYmxlZC9XZWJUZXN0LmphdmEKaW5kZXggZWU0MmI5My4uNjhmYjAwNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ludm9rZXJTZXJ2bGV0RGlzYWJsZWQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9pbnZva2VyU2VydmxldERpc2FibGVkL1dlYlRlc3QuamF2YQpAQCAtMjUsMTAgKzI1LDEwIEBACiAgKiBkaXNhYmxlZC4KICAqCiAgKiBUaGlzIGNsaWVudCBhdHRlbXB0cyB0byBjb25uZWN0IHRvIHRoaXMgVVJMOgotICogCisgKgogICogICBodHRwOi8vPGhvc3Q+Ojxwb3J0Pi93ZWItaW52b2tlci1zZXJ2bGV0LWRpc2FibGVkL3NlcnZsZXQvVGVzdFNlcnZsZXQKICAqCi0gKiB3aGljaCBtdXN0IHJlc3VsdCBpbiBhIDQwNCwgYmVjYXVzZSB0aGUgdGVzdCBzZXJ2bGV0IGlzIG1hcHBlZCB0byB0aGlzIAorICogd2hpY2ggbXVzdCByZXN1bHQgaW4gYSA0MDQsIGJlY2F1c2UgdGhlIHRlc3Qgc2VydmxldCBpcyBtYXBwZWQgdG8gdGhpcwogICogdXJsLXBhdHRlcm4gaW4gd2ViLnhtbDogL1Rlc3RTZXJ2bGV0LCBpbnN0ZWFkIG9mIC9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LgogICoKICAqIFRoZSBjbGllbnQgd2lsbCBiZSBhYmxlIHRvIGNvbm5lY3Qgc3VjY2Vzc2Z1bGx5IHRvIHRoZSBhYm92ZSBVUkwgb25seSBpZiB0aGUKQEAgLTQ5LDcgKzQ5LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgQnVndHJhcSA0OTQ0MTYwIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTgsMjAgKzU4LDIwIEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbnVsbDsKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IG51bGw7CiAgICAgICAgIGludCByZXNwb25zZUNvZGU7CiAgICAgICAgIGJvb2xlYW4gZmFpbCA9IGZhbHNlOwogCi0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIENvbm5lY3QgdG8gdGhlIHdyb25nIG1hcHBpbmcuCiAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICogVGhpcyB3aWxsIHdvcmsgb25seSBpZiB0aGUgSW52b2tlclNlcnZsZXQgaW4gZGVmYXVsdC13ZWIueG1sCiAgICAgICAgICAgICAgKiBoYXMgYmVlbiBlbmFibGVkLCBhbmQgdGhlcmVmb3JlIG11c3QgZmFpbCAod2l0aCBhIDQwNCByZXNwb25zZQogICAgICAgICAgICAgICogY29kZSkgc2luY2UgdGhlIEludm9rZXJTZXJ2bGV0IHNob3VsZCBub3QgaGF2ZSBiZWVuIGVuYWJsZWQuCi0gICAgICAgICAgICAgKi8gCisgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgKyAiL3NlcnZsZXQvVGVzdFNlcnZsZXQiKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9pbnZva2VyU2VydmxldERpc2FibGVkL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaW52b2tlclNlcnZsZXREaXNhYmxlZC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGI5ZGQ4M2IuLmY1YjIxYjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9pbnZva2VyU2VydmxldERpc2FibGVkL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ludm9rZXJTZXJ2bGV0RGlzYWJsZWQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWludm9rZXItc2VydmxldC1kaXNhYmxlZCIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0taW52b2tlci1zZXJ2bGV0LWRpc2FibGVkIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvJHthcHBuYW1lfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ludm9rZXJTZXJ2bGV0RGlzYWJsZWQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ludm9rZXJTZXJ2bGV0RGlzYWJsZWQvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9pbnZva2VyU2VydmxldERpc2FibGVkL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaW52b2tlclNlcnZsZXREaXNhYmxlZC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaW52b2tlclNlcnZsZXREaXNhYmxlZC9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaW52b2tlclNlcnZsZXREaXNhYmxlZC9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggMjhhZjc5ZC4uYzlhMDUwOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2ludm9rZXJTZXJ2bGV0RGlzYWJsZWQvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9pbnZva2VyU2VydmxldERpc2FibGVkL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjYsNyArMjYsNyBAQAogICAgIDxzZXJ2bGV0PgogICAgICAgICA8c2VydmxldC1uYW1lPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuVGVzdFNlcnZsZXQ8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCisgICAgPC9zZXJ2bGV0PgogCiAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvaW52b2tlclNlcnZsZXREaXNhYmxlZC9zZXJ2bGV0L3Rlc3QvVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9pbnZva2VyU2VydmxldERpc2FibGVkL3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhCmluZGV4IDY1Y2NiMTAuLmM1MzQyODEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9pbnZva2VyU2VydmxldERpc2FibGVkL3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9pbnZva2VyU2VydmxldERpc2FibGVkL3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhCkBAIC0yNSw2ICsyNSw2IEBACiAgICAgcHVibGljIHZvaWQgc2VydmljZShIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlcykKICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uIHsKIAotCWdldFNlcnZsZXRDb250ZXh0KCkubG9nKCJUaGlzIHNlcnZsZXQgc2hvdWxkIG5vdCBoYXZlIGJlZW4gaW52b2tlZCIpOworICAgIGdldFNlcnZsZXRDb250ZXh0KCkubG9nKCJUaGlzIHNlcnZsZXQgc2hvdWxkIG5vdCBoYXZlIGJlZW4gaW52b2tlZCIpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qYXZheFNlcnZsZXRFcnJvclJlcXVlc3RVcmlEeW5hbWljUmVzb3VyY2UvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2phdmF4U2VydmxldEVycm9yUmVxdWVzdFVyaUR5bmFtaWNSZXNvdXJjZS9XZWJUZXN0LmphdmEKaW5kZXggNTFmMmIxOC4uMWFlNjU5ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2phdmF4U2VydmxldEVycm9yUmVxdWVzdFVyaUR5bmFtaWNSZXNvdXJjZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2phdmF4U2VydmxldEVycm9yUmVxdWVzdFVyaUR5bmFtaWNSZXNvdXJjZS9XZWJUZXN0LmphdmEKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgNDg4Mjk5NiIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTYxLDE0ICs2MSwxNCBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotIAorCiAgICAgICAgIFNvY2tldCBzb2NrID0gbmV3IFNvY2tldChob3N0LCBuZXcgSW50ZWdlcihwb3J0KS5pbnRWYWx1ZSgpKTsKICAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gc29jay5nZXRPdXRwdXRTdHJlYW0oKTsKICAgICAgICAgU3RyaW5nIGdldCA9ICJHRVQgIiArIGNvbnRleHRSb290ICsgIi9qdW5rLmpzcCBIVFRQLzEuMFxuIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGdldCk7CiAgICAgICAgIG9zLndyaXRlKGdldC5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJpcyA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2phdmF4U2VydmxldEVycm9yUmVxdWVzdFVyaUR5bmFtaWNSZXNvdXJjZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2phdmF4U2VydmxldEVycm9yUmVxdWVzdFVyaUR5bmFtaWNSZXNvdXJjZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGI3YzEzMTEuLjkzMzBmYmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qYXZheFNlcnZsZXRFcnJvclJlcXVlc3RVcmlEeW5hbWljUmVzb3VyY2UvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvamF2YXhTZXJ2bGV0RXJyb3JSZXF1ZXN0VXJpRHluYW1pY1Jlc291cmNlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tamF2YXgtc2VydmxldC1lcnJvci1yZXF1ZXN0LXVyaS1keW5hbWljLXJlc291cmNlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvamF2YXhTZXJ2bGV0RXJyb3JSZXF1ZXN0VXJpRHluYW1pY1Jlc291cmNlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qYXZheFNlcnZsZXRFcnJvclJlcXVlc3RVcmlEeW5hbWljUmVzb3VyY2UvYnVpbGQueG1sCmluZGV4IDg1NDJlOTEuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qYXZheFNlcnZsZXRFcnJvclJlcXVlc3RVcmlEeW5hbWljUmVzb3VyY2UvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qYXZheFNlcnZsZXRFcnJvclJlcXVlc3RVcmlEeW5hbWljUmVzb3VyY2UvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxNyArNDIsMTcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIAogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qYXZheFNlcnZsZXRFcnJvclJlcXVlc3RVcmlTdGF0aWNSZXNvdXJjZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvamF2YXhTZXJ2bGV0RXJyb3JSZXF1ZXN0VXJpU3RhdGljUmVzb3VyY2UvV2ViVGVzdC5qYXZhCmluZGV4IDkzYTczODQuLmMzMmU2ZjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qYXZheFNlcnZsZXRFcnJvclJlcXVlc3RVcmlTdGF0aWNSZXNvdXJjZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2phdmF4U2VydmxldEVycm9yUmVxdWVzdFVyaVN0YXRpY1Jlc291cmNlL1dlYlRlc3QuamF2YQpAQCAtNDcsNyArNDcsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciA0ODgyOTk2Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNjgsNyArNjgsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CkBAIC0xMTEsOCArMTExLDggQEAKICAgICAgICAgICAgIGlmIChsaW5lID09IG51bGwgfHwKICAgICAgICAgICAgICAgICAgICAgKCFsaW5lLmVxdWFscygiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dFJvb3QgKyAiLzQwNGhhbmRsZXIuanNwIikgJiYKLSAgICAgICAgICAgICAgICAgICAgIWxpbmUuZXF1YWxzKCJodHRwOi8vIiArIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXRBZGRyZXNzLmdldExvY2FsSG9zdCgpLmdldEhvc3ROYW1lKCkgKyAKKyAgICAgICAgICAgICAgICAgICAgIWxpbmUuZXF1YWxzKCJodHRwOi8vIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5ldEFkZHJlc3MuZ2V0TG9jYWxIb3N0KCkuZ2V0SG9zdE5hbWUoKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjoiICsgcG9ydCArIGNvbnRleHRSb290ICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLzQwNGhhbmRsZXIuanNwIikpKSB7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiVW5leHBlY3RlZCByZXNwb25zZSIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2phdmF4U2VydmxldEVycm9yUmVxdWVzdFVyaVN0YXRpY1Jlc291cmNlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvamF2YXhTZXJ2bGV0RXJyb3JSZXF1ZXN0VXJpU3RhdGljUmVzb3VyY2UvYnVpbGQucHJvcGVydGllcwppbmRleCA3MjM0MGJjLi5hYzA4YjlhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvamF2YXhTZXJ2bGV0RXJyb3JSZXF1ZXN0VXJpU3RhdGljUmVzb3VyY2UvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvamF2YXhTZXJ2bGV0RXJyb3JSZXF1ZXN0VXJpU3RhdGljUmVzb3VyY2UvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qYXZheC1zZXJ2bGV0LWVycm9yLXJlcXVlc3QtdXJpLXN0YXRpYy1yZXNvdXJjZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2phdmF4U2VydmxldEVycm9yUmVxdWVzdFVyaVN0YXRpY1Jlc291cmNlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qYXZheFNlcnZsZXRFcnJvclJlcXVlc3RVcmlTdGF0aWNSZXNvdXJjZS9idWlsZC54bWwKaW5kZXggODU0MmU5MS4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2phdmF4U2VydmxldEVycm9yUmVxdWVzdFVyaVN0YXRpY1Jlc291cmNlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvamF2YXhTZXJ2bGV0RXJyb3JSZXF1ZXN0VXJpU3RhdGljUmVzb3VyY2UvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxNyArNDIsMTcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIAogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qbXhVbmRlcGxveUV2ZW50L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qbXhVbmRlcGxveUV2ZW50L1dlYlRlc3QuamF2YQppbmRleCA0NmI1YTM1Li43NzVlMzUzZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pteFVuZGVwbG95RXZlbnQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qbXhVbmRlcGxveUV2ZW50L1dlYlRlc3QuamF2YQpAQCAtMjYsOCArMjYsOCBAQAogICAgIHByaXZhdGUgc3RhdGljIFVSTENvbm5lY3Rpb24gY29ubiA9IG51bGw7CiAgICAgcHJpdmF0ZSBzdGF0aWMgVVJMIHVybDsKICAgICBwcml2YXRlIHN0YXRpYyBPYmplY3RPdXRwdXRTdHJlYW0gb2JqZWN0V3JpdGVyID0gbnVsbDsKLSAgICBwcml2YXRlIHN0YXRpYyBPYmplY3RJbnB1dFN0cmVhbSBvYmplY3RSZWFkZXIgPSBudWxsOyAgCi0gICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgT2JqZWN0SW5wdXRTdHJlYW0gb2JqZWN0UmVhZGVyID0gbnVsbDsKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHRocm93cyBFeGNlcHRpb257CiAgICAgICAgIFN0cmluZyBob3N0ID0gYXJnc1swXTsKICAgICAgICAgU3RyaW5nIHBvcnQgPSBhcmdzWzFdOwpAQCAtMzUsNyArMzUsNyBAQAogCiAgICAgICAgIHRyeXsKICAgICAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIkpNWCB1bmRlcGxveW1lbnQgZXZlbnQgdGVzdC4iKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290ICsgIi9TZXJ2bGV0VGVzdCIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcbiBJbnZva2luZyB1cmw6ICIgKyB1cmwudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICBjb25uID0gdXJsLm9wZW5Db25uZWN0aW9uKCk7CkBAIC00MywxMyArNDMsMTMgQEAKICAgICAgICAgICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiB1cmxDb25uZWN0aW9uID0gKEh0dHBVUkxDb25uZWN0aW9uKWNvbm47CiAgICAgICAgICAgICAgICAgdXJsQ29ubmVjdGlvbi5zZXREb091dHB1dCh0cnVlKTsKIAotICAgICAgICAgICAgICAgIERhdGFPdXRwdXRTdHJlYW0gb3V0ID0gCisgICAgICAgICAgICAgICAgRGF0YU91dHB1dFN0cmVhbSBvdXQgPQogICAgICAgICAgICAgICAgICAgIG5ldyBEYXRhT3V0cHV0U3RyZWFtKHVybENvbm5lY3Rpb24uZ2V0T3V0cHV0U3RyZWFtKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlQnl0ZSgxKTsKIAogICAgICAgICAgICAgICAgaW50IHJlc3BvbnNlQ29kZT0gIHVybENvbm5lY3Rpb24uZ2V0UmVzcG9uc2VDb2RlKCk7CiAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInJlc3BvbnNlQ29kZTogIiArIHJlc3BvbnNlQ29kZSk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgIGlmICh1cmxDb25uZWN0aW9uLmdldFJlc3BvbnNlQ29kZSgpICE9IDQwNCl7CiAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJqbXhVbmRlcGxveUV2ZW50Iiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvam14VW5kZXBsb3lFdmVudC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pteFVuZGVwbG95RXZlbnQvYnVpbGQucHJvcGVydGllcwppbmRleCBiNzlhNzVkLi4wZmM2ZDljIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvam14VW5kZXBsb3lFdmVudC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qbXhVbmRlcGxveUV2ZW50L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE0ICsxNSwxNCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qbXhVbmRlcGxveUV2ZW50Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qbXhVbmRlcGxveUV2ZW50Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iL3dlYi1qbXhVbmRlcGxveUV2ZW50Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvam14VW5kZXBsb3lFdmVudC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvam14VW5kZXBsb3lFdmVudC9idWlsZC54bWwKaW5kZXggOTVjNmJlZi4uNzVkMDFhYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pteFVuZGVwbG95RXZlbnQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qbXhVbmRlcGxveUV2ZW50L2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTAgKzQyLDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCkBAIC01Myw4ICs1Myw4IEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTY0LDcgKzY0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pteFVuZGVwbG95RXZlbnQvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pteFVuZGVwbG95RXZlbnQvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDZiZTQwNzMuLjNkY2ZmN2UgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qbXhVbmRlcGxveUV2ZW50L2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvam14VW5kZXBsb3lFdmVudC9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTI3LDE0ICsyNywxNCBAQAogICAgICAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXRUZXN0PC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAKICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi9TZXJ2bGV0VGVzdDwvdXJsLXBhdHRlcm4+CiAgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiAKLSAgICAKKwogCiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qbXhVbmRlcGxveUV2ZW50L3NlcnZsZXQvU2VydmxldFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qbXhVbmRlcGxveUV2ZW50L3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQppbmRleCA3NTA4NjJiLi40M2JjOTExIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvam14VW5kZXBsb3lFdmVudC9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pteFVuZGVwbG95RXZlbnQvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiBpbXBvcnQgamF2YS5zcWwuKjsKIAogcHVibGljIGNsYXNzIFNlcnZsZXRUZXN0IGV4dGVuZHMgSHR0cFNlcnZsZXR7Ci0gICAKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmluaXRdIik7CkBAIC00Miw5ICs0Miw5IEBACiAgICAgICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAgICAgICAgCisgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmRvUG9zdF0iKTsKLSAgICAgICAgCisKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7CiAgICAgICAgIG91dC5wcmludGxuKCJqbXhVbmRlcGxveUV2ZW50OjpGQUlMIik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pyb3V0ZUlkSW5Db29raWVPclVSTC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pyb3V0ZUlkSW5Db29raWVPclVSTC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGExMzZkMDEuLjEyNzNjODYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qcm91dGVJZEluQ29va2llT3JVUkwvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanJvdXRlSWRJbkNvb2tpZU9yVVJML2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanJvdXRlLWlkLWluLWNvb2tpZS1vci11cmwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qcm91dGVJZEluQ29va2llT3JVUkwvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pyb3V0ZUlkSW5Db29raWVPclVSTC9idWlsZC54bWwKaW5kZXggMTIxMzU4YS4uNGIwNjYwYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pyb3V0ZUlkSW5Db29raWVPclVSTC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pyb3V0ZUlkSW5Db29raWVPclVSTC9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDI2ICs0NCwyNiBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIAogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAtcG9saWN5IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxtb3ZlIGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy8ke2FkbWluLmRvbWFpbn0vY29uZmlnL3NlcnZlci5wb2xpY3kiIAorICAgICAgICA8bW92ZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvJHthZG1pbi5kb21haW59L2NvbmZpZy9zZXJ2ZXIucG9saWN5IgogICAgICAgICAgICAgICB0b2ZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy8ke2FkbWluLmRvbWFpbn0vY29uZmlnL3NlcnZlci5wb2xpY3kuU0FWRSIvPgotICAgICAgICA8Y29weSBmaWxlPSJzZXJ2ZXIucG9saWN5IiAKKyAgICAgICAgPGNvcHkgZmlsZT0ic2VydmVyLnBvbGljeSIKICAgICAgICAgICAgICAgdG9maWxlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvJHthZG1pbi5kb21haW59L2NvbmZpZy9zZXJ2ZXIucG9saWN5Ii8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXItaW5zdGFuY2UtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC03MSw3ICs3MSw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTgzLDEzICs4MywxMyBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RvcmUtcG9saWN5IiBkZXBlbmRzPSJzZXR1cC1wb2xpY3kiPgotICAgICAgICA8bW92ZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvJHthZG1pbi5kb21haW59L2NvbmZpZy9zZXJ2ZXIucG9saWN5LlNBVkUiIAorICAgICAgICA8bW92ZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvJHthZG1pbi5kb21haW59L2NvbmZpZy9zZXJ2ZXIucG9saWN5LlNBVkUiCiAgICAgICAgICAgICAgIHRvZmlsZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zLyR7YWRtaW4uZG9tYWlufS9jb25maWcvc2VydmVyLnBvbGljeSIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQtc2VydmVyLWluc3RhbmNlLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzZXNzaW9uSWRQYXJhbWV0ZXIvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzZXNzaW9uSWRQYXJhbWV0ZXIvV2ViVGVzdC5qYXZhCmluZGV4IDhhNWE2OTIuLmNiYWU0OWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc2Vzc2lvbklkUGFyYW1ldGVyL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNlc3Npb25JZFBhcmFtZXRlci9XZWJUZXN0LmphdmEKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgSVQgMTMxMjkiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC02NCw3ICs2NCw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KGdldCk7CiAgICAgICAgICAgICBvcy53cml0ZShnZXQuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICAgICAgaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgICAgICBiaXMgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAKQEAgLTg1LDcgKzg1LDcgQEAKIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJzZXNzaW9uIGlkID0gIiArIGlkKTsKICAgICAgICAgICAgIHJldHVybiBpZDsKLQkgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIGlmIChiaXMgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgIGJpcy5jbG9zZSgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzZXNzaW9uSWRQYXJhbWV0ZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc2Vzc2lvbklkUGFyYW1ldGVyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZTJkMTVkNS4uMGFlMzI0MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzZXNzaW9uSWRQYXJhbWV0ZXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNlc3Npb25JZFBhcmFtZXRlci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw5ICsxNSw5IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzZXNzaW9uSWQtcGFyYW1ldGVyIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc2Vzc2lvbklkLXBhcmFtZXRlciIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvJHthcHBuYW1lfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzZXNzaW9uSWRQYXJhbWV0ZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzZXNzaW9uSWRQYXJhbWV0ZXIvYnVpbGQueG1sCmluZGV4IGY4MDUzY2QuLmIzOWQxN2MgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc2Vzc2lvbklkUGFyYW1ldGVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNlc3Npb25JZFBhcmFtZXRlci9idWlsZC54bWwKQEAgLTM2LDkgKzM2LDkgQEAKICAgICAgIDxkZWxldGUgZmlsZT0iV2ViVGVzdC5jbGFzcyIvPgogICAgICAgPGRlbGV0ZSBmaWxlPSJSZXBSdW5Db25mLnR4dCIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8L2FudGNhbGw+CkBAIC00NiwxNCArNDYsMTQgQEAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC02NSwxMCArNjUsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNmV2l0aEJ1bmRsZWRPbmVEb3RPbmVKYXJGaWxlcy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNmV2l0aEJ1bmRsZWRPbmVEb3RPbmVKYXJGaWxlcy9XZWJUZXN0LmphdmEKaW5kZXggMGE4ZTEyNS4uYWIwNGQ0NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzZldpdGhCdW5kbGVkT25lRG90T25lSmFyRmlsZXMvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc2ZXaXRoQnVuZGxlZE9uZURvdE9uZUphckZpbGVzL1dlYlRlc3QuamF2YQpAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEdsYXNzRmlzaCBJc3N1ZSA2NTEiKTsKQEAgLTU5LDExICs1OSwxMSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgICArIGNvbnRleHRSb290ICsgIi90ZXN0LmpzcCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CkBAIC04MiwxMCArODIsMTAgQEAKICAgICAgICAgICAgIGlmIChFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzZldpdGhCdW5kbGVkT25lRG90T25lSmFyRmlsZXMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc2ZXaXRoQnVuZGxlZE9uZURvdE9uZUphckZpbGVzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZTRiM2UxZS4uZTcxOTk3YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzZldpdGhCdW5kbGVkT25lRG90T25lSmFyRmlsZXMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNmV2l0aEJ1bmRsZWRPbmVEb3RPbmVKYXJGaWxlcy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzZi13aXRoLWJ1bmRsZWQtb25lLWRvdC1vbmUtamFyLWZpbGVzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNmV2l0aEJ1bmRsZWRPbmVEb3RPbmVKYXJGaWxlcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNmV2l0aEJ1bmRsZWRPbmVEb3RPbmVKYXJGaWxlcy9idWlsZC54bWwKaW5kZXggODU0MmU5MS4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzZldpdGhCdW5kbGVkT25lRG90T25lSmFyRmlsZXMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc2ZXaXRoQnVuZGxlZE9uZURvdE9uZUphckZpbGVzL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTcgKzQyLDE3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwLXNlY3VyaXR5L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3Atc2VjdXJpdHkvV2ViVGVzdC5qYXZhCmluZGV4IGFiZGQ2MjAuLjQ5M2ViOTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3Atc2VjdXJpdHkvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3Atc2VjdXJpdHkvV2ViVGVzdC5qYXZhCkBAIC0yNCwxMiArMjQsMTIgQEAKICAqIGlzIG5vdCBkZWZpbmVkIGluIHdlYi54bWwKICAqLwogcHVibGljIGNsYXNzIFdlYlRlc3QgewotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50ID0gMDsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgRVhQRUNURURfQ09VTlQgPSAxOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX05BTUUgPSAid2ViLWpzcC1zZWN1cml0eSI7CiAKLSAgICAKKwogICAgIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdD0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCkBAIC00MywxMyArNDMsMTMgQEAKIAogICAgICAgICBpbnQgcG9ydCA9IG5ldyBJbnRlZ2VyKHBvcnRTKS5pbnRWYWx1ZSgpOwogICAgICAgICBTdHJpbmcgbmFtZTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGdvR2V0KGhvc3QsIHBvcnQsIGNvbnRleHRSb290ICsgIi90ZXN0LmpzcCIgKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoY291bnQgIT0gRVhQRUNURURfQ09VTlQpewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKLSAgICAgICAgICAgIH0gICAgICAgICAgIAorICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHQuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKQEAgLTg0LDE4ICs4NCwxOCBAQAogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihsaW5lTnVtICsgIjogICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHN0YXR1cyA9IGxpbmUuc3Vic3RyaW5nKGluZGV4KzIpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLmVxdWFsc0lnbm9yZUNhc2UoIlBBU1MiKSl7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7ICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGxpbmVOdW0rKzsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGV4KXsKLSAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOyAgIAorICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJUZXN0IFVOUFJFRElDVEVELUZBSUxVUkUiKTsKICAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICB0cnkgewpAQCAtMTEyLDUgKzExMiw1IEBACiAgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBleCkge30KICAgICAgICAgfQogICAgfQotICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcC1zZWN1cml0eS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcC1zZWN1cml0eS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDU3OTY3MzcuLmFlY2ZlNjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3Atc2VjdXJpdHkvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwLXNlY3VyaXR5L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE0ICsxNSwxNCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3Atc2VjdXJpdHkiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC1zZWN1cml0eSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii93ZWItanNwLXNlY3VyaXR5Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwLXNlY3VyaXR5L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3Atc2VjdXJpdHkvYnVpbGQueG1sCmluZGV4IDNhNmM3NGYuLmY1NjFjMDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3Atc2VjdXJpdHkvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3Atc2VjdXJpdHkvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxMCArNDIsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjCkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCkBAIC02NCwxMSArNjQsMTEgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJncm91cHMiIHZhbHVlPSJBZG1pbiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtODAsMTAgKzgwLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVzdG9yZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLXVzZXItY29tbW9uIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BBbGxvd0Vycm9yUGFnZVRvU2V0UmVzcG9uc2VDaGFyc2V0SWZOb091dHB1dFdyaXR0ZW4vV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEFsbG93RXJyb3JQYWdlVG9TZXRSZXNwb25zZUNoYXJzZXRJZk5vT3V0cHV0V3JpdHRlbi9XZWJUZXN0LmphdmEKaW5kZXggZjI2YTUzNy4uYjkxMmNhOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEFsbG93RXJyb3JQYWdlVG9TZXRSZXNwb25zZUNoYXJzZXRJZk5vT3V0cHV0V3JpdHRlbi9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEFsbG93RXJyb3JQYWdlVG9TZXRSZXNwb25zZUNoYXJzZXRJZk5vT3V0cHV0V3JpdHRlbi9XZWJUZXN0LmphdmEKQEAgLTI5LDcgKzI5LDcgQEAKICAqIFRlc3QgYWNjZXNzZXMgNDAzLmpzcCwgd2hpY2ggc2V0cyB0aGUgcmVzcG9uc2UgY29kZSB0byA0MDMgYW5kIHRoZXJlZm9yZQogICogY2F1c2VzIGEgZm9yd2FyZCB0byB0aGUgZXJyb3I0MDMuanNwIGVycm9yIHBhZ2UsIHdoaWNoIHNldHMgdGhlIHJlc3BvbnNlCiAgKiBjb250ZW50IHR5cGUgdG8gdGV4dC94bWw7Y2hhcnNldD1TaGlmdF9KSVMuCi0gKiAKKyAqCiAgKiBUZXN0IHRoZW4gYWNjZXNzZXMgdGhyb3dhYmxlLmpzcCwgd2hpY2ggdGhyb3dzIGEgVGhyb3dhYmxlIGFuZCB0aGVyZWZvcmUKICAqIGNhdXNlcyBhIGZvcndhcmQgdG8gdGhlIGVycm9yVGhyb3dhYmxlLmpzcCBlcnJvciBwYWdlLCB3aGljaCBzZXRzIHRoZQogICogcmVzcG9uc2UgY29udGVudCB0eXBlIHRvIHRleHQveG1sO2NoYXJzZXQ9U2hpZnRfSklTLgpAQCAtNTcsNyArNTcsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBHbGFzc0Zpc2ggSXNzdWUgODE1Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNjUsOCArNjUsOCBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoIi80MDMuanNwIiwgIkhUVFAvMS4xIDQwMyIpOwogICAgICAgICAgICAgaW52b2tlKCIvdGhyb3dhYmxlLmpzcCIsICJIVFRQLzEuMSA1MDAiKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BBbGxvd0Vycm9yUGFnZVRvU2V0UmVzcG9uc2VDaGFyc2V0SWZOb091dHB1dFdyaXR0ZW4vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BBbGxvd0Vycm9yUGFnZVRvU2V0UmVzcG9uc2VDaGFyc2V0SWZOb091dHB1dFdyaXR0ZW4vYnVpbGQucHJvcGVydGllcwppbmRleCAxYWE0NTJlLi43MDAxYjBiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQWxsb3dFcnJvclBhZ2VUb1NldFJlc3BvbnNlQ2hhcnNldElmTm9PdXRwdXRXcml0dGVuL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEFsbG93RXJyb3JQYWdlVG9TZXRSZXNwb25zZUNoYXJzZXRJZk5vT3V0cHV0V3JpdHRlbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC1hbGxvdy1lcnJvci1wYWdlLXRvLXNldC1yZXNwb25zZS1jaGFyc2V0LWlmLW5vLW91dHB1dC13cml0dGVuIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQWxsb3dFcnJvclBhZ2VUb1NldFJlc3BvbnNlQ2hhcnNldElmTm9PdXRwdXRXcml0dGVuL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BBbGxvd0Vycm9yUGFnZVRvU2V0UmVzcG9uc2VDaGFyc2V0SWZOb091dHB1dFdyaXR0ZW4vYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BBbGxvd0Vycm9yUGFnZVRvU2V0UmVzcG9uc2VDaGFyc2V0SWZOb091dHB1dFdyaXR0ZW4vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BBbGxvd0Vycm9yUGFnZVRvU2V0UmVzcG9uc2VDaGFyc2V0SWZOb091dHB1dFdyaXR0ZW4vYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEFub255bW91c0NsYXNzL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BBbm9ueW1vdXNDbGFzcy9XZWJUZXN0LmphdmEKaW5kZXggNzJhNGJhNy4uZWVhZmI5OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEFub255bW91c0NsYXNzL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQW5vbnltb3VzQ2xhc3MvV2ViVGVzdC5qYXZhCkBAIC0zOCw3ICszOCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgNjIwMjI5MCIpOwpAQCAtNTEsMTEgKzUxLDExIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL2pzcC90ZXN0LmpzcCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQW5vbnltb3VzQ2xhc3MvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BBbm9ueW1vdXNDbGFzcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDFmYTBjMmEuLjFmMzZlMzIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BBbm9ueW1vdXNDbGFzcy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BBbm9ueW1vdXNDbGFzcy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC1hbm9ueW1vdXMtY2xhc3MiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BBbm9ueW1vdXNDbGFzcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQW5vbnltb3VzQ2xhc3MvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BBbm9ueW1vdXNDbGFzcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEFub255bW91c0NsYXNzL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BBdHRyaWJ1dGVOYW1lV2l0aENvbG9uT3JEb3QvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEF0dHJpYnV0ZU5hbWVXaXRoQ29sb25PckRvdC9XZWJUZXN0LmphdmEKaW5kZXggNzRjNWQ3My4uNTMyOGFhNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEF0dHJpYnV0ZU5hbWVXaXRoQ29sb25PckRvdC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEF0dHJpYnV0ZU5hbWVXaXRoQ29sb25PckRvdC9XZWJUZXN0LmphdmEKQEAgLTQxLDI1ICs0MSwyNSBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBCdWd6aWxsYSAyODM4MCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKICAgICAgICAgd2ViVGVzdC5kb1Rlc3QoKTsKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogCiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJpcyA9IG51bGw7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGNvbnRleHRSb290ICsgIi9qc3AvL3Rlc3QuanNwIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogICAgICAgICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm4uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgeyAKKyAgICAgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJXcm9uZyByZXNwb25zZSBjb2RlLiBFeHBlY3RlZDogMjAwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIHJlY2VpdmVkOiAiICsgcmVzcG9uc2VDb2RlKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CkBAIC03Miw3ICs3Miw3IEBACiAgICAgICAgICAgICAgICAgd2hpbGUgKChsaW5lID0gYmlzLnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgbGFzdExpbmUgPSBsaW5lOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAKKwogICAgICAgICAgICAgICAgIGlmIChFWFBFQ1RFRC5lcXVhbHMobGFzdExpbmUpKSB7CiAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEF0dHJpYnV0ZU5hbWVXaXRoQ29sb25PckRvdC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEF0dHJpYnV0ZU5hbWVXaXRoQ29sb25PckRvdC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGE5ZjUyZjkuLmYyMmNjZTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BBdHRyaWJ1dGVOYW1lV2l0aENvbG9uT3JEb3QvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQXR0cmlidXRlTmFtZVdpdGhDb2xvbk9yRG90L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEzICsxNSwxMyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3AtYXR0cmlidXRlLW5hbWUtd2l0aC1jb2xvbi1vci1kb3QiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvJHthcHBuYW1lfSIvPgogPHByb3BlcnR5IG5hbWU9InRsZHMiIHZhbHVlPSJkZXNjcmlwdG9yL3RsZHMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BBdHRyaWJ1dGVOYW1lV2l0aENvbG9uT3JEb3QvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEF0dHJpYnV0ZU5hbWVXaXRoQ29sb25PckRvdC9idWlsZC54bWwKaW5kZXggODdkYmQ0Yy4uNWExZjBjNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEF0dHJpYnV0ZU5hbWVXaXRoQ29sb25PckRvdC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEF0dHJpYnV0ZU5hbWVXaXRoQ29sb25PckRvdC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDEwICs0MiwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgIDxqYXZhYwpAQCAtNTMsMTAgKzUzLDEwIEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjQsNyArNjQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQXR0cmlidXRlTmFtZVdpdGhDb2xvbk9yRG90L2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BBdHRyaWJ1dGVOYW1lV2l0aENvbG9uT3JEb3QvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDE3Yjk1MmQuLmQ0Y2JlODEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BBdHRyaWJ1dGVOYW1lV2l0aENvbG9uT3JEb3QvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BBdHRyaWJ1dGVOYW1lV2l0aENvbG9uT3JEb3QvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yNCw5ICsyNCw5IEBACiAKICAgICA8anNwLWNvbmZpZz4KICAgICAgICAgPHRhZ2xpYj4KLQkgICAgPHRhZ2xpYi11cmk+aHR0cDovL3MxYXMvbXl0YWdsaWI8L3RhZ2xpYi11cmk+Ci0JICAgIDx0YWdsaWItbG9jYXRpb24+L1dFQi1JTkYvdGxkcy9teS10YWdsaWIudGxkPC90YWdsaWItbG9jYXRpb24+Ci0JPC90YWdsaWI+CisgICAgICAgIDx0YWdsaWItdXJpPmh0dHA6Ly9zMWFzL215dGFnbGliPC90YWdsaWItdXJpPgorICAgICAgICA8dGFnbGliLWxvY2F0aW9uPi9XRUItSU5GL3RsZHMvbXktdGFnbGliLnRsZDwvdGFnbGliLWxvY2F0aW9uPgorICAgIDwvdGFnbGliPgogICAgIDwvanNwLWNvbmZpZz4KIAogPC93ZWItYXBwPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEF0dHJpYnV0ZU5hbWVXaXRoQ29sb25PckRvdC9zZXJ2bGV0L3RhZ2xpYi9FY2hvQXR0cmlidXRlc1RhZy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEF0dHJpYnV0ZU5hbWVXaXRoQ29sb25PckRvdC9zZXJ2bGV0L3RhZ2xpYi9FY2hvQXR0cmlidXRlc1RhZy5qYXZhCmluZGV4IDgyYmMzZTYuLjU1NmY4MjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BBdHRyaWJ1dGVOYW1lV2l0aENvbG9uT3JEb3Qvc2VydmxldC90YWdsaWIvRWNob0F0dHJpYnV0ZXNUYWcuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQXR0cmlidXRlTmFtZVdpdGhDb2xvbk9yRG90L3NlcnZsZXQvdGFnbGliL0VjaG9BdHRyaWJ1dGVzVGFnLmphdmEKQEAgLTI1LDkgKzI1LDkgQEAKIGltcG9ydCBqYWthcnRhLnNlcnZsZXQuanNwLnRhZ2V4dC5EeW5hbWljQXR0cmlidXRlczsKIAogLyoqCi0gKiBTaW1wbGVUYWcgaGFuZGxlciB0aGF0IGVjaG9lcyBhbGwgaXRzIGF0dHJpYnV0ZXMgCisgKiBTaW1wbGVUYWcgaGFuZGxlciB0aGF0IGVjaG9lcyBhbGwgaXRzIGF0dHJpYnV0ZXMKICAqLwotcHVibGljIGNsYXNzIEVjaG9BdHRyaWJ1dGVzVGFnIAorcHVibGljIGNsYXNzIEVjaG9BdHRyaWJ1dGVzVGFnCiAgICAgZXh0ZW5kcyBUYWdTdXBwb3J0CiAgICAgaW1wbGVtZW50cyBEeW5hbWljQXR0cmlidXRlcwogewpAQCAtNTAsMTYgKzUwLDE2IEBACiAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgiLCIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHsKLQkgICAgdGhyb3cgbmV3IEpzcEV4Y2VwdGlvbihpb2UudG9TdHJpbmcoKSwgaW9lKTsKLQl9Ci0gICAgICAKKyAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHsKKyAgICAgICAgdGhyb3cgbmV3IEpzcEV4Y2VwdGlvbihpb2UudG9TdHJpbmcoKSwgaW9lKTsKKyAgICB9CisKIAogICAgICAgICByZXR1cm4gRVZBTF9QQUdFOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldER5bmFtaWNBdHRyaWJ1dGUoU3RyaW5nIHVyaSwgU3RyaW5nIGxvY2FsTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdCB2YWx1ZSkgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QgdmFsdWUpCiAgICAgICAgICAgICB0aHJvd3MgSnNwRXhjZXB0aW9uCiAgICAgewogICAgICAgICBrZXlzLmFkZChsb2NhbE5hbWUpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEJvbUluQ2xhc3NpY1N5bnRheC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQm9tSW5DbGFzc2ljU3ludGF4L1dlYlRlc3QuamF2YQppbmRleCBjNWI3NGNlLi5lYzIyNGNkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQm9tSW5DbGFzc2ljU3ludGF4L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQm9tSW5DbGFzc2ljU3ludGF4L1dlYlRlc3QuamF2YQpAQCAtMjQsOCArMjQsOCBAQAogICogRWFjaCBvZiB0aGUgSlNQIHBhZ2VzIGFjY2Vzc2VkIGJ5IHRoaXMgdGVzdCBpcyBwcmVjZWRlZCBieSBhIEJPTSBmcm9tCiAgKiB3aGljaCB0aGUgSlNQIGNvbnRhaW5lciBkZXJpdmVzIHRoZSBwYWdlIGVuY29kaW5nOgogICoKLSAqICBQYWdlICAgICAgICAgICBQYWdlIEVuY29kaW5nICAgICAgICAgIEJ5dGVzICAgICAgICAgCi0gKiAgVVRGLTE2QkUuanNwICAgVVRGLTE2LCBiaWctZW5kaWFuICAgICBGRSBGRiAgICAgICAgIAorICogIFBhZ2UgICAgICAgICAgIFBhZ2UgRW5jb2RpbmcgICAgICAgICAgQnl0ZXMKKyAqICBVVEYtMTZCRS5qc3AgICBVVEYtMTYsIGJpZy1lbmRpYW4gICAgIEZFIEZGCiAgKiAgVVRGLTE2TEUuanNwICAgVVRGLTE2LCBsaXR0bGUtZW5kaWFuICBGRiBGRQogICogIFVURi04LmpzcCAgICAgIFVURi04ICAgICAgICAgICAgICAgICAgRUYgQkIgQkYKICAqCkBAIC01OCw3ICs1OCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgQk9NIGluIEpTUCBjbGFzc2ljIHN5bnRheCIpOwpAQCAtODYsMTQgKzg2LDE0IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICAvKgogICAgICAqIEByZXR1cm4gdHJ1ZSBpZiBwYXNzZWQsIGZhbHNlIGlmIGZhaWxlZAogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGRvVGVzdChTdHJpbmcganNwUGFnZSkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gbnVsbDsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgaW5wdXQgPSBudWxsOwogICAgICAgICB0cnkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEJvbUluQ2xhc3NpY1N5bnRheC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQm9tSW5DbGFzc2ljU3ludGF4L2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQm9tSW5DbGFzc2ljU3ludGF4L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQm9tSW5DbGFzc2ljU3ludGF4L2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BCb21JbkNsYXNzaWNTeW50YXhFbmNvZGluZ01pc21hdGNoSnNwQ29uZmlnL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BCb21JbkNsYXNzaWNTeW50YXhFbmNvZGluZ01pc21hdGNoSnNwQ29uZmlnL1dlYlRlc3QuamF2YQppbmRleCAwM2M0ZDEwLi5jMzFiZWY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQm9tSW5DbGFzc2ljU3ludGF4RW5jb2RpbmdNaXNtYXRjaEpzcENvbmZpZy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEJvbUluQ2xhc3NpY1N5bnRheEVuY29kaW5nTWlzbWF0Y2hKc3BDb25maWcvV2ViVGVzdC5qYXZhCkBAIC0yMyw3ICsyMyw3IEBACiAgKgogICogVGhpcyB0ZXN0IGVuZm9yY2VzIHRoYXQgYSB0cmFuc2xhdGlvbiBlcnJvciBiZSByZXBvcnRlZCBpZiB0aGUgcGFnZQogICogZW5jb2RpbmcgaWRlbnRpZmllZCBieSBhIEJPTSAoaW4gdGhpcyBjYXNlOiBVVEYtMTZCRSkgZG9lcyBub3QgbWF0Y2ggdGhlCi0gKiBwYWdlIGVuY29kaW5nIGRlcml2ZWQgZnJvbSBqc3AgY29uZmlndXJhdGlvbiBlbGVtZW50IHBhZ2UtZW5jb2RpbmcgCisgKiBwYWdlIGVuY29kaW5nIGRlcml2ZWQgZnJvbSBqc3AgY29uZmlndXJhdGlvbiBlbGVtZW50IHBhZ2UtZW5jb2RpbmcKICAqIChpbiB0aGlzIGNhc2U6IFVURi04KS4KICAqLwogcHVibGljIGNsYXNzIFdlYlRlc3QgewpAQCAtNDMsNyArNDMsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEJPTSBlbmNvZGluZyBtaXNtYXRjaCIpOwpAQCAtNTYsMTEgKzU2LDExIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL1VURi0xNkJFLmpzcCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CkBAIC02OCw3ICs2OCw3IEBACiAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogCiAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDUwMCkgeyAKKyAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSA1MDApIHsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UgY29kZS4gRXhwZWN0ZWQ6IDUwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIHJlY2VpdmVkOiAiICsgcmVzcG9uc2VDb2RlKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BCb21JbkNsYXNzaWNTeW50YXhFbmNvZGluZ01pc21hdGNoSnNwQ29uZmlnL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQm9tSW5DbGFzc2ljU3ludGF4RW5jb2RpbmdNaXNtYXRjaEpzcENvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDE5NzE3YjAuLmIxYTg4OGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BCb21JbkNsYXNzaWNTeW50YXhFbmNvZGluZ01pc21hdGNoSnNwQ29uZmlnL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEJvbUluQ2xhc3NpY1N5bnRheEVuY29kaW5nTWlzbWF0Y2hKc3BDb25maWcvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3AtYm9tLWluLWNsYXNzaWMtc3ludGF4LWVuY29kaW5nLW1pc21hdGNoLWpzcGNvbmZpZyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEJvbUluQ2xhc3NpY1N5bnRheEVuY29kaW5nTWlzbWF0Y2hKc3BDb25maWcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEJvbUluQ2xhc3NpY1N5bnRheEVuY29kaW5nTWlzbWF0Y2hKc3BDb25maWcvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BCb21JbkNsYXNzaWNTeW50YXhFbmNvZGluZ01pc21hdGNoSnNwQ29uZmlnL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQm9tSW5DbGFzc2ljU3ludGF4RW5jb2RpbmdNaXNtYXRjaEpzcENvbmZpZy9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQm9tSW5DbGFzc2ljU3ludGF4RW5jb2RpbmdNaXNtYXRjaFBhZ2VEaXIvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEJvbUluQ2xhc3NpY1N5bnRheEVuY29kaW5nTWlzbWF0Y2hQYWdlRGlyL1dlYlRlc3QuamF2YQppbmRleCA5NGRhZWE3Li5iMGE1YTBhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQm9tSW5DbGFzc2ljU3ludGF4RW5jb2RpbmdNaXNtYXRjaFBhZ2VEaXIvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BCb21JbkNsYXNzaWNTeW50YXhFbmNvZGluZ01pc21hdGNoUGFnZURpci9XZWJUZXN0LmphdmEKQEAgLTQzLDcgKzQzLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBCT00gZW5jb2RpbmcgbWlzbWF0Y2giKTsKQEAgLTU2LDExICs1NiwxMSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgICArIGNvbnRleHRSb290ICsgIi9lbmNvZGluZ01pc21hdGNoLmpzcCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CkBAIC02OCw3ICs2OCw3IEBACiAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogCiAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDUwMCkgeyAKKyAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSA1MDApIHsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UgY29kZS4gRXhwZWN0ZWQ6IDUwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIHJlY2VpdmVkOiAiICsgcmVzcG9uc2VDb2RlKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BCb21JbkNsYXNzaWNTeW50YXhFbmNvZGluZ01pc21hdGNoUGFnZURpci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEJvbUluQ2xhc3NpY1N5bnRheEVuY29kaW5nTWlzbWF0Y2hQYWdlRGlyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMjUwYjcxYy4uZDFkZWFhZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEJvbUluQ2xhc3NpY1N5bnRheEVuY29kaW5nTWlzbWF0Y2hQYWdlRGlyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEJvbUluQ2xhc3NpY1N5bnRheEVuY29kaW5nTWlzbWF0Y2hQYWdlRGlyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanNwLWJvbS1pbi1jbGFzc2ljLXN5bnRheC1lbmNvZGluZy1taXNtYXRjaC1wYWdlZGlyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQm9tSW5DbGFzc2ljU3ludGF4RW5jb2RpbmdNaXNtYXRjaFBhZ2VEaXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEJvbUluQ2xhc3NpY1N5bnRheEVuY29kaW5nTWlzbWF0Y2hQYWdlRGlyL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQm9tSW5DbGFzc2ljU3ludGF4RW5jb2RpbmdNaXNtYXRjaFBhZ2VEaXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BCb21JbkNsYXNzaWNTeW50YXhFbmNvZGluZ01pc21hdGNoUGFnZURpci9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ2FjaGVUYWdsaWJQcmVjb21waWxlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDYWNoZVRhZ2xpYlByZWNvbXBpbGUvV2ViVGVzdC5qYXZhCmluZGV4IDk1MTZkMzUuLmI3MGY0MDIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDYWNoZVRhZ2xpYlByZWNvbXBpbGUvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDYWNoZVRhZ2xpYlByZWNvbXBpbGUvV2ViVGVzdC5qYXZhCkBAIC0yNSw3ICsyNSw3IEBACiAgKiAgIChTUUUgY2FjaGUgdGVzdHMgZmFpbGVkIC93IFBXQzYxMTc6IEZpbGUgIi9qc3AvY2FjaGluZy9TdW4gT05FCiAgKiAgIEFwcGxpY2F0aW9uIFNlcnZlciBUYWdzIiBub3QgZm91bmQpCiAgKgotICogTWFrZSBzdXJlIHRoYXQgZHVyaW5nIHByZWNvbXBpbGF0aW9uLCB0aGUgSlNQIGNvbXBpbGVyIHdpbGwgbm90IAorICogTWFrZSBzdXJlIHRoYXQgZHVyaW5nIHByZWNvbXBpbGF0aW9uLCB0aGUgSlNQIGNvbXBpbGVyIHdpbGwgbm90CiAgKiAoZXJyb25lb3VzbHkpIGlnbm9yZSBhbnkgbG9jYWxseSBidW5kbGVkIGFwcHNlcnYtdGFncy5qYXIgKGFuZCBjYXVzZQogICogcHJlY29tcGlsYXRpb24gYW5kIHRoZXJlZm9yZSBkZXBsb3ltZW50IHRvIGZhaWwpLCBldmVuIHRob3VnaCB0aGlzIEpBUgogICogZmlsZSBpcyBub3QgbGlzdGVkIGFtb25nc3QgdGhlIEpBUiBmaWxlcyBrbm93biB0byBjb250YWluIFRMRCByZXNvdXJjZXMKQEAgLTQ4LDcgKzQ4LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgR2xhc3NGaXNoIElzc3VlIDE2NjgiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC01Niw4ICs1Niw4IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTY3LDcgKzY3LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIi9qc3AvY2FjaGluZy9iYXNpY0NhY2hlLmpzcCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ2FjaGVUYWdsaWJQcmVjb21waWxlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ2FjaGVUYWdsaWJQcmVjb21waWxlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYmJmOWJmZS4uZjg3NzlmYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENhY2hlVGFnbGliUHJlY29tcGlsZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDYWNoZVRhZ2xpYlByZWNvbXBpbGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3AtY2FjaGUtdGFnbGliLXByZWNvbXBpbGUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDYWNoZVRhZ2xpYlByZWNvbXBpbGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENhY2hlVGFnbGliUHJlY29tcGlsZS9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENhY2hlVGFnbGliUHJlY29tcGlsZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENhY2hlVGFnbGliUHJlY29tcGlsZS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ2FjaGluZ0luc3RhbmNlTGV2ZWwvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENhY2hpbmdJbnN0YW5jZUxldmVsL1dlYlRlc3QuamF2YQppbmRleCBhY2E4NjMyLi4yMDA2NjJjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ2FjaGluZ0luc3RhbmNlTGV2ZWwvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDYWNoaW5nSW5zdGFuY2VMZXZlbC9XZWJUZXN0LmphdmEKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgR2xhc3NGaXNoIElzc3VlIDgzOTciKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC01Miw4ICs1Miw4IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTYzLDcgKzYzLDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIi9qc3AvY2FjaGluZy9iYXNpY0NhY2hlLmpzcCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ2FjaGluZ0luc3RhbmNlTGV2ZWwvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDYWNoaW5nSW5zdGFuY2VMZXZlbC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDgyM2YwNGQuLmU0NTQ4NWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDYWNoaW5nSW5zdGFuY2VMZXZlbC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDYWNoaW5nSW5zdGFuY2VMZXZlbC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC1jYWNoaW5nLWluc3RhbmNlLWxldmVsIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ2FjaGluZ0luc3RhbmNlTGV2ZWwvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENhY2hpbmdJbnN0YW5jZUxldmVsL2J1aWxkLnhtbAppbmRleCBlZDBiYzU1Li40YTk4OGEwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ2FjaGluZ0luc3RhbmNlTGV2ZWwvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDYWNoaW5nSW5zdGFuY2VMZXZlbC9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDE5ICs0NCwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjQsNyArNjQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDYWxsaW5nRUxGdWN0aW9uRnJvbVRhZ2ZpbGVXaXRoaW5TYW1lVGFnbGliSW5maW5pdGVSZWN1cnNpb24vV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENhbGxpbmdFTEZ1Y3Rpb25Gcm9tVGFnZmlsZVdpdGhpblNhbWVUYWdsaWJJbmZpbml0ZVJlY3Vyc2lvbi9XZWJUZXN0LmphdmEKaW5kZXggZjdmNTg0OS4uZWRkYmZlMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENhbGxpbmdFTEZ1Y3Rpb25Gcm9tVGFnZmlsZVdpdGhpblNhbWVUYWdsaWJJbmZpbml0ZVJlY3Vyc2lvbi9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENhbGxpbmdFTEZ1Y3Rpb25Gcm9tVGFnZmlsZVdpdGhpblNhbWVUYWdsaWJJbmZpbml0ZVJlY3Vyc2lvbi9XZWJUZXN0LmphdmEKQEAgLTQzLDcgKzQzLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC01OSwxNCArNTksMTQgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CiAgICAgICAgICAgICAgICAgICAgKyBjb250ZXh0Um9vdCArICIvanNwL3Rlc3QuanNweCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOwogICAgICAgICBjb25uLmNvbm5lY3QoKTsKICAgICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm4uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7IAorICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgewogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJXcm9uZyByZXNwb25zZSBjb2RlLiBFeHBlY3RlZDogMjAwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgcmVjZWl2ZWQ6ICIgKyByZXNwb25zZUNvZGUpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENhbGxpbmdFTEZ1Y3Rpb25Gcm9tVGFnZmlsZVdpdGhpblNhbWVUYWdsaWJJbmZpbml0ZVJlY3Vyc2lvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENhbGxpbmdFTEZ1Y3Rpb25Gcm9tVGFnZmlsZVdpdGhpblNhbWVUYWdsaWJJbmZpbml0ZVJlY3Vyc2lvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDM1NTk0Y2QuLmFiYmQ3MjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDYWxsaW5nRUxGdWN0aW9uRnJvbVRhZ2ZpbGVXaXRoaW5TYW1lVGFnbGliSW5maW5pdGVSZWN1cnNpb24vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ2FsbGluZ0VMRnVjdGlvbkZyb21UYWdmaWxlV2l0aGluU2FtZVRhZ2xpYkluZmluaXRlUmVjdXJzaW9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEyICsxNSwxMiBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3AtY2FsbGluZy1lbC1mdWN0aW9uLWZyb20tdGFnZmlsZS13aXRoaW4tc2FtZS10YWdsaWItaW5maW5pdGUtcmVjdXJzaW9uIi8+CiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii8ke2FwcG5hbWV9Ii8+CiA8cHJvcGVydHkgbmFtZT0idGxkcyIgdmFsdWU9ImRlc2NyaXB0b3IvdGxkcyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENhbGxpbmdFTEZ1Y3Rpb25Gcm9tVGFnZmlsZVdpdGhpblNhbWVUYWdsaWJJbmZpbml0ZVJlY3Vyc2lvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ2FsbGluZ0VMRnVjdGlvbkZyb21UYWdmaWxlV2l0aGluU2FtZVRhZ2xpYkluZmluaXRlUmVjdXJzaW9uL2J1aWxkLnhtbAppbmRleCAwOTc0MzFjLi41YTFmMGM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ2FsbGluZ0VMRnVjdGlvbkZyb21UYWdmaWxlV2l0aGluU2FtZVRhZ2xpYkluZmluaXRlUmVjdXJzaW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ2FsbGluZ0VMRnVjdGlvbkZyb21UYWdmaWxlV2l0aGluU2FtZVRhZ2xpYkluZmluaXRlUmVjdXJzaW9uL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTAgKzQyLDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCkBAIC01Myw4ICs1Myw4IEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTY0LDcgKzY0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbW1lbnRlZE91dFBhZ2VEaXJlY3RpdmUvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbW1lbnRlZE91dFBhZ2VEaXJlY3RpdmUvV2ViVGVzdC5qYXZhCmluZGV4IDExMmQ2NzMuLmE5OGI5NzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb21tZW50ZWRPdXRQYWdlRGlyZWN0aXZlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29tbWVudGVkT3V0UGFnZURpcmVjdGl2ZS9XZWJUZXN0LmphdmEKQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgQnVnemlsbGEgMjk5NzEiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC00Niw4ICs0Niw4IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZUpzcCgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKQEAgLTU2LDcgKzU2LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBpbnZva2VKc3AoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgIi8iICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICsgIi9qc3AvdGVzdC5qc3AiOwogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKQpAQCAtNzMsNiArNzMsNiBAQAogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29tbWVudGVkT3V0UGFnZURpcmVjdGl2ZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbW1lbnRlZE91dFBhZ2VEaXJlY3RpdmUvYnVpbGQucHJvcGVydGllcwppbmRleCBlYzViNTI0Li4wYTg4OGYwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29tbWVudGVkT3V0UGFnZURpcmVjdGl2ZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb21tZW50ZWRPdXRQYWdlRGlyZWN0aXZlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3AtY29tbWVudGVkLW91dC1wYWdlLWRpcmVjdGl2ZSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanNwLWNvbW1lbnRlZC1vdXQtcGFnZS1kaXJlY3RpdmUiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii8ke2FwcG5hbWV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29tbWVudGVkT3V0UGFnZURpcmVjdGl2ZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29tbWVudGVkT3V0UGFnZURpcmVjdGl2ZS9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbW1lbnRlZE91dFBhZ2VEaXJlY3RpdmUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb21tZW50ZWRPdXRQYWdlRGlyZWN0aXZlL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb21tZW50ZWRPdXRQYWdlRGlyZWN0aXZlMS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29tbWVudGVkT3V0UGFnZURpcmVjdGl2ZTEvV2ViVGVzdC5qYXZhCmluZGV4IDc3MTI0MmIuLmI5Y2IwMTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb21tZW50ZWRPdXRQYWdlRGlyZWN0aXZlMS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbW1lbnRlZE91dFBhZ2VEaXJlY3RpdmUxL1dlYlRlc3QuamF2YQpAQCAtMzksNyArMzksNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBCdWd6aWxsYSAyOTk3MSIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ3LDggKzQ3LDggQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlSnNwKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwpAQCAtNTcsNyArNTcsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGludm9rZUpzcCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgKyAiL2pzcC90ZXN0LmpzcCI7CiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pCkBAIC03NCw2ICs3NCw2IEBACiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb21tZW50ZWRPdXRQYWdlRGlyZWN0aXZlMS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbW1lbnRlZE91dFBhZ2VEaXJlY3RpdmUxL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZWM1YjUyNC4uMGE4ODhmMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbW1lbnRlZE91dFBhZ2VEaXJlY3RpdmUxL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbW1lbnRlZE91dFBhZ2VEaXJlY3RpdmUxL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3AtY29tbWVudGVkLW91dC1wYWdlLWRpcmVjdGl2ZSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanNwLWNvbW1lbnRlZC1vdXQtcGFnZS1kaXJlY3RpdmUiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii8ke2FwcG5hbWV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29tbWVudGVkT3V0UGFnZURpcmVjdGl2ZTEvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbW1lbnRlZE91dFBhZ2VEaXJlY3RpdmUxL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29tbWVudGVkT3V0UGFnZURpcmVjdGl2ZTEvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb21tZW50ZWRPdXRQYWdlRGlyZWN0aXZlMS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnQnVmZmVyL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdCdWZmZXIvV2ViVGVzdC5qYXZhCmluZGV4IDk0Y2M1MzQuLjFlNmY4MzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdCdWZmZXIvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdCdWZmZXIvV2ViVGVzdC5qYXZhCkBAIC00MiwyNSArNDIsMjUgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IganNwOmF0dHJpYnV0ZSB3aXRoIG9taXQiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CiAgICAgICAgIHdlYlRlc3QuZG9UZXN0KCk7Ci0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKIAogICAgICAgICBCdWZmZXJlZFJlYWRlciBiaXMgPSBudWxsOwotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjb250ZXh0Um9vdCArICIvanNwL3Rlc3QuanNwIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogICAgICAgICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm4uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgeyAKKyAgICAgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJXcm9uZyByZXNwb25zZSBjb2RlLiBFeHBlY3RlZDogMjAwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIHJlY2VpdmVkOiAiICsgcmVzcG9uc2VDb2RlKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnQnVmZmVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnQnVmZmVyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNjMzMjQ0MS4uYjZiYWRmOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ0J1ZmZlci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdCdWZmZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTMgKzE1LDEzIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC1jb25maWctYnVmZmVyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iLyR7YXBwbmFtZX0iLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0bGRzIiB2YWx1ZT0iZGVzY3JpcHRvci90bGRzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnQnVmZmVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdCdWZmZXIvYnVpbGQueG1sCmluZGV4IDg3ZGJkNGMuLjVhMWYwYzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdCdWZmZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdCdWZmZXIvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxMCArNDIsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTUzLDEwICs1MywxMCBAQAogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTY0LDcgKzY0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ0RlZmF1bHRDb250ZW50VHlwZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnRGVmYXVsdENvbnRlbnRUeXBlL1dlYlRlc3QuamF2YQppbmRleCBkZDAwMWJiLi4wOWJmOTdlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnRGVmYXVsdENvbnRlbnRUeXBlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnRGVmYXVsdENvbnRlbnRUeXBlL1dlYlRlc3QuamF2YQpAQCAtNDIsMjUgKzQyLDI1IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGpzcDphdHRyaWJ1dGUgd2l0aCBvbWl0Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwogICAgICAgICB3ZWJUZXN0LmRvVGVzdCgpOwotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYmlzID0gbnVsbDsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL2pzcC90ZXN0LmpzcCIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgICAgICBjb25uLmNvbm5lY3QoKTsKICAgICAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsgCisgICAgICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UgY29kZS4gRXhwZWN0ZWQ6IDIwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCByZWNlaXZlZDogIiArIHJlc3BvbnNlQ29kZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ0RlZmF1bHRDb250ZW50VHlwZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ0RlZmF1bHRDb250ZW50VHlwZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDhlNWM3ZGYuLmNlYzFiNzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdEZWZhdWx0Q29udGVudFR5cGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnRGVmYXVsdENvbnRlbnRUeXBlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEzICsxNSwxMyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3AtY29uZmlnLWRlZmF1bHQtY29udGVudC10eXBlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iLyR7YXBwbmFtZX0iLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0bGRzIiB2YWx1ZT0iZGVzY3JpcHRvci90bGRzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnRGVmYXVsdENvbnRlbnRUeXBlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdEZWZhdWx0Q29udGVudFR5cGUvYnVpbGQueG1sCmluZGV4IDg3ZGJkNGMuLjVhMWYwYzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdEZWZhdWx0Q29udGVudFR5cGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdEZWZhdWx0Q29udGVudFR5cGUvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxMCArNDIsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTUzLDEwICs1MywxMCBAQAogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTY0LDcgKzY0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ0dldFNlcnZsZXRQYXRoL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdHZXRTZXJ2bGV0UGF0aC9XZWJUZXN0LmphdmEKaW5kZXggOTZlZDJjMC4uZWFiNzJlNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ0dldFNlcnZsZXRQYXRoL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnR2V0U2VydmxldFBhdGgvV2ViVGVzdC5qYXZhCkBAIC00Miw3ICs0Miw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEJ1Z3ppbGxhIDI3NzA0Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTMsMTQgKzUzLDE0IEBACiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IG51bGw7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gbnVsbDsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBTRVJWTEVUX1BBVEgpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgICAgICBjb25uLmNvbm5lY3QoKTsKICAgICAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsgCisgICAgICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UgY29kZS4gRXhwZWN0ZWQ6IDIwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCByZWNlaXZlZDogIiArIHJlc3BvbnNlQ29kZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ0dldFNlcnZsZXRQYXRoL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnR2V0U2VydmxldFBhdGgvYnVpbGQucHJvcGVydGllcwppbmRleCBhZDU3OGIwLi42YjZlMWI1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnR2V0U2VydmxldFBhdGgvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnR2V0U2VydmxldFBhdGgvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3AtY29uZmlnLWdldC1zZXJ2bGV0Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnR2V0U2VydmxldFBhdGgvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ0dldFNlcnZsZXRQYXRoL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnR2V0U2VydmxldFBhdGgvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdHZXRTZXJ2bGV0UGF0aC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnSW5jbHVkZUNoYWluL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdJbmNsdWRlQ2hhaW4vV2ViVGVzdC5qYXZhCmluZGV4IDk5ZDgxNmQuLjYyMGI1ODMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdJbmNsdWRlQ2hhaW4vV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdJbmNsdWRlQ2hhaW4vV2ViVGVzdC5qYXZhCkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEJ1Z3ppbGxhIDI3NzA0Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTIsMTQgKzUyLDE0IEBACiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IG51bGw7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gbnVsbDsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiL3N1YmRpci9pbmNsdWRpbmcudHh0Iik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogICAgICAgICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm4uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgeyAKKyAgICAgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJXcm9uZyByZXNwb25zZSBjb2RlLiBFeHBlY3RlZDogMjAwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIHJlY2VpdmVkOiAiICsgcmVzcG9uc2VDb2RlKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnSW5jbHVkZUNoYWluL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnSW5jbHVkZUNoYWluL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZjI4ZDhjMS4uYzVkYzFhNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ0luY2x1ZGVDaGFpbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdJbmNsdWRlQ2hhaW4vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3AtY29uZmlnLWluY2x1ZGUtY2hhaW4iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdJbmNsdWRlQ2hhaW4vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ0luY2x1ZGVDaGFpbi9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ0luY2x1ZGVDaGFpbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ0luY2x1ZGVDaGFpbi9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnSmF2YWNTb3VyY2UvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ0phdmFjU291cmNlL1dlYlRlc3QuamF2YQppbmRleCBmN2Y1MDc2Li5kMzAzMzEyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnSmF2YWNTb3VyY2UvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdKYXZhY1NvdXJjZS9XZWJUZXN0LmphdmEKQEAgLTUyLDExICs1MiwxMSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgICArIGNvbnRleHRSb290ICsgIi90ZXN0LmpzcCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CkBAIC02NCw3ICs2NCw3IEBACiAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogCiAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgeyAKKyAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UgY29kZS4gRXhwZWN0ZWQ6IDIwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIHJlY2VpdmVkOiAiICsgcmVzcG9uc2VDb2RlKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdKYXZhY1NvdXJjZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ0phdmFjU291cmNlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggODAzOWYzYS4uYmI1N2I0MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ0phdmFjU291cmNlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ0phdmFjU291cmNlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanNwLWNvbmZpZy1qYXZhYy1zb3VyY2UiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdKYXZhY1NvdXJjZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnSmF2YWNTb3VyY2UvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdKYXZhY1NvdXJjZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ0phdmFjU291cmNlL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdKYXZhY1NvdXJjZS9kZXNjcmlwdG9yL3N1bi13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ0phdmFjU291cmNlL2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwKaW5kZXggOTRhM2Y4ZC4uNGRmNmNmNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ0phdmFjU291cmNlL2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ0phdmFjU291cmNlL2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwKQEAgLTIyLDUgKzIyLDUgQEAKIDxzdW4td2ViLWFwcD4KICAgPGpzcC1jb25maWc+CiAgICAgPHByb3BlcnR5IG5hbWU9ImNvbXBpbGVyU291cmNlVk0iIHZhbHVlPSIxLjQiIC8+Ci0gIDwvanNwLWNvbmZpZz4gCisgIDwvanNwLWNvbmZpZz4KIDwvc3VuLXdlYi1hcHA+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnSnNwRmlsZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnSnNwRmlsZS9XZWJUZXN0LmphdmEKaW5kZXggZTYyODBlNy4uNDNkOTdkNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ0pzcEZpbGUvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdKc3BGaWxlL1dlYlRlc3QuamF2YQpAQCAtNTIsNyArNTIsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnSnNwRmlsZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ0pzcEZpbGUvYnVpbGQucHJvcGVydGllcwppbmRleCA4OWFlZDA4Li4xYjRlYTgxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnSnNwRmlsZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdKc3BGaWxlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanNwLWNvbmZpZy1qc3AtZmlsZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ0pzcEZpbGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ0pzcEZpbGUvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdKc3BGaWxlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnSnNwRmlsZS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnSnNwRmlsZS9kZXNjcmlwdG9yL3N1bi13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ0pzcEZpbGUvZGVzY3JpcHRvci9zdW4td2ViLnhtbAppbmRleCBhMWY5YmZmLi42OTZiNThlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnSnNwRmlsZS9kZXNjcmlwdG9yL3N1bi13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdKc3BGaWxlL2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwKQEAgLTIyLDUgKzIyLDUgQEAKIDxzdW4td2ViLWFwcD4KICAgPGpzcC1jb25maWc+CiAgICAgPHByb3BlcnR5IG5hbWU9Im15UGFyYW0iIHZhbHVlPSJteVZhbHVlIiAvPgotICA8L2pzcC1jb25maWc+IAorICA8L2pzcC1jb25maWc+CiA8L3N1bi13ZWItYXBwPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ01vZGlmaWNhdGlvblRlc3RJbnRlcnZhbC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnTW9kaWZpY2F0aW9uVGVzdEludGVydmFsL1dlYlRlc3QuamF2YQppbmRleCBhOWRiMTE1Li4wODUxMmNkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnTW9kaWZpY2F0aW9uVGVzdEludGVydmFsL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnTW9kaWZpY2F0aW9uVGVzdEludGVydmFsL1dlYlRlc3QuamF2YQpAQCAtMjMsNyArMjMsNyBAQAogICogaWdub3JlZCIpLgogICoKICAqIFRoaXMgdGVzdDoKLSAqIAorICoKICAqICAtIGFjY2Vzc2VzIGEgSlNQLAogICoKICAqICAtIHVwZGF0ZXMgdGhlIEpTUCAodGhyb3VnaCBhIHNlcnZsZXQpLApAQCAtNTIsNyArNTIsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBtb2RpZmljYXRpb25UZXN0SW50ZXJ2YWwgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgImpzcC1jb25maWcgcHJvcGVydHkiKTsKQEAgLTYxLDggKzYxLDggQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgcnVuKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpAQCAtODYsMTAgKzg2LDEwIEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVXBkYXRpbmcgSlNQIC4uLiIpOwogICAgICAgICBib2R5TGluZSA9IGdldEJvZHlMaW5lKCJVcGRhdGVKc3AiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGJvZHlMaW5lKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAvKgotICAgICAgICAgKiBBY2Nlc3MgSlNQLiBNdXN0IGdldCBvcmlnaW5hbCBjb250ZW50cywgYmVjYXVzZSB0aGUgCi0gICAgICAgICAqIG1vZGlmaWNhdGlvblRlc3RJbnRlcnZhbCBzcGVjaWZpZWQgaW4gc3VuLXdlYi54bWwgaGFzIG5vdCB5ZXQgCisgICAgICAgICAqIEFjY2VzcyBKU1AuIE11c3QgZ2V0IG9yaWdpbmFsIGNvbnRlbnRzLCBiZWNhdXNlIHRoZQorICAgICAgICAgKiBtb2RpZmljYXRpb25UZXN0SW50ZXJ2YWwgc3BlY2lmaWVkIGluIHN1bi13ZWIueG1sIGhhcyBub3QgeWV0CiAgICAgICAgICAqIGV4cGlyZWQsIHdoaWNoIG1lYW5zIHRoYXQgd2UgbXVzdCBub3QgKHlldCkgY2hlY2sgZm9yIGFueQogICAgICAgICAgKiBtb2RpZmljYXRpb25zIG9mIHRoZSBKU1AKICAgICAgICAgICovCkBAIC0xNTQsNSArMTU0LDUgQEAKICAgICAgICAgICAgICAgICBpZiAoYmlzICE9IG51bGwpIGJpcy5jbG9zZSgpOwogICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZXgpIHt9CiAgICAgICAgIH0KLSAgICB9ICAgCisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ01vZGlmaWNhdGlvblRlc3RJbnRlcnZhbC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ01vZGlmaWNhdGlvblRlc3RJbnRlcnZhbC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDYwNWRjODcuLjQ5MGQ0YjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdNb2RpZmljYXRpb25UZXN0SW50ZXJ2YWwvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnTW9kaWZpY2F0aW9uVGVzdEludGVydmFsL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanNwLWNvbmZpZy1tb2RpZmljYXRpb24tdGVzdC1pbnRlcnZhbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ01vZGlmaWNhdGlvblRlc3RJbnRlcnZhbC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnTW9kaWZpY2F0aW9uVGVzdEludGVydmFsL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnTW9kaWZpY2F0aW9uVGVzdEludGVydmFsL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnTW9kaWZpY2F0aW9uVGVzdEludGVydmFsL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdNb2RpZmljYXRpb25UZXN0SW50ZXJ2YWwvZGVzY3JpcHRvci9zdW4td2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdNb2RpZmljYXRpb25UZXN0SW50ZXJ2YWwvZGVzY3JpcHRvci9zdW4td2ViLnhtbAppbmRleCA0Yzk3OTc0Li4yNzMwNDRmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnTW9kaWZpY2F0aW9uVGVzdEludGVydmFsL2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ01vZGlmaWNhdGlvblRlc3RJbnRlcnZhbC9kZXNjcmlwdG9yL3N1bi13ZWIueG1sCkBAIC0yMiw1ICsyMiw1IEBACiA8c3VuLXdlYi1hcHA+CiAgIDxqc3AtY29uZmlnPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJtb2RpZmljYXRpb25UZXN0SW50ZXJ2YWwiIHZhbHVlPSI2MCIgLz4KLSAgPC9qc3AtY29uZmlnPiAKKyAgPC9qc3AtY29uZmlnPgogPC9zdW4td2ViLWFwcD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdNb2RpZmljYXRpb25UZXN0SW50ZXJ2YWwvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ01vZGlmaWNhdGlvblRlc3RJbnRlcnZhbC9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggNjIxMWI1OS4uZTE2ZTZiNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ01vZGlmaWNhdGlvblRlc3RJbnRlcnZhbC9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ01vZGlmaWNhdGlvblRlc3RJbnRlcnZhbC9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTI3LDcgKzI3LDcgQEAKICAgICAgICAgPGRpc3BsYXktbmFtZT5VcGRhdGVKc3A8L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5VcGRhdGVKc3A8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+VXBkYXRlSnNwPC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAorICAgIDwvc2VydmxldD4KIAogICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5VcGRhdGVKc3A8L3NlcnZsZXQtbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdNb2RpZmljYXRpb25UZXN0SW50ZXJ2YWwvc2VydmxldC9VcGRhdGVKc3AuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdNb2RpZmljYXRpb25UZXN0SW50ZXJ2YWwvc2VydmxldC9VcGRhdGVKc3AuamF2YQppbmRleCBjZTRhNWIwLi41MWFhNDA3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnTW9kaWZpY2F0aW9uVGVzdEludGVydmFsL3NlcnZsZXQvVXBkYXRlSnNwLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ01vZGlmaWNhdGlvblRlc3RJbnRlcnZhbC9zZXJ2bGV0L1VwZGF0ZUpzcC5qYXZhCkBAIC0zMiw3ICszMiw3IEBACiAKICAgICAgICAgLyoKICAgICAgICAgICogTWFudWFsbHkgdXBkYXRlIHRpbWVzdGFtcCBvbiBKU1AgZmlsZSB0byBhIHZhbHVlIGZhciBpbnRvIHRoZQotICAgICAgICAgKiBmdXR1cmUsIHNvIHRoYXQgdGhlIGNvcnJlc3BvbmRpbmcgc2VydmxldCBjbGFzcyBmaWxlIHdpbGwgYmUgCisgICAgICAgICAqIGZ1dHVyZSwgc28gdGhhdCB0aGUgY29ycmVzcG9uZGluZyBzZXJ2bGV0IGNsYXNzIGZpbGUgd2lsbCBiZQogICAgICAgICAgKiBndWFyYW50ZWVkIHRvIGJlIG91dC1vZi1kYXRlCiAgICAgICAgICAqLwogICAgICAgICBmLnNldExhc3RNb2RpZmllZChTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSArIDkwMDAwMDAwMDBMKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdVbmRlY2xhcmVkTlMvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ1VuZGVjbGFyZWROUy9XZWJUZXN0LmphdmEKaW5kZXggMDk4MzAyNS4uMTFhZGJlYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ1VuZGVjbGFyZWROUy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ1VuZGVjbGFyZWROUy9XZWJUZXN0LmphdmEKQEAgLTQyLDI3ICs0MiwyNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBqc3A6YXR0cmlidXRlIHdpdGggb21pdCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKICAgICAgICAgd2ViVGVzdC5kb1Rlc3QoKTsKICAgICAgICAgd2ViVGVzdC5kb1Rlc3QyKCk7Ci0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKIAogICAgICAgICAvLyBBbiBlcnJvciBzaG91bGQgYmUgcmFpc2VkIHdpdGggdW5kZWNsYXJlZCB0YWcKLSAgICAgCi0gICAgICAgIHRyeSB7IAorCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL2pzcC90ZXN0LmpzcCIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgICAgICBjb25uLmNvbm5lY3QoKTsKICAgICAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSA1MDApIHsgCisgICAgICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDUwMCkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UgY29kZS4gRXhwZWN0ZWQ6IDIwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCByZWNlaXZlZDogIiArIHJlc3BvbnNlQ29kZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ1VuZGVjbGFyZWROUy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ1VuZGVjbGFyZWROUy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGJhM2Y1OTUuLjJmMDc5NjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdVbmRlY2xhcmVkTlMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnVW5kZWNsYXJlZE5TL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEzICsxNSwxMyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3AtY29uZmlnLXVuZGVjbGFyZWQtbnMiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvJHthcHBuYW1lfSIvPgogPHByb3BlcnR5IG5hbWU9InRsZHMiIHZhbHVlPSJkZXNjcmlwdG9yL3RsZHMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdVbmRlY2xhcmVkTlMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ1VuZGVjbGFyZWROUy9idWlsZC54bWwKaW5kZXggODdkYmQ0Yy4uNWExZjBjNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ1VuZGVjbGFyZWROUy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ1VuZGVjbGFyZWROUy9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDEwICs0MiwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgIDxqYXZhYwpAQCAtNTMsMTAgKzUzLDEwIEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjQsNyArNjQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnVXNlUHJlY29tcGlsZWQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ1VzZVByZWNvbXBpbGVkL1dlYlRlc3QuamF2YQppbmRleCBjZmFmNGNiLi43ZGU0MzE3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnVXNlUHJlY29tcGlsZWQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdVc2VQcmVjb21waWxlZC9XZWJUZXN0LmphdmEKQEAgLTUwLDcgKzUwLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgNjE4MTkyMyIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTU4LDggKzU4LDggQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgcnVuKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpAQCAtMTE3LDUgKzExNyw1IEBACiAgICAgICAgICAgICAgICAgaWYgKGJpcyAhPSBudWxsKSBiaXMuY2xvc2UoKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGV4KSB7fQogICAgICAgICB9Ci0gICAgfSAgIAorICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdVc2VQcmVjb21waWxlZC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ1VzZVByZWNvbXBpbGVkL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYWUzNjI0My4uMWNiNjg5MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ1VzZVByZWNvbXBpbGVkL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ1VzZVByZWNvbXBpbGVkL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanNwLWNvbmZpZy11c2UtcHJlY29tcGlsZWQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdVc2VQcmVjb21waWxlZC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnVXNlUHJlY29tcGlsZWQvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdVc2VQcmVjb21waWxlZC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ1VzZVByZWNvbXBpbGVkL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdVc2VQcmVjb21waWxlZC9kZXNjcmlwdG9yL3N1bi13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ1VzZVByZWNvbXBpbGVkL2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwKaW5kZXggZTkxYjlkMi4uM2MwYjE2NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ1VzZVByZWNvbXBpbGVkL2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ1VzZVByZWNvbXBpbGVkL2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwKQEAgLTIyLDUgKzIyLDUgQEAKIDxzdW4td2ViLWFwcD4KICAgPGpzcC1jb25maWc+CiAgICAgPHByb3BlcnR5IG5hbWU9InVzZS1wcmVjb21waWxlZCIgdmFsdWU9InRydWUiIC8+Ci0gIDwvanNwLWNvbmZpZz4gCisgIDwvanNwLWNvbmZpZz4KIDwvc3VuLXdlYi1hcHA+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnVXNlUHJlY29tcGlsZWQvc2VydmxldC9vcmcvYXBhY2hlL2pzcC9qc3AvdGVzdF9qc3AuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdVc2VQcmVjb21waWxlZC9zZXJ2bGV0L29yZy9hcGFjaGUvanNwL2pzcC90ZXN0X2pzcC5qYXZhCmluZGV4IDZkOTQ4NTAuLjZmZDI5YzkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdVc2VQcmVjb21waWxlZC9zZXJ2bGV0L29yZy9hcGFjaGUvanNwL2pzcC90ZXN0X2pzcC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdVc2VQcmVjb21waWxlZC9zZXJ2bGV0L29yZy9hcGFjaGUvanNwL2pzcC90ZXN0X2pzcC5qYXZhCkBAIC00Nyw3ICs0Nyw3IEBACiAgICAgICBfanNweEZhY3RvcnkgPSBKc3BGYWN0b3J5LmdldERlZmF1bHRGYWN0b3J5KCk7CiAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICBwYWdlQ29udGV4dCA9IF9qc3B4RmFjdG9yeS5nZXRQYWdlQ29udGV4dCh0aGlzLCByZXF1ZXN0LCByZXNwb25zZSwKLSAgICAgIAkJCW51bGwsIHRydWUsIDgxOTIsIHRydWUpOworICAgICAgICAgICAgICAgICAgbnVsbCwgdHJ1ZSwgODE5MiwgdHJ1ZSk7CiAgICAgICBfanNweF9wYWdlX2NvbnRleHQgPSBwYWdlQ29udGV4dDsKICAgICAgIGFwcGxpY2F0aW9uID0gcGFnZUNvbnRleHQuZ2V0U2VydmxldENvbnRleHQoKTsKICAgICAgIGNvbmZpZyA9IHBhZ2VDb250ZXh0LmdldFNlcnZsZXRDb25maWcoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdVc2VQcmVjb21waWxlZDIvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ1VzZVByZWNvbXBpbGVkMi9XZWJUZXN0LmphdmEKaW5kZXggMzljNTYyOC4uMjc5MTQyNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ1VzZVByZWNvbXBpbGVkMi9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ1VzZVByZWNvbXBpbGVkMi9XZWJUZXN0LmphdmEKQEAgLTY5LDcgKzY5LDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiVW5leHBlY3RlZCByZXR1cm4gY29kZTogIiArIGNvZGUpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdHJ5IChJbnB1dFN0cmVhbSBpcyA9IGNvbm4uZ2V0SW5wdXRTdHJlYW0oKTsgQnVmZmVyZWRSZWFkZXIgaW5wdXQgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSkpIHsgCisgICAgICAgICAgICB0cnkgKElucHV0U3RyZWFtIGlzID0gY29ubi5nZXRJbnB1dFN0cmVhbSgpOyBCdWZmZXJlZFJlYWRlciBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKSkgewogICAgICAgICAgICAgICAgIFN0cmluZyBsaW5lID0gaW5wdXQucmVhZExpbmUoKTsKICAgICAgICAgICAgICAgICBpZiAoIUVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIldyb25nIHJlc3BvbnNlLiAiICsgIkV4cGVjdGVkOiAiICsgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ1VzZVByZWNvbXBpbGVkMi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ1VzZVByZWNvbXBpbGVkMi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDIyNGIwYWUuLjgzZTgwNzUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdVc2VQcmVjb21waWxlZDIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnVXNlUHJlY29tcGlsZWQyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanNwLWNvbmZpZy11c2UtcHJlY29tcGlsZWQyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnVXNlUHJlY29tcGlsZWQyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdVc2VQcmVjb21waWxlZDIvYnVpbGQueG1sCmluZGV4IDg1NDJlOTEuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdVc2VQcmVjb21waWxlZDIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdVc2VQcmVjb21waWxlZDIvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxNyArNDIsMTcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIAogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdXZWxjb21lRmlsZXMvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ1dlbGNvbWVGaWxlcy9XZWJUZXN0LmphdmEKaW5kZXggNzBjZjRjOS4uMGFmMjMzZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ1dlbGNvbWVGaWxlcy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ1dlbGNvbWVGaWxlcy9XZWJUZXN0LmphdmEKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgQnVnemlsbGEgMjc2NjQiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC00OCw3ICs0OCw3IEBACiAgICAgICAgIG9rID0gb2sgJiYgd2ViVGVzdC5kb1Rlc3QoImh0dHA6Ly8iICsgd2ViVGVzdC5ob3N0ICArICI6IiArIHdlYlRlc3QucG9ydAogICAgICAgICAgICAgICAgICAgICAgICArIHdlYlRlc3QuY29udGV4dFJvb3QgKyAiL1Rlc3RTZXJ2bGV0Iik7CiAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgKChvayk/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCkpOwotCSAgICBzdGF0LnByaW50U3VtbWFyeSgpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIGRvVGVzdChTdHJpbmcgdXJsU3RyaW5nKSB7CkBAIC01NiwxMyArNTYsMTMgQEAKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBudWxsOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBpbnB1dCA9IG51bGw7CiAgICAgICAgIGJvb2xlYW4gc3RhdHVzID0gZmFsc2U7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwodXJsU3RyaW5nKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKICAgICAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOwogICAgICAgICAgICAgY29ubi5jb25uZWN0KCk7CiAgICAgICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7IAorICAgICAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIldyb25nIHJlc3BvbnNlIGNvZGUuIEV4cGVjdGVkOiAyMDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgcmVjZWl2ZWQ6ICIgKyByZXNwb25zZUNvZGUpOwogICAgICAgICAgICAgICAgIHN0YXR1cyA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ1dlbGNvbWVGaWxlcy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ1dlbGNvbWVGaWxlcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGMwNzFkYzguLmRhODAyY2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdXZWxjb21lRmlsZXMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ29uZmlnV2VsY29tZUZpbGVzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3AtY29uZmlnLXdlbGNvbWUtZmlsZXMiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC1jb25maWctd2VsY29tZS1maWxlcyIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iLyR7bW9kdWxlfS1qc3AtY29uZmlnLXdlbGNvbWUtZmlsZXMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDb25maWdXZWxjb21lRmlsZXMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ1dlbGNvbWVGaWxlcy9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ1dlbGNvbWVGaWxlcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcENvbmZpZ1dlbGNvbWVGaWxlcy9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ3VzdG9tVGFnQXR0cmlidXRlT2ZBcnJheVR5cGUvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEN1c3RvbVRhZ0F0dHJpYnV0ZU9mQXJyYXlUeXBlL1dlYlRlc3QuamF2YQppbmRleCBiZTI0ZTA2Li5iMzU5MWU1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ3VzdG9tVGFnQXR0cmlidXRlT2ZBcnJheVR5cGUvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDdXN0b21UYWdBdHRyaWJ1dGVPZkFycmF5VHlwZS9XZWJUZXN0LmphdmEKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwogICAgICAgICB3ZWJUZXN0LmRvVGVzdCgpOwpAQCAtNTksNyArNTksNyBAQAogICAgICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgICAgICBjb25uLmNvbm5lY3QoKTsKICAgICAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsgCisgICAgICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UgY29kZS4gRXhwZWN0ZWQ6IDIwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCByZWNlaXZlZDogIiArIHJlc3BvbnNlQ29kZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwpAQCAtNzQsNyArNzQsNyBAQAogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGlmICghRVhQRUNURUQuZXF1YWxzKGxhc3RMaW5lKSkgewotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIldyb25nIHJlc3BvbnNlIGJvZHkuIEV4cGVjdGVkOiAiIAorICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIldyb25nIHJlc3BvbnNlIGJvZHkuIEV4cGVjdGVkOiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIEVYUEVDVEVEICsgIiwgcmVjZWl2ZWQ6ICIgKyBsYXN0TGluZSk7CiAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEN1c3RvbVRhZ0F0dHJpYnV0ZU9mQXJyYXlUeXBlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ3VzdG9tVGFnQXR0cmlidXRlT2ZBcnJheVR5cGUvYnVpbGQucHJvcGVydGllcwppbmRleCBjOWFmNzY1Li44MTZmMjMyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ3VzdG9tVGFnQXR0cmlidXRlT2ZBcnJheVR5cGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ3VzdG9tVGFnQXR0cmlidXRlT2ZBcnJheVR5cGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTQgKzE1LDE0IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC1jdXN0b20tdGFnLWF0dHJpYnV0ZS1vZi1hcnJheS10eXBlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii8ke2FwcG5hbWV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ3VzdG9tVGFnQXR0cmlidXRlT2ZBcnJheVR5cGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEN1c3RvbVRhZ0F0dHJpYnV0ZU9mQXJyYXlUeXBlL2J1aWxkLnhtbAppbmRleCAwOTc0MzFjLi41YTFmMGM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ3VzdG9tVGFnQXR0cmlidXRlT2ZBcnJheVR5cGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDdXN0b21UYWdBdHRyaWJ1dGVPZkFycmF5VHlwZS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDEwICs0MiwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgIDxqYXZhYwpAQCAtNTMsOCArNTMsOCBAQAogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIAogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC02NCw3ICs2NCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDdXN0b21UYWdBdHRyaWJ1dGVPZkFycmF5VHlwZS9zZXJ2bGV0L3RhZ2xpYi9NeVRhZy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEN1c3RvbVRhZ0F0dHJpYnV0ZU9mQXJyYXlUeXBlL3NlcnZsZXQvdGFnbGliL015VGFnLmphdmEKaW5kZXggYWUyMDliYS4uMjM5ZDJhMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEN1c3RvbVRhZ0F0dHJpYnV0ZU9mQXJyYXlUeXBlL3NlcnZsZXQvdGFnbGliL015VGFnLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEN1c3RvbVRhZ0F0dHJpYnV0ZU9mQXJyYXlUeXBlL3NlcnZsZXQvdGFnbGliL015VGFnLmphdmEKQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBKc3BFeGNlcHRpb24oaW9lLnRvU3RyaW5nKCksIGlvZSk7CiAgICAgICAgIH0KIAotCXJldHVybiBFVkFMX1BBR0U7CisgICAgcmV0dXJuIEVWQUxfUEFHRTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRBcnJheShTdHJpbmdbXSBhcmdzKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ3VzdG9tVGFnbGliQnVuZGxlZEFzSmFyL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDdXN0b21UYWdsaWJCdW5kbGVkQXNKYXIvV2ViVGVzdC5qYXZhCmluZGV4IGM4ZmM1ODguLjQ1ZGIzMDAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDdXN0b21UYWdsaWJCdW5kbGVkQXNKYXIvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDdXN0b21UYWdsaWJCdW5kbGVkQXNKYXIvV2ViVGVzdC5qYXZhCkBAIC01OSw3ICs1OSw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgIGNvbm4uY29ubmVjdCgpOwotICAgICAgICAKKwogICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKICAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UgY29kZS4gRXhwZWN0ZWQ6IDIwMCIgKyAiLCByZWNlaXZlZDogIiArIHJlc3BvbnNlQ29kZSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ3VzdG9tVGFnbGliQnVuZGxlZEFzSmFyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ3VzdG9tVGFnbGliQnVuZGxlZEFzSmFyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYjQ5ZDQ4ZS4uZDMzMzk3NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEN1c3RvbVRhZ2xpYkJ1bmRsZWRBc0phci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDdXN0b21UYWdsaWJCdW5kbGVkQXNKYXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3AtY3VzdG9tLXRhZ2xpYi1idW5kbGVkLWFzLWphciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEN1c3RvbVRhZ2xpYkJ1bmRsZWRBc0phci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ3VzdG9tVGFnbGliQnVuZGxlZEFzSmFyL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ3VzdG9tVGFnbGliQnVuZGxlZEFzSmFyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ3VzdG9tVGFnbGliQnVuZGxlZEFzSmFyL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDdXN0b21UYWdsaWJKYXJJbnNpZGVFYXJXaXRoTWFuaWZlc3RDbGFzc1BhdGgvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEN1c3RvbVRhZ2xpYkphckluc2lkZUVhcldpdGhNYW5pZmVzdENsYXNzUGF0aC9XZWJUZXN0LmphdmEKaW5kZXggZTQzMGM0YS4uYzUyOWQzMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEN1c3RvbVRhZ2xpYkphckluc2lkZUVhcldpdGhNYW5pZmVzdENsYXNzUGF0aC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEN1c3RvbVRhZ2xpYkphckluc2lkZUVhcldpdGhNYW5pZmVzdENsYXNzUGF0aC9XZWJUZXN0LmphdmEKQEAgLTIwLDcgKzIwLDcgQEAKIAogLyoKICAqIFVuaXQgdGVzdCBmb3IKLSAqIAorICoKICAqICAgaHR0cHM6Ly9nbGFzc2Zpc2guZGV2LmphdmEubmV0L2lzc3Vlcy9zaG93X2J1Zy5jZ2k/aWQ9NTkwCiAgKiAgICgiVExEcyBpbiBFQVItYnVuZGxlZCBKQVJzIG5vdCBmb3VuZCIpCiAgKgpAQCAtNTAsNyArNTAsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBHbGFzc0Zpc2ggSXNzdWUgNTkwIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEN1c3RvbVRhZ2xpYkphckluc2lkZUVhcldpdGhNYW5pZmVzdENsYXNzUGF0aC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEN1c3RvbVRhZ2xpYkphckluc2lkZUVhcldpdGhNYW5pZmVzdENsYXNzUGF0aC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGVhNWYzMDAuLjUxNzYzMzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDdXN0b21UYWdsaWJKYXJJbnNpZGVFYXJXaXRoTWFuaWZlc3RDbGFzc1BhdGgvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ3VzdG9tVGFnbGliSmFySW5zaWRlRWFyV2l0aE1hbmlmZXN0Q2xhc3NQYXRoL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE0ICsxNSwxNCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3AtY3VzdG9taS10YWdsaWItamFyLWluc2lkZS1lYXItd2l0aC1tYW5pZmVzdC1jbGFzc3BhdGgiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC1jdXN0b21pLXRhZ2xpYi1qYXItaW5zaWRlLWVhci13aXRoLW1hbmlmZXN0LWNsYXNzcGF0aCIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvJHthcHBuYW1lfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEN1c3RvbVRhZ2xpYkphckluc2lkZUVhcldpdGhNYW5pZmVzdENsYXNzUGF0aC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ3VzdG9tVGFnbGliSmFySW5zaWRlRWFyV2l0aE1hbmlmZXN0Q2xhc3NQYXRoL2J1aWxkLnhtbAppbmRleCAyZTA0NjU4Li5jY2ExMjJmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ3VzdG9tVGFnbGliSmFySW5zaWRlRWFyV2l0aE1hbmlmZXN0Q2xhc3NQYXRoL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ3VzdG9tVGFnbGliSmFySW5zaWRlRWFyV2l0aE1hbmlmZXN0Q2xhc3NQYXRoL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+CiAgICAgICAgIDxkZWxldGUgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7bXl0YWdsaWIuamFyfSIvPgpAQCAtNTYsOCArNTYsOCBAQAogICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIvPgogICAgICAgICA8ZWFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcC5lYXIiIGFwcHhtbD0iJHthcHBsaWNhdGlvbi54bWx9Ij4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHthc3NlbWJsZS5kaXJ9IiBpbmNsdWRlcz0iKi5qYXIsICoud2FyIi8+Ci0gICAgICAgIDwvZWFyPiAKLSAgICA8L3RhcmdldD4gCisgICAgICAgIDwvZWFyPgorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgpAQCAtNzAsOCArNzAsOCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgIAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTgzLDcgKzgzLDcgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ3VzdG9tVGFnbGliSmFySW5zaWRlRWFyV2l0aG91dE1hbmlmZXN0Q2xhc3NQYXRoL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDdXN0b21UYWdsaWJKYXJJbnNpZGVFYXJXaXRob3V0TWFuaWZlc3RDbGFzc1BhdGgvV2ViVGVzdC5qYXZhCmluZGV4IDE5ZDUwOGYuLjk0MDVjOWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDdXN0b21UYWdsaWJKYXJJbnNpZGVFYXJXaXRob3V0TWFuaWZlc3RDbGFzc1BhdGgvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDdXN0b21UYWdsaWJKYXJJbnNpZGVFYXJXaXRob3V0TWFuaWZlc3RDbGFzc1BhdGgvV2ViVGVzdC5qYXZhCkBAIC00OSw3ICs0OSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEdsYXNzRmlzaCBJc3N1ZSA1OTAiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ3VzdG9tVGFnbGliSmFySW5zaWRlRWFyV2l0aG91dE1hbmlmZXN0Q2xhc3NQYXRoL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ3VzdG9tVGFnbGliSmFySW5zaWRlRWFyV2l0aG91dE1hbmlmZXN0Q2xhc3NQYXRoL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggODE3NWMxNi4uOTI2YWI1YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEN1c3RvbVRhZ2xpYkphckluc2lkZUVhcldpdGhvdXRNYW5pZmVzdENsYXNzUGF0aC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BDdXN0b21UYWdsaWJKYXJJbnNpZGVFYXJXaXRob3V0TWFuaWZlc3RDbGFzc1BhdGgvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTQgKzE1LDE0IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC1jdXN0b20tdGFnbGliLWphci1pbnNpZGUtZWFyLXdpdGhvdXQtbWFuaWZlc3QtY2xhc3NwYXRoIi8+CiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvJHthcHBuYW1lfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEN1c3RvbVRhZ2xpYkphckluc2lkZUVhcldpdGhvdXRNYW5pZmVzdENsYXNzUGF0aC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ3VzdG9tVGFnbGliSmFySW5zaWRlRWFyV2l0aG91dE1hbmlmZXN0Q2xhc3NQYXRoL2J1aWxkLnhtbAppbmRleCBlZmZiZjc5Li4wMjcwY2I5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ3VzdG9tVGFnbGliSmFySW5zaWRlRWFyV2l0aG91dE1hbmlmZXN0Q2xhc3NQYXRoL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwQ3VzdG9tVGFnbGliSmFySW5zaWRlRWFyV2l0aG91dE1hbmlmZXN0Q2xhc3NQYXRoL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9L2xpYiIvPgogICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7YXNzZW1ibGUuZGlyfS9saWIvJHtteXRhZ2xpYi5qYXJ9Ii8+CkBAIC01Niw4ICs1Niw4IEBACiAgICAgICAgIDxkZWxldGUgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIi8+CiAgICAgICAgIDxlYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIgYXBweG1sPSIke2FwcGxpY2F0aW9uLnhtbH0iPgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iIGluY2x1ZGVzPSJsaWIvKi5qYXIsKi53YXIiLz4KLSAgICAgICAgPC9lYXI+IAotICAgIDwvdGFyZ2V0PiAKKyAgICAgICAgPC9lYXI+CisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CkBAIC03MCw4ICs3MCw4IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAgCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtODMsNyArODMsNyBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BFTEVudW0vV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEVMRW51bS9XZWJUZXN0LmphdmEKaW5kZXggYzYxYjkzZC4uN2Q3ZjljOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEVMRW51bS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEVMRW51bS9XZWJUZXN0LmphdmEKQEAgLTM5LDE2ICszOSwxNiBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBlbnVtIHN1cHBvcnQgaW4gRUwiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CiAgICAgICAgIHdlYlRlc3QuZG9UZXN0KCIvZW51bS5qc3AiLCAianNwLWVsLWVudW0tdGVzdCIpOwotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwcml2YXRlIGJvb2xlYW4gY2hlY2tWYWx1ZShCdWZmZXJlZFJlYWRlciBpbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZXhwZWN0ZWRWYWx1ZSkgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGV4cGVjdGVkVmFsdWUpCiAgICAgICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgU3RyaW5nIGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpOwogICAgICAgICBpZiAobGluZSA9PSBudWxsKQpAQCAtNjQsNyArNjQsNyBAQAogICAgICAgICAgICAgICAgICsgZXhwZWN0ZWRWYWx1ZSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7IAorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZyBwYXRoLCBTdHJpbmcgdGVzdE5hbWUpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BFTEVudW0vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BFTEVudW0vYnVpbGQucHJvcGVydGllcwppbmRleCA1NzFjZDFiLi44NGE5OTMyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRUxFbnVtL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEVMRW51bS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMiArMTUsMTIgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZWwtZW51bSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tZWwtZW51bSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0iLz4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEVMRW51bS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRUxFbnVtL2J1aWxkLnhtbAppbmRleCA4N2RiZDRjLi41YTFmMGM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRUxFbnVtL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRUxFbnVtL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTAgKzQyLDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCkBAIC01MywxMCArNTMsMTAgQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02NCw3ICs2NCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BFcnJvclBhZ2VDbGFzc0Nhc3RFeGNlcHRpb24vV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEVycm9yUGFnZUNsYXNzQ2FzdEV4Y2VwdGlvbi9XZWJUZXN0LmphdmEKaW5kZXggODEzNDM5Zi4uZDk1OGQ2ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEVycm9yUGFnZUNsYXNzQ2FzdEV4Y2VwdGlvbi9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEVycm9yUGFnZUNsYXNzQ2FzdEV4Y2VwdGlvbi9XZWJUZXN0LmphdmEKQEAgLTQ0LDEyICs0NCwxMiBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBCdWd6aWxsYSAzMTE3MSIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKICAgICAgICAgd2ViVGVzdC5kb1Rlc3QoKTsKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewpAQCAtNjQsNyArNjQsNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHRVQgIiArIHJlcXVlc3RVcmkgKyAiIEhUVFAvMS4wIik7CiAgICAgICAgICAgICBvcy53cml0ZSgoIkdFVCAiICsgcmVxdWVzdFVyaSArICIgSFRUUC8xLjBcbiIpLmdldEJ5dGVzKCkpOwogICAgICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgICAgIGlzID0gcy5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICAgICAgYmlzID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogICAgICAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOwpAQCAtNzQsNyArNzQsNyBAQAogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAKKwogICAgICAgICAgICAgaWYgKGxpbmUgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRXJyb3JQYWdlQ2xhc3NDYXN0RXhjZXB0aW9uL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRXJyb3JQYWdlQ2xhc3NDYXN0RXhjZXB0aW9uL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNjQzMzAxMS4uN2RhMzYzYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEVycm9yUGFnZUNsYXNzQ2FzdEV4Y2VwdGlvbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BFcnJvclBhZ2VDbGFzc0Nhc3RFeGNlcHRpb24vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3AtZXJyb3ItcGFnZS1jbGFzcy1jYXN0LWV4Y2VwdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEVycm9yUGFnZUNsYXNzQ2FzdEV4Y2VwdGlvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRXJyb3JQYWdlQ2xhc3NDYXN0RXhjZXB0aW9uL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRXJyb3JQYWdlQ2xhc3NDYXN0RXhjZXB0aW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRXJyb3JQYWdlQ2xhc3NDYXN0RXhjZXB0aW9uL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BFcnJvclBhZ2VTZXJ2bGV0RXJyb3JFeGNlcHRpb24vV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEVycm9yUGFnZVNlcnZsZXRFcnJvckV4Y2VwdGlvbi9XZWJUZXN0LmphdmEKaW5kZXggMmU0MTcxNy4uMGRhMjRhYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEVycm9yUGFnZVNlcnZsZXRFcnJvckV4Y2VwdGlvbi9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEVycm9yUGFnZVNlcnZsZXRFcnJvckV4Y2VwdGlvbi9XZWJUZXN0LmphdmEKQEAgLTU2LDcgKzU2LDcgQEAKICAgICAgICAgICAgIG9zLndyaXRlKCJcbiIuZ2V0Qnl0ZXMoKSk7CiAKICAgICAgICAgICAgIHRyeSAoSW5wdXRTdHJlYW0gaXMgPSBzLmdldElucHV0U3RyZWFtKCk7IEJ1ZmZlcmVkUmVhZGVyIGJpcyA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKSkgewotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOwogICAgICAgICAgICAgICAgIGludCBjb3VudCA9IDA7CiAgICAgICAgICAgICAgICAgd2hpbGUgKChsaW5lID0gYmlzLnJlYWRMaW5lKCkpICE9IG51bGwpIHsKQEAgLTY1LDcgKzY1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50Kys7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgCisKICAgICAgICAgICAgICAgICBpZiAoY291bnQgPT0gMikgewogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BFcnJvclBhZ2VTZXJ2bGV0RXJyb3JFeGNlcHRpb24vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BFcnJvclBhZ2VTZXJ2bGV0RXJyb3JFeGNlcHRpb24vYnVpbGQucHJvcGVydGllcwppbmRleCBiNzVlYTVlLi4wMjAxMDExIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRXJyb3JQYWdlU2VydmxldEVycm9yRXhjZXB0aW9uL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEVycm9yUGFnZVNlcnZsZXRFcnJvckV4Y2VwdGlvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC1lcnJvci1wYWdlLXNlcnZsZXQtZXJyb3ItZXhjZXB0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRXJyb3JQYWdlU2VydmxldEVycm9yRXhjZXB0aW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BFcnJvclBhZ2VTZXJ2bGV0RXJyb3JFeGNlcHRpb24vYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BFcnJvclBhZ2VTZXJ2bGV0RXJyb3JFeGNlcHRpb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BFcnJvclBhZ2VTZXJ2bGV0RXJyb3JFeGNlcHRpb24vYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEVycm9yUGFnZVN0YXR1c0NvZGUvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEVycm9yUGFnZVN0YXR1c0NvZGUvV2ViVGVzdC5qYXZhCmluZGV4IGIwMjEwMDcuLjFmZTkwZDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BFcnJvclBhZ2VTdGF0dXNDb2RlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRXJyb3JQYWdlU3RhdHVzQ29kZS9XZWJUZXN0LmphdmEKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgQnVndHJhcSA1MDE4MjkxIik7CiAgICAgICAgIHRyeSB7CkBAIC01MiwyMSArNTIsMjEgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdCArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICIvZm9vLmpzcCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOwogICAgICAgICBjb25uLmNvbm5lY3QoKTsKICAgICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm4uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gNTAwKSB7IAorICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDUwMCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UgY29kZS4gRXhwZWN0ZWQ6IDUwMCIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLCByZWNlaXZlZDogIiArIHJlc3BvbnNlQ29kZSk7Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BFcnJvclBhZ2VTdGF0dXNDb2RlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRXJyb3JQYWdlU3RhdHVzQ29kZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGJjZDg5ZmQuLjg0YjI4Y2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BFcnJvclBhZ2VTdGF0dXNDb2RlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEVycm9yUGFnZVN0YXR1c0NvZGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3AtZXJyb3ItcGFnZS1zdGF0dXMtY29kZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEVycm9yUGFnZVN0YXR1c0NvZGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEVycm9yUGFnZVN0YXR1c0NvZGUvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BFcnJvclBhZ2VTdGF0dXNDb2RlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRXJyb3JQYWdlU3RhdHVzQ29kZS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRXhjZXB0aW9uSW5UYWdCb2R5UmVzdG9yZUpzcFdyaXRlci9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRXhjZXB0aW9uSW5UYWdCb2R5UmVzdG9yZUpzcFdyaXRlci9XZWJUZXN0LmphdmEKaW5kZXggNmJjNTE1OS4uN2YyOWFlOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEV4Y2VwdGlvbkluVGFnQm9keVJlc3RvcmVKc3BXcml0ZXIvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BFeGNlcHRpb25JblRhZ0JvZHlSZXN0b3JlSnNwV3JpdGVyL1dlYlRlc3QuamF2YQpAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBCdWd6aWxsYSAxNjE4MSIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ4LDggKzQ4LDggQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlSnNwKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEV4Y2VwdGlvbkluVGFnQm9keVJlc3RvcmVKc3BXcml0ZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BFeGNlcHRpb25JblRhZ0JvZHlSZXN0b3JlSnNwV3JpdGVyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOWIxNjYyMC4uODdmZjYyZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEV4Y2VwdGlvbkluVGFnQm9keVJlc3RvcmVKc3BXcml0ZXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRXhjZXB0aW9uSW5UYWdCb2R5UmVzdG9yZUpzcFdyaXRlci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanNwLWV4Y2VwdGlvbi1pbi10YWctYm9keS1yZXN0b3JlLWpzcC13cml0ZXIiLz4gCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3AtZXhjZXB0aW9uLWluLXRhZy1ib2R5LXJlc3RvcmUtanNwLXdyaXRlciIvPlx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii8ke2FwcG5hbWV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRXhjZXB0aW9uSW5UYWdCb2R5UmVzdG9yZUpzcFdyaXRlci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRXhjZXB0aW9uSW5UYWdCb2R5UmVzdG9yZUpzcFdyaXRlci9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEV4Y2VwdGlvbkluVGFnQm9keVJlc3RvcmVKc3BXcml0ZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BFeGNlcHRpb25JblRhZ0JvZHlSZXN0b3JlSnNwV3JpdGVyL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BGb3J3YXJkTm9ybWFsaXplUGF0aC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRm9yd2FyZE5vcm1hbGl6ZVBhdGgvV2ViVGVzdC5qYXZhCmluZGV4IGFkM2ExNDQuLmI2ZGI1MzQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BGb3J3YXJkTm9ybWFsaXplUGF0aC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEZvcndhcmROb3JtYWxpemVQYXRoL1dlYlRlc3QuamF2YQpAQCAtNDMsNyArNDMsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBUb21jYXQgZm9yd2FyZCBhbmQgZ2V0UmVxdWVzdERpc3BhdGNoZXIgc2VjdXJpdHkgaXNzdWUiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC01MSw4ICs1MSw4IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BGb3J3YXJkTm9ybWFsaXplUGF0aC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEZvcndhcmROb3JtYWxpemVQYXRoL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZGUzZGYxNC4uMGVlMzI3NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEZvcndhcmROb3JtYWxpemVQYXRoL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEZvcndhcmROb3JtYWxpemVQYXRoL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanNwLWZvcndhcmQtbm9ybWFsaXplLXBhdGgiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BGb3J3YXJkTm9ybWFsaXplUGF0aC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRm9yd2FyZE5vcm1hbGl6ZVBhdGgvYnVpbGQueG1sCmluZGV4IGFkMDI1ZDkuLmRlMWRjZmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BGb3J3YXJkTm9ybWFsaXplUGF0aC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEZvcndhcmROb3JtYWxpemVQYXRoL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMjIgKzQ0LDIyIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTcxLDEwICs3MSwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BGb3J3YXJkUHJlc2VydmVBcHBsaWNhdGlvblJlc3BvbnNlV3JhcHBlci9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRm9yd2FyZFByZXNlcnZlQXBwbGljYXRpb25SZXNwb25zZVdyYXBwZXIvV2ViVGVzdC5qYXZhCmluZGV4IDZlN2NhYzIuLmIwZGY1OWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BGb3J3YXJkUHJlc2VydmVBcHBsaWNhdGlvblJlc3BvbnNlV3JhcHBlci9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEZvcndhcmRQcmVzZXJ2ZUFwcGxpY2F0aW9uUmVzcG9uc2VXcmFwcGVyL1dlYlRlc3QuamF2YQpAQCAtNDQsNyArNDQsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciA0ODc1ODA4Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTQsNyArNTQsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRm9yd2FyZFByZXNlcnZlQXBwbGljYXRpb25SZXNwb25zZVdyYXBwZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BGb3J3YXJkUHJlc2VydmVBcHBsaWNhdGlvblJlc3BvbnNlV3JhcHBlci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDk2ZDIxMjAuLjA2MDI0ZDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BGb3J3YXJkUHJlc2VydmVBcHBsaWNhdGlvblJlc3BvbnNlV3JhcHBlci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BGb3J3YXJkUHJlc2VydmVBcHBsaWNhdGlvblJlc3BvbnNlV3JhcHBlci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC1mb3J3YXJkLXByZXNlcnZlLWFwcGxpY2F0aW9uLXJlc3BvbnNlLXdyYXBwZXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BGb3J3YXJkUHJlc2VydmVBcHBsaWNhdGlvblJlc3BvbnNlV3JhcHBlci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRm9yd2FyZFByZXNlcnZlQXBwbGljYXRpb25SZXNwb25zZVdyYXBwZXIvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BGb3J3YXJkUHJlc2VydmVBcHBsaWNhdGlvblJlc3BvbnNlV3JhcHBlci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEZvcndhcmRQcmVzZXJ2ZUFwcGxpY2F0aW9uUmVzcG9uc2VXcmFwcGVyL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BGb3J3YXJkVW5idWZmZXJlZC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRm9yd2FyZFVuYnVmZmVyZWQvV2ViVGVzdC5qYXZhCmluZGV4IDlmM2UyN2YuLjA5OWRmZDcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BGb3J3YXJkVW5idWZmZXJlZC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEZvcndhcmRVbmJ1ZmZlcmVkL1dlYlRlc3QuamF2YQpAQCAtNDIsNyArNDIsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBCdWd6aWxsYSAxMzQ5OSIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdDEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKQEAgLTY1LDEwICs2NSwxMCBAQAogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgY29ubi5jb25uZWN0KCk7CiAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgeyAKKyAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlIGNvZGUuIEV4cGVjdGVkOiAyMDAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwgcmVjZWl2ZWQ6ICIgKyByZXNwb25zZUNvZGUpOwotCX0KKyAgICB9CiAgICAgfQogCiAgICAgLyoKQEAgLTgzLDcgKzgzLDcgQEAKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSA1MDApIHsgCisgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gNTAwKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZSBjb2RlLiBFeHBlY3RlZDogNTAwIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsIHJlY2VpdmVkOiAiICsgcmVzcG9uc2VDb2RlKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEZvcndhcmRVbmJ1ZmZlcmVkL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRm9yd2FyZFVuYnVmZmVyZWQvYnVpbGQucHJvcGVydGllcwppbmRleCA2ZDRmYTQ2Li40MThhODc0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRm9yd2FyZFVuYnVmZmVyZWQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRm9yd2FyZFVuYnVmZmVyZWQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3AtZm9yd2FyZC11bmJ1ZmZlcmVkIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRm9yd2FyZFVuYnVmZmVyZWQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEZvcndhcmRVbmJ1ZmZlcmVkL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwRm9yd2FyZFVuYnVmZmVyZWQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BGb3J3YXJkVW5idWZmZXJlZC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwR2V0VGFnTGlicmFyeUluZm9zL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BHZXRUYWdMaWJyYXJ5SW5mb3MvV2ViVGVzdC5qYXZhCmluZGV4IDE5Yzk2OTMuLjMyMjljNjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BHZXRUYWdMaWJyYXJ5SW5mb3MvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BHZXRUYWdMaWJyYXJ5SW5mb3MvV2ViVGVzdC5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgVGFnTGlicmFyeUluZm8uZ2V0VGFnTGlicmFyeUluZm9zKCkiKTsKQEAgLTUwLDExICs1MCwxMSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgICArIGNvbnRleHRSb290ICsgIi9qc3AvdGVzdC5qc3AiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEdldFRhZ0xpYnJhcnlJbmZvcy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEdldFRhZ0xpYnJhcnlJbmZvcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDc0Y2IzMDguLjI4Y2UxMTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BHZXRUYWdMaWJyYXJ5SW5mb3MvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwR2V0VGFnTGlicmFyeUluZm9zL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanNwLWdldC10YWctbGlicmFyeS1pbmZvcyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEdldFRhZ0xpYnJhcnlJbmZvcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwR2V0VGFnTGlicmFyeUluZm9zL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwR2V0VGFnTGlicmFyeUluZm9zL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwR2V0VGFnTGlicmFyeUluZm9zL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BHZXRUYWdMaWJyYXJ5SW5mb3Mvc2VydmxldC90YWdsaWIvTXlUYWdFeHRyYUluZm8uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BHZXRUYWdMaWJyYXJ5SW5mb3Mvc2VydmxldC90YWdsaWIvTXlUYWdFeHRyYUluZm8uamF2YQppbmRleCBlODBiZGEyLi45N2QyZmZiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwR2V0VGFnTGlicmFyeUluZm9zL3NlcnZsZXQvdGFnbGliL015VGFnRXh0cmFJbmZvLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEdldFRhZ0xpYnJhcnlJbmZvcy9zZXJ2bGV0L3RhZ2xpYi9NeVRhZ0V4dHJhSW5mby5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiAgICAgICAgICAgICB2bXNbMF0gPSBuZXcgVmFsaWRhdGlvbk1lc3NhZ2UobnVsbCwgIldyb25nIG51bWJlciBvZiB0c2dsaWJzIik7CiAgICAgICAgIH0KIAotCXJldHVybiB2bXM7CisgICAgcmV0dXJuIHZtczsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BJbldlYmFwcFdpdGhCdW5kbGVkWGVyY2VzSW1wbC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEluV2ViYXBwV2l0aEJ1bmRsZWRYZXJjZXNJbXBsL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZWU1M2YyNS4uMzIzMjM2YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEluV2ViYXBwV2l0aEJ1bmRsZWRYZXJjZXNJbXBsL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEluV2ViYXBwV2l0aEJ1bmRsZWRYZXJjZXNJbXBsL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanNwLWluLXdlYmFwcC13aXRoLWJ1bmRsZWQteGVyY2VzSW1wbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEluV2ViYXBwV2l0aEJ1bmRsZWRYZXJjZXNJbXBsL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BJbldlYmFwcFdpdGhCdW5kbGVkWGVyY2VzSW1wbC9idWlsZC54bWwKaW5kZXggODU0MmU5MS4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEluV2ViYXBwV2l0aEJ1bmRsZWRYZXJjZXNJbXBsL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwSW5XZWJhcHBXaXRoQnVuZGxlZFhlcmNlc0ltcGwvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxNyArNDIsMTcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIAogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BJbmNsdWRlUmVzb3VyY2VOYW1lV2l0aFBsdXNDaGFyL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BJbmNsdWRlUmVzb3VyY2VOYW1lV2l0aFBsdXNDaGFyL1dlYlRlc3QuamF2YQppbmRleCBjNTEyYjY3Li5mZmM5YmZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwSW5jbHVkZVJlc291cmNlTmFtZVdpdGhQbHVzQ2hhci9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEluY2x1ZGVSZXNvdXJjZU5hbWVXaXRoUGx1c0NoYXIvV2ViVGVzdC5qYXZhCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIDQ4OTcwMTcsIDQ3ODkyNzIiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC01MCw3ICs1MCw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BJbmNsdWRlUmVzb3VyY2VOYW1lV2l0aFBsdXNDaGFyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwSW5jbHVkZVJlc291cmNlTmFtZVdpdGhQbHVzQ2hhci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDU5ZWZjMDcuLjI2OTFhY2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BJbmNsdWRlUmVzb3VyY2VOYW1lV2l0aFBsdXNDaGFyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEluY2x1ZGVSZXNvdXJjZU5hbWVXaXRoUGx1c0NoYXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3AtaW5jbHVkZS1yZXNvdXJjZS1uYW1lLXdpdGgtcGx1cy1jaGFyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwSW5jbHVkZVJlc291cmNlTmFtZVdpdGhQbHVzQ2hhci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwSW5jbHVkZVJlc291cmNlTmFtZVdpdGhQbHVzQ2hhci9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEluY2x1ZGVSZXNvdXJjZU5hbWVXaXRoUGx1c0NoYXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BJbmNsdWRlUmVzb3VyY2VOYW1lV2l0aFBsdXNDaGFyL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BJbmNsdWRlZFdlbGNvbWVQYWdlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BJbmNsdWRlZFdlbGNvbWVQYWdlL1dlYlRlc3QuamF2YQppbmRleCA0OTgyYmZkLi5hM2E4ZTdhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwSW5jbHVkZWRXZWxjb21lUGFnZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEluY2x1ZGVkV2VsY29tZVBhZ2UvV2ViVGVzdC5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiAgKiBzZWUgaHR0cDovL2lzc3Vlcy5hcGFjaGUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD0zMzIyMy4KICAqCiAgKiBUaGlzIHRlc3QgY2FzZSB1c2VkIHRvIHRocm93IGEgamF2YS5sYW5nLlN0cmluZ0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24KLSAqIHdoZW4gcmVjb25zdHJ1Y3RpbmcgdGhlIFVSSSBvZiBhIEpTUCB0aGF0IGlzIHRoZSB0YXJnZXQgb2YgYSAKKyAqIHdoZW4gcmVjb25zdHJ1Y3RpbmcgdGhlIFVSSSBvZiBhIEpTUCB0aGF0IGlzIHRoZSB0YXJnZXQgb2YgYQogICogUmVxdWVzdERpc3BhdGNoZXIuaW5jbHVkZSgpIGZyb20gdGhlIGpha2FydGEuc2VydmxldC5pbmNsdWRlLlhYWAogICogcmVxdWVzdCBhdHRyaWJ1dGVzLgogICovCkBAIC00NSw3ICs0NSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEJ1Z3ppbGxhIDMzMjIzIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTMsOCArNTMsOCBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2VKc3AoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwSW5jbHVkZWRXZWxjb21lUGFnZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEluY2x1ZGVkV2VsY29tZVBhZ2UvYnVpbGQucHJvcGVydGllcwppbmRleCBhM2MzZGExLi5jOTEyODdkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwSW5jbHVkZWRXZWxjb21lUGFnZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BJbmNsdWRlZFdlbGNvbWVQYWdlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3AtaW5jbHVkZWQtd2VsY29tZS1wYWdlIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3AtaW5jbHVkZWQtd2VsY29tZS1wYWdlIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvJHthcHBuYW1lfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEluY2x1ZGVkV2VsY29tZVBhZ2UvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcEluY2x1ZGVkV2VsY29tZVBhZ2UvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BJbmNsdWRlZFdlbGNvbWVQYWdlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwSW5jbHVkZWRXZWxjb21lUGFnZS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwTmVzdGVkU2NyaXB0aW5nVGFnRXh0cmFJbmZvL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BOZXN0ZWRTY3JpcHRpbmdUYWdFeHRyYUluZm8vV2ViVGVzdC5qYXZhCmluZGV4IGNiYTk1OTcuLmJhZGI4OWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BOZXN0ZWRTY3JpcHRpbmdUYWdFeHRyYUluZm8vV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BOZXN0ZWRTY3JpcHRpbmdUYWdFeHRyYUluZm8vV2ViVGVzdC5qYXZhCkBAIC0zOCwyNSArMzgsMjUgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgQnVnemlsbGEgMjc2NjUiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CiAgICAgICAgIHdlYlRlc3QuZG9UZXN0KCk7Ci0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKIAogICAgICAgICBCdWZmZXJlZFJlYWRlciBiaXMgPSBudWxsOwotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydAogICAgICAgICAgICAgICAgICAgICAgICArIGNvbnRleHRSb290ICsgIi9qc3AvL3Rlc3QuanNwIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogICAgICAgICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm4uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgeyAKKyAgICAgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJXcm9uZyByZXNwb25zZSBjb2RlLiBFeHBlY3RlZDogMjAwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIHJlY2VpdmVkOiAiICsgcmVzcG9uc2VDb2RlKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwTmVzdGVkU2NyaXB0aW5nVGFnRXh0cmFJbmZvL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwTmVzdGVkU2NyaXB0aW5nVGFnRXh0cmFJbmZvL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNGJjMjc3ZC4uNDczOGM0NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcE5lc3RlZFNjcmlwdGluZ1RhZ0V4dHJhSW5mby9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BOZXN0ZWRTY3JpcHRpbmdUYWdFeHRyYUluZm8vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTQgKzE1LDE0IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC1uZXN0ZWQtc2NyaXB0aW5nLXRhZy1leHRyYS1pbmZvIi8+CiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii8ke2FwcG5hbWV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwTmVzdGVkU2NyaXB0aW5nVGFnRXh0cmFJbmZvL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BOZXN0ZWRTY3JpcHRpbmdUYWdFeHRyYUluZm8vYnVpbGQueG1sCmluZGV4IDg3ZGJkNGMuLjVhMWYwYzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BOZXN0ZWRTY3JpcHRpbmdUYWdFeHRyYUluZm8vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BOZXN0ZWRTY3JpcHRpbmdUYWdFeHRyYUluZm8vYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxMCArNDIsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTUzLDEwICs1MywxMCBAQAogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTY0LDcgKzY0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcE5lc3RlZFNjcmlwdGluZ1RhZ0V4dHJhSW5mby9zZXJ2bGV0L3RhZ2xpYi9NeVRhZy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcE5lc3RlZFNjcmlwdGluZ1RhZ0V4dHJhSW5mby9zZXJ2bGV0L3RhZ2xpYi9NeVRhZy5qYXZhCmluZGV4IGNhMWQzNTEuLjM5NGE5ZmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BOZXN0ZWRTY3JpcHRpbmdUYWdFeHRyYUluZm8vc2VydmxldC90YWdsaWIvTXlUYWcuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwTmVzdGVkU2NyaXB0aW5nVGFnRXh0cmFJbmZvL3NlcnZsZXQvdGFnbGliL015VGFnLmphdmEKQEAgLTIxLDcgKzIxLDcgQEAKIAogcHVibGljIGNsYXNzIE15VGFnIGV4dGVuZHMgVGFnU3VwcG9ydCB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnRlciA9IDE7IAorICAgIHByaXZhdGUgc3RhdGljIGludCBjb3VudGVyID0gMTsKIAogICAgIHByaXZhdGUgU3RyaW5nIG5hbWU7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BOdWxsRnJhZ21lbnQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcE51bGxGcmFnbWVudC9XZWJUZXN0LmphdmEKaW5kZXggMDI0YTEwNy4uMjQ1M2VkYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcE51bGxGcmFnbWVudC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcE51bGxGcmFnbWVudC9XZWJUZXN0LmphdmEKQEAgLTM3LDE4ICszNywxOCBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBCdWd6aWxsYSAyNzk0OCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKICAgICAgICAgd2ViVGVzdC5kb1Rlc3QoKTsKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogCiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJpcyA9IG51bGw7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL3Rlc3QuanNwIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwTnVsbEZyYWdtZW50L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwTnVsbEZyYWdtZW50L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYzc1YmVkYS4uNjc5NTNjZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcE51bGxGcmFnbWVudC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BOdWxsRnJhZ21lbnQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTQgKzE1LDE0IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC1udWxsLWZyYWdtZW50Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3AtbnVsbC1mcmFnbWVudCIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii8ke2FwcG5hbWV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwTnVsbEZyYWdtZW50L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BOdWxsRnJhZ21lbnQvYnVpbGQueG1sCmluZGV4IDg3ZGJkNGMuLjVhMWYwYzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BOdWxsRnJhZ21lbnQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BOdWxsRnJhZ21lbnQvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxMCArNDIsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTUzLDEwICs1MywxMCBAQAogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTY0LDcgKzY0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFBvdW5kU3ludGF4L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BQb3VuZFN5bnRheC9XZWJUZXN0LmphdmEKaW5kZXggYjA0MDQyOC4uMDVjZmFiZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFBvdW5kU3ludGF4L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUG91bmRTeW50YXgvV2ViVGVzdC5qYXZhCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3RzIGZvciBwb3VuZCBzeW50YXggYXMgbGl0ZXJhbCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTU0LDExICs1NCwxMSBAQAogICAgICAgICB3ZWJUZXN0LmRvVGVzdDQoIi90ZXN0anNwMjF6LmpzcCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAicG91bmQtc3ludGF4LWFsbG93ZWQtYXMtbGl0ZXJhbC10cnVlLXRlc3QiKTsKIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwcml2YXRlIGJvb2xlYW4gY2hlY2tWYWx1ZShCdWZmZXJlZFJlYWRlciBpbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcga2V5LCBTdHJpbmcgZXhwZWN0ZWRWYWx1ZSkgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGtleSwgU3RyaW5nIGV4cGVjdGVkVmFsdWUpCiAgICAgICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgU3RyaW5nIGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpOwogICAgICAgICB3aGlsZSAobGluZS5lcXVhbHMoIiIpKQpAQCAtNzUsNyArNzUsNyBAQAogICAgICAgICAgICAgICAgICsga2V5ICsgIjogIiArIGV4cGVjdGVkVmFsdWUgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOyAKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdDEoU3RyaW5nIHBhdGgsIFN0cmluZyB0ZXN0TmFtZSkgewpAQCAtMTMwLDE0ICsxMzAsMTQgQEAKIAogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0MihTdHJpbmcgcGF0aCwgU3RyaW5nIHRlc3ROYW1lKSB7Ci0gICAgIAotICAgICAgICB0cnkgeyAKKworICAgICAgICB0cnkgewogICAgICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAnOicgKyBwb3J0ICsgJy8nICsgY29udGV4dFJvb3QgKyBwYXRoKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKICAgICAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOwogICAgICAgICAgICAgY29ubi5jb25uZWN0KCk7CiAgICAgICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgICAgIGlmIChyZXNwb25zZUNvZGUgPT0gMjAwKSB7IAorICAgICAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSA9PSAyMDApIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIldyb25nIHJlc3BvbnNlIGNvZGUuIEV4cGVjdGVkOiA1MDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgcmVjZWl2ZWQ6ICIgKyByZXNwb25zZUNvZGUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3ROYW1lLCBzdGF0LkZBSUwpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFBvdW5kU3ludGF4L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUG91bmRTeW50YXgvYnVpbGQucHJvcGVydGllcwppbmRleCBjOTQ0NWM3Li4yODgyMDk0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUG91bmRTeW50YXgvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUG91bmRTeW50YXgvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTIgKzE1LDEyIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXBvdW5kLWxpdGVyYWwiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXBvdW5kLWxpdGVyYWwiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIke2FwcG5hbWV9Ii8+CiA8cHJvcGVydHkgbmFtZT0idGxkcyIgdmFsdWU9ImRlc2NyaXB0b3IvdGxkcyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFBvdW5kU3ludGF4L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BQb3VuZFN5bnRheC9idWlsZC54bWwKaW5kZXggODdkYmQ0Yy4uNWExZjBjNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFBvdW5kU3ludGF4L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUG91bmRTeW50YXgvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxMCArNDIsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTUzLDEwICs1MywxMCBAQAogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTY0LDcgKzY0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFByZWNvbXBpbGVDb25zaWRlckRvbWFpbkxpYkphckZpbGVzQW5kQ2xhc3Nlcy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUHJlY29tcGlsZUNvbnNpZGVyRG9tYWluTGliSmFyRmlsZXNBbmRDbGFzc2VzL1dlYlRlc3QuamF2YQppbmRleCBjMzYxMGNkLi4zYzI1MjZmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUHJlY29tcGlsZUNvbnNpZGVyRG9tYWluTGliSmFyRmlsZXNBbmRDbGFzc2VzL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUHJlY29tcGlsZUNvbnNpZGVyRG9tYWluTGliSmFyRmlsZXNBbmRDbGFzc2VzL1dlYlRlc3QuamF2YQpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIDYyNTE4NzIiKTsKQEAgLTU0LDExICs1NCwxMSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgICArIGNvbnRleHRSb290ICsgIi9qc3AvdGVzdC5qc3AiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFByZWNvbXBpbGVDb25zaWRlckRvbWFpbkxpYkphckZpbGVzQW5kQ2xhc3Nlcy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFByZWNvbXBpbGVDb25zaWRlckRvbWFpbkxpYkphckZpbGVzQW5kQ2xhc3Nlcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDNmM2RmZjAuLjQ5NTNkN2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BQcmVjb21waWxlQ29uc2lkZXJEb21haW5MaWJKYXJGaWxlc0FuZENsYXNzZXMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUHJlY29tcGlsZUNvbnNpZGVyRG9tYWluTGliSmFyRmlsZXNBbmRDbGFzc2VzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanNwLXByZWNvbXBpbGUtY29uc2lkZXItZG9tYWluLWxpYi1qYXJmaWxlcy1hbmQtY2xhc3NlcyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFByZWNvbXBpbGVDb25zaWRlckRvbWFpbkxpYkphckZpbGVzQW5kQ2xhc3Nlcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUHJlY29tcGlsZUNvbnNpZGVyRG9tYWluTGliSmFyRmlsZXNBbmRDbGFzc2VzL2J1aWxkLnhtbAppbmRleCBlNzdhZWY0Li4zMDcwZWQzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUHJlY29tcGlsZUNvbnNpZGVyRG9tYWluTGliSmFyRmlsZXNBbmRDbGFzc2VzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUHJlY29tcGlsZUNvbnNpZGVyRG9tYWluTGliSmFyRmlsZXNBbmRDbGFzc2VzL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ibXljbGFzc2VzIi8+CkBAIC00NCwxOSArNDQsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTY0LDcgKzY0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFByZWNvbXBpbGVEZXBsb3lEYXNoRGFzaExpYnJhcmllcy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUHJlY29tcGlsZURlcGxveURhc2hEYXNoTGlicmFyaWVzL1dlYlRlc3QuamF2YQppbmRleCBkNTY2N2RhLi4wNThiMjk2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUHJlY29tcGlsZURlcGxveURhc2hEYXNoTGlicmFyaWVzL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUHJlY29tcGlsZURlcGxveURhc2hEYXNoTGlicmFyaWVzL1dlYlRlc3QuamF2YQpAQCAtNDIsNyArNDIsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEdsYXNzRmlzaCBJc3N1ZSA0ODgzIik7CkBAIC01NiwxMSArNTYsMTEgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdCArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICIvdGVzdC5qc3AiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFByZWNvbXBpbGVEZXBsb3lEYXNoRGFzaExpYnJhcmllcy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFByZWNvbXBpbGVEZXBsb3lEYXNoRGFzaExpYnJhcmllcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDYyZTYyMDEuLjVlYzM4YmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BQcmVjb21waWxlRGVwbG95RGFzaERhc2hMaWJyYXJpZXMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUHJlY29tcGlsZURlcGxveURhc2hEYXNoTGlicmFyaWVzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanNwLXByZWNvbXBpbGUtZGVwbG95LWRhc2gtZGFzaC1saWJyYXJpZXMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BQcmVjb21waWxlRGVwbG95RGFzaERhc2hMaWJyYXJpZXMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFByZWNvbXBpbGVEZXBsb3lEYXNoRGFzaExpYnJhcmllcy9idWlsZC54bWwKaW5kZXggN2U4YzAyNC4uM2MyNmFhMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFByZWNvbXBpbGVEZXBsb3lEYXNoRGFzaExpYnJhcmllcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFByZWNvbXBpbGVEZXBsb3lEYXNoRGFzaExpYnJhcmllcy9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMjMgKzQ0LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWxpYnJhcmllcyIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzIsMTAgKzcyLDEwIEBACiAgICAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFByZWNvbXBpbGVJZ25vcmVGcmFnbWVudEVycm9ycy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUHJlY29tcGlsZUlnbm9yZUZyYWdtZW50RXJyb3JzL1dlYlRlc3QuamF2YQppbmRleCAwM2JlMDEzLi4xZTY5YWRlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUHJlY29tcGlsZUlnbm9yZUZyYWdtZW50RXJyb3JzL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUHJlY29tcGlsZUlnbm9yZUZyYWdtZW50RXJyb3JzL1dlYlRlc3QuamF2YQpAQCAtMjUsNyArMjUsNyBAQAogICogcHJlY29tcGlsYXRpb24gKGR1cmluZyBkZXBsb3ltZW50KSBhcyBsb25nIGFzIGpzcC1jb25maWcgcHJvcGVydHkKICAqICdpZ25vcmVKc3BGcmFnbWVudEVycm9ycycgaGFzIGJlZW4gc2V0IHRvIFRSVUUgaW4gc3VuLXdlYi54bWwuCiAgKgotICogT3RoZXJ3aXNlLCBwcmVjb21waWxhdGlvbiBvZiB0aGlzIHdlYmFwcCdzIEpTUHMgd291bGQgaGF2ZSBmYWlsZWQsIAorICogT3RoZXJ3aXNlLCBwcmVjb21waWxhdGlvbiBvZiB0aGlzIHdlYmFwcCdzIEpTUHMgd291bGQgaGF2ZSBmYWlsZWQsCiAgKiBzaW5jZSB0aGUgJ2NvdW50ZXInIHZhcmlhYmxlIGlzIG5vdCBkZWNsYXJlZCBpbiBhbnkgb2YgdGhlIGluY2x1ZGVkCiAgKiBKU1Agc2VnbWVudHMuCiAgKi8KQEAgLTQ4LDcgKzQ4LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciA2MzkzOTQwIik7CkBAIC02MSw3ICs2MSw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BQcmVjb21waWxlSWdub3JlRnJhZ21lbnRFcnJvcnMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BQcmVjb21waWxlSWdub3JlRnJhZ21lbnRFcnJvcnMvYnVpbGQucHJvcGVydGllcwppbmRleCBiOTJjNDg5Li43OTcxNjQ1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUHJlY29tcGlsZUlnbm9yZUZyYWdtZW50RXJyb3JzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFByZWNvbXBpbGVJZ25vcmVGcmFnbWVudEVycm9ycy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC1wcmVjb21waWxlLWlnbm9yZS1mcmFnbWVudC1lcnJvcnMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BQcmVjb21waWxlSWdub3JlRnJhZ21lbnRFcnJvcnMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFByZWNvbXBpbGVJZ25vcmVGcmFnbWVudEVycm9ycy9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFByZWNvbXBpbGVJZ25vcmVGcmFnbWVudEVycm9ycy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFByZWNvbXBpbGVJZ25vcmVGcmFnbWVudEVycm9ycy9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUHJlY29tcGlsZUlnbm9yZUZyYWdtZW50RXJyb3JzL2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUHJlY29tcGlsZUlnbm9yZUZyYWdtZW50RXJyb3JzL2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwKaW5kZXggODhmYmViZi4uNjllYWJiMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFByZWNvbXBpbGVJZ25vcmVGcmFnbWVudEVycm9ycy9kZXNjcmlwdG9yL3N1bi13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BQcmVjb21waWxlSWdub3JlRnJhZ21lbnRFcnJvcnMvZGVzY3JpcHRvci9zdW4td2ViLnhtbApAQCAtMjIsNSArMjIsNSBAQAogPHN1bi13ZWItYXBwPgogICA8anNwLWNvbmZpZz4KICAgICA8cHJvcGVydHkgbmFtZT0iaWdub3JlSnNwRnJhZ21lbnRFcnJvcnMiIHZhbHVlPSJ0cnVlIiAvPgotICA8L2pzcC1jb25maWc+IAorICA8L2pzcC1jb25maWc+CiA8L3N1bi13ZWItYXBwPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlbG9hZEdlbmVyYXRlZFNlcnZsZXRJZlVwZGF0ZWQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlbG9hZEdlbmVyYXRlZFNlcnZsZXRJZlVwZGF0ZWQvV2ViVGVzdC5qYXZhCmluZGV4IGQzZTllYTcuLjk1NGEzZmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZWxvYWRHZW5lcmF0ZWRTZXJ2bGV0SWZVcGRhdGVkL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVsb2FkR2VuZXJhdGVkU2VydmxldElmVXBkYXRlZC9XZWJUZXN0LmphdmEKQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgICAgICBydW4gPSBhcmdzWzNdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgdG8gZW5zdXJlIHRoYXQgc2VydmxldCB0aGF0ICIKQEAgLTc1LDcgKzc1LDcgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlbG9hZEdlbmVyYXRlZFNlcnZsZXRJZlVwZGF0ZWQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZWxvYWRHZW5lcmF0ZWRTZXJ2bGV0SWZVcGRhdGVkL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMjY2NTU4ZC4uODk5Y2E2OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlbG9hZEdlbmVyYXRlZFNlcnZsZXRJZlVwZGF0ZWQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVsb2FkR2VuZXJhdGVkU2VydmxldElmVXBkYXRlZC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC1yZWxvYWQtZ2VuZXJhdGVkLXNlcnZsZXQtaWYtdXBkYXRlZCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlbG9hZEdlbmVyYXRlZFNlcnZsZXRJZlVwZGF0ZWQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlbG9hZEdlbmVyYXRlZFNlcnZsZXRJZlVwZGF0ZWQvYnVpbGQueG1sCmluZGV4IDZjZWVmNmEuLjc3NGUzMTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZWxvYWRHZW5lcmF0ZWRTZXJ2bGV0SWZVcGRhdGVkL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVsb2FkR2VuZXJhdGVkU2VydmxldElmVXBkYXRlZC9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDE5ICs0NCwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjQsNyArNjQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuZmlyc3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTkwLDEwICs5MCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZWxvYWRHZW5lcmF0ZWRTZXJ2bGV0SWZVcGRhdGVkL3Rlc3RfanNwLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVsb2FkR2VuZXJhdGVkU2VydmxldElmVXBkYXRlZC90ZXN0X2pzcC5qYXZhCmluZGV4IDRjY2UxYWEuLmUyMmJkZDEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZWxvYWRHZW5lcmF0ZWRTZXJ2bGV0SWZVcGRhdGVkL3Rlc3RfanNwLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlbG9hZEdlbmVyYXRlZFNlcnZsZXRJZlVwZGF0ZWQvdGVzdF9qc3AuamF2YQpAQCAtNDksNyArNDksNyBAQAogICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgcmVzcG9uc2Uuc2V0SGVhZGVyKCJYLVBvd2VyZWQtQnkiLCAiSlNQLzIuMyIpOwogICAgICAgcGFnZUNvbnRleHQgPSBfanNweEZhY3RvcnkuZ2V0UGFnZUNvbnRleHQodGhpcywgcmVxdWVzdCwgcmVzcG9uc2UsCi0gICAgICAJCQludWxsLCB0cnVlLCA4MTkyLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgIG51bGwsIHRydWUsIDgxOTIsIHRydWUpOwogICAgICAgX2pzcHhfcGFnZV9jb250ZXh0ID0gcGFnZUNvbnRleHQ7CiAgICAgICBhcHBsaWNhdGlvbiA9IHBhZ2VDb250ZXh0LmdldFNlcnZsZXRDb250ZXh0KCk7CiAgICAgICBjb25maWcgPSBwYWdlQ29udGV4dC5nZXRTZXJ2bGV0Q29uZmlnKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25Db250ZXh0TGlzdGVuZXIvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uQ29udGV4dExpc3RlbmVyL1dlYlRlc3QuamF2YQppbmRleCBiYTU4NmZhLi5lNzE1YmIwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25Db250ZXh0TGlzdGVuZXIvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZXNvdXJjZUluamVjdGlvbkNvbnRleHRMaXN0ZW5lci9XZWJUZXN0LmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciByZXNvdXJjZSBpbmplY3Rpb24gaW50byBKU1AgIgpAQCAtNTQsNyArNTQsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25Db250ZXh0TGlzdGVuZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZXNvdXJjZUluamVjdGlvbkNvbnRleHRMaXN0ZW5lci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDcwZmQ1MmQuLmQxNDBiOTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZXNvdXJjZUluamVjdGlvbkNvbnRleHRMaXN0ZW5lci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZXNvdXJjZUluamVjdGlvbkNvbnRleHRMaXN0ZW5lci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC1yZXNvdXJjZS1pbmplY3Rpb24tY29udGV4dC1saXN0ZW5lciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uQ29udGV4dExpc3RlbmVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZXNvdXJjZUluamVjdGlvbkNvbnRleHRMaXN0ZW5lci9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uQ29udGV4dExpc3RlbmVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25Db250ZXh0TGlzdGVuZXIvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uQ29udGV4dExpc3RlbmVyL3NlcnZsZXQvdGFnbGliL015TGlzdGVuZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZXNvdXJjZUluamVjdGlvbkNvbnRleHRMaXN0ZW5lci9zZXJ2bGV0L3RhZ2xpYi9NeUxpc3RlbmVyLmphdmEKaW5kZXggZWU1YjBmNy4uZGZhYjhhNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uQ29udGV4dExpc3RlbmVyL3NlcnZsZXQvdGFnbGliL015TGlzdGVuZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25Db250ZXh0TGlzdGVuZXIvc2VydmxldC90YWdsaWIvTXlMaXN0ZW5lci5qYXZhCkBAIC00OSw3ICs0OSw3IEBACiAgICAgcHVibGljIHZvaWQgY29udGV4dEluaXRpYWxpemVkKFNlcnZsZXRDb250ZXh0RXZlbnQgc2NlKSB7CiAKICAgICAgICAgU2VydmxldENvbnRleHQgc2MgPSBzY2UuZ2V0U2VydmxldENvbnRleHQoKTsKLSAgICAKKwogICAgICAgICB0cnkgewogCiAgICAgICAgICAgICBpbnQgbG9naW5UaW1lb3V0ID0gZHMxLmdldExvZ2luVGltZW91dCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uU2ltcGxlVGFnSGFuZGxlci9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25TaW1wbGVUYWdIYW5kbGVyL1dlYlRlc3QuamF2YQppbmRleCAxYTEzYzNkLi5iMDk2YmZjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25TaW1wbGVUYWdIYW5kbGVyL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25TaW1wbGVUYWdIYW5kbGVyL1dlYlRlc3QuamF2YQpAQCAtNDIsNyArNDIsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIHJlc291cmNlIGluamVjdGlvbiBpbnRvICIKQEAgLTU2LDcgKzU2LDcgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uU2ltcGxlVGFnSGFuZGxlci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uU2ltcGxlVGFnSGFuZGxlci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGY4ZmRiOTUuLmNhODk1ODggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZXNvdXJjZUluamVjdGlvblNpbXBsZVRhZ0hhbmRsZXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25TaW1wbGVUYWdIYW5kbGVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanNwLXJlc291cmNlLWluamVjdGlvbi1zaW1wbGUtdGFnLWhhbmRsZXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZXNvdXJjZUluamVjdGlvblNpbXBsZVRhZ0hhbmRsZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uU2ltcGxlVGFnSGFuZGxlci9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uU2ltcGxlVGFnSGFuZGxlci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uU2ltcGxlVGFnSGFuZGxlci9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25TaW1wbGVUYWdIYW5kbGVyL3NlcnZsZXQvdGFnbGliL015U2ltcGxlVGFnLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25TaW1wbGVUYWdIYW5kbGVyL3NlcnZsZXQvdGFnbGliL015U2ltcGxlVGFnLmphdmEKaW5kZXggOGZjNjQ0NC4uMmY4ZGU3ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uU2ltcGxlVGFnSGFuZGxlci9zZXJ2bGV0L3RhZ2xpYi9NeVNpbXBsZVRhZy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZXNvdXJjZUluamVjdGlvblNpbXBsZVRhZ0hhbmRsZXIvc2VydmxldC90YWdsaWIvTXlTaW1wbGVUYWcuamF2YQpAQCAtNzUsNiArNzUsNiBAQAogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEpzcEV4Y2VwdGlvbihleCk7Ci0gICAgICAgIH0gCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25UYWdIYW5kbGVyL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZXNvdXJjZUluamVjdGlvblRhZ0hhbmRsZXIvV2ViVGVzdC5qYXZhCmluZGV4IDMwYjIyNGIuLjM0ZmNiMjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZXNvdXJjZUluamVjdGlvblRhZ0hhbmRsZXIvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZXNvdXJjZUluamVjdGlvblRhZ0hhbmRsZXIvV2ViVGVzdC5qYXZhCkBAIC00Miw3ICs0Miw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgcmVzb3VyY2UgaW5qZWN0aW9uIGludG8gSlNQIHRhZyBoYW5kbGVyIik7CkBAIC01NSw3ICs1NSw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZXNvdXJjZUluamVjdGlvblRhZ0hhbmRsZXIvYnVpbGQtbmcueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uVGFnSGFuZGxlci9idWlsZC1uZy54bWwKaW5kZXggNjM1ZDg5Yy4uZjYwMzMyMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uVGFnSGFuZGxlci9idWlsZC1uZy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uVGFnSGFuZGxlci9idWlsZC1uZy54bWwKQEAgLTU3LDkgKzU3LDkgQEAKICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgPC90YXJnZXQ+IAorICAgPC90YXJnZXQ+CiAKICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgpAQCAtOTEsNyArOTEsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25UYWdIYW5kbGVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25UYWdIYW5kbGVyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZWVlNDg4Yi4uMTJkNjY5YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uVGFnSGFuZGxlci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZXNvdXJjZUluamVjdGlvblRhZ0hhbmRsZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3AtcmVzb3VyY2UtaW5qZWN0aW9uLXRhZy1oYW5kbGVyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25UYWdIYW5kbGVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZXNvdXJjZUluamVjdGlvblRhZ0hhbmRsZXIvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZXNvdXJjZUluamVjdGlvblRhZ0hhbmRsZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZXNvdXJjZUluamVjdGlvblRhZ0hhbmRsZXIvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uVGFnSGFuZGxlci9zZXJ2bGV0L3RhZ2xpYi9NeVRhZy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uVGFnSGFuZGxlci9zZXJ2bGV0L3RhZ2xpYi9NeVRhZy5qYXZhCmluZGV4IGNlNWE2NGIuLjk4YjJhMzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZXNvdXJjZUluamVjdGlvblRhZ0hhbmRsZXIvc2VydmxldC90YWdsaWIvTXlUYWcuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25UYWdIYW5kbGVyL3NlcnZsZXQvdGFnbGliL015VGFnLmphdmEKQEAgLTc2LDcgKzc2LDcgQEAKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBKc3BFeGNlcHRpb24oZXgpOwotICAgICAgICB9IAorICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIFNLSVBfQk9EWTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25UYWdIYW5kbGVyL3Rlc3QvV2ViVGVzdE5HLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25UYWdIYW5kbGVyL3Rlc3QvV2ViVGVzdE5HLmphdmEKaW5kZXggNTRlYzBjYi4uZTBiZTlhYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uVGFnSGFuZGxlci90ZXN0L1dlYlRlc3RORy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZXNvdXJjZUluamVjdGlvblRhZ0hhbmRsZXIvdGVzdC9XZWJUZXN0TkcuamF2YQpAQCAtNTcsNyArNTcsNyBAQAogICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgbGFzdExpbmUgPSBsaW5lOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMobGFzdExpbmUsIEVYUEVDVEVEX1JFU1BPTlNFKTsKIAogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZXNvdXJjZUluamVjdGlvblRhZ0hhbmRsZXIvdGVzdC90ZXN0bmcueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uVGFnSGFuZGxlci90ZXN0L3Rlc3RuZy54bWwKaW5kZXggY2EwYTIwYi4uNDM3NGJhOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uVGFnSGFuZGxlci90ZXN0L3Rlc3RuZy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uVGFnSGFuZGxlci90ZXN0L3Rlc3RuZy54bWwKQEAgLTE3LDcgKzE3LDcgQEAKIC0tPgogCiA8IURPQ1RZUEUgc3VpdGUgU1lTVEVNICJodHRwOi8vdGVzdG5nLm9yZy90ZXN0bmctMS4wLmR0ZCIgPgotICAKKwogPHN1aXRlIG5hbWU9IndlYiIgPgogICA8cGFyYW1ldGVyIG5hbWU9Imhvc3QiIHZhbHVlPSJsb2NhbGhvc3QiLz4KICAgPHBhcmFtZXRlciBuYW1lPSJwb3J0IiB2YWx1ZT0iODA4MCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uVGFnSGFuZGxlclBvb2xpbmdEaXNhYmxlZC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25UYWdIYW5kbGVyUG9vbGluZ0Rpc2FibGVkL1dlYlRlc3QuamF2YQppbmRleCA4MWEyZTZiLi40NmJlZmM1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25UYWdIYW5kbGVyUG9vbGluZ0Rpc2FibGVkL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25UYWdIYW5kbGVyUG9vbGluZ0Rpc2FibGVkL1dlYlRlc3QuamF2YQpAQCAtNDMsNyArNDMsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIHJlc291cmNlIGluamVjdGlvbiBpbnRvIEpTUCB0YWcgaGFuZGxlciIpOwpAQCAtNTcsNyArNTcsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25UYWdIYW5kbGVyUG9vbGluZ0Rpc2FibGVkL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25UYWdIYW5kbGVyUG9vbGluZ0Rpc2FibGVkL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggN2VhOWExMC4uYzM1ZjAyNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uVGFnSGFuZGxlclBvb2xpbmdEaXNhYmxlZC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZXNvdXJjZUluamVjdGlvblRhZ0hhbmRsZXJQb29saW5nRGlzYWJsZWQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3AtcmVzb3VyY2UtaW5qZWN0aW9uLXRhZy1oYW5kbGVyLXBvb2xpbmctZGlzYWJsZWQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZXNvdXJjZUluamVjdGlvblRhZ0hhbmRsZXJQb29saW5nRGlzYWJsZWQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uVGFnSGFuZGxlclBvb2xpbmdEaXNhYmxlZC9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uVGFnSGFuZGxlclBvb2xpbmdEaXNhYmxlZC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uVGFnSGFuZGxlclBvb2xpbmdEaXNhYmxlZC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25UYWdIYW5kbGVyUG9vbGluZ0Rpc2FibGVkL3NlcnZsZXQvdGFnbGliL015VGFnLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUmVzb3VyY2VJbmplY3Rpb25UYWdIYW5kbGVyUG9vbGluZ0Rpc2FibGVkL3NlcnZsZXQvdGFnbGliL015VGFnLmphdmEKaW5kZXggY2U1YTY0Yi4uOThiMmEzMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJlc291cmNlSW5qZWN0aW9uVGFnSGFuZGxlclBvb2xpbmdEaXNhYmxlZC9zZXJ2bGV0L3RhZ2xpYi9NeVRhZy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSZXNvdXJjZUluamVjdGlvblRhZ0hhbmRsZXJQb29saW5nRGlzYWJsZWQvc2VydmxldC90YWdsaWIvTXlUYWcuamF2YQpAQCAtNzYsNyArNzYsNyBAQAogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEpzcEV4Y2VwdGlvbihleCk7Ci0gICAgICAgIH0gCisgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gU0tJUF9CT0RZOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSdW50aW1lQ29tcGlsZUNvbnNpZGVyRG9tYWluTGliSmFyRmlsZXNBbmRDbGFzc2VzL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSdW50aW1lQ29tcGlsZUNvbnNpZGVyRG9tYWluTGliSmFyRmlsZXNBbmRDbGFzc2VzL1dlYlRlc3QuamF2YQppbmRleCBmMGZkZGIzLi41OTUwYmE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUnVudGltZUNvbXBpbGVDb25zaWRlckRvbWFpbkxpYkphckZpbGVzQW5kQ2xhc3Nlcy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJ1bnRpbWVDb21waWxlQ29uc2lkZXJEb21haW5MaWJKYXJGaWxlc0FuZENsYXNzZXMvV2ViVGVzdC5qYXZhCkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgNjI1MTg3MiIpOwpAQCAtNTQsMTEgKzU0LDExIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL2pzcC90ZXN0LmpzcCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUnVudGltZUNvbXBpbGVDb25zaWRlckRvbWFpbkxpYkphckZpbGVzQW5kQ2xhc3Nlcy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJ1bnRpbWVDb21waWxlQ29uc2lkZXJEb21haW5MaWJKYXJGaWxlc0FuZENsYXNzZXMvYnVpbGQucHJvcGVydGllcwppbmRleCBiMGIxNzc3Li4wZTA1ZjY0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUnVudGltZUNvbXBpbGVDb25zaWRlckRvbWFpbkxpYkphckZpbGVzQW5kQ2xhc3Nlcy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSdW50aW1lQ29tcGlsZUNvbnNpZGVyRG9tYWluTGliSmFyRmlsZXNBbmRDbGFzc2VzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanNwLXJ1bnRpbWUtY29tcGlsZS1jb25zaWRlci1kb21haW4tbGliLWphcmZpbGVzLWFuZC1jbGFzc2VzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUnVudGltZUNvbXBpbGVDb25zaWRlckRvbWFpbkxpYkphckZpbGVzQW5kQ2xhc3Nlcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUnVudGltZUNvbXBpbGVDb25zaWRlckRvbWFpbkxpYkphckZpbGVzQW5kQ2xhc3Nlcy9idWlsZC54bWwKaW5kZXggMWFhYjZkMi4uYzgzMjQ4OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJ1bnRpbWVDb21waWxlQ29uc2lkZXJEb21haW5MaWJKYXJGaWxlc0FuZENsYXNzZXMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSdW50aW1lQ29tcGlsZUNvbnNpZGVyRG9tYWluTGliSmFyRmlsZXNBbmRDbGFzc2VzL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ibXljbGFzc2VzIi8+CkBAIC00NCwxOSArNDQsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTY0LDcgKzY0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJ1bnRpbWVEZXBsb3lEYXNoRGFzaExpYnJhcmllcy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUnVudGltZURlcGxveURhc2hEYXNoTGlicmFyaWVzL1dlYlRlc3QuamF2YQppbmRleCBlMDYwNTRjLi5kYjkwY2NhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUnVudGltZURlcGxveURhc2hEYXNoTGlicmFyaWVzL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUnVudGltZURlcGxveURhc2hEYXNoTGlicmFyaWVzL1dlYlRlc3QuamF2YQpAQCAtNDIsNyArNDIsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEdsYXNzRmlzaCBJc3N1ZSA0ODgzIik7CkBAIC01NiwxMSArNTYsMTEgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdCArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICIvdGVzdC5qc3AiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJ1bnRpbWVEZXBsb3lEYXNoRGFzaExpYnJhcmllcy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJ1bnRpbWVEZXBsb3lEYXNoRGFzaExpYnJhcmllcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGFkYzdmMTYuLjM0NjMzNDIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSdW50aW1lRGVwbG95RGFzaERhc2hMaWJyYXJpZXMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwUnVudGltZURlcGxveURhc2hEYXNoTGlicmFyaWVzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanNwLXJ1bnRpbWUtZGVwbG95LWRhc2gtZGFzaC1saWJyYXJpZXMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BSdW50aW1lRGVwbG95RGFzaERhc2hMaWJyYXJpZXMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJ1bnRpbWVEZXBsb3lEYXNoRGFzaExpYnJhcmllcy9idWlsZC54bWwKaW5kZXggMTEzYmJlMS4uYzAwMWYwMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJ1bnRpbWVEZXBsb3lEYXNoRGFzaExpYnJhcmllcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFJ1bnRpbWVEZXBsb3lEYXNoRGFzaExpYnJhcmllcy9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMTkgKzQ0LDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWxpYnJhcmllcyIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNzIsMTAgKzcyLDEwIEBACiAgICAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNjcmlwdGxlc3NUYWdCb2R5SnNwRG9jdW1lbnQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNjcmlwdGxlc3NUYWdCb2R5SnNwRG9jdW1lbnQvV2ViVGVzdC5qYXZhCmluZGV4IDcyODM2MGYuLjI2OTdkYWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTY3JpcHRsZXNzVGFnQm9keUpzcERvY3VtZW50L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2NyaXB0bGVzc1RhZ0JvZHlKc3BEb2N1bWVudC9XZWJUZXN0LmphdmEKQEAgLTQzLDcgKzQzLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwogICAgICAgICB3ZWJUZXN0LmRvVGVzdCgpOwpAQCAtNTEsNyArNTEsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgCisKICAgICAgICAgdHJ5IHsKIAogICAgICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2NyaXB0bGVzc1RhZ0JvZHlKc3BEb2N1bWVudC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNjcmlwdGxlc3NUYWdCb2R5SnNwRG9jdW1lbnQvYnVpbGQucHJvcGVydGllcwppbmRleCA5NjYzZDdlLi41NjE3YzQwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2NyaXB0bGVzc1RhZ0JvZHlKc3BEb2N1bWVudC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTY3JpcHRsZXNzVGFnQm9keUpzcERvY3VtZW50L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE0ICsxNSwxNCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3Atc2NyaXB0bGVzcy10YWctYm9keS1qc3AtZG9jdW1lbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iLyR7YXBwbmFtZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTY3JpcHRsZXNzVGFnQm9keUpzcERvY3VtZW50L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTY3JpcHRsZXNzVGFnQm9keUpzcERvY3VtZW50L2J1aWxkLnhtbAppbmRleCA4N2RiZDRjLi41YTFmMGM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2NyaXB0bGVzc1RhZ0JvZHlKc3BEb2N1bWVudC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNjcmlwdGxlc3NUYWdCb2R5SnNwRG9jdW1lbnQvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxMCArNDIsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTUzLDEwICs1MywxMCBAQAogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTY0LDcgKzY0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNjcmlwdGxldEFmdGVyU2NyaXB0bGVzc1RhZy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2NyaXB0bGV0QWZ0ZXJTY3JpcHRsZXNzVGFnL1dlYlRlc3QuamF2YQppbmRleCA2ODFjZDFjLi42MWU3YTViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2NyaXB0bGV0QWZ0ZXJTY3JpcHRsZXNzVGFnL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2NyaXB0bGV0QWZ0ZXJTY3JpcHRsZXNzVGFnL1dlYlRlc3QuamF2YQpAQCAtNDAsMjUgKzQwLDI1IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEJ1Z3ppbGxhIDMwMDY3Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwogICAgICAgICB3ZWJUZXN0LmRvVGVzdCgpOwotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYmlzID0gbnVsbDsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQKICAgICAgICAgICAgICAgICAgICAgICAgKyBjb250ZXh0Um9vdCArICIvanNwL3Rlc3QuanNweCIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgICAgICBjb25uLmNvbm5lY3QoKTsKICAgICAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsgCisgICAgICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJXcm9uZyByZXNwb25zZSBjb2RlLiBFeHBlY3RlZDogMjAwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgcmVjZWl2ZWQ6ICIgKyByZXNwb25zZUNvZGUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNjcmlwdGxldEFmdGVyU2NyaXB0bGVzc1RhZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNjcmlwdGxldEFmdGVyU2NyaXB0bGVzc1RhZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGEzZjNhYjEuLmQ4Nzk1YzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTY3JpcHRsZXRBZnRlclNjcmlwdGxlc3NUYWcvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2NyaXB0bGV0QWZ0ZXJTY3JpcHRsZXNzVGFnL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE0ICsxNSwxNCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3Atc2NyaXB0bGV0LWFmdGVyLXNjcmlwdGxlc3MtdGFnIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3Atc2NyaXB0bGV0LWFmdGVyLXNjcmlwdGxlc3MtdGFnIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iLyR7YXBwbmFtZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTY3JpcHRsZXRBZnRlclNjcmlwdGxlc3NUYWcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNjcmlwdGxldEFmdGVyU2NyaXB0bGVzc1RhZy9idWlsZC54bWwKaW5kZXggODdkYmQ0Yy4uNWExZjBjNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNjcmlwdGxldEFmdGVyU2NyaXB0bGVzc1RhZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNjcmlwdGxldEFmdGVyU2NyaXB0bGVzc1RhZy9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDEwICs0MiwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgIDxqYXZhYwpAQCAtNTMsMTAgKzUzLDEwIEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjQsNyArNjQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2NyaXB0bGV0RGVjbE5lc3RlZEluQ3VzdG9tQWN0aW9uL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTY3JpcHRsZXREZWNsTmVzdGVkSW5DdXN0b21BY3Rpb24vV2ViVGVzdC5qYXZhCmluZGV4IDFjOGJkOGMuLjAxYjQ0MWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTY3JpcHRsZXREZWNsTmVzdGVkSW5DdXN0b21BY3Rpb24vV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTY3JpcHRsZXREZWNsTmVzdGVkSW5DdXN0b21BY3Rpb24vV2ViVGVzdC5qYXZhCkBAIC00Miw3ICs0Miw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEJ1Z3RyYXEgNDg2OTE0NiIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTYxLDcgKzYxLDcgQEAKICAgICAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOwogICAgICAgICAgICAgY29ubi5jb25uZWN0KCk7CiAgICAgICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7IAorICAgICAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiV3JvbmcgcmVzcG9uc2UgY29kZS4gRXhwZWN0ZWQ6IDIwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIHJlY2VpdmVkOiAiICsgcmVzcG9uc2VDb2RlLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTc2LDcgKzc2LDcgQEAKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBpZiAoIUVYUEVDVEVELmVxdWFscyhsYXN0TGluZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIldyb25nIHJlc3BvbnNlIGJvZHkuIEV4cGVjdGVkOiAiIAorICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiV3JvbmcgcmVzcG9uc2UgYm9keS4gRXhwZWN0ZWQ6ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBFWFBFQ1RFRCArICIsIHJlY2VpdmVkOiAiICsgbGFzdExpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTY3JpcHRsZXREZWNsTmVzdGVkSW5DdXN0b21BY3Rpb24vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTY3JpcHRsZXREZWNsTmVzdGVkSW5DdXN0b21BY3Rpb24vYnVpbGQucHJvcGVydGllcwppbmRleCBlMjQ5ZGFiLi5iNzY4OThkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2NyaXB0bGV0RGVjbE5lc3RlZEluQ3VzdG9tQWN0aW9uL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNjcmlwdGxldERlY2xOZXN0ZWRJbkN1c3RvbUFjdGlvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNCArMTUsMTQgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanNwLXNjcmlwdGxldC1kZWNsLW5lc3RlZC1pbi1jdXN0b20tYWN0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii8ke2FwcG5hbWV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2NyaXB0bGV0RGVjbE5lc3RlZEluQ3VzdG9tQWN0aW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTY3JpcHRsZXREZWNsTmVzdGVkSW5DdXN0b21BY3Rpb24vYnVpbGQueG1sCmluZGV4IDg3ZGJkNGMuLjVhMWYwYzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTY3JpcHRsZXREZWNsTmVzdGVkSW5DdXN0b21BY3Rpb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTY3JpcHRsZXREZWNsTmVzdGVkSW5DdXN0b21BY3Rpb24vYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxMCArNDIsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTUzLDEwICs1MywxMCBAQAogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTY0LDcgKzY0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNjcmlwdGxldFN5bnRheEVycm9yQ29ycmVjdEVycm9yTWVzc2FnZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2NyaXB0bGV0U3ludGF4RXJyb3JDb3JyZWN0RXJyb3JNZXNzYWdlL1dlYlRlc3QuamF2YQppbmRleCA2NmYyMTJjLi4yYWRkOTVkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2NyaXB0bGV0U3ludGF4RXJyb3JDb3JyZWN0RXJyb3JNZXNzYWdlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2NyaXB0bGV0U3ludGF4RXJyb3JDb3JyZWN0RXJyb3JNZXNzYWdlL1dlYlRlc3QuamF2YQpAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBCdWd0cmFxIDUwNTIyMDUiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC00OSw4ICs0OSw4IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAKLSAgICAgICAgdHJ5IHsgCisKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZUpzcCgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTY3JpcHRsZXRTeW50YXhFcnJvckNvcnJlY3RFcnJvck1lc3NhZ2UvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTY3JpcHRsZXRTeW50YXhFcnJvckNvcnJlY3RFcnJvck1lc3NhZ2UvYnVpbGQucHJvcGVydGllcwppbmRleCAxZmQ5Y2EyLi5kMGY5YzRiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2NyaXB0bGV0U3ludGF4RXJyb3JDb3JyZWN0RXJyb3JNZXNzYWdlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNjcmlwdGxldFN5bnRheEVycm9yQ29ycmVjdEVycm9yTWVzc2FnZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanNwLXNjcmlwdGxldC1zeW50YXgtZXJyb3ItY29ycmVjdC1lcnJvci1tZXNzYWdlIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3Atc2NyaXB0bGV0LXN5bnRheC1lcnJvci1jb3JyZWN0LWVycm9yLW1lc3NhZ2UiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii8ke2FwcG5hbWV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2NyaXB0bGV0U3ludGF4RXJyb3JDb3JyZWN0RXJyb3JNZXNzYWdlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTY3JpcHRsZXRTeW50YXhFcnJvckNvcnJlY3RFcnJvck1lc3NhZ2UvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTY3JpcHRsZXRTeW50YXhFcnJvckNvcnJlY3RFcnJvck1lc3NhZ2UvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTY3JpcHRsZXRTeW50YXhFcnJvckNvcnJlY3RFcnJvck1lc3NhZ2UvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNlbGZSZWZlcmVuY2luZ0Vycm9yUGFnZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2VsZlJlZmVyZW5jaW5nRXJyb3JQYWdlL1dlYlRlc3QuamF2YQppbmRleCAyNTUxNmQyLi4xYTZmZDA5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2VsZlJlZmVyZW5jaW5nRXJyb3JQYWdlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2VsZlJlZmVyZW5jaW5nRXJyb3JQYWdlL1dlYlRlc3QuamF2YQpAQCAtMzgsNyArMzgsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigKICAgICAgICAgICAgICJVbml0IHRlc3QgZm9yIGRldGVjdGluZyBzZWxmLXJlZmVyZW5jaW5nIGVycm9yIHBhZ2UiKTsKQEAgLTQ3LDggKzQ3LDggQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlSnNwKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwpAQCAtNTcsNyArNTcsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGludm9rZUpzcCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgKyAiL2pzcC90ZXN0LmpzcCI7CiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pCkBAIC02OSw2ICs2OSw2IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2VsZlJlZmVyZW5jaW5nRXJyb3JQYWdlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2VsZlJlZmVyZW5jaW5nRXJyb3JQYWdlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYzJjZjg1MS4uYTIzMzBlNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNlbGZSZWZlcmVuY2luZ0Vycm9yUGFnZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTZWxmUmVmZXJlbmNpbmdFcnJvclBhZ2UvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3Atc2VsZi1yZWZlcmVuY2luZy1lcnJvci1wYWdlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2VsZlJlZmVyZW5jaW5nRXJyb3JQYWdlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTZWxmUmVmZXJlbmNpbmdFcnJvclBhZ2UvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTZWxmUmVmZXJlbmNpbmdFcnJvclBhZ2UvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTZWxmUmVmZXJlbmNpbmdFcnJvclBhZ2UvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNlbGZSZWZlcmVuY2luZ0Vycm9yUGFnZVdpdGhSZWxhdGl2ZVBhdGgvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNlbGZSZWZlcmVuY2luZ0Vycm9yUGFnZVdpdGhSZWxhdGl2ZVBhdGgvV2ViVGVzdC5qYXZhCmluZGV4IDI0MmYxYTguLjNmMTM3OGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTZWxmUmVmZXJlbmNpbmdFcnJvclBhZ2VXaXRoUmVsYXRpdmVQYXRoL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2VsZlJlZmVyZW5jaW5nRXJyb3JQYWdlV2l0aFJlbGF0aXZlUGF0aC9XZWJUZXN0LmphdmEKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oCiAgICAgICAgICAgICAiVW5pdCB0ZXN0IGZvciBkZXRlY3Rpbmcgc2VsZi1yZWZlcmVuY2luZyBlcnJvciBwYWdlIik7CkBAIC00OCw4ICs0OCw4IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZUpzcCgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKQEAgLTU4LDcgKzU4LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBpbnZva2VKc3AoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICsgIi9qc3AvdGVzdC5qc3AiOwogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKQpAQCAtNzAsNiArNzAsNiBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNlbGZSZWZlcmVuY2luZ0Vycm9yUGFnZVdpdGhSZWxhdGl2ZVBhdGgvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTZWxmUmVmZXJlbmNpbmdFcnJvclBhZ2VXaXRoUmVsYXRpdmVQYXRoL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYjI2MmZlOC4uNTg2NmY4ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNlbGZSZWZlcmVuY2luZ0Vycm9yUGFnZVdpdGhSZWxhdGl2ZVBhdGgvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2VsZlJlZmVyZW5jaW5nRXJyb3JQYWdlV2l0aFJlbGF0aXZlUGF0aC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC1zZWxmLXJlZmVyZW5jaW5nLWVycm9yLXBhZ2Utd2l0aC1yZWxhdGl2ZS1wYXRoIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2VsZlJlZmVyZW5jaW5nRXJyb3JQYWdlV2l0aFJlbGF0aXZlUGF0aC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2VsZlJlZmVyZW5jaW5nRXJyb3JQYWdlV2l0aFJlbGF0aXZlUGF0aC9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNlbGZSZWZlcmVuY2luZ0Vycm9yUGFnZVdpdGhSZWxhdGl2ZVBhdGgvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTZWxmUmVmZXJlbmNpbmdFcnJvclBhZ2VXaXRoUmVsYXRpdmVQYXRoL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTZXJ2bGV0T3ZlcnJpZGUvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNlcnZsZXRPdmVycmlkZS9XZWJUZXN0LmphdmEKaW5kZXggYWMyYmQ2ZS4uYmZlZTA4MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNlcnZsZXRPdmVycmlkZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNlcnZsZXRPdmVycmlkZS9XZWJUZXN0LmphdmEKQEAgLTY5LDEzICs2OSwxMyBAQAogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgY29ubi5jb25uZWN0KCk7CiAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgeyAKKyAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlIGNvZGUuIEV4cGVjdGVkOiAyMDAiICsKICAgICAgICAgICAgICAgICAiLCByZWNlaXZlZDogIiArIHJlc3BvbnNlQ29kZSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYnIgPSBudWxsOwotICAgICAgICB0cnkgeyAgICAgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoCiAgICAgICAgICAgICAgICAgY29ubi5nZXRJbnB1dFN0cmVhbSgpKSk7CiAgICAgICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CkBAIC04NCw3ICs4NCw3IEBACiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgCisKICAgICAgICAgICAgIGlmIChsaW5lICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAvLyBDaGVjayA8T0JKRUNUPiBjbGFzc2lkIGNvbW1lbnQKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obGluZSk7CkBAIC0xMTUsNyArMTE1LDcgQEAKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsgCisgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZSBjb2RlLiBFeHBlY3RlZDogMjAwIiArCiAgICAgICAgICAgICAgICAgIiwgcmVjZWl2ZWQ6ICIgKyByZXNwb25zZUNvZGUpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2VydmxldE92ZXJyaWRlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2VydmxldE92ZXJyaWRlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMzA1YWMwNi4uZjYzZGQwNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNlcnZsZXRPdmVycmlkZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTZXJ2bGV0T3ZlcnJpZGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTMgKzE1LDEzIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC1zZXJ2bGV0LW92ZXJyaWRlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iLyR7YXBwbmFtZX0iLz4KIDxwcm9wZXJ0eSBuYW1lPSJwcmVjb21waWxlanNwIiB2YWx1ZT0iZmFsc2UiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTZXJ2bGV0T3ZlcnJpZGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNlcnZsZXRPdmVycmlkZS9idWlsZC54bWwKaW5kZXggODdkYmQ0Yy4uNWExZjBjNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNlcnZsZXRPdmVycmlkZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNlcnZsZXRPdmVycmlkZS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDEwICs0MiwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgIDxqYXZhYwpAQCAtNTMsMTAgKzUzLDEwIEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjQsNyArNjQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2Vzc2lvbkludmFsaWRhdGVkL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTZXNzaW9uSW52YWxpZGF0ZWQvV2ViVGVzdC5qYXZhCmluZGV4IDQwM2Q1YWYuLjQzYmU4NzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTZXNzaW9uSW52YWxpZGF0ZWQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTZXNzaW9uSW52YWxpZGF0ZWQvV2ViVGVzdC5qYXZhCkBAIC0yMywyMyArMjMsMjMgQEAKICAqICJDYW5ub3QgZmluZCBhdHRyaWJ1dGUgd2hlbiBzZXNzaW9uIGludmFsaWRhdGVkIgogICovCiBwdWJsaWMgY2xhc3MgV2ViVGVzdCB7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9OQU1FID0gImpzcC1zZXNzaW9uLWludmFsaWRhdGVkIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhQRUNURURfUkVTUE9OU0UgPSAiU1VDQ0VTUyI7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdAogICAgICAgICAgICAgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7Ci0gICAgCisKICAgICBwcml2YXRlIFN0cmluZyBob3N0OwogICAgIHByaXZhdGUgU3RyaW5nIHBvcnQ7CiAgICAgcHJpdmF0ZSBTdHJpbmcgY29udGV4dFJvb3Q7Ci0gICAgCisKICAgICBwdWJsaWMgV2ViVGVzdChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIGhvc3QgPSBhcmdzWzBdOwogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBDUiA2MzYyMjkzIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTEsNyArNTEsNyBAQAogICAgICAgICB9CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQotICAgIAorCiAgICAgLyoKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAgICAgICAgIHRyeSB7CkBAIC02MCw3ICs2MCw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgICAgIGNvbm4uY29ubmVjdCgpOwotICAgICAKKwogICAgICAgICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm4uZ2V0UmVzcG9uc2VDb2RlKCk7CiAgICAgICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UgY29kZS4gRXhwZWN0ZWQ6IDIwMCIKQEAgLTg1LDcgKzg1LDcgQEAKICAgICAgICAgfQogICAgIH0KICAgICAgKi8KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBCdWZmZXJlZFJlYWRlciBpbnB1dCA9IG51bGw7CiAgICAgICAgIHRyeSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2Vzc2lvbkludmFsaWRhdGVkL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2Vzc2lvbkludmFsaWRhdGVkL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMzIzMmI0MC4uMGI1Y2ZhYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNlc3Npb25JbnZhbGlkYXRlZC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTZXNzaW9uSW52YWxpZGF0ZWQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3Atc2Vzc2lvbi1pbnZhbGlkYXRlZCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNlc3Npb25JbnZhbGlkYXRlZC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2Vzc2lvbkludmFsaWRhdGVkL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2Vzc2lvbkludmFsaWRhdGVkL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2Vzc2lvbkludmFsaWRhdGVkL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTaW1wbGVUYWdBbm5vdGF0aW9uL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTaW1wbGVUYWdBbm5vdGF0aW9uL1dlYlRlc3QuamF2YQppbmRleCBmZDFlYTQ4Li5lNjUzZmY5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2ltcGxlVGFnQW5ub3RhdGlvbi9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNpbXBsZVRhZ0Fubm90YXRpb24vV2ViVGVzdC5qYXZhCkBAIC0yMiw5ICsyMiw5IEBACiAKIHB1YmxpYyBjbGFzcyBXZWJUZXN0CiB7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIHBhc3MgPSBmYWxzZTsKLSAgICAKKwogICAgIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdD0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCkBAIC0zMywxNCArMzMsMTQgQEAKIAogICAgICAgICAvLyBUaGUgc3RhdCByZXBvcnRlciB3cml0ZXMgb3V0IHRoZSB0ZXN0IGluZm8gYW5kIHJlc3VsdHMKICAgICAgICAgLy8gaW50byB0aGUgdG9wLWxldmVsIHF1aWNrbG9vayBkaXJlY3RvcnkgZHVyaW5nIGEgcnVuLgotICAgICAgCisKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVGVzdCBCb2R5VGFnIGJlaGF2aW9yIHdoZW4gdGFnIGlzIHJldXNlZCIpOwogCiAgICAgICAgIFN0cmluZyBob3N0ID0gYXJnc1swXTsKICAgICAgICAgU3RyaW5nIHBvcnRTID0gYXJnc1sxXTsKICAgICAgICAgU3RyaW5nIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICAgICAgaW50IHBvcnQgPSBuZXcgSW50ZWdlcihwb3J0UykuaW50VmFsdWUoKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGdvR2V0KGhvc3QsIHBvcnQsIGNvbnRleHRSb290ICsgIi90ZXN0LmpzcCIgKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJCb2R5VGFnIHRlc3QiLCBwYXNzPyBzdGF0LlBBU1M6IHN0YXQuRkFJTCk7CkBAIC02MSw3ICs2MSw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR0VUICIgKyBjb250ZXh0UGF0aCArICIgSFRUUC8xLjAiKTsKICAgICAgICAgb3Mud3JpdGUoKCJHRVQgIiArIGNvbnRleHRQYXRoICsgIiBIVFRQLzEuMFxuIikuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gcy5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBiaXMgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKQEAgLTg3LDcgKzg3LDcgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBleCl7Ci0gICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsgICAKKyAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiVGVzdCBVTlBSRURJQ1RFRC1GQUlMVVJFIik7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGNvdW50ID09IDYpCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2ltcGxlVGFnQW5ub3RhdGlvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNpbXBsZVRhZ0Fubm90YXRpb24vYnVpbGQucHJvcGVydGllcwppbmRleCAyMTdlMmM4Li41OGI4YmFkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2ltcGxlVGFnQW5ub3RhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTaW1wbGVUYWdBbm5vdGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanNwLXNpbXBsZXRhZy1hbm5vdGF0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2ltcGxlVGFnQW5ub3RhdGlvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2ltcGxlVGFnQW5ub3RhdGlvbi9idWlsZC54bWwKaW5kZXggMDBmZGFkMy4uYzM5Nzc2ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNpbXBsZVRhZ0Fubm90YXRpb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTaW1wbGVUYWdBbm5vdGF0aW9uL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMjMgKzQyLDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzAsMTAgKzcwLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNpbXBsZVRhZ0Fubm90YXRpb24vc2VydmxldC9teXBhY2svTXlTaW1wbGVUYWcuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTaW1wbGVUYWdBbm5vdGF0aW9uL3NlcnZsZXQvbXlwYWNrL015U2ltcGxlVGFnLmphdmEKaW5kZXggOWUxNGI2OS4uNmQwNWViYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFNpbXBsZVRhZ0Fubm90YXRpb24vc2VydmxldC9teXBhY2svTXlTaW1wbGVUYWcuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU2ltcGxlVGFnQW5ub3RhdGlvbi9zZXJ2bGV0L215cGFjay9NeVNpbXBsZVRhZy5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAKIAogcHVibGljIGNsYXNzIE15U2ltcGxlVGFnIGV4dGVuZHMgU2ltcGxlVGFnU3VwcG9ydCB7Ci0JCisKICAgcHJpdmF0ZSBib29sZWFuIHBDb25zdHJ1Y3RlZCA9IGZhbHNlOwogICBwcml2YXRlIFBhZ2VDb250ZXh0IHBhZ2VDb250ZXh0OwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU3RhdGljRmlsZUVuY29kaW5nL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTdGF0aWNGaWxlRW5jb2RpbmcvV2ViVGVzdC5qYXZhCmluZGV4IDcyZmYzNjUuLjJkNjQ2ZWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTdGF0aWNGaWxlRW5jb2RpbmcvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTdGF0aWNGaWxlRW5jb2RpbmcvV2ViVGVzdC5qYXZhCkBAIC0zOCw3ICszOCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJqc3BTdGF0aWNGaWxlRW5jb2RpbmciKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC00Niw4ICs0Niw4IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZUpzcCgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVNUX05BTUUgKyAiIHRlc3QgZmFpbGVkLiIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFN0YXRpY0ZpbGVFbmNvZGluZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFN0YXRpY0ZpbGVFbmNvZGluZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDM5N2EwMmIuLjE3ODVmZGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTdGF0aWNGaWxlRW5jb2RpbmcvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU3RhdGljRmlsZUVuY29kaW5nL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE0ICsxNSwxNCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zdGF0aWNGaWxlRW5jb2RpbmciLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXN0YXRpY0ZpbGVFbmNvZGluZyIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii93ZWItc3RhdGljRmlsZUVuY29kaW5nIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwU3RhdGljRmlsZUVuY29kaW5nL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTdGF0aWNGaWxlRW5jb2RpbmcvYnVpbGQueG1sCmluZGV4IGJlYzhjMmEuLmY2ZWNhMGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTdGF0aWNGaWxlRW5jb2RpbmcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BTdGF0aWNGaWxlRW5jb2RpbmcvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwxNSArNDQsMTUgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYwLDcgKzYwLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICAgIDxqYXZhYwogICAgICAgICAgICAgc3JjZGlyPSIuIgpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ0ZpbGVCb21FbmNvZGluZ01pc21hdGNoVGFnRGlyL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdGaWxlQm9tRW5jb2RpbmdNaXNtYXRjaFRhZ0Rpci9XZWJUZXN0LmphdmEKaW5kZXggNzQyNGNiYS4uNWM0OGNkZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ0ZpbGVCb21FbmNvZGluZ01pc21hdGNoVGFnRGlyL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnRmlsZUJvbUVuY29kaW5nTWlzbWF0Y2hUYWdEaXIvV2ViVGVzdC5qYXZhCkBAIC00Myw3ICs0Myw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgQk9NIGVuY29kaW5nIG1pc21hdGNoIik7CkBAIC01NiwxMSArNTYsMTEgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjb250ZXh0Um9vdCArICIvdGVzdC5qc3AiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwpAQCAtNjgsNyArNjgsNyBAQAogICAgICAgICBjb25uLmNvbm5lY3QoKTsKIAogICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSA1MDApIHsgCisgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gNTAwKSB7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIldyb25nIHJlc3BvbnNlIGNvZGUuIEV4cGVjdGVkOiA1MDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCByZWNlaXZlZDogIiArIHJlc3BvbnNlQ29kZSk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnRmlsZUJvbUVuY29kaW5nTWlzbWF0Y2hUYWdEaXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdGaWxlQm9tRW5jb2RpbmdNaXNtYXRjaFRhZ0Rpci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDQ4MGI4NWEuLjIzOWM1NjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdGaWxlQm9tRW5jb2RpbmdNaXNtYXRjaFRhZ0Rpci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdGaWxlQm9tRW5jb2RpbmdNaXNtYXRjaFRhZ0Rpci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC10YWdmaWxlLWJvbS1lbmNvZGluZy1taXNtYXRjaC10YWdkaXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdGaWxlQm9tRW5jb2RpbmdNaXNtYXRjaFRhZ0Rpci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnRmlsZUJvbUVuY29kaW5nTWlzbWF0Y2hUYWdEaXIvYnVpbGQueG1sCmluZGV4IDg3ZGJkNGMuLjVhMWYwYzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdGaWxlQm9tRW5jb2RpbmdNaXNtYXRjaFRhZ0Rpci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ0ZpbGVCb21FbmNvZGluZ01pc21hdGNoVGFnRGlyL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTAgKzQyLDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCkBAIC01MywxMCArNTMsMTAgQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02NCw3ICs2NCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdIYW5kbGVyUG9zdENvbnN0cnVjdEFubm90YXRpb24vV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ0hhbmRsZXJQb3N0Q29uc3RydWN0QW5ub3RhdGlvbi9XZWJUZXN0LmphdmEKaW5kZXggZmYwZTQyNi4uMDZmYTI2NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ0hhbmRsZXJQb3N0Q29uc3RydWN0QW5ub3RhdGlvbi9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ0hhbmRsZXJQb3N0Q29uc3RydWN0QW5ub3RhdGlvbi9XZWJUZXN0LmphdmEKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciByZXNvdXJjZSBpbmplY3Rpb24gaW50byBKU1AgdGFnIGhhbmRsZXIiKTsKQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ0hhbmRsZXJQb3N0Q29uc3RydWN0QW5ub3RhdGlvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ0hhbmRsZXJQb3N0Q29uc3RydWN0QW5ub3RhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDBiOTkwOTkuLjRiMjBhY2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdIYW5kbGVyUG9zdENvbnN0cnVjdEFubm90YXRpb24vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnSGFuZGxlclBvc3RDb25zdHJ1Y3RBbm5vdGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanNwLXJlc291cmNlLWluamVjdGlvbi10YWctaGFuZGxlci1wb3N0LWNvbnN0cnVjdCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ0hhbmRsZXJQb3N0Q29uc3RydWN0QW5ub3RhdGlvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnSGFuZGxlclBvc3RDb25zdHJ1Y3RBbm5vdGF0aW9uL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnSGFuZGxlclBvc3RDb25zdHJ1Y3RBbm5vdGF0aW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnSGFuZGxlclBvc3RDb25zdHJ1Y3RBbm5vdGF0aW9uL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdIYW5kbGVyUG9zdENvbnN0cnVjdEFubm90YXRpb24vc2VydmxldC90YWdsaWIvTXlUYWcuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdIYW5kbGVyUG9zdENvbnN0cnVjdEFubm90YXRpb24vc2VydmxldC90YWdsaWIvTXlUYWcuamF2YQppbmRleCAxZjUzMDY1Li5jNDJkMjFlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnSGFuZGxlclBvc3RDb25zdHJ1Y3RBbm5vdGF0aW9uL3NlcnZsZXQvdGFnbGliL015VGFnLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ0hhbmRsZXJQb3N0Q29uc3RydWN0QW5ub3RhdGlvbi9zZXJ2bGV0L3RhZ2xpYi9NeVRhZy5qYXZhCkBAIC01MCw3ICs1MCw3IEBACiAgICAgICAgICAgICBzYi5hcHBlbmQoIixkczMtbG9naW4tdGltZW91dD0iICsgbG9naW5UaW1lb3V0KTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihleCk7Ci0gICAgICAgIH0gCisgICAgICAgIH0KIAogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ0hhbmRsZXJQb3N0Q29uc3RydWN0RWxlbWVudC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnSGFuZGxlclBvc3RDb25zdHJ1Y3RFbGVtZW50L1dlYlRlc3QuamF2YQppbmRleCAzNGRkZGQwLi42NjlmNjU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnSGFuZGxlclBvc3RDb25zdHJ1Y3RFbGVtZW50L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnSGFuZGxlclBvc3RDb25zdHJ1Y3RFbGVtZW50L1dlYlRlc3QuamF2YQpAQCAtMjIsNyArMjIsNyBAQAogICogVW5pdCB0ZXN0IGZvciBzcGVjaWZ5aW5nIHBvc3QtY29uc3RydWN0aW9uIHJlcXVpcmVtZW50cyBvZiBhIEpTUCB0YWcKICAqIGhhbmRsZXIgdXNpbmcgdGhlIDxwb3N0LWNvbnN0cnVjdD4gZGVwbG95bWVudCBkZXNjcmlwdG9yIGVsZW1lbnQuCiAgKgotICogVGhpcyB1bml0IHRlc3QgaXMgZXF1aXZhbGVudCBpbiBmdW5jdGlvbmFsaXR5IHRvIHRoZSAKKyAqIFRoaXMgdW5pdCB0ZXN0IGlzIGVxdWl2YWxlbnQgaW4gZnVuY3Rpb25hbGl0eSB0byB0aGUKICAqIGpzcFJlc291cmNlSW5qZWN0aW9uVGFnSGFuZGxlclBvc3RDb25zdHJ1Y3QgdW5pdCB0ZXN0LCB3aGVyZSB0aGUKICAqIHBvc3QtY29uc3RydWN0aW9uIHJlcXVpcmVtZW50cyBhcmUgZGVjbGFyZWQgdXNpbmcgdGhlIEBQb3N0Q29uc3RydWN0CiAgKiBhbm5vdGF0aW9uLgpAQCAtNDcsNyArNDcsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIHBvc3QtY29uc3RydWN0IGVsZW1lbnQgb24gIgpAQCAtNjEsNyArNjEsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnSGFuZGxlclBvc3RDb25zdHJ1Y3RFbGVtZW50L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnSGFuZGxlclBvc3RDb25zdHJ1Y3RFbGVtZW50L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZWZhOThlNy4uMGIyMGI0MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ0hhbmRsZXJQb3N0Q29uc3RydWN0RWxlbWVudC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdIYW5kbGVyUG9zdENvbnN0cnVjdEVsZW1lbnQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3AtdGFnLWhhbmRsZXItcG9zdC1jb25zdHJ1Y3QtZWxlbWVudCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ0hhbmRsZXJQb3N0Q29uc3RydWN0RWxlbWVudC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnSGFuZGxlclBvc3RDb25zdHJ1Y3RFbGVtZW50L2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnSGFuZGxlclBvc3RDb25zdHJ1Y3RFbGVtZW50L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnSGFuZGxlclBvc3RDb25zdHJ1Y3RFbGVtZW50L2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdIYW5kbGVyUG9zdENvbnN0cnVjdEVsZW1lbnQvc2VydmxldC90YWdsaWIvTXlUYWcuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdIYW5kbGVyUG9zdENvbnN0cnVjdEVsZW1lbnQvc2VydmxldC90YWdsaWIvTXlUYWcuamF2YQppbmRleCA0NDBiZThkLi4yZDM2YTYwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnSGFuZGxlclBvc3RDb25zdHJ1Y3RFbGVtZW50L3NlcnZsZXQvdGFnbGliL015VGFnLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ0hhbmRsZXJQb3N0Q29uc3RydWN0RWxlbWVudC9zZXJ2bGV0L3RhZ2xpYi9NeVRhZy5qYXZhCkBAIC00OSw3ICs0OSw3IEBACiAgICAgICAgICAgICBzYi5hcHBlbmQoIixkczMtbG9naW4tdGltZW91dD0iICsgbG9naW5UaW1lb3V0KTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihleCk7Ci0gICAgICAgIH0gCisgICAgICAgIH0KIAogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ0hhbmRsZXJQcmVEZXN0cm95QW5ub3RhdGlvbi9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnSGFuZGxlclByZURlc3Ryb3lBbm5vdGF0aW9uL1dlYlRlc3QuamF2YQppbmRleCAxMjM5MDQ3Li45MDE3ZWFiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnSGFuZGxlclByZURlc3Ryb3lBbm5vdGF0aW9uL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnSGFuZGxlclByZURlc3Ryb3lBbm5vdGF0aW9uL1dlYlRlc3QuamF2YQpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgICAgIG51bVJ1biA9IGFyZ3NbM107CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgQFByZURlc3Ryb3kgb24gSlNQIHRhZyBoYW5kbGVyIik7CkBAIC02MCwxMCArNjAsMTAgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHJ1bkZpcnN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7ICAgICAKKyAgICBwdWJsaWMgdm9pZCBydW5GaXJzdCgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjb250ZXh0Um9vdCArICIvanNwL3Rlc3QuanNwIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdIYW5kbGVyUHJlRGVzdHJveUFubm90YXRpb24vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdIYW5kbGVyUHJlRGVzdHJveUFubm90YXRpb24vYnVpbGQucHJvcGVydGllcwppbmRleCA5M2JkNTRjLi41ZDFlMmY5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnSGFuZGxlclByZURlc3Ryb3lBbm5vdGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ0hhbmRsZXJQcmVEZXN0cm95QW5ub3RhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC10YWctaGFuZGxlci1wcmUtZGVzdHJveS1hbm5vdGF0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnSGFuZGxlclByZURlc3Ryb3lBbm5vdGF0aW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdIYW5kbGVyUHJlRGVzdHJveUFubm90YXRpb24vYnVpbGQueG1sCmluZGV4IDdlODNmNzIuLmQxMjkzMzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdIYW5kbGVyUHJlRGVzdHJveUFubm90YXRpb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdIYW5kbGVyUHJlRGVzdHJveUFubm90YXRpb24vYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwyMyArNDQsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuLWZpcnN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC04NiwxMCArODYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnTGlicmFyeVZhbGlkYXRvclhNTFZpZXdTdGF0aWNJbmNsdWRlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdMaWJyYXJ5VmFsaWRhdG9yWE1MVmlld1N0YXRpY0luY2x1ZGUvV2ViVGVzdC5qYXZhCmluZGV4IDQ0YmIxNWUuLjM5YmNlN2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdMaWJyYXJ5VmFsaWRhdG9yWE1MVmlld1N0YXRpY0luY2x1ZGUvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdMaWJyYXJ5VmFsaWRhdG9yWE1MVmlld1N0YXRpY0luY2x1ZGUvV2ViVGVzdC5qYXZhCkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgR2xhc3NGaXNoIElzc3VlIDY1OSIpOwpAQCAtNTQsNyArNTQsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnTGlicmFyeVZhbGlkYXRvclhNTFZpZXdTdGF0aWNJbmNsdWRlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnTGlicmFyeVZhbGlkYXRvclhNTFZpZXdTdGF0aWNJbmNsdWRlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMDI5NTBmMy4uMjk3ZGFiNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ0xpYnJhcnlWYWxpZGF0b3JYTUxWaWV3U3RhdGljSW5jbHVkZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdMaWJyYXJ5VmFsaWRhdG9yWE1MVmlld1N0YXRpY0luY2x1ZGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3AtdGFnLWxpYnJhcnktdmFsaWRhdG9yLXhtbC12aWV3LXN0YXRpYy1pbmNsdWRlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnTGlicmFyeVZhbGlkYXRvclhNTFZpZXdTdGF0aWNJbmNsdWRlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdMaWJyYXJ5VmFsaWRhdG9yWE1MVmlld1N0YXRpY0luY2x1ZGUvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdMaWJyYXJ5VmFsaWRhdG9yWE1MVmlld1N0YXRpY0luY2x1ZGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdMaWJyYXJ5VmFsaWRhdG9yWE1MVmlld1N0YXRpY0luY2x1ZGUvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ0xpYnJhcnlWYWxpZGF0b3JYTUxWaWV3U3RhdGljSW5jbHVkZS9zZXJ2bGV0L3RhZ2xpYi9NeVZhbGlkYXRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ0xpYnJhcnlWYWxpZGF0b3JYTUxWaWV3U3RhdGljSW5jbHVkZS9zZXJ2bGV0L3RhZ2xpYi9NeVZhbGlkYXRvci5qYXZhCmluZGV4IDIxNjg3NTcuLjQ0NGY2YzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdMaWJyYXJ5VmFsaWRhdG9yWE1MVmlld1N0YXRpY0luY2x1ZGUvc2VydmxldC90YWdsaWIvTXlWYWxpZGF0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnTGlicmFyeVZhbGlkYXRvclhNTFZpZXdTdGF0aWNJbmNsdWRlL3NlcnZsZXQvdGFnbGliL015VmFsaWRhdG9yLmphdmEKQEAgLTM2LDcgKzM2LDcgQEAKICAgICBwdWJsaWMgVmFsaWRhdGlvbk1lc3NhZ2VbXSB2YWxpZGF0ZShTdHJpbmcgcHJlZml4LCBTdHJpbmcgdXJpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhZ2VEYXRhIHBhZ2UpIHsKIAotCS8qCisgICAgLyoKICAgICAgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogCiAgICAgICAgIHNiLmFwcGVuZCgiLS0tLS0tLS0tLSBQcmVmaXg9IiArIHByZWZpeCArICIgVVJJPSIgKyB1cmkgKwpAQCAtNTYsMzQgKzU2LDM0IEBACiAgICAgICAgIH0KICAgICAgICAgc2IuYXBwZW5kKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oc2IudG9TdHJpbmcoKSk7Ci0JKi8KKyAgICAqLwogCiAgICAgICAgIHRyeSB7Ci0JICAgIERlZmF1bHRIYW5kbGVyIGggPSBuZXcgRGVmYXVsdEhhbmRsZXIoKTsKKyAgICAgICAgRGVmYXVsdEhhbmRsZXIgaCA9IG5ldyBEZWZhdWx0SGFuZGxlcigpOwogCi0JICAgIC8vIHBhcnNlIHRoZSBwYWdlCi0JICAgIFNBWFBhcnNlckZhY3RvcnkgZiA9IFNBWFBhcnNlckZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLQkgICAgZi5zZXRWYWxpZGF0aW5nKGZhbHNlKTsKLQkgICAgZi5zZXROYW1lc3BhY2VBd2FyZSh0cnVlKTsKLQkgICAgU0FYUGFyc2VyIHAgPSBmLm5ld1NBWFBhcnNlcigpOwotCSAgICBwLnBhcnNlKHBhZ2UuZ2V0SW5wdXRTdHJlYW0oKSwgaCk7CisgICAgICAgIC8vIHBhcnNlIHRoZSBwYWdlCisgICAgICAgIFNBWFBhcnNlckZhY3RvcnkgZiA9IFNBWFBhcnNlckZhY3RvcnkubmV3SW5zdGFuY2UoKTsKKyAgICAgICAgZi5zZXRWYWxpZGF0aW5nKGZhbHNlKTsKKyAgICAgICAgZi5zZXROYW1lc3BhY2VBd2FyZSh0cnVlKTsKKyAgICAgICAgU0FYUGFyc2VyIHAgPSBmLm5ld1NBWFBhcnNlcigpOworICAgICAgICBwLnBhcnNlKHBhZ2UuZ2V0SW5wdXRTdHJlYW0oKSwgaCk7CiAKLQl9IGNhdGNoIChTQVhFeGNlcHRpb24gZXgpIHsKLQkgICAgcmV0dXJuIHZtRnJvbVN0cmluZyhleC50b1N0cmluZygpKTsKLQl9IGNhdGNoIChQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGV4KSB7Ci0JICAgIHJldHVybiB2bUZyb21TdHJpbmcoZXgudG9TdHJpbmcoKSk7Ci0JfSBjYXRjaCAoSU9FeGNlcHRpb24gZXgpIHsKLQkgICAgcmV0dXJuIHZtRnJvbVN0cmluZyhleC50b1N0cmluZygpKTsKLQl9CisgICAgfSBjYXRjaCAoU0FYRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIHJldHVybiB2bUZyb21TdHJpbmcoZXgudG9TdHJpbmcoKSk7CisgICAgfSBjYXRjaCAoUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBleCkgeworICAgICAgICByZXR1cm4gdm1Gcm9tU3RyaW5nKGV4LnRvU3RyaW5nKCkpOworICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIHJldHVybiB2bUZyb21TdHJpbmcoZXgudG9TdHJpbmcoKSk7CisgICAgfQogCiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KIAogICAgIC8vIGNvbnN0cnVjdHMgYSBWYWxpZGF0aW9uTWVzc2FnZVtdIGZyb20gYSBzaW5nbGUgU3RyaW5nIGFuZCBubyBJRAogICAgIHByaXZhdGUgc3RhdGljIFZhbGlkYXRpb25NZXNzYWdlW10gdm1Gcm9tU3RyaW5nKFN0cmluZyBtZXNzYWdlKSB7Ci0JcmV0dXJuIG5ldyBWYWxpZGF0aW9uTWVzc2FnZVtdIHsKLQkgICAgbmV3IFZhbGlkYXRpb25NZXNzYWdlKG51bGwsIG1lc3NhZ2UpCi0JfTsKKyAgICByZXR1cm4gbmV3IFZhbGlkYXRpb25NZXNzYWdlW10geworICAgICAgICBuZXcgVmFsaWRhdGlvbk1lc3NhZ2UobnVsbCwgbWVzc2FnZSkKKyAgICB9OwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ1JlbGVhc2VDYWxsZWRXaGVuUG9vbGluZ0Rpc2FibGVkL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdSZWxlYXNlQ2FsbGVkV2hlblBvb2xpbmdEaXNhYmxlZC9XZWJUZXN0LmphdmEKaW5kZXggZGI3NzRlNS4uNGRlN2Q2ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ1JlbGVhc2VDYWxsZWRXaGVuUG9vbGluZ0Rpc2FibGVkL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnUmVsZWFzZUNhbGxlZFdoZW5Qb29saW5nRGlzYWJsZWQvV2ViVGVzdC5qYXZhCkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ1JlbGVhc2VDYWxsZWRXaGVuUG9vbGluZ0Rpc2FibGVkL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnUmVsZWFzZUNhbGxlZFdoZW5Qb29saW5nRGlzYWJsZWQvYnVpbGQucHJvcGVydGllcwppbmRleCBjOGIxNWZhLi42ZGE5ZWM5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnUmVsZWFzZUNhbGxlZFdoZW5Qb29saW5nRGlzYWJsZWQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnUmVsZWFzZUNhbGxlZFdoZW5Qb29saW5nRGlzYWJsZWQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTIgKzE1LDEyIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC10YWctcmVsZWFzZS1jYWxsZWQtd2hlbi1wb29saW5nLWRpc2FibGVkIi8+CiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii8ke2FwcG5hbWV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnUmVsZWFzZUNhbGxlZFdoZW5Qb29saW5nRGlzYWJsZWQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ1JlbGVhc2VDYWxsZWRXaGVuUG9vbGluZ0Rpc2FibGVkL2J1aWxkLnhtbAppbmRleCAwOTc0MzFjLi41YTFmMGM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnUmVsZWFzZUNhbGxlZFdoZW5Qb29saW5nRGlzYWJsZWQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdSZWxlYXNlQ2FsbGVkV2hlblBvb2xpbmdEaXNhYmxlZC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDEwICs0MiwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgIDxqYXZhYwpAQCAtNTMsOCArNTMsOCBAQAogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIAogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC02NCw3ICs2NCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdSZWxlYXNlQ2FsbGVkV2hlblBvb2xpbmdEaXNhYmxlZC9kZXNjcmlwdG9yL3N1bi13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ1JlbGVhc2VDYWxsZWRXaGVuUG9vbGluZ0Rpc2FibGVkL2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwKaW5kZXggNzVmMDQwMy4uZjg2MzU0YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ1JlbGVhc2VDYWxsZWRXaGVuUG9vbGluZ0Rpc2FibGVkL2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ1JlbGVhc2VDYWxsZWRXaGVuUG9vbGluZ0Rpc2FibGVkL2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwKQEAgLTIyLDUgKzIyLDUgQEAKIDxzdW4td2ViLWFwcD4KICAgPGpzcC1jb25maWc+CiAgICAgPHByb3BlcnR5IG5hbWU9ImVuYWJsZVBvb2xpbmciIHZhbHVlPSJmYWxzZSIgLz4KLSAgPC9qc3AtY29uZmlnPiAKKyAgPC9qc3AtY29uZmlnPgogPC9zdW4td2ViLWFwcD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdSZWxlYXNlQ2FsbGVkV2hlblBvb2xpbmdFbmFibGVkL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdSZWxlYXNlQ2FsbGVkV2hlblBvb2xpbmdFbmFibGVkL1dlYlRlc3QuamF2YQppbmRleCA4NGEzZmFkLi45M2Q2M2Q5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnUmVsZWFzZUNhbGxlZFdoZW5Qb29saW5nRW5hYmxlZC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ1JlbGVhc2VDYWxsZWRXaGVuUG9vbGluZ0VuYWJsZWQvV2ViVGVzdC5qYXZhCkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ1JlbGVhc2VDYWxsZWRXaGVuUG9vbGluZ0VuYWJsZWQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdSZWxlYXNlQ2FsbGVkV2hlblBvb2xpbmdFbmFibGVkL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMDE5ZGFlMC4uNTkxYzgwYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ1JlbGVhc2VDYWxsZWRXaGVuUG9vbGluZ0VuYWJsZWQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnUmVsZWFzZUNhbGxlZFdoZW5Qb29saW5nRW5hYmxlZC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMiArMTUsMTIgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanNwLXRhZy1yZWxlYXNlLWNhbGxlZC13aGVuLXBvb2xpbmctZW5hYmxlZCIvPgogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvJHthcHBuYW1lfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ1JlbGVhc2VDYWxsZWRXaGVuUG9vbGluZ0VuYWJsZWQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ1JlbGVhc2VDYWxsZWRXaGVuUG9vbGluZ0VuYWJsZWQvYnVpbGQueG1sCmluZGV4IDA5NzQzMWMuLjVhMWYwYzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdSZWxlYXNlQ2FsbGVkV2hlblBvb2xpbmdFbmFibGVkL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnUmVsZWFzZUNhbGxlZFdoZW5Qb29saW5nRW5hYmxlZC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDEwICs0MiwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgIDxqYXZhYwpAQCAtNTMsOCArNTMsOCBAQAogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIAogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC02NCw3ICs2NCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdSZWxlYXNlQ2FsbGVkV2hlblBvb2xpbmdFbmFibGVkL2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnUmVsZWFzZUNhbGxlZFdoZW5Qb29saW5nRW5hYmxlZC9kZXNjcmlwdG9yL3N1bi13ZWIueG1sCmluZGV4IGQwZGY4YzYuLjFkN2UzM2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdSZWxlYXNlQ2FsbGVkV2hlblBvb2xpbmdFbmFibGVkL2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ1JlbGVhc2VDYWxsZWRXaGVuUG9vbGluZ0VuYWJsZWQvZGVzY3JpcHRvci9zdW4td2ViLnhtbApAQCAtMjIsNSArMjIsNSBAQAogPHN1bi13ZWItYXBwPgogICA8anNwLWNvbmZpZz4KICAgICA8cHJvcGVydHkgbmFtZT0iZW5hYmxlUG9vbGluZyIgdmFsdWU9InRydWUiIC8+Ci0gIDwvanNwLWNvbmZpZz4gCisgIDwvanNwLWNvbmZpZz4KIDwvc3VuLXdlYi1hcHA+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnZGVwZW5kZW50WG1sL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdkZXBlbmRlbnRYbWwvV2ViVGVzdC5qYXZhCmluZGV4IDM5ZDdlN2IuLjM0MzQ0MjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdkZXBlbmRlbnRYbWwvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdkZXBlbmRlbnRYbWwvV2ViVGVzdC5qYXZhCkBAIC0yMiwxNCArMjIsMTQgQEAKIAogcHVibGljIGNsYXNzIFdlYlRlc3QKIHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gcGFzcyA9IGZhbHNlOwogICAgIHByaXZhdGUgc3RhdGljIGludCBiVGFnID0gMDsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgdXNlQmVhbiA9IDA7CiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IHNjcmlwdGxldCA9IDA7CiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IEVMdmFsdWUxID0gMDsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgRUx2YWx1ZTIgPSAwOwotICAgIAorCiAgICAgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0PQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKQEAgLTM4LDE0ICszOCwxNCBAQAogCiAgICAgICAgIC8vIFRoZSBzdGF0IHJlcG9ydGVyIHdyaXRlcyBvdXQgdGhlIHRlc3QgaW5mbyBhbmQgcmVzdWx0cwogICAgICAgICAvLyBpbnRvIHRoZSB0b3AtbGV2ZWwgcXVpY2tsb29rIGRpcmVjdG9yeSBkdXJpbmcgYSBydW4uCi0gICAgICAKKwogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJUZXN0IHRhZ2RlcGVuZGVudCBib2RpZXMgYXJlIGhhbmRsZWQgY29ycmVjdGx5IGluIFhNTCBzeW50YXgiKTsKIAogICAgICAgICBTdHJpbmcgaG9zdCA9IGFyZ3NbMF07CiAgICAgICAgIFN0cmluZyBwb3J0UyA9IGFyZ3NbMV07CiAgICAgICAgIFN0cmluZyBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgICAgIGludCBwb3J0ID0gbmV3IEludGVnZXIocG9ydFMpLmludFZhbHVlKCk7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBnb0dldChob3N0LCBwb3J0LCBjb250ZXh0Um9vdCArICIvdGVzdC5qc3B4IiApOwogICAgICAgICAgICAgaWYgKGJUYWcgPT0gNiAmJiB1c2VCZWFuID09IDEgJiYgc2NyaXB0bGV0ID09IDEgJiYKQEAgLTEwOSw3ICsxMDksNyBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGV4KXsKLSAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOyAgIAorICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJUZXN0IFVOUFJFRElDVEVELUZBSUxVUkUiKTsKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIHRyeSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnZGVwZW5kZW50WG1sL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnZGVwZW5kZW50WG1sL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYTk0MDQxMC4uZmUzYTE2MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ2RlcGVuZGVudFhtbC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdkZXBlbmRlbnRYbWwvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3BUYWdkZXBlbmRlbnRYbWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdkZXBlbmRlbnRYbWwvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ2RlcGVuZGVudFhtbC9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ2RlcGVuZGVudFhtbC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ2RlcGVuZGVudFhtbC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnZGVwZW5kZW50WG1sL3NlcnZsZXQvbXlwYWNrL015Qm9keS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRhZ2RlcGVuZGVudFhtbC9zZXJ2bGV0L215cGFjay9NeUJvZHkuamF2YQppbmRleCBmYjY4NmU2Li4wNDJlNTI4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGFnZGVwZW5kZW50WG1sL3NlcnZsZXQvbXlwYWNrL015Qm9keS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUYWdkZXBlbmRlbnRYbWwvc2VydmxldC9teXBhY2svTXlCb2R5LmphdmEKQEAgLTIxLDcgKzIxLDcgQEAKIAogCiBwdWJsaWMgY2xhc3MgTXlCb2R5IGV4dGVuZHMgQm9keVRhZ1N1cHBvcnQgewotCQorCiAgIFN0cmluZyBlY2hvU3RyOwogICBTdHJpbmcgc3RhdGljU3RyOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGVtcGxhdGVUZXh0RXNjYXBlZEVML1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUZW1wbGF0ZVRleHRFc2NhcGVkRUwvV2ViVGVzdC5qYXZhCmluZGV4IDhkNmZhNzYuLjEwZmIzY2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUZW1wbGF0ZVRleHRFc2NhcGVkRUwvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUZW1wbGF0ZVRleHRFc2NhcGVkRUwvV2ViVGVzdC5qYXZhCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGVzY2FwaW5nIEVMIGV4cHJlc3Npb25zIGluIHRlbXBsYXRlIHRleHQiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC00OCw4ICs0OCw4IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZUpzcCgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVNUX05BTUUgKyAiIHRlc3QgZmFpbGVkLiIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRlbXBsYXRlVGV4dEVzY2FwZWRFTC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRlbXBsYXRlVGV4dEVzY2FwZWRFTC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDA5MDE5ZmIuLjJmNTQyMDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUZW1wbGF0ZVRleHRFc2NhcGVkRUwvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGVtcGxhdGVUZXh0RXNjYXBlZEVML2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3AtdGVtcGxhdGUtdGV4dC1lc2NhcGVkLWVsIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3AtdGVtcGxhdGUtdGV4dC1lc2NhcGVkLWVsIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvJHthcHBuYW1lfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRlbXBsYXRlVGV4dEVzY2FwZWRFTC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGVtcGxhdGVUZXh0RXNjYXBlZEVML2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGVtcGxhdGVUZXh0RXNjYXBlZEVML2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGVtcGxhdGVUZXh0RXNjYXBlZEVML2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUaHJvd3NGaWxlTm90Rm91bmRFeHBlY3Q1MDBSZXNwb25zZUNvZGUvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRocm93c0ZpbGVOb3RGb3VuZEV4cGVjdDUwMFJlc3BvbnNlQ29kZS9XZWJUZXN0LmphdmEKaW5kZXggZjQzYzQ3NC4uMjQ0MzQ0NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRocm93c0ZpbGVOb3RGb3VuZEV4cGVjdDUwMFJlc3BvbnNlQ29kZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRocm93c0ZpbGVOb3RGb3VuZEV4cGVjdDUwMFJlc3BvbnNlQ29kZS9XZWJUZXN0LmphdmEKQEAgLTUzLDE4ICs1MywxOCBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgICArIGNvbnRleHRSb290ICsgIi9qc3Avbm90Zm91bmQuanNwIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSA9PSA1MDApIHsgCisgICAgICAgIGlmIChyZXNwb25zZUNvZGUgPT0gNTAwKSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIldyb25nIHJlc3BvbnNlIGNvZGUuIEV4cGVjdGVkOiA1MDAiCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGhyb3dzRmlsZU5vdEZvdW5kRXhwZWN0NTAwUmVzcG9uc2VDb2RlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGhyb3dzRmlsZU5vdEZvdW5kRXhwZWN0NTAwUmVzcG9uc2VDb2RlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNGY2MjliZS4uYThhN2ZlMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRocm93c0ZpbGVOb3RGb3VuZEV4cGVjdDUwMFJlc3BvbnNlQ29kZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUaHJvd3NGaWxlTm90Rm91bmRFeHBlY3Q1MDBSZXNwb25zZUNvZGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3AtdGhyb3dzLWZpbGUtbm90LWZvdW5kLWV4cGVjdC01MDAtcmVzcG9uc2UtY29kZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRocm93c0ZpbGVOb3RGb3VuZEV4cGVjdDUwMFJlc3BvbnNlQ29kZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGhyb3dzRmlsZU5vdEZvdW5kRXhwZWN0NTAwUmVzcG9uc2VDb2RlL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGhyb3dzRmlsZU5vdEZvdW5kRXhwZWN0NTAwUmVzcG9uc2VDb2RlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVGhyb3dzRmlsZU5vdEZvdW5kRXhwZWN0NTAwUmVzcG9uc2VDb2RlL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUcmltRGlyZWN0aXZlV2hpdGVzcGFjZXMvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRyaW1EaXJlY3RpdmVXaGl0ZXNwYWNlcy9XZWJUZXN0LmphdmEKaW5kZXggZjY4MzNmZS4uOGM1MTk1ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRyaW1EaXJlY3RpdmVXaGl0ZXNwYWNlcy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRyaW1EaXJlY3RpdmVXaGl0ZXNwYWNlcy9XZWJUZXN0LmphdmEKQEAgLTM1LDEyICszNSwxMiBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBlbnVtIHN1cHBvcnQgaW4gRUwiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CiAgICAgICAgIHdlYlRlc3QuZG9UZXN0KCIvdHJpbS5qc3AiLCAianNwLXRyaW1EaXJlY3RpdmVXaGl0ZXNwYWNlcyIpOwotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nIHBhdGgsIFN0cmluZyB0ZXN0TmFtZSkgewpAQCAtNjksNyArNjksNyBAQAogLy8gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJsaW5lMzoiICsgbGluZTMpOwogICAgICAgICAgICAgICAgIFN0cmluZyBsaW5lNCA9IGlucHV0LnJlYWRMaW5lKCk7CiAvLyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImxpbmU0OiIgKyBsaW5lNCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBpZiAoIiIuZXF1YWxzKGxpbmUxKSAmJgogICAgICAgICAgICAgICAgICAgICAieHl6Ii5lcXVhbHMobGluZTIpICYmCiAgICAgICAgICAgICAgICAgICAgICIiLmVxdWFscyhsaW5lMykgJiYKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUcmltRGlyZWN0aXZlV2hpdGVzcGFjZXMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUcmltRGlyZWN0aXZlV2hpdGVzcGFjZXMvYnVpbGQucHJvcGVydGllcwppbmRleCA2YmY1Zjc0Li41Y2RkNTJiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVHJpbURpcmVjdGl2ZVdoaXRlc3BhY2VzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRyaW1EaXJlY3RpdmVXaGl0ZXNwYWNlcy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMiArMTUsMTIgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tdHJpbURpcmVjdGl2ZVdoaXRlc3BhY2VzIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS10cmltRGlyZWN0aXZlV2hpdGVzcGFjZXMiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIke2FwcG5hbWV9Ii8+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BUcmltRGlyZWN0aXZlV2hpdGVzcGFjZXMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRyaW1EaXJlY3RpdmVXaGl0ZXNwYWNlcy9idWlsZC54bWwKaW5kZXggODdkYmQ0Yy4uNWExZjBjNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRyaW1EaXJlY3RpdmVXaGl0ZXNwYWNlcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFRyaW1EaXJlY3RpdmVXaGl0ZXNwYWNlcy9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDEwICs0MiwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgIDxqYXZhYwpAQCAtNTMsMTAgKzUzLDEwIEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjQsNyArNjQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVXJuSnNwVGxkV2l0aG91dFVyaS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVXJuSnNwVGxkV2l0aG91dFVyaS9XZWJUZXN0LmphdmEKaW5kZXggMmZlZTc5OC4uZTI2YTEwOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFVybkpzcFRsZFdpdGhvdXRVcmkvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BVcm5Kc3BUbGRXaXRob3V0VXJpL1dlYlRlc3QuamF2YQpAQCAtNDIsMjUgKzQyLDI1IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIHVybjpqc3B0bGQ6PHBhdGg+Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwogICAgICAgICB3ZWJUZXN0LmRvVGVzdCgpOwotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYmlzID0gbnVsbDsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQKICAgICAgICAgICAgICAgICAgICAgICAgKyBjb250ZXh0Um9vdCArICIvdGVzdC5qc3B4Iik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogICAgICAgICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm4uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgeyAKKyAgICAgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIldyb25nIHJlc3BvbnNlIGNvZGUuIEV4cGVjdGVkOiAyMDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCByZWNlaXZlZDogIiArIHJlc3BvbnNlQ29kZSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVXJuSnNwVGxkV2l0aG91dFVyaS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFVybkpzcFRsZFdpdGhvdXRVcmkvYnVpbGQucHJvcGVydGllcwppbmRleCAyNjMxZmEzLi5lN2U3ZmQxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVXJuSnNwVGxkV2l0aG91dFVyaS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BVcm5Kc3BUbGRXaXRob3V0VXJpL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanNwLXVybi1qc3AtdGxkLXdpdGhvdXQtdXJpIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVXJuSnNwVGxkV2l0aG91dFVyaS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVXJuSnNwVGxkV2l0aG91dFVyaS9idWlsZC54bWwKaW5kZXggODdkYmQ0Yy4uNWExZjBjNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFVybkpzcFRsZFdpdGhvdXRVcmkvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BVcm5Kc3BUbGRXaXRob3V0VXJpL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTAgKzQyLDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCkBAIC01MywxMCArNTMsMTAgQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02NCw3ICs2NCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BVc2VCZWFuL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BVc2VCZWFuL1dlYlRlc3QuamF2YQppbmRleCBmYTQ1ZWY2Li42OTc3Y2FjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVXNlQmVhbi9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFVzZUJlYW4vV2ViVGVzdC5qYXZhCkBAIC0yMSwxMSArMjEsMTEgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLio7CiAKIHB1YmxpYyBjbGFzcyBXZWJUZXN0IHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX05BTUUgPSAianNwLXVzZS1iZWFuIjsKIAogICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gcGFzcyA9IGZhbHNlOwotICAgIAorCiAgICAgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0PQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKQEAgLTM0LDE0ICszNCwxNCBAQAogCiAgICAgICAgIC8vIFRoZSBzdGF0IHJlcG9ydGVyIHdyaXRlcyBvdXQgdGhlIHRlc3QgaW5mbyBhbmQgcmVzdWx0cwogICAgICAgICAvLyBpbnRvIHRoZSB0b3AtbGV2ZWwgcXVpY2tsb29rIGRpcmVjdG9yeSBkdXJpbmcgYSBydW4uCi0gICAgICAKKwogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJUZXN0IHVzZUJlYW4gb3B0aW1pemF0aW9uIGJlaGF2aW9yIik7CiAKICAgICAgICAgU3RyaW5nIGhvc3QgPSBhcmdzWzBdOwogICAgICAgICBTdHJpbmcgcG9ydFMgPSBhcmdzWzFdOwogICAgICAgICBTdHJpbmcgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgICAgICBpbnQgcG9ydCA9IG5ldyBJbnRlZ2VyKHBvcnRTKS5pbnRWYWx1ZSgpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgZ29HZXQoaG9zdCwgcG9ydCwgY29udGV4dFJvb3QgKyAiL3Rlc3QuanNwIiApOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBwYXNzPyBzdGF0LlBBU1M6IHN0YXQuRkFJTCk7CkBAIC03OCwxMCArNzgsMTAgQEAKICAgICAgICAgICAgICAgICBpbnQgaW5kZXggPSBsaW5lLmluZGV4T2YoIlBBU1MiKTsKICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkgewogICAgICAgICAgICAgICAgICAgICBwYXNzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGV4KXsKLSAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOyAgIAorICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJUZXN0IFVOUFJFRElDVEVELUZBSUxVUkUiKTsKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIHRyeSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVXNlQmVhbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFVzZUJlYW4vYnVpbGQucHJvcGVydGllcwppbmRleCBhZDZkYzc2Li40Mjk2ODlhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVXNlQmVhbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BVc2VCZWFuL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3AtdXNlLWJlYW4iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC11c2UtYmVhbiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iLyR7YXBwbmFtZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BVc2VCZWFuL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BVc2VCZWFuL2J1aWxkLnhtbAppbmRleCA4N2RiZDRjLi41YTFmMGM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwVXNlQmVhbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFVzZUJlYW4vYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxMCArNDIsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTUzLDEwICs1MywxMCBAQAogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTY0LDcgKzY0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFdlbGNvbWVQYWdlV2l0aG91dEFueVNlcnZsZXRNYXBwaW5ncy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwV2VsY29tZVBhZ2VXaXRob3V0QW55U2VydmxldE1hcHBpbmdzL1dlYlRlc3QuamF2YQppbmRleCA1MWZmYTBkLi43NTFiMjE3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwV2VsY29tZVBhZ2VXaXRob3V0QW55U2VydmxldE1hcHBpbmdzL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwV2VsY29tZVBhZ2VXaXRob3V0QW55U2VydmxldE1hcHBpbmdzL1dlYlRlc3QuamF2YQpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciA2MzcyNTcwIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDksOCArNDksOCBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2VKc3AoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwV2VsY29tZVBhZ2VXaXRob3V0QW55U2VydmxldE1hcHBpbmdzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwV2VsY29tZVBhZ2VXaXRob3V0QW55U2VydmxldE1hcHBpbmdzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOWRjY2JhOC4uMTVhMzM1MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFdlbGNvbWVQYWdlV2l0aG91dEFueVNlcnZsZXRNYXBwaW5ncy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BXZWxjb21lUGFnZVdpdGhvdXRBbnlTZXJ2bGV0TWFwcGluZ3MvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3Atd2VsY29tZS1wYWdlLXdpdGhvdXQtYW55LXNlcnZsZXQtbWFwcGluZ3MiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BXZWxjb21lUGFnZVdpdGhvdXRBbnlTZXJ2bGV0TWFwcGluZ3MvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFdlbGNvbWVQYWdlV2l0aG91dEFueVNlcnZsZXRNYXBwaW5ncy9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFdlbGNvbWVQYWdlV2l0aG91dEFueVNlcnZsZXRNYXBwaW5ncy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFdlbGNvbWVQYWdlV2l0aG91dEFueVNlcnZsZXRNYXBwaW5ncy9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwWHBvd2VyZWRCeURpc2FibGVkL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BYcG93ZXJlZEJ5RGlzYWJsZWQvV2ViVGVzdC5qYXZhCmluZGV4IGYyZmI0ZWIuLjI2OWQxZmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BYcG93ZXJlZEJ5RGlzYWJsZWQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BYcG93ZXJlZEJ5RGlzYWJsZWQvV2ViVGVzdC5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGRpc2FibGluZyAnWC1Qb3dlcmVkLUJ5OiBKU1AvMi4wJyByZXNwb25zZSBoZWFkZXIiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC00Niw4ICs0Niw4IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAKLSAgICAgICAgdHJ5IHsgCisKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZUpzcCgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVNUX05BTUUgKyAiIHRlc3QgZmFpbGVkIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwWHBvd2VyZWRCeURpc2FibGVkL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwWHBvd2VyZWRCeURpc2FibGVkL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOGVmOWJlYy4uOGExYjUyZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFhwb3dlcmVkQnlEaXNhYmxlZC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BYcG93ZXJlZEJ5RGlzYWJsZWQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC14cG93ZXJlZC1ieS1kaXNhYmxlZCIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanNwLXhwb3dlcmVkLWJ5LWRpc2FibGVkIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BYcG93ZXJlZEJ5RGlzYWJsZWQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFhwb3dlcmVkQnlEaXNhYmxlZC9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFhwb3dlcmVkQnlEaXNhYmxlZC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFhwb3dlcmVkQnlEaXNhYmxlZC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwWHBvd2VyZWRCeVNpbmdsZVJlc3BvbnNlSGVhZGVyL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BYcG93ZXJlZEJ5U2luZ2xlUmVzcG9uc2VIZWFkZXIvV2ViVGVzdC5qYXZhCmluZGV4IGQ0ZjQ2NGUuLjRkYTU5NjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BYcG93ZXJlZEJ5U2luZ2xlUmVzcG9uc2VIZWFkZXIvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BYcG93ZXJlZEJ5U2luZ2xlUmVzcG9uc2VIZWFkZXIvV2ViVGVzdC5qYXZhCkBAIC0yMiw3ICsyMiw3IEBACiAgKiBVbml0IHRlc3QgZm9yIGh0dHBzOi8vZ2xhc3NmaXNoLmRldi5qYXZhLm5ldC9pc3N1ZXMvc2hvd19idWcuY2dpP2lkPTEwOTMKICAqICgieC1wb3dlcmVkLWJ5IGhlYWRlciBoYXMgcmVkdW5kYW50IGluZm9ybWF0aW9uIik6CiAgKgotICogTWFrZSBzdXJlIHRoYXQgaWYgb25lIEpTUCBmb3J3YXJkcyB0byBhbm90aGVyLCB0aGUgcmVzcG9uc2UgZG9lcyBub3QgCisgKiBNYWtlIHN1cmUgdGhhdCBpZiBvbmUgSlNQIGZvcndhcmRzIHRvIGFub3RoZXIsIHRoZSByZXNwb25zZSBkb2VzIG5vdAogICogY29udGFpbiBhbnkgZHVwbGljYXRlICdYLVBvd2VyZWQtQnk6IEpTUCcgaGVhZGVyLgogICovCiBwdWJsaWMgY2xhc3MgV2ViVGVzdCB7CkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEdsYXNzRmlzaCBpc3N1ZSAxMDkzIik7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BYcG93ZXJlZEJ5U2luZ2xlUmVzcG9uc2VIZWFkZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BYcG93ZXJlZEJ5U2luZ2xlUmVzcG9uc2VIZWFkZXIvYnVpbGQucHJvcGVydGllcwppbmRleCBiOTk1YWJjLi4wMGExOWZlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwWHBvd2VyZWRCeVNpbmdsZVJlc3BvbnNlSGVhZGVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcFhwb3dlcmVkQnlTaW5nbGVSZXNwb25zZUhlYWRlci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcC14cG93ZXJlZC1ieS1zaW5nbGUtcmVzcG9uc2UtaGVhZGVyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwWHBvd2VyZWRCeVNpbmdsZVJlc3BvbnNlSGVhZGVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BYcG93ZXJlZEJ5U2luZ2xlUmVzcG9uc2VIZWFkZXIvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BYcG93ZXJlZEJ5U2luZ2xlUmVzcG9uc2VIZWFkZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BYcG93ZXJlZEJ5U2luZ2xlUmVzcG9uc2VIZWFkZXIvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcGNDb25maWd1cmUvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcGNDb25maWd1cmUvV2ViVGVzdC5qYXZhCmluZGV4IGIwMWM5YjEuLjZhNzcxZWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BjQ29uZmlndXJlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwY0NvbmZpZ3VyZS9XZWJUZXN0LmphdmEKQEAgLTQyLDcgKzQyLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgQnVndHJhcSA0OTk0NzkwIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTEsOCArNTEsOCBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgCi0gICAgICAgIHRyeSB7IAorCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2VKc3AoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZCIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcGNDb25maWd1cmUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BjQ29uZmlndXJlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYmNmYWJjOC4uMjIwZWI5MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcGNDb25maWd1cmUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwY0NvbmZpZ3VyZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanNwYy1jb25maWd1cmUiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzcGMtY29uZmlndXJlIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwY0NvbmZpZ3VyZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwY0NvbmZpZ3VyZS9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcGNDb25maWd1cmUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3BjQ29uZmlndXJlL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3Bjb25maWcvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcGNvbmZpZy9XZWJUZXN0LmphdmEKaW5kZXggYzlmNDQ0Zi4uMTMxN2Y0ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcGNvbmZpZy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcGNvbmZpZy9XZWJUZXN0LmphdmEKQEAgLTIxLDcgKzIxLDcgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLio7CiAKIHB1YmxpYyBjbGFzcyBXZWJUZXN0IHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCkBAIC0zNSw3ICszNSw3IEBACiAgICAgICAgIFN0cmluZyBwb3J0UyA9IGFyZ3NbMV07CiAgICAgICAgIFN0cmluZyBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgICAgIGludCBwb3J0ID0gbmV3IEludGVnZXIocG9ydFMpLmludFZhbHVlKCk7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBnb0dldChob3N0LCBwb3J0LCAiSlNQLUNPTkZJRyIsIGNvbnRleHRSb290ICsgIi90ZXN0LmpzcCIgKTsKICAgICAgICAgICAgIGdvR2V0Mihob3N0LCBwb3J0LCAiRUxJZ25vcmVkIiwgY29udGV4dFJvb3QgKyAiL2Zvby90ZXN0LmpzcCIgKTsKQEAgLTgxLDcgKzgxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGF0dXMuZXF1YWxzSWdub3JlQ2FzZSgiUEFTUyIpKXsKICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlIik7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIHRyeSB7CkBAIC05OCw3ICs5OCw3IEBACiAgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBleCkge30KICAgICAgICAgfQogICAgfQotICAKKwogICAgIHByaXZhdGUgc3RhdGljIHZvaWQgZ29HZXQyKFN0cmluZyBob3N0LCBpbnQgcG9ydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyByZXN1bHQsIFN0cmluZyBjb250ZXh0UGF0aCkKICAgICAgICAgIHRocm93cyBFeGNlcHRpb24KQEAgLTEwOSw3ICsxMDksNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKCJHRVQgIiArIGNvbnRleHRQYXRoICsgIiBIVFRQLzEuMFxuIikpOwogICAgICAgICBvcy53cml0ZSgoIkdFVCAiICsgY29udGV4dFBhdGggKyAiIEhUVFAvMS4wXG4iKS5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJpcyA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKICAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcGNvbmZpZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcGNvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDQxZDAyYzUuLmM0ZmQyYTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3Bjb25maWcvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanNwY29uZmlnL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDExICsxNSwxMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3AtY29uZmlnIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1qc3AtY29uZmlnIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iLyR7YXBwbmFtZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3Bjb25maWcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcGNvbmZpZy9idWlsZC54bWwKaW5kZXggODdkYmQ0Yy4uNWExZjBjNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcGNvbmZpZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzcGNvbmZpZy9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDEwICs0MiwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgIDxqYXZhYwpAQCAtNTMsMTAgKzUzLDEwIEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjQsNyArNjQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanN0bEh0bWxQYXJhbU91dHNpZGVGbXRNZXNzYWdlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3RsSHRtbFBhcmFtT3V0c2lkZUZtdE1lc3NhZ2UvV2ViVGVzdC5qYXZhCmluZGV4IDk0NTQxOWUuLmZhYTA3ZjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3RsSHRtbFBhcmFtT3V0c2lkZUZtdE1lc3NhZ2UvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3RsSHRtbFBhcmFtT3V0c2lkZUZtdE1lc3NhZ2UvV2ViVGVzdC5qYXZhCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgQ1IgNjM2MTY2OCIpOwpAQCAtNTIsMTEgKzUyLDExIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL2pzcC90ZXN0LmpzcHgiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzdGxIdG1sUGFyYW1PdXRzaWRlRm10TWVzc2FnZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzdGxIdG1sUGFyYW1PdXRzaWRlRm10TWVzc2FnZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGNhYmZmYjkuLjU2MmFkNjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3RsSHRtbFBhcmFtT3V0c2lkZUZtdE1lc3NhZ2UvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanN0bEh0bWxQYXJhbU91dHNpZGVGbXRNZXNzYWdlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tanN0bC1odG1sLXBhcmFtLW91dHNpZGUtZm10LW1lc3NhZ2UiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3RsSHRtbFBhcmFtT3V0c2lkZUZtdE1lc3NhZ2UvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzdGxIdG1sUGFyYW1PdXRzaWRlRm10TWVzc2FnZS9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzdGxIdG1sUGFyYW1PdXRzaWRlRm10TWVzc2FnZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzdGxIdG1sUGFyYW1PdXRzaWRlRm10TWVzc2FnZS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanN0bExvY2FsZVN1cHBvcnRBUEkvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzdGxMb2NhbGVTdXBwb3J0QVBJL1dlYlRlc3QuamF2YQppbmRleCBmNWUwMjAyLi4xYTkyM2U2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanN0bExvY2FsZVN1cHBvcnRBUEkvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3RsTG9jYWxlU3VwcG9ydEFQSS9XZWJUZXN0LmphdmEKQEAgLTQyLDcgKzQyLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBHbGFzc0Zpc2ggODcxIik7CkBAIC01MywxMSArNTMsMTEgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICAvLyBBY2Nlc3MgdGVzdDEuanNwCiAgICAgICAgIFNvY2tldCBzb2NrID0gbmV3IFNvY2tldChob3N0LCBuZXcgSW50ZWdlcihwb3J0KS5pbnRWYWx1ZSgpKTsKICAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gc29jay5nZXRPdXRwdXRTdHJlYW0oKTsKQEAgLTY1LDcgKzY1LDcgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGdldCk7CiAgICAgICAgIG9zLndyaXRlKGdldC5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogCkBAIC05MCw3ICs5MCw3IEBACiAgICAgICAgIFN0cmluZyBhY2NlcHRMYW5ndWFnZSA9ICJBY2NlcHQtTGFuZ3VhZ2U6IGRlXG4iOwogICAgICAgICBvcy53cml0ZShhY2NlcHRMYW5ndWFnZS5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanN0bExvY2FsZVN1cHBvcnRBUEkvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3RsTG9jYWxlU3VwcG9ydEFQSS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGExODAwYzUuLjY0MzJkYTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3RsTG9jYWxlU3VwcG9ydEFQSS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3RsTG9jYWxlU3VwcG9ydEFQSS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWpzdGwtbG9jYWxlLXN1cHBvcnQtYXBpIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanN0bExvY2FsZVN1cHBvcnRBUEkvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2pzdGxMb2NhbGVTdXBwb3J0QVBJL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvanN0bExvY2FsZVN1cHBvcnRBUEkvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9qc3RsTG9jYWxlU3VwcG9ydEFQSS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIva2VlcEFsaXZlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIva2VlcEFsaXZlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOWQ5MTkwYS4uNzkwYzI4YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2tlZXBBbGl2ZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9rZWVwQWxpdmUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTQgKzE1LDE0IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWtlZXBhbGl2ZSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0ta2VlcGFsaXZlIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iL3dlYi1rZWVwYWxpdmUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9rZWVwQWxpdmUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2tlZXBBbGl2ZS9idWlsZC54bWwKaW5kZXggODdkYmQ0Yy4uNWExZjBjNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2tlZXBBbGl2ZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2tlZXBBbGl2ZS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDEwICs0MiwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgIDxqYXZhYwpAQCAtNTMsMTAgKzUzLDEwIEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjQsNyArNjQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIva2VlcEFsaXZlVGltZW91dC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIva2VlcEFsaXZlVGltZW91dC9idWlsZC54bWwKaW5kZXggNTNkNmVkZS4uZmRiNmQ2ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2tlZXBBbGl2ZVRpbWVvdXQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9rZWVwQWxpdmVUaW1lb3V0L2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0IiAvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCi0JCQkJCQkgdmFsdWU9ImNvbmZpZ3MuY29uZmlnLnNlcnZlci1jb25maWcubmV0d29yay1jb25maWcucHJvdG9jb2xzLnByb3RvY29sLmh0dHAtbGlzdGVuZXItMS5odHRwLnRpbWVvdXQtc2Vjb25kcz0xMCIvPgorICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPSJjb25maWdzLmNvbmZpZy5zZXJ2ZXItY29uZmlnLm5ldHdvcmstY29uZmlnLnByb3RvY29scy5wcm90b2NvbC5odHRwLWxpc3RlbmVyLTEuaHR0cC50aW1lb3V0LXNlY29uZHM9MTAiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCkBAIC00NCw3ICs0NCw3IEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiIC8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKLQkJCQkJCSB2YWx1ZT0iY29uZmlncy5jb25maWcuc2VydmVyLWNvbmZpZy5uZXR3b3JrLWNvbmZpZy5wcm90b2NvbHMucHJvdG9jb2wuaHR0cC1saXN0ZW5lci0xLmh0dHAudGltZW91dC1zZWNvbmRzPSIvPgorICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPSJjb25maWdzLmNvbmZpZy5zZXJ2ZXItY29uZmlnLm5ldHdvcmstY29uZmlnLnByb3RvY29scy5wcm90b2NvbC5odHRwLWxpc3RlbmVyLTEuaHR0cC50aW1lb3V0LXNlY29uZHM9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIApAQCAtNjEsNyArNjEsNyBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2tlZXBBbGl2ZVRpbWVvdXRTU0wvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9rZWVwQWxpdmVUaW1lb3V0U1NML2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNWIwMWE3MS4uNmM0MTQxYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2tlZXBBbGl2ZVRpbWVvdXRTU0wvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIva2VlcEFsaXZlVGltZW91dFNTTC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWtlZXBBbGl2ZVRpbWVvdXRJblNlY29uZHNaZXJvU1NMIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIva2VlcEFsaXZlVGltZW91dFNTTC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIva2VlcEFsaXZlVGltZW91dFNTTC9idWlsZC54bWwKaW5kZXggNGUxNWM1MC4uNzcxZmYwZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2tlZXBBbGl2ZVRpbWVvdXRTU0wvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9rZWVwQWxpdmVUaW1lb3V0U1NML2J1aWxkLnhtbApAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0IiAvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCi0JCQkJCQkgdmFsdWU9ImNvbmZpZ3MuY29uZmlnLnNlcnZlci1jb25maWcubmV0d29yay1jb25maWcucHJvdG9jb2xzLnByb3RvY29sLmh0dHAtbGlzdGVuZXItMi5odHRwLnRpbWVvdXQtc2Vjb25kcz0xMCIvPgorICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPSJjb25maWdzLmNvbmZpZy5zZXJ2ZXItY29uZmlnLm5ldHdvcmstY29uZmlnLnByb3RvY29scy5wcm90b2NvbC5odHRwLWxpc3RlbmVyLTIuaHR0cC50aW1lb3V0LXNlY29uZHM9MTAiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8c2xlZXAgc2Vjb25kcz0iMTAiLz4KICAgICA8L3RhcmdldD4KQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIgLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgotCQkJCQkJIHZhbHVlPSJjb25maWdzLmNvbmZpZy5zZXJ2ZXItY29uZmlnLm5ldHdvcmstY29uZmlnLnByb3RvY29scy5wcm90b2NvbC5odHRwLWxpc3RlbmVyLTIuaHR0cC50aW1lb3V0LXNlY29uZHM9Ii8+CisgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9ImNvbmZpZ3MuY29uZmlnLnNlcnZlci1jb25maWcubmV0d29yay1jb25maWcucHJvdG9jb2xzLnByb3RvY29sLmh0dHAtbGlzdGVuZXItMi5odHRwLnRpbWVvdXQtc2Vjb25kcz0iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCkBAIC02NCw3ICs2NCw3IEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbGFyZ2VDb29raWVFcnJvci9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbGFyZ2VDb29raWVFcnJvci9XZWJUZXN0LmphdmEKaW5kZXggYTJlOGU1Ni4uYTMyZGU0ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xhcmdlQ29va2llRXJyb3IvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9sYXJnZUNvb2tpZUVycm9yL1dlYlRlc3QuamF2YQpAQCAtNDMsNyArNDMsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBDUiA2NDU2NTUzIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTIsOCArNTIsOCBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgCi0gICAgICAgIHRyeSB7IAorCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2VXaXRoTGFyZ2VDb29raWUoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZCIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xhcmdlQ29va2llRXJyb3IvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9sYXJnZUNvb2tpZUVycm9yL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggN2FjNjAwMS4uNmVlNmFhNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xhcmdlQ29va2llRXJyb3IvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbGFyZ2VDb29raWVFcnJvci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWxhcmdlLWNvb2tpZS1lcnJvciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xhcmdlQ29va2llRXJyb3IvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xhcmdlQ29va2llRXJyb3IvYnVpbGQueG1sCmluZGV4IDI0ZDUzNzAuLmFiNmNmMDcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9sYXJnZUNvb2tpZUVycm9yL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbGFyZ2VDb29raWVFcnJvci9idWlsZC54bWwKQEAgLTM1LDcgKzM1LDcgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgICA8ZGVsZXRlIGZpbGU9IldlYlRlc3QuY2xhc3MiLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MywyMyArNDMsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MSwxMCArNzEsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbGlzdGVuZXJEaXNhYmxlZC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbGlzdGVuZXJEaXNhYmxlZC9XZWJUZXN0LmphdmEKaW5kZXggMmE2YzgyZC4uNGE3MzBlOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xpc3RlbmVyRGlzYWJsZWQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9saXN0ZW5lckRpc2FibGVkL1dlYlRlc3QuamF2YQpAQCAtMzMsNyArMzMsNyBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAogICAgICAgICBTdHJpbmcgaG9zdCA9IGFyZ3NbMF07CkBAIC00MSwxMiArNDEsMTIgQEAKICAgICAgICAgU3RyaW5nIGNvbnRleHRSb290ID0gYXJnc1syXTsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJFbnN1cmUgZGlzYWJsZWQgSFRUUCBsaXN0ZW5lciBnaXZlcyBDb25uZWN0RXhjZXB0aW9uIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgICAgICAgICAgICAgICArICIvU2VydmxldFRlc3QiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbnZva2luZyB1cmw6ICIgKyB1cmwudG9TdHJpbmcoKSk7CiAKLSAgICAgICAgdHJ5IHsgICAgICAgICAgICAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOwogICAgICAgICAgICAgY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRXhwZWN0ZWQgamF2YS5uZXQuQ29ubmVjdEV4Y2VwdGlvbjogIgpAQCAtNTYsNiArNTYsNiBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xpc3RlbmVyRGlzYWJsZWQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9saXN0ZW5lckRpc2FibGVkL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggODdkZTlmNC4uODBkMGQxZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xpc3RlbmVyRGlzYWJsZWQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbGlzdGVuZXJEaXNhYmxlZC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWxpc3RlbmVyRGlzYWJsZWQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9saXN0ZW5lckRpc2FibGVkL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9saXN0ZW5lckRpc2FibGVkL2J1aWxkLnhtbAppbmRleCBlNDg2ZTRkLi5mZDQ0YjY4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbGlzdGVuZXJEaXNhYmxlZC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xpc3RlbmVyRGlzYWJsZWQvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwxOCArNDQsMTggQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJjcmVhdGUtaHR0cC1saXN0ZW5lciIgLz4KQEAgLTc5LDcgKzc5LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtOTEsMTAgKzkxLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xpc3RlbmVyRGlzYWJsZWQvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xpc3RlbmVyRGlzYWJsZWQvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDBjZmU4MTIuLjgxYjE0NTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9saXN0ZW5lckRpc2FibGVkL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbGlzdGVuZXJEaXNhYmxlZC9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTIzLDcgKzIzLDcgQEAKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIgogICAgICAgICAgdmVyc2lvbj0iMi40Ij4KIAotICAgIDxsaXN0ZW5lcj4gICAgIAorICAgIDxsaXN0ZW5lcj4KICAgICAgICAgPGxpc3RlbmVyLWNsYXNzPnRlc3QuU2VydmxldFRlc3Q8L2xpc3RlbmVyLWNsYXNzPgogICAgIDwvbGlzdGVuZXI+CiAKQEAgLTMxLDcgKzMxLDcgQEAKICAgICAgICAgPGRpc3BsYXktbmFtZT5TZXJ2bGV0VGVzdDwvZGlzcGxheS1uYW1lPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuU2VydmxldFRlc3Q8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCisgICAgPC9zZXJ2bGV0PgogCiAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbGlzdGVuZXJEaXNhYmxlZC9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbGlzdGVuZXJEaXNhYmxlZC9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKaW5kZXggODYwYmNjNC4uZTdhN2MwOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xpc3RlbmVyRGlzYWJsZWQvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9saXN0ZW5lckRpc2FibGVkL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQpAQCAtMzMsNyArMzMsNyBAQAogcHVibGljIGNsYXNzIFNlcnZsZXRUZXN0IGV4dGVuZHMgSHR0cFNlcnZsZXQgaW1wbGVtZW50cyBIdHRwU2Vzc2lvbkxpc3RlbmVyIHsKIAogICAgIHByaXZhdGUgU2VydmxldENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmluaXRdIik7CkBAIC00NCw3ICs0NCw3IEBACiAgICAgICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAgICAgICAgCisgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmRvUG9zdF0iKTsKICAgICB9CiAKQEAgLTUyLDcgKzUyLDcgQEAKICAgICBwdWJsaWMgdm9pZCBzZXNzaW9uQ3JlYXRlZChqYWthcnRhLnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbkV2ZW50IGh0dHBTZXNzaW9uRXZlbnQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5zZXNzaW9uQ3JlYXRlZF0iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXNzaW9uRGVzdHJveWVkKGpha2FydGEuc2VydmxldC5odHRwLkh0dHBTZXNzaW9uRXZlbnQgaHR0cFNlc3Npb25FdmVudCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LnNlc3Npb25EZXN0cm95ZWRdIik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xpc3RlbmVyRmlsdGVyU2VydmxldEluaXQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xpc3RlbmVyRmlsdGVyU2VydmxldEluaXQvV2ViVGVzdC5qYXZhCmluZGV4IDAzYzliMDMuLjcwNzVjNmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9saXN0ZW5lckZpbHRlclNlcnZsZXRJbml0L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbGlzdGVuZXJGaWx0ZXJTZXJ2bGV0SW5pdC9XZWJUZXN0LmphdmEKQEAgLTIyLDcgKzIyLDcgQEAKIAogcHVibGljIGNsYXNzIFdlYlRlc3QKIHsKLSAgICAKKwogICAgIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdD0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCkBAIC00NCwxNCArNDQsMTQgQEAKIAogICAgICAgICAvLyBUaGUgc3RhdCByZXBvcnRlciB3cml0ZXMgb3V0IHRoZSB0ZXN0IGluZm8gYW5kIHJlc3VsdHMKICAgICAgICAgLy8gaW50byB0aGUgdG9wLWxldmVsIHF1aWNrbG9vayBkaXJlY3RvcnkgZHVyaW5nIGEgcnVuLgotICAgICAgCisKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBJVCAxMzU1NSIpOwogCiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwogCiAgICAgICAgIGludCBwb3J0ID0gbmV3IEludGVnZXIod2ViVGVzdC5wb3J0UykuaW50VmFsdWUoKTsKICAgICAgICAgU3RyaW5nIG5hbWU7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICB3ZWJUZXN0LmdvR2V0KHdlYlRlc3QuaG9zdCwgcG9ydCwKICAgICAgICAgICAgICAgICB3ZWJUZXN0LmNvbnRleHRSb290ICsgIi90ZXN0IiApOwpAQCAtODEsNyArODEsNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKCJHRVQgIiArIGNvbnRleHRQYXRoICsgIiBIVFRQLzEuMFxuIikpOwogICAgICAgICBvcy53cml0ZSgoIkdFVCAiICsgY29udGV4dFBhdGggKyAiIEhUVFAvMS4wXG4iKS5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBudWxsOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBiaXMgPSBudWxsOwogICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CkBAIC0xMjIsNSArMTIyLDUgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSArICIgRkFJTEVEIiwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogICAgfQotICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xpc3RlbmVyRmlsdGVyU2VydmxldEluaXQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9saXN0ZW5lckZpbHRlclNlcnZsZXRJbml0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMGMzNDkzYy4uYjg5NTdmZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xpc3RlbmVyRmlsdGVyU2VydmxldEluaXQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbGlzdGVuZXJGaWx0ZXJTZXJ2bGV0SW5pdC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tbGlzdGVuZXJGaWx0ZXJTZXJ2bGV0SW5pdCIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tbGlzdGVuZXJGaWx0ZXJTZXJ2bGV0SW5pdCIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iLyR7YXBwbmFtZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9saXN0ZW5lckZpbHRlclNlcnZsZXRJbml0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9saXN0ZW5lckZpbHRlclNlcnZsZXRJbml0L2J1aWxkLnhtbAppbmRleCAxMGM2NjdkLi5hYjZjZjA3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbGlzdGVuZXJGaWx0ZXJTZXJ2bGV0SW5pdC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xpc3RlbmVyRmlsdGVyU2VydmxldEluaXQvYnVpbGQueG1sCkBAIC0zNSw3ICszNSw3IEBACiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgICAgPGRlbGV0ZSBmaWxlPSJXZWJUZXN0LmNsYXNzIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDMsMjMgKzQzLDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzEsMTAgKzcxLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xpc3RlbmVyRmlsdGVyU2VydmxldEluaXQvc2VydmxldC90ZXN0L0ZpbHRlclRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9saXN0ZW5lckZpbHRlclNlcnZsZXRJbml0L3NlcnZsZXQvdGVzdC9GaWx0ZXJUZXN0LmphdmEKaW5kZXggYzAwNDE2Mi4uMTQyMTBjOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xpc3RlbmVyRmlsdGVyU2VydmxldEluaXQvc2VydmxldC90ZXN0L0ZpbHRlclRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbGlzdGVuZXJGaWx0ZXJTZXJ2bGV0SW5pdC9zZXJ2bGV0L3Rlc3QvRmlsdGVyVGVzdC5qYXZhCkBAIC0zMCwxNCArMzAsMTQgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbRmlsdGVyLmluaXRdIik7CiAgICAgICAgIFJlY29yZC5hZGREYXRhKCJGaSIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvRmlsdGVyKFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSwgRmlsdGVyQ2hhaW4gZmlsdGVyQ2hhaW4pIHRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW0ZpbHRlci5kb0ZpbHRlcl0iKTsKICAgICAgICAgZmlsdGVyQ2hhaW4uZG9GaWx0ZXIocmVxdWVzdCwgcmVzcG9uc2UpOwotICAgICAgICAKLSAgICB9ICAgIAotICAgIAorCisgICAgfQorCiAgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbRmlsdGVyLmRlc3Ryb3ldIik7Ci0gICAgfSAgICAKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbGlzdGVuZXJGaWx0ZXJTZXJ2bGV0SW5pdC9zZXJ2bGV0L3Rlc3QvTGlzdGVuZXJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbGlzdGVuZXJGaWx0ZXJTZXJ2bGV0SW5pdC9zZXJ2bGV0L3Rlc3QvTGlzdGVuZXJUZXN0LmphdmEKaW5kZXggODFiNTg4Yy4uMDUxNWEwZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xpc3RlbmVyRmlsdGVyU2VydmxldEluaXQvc2VydmxldC90ZXN0L0xpc3RlbmVyVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9saXN0ZW5lckZpbHRlclNlcnZsZXRJbml0L3NlcnZsZXQvdGVzdC9MaXN0ZW5lclRlc3QuamF2YQpAQCAtMjYsNyArMjYsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGNvbnRleHRJbml0aWFsaXplZChTZXJ2bGV0Q29udGV4dEV2ZW50IHNjZSkgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltMaXN0ZW5lci5jb250ZXh0SW5pdGlhbGl6ZWRdIik7ICAgICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbTGlzdGVuZXIuY29udGV4dEluaXRpYWxpemVkXSIpOwogICAgICAgICBSZWNvcmQuYWRkRGF0YSgiTGkiKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9saXN0ZW5lckZpbHRlclNlcnZsZXRJbml0L3NlcnZsZXQvdGVzdC9SZWNvcmQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9saXN0ZW5lckZpbHRlclNlcnZsZXRJbml0L3NlcnZsZXQvdGVzdC9SZWNvcmQuamF2YQppbmRleCA5YjkyYTFjLi5iNDg4NzVjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbGlzdGVuZXJGaWx0ZXJTZXJ2bGV0SW5pdC9zZXJ2bGV0L3Rlc3QvUmVjb3JkLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xpc3RlbmVyRmlsdGVyU2VydmxldEluaXQvc2VydmxldC90ZXN0L1JlY29yZC5qYXZhCkBAIC0xOSw3ICsxOSw3IEBACiBjbGFzcyBSZWNvcmQgewogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGRhdGEgPSAiIjsKLSAgICAKKwogICAgIHN0YXRpYyB2b2lkIGFkZERhdGEoU3RyaW5nIGEpIHsKICAgICAgICAgZGF0YSArPSBhOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9saXN0ZW5lckZpbHRlclNlcnZsZXRJbml0L3NlcnZsZXQvdGVzdC9TZXJ2bGV0VGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xpc3RlbmVyRmlsdGVyU2VydmxldEluaXQvc2VydmxldC90ZXN0L1NlcnZsZXRUZXN0LmphdmEKaW5kZXggOTFiYTZiYy4uMDE0ODA4YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xpc3RlbmVyRmlsdGVyU2VydmxldEluaXQvc2VydmxldC90ZXN0L1NlcnZsZXRUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xpc3RlbmVyRmlsdGVyU2VydmxldEluaXQvc2VydmxldC90ZXN0L1NlcnZsZXRUZXN0LmphdmEKQEAgLTI2LDEwICsyNiwxMCBAQAogICAgIHB1YmxpYyBTZXJ2bGV0VGVzdCgpIHsKICAgICAgICAgUmVjb3JkLmFkZERhdGEoIlMiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5pbml0XSIpOyAgICAgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuaW5pdF0iKTsKICAgICAgICAgUmVjb3JkLmFkZERhdGEoIlNpIik7CiAgICAgfQogCkBAIC0zOCw5ICszOCw5IEBACiAgICAgICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAgICAgICAgCisgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmRvUG9zdF0iKTsKLSAgICAgICAgCisKICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKICAgICAgICAgb3V0LnByaW50bG4oUmVjb3JkLmdldERhdGEoKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbG9hZEJhbGFuY2VNb2RKSy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbG9hZEJhbGFuY2VNb2RKSy9XZWJUZXN0LmphdmEKaW5kZXggZmE5NzgzZC4uNTY2MWVmNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xvYWRCYWxhbmNlTW9kSksvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9sb2FkQmFsYW5jZU1vZEpLL1dlYlRlc3QuamF2YQpAQCAtMjEsMTMgKzIxLDEzIEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci4qOwogCiBwdWJsaWMgY2xhc3MgV2ViVGVzdCB7Ci0gICAgCisKICAgICBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQ9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKICAgICBwcml2YXRlIHN0YXRpYyBVUkxDb25uZWN0aW9uIGNvbm4gPSBudWxsOwogICAgIHByaXZhdGUgc3RhdGljIFVSTCB1cmw7CiAgICAgcHJpdmF0ZSBzdGF0aWMgT2JqZWN0T3V0cHV0U3RyZWFtIG9iamVjdFdyaXRlciA9IG51bGw7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgT2JqZWN0SW5wdXRTdHJlYW0gb2JqZWN0UmVhZGVyID0gbnVsbDsgIAorICAgIHByaXZhdGUgc3RhdGljIE9iamVjdElucHV0U3RyZWFtIG9iamVjdFJlYWRlciA9IG51bGw7CiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGhvc3Q7CiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGNvbnRleHRSb290OwogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBwb3J0OwpAQCAtNTEsNyArNTEsNyBAQAogICAgICAgICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gdXJsQ29ubmVjdGlvbiA9IChIdHRwVVJMQ29ubmVjdGlvbiljb25uOwogICAgICAgICAgICAgICAgdXJsQ29ubmVjdGlvbi5zZXREb091dHB1dCh0cnVlKTsKICAgICAgICAgICAgICAgIGludCByZXNwb25zZUNvZGU9ICB1cmxDb25uZWN0aW9uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXNwb25zZSBjb2RlOiAiICsgcmVzcG9uc2VDb2RlICsgIiBFeHBlY3RlZCBjb2RlOiAyMDAiKTsgCisgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc3BvbnNlIGNvZGU6ICIgKyByZXNwb25zZUNvZGUgKyAiIEV4cGVjdGVkIGNvZGU6IDIwMCIpOwogICAgICAgICAgICAgICAgaWYgKHVybENvbm5lY3Rpb24uZ2V0UmVzcG9uc2VDb2RlKCkgIT0gMjAwKXsKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImxvYWQtYmFsYW5jZXItbW9kLWprIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbG9hZEJhbGFuY2VNb2RKSy9XZWJUZXN0Mi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xvYWRCYWxhbmNlTW9kSksvV2ViVGVzdDIuamF2YQppbmRleCBlYWRjNjg2Li5lZTU0OGIxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbG9hZEJhbGFuY2VNb2RKSy9XZWJUZXN0Mi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9sb2FkQmFsYW5jZU1vZEpLL1dlYlRlc3QyLmphdmEKQEAgLTIxLDEzICsyMSwxMyBAQAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuKjsKIAogcHVibGljIGNsYXNzIFdlYlRlc3QyIHsKLSAgICAKKwogICAgIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdD0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogICAgIHByaXZhdGUgc3RhdGljIFVSTENvbm5lY3Rpb24gY29ubiA9IG51bGw7CiAgICAgcHJpdmF0ZSBzdGF0aWMgVVJMIHVybDsKICAgICBwcml2YXRlIHN0YXRpYyBPYmplY3RPdXRwdXRTdHJlYW0gb2JqZWN0V3JpdGVyID0gbnVsbDsKLSAgICBwcml2YXRlIHN0YXRpYyBPYmplY3RJbnB1dFN0cmVhbSBvYmplY3RSZWFkZXIgPSBudWxsOyAgCisgICAgcHJpdmF0ZSBzdGF0aWMgT2JqZWN0SW5wdXRTdHJlYW0gb2JqZWN0UmVhZGVyID0gbnVsbDsKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgaG9zdDsKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgY29udGV4dFJvb3Q7CiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHBvcnQ7CkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiB1cmxDb25uZWN0aW9uID0gKEh0dHBVUkxDb25uZWN0aW9uKWNvbm47CiAgICAgICAgICAgICAgICB1cmxDb25uZWN0aW9uLnNldERvT3V0cHV0KHRydWUpOwogICAgICAgICAgICAgICAgaW50IHJlc3BvbnNlQ29kZT0gIHVybENvbm5lY3Rpb24uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc3BvbnNlIGNvZGU6ICIgKyByZXNwb25zZUNvZGUgKyAiIEV4cGVjdGVkIGNvZGU6IDIwMCIpOyAKKyAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzcG9uc2UgY29kZTogIiArIHJlc3BvbnNlQ29kZSArICIgRXhwZWN0ZWQgY29kZTogMjAwIik7CiAgICAgICAgICAgICAgICBpZiAodXJsQ29ubmVjdGlvbi5nZXRSZXNwb25zZUNvZGUoKSAhPSAyMDApewogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibG9hZC1iYWxhbmNlci1tb2QtamsiLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9sb2FkQmFsYW5jZU1vZEpLL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbG9hZEJhbGFuY2VNb2RKSy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDhmZmFiMDEuLmEzNDQ4MWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9sb2FkQmFsYW5jZU1vZEpLL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xvYWRCYWxhbmNlTW9kSksvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1sb2FkLWJhbGFuY2UtbW9kLWprIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbG9hZENsYXNzZXNGcm9tWmlwRmlsZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbG9hZENsYXNzZXNGcm9tWmlwRmlsZS9XZWJUZXN0LmphdmEKaW5kZXggZjJmMmU0MS4uNGM5MzZlMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xvYWRDbGFzc2VzRnJvbVppcEZpbGUvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9sb2FkQ2xhc3Nlc0Zyb21aaXBGaWxlL1dlYlRlc3QuamF2YQpAQCAtMzgsNyArMzgsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciA0NjU3OTc5Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDcsNyArNDcsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CkBAIC01OCw3ICs1OCw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgICAgICAgICAgKyAiL1Rlc3RTZXJ2bGV0IjsKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikKQEAgLTc2LDcgKzc2LDcgQEAKICAgICAgICAgICAgIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogICAgICAgICAgICAgU3RyaW5nIGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpOwogICAgICAgICAgICAgaWYgKCFFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZmluYWxseSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbG9hZENsYXNzZXNGcm9tWmlwRmlsZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xvYWRDbGFzc2VzRnJvbVppcEZpbGUvYnVpbGQucHJvcGVydGllcwppbmRleCAzZjBkMDJmLi5iMGVlMmFiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbG9hZENsYXNzZXNGcm9tWmlwRmlsZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9sb2FkQ2xhc3Nlc0Zyb21aaXBGaWxlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tbG9hZC1jbGFzc2VzLWZyb20temlwLWZpbGUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9sb2FkQ2xhc3Nlc0Zyb21aaXBGaWxlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9sb2FkQ2xhc3Nlc0Zyb21aaXBGaWxlL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbG9hZENsYXNzZXNGcm9tWmlwRmlsZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xvYWRDbGFzc2VzRnJvbVppcEZpbGUvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xvY2FsZUVuY29kaW5nTWFwcGluZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xvY2FsZUVuY29kaW5nTWFwcGluZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDkzNzUwM2EuLmU4MjNhYmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9sb2NhbGVFbmNvZGluZ01hcHBpbmcvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbG9jYWxlRW5jb2RpbmdNYXBwaW5nL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1sb2NhbGUtZW5jb2RpbmctbWFwcGluZyIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tbG9jYWxlLWVuY29kaW5nLW1hcHBpbmciLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii8ke2FwcG5hbWV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbG9jYWxlRW5jb2RpbmdNYXBwaW5nL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9sb2NhbGVFbmNvZGluZ01hcHBpbmcvYnVpbGQueG1sCmluZGV4IDhlZWQ2NjEuLmM3YTA4NGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9sb2NhbGVFbmNvZGluZ01hcHBpbmcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9sb2NhbGVFbmNvZGluZ01hcHBpbmcvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxNiArNDIsMTYgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNTksNyArNTksNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgICAgPGphdmFjCiAgICAgICAgICAgICBzcmNkaXI9Ii4iCkBAIC03NywxMCArNzcsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbG9jYWxlRW5jb2RpbmdNYXBwaW5nL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9sb2NhbGVFbmNvZGluZ01hcHBpbmcvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDZmNjM2NzMuLjBjNjZkYTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9sb2NhbGVFbmNvZGluZ01hcHBpbmcvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9sb2NhbGVFbmNvZGluZ01hcHBpbmcvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yMiwxMiArMjIsMTIgQEAKICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiCiAgICAgICAgICB2ZXJzaW9uPSIyLjQiPgotICAgICAKKwogICAgIDxzZXJ2bGV0PgogICAgICAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXRUZXN0PC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+c2VydmxldC5TZXJ2bGV0VGVzdDwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vU2VydmxldFRlc3Q8L3VybC1wYXR0ZXJuPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xvY2FsZUVuY29kaW5nTWFwcGluZy9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbG9jYWxlRW5jb2RpbmdNYXBwaW5nL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQppbmRleCBhMzliNTI1Li41N2Q4NzliIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbG9jYWxlRW5jb2RpbmdNYXBwaW5nL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbG9jYWxlRW5jb2RpbmdNYXBwaW5nL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogcHVibGljIGNsYXNzIFNlcnZsZXRUZXN0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewogCiAgICAgcHJvdGVjdGVkIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgcmVzcG9uc2Uuc2V0TG9jYWxlKExvY2FsZS5KQVBBTik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xvZzRqTG9jYWxseUJ1bmRsZWQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xvZzRqTG9jYWxseUJ1bmRsZWQvV2ViVGVzdC5qYXZhCmluZGV4IDEzNWE5YzMuLmY2OGMzMTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9sb2c0akxvY2FsbHlCdW5kbGVkL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbG9nNGpMb2NhbGx5QnVuZGxlZC9XZWJUZXN0LmphdmEKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBsb2NhbGx5IGJ1bmRsZWQgbG9nNGoiKTsKQEAgLTU0LDExICs1NCwxMSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgICArIGNvbnRleHRSb290ICsgIi9UZXN0U2VydmxldCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CkBAIC03NywxMCArNzcsMTAgQEAKICAgICAgICAgICAgIGlmIChFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xvZzRqTG9jYWxseUJ1bmRsZWQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9sb2c0akxvY2FsbHlCdW5kbGVkL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYTU3ZTAyMi4uYzA2Y2U0ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xvZzRqTG9jYWxseUJ1bmRsZWQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbG9nNGpMb2NhbGx5QnVuZGxlZC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWxvZzRqLWxvY2FsbHktYnVuZGxlZCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xvZzRqTG9jYWxseUJ1bmRsZWQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xvZzRqTG9jYWxseUJ1bmRsZWQvYnVpbGQueG1sCmluZGV4IDU1NGM2NTEuLjQ2ZWNkZGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9sb2c0akxvY2FsbHlCdW5kbGVkL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbG9nNGpMb2NhbGx5QnVuZGxlZC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDE3ICs0NCwxNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTY0LDcgKzY0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xvZzRqWG1sSW5FYXJGaWxlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9sb2c0alhtbEluRWFyRmlsZS9XZWJUZXN0LmphdmEKaW5kZXggMDBmYjkxMS4uZGQ5MTQ1NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xvZzRqWG1sSW5FYXJGaWxlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbG9nNGpYbWxJbkVhckZpbGUvV2ViVGVzdC5qYXZhCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgIGhvc3QgPSBhcmdzWzBdOwogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBsb2c0aiBwYWNrYWdlZCBpbiBFQVIgZmlsZSIpOwpAQCAtNTMsMTEgKzUzLDExIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0ICsgIi9teXdhci9UZXN0U2VydmxldCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CiAKQEAgLTc1LDEwICs3NSwxMCBAQAogICAgICAgICAgICAgaWYgKEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbG9nNGpYbWxJbkVhckZpbGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9sb2c0alhtbEluRWFyRmlsZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDg2MDY5MmEuLmI0NmQ2ZDAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9sb2c0alhtbEluRWFyRmlsZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9sb2c0alhtbEluRWFyRmlsZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWxvZzRqLXhtbC1pbi1lYXItZmlsZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xvZzRqWG1sSW5FYXJGaWxlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9sb2c0alhtbEluRWFyRmlsZS9idWlsZC54bWwKaW5kZXggODE3YzE3Yi4uMTA3YmY1YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL2xvZzRqWG1sSW5FYXJGaWxlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbG9nNGpYbWxJbkVhckZpbGUvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KICAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHtteXdhci53YXJ9Ii8+CkBAIC00Nyw3ICs0Nyw3IEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSIgaW5jbHVkZXM9Iioud2FyIi8+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSJsaWIvKi5qYXIsIGxpYi8qLnhtbCIvPgogICAgICAgICA8L2Vhcj4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CkBAIC02MSw4ICs2MSw4IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAgCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzMsNyArNzMsNyBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tYWxmb3JtZWRRdWVyeVN0cmluZy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbWFsZm9ybWVkUXVlcnlTdHJpbmcvV2ViVGVzdC5qYXZhCmluZGV4IDU2OThiYTkuLjY2YWYxMzEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tYWxmb3JtZWRRdWVyeVN0cmluZy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21hbGZvcm1lZFF1ZXJ5U3RyaW5nL1dlYlRlc3QuamF2YQpAQCAtMjEsMTAgKzIxLDEwIEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci4qOwogCiBwdWJsaWMgY2xhc3MgV2ViVGVzdCB7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnQgPSAwOwogICAgIHByaXZhdGUgc3RhdGljIGludCBFWFBFQ1RFRF9DT1VOVCA9IDE7Ci0gICAgCisKICAgICBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQ9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIApAQCAtNDAsMTMgKzQwLDEzIEBACiAKICAgICAgICAgaW50IHBvcnQgPSBuZXcgSW50ZWdlcihwb3J0UykuaW50VmFsdWUoKTsKICAgICAgICAgU3RyaW5nIG5hbWU7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBnb0dldChob3N0LCBwb3J0LCBjb250ZXh0Um9vdCArICIvU2VydmxldFRlc3QiICk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKGNvdW50ICE9IEVYUEVDVEVEX0NPVU5UKXsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibWFsZm9ybWVkUXVlcnlTdHJpbmciLCBzdGF0LkZBSUwpOwotICAgICAgICAgICAgfSAgICAgICAgICAgCisgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odC5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIm1hbGZvcm1lZFF1ZXJ5U3RyaW5nIiwgc3RhdC5GQUlMKTsKQEAgLTU1LDcgKzU1LDcgQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoIndlYi9tYWxmb3JtZWRRdWVyeVN0cmluZy0tLT4gZXhwZWN0IDEgUEFTUyIpOwogICAgIH0KIAotICAgIHByaXZhdGUgc3RhdGljIHZvaWQgZ29HZXQoU3RyaW5nIGhvc3QsIAorICAgIHByaXZhdGUgc3RhdGljIHZvaWQgZ29HZXQoU3RyaW5nIGhvc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9ydCwgU3RyaW5nIGNvbnRleHRQYXRoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgU29ja2V0IHMgPSBuZXcgU29ja2V0KGhvc3QsIHBvcnQpOwogICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSBzLmdldE91dHB1dFN0cmVhbSgpOwpAQCAtNjMsNyArNjMsNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKCJHRVQgIiArIGNvbnRleHRQYXRoICsgIiBIVFRQLzEuMFxuIikpOwogICAgICAgICBvcy53cml0ZSgoIkdFVCAiICsgY29udGV4dFBhdGggKyAiIEhUVFAvMS4wXG4iKS5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJpcyA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKICAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOwpAQCAtNzUsMTkgKzc1LDE5IEBACiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGxpbmVOdW0gKyAiOiAgIiArIGxpbmUpOwogICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPSAtMSkgewogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgc3RhdHVzID0gbGluZS5zdWJzdHJpbmcoaW5kZXgrMik7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMuZXF1YWxzSWdub3JlQ2FzZSgiUEFTUyIpKXsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3ZWItbWFsZm9ybWVkUXVlcnlTdHJpbmciLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndlYi1tYWxmb3JtZWRRdWVyeVN0cmluZyIsIHN0YXQuRkFJTCk7ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBsaW5lTnVtKys7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBleCl7Ci0gICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsgICAKKyAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiVGVzdCBVTlBSRURJQ1RFRC1GQUlMVVJFIik7CiAgICAgICAgIH0KICAgIH0KLSAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tYWxmb3JtZWRRdWVyeVN0cmluZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21hbGZvcm1lZFF1ZXJ5U3RyaW5nL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOTljMmY3Zi4uOTNhM2UzNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21hbGZvcm1lZFF1ZXJ5U3RyaW5nL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21hbGZvcm1lZFF1ZXJ5U3RyaW5nL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE0ICsxNSwxNCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1tYWxmb3JtZWRRdWVyeVN0cmluZyIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tbWFsZm9ybWVkUXVlcnlTdHJpbmciLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvd2ViLW1hbGZvcm1lZFF1ZXJ5U3RyaW5nIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbWFsZm9ybWVkUXVlcnlTdHJpbmcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21hbGZvcm1lZFF1ZXJ5U3RyaW5nL2J1aWxkLnhtbAppbmRleCA4N2RiZDRjLi41YTFmMGM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbWFsZm9ybWVkUXVlcnlTdHJpbmcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tYWxmb3JtZWRRdWVyeVN0cmluZy9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDEwICs0MiwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgIDxqYXZhYwpAQCAtNTMsMTAgKzUzLDEwIEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjQsNyArNjQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbWFsZm9ybWVkUXVlcnlTdHJpbmcvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21hbGZvcm1lZFF1ZXJ5U3RyaW5nL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCBjNzkwMjg0Li44OGM2YzAxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbWFsZm9ybWVkUXVlcnlTdHJpbmcvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tYWxmb3JtZWRRdWVyeVN0cmluZy9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTIyLDE4ICsyMiwxOCBAQAogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCIKICAgICAgICAgIHZlcnNpb249IjIuNCI+Ci0gICAgIAorCiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldFRlc3Q8L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0PC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAorICAgIDwvc2VydmxldD4KICAgICA8c2VydmxldD4KICAgICAgICAgPGRpc3BsYXktbmFtZT5TZXJ2bGV0VGVzdDI8L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDI8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDI8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCi0gICAgCisgICAgPC9zZXJ2bGV0PgorCiAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vU2VydmxldFRlc3Q8L3VybC1wYXR0ZXJuPgpAQCAtNDIsNyArNDIsNyBAQAogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0Mjwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L1NlcnZsZXRUZXN0MjwvdXJsLXBhdHRlcm4+CiAgICAgPC9zZXJ2bGV0LW1hcHBpbmc+Ci0gICAgCisKICAgICA8c2Vzc2lvbi1jb25maWc+CiAgICAgICAgIDxzZXNzaW9uLXRpbWVvdXQ+MTA8L3Nlc3Npb24tdGltZW91dD4KICAgICA8L3Nlc3Npb24tY29uZmlnPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21hbGZvcm1lZFF1ZXJ5U3RyaW5nL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tYWxmb3JtZWRRdWVyeVN0cmluZy9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKaW5kZXggYWQ5OWYzYy4uMTMxYzJkZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21hbGZvcm1lZFF1ZXJ5U3RyaW5nL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbWFsZm9ybWVkUXVlcnlTdHJpbmcvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiBwdWJsaWMgY2xhc3MgU2VydmxldFRlc3QgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAKICAgICBwcml2YXRlIFNlcnZsZXRDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKICAgICAgICAgY29udGV4dCA9IGNvbmZpZy5nZXRTZXJ2bGV0Q29udGV4dCgpOwpAQCAtMzQsMTggKzM0LDE4IEBACiAgICAgICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAgICAgICAgCisgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmRvUG9zdF0iKTsKLSAgICAgICAgCisKICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKLSAgICAgICAgCQorCiAgICAgICAgIFJlcXVlc3REaXNwYXRjaGVyIHJkID0gY29udGV4dC5nZXRSZXF1ZXN0RGlzcGF0Y2hlcigiL1NlcnZsZXRUZXN0Mj9RdWViZWM7bGlicmUiKTsKICAgICAgICAgaWYgKCByZCA9PSBudWxsICl7CiAgICAgICAgICAgICBvdXQucHJpbnRsbigiVEVTVDo6RkFJTCIpOwogICAgICAgICAgICAgb3V0LmZsdXNoKCk7Ci0gICAgICAgIH0gZWxzZSB7ICAgIAotICAgICAgICAgICAgcmQuZm9yd2FyZChyZXF1ZXN0LCByZXNwb25zZSk7ICAgICAgIAorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmQuZm9yd2FyZChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbWFsZm9ybWVkUXVlcnlTdHJpbmcvc2VydmxldC9TZXJ2bGV0VGVzdDIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tYWxmb3JtZWRRdWVyeVN0cmluZy9zZXJ2bGV0L1NlcnZsZXRUZXN0Mi5qYXZhCmluZGV4IDgzZmRiZWYuLjIyM2UxOWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tYWxmb3JtZWRRdWVyeVN0cmluZy9zZXJ2bGV0L1NlcnZsZXRUZXN0Mi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tYWxmb3JtZWRRdWVyeVN0cmluZy9zZXJ2bGV0L1NlcnZsZXRUZXN0Mi5qYXZhCkBAIC0yNCwxMCArMjQsMTAgQEAKIHB1YmxpYyBjbGFzcyBTZXJ2bGV0VGVzdDIgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAKICAgICBwcml2YXRlIFNlcnZsZXRDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldDIuaW5pdF0iKTsgICAgICAgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0Mi5pbml0XSIpOwogICAgICAgICBjb250ZXh0ID0gY29uZmlnLmdldFNlcnZsZXRDb250ZXh0KCk7CiAgICAgfQogCkBAIC0zNiwxMiArMzYsMTIgQEAKICAgICAgICAgZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7ICAgICAgICAKKyAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQyLmRvUG9zdF0iKTsKIAogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwotICAgICAgICAKKwogICAgICAgICBvdXQucHJpbnRsbigiVEVTVDo6UEFTUyIpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tYXhLZWVwQWxpdmVSZXF1ZXN0cy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbWF4S2VlcEFsaXZlUmVxdWVzdHMvV2ViVGVzdC5qYXZhCmluZGV4IGY2Y2Y3NjMuLjBkNjljYjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tYXhLZWVwQWxpdmVSZXF1ZXN0cy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21heEtlZXBBbGl2ZVJlcXVlc3RzL1dlYlRlc3QuamF2YQpAQCAtMzYsNyArMzYsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbihURVNUX05BTUUpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ0LDggKzQ0LDggQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQuIik7CkBAIC01NSw3ICs1NSw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAgCisKICAgICAgICAgU29ja2V0IHNvY2sgPSBuZXcgU29ja2V0KGhvc3QsIG5ldyBJbnRlZ2VyKHBvcnQpLmludFZhbHVlKCkpOwogICAgICAgICBzb2NrLnNldFNvVGltZW91dCg1MDAwKTsKICAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gc29jay5nZXRPdXRwdXRTdHJlYW0oKTsKQEAgLTY0LDggKzY0LDggQEAKICAgICAgICAgb3Mud3JpdGUoZ2V0LmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiSG9zdDogbG9jYWxob3N0XG4iLmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotCW9zLmZsdXNoKCk7Ci0gICAgICAgIAorICAgIG9zLmZsdXNoKCk7CisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJpcyA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKIApAQCAtODMsNyArODMsNyBAQAogICAgICAgICBvcy53cml0ZShnZXQuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCJIb3N0OiBsb2NhbGhvc3RcbiIuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCJcbiIuZ2V0Qnl0ZXMoKSk7Ci0Jb3MuZmx1c2goKTsKKyAgICBvcy5mbHVzaCgpOwogICAgICAgICB0cnl7CiAgICAgICAgICAgICB3aGlsZSAoKGxpbmUgPSBiaXMucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgfQpAQCAtMTAyLDcgKzEwMiw3IEBACiAKICAgICAgICAgICAgIHRyeXsKICAgICAgICAgICAgICAgICB3aGlsZSAoKGxpbmUgPSBiaXMucmVhZExpbmUoKSkgIT0gbnVsbCkgewotCSAgICAgICAgICAgIGZvdW5kID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZm91bmQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJsaW5lOiAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfWNhdGNoIChTb2NrZXRUaW1lb3V0RXhjZXB0aW9uIHQpewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21heEtlZXBBbGl2ZVJlcXVlc3RzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbWF4S2VlcEFsaXZlUmVxdWVzdHMvYnVpbGQucHJvcGVydGllcwppbmRleCBlNjgxYzkyLi45MGJhMGMwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbWF4S2VlcEFsaXZlUmVxdWVzdHMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbWF4S2VlcEFsaXZlUmVxdWVzdHMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1tYXhLZWVwQWxpdmVSZXF1ZXN0cyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21heEtlZXBBbGl2ZVJlcXVlc3RzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tYXhLZWVwQWxpdmVSZXF1ZXN0cy9idWlsZC54bWwKaW5kZXggOWEwODczOC4uMmNkYzg2ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21heEtlZXBBbGl2ZVJlcXVlc3RzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbWF4S2VlcEFsaXZlUmVxdWVzdHMvYnVpbGQueG1sCkBAIC02Miw3ICs2Miw3IEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbWltZU1hcHBpbmdDYXNlSW5zZW5zaXRpdmVNYXRjaC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbWltZU1hcHBpbmdDYXNlSW5zZW5zaXRpdmVNYXRjaC9XZWJUZXN0LmphdmEKaW5kZXggMWZmMzlkNi4uYWY2ODNlOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21pbWVNYXBwaW5nQ2FzZUluc2Vuc2l0aXZlTWF0Y2gvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9taW1lTWFwcGluZ0Nhc2VJbnNlbnNpdGl2ZU1hdGNoL1dlYlRlc3QuamF2YQpAQCAtNDAsMjQgKzQwLDI0IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEdsYXNzRmlzaCBJc3N1ZSAxNjA3Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwogICAgICAgICB3ZWJUZXN0LmRvVGVzdCgpOwotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgIAotICAgICAgICB0cnkgeyAKKworICAgICAgICB0cnkgewogICAgICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGNvbnRleHRSb290ICsgIi9mb28uSFRNTCIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgICAgICBjb25uLmNvbm5lY3QoKTsKICAgICAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsgCisgICAgICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UgY29kZS4gRXhwZWN0ZWQ6IDIwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCByZWNlaXZlZDogIiArIHJlc3BvbnNlQ29kZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwpAQCAtNzAsNyArNzAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBFWFBFQ1RFRF9DT05URU5UX1RZUEUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgcmVjZWl2ZWQ6ICIgKyBjb250ZW50VHlwZSk7CiAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKLSAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9taW1lTWFwcGluZ0Nhc2VJbnNlbnNpdGl2ZU1hdGNoL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbWltZU1hcHBpbmdDYXNlSW5zZW5zaXRpdmVNYXRjaC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDgyNTNkMGMuLmMyYTIyZTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9taW1lTWFwcGluZ0Nhc2VJbnNlbnNpdGl2ZU1hdGNoL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21pbWVNYXBwaW5nQ2FzZUluc2Vuc2l0aXZlTWF0Y2gvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1taW1lLW1hcHBpbmctY2FzZS1pbnNlbnNpdGl2ZS1tYXRjaCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21pbWVNYXBwaW5nQ2FzZUluc2Vuc2l0aXZlTWF0Y2gvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21pbWVNYXBwaW5nQ2FzZUluc2Vuc2l0aXZlTWF0Y2gvYnVpbGQueG1sCmluZGV4IDQ4ZTNiZjAuLjIyN2NmZmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9taW1lTWFwcGluZ0Nhc2VJbnNlbnNpdGl2ZU1hdGNoL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbWltZU1hcHBpbmdDYXNlSW5zZW5zaXRpdmVNYXRjaC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDIxICs0MiwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNjgsMTAgKzY4LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21pbWVNYXBwaW5nSW5oZXJpdGVkRnJvbURlZmF1bHRXZWJYbWwvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21pbWVNYXBwaW5nSW5oZXJpdGVkRnJvbURlZmF1bHRXZWJYbWwvV2ViVGVzdC5qYXZhCmluZGV4IGZlODAzYjAuLjgxNTdhZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9taW1lTWFwcGluZ0luaGVyaXRlZEZyb21EZWZhdWx0V2ViWG1sL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbWltZU1hcHBpbmdJbmhlcml0ZWRGcm9tRGVmYXVsdFdlYlhtbC9XZWJUZXN0LmphdmEKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIkluaGVyaXQgTUlNRSBtYXBwaW5nIGZyb20gZGVmYXVsdC13ZWIueG1sIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTIsOCArNTIsOCBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZC4iKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9taW1lTWFwcGluZ0luaGVyaXRlZEZyb21EZWZhdWx0V2ViWG1sL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbWltZU1hcHBpbmdJbmhlcml0ZWRGcm9tRGVmYXVsdFdlYlhtbC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGM2MGE1MWQuLmRmYWNiZGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9taW1lTWFwcGluZ0luaGVyaXRlZEZyb21EZWZhdWx0V2ViWG1sL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21pbWVNYXBwaW5nSW5oZXJpdGVkRnJvbURlZmF1bHRXZWJYbWwvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LW1pbWUtbWFwcGluZy1pbmhlcml0ZWQtZnJvbS1kZWZhdWx0LXdlYi14bWwiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LW1pbWUtbWFwcGluZy1pbmhlcml0ZWQtZnJvbS1kZWZhdWx0LXdlYi14bWwiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii8ke2FwcG5hbWV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbWltZU1hcHBpbmdJbmhlcml0ZWRGcm9tRGVmYXVsdFdlYlhtbC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbWltZU1hcHBpbmdJbmhlcml0ZWRGcm9tRGVmYXVsdFdlYlhtbC9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21pbWVNYXBwaW5nSW5oZXJpdGVkRnJvbURlZmF1bHRXZWJYbWwvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9taW1lTWFwcGluZ0luaGVyaXRlZEZyb21EZWZhdWx0V2ViWG1sL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tb25pdG9ySHR0cFNlcnZpY2UvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21vbml0b3JIdHRwU2VydmljZS9XZWJUZXN0LmphdmEKaW5kZXggNjk1YzAwNi4uZGE3Mzc0NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21vbml0b3JIdHRwU2VydmljZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21vbml0b3JIdHRwU2VydmljZS9XZWJUZXN0LmphdmEKQEAgLTYzLDEyICs2MywxMiBAQAogICAgICAgICBwb3J0ID0gYXJnc1s2XTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzddOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBpc3N1ZSA5NTQ5Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwogICAgICAgICB3ZWJUZXN0LmRvVGVzdCgpOwotCSAgICBzdGF0LnByaW50U3VtbWFyeSgpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKQEAgLTgxLDcgKzgxLDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZXJyb3Jjb3VudCA9ICIgKyBlcnJvcmNvdW50KTsKIAogICAgICAgICAgICAgaW52b2tlVVJMKCJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QgKyAiL3N0YXR1c2NvZGU/Y29kZT01MDMiKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpbnQgY291bnQ1MDNfMiA9IGdldENvdW50KCJjb3VudDUwMyIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJjb3VudDUwM18yID0gIiArIGNvdW50NTAzXzIpOwogICAgICAgICAgICAgaW50IGNvdW50NXh4XzIgPSBnZXRDb3VudCgiY291bnQ1eHgiKTsKQEAgLTEwMSw3ICsxMDEsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgU3RyaW5nIGludm9rZVVSTChTdHJpbmcgdXJsU3RyaW5nKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CiAKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwodXJsU3RyaW5nKTsKQEAgLTE1NCw3ICsxNTQsNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImdldENvdW50OiAiK3Jlc3VsdFN0cik7CiAgICAgICAgIFJlc3RSZXNwb25zZSByZXNwb25zZSA9IFJlc3RVdGlsLmdldCh1cmwpOwogICAgICAgICBNYXA8U3RyaW5nLCBPYmplY3Q+IG1hcCA9IHJlc3BvbnNlLmdldFJlc3BvbnNlKCk7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiAoKExvbmcpKChNYXApKChNYXApKChNYXApKChNYXApbWFwLmdldCgiZGF0YSIpKS5nZXQoImV4dHJhUHJvcGVydGllcyIpKS5nZXQoCiAgICAgICAgICAgICAgICAgImVudGl0eSIpKS5nZXQobW9uaXRvclBhdGgpKS5nZXQoImNvdW50IikpLmludFZhbHVlKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21vbml0b3JIdHRwU2VydmljZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21vbml0b3JIdHRwU2VydmljZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDFiYTBlOGQuLmEwMmMxMzkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tb25pdG9ySHR0cFNlcnZpY2UvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbW9uaXRvckh0dHBTZXJ2aWNlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tbW9uaXRvci1odHRwLXNlcnZpY2UiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tb25pdG9ySHR0cFNlcnZpY2UvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21vbml0b3JIdHRwU2VydmljZS9idWlsZC54bWwKaW5kZXggNTllZjFhZS4uMDgxYjk1OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21vbml0b3JIdHRwU2VydmljZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21vbml0b3JIdHRwU2VydmljZS9idWlsZC54bWwKQEAgLTM1LDcgKzM1LDcgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgICA8ZGVsZXRlIGZpbGU9IldlYlRlc3QuY2xhc3MiLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MywxNiArNDMsMTYgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyOiR7czFhcy5jbGFzc3BhdGh9IgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KQEAgLTYzLDcgKzYzLDcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC03MSw3ICs3MSw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0IiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXI6JHtzMWFzLmNsYXNzcGF0aH06LiIgZm9yaz0idHJ1ZSI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHthZG1pbi5ob3N0fSIvPgpAQCAtODQsNyArODQsNyBAQAogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7Y29udGV4dHJvb3R9Ii8+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icmVzdG9yZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0IiAvPgpAQCAtOTUsNyArOTUsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21vbml0b3JTZXJ2bGV0SW5zdGFuY2UvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21vbml0b3JTZXJ2bGV0SW5zdGFuY2UvV2ViVGVzdC5qYXZhCmluZGV4IDg1OTExYTAuLmM5YThkYTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tb25pdG9yU2VydmxldEluc3RhbmNlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbW9uaXRvclNlcnZsZXRJbnN0YW5jZS9XZWJUZXN0LmphdmEKQEAgLTYzLDEyICs2MywxMiBAQAogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbNl07CiAgICAgICAgIGFwcE5hbWUgPSBhcmdzWzddOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBpc3N1ZSA5NDgxIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwogICAgICAgICB3ZWJUZXN0LmRvVGVzdCgpOwotCSAgICBzdGF0LnByaW50U3VtbWFyeSgpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKQEAgLTgwLDcgKzgwLDcgQEAKIAogICAgICAgICAgICAgU3RyaW5nIHRlc3RSZXN1bHQgPSBpbnZva2VVUkwoImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdCArICIvdGVzdCIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHRlc3RSZXN1bHQpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGxvbmcgYXBwUmVxQ291bnQyID0gZ2V0VmFsdWUoInRlc3QvcmVxdWVzdGNvdW50IiwgInJlcXVlc3Rjb3VudCIsICJjb3VudCIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJhcHAgcmVxdWVzdCBjb3VudDogIiArIGFwcFJlcUNvdW50Mik7CiAgICAgICAgICAgICBsb25nIHByb2Nlc3NUaW1lMiA9IGdldFZhbHVlKCJ0ZXN0L3Byb2Nlc3Npbmd0aW1lIiwgInByb2Nlc3Npbmd0aW1lIiwgImxhc3RzYW1wbGV0aW1lIik7CkBAIC05NCw3ICs5NCw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImFwcCBlcnJvciBjb3VudDogIiArIGFwcEVycm9yQ291bnQxKTsKIAogICAgICAgICAgICAgaW52b2tlVVJMKCJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QgKyAiL2JhZHJlcXVlc3QiKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBsb25nIGFwcEVycm9yQ291bnQyID0gZ2V0VmFsdWUoImJhZHJlcXVlc3QvZXJyb3Jjb3VudCIsICJlcnJvcmNvdW50IiwgImNvdW50Iik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImFwcCBlcnJvciBjb3VudDogIiArIGFwcEVycm9yQ291bnQyKTsKIApAQCAtMTA5LDcgKzEwOSw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSBTdHJpbmcgaW52b2tlVVJMKFN0cmluZyB1cmxTdHJpbmcpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKIAogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCh1cmxTdHJpbmcpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21vbml0b3JTZXJ2bGV0SW5zdGFuY2UvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tb25pdG9yU2VydmxldEluc3RhbmNlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMDZhMzUxNy4uYmNhYWY0OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21vbml0b3JTZXJ2bGV0SW5zdGFuY2UvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbW9uaXRvclNlcnZsZXRJbnN0YW5jZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1tb25pdG9yLXNlcnZsZXQtaW5zdGFuY2UiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tb25pdG9yU2VydmxldEluc3RhbmNlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tb25pdG9yU2VydmxldEluc3RhbmNlL2J1aWxkLnhtbAppbmRleCA3M2EyY2M4Li5iZjY2OTZiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbW9uaXRvclNlcnZsZXRJbnN0YW5jZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21vbml0b3JTZXJ2bGV0SW5zdGFuY2UvYnVpbGQueG1sCkBAIC0zNSw3ICszNSw3IEBACiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgICAgPGRlbGV0ZSBmaWxlPSJXZWJUZXN0LmNsYXNzIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDMsMTYgKzQzLDE2IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphcjoke3MxYXMuY2xhc3NwYXRofSIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CkBAIC02MywxMyArNjMsMTMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcy5wcm9wcyIgdmFsdWU9IiR7YXMucHJvcHN9IC0tbmFtZSAke2FwcG5hbWV9LXdlYiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphcjoke3MxYXMuY2xhc3NwYXRofTouIiBmb3JrPSJ0cnVlIj4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2FkbWluLmhvc3R9Ii8+CkBAIC04Miw3ICs4Miw3IEBACiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHthcHBuYW1lfSIvPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RvcmUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIgLz4KQEAgLTkzLDcgKzkzLDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tb25pdG9yV2ViUmVxdWVzdC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbW9uaXRvcldlYlJlcXVlc3QvV2ViVGVzdC5qYXZhCmluZGV4IDI4ZmNjMmIuLmI0YmY5YjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tb25pdG9yV2ViUmVxdWVzdC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21vbml0b3JXZWJSZXF1ZXN0L1dlYlRlc3QuamF2YQpAQCAtNjQsMTIgKzY0LDEyIEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzZdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbN107CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGlzc3VlIDkzMDkiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CiAgICAgICAgIHdlYlRlc3QuZG9UZXN0KCk7Ci0JICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewpAQCAtODEsNyArODEsNyBAQAogCiAgICAgICAgICAgICBTdHJpbmcgdGVzdFJlc3VsdCA9IGludm9rZVVSTCgiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290ICsgIi90ZXN0Iik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odGVzdFJlc3VsdCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaW50IHdlYlJlcUNvdW50MiA9IGdldENvdW50KCJ3ZWIvcmVxdWVzdC9yZXF1ZXN0Y291bnQiLCAicmVxdWVzdGNvdW50Iik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIndlYiByZXF1ZXN0IGNvdW50OiAiICsgd2ViUmVxQ291bnQyKTsKICAgICAgICAgICAgIGludCBhcHBSZXFDb3VudDIgPSBnZXRDb3VudCgiYXBwbGljYXRpb25zIiArIGNvbnRleHRSb290ICsgIi13ZWIvIiArIGluc3RhbmNlTmFtZSArICIvcmVxdWVzdGNvdW50IiwgInJlcXVlc3Rjb3VudCIpOwpAQCAtOTgsNyArOTgsNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJhcHAgZXJyb3IgY291bnQ6ICIgKyBhcHBFcnJvckNvdW50MSk7CiAKICAgICAgICAgICAgIGludm9rZVVSTCgiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290ICsgIi9iYWRyZXF1ZXN0Iik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaW50IHdlYkVycm9yQ291bnQyID0gZ2V0Q291bnQoIndlYi9yZXF1ZXN0L2Vycm9yY291bnQiLCAiZXJyb3Jjb3VudCIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ3ZWIgZXJyb3IgY291bnQ6ICIgKyB3ZWJFcnJvckNvdW50Mik7CiAgICAgICAgICAgICBpbnQgYXBwRXJyb3JDb3VudDIgPSBnZXRDb3VudCgiYXBwbGljYXRpb25zIiArIGNvbnRleHRSb290ICsgIi13ZWIvIiArIGluc3RhbmNlTmFtZSArICIvZXJyb3Jjb3VudCIsICJlcnJvcmNvdW50Iik7CkBAIC0xMTYsNyArMTE2LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIFN0cmluZyBpbnZva2VVUkwoU3RyaW5nIHVybFN0cmluZykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwogCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKHVybFN0cmluZyk7CkBAIC0xNzIsNSArMTcyLDUgQEAKICAgICAgICAgcmV0dXJuICgoTG9uZykoKE1hcCkoKE1hcCkoKE1hcCkoKE1hcCltYXAuZ2V0KCJkYXRhIikpLmdldCgiZXh0cmFQcm9wZXJ0aWVzIikpLmdldCgKICAgICAgICAgICAgICAgICAiZW50aXR5IikpLmdldChjb3VudE5hbWUpKS5nZXQoImNvdW50IikpLmludFZhbHVlKCk7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbW9uaXRvcldlYlJlcXVlc3QvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tb25pdG9yV2ViUmVxdWVzdC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDY2Yjg0NjEuLmIxNTVjYzEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tb25pdG9yV2ViUmVxdWVzdC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tb25pdG9yV2ViUmVxdWVzdC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LW1vbml0b3Itd2ViLXJlcXVlc3QiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tb25pdG9yV2ViUmVxdWVzdC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbW9uaXRvcldlYlJlcXVlc3QvYnVpbGQueG1sCmluZGV4IDdjOTc0MWIuLmRmNzZkNTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tb25pdG9yV2ViUmVxdWVzdC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL21vbml0b3JXZWJSZXF1ZXN0L2J1aWxkLnhtbApAQCAtMzUsNyArMzUsNyBAQAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICAgIDxkZWxldGUgZmlsZT0iV2ViVGVzdC5jbGFzcyIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQzLDE2ICs0MywxNiBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXI6JHtzMWFzLmNsYXNzcGF0aH0iCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgpAQCAtNjMsNyArNjMsNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTcxLDcgKzcxLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphcjoke3MxYXMuY2xhc3NwYXRofTouIiBmb3JrPSJ0cnVlIj4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2FkbWluLmhvc3R9Ii8+CkBAIC04NCw3ICs4NCw3IEBACiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtjb250ZXh0cm9vdH0iLz4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0b3JlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiIC8+CkBAIC05NSw3ICs5NSw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlQ29udGV4dFJvb3QvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUNvbnRleHRSb290L1dlYlRlc3QuamF2YQppbmRleCA0MzRkNjY5Li5lZGVkMmQwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlQ29udGV4dFJvb3QvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVDb250ZXh0Um9vdC9XZWJUZXN0LmphdmEKQEAgLTE4LDcgKzE4LDcgQEAKIGltcG9ydCBqYXZhLm5ldC4qOwogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuKjsKIAotLyoqIAorLyoqCiAgKiBVbml0IHRlc3QgZm9yOgogICoKICAqICBodHRwczovL2dsYXNzZmlzaC5kZXYuamF2YS5uZXQvaXNzdWVzL3Nob3dfYnVnLmNnaT9pZD0yMzM5CkBAIC00Miw3ICs0Miw3IEBACiAgICAgICAgIGhvc3QgPSBhcmdzWzBdOwogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBHbGFzc0Zpc2ggSXNzdWUgMjMzOSIpOwpAQCAtNTUsMTEgKzU1LDExIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0ICsgIi8iCiAgICAgICAgICAgICArICIlRTMlODElQTglRTclQjIlQUVKb3QlRTclQjIlQUVFbnRlcnByaXNlQXBwbGljYXRpb24yJUU3JUIyJUE0JUUzJTgyJThELXdhci90ZXN0LmpzcCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CkBAIC03OSwxMCArNzksMTAgQEAKICAgICAgICAgICAgIGlmIChFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUNvbnRleHRSb290L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlQ29udGV4dFJvb3QvYnVpbGQucHJvcGVydGllcwppbmRleCBlN2YxMzI2Li44ZTM4YzYxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlQ29udGV4dFJvb3QvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlQ29udGV4dFJvb3QvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1tdWx0aS1ieXRlLWNvbnRleHQtcm9vdCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUNvbnRleHRSb290L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVDb250ZXh0Um9vdC9idWlsZC54bWwKaW5kZXggMjNmMmFjNi4uMTlkYTNkZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUNvbnRleHRSb290L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlQ29udGV4dFJvb3QvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwyMSArNDIsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLW5vLWNvbnRleHQtcm9vdCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTY4LDEwICs2OCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVDb250ZXh0Um9vdC9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlQ29udGV4dFJvb3QvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IGY2NDQzY2QuLjQ1MjY0NGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVDb250ZXh0Um9vdC9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUNvbnRleHRSb290L2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMTgsNyArMTgsNyBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0JIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiCi0JIHZlcnNpb249IjIuNSI+CisgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiCisgICAgIHZlcnNpb249IjIuNSI+CiA8L3dlYi1hcHA+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlQ29udGV4dFJvb3RXaXRoQ29va2llL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVDb250ZXh0Um9vdFdpdGhDb29raWUvV2ViVGVzdC5qYXZhCmluZGV4IDhiM2MzN2QuLjliZDBhMzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVDb250ZXh0Um9vdFdpdGhDb29raWUvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVDb250ZXh0Um9vdFdpdGhDb29raWUvV2ViVGVzdC5qYXZhCkBAIC0yMCw3ICsyMCw3IEBACiBpbXBvcnQgamF2YS51dGlsLk1hcDsKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLio7CiAKLS8qKiAKKy8qKgogICogVW5pdCB0ZXN0IGZvcjoKICAqCiAgKiAgTXVsdGktYnl0ZSBjb250ZXh0IHJvb3Qgd2l0aCBzZXNzaW9uIGNvb2tpZQpAQCAtNDQsNyArNDQsNyBAQAogICAgICAgICBob3N0ID0gYXJnc1swXTsKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgTXVsdGktQnl0ZSBDb250ZXh0IFJvb3Qgd2l0aCBTZXNzaW9uIENvb2tpZSIpOwpAQCAtNjcsMTEgKzY3LDExIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCSAgICBzdGF0LnByaW50U3VtbWFyeSgpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgZG9TZXRKc3AoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgU3RyaW5nIHNlc3Npb25JZCA9IG51bGw7CiAKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0ICsgIi8iCkBAIC05Miw3ICs5Miw3IEBACiAKICAgICAgICAgICAgIHNlc3Npb25JZCA9IGdldENvb2tpZUZpZWxkKGNvb2tpZXMsIEpTRVNTSU9OSUQpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJzZXNzaW9uSWQgPSAiICsgc2Vzc2lvbklkKTsKLSAgICAgICAgfSBlbHNlIHsgICAKKyAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiVW5leHBlY3RlZCByZXR1cm4gY29kZTogIiArIHJlc3BvbnNlQ29kZSk7CiAgICAgICAgIH0KIApAQCAtMTA5LDcgKzEwOSw3IEBACiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOwogICAgICAgICAvL1N0cmluZyBjb29raWUgPSBzZXNzaW9uSWQgKyAiOyBteWlkPTEyM0A0NTYiOwogICAgICAgICBTdHJpbmcgY29va2llID0gIiRWZXJzaW9uPTE7ICIgKyBzZXNzaW9uSWQgKyAiOyBteWlkPVwiMTIzQDQ1NlwiIjsKLSAgICAgICAgY29ubi5zZXRSZXF1ZXN0UHJvcGVydHkoIkNvb2tpZSIsIGNvb2tpZSk7IAorICAgICAgICBjb25uLnNldFJlcXVlc3RQcm9wZXJ0eSgiQ29va2llIiwgY29va2llKTsKICAgICAgICAgY29ubi5jb25uZWN0KCk7CiAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwogCkBAIC0xMjEsMTAgKzEyMSwxMCBAQAogICAgICAgICAgICAgaWYgKEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gdHJ1ZTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsgICAKKyAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiVW5leHBlY3RlZCByZXR1cm4gY29kZTogIiArIHJlc3BvbnNlQ29kZSk7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUNvbnRleHRSb290V2l0aENvb2tpZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUNvbnRleHRSb290V2l0aENvb2tpZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDM1MzNiMzguLjIyNjk1MWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVDb250ZXh0Um9vdFdpdGhDb29raWUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlQ29udGV4dFJvb3RXaXRoQ29va2llL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tbXVsdGktYnl0ZS1jb250ZXh0LXJvb3Qtd2l0aC1jb29raWUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVDb250ZXh0Um9vdFdpdGhDb29raWUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUNvbnRleHRSb290V2l0aENvb2tpZS9idWlsZC54bWwKaW5kZXggMjNmMmFjNi4uMTlkYTNkZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUNvbnRleHRSb290V2l0aENvb2tpZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUNvbnRleHRSb290V2l0aENvb2tpZS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDIxICs0MiwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItbm8tY29udGV4dC1yb290Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNjgsMTAgKzY4LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUNvbnRleHRSb290V2l0aENvb2tpZS9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlQ29udGV4dFJvb3RXaXRoQ29va2llL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCBmNjQ0M2NkLi40NTI2NDRiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlQ29udGV4dFJvb3RXaXRoQ29va2llL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlQ29udGV4dFJvb3RXaXRoQ29va2llL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMTgsNyArMTgsNyBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0JIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiCi0JIHZlcnNpb249IjIuNSI+CisgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiCisgICAgIHZlcnNpb249IjIuNSI+CiA8L3dlYi1hcHA+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlR0VUUXVlcnlQYXJhbURlZmF1bHRDaGFyc2V0L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVHRVRRdWVyeVBhcmFtRGVmYXVsdENoYXJzZXQvV2ViVGVzdC5qYXZhCmluZGV4IDMzMmJjYzUuLjJiNzRlZmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVHRVRRdWVyeVBhcmFtRGVmYXVsdENoYXJzZXQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVHRVRRdWVyeVBhcmFtRGVmYXVsdENoYXJzZXQvV2ViVGVzdC5qYXZhCkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIDYzMzk2MDgiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC02MCw5ICs2MCw5IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFNvY2tldCBzb2NrID0gbmV3IFNvY2tldChob3N0LCBJbnRlZ2VyLnBhcnNlSW50KHBvcnQpKTsKLSAgICAKKwogICAgICAgICBCdWZmZXJlZFdyaXRlciBidyA9IG5ldyBCdWZmZXJlZFdyaXRlcihuZXcgT3V0cHV0U3RyZWFtV3JpdGVyKAogICAgICAgICAgICAgc29jay5nZXRPdXRwdXRTdHJlYW0oKSwgIlNoaWZ0X0pJUyIpKTsKICAgICAgICAgYncud3JpdGUoIkdFVCAiICsgY29udGV4dFJvb3QKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVHRVRRdWVyeVBhcmFtRGVmYXVsdENoYXJzZXQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVHRVRRdWVyeVBhcmFtRGVmYXVsdENoYXJzZXQvYnVpbGQucHJvcGVydGllcwppbmRleCBhMjg4MGYxLi5mODFmYzk4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlR0VUUXVlcnlQYXJhbURlZmF1bHRDaGFyc2V0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1EZWZhdWx0Q2hhcnNldC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tbXVsdGktYnl0ZS1nZXQtcXVlcnktcGFyYW0tZGVmYXVsdC1jaGFyc2V0Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1tdWx0aS1ieXRlLWdldC1xdWVyeS1wYXJhbS1kZWZhdWx0LWNoYXJzZXQiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVHRVRRdWVyeVBhcmFtRGVmYXVsdENoYXJzZXQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1EZWZhdWx0Q2hhcnNldC9idWlsZC54bWwKaW5kZXggZmFmN2Y1NS4uNTFhMWNiYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1EZWZhdWx0Q2hhcnNldC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1EZWZhdWx0Q2hhcnNldC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE1ICs0MiwxNSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNTgsNyArNTgsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVHRVRRdWVyeVBhcmFtRGVmYXVsdENoYXJzZXQvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1EZWZhdWx0Q2hhcnNldC9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggMDRiZGZjNS4uZWEwZjYyMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1EZWZhdWx0Q2hhcnNldC9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1EZWZhdWx0Q2hhcnNldC9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTIyLDEyICsyMiwxMiBAQAogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCIKICAgICAgICAgIHZlcnNpb249IjIuNCI+Ci0gICAgIAorCiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+VGVzdFNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+VGVzdFNlcnZsZXQ8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCi0gICAgCisgICAgPC9zZXJ2bGV0PgorCiAgICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5UZXN0U2VydmxldDwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L1Rlc3RTZXJ2bGV0PC91cmwtcGF0dGVybj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVHRVRRdWVyeVBhcmFtRGVmYXVsdENoYXJzZXQvc2VydmxldC9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1EZWZhdWx0Q2hhcnNldC9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggM2U1M2RjZi4uMTc0ODJkOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1EZWZhdWx0Q2hhcnNldC9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1EZWZhdWx0Q2hhcnNldC9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTE5LDcgKzE5LDcgQEAKIGltcG9ydCBqYWthcnRhLnNlcnZsZXQuaHR0cC4qOwogCiBwdWJsaWMgY2xhc3MgVGVzdFNlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb0dldCAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpCiAgICAgICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlR0VUUXVlcnlQYXJhbUZvcm1IaW50RmllbGQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1Gb3JtSGludEZpZWxkL1dlYlRlc3QuamF2YQppbmRleCA3NGQyZTY5Li40YmM4NzFiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlR0VUUXVlcnlQYXJhbUZvcm1IaW50RmllbGQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVHRVRRdWVyeVBhcmFtRm9ybUhpbnRGaWVsZC9XZWJUZXN0LmphdmEKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgNjMzOTYwOCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTcwLDkgKzcwLDkgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgc29jayA9IG5ldyBTb2NrZXQoaG9zdCwgSW50ZWdlci5wYXJzZUludChwb3J0KSk7Ci0gICAgCisKICAgICAgICAgQnVmZmVyZWRXcml0ZXIgYncgPSBuZXcgQnVmZmVyZWRXcml0ZXIobmV3IE91dHB1dFN0cmVhbVdyaXRlcigKICAgICAgICAgICAgIHNvY2suZ2V0T3V0cHV0U3RyZWFtKCksICJTaGlmdF9KSVMiKSk7CiAgICAgICAgIGJ3LndyaXRlKCJHRVQgIiArIGNvbnRleHRSb290CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlR0VUUXVlcnlQYXJhbUZvcm1IaW50RmllbGQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVHRVRRdWVyeVBhcmFtRm9ybUhpbnRGaWVsZC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGNiMmVkZDAuLjJmZGM5OTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVHRVRRdWVyeVBhcmFtRm9ybUhpbnRGaWVsZC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVHRVRRdWVyeVBhcmFtRm9ybUhpbnRGaWVsZC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tbXVsdGktYnl0ZS1nZXQtcXVlcnktcGFyYW0tZm9ybS1oaW50LWZpZWxkIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1tdWx0aS1ieXRlLWdldC1xdWVyeS1wYXJhbS1mb3JtLWhpbnQtZmllbGQiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVHRVRRdWVyeVBhcmFtRm9ybUhpbnRGaWVsZC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlR0VUUXVlcnlQYXJhbUZvcm1IaW50RmllbGQvYnVpbGQueG1sCmluZGV4IGZhZjdmNTUuLjUxYTFjYmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVHRVRRdWVyeVBhcmFtRm9ybUhpbnRGaWVsZC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1Gb3JtSGludEZpZWxkL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTUgKzQyLDE1IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC01OCw3ICs1OCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KIAogICAgICAgICAgIDxqYXZhYwpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1Gb3JtSGludEZpZWxkL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVHRVRRdWVyeVBhcmFtRm9ybUhpbnRGaWVsZC9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggMDRiZGZjNS4uZWEwZjYyMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1Gb3JtSGludEZpZWxkL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlR0VUUXVlcnlQYXJhbUZvcm1IaW50RmllbGQvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yMiwxMiArMjIsMTIgQEAKICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiCiAgICAgICAgICB2ZXJzaW9uPSIyLjQiPgotICAgICAKKwogICAgIDxzZXJ2bGV0PgogICAgICAgICA8c2VydmxldC1uYW1lPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAotICAgIAorICAgIDwvc2VydmxldD4KKwogICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+VGVzdFNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi9UZXN0U2VydmxldDwvdXJsLXBhdHRlcm4+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlR0VUUXVlcnlQYXJhbUZvcm1IaW50RmllbGQvc2VydmxldC9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1Gb3JtSGludEZpZWxkL3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQppbmRleCAzZTUzZGNmLi4xNzQ4MmQ5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlR0VUUXVlcnlQYXJhbUZvcm1IaW50RmllbGQvc2VydmxldC9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVHRVRRdWVyeVBhcmFtRm9ybUhpbnRGaWVsZC9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTE5LDcgKzE5LDcgQEAKIGltcG9ydCBqYWthcnRhLnNlcnZsZXQuaHR0cC4qOwogCiBwdWJsaWMgY2xhc3MgVGVzdFNlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb0dldCAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpCiAgICAgICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlR0VUUXVlcnlQYXJhbUxvY2FsZUNoYXJzZXRNYXAvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1Mb2NhbGVDaGFyc2V0TWFwL1dlYlRlc3QuamF2YQppbmRleCA2NWZiZjA3Li5iYWNmZjgwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlR0VUUXVlcnlQYXJhbUxvY2FsZUNoYXJzZXRNYXAvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVHRVRRdWVyeVBhcmFtTG9jYWxlQ2hhcnNldE1hcC9XZWJUZXN0LmphdmEKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgNjMzOTYwOCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTYwLDkgKzYwLDkgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgU29ja2V0IHNvY2sgPSBuZXcgU29ja2V0KGhvc3QsIEludGVnZXIucGFyc2VJbnQocG9ydCkpOwotICAgIAorCiAgICAgICAgIEJ1ZmZlcmVkV3JpdGVyIGJ3ID0gbmV3IEJ1ZmZlcmVkV3JpdGVyKG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIoCiAgICAgICAgICAgICBzb2NrLmdldE91dHB1dFN0cmVhbSgpLCAiU2hpZnRfSklTIikpOwogICAgICAgICBidy53cml0ZSgiR0VUICIgKyBjb250ZXh0Um9vdApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1Mb2NhbGVDaGFyc2V0TWFwL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlR0VUUXVlcnlQYXJhbUxvY2FsZUNoYXJzZXRNYXAvYnVpbGQucHJvcGVydGllcwppbmRleCAyMjI4YjBmLi4yNjI2ZWE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlR0VUUXVlcnlQYXJhbUxvY2FsZUNoYXJzZXRNYXAvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlR0VUUXVlcnlQYXJhbUxvY2FsZUNoYXJzZXRNYXAvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LW11bHRpLWJ5dGUtZ2V0LXF1ZXJ5LXBhcmFtLWxvY2FsZS1jaGFyc2V0LW1hcCIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tbXVsdGktYnl0ZS1nZXQtcXVlcnktcGFyYW0tbG9jYWxlLWNoYXJzZXQtbWFwIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlR0VUUXVlcnlQYXJhbUxvY2FsZUNoYXJzZXRNYXAvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1Mb2NhbGVDaGFyc2V0TWFwL2J1aWxkLnhtbAppbmRleCBmYWY3ZjU1Li41MWExY2JhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlR0VUUXVlcnlQYXJhbUxvY2FsZUNoYXJzZXRNYXAvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVHRVRRdWVyeVBhcmFtTG9jYWxlQ2hhcnNldE1hcC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE1ICs0MiwxNSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNTgsNyArNTgsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVHRVRRdWVyeVBhcmFtTG9jYWxlQ2hhcnNldE1hcC9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlR0VUUXVlcnlQYXJhbUxvY2FsZUNoYXJzZXRNYXAvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDA0YmRmYzUuLmVhMGY2MjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVHRVRRdWVyeVBhcmFtTG9jYWxlQ2hhcnNldE1hcC9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1Mb2NhbGVDaGFyc2V0TWFwL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjIsMTIgKzIyLDEyIEBACiAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIgogICAgICAgICAgdmVyc2lvbj0iMi40Ij4KLSAgICAgCisKICAgICA8c2VydmxldD4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5UZXN0U2VydmxldDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz5UZXN0U2VydmxldDwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKLSAgICAKKyAgICA8L3NlcnZsZXQ+CisKICAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vVGVzdFNlcnZsZXQ8L3VybC1wYXR0ZXJuPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1Mb2NhbGVDaGFyc2V0TWFwL3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVHRVRRdWVyeVBhcmFtTG9jYWxlQ2hhcnNldE1hcC9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggM2U1M2RjZi4uMTc0ODJkOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1Mb2NhbGVDaGFyc2V0TWFwL3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlR0VUUXVlcnlQYXJhbUxvY2FsZUNoYXJzZXRNYXAvc2VydmxldC9UZXN0U2VydmxldC5qYXZhCkBAIC0xOSw3ICsxOSw3IEBACiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuKjsKIAogcHVibGljIGNsYXNzIFRlc3RTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9HZXQgKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzKQogICAgICAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1TZXRDaGFyRW5jb2RpbmcvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1TZXRDaGFyRW5jb2RpbmcvV2ViVGVzdC5qYXZhCmluZGV4IGIyMDU0OWMuLjg5N2M1ZmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVHRVRRdWVyeVBhcmFtU2V0Q2hhckVuY29kaW5nL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlR0VUUXVlcnlQYXJhbVNldENoYXJFbmNvZGluZy9XZWJUZXN0LmphdmEKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgNjMzOTYwOCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTY5LDkgKzY5LDkgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgc29jayA9IG5ldyBTb2NrZXQoaG9zdCwgSW50ZWdlci5wYXJzZUludChwb3J0KSk7Ci0gICAgCisKICAgICAgICAgQnVmZmVyZWRXcml0ZXIgYncgPSBuZXcgQnVmZmVyZWRXcml0ZXIobmV3IE91dHB1dFN0cmVhbVdyaXRlcigKICAgICAgICAgICAgIHNvY2suZ2V0T3V0cHV0U3RyZWFtKCksICJTaGlmdF9KSVMiKSk7CiAgICAgICAgIGJ3LndyaXRlKCJHRVQgIiArIGNvbnRleHRSb290CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlR0VUUXVlcnlQYXJhbVNldENoYXJFbmNvZGluZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1TZXRDaGFyRW5jb2RpbmcvYnVpbGQucHJvcGVydGllcwppbmRleCBmYjNkMTE5Li4zYWVkMjYyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlR0VUUXVlcnlQYXJhbVNldENoYXJFbmNvZGluZy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVHRVRRdWVyeVBhcmFtU2V0Q2hhckVuY29kaW5nL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1tdWx0aS1ieXRlLWdldC1xdWVyeS1wYXJhbS1zZXQtY2hhci1lbmNvZGluZyIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tbXVsdGktYnl0ZS1nZXQtcXVlcnktcGFyYW0tc2V0LWNoYXItZW5jb2RpbmciLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii8ke2FwcG5hbWV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlR0VUUXVlcnlQYXJhbVNldENoYXJFbmNvZGluZy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlR0VUUXVlcnlQYXJhbVNldENoYXJFbmNvZGluZy9idWlsZC54bWwKaW5kZXggZmFmN2Y1NS4uNTFhMWNiYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1TZXRDaGFyRW5jb2RpbmcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVHRVRRdWVyeVBhcmFtU2V0Q2hhckVuY29kaW5nL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTUgKzQyLDE1IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC01OCw3ICs1OCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KIAogICAgICAgICAgIDxqYXZhYwpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1TZXRDaGFyRW5jb2RpbmcvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1TZXRDaGFyRW5jb2RpbmcvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDA0YmRmYzUuLmVhMGY2MjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVHRVRRdWVyeVBhcmFtU2V0Q2hhckVuY29kaW5nL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlR0VUUXVlcnlQYXJhbVNldENoYXJFbmNvZGluZy9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTIyLDEyICsyMiwxMiBAQAogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCIKICAgICAgICAgIHZlcnNpb249IjIuNCI+Ci0gICAgIAorCiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+VGVzdFNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+VGVzdFNlcnZsZXQ8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCi0gICAgCisgICAgPC9zZXJ2bGV0PgorCiAgICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5UZXN0U2VydmxldDwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L1Rlc3RTZXJ2bGV0PC91cmwtcGF0dGVybj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVHRVRRdWVyeVBhcmFtU2V0Q2hhckVuY29kaW5nL3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVHRVRRdWVyeVBhcmFtU2V0Q2hhckVuY29kaW5nL3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQppbmRleCAwN2RhZWJjLi45MWRjMzU4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlR0VUUXVlcnlQYXJhbVNldENoYXJFbmNvZGluZy9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUdFVFF1ZXJ5UGFyYW1TZXRDaGFyRW5jb2Rpbmcvc2VydmxldC9UZXN0U2VydmxldC5qYXZhCkBAIC0xOSw3ICsxOSw3IEBACiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuKjsKIAogcHVibGljIGNsYXNzIFRlc3RTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9HZXQgKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzKQogICAgICAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUh0dHBSZXF1ZXN0QnVmZmVyL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVIdHRwUmVxdWVzdEJ1ZmZlci9XZWJUZXN0LmphdmEKaW5kZXggYmIyNTM5Zi4uODZjZjM4OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUh0dHBSZXF1ZXN0QnVmZmVyL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlSHR0cFJlcXVlc3RCdWZmZXIvV2ViVGVzdC5qYXZhCkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgICAgIHNpemUgPSBJbnRlZ2VyLnBhcnNlSW50KGFyZ3NbM10pOwogICAgICAgICBpc0FzY2lpID0gQm9vbGVhbi52YWx1ZU9mKGFyZ3NbNF0pOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBNdWx0aS1ieXRlIEh0dHAgcmVxdWVzdCBidWZmZXIiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlSHR0cFJlcXVlc3RCdWZmZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVIdHRwUmVxdWVzdEJ1ZmZlci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGU3MTUwNzkuLmNkNDIzM2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVIdHRwUmVxdWVzdEJ1ZmZlci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVIdHRwUmVxdWVzdEJ1ZmZlci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LW11bHRpLWJ5dGUtaHR0cC1yZXF1ZXN0LWJ1ZmZlciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUh0dHBSZXF1ZXN0QnVmZmVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVIdHRwUmVxdWVzdEJ1ZmZlci9idWlsZC54bWwKaW5kZXggZDg5NzI1Yi4uZWIwMjlkZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZUh0dHBSZXF1ZXN0QnVmZmVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlSHR0cFJlcXVlc3RCdWZmZXIvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwyMiArNDQsMjIgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIgZW5jb2Rpbmc9IlVURi04Ii8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MywxMCArNzMsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlUE9TVEZvcm1IaW50RmllbGQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZVBPU1RGb3JtSGludEZpZWxkL1dlYlRlc3QuamF2YQppbmRleCBiNGQ5YTMwLi40OGE4ZDdlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlUE9TVEZvcm1IaW50RmllbGQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVQT1NURm9ybUhpbnRGaWVsZC9XZWJUZXN0LmphdmEKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgUE9TVCBmb3JtIGRhdGEgd2l0aCBmb3JtLWhpbnQtZmllbGQiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC01OCw3ICs1OCw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIC8vIFBPU1QgYm9keQogICAgICAgICBTdHJpbmcgYm9keSA9ICJqYXBhbmVzZU5hbWU9IgogICAgICAgICAgICAgKyBVUkxFbmNvZGVyLmVuY29kZSgiXHUzMDY4XHU0ZWJhXHU2NTg3IiwgIlNoaWZ0X0pJUyIpCkBAIC02Nyw3ICs2Nyw3IEBACiAgICAgICAgIC8vIENyZWF0ZSBhIHNvY2tldCB0byB0aGUgaG9zdAogICAgICAgICBTb2NrZXQgc29jayA9IG5ldyBTb2NrZXQoaG9zdCwgSW50ZWdlci5wYXJzZUludChwb3J0KSk7CiAgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IHNvY2suZ2V0T3V0cHV0U3RyZWFtKCk7Ci0gICAgCisKICAgICAgICAgLy8gU2VuZCBoZWFkZXIKICAgICAgICAgQnVmZmVyZWRXcml0ZXIgd3IgPSBuZXcgQnVmZmVyZWRXcml0ZXIobmV3IE91dHB1dFN0cmVhbVdyaXRlcigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2suZ2V0T3V0cHV0U3RyZWFtKCkpKTsKQEAgLTc1LDcgKzc1LDcgQEAKICAgICAgICAgd3Iud3JpdGUoIkNvbnRlbnQtTGVuZ3RoOiAiICsgYm9keS5sZW5ndGgoKSArICJcclxuIik7CiAgICAgICAgIHdyLndyaXRlKCJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFxyXG4iKTsKICAgICAgICAgd3Iud3JpdGUoIlxyXG4iKTsKLSAgICAKKwogICAgICAgICAvLyBTZW5kIGJvZHkKICAgICAgICAgd3Iud3JpdGUoYm9keSk7CiAgICAgICAgIHdyLmZsdXNoKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlUE9TVEZvcm1IaW50RmllbGQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVQT1NURm9ybUhpbnRGaWVsZC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDE3YzA2ZWUuLjExMTMzNTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVQT1NURm9ybUhpbnRGaWVsZC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVQT1NURm9ybUhpbnRGaWVsZC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tbXVsdGktYnl0ZS1wb3N0LWZvcm0taGludC1maWVsZCIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tbXVsdGktYnl0ZS1wb3N0LWZvcm0taGludC1maWVsZCIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZVBPU1RGb3JtSGludEZpZWxkL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVQT1NURm9ybUhpbnRGaWVsZC9idWlsZC54bWwKaW5kZXggZmFmN2Y1NS4uNTFhMWNiYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZVBPU1RGb3JtSGludEZpZWxkL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlUE9TVEZvcm1IaW50RmllbGQvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxNSArNDIsMTUgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTU4LDcgKzU4LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogCiAgICAgICAgICAgPGphdmFjCkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlUE9TVEZvcm1IaW50RmllbGQvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZVBPU1RGb3JtSGludEZpZWxkL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCAwNGJkZmM1Li5lYTBmNjIwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlUE9TVEZvcm1IaW50RmllbGQvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVQT1NURm9ybUhpbnRGaWVsZC9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTIyLDEyICsyMiwxMiBAQAogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCIKICAgICAgICAgIHZlcnNpb249IjIuNCI+Ci0gICAgIAorCiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+VGVzdFNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+VGVzdFNlcnZsZXQ8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCi0gICAgCisgICAgPC9zZXJ2bGV0PgorCiAgICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5UZXN0U2VydmxldDwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L1Rlc3RTZXJ2bGV0PC91cmwtcGF0dGVybj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVQT1NURm9ybUhpbnRGaWVsZC9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlCeXRlUE9TVEZvcm1IaW50RmllbGQvc2VydmxldC9UZXN0U2VydmxldC5qYXZhCmluZGV4IDE5NGFmNzUuLmE3NDI0ZjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aUJ5dGVQT1NURm9ybUhpbnRGaWVsZC9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpQnl0ZVBPU1RGb3JtSGludEZpZWxkL3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQpAQCAtMTksNyArMTksNyBAQAogaW1wb3J0IGpha2FydGEuc2VydmxldC5odHRwLio7CiAKIHB1YmxpYyBjbGFzcyBUZXN0U2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvUG9zdCAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpCiAgICAgICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlQcm9jZXNzb3JDb25maWcvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpUHJvY2Vzc29yQ29uZmlnL1dlYlRlc3QuamF2YQppbmRleCA4OTIwMjdlLi5hMjE0NDhhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlQcm9jZXNzb3JDb25maWcvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aVByb2Nlc3NvckNvbmZpZy9XZWJUZXN0LmphdmEKQEAgLTI0LDEwICsyNCwxMCBAQAogKiBJc3N1ZSBJc3N1ZSA0NjQ6IE11bHRpLVByb2Nlc3NvciBjb25maWd1cmF0aW9uIGFyZW4ndCBhcHBsaWVkCiAqLwogcHVibGljIGNsYXNzIFdlYlRlc3QgewotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50ID0gMDsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgRVhQRUNURURfQ09VTlQgPSAzOwotICAgIAorCiAgICAgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0PQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKQEAgLTM2LDcgKzM2LDcgQEAKIAogICAgICAgICAvLyBUaGUgc3RhdCByZXBvcnRlciB3cml0ZXMgb3V0IHRoZSB0ZXN0IGluZm8gYW5kIHJlc3VsdHMKICAgICAgICAgLy8gaW50byB0aGUgdG9wLWxldmVsIHF1aWNrbG9vayBkaXJlY3RvcnkgZHVyaW5nIGEgcnVuLgotICAgICAgCisKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigibXVsdGlQcm9jZXNzb3JDb25maWciKTsKIAogICAgICAgICBTdHJpbmcgaG9zdCA9IGFyZ3NbMF07CkBAIC00NSwxNyArNDUsMTcgQEAKIAogICAgICAgICBpbnQgcG9ydCA9IG5ldyBJbnRlZ2VyKHBvcnRTKS5pbnRWYWx1ZSgpOwogICAgICAgICBTdHJpbmcgbmFtZTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGdvR2V0KGhvc3QsIHBvcnQsICJGSUxURVIiLCBjb250ZXh0Um9vdCArICIvU2VydmxldFRlc3QiICk7CiAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odC5nZXRNZXNzYWdlKCkpOwotICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIm11bHRpUHJvY2Vzc29yQ29uZmlnIiwgc3RhdC5QQVNTKTsgCisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibXVsdGlQcm9jZXNzb3JDb25maWciLCBzdGF0LlBBU1MpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGNvdW50ICE9IEVYUEVDVEVEX0NPVU5UKXsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJtdWx0aVByb2Nlc3NvckNvbmZpZyIsIHN0YXQuRkFJTCk7Ci0gICAgICAgIH0gICAgICAgICAgIAorICAgICAgICB9CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3ZWIvc3RhbmRhbG9uZXdhci0tLT4gZXhwZWN0ICIgKyBFWFBFQ1RFRF9DT1VOVCk7CiAgICAgfQogCkBAIC03MSw3ICs3MSw3IEBACiAgICAgICAgIG9zLndyaXRlKCgiR0VUICIgKyBjb250ZXh0UGF0aCArICIgSFRUUC8xLjFcbiIpLmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgoIkhvc3Q6IGxvY2FsaG9zdFxuIikuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gcy5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRpbWU6ICIgKyAoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSB0aW1lKSk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJpcyA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKQEAgLTgzLDE2ICs4MywxNiBAQAogICAgICAgICAgICAgICAgIGluZGV4ID0gbGluZS5pbmRleE9mKHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGxpbmUpOwogICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPSAtMSkgewotICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJtdWx0aVByb2Nlc3NvckNvbmZpZyIsIHN0YXQuRkFJTCk7IAorICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJtdWx0aVByb2Nlc3NvckNvbmZpZyIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICggaW5kZXggPT0gLTEgKXsKLSAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibXVsdGlQcm9jZXNzb3JDb25maWciLCBzdGF0LlBBU1MpOyAKKyAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibXVsdGlQcm9jZXNzb3JDb25maWciLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZXgpewogICAgICAgICB9CiAgICB9Ci0gIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlQcm9jZXNzb3JDb25maWcvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aVByb2Nlc3NvckNvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDZlNDc4MTguLjA3MjU0NWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aVByb2Nlc3NvckNvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aVByb2Nlc3NvckNvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNCArMTUsMTQgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tbXVsdGlQcm9jZXNzb3JDb25maWciLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LW11bHRpUHJvY2Vzc29yQ29uZmlnIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iL3dlYi1tdWx0aVByb2Nlc3NvckNvbmZpZyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpUHJvY2Vzc29yQ29uZmlnL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aVByb2Nlc3NvckNvbmZpZy9idWlsZC54bWwKaW5kZXggYTQyY2VmYi4uZDMxMDJhZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpUHJvY2Vzc29yQ29uZmlnL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlQcm9jZXNzb3JDb25maWcvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC03MCwxNSArNzAsMTUgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTg2LDcgKzg2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YWMKICAgICAgICAgICAgIHNyY2Rpcj0iLiIKQEAgLTEwMywxMCArMTAzLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpUHJvY2Vzc29yQ29uZmlnL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aVByb2Nlc3NvckNvbmZpZy9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggZjk4NjFkZi4uMWY4NGNlZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpUHJvY2Vzc29yQ29uZmlnL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlQcm9jZXNzb3JDb25maWcvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yMiwzNyArMjIsMzcgQEAKICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiCiAgICAgICAgICB2ZXJzaW9uPSIyLjQiPgotICAgICAKKwogICAgIDxmaWx0ZXI+CiAgICAgICAgIDxmaWx0ZXItbmFtZT5GaWx0ZXJUZXN0PC9maWx0ZXItbmFtZT4KICAgICAgICAgPGZpbHRlci1jbGFzcz50ZXN0LkZpbHRlclRlc3Q8L2ZpbHRlci1jbGFzcz4KLSAgICA8L2ZpbHRlcj4gICAgCi0gICAgICAgIAorICAgIDwvZmlsdGVyPgorCiAgICAgPGZpbHRlci1tYXBwaW5nPgogICAgICAgICA8ZmlsdGVyLW5hbWU+RmlsdGVyVGVzdDwvZmlsdGVyLW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vKjwvdXJsLXBhdHRlcm4+CiAgICAgICAgIDxkaXNwYXRjaGVyPlJFUVVFU1Q8L2Rpc3BhdGNoZXI+CiAgICAgICAgIDxkaXNwYXRjaGVyPklOQ0xVREU8L2Rpc3BhdGNoZXI+Ci0gICAgICAgIDxkaXNwYXRjaGVyPkZPUldBUkQ8L2Rpc3BhdGNoZXI+ICAKLSAgICAgICAgPGRpc3BhdGNoZXI+RVJST1I8L2Rpc3BhdGNoZXI+IAorICAgICAgICA8ZGlzcGF0Y2hlcj5GT1JXQVJEPC9kaXNwYXRjaGVyPgorICAgICAgICA8ZGlzcGF0Y2hlcj5FUlJPUjwvZGlzcGF0Y2hlcj4KICAgICA8L2ZpbHRlci1tYXBwaW5nPgotICAgIAorCiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldFRlc3Q8L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0PC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAorICAgIDwvc2VydmxldD4KICAgICA8c2VydmxldD4KICAgICAgICAgPGRpc3BsYXktbmFtZT5TZXJ2bGV0VGVzdDI8L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDI8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDI8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCisgICAgPC9zZXJ2bGV0PgogICAgIDxzZXJ2bGV0PgogICAgICAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXRUZXN0MzwvZGlzcGxheS1uYW1lPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0Mzwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0Mzwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKLSAgICAKKyAgICA8L3NlcnZsZXQ+CisKICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi9TZXJ2bGV0VGVzdDwvdXJsLXBhdHRlcm4+CkBAIC02NSw3ICs2NSw3IEBACiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3QzPC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vU2VydmxldFRlc3QzPC91cmwtcGF0dGVybj4KICAgICA8L3NlcnZsZXQtbWFwcGluZz4KLSAgICAKKwogICAgIDxzZXNzaW9uLWNvbmZpZz4KICAgICAgICAgPHNlc3Npb24tdGltZW91dD4xMDwvc2Vzc2lvbi10aW1lb3V0PgogICAgIDwvc2Vzc2lvbi1jb25maWc+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlQcm9jZXNzb3JDb25maWcvc2VydmxldC9GaWx0ZXJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlQcm9jZXNzb3JDb25maWcvc2VydmxldC9GaWx0ZXJUZXN0LmphdmEKaW5kZXggZmNmMzYyNC4uZWVjOTU3ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpUHJvY2Vzc29yQ29uZmlnL3NlcnZsZXQvRmlsdGVyVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aVByb2Nlc3NvckNvbmZpZy9zZXJ2bGV0L0ZpbHRlclRlc3QuamF2YQpAQCAtMTksMjUgKzE5LDI1IEBACiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lio7CiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuKjsKIHB1YmxpYyBjbGFzcyBGaWx0ZXJUZXN0IGltcGxlbWVudHMgRmlsdGVyewotICAgIAorCiAgICAgcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbRmlsdGVyLmRlc3Ryb3ldIik7Ci0gICAgfSAgICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgdm9pZCBkb0ZpbHRlcihTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UsIEZpbHRlckNoYWluIGZpbHRlckNoYWluKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiwgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltGaWx0ZXIuZG9GaWx0ZXJdIik7Ci0gICAgICAgICAgCisKICAgICAgICAgKChIdHRwU2VydmxldFJlcXVlc3QpcmVxdWVzdCkuZ2V0U2Vzc2lvbigpLnNldEF0dHJpYnV0ZSgiRklMVEVSIiwgIlBBU1MiKTsKICAgICAgICAgZmlsdGVyQ2hhaW4uZG9GaWx0ZXIocmVxdWVzdCwgcmVzcG9uc2UpOwotICAgICAgICAKLSAgICB9ICAgIAotICAgIAotICAgIAorCisgICAgfQorCisKICAgICBwdWJsaWMgdm9pZCBpbml0KGpha2FydGEuc2VydmxldC5GaWx0ZXJDb25maWcgZmlsdGVyQ29uZmlnKSB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltGaWx0ZXIuaW5pdF0iKTsKICAgICAgICAgY29udGV4dCA9IGZpbHRlckNvbmZpZy5nZXRTZXJ2bGV0Q29udGV4dCgpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpUHJvY2Vzc29yQ29uZmlnL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aVByb2Nlc3NvckNvbmZpZy9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKaW5kZXggZDRhMzE3NC4uZGFhODA1MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpUHJvY2Vzc29yQ29uZmlnL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlQcm9jZXNzb3JDb25maWcvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCkBAIC00NiwxMyArNDYsMTMgQEAKIHB1YmxpYyBjbGFzcyBTZXJ2bGV0VGVzdCBleHRlbmRzIEh0dHBTZXJ2bGV0IGltcGxlbWVudHMgSHR0cFNlc3Npb25MaXN0ZW5lciB7CiAKICAgICBwcml2YXRlIFNlcnZsZXRDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5pbml0XSIpOyAgICAgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuaW5pdF0iKTsKICAgICAgICAgY29udGV4dCA9IGNvbmZpZy5nZXRTZXJ2bGV0Q29udGV4dCgpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmluaXRdICIgKyBjb250ZXh0LmdldE1ham9yVmVyc2lvbigpKTsKLSAgICAgICAgCisKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKQEAgLTYwLDIzICs2MCwyMyBAQAogICAgICAgICBkb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgICAgICAgIAorICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5kb1Bvc3RdIik7Ci0gICAgICAgIAorCiAgICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7Ci0gICAgICAgIAorCiAgICAgICAgIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLnNldEF0dHJpYnV0ZSgiRklMVEVSLVJFUVVFU1QiLCByZXF1ZXN0LmdldFNlc3Npb24oKS5nZXRBdHRyaWJ1dGUoIkZJTFRFUiIpKTsKLSAgICAgICAgcmVxdWVzdC5nZXRTZXNzaW9uKCkuc2V0QXR0cmlidXRlKCJGSUxURVIiLCAiRkFJTCIpOyAgICAgICAgCi0gICAgICAgIAkKKyAgICAgICAgcmVxdWVzdC5nZXRTZXNzaW9uKCkuc2V0QXR0cmlidXRlKCJGSUxURVIiLCAiRkFJTCIpOworCiAgICAgICAgIFJlcXVlc3REaXNwYXRjaGVyIHJkID0gY29udGV4dC5nZXRSZXF1ZXN0RGlzcGF0Y2hlcigiL1NlcnZsZXRUZXN0MiIpOwotICAgICAgICByZC5mb3J3YXJkKHJlcXVlc3QsIHJlc3BvbnNlKTsgICAgICAgCisgICAgICAgIHJkLmZvcndhcmQocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNlc3Npb25DcmVhdGVkKGpha2FydGEuc2VydmxldC5odHRwLkh0dHBTZXNzaW9uRXZlbnQgaHR0cFNlc3Npb25FdmVudCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LnNlc3Npb25DcmVhdGVkXSIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlc3Npb25EZXN0cm95ZWQoamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb25FdmVudCBodHRwU2Vzc2lvbkV2ZW50KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuc2Vzc2lvbkRlc3Ryb3llZF0iKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBdHRyaWJ1dGVzOiAiICsgaHR0cFNlc3Npb25FdmVudC5nZXRTZXNzaW9uKCkuZ2V0QXR0cmlidXRlKCJ0ZXN0IikpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpUHJvY2Vzc29yQ29uZmlnL3NlcnZsZXQvU2VydmxldFRlc3QyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlQcm9jZXNzb3JDb25maWcvc2VydmxldC9TZXJ2bGV0VGVzdDIuamF2YQppbmRleCBkYjJjYjUwLi4wMDc3NWE2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlQcm9jZXNzb3JDb25maWcvc2VydmxldC9TZXJ2bGV0VGVzdDIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlQcm9jZXNzb3JDb25maWcvc2VydmxldC9TZXJ2bGV0VGVzdDIuamF2YQpAQCAtMjUsMTAgKzI1LDEwIEBACiBwdWJsaWMgY2xhc3MgU2VydmxldFRlc3QyIGV4dGVuZHMgSHR0cFNlcnZsZXQgaW1wbGVtZW50cyBIdHRwU2Vzc2lvbkxpc3RlbmVyIHsKIAogICAgIHByaXZhdGUgU2VydmxldENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0Mi5pbml0XSIpOyAgICAgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQyLmluaXRdIik7CiAgICAgICAgIGNvbnRleHQgPSBjb25maWcuZ2V0U2VydmxldENvbnRleHQoKTsKICAgICB9CiAKQEAgLTM3LDIzICszNywyMyBAQAogICAgICAgICBkb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgICAgICAgIAorICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldDIuZG9Qb3N0XSIpOwotICAgICAgCisKICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKLSAgICAgICAgCisKICAgICAgICAgcmVxdWVzdC5nZXRTZXNzaW9uKCkuc2V0QXR0cmlidXRlKCJGSUxURVItRk9SV0FSRCIscmVxdWVzdC5nZXRTZXNzaW9uKCkuZ2V0QXR0cmlidXRlKCJGSUxURVIiKSk7Ci0gICAgICAgIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLnNldEF0dHJpYnV0ZSgiRklMVEVSIiwgIkZBSUwiKTsgICAgICAgIAotICAgICAgICAKKyAgICAgICAgcmVxdWVzdC5nZXRTZXNzaW9uKCkuc2V0QXR0cmlidXRlKCJGSUxURVIiLCAiRkFJTCIpOworCiAgICAgICAgIFJlcXVlc3REaXNwYXRjaGVyIHJkID0gcmVxdWVzdC5nZXRSZXF1ZXN0RGlzcGF0Y2hlcigiL1NlcnZsZXRUZXN0MyIpOwotICAgICAgICByZC5pbmNsdWRlKHJlcXVlc3QsIHJlc3BvbnNlKTsgICAgIAorICAgICAgICByZC5pbmNsdWRlKHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9Ci0gCisKICAgICBwdWJsaWMgdm9pZCBzZXNzaW9uQ3JlYXRlZChqYWthcnRhLnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbkV2ZW50IGh0dHBTZXNzaW9uRXZlbnQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5zZXNzaW9uQ3JlYXRlZF0iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXNzaW9uRGVzdHJveWVkKGpha2FydGEuc2VydmxldC5odHRwLkh0dHBTZXNzaW9uRXZlbnQgaHR0cFNlc3Npb25FdmVudCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LnNlc3Npb25EZXN0cm95ZWRdIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQXR0cmlidXRlczogIiArIGh0dHBTZXNzaW9uRXZlbnQuZ2V0U2Vzc2lvbigpLmdldEF0dHJpYnV0ZSgidGVzdCIpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aVByb2Nlc3NvckNvbmZpZy9zZXJ2bGV0L1NlcnZsZXRUZXN0My5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpUHJvY2Vzc29yQ29uZmlnL3NlcnZsZXQvU2VydmxldFRlc3QzLmphdmEKaW5kZXggM2U4ZDI1Yi4uZTc4ZmVjMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpUHJvY2Vzc29yQ29uZmlnL3NlcnZsZXQvU2VydmxldFRlc3QzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpUHJvY2Vzc29yQ29uZmlnL3NlcnZsZXQvU2VydmxldFRlc3QzLmphdmEKQEAgLTQ2LDExICs0NiwxMSBAQAogcHVibGljIGNsYXNzIFNlcnZsZXRUZXN0MyBleHRlbmRzIEh0dHBTZXJ2bGV0ewogCiAgICAgcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQzLmluaXRdIik7ICAgICAgICAKLSAgICAgICAgY29udGV4dCA9IGNvbmZpZy5nZXRTZXJ2bGV0Q29udGV4dCgpOyAgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQzLmluaXRdIik7CisgICAgICAgIGNvbnRleHQgPSBjb25maWcuZ2V0U2VydmxldENvbnRleHQoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKQEAgLTU4LDEyICs1OCwxMiBAQAogICAgICAgICBkb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgICAgICAgIAorICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldDMuZG9Qb3N0XSIpOwotICAgICAgICAKKwogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwotICAgICAgICAKKwogICAgICAgICBvdXQucHJpbnRsbigiRklMVEVSLVJFUVVFU1Q6IiArIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLmdldEF0dHJpYnV0ZSgiRklMVEVSLVJFUVVFU1QiKSk7CiAgICAgICAgIG91dC5wcmludGxuKCJGSUxURVItRk9SV0FSRDoiICsgcmVxdWVzdC5nZXRTZXNzaW9uKCkuZ2V0QXR0cmlidXRlKCJGSUxURVItRk9SV0FSRCIpKTsKICAgICAgICAgb3V0LnByaW50bG4oIkZJTFRFUi1JTkNMVURFOiIgKyByZXF1ZXN0LmdldFNlc3Npb24oKS5nZXRBdHRyaWJ1dGUoIkZJTFRFUiIpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aVNlcnZsZXRSZXF1ZXN0cy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlTZXJ2bGV0UmVxdWVzdHMvV2ViVGVzdC5qYXZhCmluZGV4IDVmZjFmMjcuLjhlN2E1NjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aVNlcnZsZXRSZXF1ZXN0cy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpU2VydmxldFJlcXVlc3RzL1dlYlRlc3QuamF2YQpAQCAtMjIsMTAgKzIyLDEwIEBACiAKIHB1YmxpYyBjbGFzcyBXZWJUZXN0CiB7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnQgPSAwOwogICAgIHByaXZhdGUgc3RhdGljIGludCBFWFBFQ1RFRF9DT1VOVCA9IDE7Ci0gICAgCisKICAgICBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQ9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIApAQCAtMzQsNyArMzQsNyBAQAogCiAgICAgICAgIC8vIFRoZSBzdGF0IHJlcG9ydGVyIHdyaXRlcyBvdXQgdGhlIHRlc3QgaW5mbyBhbmQgcmVzdWx0cwogICAgICAgICAvLyBpbnRvIHRoZSB0b3AtbGV2ZWwgcXVpY2tsb29rIGRpcmVjdG9yeSBkdXJpbmcgYSBydW4uCi0gICAgICAKKwogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJNdWx0aSBTZXJ2bGV0IFJlcXVlc3RzIik7CiAKICAgICAgICAgU3RyaW5nIGhvc3QgPSBhcmdzWzBdOwpAQCAtNDMsNyArNDMsNyBAQAogCiAgICAgICAgIGludCBwb3J0ID0gbmV3IEludGVnZXIocG9ydFMpLmludFZhbHVlKCk7CiAgICAgICAgIFN0cmluZyBuYW1lOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgZ29HZXQoaG9zdCwgcG9ydCwgIm11bHRpU2VydmxldFJlcXVlc3RzIiwgY29udGV4dFJvb3QgKyAiL1NlcnZsZXRUZXN0IiApOwogICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdCkgewpAQCAtNTIsNyArNTIsNyBAQAogCiAgICAgICAgIGlmIChjb3VudCAhPSBFWFBFQ1RFRF9DT1VOVCl7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2ViLW11bHRpU2VydmxldFJlcXVlc3RzIiwgc3RhdC5GQUlMKTsKLSAgICAgICAgfSAgICAgICAgICAgCisgICAgICAgIH0KICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoIndlYi9tdWx0aVNlcnZsZXRSZXF1ZXN0cy0tLT4gZXhwZWN0ICIgKyBFWFBFQ1RFRF9DT1VOVCk7CiAgICAgfQogCkBAIC02OSw3ICs2OSw3IEBACiAgICAgICAgIG9zLndyaXRlKCgiR0VUICIgKyBjb250ZXh0UGF0aCArICIgSFRUUC8xLjFcbiIpLmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgoIkhvc3Q6IGxvY2FsaG9zdFxuIikuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gcy5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRpbWU6ICIgKyAoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSB0aW1lKSk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJpcyA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKQEAgLTg0LDE5ICs4NCwxOSBAQAogICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPSAtMSkgewogICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGxpbmUuaW5kZXhPZigiOjoiKTsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHN0YXR1cyA9IGxpbmUuc3Vic3RyaW5nKGluZGV4KzIpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj09PSBzdGF0dXM6ICIgKyBzdGF0dXMpOwogICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLmVxdWFsc0lnbm9yZUNhc2UoIlBBU1MiKSl7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2ViLW11bHRpU2VydmxldFJlcXVlc3RzOiAiICsgbGluZS5zdWJzdHJpbmcoMCxpbmRleCksIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2ViLW11bHRpU2VydmxldFJlcXVlc3RzOiAiICsgbGluZS5zdWJzdHJpbmcoMCxpbmRleCksIHN0YXQuRkFJTCk7ICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3ZWItbXVsdGlTZXJ2bGV0UmVxdWVzdHM6ICIgKyBsaW5lLnN1YnN0cmluZygwLGluZGV4KSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGorKzsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGV4KXsKICAgICAgICAgfQogICAgfQotICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpU2VydmxldFJlcXVlc3RzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlTZXJ2bGV0UmVxdWVzdHMvYnVpbGQucHJvcGVydGllcwppbmRleCBjZmE0YWIyLi4yNTU0ZDk3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlTZXJ2bGV0UmVxdWVzdHMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlTZXJ2bGV0UmVxdWVzdHMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTQgKzE1LDE0IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LW11bHRpU2VydmxldFJlcXVlc3RzIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1tdWx0aVNlcnZsZXRSZXF1ZXN0cyIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii93ZWItbXVsdGlTZXJ2bGV0UmVxdWVzdHMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aVNlcnZsZXRSZXF1ZXN0cy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlTZXJ2bGV0UmVxdWVzdHMvYnVpbGQueG1sCmluZGV4IGRlZWM4YTkuLmFjNDYxOTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aVNlcnZsZXRSZXF1ZXN0cy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpU2VydmxldFJlcXVlc3RzL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTYgKzQyLDE2IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTU5LDcgKzU5LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICAgIDxqYXZhYwogICAgICAgICAgICAgc3JjZGlyPSIuIgpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpU2VydmxldFJlcXVlc3RzL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aVNlcnZsZXRSZXF1ZXN0cy9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggYWMzMjc4ZS4uN2UxYTAwOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpU2VydmxldFJlcXVlc3RzL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlTZXJ2bGV0UmVxdWVzdHMvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yMiwyMyArMjIsMjMgQEAKICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiCiAgICAgICAgICB2ZXJzaW9uPSIyLjQiPgotICAgICAKKwogICAgIDxzZXJ2bGV0PgogICAgICAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXRUZXN0PC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldFRlc3QyPC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3QyPC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuU2VydmxldFRlc3QyPC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAorICAgIDwvc2VydmxldD4KICAgICA8c2VydmxldD4KICAgICAgICAgPGRpc3BsYXktbmFtZT5TZXJ2bGV0VGVzdDM8L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDM8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDM8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCi0gICAgCisgICAgPC9zZXJ2bGV0PgorCiAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vU2VydmxldFRlc3Q8L3VybC1wYXR0ZXJuPgpAQCAtNTEsNyArNTEsNyBAQAogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0Mzwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L1NlcnZsZXRUZXN0MzwvdXJsLXBhdHRlcm4+CiAgICAgPC9zZXJ2bGV0LW1hcHBpbmc+Ci0gICAgCisKICAgICA8c2Vzc2lvbi1jb25maWc+CiAgICAgICAgIDxzZXNzaW9uLXRpbWVvdXQ+MTA8L3Nlc3Npb24tdGltZW91dD4KICAgICA8L3Nlc3Npb24tY29uZmlnPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpU2VydmxldFJlcXVlc3RzL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aVNlcnZsZXRSZXF1ZXN0cy9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKaW5kZXggMDUzNWZlNC4uYmU0MTRiNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpU2VydmxldFJlcXVlc3RzL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlTZXJ2bGV0UmVxdWVzdHMvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCkBAIC0yOSwxNCArMjksMTQgQEAKIAogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwotICAgICAgICAKKwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBkb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgICAgICAgIAorICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKIApAQCAtNTEsNyArNTEsNyBAQAogICAgICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gdXJsQ29ubmVjdGlvbiA9IChIdHRwVVJMQ29ubmVjdGlvbiljb25uOwogICAgICAgICAgICAgdXJsQ29ubmVjdGlvbi5zZXREb091dHB1dCh0cnVlKTsKIAotICAgICAgICAgICAgRGF0YU91dHB1dFN0cmVhbSBkb3V0ID0gCisgICAgICAgICAgICBEYXRhT3V0cHV0U3RyZWFtIGRvdXQgPQogICAgICAgICAgICAgICAgbmV3IERhdGFPdXRwdXRTdHJlYW0odXJsQ29ubmVjdGlvbi5nZXRPdXRwdXRTdHJlYW0oKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3V0LndyaXRlQnl0ZSgxKTsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpU2VydmxldFJlcXVlc3RzL3NlcnZsZXQvU2VydmxldFRlc3QyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlTZXJ2bGV0UmVxdWVzdHMvc2VydmxldC9TZXJ2bGV0VGVzdDIuamF2YQppbmRleCA2OGQ4NzZhLi5lOTc0NWU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlTZXJ2bGV0UmVxdWVzdHMvc2VydmxldC9TZXJ2bGV0VGVzdDIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlTZXJ2bGV0UmVxdWVzdHMvc2VydmxldC9TZXJ2bGV0VGVzdDIuamF2YQpAQCAtMjksMTQgKzI5LDE0IEBACiAKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKLSAgICAgICAgCisKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7ICAgICAgICAKKyAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPT09PT09PT09PT0gSW4gU2VydmxldFRlc3QyID09PT09PT09PT09PSIpOwogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpU2VydmxldFJlcXVlc3RzL3NlcnZsZXQvU2VydmxldFRlc3QzLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlTZXJ2bGV0UmVxdWVzdHMvc2VydmxldC9TZXJ2bGV0VGVzdDMuamF2YQppbmRleCBhOTJkYWIwLi5jOWU1Yzg2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlTZXJ2bGV0UmVxdWVzdHMvc2VydmxldC9TZXJ2bGV0VGVzdDMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlTZXJ2bGV0UmVxdWVzdHMvc2VydmxldC9TZXJ2bGV0VGVzdDMuamF2YQpAQCAtMjksMTQgKzI5LDE0IEBACiAKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKLSAgICAgICAgCisKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7ICAgICAgICAKKyAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPT09PT09PT09PT09PT09PSBJbiBTZXJ2bGV0MyA9PT09PT09PT09PT09PT0iKTsKICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aWJ5dGVWYWx1ZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlieXRlVmFsdWUvV2ViVGVzdC5qYXZhCmluZGV4IDU0NDFjZGEuLmE0NTlmNjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aWJ5dGVWYWx1ZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpYnl0ZVZhbHVlL1dlYlRlc3QuamF2YQpAQCAtMjUsMTAgKzI1LDEwIEBACiAgKiBmb3J3YXJkZWQgdG8gYW5vdGhlciBzZXJ2bGV0CiAgKi8KIHB1YmxpYyBjbGFzcyBXZWJUZXN0IHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGludCBjb3VudCA9IDA7CiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IEVYUEVDVEVEX0NPVU5UID0gMjsKLSAgICAKKwogICAgIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdD0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCkBAIC00MSwxMyArNDEsMTMgQEAKIAogICAgICAgICBpbnQgcG9ydCA9IG5ldyBJbnRlZ2VyKHBvcnRTKS5pbnRWYWx1ZSgpOwogICAgICAgICBTdHJpbmcgbmFtZTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJ1bihob3N0LCBwb3J0LCBjb250ZXh0Um9vdCArICIvU2VydmxldFRlc3QiICk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKGNvdW50ICE9IEVYUEVDVEVEX0NPVU5UKXsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibXVsdGlCeXRlVmFsdWUgUE9TVCIsIHN0YXQuRkFJTCk7Ci0gICAgICAgICAgICB9ICAgICAgICAgICAKKyAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJtdWx0aUJ5dGVWYWx1ZSIsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KQEAgLTYzLDEyICs2MywxMiBAQAogICAgICAgICAgKi8KICAgICAgICAgU29ja2V0IHMgPSBuZXcgU29ja2V0KGhvc3QsIHBvcnQpOwogICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSBzLmdldE91dHB1dFN0cmVhbSgpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKCJHRVQgIiArIGNvbnRleHRQYXRoICsgIj9qX2VuY29kaW5nPVNoaWZ0X0pJUyIgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigoIkdFVCAiICsgY29udGV4dFBhdGggKyAiP2pfZW5jb2Rpbmc9U2hpZnRfSklTIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIEhUVFAvMS4wXG4iKSk7Ci0gICAgICAgIG9zLndyaXRlKCgiR0VUICIgKyBjb250ZXh0UGF0aCArICI/al9lbmNvZGluZz1TaGlmdF9KSVMiIAorICAgICAgICBvcy53cml0ZSgoIkdFVCAiICsgY29udGV4dFBhdGggKyAiP2pfZW5jb2Rpbmc9U2hpZnRfSklTIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIEhUVFAvMS4wXG4iKS5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJpcyA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKICAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOwpAQCAtNzksMTYgKzc5LDE2IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obGluZU51bSArICI6ICAiICsgbGluZSk7CiAgICAgICAgICAgICBpZiAoaW5kZXggIT0gLTEpIHsKICAgICAgICAgICAgICAgICBTdHJpbmcgc3RhdHVzID0gbGluZS5zdWJzdHJpbmcoaW5kZXgrMik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLmVxdWFsc0lnbm9yZUNhc2UoIlBBU1MiKSl7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3ZWItbXVsdGlieXRlVmFsdWUgR0VUOiAiIAorICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2ViLW11bHRpYnl0ZVZhbHVlIEdFVDogIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgbGluZS5zdWJzdHJpbmcoMCxpbmRleCksIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndlYi1tdWx0aWJ5dGVWYWx1ZSBHRVQ6ICIgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBsaW5lLnN1YnN0cmluZygwLGluZGV4KSwgc3RhdC5GQUlMKTsgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2ViLW11bHRpYnl0ZVZhbHVlIEdFVDogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgbGluZS5zdWJzdHJpbmcoMCxpbmRleCksIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICB9IAorICAgICAgICAgICAgfQogICAgICAgICAgICAgbGluZU51bSsrOwogICAgICAgICB9CiAKQEAgLTk4LDExICs5OCwxMSBAQAogICAgICAgICAvLyBDb25zdHJ1Y3QgYm9keQogICAgICAgICBTdHJpbmcgYm9keSA9IFVSTEVuY29kZXIuZW5jb2RlKCJqX2VuY29kaW5nIiwgIlVURi04IikKICAgICAgICAgICAgICsgIj0iICsgVVJMRW5jb2Rlci5lbmNvZGUoIlNoaWZ0X0pJUyIsICJVVEYtOCIpOwotICAgIAorCiAgICAgICAgIC8vIENyZWF0ZSBhIHNvY2tldCB0byB0aGUgaG9zdAogICAgICAgICBzID0gbmV3IFNvY2tldChob3N0LCBwb3J0KTsKICAgICAgICAgb3MgPSBzLmdldE91dHB1dFN0cmVhbSgpOwotICAgIAorCiAgICAgICAgIC8vIFNlbmQgaGVhZGVyCiAgICAgICAgIEJ1ZmZlcmVkV3JpdGVyIHdyID0gbmV3IEJ1ZmZlcmVkV3JpdGVyKG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIoCiAgICAgICAgICAgICBzLmdldE91dHB1dFN0cmVhbSgpLCAiVVRGOCIpKTsKQEAgLTExMCw3ICsxMTAsNyBAQAogICAgICAgICB3ci53cml0ZSgiQ29udGVudC1MZW5ndGg6ICIgKyBib2R5Lmxlbmd0aCgpICsgIlxyXG4iKTsKICAgICAgICAgd3Iud3JpdGUoIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXHJcbiIpOwogICAgICAgICB3ci53cml0ZSgiXHJcbiIpOwotICAgIAorCiAgICAgICAgIC8vIFNlbmQgYm9keQogICAgICAgICB3ci53cml0ZShib2R5KTsKICAgICAgICAgd3IuZmx1c2goKTsKQEAgLTEyNiwxOCArMTI2LDE4IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obGluZU51bSArICI6ICAiICsgbGluZSk7CiAgICAgICAgICAgICBpZiAoaW5kZXggIT0gLTEpIHsKICAgICAgICAgICAgICAgICBTdHJpbmcgc3RhdHVzID0gbGluZS5zdWJzdHJpbmcoaW5kZXgrMik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLmVxdWFsc0lnbm9yZUNhc2UoIlBBU1MiKSl7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3ZWItbXVsdGlieXRlVmFsdWUgUE9TVDogIiAKKyAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndlYi1tdWx0aWJ5dGVWYWx1ZSBQT1NUOiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBsaW5lLnN1YnN0cmluZygwLGluZGV4KSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2ViLW11bHRpYnl0ZVZhbHVlIFBPU1Q6ICIgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBsaW5lLnN1YnN0cmluZygwLGluZGV4KSwgc3RhdC5GQUlMKTsgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2ViLW11bHRpYnl0ZVZhbHVlIFBPU1Q6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGxpbmUuc3Vic3RyaW5nKDAsaW5kZXgpLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgfSAKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxpbmVOdW0rKzsKICAgICAgICAgfQogICAgfQotICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpYnl0ZVZhbHVlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlieXRlVmFsdWUvYnVpbGQucHJvcGVydGllcwppbmRleCA3NDE3ZGY4Li42NDcyYTg1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlieXRlVmFsdWUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlieXRlVmFsdWUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTQgKzE1LDE0IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LW11bHRpYnl0ZVZhbHVlIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1tdWx0aWJ5dGVWYWx1ZSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii93ZWItbXVsdGlieXRlVmFsdWUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aWJ5dGVWYWx1ZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlieXRlVmFsdWUvYnVpbGQueG1sCmluZGV4IGZhZjdmNTUuLjUxYTFjYmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aWJ5dGVWYWx1ZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpYnl0ZVZhbHVlL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTUgKzQyLDE1IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC01OCw3ICs1OCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KIAogICAgICAgICAgIDxqYXZhYwpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpYnl0ZVZhbHVlL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aWJ5dGVWYWx1ZS9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggOWQ0NDk5Zi4uMGMxNzQyMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpYnl0ZVZhbHVlL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlieXRlVmFsdWUvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yMiwxOCArMjIsMTggQEAKICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiCiAgICAgICAgICB2ZXJzaW9uPSIyLjQiPgotICAgICAKKwogICAgIDxzZXJ2bGV0PgogICAgICAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXRUZXN0PC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldFRlc3QyPC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3QyPC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuU2VydmxldFRlc3QyPC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAotICAgIAorICAgIDwvc2VydmxldD4KKwogICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L1NlcnZsZXRUZXN0PC91cmwtcGF0dGVybj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aWJ5dGVWYWx1ZS9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlieXRlVmFsdWUvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCmluZGV4IDhlZGIzYzIuLjkwMTcyN2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aWJ5dGVWYWx1ZS9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL211bHRpYnl0ZVZhbHVlL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQpAQCAtNDEsNyArNDEsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvR2V0IChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlcykKLSAgICAgICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7ICAgIAorICAgICAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgZG9Qb3N0IChyZXEscmVzKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbXVsdGlieXRlVmFsdWUvc2VydmxldC9TZXJ2bGV0VGVzdDIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aWJ5dGVWYWx1ZS9zZXJ2bGV0L1NlcnZsZXRUZXN0Mi5qYXZhCmluZGV4IGFlNjUyNzUuLjE0ZTFjZWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aWJ5dGVWYWx1ZS9zZXJ2bGV0L1NlcnZsZXRUZXN0Mi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9tdWx0aWJ5dGVWYWx1ZS9zZXJ2bGV0L1NlcnZsZXRUZXN0Mi5qYXZhCkBAIC0zMCw5ICszMCw5IEBACiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZTsKIAogcHVibGljIGNsYXNzIFNlcnZsZXRUZXN0MiBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKLSAgICAKKwogICAgIENvbGxhdG9yIGphcENvbGxhdG9yID0gQ29sbGF0b3IuZ2V0SW5zdGFuY2UoTG9jYWxlLkpBUEFORVNFKTsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvUG9zdCAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpCiAgICAgICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogCkBAIC01MSw3ICs1MSw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9HZXQgKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzKQotICAgICAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgICAgCisgICAgICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBkb1Bvc3QgKHJlcSxyZXMpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9uZXR3b3JrTGlzdGVuZXJEeW5hbWljQ29uZmlnL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9uZXR3b3JrTGlzdGVuZXJEeW5hbWljQ29uZmlnL1dlYlRlc3QuamF2YQppbmRleCAwZmFkNDJjLi4wMGI2MjU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbmV0d29ya0xpc3RlbmVyRHluYW1pY0NvbmZpZy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL25ldHdvcmtMaXN0ZW5lckR5bmFtaWNDb25maWcvV2ViVGVzdC5qYXZhCkBAIC0yMSwxNiArMjEsMTYgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLio7CiAKIHB1YmxpYyBjbGFzcyBXZWJUZXN0IHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGludCBjb3VudCA9IDA7CiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IEVYUEVDVEVEX0NPVU5UID0gMTsKLSAgICAKKwogICAgIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdD0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogICAgIHByaXZhdGUgc3RhdGljIFVSTENvbm5lY3Rpb24gY29ubiA9IG51bGw7CiAgICAgcHJpdmF0ZSBzdGF0aWMgVVJMIHVybDsKICAgICBwcml2YXRlIHN0YXRpYyBPYmplY3RPdXRwdXRTdHJlYW0gb2JqZWN0V3JpdGVyID0gbnVsbDsKLSAgICBwcml2YXRlIHN0YXRpYyBPYmplY3RJbnB1dFN0cmVhbSBvYmplY3RSZWFkZXIgPSBudWxsOyAgCisgICAgcHJpdmF0ZSBzdGF0aWMgT2JqZWN0SW5wdXRTdHJlYW0gb2JqZWN0UmVhZGVyID0gbnVsbDsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKIApAQCAtNTEsNyArNTEsNyBAQAogICAgICAgICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gdXJsQ29ubmVjdGlvbiA9IChIdHRwVVJMQ29ubmVjdGlvbiljb25uOwogICAgICAgICAgICAgICAgdXJsQ29ubmVjdGlvbi5zZXREb091dHB1dCh0cnVlKTsKICAgICAgICAgICAgICAgIGludCByZXNwb25zZUNvZGU9ICB1cmxDb25uZWN0aW9uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXNwb25zZSBjb2RlOiAiICsgcmVzcG9uc2VDb2RlICsgIiBFeHBlY3RlZCBjb2RlOiAyMDAiKTsgCisgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc3BvbnNlIGNvZGU6ICIgKyByZXNwb25zZUNvZGUgKyAiIEV4cGVjdGVkIGNvZGU6IDIwMCIpOwogICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSA9PSAyMDApewogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibmV0d29ya0xpc3RlbmVyRHluYW1pY0NvbmZpZyIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL25ldHdvcmtMaXN0ZW5lckR5bmFtaWNDb25maWcvV2ViVGVzdDIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9uZXR3b3JrTGlzdGVuZXJEeW5hbWljQ29uZmlnL1dlYlRlc3QyLmphdmEKaW5kZXggMzFkZGQzZC4uMjllNzA4ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL25ldHdvcmtMaXN0ZW5lckR5bmFtaWNDb25maWcvV2ViVGVzdDIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbmV0d29ya0xpc3RlbmVyRHluYW1pY0NvbmZpZy9XZWJUZXN0Mi5qYXZhCkBAIC0yMSwxNiArMjEsMTYgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLio7CiAKIHB1YmxpYyBjbGFzcyBXZWJUZXN0MiB7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnQgPSAwOwogICAgIHByaXZhdGUgc3RhdGljIGludCBFWFBFQ1RFRF9DT1VOVCA9IDE7Ci0gICAgCisKICAgICBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQ9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKICAgICBwcml2YXRlIHN0YXRpYyBVUkxDb25uZWN0aW9uIGNvbm4gPSBudWxsOwogICAgIHByaXZhdGUgc3RhdGljIFVSTCB1cmw7CiAgICAgcHJpdmF0ZSBzdGF0aWMgT2JqZWN0T3V0cHV0U3RyZWFtIG9iamVjdFdyaXRlciA9IG51bGw7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgT2JqZWN0SW5wdXRTdHJlYW0gb2JqZWN0UmVhZGVyID0gbnVsbDsgIAorICAgIHByaXZhdGUgc3RhdGljIE9iamVjdElucHV0U3RyZWFtIG9iamVjdFJlYWRlciA9IG51bGw7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7CiAKQEAgLTUxLDcgKzUxLDcgQEAKICAgICAgICAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIHVybENvbm5lY3Rpb24gPSAoSHR0cFVSTENvbm5lY3Rpb24pY29ubjsKICAgICAgICAgICAgICAgIHVybENvbm5lY3Rpb24uc2V0RG9PdXRwdXQodHJ1ZSk7CiAgICAgICAgICAgICAgICBpbnQgcmVzcG9uc2VDb2RlPSAgdXJsQ29ubmVjdGlvbi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzcG9uc2UgY29kZTogIiArIHJlc3BvbnNlQ29kZSArICIgRXhwZWN0ZWQgY29kZTogMjAwIik7IAorICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXNwb25zZSBjb2RlOiAiICsgcmVzcG9uc2VDb2RlICsgIiBFeHBlY3RlZCBjb2RlOiAyMDAiKTsKICAgICAgICAgICAgICAgIGlmICh1cmxDb25uZWN0aW9uLmdldFJlc3BvbnNlQ29kZSgpID09IDIwMCl7CiAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJuZXR3b3JrTGlzdGVuZXJEeW5hbWljQ29uZmlnLWFmdGVyUmVjb25mIiwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbmV0d29ya0xpc3RlbmVyRHluYW1pY0NvbmZpZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL25ldHdvcmtMaXN0ZW5lckR5bmFtaWNDb25maWcvYnVpbGQucHJvcGVydGllcwppbmRleCBhOTZkZjU1Li4xZmUyYTUzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbmV0d29ya0xpc3RlbmVyRHluYW1pY0NvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9uZXR3b3JrTGlzdGVuZXJEeW5hbWljQ29uZmlnL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE0ICsxNSwxNCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1uZXR3b3JrTGlzdGVuZXJEeW5hbWljQ29uZmlnIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1uZXR3b3JrTGlzdGVuZXJEeW5hbWljQ29uZmlnIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iLyR7YXBwbmFtZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9uZXR3b3JrTGlzdGVuZXJEeW5hbWljQ29uZmlnL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9uZXR3b3JrTGlzdGVuZXJEeW5hbWljQ29uZmlnL2J1aWxkLnhtbAppbmRleCAwZDIyYWNkLi5jMmE3OGUyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbmV0d29ya0xpc3RlbmVyRHluYW1pY0NvbmZpZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL25ldHdvcmtMaXN0ZW5lckR5bmFtaWNDb25maWcvYnVpbGQueG1sCkBAIC01MCw3ICs1MCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC01OCwxMCArNTgsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgIDxqYXZhYwpAQCAtNjksMTAgKzY5LDEwIEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iKi5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtODAsNyArODAsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuLWFnYWluIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC05Miw3ICs5Miw3IEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0MiI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC0xMDcsNyArMTA3LDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9uZXR3b3JrTGlzdGVuZXJEeW5hbWljQ29uZmlnL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9uZXR3b3JrTGlzdGVuZXJEeW5hbWljQ29uZmlnL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCBmZGIwYzE3Li5jMWQ0YmI2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbmV0d29ya0xpc3RlbmVyRHluYW1pY0NvbmZpZy9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL25ldHdvcmtMaXN0ZW5lckR5bmFtaWNDb25maWcvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yMiwxMiArMjIsMTIgQEAKICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiCiAgICAgICAgICB2ZXJzaW9uPSIyLjQiPgotICAgICAKKwogICAgIDxzZXJ2bGV0PgogICAgICAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXRUZXN0PC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vU2VydmxldFRlc3Q8L3VybC1wYXR0ZXJuPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL25ldHdvcmtMaXN0ZW5lckR5bmFtaWNDb25maWcvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL25ldHdvcmtMaXN0ZW5lckR5bmFtaWNDb25maWcvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCmluZGV4IDc4MWJjY2YuLmMwNzMyNzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9uZXR3b3JrTGlzdGVuZXJEeW5hbWljQ29uZmlnL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbmV0d29ya0xpc3RlbmVyRHluYW1pY0NvbmZpZy9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKIHB1YmxpYyBjbGFzcyBTZXJ2bGV0VGVzdCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIAogICAgIHByaXZhdGUgU2VydmxldENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwogICAgICAgICBjb250ZXh0ID0gY29uZmlnLmdldFNlcnZsZXRDb250ZXh0KCk7CkBAIC0zNCwxMiArMzQsMTIgQEAKICAgICAgICAgZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7ICAgICAgICAKKyAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuZG9Qb3N0XSIpOwotICAgICAgICAKKwogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwotICAgICAgICAJCisKICAgICAgICAgb3V0LnByaW50bG4oIlRFU1Q6OlBBU1MiKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbmV0d29ya0xpc3RlbmVyRHluYW1pY0NvbmZpZ0VuYWJsZWQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL25ldHdvcmtMaXN0ZW5lckR5bmFtaWNDb25maWdFbmFibGVkL1dlYlRlc3QuamF2YQppbmRleCAyZDFhYjAzLi5kMjcwODY1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbmV0d29ya0xpc3RlbmVyRHluYW1pY0NvbmZpZ0VuYWJsZWQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9uZXR3b3JrTGlzdGVuZXJEeW5hbWljQ29uZmlnRW5hYmxlZC9XZWJUZXN0LmphdmEKQEAgLTIxLDE2ICsyMSwxNiBAQAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuKjsKIAogcHVibGljIGNsYXNzIFdlYlRlc3QgewotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50ID0gMDsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgRVhQRUNURURfQ09VTlQgPSAxOwotICAgIAorCiAgICAgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0PQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAgICAgcHJpdmF0ZSBzdGF0aWMgVVJMQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKICAgICBwcml2YXRlIHN0YXRpYyBVUkwgdXJsOwogICAgIHByaXZhdGUgc3RhdGljIE9iamVjdE91dHB1dFN0cmVhbSBvYmplY3RXcml0ZXIgPSBudWxsOwotICAgIHByaXZhdGUgc3RhdGljIE9iamVjdElucHV0U3RyZWFtIG9iamVjdFJlYWRlciA9IG51bGw7ICAKKyAgICBwcml2YXRlIHN0YXRpYyBPYmplY3RJbnB1dFN0cmVhbSBvYmplY3RSZWFkZXIgPSBudWxsOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewogCkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiB1cmxDb25uZWN0aW9uID0gKEh0dHBVUkxDb25uZWN0aW9uKWNvbm47CiAgICAgICAgICAgICAgICB1cmxDb25uZWN0aW9uLnNldERvT3V0cHV0KHRydWUpOwogICAgICAgICAgICAgICAgaW50IHJlc3BvbnNlQ29kZT0gIHVybENvbm5lY3Rpb24uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc3BvbnNlIGNvZGU6ICIgKyByZXNwb25zZUNvZGUgKyAiIEV4cGVjdGVkIGNvZGU6IDQwNCIpOyAKKyAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzcG9uc2UgY29kZTogIiArIHJlc3BvbnNlQ29kZSArICIgRXhwZWN0ZWQgY29kZTogNDA0Iik7CiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VDb2RlID09IDIwMCl7CiAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJuZXR3b3JrTGlzdGVuZXJEeW5hbWljQ29uZmlnRW5hYmxlZCIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL25ldHdvcmtMaXN0ZW5lckR5bmFtaWNDb25maWdFbmFibGVkL1dlYlRlc3QyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbmV0d29ya0xpc3RlbmVyRHluYW1pY0NvbmZpZ0VuYWJsZWQvV2ViVGVzdDIuamF2YQppbmRleCBiNzZmNWI1Li45NTA1Y2UxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbmV0d29ya0xpc3RlbmVyRHluYW1pY0NvbmZpZ0VuYWJsZWQvV2ViVGVzdDIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbmV0d29ya0xpc3RlbmVyRHluYW1pY0NvbmZpZ0VuYWJsZWQvV2ViVGVzdDIuamF2YQpAQCAtMjEsMTYgKzIxLDE2IEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci4qOwogCiBwdWJsaWMgY2xhc3MgV2ViVGVzdDIgewotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50ID0gMDsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgRVhQRUNURURfQ09VTlQgPSAxOwotICAgIAorCiAgICAgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0PQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAgICAgcHJpdmF0ZSBzdGF0aWMgVVJMQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKICAgICBwcml2YXRlIHN0YXRpYyBVUkwgdXJsOwogICAgIHByaXZhdGUgc3RhdGljIE9iamVjdE91dHB1dFN0cmVhbSBvYmplY3RXcml0ZXIgPSBudWxsOwotICAgIHByaXZhdGUgc3RhdGljIE9iamVjdElucHV0U3RyZWFtIG9iamVjdFJlYWRlciA9IG51bGw7ICAKKyAgICBwcml2YXRlIHN0YXRpYyBPYmplY3RJbnB1dFN0cmVhbSBvYmplY3RSZWFkZXIgPSBudWxsOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewogCkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiB1cmxDb25uZWN0aW9uID0gKEh0dHBVUkxDb25uZWN0aW9uKWNvbm47CiAgICAgICAgICAgICAgICB1cmxDb25uZWN0aW9uLnNldERvT3V0cHV0KHRydWUpOwogICAgICAgICAgICAgICAgaW50IHJlc3BvbnNlQ29kZT0gIHVybENvbm5lY3Rpb24uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc3BvbnNlIGNvZGU6ICIgKyByZXNwb25zZUNvZGUgKyAiIEV4cGVjdGVkIGNvZGU6IDIwMCIpOyAKKyAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzcG9uc2UgY29kZTogIiArIHJlc3BvbnNlQ29kZSArICIgRXhwZWN0ZWQgY29kZTogMjAwIik7CiAgICAgICAgICAgICAgICBpZiAodXJsQ29ubmVjdGlvbi5nZXRSZXNwb25zZUNvZGUoKSA9PSAyMDApewogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibmV0d29ya0xpc3RlbmVyRHluYW1pY0NvbmZpZ0VuYWJsZWQtYWZ0ZXJSZWNvbmYiLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9uZXR3b3JrTGlzdGVuZXJEeW5hbWljQ29uZmlnRW5hYmxlZC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL25ldHdvcmtMaXN0ZW5lckR5bmFtaWNDb25maWdFbmFibGVkL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZWYyOWJmNy4uODkxMTJkOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL25ldHdvcmtMaXN0ZW5lckR5bmFtaWNDb25maWdFbmFibGVkL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL25ldHdvcmtMaXN0ZW5lckR5bmFtaWNDb25maWdFbmFibGVkL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE0ICsxNSwxNCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1uZXR3b3JrTGlzdGVuZXJEeW5hbWljQ29uZmlnRW5hYmxlZCIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tbmV0d29ya0xpc3RlbmVyRHluYW1pY0NvbmZpZ0VuYWJsZWQiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvJHthcHBuYW1lfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL25ldHdvcmtMaXN0ZW5lckR5bmFtaWNDb25maWdFbmFibGVkL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9uZXR3b3JrTGlzdGVuZXJEeW5hbWljQ29uZmlnRW5hYmxlZC9idWlsZC54bWwKaW5kZXggNDFmMmI4Ny4uMmI3OGYxZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL25ldHdvcmtMaXN0ZW5lckR5bmFtaWNDb25maWdFbmFibGVkL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbmV0d29ya0xpc3RlbmVyRHluYW1pY0NvbmZpZ0VuYWJsZWQvYnVpbGQueG1sCkBAIC01OCw3ICs1OCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC02NiwxMCArNjYsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgIDxqYXZhYwpAQCAtNzcsMTAgKzc3LDEwIEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iKi5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtODgsNyArODgsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC0xMDAsNyArMTAwLDcgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi1hZ2FpbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QyIj4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTExNSw3ICsxMTUsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL25ldHdvcmtMaXN0ZW5lckR5bmFtaWNDb25maWdFbmFibGVkL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9uZXR3b3JrTGlzdGVuZXJEeW5hbWljQ29uZmlnRW5hYmxlZC9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggZmRiMGMxNy4uYzFkNGJiNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL25ldHdvcmtMaXN0ZW5lckR5bmFtaWNDb25maWdFbmFibGVkL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbmV0d29ya0xpc3RlbmVyRHluYW1pY0NvbmZpZ0VuYWJsZWQvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yMiwxMiArMjIsMTIgQEAKICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiCiAgICAgICAgICB2ZXJzaW9uPSIyLjQiPgotICAgICAKKwogICAgIDxzZXJ2bGV0PgogICAgICAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXRUZXN0PC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vU2VydmxldFRlc3Q8L3VybC1wYXR0ZXJuPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL25ldHdvcmtMaXN0ZW5lckR5bmFtaWNDb25maWdFbmFibGVkL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9uZXR3b3JrTGlzdGVuZXJEeW5hbWljQ29uZmlnRW5hYmxlZC9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKaW5kZXggNzgxYmNjZi4uYzA3MzI3MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL25ldHdvcmtMaXN0ZW5lckR5bmFtaWNDb25maWdFbmFibGVkL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbmV0d29ya0xpc3RlbmVyRHluYW1pY0NvbmZpZ0VuYWJsZWQvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiBwdWJsaWMgY2xhc3MgU2VydmxldFRlc3QgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAKICAgICBwcml2YXRlIFNlcnZsZXRDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKICAgICAgICAgY29udGV4dCA9IGNvbmZpZy5nZXRTZXJ2bGV0Q29udGV4dCgpOwpAQCAtMzQsMTIgKzM0LDEyIEBACiAgICAgICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAgICAgICAgCisgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmRvUG9zdF0iKTsKLSAgICAgICAgCisKICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKLSAgICAgICAgCQorCiAgICAgICAgIG91dC5wcmludGxuKCJURVNUOjpQQVNTIik7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL25ldHdvcmtMaXN0ZW5lclRhcmdldC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbmV0d29ya0xpc3RlbmVyVGFyZ2V0L1dlYlRlc3QuamF2YQppbmRleCBkMDE5ZGMwLi4zY2ZjNGIyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbmV0d29ya0xpc3RlbmVyVGFyZ2V0L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbmV0d29ya0xpc3RlbmVyVGFyZ2V0L1dlYlRlc3QuamF2YQpAQCAtMjEsMTYgKzIxLDE2IEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci4qOwogCiBwdWJsaWMgY2xhc3MgV2ViVGVzdCB7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnQgPSAwOwogICAgIHByaXZhdGUgc3RhdGljIGludCBFWFBFQ1RFRF9DT1VOVCA9IDE7Ci0gICAgCisKICAgICBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQ9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKICAgICBwcml2YXRlIHN0YXRpYyBVUkxDb25uZWN0aW9uIGNvbm4gPSBudWxsOwogICAgIHByaXZhdGUgc3RhdGljIFVSTCB1cmw7CiAgICAgcHJpdmF0ZSBzdGF0aWMgT2JqZWN0T3V0cHV0U3RyZWFtIG9iamVjdFdyaXRlciA9IG51bGw7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgT2JqZWN0SW5wdXRTdHJlYW0gb2JqZWN0UmVhZGVyID0gbnVsbDsgIAorICAgIHByaXZhdGUgc3RhdGljIE9iamVjdElucHV0U3RyZWFtIG9iamVjdFJlYWRlciA9IG51bGw7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7CiAKQEAgLTUxLDcgKzUxLDcgQEAKICAgICAgICAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIHVybENvbm5lY3Rpb24gPSAoSHR0cFVSTENvbm5lY3Rpb24pY29ubjsKICAgICAgICAgICAgICAgIHVybENvbm5lY3Rpb24uc2V0RG9PdXRwdXQodHJ1ZSk7CiAgICAgICAgICAgICAgICBpbnQgcmVzcG9uc2VDb2RlPSAgdXJsQ29ubmVjdGlvbi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzcG9uc2UgY29kZTogIiArIHJlc3BvbnNlQ29kZSArICIgRXhwZWN0ZWQgY29kZTogMjAwIik7IAorICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXNwb25zZSBjb2RlOiAiICsgcmVzcG9uc2VDb2RlICsgIiBFeHBlY3RlZCBjb2RlOiAyMDAiKTsKICAgICAgICAgICAgICAgIGlmICh1cmxDb25uZWN0aW9uLmdldFJlc3BvbnNlQ29kZSgpICE9IDIwMCl7CiAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJuZXR3b3JrTGlzdGVuZXJUYXJnZXQiLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9uZXR3b3JrTGlzdGVuZXJUYXJnZXQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9uZXR3b3JrTGlzdGVuZXJUYXJnZXQvYnVpbGQucHJvcGVydGllcwppbmRleCAxMzQ4YzgzLi4xMTM2MDEwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbmV0d29ya0xpc3RlbmVyVGFyZ2V0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL25ldHdvcmtMaXN0ZW5lclRhcmdldC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNCArMTUsMTQgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tbmV0d29ya0xpc3RlbmVyVGFyZ2V0Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1uZXR3b3JrTGlzdGVuZXJUYXJnZXQiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvd2ViLW5ldHdvcmtMaXN0ZW5lclRhcmdldCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL25ldHdvcmtMaXN0ZW5lclRhcmdldC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbmV0d29ya0xpc3RlbmVyVGFyZ2V0L2J1aWxkLnhtbAppbmRleCA1MjkyMjA2Li5lZTM1NzIzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbmV0d29ya0xpc3RlbmVyVGFyZ2V0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbmV0d29ya0xpc3RlbmVyVGFyZ2V0L2J1aWxkLnhtbApAQCAtMjAsNyArMjAsNyBAQAogPCFET0NUWVBFIHByb2plY3QgWwogPCFFTlRJVFkgY29tbW9uU2V0dXAgU1lTVEVNICIuLy4uLy4uLy4uL2NvbmZpZy9wcm9wZXJ0aWVzLnhtbCI+CiA8IUVOVElUWSBjb21tb25CdWlsZCBTWVNURU0gIi4vLi4vLi4vLi4vY29uZmlnL2NvbW1vbi54bWwiPgotPCFFTlRJVFkgZWVDb21tb25CdWlsZCBTWVNURU0gIi4vLi4vLi4vLi4vY29uZmlnL2VlLWNvbW1vbi54bWwiPiAKKzwhRU5USVRZIGVlQ29tbW9uQnVpbGQgU1lTVEVNICIuLy4uLy4uLy4uL2NvbmZpZy9lZS1jb21tb24ueG1sIj4KIDwhRU5USVRZIHJ1biBTWVNURU0gIi4vLi4vLi4vLi4vY29uZmlnL3J1bi54bWwiPgogPCFFTlRJVFkgdGVzdHByb3BlcnRpZXMgU1lTVEVNICIuL2J1aWxkLnByb3BlcnRpZXMiPgogXT4KQEAgLTEyNCw3ICsxMjQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtMTMyLDE5ICsxMzIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgICA8amF2YWMKICAgICAgICAgICAgIHNyY2Rpcj0iLiIKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iRGVwbG95aW5nICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIgZnJvbSAke2Jhc2VkaXJ9LiIKICAgICAgICAgICAgICAgbGV2ZWw9InZlcmJvc2UiLz4KQEAgLTE3Miw3ICsxNzIsNyBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iVW5kZXBsb3lpbmcgd2FyZmlsZSAke2FwcG5hbWV9LXdlYiBmcm9tCiAgICAgICAgICAgICAke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIGZyb20gJHtiYXNlZGlyfS4iIGxldmVsPSJ2ZXJib3NlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbmV0d29ya0xpc3RlbmVyVGFyZ2V0L2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9uZXR3b3JrTGlzdGVuZXJUYXJnZXQvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IGZkYjBjMTcuLmMxZDRiYjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9uZXR3b3JrTGlzdGVuZXJUYXJnZXQvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9uZXR3b3JrTGlzdGVuZXJUYXJnZXQvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yMiwxMiArMjIsMTIgQEAKICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiCiAgICAgICAgICB2ZXJzaW9uPSIyLjQiPgotICAgICAKKwogICAgIDxzZXJ2bGV0PgogICAgICAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXRUZXN0PC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vU2VydmxldFRlc3Q8L3VybC1wYXR0ZXJuPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL25ldHdvcmtMaXN0ZW5lclRhcmdldC9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbmV0d29ya0xpc3RlbmVyVGFyZ2V0L3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQppbmRleCA3ODFiY2NmLi5jMDczMjcwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbmV0d29ya0xpc3RlbmVyVGFyZ2V0L3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvbmV0d29ya0xpc3RlbmVyVGFyZ2V0L3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogcHVibGljIGNsYXNzIFNlcnZsZXRUZXN0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewogCiAgICAgcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7CiAgICAgICAgIGNvbnRleHQgPSBjb25maWcuZ2V0U2VydmxldENvbnRleHQoKTsKQEAgLTM0LDEyICszNCwxMiBAQAogICAgICAgICBkb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgICAgICAgIAorICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5kb1Bvc3RdIik7Ci0gICAgICAgIAorCiAgICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7Ci0gICAgICAgIAkKKwogICAgICAgICBvdXQucHJpbnRsbigiVEVTVDo6UEFTUyIpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9vbmVTZXNzaW9uQ29va2llSGVhZGVyL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9vbmVTZXNzaW9uQ29va2llSGVhZGVyL1dlYlRlc3QuamF2YQppbmRleCBlOWIxMDIxLi5iNzQzZDU5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvb25lU2Vzc2lvbkNvb2tpZUhlYWRlci9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL29uZVNlc3Npb25Db29raWVIZWFkZXIvV2ViVGVzdC5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIG9uZSBzZXNzaW9uIGNvb2tpZSBoZWFkZXIiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC00Niw3ICs0Niw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFNvY2tldCBzb2NrID0gbmV3IFNvY2tldChob3N0LCBuZXcgSW50ZWdlcihwb3J0KS5pbnRWYWx1ZSgpKTsKICAgICAgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IHNvY2suZ2V0T3V0cHV0U3RyZWFtKCk7CiAgICAgICAgICAgICBTdHJpbmcgZ2V0ID0gIkdFVCAiICsgY29udGV4dFJvb3QgKyAiL2luZGV4LmpzcCBIVFRQLzEuMFxuIjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9vbmVTZXNzaW9uQ29va2llSGVhZGVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvb25lU2Vzc2lvbkNvb2tpZUhlYWRlci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDI1M2MzOTQuLmVlZDc0ZGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9vbmVTZXNzaW9uQ29va2llSGVhZGVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL29uZVNlc3Npb25Db29raWVIZWFkZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1vbmUtc2Vzc2lvbi1jb29raWUtaGVhZGVyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvb25lU2Vzc2lvbkNvb2tpZUhlYWRlci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvb25lU2Vzc2lvbkNvb2tpZUhlYWRlci9idWlsZC54bWwKaW5kZXggM2U1M2Q3ZS4uOTA4M2Q1YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL29uZVNlc3Npb25Db29raWVIZWFkZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9vbmVTZXNzaW9uQ29va2llSGVhZGVyL2J1aWxkLnhtbApAQCAtMzgsNyArMzgsNyBAQAogICAgICAgPC9kZWxldGU+CiAgICAgICA8ZGVsZXRlIGZpbGU9IlJlcFJ1bkNvbmYudHh0Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDYsMjMgKzQ2LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL29zZ2lTZXJ2bGV0L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9vc2dpU2VydmxldC9XZWJUZXN0LmphdmEKaW5kZXggY2Q5OGIxYy4uYjJkN2NlMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL29zZ2lTZXJ2bGV0L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvb3NnaVNlcnZsZXQvV2ViVGVzdC5qYXZhCkBAIC0yOSw3ICsyOSw3IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdD0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwotICAgIAorCiAgICAgcHJpdmF0ZSBTdHJpbmcgaG9zdDsKICAgICBwcml2YXRlIFN0cmluZyBwb3J0OwogICAgIHByaXZhdGUgU3RyaW5nIGNvbnRleHRSb290OwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL29zZ2lTZXJ2bGV0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvb3NnaVNlcnZsZXQvYnVpbGQucHJvcGVydGllcwppbmRleCBlOGNiZDIxLi5hMTIzNjRjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvb3NnaVNlcnZsZXQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvb3NnaVNlcnZsZXQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1vc2dpLXNlcnZsZXQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9vc2dpU2VydmxldC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvb3NnaVNlcnZsZXQvYnVpbGQueG1sCmluZGV4IDM0ZjMxZjMuLjdlZWFjZjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9vc2dpU2VydmxldC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL29zZ2lTZXJ2bGV0L2J1aWxkLnhtbApAQCAtMzgsNyArMzgsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDYsMTQgKzQ2LDE0IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgpAQCAtNzAsNyArNzAsNyBAQAogICAgICAgICAgICAgICAgdmFsdWU9Im9zZ2ktc2VydmxldCIvPgogICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC04NCw3ICs4NCw3IEBACiAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvb3NnaVNlcnZsZXQvb3NnaS1zZXJ2bGV0L3NyYy9tYWluL2phdmEvc2Fob28vb3NnaWh0dHAvdGVzdDEvQWN0aXZhdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvb3NnaVNlcnZsZXQvb3NnaS1zZXJ2bGV0L3NyYy9tYWluL2phdmEvc2Fob28vb3NnaWh0dHAvdGVzdDEvQWN0aXZhdG9yLmphdmEKaW5kZXggODkwNjEyYS4uNzgyYzNjYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL29zZ2lTZXJ2bGV0L29zZ2ktc2VydmxldC9zcmMvbWFpbi9qYXZhL3NhaG9vL29zZ2lodHRwL3Rlc3QxL0FjdGl2YXRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9vc2dpU2VydmxldC9vc2dpLXNlcnZsZXQvc3JjL21haW4vamF2YS9zYWhvby9vc2dpaHR0cC90ZXN0MS9BY3RpdmF0b3IuamF2YQpAQCAtMzAsNDMgKzMwLDQzIEBACiAKIHB1YmxpYyBjbGFzcyBBY3RpdmF0b3IgaW1wbGVtZW50cyBCdW5kbGVBY3RpdmF0b3IgewogCi0JcHJpdmF0ZSBTZXJ2aWNlVHJhY2tlciBodHRwU2VydmljZVRyYWNrZXI7Ci0JCi0JcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJaHR0cFNlcnZpY2VUcmFja2VyID0gbmV3IEh0dHBTZXJ2aWNlVHJhY2tlcihjb250ZXh0KTsKLQkJaHR0cFNlcnZpY2VUcmFja2VyLm9wZW4oKTsKLQl9CisgICAgcHJpdmF0ZSBTZXJ2aWNlVHJhY2tlciBodHRwU2VydmljZVRyYWNrZXI7CiAKLQlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWh0dHBTZXJ2aWNlVHJhY2tlci5jbG9zZSgpOwotCQlodHRwU2VydmljZVRyYWNrZXIgPSBudWxsOwotCX0KKyAgICBwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBodHRwU2VydmljZVRyYWNrZXIgPSBuZXcgSHR0cFNlcnZpY2VUcmFja2VyKGNvbnRleHQpOworICAgICAgICBodHRwU2VydmljZVRyYWNrZXIub3BlbigpOworICAgIH0KIAotCXByaXZhdGUgY2xhc3MgSHR0cFNlcnZpY2VUcmFja2VyIGV4dGVuZHMgU2VydmljZVRyYWNrZXIgeworICAgIHB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgaHR0cFNlcnZpY2VUcmFja2VyLmNsb3NlKCk7CisgICAgICAgIGh0dHBTZXJ2aWNlVHJhY2tlciA9IG51bGw7CisgICAgfQogCi0JCXB1YmxpYyBIdHRwU2VydmljZVRyYWNrZXIoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJCXN1cGVyKGNvbnRleHQsIGNvbnRleHQuY3JlYXRlRmlsdGVyKCIoJihvYmplY3RDbGFzcz0iICsgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnLm9zZ2kuc2VydmljZS5odHRwLkh0dHBTZXJ2aWNlLmNsYXNzLmdldE5hbWUoKSArIAorICAgIHByaXZhdGUgY2xhc3MgSHR0cFNlcnZpY2VUcmFja2VyIGV4dGVuZHMgU2VydmljZVRyYWNrZXIgeworCisgICAgICAgIHB1YmxpYyBIdHRwU2VydmljZVRyYWNrZXIoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIHN1cGVyKGNvbnRleHQsIGNvbnRleHQuY3JlYXRlRmlsdGVyKCIoJihvYmplY3RDbGFzcz0iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcub3NnaS5zZXJ2aWNlLmh0dHAuSHR0cFNlcnZpY2UuY2xhc3MuZ2V0TmFtZSgpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKShWaXJ0dWFsU2VydmVyPXNlcnZlcikpIiksIG51bGwpOwotCQl9CisgICAgICAgIH0KIAotCQlwdWJsaWMgT2JqZWN0IGFkZGluZ1NlcnZpY2UoU2VydmljZVJlZmVyZW5jZSByZWZlcmVuY2UpIHsKLQkJCUh0dHBTZXJ2aWNlIGh0dHBTZXJ2aWNlID0gKEh0dHBTZXJ2aWNlKSBjb250ZXh0LmdldFNlcnZpY2UocmVmZXJlbmNlKTsKLQkJCXRyeSB7CQkJCi0JCQkJaHR0cFNlcnZpY2UucmVnaXN0ZXJTZXJ2bGV0KCIvYWEvYmIiLCBuZXcgSGVsbG9Xb3JsZFNlcnZsZXQxKCksIG51bGwsIG51bGwpOwotCQkJCWh0dHBTZXJ2aWNlLnJlZ2lzdGVyU2VydmxldCgiL2FhIiwgbmV3IEhlbGxvV29ybGRTZXJ2bGV0MigpLCBudWxsLCBudWxsKTsKKyAgICAgICAgcHVibGljIE9iamVjdCBhZGRpbmdTZXJ2aWNlKFNlcnZpY2VSZWZlcmVuY2UgcmVmZXJlbmNlKSB7CisgICAgICAgICAgICBIdHRwU2VydmljZSBodHRwU2VydmljZSA9IChIdHRwU2VydmljZSkgY29udGV4dC5nZXRTZXJ2aWNlKHJlZmVyZW5jZSk7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGh0dHBTZXJ2aWNlLnJlZ2lzdGVyU2VydmxldCgiL2FhL2JiIiwgbmV3IEhlbGxvV29ybGRTZXJ2bGV0MSgpLCBudWxsLCBudWxsKTsKKyAgICAgICAgICAgICAgICBodHRwU2VydmljZS5yZWdpc3RlclNlcnZsZXQoIi9hYSIsIG5ldyBIZWxsb1dvcmxkU2VydmxldDIoKSwgbnVsbCwgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVnaXN0ZXJlZCBzZXJ2bGV0MSB3aXRoIG1hcHBpbmcgL2FhL2JiIGFuZCBzZXJ2bGV0MiB3aXRoIG1hcHBpbmcgL2FhIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cFNlcnZpY2UudW5yZWdpc3RlcigiL2FhL2JiIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5yZWdpc3RlcmVkIHNlcnZsZXQxIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3QoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0JCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCQlyZXR1cm4gaHR0cFNlcnZpY2U7Ci0JCX0JCQotCX0KKworICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGh0dHBTZXJ2aWNlOworICAgICAgICB9CisgICAgfQogCiAgICAgICAgIHZvaWQgdGVzdCgpIHsKICAgICAgICAgICAgIHRyeSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvb3NnaVNlcnZsZXQvb3NnaS1zZXJ2bGV0L3NyYy9tYWluL2phdmEvc2Fob28vb3NnaWh0dHAvdGVzdDEvSGVsbG9Xb3JsZFNlcnZsZXQxLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvb3NnaVNlcnZsZXQvb3NnaS1zZXJ2bGV0L3NyYy9tYWluL2phdmEvc2Fob28vb3NnaWh0dHAvdGVzdDEvSGVsbG9Xb3JsZFNlcnZsZXQxLmphdmEKaW5kZXggZjY1MzVlNy4uNTdjZjRmZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL29zZ2lTZXJ2bGV0L29zZ2ktc2VydmxldC9zcmMvbWFpbi9qYXZhL3NhaG9vL29zZ2lodHRwL3Rlc3QxL0hlbGxvV29ybGRTZXJ2bGV0MS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9vc2dpU2VydmxldC9vc2dpLXNlcnZsZXQvc3JjL21haW4vamF2YS9zYWhvby9vc2dpaHR0cC90ZXN0MS9IZWxsb1dvcmxkU2VydmxldDEuamF2YQpAQCAtMjYsMTAgKzI2LDEwIEBACiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZTsKIAogcHVibGljIGNsYXNzIEhlbGxvV29ybGRTZXJ2bGV0MSBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKLSAgICAgICAgCi0JcHJvdGVjdGVkIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlyZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKLQkJcmVzcC5nZXRXcml0ZXIoKS53cml0ZSgiPGh0bWw+PGJvZHk+U2VydmxldCAxIDwvYm9keT48L2h0bWw+Iik7Ci0JfQorCisgICAgcHJvdGVjdGVkIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geworICAgICAgICByZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKKyAgICAgICAgcmVzcC5nZXRXcml0ZXIoKS53cml0ZSgiPGh0bWw+PGJvZHk+U2VydmxldCAxIDwvYm9keT48L2h0bWw+Iik7CisgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvb3NnaVNlcnZsZXQvb3NnaS1zZXJ2bGV0L3NyYy9tYWluL2phdmEvc2Fob28vb3NnaWh0dHAvdGVzdDEvSGVsbG9Xb3JsZFNlcnZsZXQyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvb3NnaVNlcnZsZXQvb3NnaS1zZXJ2bGV0L3NyYy9tYWluL2phdmEvc2Fob28vb3NnaWh0dHAvdGVzdDEvSGVsbG9Xb3JsZFNlcnZsZXQyLmphdmEKaW5kZXggNTU0OTlmOS4uYThhNjFlYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL29zZ2lTZXJ2bGV0L29zZ2ktc2VydmxldC9zcmMvbWFpbi9qYXZhL3NhaG9vL29zZ2lodHRwL3Rlc3QxL0hlbGxvV29ybGRTZXJ2bGV0Mi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9vc2dpU2VydmxldC9vc2dpLXNlcnZsZXQvc3JjL21haW4vamF2YS9zYWhvby9vc2dpaHR0cC90ZXN0MS9IZWxsb1dvcmxkU2VydmxldDIuamF2YQpAQCAtMjcsOSArMjcsOSBAQAogCiBwdWJsaWMgY2xhc3MgSGVsbG9Xb3JsZFNlcnZsZXQyIGV4dGVuZHMgSHR0cFNlcnZsZXQgewogCi0JcHJvdGVjdGVkIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geworICAgIHByb3RlY3RlZCB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgICAgICAgICByZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgICAgICAgICByZXNwLmdldFdyaXRlcigpLndyaXRlKCI8aHRtbD48Ym9keT5TZXJ2bGV0IDIgPC9ib2R5PjwvaHRtbD4iKTsKLQl9CisgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvb3ZlcnJpZGVJbXBsaWNpdE1hcHBpbmcvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL292ZXJyaWRlSW1wbGljaXRNYXBwaW5nL1dlYlRlc3QuamF2YQppbmRleCAyMGU2ODg3Li5kMTkxMDdkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvb3ZlcnJpZGVJbXBsaWNpdE1hcHBpbmcvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9vdmVycmlkZUltcGxpY2l0TWFwcGluZy9XZWJUZXN0LmphdmEKQEAgLTQwLDE2ICs0MCwxNiBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBpc3N1ZSA4NjQ4Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwogICAgICAgICB3ZWJUZXN0LmRvVGVzdCgpOwotCSAgICBzdGF0LnByaW50U3VtbWFyeSgpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgCisKICAgICAgICAgdHJ5IHsKIAogICAgICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvb3ZlcnJpZGVJbXBsaWNpdE1hcHBpbmcvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9vdmVycmlkZUltcGxpY2l0TWFwcGluZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDI5MTE3ZDEuLjM5ODQ0MGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9vdmVycmlkZUltcGxpY2l0TWFwcGluZy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9vdmVycmlkZUltcGxpY2l0TWFwcGluZy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LW92ZXJyaWRlLWltcGxpY2l0LW1hcHBpbmciLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9vdmVycmlkZUltcGxpY2l0TWFwcGluZy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvb3ZlcnJpZGVJbXBsaWNpdE1hcHBpbmcvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9vdmVycmlkZUltcGxpY2l0TWFwcGluZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL292ZXJyaWRlSW1wbGljaXRNYXBwaW5nL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9waXBlbGluZVF1ZXVlRnVsbC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcGlwZWxpbmVRdWV1ZUZ1bGwvV2ViVGVzdC5qYXZhCmluZGV4IDI5MzkxYWEuLmNjNWY1ZDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9waXBlbGluZVF1ZXVlRnVsbC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3BpcGVsaW5lUXVldWVGdWxsL1dlYlRlc3QuamF2YQpAQCAtMjUsMTYgKzI1LDE2IEBACiAgKiAoIk5QRSBXaGVuIHN0cmVzc2luZyBHbGFzc0Zpc2ggYW5kIHRoZSBQaXBlbGluZSBRdWV1ZSBpcyBmdWxsIikKICAqLwogcHVibGljIGNsYXNzIFdlYlRlc3QgewotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50ID0gMDsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgRVhQRUNURURfQ09VTlQgPSAxOwotICAgIAorCiAgICAgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0PQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAgICAgcHJpdmF0ZSBzdGF0aWMgVVJMQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKICAgICBwcml2YXRlIHN0YXRpYyBVUkwgdXJsOwogICAgIHByaXZhdGUgc3RhdGljIE9iamVjdE91dHB1dFN0cmVhbSBvYmplY3RXcml0ZXIgPSBudWxsOwotICAgIHByaXZhdGUgc3RhdGljIE9iamVjdElucHV0U3RyZWFtIG9iamVjdFJlYWRlciA9IG51bGw7ICAKKyAgICBwcml2YXRlIHN0YXRpYyBPYmplY3RJbnB1dFN0cmVhbSBvYmplY3RSZWFkZXIgPSBudWxsOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewogCkBAIC01NSw3ICs1NSw3IEBACiAgICAgICAgICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiB1cmxDb25uZWN0aW9uID0gKEh0dHBVUkxDb25uZWN0aW9uKWNvbm47CiAgICAgICAgICAgICAgICB1cmxDb25uZWN0aW9uLnNldERvT3V0cHV0KHRydWUpOwogICAgICAgICAgICAgICAgaW50IHJlc3BvbnNlQ29kZT0gIHVybENvbm5lY3Rpb24uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc3BvbnNlIGNvZGU6ICIgKyByZXNwb25zZUNvZGUgKyAiIEV4cGVjdGVkIGNvZGU6IDUwMyIpOyAKKyAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzcG9uc2UgY29kZTogIiArIHJlc3BvbnNlQ29kZSArICIgRXhwZWN0ZWQgY29kZTogNTAzIik7CiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDUwMyl7CiAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJwaXBlbGluZVF1ZXVlRnVsbCIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3BpcGVsaW5lUXVldWVGdWxsL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcGlwZWxpbmVRdWV1ZUZ1bGwvYnVpbGQucHJvcGVydGllcwppbmRleCBkZjE5ZTRlLi5kYjEyNDY5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcGlwZWxpbmVRdWV1ZUZ1bGwvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcGlwZWxpbmVRdWV1ZUZ1bGwvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTQgKzE1LDE0IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXBpcGVsaW5lUXVldWVGdWxsIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1waXBlbGluZVF1ZXVlRnVsbCIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii93ZWItcGlwZWxpbmVRdWV1ZUZ1bGwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9waXBlbGluZVF1ZXVlRnVsbC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcGlwZWxpbmVRdWV1ZUZ1bGwvYnVpbGQueG1sCmluZGV4IGZiNjI3YmUuLjFhY2NjN2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9waXBlbGluZVF1ZXVlRnVsbC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3BpcGVsaW5lUXVldWVGdWxsL2J1aWxkLnhtbApAQCAtNjIsNyArNjIsNyBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3BvcnRVbmlmaWNhdGlvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3BvcnRVbmlmaWNhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGNlMDQwYTkuLjQ1YTUxOWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9wb3J0VW5pZmljYXRpb24vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcG9ydFVuaWZpY2F0aW9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tcG9ydHVuaWYiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9wb3J0VW5pZmljYXRpb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3BvcnRVbmlmaWNhdGlvbi9idWlsZC54bWwKaW5kZXggZTc5YzJlMS4uMDBjZDJiZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3BvcnRVbmlmaWNhdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3BvcnRVbmlmaWNhdGlvbi9idWlsZC54bWwKQEAgLTMwLDcgKzMwLDcgQEAKICAgICAmY29tbW9uQnVpbGQ7CiAgICAgJnRlc3Rwcm9wZXJ0aWVzOwogICAgICZydW47Ci0gICAgCisKICAgICA8aW1wb3J0IGZpbGU9Ii4uL3JlcG9ydGJ1aWxkZXIueG1sIi8+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImphciIgZGVwZW5kcz0iYnVpbGQiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3BvcnRVbmlmaWNhdGlvblRhcmdldC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3BvcnRVbmlmaWNhdGlvblRhcmdldC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGJiMTgzMmEuLjFkZDYyZmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9wb3J0VW5pZmljYXRpb25UYXJnZXQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcG9ydFVuaWZpY2F0aW9uVGFyZ2V0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tcG9ydHVuaWYtdGFyZ2V0Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcG9ydFVuaWZpY2F0aW9uVGFyZ2V0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9wb3J0VW5pZmljYXRpb25UYXJnZXQvYnVpbGQueG1sCmluZGV4IDNhYTE3YmUuLjNiY2QwNTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9wb3J0VW5pZmljYXRpb25UYXJnZXQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9wb3J0VW5pZmljYXRpb25UYXJnZXQvYnVpbGQueG1sCkBAIC0zMiw3ICszMiw3IEBACiAgICAgJmVlQ29tbW9uQnVpbGQ7CiAgICAgJnRlc3Rwcm9wZXJ0aWVzOwogICAgICZydW47Ci0gICAgCisKICAgICA8aW1wb3J0IGZpbGU9Ii4uL3JlcG9ydGJ1aWxkZXIueG1sIi8+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImphciIgZGVwZW5kcz0iYnVpbGQiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Byb2dyYW1tYXRpY0xvZ2luL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9wcm9ncmFtbWF0aWNMb2dpbi9XZWJUZXN0LmphdmEKaW5kZXggNTMxZThlMi4uZjgyZDJhMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Byb2dyYW1tYXRpY0xvZ2luL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcHJvZ3JhbW1hdGljTG9naW4vV2ViVGVzdC5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiAgKiByZWdyZXNzaW9uIG9uIEFTOCIpCiAgKi8KIHB1YmxpYyBjbGFzcyBXZWJUZXN0IHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX05BTUUgPSAicHJvZ3JhbW1hdGljLWxvZ2luIjsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KQEAgLTQ3LDExICs0NywxMSBAQAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIDQ4NjIwOTgiKTsKLSAgICAgICAgCisKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICB3ZWJUZXN0Lmludm9rZSgpOyAgICAgICAgICAgIAorICAgICAgICAgICAgd2ViVGVzdC5pbnZva2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKQEAgLTc3LDUgKzc3LDUgQEAKICAgICAgICAgICAgICAgICAiLCByZWNlaXZlZDogIiArIHJlc3BvbnNlQ29kZSk7CiAgICAgICAgIH0KICAgIH0KLSAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9wcm9ncmFtbWF0aWNMb2dpbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Byb2dyYW1tYXRpY0xvZ2luL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYTAyZmNhOC4uNjA4MDczOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Byb2dyYW1tYXRpY0xvZ2luL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Byb2dyYW1tYXRpY0xvZ2luL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDExICsxNSwxMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1wcm9ncmFtbWF0aWMtbG9naW4iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXByb2dyYW1tYXRpYy1sb2dpbiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii93ZWItcHJvZ3JhbW1hdGljLWxvZ2luIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcHJvZ3JhbW1hdGljTG9naW4vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Byb2dyYW1tYXRpY0xvZ2luL2J1aWxkLnhtbAppbmRleCAxZGRiOTQwLi5kMzE5MTJjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcHJvZ3JhbW1hdGljTG9naW4vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9wcm9ncmFtbWF0aWNMb2dpbi9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDEwICs0NCwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgIDxqYXZhYwpAQCAtNTUsNyArNTUsNyBAQAogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIApAQCAtNjYsMTEgKzY2LDExIEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZ3JvdXBzIiB2YWx1ZT0idGVzdGdyb3VwMSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwLXBvbGljeSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICA8bW92ZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvJHthZG1pbi5kb21haW59L2NvbmZpZy9zZXJ2ZXIucG9saWN5IiAKKyAgICAgICAgPG1vdmUgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zLyR7YWRtaW4uZG9tYWlufS9jb25maWcvc2VydmVyLnBvbGljeSIKICAgICAgICAgICAgICAgdG9maWxlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvJHthZG1pbi5kb21haW59L2NvbmZpZy9zZXJ2ZXIucG9saWN5LlNBVkUiLz4KLSAgICAgICAgPGNvcHkgZmlsZT0ic2VydmVyLnBvbGljeSIgCisgICAgICAgIDxjb3B5IGZpbGU9InNlcnZlci5wb2xpY3kiCiAgICAgICAgICAgICAgIHRvZmlsZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zLyR7YWRtaW4uZG9tYWlufS9jb25maWcvc2VydmVyLnBvbGljeSIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQtc2VydmVyLWluc3RhbmNlLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtODIsNyArODIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC05NiwxOSArOTYsMTkgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZW1vdmUtdXNlciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS11c2VyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0idXNlciIgdmFsdWU9InRlc3R1c2VyMyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RvcmUtcG9saWN5IiBkZXBlbmRzPSJzZXR1cC1wb2xpY3kiPgotICAgICAgICA8bW92ZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvJHthZG1pbi5kb21haW59L2NvbmZpZy9zZXJ2ZXIucG9saWN5LlNBVkUiIAorICAgICAgICA8bW92ZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvJHthZG1pbi5kb21haW59L2NvbmZpZy9zZXJ2ZXIucG9saWN5LlNBVkUiCiAgICAgICAgICAgICAgIHRvZmlsZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zLyR7YWRtaW4uZG9tYWlufS9jb25maWcvc2VydmVyLnBvbGljeSIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQtc2VydmVyLWluc3RhbmNlLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Byb2dyYW1tYXRpY0xvZ2luL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9wcm9ncmFtbWF0aWNMb2dpbi9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggZDVmOGI1ZS4uMmIwMWNhZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Byb2dyYW1tYXRpY0xvZ2luL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcHJvZ3JhbW1hdGljTG9naW4vZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yNyw3ICsyNyw3IEBACiAgICAgICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldFRlc3Q8L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0PC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAorICAgIDwvc2VydmxldD4KIAogICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9wcm9ncmFtbWF0aWNMb2dpbi9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcHJvZ3JhbW1hdGljTG9naW4vc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCmluZGV4IDhiYjdiOTguLjQzNTk5ODQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9wcm9ncmFtbWF0aWNMb2dpbi9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Byb2dyYW1tYXRpY0xvZ2luL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQpAQCAtMjksNyArMjksNyBAQAogICAgICAgICAgICAgICAgICAgICAgIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCiAgICAgICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBTdHJpbmcgdXNlciA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJ1c2VyIik7Ci0gICAgICAgIFN0cmluZyBwYXNzd29yZCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJwYXNzd29yZCIpOyAKKyAgICAgICAgU3RyaW5nIHBhc3N3b3JkID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoInBhc3N3b3JkIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW3VzZXJdICIgKyB1c2VyICsgIiBbcGFzc3dvcmRdICIgKyBwYXNzd29yZCk7CiAgICAgICAgIFByb2dyYW1tYXRpY0xvZ2luIGxvZ2luID0gbmV3IFByb2dyYW1tYXRpY0xvZ2luKCk7CiAgICAgICAgIGlmICghbG9naW4ubG9naW4odXNlciwgcGFzc3dvcmQsIHJlcXVlc3QsIHJlc3BvbnNlKS5ib29sZWFuVmFsdWUoKSkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Byb3h5QXV0aENlcnQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Byb3h5QXV0aENlcnQvV2ViVGVzdC5qYXZhCmluZGV4IDAyZTg2ZGIuLjQ1ZjVhNzEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9wcm94eUF1dGhDZXJ0L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcHJveHlBdXRoQ2VydC9XZWJUZXN0LmphdmEKQEAgLTY2LDcgKzY2LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgNjE4ODkzMiIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTc1LDggKzc1LDggQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgIAotICAgICAgICB0cnkgeyAKKworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Byb3h5QXV0aENlcnQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9wcm94eUF1dGhDZXJ0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNGUwYTgwMy4uYmE5YWM0ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Byb3h5QXV0aENlcnQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcHJveHlBdXRoQ2VydC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXByb3h5LWF1dGgtY2VydCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Byb3h5QXV0aENlcnQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Byb3h5QXV0aENlcnQvYnVpbGQueG1sCmluZGV4IGZmYjY2NTcuLmRmMmY4OGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9wcm94eUF1dGhDZXJ0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcHJveHlBdXRoQ2VydC9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDE4ICs0NCwxOCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIgLz4KQEAgLTcxLDcgKzcxLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtODMsMTAgKzgzLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVzdG9yZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9wcm94eUtleXNpemUvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Byb3h5S2V5c2l6ZS9XZWJUZXN0LmphdmEKaW5kZXggMGFkMjExZS4uMGQ5NzAyMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Byb3h5S2V5c2l6ZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Byb3h5S2V5c2l6ZS9XZWJUZXN0LmphdmEKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgNjE3MDQ1MCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTUwLDggKzUwLDggQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgIAotICAgICAgICB0cnkgeyAKKworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlSnNwKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwpAQCAtNjAsNyArNjAsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2VKc3AoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgIAorCiAgICAgICAgIFNvY2tldCBzb2NrID0gbnVsbDsKICAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gbnVsbDsKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBudWxsOwpAQCAtNzQsNyArNzQsNyBAQAogICAgICAgICAgICAgb3Mud3JpdGUoZ2V0LmdldEJ5dGVzKCkpOwogICAgICAgICAgICAgb3Mud3JpdGUoIlByb3h5LWtleXNpemU6IDUxMlxuIi5nZXRCeXRlcygpKTsKICAgICAgICAgICAgIG9zLndyaXRlKCJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgICAgICBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgICAgIGJpcyA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Byb3h5S2V5c2l6ZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Byb3h5S2V5c2l6ZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGJjNDJlMTIuLmMzOWVmZDAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9wcm94eUtleXNpemUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcHJveHlLZXlzaXplL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tcHJveHkta2V5c2l6ZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Byb3h5S2V5c2l6ZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcHJveHlLZXlzaXplL2J1aWxkLnhtbAppbmRleCBmZmI2NjU3Li5kZjJmODhhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcHJveHlLZXlzaXplL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcHJveHlLZXlzaXplL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMTggKzQ0LDE4IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0IiAvPgpAQCAtNzEsNyArNzEsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC04MywxMCArODMsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0b3JlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3F1ZXJ5U3RyaW5nL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9xdWVyeVN0cmluZy9XZWJUZXN0LmphdmEKaW5kZXggOTVjMThlYy4uMzdjODhmOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3F1ZXJ5U3RyaW5nL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcXVlcnlTdHJpbmcvV2ViVGVzdC5qYXZhCkBAIC0zNSwxMiArMzUsMTIgQEAKIAogICAgICAgICBpbnQgcG9ydCA9IG5ldyBJbnRlZ2VyKHBvcnRTKS5pbnRWYWx1ZSgpOwogICAgICAgICBTdHJpbmcgbmFtZTsKLSAgICAgICAgCisKICAgICAgICAgZ29HZXQoaG9zdCwgcG9ydCwgIlRFU1QiLCBjb250ZXh0Um9vdCArICIvU2VydmxldFRlc3QiICk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBnb0dldChTdHJpbmcgaG9zdCwgaW50IHBvcnQsIAorICAgIHByaXZhdGUgc3RhdGljIHZvaWQgZ29HZXQoU3RyaW5nIGhvc3QsIGludCBwb3J0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJlc3VsdCwgU3RyaW5nIGNvbnRleHRQYXRoKSB7CiAKICAgICAgICAgdHJ5ewpAQCAtNDgsMTMgKzQ4LDEzIEBACiAgICAgICAgICAgICBTb2NrZXQgcyA9IG5ldyBTb2NrZXQoaG9zdCwgcG9ydCk7CiAgICAgICAgICAgICBzLnNldFNvVGltZW91dCg1MDAwKTsKICAgICAgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IHMuZ2V0T3V0cHV0U3RyZWFtKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgY29udGV4dFBhdGggKz0gIj91cmw9IiArIGNvbnRleHRQYXRoOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCgiR0VUICIgKyBjb250ZXh0UGF0aCArICIgSFRUUC8xLjFcbiIpKTsKICAgICAgICAgICAgIG9zLndyaXRlKCgiR0VUICIgKyBjb250ZXh0UGF0aCArICIgSFRUUC8xLjFcbiIpLmdldEJ5dGVzKCkpOwogICAgICAgICAgICAgb3Mud3JpdGUoIkhvc3Q6IGxvY2FsaG9zdFxuIi5nZXRCeXRlcygpKTsKICAgICAgICAgICAgIG9zLndyaXRlKCJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRpbWU6ICIgKyAoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSB0aW1lKSk7CiAgICAgICAgICAgICBCdWZmZXJlZFJlYWRlciBiaXMgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CkBAIC02NCwxNiArNjQsMTYgQEAKICAgICAgICAgICAgIHdoaWxlICgobGluZSA9IGJpcy5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgaW5kZXggPSBsaW5lLmluZGV4T2YocmVzdWx0KTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2ZXIgcmVzcG9uc2VdIiArIGxpbmUpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgaW50IHBvcyA9IGxpbmUuaW5kZXhPZigiTG9jYXRpb24iKTsKICAgICAgICAgICAgICAgICBpZiAocG9zICE9IC0xKXsKICAgICAgICAgICAgICAgICAgICBjb250ZXh0UGF0aCA9IGxpbmUuc3Vic3RyaW5nKHBvcyArICJMb2NhdGlvbjoiLmxlbmd0aCgpKS50cmltKCk7CiAgICAgICAgICAgICAgICAgICAgYmlzLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgICAgaXMuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICAgICBicmVhazsgCisgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIHMgPSBuZXcgU29ja2V0KGhvc3QsIHBvcnQpOwogICAgICAgICAgICAgb3MgPSBzLmdldE91dHB1dFN0cmVhbSgpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCgiR0VUICIgKyBjb250ZXh0UGF0aCArICIgSFRUUC8xLjFcbiIpKTsKQEAgLTg1LDIxICs4NSwyMSBAQAogICAgICAgICAgICAgd2hpbGUgKChsaW5lID0gYmlzLnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBpbmRleCA9IGxpbmUuaW5kZXhPZihyZXN1bHQpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1JlZGlyZWN0IHJlc3BvbnNlXSIgKyBsaW5lKTsKLSAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gbGluZS5pbmRleE9mKCI6Iik7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBzdGF0dXMgPSBsaW5lLnN1YnN0cmluZyhpbmRleCsxKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5lcXVhbHNJZ25vcmVDYXNlKCJQQVNTIikpewogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOyAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGV4KXsKLSAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7ICAgCisgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiVEVTVF9OQU1FIiwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3F1ZXJ5U3RyaW5nL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcXVlcnlTdHJpbmcvYnVpbGQucHJvcGVydGllcwppbmRleCA3ZDJiNGZmLi4xN2FmNGQwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcXVlcnlTdHJpbmcvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcXVlcnlTdHJpbmcvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTQgKzE1LDE0IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXF1ZXJ5U3RyaW5nIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1xdWVyeVN0cmluZyIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii93ZWItcXVlcnlTdHJpbmciLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9xdWVyeVN0cmluZy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcXVlcnlTdHJpbmcvYnVpbGQueG1sCmluZGV4IDg3ZGJkNGMuLjVhMWYwYzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9xdWVyeVN0cmluZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3F1ZXJ5U3RyaW5nL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTAgKzQyLDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCkBAIC01MywxMCArNTMsMTAgQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02NCw3ICs2NCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9xdWVyeVN0cmluZy9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcXVlcnlTdHJpbmcvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDNkZmY5Y2IuLjRlYzYyZmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9xdWVyeVN0cmluZy9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3F1ZXJ5U3RyaW5nL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjIsMTggKzIyLDE4IEBACiAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIgogICAgICAgICAgdmVyc2lvbj0iMi40Ij4KLSAgICAgCisKICAgICA8c2VydmxldD4KICAgICAgICAgPGRpc3BsYXktbmFtZT5TZXJ2bGV0VGVzdDwvZGlzcGxheS1uYW1lPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuU2VydmxldFRlc3Q8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCi0gICAgCisgICAgPC9zZXJ2bGV0PgorCiAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vU2VydmxldFRlc3Q8L3VybC1wYXR0ZXJuPgogICAgIDwvc2VydmxldC1tYXBwaW5nPgotICAgIAorCiAgICAgPHNlc3Npb24tY29uZmlnPgogICAgICAgICA8c2Vzc2lvbi10aW1lb3V0PjEwPC9zZXNzaW9uLXRpbWVvdXQ+CiAgICAgPC9zZXNzaW9uLWNvbmZpZz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9xdWVyeVN0cmluZy9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcXVlcnlTdHJpbmcvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCmluZGV4IGU0OTI4OWYuLjA3NGNkNWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9xdWVyeVN0cmluZy9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3F1ZXJ5U3RyaW5nL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQpAQCAtMjUsMTMgKzI1LDEzIEBACiBwdWJsaWMgY2xhc3MgU2VydmxldFRlc3QgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1JlZGlyZWN0ZWQgPSBmYWxzZTsKICAgICBwcml2YXRlIFNlcnZsZXRDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5pbml0XSIpOyAgICAgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuaW5pdF0iKTsKICAgICAgICAgY29udGV4dCA9IGNvbmZpZy5nZXRTZXJ2bGV0Q29udGV4dCgpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmluaXRdICIgKyBjb250ZXh0LmdldE1ham9yVmVyc2lvbigpKTsKLSAgICAgICAgCisKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKQEAgLTM5LDE0ICszOSwxNCBAQAogICAgICAgICBkb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgICAgICAgIAorICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5kb1Bvc3RdIik7Ci0gICAgICAgIAorCiAgICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7CiAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJyZXF1ZXN0VXJpOiAiICsgcmVxdWVzdC5nZXRSZXF1ZXN0VVJJKCkpOwotICAgICAgIAorCiAgICAgICAgIGlmICghaXNSZWRpcmVjdGVkKXsKICAgICAgICAgICAgIFN0cmluZyB1cmwgPSByZXF1ZXN0LmdldFBhcmFtZXRlcigidXJsIikgKyAiP1RFU1Q9UEFTUyI7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltVUkxdICIgKyB1cmwpOwpAQCAtNTYsNyArNTYsNyBAQAogICAgICAgICAgICAgb3V0LmZsdXNoKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAKKwogICAgICAgICBvdXQucHJpbnRsbigiVEVTVDoiICsgcmVxdWVzdC5nZXRQYXJhbWV0ZXIoIlRFU1QiKSk7CiAgICAgICAgIG91dC5mbHVzaCgpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkTGluZUlPRXhjZXB0aW9uL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkTGluZUlPRXhjZXB0aW9uL1dlYlRlc3QuamF2YQppbmRleCBlYWFlMjA2Li44MWIyNzVlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZExpbmVJT0V4Y2VwdGlvbi9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRMaW5lSU9FeGNlcHRpb24vV2ViVGVzdC5qYXZhCkBAIC0yMSwyMiArMjEsMjIgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLio7CiAKIHB1YmxpYyBjbGFzcyBXZWJUZXN0IHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGludCBjb3VudCA9IDA7CiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IEVYUEVDVEVEX0NPVU5UID0gMTsKLSAgICAKKwogICAgIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdD0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgLyoqCi0gICAgICogRml4IGZvciBCdWd6aWxsYSBCdWcgMjg5NTkgSU9FeGNlcHRpb24gdXNpbmcgQ295b3RlUmVhZGVyLnJlYWRMaW5lKCkgCisgICAgICogRml4IGZvciBCdWd6aWxsYSBCdWcgMjg5NTkgSU9FeGNlcHRpb24gdXNpbmcgQ295b3RlUmVhZGVyLnJlYWRMaW5lKCkKICAgICAgKiBidXQgbm90IHVzaW5nIC5yZWFkKCkKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7CiAKICAgICAgICAgLy8gVGhlIHN0YXQgcmVwb3J0ZXIgd3JpdGVzIG91dCB0aGUgdGVzdCBpbmZvIGFuZCByZXN1bHRzCiAgICAgICAgIC8vIGludG8gdGhlIHRvcC1sZXZlbCBxdWlja2xvb2sgZGlyZWN0b3J5IGR1cmluZyBhIHJ1bi4KLSAgICAgIAorCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlN0YW5kYWxvbmUgdGVzdCBmb3IgQnVnemlsbGEgMjg5NTkiKTsKIAogICAgICAgICBTdHJpbmcgaG9zdCA9IGFyZ3NbMF07CkBAIC00NSwxMyArNDUsMTMgQEAKIAogICAgICAgICBpbnQgcG9ydCA9IG5ldyBJbnRlZ2VyKHBvcnRTKS5pbnRWYWx1ZSgpOwogICAgICAgICBTdHJpbmcgbmFtZTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGdvR2V0KGhvc3QsIHBvcnQsICJyZWFkbGluZSIsIGNvbnRleHRSb290ICsgIi9TZXJ2bGV0VGVzdDIiICk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKGNvdW50ICE9IEVYUEVDVEVEX0NPVU5UKXsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygicmVhZExpbmVJT0V4Y2VwdGlvbiBVTlBSRURJQ1RFRC1GQUlMVVJFIiwgc3RhdC5GQUlMKTsKLSAgICAgICAgICAgIH0gICAgICAgICAgIAorICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHQuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJyZWFkTGluZUlPRXhjZXB0aW9uIFVOUFJFRElDVEVELUZBSUxVUkUiLCBzdGF0LkZBSUwpOwpAQCAtNzAsNyArNzAsNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKCJHRVQgIiArIGNvbnRleHRQYXRoICsgIiBIVFRQLzEuMFxuIikpOwogICAgICAgICBvcy53cml0ZSgoIkdFVCAiICsgY29udGV4dFBhdGggKyAiIEhUVFAvMS4wXG4iKS5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJpcyA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKICAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOwpAQCAtODIsMjQgKzgyLDI0IEBACiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGxpbmVOdW0gKyAiOiAgIiArIGxpbmUpOwogICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPSAtMSkgewogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgc3RhdHVzID0gbGluZS5zdWJzdHJpbmcoaW5kZXgrMik7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMuZXF1YWxzSWdub3JlQ2FzZSgiUEFTU0VEIikpewogICAgICAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICAgICAgfSAKLSAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGxpbmVOdW0rKzsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKGNvdW50ID09IDEwKXsKLSAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2ViLXJlYWRMaW5lSU9FeGNlcHRpb246IHJlYWRMaW5lIiAKKyAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2ViLXJlYWRMaW5lSU9FeGNlcHRpb246IHJlYWRMaW5lIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndlYi1yZWFkTGluZUlPRXhjZXB0aW9uOiByZWFkTGluZSAiIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBzdGF0LkZBSUwpOyAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndlYi1yZWFkTGluZUlPRXhjZXB0aW9uOiByZWFkTGluZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGNvdW50ID0gMTsKICAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGV4KXsKLSAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOyAgIAorICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICB9CiAgICB9Ci0gIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZExpbmVJT0V4Y2VwdGlvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRMaW5lSU9FeGNlcHRpb24vYnVpbGQucHJvcGVydGllcwppbmRleCA3YTNmMzNjLi44OWNhZGQ0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZExpbmVJT0V4Y2VwdGlvbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkTGluZUlPRXhjZXB0aW9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE0ICsxNSwxNCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1yZWFkTGluZUlPRXhjZXB0aW9uIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1yZWFkTGluZUlPRXhjZXB0aW9uIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iL3dlYi1yZWFkTGluZUlPRXhjZXB0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZExpbmVJT0V4Y2VwdGlvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZExpbmVJT0V4Y2VwdGlvbi9idWlsZC54bWwKaW5kZXggY2Y5M2ZhNC4uMjgyNzVhOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRMaW5lSU9FeGNlcHRpb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkTGluZUlPRXhjZXB0aW9uL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTAgKzQyLDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCkBAIC01MywxMCArNTMsMTAgQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02NCw3ICs2NCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkTGluZVdpdGhNYXhMZW5ndGgvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRMaW5lV2l0aE1heExlbmd0aC9XZWJUZXN0LmphdmEKaW5kZXggYmQ5OWQ5MC4uNTY3MDdmYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRMaW5lV2l0aE1heExlbmd0aC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRMaW5lV2l0aE1heExlbmd0aC9XZWJUZXN0LmphdmEKQEAgLTQzLDcgKzQzLDcgQEAKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgICAgICBsZW5ndGggPSBJbnRlZ2VyLnBhcnNlSW50KGFyZ3NbM10pOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciByZWFkTGluZSB3aXRoIG1heCBsZW5ndGgiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZExpbmVXaXRoTWF4TGVuZ3RoL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZExpbmVXaXRoTWF4TGVuZ3RoL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMDBiMWI4OS4uNjQxZmMyZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRMaW5lV2l0aE1heExlbmd0aC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkTGluZVdpdGhNYXhMZW5ndGgvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1yZWFkTGluZS13aXRoLW1heC1sZW5ndGgiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkTGluZVdpdGhNYXhMZW5ndGgvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRMaW5lV2l0aE1heExlbmd0aC9idWlsZC54bWwKaW5kZXggOGJhYmNiYS4uZGQ0MjA5NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRMaW5lV2l0aE1heExlbmd0aC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRMaW5lV2l0aE1heExlbmd0aC9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDIyICs0NCwyMiBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MiwxMCArNzIsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZGVyU2VsZWN0b3JzQ29uZmlnL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkZXJTZWxlY3RvcnNDb25maWcvV2ViVGVzdC5qYXZhCmluZGV4IDNmMGJmYjEuLjdjYzU3NzUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkZXJTZWxlY3RvcnNDb25maWcvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkZXJTZWxlY3RvcnNDb25maWcvV2ViVGVzdC5qYXZhCkBAIC0yMiwxMCArMjIsMTAgQEAKIAogcHVibGljIGNsYXNzIFdlYlRlc3QKIHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGludCBjb3VudCA9IDA7CiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IEVYUEVDVEVEX0NPVU5UID0gMzsKLSAgICAKKwogICAgIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdD0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCkBAIC0zNCw3ICszNCw3IEBACiAKICAgICAgICAgLy8gVGhlIHN0YXQgcmVwb3J0ZXIgd3JpdGVzIG91dCB0aGUgdGVzdCBpbmZvIGFuZCByZXN1bHRzCiAgICAgICAgIC8vIGludG8gdGhlIHRvcC1sZXZlbCBxdWlja2xvb2sgZGlyZWN0b3J5IGR1cmluZyBhIHJ1bi4KLSAgICAgIAorCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oImh0dHAtbGlzdGVuZXIgcmVhZGVyLXRocmVhZHMgdW5pdCB0ZXN0cy4iKTsKIAogICAgICAgICBTdHJpbmcgaG9zdCA9IGFyZ3NbMF07CkBAIC00Myw3ICs0Myw3IEBACiAKICAgICAgICAgaW50IHBvcnQgPSBuZXcgSW50ZWdlcihwb3J0UykuaW50VmFsdWUoKTsKICAgICAgICAgU3RyaW5nIG5hbWU7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBnb0dldChob3N0LCBwb3J0LCAiRklMVEVSIiwgY29udGV4dFJvb3QgKyAiL1NlcnZsZXRUZXN0IiApOwogICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdCkgewpAQCAtNTIsNyArNTIsNyBAQAogCiAgICAgICAgIGlmIChjb3VudCAhPSBFWFBFQ1RFRF9DT1VOVCl7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2ViLXJlYWRlclNlbGVjdG9yc0NvbmZpZyIsIHN0YXQuRkFJTCk7Ci0gICAgICAgIH0gICAgICAgICAgIAorICAgICAgICB9CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3ZWIvc3RhbmRhbG9uZXdhci0tLT4gZXhwZWN0ICIgKyBFWFBFQ1RFRF9DT1VOVCk7CiAgICAgfQogCkBAIC02OSw3ICs2OSw3IEBACiAgICAgICAgIG9zLndyaXRlKCgiR0VUICIgKyBjb250ZXh0UGF0aCArICIgSFRUUC8xLjFcbiIpLmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgoIkhvc3Q6IGxvY2FsaG9zdFxuIikuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gcy5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRpbWU6ICIgKyAoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSB0aW1lKSk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJpcyA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKQEAgLTgzLDE3ICs4MywxNyBAQAogICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPSAtMSkgewogICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGxpbmUuaW5kZXhPZigiOiIpOwogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgc3RhdHVzID0gbGluZS5zdWJzdHJpbmcoaW5kZXgrMSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMuZXF1YWxzSWdub3JlQ2FzZSgiUEFTUyIpKXsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3ZWItcmVhZGVyU2VsZWN0b3JzQ29uZmlnOiAiICsgbGluZS5zdWJzdHJpbmcoMCxpbmRleCksIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2ViLXJlYWRlclNlbGVjdG9yc0NvbmZpZzogIiArIGxpbmUuc3Vic3RyaW5nKDAsaW5kZXgpLCBzdGF0LkZBSUwpOyAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2ViLXJlYWRlclNlbGVjdG9yc0NvbmZpZzogIiArIGxpbmUuc3Vic3RyaW5nKDAsaW5kZXgpLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBleCl7CiAgICAgICAgIH0KICAgIH0KLSAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkZXJTZWxlY3RvcnNDb25maWcvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkZXJTZWxlY3RvcnNDb25maWcvYnVpbGQucHJvcGVydGllcwppbmRleCAxMTA1MWNiLi4yZWJhOGMxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZGVyU2VsZWN0b3JzQ29uZmlnL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRlclNlbGVjdG9yc0NvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNCArMTUsMTQgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tcmVhZGVyU2VsZWN0b3JzQ29uZmlnIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1yZWFkZXJTZWxlY3RvcnNDb25maWciLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvd2ViLXJlYWRlclNlbGVjdG9yc0NvbmZpZyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRlclNlbGVjdG9yc0NvbmZpZy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZGVyU2VsZWN0b3JzQ29uZmlnL2J1aWxkLnhtbAppbmRleCAwYTk5NzI2Li4zYmRjNzEyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZGVyU2VsZWN0b3JzQ29uZmlnL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZGVyU2VsZWN0b3JzQ29uZmlnL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNjAsMTAgKzYwLDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCkBAIC03MSwxMCArNzEsMTAgQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC04Miw3ICs4Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTk0LDEwICs5NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkZXJTZWxlY3RvcnNDb25maWcvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRlclNlbGVjdG9yc0NvbmZpZy9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggZjk4NjFkZi4uMWY4NGNlZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRlclNlbGVjdG9yc0NvbmZpZy9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRlclNlbGVjdG9yc0NvbmZpZy9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTIyLDM3ICsyMiwzNyBAQAogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCIKICAgICAgICAgIHZlcnNpb249IjIuNCI+Ci0gICAgIAorCiAgICAgPGZpbHRlcj4KICAgICAgICAgPGZpbHRlci1uYW1lPkZpbHRlclRlc3Q8L2ZpbHRlci1uYW1lPgogICAgICAgICA8ZmlsdGVyLWNsYXNzPnRlc3QuRmlsdGVyVGVzdDwvZmlsdGVyLWNsYXNzPgotICAgIDwvZmlsdGVyPiAgICAKLSAgICAgICAgCisgICAgPC9maWx0ZXI+CisKICAgICA8ZmlsdGVyLW1hcHBpbmc+CiAgICAgICAgIDxmaWx0ZXItbmFtZT5GaWx0ZXJUZXN0PC9maWx0ZXItbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi8qPC91cmwtcGF0dGVybj4KICAgICAgICAgPGRpc3BhdGNoZXI+UkVRVUVTVDwvZGlzcGF0Y2hlcj4KICAgICAgICAgPGRpc3BhdGNoZXI+SU5DTFVERTwvZGlzcGF0Y2hlcj4KLSAgICAgICAgPGRpc3BhdGNoZXI+Rk9SV0FSRDwvZGlzcGF0Y2hlcj4gIAotICAgICAgICA8ZGlzcGF0Y2hlcj5FUlJPUjwvZGlzcGF0Y2hlcj4gCisgICAgICAgIDxkaXNwYXRjaGVyPkZPUldBUkQ8L2Rpc3BhdGNoZXI+CisgICAgICAgIDxkaXNwYXRjaGVyPkVSUk9SPC9kaXNwYXRjaGVyPgogICAgIDwvZmlsdGVyLW1hcHBpbmc+Ci0gICAgCisKICAgICA8c2VydmxldD4KICAgICAgICAgPGRpc3BsYXktbmFtZT5TZXJ2bGV0VGVzdDwvZGlzcGxheS1uYW1lPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuU2VydmxldFRlc3Q8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCisgICAgPC9zZXJ2bGV0PgogICAgIDxzZXJ2bGV0PgogICAgICAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXRUZXN0MjwvZGlzcGxheS1uYW1lPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0Mjwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0Mjwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldFRlc3QzPC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3QzPC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuU2VydmxldFRlc3QzPC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAotICAgIAorICAgIDwvc2VydmxldD4KKwogICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L1NlcnZsZXRUZXN0PC91cmwtcGF0dGVybj4KQEAgLTY1LDcgKzY1LDcgQEAKICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDM8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi9TZXJ2bGV0VGVzdDM8L3VybC1wYXR0ZXJuPgogICAgIDwvc2VydmxldC1tYXBwaW5nPgotICAgIAorCiAgICAgPHNlc3Npb24tY29uZmlnPgogICAgICAgICA8c2Vzc2lvbi10aW1lb3V0PjEwPC9zZXNzaW9uLXRpbWVvdXQ+CiAgICAgPC9zZXNzaW9uLWNvbmZpZz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkZXJTZWxlY3RvcnNDb25maWcvc2VydmxldC9GaWx0ZXJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZGVyU2VsZWN0b3JzQ29uZmlnL3NlcnZsZXQvRmlsdGVyVGVzdC5qYXZhCmluZGV4IGZjZjM2MjQuLmVlYzk1N2UgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkZXJTZWxlY3RvcnNDb25maWcvc2VydmxldC9GaWx0ZXJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRlclNlbGVjdG9yc0NvbmZpZy9zZXJ2bGV0L0ZpbHRlclRlc3QuamF2YQpAQCAtMTksMjUgKzE5LDI1IEBACiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lio7CiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuKjsKIHB1YmxpYyBjbGFzcyBGaWx0ZXJUZXN0IGltcGxlbWVudHMgRmlsdGVyewotICAgIAorCiAgICAgcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbRmlsdGVyLmRlc3Ryb3ldIik7Ci0gICAgfSAgICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgdm9pZCBkb0ZpbHRlcihTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UsIEZpbHRlckNoYWluIGZpbHRlckNoYWluKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiwgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltGaWx0ZXIuZG9GaWx0ZXJdIik7Ci0gICAgICAgICAgCisKICAgICAgICAgKChIdHRwU2VydmxldFJlcXVlc3QpcmVxdWVzdCkuZ2V0U2Vzc2lvbigpLnNldEF0dHJpYnV0ZSgiRklMVEVSIiwgIlBBU1MiKTsKICAgICAgICAgZmlsdGVyQ2hhaW4uZG9GaWx0ZXIocmVxdWVzdCwgcmVzcG9uc2UpOwotICAgICAgICAKLSAgICB9ICAgIAotICAgIAotICAgIAorCisgICAgfQorCisKICAgICBwdWJsaWMgdm9pZCBpbml0KGpha2FydGEuc2VydmxldC5GaWx0ZXJDb25maWcgZmlsdGVyQ29uZmlnKSB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltGaWx0ZXIuaW5pdF0iKTsKICAgICAgICAgY29udGV4dCA9IGZpbHRlckNvbmZpZy5nZXRTZXJ2bGV0Q29udGV4dCgpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRlclNlbGVjdG9yc0NvbmZpZy9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZGVyU2VsZWN0b3JzQ29uZmlnL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQppbmRleCBkNGEzMTc0Li5kYWE4MDUzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZGVyU2VsZWN0b3JzQ29uZmlnL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZGVyU2VsZWN0b3JzQ29uZmlnL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQpAQCAtNDYsMTMgKzQ2LDEzIEBACiBwdWJsaWMgY2xhc3MgU2VydmxldFRlc3QgZXh0ZW5kcyBIdHRwU2VydmxldCBpbXBsZW1lbnRzIEh0dHBTZXNzaW9uTGlzdGVuZXIgewogCiAgICAgcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuaW5pdF0iKTsgICAgICAgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmluaXRdIik7CiAgICAgICAgIGNvbnRleHQgPSBjb25maWcuZ2V0U2VydmxldENvbnRleHQoKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5pbml0XSAiICsgY29udGV4dC5nZXRNYWpvclZlcnNpb24oKSk7Ci0gICAgICAgIAorCiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CkBAIC02MCwyMyArNjAsMjMgQEAKICAgICAgICAgZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7ICAgICAgICAKKyAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuZG9Qb3N0XSIpOwotICAgICAgICAKKwogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwotICAgICAgICAKKwogICAgICAgICByZXF1ZXN0LmdldFNlc3Npb24oKS5zZXRBdHRyaWJ1dGUoIkZJTFRFUi1SRVFVRVNUIiwgcmVxdWVzdC5nZXRTZXNzaW9uKCkuZ2V0QXR0cmlidXRlKCJGSUxURVIiKSk7Ci0gICAgICAgIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLnNldEF0dHJpYnV0ZSgiRklMVEVSIiwgIkZBSUwiKTsgICAgICAgIAotICAgICAgICAJCisgICAgICAgIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLnNldEF0dHJpYnV0ZSgiRklMVEVSIiwgIkZBSUwiKTsKKwogICAgICAgICBSZXF1ZXN0RGlzcGF0Y2hlciByZCA9IGNvbnRleHQuZ2V0UmVxdWVzdERpc3BhdGNoZXIoIi9TZXJ2bGV0VGVzdDIiKTsKLSAgICAgICAgcmQuZm9yd2FyZChyZXF1ZXN0LCByZXNwb25zZSk7ICAgICAgIAorICAgICAgICByZC5mb3J3YXJkKHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXNzaW9uQ3JlYXRlZChqYWthcnRhLnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbkV2ZW50IGh0dHBTZXNzaW9uRXZlbnQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5zZXNzaW9uQ3JlYXRlZF0iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXNzaW9uRGVzdHJveWVkKGpha2FydGEuc2VydmxldC5odHRwLkh0dHBTZXNzaW9uRXZlbnQgaHR0cFNlc3Npb25FdmVudCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LnNlc3Npb25EZXN0cm95ZWRdIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQXR0cmlidXRlczogIiArIGh0dHBTZXNzaW9uRXZlbnQuZ2V0U2Vzc2lvbigpLmdldEF0dHJpYnV0ZSgidGVzdCIpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkZXJTZWxlY3RvcnNDb25maWcvc2VydmxldC9TZXJ2bGV0VGVzdDIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkZXJTZWxlY3RvcnNDb25maWcvc2VydmxldC9TZXJ2bGV0VGVzdDIuamF2YQppbmRleCBkYjJjYjUwLi4wMDc3NWE2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZGVyU2VsZWN0b3JzQ29uZmlnL3NlcnZsZXQvU2VydmxldFRlc3QyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRlclNlbGVjdG9yc0NvbmZpZy9zZXJ2bGV0L1NlcnZsZXRUZXN0Mi5qYXZhCkBAIC0yNSwxMCArMjUsMTAgQEAKIHB1YmxpYyBjbGFzcyBTZXJ2bGV0VGVzdDIgZXh0ZW5kcyBIdHRwU2VydmxldCBpbXBsZW1lbnRzIEh0dHBTZXNzaW9uTGlzdGVuZXIgewogCiAgICAgcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQyLmluaXRdIik7ICAgICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldDIuaW5pdF0iKTsKICAgICAgICAgY29udGV4dCA9IGNvbmZpZy5nZXRTZXJ2bGV0Q29udGV4dCgpOwogICAgIH0KIApAQCAtMzcsMjMgKzM3LDIzIEBACiAgICAgICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAgICAgICAgCisgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0Mi5kb1Bvc3RdIik7Ci0gICAgICAKKwogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwotICAgICAgICAKKwogICAgICAgICByZXF1ZXN0LmdldFNlc3Npb24oKS5zZXRBdHRyaWJ1dGUoIkZJTFRFUi1GT1JXQVJEIixyZXF1ZXN0LmdldFNlc3Npb24oKS5nZXRBdHRyaWJ1dGUoIkZJTFRFUiIpKTsKLSAgICAgICAgcmVxdWVzdC5nZXRTZXNzaW9uKCkuc2V0QXR0cmlidXRlKCJGSUxURVIiLCAiRkFJTCIpOyAgICAgICAgCi0gICAgICAgIAorICAgICAgICByZXF1ZXN0LmdldFNlc3Npb24oKS5zZXRBdHRyaWJ1dGUoIkZJTFRFUiIsICJGQUlMIik7CisKICAgICAgICAgUmVxdWVzdERpc3BhdGNoZXIgcmQgPSByZXF1ZXN0LmdldFJlcXVlc3REaXNwYXRjaGVyKCIvU2VydmxldFRlc3QzIik7Ci0gICAgICAgIHJkLmluY2x1ZGUocmVxdWVzdCwgcmVzcG9uc2UpOyAgICAgCisgICAgICAgIHJkLmluY2x1ZGUocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KLSAKKwogICAgIHB1YmxpYyB2b2lkIHNlc3Npb25DcmVhdGVkKGpha2FydGEuc2VydmxldC5odHRwLkh0dHBTZXNzaW9uRXZlbnQgaHR0cFNlc3Npb25FdmVudCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LnNlc3Npb25DcmVhdGVkXSIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlc3Npb25EZXN0cm95ZWQoamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb25FdmVudCBodHRwU2Vzc2lvbkV2ZW50KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuc2Vzc2lvbkRlc3Ryb3llZF0iKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBdHRyaWJ1dGVzOiAiICsgaHR0cFNlc3Npb25FdmVudC5nZXRTZXNzaW9uKCkuZ2V0QXR0cmlidXRlKCJ0ZXN0IikpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRlclNlbGVjdG9yc0NvbmZpZy9zZXJ2bGV0L1NlcnZsZXRUZXN0My5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRlclNlbGVjdG9yc0NvbmZpZy9zZXJ2bGV0L1NlcnZsZXRUZXN0My5qYXZhCmluZGV4IDNlOGQyNWIuLmU3OGZlYzIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkZXJTZWxlY3RvcnNDb25maWcvc2VydmxldC9TZXJ2bGV0VGVzdDMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZGVyU2VsZWN0b3JzQ29uZmlnL3NlcnZsZXQvU2VydmxldFRlc3QzLmphdmEKQEAgLTQ2LDExICs0NiwxMSBAQAogcHVibGljIGNsYXNzIFNlcnZsZXRUZXN0MyBleHRlbmRzIEh0dHBTZXJ2bGV0ewogCiAgICAgcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQzLmluaXRdIik7ICAgICAgICAKLSAgICAgICAgY29udGV4dCA9IGNvbmZpZy5nZXRTZXJ2bGV0Q29udGV4dCgpOyAgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQzLmluaXRdIik7CisgICAgICAgIGNvbnRleHQgPSBjb25maWcuZ2V0U2VydmxldENvbnRleHQoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKQEAgLTU4LDEyICs1OCwxMiBAQAogICAgICAgICBkb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgICAgICAgIAorICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldDMuZG9Qb3N0XSIpOwotICAgICAgICAKKwogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwotICAgICAgICAKKwogICAgICAgICBvdXQucHJpbnRsbigiRklMVEVSLVJFUVVFU1Q6IiArIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLmdldEF0dHJpYnV0ZSgiRklMVEVSLVJFUVVFU1QiKSk7CiAgICAgICAgIG91dC5wcmludGxuKCJGSUxURVItRk9SV0FSRDoiICsgcmVxdWVzdC5nZXRTZXNzaW9uKCkuZ2V0QXR0cmlidXRlKCJGSUxURVItRk9SV0FSRCIpKTsKICAgICAgICAgb3V0LnByaW50bG4oIkZJTFRFUi1JTkNMVURFOiIgKyByZXF1ZXN0LmdldFNlc3Npb24oKS5nZXRBdHRyaWJ1dGUoIkZJTFRFUiIpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkZXJTZWxlY3RvcnNDb25maWcvc2VydmxldC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZGVyU2VsZWN0b3JzQ29uZmlnL3NlcnZsZXQvV2ViVGVzdC5qYXZhCmluZGV4IDgzNWQ1NmUuLmUzYzdjN2UgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkZXJTZWxlY3RvcnNDb25maWcvc2VydmxldC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRlclNlbGVjdG9yc0NvbmZpZy9zZXJ2bGV0L1dlYlRlc3QuamF2YQpAQCAtMjIsMTAgKzIyLDEwIEBACiAKIHB1YmxpYyBjbGFzcyBXZWJUZXN0CiB7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnQgPSAwOwogICAgIHByaXZhdGUgc3RhdGljIGludCBFWFBFQ1RFRF9DT1VOVCA9IDM7Ci0gICAgCisKICAgICBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQ9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIApAQCAtMzQsNyArMzQsNyBAQAogCiAgICAgICAgIC8vIFRoZSBzdGF0IHJlcG9ydGVyIHdyaXRlcyBvdXQgdGhlIHRlc3QgaW5mbyBhbmQgcmVzdWx0cwogICAgICAgICAvLyBpbnRvIHRoZSB0b3AtbGV2ZWwgcXVpY2tsb29rIGRpcmVjdG9yeSBkdXJpbmcgYSBydW4uCi0gICAgICAKKwogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJodHRwLWxpc3RlbmVyIHJlYWRlci10aHJlYWRzIHVuaXQgdGVzdHMuIik7CiAKICAgICAgICAgU3RyaW5nIGhvc3QgPSBhcmdzWzBdOwpAQCAtNDMsNyArNDMsNyBAQAogCiAgICAgICAgIGludCBwb3J0ID0gbmV3IEludGVnZXIocG9ydFMpLmludFZhbHVlKCk7CiAgICAgICAgIFN0cmluZyBuYW1lOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgZ29HZXQoaG9zdCwgcG9ydCwgIkZJTFRFUiIsIGNvbnRleHRSb290ICsgIi9TZXJ2bGV0VGVzdCIgKTsKICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKQEAgLTUyLDcgKzUyLDcgQEAKIAogICAgICAgICBpZiAoY291bnQgIT0gRVhQRUNURURfQ09VTlQpewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndlYi1yZWFkZXJUaHJlYWRzQ29uZmlnIiwgc3RhdC5GQUlMKTsKLSAgICAgICAgfSAgICAgICAgICAgCisgICAgICAgIH0KICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoIndlYi9zdGFuZGFsb25ld2FyLS0tPiBleHBlY3QgIiArIEVYUEVDVEVEX0NPVU5UKTsKICAgICB9CiAKQEAgLTY4LDcgKzY4LDcgQEAKICAgICAgICAgb3Mud3JpdGUoKCJHRVQgIiArIGNvbnRleHRQYXRoICsgIiBIVFRQLzEuMVxuIikuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCgiSG9zdDogbG9jYWxob3N0XG4iKS5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGltZTogIiArIChTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIHRpbWUpKTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYmlzID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwpAQCAtODIsMTcgKzgyLDE3IEBACiAgICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gbGluZS5pbmRleE9mKCI6Iik7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBzdGF0dXMgPSBsaW5lLnN1YnN0cmluZyhpbmRleCsxKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5lcXVhbHNJZ25vcmVDYXNlKCJQQVNTIikpewogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndlYi1yZWFkZXJUaHJlYWRzQ29uZmlnOiAiICsgbGluZS5zdWJzdHJpbmcoMCxpbmRleCksIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2ViLXJlYWRlclRocmVhZHNDb25maWc6ICIgKyBsaW5lLnN1YnN0cmluZygwLGluZGV4KSwgc3RhdC5GQUlMKTsgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndlYi1yZWFkZXJUaHJlYWRzQ29uZmlnOiAiICsgbGluZS5zdWJzdHJpbmcoMCxpbmRleCksIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGV4KXsKICAgICAgICAgfQogICAgfQotICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRlclRocmVhZHNDb25maWcvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRlclRocmVhZHNDb25maWcvV2ViVGVzdC5qYXZhCmluZGV4IGE5MDRkMDAuLjc3MGE1MmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkZXJUaHJlYWRzQ29uZmlnL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZGVyVGhyZWFkc0NvbmZpZy9XZWJUZXN0LmphdmEKQEAgLTIyLDEwICsyMiwxMCBAQAogCiBwdWJsaWMgY2xhc3MgV2ViVGVzdAogewotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50ID0gMDsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgRVhQRUNURURfQ09VTlQgPSAzOwotICAgIAorCiAgICAgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0PQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKQEAgLTM0LDcgKzM0LDcgQEAKIAogICAgICAgICAvLyBUaGUgc3RhdCByZXBvcnRlciB3cml0ZXMgb3V0IHRoZSB0ZXN0IGluZm8gYW5kIHJlc3VsdHMKICAgICAgICAgLy8gaW50byB0aGUgdG9wLWxldmVsIHF1aWNrbG9vayBkaXJlY3RvcnkgZHVyaW5nIGEgcnVuLgotICAgICAgCisKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiaHR0cC1saXN0ZW5lciByZWFkZXItdGhyZWFkcyB1bml0IHRlc3RzLiIpOwogCiAgICAgICAgIFN0cmluZyBob3N0ID0gYXJnc1swXTsKQEAgLTQzLDcgKzQzLDcgQEAKIAogICAgICAgICBpbnQgcG9ydCA9IG5ldyBJbnRlZ2VyKHBvcnRTKS5pbnRWYWx1ZSgpOwogICAgICAgICBTdHJpbmcgbmFtZTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGdvR2V0KGhvc3QsIHBvcnQsICJGSUxURVIiLCBjb250ZXh0Um9vdCArICIvU2VydmxldFRlc3QiICk7CiAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0KSB7CkBAIC01Miw3ICs1Miw3IEBACiAKICAgICAgICAgaWYgKGNvdW50ICE9IEVYUEVDVEVEX0NPVU5UKXsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3ZWItcmVhZGVyVGhyZWFkc0NvbmZpZyIsIHN0YXQuRkFJTCk7Ci0gICAgICAgIH0gICAgICAgICAgIAorICAgICAgICB9CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3ZWIvc3RhbmRhbG9uZXdhci0tLT4gZXhwZWN0ICIgKyBFWFBFQ1RFRF9DT1VOVCk7CiAgICAgfQogCkBAIC02OSw3ICs2OSw3IEBACiAgICAgICAgIG9zLndyaXRlKCgiR0VUICIgKyBjb250ZXh0UGF0aCArICIgSFRUUC8xLjFcbiIpLmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgoIkhvc3Q6IGxvY2FsaG9zdFxuIikuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gcy5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRpbWU6ICIgKyAoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSB0aW1lKSk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJpcyA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKQEAgLTgzLDE3ICs4MywxNyBAQAogICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPSAtMSkgewogICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGxpbmUuaW5kZXhPZigiOiIpOwogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgc3RhdHVzID0gbGluZS5zdWJzdHJpbmcoaW5kZXgrMSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMuZXF1YWxzSWdub3JlQ2FzZSgiUEFTUyIpKXsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3ZWItcmVhZGVyVGhyZWFkc0NvbmZpZzogIiArIGxpbmUuc3Vic3RyaW5nKDAsaW5kZXgpLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndlYi1yZWFkZXJUaHJlYWRzQ29uZmlnOiAiICsgbGluZS5zdWJzdHJpbmcoMCxpbmRleCksIHN0YXQuRkFJTCk7ICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3ZWItcmVhZGVyVGhyZWFkc0NvbmZpZzogIiArIGxpbmUuc3Vic3RyaW5nKDAsaW5kZXgpLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBleCl7CiAgICAgICAgIH0KICAgIH0KLSAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkZXJUaHJlYWRzQ29uZmlnL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZGVyVGhyZWFkc0NvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDNmOGI3ODYuLjlmYzFlOTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkZXJUaHJlYWRzQ29uZmlnL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRlclRocmVhZHNDb25maWcvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTQgKzE1LDE0IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXJlYWRlclRocmVhZHNDb25maWciLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXJlYWRlclRocmVhZHNDb25maWciLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvd2ViLXJlYWRlclRocmVhZHNDb25maWciLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkZXJUaHJlYWRzQ29uZmlnL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkZXJUaHJlYWRzQ29uZmlnL2J1aWxkLnhtbAppbmRleCAwYTk5NzI2Li4zYmRjNzEyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZGVyVGhyZWFkc0NvbmZpZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRlclRocmVhZHNDb25maWcvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC02MCwxMCArNjAsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTcxLDEwICs3MSwxMCBAQAogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTgyLDcgKzgyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtOTQsMTAgKzk0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRlclRocmVhZHNDb25maWcvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRlclRocmVhZHNDb25maWcvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IGY5ODYxZGYuLjFmODRjZWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkZXJUaHJlYWRzQ29uZmlnL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZGVyVGhyZWFkc0NvbmZpZy9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTIyLDM3ICsyMiwzNyBAQAogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCIKICAgICAgICAgIHZlcnNpb249IjIuNCI+Ci0gICAgIAorCiAgICAgPGZpbHRlcj4KICAgICAgICAgPGZpbHRlci1uYW1lPkZpbHRlclRlc3Q8L2ZpbHRlci1uYW1lPgogICAgICAgICA8ZmlsdGVyLWNsYXNzPnRlc3QuRmlsdGVyVGVzdDwvZmlsdGVyLWNsYXNzPgotICAgIDwvZmlsdGVyPiAgICAKLSAgICAgICAgCisgICAgPC9maWx0ZXI+CisKICAgICA8ZmlsdGVyLW1hcHBpbmc+CiAgICAgICAgIDxmaWx0ZXItbmFtZT5GaWx0ZXJUZXN0PC9maWx0ZXItbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi8qPC91cmwtcGF0dGVybj4KICAgICAgICAgPGRpc3BhdGNoZXI+UkVRVUVTVDwvZGlzcGF0Y2hlcj4KICAgICAgICAgPGRpc3BhdGNoZXI+SU5DTFVERTwvZGlzcGF0Y2hlcj4KLSAgICAgICAgPGRpc3BhdGNoZXI+Rk9SV0FSRDwvZGlzcGF0Y2hlcj4gIAotICAgICAgICA8ZGlzcGF0Y2hlcj5FUlJPUjwvZGlzcGF0Y2hlcj4gCisgICAgICAgIDxkaXNwYXRjaGVyPkZPUldBUkQ8L2Rpc3BhdGNoZXI+CisgICAgICAgIDxkaXNwYXRjaGVyPkVSUk9SPC9kaXNwYXRjaGVyPgogICAgIDwvZmlsdGVyLW1hcHBpbmc+Ci0gICAgCisKICAgICA8c2VydmxldD4KICAgICAgICAgPGRpc3BsYXktbmFtZT5TZXJ2bGV0VGVzdDwvZGlzcGxheS1uYW1lPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuU2VydmxldFRlc3Q8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCisgICAgPC9zZXJ2bGV0PgogICAgIDxzZXJ2bGV0PgogICAgICAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXRUZXN0MjwvZGlzcGxheS1uYW1lPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0Mjwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0Mjwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldFRlc3QzPC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3QzPC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuU2VydmxldFRlc3QzPC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAotICAgIAorICAgIDwvc2VydmxldD4KKwogICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L1NlcnZsZXRUZXN0PC91cmwtcGF0dGVybj4KQEAgLTY1LDcgKzY1LDcgQEAKICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDM8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi9TZXJ2bGV0VGVzdDM8L3VybC1wYXR0ZXJuPgogICAgIDwvc2VydmxldC1tYXBwaW5nPgotICAgIAorCiAgICAgPHNlc3Npb24tY29uZmlnPgogICAgICAgICA8c2Vzc2lvbi10aW1lb3V0PjEwPC9zZXNzaW9uLXRpbWVvdXQ+CiAgICAgPC9zZXNzaW9uLWNvbmZpZz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkZXJUaHJlYWRzQ29uZmlnL3NlcnZsZXQvRmlsdGVyVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRlclRocmVhZHNDb25maWcvc2VydmxldC9GaWx0ZXJUZXN0LmphdmEKaW5kZXggZmNmMzYyNC4uZWVjOTU3ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRlclRocmVhZHNDb25maWcvc2VydmxldC9GaWx0ZXJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRlclRocmVhZHNDb25maWcvc2VydmxldC9GaWx0ZXJUZXN0LmphdmEKQEAgLTE5LDI1ICsxOSwyNSBAQAogaW1wb3J0IGpha2FydGEuc2VydmxldC4qOwogaW1wb3J0IGpha2FydGEuc2VydmxldC5odHRwLio7CiBwdWJsaWMgY2xhc3MgRmlsdGVyVGVzdCBpbXBsZW1lbnRzIEZpbHRlcnsKLSAgICAKKwogICAgIHByaXZhdGUgU2VydmxldENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW0ZpbHRlci5kZXN0cm95XSIpOwotICAgIH0gICAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIHZvaWQgZG9GaWx0ZXIoU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlLCBGaWx0ZXJDaGFpbiBmaWx0ZXJDaGFpbikgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24sIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbRmlsdGVyLmRvRmlsdGVyXSIpOwotICAgICAgICAgIAorCiAgICAgICAgICgoSHR0cFNlcnZsZXRSZXF1ZXN0KXJlcXVlc3QpLmdldFNlc3Npb24oKS5zZXRBdHRyaWJ1dGUoIkZJTFRFUiIsICJQQVNTIik7CiAgICAgICAgIGZpbHRlckNoYWluLmRvRmlsdGVyKHJlcXVlc3QsIHJlc3BvbnNlKTsKLSAgICAgICAgCi0gICAgfSAgICAKLSAgICAKLSAgICAKKworICAgIH0KKworCiAgICAgcHVibGljIHZvaWQgaW5pdChqYWthcnRhLnNlcnZsZXQuRmlsdGVyQ29uZmlnIGZpbHRlckNvbmZpZykgdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbRmlsdGVyLmluaXRdIik7CiAgICAgICAgIGNvbnRleHQgPSBmaWx0ZXJDb25maWcuZ2V0U2VydmxldENvbnRleHQoKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkZXJUaHJlYWRzQ29uZmlnL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkZXJUaHJlYWRzQ29uZmlnL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQppbmRleCBkNGEzMTc0Li5kYWE4MDUzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZGVyVGhyZWFkc0NvbmZpZy9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRlclRocmVhZHNDb25maWcvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCkBAIC00NiwxMyArNDYsMTMgQEAKIHB1YmxpYyBjbGFzcyBTZXJ2bGV0VGVzdCBleHRlbmRzIEh0dHBTZXJ2bGV0IGltcGxlbWVudHMgSHR0cFNlc3Npb25MaXN0ZW5lciB7CiAKICAgICBwcml2YXRlIFNlcnZsZXRDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5pbml0XSIpOyAgICAgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuaW5pdF0iKTsKICAgICAgICAgY29udGV4dCA9IGNvbmZpZy5nZXRTZXJ2bGV0Q29udGV4dCgpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmluaXRdICIgKyBjb250ZXh0LmdldE1ham9yVmVyc2lvbigpKTsKLSAgICAgICAgCisKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKQEAgLTYwLDIzICs2MCwyMyBAQAogICAgICAgICBkb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgICAgICAgIAorICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5kb1Bvc3RdIik7Ci0gICAgICAgIAorCiAgICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7Ci0gICAgICAgIAorCiAgICAgICAgIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLnNldEF0dHJpYnV0ZSgiRklMVEVSLVJFUVVFU1QiLCByZXF1ZXN0LmdldFNlc3Npb24oKS5nZXRBdHRyaWJ1dGUoIkZJTFRFUiIpKTsKLSAgICAgICAgcmVxdWVzdC5nZXRTZXNzaW9uKCkuc2V0QXR0cmlidXRlKCJGSUxURVIiLCAiRkFJTCIpOyAgICAgICAgCi0gICAgICAgIAkKKyAgICAgICAgcmVxdWVzdC5nZXRTZXNzaW9uKCkuc2V0QXR0cmlidXRlKCJGSUxURVIiLCAiRkFJTCIpOworCiAgICAgICAgIFJlcXVlc3REaXNwYXRjaGVyIHJkID0gY29udGV4dC5nZXRSZXF1ZXN0RGlzcGF0Y2hlcigiL1NlcnZsZXRUZXN0MiIpOwotICAgICAgICByZC5mb3J3YXJkKHJlcXVlc3QsIHJlc3BvbnNlKTsgICAgICAgCisgICAgICAgIHJkLmZvcndhcmQocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNlc3Npb25DcmVhdGVkKGpha2FydGEuc2VydmxldC5odHRwLkh0dHBTZXNzaW9uRXZlbnQgaHR0cFNlc3Npb25FdmVudCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LnNlc3Npb25DcmVhdGVkXSIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlc3Npb25EZXN0cm95ZWQoamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb25FdmVudCBodHRwU2Vzc2lvbkV2ZW50KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuc2Vzc2lvbkRlc3Ryb3llZF0iKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBdHRyaWJ1dGVzOiAiICsgaHR0cFNlc3Npb25FdmVudC5nZXRTZXNzaW9uKCkuZ2V0QXR0cmlidXRlKCJ0ZXN0IikpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRlclRocmVhZHNDb25maWcvc2VydmxldC9TZXJ2bGV0VGVzdDIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkZXJUaHJlYWRzQ29uZmlnL3NlcnZsZXQvU2VydmxldFRlc3QyLmphdmEKaW5kZXggZGIyY2I1MC4uMDA3NzVhNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRlclRocmVhZHNDb25maWcvc2VydmxldC9TZXJ2bGV0VGVzdDIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZGVyVGhyZWFkc0NvbmZpZy9zZXJ2bGV0L1NlcnZsZXRUZXN0Mi5qYXZhCkBAIC0yNSwxMCArMjUsMTAgQEAKIHB1YmxpYyBjbGFzcyBTZXJ2bGV0VGVzdDIgZXh0ZW5kcyBIdHRwU2VydmxldCBpbXBsZW1lbnRzIEh0dHBTZXNzaW9uTGlzdGVuZXIgewogCiAgICAgcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQyLmluaXRdIik7ICAgICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldDIuaW5pdF0iKTsKICAgICAgICAgY29udGV4dCA9IGNvbmZpZy5nZXRTZXJ2bGV0Q29udGV4dCgpOwogICAgIH0KIApAQCAtMzcsMjMgKzM3LDIzIEBACiAgICAgICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAgICAgICAgCisgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0Mi5kb1Bvc3RdIik7Ci0gICAgICAKKwogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwotICAgICAgICAKKwogICAgICAgICByZXF1ZXN0LmdldFNlc3Npb24oKS5zZXRBdHRyaWJ1dGUoIkZJTFRFUi1GT1JXQVJEIixyZXF1ZXN0LmdldFNlc3Npb24oKS5nZXRBdHRyaWJ1dGUoIkZJTFRFUiIpKTsKLSAgICAgICAgcmVxdWVzdC5nZXRTZXNzaW9uKCkuc2V0QXR0cmlidXRlKCJGSUxURVIiLCAiRkFJTCIpOyAgICAgICAgCi0gICAgICAgIAorICAgICAgICByZXF1ZXN0LmdldFNlc3Npb24oKS5zZXRBdHRyaWJ1dGUoIkZJTFRFUiIsICJGQUlMIik7CisKICAgICAgICAgUmVxdWVzdERpc3BhdGNoZXIgcmQgPSByZXF1ZXN0LmdldFJlcXVlc3REaXNwYXRjaGVyKCIvU2VydmxldFRlc3QzIik7Ci0gICAgICAgIHJkLmluY2x1ZGUocmVxdWVzdCwgcmVzcG9uc2UpOyAgICAgCisgICAgICAgIHJkLmluY2x1ZGUocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KLSAKKwogICAgIHB1YmxpYyB2b2lkIHNlc3Npb25DcmVhdGVkKGpha2FydGEuc2VydmxldC5odHRwLkh0dHBTZXNzaW9uRXZlbnQgaHR0cFNlc3Npb25FdmVudCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LnNlc3Npb25DcmVhdGVkXSIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlc3Npb25EZXN0cm95ZWQoamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb25FdmVudCBodHRwU2Vzc2lvbkV2ZW50KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuc2Vzc2lvbkRlc3Ryb3llZF0iKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBdHRyaWJ1dGVzOiAiICsgaHR0cFNlc3Npb25FdmVudC5nZXRTZXNzaW9uKCkuZ2V0QXR0cmlidXRlKCJ0ZXN0IikpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRlclRocmVhZHNDb25maWcvc2VydmxldC9TZXJ2bGV0VGVzdDMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWFkZXJUaHJlYWRzQ29uZmlnL3NlcnZsZXQvU2VydmxldFRlc3QzLmphdmEKaW5kZXggM2U4ZDI1Yi4uZTc4ZmVjMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlYWRlclRocmVhZHNDb25maWcvc2VydmxldC9TZXJ2bGV0VGVzdDMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVhZGVyVGhyZWFkc0NvbmZpZy9zZXJ2bGV0L1NlcnZsZXRUZXN0My5qYXZhCkBAIC00NiwxMSArNDYsMTEgQEAKIHB1YmxpYyBjbGFzcyBTZXJ2bGV0VGVzdDMgZXh0ZW5kcyBIdHRwU2VydmxldHsKIAogICAgIHByaXZhdGUgU2VydmxldENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0My5pbml0XSIpOyAgICAgICAgCi0gICAgICAgIGNvbnRleHQgPSBjb25maWcuZ2V0U2VydmxldENvbnRleHQoKTsgICAgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0My5pbml0XSIpOworICAgICAgICBjb250ZXh0ID0gY29uZmlnLmdldFNlcnZsZXRDb250ZXh0KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CkBAIC01OCwxMiArNTgsMTIgQEAKICAgICAgICAgZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7ICAgICAgICAKKyAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQzLmRvUG9zdF0iKTsKLSAgICAgICAgCisKICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKLSAgICAgICAgCisKICAgICAgICAgb3V0LnByaW50bG4oIkZJTFRFUi1SRVFVRVNUOiIgKyByZXF1ZXN0LmdldFNlc3Npb24oKS5nZXRBdHRyaWJ1dGUoIkZJTFRFUi1SRVFVRVNUIikpOwogICAgICAgICBvdXQucHJpbnRsbigiRklMVEVSLUZPUldBUkQ6IiArIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLmdldEF0dHJpYnV0ZSgiRklMVEVSLUZPUldBUkQiKSk7CiAgICAgICAgIG91dC5wcmludGxuKCJGSUxURVItSU5DTFVERToiICsgcmVxdWVzdC5nZXRTZXNzaW9uKCkuZ2V0QXR0cmlidXRlKCJGSUxURVIiKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVjb25maWdEZWZhdWx0V2ViTW9kdWxlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWNvbmZpZ0RlZmF1bHRXZWJNb2R1bGUvV2ViVGVzdC5qYXZhCmluZGV4IDdiODU1OWMuLmQ3OWFkYzEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWNvbmZpZ0RlZmF1bHRXZWJNb2R1bGUvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWNvbmZpZ0RlZmF1bHRXZWJNb2R1bGUvV2ViVGVzdC5qYXZhCkBAIC0yMSw3ICsyMSw3IEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci4qOwogCiBwdWJsaWMgY2xhc3MgV2ViVGVzdCB7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlY29uZmlnRGVmYXVsdFdlYk1vZHVsZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlY29uZmlnRGVmYXVsdFdlYk1vZHVsZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDQyYWQ0ZGMuLjhiNWZhMmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWNvbmZpZ0RlZmF1bHRXZWJNb2R1bGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVjb25maWdEZWZhdWx0V2ViTW9kdWxlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE0ICsxNSwxNCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1yZWNvbmZpZ0RlZmF1bHRXZWJNb2R1bGUiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXJlY29uZmlnRGVmYXVsdFdlYk1vZHVsZSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii93ZWItcmVjb25maWdEZWZhdWx0V2ViTW9kdWxlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVjb25maWdEZWZhdWx0V2ViTW9kdWxlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWNvbmZpZ0RlZmF1bHRXZWJNb2R1bGUvYnVpbGQueG1sCmluZGV4IDBjYzRiNGUuLjdlYTQ0OTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWNvbmZpZ0RlZmF1bHRXZWJNb2R1bGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWNvbmZpZ0RlZmF1bHRXZWJNb2R1bGUvYnVpbGQueG1sCkBAIC0zOCw3ICszOCw3IEBACiAgICAgICAgICAgICAgICB2YWx1ZT0iLS1saXN0ZW5lcmFkZHJlc3MgJHtodHRwLmFkZHJlc3N9IC0tbGlzdGVuZXJwb3J0ICR7aHR0cC5hbHRlcm5hdGUucG9ydH0gLS1kZWZhdWx0dnMgc2VydmVyMyBodHRwLWxpc3RlbmVyLXNlcnZlciIvPgogICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtdmlydHVhbC1zZXJ2ZXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9ImNyZWF0ZS12aXJ0dWFsLXNlcnZlciIgLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWRpcmVjdFBvcnQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlZGlyZWN0UG9ydC9XZWJUZXN0LmphdmEKaW5kZXggMGY2M2IzMS4uMDNhYmQ4ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlZGlyZWN0UG9ydC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlZGlyZWN0UG9ydC9XZWJUZXN0LmphdmEKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgICAgICB0cnVzdFN0b3JlUGF0aCA9IGFyZ3NbM107CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEJ1Z3RyYXEgNDk0NjczOSIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTY5LDcgKzY5LDcgQEAKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgdXJsID0gbmV3IFVSTChjb25uLmdldEhlYWRlckZpZWxkKCJMb2NhdGlvbiIpKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlZGlyZWN0ZWQgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgU1NMQ29udGV4dCBjdHggPSBTU0xDb250ZXh0LmdldEluc3RhbmNlKCJUTFMiKTsgCisgICAgICAgICAgICAgICAgU1NMQ29udGV4dCBjdHggPSBTU0xDb250ZXh0LmdldEluc3RhbmNlKCJUTFMiKTsKICAgICAgICAgICAgICAgICBjdHguaW5pdChudWxsLCBnZXRUcnVzdE1hbmFnZXJzKHRydXN0U3RvcmVQYXRoKSwgbnVsbCk7CiAgICAgICAgICAgICAgICAgSHR0cHNVUkxDb25uZWN0aW9uIGh0dHBzQ29ubiA9IChIdHRwc1VSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOwogICAgICAgICAgICAgICAgIGh0dHBzQ29ubi5zZXRTU0xTb2NrZXRGYWN0b3J5KGN0eC5nZXRTb2NrZXRGYWN0b3J5KCkpOwpAQCAtMTI4LDYgKzEyOCw2IEBACiAKICAgICAgICAgcHVibGljIGJvb2xlYW4gdmVyaWZ5KFN0cmluZyBob3N0bmFtZSwgU1NMU2Vzc2lvbiBzZXNzaW9uKSB7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQl9CisgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWRpcmVjdFBvcnQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWRpcmVjdFBvcnQvYnVpbGQucHJvcGVydGllcwppbmRleCAyZTFmYmQwLi4yNTM5YTU5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVkaXJlY3RQb3J0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlZGlyZWN0UG9ydC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tcmVkaXJlY3QtcG9ydCIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tcmVkaXJlY3QtcG9ydCIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iLyR7YXBwbmFtZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWRpcmVjdFBvcnQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlZGlyZWN0UG9ydC9idWlsZC54bWwKaW5kZXggOGFjYzUwNy4uZTBmNTQxZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlZGlyZWN0UG9ydC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlZGlyZWN0UG9ydC9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDE5ICs0NCwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uLHByZXBhcmUta2V5c3RvcmUtY29tbW9uIj4KICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgpAQCAtNzIsMTAgKzcyLDEwIEBACiAgICAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlZGlyZWN0UG9ydER5bmFtaWNDb25maWcvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWRpcmVjdFBvcnREeW5hbWljQ29uZmlnL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMmMwODFjMC4uYzFiOWQ2YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlZGlyZWN0UG9ydER5bmFtaWNDb25maWcvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVkaXJlY3RQb3J0RHluYW1pY0NvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tcmVkaXJlY3QtcG9ydC1keW5hbWljLXJlY29uZmlnIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1yZWRpcmVjdC1wb3J0LWR5bmFtaWMtcmVjb25maWciLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii8ke2FwcG5hbWV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVkaXJlY3RQb3J0RHluYW1pY0NvbmZpZy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVkaXJlY3RQb3J0RHluYW1pY0NvbmZpZy9idWlsZC54bWwKaW5kZXggNjBjZDcxYS4uNGUxZjQwOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlZGlyZWN0UG9ydER5bmFtaWNDb25maWcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWRpcmVjdFBvcnREeW5hbWljQ29uZmlnL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMTUgKzQ0LDE1IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLW5ldHdvcmstbGlzdGVuZXItMSIgLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtbmV0d29yay1saXN0ZW5lci0xIiAvPgpAQCAtOTMsNyArOTMsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbixwcmVwYXJlLWtleXN0b3JlLWNvbW1vbiI+CiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KQEAgLTEwOSwxMCArMTA5LDEwIEBACiAgICAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVzdG9yZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1uZXR3b3JrLWxpc3RlbmVyLTIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWRpcmVjdFBvcnRMb2FkQmFsYW5jZXIvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlZGlyZWN0UG9ydExvYWRCYWxhbmNlci9XZWJUZXN0LmphdmEKaW5kZXggNjI1MzViNi4uMDA4M2E1MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlZGlyZWN0UG9ydExvYWRCYWxhbmNlci9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlZGlyZWN0UG9ydExvYWRCYWxhbmNlci9XZWJUZXN0LmphdmEKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgNjQxOTY1OSIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTY5LDcgKzY5LDcgQEAKICAgICAgICAgb3Mud3JpdGUoZ2V0LmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiSG9zdDogbG9hZGJhbGFuY2VyOjk5OTlcbiIuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gc29jay5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBiaXMgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWRpcmVjdFBvcnRMb2FkQmFsYW5jZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWRpcmVjdFBvcnRMb2FkQmFsYW5jZXIvYnVpbGQucHJvcGVydGllcwppbmRleCBmNjlhZDJkLi4xNjZlYTZjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVkaXJlY3RQb3J0TG9hZEJhbGFuY2VyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlZGlyZWN0UG9ydExvYWRCYWxhbmNlci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXJlZGlyZWN0LXBvcnQtbG9hZGJhbGFuY2VyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVkaXJlY3RQb3J0TG9hZEJhbGFuY2VyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWRpcmVjdFBvcnRMb2FkQmFsYW5jZXIvYnVpbGQueG1sCmluZGV4IDg5ZmNkOGUuLjYwY2RiOGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWRpcmVjdFBvcnRMb2FkQmFsYW5jZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWRpcmVjdFBvcnRMb2FkQmFsYW5jZXIvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwxOCArNDQsMTggQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiIC8+CkBAIC03Niw3ICs3Niw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTg4LDEwICs4OCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RvcmUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVkaXJlY3RXaXRoUm9vdFdpbGRDYXJkVXJsUGF0dGVybi9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVkaXJlY3RXaXRoUm9vdFdpbGRDYXJkVXJsUGF0dGVybi9XZWJUZXN0LmphdmEKaW5kZXggZjgyNDc0NC4uNDAwMGFjNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlZGlyZWN0V2l0aFJvb3RXaWxkQ2FyZFVybFBhdHRlcm4vV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWRpcmVjdFdpdGhSb290V2lsZENhcmRVcmxQYXR0ZXJuL1dlYlRlc3QuamF2YQpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgICAgIGV4cGVjdGVkID0gInVyaSA9ICIgKyBjb250ZXh0Um9vdCArICIvLCBwYXRoSW5mbyA9IC8iOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBJc3N1ZSA1MTQxIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlZGlyZWN0V2l0aFJvb3RXaWxkQ2FyZFVybFBhdHRlcm4vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWRpcmVjdFdpdGhSb290V2lsZENhcmRVcmxQYXR0ZXJuL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZDg4ZTI2Yi4uNmQxNzRkZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlZGlyZWN0V2l0aFJvb3RXaWxkQ2FyZFVybFBhdHRlcm4vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVkaXJlY3RXaXRoUm9vdFdpbGRDYXJkVXJsUGF0dGVybi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tcmVkaXJlY3Qtd2l0aC1yb290LXdpbGQtY2FyZC11cmwtcGF0dGVybiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tcmVkaXJlY3Qtd2l0aC1yb290LXdpbGQtY2FyZC11cmwtcGF0dGVybiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iLyR7YXBwbmFtZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWRpcmVjdFdpdGhSb290V2lsZENhcmRVcmxQYXR0ZXJuL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWRpcmVjdFdpdGhSb290V2lsZENhcmRVcmxQYXR0ZXJuL2J1aWxkLnhtbAppbmRleCA4NTRiZjZmLi5iZGU5NzliIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVkaXJlY3RXaXRoUm9vdFdpbGRDYXJkVXJsUGF0dGVybi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlZGlyZWN0V2l0aFJvb3RXaWxkQ2FyZFVybFBhdHRlcm4vYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOCArNDIsMTggQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CkBAIC02OCwxMCArNjgsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVsYXRpdmVSZWRpcmVjdEFsbG93ZWQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlbGF0aXZlUmVkaXJlY3RBbGxvd2VkL1dlYlRlc3QuamF2YQppbmRleCAyNzQwMTE1Li5iNGNjYzViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVsYXRpdmVSZWRpcmVjdEFsbG93ZWQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWxhdGl2ZVJlZGlyZWN0QWxsb3dlZC9XZWJUZXN0LmphdmEKQEAgLTIwLDkgKzIwLDkgQEAKIAogLyoKICAqIFRoaXMgdW5pdCB0ZXN0IGV4cGVjdHMgb25seSB0aGUgcmVsYXRpdmUgcGF0aCB3aGVuIHJlZGlyZWN0Ci0gKiBhcyB0aGUgZm9sbG93aW5nIGlzIHNwZWNpZmllZCBpbiBzdW4td2ViLnhtbC4gCisgKiBhcyB0aGUgZm9sbG93aW5nIGlzIHNwZWNpZmllZCBpbiBzdW4td2ViLnhtbC4KICAqCi0gKiA8cHJvcGVydHkgbmFtZT0icmVsYXRpdmVSZWRpcmVjdEFsbG93ZWQiIHZhbHVlPSJ0cnVlIi8+IAorICogPHByb3BlcnR5IG5hbWU9InJlbGF0aXZlUmVkaXJlY3RBbGxvd2VkIiB2YWx1ZT0idHJ1ZSIvPgogICoKICAqLwogcHVibGljIGNsYXNzIFdlYlRlc3QgewpAQCAtMzIsNyArMzIsNyBAQAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX05BTUUgPSAid2ViLXJlbGF0aXZlUmVkaXJlY3RBbGxvd2VkIjsKIAogICAgIC8qCi0gICAgICogVGhlIHJlbGF0aXZlIHBhdGggdGhhdCBpcyBleHBlY3RlZC4gCisgICAgICogVGhlIHJlbGF0aXZlIHBhdGggdGhhdCBpcyBleHBlY3RlZC4KICAgICAgKi8KICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFUSCA9ICIvd2ViLXJlbGF0aXZlUmVkaXJlY3RBbGxvd2VkL2pzcC90ZXN0Mi5qc3AiOwogCkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEJ1Z3RyYXEgNDY0MjY1MCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTU1LDggKzU1LDggQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgIAotICAgICAgICB0cnkgeyAKKworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlSnNwKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwpAQCAtNzEsMTQgKzcxLDE0IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZUpzcCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAgCisKICAgICAgICAgU29ja2V0IHNvY2sgPSBuZXcgU29ja2V0KGhvc3QsIG5ldyBJbnRlZ2VyKHBvcnQpLmludFZhbHVlKCkpOwogICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSBzb2NrLmdldE91dHB1dFN0cmVhbSgpOwogICAgICAgICBTdHJpbmcgZ2V0ID0gIkdFVCAiICsgY29udGV4dFJvb3QgKyAiL2pzcC90ZXN0MS5qc3AiICsgIiBIVFRQLzEuMFxuIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGdldCk7CiAgICAgICAgIG9zLndyaXRlKGdldC5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJpcyA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKIApAQCAtOTcsNyArOTcsNyBAQAogICAgICAgICAgICAgICBmYWlsID0gZmFsc2U7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiV3JvbmcgcGF0aDogIiArIGxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCBleHBlY3RlZDogIiArIFBBVEgpOyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCBleHBlY3RlZDogIiArIFBBVEgpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICBmYWlsID0gdHJ1ZTsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWxhdGl2ZVJlZGlyZWN0QWxsb3dlZC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlbGF0aXZlUmVkaXJlY3RBbGxvd2VkL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMzk2MTUyOC4uOGUyZjcwOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlbGF0aXZlUmVkaXJlY3RBbGxvd2VkL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlbGF0aXZlUmVkaXJlY3RBbGxvd2VkL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE0ICsxNSwxNCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1yZWxhdGl2ZVJlZGlyZWN0QWxsb3dlZCIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tcmVsYXRpdmVSZWRpcmVjdEFsbG93ZWQiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvd2ViLXJlbGF0aXZlUmVkaXJlY3RBbGxvd2VkIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVsYXRpdmVSZWRpcmVjdEFsbG93ZWQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlbGF0aXZlUmVkaXJlY3RBbGxvd2VkL2J1aWxkLnhtbAppbmRleCA4N2RiZDRjLi41YTFmMGM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVsYXRpdmVSZWRpcmVjdEFsbG93ZWQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZWxhdGl2ZVJlZGlyZWN0QWxsb3dlZC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDEwICs0MiwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgIDxqYXZhYwpAQCAtNTMsMTAgKzUzLDEwIEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjQsNyArNjQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVwbGFjZVJvb3RDb250ZXh0L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXBsYWNlUm9vdENvbnRleHQvV2ViVGVzdC5qYXZhCmluZGV4IDVkMTk1MTYuLmQ3M2Y0ZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXBsYWNlUm9vdENvbnRleHQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXBsYWNlUm9vdENvbnRleHQvV2ViVGVzdC5qYXZhCkBAIC0zOCw3ICszOCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEJ1Z3RyYXEgNTA1NjcyNiIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ2LDE1ICs0NiwxNSBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAidGVzdC50eHQiKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKICAgICAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOwogICAgICAgICAgICAgY29ubi5jb25uZWN0KCk7CiAgICAgICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7IAorICAgICAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIldyb25nIHJlc3BvbnNlIGNvZGUuIEV4cGVjdGVkOiAyMDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgcmVjZWl2ZWQ6ICIgKyByZXNwb25zZUNvZGUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXBsYWNlUm9vdENvbnRleHQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXBsYWNlUm9vdENvbnRleHQvYnVpbGQucHJvcGVydGllcwppbmRleCBlNWQ0NWUxLi4xMjgyNjk0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVwbGFjZVJvb3RDb250ZXh0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcGxhY2VSb290Q29udGV4dC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXJlcGxhY2Utcm9vdC1jb250ZXh0Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVwbGFjZVJvb3RDb250ZXh0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXBsYWNlUm9vdENvbnRleHQvYnVpbGQueG1sCmluZGV4IDRlZGM5Y2MuLjRhYjc4NjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXBsYWNlUm9vdENvbnRleHQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXBsYWNlUm9vdENvbnRleHQvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwxOSArNDQsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTY0LDcgKzY0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRGlyZWN0b3J5VHJhdmVyc2FsL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckRpcmVjdG9yeVRyYXZlcnNhbC9XZWJUZXN0LmphdmEKaW5kZXggMDUwMWZkZS4uYjhjMzFmZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRGlyZWN0b3J5VHJhdmVyc2FsL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJEaXJlY3RvcnlUcmF2ZXJzYWwvV2ViVGVzdC5qYXZhCkBAIC00OSw3ICs0OSw3IEBACiAgICAgICAgIGFwcHNlcnZlclRlc3RQYXRoID0gYXJnc1szXTsKICAgICAgICAgYWRtaW5Qb3J0ID0gYXJnc1s0XTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlNlY3VyaXR5IFZ1bG5lcmFiaWxpdHkgdGVzdCBmb3IgUmVxdWVzdERpc3BhdGNoZXIgZGlyZWN0b3J5IHRyYXZlcnNhbCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTU3LDggKzU3LDggQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwpAQCAtMTA5LDcgKzEwOSw3IEBACiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTWlzc2luZyBleHBlY3RlZCByZXNwb25zZTogIiArIEVYUEVDVEVEKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGlmIChvcyAhPSBudWxsKSBvcy5jbG9zZSgpOwpAQCAtMTI1LDkgKzEyNSw5IEBACiAgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBleCkge30KICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBpbnZva2VWYWxpZGF0aW9uVGVzdEZvckRvdWJsZURvdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTb2NrZXQgc29jayA9IG51bGw7CiAgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IG51bGw7CiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gbnVsbDsKQEAgLTE3MCw5ICsxNzAsOSBAQAogICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZXgpIHt9CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgaW52b2tlVmFsaWRhdGlvblRlc3RGb3JDb2xvbigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTb2NrZXQgc29jayA9IG51bGw7CiAgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IG51bGw7CiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gbnVsbDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckRpcmVjdG9yeVRyYXZlcnNhbC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRGlyZWN0b3J5VHJhdmVyc2FsL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZGQyODA1Ny4uOTIyYTc4MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRGlyZWN0b3J5VHJhdmVyc2FsL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRGlyZWN0b3J5VHJhdmVyc2FsL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tcmVxdWVzdC1kaXNwYXRjaGVyLWRpcmVjdG9yeS10cmF2ZXJzYWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckRpcmVjdG9yeVRyYXZlcnNhbC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJEaXJlY3RvcnlUcmF2ZXJzYWwvYnVpbGQueG1sCmluZGV4IDU1M2Q5NWUuLjFjNzA1NGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckRpcmVjdG9yeVRyYXZlcnNhbC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRGlyZWN0b3J5VHJhdmVyc2FsL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMzkgKzQ0LDM5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAucG9ydH0iLz4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2NvbnRleHRyb290fSIvPgotCSAgPGFyZyB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfSIvPgotCSAgPGFyZyB2YWx1ZT0iJHthZG1pbi5wb3J0fSIvPgorICAgICAgPGFyZyB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfSIvPgorICAgICAgPGFyZyB2YWx1ZT0iJHthZG1pbi5wb3J0fSIvPgogICAgICAgICAgIDxjbGFzc3BhdGg+CiAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIvPgogICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249Ii4iLz4KICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJGb3J3YXJkQ29tbWl0UmVzcG9uc2UvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRm9yd2FyZENvbW1pdFJlc3BvbnNlL1dlYlRlc3QuamF2YQppbmRleCA0OTkyNDkzLi4xYjAxYjVlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJGb3J3YXJkQ29tbWl0UmVzcG9uc2UvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmRDb21taXRSZXNwb25zZS9XZWJUZXN0LmphdmEKQEAgLTQyLDcgKzQyLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgNjM3NDk5MCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTExNCw2ICsxMTQsNiBAQAogICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKSB7CiAgICAgICAgICAgICAgICAgLy8gaWdub3JlCiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJGb3J3YXJkQ29tbWl0UmVzcG9uc2UvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmRDb21taXRSZXNwb25zZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDhhM2JmZjkuLjdmNjhhYTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmRDb21taXRSZXNwb25zZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmRDb21taXRSZXNwb25zZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tcmVxdWVzdC1kaXNwYXRjaGVyLWZvcndhcmQtY29tbWl0LXJlc3BvbnNlIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1yZXF1ZXN0LWRpc3BhdGNoZXItZm9yd2FyZC1jb21taXQtcmVzcG9uc2UiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii8ke2FwcG5hbWV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJGb3J3YXJkQ29tbWl0UmVzcG9uc2UvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRm9yd2FyZENvbW1pdFJlc3BvbnNlL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJGb3J3YXJkQ29tbWl0UmVzcG9uc2UvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmRDb21taXRSZXNwb25zZS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJGb3J3YXJkQ29tbWl0UmVzcG9uc2Uvc2VydmxldC9Gcm9tLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJGb3J3YXJkQ29tbWl0UmVzcG9uc2Uvc2VydmxldC9Gcm9tLmphdmEKaW5kZXggZWZmZGQ5Ny4uNDI3ZTQ2MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRm9yd2FyZENvbW1pdFJlc3BvbnNlL3NlcnZsZXQvRnJvbS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmRDb21taXRSZXNwb25zZS9zZXJ2bGV0L0Zyb20uamF2YQpAQCAtMjEsOCArMjEsOCBAQAogcHVibGljIGNsYXNzIEZyb20gZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAKICAgICBwdWJsaWMgdm9pZCBzZXJ2aWNlKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzKQotCXRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbiB7Ci0JCisgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uIHsKKwogICAgICAgICBnZXRTZXJ2bGV0Q29udGV4dCgpLmdldFJlcXVlc3REaXNwYXRjaGVyKCIvVG8iKS5mb3J3YXJkKHJlcSwgcmVzKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoMTAgKiAxMDAwKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmRIRUFEUmVxdWVzdC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJGb3J3YXJkSEVBRFJlcXVlc3QvV2ViVGVzdC5qYXZhCmluZGV4IGZjMGI5OTQuLjQ4MjY4NTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmRIRUFEUmVxdWVzdC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRm9yd2FyZEhFQURSZXF1ZXN0L1dlYlRlc3QuamF2YQpAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBHbGFzc0Zpc2ggSXNzdWUgMjIxMCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTExNiw2ICsxMTYsNiBAQAogICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKSB7CiAgICAgICAgICAgICAgICAgLy8gaWdub3JlCiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJGb3J3YXJkSEVBRFJlcXVlc3QvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmRIRUFEUmVxdWVzdC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDZkOTU0YjIuLmM0MGM5N2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmRIRUFEUmVxdWVzdC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmRIRUFEUmVxdWVzdC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXJlcXVlc3QtZGlzcGF0Y2hlci1mb3J3YXJkLWhlYWQtcmVxdWVzdCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRm9yd2FyZEhFQURSZXF1ZXN0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmRIRUFEUmVxdWVzdC9idWlsZC54bWwKaW5kZXggNDhlM2JmMC4uMjI3Y2ZmYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRm9yd2FyZEhFQURSZXF1ZXN0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJGb3J3YXJkSEVBRFJlcXVlc3QvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwyMSArNDIsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTY4LDEwICs2OCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmRIRUFEUmVxdWVzdC9zZXJ2bGV0L0Zyb20uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmRIRUFEUmVxdWVzdC9zZXJ2bGV0L0Zyb20uamF2YQppbmRleCBhNzNiMmMwLi43Mzc3NjA4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJGb3J3YXJkSEVBRFJlcXVlc3Qvc2VydmxldC9Gcm9tLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRm9yd2FyZEhFQURSZXF1ZXN0L3NlcnZsZXQvRnJvbS5qYXZhCkBAIC0yMSw4ICsyMSw4IEBACiBwdWJsaWMgY2xhc3MgRnJvbSBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIAogICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzKQotCXRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbiB7Ci0JCisgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uIHsKKwogICAgICAgICBnZXRTZXJ2bGV0Q29udGV4dCgpLmdldFJlcXVlc3REaXNwYXRjaGVyKCIvVG8iKS5mb3J3YXJkKHJlcSwgcmVzKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJGb3J3YXJkTm9uSHR0cC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJGb3J3YXJkTm9uSHR0cC9XZWJUZXN0LmphdmEKaW5kZXggNTIzNTI1ZC4uY2FlNzM5YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRm9yd2FyZE5vbkh0dHAvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmROb25IdHRwL1dlYlRlc3QuamF2YQpAQCAtNDMsNyArNDMsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBHbGFzc0Zpc2ggSVQgMTA2NDEiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJGb3J3YXJkTm9uSHR0cC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRm9yd2FyZE5vbkh0dHAvYnVpbGQucHJvcGVydGllcwppbmRleCBlOWFkNmY1Li5lMTgwNmUzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJGb3J3YXJkTm9uSHR0cC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmROb25IdHRwL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tcmVxdWVzdC1kaXNwYXRjaGVyLWZvcndhcmQtbm9uLWh0dHAiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmROb25IdHRwL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmROb25IdHRwL2J1aWxkLnhtbAppbmRleCA0OGUzYmYwLi4yMjdjZmZjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJGb3J3YXJkTm9uSHR0cC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRm9yd2FyZE5vbkh0dHAvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwyMSArNDIsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTY4LDEwICs2OCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmRTZW5kRXJyb3JDb21taXRSZXNwb25zZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJGb3J3YXJkU2VuZEVycm9yQ29tbWl0UmVzcG9uc2UvV2ViVGVzdC5qYXZhCmluZGV4IDgzZGNiMzUuLmExODIyNGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmRTZW5kRXJyb3JDb21taXRSZXNwb25zZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRm9yd2FyZFNlbmRFcnJvckNvbW1pdFJlc3BvbnNlL1dlYlRlc3QuamF2YQpAQCAtNDcsNyArNDcsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciA2Mzc0OTkwIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRm9yd2FyZFNlbmRFcnJvckNvbW1pdFJlc3BvbnNlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJGb3J3YXJkU2VuZEVycm9yQ29tbWl0UmVzcG9uc2UvYnVpbGQucHJvcGVydGllcwppbmRleCA2MTBlYmU3Li5hN2JmOWYwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJGb3J3YXJkU2VuZEVycm9yQ29tbWl0UmVzcG9uc2UvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJGb3J3YXJkU2VuZEVycm9yQ29tbWl0UmVzcG9uc2UvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXJlcXVlc3QtZGlzcGF0Y2hlci1mb3J3YXJkLXNlbmQtZXJyb3ItY29tbWl0LXJlc3BvbnNlIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1yZXF1ZXN0LWRpc3BhdGNoZXItZm9yd2FyZC1zZW5kLWVycm9yLWNvbW1pdC1yZXNwb25zZSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iLyR7YXBwbmFtZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmRTZW5kRXJyb3JDb21taXRSZXNwb25zZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJGb3J3YXJkU2VuZEVycm9yQ29tbWl0UmVzcG9uc2UvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmRTZW5kRXJyb3JDb21taXRSZXNwb25zZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRm9yd2FyZFNlbmRFcnJvckNvbW1pdFJlc3BvbnNlL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmRTZW5kRXJyb3JDb21taXRSZXNwb25zZS9zZXJ2bGV0L0Zyb20uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmRTZW5kRXJyb3JDb21taXRSZXNwb25zZS9zZXJ2bGV0L0Zyb20uamF2YQppbmRleCBlZmZkZDk3Li40MjdlNDYxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJGb3J3YXJkU2VuZEVycm9yQ29tbWl0UmVzcG9uc2Uvc2VydmxldC9Gcm9tLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRm9yd2FyZFNlbmRFcnJvckNvbW1pdFJlc3BvbnNlL3NlcnZsZXQvRnJvbS5qYXZhCkBAIC0yMSw4ICsyMSw4IEBACiBwdWJsaWMgY2xhc3MgRnJvbSBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIAogICAgIHB1YmxpYyB2b2lkIHNlcnZpY2UoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpCi0JdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uIHsKLQkKKyAgICB0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24geworCiAgICAgICAgIGdldFNlcnZsZXRDb250ZXh0KCkuZ2V0UmVxdWVzdERpc3BhdGNoZXIoIi9UbyIpLmZvcndhcmQocmVxLCByZXMpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCgxMCAqIDEwMDApOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRm9yd2FyZFNldFN0YXR1c0NvbW1pdFJlc3BvbnNlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmRTZXRTdGF0dXNDb21taXRSZXNwb25zZS9XZWJUZXN0LmphdmEKaW5kZXggMDYxNTQxNi4uMDczNGE4MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRm9yd2FyZFNldFN0YXR1c0NvbW1pdFJlc3BvbnNlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJGb3J3YXJkU2V0U3RhdHVzQ29tbWl0UmVzcG9uc2UvV2ViVGVzdC5qYXZhCkBAIC01NCw3ICs1NCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIDYzNzQ5OTAiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC0xMzQsNyArMTM0LDcgQEAKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJSZXNwb25zZSB3YXMgZGVsYXllZCBieSAxMCBzZWNvbmRzICIgKwogICAgICAgICAgICAgICAgICAgICAib3IgbW9yZSwgd2hpY2ggaXMgaG93IGxvbmcgdGhlICIgKwogICAgICAgICAgICAgICAgICAgICAib3JpZ2luIHNlcnZsZXQgb2YgdGhlIFJELmZvcndhcmQoKSAiICsKLSAgICAgICAgICAgICAgICAgICAgImhhcyBiZWVuIHNsZWVwaW5nIGZvci4gIiArIAorICAgICAgICAgICAgICAgICAgICAiaGFzIGJlZW4gc2xlZXBpbmcgZm9yLiAiICsKICAgICAgICAgICAgICAgICAgICAgIlRoZSByZXNwb25zZSBzaG91bGQgaGF2ZSBiZWVuICIgKwogICAgICAgICAgICAgICAgICAgICAiY29tbWl0dGVkIGltbWVkaWF0ZWx5LiIpOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRm9yd2FyZFNldFN0YXR1c0NvbW1pdFJlc3BvbnNlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJGb3J3YXJkU2V0U3RhdHVzQ29tbWl0UmVzcG9uc2UvYnVpbGQucHJvcGVydGllcwppbmRleCAyNmU3MzEzLi41OTUxZTlmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJGb3J3YXJkU2V0U3RhdHVzQ29tbWl0UmVzcG9uc2UvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJGb3J3YXJkU2V0U3RhdHVzQ29tbWl0UmVzcG9uc2UvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXJlcXVlc3QtZGlzcGF0Y2hlci1mb3J3YXJkLXNldC1zdGF0dXMtY29tbWl0LXJlc3BvbnNlIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1yZXF1ZXN0LWRpc3BhdGNoZXItZm9yd2FyZC1zZXQtc3RhdHVzLWNvbW1pdC1yZXNwb25zZSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iLyR7YXBwbmFtZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmRTZXRTdGF0dXNDb21taXRSZXNwb25zZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJGb3J3YXJkU2V0U3RhdHVzQ29tbWl0UmVzcG9uc2UvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmRTZXRTdGF0dXNDb21taXRSZXNwb25zZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRm9yd2FyZFNldFN0YXR1c0NvbW1pdFJlc3BvbnNlL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmRTZXRTdGF0dXNDb21taXRSZXNwb25zZS9zZXJ2bGV0L0Zyb20uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckZvcndhcmRTZXRTdGF0dXNDb21taXRSZXNwb25zZS9zZXJ2bGV0L0Zyb20uamF2YQppbmRleCBlZmZkZDk3Li40MjdlNDYxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJGb3J3YXJkU2V0U3RhdHVzQ29tbWl0UmVzcG9uc2Uvc2VydmxldC9Gcm9tLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyRm9yd2FyZFNldFN0YXR1c0NvbW1pdFJlc3BvbnNlL3NlcnZsZXQvRnJvbS5qYXZhCkBAIC0yMSw4ICsyMSw4IEBACiBwdWJsaWMgY2xhc3MgRnJvbSBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIAogICAgIHB1YmxpYyB2b2lkIHNlcnZpY2UoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpCi0JdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uIHsKLQkKKyAgICB0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24geworCiAgICAgICAgIGdldFNlcnZsZXRDb250ZXh0KCkuZ2V0UmVxdWVzdERpc3BhdGNoZXIoIi9UbyIpLmZvcndhcmQocmVxLCByZXMpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCgxMCAqIDEwMDApOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVySW5jbHVkZU5vbkh0dHAvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVySW5jbHVkZU5vbkh0dHAvV2ViVGVzdC5qYXZhCmluZGV4IGM3Y2JjNTYuLmI5ZmQyYmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckluY2x1ZGVOb25IdHRwL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJJbmNsdWRlTm9uSHR0cC9XZWJUZXN0LmphdmEKQEAgLTQzLDcgKzQzLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgR2xhc3NGaXNoIElUIDEwNjQxIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVySW5jbHVkZU5vbkh0dHAvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckluY2x1ZGVOb25IdHRwL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNTYyOGNmNi4uYjc1NDIzNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVySW5jbHVkZU5vbkh0dHAvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJJbmNsdWRlTm9uSHR0cC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXJlcXVlc3QtZGlzcGF0Y2hlci1pbmNsdWRlLW5vbi1odHRwIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJJbmNsdWRlTm9uSHR0cC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJJbmNsdWRlTm9uSHR0cC9idWlsZC54bWwKaW5kZXggNDhlM2JmMC4uMjI3Y2ZmYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVySW5jbHVkZU5vbkh0dHAvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckluY2x1ZGVOb25IdHRwL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMjEgKzQyLDIxIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC02OCwxMCArNjgsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJJbmNsdWRlVGFyZ2V0Tm90Rm91bmQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVySW5jbHVkZVRhcmdldE5vdEZvdW5kL1dlYlRlc3QuamF2YQppbmRleCA4ZmE5MTFjLi41YzAwODliIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJJbmNsdWRlVGFyZ2V0Tm90Rm91bmQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckluY2x1ZGVUYXJnZXROb3RGb3VuZC9XZWJUZXN0LmphdmEKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgNjE4Mjk4NCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTU0LDcgKzU0LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL2pzcC9pbmNsdWRlLmpzcCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CkBAIC02Nyw2ICs2Nyw2IEBACiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIldyb25nIHJlc3BvbnNlIGNvZGUuIEV4cGVjdGVkOiA1MDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCByZWNlaXZlZDogIiArIHJlc3BvbnNlQ29kZSk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7Ci0gICAgICAgIH0gCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJJbmNsdWRlVGFyZ2V0Tm90Rm91bmQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckluY2x1ZGVUYXJnZXROb3RGb3VuZC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDViNmRmZjYuLjZhOTJkNjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckluY2x1ZGVUYXJnZXROb3RGb3VuZC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckluY2x1ZGVUYXJnZXROb3RGb3VuZC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tcmVxdWVzdC1kaXNwYXRjaGVyLWluY2x1ZGUtdGFyZ2V0LW5vdC1mb3VuZCIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tcmVxdWVzdC1kaXNwYXRjaGVyLWluY2x1ZGUtdGFyZ2V0LW5vdC1mb3VuZCIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iLyR7YXBwbmFtZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckluY2x1ZGVUYXJnZXROb3RGb3VuZC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJJbmNsdWRlVGFyZ2V0Tm90Rm91bmQvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlckluY2x1ZGVUYXJnZXROb3RGb3VuZC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVySW5jbHVkZVRhcmdldE5vdEZvdW5kL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlck1heERlcHRoL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlck1heERlcHRoL1dlYlRlc3QuamF2YQppbmRleCA0MDc0MzIzLi41NmFmOTU4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJNYXhEZXB0aC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyTWF4RGVwdGgvV2ViVGVzdC5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiAgKiBleGNlcHRpb24gaW4gc2VydmVyLmxvZyBmaWxlIikuCiAgKgogICogVGhpcyB0ZXN0J3MgYnVpbGQueG1sIGNvbmZpZ3VyZXMgPHdlYi1jb250YWluZXI+IHByb3BlcnR5IG5hbWVkCi0gKiBkaXNwYXRjaGVyLW1heC1kZXB0aCBpbiBkb21haW4ueG1sIGFuZCBzZXRzIGl0cyB2YWx1ZSB0byA1IGJlZm9yZSAKKyAqIGRpc3BhdGNoZXItbWF4LWRlcHRoIGluIGRvbWFpbi54bWwgYW5kIHNldHMgaXRzIHZhbHVlIHRvIDUgYmVmb3JlCiAgKiByZXN0YXJ0aW5nIHRoZSBzZXJ2ZXIuCiAgKi8KIHB1YmxpYyBjbGFzcyBXZWJUZXN0IHsKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgNDcwMzAyMyIpOwogCkBAIC01NywxOCArNTcsMTggQEAKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgICArIGNvbnRleHRSb290ICsgIi9mb28uanNwIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsgCisgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZSBjb2RlLiBFeHBlY3RlZDogMjAwIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsIHJlY2VpdmVkOiAiICsgcmVzcG9uc2VDb2RlKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyTWF4RGVwdGgvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlck1heERlcHRoL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMzdjZWE4ZS4uNTZlZmRhNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyTWF4RGVwdGgvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJNYXhEZXB0aC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXJlcXVlc3QtZGlzcGF0Y2hlci1tYXgtZGVwdGgiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlck1heERlcHRoL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlck1heERlcHRoL2J1aWxkLnhtbAppbmRleCA0YjQxZDg4Li44ZTY2NWEwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJNYXhEZXB0aC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyTWF4RGVwdGgvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwxNiArNDQsMTYgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIgLz4KQEAgLTcyLDcgKzcyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtODQsMTAgKzg0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVzdG9yZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlck11bHRpcGxlRm9yd2FyZC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJNdWx0aXBsZUZvcndhcmQvV2ViVGVzdC5qYXZhCmluZGV4IDU0ZTU1NmIuLjU3ZDkxMTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlck11bHRpcGxlRm9yd2FyZC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyTXVsdGlwbGVGb3J3YXJkL1dlYlRlc3QuamF2YQpAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBJVCA3MDM0Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyTXVsdGlwbGVGb3J3YXJkL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJNdWx0aXBsZUZvcndhcmQvYnVpbGQucHJvcGVydGllcwppbmRleCBkN2FlM2IzLi5iMjI5NDU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJNdWx0aXBsZUZvcndhcmQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJNdWx0aXBsZUZvcndhcmQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1yZXF1ZXN0LWRpc3BhdGNoZXItbXVsdGlwbGUtZm9yd2FyZCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyTXVsdGlwbGVGb3J3YXJkL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlck11bHRpcGxlRm9yd2FyZC9idWlsZC54bWwKaW5kZXggMDBmZGFkMy4uYzM5Nzc2ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyTXVsdGlwbGVGb3J3YXJkL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJNdWx0aXBsZUZvcndhcmQvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwyMyArNDIsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MCwxMCArNzAsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJQYXRoV2l0aFBhcmFtcy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJQYXRoV2l0aFBhcmFtcy9XZWJUZXN0LmphdmEKaW5kZXggYjZjNjhlNC4uNmNmMTZiNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyUGF0aFdpdGhQYXJhbXMvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlclBhdGhXaXRoUGFyYW1zL1dlYlRlc3QuamF2YQpAQCAtMzksNyArMzksNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciA0ODczNDIzIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDcsOCArNDcsOCBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2VKc3AoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CkBAIC02Nyw3ICs2Nyw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZUpzcCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAgCisKICAgICAgICAgc29jayA9IG5ldyBTb2NrZXQoaG9zdCwgbmV3IEludGVnZXIocG9ydCkuaW50VmFsdWUoKSk7CiAgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IHNvY2suZ2V0T3V0cHV0U3RyZWFtKCk7CiAgICAgICAgIFN0cmluZyBnZXQgPSAiR0VUICIgKyBjb250ZXh0Um9vdCArICIvanNwL2ZvcndhcmRGcm9tLmpzcCBIVFRQLzEuMFxuIjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlclBhdGhXaXRoUGFyYW1zL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJQYXRoV2l0aFBhcmFtcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGJjNzZjZjIuLjVkNTI1Y2UgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlclBhdGhXaXRoUGFyYW1zL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyUGF0aFdpdGhQYXJhbXMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXJlcXVlc3QtZGlzcGF0Y2hlci1wYXRoLXdpdGgtcGFyYW1zIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1yZXF1ZXN0LWRpc3BhdGNoZXItcGF0aC13aXRoLXBhcmFtcyIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJQYXRoV2l0aFBhcmFtcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVxdWVzdERpc3BhdGNoZXJQYXRoV2l0aFBhcmFtcy9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JlcXVlc3REaXNwYXRjaGVyUGF0aFdpdGhQYXJhbXMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXF1ZXN0RGlzcGF0Y2hlclBhdGhXaXRoUGFyYW1zL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXNwb25zZUVycm9yTWVzc2FnZUVuY29kaW5nL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXNwb25zZUVycm9yTWVzc2FnZUVuY29kaW5nL1dlYlRlc3QuamF2YQppbmRleCA1NTY5OTYzLi42ODRjZTk1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVzcG9uc2VFcnJvck1lc3NhZ2VFbmNvZGluZy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Jlc3BvbnNlRXJyb3JNZXNzYWdlRW5jb2RpbmcvV2ViVGVzdC5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIDQ2NTUwMTAiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC00NSw4ICs0NSw4IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZVNlcnZsZXQoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CkBAIC01NSwxNCArNTUsMTQgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlU2VydmxldCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAgCisKICAgICAgICAgU29ja2V0IHNvY2sgPSBuZXcgU29ja2V0KGhvc3QsIG5ldyBJbnRlZ2VyKHBvcnQpLmludFZhbHVlKCkpOwogICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSBzb2NrLmdldE91dHB1dFN0cmVhbSgpOwogICAgICAgICBTdHJpbmcgZ2V0ID0gIkdFVCAiICsgY29udGV4dFJvb3QgKyAiL0hlbGxvSmFwYW4iICsgIiBIVFRQLzEuMFxuIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGdldCk7CiAgICAgICAgIG9zLndyaXRlKGdldC5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIC8vIERlY29kZSBlcnJvciBtZXNzYWdlIHVzaW5nIHRoZSBzYW1lIGNoYXJzZXQgdGhhdCBpdCB3YXMgZW5jb2RlZCBpbgogICAgICAgICBCdWZmZXJlZFJlYWRlciBiaXMgPSBuZXcgQnVmZmVyZWRSZWFkZXIoCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVzcG9uc2VFcnJvck1lc3NhZ2VFbmNvZGluZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Jlc3BvbnNlRXJyb3JNZXNzYWdlRW5jb2RpbmcvYnVpbGQucHJvcGVydGllcwppbmRleCBkNzUzZjQ1Li42ODVlMDk1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVzcG9uc2VFcnJvck1lc3NhZ2VFbmNvZGluZy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXNwb25zZUVycm9yTWVzc2FnZUVuY29kaW5nL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tcmVzcG9uc2UtZXJyb3ItbWVzc2FnZS1lbmNvZGluZyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Jlc3BvbnNlRXJyb3JNZXNzYWdlRW5jb2RpbmcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Jlc3BvbnNlRXJyb3JNZXNzYWdlRW5jb2RpbmcvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXNwb25zZUVycm9yTWVzc2FnZUVuY29kaW5nL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVzcG9uc2VFcnJvck1lc3NhZ2VFbmNvZGluZy9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVzcG9uc2VFcnJvck1lc3NhZ2VFbmNvZGluZy9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVzcG9uc2VFcnJvck1lc3NhZ2VFbmNvZGluZy9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggZWMwYmM0Yy4uNzg0OGU0MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Jlc3BvbnNlRXJyb3JNZXNzYWdlRW5jb2RpbmcvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXNwb25zZUVycm9yTWVzc2FnZUVuY29kaW5nL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjcsNyArMjcsNyBAQAogICAgICAgICA8ZGlzcGxheS1uYW1lPkhlbGxvSmFwYW48L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5IZWxsb0phcGFuPC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuSGVsbG9KYXBhbjwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAKICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+SGVsbG9KYXBhbjwvc2VydmxldC1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Jlc3BvbnNlRXhjZXB0aW9uTWVzc2FnZUVuY29kaW5nL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXNwb25zZUV4Y2VwdGlvbk1lc3NhZ2VFbmNvZGluZy9XZWJUZXN0LmphdmEKaW5kZXggM2JhMGViMC4uZmVmNWRjMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Jlc3BvbnNlRXhjZXB0aW9uTWVzc2FnZUVuY29kaW5nL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVzcG9uc2VFeGNlcHRpb25NZXNzYWdlRW5jb2RpbmcvV2ViVGVzdC5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIDYyNTQ0NjkiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC00NSw4ICs0NSw4IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZVNlcnZsZXQoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CkBAIC01NSwxNCArNTUsMTQgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlU2VydmxldCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAgCisKICAgICAgICAgU29ja2V0IHNvY2sgPSBuZXcgU29ja2V0KGhvc3QsIG5ldyBJbnRlZ2VyKHBvcnQpLmludFZhbHVlKCkpOwogICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSBzb2NrLmdldE91dHB1dFN0cmVhbSgpOwogICAgICAgICBTdHJpbmcgZ2V0ID0gIkdFVCAiICsgY29udGV4dFJvb3QgKyAiL0hlbGxvSmFwYW4iICsgIiBIVFRQLzEuMFxuIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGdldCk7CiAgICAgICAgIG9zLndyaXRlKGdldC5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIC8vIERlY29kZSBlcnJvciBtZXNzYWdlIHVzaW5nIHRoZSBzYW1lIGNoYXJzZXQgdGhhdCBpdCB3YXMgZW5jb2RlZCBpbgogICAgICAgICBCdWZmZXJlZFJlYWRlciBiaXMgPSBuZXcgQnVmZmVyZWRSZWFkZXIoCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVzcG9uc2VFeGNlcHRpb25NZXNzYWdlRW5jb2RpbmcvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXNwb25zZUV4Y2VwdGlvbk1lc3NhZ2VFbmNvZGluZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDI1NWFhOTcuLjE2ZmE4ODcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXNwb25zZUV4Y2VwdGlvbk1lc3NhZ2VFbmNvZGluZy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXNwb25zZUV4Y2VwdGlvbk1lc3NhZ2VFbmNvZGluZy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXJlc3BvbnNlLWV4Y2VwdGlvbi1tZXNzYWdlLWVuY29kaW5nIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVzcG9uc2VFeGNlcHRpb25NZXNzYWdlRW5jb2RpbmcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Jlc3BvbnNlRXhjZXB0aW9uTWVzc2FnZUVuY29kaW5nL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVzcG9uc2VFeGNlcHRpb25NZXNzYWdlRW5jb2RpbmcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXNwb25zZUV4Y2VwdGlvbk1lc3NhZ2VFbmNvZGluZy9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVzcG9uc2VFeGNlcHRpb25NZXNzYWdlRW5jb2RpbmcvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Jlc3BvbnNlRXhjZXB0aW9uTWVzc2FnZUVuY29kaW5nL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCBlYzBiYzRjLi43ODQ4ZTQzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmVzcG9uc2VFeGNlcHRpb25NZXNzYWdlRW5jb2RpbmcvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXNwb25zZUV4Y2VwdGlvbk1lc3NhZ2VFbmNvZGluZy9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTI3LDcgKzI3LDcgQEAKICAgICAgICAgPGRpc3BsYXktbmFtZT5IZWxsb0phcGFuPC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+SGVsbG9KYXBhbjwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LkhlbGxvSmFwYW48L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCisgICAgPC9zZXJ2bGV0PgogCiAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPkhlbGxvSmFwYW48L3NlcnZsZXQtbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXVzZVNlc3Npb25JZC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmV1c2VTZXNzaW9uSWQvV2ViVGVzdC5qYXZhCmluZGV4IDA4ZDAxMjEuLmU0MmVlNTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXVzZVNlc3Npb25JZC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JldXNlU2Vzc2lvbklkL1dlYlRlc3QuamF2YQpAQCAtNDQsNyArNDQsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBCdWd0cmFxIDQ4MTc2NDIsNDg3NjQ1NCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTYyLDcgKzYyLDcgQEAKICAgICAgICAgICAgIG9zLndyaXRlKGdldC5nZXRCeXRlcygpKTsKICAgICAgICAgICAgIG9zLndyaXRlKCgiQ29va2llOiBKU0VTU0lPTklEPSIgKyBKU0VTU0lPTl9JRCArICJcbiIpLmdldEJ5dGVzKCkpOwogICAgICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgICAgIElucHV0U3RyZWFtIGlzID0gc29jay5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYmlzID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogCkBAIC04NywxMSArODcsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgICAgICAgICAgfQotCSAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTWlzc2luZyBKU0VTU0lPTklEIik7CiAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICB9Ci0JICAgIH0gZWxzZSB7CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJNaXNzaW5nIFNldC1Db29raWUgcmVzcG9uc2UgaGVhZGVyIik7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JldXNlU2Vzc2lvbklkL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmV1c2VTZXNzaW9uSWQvYnVpbGQucHJvcGVydGllcwppbmRleCA3NDQ3MDY5Li5mOTBlMGJiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmV1c2VTZXNzaW9uSWQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmV1c2VTZXNzaW9uSWQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXJldXNlLXNlc3Npb25pZCIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tcmV1c2Utc2Vzc2lvbmlkIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmV1c2VTZXNzaW9uSWQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JldXNlU2Vzc2lvbklkL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmV1c2VTZXNzaW9uSWQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXVzZVNlc3Npb25JZC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmV1c2VTZXNzaW9uSWQvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3JldXNlU2Vzc2lvbklkL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCAyOGFmNzlkLi5jOWEwNTA4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvcmV1c2VTZXNzaW9uSWQvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9yZXVzZVNlc3Npb25JZC9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTI2LDcgKzI2LDcgQEAKICAgICA8c2VydmxldD4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5UZXN0U2VydmxldDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAorICAgIDwvc2VydmxldD4KIAogICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5UZXN0U2VydmxldDwvc2VydmxldC1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlY3VyaXR5Q29uc3RyYWludE1hcHBpbmcvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlY3VyaXR5Q29uc3RyYWludE1hcHBpbmcvV2ViVGVzdC5qYXZhCmluZGV4IDM1NzIzZTguLjYyOWQzOWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZWN1cml0eUNvbnN0cmFpbnRNYXBwaW5nL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VjdXJpdHlDb25zdHJhaW50TWFwcGluZy9XZWJUZXN0LmphdmEKQEAgLTIyLDcgKzIyLDcgQEAKIAogcHVibGljIGNsYXNzIFdlYlRlc3QKIHsKLSAgICAKKwogICAgIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdD0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX05BTUUgPSAiU2VjdXJpdHkgQ29uc3RyYWludCBNYXBwaW5nIHRlc3QiOwpAQCAtMzIsNyArMzIsNyBAQAogCiAgICAgICAgIC8vIFRoZSBzdGF0IHJlcG9ydGVyIHdyaXRlcyBvdXQgdGhlIHRlc3QgaW5mbyBhbmQgcmVzdWx0cwogICAgICAgICAvLyBpbnRvIHRoZSB0b3AtbGV2ZWwgcXVpY2tsb29rIGRpcmVjdG9yeSBkdXJpbmcgYSBydW4uCi0gICAgICAKKwogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIDQ5MDMyMDkiKTsKIAogICAgICAgICBTdHJpbmcgaG9zdCA9IGFyZ3NbMF07CkBAIC00MSw3ICs0MSw3IEBACiAKICAgICAgICAgaW50IHBvcnQgPSBuZXcgSW50ZWdlcihwb3J0UykuaW50VmFsdWUoKTsKICAgICAgICAgU3RyaW5nIG5hbWU7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAvL0NoZWNrIGlmIGl0IHN0cmlwcyBvdXQgdXJpIHBhcmFtZXRlcnMgKCI7LioiKSBiZWZvcmUgbWFwcGluZyB0byB3ZWJhcHBzCiAgICAgICAgICAgICBnb0dldChob3N0LCBwb3J0LCBjb250ZXh0Um9vdCArICIvU2VydmxldFRlc3Q7dGVzdD1hYWEiICk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VjdXJpdHlDb25zdHJhaW50TWFwcGluZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlY3VyaXR5Q29uc3RyYWludE1hcHBpbmcvYnVpbGQucHJvcGVydGllcwppbmRleCAzMmVmMDU0Li5iMGQ3YTVkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VjdXJpdHlDb25zdHJhaW50TWFwcGluZy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZWN1cml0eUNvbnN0cmFpbnRNYXBwaW5nL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE0ICsxNSwxNCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZWN1cml0eUNvbnN0cmFpbnRNYXBwaW5nIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZWN1cml0eUNvbnN0cmFpbnRNYXBwaW5nIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iL3dlYi1zZWN1cml0eUNvbnN0cmFpbnRNYXBwaW5nIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VjdXJpdHlDb25zdHJhaW50TWFwcGluZy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VjdXJpdHlDb25zdHJhaW50TWFwcGluZy9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlY3VyaXR5Q29uc3RyYWludE1hcHBpbmcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZWN1cml0eUNvbnN0cmFpbnRNYXBwaW5nL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZWN1cml0eUNvbnN0cmFpbnRNYXBwaW5nL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZWN1cml0eUNvbnN0cmFpbnRNYXBwaW5nL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCAyMmFkY2I0Li5lZjgzOTI4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VjdXJpdHlDb25zdHJhaW50TWFwcGluZy9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlY3VyaXR5Q29uc3RyYWludE1hcHBpbmcvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yMiwxOCArMjIsMTggQEAKICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiCiAgICAgICAgICB2ZXJzaW9uPSIyLjQiPgotICAgICAKKwogICAgIDxzZXJ2bGV0PgogICAgICAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXRUZXN0PC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKLSAgICAKKyAgICA8L3NlcnZsZXQ+CisKICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi9TZXJ2bGV0VGVzdDwvdXJsLXBhdHRlcm4+CiAgICAgPC9zZXJ2bGV0LW1hcHBpbmc+Ci0gICAgCisKICAgICA8c2Vzc2lvbi1jb25maWc+CiAgICAgICAgIDxzZXNzaW9uLXRpbWVvdXQ+MTA8L3Nlc3Npb24tdGltZW91dD4KICAgICA8L3Nlc3Npb24tY29uZmlnPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlY3VyaXR5Q29uc3RyYWludE1hcHBpbmcvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlY3VyaXR5Q29uc3RyYWludE1hcHBpbmcvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCmluZGV4IDUyYzNhMzcuLmQxMWM5ODYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZWN1cml0eUNvbnN0cmFpbnRNYXBwaW5nL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VjdXJpdHlDb25zdHJhaW50TWFwcGluZy9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKQEAgLTI1LDEzICsyNSwxMyBAQAogcHVibGljIGNsYXNzIFNlcnZsZXRUZXN0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewogCiAgICAgcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuaW5pdF0iKTsgICAgICAgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmluaXRdIik7CiAgICAgICAgIGNvbnRleHQgPSBjb25maWcuZ2V0U2VydmxldENvbnRleHQoKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5pbml0XSAiICsgY29udGV4dC5nZXRNYWpvclZlcnNpb24oKSk7Ci0gICAgICAgIAorCiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CkBAIC0zOSw5ICszOSw5IEBACiAgICAgICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAgICAgICAgCisgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmRvUG9zdF0iKTsKLSAgICAgICAgCisKICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKICAgICAgICAgb3V0LnByaW50bG4oIlRoaXMgaXMgU2VydmxldCBUZXN0Iik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VjdXJpdHlDb25zdHJhaW50V2lsZGNhcmRNYXBwaW5nL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZWN1cml0eUNvbnN0cmFpbnRXaWxkY2FyZE1hcHBpbmcvV2ViVGVzdC5qYXZhCmluZGV4IGZlMTY2YjYuLmEwMjI3M2MgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZWN1cml0eUNvbnN0cmFpbnRXaWxkY2FyZE1hcHBpbmcvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZWN1cml0eUNvbnN0cmFpbnRXaWxkY2FyZE1hcHBpbmcvV2ViVGVzdC5qYXZhCkBAIC01MCw3ICs1MCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIHNlY3VyaXR5IGNvbnN0cmFpbnRzIG1hcHBpbmciKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC02MywxMSArNjMsMTEgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjb250ZXh0Um9vdCArICIvYXBwbGljYXRpb24vcmVkaXJlY3QveHh4Iik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZWN1cml0eUNvbnN0cmFpbnRXaWxkY2FyZE1hcHBpbmcvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZWN1cml0eUNvbnN0cmFpbnRXaWxkY2FyZE1hcHBpbmcvYnVpbGQucHJvcGVydGllcwppbmRleCBkMTkyZTg2Li5jNTgyYmVjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VjdXJpdHlDb25zdHJhaW50V2lsZGNhcmRNYXBwaW5nL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlY3VyaXR5Q29uc3RyYWludFdpbGRjYXJkTWFwcGluZy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlY3VyaXR5LWNvbnN0cmFpbnQtd2lsZGNhcmQtbWFwcGluZyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlY3VyaXR5Q29uc3RyYWludFdpbGRjYXJkTWFwcGluZy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VjdXJpdHlDb25zdHJhaW50V2lsZGNhcmRNYXBwaW5nL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VjdXJpdHlDb25zdHJhaW50V2lsZGNhcmRNYXBwaW5nL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VjdXJpdHlDb25zdHJhaW50V2lsZGNhcmRNYXBwaW5nL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZWN1cml0eUNvbnN0cmFpbnRXaWxkY2FyZE1hcHBpbmcvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlY3VyaXR5Q29uc3RyYWludFdpbGRjYXJkTWFwcGluZy9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggNDQxMmFiYy4uY2I4OGVmNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlY3VyaXR5Q29uc3RyYWludFdpbGRjYXJkTWFwcGluZy9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlY3VyaXR5Q29uc3RyYWludFdpbGRjYXJkTWFwcGluZy9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTI4LDcgKzI4LDcgQEAKICAgICA8c2VydmxldC1uYW1lPk15UHJvdGVjdGVkU2VydmxldDwvc2VydmxldC1uYW1lPgogICAgIDx1cmwtcGF0dGVybj4vYXBwbGljYXRpb24vKjwvdXJsLXBhdHRlcm4+CiAgIDwvc2VydmxldC1tYXBwaW5nPgotICAKKwogICA8c2VydmxldC1tYXBwaW5nPgogICAgIDxzZXJ2bGV0LW5hbWU+TXlQcm90ZWN0ZWRTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CiAgICAgPHVybC1wYXR0ZXJuPi9sb2dpbjwvdXJsLXBhdHRlcm4+CkBAIC0zOCwxOCArMzgsMTggQEAKICAgICA8c2VydmxldC1uYW1lPk15UHJvdGVjdGVkU2VydmxldDwvc2VydmxldC1uYW1lPgogICAgIDx1cmwtcGF0dGVybj4vcmVkaXJlY3Q8L3VybC1wYXR0ZXJuPgogICA8L3NlcnZsZXQtbWFwcGluZz4KLSAgICAgIAorCiAgIDxzZXNzaW9uLWNvbmZpZz4KICAgICA8c2Vzc2lvbi10aW1lb3V0PgogICAgICAgICAgICAgMzAKICAgICAgICAgPC9zZXNzaW9uLXRpbWVvdXQ+CiAgIDwvc2Vzc2lvbi1jb25maWc+Ci0gIAorCiAgIDxzZWN1cml0eS1jb25zdHJhaW50PgogICAgIDx3ZWItcmVzb3VyY2UtY29sbGVjdGlvbj4KICAgICAgIDx3ZWItcmVzb3VyY2UtbmFtZT5Qcm90ZWN0ZWQgQXJlYTwvd2ViLXJlc291cmNlLW5hbWU+CiAgICAgICA8dXJsLXBhdHRlcm4+L2FwcGxpY2F0aW9uL3JlZGlyZWN0Lyo8L3VybC1wYXR0ZXJuPgotICAgICAgPHVybC1wYXR0ZXJuPi9yZWRpcmVjdDwvdXJsLXBhdHRlcm4+ICAgICAgCisgICAgICA8dXJsLXBhdHRlcm4+L3JlZGlyZWN0PC91cmwtcGF0dGVybj4KICAgICAgIDx1cmwtcGF0dGVybj4vY29udGVudC5qc3A8L3VybC1wYXR0ZXJuPgogICAgICAgPGh0dHAtbWV0aG9kPkdFVDwvaHR0cC1tZXRob2Q+CiAgICAgICA8aHR0cC1tZXRob2Q+UE9TVDwvaHR0cC1tZXRob2Q+CkBAIC01OCwxMiArNTgsMTIgQEAKICAgICAgIDxyb2xlLW5hbWU+dXNlcjwvcm9sZS1uYW1lPgogICAgIDwvYXV0aC1jb25zdHJhaW50PgogICA8L3NlY3VyaXR5LWNvbnN0cmFpbnQ+Ci0gIAorCiAgIDxsb2dpbi1jb25maWc+CiAgICAgPGF1dGgtbWV0aG9kPkJBU0lDPC9hdXRoLW1ldGhvZD4KICAgICA8cmVhbG0tbmFtZT5maWxlPC9yZWFsbS1uYW1lPgogICA8L2xvZ2luLWNvbmZpZz4KLSAgCisKICAgPHNlY3VyaXR5LXJvbGU+CiAgICAgPHJvbGUtbmFtZT51c2VyPC9yb2xlLW5hbWU+CiAgIDwvc2VjdXJpdHktcm9sZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZWN1cml0eUNvbnN0cmFpbnRXaWxkY2FyZE1hcHBpbmcvc2VydmxldC9NeVByb3RlY3RlZFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZWN1cml0eUNvbnN0cmFpbnRXaWxkY2FyZE1hcHBpbmcvc2VydmxldC9NeVByb3RlY3RlZFNlcnZsZXQuamF2YQppbmRleCAyYzMzMmMzLi4xNjQ5ZGU5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VjdXJpdHlDb25zdHJhaW50V2lsZGNhcmRNYXBwaW5nL3NlcnZsZXQvTXlQcm90ZWN0ZWRTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlY3VyaXR5Q29uc3RyYWludFdpbGRjYXJkTWFwcGluZy9zZXJ2bGV0L015UHJvdGVjdGVkU2VydmxldC5qYXZhCkBAIC0zMiwxNiArMzIsMTYgQEAKICAqIEB2ZXJzaW9uCiAgKi8KIHB1YmxpYyBjbGFzcyBNeVByb3RlY3RlZFNlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7Ci0gICAgCisKICAgICAvKiogUHJvY2Vzc2VzIHJlcXVlc3RzIGZvciBib3RoIEhUVFAgPGNvZGU+R0VUPC9jb2RlPiBhbmQgPGNvZGU+UE9TVDwvY29kZT4gbWV0aG9kcy4KICAgICAgKiBAcGFyYW0gcmVxdWVzdCBzZXJ2bGV0IHJlcXVlc3QKICAgICAgKiBAcGFyYW0gcmVzcG9uc2Ugc2VydmxldCByZXNwb25zZQogICAgICAqLwogICAgIHByb3RlY3RlZCB2b2lkIHByb2Nlc3NSZXF1ZXN0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKQogICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTXlQcm90ZWN0ZWRTZXJ2bGV0LnByb2Nlc3NSZXF1ZXN0ICIgKyByZXF1ZXN0LmdldFJlcXVlc3RVUkkoKSArICIgIiArIHJlcXVlc3QuZ2V0UXVlcnlTdHJpbmcoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyBteVVybCA9IHJlcXVlc3QuZ2V0UmVxdWVzdFVSSSgpOwogICAgICAgICBpZihteVVybC5pbmRleE9mKCJsb2dpbiIpID49IDApIHsKICAgICAgICAgICAgIGxvZ2luKHJlcXVlc3QsIHJlc3BvbnNlKTsKQEAgLTUwLDcgKzUwLDcgQEAKICAgICAgICAgICAgIHJlZGlyZWN0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZihyZXF1ZXN0LmdldFJlbW90ZVVzZXIoKSA9PSBudWxsKSB7CiAgICAgICAgICAgICBTdHJpbmcgY2FsbFVybCA9IHJlcXVlc3QuZ2V0UmVxdWVzdFVSSSgpOwogICAgICAgICAgICAgU3RyaW5nIHF1ZXJ5ID0gcmVxdWVzdC5nZXRRdWVyeVN0cmluZygpOwpAQCAtNjMsNyArNjMsNyBAQAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxodG1sPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoZWFkPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjx0aXRsZT5TZXJ2bGV0IE15UHJvdGVjdGVkU2VydmxldDwvdGl0bGU+Iik7CkBAIC03MiwyMyArNzIsMjMgQEAKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aDE+U2VydmxldCBNeVByb3RlY3RlZFNlcnZsZXQgYXQgIiArIHJlcXVlc3QuZ2V0Q29udGV4dFBhdGgoKSArICI8L2gxPiIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvYm9keT4iKTsKICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L2h0bWw+Iik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgb3V0LmNsb3NlKCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgcmVkaXJlY3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLSAgCisKICAgICAgICAgcmVzcG9uc2Uuc2VuZFJlZGlyZWN0KHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJuZXh0ZW5jdXJsIikpOwogICAgIH0KLSAgICAKKwogICAgICBwcm90ZWN0ZWQgdm9pZCBsb2dpbihIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkKICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKIAogICAgICAgICByZXF1ZXN0LmdldFJlcXVlc3REaXNwYXRjaGVyKCIvbG9naW4uanNwIikuZm9yd2FyZChyZXF1ZXN0LCByZXNwb25zZSk7Ci0gICAgfSAgIAotICAgIAorICAgIH0KKwogICAgIC8vIDxlZGl0b3ItZm9sZCBkZWZhdWx0c3RhdGU9ImNvbGxhcHNlZCIgZGVzYz0iSHR0cFNlcnZsZXQgbWV0aG9kcy4gQ2xpY2sgb24gdGhlICsgc2lnbiBvbiB0aGUgbGVmdCB0byBlZGl0IHRoZSBjb2RlLiI+CiAgICAgLyoqIEhhbmRsZXMgdGhlIEhUVFAgPGNvZGU+R0VUPC9jb2RlPiBtZXRob2QuCiAgICAgICogQHBhcmFtIHJlcXVlc3Qgc2VydmxldCByZXF1ZXN0CkBAIC05OCw3ICs5OCw3IEBACiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgcHJvY2Vzc1JlcXVlc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KLSAgICAKKwogICAgIC8qKiBIYW5kbGVzIHRoZSBIVFRQIDxjb2RlPlBPU1Q8L2NvZGU+IG1ldGhvZC4KICAgICAgKiBAcGFyYW0gcmVxdWVzdCBzZXJ2bGV0IHJlcXVlc3QKICAgICAgKiBAcGFyYW0gcmVzcG9uc2Ugc2VydmxldCByZXNwb25zZQpAQCAtMTA3LDcgKzEwNyw3IEBACiAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgcHJvY2Vzc1JlcXVlc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KLSAgICAKKwogICAgIC8qKiBSZXR1cm5zIGEgc2hvcnQgZGVzY3JpcHRpb24gb2YgdGhlIHNlcnZsZXQuCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRTZXJ2bGV0SW5mbygpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZWN1cml0eUNvbnN0cmFpbnRXaXRob3V0QW55QXV0aENvbnN0cmFpbnQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlY3VyaXR5Q29uc3RyYWludFdpdGhvdXRBbnlBdXRoQ29uc3RyYWludC9XZWJUZXN0LmphdmEKaW5kZXggYWZhN2VmMC4uN2Q3YjA3MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlY3VyaXR5Q29uc3RyYWludFdpdGhvdXRBbnlBdXRoQ29uc3RyYWludC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlY3VyaXR5Q29uc3RyYWludFdpdGhvdXRBbnlBdXRoQ29uc3RyYWludC9XZWJUZXN0LmphdmEKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgNjI2NDY1NiIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTUwLDggKzUwLDggQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgIAotICAgICAgICB0cnkgeyAKKworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZWN1cml0eUNvbnN0cmFpbnRXaXRob3V0QW55QXV0aENvbnN0cmFpbnQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZWN1cml0eUNvbnN0cmFpbnRXaXRob3V0QW55QXV0aENvbnN0cmFpbnQvYnVpbGQucHJvcGVydGllcwppbmRleCBhNTU5YjQzLi5iYWE5NTg2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VjdXJpdHlDb25zdHJhaW50V2l0aG91dEFueUF1dGhDb25zdHJhaW50L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlY3VyaXR5Q29uc3RyYWludFdpdGhvdXRBbnlBdXRoQ29uc3RyYWludC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlY3VyaXR5LWNvbnN0cmFpbnQtd2l0aG91dC1hbnktYXV0aC1jb25zdHJhaW50Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VjdXJpdHlDb25zdHJhaW50V2l0aG91dEFueUF1dGhDb25zdHJhaW50L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZWN1cml0eUNvbnN0cmFpbnRXaXRob3V0QW55QXV0aENvbnN0cmFpbnQvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZWN1cml0eUNvbnN0cmFpbnRXaXRob3V0QW55QXV0aENvbnN0cmFpbnQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZWN1cml0eUNvbnN0cmFpbnRXaXRob3V0QW55QXV0aENvbnN0cmFpbnQvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZlclJlZGlyZWN0V2l0aFF1ZXJ5U3RyaW5nL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2ZXJSZWRpcmVjdFdpdGhRdWVyeVN0cmluZy9XZWJUZXN0LmphdmEKaW5kZXggZGYxMGIxYy4uNzJjMWM5NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZlclJlZGlyZWN0V2l0aFF1ZXJ5U3RyaW5nL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmVyUmVkaXJlY3RXaXRoUXVlcnlTdHJpbmcvV2ViVGVzdC5qYXZhCkBAIC00Myw3ICs0Myw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEdsYXNzRmlzaCBJc3N1ZSAzMDg1Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTEsOCArNTEsOCBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2VTZXJ2bGV0KCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpAQCAtNjIsNyArNjIsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2VTZXJ2bGV0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyBleHBlY3RlZFJlZGlyZWN0TG9jYXRpb24gPSAiTG9jYXRpb246IGh0dHA6Ly8iICsgaG9zdCArICI6IgogICAgICAgICAgICAgKyBwb3J0ICsgY29udGV4dFJvb3QgKyAiLz8iICsgUVVFUllfU1RSSU5HOwogCkBAIC03OCw3ICs3OCw3IEBACiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gbnVsbDsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYmlzID0gbnVsbDsKICAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOwotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGlzID0gc29jay5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICAgICAgYmlzID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogICAgICAgICAgICAgd2hpbGUgKChsaW5lID0gYmlzLnJlYWRMaW5lKCkpICE9IG51bGwpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2ZXJSZWRpcmVjdFdpdGhRdWVyeVN0cmluZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZlclJlZGlyZWN0V2l0aFF1ZXJ5U3RyaW5nL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMzkyNDczNi4uMjRlYmNlYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZlclJlZGlyZWN0V2l0aFF1ZXJ5U3RyaW5nL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZlclJlZGlyZWN0V2l0aFF1ZXJ5U3RyaW5nL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmVyLXJlZGlyZWN0LXdpdGgtcXVlcnktc3RyaW5nIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmVyUmVkaXJlY3RXaXRoUXVlcnlTdHJpbmcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZlclJlZGlyZWN0V2l0aFF1ZXJ5U3RyaW5nL2J1aWxkLnhtbAppbmRleCBhZDAyNWQ5Li5kZTFkY2ZhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmVyUmVkaXJlY3RXaXRoUXVlcnlTdHJpbmcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2ZXJSZWRpcmVjdFdpdGhRdWVyeVN0cmluZy9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDIyICs0NCwyMiBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MSwxMCArNzEsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYWJzb2x1dGVPcmRlcmluZ1dlYkZyYWdtZW50cy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYWJzb2x1dGVPcmRlcmluZ1dlYkZyYWdtZW50cy9XZWJUZXN0LmphdmEKaW5kZXggZDI1MTc5ZS4uZGU2YzhiYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2Fic29sdXRlT3JkZXJpbmdXZWJGcmFnbWVudHMvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hYnNvbHV0ZU9yZGVyaW5nV2ViRnJhZ21lbnRzL1dlYlRlc3QuamF2YQpAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBhYnNvbHV0ZS1vcmRlcmluZy13ZWItZnJhZ21lbnRzIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDYsNyArNDYsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZCIpOwpAQCAtNTYsNyArNTYsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QgKyAiLyI7CiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pCiAgICAgICAgICAgICAobmV3IFVSTCh1cmwpKS5vcGVuQ29ubmVjdGlvbigpOwpAQCAtOTMsMTAgKzkzLDEwIEBACiAgICAgICAgICAgICBpZiAoRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYWJzb2x1dGVPcmRlcmluZ1dlYkZyYWdtZW50cy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2Fic29sdXRlT3JkZXJpbmdXZWJGcmFnbWVudHMvYnVpbGQucHJvcGVydGllcwppbmRleCA4OThhZjkxLi4yOGM5NmJhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYWJzb2x1dGVPcmRlcmluZ1dlYkZyYWdtZW50cy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hYnNvbHV0ZU9yZGVyaW5nV2ViRnJhZ21lbnRzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjAtYWJzb2x1dGUtb3JkZXJpbmctd2ViLWZyYWdtZW50cyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2Fic29sdXRlT3JkZXJpbmdXZWJGcmFnbWVudHMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2Fic29sdXRlT3JkZXJpbmdXZWJGcmFnbWVudHMvYnVpbGQueG1sCmluZGV4IDY2OGM3NzkuLjhmZjdiZjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hYnNvbHV0ZU9yZGVyaW5nV2ViRnJhZ21lbnRzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYWJzb2x1dGVPcmRlcmluZ1dlYkZyYWdtZW50cy9idWlsZC54bWwKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgPC9kZWxldGU+CiAgICAgICAgIDxkZWxldGUgZGlyPSJsaWIiLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC03MSwyMyArNzEsMjMgQEAKIAogICAgICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KIAotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqL1Rlc3RTZXJ2bGV0LmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqL1Rlc3RTZXJ2bGV0LmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTk5LDEwICs5OSwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hYnNvbHV0ZU9yZGVyaW5nV2ViRnJhZ21lbnRzL2Rlc2NyaXB0b3Ivd2ViLWZyYWdtZW50My54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYWJzb2x1dGVPcmRlcmluZ1dlYkZyYWdtZW50cy9kZXNjcmlwdG9yL3dlYi1mcmFnbWVudDMueG1sCmluZGV4IGRlZTA0OGMuLjcxNDcyODYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hYnNvbHV0ZU9yZGVyaW5nV2ViRnJhZ21lbnRzL2Rlc2NyaXB0b3Ivd2ViLWZyYWdtZW50My54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2Fic29sdXRlT3JkZXJpbmdXZWJGcmFnbWVudHMvZGVzY3JpcHRvci93ZWItZnJhZ21lbnQzLnhtbApAQCAtMjAsNiArMjAsNiBAQAogPHdlYi1mcmFnbWVudCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1mcmFnbWVudF8zXzAueHNkIgotICAgIHZlcnNpb249IjMuMCI+IAorICAgIHZlcnNpb249IjMuMCI+CiAgIDxuYW1lPkI8L25hbWU+CiA8L3dlYi1mcmFnbWVudD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hYnNvbHV0ZU9yZGVyaW5nV2ViRnJhZ21lbnRzL3NlcnZsZXQvV0ZUZXN0RmlsdGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYWJzb2x1dGVPcmRlcmluZ1dlYkZyYWdtZW50cy9zZXJ2bGV0L1dGVGVzdEZpbHRlci5qYXZhCmluZGV4IDFlNGRhZWUuLjI3YjU3YmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hYnNvbHV0ZU9yZGVyaW5nV2ViRnJhZ21lbnRzL3NlcnZsZXQvV0ZUZXN0RmlsdGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2Fic29sdXRlT3JkZXJpbmdXZWJGcmFnbWVudHMvc2VydmxldC9XRlRlc3RGaWx0ZXIuamF2YQpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICB9IGNhdGNoKFNRTEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oZXgpOwogICAgICAgICB9Ci0gICAgfSAgIAorICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvRmlsdGVyKFNlcnZsZXRSZXF1ZXN0IHJlcSwgU2VydmxldFJlc3BvbnNlIHJlcywKICAgICAgICAgICAgIEZpbHRlckNoYWluIGNoYWluKSB0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2Fic29sdXRlT3JkZXJpbmdXZWJGcmFnbWVudHMvc2VydmxldC9XRlRlc3RGaWx0ZXIyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYWJzb2x1dGVPcmRlcmluZ1dlYkZyYWdtZW50cy9zZXJ2bGV0L1dGVGVzdEZpbHRlcjIuamF2YQppbmRleCBkNzliNDQwLi5kM2VkMzdiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYWJzb2x1dGVPcmRlcmluZ1dlYkZyYWdtZW50cy9zZXJ2bGV0L1dGVGVzdEZpbHRlcjIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYWJzb2x1dGVPcmRlcmluZ1dlYkZyYWdtZW50cy9zZXJ2bGV0L1dGVGVzdEZpbHRlcjIuamF2YQpAQCAtMzEsNyArMzEsNyBAQAogcHVibGljIGNsYXNzIFdGVGVzdEZpbHRlcjIgaW1wbGVtZW50cyBGaWx0ZXIgewogICAgIHB1YmxpYyB2b2lkIGluaXQoRmlsdGVyQ29uZmlnIGZpbHRlckNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj4+PiBXRlRlc3RGaWx0ZXIyLmluaXQiKTsKLSAgICB9ICAgCisgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9GaWx0ZXIoU2VydmxldFJlcXVlc3QgcmVxLCBTZXJ2bGV0UmVzcG9uc2UgcmVzLAogICAgICAgICAgICAgRmlsdGVyQ2hhaW4gY2hhaW4pIHRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYWJzb2x1dGVPcmRlcmluZ1dlYkZyYWdtZW50cy9zZXJ2bGV0L1dGVGVzdEZpbHRlcjJCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYWJzb2x1dGVPcmRlcmluZ1dlYkZyYWdtZW50cy9zZXJ2bGV0L1dGVGVzdEZpbHRlcjJCLmphdmEKaW5kZXggNGY5ZjY4NC4uM2NmNjA5OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2Fic29sdXRlT3JkZXJpbmdXZWJGcmFnbWVudHMvc2VydmxldC9XRlRlc3RGaWx0ZXIyQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hYnNvbHV0ZU9yZGVyaW5nV2ViRnJhZ21lbnRzL3NlcnZsZXQvV0ZUZXN0RmlsdGVyMkIuamF2YQpAQCAtMzEsNyArMzEsNyBAQAogcHVibGljIGNsYXNzIFdGVGVzdEZpbHRlcjJCIGltcGxlbWVudHMgRmlsdGVyIHsKICAgICBwdWJsaWMgdm9pZCBpbml0KEZpbHRlckNvbmZpZyBmaWx0ZXJDb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI+Pj4gV0ZUZXN0RmlsdGVyMkIuaW5pdCIpOwotICAgIH0gICAKKyAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb0ZpbHRlcihTZXJ2bGV0UmVxdWVzdCByZXEsIFNlcnZsZXRSZXNwb25zZSByZXMsCiAgICAgICAgICAgICBGaWx0ZXJDaGFpbiBjaGFpbikgdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hYnNvbHV0ZU9yZGVyaW5nV2ViRnJhZ21lbnRzL3NlcnZsZXQvV0ZUZXN0RmlsdGVyMy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2Fic29sdXRlT3JkZXJpbmdXZWJGcmFnbWVudHMvc2VydmxldC9XRlRlc3RGaWx0ZXIzLmphdmEKaW5kZXggMTk3MjgwNi4uY2Y4ODJhNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2Fic29sdXRlT3JkZXJpbmdXZWJGcmFnbWVudHMvc2VydmxldC9XRlRlc3RGaWx0ZXIzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2Fic29sdXRlT3JkZXJpbmdXZWJGcmFnbWVudHMvc2VydmxldC9XRlRlc3RGaWx0ZXIzLmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgfSBjYXRjaChTUUxFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGV4KTsKICAgICAgICAgfQotICAgIH0gICAKKyAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb0ZpbHRlcihTZXJ2bGV0UmVxdWVzdCByZXEsIFNlcnZsZXRSZXNwb25zZSByZXMsCiAgICAgICAgICAgICBGaWx0ZXJDaGFpbiBjaGFpbikgdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHRDb21wbGV0ZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0Q29tcGxldGUvV2ViVGVzdC5qYXZhCmluZGV4IGE0NzI3MTkuLjRkMDc4NGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHRDb21wbGV0ZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dENvbXBsZXRlL1dlYlRlc3QuamF2YQpAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEFzeW5jQ29udGV4dCNjb21wbGV0ZSIpOwpAQCAtNTQsMTEgKzU0LDExIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL1Rlc3RTZXJ2bGV0Iik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHRDb21wbGV0ZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dENvbXBsZXRlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggODJiYjdjOS4uMmRmZDNhNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dENvbXBsZXRlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dENvbXBsZXRlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjAtYXN5bmMtY29udGV4dC1jb21wbGV0ZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dENvbXBsZXRlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHRDb21wbGV0ZS9idWlsZC54bWwKaW5kZXggZGIyY2EzNC4uNWZlM2VjNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dENvbXBsZXRlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0Q29tcGxldGUvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwyMyArNDIsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MCw5ICs3MCw5IEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dENvbXBsZXRlL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHRDb21wbGV0ZS9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggNzk3NzY1OC4uNzQwMzU5MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dENvbXBsZXRlL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0Q29tcGxldGUvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0xOCwxMyArMTgsMTMgQEAKIC0tPgogCiA8d2ViLWFwcCB2ZXJzaW9uPSIzLjAiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzNfMC54c2QiPgotICAgICAKKwogICAgIDxzZXJ2bGV0PgogICAgICAgICA8c2VydmxldC1uYW1lPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuVGVzdFNlcnZsZXQ8L3NlcnZsZXQtY2xhc3M+CiAgICAgICAgIDxhc3luYy1zdXBwb3J0ZWQ+dHJ1ZTwvYXN5bmMtc3VwcG9ydGVkPgotICAgIDwvc2VydmxldD4gIAotICAgIAorICAgIDwvc2VydmxldD4KKwogICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+VGVzdFNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi9UZXN0U2VydmxldDwvdXJsLXBhdHRlcm4+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0Q29tcGxldGUvc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0Q29tcGxldGUvc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggNmJlNDM0Mi4uMjZmMDUyMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dENvbXBsZXRlL3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHRDb21wbGV0ZS9zZXJ2bGV0L3Rlc3QvVGVzdFNlcnZsZXQuamF2YQpAQCAtNDUsNiArNDUsNiBAQAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSwKLQkgICAgNTAwMCk7CisgICAgICAgIDUwMDApOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHRDcmVhdGVMaXN0ZW5lci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dENyZWF0ZUxpc3RlbmVyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNmE0ZTkzNC4uOWM0NzE2MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dENyZWF0ZUxpc3RlbmVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dENyZWF0ZUxpc3RlbmVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjAtYXN5bmMtY29udGV4dC1jcmVhdGUtbGlzdGVuZXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHRDcmVhdGVMaXN0ZW5lci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0Q3JlYXRlTGlzdGVuZXIvYnVpbGQueG1sCmluZGV4IDQ4ZTBhMGEuLmU5Yjc2MDcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHRDcmVhdGVMaXN0ZW5lci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dENyZWF0ZUxpc3RlbmVyL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMjMgKzQ0LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzIsMTAgKzcyLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dENyZWF0ZUxpc3RlbmVyL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHRDcmVhdGVMaXN0ZW5lci9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggNzk3NzY1OC4uNzQwMzU5MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dENyZWF0ZUxpc3RlbmVyL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0Q3JlYXRlTGlzdGVuZXIvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0xOCwxMyArMTgsMTMgQEAKIC0tPgogCiA8d2ViLWFwcCB2ZXJzaW9uPSIzLjAiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzNfMC54c2QiPgotICAgICAKKwogICAgIDxzZXJ2bGV0PgogICAgICAgICA8c2VydmxldC1uYW1lPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuVGVzdFNlcnZsZXQ8L3NlcnZsZXQtY2xhc3M+CiAgICAgICAgIDxhc3luYy1zdXBwb3J0ZWQ+dHJ1ZTwvYXN5bmMtc3VwcG9ydGVkPgotICAgIDwvc2VydmxldD4gIAotICAgIAorICAgIDwvc2VydmxldD4KKwogICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+VGVzdFNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi9UZXN0U2VydmxldDwvdXJsLXBhdHRlcm4+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0RGlzcGF0Y2hDcm9zc0NvbnRleHQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dERpc3BhdGNoQ3Jvc3NDb250ZXh0L1dlYlRlc3QuamF2YQppbmRleCBhNTUxYWUxLi5kYjBhNTI0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0RGlzcGF0Y2hDcm9zc0NvbnRleHQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHREaXNwYXRjaENyb3NzQ29udGV4dC9XZWJUZXN0LmphdmEKQEAgLTIyLDcgKzIyLDcgQEAKICAqIFVuaXQgdGVzdCBmb3IgY3Jvc3MtY29udGV4dCBBU1lOQyBkaXNwYXRjaC4KICAqCiAgKiBUaGlzIHVuaXQgdGVzdCBhY2Nlc3NlcyBzZXJ2bGV0ICJkaXNwYXRjaEZyb20iIGluIGNvbnRleHQgImZyb21Db250ZXh0IiwKLSAqIHdoaWNoIGluaXRpYXRlcyBhbiBBU1lOQyBkaXNwYXRjaCB0byBzZXJ2bGV0ICJkaXNwYXRjaFRvIiBpbiBjb250ZXh0IAorICogd2hpY2ggaW5pdGlhdGVzIGFuIEFTWU5DIGRpc3BhdGNoIHRvIHNlcnZsZXQgImRpc3BhdGNoVG8iIGluIGNvbnRleHQKICAqICJ0b0NvbnRleHQiLgogICovCiBwdWJsaWMgY2xhc3MgV2ViVGVzdCB7CkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgIGhvc3QgPSBhcmdzWzBdOwogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGNyb3NzLWNvbnRleHQgYXN5bmMgZGlzcGF0Y2giKTsKQEAgLTU1LDExICs1NSwxMSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArCiAgICAgICAgICAgICAiL2Zyb21Db250ZXh0L2Rpc3BhdGNoRnJvbT9teW5hbWU9bXl2YWx1ZSIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0RGlzcGF0Y2hDcm9zc0NvbnRleHQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHREaXNwYXRjaENyb3NzQ29udGV4dC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGJhYzAwNTcuLjA4MDk4M2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHREaXNwYXRjaENyb3NzQ29udGV4dC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHREaXNwYXRjaENyb3NzQ29udGV4dC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNCArMTUsMTQgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjAtYXN5bmMtY29udGV4dC1kaXNwYXRjaC1jcm9zcy1jb250ZXh0Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC1hc3luYy1jb250ZXh0LWRpc3BhdGNoLWNyb3NzLWNvbnRleHQiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImZyb21Db250ZXh0LndhciIgdmFsdWU9ImZyb21Db250ZXh0LndhciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dERpc3BhdGNoQ3Jvc3NDb250ZXh0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHREaXNwYXRjaENyb3NzQ29udGV4dC9idWlsZC54bWwKaW5kZXggY2NkZGNiNC4uYjMyNTU0NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dERpc3BhdGNoQ3Jvc3NDb250ZXh0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0RGlzcGF0Y2hDcm9zc0NvbnRleHQvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KICAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHtmcm9tQ29udGV4dC53YXJ9Ii8+CkBAIC01MCw4ICs1MCw4IEBACiAgICAgICAgIDxkZWxldGUgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIi8+CiAgICAgICAgIDxlYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciIgYXBweG1sPSIke2FwcGxpY2F0aW9uLnhtbH0iPgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmRpcn0iIGluY2x1ZGVzPSIqLndhciIvPgotICAgICAgICA8L2Vhcj4gCi0gICAgPC90YXJnZXQ+IAorICAgICAgICA8L2Vhcj4KKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KQEAgLTY0LDggKzY0LDggQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgICAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03Niw3ICs3Niw3IEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dERpc3BhdGNoQ3Jvc3NDb250ZXh0L2Rlc2NyaXB0b3IvZnJvbV93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dERpc3BhdGNoQ3Jvc3NDb250ZXh0L2Rlc2NyaXB0b3IvZnJvbV93ZWIueG1sCmluZGV4IGRkZGFmZjUuLjYzZjZhODIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHREaXNwYXRjaENyb3NzQ29udGV4dC9kZXNjcmlwdG9yL2Zyb21fd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0RGlzcGF0Y2hDcm9zc0NvbnRleHQvZGVzY3JpcHRvci9mcm9tX3dlYi54bWwKQEAgLTE4LDEyICsxOCwxMiBAQAogLS0+CiAKIDx3ZWItYXBwIHZlcnNpb249IjMuMCIgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfM18wLnhzZCI+Ci0gICAgIAorCiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+RGlzcGF0Y2hGcm9tPC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuRGlzcGF0Y2hGcm9tPC9zZXJ2bGV0LWNsYXNzPgogICAgICAgICA8YXN5bmMtc3VwcG9ydGVkPnRydWU8L2FzeW5jLXN1cHBvcnRlZD4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAKICAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPkRpc3BhdGNoRnJvbTwvc2VydmxldC1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dERpc3BhdGNoQ3Jvc3NDb250ZXh0L2Rlc2NyaXB0b3IvdG9fd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHREaXNwYXRjaENyb3NzQ29udGV4dC9kZXNjcmlwdG9yL3RvX3dlYi54bWwKaW5kZXggOTVkMGMzOC4uYjdkYWJmYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dERpc3BhdGNoQ3Jvc3NDb250ZXh0L2Rlc2NyaXB0b3IvdG9fd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0RGlzcGF0Y2hDcm9zc0NvbnRleHQvZGVzY3JpcHRvci90b193ZWIueG1sCkBAIC0xOCwxMiArMTgsMTIgQEAKIC0tPgogCiA8d2ViLWFwcCB2ZXJzaW9uPSIzLjAiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzNfMC54c2QiPgotICAgICAKKwogICAgIDxzZXJ2bGV0PgogICAgICAgICA8c2VydmxldC1uYW1lPkRpc3BhdGNoVG88L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5EaXNwYXRjaFRvPC9zZXJ2bGV0LWNsYXNzPgogICAgICAgICA8YXN5bmMtc3VwcG9ydGVkPnRydWU8L2FzeW5jLXN1cHBvcnRlZD4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAKICAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPkRpc3BhdGNoVG88L3NlcnZsZXQtbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHREaXNwYXRjaENyb3NzQ29udGV4dC9zZXJ2bGV0L3Rlc3QvRGlzcGF0Y2hGcm9tLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0RGlzcGF0Y2hDcm9zc0NvbnRleHQvc2VydmxldC90ZXN0L0Rpc3BhdGNoRnJvbS5qYXZhCmluZGV4IDU0ZjRlYjAuLmNiNzhiYTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHREaXNwYXRjaENyb3NzQ29udGV4dC9zZXJ2bGV0L3Rlc3QvRGlzcGF0Y2hGcm9tLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dERpc3BhdGNoQ3Jvc3NDb250ZXh0L3NlcnZsZXQvdGVzdC9EaXNwYXRjaEZyb20uamF2YQpAQCAtNDQsNiArNDQsNiBAQAogICAgICAgICAgICAgICAgICAgICBhYy5kaXNwYXRjaCh0b0NvbnRleHQsICIvZGlzcGF0Y2hUbyIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0sCi0JICAgIDUwMDApOworICAgICAgICA1MDAwKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0RGlzcGF0Y2hUb1BhdGgvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dERpc3BhdGNoVG9QYXRoL1dlYlRlc3QuamF2YQppbmRleCA3YmJlMTljLi5hNzE1ZTQ4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0RGlzcGF0Y2hUb1BhdGgvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHREaXNwYXRjaFRvUGF0aC9XZWJUZXN0LmphdmEKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEFzeW5jQ29udGV4dCNkaXNwYXRjaCIpOwpAQCAtNTMsMTEgKzUzLDExIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CiAgICAgICAgICAgICArIGNvbnRleHRSb290ICsgIi9UZXN0U2VydmxldD90YXJnZXQ9RGlzcGF0Y2hUYXJnZXRXaXRoUGF0aCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0RGlzcGF0Y2hUb1BhdGgvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHREaXNwYXRjaFRvUGF0aC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDI2MjkyYmMuLjQzMTg1NDMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHREaXNwYXRjaFRvUGF0aC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHREaXNwYXRjaFRvUGF0aC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLWFzeW5jLWNvbnRleHQtZGlzcGF0Y2gtdG8tcGF0aCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dERpc3BhdGNoVG9QYXRoL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHREaXNwYXRjaFRvUGF0aC9idWlsZC54bWwKaW5kZXggZGIyY2EzNC4uNWZlM2VjNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dERpc3BhdGNoVG9QYXRoL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0RGlzcGF0Y2hUb1BhdGgvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwyMyArNDIsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MCw5ICs3MCw5IEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dERpc3BhdGNoVG9QYXRoL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHREaXNwYXRjaFRvUGF0aC9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggY2U4Y2MxZi4uOWVkYmExMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dERpc3BhdGNoVG9QYXRoL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0RGlzcGF0Y2hUb1BhdGgvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0xOCwxOCArMTgsMTggQEAKIC0tPgogCiA8d2ViLWFwcCB2ZXJzaW9uPSIzLjAiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzNfMC54c2QiPgotICAgICAKKwogICAgIDxzZXJ2bGV0PgogICAgICAgICA8c2VydmxldC1uYW1lPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuVGVzdFNlcnZsZXQ8L3NlcnZsZXQtY2xhc3M+CiAgICAgICAgIDxhc3luYy1zdXBwb3J0ZWQ+dHJ1ZTwvYXN5bmMtc3VwcG9ydGVkPgotICAgIDwvc2VydmxldD4gIAorICAgIDwvc2VydmxldD4KIAogICAgIDxzZXJ2bGV0PgogICAgICAgICA8c2VydmxldC1uYW1lPkRpc3BhdGNoVGFyZ2V0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuRGlzcGF0Y2hUYXJnZXQ8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCi0gICAgCisgICAgPC9zZXJ2bGV0PgorCiAgICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5UZXN0U2VydmxldDwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L1Rlc3RTZXJ2bGV0PC91cmwtcGF0dGVybj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHREaXNwYXRjaFRvUGF0aC9zZXJ2bGV0L3Rlc3QvVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHREaXNwYXRjaFRvUGF0aC9zZXJ2bGV0L3Rlc3QvVGVzdFNlcnZsZXQuamF2YQppbmRleCBlNDRkZGNhLi40NjlhNDJlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0RGlzcGF0Y2hUb1BhdGgvc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dERpc3BhdGNoVG9QYXRoL3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhCkBAIC00Myw2ICs0Myw2IEBACiAgICAgICAgICAgICAgICAgICAgIGFjLmRpc3BhdGNoKHRhcmdldCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSwKLQkgICAgNTAwMCk7CisgICAgICAgIDUwMDApOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHREaXNwYXRjaFdpdGhFeGNlcHRpb24vV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dERpc3BhdGNoV2l0aEV4Y2VwdGlvbi9XZWJUZXN0LmphdmEKaW5kZXggNjU2M2NmNC4uOGIwZjhkZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dERpc3BhdGNoV2l0aEV4Y2VwdGlvbi9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dERpc3BhdGNoV2l0aEV4Y2VwdGlvbi9XZWJUZXN0LmphdmEKQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgR0xBU1NGSVNILTE5MzY0Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDcsNyArNDcsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZCIpOwpAQCAtNjQsNyArNjQsNyBAQAogICAgICAgICBpZiAoRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxhc3RMaW5lKSkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxhc3RMaW5lKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dERpc3BhdGNoV2l0aEV4Y2VwdGlvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dERpc3BhdGNoV2l0aEV4Y2VwdGlvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGRjYjBkNjYuLmY0ZTRmNjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHREaXNwYXRjaFdpdGhFeGNlcHRpb24vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0RGlzcGF0Y2hXaXRoRXhjZXB0aW9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjAtYXN5bmMtY29udGV4dC1kaXNwYXRjaC13aXRoLWV4Y2VwdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dERpc3BhdGNoV2l0aEV4Y2VwdGlvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0RGlzcGF0Y2hXaXRoRXhjZXB0aW9uL2J1aWxkLnhtbAppbmRleCA5YWZiODUzLi4wZjdhZmI4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0RGlzcGF0Y2hXaXRoRXhjZXB0aW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0RGlzcGF0Y2hXaXRoRXhjZXB0aW9uL2J1aWxkLnhtbApAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NywyMyArNDcsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NSwxMCArNzUsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0RGlzcGF0Y2haZXJvQXJnL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHREaXNwYXRjaFplcm9BcmcvV2ViVGVzdC5qYXZhCmluZGV4IDk5ZGUyZDUuLjI0NTEyNDYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHREaXNwYXRjaFplcm9BcmcvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHREaXNwYXRjaFplcm9BcmcvV2ViVGVzdC5qYXZhCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBBc3luY0NvbnRleHQjZGlzcGF0Y2giKTsKQEAgLTUzLDExICs1MywxMSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZyB0YXJnZXQpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQKICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyB0YXJnZXQpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0RGlzcGF0Y2haZXJvQXJnL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0RGlzcGF0Y2haZXJvQXJnL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYjY4MmIzYy4uMTkxYTYzNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dERpc3BhdGNoWmVyb0FyZy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHREaXNwYXRjaFplcm9BcmcvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC1hc3luYy1jb250ZXh0LXplcm8tYXJnLWRpc3BhdGNoIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0RGlzcGF0Y2haZXJvQXJnL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHREaXNwYXRjaFplcm9BcmcvYnVpbGQueG1sCmluZGV4IGJlZDYwYTEuLmNmNWFmOTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHREaXNwYXRjaFplcm9BcmcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHREaXNwYXRjaFplcm9BcmcvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwyMyArNDIsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MCw5ICs3MCw5IEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dERpc3BhdGNoWmVyb0FyZy9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0RGlzcGF0Y2haZXJvQXJnL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCBiMDBiM2Q3Li43NDAzNTkzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0RGlzcGF0Y2haZXJvQXJnL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0RGlzcGF0Y2haZXJvQXJnL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMTgsMTIgKzE4LDEyIEBACiAtLT4KIAogPHdlYi1hcHAgdmVyc2lvbj0iMy4wIiB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8zXzAueHNkIj4KLSAgICAgCisKICAgICA8c2VydmxldD4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5UZXN0U2VydmxldDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LWNsYXNzPgogICAgICAgICA8YXN5bmMtc3VwcG9ydGVkPnRydWU8L2FzeW5jLXN1cHBvcnRlZD4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAKICAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0SGFzT3JpZ2luYWxSZXF1ZXN0QW5kUmVzcG9uc2UvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dEhhc09yaWdpbmFsUmVxdWVzdEFuZFJlc3BvbnNlL1dlYlRlc3QuamF2YQppbmRleCBlZjQ1ZTdjLi45NGNjMGI1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0SGFzT3JpZ2luYWxSZXF1ZXN0QW5kUmVzcG9uc2UvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHRIYXNPcmlnaW5hbFJlcXVlc3RBbmRSZXNwb25zZS9XZWJUZXN0LmphdmEKQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBBc3luY0NvbnRleHQjaGFzT3JpZ2luYWxSZXF1ZXN0QW5kUmVzcG9uc2UiKTsKQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmcgbW9kZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0SGFzT3JpZ2luYWxSZXF1ZXN0QW5kUmVzcG9uc2UvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHRIYXNPcmlnaW5hbFJlcXVlc3RBbmRSZXNwb25zZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDdmZDZmMGQuLmYwZmNmYWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHRIYXNPcmlnaW5hbFJlcXVlc3RBbmRSZXNwb25zZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHRIYXNPcmlnaW5hbFJlcXVlc3RBbmRSZXNwb25zZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLWFzeW5jLWNvbnRleHQtaGFzLW9yaWdpbmFsLXJlcXVlc3QtYW5kLXJlc3BvbnNlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0SGFzT3JpZ2luYWxSZXF1ZXN0QW5kUmVzcG9uc2UvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dEhhc09yaWdpbmFsUmVxdWVzdEFuZFJlc3BvbnNlL2J1aWxkLnhtbAppbmRleCBmMWMyMmFhLi5lZWQxZGNmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0SGFzT3JpZ2luYWxSZXF1ZXN0QW5kUmVzcG9uc2UvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHRIYXNPcmlnaW5hbFJlcXVlc3RBbmRSZXNwb25zZS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDIzICs0NCwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTcyLDEwICs3MiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHRNdWx0aXBsZURpc3BhdGNoL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHRNdWx0aXBsZURpc3BhdGNoL1dlYlRlc3QuamF2YQppbmRleCA2NzdlMGEwLi41OTQwOWFiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0TXVsdGlwbGVEaXNwYXRjaC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dE11bHRpcGxlRGlzcGF0Y2gvV2ViVGVzdC5qYXZhCkBAIC0xOSw3ICsxOSw3IEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci4qOwogCiAvKgotICogVW5pdCB0ZXN0IGZvciByZXBlYXRlZCBjYWxscyB0byBBc3luY0NvbnRleHQjZGlzcGF0Y2ggd2l0aCBvbmUgCisgKiBVbml0IHRlc3QgZm9yIHJlcGVhdGVkIGNhbGxzIHRvIEFzeW5jQ29udGV4dCNkaXNwYXRjaCB3aXRoIG9uZQogICogaW50ZXJ2ZW5pbmcgU2VydmxldFJlcXVlc3Qjc3RhcnRBc3luYy4gVGhpcyB1bml0IHRlc3QgYWxzbyBjaGVja3MKICAqIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBpbnRlcnZlbmluZyBTZXJ2bGV0UmVxdWVzdCNzdGFydEFzeW5jIG5vdGlmaWVzCiAgKiB0aGUgcmVnaXN0ZXJlZCBBc3luY0xpc3RlbmVyIGF0IGl0cyBvblN0YXJ0QXN5bmMgbWV0aG9kLCBhbmQgcHJvdmlkZXMKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEFzeW5jQ29udGV4dCNkaXNwYXRjaCIpOwpAQCAtNTksMTEgKzU5LDExIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IGdldEh0dHBVUkxDb25uZWN0aW9uKCIvVGVzdFNlcnZsZXQiKTsKICAgICAgICAgY29ubi5kaXNjb25uZWN0KCk7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHRNdWx0aXBsZURpc3BhdGNoL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0TXVsdGlwbGVEaXNwYXRjaC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGFkYjUzYjIuLmE5NDM0ODIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHRNdWx0aXBsZURpc3BhdGNoL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dE11bHRpcGxlRGlzcGF0Y2gvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC1hc3luYy1jb250ZXh0LW11bHRpcGxlLWRpc3BhdGNoIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0TXVsdGlwbGVEaXNwYXRjaC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0TXVsdGlwbGVEaXNwYXRjaC9idWlsZC54bWwKaW5kZXggZGIyY2EzNC4uNWZlM2VjNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dE11bHRpcGxlRGlzcGF0Y2gvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHRNdWx0aXBsZURpc3BhdGNoL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMjMgKzQyLDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzAsOSArNzAsOSBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHRNdWx0aXBsZURpc3BhdGNoL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHRNdWx0aXBsZURpc3BhdGNoL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCBiMDBiM2Q3Li43NDAzNTkzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0TXVsdGlwbGVEaXNwYXRjaC9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dE11bHRpcGxlRGlzcGF0Y2gvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0xOCwxMiArMTgsMTIgQEAKIC0tPgogCiA8d2ViLWFwcCB2ZXJzaW9uPSIzLjAiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzNfMC54c2QiPgotICAgICAKKwogICAgIDxzZXJ2bGV0PgogICAgICAgICA8c2VydmxldC1uYW1lPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuVGVzdFNlcnZsZXQ8L3NlcnZsZXQtY2xhc3M+CiAgICAgICAgIDxhc3luYy1zdXBwb3J0ZWQ+dHJ1ZTwvYXN5bmMtc3VwcG9ydGVkPgotICAgIDwvc2VydmxldD4gIAorICAgIDwvc2VydmxldD4KIAogICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+VGVzdFNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHRNdWx0aXBsZURpc3BhdGNoL3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dE11bHRpcGxlRGlzcGF0Y2gvc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggYjk1MjkwNi4uMzljODM5ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dE11bHRpcGxlRGlzcGF0Y2gvc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dE11bHRpcGxlRGlzcGF0Y2gvc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgICAgaWYgKCFyZXEuaXNBc3luY1N1cHBvcnRlZCgpKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbigiQXN5bmMgbm90IHN1cHBvcnRlZCB3aGVuIGl0IHNob3VsZCIpOwogICAgICAgICB9Ci0gICAKKwogICAgICAgICBpZiAocmVxLmdldERpc3BhdGNoZXJUeXBlKCkgPT0gRGlzcGF0Y2hlclR5cGUuUkVRVUVTVCkgewogICAgICAgICAgICAgLy8gQ29udGFpbmVyLWluaXRpYXRlZCBkaXNwYXRjaAogICAgICAgICAgICAgcmVxLnNldEF0dHJpYnV0ZSgiQUJDIiwgIkRFRiIpOwpAQCAtODAsNyArODAsNyBAQAogICAgICAgICAvKgogICAgICAgICAgKiBTZXJ2bGV0UmVxdWVzdCNzdGFydEFzeW5jIGNsZWFycyB0aGUgbGlzdCBvZiBBc3luY0xpc3RlbmVyCiAgICAgICAgICAqIGluc3RhbmNlcyByZWdpc3RlcmVkIHdpdGggdGhlIEFzeW5jQ29udGV4dCAtIGFmdGVyIGNhbGxpbmcKLSAgICAgICAgICogZWFjaCBBc3luY0xpc3RlbmVyIGF0IGl0cyBvblN0YXJ0QXN5bmMgbWV0aG9kLCB3aGljaCBpcyB0aGUgCisgICAgICAgICAqIGVhY2ggQXN5bmNMaXN0ZW5lciBhdCBpdHMgb25TdGFydEFzeW5jIG1ldGhvZCwgd2hpY2ggaXMgdGhlCiAgICAgICAgICAqIG1ldGhvZCB3ZSdyZSBpbi4KICAgICAgICAgICogUmVnaXN0ZXIgb3Vyc2VsdmVzIGFnYWluLCBzbyB3ZSBjb250aW51ZSB0byBnZXQgbm90aWZpZWQKICAgICAgICAgICovCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0U2V0VGltZW91dC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0U2V0VGltZW91dC9XZWJUZXN0LmphdmEKaW5kZXggOTg5MDRlMC4uMzYzMmQ3YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dFNldFRpbWVvdXQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHRTZXRUaW1lb3V0L1dlYlRlc3QuamF2YQpAQCAtMzksNyArMzksNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEFzeW5jTGlzdGVuZXIjb25UaW1lb3V0Iik7CkBAIC01MywxNSArNTMsMTUgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewogCiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gbnVsbDsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgaW5wdXQgPSBudWxsOwotICAgICAgIAotICAgICAgICB0cnkgeyAgICAgCisKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArCiAgICAgICAgICAgICAgICAgY29udGV4dFJvb3QgKyAiL1Rlc3RTZXJ2bGV0Iik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0U2V0VGltZW91dC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dFNldFRpbWVvdXQvYnVpbGQucHJvcGVydGllcwppbmRleCBlYzJhY2NjLi41NzZhZWNhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0U2V0VGltZW91dC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHRTZXRUaW1lb3V0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjAtYXN5bmMtY29udGV4dC1zZXQtdGltZW91dCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dFNldFRpbWVvdXQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dFNldFRpbWVvdXQvYnVpbGQueG1sCmluZGV4IDU1MGUxNjkuLjc1NDFmNzIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHRTZXRUaW1lb3V0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0U2V0VGltZW91dC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCkBAIC03MCw5ICs3MCw5IEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dFNldFRpbWVvdXQvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jQ29udGV4dFNldFRpbWVvdXQvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDc5Nzc2NTguLjc0MDM1OTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0NvbnRleHRTZXRUaW1lb3V0L2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNDb250ZXh0U2V0VGltZW91dC9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTE4LDEzICsxOCwxMyBAQAogLS0+CiAKIDx3ZWItYXBwIHZlcnNpb249IjMuMCIgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfM18wLnhzZCI+Ci0gICAgIAorCiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+VGVzdFNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5UZXN0U2VydmxldDwvc2VydmxldC1jbGFzcz4KICAgICAgICAgPGFzeW5jLXN1cHBvcnRlZD50cnVlPC9hc3luYy1zdXBwb3J0ZWQ+Ci0gICAgPC9zZXJ2bGV0PiAgCi0gICAgCisgICAgPC9zZXJ2bGV0PgorCiAgICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5UZXN0U2VydmxldDwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L1Rlc3RTZXJ2bGV0PC91cmwtcGF0dGVybj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0RlbGF5RGlzcGF0Y2hBbmRDb21wbGV0ZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNEZWxheURpc3BhdGNoQW5kQ29tcGxldGUvV2ViVGVzdC5qYXZhCmluZGV4IDVlNmE3ZjcuLmFhMDMzZGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0RlbGF5RGlzcGF0Y2hBbmRDb21wbGV0ZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jRGVsYXlEaXNwYXRjaEFuZENvbXBsZXRlL1dlYlRlc3QuamF2YQpAQCAtMzksNyArMzksNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGRlbGF5IGluIGFzeW5jIGRpc3BhdGNoIGFuZCBjb21wbGV0ZSIpOwpAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNEZWxheURpc3BhdGNoQW5kQ29tcGxldGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0RlbGF5RGlzcGF0Y2hBbmRDb21wbGV0ZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDFmYTE5NmYuLmE0YWIwMjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0RlbGF5RGlzcGF0Y2hBbmRDb21wbGV0ZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0RlbGF5RGlzcGF0Y2hBbmRDb21wbGV0ZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLWFzeW5jLWRlbGF5LWRpc3BhdGNoLWFuZC1jb21wbGV0ZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jRGVsYXlEaXNwYXRjaEFuZENvbXBsZXRlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0RlbGF5RGlzcGF0Y2hBbmRDb21wbGV0ZS9idWlsZC54bWwKaW5kZXggZGIyY2EzNC4uNWZlM2VjNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jRGVsYXlEaXNwYXRjaEFuZENvbXBsZXRlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNEZWxheURpc3BhdGNoQW5kQ29tcGxldGUvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwyMyArNDIsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MCw5ICs3MCw5IEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jRGVsYXlEaXNwYXRjaEFuZENvbXBsZXRlL3NlcnZsZXQvdGVzdC9UZXN0RmlsdGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNEZWxheURpc3BhdGNoQW5kQ29tcGxldGUvc2VydmxldC90ZXN0L1Rlc3RGaWx0ZXIuamF2YQppbmRleCBiMzlhMzBlLi45MTk2MDI5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNEZWxheURpc3BhdGNoQW5kQ29tcGxldGUvc2VydmxldC90ZXN0L1Rlc3RGaWx0ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNEZWxheURpc3BhdGNoQW5kQ29tcGxldGUvc2VydmxldC90ZXN0L1Rlc3RGaWx0ZXIuamF2YQpAQCAtMzEsNyArMzEsNyBAQAogCiAgICAgcHVibGljIHZvaWQgaW5pdChGaWx0ZXJDb25maWcgZmlsdGVyQ29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPj4+IGZpbHRlci5pbml0Iik7Ci0gICAgfSAgIAorICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvRmlsdGVyKFNlcnZsZXRSZXF1ZXN0IHJlcSwgU2VydmxldFJlc3BvbnNlIHJlcywKICAgICAgICAgICAgIEZpbHRlckNoYWluIGNoYWluKSB0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jTGlzdGVuZXJPbkNvbXBsZXRlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0xpc3RlbmVyT25Db21wbGV0ZS9XZWJUZXN0LmphdmEKaW5kZXggYzkwMmFkMy4uYWQ2NGRmZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jTGlzdGVuZXJPbkNvbXBsZXRlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNMaXN0ZW5lck9uQ29tcGxldGUvV2ViVGVzdC5qYXZhCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgQXN5bmNMaXN0ZW5lciNvbkNvbXBsZXRlIik7CkBAIC01NCw3ICs1NCw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nIG1vZGUpIHRocm93cyBFeGNlcHRpb24gewpAQCAtODQsNyArODQsNyBAQAogICAgICAgICAgICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSBpbnB1dC5jbG9zZSgpOwogICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZXgpIHt9CiAgICAgICAgICAgICBpZiAoY29ubiAhPSBudWxsKSBjb25uLmRpc2Nvbm5lY3QoKTsKLSAgICAgICAgfSAgICAgCisgICAgICAgIH0KICAgICB9CiAKICAgICBwcml2YXRlIEh0dHBVUkxDb25uZWN0aW9uIGdldEh0dHBVUkxDb25uZWN0aW9uKFN0cmluZyBwYXRoKSB0aHJvd3MgRXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0xpc3RlbmVyT25Db21wbGV0ZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jTGlzdGVuZXJPbkNvbXBsZXRlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMzJlMGNkMi4uYmUzYTlhZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jTGlzdGVuZXJPbkNvbXBsZXRlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jTGlzdGVuZXJPbkNvbXBsZXRlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjAtYXN5bmMtbGlzdGVuZXItb24tY29tcGxldGUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0xpc3RlbmVyT25Db21wbGV0ZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNMaXN0ZW5lck9uQ29tcGxldGUvYnVpbGQueG1sCmluZGV4IGRiMmNhMzQuLjVmZTNlYzUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0xpc3RlbmVyT25Db21wbGV0ZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jTGlzdGVuZXJPbkNvbXBsZXRlL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMjMgKzQyLDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzAsOSArNzAsOSBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0xpc3RlbmVyT25Db21wbGV0ZS9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNMaXN0ZW5lck9uQ29tcGxldGUvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDc5Nzc2NTguLjc0MDM1OTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0xpc3RlbmVyT25Db21wbGV0ZS9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jTGlzdGVuZXJPbkNvbXBsZXRlL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMTgsMTMgKzE4LDEzIEBACiAtLT4KIAogPHdlYi1hcHAgdmVyc2lvbj0iMy4wIiB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8zXzAueHNkIj4KLSAgICAgCisKICAgICA8c2VydmxldD4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5UZXN0U2VydmxldDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LWNsYXNzPgogICAgICAgICA8YXN5bmMtc3VwcG9ydGVkPnRydWU8L2FzeW5jLXN1cHBvcnRlZD4KLSAgICA8L3NlcnZsZXQ+ICAKLSAgICAKKyAgICA8L3NlcnZsZXQ+CisKICAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vVGVzdFNlcnZsZXQ8L3VybC1wYXR0ZXJuPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jTGlzdGVuZXJPbkVycm9yL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0xpc3RlbmVyT25FcnJvci9XZWJUZXN0LmphdmEKaW5kZXggZTQ0ZjgxOC4uZGMxZjQzOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jTGlzdGVuZXJPbkVycm9yL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNMaXN0ZW5lck9uRXJyb3IvV2ViVGVzdC5qYXZhCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgQXN5bmNMaXN0ZW5lciNvbkVycm9yIik7CkBAIC01NCwxNSArNTQsMTUgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewogCiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gbnVsbDsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgaW5wdXQgPSBudWxsOwotICAgICAgIAotICAgICAgICB0cnkgeyAgICAgCisKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArCiAgICAgICAgICAgICAgICAgY29udGV4dFJvb3QgKyAiL1Rlc3RTZXJ2bGV0Iik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNMaXN0ZW5lck9uRXJyb3IvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0xpc3RlbmVyT25FcnJvci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGM2NTBmNDEuLmEwNjc4YWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0xpc3RlbmVyT25FcnJvci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0xpc3RlbmVyT25FcnJvci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLWFzeW5jLWxpc3RlbmVyLW9uLWVycm9yIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNMaXN0ZW5lck9uRXJyb3IvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jTGlzdGVuZXJPbkVycm9yL2J1aWxkLnhtbAppbmRleCA1NTBlMTY5Li43NTQxZjcyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNMaXN0ZW5lck9uRXJyb3IvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0xpc3RlbmVyT25FcnJvci9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCkBAIC03MCw5ICs3MCw5IEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jTGlzdGVuZXJPbkVycm9yL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0xpc3RlbmVyT25FcnJvci9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggNzk3NzY1OC4uNzQwMzU5MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jTGlzdGVuZXJPbkVycm9yL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNMaXN0ZW5lck9uRXJyb3IvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0xOCwxMyArMTgsMTMgQEAKIC0tPgogCiA8d2ViLWFwcCB2ZXJzaW9uPSIzLjAiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzNfMC54c2QiPgotICAgICAKKwogICAgIDxzZXJ2bGV0PgogICAgICAgICA8c2VydmxldC1uYW1lPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuVGVzdFNlcnZsZXQ8L3NlcnZsZXQtY2xhc3M+CiAgICAgICAgIDxhc3luYy1zdXBwb3J0ZWQ+dHJ1ZTwvYXN5bmMtc3VwcG9ydGVkPgotICAgIDwvc2VydmxldD4gIAotICAgIAorICAgIDwvc2VydmxldD4KKwogICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+VGVzdFNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi9UZXN0U2VydmxldDwvdXJsLXBhdHRlcm4+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNMaXN0ZW5lck9uRXJyb3Ivc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNMaXN0ZW5lck9uRXJyb3Ivc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggMDRlNDk5NS4uOGI4ZmUxMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jTGlzdGVuZXJPbkVycm9yL3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0xpc3RlbmVyT25FcnJvci9zZXJ2bGV0L3Rlc3QvVGVzdFNlcnZsZXQuamF2YQpAQCAtMjksNyArMjksNyBAQAogICAgICAgICBpZiAoIXJlcS5pc0FzeW5jU3VwcG9ydGVkKCkpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKCJBc3luYyBub3Qgc3VwcG9ydGVkIHdoZW4gaXQgc2hvdWxkIik7CiAgICAgICAgIH0KLSAKKwogICAgICAgICBpZiAoIXJlcS5nZXREaXNwYXRjaGVyVHlwZSgpLmVxdWFscyhEaXNwYXRjaGVyVHlwZS5BU1lOQykpIHsKICAgICAgICAgICAgIC8vIENvbnRhaW5lci1pbml0aWF0ZWQgZGlzcGF0Y2gKICAgICAgICAgICAgIGZpbmFsIEFzeW5jQ29udGV4dCBhYyA9IHJlcS5zdGFydEFzeW5jKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNMaXN0ZW5lck9uVGltZW91dC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNMaXN0ZW5lck9uVGltZW91dC9XZWJUZXN0LmphdmEKaW5kZXggYjZmMGQ4ZS4uMTg0MjE4ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jTGlzdGVuZXJPblRpbWVvdXQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0xpc3RlbmVyT25UaW1lb3V0L1dlYlRlc3QuamF2YQpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEFzeW5jTGlzdGVuZXIjb25UaW1lb3V0Iik7CkBAIC01OCwxNSArNTgsMTUgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmcgbW9kZSwgU3RyaW5nIGV4cGVjdGVkUmVzcG9uc2UpIHRocm93cyBFeGNlcHRpb24gewogCiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gbnVsbDsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgaW5wdXQgPSBudWxsOwotICAgICAgIAotICAgICAgICB0cnkgeyAgICAgCisKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArCiAgICAgICAgICAgICAgICAgY29udGV4dFJvb3QgKyAiL0FzeW5jTGlzdGVuZXJUaW1lb3V0U2VydmxldD8iICsgbW9kZSk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNMaXN0ZW5lck9uVGltZW91dC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jTGlzdGVuZXJPblRpbWVvdXQvYnVpbGQucHJvcGVydGllcwppbmRleCBlMmU5YjVhLi4yZWNkMjc5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNMaXN0ZW5lck9uVGltZW91dC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0xpc3RlbmVyT25UaW1lb3V0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjAtYXN5bmMtbGlzdGVuZXItb24tdGltZW91dCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jTGlzdGVuZXJPblRpbWVvdXQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jTGlzdGVuZXJPblRpbWVvdXQvYnVpbGQueG1sCmluZGV4IGFjYTg1ZDYuLjJhYWJkNjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0xpc3RlbmVyT25UaW1lb3V0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNMaXN0ZW5lck9uVGltZW91dC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiIGRlYnVnPSJ0cnVlIgpAQCAtNzAsOSArNzAsOSBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0xpc3RlbmVyT25UaW1lb3V0L2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0xpc3RlbmVyT25UaW1lb3V0L2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCAyMDY3ZTIyLi5kODBiZDg1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNMaXN0ZW5lck9uVGltZW91dC9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jTGlzdGVuZXJPblRpbWVvdXQvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0xOCwxMyArMTgsMTMgQEAKIC0tPgogCiA8d2ViLWFwcCB2ZXJzaW9uPSIzLjAiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzNfMC54c2QiPgotICAgICAKKwogICAgIDxzZXJ2bGV0PgogICAgICAgICA8c2VydmxldC1uYW1lPkFzeW5jTGlzdGVuZXJUaW1lb3V0U2VydmxldDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LkFzeW5jTGlzdGVuZXJUaW1lb3V0U2VydmxldDwvc2VydmxldC1jbGFzcz4KICAgICAgICAgPGFzeW5jLXN1cHBvcnRlZD50cnVlPC9hc3luYy1zdXBwb3J0ZWQ+Ci0gICAgPC9zZXJ2bGV0PiAgCi0gICAgCisgICAgPC9zZXJ2bGV0PgorCiAgICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5Bc3luY0xpc3RlbmVyVGltZW91dFNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi9Bc3luY0xpc3RlbmVyVGltZW91dFNlcnZsZXQ8L3VybC1wYXR0ZXJuPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jTGlzdGVuZXJPblRpbWVvdXREaXNwYXRjaC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNMaXN0ZW5lck9uVGltZW91dERpc3BhdGNoL1dlYlRlc3QuamF2YQppbmRleCA0NDA0NjZhLi4xZjUwM2JiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNMaXN0ZW5lck9uVGltZW91dERpc3BhdGNoL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNMaXN0ZW5lck9uVGltZW91dERpc3BhdGNoL1dlYlRlc3QuamF2YQpAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIElUIDExNzM5Iik7CkBAIC01NywxNSArNTcsMTUgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmcgcGF0aCwgU3RyaW5nIG1vZGUsIFN0cmluZyBleHBlY3RlZFJlc3BvbnNlKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IG51bGw7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gbnVsbDsKLSAgICAgICAKLSAgICAgICAgdHJ5IHsgICAgIAorCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQgKwogICAgICAgICAgICAgICAgIGNvbnRleHRSb290ICsgIi8iICsgcGF0aCArICI/IiArIG1vZGUpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jTGlzdGVuZXJPblRpbWVvdXREaXNwYXRjaC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jTGlzdGVuZXJPblRpbWVvdXREaXNwYXRjaC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDVhMWEyZTQuLjM1ZDE4MmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0xpc3RlbmVyT25UaW1lb3V0RGlzcGF0Y2gvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNMaXN0ZW5lck9uVGltZW91dERpc3BhdGNoL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjAtYXN5bmMtbGlzdGVuZXItb24tdGltZW91dC1kaXNwYXRjaCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jTGlzdGVuZXJPblRpbWVvdXREaXNwYXRjaC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNMaXN0ZW5lck9uVGltZW91dERpc3BhdGNoL2J1aWxkLnhtbAppbmRleCA3YTIyMGRiLi5mYTRlMzA4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNMaXN0ZW5lck9uVGltZW91dERpc3BhdGNoL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNMaXN0ZW5lck9uVGltZW91dERpc3BhdGNoL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgICAgPGRlbGV0ZSBmaWxlPSJXZWJUZXN0LmNsYXNzIi8+CiAgICAgICA8ZGVsZXRlIGZpbGU9IlJlUnVuQ29uZi50eHQiLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwxOSArNDQsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIiBkZWJ1Zz0idHJ1ZSIKQEAgLTcyLDkgKzcyLDkgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNMaXN0ZW5lck9uVGltZW91dERpc3BhdGNoL3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jTGlzdGVuZXJPblRpbWVvdXREaXNwYXRjaC9zZXJ2bGV0L3Rlc3QvVGVzdFNlcnZsZXQuamF2YQppbmRleCBlNDJlYmM0Li5jMjVhZWE1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNMaXN0ZW5lck9uVGltZW91dERpc3BhdGNoL3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY0xpc3RlbmVyT25UaW1lb3V0RGlzcGF0Y2gvc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICAgICAgICAgIHNiLmFwcGVuZCgiLCAiKTsKICAgICAgICAgICAgIHNiLmFwcGVuZChhdHRyQik7CiAgICAgICAgIH0KLSAgICAgICAgU3RyaW5nIG91dHB1dCA9IHNiLnRvU3RyaW5nKCk7IAorICAgICAgICBTdHJpbmcgb3V0cHV0ID0gc2IudG9TdHJpbmcoKTsKICAgICAgICAgd3JpdGVyLndyaXRlKG91dHB1dCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihvdXRwdXQpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1N0YXJ0T3V0c2lkZUFzeW5jRGlzcGF0Y2hTY29wZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNTdGFydE91dHNpZGVBc3luY0Rpc3BhdGNoU2NvcGUvV2ViVGVzdC5qYXZhCmluZGV4IDkxZDhiYjIuLjE3ZjdkODggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1N0YXJ0T3V0c2lkZUFzeW5jRGlzcGF0Y2hTY29wZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jU3RhcnRPdXRzaWRlQXN5bmNEaXNwYXRjaFNjb3BlL1dlYlRlc3QuamF2YQpAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24gewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgQ1IgNjg5NTE4NyIpOwpAQCAtNTQsMTEgKzU0LDExIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QgKwogICAgICAgICAgICAgIi9UZXN0U2VydmxldCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CkBAIC05OCw3ICs5OCw3IEBACiAKICAgICAgICAgaWYgKCFFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIk1pc3Npbmcgb3IgdW5leHBlY3RlZCByZXNwb25zZSBib2R5LCAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkOiAiICsgRVhQRUNURURfUkVTUE9OU0UgKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkOiAiICsgRVhQRUNURURfUkVTUE9OU0UgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jU3RhcnRPdXRzaWRlQXN5bmNEaXNwYXRjaFNjb3BlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNTdGFydE91dHNpZGVBc3luY0Rpc3BhdGNoU2NvcGUvYnVpbGQucHJvcGVydGllcwppbmRleCBmOTBjMGY4Li5jODY3Zjk1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNTdGFydE91dHNpZGVBc3luY0Rpc3BhdGNoU2NvcGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNTdGFydE91dHNpZGVBc3luY0Rpc3BhdGNoU2NvcGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC1hc3luYy1zdGFydC1vdXRzaWRlLWFzeW5jLWRpc3BhdGNoLXNjb3BlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNTdGFydE91dHNpZGVBc3luY0Rpc3BhdGNoU2NvcGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jU3RhcnRPdXRzaWRlQXN5bmNEaXNwYXRjaFNjb3BlL2J1aWxkLnhtbAppbmRleCBkYjJjYTM0Li41ZmUzZWM1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNTdGFydE91dHNpZGVBc3luY0Rpc3BhdGNoU2NvcGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1N0YXJ0T3V0c2lkZUFzeW5jRGlzcGF0Y2hTY29wZS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDIzICs0MiwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTcwLDkgKzcwLDkgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNTdGFydE91dHNpZGVBc3luY0Rpc3BhdGNoU2NvcGUvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jU3RhcnRPdXRzaWRlQXN5bmNEaXNwYXRjaFNjb3BlL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCBiMDBiM2Q3Li43NDAzNTkzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNTdGFydE91dHNpZGVBc3luY0Rpc3BhdGNoU2NvcGUvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1N0YXJ0T3V0c2lkZUFzeW5jRGlzcGF0Y2hTY29wZS9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTE4LDEyICsxOCwxMiBAQAogLS0+CiAKIDx3ZWItYXBwIHZlcnNpb249IjMuMCIgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfM18wLnhzZCI+Ci0gICAgIAorCiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+VGVzdFNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5UZXN0U2VydmxldDwvc2VydmxldC1jbGFzcz4KICAgICAgICAgPGFzeW5jLXN1cHBvcnRlZD50cnVlPC9hc3luYy1zdXBwb3J0ZWQ+Ci0gICAgPC9zZXJ2bGV0PiAgCisgICAgPC9zZXJ2bGV0PgogCiAgICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5UZXN0U2VydmxldDwvc2VydmxldC1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jU3RhcnRPdXRzaWRlQXN5bmNEaXNwYXRjaFNjb3BlL3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jU3RhcnRPdXRzaWRlQXN5bmNEaXNwYXRjaFNjb3BlL3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhCmluZGV4IDhlZWM0MDEuLjc0Y2I3ZDUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1N0YXJ0T3V0c2lkZUFzeW5jRGlzcGF0Y2hTY29wZS9zZXJ2bGV0L3Rlc3QvVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNTdGFydE91dHNpZGVBc3luY0Rpc3BhdGNoU2NvcGUvc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTU2LDcgKzU2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0sCi0JICAgICAgICA1MDAwKTsKKyAgICAgICAgICAgIDUwMDApOwogICAgICAgICB9IGVsc2UgaWYgKHJlcS5nZXREaXNwYXRjaGVyVHlwZSgpID09IERpc3BhdGNoZXJUeXBlLkFTWU5DKSB7CiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogU2xlZXAgZHVyaW5nIHRoZSBBU1lOQyBkaXNwYXRjaCwgd2hpY2ggaXMgZXhlY3V0ZWQgb24gYQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jU3VwcG9ydGVkRmFsc2UvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jU3VwcG9ydGVkRmFsc2UvV2ViVGVzdC5qYXZhCmluZGV4IDZkNzZmYTcuLmZjNzk3NTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1N1cHBvcnRlZEZhbHNlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNTdXBwb3J0ZWRGYWxzZS9XZWJUZXN0LmphdmEKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBhc3luYy1zdXBwb3J0ZWQiKTsKQEAgLTU1LDExICs1NSwxMSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgICArIGNvbnRleHRSb290ICsgIi9UZXN0U2VydmxldCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNTdXBwb3J0ZWRGYWxzZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jU3VwcG9ydGVkRmFsc2UvYnVpbGQucHJvcGVydGllcwppbmRleCA2MWYyZDczLi4xYjlkODI0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNTdXBwb3J0ZWRGYWxzZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1N1cHBvcnRlZEZhbHNlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjAtYXN5bmMtc3VwcG9ydGVkLWZhbHNlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNTdXBwb3J0ZWRGYWxzZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNTdXBwb3J0ZWRGYWxzZS9idWlsZC54bWwKaW5kZXggZGIyY2EzNC4uNWZlM2VjNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jU3VwcG9ydGVkRmFsc2UvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1N1cHBvcnRlZEZhbHNlL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMjMgKzQyLDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzAsOSArNzAsOSBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1N1cHBvcnRlZEZhbHNlL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1N1cHBvcnRlZEZhbHNlL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCBmZjFiNGNmLi41YzFhNzRhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNTdXBwb3J0ZWRGYWxzZS9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jU3VwcG9ydGVkRmFsc2UvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0xOCwyMyArMTgsMjMgQEAKIC0tPgogCiA8d2ViLWFwcCB2ZXJzaW9uPSIzLjAiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzNfMC54c2QiPgotICAgICAKKwogICAgIDxmaWx0ZXI+CiAgICAgICAgIDxmaWx0ZXItbmFtZT5UZXN0RmlsdGVyPC9maWx0ZXItbmFtZT4KICAgICAgICAgPGZpbHRlci1jbGFzcz50ZXN0LlRlc3RGaWx0ZXI8L2ZpbHRlci1jbGFzcz4KLSAgICA8L2ZpbHRlcj4gICAgCisgICAgPC9maWx0ZXI+CiAKICAgICA8ZmlsdGVyLW1hcHBpbmc+CiAgICAgICAgIDxmaWx0ZXItbmFtZT5UZXN0RmlsdGVyPC9maWx0ZXItbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5UZXN0U2VydmxldDwvc2VydmxldC1uYW1lPgogICAgIDwvZmlsdGVyLW1hcHBpbmc+Ci0gICAgICAgIAorCiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+VGVzdFNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5UZXN0U2VydmxldDwvc2VydmxldC1jbGFzcz4KICAgICAgICAgPGFzeW5jLXN1cHBvcnRlZD50cnVlPC9hc3luYy1zdXBwb3J0ZWQ+Ci0gICAgPC9zZXJ2bGV0PiAgCi0gICAgCisgICAgPC9zZXJ2bGV0PgorCiAgICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5UZXN0U2VydmxldDwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L1Rlc3RTZXJ2bGV0PC91cmwtcGF0dGVybj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1N1cHBvcnRlZFRydWVEZWNsYXJhdGl2ZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNTdXBwb3J0ZWRUcnVlRGVjbGFyYXRpdmUvV2ViVGVzdC5qYXZhCmluZGV4IGIwNzEyMWEuLmQ1M2I5ZDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1N1cHBvcnRlZFRydWVEZWNsYXJhdGl2ZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jU3VwcG9ydGVkVHJ1ZURlY2xhcmF0aXZlL1dlYlRlc3QuamF2YQpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGFzeW5jLXN1cHBvcnRlZCIpOwpAQCAtNTUsMTEgKzU1LDExIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL1Rlc3RTZXJ2bGV0Iik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1N1cHBvcnRlZFRydWVEZWNsYXJhdGl2ZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jU3VwcG9ydGVkVHJ1ZURlY2xhcmF0aXZlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggODlkMTY3Yi4uYWEyZDMyNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jU3VwcG9ydGVkVHJ1ZURlY2xhcmF0aXZlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jU3VwcG9ydGVkVHJ1ZURlY2xhcmF0aXZlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjAtYXN5bmMtc3VwcG9ydGVkLXRydWUtZGVjbGFyYXRpdmUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1N1cHBvcnRlZFRydWVEZWNsYXJhdGl2ZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNTdXBwb3J0ZWRUcnVlRGVjbGFyYXRpdmUvYnVpbGQueG1sCmluZGV4IGRiMmNhMzQuLjVmZTNlYzUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1N1cHBvcnRlZFRydWVEZWNsYXJhdGl2ZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jU3VwcG9ydGVkVHJ1ZURlY2xhcmF0aXZlL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMjMgKzQyLDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzAsOSArNzAsOSBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1N1cHBvcnRlZFRydWVEZWNsYXJhdGl2ZS9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNTdXBwb3J0ZWRUcnVlRGVjbGFyYXRpdmUvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IGExNTVlM2UuLmI5MjgzNWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1N1cHBvcnRlZFRydWVEZWNsYXJhdGl2ZS9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jU3VwcG9ydGVkVHJ1ZURlY2xhcmF0aXZlL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMTgsMjQgKzE4LDI0IEBACiAtLT4KIAogPHdlYi1hcHAgdmVyc2lvbj0iMy4wIiB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8zXzAueHNkIj4KLSAgICAgCisKICAgICA8ZmlsdGVyPgogICAgICAgICA8ZmlsdGVyLW5hbWU+VGVzdEZpbHRlcjwvZmlsdGVyLW5hbWU+CiAgICAgICAgIDxmaWx0ZXItY2xhc3M+dGVzdC5UZXN0RmlsdGVyPC9maWx0ZXItY2xhc3M+CiAgICAgICAgIDxhc3luYy1zdXBwb3J0ZWQ+dHJ1ZTwvYXN5bmMtc3VwcG9ydGVkPgotICAgIDwvZmlsdGVyPiAgICAKKyAgICA8L2ZpbHRlcj4KIAogICAgIDxmaWx0ZXItbWFwcGluZz4KICAgICAgICAgPGZpbHRlci1uYW1lPlRlc3RGaWx0ZXI8L2ZpbHRlci1uYW1lPgogICAgICAgICA8c2VydmxldC1uYW1lPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CiAgICAgPC9maWx0ZXItbWFwcGluZz4KLSAgICAgICAgCisKICAgICA8c2VydmxldD4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5UZXN0U2VydmxldDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LWNsYXNzPgogICAgICAgICA8YXN5bmMtc3VwcG9ydGVkPnRydWU8L2FzeW5jLXN1cHBvcnRlZD4KLSAgICA8L3NlcnZsZXQ+ICAKLSAgICAKKyAgICA8L3NlcnZsZXQ+CisKICAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vVGVzdFNlcnZsZXQ8L3VybC1wYXR0ZXJuPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jU3VwcG9ydGVkVHJ1ZVByb2dyYW1tYXRpYy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNTdXBwb3J0ZWRUcnVlUHJvZ3JhbW1hdGljL1dlYlRlc3QuamF2YQppbmRleCA2ZmUzN2ZmLi4zM2YwOWQxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNTdXBwb3J0ZWRUcnVlUHJvZ3JhbW1hdGljL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNTdXBwb3J0ZWRUcnVlUHJvZ3JhbW1hdGljL1dlYlRlc3QuamF2YQpAQCAtNDIsNyArNDIsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGFzeW5jLXN1cHBvcnRlZCIpOwpAQCAtNTYsMTEgKzU2LDExIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL25ld1NlcnZsZXQiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jU3VwcG9ydGVkVHJ1ZVByb2dyYW1tYXRpYy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jU3VwcG9ydGVkVHJ1ZVByb2dyYW1tYXRpYy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDE3YTY5YzAuLjAzY2I4NjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1N1cHBvcnRlZFRydWVQcm9ncmFtbWF0aWMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNTdXBwb3J0ZWRUcnVlUHJvZ3JhbW1hdGljL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjAtYXN5bmMtc3VwcG9ydGVkLXRydWUtcHJvZ3JhbW1hdGljIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNTdXBwb3J0ZWRUcnVlUHJvZ3JhbW1hdGljL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1N1cHBvcnRlZFRydWVQcm9ncmFtbWF0aWMvYnVpbGQueG1sCmluZGV4IGRiMmNhMzQuLjVmZTNlYzUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1N1cHBvcnRlZFRydWVQcm9ncmFtbWF0aWMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1N1cHBvcnRlZFRydWVQcm9ncmFtbWF0aWMvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwyMyArNDIsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MCw5ICs3MCw5IEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jU3VwcG9ydGVkVHJ1ZVByb2dyYW1tYXRpYy9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNTdXBwb3J0ZWRUcnVlUHJvZ3JhbW1hdGljL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCAzMDAyN2ZmLi5mMWZlNTFlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNTdXBwb3J0ZWRUcnVlUHJvZ3JhbW1hdGljL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNTdXBwb3J0ZWRUcnVlUHJvZ3JhbW1hdGljL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMTgsNyArMTgsNyBAQAogLS0+CiAKIDx3ZWItYXBwIHZlcnNpb249IjMuMCIgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfM18wLnhzZCI+Ci0gICAgIAorCiAgIDxsaXN0ZW5lcj4KICAgICA8bGlzdGVuZXItY2xhc3M+dGVzdC5NeUxpc3RlbmVyPC9saXN0ZW5lci1jbGFzcz4KICAgPC9saXN0ZW5lcj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1N1cHBvcnRlZFRydWVQcm9ncmFtbWF0aWMvc2VydmxldC90ZXN0L015TGlzdGVuZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1N1cHBvcnRlZFRydWVQcm9ncmFtbWF0aWMvc2VydmxldC90ZXN0L015TGlzdGVuZXIuamF2YQppbmRleCBmYjhhZWI1Li5jNzczY2ExIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNTdXBwb3J0ZWRUcnVlUHJvZ3JhbW1hdGljL3NlcnZsZXQvdGVzdC9NeUxpc3RlbmVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jU3VwcG9ydGVkVHJ1ZVByb2dyYW1tYXRpYy9zZXJ2bGV0L3Rlc3QvTXlMaXN0ZW5lci5qYXZhCkBAIC02NSw3ICs2NSw3IEBACiAgICAgICAgIEZpbHRlclJlZ2lzdHJhdGlvbi5EeW5hbWljIGZyID0gc2MuYWRkRmlsdGVyKAogICAgICAgICAgICAgIk5ld0ZpbHRlciIsICJ0ZXN0Lk5ld0ZpbHRlciIpOwogICAgICAgICBmci5hZGRNYXBwaW5nRm9yU2VydmxldE5hbWVzKEVudW1TZXQub2YoRGlzcGF0Y2hlclR5cGUuUkVRVUVTVCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgIk5ld1NlcnZsZXQiKTsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgIk5ld1NlcnZsZXQiKTsKICAgICAgICAgZnIuc2V0QXN5bmNTdXBwb3J0ZWQodHJ1ZSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jVGltZW91dE5vTGlzdGVuZXIvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jVGltZW91dE5vTGlzdGVuZXIvV2ViVGVzdC5qYXZhCmluZGV4IDc5OGM2ZWYuLjJjZmU3NDEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1RpbWVvdXROb0xpc3RlbmVyL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNUaW1lb3V0Tm9MaXN0ZW5lci9XZWJUZXN0LmphdmEKQEAgLTIxLDcgKzIxLDcgQEAKIC8qCiAgKiBVbml0IHRlc3QgZm9yIHRoZSBzcGVjIHJlcXVpcmVtZW50IHRoYXQgaWYgYW4gYXN5bmMgdGltZW91dCBvY2N1cnMsIGFuZAogICogdGhlcmUgYXJlIG5vIEFzeW5jTGlzdGVuZXJzIHJlZ2lzdGVyZWQsIHRoZSBjb250YWluZXIgTVVTVCBkbyBhbiBFUlJPUgotICogZGlzcGF0Y2ggd2l0aCBhIHN0YXR1cyBjb2RlIGVxdWFsIHRvIDUwMCwgd2hpY2ggaW4gdGhpcyB0ZXN0IGNhc2UgaXMgCisgKiBkaXNwYXRjaCB3aXRoIGEgc3RhdHVzIGNvZGUgZXF1YWwgdG8gNTAwLCB3aGljaCBpbiB0aGlzIHRlc3QgY2FzZSBpcwogICogbWFwcGVkIHRvIGVycm9yLmpzcCwgd2hpY2ggcmVzZXRzIHRoZSBzdGF0dXMgY29kZSB0byAyMDAgYW5kIG91dHB1dHMKICAqIHRoZSBzdHJpbmcgIlNVQ0NFU1MiIHRvIHRoZSByZXNwb25zZS4KICAqLwpAQCAtMzQsNyArMzQsNyBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEVYUEVDVEVEX1JFU1BPTlNFX0NPREUgPSAyMDA7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVYUEVDVEVEX1JFU1BPTlNFID0gIlNVQ0NFU1MiOwotICAgCisKICAgICBwcml2YXRlIFN0cmluZyBob3N0OwogICAgIHByaXZhdGUgU3RyaW5nIHBvcnQ7CiAgICAgcHJpdmF0ZSBTdHJpbmcgY29udGV4dFJvb3Q7CkBAIC00NCw3ICs0NCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgYXN5bmMgdGltZW91dCB3aXRob3V0ICIgKwpAQCAtNTgsMTEgKzU4LDExIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBudWxsOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBpbnB1dCA9IG51bGw7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1RpbWVvdXROb0xpc3RlbmVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNUaW1lb3V0Tm9MaXN0ZW5lci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGY1MmZmNzAuLjJmNjkxMWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1RpbWVvdXROb0xpc3RlbmVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jVGltZW91dE5vTGlzdGVuZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC1hc3luYy10aW1lb3V0LW5vLWxpc3RlbmVyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNUaW1lb3V0Tm9MaXN0ZW5lci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNUaW1lb3V0Tm9MaXN0ZW5lci9idWlsZC54bWwKaW5kZXggNTUwZTE2OS4uNzU0MWY3MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jVGltZW91dE5vTGlzdGVuZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1RpbWVvdXROb0xpc3RlbmVyL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKQEAgLTcwLDkgKzcwLDkgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNUaW1lb3V0Tm9MaXN0ZW5lci9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXN5bmNUaW1lb3V0Tm9MaXN0ZW5lci9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggNGNhNWMwYi4uMjgwMzQwMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2FzeW5jVGltZW91dE5vTGlzdGVuZXIvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hc3luY1RpbWVvdXROb0xpc3RlbmVyL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMTgsMTMgKzE4LDEzIEBACiAtLT4KIAogPHdlYi1hcHAgdmVyc2lvbj0iMy4wIiB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8zXzAueHNkIj4KLSAgICAgCisKICAgICA8c2VydmxldD4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5UZXN0U2VydmxldDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LWNsYXNzPgogICAgICAgICA8YXN5bmMtc3VwcG9ydGVkPnRydWU8L2FzeW5jLXN1cHBvcnRlZD4KLSAgICA8L3NlcnZsZXQ+ICAKLSAgICAKKyAgICA8L3NlcnZsZXQ+CisKICAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vVGVzdFNlcnZsZXQ8L3VybC1wYXR0ZXJuPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2F1dGhBbm5vdGF0aW9uSW5oZXJpdGFuY2UvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2F1dGhBbm5vdGF0aW9uSW5oZXJpdGFuY2UvV2ViVGVzdC5qYXZhCmluZGV4IDQ2ZGUyY2YuLjY2ZWFjZDAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hdXRoQW5ub3RhdGlvbkluaGVyaXRhbmNlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXV0aEFubm90YXRpb25Jbmhlcml0YW5jZS9XZWJUZXN0LmphdmEKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgICAgcG9ydCA9IEludGVnZXIucGFyc2VJbnQoYXJnc1sxXSk7CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBAU2VydmxldFNlY3VyaXR5IEluaGVyaXRhbmNlIik7CkBAIC01MCw3ICs1MCw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBydW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKQEAgLTEwNiw3ICsxMDYsNyBAQAogICAgICAgICAgICAgICAgICAgICBvayA9IG9rICYmIGV4cGVjdGVkLmVxdWFscyhsaW5lKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZXgpewotICAgICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOyAgIAorICAgICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlRlc3QgVU5QUkVESUNURUQtRkFJTFVSRSIpOwogICAgICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgICAgICB0cnkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2F1dGhBbm5vdGF0aW9uSW5oZXJpdGFuY2UvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hdXRoQW5ub3RhdGlvbkluaGVyaXRhbmNlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNzI3ZTMxYS4uZWI1MzM4MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2F1dGhBbm5vdGF0aW9uSW5oZXJpdGFuY2UvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXV0aEFubm90YXRpb25Jbmhlcml0YW5jZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLWF1dGgtYW5ub3RhdGlvbi1pbmhlcml0YW5jZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2F1dGhBbm5vdGF0aW9uSW5oZXJpdGFuY2UvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2F1dGhBbm5vdGF0aW9uSW5oZXJpdGFuY2UvYnVpbGQueG1sCmluZGV4IDlmMmQ3OTguLjEzZDQzMWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hdXRoQW5ub3RhdGlvbkluaGVyaXRhbmNlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXV0aEFubm90YXRpb25Jbmhlcml0YW5jZS9idWlsZC54bWwKQEAgLTM1LDcgKzM1LDcgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgICA8ZGVsZXRlIGZpbGU9IldlYlRlc3QuY2xhc3MiLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC01NywxMCArNTcsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTY4LDE0ICs2OCwxNCBAQAogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2FwcHNlcnYtcnQuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC05MCw3ICs5MCw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0b3JlIiBkZXBlbmRzPSJzZXR1cCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLXVzZXItY29tbW9uIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hdXRoQW5ub3RhdGlvbnMvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2F1dGhBbm5vdGF0aW9ucy9XZWJUZXN0LmphdmEKaW5kZXggYzgxM2E5My4uMzQ5YmQ0OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2F1dGhBbm5vdGF0aW9ucy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2F1dGhBbm5vdGF0aW9ucy9XZWJUZXN0LmphdmEKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgICAgcG9ydCA9IEludGVnZXIucGFyc2VJbnQoYXJnc1sxXSk7CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBAU2VydmxldFNlY3VyaXR5Iik7CkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiBydW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKQEAgLTcyLDcgKzcyLDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIGJvb2xlYW4gZG9XZWJNZXRob2QoU3RyaW5nIHdlYk1ldGhvZCwgU3RyaW5nIGhvc3QsIGludCBwb3J0LAotICAgICAgICAgICAgU3RyaW5nIGNvbnRleHRQYXRoLCBib29sZWFuIHJlcXVpcmVBdXRoZW50aWNhdGUsIAorICAgICAgICAgICAgU3RyaW5nIGNvbnRleHRQYXRoLCBib29sZWFuIHJlcXVpcmVBdXRoZW50aWNhdGUsCiAgICAgICAgICAgICBpbnQgcmVzcG9uc2VDb2RlLCBTdHJpbmcgZXhwZWN0ZWQpIHRocm93cyBFeGNlcHRpb24gewogCiAgICAgICAgIFN0cmluZyB1cmxTdHIgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRQYXRoOwpAQCAtMTAyLDcgKzEwMiw3IEBACiAgICAgICAgICAgICAgICAgICAgIG9rID0gb2sgJiYgZXhwZWN0ZWQuZXF1YWxzKGxpbmUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBleCl7Ci0gICAgICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7ICAgCisgICAgICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiVGVzdCBVTlBSRURJQ1RFRC1GQUlMVVJFIik7CiAgICAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgICAgIHRyeSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXV0aEFubm90YXRpb25zL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXV0aEFubm90YXRpb25zL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZjdiMGE4Zi4uNWUwMzExYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2F1dGhBbm5vdGF0aW9ucy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hdXRoQW5ub3RhdGlvbnMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC1hdXRoLWFubm90YXRpb25zIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXV0aEFubm90YXRpb25zL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hdXRoQW5ub3RhdGlvbnMvYnVpbGQueG1sCmluZGV4IDc1YmQ1YjYuLmNmNTRmMDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hdXRoQW5ub3RhdGlvbnMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hdXRoQW5ub3RhdGlvbnMvYnVpbGQueG1sCkBAIC0zNSw3ICszNSw3IEBACiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgICAgPGRlbGV0ZSBmaWxlPSJXZWJUZXN0LmNsYXNzIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNTcsMTAgKzU3LDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCkBAIC02OCwxNCArNjgsMTQgQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9hcHBzZXJ2LXJ0LmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtOTAsNyArOTAsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVzdG9yZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS11c2VyLWNvbW1vbiI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXV0aEFubm90YXRpb25zL3NlcnZsZXQvVGVzdFNlcnZsZXQyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvYXV0aEFubm90YXRpb25zL3NlcnZsZXQvVGVzdFNlcnZsZXQyLmphdmEKaW5kZXggN2UwM2JjNi4uNWNkYjVlNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2F1dGhBbm5vdGF0aW9ucy9zZXJ2bGV0L1Rlc3RTZXJ2bGV0Mi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9hdXRoQW5ub3RhdGlvbnMvc2VydmxldC9UZXN0U2VydmxldDIuamF2YQpAQCAtNDcsMTQgKzQ3LDE0IEBACiAgICAgICAgIHdyaXRlci53cml0ZSgicDpIZWxsbywgIiArIHJlcS5nZXRSZW1vdGVVc2VyKCkgKyAiXG4iKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb09wdGlvbnMoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpIAorICAgIHB1YmxpYyB2b2lkIGRvT3B0aW9ucyhIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlcykKICAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbiB7CiAKICAgICAgICAgUHJpbnRXcml0ZXIgd3JpdGVyID0gcmVzLmdldFdyaXRlcigpOwogICAgICAgICB3cml0ZXIud3JpdGUoIm86SGVsbG8iKTsKICAgICB9CiAKLSAgICBwcm90ZWN0ZWQgdm9pZCBkb1B1dChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlcykgCisgICAgcHJvdGVjdGVkIHZvaWQgZG9QdXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpCiAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24gewogCiAgICAgICAgIFByaW50V3JpdGVyIHdyaXRlciA9IHJlcy5nZXRXcml0ZXIoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9jb29raWVIdHRwT25seS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvY29va2llSHR0cE9ubHkvV2ViVGVzdC5qYXZhCmluZGV4IGZmYThkMTYuLjBmYmE2ODcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9jb29raWVIdHRwT25seS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2Nvb2tpZUh0dHBPbmx5L1dlYlRlc3QuamF2YQpAQCAtMzYsNyArMzYsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBIdHRwT25seSBjb29raWVzIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDUsNyArNDUsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2VTZXJ2bGV0KCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2Nvb2tpZUh0dHBPbmx5L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvY29va2llSHR0cE9ubHkvYnVpbGQucHJvcGVydGllcwppbmRleCBmMjdiMWFiLi42OGFkZTk5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvY29va2llSHR0cE9ubHkvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvY29va2llSHR0cE9ubHkvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC1jb29raWUtaHR0cC1vbmx5Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvY29va2llSHR0cE9ubHkvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2Nvb2tpZUh0dHBPbmx5L2J1aWxkLnhtbAppbmRleCBlOGEwNjdkLi5hZTg5MDczIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvY29va2llSHR0cE9ubHkvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9jb29raWVIdHRwT25seS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDIxICs0MiwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNjgsMTAgKzY4LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2RlZmF1bHRFcnJvclBhZ2UvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2RlZmF1bHRFcnJvclBhZ2UvV2ViVGVzdC5qYXZhCmluZGV4IGEzOTNlNGUuLjE0YmFlNjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9kZWZhdWx0RXJyb3JQYWdlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvZGVmYXVsdEVycm9yUGFnZS9XZWJUZXN0LmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgZGVmYXVsdCBlcnJvciBwYWdlIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDgsOCArNDgsOCBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvZGVmYXVsdEVycm9yUGFnZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2RlZmF1bHRFcnJvclBhZ2UvYnVpbGQucHJvcGVydGllcwppbmRleCBkNzliODJhLi44YjE4Y2Y4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvZGVmYXVsdEVycm9yUGFnZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9kZWZhdWx0RXJyb3JQYWdlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjAtZGVmYXVsdC1lcnJvci1wYWdlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvZGVmYXVsdEVycm9yUGFnZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvZGVmYXVsdEVycm9yUGFnZS9idWlsZC54bWwKaW5kZXggZThhMDY3ZC4uYWU4OTA3MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2RlZmF1bHRFcnJvclBhZ2UvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9kZWZhdWx0RXJyb3JQYWdlL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMjEgKzQyLDIxIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC02OCwxMCArNjgsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvZGVmYXVsdEVycm9yUGFnZS9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvZGVmYXVsdEVycm9yUGFnZS9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggNGMxMjUzMy4uNGEzMTgxMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2RlZmF1bHRFcnJvclBhZ2Uvc2VydmxldC9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9kZWZhdWx0RXJyb3JQYWdlL3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQpAQCAtMTksNyArMTksNyBAQAogaW1wb3J0IGpha2FydGEuc2VydmxldC5odHRwLio7CiAKIHB1YmxpYyBjbGFzcyBUZXN0U2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzKQogICAgICAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgcmVzLnNlbmRFcnJvcig0MDQpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2Rpc3BhdGNoRm9yd2FyZEFzeW5jRGlzcGF0Y2gvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2Rpc3BhdGNoRm9yd2FyZEFzeW5jRGlzcGF0Y2gvV2ViVGVzdC5qYXZhCmluZGV4IDRkZGI2YTEuLjhjOTk2NGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9kaXNwYXRjaEZvcndhcmRBc3luY0Rpc3BhdGNoL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvZGlzcGF0Y2hGb3J3YXJkQXN5bmNEaXNwYXRjaC9XZWJUZXN0LmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID1hcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24gewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgZGlzcGF0Y2ggZm9yd2FyZCBhc3luYyBkaXNwYXRjaCIpOwpAQCAtNTksMTEgKzU5LDExIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nIHBhdGgsIFN0cmluZyBleHBlY3RlZFJlc3BvbnNlKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QgKyBwYXRoKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvZGlzcGF0Y2hGb3J3YXJkQXN5bmNEaXNwYXRjaC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2Rpc3BhdGNoRm9yd2FyZEFzeW5jRGlzcGF0Y2gvYnVpbGQucHJvcGVydGllcwppbmRleCA3MjdlZGFjLi5mODRjNDU3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvZGlzcGF0Y2hGb3J3YXJkQXN5bmNEaXNwYXRjaC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9kaXNwYXRjaEZvcndhcmRBc3luY0Rpc3BhdGNoL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjAtZGlzcGF0Y2gtZm9yd2FyZC1hc3luYy1kaXNwYXRjaCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2Rpc3BhdGNoRm9yd2FyZEFzeW5jRGlzcGF0Y2gvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2Rpc3BhdGNoRm9yd2FyZEFzeW5jRGlzcGF0Y2gvYnVpbGQueG1sCmluZGV4IDQ1OTRhNGYuLmY2Y2Y3MWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9kaXNwYXRjaEZvcndhcmRBc3luY0Rpc3BhdGNoL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvZGlzcGF0Y2hGb3J3YXJkQXN5bmNEaXNwYXRjaC9idWlsZC54bWwKQEAgLTM1LDcgKzM1LDcgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgICA8ZGVsZXRlIGZpbGU9IldlYlRlc3QuY2xhc3MiLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MywyMyArNDMsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MSw5ICs3MSw5IEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2Rpc3BhdGNoRm9yd2FyZEFzeW5jRGlzcGF0Y2gvc2VydmxldC90ZXN0L0Rpc3BhdGNoRm9yd2FyZC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2Rpc3BhdGNoRm9yd2FyZEFzeW5jRGlzcGF0Y2gvc2VydmxldC90ZXN0L0Rpc3BhdGNoRm9yd2FyZC5qYXZhCmluZGV4IDc3NzJmMWUuLmQxYTQ1ZjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9kaXNwYXRjaEZvcndhcmRBc3luY0Rpc3BhdGNoL3NlcnZsZXQvdGVzdC9EaXNwYXRjaEZvcndhcmQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvZGlzcGF0Y2hGb3J3YXJkQXN5bmNEaXNwYXRjaC9zZXJ2bGV0L3Rlc3QvRGlzcGF0Y2hGb3J3YXJkLmphdmEKQEAgLTE4LDE5ICsxOCwxOSBAQAogCiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotICAgICAgICAgICAgCisKIGltcG9ydCBqYWthcnRhLnNlcnZsZXQuRGlzcGF0Y2hlclR5cGU7CiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb247CiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0LmFubm90YXRpb24uV2ViU2VydmxldDsKIGltcG9ydCBqYWthcnRhLnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldDsKIGltcG9ydCBqYWthcnRhLnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZTsKLSAgICAgICAgICAgICAgICAKKwogQFdlYlNlcnZsZXQodXJsUGF0dGVybnM9eyIvZGlzcGF0Y2hmb3J3YXJkIn0sIGFzeW5jU3VwcG9ydGVkPXRydWUpCiBwdWJsaWMgY2xhc3MgRGlzcGF0Y2hGb3J3YXJkIGV4dGVuZHMgSHR0cFNlcnZsZXQgewogICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzKQogICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uIHsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgU3RyaW5nIGZvcndhcmRVcmwgPSAiL2FzeW5jZGlzcGF0Y2giOwogICAgICAgICBTdHJpbmcgd2l0aGFyZ3MgPSByZXEuZ2V0UGFyYW1ldGVyKCJ3aXRoYXJncyIpOwogICAgICAgICBpZiAod2l0aGFyZ3MgIT0gbnVsbCkgewpAQCAtNDAsMTAgKzQwLDEwIEBACiAgICAgICAgIGlmICghcmVxLmdldERpc3BhdGNoZXJUeXBlKCkuZXF1YWxzKERpc3BhdGNoZXJUeXBlLkFTWU5DKSkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJERjogZm9yd2FyZGluZyAiICsgZm9yd2FyZFVybCk7CiAgICAgICAgICAgICByZXEuZ2V0UmVxdWVzdERpc3BhdGNoZXIoZm9yd2FyZFVybCkuZm9yd2FyZChyZXEsIHJlcyk7Ci0gICAgICAgIH0gZWxzZSB7ICAgICAgICAKKyAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiREY6IGFzeW5jIGRpc3BhdGNoIHR5cGUgLi4uIik7CiAgICAgICAgICAgICBQcmludFdyaXRlciB3cml0ZXIgPSByZXMuZ2V0V3JpdGVyKCk7CiAgICAgICAgICAgICB3cml0ZXIud3JpdGUoIkhlbGxvIGZyb20gRGlzcGF0Y2hGb3J3YXJkXG4iKTsKLSAgICAgICAgfSAKLSAgICB9ICAgICAgIAorICAgICAgICB9CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2Rpc3BhdGNoRm9yd2FyZEFzeW5jRGlzcGF0Y2gvc2VydmxldC90ZXN0L0Rpc3BhdGNoRm9yd2FyZDAuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9kaXNwYXRjaEZvcndhcmRBc3luY0Rpc3BhdGNoL3NlcnZsZXQvdGVzdC9EaXNwYXRjaEZvcndhcmQwLmphdmEKaW5kZXggNGRhYTNiYi4uZjYyNmZlYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2Rpc3BhdGNoRm9yd2FyZEFzeW5jRGlzcGF0Y2gvc2VydmxldC90ZXN0L0Rpc3BhdGNoRm9yd2FyZDAuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvZGlzcGF0Y2hGb3J3YXJkQXN5bmNEaXNwYXRjaC9zZXJ2bGV0L3Rlc3QvRGlzcGF0Y2hGb3J3YXJkMC5qYXZhCkBAIC0xOCwyOCArMTgsMjggQEAKIAogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLSAgICAgICAgICAgIAorCiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0LkRpc3BhdGNoZXJUeXBlOwogaW1wb3J0IGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uOwogaW1wb3J0IGpha2FydGEuc2VydmxldC5hbm5vdGF0aW9uLldlYlNlcnZsZXQ7CiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXQ7CiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OwogaW1wb3J0IGpha2FydGEuc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2U7Ci0gICAgICAgICAgICAgICAgCisKIEBXZWJTZXJ2bGV0KHVybFBhdHRlcm5zPXsiL2Rpc3BhdGNoZm9yd2FyZDAifSwgYXN5bmNTdXBwb3J0ZWQ9dHJ1ZSkKIHB1YmxpYyBjbGFzcyBEaXNwYXRjaEZvcndhcmQwIGV4dGVuZHMgSHR0cFNlcnZsZXQgewogICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzKQogICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uIHsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgU3RyaW5nIGZvcndhcmRVcmwgPSAiL2Rpc3BhdGNoZm9yd2FyZCI7CiAKICAgICAgICAgaWYgKCFyZXEuZ2V0RGlzcGF0Y2hlclR5cGUoKS5lcXVhbHMoRGlzcGF0Y2hlclR5cGUuQVNZTkMpKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRGMDogZm9yd2FyZGluZyAiICsgZm9yd2FyZFVybCk7CiAgICAgICAgICAgICByZXEuZ2V0UmVxdWVzdERpc3BhdGNoZXIoZm9yd2FyZFVybCkuZm9yd2FyZChyZXEsIHJlcyk7Ci0gICAgICAgIH0gZWxzZSB7ICAgICAgICAKKyAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiREYwOiBhc3luYyBkaXNwYXRjaCB0eXBlIC4uLiIpOwogICAgICAgICAgICAgUHJpbnRXcml0ZXIgd3JpdGVyID0gcmVzLmdldFdyaXRlcigpOwogICAgICAgICAgICAgd3JpdGVyLndyaXRlKCJIZWxsbyBmcm9tIERpc3BhdGNoRm9yd2FyZDBcbiIpOwotICAgICAgICB9IAotICAgIH0gICAgICAgCisgICAgICAgIH0KKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvZGlzcGF0Y2hGb3J3YXJkQXN5bmNEaXNwYXRjaC9zZXJ2bGV0L3Rlc3QvTmFtZWREaXNwYXRjaEZvcndhcmQwLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvZGlzcGF0Y2hGb3J3YXJkQXN5bmNEaXNwYXRjaC9zZXJ2bGV0L3Rlc3QvTmFtZWREaXNwYXRjaEZvcndhcmQwLmphdmEKaW5kZXggZjdlZWFkNy4uNmRhYzZhZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2Rpc3BhdGNoRm9yd2FyZEFzeW5jRGlzcGF0Y2gvc2VydmxldC90ZXN0L05hbWVkRGlzcGF0Y2hGb3J3YXJkMC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9kaXNwYXRjaEZvcndhcmRBc3luY0Rpc3BhdGNoL3NlcnZsZXQvdGVzdC9OYW1lZERpc3BhdGNoRm9yd2FyZDAuamF2YQpAQCAtMTgsMjcgKzE4LDI3IEBACiAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci0gICAgICAgICAgICAKKwogaW1wb3J0IGpha2FydGEuc2VydmxldC5EaXNwYXRjaGVyVHlwZTsKIGltcG9ydCBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbjsKIGltcG9ydCBqYWthcnRhLnNlcnZsZXQuYW5ub3RhdGlvbi5XZWJTZXJ2bGV0OwogaW1wb3J0IGpha2FydGEuc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0OwogaW1wb3J0IGpha2FydGEuc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKIGltcG9ydCBqYWthcnRhLnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlOwotICAgICAgICAgICAgICAgIAorCiBAV2ViU2VydmxldCh1cmxQYXR0ZXJucz17Ii9uYW1lZGRpc3BhdGNoZm9yd2FyZDAifSwgYXN5bmNTdXBwb3J0ZWQ9dHJ1ZSkKIHB1YmxpYyBjbGFzcyBOYW1lZERpc3BhdGNoRm9yd2FyZDAgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpCiAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24gewotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICBTdHJpbmcgc2VydmxldE5hbWUgPSAidGVzdC5EaXNwYXRjaEZvcndhcmQiOwogICAgICAgICBpZiAoIXJlcS5nZXREaXNwYXRjaGVyVHlwZSgpLmVxdWFscyhEaXNwYXRjaGVyVHlwZS5BU1lOQykpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiREYwOiBuYW1lZCBmb3J3YXJkaW5nICIgKyBzZXJ2bGV0TmFtZSk7CiAgICAgICAgICAgICBnZXRTZXJ2bGV0Q29udGV4dCgpLmdldE5hbWVkRGlzcGF0Y2hlcihzZXJ2bGV0TmFtZSkuZm9yd2FyZChyZXEsIHJlcyk7Ci0gICAgICAgIH0gZWxzZSB7ICAgICAgICAKKyAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiREYwOiBhc3luYyBkaXNwYXRjaCB0eXBlIC4uLiIpOwogICAgICAgICAgICAgUHJpbnRXcml0ZXIgd3JpdGVyID0gcmVzLmdldFdyaXRlcigpOwogICAgICAgICAgICAgd3JpdGVyLndyaXRlKCJIZWxsbyBmcm9tIERpc3BhdGNoRm9yd2FyZDBcbiIpOwotICAgICAgICB9IAotICAgIH0gICAgICAgCisgICAgICAgIH0KKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvZmlsdGVyV2l0aEVtcHR5VXJsL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9maWx0ZXJXaXRoRW1wdHlVcmwvV2ViVGVzdC5qYXZhCmluZGV4IDViMTZkYWQuLmI3NmNmMjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9maWx0ZXJXaXRoRW1wdHlVcmwvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9maWx0ZXJXaXRoRW1wdHlVcmwvV2ViVGVzdC5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJUZXN0IGZvciBmaWx0ZXIgd2l0aCBlbXB0eSB1cmwiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC00Niw3ICs0Niw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVNUX05BTUUgKyAiIHRlc3QgZmFpbGVkIik7CkBAIC01Niw3ICs1Niw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgICAgICAgICAgKyAiLyI7CiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pCkBAIC05MywxMCArOTMsMTAgQEAKICAgICAgICAgICAgIGlmIChFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9maWx0ZXJXaXRoRW1wdHlVcmwvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9maWx0ZXJXaXRoRW1wdHlVcmwvYnVpbGQucHJvcGVydGllcwppbmRleCAwMzg3NDhlLi5lODNiYzljIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvZmlsdGVyV2l0aEVtcHR5VXJsL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2ZpbHRlcldpdGhFbXB0eVVybC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLWZpbHRlci13aXRoLWVtcHR5LXVybCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2ZpbHRlcldpdGhFbXB0eVVybC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvZmlsdGVyV2l0aEVtcHR5VXJsL2J1aWxkLnhtbAppbmRleCAzMmQzNmFmLi41NWEyYTFiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvZmlsdGVyV2l0aEVtcHR5VXJsL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvZmlsdGVyV2l0aEVtcHR5VXJsL2J1aWxkLnhtbApAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NywyMyArNDcsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NSwxMCArNzUsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvZmlsdGVyV2l0aEVtcHR5VXJsL3NlcnZsZXQvVGVzdEZpbHRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2ZpbHRlcldpdGhFbXB0eVVybC9zZXJ2bGV0L1Rlc3RGaWx0ZXIuamF2YQppbmRleCA4NjNlMTg3Li5jNjE0NDk1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvZmlsdGVyV2l0aEVtcHR5VXJsL3NlcnZsZXQvVGVzdEZpbHRlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9maWx0ZXJXaXRoRW1wdHlVcmwvc2VydmxldC9UZXN0RmlsdGVyLmphdmEKQEAgLTM0LDcgKzM0LDcgQEAKICAgICBwdWJsaWMgdm9pZCBpbml0KEZpbHRlckNvbmZpZyBmaWx0ZXJDb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI+Pj4gZmlsdGVyLmluaXQiKTsKICAgICAgICAgbWVzZyA9IGZpbHRlckNvbmZpZy5nZXRJbml0UGFyYW1ldGVyKCJtZXNnIik7Ci0gICAgfSAgIAorICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvRmlsdGVyKFNlcnZsZXRSZXF1ZXN0IHJlcSwgU2VydmxldFJlc3BvbnNlIHJlcywKICAgICAgICAgICAgIEZpbHRlckNoYWluIGNoYWluKSB0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2phdmF4U2VydmxldENvbnRleHRPcmRlcmVkTGlicy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvamF2YXhTZXJ2bGV0Q29udGV4dE9yZGVyZWRMaWJzL1dlYlRlc3QuamF2YQppbmRleCAzNDdjMTZmLi5mZmUxMTVhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvamF2YXhTZXJ2bGV0Q29udGV4dE9yZGVyZWRMaWJzL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvamF2YXhTZXJ2bGV0Q29udGV4dE9yZGVyZWRMaWJzL1dlYlRlc3QuamF2YQpAQCAtMjksNyArMjksNyBAQAogICoKICAqIFRoZSBtYWluIHdlYi54bWwgZGVjbGFyZXMgYW4gYWJzb2x1dGUgb3JkZXJpbmcgb2YgdGhlIHR3byB3ZWIgZnJhZ21lbnRzLAogICogd2l0aCB3ZWJGcmFnbWVudDIgbGlzdGVkIGZpcnN0LCBmb2xsb3dlZCBieSB3ZWJGcmFnbWVudDEuCi0gKiAKKyAqCiAgKiBFaXRoZXIgU2VydmxldENvbnRleHRMaXN0ZW5lciBjaGVja3MgZm9yIHRoZSBwcmVzZW5jZSBhbmQgY29udGVudHMgb2YgdGhlCiAgKiBqYWthcnRhLnNlcnZsZXQuY29udGV4dC5vcmRlcmVkTGlicyBTZXJ2bGV0Q29udGV4dCBhdHRyaWJ1dGUgYW5kLCBpZgogICogc2F0aXNmaWVkLCByZWdpc3RlcnMgYSBTZXJ2bGV0LgpAQCAtNTQsNyArNTQsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciAiICsKICAgICAgICAgICAgICJqYWthcnRhLnNlcnZsZXQuY29udGV4dC5vcmRlcmVkTGlicyBTZXJ2bGV0Q29udGV4dCBhdHRyaWJ1dGUiKTsKQEAgLTcxLDcgKzcxLDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290ICsKICAgICAgICAgICAgICIvd2ViRnJhZ21lbnQxU2VydmxldCI7CiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvamF2YXhTZXJ2bGV0Q29udGV4dE9yZGVyZWRMaWJzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvamF2YXhTZXJ2bGV0Q29udGV4dE9yZGVyZWRMaWJzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMjIzOTVhNy4uMmNlNzcyZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2phdmF4U2VydmxldENvbnRleHRPcmRlcmVkTGlicy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9qYXZheFNlcnZsZXRDb250ZXh0T3JkZXJlZExpYnMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC1qYXZheC1zZXJ2bGV0LWNvbnRleHQtb3JkZXJlZExpYnMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9qYXZheFNlcnZsZXRDb250ZXh0T3JkZXJlZExpYnMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2phdmF4U2VydmxldENvbnRleHRPcmRlcmVkTGlicy9idWlsZC54bWwKaW5kZXggNWFmMjU2ZS4uMTQ1MTA5YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2phdmF4U2VydmxldENvbnRleHRPcmRlcmVkTGlicy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2phdmF4U2VydmxldENvbnRleHRPcmRlcmVkTGlicy9idWlsZC54bWwKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgPC9kZWxldGU+CiAgICAgICAgIDxkZWxldGUgZGlyPSJsaWIiLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC02OCwyMyArNjgsMjMgQEAKIAogICAgICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KIAotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqL1Rlc3RTZXJ2bGV0LmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqL1Rlc3RTZXJ2bGV0LmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTk2LDEwICs5NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9qYXZheFNlcnZsZXRDb250ZXh0T3JkZXJlZExpYnMvZGVzY3JpcHRvci93ZWItZnJhZ21lbnQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2phdmF4U2VydmxldENvbnRleHRPcmRlcmVkTGlicy9kZXNjcmlwdG9yL3dlYi1mcmFnbWVudC54bWwKaW5kZXggMTY4MGUwZC4uMzYzNTBjZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2phdmF4U2VydmxldENvbnRleHRPcmRlcmVkTGlicy9kZXNjcmlwdG9yL3dlYi1mcmFnbWVudC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2phdmF4U2VydmxldENvbnRleHRPcmRlcmVkTGlicy9kZXNjcmlwdG9yL3dlYi1mcmFnbWVudC54bWwKQEAgLTIwLDcgKzIwLDcgQEAKIDx3ZWItZnJhZ21lbnQgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItZnJhZ21lbnRfM18wLnhzZCIKLSAgICB2ZXJzaW9uPSIzLjAiPiAKKyAgICB2ZXJzaW9uPSIzLjAiPgogICA8bmFtZT53ZWJGcmFnbWVudDE8L25hbWU+CiAgIDxsaXN0ZW5lcj4KICAgICA8bGlzdGVuZXItY2xhc3M+d2ViRnJhZ21lbnQxLldlYkZyYWdtZW50U2VydmxldENvbnRleHRMaXN0ZW5lcjwvbGlzdGVuZXItY2xhc3M+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvamF2YXhTZXJ2bGV0Q29udGV4dE9yZGVyZWRMaWJzL2Rlc2NyaXB0b3Ivd2ViLWZyYWdtZW50Mi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvamF2YXhTZXJ2bGV0Q29udGV4dE9yZGVyZWRMaWJzL2Rlc2NyaXB0b3Ivd2ViLWZyYWdtZW50Mi54bWwKaW5kZXggYTE0NThhYi4uODQwNjkwNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2phdmF4U2VydmxldENvbnRleHRPcmRlcmVkTGlicy9kZXNjcmlwdG9yL3dlYi1mcmFnbWVudDIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9qYXZheFNlcnZsZXRDb250ZXh0T3JkZXJlZExpYnMvZGVzY3JpcHRvci93ZWItZnJhZ21lbnQyLnhtbApAQCAtMjAsNyArMjAsNyBAQAogPHdlYi1mcmFnbWVudCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1mcmFnbWVudF8zXzAueHNkIgotICAgIHZlcnNpb249IjMuMCI+IAorICAgIHZlcnNpb249IjMuMCI+CiAgIDxuYW1lPndlYkZyYWdtZW50MjwvbmFtZT4KICAgPGxpc3RlbmVyPgogICAgIDxsaXN0ZW5lci1jbGFzcz53ZWJGcmFnbWVudDIuV2ViRnJhZ21lbnRTZXJ2bGV0Q29udGV4dExpc3RlbmVyPC9saXN0ZW5lci1jbGFzcz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9sb2dpbkNoYW5nZVNlc3Npb25JZC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbG9naW5DaGFuZ2VTZXNzaW9uSWQvV2ViVGVzdC5qYXZhCmluZGV4IDc4NDQ1MGUuLmFkNzFiNTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9sb2dpbkNoYW5nZVNlc3Npb25JZC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2xvZ2luQ2hhbmdlU2Vzc2lvbklkL1dlYlRlc3QuamF2YQpAQCAtMjQsMTEgKzI0LDExIEBACiAgKiBUZXN0IGxvZ2luIGNoYW5nZSBzZXNzaW9uIGlkIGluIFNlcnZsZXQgMy4wCiAgKi8KIHB1YmxpYyBjbGFzcyBXZWJUZXN0IHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX05BTUUgPSAic2VydmxldC0zLjAtbG9naW4tY2hhbmdlLXNlc3Npb24taWQiOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBKU0VTU0lPTklEID0gIkpTRVNTSU9OSUQiOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFWFBFQ1RFRF9SRVNQT05TRSA9ICJvbmUiOwotICAgIAorCiAgICAgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0PQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgU3RyaW5nIGNvbnRleHRSb290ID0gYXJnc1syXTsKIAogICAgICAgICBpbnQgcG9ydCA9IG5ldyBJbnRlZ2VyKHBvcnRTKS5pbnRWYWx1ZSgpOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgTGlzdDxTdHJpbmc+IHJlc3VsdCA9IGdvR2V0KGhvc3QsIHBvcnQsIGNvbnRleHRSb290ICsgIi90ZXN0P3J1bj1maXJzdCIsCiAgICAgICAgICAgICAgICAgICAgbnVsbCk7CkBAIC00OSwxMiArNDksMTIgQEAKICAgICAgICAgICAgIGlmIChyZXN1bHQuc2l6ZSgpID4gMCkgewogICAgICAgICAgICAgICAgIHJlc3VsdDIgPSBnb0dldChob3N0LCBwb3J0LCBjb250ZXh0Um9vdCArICIvdGVzdD9ydW49c2Vjb25kIiwKICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5nZXQoMCkpOwotICAgICAgICAgICAgfSAKLSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLAogICAgICAgICAgICAgICAgICAgICAocmVzdWx0LnNpemUoKSA+IDEgJiYgcmVzdWx0Mi5zaXplKCkgPiAxCiAgICAgICAgICAgICAgICAgICAgICYmICFyZXN1bHQuZ2V0KDApLmVxdWFscyhyZXN1bHQyLmdldCgwKSkKLSAgICAgICAgICAgICAgICAgICAgJiYgRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKHJlc3VsdDIuZ2V0KDEpKSkgPyAKKyAgICAgICAgICAgICAgICAgICAgJiYgRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKHJlc3VsdDIuZ2V0KDEpKSkgPwogICAgICAgICAgICAgICAgICAgICBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpOwogICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHQuZ2V0TWVzc2FnZSgpKTsKQEAgLTk5LDcgKzk5LDcgQEAKICAgICAgICAgICAgICAgICBsaW5lTnVtKys7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBleCl7Ci0gICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsgICAKKyAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiVGVzdCBVTlBSRURJQ1RFRC1GQUlMVVJFIik7CiAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgdHJ5IHsKQEAgLTEzOCw1ICsxMzgsNSBAQAogCiAgICAgICAgIHJldHVybiByZXQ7CiAgICAgfQotICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2xvZ2luQ2hhbmdlU2Vzc2lvbklkL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbG9naW5DaGFuZ2VTZXNzaW9uSWQvYnVpbGQucHJvcGVydGllcwppbmRleCAxNTgwNjE4Li5lNmZlYTM2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbG9naW5DaGFuZ2VTZXNzaW9uSWQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbG9naW5DaGFuZ2VTZXNzaW9uSWQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC1sb2dpbi1jaGFuZ2Utc2Vzc2lvbi1pZCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2xvZ2luQ2hhbmdlU2Vzc2lvbklkL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9sb2dpbkNoYW5nZVNlc3Npb25JZC9idWlsZC54bWwKaW5kZXggOWI0NTVhMC4uZjEwODZhOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2xvZ2luQ2hhbmdlU2Vzc2lvbklkL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbG9naW5DaGFuZ2VTZXNzaW9uSWQvYnVpbGQueG1sCkBAIC02Miw3ICs2Miw3IEBACiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KQEAgLTgzLDcgKzgzLDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RvcmUiIGRlcGVuZHM9InNldHVwIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtdXNlci1jb21tb24iPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2xvZ2luTG9nb3V0L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9sb2dpbkxvZ291dC9XZWJUZXN0LmphdmEKaW5kZXggNzU5NjM5NS4uOTFlN2FmYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2xvZ2luTG9nb3V0L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbG9naW5Mb2dvdXQvV2ViVGVzdC5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgIHBvcnQgPSBJbnRlZ2VyLnBhcnNlSW50KGFyZ3NbMV0pOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgbG9naW4gYW5kIGxvZ291dCIpOwpAQCAtNTAsNyArNTAsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgcnVuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CkBAIC0xMDIsNyArMTAyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgb2sgPSBvayAmJiBleHBlY3RlZC5lcXVhbHMobGluZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGV4KXsKLSAgICAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsgICAKKyAgICAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJUZXN0IFVOUFJFRElDVEVELUZBSUxVUkUiKTsKICAgICAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICAgICAgdHJ5IHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9sb2dpbkxvZ291dC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2xvZ2luTG9nb3V0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYWJmMTI3OS4uOTViODBjOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2xvZ2luTG9nb3V0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2xvZ2luTG9nb3V0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjAtbG9naW4tbG9nb3V0Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbG9naW5Mb2dvdXQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2xvZ2luTG9nb3V0L2J1aWxkLnhtbAppbmRleCA4NDQxODUyLi5lMDM2MmEzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbG9naW5Mb2dvdXQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9sb2dpbkxvZ291dC9idWlsZC54bWwKQEAgLTM1LDcgKzM1LDcgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgICA8ZGVsZXRlIGZpbGU9IldlYlRlc3QuY2xhc3MiLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC01MSwxMCArNTEsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTYyLDE0ICs2MiwxNCBAQAogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2FwcHNlcnYtcnQuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC04NCw3ICs4NCw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0b3JlIiBkZXBlbmRzPSJzZXR1cCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLXVzZXItY29tbW9uIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9sb2dpbkxvZ291dC9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbG9naW5Mb2dvdXQvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IGIyMzE2NzEuLmMxNjk2MTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9sb2dpbkxvZ291dC9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2xvZ2luTG9nb3V0L2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8d2ViLWFwcCB2ZXJzaW9uPSIzLjAiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzNfMC54c2QiPgogICA8c2VjdXJpdHktcm9sZT4KLSAgICA8cm9sZS1uYW1lPmphdmFlZTwvcm9sZS1uYW1lPiAKKyAgICA8cm9sZS1uYW1lPmphdmFlZTwvcm9sZS1uYW1lPgogICA8L3NlY3VyaXR5LXJvbGU+CiAgIDxsb2dpbi1jb25maWc+CiAgICAgPGF1dGgtbWV0aG9kPkJBU0lDPC9hdXRoLW1ldGhvZD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9sb2dpbkxvZ291dC9zZXJ2bGV0L1Rlc3RTZXJ2bGV0Mi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2xvZ2luTG9nb3V0L3NlcnZsZXQvVGVzdFNlcnZsZXQyLmphdmEKaW5kZXggYTRhMDkyMy4uMGRhZjBjZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2xvZ2luTG9nb3V0L3NlcnZsZXQvVGVzdFNlcnZsZXQyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL2xvZ2luTG9nb3V0L3NlcnZsZXQvVGVzdFNlcnZsZXQyLmphdmEKQEAgLTQyLDYgKzQyLDYgQEAKICAgICAgICAgICAgIGIuYXBwZW5kKHJlcS5pc1VzZXJJblJvbGUoImphdmFlZSIpICsgIlxuIik7CiAgICAgICAgICAgICBQcmludFdyaXRlciB3cml0ZXIgPSByZXMuZ2V0V3JpdGVyKCk7CiAgICAgICAgICAgICB3cml0ZXIud3JpdGUoYi50b1N0cmluZygpKTsKLSAgICAgICAgfSAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9tdWx0aVdlYkZyYWdtZW50cy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbXVsdGlXZWJGcmFnbWVudHMvV2ViVGVzdC5qYXZhCmluZGV4IDRlNTVmYWQuLjI3NmQ5NjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9tdWx0aVdlYkZyYWdtZW50cy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL211bHRpV2ViRnJhZ21lbnRzL1dlYlRlc3QuamF2YQpAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBtdWx0aSB3ZWIgZnJhZ21lbnRzIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDYsNyArNDYsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZCIpOwpAQCAtNTYsNyArNTYsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3Q7CiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pCiAgICAgICAgICAgICAobmV3IFVSTCh1cmwpKS5vcGVuQ29ubmVjdGlvbigpOwpAQCAtOTMsMTAgKzkzLDEwIEBACiAgICAgICAgICAgICBpZiAoRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbXVsdGlXZWJGcmFnbWVudHMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9tdWx0aVdlYkZyYWdtZW50cy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDQ5MDdlNjMuLjk5ZTFmOTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9tdWx0aVdlYkZyYWdtZW50cy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9tdWx0aVdlYkZyYWdtZW50cy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLW11bHRpLXdlYi1mcmFnbWVudHMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9tdWx0aVdlYkZyYWdtZW50cy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbXVsdGlXZWJGcmFnbWVudHMvYnVpbGQueG1sCmluZGV4IDcwNjdhMTUuLjU3ZDNjYjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9tdWx0aVdlYkZyYWdtZW50cy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL211bHRpV2ViRnJhZ21lbnRzL2J1aWxkLnhtbApAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICA8L2RlbGV0ZT4KICAgICAgICAgPGRlbGV0ZSBkaXI9ImxpYiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTYzLDIzICs2MywyMyBAQAogICAgICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KICAgICAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dmdGVzdDIiLz4KIAotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqL1Rlc3RTZXJ2bGV0LmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqL1Rlc3RTZXJ2bGV0LmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTkxLDEwICs5MSwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9tdWx0aVdlYkZyYWdtZW50cy9zZXJ2bGV0L1dGVGVzdEZpbHRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL211bHRpV2ViRnJhZ21lbnRzL3NlcnZsZXQvV0ZUZXN0RmlsdGVyLmphdmEKaW5kZXggZDAyZWJkZC4uMTlkMTc4NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL211bHRpV2ViRnJhZ21lbnRzL3NlcnZsZXQvV0ZUZXN0RmlsdGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL211bHRpV2ViRnJhZ21lbnRzL3NlcnZsZXQvV0ZUZXN0RmlsdGVyLmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKIHB1YmxpYyBjbGFzcyBXRlRlc3RGaWx0ZXIgaW1wbGVtZW50cyBGaWx0ZXIgewogICAgIHB1YmxpYyB2b2lkIGluaXQoRmlsdGVyQ29uZmlnIGZpbHRlckNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj4+PiBXRlRlc3RGaWx0ZXIuaW5pdCIpOwotICAgIH0gICAKKyAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb0ZpbHRlcihTZXJ2bGV0UmVxdWVzdCByZXEsIFNlcnZsZXRSZXNwb25zZSByZXMsCiAgICAgICAgICAgICBGaWx0ZXJDaGFpbiBjaGFpbikgdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9tdWx0aVdlYkZyYWdtZW50cy9zZXJ2bGV0L1dGVGVzdEZpbHRlcjIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9tdWx0aVdlYkZyYWdtZW50cy9zZXJ2bGV0L1dGVGVzdEZpbHRlcjIuamF2YQppbmRleCAyZGJiOTg5Li5hYzlhZWU4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbXVsdGlXZWJGcmFnbWVudHMvc2VydmxldC9XRlRlc3RGaWx0ZXIyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL211bHRpV2ViRnJhZ21lbnRzL3NlcnZsZXQvV0ZUZXN0RmlsdGVyMi5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiBwdWJsaWMgY2xhc3MgV0ZUZXN0RmlsdGVyMiBpbXBsZW1lbnRzIEZpbHRlciB7CiAgICAgcHVibGljIHZvaWQgaW5pdChGaWx0ZXJDb25maWcgZmlsdGVyQ29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPj4+IFdGVGVzdEZpbHRlcjIuaW5pdCIpOwotICAgIH0gICAKKyAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb0ZpbHRlcihTZXJ2bGV0UmVxdWVzdCByZXEsIFNlcnZsZXRSZXNwb25zZSByZXMsCiAgICAgICAgICAgICBGaWx0ZXJDaGFpbiBjaGFpbikgdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9tdWx0aVdlYkZyYWdtZW50cy9zZXJ2bGV0L1dGVGVzdEZpbHRlcjMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9tdWx0aVdlYkZyYWdtZW50cy9zZXJ2bGV0L1dGVGVzdEZpbHRlcjMuamF2YQppbmRleCA1ZGE2Y2Y5Li42ZDc2NWVjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbXVsdGlXZWJGcmFnbWVudHMvc2VydmxldC9XRlRlc3RGaWx0ZXIzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL211bHRpV2ViRnJhZ21lbnRzL3NlcnZsZXQvV0ZUZXN0RmlsdGVyMy5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiBwdWJsaWMgY2xhc3MgV0ZUZXN0RmlsdGVyMyBpbXBsZW1lbnRzIEZpbHRlciB7CiAgICAgcHVibGljIHZvaWQgaW5pdChGaWx0ZXJDb25maWcgZmlsdGVyQ29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPj4+IFdGVGVzdEZpbHRlcjMuaW5pdCIpOwotICAgIH0gICAKKyAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb0ZpbHRlcihTZXJ2bGV0UmVxdWVzdCByZXEsIFNlcnZsZXRSZXNwb25zZSByZXMsCiAgICAgICAgICAgICBGaWx0ZXJDaGFpbiBjaGFpbikgdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9tdWx0aVdlYkZyYWdtZW50c1Jlc291cmNlcy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbXVsdGlXZWJGcmFnbWVudHNSZXNvdXJjZXMvV2ViVGVzdC5qYXZhCmluZGV4IDgzNmVmYTUuLjM4MGJmNWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9tdWx0aVdlYkZyYWdtZW50c1Jlc291cmNlcy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL211bHRpV2ViRnJhZ21lbnRzUmVzb3VyY2VzL1dlYlRlc3QuamF2YQpAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBtdWx0aSB3ZWIgZnJhZ21lbnRzIHJlc291cmNlcyIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTU1LDcgKzU1LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKQEAgLTY1LDcgKzY1LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290ICsgIi9pbmRleC5qc3AiOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odXJsKTsKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikKQEAgLTEyMCw3ICsxMjAsNyBAQAogCiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsCiAgICAgICAgICAgICAgICAgICAgICgoc3RhdHVzMSAmJiBzdGF0dXMyICYmIHN0YXR1czMpID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKSk7Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiAKICAgICBwcml2YXRlIFNldDxTdHJpbmc+IHBhcnNlUmVzdWx0KFN0cmluZyBsaW5lLCBTdHJpbmcgcHJlZml4KSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbXVsdGlXZWJGcmFnbWVudHNSZXNvdXJjZXMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9tdWx0aVdlYkZyYWdtZW50c1Jlc291cmNlcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGI3ZDRmMGQuLmJhNWQ2MDUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9tdWx0aVdlYkZyYWdtZW50c1Jlc291cmNlcy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9tdWx0aVdlYkZyYWdtZW50c1Jlc291cmNlcy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLW11bHRpLXdlYi1mcmFnbWVudHMtcmVzb3VyY2VzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbXVsdGlXZWJGcmFnbWVudHNSZXNvdXJjZXMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL211bHRpV2ViRnJhZ21lbnRzUmVzb3VyY2VzL2J1aWxkLnhtbAppbmRleCBkZTgzMzYwLi4xMTQ4NTBmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbXVsdGlXZWJGcmFnbWVudHNSZXNvdXJjZXMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9tdWx0aVdlYkZyYWdtZW50c1Jlc291cmNlcy9idWlsZC54bWwKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgPC9kZWxldGU+CiAgICAgICAgIDxkZWxldGUgZGlyPSJsaWIiLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgICAgICAgICBpbmNsdWRlcz0iKiovKi5odG1sIi8+CiAgICAgICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgogCi0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KQEAgLTcwLDE0ICs3MCwxNCBAQAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTg5LDEwICs4OSwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9tdWx0aXBhcnQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL211bHRpcGFydC9XZWJUZXN0LmphdmEKaW5kZXggYjRkYWI1NS4uOWVlMzYzZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL211bHRpcGFydC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL211bHRpcGFydC9XZWJUZXN0LmphdmEKQEAgLTIxLDcgKzIxLDcgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLio7CiAKIHB1YmxpYyBjbGFzcyBXZWJUZXN0IHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCkBAIC0xNDMsMjggKzE0MywyOCBAQAogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBpZiAoYmlzICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgYmlzLmNsb3NlKCk7IAorICAgICAgICAgICAgICAgICAgICBiaXMuY2xvc2UoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGNhdGNoKElPRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICAgICAgLy8gaWdub3JlCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGlmIChpcyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlzLmNsb3NlKCk7IAorICAgICAgICAgICAgICAgICAgICBpcy5jbG9zZSgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gY2F0Y2goSU9FeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgICAgICAvLyBpZ25vcmUKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgaWYgKG9zICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgb3MuY2xvc2UoKTsgCisgICAgICAgICAgICAgICAgICAgIG9zLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBjYXRjaChJT0V4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgICAgIC8vIGlnbm9yZQogICAgICAgICAgICAgfQogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBpZiAoc29jayAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNvY2suY2xvc2UoKTsgCisgICAgICAgICAgICAgICAgICAgIHNvY2suY2xvc2UoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGNhdGNoKElPRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICAgICAgLy8gaWdub3JlCkBAIC0xNzUsNyArMTc1LDcgQEAKICAgIHN0YXRpYyBTdHJpbmdbXVtdIGV4cGVjdGVkID0gewogICAgICAgIHsiMTIzNDU2N2FiY2RlZmcifSwKICAgICAgICB7Im15RmlsZSIsICIzNiIsICJ0ZXh0L3BsYWluIiwgImNvbnRlbnQtZGlzcG9zaXRpb24gY29udGVudC10eXBlIiB9LAotICAgICAgIHsibXlGaWxlMiIsICIxMzgxMiIsICJhcHBsaWNhdGlvbi94LWphdmEtYXJjaGl2ZSIsIAorICAgICAgIHsibXlGaWxlMiIsICIxMzgxMiIsICJhcHBsaWNhdGlvbi94LWphdmEtYXJjaGl2ZSIsCiAgICAgICAgICAgICAiY29udGVudC1kaXNwb3NpdGlvbiBjb250ZW50LXR5cGUiIH0sCiAgICAgICAgeyJ4eXoiLCAiMTQiLCAidGV4dC9wbGFpbiIsICJjb250ZW50LWRpc3Bvc2l0aW9uIGNvbnRlbnQtdHlwZSJ9CiAgICB9OwpAQCAtMTg1LDUgKzE4NSw1IEBACiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIHJldHVybiAxOwogICAgfQotICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL211bHRpcGFydC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL211bHRpcGFydC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDEyZmYzYzAuLjEwZTlkMTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9tdWx0aXBhcnQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbXVsdGlwYXJ0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDExICsxNSwxMSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC1tdWx0aXBhcnQiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLW11bHRpcGFydCIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii8ke2FwcG5hbWV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbXVsdGlwYXJ0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9tdWx0aXBhcnQvYnVpbGQueG1sCmluZGV4IGZjZDc3ODEuLmE0NGM5MTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9tdWx0aXBhcnQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9tdWx0aXBhcnQvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxNiArNDIsMTYgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNTksNyArNTksNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgICAgPGphdmFjCiAgICAgICAgICAgICBkZWJ1Zz0idHJ1ZSIKQEAgLTc3LDEwICs3NywxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9tdWx0aXBhcnQvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL211bHRpcGFydC9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggMGEzYTM5Zi4uYTNjNTc4YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL211bHRpcGFydC9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL211bHRpcGFydC9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTI4LDcgKzI4LDcgQEAKICAgICAgICAgICAgIDxtYXgtZmlsZS1zaXplPjIwMDAwPC9tYXgtZmlsZS1zaXplPgogICAgICAgICA8L211bHRpcGFydC1jb25maWc+CiAtLT4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAgICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L1NlcnZsZXRUZXN0PC91cmwtcGF0dGVybj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9tdWx0aXBhcnQvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL211bHRpcGFydC9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKaW5kZXggNDU2MmJiNy4uYTRjOGI1YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL211bHRpcGFydC9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL211bHRpcGFydC9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKIHB1YmxpYyBjbGFzcyBTZXJ2bGV0VGVzdCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIAogICAgIHByaXZhdGUgU2VydmxldENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwogICAgIH0KQEAgLTM1LDcgKzM1LDcgQEAKICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7ICAgICAgICAKKyAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7CiAgICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9ub25EdXBsaWNhdGVTZXNzaW9uQ29va2llV2l0aEN1c3RvbUNvb2tpZU5hbWUvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL25vbkR1cGxpY2F0ZVNlc3Npb25Db29raWVXaXRoQ3VzdG9tQ29va2llTmFtZS9XZWJUZXN0LmphdmEKaW5kZXggYjYxZmMwNC4uYjU5OWIzMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL25vbkR1cGxpY2F0ZVNlc3Npb25Db29raWVXaXRoQ3VzdG9tQ29va2llTmFtZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL25vbkR1cGxpY2F0ZVNlc3Npb25Db29raWVXaXRoQ3VzdG9tQ29va2llTmFtZS9XZWJUZXN0LmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBDUjogNzAxNDY1NDogUG9zc2libGUgRHVwbGljYXRlIHNlc3Npb24gY29va2llIHdoZW4gdGhlIHNlc3Npb24gY29va2llIG5hbWUgaXMgY29uZmlndXJlZC4iKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9ub25EdXBsaWNhdGVTZXNzaW9uQ29va2llV2l0aEN1c3RvbUNvb2tpZU5hbWUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9ub25EdXBsaWNhdGVTZXNzaW9uQ29va2llV2l0aEN1c3RvbUNvb2tpZU5hbWUvYnVpbGQucHJvcGVydGllcwppbmRleCA0ZmJmOGQ2Li4xZWI5M2NjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvbm9uRHVwbGljYXRlU2Vzc2lvbkNvb2tpZVdpdGhDdXN0b21Db29raWVOYW1lL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL25vbkR1cGxpY2F0ZVNlc3Npb25Db29raWVXaXRoQ3VzdG9tQ29va2llTmFtZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLW5vbi1kdXBsaWNhdGUtc2Vzc2lvbi1jb29raWUtd2l0aC1jdXN0b20tY29va2llLW5hbWUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9ub25EdXBsaWNhdGVTZXNzaW9uQ29va2llV2l0aEN1c3RvbUNvb2tpZU5hbWUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL25vbkR1cGxpY2F0ZVNlc3Npb25Db29raWVXaXRoQ3VzdG9tQ29va2llTmFtZS9idWlsZC54bWwKaW5kZXggZGJjNTg1ZC4uNzRkNGIxNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL25vbkR1cGxpY2F0ZVNlc3Npb25Db29raWVXaXRoQ3VzdG9tQ29va2llTmFtZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL25vbkR1cGxpY2F0ZVNlc3Npb25Db29raWVXaXRoQ3VzdG9tQ29va2llTmFtZS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDE1ICs0NCwxNSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgpAQCAtNzIsNyArNzIsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3JlbGF0aXZlT3JkZXJpbmdXZWJGcmFnbWVudHMvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3JlbGF0aXZlT3JkZXJpbmdXZWJGcmFnbWVudHMvV2ViVGVzdC5qYXZhCmluZGV4IDc0ZWQ1YjQuLmQyOWYxNmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9yZWxhdGl2ZU9yZGVyaW5nV2ViRnJhZ21lbnRzL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvcmVsYXRpdmVPcmRlcmluZ1dlYkZyYWdtZW50cy9XZWJUZXN0LmphdmEKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgcmVsYXRpdmUtb3JkZXJpbmctd2ViLWZyYWdtZW50cyIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKQEAgLTU2LDcgKzU2LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290ICsgIi8iOwogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKQogICAgICAgICAgICAgKG5ldyBVUkwodXJsKSkub3BlbkNvbm5lY3Rpb24oKTsKQEAgLTkzLDEwICs5MywxMCBAQAogICAgICAgICAgICAgaWYgKEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3JlbGF0aXZlT3JkZXJpbmdXZWJGcmFnbWVudHMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9yZWxhdGl2ZU9yZGVyaW5nV2ViRnJhZ21lbnRzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMzQxMDRjNS4uNmQxNDdlYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3JlbGF0aXZlT3JkZXJpbmdXZWJGcmFnbWVudHMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvcmVsYXRpdmVPcmRlcmluZ1dlYkZyYWdtZW50cy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLXJlbGF0aXZlLW9yZGVyaW5nLXdlYi1mcmFnbWVudHMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9yZWxhdGl2ZU9yZGVyaW5nV2ViRnJhZ21lbnRzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9yZWxhdGl2ZU9yZGVyaW5nV2ViRnJhZ21lbnRzL2J1aWxkLnhtbAppbmRleCBhZWJlMDIxLi4zYTJkNWM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvcmVsYXRpdmVPcmRlcmluZ1dlYkZyYWdtZW50cy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3JlbGF0aXZlT3JkZXJpbmdXZWJGcmFnbWVudHMvYnVpbGQueG1sCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgIDwvZGVsZXRlPgogICAgICAgICA8ZGVsZXRlIGRpcj0ibGliIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtODUsMjMgKzg1LDIzIEBACiAKICAgICAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CiAKLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi9UZXN0U2VydmxldC5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi9UZXN0U2VydmxldC5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC0xMTMsMTAgKzExMywxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9yZWxhdGl2ZU9yZGVyaW5nV2ViRnJhZ21lbnRzL2Rlc2NyaXB0b3Ivd2ViLWZyYWdtZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9yZWxhdGl2ZU9yZGVyaW5nV2ViRnJhZ21lbnRzL2Rlc2NyaXB0b3Ivd2ViLWZyYWdtZW50LnhtbAppbmRleCBmNmQzNWUwLi5lOTcyZjE2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvcmVsYXRpdmVPcmRlcmluZ1dlYkZyYWdtZW50cy9kZXNjcmlwdG9yL3dlYi1mcmFnbWVudC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3JlbGF0aXZlT3JkZXJpbmdXZWJGcmFnbWVudHMvZGVzY3JpcHRvci93ZWItZnJhZ21lbnQueG1sCkBAIC0yMCw3ICsyMCw3IEBACiA8d2ViLWZyYWdtZW50IHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWZyYWdtZW50XzNfMC54c2QiCi0gICAgdmVyc2lvbj0iMy4wIj4gCisgICAgdmVyc2lvbj0iMy4wIj4KICAgPG5hbWU+QTwvbmFtZT4KICAgPG9yZGVyaW5nPgogICAgIDxiZWZvcmU+PG5hbWU+Tm9TdWNoTmFtZTwvbmFtZT48b3RoZXJzLz48L2JlZm9yZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9yZWxhdGl2ZU9yZGVyaW5nV2ViRnJhZ21lbnRzL2Rlc2NyaXB0b3Ivd2ViLWZyYWdtZW50Mi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvcmVsYXRpdmVPcmRlcmluZ1dlYkZyYWdtZW50cy9kZXNjcmlwdG9yL3dlYi1mcmFnbWVudDIueG1sCmluZGV4IGFiYjMwZGQuLjRmZGExZmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9yZWxhdGl2ZU9yZGVyaW5nV2ViRnJhZ21lbnRzL2Rlc2NyaXB0b3Ivd2ViLWZyYWdtZW50Mi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3JlbGF0aXZlT3JkZXJpbmdXZWJGcmFnbWVudHMvZGVzY3JpcHRvci93ZWItZnJhZ21lbnQyLnhtbApAQCAtMjAsNyArMjAsNyBAQAogPHdlYi1mcmFnbWVudCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1mcmFnbWVudF8zXzAueHNkIgotICAgIHZlcnNpb249IjMuMCI+IAorICAgIHZlcnNpb249IjMuMCI+CiAgIDxuYW1lPkI8L25hbWU+CiAgIDxvcmRlcmluZz4KICAgICA8YWZ0ZXI+PG90aGVycy8+PC9hZnRlcj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9yZWxhdGl2ZU9yZGVyaW5nV2ViRnJhZ21lbnRzL2Rlc2NyaXB0b3Ivd2ViLWZyYWdtZW50My54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvcmVsYXRpdmVPcmRlcmluZ1dlYkZyYWdtZW50cy9kZXNjcmlwdG9yL3dlYi1mcmFnbWVudDMueG1sCmluZGV4IDIxNThlZDAuLmUwZDJjZjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9yZWxhdGl2ZU9yZGVyaW5nV2ViRnJhZ21lbnRzL2Rlc2NyaXB0b3Ivd2ViLWZyYWdtZW50My54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3JlbGF0aXZlT3JkZXJpbmdXZWJGcmFnbWVudHMvZGVzY3JpcHRvci93ZWItZnJhZ21lbnQzLnhtbApAQCAtMjAsNyArMjAsNyBAQAogPHdlYi1mcmFnbWVudCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1mcmFnbWVudF8zXzAueHNkIgotICAgIHZlcnNpb249IjMuMCI+IAorICAgIHZlcnNpb249IjMuMCI+CiAgIDxuYW1lPkM8L25hbWU+CiAgIDxvcmRlcmluZz4KICAgICAgIDxiZWZvcmU+PG5hbWU+QTwvbmFtZT48bmFtZT5CPC9uYW1lPjwvYmVmb3JlPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3JlbGF0aXZlT3JkZXJpbmdXZWJGcmFnbWVudHMvZGVzY3JpcHRvci93ZWItZnJhZ21lbnQ0LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9yZWxhdGl2ZU9yZGVyaW5nV2ViRnJhZ21lbnRzL2Rlc2NyaXB0b3Ivd2ViLWZyYWdtZW50NC54bWwKaW5kZXggYjUwYTBkNi4uZTk1YTk0MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3JlbGF0aXZlT3JkZXJpbmdXZWJGcmFnbWVudHMvZGVzY3JpcHRvci93ZWItZnJhZ21lbnQ0LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvcmVsYXRpdmVPcmRlcmluZ1dlYkZyYWdtZW50cy9kZXNjcmlwdG9yL3dlYi1mcmFnbWVudDQueG1sCkBAIC0yMCw3ICsyMCw3IEBACiA8d2ViLWZyYWdtZW50IHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWZyYWdtZW50XzNfMC54c2QiCi0gICAgdmVyc2lvbj0iMy4wIj4gCisgICAgdmVyc2lvbj0iMy4wIj4KICAgPG5hbWU+RDwvbmFtZT4KICAgPG9yZGVyaW5nPgogICAgICAgPGFmdGVyPjxuYW1lPkM8L25hbWU+PC9hZnRlcj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9yZWxhdGl2ZU9yZGVyaW5nV2ViRnJhZ21lbnRzL3NlcnZsZXQvV0ZUZXN0RmlsdGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvcmVsYXRpdmVPcmRlcmluZ1dlYkZyYWdtZW50cy9zZXJ2bGV0L1dGVGVzdEZpbHRlci5qYXZhCmluZGV4IDNhYjI0YjkuLmE1YTFlOTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9yZWxhdGl2ZU9yZGVyaW5nV2ViRnJhZ21lbnRzL3NlcnZsZXQvV0ZUZXN0RmlsdGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3JlbGF0aXZlT3JkZXJpbmdXZWJGcmFnbWVudHMvc2VydmxldC9XRlRlc3RGaWx0ZXIuamF2YQpAQCAtMzEsNyArMzEsNyBAQAogcHVibGljIGNsYXNzIFdGVGVzdEZpbHRlciBpbXBsZW1lbnRzIEZpbHRlciB7CiAgICAgcHVibGljIHZvaWQgaW5pdChGaWx0ZXJDb25maWcgZmlsdGVyQ29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPj4+IFdGVGVzdEZpbHRlci5pbml0Iik7Ci0gICAgfSAgIAorICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvRmlsdGVyKFNlcnZsZXRSZXF1ZXN0IHJlcSwgU2VydmxldFJlc3BvbnNlIHJlcywKICAgICAgICAgICAgIEZpbHRlckNoYWluIGNoYWluKSB0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3JlbGF0aXZlT3JkZXJpbmdXZWJGcmFnbWVudHMvc2VydmxldC9XRlRlc3RGaWx0ZXIyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvcmVsYXRpdmVPcmRlcmluZ1dlYkZyYWdtZW50cy9zZXJ2bGV0L1dGVGVzdEZpbHRlcjIuamF2YQppbmRleCA3NzFkOGQxLi4zNzZhMmQ4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvcmVsYXRpdmVPcmRlcmluZ1dlYkZyYWdtZW50cy9zZXJ2bGV0L1dGVGVzdEZpbHRlcjIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvcmVsYXRpdmVPcmRlcmluZ1dlYkZyYWdtZW50cy9zZXJ2bGV0L1dGVGVzdEZpbHRlcjIuamF2YQpAQCAtMzEsNyArMzEsNyBAQAogcHVibGljIGNsYXNzIFdGVGVzdEZpbHRlcjIgaW1wbGVtZW50cyBGaWx0ZXIgewogICAgIHB1YmxpYyB2b2lkIGluaXQoRmlsdGVyQ29uZmlnIGZpbHRlckNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj4+PiBXRlRlc3RGaWx0ZXIyLmluaXQiKTsKLSAgICB9ICAgCisgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9GaWx0ZXIoU2VydmxldFJlcXVlc3QgcmVxLCBTZXJ2bGV0UmVzcG9uc2UgcmVzLAogICAgICAgICAgICAgRmlsdGVyQ2hhaW4gY2hhaW4pIHRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvcmVsYXRpdmVPcmRlcmluZ1dlYkZyYWdtZW50cy9zZXJ2bGV0L1dGVGVzdEZpbHRlcjMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9yZWxhdGl2ZU9yZGVyaW5nV2ViRnJhZ21lbnRzL3NlcnZsZXQvV0ZUZXN0RmlsdGVyMy5qYXZhCmluZGV4IGUyZWU4MzkuLmUwNjVhMjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9yZWxhdGl2ZU9yZGVyaW5nV2ViRnJhZ21lbnRzL3NlcnZsZXQvV0ZUZXN0RmlsdGVyMy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9yZWxhdGl2ZU9yZGVyaW5nV2ViRnJhZ21lbnRzL3NlcnZsZXQvV0ZUZXN0RmlsdGVyMy5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiBwdWJsaWMgY2xhc3MgV0ZUZXN0RmlsdGVyMyBpbXBsZW1lbnRzIEZpbHRlciB7CiAgICAgcHVibGljIHZvaWQgaW5pdChGaWx0ZXJDb25maWcgZmlsdGVyQ29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPj4+IFdGVGVzdEZpbHRlcjMuaW5pdCIpOwotICAgIH0gICAKKyAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb0ZpbHRlcihTZXJ2bGV0UmVxdWVzdCByZXEsIFNlcnZsZXRSZXNwb25zZSByZXMsCiAgICAgICAgICAgICBGaWx0ZXJDaGFpbiBjaGFpbikgdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9yZWxhdGl2ZU9yZGVyaW5nV2ViRnJhZ21lbnRzL3NlcnZsZXQvV0ZUZXN0RmlsdGVyNC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3JlbGF0aXZlT3JkZXJpbmdXZWJGcmFnbWVudHMvc2VydmxldC9XRlRlc3RGaWx0ZXI0LmphdmEKaW5kZXggNGFlMjkyOC4uNGNjNmJmYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3JlbGF0aXZlT3JkZXJpbmdXZWJGcmFnbWVudHMvc2VydmxldC9XRlRlc3RGaWx0ZXI0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3JlbGF0aXZlT3JkZXJpbmdXZWJGcmFnbWVudHMvc2VydmxldC9XRlRlc3RGaWx0ZXI0LmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKIHB1YmxpYyBjbGFzcyBXRlRlc3RGaWx0ZXI0IGltcGxlbWVudHMgRmlsdGVyIHsKICAgICBwdWJsaWMgdm9pZCBpbml0KEZpbHRlckNvbmZpZyBmaWx0ZXJDb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI+Pj4gV0ZUZXN0RmlsdGVyNC5pbml0Iik7Ci0gICAgfSAgIAorICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvRmlsdGVyKFNlcnZsZXRSZXF1ZXN0IHJlcSwgU2VydmxldFJlc3BvbnNlIHJlcywKICAgICAgICAgICAgIEZpbHRlckNoYWluIGNoYWluKSB0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3JlbGF0aXZlT3JkZXJpbmdXZWJGcmFnbWVudHMvc2VydmxldC9XRlRlc3RGaWx0ZXI1LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvcmVsYXRpdmVPcmRlcmluZ1dlYkZyYWdtZW50cy9zZXJ2bGV0L1dGVGVzdEZpbHRlcjUuamF2YQppbmRleCA0NTM1ODI5Li4zZDMwMjBjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvcmVsYXRpdmVPcmRlcmluZ1dlYkZyYWdtZW50cy9zZXJ2bGV0L1dGVGVzdEZpbHRlcjUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvcmVsYXRpdmVPcmRlcmluZ1dlYkZyYWdtZW50cy9zZXJ2bGV0L1dGVGVzdEZpbHRlcjUuamF2YQpAQCAtMzEsNyArMzEsNyBAQAogcHVibGljIGNsYXNzIFdGVGVzdEZpbHRlcjUgaW1wbGVtZW50cyBGaWx0ZXIgewogICAgIHB1YmxpYyB2b2lkIGluaXQoRmlsdGVyQ29uZmlnIGZpbHRlckNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj4+PiBXRlRlc3RGaWx0ZXI1LmluaXQiKTsKLSAgICB9ICAgCisgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9GaWx0ZXIoU2VydmxldFJlcXVlc3QgcmVxLCBTZXJ2bGV0UmVzcG9uc2UgcmVzLAogICAgICAgICAgICAgRmlsdGVyQ2hhaW4gY2hhaW4pIHRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvcmVzb3VyY2VVUkxGcm9tTG9jYWxKYXIvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Jlc291cmNlVVJMRnJvbUxvY2FsSmFyL1dlYlRlc3QuamF2YQppbmRleCAzMjhmMzU1Li44YTI1MjJjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvcmVzb3VyY2VVUkxGcm9tTG9jYWxKYXIvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9yZXNvdXJjZVVSTEZyb21Mb2NhbEphci9XZWJUZXN0LmphdmEKQEAgLTUyLDcgKzUyLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgcmVzb3VyY2UgVVJMIGZyb20gSkFSIGluc2lkZSBXRUItSU5GL2xpYiIpOwogICAgICAgICBuZXcgV2ViVGVzdChhcmdzKS5kb1Rlc3QoKTsKQEAgLTYwLDcgKzYwLDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlVGVzdFNlcnZsZXQoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvcmVzb3VyY2VVUkxGcm9tTG9jYWxKYXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9yZXNvdXJjZVVSTEZyb21Mb2NhbEphci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGU2NjA3ZGIuLjhlMWE5MjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9yZXNvdXJjZVVSTEZyb21Mb2NhbEphci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9yZXNvdXJjZVVSTEZyb21Mb2NhbEphci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLXJlc291cmNlLXVybC1mcm9tLWxvY2FsLWphciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Jlc291cmNlVVJMRnJvbUxvY2FsSmFyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9yZXNvdXJjZVVSTEZyb21Mb2NhbEphci9idWlsZC54bWwKaW5kZXggNDExZGY4Yy4uZDhiNjk5NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Jlc291cmNlVVJMRnJvbUxvY2FsSmFyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvcmVzb3VyY2VVUkxGcm9tTG9jYWxKYXIvYnVpbGQueG1sCkBAIC0zOCw3ICszOCw3IEBACiAgICAgICAgIDwvZGVsZXRlPgogICAgICAgICA8ZGVsZXRlIGRpcj0ibGliIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNTQsMjEgKzU0LDIxIEBACiAgICAgICAgICAgICBpbmNsdWRlcz0iTUVUQS1JTkYvKioiLz4KICAgICAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3Jlc291cmNlcyIvPgogCi0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtODAsMTAgKzgwLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZlSnNwQW5kU3RhdGljUmVzb3VyY2VGcm9tTG9jYWxKYXIvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZlSnNwQW5kU3RhdGljUmVzb3VyY2VGcm9tTG9jYWxKYXIvV2ViVGVzdC5qYXZhCmluZGV4IDk4YjMzY2EuLmFhZjJjNGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2ZUpzcEFuZFN0YXRpY1Jlc291cmNlRnJvbUxvY2FsSmFyL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmVKc3BBbmRTdGF0aWNSZXNvdXJjZUZyb21Mb2NhbEphci9XZWJUZXN0LmphdmEKQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3Igc2VydmluZyBKU1AgYW5kIHN0YXRpYyAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVzb3VyY2VzIGZyb20gSkFSIGluc2lkZSBXRUItSU5GL2xpYiIpOwpAQCAtNjIsNyArNjIsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2VKc3BTZXJ2bGV0KCk7CiAgICAgICAgICAgICBpbnZva2VEZWZhdWx0U2VydmxldCgiL2FiYy50eHQiLCAyMDAsIEVYUEVDVEVEX1JFU1BPTlNFKTsKICAgICAgICAgICAgIGludm9rZURlZmF1bHRTZXJ2bGV0KCIvZm9sZGVyIiwgbmV3IGludFtdIHsgMzAxLCAzMDIgfSwgY29udGV4dFJvb3QgKyAiL2ZvbGRlci8iKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2ZUpzcEFuZFN0YXRpY1Jlc291cmNlRnJvbUxvY2FsSmFyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmVKc3BBbmRTdGF0aWNSZXNvdXJjZUZyb21Mb2NhbEphci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGM2YzdlNTEuLmNkNzU0YTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2ZUpzcEFuZFN0YXRpY1Jlc291cmNlRnJvbUxvY2FsSmFyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZlSnNwQW5kU3RhdGljUmVzb3VyY2VGcm9tTG9jYWxKYXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC1zZXJ2ZS1qc3AtYW5kLXN0YXRpYy1yZXNvdXJjZS1mcm9tLWxvY2FsLWphciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZlSnNwQW5kU3RhdGljUmVzb3VyY2VGcm9tTG9jYWxKYXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZlSnNwQW5kU3RhdGljUmVzb3VyY2VGcm9tTG9jYWxKYXIvYnVpbGQueG1sCmluZGV4IDJhZDU3NDkuLjQxZmViNTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2ZUpzcEFuZFN0YXRpY1Jlc291cmNlRnJvbUxvY2FsSmFyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmVKc3BBbmRTdGF0aWNSZXNvdXJjZUZyb21Mb2NhbEphci9idWlsZC54bWwKQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgICAgPC9kZWxldGU+CiAgICAgICAgIDxkZWxldGUgZGlyPSJsaWIiLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC01NiwyMSArNTYsMjEgQEAKICAgICAgICAgICAgIGluY2x1ZGVzPSJNRVRBLUlORi8qKiIvPgogICAgICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvcmVzb3VyY2VzIi8+CiAKLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC04MiwxMCArODIsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL2pzZk1hbmFnZWRCZWFuQW5ub3RhdGlvbi9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL2pzZk1hbmFnZWRCZWFuQW5ub3RhdGlvbi9XZWJUZXN0LmphdmEKaW5kZXggOTI5MmJjNC4uNDAxNzE5NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9qc2ZNYW5hZ2VkQmVhbkFubm90YXRpb24vV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvanNmTWFuYWdlZEJlYW5Bbm5vdGF0aW9uL1dlYlRlc3QuamF2YQpAQCAtMTksNyArMTksNyBAQAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuKjsKIAogLyoKLSAqIFVuaXQgdGVzdCBmb3IgCisgKiBVbml0IHRlc3QgZm9yCiAgKgogICogICBodHRwczovL2dsYXNzZmlzaC5kZXYuamF2YS5uZXQvaXNzdWVzL3Nob3dfYnVnLmNnaT9pZD0xMDk5MgogICogICAoIlVuYWJsZSB0byBkZXBsb3kgSlNGMiBiYWNraW5nIGJlYW4gQiA3Miwgd29ya3MgaW4gQjcxIikKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBJVCAxMDk5MiIpOwpAQCAtNTQsMTAgKzU0LDEwIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsgICAgIAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdCArCiAgICAgICAgICAgICAiL2luZGV4LmpzcCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL2pzZk1hbmFnZWRCZWFuQW5ub3RhdGlvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9qc2ZNYW5hZ2VkQmVhbkFubm90YXRpb24vYnVpbGQucHJvcGVydGllcwppbmRleCAwNTRmOWE1Li40OGM5ZmI3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL2pzZk1hbmFnZWRCZWFuQW5ub3RhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvanNmTWFuYWdlZEJlYW5Bbm5vdGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjAtanNmLW1hbmFnZWQtYmVhbi1hbm5vdGF0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL2pzZk1hbmFnZWRCZWFuQW5ub3RhdGlvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL2pzZk1hbmFnZWRCZWFuQW5ub3RhdGlvbi9idWlsZC54bWwKaW5kZXggMzRiNGNiMy4uYjZlMTZhNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9qc2ZNYW5hZ2VkQmVhbkFubm90YXRpb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvanNmTWFuYWdlZEJlYW5Bbm5vdGF0aW9uL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC01NiwxNCArNTYsMTQgQEAKIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc1LDEwICs3NSwxMCBAQAogICAgICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aEVBUi9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhFQVIvV2ViVGVzdC5qYXZhCmluZGV4IGQ5NzBkNGQuLmVkNGQ2ZDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aEVBUi9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoRUFSL1dlYlRlc3QuamF2YQpAQCAtMzksMTggKzM5LDE4IEBACiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICAgICAgdGVzdE51bWJlciA9IGFyZ3NbM107CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIHBsdWdnYWJpbGl0eSBvZiBzaGFyZWRsaWIgaW4gRUFSIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwotCWlmKCIxIi5lcXVhbHMoYXJnc1szXSkpIHsKKyAgICBpZigiMSIuZXF1YWxzKGFyZ3NbM10pKSB7CiAgICAgICAgICAgICB3ZWJUZXN0LmRvVGVzdCgiL215dGVzdDEiKTsKICAgICAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7Ci0JfQorICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nIHJvb3QpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2Uocm9vdCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKQEAgLTYwLDcgKzYwLDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKFN0cmluZyByb290KSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgICsgcm9vdDsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbnZva2luZyAiICsgdXJsKTsKQEAgLTk5LDEwICs5OSwxMCBAQAogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUkVTUE9OU0UgOiAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFWyhuZXcgSW50ZWdlcih0ZXN0TnVtYmVyKSkuaW50VmFsdWUoKV0gKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aEVBUi9hcHBsaWIxL2NvbS9zdW4vZGV2dGVzdHMvd2ViL2FwcGxpYi9TZXJ2Q29udEluaXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aEVBUi9hcHBsaWIxL2NvbS9zdW4vZGV2dGVzdHMvd2ViL2FwcGxpYi9TZXJ2Q29udEluaXQuamF2YQppbmRleCA1MTY1ZjQxLi4zNTlhODAzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhFQVIvYXBwbGliMS9jb20vc3VuL2RldnRlc3RzL3dlYi9hcHBsaWIvU2VydkNvbnRJbml0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoRUFSL2FwcGxpYjEvY29tL3N1bi9kZXZ0ZXN0cy93ZWIvYXBwbGliL1NlcnZDb250SW5pdC5qYXZhCkBAIC0yMywxMCArMjMsMTAgQEAKIEBIYW5kbGVzVHlwZXMoV2ViU2VydmxldC5jbGFzcykKIHB1YmxpYyBjbGFzcyBTZXJ2Q29udEluaXQgaW1wbGVtZW50cyBTZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIgewogICAgIHB1YmxpYyBTZXJ2Q29udEluaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJURVNUIEFQUCBMSUIgQ09OU1QiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRFU1QgQVBQIExJQiBDT05TVCIpOwogICAgIH0KICAgICBwdWJsaWMgdm9pZCBvblN0YXJ0dXAoU2V0PENsYXNzPD8+PiBjLCBTZXJ2bGV0Q29udGV4dCBjdHgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlRFU1QgQVBQIExJQiBvblN0YXJ0dXAiKTsKLQljdHguc2V0QXR0cmlidXRlKCJBUFBMSUItMSIsICJDQUxMRUQgRUFSQVBQTElCLTEiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRFU1QgQVBQIExJQiBvblN0YXJ0dXAiKTsKKyAgICBjdHguc2V0QXR0cmlidXRlKCJBUFBMSUItMSIsICJDQUxMRUQgRUFSQVBQTElCLTEiKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhFQVIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aEVBUi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGQyMWJmNDQuLmVkNjQ5YjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aEVBUi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aEVBUi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLXBsdWdnYWJpbGl0eS1zaGFyZWRsaWItZWFyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhFQVIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoRUFSL2J1aWxkLnhtbAppbmRleCAwNDIxZWMyLi42MDI1MWZhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhFQVIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aEVBUi9idWlsZC54bWwKQEAgLTM4LDQwICszOCw0MCBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4tbGliIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JPGRlbGV0ZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9UZXN0U2hhcmVkTGliMS5qYXIiLz4KLQk8ZGVsZXRlIGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vbGliL1Rlc3RTaGFyZWRMaWIyLmphciIvPgotCTxkZWxldGUgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9saWIvVGVzdFNoYXJlZExpYjMuamFyIi8+CisgICAgPGRlbGV0ZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9UZXN0U2hhcmVkTGliMS5qYXIiLz4KKyAgICA8ZGVsZXRlIGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vbGliL1Rlc3RTaGFyZWRMaWIyLmphciIvPgorICAgIDxkZWxldGUgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9saWIvVGVzdFNoYXJlZExpYjMuamFyIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic3RhcnREb21haW4iLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iaW5pdC1zaGFyZWRsaWIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzdG9wRG9tYWluIi8+Ci0gIAk8amF2YWMgc3JjZGlyPSIuL3NoYXJlZGxpYjEiCi0gICAgCQlkZXN0ZGlyPSIuL3NoYXJlZGxpYjEiCi0gICAgCQljbGFzc3BhdGg9IiR7czFhc3Rlc3QuY2xhc3NwYXRofSIKLSAgICAJCWRlYnVnPSJvbiIKLSAgICAJCWZhaWxvbmVycm9yPSJ0cnVlIi8+Ci0JPGphciBkZXN0ZmlsZT0iJHtlbnYuUzFBU19IT01FfS9saWIvVGVzdFNoYXJlZExpYjEuamFyIj4KLQkgICAgPGZpbGVzZXQgZGlyPSIuL3NoYXJlZGxpYjEiLz4KLQk8L2phcj4KLSAgCTxqYXZhYyBzcmNkaXI9Ii4vc2hhcmVkbGliMiIKLSAgICAJCWRlc3RkaXI9Ii4vc2hhcmVkbGliMiIKLSAgICAJCWNsYXNzcGF0aD0iJHtzMWFzdGVzdC5jbGFzc3BhdGh9IgotICAgIAkJZGVidWc9Im9uIgotICAgIAkJZmFpbG9uZXJyb3I9InRydWUiLz4KLQk8amFyIGRlc3RmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9UZXN0U2hhcmVkTGliMi5qYXIiPgotCSAgICA8ZmlsZXNldCBkaXI9Ii4vc2hhcmVkbGliMiIvPgotCTwvamFyPgotICAJPGphdmFjIHNyY2Rpcj0iLi9zaGFyZWRsaWIzIgotICAgIAkJZGVzdGRpcj0iLi9zaGFyZWRsaWIzIgotICAgIAkJY2xhc3NwYXRoPSIke3MxYXN0ZXN0LmNsYXNzcGF0aH0iCi0gICAgCQlkZWJ1Zz0ib24iCi0gICAgCQlmYWlsb25lcnJvcj0idHJ1ZSIvPgotCTxqYXIgZGVzdGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vbGliL1Rlc3RTaGFyZWRMaWIzLmphciI+Ci0JICAgIDxmaWxlc2V0IGRpcj0iLi9zaGFyZWRsaWIzIi8+Ci0JPC9qYXI+CisgICAgICA8amF2YWMgc3JjZGlyPSIuL3NoYXJlZGxpYjEiCisgICAgICAgICAgICBkZXN0ZGlyPSIuL3NoYXJlZGxpYjEiCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7czFhc3Rlc3QuY2xhc3NwYXRofSIKKyAgICAgICAgICAgIGRlYnVnPSJvbiIKKyAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIi8+CisgICAgPGphciBkZXN0ZmlsZT0iJHtlbnYuUzFBU19IT01FfS9saWIvVGVzdFNoYXJlZExpYjEuamFyIj4KKyAgICAgICAgPGZpbGVzZXQgZGlyPSIuL3NoYXJlZGxpYjEiLz4KKyAgICA8L2phcj4KKyAgICAgIDxqYXZhYyBzcmNkaXI9Ii4vc2hhcmVkbGliMiIKKyAgICAgICAgICAgIGRlc3RkaXI9Ii4vc2hhcmVkbGliMiIKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtzMWFzdGVzdC5jbGFzc3BhdGh9IgorICAgICAgICAgICAgZGVidWc9Im9uIgorICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiLz4KKyAgICA8amFyIGRlc3RmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9UZXN0U2hhcmVkTGliMi5qYXIiPgorICAgICAgICA8ZmlsZXNldCBkaXI9Ii4vc2hhcmVkbGliMiIvPgorICAgIDwvamFyPgorICAgICAgPGphdmFjIHNyY2Rpcj0iLi9zaGFyZWRsaWIzIgorICAgICAgICAgICAgZGVzdGRpcj0iLi9zaGFyZWRsaWIzIgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke3MxYXN0ZXN0LmNsYXNzcGF0aH0iCisgICAgICAgICAgICBkZWJ1Zz0ib24iCisgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIvPgorICAgIDxqYXIgZGVzdGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vbGliL1Rlc3RTaGFyZWRMaWIzLmphciI+CisgICAgICAgIDxmaWxlc2V0IGRpcj0iLi9zaGFyZWRsaWIzIi8+CisgICAgPC9qYXI+CiAgICAgICAgIDxzbGVlcCBzZWNvbmRzPSIxNSIgLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzdGFydERvbWFpbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtODMsMjcgKzgzLDI3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgCTxqYXZhYyBzcmNkaXI9Ii4vYXBwbGliMSIKLSAgICAJCWRlc3RkaXI9Ii4vYXBwbGliMSIKLSAgICAJCWNsYXNzcGF0aD0iJHtzMWFzdGVzdC5jbGFzc3BhdGh9IgotICAgIAkJZGVidWc9Im9uIgotICAgIAkJZmFpbG9uZXJyb3I9InRydWUiLz4KKyAgICAgIDxqYXZhYyBzcmNkaXI9Ii4vYXBwbGliMSIKKyAgICAgICAgICAgIGRlc3RkaXI9Ii4vYXBwbGliMSIKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtzMWFzdGVzdC5jbGFzc3BhdGh9IgorICAgICAgICAgICAgZGVidWc9Im9uIgorICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiLz4KICAgICAgICAgPG1rZGlyIGRpcj0ibGliIi8+Ci0JPGphciBkZXN0ZmlsZT0ibGliL0FwcFNoYXJlZExpYjEuamFyIj4KLQkgICAgPGZpbGVzZXQgZGlyPSIuL2FwcGxpYjEiLz4KLQk8L2phcj4KKyAgICA8amFyIGRlc3RmaWxlPSJsaWIvQXBwU2hhcmVkTGliMS5qYXIiPgorICAgICAgICA8ZmlsZXNldCBkaXI9Ii4vYXBwbGliMSIvPgorICAgIDwvamFyPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgotCTxta2RpciBkaXI9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvYXJjaGl2ZS9NRVRBLUlORiIvPgotCTxjb3B5IGZpbGU9Ii4vYXBwbGljYXRpb24ueG1sIiB0b2Rpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9hcmNoaXZlL01FVEEtSU5GIi8+Ci0JPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIj4KLQkgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2FyY2hpdmUiLz4KLQk8L2phcj4KKyAgICA8bWtkaXIgZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2FyY2hpdmUvTUVUQS1JTkYiLz4KKyAgICA8Y29weSBmaWxlPSIuL2FwcGxpY2F0aW9uLnhtbCIgdG9kaXI9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvYXJjaGl2ZS9NRVRBLUlORiIvPgorICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciI+CisgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9hcmNoaXZlIi8+CisgICAgPC9qYXI+CiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgpAQCAtMTE3LDEyICsxMTcsMTIgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aEVBUi9zZXJ2bGV0L1Rlc3QxU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoRUFSL3NlcnZsZXQvVGVzdDFTZXJ2bGV0LmphdmEKaW5kZXggODZhNDI1MC4uYzY2NGJjYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoRUFSL3NlcnZsZXQvVGVzdDFTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoRUFSL3NlcnZsZXQvVGVzdDFTZXJ2bGV0LmphdmEKQEAgLTM1LDE5ICszNSwxOSBAQAogICAgIHB1YmxpYyB2b2lkIHNlcnZpY2UoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpCiAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24gewogCi0JU3RyaW5nQnVmZmVyIHJldCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICBTdHJpbmdCdWZmZXIgcmV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgICAgICBTdHJpbmcgYXR0ciA9IChTdHJpbmcpIGNvbnRleHQuZ2V0QXR0cmlidXRlKCJTSEFSRURMSUItMSIpOwotCXJldC5hcHBlbmQoYXR0ciArIjsiKTsKKyAgICByZXQuYXBwZW5kKGF0dHIgKyI7Iik7CiAgICAgICAgIGF0dHIgPSAoU3RyaW5nKSBjb250ZXh0LmdldEF0dHJpYnV0ZSgiU0hBUkVETElCLTIiKTsKLQlyZXQuYXBwZW5kKGF0dHIgKyI7Iik7Ci0JYXR0ciA9IChTdHJpbmcpIGNvbnRleHQuZ2V0QXR0cmlidXRlKCJTSEFSRURMSUItMyIpOwotCXJldC5hcHBlbmQoYXR0ciArIjsiKTsKKyAgICByZXQuYXBwZW5kKGF0dHIgKyI7Iik7CisgICAgYXR0ciA9IChTdHJpbmcpIGNvbnRleHQuZ2V0QXR0cmlidXRlKCJTSEFSRURMSUItMyIpOworICAgIHJldC5hcHBlbmQoYXR0ciArIjsiKTsKICAgICAgICAgYXR0ciA9IChTdHJpbmcpIGNvbnRleHQuZ2V0QXR0cmlidXRlKCJTSEFSRURMSUItNCIpOwotCXJldC5hcHBlbmQoYXR0ciArIjsiKTsKKyAgICByZXQuYXBwZW5kKGF0dHIgKyI7Iik7CiAgICAgICAgIGF0dHIgPSAoU3RyaW5nKSBjb250ZXh0LmdldEF0dHJpYnV0ZSgiQVBQTElCLTEiKTsKLQlyZXQuYXBwZW5kKGF0dHIgKyI7Iik7Ci0JYXR0ciA9IChTdHJpbmcpIGNvbnRleHQuZ2V0QXR0cmlidXRlKCJBUFBMSUItMiIpOwotCXJldC5hcHBlbmQoYXR0cik7CisgICAgcmV0LmFwcGVuZChhdHRyICsiOyIpOworICAgIGF0dHIgPSAoU3RyaW5nKSBjb250ZXh0LmdldEF0dHJpYnV0ZSgiQVBQTElCLTIiKTsKKyAgICByZXQuYXBwZW5kKGF0dHIpOwogICAgICAgICByZXMuZ2V0V3JpdGVyKCkud3JpdGUocmV0LnRvU3RyaW5nKCkpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aEVBUi9zaGFyZWRsaWIxL2NvbS9zdW4vZGV2dGVzdHMvd2ViL1NoYXJlZExpYjFTZXJ2Q29udEluaXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aEVBUi9zaGFyZWRsaWIxL2NvbS9zdW4vZGV2dGVzdHMvd2ViL1NoYXJlZExpYjFTZXJ2Q29udEluaXQuamF2YQppbmRleCBhMzk1OTdkLi5jNTFjZmUxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhFQVIvc2hhcmVkbGliMS9jb20vc3VuL2RldnRlc3RzL3dlYi9TaGFyZWRMaWIxU2VydkNvbnRJbml0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoRUFSL3NoYXJlZGxpYjEvY29tL3N1bi9kZXZ0ZXN0cy93ZWIvU2hhcmVkTGliMVNlcnZDb250SW5pdC5qYXZhCkBAIC0yMyw5ICsyMyw5IEBACiBASGFuZGxlc1R5cGVzKFdlYlNlcnZsZXQuY2xhc3MpCiBwdWJsaWMgY2xhc3MgU2hhcmVkTGliMVNlcnZDb250SW5pdCBpbXBsZW1lbnRzIFNlcnZsZXRDb250YWluZXJJbml0aWFsaXplciB7CiAgICAgcHVibGljIFNoYXJlZExpYjFTZXJ2Q29udEluaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJTSEFSRUQgTElCIDEgQ09OU1QiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNIQVJFRCBMSUIgMSBDT05TVCIpOwogICAgIH0KICAgICBwdWJsaWMgdm9pZCBvblN0YXJ0dXAoU2V0PENsYXNzPD8+PiBjLCBTZXJ2bGV0Q29udGV4dCBjdHgpIHsKLQljdHguc2V0QXR0cmlidXRlKCJTSEFSRURMSUItMSIsICJDQUxMRUQgRUFSU0hBUkVETElCLTEiKTsKKyAgICBjdHguc2V0QXR0cmlidXRlKCJTSEFSRURMSUItMSIsICJDQUxMRUQgRUFSU0hBUkVETElCLTEiKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhFQVIvc2hhcmVkbGliMi9jb20vc3VuL2RldnRlc3RzL3dlYi9TaGFyZWRMaWIyU2VydkNvbnRJbml0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhFQVIvc2hhcmVkbGliMi9jb20vc3VuL2RldnRlc3RzL3dlYi9TaGFyZWRMaWIyU2VydkNvbnRJbml0LmphdmEKaW5kZXggMjc1YzkwYS4uNjNkMjgzMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoRUFSL3NoYXJlZGxpYjIvY29tL3N1bi9kZXZ0ZXN0cy93ZWIvU2hhcmVkTGliMlNlcnZDb250SW5pdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aEVBUi9zaGFyZWRsaWIyL2NvbS9zdW4vZGV2dGVzdHMvd2ViL1NoYXJlZExpYjJTZXJ2Q29udEluaXQuamF2YQpAQCAtMjIsOSArMjIsOSBAQAogCiBwdWJsaWMgY2xhc3MgU2hhcmVkTGliMlNlcnZDb250SW5pdCBpbXBsZW1lbnRzIFNlcnZsZXRDb250YWluZXJJbml0aWFsaXplciB7CiAgICAgcHVibGljIFNoYXJlZExpYjJTZXJ2Q29udEluaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJTSEFSRUQgTElCIDIgQ09OU1QiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNIQVJFRCBMSUIgMiBDT05TVCIpOwogICAgIH0KICAgICBwdWJsaWMgdm9pZCBvblN0YXJ0dXAoU2V0PENsYXNzPD8+PiBjLCBTZXJ2bGV0Q29udGV4dCBjdHgpIHsKLQljdHguc2V0QXR0cmlidXRlKCJTSEFSRURMSUItMiIsICJDQUxMRUQgRUFSU0hBUkVETElCLTIiKTsKKyAgICBjdHguc2V0QXR0cmlidXRlKCJTSEFSRURMSUItMiIsICJDQUxMRUQgRUFSU0hBUkVETElCLTIiKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhFQVIvc2hhcmVkbGliMy9jb20vc3VuL2RldnRlc3RzL3dlYi9TaGFyZWRMaWIzU2VydkNvbnRJbml0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhFQVIvc2hhcmVkbGliMy9jb20vc3VuL2RldnRlc3RzL3dlYi9TaGFyZWRMaWIzU2VydkNvbnRJbml0LmphdmEKaW5kZXggMWQ4NjNkMS4uNDE0YTYyYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoRUFSL3NoYXJlZGxpYjMvY29tL3N1bi9kZXZ0ZXN0cy93ZWIvU2hhcmVkTGliM1NlcnZDb250SW5pdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aEVBUi9zaGFyZWRsaWIzL2NvbS9zdW4vZGV2dGVzdHMvd2ViL1NoYXJlZExpYjNTZXJ2Q29udEluaXQuamF2YQpAQCAtMjMsOSArMjMsOSBAQAogQEhhbmRsZXNUeXBlcyhXZWJGaWx0ZXIuY2xhc3MpCiBwdWJsaWMgY2xhc3MgU2hhcmVkTGliM1NlcnZDb250SW5pdCBpbXBsZW1lbnRzIFNlcnZsZXRDb250YWluZXJJbml0aWFsaXplciB7CiAgICAgcHVibGljIFNoYXJlZExpYjNTZXJ2Q29udEluaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJTSEFSRUQgTElCIDMgQ09OU1QiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNIQVJFRCBMSUIgMyBDT05TVCIpOwogICAgIH0KICAgICBwdWJsaWMgdm9pZCBvblN0YXJ0dXAoU2V0PENsYXNzPD8+PiBjLCBTZXJ2bGV0Q29udGV4dCBjdHgpIHsKLQljdHguc2V0QXR0cmlidXRlKCJTSEFSRURMSUItMyIsICJDQUxMRUQgRUFSU0hBUkVETElCLTMiKTsKKyAgICBjdHguc2V0QXR0cmlidXRlKCJTSEFSRURMSUItMyIsICJDQUxMRUQgRUFSU0hBUkVETElCLTMiKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhJbnRlcmZhY2VJbXBsZW1lbnRhdGlvbi9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhJbnRlcmZhY2VJbXBsZW1lbnRhdGlvbi9XZWJUZXN0LmphdmEKaW5kZXggYzRiOWE0ZS4uYWQwYzA1ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoSW50ZXJmYWNlSW1wbGVtZW50YXRpb24vV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aEludGVyZmFjZUltcGxlbWVudGF0aW9uL1dlYlRlc3QuamF2YQpAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBwbHVnZ2FiaWxpdHkgb2Ygc2hhcmVkbGliIHdpdGggaW50ZXJyYWNlIGltcGxlbWVudGF0aW9uIGFuZCBleHRlbnNpb25zIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDYsNyArNDYsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmcgcm9vdCkgewotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZShyb290KTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZShTdHJpbmcgcm9vdCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICArIHJvb3Q7CiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pCkBAIC05Myw3ICs5Myw3IEBACiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIUVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aEludGVyZmFjZUltcGxlbWVudGF0aW9uL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhJbnRlcmZhY2VJbXBsZW1lbnRhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGNjMGI0NzAuLjFjYjllZGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aEludGVyZmFjZUltcGxlbWVudGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoSW50ZXJmYWNlSW1wbGVtZW50YXRpb24vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC1wbHVnZ2FiaWxpdHktc2hhcmVkbGliLWludGVyZmFjZWltcGwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aEludGVyZmFjZUltcGxlbWVudGF0aW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aEludGVyZmFjZUltcGxlbWVudGF0aW9uL2J1aWxkLnhtbAppbmRleCA4YjkwYzdhLi40M2FjZDQ2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhJbnRlcmZhY2VJbXBsZW1lbnRhdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoSW50ZXJmYWNlSW1wbGVtZW50YXRpb24vYnVpbGQueG1sCkBAIC0zNiwzMyArMzYsMzMgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuLWxpYiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotCTxkZWxldGUgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9saWIvVGVzdFNoYXJlZExpYjEuamFyIi8+Ci0JPGRlbGV0ZSBkaXI9Ii4vbGliIi8+CisgICAgPGRlbGV0ZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9UZXN0U2hhcmVkTGliMS5qYXIiLz4KKyAgICA8ZGVsZXRlIGRpcj0iLi9saWIiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzdGFydERvbWFpbiIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJpbml0LXNoYXJlZGxpYiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InN0b3BEb21haW4iLz4KICAgICAgICAgPG1rZGlyIGRpcj0ibGliIi8+Ci0gIAk8amF2YWMgc3JjZGlyPSIuL2ludGVyZmFjZSIKLSAgICAJCWRlc3RkaXI9Ii4vaW50ZXJmYWNlIgotICAgIAkJY2xhc3NwYXRoPSIke3MxYXN0ZXN0LmNsYXNzcGF0aH0iCi0gICAgCQlkZWJ1Zz0ib24iCi0gICAgCQlmYWlsb25lcnJvcj0idHJ1ZSIvPgotCTxqYXIgZGVzdGZpbGU9ImxpYi9Db21tb25JbnRlcmZhY2UuamFyIj4KLQkgICAgPGZpbGVzZXQgZGlyPSIuL2ludGVyZmFjZSIvPgotCTwvamFyPgotICAJPGphdmFjIHNyY2Rpcj0iLi9zaGFyZWRsaWIxIgotICAgIAkJZGVzdGRpcj0iLi9zaGFyZWRsaWIxIgotICAgIAkJY2xhc3NwYXRoPSIke3MxYXN0ZXN0LmNsYXNzcGF0aH07Li9pbnRlcmZhY2UiCi0gICAgCQlkZWJ1Zz0ib24iCi0gICAgCQlmYWlsb25lcnJvcj0idHJ1ZSIvPgotCTxqYXIgZGVzdGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vbGliL1Rlc3RTaGFyZWRMaWIxLmphciI+Ci0JICAgIDxmaWxlc2V0IGRpcj0iLi9zaGFyZWRsaWIxIi8+Ci0JICAgIDxmaWxlc2V0IGRpcj0iLi9pbnRlcmZhY2UiLz4KLQk8L2phcj4KKyAgICAgIDxqYXZhYyBzcmNkaXI9Ii4vaW50ZXJmYWNlIgorICAgICAgICAgICAgZGVzdGRpcj0iLi9pbnRlcmZhY2UiCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7czFhc3Rlc3QuY2xhc3NwYXRofSIKKyAgICAgICAgICAgIGRlYnVnPSJvbiIKKyAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIi8+CisgICAgPGphciBkZXN0ZmlsZT0ibGliL0NvbW1vbkludGVyZmFjZS5qYXIiPgorICAgICAgICA8ZmlsZXNldCBkaXI9Ii4vaW50ZXJmYWNlIi8+CisgICAgPC9qYXI+CisgICAgICA8amF2YWMgc3JjZGlyPSIuL3NoYXJlZGxpYjEiCisgICAgICAgICAgICBkZXN0ZGlyPSIuL3NoYXJlZGxpYjEiCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7czFhc3Rlc3QuY2xhc3NwYXRofTsuL2ludGVyZmFjZSIKKyAgICAgICAgICAgIGRlYnVnPSJvbiIKKyAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIi8+CisgICAgPGphciBkZXN0ZmlsZT0iJHtlbnYuUzFBU19IT01FfS9saWIvVGVzdFNoYXJlZExpYjEuamFyIj4KKyAgICAgICAgPGZpbGVzZXQgZGlyPSIuL3NoYXJlZGxpYjEiLz4KKyAgICAgICAgPGZpbGVzZXQgZGlyPSIuL2ludGVyZmFjZSIvPgorICAgIDwvamFyPgogICAgICAgICA8c2xlZXAgc2Vjb25kcz0iMTUiIC8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic3RhcnREb21haW4iLz4KICAgICA8L3RhcmdldD4KQEAgLTc5LDE2ICs3OSwxNiBAQAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgotCTxta2RpciBkaXI9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvYXJjaGl2ZS9NRVRBLUlORiIvPgotCTxjb3B5IGZpbGU9Ii4vYXBwbGljYXRpb24ueG1sIiB0b2Rpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9hcmNoaXZlL01FVEEtSU5GIi8+Ci0JPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIj4KLQkgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2FyY2hpdmUiLz4KLQk8L2phcj4KKyAgICA8bWtkaXIgZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2FyY2hpdmUvTUVUQS1JTkYiLz4KKyAgICA8Y29weSBmaWxlPSIuL2FwcGxpY2F0aW9uLnhtbCIgdG9kaXI9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvYXJjaGl2ZS9NRVRBLUlORiIvPgorICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciI+CisgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9hcmNoaXZlIi8+CisgICAgPC9qYXI+CiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgpAQCAtMTAxLDEyICsxMDEsMTIgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aEludGVyZmFjZUltcGxlbWVudGF0aW9uL2ludGVyZmFjZS9jb20vc3VuL2RldnRlc3RzL3dlYi9jb21tb24vQ29tbW9uSW50ZXJmYWNlLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhJbnRlcmZhY2VJbXBsZW1lbnRhdGlvbi9pbnRlcmZhY2UvY29tL3N1bi9kZXZ0ZXN0cy93ZWIvY29tbW9uL0NvbW1vbkludGVyZmFjZS5qYXZhCmluZGV4IDNmMjUyNDcuLmE4YTk2MzkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aEludGVyZmFjZUltcGxlbWVudGF0aW9uL2ludGVyZmFjZS9jb20vc3VuL2RldnRlc3RzL3dlYi9jb21tb24vQ29tbW9uSW50ZXJmYWNlLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoSW50ZXJmYWNlSW1wbGVtZW50YXRpb24vaW50ZXJmYWNlL2NvbS9zdW4vZGV2dGVzdHMvd2ViL2NvbW1vbi9Db21tb25JbnRlcmZhY2UuamF2YQpAQCAtMTcsNSArMTcsNSBAQAogcGFja2FnZSBjb20uc3VuLmRldnRlc3RzLndlYi5jb21tb247CiAKIHB1YmxpYyBpbnRlcmZhY2UgQ29tbW9uSW50ZXJmYWNlIHsKLQlwdWJsaWMgU3RyaW5nIHNheUR1bW15SW50ZkhlbGxvKCk7CisgICAgcHVibGljIFN0cmluZyBzYXlEdW1teUludGZIZWxsbygpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoSW50ZXJmYWNlSW1wbGVtZW50YXRpb24vaW50ZXJmYWNlL2NvbS9zdW4vZGV2dGVzdHMvd2ViL2NvbW1vbi9Db21tb25JbnRlcmZhY2VJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhJbnRlcmZhY2VJbXBsZW1lbnRhdGlvbi9pbnRlcmZhY2UvY29tL3N1bi9kZXZ0ZXN0cy93ZWIvY29tbW9uL0NvbW1vbkludGVyZmFjZUltcGwuamF2YQppbmRleCBjZWUyYTY4Li4yN2RhNzk0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhJbnRlcmZhY2VJbXBsZW1lbnRhdGlvbi9pbnRlcmZhY2UvY29tL3N1bi9kZXZ0ZXN0cy93ZWIvY29tbW9uL0NvbW1vbkludGVyZmFjZUltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhJbnRlcmZhY2VJbXBsZW1lbnRhdGlvbi9pbnRlcmZhY2UvY29tL3N1bi9kZXZ0ZXN0cy93ZWIvY29tbW9uL0NvbW1vbkludGVyZmFjZUltcGwuamF2YQpAQCAtMTksNyArMTksNyBAQAogaW1wb3J0IGNvbS5zdW4uZGV2dGVzdHMud2ViLmNvbW1vbi5Db21tb25JbnRlcmZhY2U7CiAKIHB1YmxpYyBjbGFzcyAgQ29tbW9uSW50ZXJmYWNlSW1wbCBpbXBsZW1lbnRzIENvbW1vbkludGVyZmFjZSB7Ci0JcHVibGljIFN0cmluZyBzYXlEdW1teUludGZIZWxsbygpIHsKKyAgICBwdWJsaWMgU3RyaW5nIHNheUR1bW15SW50ZkhlbGxvKCkgewogICAgICAgICAgICAgcmV0dXJuICJIRUVMTExMT09PTyI7CiAgICAgICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aEludGVyZmFjZUltcGxlbWVudGF0aW9uL3NlcnZsZXQvQW5vdGhlckNvbW1vbkludGVyZmFjZUltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aEludGVyZmFjZUltcGxlbWVudGF0aW9uL3NlcnZsZXQvQW5vdGhlckNvbW1vbkludGVyZmFjZUltcGwuamF2YQppbmRleCBiNTkxY2M2Li5jZmRiYjFiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhJbnRlcmZhY2VJbXBsZW1lbnRhdGlvbi9zZXJ2bGV0L0Fub3RoZXJDb21tb25JbnRlcmZhY2VJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoSW50ZXJmYWNlSW1wbGVtZW50YXRpb24vc2VydmxldC9Bbm90aGVyQ29tbW9uSW50ZXJmYWNlSW1wbC5qYXZhCkBAIC0xOSw3ICsxOSw3IEBACiBpbXBvcnQgY29tLnN1bi5kZXZ0ZXN0cy53ZWIuY29tbW9uLkNvbW1vbkludGVyZmFjZTsKIAogcHVibGljIGNsYXNzICBBbm90aGVyQ29tbW9uSW50ZXJmYWNlSW1wbCBpbXBsZW1lbnRzIENvbW1vbkludGVyZmFjZSB7Ci0JcHVibGljIFN0cmluZyBzYXlEdW1teUludGZIZWxsbygpIHsKKyAgICBwdWJsaWMgU3RyaW5nIHNheUR1bW15SW50ZkhlbGxvKCkgewogICAgICAgICAgICAgcmV0dXJuICJIRUVMTExMT09PTyI7CiAgICAgICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aEludGVyZmFjZUltcGxlbWVudGF0aW9uL3NlcnZsZXQvQ29tbW9uSW50ZXJmYWNlSW1wbEV4dG4uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aEludGVyZmFjZUltcGxlbWVudGF0aW9uL3NlcnZsZXQvQ29tbW9uSW50ZXJmYWNlSW1wbEV4dG4uamF2YQppbmRleCA4ZTMwNWY4Li44YzE2NjZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhJbnRlcmZhY2VJbXBsZW1lbnRhdGlvbi9zZXJ2bGV0L0NvbW1vbkludGVyZmFjZUltcGxFeHRuLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoSW50ZXJmYWNlSW1wbGVtZW50YXRpb24vc2VydmxldC9Db21tb25JbnRlcmZhY2VJbXBsRXh0bi5qYXZhCkBAIC0xOSw3ICsxOSw3IEBACiBpbXBvcnQgY29tLnN1bi5kZXZ0ZXN0cy53ZWIuY29tbW9uLkNvbW1vbkludGVyZmFjZUltcGw7CiAKIHB1YmxpYyBjbGFzcyAgQ29tbW9uSW50ZXJmYWNlSW1wbEV4dG4gZXh0ZW5kcyBDb21tb25JbnRlcmZhY2VJbXBsIHsKLQlwdWJsaWMgU3RyaW5nIG15T3duTWV0aG9kKCkgeworICAgIHB1YmxpYyBTdHJpbmcgbXlPd25NZXRob2QoKSB7CiAgICAgICAgICAgICByZXR1cm4gIkhFRUxMTExPT09PIjsKICAgICAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoSW50ZXJmYWNlSW1wbGVtZW50YXRpb24vc2VydmxldC9UZXN0MVNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aEludGVyZmFjZUltcGxlbWVudGF0aW9uL3NlcnZsZXQvVGVzdDFTZXJ2bGV0LmphdmEKaW5kZXggNzRlZWE3ZC4uYjVmMzJmNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoSW50ZXJmYWNlSW1wbGVtZW50YXRpb24vc2VydmxldC9UZXN0MVNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhJbnRlcmZhY2VJbXBsZW1lbnRhdGlvbi9zZXJ2bGV0L1Rlc3QxU2VydmxldC5qYXZhCkBAIC0zNSwxOSArMzUsMTkgQEAKICAgICBwdWJsaWMgdm9pZCBzZXJ2aWNlKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzKQogICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uIHsKIAotCVN0cmluZ0J1ZmZlciByZXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgU3RyaW5nQnVmZmVyIHJldCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgICAgICAgU3RyaW5nIGF0dHIgPSAoU3RyaW5nKSBjb250ZXh0LmdldEF0dHJpYnV0ZSgiU0hBUkVETElCLTEiKTsKLQlyZXQuYXBwZW5kKGF0dHIgKyI7Iik7CisgICAgcmV0LmFwcGVuZChhdHRyICsiOyIpOwogICAgICAgICBhdHRyID0gKFN0cmluZykgY29udGV4dC5nZXRBdHRyaWJ1dGUoIlNIQVJFRExJQi0yIik7Ci0JcmV0LmFwcGVuZChhdHRyICsiOyIpOwotCWF0dHIgPSAoU3RyaW5nKSBjb250ZXh0LmdldEF0dHJpYnV0ZSgiU0hBUkVETElCLTMiKTsKLQlyZXQuYXBwZW5kKGF0dHIgKyI7Iik7CisgICAgcmV0LmFwcGVuZChhdHRyICsiOyIpOworICAgIGF0dHIgPSAoU3RyaW5nKSBjb250ZXh0LmdldEF0dHJpYnV0ZSgiU0hBUkVETElCLTMiKTsKKyAgICByZXQuYXBwZW5kKGF0dHIgKyI7Iik7CiAgICAgICAgIGF0dHIgPSAoU3RyaW5nKSBjb250ZXh0LmdldEF0dHJpYnV0ZSgiU0hBUkVETElCLTQiKTsKLQlyZXQuYXBwZW5kKGF0dHIgKyI7Iik7CisgICAgcmV0LmFwcGVuZChhdHRyICsiOyIpOwogICAgICAgICBhdHRyID0gKFN0cmluZykgY29udGV4dC5nZXRBdHRyaWJ1dGUoIkFQUExJQi0xIik7Ci0JcmV0LmFwcGVuZChhdHRyICsiOyIpOwotCWF0dHIgPSAoU3RyaW5nKSBjb250ZXh0LmdldEF0dHJpYnV0ZSgiQVBQTElCLTIiKTsKLQlyZXQuYXBwZW5kKGF0dHIgKyI7Iik7CisgICAgcmV0LmFwcGVuZChhdHRyICsiOyIpOworICAgIGF0dHIgPSAoU3RyaW5nKSBjb250ZXh0LmdldEF0dHJpYnV0ZSgiQVBQTElCLTIiKTsKKyAgICByZXQuYXBwZW5kKGF0dHIgKyI7Iik7CiAgICAgICAgIHJlcy5nZXRXcml0ZXIoKS53cml0ZShyZXQudG9TdHJpbmcoKSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoSW50ZXJmYWNlSW1wbGVtZW50YXRpb24vc2hhcmVkbGliMS9jb20vc3VuL2RldnRlc3RzL3dlYi9TaGFyZWRMaWIxU2VydkNvbnRJbml0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhJbnRlcmZhY2VJbXBsZW1lbnRhdGlvbi9zaGFyZWRsaWIxL2NvbS9zdW4vZGV2dGVzdHMvd2ViL1NoYXJlZExpYjFTZXJ2Q29udEluaXQuamF2YQppbmRleCAzMGQ0Nzg3Li5kN2IxOWRhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhJbnRlcmZhY2VJbXBsZW1lbnRhdGlvbi9zaGFyZWRsaWIxL2NvbS9zdW4vZGV2dGVzdHMvd2ViL1NoYXJlZExpYjFTZXJ2Q29udEluaXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhJbnRlcmZhY2VJbXBsZW1lbnRhdGlvbi9zaGFyZWRsaWIxL2NvbS9zdW4vZGV2dGVzdHMvd2ViL1NoYXJlZExpYjFTZXJ2Q29udEluaXQuamF2YQpAQCAtMjQsOSArMjQsOSBAQAogQEhhbmRsZXNUeXBlcyhDb21tb25JbnRlcmZhY2UuY2xhc3MpCiBwdWJsaWMgY2xhc3MgU2hhcmVkTGliMVNlcnZDb250SW5pdCBpbXBsZW1lbnRzIFNlcnZsZXRDb250YWluZXJJbml0aWFsaXplciB7CiAgICAgcHVibGljIFNoYXJlZExpYjFTZXJ2Q29udEluaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJTSEFSRUQgTElCIDEgQ09OU1QiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNIQVJFRCBMSUIgMSBDT05TVCIpOwogICAgIH0KICAgICBwdWJsaWMgdm9pZCBvblN0YXJ0dXAoU2V0PENsYXNzPD8+PiBjLCBTZXJ2bGV0Q29udGV4dCBjdHgpIHsKLQljdHguc2V0QXR0cmlidXRlKCJTSEFSRURMSUItMSIsIGMuc2l6ZSgpKyJDQUxMRUQgSU5URklNUEwtU0hBUkVETElCLTEiKTsKKyAgICBjdHguc2V0QXR0cmlidXRlKCJTSEFSRURMSUItMSIsIGMuc2l6ZSgpKyJDQUxMRUQgSU5URklNUEwtU0hBUkVETElCLTEiKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhXYXJzL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aFdhcnMvV2ViVGVzdC5qYXZhCmluZGV4IDA0MDczN2UuLjYxYmNlMzkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aFdhcnMvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aFdhcnMvV2ViVGVzdC5qYXZhCkBAIC0zOSwyMiArMzksMjIgQEAKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgICAgICB0ZXN0TnVtYmVyID0gYXJnc1szXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgcGx1Z2dhYmxlIHNoYXJlZCBsaWJyYXJpZXMgaW4gV0FSIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwotCWlmKCIxIi5lcXVhbHMoYXJnc1szXSkpIHsKKyAgICBpZigiMSIuZXF1YWxzKGFyZ3NbM10pKSB7CiAgICAgICAgICAgICB3ZWJUZXN0LmRvVGVzdCgiL215dGVzdDEiKTsKICAgICAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7Ci0JfQotCWlmKCIyIi5lcXVhbHMoYXJnc1szXSkpIHsKKyAgICB9CisgICAgaWYoIjIiLmVxdWFscyhhcmdzWzNdKSkgewogICAgICAgICAgICAgd2ViVGVzdC5kb1Rlc3QoIi9teXRlc3QyIik7CiAgICAgICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwotCX0KKyAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZyByb290KSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKHJvb3QpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVNUX05BTUUgKyAiIHRlc3QgZmFpbGVkIik7CkBAIC02NCw3ICs2NCw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZShTdHJpbmcgcm9vdCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICArIHJvb3Q7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW52b2tpbmcgIiArIHVybCk7CkBAIC0xMDMsMTAgKzEwMywxMCBAQAogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUkVTUE9OU0UgOiAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFWyhuZXcgSW50ZWdlcih0ZXN0TnVtYmVyKSkuaW50VmFsdWUoKV0gKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aFdhcnMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoV2Fycy9idWlsZC54bWwKaW5kZXggMDNkYWUzOS4uNzVlNGMwMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoV2Fycy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoV2Fycy9idWlsZC54bWwKQEAgLTMyLDY2ICszMiw2NiBAQAogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJpbml0LXNoYXJlZGxpYixidWlsZCxydW4sdW5kZXBsb3ksc3RvcERvbWFpbixjbGVhbi1saWIiLz4KIAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQk8YW50IGRpcj0id2ViYXBwMSIgdGFyZ2V0PSJjbGVhbiIvPgotCTxhbnQgZGlyPSJ3ZWJhcHAyIiB0YXJnZXQ9ImNsZWFuIi8+CisgICAgPGFudCBkaXI9IndlYmFwcDEiIHRhcmdldD0iY2xlYW4iLz4KKyAgICA8YW50IGRpcj0id2ViYXBwMiIgdGFyZ2V0PSJjbGVhbiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgICAgICA8ZGVsZXRlPgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4tbGliIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JPGRlbGV0ZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9UZXN0U2hhcmVkTGliMS5qYXIiLz4KLQk8ZGVsZXRlIGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vbGliL1Rlc3RTaGFyZWRMaWIyLmphciIvPgotCTxkZWxldGUgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9saWIvVGVzdFNoYXJlZExpYjMuamFyIi8+Ci0JPGRlbGV0ZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9UZXN0U2hhcmVkTGliNC5qYXIiLz4KKyAgICA8ZGVsZXRlIGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vbGliL1Rlc3RTaGFyZWRMaWIxLmphciIvPgorICAgIDxkZWxldGUgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9saWIvVGVzdFNoYXJlZExpYjIuamFyIi8+CisgICAgPGRlbGV0ZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9UZXN0U2hhcmVkTGliMy5qYXIiLz4KKyAgICA8ZGVsZXRlIGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vbGliL1Rlc3RTaGFyZWRMaWI0LmphciIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InN0YXJ0RG9tYWluIi8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImluaXQtc2hhcmVkbGliIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic3RvcERvbWFpbiIvPgotICAJPGphdmFjIHNyY2Rpcj0iLi9zaGFyZWRsaWIxIgotICAgIAkJZGVzdGRpcj0iLi9zaGFyZWRsaWIxIgotICAgIAkJY2xhc3NwYXRoPSIke3MxYXN0ZXN0LmNsYXNzcGF0aH0iCi0gICAgCQlkZWJ1Zz0ib24iCi0gICAgCQlmYWlsb25lcnJvcj0idHJ1ZSIvPgotCTxqYXIgZGVzdGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vbGliL1Rlc3RTaGFyZWRMaWIxLmphciI+Ci0JICAgIDxmaWxlc2V0IGRpcj0iLi9zaGFyZWRsaWIxIi8+Ci0JPC9qYXI+Ci0gIAk8amF2YWMgc3JjZGlyPSIuL3NoYXJlZGxpYjIiCi0gICAgCQlkZXN0ZGlyPSIuL3NoYXJlZGxpYjIiCi0gICAgCQljbGFzc3BhdGg9IiR7czFhc3Rlc3QuY2xhc3NwYXRofSIKLSAgICAJCWRlYnVnPSJvbiIKLSAgICAJCWZhaWxvbmVycm9yPSJ0cnVlIi8+Ci0JPGphciBkZXN0ZmlsZT0iJHtlbnYuUzFBU19IT01FfS9saWIvVGVzdFNoYXJlZExpYjIuamFyIj4KLQkgICAgPGZpbGVzZXQgZGlyPSIuL3NoYXJlZGxpYjIiLz4KLQk8L2phcj4KLSAgCTxqYXZhYyBzcmNkaXI9Ii4vc2hhcmVkbGliMyIKLSAgICAJCWRlc3RkaXI9Ii4vc2hhcmVkbGliMyIKLSAgICAJCWNsYXNzcGF0aD0iJHtzMWFzdGVzdC5jbGFzc3BhdGh9IgotICAgIAkJZGVidWc9Im9uIgotICAgIAkJZmFpbG9uZXJyb3I9InRydWUiLz4KLQk8amFyIGRlc3RmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9UZXN0U2hhcmVkTGliMy5qYXIiPgotCSAgICA8ZmlsZXNldCBkaXI9Ii4vc2hhcmVkbGliMyIvPgotCTwvamFyPgotICAJPGphdmFjIHNyY2Rpcj0iLi9zaGFyZWRsaWI0IgotICAgIAkJZGVzdGRpcj0iLi9zaGFyZWRsaWI0IgotICAgIAkJY2xhc3NwYXRoPSIke3MxYXN0ZXN0LmNsYXNzcGF0aH0iCi0gICAgCQlkZWJ1Zz0ib24iCi0gICAgCQlmYWlsb25lcnJvcj0idHJ1ZSIvPgotCTxqYXIgZGVzdGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vbGliL1Rlc3RTaGFyZWRMaWI0LmphciI+Ci0JICAgIDxmaWxlc2V0IGRpcj0iLi9zaGFyZWRsaWI0Ii8+Ci0JPC9qYXI+CisgICAgICA8amF2YWMgc3JjZGlyPSIuL3NoYXJlZGxpYjEiCisgICAgICAgICAgICBkZXN0ZGlyPSIuL3NoYXJlZGxpYjEiCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7czFhc3Rlc3QuY2xhc3NwYXRofSIKKyAgICAgICAgICAgIGRlYnVnPSJvbiIKKyAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIi8+CisgICAgPGphciBkZXN0ZmlsZT0iJHtlbnYuUzFBU19IT01FfS9saWIvVGVzdFNoYXJlZExpYjEuamFyIj4KKyAgICAgICAgPGZpbGVzZXQgZGlyPSIuL3NoYXJlZGxpYjEiLz4KKyAgICA8L2phcj4KKyAgICAgIDxqYXZhYyBzcmNkaXI9Ii4vc2hhcmVkbGliMiIKKyAgICAgICAgICAgIGRlc3RkaXI9Ii4vc2hhcmVkbGliMiIKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtzMWFzdGVzdC5jbGFzc3BhdGh9IgorICAgICAgICAgICAgZGVidWc9Im9uIgorICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiLz4KKyAgICA8amFyIGRlc3RmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9UZXN0U2hhcmVkTGliMi5qYXIiPgorICAgICAgICA8ZmlsZXNldCBkaXI9Ii4vc2hhcmVkbGliMiIvPgorICAgIDwvamFyPgorICAgICAgPGphdmFjIHNyY2Rpcj0iLi9zaGFyZWRsaWIzIgorICAgICAgICAgICAgZGVzdGRpcj0iLi9zaGFyZWRsaWIzIgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke3MxYXN0ZXN0LmNsYXNzcGF0aH0iCisgICAgICAgICAgICBkZWJ1Zz0ib24iCisgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIvPgorICAgIDxqYXIgZGVzdGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vbGliL1Rlc3RTaGFyZWRMaWIzLmphciI+CisgICAgICAgIDxmaWxlc2V0IGRpcj0iLi9zaGFyZWRsaWIzIi8+CisgICAgPC9qYXI+CisgICAgICA8amF2YWMgc3JjZGlyPSIuL3NoYXJlZGxpYjQiCisgICAgICAgICAgICBkZXN0ZGlyPSIuL3NoYXJlZGxpYjQiCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7czFhc3Rlc3QuY2xhc3NwYXRofSIKKyAgICAgICAgICAgIGRlYnVnPSJvbiIKKyAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIi8+CisgICAgPGphciBkZXN0ZmlsZT0iJHtlbnYuUzFBU19IT01FfS9saWIvVGVzdFNoYXJlZExpYjQuamFyIj4KKyAgICAgICAgPGZpbGVzZXQgZGlyPSIuL3NoYXJlZGxpYjQiLz4KKyAgICA8L2phcj4KICAgICAgICAgPHNsZWVwIHNlY29uZHM9IjE1IiAvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InN0YXJ0RG9tYWluIi8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIj4KLQk8YW50IGRpcj0id2ViYXBwMSIgdGFyZ2V0PSJkZXBsb3kiLz4KLQk8YW50IGRpcj0id2ViYXBwMiIgdGFyZ2V0PSJkZXBsb3kiLz4KKyAgICA8YW50IGRpcj0id2ViYXBwMSIgdGFyZ2V0PSJkZXBsb3kiLz4KKyAgICA8YW50IGRpcj0id2ViYXBwMiIgdGFyZ2V0PSJkZXBsb3kiLz4KICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CkBAIC0xMTUsMTAgKzExNSwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQk8YW50IGRpcj0id2ViYXBwMSIgdGFyZ2V0PSJ1bmRlcGxveSIvPgotCTxhbnQgZGlyPSJ3ZWJhcHAyIiB0YXJnZXQ9InVuZGVwbG95Ii8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPGFudCBkaXI9IndlYmFwcDEiIHRhcmdldD0idW5kZXBsb3kiLz4KKyAgICA8YW50IGRpcj0id2ViYXBwMiIgdGFyZ2V0PSJ1bmRlcGxveSIvPgorICAgIDwvdGFyZ2V0PgogCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhXYXJzL3NoYXJlZGxpYjEvY29tL3N1bi9kZXZ0ZXN0cy93ZWIvU2hhcmVkTGliMVNlcnZDb250SW5pdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoV2Fycy9zaGFyZWRsaWIxL2NvbS9zdW4vZGV2dGVzdHMvd2ViL1NoYXJlZExpYjFTZXJ2Q29udEluaXQuamF2YQppbmRleCAwZmM2MGM5Li41NTE4MWQ5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhXYXJzL3NoYXJlZGxpYjEvY29tL3N1bi9kZXZ0ZXN0cy93ZWIvU2hhcmVkTGliMVNlcnZDb250SW5pdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aFdhcnMvc2hhcmVkbGliMS9jb20vc3VuL2RldnRlc3RzL3dlYi9TaGFyZWRMaWIxU2VydkNvbnRJbml0LmphdmEKQEAgLTIzLDkgKzIzLDkgQEAKIEBIYW5kbGVzVHlwZXMoV2ViU2VydmxldC5jbGFzcykKIHB1YmxpYyBjbGFzcyBTaGFyZWRMaWIxU2VydkNvbnRJbml0IGltcGxlbWVudHMgU2VydmxldENvbnRhaW5lckluaXRpYWxpemVyIHsKICAgICBwdWJsaWMgU2hhcmVkTGliMVNlcnZDb250SW5pdCgpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIlNIQVJFRCBMSUIgMSBDT05TVCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU0hBUkVEIExJQiAxIENPTlNUIik7CiAgICAgfQogICAgIHB1YmxpYyB2b2lkIG9uU3RhcnR1cChTZXQ8Q2xhc3M8Pz4+IGMsIFNlcnZsZXRDb250ZXh0IGN0eCkgewotCWN0eC5zZXRBdHRyaWJ1dGUoIlNIQVJFRExJQi0xIiwgIkNBTExFRCBTSEFSRURMSUItMSIpOworICAgIGN0eC5zZXRBdHRyaWJ1dGUoIlNIQVJFRExJQi0xIiwgIkNBTExFRCBTSEFSRURMSUItMSIpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aFdhcnMvc2hhcmVkbGliMi9jb20vc3VuL2RldnRlc3RzL3dlYi9TaGFyZWRMaWIyU2VydkNvbnRJbml0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhXYXJzL3NoYXJlZGxpYjIvY29tL3N1bi9kZXZ0ZXN0cy93ZWIvU2hhcmVkTGliMlNlcnZDb250SW5pdC5qYXZhCmluZGV4IDkxNTdjODMuLmRiMmI4OTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aFdhcnMvc2hhcmVkbGliMi9jb20vc3VuL2RldnRlc3RzL3dlYi9TaGFyZWRMaWIyU2VydkNvbnRJbml0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoV2Fycy9zaGFyZWRsaWIyL2NvbS9zdW4vZGV2dGVzdHMvd2ViL1NoYXJlZExpYjJTZXJ2Q29udEluaXQuamF2YQpAQCAtMjIsOSArMjIsOSBAQAogCiBwdWJsaWMgY2xhc3MgU2hhcmVkTGliMlNlcnZDb250SW5pdCBpbXBsZW1lbnRzIFNlcnZsZXRDb250YWluZXJJbml0aWFsaXplciB7CiAgICAgcHVibGljIFNoYXJlZExpYjJTZXJ2Q29udEluaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJTSEFSRUQgTElCIDIgQ09OU1QiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNIQVJFRCBMSUIgMiBDT05TVCIpOwogICAgIH0KICAgICBwdWJsaWMgdm9pZCBvblN0YXJ0dXAoU2V0PENsYXNzPD8+PiBjLCBTZXJ2bGV0Q29udGV4dCBjdHgpIHsKLQljdHguc2V0QXR0cmlidXRlKCJTSEFSRURMSUItMiIsICJDQUxMRUQgU0hBUkVETElCLTIiKTsKKyAgICBjdHguc2V0QXR0cmlidXRlKCJTSEFSRURMSUItMiIsICJDQUxMRUQgU0hBUkVETElCLTIiKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhXYXJzL3NoYXJlZGxpYjMvY29tL3N1bi9kZXZ0ZXN0cy93ZWIvU2hhcmVkTGliM1NlcnZDb250SW5pdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoV2Fycy9zaGFyZWRsaWIzL2NvbS9zdW4vZGV2dGVzdHMvd2ViL1NoYXJlZExpYjNTZXJ2Q29udEluaXQuamF2YQppbmRleCBlM2E0NTQxLi5jNTJlM2VlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhXYXJzL3NoYXJlZGxpYjMvY29tL3N1bi9kZXZ0ZXN0cy93ZWIvU2hhcmVkTGliM1NlcnZDb250SW5pdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aFdhcnMvc2hhcmVkbGliMy9jb20vc3VuL2RldnRlc3RzL3dlYi9TaGFyZWRMaWIzU2VydkNvbnRJbml0LmphdmEKQEAgLTIzLDkgKzIzLDkgQEAKIEBIYW5kbGVzVHlwZXMoV2ViRmlsdGVyLmNsYXNzKQogcHVibGljIGNsYXNzIFNoYXJlZExpYjNTZXJ2Q29udEluaXQgaW1wbGVtZW50cyBTZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIgewogICAgIHB1YmxpYyBTaGFyZWRMaWIzU2VydkNvbnRJbml0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiU0hBUkVEIExJQiAzIENPTlNUIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJTSEFSRUQgTElCIDMgQ09OU1QiKTsKICAgICB9CiAgICAgcHVibGljIHZvaWQgb25TdGFydHVwKFNldDxDbGFzczw/Pj4gYywgU2VydmxldENvbnRleHQgY3R4KSB7Ci0JY3R4LnNldEF0dHJpYnV0ZSgiU0hBUkVETElCLTMiLCAiQ0FMTEVEIFNIQVJFRExJQi0zIik7CisgICAgY3R4LnNldEF0dHJpYnV0ZSgiU0hBUkVETElCLTMiLCAiQ0FMTEVEIFNIQVJFRExJQi0zIik7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoV2Fycy9zaGFyZWRsaWI0L2NvbS9zdW4vZGV2dGVzdHMvd2ViL1NoYXJlZExpYjRTZXJ2Q29udEluaXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aFdhcnMvc2hhcmVkbGliNC9jb20vc3VuL2RldnRlc3RzL3dlYi9TaGFyZWRMaWI0U2VydkNvbnRJbml0LmphdmEKaW5kZXggYTM1MjNmNS4uZjFmMzMyMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoV2Fycy9zaGFyZWRsaWI0L2NvbS9zdW4vZGV2dGVzdHMvd2ViL1NoYXJlZExpYjRTZXJ2Q29udEluaXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhXYXJzL3NoYXJlZGxpYjQvY29tL3N1bi9kZXZ0ZXN0cy93ZWIvU2hhcmVkTGliNFNlcnZDb250SW5pdC5qYXZhCkBAIC0yMyw5ICsyMyw5IEBACiBASGFuZGxlc1R5cGVzKGpha2FydGEuandzLldlYlNlcnZpY2UuY2xhc3MpCiBwdWJsaWMgY2xhc3MgU2hhcmVkTGliNFNlcnZDb250SW5pdCBpbXBsZW1lbnRzIFNlcnZsZXRDb250YWluZXJJbml0aWFsaXplciB7CiAgICAgcHVibGljIFNoYXJlZExpYjRTZXJ2Q29udEluaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJTSEFSRUQgTElCIDQgQ09OU1QiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNIQVJFRCBMSUIgNCBDT05TVCIpOwogICAgIH0KICAgICBwdWJsaWMgdm9pZCBvblN0YXJ0dXAoU2V0PENsYXNzPD8+PiBjLCBTZXJ2bGV0Q29udGV4dCBjdHgpIHsKLQljdHguc2V0QXR0cmlidXRlKCJTSEFSRURMSUItNCIsICJDQUxMRUQgU0hBUkVETElCLTQiKTsKKyAgICBjdHguc2V0QXR0cmlidXRlKCJTSEFSRURMSUItNCIsICJDQUxMRUQgU0hBUkVETElCLTQiKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhXYXJzL3dlYmFwcDEvYXBwbGliMS9jb20vc3VuL2RldnRlc3RzL3dlYi9hcHBsaWIvU2VydkNvbnRJbml0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhXYXJzL3dlYmFwcDEvYXBwbGliMS9jb20vc3VuL2RldnRlc3RzL3dlYi9hcHBsaWIvU2VydkNvbnRJbml0LmphdmEKaW5kZXggNzgzZTFhMS4uMGM0MzM1ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoV2Fycy93ZWJhcHAxL2FwcGxpYjEvY29tL3N1bi9kZXZ0ZXN0cy93ZWIvYXBwbGliL1NlcnZDb250SW5pdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aFdhcnMvd2ViYXBwMS9hcHBsaWIxL2NvbS9zdW4vZGV2dGVzdHMvd2ViL2FwcGxpYi9TZXJ2Q29udEluaXQuamF2YQpAQCAtMjMsMTAgKzIzLDEwIEBACiBASGFuZGxlc1R5cGVzKFdlYlNlcnZsZXQuY2xhc3MpCiBwdWJsaWMgY2xhc3MgU2VydkNvbnRJbml0IGltcGxlbWVudHMgU2VydmxldENvbnRhaW5lckluaXRpYWxpemVyIHsKICAgICBwdWJsaWMgU2VydkNvbnRJbml0KCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiVEVTVCBBUFAgTElCIENPTlNUIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJURVNUIEFQUCBMSUIgQ09OU1QiKTsKICAgICB9CiAgICAgcHVibGljIHZvaWQgb25TdGFydHVwKFNldDxDbGFzczw/Pj4gYywgU2VydmxldENvbnRleHQgY3R4KSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJURVNUIEFQUCBMSUIgb25TdGFydHVwIik7Ci0JY3R4LnNldEF0dHJpYnV0ZSgiQVBQTElCLTEiLCAiQ0FMTEVEIEFQUExJQi0xIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJURVNUIEFQUCBMSUIgb25TdGFydHVwIik7CisgICAgY3R4LnNldEF0dHJpYnV0ZSgiQVBQTElCLTEiLCAiQ0FMTEVEIEFQUExJQi0xIik7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoV2Fycy93ZWJhcHAxL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhXYXJzL3dlYmFwcDEvYnVpbGQucHJvcGVydGllcwppbmRleCAyNGYzMGVlLi5kMGU1YWMyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhXYXJzL3dlYmFwcDEvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhXYXJzL3dlYmFwcDEvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LXBsdWdnYWJpbGl0eS0xIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhXYXJzL3dlYmFwcDEvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoV2Fycy93ZWJhcHAxL2J1aWxkLnhtbAppbmRleCBkNWE0YTM3Li4wNjcyMTY3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhXYXJzL3dlYmFwcDEvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aFdhcnMvd2ViYXBwMS9idWlsZC54bWwKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDUsMzAgKzQ1LDMwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgCTxqYXZhYyBzcmNkaXI9Ii4vYXBwbGliMSIKLSAgICAJCWRlc3RkaXI9Ii4vYXBwbGliMSIKLSAgICAJCWNsYXNzcGF0aD0iJHtzMWFzdGVzdC5jbGFzc3BhdGh9IgotICAgIAkJZGVidWc9Im9uIgotICAgIAkJZmFpbG9uZXJyb3I9InRydWUiLz4KKyAgICAgIDxqYXZhYyBzcmNkaXI9Ii4vYXBwbGliMSIKKyAgICAgICAgICAgIGRlc3RkaXI9Ii4vYXBwbGliMSIKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtzMWFzdGVzdC5jbGFzc3BhdGh9IgorICAgICAgICAgICAgZGVidWc9Im9uIgorICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiLz4KICAgICAgICAgPG1rZGlyIGRpcj0ibGliIi8+Ci0JPGphciBkZXN0ZmlsZT0ibGliL0FwcFNoYXJlZExpYjEuamFyIj4KLQkgICAgPGZpbGVzZXQgZGlyPSIuL2FwcGxpYjEiLz4KLQk8L2phcj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICA8amFyIGRlc3RmaWxlPSJsaWIvQXBwU2hhcmVkTGliMS5qYXIiPgorICAgICAgICA8ZmlsZXNldCBkaXI9Ii4vYXBwbGliMSIvPgorICAgIDwvamFyPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJidWlsZCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aFdhcnMvd2ViYXBwMS9zZXJ2bGV0L1Rlc3QxU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoV2Fycy93ZWJhcHAxL3NlcnZsZXQvVGVzdDFTZXJ2bGV0LmphdmEKaW5kZXggNTkxYTU0OC4uMDQyOWIzYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoV2Fycy93ZWJhcHAxL3NlcnZsZXQvVGVzdDFTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoV2Fycy93ZWJhcHAxL3NlcnZsZXQvVGVzdDFTZXJ2bGV0LmphdmEKQEAgLTM1LDE5ICszNSwxOSBAQAogICAgIHB1YmxpYyB2b2lkIHNlcnZpY2UoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpCiAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24gewogCi0JU3RyaW5nQnVmZmVyIHJldCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICBTdHJpbmdCdWZmZXIgcmV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgICAgICBTdHJpbmcgYXR0ciA9IChTdHJpbmcpIGNvbnRleHQuZ2V0QXR0cmlidXRlKCJTSEFSRURMSUItMSIpOwotCXJldC5hcHBlbmQoYXR0ciArIjsiKTsKKyAgICByZXQuYXBwZW5kKGF0dHIgKyI7Iik7CiAgICAgICAgIGF0dHIgPSAoU3RyaW5nKSBjb250ZXh0LmdldEF0dHJpYnV0ZSgiU0hBUkVETElCLTIiKTsKLQlyZXQuYXBwZW5kKGF0dHIgKyI7Iik7Ci0JYXR0ciA9IChTdHJpbmcpIGNvbnRleHQuZ2V0QXR0cmlidXRlKCJTSEFSRURMSUItMyIpOwotCXJldC5hcHBlbmQoYXR0ciArIjsiKTsKKyAgICByZXQuYXBwZW5kKGF0dHIgKyI7Iik7CisgICAgYXR0ciA9IChTdHJpbmcpIGNvbnRleHQuZ2V0QXR0cmlidXRlKCJTSEFSRURMSUItMyIpOworICAgIHJldC5hcHBlbmQoYXR0ciArIjsiKTsKICAgICAgICAgYXR0ciA9IChTdHJpbmcpIGNvbnRleHQuZ2V0QXR0cmlidXRlKCJTSEFSRURMSUItNCIpOwotCXJldC5hcHBlbmQoYXR0ciArIjsiKTsKKyAgICByZXQuYXBwZW5kKGF0dHIgKyI7Iik7CiAgICAgICAgIGF0dHIgPSAoU3RyaW5nKSBjb250ZXh0LmdldEF0dHJpYnV0ZSgiQVBQTElCLTEiKTsKLQlyZXQuYXBwZW5kKGF0dHIgKyI7Iik7Ci0JYXR0ciA9IChTdHJpbmcpIGNvbnRleHQuZ2V0QXR0cmlidXRlKCJBUFBMSUItMiIpOwotCXJldC5hcHBlbmQoYXR0cik7CisgICAgcmV0LmFwcGVuZChhdHRyICsiOyIpOworICAgIGF0dHIgPSAoU3RyaW5nKSBjb250ZXh0LmdldEF0dHJpYnV0ZSgiQVBQTElCLTIiKTsKKyAgICByZXQuYXBwZW5kKGF0dHIpOwogICAgICAgICByZXMuZ2V0V3JpdGVyKCkud3JpdGUocmV0LnRvU3RyaW5nKCkpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aFdhcnMvd2ViYXBwMi9hcHBsaWIyL2NvbS9zdW4vZGV2dGVzdHMvd2ViL2FwcGxpYi9TZXJ2Q29udDJJbml0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhXYXJzL3dlYmFwcDIvYXBwbGliMi9jb20vc3VuL2RldnRlc3RzL3dlYi9hcHBsaWIvU2VydkNvbnQySW5pdC5qYXZhCmluZGV4IDRiZWFlM2UuLjBkOTBjYTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aFdhcnMvd2ViYXBwMi9hcHBsaWIyL2NvbS9zdW4vZGV2dGVzdHMvd2ViL2FwcGxpYi9TZXJ2Q29udDJJbml0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoV2Fycy93ZWJhcHAyL2FwcGxpYjIvY29tL3N1bi9kZXZ0ZXN0cy93ZWIvYXBwbGliL1NlcnZDb250MkluaXQuamF2YQpAQCAtMjMsOSArMjMsOSBAQAogQEhhbmRsZXNUeXBlcyhXZWJGaWx0ZXIuY2xhc3MpCiBwdWJsaWMgY2xhc3MgU2VydkNvbnQySW5pdCBpbXBsZW1lbnRzIFNlcnZsZXRDb250YWluZXJJbml0aWFsaXplciB7CiAgICAgcHVibGljIFNlcnZDb250MkluaXQoKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJBUFAgTElCIDIgQ09OU1QiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFQUCBMSUIgMiBDT05TVCIpOwogICAgIH0KICAgICBwdWJsaWMgdm9pZCBvblN0YXJ0dXAoU2V0PENsYXNzPD8+PiBjLCBTZXJ2bGV0Q29udGV4dCBjdHgpIHsKLQljdHguc2V0QXR0cmlidXRlKCJBUFBMSUItMiIsICJDQUxMRUQgQVBQTElCLTIiKTsKKyAgICBjdHguc2V0QXR0cmlidXRlKCJBUFBMSUItMiIsICJDQUxMRUQgQVBQTElCLTIiKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhXYXJzL3dlYmFwcDIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aFdhcnMvd2ViYXBwMi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDcxOWY0YzkuLjhlNjhhZjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aFdhcnMvd2ViYXBwMi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aFdhcnMvd2ViYXBwMi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtcGx1Z2dhYmlsaXR5LTIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aFdhcnMvd2ViYXBwMi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhXYXJzL3dlYmFwcDIvYnVpbGQueG1sCmluZGV4IDIwMTAyYjQuLjkxMWExMDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aFdhcnMvd2ViYXBwMi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoV2Fycy93ZWJhcHAyL2J1aWxkLnhtbApAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NSwzMCArNDUsMzAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAJPGphdmFjIHNyY2Rpcj0iLi9hcHBsaWIyIgotICAgIAkJZGVzdGRpcj0iLi9hcHBsaWIyIgotICAgIAkJY2xhc3NwYXRoPSIke3MxYXN0ZXN0LmNsYXNzcGF0aH0iCi0gICAgCQlkZWJ1Zz0ib24iCi0gICAgCQlmYWlsb25lcnJvcj0idHJ1ZSIvPgorICAgICAgPGphdmFjIHNyY2Rpcj0iLi9hcHBsaWIyIgorICAgICAgICAgICAgZGVzdGRpcj0iLi9hcHBsaWIyIgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke3MxYXN0ZXN0LmNsYXNzcGF0aH0iCisgICAgICAgICAgICBkZWJ1Zz0ib24iCisgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSIvPgogICAgICAgICA8bWtkaXIgZGlyPSJsaWIiLz4KLQk8amFyIGRlc3RmaWxlPSJsaWIvQXBwU2hhcmVkTGliMi5qYXIiPgotCSAgICA8ZmlsZXNldCBkaXI9Ii4vYXBwbGliMiIvPgotCTwvamFyPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgIDxqYXIgZGVzdGZpbGU9ImxpYi9BcHBTaGFyZWRMaWIyLmphciI+CisgICAgICAgIDxmaWxlc2V0IGRpcj0iLi9hcHBsaWIyIi8+CisgICAgPC9qYXI+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImJ1aWxkIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoV2Fycy93ZWJhcHAyL3NlcnZsZXQvVGVzdDJTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhXYXJzL3dlYmFwcDIvc2VydmxldC9UZXN0MlNlcnZsZXQuamF2YQppbmRleCBmYmQ3OTAzLi45M2YyZDUyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhXYXJzL3dlYmFwcDIvc2VydmxldC9UZXN0MlNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhXYXJzL3dlYmFwcDIvc2VydmxldC9UZXN0MlNlcnZsZXQuamF2YQpAQCAtMzUsMTkgKzM1LDE5IEBACiAgICAgcHVibGljIHZvaWQgc2VydmljZShIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlcykKICAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbiB7CiAKLQlTdHJpbmdCdWZmZXIgcmV0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgIFN0cmluZ0J1ZmZlciByZXQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICAgICAgIFN0cmluZyBhdHRyID0gKFN0cmluZykgY29udGV4dC5nZXRBdHRyaWJ1dGUoIlNIQVJFRExJQi0xIik7Ci0JcmV0LmFwcGVuZChhdHRyICsiOyIpOworICAgIHJldC5hcHBlbmQoYXR0ciArIjsiKTsKICAgICAgICAgYXR0ciA9IChTdHJpbmcpIGNvbnRleHQuZ2V0QXR0cmlidXRlKCJTSEFSRURMSUItMiIpOwotCXJldC5hcHBlbmQoYXR0ciArIjsiKTsKLQlhdHRyID0gKFN0cmluZykgY29udGV4dC5nZXRBdHRyaWJ1dGUoIlNIQVJFRExJQi0zIik7Ci0JcmV0LmFwcGVuZChhdHRyICsiOyIpOworICAgIHJldC5hcHBlbmQoYXR0ciArIjsiKTsKKyAgICBhdHRyID0gKFN0cmluZykgY29udGV4dC5nZXRBdHRyaWJ1dGUoIlNIQVJFRExJQi0zIik7CisgICAgcmV0LmFwcGVuZChhdHRyICsiOyIpOwogICAgICAgICBhdHRyID0gKFN0cmluZykgY29udGV4dC5nZXRBdHRyaWJ1dGUoIlNIQVJFRExJQi00Iik7Ci0JcmV0LmFwcGVuZChhdHRyICsiOyIpOworICAgIHJldC5hcHBlbmQoYXR0ciArIjsiKTsKICAgICAgICAgYXR0ciA9IChTdHJpbmcpIGNvbnRleHQuZ2V0QXR0cmlidXRlKCJBUFBMSUItMSIpOwotCXJldC5hcHBlbmQoYXR0ciArIjsiKTsKLQlhdHRyID0gKFN0cmluZykgY29udGV4dC5nZXRBdHRyaWJ1dGUoIkFQUExJQi0yIik7Ci0JcmV0LmFwcGVuZChhdHRyKTsKKyAgICByZXQuYXBwZW5kKGF0dHIgKyI7Iik7CisgICAgYXR0ciA9IChTdHJpbmcpIGNvbnRleHQuZ2V0QXR0cmlidXRlKCJBUFBMSUItMiIpOworICAgIHJldC5hcHBlbmQoYXR0cik7CiAgICAgICAgIHJlcy5nZXRXcml0ZXIoKS53cml0ZShyZXQudG9TdHJpbmcoKSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoV2Fycy93ZWJhcHAyL3NlcnZsZXQvVGVzdEZpbHRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplci9zaGFyZWRMaWJXaXRoV2Fycy93ZWJhcHAyL3NlcnZsZXQvVGVzdEZpbHRlci5qYXZhCmluZGV4IGI0ZTQ3M2YuLjUxM2VmMDMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXIvc2hhcmVkTGliV2l0aFdhcnMvd2ViYXBwMi9zZXJ2bGV0L1Rlc3RGaWx0ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyL3NoYXJlZExpYldpdGhXYXJzL3dlYmFwcDIvc2VydmxldC9UZXN0RmlsdGVyLmphdmEKQEAgLTM0LDcgKzM0LDcgQEAKICAgICBwdWJsaWMgdm9pZCBpbml0KEZpbHRlckNvbmZpZyBmaWx0ZXJDb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI+Pj4gZmlsdGVyLmluaXQiKTsKICAgICAgICAgbWVzZyA9IGZpbHRlckNvbmZpZy5nZXRJbml0UGFyYW1ldGVyKCJtZXNnIik7Ci0gICAgfSAgIAorICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvRmlsdGVyKFNlcnZsZXRSZXF1ZXN0IHJlcSwgU2VydmxldFJlc3BvbnNlIHJlcywKICAgICAgICAgICAgIEZpbHRlckNoYWluIGNoYWluKSB0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplckFkZFJlc3RyaWN0ZWRTZXJ2bGV0Q29udGV4dExpc3RlbmVyL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXJBZGRSZXN0cmljdGVkU2VydmxldENvbnRleHRMaXN0ZW5lci9XZWJUZXN0LmphdmEKaW5kZXggNjBhMjI5NC4uMTlkZDhmZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplckFkZFJlc3RyaWN0ZWRTZXJ2bGV0Q29udGV4dExpc3RlbmVyL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyQWRkUmVzdHJpY3RlZFNlcnZsZXRDb250ZXh0TGlzdGVuZXIvV2ViVGVzdC5qYXZhCkBAIC01NSw3ICs1NSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIElUIDg1NjUiKTsKIApAQCAtNzEsNyArNzEsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QgKyAiL3Rlc3QiOwogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKQogICAgICAgICAgICAgKG5ldyBVUkwodXJsKSkub3BlbkNvbm5lY3Rpb24oKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXJBZGRSZXN0cmljdGVkU2VydmxldENvbnRleHRMaXN0ZW5lci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplckFkZFJlc3RyaWN0ZWRTZXJ2bGV0Q29udGV4dExpc3RlbmVyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNzU0NWI2OC4uMTE5MTQ3ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplckFkZFJlc3RyaWN0ZWRTZXJ2bGV0Q29udGV4dExpc3RlbmVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplckFkZFJlc3RyaWN0ZWRTZXJ2bGV0Q29udGV4dExpc3RlbmVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjAtc2VydmxldC1jb250YWluZXItaW5pdGlhbGl6ZXItYWRkLXJlc3RyaWN0ZWQtc2VydmxldC1jb250ZXh0LWxpc3RlbmVyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyQWRkUmVzdHJpY3RlZFNlcnZsZXRDb250ZXh0TGlzdGVuZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250YWluZXJJbml0aWFsaXplckFkZFJlc3RyaWN0ZWRTZXJ2bGV0Q29udGV4dExpc3RlbmVyL2J1aWxkLnhtbAppbmRleCBhYmY0YTU4Li44YzZhMDM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRhaW5lckluaXRpYWxpemVyQWRkUmVzdHJpY3RlZFNlcnZsZXRDb250ZXh0TGlzdGVuZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGFpbmVySW5pdGlhbGl6ZXJBZGRSZXN0cmljdGVkU2VydmxldENvbnRleHRMaXN0ZW5lci9idWlsZC54bWwKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgPC9kZWxldGU+CiAgICAgICAgIDxkZWxldGUgZGlyPSJsaWIiLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC02NiwxOSArNjYsMTkgQEAKIAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi9UZXN0U2VydmxldC5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi9UZXN0U2VydmxldC5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtOTAsMTAgKzkwLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0QWRkTGlzdGVuZXJCeUNsYXNzTmFtZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRBZGRMaXN0ZW5lckJ5Q2xhc3NOYW1lL1dlYlRlc3QuamF2YQppbmRleCA5ZjIxNzRiLi4zNmRhMmQ2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRBZGRMaXN0ZW5lckJ5Q2xhc3NOYW1lL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRBZGRMaXN0ZW5lckJ5Q2xhc3NOYW1lL1dlYlRlc3QuamF2YQpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIFNlcnZsZXRDb250ZXh0I2FkZExpc3RlbmVyIik7CkBAIC01NSw3ICs1NSw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEFkZExpc3RlbmVyQnlDbGFzc05hbWUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEFkZExpc3RlbmVyQnlDbGFzc05hbWUvYnVpbGQucHJvcGVydGllcwppbmRleCBiYjBiNWM5Li42NDJiM2Y5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRBZGRMaXN0ZW5lckJ5Q2xhc3NOYW1lL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0QWRkTGlzdGVuZXJCeUNsYXNzTmFtZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLXNlcnZsZXQtY29udGV4dC1hZGQtbGlzdGVuZXItYnktY2xhc3MtbmFtZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0QWRkTGlzdGVuZXJCeUNsYXNzTmFtZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRBZGRMaXN0ZW5lckJ5Q2xhc3NOYW1lL2J1aWxkLnhtbAppbmRleCA0OGUwYTBhLi5lOWI3NjA3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRBZGRMaXN0ZW5lckJ5Q2xhc3NOYW1lL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRBZGRMaXN0ZW5lckJ5Q2xhc3NOYW1lL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMjMgKzQ0LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzIsMTAgKzcyLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0QWRkU2VydmxldEFuZEZpbHRlckJ5Q2xhc3MvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0QWRkU2VydmxldEFuZEZpbHRlckJ5Q2xhc3MvV2ViVGVzdC5qYXZhCmluZGV4IDY4YWI4NjIuLmVkOWE2ZjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEFkZFNlcnZsZXRBbmRGaWx0ZXJCeUNsYXNzL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRBZGRTZXJ2bGV0QW5kRmlsdGVyQnlDbGFzcy9XZWJUZXN0LmphdmEKQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBTZXJ2bGV0Q29udGV4dCNhZGRTZXJ2bGV0IGFuZCAiICsKQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0QWRkU2VydmxldEFuZEZpbHRlckJ5Q2xhc3MvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEFkZFNlcnZsZXRBbmRGaWx0ZXJCeUNsYXNzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYmQ1MmZkZi4uZDgzOTQzMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0QWRkU2VydmxldEFuZEZpbHRlckJ5Q2xhc3MvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRBZGRTZXJ2bGV0QW5kRmlsdGVyQnlDbGFzcy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLXNlcnZsZXQtY29udGV4dC1hZGQtc2VydmxldC1hbmQtZmlsdGVyLWJ5LWNsYXNzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRBZGRTZXJ2bGV0QW5kRmlsdGVyQnlDbGFzcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRBZGRTZXJ2bGV0QW5kRmlsdGVyQnlDbGFzcy9idWlsZC54bWwKaW5kZXggZjFjMjJhYS4uZWVkMWRjZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0QWRkU2VydmxldEFuZEZpbHRlckJ5Q2xhc3MvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEFkZFNlcnZsZXRBbmRGaWx0ZXJCeUNsYXNzL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMjMgKzQ0LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzIsMTAgKzcyLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0QWRkU2VydmxldEFuZEZpbHRlckJ5Q2xhc3Mvc2VydmxldC90ZXN0L015TGlzdGVuZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEFkZFNlcnZsZXRBbmRGaWx0ZXJCeUNsYXNzL3NlcnZsZXQvdGVzdC9NeUxpc3RlbmVyLmphdmEKaW5kZXggY2YxOTIxNi4uNDQ1ZjU2ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0QWRkU2VydmxldEFuZEZpbHRlckJ5Q2xhc3Mvc2VydmxldC90ZXN0L015TGlzdGVuZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRBZGRTZXJ2bGV0QW5kRmlsdGVyQnlDbGFzcy9zZXJ2bGV0L3Rlc3QvTXlMaXN0ZW5lci5qYXZhCkBAIC02Nyw2ICs2Nyw2IEBACiAgICAgICAgICAgICAgICAgInRlc3QuTmV3RmlsdGVyIikpOwogICAgICAgICBmci5zZXRJbml0UGFyYW1ldGVyKCJmaWx0ZXJJbml0UGFyYW1OYW1lIiwgImZpbHRlckluaXRQYXJhbVZhbHVlIik7CiAgICAgICAgIGZyLmFkZE1hcHBpbmdGb3JTZXJ2bGV0TmFtZXMoRW51bVNldC5vZihEaXNwYXRjaGVyVHlwZS5SRVFVRVNUKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCAiTmV3U2VydmxldCIpOyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCAiTmV3U2VydmxldCIpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEFkZFNlcnZsZXRBbmRGaWx0ZXJCeUNsYXNzTmFtZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRBZGRTZXJ2bGV0QW5kRmlsdGVyQnlDbGFzc05hbWUvV2ViVGVzdC5qYXZhCmluZGV4IDRjNTI3YzEuLmRmYWRlYmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEFkZFNlcnZsZXRBbmRGaWx0ZXJCeUNsYXNzTmFtZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0QWRkU2VydmxldEFuZEZpbHRlckJ5Q2xhc3NOYW1lL1dlYlRlc3QuamF2YQpAQCAtMzgsNyArMzgsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIFNlcnZsZXRDb250ZXh0I2FkZFNlcnZsZXQgYW5kICIgKwpAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRBZGRTZXJ2bGV0QW5kRmlsdGVyQnlDbGFzc05hbWUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEFkZFNlcnZsZXRBbmRGaWx0ZXJCeUNsYXNzTmFtZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDA3MjJkMzMuLjgyN2M5NGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEFkZFNlcnZsZXRBbmRGaWx0ZXJCeUNsYXNzTmFtZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEFkZFNlcnZsZXRBbmRGaWx0ZXJCeUNsYXNzTmFtZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLXNlcnZsZXQtY29udGV4dC1hZGQtc2VydmxldC1hbmQtZmlsdGVyLWJ5LWNsYXNzLW5hbWUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEFkZFNlcnZsZXRBbmRGaWx0ZXJCeUNsYXNzTmFtZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRBZGRTZXJ2bGV0QW5kRmlsdGVyQnlDbGFzc05hbWUvYnVpbGQueG1sCmluZGV4IGYxYzIyYWEuLmVlZDFkY2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEFkZFNlcnZsZXRBbmRGaWx0ZXJCeUNsYXNzTmFtZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0QWRkU2VydmxldEFuZEZpbHRlckJ5Q2xhc3NOYW1lL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMjMgKzQ0LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzIsMTAgKzcyLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0QWRkU2VydmxldEFuZEZpbHRlckJ5Q2xhc3NOYW1lL3NlcnZsZXQvdGVzdC9NeUxpc3RlbmVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRBZGRTZXJ2bGV0QW5kRmlsdGVyQnlDbGFzc05hbWUvc2VydmxldC90ZXN0L015TGlzdGVuZXIuamF2YQppbmRleCBmZTg5MGJkLi42Mzk2MTg1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRBZGRTZXJ2bGV0QW5kRmlsdGVyQnlDbGFzc05hbWUvc2VydmxldC90ZXN0L015TGlzdGVuZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRBZGRTZXJ2bGV0QW5kRmlsdGVyQnlDbGFzc05hbWUvc2VydmxldC90ZXN0L015TGlzdGVuZXIuamF2YQpAQCAtNDQsNyArNDQsNyBAQAogICAgICAgICBGaWx0ZXJSZWdpc3RyYXRpb24gZnIgPSBzYy5hZGRGaWx0ZXIoIk5ld0ZpbHRlciIsICJ0ZXN0Lk5ld0ZpbHRlciIpOwogICAgICAgICBmci5zZXRJbml0UGFyYW1ldGVyKCJmaWx0ZXJJbml0TmFtZSIsICJmaWx0ZXJJbml0VmFsdWUiKTsKICAgICAgICAgZnIuYWRkTWFwcGluZ0ZvclNlcnZsZXROYW1lcyhFbnVtU2V0Lm9mKERpc3BhdGNoZXJUeXBlLlJFUVVFU1QpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsICJOZXdTZXJ2bGV0Iik7IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsICJOZXdTZXJ2bGV0Iik7CiAgICAgfQogCiAgICAgLyoqCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRBZGRTZXJ2bGV0QW5kRmlsdGVyQnlJbnN0YW5jZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRBZGRTZXJ2bGV0QW5kRmlsdGVyQnlJbnN0YW5jZS9XZWJUZXN0LmphdmEKaW5kZXggOTA5Zjc2ZC4uYmQxMmQ5MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0QWRkU2VydmxldEFuZEZpbHRlckJ5SW5zdGFuY2UvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEFkZFNlcnZsZXRBbmRGaWx0ZXJCeUluc3RhbmNlL1dlYlRlc3QuamF2YQpAQCAtMzgsNyArMzgsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIFNlcnZsZXRDb250ZXh0I2FkZFNlcnZsZXQgYW5kICIgKwpAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRBZGRTZXJ2bGV0QW5kRmlsdGVyQnlJbnN0YW5jZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0QWRkU2VydmxldEFuZEZpbHRlckJ5SW5zdGFuY2UvYnVpbGQucHJvcGVydGllcwppbmRleCBmZTJmNGZlLi40NmRkOGVlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRBZGRTZXJ2bGV0QW5kRmlsdGVyQnlJbnN0YW5jZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEFkZFNlcnZsZXRBbmRGaWx0ZXJCeUluc3RhbmNlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjAtc2VydmxldC1jb250ZXh0LWFkZC1zZXJ2bGV0LWFuZC1maWx0ZXItYnktaW5zdGFuY2UiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEFkZFNlcnZsZXRBbmRGaWx0ZXJCeUluc3RhbmNlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEFkZFNlcnZsZXRBbmRGaWx0ZXJCeUluc3RhbmNlL2J1aWxkLnhtbAppbmRleCBmMWMyMmFhLi5lZWQxZGNmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRBZGRTZXJ2bGV0QW5kRmlsdGVyQnlJbnN0YW5jZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0QWRkU2VydmxldEFuZEZpbHRlckJ5SW5zdGFuY2UvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwyMyArNDQsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MiwxMCArNzIsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRBZGRTZXJ2bGV0QW5kRmlsdGVyQnlJbnN0YW5jZS9zZXJ2bGV0L3Rlc3QvTXlMaXN0ZW5lci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0QWRkU2VydmxldEFuZEZpbHRlckJ5SW5zdGFuY2Uvc2VydmxldC90ZXN0L015TGlzdGVuZXIuamF2YQppbmRleCBkYWVkMTZmLi5kMGU3YmQxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRBZGRTZXJ2bGV0QW5kRmlsdGVyQnlJbnN0YW5jZS9zZXJ2bGV0L3Rlc3QvTXlMaXN0ZW5lci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEFkZFNlcnZsZXRBbmRGaWx0ZXJCeUluc3RhbmNlL3NlcnZsZXQvdGVzdC9NeUxpc3RlbmVyLmphdmEKQEAgLTg3LDcgKzg3LDcgQEAKICAgICAgICAgRmlsdGVyUmVnaXN0cmF0aW9uIGZyID0gc2MuYWRkRmlsdGVyKCJOZXdGaWx0ZXIiLCBmaWx0ZXIpOwogICAgICAgICBmci5zZXRJbml0UGFyYW1ldGVyKCJmaWx0ZXJJbml0UGFyYW1OYW1lIiwgImZpbHRlckluaXRQYXJhbVZhbHVlIik7CiAgICAgICAgIGZyLmFkZE1hcHBpbmdGb3JTZXJ2bGV0TmFtZXMoRW51bVNldC5vZihEaXNwYXRjaGVyVHlwZS5SRVFVRVNUKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCAiTmV3U2VydmxldCIpOyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCAiTmV3U2VydmxldCIpOwogCiAgICAgICAgIC8qCiAgICAgICAgICAqIE1ha2Ugc3VyZSB0aGF0IGlmIHdlIHJlZ2lzdGVyIGEgZGlmZmVyZW50IGZpbHRlciBpbnN0YW5jZQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0QWRkU2VydmxldE92ZXJyaWRlRGVmYXVsdEFuZEpzcFNlcnZsZXRNYXBwaW5ncy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRBZGRTZXJ2bGV0T3ZlcnJpZGVEZWZhdWx0QW5kSnNwU2VydmxldE1hcHBpbmdzL1dlYlRlc3QuamF2YQppbmRleCA0MzJhZWEwLi5iMTIyYjVjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRBZGRTZXJ2bGV0T3ZlcnJpZGVEZWZhdWx0QW5kSnNwU2VydmxldE1hcHBpbmdzL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRBZGRTZXJ2bGV0T3ZlcnJpZGVEZWZhdWx0QW5kSnNwU2VydmxldE1hcHBpbmdzL1dlYlRlc3QuamF2YQpAQCAtNDcsNyArNDcsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIElUIDkxODEiKTsKQEAgLTYzLDcgKzYzLDcgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmcgcGF0aCkgdGhyb3dzIEV4Y2VwdGlvbiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRBZGRTZXJ2bGV0T3ZlcnJpZGVEZWZhdWx0QW5kSnNwU2VydmxldE1hcHBpbmdzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRBZGRTZXJ2bGV0T3ZlcnJpZGVEZWZhdWx0QW5kSnNwU2VydmxldE1hcHBpbmdzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOWU4MDc3OS4uYjY2YmI2NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0QWRkU2VydmxldE92ZXJyaWRlRGVmYXVsdEFuZEpzcFNlcnZsZXRNYXBwaW5ncy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEFkZFNlcnZsZXRPdmVycmlkZURlZmF1bHRBbmRKc3BTZXJ2bGV0TWFwcGluZ3MvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC1zZXJ2bGV0LWNvbnRleHQtYWRkLXNlcnZsZXQtb3ZlcnJpZGUtZGVmYXVsdC1hbmQtanNwLXNlcnZsZXQtbWFwcGluZ3MiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEFkZFNlcnZsZXRPdmVycmlkZURlZmF1bHRBbmRKc3BTZXJ2bGV0TWFwcGluZ3MvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0QWRkU2VydmxldE92ZXJyaWRlRGVmYXVsdEFuZEpzcFNlcnZsZXRNYXBwaW5ncy9idWlsZC54bWwKaW5kZXggZjFjMjJhYS4uZWVkMWRjZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0QWRkU2VydmxldE92ZXJyaWRlRGVmYXVsdEFuZEpzcFNlcnZsZXRNYXBwaW5ncy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0QWRkU2VydmxldE92ZXJyaWRlRGVmYXVsdEFuZEpzcFNlcnZsZXRNYXBwaW5ncy9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDIzICs0NCwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTcyLDEwICs3MiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dENvbXBsZXRlUHJlbGltaW5hcnlGaWx0ZXJSZWdpc3RyYXRpb24vV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0Q29tcGxldGVQcmVsaW1pbmFyeUZpbHRlclJlZ2lzdHJhdGlvbi9XZWJUZXN0LmphdmEKaW5kZXggZGJhYjU4OS4uODMyYTY1MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0Q29tcGxldGVQcmVsaW1pbmFyeUZpbHRlclJlZ2lzdHJhdGlvbi9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0Q29tcGxldGVQcmVsaW1pbmFyeUZpbHRlclJlZ2lzdHJhdGlvbi9XZWJUZXN0LmphdmEKQEAgLTQyLDcgKzQyLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBJVCA5MTk5Iik7CkBAIC01Niw3ICs1Niw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dENvbXBsZXRlUHJlbGltaW5hcnlGaWx0ZXJSZWdpc3RyYXRpb24vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dENvbXBsZXRlUHJlbGltaW5hcnlGaWx0ZXJSZWdpc3RyYXRpb24vYnVpbGQucHJvcGVydGllcwppbmRleCA4MmYwYmRiLi41NGM3MTRmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRDb21wbGV0ZVByZWxpbWluYXJ5RmlsdGVyUmVnaXN0cmF0aW9uL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0Q29tcGxldGVQcmVsaW1pbmFyeUZpbHRlclJlZ2lzdHJhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLXNlcnZsZXQtY29udGV4dC1jb21wbGV0ZS1wcmVsaW1pbmFyeS1maWx0ZXItcmVnaXN0cmF0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRDb21wbGV0ZVByZWxpbWluYXJ5RmlsdGVyUmVnaXN0cmF0aW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dENvbXBsZXRlUHJlbGltaW5hcnlGaWx0ZXJSZWdpc3RyYXRpb24vYnVpbGQueG1sCmluZGV4IGYxYzIyYWEuLmVlZDFkY2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dENvbXBsZXRlUHJlbGltaW5hcnlGaWx0ZXJSZWdpc3RyYXRpb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dENvbXBsZXRlUHJlbGltaW5hcnlGaWx0ZXJSZWdpc3RyYXRpb24vYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwyMyArNDQsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MiwxMCArNzIsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRDb21wbGV0ZVByZWxpbWluYXJ5RmlsdGVyUmVnaXN0cmF0aW9uL3NlcnZsZXQvdGVzdC9NeUxpc3RlbmVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRDb21wbGV0ZVByZWxpbWluYXJ5RmlsdGVyUmVnaXN0cmF0aW9uL3NlcnZsZXQvdGVzdC9NeUxpc3RlbmVyLmphdmEKaW5kZXggYzc5YzYyNS4uNzVhMjFmZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0Q29tcGxldGVQcmVsaW1pbmFyeUZpbHRlclJlZ2lzdHJhdGlvbi9zZXJ2bGV0L3Rlc3QvTXlMaXN0ZW5lci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dENvbXBsZXRlUHJlbGltaW5hcnlGaWx0ZXJSZWdpc3RyYXRpb24vc2VydmxldC90ZXN0L015TGlzdGVuZXIuamF2YQpAQCAtMzQsNyArMzQsNyBAQAogICAgICAgICBTZXJ2bGV0Q29udGV4dCBzYyA9IHNjZS5nZXRTZXJ2bGV0Q29udGV4dCgpOwogICAgICAgICBGaWx0ZXJSZWdpc3RyYXRpb24gZnJQcmVsaW0gPSBzYy5nZXRGaWx0ZXJSZWdpc3RyYXRpb24oIk15RmlsdGVyIik7CiAgICAgICAgIGlmIChmclByZWxpbSA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiTWlzc2luZyBGaWx0ZXJSZWdpc3RyYXRpb24gZm9yICIgKyAKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJNaXNzaW5nIEZpbHRlclJlZ2lzdHJhdGlvbiBmb3IgIiArCiAgICAgICAgICAgICAgICAgIk15RmlsdGVyIik7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0Q29tcGxldGVQcmVsaW1pbmFyeVNlcnZsZXRSZWdpc3RyYXRpb24vV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0Q29tcGxldGVQcmVsaW1pbmFyeVNlcnZsZXRSZWdpc3RyYXRpb24vV2ViVGVzdC5qYXZhCmluZGV4IDFhMmI3MWYuLjZjNWZkNDIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dENvbXBsZXRlUHJlbGltaW5hcnlTZXJ2bGV0UmVnaXN0cmF0aW9uL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRDb21wbGV0ZVByZWxpbWluYXJ5U2VydmxldFJlZ2lzdHJhdGlvbi9XZWJUZXN0LmphdmEKQEAgLTQyLDcgKzQyLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBJVCA5MTk5Iik7CkBAIC01Niw3ICs1Niw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dENvbXBsZXRlUHJlbGltaW5hcnlTZXJ2bGV0UmVnaXN0cmF0aW9uL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRDb21wbGV0ZVByZWxpbWluYXJ5U2VydmxldFJlZ2lzdHJhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGYxNDI5YjIuLmZkYjdmMWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dENvbXBsZXRlUHJlbGltaW5hcnlTZXJ2bGV0UmVnaXN0cmF0aW9uL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0Q29tcGxldGVQcmVsaW1pbmFyeVNlcnZsZXRSZWdpc3RyYXRpb24vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC1zZXJ2bGV0LWNvbnRleHQtY29tcGxldGUtcHJlbGltaW5hcnktc2VydmxldC1yZWdpc3RyYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dENvbXBsZXRlUHJlbGltaW5hcnlTZXJ2bGV0UmVnaXN0cmF0aW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dENvbXBsZXRlUHJlbGltaW5hcnlTZXJ2bGV0UmVnaXN0cmF0aW9uL2J1aWxkLnhtbAppbmRleCBmMWMyMmFhLi5lZWQxZGNmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRDb21wbGV0ZVByZWxpbWluYXJ5U2VydmxldFJlZ2lzdHJhdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0Q29tcGxldGVQcmVsaW1pbmFyeVNlcnZsZXRSZWdpc3RyYXRpb24vYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwyMyArNDQsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MiwxMCArNzIsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRDb21wbGV0ZVByZWxpbWluYXJ5U2VydmxldFJlZ2lzdHJhdGlvbi9zZXJ2bGV0L3Rlc3QvTXlMaXN0ZW5lci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0Q29tcGxldGVQcmVsaW1pbmFyeVNlcnZsZXRSZWdpc3RyYXRpb24vc2VydmxldC90ZXN0L015TGlzdGVuZXIuamF2YQppbmRleCA5ZGNiMjcyLi43MGVjNjQyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRDb21wbGV0ZVByZWxpbWluYXJ5U2VydmxldFJlZ2lzdHJhdGlvbi9zZXJ2bGV0L3Rlc3QvTXlMaXN0ZW5lci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dENvbXBsZXRlUHJlbGltaW5hcnlTZXJ2bGV0UmVnaXN0cmF0aW9uL3NlcnZsZXQvdGVzdC9NeUxpc3RlbmVyLmphdmEKQEAgLTM0LDcgKzM0LDcgQEAKICAgICAgICAgU2VydmxldENvbnRleHQgc2MgPSBzY2UuZ2V0U2VydmxldENvbnRleHQoKTsKICAgICAgICAgU2VydmxldFJlZ2lzdHJhdGlvbiBzclByZWxpbSA9IHNjLmdldFNlcnZsZXRSZWdpc3RyYXRpb24oIk15U2VydmxldCIpOwogICAgICAgICBpZiAoc3JQcmVsaW0gPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIk1pc3NpbmcgU2VydmxldFJlZ2lzdHJhdGlvbiBmb3IgIiArIAorICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIk1pc3NpbmcgU2VydmxldFJlZ2lzdHJhdGlvbiBmb3IgIiArCiAgICAgICAgICAgICAgICAgIk15U2VydmxldCIpOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dENyZWF0ZVNlcnZsZXRBbmRGaWx0ZXIvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0Q3JlYXRlU2VydmxldEFuZEZpbHRlci9XZWJUZXN0LmphdmEKaW5kZXggNDc5OTI4My4uNTAwYTllYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0Q3JlYXRlU2VydmxldEFuZEZpbHRlci9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0Q3JlYXRlU2VydmxldEFuZEZpbHRlci9XZWJUZXN0LmphdmEKQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oCiAgICAgICAgICAgICAiVW5pdCB0ZXN0IGZvciBTZXJ2bGV0Q29udGV4dCNjcmVhdGVbU2VydmxldHxGaWx0ZXJdIik7CkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dENyZWF0ZVNlcnZsZXRBbmRGaWx0ZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dENyZWF0ZVNlcnZsZXRBbmRGaWx0ZXIvYnVpbGQucHJvcGVydGllcwppbmRleCA0MjRlOTc3Li41YWQ2ZmQxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRDcmVhdGVTZXJ2bGV0QW5kRmlsdGVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0Q3JlYXRlU2VydmxldEFuZEZpbHRlci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLXNlcnZsZXQtY29udGV4dC1jcmVhdGUtc2VydmxldC1hbmQtZmlsdGVyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRDcmVhdGVTZXJ2bGV0QW5kRmlsdGVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dENyZWF0ZVNlcnZsZXRBbmRGaWx0ZXIvYnVpbGQueG1sCmluZGV4IDA0OTk5Y2EuLmMxYjk2MmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dENyZWF0ZVNlcnZsZXRBbmRGaWx0ZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dENyZWF0ZVNlcnZsZXRBbmRGaWx0ZXIvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwyMiArNDQsMjIgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzEsMTAgKzcxLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0Q3JlYXRlU2VydmxldEFuZEZpbHRlci9zZXJ2bGV0L3Rlc3QvTXlMaXN0ZW5lci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0Q3JlYXRlU2VydmxldEFuZEZpbHRlci9zZXJ2bGV0L3Rlc3QvTXlMaXN0ZW5lci5qYXZhCmluZGV4IGM4ODVkMjMuLjFmN2VkNmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dENyZWF0ZVNlcnZsZXRBbmRGaWx0ZXIvc2VydmxldC90ZXN0L015TGlzdGVuZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRDcmVhdGVTZXJ2bGV0QW5kRmlsdGVyL3NlcnZsZXQvdGVzdC9NeUxpc3RlbmVyLmphdmEKQEAgLTcyLDYgKzcyLDYgQEAKICAgICAgICAgRmlsdGVyUmVnaXN0cmF0aW9uIGZyID0gc2MuYWRkRmlsdGVyKCJOZXdGaWx0ZXIiLCBmaWx0ZXIpOwogICAgICAgICBmci5zZXRJbml0UGFyYW1ldGVyKCJmaWx0ZXJJbml0UGFyYW1OYW1lIiwgImZpbHRlckluaXRQYXJhbVZhbHVlIik7CiAgICAgICAgIGZyLmFkZE1hcHBpbmdGb3JTZXJ2bGV0TmFtZXMoRW51bVNldC5vZihEaXNwYXRjaGVyVHlwZS5SRVFVRVNUKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCAiTmV3U2VydmxldCIpOyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCAiTmV3U2VydmxldCIpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dENyZWF0ZVNlcnZsZXRBbmRGaWx0ZXIvc2VydmxldC90ZXN0L05ld0ZpbHRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0Q3JlYXRlU2VydmxldEFuZEZpbHRlci9zZXJ2bGV0L3Rlc3QvTmV3RmlsdGVyLmphdmEKaW5kZXggNmFhNDA1Zi4uOGQ0NjA3ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0Q3JlYXRlU2VydmxldEFuZEZpbHRlci9zZXJ2bGV0L3Rlc3QvTmV3RmlsdGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0Q3JlYXRlU2VydmxldEFuZEZpbHRlci9zZXJ2bGV0L3Rlc3QvTmV3RmlsdGVyLmphdmEKQEAgLTUxLDcgKzUxLDcgQEAKICAgICAgICAgaW5pdFBhcmFtVmFsdWUgPSBjb25maWcuZ2V0SW5pdFBhcmFtZXRlcigiZmlsdGVySW5pdFBhcmFtTmFtZSIpOwogCiAgICAgICAgIFNlcnZsZXRDb250ZXh0IHNjID0gY29uZmlnLmdldFNlcnZsZXRDb250ZXh0KCk7Ci0gICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludCBsb2dpblRpbWVvdXQgPSBkczEuZ2V0TG9naW5UaW1lb3V0KCk7CiAgICAgICAgICAgICBzYy5sb2coImRzMS1sb2dpbi10aW1lb3V0PSIgKyBsb2dpblRpbWVvdXQpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0Q3JlYXRlU2VydmxldFdpdGhTZXJ2bGV0U2VjdXJpdHkvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0Q3JlYXRlU2VydmxldFdpdGhTZXJ2bGV0U2VjdXJpdHkvV2ViVGVzdC5qYXZhCmluZGV4IDUxZmE3OTQuLmVmYTAxZjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dENyZWF0ZVNlcnZsZXRXaXRoU2VydmxldFNlY3VyaXR5L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRDcmVhdGVTZXJ2bGV0V2l0aFNlcnZsZXRTZWN1cml0eS9XZWJUZXN0LmphdmEKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgICAgcG9ydCA9IEludGVnZXIucGFyc2VJbnQoYXJnc1sxXSk7CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBzZXRTZXJ2bGV0U2VjdXJpdHkiKTsKQEAgLTUxLDcgKzUxLDcgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0JICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gcnVuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CkBAIC03NCw3ICs3NCw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSBib29sZWFuIGRvV2ViTWV0aG9kKFN0cmluZyB3ZWJNZXRob2QsIFN0cmluZyBob3N0LCBpbnQgcG9ydCwKLSAgICAgICAgICAgIFN0cmluZyBjb250ZXh0UGF0aCwgYm9vbGVhbiByZXF1aXJlQXV0aGVudGljYXRlLCAKKyAgICAgICAgICAgIFN0cmluZyBjb250ZXh0UGF0aCwgYm9vbGVhbiByZXF1aXJlQXV0aGVudGljYXRlLAogICAgICAgICAgICAgaW50IHJlc3BvbnNlQ29kZSwgU3RyaW5nIGV4cGVjdGVkKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAogICAgICAgICBTdHJpbmcgdXJsU3RyID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0UGF0aDsKQEAgLTEwNCw3ICsxMDQsNyBAQAogICAgICAgICAgICAgICAgICAgICBvayA9IG9rICYmIGV4cGVjdGVkLmVxdWFscyhsaW5lKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZXgpewotICAgICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOyAgIAorICAgICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlRlc3QgVU5QUkVESUNURUQtRkFJTFVSRSIpOwogICAgICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgICAgICB0cnkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0Q3JlYXRlU2VydmxldFdpdGhTZXJ2bGV0U2VjdXJpdHkvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dENyZWF0ZVNlcnZsZXRXaXRoU2VydmxldFNlY3VyaXR5L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZTJhYWE0ZS4uNmM3OTRlMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0Q3JlYXRlU2VydmxldFdpdGhTZXJ2bGV0U2VjdXJpdHkvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRDcmVhdGVTZXJ2bGV0V2l0aFNlcnZsZXRTZWN1cml0eS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLXNlcnZsZXQtY29udGV4dC1jcmVhdGUtc2VydmxldC13aXRoLXNlcnZsZXQtc2VjdXJpdHkiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dENyZWF0ZVNlcnZsZXRXaXRoU2VydmxldFNlY3VyaXR5L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dENyZWF0ZVNlcnZsZXRXaXRoU2VydmxldFNlY3VyaXR5L2J1aWxkLnhtbAppbmRleCA0ODZkODg4Li4wYjc1MjQ0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRDcmVhdGVTZXJ2bGV0V2l0aFNlcnZsZXRTZWN1cml0eS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0Q3JlYXRlU2VydmxldFdpdGhTZXJ2bGV0U2VjdXJpdHkvYnVpbGQueG1sCkBAIC0zNSw3ICszNSw3IEBACiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgICAgPGRlbGV0ZSBmaWxlPSJXZWJUZXN0LmNsYXNzIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNTcsMTAgKzU3LDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCkBAIC02OCwxNCArNjgsMTQgQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9hcHBzZXJ2LXJ0LmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtOTAsNyArOTAsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVzdG9yZSIgZGVwZW5kcz0ic2V0dXAiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS11c2VyLWNvbW1vbiI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRHZXRSZWFsUGF0aEZyb21Mb2NhbEphci9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRHZXRSZWFsUGF0aEZyb21Mb2NhbEphci9XZWJUZXN0LmphdmEKaW5kZXggOTc5YTViZS4uYWQ3ODIwMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0R2V0UmVhbFBhdGhGcm9tTG9jYWxKYXIvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEdldFJlYWxQYXRoRnJvbUxvY2FsSmFyL1dlYlRlc3QuamF2YQpAQCAtMTksNyArMTksNyBAQAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuKjsKIAogLyoKLSAqIFVuaXQgdGVzdCBmb3IgU2VydmxldENvbnRleHQjZ2V0UmVhbFBhdGgsIHdoZXJlIHRoZSByZXF1ZXN0ZWQgCisgKiBVbml0IHRlc3QgZm9yIFNlcnZsZXRDb250ZXh0I2dldFJlYWxQYXRoLCB3aGVyZSB0aGUgcmVxdWVzdGVkCiAgKiByZXNvdXJjZSBpcyBzdG9yZWQgaW4gdGhlIE1FVEEtSU5GL3Jlc291cmNlcyBkaXJlY3Rvcnkgb2YgdGhlCiAgKiBhcHBsaWNhdGlvbidzIGJ1bmRsZWQgV0VCLUlORi9saWIvbmVzdGVkLmphci4KICAqLwpAQCAtMzksNyArMzksNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBTZXJ2bGV0Q29udGV4dCNnZXRSZWFsUGF0aCIpOwogICAgICAgICBuZXcgV2ViVGVzdChhcmdzKS5kb1Rlc3QoKTsKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlU2VydmxldCgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEdldFJlYWxQYXRoRnJvbUxvY2FsSmFyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRHZXRSZWFsUGF0aEZyb21Mb2NhbEphci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDdkN2JjMTguLjRlM2M1OGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEdldFJlYWxQYXRoRnJvbUxvY2FsSmFyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0R2V0UmVhbFBhdGhGcm9tTG9jYWxKYXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC1zZXJ2bGV0LWNvbnRleHQtZ2V0LXJlYWwtcGF0aC1mcm9tLWxvY2FsLWphciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0R2V0UmVhbFBhdGhGcm9tTG9jYWxKYXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0R2V0UmVhbFBhdGhGcm9tTG9jYWxKYXIvYnVpbGQueG1sCmluZGV4IGU4YTA2N2QuLmFlODkwNzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEdldFJlYWxQYXRoRnJvbUxvY2FsSmFyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRHZXRSZWFsUGF0aEZyb21Mb2NhbEphci9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDIxICs0MiwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNjgsMTAgKzY4LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0R2V0UmVhbFBhdGhGcm9tTG9jYWxKYXIvc2VydmxldC9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0R2V0UmVhbFBhdGhGcm9tTG9jYWxKYXIvc2VydmxldC9UZXN0U2VydmxldC5qYXZhCmluZGV4IDNhZTg0NTMuLmU5ZTdhMWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEdldFJlYWxQYXRoRnJvbUxvY2FsSmFyL3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRHZXRSZWFsUGF0aEZyb21Mb2NhbEphci9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTIzLDcgKzIzLDcgQEAKICAgICBwdWJsaWMgdm9pZCBzZXJ2aWNlKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzKQogICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgU3RyaW5nIHBhdGggPSBnZXRTZXJ2bGV0Q29udGV4dCgpLmdldFJlYWxQYXRoKCIvYWJjLnR4dCIpOwotICAgICAgICBpZiAocGF0aCA9PSBudWxsIHx8IAorICAgICAgICBpZiAocGF0aCA9PSBudWxsIHx8CiAgICAgICAgICAgICAgICAgcGF0aC5pbmRleE9mKCIvTUVUQS1JTkYvcmVzb3VyY2VzIikgPT0gLTEpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKCJXcm9uZyByZXNvdXJjZSBwYXRoIik7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEdldFJlc291cmNlSW5Mb2NhbEphci9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRHZXRSZXNvdXJjZUluTG9jYWxKYXIvV2ViVGVzdC5qYXZhCmluZGV4IGVjN2YyYjQuLjA4MzhmY2MgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEdldFJlc291cmNlSW5Mb2NhbEphci9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0R2V0UmVzb3VyY2VJbkxvY2FsSmFyL1dlYlRlc3QuamF2YQpAQCAtNDUsNyArNDUsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBTZXJ2bGV0Q29udGV4dCNnZXRSZXNvdXJjZSIpOwogICAgICAgICBuZXcgV2ViVGVzdChhcmdzKS5kb1Rlc3QoKTsKQEAgLTUzLDcgKzUzLDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlU2VydmxldCgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEdldFJlc291cmNlSW5Mb2NhbEphci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0R2V0UmVzb3VyY2VJbkxvY2FsSmFyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMjI5YzI1ZC4uMDMxZjdjYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0R2V0UmVzb3VyY2VJbkxvY2FsSmFyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0R2V0UmVzb3VyY2VJbkxvY2FsSmFyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjAtc2VydmxldC1jb250ZXh0LWdldC1yZXNvdXJjZS1pbi1sb2NhbC1qYXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEdldFJlc291cmNlSW5Mb2NhbEphci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRHZXRSZXNvdXJjZUluTG9jYWxKYXIvYnVpbGQueG1sCmluZGV4IGU4YTA2N2QuLmFlODkwNzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEdldFJlc291cmNlSW5Mb2NhbEphci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0R2V0UmVzb3VyY2VJbkxvY2FsSmFyL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMjEgKzQyLDIxIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC02OCwxMCArNjgsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRHZXRSZXNvdXJjZVBhdGhzRnJvbUxvY2FsSmFyL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEdldFJlc291cmNlUGF0aHNGcm9tTG9jYWxKYXIvV2ViVGVzdC5qYXZhCmluZGV4IDBmOTI2MGUuLjFlZjZhNzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEdldFJlc291cmNlUGF0aHNGcm9tTG9jYWxKYXIvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEdldFJlc291cmNlUGF0aHNGcm9tTG9jYWxKYXIvV2ViVGVzdC5qYXZhCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIFNlcnZsZXRDb250ZXh0I2dldFJlc291cmNlUGF0aHMiKTsKICAgICAgICAgbmV3IFdlYlRlc3QoYXJncykuZG9UZXN0KCk7CkBAIC00OCw3ICs0OCw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZVNlcnZsZXQoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRHZXRSZXNvdXJjZVBhdGhzRnJvbUxvY2FsSmFyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRHZXRSZXNvdXJjZVBhdGhzRnJvbUxvY2FsSmFyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYTM5MWU4Ni4uYjZlMTNiYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0R2V0UmVzb3VyY2VQYXRoc0Zyb21Mb2NhbEphci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEdldFJlc291cmNlUGF0aHNGcm9tTG9jYWxKYXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC1zZXJ2bGV0LWNvbnRleHQtZ2V0LXJlc291cmNlLXBhdGhzLWZyb20tbG9jYWwtamFyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRHZXRSZXNvdXJjZVBhdGhzRnJvbUxvY2FsSmFyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEdldFJlc291cmNlUGF0aHNGcm9tTG9jYWxKYXIvYnVpbGQueG1sCmluZGV4IGU4YTA2N2QuLmFlODkwNzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEdldFJlc291cmNlUGF0aHNGcm9tTG9jYWxKYXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEdldFJlc291cmNlUGF0aHNGcm9tTG9jYWxKYXIvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwyMSArNDIsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTY4LDEwICs2OCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dEdldFJlc291cmNlUGF0aHNGcm9tTG9jYWxKYXIvc2VydmxldC9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0R2V0UmVzb3VyY2VQYXRoc0Zyb21Mb2NhbEphci9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggOWFmMTAxYi4uNDFlYjEwOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0R2V0UmVzb3VyY2VQYXRoc0Zyb21Mb2NhbEphci9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0R2V0UmVzb3VyY2VQYXRoc0Zyb21Mb2NhbEphci9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKICAgICAgICAgaWYgKHJlc1BhdGhzID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKCJObyByZXNvdXJjZSBwYXRocyIpOwogICAgICAgICB9Ci0gICAKKwogICAgICAgICBpZiAoIXJlc1BhdGhzLmNvbnRhaW5zKENBVEFMT0dfT0ZGRVJTKSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oQ0FUQUxPR19PRkZFUlMgKwogICAgICAgICAgICAgICAgICIgbWlzc2luZyBmcm9tIHJlc291cmNlIHBhdGhzIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRTZXRJbml0UGFyYW1ldGVyL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dFNldEluaXRQYXJhbWV0ZXIvV2ViVGVzdC5qYXZhCmluZGV4IDI1MjA2YzcuLmRmNzY3OTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dFNldEluaXRQYXJhbWV0ZXIvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dFNldEluaXRQYXJhbWV0ZXIvV2ViVGVzdC5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgU2VydmxldENvbnRleHQjc2V0SW5pdFBhcmFtZXRlciIpOwpAQCAtNTEsNyArNTEsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRTZXRJbml0UGFyYW1ldGVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRTZXRJbml0UGFyYW1ldGVyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNzYyMzVkNC4uYmEwODYzMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0U2V0SW5pdFBhcmFtZXRlci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dFNldEluaXRQYXJhbWV0ZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC1zZXJ2bGV0LWNvbnRleHQtc2V0LWluaXQtcGFyYW1ldGVyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRTZXRJbml0UGFyYW1ldGVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dFNldEluaXRQYXJhbWV0ZXIvYnVpbGQueG1sCmluZGV4IGYxYzIyYWEuLmVlZDFkY2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dFNldEluaXRQYXJhbWV0ZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dFNldEluaXRQYXJhbWV0ZXIvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwyMyArNDQsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MiwxMCArNzIsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRTZXRJbml0UGFyYW1ldGVyL3NlcnZsZXQvTXlMaXN0ZW5lci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRDb250ZXh0U2V0SW5pdFBhcmFtZXRlci9zZXJ2bGV0L015TGlzdGVuZXIuamF2YQppbmRleCBkYzExZjAzLi5iYzUxNmIzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldENvbnRleHRTZXRJbml0UGFyYW1ldGVyL3NlcnZsZXQvTXlMaXN0ZW5lci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0Q29udGV4dFNldEluaXRQYXJhbWV0ZXIvc2VydmxldC9NeUxpc3RlbmVyLmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKICAgICAgKiBAcGFyYW0gc2NlIFRoZSBzZXJ2bGV0IGNvbnRleHQgZXZlbnQKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBjb250ZXh0SW5pdGlhbGl6ZWQoU2VydmxldENvbnRleHRFdmVudCBzY2UpIHsKLSAgICAgICAgc2NlLmdldFNlcnZsZXRDb250ZXh0KCkuc2V0SW5pdFBhcmFtZXRlcigiYWFhIiwgImJiYiIpOyAKKyAgICAgICAgc2NlLmdldFNlcnZsZXRDb250ZXh0KCkuc2V0SW5pdFBhcmFtZXRlcigiYWFhIiwgImJiYiIpOwogICAgIH0KIAogICAgIC8qKgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRNYXBwaW5nRW1wdHlTdHJpbmcvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRNYXBwaW5nRW1wdHlTdHJpbmcvV2ViVGVzdC5qYXZhCmluZGV4IGVhNTFiNzMuLjFmMTEzZTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0TWFwcGluZ0VtcHR5U3RyaW5nL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldE1hcHBpbmdFbXB0eVN0cmluZy9XZWJUZXN0LmphdmEKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBlbXB0eSBzdHJpbmcgVVJMIHBhdHRlcm4iKTsKQEAgLTYxLDcgKzYxLDcgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmcgcGF0aCwgU3RyaW5nIGV4cGVjdGVkUmVzcG9uc2UpIHRocm93cyBFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRNYXBwaW5nRW1wdHlTdHJpbmcvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0TWFwcGluZ0VtcHR5U3RyaW5nL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNDMwMmQxZC4uNjNjNDViZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRNYXBwaW5nRW1wdHlTdHJpbmcvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldE1hcHBpbmdFbXB0eVN0cmluZy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLXNlcnZsZXQtbWFwcGluZy1lbXB0eS1zdHJpbmciLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0TWFwcGluZ0VtcHR5U3RyaW5nL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0TWFwcGluZ0VtcHR5U3RyaW5nL2J1aWxkLnhtbAppbmRleCBmMWMyMmFhLi5lZWQxZGNmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldE1hcHBpbmdFbXB0eVN0cmluZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRNYXBwaW5nRW1wdHlTdHJpbmcvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwyMyArNDQsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MiwxMCArNzIsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldFJlcXVlc3REaXNwYXRjaGVyVHlwZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldFJlcXVlc3REaXNwYXRjaGVyVHlwZS9XZWJUZXN0LmphdmEKaW5kZXggY2E5NjA2OC4uNTdiNjBmNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRSZXF1ZXN0RGlzcGF0Y2hlclR5cGUvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0UmVxdWVzdERpc3BhdGNoZXJUeXBlL1dlYlRlc3QuamF2YQpAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBTZXJ2bGV0UmVxdWVzdCNnZXREaXNwYXRjaGVyVHlwZSIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0UmVxdWVzdERpc3BhdGNoZXJUeXBlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldFJlcXVlc3REaXNwYXRjaGVyVHlwZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDc0N2VkMTguLmZkYjljNGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0UmVxdWVzdERpc3BhdGNoZXJUeXBlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRSZXF1ZXN0RGlzcGF0Y2hlclR5cGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC1zZXJ2bGV0LXJlcXVlc3QtZGlzcGF0Y2hlci10eXBlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldFJlcXVlc3REaXNwYXRjaGVyVHlwZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldFJlcXVlc3REaXNwYXRjaGVyVHlwZS9idWlsZC54bWwKaW5kZXggZjU0ODcxZC4uMTBhMDg4ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRSZXF1ZXN0RGlzcGF0Y2hlclR5cGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0UmVxdWVzdERpc3BhdGNoZXJUeXBlL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMjMgKzQyLDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzAsMTAgKzcwLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRSZXF1ZXN0TGlzdGVuZXJJbnZvY2F0aW9uT3JkZXIvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRSZXF1ZXN0TGlzdGVuZXJJbnZvY2F0aW9uT3JkZXIvV2ViVGVzdC5qYXZhCmluZGV4IGFlZWExMDUuLjA0YmUyNjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0UmVxdWVzdExpc3RlbmVySW52b2NhdGlvbk9yZGVyL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldFJlcXVlc3RMaXN0ZW5lckludm9jYXRpb25PcmRlci9XZWJUZXN0LmphdmEKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgNjA1NzM4NSIpOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldFJlcXVlc3RMaXN0ZW5lckludm9jYXRpb25PcmRlci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRSZXF1ZXN0TGlzdGVuZXJJbnZvY2F0aW9uT3JkZXIvYnVpbGQucHJvcGVydGllcwppbmRleCBkNDBlNWNmLi43YThhZmRkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldFJlcXVlc3RMaXN0ZW5lckludm9jYXRpb25PcmRlci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0UmVxdWVzdExpc3RlbmVySW52b2NhdGlvbk9yZGVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjAtc2VydmxldC1yZXF1ZXN0LWxpc3RlbmVyLWludm9jYXRpb24tb3JkZXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0UmVxdWVzdExpc3RlbmVySW52b2NhdGlvbk9yZGVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0UmVxdWVzdExpc3RlbmVySW52b2NhdGlvbk9yZGVyL2J1aWxkLnhtbAppbmRleCBkYmY4MDAyLi5mMWE2NTc0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldFJlcXVlc3RMaXN0ZW5lckludm9jYXRpb25PcmRlci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRSZXF1ZXN0TGlzdGVuZXJJbnZvY2F0aW9uT3JkZXIvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxNyArNDIsMTcgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIAogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0UmVxdWVzdExpc3RlbmVySW52b2NhdGlvbk9yZGVyL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0UmVxdWVzdExpc3RlbmVySW52b2NhdGlvbk9yZGVyL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCBmNzYzNjMxLi43ZThmZjE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldFJlcXVlc3RMaXN0ZW5lckludm9jYXRpb25PcmRlci9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRSZXF1ZXN0TGlzdGVuZXJJbnZvY2F0aW9uT3JkZXIvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+VGVzdFNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+VGVzdFNlcnZsZXQ8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCisgICAgPC9zZXJ2bGV0PgogCiAgICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5UZXN0U2VydmxldDwvc2VydmxldC1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRSZXF1ZXN0UmVzcG9uc2VXcmFwcGVySXNXcmFwcGVyRm9yL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0UmVxdWVzdFJlc3BvbnNlV3JhcHBlcklzV3JhcHBlckZvci9XZWJUZXN0LmphdmEKaW5kZXggNTJmMTJjYS4uMzdmMjRhYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRSZXF1ZXN0UmVzcG9uc2VXcmFwcGVySXNXcmFwcGVyRm9yL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldFJlcXVlc3RSZXNwb25zZVdyYXBwZXJJc1dyYXBwZXJGb3IvV2ViVGVzdC5qYXZhCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgU2VydmxldFtSZXF1ZXN0fFJlc3BvbnNlXVdyYXBwZXIjaXNXcmFwcGVyRm9yIik7CkBAIC01MywxMSArNTMsMTEgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjb250ZXh0Um9vdCArICIvVGVzdFNlcnZsZXQiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRSZXF1ZXN0UmVzcG9uc2VXcmFwcGVySXNXcmFwcGVyRm9yL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldFJlcXVlc3RSZXNwb25zZVdyYXBwZXJJc1dyYXBwZXJGb3IvYnVpbGQucHJvcGVydGllcwppbmRleCBjNTQ0NTIyLi40MzEwNjZjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldFJlcXVlc3RSZXNwb25zZVdyYXBwZXJJc1dyYXBwZXJGb3IvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldFJlcXVlc3RSZXNwb25zZVdyYXBwZXJJc1dyYXBwZXJGb3IvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC1zZXJ2bGV0LXJlcXVlc3QtcmVzcG9uc2Utd3JhcHBlci1pcy13cmFwcGVyLWZvciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRSZXF1ZXN0UmVzcG9uc2VXcmFwcGVySXNXcmFwcGVyRm9yL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0UmVxdWVzdFJlc3BvbnNlV3JhcHBlcklzV3JhcHBlckZvci9idWlsZC54bWwKaW5kZXggZjU0ODcxZC4uMTBhMDg4ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRSZXF1ZXN0UmVzcG9uc2VXcmFwcGVySXNXcmFwcGVyRm9yL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldFJlcXVlc3RSZXNwb25zZVdyYXBwZXJJc1dyYXBwZXJGb3IvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwyMyArNDIsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MCwxMCArNzAsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldFJlcXVlc3RSZXNwb25zZVdyYXBwZXJJc1dyYXBwZXJGb3Ivc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2VydmxldFJlcXVlc3RSZXNwb25zZVdyYXBwZXJJc1dyYXBwZXJGb3Ivc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggNmI4ZWRmNC4uOGIxMDI2OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3NlcnZsZXRSZXF1ZXN0UmVzcG9uc2VXcmFwcGVySXNXcmFwcGVyRm9yL3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXJ2bGV0UmVxdWVzdFJlc3BvbnNlV3JhcHBlcklzV3JhcHBlckZvci9zZXJ2bGV0L3Rlc3QvVGVzdFNlcnZsZXQuamF2YQpAQCAtMjgsNyArMjgsNyBAQAogICAgICAgICBTZXJ2bGV0UmVxdWVzdFdyYXBwZXIgcmVxV3JhcHBlcjEgPSBuZXcgU3ViRmlyc3RMZXZlbFJlcXVlc3RXcmFwcGVyKHJlcSk7CiAgICAgICAgIFNlcnZsZXRSZXF1ZXN0V3JhcHBlciByZXFXcmFwcGVyMiA9IG5ldyBTZWNvbmRMZXZlbFJlcXVlc3RXcmFwcGVyKHJlcVdyYXBwZXIxKTsKICAgICAgICAgU2VydmxldFJlcXVlc3RXcmFwcGVyIHJlcVdyYXBwZXIzID0gbmV3IFRoaXJkTGV2ZWxSZXF1ZXN0V3JhcHBlcihyZXFXcmFwcGVyMik7Ci0gICAgICAgCisKICAgICAgICAgaWYgKCFyZXFXcmFwcGVyMy5pc1dyYXBwZXJGb3IocmVxV3JhcHBlcjEpIHx8CiAgICAgICAgICAgICAgICAgIXJlcVdyYXBwZXIzLmlzV3JhcHBlckZvcihGaXJzdExldmVsUmVxdWVzdFdyYXBwZXIuY2xhc3MpKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbigiVW5leHBlY3RlZCByZXN1bHQiKTsKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICAgICAgU2VydmxldFJlc3BvbnNlV3JhcHBlciByZXNXcmFwcGVyMSA9IG5ldyBTdWJGaXJzdExldmVsUmVzcG9uc2VXcmFwcGVyKHJlcyk7CiAgICAgICAgIFNlcnZsZXRSZXNwb25zZVdyYXBwZXIgcmVzV3JhcHBlcjIgPSBuZXcgU2Vjb25kTGV2ZWxSZXNwb25zZVdyYXBwZXIocmVzV3JhcHBlcjEpOwogICAgICAgICBTZXJ2bGV0UmVzcG9uc2VXcmFwcGVyIHJlc1dyYXBwZXIzID0gbmV3IFRoaXJkTGV2ZWxSZXNwb25zZVdyYXBwZXIocmVzV3JhcHBlcjIpOwotICAgICAgIAorCiAgICAgICAgIGlmICghcmVzV3JhcHBlcjMuaXNXcmFwcGVyRm9yKHJlc1dyYXBwZXIxKSB8fAogICAgICAgICAgICAgICAgICFyZXNXcmFwcGVyMy5pc1dyYXBwZXJGb3IoRmlyc3RMZXZlbFJlc3BvbnNlV3JhcHBlci5jbGFzcykpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKCJVbmV4cGVjdGVkIHJlc3VsdCIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDb25maWcvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDb25maWcvV2ViVGVzdC5qYXZhCmluZGV4IGFhYzcwNTIuLmIwNGQzNzIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ29uZmlnL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUNvbmZpZy9XZWJUZXN0LmphdmEKQEAgLTE5LDcgKzE5LDcgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLio7CiAKIC8qCi0gKiBUaGlzIHVuaXQgdGVzdCBleHBlY3RzIHRoZSBmb2xsb3dpbmcgU2V0LUNvb2tpZSByZXNwb25zZSBoZWFkZXIsIGJhc2VkIG9uIAorICogVGhpcyB1bml0IHRlc3QgZXhwZWN0cyB0aGUgZm9sbG93aW5nIFNldC1Db29raWUgcmVzcG9uc2UgaGVhZGVyLCBiYXNlZCBvbgogICogdGhlIGNvb2tpZS1wcm9wZXJ0aWVzIHNwZWNpZmllZCB1c2luZyBTZXJ2bGV0Q29udGV4dC5zZXRTZXNzaW9uQ29va2llQ29uZmlnCiAgKgogICogICBTZXQtQ29va2llOiBKU0VTU0lPTklEPVsuLi5dOyBEb21haW49LmlwbGFuZXQuY29tOyBQYXRoPS8KQEAgLTY0LDcgKzY0LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgU2VydmxldENvbnRleHQgU2Vzc2lvbkNvb2tpZUNvbmZpZyIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTEwMCw3ICsxMDAsNyBAQAogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIGZhaWwgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KLQkgICAgfSBlbHNlIHsKKyAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIk1pc3NpbmcgY29va2llIGRvbWFpbiIpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICBmYWlsID0gdHJ1ZTsKQEAgLTExNSw3ICsxMTUsNyBAQAogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIGZhaWwgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KLQkgICAgfSBlbHNlIHsKKyAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIk1pc3NpbmcgY29va2llIHBhdGgiKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgZmFpbCA9IHRydWU7CkBAIC0xMzAsNyArMTMwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICBmYWlsID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9Ci0JICAgIH0gZWxzZSB7CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJNaXNzaW5nIGNvb2tpZSBjb21tZW50Iik7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgIGZhaWwgPSB0cnVlOwpAQCAtMTU3LDcgKzE1Nyw3IEBACiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm47Ci0gICAgICAgIAorCiAgICAgfQogCiAgICAgcHJpdmF0ZSBTdHJpbmcgZ2V0Q29va2llRmllbGQoU3RyaW5nIGNvb2tpZSwgU3RyaW5nIGZpZWxkKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUNvbmZpZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDb25maWcvYnVpbGQucHJvcGVydGllcwppbmRleCBhNzNmOTMyLi5lOGI3MTU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUNvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ29uZmlnL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC1zZXNzaW9uLWNvb2tpZS1jb25maWciLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLXNlc3Npb24tY29va2llLWNvbmZpZyIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUNvbmZpZy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUNvbmZpZy9idWlsZC54bWwKaW5kZXggZjU0ODcxZC4uMTBhMDg4ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDb25maWcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ29uZmlnL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMjMgKzQyLDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzAsMTAgKzcwLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDb25maWcvc2VydmxldC9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDb25maWcvc2VydmxldC9UZXN0U2VydmxldC5qYXZhCmluZGV4IGQ4NjhmYTEuLmVhMGRlMTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ29uZmlnL3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUNvbmZpZy9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTE5LDcgKzE5LDcgQEAKIGltcG9ydCBqYWthcnRhLnNlcnZsZXQuaHR0cC4qOwogCiBwdWJsaWMgY2xhc3MgVGVzdFNlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkKICAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbiB7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ29uZmlnRGVjbGFyYXRpdmUvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDb25maWdEZWNsYXJhdGl2ZS9XZWJUZXN0LmphdmEKaW5kZXggNThkMTE4ZC4uMTU0OGViYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDb25maWdEZWNsYXJhdGl2ZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDb25maWdEZWNsYXJhdGl2ZS9XZWJUZXN0LmphdmEKQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBjdXN0b21pemluZyBjb21wbGV0ZSBsaXN0IG9mICIgKwpAQCAtNTQsNyArNTQsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgcnVuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUNvbmZpZ0RlY2xhcmF0aXZlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUNvbmZpZ0RlY2xhcmF0aXZlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOTU2ZGVjMy4uNWY1ODEwMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDb25maWdEZWNsYXJhdGl2ZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ29uZmlnRGVjbGFyYXRpdmUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC1zZXNzaW9uLWNvb2tpZS1jb25maWctZGVjbGFyYXRpdmUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ29uZmlnRGVjbGFyYXRpdmUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDb25maWdEZWNsYXJhdGl2ZS9idWlsZC54bWwKaW5kZXggZGJjNTg1ZC4uNzRkNGIxNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDb25maWdEZWNsYXJhdGl2ZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDb25maWdEZWNsYXJhdGl2ZS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDE1ICs0NCwxNSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgpAQCAtNzIsNyArNzIsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDb25maWdEZWNsYXJhdGl2ZS9zZXJ2bGV0L3Rlc3QvQ3JlYXRlU2Vzc2lvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDb25maWdEZWNsYXJhdGl2ZS9zZXJ2bGV0L3Rlc3QvQ3JlYXRlU2Vzc2lvbi5qYXZhCmluZGV4IDY3YjRmMGMuLmEwZmU2OWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ29uZmlnRGVjbGFyYXRpdmUvc2VydmxldC90ZXN0L0NyZWF0ZVNlc3Npb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUNvbmZpZ0RlY2xhcmF0aXZlL3NlcnZsZXQvdGVzdC9DcmVhdGVTZXNzaW9uLmphdmEKQEAgLTQwLDMyICs0MCwzMiBAQAogICAgICAgICAvLyBjb21tZW50CiAgICAgICAgIGlmIChzZXNzaW9uQ29va2llLmluZGV4T2YoIkNvbW1lbnQ9bXlDb21tZW50IikgPT0gLTEpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKCJNaXNzaW5nIGNvb2tpZSBjb21tZW50Iik7Ci0gICAgICAgIH0gICAgICAKKyAgICAgICAgfQogCiAgICAgICAgIC8vIGRvbWFpbgogICAgICAgICBpZiAoc2Vzc2lvbkNvb2tpZS5pbmRleE9mKCJEb21haW49bXlkb21haW4iKSA9PSAtMSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oIk1pc3NpbmcgY29va2llIGRvbWFpbiIpOwotICAgICAgICB9ICAgICAgCisgICAgICAgIH0KIAogICAgICAgICAvLyBwYXRoCiAgICAgICAgIGlmIChzZXNzaW9uQ29va2llLmluZGV4T2YoIlBhdGg9L215UGF0aCIpID09IC0xKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbigiTWlzc2luZyBjb29raWUgcGF0aCIpOwotICAgICAgICB9ICAgICAgCisgICAgICAgIH0KIAogICAgICAgICAvLyBzZWN1cmUKICAgICAgICAgaWYgKHNlc3Npb25Db29raWUuaW5kZXhPZigiU2VjdXJlIikgPT0gLTEpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKCJNaXNzaW5nIFNlY3VyZSBhdHRyaWJ1dGUiKTsKLSAgICAgICAgfSAgICAgIAorICAgICAgICB9CiAKICAgICAgICAgLy8gaHR0cC1vbmx5CiAgICAgICAgIGlmIChzZXNzaW9uQ29va2llLmluZGV4T2YoIkh0dHBPbmx5IikgPT0gLTEpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKCJNaXNzaW5nIEh0dHBPbmx5IGF0dHJpYnV0ZSIpOwotICAgICAgICB9ICAgICAgCisgICAgICAgIH0KIAogICAgICAgICAvLyBtYXgtYWdlCiAgICAgICAgIGlmIChzZXNzaW9uQ29va2llLmluZGV4T2YoIk1heC1BZ2U9MTIzIikgPT0gLTEpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKCJNaXNzaW5nIG1heC1hZ2UiKTsKLSAgICAgICAgfSAgICAgIAorICAgICAgICB9CiAKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUNvbmZpZ1Byb2dyYW1tYXRpYy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUNvbmZpZ1Byb2dyYW1tYXRpYy9XZWJUZXN0LmphdmEKaW5kZXggYzcwY2UyZC4uNzdjOGVkMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDb25maWdQcm9ncmFtbWF0aWMvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ29uZmlnUHJvZ3JhbW1hdGljL1dlYlRlc3QuamF2YQpAQCAtMzgsNyArMzgsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGN1c3RvbWl6aW5nIGNvbXBsZXRlIGxpc3Qgb2YgIiArCkBAIC01NCw3ICs1NCw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBydW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ29uZmlnUHJvZ3JhbW1hdGljL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUNvbmZpZ1Byb2dyYW1tYXRpYy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGZkN2M0YjEuLmRkYmUwMTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ29uZmlnUHJvZ3JhbW1hdGljL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDb25maWdQcm9ncmFtbWF0aWMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC1zZXNzaW9uLWNvb2tpZS1jb25maWctcHJvZ3JhbW1hdGljIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUNvbmZpZ1Byb2dyYW1tYXRpYy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUNvbmZpZ1Byb2dyYW1tYXRpYy9idWlsZC54bWwKaW5kZXggZGJjNTg1ZC4uNzRkNGIxNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDb25maWdQcm9ncmFtbWF0aWMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ29uZmlnUHJvZ3JhbW1hdGljL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMTUgKzQ0LDE1IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CkBAIC03Miw3ICs3Miw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUNvbmZpZ1Byb2dyYW1tYXRpYy9zZXJ2bGV0L3Rlc3QvQ3JlYXRlU2Vzc2lvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDb25maWdQcm9ncmFtbWF0aWMvc2VydmxldC90ZXN0L0NyZWF0ZVNlc3Npb24uamF2YQppbmRleCBkZTUxZTM1Li44MWQ1ZDY1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUNvbmZpZ1Byb2dyYW1tYXRpYy9zZXJ2bGV0L3Rlc3QvQ3JlYXRlU2Vzc2lvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ29uZmlnUHJvZ3JhbW1hdGljL3NlcnZsZXQvdGVzdC9DcmVhdGVTZXNzaW9uLmphdmEKQEAgLTQwLDMxICs0MCwzMSBAQAogICAgICAgICAvLyBjb21tZW50CiAgICAgICAgIGlmIChzZXNzaW9uQ29va2llLmluZGV4T2YoIkNvbW1lbnQ9bXlDb21tZW50IikgPT0gLTEpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKCJNaXNzaW5nIGNvb2tpZSBjb21tZW50Iik7Ci0gICAgICAgIH0gICAgICAKKyAgICAgICAgfQogCiAgICAgICAgIC8vIGRvbWFpbgogICAgICAgICBpZiAoc2Vzc2lvbkNvb2tpZS5pbmRleE9mKCJEb21haW49bXlkb21haW4iKSA9PSAtMSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oIk1pc3NpbmcgY29va2llIGRvbWFpbiIpOwotICAgICAgICB9ICAgICAgCisgICAgICAgIH0KIAogICAgICAgICAvLyBwYXRoCiAgICAgICAgIGlmIChzZXNzaW9uQ29va2llLmluZGV4T2YoIlBhdGg9L215UGF0aCIpID09IC0xKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbigiTWlzc2luZyBjb29raWUgcGF0aCIpOwotICAgICAgICB9ICAgICAgCisgICAgICAgIH0KIAogICAgICAgICAvLyBzZWN1cmUKICAgICAgICAgaWYgKHNlc3Npb25Db29raWUuaW5kZXhPZigiU2VjdXJlIikgPT0gLTEpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKCJNaXNzaW5nIFNlY3VyZSBhdHRyaWJ1dGUiKTsKLSAgICAgICAgfSAgICAgIAorICAgICAgICB9CiAKICAgICAgICAgLy8gaHR0cC1vbmx5CiAgICAgICAgIGlmIChzZXNzaW9uQ29va2llLmluZGV4T2YoIkh0dHBPbmx5IikgPT0gLTEpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKCJNaXNzaW5nIEh0dHBPbmx5IGF0dHJpYnV0ZSIpOwotICAgICAgICB9ICAgICAgCisgICAgICAgIH0KIAogICAgICAgICAvLyBtYXgtYWdlCiAgICAgICAgIGlmIChzZXNzaW9uQ29va2llLmluZGV4T2YoIk1heC1BZ2U9MTIzIikgPT0gLTEpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKCJNaXNzaW5nIG1heC1hZ2UiKTsKLSAgICAgICAgfSAgICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDdXN0b21OYW1lUHJvZ3JhbW1hdGljL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ3VzdG9tTmFtZVByb2dyYW1tYXRpYy9XZWJUZXN0LmphdmEKaW5kZXggOTQ3ODk3ZS4uMTE1YWRkYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDdXN0b21OYW1lUHJvZ3JhbW1hdGljL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUN1c3RvbU5hbWVQcm9ncmFtbWF0aWMvV2ViVGVzdC5qYXZhCkBAIC00Myw3ICs0Myw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgY3VzdG9taXppbmcgbmFtZSBvZiBzZXNzaW9uICIgKwpAQCAtNTgsNyArNTgsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyBmaXJzdFJ1bigpIHRocm93cyBFeGNlcHRpb24gewpAQCAtNzYsNyArNzYsNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGdldCk7CiAgICAgICAgICAgICBvcy53cml0ZShnZXQuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgICAgICBvcy53cml0ZSgiXHJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgICAgICAvLyBHZXQgdGhlIE1ZSlNFU1NJT05JRCBmcm9tIHRoZSByZXNwb25zZQogICAgICAgICAgICAgaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgICAgICBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKQEAgLTE0NSw3ICsxNDUsNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGNvb2tpZSk7CiAgICAgICAgICAgICBvcy53cml0ZShjb29raWUuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgICAgICBvcy53cml0ZSgiXHJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgICAgICBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgICAgIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUN1c3RvbU5hbWVQcm9ncmFtbWF0aWMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ3VzdG9tTmFtZVByb2dyYW1tYXRpYy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGI3ZGQ2NDEuLjM3MGM1MzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ3VzdG9tTmFtZVByb2dyYW1tYXRpYy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ3VzdG9tTmFtZVByb2dyYW1tYXRpYy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLXNlc3Npb24tY29va2llLWN1c3RvbS1uYW1lLXByb2dyYW1tYXRpYyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDdXN0b21OYW1lUHJvZ3JhbW1hdGljL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ3VzdG9tTmFtZVByb2dyYW1tYXRpYy9idWlsZC54bWwKaW5kZXggZGJjNTg1ZC4uNzRkNGIxNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDdXN0b21OYW1lUHJvZ3JhbW1hdGljL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUN1c3RvbU5hbWVQcm9ncmFtbWF0aWMvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwxNSArNDQsMTUgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KQEAgLTcyLDcgKzcyLDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ3VzdG9tTmFtZVByb2dyYW1tYXRpYy9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUN1c3RvbU5hbWVQcm9ncmFtbWF0aWMvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDczYWY3ZjguLjlmYTZhYWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ3VzdG9tTmFtZVByb2dyYW1tYXRpYy9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDdXN0b21OYW1lUHJvZ3JhbW1hdGljL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtNDYsNSArNDYsNSBAQAogICAgIDxzZXJ2bGV0LW5hbWU+UmVzdW1lU2Vzc2lvbjwvc2VydmxldC1uYW1lPgogICAgIDx1cmwtcGF0dGVybj4vUmVzdW1lU2Vzc2lvbjwvdXJsLXBhdHRlcm4+CiAgIDwvc2VydmxldC1tYXBwaW5nPgotICAgIAorCiA8L3dlYi1hcHA+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUN1c3RvbU5hbWVQcm9ncmFtbWF0aWMvc2VydmxldC90ZXN0L0NyZWF0ZVNlc3Npb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ3VzdG9tTmFtZVByb2dyYW1tYXRpYy9zZXJ2bGV0L3Rlc3QvQ3JlYXRlU2Vzc2lvbi5qYXZhCmluZGV4IDg5Nzk1N2UuLmNkZDg3YzkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ3VzdG9tTmFtZVByb2dyYW1tYXRpYy9zZXJ2bGV0L3Rlc3QvQ3JlYXRlU2Vzc2lvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ3VzdG9tTmFtZVByb2dyYW1tYXRpYy9zZXJ2bGV0L3Rlc3QvQ3JlYXRlU2Vzc2lvbi5qYXZhCkBAIC0zMCw4ICszMCw4IEBACiAgICAgICAgIEh0dHBTZXNzaW9uIHNlc3Npb24gPSByZXEuZ2V0U2Vzc2lvbih0cnVlKTsKIAogICAgICAgICBIYXNoTWFwIG1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgICAgIG1hcC5wdXQoIm5hbWUxIiwgInZhbHVlMSIpOyAgIAotICAgICAgICBtYXAucHV0KCJuYW1lMiIsICJ2YWx1ZTIiKTsgICAKKyAgICAgICAgbWFwLnB1dCgibmFtZTEiLCAidmFsdWUxIik7CisgICAgICAgIG1hcC5wdXQoIm5hbWUyIiwgInZhbHVlMiIpOwogICAgICAgICBzZXNzaW9uLnNldEF0dHJpYnV0ZSgibWFwIiwgbWFwKTsKIAogICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG51bGw7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUN1c3RvbU5hbWVTdW5XZWJYbWwvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDdXN0b21OYW1lU3VuV2ViWG1sL1dlYlRlc3QuamF2YQppbmRleCAyNDYzOTAxLi5iNGNmMmY2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUN1c3RvbU5hbWVTdW5XZWJYbWwvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ3VzdG9tTmFtZVN1bldlYlhtbC9XZWJUZXN0LmphdmEKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBjdXN0b21pemluZyBuYW1lIG9mIHNlc3Npb24gIiArCkBAIC02Miw3ICs2Miw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgU3RyaW5nIGZpcnN0UnVuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CkBAIC04MCw3ICs4MCw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZ2V0KTsKICAgICAgICAgICAgIG9zLndyaXRlKGdldC5nZXRCeXRlcygpKTsKICAgICAgICAgICAgIG9zLndyaXRlKCJcclxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgICAgIC8vIEdldCB0aGUgTVlKU0VTU0lPTklEIGZyb20gdGhlIHJlc3BvbnNlCiAgICAgICAgICAgICBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgICAgIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwpAQCAtMTQ5LDcgKzE0OSw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oY29va2llKTsKICAgICAgICAgICAgIG9zLndyaXRlKGNvb2tpZS5nZXRCeXRlcygpKTsKICAgICAgICAgICAgIG9zLndyaXRlKCJcclxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgICAgIGlzID0gc29jay5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICAgICAgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ3VzdG9tTmFtZVN1bldlYlhtbC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDdXN0b21OYW1lU3VuV2ViWG1sL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOTNiMjM3NS4uNTZmYzg2NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDdXN0b21OYW1lU3VuV2ViWG1sL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDdXN0b21OYW1lU3VuV2ViWG1sL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjAtc2Vzc2lvbi1jb29raWUtY3VzdG9tLW5hbWUtc3VuLXdlYi14bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ3VzdG9tTmFtZVN1bldlYlhtbC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUN1c3RvbU5hbWVTdW5XZWJYbWwvYnVpbGQueG1sCmluZGV4IGRiYzU4NWQuLjc0ZDRiMTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ3VzdG9tTmFtZVN1bldlYlhtbC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDdXN0b21OYW1lU3VuV2ViWG1sL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMTUgKzQ0LDE1IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CkBAIC03Miw3ICs3Miw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUN1c3RvbU5hbWVTdW5XZWJYbWwvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDdXN0b21OYW1lU3VuV2ViWG1sL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCA2ZjExYTRhLi44OWU3YTViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUN1c3RvbU5hbWVTdW5XZWJYbWwvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ3VzdG9tTmFtZVN1bldlYlhtbC9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTQyLDUgKzQyLDUgQEAKICAgICA8c2VydmxldC1uYW1lPlJlc3VtZVNlc3Npb248L3NlcnZsZXQtbmFtZT4KICAgICA8dXJsLXBhdHRlcm4+L1Jlc3VtZVNlc3Npb248L3VybC1wYXR0ZXJuPgogICA8L3NlcnZsZXQtbWFwcGluZz4KLSAgICAKKwogPC93ZWItYXBwPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDdXN0b21OYW1lU3VuV2ViWG1sL3NlcnZsZXQvdGVzdC9DcmVhdGVTZXNzaW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUN1c3RvbU5hbWVTdW5XZWJYbWwvc2VydmxldC90ZXN0L0NyZWF0ZVNlc3Npb24uamF2YQppbmRleCA4OTc5NTdlLi5jZGQ4N2M5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUN1c3RvbU5hbWVTdW5XZWJYbWwvc2VydmxldC90ZXN0L0NyZWF0ZVNlc3Npb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUN1c3RvbU5hbWVTdW5XZWJYbWwvc2VydmxldC90ZXN0L0NyZWF0ZVNlc3Npb24uamF2YQpAQCAtMzAsOCArMzAsOCBAQAogICAgICAgICBIdHRwU2Vzc2lvbiBzZXNzaW9uID0gcmVxLmdldFNlc3Npb24odHJ1ZSk7CiAKICAgICAgICAgSGFzaE1hcCBtYXAgPSBuZXcgSGFzaE1hcCgpOwotICAgICAgICBtYXAucHV0KCJuYW1lMSIsICJ2YWx1ZTEiKTsgICAKLSAgICAgICAgbWFwLnB1dCgibmFtZTIiLCAidmFsdWUyIik7ICAgCisgICAgICAgIG1hcC5wdXQoIm5hbWUxIiwgInZhbHVlMSIpOworICAgICAgICBtYXAucHV0KCJuYW1lMiIsICJ2YWx1ZTIiKTsKICAgICAgICAgc2Vzc2lvbi5zZXRBdHRyaWJ1dGUoIm1hcCIsIG1hcCk7CiAKICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBudWxsOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDdXN0b21OYW1lV2ViWG1sU3VuV2ViWG1sUHJlY2VkZW5jZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUN1c3RvbU5hbWVXZWJYbWxTdW5XZWJYbWxQcmVjZWRlbmNlL1dlYlRlc3QuamF2YQppbmRleCAxMmQxN2RhLi5jOTE4MjYzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUN1c3RvbU5hbWVXZWJYbWxTdW5XZWJYbWxQcmVjZWRlbmNlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUN1c3RvbU5hbWVXZWJYbWxTdW5XZWJYbWxQcmVjZWRlbmNlL1dlYlRlc3QuamF2YQpAQCAtNDMsNyArNDMsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGN1c3RvbWl6aW5nIG5hbWUgb2Ygc2Vzc2lvbiAiICsKQEAgLTU4LDcgKzU4LDcgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgZmlyc3RSdW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKQEAgLTc2LDcgKzc2LDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihnZXQpOwogICAgICAgICAgICAgb3Mud3JpdGUoZ2V0LmdldEJ5dGVzKCkpOwogICAgICAgICAgICAgb3Mud3JpdGUoIlxyXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICAgICAgLy8gR2V0IHRoZSBNWUpTRVNTSU9OSUQgZnJvbSB0aGUgcmVzcG9uc2UKICAgICAgICAgICAgIGlzID0gc29jay5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICAgICAgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CkBAIC0xMjEsNyArMTIxLDcgQEAKICAgICAgICAgaWYgKGxpbmUgPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiTWlzc2luZyBTZXQtQ29va2llIHJlc3BvbnNlIGhlYWRlciIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmICghbGluZS5jb250YWlucygiSHR0cE9ubHkiKSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiTWlzc2luZyBIdHRwT25seSBpbiBjb29raWUgaGVhZGVyIik7CiAgICAgICAgIH0KQEAgLTE0OSw3ICsxNDksNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGNvb2tpZSk7CiAgICAgICAgICAgICBvcy53cml0ZShjb29raWUuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgICAgICBvcy53cml0ZSgiXHJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgICAgICBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgICAgIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUN1c3RvbU5hbWVXZWJYbWxTdW5XZWJYbWxQcmVjZWRlbmNlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUN1c3RvbU5hbWVXZWJYbWxTdW5XZWJYbWxQcmVjZWRlbmNlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOTNiMjM3NS4uNTZmYzg2NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDdXN0b21OYW1lV2ViWG1sU3VuV2ViWG1sUHJlY2VkZW5jZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ3VzdG9tTmFtZVdlYlhtbFN1bldlYlhtbFByZWNlZGVuY2UvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC1zZXNzaW9uLWNvb2tpZS1jdXN0b20tbmFtZS1zdW4td2ViLXhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDdXN0b21OYW1lV2ViWG1sU3VuV2ViWG1sUHJlY2VkZW5jZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUN1c3RvbU5hbWVXZWJYbWxTdW5XZWJYbWxQcmVjZWRlbmNlL2J1aWxkLnhtbAppbmRleCBkYmM1ODVkLi43NGQ0YjE0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUN1c3RvbU5hbWVXZWJYbWxTdW5XZWJYbWxQcmVjZWRlbmNlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUN1c3RvbU5hbWVXZWJYbWxTdW5XZWJYbWxQcmVjZWRlbmNlL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMTUgKzQ0LDE1IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CkBAIC03Miw3ICs3Miw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUN1c3RvbU5hbWVXZWJYbWxTdW5XZWJYbWxQcmVjZWRlbmNlL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ3VzdG9tTmFtZVdlYlhtbFN1bldlYlhtbFByZWNlZGVuY2UvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IGU0ODg1ZDkuLjE2ZGQ5MGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ3VzdG9tTmFtZVdlYlhtbFN1bldlYlhtbFByZWNlZGVuY2UvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ3VzdG9tTmFtZVdlYlhtbFN1bldlYlhtbFByZWNlZGVuY2UvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0zOCw3ICszOCw3IEBACiAgICAgPHNlcnZsZXQtbmFtZT5SZXN1bWVTZXNzaW9uPC9zZXJ2bGV0LW5hbWU+CiAgICAgPHVybC1wYXR0ZXJuPi9SZXN1bWVTZXNzaW9uPC91cmwtcGF0dGVybj4KICAgPC9zZXJ2bGV0LW1hcHBpbmc+Ci0gICAgCisKICAgPHNlc3Npb24tY29uZmlnPgogICAgIDxjb29raWUtY29uZmlnPgogICAgICAgPG5hbWU+QUJDPC9uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDdXN0b21OYW1lV2ViWG1sU3VuV2ViWG1sUHJlY2VkZW5jZS9zZXJ2bGV0L3Rlc3QvQ3JlYXRlU2Vzc2lvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25Db29raWVDdXN0b21OYW1lV2ViWG1sU3VuV2ViWG1sUHJlY2VkZW5jZS9zZXJ2bGV0L3Rlc3QvQ3JlYXRlU2Vzc2lvbi5qYXZhCmluZGV4IDg5Nzk1N2UuLmNkZDg3YzkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uQ29va2llQ3VzdG9tTmFtZVdlYlhtbFN1bldlYlhtbFByZWNlZGVuY2Uvc2VydmxldC90ZXN0L0NyZWF0ZVNlc3Npb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbkNvb2tpZUN1c3RvbU5hbWVXZWJYbWxTdW5XZWJYbWxQcmVjZWRlbmNlL3NlcnZsZXQvdGVzdC9DcmVhdGVTZXNzaW9uLmphdmEKQEAgLTMwLDggKzMwLDggQEAKICAgICAgICAgSHR0cFNlc3Npb24gc2Vzc2lvbiA9IHJlcS5nZXRTZXNzaW9uKHRydWUpOwogCiAgICAgICAgIEhhc2hNYXAgbWFwID0gbmV3IEhhc2hNYXAoKTsKLSAgICAgICAgbWFwLnB1dCgibmFtZTEiLCAidmFsdWUxIik7ICAgCi0gICAgICAgIG1hcC5wdXQoIm5hbWUyIiwgInZhbHVlMiIpOyAgIAorICAgICAgICBtYXAucHV0KCJuYW1lMSIsICJ2YWx1ZTEiKTsKKyAgICAgICAgbWFwLnB1dCgibmFtZTIiLCAidmFsdWUyIik7CiAgICAgICAgIHNlc3Npb24uc2V0QXR0cmlidXRlKCJtYXAiLCBtYXApOwogCiAgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbnVsbDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uSWRVcmxSZXdyaXRlU2Vzc2lvblRyYWNraW5nTW9kZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbklkVXJsUmV3cml0ZVNlc3Npb25UcmFja2luZ01vZGUvV2ViVGVzdC5qYXZhCmluZGV4IDMxOTZjNTQuLmQ5Y2FjMmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uSWRVcmxSZXdyaXRlU2Vzc2lvblRyYWNraW5nTW9kZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25JZFVybFJld3JpdGVTZXNzaW9uVHJhY2tpbmdNb2RlL1dlYlRlc3QuamF2YQpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVVJMIHJld3JpdGluZyB3aXRoIHNlc3Npb24gaWQiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC01MCw3ICs1MCw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZVNlcnZsZXQoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CkBAIC02MCwxNCArNjAsMTQgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlU2VydmxldCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAgCisKICAgICAgICAgU29ja2V0IHNvY2sgPSBuZXcgU29ja2V0KGhvc3QsIG5ldyBJbnRlZ2VyKHBvcnQpLmludFZhbHVlKCkpOwogICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSBzb2NrLmdldE91dHB1dFN0cmVhbSgpOwogICAgICAgICBTdHJpbmcgZ2V0ID0gIkdFVCAiICsgY29udGV4dFJvb3QgKyAiL3JlZGlyZWN0RnJvbSIgKyAiIEhUVFAvMS4wXG4iOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZ2V0KTsKICAgICAgICAgb3Mud3JpdGUoZ2V0LmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYmlzID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogCkBAIC04Nyw3ICs4Nyw3IEBACiAgICAgICAgIGlmIChjb29raWVMaW5lICE9IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlVuZXhwZWN0ZWQgU2V0LUNvb2tpZSByZXNwb25zZSBoZWFkZXIiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAocmVkaXJlY3RMaW5lID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIk1pc3NpbmcgTG9jYXRpb24gcmVzcG9uc2UgaGVhZGVyIik7CiAgICAgICAgIH0KQEAgLTEwNCw3ICsxMDQsNyBAQAogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgY29ubi5jb25uZWN0KCk7CiAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgeyAKKyAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlIGNvZGUuIEV4cGVjdGVkOiAyMDAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwgcmVjZWl2ZWQ6ICIgKyByZXNwb25zZUNvZGUpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbklkVXJsUmV3cml0ZVNlc3Npb25UcmFja2luZ01vZGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uSWRVcmxSZXdyaXRlU2Vzc2lvblRyYWNraW5nTW9kZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDNlYzBmZjUuLmVhNGJmMTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uSWRVcmxSZXdyaXRlU2Vzc2lvblRyYWNraW5nTW9kZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uSWRVcmxSZXdyaXRlU2Vzc2lvblRyYWNraW5nTW9kZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLXNlc3Npb24taWQtdXJsLXJld3JpdGUtc2Vzc2lvbi10cmFja2luZy1tb2RlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbklkVXJsUmV3cml0ZVNlc3Npb25UcmFja2luZ01vZGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25JZFVybFJld3JpdGVTZXNzaW9uVHJhY2tpbmdNb2RlL2J1aWxkLnhtbAppbmRleCBmNTQ4NzFkLi4xMGEwODhlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbklkVXJsUmV3cml0ZVNlc3Npb25UcmFja2luZ01vZGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uSWRVcmxSZXdyaXRlU2Vzc2lvblRyYWNraW5nTW9kZS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDIzICs0MiwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTcwLDEwICs3MCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uSWRVcmxSZXdyaXRlU2Vzc2lvblRyYWNraW5nTW9kZUN1c3RvbUNvb2tpZU5hbWUvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25JZFVybFJld3JpdGVTZXNzaW9uVHJhY2tpbmdNb2RlQ3VzdG9tQ29va2llTmFtZS9XZWJUZXN0LmphdmEKaW5kZXggYzg1NTNhNS4uN2QwOGUxNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25JZFVybFJld3JpdGVTZXNzaW9uVHJhY2tpbmdNb2RlQ3VzdG9tQ29va2llTmFtZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25JZFVybFJld3JpdGVTZXNzaW9uVHJhY2tpbmdNb2RlQ3VzdG9tQ29va2llTmFtZS9XZWJUZXN0LmphdmEKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVSTCByZXdyaXRpbmcgd2l0aCBjdXN0b20gY29va2llIG5hbWUiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC01MCw3ICs1MCw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZVNlcnZsZXQoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CkBAIC02MCwxNCArNjAsMTQgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlU2VydmxldCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAgCisKICAgICAgICAgU29ja2V0IHNvY2sgPSBuZXcgU29ja2V0KGhvc3QsIG5ldyBJbnRlZ2VyKHBvcnQpLmludFZhbHVlKCkpOwogICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSBzb2NrLmdldE91dHB1dFN0cmVhbSgpOwogICAgICAgICBTdHJpbmcgZ2V0ID0gIkdFVCAiICsgY29udGV4dFJvb3QgKyAiL3JlZGlyZWN0RnJvbSIgKyAiIEhUVFAvMS4wXG4iOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZ2V0KTsKICAgICAgICAgb3Mud3JpdGUoZ2V0LmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYmlzID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogCkBAIC04Nyw3ICs4Nyw3IEBACiAgICAgICAgIGlmIChjb29raWVMaW5lICE9IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlVuZXhwZWN0ZWQgU2V0LUNvb2tpZSByZXNwb25zZSBoZWFkZXIiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAocmVkaXJlY3RMaW5lID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIk1pc3NpbmcgTG9jYXRpb24gcmVzcG9uc2UgaGVhZGVyIik7CiAgICAgICAgIH0KQEAgLTEwOCw3ICsxMDgsNyBAQAogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgY29ubi5jb25uZWN0KCk7CiAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgeyAKKyAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlIGNvZGUuIEV4cGVjdGVkOiAyMDAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwgcmVjZWl2ZWQ6ICIgKyByZXNwb25zZUNvZGUpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbklkVXJsUmV3cml0ZVNlc3Npb25UcmFja2luZ01vZGVDdXN0b21Db29raWVOYW1lL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbklkVXJsUmV3cml0ZVNlc3Npb25UcmFja2luZ01vZGVDdXN0b21Db29raWVOYW1lL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMjliNTQ4Ni4uMTg2NzkyOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25JZFVybFJld3JpdGVTZXNzaW9uVHJhY2tpbmdNb2RlQ3VzdG9tQ29va2llTmFtZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uSWRVcmxSZXdyaXRlU2Vzc2lvblRyYWNraW5nTW9kZUN1c3RvbUNvb2tpZU5hbWUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC1zZXNzaW9uLWlkLXVybC1yZXdyaXRlLXNlc3Npb24tdHJhY2tpbmctbW9kZS1jdXN0b20tY29va2llLW5hbWUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uSWRVcmxSZXdyaXRlU2Vzc2lvblRyYWNraW5nTW9kZUN1c3RvbUNvb2tpZU5hbWUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25JZFVybFJld3JpdGVTZXNzaW9uVHJhY2tpbmdNb2RlQ3VzdG9tQ29va2llTmFtZS9idWlsZC54bWwKaW5kZXggZjU0ODcxZC4uMTBhMDg4ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25JZFVybFJld3JpdGVTZXNzaW9uVHJhY2tpbmdNb2RlQ3VzdG9tQ29va2llTmFtZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25JZFVybFJld3JpdGVTZXNzaW9uVHJhY2tpbmdNb2RlQ3VzdG9tQ29va2llTmFtZS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDIzICs0MiwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTcwLDEwICs3MCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uSWRVcmxSZXdyaXRlU2Vzc2lvblRyYWNraW5nTW9kZURlY2xhcmF0aXZlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uSWRVcmxSZXdyaXRlU2Vzc2lvblRyYWNraW5nTW9kZURlY2xhcmF0aXZlL1dlYlRlc3QuamF2YQppbmRleCA3ZmEwZDZjLi5lMmQ2ODE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbklkVXJsUmV3cml0ZVNlc3Npb25UcmFja2luZ01vZGVEZWNsYXJhdGl2ZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25JZFVybFJld3JpdGVTZXNzaW9uVHJhY2tpbmdNb2RlRGVjbGFyYXRpdmUvV2ViVGVzdC5qYXZhCkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIFVSTCBzZXNzaW9uIHRyYWNraW5nIG1vZGUgY29uZmlndXJlZCB2aWEgd2ViLnhtbCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTUwLDcgKzUwLDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlU2VydmxldCgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTYwLDE0ICs2MCwxNCBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2VTZXJ2bGV0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgICAKKwogICAgICAgICBTb2NrZXQgc29jayA9IG5ldyBTb2NrZXQoaG9zdCwgbmV3IEludGVnZXIocG9ydCkuaW50VmFsdWUoKSk7CiAgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IHNvY2suZ2V0T3V0cHV0U3RyZWFtKCk7CiAgICAgICAgIFN0cmluZyBnZXQgPSAiR0VUICIgKyBjb250ZXh0Um9vdCArICIvcmVkaXJlY3RGcm9tIiArICIgSFRUUC8xLjBcbiI7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihnZXQpOwogICAgICAgICBvcy53cml0ZShnZXQuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gc29jay5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBiaXMgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAKQEAgLTg3LDcgKzg3LDcgQEAKICAgICAgICAgaWYgKGNvb2tpZUxpbmUgIT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiVW5leHBlY3RlZCBTZXQtQ29va2llIHJlc3BvbnNlIGhlYWRlciIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChyZWRpcmVjdExpbmUgPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiTWlzc2luZyBMb2NhdGlvbiByZXNwb25zZSBoZWFkZXIiKTsKICAgICAgICAgfQpAQCAtMTA0LDcgKzEwNCw3IEBACiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOwogICAgICAgICBjb25uLmNvbm5lY3QoKTsKICAgICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm4uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7IAorICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UgY29kZS4gRXhwZWN0ZWQ6IDIwMCIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLCByZWNlaXZlZDogIiArIHJlc3BvbnNlQ29kZSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uSWRVcmxSZXdyaXRlU2Vzc2lvblRyYWNraW5nTW9kZURlY2xhcmF0aXZlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbklkVXJsUmV3cml0ZVNlc3Npb25UcmFja2luZ01vZGVEZWNsYXJhdGl2ZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGUzN2NlOGYuLjY0YzM0M2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uSWRVcmxSZXdyaXRlU2Vzc2lvblRyYWNraW5nTW9kZURlY2xhcmF0aXZlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25JZFVybFJld3JpdGVTZXNzaW9uVHJhY2tpbmdNb2RlRGVjbGFyYXRpdmUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC1zZXNzaW9uLWlkLXVybC1yZXdyaXRlLXNlc3Npb24tdHJhY2tpbmctbW9kZS1kZWNsYXJhdGl2ZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25JZFVybFJld3JpdGVTZXNzaW9uVHJhY2tpbmdNb2RlRGVjbGFyYXRpdmUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3Nlc3Npb25JZFVybFJld3JpdGVTZXNzaW9uVHJhY2tpbmdNb2RlRGVjbGFyYXRpdmUvYnVpbGQueG1sCmluZGV4IGY4MjZiNWUuLjIwNjdkODggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC9zZXNzaW9uSWRVcmxSZXdyaXRlU2Vzc2lvblRyYWNraW5nTW9kZURlY2xhcmF0aXZlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvc2Vzc2lvbklkVXJsUmV3cml0ZVNlc3Npb25UcmFja2luZ01vZGVEZWNsYXJhdGl2ZS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDIyICs0MiwyMiBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC02OSwxMCArNjksMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvdHJhbnNwb3J0UHJvdGVjdGVkQW5ub3RhdGlvbi9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvdHJhbnNwb3J0UHJvdGVjdGVkQW5ub3RhdGlvbi9XZWJUZXN0LmphdmEKaW5kZXggM2MwYWZiMS4uNTk5ZmFkNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3RyYW5zcG9ydFByb3RlY3RlZEFubm90YXRpb24vV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC90cmFuc3BvcnRQcm90ZWN0ZWRBbm5vdGF0aW9uL1dlYlRlc3QuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogICAgIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdD0KICAgICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX05BTUUgPSAic2VydmxldC0zLjAtdHJhbnNwb3J0UHJvdGVjdGVkQW5ub3RhdGlvbiI7Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB0aHJvd3MgRXhjZXB0aW9uewogICAgICAgICBTdHJpbmcgaG9zdCA9IGFyZ3NbMF07CiAgICAgICAgIFN0cmluZyBodHRwUG9ydCA9IGFyZ3NbMV07CkBAIC00OCw3ICs0OCw3IEBACiAgICAgICAgICAgICAgICAgICAgIG51bGwsIHRydWUsICJtZnI6SGVsbG86amF2YWVlOmZhbHNlIik7CiAgICAgICAgICAgICBvayA9IG9rICYmIHRlc3RVUkwoIkdFVCIsICJodHRwczovLyIgKyBob3N0ICsgIjoiICsgaHR0cHNQb3J0ICsgIi8iICsgY29udGV4dFJvb3QgKyAiL215dXJsMyIsCiAgICAgICAgICAgICAgICAgICAgIHNzZiwgdHJ1ZSwgImc6SGVsbG86amF2YWVlOnRydWUiKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBvayA9IG9rICYmIHRlc3RVUkwoIlRSQUNFIiwgImh0dHA6Ly8iICsgaG9zdCArICI6IiArIGh0dHBQb3J0ICsgIi8iICsgY29udGV4dFJvb3QgKyAiL215dXJsMyIsCiAgICAgICAgICAgICAgICAgICAgIG51bGwsIHRydWUsICJ0OkhlbGxvOmphdmFlZTpmYWxzZSIpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCAoKG9rKT8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKSk7CkBAIC05Niw3ICs5Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgY29ubmVjdGlvbiA9IGNvbm47CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBjb25uZWN0aW9uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKQEAgLTExMyw3ICsxMTMsNyBAQAogICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbnsKIAogICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gIGNvbm5lY3Rpb24uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzcG9uc2UgY29kZTogIiArIHJlc3BvbnNlQ29kZSArICIgRXhwZWN0ZWQgY29kZTogMjAwIik7IAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc3BvbnNlIGNvZGU6ICIgKyByZXNwb25zZUNvZGUgKyAiIEV4cGVjdGVkIGNvZGU6IDIwMCIpOwogICAgICAgICByZXR1cm4gKGNvbm5lY3Rpb24uZ2V0UmVzcG9uc2VDb2RlKCkgPT0gMjAwKTsKICAgICB9CiAKQEAgLTEyNSw3ICsxMjUsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIoCiAgICAgICAgICAgICAgICAgbmV3IElucHV0U3RyZWFtUmVhZGVyKGNvbm5lY3Rpb24uZ2V0SW5wdXRTdHJlYW0oKSkpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN0cmluZyBsaW5lID0gIiI7CiAgICAgICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbi5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGxpbmUpOwpAQCAtMTM4LDcgKzEzOCw3IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGlmIChpbiAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIGluLmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGNhdGNoKElPRXhjZXB0aW9uIGlvZSkgewogICAgICAgICAgICAgICAgIC8vIGlnbm9yZQogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3RyYW5zcG9ydFByb3RlY3RlZEFubm90YXRpb24vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC90cmFuc3BvcnRQcm90ZWN0ZWRBbm5vdGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZmYxYTlmZS4uMzQ4NjliMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3RyYW5zcG9ydFByb3RlY3RlZEFubm90YXRpb24vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvdHJhbnNwb3J0UHJvdGVjdGVkQW5ub3RhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMiArMTUsMTIgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjAtdHJhbnNwb3J0LXByb3RlY3RlZC1hbm5vdGF0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii90cmFuc3BvcnQtcHJvdGVjdGVkLWFubm90YXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC90cmFuc3BvcnRQcm90ZWN0ZWRBbm5vdGF0aW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC90cmFuc3BvcnRQcm90ZWN0ZWRBbm5vdGF0aW9uL2J1aWxkLnhtbAppbmRleCA4NmNhZmQ0Li5jMTY1Yzc0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvdHJhbnNwb3J0UHJvdGVjdGVkQW5ub3RhdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3RyYW5zcG9ydFByb3RlY3RlZEFubm90YXRpb24vYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwxMCArNDQsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTU1LDcgKzU1LDcgQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CkBAIC03MSwxMyArNzEsMTMgQEAKICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uLHByZXBhcmUta2V5c3RvcmUtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTkxLDEwICs5MSwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RvcmUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRmlsdGVyQW5ub3RhdGlvbi9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRmlsdGVyQW5ub3RhdGlvbi9XZWJUZXN0LmphdmEKaW5kZXggYjA4ODE3MC4uZDJlMDgyMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZpbHRlckFubm90YXRpb24vV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGaWx0ZXJBbm5vdGF0aW9uL1dlYlRlc3QuamF2YQpAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBAV2ViRmlsdGVyIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDYsNyArNDYsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZCIpOwpAQCAtNTYsNyArNTYsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgICsgIi9teXRlc3QiOwogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKQpAQCAtOTMsMTAgKzkzLDEwIEBACiAgICAgICAgICAgICBpZiAoRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRmlsdGVyQW5ub3RhdGlvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZpbHRlckFubm90YXRpb24vYnVpbGQucHJvcGVydGllcwppbmRleCBkMDdjODg3Li4yNjM0MDMzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRmlsdGVyQW5ub3RhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGaWx0ZXJBbm5vdGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjAtd2ViLWZpbHRlci1hbm5vdGF0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRmlsdGVyQW5ub3RhdGlvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRmlsdGVyQW5ub3RhdGlvbi9idWlsZC54bWwKaW5kZXggMzJkMzZhZi4uNTVhMmExYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZpbHRlckFubm90YXRpb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGaWx0ZXJBbm5vdGF0aW9uL2J1aWxkLnhtbApAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NywyMyArNDcsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NSwxMCArNzUsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRmlsdGVyQW5ub3RhdGlvbi9zZXJ2bGV0L1Rlc3RGaWx0ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGaWx0ZXJBbm5vdGF0aW9uL3NlcnZsZXQvVGVzdEZpbHRlci5qYXZhCmluZGV4IDY0MmM3NWQuLjA0NWYxMzEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGaWx0ZXJBbm5vdGF0aW9uL3NlcnZsZXQvVGVzdEZpbHRlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGaWx0ZXJBbm5vdGF0aW9uL3NlcnZsZXQvVGVzdEZpbHRlci5qYXZhCkBAIC0zNCw3ICszNCw3IEBACiAgICAgcHVibGljIHZvaWQgaW5pdChGaWx0ZXJDb25maWcgZmlsdGVyQ29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPj4+IGZpbHRlci5pbml0Iik7CiAgICAgICAgIG1lc2cgPSBmaWx0ZXJDb25maWcuZ2V0SW5pdFBhcmFtZXRlcigibWVzZyIpOwotICAgIH0gICAKKyAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb0ZpbHRlcihTZXJ2bGV0UmVxdWVzdCByZXEsIFNlcnZsZXRSZXNwb25zZSByZXMsCiAgICAgICAgICAgICBGaWx0ZXJDaGFpbiBjaGFpbikgdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGaWx0ZXJBbm5vdGF0aW9uL3NlcnZsZXQvVGVzdEZpbHRlcjIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGaWx0ZXJBbm5vdGF0aW9uL3NlcnZsZXQvVGVzdEZpbHRlcjIuamF2YQppbmRleCA0NWRjM2MyLi4yMDQyNTk0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRmlsdGVyQW5ub3RhdGlvbi9zZXJ2bGV0L1Rlc3RGaWx0ZXIyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZpbHRlckFubm90YXRpb24vc2VydmxldC9UZXN0RmlsdGVyMi5qYXZhCkBAIC0zNCw3ICszNCw3IEBACiAgICAgcHVibGljIHZvaWQgaW5pdChGaWx0ZXJDb25maWcgZmlsdGVyQ29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPj4+IGZpbHRlcjIuaW5pdCIpOwogICAgICAgICBtZXNnID0gZmlsdGVyQ29uZmlnLmdldEluaXRQYXJhbWV0ZXIoIm1lc2ciKTsKLSAgICB9ICAgCisgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9GaWx0ZXIoU2VydmxldFJlcXVlc3QgcmVxLCBTZXJ2bGV0UmVzcG9uc2UgcmVzLAogICAgICAgICAgICAgRmlsdGVyQ2hhaW4gY2hhaW4pIHRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZyYWdtZW50L1dlYlRlc3QuamF2YQppbmRleCAzMzc0ZTQxLi40NjdmODEzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudC9XZWJUZXN0LmphdmEKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3Igd2ViIGZyYWdtZW50Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtMTEwLDcgKzExMCw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFleHBlY3RlZFJlc3BvbnNlLmVxdWFscyhsaW5lKSkgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICBleHBlY3RlZFJlc3BvbnNlICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgIHRlc3RTdGF0dXMgPSBmYWxzZTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZyYWdtZW50L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnQvYnVpbGQucHJvcGVydGllcwppbmRleCA5OWMzYzU5Li4yODc2YzJlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC13ZWItZnJhZ21lbnQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnQvYnVpbGQueG1sCmluZGV4IDU5M2VhZGUuLmIzZDViNDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZyYWdtZW50L2J1aWxkLnhtbApAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICA8L2RlbGV0ZT4KICAgICAgICAgPGRlbGV0ZSBkaXI9ImxpYiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTU4LDIzICs1OCwyMyBAQAogICAgICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KICAgICAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dmdGVzdCIvPgogCi0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovVGVzdFNlcnZsZXQuY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovVGVzdFNlcnZsZXQuY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtODYsMTAgKzg2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZyYWdtZW50L2Rlc2NyaXB0b3Ivd2ViLWZyYWdtZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudC9kZXNjcmlwdG9yL3dlYi1mcmFnbWVudC54bWwKaW5kZXggMWViYTFjNy4uNzQyZWJkZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZyYWdtZW50L2Rlc2NyaXB0b3Ivd2ViLWZyYWdtZW50LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnQvZGVzY3JpcHRvci93ZWItZnJhZ21lbnQueG1sCkBAIC0yMCw3ICsyMCw3IEBACiA8d2ViLWZyYWdtZW50IHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWZyYWdtZW50XzNfMC54c2QiCi0gICAgdmVyc2lvbj0iMy4wIj4gCisgICAgdmVyc2lvbj0iMy4wIj4KICAgPGRpc3BsYXktbmFtZT53ZnRlc3Q8L2Rpc3BsYXktbmFtZT4KICAgPGRpc3RyaWJ1dGFibGU+PC9kaXN0cmlidXRhYmxlPgogICA8c2VydmxldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudC9zZXJ2bGV0L1dGVGVzdEZpbHRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZyYWdtZW50L3NlcnZsZXQvV0ZUZXN0RmlsdGVyLmphdmEKaW5kZXggOWJkNmM3Mi4uYjhhYTQ4OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZyYWdtZW50L3NlcnZsZXQvV0ZUZXN0RmlsdGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZyYWdtZW50L3NlcnZsZXQvV0ZUZXN0RmlsdGVyLmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKIHB1YmxpYyBjbGFzcyBXRlRlc3RGaWx0ZXIgaW1wbGVtZW50cyBGaWx0ZXIgewogICAgIHB1YmxpYyB2b2lkIGluaXQoRmlsdGVyQ29uZmlnIGZpbHRlckNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj4+PiBmaWx0ZXIuaW5pdCIpOwotICAgIH0gICAKKyAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb0ZpbHRlcihTZXJ2bGV0UmVxdWVzdCByZXEsIFNlcnZsZXRSZXNwb25zZSByZXMsCiAgICAgICAgICAgICBGaWx0ZXJDaGFpbiBjaGFpbikgdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudFdpdGhFamJMaXRlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudFdpdGhFamJMaXRlL1dlYlRlc3QuamF2YQppbmRleCBmNWY5N2E5Li4zZWYzNmIwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnRXaXRoRWpiTGl0ZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZyYWdtZW50V2l0aEVqYkxpdGUvV2ViVGVzdC5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIHdlYiBmcmFnbWVudCB3aXRoIGVqYiBsaXRlIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtOTgsNyArOTgsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGlmICghZXhwZWN0ZWRSZXNwb25zZS5lcXVhbHMobGluZSkpIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgZXhwZWN0ZWRSZXNwb25zZSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICB0ZXN0U3RhdHVzID0gZmFsc2U7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudFdpdGhFamJMaXRlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnRXaXRoRWpiTGl0ZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDcyMzg1OWEuLjAyNTM3Y2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudFdpdGhFamJMaXRlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZyYWdtZW50V2l0aEVqYkxpdGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC13ZWItZnJhZ21lbnQtd2l0aC1lamItbGl0ZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZyYWdtZW50V2l0aEVqYkxpdGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZyYWdtZW50V2l0aEVqYkxpdGUvYnVpbGQueG1sCmluZGV4IDU5M2VhZGUuLmIzZDViNDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudFdpdGhFamJMaXRlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnRXaXRoRWpiTGl0ZS9idWlsZC54bWwKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgPC9kZWxldGU+CiAgICAgICAgIDxkZWxldGUgZGlyPSJsaWIiLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC01OCwyMyArNTgsMjMgQEAKICAgICAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CiAgICAgICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZnRlc3QiLz4KIAotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqL1Rlc3RTZXJ2bGV0LmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqL1Rlc3RTZXJ2bGV0LmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTg2LDEwICs4NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudFdpdGhGaWxlVXBsb2FkL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudFdpdGhGaWxlVXBsb2FkL1dlYlRlc3QuamF2YQppbmRleCBmZmQwZWIxLi44NjY2OTc0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnRXaXRoRmlsZVVwbG9hZC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZyYWdtZW50V2l0aEZpbGVVcGxvYWQvV2ViVGVzdC5qYXZhCkBAIC0yMCw3ICsyMCw3IEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci4qOwogCiBwdWJsaWMgY2xhc3MgV2ViVGVzdCB7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIApAQCAtNTcsMjMgKzU3LDIzIEBACiAgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IG51bGw7CiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gbnVsbDsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYnIgPSBudWxsOwotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgZ2V0ID0gIkdFVCAiICsgY29udGV4dFJvb3QgKyB1cmxQYXR0ZXJuICsgIiBIVFRQLzEuMFxyXG4iICsgIkNvbm5lY3Rpb246IGtlZXAtYWxpdmVcclxuIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGdldCk7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzb2NrID0gbmV3IFNvY2tldChob3N0LCBwb3J0KTsKICAgICAgICAgICAgIG9zID0gc29jay5nZXRPdXRwdXRTdHJlYW0oKTsKICAgICAgICAgICAgIG9zLndyaXRlKGdldC5nZXRCeXRlcygpKTsKICAgICAgICAgICAgIG9zLndyaXRlKCJcclxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgICAgIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogICAgICAgICAgICAgaW50IGkgPSAwOwogICAgICAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOwogICAgICAgICAgICAgU3RyaW5nIHZpZXdJZCA9IG51bGw7CiAgICAgICAgICAgICBTdHJpbmcgc2Vzc2lvbklkID0gbnVsbDsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvL2dldCBzZXNzaW9uIGlkIGFuZCBKU0YgdmlldyBpZAogICAgICAgICAgICAgd2hpbGUgKChsaW5lID0gYnIucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGlmKGxpbmUuc3RhcnRzV2l0aCgiU2V0LUNvb2tpZSIpKSB7CkBAIC04Niw3ICs4Niw3IEBACiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyBXcml0ZSBoZWFkZXIgZm9yIHRoZSB1cGxvYWRlZCB0ZXh0IGZpbGUKICAgICAgICAgICAgIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBiYSA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKICAgICAgICAgICAgIGJhLndyaXRlKCItLUFhQjAzeFxyXG4iLmdldEJ5dGVzKCkpOwpAQCAtOTUsMTQgKzk1LDE0IEBACiAgICAgICAgICAgICBiYS53cml0ZSgiLS1BYUIwM3hcclxuIi5nZXRCeXRlcygpKTsKICAgICAgICAgICAgIGJhLndyaXRlKCJDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9XCJmb3JtOmZpbGVcIjsgZmlsZW5hbWU9XCJ0ZXN0LnR4dFwiXHJcbiIuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgICAgICBiYS53cml0ZSgiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cclxuXHJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgLy8gV3JpdGUgY29udGVudCBvZiB0aGUgdXBsb2FkZWQgdGV4dCBmaWxlCiAgICAgICAgICAgICBpcyA9IG5ldyBGaWxlSW5wdXRTdHJlYW0gKGRpciArICJ0ZXN0LnR4dCIpOwogICAgICAgICAgICAgaW50IGM7CiAgICAgICAgICAgICB3aGlsZSAoKGMgPSBpcy5yZWFkKCkpICE9IC0xKSB7CiAgICAgICAgICAgICAgICAgYmEud3JpdGUoYyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgYmEud3JpdGUoIlxyXG4tLUFhQjAzeFxyXG4iLmdldEJ5dGVzKCkpOwogICAgICAgICAgICAgYmEud3JpdGUoIkNvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT1cImZvcm06al9pZHQ0XCJcclxuXHJcbiIuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgICAgICBiYS53cml0ZSgidXBsb2FkXHJcbiIuZ2V0Qnl0ZXMoKSk7CkBAIC0xMTUsNyArMTE1LDcgQEAKICAgICAgICAgICAgIGJhLndyaXRlKCItLUFhQjAzeC0tXHJcbiIuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgICAgICBieXRlW10gZGF0YSA9IGJhLnRvQnl0ZUFycmF5KCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oYmEudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgLy8gQ29tcG9zZSB0aGUgcG9zdCByZXF1ZXN0IGhlYWRlcgogICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBwb3N0SGVhZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKICAgICAgICAgICAgIHBvc3RIZWFkZXIuYXBwZW5kKCJQT1NUICIgKyBjb250ZXh0Um9vdCArIHVybFBhdHRlcm4gKyAiIEhUVFAvMS4xXHJcbiIpOwpAQCAtMTI1LDE3ICsxMjUsMTcgQEAKICAgICAgICAgICAgIHBvc3RIZWFkZXIuYXBwZW5kKCJDb250ZW50LUxlbmd0aDogIiArIGRhdGEubGVuZ3RoICsgIlxyXG4iKTsKICAgICAgICAgICAgIHBvc3RIZWFkZXIuYXBwZW5kKCJDb29raWU6IEpTRVNTSU9OSUQ9IiArIHNlc3Npb25JZCArICJcclxuXHJcbiIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHBvc3RIZWFkZXIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIG9zLndyaXRlKHBvc3RIZWFkZXIudG9TdHJpbmcoKS5nZXRCeXRlcygpKTsKICAgICAgICAgICAgIG9zLndyaXRlKGRhdGEpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHdoaWxlICgobGluZSA9IGJyLnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBpZiAobGluZS5jb250YWlucyhFWFBFQ1RFRF9SRVNQT05TRSkpIHsKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CkBAIC0xNjMsMTIgKzE2MywxMiBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBpZiAoc29jayAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNvY2suY2xvc2UoKTsgCisgICAgICAgICAgICAgICAgICAgIHNvY2suY2xvc2UoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGNhdGNoKElPRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICAgICAgLy8gaWdub3JlCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnRXaXRoRmlsZVVwbG9hZC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZyYWdtZW50V2l0aEZpbGVVcGxvYWQvYnVpbGQucHJvcGVydGllcwppbmRleCBkNmMxYzQxLi41NWJlNDcwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnRXaXRoRmlsZVVwbG9hZC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudFdpdGhGaWxlVXBsb2FkL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjAtd2ViLWZyYWdtZW50LXdpdGgtZmlsZS11cGxvYWQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudFdpdGhGaWxlVXBsb2FkL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudFdpdGhGaWxlVXBsb2FkL2J1aWxkLnhtbAppbmRleCA3ZGYwMzZmLi5jZjJhYmVjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnRXaXRoRmlsZVVwbG9hZC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZyYWdtZW50V2l0aEZpbGVVcGxvYWQvYnVpbGQueG1sCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgIDwvZGVsZXRlPgogICAgICAgICA8ZGVsZXRlIGRpcj0ibGliIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNTksMjMgKzU5LDIzIEBACiAgICAgICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgogICAgICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vZmlsZXVwbG9hZCIvPgogCi0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovVGVzdFNlcnZsZXQuY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovVGVzdFNlcnZsZXQuY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtODcsMTAgKzg3LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZyYWdtZW50V2l0aEZpbGVVcGxvYWQvZGVzY3JpcHRvci93ZWItZnJhZ21lbnQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZyYWdtZW50V2l0aEZpbGVVcGxvYWQvZGVzY3JpcHRvci93ZWItZnJhZ21lbnQueG1sCmluZGV4IDdkODczM2QuLjVjNjUzMTAgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudFdpdGhGaWxlVXBsb2FkL2Rlc2NyaXB0b3Ivd2ViLWZyYWdtZW50LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnRXaXRoRmlsZVVwbG9hZC9kZXNjcmlwdG9yL3dlYi1mcmFnbWVudC54bWwKQEAgLTE5LDE5ICsxOSwxOSBAQAogCiA8d2ViLWZyYWdtZW50IHZlcnNpb249IjMuMCIgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfM18wLnhzZCI+CiAgPGRpc3BsYXktbmFtZT5GaWxlIHVwbG9hZCB0ZXN0PC9kaXNwbGF5LW5hbWU+Ci0JPHNlcnZsZXQ+Ci0JCTxzZXJ2bGV0LW5hbWU+RmFjZXMgU2VydmxldDwvc2VydmxldC1uYW1lPgotCQk8c2VydmxldC1jbGFzcz5qYWthcnRhLmZhY2VzLndlYmFwcC5GYWNlc1NlcnZsZXQ8L3NlcnZsZXQtY2xhc3M+Ci0JCTxsb2FkLW9uLXN0YXJ0dXA+MTwvbG9hZC1vbi1zdGFydHVwPgotCTwvc2VydmxldD4KLSAJPCEtLSBNYXAgdGhlc2UgZmlsZXMgd2l0aCBKU0YgLS0+Ci0JPHNlcnZsZXQtbWFwcGluZz4KLQkJPHNlcnZsZXQtbmFtZT5GYWNlcyBTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+Ci0JCTx1cmwtcGF0dGVybj4vZmFjZXMvKjwvdXJsLXBhdHRlcm4+Ci0JPC9zZXJ2bGV0LW1hcHBpbmc+Ci0JPHNlcnZsZXQtbWFwcGluZz4KLQkJPHNlcnZsZXQtbmFtZT5GYWNlcyBTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+Ci0JCTx1cmwtcGF0dGVybj4qLnhodG1sPC91cmwtcGF0dGVybj4KLQk8L3NlcnZsZXQtbWFwcGluZz4KLSAKKyAgICA8c2VydmxldD4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5GYWNlcyBTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LWNsYXNzPmpha2FydGEuZmFjZXMud2ViYXBwLkZhY2VzU2VydmxldDwvc2VydmxldC1jbGFzcz4KKyAgICAgICAgPGxvYWQtb24tc3RhcnR1cD4xPC9sb2FkLW9uLXN0YXJ0dXA+CisgICAgPC9zZXJ2bGV0PgorICAgICA8IS0tIE1hcCB0aGVzZSBmaWxlcyB3aXRoIEpTRiAtLT4KKyAgICA8c2VydmxldC1tYXBwaW5nPgorICAgICAgICA8c2VydmxldC1uYW1lPkZhY2VzIFNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHVybC1wYXR0ZXJuPi9mYWNlcy8qPC91cmwtcGF0dGVybj4KKyAgICA8L3NlcnZsZXQtbWFwcGluZz4KKyAgICA8c2VydmxldC1tYXBwaW5nPgorICAgICAgICA8c2VydmxldC1uYW1lPkZhY2VzIFNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHVybC1wYXR0ZXJuPioueGh0bWw8L3VybC1wYXR0ZXJuPgorICAgIDwvc2VydmxldC1tYXBwaW5nPgorCiA8L3dlYi1mcmFnbWVudD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudFdpdGhGaWxlVXBsb2FkL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudFdpdGhGaWxlVXBsb2FkL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCBjNGUyY2YzLi5mMTE3NDc3IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnRXaXRoRmlsZVVwbG9hZC9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZyYWdtZW50V2l0aEZpbGVVcGxvYWQvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yMSwxMSArMjEsMTEgQEAKICAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly94bWxucy5qY3Aub3JnL3htbC9ucy9qYXZhZWUgaHR0cDovL3htbG5zLmpjcC5vcmcveG1sL25zL2phdmFlZS93ZWItYXBwXzNfMS54c2QiCiAgICAgICAgICB2ZXJzaW9uPSIzLjEiPgotICAgIAorCiAgICAgPHdlbGNvbWUtZmlsZS1saXN0PgogICAgICAgICA8d2VsY29tZS1maWxlPgogICAgICAgICAgICAgc2luZ2xlLnhodG1sCiAgICAgICAgIDwvd2VsY29tZS1maWxlPgotICAgICAgICAKKwogICAgIDwvd2VsY29tZS1maWxlLWxpc3Q+CiA8L3dlYi1hcHA+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnRXaXRoTG9naW5Db25maWcvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZyYWdtZW50V2l0aExvZ2luQ29uZmlnL1dlYlRlc3QuamF2YQppbmRleCBjOGJkMzY4Li41YjQ4YmM2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnRXaXRoTG9naW5Db25maWcvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudFdpdGhMb2dpbkNvbmZpZy9XZWJUZXN0LmphdmEKQEAgLTUwLDcgKzUwLDcgQEAKIAogICAgICAgICBleHBlY3RlZCA9ICJzdWNjZXNzIHdpdGggIiArIGFkbWluVXNlcjsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciB3ZWItZnJhZ21lbnQgd2l0aCBsb2dpbi1jb25maWciKTsKQEAgLTY0LDcgKzY0LDcgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHJ1bigpIHRocm93cyBFeGNlcHRpb24gewpAQCAtOTEsNyArOTEsNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludChnZXQpOwogICAgICAgICAgICAgb3Mud3JpdGUoZ2V0LmdldEJ5dGVzKCkpOwogICAgICAgICAgICAgb3Mud3JpdGUoIlxyXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICAgICAgaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgICAgICBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKIApAQCAtMTM5LDcgKzEzOSw3IEBACiAgICAgICAgICAgICBTdHJpbmcgY29va2llID0gIkNvb2tpZTogIiArIGpzZXNzaW9uSWQgKyAiXG4iOwogICAgICAgICAgICAgb3Mud3JpdGUoY29va2llLmdldEJ5dGVzKCkpOwogICAgICAgICAgICAgb3Mud3JpdGUoIlxyXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICAgICAgaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgICAgICBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKIApAQCAtMTg1LDcgKzE4NSw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oc2VuZENvb2tpZSk7CiAgICAgICAgICAgICBvcy53cml0ZShzZW5kQ29va2llLmdldEJ5dGVzKCkpOwogICAgICAgICAgICAgb3Mud3JpdGUoIlxyXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICAgICAgaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgICAgICBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZyYWdtZW50V2l0aExvZ2luQ29uZmlnL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnRXaXRoTG9naW5Db25maWcvYnVpbGQucHJvcGVydGllcwppbmRleCA5ZGQwZWJkLi5mOGZiZGZjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnRXaXRoTG9naW5Db25maWcvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnRXaXRoTG9naW5Db25maWcvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC13ZWItZnJhZ21lbnQtd2l0aC1sb2dpbi1jb25maWciLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudFdpdGhMb2dpbkNvbmZpZy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnRXaXRoTG9naW5Db25maWcvYnVpbGQueG1sCmluZGV4IDMzNzQxMTIuLjVkNmRmZGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudFdpdGhMb2dpbkNvbmZpZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZyYWdtZW50V2l0aExvZ2luQ29uZmlnL2J1aWxkLnhtbApAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICA8L2RlbGV0ZT4KICAgICAgICAgPGRlbGV0ZSBkaXI9ImxpYiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTczLDIzICs3MywyMyBAQAogICAgICAgICAgICAgZXhjbHVkZXM9IioqLyouanNwIi8+CiAgICAgICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgogCi0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTEwMywxMCArMTAzLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVzdG9yZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS11c2VyLWNvbW1vbiI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnRXaXRoTG9naW5Db25maWcvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZyYWdtZW50V2l0aExvZ2luQ29uZmlnL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCA0MzM0M2ExLi5hNGNiNTIwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnRXaXRoTG9naW5Db25maWcvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudFdpdGhMb2dpbkNvbmZpZy9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTIzLDEyICsyMywxMiBAQAogCiAgIDxzZWN1cml0eS1jb25zdHJhaW50PgogICAgIDx3ZWItcmVzb3VyY2UtY29sbGVjdGlvbj4KLQk8d2ViLXJlc291cmNlLW5hbWU+UHJvdGVjdGVkIEFyZWE8L3dlYi1yZXNvdXJjZS1uYW1lPgotCTx1cmwtcGF0dGVybj4vKjwvdXJsLXBhdHRlcm4+Ci0JPGh0dHAtbWV0aG9kPkRFTEVURTwvaHR0cC1tZXRob2Q+Ci0JPGh0dHAtbWV0aG9kPkdFVDwvaHR0cC1tZXRob2Q+Ci0JPGh0dHAtbWV0aG9kPlBPU1Q8L2h0dHAtbWV0aG9kPgotCTxodHRwLW1ldGhvZD5QVVQ8L2h0dHAtbWV0aG9kPgorICAgIDx3ZWItcmVzb3VyY2UtbmFtZT5Qcm90ZWN0ZWQgQXJlYTwvd2ViLXJlc291cmNlLW5hbWU+CisgICAgPHVybC1wYXR0ZXJuPi8qPC91cmwtcGF0dGVybj4KKyAgICA8aHR0cC1tZXRob2Q+REVMRVRFPC9odHRwLW1ldGhvZD4KKyAgICA8aHR0cC1tZXRob2Q+R0VUPC9odHRwLW1ldGhvZD4KKyAgICA8aHR0cC1tZXRob2Q+UE9TVDwvaHR0cC1tZXRob2Q+CisgICAgPGh0dHAtbWV0aG9kPlBVVDwvaHR0cC1tZXRob2Q+CiAgICAgPC93ZWItcmVzb3VyY2UtY29sbGVjdGlvbj4KIAogICAgIDxhdXRoLWNvbnN0cmFpbnQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnRXaXRoTG9naW5Db25maWdPdmVycmlkZWQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZyYWdtZW50V2l0aExvZ2luQ29uZmlnT3ZlcnJpZGVkL1dlYlRlc3QuamF2YQppbmRleCAyZDI4ZDc5Li43ZTdkNjc2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnRXaXRoTG9naW5Db25maWdPdmVycmlkZWQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudFdpdGhMb2dpbkNvbmZpZ092ZXJyaWRlZC9XZWJUZXN0LmphdmEKQEAgLTUwLDcgKzUwLDcgQEAKIAogICAgICAgICBleHBlY3RlZCA9ICJzdWNjZXNzIHdpdGggIiArIGFkbWluVXNlcjsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciB3ZWItZnJhZ21lbnQgd2l0aCBsb2dpbi1jb25maWcgb3ZlcnJpZGVkIGJ5IHdlYi54bWwiKTsKQEAgLTY0LDcgKzY0LDcgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHJ1bigpIHRocm93cyBFeGNlcHRpb24gewpAQCAtOTEsNyArOTEsNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludChnZXQpOwogICAgICAgICAgICAgb3Mud3JpdGUoZ2V0LmdldEJ5dGVzKCkpOwogICAgICAgICAgICAgb3Mud3JpdGUoIlxyXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICAgICAgaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgICAgICBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKIApAQCAtMTM4LDcgKzEzOCw3IEBACiAgICAgICAgICAgICBTdHJpbmcgY29va2llID0gIkNvb2tpZTogIiArIGpzZXNzaW9uSWQgKyAiXG4iOwogICAgICAgICAgICAgb3Mud3JpdGUoY29va2llLmdldEJ5dGVzKCkpOwogICAgICAgICAgICAgb3Mud3JpdGUoIlxyXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICAgICAgaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgICAgICBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKIApAQCAtMTg0LDcgKzE4NCw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oc2VuZENvb2tpZSk7CiAgICAgICAgICAgICBvcy53cml0ZShzZW5kQ29va2llLmdldEJ5dGVzKCkpOwogICAgICAgICAgICAgb3Mud3JpdGUoIlxyXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICAgICAgaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgICAgICBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZyYWdtZW50V2l0aExvZ2luQ29uZmlnT3ZlcnJpZGVkL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnRXaXRoTG9naW5Db25maWdPdmVycmlkZWQvYnVpbGQucHJvcGVydGllcwppbmRleCBkYTI1MGFjLi41ZjA2NmQ1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnRXaXRoTG9naW5Db25maWdPdmVycmlkZWQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnRXaXRoTG9naW5Db25maWdPdmVycmlkZWQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC13ZWItZnJhZ21lbnQtd2l0aC1sb2dpbi1jb25maWctb3ZlcnJpZGVkIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnRXaXRoTG9naW5Db25maWdPdmVycmlkZWQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZyYWdtZW50V2l0aExvZ2luQ29uZmlnT3ZlcnJpZGVkL2J1aWxkLnhtbAppbmRleCAzMzc0MTEyLi41ZDZkZmRiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnRXaXRoTG9naW5Db25maWdPdmVycmlkZWQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudFdpdGhMb2dpbkNvbmZpZ092ZXJyaWRlZC9idWlsZC54bWwKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgPC9kZWxldGU+CiAgICAgICAgIDxkZWxldGUgZGlyPSJsaWIiLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC03MywyMyArNzMsMjMgQEAKICAgICAgICAgICAgIGV4Y2x1ZGVzPSIqKi8qLmpzcCIvPgogICAgICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYiLz4KIAotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC0xMDMsMTAgKzEwMywxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RvcmUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtdXNlci1jb21tb24iPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZyYWdtZW50V2l0aExvZ2luQ29uZmlnT3ZlcnJpZGVkL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJGcmFnbWVudFdpdGhMb2dpbkNvbmZpZ092ZXJyaWRlZC9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggZmU3NWNiNi4uNTJjY2ViMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkZyYWdtZW50V2l0aExvZ2luQ29uZmlnT3ZlcnJpZGVkL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViRnJhZ21lbnRXaXRoTG9naW5Db25maWdPdmVycmlkZWQvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yMywxMiArMjMsMTIgQEAKIAogICA8c2VjdXJpdHktY29uc3RyYWludD4KICAgICA8d2ViLXJlc291cmNlLWNvbGxlY3Rpb24+Ci0JPHdlYi1yZXNvdXJjZS1uYW1lPlByb3RlY3RlZCBBcmVhPC93ZWItcmVzb3VyY2UtbmFtZT4KLQk8dXJsLXBhdHRlcm4+Lyo8L3VybC1wYXR0ZXJuPgotCTxodHRwLW1ldGhvZD5ERUxFVEU8L2h0dHAtbWV0aG9kPgotCTxodHRwLW1ldGhvZD5HRVQ8L2h0dHAtbWV0aG9kPgotCTxodHRwLW1ldGhvZD5QT1NUPC9odHRwLW1ldGhvZD4KLQk8aHR0cC1tZXRob2Q+UFVUPC9odHRwLW1ldGhvZD4KKyAgICA8d2ViLXJlc291cmNlLW5hbWU+UHJvdGVjdGVkIEFyZWE8L3dlYi1yZXNvdXJjZS1uYW1lPgorICAgIDx1cmwtcGF0dGVybj4vKjwvdXJsLXBhdHRlcm4+CisgICAgPGh0dHAtbWV0aG9kPkRFTEVURTwvaHR0cC1tZXRob2Q+CisgICAgPGh0dHAtbWV0aG9kPkdFVDwvaHR0cC1tZXRob2Q+CisgICAgPGh0dHAtbWV0aG9kPlBPU1Q8L2h0dHAtbWV0aG9kPgorICAgIDxodHRwLW1ldGhvZD5QVVQ8L2h0dHAtbWV0aG9kPgogICAgIDwvd2ViLXJlc291cmNlLWNvbGxlY3Rpb24+CiAKICAgICA8YXV0aC1jb25zdHJhaW50PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkxpc3RlbmVyQW5ub3RhdGlvbi9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViTGlzdGVuZXJBbm5vdGF0aW9uL1dlYlRlc3QuamF2YQppbmRleCBmYzRkM2RmLi40YTU3YTM1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViTGlzdGVuZXJBbm5vdGF0aW9uL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViTGlzdGVuZXJBbm5vdGF0aW9uL1dlYlRlc3QuamF2YQpAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBAV2ViQ29udGV4dExpc3RlbmVyIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDYsNyArNDYsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZCIpOwpAQCAtNTYsNyArNTYsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgICsgIi9teXRlc3QiOwogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKQpAQCAtOTMsMTAgKzkzLDEwIEBACiAgICAgICAgICAgICBpZiAoRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViTGlzdGVuZXJBbm5vdGF0aW9uL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViTGlzdGVuZXJBbm5vdGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYTI5YzVjYi4uZjYxMWRhMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkxpc3RlbmVyQW5ub3RhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJMaXN0ZW5lckFubm90YXRpb24vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC13ZWItbGlzdGVuZXItYW5ub3RhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYkxpc3RlbmVyQW5ub3RhdGlvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViTGlzdGVuZXJBbm5vdGF0aW9uL2J1aWxkLnhtbAppbmRleCAzMmQzNmFmLi41NWEyYTFiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViTGlzdGVuZXJBbm5vdGF0aW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViTGlzdGVuZXJBbm5vdGF0aW9uL2J1aWxkLnhtbApAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NywyMyArNDcsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NSwxMCArNzUsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViTGlzdGVuZXJBbm5vdGF0aW9uL3NlcnZsZXQvVGVzdFNlcnZsZXRDb250ZXh0TGlzdGVuZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJMaXN0ZW5lckFubm90YXRpb24vc2VydmxldC9UZXN0U2VydmxldENvbnRleHRMaXN0ZW5lci5qYXZhCmluZGV4IDc4MjA1Y2UuLmJlOWQwZGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJMaXN0ZW5lckFubm90YXRpb24vc2VydmxldC9UZXN0U2VydmxldENvbnRleHRMaXN0ZW5lci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJMaXN0ZW5lckFubm90YXRpb24vc2VydmxldC9UZXN0U2VydmxldENvbnRleHRMaXN0ZW5lci5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPj4+IGNvbnRleHRJbml0aWFsaXplZCIpOwogICAgICAgICBTZXJ2bGV0Q29udGV4dCBjb250ZXh0ID0gc2NlLmdldFNlcnZsZXRDb250ZXh0KCk7CiAgICAgICAgIGNvbnRleHQuc2V0QXR0cmlidXRlKCJteWF0dHIiLCAibXlzZXJ2bGV0Y29udGV4dGxpc3RlbmVyIik7Ci0gICAgfSAgIAorICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGNvbnRleHREZXN0cm95ZWQoU2VydmxldENvbnRleHRFdmVudCBzY2UpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI+Pj4gY29udGV4dERlc3Ryb3llZCIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYlNlcnZsZXRBbm5vdGF0aW9uL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJTZXJ2bGV0QW5ub3RhdGlvbi9XZWJUZXN0LmphdmEKaW5kZXggZTZkNTViNC4uN2NjNTk3MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYlNlcnZsZXRBbm5vdGF0aW9uL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViU2VydmxldEFubm90YXRpb24vV2ViVGVzdC5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEBXZWJTZXJ2bGV0Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDYsNyArNDYsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oVEVTVF9OQU1FICsgIiB0ZXN0IGZhaWxlZCIpOwpAQCAtNTYsNyArNTYsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgICsgIi9teXVybCI7CiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pCkBAIC05MywxMCArOTMsMTAgQEAKICAgICAgICAgICAgIGlmIChFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJTZXJ2bGV0QW5ub3RhdGlvbi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYlNlcnZsZXRBbm5vdGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggM2RhZWViNS4uMWU3MGMzNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYlNlcnZsZXRBbm5vdGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYlNlcnZsZXRBbm5vdGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjAtc2VydmxldC0zLjAtd2ViLXNlcnZsZXQtYW5ub3RhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYlNlcnZsZXRBbm5vdGF0aW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC93ZWJTZXJ2bGV0QW5ub3RhdGlvbi9idWlsZC54bWwKaW5kZXggMzJkMzZhZi4uNTVhMmExYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3dlYlNlcnZsZXRBbm5vdGF0aW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAvd2ViU2VydmxldEFubm90YXRpb24vYnVpbGQueG1sCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ3LDIzICs0NywyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc1LDEwICs3NSwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZUFubm90YXRpb24vV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlQW5ub3RhdGlvbi9XZWJUZXN0LmphdmEKaW5kZXggZWE1OTJmYy4uODE5NThhNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlQW5ub3RhdGlvbi9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlQW5ub3RhdGlvbi9XZWJUZXN0LmphdmEKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgeG1sIG92ZXJyaWRlIGFubm90YXRpb24iKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC00Niw3ICs0Niw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGJvb2xlYW4gb2sgPSBpbnZva2UoIi9teXRlc3QyIiwgMjAwLCBFWFBFQ1RFRF9SRVNQT05TRSk7CiAgICAgICAgICAgICBvayA9IG9rICYmIGludm9rZSgiL215dGVzdCIsIDQwNCwgbnVsbCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsICgob2spPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpKTsKQEAgLTU5LDcgKzU5LDcgQEAKIAogICAgIHByaXZhdGUgYm9vbGVhbiBpbnZva2UoU3RyaW5nIHVybFBhdHRlcm4sCiAgICAgICAgICAgICBpbnQgZXhwZWN0ZWRDb2RlLCBTdHJpbmcgZXhwZWN0ZWRSZXNwb25zZSkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICArIHVybFBhdHRlcm47CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWNjZXNzaW5nICIgKyB1cmwpOwpAQCAtMTAyLDEwICsxMDIsMTAgQEAKICAgICAgICAgICAgIGlmIChleHBlY3RlZFJlc3BvbnNlLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkUmVzcG9uc2UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZUFubm90YXRpb24vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZUFubm90YXRpb24vYnVpbGQucHJvcGVydGllcwppbmRleCBiODY4NGJhLi45ZjBhNTRkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVBbm5vdGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlQW5ub3RhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXhtbC1vdmVycmlkZS1hbm5vdGF0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVBbm5vdGF0aW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZUFubm90YXRpb24vYnVpbGQueG1sCmluZGV4IDMyZDM2YWYuLjU1YTJhMWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZUFubm90YXRpb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZUFubm90YXRpb24vYnVpbGQueG1sCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ3LDIzICs0NywyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc1LDEwICs3NSwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZUFubm90YXRpb24vc2VydmxldC9UZXN0RmlsdGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVBbm5vdGF0aW9uL3NlcnZsZXQvVGVzdEZpbHRlci5qYXZhCmluZGV4IGNjYjViZTAuLmZhOTRkNWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZUFubm90YXRpb24vc2VydmxldC9UZXN0RmlsdGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlQW5ub3RhdGlvbi9zZXJ2bGV0L1Rlc3RGaWx0ZXIuamF2YQpAQCAtMzIsNyArMzIsNyBAQAogICAgIHB1YmxpYyB2b2lkIGluaXQoRmlsdGVyQ29uZmlnIGZpbHRlckNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj4+PiBmaWx0ZXIuaW5pdCIpOwogICAgICAgICBtZXNnID0gZmlsdGVyQ29uZmlnLmdldEluaXRQYXJhbWV0ZXIoIm1lc2ciKTsKLSAgICB9ICAgCisgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9GaWx0ZXIoU2VydmxldFJlcXVlc3QgcmVxLCBTZXJ2bGV0UmVzcG9uc2UgcmVzLAogICAgICAgICAgICAgRmlsdGVyQ2hhaW4gY2hhaW4pIHRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbiB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVBbm5vdGF0aW9uL3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZUFubm90YXRpb24vc2VydmxldC9UZXN0U2VydmxldC5qYXZhCmluZGV4IDQ2YjBhMjguLjMzYjZhZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZUFubm90YXRpb24vc2VydmxldC9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZUFubm90YXRpb24vc2VydmxldC9UZXN0U2VydmxldC5qYXZhCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IChTdHJpbmcpZW4ubmV4dEVsZW1lbnQoKTsKICAgICAgICAgICAgIFN0cmluZyB2YWx1ZSA9IGdldEluaXRQYXJhbWV0ZXIobmFtZSk7CiAgICAgICAgICAgICBtc2cgKz0gbmFtZSArICI9IiArIHZhbHVlICsgIiwgIjsKLSAgICAgICAgfSAKKyAgICAgICAgfQogICAgICAgICB3cml0ZXIud3JpdGUoIiwgaW5pdFBhcmFtczogIiArIG1zZyArICJcbiIpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZUFubm90YXRpb25XaXRoV2ViRnJhZ21lbnQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlQW5ub3RhdGlvbldpdGhXZWJGcmFnbWVudC9XZWJUZXN0LmphdmEKaW5kZXggNjllYTVmZC4uZDRiNDU5MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlQW5ub3RhdGlvbldpdGhXZWJGcmFnbWVudC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlQW5ub3RhdGlvbldpdGhXZWJGcmFnbWVudC9XZWJUZXN0LmphdmEKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgSXNzdWUgOTgxNiIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgYm9vbGVhbiBvayA9IGludm9rZSgiL215dGVzdDIiLCAyMDAsIEVYUEVDVEVEX1JFU1BPTlNFKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgKChvayk/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCkpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTU4LDcgKzU4LDcgQEAKIAogICAgIHByaXZhdGUgYm9vbGVhbiBpbnZva2UoU3RyaW5nIHVybFBhdHRlcm4sCiAgICAgICAgICAgICBpbnQgZXhwZWN0ZWRDb2RlLCBTdHJpbmcgZXhwZWN0ZWRSZXNwb25zZSkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICArIHVybFBhdHRlcm47CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWNjZXNzaW5nICIgKyB1cmwpOwpAQCAtMTAxLDEwICsxMDEsMTAgQEAKICAgICAgICAgICAgIGlmIChleHBlY3RlZFJlc3BvbnNlLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkUmVzcG9uc2UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZUFubm90YXRpb25XaXRoV2ViRnJhZ21lbnQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZUFubm90YXRpb25XaXRoV2ViRnJhZ21lbnQvYnVpbGQucHJvcGVydGllcwppbmRleCAzMjcxZDI1Li44YzU1ODBkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVBbm5vdGF0aW9uV2l0aFdlYkZyYWdtZW50L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlQW5ub3RhdGlvbldpdGhXZWJGcmFnbWVudC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLXhtbC1vdmVycmlkZS1hbm5vdGF0aW9uLXdpdGgtd2ViLWZyYWdtZW50Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVBbm5vdGF0aW9uV2l0aFdlYkZyYWdtZW50L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZUFubm90YXRpb25XaXRoV2ViRnJhZ21lbnQvYnVpbGQueG1sCmluZGV4IDU5M2VhZGUuLmIzZDViNDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZUFubm90YXRpb25XaXRoV2ViRnJhZ21lbnQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZUFubm90YXRpb25XaXRoV2ViRnJhZ21lbnQvYnVpbGQueG1sCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgIDwvZGVsZXRlPgogICAgICAgICA8ZGVsZXRlIGRpcj0ibGliIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNTgsMjMgKzU4LDIzIEBACiAgICAgICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORiIvPgogICAgICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2Z0ZXN0Ii8+CiAKLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi9UZXN0U2VydmxldC5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi9UZXN0U2VydmxldC5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC04NiwxMCArODYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVBbm5vdGF0aW9uV2l0aFdlYkZyYWdtZW50L3NlcnZsZXQvVGVzdEZpbHRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlQW5ub3RhdGlvbldpdGhXZWJGcmFnbWVudC9zZXJ2bGV0L1Rlc3RGaWx0ZXIuamF2YQppbmRleCA5Mjk5ZmE3Li43ODY3NGRjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVBbm5vdGF0aW9uV2l0aFdlYkZyYWdtZW50L3NlcnZsZXQvVGVzdEZpbHRlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZUFubm90YXRpb25XaXRoV2ViRnJhZ21lbnQvc2VydmxldC9UZXN0RmlsdGVyLmphdmEKQEAgLTMyLDcgKzMyLDcgQEAKICAgICBwdWJsaWMgdm9pZCBpbml0KEZpbHRlckNvbmZpZyBmaWx0ZXJDb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI+Pj4gZmlsdGVyLmluaXQiKTsKICAgICAgICAgbWVzZyA9IGZpbHRlckNvbmZpZy5nZXRJbml0UGFyYW1ldGVyKCJtZXNnIik7Ci0gICAgfSAgIAorICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvRmlsdGVyKFNlcnZsZXRSZXF1ZXN0IHJlcSwgU2VydmxldFJlc3BvbnNlIHJlcywKICAgICAgICAgICAgIEZpbHRlckNoYWluIGNoYWluKSB0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlQW5ub3RhdGlvbldpdGhXZWJGcmFnbWVudC9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVBbm5vdGF0aW9uV2l0aFdlYkZyYWdtZW50L3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQppbmRleCA0NmIwYTI4Li4zM2I2YWU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVBbm5vdGF0aW9uV2l0aFdlYkZyYWdtZW50L3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVBbm5vdGF0aW9uV2l0aFdlYkZyYWdtZW50L3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQpAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSAoU3RyaW5nKWVuLm5leHRFbGVtZW50KCk7CiAgICAgICAgICAgICBTdHJpbmcgdmFsdWUgPSBnZXRJbml0UGFyYW1ldGVyKG5hbWUpOwogICAgICAgICAgICAgbXNnICs9IG5hbWUgKyAiPSIgKyB2YWx1ZSArICIsICI7Ci0gICAgICAgIH0gCisgICAgICAgIH0KICAgICAgICAgd3JpdGVyLndyaXRlKCIsIGluaXRQYXJhbXM6ICIgKyBtc2cgKyAiXG4iKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVBbm5vdGF0aW9uV2l0aFdlYkZyYWdtZW50L3NlcnZsZXQvV0ZUZXN0RmlsdGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVBbm5vdGF0aW9uV2l0aFdlYkZyYWdtZW50L3NlcnZsZXQvV0ZUZXN0RmlsdGVyLmphdmEKaW5kZXggYTVkNjgzMy4uYzAyMjI2OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlQW5ub3RhdGlvbldpdGhXZWJGcmFnbWVudC9zZXJ2bGV0L1dGVGVzdEZpbHRlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZUFubm90YXRpb25XaXRoV2ViRnJhZ21lbnQvc2VydmxldC9XRlRlc3RGaWx0ZXIuamF2YQpAQCAtMzEsNyArMzEsNyBAQAogcHVibGljIGNsYXNzIFdGVGVzdEZpbHRlciBpbXBsZW1lbnRzIEZpbHRlciB7CiAgICAgcHVibGljIHZvaWQgaW5pdChGaWx0ZXJDb25maWcgZmlsdGVyQ29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPj4+IGZpbHRlci5pbml0Iik7Ci0gICAgfSAgIAorICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvRmlsdGVyKFNlcnZsZXRSZXF1ZXN0IHJlcSwgU2VydmxldFJlc3BvbnNlIHJlcywKICAgICAgICAgICAgIEZpbHRlckNoYWluIGNoYWluKSB0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlQXV0aEFubm90YXRpb25zL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZUF1dGhBbm5vdGF0aW9ucy9XZWJUZXN0LmphdmEKaW5kZXggNTRlZDExNC4uZGI0ZWMyYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlQXV0aEFubm90YXRpb25zL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVBdXRoQW5ub3RhdGlvbnMvV2ViVGVzdC5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgIHBvcnQgPSBJbnRlZ2VyLnBhcnNlSW50KGFyZ3NbMV0pOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCB0aGF0IHdlYi54bWwgb3ZlcnJpZGVzIEBTZXJ2bGV0U2VjdXJpdHkiKTsKQEAgLTUxLDcgKzUxLDcgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIHJ1bigpIHRocm93cyBFeGNlcHRpb24gewpAQCAtMTAxLDcgKzEwMSw3IEBACiAgICAgICAgICAgICAgICAgICAgIG9rID0gb2sgJiYgZXhwZWN0ZWQuZXF1YWxzKGxpbmUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBleCl7Ci0gICAgICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7ICAgCisgICAgICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiVGVzdCBVTlBSRURJQ1RFRC1GQUlMVVJFIik7CiAgICAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgICAgIHRyeSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVBdXRoQW5ub3RhdGlvbnMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZUF1dGhBbm5vdGF0aW9ucy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDNlZDc5ZDQuLmQ1Mzc0ZDcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZUF1dGhBbm5vdGF0aW9ucy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZUF1dGhBbm5vdGF0aW9ucy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4wLXhtbC1vdmVycmlkZS1hdXRoLWFubm90YXRpb25zIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVBdXRoQW5ub3RhdGlvbnMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlQXV0aEFubm90YXRpb25zL2J1aWxkLnhtbAppbmRleCAzMWFmYmRhLi5iNzdhM2NmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVBdXRoQW5ub3RhdGlvbnMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZUF1dGhBbm5vdGF0aW9ucy9idWlsZC54bWwKQEAgLTM1LDcgKzM1LDcgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgICA8ZGVsZXRlIGZpbGU9IldlYlRlc3QuY2xhc3MiLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC01NywxMCArNTcsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTY4LDE0ICs2OCwxNCBAQAogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2FwcHNlcnYtcnQuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC05MCw3ICs5MCw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0b3JlIiBkZXBlbmRzPSJzZXR1cCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLXVzZXItY29tbW9uIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZUF1dGhBbm5vdGF0aW9ucy9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVBdXRoQW5ub3RhdGlvbnMvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDQyMzAxNmEuLjRlNzIxNzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZUF1dGhBbm5vdGF0aW9ucy9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlQXV0aEFubm90YXRpb25zL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtNDQsNyArNDQsNyBAQAogICAgIDxhdXRoLWNvbnN0cmFpbnQvPgogICA8L3NlY3VyaXR5LWNvbnN0cmFpbnQ+CiAgIDxzZWN1cml0eS1yb2xlPgotICAgIDxyb2xlLW5hbWU+amF2YWVlPC9yb2xlLW5hbWU+IAorICAgIDxyb2xlLW5hbWU+amF2YWVlPC9yb2xlLW5hbWU+CiAgIDwvc2VjdXJpdHktcm9sZT4KICAgPGxvZ2luLWNvbmZpZz4KICAgICA8YXV0aC1tZXRob2Q+QkFTSUM8L2F1dGgtbWV0aG9kPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlVXJsUGF0dGVybldpdGhXZWJGcmFnbWVudC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVVcmxQYXR0ZXJuV2l0aFdlYkZyYWdtZW50L1dlYlRlc3QuamF2YQppbmRleCA4NDcxY2ZmLi45YWYyMjJiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVVcmxQYXR0ZXJuV2l0aFdlYkZyYWdtZW50L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVVcmxQYXR0ZXJuV2l0aFdlYkZyYWdtZW50L1dlYlRlc3QuamF2YQpAQCAtMzgsNyArMzgsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBJc3N1ZSAxMTc1MCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgYm9vbGVhbiBvayA9IGludm9rZSgiL215dGVzdCIsIDQwNCwgbnVsbCk7CiAgICAgICAgICAgICBvayA9IGludm9rZSgiL215dGVzdDIiLCAyMDAsIEVYUEVDVEVEX1JFU1BPTlNFKSAmJiBvazsKICAgICAgICAgICAgIG9rID0gaW52b2tlKCIvbXl0ZXN0MyIsIDIwMCwgRVhQRUNURURfUkVTUE9OU0VfMikgJiYgb2s7CkBAIC02MSw3ICs2MSw3IEBACiAKICAgICBwcml2YXRlIGJvb2xlYW4gaW52b2tlKFN0cmluZyB1cmxQYXR0ZXJuLAogICAgICAgICAgICAgaW50IGV4cGVjdGVkQ29kZSwgU3RyaW5nIGV4cGVjdGVkUmVzcG9uc2UpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgICAgICAgICAgKyB1cmxQYXR0ZXJuOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFjY2Vzc2luZyAiICsgdXJsKTsKQEAgLTEwNCwxMCArMTA0LDEwIEBACiAgICAgICAgICAgICBpZiAoZXhwZWN0ZWRSZXNwb25zZS5lcXVhbHMobGluZSkpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZFJlc3BvbnNlICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVVcmxQYXR0ZXJuV2l0aFdlYkZyYWdtZW50L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVVcmxQYXR0ZXJuV2l0aFdlYkZyYWdtZW50L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMzQ0ZWJmMC4uZjMxODE5ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlVXJsUGF0dGVybldpdGhXZWJGcmFnbWVudC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZVVybFBhdHRlcm5XaXRoV2ViRnJhZ21lbnQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMC14bWwtb3ZlcnJpZGUtdXJsLXBhdHRlcm4td2l0aC13ZWItZnJhZ21lbnQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZVVybFBhdHRlcm5XaXRoV2ViRnJhZ21lbnQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlVXJsUGF0dGVybldpdGhXZWJGcmFnbWVudC9idWlsZC54bWwKaW5kZXggNTkzZWFkZS4uYjNkNWI0NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlVXJsUGF0dGVybldpdGhXZWJGcmFnbWVudC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlVXJsUGF0dGVybldpdGhXZWJGcmFnbWVudC9idWlsZC54bWwKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgPC9kZWxldGU+CiAgICAgICAgIDxkZWxldGUgZGlyPSJsaWIiLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC01OCwyMyArNTgsMjMgQEAKICAgICAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIi8+CiAgICAgICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZnRlc3QiLz4KIAotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqL1Rlc3RTZXJ2bGV0LmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqL1Rlc3RTZXJ2bGV0LmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTg2LDEwICs4NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZVVybFBhdHRlcm5XaXRoV2ViRnJhZ21lbnQvc2VydmxldC9UZXN0RmlsdGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVVcmxQYXR0ZXJuV2l0aFdlYkZyYWdtZW50L3NlcnZsZXQvVGVzdEZpbHRlci5qYXZhCmluZGV4IGRhODZkYjcuLjRlYzY2MGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZVVybFBhdHRlcm5XaXRoV2ViRnJhZ21lbnQvc2VydmxldC9UZXN0RmlsdGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlVXJsUGF0dGVybldpdGhXZWJGcmFnbWVudC9zZXJ2bGV0L1Rlc3RGaWx0ZXIuamF2YQpAQCAtMzAsNyArMzAsNyBAQAogcHVibGljIGNsYXNzIFRlc3RGaWx0ZXIgaW1wbGVtZW50cyBGaWx0ZXIgewogICAgIHB1YmxpYyB2b2lkIGluaXQoRmlsdGVyQ29uZmlnIGZpbHRlckNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj4+PiBmaWx0ZXIuaW5pdCIpOwotICAgIH0gICAKKyAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb0ZpbHRlcihTZXJ2bGV0UmVxdWVzdCByZXEsIFNlcnZsZXRSZXNwb25zZSByZXMsCiAgICAgICAgICAgICBGaWx0ZXJDaGFpbiBjaGFpbikgdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZVVybFBhdHRlcm5XaXRoV2ViRnJhZ21lbnQvc2VydmxldC9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlVXJsUGF0dGVybldpdGhXZWJGcmFnbWVudC9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggNDZiMGEyOC4uMzNiNmFlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlVXJsUGF0dGVybldpdGhXZWJGcmFnbWVudC9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlVXJsUGF0dGVybldpdGhXZWJGcmFnbWVudC9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gKFN0cmluZyllbi5uZXh0RWxlbWVudCgpOwogICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gZ2V0SW5pdFBhcmFtZXRlcihuYW1lKTsKICAgICAgICAgICAgIG1zZyArPSBuYW1lICsgIj0iICsgdmFsdWUgKyAiLCAiOwotICAgICAgICB9IAorICAgICAgICB9CiAgICAgICAgIHdyaXRlci53cml0ZSgiLCBpbml0UGFyYW1zOiAiICsgbXNnICsgIlxuIik7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlVXJsUGF0dGVybldpdGhXZWJGcmFnbWVudC9zZXJ2bGV0L1Rlc3RTZXJ2bGV0Mi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlVXJsUGF0dGVybldpdGhXZWJGcmFnbWVudC9zZXJ2bGV0L1Rlc3RTZXJ2bGV0Mi5qYXZhCmluZGV4IGU0MGNiMGEuLmY0MGMzYzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZVVybFBhdHRlcm5XaXRoV2ViRnJhZ21lbnQvc2VydmxldC9UZXN0U2VydmxldDIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVVcmxQYXR0ZXJuV2l0aFdlYkZyYWdtZW50L3NlcnZsZXQvVGVzdFNlcnZsZXQyLmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gKFN0cmluZyllbi5uZXh0RWxlbWVudCgpOwogICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gZ2V0SW5pdFBhcmFtZXRlcihuYW1lKTsKICAgICAgICAgICAgIG1zZyArPSBuYW1lICsgIj0iICsgdmFsdWUgKyAiLCAiOwotICAgICAgICB9IAorICAgICAgICB9CiAgICAgICAgIHdyaXRlci53cml0ZSgiLCBpbml0UGFyYW1zOiAiICsgbXNnICsgIlxuIik7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlVXJsUGF0dGVybldpdGhXZWJGcmFnbWVudC9zZXJ2bGV0L1dGVGVzdEZpbHRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4wL3htbE92ZXJyaWRlVXJsUGF0dGVybldpdGhXZWJGcmFnbWVudC9zZXJ2bGV0L1dGVGVzdEZpbHRlci5qYXZhCmluZGV4IGI1ZmM2MDguLmY2MTQxNWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMC94bWxPdmVycmlkZVVybFBhdHRlcm5XaXRoV2ViRnJhZ21lbnQvc2VydmxldC9XRlRlc3RGaWx0ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjAveG1sT3ZlcnJpZGVVcmxQYXR0ZXJuV2l0aFdlYkZyYWdtZW50L3NlcnZsZXQvV0ZUZXN0RmlsdGVyLmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKIHB1YmxpYyBjbGFzcyBXRlRlc3RGaWx0ZXIgaW1wbGVtZW50cyBGaWx0ZXIgewogICAgIHB1YmxpYyB2b2lkIGluaXQoRmlsdGVyQ29uZmlnIGZpbHRlckNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj4+PiB3ZkZpbHRlci5pbml0Iik7Ci0gICAgfSAgIAorICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvRmlsdGVyKFNlcnZsZXRSZXF1ZXN0IHJlcSwgU2VydmxldFJlc3BvbnNlIHJlcywKICAgICAgICAgICAgIEZpbHRlckNoYWluIGNoYWluKSB0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL2FueUF1dGhlbnRpY2F0ZWRVc2VyL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9hbnlBdXRoZW50aWNhdGVkVXNlci9XZWJUZXN0LmphdmEKaW5kZXggNDgyMTkzOS4uY2QzN2U4NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL2FueUF1dGhlbnRpY2F0ZWRVc2VyL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvYW55QXV0aGVudGljYXRlZFVzZXIvV2ViVGVzdC5qYXZhCkBAIC0zOCw3ICszOCw3IEBACiAgICAgICAgIHBvcnQgPSBJbnRlZ2VyLnBhcnNlSW50KGFyZ3NbMV0pOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgZGVueS11bmNvdmVyZWQtaHR0cC1tZXRob2RzIik7CkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotICAgIAlzdGF0LnByaW50U3VtbWFyeSgpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHByaXZhdGUgYm9vbGVhbiBydW4oYm9vbGVhbiBhdXRoLApAQCAtODksNyArODksNyBAQAogICAgICAgICAgICAgICAgIG9rID0gb2sgJiYgRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZXgpewotICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7ICAgCisgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlRlc3QgVU5QUkVESUNURUQtRkFJTFVSRSIpOwogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgdHJ5IHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9hbnlBdXRoZW50aWNhdGVkVXNlci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL2FueUF1dGhlbnRpY2F0ZWRVc2VyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOTY3ZDY3Ny4uYTdlNTQwNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL2FueUF1dGhlbnRpY2F0ZWRVc2VyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL2FueUF1dGhlbnRpY2F0ZWRVc2VyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjEtYW55LWF1dGhlbnRpY2F0ZWQtdXNlciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL2FueUF1dGhlbnRpY2F0ZWRVc2VyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9hbnlBdXRoZW50aWNhdGVkVXNlci9idWlsZC54bWwKaW5kZXggZjliM2I0NS4uMWQ4MWIxZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL2FueUF1dGhlbnRpY2F0ZWRVc2VyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvYW55QXV0aGVudGljYXRlZFVzZXIvYnVpbGQueG1sCkBAIC0zNSw3ICszNSw3IEBACiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgICAgPGRlbGV0ZSBmaWxlPSJXZWJUZXN0LmNsYXNzIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNTEsMTAgKzUxLDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCkBAIC02MiwxNCArNjIsMTQgQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9hcHBzZXJ2LXJ0LmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvY2hhbmdlU2Vzc2lvbklkL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9jaGFuZ2VTZXNzaW9uSWQvV2ViVGVzdC5qYXZhCmluZGV4IDg3OWY5YTcuLjQxYWE1NzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9jaGFuZ2VTZXNzaW9uSWQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9jaGFuZ2VTZXNzaW9uSWQvV2ViVGVzdC5qYXZhCkBAIC0yNCwxMSArMjQsMTEgQEAKICAqIFRlc3QgY2hhbmdlIHNlc3Npb24gaWQgaW4gU2VydmxldCAzLjEKICAqLwogcHVibGljIGNsYXNzIFdlYlRlc3QgewotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfTkFNRSA9ICJzZXJ2bGV0LTMuMS1jaGFuZ2Utc2Vzc2lvbi1pZCI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEpTRVNTSU9OSUQgPSAiSlNFU1NJT05JRCI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVYUEVDVEVEX1JFU1BPTlNFID0gInR3byI7Ci0gICAgCisKICAgICBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQ9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIApAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICBTdHJpbmcgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogCiAgICAgICAgIGludCBwb3J0ID0gbmV3IEludGVnZXIocG9ydFMpLmludFZhbHVlKCk7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBMaXN0PFN0cmluZz4gcmVzdWx0ID0gZ29HZXQoaG9zdCwgcG9ydCwgY29udGV4dFJvb3QgKyAiL3Rlc3Q/cnVuPWZpcnN0IiwKICAgICAgICAgICAgICAgICAgICBudWxsKTsKQEAgLTQ5LDEyICs0OSwxMiBAQAogICAgICAgICAgICAgaWYgKHJlc3VsdC5zaXplKCkgPiAwKSB7CiAgICAgICAgICAgICAgICAgcmVzdWx0MiA9IGdvR2V0KGhvc3QsIHBvcnQsIGNvbnRleHRSb290ICsgIi90ZXN0P3J1bj1zZWNvbmQiLAogICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmdldCgwKSk7Ci0gICAgICAgICAgICB9IAotICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsCiAgICAgICAgICAgICAgICAgICAgIChyZXN1bHQuc2l6ZSgpID4gMSAmJiByZXN1bHQyLnNpemUoKSA+IDEKICAgICAgICAgICAgICAgICAgICAgJiYgIXJlc3VsdC5nZXQoMCkuZXF1YWxzKHJlc3VsdDIuZ2V0KDApKQotICAgICAgICAgICAgICAgICAgICAmJiBFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMocmVzdWx0Mi5nZXQoMSkpKSA/IAorICAgICAgICAgICAgICAgICAgICAmJiBFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMocmVzdWx0Mi5nZXQoMSkpKSA/CiAgICAgICAgICAgICAgICAgICAgIHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7CiAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odC5nZXRNZXNzYWdlKCkpOwpAQCAtOTksNyArOTksNyBAQAogICAgICAgICAgICAgICAgIGxpbmVOdW0rKzsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGV4KXsKLSAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOyAgIAorICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJUZXN0IFVOUFJFRElDVEVELUZBSUxVUkUiKTsKICAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICB0cnkgewpAQCAtMTM4LDUgKzEzOCw1IEBACiAKICAgICAgICAgcmV0dXJuIHJldDsKICAgICB9Ci0gIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvY2hhbmdlU2Vzc2lvbklkL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvY2hhbmdlU2Vzc2lvbklkL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNWU3ZTM2MC4uYTkxOTIzNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL2NoYW5nZVNlc3Npb25JZC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9jaGFuZ2VTZXNzaW9uSWQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMS1jaGFuZ2Utc2Vzc2lvbi1pZCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL2NoYW5nZVNlc3Npb25JZC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvY2hhbmdlU2Vzc2lvbklkL2J1aWxkLnhtbAppbmRleCBiMjUzNDk1Li42ZTkxMTQ2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvY2hhbmdlU2Vzc2lvbklkL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvY2hhbmdlU2Vzc2lvbklkL2J1aWxkLnhtbApAQCAtNTQsNyArNTQsNyBAQAogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CkBAIC03NSw3ICs3NSw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvZGVueVVuY292ZXJlZEh0dHBNZXRob2RzL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9kZW55VW5jb3ZlcmVkSHR0cE1ldGhvZHMvV2ViVGVzdC5qYXZhCmluZGV4IDVkYzQ5YTUuLjFiZThlNWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9kZW55VW5jb3ZlcmVkSHR0cE1ldGhvZHMvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9kZW55VW5jb3ZlcmVkSHR0cE1ldGhvZHMvV2ViVGVzdC5qYXZhCkBAIC0zOCw3ICszOCw3IEBACiAgICAgICAgIHBvcnQgPSBJbnRlZ2VyLnBhcnNlSW50KGFyZ3NbMV0pOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgZGVueS11bmNvdmVyZWQtaHR0cC1tZXRob2RzIik7CkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotICAgIAlzdGF0LnByaW50U3VtbWFyeSgpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHByaXZhdGUgYm9vbGVhbiBydW4oU3RyaW5nIG1ldGhvZCwgYm9vbGVhbiBhdXRoLApAQCAtODgsNyArODgsNyBAQAogICAgICAgICAgICAgICAgIG9rID0gb2sgJiYgRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZXgpewotICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7ICAgCisgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlRlc3QgVU5QUkVESUNURUQtRkFJTFVSRSIpOwogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgdHJ5IHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9kZW55VW5jb3ZlcmVkSHR0cE1ldGhvZHMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9kZW55VW5jb3ZlcmVkSHR0cE1ldGhvZHMvYnVpbGQucHJvcGVydGllcwppbmRleCBiMTE1YjNiLi4xYzcxNmYxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvZGVueVVuY292ZXJlZEh0dHBNZXRob2RzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL2RlbnlVbmNvdmVyZWRIdHRwTWV0aG9kcy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4xLWRlbnktdW5jb3ZlcmVkLWh0dHAtbWV0aG9kcyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL2RlbnlVbmNvdmVyZWRIdHRwTWV0aG9kcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvZGVueVVuY292ZXJlZEh0dHBNZXRob2RzL2J1aWxkLnhtbAppbmRleCBmOWIzYjQ1Li4xZDgxYjFlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvZGVueVVuY292ZXJlZEh0dHBNZXRob2RzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvZGVueVVuY292ZXJlZEh0dHBNZXRob2RzL2J1aWxkLnhtbApAQCAtMzUsNyArMzUsNyBAQAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICAgIDxkZWxldGUgZmlsZT0iV2ViVGVzdC5jbGFzcyIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTUxLDEwICs1MSwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgIDxqYXZhYwpAQCAtNjIsMTQgKzYyLDE0IEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvYXBwc2Vydi1ydC5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL25ldHdvcmtQYXRoUmVmZXJlbmNlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvbmV0d29ya1BhdGhSZWZlcmVuY2UvYnVpbGQucHJvcGVydGllcwppbmRleCA0ZTVkNDBiLi5hMmE3OWZlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvbmV0d29ya1BhdGhSZWZlcmVuY2UvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvbmV0d29ya1BhdGhSZWZlcmVuY2UvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMS1uZXR3b3JrLXBhdGgtcmVmZXJlbmNlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvbmV0d29ya1BhdGhSZWZlcmVuY2UvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL25ldHdvcmtQYXRoUmVmZXJlbmNlL2J1aWxkLnhtbAppbmRleCA1MzE2ZTZkLi5lOTNkMGQ5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvbmV0d29ya1BhdGhSZWZlcmVuY2UvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9uZXR3b3JrUGF0aFJlZmVyZW5jZS9idWlsZC54bWwKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CkBAIC01Miw3ICs1Miw3IEBACiAgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Vudi5BUFNfSE9NRX0vbGliL3dlYnRlc3QuamFyIi8+CiAgICAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhYz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CkBAIC03NCw3ICs3NCw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvbm9uQmxvY2tpbmdJbnB1dC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvbm9uQmxvY2tpbmdJbnB1dC9XZWJUZXN0LmphdmEKaW5kZXggNjUzZDVkOC4uMjA5MTE2NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL25vbkJsb2NraW5nSW5wdXQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9ub25CbG9ja2luZ0lucHV0L1dlYlRlc3QuamF2YQpAQCAtOTMsNyArOTMsNyBAQAogICAgICAgICAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgKChleHBlY3RlZCkgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL25vbkJsb2NraW5nSW5wdXQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9ub25CbG9ja2luZ0lucHV0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMWE0MWUyOS4uNDE3YTVhYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL25vbkJsb2NraW5nSW5wdXQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvbm9uQmxvY2tpbmdJbnB1dC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4xLW5vbi1ibG9ja2luZy1pbnB1dCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL25vbkJsb2NraW5nSW5wdXQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL25vbkJsb2NraW5nSW5wdXQvYnVpbGQueG1sCmluZGV4IDk5N2JlZGEuLjBjMDY0YzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9ub25CbG9ja2luZ0lucHV0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvbm9uQmxvY2tpbmdJbnB1dC9idWlsZC54bWwKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIi8+CiAgICAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhYz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CkBAIC03OCw3ICs3OCw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvbm9uQmxvY2tpbmdJbnB1dC9zZXJ2bGV0L3Rlc3QvVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9ub25CbG9ja2luZ0lucHV0L3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhCmluZGV4IGUzNjhkMGYuLjNiYzIwOTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9ub25CbG9ja2luZ0lucHV0L3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9ub25CbG9ja2luZ0lucHV0L3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhCkBAIC03Nyw3ICs3Nyw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tPiBvbkRhdGFBdmFpbGFibGUiKTsKICAgICAgICAgICAgIGludCBsZW4gPSAtMTsKICAgICAgICAgICAgIGJ5dGUgYltdID0gbmV3IGJ5dGVbMTAyNF07Ci0gICAgICAgICAgICB3aGlsZSAoaW5wdXQuaXNSZWFkeSgpIAorICAgICAgICAgICAgd2hpbGUgKGlucHV0LmlzUmVhZHkoKQogICAgICAgICAgICAgICAgICAgICAmJiAobGVuID0gaW5wdXQucmVhZChiKSkgIT0gLTEpIHsKICAgICAgICAgICAgICAgICBTdHJpbmcgZGF0YSA9IG5ldyBTdHJpbmcoYiwgMCwgbGVuKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tPiAiICsgZGF0YSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvbm9uQmxvY2tpbmdJbnB1dE91dHB1dC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvbm9uQmxvY2tpbmdJbnB1dE91dHB1dC9XZWJUZXN0LmphdmEKaW5kZXggZjM2YTdiYS4uOTFkNmY4ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL25vbkJsb2NraW5nSW5wdXRPdXRwdXQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9ub25CbG9ja2luZ0lucHV0T3V0cHV0L1dlYlRlc3QuamF2YQpAQCAtOTAsNyArOTAsNyBAQAogICAgICAgICAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgKChleHBlY3RlZCkgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL25vbkJsb2NraW5nSW5wdXRPdXRwdXQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9ub25CbG9ja2luZ0lucHV0T3V0cHV0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMWE0MWUyOS4uNDE3YTVhYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL25vbkJsb2NraW5nSW5wdXRPdXRwdXQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvbm9uQmxvY2tpbmdJbnB1dE91dHB1dC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4xLW5vbi1ibG9ja2luZy1pbnB1dCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL25vbkJsb2NraW5nSW5wdXRPdXRwdXQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL25vbkJsb2NraW5nSW5wdXRPdXRwdXQvYnVpbGQueG1sCmluZGV4IDk5N2JlZGEuLjBjMDY0YzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9ub25CbG9ja2luZ0lucHV0T3V0cHV0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvbm9uQmxvY2tpbmdJbnB1dE91dHB1dC9idWlsZC54bWwKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIi8+CiAgICAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhYz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CkBAIC03OCw3ICs3OCw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvbm9uQmxvY2tpbmdJbnB1dE91dHB1dC9zZXJ2bGV0L3Rlc3QvVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9ub25CbG9ja2luZ0lucHV0T3V0cHV0L3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhCmluZGV4IGI5MGJhMDMuLmI3NDcwOGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9ub25CbG9ja2luZ0lucHV0T3V0cHV0L3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9ub25CbG9ja2luZ0lucHV0T3V0cHV0L3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhCkBAIC04Myw3ICs4Myw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tPiBvbkRhdGFBdmFpbGFibGUiKTsKICAgICAgICAgICAgIGludCBsZW4gPSAtMTsKICAgICAgICAgICAgIGJ5dGUgYltdID0gbmV3IGJ5dGVbMTAyNF07Ci0gICAgICAgICAgICB3aGlsZSAoaW5wdXQuaXNSZWFkeSgpIAorICAgICAgICAgICAgd2hpbGUgKGlucHV0LmlzUmVhZHkoKQogICAgICAgICAgICAgICAgICAgICAmJiAobGVuID0gaW5wdXQucmVhZChiKSkgIT0gLTEpIHsKICAgICAgICAgICAgICAgICBTdHJpbmcgZGF0YSA9IG5ldyBTdHJpbmcoYiwgMCwgbGVuKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tPiAiICsgZGF0YSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvbm9uQmxvY2tpbmdJbnB1dFdpdGhBc3luY0Rpc3BhdGNoL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9ub25CbG9ja2luZ0lucHV0V2l0aEFzeW5jRGlzcGF0Y2gvV2ViVGVzdC5qYXZhCmluZGV4IDQyZDI1MjEuLmU1MjI5NTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9ub25CbG9ja2luZ0lucHV0V2l0aEFzeW5jRGlzcGF0Y2gvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9ub25CbG9ja2luZ0lucHV0V2l0aEFzeW5jRGlzcGF0Y2gvV2ViVGVzdC5qYXZhCkBAIC05MSw3ICs5MSw3IEBACiAgICAgICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCAoKGV4cGVjdGVkKSA/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCkpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvbm9uQmxvY2tpbmdJbnB1dFdpdGhBc3luY0Rpc3BhdGNoL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvbm9uQmxvY2tpbmdJbnB1dFdpdGhBc3luY0Rpc3BhdGNoL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOGI0MTMxNC4uMWRkZDQ4MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL25vbkJsb2NraW5nSW5wdXRXaXRoQXN5bmNEaXNwYXRjaC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9ub25CbG9ja2luZ0lucHV0V2l0aEFzeW5jRGlzcGF0Y2gvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMS1ub24tYmxvY2tpbmctaW5wdXQtd2l0aC1hc3luYy1kaXNwYXRjaCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL25vbkJsb2NraW5nSW5wdXRXaXRoQXN5bmNEaXNwYXRjaC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvbm9uQmxvY2tpbmdJbnB1dFdpdGhBc3luY0Rpc3BhdGNoL2J1aWxkLnhtbAppbmRleCA5OTdiZWRhLi4wYzA2NGMwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvbm9uQmxvY2tpbmdJbnB1dFdpdGhBc3luY0Rpc3BhdGNoL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvbm9uQmxvY2tpbmdJbnB1dFdpdGhBc3luY0Rpc3BhdGNoL2J1aWxkLnhtbApAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTU3LDcgKzU3LDcgQEAKICAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiLz4KICAgICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmFjPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KQEAgLTc4LDcgKzc4LDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9ub25CbG9ja2luZ0lucHV0V2l0aEFzeW5jRGlzcGF0Y2gvc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvbm9uQmxvY2tpbmdJbnB1dFdpdGhBc3luY0Rpc3BhdGNoL3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhCmluZGV4IDQ5NTM2NmUuLmE3ZDcwMjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9ub25CbG9ja2luZ0lucHV0V2l0aEFzeW5jRGlzcGF0Y2gvc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL25vbkJsb2NraW5nSW5wdXRXaXRoQXN5bmNEaXNwYXRjaC9zZXJ2bGV0L3Rlc3QvVGVzdFNlcnZsZXQuamF2YQpAQCAtNTcsNyArNTcsNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLT4gb25EYXRhQXZhaWxhYmxlIik7CiAgICAgICAgICAgICBpbnQgbGVuID0gLTE7CiAgICAgICAgICAgICBieXRlIGJbXSA9IG5ldyBieXRlWzEwMjRdOwotICAgICAgICAgICAgd2hpbGUgKGlucHV0LmlzUmVhZHkoKSAKKyAgICAgICAgICAgIHdoaWxlIChpbnB1dC5pc1JlYWR5KCkKICAgICAgICAgICAgICAgICAgICAgJiYgKGxlbiA9IGlucHV0LnJlYWQoYikpICE9IC0xKSB7CiAgICAgICAgICAgICAgICAgU3RyaW5nIGRhdGEgPSBuZXcgU3RyaW5nKGIsIDAsIGxlbik7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLT4gIiArIGRhdGEpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL25vbkJsb2NraW5nT3V0cHV0L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9ub25CbG9ja2luZ091dHB1dC9XZWJUZXN0LmphdmEKaW5kZXggOTY5MWQ1YS4uNmE0Y2VjNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL25vbkJsb2NraW5nT3V0cHV0L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvbm9uQmxvY2tpbmdPdXRwdXQvV2ViVGVzdC5qYXZhCkBAIC03Miw3ICs3Miw3IEBACiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsICgoZXhwZWN0ZWQpID8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKSk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9ub25CbG9ja2luZ091dHB1dC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL25vbkJsb2NraW5nT3V0cHV0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZWUxNTE5Ny4uN2RkMTVhNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL25vbkJsb2NraW5nT3V0cHV0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL25vbkJsb2NraW5nT3V0cHV0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjEtbm9uLWJsb2NraW5nLW91dHB1dCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL25vbkJsb2NraW5nT3V0cHV0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9ub25CbG9ja2luZ091dHB1dC9idWlsZC54bWwKaW5kZXggNzJhNzM5NC4uMjU0NjU3MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL25vbkJsb2NraW5nT3V0cHV0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvbm9uQmxvY2tpbmdPdXRwdXQvYnVpbGQueG1sCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNzMsNyArNzMsNyBAQAogICAgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIvPgogICAgICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YWM+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgpAQCAtOTQsNyArOTQsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL25vbkJsb2NraW5nT3V0cHV0L3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL25vbkJsb2NraW5nT3V0cHV0L3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhCmluZGV4IDkxOGI1YjQuLmY2NDJmMDAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9ub25CbG9ja2luZ091dHB1dC9zZXJ2bGV0L3Rlc3QvVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvbm9uQmxvY2tpbmdPdXRwdXQvc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTU4LDcgKzU4LDcgQEAKICAgICAgICAgICAgICAgICBsb25nIHN0YXJ0VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwogICAgICAgICAgICAgICAgIHdoaWxlIChvdXRwdXQuaXNSZWFkeSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIHdyaXRlRGF0YShvdXRwdXQpOwotICAgICAgICAgICAgICAgICAgICBjb3VudCsrOyAgICAKKyAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKICAgICAgICAgICAgICAgICAgICAgaWYgKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gc3RhcnRUaW1lID4gTUFYX1RJTUVfTUlMTElTCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgY291bnQgPiAxMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJDYW5ub3QgZmlsbCB0aGUgd3JpdGUgYnVmZmVyIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvcGFydFN1Ym1pdHRlZEZpbGVOYW1lL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9wYXJ0U3VibWl0dGVkRmlsZU5hbWUvV2ViVGVzdC5qYXZhCmluZGV4IDM1ZWExZDkuLjEwNjUxOTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9wYXJ0U3VibWl0dGVkRmlsZU5hbWUvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9wYXJ0U3VibWl0dGVkRmlsZU5hbWUvV2ViVGVzdC5qYXZhCkBAIC0yMyw3ICsyMyw3IEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci4qOwogCiBwdWJsaWMgY2xhc3MgV2ViVGVzdCB7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIApAQCAtMTQxLDcgKzE0MSw3IEBACiAgICBzdGF0aWMgU3RyaW5nW11bXSBleHBlY3RlZCA9IHsKICAgICAgICB7IjEyMzQ1NjdhYmNkZWZnIn0sCiAgICAgICAgeyJteUZpbGUiLCAidGVzdC50eHQiLCAiMzYiLCAidGV4dC9wbGFpbiIsICJjb250ZW50LWRpc3Bvc2l0aW9uIGNvbnRlbnQtdHlwZSIgfSwKLSAgICAgICB7Im15RmlsZTIiLCAidGVzdDIudHh0IiwgIjM3IiwgInRleHQvcGxhaW4iLCAKKyAgICAgICB7Im15RmlsZTIiLCAidGVzdDIudHh0IiwgIjM3IiwgInRleHQvcGxhaW4iLAogICAgICAgICAgICAgImNvbnRlbnQtZGlzcG9zaXRpb24gY29udGVudC10eXBlIiB9LAogICAgICAgIHsieHl6IiwgIm51bGwiLCAiMTQiLCAidGV4dC9wbGFpbiIsICJjb250ZW50LWRpc3Bvc2l0aW9uIGNvbnRlbnQtdHlwZSJ9CiAgICB9OwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3BhcnRTdWJtaXR0ZWRGaWxlTmFtZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3BhcnRTdWJtaXR0ZWRGaWxlTmFtZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDMwZTAwZjQuLjhkMjBjZTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9wYXJ0U3VibWl0dGVkRmlsZU5hbWUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvcGFydFN1Ym1pdHRlZEZpbGVOYW1lL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTMuMS1wYXJ0LXN1Ym1pdHRlZC1maWxlLW5hbWUiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4xLXBhcnQtc3VibWl0dGVkLWZpbGUtbmFtZSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iLyR7YXBwbmFtZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9wYXJ0U3VibWl0dGVkRmlsZU5hbWUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3BhcnRTdWJtaXR0ZWRGaWxlTmFtZS9idWlsZC54bWwKaW5kZXggM2NmOWE3MS4uNjhjZDkwNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3BhcnRTdWJtaXR0ZWRGaWxlTmFtZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3BhcnRTdWJtaXR0ZWRGaWxlTmFtZS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE2ICs0MiwxNiBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC01OSw3ICs1OSw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmFjCiAgICAgICAgICAgICBkZWJ1Zz0idHJ1ZSIKQEAgLTc4LDEwICs3OCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9wYXJ0U3VibWl0dGVkRmlsZU5hbWUvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3BhcnRTdWJtaXR0ZWRGaWxlTmFtZS9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKaW5kZXggNjY3ZjUxMC4uMmY5OTQwNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3BhcnRTdWJtaXR0ZWRGaWxlTmFtZS9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3BhcnRTdWJtaXR0ZWRGaWxlTmFtZS9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKIEBNdWx0aXBhcnRDb25maWcobWF4RmlsZVNpemU9MjAwKQogcHVibGljIGNsYXNzIFNlcnZsZXRUZXN0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewogCi0gICAgcHJvdGVjdGVkIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAgICAgICAgCisgICAgcHJvdGVjdGVkIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogCiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvcmVzZXRDaGFyYWN0ZXJFbmNvZGluZy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvcmVzZXRDaGFyYWN0ZXJFbmNvZGluZy9XZWJUZXN0LmphdmEKaW5kZXggODdiODVkMS4uNmExM2QxOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3Jlc2V0Q2hhcmFjdGVyRW5jb2RpbmcvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9yZXNldENoYXJhY3RlckVuY29kaW5nL1dlYlRlc3QuamF2YQpAQCAtMjQsMTEgKzI0LDExIEBACiAgKiBUZXN0IEh0dHBTZXJ2bGV0UmVzcG9uc2UjcmVzZXQgYW5kICNzZXRDaGFyYWN0ZXJFbmNvZGluZy4KICAqLwogcHVibGljIGNsYXNzIFdlYlRlc3QgewotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfTkFNRSA9ICJzZXJ2bGV0LTMuMS1yZXNldC1jaGFyYWN0ZXItZW5jb2RpbmciOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFWFBFQ1RFRF9DT05URU5UX1RZUEUgPSAiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluO2NoYXJzZXQ9QmlnNSI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVYUEVDVEVEX1JFU1BPTlNFPSJEb25lIjsKLSAgICAKKwogICAgIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdD0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCkBAIC01NSw3ICs1NSw3IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGdvR2V0KFN0cmluZyBob3N0LCBpbnQgcG9ydCwgU3RyaW5nIGNvbnRleHRQYXRoLAogICAgICAgICAgICAgU3RyaW5nIGV4cGVjdGVkQ29udGVudFR5cGUpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwogICAgICAgICBib29sZWFuIGhhc0V4cGVjdGVkQ29udGVudFR5cGUgPSAoZXhwZWN0ZWRDb250ZW50VHlwZSA9PSBudWxsKTsKICAgICAgICAgYm9vbGVhbiBoYXNEb25lID0gZmFsc2U7CkBAIC04OCw3ICs4OCw3IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGxpbmVOdW0rKzsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICByZXN1bHQgPSBoYXNFeHBlY3RlZENvbnRlbnRUeXBlICYmIGhhc0RvbmU7CiAKICAgICAgICAgIH0gZmluYWxseSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvcmVzZXRDaGFyYWN0ZXJFbmNvZGluZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3Jlc2V0Q2hhcmFjdGVyRW5jb2RpbmcvYnVpbGQucHJvcGVydGllcwppbmRleCAwNGM4NDNmLi4wMzNkYzA0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvcmVzZXRDaGFyYWN0ZXJFbmNvZGluZy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9yZXNldENoYXJhY3RlckVuY29kaW5nL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjEtcmVzZXQtY2hhcmFjdGVyLWVuY29kaW5nIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvcmVzZXRDaGFyYWN0ZXJFbmNvZGluZy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvcmVzZXRDaGFyYWN0ZXJFbmNvZGluZy9idWlsZC54bWwKaW5kZXggYjI1MzQ5NS4uNmU5MTE0NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3Jlc2V0Q2hhcmFjdGVyRW5jb2RpbmcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9yZXNldENoYXJhY3RlckVuY29kaW5nL2J1aWxkLnhtbApAQCAtNTQsNyArNTQsNyBAQAogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CkBAIC03NSw3ICs3NSw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvcnVuQXNJbml0RGVzdHJveS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvcnVuQXNJbml0RGVzdHJveS9XZWJUZXN0LmphdmEKaW5kZXggNDU4MWU5Yi4uNGYzY2I3OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3J1bkFzSW5pdERlc3Ryb3kvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9ydW5Bc0luaXREZXN0cm95L1dlYlRlc3QuamF2YQpAQCAtNTAsNyArNTAsNyBAQAogICAgICAgICBzZXJ2ZXJMb2cgPSBhcmdzWzRdOwogICAgICAgICBhcHBOYW1lID0gYXJnc1s1XTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBAUnVuQXMgd2l0aCBpbml0IGFuZCBkZXN0cm95Iik7CkBAIC02NSw3ICs2NSw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotICAgIAlzdGF0LnByaW50U3VtbWFyeSgpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpAQCAtMTAzLDcgKzEwMyw3IEBACiAgICAgICAgICAgICAgICAgb2sgPSBvayAmJiBFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBleCl7Ci0gICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsgICAKKyAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiVGVzdCBVTlBSRURJQ1RFRC1GQUlMVVJFIik7CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICB0cnkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3J1bkFzSW5pdERlc3Ryb3kvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9ydW5Bc0luaXREZXN0cm95L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZDhkYmNjMy4uYzIzYjI4NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3J1bkFzSW5pdERlc3Ryb3kvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvcnVuQXNJbml0RGVzdHJveS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4xLXJ1bi1hcy1pbml0LWRlc3Ryb3kiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9ydW5Bc0luaXREZXN0cm95L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9ydW5Bc0luaXREZXN0cm95L2J1aWxkLnhtbAppbmRleCAzNmVhODM5Li45NjUzNzE0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvcnVuQXNJbml0RGVzdHJveS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3J1bkFzSW5pdERlc3Ryb3kvYnVpbGQueG1sCkBAIC0zNSw3ICszNSw3IEBACiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgICAgPGRlbGV0ZSBmaWxlPSJXZWJUZXN0LmNsYXNzIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNjEsMTAgKzYxLDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCkBAIC03MiwxNCArNzIsMTQgQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9hcHBzZXJ2LXJ0LmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bkFuZFVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9zZXJ2bGV0Q29udGV4dEdldFZpcnR1YWxTZXJ2ZXJOYW1lL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9zZXJ2bGV0Q29udGV4dEdldFZpcnR1YWxTZXJ2ZXJOYW1lL1dlYlRlc3QuamF2YQppbmRleCA3N2ZkOWY0Li5kOTliYTliIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvc2VydmxldENvbnRleHRHZXRWaXJ0dWFsU2VydmVyTmFtZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3NlcnZsZXRDb250ZXh0R2V0VmlydHVhbFNlcnZlck5hbWUvV2ViVGVzdC5qYXZhCkBAIC0yNCw5ICsyNCw5IEBACiAgKiBUZXN0IEh0dHBTZXJ2bGV0UmVzcG9uc2UjcmVzZXQgYW5kICNzZXRDaGFyYWN0ZXJFbmNvZGluZy4KICAqLwogcHVibGljIGNsYXNzIFdlYlRlc3QgewotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfTkFNRSA9ICJzZXJ2bGV0LTMuMS1zZXJ2bGV0LWNvbnRleHQtZ2V0LXZpcnR1YWwtc2VydmVyLW5hbWUiOwotICAgIAorCiAgICAgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0PQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKQEAgLTUzLDcgKzUzLDcgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gZ29HZXQoU3RyaW5nIGhvc3QsIGludCBwb3J0LCBTdHJpbmcgY29udGV4dFBhdGgsCiAgICAgICAgICAgICBTdHJpbmcgZXhwZWN0ZWRSZXN1bHQpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwogCiAgICAgICAgIHRyeSAoU29ja2V0IHNvY2sgPSBuZXcgU29ja2V0KGhvc3QsIHBvcnQpOwpAQCAtNzYsOCArNzYsOCBAQAogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgfSAKKworICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvc2VydmxldENvbnRleHRHZXRWaXJ0dWFsU2VydmVyTmFtZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3NlcnZsZXRDb250ZXh0R2V0VmlydHVhbFNlcnZlck5hbWUvYnVpbGQucHJvcGVydGllcwppbmRleCBhNmZkMzkyLi44NmI5MzA5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvc2VydmxldENvbnRleHRHZXRWaXJ0dWFsU2VydmVyTmFtZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9zZXJ2bGV0Q29udGV4dEdldFZpcnR1YWxTZXJ2ZXJOYW1lL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjEtc2VydmxldC1jb250ZXh0LWdldC12aXJ0dWFsLXNlcnZlci1uYW1lIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvc2VydmxldENvbnRleHRHZXRWaXJ0dWFsU2VydmVyTmFtZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvc2VydmxldENvbnRleHRHZXRWaXJ0dWFsU2VydmVyTmFtZS9idWlsZC54bWwKaW5kZXggYTUxMmY4YS4uNmMyOGMwNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3NlcnZsZXRDb250ZXh0R2V0VmlydHVhbFNlcnZlck5hbWUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS9zZXJ2bGV0Q29udGV4dEdldFZpcnR1YWxTZXJ2ZXJOYW1lL2J1aWxkLnhtbApAQCAtNTQsNyArNTQsNyBAQAogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CkBAIC03Niw3ICs3Niw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvdXBncmFkZUVjaG8vV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3VwZ3JhZGVFY2hvL1dlYlRlc3QuamF2YQppbmRleCA0OTgxODg1Li5iNDU1MDdjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvdXBncmFkZUVjaG8vV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS91cGdyYWRlRWNoby9XZWJUZXN0LmphdmEKQEAgLTIyLDcgKzIyLDcgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLio7CiAKIC8qCi0gKiBVbml0IHRlc3QgZm9yIHVwZ3JhZGUgZWNobyAKKyAqIFVuaXQgdGVzdCBmb3IgdXBncmFkZSBlY2hvCiAgKi8KIHB1YmxpYyBjbGFzcyBXZWJUZXN0IHsKIApAQCAtODQsNyArODQsNyBAQAogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQuZm9ybWF0KCJTbGVlcGluZyAlZCBzZWNcbiIsIHNsZWVwSW5TZWNvbmRzKTsKICAgICAgICAgICAgICAgICBUaHJlYWQuc2xlZXAoc2xlZXBJblNlY29uZHMgKiAxMDAwKTsKICAgICAgICAgICAgICAgICB3cml0ZUNodW5rKG91dHB1dCwgIldvcmxkIik7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyByZWFkIGRhdGEgd2l0aG91dCB1c2luZyByZWFkTGluZQogICAgICAgICAgICAgICAgIGxvbmcgc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25zdW1pbmcgcmVzdWx0cyIpOwpAQCAtOTUsNyArOTUsNyBAQAogICAgICAgICAgICAgICAgICAgICBib29sZWFuIGhhc0Vycm9yID0gc2IudG9TdHJpbmcoKS5jb250YWlucygiV3JvbmdDbGFzc0xvYWRlciIpOwogICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSW5mbyB8fCBoYXNFcnJvciB8fCBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIHN0YXJ0VGltZSA+IDIwICogMTAwMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oc2IudG9TdHJpbmcoKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvdXBncmFkZUVjaG8vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS91cGdyYWRlRWNoby9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGNhOTdhODAuLjViYzM3MjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS91cGdyYWRlRWNoby9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS91cGdyYWRlRWNoby9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtMy4xLXVwZ3JhZGUtc2ltcGxlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvdXBncmFkZUVjaG8vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3VwZ3JhZGVFY2hvL2J1aWxkLnhtbAppbmRleCA5OTdiZWRhLi4wYzA2NGMwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvdXBncmFkZUVjaG8vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS91cGdyYWRlRWNoby9idWlsZC54bWwKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIi8+CiAgICAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhYz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CkBAIC03OCw3ICs3OCw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvdXBncmFkZUVjaG8vc2VydmxldC90ZXN0L0VjaG9IdHRwVXBncmFkZUhhbmRsZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS91cGdyYWRlRWNoby9zZXJ2bGV0L3Rlc3QvRWNob0h0dHBVcGdyYWRlSGFuZGxlci5qYXZhCmluZGV4IDAwY2EyOGUuLjU0ZmJjMWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS91cGdyYWRlRWNoby9zZXJ2bGV0L3Rlc3QvRWNob0h0dHBVcGdyYWRlSGFuZGxlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS91cGdyYWRlRWNoby9zZXJ2bGV0L3Rlc3QvRWNob0h0dHBVcGdyYWRlSGFuZGxlci5qYXZhCkBAIC03OCw3ICs3OCw3IEBACiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb3JyZWN0IENsYXNzTG9hZGVyIik7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRVJST1IgV3JvbmcgQ2xhc3NMb2FkZXIhISEiKTsKLSAgICAgICAgICAgICAgICBzYi5hcHBlbmQoIldyb25nQ2xhc3NMb2FkZXIiKTsgCisgICAgICAgICAgICAgICAgc2IuYXBwZW5kKCJXcm9uZ0NsYXNzTG9hZGVyIik7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGludCBsZW4gPSAtMTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS91cGdyYWRlV2l0aENESS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3VwZ3JhZGVXaXRoQ0RJL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNDg2OWI4MS4uNWM4ZWQ4NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3VwZ3JhZGVXaXRoQ0RJL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3VwZ3JhZGVXaXRoQ0RJL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC0zLjEtdXBncmFkZS13aXRoLWNkaSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3VwZ3JhZGVXaXRoQ0RJL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS91cGdyYWRlV2l0aENESS9idWlsZC54bWwKaW5kZXggOTk3YmVkYS4uMGMwNjRjMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3VwZ3JhZGVXaXRoQ0RJL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvdXBncmFkZVdpdGhDREkvYnVpbGQueG1sCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNTcsNyArNTcsNyBAQAogICAgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIvPgogICAgICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YWM+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgpAQCAtNzgsNyArNzgsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtMy4xL3VwZ3JhZGVXaXRoQ0RJL3NlcnZsZXQvdGVzdC9JU0JOVmFsaWRhdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvdXBncmFkZVdpdGhDREkvc2VydmxldC90ZXN0L0lTQk5WYWxpZGF0b3IuamF2YQppbmRleCBkZDg3NmU5Li45NTkyNmJlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvdXBncmFkZVdpdGhDREkvc2VydmxldC90ZXN0L0lTQk5WYWxpZGF0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvdXBncmFkZVdpdGhDREkvc2VydmxldC90ZXN0L0lTQk5WYWxpZGF0b3IuamF2YQpAQCAtNzMsNyArNzMsNyBAQAogICAgICAgICBpbnQgc3VtID0gMDsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7CiAgICAgICAgICAgICBzdW0gKz0gKDEwIC0gaSkgKiBpc1tpXTsKLSAgICAgICAgfSAgIAorICAgICAgICB9CiAgICAgICAgIHJldHVybiAoc3VtICUgMTEgPT0gMCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC0zLjEvdXBncmFkZVdpdGhDREkvc2VydmxldC90ZXN0L1JlYWRMaXN0ZW5lckltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS91cGdyYWRlV2l0aENESS9zZXJ2bGV0L3Rlc3QvUmVhZExpc3RlbmVySW1wbC5qYXZhCmluZGV4IGI5ZmFkZTEuLjJmYWMyMWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS91cGdyYWRlV2l0aENESS9zZXJ2bGV0L3Rlc3QvUmVhZExpc3RlbmVySW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTMuMS91cGdyYWRlV2l0aENESS9zZXJ2bGV0L3Rlc3QvUmVhZExpc3RlbmVySW1wbC5qYXZhCkBAIC0xMDEsNyArMTAxLDcgQEAKICAgICBwdWJsaWMgdm9pZCBvbkVycm9yKGZpbmFsIFRocm93YWJsZSB0KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0+IG9uRXJyb3I6ICIgKyB0KTsKICAgICAgICAgdC5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHdjLmNsb3NlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL2FkZEpzcEZpbGUvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL2FkZEpzcEZpbGUvV2ViVGVzdC5qYXZhCmluZGV4IGY0ZjBhZDguLjYxNDc4MWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9hZGRKc3BGaWxlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvYWRkSnNwRmlsZS9XZWJUZXN0LmphdmEKQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgICAgcG9ydCA9IEludGVnZXIucGFyc2VJbnQoYXJnc1sxXSk7CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgU2VydmxldENvbnRleHQuYWRkSnNwRmlsZSIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9hZGRKc3BGaWxlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvYWRkSnNwRmlsZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGY5MjQ3NTcuLjIwODQwNTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9hZGRKc3BGaWxlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL2FkZEpzcEZpbGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsOSArMTUsOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTQuMC1hZGQtanNwLWZpbGUiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtNC4wLWFkZC1qc3AtZmlsZSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvJHthcHBuYW1lfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL2FkZEpzcEZpbGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL2FkZEpzcEZpbGUvYnVpbGQueG1sCmluZGV4IDg0YjhkNmQuLjliN2ZiZDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9hZGRKc3BGaWxlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvYWRkSnNwRmlsZS9idWlsZC54bWwKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDcsMTAgKzQ3LDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiPgpAQCAtNTksMTAgKzU5LDEwIEBACiAgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Vudi5BUFNfSE9NRX0vbGliL3dlYnRlc3QuamFyIi8+CiAgICAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhYz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNzAsNyArNzAsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCIgZm9yaz0idHJ1ZSI+CiAgICAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0iUzFBU19IT01FIiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfSIvPgpAQCAtODYsMTAgKzg2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL2NvbXBvc2l0ZVRyYWlsZXJTdXBwbGllci9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvY29tcG9zaXRlVHJhaWxlclN1cHBsaWVyL1dlYlRlc3QuamF2YQppbmRleCBiYzUwNzhhLi5lZGRiZDE1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvY29tcG9zaXRlVHJhaWxlclN1cHBsaWVyL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvY29tcG9zaXRlVHJhaWxlclN1cHBsaWVyL1dlYlRlc3QuamF2YQpAQCAtNDIsNyArNDIsNyBAQAogICAgICAgICBwb3J0ID0gSW50ZWdlci5wYXJzZUludChhcmdzWzFdKTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBjb21wb3NpdGUgdHJhaWxlciBzdXBwbGllciIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTg1LDcgKzg1LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFN0cmluZyBjb250ZW50VHlwZSA9IGh0dHBSZXNwb25zZS5nZXRIZWFkZXIoIkNvbnRlbnQtVHlwZSIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLT4gaGVhZGVycyA9ICIgKyBodHRwUmVzcG9uc2UuZ2V0SGVhZGVycygpKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTdHJpbmcgcmVzdWx0ID0gbmV3IFN0cmluZ0J1aWxkZXIoaHR0cFJlc3BvbnNlLmdldEJvZHkoKS50cmltKCkpCiAgICAgICAgICAgICAgICAgLmFwcGVuZCgnfCcpCiAgICAgICAgICAgICAgICAgLmFwcGVuZChodHRwUmVzcG9uc2UuZ2V0VHJhaWxlckZpZWxkcygpLmdldCgiYmFyMSIpKSAvLyB0cmFpbGVyIGZpZWxkCkBAIC05Niw3ICs5Niw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tPiByZXN1bHQgPSAiICsgcmVzdWx0KTsKIAogICAgICAgICAgICAgaWYgICghRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKHJlc3VsdCkpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgcmVzdWx0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL2NvbXBvc2l0ZVRyYWlsZXJTdXBwbGllci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL2NvbXBvc2l0ZVRyYWlsZXJTdXBwbGllci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDg3NTMzNDEuLjZlMjFhMGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9jb21wb3NpdGVUcmFpbGVyU3VwcGxpZXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvY29tcG9zaXRlVHJhaWxlclN1cHBsaWVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDkgKzE1LDkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC00LjAtY29tcG9zaXRlLXRyYWlsZXItc3VwcGxpZXIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtNC4wLWNvbXBvc2l0ZS10cmFpbGVyLXN1cHBsaWVyIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii8ke2FwcG5hbWV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvY29tcG9zaXRlVHJhaWxlclN1cHBsaWVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9jb21wb3NpdGVUcmFpbGVyU3VwcGxpZXIvYnVpbGQueG1sCmluZGV4IDc4ZDdjMzkuLjNhZWRiOWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9jb21wb3NpdGVUcmFpbGVyU3VwcGxpZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9jb21wb3NpdGVUcmFpbGVyU3VwcGxpZXIvYnVpbGQueG1sCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ1LDEwICs0NSwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgaW5jbHVkZXM9IldlYlRlc3QuamF2YSI+CiAgICAgICAgICAgICA8Y2xhc3NwYXRoPgpAQCAtNTYsMTAgKzU2LDEwIEBACiAgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Vudi5BUFNfSE9NRX0vbGliL3dlYnRlc3QuamFyIi8+CiAgICAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhYz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjcsNyArNjcsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCIgZm9yaz0idHJ1ZSI+CiAgICAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0iUzFBU19IT01FIiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfSIvPgpAQCAtODMsMTAgKzgzLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL2NvbnRleHRDaGFyRW5jb2RpbmcvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL2NvbnRleHRDaGFyRW5jb2RpbmcvV2ViVGVzdC5qYXZhCmluZGV4IDM2NzI4ZjAuLjk1NzM5MGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9jb250ZXh0Q2hhckVuY29kaW5nL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvY29udGV4dENoYXJFbmNvZGluZy9XZWJUZXN0LmphdmEKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICAgICAgcG9ydCA9IEludGVnZXIucGFyc2VJbnQoYXJnc1sxXSk7CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgU2VydmxldENvbnRleHQjc2V0UmVxdWVzdC9SZXNwb25zZUNoYXJhY3RlckVuY29kaW5nIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtOTAsNyArOTAsNyBAQAogICAgICAgICAgICAgU3RyaW5nIGxpbmUgPSBodHRwUmVzcG9uc2UuZ2V0Qm9keShjaGFyc2V0KS50cmltKCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tPiBsaW5lID0gIiArIGxpbmUpOwogICAgICAgICAgICAgaWYgICghRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvY29udGV4dENoYXJFbmNvZGluZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL2NvbnRleHRDaGFyRW5jb2RpbmcvYnVpbGQucHJvcGVydGllcwppbmRleCBjNGE0MjE1Li5jYjZlMzdkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvY29udGV4dENoYXJFbmNvZGluZy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9jb250ZXh0Q2hhckVuY29kaW5nL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTQuMC1jb250ZXh0LWNoYXItZW5jb2RpbmciLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtNC4wLWNvbnRleHQtY2hhci1lbmNvZGluZyIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvJHthcHBuYW1lfSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9jb250ZXh0Q2hhckVuY29kaW5nL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9jb250ZXh0Q2hhckVuY29kaW5nL2J1aWxkLnhtbAppbmRleCA3OGQ3YzM5Li4zYWVkYjlkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvY29udGV4dENoYXJFbmNvZGluZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL2NvbnRleHRDaGFyRW5jb2RpbmcvYnVpbGQueG1sCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ1LDEwICs0NSwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgaW5jbHVkZXM9IldlYlRlc3QuamF2YSI+CiAgICAgICAgICAgICA8Y2xhc3NwYXRoPgpAQCAtNTYsMTAgKzU2LDEwIEBACiAgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Vudi5BUFNfSE9NRX0vbGliL3dlYnRlc3QuamFyIi8+CiAgICAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhYz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjcsNyArNjcsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCIgZm9yaz0idHJ1ZSI+CiAgICAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0iUzFBU19IT01FIiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfSIvPgpAQCAtODMsMTAgKzgzLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL2RlZmF1bHRDb250ZXh0UGF0aC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvZGVmYXVsdENvbnRleHRQYXRoL1dlYlRlc3QuamF2YQppbmRleCAzYTZmYzcyLi42YmE3ZTRmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvZGVmYXVsdENvbnRleHRQYXRoL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvZGVmYXVsdENvbnRleHRQYXRoL1dlYlRlc3QuamF2YQpAQCAtMzYsNyArMzYsNyBAQAogICAgICAgICBob3N0ID0gYXJnc1swXTsKICAgICAgICAgcG9ydCA9IEludGVnZXIucGFyc2VJbnQoYXJnc1sxXSk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGRlZmF1bHQtY29udGV4dC1wYXRoIHNldHRpbmcgaW4gd2ViLnhtbCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ0LDggKzQ0LDggQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlSnNwKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL2RlZmF1bHRDb250ZXh0UGF0aC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL2RlZmF1bHRDb250ZXh0UGF0aC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDYyOWNhZjkuLmI5NDA0YjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9kZWZhdWx0Q29udGV4dFBhdGgvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvZGVmYXVsdENvbnRleHRQYXRoL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC00LjAtZGVmYXVsdC1jb250ZXh0LXBhdGgiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9kZWZhdWx0Q29udGV4dFBhdGgvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL2RlZmF1bHRDb250ZXh0UGF0aC9idWlsZC54bWwKaW5kZXggY2E0ODU4Mi4uZmM1YmE4YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL2RlZmF1bHRDb250ZXh0UGF0aC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL2RlZmF1bHRDb250ZXh0UGF0aC9idWlsZC54bWwKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDcsMTAgKzQ3LDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiPgpAQCAtNTksMTQgKzU5LDE0IEBACiAgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Vudi5BUFNfSE9NRX0vbGliL3dlYnRlc3QuamFyIi8+CiAgICAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhYz4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLW5vLWNvbnRleHQtcm9vdCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0IiBmb3JrPSJ0cnVlIj4KICAgICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJTMUFTX0hPTUUiIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9Ii8+CkBAIC04MSwxMCArODEsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvZGVmYXVsdENvbnRleHRQYXRoRWFyL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9kZWZhdWx0Q29udGV4dFBhdGhFYXIvV2ViVGVzdC5qYXZhCmluZGV4IDNhYzMxOTAuLjk1YmQxNjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9kZWZhdWx0Q29udGV4dFBhdGhFYXIvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9kZWZhdWx0Q29udGV4dFBhdGhFYXIvV2ViVGVzdC5qYXZhCkBAIC0zNiw3ICszNiw3IEBACiAgICAgICAgIGhvc3QgPSBhcmdzWzBdOwogICAgICAgICBwb3J0ID0gSW50ZWdlci5wYXJzZUludChhcmdzWzFdKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgZGVmYXVsdC1jb250ZXh0LXBhdGggc2V0dGluZyBpbiB3ZWIueG1sIGluIGFuIGVhciBmaWxlIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDQsOCArNDQsOCBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2VKc3AoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvZGVmYXVsdENvbnRleHRQYXRoRWFyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvZGVmYXVsdENvbnRleHRQYXRoRWFyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZGJiZTdkNC4uYjFlYjNjOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL2RlZmF1bHRDb250ZXh0UGF0aEVhci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9kZWZhdWx0Q29udGV4dFBhdGhFYXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTQuMC1kZWZhdWx0LWNvbnRleHQtcGF0aC1lYXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9kZWZhdWx0Q29udGV4dFBhdGhFYXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL2RlZmF1bHRDb250ZXh0UGF0aEVhci9idWlsZC54bWwKaW5kZXggMTdhNTRjNi4uMjQxODBiNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL2RlZmF1bHRDb250ZXh0UGF0aEVhci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL2RlZmF1bHRDb250ZXh0UGF0aEVhci9idWlsZC54bWwKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNjUsMTIgKzY1LDEyIEBACiAgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwLmVhciI+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSIgaW5jbHVkZXM9Iioud2FyIi8+CiAgICAgICAgIDwvamFyPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0IiBmb3JrPSJ0cnVlIj4KICAgICAgICAgICA8c3lzcHJvcGVydHkga2V5PSJTMUFTX0hPTUUiIHZhbHVlPSIke2Vudi5TMUFTX0hPTUV9Ii8+CkBAIC04NSwxMCArODUsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9tYXBwaW5nRGlzY292ZXJ5L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9tYXBwaW5nRGlzY292ZXJ5L1dlYlRlc3QuamF2YQppbmRleCA1NGNmMDQwLi4wZDI3YzkwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvbWFwcGluZ0Rpc2NvdmVyeS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL21hcHBpbmdEaXNjb3ZlcnkvV2ViVGVzdC5qYXZhCkBAIC00Miw5ICs0Miw5IEBACiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICAgICAgYXBwTmFtZSA9IGFyZ3NbM107CiAgICAgICAgIHNlcnZlckxvZyA9IGFyZ3NbNF07Ci0gICAgICAgIAorCiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgbWFwcGluZyBkaXNjb3ZlcnkiKTsKQEAgLTU3LDEyICs1NywxMiBAQAogICAgICAgICAgICAgYm9vbGVhbiBleHRlbnNpb25NYXRjaCA9IHdlYlRlc3QucnVuKCJHRVQiLCAyMDAsIGZhbHNlLCAiL2Zvby5Jc3N1ZTczIiwgIi4qU2VydmxldEMuTWFwcGluZ0ltcGxcXHttYXRjaFZhbHVlPWZvby4qcGF0dGVybj1cXCpcXC5Jc3N1ZTczLipzZXJ2bGV0TmFtZT1TZXJ2bGV0Qy4qbWFwcGluZ01hdGNoPUVYVEVOU0lPTlxcfS4qRk9SV0FSRF9NQVBQSU5HOiBudWxsLipJTkNMVURFX01BUFBJTkc6IG51bGwuKkFTWU5DX01BUFBJTkc6IG51bGwuKiIpOwogICAgICAgICAgICAgYm9vbGVhbiBwYXRoTWF0Y2ggPSB3ZWJUZXN0LnJ1bigiR0VUIiwgMjAwLCBmYWxzZSwgIi9wYXRoL2ZvbyIsICIuKlNlcnZsZXRDLk1hcHBpbmdJbXBsXFx7bWF0Y2hWYWx1ZT1mb28uKnBhdHRlcm49L3BhdGgvXFwqLipzZXJ2bGV0TmFtZT1TZXJ2bGV0Qy4qbWFwcGluZ01hdGNoPVBBVEhcXH0uKkZPUldBUkRfTUFQUElORzogbnVsbC4qSU5DTFVERV9NQVBQSU5HOiBudWxsLipBU1lOQ19NQVBQSU5HOiBudWxsLioiKTsKIAotICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FICsgIi1zaW1wbGUiLCAoKGNvbnRleHRSb290TWF0Y2ggJiYgCisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUgKyAiLXNpbXBsZSIsICgoY29udGV4dFJvb3RNYXRjaCAmJgogICAgICAgICAgICAgICAgICAgICBkZWZhdWx0TWF0Y2ggJiYKLSAgICAgICAgICAgICAgICAgICAgZXhhY3RNYXRjaCAmJiAKKyAgICAgICAgICAgICAgICAgICAgZXhhY3RNYXRjaCAmJgogICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25NYXRjaCAmJgogICAgICAgICAgICAgICAgICAgICBwYXRoTWF0Y2gpPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBib29sZWFuIGFzeW5jTWF0Y2gxID0gd2ViVGVzdC5ydW4oIkdFVCIsIDIwMCwgZmFsc2UsICIvQUFzeW5jRGlzcGF0Y2hUb0MiLCAiLipTZXJ2bGV0Qy5NYXBwaW5nSW1wbFxce21hdGNoVmFsdWU9QUFzeW5jRGlzcGF0Y2hUb0MuKnBhdHRlcm49L0FBc3luY0Rpc3BhdGNoVG9DLipzZXJ2bGV0TmFtZT1BQXN5bmNEaXNwYXRjaFRvQywuKm1hcHBpbmdNYXRjaD1FWEFDVFxcfS4qRk9SV0FSRF9NQVBQSU5HOiBudWxsLipJTkNMVURFX01BUFBJTkc6IG51bGwuKkFTWU5DX01BUFBJTkc6LipNYXBwaW5nSW1wbFxce21hdGNoVmFsdWU9QUFzeW5jRGlzcGF0Y2hUb0MuKnBhdHRlcm49L0FBc3luY0Rpc3BhdGNoVG9DLipzZXJ2bGV0TmFtZT1BQXN5bmNEaXNwYXRjaFRvQy4qbWFwcGluZ01hdGNoPUVYQUNUfS4qIik7CiAKICAgICAgICAgICAgIGJvb2xlYW4gYXN5bmNNYXRjaDIgPSB3ZWJUZXN0LnJ1bigiR0VUIiwgMjAwLCBmYWxzZSwgIi9CSW5jbHVkZURpc3BhdGNoU2VydmxldE5hbWVkRGlzcGF0Y2hlciIsICIuKkluLlNlcnZsZXRDLk1hcHBpbmdJbXBsXFx7bWF0Y2hWYWx1ZT1CSW5jbHVkZURpc3BhdGNoU2VydmxldE5hbWVkRGlzcGF0Y2hlciwucGF0dGVybj0vQkluY2x1ZGVEaXNwYXRjaFNlcnZsZXROYW1lZERpc3BhdGNoZXIsLnNlcnZsZXROYW1lPUJJbmNsdWRlRGlzcGF0Y2hTZXJ2bGV0TmFtZWREaXNwYXRjaGVyLC5tYXBwaW5nTWF0Y2g9RVhBQ1RcXH0uKkZPUldBUkRfTUFQUElORzoubnVsbC4qSU5DTFVERV9NQVBQSU5HOi5udWxsLipBU1lOQ19NQVBQSU5HOi5NYXBwaW5nSW1wbFxce21hdGNoVmFsdWU9QkluY2x1ZGVEaXNwYXRjaFNlcnZsZXROYW1lZERpc3BhdGNoZXIsLnBhdHRlcm49L0JJbmNsdWRlRGlzcGF0Y2hTZXJ2bGV0TmFtZWREaXNwYXRjaGVyLC5zZXJ2bGV0TmFtZT1CSW5jbHVkZURpc3BhdGNoU2VydmxldE5hbWVkRGlzcGF0Y2hlciwubWFwcGluZ01hdGNoPUVYQUNUXFx9LioiKTsKQEAgLTcwLDE4ICs3MCwxOCBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FICsgIi1hc3luYyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3luY01hdGNoMSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmNNYXRjaDIgPyBzdGF0LlBBU1MgOiBzdGF0LkZBSUwpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGJvb2xlYW4gZm9yd2FyZE1hdGNoMSA9IHdlYlRlc3QucnVuKCJHRVQiLCAyMDAsIGZhbHNlLCAiL0FGb3J3YXJkVG9CIiwgIi4qU2VydmxldEMuTWFwcGluZ0ltcGxcXHttYXRjaFZhbHVlPVNlcnZsZXRDLC4qcGF0dGVybj0vU2VydmxldEMsLipzZXJ2bGV0TmFtZT1TZXJ2bGV0QywuKm1hcHBpbmdNYXRjaD1FWEFDVFxcfS4qRk9SV0FSRF9NQVBQSU5HOi5NYXBwaW5nSW1wbFxce21hdGNoVmFsdWU9QUZvcndhcmRUb0IsLnBhdHRlcm49L0FGb3J3YXJkVG9CLC5zZXJ2bGV0TmFtZT1BRm9yd2FyZFRvQiwubWFwcGluZ01hdGNoPUVYQUNUXFx9LipJTkNMVURFX01BUFBJTkc6Lm51bGwuKkFTWU5DX01BUFBJTkc6Lm51bGwuKiIpOwogICAgICAgICAgICAgYm9vbGVhbiBmb3J3YXJkTWF0Y2gyID0gd2ViVGVzdC5ydW4oIkdFVCIsIDIwMCwgZmFsc2UsICIvQkZvcndhcmRUb0MiLCAiLipTZXJ2bGV0Qy5NYXBwaW5nSW1wbFxce21hdGNoVmFsdWU9U2VydmxldEMsLipwYXR0ZXJuPS9TZXJ2bGV0QywuKnNlcnZsZXROYW1lPVNlcnZsZXRDLC4qbWFwcGluZ01hdGNoPUVYQUNUXFx9LipGT1JXQVJEX01BUFBJTkc6Lk1hcHBpbmdJbXBsXFx7bWF0Y2hWYWx1ZT1CRm9yd2FyZFRvQywucGF0dGVybj0vQkZvcndhcmRUb0MsLnNlcnZsZXROYW1lPUJGb3J3YXJkVG9DLC5tYXBwaW5nTWF0Y2g9RVhBQ1RcXH0uKklOQ0xVREVfTUFQUElORzoubnVsbC4qQVNZTkNfTUFQUElORzoubnVsbC4qIik7CiAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSArICItZm9yd2FyZCIsICgoZm9yd2FyZE1hdGNoMSAmJgogICAgICAgICAgICAgICAgICAgICBmb3J3YXJkTWF0Y2gyKT8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgYm9vbGVhbiBpbmNsdWRlTWF0Y2gxID0gd2ViVGVzdC5ydW4oIkdFVCIsIDIwMCwgZmFsc2UsICIvQUluY2x1ZGVzQiIsICIuKkFJbmNsdWRlc0IuTWFwcGluZ0ltcGxcXHttYXRjaFZhbHVlPUFJbmNsdWRlc0IsLnBhdHRlcm49L0FJbmNsdWRlc0IsLnNlcnZsZXROYW1lPUFJbmNsdWRlc0IsLm1hcHBpbmdNYXRjaD1FWEFDVFxcfS4qRk9SV0FSRF9NQVBQSU5HOi5udWxsLipJTkNMVURFX01BUFBJTkc6Lm51bGwuKkluLkJJbmNsdWRlc0MuTWFwcGluZ0ltcGxcXHttYXRjaFZhbHVlPUFJbmNsdWRlc0IsLnBhdHRlcm49L0FJbmNsdWRlc0IsLnNlcnZsZXROYW1lPUFJbmNsdWRlc0IsLm1hcHBpbmdNYXRjaD1FWEFDVFxcfS4qRk9SV0FSRF9NQVBQSU5HOi5udWxsLipJTkNMVURFX01BUFBJTkc6Lk1hcHBpbmdJbXBsXFx7bWF0Y2hWYWx1ZT1CSW5jbHVkZXNDLC5wYXR0ZXJuPS9CSW5jbHVkZXNDLC5zZXJ2bGV0TmFtZT1CSW5jbHVkZXNDLC5tYXBwaW5nTWF0Y2g9RVhBQ1RcXH0uKkluLlNlcnZsZXRDLk1hcHBpbmdJbXBsXFx7bWF0Y2hWYWx1ZT1BSW5jbHVkZXNCLC5wYXR0ZXJuPS9BSW5jbHVkZXNCLC5zZXJ2bGV0TmFtZT1BSW5jbHVkZXNCLC5tYXBwaW5nTWF0Y2g9RVhBQ1RcXH0uKkZPUldBUkRfTUFQUElORzoubnVsbC4qSU5DTFVERV9NQVBQSU5HOi5NYXBwaW5nSW1wbFxce21hdGNoVmFsdWU9U2VydmxldEMsLnBhdHRlcm49L1NlcnZsZXRDLC5zZXJ2bGV0TmFtZT1TZXJ2bGV0QywubWFwcGluZ01hdGNoPUVYQUNUXFx9LipBU1lOQ19NQVBQSU5HOi5udWxsLioiKTsKICAgICAgICAgICAgIGJvb2xlYW4gaW5jbHVkZU1hdGNoMiA9IHdlYlRlc3QucnVuKCJHRVQiLCAyMDAsIGZhbHNlLCAiL0JJbmNsdWRlc0MiLCAiLipJbi5CSW5jbHVkZXNDLk1hcHBpbmdJbXBsXFx7bWF0Y2hWYWx1ZT1CSW5jbHVkZXNDLC5wYXR0ZXJuPS9CSW5jbHVkZXNDLC5zZXJ2bGV0TmFtZT1CSW5jbHVkZXNDLC5tYXBwaW5nTWF0Y2g9RVhBQ1RcXH0uKi5GT1JXQVJEX01BUFBJTkc6Lm51bGwuKi5JTkNMVURFX01BUFBJTkc6Lm51bGwuKkluLlNlcnZsZXRDLk1hcHBpbmdJbXBsXFx7bWF0Y2hWYWx1ZT1CSW5jbHVkZXNDLC5wYXR0ZXJuPS9CSW5jbHVkZXNDLC5zZXJ2bGV0TmFtZT1CSW5jbHVkZXNDLC5tYXBwaW5nTWF0Y2g9RVhBQ1RcXH0uKi5GT1JXQVJEX01BUFBJTkc6Lm51bGwuKi5JTkNMVURFX01BUFBJTkc6Lk1hcHBpbmdJbXBsXFx7bWF0Y2hWYWx1ZT1TZXJ2bGV0QywucGF0dGVybj0vU2VydmxldEMsLnNlcnZsZXROYW1lPVNlcnZsZXRDLC5tYXBwaW5nTWF0Y2g9RVhBQ1RcXH0uKi5BU1lOQ19NQVBQSU5HOi5udWxsLioiKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSArICItaW5jbHVkZSIsICgoaW5jbHVkZU1hdGNoMSAmJgogICAgICAgICAgICAgICAgICAgICBpbmNsdWRlTWF0Y2gyKT8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgYm9vbGVhbiBib3VuZHNNYXRjaDEgPSB3ZWJUZXN0LnJ1bigiR0VUIiwgMjAwLCBmYWxzZSwgIi9hL2ZvbyIsICIuKiIpOwogICAgICAgICAgICAgYm9vbGVhbiBib3VuZHNNYXRjaDIgPSB3ZWJUZXN0LnJ1bigiR0VUIiwgMjAwLCBmYWxzZSwgIi9mIiwgIi4qIik7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUgKyAiLWJvdW5kcyIsICgoYm91bmRzTWF0Y2gxICYmIGJvdW5kc01hdGNoMik/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCkpOwpAQCAtOTEsMTQgKzkxLDE0IEBACiAgICAgICAgICAgICBib29sZWFuIG5hbWVkRGlzcGF0Y2hNYXRjaDIgPSB3ZWJUZXN0LnJ1bigiR0VUIiwgMjAwLCBmYWxzZSwgIi9CSW5jbHVkZUNOYW1lZERpc3BhdGNoZXIiLCAiLipJbi5TZXJ2bGV0Qy5NYXBwaW5nSW1wbFxce21hdGNoVmFsdWU9QkluY2x1ZGVDTmFtZWREaXNwYXRjaGVyLC5wYXR0ZXJuPS9CSW5jbHVkZUNOYW1lZERpc3BhdGNoZXIsLnNlcnZsZXROYW1lPUJJbmNsdWRlQ05hbWVkRGlzcGF0Y2hlciwubWFwcGluZ01hdGNoPUVYQUNUXFx9PC9wPjxwPi5GT1JXQVJEX01BUFBJTkc6Lm51bGw8L3A+PHA+LklOQ0xVREVfTUFQUElORzoubnVsbDwvcD48cD4uQVNZTkNfTUFQUElORzoubnVsbC4qIik7CiAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSArICItbmFtZWREaXNwYXRjaCIsICgobmFtZWREaXNwYXRjaE1hdGNoMSAmJiBuYW1lZERpc3BhdGNoTWF0Y2gyKT8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIAorCisKICAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0gICAgCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSBib29sZWFuIHJ1bihTdHJpbmcgbWV0aG9kLApAQCAtMTA4LDcgKzEwOCw3IEBACiAgICAgICAgICAgICAgICAgaG9zdChob3N0KS5wb3J0KHBvcnQpLmJ1aWxkKCkpIHsKICAgICAgICAgICAgIGh0dHBDbGllbnQucmVxdWVzdCgpLnBhdGgocGF0aCkubWV0aG9kKG1ldGhvZCkuYnVpbGQoKS5zZW5kKCk7CiAgICAgICAgICAgICBIdHRwUmVzcG9uc2UgaHR0cFJlc3BvbnNlID0gaHR0cENsaWVudC5nZXRIdHRwUmVzcG9uc2UoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpbnQgY29kZSA9IGh0dHBSZXNwb25zZS5nZXRTdGF0dXMoKTsKICAgICAgICAgICAgIGJvb2xlYW4gb2sgPSAoY29kZSA9PSBzdGF0dXMpOwogICAgICAgICAgICAgaWYgKGNoZWNrT0tTdGF0dXNPbmx5KSB7CkBAIC0xMTYsNyArMTE2LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJpcyA9IG51bGw7CiAgICAgICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBiaXMgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IFN0cmluZ1JlYWRlcihodHRwUmVzcG9uc2UuZ2V0Qm9keSgpKSk7CiAgICAgICAgICAgICAgICAgbGluZSA9IGJpcy5yZWFkTGluZSgpOwpAQCAtMTI0LDcgKzEyNCw3IEBACiAgICAgICAgICAgICAgICAgb2sgPSBsaW5lLm1hdGNoZXMobWF0Y2hSZWdleCk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJtYXRjaGVzOiAiICsgb2spOwogICAgICAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGV4KXsKLSAgICAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsgICAKKyAgICAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJUZXN0IFVOUFJFRElDVEVELUZBSUxVUkUiKTsKICAgICAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICAgICAgdHJ5IHsKQEAgLTEzNSw5ICsxMzUsOSBAQAogICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmUKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgcmV0dXJuIG9rOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvbWFwcGluZ0Rpc2NvdmVyeS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL21hcHBpbmdEaXNjb3ZlcnkvYnVpbGQucHJvcGVydGllcwppbmRleCBhYWFhNDJmLi4wZDEzZDA3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvbWFwcGluZ0Rpc2NvdmVyeS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9tYXBwaW5nRGlzY292ZXJ5L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC00LjAtbWFwcGluZy1kaXNjb3ZlcnkiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9tYXBwaW5nRGlzY292ZXJ5L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9tYXBwaW5nRGlzY292ZXJ5L2J1aWxkLnhtbAppbmRleCBmZWY3MjUxLi4wNGYyNmE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvbWFwcGluZ0Rpc2NvdmVyeS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL21hcHBpbmdEaXNjb3ZlcnkvYnVpbGQueG1sCkBAIC0zNSw3ICszNSw3IEBACiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgICAgPGRlbGV0ZSBmaWxlPSJXZWJUZXN0LmNsYXNzIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDYsMTAgKzQ2LDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiPgpAQCAtNTksMTQgKzU5LDE0IEBACiAgICAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhYz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiIGZvcms9InRydWUiPgogICAgICAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0iUzFBU19IT01FIiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL21hcHBpbmdEaXNjb3ZlcnkvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL21hcHBpbmdEaXNjb3ZlcnkvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDRlMzNiMzMuLjUwYzY5M2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9tYXBwaW5nRGlzY292ZXJ5L2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvbWFwcGluZ0Rpc2NvdmVyeS9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTU2LDcgKzU2LDcgQEAKICAgICAgICAgPHNlcnZsZXQtbmFtZT5CSW5jbHVkZXNDPC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vQkluY2x1ZGVzQzwvdXJsLXBhdHRlcm4+CiAgICAgPC9zZXJ2bGV0LW1hcHBpbmc+Ci0gICAgCisKICAgICA8IS0tIGFzeW5jIGNhc2VzIC0tPgogICAgIDxzZXJ2bGV0PgogICAgICAgICA8c2VydmxldC1uYW1lPkFBc3luY0Rpc3BhdGNoVG9DPC9zZXJ2bGV0LW5hbWU+CkBAIC0xMTIsNSArMTEyLDUgQEAKICAgICAgICAgPHVybC1wYXR0ZXJuPi9hLyo8L3VybC1wYXR0ZXJuPgogICAgICAgICA8dXJsLXBhdHRlcm4+Ly8qPC91cmwtcGF0dGVybj4KICAgICA8L3NlcnZsZXQtbWFwcGluZz4KLSAgICAKKwogPC93ZWItYXBwPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL21hcHBpbmdEaXNjb3Zlcnkvc2VydmxldC9BQXN5bmNEaXNwYXRjaFRvQy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL21hcHBpbmdEaXNjb3Zlcnkvc2VydmxldC9BQXN5bmNEaXNwYXRjaFRvQy5qYXZhCmluZGV4IDk3NzBhYTIuLjAzZWE1NjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9tYXBwaW5nRGlzY292ZXJ5L3NlcnZsZXQvQUFzeW5jRGlzcGF0Y2hUb0MuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvbWFwcGluZ0Rpc2NvdmVyeS9zZXJ2bGV0L0FBc3luY0Rpc3BhdGNoVG9DLmphdmEKQEAgLTM3LDE3ICszNywxNyBAQAogICAgIHByb3RlY3RlZCB2b2lkIHByb2Nlc3NSZXF1ZXN0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKQogICAgICAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgQXN5bmNDb250ZXh0IGFzeW5jQ29udGV4dCA9IHJlcXVlc3Quc3RhcnRBc3luYygpOwotICAgICAgICAKLSAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiBnZXRIdHRwU2VydmxldE1hcHBpbmc6ICIgCisKKyAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiBnZXRIdHRwU2VydmxldE1hcHBpbmc6ICIKICAgICAgICAgICAgICAgICArIHJlcXVlc3QuZ2V0SHR0cFNlcnZsZXRNYXBwaW5nKCkpOwogICAgICAgICBIdHRwU2VydmxldE1hcHBpbmcgZm9yd2FyZE1hcHBpbmcgPSAoSHR0cFNlcnZsZXRNYXBwaW5nKSByZXF1ZXN0LmdldEF0dHJpYnV0ZShSZXF1ZXN0RGlzcGF0Y2hlci5GT1JXQVJEX01BUFBJTkcpOwotICAgICAgICByZXF1ZXN0LmdldFNlcnZsZXRDb250ZXh0KCkubG9nKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiIEZPUldBUkRfTUFQUElORyBhdHRyaWJ1dGU6ICIgCisgICAgICAgIHJlcXVlc3QuZ2V0U2VydmxldENvbnRleHQoKS5sb2codGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSArICIgRk9SV0FSRF9NQVBQSU5HIGF0dHJpYnV0ZTogIgogICAgICAgICAgICAgICAgICsgZm9yd2FyZE1hcHBpbmcpOwogICAgICAgICBIdHRwU2VydmxldE1hcHBpbmcgaW5jbHVkZU1hcHBpbmcgPSAoSHR0cFNlcnZsZXRNYXBwaW5nKSByZXF1ZXN0LmdldEF0dHJpYnV0ZShSZXF1ZXN0RGlzcGF0Y2hlci5JTkNMVURFX01BUFBJTkcpOwotICAgICAgICByZXF1ZXN0LmdldFNlcnZsZXRDb250ZXh0KCkubG9nKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiIElOQ0xVREVfTUFQUElORyBhdHRyaWJ1dGU6ICIgCisgICAgICAgIHJlcXVlc3QuZ2V0U2VydmxldENvbnRleHQoKS5sb2codGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSArICIgSU5DTFVERV9NQVBQSU5HIGF0dHJpYnV0ZTogIgogICAgICAgICAgICAgICAgICsgaW5jbHVkZU1hcHBpbmcpOwogICAgICAgICBIdHRwU2VydmxldE1hcHBpbmcgYXN5bmNNYXBwaW5nID0gKEh0dHBTZXJ2bGV0TWFwcGluZykgcmVxdWVzdC5nZXRBdHRyaWJ1dGUoQXN5bmNDb250ZXh0LkFTWU5DX01BUFBJTkcpOwotICAgICAgICByZXF1ZXN0LmdldFNlcnZsZXRDb250ZXh0KCkubG9nKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiIEFTWU5DX01BUFBJTkcgYXR0cmlidXRlOiAiIAorICAgICAgICByZXF1ZXN0LmdldFNlcnZsZXRDb250ZXh0KCkubG9nKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiIEFTWU5DX01BUFBJTkcgYXR0cmlidXRlOiAiCiAgICAgICAgICAgICAgICAgKyBhc3luY01hcHBpbmcpOwogICAgICAgICBhc3luY0NvbnRleHQuZGlzcGF0Y2goIi9TZXJ2bGV0QyIpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9tYXBwaW5nRGlzY292ZXJ5L3NlcnZsZXQvQUZvcndhcmRUb0IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9tYXBwaW5nRGlzY292ZXJ5L3NlcnZsZXQvQUZvcndhcmRUb0IuamF2YQppbmRleCBmODdiZTY1Li45MGFlMmMwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvbWFwcGluZ0Rpc2NvdmVyeS9zZXJ2bGV0L0FGb3J3YXJkVG9CLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL21hcHBpbmdEaXNjb3Zlcnkvc2VydmxldC9BRm9yd2FyZFRvQi5qYXZhCkBAIC0zNywxNiArMzcsMTYgQEAKICAgICAgKi8KICAgICBwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzUmVxdWVzdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkKICAgICAgICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIHJlcXVlc3QuZ2V0U2VydmxldENvbnRleHQoKS5sb2codGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSArICIgZ2V0SHR0cFNlcnZsZXRNYXBwaW5nOiAiIAorICAgICAgICByZXF1ZXN0LmdldFNlcnZsZXRDb250ZXh0KCkubG9nKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiIGdldEh0dHBTZXJ2bGV0TWFwcGluZzogIgogICAgICAgICAgICAgICAgICsgcmVxdWVzdC5nZXRIdHRwU2VydmxldE1hcHBpbmcoKSk7CiAgICAgICAgIEh0dHBTZXJ2bGV0TWFwcGluZyBmb3J3YXJkTWFwcGluZyA9IChIdHRwU2VydmxldE1hcHBpbmcpIHJlcXVlc3QuZ2V0QXR0cmlidXRlKFJlcXVlc3REaXNwYXRjaGVyLkZPUldBUkRfTUFQUElORyk7Ci0gICAgICAgIHJlcXVlc3QuZ2V0U2VydmxldENvbnRleHQoKS5sb2codGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSArICIgRk9SV0FSRF9NQVBQSU5HIGF0dHJpYnV0ZTogIiAKKyAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiBGT1JXQVJEX01BUFBJTkcgYXR0cmlidXRlOiAiCiAgICAgICAgICAgICAgICAgKyBmb3J3YXJkTWFwcGluZyk7CiAgICAgICAgIEh0dHBTZXJ2bGV0TWFwcGluZyBpbmNsdWRlTWFwcGluZyA9IChIdHRwU2VydmxldE1hcHBpbmcpIHJlcXVlc3QuZ2V0QXR0cmlidXRlKFJlcXVlc3REaXNwYXRjaGVyLklOQ0xVREVfTUFQUElORyk7Ci0gICAgICAgIHJlcXVlc3QuZ2V0U2VydmxldENvbnRleHQoKS5sb2codGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSArICIgSU5DTFVERV9NQVBQSU5HIGF0dHJpYnV0ZTogIiAKKyAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiBJTkNMVURFX01BUFBJTkcgYXR0cmlidXRlOiAiCiAgICAgICAgICAgICAgICAgKyBpbmNsdWRlTWFwcGluZyk7CiAgICAgICAgIEh0dHBTZXJ2bGV0TWFwcGluZyBhc3luY01hcHBpbmcgPSAoSHR0cFNlcnZsZXRNYXBwaW5nKSByZXF1ZXN0LmdldEF0dHJpYnV0ZShBc3luY0NvbnRleHQuQVNZTkNfTUFQUElORyk7Ci0gICAgICAgIHJlcXVlc3QuZ2V0U2VydmxldENvbnRleHQoKS5sb2codGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSArICIgQVNZTkNfTUFQUElORyBhdHRyaWJ1dGU6ICIgCisgICAgICAgIHJlcXVlc3QuZ2V0U2VydmxldENvbnRleHQoKS5sb2codGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSArICIgQVNZTkNfTUFQUElORyBhdHRyaWJ1dGU6ICIKICAgICAgICAgICAgICAgICArIGFzeW5jTWFwcGluZyk7CiAgICAgICAgIFJlcXVlc3REaXNwYXRjaGVyIHJkID0gcmVxdWVzdC5nZXRSZXF1ZXN0RGlzcGF0Y2hlcigiL0JGb3J3YXJkVG9DIik7CiAgICAgICAgIHJkLmZvcndhcmQocmVxdWVzdCwgcmVzcG9uc2UpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL21hcHBpbmdEaXNjb3Zlcnkvc2VydmxldC9BSW5jbHVkZXNCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvbWFwcGluZ0Rpc2NvdmVyeS9zZXJ2bGV0L0FJbmNsdWRlc0IuamF2YQppbmRleCAxM2Q0YTlmLi5jMzIxOWFkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvbWFwcGluZ0Rpc2NvdmVyeS9zZXJ2bGV0L0FJbmNsdWRlc0IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvbWFwcGluZ0Rpc2NvdmVyeS9zZXJ2bGV0L0FJbmNsdWRlc0IuamF2YQpAQCAtNDQsMTcgKzQ0LDE3IEBACiAgICAgICAgICAgICBvdXQucHJpbnQoIjwhRE9DVFlQRSBodG1sPiIpOwogICAgICAgICAgICAgb3V0LnByaW50KCI8aHRtbD4iKTsKICAgICAgICAgICAgIG91dC5wcmludCgiPGhlYWQ+Iik7Ci0gICAgICAgICAgICBvdXQucHJpbnQoIjx0aXRsZT5TZXJ2bGV0IEFJbmNsdWRlc0I8L3RpdGxlPiIpOyAgICAgICAgICAgIAorICAgICAgICAgICAgb3V0LnByaW50KCI8dGl0bGU+U2VydmxldCBBSW5jbHVkZXNCPC90aXRsZT4iKTsKICAgICAgICAgICAgIG91dC5wcmludCgiPC9oZWFkPiIpOwogICAgICAgICAgICAgb3V0LnByaW50KCI8Ym9keT4iKTsKICAgICAgICAgICAgIG91dC5wcmludCgiPGgxPlNlcnZsZXQgQUluY2x1ZGVzQiBhdCAiICsgcmVxdWVzdC5nZXRDb250ZXh0UGF0aCgpICsgIjwvaDE+Iik7Ci0gICAgICAgICAgICByZXF1ZXN0LmdldFNlcnZsZXRDb250ZXh0KCkubG9nKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiIGdldEh0dHBTZXJ2bGV0TWFwcGluZzogIiAKKyAgICAgICAgICAgIHJlcXVlc3QuZ2V0U2VydmxldENvbnRleHQoKS5sb2codGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSArICIgZ2V0SHR0cFNlcnZsZXRNYXBwaW5nOiAiCiAgICAgICAgICAgICAgICAgICAgICsgcmVxdWVzdC5nZXRIdHRwU2VydmxldE1hcHBpbmcoKSk7CiAgICAgICAgICAgICBIdHRwU2VydmxldE1hcHBpbmcgZm9yd2FyZE1hcHBpbmcgPSAoSHR0cFNlcnZsZXRNYXBwaW5nKSByZXF1ZXN0LmdldEF0dHJpYnV0ZShSZXF1ZXN0RGlzcGF0Y2hlci5GT1JXQVJEX01BUFBJTkcpOwotICAgICAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiBGT1JXQVJEX01BUFBJTkcgYXR0cmlidXRlOiAiIAorICAgICAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiBGT1JXQVJEX01BUFBJTkcgYXR0cmlidXRlOiAiCiAgICAgICAgICAgICAgICAgICAgICsgZm9yd2FyZE1hcHBpbmcpOwogICAgICAgICAgICAgSHR0cFNlcnZsZXRNYXBwaW5nIGluY2x1ZGVNYXBwaW5nID0gKEh0dHBTZXJ2bGV0TWFwcGluZykgcmVxdWVzdC5nZXRBdHRyaWJ1dGUoUmVxdWVzdERpc3BhdGNoZXIuSU5DTFVERV9NQVBQSU5HKTsKLSAgICAgICAgICAgIHJlcXVlc3QuZ2V0U2VydmxldENvbnRleHQoKS5sb2codGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSArICIgSU5DTFVERV9NQVBQSU5HIGF0dHJpYnV0ZTogIiAKKyAgICAgICAgICAgIHJlcXVlc3QuZ2V0U2VydmxldENvbnRleHQoKS5sb2codGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSArICIgSU5DTFVERV9NQVBQSU5HIGF0dHJpYnV0ZTogIgogICAgICAgICAgICAgICAgICAgICArIGluY2x1ZGVNYXBwaW5nKTsKICAgICAgICAgICAgIG91dC5wcmludCgiPHA+IEluICIgKyB0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiAiICsgcmVxdWVzdC5nZXRIdHRwU2VydmxldE1hcHBpbmcoKSArICI8L3A+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnQoIjxwPiBGT1JXQVJEX01BUFBJTkc6ICIgKyBmb3J3YXJkTWFwcGluZyArICI8L3A+Iik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvbWFwcGluZ0Rpc2NvdmVyeS9zZXJ2bGV0L0JGb3J3YXJkVG9DLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvbWFwcGluZ0Rpc2NvdmVyeS9zZXJ2bGV0L0JGb3J3YXJkVG9DLmphdmEKaW5kZXggYzkzNGRiNi4uMmFkZjRlZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL21hcHBpbmdEaXNjb3Zlcnkvc2VydmxldC9CRm9yd2FyZFRvQy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9tYXBwaW5nRGlzY292ZXJ5L3NlcnZsZXQvQkZvcndhcmRUb0MuamF2YQpAQCAtMzcsMTYgKzM3LDE2IEBACiAgICAgICovCiAgICAgcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc1JlcXVlc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCiAgICAgICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotICAgICAgICByZXF1ZXN0LmdldFNlcnZsZXRDb250ZXh0KCkubG9nKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiICIgCisgICAgICAgIHJlcXVlc3QuZ2V0U2VydmxldENvbnRleHQoKS5sb2codGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSArICIgIgogICAgICAgICAgICAgICAgICsgcmVxdWVzdC5nZXRIdHRwU2VydmxldE1hcHBpbmcoKSk7CiAgICAgICAgIEh0dHBTZXJ2bGV0TWFwcGluZyBmb3J3YXJkTWFwcGluZyA9IChIdHRwU2VydmxldE1hcHBpbmcpIHJlcXVlc3QuZ2V0QXR0cmlidXRlKFJlcXVlc3REaXNwYXRjaGVyLkZPUldBUkRfTUFQUElORyk7Ci0gICAgICAgIHJlcXVlc3QuZ2V0U2VydmxldENvbnRleHQoKS5sb2codGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSArICIgRk9SV0FSRF9NQVBQSU5HIGF0dHJpYnV0ZTogIiAKKyAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiBGT1JXQVJEX01BUFBJTkcgYXR0cmlidXRlOiAiCiAgICAgICAgICAgICAgICAgKyBmb3J3YXJkTWFwcGluZyk7CiAgICAgICAgIEh0dHBTZXJ2bGV0TWFwcGluZyBpbmNsdWRlTWFwcGluZyA9IChIdHRwU2VydmxldE1hcHBpbmcpIHJlcXVlc3QuZ2V0QXR0cmlidXRlKFJlcXVlc3REaXNwYXRjaGVyLklOQ0xVREVfTUFQUElORyk7Ci0gICAgICAgIHJlcXVlc3QuZ2V0U2VydmxldENvbnRleHQoKS5sb2codGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSArICIgSU5DTFVERV9NQVBQSU5HIGF0dHJpYnV0ZTogIiAKKyAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiBJTkNMVURFX01BUFBJTkcgYXR0cmlidXRlOiAiCiAgICAgICAgICAgICAgICAgKyBpbmNsdWRlTWFwcGluZyk7CiAgICAgICAgIEh0dHBTZXJ2bGV0TWFwcGluZyBhc3luY01hcHBpbmcgPSAoSHR0cFNlcnZsZXRNYXBwaW5nKSByZXF1ZXN0LmdldEF0dHJpYnV0ZShBc3luY0NvbnRleHQuQVNZTkNfTUFQUElORyk7Ci0gICAgICAgIHJlcXVlc3QuZ2V0U2VydmxldENvbnRleHQoKS5sb2codGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSArICIgQVNZTkNfTUFQUElORyBhdHRyaWJ1dGU6ICIgCisgICAgICAgIHJlcXVlc3QuZ2V0U2VydmxldENvbnRleHQoKS5sb2codGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSArICIgQVNZTkNfTUFQUElORyBhdHRyaWJ1dGU6ICIKICAgICAgICAgICAgICAgICArIGFzeW5jTWFwcGluZyk7CiAgICAgICAgIFJlcXVlc3REaXNwYXRjaGVyIHJkID0gcmVxdWVzdC5nZXRSZXF1ZXN0RGlzcGF0Y2hlcigiL1NlcnZsZXRDIik7CiAgICAgICAgIHJkLmZvcndhcmQocmVxdWVzdCwgcmVzcG9uc2UpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL21hcHBpbmdEaXNjb3Zlcnkvc2VydmxldC9CRm9yd2FyZFRvQ05hbWVkRGlzcGF0Y2hlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL21hcHBpbmdEaXNjb3Zlcnkvc2VydmxldC9CRm9yd2FyZFRvQ05hbWVkRGlzcGF0Y2hlci5qYXZhCmluZGV4IDczNzE5NzUuLjcxYTViNGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9tYXBwaW5nRGlzY292ZXJ5L3NlcnZsZXQvQkZvcndhcmRUb0NOYW1lZERpc3BhdGNoZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvbWFwcGluZ0Rpc2NvdmVyeS9zZXJ2bGV0L0JGb3J3YXJkVG9DTmFtZWREaXNwYXRjaGVyLmphdmEKQEAgLTM3LDE2ICszNywxNiBAQAogICAgICAqLwogICAgIHByb3RlY3RlZCB2b2lkIHByb2Nlc3NSZXF1ZXN0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKQogICAgICAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLSAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiAiIAorICAgICAgICByZXF1ZXN0LmdldFNlcnZsZXRDb250ZXh0KCkubG9nKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiICIKICAgICAgICAgICAgICAgICArIHJlcXVlc3QuZ2V0SHR0cFNlcnZsZXRNYXBwaW5nKCkpOwogICAgICAgICBIdHRwU2VydmxldE1hcHBpbmcgZm9yd2FyZE1hcHBpbmcgPSAoSHR0cFNlcnZsZXRNYXBwaW5nKSByZXF1ZXN0LmdldEF0dHJpYnV0ZShSZXF1ZXN0RGlzcGF0Y2hlci5GT1JXQVJEX01BUFBJTkcpOwotICAgICAgICByZXF1ZXN0LmdldFNlcnZsZXRDb250ZXh0KCkubG9nKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiIEZPUldBUkRfTUFQUElORyBhdHRyaWJ1dGU6ICIgCisgICAgICAgIHJlcXVlc3QuZ2V0U2VydmxldENvbnRleHQoKS5sb2codGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSArICIgRk9SV0FSRF9NQVBQSU5HIGF0dHJpYnV0ZTogIgogICAgICAgICAgICAgICAgICsgZm9yd2FyZE1hcHBpbmcpOwogICAgICAgICBIdHRwU2VydmxldE1hcHBpbmcgaW5jbHVkZU1hcHBpbmcgPSAoSHR0cFNlcnZsZXRNYXBwaW5nKSByZXF1ZXN0LmdldEF0dHJpYnV0ZShSZXF1ZXN0RGlzcGF0Y2hlci5JTkNMVURFX01BUFBJTkcpOwotICAgICAgICByZXF1ZXN0LmdldFNlcnZsZXRDb250ZXh0KCkubG9nKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiIElOQ0xVREVfTUFQUElORyBhdHRyaWJ1dGU6ICIgCisgICAgICAgIHJlcXVlc3QuZ2V0U2VydmxldENvbnRleHQoKS5sb2codGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSArICIgSU5DTFVERV9NQVBQSU5HIGF0dHJpYnV0ZTogIgogICAgICAgICAgICAgICAgICsgaW5jbHVkZU1hcHBpbmcpOwogICAgICAgICBIdHRwU2VydmxldE1hcHBpbmcgYXN5bmNNYXBwaW5nID0gKEh0dHBTZXJ2bGV0TWFwcGluZykgcmVxdWVzdC5nZXRBdHRyaWJ1dGUoQXN5bmNDb250ZXh0LkFTWU5DX01BUFBJTkcpOwotICAgICAgICByZXF1ZXN0LmdldFNlcnZsZXRDb250ZXh0KCkubG9nKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiIEFTWU5DX01BUFBJTkcgYXR0cmlidXRlOiAiIAorICAgICAgICByZXF1ZXN0LmdldFNlcnZsZXRDb250ZXh0KCkubG9nKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiIEFTWU5DX01BUFBJTkcgYXR0cmlidXRlOiAiCiAgICAgICAgICAgICAgICAgKyBhc3luY01hcHBpbmcpOwogICAgICAgICBSZXF1ZXN0RGlzcGF0Y2hlciByZCA9IHJlcXVlc3QuZ2V0U2VydmxldENvbnRleHQoKS5nZXROYW1lZERpc3BhdGNoZXIoIlNlcnZsZXRDIik7CiAgICAgICAgIHJkLmZvcndhcmQocmVxdWVzdCwgcmVzcG9uc2UpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL21hcHBpbmdEaXNjb3Zlcnkvc2VydmxldC9CSW5jbHVkZUNOYW1lZERpc3BhdGNoZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9tYXBwaW5nRGlzY292ZXJ5L3NlcnZsZXQvQkluY2x1ZGVDTmFtZWREaXNwYXRjaGVyLmphdmEKaW5kZXggNDU3OWMwZC4uYzY1NzEyZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL21hcHBpbmdEaXNjb3Zlcnkvc2VydmxldC9CSW5jbHVkZUNOYW1lZERpc3BhdGNoZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvbWFwcGluZ0Rpc2NvdmVyeS9zZXJ2bGV0L0JJbmNsdWRlQ05hbWVkRGlzcGF0Y2hlci5qYXZhCkBAIC0zNywxNiArMzcsMTYgQEAKICAgICAgKi8KICAgICBwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzUmVxdWVzdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkKICAgICAgICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIHJlcXVlc3QuZ2V0U2VydmxldENvbnRleHQoKS5sb2codGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSArICIgIiAKKyAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiAiCiAgICAgICAgICAgICAgICAgKyByZXF1ZXN0LmdldEh0dHBTZXJ2bGV0TWFwcGluZygpKTsKICAgICAgICAgSHR0cFNlcnZsZXRNYXBwaW5nIGZvcndhcmRNYXBwaW5nID0gKEh0dHBTZXJ2bGV0TWFwcGluZykgcmVxdWVzdC5nZXRBdHRyaWJ1dGUoUmVxdWVzdERpc3BhdGNoZXIuRk9SV0FSRF9NQVBQSU5HKTsKLSAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiBGT1JXQVJEX01BUFBJTkcgYXR0cmlidXRlOiAiIAorICAgICAgICByZXF1ZXN0LmdldFNlcnZsZXRDb250ZXh0KCkubG9nKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiIEZPUldBUkRfTUFQUElORyBhdHRyaWJ1dGU6ICIKICAgICAgICAgICAgICAgICArIGZvcndhcmRNYXBwaW5nKTsKICAgICAgICAgSHR0cFNlcnZsZXRNYXBwaW5nIGluY2x1ZGVNYXBwaW5nID0gKEh0dHBTZXJ2bGV0TWFwcGluZykgcmVxdWVzdC5nZXRBdHRyaWJ1dGUoUmVxdWVzdERpc3BhdGNoZXIuSU5DTFVERV9NQVBQSU5HKTsKLSAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiBJTkNMVURFX01BUFBJTkcgYXR0cmlidXRlOiAiIAorICAgICAgICByZXF1ZXN0LmdldFNlcnZsZXRDb250ZXh0KCkubG9nKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiIElOQ0xVREVfTUFQUElORyBhdHRyaWJ1dGU6ICIKICAgICAgICAgICAgICAgICArIGluY2x1ZGVNYXBwaW5nKTsKICAgICAgICAgSHR0cFNlcnZsZXRNYXBwaW5nIGFzeW5jTWFwcGluZyA9IChIdHRwU2VydmxldE1hcHBpbmcpIHJlcXVlc3QuZ2V0QXR0cmlidXRlKEFzeW5jQ29udGV4dC5BU1lOQ19NQVBQSU5HKTsKLSAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiBBU1lOQ19NQVBQSU5HIGF0dHJpYnV0ZTogIiAKKyAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiBBU1lOQ19NQVBQSU5HIGF0dHJpYnV0ZTogIgogICAgICAgICAgICAgICAgICsgYXN5bmNNYXBwaW5nKTsKICAgICAgICAgUmVxdWVzdERpc3BhdGNoZXIgcmQgPSByZXF1ZXN0LmdldFNlcnZsZXRDb250ZXh0KCkuZ2V0TmFtZWREaXNwYXRjaGVyKCJTZXJ2bGV0QyIpOwogICAgICAgICByZC5pbmNsdWRlKHJlcXVlc3QsIHJlc3BvbnNlKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9tYXBwaW5nRGlzY292ZXJ5L3NlcnZsZXQvQkluY2x1ZGVEaXNwYXRjaFNlcnZsZXROYW1lZERpc3BhdGNoZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9tYXBwaW5nRGlzY292ZXJ5L3NlcnZsZXQvQkluY2x1ZGVEaXNwYXRjaFNlcnZsZXROYW1lZERpc3BhdGNoZXIuamF2YQppbmRleCAwZmY3NWI1Li43ODdmNzVkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvbWFwcGluZ0Rpc2NvdmVyeS9zZXJ2bGV0L0JJbmNsdWRlRGlzcGF0Y2hTZXJ2bGV0TmFtZWREaXNwYXRjaGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL21hcHBpbmdEaXNjb3Zlcnkvc2VydmxldC9CSW5jbHVkZURpc3BhdGNoU2VydmxldE5hbWVkRGlzcGF0Y2hlci5qYXZhCkBAIC0zNywxNiArMzcsMTYgQEAKICAgICAgKi8KICAgICBwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzUmVxdWVzdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkKICAgICAgICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIHJlcXVlc3QuZ2V0U2VydmxldENvbnRleHQoKS5sb2codGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSArICIgIiAKKyAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiAiCiAgICAgICAgICAgICAgICAgKyByZXF1ZXN0LmdldEh0dHBTZXJ2bGV0TWFwcGluZygpKTsKICAgICAgICAgSHR0cFNlcnZsZXRNYXBwaW5nIGZvcndhcmRNYXBwaW5nID0gKEh0dHBTZXJ2bGV0TWFwcGluZykgcmVxdWVzdC5nZXRBdHRyaWJ1dGUoUmVxdWVzdERpc3BhdGNoZXIuRk9SV0FSRF9NQVBQSU5HKTsKLSAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiBGT1JXQVJEX01BUFBJTkcgYXR0cmlidXRlOiAiIAorICAgICAgICByZXF1ZXN0LmdldFNlcnZsZXRDb250ZXh0KCkubG9nKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiIEZPUldBUkRfTUFQUElORyBhdHRyaWJ1dGU6ICIKICAgICAgICAgICAgICAgICArIGZvcndhcmRNYXBwaW5nKTsKICAgICAgICAgSHR0cFNlcnZsZXRNYXBwaW5nIGluY2x1ZGVNYXBwaW5nID0gKEh0dHBTZXJ2bGV0TWFwcGluZykgcmVxdWVzdC5nZXRBdHRyaWJ1dGUoUmVxdWVzdERpc3BhdGNoZXIuSU5DTFVERV9NQVBQSU5HKTsKLSAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiBJTkNMVURFX01BUFBJTkcgYXR0cmlidXRlOiAiIAorICAgICAgICByZXF1ZXN0LmdldFNlcnZsZXRDb250ZXh0KCkubG9nKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiIElOQ0xVREVfTUFQUElORyBhdHRyaWJ1dGU6ICIKICAgICAgICAgICAgICAgICArIGluY2x1ZGVNYXBwaW5nKTsKICAgICAgICAgSHR0cFNlcnZsZXRNYXBwaW5nIGFzeW5jTWFwcGluZyA9IChIdHRwU2VydmxldE1hcHBpbmcpIHJlcXVlc3QuZ2V0QXR0cmlidXRlKEFzeW5jQ29udGV4dC5BU1lOQ19NQVBQSU5HKTsKLSAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiBBU1lOQ19NQVBQSU5HIGF0dHJpYnV0ZTogIiAKKyAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiBBU1lOQ19NQVBQSU5HIGF0dHJpYnV0ZTogIgogICAgICAgICAgICAgICAgICsgYXN5bmNNYXBwaW5nKTsKICAgICAgICAgUmVxdWVzdERpc3BhdGNoZXIgcmQgPSByZXF1ZXN0LmdldFNlcnZsZXRDb250ZXh0KCkuZ2V0TmFtZWREaXNwYXRjaGVyKCJmYTVyYVAiKTsKICAgICAgICAgcmQuaW5jbHVkZShyZXF1ZXN0LCByZXNwb25zZSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvbWFwcGluZ0Rpc2NvdmVyeS9zZXJ2bGV0L0JJbmNsdWRlc0MuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9tYXBwaW5nRGlzY292ZXJ5L3NlcnZsZXQvQkluY2x1ZGVzQy5qYXZhCmluZGV4IDlhYmM3Y2EuLjIwNzVlYWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9tYXBwaW5nRGlzY292ZXJ5L3NlcnZsZXQvQkluY2x1ZGVzQy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9tYXBwaW5nRGlzY292ZXJ5L3NlcnZsZXQvQkluY2x1ZGVzQy5qYXZhCkBAIC00MSwxMyArNDEsMTMgQEAKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAvKiBUT0RPIG91dHB1dCB5b3VyIHBhZ2UgaGVyZS4gWW91IG1heSB1c2UgZm9sbG93aW5nIHNhbXBsZSBjb2RlLiAqLwotICAgICAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiAiIAorICAgICAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiAiCiAgICAgICAgICAgICAgICAgICAgICsgcmVxdWVzdC5nZXRIdHRwU2VydmxldE1hcHBpbmcoKSk7CiAgICAgICAgICAgICBIdHRwU2VydmxldE1hcHBpbmcgZm9yd2FyZE1hcHBpbmcgPSAoSHR0cFNlcnZsZXRNYXBwaW5nKSByZXF1ZXN0LmdldEF0dHJpYnV0ZShSZXF1ZXN0RGlzcGF0Y2hlci5GT1JXQVJEX01BUFBJTkcpOwotICAgICAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiBGT1JXQVJEX01BUFBJTkcgYXR0cmlidXRlOiAiIAorICAgICAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiBGT1JXQVJEX01BUFBJTkcgYXR0cmlidXRlOiAiCiAgICAgICAgICAgICAgICAgICAgICsgZm9yd2FyZE1hcHBpbmcpOwogICAgICAgICAgICAgSHR0cFNlcnZsZXRNYXBwaW5nIGluY2x1ZGVNYXBwaW5nID0gKEh0dHBTZXJ2bGV0TWFwcGluZykgcmVxdWVzdC5nZXRBdHRyaWJ1dGUoUmVxdWVzdERpc3BhdGNoZXIuSU5DTFVERV9NQVBQSU5HKTsKLSAgICAgICAgICAgIHJlcXVlc3QuZ2V0U2VydmxldENvbnRleHQoKS5sb2codGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSArICIgSU5DTFVERV9NQVBQSU5HIGF0dHJpYnV0ZTogIiAKKyAgICAgICAgICAgIHJlcXVlc3QuZ2V0U2VydmxldENvbnRleHQoKS5sb2codGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSArICIgSU5DTFVERV9NQVBQSU5HIGF0dHJpYnV0ZTogIgogICAgICAgICAgICAgICAgICAgICArIGluY2x1ZGVNYXBwaW5nKTsKICAgICAgICAgICAgIG91dC5wcmludCgiPHA+IEluICIgKyB0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiAiICsgcmVxdWVzdC5nZXRIdHRwU2VydmxldE1hcHBpbmcoKSArICI8L3A+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnQoIjxwPiBGT1JXQVJEX01BUFBJTkc6ICIgKyBmb3J3YXJkTWFwcGluZyArICI8L3A+Iik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvbWFwcGluZ0Rpc2NvdmVyeS9zZXJ2bGV0L0Rpc3BhdGNoU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL21hcHBpbmdEaXNjb3Zlcnkvc2VydmxldC9EaXNwYXRjaFNlcnZsZXQuamF2YQppbmRleCBiZTg1MGFkLi40M2VjMWExIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvbWFwcGluZ0Rpc2NvdmVyeS9zZXJ2bGV0L0Rpc3BhdGNoU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9tYXBwaW5nRGlzY292ZXJ5L3NlcnZsZXQvRGlzcGF0Y2hTZXJ2bGV0LmphdmEKQEAgLTI3LDE4ICsyNywxOCBAQAogcHVibGljIGNsYXNzIERpc3BhdGNoU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIAogICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIElPRXhjZXB0aW9uewotICAgICAgICAgIHJlcXVlc3QuZ2V0U2VydmxldENvbnRleHQoKS5sb2codGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSArICIgIiAKKyAgICAgICAgICByZXF1ZXN0LmdldFNlcnZsZXRDb250ZXh0KCkubG9nKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgcmVxdWVzdC5nZXRIdHRwU2VydmxldE1hcHBpbmcoKSk7CiAgICAgICAgICAgSHR0cFNlcnZsZXRNYXBwaW5nIGZvcndhcmRNYXBwaW5nID0gKEh0dHBTZXJ2bGV0TWFwcGluZykgcmVxdWVzdC5nZXRBdHRyaWJ1dGUoUmVxdWVzdERpc3BhdGNoZXIuRk9SV0FSRF9NQVBQSU5HKTsKLSAgICAgICAgICByZXF1ZXN0LmdldFNlcnZsZXRDb250ZXh0KCkubG9nKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiIEZPUldBUkRfTUFQUElORyBhdHRyaWJ1dGU6ICIgCisgICAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiBGT1JXQVJEX01BUFBJTkcgYXR0cmlidXRlOiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGZvcndhcmRNYXBwaW5nKTsKICAgICAgICAgICBIdHRwU2VydmxldE1hcHBpbmcgaW5jbHVkZU1hcHBpbmcgPSAoSHR0cFNlcnZsZXRNYXBwaW5nKSByZXF1ZXN0LmdldEF0dHJpYnV0ZShSZXF1ZXN0RGlzcGF0Y2hlci5JTkNMVURFX01BUFBJTkcpOwotICAgICAgICAgIHJlcXVlc3QuZ2V0U2VydmxldENvbnRleHQoKS5sb2codGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSArICIgSU5DTFVERV9NQVBQSU5HIGF0dHJpYnV0ZTogIiAKKyAgICAgICAgICByZXF1ZXN0LmdldFNlcnZsZXRDb250ZXh0KCkubG9nKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiIElOQ0xVREVfTUFQUElORyBhdHRyaWJ1dGU6ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgaW5jbHVkZU1hcHBpbmcpOwogICAgICAgICAgIEh0dHBTZXJ2bGV0TWFwcGluZyBhc3luY01hcHBpbmcgPSAoSHR0cFNlcnZsZXRNYXBwaW5nKSByZXF1ZXN0LmdldEF0dHJpYnV0ZShBc3luY0NvbnRleHQuQVNZTkNfTUFQUElORyk7Ci0gICAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiBBU1lOQ19NQVBQSU5HIGF0dHJpYnV0ZTogIiAKKyAgICAgICAgICByZXF1ZXN0LmdldFNlcnZsZXRDb250ZXh0KCkubG9nKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiIEFTWU5DX01BUFBJTkcgYXR0cmlidXRlOiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGFzeW5jTWFwcGluZyk7Ci0gICAgICAgICAgCisKICAgICBBc3luY0NvbnRleHQgYXN5bmNDb250ZXh0ID0gcmVxdWVzdC5zdGFydEFzeW5jKCk7CiAgICAgYXN5bmNDb250ZXh0LnNldFRpbWVvdXQoMCk7CiAgICAgYXN5bmNDb250ZXh0LmRpc3BhdGNoKCIvU2VydmxldEMiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9tYXBwaW5nRGlzY292ZXJ5L3NlcnZsZXQvU2VydmxldEMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9tYXBwaW5nRGlzY292ZXJ5L3NlcnZsZXQvU2VydmxldEMuamF2YQppbmRleCAyM2FhZDgzLi5iMWFiNzk1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvbWFwcGluZ0Rpc2NvdmVyeS9zZXJ2bGV0L1NlcnZsZXRDLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL21hcHBpbmdEaXNjb3Zlcnkvc2VydmxldC9TZXJ2bGV0Qy5qYXZhCkBAIC00MSwxNiArNDEsMTYgQEAKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAvKiBUT0RPIG91dHB1dCB5b3VyIHBhZ2UgaGVyZS4gWW91IG1heSB1c2UgZm9sbG93aW5nIHNhbXBsZSBjb2RlLiAqLwotICAgICAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiAiIAorICAgICAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiAiCiAgICAgICAgICAgICAgICAgICAgICsgcmVxdWVzdC5nZXRIdHRwU2VydmxldE1hcHBpbmcoKSk7CiAgICAgICAgICAgICBIdHRwU2VydmxldE1hcHBpbmcgZm9yd2FyZE1hcHBpbmcgPSAoSHR0cFNlcnZsZXRNYXBwaW5nKSByZXF1ZXN0LmdldEF0dHJpYnV0ZShSZXF1ZXN0RGlzcGF0Y2hlci5GT1JXQVJEX01BUFBJTkcpOwotICAgICAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiBGT1JXQVJEX01BUFBJTkcgYXR0cmlidXRlOiAiIAorICAgICAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiBGT1JXQVJEX01BUFBJTkcgYXR0cmlidXRlOiAiCiAgICAgICAgICAgICAgICAgICAgICsgZm9yd2FyZE1hcHBpbmcpOwogICAgICAgICAgICAgSHR0cFNlcnZsZXRNYXBwaW5nIGluY2x1ZGVNYXBwaW5nID0gKEh0dHBTZXJ2bGV0TWFwcGluZykgcmVxdWVzdC5nZXRBdHRyaWJ1dGUoUmVxdWVzdERpc3BhdGNoZXIuSU5DTFVERV9NQVBQSU5HKTsKLSAgICAgICAgICAgIHJlcXVlc3QuZ2V0U2VydmxldENvbnRleHQoKS5sb2codGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSArICIgSU5DTFVERV9NQVBQSU5HIGF0dHJpYnV0ZTogIiAKKyAgICAgICAgICAgIHJlcXVlc3QuZ2V0U2VydmxldENvbnRleHQoKS5sb2codGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSArICIgSU5DTFVERV9NQVBQSU5HIGF0dHJpYnV0ZTogIgogICAgICAgICAgICAgICAgICAgICArIGluY2x1ZGVNYXBwaW5nKTsKICAgICAgICAgICAgIEh0dHBTZXJ2bGV0TWFwcGluZyBhc3luY01hcHBpbmcgPSAoSHR0cFNlcnZsZXRNYXBwaW5nKSByZXF1ZXN0LmdldEF0dHJpYnV0ZShBc3luY0NvbnRleHQuQVNZTkNfTUFQUElORyk7Ci0gICAgICAgICAgICByZXF1ZXN0LmdldFNlcnZsZXRDb250ZXh0KCkubG9nKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiIEFTWU5DX01BUFBJTkcgYXR0cmlidXRlOiAiIAorICAgICAgICAgICAgcmVxdWVzdC5nZXRTZXJ2bGV0Q29udGV4dCgpLmxvZyh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiBBU1lOQ19NQVBQSU5HIGF0dHJpYnV0ZTogIgogICAgICAgICAgICAgICAgICAgICArIGFzeW5jTWFwcGluZyk7CiAgICAgICAgICAgICBvdXQucHJpbnQoIjxwPiBJbiAiICsgdGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSArICIgIiArIHJlcXVlc3QuZ2V0SHR0cFNlcnZsZXRNYXBwaW5nKCkgKyAiPC9wPiIpOwogICAgICAgICAgICAgb3V0LnByaW50KCI8cD4gRk9SV0FSRF9NQVBQSU5HOiAiICsgZm9yd2FyZE1hcHBpbmcgKyAiPC9wPiIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hBcmJpdHJhcnlNZXRob2QvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hBcmJpdHJhcnlNZXRob2QvV2ViVGVzdC5qYXZhCmluZGV4IDg3ZjdmMjEuLjMzMmY2MDEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoQXJiaXRyYXJ5TWV0aG9kL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaEFyYml0cmFyeU1ldGhvZC9XZWJUZXN0LmphdmEKQEAgLTQzLDcgKzQzLDcgQEAKICAgICAgICAgcG9ydCA9IEludGVnZXIucGFyc2VJbnQoYXJnc1sxXSk7CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgaHR0cDIgcHVzaCBhcmJpdHJhcnkgbWV0aG9kIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hBcmJpdHJhcnlNZXRob2QvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoQXJiaXRyYXJ5TWV0aG9kL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOTQ0NWMxMC4uMTBmMzU4ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hBcmJpdHJhcnlNZXRob2QvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaEFyYml0cmFyeU1ldGhvZC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtNC4wLXB1c2gtYXJiaXRyYXJ5LW1ldGhvZCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hBcmJpdHJhcnlNZXRob2QvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hBcmJpdHJhcnlNZXRob2QvYnVpbGQueG1sCmluZGV4IDZkODU2MWQuLmVhNzRiMmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoQXJiaXRyYXJ5TWV0aG9kL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaEFyYml0cmFyeU1ldGhvZC9idWlsZC54bWwKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Vudi5BUFNfSE9NRX0vbGliL3dlYnRlc3QuamFyIi8+CiAgICAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhYz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CkBAIC04Miw3ICs4Miw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaEFyYml0cmFyeU1ldGhvZC9zZXJ2bGV0L3Rlc3QvRm9vTWV0aG9kU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hBcmJpdHJhcnlNZXRob2Qvc2VydmxldC90ZXN0L0Zvb01ldGhvZFNlcnZsZXQuamF2YQppbmRleCBjZDFhNmM4Li42N2RhOWYwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaEFyYml0cmFyeU1ldGhvZC9zZXJ2bGV0L3Rlc3QvRm9vTWV0aG9kU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoQXJiaXRyYXJ5TWV0aG9kL3NlcnZsZXQvdGVzdC9Gb29NZXRob2RTZXJ2bGV0LmphdmEKQEAgLTMyLDcgKzMyLDcgQEAKIAogQFdlYlNlcnZsZXQodXJsUGF0dGVybnM9Ii9mb28vKiIpCiBwdWJsaWMgY2xhc3MgRm9vTWV0aG9kU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKLSAgICAgICAgCisKICAgICBAT3ZlcnJpZGUKICAgICBwcm90ZWN0ZWQgdm9pZCBzZXJ2aWNlKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzKQogICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBTZXJ2bGV0RXhjZXB0aW9uIHsKQEAgLTUzLDYgKzUzLDYgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJlcy5zZXRTdGF0dXMoSHR0cFNlcnZsZXRSZXNwb25zZS5TQ19JTlRFUk5BTF9TRVJWRVJfRVJST1IpOwogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCisKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaEFyYml0cmFyeU1ldGhvZC9zZXJ2bGV0L3Rlc3QvVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoQXJiaXRyYXJ5TWV0aG9kL3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhCmluZGV4IDM1YTM4ZTQuLmZmNzQ3M2MgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoQXJiaXRyYXJ5TWV0aG9kL3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoQXJiaXRyYXJ5TWV0aG9kL3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhCkBAIC01OCw3ICs1OCw3IEBACiAgICAgICAgICAgICAgKiBjb29raWU6IFszNzUgYnl0ZXMgd2VyZSBzdHJpcHBlZF0KICAgICAgICAgICAgICAqIHJlZmVyZXI6IGh0dHBzOi8vbG9jYWxob3N0OjgxODEvd2ViLXNlcnZsZXQtNC4wLXB1c2gtYXJiaXRyYXJ5LW1ldGhvZC90ZXN0CiAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIAorCiAgICAgICAgIFB1c2hCdWlsZGVyIHB1c2hCdWlsZGVyID0gcmVxLm5ld1B1c2hCdWlsZGVyKCkuCiAgICAgICAgICAgICBtZXRob2QoIkZPTyIpLgogICAgICAgICAgICAgcGF0aCgiZm9vL215LmNzcyIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hBdXRob3JpemF0aW9uL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoQXV0aG9yaXphdGlvbi9XZWJUZXN0LmphdmEKaW5kZXggZTAwYzk5ZS4uYzQ2MTc1NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hBdXRob3JpemF0aW9uL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaEF1dGhvcml6YXRpb24vV2ViVGVzdC5qYXZhCkBAIC00NSw3ICs0NSw3IEBACiAgICAgICAgIHBvcnQgPSBJbnRlZ2VyLnBhcnNlSW50KGFyZ3NbMV0pOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGh0dHAyIHB1c2ggc3RhdGljIGZpbGUiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaEF1dGhvcml6YXRpb24vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoQXV0aG9yaXphdGlvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDE0MGI5N2EuLjYwODVlNjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoQXV0aG9yaXphdGlvbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoQXV0aG9yaXphdGlvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtNC4wLXB1c2gtYXV0aG9yaXphdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hBdXRob3JpemF0aW9uL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoQXV0aG9yaXphdGlvbi9idWlsZC54bWwKaW5kZXggZTJjZGZjMC4uOTcyYzBkMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hBdXRob3JpemF0aW9uL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaEF1dGhvcml6YXRpb24vYnVpbGQueG1sCkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0idXNlciIgdmFsdWU9IiR7dGVzdHVzZXJ9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC03MSw3ICs3MSw3IEBACiAgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Vudi5BUFNfSE9NRX0vbGliL3dlYnRlc3QuamFyIi8+CiAgICAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhYz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CkBAIC05Niw3ICs5Niw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaENhY2hlYWJsZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaENhY2hlYWJsZS9XZWJUZXN0LmphdmEKaW5kZXggMTdiNzM1NC4uNGFhM2M5ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hDYWNoZWFibGUvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoQ2FjaGVhYmxlL1dlYlRlc3QuamF2YQpAQCAtNDMsNyArNDMsNyBAQAogICAgICAgICBwb3J0ID0gSW50ZWdlci5wYXJzZUludChhcmdzWzFdKTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBodHRwMiBwdXNoIGNhY2hlYWJsZSIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTUyLDcgKzUyLDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hDYWNoZWFibGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoQ2FjaGVhYmxlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZDExM2FjZS4uOGU3MjhiOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hDYWNoZWFibGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaENhY2hlYWJsZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtNC4wLXB1c2gtY2FjaGVhYmxlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaENhY2hlYWJsZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaENhY2hlYWJsZS9idWlsZC54bWwKaW5kZXggODMxNzQ1Zi4uN2Y0ZmExYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hDYWNoZWFibGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoQ2FjaGVhYmxlL2J1aWxkLnhtbApAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTU3LDcgKzU3LDcgQEAKICAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LkFQU19IT01FfS9saWIvd2VidGVzdC5qYXIiLz4KICAgICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmFjPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KQEAgLTgyLDcgKzgyLDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoRHluYW1pYy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaER5bmFtaWMvV2ViVGVzdC5qYXZhCmluZGV4IDQ5YzBjMjIuLjkxOWVkYzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoRHluYW1pYy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hEeW5hbWljL1dlYlRlc3QuamF2YQpAQCAtNDMsNyArNDMsNyBAQAogICAgICAgICBwb3J0ID0gSW50ZWdlci5wYXJzZUludChhcmdzWzFdKTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBodHRwMiBwdXNoIGR5bmFtaWMgZmlsZSIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoRHluYW1pYy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hEeW5hbWljL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZDNiZGJhOS4uOWMyODVjZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hEeW5hbWljL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hEeW5hbWljL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC00LjAtcHVzaC1keW5hbWljIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaER5bmFtaWMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hEeW5hbWljL2J1aWxkLnhtbAppbmRleCA2ZDg1NjFkLi5lYTc0YjJjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaER5bmFtaWMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoRHluYW1pYy9idWlsZC54bWwKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Vudi5BUFNfSE9NRX0vbGliL3dlYnRlc3QuamFyIi8+CiAgICAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhYz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CkBAIC04Miw3ICs4Miw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaER5bmFtaWMvc2VydmxldC90ZXN0L05PVGZhY2VzU2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hEeW5hbWljL3NlcnZsZXQvdGVzdC9OT1RmYWNlc1NlcnZsZXQuamF2YQppbmRleCBmMDY5MDY1Li5jOGU0YzY0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaER5bmFtaWMvc2VydmxldC90ZXN0L05PVGZhY2VzU2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoRHluYW1pYy9zZXJ2bGV0L3Rlc3QvTk9UZmFjZXNTZXJ2bGV0LmphdmEKQEAgLTU2LDcgKzU2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXEuZ2V0U2VydmxldENvbnRleHQoKS5sb2coIlNob3VsZCBoYXZlIGxuIHBhcmFtZXRlci4gIERvZXMgbm90LiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5zZW5kRXJyb3IoSHR0cFNlcnZsZXRSZXNwb25zZS5TQ19JTlRFUk5BTF9TRVJWRVJfRVJST1IpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXMuZ2V0V3JpdGVyKCkucHJpbnRsbigiZm9vOiBiYXIiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoRHluYW1pYy9zZXJ2bGV0L3Rlc3QvVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoRHluYW1pYy9zZXJ2bGV0L3Rlc3QvVGVzdFNlcnZsZXQuamF2YQppbmRleCAyNmRmZDdiLi43MzA1ZjYyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaER5bmFtaWMvc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hEeW5hbWljL3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhCkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgIHB1c2hCdWlsZGVyID0gcmVxLm5ld1B1c2hCdWlsZGVyKCkuCiAgICAgICAgICAgICBwYXRoKCIvd2ViLXNlcnZsZXQtNC4wLXB1c2gtZHluYW1pYy9OT1RmYWNlcy9qYXZheC5mYWNlcy5yZXNvdXJjZS9wYXJhbWV0ZXJNYXBGYWlsdXJlLmpzP2xuPXJlc291cmNlcyIpOwogICAgICAgICBwdXNoQnVpbGRlci5wdXNoKCk7Ci0gICAgICAgIAorCiAgICAgICAgIHJlcy5nZXRXcml0ZXIoKS5wcmludGxuKCI8aHRtbD48aGVhZD48dGl0bGU+SFRUUDIgVGVzdDwvdGl0bGU+PGxpbmsgcmVsPVwic3R5bGVzaGVldFwiIGhyZWY9XCIvd2ViLXNlcnZsZXQtNC4wLXB1c2gtZHluYW1pYy9OT1RmYWNlcy9qYXZheC5mYWNlcy5yZXNvdXJjZS9zdHlsZS5jc3NcIj48c2NyaXB0IHR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIiBzcmM9XCIvd2ViLXNlcnZsZXQtNC4wLXB1c2gtZHluYW1pYy9OT1RmYWNlcy9qYXZheC5mYWNlcy5yZXNvdXJjZS9qc2YuanM/bG49amF2YXguZmFjZXNcIj48L3NjcmlwdD48c2NyaXB0IHR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIiBzcmM9XCIvd2ViLXNlcnZsZXQtNC4wLXB1c2gtZHluYW1pYy9OT1RmYWNlcy9qYXZheC5mYWNlcy5yZXNvdXJjZS9wYXJhbWV0ZXJNYXBGYWlsdXJlLmpzP2xuPXJlc291cmNlc1wiPjwvc2NyaXB0PjwvaGVhZD48Ym9keT5IZWxsbzwvYm9keT48L2h0bWw+Iik7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hRdWVyeVN0cmluZy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaFF1ZXJ5U3RyaW5nL1dlYlRlc3QuamF2YQppbmRleCA4MzlmOTdkLi42NjIyNGUzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaFF1ZXJ5U3RyaW5nL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaFF1ZXJ5U3RyaW5nL1dlYlRlc3QuamF2YQpAQCAtNDMsNyArNDMsNyBAQAogICAgICAgICBwb3J0ID0gSW50ZWdlci5wYXJzZUludChhcmdzWzFdKTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBodHRwMiBwdXNoIHF1ZXJ5IHN0cmluZyIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTUyLDcgKzUyLDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hRdWVyeVN0cmluZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hRdWVyeVN0cmluZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDhhOTBlYWYuLjIyMTQzZDYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoUXVlcnlTdHJpbmcvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaFF1ZXJ5U3RyaW5nL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC00LjAtcHVzaC1xdWVyeS1zdHJpbmciLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoUXVlcnlTdHJpbmcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hRdWVyeVN0cmluZy9idWlsZC54bWwKaW5kZXggODMxNzQ1Zi4uN2Y0ZmExYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hRdWVyeVN0cmluZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hRdWVyeVN0cmluZy9idWlsZC54bWwKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Vudi5BUFNfSE9NRX0vbGliL3dlYnRlc3QuamFyIi8+CiAgICAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhYz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CkBAIC04Miw3ICs4Miw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaFN0YXRpYy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaFN0YXRpYy9XZWJUZXN0LmphdmEKaW5kZXggMjEzNjkwZC4uNmQ0NGYzMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hTdGF0aWMvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoU3RhdGljL1dlYlRlc3QuamF2YQpAQCAtNDMsNyArNDMsNyBAQAogICAgICAgICBwb3J0ID0gSW50ZWdlci5wYXJzZUludChhcmdzWzFdKTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBodHRwMiBwdXNoIHN0YXRpYyBmaWxlIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hTdGF0aWMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoU3RhdGljL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggN2MxMTkyYi4uZjE5ZWMzOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hTdGF0aWMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaFN0YXRpYy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtNC4wLXB1c2gtc3RhdGljIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaFN0YXRpYy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcHVzaFN0YXRpYy9idWlsZC54bWwKaW5kZXggODMxNzQ1Zi4uN2Y0ZmExYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3B1c2hTdGF0aWMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9wdXNoU3RhdGljL2J1aWxkLnhtbApAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTU3LDcgKzU3LDcgQEAKICAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LkFQU19IT01FfS9saWIvd2VidGVzdC5qYXIiLz4KICAgICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmFjPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KQEAgLTgyLDcgKzgyLDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9yZXFSZXNFbmNvZGluZy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcmVxUmVzRW5jb2RpbmcvV2ViVGVzdC5qYXZhCmluZGV4IDg2OWFjOTguLjhmY2NjMDYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9yZXFSZXNFbmNvZGluZy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3JlcVJlc0VuY29kaW5nL1dlYlRlc3QuamF2YQpAQCAtNDQsNyArNDQsNyBAQAogICAgICAgICBwb3J0ID0gSW50ZWdlci5wYXJzZUludChhcmdzWzFdKTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciByZXF1ZXN0LWNoYXJhY3Rlci1lbmNvZGluZywgcmVzcG9uc2UtY2hhcmFjdGVyLWVuY29kaW5nIGluIHdlYi54bWwiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC05MCw3ICs5MCw3IEBACiAgICAgICAgICAgICBTdHJpbmcgbGluZSA9IGh0dHBSZXNwb25zZS5nZXRCb2R5KGNoYXJzZXQpLnRyaW0oKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0+IGxpbmUgPSAiICsgbGluZSk7CiAgICAgICAgICAgICBpZiAgKCFFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9yZXFSZXNFbmNvZGluZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3JlcVJlc0VuY29kaW5nL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMmFlYThmZC4uZGM4ZjY4ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3JlcVJlc0VuY29kaW5nL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3JlcVJlc0VuY29kaW5nL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTQuMC1yZXEtcmVzLWVuY29kaW5nIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTQuMC1yZXEtcmVzLWVuY29kaW5nIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii8ke2FwcG5hbWV9Ii8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3JlcVJlc0VuY29kaW5nL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9yZXFSZXNFbmNvZGluZy9idWlsZC54bWwKaW5kZXggNzhkN2MzOS4uM2FlZGI5ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3JlcVJlc0VuY29kaW5nL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcmVxUmVzRW5jb2RpbmcvYnVpbGQueG1sCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ1LDEwICs0NSwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgaW5jbHVkZXM9IldlYlRlc3QuamF2YSI+CiAgICAgICAgICAgICA8Y2xhc3NwYXRoPgpAQCAtNTYsMTAgKzU2LDEwIEBACiAgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Vudi5BUFNfSE9NRX0vbGliL3dlYnRlc3QuamFyIi8+CiAgICAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhYz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjcsNyArNjcsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCIgZm9yaz0idHJ1ZSI+CiAgICAgICAgICAgPHN5c3Byb3BlcnR5IGtleT0iUzFBU19IT01FIiB2YWx1ZT0iJHtlbnYuUzFBU19IT01FfSIvPgpAQCAtODMsMTAgKzgzLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3JlcVJlc0VuY29kaW5nR0ZXZWJ4bWwvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3JlcVJlc0VuY29kaW5nR0ZXZWJ4bWwvV2ViVGVzdC5qYXZhCmluZGV4IGIyZGVjZWMuLjViYjhlZjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9yZXFSZXNFbmNvZGluZ0dGV2VieG1sL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcmVxUmVzRW5jb2RpbmdHRldlYnhtbC9XZWJUZXN0LmphdmEKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgcG9ydCA9IEludGVnZXIucGFyc2VJbnQoYXJnc1sxXSk7CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgcmVxdWVzdC1jaGFyYWN0ZXItZW5jb2RpbmcsIHJlc3BvbnNlLWNoYXJhY3Rlci1lbmNvZGluZyBpbiB3ZWIueG1sIGFuZCBwYXJhbWV0ZXItZW5jb2RpbmcgaW4gZ2xhc3NmaXNoLXdlYi54bWwiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC05MSwxMiArOTEsMTIgQEAKICAgICAgICAgICAgIFN0cmluZyBsaW5lID0gaHR0cFJlc3BvbnNlLmdldEJvZHkoY2hhcnNldCkudHJpbSgpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLT4gbGluZSA9ICIgKyBsaW5lKTsKICAgICAgICAgICAgIGlmICghSkNIQVJTRVRfUkVTUE9OU0UuZXF1YWxzKGNoYXJzZXQpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgQ29udGVudC1UeXBlIGNoYXJzZXQuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgQ29udGVudC1UeXBlIGNoYXJzZXQuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgSkNIQVJTRVRfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGNoYXJzZXQpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmICAoIUVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTI0LDEyICsxMjQsMTIgQEAKICAgICAgICAgICAgIFN0cmluZyBsaW5lID0gaHR0cFJlc3BvbnNlLmdldEJvZHkoY2hhcnNldCkudHJpbSgpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLT4gbGluZSA9ICIgKyBsaW5lKTsKICAgICAgICAgICAgIGlmICghSkNIQVJTRVRfUkVTUE9OU0UuZXF1YWxzKGNoYXJzZXQpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgQ29udGVudC1UeXBlIGNoYXJzZXQuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgQ29udGVudC1UeXBlIGNoYXJzZXQuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgSkNIQVJTRVRfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGNoYXJzZXQpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmICAoIUVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3JlcVJlc0VuY29kaW5nR0ZXZWJ4bWwvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9yZXFSZXNFbmNvZGluZ0dGV2VieG1sL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMzEyOTE0Yy4uNTAwOTg0NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3JlcVJlc0VuY29kaW5nR0ZXZWJ4bWwvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcmVxUmVzRW5jb2RpbmdHRldlYnhtbC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNiwxMCArMTYsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC00LjAtcmVxLXJlcy1lbmNvZGluZy1nZndlYnhtbCIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC00LjAtcmVxLXJlcy1lbmNvZGluZy1nZndlYnhtbCIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvJHthcHBuYW1lfSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9yZXFSZXNFbmNvZGluZ0dGV2VieG1sL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9yZXFSZXNFbmNvZGluZ0dGV2VieG1sL2J1aWxkLnhtbAppbmRleCBkOGZmZmNmLi4zOWJiNTM0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvcmVxUmVzRW5jb2RpbmdHRldlYnhtbC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3JlcVJlc0VuY29kaW5nR0ZXZWJ4bWwvYnVpbGQueG1sCkBAIC0zOCw3ICszOCw3IEBACiAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ2LDEwICs0NiwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgaW5jbHVkZXM9IldlYlRlc3QuamF2YSI+CiAgICAgICAgICAgICA8Y2xhc3NwYXRoPgpAQCAtNTcsMTAgKzU3LDEwIEBACiAgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Vudi5BUFNfSE9NRX0vbGliL3dlYnRlc3QuamFyIi8+CiAgICAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhYz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjgsNyArNjgsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCIgZm9yaz0idHJ1ZSI+CiAgICAgICAgICAgPGp2bWFyZyB2YWx1ZT0iLURqYXZhLmVuZG9yc2VkLmRpcnM9JHtlbnYuUzFBU19IT01FfS9tb2R1bGVzL2VuZG9yc2VkIi8+CkBAIC04NSwxMCArODUsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvc2V0U2Vzc2lvblRpbWVvdXQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3NldFNlc3Npb25UaW1lb3V0L1dlYlRlc3QuamF2YQppbmRleCBhMjliY2FmLi43Nzc5OGJlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvc2V0U2Vzc2lvblRpbWVvdXQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9zZXRTZXNzaW9uVGltZW91dC9XZWJUZXN0LmphdmEKQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgICAgcG9ydCA9IEludGVnZXIucGFyc2VJbnQoYXJnc1sxXSk7CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgU2VydmxldENvbnRleHQuc2V0U2Vzc2lvblRpbWVvdXQoKSIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpAQCAtODMsNyArODMsNyBAQAogICAgICAgICAgICAgU3RyaW5nIGxpbmUgPSBodHRwUmVzcG9uc2UuZ2V0Qm9keSgpLnRyaW0oKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0+IGxpbmUgPSAiICsgbGluZSk7CiAgICAgICAgICAgICBpZiAgKCFFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9zZXRTZXNzaW9uVGltZW91dC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3NldFNlc3Npb25UaW1lb3V0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZDk2NjljZS4uYzhkY2JkNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3NldFNlc3Npb25UaW1lb3V0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3NldFNlc3Npb25UaW1lb3V0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC00LjAtc2V0LXNlc3Npb24tdGltZW91dCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3NldFNlc3Npb25UaW1lb3V0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9zZXRTZXNzaW9uVGltZW91dC9idWlsZC54bWwKaW5kZXggMjI5ZDMzNi4uNzU2NjhjMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3NldFNlc3Npb25UaW1lb3V0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvc2V0U2Vzc2lvblRpbWVvdXQvYnVpbGQueG1sCkBAIC00NSwxMCArNDUsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgaW5jbHVkZXM9IldlYlRlc3QuamF2YSI+CkBAIC01OCwxMCArNTgsMTAgQEAKICAgICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmFjPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTY5LDcgKzY5LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiIGZvcms9InRydWUiPgogICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9IlMxQVNfSE9NRSIgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0iLz4KQEAgLTg1LDEwICs4NSwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9zZXRTZXNzaW9uVGltZW91dC9zZXJ2bGV0L3Rlc3QvTXlPYmplY3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC9zZXRTZXNzaW9uVGltZW91dC9zZXJ2bGV0L3Rlc3QvTXlPYmplY3QuamF2YQppbmRleCBiN2VhZjlhLi45OWNiODM1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvc2V0U2Vzc2lvblRpbWVvdXQvc2VydmxldC90ZXN0L015T2JqZWN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3NldFNlc3Npb25UaW1lb3V0L3NlcnZsZXQvdGVzdC9NeU9iamVjdC5qYXZhCkBAIC0yNiwxOCArMjYsMTggQEAKICAgICAgKiBOb3RpZmllcyB0aGUgb2JqZWN0IHRoYXQgaXQgaXMgYmVpbmcgYm91bmQgdG8gYSBzZXNzaW9uLCBhbmQKICAgICAgKiBpZGVudGlmaWVzIHRoZSBzZXNzaW9uLgogICAgICAqCi0gICAgICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCB0aGF0IGlkZW50aWZpZXMgdGhlIHNlc3Npb24gCisgICAgICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCB0aGF0IGlkZW50aWZpZXMgdGhlIHNlc3Npb24KICAgICAgKi8KICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCB2YWx1ZUJvdW5kKEh0dHBTZXNzaW9uQmluZGluZ0V2ZW50IGV2ZW50KSB7CiAgICAgICAgIC8vIGRvIG5vdGhpbmcKICAgICB9Ci0gICAgCisKICAgICAvKgogICAgICAqIE5vdGlmaWVzIHRoZSBvYmplY3QgdGhhdCBpdCBpcyBiZWluZyB1bmJvdW5kIGZyb20gYSBzZXNzaW9uLCBhbmQKICAgICAgKiBpZGVudGlmaWVzIHRoZSBzZXNzaW9uLgogICAgICAqCi0gICAgICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCB0aGF0IGlkZW50aWZpZXMgdGhlIHNlc3Npb24gCisgICAgICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCB0aGF0IGlkZW50aWZpZXMgdGhlIHNlc3Npb24KICAgICAgKi8KICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCB2YWx1ZVVuYm91bmQoSHR0cFNlc3Npb25CaW5kaW5nRXZlbnQgZXZlbnQpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC90cmFpbGVyL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC90cmFpbGVyL1dlYlRlc3QuamF2YQppbmRleCAwYzc4ZjliLi41MDNiMTZlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvdHJhaWxlci9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3RyYWlsZXIvV2ViVGVzdC5qYXZhCkBAIC00Miw3ICs0Miw3IEBACiAgICAgICAgIHBvcnQgPSBJbnRlZ2VyLnBhcnNlSW50KGFyZ3NbMV0pOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIHRyYWlsZXIiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC04NSw3ICs4NSw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBTdHJpbmcgY29udGVudFR5cGUgPSBodHRwUmVzcG9uc2UuZ2V0SGVhZGVyKCJDb250ZW50LVR5cGUiKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0+IGhlYWRlcnMgPSAiICsgaHR0cFJlc3BvbnNlLmdldEhlYWRlcnMoKSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU3RyaW5nIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWlsZGVyKGh0dHBSZXNwb25zZS5nZXRCb2R5KCkudHJpbSgpKQogICAgICAgICAgICAgICAgIC5hcHBlbmQoJ3wnKQogICAgICAgICAgICAgICAgIC5hcHBlbmQoaHR0cFJlc3BvbnNlLmdldFRyYWlsZXJGaWVsZHMoKS5nZXQoImJhcjEiKSkgLy8gdHJhaWxlciBmaWVsZApAQCAtOTYsNyArOTYsNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLT4gcmVzdWx0ID0gIiArIHJlc3VsdCk7CiAKICAgICAgICAgICAgIGlmICAoIUVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhyZXN1bHQpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIHJlc3VsdCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC90cmFpbGVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvdHJhaWxlci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDY3ZTI5N2QuLmM5OGIxODMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC90cmFpbGVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3RyYWlsZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsOSArMTUsOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTQuMC10cmFpbGVyIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LTQuMC10cmFpbGVyIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii8ke2FwcG5hbWV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvdHJhaWxlci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldC00LjAvdHJhaWxlci9idWlsZC54bWwKaW5kZXggNzhkN2MzOS4uM2FlZGI5ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXQtNC4wL3RyYWlsZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0LTQuMC90cmFpbGVyL2J1aWxkLnhtbApAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NSwxMCArNDUsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiPgogICAgICAgICAgICAgPGNsYXNzcGF0aD4KQEAgLTU2LDEwICs1NiwxMCBAQAogICAgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuQVBTX0hPTUV9L2xpYi93ZWJ0ZXN0LmphciIvPgogICAgICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YWM+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTY3LDcgKzY3LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiIGZvcms9InRydWUiPgogICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9IlMxQVNfSE9NRSIgdmFsdWU9IiR7ZW52LlMxQVNfSE9NRX0iLz4KQEAgLTgzLDEwICs4MywxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0QW5ub3RhdGlvblByZURlc3Ryb3kvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRBbm5vdGF0aW9uUHJlRGVzdHJveS9XZWJUZXN0LmphdmEKaW5kZXggZDNhMGM4ZC4uMWFhZGFjMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRBbm5vdGF0aW9uUHJlRGVzdHJveS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRBbm5vdGF0aW9uUHJlRGVzdHJveS9XZWJUZXN0LmphdmEKQEAgLTQ5LDcgKzQ5LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciA2NTM1ODk4Iik7CkBAIC02Miw3ICs2Miw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKQEAgLTc1LDcgKzc1LDcgQEAKIAogICAgICAgICBpZiAoIlNVQ0NFU1MiLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwotCX0gZWxzZSB7CisgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0QW5ub3RhdGlvblByZURlc3Ryb3kvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0QW5ub3RhdGlvblByZURlc3Ryb3kvYnVpbGQucHJvcGVydGllcwppbmRleCAwNTJlNDQ0Li45NjY2MzAyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEFubm90YXRpb25QcmVEZXN0cm95L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRBbm5vdGF0aW9uUHJlRGVzdHJveS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtYW5ub3RhdGlvbi1wcmVkZXN0cm95Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEFubm90YXRpb25QcmVEZXN0cm95L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0QW5ub3RhdGlvblByZURlc3Ryb3kvYnVpbGQueG1sCmluZGV4IDZhODE1MjguLjYzYjVkNGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0QW5ub3RhdGlvblByZURlc3Ryb3kvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0QW5ub3RhdGlvblByZURlc3Ryb3kvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwxOSArNDQsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTY0LDcgKzY0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDaGFpbmVkRXhjZXB0aW9uL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q2hhaW5lZEV4Y2VwdGlvbi9XZWJUZXN0LmphdmEKaW5kZXggYTM0YzExNC4uNWI3ZTFiMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDaGFpbmVkRXhjZXB0aW9uL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENoYWluZWRFeGNlcHRpb24vV2ViVGVzdC5qYXZhCkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3Igc2VydmxldCBjaGFpbmVkIGV4Y2VwdGlvbiIpOwpAQCAtNTMsMTggKzUzLDE4IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL1Rlc3RTZXJ2bGV0Iik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsgCisgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZSBjb2RlLiBFeHBlY3RlZDogMjAwIiArCiAgICAgICAgICAgICAgICAgIiwgcmVjZWl2ZWQ6ICIgKyByZXNwb25zZUNvZGUpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENoYWluZWRFeGNlcHRpb24vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q2hhaW5lZEV4Y2VwdGlvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDA4NjdjNTEuLjVjNmFlNTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q2hhaW5lZEV4Y2VwdGlvbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q2hhaW5lZEV4Y2VwdGlvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtY2hhaW5lZC1leGNlcHRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q2hhaW5lZEV4Y2VwdGlvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENoYWluZWRFeGNlcHRpb24vYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q2hhaW5lZEV4Y2VwdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDaGFpbmVkRXhjZXB0aW9uL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q2hhaW5lZEV4Y2VwdGlvbi9zZXJ2bGV0L3Rlc3QvVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q2hhaW5lZEV4Y2VwdGlvbi9zZXJ2bGV0L3Rlc3QvVGVzdFNlcnZsZXQuamF2YQppbmRleCA2MDI1NzUxLi4xYzE3MDA3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENoYWluZWRFeGNlcHRpb24vc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDaGFpbmVkRXhjZXB0aW9uL3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgIFRocm93YWJsZSB0ID0gbmV3IFRocm93YWJsZSgidGVzdCIpOwogCiAgICAgICAgIFNlcnZsZXRFeGNlcHRpb24gc2UxID0gbmV3IFNlcnZsZXRFeGNlcHRpb24oInRlc3QiLCB0KTsKLSAgICAgICAgU2VydmxldEV4Y2VwdGlvbiBzZTIgPSBuZXcgU2VydmxldEV4Y2VwdGlvbih0KTsgICAgICAgIAorICAgICAgICBTZXJ2bGV0RXhjZXB0aW9uIHNlMiA9IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKHQpOwogICAgICAgICBpZiAoc2UxLmdldENhdXNlKCkgPT0gdCAmJiBzZTIuZ2V0Q2F1c2UoKSA9PSB0KSB7CiAgICAgICAgICAgICBwYXNzZWQgPSB0cnVlOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRBdHRyaWJ1dGVFdmVudEF0dHJpYnV0ZVJlbW92ZWQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0QXR0cmlidXRlRXZlbnRBdHRyaWJ1dGVSZW1vdmVkL1dlYlRlc3QuamF2YQppbmRleCAwNGY2MjBhLi4wM2JkZmQ3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRBdHRyaWJ1dGVFdmVudEF0dHJpYnV0ZVJlbW92ZWQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dEF0dHJpYnV0ZUV2ZW50QXR0cmlidXRlUmVtb3ZlZC9XZWJUZXN0LmphdmEKQEAgLTIwLDEzICsyMCwxMyBAQAogCiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci4qOwogLyoqCi0gKiBCdWd6aWxsYSAzMzQ2MyAKKyAqIEJ1Z3ppbGxhIDMzNDYzCiAgKi8KIHB1YmxpYyBjbGFzcyBXZWJUZXN0IHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGludCBjb3VudCA9IDA7CiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IEVYUEVDVEVEX0NPVU5UID0gMTsKLSAgICAKKwogICAgIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdD0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCkBAIC0zNSw3ICszNSw3IEBACiAKICAgICAgICAgLy8gVGhlIHN0YXQgcmVwb3J0ZXIgd3JpdGVzIG91dCB0aGUgdGVzdCBpbmZvIGFuZCByZXN1bHRzCiAgICAgICAgIC8vIGludG8gdGhlIHRvcC1sZXZlbCBxdWlja2xvb2sgZGlyZWN0b3J5IGR1cmluZyBhIHJ1bi4KLSAgICAgIAorCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlJlbW92ZSBBdHRyaWJ1dGUgb24gZGVzdHJveSIpOwogCiAgICAgICAgIFN0cmluZyBob3N0ID0gYXJnc1swXTsKQEAgLTQ0LDcgKzQ0LDcgQEAKIAogICAgICAgICBpbnQgcG9ydCA9IG5ldyBJbnRlZ2VyKHBvcnRTKS5pbnRWYWx1ZSgpOwogICAgICAgICBTdHJpbmcgbmFtZTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGdvR2V0KGhvc3QsIHBvcnQsICJERVNUUk9ZIiwgY29udGV4dFJvb3QgKyAiL1NlcnZsZXRUZXN0IiApOwogICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdCkgewpAQCAtNTMsNyArNTMsNyBAQAogCiAgICAgICAgIGlmIChjb3VudCAhPSBFWFBFQ1RFRF9DT1VOVCl7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiYXR0cmlidXRlTGlzdGVuZXJDbGVhciIsIHN0YXQuRkFJTCk7Ci0gICAgICAgIH0gICAgICAgICAgIAorICAgICAgICB9CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3ZWIvYXR0cmlidXRlTGlzdGVuZXJDbGVhci0tLT4gZXhwZWN0ICIgKyBFWFBFQ1RFRF9DT1VOVCk7CiAgICAgfQogCkBAIC02OCw3ICs2OCw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigoIkdFVCAiICsgY29udGV4dFBhdGggKyAiIEhUVFAvMS4wXG4iKSk7CiAgICAgICAgIG9zLndyaXRlKCgiR0VUICIgKyBjb250ZXh0UGF0aCArICIgSFRUUC8xLjBcbiIpLmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHMuZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaW1lOiAiICsgKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gdGltZSkpOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBiaXMgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CkBAIC04MywxOCArODMsMTggQEAKICAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBsaW5lLmluZGV4T2YoIjoiKTsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHN0YXR1cyA9IGxpbmUuc3Vic3RyaW5nKGluZGV4KzEpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLmVxdWFsc0lnbm9yZUNhc2UoIlBBU1MiKSl7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2ViLWF0dHJpYnV0ZUxpc3RlbmVyQ2xlYXI6ICIgKyBsaW5lLnN1YnN0cmluZygwLGluZGV4KSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3ZWItYXR0cmlidXRlTGlzdGVuZXJDbGVhcjogIiArIGxpbmUuc3Vic3RyaW5nKDAsaW5kZXgpLCBzdGF0LkZBSUwpOyAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2ViLWF0dHJpYnV0ZUxpc3RlbmVyQ2xlYXI6ICIgKyBsaW5lLnN1YnN0cmluZygwLGluZGV4KSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZXgpewotICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7ICAgCisgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQogICAgfQotICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0QXR0cmlidXRlRXZlbnRBdHRyaWJ1dGVSZW1vdmVkL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRBdHRyaWJ1dGVFdmVudEF0dHJpYnV0ZVJlbW92ZWQvYnVpbGQucHJvcGVydGllcwppbmRleCAxY2E0MDljLi45MTc3MjUzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRBdHRyaWJ1dGVFdmVudEF0dHJpYnV0ZVJlbW92ZWQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRBdHRyaWJ1dGVFdmVudEF0dHJpYnV0ZVJlbW92ZWQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTQgKzE1LDE0IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXRDb250ZXh0QXR0cmlidXRlRXZlbnRBdHRyaWJ1dGVSZW1vdmVkIi8+CiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii8ke2FwcG5hbWV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRBdHRyaWJ1dGVFdmVudEF0dHJpYnV0ZVJlbW92ZWQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0QXR0cmlidXRlRXZlbnRBdHRyaWJ1dGVSZW1vdmVkL2J1aWxkLnhtbAppbmRleCAyNzE3NTc1Li42NWU5NTJmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRBdHRyaWJ1dGVFdmVudEF0dHJpYnV0ZVJlbW92ZWQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dEF0dHJpYnV0ZUV2ZW50QXR0cmlidXRlUmVtb3ZlZC9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ4LDE2ICs0OCwxNiBAQAogICAgICAgICAgICAgICAgY2xhc3NwYXRoPSIke3MxYXMuY2xhc3NwYXRofSIKICAgICAgICAgICAgICAgIGRlc3RkaXI9Ii4vc2hhcmVkIiBpbmNsdWRlcz0iKi5qYXZhIi8+CiAgICAgICAgIDxqYXIgZGVzdGZpbGU9InNoYXJlZC5qYXIiIGJhc2VkaXI9InNoYXJlZCIvPgotICAgICAgICA8Y29weSBmaWxlPSJzaGFyZWQuamFyIiAKKyAgICAgICAgPGNvcHkgZmlsZT0ic2hhcmVkLmphciIKICAgICAgICAgICAgICAgdG9kaXI9IiR7ZW52LlMxQVNfSE9NRX0vbGliIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXItaW5zdGFuY2UtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCkBAIC02NSwxNCArNjUsMTQgQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC04Miw3ICs4Miw3IEBACiAgICAgICAgIDxkZWxldGUgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9saWIvc2hhcmVkLmphciIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQtc2VydmVyLWluc3RhbmNlLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTk0LDEwICs5NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dEF0dHJpYnV0ZUV2ZW50QXR0cmlidXRlUmVtb3ZlZC9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRBdHRyaWJ1dGVFdmVudEF0dHJpYnV0ZVJlbW92ZWQvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDFhODk2MGUuLmFjMjU1OWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dEF0dHJpYnV0ZUV2ZW50QXR0cmlidXRlUmVtb3ZlZC9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0QXR0cmlidXRlRXZlbnRBdHRyaWJ1dGVSZW1vdmVkL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjcsMTQgKzI3LDE0IEBACiAgICAgICAgICAgICB0ZXN0LlN0YXRpY0xpc3RlbmVyCiAgICAgICAgIDwvbGlzdGVuZXItY2xhc3M+CiAgICAgPC9saXN0ZW5lcj4KLSAgICAgCisKICAgICA8c2VydmxldD4KICAgICAgICAgPGRpc3BsYXktbmFtZT5TZXJ2bGV0VGVzdDwvZGlzcGxheS1uYW1lPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuU2VydmxldFRlc3Q8L3NlcnZsZXQtY2xhc3M+CiAgICAgICAgIDxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgotICAgIDwvc2VydmxldD4gIAotICAgIAorICAgIDwvc2VydmxldD4KKwogICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L1NlcnZsZXRUZXN0PC91cmwtcGF0dGVybj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dEF0dHJpYnV0ZUV2ZW50QXR0cmlidXRlUmVtb3ZlZC9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRBdHRyaWJ1dGVFdmVudEF0dHJpYnV0ZVJlbW92ZWQvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCmluZGV4IGZjMTI2NmUuLmM0ZTExMzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dEF0dHJpYnV0ZUV2ZW50QXR0cmlidXRlUmVtb3ZlZC9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0QXR0cmlidXRlRXZlbnRBdHRyaWJ1dGVSZW1vdmVkL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQpAQCAtMjUsMTMgKzI1LDEzIEBACiBwdWJsaWMgY2xhc3MgU2VydmxldFRlc3QgZXh0ZW5kcyBIdHRwU2VydmxldHsKIAogICAgIHByaXZhdGUgU2VydmxldENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwotCQlTZXJ2bGV0Q29udGV4dCBjdHggPSBjb25maWcuZ2V0U2VydmxldENvbnRleHQoKTsKLQkJY3R4LnNldEF0dHJpYnV0ZSgiQXR0cmlidXQiLCAidW5lIHZhbGV1ciIpOworICAgICAgICBTZXJ2bGV0Q29udGV4dCBjdHggPSBjb25maWcuZ2V0U2VydmxldENvbnRleHQoKTsKKyAgICAgICAgY3R4LnNldEF0dHJpYnV0ZSgiQXR0cmlidXQiLCAidW5lIHZhbGV1ciIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKXsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIjIyMjIyMjIyMjIyBkZXN0cm95ICMjIyMjIyMjIyMjIyMiKTsKICAgICB9CkBAIC00MSwxNCArNDEsMTQgQEAKIAogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwotICAgICAgICAKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIjIyMjIyMjIyMjIFN0YXRpY0xpc3RlbmVyLnJlbW92ZUF0dHJpYnV0ZTogIiArIAorCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIyMjIyMjIyMjIyBTdGF0aWNMaXN0ZW5lci5yZW1vdmVBdHRyaWJ1dGU6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0aWNMaXN0ZW5lci5yZW1vdmVBdHRyaWJ1dGUpOwotICAgICAgICBvdXQucHJpbnRsbigiREVTVFJPWToiIAorICAgICAgICBvdXQucHJpbnRsbigiREVTVFJPWToiCiAgICAgICAgICAgICAgICAgICAgICsgKFN0YXRpY0xpc3RlbmVyLnJlbW92ZUF0dHJpYnV0ZSA9PSB0cnVlID8gIlBBU1MiIDogIkZBSUwiKSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAgICAgICAgCisgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0QXR0cmlidXRlRXZlbnRBdHRyaWJ1dGVSZW1vdmVkL3NlcnZsZXQvU3RhdGljTGlzdGVuZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dEF0dHJpYnV0ZUV2ZW50QXR0cmlidXRlUmVtb3ZlZC9zZXJ2bGV0L1N0YXRpY0xpc3RlbmVyLmphdmEKaW5kZXggYzVjNDRiZS4uZjNlN2RlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0QXR0cmlidXRlRXZlbnRBdHRyaWJ1dGVSZW1vdmVkL3NlcnZsZXQvU3RhdGljTGlzdGVuZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRBdHRyaWJ1dGVFdmVudEF0dHJpYnV0ZVJlbW92ZWQvc2VydmxldC9TdGF0aWNMaXN0ZW5lci5qYXZhCkBAIC0yMywyMSArMjMsMjEgQEAKIAogICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiByZW1vdmVBdHRyaWJ1dGUgPSBmYWxzZTsKIAotCXB1YmxpYyB2b2lkIGF0dHJpYnV0ZUFkZGVkKFNlcnZsZXRDb250ZXh0QXR0cmlidXRlRXZlbnQgZXZ0KSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiXG5cbkFkZGVkIGEgc2VydmxldCBjb250ZXh0IGF0dHJpYnV0ZTogIiArIGV2dC5nZXROYW1lKCkgKyAiICgiKyBldnQuZ2V0VmFsdWUoKSArIikiKTsKLQl9CisgICAgcHVibGljIHZvaWQgYXR0cmlidXRlQWRkZWQoU2VydmxldENvbnRleHRBdHRyaWJ1dGVFdmVudCBldnQpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcblxuQWRkZWQgYSBzZXJ2bGV0IGNvbnRleHQgYXR0cmlidXRlOiAiICsgZXZ0LmdldE5hbWUoKSArICIgKCIrIGV2dC5nZXRWYWx1ZSgpICsiKSIpOworICAgIH0KIAotCXB1YmxpYyB2b2lkIGF0dHJpYnV0ZVJlbW92ZWQoU2VydmxldENvbnRleHRBdHRyaWJ1dGVFdmVudCBldnQpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJcblxuUmVtb3ZlZCBhIHNlcnZsZXQgY29udGV4dCBhdHRyaWJ1dGU6ICIgKyBldnQuZ2V0TmFtZSgpICsgIiAoIisgZXZ0LmdldFZhbHVlKCkgKyIpIik7CisgICAgcHVibGljIHZvaWQgYXR0cmlidXRlUmVtb3ZlZChTZXJ2bGV0Q29udGV4dEF0dHJpYnV0ZUV2ZW50IGV2dCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuXG5SZW1vdmVkIGEgc2VydmxldCBjb250ZXh0IGF0dHJpYnV0ZTogIiArIGV2dC5nZXROYW1lKCkgKyAiICgiKyBldnQuZ2V0VmFsdWUoKSArIikiKTsKIAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInJlbW92ZUF0dHJpYnV0ZTogIiArIHJlbW92ZUF0dHJpYnV0ZSk7CiAKICAgICAgICAgcmVtb3ZlQXR0cmlidXRlID0gdHJ1ZTsKLQl9CisgICAgfQogCi0JcHVibGljIHZvaWQgYXR0cmlidXRlUmVwbGFjZWQoU2VydmxldENvbnRleHRBdHRyaWJ1dGVFdmVudCBldnQpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJcblxuUmVwbGFjZWQgYSBzZXJ2bGV0IGNvbnRleHQgYXR0cmlidXRlOiAiICsgZXZ0LmdldE5hbWUoKSArICIgKCIrIGV2dC5nZXRWYWx1ZSgpICsiKSIpOwotCX0KKyAgICBwdWJsaWMgdm9pZCBhdHRyaWJ1dGVSZXBsYWNlZChTZXJ2bGV0Q29udGV4dEF0dHJpYnV0ZUV2ZW50IGV2dCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuXG5SZXBsYWNlZCBhIHNlcnZsZXQgY29udGV4dCBhdHRyaWJ1dGU6ICIgKyBldnQuZ2V0TmFtZSgpICsgIiAoIisgZXZ0LmdldFZhbHVlKCkgKyIpIik7CisgICAgfQogfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dEF0dHJpYnV0ZUV2ZW50QXR0cmlidXRlUmVtb3ZlZC9zaGFyZWQvdGVzdC9TdGF0aWNMaXN0ZW5lci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0QXR0cmlidXRlRXZlbnRBdHRyaWJ1dGVSZW1vdmVkL3NoYXJlZC90ZXN0L1N0YXRpY0xpc3RlbmVyLmphdmEKaW5kZXggYzVjNDRiZS4uZjNlN2RlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0QXR0cmlidXRlRXZlbnRBdHRyaWJ1dGVSZW1vdmVkL3NoYXJlZC90ZXN0L1N0YXRpY0xpc3RlbmVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0QXR0cmlidXRlRXZlbnRBdHRyaWJ1dGVSZW1vdmVkL3NoYXJlZC90ZXN0L1N0YXRpY0xpc3RlbmVyLmphdmEKQEAgLTIzLDIxICsyMywyMSBAQAogCiAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIHJlbW92ZUF0dHJpYnV0ZSA9IGZhbHNlOwogCi0JcHVibGljIHZvaWQgYXR0cmlidXRlQWRkZWQoU2VydmxldENvbnRleHRBdHRyaWJ1dGVFdmVudCBldnQpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJcblxuQWRkZWQgYSBzZXJ2bGV0IGNvbnRleHQgYXR0cmlidXRlOiAiICsgZXZ0LmdldE5hbWUoKSArICIgKCIrIGV2dC5nZXRWYWx1ZSgpICsiKSIpOwotCX0KKyAgICBwdWJsaWMgdm9pZCBhdHRyaWJ1dGVBZGRlZChTZXJ2bGV0Q29udGV4dEF0dHJpYnV0ZUV2ZW50IGV2dCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuXG5BZGRlZCBhIHNlcnZsZXQgY29udGV4dCBhdHRyaWJ1dGU6ICIgKyBldnQuZ2V0TmFtZSgpICsgIiAoIisgZXZ0LmdldFZhbHVlKCkgKyIpIik7CisgICAgfQogCi0JcHVibGljIHZvaWQgYXR0cmlidXRlUmVtb3ZlZChTZXJ2bGV0Q29udGV4dEF0dHJpYnV0ZUV2ZW50IGV2dCkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlxuXG5SZW1vdmVkIGEgc2VydmxldCBjb250ZXh0IGF0dHJpYnV0ZTogIiArIGV2dC5nZXROYW1lKCkgKyAiICgiKyBldnQuZ2V0VmFsdWUoKSArIikiKTsKKyAgICBwdWJsaWMgdm9pZCBhdHRyaWJ1dGVSZW1vdmVkKFNlcnZsZXRDb250ZXh0QXR0cmlidXRlRXZlbnQgZXZ0KSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG5cblJlbW92ZWQgYSBzZXJ2bGV0IGNvbnRleHQgYXR0cmlidXRlOiAiICsgZXZ0LmdldE5hbWUoKSArICIgKCIrIGV2dC5nZXRWYWx1ZSgpICsiKSIpOwogCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigicmVtb3ZlQXR0cmlidXRlOiAiICsgcmVtb3ZlQXR0cmlidXRlKTsKIAogICAgICAgICByZW1vdmVBdHRyaWJ1dGUgPSB0cnVlOwotCX0KKyAgICB9CiAKLQlwdWJsaWMgdm9pZCBhdHRyaWJ1dGVSZXBsYWNlZChTZXJ2bGV0Q29udGV4dEF0dHJpYnV0ZUV2ZW50IGV2dCkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlxuXG5SZXBsYWNlZCBhIHNlcnZsZXQgY29udGV4dCBhdHRyaWJ1dGU6ICIgKyBldnQuZ2V0TmFtZSgpICsgIiAoIisgZXZ0LmdldFZhbHVlKCkgKyIpIik7Ci0JfQorICAgIHB1YmxpYyB2b2lkIGF0dHJpYnV0ZVJlcGxhY2VkKFNlcnZsZXRDb250ZXh0QXR0cmlidXRlRXZlbnQgZXZ0KSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG5cblJlcGxhY2VkIGEgc2VydmxldCBjb250ZXh0IGF0dHJpYnV0ZTogIiArIGV2dC5nZXROYW1lKCkgKyAiICgiKyBldnQuZ2V0VmFsdWUoKSArIikiKTsKKyAgICB9CiB9CiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0QXR0cmlidXRlTGlzdGVuZXJBbm5vdGF0aW9uUHJlRGVzdHJveS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRBdHRyaWJ1dGVMaXN0ZW5lckFubm90YXRpb25QcmVEZXN0cm95L1dlYlRlc3QuamF2YQppbmRleCAzYzM5MjQ3Li40ZTlmZmVkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRBdHRyaWJ1dGVMaXN0ZW5lckFubm90YXRpb25QcmVEZXN0cm95L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRBdHRyaWJ1dGVMaXN0ZW5lckFubm90YXRpb25QcmVEZXN0cm95L1dlYlRlc3QuamF2YQpAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIDYzOTEiKTsKQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewpAQCAtNjYsNyArNjYsNyBAQAogCiAgICAgICAgIGlmICgiU1VDQ0VTUyIuZXF1YWxzKGxpbmUpKSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7Ci0JfSBlbHNlIHsKKyAgICB9IGVsc2UgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0QXR0cmlidXRlTGlzdGVuZXJBbm5vdGF0aW9uUHJlRGVzdHJveS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0QXR0cmlidXRlTGlzdGVuZXJBbm5vdGF0aW9uUHJlRGVzdHJveS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGQ2NmJmNjguLmYzNWU1NmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dEF0dHJpYnV0ZUxpc3RlbmVyQW5ub3RhdGlvblByZURlc3Ryb3kvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRBdHRyaWJ1dGVMaXN0ZW5lckFubm90YXRpb25QcmVEZXN0cm95L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC1jb250ZXh0LWF0dHJpYnV0ZS1saXN0ZW5lci1hbm5vdGF0aW9uLXByZWRlc3Ryb3kiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dEF0dHJpYnV0ZUxpc3RlbmVyQW5ub3RhdGlvblByZURlc3Ryb3kvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0QXR0cmlidXRlTGlzdGVuZXJBbm5vdGF0aW9uUHJlRGVzdHJveS9idWlsZC54bWwKaW5kZXggOTBhYmVmMS4uNzI0MDc5MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0QXR0cmlidXRlTGlzdGVuZXJBbm5vdGF0aW9uUHJlRGVzdHJveS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0QXR0cmlidXRlTGlzdGVuZXJBbm5vdGF0aW9uUHJlRGVzdHJveS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDIyICs0NCwyMiBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MSwxMCArNzEsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHREZXN0cm95ZWRFdmVudEF0dHJpYnV0ZXNBdmFpbGFibGUvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0RGVzdHJveWVkRXZlbnRBdHRyaWJ1dGVzQXZhaWxhYmxlL1dlYlRlc3QuamF2YQppbmRleCAwNzcyYTMxLi5lM2NhNTRiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHREZXN0cm95ZWRFdmVudEF0dHJpYnV0ZXNBdmFpbGFibGUvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dERlc3Ryb3llZEV2ZW50QXR0cmlidXRlc0F2YWlsYWJsZS9XZWJUZXN0LmphdmEKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgICAgICBydW4gPSBhcmdzWzNdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIElzc3VlIDY0NDIiKTsKQEAgLTYzLDcgKzYzLDcgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIC8qKgpAQCAtNzIsNyArNzIsNyBAQAogICAgICAqIGF0IGl0cyBjb250ZXh0RGVzdHJveWVkKCkgbWV0aG9kIGFuZCB3aWxsIGF0dGVtcHQgdG8gYWNjZXNzIHRoZQogICAgICAqIFNlcnZsZXRDb250ZXh0IGF0dHJpYnV0ZSB0aGF0IHdhcyBhZGRlZCBieSB0aGUgc2VydmxldC4KICAgICAgKiBJZiB0aGUgYXR0cmlidXRlIGlzIHByZXNlbnQsIHRoZSBTZXJ2bGV0Q29udGV4dExpc3RlbmVyIHdpbGwgd3JpdGUKLSAgICAgKiB0aGUgd29yZCAiU1VDQ0VTUyIgdG8gL3RtcC9teXRlc3QuIE90aGVyd2lzZSwgaXQgd2lsbCB3cml0ZSBGQUlMIHRvIAorICAgICAqIHRoZSB3b3JkICJTVUNDRVNTIiB0byAvdG1wL215dGVzdC4gT3RoZXJ3aXNlLCBpdCB3aWxsIHdyaXRlIEZBSUwgdG8KICAgICAgKiB0aGF0IGZpbGUuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgZmlyc3RSdW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dERlc3Ryb3llZEV2ZW50QXR0cmlidXRlc0F2YWlsYWJsZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0RGVzdHJveWVkRXZlbnRBdHRyaWJ1dGVzQXZhaWxhYmxlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOTdlY2UwZS4uZWQ5YWY3OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0RGVzdHJveWVkRXZlbnRBdHRyaWJ1dGVzQXZhaWxhYmxlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0RGVzdHJveWVkRXZlbnRBdHRyaWJ1dGVzQXZhaWxhYmxlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC1jb250ZXh0LWRlc3Ryb3llZC1ldmVudC1hdHRyaWJ1dGVzLWF2YWlsYWJsZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0RGVzdHJveWVkRXZlbnRBdHRyaWJ1dGVzQXZhaWxhYmxlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dERlc3Ryb3llZEV2ZW50QXR0cmlidXRlc0F2YWlsYWJsZS9idWlsZC54bWwKaW5kZXggZWU2NWRhNi4uMGE3ZDE5OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0RGVzdHJveWVkRXZlbnRBdHRyaWJ1dGVzQXZhaWxhYmxlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHREZXN0cm95ZWRFdmVudEF0dHJpYnV0ZXNBdmFpbGFibGUvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwyMSArNDQsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZmlyc3RSdW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtODQsMTAgKzg0LDEwIEBACiAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRHZXRDb250ZXh0UGF0aC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRHZXRDb250ZXh0UGF0aC9XZWJUZXN0LmphdmEKaW5kZXggZjdkODZkOC4uNDM4YmMxMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0R2V0Q29udGV4dFBhdGgvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dEdldENvbnRleHRQYXRoL1dlYlRlc3QuamF2YQpAQCAtMzgsNyArMzgsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIFNlcnZsZXRDb250ZXh0LmdldENvbnRleHRQYXRoKCkiKTsKQEAgLTUyLDExICs1MiwxMSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICArICIvVGVzdFNlcnZsZXQiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwpAQCAtNzEsOCArNzEsOCBAQAogICAgICAgICBCdWZmZXJlZFJlYWRlciBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKICAgICAgICAgU3RyaW5nIGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpOwogICAgICAgICBpZiAoIWNvbnRleHRSb290LmVxdWFscyhsaW5lKSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0Um9vdCArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRHZXRDb250ZXh0UGF0aC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0R2V0Q29udGV4dFBhdGgvYnVpbGQucHJvcGVydGllcwppbmRleCA0OWMzZTIxLi40NDg2OGJhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRHZXRDb250ZXh0UGF0aC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dEdldENvbnRleHRQYXRoL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC1jb250ZXh0LWdldC1jb250ZXh0LXBhdGgiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dEdldENvbnRleHRQYXRoL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dEdldENvbnRleHRQYXRoL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRHZXRDb250ZXh0UGF0aC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0R2V0Q29udGV4dFBhdGgvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0R2V0RW1wdHlDb250ZXh0UGF0aC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRHZXRFbXB0eUNvbnRleHRQYXRoL1dlYlRlc3QuamF2YQppbmRleCBiMGNhYmU1Li5lODVhZTM3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRHZXRFbXB0eUNvbnRleHRQYXRoL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRHZXRFbXB0eUNvbnRleHRQYXRoL1dlYlRlc3QuamF2YQpAQCAtMjUsNyArMjUsNyBAQAogICogVGhlIGVtcHR5IGNvbnRleHQgcGF0aCBpcyBzcGVjaWZpZWQgaW4gdGhlIHN1bi13ZWIueG1sLCBhcyBmb2xsb3dzOgogICoKICAqICA8c3VuLXdlYi1hcHA+Ci0gKiAgICA8Y29udGV4dC1yb290PjwvY29udGV4dC1yb290PiAKKyAqICAgIDxjb250ZXh0LXJvb3Q+PC9jb250ZXh0LXJvb3Q+CiAgKiAgPC9zdW4td2ViLWFwcD4KICAqCiAgKiBhbmQgdGhlcmUgaXMgbm8gY29udGV4dHJvb3Qgc3BlY2lmaWVkIGluIGJ1aWxkLnByb3BlcnRpZXMuCkBAIC00Nyw3ICs0Nyw3IEBACiAgICAgICAgIGhvc3QgPSBhcmdzWzBdOwogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBTZXJ2bGV0Q29udGV4dC5nZXRDb250ZXh0UGF0aCgpIik7CkBAIC02MCwxMSArNjAsMTEgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQgKyAiL1Rlc3RTZXJ2bGV0Iik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CkBAIC04MCwxMCArODAsMTAgQEAKICAgICAgICAgICAgIGlmIChFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0R2V0RW1wdHlDb250ZXh0UGF0aC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0R2V0RW1wdHlDb250ZXh0UGF0aC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDFjNGYwZWMuLjYyMzNjMDMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dEdldEVtcHR5Q29udGV4dFBhdGgvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRHZXRFbXB0eUNvbnRleHRQYXRoL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC1jb250ZXh0LWdldC1lbXB0eS1jb250ZXh0LXBhdGgiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dEdldEVtcHR5Q29udGV4dFBhdGgvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0R2V0RW1wdHlDb250ZXh0UGF0aC9idWlsZC54bWwKaW5kZXggNmM5NjgzZi4uOTY4ZGViOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0R2V0RW1wdHlDb250ZXh0UGF0aC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0R2V0RW1wdHlDb250ZXh0UGF0aC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDIzICs0MiwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLW5vLWNvbnRleHQtcm9vdCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTcwLDEwICs3MCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dEdldEVtcHR5Q29udGV4dFBhdGgvZGVzY3JpcHRvci9zdW4td2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dEdldEVtcHR5Q29udGV4dFBhdGgvZGVzY3JpcHRvci9zdW4td2ViLnhtbAppbmRleCA2NTZjNTJjLi4xMjkyMWQyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRHZXRFbXB0eUNvbnRleHRQYXRoL2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0R2V0RW1wdHlDb250ZXh0UGF0aC9kZXNjcmlwdG9yL3N1bi13ZWIueG1sCkBAIC0yMCw1ICsyMCw1IEBACiA8IURPQ1RZUEUgc3VuLXdlYi1hcHAgUFVCTElDICItLy9TdW4gTWljcm9zeXN0ZW1zLCBJbmMuLy9EVEQgQXBwbGljYXRpb24gU2VydmVyIDguMSBTZXJ2bGV0IDIuNC8vRU4iICJodHRwOi8vd3d3LnN1bi5jb20vc29mdHdhcmUvc3Vub25lL2FwcHNlcnZlci9kdGRzL3N1bi13ZWItYXBwXzJfNC0xLmR0ZCI+CiAKIDxzdW4td2ViLWFwcD4KLSAgPGNvbnRleHQtcm9vdD4vPC9jb250ZXh0LXJvb3Q+IAorICA8Y29udGV4dC1yb290Pi88L2NvbnRleHQtcm9vdD4KIDwvc3VuLXdlYi1hcHA+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRMaXN0ZW5lckFubm90YXRpb25QcmVEZXN0cm95L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dExpc3RlbmVyQW5ub3RhdGlvblByZURlc3Ryb3kvV2ViVGVzdC5qYXZhCmluZGV4IGMyMTA4NjguLjdmZGM0OTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dExpc3RlbmVyQW5ub3RhdGlvblByZURlc3Ryb3kvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dExpc3RlbmVyQW5ub3RhdGlvblByZURlc3Ryb3kvV2ViVGVzdC5qYXZhCkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgSXNzdWUgNjM5MSIpOwpAQCAtNTQsNyArNTQsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CkBAIC04NSwxMCArODUsMTAgQEAKICAgICAgICAgICAgICAgICAvLyBpZ25vcmUKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgaWYgKCJTVUNDRVNTIi5lcXVhbHMobGluZSkpIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKLQl9IGVsc2UgeworICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRMaXN0ZW5lckFubm90YXRpb25QcmVEZXN0cm95L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRMaXN0ZW5lckFubm90YXRpb25QcmVEZXN0cm95L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggM2JkYWNjZC4uMzdkODY5MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0TGlzdGVuZXJBbm5vdGF0aW9uUHJlRGVzdHJveS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dExpc3RlbmVyQW5ub3RhdGlvblByZURlc3Ryb3kvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LWNvbnRleHQtbGlzdGVuZXItYW5ub3RhdGlvbi1wcmVkZXN0cm95Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHRMaXN0ZW5lckFubm90YXRpb25QcmVEZXN0cm95L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dExpc3RlbmVyQW5ub3RhdGlvblByZURlc3Ryb3kvYnVpbGQueG1sCmluZGV4IGU1NTIxOWQuLjViZjRiMzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dExpc3RlbmVyQW5ub3RhdGlvblByZURlc3Ryb3kvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dExpc3RlbmVyQW5ub3RhdGlvblByZURlc3Ryb3kvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwyMyArNDQsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MiwxMCArNzIsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHROdWxsUGF0aEFyZ3VtZW50L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dE51bGxQYXRoQXJndW1lbnQvV2ViVGVzdC5qYXZhCmluZGV4IGUxZjUyMWEuLjAyMWNmNzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dE51bGxQYXRoQXJndW1lbnQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dE51bGxQYXRoQXJndW1lbnQvV2ViVGVzdC5qYXZhCkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIDYyNjUwNjYiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC01MCw4ICs1MCw4IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAKLSAgICAgICAgdHJ5IHsgCisKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dE51bGxQYXRoQXJndW1lbnQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dE51bGxQYXRoQXJndW1lbnQvYnVpbGQucHJvcGVydGllcwppbmRleCBhZWYzOWQyLi5hYmI2YTA1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldENvbnRleHROdWxsUGF0aEFyZ3VtZW50L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0TnVsbFBhdGhBcmd1bWVudC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtY29udGV4dC1udWxsLXBhdGgtYXJndW1lbnQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0Q29udGV4dE51bGxQYXRoQXJndW1lbnQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0TnVsbFBhdGhBcmd1bWVudC9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0TnVsbFBhdGhBcmd1bWVudC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRDb250ZXh0TnVsbFBhdGhBcmd1bWVudC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEVtcHR5TG9hZE9uU3RhcnR1cC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEVtcHR5TG9hZE9uU3RhcnR1cC9XZWJUZXN0LmphdmEKaW5kZXggYmZmYmVjZC4uYjhkODEzOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRFbXB0eUxvYWRPblN0YXJ0dXAvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0RW1wdHlMb2FkT25TdGFydHVwL1dlYlRlc3QuamF2YQpAQCAtNDQsNyArNDQsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciA2MTcyMDA2Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTIsOCArNTIsOCBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBydW4oKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CkBAIC02Miw3ICs2Miw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgcnVuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICsgIi9UZXN0U2VydmxldCI7CiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pCkBAIC04NCw2ICs4NCw2IEBACiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0RW1wdHlMb2FkT25TdGFydHVwL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEVtcHR5TG9hZE9uU3RhcnR1cC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGM4MzUzYjAuLjQ4ZDZmMGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0RW1wdHlMb2FkT25TdGFydHVwL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRFbXB0eUxvYWRPblN0YXJ0dXAvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LWVtcHR5LWxvYWQtb24tc3RhcnR1cCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRFbXB0eUxvYWRPblN0YXJ0dXAvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRFbXB0eUxvYWRPblN0YXJ0dXAvYnVpbGQueG1sCmluZGV4IDg1NDJlOTEuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0RW1wdHlMb2FkT25TdGFydHVwL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEVtcHR5TG9hZE9uU3RhcnR1cC9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE3ICs0MiwxNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRFbXB0eUxvYWRPblN0YXJ0dXAvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRFbXB0eUxvYWRPblN0YXJ0dXAvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IGY1YzRkM2IuLmFlNWI5NTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0RW1wdHlMb2FkT25TdGFydHVwL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEVtcHR5TG9hZE9uU3RhcnR1cC9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTI0LDcgKzI0LDcgQEAKICAgICAgICAgPHNlcnZsZXQtbmFtZT5UZXN0U2VydmxldDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz5UZXN0U2VydmxldDwvc2VydmxldC1jbGFzcz4KICAgICAgICAgPGxvYWQtb24tc3RhcnR1cC8+Ci0gICAgPC9zZXJ2bGV0PiAgCisgICAgPC9zZXJ2bGV0PgogCiAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEZpbHRlckRlZmF1bHRJbnZvY2F0aW9uT3JkZXIvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRGaWx0ZXJEZWZhdWx0SW52b2NhdGlvbk9yZGVyL1dlYlRlc3QuamF2YQppbmRleCA2N2FlNDg4Li42ZGRhYTUxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEZpbHRlckRlZmF1bHRJbnZvY2F0aW9uT3JkZXIvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0RmlsdGVyRGVmYXVsdEludm9jYXRpb25PcmRlci9XZWJUZXN0LmphdmEKQEAgLTE5LDcgKzE5LDcgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLio7CiAKIC8qCi0gKiBVbml0IHRlc3QgZm9yIAorICogVW5pdCB0ZXN0IGZvcgogICoKICAqICAgaHR0cHM6Ly9nbGFzc2Zpc2guZGV2LmphdmEubmV0L2lzc3Vlcy9zaG93X2J1Zy5jZ2k/aWQ9Njk0MwogICogICAoIkdyYWlscyBzYW1wbGUgYXBwIGZhaWxlZCB3aXRoIFNlcnZsZXQgZ3NwIE5QRSIpCkBAIC0yOSw3ICsyOSw3IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfTkFNRSA9ICJzZXJ2bGV0LWZpbHRlci1kZWZhdWx0LWludm9jYXRpb24tb3JkZXIiOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVYUEVDVEVEX1JFU1BPTlNFID0gInRydWUiOwotIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKQEAgLTQyLDcgKzQyLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBJVCA2OTQzIik7CkBAIC01NiwxMSArNTYsMTEgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjb250ZXh0Um9vdCArICIvVGVzdFNlcnZsZXQiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwpAQCAtNzYsOSArNzYsOSBAQAogICAgICAgICAgICAgQnVmZmVyZWRSZWFkZXIgaW5wdXQgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAgICAgICAgICAgICBTdHJpbmcgbGluZSA9IGlucHV0LnJlYWRMaW5lKCk7CiAgICAgICAgICAgICBpZiAoIUVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRGaWx0ZXJEZWZhdWx0SW52b2NhdGlvbk9yZGVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEZpbHRlckRlZmF1bHRJbnZvY2F0aW9uT3JkZXIvYnVpbGQucHJvcGVydGllcwppbmRleCBmODYyOGYxLi5kZGJmMmEzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEZpbHRlckRlZmF1bHRJbnZvY2F0aW9uT3JkZXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEZpbHRlckRlZmF1bHRJbnZvY2F0aW9uT3JkZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LWZpbHRlci1kZWZhdWx0LWludm9jYXRpb24tb3JkZXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0RmlsdGVyRGVmYXVsdEludm9jYXRpb25PcmRlci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEZpbHRlckRlZmF1bHRJbnZvY2F0aW9uT3JkZXIvYnVpbGQueG1sCmluZGV4IDAwZmRhZDMuLmMzOTc3NmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0RmlsdGVyRGVmYXVsdEludm9jYXRpb25PcmRlci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRGaWx0ZXJEZWZhdWx0SW52b2NhdGlvbk9yZGVyL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMjMgKzQyLDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzAsMTAgKzcwLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRGaWx0ZXJEZWZhdWx0SW52b2NhdGlvbk9yZGVyL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0RmlsdGVyRGVmYXVsdEludm9jYXRpb25PcmRlci9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggYmVjMjM5MC4uYmU1YzFlOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRGaWx0ZXJEZWZhdWx0SW52b2NhdGlvbk9yZGVyL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEZpbHRlckRlZmF1bHRJbnZvY2F0aW9uT3JkZXIvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0xOCwxNyArMTgsMTcgQEAKIC0tPgogCiA8d2ViLWFwcCB2ZXJzaW9uPSIyLjUiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgotICAgICAKKwogICAgIDxmaWx0ZXI+CiAgICAgICAgIDxmaWx0ZXItbmFtZT5GaWx0ZXJfQTwvZmlsdGVyLW5hbWU+CiAgICAgICAgIDxmaWx0ZXItY2xhc3M+RmlsdGVyX0E8L2ZpbHRlci1jbGFzcz4KLSAgICA8L2ZpbHRlcj4gICAgCisgICAgPC9maWx0ZXI+CiAKICAgICA8ZmlsdGVyPgogICAgICAgICA8ZmlsdGVyLW5hbWU+RmlsdGVyX0I8L2ZpbHRlci1uYW1lPgogICAgICAgICA8ZmlsdGVyLWNsYXNzPkZpbHRlcl9CPC9maWx0ZXItY2xhc3M+Ci0gICAgPC9maWx0ZXI+ICAgIAotICAgICAgICAKKyAgICA8L2ZpbHRlcj4KKwogICAgIDxmaWx0ZXItbWFwcGluZz4KICAgICAgICAgPGZpbHRlci1uYW1lPkZpbHRlcl9BPC9maWx0ZXItbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi8qPC91cmwtcGF0dGVybj4KQEAgLTM4LDEyICszOCwxMiBAQAogICAgICAgICA8ZmlsdGVyLW5hbWU+RmlsdGVyX0I8L2ZpbHRlci1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+Lyo8L3VybC1wYXR0ZXJuPgogICAgIDwvZmlsdGVyLW1hcHBpbmc+Ci0gICAgCisKICAgICA8c2VydmxldD4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5UZXN0U2VydmxldDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz5UZXN0U2VydmxldDwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKLSAgICAKKyAgICA8L3NlcnZsZXQ+CisKICAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vVGVzdFNlcnZsZXQ8L3VybC1wYXR0ZXJuPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRGaWx0ZXJNYXBwaW5nV2l0aFNlcnZsZXROYW1lQW5kVVJMUGF0dGVybi9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEZpbHRlck1hcHBpbmdXaXRoU2VydmxldE5hbWVBbmRVUkxQYXR0ZXJuL1dlYlRlc3QuamF2YQppbmRleCBiMzM4NGYyLi4zYTY5OWM2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEZpbHRlck1hcHBpbmdXaXRoU2VydmxldE5hbWVBbmRVUkxQYXR0ZXJuL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEZpbHRlck1hcHBpbmdXaXRoU2VydmxldE5hbWVBbmRVUkxQYXR0ZXJuL1dlYlRlc3QuamF2YQpAQCAtMjgsNyArMjgsNyBAQAogICAgICAgICAic2VydmxldC1maWx0ZXItbWFwcGluZy13aXRoLXNlcnZsZXRuYW1lLWFuZC11cmxwYXR0ZXJuIjsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFWFBFQ1RFRF9SRVNQT05TRSA9ICJ0cnVlIjsKLSAKKwogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0CiAgICAgICAgID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgZmlsdGVyLW1hcHBpbmcgd2l0aCBib3RoICIKQEAgLTU2LDExICs1NiwxMSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgICArIGNvbnRleHRSb290ICsgIi9UZXN0U2VydmxldCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CkBAIC04MCw3ICs4MCw3IEBACiAgICAgICAgICAgICBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKICAgICAgICAgICAgIFN0cmluZyBsaW5lID0gaW5wdXQucmVhZExpbmUoKTsKICAgICAgICAgICAgIGlmICghRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGZpbmFsbHkgewpAQCAtOTgsNiArOTgsNiBAQAogICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKSB7CiAgICAgICAgICAgICAgICAgLy8gaWdub3JlCiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRGaWx0ZXJNYXBwaW5nV2l0aFNlcnZsZXROYW1lQW5kVVJMUGF0dGVybi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRGaWx0ZXJNYXBwaW5nV2l0aFNlcnZsZXROYW1lQW5kVVJMUGF0dGVybi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDkzYmIxZGYuLjMyYTE3Y2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0RmlsdGVyTWFwcGluZ1dpdGhTZXJ2bGV0TmFtZUFuZFVSTFBhdHRlcm4vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEZpbHRlck1hcHBpbmdXaXRoU2VydmxldE5hbWVBbmRVUkxQYXR0ZXJuL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC1maWx0ZXItbWFwcGluZy13aXRoLXNlcnZsZXRuYW1lLWFuZC11cmxwYXR0ZXJuIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEZpbHRlck1hcHBpbmdXaXRoU2VydmxldE5hbWVBbmRVUkxQYXR0ZXJuL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0RmlsdGVyTWFwcGluZ1dpdGhTZXJ2bGV0TmFtZUFuZFVSTFBhdHRlcm4vYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0RmlsdGVyTWFwcGluZ1dpdGhTZXJ2bGV0TmFtZUFuZFVSTFBhdHRlcm4vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0RmlsdGVyTWFwcGluZ1dpdGhTZXJ2bGV0TmFtZUFuZFVSTFBhdHRlcm4vYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRGaWx0ZXJNYXBwaW5nV2l0aFNlcnZsZXROYW1lQW5kVVJMUGF0dGVybi9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEZpbHRlck1hcHBpbmdXaXRoU2VydmxldE5hbWVBbmRVUkxQYXR0ZXJuL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCAxNTIxOWM1Li4zNjk4MzMxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEZpbHRlck1hcHBpbmdXaXRoU2VydmxldE5hbWVBbmRVUkxQYXR0ZXJuL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEZpbHRlck1hcHBpbmdXaXRoU2VydmxldE5hbWVBbmRVUkxQYXR0ZXJuL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMTgsMjQgKzE4LDI0IEBACiAtLT4KIAogPHdlYi1hcHAgdmVyc2lvbj0iMi41IiB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KLSAgICAgCisKICAgICA8ZmlsdGVyPgogICAgICAgICA8ZmlsdGVyLW5hbWU+VGVzdEZpbHRlcjwvZmlsdGVyLW5hbWU+CiAgICAgICAgIDxmaWx0ZXItY2xhc3M+dGVzdC5UZXN0RmlsdGVyPC9maWx0ZXItY2xhc3M+Ci0gICAgPC9maWx0ZXI+ICAgIAotICAgICAgICAKKyAgICA8L2ZpbHRlcj4KKwogICAgIDxmaWx0ZXItbWFwcGluZz4KICAgICAgICAgPGZpbHRlci1uYW1lPlRlc3RGaWx0ZXI8L2ZpbHRlci1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L1Rlc3RTZXJ2bGV0PC91cmwtcGF0dGVybj4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5UZXN0U2VydmxldDwvc2VydmxldC1uYW1lPgogICAgICAgICA8ZGlzcGF0Y2hlcj5SRVFVRVNUPC9kaXNwYXRjaGVyPgogICAgIDwvZmlsdGVyLW1hcHBpbmc+Ci0gICAgCisKICAgICA8c2VydmxldD4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5UZXN0U2VydmxldDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAotICAgIAorICAgIDwvc2VydmxldD4KKwogICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+VGVzdFNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi9UZXN0U2VydmxldDwvdXJsLXBhdHRlcm4+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEZpbHRlck1hcHBpbmdXaXRoU2VydmxldE5hbWVBbmRVUkxQYXR0ZXJuL3NlcnZsZXQvdGVzdC9UZXN0RmlsdGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEZpbHRlck1hcHBpbmdXaXRoU2VydmxldE5hbWVBbmRVUkxQYXR0ZXJuL3NlcnZsZXQvdGVzdC9UZXN0RmlsdGVyLmphdmEKaW5kZXggNjVhYWU3MC4uODMzNjM3ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRGaWx0ZXJNYXBwaW5nV2l0aFNlcnZsZXROYW1lQW5kVVJMUGF0dGVybi9zZXJ2bGV0L3Rlc3QvVGVzdEZpbHRlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0RmlsdGVyTWFwcGluZ1dpdGhTZXJ2bGV0TmFtZUFuZFVSTFBhdHRlcm4vc2VydmxldC90ZXN0L1Rlc3RGaWx0ZXIuamF2YQpAQCAtMjYsNyArMjYsNyBAQAogICAgIHByaXZhdGUgQXRvbWljSW50ZWdlciBjb3VudDsKIAogICAgIHB1YmxpYyB2b2lkIGluaXQoRmlsdGVyQ29uZmlnIGZpbHRlckNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewotICAgICAgICBjb3VudCA9IG5ldyBBdG9taWNJbnRlZ2VyKCk7ICAgIAorICAgICAgICBjb3VudCA9IG5ldyBBdG9taWNJbnRlZ2VyKCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9GaWx0ZXIgKFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEZpbHRlck1hcHBpbmdXaXRoU2VydmxldE5hbWVBbmRVUkxQYXR0ZXJuL3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRGaWx0ZXJNYXBwaW5nV2l0aFNlcnZsZXROYW1lQW5kVVJMUGF0dGVybi9zZXJ2bGV0L3Rlc3QvVGVzdFNlcnZsZXQuamF2YQppbmRleCBlNTEwZjYzLi5jNzQ1MTI3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEZpbHRlck1hcHBpbmdXaXRoU2VydmxldE5hbWVBbmRVUkxQYXR0ZXJuL3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0RmlsdGVyTWFwcGluZ1dpdGhTZXJ2bGV0TmFtZUFuZFVSTFBhdHRlcm4vc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKICAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbiB7CiAKICAgICAgICAgYm9vbGVhbiBzdWNjZXNzID0gZmFsc2U7Ci0gICAgICAgIAorCiAgICAgICAgIEF0b21pY0ludGVnZXIgY291bnQgPSAoQXRvbWljSW50ZWdlcikgcmVxLmdldEF0dHJpYnV0ZSgiZmlsdGVyQ291bnQiKTsKICAgICAgICAgaWYgKGNvdW50ICE9IG51bGwgJiYgY291bnQuaW50VmFsdWUoKSA9PSAyKSB7CiAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0R2V0U2VydmVyUG9ydC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEdldFNlcnZlclBvcnQvV2ViVGVzdC5qYXZhCmluZGV4IGUxZGI2MTEuLmZlN2Q2NTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0R2V0U2VydmVyUG9ydC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRHZXRTZXJ2ZXJQb3J0L1dlYlRlc3QuamF2YQpAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciA2MzU2ODEzIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNzcsNiArNzcsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRHZXRTZXJ2ZXJQb3J0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEdldFNlcnZlclBvcnQvYnVpbGQucHJvcGVydGllcwppbmRleCAyNjdmNTIxLi44ODdhZWFlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEdldFNlcnZlclBvcnQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEdldFNlcnZlclBvcnQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtZ2V0LXNlcnZlci1wb3J0Ii8+IAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC1nZXQtc2VydmVyLXBvcnQiLz5cdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvJHthcHBuYW1lfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRHZXRTZXJ2ZXJQb3J0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0R2V0U2VydmVyUG9ydC9idWlsZC54bWwKaW5kZXggZmFmN2Y1NS4uNTFhMWNiYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRHZXRTZXJ2ZXJQb3J0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEdldFNlcnZlclBvcnQvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxNSArNDIsMTUgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTU4LDcgKzU4LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogCiAgICAgICAgICAgPGphdmFjCkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEdldFNlcnZlclBvcnQvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRHZXRTZXJ2ZXJQb3J0L2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCAwNGJkZmM1Li5lYTBmNjIwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEdldFNlcnZlclBvcnQvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0R2V0U2VydmVyUG9ydC9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTIyLDEyICsyMiwxMiBAQAogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCIKICAgICAgICAgIHZlcnNpb249IjIuNCI+Ci0gICAgIAorCiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+VGVzdFNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+VGVzdFNlcnZsZXQ8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCi0gICAgCisgICAgPC9zZXJ2bGV0PgorCiAgICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5UZXN0U2VydmxldDwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L1Rlc3RTZXJ2bGV0PC91cmwtcGF0dGVybj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0R2V0U2VydmVyUG9ydC9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEdldFNlcnZlclBvcnQvc2VydmxldC9UZXN0U2VydmxldC5qYXZhCmluZGV4IDg2ODM2YzMuLmM0ZDk2NDYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0R2V0U2VydmVyUG9ydC9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRHZXRTZXJ2ZXJQb3J0L3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQpAQCAtMTksNyArMTksNyBAQAogaW1wb3J0IGpha2FydGEuc2VydmxldC5odHRwLio7CiAKIHB1YmxpYyBjbGFzcyBUZXN0U2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzKQogICAgICAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRJbml0QmVmb3JlR2V0U2VydmxldENvbmZpZy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEluaXRCZWZvcmVHZXRTZXJ2bGV0Q29uZmlnL1dlYlRlc3QuamF2YQppbmRleCBkYzRmNTlkLi41NmFjYzk3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEluaXRCZWZvcmVHZXRTZXJ2bGV0Q29uZmlnL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEluaXRCZWZvcmVHZXRTZXJ2bGV0Q29uZmlnL1dlYlRlc3QuamF2YQpAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBJVCAxNzIxNiIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKQEAgLTU2LDcgKzU2LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICArICIvbXl1cmwiOwogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKQpAQCAtOTMsMTAgKzkzLDEwIEBACiAgICAgICAgICAgICBpZiAoRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEluaXRCZWZvcmVHZXRTZXJ2bGV0Q29uZmlnL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEluaXRCZWZvcmVHZXRTZXJ2bGV0Q29uZmlnL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYWJlOTY5Mi4uOGY3YTRiNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRJbml0QmVmb3JlR2V0U2VydmxldENvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0SW5pdEJlZm9yZUdldFNlcnZsZXRDb25maWcvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LWluaXQtYmVmb3JlLWdldC1zZXJ2bGV0LWNvbmZpZyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRJbml0QmVmb3JlR2V0U2VydmxldENvbmZpZy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEluaXRCZWZvcmVHZXRTZXJ2bGV0Q29uZmlnL2J1aWxkLnhtbAppbmRleCA4NmY1MWVkLi43YWFiNzdhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEluaXRCZWZvcmVHZXRTZXJ2bGV0Q29uZmlnL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldEluaXRCZWZvcmVHZXRTZXJ2bGV0Q29uZmlnL2J1aWxkLnhtbApAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NywxOSArNDcsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0SW5pdEJlZm9yZUdldFNlcnZsZXRDb25maWcvc2VydmxldC9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRJbml0QmVmb3JlR2V0U2VydmxldENvbmZpZy9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggYzBmMzM3ZS4uMjBkZGFjZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRJbml0QmVmb3JlR2V0U2VydmxldENvbmZpZy9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRJbml0QmVmb3JlR2V0U2VydmxldENvbmZpZy9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKIHB1YmxpYyBjbGFzcyBUZXN0U2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKICAgICBwcml2YXRlIHZvbGF0aWxlIEludGVnZXIgaSA9IG51bGw7CiAgICAgcHJpdmF0ZSB2b2xhdGlsZSBCb29sZWFuIGluaXRCZWZvcmVHZXRDb25maWcgPSBudWxsOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgaW5pdCgpIHsKICAgICAgICAgaSA9IG5ldyBJbnRlZ2VyKDEpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0TG9hZE9uU3RhcnR1cE11bHRpcGxlSW5pdC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldExvYWRPblN0YXJ0dXBNdWx0aXBsZUluaXQvV2ViVGVzdC5qYXZhCmluZGV4IGIxYWJlYjUuLjQzZGQ1Y2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0TG9hZE9uU3RhcnR1cE11bHRpcGxlSW5pdC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRMb2FkT25TdGFydHVwTXVsdGlwbGVJbml0L1dlYlRlc3QuamF2YQpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIElUIDg1NTciKTsKQEAgLTU1LDExICs1NSwxMSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgICArIGNvbnRleHRSb290ICsgIi9UZXN0U2VydmxldCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldExvYWRPblN0YXJ0dXBNdWx0aXBsZUluaXQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0TG9hZE9uU3RhcnR1cE11bHRpcGxlSW5pdC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGViZjgyZDIuLmRkMDA3YjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0TG9hZE9uU3RhcnR1cE11bHRpcGxlSW5pdC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0TG9hZE9uU3RhcnR1cE11bHRpcGxlSW5pdC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtbG9hZC1vbi1zdGFydHVwLW11bHRpcGxlLWluaXQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0TG9hZE9uU3RhcnR1cE11bHRpcGxlSW5pdC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldExvYWRPblN0YXJ0dXBNdWx0aXBsZUluaXQvYnVpbGQueG1sCmluZGV4IDhkMmFkZjkuLmJjZmIxOWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0TG9hZE9uU3RhcnR1cE11bHRpcGxlSW5pdC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRMb2FkT25TdGFydHVwTXVsdGlwbGVJbml0L2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0TWFwcGluZ1dpdGhNdWx0aXBsZVVSTFBhdHRlcm5zL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0TWFwcGluZ1dpdGhNdWx0aXBsZVVSTFBhdHRlcm5zL1dlYlRlc3QuamF2YQppbmRleCAxODUxMzAxLi5iNTk3YjNkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldE1hcHBpbmdXaXRoTXVsdGlwbGVVUkxQYXR0ZXJucy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRNYXBwaW5nV2l0aE11bHRpcGxlVVJMUGF0dGVybnMvV2ViVGVzdC5qYXZhCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3Igc2VydmxldC1tYXBwaW5nIHdpdGggIgpAQCAtNTMsMTEgKzUzLDExIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgYm9vbGVhbiBmYWlsID0gZmFsc2U7CiAgICAgICAgIFVSTCB1cmwgPSBudWxsOwogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKQEAgLTg4LDYgKzg4LDYgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0TWFwcGluZ1dpdGhNdWx0aXBsZVVSTFBhdHRlcm5zL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldE1hcHBpbmdXaXRoTXVsdGlwbGVVUkxQYXR0ZXJucy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGY1ZDUyMWIuLmNhNTdmN2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0TWFwcGluZ1dpdGhNdWx0aXBsZVVSTFBhdHRlcm5zL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRNYXBwaW5nV2l0aE11bHRpcGxlVVJMUGF0dGVybnMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LW1hcHBpbmctd2l0aC1tdWx0aXBsZS11cmwtcGF0dGVybnMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0TWFwcGluZ1dpdGhNdWx0aXBsZVVSTFBhdHRlcm5zL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0TWFwcGluZ1dpdGhNdWx0aXBsZVVSTFBhdHRlcm5zL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldE1hcHBpbmdXaXRoTXVsdGlwbGVVUkxQYXR0ZXJucy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRNYXBwaW5nV2l0aE11bHRpcGxlVVJMUGF0dGVybnMvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZWxhdGl2ZUNvbnRleHRVUkxzRXF1YWxzL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVsYXRpdmVDb250ZXh0VVJMc0VxdWFscy9XZWJUZXN0LmphdmEKaW5kZXggOTI3YTYzZi4uMDZmOWMzYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZWxhdGl2ZUNvbnRleHRVUkxzRXF1YWxzL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlbGF0aXZlQ29udGV4dFVSTHNFcXVhbHMvV2ViVGVzdC5qYXZhCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgNjMxODQ5NCIpOwpAQCAtNTIsMTggKzUyLDE4IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL1Rlc3RTZXJ2bGV0Iik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsgCisgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZSBjb2RlLiBFeHBlY3RlZDogMjAwIiArCiAgICAgICAgICAgICAgICAgIiwgcmVjZWl2ZWQ6ICIgKyByZXNwb25zZUNvZGUpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlbGF0aXZlQ29udGV4dFVSTHNFcXVhbHMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVsYXRpdmVDb250ZXh0VVJMc0VxdWFscy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDNmZjY2ZjIuLjQyYzFiYzIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVsYXRpdmVDb250ZXh0VVJMc0VxdWFscy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVsYXRpdmVDb250ZXh0VVJMc0VxdWFscy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtcmVsYXRpdmUtY29udGV4dC11cmxzLWVxdWFscyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZWxhdGl2ZUNvbnRleHRVUkxzRXF1YWxzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVsYXRpdmVDb250ZXh0VVJMc0VxdWFscy9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZWxhdGl2ZUNvbnRleHRVUkxzRXF1YWxzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlbGF0aXZlQ29udGV4dFVSTHNFcXVhbHMvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZWxhdGl2ZUNvbnRleHRVUkxzRXF1YWxzL3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZWxhdGl2ZUNvbnRleHRVUkxzRXF1YWxzL3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhCmluZGV4IGI2YTcxZDAuLjczYzMxNjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVsYXRpdmVDb250ZXh0VVJMc0VxdWFscy9zZXJ2bGV0L3Rlc3QvVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlbGF0aXZlQ29udGV4dFVSTHNFcXVhbHMvc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTM0LDggKzM0LDggQEAKICAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgU2VydmxldEV4Y2VwdGlvbiB7CiAKICAgICAgICAgYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKLQkKLQl0cnkgeworCisgICAgdHJ5IHsKICAgICAgICAgICAgIFVSTCBtYWluID0gY29udGV4dC5nZXRSZXNvdXJjZSgiL3Rlc3QvcmVzMS5qc3AiKTsKICAgICAgICAgICAgIFVSTCBzdWIgPSBuZXcgVVJMKG1haW4sICJyZXMyLmpzcCIpOwogICAgICAgICAgICAgVVJMIHN1YjEgPSBjb250ZXh0LmdldFJlc291cmNlKCIvdGVzdC9yZXMyLmpzcCIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXF1ZXN0R2V0UGF0aEluZm9Db2xsYXBzZUNvbnRpZ3VvdXNTbGFzaGVzL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVxdWVzdEdldFBhdGhJbmZvQ29sbGFwc2VDb250aWd1b3VzU2xhc2hlcy9XZWJUZXN0LmphdmEKaW5kZXggNWEzYWYwZC4uZTdiN2I1NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXF1ZXN0R2V0UGF0aEluZm9Db2xsYXBzZUNvbnRpZ3VvdXNTbGFzaGVzL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RHZXRQYXRoSW5mb0NvbGxhcHNlQ29udGlndW91c1NsYXNoZXMvV2ViVGVzdC5qYXZhCkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgR2xhc3NGaXNoIGlzc3VlIDM1MDUiKTsKQEAgLTU0LDExICs1NCwxMSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgICArIGNvbnRleHRSb290ICsgIi9UZXN0U2VydmxldC9odHRwOi8vd3d3LnN1bi5jb20vIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKQEAgLTc3LDEwICs3NywxMCBAQAogICAgICAgICAgICAgaWYgKEVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RHZXRQYXRoSW5mb0NvbGxhcHNlQ29udGlndW91c1NsYXNoZXMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVxdWVzdEdldFBhdGhJbmZvQ29sbGFwc2VDb250aWd1b3VzU2xhc2hlcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGZkNDQxNWYuLjIxNDNkMjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVxdWVzdEdldFBhdGhJbmZvQ29sbGFwc2VDb250aWd1b3VzU2xhc2hlcy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVxdWVzdEdldFBhdGhJbmZvQ29sbGFwc2VDb250aWd1b3VzU2xhc2hlcy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtcmVxdWVzdC1nZXQtcGF0aC1pbmZvLWNvbGxhcHNlLWNvbnRpZ3VvdXMtc2xhc2hlcyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXF1ZXN0R2V0UGF0aEluZm9Db2xsYXBzZUNvbnRpZ3VvdXNTbGFzaGVzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVxdWVzdEdldFBhdGhJbmZvQ29sbGFwc2VDb250aWd1b3VzU2xhc2hlcy9idWlsZC54bWwKaW5kZXggNmI2MWEwOS4uM2UxMGUxNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXF1ZXN0R2V0UGF0aEluZm9Db2xsYXBzZUNvbnRpZ3VvdXNTbGFzaGVzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RHZXRQYXRoSW5mb0NvbGxhcHNlQ29udGlndW91c1NsYXNoZXMvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwyMiArNDQsMjIgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzEsMTAgKzcxLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXF1ZXN0R2V0UGF0aEluZm9HZXRQYXRoVHJhbnNsYXRlZC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RHZXRQYXRoSW5mb0dldFBhdGhUcmFuc2xhdGVkL1dlYlRlc3QuamF2YQppbmRleCAzZDJiMGQ1Li4wZDcxMjcyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RHZXRQYXRoSW5mb0dldFBhdGhUcmFuc2xhdGVkL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RHZXRQYXRoSW5mb0dldFBhdGhUcmFuc2xhdGVkL1dlYlRlc3QuamF2YQpAQCAtNjEsOCArNjEsOCBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgCi0gICAgICAgIHRyeSB7IAorCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTkyLDcgKzkyLDcgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGdldCk7CiAgICAgICAgIG9zLndyaXRlKGdldC5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBudWxsOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBiaXMgPSBudWxsOwogICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CkBAIC0xNDMsNyArMTQzLDcgQEAKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsgCisgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIldyb25nIHJlc3BvbnNlIGNvZGUuIEV4cGVjdGVkOiAyMDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCByZWNlaXZlZDogIiArIHJlc3BvbnNlQ29kZSk7CiAgICAgICAgICAgICBmYWlsID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVxdWVzdEdldFBhdGhJbmZvR2V0UGF0aFRyYW5zbGF0ZWQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVxdWVzdEdldFBhdGhJbmZvR2V0UGF0aFRyYW5zbGF0ZWQvYnVpbGQucHJvcGVydGllcwppbmRleCBiYTM0ZDM1Li5iNGI0OWQ3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RHZXRQYXRoSW5mb0dldFBhdGhUcmFuc2xhdGVkL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXF1ZXN0R2V0UGF0aEluZm9HZXRQYXRoVHJhbnNsYXRlZC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtcmVxdWVzdC1nZXRQYXRoSW5mby1nZXRQYXRoVHJhbnNsYXRlZCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXF1ZXN0R2V0UGF0aEluZm9HZXRQYXRoVHJhbnNsYXRlZC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RHZXRQYXRoSW5mb0dldFBhdGhUcmFuc2xhdGVkL2J1aWxkLnhtbAppbmRleCBlYmRjZjJmLi41YTNiMjIzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RHZXRQYXRoSW5mb0dldFBhdGhUcmFuc2xhdGVkL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RHZXRQYXRoSW5mb0dldFBhdGhUcmFuc2xhdGVkL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVxdWVzdExvbmdVcmkvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXF1ZXN0TG9uZ1VyaS9XZWJUZXN0LmphdmEKaW5kZXggYWNjNmU2ZC4uZWFjNGEyMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXF1ZXN0TG9uZ1VyaS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXF1ZXN0TG9uZ1VyaS9XZWJUZXN0LmphdmEKQEAgLTQzLDcgKzQzLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciB0ZXN0aW5nIHZlcnkgbG9uZyByZXF1ZXN0IFVSSSIpOwpAQCAtNTgsNyArNTgsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZyBwYXRoSW5mbywgU3RyaW5nIGV4cGVjdGVkKSB0aHJvd3MgRXhjZXB0aW9uIHsKQEAgLTY4LDcgKzY4LDcgQEAKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsgCisgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZSBjb2RlLiBFeHBlY3RlZDogMjAwIiArCiAgICAgICAgICAgICAgICAgIiwgcmVjZWl2ZWQ6ICIgKyByZXNwb25zZUNvZGUpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RMb25nVXJpL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RMb25nVXJpL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNmYyYzYwNy4uNjY0ZGYzYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXF1ZXN0TG9uZ1VyaS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVxdWVzdExvbmdVcmkvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LXJlcXVlc3QtbG9uZy11cmkiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVxdWVzdExvbmdVcmkvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXF1ZXN0TG9uZ1VyaS9idWlsZC54bWwKaW5kZXggMDBmZGFkMy4uYzM5Nzc2ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXF1ZXN0TG9uZ1VyaS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXF1ZXN0TG9uZ1VyaS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDIzICs0MiwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTcwLDEwICs3MCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVxdWVzdFBhcmFtc1ByZXNlcnZlT3JkZXIvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXF1ZXN0UGFyYW1zUHJlc2VydmVPcmRlci9XZWJUZXN0LmphdmEKaW5kZXggNzg1ZDg4OC4uYWRkNjA5OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXF1ZXN0UGFyYW1zUHJlc2VydmVPcmRlci9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXF1ZXN0UGFyYW1zUHJlc2VydmVPcmRlci9XZWJUZXN0LmphdmEKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgNjA1NzM4NSIpOwogCkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICsgIi9UZXN0U2VydmxldD9wYXJhbTE9dmFsdWUxJnBhcmFtMj12YWx1ZTImcGFyYW0zPXZhbHVlMyI7CiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pCkBAIC02Niw3ICs2Niw3IEBACiAgICAgICAgIGludCBjb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKICAgICAgICAgaWYgKGNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJVbmV4cGVjdGVkIHJldHVybiBjb2RlOiAiICsgY29kZSk7Ci0gICAgICAgIH0gCisgICAgICAgIH0KIAogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IG51bGw7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gbnVsbDsKQEAgLTkzLDYgKzkzLDYgQEAKICAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkgewogICAgICAgICAgICAgICAgIC8vIGlnbm9yZQogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXF1ZXN0UGFyYW1zUHJlc2VydmVPcmRlci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXF1ZXN0UGFyYW1zUHJlc2VydmVPcmRlci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDBiZDAxNzcuLjIyNzYzOTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVxdWVzdFBhcmFtc1ByZXNlcnZlT3JkZXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RQYXJhbXNQcmVzZXJ2ZU9yZGVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC1yZXF1ZXN0LXBhcmFtcy1wcmVzZXJ2ZS1vcmRlciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXF1ZXN0UGFyYW1zUHJlc2VydmVPcmRlci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RQYXJhbXNQcmVzZXJ2ZU9yZGVyL2J1aWxkLnhtbAppbmRleCA4NTQyZTkxLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RQYXJhbXNQcmVzZXJ2ZU9yZGVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RQYXJhbXNQcmVzZXJ2ZU9yZGVyL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTcgKzQyLDE3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RQYXJhbXNQcmVzZXJ2ZU9yZGVyL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVxdWVzdFBhcmFtc1ByZXNlcnZlT3JkZXIvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDRkOWQ0YTAuLjk4ZDE2ODQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVxdWVzdFBhcmFtc1ByZXNlcnZlT3JkZXIvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVxdWVzdFBhcmFtc1ByZXNlcnZlT3JkZXIvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yNyw3ICsyNyw3IEBACiAgICAgICAgIDxkaXNwbGF5LW5hbWU+VGVzdFNlcnZsZXQ8L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5UZXN0U2VydmxldDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz5UZXN0U2VydmxldDwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAKICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+VGVzdFNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVxdWVzdFNldENoYXJFbmNvZGluZ0lsbGVnYWxTdGF0ZUV4Y2VwdGlvbi9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RTZXRDaGFyRW5jb2RpbmdJbGxlZ2FsU3RhdGVFeGNlcHRpb24vV2ViVGVzdC5qYXZhCmluZGV4IDA1OTNjZjQuLmJlMGFkYmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVxdWVzdFNldENoYXJFbmNvZGluZ0lsbGVnYWxTdGF0ZUV4Y2VwdGlvbi9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXF1ZXN0U2V0Q2hhckVuY29kaW5nSWxsZWdhbFN0YXRlRXhjZXB0aW9uL1dlYlRlc3QuamF2YQpAQCAtNTgsNyArNTgsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIDQ5MzY4NTUiKTsKQEAgLTcxLDE4ICs3MSwxOCBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgICArIGNvbnRleHRSb290ICsgIi9UZXN0U2VydmxldCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOwogICAgICAgICBjb25uLmNvbm5lY3QoKTsKICAgICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm4uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7IAorICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgewogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJXcm9uZyByZXNwb25zZSBjb2RlLiBFeHBlY3RlZDogMjAwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgcmVjZWl2ZWQ6ICIgKyByZXNwb25zZUNvZGUpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXF1ZXN0U2V0Q2hhckVuY29kaW5nSWxsZWdhbFN0YXRlRXhjZXB0aW9uL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RTZXRDaGFyRW5jb2RpbmdJbGxlZ2FsU3RhdGVFeGNlcHRpb24vYnVpbGQucHJvcGVydGllcwppbmRleCA3YWQxZDNjLi5iMmMxYjY1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RTZXRDaGFyRW5jb2RpbmdJbGxlZ2FsU3RhdGVFeGNlcHRpb24vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RTZXRDaGFyRW5jb2RpbmdJbGxlZ2FsU3RhdGVFeGNlcHRpb24vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LXJlcXVlc3Qtc2V0Y2hhcmVuY29kaW5nLWlsbGVnYWwtc3RhdGUtZXhjZXB0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RTZXRDaGFyRW5jb2RpbmdJbGxlZ2FsU3RhdGVFeGNlcHRpb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXF1ZXN0U2V0Q2hhckVuY29kaW5nSWxsZWdhbFN0YXRlRXhjZXB0aW9uL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RTZXRDaGFyRW5jb2RpbmdJbGxlZ2FsU3RhdGVFeGNlcHRpb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVxdWVzdFNldENoYXJFbmNvZGluZ0lsbGVnYWxTdGF0ZUV4Y2VwdGlvbi9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RVUklNdWx0aXBsZVNlbWljb2xvbnMvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXF1ZXN0VVJJTXVsdGlwbGVTZW1pY29sb25zL1dlYlRlc3QuamF2YQppbmRleCA4ODUzNDBlLi43NDJlNDNhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RVUklNdWx0aXBsZVNlbWljb2xvbnMvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVxdWVzdFVSSU11bHRpcGxlU2VtaWNvbG9ucy9XZWJUZXN0LmphdmEKQEAgLTQ5LDcgKzQ5LDcgQEAKIAogICAgICAgICBleHBlY3RlZFJlc3BvbnNlID0gY29udGV4dFJvb3QgKyAiL3Rlc3QuanNwO2pzZXNzaW9ud2hhdGV2ZXI9NDU2IjsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciByZXNvdXJjZSBpbmplY3Rpb24gaW50byAiCkBAIC02MywxMSArNjMsMTEgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQKICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL3Rlc3QuanNwO2pzZXNzaW9uaWQ9MTI7anNlc3Npb253aGF0ZXZlcj00NTYiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwpAQCAtODcsNyArODcsNyBAQAogICAgICAgICAgICAgaW5wdXQgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAgICAgICAgICAgICBTdHJpbmcgbGluZSA9IGlucHV0LnJlYWRMaW5lKCk7CiAgICAgICAgICAgICBpZiAoIWV4cGVjdGVkUmVzcG9uc2UuZXF1YWxzKGxpbmUpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRSZXNwb25zZSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZmluYWxseSB7CkBAIC0xMDUsNiArMTA1LDYgQEAKICAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkgewogICAgICAgICAgICAgICAgIC8vIGlnbm9yZQogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXF1ZXN0VVJJTXVsdGlwbGVTZW1pY29sb25zL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RVUklNdWx0aXBsZVNlbWljb2xvbnMvYnVpbGQucHJvcGVydGllcwppbmRleCAwNWFhNzJiLi45ZmUzYWQyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RVUklNdWx0aXBsZVNlbWljb2xvbnMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RVUklNdWx0aXBsZVNlbWljb2xvbnMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LXJlcXVlc3QtdXJpLW11bHRpcGxlLXNlbWljb2xvbnMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVxdWVzdFVSSU11bHRpcGxlU2VtaWNvbG9ucy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlcXVlc3RVUklNdWx0aXBsZVNlbWljb2xvbnMvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVxdWVzdFVSSU11bHRpcGxlU2VtaWNvbG9ucy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXF1ZXN0VVJJTXVsdGlwbGVTZW1pY29sb25zL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25Db250ZXh0QXR0cmlidXRlTGlzdGVuZXIvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvbkNvbnRleHRBdHRyaWJ1dGVMaXN0ZW5lci9XZWJUZXN0LmphdmEKaW5kZXggMWFiNDkwZS4uZDVhMTQyNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvbkNvbnRleHRBdHRyaWJ1dGVMaXN0ZW5lci9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvbkNvbnRleHRBdHRyaWJ1dGVMaXN0ZW5lci9XZWJUZXN0LmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciByZXNvdXJjZSBpbmplY3Rpb24gaW50byAiCkBAIC01NSwxMSArNTUsMTEgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjb250ZXh0Um9vdCArICIvVGVzdFNlcnZsZXQiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwpAQCAtNzgsNyArNzgsNyBAQAogICAgICAgICAgICAgaW5wdXQgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAgICAgICAgICAgICBTdHJpbmcgbGluZSA9IGlucHV0LnJlYWRMaW5lKCk7CiAgICAgICAgICAgICBpZiAoIUVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBmaW5hbGx5IHsKQEAgLTk2LDYgKzk2LDYgQEAKICAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkgewogICAgICAgICAgICAgICAgIC8vIGlnbm9yZQogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvbkNvbnRleHRBdHRyaWJ1dGVMaXN0ZW5lci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvbkNvbnRleHRBdHRyaWJ1dGVMaXN0ZW5lci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDUyZWFjNDkuLjE0NGMyYWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25Db250ZXh0QXR0cmlidXRlTGlzdGVuZXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uQ29udGV4dEF0dHJpYnV0ZUxpc3RlbmVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC1yZXNvdXJjZS1pbmplY3Rpb24tY29udGV4dC1hdHRyaWJ1dGUtbGlzdGVuZXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25Db250ZXh0QXR0cmlidXRlTGlzdGVuZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvbkNvbnRleHRBdHRyaWJ1dGVMaXN0ZW5lci9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvbkNvbnRleHRBdHRyaWJ1dGVMaXN0ZW5lci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvbkNvbnRleHRBdHRyaWJ1dGVMaXN0ZW5lci9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uQ29udGV4dEF0dHJpYnV0ZUxpc3RlbmVyL3NlcnZsZXQvdGVzdC9NeUxpc3RlbmVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uQ29udGV4dEF0dHJpYnV0ZUxpc3RlbmVyL3NlcnZsZXQvdGVzdC9NeUxpc3RlbmVyLmphdmEKaW5kZXggZTI3NTFhMS4uY2YxOTMxMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvbkNvbnRleHRBdHRyaWJ1dGVMaXN0ZW5lci9zZXJ2bGV0L3Rlc3QvTXlMaXN0ZW5lci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25Db250ZXh0QXR0cmlidXRlTGlzdGVuZXIvc2VydmxldC90ZXN0L015TGlzdGVuZXIuamF2YQpAQCAtNDksNyArNDksNyBAQAogICAgIHB1YmxpYyB2b2lkIGF0dHJpYnV0ZUFkZGVkKFNlcnZsZXRDb250ZXh0QXR0cmlidXRlRXZlbnQgc2NhZSkgewogCiAgICAgICAgIFNlcnZsZXRDb250ZXh0IHNjID0gc2NhZS5nZXRTZXJ2bGV0Q29udGV4dCgpOwotICAgIAorCiAgICAgICAgIHRyeSB7CiAKICAgICAgICAgICAgIGludCBsb2dpblRpbWVvdXQgPSBkczEuZ2V0TG9naW5UaW1lb3V0KCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uQ29udGV4dExpc3RlbmVyL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25Db250ZXh0TGlzdGVuZXIvV2ViVGVzdC5qYXZhCmluZGV4IDMzYjNjNzIuLmI3MDBjNjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25Db250ZXh0TGlzdGVuZXIvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25Db250ZXh0TGlzdGVuZXIvV2ViVGVzdC5qYXZhCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgcmVzb3VyY2UgaW5qZWN0aW9uIGludG8gc2VydmxldCAiCkBAIC01NSwxMSArNTUsMTEgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjb250ZXh0Um9vdCArICIvVGVzdFNlcnZsZXQiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwpAQCAtNzgsNyArNzgsNyBAQAogICAgICAgICAgICAgaW5wdXQgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAgICAgICAgICAgICBTdHJpbmcgbGluZSA9IGlucHV0LnJlYWRMaW5lKCk7CiAgICAgICAgICAgICBpZiAoIUVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBmaW5hbGx5IHsKQEAgLTk2LDYgKzk2LDYgQEAKICAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkgewogICAgICAgICAgICAgICAgIC8vIGlnbm9yZQogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvbkNvbnRleHRMaXN0ZW5lci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvbkNvbnRleHRMaXN0ZW5lci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDljZGZhMDkuLjkxZWZlODAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25Db250ZXh0TGlzdGVuZXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uQ29udGV4dExpc3RlbmVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC1yZXNvdXJjZS1pbmplY3Rpb24tY29udGV4dC1saXN0ZW5lciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvbkNvbnRleHRMaXN0ZW5lci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uQ29udGV4dExpc3RlbmVyL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uQ29udGV4dExpc3RlbmVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uQ29udGV4dExpc3RlbmVyL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25Db250ZXh0TGlzdGVuZXIvc2VydmxldC90ZXN0L015TGlzdGVuZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25Db250ZXh0TGlzdGVuZXIvc2VydmxldC90ZXN0L015TGlzdGVuZXIuamF2YQppbmRleCA1N2Q2NDY2Li4xMThlNzI2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uQ29udGV4dExpc3RlbmVyL3NlcnZsZXQvdGVzdC9NeUxpc3RlbmVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvbkNvbnRleHRMaXN0ZW5lci9zZXJ2bGV0L3Rlc3QvTXlMaXN0ZW5lci5qYXZhCkBAIC00OSw3ICs0OSw3IEBACiAgICAgcHVibGljIHZvaWQgY29udGV4dEluaXRpYWxpemVkKFNlcnZsZXRDb250ZXh0RXZlbnQgc2NlKSB7CiAKICAgICAgICAgU2VydmxldENvbnRleHQgc2MgPSBzY2UuZ2V0U2VydmxldENvbnRleHQoKTsKLSAgICAKKwogICAgICAgICB0cnkgewogCiAgICAgICAgICAgICBpbnQgbG9naW5UaW1lb3V0ID0gZHMxLmdldExvZ2luVGltZW91dCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvbkZpbHRlci9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uRmlsdGVyL1dlYlRlc3QuamF2YQppbmRleCBjMGZhN2I2Li5mYmQ1N2U1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uRmlsdGVyL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uRmlsdGVyL1dlYlRlc3QuamF2YQpAQCAtMzgsNyArMzgsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIHJlc291cmNlIGluamVjdGlvbiBpbnRvIHNlcnZsZXQgIgpAQCAtNTEsMTggKzUxLDE4IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL1Rlc3RTZXJ2bGV0Iik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsgCisgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZSBjb2RlLiBFeHBlY3RlZDogMjAwIiArCiAgICAgICAgICAgICAgICAgIiwgcmVjZWl2ZWQ6ICIgKyByZXNwb25zZUNvZGUpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uRmlsdGVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uRmlsdGVyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZjFlYzE2OC4uMzYyZjUwZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvbkZpbHRlci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25GaWx0ZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LXJlc291cmNlLWluamVjdGlvbi1maWx0ZXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25GaWx0ZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvbkZpbHRlci9idWlsZC54bWwKaW5kZXggMDBmZGFkMy4uYzM5Nzc2ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvbkZpbHRlci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvbkZpbHRlci9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDIzICs0MiwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTcwLDEwICs3MCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25GaWx0ZXIvc2VydmxldC9teWZpbHRlci9NeUZpbHRlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvbkZpbHRlci9zZXJ2bGV0L215ZmlsdGVyL015RmlsdGVyLmphdmEKaW5kZXggMjE0YzMwYS4uNjdhNGY3ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvbkZpbHRlci9zZXJ2bGV0L215ZmlsdGVyL015RmlsdGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvbkZpbHRlci9zZXJ2bGV0L215ZmlsdGVyL015RmlsdGVyLmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKICAgICBwdWJsaWMgdm9pZCBpbml0KEZpbHRlckNvbmZpZyBmaWx0ZXJDb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKIAogICAgICAgICBTZXJ2bGV0Q29udGV4dCBzYyA9IGZpbHRlckNvbmZpZy5nZXRTZXJ2bGV0Q29udGV4dCgpOwotICAgIAorCiAgICAgICAgIHRyeSB7CiAKICAgICAgICAgICAgIGludCBsb2dpblRpbWVvdXQgPSBkczEuZ2V0TG9naW5UaW1lb3V0KCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uSHR0cFNlc3Npb25BdHRyaWJ1dGVMaXN0ZW5lci9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uSHR0cFNlc3Npb25BdHRyaWJ1dGVMaXN0ZW5lci9XZWJUZXN0LmphdmEKaW5kZXggMDE2MWJkNi4uYjk2ZmJhNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvbkh0dHBTZXNzaW9uQXR0cmlidXRlTGlzdGVuZXIvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25IdHRwU2Vzc2lvbkF0dHJpYnV0ZUxpc3RlbmVyL1dlYlRlc3QuamF2YQpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIHJlc291cmNlIGluamVjdGlvbiBpbnRvICIKQEAgLTU2LDExICs1NiwxMSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgICArIGNvbnRleHRSb290ICsgIi9UZXN0U2VydmxldCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CkBAIC03OSw3ICs3OSw3IEBACiAgICAgICAgICAgICBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKICAgICAgICAgICAgIFN0cmluZyBsaW5lID0gaW5wdXQucmVhZExpbmUoKTsKICAgICAgICAgICAgIGlmICghRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGZpbmFsbHkgewpAQCAtOTcsNiArOTcsNiBAQAogICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKSB7CiAgICAgICAgICAgICAgICAgLy8gaWdub3JlCiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uSHR0cFNlc3Npb25BdHRyaWJ1dGVMaXN0ZW5lci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvbkh0dHBTZXNzaW9uQXR0cmlidXRlTGlzdGVuZXIvYnVpbGQucHJvcGVydGllcwppbmRleCA2NzQzOTllLi45Y2ZlODVhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uSHR0cFNlc3Npb25BdHRyaWJ1dGVMaXN0ZW5lci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25IdHRwU2Vzc2lvbkF0dHJpYnV0ZUxpc3RlbmVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC1yZXNvdXJjZS1pbmplY3Rpb24taHR0cC1zZXNzaW9uLWF0dHJpYnV0ZS1saXN0ZW5lciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvbkh0dHBTZXNzaW9uQXR0cmlidXRlTGlzdGVuZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvbkh0dHBTZXNzaW9uQXR0cmlidXRlTGlzdGVuZXIvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25IdHRwU2Vzc2lvbkF0dHJpYnV0ZUxpc3RlbmVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uSHR0cFNlc3Npb25BdHRyaWJ1dGVMaXN0ZW5lci9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uSHR0cFNlc3Npb25BdHRyaWJ1dGVMaXN0ZW5lci9zZXJ2bGV0L3Rlc3QvTXlMaXN0ZW5lci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvbkh0dHBTZXNzaW9uQXR0cmlidXRlTGlzdGVuZXIvc2VydmxldC90ZXN0L015TGlzdGVuZXIuamF2YQppbmRleCA5NzZhYTEzLi4wZmYyMmUzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uSHR0cFNlc3Npb25BdHRyaWJ1dGVMaXN0ZW5lci9zZXJ2bGV0L3Rlc3QvTXlMaXN0ZW5lci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25IdHRwU2Vzc2lvbkF0dHJpYnV0ZUxpc3RlbmVyL3NlcnZsZXQvdGVzdC9NeUxpc3RlbmVyLmphdmEKQEAgLTUxLDcgKzUxLDcgQEAKIAogICAgICAgICBIdHRwU2Vzc2lvbiBzZXNzaW9uID0gaHNiZS5nZXRTZXNzaW9uKCk7CiAgICAgICAgIFNlcnZsZXRDb250ZXh0IHNjID0gc2Vzc2lvbi5nZXRTZXJ2bGV0Q29udGV4dCgpOwotICAgIAorCiAgICAgICAgIHRyeSB7CiAKICAgICAgICAgICAgIGludCBsb2dpblRpbWVvdXQgPSBkczEuZ2V0TG9naW5UaW1lb3V0KCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uSHR0cFNlc3Npb25MaXN0ZW5lci9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uSHR0cFNlc3Npb25MaXN0ZW5lci9XZWJUZXN0LmphdmEKaW5kZXggOWM3YmE5YS4uNGIwZWI4YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvbkh0dHBTZXNzaW9uTGlzdGVuZXIvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25IdHRwU2Vzc2lvbkxpc3RlbmVyL1dlYlRlc3QuamF2YQpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIHJlc291cmNlIGluamVjdGlvbiBpbnRvICIKQEAgLTU2LDExICs1NiwxMSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgICArIGNvbnRleHRSb290ICsgIi9UZXN0U2VydmxldCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CkBAIC03OSw3ICs3OSw3IEBACiAgICAgICAgICAgICBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKICAgICAgICAgICAgIFN0cmluZyBsaW5lID0gaW5wdXQucmVhZExpbmUoKTsKICAgICAgICAgICAgIGlmICghRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGZpbmFsbHkgewpAQCAtOTcsNiArOTcsNiBAQAogICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKSB7CiAgICAgICAgICAgICAgICAgLy8gaWdub3JlCiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uSHR0cFNlc3Npb25MaXN0ZW5lci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvbkh0dHBTZXNzaW9uTGlzdGVuZXIvYnVpbGQucHJvcGVydGllcwppbmRleCA3MmU1MDFjLi5jMDljY2EyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uSHR0cFNlc3Npb25MaXN0ZW5lci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25IdHRwU2Vzc2lvbkxpc3RlbmVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC1yZXNvdXJjZS1pbmplY3Rpb24taHR0cC1zZXNzaW9uLWxpc3RlbmVyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uSHR0cFNlc3Npb25MaXN0ZW5lci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uSHR0cFNlc3Npb25MaXN0ZW5lci9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvbkh0dHBTZXNzaW9uTGlzdGVuZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25IdHRwU2Vzc2lvbkxpc3RlbmVyL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25IdHRwU2Vzc2lvbkxpc3RlbmVyL3NlcnZsZXQvdGVzdC9NeUxpc3RlbmVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uSHR0cFNlc3Npb25MaXN0ZW5lci9zZXJ2bGV0L3Rlc3QvTXlMaXN0ZW5lci5qYXZhCmluZGV4IDgyYzEzZWQuLjEzZTQ2NTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25IdHRwU2Vzc2lvbkxpc3RlbmVyL3NlcnZsZXQvdGVzdC9NeUxpc3RlbmVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvbkh0dHBTZXNzaW9uTGlzdGVuZXIvc2VydmxldC90ZXN0L015TGlzdGVuZXIuamF2YQpAQCAtNTAsNyArNTAsNyBAQAogCiAgICAgICAgIEh0dHBTZXNzaW9uIHNlc3Npb24gPSBoc2UuZ2V0U2Vzc2lvbigpOwogICAgICAgICBTZXJ2bGV0Q29udGV4dCBzYyA9IHNlc3Npb24uZ2V0U2VydmxldENvbnRleHQoKTsKLSAgICAKKwogICAgICAgICB0cnkgewogCiAgICAgICAgICAgICBpbnQgbG9naW5UaW1lb3V0ID0gZHMxLmdldExvZ2luVGltZW91dCgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvblJlcXVlc3RBdHRyaWJ1dGVMaXN0ZW5lci9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uUmVxdWVzdEF0dHJpYnV0ZUxpc3RlbmVyL1dlYlRlc3QuamF2YQppbmRleCA2YmJmOTU4Li5mNmQxYjc4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uUmVxdWVzdEF0dHJpYnV0ZUxpc3RlbmVyL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uUmVxdWVzdEF0dHJpYnV0ZUxpc3RlbmVyL1dlYlRlc3QuamF2YQpAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIHJlc291cmNlIGluamVjdGlvbiBpbnRvICIKQEAgLTU1LDExICs1NSwxMSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgICArIGNvbnRleHRSb290ICsgIi9UZXN0U2VydmxldCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CkBAIC03OCw3ICs3OCw3IEBACiAgICAgICAgICAgICBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKICAgICAgICAgICAgIFN0cmluZyBsaW5lID0gaW5wdXQucmVhZExpbmUoKTsKICAgICAgICAgICAgIGlmICghRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGZpbmFsbHkgewpAQCAtOTYsNiArOTYsNiBAQAogICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKSB7CiAgICAgICAgICAgICAgICAgLy8gaWdub3JlCiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uUmVxdWVzdEF0dHJpYnV0ZUxpc3RlbmVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uUmVxdWVzdEF0dHJpYnV0ZUxpc3RlbmVyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNjc1MzM5Mi4uM2IwMDRhOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvblJlcXVlc3RBdHRyaWJ1dGVMaXN0ZW5lci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25SZXF1ZXN0QXR0cmlidXRlTGlzdGVuZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LXJlc291cmNlLWluamVjdGlvbi1yZXF1ZXN0LWF0dHJpYnV0ZS1saXN0ZW5lciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvblJlcXVlc3RBdHRyaWJ1dGVMaXN0ZW5lci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uUmVxdWVzdEF0dHJpYnV0ZUxpc3RlbmVyL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uUmVxdWVzdEF0dHJpYnV0ZUxpc3RlbmVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uUmVxdWVzdEF0dHJpYnV0ZUxpc3RlbmVyL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25SZXF1ZXN0QXR0cmlidXRlTGlzdGVuZXIvc2VydmxldC90ZXN0L015TGlzdGVuZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25SZXF1ZXN0QXR0cmlidXRlTGlzdGVuZXIvc2VydmxldC90ZXN0L015TGlzdGVuZXIuamF2YQppbmRleCA5YjI1NWQ1Li4zNjJhZWFkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uUmVxdWVzdEF0dHJpYnV0ZUxpc3RlbmVyL3NlcnZsZXQvdGVzdC9NeUxpc3RlbmVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvblJlcXVlc3RBdHRyaWJ1dGVMaXN0ZW5lci9zZXJ2bGV0L3Rlc3QvTXlMaXN0ZW5lci5qYXZhCkBAIC01MCw3ICs1MCw3IEBACiAKICAgICAgICAgU2VydmxldFJlcXVlc3Qgc3IgPSBzcmFlLmdldFNlcnZsZXRSZXF1ZXN0KCk7CiAgICAgICAgIFNlcnZsZXRDb250ZXh0IHNjID0gc3JhZS5nZXRTZXJ2bGV0Q29udGV4dCgpOwotICAgIAorCiAgICAgICAgIHRyeSB7CiAKICAgICAgICAgICAgIGludCBsb2dpblRpbWVvdXQgPSBkczEuZ2V0TG9naW5UaW1lb3V0KCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uUmVxdWVzdExpc3RlbmVyL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25SZXF1ZXN0TGlzdGVuZXIvV2ViVGVzdC5qYXZhCmluZGV4IGFhYjdhNmMuLjhkNTk5NDMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25SZXF1ZXN0TGlzdGVuZXIvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25SZXF1ZXN0TGlzdGVuZXIvV2ViVGVzdC5qYXZhCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgcmVzb3VyY2UgaW5qZWN0aW9uIGludG8gIgpAQCAtNTUsMTEgKzU1LDExIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL1Rlc3RTZXJ2bGV0Iik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKQEAgLTc4LDcgKzc4LDcgQEAKICAgICAgICAgICAgIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogICAgICAgICAgICAgU3RyaW5nIGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpOwogICAgICAgICAgICAgaWYgKCFFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZmluYWxseSB7CkBAIC05Niw2ICs5Niw2IEBACiAgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHsKICAgICAgICAgICAgICAgICAvLyBpZ25vcmUKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25SZXF1ZXN0TGlzdGVuZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25SZXF1ZXN0TGlzdGVuZXIvYnVpbGQucHJvcGVydGllcwppbmRleCA5NDA0NDRiLi45YTAyNjVhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uUmVxdWVzdExpc3RlbmVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvblJlcXVlc3RMaXN0ZW5lci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtcmVzb3VyY2UtaW5qZWN0aW9uLXJlcXVlc3QtbGlzdGVuZXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25SZXF1ZXN0TGlzdGVuZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvblJlcXVlc3RMaXN0ZW5lci9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvblJlcXVlc3RMaXN0ZW5lci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvblJlcXVlc3RMaXN0ZW5lci9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uUmVxdWVzdExpc3RlbmVyL3NlcnZsZXQvdGVzdC9NeUxpc3RlbmVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uUmVxdWVzdExpc3RlbmVyL3NlcnZsZXQvdGVzdC9NeUxpc3RlbmVyLmphdmEKaW5kZXggZDZhZjY3Yi4uYjZkZDU1ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvblJlcXVlc3RMaXN0ZW5lci9zZXJ2bGV0L3Rlc3QvTXlMaXN0ZW5lci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25SZXF1ZXN0TGlzdGVuZXIvc2VydmxldC90ZXN0L015TGlzdGVuZXIuamF2YQpAQCAtNTEsNyArNTEsNyBAQAogCiAgICAgICAgIFNlcnZsZXRSZXF1ZXN0IHNyID0gc3JlLmdldFNlcnZsZXRSZXF1ZXN0KCk7CiAgICAgICAgIFNlcnZsZXRDb250ZXh0IHNjID0gc3JlLmdldFNlcnZsZXRDb250ZXh0KCk7Ci0gICAgCisKICAgICAgICAgdHJ5IHsKIAogICAgICAgICAgICAgaW50IGxvZ2luVGltZW91dCA9IGRzMS5nZXRMb2dpblRpbWVvdXQoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25TZXJ2bGV0SW5zdGFuY2UvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvblNlcnZsZXRJbnN0YW5jZS9XZWJUZXN0LmphdmEKaW5kZXggNTZhYmM3Ny4uODkxYTcwYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvblNlcnZsZXRJbnN0YW5jZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvblNlcnZsZXRJbnN0YW5jZS9XZWJUZXN0LmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciByZXNvdXJjZSBpbmplY3Rpb24gaW50byAiCkBAIC01NCwxMSArNTQsMTEgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQgKwogICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0Um9vdCArICIvVGVzdFNlcnZsZXQiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwpAQCAtNzgsOSArNzgsOSBAQAogICAgICAgICAgICAgaW5wdXQgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAgICAgICAgICAgICBTdHJpbmcgbGluZSA9IGlucHV0LnJlYWRMaW5lKCk7CiAgICAgICAgICAgICBpZiAoIUVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKLQkgICAgfQorICAgICAgICB9CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGlmIChpcyAhPSBudWxsKSB7CkBAIC05Niw2ICs5Niw2IEBACiAgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHsKICAgICAgICAgICAgICAgICAvLyBpZ25vcmUKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25TZXJ2bGV0SW5zdGFuY2UvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25TZXJ2bGV0SW5zdGFuY2UvYnVpbGQucHJvcGVydGllcwppbmRleCAyYjUzZGFjLi5hNWI4MWQ0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uU2VydmxldEluc3RhbmNlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvblNlcnZsZXRJbnN0YW5jZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtcmVzb3VyY2UtaW5qZWN0aW9uLXNlcnZsZXQtaW5zdGFuY2UiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25TZXJ2bGV0SW5zdGFuY2UvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvblNlcnZsZXRJbnN0YW5jZS9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvblNlcnZsZXRJbnN0YW5jZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvblNlcnZsZXRJbnN0YW5jZS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uU2VydmxldEluc3RhbmNlTG9hZE9uU3RhcnR1cC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uU2VydmxldEluc3RhbmNlTG9hZE9uU3RhcnR1cC9XZWJUZXN0LmphdmEKaW5kZXggNDYzZGMzZS4uZThkMzQ0MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvblNlcnZsZXRJbnN0YW5jZUxvYWRPblN0YXJ0dXAvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25TZXJ2bGV0SW5zdGFuY2VMb2FkT25TdGFydHVwL1dlYlRlc3QuamF2YQpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIHJlc291cmNlIGluamVjdGlvbiBpbnRvICIKQEAgLTU2LDExICs1NiwxMSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgICArIGNvbnRleHRSb290ICsgIi9UZXN0U2VydmxldCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CkBAIC03OSwxMCArNzksMTAgQEAKICAgICAgICAgICAgIGlmIChFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvblNlcnZsZXRJbnN0YW5jZUxvYWRPblN0YXJ0dXAvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25TZXJ2bGV0SW5zdGFuY2VMb2FkT25TdGFydHVwL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYzk0YTQ3YS4uNGZiNjAwNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvblNlcnZsZXRJbnN0YW5jZUxvYWRPblN0YXJ0dXAvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uU2VydmxldEluc3RhbmNlTG9hZE9uU3RhcnR1cC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtcmVzb3VyY2UtaW5qZWN0aW9uLXNlcnZsZXQtaW5zdGFuY2UtbG9hZC1vbi1zdGFydHVwIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uU2VydmxldEluc3RhbmNlTG9hZE9uU3RhcnR1cC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc291cmNlSW5qZWN0aW9uU2VydmxldEluc3RhbmNlTG9hZE9uU3RhcnR1cC9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNvdXJjZUluamVjdGlvblNlcnZsZXRJbnN0YW5jZUxvYWRPblN0YXJ0dXAvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzb3VyY2VJbmplY3Rpb25TZXJ2bGV0SW5zdGFuY2VMb2FkT25TdGFydHVwL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzcG9uc2VRdW90ZWRDb250ZW50VHlwZUltYmFsYW5jZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc3BvbnNlUXVvdGVkQ29udGVudFR5cGVJbWJhbGFuY2UvV2ViVGVzdC5qYXZhCmluZGV4IDk5ZjU0ODEuLmRiMjAwZDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzcG9uc2VRdW90ZWRDb250ZW50VHlwZUltYmFsYW5jZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNwb25zZVF1b3RlZENvbnRlbnRUeXBlSW1iYWxhbmNlL1dlYlRlc3QuamF2YQpAQCAtMzksNyArMzksNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIDYzMTYyNTQiKTsKQEAgLTUwLDE4ICs1MCwxOCBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgICArIGNvbnRleHRSb290ICsgIi9UZXN0U2VydmxldCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOwogICAgICAgICBjb25uLmNvbm5lY3QoKTsKICAgICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm4uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7IAorICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgewogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJXcm9uZyByZXNwb25zZSBjb2RlLiBFeHBlY3RlZDogMjAwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgcmVjZWl2ZWQ6ICIgKyByZXNwb25zZUNvZGUpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNwb25zZVF1b3RlZENvbnRlbnRUeXBlSW1iYWxhbmNlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc3BvbnNlUXVvdGVkQ29udGVudFR5cGVJbWJhbGFuY2UvYnVpbGQucHJvcGVydGllcwppbmRleCBmMjUzODI3Li4yYjNmOWQwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc3BvbnNlUXVvdGVkQ29udGVudFR5cGVJbWJhbGFuY2UvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc3BvbnNlUXVvdGVkQ29udGVudFR5cGVJbWJhbGFuY2UvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LXJlc3BvbnNlLXF1b3RlZC1jb250ZW50LXR5cGUtaW1iYWxhbmNlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc3BvbnNlUXVvdGVkQ29udGVudFR5cGVJbWJhbGFuY2UvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRSZXNwb25zZVF1b3RlZENvbnRlbnRUeXBlSW1iYWxhbmNlL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFJlc3BvbnNlUXVvdGVkQ29udGVudFR5cGVJbWJhbGFuY2UvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0UmVzcG9uc2VRdW90ZWRDb250ZW50VHlwZUltYmFsYW5jZS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFNTTFJlcXVlc3RBdHRyaWJ1dGVzL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0U1NMUmVxdWVzdEF0dHJpYnV0ZXMvV2ViVGVzdC5qYXZhCmluZGV4IDEyNGJhZGMuLjliN2RmODAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0U1NMUmVxdWVzdEF0dHJpYnV0ZXMvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0U1NMUmVxdWVzdEF0dHJpYnV0ZXMvV2ViVGVzdC5qYXZhCkBAIC0yMiw3ICsyMiw3IEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci4qOwogCiAvKgotICogVW5pdCB0ZXN0IHJlbGF0ZWQgdG8gCisgKiBVbml0IHRlc3QgcmVsYXRlZCB0bwogICogaHR0cHM6Ly9nbGFzc2Zpc2guZGV2LmphdmEubmV0L2lzc3Vlcy9zaG93X2J1Zy5jZ2k/aWQ9NTYyCiAgKiAoIkh0dHBTZXJ2bGV0UmVxdWVzdCBkb2VzIG5vdCByZXR1cm4gYW55IGF0dHJpYnV0ZSBpbiBKQVgtV1Mgd2ViIHNlcnZpY2UiKToKICAqCkBAIC02NCw3ICs2NCw3IEBACiAgICAgICAgIFN0cmluZyBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgICAgIFN0cmluZyBrZXlTdG9yZVBhdGggPSBhcmdzWzNdOwogICAgICAgICBTdHJpbmcgdHJ1c3RTdG9yZVBhdGggPSBhcmdzWzRdOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgU1NMU29ja2V0RmFjdG9yeSBzc2YgPSBnZXRTU0xTb2NrZXRGYWN0b3J5KGtleVN0b3JlUGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVzdFN0b3JlUGF0aCk7CkBAIC03Miw5ICs3Miw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIvVGVzdFNlcnZsZXQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzZik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgcGFyc2VSZXNwb25zZShjb25uZWN0aW9uKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0KSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB0LnByaW50U3RhY2tUcmFjZSgpOwpAQCAtMTE3LDcgKzExNyw3IEBACiAKICAgICAgICAgU1NMQ29udGV4dCBjdHggPSBTU0xDb250ZXh0LmdldEluc3RhbmNlKCJUTFMiKTsKIAotICAgICAgICAvLyBLZXlzdG9yZSAKKyAgICAgICAgLy8gS2V5c3RvcmUKICAgICAgICAgS2V5U3RvcmUga3MgPSBLZXlTdG9yZS5nZXRJbnN0YW5jZSgiSktTIik7CiAgICAgICAgIGNoYXJbXSBwYXNzcGhyYXNlID0gImNoYW5nZWl0Ii50b0NoYXJBcnJheSgpOwogICAgICAgICBrcy5sb2FkKG5ldyBGaWxlSW5wdXRTdHJlYW0oa2V5U3RvcmVQYXRoKSwgcGFzc3BocmFzZSk7CkBAIC0xMzMsNyArMTMzLDcgQEAKICAgICAgICAgdG1mLmluaXQodHJ1c3RTdG9yZSk7CiAKICAgICAgICAgY3R4LmluaXQoa21mLmdldEtleU1hbmFnZXJzKCksdG1mLmdldFRydXN0TWFuYWdlcnMoKSwgbnVsbCk7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBjdHguZ2V0U29ja2V0RmFjdG9yeSgpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRTU0xSZXF1ZXN0QXR0cmlidXRlcy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRTU0xSZXF1ZXN0QXR0cmlidXRlcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDNkMjJhNmIuLjhmYzYwN2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0U1NMUmVxdWVzdEF0dHJpYnV0ZXMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFNTTFJlcXVlc3RBdHRyaWJ1dGVzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2VydmxldC1zc2wtcmVxdWVzdC1hdHRyaWJ1dGVzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFNTTFJlcXVlc3RBdHRyaWJ1dGVzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0U1NMUmVxdWVzdEF0dHJpYnV0ZXMvYnVpbGQueG1sCmluZGV4IGE3ZWFiOWQuLjY1NmRkZGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0U1NMUmVxdWVzdEF0dHJpYnV0ZXMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0U1NMUmVxdWVzdEF0dHJpYnV0ZXMvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwxOCArNDQsMTggQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC03NywxMCArNzcsMTAgQEAKICAgICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0U1NMUmVxdWVzdEF0dHJpYnV0ZXMvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRTU0xSZXF1ZXN0QXR0cmlidXRlcy9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggYzJhNzY4ZS4uZjU1Y2I5YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRTU0xSZXF1ZXN0QXR0cmlidXRlcy9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRTU0xSZXF1ZXN0QXR0cmlidXRlcy9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTIyLDEzICsyMiwxMyBAQAogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCIKICAgICAgICAgIHZlcnNpb249IjIuNCI+Ci0gICAgIAorCiAgICAgPHNlcnZsZXQ+CiAgICAgICA8ZGlzcGxheS1uYW1lPlRlc3RTZXJ2bGV0PC9kaXNwbGF5LW5hbWU+CiAgICAgICA8c2VydmxldC1uYW1lPlRlc3RTZXJ2bGV0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICA8c2VydmxldC1jbGFzcz5UZXN0U2VydmxldDwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKLSAgICAKKyAgICA8L3NlcnZsZXQ+CisKICAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgPHNlcnZsZXQtbmFtZT5UZXN0U2VydmxldDwvc2VydmxldC1uYW1lPgogICAgICAgPHVybC1wYXR0ZXJuPi9UZXN0U2VydmxldDwvdXJsLXBhdHRlcm4+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFNTTFJlcXVlc3RBdHRyaWJ1dGVzL3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0U1NMUmVxdWVzdEF0dHJpYnV0ZXMvc2VydmxldC9UZXN0U2VydmxldC5qYXZhCmluZGV4IGEwNGFhOWEuLmI0NWY5NTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0U1NMUmVxdWVzdEF0dHJpYnV0ZXMvc2VydmxldC9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0U1NMUmVxdWVzdEF0dHJpYnV0ZXMvc2VydmxldC9UZXN0U2VydmxldC5qYXZhCkBAIC0yOCw3ICsyOCw3IEBACiAgICAgICAgIEVudW1lcmF0aW9uPFN0cmluZz4gZSA9IHJlcS5nZXRBdHRyaWJ1dGVOYW1lcygpOwogICAgICAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkgewogICAgICAgICAgICBhdHRycy5hcHBlbmQoZS5uZXh0RWxlbWVudCgpICsgIjsiKTsKLSAgICAgICAgfSAgICAgICAgCisgICAgICAgIH0KIAogICAgICAgICByZXMuZ2V0V3JpdGVyKCkucHJpbnQoYXR0cnMpOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0VG9Kc3BGaWxlTWFwcGluZy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFRvSnNwRmlsZU1hcHBpbmcvV2ViVGVzdC5qYXZhCmluZGV4IDRlZjI2NTYuLmUyZmUyZDIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0VG9Kc3BGaWxlTWFwcGluZy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRUb0pzcEZpbGVNYXBwaW5nL1dlYlRlc3QuamF2YQpAQCAtMzgsNyArMzgsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBCdWd0cmFxIDQ5MjQzMjYiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC01Myw3ICs1Myw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290OwogICAgICAgICBpbnQgY29kZSA9IGludm9rZVNlcnZsZXQodXJsICsgIi9UZXN0U2VydmxldDEiKTsKICAgICAgICAgaWYgKGNvZGUgIT0gMjAwKSB7CkBAIC02Nyw3ICs2Nyw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSBpbnQgaW52b2tlU2VydmxldChTdHJpbmcgdXJsKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgICAgIAorCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW52b2tpbmcgc2VydmxldCBhdDogIiArIHVybCk7CiAKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0VG9Kc3BGaWxlTWFwcGluZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRUb0pzcEZpbGVNYXBwaW5nL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNWU1MzBkZi4uY2E4MGI4MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRUb0pzcEZpbGVNYXBwaW5nL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRUb0pzcEZpbGVNYXBwaW5nL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2bGV0LXRvLWpzcC1maWxlLW1hcHBpbmciLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlcnZsZXQtdG8tanNwLWZpbGUtbWFwcGluZyIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFRvSnNwRmlsZU1hcHBpbmcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NlcnZsZXRUb0pzcEZpbGVNYXBwaW5nL2J1aWxkLnhtbAppbmRleCA0ZWRjOWNjLi40YWI3ODY1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2VydmxldFRvSnNwRmlsZU1hcHBpbmcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXJ2bGV0VG9Kc3BGaWxlTWFwcGluZy9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDE5ICs0NCwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjQsNyArNjQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkRlc3Ryb3llZC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkRlc3Ryb3llZC9XZWJUZXN0LmphdmEKaW5kZXggMDFhNTkyMS4uZDBhZmRlYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25EZXN0cm95ZWQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uRGVzdHJveWVkL1dlYlRlc3QuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogICogdG9vIGxhdGUgYWNjb3JkaW5nIHRvIFNlcnZsZXQgU3BlYyIpLgogICovCiBwdWJsaWMgY2xhc3MgV2ViVGVzdCB7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9OQU1FID0gInNlc3Npb24tZGVzdHJveWVkIjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uRGVzdHJveWVkL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkRlc3Ryb3llZC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDhjZmQ4ZDQuLjg3NWNmYWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uRGVzdHJveWVkL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25EZXN0cm95ZWQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTEgKzE1LDExIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlc3Npb24tZGVzdHJveWVkIi8+CiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii8ke2FwcG5hbWV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkRlc3Ryb3llZC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkRlc3Ryb3llZC9idWlsZC54bWwKaW5kZXggMDJlMjdkNy4uYzE0Y2YzMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25EZXN0cm95ZWQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uRGVzdHJveWVkL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMTAgKzQ0LDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCkBAIC01NSwxNCArNTUsMTQgQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25EZXN0cm95ZWQvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25EZXN0cm95ZWQvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDdlYjVlYzAuLjQyZjQ5MjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uRGVzdHJveWVkL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkRlc3Ryb3llZC9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTIzLDcgKzIzLDcgQEAKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIgogICAgICAgICAgdmVyc2lvbj0iMi40Ij4KIAotICAgIDxsaXN0ZW5lcj4gICAgIAorICAgIDxsaXN0ZW5lcj4KICAgICAgICAgPGxpc3RlbmVyLWNsYXNzPnRlc3QuU2VydmxldFRlc3Q8L2xpc3RlbmVyLWNsYXNzPgogICAgIDwvbGlzdGVuZXI+CiAKQEAgLTMxLDE0ICszMSwxNCBAQAogICAgICAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXRUZXN0PC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAKICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi9TZXJ2bGV0VGVzdDwvdXJsLXBhdHRlcm4+CiAgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiAKLSAgICAKKwogCiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uRGVzdHJveWVkL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uRGVzdHJveWVkL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQppbmRleCBiN2M5NjM3Li43MDI5NjE2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkRlc3Ryb3llZC9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25EZXN0cm95ZWQvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCkBAIC0yMiwxMCArMjIsMTAgQEAKIGltcG9ydCBqYWthcnRhLnNlcnZsZXQuaHR0cC4qOwogCiBwdWJsaWMgY2xhc3MgU2VydmxldFRlc3QgZXh0ZW5kcyBIdHRwU2VydmxldCBpbXBsZW1lbnRzIEh0dHBTZXNzaW9uTGlzdGVuZXIgewotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkKLSAgICAgICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7ICAgICAgICAKKyAgICAgICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLnNldEF0dHJpYnV0ZSgicmVzcG9uc2UiLCByZXNwb25zZSk7CiAgICAgICAgIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLmludmFsaWRhdGUoKTsKICAgICB9CkBAIC0zMyw3ICszMyw3IEBACiAgICAgcHVibGljIHZvaWQgc2Vzc2lvbkNyZWF0ZWQoSHR0cFNlc3Npb25FdmVudCBodHRwU2Vzc2lvbkV2ZW50KSB7CiAgICAgICAgIC8vIERvIG5vdGhpbmcKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXNzaW9uRGVzdHJveWVkKEh0dHBTZXNzaW9uRXZlbnQgaHR0cFNlc3Npb25FdmVudCkgewogICAgICAgICAvLyBNYWtlIHN1cmUgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlzIG5vdCB0aHJvd24KICAgICAgICAgdHJ5IHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uRGVzdHJveWVkQ2xhc3NMb2FkZXIvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25EZXN0cm95ZWRDbGFzc0xvYWRlci9XZWJUZXN0LmphdmEKaW5kZXggZjQyYzU1Mi4uNmJiM2YzNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25EZXN0cm95ZWRDbGFzc0xvYWRlci9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25EZXN0cm95ZWRDbGFzc0xvYWRlci9XZWJUZXN0LmphdmEKQEAgLTE5LDggKzE5LDggQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLio7CiAKIC8qCi0gKiAKLSAqIAorICoKKyAqCiAgKi8KIHB1YmxpYyBjbGFzcyBXZWJUZXN0IHsKIApAQCAtMzksNyArMzksNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBjbGFzc2xvYWRlciBpbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJIdHRwU2Vzc2lvbkxpc3RlbmVyLnNlc3Npb25EZXN0cm95ZWQoKSIpOwpAQCAtNDksNyArNDksNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CkBAIC02MCw3ICs2MCw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgYmFzZVVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QgKyAiL3Rlc3QiOwogCiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pKG5ldyBVUkwoYmFzZVVybCArICI/dGltZW91dD0xIikpLm9wZW5Db25uZWN0aW9uKCk7CkBAIC04OSw3ICs4OSw3IEBACiAgICAgICAgICAgICBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKICAgICAgICAgICAgIFN0cmluZyBsaW5lID0gaW5wdXQucmVhZExpbmUoKTsKICAgICAgICAgICAgIGlmICghRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArIGxpbmUpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGZpbmFsbHkgewpAQCAtMTA5LDcgKzEwOSw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIFN0cmluZyBnZXRTZXNzaW9uSWQoSHR0cFVSTENvbm5lY3Rpb24gY29ubikgewogICAgICAgICBTdHJpbmcgc2Vzc2lvbklkID0gbnVsbDsKICAgICAgICAgU3RyaW5nIGNvb2tpZVN0cmluZyA9IGNvbm4uZ2V0SGVhZGVyRmllbGQoIlNldC1Db29raWUiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uRGVzdHJveWVkQ2xhc3NMb2FkZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uRGVzdHJveWVkQ2xhc3NMb2FkZXIvYnVpbGQucHJvcGVydGllcwppbmRleCA4ZmNhM2MyLi4wMmUxMGUwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkRlc3Ryb3llZENsYXNzTG9hZGVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25EZXN0cm95ZWRDbGFzc0xvYWRlci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlc3Npb24tZXhwaXJlZCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25EZXN0cm95ZWRDbGFzc0xvYWRlci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkRlc3Ryb3llZENsYXNzTG9hZGVyL2J1aWxkLnhtbAppbmRleCBjZjkzZmE0Li4yODI3NWE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkRlc3Ryb3llZENsYXNzTG9hZGVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkRlc3Ryb3llZENsYXNzTG9hZGVyL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTAgKzQyLDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCkBAIC01MywxMCArNTMsMTAgQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02NCw3ICs2NCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uRGVzdHJveWVkQ2xhc3NMb2FkZXIvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25EZXN0cm95ZWRDbGFzc0xvYWRlci9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggODg4MDQyOS4uNGEzMzQ5OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25EZXN0cm95ZWRDbGFzc0xvYWRlci9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25EZXN0cm95ZWRDbGFzc0xvYWRlci9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTIzLDcgKzIzLDcgQEAKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIgogICAgICAgICAgdmVyc2lvbj0iMi40Ij4KIAotICA8bGlzdGVuZXI+ICAgICAKKyAgPGxpc3RlbmVyPgogICAgIDxsaXN0ZW5lci1jbGFzcz50ZXN0Lk15SHR0cFNlc3Npb25MaXN0ZW5lcjwvbGlzdGVuZXItY2xhc3M+CiAgIDwvbGlzdGVuZXI+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uRGVzdHJveWVkRHVyaW5nVW5kZXBsb3kvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25EZXN0cm95ZWREdXJpbmdVbmRlcGxveS9XZWJUZXN0LmphdmEKaW5kZXggYWRiZDI0YS4uY2RjNWE1ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25EZXN0cm95ZWREdXJpbmdVbmRlcGxveS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25EZXN0cm95ZWREdXJpbmdVbmRlcGxveS9XZWJUZXN0LmphdmEKQEAgLTUyLDcgKzUyLDcgQEAKICAgICAgICAgYWRtaW5QYXNzd29yZCA9IGFyZ3NbNF07CiAgICAgICAgIHJ1biA9IGFyZ3NbNV07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgR2xhc3NGaXNoIElzc3VlIDgzNCIpOwpAQCAtNjksNyArNjksNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZmlyc3RSdW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKQEAgLTEyOCw3ICsxMjgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZUNvZGUgKyAiLCBleHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uLkhUVFBfT0spOwogICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICBTdHJpbmcgY29va2llID0gY29ubi5nZXRIZWFkZXJGaWVsZCgic2V0LWNvb2tpZSIpOwogICAgICAgICBpZiAoY29va2llID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIk1pc3NpbmcgU2V0LUNvb2tpZSByZXNwb25zZSBoZWFkZXIiKTsKQEAgLTE2MCw3ICsxNjAsNyBAQAogICAgICAgICAgICAgU3RyaW5nIGNvb2tpZSA9ICJDb29raWU6ICIgKyBqc2Vzc2lvbklkICsgIlxuIjsKICAgICAgICAgICAgIG9zLndyaXRlKGNvb2tpZS5nZXRCeXRlcygpKTsKICAgICAgICAgICAgIG9zLndyaXRlKCJcclxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgICAgIGlzID0gc29jay5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICAgICAgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAKQEAgLTIwOCw3ICsyMDgsNyBAQAogICAgICAgICAgICAgU3RyaW5nIGNvb2tpZSA9ICJDb29raWU6ICIgKyBqc2Vzc2lvbklkICsgIlxuIjsKICAgICAgICAgICAgIG9zLndyaXRlKGNvb2tpZS5nZXRCeXRlcygpKTsKICAgICAgICAgICAgIG9zLndyaXRlKCJcclxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgICAgIGlzID0gc29jay5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICAgICAgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAKQEAgLTI2MCw3ICsyNjAsNyBAQAogICAgICAgICAgICAgU3RyaW5nIGNvb2tpZSA9ICJDb29raWU6ICIgKyBqc2Vzc2lvbklkU1NPICsgIlxuIjsKICAgICAgICAgICAgIG9zLndyaXRlKGNvb2tpZS5nZXRCeXRlcygpKTsKICAgICAgICAgICAgIG9zLndyaXRlKCJcclxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgICAgIGlzID0gc29jay5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICAgICAgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAKQEAgLTI3Nyw3ICsyNzcsNyBAQAogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CiAgICAgICAgICAgICBTdHJpbmcgcmVkaXJlY3RVcmwgPSAiTG9jYXRpb246IGh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQKLSAgICAgICAgICAgICAgICArIGNvbnRleHRSb290ICsgIi9sb2dpbi5qc3AiOyAKKyAgICAgICAgICAgICAgICArIGNvbnRleHRSb290ICsgIi9sb2dpbi5qc3AiOwogICAgICAgICAgICAgd2hpbGUgKChsaW5lID0gYnIucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihsaW5lKTsKICAgICAgICAgICAgICAgICBpZiAobGluZS5lcXVhbHMocmVkaXJlY3RVcmwpCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkRlc3Ryb3llZER1cmluZ1VuZGVwbG95L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkRlc3Ryb3llZER1cmluZ1VuZGVwbG95L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMjQzNjkzMy4uNDExNDliNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25EZXN0cm95ZWREdXJpbmdVbmRlcGxveS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uRGVzdHJveWVkRHVyaW5nVW5kZXBsb3kvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXNzaW9uLWRlc3Ryb3llZC1kdXJpbmctdW5kZXBsb3kiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uRGVzdHJveWVkRHVyaW5nVW5kZXBsb3kvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25EZXN0cm95ZWREdXJpbmdVbmRlcGxveS9idWlsZC54bWwKaW5kZXggMGJjYTBhZi4uNTAxNTQ1YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25EZXN0cm95ZWREdXJpbmdVbmRlcGxveS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25EZXN0cm95ZWREdXJpbmdVbmRlcGxveS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTU1LDEwICs1NSwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgIDxqYXZhYwpAQCAtNjYsMTAgKzY2LDEwIEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvYXBwc2Vydi1ydC5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNzcsNyArNzcsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuRmlyc3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTEwNywxNCArMTA3LDE0IEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3ktYWdhaW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveSIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0b3JlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25EZXN0cm95ZWREdXJpbmdVbmRlcGxveS9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkRlc3Ryb3llZER1cmluZ1VuZGVwbG95L2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCAxNjJlODQzLi5iYzZkYzI2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkRlc3Ryb3llZER1cmluZ1VuZGVwbG95L2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkRlc3Ryb3llZER1cmluZ1VuZGVwbG95L2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjUsMTIgKzI1LDEyIEBACiAKICAgPHNlY3VyaXR5LWNvbnN0cmFpbnQ+CiAgICAgPHdlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgotCTx3ZWItcmVzb3VyY2UtbmFtZT5Qcm90ZWN0ZWQgQXJlYTwvd2ViLXJlc291cmNlLW5hbWU+Ci0JPHVybC1wYXR0ZXJuPi8qPC91cmwtcGF0dGVybj4KLQk8aHR0cC1tZXRob2Q+REVMRVRFPC9odHRwLW1ldGhvZD4KLQk8aHR0cC1tZXRob2Q+R0VUPC9odHRwLW1ldGhvZD4KLQk8aHR0cC1tZXRob2Q+UE9TVDwvaHR0cC1tZXRob2Q+Ci0JPGh0dHAtbWV0aG9kPlBVVDwvaHR0cC1tZXRob2Q+CisgICAgPHdlYi1yZXNvdXJjZS1uYW1lPlByb3RlY3RlZCBBcmVhPC93ZWItcmVzb3VyY2UtbmFtZT4KKyAgICA8dXJsLXBhdHRlcm4+Lyo8L3VybC1wYXR0ZXJuPgorICAgIDxodHRwLW1ldGhvZD5ERUxFVEU8L2h0dHAtbWV0aG9kPgorICAgIDxodHRwLW1ldGhvZD5HRVQ8L2h0dHAtbWV0aG9kPgorICAgIDxodHRwLW1ldGhvZD5QT1NUPC9odHRwLW1ldGhvZD4KKyAgICA8aHR0cC1tZXRob2Q+UFVUPC9odHRwLW1ldGhvZD4KICAgICA8L3dlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgogCiAgICAgPGF1dGgtY29uc3RyYWludD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uRXhwaXJlZC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkV4cGlyZWQvV2ViVGVzdC5qYXZhCmluZGV4IGRmMThhYTcuLjgxMzdmNWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uRXhwaXJlZC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25FeHBpcmVkL1dlYlRlc3QuamF2YQpAQCAtMTksNyArMTksNyBAQAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuKjsKIAogLyoKLSAqIE1ha2Ugc3VyZSBIdHRwU2Vzc2lvbkxpc3RlbmVyJ3Mgc2Vzc2lvbkRlc3Ryb3llZCgpLCBhbmQgCisgKiBNYWtlIHN1cmUgSHR0cFNlc3Npb25MaXN0ZW5lcidzIHNlc3Npb25EZXN0cm95ZWQoKSwgYW5kCiAgKiBIdHRwU2Vzc2lvbkJpbmRpbmdMaXN0ZW5lcidzIHZhbHVlVW5ib3VuZCgpIG1ldGhvZHMgYXJlIGNhbGxlZCB3aGVuCiAgKiBzZXNzaW9uIGV4cGlyZXMuCiAgKgpAQCAtNDUsNyArNDUsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiSHR0cFNlc3Npb25MaXN0ZW5lci5zZXNzaW9uRGVzdHJveWVkKCkiKTsKQEAgLTU1LDcgKzU1LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpAQCAtNjYsNyArNjYsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICAgICAgICsgIi9DcmVhdGVTZXNzaW9uIjsKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikKQEAgLTkzLDcgKzkzLDcgQEAKICAgICAgICAgICAgIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogICAgICAgICAgICAgU3RyaW5nIGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpOwogICAgICAgICAgICAgaWYgKCFFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsgbGluZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZmluYWxseSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkV4cGlyZWQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uRXhwaXJlZC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGQwOWI2NmEuLmNkNmRhNTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uRXhwaXJlZC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uRXhwaXJlZC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlc3Npb24tZXhwaXJlZCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25FeHBpcmVkL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uRXhwaXJlZC9idWlsZC54bWwKaW5kZXggY2Y5M2ZhNC4uMjgyNzVhOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25FeHBpcmVkL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkV4cGlyZWQvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxMCArNDIsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTUzLDEwICs1MywxMCBAQAogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTY0LDcgKzY0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25FeHBpcmVkL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uRXhwaXJlZC9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggYTRlZWMyNy4uNmFhOGI3YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25FeHBpcmVkL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkV4cGlyZWQvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yMyw3ICsyMyw3IEBACiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCIKICAgICAgICAgIHZlcnNpb249IjIuNCI+CiAKLSAgPGxpc3RlbmVyPiAgICAgCisgIDxsaXN0ZW5lcj4KICAgICA8bGlzdGVuZXItY2xhc3M+dGVzdC5NeUh0dHBTZXNzaW9uTGlzdGVuZXI8L2xpc3RlbmVyLWNsYXNzPgogICA8L2xpc3RlbmVyPgogCkBAIC00Niw3ICs0Niw3IEBACiAgICAgPHNlcnZsZXQtbmFtZT5DaGVja1Jlc3VsdDwvc2VydmxldC1uYW1lPgogICAgIDx1cmwtcGF0dGVybj4vQ2hlY2tSZXN1bHQ8L3VybC1wYXR0ZXJuPgogICA8L3NlcnZsZXQtbWFwcGluZz4KLSAgICAKKwogCiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uRXhwaXJlZC9zZXJ2bGV0L3Rlc3QvTXlPYmplY3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uRXhwaXJlZC9zZXJ2bGV0L3Rlc3QvTXlPYmplY3QuamF2YQppbmRleCBmZDA2MTBjLi5mNmYzMmVhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkV4cGlyZWQvc2VydmxldC90ZXN0L015T2JqZWN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25FeHBpcmVkL3NlcnZsZXQvdGVzdC9NeU9iamVjdC5qYXZhCkBAIC0yNywxNyArMjcsMTcgQEAKICAgICAgKiBOb3RpZmllcyB0aGUgb2JqZWN0IHRoYXQgaXQgaXMgYmVpbmcgYm91bmQgdG8gYSBzZXNzaW9uLCBhbmQKICAgICAgKiBpZGVudGlmaWVzIHRoZSBzZXNzaW9uLgogICAgICAqCi0gICAgICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCB0aGF0IGlkZW50aWZpZXMgdGhlIHNlc3Npb24gCisgICAgICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCB0aGF0IGlkZW50aWZpZXMgdGhlIHNlc3Npb24KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCB2YWx1ZUJvdW5kKEh0dHBTZXNzaW9uQmluZGluZ0V2ZW50IGV2ZW50KSB7CiAgICAgICAgIC8vIGRvIG5vdGhpbmcKICAgICB9Ci0gICAgCisKICAgICAvKgogICAgICAqIE5vdGlmaWVzIHRoZSBvYmplY3QgdGhhdCBpdCBpcyBiZWluZyB1bmJvdW5kIGZyb20gYSBzZXNzaW9uLCBhbmQKICAgICAgKiBpZGVudGlmaWVzIHRoZSBzZXNzaW9uLgogICAgICAqCi0gICAgICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCB0aGF0IGlkZW50aWZpZXMgdGhlIHNlc3Npb24gCisgICAgICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCB0aGF0IGlkZW50aWZpZXMgdGhlIHNlc3Npb24KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCB2YWx1ZVVuYm91bmQoSHR0cFNlc3Npb25CaW5kaW5nRXZlbnQgZXZlbnQpIHsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25JZEN1c3RvbUdlbmVyYXRvci9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbklkQ3VzdG9tR2VuZXJhdG9yL1dlYlRlc3QuamF2YQppbmRleCBlYmMwZmFmLi5kNGU2NDU1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbklkQ3VzdG9tR2VuZXJhdG9yL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbklkQ3VzdG9tR2VuZXJhdG9yL1dlYlRlc3QuamF2YQpAQCAtNDksNyArNDksNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBDUiA2Mjc1NzA5Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTgsOCArNTgsOCBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgCi0gICAgICAgIHRyeSB7IAorCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2VTZXJ2bGV0KCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CkBAIC03NiwxNCArNzYsMTQgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlU2VydmxldCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CiAgICAgICAgICAgICArIGNvbnRleHRSb290ICsgIi9jcmVhdGVTZXNzaW9uIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsgCisgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIldyb25nIHJlc3BvbnNlIGNvZGUuIEV4cGVjdGVkOiAyMDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCByZWNlaXZlZDogIiArIHJlc3BvbnNlQ29kZSk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbklkQ3VzdG9tR2VuZXJhdG9yL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbklkQ3VzdG9tR2VuZXJhdG9yL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMWU4ZDMzZi4uYjA4NmY1YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25JZEN1c3RvbUdlbmVyYXRvci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSWRDdXN0b21HZW5lcmF0b3IvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXNzaW9uLWlkLWN1c3RvbS1nZW5lcmF0b3IiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSWRDdXN0b21HZW5lcmF0b3IvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25JZEN1c3RvbUdlbmVyYXRvci9idWlsZC54bWwKaW5kZXggMzE0Y2JkNS4uYTNhYThkYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25JZEN1c3RvbUdlbmVyYXRvci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25JZEN1c3RvbUdlbmVyYXRvci9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDE5ICs0NCwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjQsNyArNjQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjb3B5LWphciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8Y29weSBmaWxlPSJ1dWlkR2VuZXJhdG9ySW1wbC5qYXIiIHRvZGlyPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9saWIiCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbklkUHJlc2VudEluQm90aFJld3JpdHRlblVybEFuZENvb2tpZUJ5RGVmYXVsdC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbklkUHJlc2VudEluQm90aFJld3JpdHRlblVybEFuZENvb2tpZUJ5RGVmYXVsdC9XZWJUZXN0LmphdmEKaW5kZXggN2MyNjA1MC4uNDYxMTMzNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25JZFByZXNlbnRJbkJvdGhSZXdyaXR0ZW5VcmxBbmRDb29raWVCeURlZmF1bHQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSWRQcmVzZW50SW5Cb3RoUmV3cml0dGVuVXJsQW5kQ29va2llQnlEZWZhdWx0L1dlYlRlc3QuamF2YQpAQCAtNDUsNyArNDUsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBJVCA0Mzk0Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTMsOCArNTMsOCBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBydW5UZXN0KCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpAQCAtNzIsNyArNzIsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBydW5UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgICAKKwogICAgICAgICBzb2NrID0gbmV3IFNvY2tldChob3N0LCBuZXcgSW50ZWdlcihwb3J0KS5pbnRWYWx1ZSgpKTsKICAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gc29jay5nZXRPdXRwdXRTdHJlYW0oKTsKICAgICAgICAgU3RyaW5nIGdldCA9ICJHRVQgIiArIGNvbnRleHRSb290ICsgIi9jcmVhdGVTZXNzaW9uIiArICIgSFRUUC8xLjBcbiI7CkBAIC04NCw3ICs4NCw3IEBACiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJpcyA9IG51bGw7CiAgICAgICAgIFN0cmluZyBsb2NhdGlvbkhlYWRlciA9IG51bGw7CiAgICAgICAgIFN0cmluZyBjb29raWVIZWFkZXIgPSBudWxsOwotICAgICAgICB0cnkgeyAgICAgICAgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgICAgIGJpcyA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKICAgICAgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKQEAgLTExNiw3ICsxMTYsNyBAQAogICAgICAgICBpZiAoY29va2llSGVhZGVyID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIk1pc3NpbmcgU2V0LUNvb2tpZSByZXNwb25zZSBoZWFkZXIiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAobG9jYXRpb25IZWFkZXIgPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiTWlzc2luZyBMb2NhdGlvbiByZXNwb25zZSBoZWFkZXIiKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25JZFByZXNlbnRJbkJvdGhSZXdyaXR0ZW5VcmxBbmRDb29raWVCeURlZmF1bHQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSWRQcmVzZW50SW5Cb3RoUmV3cml0dGVuVXJsQW5kQ29va2llQnlEZWZhdWx0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggODRlNzg2Ni4uNDRlZmUxMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25JZFByZXNlbnRJbkJvdGhSZXdyaXR0ZW5VcmxBbmRDb29raWVCeURlZmF1bHQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbklkUHJlc2VudEluQm90aFJld3JpdHRlblVybEFuZENvb2tpZUJ5RGVmYXVsdC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlc3Npb24taWQtcHJlc2VudC1pbi1ib3RoLXJld3JpdHRlbi11cmwtYW5kLWNvb2tpZS1ieS1kZWZhdWx0Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbklkUHJlc2VudEluQm90aFJld3JpdHRlblVybEFuZENvb2tpZUJ5RGVmYXVsdC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbklkUHJlc2VudEluQm90aFJld3JpdHRlblVybEFuZENvb2tpZUJ5RGVmYXVsdC9idWlsZC54bWwKaW5kZXggMDBmZGFkMy4uYzM5Nzc2ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25JZFByZXNlbnRJbkJvdGhSZXdyaXR0ZW5VcmxBbmRDb29raWVCeURlZmF1bHQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSWRQcmVzZW50SW5Cb3RoUmV3cml0dGVuVXJsQW5kQ29va2llQnlEZWZhdWx0L2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMjMgKzQyLDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzAsMTAgKzcwLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25JZFByZXNlbnRPbmx5SW5Db29raWVJZlVybFJld3JpdGluZ0Rpc2FibGVkL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSWRQcmVzZW50T25seUluQ29va2llSWZVcmxSZXdyaXRpbmdEaXNhYmxlZC9XZWJUZXN0LmphdmEKaW5kZXggNzY2ZDI4MS4uZTAwNWRjMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25JZFByZXNlbnRPbmx5SW5Db29raWVJZlVybFJld3JpdGluZ0Rpc2FibGVkL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbklkUHJlc2VudE9ubHlJbkNvb2tpZUlmVXJsUmV3cml0aW5nRGlzYWJsZWQvV2ViVGVzdC5qYXZhCkBAIC00NCw3ICs0NCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIElUIDQzOTQiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC01Miw4ICs1Miw4IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJ1blRlc3QoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CkBAIC02MywxNCArNjMsMTQgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgcnVuVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAgCisKICAgICAgICAgU29ja2V0IHNvY2sgPSBuZXcgU29ja2V0KGhvc3QsIG5ldyBJbnRlZ2VyKHBvcnQpLmludFZhbHVlKCkpOwogICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSBzb2NrLmdldE91dHB1dFN0cmVhbSgpOwogICAgICAgICBTdHJpbmcgZ2V0ID0gIkdFVCAiICsgY29udGV4dFJvb3QgKyAiL2NyZWF0ZVNlc3Npb24iICsgIiBIVFRQLzEuMFxuIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGdldCk7CiAgICAgICAgIG9zLndyaXRlKGdldC5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJpcyA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKICAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOwpAQCAtODgsNyArODgsNyBAQAogICAgICAgICBpZiAoY29va2llSGVhZGVyID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIk1pc3NpbmcgU2V0LUNvb2tpZSByZXNwb25zZSBoZWFkZXIiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAobG9jYXRpb25IZWFkZXIgPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiTWlzc2luZyBMb2NhdGlvbiByZXNwb25zZSBoZWFkZXIiKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25JZFByZXNlbnRPbmx5SW5Db29raWVJZlVybFJld3JpdGluZ0Rpc2FibGVkL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbklkUHJlc2VudE9ubHlJbkNvb2tpZUlmVXJsUmV3cml0aW5nRGlzYWJsZWQvYnVpbGQucHJvcGVydGllcwppbmRleCA3OGY4YzU4Li4yZjlhODFhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbklkUHJlc2VudE9ubHlJbkNvb2tpZUlmVXJsUmV3cml0aW5nRGlzYWJsZWQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbklkUHJlc2VudE9ubHlJbkNvb2tpZUlmVXJsUmV3cml0aW5nRGlzYWJsZWQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXNzaW9uLWlkLXByZXNlbnQtb25seS1pbi1jb29raWUtaWYtdXJsLXJld3JpdGluZy1kaXNhYmxlZCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25JZFByZXNlbnRPbmx5SW5Db29raWVJZlVybFJld3JpdGluZ0Rpc2FibGVkL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSWRQcmVzZW50T25seUluQ29va2llSWZVcmxSZXdyaXRpbmdEaXNhYmxlZC9idWlsZC54bWwKaW5kZXggMDBmZGFkMy4uYzM5Nzc2ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25JZFByZXNlbnRPbmx5SW5Db29raWVJZlVybFJld3JpdGluZ0Rpc2FibGVkL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbklkUHJlc2VudE9ubHlJbkNvb2tpZUlmVXJsUmV3cml0aW5nRGlzYWJsZWQvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwyMyArNDIsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MCwxMCArNzAsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbklkVXJsUmV3cml0ZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbklkVXJsUmV3cml0ZS9XZWJUZXN0LmphdmEKaW5kZXggOTFkZDhiNi4uZjJkNjFjYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25JZFVybFJld3JpdGUvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSWRVcmxSZXdyaXRlL1dlYlRlc3QuamF2YQpAQCAtNDEsMTUgKzQxLDE1IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVUkwgcmV3cml0aW5nIHdpdGggc2Vzc2lvbiBpZCIpOwogICAgICAgICBuZXcgV2ViVGVzdChhcmdzKS5kb1Rlc3QoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgIAotICAgICAgICB0cnkgeyAKKworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlU2VydmxldCgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTYxLDE0ICs2MSwxNCBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2VTZXJ2bGV0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgICAKKwogICAgICAgICBTb2NrZXQgc29jayA9IG5ldyBTb2NrZXQoaG9zdCwgbmV3IEludGVnZXIocG9ydCkuaW50VmFsdWUoKSk7CiAgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IHNvY2suZ2V0T3V0cHV0U3RyZWFtKCk7CiAgICAgICAgIFN0cmluZyBnZXQgPSAiR0VUICIgKyBjb250ZXh0Um9vdCArICIvcmVkaXJlY3RGcm9tIiArICIgSFRUUC8xLjBcbiI7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihnZXQpOwogICAgICAgICBvcy53cml0ZShnZXQuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gc29jay5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBiaXMgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAKQEAgLTg4LDcgKzg4LDcgQEAKICAgICAgICAgaWYgKGNvb2tpZUxpbmUgIT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiVW5leHBlY3RlZCBTZXQtQ29va2llIHJlc3BvbnNlIGhlYWRlciIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChyZWRpcmVjdExpbmUgPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiTWlzc2luZyBMb2NhdGlvbiByZXNwb25zZSBoZWFkZXIiKTsKICAgICAgICAgfQpAQCAtMTA1LDcgKzEwNSw3IEBACiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOwogICAgICAgICBjb25uLmNvbm5lY3QoKTsKICAgICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm4uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7IAorICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UgY29kZS4gRXhwZWN0ZWQ6IDIwMCIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLCByZWNlaXZlZDogIiArIHJlc3BvbnNlQ29kZSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSWRVcmxSZXdyaXRlL2J1aWxkLW5nLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbklkVXJsUmV3cml0ZS9idWlsZC1uZy5wcm9wZXJ0aWVzCmluZGV4IGE3MDIwODcuLjEyZTNlMWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSWRVcmxSZXdyaXRlL2J1aWxkLW5nLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25JZFVybFJld3JpdGUvYnVpbGQtbmcucHJvcGVydGllcwpAQCAtMTYsNyArMTYsNyBAQAogCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlc3Npb24taWQtdXJsLXJld3JpdGUiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlc3Npb24taWQtdXJsLXJld3JpdGUiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25JZFVybFJld3JpdGUvYnVpbGQtbmcueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25JZFVybFJld3JpdGUvYnVpbGQtbmcueG1sCmluZGV4IDFkZDFhNmEuLjVjNGNkMzQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSWRVcmxSZXdyaXRlL2J1aWxkLW5nLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbklkVXJsUmV3cml0ZS9idWlsZC1uZy54bWwKQEAgLTgwLDcgKzgwLDcgQEAKICAgICAgIDxkZWxldGUgZGlyPSJ0ZXN0LXJlcG9ydCIvPgogICAgIDwvdGFyZ2V0PgogCi0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtOTAsMTYgKzkwLDE2IEBACiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25JZFVybFJld3JpdGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSWRVcmxSZXdyaXRlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNzhmMjIwZi4uOTBhY2Q5YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25JZFVybFJld3JpdGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbklkVXJsUmV3cml0ZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2Vzc2lvbi1pZC11cmwtcmV3cml0ZSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2Vzc2lvbi1pZC11cmwtcmV3cml0ZSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbklkVXJsUmV3cml0ZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbklkVXJsUmV3cml0ZS9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25JZFVybFJld3JpdGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSWRVcmxSZXdyaXRlL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSWRVcmxSZXdyaXRlL3Rlc3QvV2ViVGVzdE5HLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbklkVXJsUmV3cml0ZS90ZXN0L1dlYlRlc3RORy5qYXZhCmluZGV4IGY1ZWU5ZDQuLjEzOTgwZDAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSWRVcmxSZXdyaXRlL3Rlc3QvV2ViVGVzdE5HLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25JZFVybFJld3JpdGUvdGVzdC9XZWJUZXN0TkcuamF2YQpAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZ2V0KTsKICAgICAgICAgb3Mud3JpdGUoZ2V0LmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYmlzID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogCkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKIAotCWFzc2VydCByZXNwb25zZUNvZGUgPT0gMjAwOworICAgIGFzc2VydCByZXNwb25zZUNvZGUgPT0gMjAwOwogCiAgICAgICAgIGJpcyA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoY29ubi5nZXRJbnB1dFN0cmVhbSgpKSk7CiAgICAgICAgIHdoaWxlICgobGluZSA9IGJpcy5yZWFkTGluZSgpKSAhPSBudWxsKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbklkVXJsUmV3cml0ZS90ZXN0L3Rlc3RuZy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbklkVXJsUmV3cml0ZS90ZXN0L3Rlc3RuZy54bWwKaW5kZXggOGE3ZGY1Mi4uNDE1ZDI1YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25JZFVybFJld3JpdGUvdGVzdC90ZXN0bmcueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSWRVcmxSZXdyaXRlL3Rlc3QvdGVzdG5nLnhtbApAQCAtMTcsNyArMTcsNyBAQAogLS0+CiAKIDwhRE9DVFlQRSBzdWl0ZSBTWVNURU0gImh0dHA6Ly90ZXN0bmcub3JnL3Rlc3RuZy0xLjAuZHRkIiA+Ci0gIAorCiA8c3VpdGUgbmFtZT0id2ViIiA+CiAgIDxwYXJhbWV0ZXIgbmFtZT0iaG9zdCIgdmFsdWU9ImxvY2FsaG9zdCIvPgogICA8cGFyYW1ldGVyIG5hbWU9InBvcnQiIHZhbHVlPSI4MDgwIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkludmFsaWRhdGVOb0Nvb2tpZUluUmVzcG9uc2UvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25JbnZhbGlkYXRlTm9Db29raWVJblJlc3BvbnNlL1dlYlRlc3QuamF2YQppbmRleCA2NTgyZDViLi43N2JlY2NiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkludmFsaWRhdGVOb0Nvb2tpZUluUmVzcG9uc2UvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSW52YWxpZGF0ZU5vQ29va2llSW5SZXNwb25zZS9XZWJUZXN0LmphdmEKQEAgLTQzLDcgKzQzLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgR2xhc3NGaXNoIDg5NiIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTUyLDggKzUyLDggQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgIAotICAgICAgICB0cnkgeyAKKworICAgICAgICB0cnkgewogICAgICAgICAgICAgcnVuKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKQEAgLTcyLDcgKzcyLDcgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGdldCk7CiAgICAgICAgIG9zLndyaXRlKGdldC5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJpcyA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKIApAQCAtOTEsNyArOTEsNyBAQAogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJXcm9uZyBudW1iZXIgb2YgY29va2llIHJlc3BvbnNlIGhlYWRlcnMuICIpOwogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJFeHBlY3RlZCAxLCBnb3QgIiArIGNvb2tpZUNvdW50KTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKLQl9IGVsc2UgaWYgKCFFWFBFQ1RFRF9DT09LSUVfSEVBREVSLmVxdWFscyhjb29raWVIZWFkZXIpKSB7CisgICAgfSBlbHNlIGlmICghRVhQRUNURURfQ09PS0lFX0hFQURFUi5lcXVhbHMoY29va2llSGVhZGVyKSkgewogICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJXcm9uZyBjb29raWUgcmVzcG9uc2UgaGVhZGVyLiAiKTsKICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRXhwZWN0ZWQ6ICIgKyBFWFBFQ1RFRF9DT09LSUVfSEVBREVSCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCBnb3Q6ICIgKyBjb29raWVIZWFkZXIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25JbnZhbGlkYXRlTm9Db29raWVJblJlc3BvbnNlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkludmFsaWRhdGVOb0Nvb2tpZUluUmVzcG9uc2UvYnVpbGQucHJvcGVydGllcwppbmRleCA1MzJhNWQxLi42MzgwMmE1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkludmFsaWRhdGVOb0Nvb2tpZUluUmVzcG9uc2UvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkludmFsaWRhdGVOb0Nvb2tpZUluUmVzcG9uc2UvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXNzaW9uLWludmFsaWRhdGUtbm8tY29va2llLWluLXJlc3BvbnNlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkludmFsaWRhdGVOb0Nvb2tpZUluUmVzcG9uc2UvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25JbnZhbGlkYXRlTm9Db29raWVJblJlc3BvbnNlL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkludmFsaWRhdGVOb0Nvb2tpZUluUmVzcG9uc2UvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSW52YWxpZGF0ZU5vQ29va2llSW5SZXNwb25zZS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkp2bVJvdXRlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSnZtUm91dGUvV2ViVGVzdC5qYXZhCmluZGV4IGFiODRjZmYuLjM4YTUzZWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSnZtUm91dGUvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSnZtUm91dGUvV2ViVGVzdC5qYXZhCkBAIC01OCw3ICs1OCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEdsYXNzRmlzaCBJc3N1ZSAzNzk2Iik7CiAgICAgICAgIG5ldyBXZWJUZXN0KGFyZ3MpLmRvVGVzdCgpOwpAQCAtNjYsNyArNjYsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CkBAIC04OCw3ICs4OCw3IEBACiAKICAgICAgICAgLyoKICAgICAgICAgICogQ3JlYXRlIHNlc3Npb24KLSAgICAgICAgICovICAgICAgICAKKyAgICAgICAgICovCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICArICIvQ3JlYXRlU2Vzc2lvbiI7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybCk7CkBAIC0xMDksMTkgKzEwOSwxOSBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiU2Vzc2lvbiBjb29raWUgZG9lcyBub3QgaGF2ZSBhbnkgSlZNUk9VVEUiKTsKICAgICAgICAgfQogCi0JU3RyaW5nIGNsaWVudENvb2tpZSA9IHNlc3Npb25Db29raWVIZWFkZXIucmVwbGFjZSgiUGF0aCIsICIkUGF0aCIpLnJlcGxhY2UoIkh0dHBPbmx5IiwgIiRIdHRwT25seSIpOworICAgIFN0cmluZyBjbGllbnRDb29raWUgPSBzZXNzaW9uQ29va2llSGVhZGVyLnJlcGxhY2UoIlBhdGgiLCAiJFBhdGgiKS5yZXBsYWNlKCJIdHRwT25seSIsICIkSHR0cE9ubHkiKTsKICAgICAgICAgLyoKICAgICAgICAgICogUmVzdW1lIHNlc3Npb24KLSAgICAgICAgICovICAgICAgICAKKyAgICAgICAgICovCiAgICAgICAgIHNvY2sgPSBuZXcgU29ja2V0KGhvc3QsIG5ldyBJbnRlZ2VyKHBvcnQpLmludFZhbHVlKCkpOwogICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSBzb2NrLmdldE91dHB1dFN0cmVhbSgpOwogICAgICAgICBTdHJpbmcgZ2V0UmVxdWVzdExpbmUgPSAiR0VUICIgKyBjb250ZXh0Um9vdCArICIvQ2hlY2tTZXNzaW9uIiArCiAgICAgICAgICAgICAiIEhUVFAvMS4wXG4iOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuQ29ubmVjdGluZyB0bzogIiArIGdldFJlcXVlc3RMaW5lKTsgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG5Db25uZWN0aW5nIHRvOiAiICsgZ2V0UmVxdWVzdExpbmUpOwogICAgICAgICBvcy53cml0ZShnZXRSZXF1ZXN0TGluZS5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoKCJDb29raWU6ICIgKyBjbGllbnRDb29raWUgKyAiXG4iKS5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgc2Vzc2lvbkNvb2tpZUhlYWRlciA9IG51bGw7CiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gbnVsbDsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYmlzID0gbnVsbDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSnZtUm91dGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSnZtUm91dGUvYnVpbGQucHJvcGVydGllcwppbmRleCBjMTI4NzAzLi5iNmRkMjI0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkp2bVJvdXRlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25Kdm1Sb3V0ZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlc3Npb24tanZtLXJvdXRlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbkp2bVJvdXRlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSnZtUm91dGUvYnVpbGQueG1sCmluZGV4IGU5MDY2MWUuLjMxNzNiZGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSnZtUm91dGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uSnZtUm91dGUvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwyMSArNDQsMjEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTczLDcgKzczLDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25NZW1vcnlQZXJzaXN0L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uTWVtb3J5UGVyc2lzdC9XZWJUZXN0LmphdmEKaW5kZXggOGJiNDBkZS4uYzg1MTk5NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25NZW1vcnlQZXJzaXN0L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbk1lbW9yeVBlcnNpc3QvV2ViVGVzdC5qYXZhCkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICAgICAgcnVuID0gYXJnc1szXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciAoZGUpc2VyaWFsaXphdGlvbiBvZiAiCkBAIC03Myw3ICs3Myw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBmaXJzdFJ1bigpIHRocm93cyBFeGNlcHRpb24gewpAQCAtODQsNyArODQsNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZ2V0KTsKICAgICAgICAgb3Mud3JpdGUoZ2V0LmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXHJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gc29jay5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKIApAQCAtMTI5LDcgKzEyOSw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjb29raWUpOwogICAgICAgICBvcy53cml0ZShjb29raWUuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCJcclxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbk1lbW9yeVBlcnNpc3QvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uTWVtb3J5UGVyc2lzdC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDQ4YzIxNzguLjRlZDFkOTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uTWVtb3J5UGVyc2lzdC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uTWVtb3J5UGVyc2lzdC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlc3Npb24tbWVtb3J5LXBlcnNpc3QiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uTWVtb3J5UGVyc2lzdC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbk1lbW9yeVBlcnNpc3QvYnVpbGQueG1sCmluZGV4IDlkMzAzODcuLmQzZTQ2OTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uTWVtb3J5UGVyc2lzdC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25NZW1vcnlQZXJzaXN0L2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMjEgKzQ0LDIxIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuZmlyc3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTg0LDEwICs4NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uTWVtb3J5UGVyc2lzdC9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbk1lbW9yeVBlcnNpc3QvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IGVkNzhiMmEuLmEzYmYzNDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uTWVtb3J5UGVyc2lzdC9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25NZW1vcnlQZXJzaXN0L2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtNDQsNSArNDQsNSBAQAogICAgIDxzZXJ2bGV0LW5hbWU+UmVzdW1lU2Vzc2lvbjwvc2VydmxldC1uYW1lPgogICAgIDx1cmwtcGF0dGVybj4vUmVzdW1lU2Vzc2lvbjwvdXJsLXBhdHRlcm4+CiAgIDwvc2VydmxldC1tYXBwaW5nPgotICAgIAorCiA8L3dlYi1hcHA+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbk1lbW9yeVBlcnNpc3Qvc2VydmxldC90ZXN0L0NyZWF0ZVNlc3Npb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uTWVtb3J5UGVyc2lzdC9zZXJ2bGV0L3Rlc3QvQ3JlYXRlU2Vzc2lvbi5qYXZhCmluZGV4IDg5Nzk1N2UuLmNkZDg3YzkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uTWVtb3J5UGVyc2lzdC9zZXJ2bGV0L3Rlc3QvQ3JlYXRlU2Vzc2lvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uTWVtb3J5UGVyc2lzdC9zZXJ2bGV0L3Rlc3QvQ3JlYXRlU2Vzc2lvbi5qYXZhCkBAIC0zMCw4ICszMCw4IEBACiAgICAgICAgIEh0dHBTZXNzaW9uIHNlc3Npb24gPSByZXEuZ2V0U2Vzc2lvbih0cnVlKTsKIAogICAgICAgICBIYXNoTWFwIG1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgICAgIG1hcC5wdXQoIm5hbWUxIiwgInZhbHVlMSIpOyAgIAotICAgICAgICBtYXAucHV0KCJuYW1lMiIsICJ2YWx1ZTIiKTsgICAKKyAgICAgICAgbWFwLnB1dCgibmFtZTEiLCAidmFsdWUxIik7CisgICAgICAgIG1hcC5wdXQoIm5hbWUyIiwgInZhbHVlMiIpOwogICAgICAgICBzZXNzaW9uLnNldEF0dHJpYnV0ZSgibWFwIiwgbWFwKTsKIAogICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG51bGw7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbk1lbW9yeVBlcnNpc3Qvc2VydmxldC90ZXN0L1Jlc3VtZVNlc3Npb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uTWVtb3J5UGVyc2lzdC9zZXJ2bGV0L3Rlc3QvUmVzdW1lU2Vzc2lvbi5qYXZhCmluZGV4IDIxZmI4MzIuLjk5N2ZjMjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uTWVtb3J5UGVyc2lzdC9zZXJ2bGV0L3Rlc3QvUmVzdW1lU2Vzc2lvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uTWVtb3J5UGVyc2lzdC9zZXJ2bGV0L3Rlc3QvUmVzdW1lU2Vzc2lvbi5qYXZhCkBAIC0zMiw3ICszMiw3IEBACiAgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gKEluaXRpYWxDb250ZXh0KQogICAgICAgICAgICAgc2Vzc2lvbi5nZXRBdHRyaWJ1dGUoIkpORElJbml0aWFsQ29udGV4dCIpOwogCi0gICAgICAgIGJvb2xlYW4gcGFzc2VkID0gZmFsc2U7IAorICAgICAgICBib29sZWFuIHBhc3NlZCA9IGZhbHNlOwogICAgICAgICBpZiAoInZhbHVlMSIuZXF1YWxzKG1hcC5nZXQoIm5hbWUxIikpCiAgICAgICAgICAgICAgICAgJiYgInZhbHVlMiIuZXF1YWxzKG1hcC5nZXQoIm5hbWUyIikpCiAgICAgICAgICAgICAgICAgJiYgKGljICE9IG51bGwpKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbk1lbW9yeVBlcnNpc3RQcmltaXRpdmVDbGFzcy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbk1lbW9yeVBlcnNpc3RQcmltaXRpdmVDbGFzcy9XZWJUZXN0LmphdmEKaW5kZXggMTViMGU1Mi4uY2UwNDgwYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25NZW1vcnlQZXJzaXN0UHJpbWl0aXZlQ2xhc3MvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uTWVtb3J5UGVyc2lzdFByaW1pdGl2ZUNsYXNzL1dlYlRlc3QuamF2YQpAQCAtNDQsNyArNDQsNyBAQAogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgICAgIHJ1biA9IGFyZ3NbM107CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgQ1IgNjcxNjUwMyIpOwpAQCAtNjMsNyArNjMsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZmlyc3RSdW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKQEAgLTc0LDcgKzc0LDcgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGdldCk7CiAgICAgICAgIG9zLndyaXRlKGdldC5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogCkBAIC0xMTgsNyArMTE4LDcgQEAKICAgICAgICAgU3RyaW5nIGNvb2tpZSA9ICJDb29raWU6ICIgKyBqc2Vzc2lvbklkICsgIlxuIjsKICAgICAgICAgb3Mud3JpdGUoY29va2llLmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uTWVtb3J5UGVyc2lzdFByaW1pdGl2ZUNsYXNzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbk1lbW9yeVBlcnNpc3RQcmltaXRpdmVDbGFzcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGYyZWJkMzIuLjQwMTZlMTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uTWVtb3J5UGVyc2lzdFByaW1pdGl2ZUNsYXNzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25NZW1vcnlQZXJzaXN0UHJpbWl0aXZlQ2xhc3MvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXNzaW9uLW1lbW9yeS1wZXJzaXN0LXByaW1pdGl2ZS1jbGFzcyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25NZW1vcnlQZXJzaXN0UHJpbWl0aXZlQ2xhc3MvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25NZW1vcnlQZXJzaXN0UHJpbWl0aXZlQ2xhc3MvYnVpbGQueG1sCmluZGV4IDlkMzAzODcuLmQzZTQ2OTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uTWVtb3J5UGVyc2lzdFByaW1pdGl2ZUNsYXNzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbk1lbW9yeVBlcnNpc3RQcmltaXRpdmVDbGFzcy9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDIxICs0NCwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bmZpcnN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC04NCwxMCArODQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbk1lbW9yeVBlcnNpc3RQcmltaXRpdmVDbGFzcy9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbk1lbW9yeVBlcnNpc3RQcmltaXRpdmVDbGFzcy9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggZTA0MDlmMi4uZmU4NTNmNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25NZW1vcnlQZXJzaXN0UHJpbWl0aXZlQ2xhc3MvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uTWVtb3J5UGVyc2lzdFByaW1pdGl2ZUNsYXNzL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMzQsNSArMzQsNSBAQAogICAgIDxzZXJ2bGV0LW5hbWU+UmVzdW1lU2Vzc2lvbjwvc2VydmxldC1uYW1lPgogICAgIDx1cmwtcGF0dGVybj4vUmVzdW1lU2Vzc2lvbjwvdXJsLXBhdHRlcm4+CiAgIDwvc2VydmxldC1tYXBwaW5nPgotICAgIAorCiA8L3dlYi1hcHA+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblByZXNlcnZlQWNyb3NzUmVkZXBsb3kvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25QcmVzZXJ2ZUFjcm9zc1JlZGVwbG95L1dlYlRlc3QuamF2YQppbmRleCBlMDY3ZTQ1Li5hM2IyMzZjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblByZXNlcnZlQWNyb3NzUmVkZXBsb3kvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveS9XZWJUZXN0LmphdmEKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgICAgICBydW4gPSBhcmdzWzNdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEdsYXNzRmlzaCBJc3N1ZSA2MDA1Iik7CkBAIC02Niw3ICs2Niw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBmaXJzdFJ1bigpIHRocm93cyBFeGNlcHRpb24gewpAQCAtNzcsNyArNzcsNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZ2V0KTsKICAgICAgICAgb3Mud3JpdGUoZ2V0LmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXHJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gc29jay5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKIApAQCAtMTIwLDcgKzEyMCw3IEBACiAgICAgICAgIFN0cmluZyBjb29raWUgPSAiQ29va2llOiAiICsganNlc3Npb25JZCArICJcbiI7CiAgICAgICAgIG9zLndyaXRlKGNvb2tpZS5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxyXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25QcmVzZXJ2ZUFjcm9zc1JlZGVwbG95L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNzVlMTFiZi4uNWU2Mjc3MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25QcmVzZXJ2ZUFjcm9zc1JlZGVwbG95L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25QcmVzZXJ2ZUFjcm9zc1JlZGVwbG95L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2Vzc2lvbi1wcmVzZXJ2ZS1hY3Jvc3MtcmVkZXBsb3kiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblByZXNlcnZlQWNyb3NzUmVkZXBsb3kvYnVpbGQueG1sCmluZGV4IGFhYTJkNzkuLjZiM2I3ZDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25QcmVzZXJ2ZUFjcm9zc1JlZGVwbG95L2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMTYgKzQ0LDE2IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KQEAgLTY3LDcgKzY3LDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iLS1wcm9wZXJ0aWVzIGtlZXBTZXNzaW9ucz10cnVlIC0tbmFtZT0ke2FwcG5hbWV9LXdlYiAke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmVkZXBsb3lLZWVwU3RhdGUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iUmVkZXBsb3lpbmcga2VlcFN0YXRlICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIgZnJvbSAke2Jhc2VkaXJ9LiIKICAgICAgICAgICAgICAgbGV2ZWw9InZlcmJvc2UiLz4KQEAgLTk0LDcgKzk0LDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJydW4ubmFtZSIgdmFsdWU9InRoaXJkIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC0xMTAsNyArMTEwLDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveS9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblByZXNlcnZlQWNyb3NzUmVkZXBsb3kvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IGVkNzhiMmEuLmEzYmYzNDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveS9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25QcmVzZXJ2ZUFjcm9zc1JlZGVwbG95L2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtNDQsNSArNDQsNSBAQAogICAgIDxzZXJ2bGV0LW5hbWU+UmVzdW1lU2Vzc2lvbjwvc2VydmxldC1uYW1lPgogICAgIDx1cmwtcGF0dGVybj4vUmVzdW1lU2Vzc2lvbjwvdXJsLXBhdHRlcm4+CiAgIDwvc2VydmxldC1tYXBwaW5nPgotICAgIAorCiA8L3dlYi1hcHA+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblByZXNlcnZlQWNyb3NzUmVkZXBsb3kvc2VydmxldC90ZXN0L0NyZWF0ZVNlc3Npb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveS9zZXJ2bGV0L3Rlc3QvQ3JlYXRlU2Vzc2lvbi5qYXZhCmluZGV4IDg5Nzk1N2UuLmNkZDg3YzkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveS9zZXJ2bGV0L3Rlc3QvQ3JlYXRlU2Vzc2lvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveS9zZXJ2bGV0L3Rlc3QvQ3JlYXRlU2Vzc2lvbi5qYXZhCkBAIC0zMCw4ICszMCw4IEBACiAgICAgICAgIEh0dHBTZXNzaW9uIHNlc3Npb24gPSByZXEuZ2V0U2Vzc2lvbih0cnVlKTsKIAogICAgICAgICBIYXNoTWFwIG1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgICAgIG1hcC5wdXQoIm5hbWUxIiwgInZhbHVlMSIpOyAgIAotICAgICAgICBtYXAucHV0KCJuYW1lMiIsICJ2YWx1ZTIiKTsgICAKKyAgICAgICAgbWFwLnB1dCgibmFtZTEiLCAidmFsdWUxIik7CisgICAgICAgIG1hcC5wdXQoIm5hbWUyIiwgInZhbHVlMiIpOwogICAgICAgICBzZXNzaW9uLnNldEF0dHJpYnV0ZSgibWFwIiwgbWFwKTsKIAogICAgICAgICBJbml0aWFsQ29udGV4dCBpYyA9IG51bGw7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblByZXNlcnZlQWNyb3NzUmVkZXBsb3kvc2VydmxldC90ZXN0L1Jlc3VtZVNlc3Npb24uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveS9zZXJ2bGV0L3Rlc3QvUmVzdW1lU2Vzc2lvbi5qYXZhCmluZGV4IGY2ZDhmYWIuLjczNDU1ZWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveS9zZXJ2bGV0L3Rlc3QvUmVzdW1lU2Vzc2lvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveS9zZXJ2bGV0L3Rlc3QvUmVzdW1lU2Vzc2lvbi5qYXZhCkBAIC0zMiw3ICszMiw3IEBACiAgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gKEluaXRpYWxDb250ZXh0KQogICAgICAgICAgICAgc2Vzc2lvbi5nZXRBdHRyaWJ1dGUoIkpORElJbml0aWFsQ29udGV4dCIpOwogCi0gICAgICAgIGJvb2xlYW4gcGFzc2VkID0gZmFsc2U7IAorICAgICAgICBib29sZWFuIHBhc3NlZCA9IGZhbHNlOwogICAgICAgICBpZiAoInZhbHVlMSIuZXF1YWxzKG1hcC5nZXQoIm5hbWUxIikpCiAgICAgICAgICAgICAgICAgJiYgInZhbHVlMiIuZXF1YWxzKG1hcC5nZXQoIm5hbWUyIikpCiAgICAgICAgICAgICAgICAgJiYgKGljICE9IG51bGwpKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblByZXNlcnZlQWNyb3NzUmVkZXBsb3lEZWNsYXJhdGl2ZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblByZXNlcnZlQWNyb3NzUmVkZXBsb3lEZWNsYXJhdGl2ZS9XZWJUZXN0LmphdmEKaW5kZXggM2JiYmFlYi4uY2E0MTM5ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25QcmVzZXJ2ZUFjcm9zc1JlZGVwbG95RGVjbGFyYXRpdmUvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveURlY2xhcmF0aXZlL1dlYlRlc3QuamF2YQpAQCAtNDQsNyArNDQsNyBAQAogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgICAgIHJ1biA9IGFyZ3NbM107CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3Iga2VlcFNlc3Npb25zIGluIHNlc3Npb24tY29uZmlnL3Nlc3Npb24tcHJvcGVydGllcyIpOwpAQCAtNzAsNyArNzAsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZmlyc3RSdW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKQEAgLTgxLDcgKzgxLDcgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGdldCk7CiAgICAgICAgIG9zLndyaXRlKGdldC5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxyXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAKQEAgLTEyNCw3ICsxMjQsNyBAQAogICAgICAgICBTdHJpbmcgY29va2llID0gIkNvb2tpZTogIiArIGpzZXNzaW9uSWQgKyAiXG4iOwogICAgICAgICBvcy53cml0ZShjb29raWUuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCJcclxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblByZXNlcnZlQWNyb3NzUmVkZXBsb3lEZWNsYXJhdGl2ZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25QcmVzZXJ2ZUFjcm9zc1JlZGVwbG95RGVjbGFyYXRpdmUvYnVpbGQucHJvcGVydGllcwppbmRleCA1N2ZjZWVkLi5mNTE0MTg3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblByZXNlcnZlQWNyb3NzUmVkZXBsb3lEZWNsYXJhdGl2ZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveURlY2xhcmF0aXZlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2Vzc2lvbi1wcmVzZXJ2ZS1hY3Jvc3MtcmVkZXBsb3ktZGVjbGFyYXRpdmUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveURlY2xhcmF0aXZlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveURlY2xhcmF0aXZlL2J1aWxkLnhtbAppbmRleCAzODBlNmQ4Li45ZTExYWY2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblByZXNlcnZlQWNyb3NzUmVkZXBsb3lEZWNsYXJhdGl2ZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25QcmVzZXJ2ZUFjcm9zc1JlZGVwbG95RGVjbGFyYXRpdmUvYnVpbGQueG1sCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICA8ZGVsZXRlIGZpbGU9IlJlcFJ1bkNvbmYudHh0IiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICAgIDxkZWxldGUgZmlsZT0iSlNFU1NJT05JRCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDcsMTYgKzQ3LDE2IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KQEAgLTcwLDcgKzcwLDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iLS1uYW1lPSR7YXBwbmFtZX0td2ViICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZWRlcGxveTIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iUmVkZXBsb3lpbmcgd2l0aCBrZWVwU3RhdGU9ZmFsc2UgJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciBmcm9tICR7YmFzZWRpcn0uIgogICAgICAgICAgICAgICBsZXZlbD0idmVyYm9zZSIvPgpAQCAtMTA1LDcgKzEwNSw3IEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW50aGlyZCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtMTIxLDcgKzEyMSw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblByZXNlcnZlQWNyb3NzUmVkZXBsb3lEZWNsYXJhdGl2ZS9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblByZXNlcnZlQWNyb3NzUmVkZXBsb3lEZWNsYXJhdGl2ZS9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggZWQ3OGIyYS4uYTNiZjM0OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25QcmVzZXJ2ZUFjcm9zc1JlZGVwbG95RGVjbGFyYXRpdmUvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveURlY2xhcmF0aXZlL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtNDQsNSArNDQsNSBAQAogICAgIDxzZXJ2bGV0LW5hbWU+UmVzdW1lU2Vzc2lvbjwvc2VydmxldC1uYW1lPgogICAgIDx1cmwtcGF0dGVybj4vUmVzdW1lU2Vzc2lvbjwvdXJsLXBhdHRlcm4+CiAgIDwvc2VydmxldC1tYXBwaW5nPgotICAgIAorCiA8L3dlYi1hcHA+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblByZXNlcnZlQWNyb3NzUmVkZXBsb3lEZWNsYXJhdGl2ZS9zZXJ2bGV0L3Rlc3QvQ3JlYXRlU2Vzc2lvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25QcmVzZXJ2ZUFjcm9zc1JlZGVwbG95RGVjbGFyYXRpdmUvc2VydmxldC90ZXN0L0NyZWF0ZVNlc3Npb24uamF2YQppbmRleCA4OTc5NTdlLi5jZGQ4N2M5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblByZXNlcnZlQWNyb3NzUmVkZXBsb3lEZWNsYXJhdGl2ZS9zZXJ2bGV0L3Rlc3QvQ3JlYXRlU2Vzc2lvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveURlY2xhcmF0aXZlL3NlcnZsZXQvdGVzdC9DcmVhdGVTZXNzaW9uLmphdmEKQEAgLTMwLDggKzMwLDggQEAKICAgICAgICAgSHR0cFNlc3Npb24gc2Vzc2lvbiA9IHJlcS5nZXRTZXNzaW9uKHRydWUpOwogCiAgICAgICAgIEhhc2hNYXAgbWFwID0gbmV3IEhhc2hNYXAoKTsKLSAgICAgICAgbWFwLnB1dCgibmFtZTEiLCAidmFsdWUxIik7ICAgCi0gICAgICAgIG1hcC5wdXQoIm5hbWUyIiwgInZhbHVlMiIpOyAgIAorICAgICAgICBtYXAucHV0KCJuYW1lMSIsICJ2YWx1ZTEiKTsKKyAgICAgICAgbWFwLnB1dCgibmFtZTIiLCAidmFsdWUyIik7CiAgICAgICAgIHNlc3Npb24uc2V0QXR0cmlidXRlKCJtYXAiLCBtYXApOwogCiAgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbnVsbDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveURlY2xhcmF0aXZlL3NlcnZsZXQvdGVzdC9SZXN1bWVTZXNzaW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblByZXNlcnZlQWNyb3NzUmVkZXBsb3lEZWNsYXJhdGl2ZS9zZXJ2bGV0L3Rlc3QvUmVzdW1lU2Vzc2lvbi5qYXZhCmluZGV4IDE4ZWQzYWEuLmNlNGZjNTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveURlY2xhcmF0aXZlL3NlcnZsZXQvdGVzdC9SZXN1bWVTZXNzaW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25QcmVzZXJ2ZUFjcm9zc1JlZGVwbG95RGVjbGFyYXRpdmUvc2VydmxldC90ZXN0L1Jlc3VtZVNlc3Npb24uamF2YQpAQCAtMjcsNyArMjcsNyBAQAogICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzKQogICAgICAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKIAotICAgICAgICBib29sZWFuIHJlc3VtZSA9IGZhbHNlOyAKKyAgICAgICAgYm9vbGVhbiByZXN1bWUgPSBmYWxzZTsKICAgICAgICAgSHR0cFNlc3Npb24gc2Vzc2lvbiA9IHJlcS5nZXRTZXNzaW9uKGZhbHNlKTsKICAgICAgICAgaWYgKHNlc3Npb24gIT0gbnVsbCkgewogICAgICAgICAgICAgSGFzaE1hcCBtYXAgPSAoSGFzaE1hcCkgc2Vzc2lvbi5nZXRBdHRyaWJ1dGUoIm1hcCIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25Qcm9wZXJ0eUVuYWJsZUNvb2tpZXNJbnN0YW5jZUxldmVsL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uUHJvcGVydHlFbmFibGVDb29raWVzSW5zdGFuY2VMZXZlbC9XZWJUZXN0LmphdmEKaW5kZXggYTlmNjg1OC4uYWI1NmZjNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25Qcm9wZXJ0eUVuYWJsZUNvb2tpZXNJbnN0YW5jZUxldmVsL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblByb3BlcnR5RW5hYmxlQ29va2llc0luc3RhbmNlTGV2ZWwvV2ViVGVzdC5qYXZhCkBAIC0yMyw3ICsyMyw3IEBACiAgKgogICogICBodHRwczovL2dsYXNzZmlzaC5kZXYuamF2YS5uZXQvaXNzdWVzL3Nob3dfYnVnLmNnaT9pZD0zMTM3CiAgKiAgIChDaGFuZ2luZyAiZW5hYmxlQ29va2llcyIgc2Vzc2lvbiBwcm9wZXJ0eSBoYXMgbm8gZWZmZWN0KQotICogCisgKgogICogTWFrZSBzdXJlIHRoYXQgaWYgdGhlICJlbmFibGVDb29raWVzIiBwcm9wZXJ0eSBhdCB0aGUgZG9tYWluIGluc3RhbmNlIGxldmVsCiAgKiBpcyBzZXQgdG8gRkFMU0UsIGFuZCB0aGUgd2ViYXBwIGRvZXMgbm90IG92ZXJyaWRlIHRoaXMgcHJvcGVydHkgdG8gVFJVRSBpbgogICogaXRzIHN1bi13ZWIueG1sLCB0aGVyZSB3aWxsIGJlIG5vIHNlc3Npb24gY29va2llIHByZXNlbnQgaW4gdGhlIHJlc3BvbnNlLApAQCAtNDksNyArNDksNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVVJMIHJld3JpdGluZyB3aXRoIHNlc3Npb24gaWQiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC01OCw4ICs1OCw4IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAKLSAgICAgICAgdHJ5IHsgCisKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZVNlcnZsZXQoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKQEAgLTg0LDcgKzg0LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlU2VydmxldCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAgCisKICAgICAgICAgc29jayA9IG5ldyBTb2NrZXQoaG9zdCwgbmV3IEludGVnZXIocG9ydCkuaW50VmFsdWUoKSk7CiAgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IHNvY2suZ2V0T3V0cHV0U3RyZWFtKCk7CiAgICAgICAgIFN0cmluZyBnZXQgPSAiR0VUICIgKyBjb250ZXh0Um9vdCArICIvcmVkaXJlY3RGcm9tIiArICIgSFRUUC8xLjBcbiI7CkBAIC0xMzIsNyArMTMyLDcgQEAKICAgICAgICAgICAgIGZhaWwgPSB0cnVlOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigicmVkaXJlY3RMaW5lOiAiICsgcmVkaXJlY3RMaW5lKTsKICAgICAgICAgaWYgKHJlZGlyZWN0TGluZSA9PSBudWxsKSB7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIk1pc3NpbmcgTG9jYXRpb24gcmVzcG9uc2UgaGVhZGVyIik7CkBAIC0xNTQsNyArMTU0LDcgQEAKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsgCisgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIldyb25nIHJlc3BvbnNlIGNvZGUuIEV4cGVjdGVkOiAyMDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCByZWNlaXZlZDogIiArIHJlc3BvbnNlQ29kZSk7CiAgICAgICAgICAgICBmYWlsID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uUHJvcGVydHlFbmFibGVDb29raWVzSW5zdGFuY2VMZXZlbC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25Qcm9wZXJ0eUVuYWJsZUNvb2tpZXNJbnN0YW5jZUxldmVsL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNjIyYmY5YS4uYjJkYTIyZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25Qcm9wZXJ0eUVuYWJsZUNvb2tpZXNJbnN0YW5jZUxldmVsL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25Qcm9wZXJ0eUVuYWJsZUNvb2tpZXNJbnN0YW5jZUxldmVsL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2Vzc2lvbi1wcm9wZXJ0eS1lbmFibGVDb29raWVzLWluc3RhbmNlLWxldmVsIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblByb3BlcnR5RW5hYmxlQ29va2llc0luc3RhbmNlTGV2ZWwvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25Qcm9wZXJ0eUVuYWJsZUNvb2tpZXNJbnN0YW5jZUxldmVsL2J1aWxkLnhtbAppbmRleCAyMjVjOTRkLi45MWQ5ZDJlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblByb3BlcnR5RW5hYmxlQ29va2llc0luc3RhbmNlTGV2ZWwvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uUHJvcGVydHlFbmFibGVDb29raWVzSW5zdGFuY2VMZXZlbC9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDE5ICs0NCwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjQsNyArNjQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uU2VyaWFsaXplT25TaHV0ZG93bk9ubHkvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uU2VyaWFsaXplT25TaHV0ZG93bk9ubHkvYnVpbGQucHJvcGVydGllcwppbmRleCA1M2U3NWIyLi5kMzBiYzkxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblNlcmlhbGl6ZU9uU2h1dGRvd25Pbmx5L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25TZXJpYWxpemVPblNodXRkb3duT25seS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlc3Npb24tc2VyaWFsaXplLW9uLXNodXRkb3duLW9ubHkiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uU2V0QXR0cmlidXRlSmF2YXhOYW1pbmdDb250ZXh0L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uU2V0QXR0cmlidXRlSmF2YXhOYW1pbmdDb250ZXh0L1dlYlRlc3QuamF2YQppbmRleCBmYWNlZWM4Li4wOWFhZTA4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblNldEF0dHJpYnV0ZUphdmF4TmFtaW5nQ29udGV4dC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25TZXRBdHRyaWJ1dGVKYXZheE5hbWluZ0NvbnRleHQvV2ViVGVzdC5qYXZhCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgR2xhc3NGaXNoIElzc3VlIDIwMDMiKTsKQEAgLTUzLDExICs1MywxMSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgICArIGNvbnRleHRSb290ICsgIi9UZXN0U2VydmxldCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CkBAIC03MSw2ICs3MSw2IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblNldEF0dHJpYnV0ZUphdmF4TmFtaW5nQ29udGV4dC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25TZXRBdHRyaWJ1dGVKYXZheE5hbWluZ0NvbnRleHQvYnVpbGQucHJvcGVydGllcwppbmRleCBlMmIwZGI4Li4xZDk4M2IwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblNldEF0dHJpYnV0ZUphdmF4TmFtaW5nQ29udGV4dC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uU2V0QXR0cmlidXRlSmF2YXhOYW1pbmdDb250ZXh0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2Vzc2lvbi1zZXQtYXR0cmlidXRlLWphdmF4LW5hbWluZy1jb250ZXh0Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblNldEF0dHJpYnV0ZUphdmF4TmFtaW5nQ29udGV4dC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblNldEF0dHJpYnV0ZUphdmF4TmFtaW5nQ29udGV4dC9idWlsZC54bWwKaW5kZXggNDhlM2JmMC4uMjI3Y2ZmYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25TZXRBdHRyaWJ1dGVKYXZheE5hbWluZ0NvbnRleHQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uU2V0QXR0cmlidXRlSmF2YXhOYW1pbmdDb250ZXh0L2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMjEgKzQyLDIxIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC02OCwxMCArNjgsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblNldEF0dHJpYnV0ZUphdmF4TmFtaW5nQ29udGV4dC9zZXJ2bGV0L3Rlc3QvVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uU2V0QXR0cmlidXRlSmF2YXhOYW1pbmdDb250ZXh0L3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhCmluZGV4IGE5ZjE0NmQuLjNmMzkxNDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uU2V0QXR0cmlidXRlSmF2YXhOYW1pbmdDb250ZXh0L3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uU2V0QXR0cmlidXRlSmF2YXhOYW1pbmdDb250ZXh0L3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhCkBAIC0zMyw3ICszMyw3IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlKTsKICAgICAgICAgfQogCi0JSHR0cFNlc3Npb24gaHR0cFNlc3Npb24gPSByZXEuZ2V0U2Vzc2lvbigpOworICAgIEh0dHBTZXNzaW9uIGh0dHBTZXNzaW9uID0gcmVxLmdldFNlc3Npb24oKTsKICAgICAgICAgaHR0cFNlc3Npb24uc2V0QXR0cmlidXRlKCJKTkRJSW5pdGlhbENvbnRleHQiLCBpYyk7CiAKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblNldE1heEluYWN0aXZlSW50ZXJ2YWxFeHBpcmUvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25TZXRNYXhJbmFjdGl2ZUludGVydmFsRXhwaXJlL1dlYlRlc3QuamF2YQppbmRleCBkNmU5NGEzLi4wODI0ODE3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblNldE1heEluYWN0aXZlSW50ZXJ2YWxFeHBpcmUvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uU2V0TWF4SW5hY3RpdmVJbnRlcnZhbEV4cGlyZS9XZWJUZXN0LmphdmEKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgNDY2MTAwMSIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ4LDcgKzQ4LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKQEAgLTY2LDcgKzY2LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICArICIvQ3JlYXRlU2Vzc2lvbiI7CiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pCkBAIC04NCw5ICs4NCw5IEBACiAKICAgICAgICAgVGhyZWFkLnNsZWVwKDUgKiAxMDAwKTsKIAotCS8vIHRyYW5zbGF0ZSBzZXJ2ZXIgLT4gY2xpZW50IGNvb2tpZQotCVN0cmluZyBjbGllbnRDb29raWUgPSBjb29raWUucmVwbGFjZSgiUGF0aCIsICIkUGF0aCIpLnJlcGxhY2UoIkh0dHBPbmx5IiwgIiRIdHRwT25seSIpOwotIAorICAgIC8vIHRyYW5zbGF0ZSBzZXJ2ZXIgLT4gY2xpZW50IGNvb2tpZQorICAgIFN0cmluZyBjbGllbnRDb29raWUgPSBjb29raWUucmVwbGFjZSgiUGF0aCIsICIkUGF0aCIpLnJlcGxhY2UoIkh0dHBPbmx5IiwgIiRIdHRwT25seSIpOworCiAgICAgICAgIHNvY2sgPSBuZXcgU29ja2V0KGhvc3QsIG5ldyBJbnRlZ2VyKHBvcnQpLmludFZhbHVlKCkpOwogICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSBzb2NrLmdldE91dHB1dFN0cmVhbSgpOwogICAgICAgICBvcy53cml0ZSgoIkdFVCAiICsgY29udGV4dFJvb3QgKyAiL0NoZWNrU2Vzc2lvbiIKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uU2V0TWF4SW5hY3RpdmVJbnRlcnZhbEV4cGlyZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25TZXRNYXhJbmFjdGl2ZUludGVydmFsRXhwaXJlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNDQ4NWU4Ni4uODUyOTExNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25TZXRNYXhJbmFjdGl2ZUludGVydmFsRXhwaXJlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25TZXRNYXhJbmFjdGl2ZUludGVydmFsRXhwaXJlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2Vzc2lvbi1zZXQtbWF4LWluYWN0aXZlLWludGVydmFsLWV4cGlyZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25TZXRNYXhJbmFjdGl2ZUludGVydmFsRXhwaXJlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uU2V0TWF4SW5hY3RpdmVJbnRlcnZhbEV4cGlyZS9idWlsZC54bWwKaW5kZXggMDBmZGFkMy4uYzM5Nzc2ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25TZXRNYXhJbmFjdGl2ZUludGVydmFsRXhwaXJlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblNldE1heEluYWN0aXZlSW50ZXJ2YWxFeHBpcmUvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwyMyArNDIsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MCwxMCArNzAsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblNldE1heEluYWN0aXZlSW50ZXJ2YWxUb1plcm9BbmRJbnZhbGlkYXRlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uU2V0TWF4SW5hY3RpdmVJbnRlcnZhbFRvWmVyb0FuZEludmFsaWRhdGUvV2ViVGVzdC5qYXZhCmluZGV4IDZkNzQ4ZTUuLjc4MDUxMzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uU2V0TWF4SW5hY3RpdmVJbnRlcnZhbFRvWmVyb0FuZEludmFsaWRhdGUvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uU2V0TWF4SW5hY3RpdmVJbnRlcnZhbFRvWmVyb0FuZEludmFsaWRhdGUvV2ViVGVzdC5qYXZhCkBAIC0zOCw3ICszOCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIDQ2ODgyNzciKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC00Nyw3ICs0Nyw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihURVNUX05BTUUgKyAiIHRlc3QgZmFpbGVkIik7CkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgICAgICAgICAgKyAiL1Rlc3RTZXJ2bGV0IjsKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikKQEAgLTc5LDYgKzc5LDYgQEAKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfQotICAgICAgICB9ICAgIAorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25TZXRNYXhJbmFjdGl2ZUludGVydmFsVG9aZXJvQW5kSW52YWxpZGF0ZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25TZXRNYXhJbmFjdGl2ZUludGVydmFsVG9aZXJvQW5kSW52YWxpZGF0ZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGMyYmVkYWYuLmM4OTIzYjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uU2V0TWF4SW5hY3RpdmVJbnRlcnZhbFRvWmVyb0FuZEludmFsaWRhdGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvblNldE1heEluYWN0aXZlSW50ZXJ2YWxUb1plcm9BbmRJbnZhbGlkYXRlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2Vzc2lvbi1zZXQtbWF4LWluYWN0aXZlLWludGVydmFsLXRvLXplcm8tYW5kLWludmFsaWRhdGUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uU2V0TWF4SW5hY3RpdmVJbnRlcnZhbFRvWmVyb0FuZEludmFsaWRhdGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25TZXRNYXhJbmFjdGl2ZUludGVydmFsVG9aZXJvQW5kSW52YWxpZGF0ZS9idWlsZC54bWwKaW5kZXggMDBmZGFkMy4uYzM5Nzc2ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25TZXRNYXhJbmFjdGl2ZUludGVydmFsVG9aZXJvQW5kSW52YWxpZGF0ZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25TZXRNYXhJbmFjdGl2ZUludGVydmFsVG9aZXJvQW5kSW52YWxpZGF0ZS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDIzICs0MiwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTcwLDEwICs3MCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uU2V0TWF4SW5hY3RpdmVJbnRlcnZhbFRvWmVyb0FuZEludmFsaWRhdGUvc2VydmxldC9UZXN0U2VydmxldC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25TZXRNYXhJbmFjdGl2ZUludGVydmFsVG9aZXJvQW5kSW52YWxpZGF0ZS9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggZjI3YzdjZC4uM2VlMzVlMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25TZXRNYXhJbmFjdGl2ZUludGVydmFsVG9aZXJvQW5kSW52YWxpZGF0ZS9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25TZXRNYXhJbmFjdGl2ZUludGVydmFsVG9aZXJvQW5kSW52YWxpZGF0ZS9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIEh0dHBTZXNzaW9uIHNlc3Npb24gPSByZXEuZ2V0U2Vzc2lvbih0cnVlKTsKICAgICAgICAgICAgIHNlc3Npb24uc2V0TWF4SW5hY3RpdmVJbnRlcnZhbCgwKTsKLSAgICAgICAgICAgIHNlc3Npb24uaW52YWxpZGF0ZSgpOyAgIAorICAgICAgICAgICAgc2Vzc2lvbi5pbnZhbGlkYXRlKCk7CiAgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpc2UpIHsKICAgICAgICAgICAgIHBhc3NlZCA9IHRydWU7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uV2l0aENvb2tpZVBlcnNpc3RlbmNlVHlwZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbldpdGhDb29raWVQZXJzaXN0ZW5jZVR5cGUvV2ViVGVzdC5qYXZhCmluZGV4IDg3OGRiZWQuLmYzNmIwZmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uV2l0aENvb2tpZVBlcnNpc3RlbmNlVHlwZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25XaXRoQ29va2llUGVyc2lzdGVuY2VUeXBlL1dlYlRlc3QuamF2YQpAQCAtMzgsNyArMzgsNyBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7Ci0gCisKICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX05BTUUgPSAic2Vzc2lvbi13aXRoLWNvb2tpZS1wZXJzaXN0ZW5jZS10eXBlIjsKIAogICAgIHByaXZhdGUgU3RyaW5nIGhvc3Q7CkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGNvb2tpZS1iYXNlZCBzZXNzaW9uIHBlcnNpc3RlbmNlIik7CiAgICAgICAgIG5ldyBXZWJUZXN0KGFyZ3MpLmRvVGVzdCgpOwpAQCAtNTksNyArNTksNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CkBAIC04MSw3ICs4MSw3IEBACiAKICAgICAgICAgLyoKICAgICAgICAgICogQ3JlYXRlIHNlc3Npb24KLSAgICAgICAgICovICAgICAgICAKKyAgICAgICAgICovCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290ICsgIi9DcmVhdGVTZXNzaW9uIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsKTsKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikKQEAgLTExNywxMiArMTE3LDEyIEBACiAKICAgICAgICAgLyoKICAgICAgICAgICogUmVzdW1lIHNlc3Npb24KLSAgICAgICAgICovICAgICAgICAKKyAgICAgICAgICovCiAgICAgICAgIHNvY2sgPSBuZXcgU29ja2V0KGhvc3QsIG5ldyBJbnRlZ2VyKHBvcnQpLmludFZhbHVlKCkpOwogICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSBzb2NrLmdldE91dHB1dFN0cmVhbSgpOwogICAgICAgICBTdHJpbmcgZ2V0UmVxdWVzdExpbmUgPSAiR0VUICIgKyBjb250ZXh0Um9vdCArICIvQ2hlY2tTZXNzaW9uIiArCiAgICAgICAgICAgICAiIEhUVFAvMS4wXG4iOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJcbkNvbm5lY3RpbmcgdG86ICIgKyBnZXRSZXF1ZXN0TGluZSk7IAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJcbkNvbm5lY3RpbmcgdG86ICIgKyBnZXRSZXF1ZXN0TGluZSk7CiAgICAgICAgIG9zLndyaXRlKGdldFJlcXVlc3RMaW5lLmdldEJ5dGVzKCkpOwogICAgICAgICBTdHJpbmcgY29va2llSGVhZGVyTGluZSA9ICJDb29raWU6ICIgKyBqc2Vzc2lvbklkQ29va2llICsgIlxuIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludChjb29raWVIZWFkZXJMaW5lKTsKQEAgLTEzMSw3ICsxMzEsNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50KGNvb2tpZUhlYWRlckxpbmUpOwogICAgICAgICBvcy53cml0ZShjb29raWVIZWFkZXJMaW5lLmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IG51bGw7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJpcyA9IG51bGw7CiAgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uV2l0aENvb2tpZVBlcnNpc3RlbmNlVHlwZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25XaXRoQ29va2llUGVyc2lzdGVuY2VUeXBlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMDViY2E1Yi4uYTFiMTYxMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25XaXRoQ29va2llUGVyc2lzdGVuY2VUeXBlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25XaXRoQ29va2llUGVyc2lzdGVuY2VUeXBlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2Vzc2lvbi13aXRoLWNvb2tpZS1wZXJzaXN0ZW5jZS10eXBlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbldpdGhDb29raWVQZXJzaXN0ZW5jZVR5cGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25XaXRoQ29va2llUGVyc2lzdGVuY2VUeXBlL2J1aWxkLnhtbAppbmRleCBjYmE4YmJmLi5hZjIxN2FjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbldpdGhDb29raWVQZXJzaXN0ZW5jZVR5cGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uV2l0aENvb2tpZVBlcnNpc3RlbmNlVHlwZS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDIxICs0NCwyMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzMsNyArNzMsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25XaXRoQ29va2llUGVyc2lzdGVuY2VUeXBlL2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbldpdGhDb29raWVQZXJzaXN0ZW5jZVR5cGUvZGVzY3JpcHRvci9zdW4td2ViLnhtbAppbmRleCAyODJhOWY5Li5jNDBkMDM2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbldpdGhDb29raWVQZXJzaXN0ZW5jZVR5cGUvZGVzY3JpcHRvci9zdW4td2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbldpdGhDb29raWVQZXJzaXN0ZW5jZVR5cGUvZGVzY3JpcHRvci9zdW4td2ViLnhtbApAQCAtMjUsNiArMjUsNiBAQAogICAgICAgPHN0b3JlLXByb3BlcnRpZXM+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjb29raWVOYW1lIiB2YWx1ZT0iQUJDIi8+CiAgICAgICA8L3N0b3JlLXByb3BlcnRpZXM+Ci0gICAgPC9zZXNzaW9uLW1hbmFnZXI+IAorICAgIDwvc2Vzc2lvbi1tYW5hZ2VyPgogICA8L3Nlc3Npb24tY29uZmlnPgogPC9zdW4td2ViLWFwcD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uV2l0aG91dENvb2tpZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbldpdGhvdXRDb29raWUvV2ViVGVzdC5qYXZhCmluZGV4IGFkMWQ3MGEuLjc4YTJmYzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uV2l0aG91dENvb2tpZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25XaXRob3V0Q29va2llL1dlYlRlc3QuamF2YQpAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBJVCAxMzEyOSwgc2Vzc2lvbiB3aXRob3V0IGNvb2tpZSIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ4LDggKzQ4LDggQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW50IGEgPSBpbnZva2UoIi9pbmRleC5qc3AiKTsKICAgICAgICAgICAgIGludCBiID0gaW52b2tlKCIvaW5kZXguanNwO2pzZXNzaW9uaWQ9IiArIHNlc3Npb25JZCk7CiAgICAgICAgICAgICBpbnQgYyA9IGludm9rZSgiLztqc2Vzc2lvbmlkPSIgKyBzZXNzaW9uSWQpOwpAQCAtNjksNyArNjksNyBAQAogICAgICAqLwogICAgIHByaXZhdGUgaW50IGludm9rZShTdHJpbmcgdXJpKQogICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIEludGVnZXIgcmVzdWx0ID0gbnVsbDsKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QgKyB1cmkpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbldpdGhvdXRDb29raWUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uV2l0aG91dENvb2tpZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDgxNDIzNTAuLjc0Njc5YzUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uV2l0aG91dENvb2tpZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uV2l0aG91dENvb2tpZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNlc3Npb24td2l0aG91dC1jb29raWUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uV2l0aG91dENvb2tpZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2Vzc2lvbldpdGhvdXRDb29raWUvYnVpbGQueG1sCmluZGV4IDQ5YTU1MDguLjViNDNmZjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXNzaW9uV2l0aG91dENvb2tpZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Nlc3Npb25XaXRob3V0Q29va2llL2J1aWxkLnhtbApAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDUsMTYgKzQ1LDE2IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb3B5UmVzb3VyY2VzIi8+CkBAIC03NSwxMSArNzUsMTEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtOTEsMTAgKzkxLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVzdG9yZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlbW92ZVJlc291cmNlcyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NldE11bHRpVmFsdWVkUmVzcG9uc2VIZWFkZXIvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NldE11bHRpVmFsdWVkUmVzcG9uc2VIZWFkZXIvV2ViVGVzdC5qYXZhCmluZGV4IDhkNmQ4MDYuLjg5MmMxNGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXRNdWx0aVZhbHVlZFJlc3BvbnNlSGVhZGVyL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2V0TXVsdGlWYWx1ZWRSZXNwb25zZUhlYWRlci9XZWJUZXN0LmphdmEKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgQnVnemlsbGEgMzQxMTMiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2V0TXVsdGlWYWx1ZWRSZXNwb25zZUhlYWRlci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NldE11bHRpVmFsdWVkUmVzcG9uc2VIZWFkZXIvYnVpbGQucHJvcGVydGllcwppbmRleCAxNWUyMmQ4Li5mNDk2MjVkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2V0TXVsdGlWYWx1ZWRSZXNwb25zZUhlYWRlci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXRNdWx0aVZhbHVlZFJlc3BvbnNlSGVhZGVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2V0LW11bHRpLXZhbHVlZC1yZXNwb25zZS1oZWFkZXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXRNdWx0aVZhbHVlZFJlc3BvbnNlSGVhZGVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXRNdWx0aVZhbHVlZFJlc3BvbnNlSGVhZGVyL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2V0TXVsdGlWYWx1ZWRSZXNwb25zZUhlYWRlci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NldE11bHRpVmFsdWVkUmVzcG9uc2VIZWFkZXIvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NldFJlc3BvbnNlQ29udGVudExlbmd0aFRvWmVyb0tlZXBSZXNwb25zZUhlYWRlcnMvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NldFJlc3BvbnNlQ29udGVudExlbmd0aFRvWmVyb0tlZXBSZXNwb25zZUhlYWRlcnMvV2ViVGVzdC5qYXZhCmluZGV4IGYyNzJiNjQuLjEyYWEzOTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXRSZXNwb25zZUNvbnRlbnRMZW5ndGhUb1plcm9LZWVwUmVzcG9uc2VIZWFkZXJzL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2V0UmVzcG9uc2VDb250ZW50TGVuZ3RoVG9aZXJvS2VlcFJlc3BvbnNlSGVhZGVycy9XZWJUZXN0LmphdmEKQEAgLTQzLDE2ICs0MywxNiBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBCdWd6aWxsYSAzMjYwNCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKICAgICAgICAgd2ViVGVzdC5kb1Rlc3QoKTsKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAKKwogICAgICAgICB0cnkgewogCiAgICAgICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQKQEAgLTcyLDEwICs3MiwxMCBAQAogCiAgICAgICAgICAgICBpZiAoY29ubi5nZXRIZWFkZXJGaWVsZCgiQSIpID09IG51bGwpIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIk1pc3NpbmcgcmVzcG9uc2UgaGVhZGVyICdBJyIpOwotICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsgICAgCisgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChjb25uLmdldEhlYWRlckZpZWxkKCJCIikgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiTWlzc2luZyByZXNwb25zZSBoZWFkZXIgJ0InIik7Ci0gICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOyAgICAKKyAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXRSZXNwb25zZUNvbnRlbnRMZW5ndGhUb1plcm9LZWVwUmVzcG9uc2VIZWFkZXJzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2V0UmVzcG9uc2VDb250ZW50TGVuZ3RoVG9aZXJvS2VlcFJlc3BvbnNlSGVhZGVycy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDUzNWNhNzYuLmU4MzViMDEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXRSZXNwb25zZUNvbnRlbnRMZW5ndGhUb1plcm9LZWVwUmVzcG9uc2VIZWFkZXJzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NldFJlc3BvbnNlQ29udGVudExlbmd0aFRvWmVyb0tlZXBSZXNwb25zZUhlYWRlcnMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXQtcmVzcG9uc2UtY29udGVudC1sZW5ndGgtdG8temVyby1rZWVwLXJlc3BvbnNlLWhlYWRlcnMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXRSZXNwb25zZUNvbnRlbnRMZW5ndGhUb1plcm9LZWVwUmVzcG9uc2VIZWFkZXJzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXRSZXNwb25zZUNvbnRlbnRMZW5ndGhUb1plcm9LZWVwUmVzcG9uc2VIZWFkZXJzL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2V0UmVzcG9uc2VDb250ZW50TGVuZ3RoVG9aZXJvS2VlcFJlc3BvbnNlSGVhZGVycy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NldFJlc3BvbnNlQ29udGVudExlbmd0aFRvWmVyb0tlZXBSZXNwb25zZUhlYWRlcnMvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NldFdlYkNvbnRleHRQYXJhbS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2V0V2ViQ29udGV4dFBhcmFtL1dlYlRlc3QuamF2YQppbmRleCA4NmJiNTUxLi4yNDQ3NWZmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2V0V2ViQ29udGV4dFBhcmFtL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2V0V2ViQ29udGV4dFBhcmFtL1dlYlRlc3QuamF2YQpAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBJVCAxNjIyMiIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKFRFU1RfTkFNRSArICIgdGVzdCBmYWlsZWQiKTsKQEAgLTU2LDcgKzU2LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICArICIvbXl1cmwiOwogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKQpAQCAtOTMsMTAgKzkzLDEwIEBACiAgICAgICAgICAgICBpZiAoRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2V0V2ViQ29udGV4dFBhcmFtL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2V0V2ViQ29udGV4dFBhcmFtL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNDZkMzRhYi4uMGMxNzZmMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NldFdlYkNvbnRleHRQYXJhbS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXRXZWJDb250ZXh0UGFyYW0vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXQtd2ViLWNvbnRleHQtcGFyYW0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXRXZWJDb250ZXh0UGFyYW0vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NldFdlYkNvbnRleHRQYXJhbS9idWlsZC54bWwKaW5kZXggNGYzODMzMS4uYWVkYjEwMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NldFdlYkNvbnRleHRQYXJhbS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NldFdlYkNvbnRleHRQYXJhbS9idWlsZC54bWwKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDcsMTkgKzQ3LDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC0xMDgsNyArMTA4LDcgQEAKICAgICAgICAgICAgICAgICB2YWx1ZT0iLS1uYW1lICR7cGFyYW0ubmFtZX0gLS12YWx1ZSAke3BhcmFtLnZhbHVlfSAke2FwcG5hbWV9LXdlYiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InVuc2V0LXdlYi1jb250ZXh0LXBhcmFtIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJ1bnNldC13ZWItY29udGV4dC1wYXJhbSIvPgpAQCAtMTI4LDEwICsxMjgsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2V0V2ViQ29udGV4dFBhcmFtL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXRXZWJDb250ZXh0UGFyYW0vZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDI4ZWI3MzQuLjcxNjE3YWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXRXZWJDb250ZXh0UGFyYW0vZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zZXRXZWJDb250ZXh0UGFyYW0vZGVzY3JpcHRvci93ZWIueG1sCkBAIC00Niw1ICs0Niw1IEBACiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+bXl0ZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vbXl1cmw8L3VybC1wYXR0ZXJuPgogICAgIDwvc2VydmxldC1tYXBwaW5nPgotICAgICAKKwogPC93ZWItYXBwPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NpbmdsZVNpZ25PbkNvb2tpZUh0dHBPbmx5L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zaW5nbGVTaWduT25Db29raWVIdHRwT25seS9XZWJUZXN0LmphdmEKaW5kZXggMWUwNTBiMC4uOWZmZmU4MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NpbmdsZVNpZ25PbkNvb2tpZUh0dHBPbmx5L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2luZ2xlU2lnbk9uQ29va2llSHR0cE9ubHkvV2ViVGVzdC5qYXZhCkBAIC00OSw3ICs0OSw3IEBACiAgICAgICAgIGFkbWluVXNlciA9IGFyZ3NbM107CiAgICAgICAgIGFkbWluUGFzc3dvcmQgPSBhcmdzWzRdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEdsYXNzRmlzaCBJc3N1ZSAzODIzIik7CkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBydW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zaW5nbGVTaWduT25Db29raWVIdHRwT25seS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NpbmdsZVNpZ25PbkNvb2tpZUh0dHBPbmx5L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggM2NkMDY3YS4uOTQ4MmIzNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NpbmdsZVNpZ25PbkNvb2tpZUh0dHBPbmx5L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NpbmdsZVNpZ25PbkNvb2tpZUh0dHBPbmx5L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2luZ2xlLXNpZ24tb24tY29va2llLWh0dHAtb25seSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NpbmdsZVNpZ25PbkNvb2tpZUh0dHBPbmx5L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zaW5nbGVTaWduT25Db29raWVIdHRwT25seS9idWlsZC54bWwKaW5kZXggODk2ZjA5Mi4uMTEyZDY3MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NpbmdsZVNpZ25PbkNvb2tpZUh0dHBPbmx5L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2luZ2xlU2lnbk9uQ29va2llSHR0cE9ubHkvYnVpbGQueG1sCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgICAgPGRlbGV0ZSBmaWxlPSJXZWJUZXN0LmNsYXNzIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNjMsMTAgKzYzLDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCkBAIC03NCwxNCArNzQsMTQgQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9hcHBzZXJ2LXJ0LmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtOTgsNyArOTgsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVzdG9yZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zaW5nbGVTaWduT25Db29raWVIdHRwT25seS9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2luZ2xlU2lnbk9uQ29va2llSHR0cE9ubHkvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDE2MmU4NDMuLmJjNmRjMjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zaW5nbGVTaWduT25Db29raWVIdHRwT25seS9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NpbmdsZVNpZ25PbkNvb2tpZUh0dHBPbmx5L2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjUsMTIgKzI1LDEyIEBACiAKICAgPHNlY3VyaXR5LWNvbnN0cmFpbnQ+CiAgICAgPHdlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgotCTx3ZWItcmVzb3VyY2UtbmFtZT5Qcm90ZWN0ZWQgQXJlYTwvd2ViLXJlc291cmNlLW5hbWU+Ci0JPHVybC1wYXR0ZXJuPi8qPC91cmwtcGF0dGVybj4KLQk8aHR0cC1tZXRob2Q+REVMRVRFPC9odHRwLW1ldGhvZD4KLQk8aHR0cC1tZXRob2Q+R0VUPC9odHRwLW1ldGhvZD4KLQk8aHR0cC1tZXRob2Q+UE9TVDwvaHR0cC1tZXRob2Q+Ci0JPGh0dHAtbWV0aG9kPlBVVDwvaHR0cC1tZXRob2Q+CisgICAgPHdlYi1yZXNvdXJjZS1uYW1lPlByb3RlY3RlZCBBcmVhPC93ZWItcmVzb3VyY2UtbmFtZT4KKyAgICA8dXJsLXBhdHRlcm4+Lyo8L3VybC1wYXR0ZXJuPgorICAgIDxodHRwLW1ldGhvZD5ERUxFVEU8L2h0dHAtbWV0aG9kPgorICAgIDxodHRwLW1ldGhvZD5HRVQ8L2h0dHAtbWV0aG9kPgorICAgIDxodHRwLW1ldGhvZD5QT1NUPC9odHRwLW1ldGhvZD4KKyAgICA8aHR0cC1tZXRob2Q+UFVUPC9odHRwLW1ldGhvZD4KICAgICA8L3dlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgogCiAgICAgPGF1dGgtY29uc3RyYWludD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zaW5nbGVTaWduT25Db29raWVTZWN1cmUvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NpbmdsZVNpZ25PbkNvb2tpZVNlY3VyZS9XZWJUZXN0LmphdmEKaW5kZXggNTA5OWZlZi4uMTVlODMwNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NpbmdsZVNpZ25PbkNvb2tpZVNlY3VyZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NpbmdsZVNpZ25PbkNvb2tpZVNlY3VyZS9XZWJUZXN0LmphdmEKQEAgLTQ5LDcgKzQ5LDcgQEAKICAgICAgICAgYWRtaW5Vc2VyID0gYXJnc1szXTsKICAgICAgICAgYWRtaW5QYXNzd29yZCA9IGFyZ3NbNF07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgR2xhc3NGaXNoIElzc3VlIDM4MjMiKTsKQEAgLTYzLDcgKzYzLDcgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHJ1bigpIHRocm93cyBFeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NpbmdsZVNpZ25PbkNvb2tpZVNlY3VyZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NpbmdsZVNpZ25PbkNvb2tpZVNlY3VyZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDYxM2UyNmQuLjhhOTE5NTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zaW5nbGVTaWduT25Db29raWVTZWN1cmUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2luZ2xlU2lnbk9uQ29va2llU2VjdXJlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2luZ2xlLXNpZ24tb24tY29va2llLXNlY3VyZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NpbmdsZVNpZ25PbkNvb2tpZVNlY3VyZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2luZ2xlU2lnbk9uQ29va2llU2VjdXJlL2J1aWxkLnhtbAppbmRleCA3MGJhZDI2Li4yODAyNDg5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2luZ2xlU2lnbk9uQ29va2llU2VjdXJlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2luZ2xlU2lnbk9uQ29va2llU2VjdXJlL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNjIsMTAgKzYyLDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCkBAIC03MywxNCArNzMsMTQgQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9hcHBzZXJ2LXJ0LmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtOTcsNyArOTcsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVzdG9yZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zaW5nbGVTaWduT25Db29raWVTZWN1cmUvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NpbmdsZVNpZ25PbkNvb2tpZVNlY3VyZS9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggMTYyZTg0My4uYmM2ZGMyNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NpbmdsZVNpZ25PbkNvb2tpZVNlY3VyZS9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NpbmdsZVNpZ25PbkNvb2tpZVNlY3VyZS9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTI1LDEyICsyNSwxMiBAQAogCiAgIDxzZWN1cml0eS1jb25zdHJhaW50PgogICAgIDx3ZWItcmVzb3VyY2UtY29sbGVjdGlvbj4KLQk8d2ViLXJlc291cmNlLW5hbWU+UHJvdGVjdGVkIEFyZWE8L3dlYi1yZXNvdXJjZS1uYW1lPgotCTx1cmwtcGF0dGVybj4vKjwvdXJsLXBhdHRlcm4+Ci0JPGh0dHAtbWV0aG9kPkRFTEVURTwvaHR0cC1tZXRob2Q+Ci0JPGh0dHAtbWV0aG9kPkdFVDwvaHR0cC1tZXRob2Q+Ci0JPGh0dHAtbWV0aG9kPlBPU1Q8L2h0dHAtbWV0aG9kPgotCTxodHRwLW1ldGhvZD5QVVQ8L2h0dHAtbWV0aG9kPgorICAgIDx3ZWItcmVzb3VyY2UtbmFtZT5Qcm90ZWN0ZWQgQXJlYTwvd2ViLXJlc291cmNlLW5hbWU+CisgICAgPHVybC1wYXR0ZXJuPi8qPC91cmwtcGF0dGVybj4KKyAgICA8aHR0cC1tZXRob2Q+REVMRVRFPC9odHRwLW1ldGhvZD4KKyAgICA8aHR0cC1tZXRob2Q+R0VUPC9odHRwLW1ldGhvZD4KKyAgICA8aHR0cC1tZXRob2Q+UE9TVDwvaHR0cC1tZXRob2Q+CisgICAgPGh0dHAtbWV0aG9kPlBVVDwvaHR0cC1tZXRob2Q+CiAgICAgPC93ZWItcmVzb3VyY2UtY29sbGVjdGlvbj4KIAogICAgIDxhdXRoLWNvbnN0cmFpbnQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2luZ2xlU2lnbk9uSHR0cFNlcnZpY2VEeW5hbWljUmVjb25maWcvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NpbmdsZVNpZ25Pbkh0dHBTZXJ2aWNlRHluYW1pY1JlY29uZmlnL1dlYlRlc3QuamF2YQppbmRleCBkYWQyZDhlLi42YTY5NmIyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2luZ2xlU2lnbk9uSHR0cFNlcnZpY2VEeW5hbWljUmVjb25maWcvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zaW5nbGVTaWduT25IdHRwU2VydmljZUR5bmFtaWNSZWNvbmZpZy9XZWJUZXN0LmphdmEKQEAgLTI2LDcgKzI2LDcgQEAKICAqICAgZHluYW1pY2FsbHkgcmVjb25maWd1cmFibGUiKToKICAqCiAgKiBUaGlzIHVuaXQgdGVzdCBzZXRzIHRoZSBzc28tZW5hYmxlZCBwcm9wZXJ0eSBvZiBodHRwLXNlcnZpY2UgdG8gZmFsc2UgYW5kCi0gKiByZXN0YXJ0cyB0aGUgc2VydmVyLiBJdCB0aGVuIHJlbW92ZXMgdGhlIHNzby1lbmFibGVkIHByb3BlcnR5IG9mIAorICogcmVzdGFydHMgdGhlIHNlcnZlci4gSXQgdGhlbiByZW1vdmVzIHRoZSBzc28tZW5hYmxlZCBwcm9wZXJ0eSBvZgogICogdmlydHVhbCBzZXJ2ZXIgInNlcnZlciIsIHNvIHRoYXQgdGhlIHNzby1lbmFibGVkIHByb3BlcnR5IG9mIGh0dHAtc2VydmljZQogICogKHByZXZpb3VzbHkgc2V0IHRvIGZhbHNlKSB3aWxsIHRha2UgZWZmZWN0LiBJdCB0aGVuIHNldHMgdGhhdCBwcm9wZXJ0eSB0bwogICogdHJ1ZSwgYW5kIHRlc3RzIHdoZXRoZXIgU1NPIGhhcyBiZWVuIGVuYWJsZWQgZm9yIHZpcnR1YWwgc2VydmVyICJzZXJ2ZXIiLgpAQCAtNTQsNyArNTQsNyBAQAogICAgICAgICBhZG1pblVzZXIgPSBhcmdzWzNdOwogICAgICAgICBhZG1pblBhc3N3b3JkID0gYXJnc1s0XTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBHbGFzc0Zpc2ggSXNzdWUgMjkxMSIpOwpAQCAtNjcsNyArNjcsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgcnVuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CkBAIC05NCw3ICs5NCw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihnZXQpOwogICAgICAgICBvcy53cml0ZShnZXQuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gc29jay5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKIApAQCAtMTMwLDcgKzEzMCw3IEBACiAgICAgICAgIFN0cmluZyBjb29raWUgPSAiQ29va2llOiAiICsganNlc3Npb25JZCArICJcbiI7CiAgICAgICAgIG9zLndyaXRlKGNvb2tpZS5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogCkBAIC0xNjUsNyArMTY1LDcgQEAKICAgICAgICAgU3RyaW5nIGNvb2tpZSA9ICJDb29raWU6ICIgKyBqc2Vzc2lvbklkICsgIlxuIjsKICAgICAgICAgb3Mud3JpdGUoY29va2llLmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zaW5nbGVTaWduT25IdHRwU2VydmljZUR5bmFtaWNSZWNvbmZpZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NpbmdsZVNpZ25Pbkh0dHBTZXJ2aWNlRHluYW1pY1JlY29uZmlnL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNTI1OWQ3Ni4uYWI3ZjcyMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NpbmdsZVNpZ25Pbkh0dHBTZXJ2aWNlRHluYW1pY1JlY29uZmlnL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NpbmdsZVNpZ25Pbkh0dHBTZXJ2aWNlRHluYW1pY1JlY29uZmlnL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc2luZ2xlLXNpZ24tb24taHR0cC1zZXJ2aWNlLWR5bmFtaWMtcmVjb25maWciLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zaW5nbGVTaWduT25IdHRwU2VydmljZUR5bmFtaWNSZWNvbmZpZy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2luZ2xlU2lnbk9uSHR0cFNlcnZpY2VEeW5hbWljUmVjb25maWcvYnVpbGQueG1sCmluZGV4IGJmNWRmMDAuLjQzMDdhMGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zaW5nbGVTaWduT25IdHRwU2VydmljZUR5bmFtaWNSZWNvbmZpZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NpbmdsZVNpZ25Pbkh0dHBTZXJ2aWNlRHluYW1pY1JlY29uZmlnL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNzAsMjMgKzcwLDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtMTAzLDcgKzEwMyw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0b3JlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NpbmdsZVNpZ25Pbkh0dHBTZXJ2aWNlRHluYW1pY1JlY29uZmlnL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zaW5nbGVTaWduT25IdHRwU2VydmljZUR5bmFtaWNSZWNvbmZpZy9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggMTYyZTg0My4uYmM2ZGMyNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NpbmdsZVNpZ25Pbkh0dHBTZXJ2aWNlRHluYW1pY1JlY29uZmlnL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2luZ2xlU2lnbk9uSHR0cFNlcnZpY2VEeW5hbWljUmVjb25maWcvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yNSwxMiArMjUsMTIgQEAKIAogICA8c2VjdXJpdHktY29uc3RyYWludD4KICAgICA8d2ViLXJlc291cmNlLWNvbGxlY3Rpb24+Ci0JPHdlYi1yZXNvdXJjZS1uYW1lPlByb3RlY3RlZCBBcmVhPC93ZWItcmVzb3VyY2UtbmFtZT4KLQk8dXJsLXBhdHRlcm4+Lyo8L3VybC1wYXR0ZXJuPgotCTxodHRwLW1ldGhvZD5ERUxFVEU8L2h0dHAtbWV0aG9kPgotCTxodHRwLW1ldGhvZD5HRVQ8L2h0dHAtbWV0aG9kPgotCTxodHRwLW1ldGhvZD5QT1NUPC9odHRwLW1ldGhvZD4KLQk8aHR0cC1tZXRob2Q+UFVUPC9odHRwLW1ldGhvZD4KKyAgICA8d2ViLXJlc291cmNlLW5hbWU+UHJvdGVjdGVkIEFyZWE8L3dlYi1yZXNvdXJjZS1uYW1lPgorICAgIDx1cmwtcGF0dGVybj4vKjwvdXJsLXBhdHRlcm4+CisgICAgPGh0dHAtbWV0aG9kPkRFTEVURTwvaHR0cC1tZXRob2Q+CisgICAgPGh0dHAtbWV0aG9kPkdFVDwvaHR0cC1tZXRob2Q+CisgICAgPGh0dHAtbWV0aG9kPlBPU1Q8L2h0dHAtbWV0aG9kPgorICAgIDxodHRwLW1ldGhvZD5QVVQ8L2h0dHAtbWV0aG9kPgogICAgIDwvd2ViLXJlc291cmNlLWNvbGxlY3Rpb24+CiAKICAgICA8YXV0aC1jb25zdHJhaW50PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NpbmdsZWVuZ2luZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2luZ2xlZW5naW5lL1dlYlRlc3QuamF2YQppbmRleCBkNjQ0NDliLi5kM2RmMjgwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2luZ2xlZW5naW5lL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2luZ2xlZW5naW5lL1dlYlRlc3QuamF2YQpAQCAtMzIsNyArMzIsNyBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQ9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLSAgICAKKwogICAgIHByaXZhdGUgU3RyaW5nIGhvc3Q7CiAgICAgcHJpdmF0ZSBTdHJpbmcgcG9ydDsKICAgICBwcml2YXRlIFN0cmluZyBjb250ZXh0Um9vdDsKQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHdlYlRlc3QuZG9UZXN0KHdlYlRlc3QucG9ydCwgMjAwKTsKICAgICAgICAgICAgIHdlYlRlc3QuZG9UZXN0KHdlYlRlc3QuYWRtaW5Qb3J0LCAyMDIpOwotICAgICAgICAgICAgLy8gU2xlZXAgbG9uZyBlbm91Z2ggZm9yIHRoZSBhZG1pbiBjb25zb2xlIHRvIGhhdmUgYmVlbiAKKyAgICAgICAgICAgIC8vIFNsZWVwIGxvbmcgZW5vdWdoIGZvciB0aGUgYWRtaW4gY29uc29sZSB0byBoYXZlIGJlZW4KICAgICAgICAgICAgIC8vIGluc3RhbGxlZCBhbmQgZGVwbG95ZWQKICAgICAgICAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2xlZXAoNjAwMDApOwogICAgICAgICAgICAgd2ViVGVzdC5kb1Rlc3Qod2ViVGVzdC5hZG1pblBvcnQsIDQwNCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2luZ2xlZW5naW5lL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2luZ2xlZW5naW5lL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMjZhNTI4OC4uZjRiYjQ5YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NpbmdsZWVuZ2luZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zaW5nbGVlbmdpbmUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTQgKzE1LDE0IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNpbmdsZS1lbmdpbmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iLyR7YXBwbmFtZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zaW5nbGVlbmdpbmUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NpbmdsZWVuZ2luZS9idWlsZC54bWwKaW5kZXggNTNmOTNhMC4uNWVkODY1YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NpbmdsZWVuZ2luZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NpbmdsZWVuZ2luZS9idWlsZC54bWwKQEAgLTM4LDcgKzM4LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ2LDEwICs0NiwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgIDxqYXZhYwpAQCAtNTcsMTAgKzU3LDEwIEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjgsNyArNjgsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC04MSwxMCArODEsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2luZ2xlZW5naW5lL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zaW5nbGVlbmdpbmUvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDBjZmU4MTIuLjgxYjE0NTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zaW5nbGVlbmdpbmUvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zaW5nbGVlbmdpbmUvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yMyw3ICsyMyw3IEBACiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCIKICAgICAgICAgIHZlcnNpb249IjIuNCI+CiAKLSAgICA8bGlzdGVuZXI+ICAgICAKKyAgICA8bGlzdGVuZXI+CiAgICAgICAgIDxsaXN0ZW5lci1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0PC9saXN0ZW5lci1jbGFzcz4KICAgICA8L2xpc3RlbmVyPgogCkBAIC0zMSw3ICszMSw3IEBACiAgICAgICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldFRlc3Q8L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0PC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAorICAgIDwvc2VydmxldD4KIAogICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NpbmdsZWVuZ2luZS9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2luZ2xlZW5naW5lL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQppbmRleCA4NjBiY2M0Li5lN2E3YzA5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2luZ2xlZW5naW5lL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc2luZ2xlZW5naW5lL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQpAQCAtMzMsNyArMzMsNyBAQAogcHVibGljIGNsYXNzIFNlcnZsZXRUZXN0IGV4dGVuZHMgSHR0cFNlcnZsZXQgaW1wbGVtZW50cyBIdHRwU2Vzc2lvbkxpc3RlbmVyIHsKIAogICAgIHByaXZhdGUgU2VydmxldENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmluaXRdIik7CkBAIC00NCw3ICs0NCw3IEBACiAgICAgICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAgICAgICAgCisgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmRvUG9zdF0iKTsKICAgICB9CiAKQEAgLTUyLDcgKzUyLDcgQEAKICAgICBwdWJsaWMgdm9pZCBzZXNzaW9uQ3JlYXRlZChqYWthcnRhLnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbkV2ZW50IGh0dHBTZXNzaW9uRXZlbnQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5zZXNzaW9uQ3JlYXRlZF0iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXNzaW9uRGVzdHJveWVkKGpha2FydGEuc2VydmxldC5odHRwLkh0dHBTZXNzaW9uRXZlbnQgaHR0cFNlc3Npb25FdmVudCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LnNlc3Npb25EZXN0cm95ZWRdIik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzaUVzY2FwZUNoYXJhY3Rlci9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NpRXNjYXBlQ2hhcmFjdGVyL1dlYlRlc3QuamF2YQppbmRleCBjODlkNDIyLi41MjhlZjc1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NpRXNjYXBlQ2hhcmFjdGVyL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NpRXNjYXBlQ2hhcmFjdGVyL1dlYlRlc3QuamF2YQpAQCAtNDUsNyArNDUsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBTU0kgRXNjYXBlIENoYXJhY3RlciIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTUzLDggKzUzLDggQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwpAQCAtNjQsNyArNjQsNyBAQAogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHRocm93cyBFeGNlcHRpb24gewogCi0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSG9zdD0iICsgaG9zdCArICIsIHBvcnQ9IiArIHBvcnQpOyAgICAgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSG9zdD0iICsgaG9zdCArICIsIHBvcnQ9IiArIHBvcnQpOwogICAgICAgICBTb2NrZXQgc29jayA9IG5ldyBTb2NrZXQoaG9zdCwgbmV3IEludGVnZXIocG9ydCkuaW50VmFsdWUoKSk7CiAgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IHNvY2suZ2V0T3V0cHV0U3RyZWFtKCk7CiAgICAgICAgIFN0cmluZyBnZXQgPSAiR0VUICIgKyBjb250ZXh0Um9vdCArICIvaW5kZXguc2h0bWwgSFRUUC8xLjFcbiI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NpRXNjYXBlQ2hhcmFjdGVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NpRXNjYXBlQ2hhcmFjdGVyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOTk0OWRhYy4uZTcyYWU5NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzaUVzY2FwZUNoYXJhY3Rlci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2lFc2NhcGVDaGFyYWN0ZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zc2ktZXNjYXBlLWNoYXJhY3RlciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzaUVzY2FwZUNoYXJhY3Rlci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NpRXNjYXBlQ2hhcmFjdGVyL2J1aWxkLnhtbAppbmRleCBhZDAyNWQ5Li5kZTFkY2ZhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NpRXNjYXBlQ2hhcmFjdGVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NpRXNjYXBlQ2hhcmFjdGVyL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMjIgKzQ0LDIyIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTcxLDEwICs3MSwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2lIdG1sRW50aXR5L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2lIdG1sRW50aXR5L1dlYlRlc3QuamF2YQppbmRleCA3NDQzMGJhLi5lMDE4YzJlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NpSHRtbEVudGl0eS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzaUh0bWxFbnRpdHkvV2ViVGVzdC5qYXZhCkBAIC00NSw3ICs0NSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIFNTSSBIdG1sIEVudGl0eSIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTUzLDggKzUzLDggQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwpAQCAtNjQsNyArNjQsNyBAQAogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHRocm93cyBFeGNlcHRpb24gewogCi0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSG9zdD0iICsgaG9zdCArICIsIHBvcnQ9IiArIHBvcnQpOyAgICAgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSG9zdD0iICsgaG9zdCArICIsIHBvcnQ9IiArIHBvcnQpOwogICAgICAgICBTb2NrZXQgc29jayA9IG5ldyBTb2NrZXQoaG9zdCwgbmV3IEludGVnZXIocG9ydCkuaW50VmFsdWUoKSk7CiAgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IHNvY2suZ2V0T3V0cHV0U3RyZWFtKCk7CiAgICAgICAgIFN0cmluZyBnZXQgPSAiR0VUICIgKyBjb250ZXh0Um9vdCArICIvaW5kZXguc2h0bWwgSFRUUC8xLjFcbiI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NpSHRtbEVudGl0eS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzaUh0bWxFbnRpdHkvYnVpbGQucHJvcGVydGllcwppbmRleCA2M2U2Mzg5Li5lYTgwNTM1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NpSHRtbEVudGl0eS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2lIdG1sRW50aXR5L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc3NpLWh0bWwtZW50aXR5Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NpSHRtbEVudGl0eS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NpSHRtbEVudGl0eS9idWlsZC54bWwKaW5kZXggYWQwMjVkOS4uZGUxZGNmYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzaUh0bWxFbnRpdHkvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2lIdG1sRW50aXR5L2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMjIgKzQ0LDIyIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTcxLDEwICs3MSwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2wvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbC9XZWJUZXN0LmphdmEKaW5kZXggYmRjOTMzNi4uNTBjYzc2MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbC9XZWJUZXN0LmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKIAogICAgIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdD0KICAgICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50ID0gMDsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgRVhQRUNURURfQ09VTlQgPSAzOwogCkBAIC00MywxMiArNDMsMTIgQEAKICAgICAgICAgICAgIFNTTFNvY2tldEZhY3Rvcnkgc3NmID0gZ2V0U1NMU29ja2V0RmFjdG9yeSh0cnVzdFN0b3JlUGF0aCk7CiAgICAgICAgICAgICBIdHRwc1VSTENvbm5lY3Rpb24gY29ubmVjdGlvbiA9IGRvU1NMSGFuZHNoYWtlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwczovLyIgKyBob3N0ICArICI6IiArIHBvcnQgKyAiLyIsIHNzZik7Ci0gICAgICAgICAgICBjaGVja1N0YXR1cyhjb25uZWN0aW9uKTsgCisgICAgICAgICAgICBjaGVja1N0YXR1cyhjb25uZWN0aW9uKTsKIAogICAgICAgICAgICAgY29ubmVjdGlvbiA9IGRvU1NMSGFuZHNoYWtlKAotICAgICAgICAgICAgICAgICJodHRwczovLyIgKyBob3N0ICArICI6IiArIHBvcnQgKyAiLyIgKyBjb250ZXh0Um9vdCAKKyAgICAgICAgICAgICAgICAiaHR0cHM6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0ICsgIi8iICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICArICIvU2VydmxldFRlc3QiLCBzc2YpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHBhcnNlUmVzcG9uc2UoY29ubmVjdGlvbik7CiAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0KSB7CiAgICAgICAgICAgICB0LnByaW50U3RhY2tUcmFjZSgpOwpAQCAtNTYsNyArNTYsNyBAQAogCiAgICAgICAgIGlmIChjb3VudCAhPSBFWFBFQ1RFRF9DT1VOVCl7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygic3NsIiwgc3RhdC5GQUlMKTsKLSAgICAgICAgfSAgICAgICAgICAgCisgICAgICAgIH0KIAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgid2ViL3NzbCAtLS0+IGV4cGVjdCA0IFBBU1MiKTsKICAgICB9CkBAIC04OSw3ICs4OSw3IEBACiAgICAgICAgICAgICAgICAgICAgIHRocm93cyBFeGNlcHRpb257CiAKICAgICAgICAgaW50IHJlc3BvbnNlQ29kZT0gIGNvbm5lY3Rpb24uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzcG9uc2UgY29kZTogIiArIHJlc3BvbnNlQ29kZSArICIgRXhwZWN0ZWQgY29kZTogMjAwIik7IAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc3BvbnNlIGNvZGU6ICIgKyByZXNwb25zZUNvZGUgKyAiIEV4cGVjdGVkIGNvZGU6IDIwMCIpOwogICAgICAgICBpZiAoY29ubmVjdGlvbi5nZXRSZXNwb25zZUNvZGUoKSAhPSAyMDApewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoInNzbC1yZXNwb25zZUNvZGUiLCBzdGF0LkZBSUwpOwogICAgICAgICB9IGVsc2UgewpAQCAtMTAxLDcgKzEwMSw3IEBACiAgICAgICAgICAgICAgICAgICAgIHRocm93cyBFeGNlcHRpb257CiAKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgaW4gPSBudWxsOwotICAgICAgICAgICAgCisKICAgICAgICAgU3RyaW5nIGxpbmUgPSAiIjsKICAgICAgICAgaW50IGluZGV4OwogICAgICAgICB0cnkgewpAQCAtMTI5LDcgKzEyOSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygic3NsLUZJTFRFUiIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIHRyeSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZDE3N2M2ZC4uOTBlZTRkMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2wvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTQgKzE1LDE0IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNzbCIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc3NsIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iL3dlYi1zc2wiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2wvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbC9idWlsZC54bWwKaW5kZXggM2RhYjYwMS4uNDM3NzI2ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbC9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDEwICs0NCwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgIDxqYXZhYwpAQCAtNTUsMTQgKzU1LDE0IEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uLHByZXBhcmUta2V5c3RvcmUtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc1LDEwICs3NSwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2wvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbC9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggZjk4NjFkZi4uMWY4NGNlZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbC9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbC9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTIyLDM3ICsyMiwzNyBAQAogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCIKICAgICAgICAgIHZlcnNpb249IjIuNCI+Ci0gICAgIAorCiAgICAgPGZpbHRlcj4KICAgICAgICAgPGZpbHRlci1uYW1lPkZpbHRlclRlc3Q8L2ZpbHRlci1uYW1lPgogICAgICAgICA8ZmlsdGVyLWNsYXNzPnRlc3QuRmlsdGVyVGVzdDwvZmlsdGVyLWNsYXNzPgotICAgIDwvZmlsdGVyPiAgICAKLSAgICAgICAgCisgICAgPC9maWx0ZXI+CisKICAgICA8ZmlsdGVyLW1hcHBpbmc+CiAgICAgICAgIDxmaWx0ZXItbmFtZT5GaWx0ZXJUZXN0PC9maWx0ZXItbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi8qPC91cmwtcGF0dGVybj4KICAgICAgICAgPGRpc3BhdGNoZXI+UkVRVUVTVDwvZGlzcGF0Y2hlcj4KICAgICAgICAgPGRpc3BhdGNoZXI+SU5DTFVERTwvZGlzcGF0Y2hlcj4KLSAgICAgICAgPGRpc3BhdGNoZXI+Rk9SV0FSRDwvZGlzcGF0Y2hlcj4gIAotICAgICAgICA8ZGlzcGF0Y2hlcj5FUlJPUjwvZGlzcGF0Y2hlcj4gCisgICAgICAgIDxkaXNwYXRjaGVyPkZPUldBUkQ8L2Rpc3BhdGNoZXI+CisgICAgICAgIDxkaXNwYXRjaGVyPkVSUk9SPC9kaXNwYXRjaGVyPgogICAgIDwvZmlsdGVyLW1hcHBpbmc+Ci0gICAgCisKICAgICA8c2VydmxldD4KICAgICAgICAgPGRpc3BsYXktbmFtZT5TZXJ2bGV0VGVzdDwvZGlzcGxheS1uYW1lPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuU2VydmxldFRlc3Q8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCisgICAgPC9zZXJ2bGV0PgogICAgIDxzZXJ2bGV0PgogICAgICAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXRUZXN0MjwvZGlzcGxheS1uYW1lPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0Mjwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0Mjwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldFRlc3QzPC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3QzPC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuU2VydmxldFRlc3QzPC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAotICAgIAorICAgIDwvc2VydmxldD4KKwogICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L1NlcnZsZXRUZXN0PC91cmwtcGF0dGVybj4KQEAgLTY1LDcgKzY1LDcgQEAKICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDM8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi9TZXJ2bGV0VGVzdDM8L3VybC1wYXR0ZXJuPgogICAgIDwvc2VydmxldC1tYXBwaW5nPgotICAgIAorCiAgICAgPHNlc3Npb24tY29uZmlnPgogICAgICAgICA8c2Vzc2lvbi10aW1lb3V0PjEwPC9zZXNzaW9uLXRpbWVvdXQ+CiAgICAgPC9zZXNzaW9uLWNvbmZpZz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2wvc2VydmxldC9GaWx0ZXJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsL3NlcnZsZXQvRmlsdGVyVGVzdC5qYXZhCmluZGV4IGZjZjM2MjQuLmVlYzk1N2UgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2wvc2VydmxldC9GaWx0ZXJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbC9zZXJ2bGV0L0ZpbHRlclRlc3QuamF2YQpAQCAtMTksMjUgKzE5LDI1IEBACiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lio7CiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuKjsKIHB1YmxpYyBjbGFzcyBGaWx0ZXJUZXN0IGltcGxlbWVudHMgRmlsdGVyewotICAgIAorCiAgICAgcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbRmlsdGVyLmRlc3Ryb3ldIik7Ci0gICAgfSAgICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgdm9pZCBkb0ZpbHRlcihTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UsIEZpbHRlckNoYWluIGZpbHRlckNoYWluKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiwgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltGaWx0ZXIuZG9GaWx0ZXJdIik7Ci0gICAgICAgICAgCisKICAgICAgICAgKChIdHRwU2VydmxldFJlcXVlc3QpcmVxdWVzdCkuZ2V0U2Vzc2lvbigpLnNldEF0dHJpYnV0ZSgiRklMVEVSIiwgIlBBU1MiKTsKICAgICAgICAgZmlsdGVyQ2hhaW4uZG9GaWx0ZXIocmVxdWVzdCwgcmVzcG9uc2UpOwotICAgICAgICAKLSAgICB9ICAgIAotICAgIAotICAgIAorCisgICAgfQorCisKICAgICBwdWJsaWMgdm9pZCBpbml0KGpha2FydGEuc2VydmxldC5GaWx0ZXJDb25maWcgZmlsdGVyQ29uZmlnKSB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltGaWx0ZXIuaW5pdF0iKTsKICAgICAgICAgY29udGV4dCA9IGZpbHRlckNvbmZpZy5nZXRTZXJ2bGV0Q29udGV4dCgpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbC9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQppbmRleCA4ZDExMWFjLi4xNGM4ZTI5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQpAQCAtMjUsMTMgKzI1LDEzIEBACiBwdWJsaWMgY2xhc3MgU2VydmxldFRlc3QgZXh0ZW5kcyBIdHRwU2VydmxldCBpbXBsZW1lbnRzIEh0dHBTZXNzaW9uTGlzdGVuZXIgewogCiAgICAgcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuaW5pdF0iKTsgICAgICAgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmluaXRdIik7CiAgICAgICAgIGNvbnRleHQgPSBjb25maWcuZ2V0U2VydmxldENvbnRleHQoKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5pbml0XSAiICsgY29udGV4dC5nZXRNYWpvclZlcnNpb24oKSk7Ci0gICAgICAgIAorCiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CkBAIC0zOSwyMyArMzksMjMgQEAKICAgICAgICAgZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7ICAgICAgICAKKyAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuZG9Qb3N0XSIpOwotICAgICAgICAKKwogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwotICAgICAgICAKKwogICAgICAgICByZXF1ZXN0LmdldFNlc3Npb24oKS5zZXRBdHRyaWJ1dGUoIkZJTFRFUi1SRVFVRVNUIiwgcmVxdWVzdC5nZXRTZXNzaW9uKCkuZ2V0QXR0cmlidXRlKCJGSUxURVIiKSk7Ci0gICAgICAgIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLnNldEF0dHJpYnV0ZSgiRklMVEVSIiwgIkZBSUwiKTsgICAgICAgIAotICAgICAgICAJCisgICAgICAgIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLnNldEF0dHJpYnV0ZSgiRklMVEVSIiwgIkZBSUwiKTsKKwogICAgICAgICBSZXF1ZXN0RGlzcGF0Y2hlciByZCA9IGNvbnRleHQuZ2V0UmVxdWVzdERpc3BhdGNoZXIoIi9TZXJ2bGV0VGVzdDIiKTsKLSAgICAgICAgcmQuZm9yd2FyZChyZXF1ZXN0LCByZXNwb25zZSk7ICAgICAgIAorICAgICAgICByZC5mb3J3YXJkKHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXNzaW9uQ3JlYXRlZChqYWthcnRhLnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbkV2ZW50IGh0dHBTZXNzaW9uRXZlbnQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5zZXNzaW9uQ3JlYXRlZF0iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXNzaW9uRGVzdHJveWVkKGpha2FydGEuc2VydmxldC5odHRwLkh0dHBTZXNzaW9uRXZlbnQgaHR0cFNlc3Npb25FdmVudCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LnNlc3Npb25EZXN0cm95ZWRdIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQXR0cmlidXRlczogIiArIGh0dHBTZXNzaW9uRXZlbnQuZ2V0U2Vzc2lvbigpLmdldEF0dHJpYnV0ZSgidGVzdCIpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2wvc2VydmxldC9TZXJ2bGV0VGVzdDIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2wvc2VydmxldC9TZXJ2bGV0VGVzdDIuamF2YQppbmRleCBkYjJjYjUwLi4wMDc3NWE2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsL3NlcnZsZXQvU2VydmxldFRlc3QyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbC9zZXJ2bGV0L1NlcnZsZXRUZXN0Mi5qYXZhCkBAIC0yNSwxMCArMjUsMTAgQEAKIHB1YmxpYyBjbGFzcyBTZXJ2bGV0VGVzdDIgZXh0ZW5kcyBIdHRwU2VydmxldCBpbXBsZW1lbnRzIEh0dHBTZXNzaW9uTGlzdGVuZXIgewogCiAgICAgcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQyLmluaXRdIik7ICAgICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldDIuaW5pdF0iKTsKICAgICAgICAgY29udGV4dCA9IGNvbmZpZy5nZXRTZXJ2bGV0Q29udGV4dCgpOwogICAgIH0KIApAQCAtMzcsMjMgKzM3LDIzIEBACiAgICAgICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAgICAgICAgCisgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0Mi5kb1Bvc3RdIik7Ci0gICAgICAKKwogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwotICAgICAgICAKKwogICAgICAgICByZXF1ZXN0LmdldFNlc3Npb24oKS5zZXRBdHRyaWJ1dGUoIkZJTFRFUi1GT1JXQVJEIixyZXF1ZXN0LmdldFNlc3Npb24oKS5nZXRBdHRyaWJ1dGUoIkZJTFRFUiIpKTsKLSAgICAgICAgcmVxdWVzdC5nZXRTZXNzaW9uKCkuc2V0QXR0cmlidXRlKCJGSUxURVIiLCAiRkFJTCIpOyAgICAgICAgCi0gICAgICAgIAorICAgICAgICByZXF1ZXN0LmdldFNlc3Npb24oKS5zZXRBdHRyaWJ1dGUoIkZJTFRFUiIsICJGQUlMIik7CisKICAgICAgICAgUmVxdWVzdERpc3BhdGNoZXIgcmQgPSByZXF1ZXN0LmdldFJlcXVlc3REaXNwYXRjaGVyKCIvU2VydmxldFRlc3QzIik7Ci0gICAgICAgIHJkLmluY2x1ZGUocmVxdWVzdCwgcmVzcG9uc2UpOyAgICAgCisgICAgICAgIHJkLmluY2x1ZGUocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KLSAKKwogICAgIHB1YmxpYyB2b2lkIHNlc3Npb25DcmVhdGVkKGpha2FydGEuc2VydmxldC5odHRwLkh0dHBTZXNzaW9uRXZlbnQgaHR0cFNlc3Npb25FdmVudCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LnNlc3Npb25DcmVhdGVkXSIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlc3Npb25EZXN0cm95ZWQoamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb25FdmVudCBodHRwU2Vzc2lvbkV2ZW50KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuc2Vzc2lvbkRlc3Ryb3llZF0iKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBdHRyaWJ1dGVzOiAiICsgaHR0cFNlc3Npb25FdmVudC5nZXRTZXNzaW9uKCkuZ2V0QXR0cmlidXRlKCJ0ZXN0IikpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbC9zZXJ2bGV0L1NlcnZsZXRUZXN0My5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbC9zZXJ2bGV0L1NlcnZsZXRUZXN0My5qYXZhCmluZGV4IGM1YTM4MWEuLjFhOWU2ODcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2wvc2VydmxldC9TZXJ2bGV0VGVzdDMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsL3NlcnZsZXQvU2VydmxldFRlc3QzLmphdmEKQEAgLTI1LDExICsyNSwxMSBAQAogcHVibGljIGNsYXNzIFNlcnZsZXRUZXN0MyBleHRlbmRzIEh0dHBTZXJ2bGV0ewogCiAgICAgcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQzLmluaXRdIik7ICAgICAgICAKLSAgICAgICAgY29udGV4dCA9IGNvbmZpZy5nZXRTZXJ2bGV0Q29udGV4dCgpOyAgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQzLmluaXRdIik7CisgICAgICAgIGNvbnRleHQgPSBjb25maWcuZ2V0U2VydmxldENvbnRleHQoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKQEAgLTM3LDEyICszNywxMiBAQAogICAgICAgICBkb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgICAgICAgIAorICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldDMuZG9Qb3N0XSIpOwotICAgICAgICAKKwogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwotICAgICAgICAKKwogICAgICAgICBvdXQucHJpbnRsbigiRklMVEVSLVJFUVVFU1Q6IiArIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLmdldEF0dHJpYnV0ZSgiRklMVEVSLVJFUVVFU1QiKSk7CiAgICAgICAgIG91dC5wcmludGxuKCJGSUxURVItRk9SV0FSRDoiICsgcmVxdWVzdC5nZXRTZXNzaW9uKCkuZ2V0QXR0cmlidXRlKCJGSUxURVItRk9SV0FSRCIpKTsKICAgICAgICAgb3V0LnByaW50bG4oIkZJTFRFUi1JTkNMVURFOiIgKyByZXF1ZXN0LmdldFNlc3Npb24oKS5nZXRBdHRyaWJ1dGUoIkZJTFRFUiIpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xDbGllbnRBdXRoVW5wcm90ZWN0ZWRSZXNvdXJjZUdldENsaWVudENlcnQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbENsaWVudEF1dGhVbnByb3RlY3RlZFJlc291cmNlR2V0Q2xpZW50Q2VydC9XZWJUZXN0LmphdmEKaW5kZXggZmM0MzNhNi4uNWI2NzM5ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbENsaWVudEF1dGhVbnByb3RlY3RlZFJlc291cmNlR2V0Q2xpZW50Q2VydC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbENsaWVudEF1dGhVbnByb3RlY3RlZFJlc291cmNlR2V0Q2xpZW50Q2VydC9XZWJUZXN0LmphdmEKQEAgLTMzLDcgKzMzLDcgQEAKIHB1YmxpYyBjbGFzcyBXZWJUZXN0IHsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX05BTUUKLSAgICAgICAgPSAic3NsLWNsaWVudC1hdXRoLXVucHJvdGVjdGVkLXJlc291cmNlLWdldC1jbGllbnQtY2VydCI7ICAgIAorICAgICAgICA9ICJzc2wtY2xpZW50LWF1dGgtdW5wcm90ZWN0ZWQtcmVzb3VyY2UtZ2V0LWNsaWVudC1jZXJ0IjsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFWFBFQ1RFRF9SRVNQT05TRQogICAgICAgICA9ICJbTGphdmEuc2VjdXJpdHkuY2VydC5YNTA5Q2VydGlmaWNhdGU7IjsKQEAgLTQ5LDcgKzQ5LDcgQEAKICAgICAgICAgU3RyaW5nIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICAgICAgU3RyaW5nIGtleVN0b3JlUGF0aCA9IGFyZ3NbM107CiAgICAgICAgIFN0cmluZyB0cnVzdFN0b3JlUGF0aCA9IGFyZ3NbNF07Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBTU0xTb2NrZXRGYWN0b3J5IHNzZiA9IGdldFNTTFNvY2tldEZhY3Rvcnkoa2V5U3RvcmVQYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydXN0U3RvcmVQYXRoKTsKQEAgLTU3LDkgKzU3LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHBvcnQgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIi9UZXN0U2VydmxldCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NmKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBwYXJzZVJlc3BvbnNlKGNvbm5lY3Rpb24pOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIHQucHJpbnRTdGFja1RyYWNlKCk7CkBAIC03Niw3ICs3Niw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbiA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5nZXRJbnB1dFN0cmVhbSgpKSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOwogICAgICAgICAgICAgd2hpbGUgKChsaW5lID0gaW4ucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGlmIChFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKQEAgLTEwNSw3ICsxMDUsNyBAQAogCiAgICAgICAgIFNTTENvbnRleHQgY3R4ID0gU1NMQ29udGV4dC5nZXRJbnN0YW5jZSgiVExTIik7CiAKLSAgICAgICAgLy8gS2V5c3RvcmUgCisgICAgICAgIC8vIEtleXN0b3JlCiAgICAgICAgIEtleVN0b3JlIGtzID0gS2V5U3RvcmUuZ2V0SW5zdGFuY2UoIkpLUyIpOwogICAgICAgICBjaGFyW10gcGFzc3BocmFzZSA9ICJjaGFuZ2VpdCIudG9DaGFyQXJyYXkoKTsKICAgICAgICAga3MubG9hZChuZXcgRmlsZUlucHV0U3RyZWFtKGtleVN0b3JlUGF0aCksIHBhc3NwaHJhc2UpOwpAQCAtMTIxLDcgKzEyMSw3IEBACiAgICAgICAgIHRtZi5pbml0KHRydXN0U3RvcmUpOwogCiAgICAgICAgIGN0eC5pbml0KGttZi5nZXRLZXlNYW5hZ2VycygpLHRtZi5nZXRUcnVzdE1hbmFnZXJzKCksIG51bGwpOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gY3R4LmdldFNvY2tldEZhY3RvcnkoKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xDbGllbnRBdXRoVW5wcm90ZWN0ZWRSZXNvdXJjZUdldENsaWVudENlcnQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xDbGllbnRBdXRoVW5wcm90ZWN0ZWRSZXNvdXJjZUdldENsaWVudENlcnQvYnVpbGQucHJvcGVydGllcwppbmRleCBiMTc5Y2NlLi4xNDY4MWFlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsQ2xpZW50QXV0aFVucHJvdGVjdGVkUmVzb3VyY2VHZXRDbGllbnRDZXJ0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbENsaWVudEF1dGhVbnByb3RlY3RlZFJlc291cmNlR2V0Q2xpZW50Q2VydC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXNzbC1jbGllbnQtYXV0aC11bnByb3RlY3RlZC1yZXNvdXJjZS1nZXQtY2xpZW50LWNlcnQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xDbGllbnRBdXRoVW5wcm90ZWN0ZWRSZXNvdXJjZUdldENsaWVudENlcnQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbENsaWVudEF1dGhVbnByb3RlY3RlZFJlc291cmNlR2V0Q2xpZW50Q2VydC9idWlsZC54bWwKaW5kZXggZmE1YmVjYy4uMDkyOWJiZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbENsaWVudEF1dGhVbnByb3RlY3RlZFJlc291cmNlR2V0Q2xpZW50Q2VydC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbENsaWVudEF1dGhVbnByb3RlY3RlZFJlc291cmNlR2V0Q2xpZW50Q2VydC9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDE4ICs0NCwxOCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIgLz4KQEAgLTg1LDEwICs4NSwxMCBAQAogICAgICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RvcmUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsQ2xpZW50QXV0aFVucHJvdGVjdGVkUmVzb3VyY2VHZXRDbGllbnRDZXJ0L2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xDbGllbnRBdXRoVW5wcm90ZWN0ZWRSZXNvdXJjZUdldENsaWVudENlcnQvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IGMyYTc2OGUuLmY1NWNiOWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xDbGllbnRBdXRoVW5wcm90ZWN0ZWRSZXNvdXJjZUdldENsaWVudENlcnQvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xDbGllbnRBdXRoVW5wcm90ZWN0ZWRSZXNvdXJjZUdldENsaWVudENlcnQvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yMiwxMyArMjIsMTMgQEAKICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiCiAgICAgICAgICB2ZXJzaW9uPSIyLjQiPgotICAgICAKKwogICAgIDxzZXJ2bGV0PgogICAgICAgPGRpc3BsYXktbmFtZT5UZXN0U2VydmxldDwvZGlzcGxheS1uYW1lPgogICAgICAgPHNlcnZsZXQtbmFtZT5UZXN0U2VydmxldDwvc2VydmxldC1uYW1lPgogICAgICAgPHNlcnZsZXQtY2xhc3M+VGVzdFNlcnZsZXQ8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCi0gICAgCisgICAgPC9zZXJ2bGV0PgorCiAgICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgIDxzZXJ2bGV0LW5hbWU+VGVzdFNlcnZsZXQ8L3NlcnZsZXQtbmFtZT4KICAgICAgIDx1cmwtcGF0dGVybj4vVGVzdFNlcnZsZXQ8L3VybC1wYXR0ZXJuPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbENsaWVudEF1dGhVbnByb3RlY3RlZFJlc291cmNlR2V0Q2xpZW50Q2VydC9zZXJ2bGV0L1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsQ2xpZW50QXV0aFVucHJvdGVjdGVkUmVzb3VyY2VHZXRDbGllbnRDZXJ0L3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQppbmRleCA1NTg4NDY4Li44YTNjYjExIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsQ2xpZW50QXV0aFVucHJvdGVjdGVkUmVzb3VyY2VHZXRDbGllbnRDZXJ0L3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsQ2xpZW50QXV0aFVucHJvdGVjdGVkUmVzb3VyY2VHZXRDbGllbnRDZXJ0L3NlcnZsZXQvVGVzdFNlcnZsZXQuamF2YQpAQCAtMjksNyArMjksNyBAQAogICAgICAgICBTdHJpbmcgY2xOYW1lID0gbnVsbDsKICAgICAgICAgaWYgKGNlcnQgIT0gbnVsbCkgewogICAgICAgICAgICAgY2xOYW1lID0gY2VydC5nZXRDbGFzcygpLmdldE5hbWUoKTsKLQl9CisgICAgfQogICAgICAgICByZXMuZ2V0V3JpdGVyKCkucHJpbnQoY2xOYW1lKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsQ29va2llL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xDb29raWUvV2ViVGVzdC5qYXZhCmluZGV4IDg1MjAyYTMuLjY4MDIxODggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xDb29raWUvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xDb29raWUvV2ViVGVzdC5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiAKICAgICBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQ9CiAgICAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGludCBjb3VudCA9IDA7CiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IEVYUEVDVEVEX0NPVU5UID0gMzsKICAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGZpcnN0Q29ubmVjdGlvbiA9IHRydWU7CkBAIC01MSwxOSArNTEsMTkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIvU2VydmxldFRlc3Q7anNlc3Npb25pZD0wMUE5NjBDMjI0ODBDRTlGNDQ1Q0RFNDhERTMzM0YzMSIsIHNzZik7CiAKICAgICAgICAgICAgIHBhcnNlUmVzcG9uc2UoY29ubmVjdGlvbik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgZmlyc3RDb25uZWN0aW9uID0gZmFsc2U7CiAgICAgICAgICAgICBjb25uZWN0aW9uID0gZG9TU0xIYW5kc2hha2UoCi0gICAgICAgICAgICAgICAgImh0dHBzOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArICIvIiArIGNvbnRleHRSb290IAorICAgICAgICAgICAgICAgICJodHRwczovLyIgKyBob3N0ICArICI6IiArIHBvcnQgKyAiLyIgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgICAgICsgIi9TZXJ2bGV0VGVzdDtqc2Vzc2lvbmlkPSIgKyBzZXNzaW9uRmFsc2VJZCwgc3NmKTsKICAgICAgICAgICAgIHBhcnNlUmVzcG9uc2UoY29ubmVjdGlvbik7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdCkgewogICAgICAgICAgICAgdC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIGlmIChjb3VudCAhPSBFWFBFQ1RFRF9DT1VOVCl7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndlYi1zc2xDb29raWUiLCBzdGF0LkZBSUwpOwotICAgICAgICAgICAgfSAgICAgICAgICAgCisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogCkBAIC0xMDEsOCArMTAxLDggQEAKICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbnsKIAogICAgICAgICBCdWZmZXJlZFJlYWRlciBpbiA9IG51bGw7Ci0gICAgICAgICAgICAKLSAgICAgICAgU3RyaW5nIGxpbmU9ICIiOyAKKworICAgICAgICBTdHJpbmcgbGluZT0gIiI7CiAgICAgICAgIGludCBpbmRleCA9IDA7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbiA9IG5ldyBCdWZmZXJlZFJlYWRlcigKQEAgLTExNiw3ICsxMTYsNyBAQAogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNvbnRleHQ6ICIgKyBjb250ZXh0ICsgIiBzdGF0dXM6ICIgKyBzdGF0dXMpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RDb25uZWN0aW9uKXsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY29udGV4dC5lcXVhbHNJZ25vcmVDYXNlKCJnZXRSZXF1ZXN0U2Vzc2lvbklkIikgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZFNlc3Npb25JZCA9IHN0YXR1czsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdGVkU2Vzc2lvbklkID0gc3RhdHVzOwogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIGNvbnRleHQuZXF1YWxzSWdub3JlQ2FzZSgiZ2V0U2Vzc2lvbihmYWxzZSkuZ2V0SWQiKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb25GYWxzZUlkID0gc3RhdHVzOwogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggY29udGV4dC5lcXVhbHNJZ25vcmVDYXNlKCJnZXRSZXF1ZXN0VVJJIikpCkBAIC0xNDgsNyArMTQ4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGxpbmVOdW0rKzsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xDb29raWUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xDb29raWUvYnVpbGQucHJvcGVydGllcwppbmRleCBjN2E2ZGU1Li41OGI3ZTMxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsQ29va2llL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbENvb2tpZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNCArMTUsMTQgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc3NsQ29va2llIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zc2xDb29raWUiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvd2ViLXNzbENvb2tpZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbENvb2tpZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsQ29va2llL2J1aWxkLnhtbAppbmRleCA0OWMyZTJlLi40Mzc3MjZmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsQ29va2llL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsQ29va2llL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMTAgKzQ0LDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCkBAIC01NSwxNCArNTUsMTQgQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24scHJlcGFyZS1rZXlzdG9yZS1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzUsMTAgKzc1LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbENvb2tpZS9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsQ29va2llL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCAzYmNiY2NkLi44ZWQ5MzRmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsQ29va2llL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsQ29va2llL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjIsMTMgKzIyLDEzIEBACiAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIgogICAgICAgICAgdmVyc2lvbj0iMi40Ij4KLSAgICAgCisKICAgICA8c2VydmxldD4KICAgICAgICAgPGRpc3BsYXktbmFtZT5TZXJ2bGV0VGVzdDwvZGlzcGxheS1uYW1lPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuU2VydmxldFRlc3Q8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCi0gICAgCisgICAgPC9zZXJ2bGV0PgorCiAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vU2VydmxldFRlc3Q8L3VybC1wYXR0ZXJuPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbENvb2tpZS9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsQ29va2llL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQppbmRleCBiZGY1MTM4Li45MmY0NDllIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsQ29va2llL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsQ29va2llL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQpAQCAtMjQsMTEgKzI0LDExIEBACiAKIHB1YmxpYyBjbGFzcyBTZXJ2bGV0VGVzdCBleHRlbmRzIEh0dHBTZXJ2bGV0IGltcGxlbWVudHMgSHR0cFNlc3Npb25MaXN0ZW5lciB7CiAKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmluaXRdIik7ICAgICAgICAKLSAgICAgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuaW5pdF0iKTsKKwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewpAQCAtMzksOSArMzksOSBAQAogICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gc2Vzc2lvbkNyZWF0ZWQgPSBmYWxzZTsKIAogCi0gICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAgICAgICAgCisgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmRvUG9zdF0iKTsKLSAgICAgICAgCisKICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKIApAQCAtNDksNyArNDksNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGUgc2Vzc2lvbjogIiArIHJlcXVlc3QuZ2V0U2Vzc2lvbih0cnVlKS5nZXRJZCgpKTsKICAgICAgICAgICAgIHNlc3Npb25DcmVhdGVkID0gdHJ1ZTsKICAgICAgICAgfQotICAgICAgICAKKwogCiAgICAgICAgIG91dC5wcmludGxuKCJnZXRSZXF1ZXN0U2Vzc2lvbklkOjoiICsgcmVxdWVzdC5nZXRSZXF1ZXN0ZWRTZXNzaW9uSWQoKSk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZ2V0UmVxdWVzdFNlc3Npb25JZDo6IiArIHJlcXVlc3QuZ2V0UmVxdWVzdGVkU2Vzc2lvbklkKCkpOwpAQCAtNTksMTMgKzU5LDEzIEBACiAgICAgICAgIH0KICAgICAgICAgb3V0LnByaW50bG4oImdldFJlcXVlc3RVUkk6OiIgKyByZXF1ZXN0LmdldFJlcXVlc3RVUkkoKSk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZ2V0UmVxdWVzdFVSSTo6IiArIHJlcXVlc3QuZ2V0UmVxdWVzdFVSSSgpKTsKLSAgICAgICAgCisKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXNzaW9uQ3JlYXRlZChqYWthcnRhLnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbkV2ZW50IGh0dHBTZXNzaW9uRXZlbnQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5zZXNzaW9uQ3JlYXRlZF0iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXNzaW9uRGVzdHJveWVkKGpha2FydGEuc2VydmxldC5odHRwLkh0dHBTZXNzaW9uRXZlbnQgaHR0cFNlc3Npb25FdmVudCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LnNlc3Npb25EZXN0cm95ZWRdIik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbE11bHRpU2VsZWN0b3IvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbE11bHRpU2VsZWN0b3IvV2ViVGVzdC5qYXZhCmluZGV4IDA5ZWNiOTYuLmQ0MWFhZjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xNdWx0aVNlbGVjdG9yL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsTXVsdGlTZWxlY3Rvci9XZWJUZXN0LmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKIAogICAgIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdD0KICAgICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50ID0gMDsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgRVhQRUNURURfQ09VTlQgPSAzOwogCkBAIC00MywxMiArNDMsMTIgQEAKICAgICAgICAgICAgIFNTTFNvY2tldEZhY3Rvcnkgc3NmID0gZ2V0U1NMU29ja2V0RmFjdG9yeSh0cnVzdFN0b3JlUGF0aCk7CiAgICAgICAgICAgICBIdHRwc1VSTENvbm5lY3Rpb24gY29ubmVjdGlvbiA9IGRvU1NMSGFuZHNoYWtlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwczovLyIgKyBob3N0ICArICI6IiArIHBvcnQgKyAiLyIsIHNzZik7Ci0gICAgICAgICAgICBjaGVja1N0YXR1cyhjb25uZWN0aW9uKTsgCisgICAgICAgICAgICBjaGVja1N0YXR1cyhjb25uZWN0aW9uKTsKIAogICAgICAgICAgICAgY29ubmVjdGlvbiA9IGRvU1NMSGFuZHNoYWtlKAotICAgICAgICAgICAgICAgICJodHRwczovLyIgKyBob3N0ICArICI6IiArIHBvcnQgKyAiLyIgKyBjb250ZXh0Um9vdCAKKyAgICAgICAgICAgICAgICAiaHR0cHM6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0ICsgIi8iICsgY29udGV4dFJvb3QKICAgICAgICAgICAgICAgICArICIvU2VydmxldFRlc3QiLCBzc2YpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHBhcnNlUmVzcG9uc2UoY29ubmVjdGlvbik7CiAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0KSB7CiAgICAgICAgICAgICB0LnByaW50U3RhY2tUcmFjZSgpOwpAQCAtNTYsNyArNTYsNyBAQAogCiAgICAgICAgIGlmIChjb3VudCAhPSBFWFBFQ1RFRF9DT1VOVCl7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibXVsdGlTZWxlY3Rvci1zc2wiLCBzdGF0LkZBSUwpOwotICAgICAgICB9ICAgICAgICAgICAKKyAgICAgICAgfQogCiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJzc2xNdWx0aVNlbGVjdG9yIik7CiAgICAgfQpAQCAtODksNyArODksNyBAQAogICAgICAgICAgICAgICAgICAgICB0aHJvd3MgRXhjZXB0aW9uewogCiAgICAgICAgIGludCByZXNwb25zZUNvZGU9ICBjb25uZWN0aW9uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc3BvbnNlIGNvZGU6ICIgKyByZXNwb25zZUNvZGUgKyAiIEV4cGVjdGVkIGNvZGU6IDIwMCIpOyAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXNwb25zZSBjb2RlOiAiICsgcmVzcG9uc2VDb2RlICsgIiBFeHBlY3RlZCBjb2RlOiAyMDAiKTsKICAgICAgICAgaWYgKGNvbm5lY3Rpb24uZ2V0UmVzcG9uc2VDb2RlKCkgIT0gMjAwKXsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJtdWx0aVNlbGVjdG9yLXJlc3BvbnNlQ29kZSIsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0xMDIsNyArMTAyLDcgQEAKIAogICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGluID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKAogICAgICAgICAgICAgICAgIG5ldyBJbnB1dFN0cmVhbVJlYWRlcihjb25uZWN0aW9uLmdldElucHV0U3RyZWFtKCkpKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIFN0cmluZyBsaW5lID0gIiI7CiAgICAgICAgIGludCBpbmRleDsKICAgICAgICAgd2hpbGUgKChsaW5lID0gaW4ucmVhZExpbmUoKSkgIT0gbnVsbCkgewpAQCAtMTExLDE1ICsxMTEsMTUgQEAKICAgICAgICAgICAgIGlmIChpbmRleCAhPSAtMSkgewogICAgICAgICAgICAgICAgIGluZGV4ID0gbGluZS5pbmRleE9mKCI6Iik7CiAgICAgICAgICAgICAgICAgU3RyaW5nIHN0YXR1cyA9IGxpbmUuc3Vic3RyaW5nKGluZGV4KzEpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGlmIChzdGF0dXMuZXF1YWxzSWdub3JlQ2FzZSgiUEFTUyIpKXsKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIm11bHRpU2VsZWN0b3ItIiArIGxpbmUuc3Vic3RyaW5nKDAsaW5kZXgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LlBBU1MpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJtdWx0aVNlbGVjdG9yLWZpbHRlciIsIHN0YXQuRkFJTCk7ICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIm11bHRpU2VsZWN0b3ItZmlsdGVyIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgIH0gCisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBpbi5jbG9zZSgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbE11bHRpU2VsZWN0b3IvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xNdWx0aVNlbGVjdG9yL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNGFjYzRkMy4uMGNjMmUwYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbE11bHRpU2VsZWN0b3IvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsTXVsdGlTZWxlY3Rvci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNCArMTUsMTQgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc3NsTXVsdGlTZWxlY3RvciIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tc3NsTXVsdGlTZWxlY3RvciIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii9zc2xNdWx0aVNlbGVjdG9yIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsTXVsdGlTZWxlY3Rvci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsTXVsdGlTZWxlY3Rvci9idWlsZC54bWwKaW5kZXggYzcwY2FmYy4uZGZiZDY1NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbE11bHRpU2VsZWN0b3IvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xNdWx0aVNlbGVjdG9yL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMTAgKzQ0LDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCkBAIC01NSw3ICs1NSw3IEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgpAQCAtNzIsNyArNzIsNyBAQAogICAgICAgICAgICAgICAgICAgIHZhbHVlPSJjb25maWdzLmNvbmZpZy5zZXJ2ZXItY29uZmlnLm5ldHdvcmstY29uZmlnLnRyYW5zcG9ydHMudHJhbnNwb3J0LnRjcC5hY2NlcHRvci10aHJlYWRzPSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTgyLDcgKzgyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24scHJlcGFyZS1rZXlzdG9yZS1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtOTUsMTAgKzk1LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbE11bHRpU2VsZWN0b3IvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbE11bHRpU2VsZWN0b3IvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IGY5ODYxZGYuLjFmODRjZWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xNdWx0aVNlbGVjdG9yL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsTXVsdGlTZWxlY3Rvci9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTIyLDM3ICsyMiwzNyBAQAogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCIKICAgICAgICAgIHZlcnNpb249IjIuNCI+Ci0gICAgIAorCiAgICAgPGZpbHRlcj4KICAgICAgICAgPGZpbHRlci1uYW1lPkZpbHRlclRlc3Q8L2ZpbHRlci1uYW1lPgogICAgICAgICA8ZmlsdGVyLWNsYXNzPnRlc3QuRmlsdGVyVGVzdDwvZmlsdGVyLWNsYXNzPgotICAgIDwvZmlsdGVyPiAgICAKLSAgICAgICAgCisgICAgPC9maWx0ZXI+CisKICAgICA8ZmlsdGVyLW1hcHBpbmc+CiAgICAgICAgIDxmaWx0ZXItbmFtZT5GaWx0ZXJUZXN0PC9maWx0ZXItbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi8qPC91cmwtcGF0dGVybj4KICAgICAgICAgPGRpc3BhdGNoZXI+UkVRVUVTVDwvZGlzcGF0Y2hlcj4KICAgICAgICAgPGRpc3BhdGNoZXI+SU5DTFVERTwvZGlzcGF0Y2hlcj4KLSAgICAgICAgPGRpc3BhdGNoZXI+Rk9SV0FSRDwvZGlzcGF0Y2hlcj4gIAotICAgICAgICA8ZGlzcGF0Y2hlcj5FUlJPUjwvZGlzcGF0Y2hlcj4gCisgICAgICAgIDxkaXNwYXRjaGVyPkZPUldBUkQ8L2Rpc3BhdGNoZXI+CisgICAgICAgIDxkaXNwYXRjaGVyPkVSUk9SPC9kaXNwYXRjaGVyPgogICAgIDwvZmlsdGVyLW1hcHBpbmc+Ci0gICAgCisKICAgICA8c2VydmxldD4KICAgICAgICAgPGRpc3BsYXktbmFtZT5TZXJ2bGV0VGVzdDwvZGlzcGxheS1uYW1lPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuU2VydmxldFRlc3Q8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCisgICAgPC9zZXJ2bGV0PgogICAgIDxzZXJ2bGV0PgogICAgICAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXRUZXN0MjwvZGlzcGxheS1uYW1lPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0Mjwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0Mjwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldFRlc3QzPC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3QzPC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuU2VydmxldFRlc3QzPC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAotICAgIAorICAgIDwvc2VydmxldD4KKwogICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L1NlcnZsZXRUZXN0PC91cmwtcGF0dGVybj4KQEAgLTY1LDcgKzY1LDcgQEAKICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDM8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi9TZXJ2bGV0VGVzdDM8L3VybC1wYXR0ZXJuPgogICAgIDwvc2VydmxldC1tYXBwaW5nPgotICAgIAorCiAgICAgPHNlc3Npb24tY29uZmlnPgogICAgICAgICA8c2Vzc2lvbi10aW1lb3V0PjEwPC9zZXNzaW9uLXRpbWVvdXQ+CiAgICAgPC9zZXNzaW9uLWNvbmZpZz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xNdWx0aVNlbGVjdG9yL3NlcnZsZXQvRmlsdGVyVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbE11bHRpU2VsZWN0b3Ivc2VydmxldC9GaWx0ZXJUZXN0LmphdmEKaW5kZXggZmNmMzYyNC4uZWVjOTU3ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbE11bHRpU2VsZWN0b3Ivc2VydmxldC9GaWx0ZXJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbE11bHRpU2VsZWN0b3Ivc2VydmxldC9GaWx0ZXJUZXN0LmphdmEKQEAgLTE5LDI1ICsxOSwyNSBAQAogaW1wb3J0IGpha2FydGEuc2VydmxldC4qOwogaW1wb3J0IGpha2FydGEuc2VydmxldC5odHRwLio7CiBwdWJsaWMgY2xhc3MgRmlsdGVyVGVzdCBpbXBsZW1lbnRzIEZpbHRlcnsKLSAgICAKKwogICAgIHByaXZhdGUgU2VydmxldENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW0ZpbHRlci5kZXN0cm95XSIpOwotICAgIH0gICAgCi0gICAgCisgICAgfQorCiAgICAgcHVibGljIHZvaWQgZG9GaWx0ZXIoU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlLCBGaWx0ZXJDaGFpbiBmaWx0ZXJDaGFpbikgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24sIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbRmlsdGVyLmRvRmlsdGVyXSIpOwotICAgICAgICAgIAorCiAgICAgICAgICgoSHR0cFNlcnZsZXRSZXF1ZXN0KXJlcXVlc3QpLmdldFNlc3Npb24oKS5zZXRBdHRyaWJ1dGUoIkZJTFRFUiIsICJQQVNTIik7CiAgICAgICAgIGZpbHRlckNoYWluLmRvRmlsdGVyKHJlcXVlc3QsIHJlc3BvbnNlKTsKLSAgICAgICAgCi0gICAgfSAgICAKLSAgICAKLSAgICAKKworICAgIH0KKworCiAgICAgcHVibGljIHZvaWQgaW5pdChqYWthcnRhLnNlcnZsZXQuRmlsdGVyQ29uZmlnIGZpbHRlckNvbmZpZykgdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbRmlsdGVyLmluaXRdIik7CiAgICAgICAgIGNvbnRleHQgPSBmaWx0ZXJDb25maWcuZ2V0U2VydmxldENvbnRleHQoKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xNdWx0aVNlbGVjdG9yL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xNdWx0aVNlbGVjdG9yL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQppbmRleCA4ZDExMWFjLi4xNGM4ZTI5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsTXVsdGlTZWxlY3Rvci9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbE11bHRpU2VsZWN0b3Ivc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCkBAIC0yNSwxMyArMjUsMTMgQEAKIHB1YmxpYyBjbGFzcyBTZXJ2bGV0VGVzdCBleHRlbmRzIEh0dHBTZXJ2bGV0IGltcGxlbWVudHMgSHR0cFNlc3Npb25MaXN0ZW5lciB7CiAKICAgICBwcml2YXRlIFNlcnZsZXRDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5pbml0XSIpOyAgICAgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuaW5pdF0iKTsKICAgICAgICAgY29udGV4dCA9IGNvbmZpZy5nZXRTZXJ2bGV0Q29udGV4dCgpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmluaXRdICIgKyBjb250ZXh0LmdldE1ham9yVmVyc2lvbigpKTsKLSAgICAgICAgCisKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKQEAgLTM5LDIzICszOSwyMyBAQAogICAgICAgICBkb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgICAgICAgIAorICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5kb1Bvc3RdIik7Ci0gICAgICAgIAorCiAgICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7Ci0gICAgICAgIAorCiAgICAgICAgIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLnNldEF0dHJpYnV0ZSgiRklMVEVSLVJFUVVFU1QiLCByZXF1ZXN0LmdldFNlc3Npb24oKS5nZXRBdHRyaWJ1dGUoIkZJTFRFUiIpKTsKLSAgICAgICAgcmVxdWVzdC5nZXRTZXNzaW9uKCkuc2V0QXR0cmlidXRlKCJGSUxURVIiLCAiRkFJTCIpOyAgICAgICAgCi0gICAgICAgIAkKKyAgICAgICAgcmVxdWVzdC5nZXRTZXNzaW9uKCkuc2V0QXR0cmlidXRlKCJGSUxURVIiLCAiRkFJTCIpOworCiAgICAgICAgIFJlcXVlc3REaXNwYXRjaGVyIHJkID0gY29udGV4dC5nZXRSZXF1ZXN0RGlzcGF0Y2hlcigiL1NlcnZsZXRUZXN0MiIpOwotICAgICAgICByZC5mb3J3YXJkKHJlcXVlc3QsIHJlc3BvbnNlKTsgICAgICAgCisgICAgICAgIHJkLmZvcndhcmQocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNlc3Npb25DcmVhdGVkKGpha2FydGEuc2VydmxldC5odHRwLkh0dHBTZXNzaW9uRXZlbnQgaHR0cFNlc3Npb25FdmVudCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LnNlc3Npb25DcmVhdGVkXSIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlc3Npb25EZXN0cm95ZWQoamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb25FdmVudCBodHRwU2Vzc2lvbkV2ZW50KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuc2Vzc2lvbkRlc3Ryb3llZF0iKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBdHRyaWJ1dGVzOiAiICsgaHR0cFNlc3Npb25FdmVudC5nZXRTZXNzaW9uKCkuZ2V0QXR0cmlidXRlKCJ0ZXN0IikpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbE11bHRpU2VsZWN0b3Ivc2VydmxldC9TZXJ2bGV0VGVzdDIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xNdWx0aVNlbGVjdG9yL3NlcnZsZXQvU2VydmxldFRlc3QyLmphdmEKaW5kZXggZGIyY2I1MC4uMDA3NzVhNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbE11bHRpU2VsZWN0b3Ivc2VydmxldC9TZXJ2bGV0VGVzdDIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsTXVsdGlTZWxlY3Rvci9zZXJ2bGV0L1NlcnZsZXRUZXN0Mi5qYXZhCkBAIC0yNSwxMCArMjUsMTAgQEAKIHB1YmxpYyBjbGFzcyBTZXJ2bGV0VGVzdDIgZXh0ZW5kcyBIdHRwU2VydmxldCBpbXBsZW1lbnRzIEh0dHBTZXNzaW9uTGlzdGVuZXIgewogCiAgICAgcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQyLmluaXRdIik7ICAgICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldDIuaW5pdF0iKTsKICAgICAgICAgY29udGV4dCA9IGNvbmZpZy5nZXRTZXJ2bGV0Q29udGV4dCgpOwogICAgIH0KIApAQCAtMzcsMjMgKzM3LDIzIEBACiAgICAgICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAgICAgICAgCisgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0Mi5kb1Bvc3RdIik7Ci0gICAgICAKKwogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwotICAgICAgICAKKwogICAgICAgICByZXF1ZXN0LmdldFNlc3Npb24oKS5zZXRBdHRyaWJ1dGUoIkZJTFRFUi1GT1JXQVJEIixyZXF1ZXN0LmdldFNlc3Npb24oKS5nZXRBdHRyaWJ1dGUoIkZJTFRFUiIpKTsKLSAgICAgICAgcmVxdWVzdC5nZXRTZXNzaW9uKCkuc2V0QXR0cmlidXRlKCJGSUxURVIiLCAiRkFJTCIpOyAgICAgICAgCi0gICAgICAgIAorICAgICAgICByZXF1ZXN0LmdldFNlc3Npb24oKS5zZXRBdHRyaWJ1dGUoIkZJTFRFUiIsICJGQUlMIik7CisKICAgICAgICAgUmVxdWVzdERpc3BhdGNoZXIgcmQgPSByZXF1ZXN0LmdldFJlcXVlc3REaXNwYXRjaGVyKCIvU2VydmxldFRlc3QzIik7Ci0gICAgICAgIHJkLmluY2x1ZGUocmVxdWVzdCwgcmVzcG9uc2UpOyAgICAgCisgICAgICAgIHJkLmluY2x1ZGUocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KLSAKKwogICAgIHB1YmxpYyB2b2lkIHNlc3Npb25DcmVhdGVkKGpha2FydGEuc2VydmxldC5odHRwLkh0dHBTZXNzaW9uRXZlbnQgaHR0cFNlc3Npb25FdmVudCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LnNlc3Npb25DcmVhdGVkXSIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNlc3Npb25EZXN0cm95ZWQoamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb25FdmVudCBodHRwU2Vzc2lvbkV2ZW50KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuc2Vzc2lvbkRlc3Ryb3llZF0iKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBdHRyaWJ1dGVzOiAiICsgaHR0cFNlc3Npb25FdmVudC5nZXRTZXNzaW9uKCkuZ2V0QXR0cmlidXRlKCJ0ZXN0IikpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbE11bHRpU2VsZWN0b3Ivc2VydmxldC9TZXJ2bGV0VGVzdDMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xNdWx0aVNlbGVjdG9yL3NlcnZsZXQvU2VydmxldFRlc3QzLmphdmEKaW5kZXggYzVhMzgxYS4uMWE5ZTY4NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbE11bHRpU2VsZWN0b3Ivc2VydmxldC9TZXJ2bGV0VGVzdDMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsTXVsdGlTZWxlY3Rvci9zZXJ2bGV0L1NlcnZsZXRUZXN0My5qYXZhCkBAIC0yNSwxMSArMjUsMTEgQEAKIHB1YmxpYyBjbGFzcyBTZXJ2bGV0VGVzdDMgZXh0ZW5kcyBIdHRwU2VydmxldHsKIAogICAgIHByaXZhdGUgU2VydmxldENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0My5pbml0XSIpOyAgICAgICAgCi0gICAgICAgIGNvbnRleHQgPSBjb25maWcuZ2V0U2VydmxldENvbnRleHQoKTsgICAgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0My5pbml0XSIpOworICAgICAgICBjb250ZXh0ID0gY29uZmlnLmdldFNlcnZsZXRDb250ZXh0KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CkBAIC0zNywxMiArMzcsMTIgQEAKICAgICAgICAgZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7ICAgICAgICAKKyAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQzLmRvUG9zdF0iKTsKLSAgICAgICAgCisKICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKLSAgICAgICAgCisKICAgICAgICAgb3V0LnByaW50bG4oIkZJTFRFUi1SRVFVRVNUOiIgKyByZXF1ZXN0LmdldFNlc3Npb24oKS5nZXRBdHRyaWJ1dGUoIkZJTFRFUi1SRVFVRVNUIikpOwogICAgICAgICBvdXQucHJpbnRsbigiRklMVEVSLUZPUldBUkQ6IiArIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLmdldEF0dHJpYnV0ZSgiRklMVEVSLUZPUldBUkQiKSk7CiAgICAgICAgIG91dC5wcmludGxuKCJGSUxURVItSU5DTFVERToiICsgcmVxdWVzdC5nZXRTZXNzaW9uKCkuZ2V0QXR0cmlidXRlKCJGSUxURVIiKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsU2VydmVyTmFtZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbFNlcnZlck5hbWUvYnVpbGQucHJvcGVydGllcwppbmRleCA2ZTIzMzIwLi44MjI4M2U0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsU2VydmVyTmFtZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xTZXJ2ZXJOYW1lL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE0ICsxNSwxNCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2ZXJOYW1lIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1zZXJ2ZXJOYW1lIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iL3dlYi1zZXJ2ZXJOYW1lIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsU2VydmVyTmFtZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsU2VydmVyTmFtZS9idWlsZC54bWwKaW5kZXggMGE1YTIwYi4uNTRlYTk0NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbFNlcnZlck5hbWUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xTZXJ2ZXJOYW1lL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMjYgKzQyLDI2IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICA8amF2YWMKICAgICAgICAgICAgIHNyY2Rpcj0iLiIKLSAgICAgICAgICAgIGRlYnVnPSJ0cnVlIiAgICAgICAgICAgIAorICAgICAgICAgICAgZGVidWc9InRydWUiCiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iKi5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uLHByZXBhcmUta2V5c3RvcmUtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xTZXJ2ZXJOYW1lL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xTZXJ2ZXJOYW1lL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCBmZGIwYzE3Li5jMWQ0YmI2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsU2VydmVyTmFtZS9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbFNlcnZlck5hbWUvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yMiwxMiArMjIsMTIgQEAKICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiCiAgICAgICAgICB2ZXJzaW9uPSIyLjQiPgotICAgICAKKwogICAgIDxzZXJ2bGV0PgogICAgICAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXRUZXN0PC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vU2VydmxldFRlc3Q8L3VybC1wYXR0ZXJuPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbFNlcnZlck5hbWUvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3NzbFNlcnZlck5hbWUvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCmluZGV4IDc4MWJjY2YuLmMwNzMyNzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zc2xTZXJ2ZXJOYW1lL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3NsU2VydmVyTmFtZS9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKIHB1YmxpYyBjbGFzcyBTZXJ2bGV0VGVzdCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIAogICAgIHByaXZhdGUgU2VydmxldENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwogICAgICAgICBjb250ZXh0ID0gY29uZmlnLmdldFNlcnZsZXRDb250ZXh0KCk7CkBAIC0zNCwxMiArMzQsMTIgQEAKICAgICAgICAgZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7ICAgICAgICAKKyAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuZG9Qb3N0XSIpOwotICAgICAgICAKKwogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwotICAgICAgICAJCisKICAgICAgICAgb3V0LnByaW50bG4oIlRFU1Q6OlBBU1MiKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3RhbmRhbG9uZXdhci9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3RhbmRhbG9uZXdhci9XZWJUZXN0LmphdmEKaW5kZXggMjgwNDk5Yy4uYzgyMDczYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3N0YW5kYWxvbmV3YXIvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zdGFuZGFsb25ld2FyL1dlYlRlc3QuamF2YQpAQCAtMjIsMTAgKzIyLDEwIEBACiAKIHB1YmxpYyBjbGFzcyBXZWJUZXN0CiB7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnQgPSAwOwogICAgIHByaXZhdGUgc3RhdGljIGludCBFWFBFQ1RFRF9DT1VOVCA9IDM7Ci0gICAgCisKICAgICBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQ9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIApAQCAtMzQsNyArMzQsNyBAQAogCiAgICAgICAgIC8vIFRoZSBzdGF0IHJlcG9ydGVyIHdyaXRlcyBvdXQgdGhlIHRlc3QgaW5mbyBhbmQgcmVzdWx0cwogICAgICAgICAvLyBpbnRvIHRoZSB0b3AtbGV2ZWwgcXVpY2tsb29rIGRpcmVjdG9yeSBkdXJpbmcgYSBydW4uCi0gICAgICAKKwogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJTdGFuZGFsb25lIFNlcnZsZXQvRmlsdGVyIHdhciB0ZXN0Iik7CiAKICAgICAgICAgU3RyaW5nIGhvc3QgPSBhcmdzWzBdOwpAQCAtNDMsNyArNDMsNyBAQAogCiAgICAgICAgIGludCBwb3J0ID0gbmV3IEludGVnZXIocG9ydFMpLmludFZhbHVlKCk7CiAgICAgICAgIFN0cmluZyBuYW1lOwotICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgZ29HZXQoaG9zdCwgcG9ydCwgIkZJTFRFUiIsIGNvbnRleHRSb290ICsgIi9TZXJ2bGV0VGVzdCIgKTsKICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKQEAgLTUyLDcgKzUyLDcgQEAKIAogICAgICAgICBpZiAoY291bnQgIT0gRVhQRUNURURfQ09VTlQpewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndlYi1yZXF1ZXN0ZGlzcGF0Y2hlciIsIHN0YXQuRkFJTCk7Ci0gICAgICAgIH0gICAgICAgICAgIAorICAgICAgICB9CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3ZWItcmVxdWVzdGRpc3BhdGNoZXIiKTsKICAgICB9CiAKQEAgLTY4LDcgKzY4LDcgQEAKICAgICAgICAgICAgIG9zLndyaXRlKCgiR0VUICIgKyBjb250ZXh0UGF0aCArICIgSFRUUC8xLjFcbiIpLmdldEJ5dGVzKCkpOwogICAgICAgICAgICAgb3Mud3JpdGUoKCJIb3N0OiBsb2NhbGhvc3RcbiIpLmdldEJ5dGVzKCkpOwogICAgICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHMuZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGltZTogIiArIChTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIHRpbWUpKTsKICAgICAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJpcyA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKQEAgLTgxLDE4ICs4MSwxOCBAQAogICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPSAtMSkgewogICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGxpbmUuaW5kZXhPZigiOiIpOwogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgc3RhdHVzID0gbGluZS5zdWJzdHJpbmcoaW5kZXgrMSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMuZXF1YWxzSWdub3JlQ2FzZSgiUEFTUyIpKXsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3ZWItcmVxdWVzdGRpc3BhdGNoZXI6ICIgKyBsaW5lLnN1YnN0cmluZygwLGluZGV4KSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3ZWItcmVxdWVzdGRpc3BhdGNoZXI6ICIgKyBsaW5lLnN1YnN0cmluZygwLGluZGV4KSwgc3RhdC5GQUlMKTsgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndlYi1yZXF1ZXN0ZGlzcGF0Y2hlcjogIiArIGxpbmUuc3Vic3RyaW5nKDAsaW5kZXgpLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBleCl7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQogICAgfQotICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3N0YW5kYWxvbmV3YXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zdGFuZGFsb25ld2FyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMTJlZjRiYS4uMjE0YzYyYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3N0YW5kYWxvbmV3YXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3RhbmRhbG9uZXdhci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNCArMTUsMTQgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tcmVxdWVzdGRpc3BhdGNoZXIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXJlcXVlc3RkaXNwYXRjaGVyIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iL3dlYi1yZXF1ZXN0ZGlzcGF0Y2hlciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3N0YW5kYWxvbmV3YXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3N0YW5kYWxvbmV3YXIvYnVpbGQueG1sCmluZGV4IDFkOTgyNjkuLjZiODAxNTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zdGFuZGFsb25ld2FyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3RhbmRhbG9uZXdhci9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDEwICs0MiwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgIDxqYXZhYwpAQCAtNTMsMTAgKzUzLDEwIEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjQsNyArNjQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03OCwxMSArNzgsMTEgQEAKICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IG5hbWU9ImNsb2JiZXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCi0gCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3RhbmRhbG9uZXdhci9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3RhbmRhbG9uZXdhci9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggZjk4NjFkZi4uMWY4NGNlZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3N0YW5kYWxvbmV3YXIvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zdGFuZGFsb25ld2FyL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjIsMzcgKzIyLDM3IEBACiAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIgogICAgICAgICAgdmVyc2lvbj0iMi40Ij4KLSAgICAgCisKICAgICA8ZmlsdGVyPgogICAgICAgICA8ZmlsdGVyLW5hbWU+RmlsdGVyVGVzdDwvZmlsdGVyLW5hbWU+CiAgICAgICAgIDxmaWx0ZXItY2xhc3M+dGVzdC5GaWx0ZXJUZXN0PC9maWx0ZXItY2xhc3M+Ci0gICAgPC9maWx0ZXI+ICAgIAotICAgICAgICAKKyAgICA8L2ZpbHRlcj4KKwogICAgIDxmaWx0ZXItbWFwcGluZz4KICAgICAgICAgPGZpbHRlci1uYW1lPkZpbHRlclRlc3Q8L2ZpbHRlci1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+Lyo8L3VybC1wYXR0ZXJuPgogICAgICAgICA8ZGlzcGF0Y2hlcj5SRVFVRVNUPC9kaXNwYXRjaGVyPgogICAgICAgICA8ZGlzcGF0Y2hlcj5JTkNMVURFPC9kaXNwYXRjaGVyPgotICAgICAgICA8ZGlzcGF0Y2hlcj5GT1JXQVJEPC9kaXNwYXRjaGVyPiAgCi0gICAgICAgIDxkaXNwYXRjaGVyPkVSUk9SPC9kaXNwYXRjaGVyPiAKKyAgICAgICAgPGRpc3BhdGNoZXI+Rk9SV0FSRDwvZGlzcGF0Y2hlcj4KKyAgICAgICAgPGRpc3BhdGNoZXI+RVJST1I8L2Rpc3BhdGNoZXI+CiAgICAgPC9maWx0ZXItbWFwcGluZz4KLSAgICAKKwogICAgIDxzZXJ2bGV0PgogICAgICAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXRUZXN0PC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldFRlc3QyPC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3QyPC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuU2VydmxldFRlc3QyPC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAorICAgIDwvc2VydmxldD4KICAgICA8c2VydmxldD4KICAgICAgICAgPGRpc3BsYXktbmFtZT5TZXJ2bGV0VGVzdDM8L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDM8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDM8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCi0gICAgCisgICAgPC9zZXJ2bGV0PgorCiAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vU2VydmxldFRlc3Q8L3VybC1wYXR0ZXJuPgpAQCAtNjUsNyArNjUsNyBAQAogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0Mzwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L1NlcnZsZXRUZXN0MzwvdXJsLXBhdHRlcm4+CiAgICAgPC9zZXJ2bGV0LW1hcHBpbmc+Ci0gICAgCisKICAgICA8c2Vzc2lvbi1jb25maWc+CiAgICAgICAgIDxzZXNzaW9uLXRpbWVvdXQ+MTA8L3Nlc3Npb24tdGltZW91dD4KICAgICA8L3Nlc3Npb24tY29uZmlnPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3N0YW5kYWxvbmV3YXIvc2VydmxldC9GaWx0ZXJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3RhbmRhbG9uZXdhci9zZXJ2bGV0L0ZpbHRlclRlc3QuamF2YQppbmRleCBmY2YzNjI0Li5lZWM5NTdlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3RhbmRhbG9uZXdhci9zZXJ2bGV0L0ZpbHRlclRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3RhbmRhbG9uZXdhci9zZXJ2bGV0L0ZpbHRlclRlc3QuamF2YQpAQCAtMTksMjUgKzE5LDI1IEBACiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lio7CiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuKjsKIHB1YmxpYyBjbGFzcyBGaWx0ZXJUZXN0IGltcGxlbWVudHMgRmlsdGVyewotICAgIAorCiAgICAgcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbRmlsdGVyLmRlc3Ryb3ldIik7Ci0gICAgfSAgICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgdm9pZCBkb0ZpbHRlcihTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UsIEZpbHRlckNoYWluIGZpbHRlckNoYWluKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiwgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltGaWx0ZXIuZG9GaWx0ZXJdIik7Ci0gICAgICAgICAgCisKICAgICAgICAgKChIdHRwU2VydmxldFJlcXVlc3QpcmVxdWVzdCkuZ2V0U2Vzc2lvbigpLnNldEF0dHJpYnV0ZSgiRklMVEVSIiwgIlBBU1MiKTsKICAgICAgICAgZmlsdGVyQ2hhaW4uZG9GaWx0ZXIocmVxdWVzdCwgcmVzcG9uc2UpOwotICAgICAgICAKLSAgICB9ICAgIAotICAgIAotICAgIAorCisgICAgfQorCisKICAgICBwdWJsaWMgdm9pZCBpbml0KGpha2FydGEuc2VydmxldC5GaWx0ZXJDb25maWcgZmlsdGVyQ29uZmlnKSB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltGaWx0ZXIuaW5pdF0iKTsKICAgICAgICAgY29udGV4dCA9IGZpbHRlckNvbmZpZy5nZXRTZXJ2bGV0Q29udGV4dCgpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3N0YW5kYWxvbmV3YXIvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3N0YW5kYWxvbmV3YXIvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCmluZGV4IGQ0YTMxNzQuLmRhYTgwNTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zdGFuZGFsb25ld2FyL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3RhbmRhbG9uZXdhci9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKQEAgLTQ2LDEzICs0NiwxMyBAQAogcHVibGljIGNsYXNzIFNlcnZsZXRUZXN0IGV4dGVuZHMgSHR0cFNlcnZsZXQgaW1wbGVtZW50cyBIdHRwU2Vzc2lvbkxpc3RlbmVyIHsKIAogICAgIHByaXZhdGUgU2VydmxldENvbnRleHQgY29udGV4dDsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmluaXRdIik7ICAgICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5pbml0XSIpOwogICAgICAgICBjb250ZXh0ID0gY29uZmlnLmdldFNlcnZsZXRDb250ZXh0KCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuaW5pdF0gIiArIGNvbnRleHQuZ2V0TWFqb3JWZXJzaW9uKCkpOwotICAgICAgICAKKwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewpAQCAtNjAsMjMgKzYwLDIzIEBACiAgICAgICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAgICAgICAgCisgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmRvUG9zdF0iKTsKLSAgICAgICAgCisKICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKLSAgICAgICAgCisKICAgICAgICAgcmVxdWVzdC5nZXRTZXNzaW9uKCkuc2V0QXR0cmlidXRlKCJGSUxURVItUkVRVUVTVCIsIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLmdldEF0dHJpYnV0ZSgiRklMVEVSIikpOwotICAgICAgICByZXF1ZXN0LmdldFNlc3Npb24oKS5zZXRBdHRyaWJ1dGUoIkZJTFRFUiIsICJGQUlMIik7ICAgICAgICAKLSAgICAgICAgCQorICAgICAgICByZXF1ZXN0LmdldFNlc3Npb24oKS5zZXRBdHRyaWJ1dGUoIkZJTFRFUiIsICJGQUlMIik7CisKICAgICAgICAgUmVxdWVzdERpc3BhdGNoZXIgcmQgPSBjb250ZXh0LmdldFJlcXVlc3REaXNwYXRjaGVyKCIvU2VydmxldFRlc3QyIik7Ci0gICAgICAgIHJkLmZvcndhcmQocmVxdWVzdCwgcmVzcG9uc2UpOyAgICAgICAKKyAgICAgICAgcmQuZm9yd2FyZChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2Vzc2lvbkNyZWF0ZWQoamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb25FdmVudCBodHRwU2Vzc2lvbkV2ZW50KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuc2Vzc2lvbkNyZWF0ZWRdIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2Vzc2lvbkRlc3Ryb3llZChqYWthcnRhLnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbkV2ZW50IGh0dHBTZXNzaW9uRXZlbnQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5zZXNzaW9uRGVzdHJveWVkXSIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkF0dHJpYnV0ZXM6ICIgKyBodHRwU2Vzc2lvbkV2ZW50LmdldFNlc3Npb24oKS5nZXRBdHRyaWJ1dGUoInRlc3QiKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3RhbmRhbG9uZXdhci9zZXJ2bGV0L1NlcnZsZXRUZXN0Mi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3N0YW5kYWxvbmV3YXIvc2VydmxldC9TZXJ2bGV0VGVzdDIuamF2YQppbmRleCBkYjJjYjUwLi4wMDc3NWE2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3RhbmRhbG9uZXdhci9zZXJ2bGV0L1NlcnZsZXRUZXN0Mi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zdGFuZGFsb25ld2FyL3NlcnZsZXQvU2VydmxldFRlc3QyLmphdmEKQEAgLTI1LDEwICsyNSwxMCBAQAogcHVibGljIGNsYXNzIFNlcnZsZXRUZXN0MiBleHRlbmRzIEh0dHBTZXJ2bGV0IGltcGxlbWVudHMgSHR0cFNlc3Npb25MaXN0ZW5lciB7CiAKICAgICBwcml2YXRlIFNlcnZsZXRDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldDIuaW5pdF0iKTsgICAgICAgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0Mi5pbml0XSIpOwogICAgICAgICBjb250ZXh0ID0gY29uZmlnLmdldFNlcnZsZXRDb250ZXh0KCk7CiAgICAgfQogCkBAIC0zNywyMyArMzcsMjMgQEAKICAgICAgICAgZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7ICAgICAgICAKKyAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQyLmRvUG9zdF0iKTsKLSAgICAgIAorCiAgICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7Ci0gICAgICAgIAorCiAgICAgICAgIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLnNldEF0dHJpYnV0ZSgiRklMVEVSLUZPUldBUkQiLHJlcXVlc3QuZ2V0U2Vzc2lvbigpLmdldEF0dHJpYnV0ZSgiRklMVEVSIikpOwotICAgICAgICByZXF1ZXN0LmdldFNlc3Npb24oKS5zZXRBdHRyaWJ1dGUoIkZJTFRFUiIsICJGQUlMIik7ICAgICAgICAKLSAgICAgICAgCisgICAgICAgIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLnNldEF0dHJpYnV0ZSgiRklMVEVSIiwgIkZBSUwiKTsKKwogICAgICAgICBSZXF1ZXN0RGlzcGF0Y2hlciByZCA9IHJlcXVlc3QuZ2V0UmVxdWVzdERpc3BhdGNoZXIoIi9TZXJ2bGV0VGVzdDMiKTsKLSAgICAgICAgcmQuaW5jbHVkZShyZXF1ZXN0LCByZXNwb25zZSk7ICAgICAKKyAgICAgICAgcmQuaW5jbHVkZShyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQotIAorCiAgICAgcHVibGljIHZvaWQgc2Vzc2lvbkNyZWF0ZWQoamFrYXJ0YS5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb25FdmVudCBodHRwU2Vzc2lvbkV2ZW50KSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuc2Vzc2lvbkNyZWF0ZWRdIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2Vzc2lvbkRlc3Ryb3llZChqYWthcnRhLnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbkV2ZW50IGh0dHBTZXNzaW9uRXZlbnQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5zZXNzaW9uRGVzdHJveWVkXSIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkF0dHJpYnV0ZXM6ICIgKyBodHRwU2Vzc2lvbkV2ZW50LmdldFNlc3Npb24oKS5nZXRBdHRyaWJ1dGUoInRlc3QiKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3RhbmRhbG9uZXdhci9zZXJ2bGV0L1NlcnZsZXRUZXN0My5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3N0YW5kYWxvbmV3YXIvc2VydmxldC9TZXJ2bGV0VGVzdDMuamF2YQppbmRleCAzZThkMjViLi5lNzhmZWMyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvc3RhbmRhbG9uZXdhci9zZXJ2bGV0L1NlcnZsZXRUZXN0My5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi9zdGFuZGFsb25ld2FyL3NlcnZsZXQvU2VydmxldFRlc3QzLmphdmEKQEAgLTQ2LDExICs0NiwxMSBAQAogcHVibGljIGNsYXNzIFNlcnZsZXRUZXN0MyBleHRlbmRzIEh0dHBTZXJ2bGV0ewogCiAgICAgcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQzLmluaXRdIik7ICAgICAgICAKLSAgICAgICAgY29udGV4dCA9IGNvbmZpZy5nZXRTZXJ2bGV0Q29udGV4dCgpOyAgICAgCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQzLmluaXRdIik7CisgICAgICAgIGNvbnRleHQgPSBjb25maWcuZ2V0U2VydmxldENvbnRleHQoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKQEAgLTU4LDEyICs1OCwxMiBAQAogICAgICAgICBkb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgICAgICAgIAorICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldDMuZG9Qb3N0XSIpOwotICAgICAgICAKKwogICAgICAgICByZXNwb25zZS5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7CiAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwotICAgICAgICAKKwogICAgICAgICBvdXQucHJpbnRsbigiRklMVEVSLVJFUVVFU1Q6IiArIHJlcXVlc3QuZ2V0U2Vzc2lvbigpLmdldEF0dHJpYnV0ZSgiRklMVEVSLVJFUVVFU1QiKSk7CiAgICAgICAgIG91dC5wcmludGxuKCJGSUxURVItRk9SV0FSRDoiICsgcmVxdWVzdC5nZXRTZXNzaW9uKCkuZ2V0QXR0cmlidXRlKCJGSUxURVItRk9SV0FSRCIpKTsKICAgICAgICAgb3V0LnByaW50bG4oIkZJTFRFUi1JTkNMVURFOiIgKyByZXF1ZXN0LmdldFNlc3Npb24oKS5nZXRBdHRyaWJ1dGUoIkZJTFRFUiIpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90YWdQbHVnaW5Gb3JFYWNoL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90YWdQbHVnaW5Gb3JFYWNoL1dlYlRlc3QuamF2YQppbmRleCBkYzFiMTE1Li5kNWVmNjUxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGFnUGx1Z2luRm9yRWFjaC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RhZ1BsdWdpbkZvckVhY2gvV2ViVGVzdC5qYXZhCkBAIC02NiwxNyArNjYsMTcgQEAKICAgICAvKgogICAgICAqIFJldHVybnMgdHJ1ZSBpbiBjYXNlIG9mIHN1Y2Nlc3MsIGZhbHNlIG90aGVyd2lzZS4KICAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGRvVGVzdChTdHJpbmcgdXJsU3RyaW5nLCAKKyAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGRvVGVzdChTdHJpbmcgdXJsU3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBleHBlY3RlZDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGV4cGVjdGVkMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZXhwZWN0ZWQzKSB7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwodXJsU3RyaW5nKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKICAgICAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOwogICAgICAgICAgICAgY29ubi5jb25uZWN0KCk7CiAgICAgICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7IAorICAgICAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlIGNvZGUuIEV4cGVjdGVkOiAyMDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgcmVjZWl2ZWQ6ICIgKyByZXNwb25zZUNvZGUpOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTk2LDggKzk2LDggQEAKIAogICAgICAgICAgICAgaWYgKCFmb3VuZCkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW52YWxpZCByZXNwb25zZS4gUmVzcG9uc2UgZGlkIG5vdCAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbnRhaW4gb25lIG9mIHRoZSBleHBlY3RlZCBzdHJpbmdzOiAiICsgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkMSArICIsIiArIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29udGFpbiBvbmUgb2YgdGhlIGV4cGVjdGVkIHN0cmluZ3M6ICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZDEgKyAiLCIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZDIgKyAiLCIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZDMpOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90YWdQbHVnaW5Gb3JFYWNoL2J1aWxkLW5nLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGFnUGx1Z2luRm9yRWFjaC9idWlsZC1uZy5wcm9wZXJ0aWVzCmluZGV4IGQ3ZWMwOTEuLjg3YmNkOWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90YWdQbHVnaW5Gb3JFYWNoL2J1aWxkLW5nLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RhZ1BsdWdpbkZvckVhY2gvYnVpbGQtbmcucHJvcGVydGllcwpAQCAtMTgsNyArMTgsNyBAQAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tdGFnLXBsdWdpbi1mb3ItZWFjaCIvPgogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0idGFnUGx1Z2lucy54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3RhZ1BsdWdpbnMueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvJHthcHBuYW1lfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RhZ1BsdWdpbkZvckVhY2gvYnVpbGQtbmcueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RhZ1BsdWdpbkZvckVhY2gvYnVpbGQtbmcueG1sCmluZGV4IDcyZjRmY2IuLjk2MDlhYzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90YWdQbHVnaW5Gb3JFYWNoL2J1aWxkLW5nLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGFnUGx1Z2luRm9yRWFjaC9idWlsZC1uZy54bWwKQEAgLTg4LDE2ICs4OCwxNiBAQAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90YWdQbHVnaW5Gb3JFYWNoL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGFnUGx1Z2luRm9yRWFjaC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDk2MjE3YjMuLjdjNjZiMDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90YWdQbHVnaW5Gb3JFYWNoL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RhZ1BsdWdpbkZvckVhY2gvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTIgKzE1LDEyIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXRhZy1wbHVnaW4tZm9yLWVhY2giLz4KIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InRhZ1BsdWdpbnMueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci90YWdQbHVnaW5zLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iLyR7YXBwbmFtZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90YWdQbHVnaW5Gb3JFYWNoL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90YWdQbHVnaW5Gb3JFYWNoL2J1aWxkLnhtbAppbmRleCBmNmU3OGZiLi45YjRlNTQzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGFnUGx1Z2luRm9yRWFjaC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RhZ1BsdWdpbkZvckVhY2gvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxMCArNDIsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTUzLDE0ICs1MywxNCBAQAogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MiwxMCArNzIsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGFnUGx1Z2luRm9yRWFjaC90ZXN0L1dlYlRlc3RORy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RhZ1BsdWdpbkZvckVhY2gvdGVzdC9XZWJUZXN0TkcuamF2YQppbmRleCA0MzVhMGIwLi42Yzc0NzcwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGFnUGx1Z2luRm9yRWFjaC90ZXN0L1dlYlRlc3RORy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90YWdQbHVnaW5Gb3JFYWNoL3Rlc3QvV2ViVGVzdE5HLmphdmEKQEAgLTU0LDEzICs1NCwxMyBAQAogICAgICAqIFJldHVybnMgdHJ1ZSBpbiBjYXNlIG9mIHN1Y2Nlc3MsIGZhbHNlIG90aGVyd2lzZS4KICAgICAgKi8KICAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGRvVGVzdChTdHJpbmcgdXJsU3RyaW5nLCBTdHJpbmcgZXhwZWN0ZWQpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCh1cmxTdHJpbmcpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgICAgICBjb25uLmNvbm5lY3QoKTsKICAgICAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsgCisgICAgICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UgY29kZS4gRXhwZWN0ZWQ6IDIwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCByZWNlaXZlZDogIiArIHJlc3BvbnNlQ29kZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RhZ1BsdWdpbkZvckVhY2gvdGVzdC90ZXN0bmcueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RhZ1BsdWdpbkZvckVhY2gvdGVzdC90ZXN0bmcueG1sCmluZGV4IDM1NGY0MjYuLjZiMjIwNGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90YWdQbHVnaW5Gb3JFYWNoL3Rlc3QvdGVzdG5nLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGFnUGx1Z2luRm9yRWFjaC90ZXN0L3Rlc3RuZy54bWwKQEAgLTE3LDcgKzE3LDcgQEAKIC0tPgogCiA8IURPQ1RZUEUgc3VpdGUgU1lTVEVNICJodHRwOi8vdGVzdG5nLm9yZy90ZXN0bmctMS4wLmR0ZCIgPgotICAKKwogPHN1aXRlIG5hbWU9IndlYiIgPgogICA8cGFyYW1ldGVyIG5hbWU9Imhvc3QiIHZhbHVlPSJsb2NhbGhvc3QiLz4KICAgPHBhcmFtZXRlciBuYW1lPSJwb3J0IiB2YWx1ZT0iODA4MCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RhZ1BsdWdpbkZvckVhY2hUYWdGaWxlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90YWdQbHVnaW5Gb3JFYWNoVGFnRmlsZS9XZWJUZXN0LmphdmEKaW5kZXggOTM3ODliMy4uYzFhMGVmYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RhZ1BsdWdpbkZvckVhY2hUYWdGaWxlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGFnUGx1Z2luRm9yRWFjaFRhZ0ZpbGUvV2ViVGVzdC5qYXZhCkBAIC0yMSw3ICsyMSw3IEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci4qOwogCiAvKgotICogVW5pdCB0ZXN0IGZvciBCdWd6aWxsYSAyODM2MSAoImZvcmVhY2ggbm8gbG9uZ2VyIHdvcmtzIGluIHRhZyBmaWxlIikgCisgKiBVbml0IHRlc3QgZm9yIEJ1Z3ppbGxhIDI4MzYxICgiZm9yZWFjaCBubyBsb25nZXIgd29ya3MgaW4gdGFnIGZpbGUiKQogICovCiBwdWJsaWMgY2xhc3MgV2ViVGVzdCB7CiAKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgQnVnemlsbGEgMjgzNjEiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC02Miw3ICs2Miw3IEBACiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOwogICAgICAgICBjb25uLmNvbm5lY3QoKTsKICAgICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm4uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7IAorICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UgY29kZS4gRXhwZWN0ZWQ6IDIwMCIgKwogICAgICAgICAgICAgICAgICIsIHJlY2VpdmVkOiAiICsgcmVzcG9uc2VDb2RlKTsKICAgICAgICAgfQpAQCAtODMsNyArODMsNyBAQAogICAgICAgICAgICAgICAgIGlmIChiciAhPSBudWxsKSBici5jbG9zZSgpOwogICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZXgpIHt9CiAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICBpZiAoIWZvdW5kKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJJbnZhbGlkIHJlc3BvbnNlLiBSZXNwb25zZSBkaWQgbm90ICIgKwogICAgICAgICAgICAgICAgICJjb250YWluIGV4cGVjdGVkOiAiICsgRVhQRUNURUQpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RhZ1BsdWdpbkZvckVhY2hUYWdGaWxlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGFnUGx1Z2luRm9yRWFjaFRhZ0ZpbGUvYnVpbGQucHJvcGVydGllcwppbmRleCBkM2M2YjA5Li4wODY2OTlmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGFnUGx1Z2luRm9yRWFjaFRhZ0ZpbGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGFnUGx1Z2luRm9yRWFjaFRhZ0ZpbGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTIgKzE1LDEyIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXRhZy1wbHVnaW4tZm9yLWVhY2gtdGFnLWZpbGUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InRhZ1BsdWdpbnMueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci90YWdQbHVnaW5zLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iLyR7YXBwbmFtZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90YWdQbHVnaW5Gb3JFYWNoVGFnRmlsZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGFnUGx1Z2luRm9yRWFjaFRhZ0ZpbGUvYnVpbGQueG1sCmluZGV4IGY2ZTc4ZmIuLjliNGU1NDMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90YWdQbHVnaW5Gb3JFYWNoVGFnRmlsZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RhZ1BsdWdpbkZvckVhY2hUYWdGaWxlL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTAgKzQyLDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCkBAIC01MywxNCArNTMsMTQgQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzIsMTAgKzcyLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RhZ2ZpbGVJbmNsdWRlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90YWdmaWxlSW5jbHVkZS9XZWJUZXN0LmphdmEKaW5kZXggNTllNDdiYS4uOWQ0OTE3NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RhZ2ZpbGVJbmNsdWRlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGFnZmlsZUluY2x1ZGUvV2ViVGVzdC5qYXZhCkBAIC0yMCw3ICsyMCw3IEBACiAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLio7CiAKLXB1YmxpYyBjbGFzcyBXZWJUZXN0IHsgICAgCitwdWJsaWMgY2xhc3MgV2ViVGVzdCB7CiAKICAgICBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CkBAIC0zNiw3ICszNiw3IEBACiAgICAgICAgIFN0cmluZyBwb3J0UyA9IGFyZ3NbMV07CiAgICAgICAgIFN0cmluZyBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgICAgIGludCBwb3J0ID0gbmV3IEludGVnZXIocG9ydFMpLmludFZhbHVlKCk7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBnb0dldChob3N0LCBwb3J0LCBjb250ZXh0Um9vdCArICIvdGVzdC5qc3AiICk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CkBAIC03Myw3ICs3Myw3IEBACiAgICAgICAgICAgICAgICAgaWYgKGxpbmUuaW5kZXhPZigiUEFTUyIpID49IDApIHsKICAgICAgICAgICAgICAgICAgICAgcGFzcyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgdHJ5IHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90YWdmaWxlSW5jbHVkZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RhZ2ZpbGVJbmNsdWRlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZWQ0ZTkwNy4uNjA5ZDJlYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RhZ2ZpbGVJbmNsdWRlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RhZ2ZpbGVJbmNsdWRlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEyICsxNSwxMiBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS10YWdmaWxlLWluY2x1ZGUiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXRhZ2ZpbGUtaW5jbHVkZSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii8ke2FwcG5hbWV9Ii8+CiA8cHJvcGVydHkgbmFtZT0idGFnZmlsZXMiIHZhbHVlPSJkZXNjcmlwdG9yL3RhZ3MiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90YWdmaWxlSW5jbHVkZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGFnZmlsZUluY2x1ZGUvYnVpbGQueG1sCmluZGV4IGRiYmZmNGUuLjIxOTYwODggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90YWdmaWxlSW5jbHVkZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RhZ2ZpbGVJbmNsdWRlL2J1aWxkLnhtbApAQCAtMzcsNyArMzcsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDUsMTAgKzQ1LDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCkBAIC01NiwxMCArNTYsMTAgQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Nyw3ICs2Nyw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc5LDEwICs3OSwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90YWdwbHVnaW4vV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RhZ3BsdWdpbi9XZWJUZXN0LmphdmEKaW5kZXggM2NiOGMyMy4uM2Q2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RhZ3BsdWdpbi9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RhZ3BsdWdpbi9XZWJUZXN0LmphdmEKQEAgLTIyLDkgKzIyLDkgQEAKIAogcHVibGljIGNsYXNzIFdlYlRlc3QKIHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gcGFzcyA9IGZhbHNlOwotICAgIAorCiAgICAgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0PQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKQEAgLTMzLDE0ICszMywxNCBAQAogCiAgICAgICAgIC8vIFRoZSBzdGF0IHJlcG9ydGVyIHdyaXRlcyBvdXQgdGhlIHRlc3QgaW5mbyBhbmQgcmVzdWx0cwogICAgICAgICAvLyBpbnRvIHRoZSB0b3AtbGV2ZWwgcXVpY2tsb29rIGRpcmVjdG9yeSBkdXJpbmcgYSBydW4uCi0gICAgICAKKwogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJUYWcgUGx1Z2luIHRlc3QiKTsKIAogICAgICAgICBTdHJpbmcgaG9zdCA9IGFyZ3NbMF07CiAgICAgICAgIFN0cmluZyBwb3J0UyA9IGFyZ3NbMV07CiAgICAgICAgIFN0cmluZyBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgICAgIGludCBwb3J0ID0gbmV3IEludGVnZXIocG9ydFMpLmludFZhbHVlKCk7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBnb0dldChob3N0LCBwb3J0LCBjb250ZXh0Um9vdCArICIvdGVzdC5qc3AiICk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiVGFnIFBsdWdpbiB0ZXN0IiwgcGFzcz8gc3RhdC5QQVNTOiBzdGF0LkZBSUwpOwpAQCAtNjEsNyArNjEsNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdFVCAiICsgY29udGV4dFBhdGggKyAiIEhUVFAvMS4wIik7CiAgICAgICAgIG9zLndyaXRlKCgiR0VUICIgKyBjb250ZXh0UGF0aCArICIgSFRUUC8xLjBcbiIpLmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHMuZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYmlzID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CkBAIC03MywxMCArNzMsMTAgQEAKICAgICAgICAgICAgICAgICBpbnQgaW5kZXggPSBsaW5lLmluZGV4T2YoIlBBU1MiKTsKICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkgewogICAgICAgICAgICAgICAgICAgICBwYXNzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCggRXhjZXB0aW9uIGV4KXsKLSAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOyAgIAorICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJUZXN0IFVOUFJFRElDVEVELUZBSUxVUkUiKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90YWdwbHVnaW4vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90YWdwbHVnaW4vYnVpbGQucHJvcGVydGllcwppbmRleCAyYTk1OGU0Li4zNjYwMWU5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGFncGx1Z2luL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RhZ3BsdWdpbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNCArMTUsMTQgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tdGFncGx1Z2luIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS10YWdwbHVnaW4iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0idGFnUGx1Z2lucy54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3RhZ1BsdWdpbnMueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGFncGx1Z2luL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90YWdwbHVnaW4vYnVpbGQueG1sCmluZGV4IDg3ZGJkNGMuLjVhMWYwYzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90YWdwbHVnaW4vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90YWdwbHVnaW4vYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxMCArNDIsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgICA8amF2YWMKQEAgLTUzLDEwICs1MywxMCBAQAogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTY0LDcgKzY0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzYsMTAgKzc2LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Rlc3RGb3JtQXV0aGVudGljYXRvci9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGVzdEZvcm1BdXRoZW50aWNhdG9yL1dlYlRlc3QuamF2YQppbmRleCBiMzA3ZjA4Li5jOTY4ZjdjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGVzdEZvcm1BdXRoZW50aWNhdG9yL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGVzdEZvcm1BdXRoZW50aWNhdG9yL1dlYlRlc3QuamF2YQpAQCAtNDQsNyArNDQsNyBAQAogICAgICAgICBhZG1pblVzZXIgPSBhcmdzWzNdOwogICAgICAgICBhZG1pblBhc3N3b3JkID0gYXJnc1s0XTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBUb21jYXQgYnVnIDQ5Nzc5Iik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGVzdEZvcm1BdXRoZW50aWNhdG9yL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGVzdEZvcm1BdXRoZW50aWNhdG9yL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYzIwYzY2ZS4uNTM2YzFjMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Rlc3RGb3JtQXV0aGVudGljYXRvci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90ZXN0Rm9ybUF1dGhlbnRpY2F0b3IvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS10ZXN0LWZvcm0tYXV0aGVudGljYXRvciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Rlc3RGb3JtQXV0aGVudGljYXRvci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGVzdEZvcm1BdXRoZW50aWNhdG9yL2J1aWxkLnhtbAppbmRleCAzYWY4N2EyLi41NGVlMzg1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGVzdEZvcm1BdXRoZW50aWNhdG9yL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGVzdEZvcm1BdXRoZW50aWNhdG9yL2J1aWxkLnhtbApAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTUzLDI0ICs1MywyNCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIgogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyOiR7ZW52LkFQU19IT01FfS9saWIvd2VidGVzdC5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9ImRlYnVnIiB2YWx1ZT0iZmFsc2UiLz4KQEAgLTg5LDcgKzg5LDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RvcmUiIGRlcGVuZHM9InNldHVwIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZWxldGUtdXNlci1jb21tb24iPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3Rlc3RGb3JtQXV0aGVudGljYXRvci9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGVzdEZvcm1BdXRoZW50aWNhdG9yL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCA3ZmM2MDVlLi41ZTc4MDMyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGVzdEZvcm1BdXRoZW50aWNhdG9yL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGVzdEZvcm1BdXRoZW50aWNhdG9yL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjUsMTIgKzI1LDEyIEBACiAKICAgPHNlY3VyaXR5LWNvbnN0cmFpbnQ+CiAgICAgPHdlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgotCTx3ZWItcmVzb3VyY2UtbmFtZT5Qcm90ZWN0ZWQgQXJlYTwvd2ViLXJlc291cmNlLW5hbWU+Ci0JPHVybC1wYXR0ZXJuPi8qPC91cmwtcGF0dGVybj4KLQk8aHR0cC1tZXRob2Q+REVMRVRFPC9odHRwLW1ldGhvZD4KLQk8aHR0cC1tZXRob2Q+R0VUPC9odHRwLW1ldGhvZD4KLQk8aHR0cC1tZXRob2Q+UE9TVDwvaHR0cC1tZXRob2Q+Ci0JPGh0dHAtbWV0aG9kPlBVVDwvaHR0cC1tZXRob2Q+CisgICAgPHdlYi1yZXNvdXJjZS1uYW1lPlByb3RlY3RlZCBBcmVhPC93ZWItcmVzb3VyY2UtbmFtZT4KKyAgICA8dXJsLXBhdHRlcm4+Lyo8L3VybC1wYXR0ZXJuPgorICAgIDxodHRwLW1ldGhvZD5ERUxFVEU8L2h0dHAtbWV0aG9kPgorICAgIDxodHRwLW1ldGhvZD5HRVQ8L2h0dHAtbWV0aG9kPgorICAgIDxodHRwLW1ldGhvZD5QT1NUPC9odHRwLW1ldGhvZD4KKyAgICA8aHR0cC1tZXRob2Q+UFVUPC9odHRwLW1ldGhvZD4KICAgICA8L3dlYi1yZXNvdXJjZS1jb2xsZWN0aW9uPgogCiAgICAgPGF1dGgtY29uc3RyYWludD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90aHJlYWRQb29sSWRsZVRpbWVvdXQvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RocmVhZFBvb2xJZGxlVGltZW91dC9XZWJUZXN0LmphdmEKaW5kZXggZmRkZTJlZi4uZTMwNzI5MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RocmVhZFBvb2xJZGxlVGltZW91dC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RocmVhZFBvb2xJZGxlVGltZW91dC9XZWJUZXN0LmphdmEKQEAgLTIwLDMzICsyMCwzMyBAQAogaW1wb3J0IGNvbS5zdW4uYXBwc2Vydi50ZXN0LnV0aWwucmVzdWx0cy5TaW1wbGVSZXBvcnRlckFkYXB0ZXI7CiAKIHB1YmxpYyBjbGFzcyBXZWJUZXN0IHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiLCAidGhyZWFkLXBvb2wtaWRsZS10aW1lb3V0Iik7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIiwgInRocmVhZC1wb29sLWlkbGUtdGltZW91dCIpOwogCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewotCQlzdGF0LmFkZERlc2NyaXB0aW9uKCJIVFRQIHRocmVhZCB0aW1lb3V0Iik7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgeworICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJIVFRQIHRocmVhZCB0aW1lb3V0Iik7CiAKLQkJU3RyaW5nIGhvc3QgPSBhcmdzWzBdOwotCQlTdHJpbmcgcG9ydFMgPSBhcmdzWzFdOwotCQlTdHJpbmcgY29udGV4dFJvb3QgPSBhcmdzWzJdOwotCQlib29sZWFuIG5vVGltZW91dCA9IGFyZ3MubGVuZ3RoID09IDQ7CisgICAgICAgIFN0cmluZyBob3N0ID0gYXJnc1swXTsKKyAgICAgICAgU3RyaW5nIHBvcnRTID0gYXJnc1sxXTsKKyAgICAgICAgU3RyaW5nIGNvbnRleHRSb290ID0gYXJnc1syXTsKKyAgICAgICAgYm9vbGVhbiBub1RpbWVvdXQgPSBhcmdzLmxlbmd0aCA9PSA0OwogCi0JCWludCBwb3J0ID0gbmV3IEludGVnZXIocG9ydFMpOworICAgICAgICBpbnQgcG9ydCA9IG5ldyBJbnRlZ2VyKHBvcnRTKTsKIAotCQlnb0dldChob3N0LCBwb3J0LCBjb250ZXh0Um9vdCArICIvU2VydmxldFRlc3QiLCBub1RpbWVvdXQgKTsKKyAgICAgICAgZ29HZXQoaG9zdCwgcG9ydCwgY29udGV4dFJvb3QgKyAiL1NlcnZsZXRUZXN0Iiwgbm9UaW1lb3V0ICk7CiAKLQkJc3RhdC5wcmludFN1bW1hcnkoIndlYi10aHJlYWQtdGltZW91dCIpOwotCX0KKyAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoIndlYi10aHJlYWQtdGltZW91dCIpOworICAgIH0KIAotCXByaXZhdGUgc3RhdGljIHZvaWQgZ29HZXQoU3RyaW5nIGhvc3QsIGludCBwb3J0LCBTdHJpbmcgY29udGV4dFBhdGgsIGJvb2xlYW4gbm9UaW1lb3V0KSB7Ci0JCXRyeSB7Ci0JCQlVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICsgIjoiICsgcG9ydCArIGNvbnRleHRQYXRoKTsKLQkJCXVybC5nZXRDb250ZW50KCk7Ci0JCQlzdGF0LmFkZFN0YXR1cygid2ViLXRocmVhZC10aW1lb3V0IiArIChub1RpbWVvdXQgPyAiLWRlYnVnIiA6ICIiKSwgbm9UaW1lb3V0ID8gU2ltcGxlUmVwb3J0ZXJBZGFwdGVyLlBBU1MgOiBTaW1wbGVSZXBvcnRlckFkYXB0ZXIuRkFJTCk7Ci0JCX0gY2F0Y2goIElPRXhjZXB0aW9uIGV4KXsKLQkJCXN0YXQuYWRkU3RhdHVzKCJ3ZWItdGhyZWFkLXRpbWVvdXQiLCBub1RpbWVvdXQgPyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIuRkFJTCA6IFNpbXBsZVJlcG9ydGVyQWRhcHRlci5QQVNTKTsKLQkJfSBjYXRjaCggRXhjZXB0aW9uIGV4KXsKLQkJCXN0YXQuYWRkU3RhdHVzKCJ3ZWItdGhyZWFkLXRpbWVvdXQiLCBTaW1wbGVSZXBvcnRlckFkYXB0ZXIuRkFJTCk7Ci0JCQlleC5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCX0KKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGdvR2V0KFN0cmluZyBob3N0LCBpbnQgcG9ydCwgU3RyaW5nIGNvbnRleHRQYXRoLCBib29sZWFuIG5vVGltZW91dCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0UGF0aCk7CisgICAgICAgICAgICB1cmwuZ2V0Q29udGVudCgpOworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndlYi10aHJlYWQtdGltZW91dCIgKyAobm9UaW1lb3V0ID8gIi1kZWJ1ZyIgOiAiIiksIG5vVGltZW91dCA/IFNpbXBsZVJlcG9ydGVyQWRhcHRlci5QQVNTIDogU2ltcGxlUmVwb3J0ZXJBZGFwdGVyLkZBSUwpOworICAgICAgICB9IGNhdGNoKCBJT0V4Y2VwdGlvbiBleCl7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2ViLXRocmVhZC10aW1lb3V0Iiwgbm9UaW1lb3V0ID8gU2ltcGxlUmVwb3J0ZXJBZGFwdGVyLkZBSUwgOiBTaW1wbGVSZXBvcnRlckFkYXB0ZXIuUEFTUyk7CisgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBleCl7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2ViLXRocmVhZC10aW1lb3V0IiwgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyLkZBSUwpOworICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGhyZWFkUG9vbElkbGVUaW1lb3V0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90aHJlYWRQb29sSWRsZVRpbWVvdXQvYnVpbGQueG1sCmluZGV4IDNkYmMwNzcuLjc3MWE0ZWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90aHJlYWRQb29sSWRsZVRpbWVvdXQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90aHJlYWRQb29sSWRsZVRpbWVvdXQvYnVpbGQueG1sCkBAIC03NSw3ICs3NSw3IEBACiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIiBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIi8+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtMTE4LDcgKzExOCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InN0YXJ0RG9tYWluRGVidWciIGRlcGVuZHM9InN0YXJ0RG9tYWluRGVidWdVbml4LCBzdGFydERvbWFpbkRlYnVnV2luZG93cyIvPgogCiAgICAgPHRhcmdldCBuYW1lPSJzdGFydERvbWFpbkRlYnVnVW5peCIgZGVwZW5kcz0iaW5pdC1jb21tb24iIGlmPSJpc1VuaXgiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RocmVhZFBvb2xJZGxlVGltZW91dC9zcmMvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RocmVhZFBvb2xJZGxlVGltZW91dC9zcmMvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCmluZGV4IGU4NTQxNDkuLjE1N2M0YjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90aHJlYWRQb29sSWRsZVRpbWVvdXQvc3JjL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdGhyZWFkUG9vbElkbGVUaW1lb3V0L3NyYy9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKQEAgLTI0LDE3ICsyNCwxNyBAQAogCiBwdWJsaWMgY2xhc3MgU2VydmxldFRlc3QgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAKLQlwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKLQl9CisgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CisgICAgICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CisgICAgfQogCi0JcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQl0cnkgewotCQkJVGhyZWFkLnNsZWVwKDEwMDAwKTsKKyAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBUaHJlYWQuc2xlZXAoMTAwMDApOwogICAgICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvcGxhaW4iKTsKLQkJCXJlc3BvbnNlLmdldFdyaXRlcigpLnByaW50bG4oIkhlcmUncyB5b3VyIGNvbnRlbnQuIik7Ci0JCX0gY2F0Y2goSW50ZXJydXB0ZWRFeGNlcHRpb24gaWUpIHsKLQkJCXRocm93IG5ldyBJT0V4Y2VwdGlvbihpZSk7Ci0JCX0KLQl9CisgICAgICAgICAgICByZXNwb25zZS5nZXRXcml0ZXIoKS5wcmludGxuKCJIZXJlJ3MgeW91ciBjb250ZW50LiIpOworICAgICAgICB9IGNhdGNoKEludGVycnVwdGVkRXhjZXB0aW9uIGllKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oaWUpOworICAgICAgICB9CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RyYWNlRW5hYmxlZC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdHJhY2VFbmFibGVkL1dlYlRlc3QuamF2YQppbmRleCA0YzA0NzRiLi4wOWNmZDZlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdHJhY2VFbmFibGVkL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdHJhY2VFbmFibGVkL1dlYlRlc3QuamF2YQpAQCAtMzIsNyArMzIsNyBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFwcHNlcnYtdGVzdHMiKTsKLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKIAogICAgICAgICBTdHJpbmcgaG9zdCA9IGFyZ3NbMF07CkBAIC00MSw3ICs0MSw3IEBACiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlRyYWNlIG5vdCBhbGxvd2VkIHRlc3QiKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgICAgICAgICAgICAgICArICIvU2VydmxldFRlc3QiKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW52b2tpbmcgdXJsOiAiICsgdXJsLnRvU3RyaW5nKCkpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RyYWNlRW5hYmxlZC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RyYWNlRW5hYmxlZC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGFmMTczZmYuLjBkZGVkNWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90cmFjZUVuYWJsZWQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdHJhY2VFbmFibGVkL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE0ICsxNSwxNCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS10cmFjZUVuYWJsZWQiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXRyYWNlRW5hYmxlZCIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii93ZWItdHJhY2VFbmFibGVkIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdHJhY2VFbmFibGVkL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90cmFjZUVuYWJsZWQvYnVpbGQueG1sCmluZGV4IDA0ODExOTcuLmYzNDFhZDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90cmFjZUVuYWJsZWQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90cmFjZUVuYWJsZWQvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC02MCwxNiArNjAsMTYgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNzcsNyArNzcsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgICA8amF2YWMKICAgICAgICAgICAgIHNyY2Rpcj0iLiIKQEAgLTk0LDEwICs5NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90cmFjZUVuYWJsZWQvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RyYWNlRW5hYmxlZC9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggMTk2YTYwNC4uODFlNjJlMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RyYWNlRW5hYmxlZC9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RyYWNlRW5hYmxlZC9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTIyLDEyICsyMiwxMiBAQAogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCIKICAgICAgICAgIHZlcnNpb249IjIuNCI+Ci0gICAgIAorCiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldFRlc3Q8L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0PC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAorICAgIDwvc2VydmxldD4KICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi9TZXJ2bGV0VGVzdDwvdXJsLXBhdHRlcm4+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdHJhaWxlckhlYWRlci9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdHJhaWxlckhlYWRlci9XZWJUZXN0LmphdmEKaW5kZXggMDNkY2M0ZS4uM2E2MjU4YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RyYWlsZXJIZWFkZXIvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90cmFpbGVySGVhZGVyL1dlYlRlc3QuamF2YQpAQCAtNDQsNyArNDQsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIElUIEdMQVNTRklTSC0xNjc2OCIpOwpAQCAtNzQsNyArNzQsNyBAQAogICAgICAgICAgICAgLy8gdHJhaWxpbmcgaGVhZGVycyBzaXplIGxpbWl0CiAgICAgICAgICAgICAvLyBuZWVkIHRvIHNldCBtYXhUcmFpbGVyU2l6ZSA9IDEwCiAgICAgICAgICAgICBTdHJpbmcgZHVtbXkgPSAiMDEyMzQ1Njc4OTAiOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHJlcSA9IG5ldyBTdHJpbmdbXSB7CiAgICAgICAgICAgICAgICAgIlBPU1QgLyIgKyB3ZWJUZXN0LmNvbnRleHRSb290ICsgIiBIVFRQLzEuMSIgKyBDUkxGICsKICAgICAgICAgICAgICAgICAiSG9zdDogYW55IiArIENSTEYgKwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RyYWlsZXJIZWFkZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90cmFpbGVySGVhZGVyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZTZmMThlMi4uNTc5YmUxNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RyYWlsZXJIZWFkZXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdHJhaWxlckhlYWRlci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXRyYWlsZXItaGVhZGVyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdHJhaWxlckhlYWRlci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdHJhaWxlckhlYWRlci9idWlsZC54bWwKaW5kZXggMDVjNzFkOC4uODJhZTAwNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RyYWlsZXJIZWFkZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90cmFpbGVySGVhZGVyL2J1aWxkLnhtbApAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YmFzZWRpcn0iIGluY2x1ZGVzPSJXZWJUZXN0Ki5jbGFzcyIvPgogICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDUsMjMgKzQ1LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzMsMTAgKzczLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RyYWlsZXJIZWFkZXIvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3RyYWlsZXJIZWFkZXIvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IGQwYWYxYjIuLjAwOTNjMDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi90cmFpbGVySGVhZGVyL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdHJhaWxlckhlYWRlci9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTIyLDcgKzIyLDcgQEAKICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8zXzAueHNkIgogICAgICAgICAgdmVyc2lvbj0iMy4wIj4KLSAgICAgCisKICAgICA8c2VydmxldD4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5FY2hvSGVhZGVyU2VydmxldDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz5FY2hvSGVhZGVyU2VydmxldDwvc2VydmxldC1jbGFzcz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi91bnByb3RlY3RlZENsYXNzZXMvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3VucHJvdGVjdGVkQ2xhc3Nlcy9XZWJUZXN0LmphdmEKaW5kZXggYjBiMTYzZS4uOGEwYTVkOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3VucHJvdGVjdGVkQ2xhc3Nlcy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3VucHJvdGVjdGVkQ2xhc3Nlcy9XZWJUZXN0LmphdmEKQEAgLTIxLDEwICsyMSwxMCBAQAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuKjsKIAogcHVibGljIGNsYXNzIFdlYlRlc3QgewotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50ID0gMDsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgRVhQRUNURURfQ09VTlQgPSAyOwotICAgIAorCiAgICAgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0PQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKQEAgLTMyLDcgKzMyLDcgQEAKIAogICAgICAgICAvLyBUaGUgc3RhdCByZXBvcnRlciB3cml0ZXMgb3V0IHRoZSB0ZXN0IGluZm8gYW5kIHJlc3VsdHMKICAgICAgICAgLy8gaW50byB0aGUgdG9wLWxldmVsIHF1aWNrbG9vayBkaXJlY3RvcnkgZHVyaW5nIGEgcnVuLgotICAgICAgCisKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiUGFja2FnZSBwcm90ZWN0aW9uIHVuaXQgdGVzdC4iKTsKIAogICAgICAgICBTdHJpbmcgaG9zdCA9IGFyZ3NbMF07CkBAIC00MSwxMyArNDEsMTMgQEAKIAogICAgICAgICBpbnQgcG9ydCA9IG5ldyBJbnRlZ2VyKHBvcnRTKS5pbnRWYWx1ZSgpOwogICAgICAgICBTdHJpbmcgbmFtZTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGdvR2V0KGhvc3QsIHBvcnQsIGNvbnRleHRSb290ICsgIi9TZXJ2bGV0VGVzdCIgKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoY291bnQgIT0gRVhQRUNURURfQ09VTlQpewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJUZXN0IFVOUFJFRElDVEVELUZBSUxVUkUiLCBzdGF0LkZBSUwpOwotICAgICAgICAgICAgfSAgICAgICAgICAgCisgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odC5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIlRlc3QgVU5QUkVESUNURUQtRkFJTFVSRSIsIHN0YXQuRkFJTCk7CkBAIC02NCw3ICs2NCw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigoIkdFVCAiICsgY29udGV4dFBhdGggKyAiIEhUVFAvMS4wXG4iKSk7CiAgICAgICAgIG9zLndyaXRlKCgiR0VUICIgKyBjb250ZXh0UGF0aCArICIgSFRUUC8xLjBcbiIpLmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHMuZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYmlzID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7CkBAIC03NiwyMCArNzYsMjAgQEAKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obGluZU51bSArICI6ICAiICsgbGluZSk7CiAgICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBzdGF0dXMgPSBsaW5lLnN1YnN0cmluZyhpbmRleCsyKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5lcXVhbHNJZ25vcmVDYXNlKCJQQVNTIikpewogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndlYi11bnByb3RlY3RlZENsYXNzOiAiICsgbGluZS5zdWJzdHJpbmcoMCxpbmRleCksIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2ViLXVucHJvdGVjdGVkQ2xhc3M6ICIgKyBsaW5lLnN1YnN0cmluZygwLGluZGV4KSwgc3RhdC5GQUlMKTsgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndlYi11bnByb3RlY3RlZENsYXNzOiAiICsgbGluZS5zdWJzdHJpbmcoMCxpbmRleCksIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBsaW5lTnVtKys7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBleCl7Ci0gICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsgICAKKyAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiVGVzdCBVTlBSRURJQ1RFRC1GQUlMVVJFIik7CiAgICAgICAgICB9CiAgICB9Ci0gIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdW5wcm90ZWN0ZWRDbGFzc2VzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdW5wcm90ZWN0ZWRDbGFzc2VzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYzZhY2NiZS4uZmZhMGQwZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3VucHJvdGVjdGVkQ2xhc3Nlcy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi91bnByb3RlY3RlZENsYXNzZXMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTQgKzE1LDE0IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXVucHJvdGVjdGVkQ2xhc3MiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXVucHJvdGVjdGVkQ2xhc3MiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvd2ViLXVucHJvdGVjdGVkQ2xhc3MiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi91bnByb3RlY3RlZENsYXNzZXMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3VucHJvdGVjdGVkQ2xhc3Nlcy9idWlsZC54bWwKaW5kZXggYTkwODkxOC4uZTJmYzI1NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3VucHJvdGVjdGVkQ2xhc3Nlcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3VucHJvdGVjdGVkQ2xhc3Nlcy9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDEwICs0MiwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgIDxqYXZhYwpAQCAtNTMsMTQgKzUzLDE0IEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTcyLDEwICs3MiwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi91bnByb3RlY3RlZENsYXNzZXMvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3VucHJvdGVjdGVkQ2xhc3Nlcy9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggN2ViNWVjMC4uNDJmNDkyOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3VucHJvdGVjdGVkQ2xhc3Nlcy9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3VucHJvdGVjdGVkQ2xhc3Nlcy9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTIzLDcgKzIzLDcgQEAKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIgogICAgICAgICAgdmVyc2lvbj0iMi40Ij4KIAotICAgIDxsaXN0ZW5lcj4gICAgIAorICAgIDxsaXN0ZW5lcj4KICAgICAgICAgPGxpc3RlbmVyLWNsYXNzPnRlc3QuU2VydmxldFRlc3Q8L2xpc3RlbmVyLWNsYXNzPgogICAgIDwvbGlzdGVuZXI+CiAKQEAgLTMxLDE0ICszMSwxNCBAQAogICAgICAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXRUZXN0PC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAKICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi9TZXJ2bGV0VGVzdDwvdXJsLXBhdHRlcm4+CiAgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiAKLSAgICAKKwogCiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi91bnByb3RlY3RlZENsYXNzZXMvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3VucHJvdGVjdGVkQ2xhc3Nlcy9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKaW5kZXggMmU4MjdiNS4uZjEyMjZjZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3VucHJvdGVjdGVkQ2xhc3Nlcy9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3VucHJvdGVjdGVkQ2xhc3Nlcy9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKQEAgLTM1LDcgKzM1LDcgQEAKICAgICBwcml2YXRlIFNlcnZsZXRDb250ZXh0IGNvbnRleHQ7CiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHN0YXR1cyA9ICJFWFBJUkVEOkZBSUwiOwogCi0gICAKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIuaW5pdChjb25maWcpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmluaXRdIik7CkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAgICAgICAgCisgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmRvUG9zdF0iKTsKIAogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi91c2VCdW5kbGVkSnNmV2l0aFRhZ0NvbXBpbGF0aW9uL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi91c2VCdW5kbGVkSnNmV2l0aFRhZ0NvbXBpbGF0aW9uL1dlYlRlc3QuamF2YQppbmRleCAyOGY3MjhmLi40OTBmNjA2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdXNlQnVuZGxlZEpzZldpdGhUYWdDb21waWxhdGlvbi9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3VzZUJ1bmRsZWRKc2ZXaXRoVGFnQ29tcGlsYXRpb24vV2ViVGVzdC5qYXZhCkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIElUIDcyNDYiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC00OSw4ICs0OSw4IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi91c2VCdW5kbGVkSnNmV2l0aFRhZ0NvbXBpbGF0aW9uL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdXNlQnVuZGxlZEpzZldpdGhUYWdDb21waWxhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDY1ZTM4YWEuLjJjODNiYjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi91c2VCdW5kbGVkSnNmV2l0aFRhZ0NvbXBpbGF0aW9uL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3VzZUJ1bmRsZWRKc2ZXaXRoVGFnQ29tcGlsYXRpb24vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS11c2UtYnVuZGxlZC1qc2Ytd2l0aC10YWctY29tcGlsYXRpb25uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdXNlQnVuZGxlZEpzZldpdGhUYWdDb21waWxhdGlvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdXNlQnVuZGxlZEpzZldpdGhUYWdDb21waWxhdGlvbi9idWlsZC54bWwKaW5kZXggZGEyNWIxYS4uODk2NjRkNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3VzZUJ1bmRsZWRKc2ZXaXRoVGFnQ29tcGlsYXRpb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi91c2VCdW5kbGVkSnNmV2l0aFRhZ0NvbXBpbGF0aW9uL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgpAQCAtNTAsNyArNTAsNyBAQAogICAgICAgICBkZXN0PSJqc2YtY2FyZGVtby53YXIiLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1uYW1lIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC02MiwxMCArNjIsMTAgQEAKICAgICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLW5hbWUiLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3YzSHR0cExpc3RlbmVyRHluYW1pY0NvbmZpZy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdjNIdHRwTGlzdGVuZXJEeW5hbWljQ29uZmlnL1dlYlRlc3QuamF2YQppbmRleCBkNGVmMTM1Li5mMTFiYjg4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdjNIdHRwTGlzdGVuZXJEeW5hbWljQ29uZmlnL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdjNIdHRwTGlzdGVuZXJEeW5hbWljQ29uZmlnL1dlYlRlc3QuamF2YQpAQCAtMjEsMTYgKzIxLDE2IEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci4qOwogCiBwdWJsaWMgY2xhc3MgV2ViVGVzdCB7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnQgPSAwOwogICAgIHByaXZhdGUgc3RhdGljIGludCBFWFBFQ1RFRF9DT1VOVCA9IDE7Ci0gICAgCisKICAgICBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQ9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKICAgICBwcml2YXRlIHN0YXRpYyBVUkxDb25uZWN0aW9uIGNvbm4gPSBudWxsOwogICAgIHByaXZhdGUgc3RhdGljIFVSTCB1cmw7CiAgICAgcHJpdmF0ZSBzdGF0aWMgT2JqZWN0T3V0cHV0U3RyZWFtIG9iamVjdFdyaXRlciA9IG51bGw7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgT2JqZWN0SW5wdXRTdHJlYW0gb2JqZWN0UmVhZGVyID0gbnVsbDsgIAorICAgIHByaXZhdGUgc3RhdGljIE9iamVjdElucHV0U3RyZWFtIG9iamVjdFJlYWRlciA9IG51bGw7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7CiAKQEAgLTUxLDcgKzUxLDcgQEAKICAgICAgICAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIHVybENvbm5lY3Rpb24gPSAoSHR0cFVSTENvbm5lY3Rpb24pY29ubjsKICAgICAgICAgICAgICAgIHVybENvbm5lY3Rpb24uc2V0RG9PdXRwdXQodHJ1ZSk7CiAgICAgICAgICAgICAgICBpbnQgcmVzcG9uc2VDb2RlPSAgdXJsQ29ubmVjdGlvbi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzcG9uc2UgY29kZTogIiArIHJlc3BvbnNlQ29kZSArICIgRXhwZWN0ZWQgY29kZTogMjAwIik7IAorICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXNwb25zZSBjb2RlOiAiICsgcmVzcG9uc2VDb2RlICsgIiBFeHBlY3RlZCBjb2RlOiAyMDAiKTsKICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZUNvZGUgPT0gMjAwKXsKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoInYzSHR0cExpc3RlbmVyRHluYW1pY0NvbmZpZyIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3YzSHR0cExpc3RlbmVyRHluYW1pY0NvbmZpZy9XZWJUZXN0Mi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3YzSHR0cExpc3RlbmVyRHluYW1pY0NvbmZpZy9XZWJUZXN0Mi5qYXZhCmluZGV4IGEzMmQ2MmUuLjdlOTg3ZGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92M0h0dHBMaXN0ZW5lckR5bmFtaWNDb25maWcvV2ViVGVzdDIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdjNIdHRwTGlzdGVuZXJEeW5hbWljQ29uZmlnL1dlYlRlc3QyLmphdmEKQEAgLTIxLDE2ICsyMSwxNiBAQAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuKjsKIAogcHVibGljIGNsYXNzIFdlYlRlc3QyIHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGludCBjb3VudCA9IDA7CiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IEVYUEVDVEVEX0NPVU5UID0gMTsKLSAgICAKKwogICAgIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdD0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogICAgIHByaXZhdGUgc3RhdGljIFVSTENvbm5lY3Rpb24gY29ubiA9IG51bGw7CiAgICAgcHJpdmF0ZSBzdGF0aWMgVVJMIHVybDsKICAgICBwcml2YXRlIHN0YXRpYyBPYmplY3RPdXRwdXRTdHJlYW0gb2JqZWN0V3JpdGVyID0gbnVsbDsKLSAgICBwcml2YXRlIHN0YXRpYyBPYmplY3RJbnB1dFN0cmVhbSBvYmplY3RSZWFkZXIgPSBudWxsOyAgCisgICAgcHJpdmF0ZSBzdGF0aWMgT2JqZWN0SW5wdXRTdHJlYW0gb2JqZWN0UmVhZGVyID0gbnVsbDsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKIApAQCAtNTEsNyArNTEsNyBAQAogICAgICAgICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gdXJsQ29ubmVjdGlvbiA9IChIdHRwVVJMQ29ubmVjdGlvbiljb25uOwogICAgICAgICAgICAgICAgdXJsQ29ubmVjdGlvbi5zZXREb091dHB1dCh0cnVlKTsKICAgICAgICAgICAgICAgIGludCByZXNwb25zZUNvZGU9ICB1cmxDb25uZWN0aW9uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXNwb25zZSBjb2RlOiAiICsgcmVzcG9uc2VDb2RlICsgIiBFeHBlY3RlZCBjb2RlOiAyMDAiKTsgCisgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc3BvbnNlIGNvZGU6ICIgKyByZXNwb25zZUNvZGUgKyAiIEV4cGVjdGVkIGNvZGU6IDIwMCIpOwogICAgICAgICAgICAgICAgaWYgKHVybENvbm5lY3Rpb24uZ2V0UmVzcG9uc2VDb2RlKCkgPT0gMjAwKXsKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoInYzSHR0cExpc3RlbmVyRHluYW1pY0NvbmZpZy1hZnRlclJlY29uZiIsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3YzSHR0cExpc3RlbmVyRHluYW1pY0NvbmZpZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3YzSHR0cExpc3RlbmVyRHluYW1pY0NvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDcxNWMwMjIuLjExNDFlODAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92M0h0dHBMaXN0ZW5lckR5bmFtaWNDb25maWcvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdjNIdHRwTGlzdGVuZXJEeW5hbWljQ29uZmlnL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE0ICsxNSwxNCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS12M0h0dHBMaXN0ZW5lckR5bmFtaWNDb25maWciLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXYzSHR0cExpc3RlbmVyRHluYW1pY0NvbmZpZyIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii8ke2FwcG5hbWV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdjNIdHRwTGlzdGVuZXJEeW5hbWljQ29uZmlnL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92M0h0dHBMaXN0ZW5lckR5bmFtaWNDb25maWcvYnVpbGQueG1sCmluZGV4IDdkZjk1ZjcuLmU5N2NjY2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92M0h0dHBMaXN0ZW5lckR5bmFtaWNDb25maWcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92M0h0dHBMaXN0ZW5lckR5bmFtaWNDb25maWcvYnVpbGQueG1sCkBAIC01MCw3ICs1MCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC01OCwxMCArNTgsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgIDxqYXZhYwpAQCAtNjksMTAgKzY5LDEwIEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iKi5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtODAsNyArODAsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuLWFnYWluIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC05Miw3ICs5Miw3IEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0MiI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC0xMDcsNyArMTA3LDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92M0h0dHBMaXN0ZW5lckR5bmFtaWNDb25maWcvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3YzSHR0cExpc3RlbmVyRHluYW1pY0NvbmZpZy9kZXNjcmlwdG9yL3dlYi54bWwKaW5kZXggZmRiMGMxNy4uYzFkNGJiNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3YzSHR0cExpc3RlbmVyRHluYW1pY0NvbmZpZy9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3YzSHR0cExpc3RlbmVyRHluYW1pY0NvbmZpZy9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTIyLDEyICsyMiwxMiBAQAogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCIKICAgICAgICAgIHZlcnNpb249IjIuNCI+Ci0gICAgIAorCiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldFRlc3Q8L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0PC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAorICAgIDwvc2VydmxldD4KICAgIDxzZXJ2bGV0LW1hcHBpbmc+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHVybC1wYXR0ZXJuPi9TZXJ2bGV0VGVzdDwvdXJsLXBhdHRlcm4+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdjNIdHRwTGlzdGVuZXJEeW5hbWljQ29uZmlnL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92M0h0dHBMaXN0ZW5lckR5bmFtaWNDb25maWcvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCmluZGV4IDc4MWJjY2YuLmMwNzMyNzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92M0h0dHBMaXN0ZW5lckR5bmFtaWNDb25maWcvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92M0h0dHBMaXN0ZW5lckR5bmFtaWNDb25maWcvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiBwdWJsaWMgY2xhc3MgU2VydmxldFRlc3QgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAKICAgICBwcml2YXRlIFNlcnZsZXRDb250ZXh0IGNvbnRleHQ7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKICAgICAgICAgY29udGV4dCA9IGNvbmZpZy5nZXRTZXJ2bGV0Q29udGV4dCgpOwpAQCAtMzQsMTIgKzM0LDEyIEBACiAgICAgICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAgICAgICAgCisgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmRvUG9zdF0iKTsKLSAgICAgICAgCisKICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKLSAgICAgICAgCQorCiAgICAgICAgIG91dC5wcmludGxuKCJURVNUOjpQQVNTIik7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZhbHZlR2xhc3NGaXNoU3R5bGVCYWNrd2FyZENvbXBhdGlibGUvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZhbHZlR2xhc3NGaXNoU3R5bGVCYWNrd2FyZENvbXBhdGlibGUvV2ViVGVzdC5qYXZhCmluZGV4IDg1YmFiYmYuLmIwZjk4ZjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92YWx2ZUdsYXNzRmlzaFN0eWxlQmFja3dhcmRDb21wYXRpYmxlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmFsdmVHbGFzc0Zpc2hTdHlsZUJhY2t3YXJkQ29tcGF0aWJsZS9XZWJUZXN0LmphdmEKQEAgLTI0LDExICsyNCwxMSBAQAogICogcHJpb3IgdG8gVjMpLCB3aGljaCBoYXMgYmVlbiByZW5hbWVkIHRvCiAgKiBvcmcuZ2xhc3NmaXNoLndlYi52YWx2ZS5HbGFzc0Zpc2hWYWx2ZSBpbiBWMywgY29udGludWUgdG8gd29yayBpbiBWMwogICogKGluIGEgYmluYXJ5LWNvbXBhdGlibGUgd2F5KS4KLSAqIAorICoKICAqIFRoaXMgdGVzdCBkZXBsb3lzIGEgd2ViYXBwIHRoYXQgc3BlY2lmaWVzIGEgR2xhc3NGaXNoLXN0eWxlIHZhbHZlCiAgKiAoY29tcGlsZWQgYWdhaW5zdCB0aGUgIm9sZCIgVmFsdmUgaW50ZXJmYWNlKSBpbiBpdHMgc3VuLXdlYi54bWwuCiAgKiBUaGUgdmFsdmUgYWRkcyBhbiBhdHRyaWJ1dGUgdG8gdGhlIHJlcXVlc3QuCi0gKiAKKyAqCiAgKiBXaGVuIHRoZSB0ZXN0IGFjY2Vzc2VzIHRoZSB3ZWJhcHAncyBzZXJ2bGV0LCB0aGUgc2VydmxldCBjaGVja3MgZm9yIHRoZQogICogcHJlc2VuY2Ugb2YgdGhpcyBhdHRyaWJ1dGUgaW4gdGhlIHJlcXVlc3QsIGFuZCB3aWxsIGNhdXNlIHRoZSB0ZXN0IHRvIGZhaWwKICAqIGlmIHRoZSBhdHRyaWJ1dGUgaXMgbWlzc2luZy4KQEAgLTUxLDcgKzUxLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBlbnN1cmluZyBiaW5hcnkgY29tcGF0aWJpbGl0eSAiICsKQEAgLTY3LDExICs2NywxMSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgICArIGNvbnRleHRSb290ICsgIi90ZXN0Iik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKQEAgLTkxLDcgKzkxLDcgQEAKICAgICAgICAgICAgIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogICAgICAgICAgICAgU3RyaW5nIGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpOwogICAgICAgICAgICAgaWYgKCFFWFBFQ1RFRF9SRVNQT05TRS5lcXVhbHMobGluZSkpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNURURfUkVTUE9OU0UgKyAiLCByZWNlaXZlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lKTsKICAgICAgICAgICAgIH0KQEAgLTExMCw2ICsxMTAsNiBAQAogICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKSB7CiAgICAgICAgICAgICAgICAgLy8gaWdub3JlCiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgCisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmFsdmVHbGFzc0Zpc2hTdHlsZUJhY2t3YXJkQ29tcGF0aWJsZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZhbHZlR2xhc3NGaXNoU3R5bGVCYWNrd2FyZENvbXBhdGlibGUvYnVpbGQucHJvcGVydGllcwppbmRleCA0NzliNThlLi5hZjEyYjRmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmFsdmVHbGFzc0Zpc2hTdHlsZUJhY2t3YXJkQ29tcGF0aWJsZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92YWx2ZUdsYXNzRmlzaFN0eWxlQmFja3dhcmRDb21wYXRpYmxlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tdmFsdmUtZ2xhc3NGaXNoLXN0eWxlLWJhY2t3YXJkLWNvbXBhdGlibGUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92YWx2ZUdsYXNzRmlzaFN0eWxlQmFja3dhcmRDb21wYXRpYmxlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92YWx2ZUdsYXNzRmlzaFN0eWxlQmFja3dhcmRDb21wYXRpYmxlL2J1aWxkLnhtbAppbmRleCAwMGZkYWQzLi5jMzk3NzZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmFsdmVHbGFzc0Zpc2hTdHlsZUJhY2t3YXJkQ29tcGF0aWJsZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZhbHZlR2xhc3NGaXNoU3R5bGVCYWNrd2FyZENvbXBhdGlibGUvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwyMyArNDIsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MCwxMCArNzAsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmFsdmVUb21jYXRTdHlsZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmFsdmVUb21jYXRTdHlsZS9XZWJUZXN0LmphdmEKaW5kZXggNmQ2ZDhjYS4uY2RjMzQ2ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZhbHZlVG9tY2F0U3R5bGUvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92YWx2ZVRvbWNhdFN0eWxlL1dlYlRlc3QuamF2YQpAQCAtMjAsMTIgKzIwLDEyIEBACiAKIC8qCiAgKiBVbml0IHRlc3QgZm9yIHRlc3Rpbmcgc3VwcG9ydCBmb3IgVG9tY2F0LXN0eWxlIHZhbHZlcy4KLSAqIAorICoKICAqIFRoaXMgdGVzdCBkZXBsb3lzIGEgd2ViYXBwIHRoYXQgc3BlY2lmaWVzIDMgdmFsdmVzIGluIGl0cyBzdW4td2ViLnhtbDoKICAqIDIgVG9tY2F0LXN0eWxlIHZhbHZlcywgYW5kIDEgR2xhc3NGaXNoLXN0eWxlIHZhbHZlLiBUaGUgR2xhc3NGaXNoLXN0eWxlCiAgKiB2YWx2ZSBpcyBhZGRlZCBpbiBiZXR3ZWVuIHRoZSB0d28gVG9tY2F0LXN0eWxlIHZhbHZlcywgY2F1c2luZyBpdCB0byBiZQogICogd3JhcHBlZCAoYnkgdGhlIGNvbnRhaW5lcikgaW5zaWRlIGEgVG9tY2F0VmFsdmVBZGFwdGVyLgotICogCisgKgogICogRWFjaCBvZiB0aGUgdmFsdmVzIGFkZHMgYW4gYXR0cmlidXRlIHRvIHRoZSByZXF1ZXN0LgogICoKICAqIFdoZW4gdGhlIHRlc3QgYWNjZXNzZXMgdGhlIHdlYmFwcCdzIHNlcnZsZXQsIGl0IGNoZWNrcyBmb3IgdGhlIHByZXNlbmNlCkBAIC01MCw3ICs1MCw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgVG9tY2F0LXN0eWxlIHZhbHZlcyIpOwpAQCAtNjQsMTEgKzY0LDExIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL3Rlc3QiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwpAQCAtODgsNyArODgsNyBAQAogICAgICAgICAgICAgaW5wdXQgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAgICAgICAgICAgICBTdHJpbmcgbGluZSA9IGlucHV0LnJlYWRMaW5lKCk7CiAgICAgICAgICAgICBpZiAoIUVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RFRF9SRVNQT05TRSArICIsIHJlY2VpdmVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUpOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZhbHZlVG9tY2F0U3R5bGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92YWx2ZVRvbWNhdFN0eWxlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggM2Q0OWFkYy4uYzI2MTkyNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZhbHZlVG9tY2F0U3R5bGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmFsdmVUb21jYXRTdHlsZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXZhbHZlLXRvbWNhdC1zdHlsZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZhbHZlVG9tY2F0U3R5bGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZhbHZlVG9tY2F0U3R5bGUvYnVpbGQueG1sCmluZGV4IDg0NTU2YjAuLmZiNmEyZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92YWx2ZVRvbWNhdFN0eWxlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmFsdmVUb21jYXRTdHlsZS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmFsdmVUb21jYXRTdHlsZS9saWIvdmFsdmVzL1RvbWNhdFZhbHZlQmFzZV8xLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmFsdmVUb21jYXRTdHlsZS9saWIvdmFsdmVzL1RvbWNhdFZhbHZlQmFzZV8xLmphdmEKaW5kZXggYjlhYWY2NC4uOWEwZWYzMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZhbHZlVG9tY2F0U3R5bGUvbGliL3ZhbHZlcy9Ub21jYXRWYWx2ZUJhc2VfMS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92YWx2ZVRvbWNhdFN0eWxlL2xpYi92YWx2ZXMvVG9tY2F0VmFsdmVCYXNlXzEuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogcHVibGljIGNsYXNzIFRvbWNhdFZhbHZlQmFzZV8xIGV4dGVuZHMgVmFsdmVCYXNlIHsKIAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0SW5mbygpIHsKLQlyZXR1cm4gZ2V0Q2xhc3MoKS5nZXROYW1lKCk7CisgICAgcmV0dXJuIGdldENsYXNzKCkuZ2V0TmFtZSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGludm9rZShSZXF1ZXN0IHJlcXVlc3QsIFJlc3BvbnNlIHJlc3BvbnNlKQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZhbHZlVG9tY2F0U3R5bGUvbGliL3ZhbHZlcy9Ub21jYXRWYWx2ZUJhc2VfMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZhbHZlVG9tY2F0U3R5bGUvbGliL3ZhbHZlcy9Ub21jYXRWYWx2ZUJhc2VfMi5qYXZhCmluZGV4IGVmMmRmNmUuLjFiNzM1YjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92YWx2ZVRvbWNhdFN0eWxlL2xpYi92YWx2ZXMvVG9tY2F0VmFsdmVCYXNlXzIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmFsdmVUb21jYXRTdHlsZS9saWIvdmFsdmVzL1RvbWNhdFZhbHZlQmFzZV8yLmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKIHB1YmxpYyBjbGFzcyBUb21jYXRWYWx2ZUJhc2VfMiBleHRlbmRzIFZhbHZlQmFzZSB7CiAKICAgICBwdWJsaWMgU3RyaW5nIGdldEluZm8oKSB7Ci0JcmV0dXJuIGdldENsYXNzKCkuZ2V0TmFtZSgpOworICAgIHJldHVybiBnZXRDbGFzcygpLmdldE5hbWUoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBpbnZva2UoUmVxdWVzdCByZXF1ZXN0LCBSZXNwb25zZSByZXNwb25zZSkKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92YWx2ZVdpdGhQYXJhbXMvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZhbHZlV2l0aFBhcmFtcy9XZWJUZXN0LmphdmEKaW5kZXggOGNmZTg0OS4uOGM2ZWNhZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZhbHZlV2l0aFBhcmFtcy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZhbHZlV2l0aFBhcmFtcy9XZWJUZXN0LmphdmEKQEAgLTIzLDEyICsyMywxMiBAQAogICoKICAqICBodHRwczovL2dsYXNzZmlzaC5kZXYuamF2YS5uZXQvaXNzdWVzL3Nob3dfYnVnLmNnaT9pZD03MTc3CiAgKiAgKCJBZGQgdmFsdmUgY29uZmlndXJhdGlvbiBzdXBwb3J0IHRvIHN1bi13ZWIueG1sIikKLSAqIAorICoKICAqIFRoaXMgdGVzdCBkZXBsb3lzIGEgd2ViYXBwIHRoYXQgc3BlY2lmaWVzIDMgdmFsdmVzIGluIGl0cyBzdW4td2ViLnhtbDoKICAqIDIgVG9tY2F0LXN0eWxlIHZhbHZlcywgYW5kIDEgR2xhc3NGaXNoLXN0eWxlIHZhbHZlLiBUaGUgR2xhc3NGaXNoLXN0eWxlCiAgKiB2YWx2ZSBpcyBhZGRlZCBpbiBiZXR3ZWVuIHRoZSB0d28gVG9tY2F0LXN0eWxlIHZhbHZlcywgY2F1c2luZyBpdCB0byBiZQogICogd3JhcHBlZCAoYnkgdGhlIGNvbnRhaW5lcikgaW5zaWRlIGEgVG9tY2F0VmFsdmVBZGFwdGVyLgotICogCisgKgogICogRWFjaCBvZiB0aGUgdmFsdmVzIGFkZHMgYW4gYXR0cmlidXRlIHRvIHRoZSByZXF1ZXN0LgogICoKICAqIFdoZW4gdGhlIHRlc3QgYWNjZXNzZXMgdGhlIHdlYmFwcCdzIHNlcnZsZXQsIGl0IGNoZWNrcyBmb3IgdGhlIHByZXNlbmNlCkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgSVQgNzE3NyIpOwpAQCAtNjcsMTEgKzY3LDExIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL3Rlc3QiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwpAQCAtOTEsMTAgKzkxLDEwIEBACiAgICAgICAgICAgICBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKICAgICAgICAgICAgIFN0cmluZyBsaW5lID0gaW5wdXQucmVhZExpbmUoKTsKICAgICAgICAgICAgIGlmICghRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsgCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSk7Ci0gICAgICAgICAgICB9ICAgIAorICAgICAgICAgICAgfQogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBpZiAoaXMgIT0gbnVsbCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZhbHZlV2l0aFBhcmFtcy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZhbHZlV2l0aFBhcmFtcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDdjMmM5MTguLjUyNTA4ZDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92YWx2ZVdpdGhQYXJhbXMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmFsdmVXaXRoUGFyYW1zL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tdmFsdmUtd2l0aC1wcm9wZXJ0aWVzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmFsdmVXaXRoUGFyYW1zL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92YWx2ZVdpdGhQYXJhbXMvYnVpbGQueG1sCmluZGV4IDAwZmRhZDMuLmMzOTc3NmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92YWx2ZVdpdGhQYXJhbXMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92YWx2ZVdpdGhQYXJhbXMvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwyMyArNDIsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MCwxMCArNzAsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmFsdmVXaXRoUGFyYW1zL2xpYi92YWx2ZXMvVGVzdFZhbHZlMi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZhbHZlV2l0aFBhcmFtcy9saWIvdmFsdmVzL1Rlc3RWYWx2ZTIuamF2YQppbmRleCBlZjQ4YjZiLi44OTJhYjlhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmFsdmVXaXRoUGFyYW1zL2xpYi92YWx2ZXMvVGVzdFZhbHZlMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92YWx2ZVdpdGhQYXJhbXMvbGliL3ZhbHZlcy9UZXN0VmFsdmUyLmphdmEKQEAgLTM0LDEwICszNCwxMCBAQAogICAgICAgICBpZiAodGVzdFByb3BlcnR5ID09IG51bGwpIHsKICAgICAgICAgICAgIHJlcXVlc3QuZ2V0UmVxdWVzdCgpLnNldEF0dHJpYnV0ZSgidmFsdmU2IiwgIm51bGxfdmFsdWUiKTsKICAgICAgICAgfQotCWVsc2UgaWYgKCIiLmVxdWFscyh0ZXN0UHJvcGVydHkpKSB7CisgICAgZWxzZSBpZiAoIiIuZXF1YWxzKHRlc3RQcm9wZXJ0eSkpIHsKICAgICAgICAgICAgIHJlcXVlc3QuZ2V0UmVxdWVzdCgpLnNldEF0dHJpYnV0ZSgidmFsdmU1IiwgImVtcHR5X3ZhbHVlIik7CiAgICAgICAgIH0KLQllbHNlIHsKKyAgICBlbHNlIHsKICAgICAgICAgICAgIHJlcXVlc3QuZ2V0UmVxdWVzdCgpLnNldEF0dHJpYnV0ZSgidmFsdmU0IiwgdGVzdFByb3BlcnR5KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gR2xhc3NGaXNoVmFsdmUuSU5WT0tFX05FWFQ7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckFsdGVybmF0ZURvY3Jvb3QvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJBbHRlcm5hdGVEb2Nyb290L1dlYlRlc3QuamF2YQppbmRleCAxZDM3NmFjLi43ODU5ZWRjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckFsdGVybmF0ZURvY3Jvb3QvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQWx0ZXJuYXRlRG9jcm9vdC9XZWJUZXN0LmphdmEKQEAgLTc4LDcgKzc4LDcgQEAKICAgICAgICAgaG9zdCA9IGFyZ3NbMF07CiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBhbHRlcm5hdGUgZG9jcm9vdCBzdXBwb3J0Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtODYsOCArODYsOCBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoIi9kb21haW4ueG1sIiwgIjxkb21haW4gIik7CiAgICAgICAgICAgICBpbnZva2UoIi9zZXJ2ZXIucG9saWN5IiwgImdyYW50IGNvZGVCYXNlIik7CiAgICAgICAgICAgICBpbnZva2UoIi9jb25maWcvbG9naW4uY29uZiIsICJmaWxlUmVhbG0iKTsKQEAgLTEwNCw3ICsxMDQsNyBAQAogICAgICAqIGluIG9yZGVyIGZvciB0aGUgdGVzdCB0byBwYXNzCiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZShTdHJpbmcgdXJpLCBTdHJpbmcgZXhwZWN0ZWQpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQgKyB1cmkpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJBbHRlcm5hdGVEb2Nyb290L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckFsdGVybmF0ZURvY3Jvb3QvYnVpbGQucHJvcGVydGllcwppbmRleCBmODhhMmU5Li4wN2MzMjFmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckFsdGVybmF0ZURvY3Jvb3QvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckFsdGVybmF0ZURvY3Jvb3QvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS12aXJ0dWFsLXNlcnZlci1hbHRlcm5hdGUtZG9jcm9vdCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJBbHRlcm5hdGVEb2Nyb290L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQWx0ZXJuYXRlRG9jcm9vdC9idWlsZC54bWwKaW5kZXggNzg3OGMyMC4uOTUwZGIzNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJBbHRlcm5hdGVEb2Nyb290L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckFsdGVybmF0ZURvY3Jvb3QvYnVpbGQueG1sCkBAIC0zNiwxNCArMzYsMTQgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIgLz4KQEAgLTU0LDEyICs1NCwxMiBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiIC8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0uaHR0cC1zZXJ2aWNlLnZpcnR1YWwtc2VydmVyLnNlcnZlci5wcm9wZXJ0eS5hbHRlcm5hdGVkb2Nyb290XzI9JnF1b3Q7ZnJvbT0qLnBvbGljeSBkaXI9JHtlbnYuUzFBU19IT01FfS9kb21haW5zLyR7YWRtaW4uZG9tYWlufS9jb25maWcmcXVvdDsiLz4KLSAgICAgICAgPC9hbnRjYWxsPiAKKyAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0IiAvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9IiR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Lmh0dHAtc2VydmljZS52aXJ0dWFsLXNlcnZlci5zZXJ2ZXIucHJvcGVydHkuYWx0ZXJuYXRlZG9jcm9vdF8zPSZxdW90O2Zyb209L2NvbmZpZy8qIGRpcj0ke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvJHthZG1pbi5kb21haW59JnF1b3Q7Ii8+Ci0gICAgICAgIDwvYW50Y2FsbD4gCisgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC03Miw3ICs3Miw3IEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0b3JlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiIC8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckFsdGVybmF0ZURvY3Jvb3REeW5hbWljUmVjb25maWcvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJBbHRlcm5hdGVEb2Nyb290RHluYW1pY1JlY29uZmlnL1dlYlRlc3QuamF2YQppbmRleCBiYWY4ZjgwLi4xOTM3NGM4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckFsdGVybmF0ZURvY3Jvb3REeW5hbWljUmVjb25maWcvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQWx0ZXJuYXRlRG9jcm9vdER5bmFtaWNSZWNvbmZpZy9XZWJUZXN0LmphdmEKQEAgLTgxLDcgKzgxLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgYWx0ZXJuYXRlIGRvY3Jvb3Qgc3VwcG9ydCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTg5LDggKzg5LDggQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCIvZG9tYWluLnhtbCIsICI8ZG9tYWluICIpOwogICAgICAgICAgICAgaW52b2tlKCIvc2VydmVyLnBvbGljeSIsICJncmFudCBjb2RlQmFzZSIpOwogICAgICAgICAgICAgaW52b2tlKCIvY29uZmlnL2xvZ2luLmNvbmYiLCAiZmlsZVJlYWxtIik7CkBAIC0xMDcsNyArMTA3LDcgQEAKICAgICAgKiBpbiBvcmRlciBmb3IgdGhlIHRlc3QgdG8gcGFzcwogICAgICAqLwogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoU3RyaW5nIHVyaSwgU3RyaW5nIGV4cGVjdGVkKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0ICsgdXJpKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQWx0ZXJuYXRlRG9jcm9vdER5bmFtaWNSZWNvbmZpZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJBbHRlcm5hdGVEb2Nyb290RHluYW1pY1JlY29uZmlnL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOGQ0NjZiNi4uYjAxZmE2NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJBbHRlcm5hdGVEb2Nyb290RHluYW1pY1JlY29uZmlnL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJBbHRlcm5hdGVEb2Nyb290RHluYW1pY1JlY29uZmlnL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tdmlydHVhbC1zZXJ2ZXItYWx0ZXJuYXRlLWRvY3Jvb3QtZHluYW1pYy1yZWNvbmZpZyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJBbHRlcm5hdGVEb2Nyb290RHluYW1pY1JlY29uZmlnL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQWx0ZXJuYXRlRG9jcm9vdER5bmFtaWNSZWNvbmZpZy9idWlsZC54bWwKaW5kZXggMjgwZTcwNS4uNjQ1ZWIxOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJBbHRlcm5hdGVEb2Nyb290RHluYW1pY1JlY29uZmlnL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckFsdGVybmF0ZURvY3Jvb3REeW5hbWljUmVjb25maWcvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwxNiArNDQsMTYgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIgLz4KQEAgLTY0LDEyICs2NCwxMiBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiIC8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0uaHR0cC1zZXJ2aWNlLnZpcnR1YWwtc2VydmVyLnNlcnZlci5wcm9wZXJ0eS5hbHRlcm5hdGVkb2Nyb290XzI9JnF1b3Q7ZnJvbT0qLnBvbGljeSBkaXI9JHtlbnYuUzFBU19IT01FfS9kb21haW5zLyR7YWRtaW4uZG9tYWlufS9jb25maWcmcXVvdDsiLz4KLSAgICAgICAgPC9hbnRjYWxsPiAKKyAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0IiAvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9IiR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Lmh0dHAtc2VydmljZS52aXJ0dWFsLXNlcnZlci5zZXJ2ZXIucHJvcGVydHkuYWx0ZXJuYXRlZG9jcm9vdF8zPSZxdW90O2Zyb209L2NvbmZpZy8qIGRpcj0ke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvJHthZG1pbi5kb21haW59JnF1b3Q7Ii8+Ci0gICAgICAgIDwvYW50Y2FsbD4gCisgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CkBAIC04MSw3ICs4MSw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTkzLDEwICs5MywxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RvcmUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckFsdGVybmF0ZURvY3Jvb3RSZXN0YXJ0L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQWx0ZXJuYXRlRG9jcm9vdFJlc3RhcnQvV2ViVGVzdC5qYXZhCmluZGV4IDE4YmZjZWYuLjNhNjM1ZjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQWx0ZXJuYXRlRG9jcm9vdFJlc3RhcnQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQWx0ZXJuYXRlRG9jcm9vdFJlc3RhcnQvV2ViVGVzdC5qYXZhCkBAIC0xOSw3ICsxOSw3IEBACiBpbXBvcnQgY29tLnN1bi5lanRlLmNjbC5yZXBvcnRlci4qOwogCiAvKioKLSAqIFVuaXQgdGVzdCBmb3IgaXNzdWUgMTYyNTIgCisgKiBVbml0IHRlc3QgZm9yIGlzc3VlIDE2MjUyCiAgKgogICogVW5pdCB0ZXN0IGZvciBkeW5hbWljIHJlY29uZmlndXJhdGlvbiBvZiBhbHRlcm5hdGUgZG9jcm9vdCBzdXBwb3J0LgogICoKQEAgLTc3LDcgKzc3LDcgQEAKICAgICBwcml2YXRlIFN0cmluZyBob3N0OwogICAgIHByaXZhdGUgU3RyaW5nIHBvcnQ7CiAgICAgcHJpdmF0ZSBTdHJpbmcgY29udGV4dFJvb3Q7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgZXhwZWN0ZWRSZXNwb25zZUNvZGU7IAorICAgIHByaXZhdGUgU3RyaW5nIGV4cGVjdGVkUmVzcG9uc2VDb2RlOwogICAgIHByaXZhdGUgYm9vbGVhbiByZXN1bHQgPSB0cnVlOwogCiAgICAgcHVibGljIFdlYlRlc3QoU3RyaW5nW10gYXJncykgewpAQCAtODYsNyArODYsNyBAQAogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgICAgIGV4cGVjdGVkUmVzcG9uc2VDb2RlID0gYXJnc1szXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgYWx0ZXJuYXRlIGRvY3Jvb3Qgc3VwcG9ydCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTk0LDggKzk0LDggQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCIvZG9tYWluLnhtbCIsICI8ZG9tYWluICIpOwogICAgICAgICAgICAgaW52b2tlKCIvc2VydmVyLnBvbGljeSIsICJncmFudCBjb2RlQmFzZSIpOwogICAgICAgICAgICAgaW52b2tlKCIvY29uZmlnL2xvZ2luLmNvbmYiLCAiZmlsZVJlYWxtIik7CkBAIC0xMTMsNyArMTEzLDcgQEAKICAgICAgKiBpbiBvcmRlciBmb3IgdGhlIHRlc3QgdG8gcGFzcwogICAgICAqLwogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoU3RyaW5nIHVyaSwgU3RyaW5nIGV4cGVjdGVkKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKIAogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQgKyB1cmkpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJBbHRlcm5hdGVEb2Nyb290UmVzdGFydC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJBbHRlcm5hdGVEb2Nyb290UmVzdGFydC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDhkNDY2YjYuLmIwMWZhNjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQWx0ZXJuYXRlRG9jcm9vdFJlc3RhcnQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckFsdGVybmF0ZURvY3Jvb3RSZXN0YXJ0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tdmlydHVhbC1zZXJ2ZXItYWx0ZXJuYXRlLWRvY3Jvb3QtZHluYW1pYy1yZWNvbmZpZyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJBbHRlcm5hdGVEb2Nyb290UmVzdGFydC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckFsdGVybmF0ZURvY3Jvb3RSZXN0YXJ0L2J1aWxkLnhtbAppbmRleCAxNmQ2ZjFlLi5hMjhmOGQxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckFsdGVybmF0ZURvY3Jvb3RSZXN0YXJ0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckFsdGVybmF0ZURvY3Jvb3RSZXN0YXJ0L2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMTYgKzQ0LDE2IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiIC8+CkBAIC02NCwxMiArNjQsMTIgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0IiAvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9IiR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Lmh0dHAtc2VydmljZS52aXJ0dWFsLXNlcnZlci5zZXJ2ZXIucHJvcGVydHkuYWx0ZXJuYXRlZG9jcm9vdF8yPSZxdW90O2Zyb209Ki5wb2xpY3kgZGlyPSR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy8ke2FkbWluLmRvbWFpbn0vY29uZmlnJnF1b3Q7Ii8+Ci0gICAgICAgIDwvYW50Y2FsbD4gCisgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIgLz4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIgogICAgICAgICAgICAgICAgICAgIHZhbHVlPSIke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfS5odHRwLXNlcnZpY2UudmlydHVhbC1zZXJ2ZXIuc2VydmVyLnByb3BlcnR5LmFsdGVybmF0ZWRvY3Jvb3RfMz0mcXVvdDtmcm9tPS9jb25maWcvKiBkaXI9JHtlbnYuUzFBU19IT01FfS9kb21haW5zLyR7YWRtaW4uZG9tYWlufSZxdW90OyIvPgotICAgICAgICA8L2FudGNhbGw+IAorICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgpAQCAtOTYsNyArOTYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0icmVzdGFydCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQtc2VydmVyIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtMTQzLDcgKzE0Myw3IEBACiAgICAgICAgIDxhcmcgbGluZT0iJHthcy5wcm9wc30iLz4KICAgICAgICAgPGFyZyBsaW5lPSJ0ZXN0Ii8+CiAgICAgICAgIDwvZXhlYz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVzdG9yZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQWx0ZXJuYXRlRG9jcm9vdFdlbGNvbWVQYWdlUmVkaXJlY3QvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJBbHRlcm5hdGVEb2Nyb290V2VsY29tZVBhZ2VSZWRpcmVjdC9XZWJUZXN0LmphdmEKaW5kZXggZTBiNDQ5Ny4uOTk1ODk0ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJBbHRlcm5hdGVEb2Nyb290V2VsY29tZVBhZ2VSZWRpcmVjdC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJBbHRlcm5hdGVEb2Nyb290V2VsY29tZVBhZ2VSZWRpcmVjdC9XZWJUZXN0LmphdmEKQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgaG9zdCA9IGFyZ3NbMF07CiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBhbHRlcm5hdGUgZG9jcm9vdCBzdXBwb3J0Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNjEsOCArNjEsOCBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckFsdGVybmF0ZURvY3Jvb3RXZWxjb21lUGFnZVJlZGlyZWN0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckFsdGVybmF0ZURvY3Jvb3RXZWxjb21lUGFnZVJlZGlyZWN0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZDgxMmQ1Ni4uMDAyYWE3MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJBbHRlcm5hdGVEb2Nyb290V2VsY29tZVBhZ2VSZWRpcmVjdC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQWx0ZXJuYXRlRG9jcm9vdFdlbGNvbWVQYWdlUmVkaXJlY3QvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS12aXJ0dWFsLXNlcnZlci1hbHRlcm5hdGUtZG9jcm9vdC13ZWxjb21lcGFnZS1yZWRpcmVjdCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJBbHRlcm5hdGVEb2Nyb290V2VsY29tZVBhZ2VSZWRpcmVjdC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckFsdGVybmF0ZURvY3Jvb3RXZWxjb21lUGFnZVJlZGlyZWN0L2J1aWxkLnhtbAppbmRleCAxZWYxNDZlLi4zZmE1ZjUyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckFsdGVybmF0ZURvY3Jvb3RXZWxjb21lUGFnZVJlZGlyZWN0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckFsdGVybmF0ZURvY3Jvb3RXZWxjb21lUGFnZVJlZGlyZWN0L2J1aWxkLnhtbApAQCAtNDAsNyArNDAsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00OCwyOCArNDgsMjggQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtYWx0ZXJuYXRlLXJlc291cmNlcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0IiAvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9IiR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Lmh0dHAtc2VydmljZS52aXJ0dWFsLXNlcnZlci5zZXJ2ZXIucHJvcGVydHkuYWx0ZXJuYXRlZG9jcm9vdF8xPSZxdW90O2Zyb209L215dGVzdCBkaXI9L3RtcCZxdW90OyIvPgotICAgICAgICA8L2FudGNhbGw+IAorICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiIC8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0uaHR0cC1zZXJ2aWNlLnZpcnR1YWwtc2VydmVyLnNlcnZlci5wcm9wZXJ0eS5hbHRlcm5hdGVkb2Nyb290XzI9JnF1b3Q7ZnJvbT0vbXl0ZXN0LyogZGlyPS90bXAmcXVvdDsiLz4KLSAgICAgICAgPC9hbnRjYWxsPiAKKyAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtYWx0ZXJuYXRlLXJlc291cmNlcyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJBdXRoUmVhbG1Qcm9wZXJ0eS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckF1dGhSZWFsbVByb3BlcnR5L1dlYlRlc3QuamF2YQppbmRleCAyOTBhMWQwLi41NmExMjU5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckF1dGhSZWFsbVByb3BlcnR5L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckF1dGhSZWFsbVByb3BlcnR5L1dlYlRlc3QuamF2YQpAQCAtNTYsNyArNTYsNyBAQAogICAgICAgICBhZG1pblVzZXIgPSBhcmdzWzNdOwogICAgICAgICBhZG1pblBhc3N3b3JkID0gYXJnc1s0XTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBHbGFzc0Zpc2ggSXNzdWUgMTUzNyIpOwpAQCAtNjksNyArNjksNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgcnVuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CkBAIC05OSw3ICs5OSw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZ2V0KTsKICAgICAgICAgICAgIG9zLndyaXRlKGdldC5nZXRCeXRlcygpKTsKICAgICAgICAgICAgIG9zLndyaXRlKCJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgICAgICBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgICAgIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogCkBAIC0xNDcsNyArMTQ3LDcgQEAKICAgICAgICAgICAgIFN0cmluZyBjb29raWUgPSAiQ29va2llOiAiICsganNlc3Npb25JZCArICJcbiI7CiAgICAgICAgICAgICBvcy53cml0ZShjb29raWUuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICAgICAgaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgICAgICBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKIApAQCAtMTk1LDcgKzE5NSw3IEBACiAgICAgICAgICAgICBTdHJpbmcgY29va2llID0gIkNvb2tpZTogIiArIGpzZXNzaW9uSWQgKyAiXG4iOwogICAgICAgICAgICAgb3Mud3JpdGUoY29va2llLmdldEJ5dGVzKCkpOwogICAgICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgICAgIGlzID0gc29jay5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICAgICAgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAKQEAgLTI0Nyw3ICsyNDcsNyBAQAogICAgICAgICAgICAgU3RyaW5nIGNvb2tpZSA9ICJDb29raWU6ICIgKyBqc2Vzc2lvbklkU1NPICsgIlxuIjsKICAgICAgICAgICAgIG9zLndyaXRlKGNvb2tpZS5nZXRCeXRlcygpKTsKICAgICAgICAgICAgIG9zLndyaXRlKCJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgICAgICBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgICAgIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckF1dGhSZWFsbVByb3BlcnR5L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckF1dGhSZWFsbVByb3BlcnR5L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZmMyN2M2MC4uZmQ3N2U1YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJBdXRoUmVhbG1Qcm9wZXJ0eS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQXV0aFJlYWxtUHJvcGVydHkvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS12aXJ0dWFsLXNlcnZlci1hdXRoLXJlYWxtLXByb3BlcnR5Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckF1dGhSZWFsbVByb3BlcnR5L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQXV0aFJlYWxtUHJvcGVydHkvYnVpbGQueG1sCmluZGV4IDM0OTI3ZDIuLmQ1ZmUwMGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQXV0aFJlYWxtUHJvcGVydHkvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQXV0aFJlYWxtUHJvcGVydHkvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwxNiArNDQsMTYgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIgLz4KQEAgLTk3LDcgKzk3LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtMTExLDEwICsxMTEsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckF1dGhSZWFsbVByb3BlcnR5L2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQXV0aFJlYWxtUHJvcGVydHkvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IGRmNGNlYmQuLmU1NjdlNmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQXV0aFJlYWxtUHJvcGVydHkvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQXV0aFJlYWxtUHJvcGVydHkvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yNCwxMiArMjQsMTIgQEAKIAogICA8c2VjdXJpdHktY29uc3RyYWludD4KICAgICA8d2ViLXJlc291cmNlLWNvbGxlY3Rpb24+Ci0JPHdlYi1yZXNvdXJjZS1uYW1lPlByb3RlY3RlZCBBcmVhPC93ZWItcmVzb3VyY2UtbmFtZT4KLQk8dXJsLXBhdHRlcm4+Lyo8L3VybC1wYXR0ZXJuPgotCTxodHRwLW1ldGhvZD5ERUxFVEU8L2h0dHAtbWV0aG9kPgotCTxodHRwLW1ldGhvZD5HRVQ8L2h0dHAtbWV0aG9kPgotCTxodHRwLW1ldGhvZD5QT1NUPC9odHRwLW1ldGhvZD4KLQk8aHR0cC1tZXRob2Q+UFVUPC9odHRwLW1ldGhvZD4KKyAgICA8d2ViLXJlc291cmNlLW5hbWU+UHJvdGVjdGVkIEFyZWE8L3dlYi1yZXNvdXJjZS1uYW1lPgorICAgIDx1cmwtcGF0dGVybj4vKjwvdXJsLXBhdHRlcm4+CisgICAgPGh0dHAtbWV0aG9kPkRFTEVURTwvaHR0cC1tZXRob2Q+CisgICAgPGh0dHAtbWV0aG9kPkdFVDwvaHR0cC1tZXRob2Q+CisgICAgPGh0dHAtbWV0aG9kPlBPU1Q8L2h0dHAtbWV0aG9kPgorICAgIDxodHRwLW1ldGhvZD5QVVQ8L2h0dHAtbWV0aG9kPgogICAgIDwvd2ViLXJlc291cmNlLWNvbGxlY3Rpb24+CiAgICAgPGF1dGgtY29uc3RyYWludD4KICAgICAgIDxyb2xlLW5hbWU+YWRtaW48L3JvbGUtbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQ2hhbmdlSHR0cExpc3RlbmVyV2ViYXBwTm9Mb25nZXJBY2Nlc3NpYmxlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQ2hhbmdlSHR0cExpc3RlbmVyV2ViYXBwTm9Mb25nZXJBY2Nlc3NpYmxlL1dlYlRlc3QuamF2YQppbmRleCA1MTljYTg5Li5iNTNmZjhjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckNoYW5nZUh0dHBMaXN0ZW5lcldlYmFwcE5vTG9uZ2VyQWNjZXNzaWJsZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJDaGFuZ2VIdHRwTGlzdGVuZXJXZWJhcHBOb0xvbmdlckFjY2Vzc2libGUvV2ViVGVzdC5qYXZhCkBAIC01Miw3ICs1Miw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIElzc3VlIDQ0MDgiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC02MCw4ICs2MCw4IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKQEAgLTcxLDcgKzcxLDcgQEAKIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhvc3Q9IiArIGhvc3QgKyAiLCBwb3J0PSIgKyBwb3J0KTsgICAgICAgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhvc3Q9IiArIGhvc3QgKyAiLCBwb3J0PSIgKyBwb3J0KTsKICAgICAgICAgU29ja2V0IHNvY2sgPSBuZXcgU29ja2V0KGhvc3QsIG5ldyBJbnRlZ2VyKHBvcnQpLmludFZhbHVlKCkpOwogICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSBzb2NrLmdldE91dHB1dFN0cmVhbSgpOwogICAgICAgICBTdHJpbmcgZ2V0ID0gIkdFVCAiICsgY29udGV4dFJvb3QgKyAiL3Rlc3QudHh0IEhUVFAvMS4xXG4iOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJDaGFuZ2VIdHRwTGlzdGVuZXJXZWJhcHBOb0xvbmdlckFjY2Vzc2libGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQ2hhbmdlSHR0cExpc3RlbmVyV2ViYXBwTm9Mb25nZXJBY2Nlc3NpYmxlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZmNlOWE5NS4uOTdkZDc1NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJDaGFuZ2VIdHRwTGlzdGVuZXJXZWJhcHBOb0xvbmdlckFjY2Vzc2libGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckNoYW5nZUh0dHBMaXN0ZW5lcldlYmFwcE5vTG9uZ2VyQWNjZXNzaWJsZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXZpcnR1YWwtc2VydmVyLWNoYW5nZS1odHRwLWxpc3RlbmVyLXdlYmFwcC1uby1sb25nZXItYWNjZXNzaWJsZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJDaGFuZ2VIdHRwTGlzdGVuZXJXZWJhcHBOb0xvbmdlckFjY2Vzc2libGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJDaGFuZ2VIdHRwTGlzdGVuZXJXZWJhcHBOb0xvbmdlckFjY2Vzc2libGUvYnVpbGQueG1sCmluZGV4IGJiOTI4MWIuLjJhMzNkYmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQ2hhbmdlSHR0cExpc3RlbmVyV2ViYXBwTm9Mb25nZXJBY2Nlc3NpYmxlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckNoYW5nZUh0dHBMaXN0ZW5lcldlYmFwcE5vTG9uZ2VyQWNjZXNzaWJsZS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDE2ICs0NCwxNiBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtdmlydHVhbC1zZXJ2ZXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9ImNyZWF0ZS12aXJ0dWFsLXNlcnZlciIgLz4KQEAgLTkxLDcgKzkxLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPGVjaG8gbWVzc2FnZT0iRGVwbG95aW5nICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIgZnJvbSAke2Jhc2VkaXJ9LiIgCisgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkRlcGxveWluZyAke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIGZyb20gJHtiYXNlZGlyfS4iCiAgICAgICAgICAgICAgIGxldmVsPSJ2ZXJib3NlIi8+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwcmVjb21waWxlanNwIiB2YWx1ZT0idHJ1ZSIvPgogICAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59IiBmYWlsb25lcnJvcj0iZmFsc2UiPgpAQCAtOTksMTEgKzk5LDExIEBACiAgICAgICAgICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+CiAgICAgICAgICAgICA8YXJnIGxpbmU9Ii0tY29udGV4dHJvb3QgJHtjb250ZXh0cm9vdH0iLz4KICAgICAgICAgICAgIDxhcmcgbGluZT0iLS12aXJ0dWFsc2VydmVycyBteXZzIi8+Ci0gICAgICAgICAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CQorICAgICAgICAgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICAgICAgICAgICAgPGFyZyBsaW5lPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIi8+CiAgICAgICAgIDwvZXhlYz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC0xMTUsMTAgKzExNSwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS12aXJ0dWFsLXNlcnZlciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckNyZWF0ZVVwcGVyQ2FzZURlcGxveUV4Y2x1c2l2ZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckNyZWF0ZVVwcGVyQ2FzZURlcGxveUV4Y2x1c2l2ZS9XZWJUZXN0LmphdmEKaW5kZXggOTQ0ZTJmZC4uODM1Y2Y1NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJDcmVhdGVVcHBlckNhc2VEZXBsb3lFeGNsdXNpdmUvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQ3JlYXRlVXBwZXJDYXNlRGVwbG95RXhjbHVzaXZlL1dlYlRlc3QuamF2YQpAQCAtNDUsNyArNDUsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBHbGFzc0Zpc2ggSXNzdWUgNjA0MyIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTUzLDggKzUzLDggQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpAQCAtNjQsNyArNjQsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAKKwogICAgICAgICBTb2NrZXQgc29jayA9IG5ldyBTb2NrZXQoaG9zdCwgbmV3IEludGVnZXIocG9ydCkuaW50VmFsdWUoKSk7CiAgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IHNvY2suZ2V0T3V0cHV0U3RyZWFtKCk7CiAgICAgICAgIFN0cmluZyBnZXQgPSAiR0VUICIgKyBjb250ZXh0Um9vdCArICIvIEhUVFAvMS4wXG4iOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJDcmVhdGVVcHBlckNhc2VEZXBsb3lFeGNsdXNpdmUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQ3JlYXRlVXBwZXJDYXNlRGVwbG95RXhjbHVzaXZlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZDE2Y2YzZS4uY2QyNDZkNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJDcmVhdGVVcHBlckNhc2VEZXBsb3lFeGNsdXNpdmUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckNyZWF0ZVVwcGVyQ2FzZURlcGxveUV4Y2x1c2l2ZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXZpcnR1YWwtc2VydmVyLWNyZWF0ZS11cHBlci1jYXNlLWRlcGxveS1leGNsdXNpdmUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQ3JlYXRlVXBwZXJDYXNlRGVwbG95RXhjbHVzaXZlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyQ3JlYXRlVXBwZXJDYXNlRGVwbG95RXhjbHVzaXZlL2J1aWxkLnhtbAppbmRleCA2ZTIzODcxLi4wNzk5MjIwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckNyZWF0ZVVwcGVyQ2FzZURlcGxveUV4Y2x1c2l2ZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJDcmVhdGVVcHBlckNhc2VEZXBsb3lFeGNsdXNpdmUvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwyMCArNDQsMjAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICA8ZWNobyBtZXNzYWdlPSJEZXBsb3lpbmcgJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciBmcm9tICR7YmFzZWRpcn0uIiAKKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iRGVwbG95aW5nICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIgZnJvbSAke2Jhc2VkaXJ9LiIKICAgICAgICAgICAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICAgICAgICAgIDxhcmcgbGluZT0iZGVwbG95Ii8+CkBAIC02NSwxMSArNjUsMTEgQEAKICAgICAgICAgICAgIDxhcmcgbGluZT0iLS1jb250ZXh0cm9vdCAke2NvbnRleHRyb290fSIvPgogICAgICAgICAgICAgPGFyZyBsaW5lPSItLXVwbG9hZD10cnVlIi8+CiAgICAgICAgICAgICA8YXJnIGxpbmU9Ii0tdmlydHVhbHNlcnZlcnMgVGVzdFNlcnZlciIvPgotICAgICAgICAgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgkKKyAgICAgICAgICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KICAgICAgICAgICAgIDxhcmcgbGluZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciIvPgogICAgICAgICA8L2V4ZWM+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtODEsMTAgKzgxLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLXZzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRGVmYXVsdFdlYk1vZHVsZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRlZmF1bHRXZWJNb2R1bGUvV2ViVGVzdC5qYXZhCmluZGV4IDhjMWE3ZDQuLjhmZDg4NDcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRGVmYXVsdFdlYk1vZHVsZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEZWZhdWx0V2ViTW9kdWxlL1dlYlRlc3QuamF2YQpAQCAtNDMsNyArNDMsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciB2aXJ0dWFsIHNlcnZlciBkZWZhdWx0LXdlYi1tb2R1bGUiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC01MSw4ICs1MSw4IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTYyLDcgKzYyLDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArICIvaW5kZXguaHRtbCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEZWZhdWx0V2ViTW9kdWxlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRlZmF1bHRXZWJNb2R1bGUvYnVpbGQucHJvcGVydGllcwppbmRleCA2Mjc5MWJlLi42M2VjNWI0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRlZmF1bHRXZWJNb2R1bGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRlZmF1bHRXZWJNb2R1bGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS12aXJ0dWFsLXNlcnZlci1kZWZhdWx0LXdlYi1tb2R1bGUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRGVmYXVsdFdlYk1vZHVsZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRlZmF1bHRXZWJNb2R1bGUvYnVpbGQueG1sCmluZGV4IDQ2ODhjZTAuLjRjZTk1ZWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRGVmYXVsdFdlYk1vZHVsZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEZWZhdWx0V2ViTW9kdWxlL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMTYgKzQ0LDE2IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9InJlY29uZmlnIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiIC8+CkBAIC03MSw3ICs3MSw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTgzLDEwICs4MywxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RvcmUiIGRlcGVuZHM9InJlY29uZmlnIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRlZmF1bHRXZWJNb2R1bGVGb3JtTG9naW5KU2VjdXJpdHlDaGVja0RpcmVjdEFjY2Vzcy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRlZmF1bHRXZWJNb2R1bGVGb3JtTG9naW5KU2VjdXJpdHlDaGVja0RpcmVjdEFjY2Vzcy9XZWJUZXN0LmphdmEKaW5kZXggOGQzMWFkMi4uNmNiMmFhYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEZWZhdWx0V2ViTW9kdWxlRm9ybUxvZ2luSlNlY3VyaXR5Q2hlY2tEaXJlY3RBY2Nlc3MvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRGVmYXVsdFdlYk1vZHVsZUZvcm1Mb2dpbkpTZWN1cml0eUNoZWNrRGlyZWN0QWNjZXNzL1dlYlRlc3QuamF2YQpAQCAtNDksNyArNDksNyBAQAogICAgICAgICBhZG1pblVzZXIgPSBhcmdzWzJdOwogICAgICAgICBhZG1pblBhc3N3b3JkID0gYXJnc1szXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBHbGFzc0Zpc2ggSXNzdWUgNDQzOCIpOwpAQCAtNjMsNyArNjMsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgcnVuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CkBAIC0xMjMsNyArMTIzLDcgQEAKICAgICAgICAgU3RyaW5nIGNvb2tpZSA9ICJDb29raWU6ICIgKyBqc2Vzc2lvbklkICsgIlxuIjsKICAgICAgICAgb3Mud3JpdGUoY29va2llLmdldEJ5dGVzKCkpOwogICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRGVmYXVsdFdlYk1vZHVsZUZvcm1Mb2dpbkpTZWN1cml0eUNoZWNrRGlyZWN0QWNjZXNzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRlZmF1bHRXZWJNb2R1bGVGb3JtTG9naW5KU2VjdXJpdHlDaGVja0RpcmVjdEFjY2Vzcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGVjNGJhMmUuLmUwMTIwOTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRGVmYXVsdFdlYk1vZHVsZUZvcm1Mb2dpbkpTZWN1cml0eUNoZWNrRGlyZWN0QWNjZXNzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEZWZhdWx0V2ViTW9kdWxlRm9ybUxvZ2luSlNlY3VyaXR5Q2hlY2tEaXJlY3RBY2Nlc3MvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS12aXJ0dWFsLXNlcnZlci1kZWZhdWx0LXdlYi1tb2R1bGUtZm9ybS1sb2dpbi1qc2VjdXJpdHktY2hlY2stZGlyZWN0LWFjY2VzcyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEZWZhdWx0V2ViTW9kdWxlRm9ybUxvZ2luSlNlY3VyaXR5Q2hlY2tEaXJlY3RBY2Nlc3MvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEZWZhdWx0V2ViTW9kdWxlRm9ybUxvZ2luSlNlY3VyaXR5Q2hlY2tEaXJlY3RBY2Nlc3MvYnVpbGQueG1sCmluZGV4IDc0ZTllY2MuLmMwYjllNDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRGVmYXVsdFdlYk1vZHVsZUZvcm1Mb2dpbkpTZWN1cml0eUNoZWNrRGlyZWN0QWNjZXNzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRlZmF1bHRXZWJNb2R1bGVGb3JtTG9naW5KU2VjdXJpdHlDaGVja0RpcmVjdEFjY2Vzcy9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDE2ICs0NCwxNiBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJyZWNvbmZpZyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0IiAvPgpAQCAtNzIsNyArNzIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC04NSwxMCArODUsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0b3JlIiBkZXBlbmRzPSJyZWNvbmZpZyI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEZWZhdWx0V2ViTW9kdWxlRm9ybUxvZ2luSlNlY3VyaXR5Q2hlY2tEaXJlY3RBY2Nlc3MvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEZWZhdWx0V2ViTW9kdWxlRm9ybUxvZ2luSlNlY3VyaXR5Q2hlY2tEaXJlY3RBY2Nlc3MvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDE2MmU4NDMuLmJjNmRjMjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRGVmYXVsdFdlYk1vZHVsZUZvcm1Mb2dpbkpTZWN1cml0eUNoZWNrRGlyZWN0QWNjZXNzL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRlZmF1bHRXZWJNb2R1bGVGb3JtTG9naW5KU2VjdXJpdHlDaGVja0RpcmVjdEFjY2Vzcy9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTI1LDEyICsyNSwxMiBAQAogCiAgIDxzZWN1cml0eS1jb25zdHJhaW50PgogICAgIDx3ZWItcmVzb3VyY2UtY29sbGVjdGlvbj4KLQk8d2ViLXJlc291cmNlLW5hbWU+UHJvdGVjdGVkIEFyZWE8L3dlYi1yZXNvdXJjZS1uYW1lPgotCTx1cmwtcGF0dGVybj4vKjwvdXJsLXBhdHRlcm4+Ci0JPGh0dHAtbWV0aG9kPkRFTEVURTwvaHR0cC1tZXRob2Q+Ci0JPGh0dHAtbWV0aG9kPkdFVDwvaHR0cC1tZXRob2Q+Ci0JPGh0dHAtbWV0aG9kPlBPU1Q8L2h0dHAtbWV0aG9kPgotCTxodHRwLW1ldGhvZD5QVVQ8L2h0dHAtbWV0aG9kPgorICAgIDx3ZWItcmVzb3VyY2UtbmFtZT5Qcm90ZWN0ZWQgQXJlYTwvd2ViLXJlc291cmNlLW5hbWU+CisgICAgPHVybC1wYXR0ZXJuPi8qPC91cmwtcGF0dGVybj4KKyAgICA8aHR0cC1tZXRob2Q+REVMRVRFPC9odHRwLW1ldGhvZD4KKyAgICA8aHR0cC1tZXRob2Q+R0VUPC9odHRwLW1ldGhvZD4KKyAgICA8aHR0cC1tZXRob2Q+UE9TVDwvaHR0cC1tZXRob2Q+CisgICAgPGh0dHAtbWV0aG9kPlBVVDwvaHR0cC1tZXRob2Q+CiAgICAgPC93ZWItcmVzb3VyY2UtY29sbGVjdGlvbj4KIAogICAgIDxhdXRoLWNvbnN0cmFpbnQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRlZmF1bHRXZWJNb2R1bGVSZWNvbmZpZy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRlZmF1bHRXZWJNb2R1bGVSZWNvbmZpZy9XZWJUZXN0LmphdmEKaW5kZXggZTUyN2EwMS4uYzQ4MTdmYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEZWZhdWx0V2ViTW9kdWxlUmVjb25maWcvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRGVmYXVsdFdlYk1vZHVsZVJlY29uZmlnL1dlYlRlc3QuamF2YQpAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICBob3N0ID0gYXJnc1swXTsKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIDY1MjYxMTMiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC01NCw4ICs1NCw4IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTY1LDcgKzY1LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArICIvaW5kZXguaHRtbCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEZWZhdWx0V2ViTW9kdWxlUmVjb25maWcvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRGVmYXVsdFdlYk1vZHVsZVJlY29uZmlnL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYWZkNGEzZC4uYTk1MThiMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEZWZhdWx0V2ViTW9kdWxlUmVjb25maWcvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRlZmF1bHRXZWJNb2R1bGVSZWNvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXZpcnR1YWwtc2VydmVyLWRlZmF1bHQtd2ViLW1vZHVsZS1yZXN0YXJ0Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRlZmF1bHRXZWJNb2R1bGVSZWNvbmZpZy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRlZmF1bHRXZWJNb2R1bGVSZWNvbmZpZy9idWlsZC54bWwKaW5kZXggYzgyODZjNy4uZWFlOWQ0YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEZWZhdWx0V2ViTW9kdWxlUmVjb25maWcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRGVmYXVsdFdlYk1vZHVsZVJlY29uZmlnL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMTYgKzQ0LDE2IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9InNldERlZmF1bHRXZWJNb2R1bGUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIgLz4KQEAgLTExMSwxMCArMTExLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idW5zZXREZWZhdWx0V2ViTW9kdWxlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgpAQCAtMTIyLDcgKzEyMiw3IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0uaHR0cC1zZXJ2aWNlLnZpcnR1YWwtc2VydmVyLiR7bmV3LXZpcnR1YWwtc2VydmVyfS5kZWZhdWx0LXdlYi1tb2R1bGU9Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEZWZhdWx0V2ViTW9kdWxlUmVxdWVzdERpc3BhdGNoZXIvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEZWZhdWx0V2ViTW9kdWxlUmVxdWVzdERpc3BhdGNoZXIvV2ViVGVzdC5qYXZhCmluZGV4IDAxYWM0NTMuLjUzYTMxOGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRGVmYXVsdFdlYk1vZHVsZVJlcXVlc3REaXNwYXRjaGVyL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRlZmF1bHRXZWJNb2R1bGVSZXF1ZXN0RGlzcGF0Y2hlci9XZWJUZXN0LmphdmEKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgdmlydHVhbCBzZXJ2ZXIgZGVmYXVsdC13ZWItbW9kdWxlIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTIsOCArNTIsOCBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CkBAIC02Myw3ICs2Myw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQgKyAiL1Rlc3RTZXJ2bGV0Iik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRlZmF1bHRXZWJNb2R1bGVSZXF1ZXN0RGlzcGF0Y2hlci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEZWZhdWx0V2ViTW9kdWxlUmVxdWVzdERpc3BhdGNoZXIvYnVpbGQucHJvcGVydGllcwppbmRleCAyZWM1NTIzLi42MGM0ZmVmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRlZmF1bHRXZWJNb2R1bGVSZXF1ZXN0RGlzcGF0Y2hlci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRGVmYXVsdFdlYk1vZHVsZVJlcXVlc3REaXNwYXRjaGVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tdmlydHVhbC1zZXJ2ZXItZGVmYXVsdC13ZWItbW9kdWxlLXJlcXVlc3QtZGlzcGF0Y2hlciIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEZWZhdWx0V2ViTW9kdWxlUmVxdWVzdERpc3BhdGNoZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEZWZhdWx0V2ViTW9kdWxlUmVxdWVzdERpc3BhdGNoZXIvYnVpbGQueG1sCmluZGV4IDQ2ODhjZTAuLjRjZTk1ZWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRGVmYXVsdFdlYk1vZHVsZVJlcXVlc3REaXNwYXRjaGVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRlZmF1bHRXZWJNb2R1bGVSZXF1ZXN0RGlzcGF0Y2hlci9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDE2ICs0NCwxNiBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJyZWNvbmZpZyIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0IiAvPgpAQCAtNzEsNyArNzEsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC04MywxMCArODMsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0b3JlIiBkZXBlbmRzPSJyZWNvbmZpZyI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEZWZhdWx0V2ViTW9kdWxlUmVxdWVzdFBhdGgvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEZWZhdWx0V2ViTW9kdWxlUmVxdWVzdFBhdGgvV2ViVGVzdC5qYXZhCmluZGV4IDRiNjJlMzUuLmM2ZjMyNTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRGVmYXVsdFdlYk1vZHVsZVJlcXVlc3RQYXRoL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRlZmF1bHRXZWJNb2R1bGVSZXF1ZXN0UGF0aC9XZWJUZXN0LmphdmEKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgR2xhc3NGaXNoIElzc3VlIDM3MTAiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC01NCw4ICs1NCw4IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZUF0Um9vdENvbnRleHQoKTsKICAgICAgICAgICAgIGludm9rZUF0Q29udGV4dFJvb3QoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKQEAgLTY2LDcgKzY2LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlQXRSb290Q29udGV4dCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQgKwogICAgICAgICAgICAgIi9jaGVja1JlcXVlc3RQYXRoP3J1bj1maXJzdCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CkBAIC05MSw3ICs5MSw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZUF0Q29udGV4dFJvb3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QgKwogICAgICAgICAgICAgIi9jaGVja1JlcXVlc3RQYXRoP3J1bj1zZWNvbmQiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEZWZhdWx0V2ViTW9kdWxlUmVxdWVzdFBhdGgvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRGVmYXVsdFdlYk1vZHVsZVJlcXVlc3RQYXRoL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZDA1MGMyNi4uNjJlMDY4YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEZWZhdWx0V2ViTW9kdWxlUmVxdWVzdFBhdGgvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRlZmF1bHRXZWJNb2R1bGVSZXF1ZXN0UGF0aC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXZpcnR1YWwtc2VydmVyLWRlZmF1bHQtd2ViLW1vZHVsZS1yZXF1ZXN0LXBhdGgiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRGVmYXVsdFdlYk1vZHVsZVJlcXVlc3RQYXRoL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRGVmYXVsdFdlYk1vZHVsZVJlcXVlc3RQYXRoL2J1aWxkLnhtbAppbmRleCAyODRjMjlkLi41NjdjZGE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRlZmF1bHRXZWJNb2R1bGVSZXF1ZXN0UGF0aC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEZWZhdWx0V2ViTW9kdWxlUmVxdWVzdFBhdGgvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwxNiArNDQsMTYgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0icmVjb25maWciIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIgLz4KQEAgLTY3LDcgKzY3LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzksMTAgKzc5LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVzdG9yZSIgZGVwZW5kcz0icmVjb25maWciPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRGVmYXVsdFdlYk1vZHVsZVJlcXVlc3RQYXRoL3NlcnZsZXQvQ2hlY2tSZXF1ZXN0UGF0aC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEZWZhdWx0V2ViTW9kdWxlUmVxdWVzdFBhdGgvc2VydmxldC9DaGVja1JlcXVlc3RQYXRoLmphdmEKaW5kZXggMTQ0OWU5Ni4uMDBkNTAwMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEZWZhdWx0V2ViTW9kdWxlUmVxdWVzdFBhdGgvc2VydmxldC9DaGVja1JlcXVlc3RQYXRoLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEZWZhdWx0V2ViTW9kdWxlUmVxdWVzdFBhdGgvc2VydmxldC9DaGVja1JlcXVlc3RQYXRoLmphdmEKQEAgLTMwLDcgKzMwLDcgQEAKICAgICAgICAgU3RyaW5nIGV4cGVjdGVkQ3R4dFJvb3QgPSBudWxsOwogICAgICAgICBTdHJpbmcgZXhwZWN0ZWRSZXF1ZXN0VVJMID0gbnVsbDsKICAgICAgICAgU3RyaW5nIGV4cGVjdGVkUmVxdWVzdFVSSSA9IG51bGw7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyBydW4gPSByZXEuZ2V0UGFyYW1ldGVyKCJydW4iKTsKICAgICAgICAgaWYgKCJmaXJzdCIuZXF1YWxzKHJ1bikpIHsKICAgICAgICAgICAgIGV4cGVjdGVkQ3R4dFJvb3QgPSAiIjsKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgICAgIGV4cGVjdGVkQ3R4dFJvb3QgPQogICAgICAgICAgICAgICAgICIvd2ViLXZpcnR1YWwtc2VydmVyLWRlZmF1bHQtd2ViLW1vZHVsZS1yZXF1ZXN0LXBhdGgiOwogICAgICAgICAgICAgZXhwZWN0ZWRSZXF1ZXN0VVJJID0gZXhwZWN0ZWRDdHh0Um9vdCArIHNlcnZsZXRQYXRoOwotICAgICAgICAgICAgZXhwZWN0ZWRSZXF1ZXN0VVJMID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyAKKyAgICAgICAgICAgIGV4cGVjdGVkUmVxdWVzdFVSTCA9ICJodHRwOi8vIiArIGhvc3QgKyAiOiIgKyBwb3J0ICsKICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRSZXF1ZXN0VVJJOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRG9jcm9vdER5bmFtaWNSZWNvbmZpZy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRvY3Jvb3REeW5hbWljUmVjb25maWcvV2ViVGVzdC5qYXZhCmluZGV4IDAyOGI4M2EuLmEzZDUxMDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRG9jcm9vdER5bmFtaWNSZWNvbmZpZy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEb2Nyb290RHluYW1pY1JlY29uZmlnL1dlYlRlc3QuamF2YQpAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBkeW5hbWljIHJlY29uZmlndXJhdGlvbiBvZiBkb2Nyb290Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDUsOCArNDUsOCBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoIi9kb21haW4ueG1sIiwgIjxkb21haW4gIik7CiAgICAgICAgICAgICBpbnZva2UoIi9zZXJ2ZXIucG9saWN5IiwgImdyYW50IGNvZGVCYXNlIik7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CkBAIC02Miw3ICs2Miw3IEBACiAgICAgICogaW4gb3JkZXIgZm9yIHRoZSB0ZXN0IHRvIHBhc3MKICAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgaW52b2tlKFN0cmluZyB1cmksIFN0cmluZyBleHBlY3RlZCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArIHVyaSk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRvY3Jvb3REeW5hbWljUmVjb25maWcvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRG9jcm9vdER5bmFtaWNSZWNvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDg1NTQxZjcuLmUxMjFhMjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRG9jcm9vdER5bmFtaWNSZWNvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRG9jcm9vdER5bmFtaWNSZWNvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXZpcnR1YWwtc2VydmVyLWRvY3Jvb3QtZHluYW1pYy1yZWNvbmZpZyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEb2Nyb290RHluYW1pY1JlY29uZmlnL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRG9jcm9vdER5bmFtaWNSZWNvbmZpZy9idWlsZC54bWwKaW5kZXggNzNkOGE3Ny4uY2NmYjI1NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEb2Nyb290RHluYW1pY1JlY29uZmlnL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckRvY3Jvb3REeW5hbWljUmVjb25maWcvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwxNiArNDQsMTYgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIgLz4KQEAgLTc1LDcgKzc1LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtODcsMTAgKzg3LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEeW5hbWljQ29uZmlnL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRHluYW1pY0NvbmZpZy9XZWJUZXN0LmphdmEKaW5kZXggN2JkNzBiMC4uNGIzZmU3NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEeW5hbWljQ29uZmlnL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckR5bmFtaWNDb25maWcvV2ViVGVzdC5qYXZhCkBAIC0yMSwxNiArMjEsMTYgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLio7CiAKIHB1YmxpYyBjbGFzcyBXZWJUZXN0IHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIGludCBjb3VudCA9IDA7CiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IEVYUEVDVEVEX0NPVU5UID0gMTsKLSAgICAKKwogICAgIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdD0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogICAgIHByaXZhdGUgc3RhdGljIFVSTENvbm5lY3Rpb24gY29ubiA9IG51bGw7CiAgICAgcHJpdmF0ZSBzdGF0aWMgVVJMIHVybDsKICAgICBwcml2YXRlIHN0YXRpYyBPYmplY3RPdXRwdXRTdHJlYW0gb2JqZWN0V3JpdGVyID0gbnVsbDsKLSAgICBwcml2YXRlIHN0YXRpYyBPYmplY3RJbnB1dFN0cmVhbSBvYmplY3RSZWFkZXIgPSBudWxsOyAgCisgICAgcHJpdmF0ZSBzdGF0aWMgT2JqZWN0SW5wdXRTdHJlYW0gb2JqZWN0UmVhZGVyID0gbnVsbDsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKIApAQCAtNTEsNyArNTEsNyBAQAogICAgICAgICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gdXJsQ29ubmVjdGlvbiA9IChIdHRwVVJMQ29ubmVjdGlvbiljb25uOwogICAgICAgICAgICAgICAgdXJsQ29ubmVjdGlvbi5zZXREb091dHB1dCh0cnVlKTsKICAgICAgICAgICAgICAgIGludCByZXNwb25zZUNvZGU9ICB1cmxDb25uZWN0aW9uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXNwb25zZSBjb2RlOiAiICsgcmVzcG9uc2VDb2RlICsgIiBFeHBlY3RlZCBjb2RlOiAyMDAiKTsgCisgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc3BvbnNlIGNvZGU6ICIgKyByZXNwb25zZUNvZGUgKyAiIEV4cGVjdGVkIGNvZGU6IDIwMCIpOwogICAgICAgICAgICAgICAgaWYgKHVybENvbm5lY3Rpb24uZ2V0UmVzcG9uc2VDb2RlKCkgIT0gMjAwKXsKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoInZpcnR1YWxTZXJ2ZXJEeW5hbWljQ29uZmlnIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckR5bmFtaWNDb25maWcvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRHluYW1pY0NvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGE0ODFiNTMuLjVhYjM1MTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRHluYW1pY0NvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRHluYW1pY0NvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNCArMTUsMTQgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tdmlydHVhbFNlcnZlckR5bmFtaWNDb25maWciLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXZpcnR1YWxTZXJ2ZXJEeW5hbWljQ29uZmlnIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iL3dlYi12aXJ0dWFsU2VydmVyRHluYW1pY0NvbmZpZyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEeW5hbWljQ29uZmlnL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRHluYW1pY0NvbmZpZy9idWlsZC54bWwKaW5kZXggYTFmNWMxOS4uNDE4NGZiMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEeW5hbWljQ29uZmlnL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckR5bmFtaWNDb25maWcvYnVpbGQueG1sCkBAIC02Niw3ICs2Niw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgIDxqYXZhYwpAQCAtODUsMTAgKzg1LDEwIEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtOTYsNyArOTYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC0xMDgsMTAgKzEwOCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRHluYW1pY0NvbmZpZy9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckR5bmFtaWNDb25maWcvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IGZkYjBjMTcuLmMxZDRiYjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRHluYW1pY0NvbmZpZy9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEeW5hbWljQ29uZmlnL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjIsMTIgKzIyLDEyIEBACiAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIgogICAgICAgICAgdmVyc2lvbj0iMi40Ij4KLSAgICAgCisKICAgICA8c2VydmxldD4KICAgICAgICAgPGRpc3BsYXktbmFtZT5TZXJ2bGV0VGVzdDwvZGlzcGxheS1uYW1lPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuU2VydmxldFRlc3Q8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCisgICAgPC9zZXJ2bGV0PgogICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L1NlcnZsZXRUZXN0PC91cmwtcGF0dGVybj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRHluYW1pY0NvbmZpZy9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckR5bmFtaWNDb25maWcvc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCmluZGV4IDc4MWJjY2YuLmMwNzMyNzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRHluYW1pY0NvbmZpZy9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJEeW5hbWljQ29uZmlnL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogcHVibGljIGNsYXNzIFNlcnZsZXRUZXN0IGV4dGVuZHMgSHR0cFNlcnZsZXQgewogCiAgICAgcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBjb250ZXh0OwotICAgIAorCiAgICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7CiAgICAgICAgIGNvbnRleHQgPSBjb25maWcuZ2V0U2VydmxldENvbnRleHQoKTsKQEAgLTM0LDEyICszNCwxMiBAQAogICAgICAgICBkb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsgICAgICAgIAorICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5kb1Bvc3RdIik7Ci0gICAgICAgIAorCiAgICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7Ci0gICAgICAgIAkKKwogICAgICAgICBvdXQucHJpbnRsbigiVEVTVDo6UEFTUyIpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRWFyV3JhcHBlZERlZmF1bHRXZWJNb2R1bGVSZXN0YXJ0L1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRWFyV3JhcHBlZERlZmF1bHRXZWJNb2R1bGVSZXN0YXJ0L1dlYlRlc3QuamF2YQppbmRleCA2MmRkYzUyLi41ZWIxZjAyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckVhcldyYXBwZWREZWZhdWx0V2ViTW9kdWxlUmVzdGFydC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJFYXJXcmFwcGVkRGVmYXVsdFdlYk1vZHVsZVJlc3RhcnQvV2ViVGVzdC5qYXZhCkBAIC0yNSw3ICsyNSw3IEBACiAgKiAgICgiV0FSIGZyb20gYW4gRUFSIGFzIGRlZmF1bHQgd2ViYXBwIG5vIG1vcmUgd29ya2luZyBhZnRlciBzdG9wL3N0YXJ0IikKICAqCiAgKiBUaGlzIHVuaXQgdGVzdCBkZXBsb3lzIGFuIEVBUiwgZHluYW1pY2FsbHkgY29uZmlndXJlcyB0aGUgRUFSJ3MgZW1iZWRkZWQKLSAqIFdBUiBhcyB0aGUgZGVmYXVsdC13ZWItbW9kdWxlIG9mIHZpcnR1YWwgc2VydmVyICJzZXJ2ZXIiLCBhY2Nlc3NlcyB0aGUgCisgKiBXQVIgYXMgdGhlIGRlZmF1bHQtd2ViLW1vZHVsZSBvZiB2aXJ0dWFsIHNlcnZlciAic2VydmVyIiwgYWNjZXNzZXMgdGhlCiAgKiBXQVIncyBKU1AgcmVzb3VyY2UgdW5kZXIgYm90aCB0aGUgV0FSJ3MgY29udGV4dCByb290IGFuZCB0aGUgZW1wdHkgY29udGV4dAogICogcm9vdCwgc3RvcHMgYW5kIHJlc3RhcnRzIHRoZSBkb21haW4sIGFuZCBhY2Nlc3NlcyB0aGUgV0FSJ3MgSlNQIHJlc291Y2UKICAqIGFnYWluICh1bmRlciBib3RoIHRoZSBXQVIncyBjb250ZXh0IHJvb3QgYW5kIHRoZSBlbXB0eSBjb250ZXh0IHJvb3QpLgpAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICBob3N0ID0gYXJnc1swXTsKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgR2xhc3NGaXNoIElzc3VlIDU0MiIpOwpAQCAtNjUsMTMgKzY1LDEzIEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZyB1cmkpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQgKyB1cmkpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CiAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm4gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOwogICAgICAgICBjb25uLmNvbm5lY3QoKTsKICAgICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm4uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7IAorICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiV3JvbmcgcmVzcG9uc2UgY29kZS4gRXhwZWN0ZWQ6IDIwMCIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLCByZWNlaXZlZDogIiArIHJlc3BvbnNlQ29kZSk7CiAgICAgICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckVhcldyYXBwZWREZWZhdWx0V2ViTW9kdWxlUmVzdGFydC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJFYXJXcmFwcGVkRGVmYXVsdFdlYk1vZHVsZVJlc3RhcnQvYnVpbGQucHJvcGVydGllcwppbmRleCAwYzgyMGU4Li4yNDQ0Y2QyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckVhcldyYXBwZWREZWZhdWx0V2ViTW9kdWxlUmVzdGFydC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRWFyV3JhcHBlZERlZmF1bHRXZWJNb2R1bGVSZXN0YXJ0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDE0ICsxNSwxNCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS12aXJ0dWFsLXNlcnZlci1lYXItd3JhcHBlZC1kZWZhdWx0LXdlYi1tb2R1bGUtcmVzdGFydCIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tdmlydHVhbC1zZXJ2ZXItZWFyLXdyYXBwZWQtZGVmYXVsdC13ZWItbW9kdWxlLXJlc3RhcnQiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iLyR7YXBwbmFtZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRWFyV3JhcHBlZERlZmF1bHRXZWJNb2R1bGVSZXN0YXJ0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyRWFyV3JhcHBlZERlZmF1bHRXZWJNb2R1bGVSZXN0YXJ0L2J1aWxkLnhtbAppbmRleCA3Njk0ZjAxLi45OTg4MmM2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckVhcldyYXBwZWREZWZhdWx0V2ViTW9kdWxlUmVzdGFydC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJFYXJXcmFwcGVkRGVmYXVsdFdlYk1vZHVsZVJlc3RhcnQvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC02NCwxMSArNjQsMTEgQEAKICAgICAgICAgPGVhciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIiBhcHB4bWw9IiR7YXBwbGljYXRpb24ueG1sfSI+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZGlyfSIgaW5jbHVkZXM9IiouamFyLCAqLndhciIvPgogICAgICAgICA8L2Vhcj4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bmZpcnN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CkBAIC05Myw3ICs5Myw3IEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJMb2dGaWxlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyTG9nRmlsZS9XZWJUZXN0LmphdmEKaW5kZXggZWM2YWIyYy4uZGM1YWZmNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJMb2dGaWxlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckxvZ0ZpbGUvV2ViVGVzdC5qYXZhCkBAIC0zNCwxNCArMzQsMTQgQEAKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgICAgICBsb2NhdGlvbiA9IGFyZ3NbM107CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKICAgICAgICAgd2ViVGVzdC5kb1Rlc3QoKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CkBAIC00OSwxNCArNDksMTQgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIi9pbmRleC5qc3AiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgY29ubi5jb25uZWN0KCk7CiAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgeyAKKyAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlIGNvZGUuIEV4cGVjdGVkOiAyMDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgcmVjZWl2ZWQ6ICIgKyByZXNwb25zZUNvZGUpOwogICAgICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJMb2dGaWxlL1dlYlRlc3QyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckxvZ0ZpbGUvV2ViVGVzdDIuamF2YQppbmRleCBmY2ZmNDk5Li42N2VkYjljIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckxvZ0ZpbGUvV2ViVGVzdDIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckxvZ0ZpbGUvV2ViVGVzdDIuamF2YQpAQCAtNDIsNyArNDIsNyBAQAogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgICAgIGxvY2F0aW9uID0gYXJnc1szXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlZpcnR1YWwgU2VydmVyIGxvZyBmaWxlIik7CiAgICAgICAgIFdlYlRlc3QyIHdlYlRlc3QgPSBuZXcgV2ViVGVzdDIoYXJncyk7CkBAIC01MCw4ICs1MCw4IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTYxLDcgKzYxLDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIi9DaGVja0FjY2Vzc0xvZz9sb2NhdGlvbj0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgVVJMRW5jb2Rlci5lbmNvZGUobG9jYXRpb24pKTsKQEAgLTY5LDcgKzY5LDcgQEAKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsgCisgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZSBjb2RlLiBFeHBlY3RlZDogMjAwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIHJlY2VpdmVkOiAiICsgcmVzcG9uc2VDb2RlKTsKICAgICAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyTG9nRmlsZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJMb2dGaWxlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggM2E4NGMwNS4uZDkwZGYzMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJMb2dGaWxlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJMb2dGaWxlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tdmlydHVhbC1zZXJ2ZXItbG9nLWZpbGUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyTG9nRmlsZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckxvZ0ZpbGUvYnVpbGQueG1sCmluZGV4IGVmYWE3NjAuLjkwYTIwMDMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyTG9nRmlsZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJMb2dGaWxlL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtMTMwLDcgKzEzMCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTE1Nyw3ICsxNTcsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVzdG9yZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGRlbGV0ZSBkaXI9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2xvZ3MvdnNsb2dzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckxvZ0ZpbGUvc2VydmxldC9DaGVja0FjY2Vzc0xvZy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJMb2dGaWxlL3NlcnZsZXQvQ2hlY2tBY2Nlc3NMb2cuamF2YQppbmRleCBiNmNjMzQxLi5kOWMyZGQ4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlckxvZ0ZpbGUvc2VydmxldC9DaGVja0FjY2Vzc0xvZy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyTG9nRmlsZS9zZXJ2bGV0L0NoZWNrQWNjZXNzTG9nLmphdmEKQEAgLTI4LDYgKzI4LDYgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDaGVja2luZyBmaWxlIGxvY2F0aW9uICIrbG9jYXRpb24rIi9kb21haW5zL2RvbWFpbjEvbG9ncy92c2xvZ3MiKTsKICAgICAgICAgaWYgKGZpbGVzICE9IG51bGwgJiYgZmlsZXMubGVuZ3RoID09IDIpIHsKICAgICAgICAgICAgIHJlc3AuZ2V0V3JpdGVyKCkucHJpbnRsbigiU1VDQ0VTUyEiKTsKLSAgICAgICAgfSAgICAKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyTW9kaWZ5SHR0cExpc3RlbmVyUG9ydEFjY2Vzc1dlYmFwcC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlck1vZGlmeUh0dHBMaXN0ZW5lclBvcnRBY2Nlc3NXZWJhcHAvV2ViVGVzdC5qYXZhCmluZGV4IGEzZTcyNjUuLjAzMzAxZDEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyTW9kaWZ5SHR0cExpc3RlbmVyUG9ydEFjY2Vzc1dlYmFwcC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJNb2RpZnlIdHRwTGlzdGVuZXJQb3J0QWNjZXNzV2ViYXBwL1dlYlRlc3QuamF2YQpAQCAtMjYsNyArMjYsNyBAQAogICogIHZpcnR1YWwgc2VydmVycyBnZXQgbG9zdCIpCiAgKgogICogVGhpcyB1bml0IHRlc3QgZG9lcyB0aGUgZm9sbG93aW5nOgotICogCisgKgogICogLSBDcmVhdGVzIHZpcnR1YWwgc2VydmVyIG15dnMsIGFuZCBhc3NvY2lhdGVzIGl0IHdpdGggaHR0cC1saXN0ZW5lci0xCiAgKiAtIERlcGxveXMgd2ViYXBwIHRvIG15dnMsIGFuZCBhc3NpZ25zIHRoaXMgd2ViYXBwIGFzIHRoZSBkZWZhdWx0LXdlYi1tb2R1bGUKICAqICAgb2YgbXl2cwpAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBHbGFzc0Zpc2ggSXNzdWUgNDQwNyIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTYxLDggKzYxLDggQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlQXRDb250ZXh0Um9vdCgpOwogICAgICAgICAgICAgaW52b2tlQXRSb290Q29udGV4dCgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwpAQCAtNzMsNyArNzMsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2VBdENvbnRleHRSb290KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgCisKICAgICAgICAgU29ja2V0IHNvY2sgPSBuZXcgU29ja2V0KGhvc3QsIG5ldyBJbnRlZ2VyKHBvcnQpLmludFZhbHVlKCkpOwogICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSBzb2NrLmdldE91dHB1dFN0cmVhbSgpOwogICAgICAgICBTdHJpbmcgZ2V0ID0gIkdFVCAiICsgY29udGV4dFJvb3QgKyAiLyBIVFRQLzEuMVxuIjsKQEAgLTEwMiw3ICsxMDIsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2VBdFJvb3RDb250ZXh0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgCisKICAgICAgICAgU29ja2V0IHNvY2sgPSBuZXcgU29ja2V0KGhvc3QsIG5ldyBJbnRlZ2VyKHBvcnQpLmludFZhbHVlKCkpOwogICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSBzb2NrLmdldE91dHB1dFN0cmVhbSgpOwogICAgICAgICBTdHJpbmcgZ2V0ID0gIkdFVCAvIEhUVFAvMS4xXG4iOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJNb2RpZnlIdHRwTGlzdGVuZXJQb3J0QWNjZXNzV2ViYXBwL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlck1vZGlmeUh0dHBMaXN0ZW5lclBvcnRBY2Nlc3NXZWJhcHAvYnVpbGQucHJvcGVydGllcwppbmRleCAzM2UyMWFlLi5iNWRhZDdkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlck1vZGlmeUh0dHBMaXN0ZW5lclBvcnRBY2Nlc3NXZWJhcHAvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlck1vZGlmeUh0dHBMaXN0ZW5lclBvcnRBY2Nlc3NXZWJhcHAvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS12aXJ0dWFsLXNlcnZlci1kZWZhdWx0LXdlYi1tb2R1bGUtbW9kaWZ5LWh0dHAtbGlzdGVuZXItcG9ydCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJNb2RpZnlIdHRwTGlzdGVuZXJQb3J0QWNjZXNzV2ViYXBwL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyTW9kaWZ5SHR0cExpc3RlbmVyUG9ydEFjY2Vzc1dlYmFwcC9idWlsZC54bWwKaW5kZXggOGU1YmFmOC4uMGJjZWY2NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJNb2RpZnlIdHRwTGlzdGVuZXJQb3J0QWNjZXNzV2ViYXBwL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlck1vZGlmeUh0dHBMaXN0ZW5lclBvcnRBY2Nlc3NXZWJhcHAvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwyMCArNDQsMjAgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICA8ZWNobyBtZXNzYWdlPSJEZXBsb3lpbmcgJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciBmcm9tICR7YmFzZWRpcn0uIiAKKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iRGVwbG95aW5nICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIgZnJvbSAke2Jhc2VkaXJ9LiIKICAgICAgICAgICAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KICAgICAgICAgICAgIDxhcmcgbGluZT0iZGVwbG95Ii8+CkBAIC02NSwxMSArNjUsMTEgQEAKICAgICAgICAgICAgIDxhcmcgbGluZT0iLS1jb250ZXh0cm9vdCAke2NvbnRleHRyb290fSIvPgogICAgICAgICAgICAgPGFyZyBsaW5lPSItLXVwbG9hZD10cnVlIi8+CiAgICAgICAgICAgICA8YXJnIGxpbmU9Ii0tdmlydHVhbHNlcnZlcnMgbXl2cyIvPgotICAgICAgICAgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgkKKyAgICAgICAgICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KICAgICAgICAgICAgIDxhcmcgbGluZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciIvPgogICAgICAgICA8L2V4ZWM+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtODEsMTAgKzgxLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLXZzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyUmVkaXJlY3RQcm9wZXJ0eU5vU3Vic3RyaW5nTWF0Y2gvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJSZWRpcmVjdFByb3BlcnR5Tm9TdWJzdHJpbmdNYXRjaC9XZWJUZXN0LmphdmEKaW5kZXggN2Q1NmEzOC4uMzI5MTY4MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJSZWRpcmVjdFByb3BlcnR5Tm9TdWJzdHJpbmdNYXRjaC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJSZWRpcmVjdFByb3BlcnR5Tm9TdWJzdHJpbmdNYXRjaC9XZWJUZXN0LmphdmEKQEAgLTU1LDcgKzU1LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgNjg2MTY4MiIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTYzLDggKzYzLDggQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlU2VydmxldCgiL3BvcnRhbC9kaXJlY3RvcnkiLAogICAgICAgICAgICAgICAgIEVYUEVDVEVEX0xPQ0FUSU9OX1JFU1BPTlNFX0hFQURFUik7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CkBAIC03OCw3ICs3OCw3IEBACiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlU2VydmxldChTdHJpbmcgdXJpLCBTdHJpbmcgZXhwZWN0ZWRSZWRpcmVjdCkKICAgICAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQgKyB1cmkpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyUmVkaXJlY3RQcm9wZXJ0eU5vU3Vic3RyaW5nTWF0Y2gvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyUmVkaXJlY3RQcm9wZXJ0eU5vU3Vic3RyaW5nTWF0Y2gvYnVpbGQucHJvcGVydGllcwppbmRleCBlZWY1ZTQxLi5lNjM2N2FlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclJlZGlyZWN0UHJvcGVydHlOb1N1YnN0cmluZ01hdGNoL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJSZWRpcmVjdFByb3BlcnR5Tm9TdWJzdHJpbmdNYXRjaC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXZpcnR1YWwtc2VydmVyLXJlZGlyZWN0LXByb3BlcnR5LW5vLXN1YnN0cmluZy1tYXRjaCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJSZWRpcmVjdFByb3BlcnR5Tm9TdWJzdHJpbmdNYXRjaC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclJlZGlyZWN0UHJvcGVydHlOb1N1YnN0cmluZ01hdGNoL2J1aWxkLnhtbAppbmRleCA1ZTAxNTc2Li4xZDA3MDdkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclJlZGlyZWN0UHJvcGVydHlOb1N1YnN0cmluZ01hdGNoL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclJlZGlyZWN0UHJvcGVydHlOb1N1YnN0cmluZ01hdGNoL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMTYgKzQ0LDE2IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiIC8+CkBAIC03MSw3ICs3MSw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTgzLDEwICs4MywxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RvcmUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclJlZGlyZWN0UHJvcGVydHlVcmwvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJSZWRpcmVjdFByb3BlcnR5VXJsL1dlYlRlc3QuamF2YQppbmRleCA4Yjk2NTYyLi4xMTYwODRjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclJlZGlyZWN0UHJvcGVydHlVcmwvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyUmVkaXJlY3RQcm9wZXJ0eVVybC9XZWJUZXN0LmphdmEKQEAgLTUyLDcgKzUyLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgNjMzMDMwMCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTYwLDggKzYwLDggQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlU2VydmxldCgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKQEAgLTcwLDE0ICs3MCwxNCBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2VTZXJ2bGV0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFNvY2tldCBzb2NrID0gbmV3IFNvY2tldChob3N0LCBuZXcgSW50ZWdlcihwb3J0KS5pbnRWYWx1ZSgpKTsKICAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gc29jay5nZXRPdXRwdXRTdHJlYW0oKTsKICAgICAgICAgU3RyaW5nIGdldCA9ICJHRVQgL3NvbWVwcmVmaXgvMTIzNCBIVFRQLzEuMFxuIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGdldCk7CiAgICAgICAgIG9zLndyaXRlKGdldC5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJpcyA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJSZWRpcmVjdFByb3BlcnR5VXJsL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclJlZGlyZWN0UHJvcGVydHlVcmwvYnVpbGQucHJvcGVydGllcwppbmRleCA4OWIzM2QwLi45NjZmNWZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclJlZGlyZWN0UHJvcGVydHlVcmwvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclJlZGlyZWN0UHJvcGVydHlVcmwvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS12aXJ0dWFsLXNlcnZlci1yZWRpcmVjdC1wcm9wZXJ0eS11cmwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyUmVkaXJlY3RQcm9wZXJ0eVVybC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclJlZGlyZWN0UHJvcGVydHlVcmwvYnVpbGQueG1sCmluZGV4IGUwOTYxYzMuLjYxN2U3OTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyUmVkaXJlY3RQcm9wZXJ0eVVybC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJSZWRpcmVjdFByb3BlcnR5VXJsL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMTYgKzQ0LDE2IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiIC8+CkBAIC03MSw3ICs3MSw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTgzLDEwICs4MywxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RvcmUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclJlZGlyZWN0UHJvcGVydHlVcmxQcmVmaXgvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJSZWRpcmVjdFByb3BlcnR5VXJsUHJlZml4L1dlYlRlc3QuamF2YQppbmRleCA5Y2UwNjdlLi4wMzM5NmUwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclJlZGlyZWN0UHJvcGVydHlVcmxQcmVmaXgvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyUmVkaXJlY3RQcm9wZXJ0eVVybFByZWZpeC9XZWJUZXN0LmphdmEKQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgNjMzMDMwMCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTYyLDggKzYyLDggQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlU2VydmxldCgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKQEAgLTcyLDE0ICs3MiwxNCBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbnZva2VTZXJ2bGV0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFNvY2tldCBzb2NrID0gbmV3IFNvY2tldChob3N0LCBuZXcgSW50ZWdlcihwb3J0KS5pbnRWYWx1ZSgpKTsKICAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gc29jay5nZXRPdXRwdXRTdHJlYW0oKTsKICAgICAgICAgU3RyaW5nIGdldCA9ICJHRVQgL3NvbWVwcmVmaXgvNTY3OCBIVFRQLzEuMFxuIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGdldCk7CiAgICAgICAgIG9zLndyaXRlKGdldC5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJpcyA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJSZWRpcmVjdFByb3BlcnR5VXJsUHJlZml4L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclJlZGlyZWN0UHJvcGVydHlVcmxQcmVmaXgvYnVpbGQucHJvcGVydGllcwppbmRleCBiNjZlN2RmLi5hNjE3N2E3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclJlZGlyZWN0UHJvcGVydHlVcmxQcmVmaXgvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclJlZGlyZWN0UHJvcGVydHlVcmxQcmVmaXgvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS12aXJ0dWFsLXNlcnZlci1yZWRpcmVjdC1wcm9wZXJ0eS11cmwtcHJlZml4Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclJlZGlyZWN0UHJvcGVydHlVcmxQcmVmaXgvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJSZWRpcmVjdFByb3BlcnR5VXJsUHJlZml4L2J1aWxkLnhtbAppbmRleCAxMzRjNmM1Li5iZGU4OGE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclJlZGlyZWN0UHJvcGVydHlVcmxQcmVmaXgvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyUmVkaXJlY3RQcm9wZXJ0eVVybFByZWZpeC9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDE2ICs0NCwxNiBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0IiAvPgpAQCAtNzEsNyArNzEsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC04MywxMCArODMsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0b3JlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJTZW5kRXJyb3JQcm9wZXJ0eS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclNlbmRFcnJvclByb3BlcnR5L1dlYlRlc3QuamF2YQppbmRleCBmZWYyMmU2Li5mOGYzMjg2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclNlbmRFcnJvclByb3BlcnR5L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclNlbmRFcnJvclByb3BlcnR5L1dlYlRlc3QuamF2YQpAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciA2MzI0OTExIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtODIsNyArODIsNyBAQAogICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwogCiAgICAgICAgIGJvb2xlYW4gc3RhdHVzSGVhZGVyRm91bmQgPSBmYWxzZTsKLSAgICAgICAgYm9vbGVhbiBib2R5TGluZUZvdW5kID0gZmFsc2U7ICAgICAgICAKKyAgICAgICAgYm9vbGVhbiBib2R5TGluZUZvdW5kID0gZmFsc2U7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJyID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIElucHV0U3RyZWFtIGlzID0gc29jay5nZXRJbnB1dFN0cmVhbSgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJTZW5kRXJyb3JQcm9wZXJ0eS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJTZW5kRXJyb3JQcm9wZXJ0eS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDRkYTQzNTcuLmJmYzgwMzEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyU2VuZEVycm9yUHJvcGVydHkvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclNlbmRFcnJvclByb3BlcnR5L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tdmlydHVhbC1zZXJ2ZXItc2VuZC1lcnJvci1wcm9wZXJ0eSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJTZW5kRXJyb3JQcm9wZXJ0eS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclNlbmRFcnJvclByb3BlcnR5L2J1aWxkLnhtbAppbmRleCA1ZjhkZDAxLi4wNTQxYmIyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclNlbmRFcnJvclByb3BlcnR5L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclNlbmRFcnJvclByb3BlcnR5L2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMTYgKzQ0LDE2IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiIC8+CkBAIC03Niw3ICs3Niw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTg4LDEwICs4OCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RvcmUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclNlbmRFcnJvclByb3BlcnR5QnJva2VuV2ViYXBwL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyU2VuZEVycm9yUHJvcGVydHlCcm9rZW5XZWJhcHAvV2ViVGVzdC5qYXZhCmluZGV4IDE1N2U3ZDkuLmZhNWY2MTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyU2VuZEVycm9yUHJvcGVydHlCcm9rZW5XZWJhcHAvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyU2VuZEVycm9yUHJvcGVydHlCcm9rZW5XZWJhcHAvV2ViVGVzdC5qYXZhCkBAIC0yOSw4ICsyOSw4IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgVVJMQ29ubmVjdGlvbiBjb25uID0gbnVsbDsKICAgICBwcml2YXRlIHN0YXRpYyBVUkwgdXJsOwogICAgIHByaXZhdGUgc3RhdGljIE9iamVjdE91dHB1dFN0cmVhbSBvYmplY3RXcml0ZXIgPSBudWxsOwotICAgIHByaXZhdGUgc3RhdGljIE9iamVjdElucHV0U3RyZWFtIG9iamVjdFJlYWRlciA9IG51bGw7ICAKLSAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBPYmplY3RJbnB1dFN0cmVhbSBvYmplY3RSZWFkZXIgPSBudWxsOworCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgdGhyb3dzIEV4Y2VwdGlvbnsKICAgICAgICAgU3RyaW5nIGhvc3QgPSBhcmdzWzBdOwogICAgICAgICBTdHJpbmcgcG9ydCA9IGFyZ3NbMV07CkBAIC00NywxMiArNDcsMTIgQEAKICAgICAgICAgICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiB1cmxDb25uZWN0aW9uID0gKEh0dHBVUkxDb25uZWN0aW9uKWNvbm47CiAgICAgICAgICAgICAgICAgdXJsQ29ubmVjdGlvbi5zZXREb091dHB1dCh0cnVlKTsKIAotICAgICAgICAgICAgICAgIERhdGFPdXRwdXRTdHJlYW0gb3V0ID0gCisgICAgICAgICAgICAgICAgRGF0YU91dHB1dFN0cmVhbSBvdXQgPQogICAgICAgICAgICAgICAgICAgIG5ldyBEYXRhT3V0cHV0U3RyZWFtKHVybENvbm5lY3Rpb24uZ2V0T3V0cHV0U3RyZWFtKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlQnl0ZSgxKTsKIAogICAgICAgICAgICAgICAgaW50IHJlc3BvbnNlQ29kZT0gIHVybENvbm5lY3Rpb24uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInZpcnR1YWwtc2VydmVyLXNlbmQtZXJyb3ItcHJvcGVydHktYnJva2VuLXdlYmFwcDogIiArIHJlc3BvbnNlQ29kZSArICIgRXhwZWN0ZWQgY29kZTogNDA0Iik7IAorICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ2aXJ0dWFsLXNlcnZlci1zZW5kLWVycm9yLXByb3BlcnR5LWJyb2tlbi13ZWJhcHA6ICIgKyByZXNwb25zZUNvZGUgKyAiIEV4cGVjdGVkIGNvZGU6IDQwNCIpOwogICAgICAgICAgICAgICAgaWYgKHVybENvbm5lY3Rpb24uZ2V0UmVzcG9uc2VDb2RlKCkgIT0gNDA0KXsKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIlRlc3QgdmlydHVhbC1zZXJ2ZXItc2VuZC1lcnJvci1wcm9wZXJ0eS1icm9rZW4td2ViYXBwIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclNlbmRFcnJvclByb3BlcnR5QnJva2VuV2ViYXBwL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclNlbmRFcnJvclByb3BlcnR5QnJva2VuV2ViYXBwL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNDc4MTBjYy4uYTc5YjMwNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJTZW5kRXJyb3JQcm9wZXJ0eUJyb2tlbldlYmFwcC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyU2VuZEVycm9yUHJvcGVydHlCcm9rZW5XZWJhcHAvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTQgKzE1LDE0IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXZpcnR1YWwtc2VydmVyLXNlbmQtZXJyb3ItcHJvcGVydHktYnJva2VuLXdlYmFwcCIvPgogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvJHthcHBuYW1lfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJTZW5kRXJyb3JQcm9wZXJ0eUJyb2tlbldlYmFwcC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclNlbmRFcnJvclByb3BlcnR5QnJva2VuV2ViYXBwL2J1aWxkLnhtbAppbmRleCA3YmE5YWZiLi5kZTI5MDY2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclNlbmRFcnJvclByb3BlcnR5QnJva2VuV2ViYXBwL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclNlbmRFcnJvclByb3BlcnR5QnJva2VuV2ViYXBwL2J1aWxkLnhtbApAQCAtNTQsNyArNTQsNyBAQAogICAgICAgICAgICAgICAgICAgIHZhbHVlPSIke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfS5odHRwLXNlcnZpY2UudmlydHVhbC1zZXJ2ZXIuc2VydmVyLnByb3BlcnR5LnNlbmQtZXJyb3JfMT0iLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTYyLDI0ICs2MiwyNCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgIDxqYXZhYwogICAgICAgICAgICAgc3JjZGlyPSIuIgogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtOTEsMTAgKzkxLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJTZW5kRXJyb3JQcm9wZXJ0eUJyb2tlbldlYmFwcC9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclNlbmRFcnJvclByb3BlcnR5QnJva2VuV2ViYXBwL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCAyOWFjNzhiLi5jN2RmOWQ1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclNlbmRFcnJvclByb3BlcnR5QnJva2VuV2ViYXBwL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclNlbmRFcnJvclByb3BlcnR5QnJva2VuV2ViYXBwL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtMjIsMTIgKzIyLDEyIEBACiAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIgogICAgICAgICAgdmVyc2lvbj0iMi40Ij4KLSAgICAgCisKICAgICA8c2VydmxldD4KICAgICAgICAgPGRpc3BsYXktbmFtZT5TZXJ2bGV0VGVzdDwvZGlzcGxheS1uYW1lPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuU2VydmxldFRlc3Q8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCisgICAgPC9zZXJ2bGV0PgogICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+U2VydmxldFRlc3Q8L3VybC1wYXR0ZXJuPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJTZW5kRXJyb3JQcm9wZXJ0eUJyb2tlbldlYmFwcC9zZXJ2bGV0L1NlcnZsZXRUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclNlbmRFcnJvclByb3BlcnR5QnJva2VuV2ViYXBwL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQppbmRleCAwYjllMmU5Li5kODliZWFiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclNlbmRFcnJvclByb3BlcnR5QnJva2VuV2ViYXBwL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclNlbmRFcnJvclByb3BlcnR5QnJva2VuV2ViYXBwL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YQpAQCAtNDYsMTEgKzQ2LDExIEBACiBwdWJsaWMgY2xhc3MgU2VydmxldFRlc3QgZXh0ZW5kcyBIdHRwU2VydmxldHsKIAogICAgIHByaXZhdGUgU3RyaW5nIHN0YXR1cyA9ICJ2aXJ0dWFsLXNlcnZlci1zZW5kLWVycm9yLXByb3BlcnR5LWJyb2tlbi13ZWJhcHA6OkZBSUwiOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuaW5pdF0iKTsgICAgICAgIAotICAgICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5pbml0XSIpOworCiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CkBAIC01OCwxNiArNTgsMTYgQEAKICAgICAgICAgZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7ICAgICAgICAKKyAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuZG9Qb3N0XSIpOwotICAgICAgICAKKwogICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKICAgICAgICAgb3V0LnByaW50bG4oc3RhdHVzKTsKICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwotICAgICAgICAKKwogICAgICAgICBzdGF0dXMgPSAidmlydHVhbC1zZXJ2ZXItc2VuZC1lcnJvci1wcm9wZXJ0eS1icm9rZW4td2ViYXBwOjo6RkFJTCI7CiAgICAgICAgIG91dC5wcmludGxuKHN0YXR1cyk7Ci0gICAgICAgIAorCiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclN0YXRlRHluYW1pY1JlY29uZmlnL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyU3RhdGVEeW5hbWljUmVjb25maWcvV2ViVGVzdC5qYXZhCmluZGV4IGRlYzM2MzUuLmQzM2RjMWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyU3RhdGVEeW5hbWljUmVjb25maWcvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyU3RhdGVEeW5hbWljUmVjb25maWcvV2ViVGVzdC5qYXZhCkBAIC02NiwxMiArNjYsMTIgQEAKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgICAgICBydW4gPSBhcmdzWzNdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBkaXNhYmxpbmcgYSB2aXJ0dWFsIHNlcnZlciIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKIAotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGlmICgib24iLmVxdWFscyh3ZWJUZXN0LnJ1bikpIHsKICAgICAgICAgICAgICAgICBURVNUX05BTUUgPSBURVNUX1JPT1RfTkFNRSArICItb24iOwogICAgICAgICAgICAgICAgIHdlYlRlc3Qub25SdW4oKTsKQEAgLTk2LDcgKzk2LDcgQEAKICAgICAgKiBzZXJ2ZXIuCiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIG9uUnVuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFNvY2tldCBzb2NrID0gbmV3IFNvY2tldChob3N0LCBuZXcgSW50ZWdlcihwb3J0KS5pbnRWYWx1ZSgpKTsKICAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gc29jay5nZXRPdXRwdXRTdHJlYW0oKTsKICAgICAgICAgU3RyaW5nIGdldCA9ICJHRVQgIiArIGNvbnRleHRSb290ICsgIi90ZXN0LnR4dCBIVFRQLzEuMVxuIjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyU3RhdGVEeW5hbWljUmVjb25maWcvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyU3RhdGVEeW5hbWljUmVjb25maWcvYnVpbGQucHJvcGVydGllcwppbmRleCAwNzgzNDI2Li5jNWEyMmQ0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclN0YXRlRHluYW1pY1JlY29uZmlnL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJTdGF0ZUR5bmFtaWNSZWNvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXZpcnR1YWwtc2VydmVyLXN0YXRlLWR5bmFtaWMtcmVjb25maWciLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyU3RhdGVEeW5hbWljUmVjb25maWcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJTdGF0ZUR5bmFtaWNSZWNvbmZpZy9idWlsZC54bWwKaW5kZXggNzQ2ZmFkMy4uNzU3Y2UxZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJTdGF0ZUR5bmFtaWNSZWNvbmZpZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJTdGF0ZUR5bmFtaWNSZWNvbmZpZy9idWlsZC54bWwKQEAgLTQyLDcgKzQyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTUwLDE3ICs1MCwxNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIDxlY2hvIG1lc3NhZ2U9IkRlcGxveWluZyAke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIGZyb20gJHtiYXNlZGlyfS4iIAorICAgICAgICA8ZWNobyBtZXNzYWdlPSJEZXBsb3lpbmcgJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciBmcm9tICR7YmFzZWRpcn0uIgogICAgICAgICAgICAgICBsZXZlbD0idmVyYm9zZSIvPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0icHJlY29tcGlsZWpzcCIgdmFsdWU9InRydWUiLz4KICAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KQEAgLTcwLDE0ICs3MCwxNCBAQAogICAgICAgICAgICAgPGFyZyBsaW5lPSItLXByZWNvbXBpbGVqc3A9JHtwcmVjb21waWxlanNwfSIvPgogICAgICAgICAgICAgPGFyZyBsaW5lPSItLXVwbG9hZD10cnVlIi8+CiAgICAgICAgICAgICA8YXJnIGxpbmU9Ii0tdmlydHVhbHNlcnZlcnMgbXl2cyIvPgotICAgICAgICAgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgkKKyAgICAgICAgICAgIDxhcmcgbGluZT0iLS10YXJnZXQgJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0iLz4KICAgICAgICAgICAgIDxhcmcgbGluZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciIvPgogICAgICAgICA8L2V4ZWM+CiAgICAgPC90YXJnZXQ+Ci0gICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVzdG9yZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS12aXJ0dWFsLXNlcnZlci1teXZzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclVwZGF0ZUhvc3RzRHluYW1pY1JlY29uZmlnL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyVXBkYXRlSG9zdHNEeW5hbWljUmVjb25maWcvV2ViVGVzdC5qYXZhCmluZGV4IGU0YTk3NTguLjNjMTg1NTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyVXBkYXRlSG9zdHNEeW5hbWljUmVjb25maWcvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyVXBkYXRlSG9zdHNEeW5hbWljUmVjb25maWcvV2ViVGVzdC5qYXZhCkBAIC0yNiw3ICsyNiw3IEBACiAgKiAibXlob3N0IiwgZGVwbG95cyBhIHdlYmFwcCB0byBpdCwgYW5kIGFjY2Vzc2VzIHRoZSB3ZWJhcHAgYnkgc3BlY2lmeWluZwogICogYSBIb3N0IGhlYWRlciBlcXVhbCB0byAibXlob3N0IiBpbiB0aGUgcmVxdWVzdC4KICAqCi0gKiBUaGUgdGVzdCB0aGVuIHVwZGF0ZXMgdGhlIHZpcnR1YWwgc2VydmVyJ3MgImhvc3RzIiBhdHRyaWJ1dGUgdG8gCisgKiBUaGUgdGVzdCB0aGVuIHVwZGF0ZXMgdGhlIHZpcnR1YWwgc2VydmVyJ3MgImhvc3RzIiBhdHRyaWJ1dGUgdG8KICAqICJteW5ld2hvc3QiLCBhbmQgZW5zdXJlcyB0aGF0IHRoZSB3ZWJhcHAgbWF5IHN0aWxsIGJlIGFjY2Vzc2VkIHdoZW4KICAqIHNwZWNpZnlpbmcgYSBIb3N0IGhlYWRlciBlcXVhbCB0byAibXluZXdob3N0IiBpbiB0aGUgcmVxdWVzdC4KICAqLwpAQCAtNTIsNyArNTIsNyBAQAogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgICAgIHJ1biA9IGFyZ3NbM107CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgNjcxMjc3OCIpOwpAQCAtODAsNyArODAsNyBAQAogICAgICAqIGlzIG1hcHBlZCB0byB0aGUgdmlydHVhbCBzZXJ2ZXIuCiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIGZpcnN0UnVuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFNvY2tldCBzb2NrID0gbmV3IFNvY2tldChob3N0LCBuZXcgSW50ZWdlcihwb3J0KS5pbnRWYWx1ZSgpKTsKICAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gc29jay5nZXRPdXRwdXRTdHJlYW0oKTsKICAgICAgICAgU3RyaW5nIGdldCA9ICJHRVQgIiArIGNvbnRleHRSb290ICsgIi90ZXN0LnR4dCBIVFRQLzEuMVxuIjsKQEAgLTExNSw3ICsxMTUsNyBAQAogICAgICAqIGlzIG1hcHBlZCB0byB0aGUgdXBkYXRlZCB2aXJ0dWFsIHNlcnZlci4KICAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgc2Vjb25kUnVuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFNvY2tldCBzb2NrID0gbmV3IFNvY2tldChob3N0LCBuZXcgSW50ZWdlcihwb3J0KS5pbnRWYWx1ZSgpKTsKICAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gc29jay5nZXRPdXRwdXRTdHJlYW0oKTsKICAgICAgICAgU3RyaW5nIGdldCA9ICJHRVQgIiArIGNvbnRleHRSb290ICsgIi90ZXN0LnR4dCBIVFRQLzEuMVxuIjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyVXBkYXRlSG9zdHNEeW5hbWljUmVjb25maWcvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyVXBkYXRlSG9zdHNEeW5hbWljUmVjb25maWcvYnVpbGQucHJvcGVydGllcwppbmRleCA0MjEwYTU4Li4wZTk3N2Q5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclVwZGF0ZUhvc3RzRHluYW1pY1JlY29uZmlnL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJVcGRhdGVIb3N0c0R5bmFtaWNSZWNvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXZpcnR1YWwtc2VydmVyLXVwZGF0ZS1ob3N0cy1keW5hbWljLXJlY29uZmlnIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclVwZGF0ZUhvc3RzRHluYW1pY1JlY29uZmlnL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyVXBkYXRlSG9zdHNEeW5hbWljUmVjb25maWcvYnVpbGQueG1sCmluZGV4IGEzMjYwNjEuLmVjYjExZjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyVXBkYXRlSG9zdHNEeW5hbWljUmVjb25maWcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyVXBkYXRlSG9zdHNEeW5hbWljUmVjb25maWcvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwxNiArNDQsMTYgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtdmlydHVhbC1zZXJ2ZXIiLz4KICAgICA8L3RhcmdldD4KQEAgLTg5LDEwICs4OSwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS12aXJ0dWFsLXNlcnZlciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyVXBkYXRlSHR0cExpc3RlbmVyc0R5bmFtaWNSZWNvbmZpZy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclVwZGF0ZUh0dHBMaXN0ZW5lcnNEeW5hbWljUmVjb25maWcvV2ViVGVzdC5qYXZhCmluZGV4IGE0ZWNmODEuLmFkMDliZjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyVXBkYXRlSHR0cExpc3RlbmVyc0R5bmFtaWNSZWNvbmZpZy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJVcGRhdGVIdHRwTGlzdGVuZXJzRHluYW1pY1JlY29uZmlnL1dlYlRlc3QuamF2YQpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciA2NTczNTQ1Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDksOCArNDksOCBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CkBAIC01OSw3ICs1OSw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTb2NrZXQgc29jayA9IG5ldyBTb2NrZXQoaG9zdCwgbmV3IEludGVnZXIocG9ydCkuaW50VmFsdWUoKSk7CiAgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IHNvY2suZ2V0T3V0cHV0U3RyZWFtKCk7CiAgICAgICAgIFN0cmluZyBnZXQgPSAiR0VUICIgKyBjb250ZXh0Um9vdCArICIvdGVzdC50eHQgSFRUUC8xLjFcbiI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclVwZGF0ZUh0dHBMaXN0ZW5lcnNEeW5hbWljUmVjb25maWcvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyVXBkYXRlSHR0cExpc3RlbmVyc0R5bmFtaWNSZWNvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGIwNGMzZjkuLjU4NGUyNmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyVXBkYXRlSHR0cExpc3RlbmVyc0R5bmFtaWNSZWNvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyVXBkYXRlSHR0cExpc3RlbmVyc0R5bmFtaWNSZWNvbmZpZy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXZpcnR1YWwtc2VydmVyLXVwZGF0ZS1odHRwLWxpc3RlbmVycy1keW5hbWljLXJlY29uZmlnIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclVwZGF0ZUh0dHBMaXN0ZW5lcnNEeW5hbWljUmVjb25maWcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJVcGRhdGVIdHRwTGlzdGVuZXJzRHluYW1pY1JlY29uZmlnL2J1aWxkLnhtbAppbmRleCAzMzA1Njc5Li5lYjY1NGIxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlclVwZGF0ZUh0dHBMaXN0ZW5lcnNEeW5hbWljUmVjb25maWcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyVXBkYXRlSHR0cExpc3RlbmVyc0R5bmFtaWNSZWNvbmZpZy9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDE2ICs0NCwxNiBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtdmlydHVhbC1zZXJ2ZXItdnMxIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24taWdub3JlLWZhaWwiPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0iY3JlYXRlLXZpcnR1YWwtc2VydmVyIiAvPgpAQCAtOTYsNyArOTYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgICAgICA8ZWNobyBtZXNzYWdlPSJEZXBsb3lpbmcgJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciBmcm9tICR7YmFzZWRpcn0uIiAKKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iRGVwbG95aW5nICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIgZnJvbSAke2Jhc2VkaXJ9LiIKICAgICAgICAgICAgICAgbGV2ZWw9InZlcmJvc2UiLz4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9InByZWNvbXBpbGVqc3AiIHZhbHVlPSJ0cnVlIi8+CiAgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJmYWxzZSI+CkBAIC0xMDYsMTEgKzEwNiwxMSBAQAogICAgICAgICAgICAgPGFyZyBsaW5lPSItLXByZWNvbXBpbGVqc3A9JHtwcmVjb21waWxlanNwfSIvPgogICAgICAgICAgICAgPGFyZyBsaW5lPSItLXVwbG9hZD10cnVlIi8+CiAgICAgICAgICAgICA8YXJnIGxpbmU9Ii0tdmlydHVhbHNlcnZlcnMgdnMyIi8+Ci0gICAgICAgICAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CQorICAgICAgICAgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgogICAgICAgICAgICAgPGFyZyBsaW5lPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIi8+CiAgICAgICAgIDwvZXhlYz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTEyMiwxMCArMTIyLDEwIEBACiAgICAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXZpcnR1YWwtc2VydmVyLXZzMSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbi1pZ25vcmUtZmFpbCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlcldpdGhDdXN0b21FcnJvclJlcG9ydFZhbHZlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyV2l0aEN1c3RvbUVycm9yUmVwb3J0VmFsdmUvV2ViVGVzdC5qYXZhCmluZGV4IDRkYjFmYWUuLmJiODJhYzQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyV2l0aEN1c3RvbUVycm9yUmVwb3J0VmFsdmUvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyV2l0aEN1c3RvbUVycm9yUmVwb3J0VmFsdmUvV2ViVGVzdC5qYXZhCkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgIHBvcnQgPSBJbnRlZ2VyLnBhcnNlSW50KGFyZ3NbMV0pOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIElUIDE3MDkzIik7CiAKQEAgLTUzLDExICs1MywxMSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFNvY2tldCBzb2NrID0gbnVsbDsKICAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gbnVsbDsKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBudWxsOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJXaXRoQ3VzdG9tRXJyb3JSZXBvcnRWYWx2ZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJXaXRoQ3VzdG9tRXJyb3JSZXBvcnRWYWx2ZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDVmYmI5YWMuLjlhNzgxZmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyV2l0aEN1c3RvbUVycm9yUmVwb3J0VmFsdmUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlcldpdGhDdXN0b21FcnJvclJlcG9ydFZhbHZlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tdmlydHVhbC1zZXJ2ZXItd2l0aC1jdXN0b20tZXJyb3ItcmVwb3J0LXZhbHZlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlcldpdGhDdXN0b21FcnJvclJlcG9ydFZhbHZlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyV2l0aEN1c3RvbUVycm9yUmVwb3J0VmFsdmUvYnVpbGQueG1sCmluZGV4IGJkMjk0YmUuLmRjMGFhMzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyV2l0aEN1c3RvbUVycm9yUmVwb3J0VmFsdmUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyV2l0aEN1c3RvbUVycm9yUmVwb3J0VmFsdmUvYnVpbGQueG1sCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgICAgPGRlbGV0ZSBmaWxlPSJXZWJUZXN0LmNsYXNzIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNTEsMTYgKzUxLDE2IEBACiAgICAgICAgIDwvamFyPgogICAgICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY3VzdG9tIi8+CiAKLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29weUphclRvRG9tYWluTGliIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXItaW5zdGFuY2UtY29tbW9uIi8+CkBAIC04Miw3ICs4Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTk0LDEwICs5NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RvcmUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZW1vdmVKYXJGcm9tRG9tYWluTGliIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlcldpdGhDdXN0b21WYWx2ZXMvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJXaXRoQ3VzdG9tVmFsdmVzL1dlYlRlc3QuamF2YQppbmRleCBmZmFiYjI2Li5jMzlmMGM0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlcldpdGhDdXN0b21WYWx2ZXMvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyV2l0aEN1c3RvbVZhbHZlcy9XZWJUZXN0LmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgSVQgMTE2NzQiKTsKIApAQCAtNTMsMTEgKzUzLDExIEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0ICsgY29udGV4dFJvb3QgKyAiL3Rlc3QiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwogCkBAIC03Nyw3ICs3Nyw3IEBACiAgICAgICAgICAgICBTdHJpbmcgbGluZSA9IGlucHV0LnJlYWRMaW5lKCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obGluZSk7CiAgICAgICAgICAgICBpZiAoIUVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBmaW5hbGx5IHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyV2l0aEN1c3RvbVZhbHZlcy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJXaXRoQ3VzdG9tVmFsdmVzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZjQ0NmFjNC4uOTNjM2M5OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJXaXRoQ3VzdG9tVmFsdmVzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJXaXRoQ3VzdG9tVmFsdmVzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tdmlydHVhbC1zZXJ2ZXItd2l0aC1jdXN0b20tdmFsdmVzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlcldpdGhDdXN0b21WYWx2ZXMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJXaXRoQ3VzdG9tVmFsdmVzL2J1aWxkLnhtbAppbmRleCA4OWQ3MzMyLi5lOTcyYWZmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlcldpdGhDdXN0b21WYWx2ZXMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyV2l0aEN1c3RvbVZhbHZlcy9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDE2ICs0NCwxNiBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvcHlKYXJUb0RvbWFpbkxpYiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KQEAgLTY1LDEyICs2NSwxMiBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJzZXQiIC8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iJHthcHBzZXJ2ZXIuaW5zdGFuY2UubmFtZX0uaHR0cC1zZXJ2aWNlLnZpcnR1YWwtc2VydmVyLnNlcnZlci5wcm9wZXJ0eS52YWx2ZV8yPSZxdW90O3ZhbHZlcy5HbGFzc0Zpc2hWYWx2ZUltcGwmcXVvdDsiLz4KLSAgICAgICAgPC9hbnRjYWxsPiAKKyAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhZG1pbi5jb21tYW5kIiB2YWx1ZT0ic2V0IiAvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiCiAgICAgICAgICAgICAgICAgICAgdmFsdWU9IiR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Lmh0dHAtc2VydmljZS52aXJ0dWFsLXNlcnZlci5zZXJ2ZXIucHJvcGVydHkudmFsdmVfMz0mcXVvdDt2YWx2ZXMuVG9tY2F0VmFsdmVCYXNlXzImcXVvdDsiLz4KLSAgICAgICAgPC9hbnRjYWxsPiAKKyAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQtc2VydmVyLWluc3RhbmNlLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgogCkBAIC04NSw3ICs4NSw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTk3LDEwICs5NywxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RvcmUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZW1vdmVKYXJGcm9tRG9tYWluTGliIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlcldpdGhDdXN0b21WYWx2ZXMvbGliL3ZhbHZlcy9Ub21jYXRWYWx2ZUJhc2VfMS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJXaXRoQ3VzdG9tVmFsdmVzL2xpYi92YWx2ZXMvVG9tY2F0VmFsdmVCYXNlXzEuamF2YQppbmRleCBiOWFhZjY0Li45YTBlZjMxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlcldpdGhDdXN0b21WYWx2ZXMvbGliL3ZhbHZlcy9Ub21jYXRWYWx2ZUJhc2VfMS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyV2l0aEN1c3RvbVZhbHZlcy9saWIvdmFsdmVzL1RvbWNhdFZhbHZlQmFzZV8xLmphdmEKQEAgLTI0LDcgKzI0LDcgQEAKIHB1YmxpYyBjbGFzcyBUb21jYXRWYWx2ZUJhc2VfMSBleHRlbmRzIFZhbHZlQmFzZSB7CiAKICAgICBwdWJsaWMgU3RyaW5nIGdldEluZm8oKSB7Ci0JcmV0dXJuIGdldENsYXNzKCkuZ2V0TmFtZSgpOworICAgIHJldHVybiBnZXRDbGFzcygpLmdldE5hbWUoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBpbnZva2UoUmVxdWVzdCByZXF1ZXN0LCBSZXNwb25zZSByZXNwb25zZSkKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyV2l0aEN1c3RvbVZhbHZlcy9saWIvdmFsdmVzL1RvbWNhdFZhbHZlQmFzZV8yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvdmlydHVhbFNlcnZlcldpdGhDdXN0b21WYWx2ZXMvbGliL3ZhbHZlcy9Ub21jYXRWYWx2ZUJhc2VfMi5qYXZhCmluZGV4IGVmMmRmNmUuLjFiNzM1YjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi92aXJ0dWFsU2VydmVyV2l0aEN1c3RvbVZhbHZlcy9saWIvdmFsdmVzL1RvbWNhdFZhbHZlQmFzZV8yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3ZpcnR1YWxTZXJ2ZXJXaXRoQ3VzdG9tVmFsdmVzL2xpYi92YWx2ZXMvVG9tY2F0VmFsdmVCYXNlXzIuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogcHVibGljIGNsYXNzIFRvbWNhdFZhbHZlQmFzZV8yIGV4dGVuZHMgVmFsdmVCYXNlIHsKIAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0SW5mbygpIHsKLQlyZXR1cm4gZ2V0Q2xhc3MoKS5nZXROYW1lKCk7CisgICAgcmV0dXJuIGdldENsYXNzKCkuZ2V0TmFtZSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGludm9rZShSZXF1ZXN0IHJlcXVlc3QsIFJlc3BvbnNlIHJlc3BvbnNlKQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcEFsdGVybmF0ZURvY3Jvb3QvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcEFsdGVybmF0ZURvY3Jvb3QvV2ViVGVzdC5qYXZhCmluZGV4IDZmZjQyZjUuLmM5YTkyNTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBBbHRlcm5hdGVEb2Nyb290L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwQWx0ZXJuYXRlRG9jcm9vdC9XZWJUZXN0LmphdmEKQEAgLTg0LDcgKzg0LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgYWx0ZXJuYXRlIGRvY3Jvb3Qgc3VwcG9ydCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTkyLDggKzkyLDggQEAKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoVEVTVF9OQU1FKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7ICAgICAKLSAgICAgICAgdHJ5IHsgCisgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlKGNvbnRleHRSb290LCAiL2RvbWFpbi54bWwiLCAiPGRvbWFpbiAiKTsKICAgICAgICAgICAgIGludm9rZShjb250ZXh0Um9vdCwgIi9zZXJ2ZXIucG9saWN5IiwgImdyYW50IGNvZGVCYXNlIik7CiAgICAgICAgICAgICBpbnZva2UoY29udGV4dFJvb3QsICIvY29uZmlnL2xvZ2luLmNvbmYiLCAiZmlsZVJlYWxtIik7CkBAIC0xMTQsNyArMTE0LDcgQEAKICAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgaW52b2tlKFN0cmluZyBjb250ZXh0Um9vdCwgU3RyaW5nIHVyaSwgU3RyaW5nIGV4cGVjdGVkKQogICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290ICsgdXJpKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBBbHRlcm5hdGVEb2Nyb290L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwQWx0ZXJuYXRlRG9jcm9vdC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDQ2YjI5ODQuLjdjMTRhNjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBBbHRlcm5hdGVEb2Nyb290L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcEFsdGVybmF0ZURvY3Jvb3QvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS13ZWJhcHAtYWx0ZXJuYXRlLWRvY3Jvb3QiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBBbHRlcm5hdGVEb2Nyb290L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBBbHRlcm5hdGVEb2Nyb290L2J1aWxkLnhtbAppbmRleCA2ZmQxYmI3Li40ZjQ4MWNlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwQWx0ZXJuYXRlRG9jcm9vdC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcEFsdGVybmF0ZURvY3Jvb3QvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxNiArNDIsMTYgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvcHlSZXNvdXJjZXMiLz4KQEAgLTcyLDExICs3MiwxMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC04OCwxMCArODgsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0b3JlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVtb3ZlUmVzb3VyY2VzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwQWx0ZXJuYXRlRG9jcm9vdFRhZ0ZpbGUvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcEFsdGVybmF0ZURvY3Jvb3RUYWdGaWxlL1dlYlRlc3QuamF2YQppbmRleCAyMWI3NDAyLi5kMzU0YjI5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwQWx0ZXJuYXRlRG9jcm9vdFRhZ0ZpbGUvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBBbHRlcm5hdGVEb2Nyb290VGFnRmlsZS9XZWJUZXN0LmphdmEKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgYWx0ZXJuYXRlIGRvY3Jvb3Qgc3VwcG9ydCBmb3IgdGFnIGZpbGVzIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNDksOCArNDksOCBAQAogICAgICAgICBzdGF0LnByaW50U3VtbWFyeShURVNUX05BTUUpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsgICAgIAotICAgICAgICB0cnkgeyAKKyAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwQWx0ZXJuYXRlRG9jcm9vdFRhZ0ZpbGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBBbHRlcm5hdGVEb2Nyb290VGFnRmlsZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGE1ODY3NDEuLjc3ZTM2MmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBBbHRlcm5hdGVEb2Nyb290VGFnRmlsZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBBbHRlcm5hdGVEb2Nyb290VGFnRmlsZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXdlYmFwcC1hbHRlcm5hdGUtZG9jcm9vdC10YWdmaWxlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwQWx0ZXJuYXRlRG9jcm9vdFRhZ0ZpbGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcEFsdGVybmF0ZURvY3Jvb3RUYWdGaWxlL2J1aWxkLnhtbAppbmRleCA5ZWI5OWI2Li5lNmI1Zjk0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwQWx0ZXJuYXRlRG9jcm9vdFRhZ0ZpbGUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBBbHRlcm5hdGVEb2Nyb290VGFnRmlsZS9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE2ICs0MiwxNiBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ibW92ZVJlc291cmNlcyIvPgpAQCAtNjQsNyArNjQsNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTcyLDcgKzcyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtODQsMTAgKzg0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVzdG9yZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlc3RvcmVSZXNvdXJjZXMiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBEZXBsb3lEYXNoRGFzaExpYnJhcmllcy9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwRGVwbG95RGFzaERhc2hMaWJyYXJpZXMvV2ViVGVzdC5qYXZhCmluZGV4IDk2NWFkNzcuLjQ5NmYzZjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBEZXBsb3lEYXNoRGFzaExpYnJhcmllcy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcERlcGxveURhc2hEYXNoTGlicmFyaWVzL1dlYlRlc3QuamF2YQpAQCAtMzksNyArMzksNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIDYzMjk0MTUiKTsKQEAgLTUzLDExICs1MywxMSBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgICArIGNvbnRleHRSb290ICsgIi9UZXN0U2VydmxldCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG86ICIgKyB1cmwudG9TdHJpbmcoKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwRGVwbG95RGFzaERhc2hMaWJyYXJpZXMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBEZXBsb3lEYXNoRGFzaExpYnJhcmllcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGFlY2E1MGUuLjZiNmNmNTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBEZXBsb3lEYXNoRGFzaExpYnJhcmllcy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBEZXBsb3lEYXNoRGFzaExpYnJhcmllcy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXdlYmFwcC1kZXBsb3ktZGFzaC1kYXNoLWxpYnJhcmllcyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcERlcGxveURhc2hEYXNoTGlicmFyaWVzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBEZXBsb3lEYXNoRGFzaExpYnJhcmllcy9idWlsZC54bWwKaW5kZXggNWM5Nzc4Yy4uNDdiYTk2NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcERlcGxveURhc2hEYXNoTGlicmFyaWVzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwRGVwbG95RGFzaERhc2hMaWJyYXJpZXMvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ0LDIzICs0NCwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1saWJyYXJpZXMiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTcyLDEwICs3MiwxMCBAQAogICAgICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBMb2FkZXJDb25zaWRlckhpZGRlbkphckZpbGVzL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBMb2FkZXJDb25zaWRlckhpZGRlbkphckZpbGVzL1dlYlRlc3QuamF2YQppbmRleCBkY2M0ZWNiLi45ZDgyMDcxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwTG9hZGVyQ29uc2lkZXJIaWRkZW5KYXJGaWxlcy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcExvYWRlckNvbnNpZGVySGlkZGVuSmFyRmlsZXMvV2ViVGVzdC5qYXZhCkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgNjMxNDQ4MSIpOwpAQCAtNTcsMTggKzU3LDE4IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgCisKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY29udGV4dFJvb3QgKyAiL1Rlc3RTZXJ2bGV0Iik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29ubmVjdGluZyB0bzogIiArIHVybC50b1N0cmluZygpKTsKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsgCisgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIldyb25nIHJlc3BvbnNlIGNvZGUuIEV4cGVjdGVkOiAyMDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCByZWNlaXZlZDogIiArIHJlc3BvbnNlQ29kZSk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwTG9hZGVyQ29uc2lkZXJIaWRkZW5KYXJGaWxlcy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcExvYWRlckNvbnNpZGVySGlkZGVuSmFyRmlsZXMvYnVpbGQucHJvcGVydGllcwppbmRleCAxNWVkZDdiLi4yNzU4MjY5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwTG9hZGVyQ29uc2lkZXJIaWRkZW5KYXJGaWxlcy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBMb2FkZXJDb25zaWRlckhpZGRlbkphckZpbGVzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0td2ViYXBwLWxvYWRlci1jb25zaWRlci1oaWRkZW4tamFyLWZpbGVzIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwTG9hZGVyQ29uc2lkZXJIaWRkZW5KYXJGaWxlcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwTG9hZGVyQ29uc2lkZXJIaWRkZW5KYXJGaWxlcy9idWlsZC54bWwKaW5kZXggMDBmZGFkMy4uYzM5Nzc2ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcExvYWRlckNvbnNpZGVySGlkZGVuSmFyRmlsZXMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBMb2FkZXJDb25zaWRlckhpZGRlbkphckZpbGVzL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMjMgKzQyLDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzAsMTAgKzcwLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcExvYWRlckVtcHR5SmFyL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBMb2FkZXJFbXB0eUphci9XZWJUZXN0LmphdmEKaW5kZXggZTVmYzViZC4uYzc2YTBjYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcExvYWRlckVtcHR5SmFyL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwTG9hZGVyRW1wdHlKYXIvV2ViVGVzdC5qYXZhCkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEJ1Z3RyYXEgNDY3MDA5OSBhbmQgNDY0OTgyMSIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTUwLDggKzUwLDggQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgIAotICAgICAgICB0cnkgeyAKKworICAgICAgICB0cnkgewogICAgICAgICAgICAgaW52b2tlSlNQKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpAQCAtNzEsNyArNzEsNyBAQAogICAgICAgICBpbnQgY29kZSA9IGNvbm4uZ2V0UmVzcG9uc2VDb2RlKCk7CiAgICAgICAgIGlmIChjb2RlICE9IDIwMCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiVW5leHBlY3RlZCByZXNwb25zZSBjb2RlOiAiICsgY29kZSk7Ci0gICAgICAgIH0gICAgICAgICAKKyAgICAgICAgfQogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcExvYWRlckVtcHR5SmFyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwTG9hZGVyRW1wdHlKYXIvYnVpbGQucHJvcGVydGllcwppbmRleCA2YTVjZjkyLi4zZTM0MjIwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwTG9hZGVyRW1wdHlKYXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwTG9hZGVyRW1wdHlKYXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS13ZWJhcHBsb2FkZXItZW1wdHktamFyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwTG9hZGVyRW1wdHlKYXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcExvYWRlckVtcHR5SmFyL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwTG9hZGVyRW1wdHlKYXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBMb2FkZXJFbXB0eUphci9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwTG9hZGVyRW1wdHlKYXIvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcExvYWRlckVtcHR5SmFyL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCAzYmNiY2NkLi44ZWQ5MzRmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwTG9hZGVyRW1wdHlKYXIvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBMb2FkZXJFbXB0eUphci9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTIyLDEzICsyMiwxMyBAQAogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCIKICAgICAgICAgIHZlcnNpb249IjIuNCI+Ci0gICAgIAorCiAgICAgPHNlcnZsZXQ+CiAgICAgICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldFRlc3Q8L2Rpc3BsYXktbmFtZT4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8c2VydmxldC1jbGFzcz50ZXN0LlNlcnZsZXRUZXN0PC9zZXJ2bGV0LWNsYXNzPgotICAgIDwvc2VydmxldD4gIAotICAgIAorICAgIDwvc2VydmxldD4KKwogICAgPHNlcnZsZXQtbWFwcGluZz4KICAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0VGVzdDwvc2VydmxldC1uYW1lPgogICAgICAgICA8dXJsLXBhdHRlcm4+L1NlcnZsZXRUZXN0PC91cmwtcGF0dGVybj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBMb2FkZXJHZXRSZXNvdXJjZURvdC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwTG9hZGVyR2V0UmVzb3VyY2VEb3QvV2ViVGVzdC5qYXZhCmluZGV4IGUwYTRiZWIuLjJiYTY5MDAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBMb2FkZXJHZXRSZXNvdXJjZURvdC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcExvYWRlckdldFJlc291cmNlRG90L1dlYlRlc3QuamF2YQpAQCAtMTksNyArMTksNyBAQAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuKjsKIAogLyoKLSAqIFVuaXQgdGVzdCBmb3IgCisgKiBVbml0IHRlc3QgZm9yCiAgKiAgIGh0dHBzOi8vZ2xhc3NmaXNoLmRldi5qYXZhLm5ldC9pc3N1ZXMvc2hvd19idWcuY2dpP2lkPTY4MTAKICAqICAgKCJXZWJhcHBDbGFzc0xvYWRlciBjYW4gbm90IHJlc29sdmUgcmVzb3VyY2Ugd2l0aCAiLiIgc3VmZml4IikKICAqLwpAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIEdsYXNzRmlzaCBJVCA2ODEwIik7CkBAIC01MiwxMSArNTIsMTEgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjb250ZXh0Um9vdCArICIvVGVzdFNlcnZsZXQiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcExvYWRlckdldFJlc291cmNlRG90L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwTG9hZGVyR2V0UmVzb3VyY2VEb3QvYnVpbGQucHJvcGVydGllcwppbmRleCA1NTNkYTA3Li5mYTUxMTAyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwTG9hZGVyR2V0UmVzb3VyY2VEb3QvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwTG9hZGVyR2V0UmVzb3VyY2VEb3QvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS13ZWJhcHAtbG9hZGVyLWdldHJlc291cmNlLWRvdCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcExvYWRlckdldFJlc291cmNlRG90L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBMb2FkZXJHZXRSZXNvdXJjZURvdC9idWlsZC54bWwKaW5kZXggMDBmZGFkMy4uYzM5Nzc2ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcExvYWRlckdldFJlc291cmNlRG90L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwTG9hZGVyR2V0UmVzb3VyY2VEb3QvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwyMyArNDIsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03MCwxMCArNzAsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwTG9hZGVySWdub3JlSGlkZGVuSmFyRmlsZXMvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcExvYWRlcklnbm9yZUhpZGRlbkphckZpbGVzL1dlYlRlc3QuamF2YQppbmRleCA1ZTI2NGQ3Li4xZTMwMTk0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwTG9hZGVySWdub3JlSGlkZGVuSmFyRmlsZXMvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBMb2FkZXJJZ25vcmVIaWRkZW5KYXJGaWxlcy9XZWJUZXN0LmphdmEKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciA2MzE0NDgxIik7CkBAIC01MSwxOCArNTEsMTggQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAKKwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovLyIgKyBob3N0ICArICI6IiArIHBvcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjb250ZXh0Um9vdCArICIvVGVzdFNlcnZsZXQiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDb25uZWN0aW5nIHRvOiAiICsgdXJsLnRvU3RyaW5nKCkpOwogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgY29ubi5jb25uZWN0KCk7CiAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgeyAKKyAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlIGNvZGUuIEV4cGVjdGVkOiAyMDAiICsKICAgICAgICAgICAgICAgICAiLCByZWNlaXZlZDogIiArIHJlc3BvbnNlQ29kZSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBMb2FkZXJJZ25vcmVIaWRkZW5KYXJGaWxlcy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcExvYWRlcklnbm9yZUhpZGRlbkphckZpbGVzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZTAxNDljYS4uMDk4NGY4OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcExvYWRlcklnbm9yZUhpZGRlbkphckZpbGVzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcExvYWRlcklnbm9yZUhpZGRlbkphckZpbGVzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0td2ViYXBwLWxvYWRlci1pZ25vcmUtaGlkZGVuLWphci1maWxlcyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcExvYWRlcklnbm9yZUhpZGRlbkphckZpbGVzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJhcHBMb2FkZXJJZ25vcmVIaWRkZW5KYXJGaWxlcy9idWlsZC54bWwKaW5kZXggODQ1NTZiMC4uZmI2YTJlNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmFwcExvYWRlcklnbm9yZUhpZGRlbkphckZpbGVzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViYXBwTG9hZGVySWdub3JlSGlkZGVuSmFyRmlsZXMvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmRhdkNvcHlEZWxldGUvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmRhdkNvcHlEZWxldGUvV2ViVGVzdC5qYXZhCmluZGV4IGQ4YzdkNzEuLjM5MDcxMWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJkYXZDb3B5RGVsZXRlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViZGF2Q29weURlbGV0ZS9XZWJUZXN0LmphdmEKQEAgLTQyLDcgKzQyLDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgV2ViREFWIGNvcHkgYW5kIGRlbGV0ZSIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFN0cmluZyB0bXBsYXRlID0gIi9kYXRhLmh0bWwiOwogICAgICAgICAgICAgU3RyaW5nIHBhZ2UgPSAiL2luZGV4Lmh0bWwiOwotICAgICAgICAgICAgaW52b2tlKG5ldyBTdHJpbmdbXSB7ICJDT1BZICIgKyBjb250ZXh0Um9vdCArIHRtcGxhdGUgKyAiIEhUVFAvMS4xIiwgCisgICAgICAgICAgICBpbnZva2UobmV3IFN0cmluZ1tdIHsgIkNPUFkgIiArIGNvbnRleHRSb290ICsgdG1wbGF0ZSArICIgSFRUUC8xLjEiLAogICAgICAgICAgICAgICAgICAgICAiRGVzdGluYXRpb246IGh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdCArIHBhZ2UgfSwgbnVsbCwgZmFsc2UpOwogCiAgICAgICAgICAgICBib29sZWFuIHN0YXR1cyA9IGludm9rZShuZXcgU3RyaW5nW10geyAiR0VUICIgKyBjb250ZXh0Um9vdCArIHBhZ2UgICsgIiBIVFRQLzEuMSJ9LCBFWFBFQ1RFRCwgZmFsc2UpOwpAQCAtOTIsNyArOTIsNyBAQAogICAgICAgICBmb3IgKFN0cmluZyByZXFMaW5lIDogcmVxTGluZXMpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXFMaW5lKTsKICAgICAgICAgICAgIG9zLndyaXRlKChyZXFMaW5lICsgIlxuIikuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIH0gICAKKyAgICAgICAgfQogCiAgICAgICAgIG9zLndyaXRlKCJIb3N0OiBsb2NhbGhvc3RcbiIuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCJDb25uZWN0aW9uOiBjbG9zZVxuIi5nZXRCeXRlcygpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJkYXZDb3B5RGVsZXRlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViZGF2Q29weURlbGV0ZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGE5M2E0ODIuLmM0ZTlmMjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJkYXZDb3B5RGVsZXRlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmRhdkNvcHlEZWxldGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS13ZWJkYXYtY29weS1kZWxldGUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJkYXZDb3B5RGVsZXRlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJkYXZDb3B5RGVsZXRlL2J1aWxkLnhtbAppbmRleCBhZDAyNWQ5Li5kZTFkY2ZhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2ViZGF2Q29weURlbGV0ZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmRhdkNvcHlEZWxldGUvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwyMiArNDQsMjIgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzEsMTAgKzcxLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvY29udGV4dFJvb3QvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvY29udGV4dFJvb3QvV2ViVGVzdC5qYXZhCmluZGV4IGI1NjU0MzMuLjNkOThmYzUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL2NvbnRleHRSb290L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9jb250ZXh0Um9vdC9XZWJUZXN0LmphdmEKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgY29udGV4dCByb290IGluIHdlYmxvZ2ljLnhtbCIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKQEAgLTc3LDExICs3NywxMSBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgYm9vbGVhbiB0ZXN0U3RhdHVzID0gRVhQRUNURURfUkVTUE9OU0UuZXF1YWxzKGxpbmUpOwogICAgICAgICAgICAgaWYgKCF0ZXN0U3RhdHVzKSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgICAgICB0ZXN0U3RhdHVzID0gZmFsc2U7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCAodGVzdFN0YXR1cyk/IHN0YXQuUEFTUyA6IHN0YXQuRkFJTCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvY29udGV4dFJvb3QvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL2NvbnRleHRSb290L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMGI1ZTg0My4uZWI5YzgxNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvY29udGV4dFJvb3QvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9jb250ZXh0Um9vdC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXdsLWNvbnRleHQtcm9vdCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvY29udGV4dFJvb3QvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvY29udGV4dFJvb3QvYnVpbGQueG1sCmluZGV4IGM1MWI1YTAuLmU3MmJkMjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL2NvbnRleHRSb290L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9jb250ZXh0Um9vdC9idWlsZC54bWwKQEAgLTM5LDkgKzM5LDkgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjbGVhbiI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KQEAgLTUyLDExICs1MiwxMSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1uby1jb250ZXh0LXJvb3QiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC02OCwxMCArNjgsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9kZWxlZ2F0ZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9kZWxlZ2F0ZS9XZWJUZXN0LmphdmEKaW5kZXggN2I1OTgyNy4uY2ZmM2Q5YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvZGVsZWdhdGUvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL2RlbGVnYXRlL1dlYlRlc3QuamF2YQpAQCAtMjMsMTAgKzIzLDEwIEBACiAgKiBVbml0IHRlc3QgZm9yIHByZWZlci13ZWItaW5mLWNsYXNzZXMgaW4gd2VibG9naWMueG1sLgogICovCiBwdWJsaWMgY2xhc3MgV2ViVGVzdCB7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgY291bnQgPSAwOwogICAgIHByaXZhdGUgc3RhdGljIGludCBFWFBFQ1RFRF9DT1VOVCA9IDE7Ci0gICAgCisKICAgICBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQ9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIApAQCAtNDAsMTYgKzQwLDE2IEBACiAKICAgICAgICAgaW50IHBvcnQgPSBuZXcgSW50ZWdlcihwb3J0UykuaW50VmFsdWUoKTsKICAgICAgICAgU3RyaW5nIG5hbWU7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBnb0dldChob3N0LCBwb3J0LCAiZGVsZWdhdGUtZmxhZyIsIGNvbnRleHRSb290ICsgIi9TZXJ2bGV0VGVzdCIgKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odC5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgICAgIGlmIChjb3VudCAhPSBFWFBFQ1RFRF9DT1VOVCl7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZGVsZWdhdGUiLCBzdGF0LkZBSUwpOwotICAgICAgICB9ICAgICAgICAgICAKKyAgICAgICAgfQogCiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3ZWIvZGVsZWdhdGVGbGFnLS0tPiBleHBlY3QgIiArIEVYUEVDVEVEX0NPVU5UICsgIiBQQVNTIik7CiAgICAgfQpAQCAtNjMsNyArNjMsNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKCJHRVQgIiArIGNvbnRleHRQYXRoICsgIiBIVFRQLzEuMFxuIikpOwogICAgICAgICBvcy53cml0ZSgoIkdFVCAiICsgY29udGV4dFBhdGggKyAiIEhUVFAvMS4wXG4iKS5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJpcyA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKICAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOwpAQCAtNzUsMTggKzc1LDE4IEBACiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGxpbmVOdW0gKyAiOiAgIiArIGxpbmUpOwogICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPSAtMSkgewogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgc3RhdHVzID0gbGluZS5zdWJzdHJpbmcoaW5kZXgrMik7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMuZXF1YWxzSWdub3JlQ2FzZSgiUEFTUyIpKXsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHJlc3VsdCArIjogIiArIGxpbmUuc3Vic3RyaW5nKDAsaW5kZXgpLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMocmVzdWx0ICsiOiAiICsgbGluZS5zdWJzdHJpbmcoMCxpbmRleCksIHN0YXQuRkFJTCk7ICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHJlc3VsdCArIjogIiArIGxpbmUuc3Vic3RyaW5nKDAsaW5kZXgpLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbGluZU51bSsrOwogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoKCBFeGNlcHRpb24gZXgpewotICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7ICAgCisgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlRlc3QgVU5QUkVESUNURUQtRkFJTFVSRSIpOwogICAgICAgICAgfQogICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvZGVsZWdhdGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL2RlbGVnYXRlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOGM0MTdmYi4uM2EyNTYwMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvZGVsZWdhdGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9kZWxlZ2F0ZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMiArMTUsMTIgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0td2wtZGVsZWdhdGUiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXdsLWRlbGVnYXRlIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPCEtLXByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvLS0+CiA8cHJvcGVydHkgbmFtZT0id2VibG9naWMueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWJsb2dpYy54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL2RlbGVnYXRlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL2RlbGVnYXRlL2J1aWxkLnhtbAppbmRleCBlOTg4OGE4Li42NDE3ZDBiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9kZWxlZ2F0ZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvZGVsZWdhdGUvYnVpbGQueG1sCkBAIC00NCwxMSArNDQsMTEgQEAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLi9zaGFyZWQvdGVzdCIKICAgICAgICAgICAgICAgIGRlc3RkaXI9Ii4vc2hhcmVkIiBpbmNsdWRlcz0iKi5qYXZhIi8+CiAgICAgICAgIDxqYXIgZGVzdGZpbGU9InNoYXJlZC5qYXIiIGJhc2VkaXI9InNoYXJlZCIvPgotICAgICAgICA8Y29weSBmaWxlPSJzaGFyZWQuamFyIiAKKyAgICAgICAgPGNvcHkgZmlsZT0ic2hhcmVkLmphciIKICAgICAgICAgICAgICAgdG9kaXI9IiR7ZW52LlMxQVNfSE9NRX0vbGliIi8+Ci0gICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXItaW5zdGFuY2UtY29tbW9uIi8+ICAgICAgICAKKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXN0YXJ0LXNlcnZlci1pbnN0YW5jZS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC01NiwyNCArNTYsMjQgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgICA8amF2YWMKICAgICAgICAgICAgIHNyY2Rpcj0iLiIKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KLSAgICA8L3RhcmdldD4gCi0gICAgCisgICAgPC90YXJnZXQ+CisKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgogCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTg1LDE0ICs4NSwxNCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RvcmUtYXBwc2VydiIgZGVwZW5kcz0ic2V0dXAtYXBwc2VydiI+CiAgICAgICAgIDxkZWxldGUgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9saWIvc2hhcmVkLmphciIvPgotICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQtc2VydmVyLWluc3RhbmNlLWNvbW1vbiIvPiAgICAgICAgCisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXItaW5zdGFuY2UtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL2RlbGVnYXRlL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL2RlbGVnYXRlL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCA3MzQ2OTdhLi5jMDdlZmM4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9kZWxlZ2F0ZS9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvZGVsZWdhdGUvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yMiwxMiArMjIsMTIgQEAKICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiCiAgICAgICAgICB2ZXJzaW9uPSIyLjQiPgotICAgICAKKwogICAgIDxzZXJ2bGV0PgogICAgICAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXRUZXN0PC9kaXNwbGF5LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldFRlc3Q8L3NlcnZsZXQtbmFtZT4KICAgICAgICAgPHNlcnZsZXQtY2xhc3M+dGVzdC5TZXJ2bGV0VGVzdDwvc2VydmxldC1jbGFzcz4KLSAgICA8L3NlcnZsZXQ+ICAKKyAgICA8L3NlcnZsZXQ+CiAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vU2VydmxldFRlc3Q8L3VybC1wYXR0ZXJuPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvZGVsZWdhdGUvc2VydmxldC90ZXN0L1NlcnZsZXRUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9kZWxlZ2F0ZS9zZXJ2bGV0L3Rlc3QvU2VydmxldFRlc3QuamF2YQppbmRleCBiOTM5NTgzLi5mM2VlY2I2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9kZWxlZ2F0ZS9zZXJ2bGV0L3Rlc3QvU2VydmxldFRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9kZWxlZ2F0ZS9zZXJ2bGV0L3Rlc3QvU2VydmxldFRlc3QuamF2YQpAQCAtMjYsMTEgKzI2LDExIEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBBU1MgPSAiV0xEZWxlZ2F0ZVRlc3Q6OlBBU1MiOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBGQUlMID0gIldMRGVsZWdhdGVUZXN0OjpGQUlMIjsKIAotICAgIAorCiAgICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICBzdXBlci5pbml0KGNvbmZpZyk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuaW5pdF0iKTsgICAgICAgIAotICAgICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5pbml0XSIpOworCiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CkBAIC0zOCwxMiArMzgsMTIgQEAKICAgICAgICAgZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7ICAgICAgICAKKyAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiW1NlcnZsZXQuZG9Qb3N0XSIpOwotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgc3RhdHVzID0gRkFJTDsKICAgICAgICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwotICAgICAgICAKKwogICAgICAgICBEZWxlZ2F0ZVRlc3QgZGVsZWdhdGUgPSBudWxsOwogICAgICAgICB0cnl7CiAgICAgICAgICAgICBDbGFzcyBjbGF6eiA9IENsYXNzLmZvck5hbWUoInRlc3QuRGVsZWdhdGVUZXN0Iik7CkBAIC01Niw3ICs1Niw3IEBACiAKICAgICAgICAgaWYgKGRlbGVnYXRlICE9IG51bGwpewogICAgICAgICAgICAgdHJ5ewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGVsZWdhdGU6ICIgKyBkZWxlZ2F0ZS5nZXRDaGlsZE5hbWUoKSk7ICAgICAgIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGVsZWdhdGU6ICIgKyBkZWxlZ2F0ZS5nZXRDaGlsZE5hbWUoKSk7CiAgICAgICAgICAgICAgICAgc3RhdHVzID0gUEFTUzsKICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCl7CiAgICAgICAgICAgICAgICAgc3RhdHVzID0gRkFJTDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL2Rpckxpc3RpbmcvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvZGlyTGlzdGluZy9XZWJUZXN0LmphdmEKaW5kZXggMmViMmZmYS4uYzIxN2E5NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvZGlyTGlzdGluZy9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvZGlyTGlzdGluZy9XZWJUZXN0LmphdmEKQEAgLTI2LDcgKzI2LDcgQEAKICAqICAgICBjb250YWluZXItZGVzY3JpcHRvcjppbmRleC1kaXJlY3Rvcnktc29ydC1ieQogICovCiBwdWJsaWMgY2xhc3MgV2ViVGVzdCB7Ci0gICAgCisKICAgICBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQ9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIApAQCAtMzQsNyArMzQsNyBAQAogCiAgICAgICAgIC8vIFRoZSBzdGF0IHJlcG9ydGVyIHdyaXRlcyBvdXQgdGhlIHRlc3QgaW5mbyBhbmQgcmVzdWx0cwogICAgICAgICAvLyBpbnRvIHRoZSB0b3AtbGV2ZWwgcXVpY2tsb29rIGRpcmVjdG9yeSBkdXJpbmcgYSBydW4uCi0gICAgICAKKwogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJXZWJsb2dpY0REOiBpbmRleC1kaXJlY3RvcnktZW5hYmxlZCwgaW5kZXgtZGlyZWN0b3J5LXNvcnQtYnkiKTsKIAogICAgICAgICBTdHJpbmcgaG9zdCA9IGFyZ3NbMF07CkBAIC00MywxMCArNDMsMTAgQEAKIAogICAgICAgICBpbnQgcG9ydCA9IG5ldyBJbnRlZ2VyKHBvcnRTKS5pbnRWYWx1ZSgpOwogICAgICAgICBTdHJpbmcgbmFtZTsKLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGJvb2xlYW4gb2sgPSBnb0dldChob3N0LCBwb3J0LCAiIiwgY29udGV4dFJvb3QgKyAiLyIgKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2wtd2ViLWRpcmVjdG9yeUxpc3RpbmciLAogICAgICAgICAgICAgICAgICAgICAoKG9rKT8gc3RhdC5QQVNTIDogc3RhdC5GQUlMKSk7CiAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0KSB7CkBAIC03Miw3ICs3Miw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKCJHRVQgIiArIGNvbnRleHRQYXRoICsgIiBIVFRQLzEuMFxuIikpOwogICAgICAgICAgICAgb3Mud3JpdGUoKCJHRVQgIiArIGNvbnRleHRQYXRoICsgIiBIVFRQLzEuMFxuIikuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgICAgICBvcy53cml0ZSgiXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIElucHV0U3RyZWFtIGlzID0gcy5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYmlzID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogICAgICAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOwpAQCAtOTQsMTEgKzk0LDExIEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImEsIGIsIGM6ICIgKyBhICsgIiwgIiArIGIgKyAiLCAiICsgYyk7CiAgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBleCl7Ci0gICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsgICAKKyAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiVGVzdCBVTlBSRURJQ1RFRC1GQUlMVVJFIik7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gKGxpc3REaXIgJiYgKGIgPCBjKSAmJiAoYyA8IGEpKTsKICAgIH0KLSAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL2Rpckxpc3RpbmcvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL2Rpckxpc3RpbmcvYnVpbGQucHJvcGVydGllcwppbmRleCBjZWQyZGIxLi41MjliYThkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9kaXJMaXN0aW5nL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvZGlyTGlzdGluZy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMiArMTUsMTIgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0td2wtZGlyZWN0b3J5TGlzdGluZyIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0td2wtZGlyZWN0b3J5TGlzdGluZyIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWJsb2dpYy54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYmxvZ2ljLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iL3dlYi1kaXJlY3RvcnlMaXN0aW5nIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9kaXJMaXN0aW5nL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL2Rpckxpc3RpbmcvYnVpbGQueG1sCmluZGV4IDE2MTljOTkuLjY3Y2ZlMzIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL2Rpckxpc3RpbmcvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL2Rpckxpc3RpbmcvYnVpbGQueG1sCkBAIC0zNiwyMSArMzYsMjEgQEAKICAgICAgIDxkZWxldGUgZmlsZT0iV2ViVGVzdC5jbGFzcyIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgICAgICA8ZGVsZXRlIGZpbGU9IlJlcFJ1bkNvbmYudHh0IiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNsZWFuIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCi0gICAgPC90YXJnZXQ+IAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgICA8amF2YWMKICAgICAgICAgICAgIHNyY2Rpcj0iLiIKQEAgLTY3LDEwICs2NywxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL2pzcERlc2NyaXB0b3IvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvanNwRGVzY3JpcHRvci9XZWJUZXN0LmphdmEKaW5kZXggMWYyMjE5OS4uNzk5MGQyZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvanNwRGVzY3JpcHRvci9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvanNwRGVzY3JpcHRvci9XZWJUZXN0LmphdmEKQEAgLTM1LDEyICszNSwxMiBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBqc3AtZGVzY3JpcHRvciBpbiB3ZWJsb2dpYy54bWwiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CiAgICAgICAgIHdlYlRlc3QuZG9UZXN0KCIvdGVzdC5qc3AiKTsKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZyBwYXRoKSB7CkBAIC04Myw3ICs4Myw3IEBACiAgICAgICAgICAgICAgICAgLy8gVGVzdCAzLiAgTWFrZSBzdXJlIHRoYXQgc3BhY2VzIGFyZSB0cmltbWVkLgogICAgICAgICAgICAgICAgIHRlc3ROYW1lID0gIndsIGpzcCBkZXNjOiBjb21wcmVzcy1odG1sLXRlbXBsYXRlIjsKICAgICAgICAgICAgICAgICBTdHJpbmcgbGluZSA9IGlucHV0LnJlYWRMaW5lKCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBpZiAobGluZS5lcXVhbHMoInBhc3MhIikpIHsKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdE5hbWUsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL2pzcERlc2NyaXB0b3IvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL2pzcERlc2NyaXB0b3IvYnVpbGQucHJvcGVydGllcwppbmRleCBjODRhYWRmLi43Nzk0NTk1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9qc3BEZXNjcmlwdG9yL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvanNwRGVzY3JpcHRvci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMiArMTUsMTIgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0tV0xqc3BEZXNjcmlwdG9yIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1XTGpzcERlc2NyaXB0b3IiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWJsb2dpYy54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYmxvZ2ljLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iJHthcHBuYW1lfSIvPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9qc3BEZXNjcmlwdG9yL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL2pzcERlc2NyaXB0b3IvYnVpbGQueG1sCmluZGV4IDA1N2ZlMDAuLmY0ZGFiOGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL2pzcERlc2NyaXB0b3IvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL2pzcERlc2NyaXB0b3IvYnVpbGQueG1sCkBAIC0zOSw5ICszOSw5IEBACiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iIGluY2x1ZGVzPSIqLmNsYXNzIi8+CiAgICAgICAgIDwvZGVsZXRlPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY2xlYW4iPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8L2FudGNhbGw+CkBAIC01MiwxMSArNTIsMTEgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNjgsMTAgKzY4LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvcmVmZXJlbmNlRGVzY3JpcHRvci9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9yZWZlcmVuY2VEZXNjcmlwdG9yL1dlYlRlc3QuamF2YQppbmRleCBkZjM0OTJkLi45NzA5MDUzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9yZWZlcmVuY2VEZXNjcmlwdG9yL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9yZWZlcmVuY2VEZXNjcmlwdG9yL1dlYlRlc3QuamF2YQpAQCAtMzksNyArMzksNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBydW4tYXMtcHJpbmNpcGFsLW5hbWUgaW4gd2VibG9naWMueG1sIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtMTAxLDcgKzEwMSw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFleHBlY3RlZFJlc3BvbnNlLmVxdWFscyhsaW5lKSkgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICBleHBlY3RlZFJlc3BvbnNlICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgIHRlc3RTdGF0dXMgPSBmYWxzZTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvcmVmZXJlbmNlRGVzY3JpcHRvci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvcmVmZXJlbmNlRGVzY3JpcHRvci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDI3OTUwYjkuLjRkMDYwMDYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3JlZmVyZW5jZURlc2NyaXB0b3IvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9yZWZlcmVuY2VEZXNjcmlwdG9yL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0td2wtcmVmZXJlbmNlLWRlc2NyaXB0b3IiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3JlZmVyZW5jZURlc2NyaXB0b3IvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvcmVmZXJlbmNlRGVzY3JpcHRvci9idWlsZC54bWwKaW5kZXggZmUyMTg1Ny4uYzRlNzgyYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvcmVmZXJlbmNlRGVzY3JpcHRvci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvcmVmZXJlbmNlRGVzY3JpcHRvci9idWlsZC54bWwKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9IiouY2xhc3MiLz4KICAgICAgICAgPC9kZWxldGU+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDcsMTYgKzQ3LDE2IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+CiAKQEAgLTc3LDcgKzc3LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtODksMTAgKzg5LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVzdG9yZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uLWlnbm9yZS1mYWlsIj4KQEAgLTEwNSw3ICsxMDUsNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im9wZXJhbmQucHJvcHMiIHZhbHVlPSItLWRlc3R0eXBlIHF1ZXVlIG15X3F1ZXVlIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvcmVmZXJlbmNlRGVzY3JpcHRvci9zZXJ2bGV0L3Rlc3QvVGVzdFNlcnZsZXQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3JlZmVyZW5jZURlc2NyaXB0b3Ivc2VydmxldC90ZXN0L1Rlc3RTZXJ2bGV0LmphdmEKaW5kZXggNzk0ODQxOC4uOTM3NTg2OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvcmVmZXJlbmNlRGVzY3JpcHRvci9zZXJ2bGV0L3Rlc3QvVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9yZWZlcmVuY2VEZXNjcmlwdG9yL3NlcnZsZXQvdGVzdC9UZXN0U2VydmxldC5qYXZhCkBAIC0zNiw3ICszNiw3IEBACiAgICAgcHVibGljIHZvaWQgaW5pdCgpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIEluaXRpYWxDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgICAgICBxdWV1ZSA9IChRdWV1ZSlpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvam1zL1F1ZXVlTmFtZSIpOyAgIAorICAgICAgICAgICAgcXVldWUgPSAoUXVldWUpaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2ptcy9RdWV1ZU5hbWUiKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGV4KTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvcnVuQXNQcmluY2lwYWxOYW1lL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3J1bkFzUHJpbmNpcGFsTmFtZS9XZWJUZXN0LmphdmEKaW5kZXggYzg1Njk0NS4uNmJkYWIxOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvcnVuQXNQcmluY2lwYWxOYW1lL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9ydW5Bc1ByaW5jaXBhbE5hbWUvV2ViVGVzdC5qYXZhCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIHJ1bi1hcy1wcmluY2lwYWwtbmFtZSBpbiB3ZWJsb2dpYy54bWwiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CkBAIC05OSw3ICs5OSw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFleHBlY3RlZFJlc3BvbnNlLmVxdWFscyhsaW5lKSkgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXcm9uZyByZXNwb25zZS4gRXhwZWN0ZWQ6ICIgKyAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV3JvbmcgcmVzcG9uc2UuIEV4cGVjdGVkOiAiICsKICAgICAgICAgICAgICAgICBleHBlY3RlZFJlc3BvbnNlICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgIHRlc3RTdGF0dXMgPSBmYWxzZTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvcnVuQXNQcmluY2lwYWxOYW1lL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9ydW5Bc1ByaW5jaXBhbE5hbWUvYnVpbGQucHJvcGVydGllcwppbmRleCA0MTJhYjA1Li4xNzE4MTA4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9ydW5Bc1ByaW5jaXBhbE5hbWUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9ydW5Bc1ByaW5jaXBhbE5hbWUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS13bC1ydW4tYXMtcHJpbmNpcGFsLW5hbWUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3J1bkFzUHJpbmNpcGFsTmFtZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9ydW5Bc1ByaW5jaXBhbE5hbWUvYnVpbGQueG1sCmluZGV4IGYwYjE3YzAuLmNhODBiMDUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3J1bkFzUHJpbmNpcGFsTmFtZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvcnVuQXNQcmluY2lwYWxOYW1lL2J1aWxkLnhtbApAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuIiBpbmNsdWRlcz0iKi5jbGFzcyIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC02MCwyMyArNjAsMjMgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC04OCwxMCArODgsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0b3JlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLXVzZXItY29tbW9uIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3Nlc3Npb25Db29raWVDb25maWdEZWNsYXJhdGl2ZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9zZXNzaW9uQ29va2llQ29uZmlnRGVjbGFyYXRpdmUvV2ViVGVzdC5qYXZhCmluZGV4IDE5MDNlOTcuLjQ0MWM5ZmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3Nlc3Npb25Db29raWVDb25maWdEZWNsYXJhdGl2ZS9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvc2Vzc2lvbkNvb2tpZUNvbmZpZ0RlY2xhcmF0aXZlL1dlYlRlc3QuamF2YQpAQCAtMzgsNyArMzgsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIGN1c3RvbWl6aW5nIGNvbXBsZXRlIGxpc3Qgb2YgIiArCkBAIC01NCw3ICs1NCw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KIAotCXN0YXQucHJpbnRTdW1tYXJ5KCk7CisgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBydW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3Nlc3Npb25Db29raWVDb25maWdEZWNsYXJhdGl2ZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvc2Vzc2lvbkNvb2tpZUNvbmZpZ0RlY2xhcmF0aXZlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMDIwZGQ0NS4uYmUxMWZmYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvc2Vzc2lvbkNvb2tpZUNvbmZpZ0RlY2xhcmF0aXZlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvc2Vzc2lvbkNvb2tpZUNvbmZpZ0RlY2xhcmF0aXZlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0td2wtc2Vzc2lvbi1jb29raWUtY29uZmlnLWRlY2xhcmF0aXZlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9zZXNzaW9uQ29va2llQ29uZmlnRGVjbGFyYXRpdmUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvc2Vzc2lvbkNvb2tpZUNvbmZpZ0RlY2xhcmF0aXZlL2J1aWxkLnhtbAppbmRleCAxY2EwYzMzLi5hOGQ4ODE0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9zZXNzaW9uQ29va2llQ29uZmlnRGVjbGFyYXRpdmUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3Nlc3Npb25Db29raWVDb25maWdEZWNsYXJhdGl2ZS9idWlsZC54bWwKQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgIDxkZWxldGUgZmlsZT0iV2ViVGVzdC5jbGFzcyIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgICAgICA8ZGVsZXRlIGZpbGU9IlJlcFJ1bkNvbmYudHh0IiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NiwxNSArNDYsMTUgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KQEAgLTc0LDcgKzc0LDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3Nlc3Npb25Db29raWVDb25maWdEZWNsYXJhdGl2ZS9zZXJ2bGV0L3Rlc3QvQ3JlYXRlU2Vzc2lvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvc2Vzc2lvbkNvb2tpZUNvbmZpZ0RlY2xhcmF0aXZlL3NlcnZsZXQvdGVzdC9DcmVhdGVTZXNzaW9uLmphdmEKaW5kZXggNjdiNGYwYy4uYTBmZTY5YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvc2Vzc2lvbkNvb2tpZUNvbmZpZ0RlY2xhcmF0aXZlL3NlcnZsZXQvdGVzdC9DcmVhdGVTZXNzaW9uLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvc2Vzc2lvbkNvb2tpZUNvbmZpZ0RlY2xhcmF0aXZlL3NlcnZsZXQvdGVzdC9DcmVhdGVTZXNzaW9uLmphdmEKQEAgLTQwLDMyICs0MCwzMiBAQAogICAgICAgICAvLyBjb21tZW50CiAgICAgICAgIGlmIChzZXNzaW9uQ29va2llLmluZGV4T2YoIkNvbW1lbnQ9bXlDb21tZW50IikgPT0gLTEpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKCJNaXNzaW5nIGNvb2tpZSBjb21tZW50Iik7Ci0gICAgICAgIH0gICAgICAKKyAgICAgICAgfQogCiAgICAgICAgIC8vIGRvbWFpbgogICAgICAgICBpZiAoc2Vzc2lvbkNvb2tpZS5pbmRleE9mKCJEb21haW49bXlkb21haW4iKSA9PSAtMSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oIk1pc3NpbmcgY29va2llIGRvbWFpbiIpOwotICAgICAgICB9ICAgICAgCisgICAgICAgIH0KIAogICAgICAgICAvLyBwYXRoCiAgICAgICAgIGlmIChzZXNzaW9uQ29va2llLmluZGV4T2YoIlBhdGg9L215UGF0aCIpID09IC0xKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbigiTWlzc2luZyBjb29raWUgcGF0aCIpOwotICAgICAgICB9ICAgICAgCisgICAgICAgIH0KIAogICAgICAgICAvLyBzZWN1cmUKICAgICAgICAgaWYgKHNlc3Npb25Db29raWUuaW5kZXhPZigiU2VjdXJlIikgPT0gLTEpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKCJNaXNzaW5nIFNlY3VyZSBhdHRyaWJ1dGUiKTsKLSAgICAgICAgfSAgICAgIAorICAgICAgICB9CiAKICAgICAgICAgLy8gaHR0cC1vbmx5CiAgICAgICAgIGlmIChzZXNzaW9uQ29va2llLmluZGV4T2YoIkh0dHBPbmx5IikgPT0gLTEpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKCJNaXNzaW5nIEh0dHBPbmx5IGF0dHJpYnV0ZSIpOwotICAgICAgICB9ICAgICAgCisgICAgICAgIH0KIAogICAgICAgICAvLyBtYXgtYWdlCiAgICAgICAgIGlmIChzZXNzaW9uQ29va2llLmluZGV4T2YoIk1heC1BZ2U9MTIzIikgPT0gLTEpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKCJNaXNzaW5nIG1heC1hZ2UiKTsKLSAgICAgICAgfSAgICAgIAorICAgICAgICB9CiAKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9zZXNzaW9uRXhwaXJlZC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9zZXNzaW9uRXhwaXJlZC9XZWJUZXN0LmphdmEKaW5kZXggM2Y2MmE4Yy4uNDRmYzRjYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvc2Vzc2lvbkV4cGlyZWQvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3Nlc3Npb25FeHBpcmVkL1dlYlRlc3QuamF2YQpAQCAtMTksNyArMTksNyBAQAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuKjsKIAogLyoKLSAqIE1ha2Ugc3VyZSBIdHRwU2Vzc2lvbkxpc3RlbmVyJ3Mgc2Vzc2lvbkRlc3Ryb3llZCgpLCBhbmQgCisgKiBNYWtlIHN1cmUgSHR0cFNlc3Npb25MaXN0ZW5lcidzIHNlc3Npb25EZXN0cm95ZWQoKSwgYW5kCiAgKiBIdHRwU2Vzc2lvbkJpbmRpbmdMaXN0ZW5lcidzIHZhbHVlVW5ib3VuZCgpIG1ldGhvZHMgYXJlIGNhbGxlZCB3aGVuCiAgKiBzZXNzaW9uIGV4cGlyZXMuCiAgKgpAQCAtNDUsNyArNDUsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciB0aW1lb3V0LXNlY3MsIGludmFsaWRhdGlvbi1pbnRlcnZhbC1zZWNzIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTQsNyArNTQsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5QQVNTKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CkBAIC02NSw3ICs2NSw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQgKyBjb250ZXh0Um9vdAogICAgICAgICAgICAgICAgICAgICAgKyAiL0NyZWF0ZVNlc3Npb24iOwogICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uID0gKEh0dHBVUkxDb25uZWN0aW9uKQpAQCAtOTIsNyArOTIsNyBAQAogICAgICAgICAgICAgaW5wdXQgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAgICAgICAgICAgICBTdHJpbmcgbGluZSA9IGlucHV0LnJlYWRMaW5lKCk7CiAgICAgICAgICAgICBpZiAoIUVYUEVDVEVEX1JFU1BPTlNFLmVxdWFscyhsaW5lKSkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArIAorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIldyb25nIHJlc3BvbnNlLiBFeHBlY3RlZDogIiArCiAgICAgICAgICAgICAgICAgICAgIEVYUEVDVEVEX1JFU1BPTlNFICsgIiwgcmVjZWl2ZWQ6ICIgKyBsaW5lKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBmaW5hbGx5IHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3Nlc3Npb25FeHBpcmVkL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9zZXNzaW9uRXhwaXJlZC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDUxOTZkMGQuLjM3NzdjNDEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3Nlc3Npb25FeHBpcmVkL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvc2Vzc2lvbkV4cGlyZWQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS13bC1zZXNzaW9uLWV4cGlyZWQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3Nlc3Npb25FeHBpcmVkL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3Nlc3Npb25FeHBpcmVkL2J1aWxkLnhtbAppbmRleCA4Y2ExYTA3Li5jODUxNWM2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9zZXNzaW9uRXhwaXJlZC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvc2Vzc2lvbkV4cGlyZWQvYnVpbGQueG1sCkBAIC0zNiw3ICszNiw3IEBACiAgICAgICA8ZGVsZXRlIGZpbGU9IldlYlRlc3QuY2xhc3MiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICAgICAgPGRlbGV0ZSBmaWxlPSJSZXBSdW5Db25mLnR4dCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMTAgKzQ0LDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgICAgPGphdmFjCkBAIC01NSwxMCArNTUsMTAgQEAKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Niw3ICs2Niw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc4LDEwICs3OCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3Nlc3Npb25FeHBpcmVkL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3Nlc3Npb25FeHBpcmVkL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCBhNGVlYzI3Li42YWE4YjdiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9zZXNzaW9uRXhwaXJlZC9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvc2Vzc2lvbkV4cGlyZWQvZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yMyw3ICsyMyw3IEBACiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCIKICAgICAgICAgIHZlcnNpb249IjIuNCI+CiAKLSAgPGxpc3RlbmVyPiAgICAgCisgIDxsaXN0ZW5lcj4KICAgICA8bGlzdGVuZXItY2xhc3M+dGVzdC5NeUh0dHBTZXNzaW9uTGlzdGVuZXI8L2xpc3RlbmVyLWNsYXNzPgogICA8L2xpc3RlbmVyPgogCkBAIC00Niw3ICs0Niw3IEBACiAgICAgPHNlcnZsZXQtbmFtZT5DaGVja1Jlc3VsdDwvc2VydmxldC1uYW1lPgogICAgIDx1cmwtcGF0dGVybj4vQ2hlY2tSZXN1bHQ8L3VybC1wYXR0ZXJuPgogICA8L3NlcnZsZXQtbWFwcGluZz4KLSAgICAKKwogCiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3Nlc3Npb25FeHBpcmVkL3NlcnZsZXQvdGVzdC9NeU9iamVjdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvc2Vzc2lvbkV4cGlyZWQvc2VydmxldC90ZXN0L015T2JqZWN0LmphdmEKaW5kZXggZmQwNjEwYy4uZjZmMzJlYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvc2Vzc2lvbkV4cGlyZWQvc2VydmxldC90ZXN0L015T2JqZWN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvc2Vzc2lvbkV4cGlyZWQvc2VydmxldC90ZXN0L015T2JqZWN0LmphdmEKQEAgLTI3LDE3ICsyNywxNyBAQAogICAgICAqIE5vdGlmaWVzIHRoZSBvYmplY3QgdGhhdCBpdCBpcyBiZWluZyBib3VuZCB0byBhIHNlc3Npb24sIGFuZAogICAgICAqIGlkZW50aWZpZXMgdGhlIHNlc3Npb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IHRoYXQgaWRlbnRpZmllcyB0aGUgc2Vzc2lvbiAKKyAgICAgKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IHRoYXQgaWRlbnRpZmllcyB0aGUgc2Vzc2lvbgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHZhbHVlQm91bmQoSHR0cFNlc3Npb25CaW5kaW5nRXZlbnQgZXZlbnQpIHsKICAgICAgICAgLy8gZG8gbm90aGluZwogICAgIH0KLSAgICAKKwogICAgIC8qCiAgICAgICogTm90aWZpZXMgdGhlIG9iamVjdCB0aGF0IGl0IGlzIGJlaW5nIHVuYm91bmQgZnJvbSBhIHNlc3Npb24sIGFuZAogICAgICAqIGlkZW50aWZpZXMgdGhlIHNlc3Npb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IHRoYXQgaWRlbnRpZmllcyB0aGUgc2Vzc2lvbiAKKyAgICAgKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IHRoYXQgaWRlbnRpZmllcyB0aGUgc2Vzc2lvbgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHZhbHVlVW5ib3VuZChIdHRwU2Vzc2lvbkJpbmRpbmdFdmVudCBldmVudCkgewogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9zZXNzaW9uSWRVcmxSZXdyaXRlU2Vzc2lvblRyYWNraW5nTW9kZURlY2xhcmF0aXZlL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3Nlc3Npb25JZFVybFJld3JpdGVTZXNzaW9uVHJhY2tpbmdNb2RlRGVjbGFyYXRpdmUvV2ViVGVzdC5qYXZhCmluZGV4IDRjMzQ1MTAuLjQ3OTI5ZTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3Nlc3Npb25JZFVybFJld3JpdGVTZXNzaW9uVHJhY2tpbmdNb2RlRGVjbGFyYXRpdmUvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3Nlc3Npb25JZFVybFJld3JpdGVTZXNzaW9uVHJhY2tpbmdNb2RlRGVjbGFyYXRpdmUvV2ViVGVzdC5qYXZhCkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIFVSTCBzZXNzaW9uIHRyYWNraW5nIG1vZGUgY29uZmlndXJlZCB2aWEgd2VibG9naWMueG1sIik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNTAsNyArNTAsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnZva2VTZXJ2bGV0KCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhURVNUX05BTUUsIHN0YXQuUEFTUyk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpAQCAtNjAsMTQgKzYwLDE0IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZVNlcnZsZXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgIAorCiAgICAgICAgIFNvY2tldCBzb2NrID0gbmV3IFNvY2tldChob3N0LCBuZXcgSW50ZWdlcihwb3J0KS5pbnRWYWx1ZSgpKTsKICAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gc29jay5nZXRPdXRwdXRTdHJlYW0oKTsKICAgICAgICAgU3RyaW5nIGdldCA9ICJHRVQgIiArIGNvbnRleHRSb290ICsgIi9yZWRpcmVjdEZyb20iICsgIiBIVFRQLzEuMFxuIjsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGdldCk7CiAgICAgICAgIG9zLndyaXRlKGdldC5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJpcyA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKIApAQCAtODcsNyArODcsNyBAQAogICAgICAgICBpZiAoY29va2llTGluZSAhPSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJVbmV4cGVjdGVkIFNldC1Db29raWUgcmVzcG9uc2UgaGVhZGVyIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKHJlZGlyZWN0TGluZSA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJNaXNzaW5nIExvY2F0aW9uIHJlc3BvbnNlIGhlYWRlciIpOwogICAgICAgICB9CkBAIC0xMDcsNyArMTA3LDcgQEAKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsgCisgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZSBjb2RlLiBFeHBlY3RlZDogMjAwIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsIHJlY2VpdmVkOiAiICsgcmVzcG9uc2VDb2RlKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvc2Vzc2lvbklkVXJsUmV3cml0ZVNlc3Npb25UcmFja2luZ01vZGVEZWNsYXJhdGl2ZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvc2Vzc2lvbklkVXJsUmV3cml0ZVNlc3Npb25UcmFja2luZ01vZGVEZWNsYXJhdGl2ZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDAyYWYwYzguLjdmYjliNDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3Nlc3Npb25JZFVybFJld3JpdGVTZXNzaW9uVHJhY2tpbmdNb2RlRGVjbGFyYXRpdmUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9zZXNzaW9uSWRVcmxSZXdyaXRlU2Vzc2lvblRyYWNraW5nTW9kZURlY2xhcmF0aXZlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0td2wtc2Vzc2lvbi1pZC11cmwtcmV3cml0ZS1zZXNzaW9uLXRyYWNraW5nLW1vZGUtZGVjbGFyYXRpdmUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3Nlc3Npb25JZFVybFJld3JpdGVTZXNzaW9uVHJhY2tpbmdNb2RlRGVjbGFyYXRpdmUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvc2Vzc2lvbklkVXJsUmV3cml0ZVNlc3Npb25UcmFja2luZ01vZGVEZWNsYXJhdGl2ZS9idWlsZC54bWwKaW5kZXggYTgyNGJlMC4uY2RkNWNkZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvc2Vzc2lvbklkVXJsUmV3cml0ZVNlc3Npb25UcmFja2luZ01vZGVEZWNsYXJhdGl2ZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvc2Vzc2lvbklkVXJsUmV3cml0ZVNlc3Npb25UcmFja2luZ01vZGVEZWNsYXJhdGl2ZS9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgIDxkZWxldGUgZmlsZT0iV2ViVGVzdC5jbGFzcyIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgICAgICA8ZGVsZXRlIGZpbGU9IlJlcFJ1bkNvbmYudHh0IiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00NCwyMiArNDQsMjIgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzEsMTAgKzcxLDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvc2Vzc2lvblByZXNlcnZlQWNyb3NzUmVkZXBsb3lEZWNsYXJhdGl2ZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveURlY2xhcmF0aXZlL1dlYlRlc3QuamF2YQppbmRleCAyMDViNGIyLi5jZWY2OGVjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveURlY2xhcmF0aXZlL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveURlY2xhcmF0aXZlL1dlYlRlc3QuamF2YQpAQCAtNDUsNyArNDUsNyBAQAogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgICAgIHJ1biA9IGFyZ3NbM107CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgV2VibG9naWMgREQ6IHNhdmUtc2Vzc2lvbnMtZW5hYmxlZCIpOwpAQCAtNzEsNyArNzEsNyBAQAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAKLQlzdGF0LnByaW50U3VtbWFyeSgpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZmlyc3RSdW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKQEAgLTgyLDcgKzgyLDcgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGdldCk7CiAgICAgICAgIG9zLndyaXRlKGdldC5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxyXG4iLmdldEJ5dGVzKCkpOwotICAgICAgICAKKwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IHNvY2suZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAKQEAgLTEyNSw3ICsxMjUsNyBAQAogICAgICAgICBTdHJpbmcgY29va2llID0gIkNvb2tpZTogIiArIGpzZXNzaW9uSWQgKyAiXG4iOwogICAgICAgICBvcy53cml0ZShjb29raWUuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCJcclxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveURlY2xhcmF0aXZlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveURlY2xhcmF0aXZlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNTAwMzQ3ZC4uMTQ5MTM2MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvc2Vzc2lvblByZXNlcnZlQWNyb3NzUmVkZXBsb3lEZWNsYXJhdGl2ZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3Nlc3Npb25QcmVzZXJ2ZUFjcm9zc1JlZGVwbG95RGVjbGFyYXRpdmUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS13bC1zZXNzaW9uLXByZXNlcnZlLWFjcm9zcy1yZWRlcGxveS1kZWNsYXJhdGl2ZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvc2Vzc2lvblByZXNlcnZlQWNyb3NzUmVkZXBsb3lEZWNsYXJhdGl2ZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveURlY2xhcmF0aXZlL2J1aWxkLnhtbAppbmRleCAyMjY3NDlhLi4xZGU3MTljIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveURlY2xhcmF0aXZlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveURlY2xhcmF0aXZlL2J1aWxkLnhtbApAQCAtMzksNyArMzksNyBAQAogICAgICAgPGRlbGV0ZSBmaWxlPSJSZXBSdW5Db25mLnR4dCIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgICAgICA8ZGVsZXRlIGZpbGU9IkpTRVNTSU9OSUQiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ3LDE2ICs0NywxNiBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CkBAIC03MCw3ICs3MCw3IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9Ii0tbmFtZT0ke2FwcG5hbWV9LXdlYiAke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmVkZXBsb3kyIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IlJlZGVwbG95aW5nIHdpdGgga2VlcFN0YXRlPWZhbHNlICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIgZnJvbSAke2Jhc2VkaXJ9LiIKICAgICAgICAgICAgICAgbGV2ZWw9InZlcmJvc2UiLz4KQEAgLTEwNSw3ICsxMDUsNyBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVudGhpcmQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTEyMSw3ICsxMjEsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvc2Vzc2lvblByZXNlcnZlQWNyb3NzUmVkZXBsb3lEZWNsYXJhdGl2ZS9kZXNjcmlwdG9yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveURlY2xhcmF0aXZlL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCBlZDc4YjJhLi5hM2JmMzQ5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveURlY2xhcmF0aXZlL2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveURlY2xhcmF0aXZlL2Rlc2NyaXB0b3Ivd2ViLnhtbApAQCAtNDQsNSArNDQsNSBAQAogICAgIDxzZXJ2bGV0LW5hbWU+UmVzdW1lU2Vzc2lvbjwvc2VydmxldC1uYW1lPgogICAgIDx1cmwtcGF0dGVybj4vUmVzdW1lU2Vzc2lvbjwvdXJsLXBhdHRlcm4+CiAgIDwvc2VydmxldC1tYXBwaW5nPgotICAgIAorCiA8L3dlYi1hcHA+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveURlY2xhcmF0aXZlL3NlcnZsZXQvdGVzdC9DcmVhdGVTZXNzaW9uLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveURlY2xhcmF0aXZlL3NlcnZsZXQvdGVzdC9DcmVhdGVTZXNzaW9uLmphdmEKaW5kZXggODk3OTU3ZS4uY2RkODdjOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvc2Vzc2lvblByZXNlcnZlQWNyb3NzUmVkZXBsb3lEZWNsYXJhdGl2ZS9zZXJ2bGV0L3Rlc3QvQ3JlYXRlU2Vzc2lvbi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3Nlc3Npb25QcmVzZXJ2ZUFjcm9zc1JlZGVwbG95RGVjbGFyYXRpdmUvc2VydmxldC90ZXN0L0NyZWF0ZVNlc3Npb24uamF2YQpAQCAtMzAsOCArMzAsOCBAQAogICAgICAgICBIdHRwU2Vzc2lvbiBzZXNzaW9uID0gcmVxLmdldFNlc3Npb24odHJ1ZSk7CiAKICAgICAgICAgSGFzaE1hcCBtYXAgPSBuZXcgSGFzaE1hcCgpOwotICAgICAgICBtYXAucHV0KCJuYW1lMSIsICJ2YWx1ZTEiKTsgICAKLSAgICAgICAgbWFwLnB1dCgibmFtZTIiLCAidmFsdWUyIik7ICAgCisgICAgICAgIG1hcC5wdXQoIm5hbWUxIiwgInZhbHVlMSIpOworICAgICAgICBtYXAucHV0KCJuYW1lMiIsICJ2YWx1ZTIiKTsKICAgICAgICAgc2Vzc2lvbi5zZXRBdHRyaWJ1dGUoIm1hcCIsIG1hcCk7CiAKICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBudWxsOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvc2Vzc2lvblByZXNlcnZlQWNyb3NzUmVkZXBsb3lEZWNsYXJhdGl2ZS9zZXJ2bGV0L3Rlc3QvUmVzdW1lU2Vzc2lvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlYmxvZ2ljREQvc2Vzc2lvblByZXNlcnZlQWNyb3NzUmVkZXBsb3lEZWNsYXJhdGl2ZS9zZXJ2bGV0L3Rlc3QvUmVzdW1lU2Vzc2lvbi5qYXZhCmluZGV4IDE4ZWQzYWEuLmNlNGZjNTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWJsb2dpY0REL3Nlc3Npb25QcmVzZXJ2ZUFjcm9zc1JlZGVwbG95RGVjbGFyYXRpdmUvc2VydmxldC90ZXN0L1Jlc3VtZVNlc3Npb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VibG9naWNERC9zZXNzaW9uUHJlc2VydmVBY3Jvc3NSZWRlcGxveURlY2xhcmF0aXZlL3NlcnZsZXQvdGVzdC9SZXN1bWVTZXNzaW9uLmphdmEKQEAgLTI3LDcgKzI3LDcgQEAKICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlcykKICAgICAgICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAKLSAgICAgICAgYm9vbGVhbiByZXN1bWUgPSBmYWxzZTsgCisgICAgICAgIGJvb2xlYW4gcmVzdW1lID0gZmFsc2U7CiAgICAgICAgIEh0dHBTZXNzaW9uIHNlc3Npb24gPSByZXEuZ2V0U2Vzc2lvbihmYWxzZSk7CiAgICAgICAgIGlmIChzZXNzaW9uICE9IG51bGwpIHsKICAgICAgICAgICAgIEhhc2hNYXAgbWFwID0gKEhhc2hNYXApIHNlc3Npb24uZ2V0QXR0cmlidXRlKCJtYXAiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxjb21lUGFnZUV4dGVuc2lvbk1hdGNoL1dlYlRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxjb21lUGFnZUV4dGVuc2lvbk1hdGNoL1dlYlRlc3QuamF2YQppbmRleCBkMWQ0MDFjLi5lMjgyOTdiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsY29tZVBhZ2VFeHRlbnNpb25NYXRjaC9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlbGNvbWVQYWdlRXh0ZW5zaW9uTWF0Y2gvV2ViVGVzdC5qYXZhCkBAIC00MCwxNiArNDAsMTYgQEAKICAgICAgICAgcG9ydCA9IGFyZ3NbMV07CiAgICAgICAgIGNvbnRleHRSb290ID0gYXJnc1syXTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgaXNzdWUgODUzNSIpOwogICAgICAgICBXZWJUZXN0IHdlYlRlc3QgPSBuZXcgV2ViVGVzdChhcmdzKTsKICAgICAgICAgd2ViVGVzdC5kb1Rlc3QoKTsKLQkgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgIAorCiAgICAgICAgIHRyeSB7CiAKICAgICAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlbGNvbWVQYWdlRXh0ZW5zaW9uTWF0Y2gvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxjb21lUGFnZUV4dGVuc2lvbk1hdGNoL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMmVkNTdiYy4uMjE5OGU1YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlbGNvbWVQYWdlRXh0ZW5zaW9uTWF0Y2gvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsY29tZVBhZ2VFeHRlbnNpb25NYXRjaC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXdlbGNvbWUtcGFnZS1leHRlbnNpb24tbWF0Y2giLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxjb21lUGFnZUV4dGVuc2lvbk1hdGNoL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxjb21lUGFnZUV4dGVuc2lvbk1hdGNoL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsY29tZVBhZ2VFeHRlbnNpb25NYXRjaC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlbGNvbWVQYWdlRXh0ZW5zaW9uTWF0Y2gvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CkBAIC00MiwxOSArNDIsMTkgQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+IAorICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4gCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPgogICAgICAgICA8L2FudGNhbGw+CiAKICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyIgogICAgICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgogCi0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icmUtZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTYyLDcgKzYyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtNzQsMTAgKzc0LDEwIEBACiAgICAgICAgICA8L2NsYXNzcGF0aD4KICAgICAgICAgPC9qYXZhPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlbGNvbWVQYWdlU2VjdXJpdHlDb25zdHJhaW50RXhhY3RNYXRjaC9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsY29tZVBhZ2VTZWN1cml0eUNvbnN0cmFpbnRFeGFjdE1hdGNoL1dlYlRlc3QuamF2YQppbmRleCA1MmQxMGJlLi44NzEzNTVhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsY29tZVBhZ2VTZWN1cml0eUNvbnN0cmFpbnRFeGFjdE1hdGNoL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsY29tZVBhZ2VTZWN1cml0eUNvbnN0cmFpbnRFeGFjdE1hdGNoL1dlYlRlc3QuamF2YQpAQCAtNDIsMTYgKzQyLDE2IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIENSIDYyMzMyNzYiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CiAgICAgICAgIHdlYlRlc3QuZG9UZXN0KCk7Ci0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgCisKICAgICAgICAgdHJ5IHsKIAogICAgICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsY29tZVBhZ2VTZWN1cml0eUNvbnN0cmFpbnRFeGFjdE1hdGNoL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsY29tZVBhZ2VTZWN1cml0eUNvbnN0cmFpbnRFeGFjdE1hdGNoL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNmNiMGVkYS4uNmI1NjVkMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlbGNvbWVQYWdlU2VjdXJpdHlDb25zdHJhaW50RXhhY3RNYXRjaC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxjb21lUGFnZVNlY3VyaXR5Q29uc3RyYWludEV4YWN0TWF0Y2gvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS13ZWxjb21lLXBhZ2Utc2VjdXJpdHktY29uc3RyYWludC1leGFjdC1tYXRjaCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlbGNvbWVQYWdlU2VjdXJpdHlDb25zdHJhaW50RXhhY3RNYXRjaC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsY29tZVBhZ2VTZWN1cml0eUNvbnN0cmFpbnRFeGFjdE1hdGNoL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsY29tZVBhZ2VTZWN1cml0eUNvbnN0cmFpbnRFeGFjdE1hdGNoL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsY29tZVBhZ2VTZWN1cml0eUNvbnN0cmFpbnRFeGFjdE1hdGNoL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+IAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgICAgPC9hbnRjYWxsPgogCiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRidWlsZGVyLmphciIKICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJXZWJUZXN0LmphdmEiLz4KIAotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlLWRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC02Miw3ICs2Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc0LDEwICs3NCwxMCBAQAogICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgIDwvamF2YT4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxjb21lUGFnZVNlY3VyaXR5Q29uc3RyYWludEpzcEV4dGVuc2lvbi9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsY29tZVBhZ2VTZWN1cml0eUNvbnN0cmFpbnRKc3BFeHRlbnNpb24vV2ViVGVzdC5qYXZhCmluZGV4IGI4YTdjZjAuLjdmZDY1ZGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxjb21lUGFnZVNlY3VyaXR5Q29uc3RyYWludEpzcEV4dGVuc2lvbi9XZWJUZXN0LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlbGNvbWVQYWdlU2VjdXJpdHlDb25zdHJhaW50SnNwRXh0ZW5zaW9uL1dlYlRlc3QuamF2YQpAQCAtNDIsMTYgKzQyLDE2IEBACiAgICAgICAgIHBvcnQgPSBhcmdzWzFdOwogICAgICAgICBjb250ZXh0Um9vdCA9IGFyZ3NbMl07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIENSIDYyMzMyNzYiKTsKICAgICAgICAgV2ViVGVzdCB3ZWJUZXN0ID0gbmV3IFdlYlRlc3QoYXJncyk7CiAgICAgICAgIHdlYlRlc3QuZG9UZXN0KCk7Ci0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgCisKICAgICAgICAgdHJ5IHsKIAogICAgICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly8iICsgaG9zdCAgKyAiOiIgKyBwb3J0CkBAIC02Nyw3ICs2Nyw3IEBACiAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJXcm9uZyByZXNwb25zZSBjb2RlLiBFeHBlY3RlZDogIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIEh0dHBVUkxDb25uZWN0aW9uLkhUVFBfVU5BVVRIT1JJWkVECiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgcmVjZWl2ZWQ6ICIgKyByZXNwb25zZUNvZGUpOwotICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsgICAgCisgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQogCiAgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBleCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlbGNvbWVQYWdlU2VjdXJpdHlDb25zdHJhaW50SnNwRXh0ZW5zaW9uL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsY29tZVBhZ2VTZWN1cml0eUNvbnN0cmFpbnRKc3BFeHRlbnNpb24vYnVpbGQucHJvcGVydGllcwppbmRleCA5MTc0ZTdjLi5mY2M1NDlmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsY29tZVBhZ2VTZWN1cml0eUNvbnN0cmFpbnRKc3BFeHRlbnNpb24vYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsY29tZVBhZ2VTZWN1cml0eUNvbnN0cmFpbnRKc3BFeHRlbnNpb24vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2ViIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS13ZWxjb21lLXBhZ2Utc2VjdXJpdHktY29uc3RyYWludC1qc3AtZXh0ZW5zaW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsY29tZVBhZ2VTZWN1cml0eUNvbnN0cmFpbnRKc3BFeHRlbnNpb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlbGNvbWVQYWdlU2VjdXJpdHlDb25zdHJhaW50SnNwRXh0ZW5zaW9uL2J1aWxkLnhtbAppbmRleCA4NDU1NmIwLi5mYjZhMmU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsY29tZVBhZ2VTZWN1cml0eUNvbnN0cmFpbnRKc3BFeHRlbnNpb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxjb21lUGFnZVNlY3VyaXR5Q29uc3RyYWludEpzcEV4dGVuc2lvbi9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDE5ICs0MiwxOSBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjIsNyArNjIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NCwxMCArNzQsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsZEpzZkZvcm1Mb2dpbkh0dHBTZXNzaW9uTGlzdGVuZXIvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlbGRKc2ZGb3JtTG9naW5IdHRwU2Vzc2lvbkxpc3RlbmVyL1dlYlRlc3QuamF2YQppbmRleCBlNThhOTE2Li4wZGVmY2QyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsZEpzZkZvcm1Mb2dpbkh0dHBTZXNzaW9uTGlzdGVuZXIvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxkSnNmRm9ybUxvZ2luSHR0cFNlc3Npb25MaXN0ZW5lci9XZWJUZXN0LmphdmEKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgYWRtaW5Vc2VyID0gYXJnc1szXTsKICAgICAgICAgYWRtaW5QYXNzd29yZCA9IGFyZ3NbNF07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgR2xhc3NGaXNoIElzc3VlIDE5MzMiKTsKQEAgLTYwLDcgKzYwLDcgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHJ1bigpIHRocm93cyBFeGNlcHRpb24gewpAQCAtMTExLDcgKzExMSw3IEBACiAgICAgICAgIFN0cmluZyBjb29raWUgPSAiQ29va2llOiAiICsganNlc3Npb25JZCArICJcbiI7CiAgICAgICAgIG9zLndyaXRlKGNvb2tpZS5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsZEpzZkZvcm1Mb2dpbkh0dHBTZXNzaW9uTGlzdGVuZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxkSnNmRm9ybUxvZ2luSHR0cFNlc3Npb25MaXN0ZW5lci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGJkZDdlZDcuLjA4MTc5OTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxkSnNmRm9ybUxvZ2luSHR0cFNlc3Npb25MaXN0ZW5lci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxkSnNmRm9ybUxvZ2luSHR0cFNlc3Npb25MaXN0ZW5lci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXdlbGQtanNmLWZvcm0tbG9naW4taHR0cC1zZXNzaW9uLWxpc3RlbmVyIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsZEpzZkZvcm1Mb2dpbkh0dHBTZXNzaW9uTGlzdGVuZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlbGRKc2ZGb3JtTG9naW5IdHRwU2Vzc2lvbkxpc3RlbmVyL2J1aWxkLnhtbAppbmRleCBkODE2Njk5Li42YzI3YTA0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsZEpzZkZvcm1Mb2dpbkh0dHBTZXNzaW9uTGlzdGVuZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxkSnNmRm9ybUxvZ2luSHR0cFNlc3Npb25MaXN0ZW5lci9idWlsZC54bWwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgIDxkZWxldGUgZmlsZT0iV2ViVGVzdC5jbGFzcyIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+CiAgICAgICA8ZGVsZXRlIGZpbGU9IlJlcFJ1bkNvbmYudHh0IiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzcmMiLz4KQEAgLTY1LDE0ICs2NSwxNCBAQAogICAgICAgICAgICAgc3JjZGlyPSIuIgogICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGJ1aWxkZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2FwcHNlcnYtcnQuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8amF2YSBjbGFzc25hbWU9IldlYlRlc3QiPgogICAgICAgICAgIDxhcmcgdmFsdWU9IiR7aHR0cC5ob3N0fSIvPgpAQCAtODksNyArODksNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVzdG9yZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS11c2VyLWNvbW1vbiI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsZEpzZkZvcm1Mb2dpbkh0dHBTZXNzaW9uTGlzdGVuZXIvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlbGRKc2ZGb3JtTG9naW5IdHRwU2Vzc2lvbkxpc3RlbmVyL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCBhMjc3ODkxLi5mZGQ0YzM4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsZEpzZkZvcm1Mb2dpbkh0dHBTZXNzaW9uTGlzdGVuZXIvZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxkSnNmRm9ybUxvZ2luSHR0cFNlc3Npb25MaXN0ZW5lci9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTM3LDcgKzM3LDcgQEAKIAogICA8c2VjdXJpdHktY29uc3RyYWludD4KICAgICA8d2ViLXJlc291cmNlLWNvbGxlY3Rpb24+Ci0JICA8d2ViLXJlc291cmNlLW5hbWU+UHJvdGVjdGVkIEFyZWE8L3dlYi1yZXNvdXJjZS1uYW1lPgorICAgICAgPHdlYi1yZXNvdXJjZS1uYW1lPlByb3RlY3RlZCBBcmVhPC93ZWItcmVzb3VyY2UtbmFtZT4KICAgICAgIDx1cmwtcGF0dGVybj4vKjwvdXJsLXBhdHRlcm4+CiAgICAgPC93ZWItcmVzb3VyY2UtY29sbGVjdGlvbj4KICAgICA8YXV0aC1jb25zdHJhaW50PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlbGRKc2ZGb3JtTG9naW5IdHRwU2Vzc2lvbkxpc3RlbmVyL3NyYy90ZXN0L1Rlc3RIdHRwU2Vzc2lvbkxpc3RlbmVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsZEpzZkZvcm1Mb2dpbkh0dHBTZXNzaW9uTGlzdGVuZXIvc3JjL3Rlc3QvVGVzdEh0dHBTZXNzaW9uTGlzdGVuZXIuamF2YQppbmRleCAwN2ExZDhkLi41MTAyNjAyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsZEpzZkZvcm1Mb2dpbkh0dHBTZXNzaW9uTGlzdGVuZXIvc3JjL3Rlc3QvVGVzdEh0dHBTZXNzaW9uTGlzdGVuZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsZEpzZkZvcm1Mb2dpbkh0dHBTZXNzaW9uTGlzdGVuZXIvc3JjL3Rlc3QvVGVzdEh0dHBTZXNzaW9uTGlzdGVuZXIuamF2YQpAQCAtMjgsMTAgKzI4LDEwIEBACiAgICAgICAgIFN0cmluZyB2YWx1ZSA9IG15QmVhbi5nZXRUZXh0KCk7CiAgICAgICAgIGlmICghIkNESV9WQUxVRSIuZXF1YWxzKHZhbHVlKSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oKTsKLSAgICAgICAgfSAgIAorICAgICAgICB9CiAgICAgICAgIHNlLmdldFNlc3Npb24oKS5zZXRBdHRyaWJ1dGUoIm15QXR0ciIsIHZhbHVlKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI+Pj4gc2Vzc2lvbkNyZWF0ZWQ6ICIgKyB2YWx1ZSk7Ci0gICAgfSAgIAorICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNlc3Npb25EZXN0cm95ZWQoSHR0cFNlc3Npb25FdmVudCBzZSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj4+PiBzZXNzaW9uRGVzdHJveWVkIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsZEpzZkxvZ2luUGFnZS9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsZEpzZkxvZ2luUGFnZS9XZWJUZXN0LmphdmEKaW5kZXggNmZlMjdkNi4uOWM4OGY4ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlbGRKc2ZMb2dpblBhZ2UvV2ViVGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxkSnNmTG9naW5QYWdlL1dlYlRlc3QuamF2YQpAQCAtNDUsNyArNDUsNyBAQAogICAgICAgICBrZXlTdG9yZVBhdGggPSBhcmdzWzRdOwogICAgICAgICB0cnVzdFN0b3JlUGF0aCA9IGFyZ3NbNV07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJVbml0IHRlc3QgZm9yIElUIDExNTA0Iik7CiAgICAgICAgIFdlYlRlc3Qgd2ViVGVzdCA9IG5ldyBXZWJUZXN0KGFyZ3MpOwpAQCAtNzAsNyArNzAsNyBAQAogICAgICAgICBVUkxDb25uZWN0aW9uIGNvbm4gPSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKICAgICAgICAgU3RyaW5nIHJlZGlyZWN0TG9jYXRpb24gPSBjb25uLmdldEhlYWRlckZpZWxkKCJMb2NhdGlvbiIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvY2F0aW9uOiAiICsgcmVkaXJlY3RMb2NhdGlvbik7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyBleHBlY3RlZFJlZGlyZWN0TG9jYXRpb24gPSAiaHR0cHM6Ly8iICsgaG9zdCArICI6IiArIGh0dHBzUG9ydCArCiAgICAgICAgICAgICAgICAgY29udGV4dFJvb3QgKyAiL3Byb3RlY3RlZC50eHQiOwogICAgICAgICBpZiAoIWV4cGVjdGVkUmVkaXJlY3RMb2NhdGlvbi5lcXVhbHMocmVkaXJlY3RMb2NhdGlvbikpIHsKQEAgLTExMiw3ICsxMTIsNyBAQAogICAgICAgICAgICAgU3RyaW5nIHRydXN0U3RvcmVQYXRoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgU1NMQ29udGV4dCBjdHggPSBTU0xDb250ZXh0LmdldEluc3RhbmNlKCJUTFMiKTsKIAotICAgICAgICAvLyBLZXlzdG9yZSAKKyAgICAgICAgLy8gS2V5c3RvcmUKICAgICAgICAgS2V5U3RvcmUga3MgPSBLZXlTdG9yZS5nZXRJbnN0YW5jZSgiSktTIik7CiAgICAgICAgIGNoYXJbXSBwYXNzcGhyYXNlID0gImNoYW5nZWl0Ii50b0NoYXJBcnJheSgpOwogICAgICAgICBrcy5sb2FkKG5ldyBGaWxlSW5wdXRTdHJlYW0oa2V5U3RvcmVQYXRoKSwgcGFzc3BocmFzZSk7CkBAIC0xMjgsNyArMTI4LDcgQEAKICAgICAgICAgdG1mLmluaXQodHJ1c3RTdG9yZSk7CiAKICAgICAgICAgY3R4LmluaXQoa21mLmdldEtleU1hbmFnZXJzKCksdG1mLmdldFRydXN0TWFuYWdlcnMoKSwgbnVsbCk7Ci0gCisKICAgICAgICAgcmV0dXJuIGN0eC5nZXRTb2NrZXRGYWN0b3J5KCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsZEpzZkxvZ2luUGFnZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlbGRKc2ZMb2dpblBhZ2UvYnVpbGQucHJvcGVydGllcwppbmRleCA4ODE4MzI4Li4zMzE0ZWU4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsZEpzZkxvZ2luUGFnZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxkSnNmTG9naW5QYWdlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0td2VsZC1qc2YtZm9ybS1sb2dpbi1wYWdlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsZEpzZkxvZ2luUGFnZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsZEpzZkxvZ2luUGFnZS9idWlsZC54bWwKaW5kZXggOThlNGU2MS4uNmNjODMyNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlbGRKc2ZMb2dpblBhZ2UvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxkSnNmTG9naW5QYWdlL2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgpAQCAtNDQsMjMgKzQ0LDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJjb21waWxlIj4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgotICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgPHBhcmFtIG5hbWU9IndlYmNsaWVudC53YXIuY2xhc3NlcyIgdmFsdWU9IioqLyouY2xhc3MiLz4KICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgPGphdmFjIHNyY2Rpcj0iLiIKICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvYXBwc2Vydi1ydC5qYXIiCiAgICAgICAgaW5jbHVkZXM9IldlYlRlc3QuamF2YSIvPgotICAgIDwvdGFyZ2V0PiAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtcHVibGlzaC13YXIiIGRlcGVuZHM9ImJ1aWxkLCBwdWJsaXNoLXdhci1jb21tb24iIC8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uLHByZXBhcmUtdHJ1c3RzdG9yZS1jb21tb24scHJlcGFyZS1rZXlzdG9yZS1jb21tb24iPgogICAgICAgPGphdmEgY2xhc3NuYW1lPSJXZWJUZXN0Ij4KICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03OCw3ICs3OCw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1c2FnZS1jb21tb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxkSnNmTG9naW5QYWdlL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxkSnNmTG9naW5QYWdlL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCA0YmFkYzQ1Li5kYzczZjUxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsZEpzZkxvZ2luUGFnZS9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlbGRKc2ZMb2dpblBhZ2UvZGVzY3JpcHRvci93ZWIueG1sCkBAIC01NSw3ICs1NSw3IEBACiAgICAgICAgICAgICA8Zm9ybS1lcnJvci1wYWdlPi9sb2dpbl9lcnJvci5qc2Y8L2Zvcm0tZXJyb3ItcGFnZT4KICAgICAgICAgPC9mb3JtLWxvZ2luLWNvbmZpZz4KICAgICA8L2xvZ2luLWNvbmZpZz4KLSAgICAKKwogICAgIDxzZWN1cml0eS1yb2xlPgogICAgICAgICA8cm9sZS1uYW1lPmFkbWluPC9yb2xlLW5hbWU+CiAgICAgPC9zZWN1cml0eS1yb2xlPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlbGRKc2ZTZXJ2ZXJBdXRoTW9kdWxlUmVkaXJlY3QvV2ViVGVzdC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlbGRKc2ZTZXJ2ZXJBdXRoTW9kdWxlUmVkaXJlY3QvV2ViVGVzdC5qYXZhCmluZGV4IGVhZWFjMWQuLmFmNjc4M2MgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxkSnNmU2VydmVyQXV0aE1vZHVsZVJlZGlyZWN0L1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsZEpzZlNlcnZlckF1dGhNb2R1bGVSZWRpcmVjdC9XZWJUZXN0LmphdmEKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgYWRtaW5Vc2VyID0gYXJnc1szXTsKICAgICAgICAgYWRtaW5QYXNzd29yZCA9IGFyZ3NbNF07CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogCiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIlVuaXQgdGVzdCBmb3IgR2xhc3NGaXNoIElzc3VlIDE5MzMiKTsKQEAgLTYwLDcgKzYwLDcgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKFRFU1RfTkFNRSwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogCi0Jc3RhdC5wcmludFN1bW1hcnkoKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHJ1bigpIHRocm93cyBFeGNlcHRpb24gewpAQCAtMTEwLDcgKzExMCw3IEBACiAgICAgICAgIFN0cmluZyBjb29raWUgPSAiQ29va2llOiAiICsganNlc3Npb25JZCArICJcbiI7CiAgICAgICAgIG9zLndyaXRlKGNvb2tpZS5nZXRCeXRlcygpKTsKICAgICAgICAgb3Mud3JpdGUoIlxuIi5nZXRCeXRlcygpKTsKLSAgICAgICAgCisKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzb2NrLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsZEpzZlNlcnZlckF1dGhNb2R1bGVSZWRpcmVjdC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlbGRKc2ZTZXJ2ZXJBdXRoTW9kdWxlUmVkaXJlY3QvYnVpbGQucHJvcGVydGllcwppbmRleCAxMWU3MDk4Li5lYTY4MTNkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsZEpzZlNlcnZlckF1dGhNb2R1bGVSZWRpcmVjdC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxkSnNmU2VydmVyQXV0aE1vZHVsZVJlZGlyZWN0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0td2VsZC1qc2Ytc2VydmVyLWF1dGgtbW9kdWxlLXJlZGlyZWN0Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsZEpzZlNlcnZlckF1dGhNb2R1bGVSZWRpcmVjdC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsZEpzZlNlcnZlckF1dGhNb2R1bGVSZWRpcmVjdC9idWlsZC54bWwKaW5kZXggMGVlNDMxOC4uZGIxMDNmYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlbGRKc2ZTZXJ2ZXJBdXRoTW9kdWxlUmVkaXJlY3QvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxkSnNmU2VydmVyQXV0aE1vZHVsZVJlZGlyZWN0L2J1aWxkLnhtbApAQCAtMzYsNyArMzYsNyBAQAogICAgICAgPGRlbGV0ZSBmaWxlPSJXZWJUZXN0LmNsYXNzIiBmYWlsb25lcnJvcj0iZmFsc2UiLz4KICAgICAgIDxkZWxldGUgZmlsZT0iUmVwUnVuQ29uZi50eHQiIGZhaWxvbmVycm9yPSJmYWxzZSIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNyYyIvPgpAQCAtNzAsMTQgKzcwLDE0IEBACiAgICAgICAgICAgICBzcmNkaXI9Ii4iCiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvYXBwc2Vydi1ydC5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+Ci0gICAgPC90YXJnZXQ+IAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZC1wdWJsaXNoLXdhciIgZGVwZW5kcz0iYnVpbGQsIHB1Ymxpc2gtd2FyLWNvbW1vbiIgLz4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC05NCw3ICs5NCw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZXN0b3JlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlbGRKc2ZTZXJ2ZXJBdXRoTW9kdWxlUmVkaXJlY3QvZGVzY3JpcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dlbGRKc2ZTZXJ2ZXJBdXRoTW9kdWxlUmVkaXJlY3QvZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDQwYzZmNjMuLjMxMzg4NzQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93ZWxkSnNmU2VydmVyQXV0aE1vZHVsZVJlZGlyZWN0L2Rlc2NyaXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2VsZEpzZlNlcnZlckF1dGhNb2R1bGVSZWRpcmVjdC9kZXNjcmlwdG9yL3dlYi54bWwKQEAgLTMzLDcgKzMzLDcgQEAKIAogICA8c2VjdXJpdHktY29uc3RyYWludD4KICAgICA8d2ViLXJlc291cmNlLWNvbGxlY3Rpb24+Ci0JICA8d2ViLXJlc291cmNlLW5hbWU+UHJvdGVjdGVkIEFyZWE8L3dlYi1yZXNvdXJjZS1uYW1lPgorICAgICAgPHdlYi1yZXNvdXJjZS1uYW1lPlByb3RlY3RlZCBBcmVhPC93ZWItcmVzb3VyY2UtbmFtZT4KICAgICAgIDx1cmwtcGF0dGVybj4vKjwvdXJsLXBhdHRlcm4+CiAgICAgPC93ZWItcmVzb3VyY2UtY29sbGVjdGlvbj4KICAgICA8YXV0aC1jb25zdHJhaW50PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dpbjJrTG9jay9XZWJUZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2luMmtMb2NrL1dlYlRlc3QuamF2YQppbmRleCBkZDNiMjRmLi40NGUwYWNiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2luMmtMb2NrL1dlYlRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2luMmtMb2NrL1dlYlRlc3QuamF2YQpAQCAtMjMsMTAgKzIzLDEwIEBACiAgKiBVbml0IHRlc3QgZm9yIGJ1Z3RyYXEgNDkzMzk4NCBFeGNlcHRpb24gb24gUmVkZXBsb3kgb24gV2luWFAKICAqLwogcHVibGljIGNsYXNzIFdlYlRlc3QgewotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvdW50ID0gMDsKICAgICBwcml2YXRlIHN0YXRpYyBpbnQgRVhQRUNURURfQ09VTlQgPSAxOwotICAgIAorCiAgICAgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0PQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKQEAgLTM0LDcgKzM0LDcgQEAKIAogICAgICAgICAvLyBUaGUgc3RhdCByZXBvcnRlciB3cml0ZXMgb3V0IHRoZSB0ZXN0IGluZm8gYW5kIHJlc3VsdHMKICAgICAgICAgLy8gaW50byB0aGUgdG9wLWxldmVsIHF1aWNrbG9vayBkaXJlY3RvcnkgZHVyaW5nIGEgcnVuLgotICAgICAgCisKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiU3RhbmRhbG9uZSBXaW4yayBMb2NraW5nIHdhciB0ZXN0Iik7CiAKICAgICAgICAgU3RyaW5nIGhvc3QgPSBhcmdzWzBdOwpAQCAtNDMsMTMgKzQzLDEzIEBACiAKICAgICAgICAgaW50IHBvcnQgPSBuZXcgSW50ZWdlcihwb3J0UykuaW50VmFsdWUoKTsKICAgICAgICAgU3RyaW5nIG5hbWU7Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBnb0dldChob3N0LCBwb3J0LCAiV2luMmtMb2NrIiwgY29udGV4dFJvb3QgKyAiL1NlcnZsZXRUZXN0IiApOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmIChjb3VudCAhPSBFWFBFQ1RFRF9DT1VOVCl7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIlRlc3QgVU5QUkVESUNURUQtRkFJTFVSRSIsIHN0YXQuRkFJTCk7Ci0gICAgICAgICAgICB9ICAgICAgICAgICAKKyAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiVGVzdCBVTlBSRURJQ1RFRC1GQUlMVVJFIiwgc3RhdC5GQUlMKTsKQEAgLTY3LDcgKzY3LDcgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCgiR0VUICIgKyBjb250ZXh0UGF0aCArICIgSFRUUC8xLjBcbiIpKTsKICAgICAgICAgb3Mud3JpdGUoKCJHRVQgIiArIGNvbnRleHRQYXRoICsgIiBIVFRQLzEuMFxuIikuZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIG9zLndyaXRlKCJcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gcy5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBiaXMgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKQEAgLTgwLDE5ICs4MCwxOSBAQAogICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPSAtMSkgewogICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGxpbmUuaW5kZXhPZigiOiIpOwogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgc3RhdHVzID0gbGluZS5zdWJzdHJpbmcoaW5kZXgrMSk7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMuZXF1YWxzSWdub3JlQ2FzZSgiUEFTUyIpKXsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3ZWItV2luMmtMb2NrOiAiICsgbGluZS5zdWJzdHJpbmcoMCxpbmRleCksIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2ViLVdpbjJrTG9jazogIiArIGxpbmUuc3Vic3RyaW5nKDAsaW5kZXgpLCBzdGF0LkZBSUwpOyAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2ViLVdpbjJrTG9jazogIiArIGxpbmUuc3Vic3RyaW5nKDAsaW5kZXgpLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2goIEV4Y2VwdGlvbiBleCl7Ci0gICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsgICAKKyAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiVGVzdCBVTlBSRURJQ1RFRC1GQUlMVVJFIik7CiAgICAgICAgICB9CiAgICB9Ci0gIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2luMmtMb2NrL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2luMmtMb2NrL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMWQyMjk1Yy4uOTI0NDMxNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dpbjJrTG9jay9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93aW4ya0xvY2svYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTQgKzE1LDE0IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXdpbjJrTG9jayIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0td2luMmtMb2NrIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iL3dlYi13aW4ya0xvY2siLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93aW4ya0xvY2svYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dpbjJrTG9jay9idWlsZC54bWwKaW5kZXggZTVkODQwMy4uOGRhNjA2YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dpbjJrTG9jay9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dpbjJrTG9jay9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQyLDEwICs0MiwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICAgIDxqYXZhYwpAQCAtNTMsMTAgKzUzLDEwIEBACiAgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iV2ViVGVzdC5qYXZhIi8+CiAKLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXB1Ymxpc2gtd2FyIiBkZXBlbmRzPSJidWlsZCwgcHVibGlzaC13YXItY29tbW9uIiAvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJyZS1kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNjQsNyArNjQsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iV2ViVGVzdCI+CiAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtodHRwLmhvc3R9Ii8+CkBAIC03NiwxMCArNzYsMTAgQEAKICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2luMmtMb2NrL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93aW4ya0xvY2svZGVzY3JpcHRvci93ZWIueG1sCmluZGV4IDZiZTQwNzMuLjNkY2ZmN2UgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93aW4ya0xvY2svZGVzY3JpcHRvci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93aW4ya0xvY2svZGVzY3JpcHRvci93ZWIueG1sCkBAIC0yNywxNCArMjcsMTQgQEAKICAgICAgICAgPGRpc3BsYXktbmFtZT5TZXJ2bGV0VGVzdDwvZGlzcGxheS1uYW1lPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDxzZXJ2bGV0LWNsYXNzPnRlc3QuU2VydmxldFRlc3Q8L3NlcnZsZXQtY2xhc3M+Ci0gICAgPC9zZXJ2bGV0PiAgCisgICAgPC9zZXJ2bGV0PgogCiAgICA8c2VydmxldC1tYXBwaW5nPgogICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRUZXN0PC9zZXJ2bGV0LW5hbWU+CiAgICAgICAgIDx1cmwtcGF0dGVybj4vU2VydmxldFRlc3Q8L3VybC1wYXR0ZXJuPgogICAgIDwvc2VydmxldC1tYXBwaW5nPgogCi0gICAgCisKIAogPC93ZWItYXBwPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd2luMmtMb2NrL3NlcnZsZXQvU2VydmxldFRlc3QuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93aW4ya0xvY2svc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCmluZGV4IDJkNDQwOGMuLmQ2ZjJmYjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93aW4ya0xvY2svc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93aW4ya0xvY2svc2VydmxldC9TZXJ2bGV0VGVzdC5qYXZhCkBAIC0zNCw3ICszNCw3IEBACiAKICAgICBwcml2YXRlIFNlcnZsZXRDb250ZXh0IGNvbnRleHQ7CiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHN0YXR1cyA9ICJXaW4ya0xvY2s6UEFTUyI7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLmluaXQoY29uZmlnKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJbU2VydmxldC5pbml0XSIpOwpAQCAtNDUsMTQgKzQ1LDE0IEBACiAgICAgICAgIGRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geyAgICAgICAgCisgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIltTZXJ2bGV0LmRvUG9zdF0iKTsKIAogICAgICAgICByZXF1ZXN0LmdldFNlc3Npb24oKS5zZXRBdHRyaWJ1dGUoInRlc3QiLCJXaW4ya0xvY2s6UEFTUyIpOwogICAgICAgICByZXF1ZXN0LmdldFNlc3Npb24oKS5pbnZhbGlkYXRlKCk7CiAgICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7Ci0gICAgICAgIAorCiAgICAgICAgIG91dC5wcmludGxuKHN0YXR1cyk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd3JvbmdUcmFuc3BvcnQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93cm9uZ1RyYW5zcG9ydC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDE2MWNhZGEuLjg4NWJkNzUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93cm9uZ1RyYW5zcG9ydC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93cm9uZ1RyYW5zcG9ydC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxNCArMTUsMTQgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0td3JvbmdQcm90b2NvbCIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0td3JvbmdQcm90b2NvbCIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwdHlwZSIgdmFsdWU9IndlYiIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9Ii93cm9uZ1Byb3RvY29sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd3JvbmdUcmFuc3BvcnQvc3JjL21haW4vamF2YS93cm9uZ3RyYW5zcG9ydC9Xcm9uZ1RyYW5zcG9ydC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dyb25nVHJhbnNwb3J0L3NyYy9tYWluL2phdmEvd3Jvbmd0cmFuc3BvcnQvV3JvbmdUcmFuc3BvcnQuamF2YQppbmRleCBkMDVjYmE3Li4zMWYwNDM1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd3JvbmdUcmFuc3BvcnQvc3JjL21haW4vamF2YS93cm9uZ3RyYW5zcG9ydC9Xcm9uZ1RyYW5zcG9ydC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93cm9uZ1RyYW5zcG9ydC9zcmMvbWFpbi9qYXZhL3dyb25ndHJhbnNwb3J0L1dyb25nVHJhbnNwb3J0LmphdmEKQEAgLTk0LDcgKzk0LDcgQEAKICAgICAgICAgcmVwb3J0KCJkZWxldGUtaHR0cC1yZWRpcmVjdCIsIGFzYWRtaW4oImRlbGV0ZS1wcm90b2NvbCIsCiAgICAgICAgICAgICAiaHR0cC1yZWRpcmVjdCIpKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgY2hlY2tTdGF0dXMoSHR0cFVSTENvbm5lY3Rpb24gY29ubmVjdGlvbikKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uZWN0aW9uLmdldFJlc3BvbnNlQ29kZSgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dyb25nVHJhbnNwb3J0VGFyZ2V0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd3JvbmdUcmFuc3BvcnRUYXJnZXQvYnVpbGQucHJvcGVydGllcwppbmRleCA2ZmNkNGRmLi5kNjRhNTAxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd3JvbmdUcmFuc3BvcnRUYXJnZXQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd3JvbmdUcmFuc3BvcnRUYXJnZXQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTQgKzE1LDE0IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXdyb25nUHJvdG9jb2xUYXJnZXQiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXdyb25nUHJvdG9jb2xUYXJnZXQiLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcHR5cGUiIHZhbHVlPSJ3ZWIiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHB0eXBlIiB2YWx1ZT0id2ViIi8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIvd3JvbmdQcm90b2NvbFRhcmdldCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dyb25nVHJhbnNwb3J0VGFyZ2V0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93cm9uZ1RyYW5zcG9ydFRhcmdldC9idWlsZC54bWwKaW5kZXggOWY3MTE5Zi4uOTc2ZGUzYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dyb25nVHJhbnNwb3J0VGFyZ2V0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd3JvbmdUcmFuc3BvcnRUYXJnZXQvYnVpbGQueG1sCkBAIC04MCw3ICs4MCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZWxldGUtY2x1c3RlciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlbGV0ZS1jbHVzdGVyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idXNhZ2UtY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd3JvbmdUcmFuc3BvcnRUYXJnZXQvc3JjL21haW4vamF2YS93cm9uZ3RyYW5zcG9ydHRhcmdldC9Xcm9uZ1RyYW5zcG9ydC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3dyb25nVHJhbnNwb3J0VGFyZ2V0L3NyYy9tYWluL2phdmEvd3Jvbmd0cmFuc3BvcnR0YXJnZXQvV3JvbmdUcmFuc3BvcnQuamF2YQppbmRleCA1MTc3NmE1Li4wMTE1YWY2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIvd3JvbmdUcmFuc3BvcnRUYXJnZXQvc3JjL21haW4vamF2YS93cm9uZ3RyYW5zcG9ydHRhcmdldC9Xcm9uZ1RyYW5zcG9ydC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi93cm9uZ1RyYW5zcG9ydFRhcmdldC9zcmMvbWFpbi9qYXZhL3dyb25ndHJhbnNwb3J0dGFyZ2V0L1dyb25nVHJhbnNwb3J0LmphdmEKQEAgLTEwMiw3ICsxMDIsNyBAQAogICAgICAgICByZXBvcnQoImRlbGV0ZS1odHRwLXJlZGlyZWN0IiwgYXNhZG1pbigiZGVsZXRlLXByb3RvY29sIiwgIi0tdGFyZ2V0IiwgY2x1c3Rlck5hbWUsCiAgICAgICAgICAgICAiaHR0cC1yZWRpcmVjdCIpKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgY2hlY2tTdGF0dXMoSHR0cFVSTENvbm5lY3Rpb24gY29ubmVjdGlvbikKICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uZWN0aW9uLmdldFJlc3BvbnNlQ29kZSgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3lhc3Nvbi9ZYXNzb25UZXN0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIveWFzc29uL1lhc3NvblRlc3QuamF2YQppbmRleCAwMGU2YTk2Li4xN2YyYzFiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIveWFzc29uL1lhc3NvblRlc3QuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIveWFzc29uL1lhc3NvblRlc3QuamF2YQpAQCAtNDMsNyArNDMsNyBAQAogICAgICAgICBwb3J0ID0gYXJnc1sxXTsKICAgICAgICAgY29udGV4dFJvb3QgPSBhcmdzWzJdOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiVW5pdCB0ZXN0IGZvciBHbGFzc0Zpc2ggSXNzdWUgMjE5MjIiKTsKICAgICAgICAgWWFzc29uVGVzdCB5YXNzb25UZXN0ID0gbmV3IFlhc3NvblRlc3QoYXJncyk7CkBAIC01MSw4ICs1MSw4IEBACiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KFRFU1RfTkFNRSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgZG9UZXN0KCkgeyAgICAgCi0gICAgICAgIHRyeSB7IAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludm9rZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoVEVTVF9OQU1FLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTYyLDcgKzYyLDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW52b2tlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAorCiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vIiArIGhvc3QgICsgIjoiICsgcG9ydCArIGNvbnRleHRSb290CiAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIi9UcmFuc2Zvcm1Ub0pzb24/cGFyYW1ldGVyPSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBVUkxFbmNvZGVyLmVuY29kZShQQVJBTUVURVIpKTsKQEAgLTcwLDcgKzcwLDcgQEAKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubiA9IChIdHRwVVJMQ29ubmVjdGlvbikgdXJsLm9wZW5Db25uZWN0aW9uKCk7CiAgICAgICAgIGNvbm4uY29ubmVjdCgpOwogICAgICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsgCisgICAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJXcm9uZyByZXNwb25zZSBjb2RlLiBFeHBlY3RlZDogMjAwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIHJlY2VpdmVkOiAiICsgcmVzcG9uc2VDb2RlKTsKICAgICAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi95YXNzb24vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi95YXNzb24vYnVpbGQucHJvcGVydGllcwppbmRleCA5MzEzOGEzLi41ZDQyMmUyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWIveWFzc29uL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3lhc3Nvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LXlhc3Nvbi1sb2FkZWQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYi95YXNzb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3lhc3Nvbi9idWlsZC54bWwKaW5kZXggNzI2ZTAzZS4uOWE3NTkyZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3lhc3Nvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2ViL3lhc3Nvbi9idWlsZC54bWwKQEAgLTQwLDcgKzQwLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXQiLz4KQEAgLTQ4LDEwICs0OCwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJidWlsZCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgICAgICA8cGFyYW0gbmFtZT0id2ViY2xpZW50Lndhci5jbGFzc2VzIiB2YWx1ZT0iKiovKi5jbGFzcyIvPiAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJjbGllbnQud2FyLmNsYXNzZXMiIHZhbHVlPSIqKi8qLmNsYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0YnVpbGRlci5qYXIiCkBAIC02Myw3ICs2Myw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8amF2YSBjbGFzc25hbWU9Illhc3NvblRlc3QiPgogICAgICAgICA8YXJnIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KQEAgLTc1LDcgKzc1LDcgQEAKICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9hbm5vdGF0aW9ucy1jb21tb24ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9hbm5vdGF0aW9ucy1jb21tb24ueG1sCmluZGV4IGZlNGFhZjkuLmU2ZmI2ODcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvYW5ub3RhdGlvbnMtY29tbW9uLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2Fubm90YXRpb25zLWNvbW1vbi54bWwKQEAgLTE3LDcgKzE3LDcgQEAKIC0tPgogCiA8cHJvcGVydHkgZW52aXJvbm1lbnQ9ImVudiIvPgotPHByb3BlcnR5IGZpbGU9IiR7ZW52LkFQU19IT01FfS9jb25maWcucHJvcGVydGllcyIvPiAgIAorPHByb3BlcnR5IGZpbGU9IiR7ZW52LkFQU19IT01FfS9jb25maWcucHJvcGVydGllcyIvPgogCiA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iY2xlYW4sIGNvbXBpbGUsIHJ1biwgdW5kZXBsb3ksIHJlcG9ydCIvPgogCkBAIC0zOSwyMSArMzksMjEgQEAKIAogCiA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiPgotICAgIDxta2RpciBkaXI9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3NlcyIvPiAgIAorICAgIDxta2RpciBkaXI9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3NlcyIvPgogICAgIDxiYXNlbmFtZSBmaWxlPSIke3NyYy1uYW1lfSIgcHJvcGVydHk9InNlcnZlciIgc3VmZml4PSIuamF2YSIvPgogICAgIDxkaXJuYW1lIGZpbGU9IiR7c3JjLW5hbWV9IiBwcm9wZXJ0eT0iZGlyZWN0b3J5Ii8+Ci0gICAgPGJhc2VuYW1lIGZpbGU9IiR7ZGlyZWN0b3J5fSIgcHJvcGVydHk9InBrZy1uYW1lIi8+IAorICAgIDxiYXNlbmFtZSBmaWxlPSIke2RpcmVjdG9yeX0iIHByb3BlcnR5PSJwa2ctbmFtZSIvPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzcy1uYW1lIiB2YWx1ZT0iJHtwa2ctbmFtZX0vJHtzZXJ2ZXJ9LmNsYXNzIi8+CiAgICAgPGVjaG8gbWVzc2FnZT0iQ29tcGlsaW5nIGludG8gJHtwa2ctbmFtZX0vJHtzZXJ2ZXJ9LmNsYXNzIi8+Ci0gICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvYXV0b2RlcGxveSIgCisgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvYXV0b2RlcGxveSIKICAgICAgICAgaW5jbHVkZXM9IiR7c3JjLW5hbWV9Ij4KICAgICA8Y2xhc3NwYXRoIHJlZmlkPSJjbGFzc3BhdGgiLz4KICAgIDwvamF2YWM+CiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJjb21waWxlLWNsaWVudCI+Ci0gICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzIiAKLSAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9qMmVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy1ydC5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtdG9vbHMuamFyIiAKKyAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMiCisgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvajJlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtcnQuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXRvb2xzLmphciIKICAgICAgICAgaW5jbHVkZXM9IiR7Y2xpZW50LXNyYy1uYW1lfSIvPgogPC90YXJnZXQ+CiAKQEAgLTY0LDcgKzY0LDcgQEAKIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiPgogICAgIDxiYXNlbmFtZSBmaWxlPSIke3NyYy1uYW1lfSIgcHJvcGVydHk9InNlcnZlciIgc3VmZml4PSIuamF2YSIvPgogICAgIDxkaXJuYW1lIGZpbGU9IiR7c3JjLW5hbWV9IiBwcm9wZXJ0eT0iZGlyZWN0b3J5Ii8+Ci0gICAgPGJhc2VuYW1lIGZpbGU9IiR7ZGlyZWN0b3J5fSIgcHJvcGVydHk9InBrZy1uYW1lIi8+IAorICAgIDxiYXNlbmFtZSBmaWxlPSIke2RpcmVjdG9yeX0iIHByb3BlcnR5PSJwa2ctbmFtZSIvPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzcy1uYW1lIiB2YWx1ZT0iJHtwa2ctbmFtZX0vJHtzZXJ2ZXJ9LmNsYXNzIi8+CiAgICAgPGVjaG8gbWVzc2FnZT0iUmVtb3ZpbmcgZmlsZSAke2NsYXNzLW5hbWV9IGZyb20gYXV0b2RlcGxveSBkaXJlY3RvcnkiLz4KICAgICA8ZGVsZXRlIGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2F1dG9kZXBsb3kvJHtjbGFzcy1uYW1lfSIvPgpAQCAtODMsNyArODMsNyBAQAogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0icmVwb3J0IiBkZXBlbmRzPSJpbnRlcm5hbC1yZXBvcnQtc3VjY2VzcywgaW50ZXJuYWwtcmVwb3J0LWZhaWx1cmUiPgotICAgIDxkZWxldGUgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvYXV0b2RlcGxveS8ke2NsYXNzLW5hbWV9XyoiLz4gICAgCisgICAgPGRlbGV0ZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9hdXRvZGVwbG95LyR7Y2xhc3MtbmFtZX1fKiIvPgogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0icnVuIj4KQEAgLTEwOCwxNyArMTA4LDE3IEBACiA8dGFyZ2V0IG5hbWU9ImludGVybmFsLXJ1biIgaWY9ImRlcGxveV9zdWNjZWVkZWQiPgogICAgIDxiYXNlbmFtZSBmaWxlPSIke2NsaWVudC1zcmMtbmFtZX0iIHByb3BlcnR5PSJjbGllbnQiIHN1ZmZpeD0iLmphdmEiLz4KICAgICA8ZGlybmFtZSBmaWxlPSIke2NsaWVudC1zcmMtbmFtZX0iIHByb3BlcnR5PSJjbGllbnQtZGlyZWN0b3J5Ii8+Ci0gICAgPGJhc2VuYW1lIGZpbGU9IiR7Y2xpZW50LWRpcmVjdG9yeX0iIHByb3BlcnR5PSJjbGllbnQtcGtnLW5hbWUiLz4gCisgICAgPGJhc2VuYW1lIGZpbGU9IiR7Y2xpZW50LWRpcmVjdG9yeX0iIHByb3BlcnR5PSJjbGllbnQtcGtnLW5hbWUiLz4KICAgICA8cHJvcGVydHkgbmFtZT0iY2xpZW50LWNsYXNzLW5hbWUiIHZhbHVlPSIke2NsaWVudC1wa2ctbmFtZX0vJHtjbGllbnR9LmNsYXNzIi8+CiAgICAgPGVjaG8gbWVzc2FnZT0id3NpbXBvcnRpbmcgaHR0cDovLyR7aHR0cC5ob3N0fToke2h0dHAucG9ydH0vJHtzZXJ2ZXJ9LyR7c2VydmVyfVNlcnZpY2U/V1NETCIvPgogICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL3dzaW1wb3J0Ij4KICAgICAgICAgPGFyZyBsaW5lPSIta2VlcCAtZCAke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMgaHR0cDovLyR7aHR0cC5ob3N0fToke2h0dHAucG9ydH0vJHtzZXJ2ZXJ9LyR7c2VydmVyfVNlcnZpY2U/V1NETCIvPgogICAgIDwvZXhlYz4KLSAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY2xpZW50Ii8+ICAgCisgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNsaWVudCIvPgogICAgIDxlY2hvIG1lc3NhZ2U9IlJ1bm5pbmcgYXBwY2xpZW50IHdpdGggJHtjbGllbnQtcGtnLW5hbWV9LiR7Y2xpZW50fSIvPgogICAgIDx1bmphciBzcmM9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiBkZXN0PSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMiLz4KICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi9hcHBjbGllbnQiIGRpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzIj4KLSAgICAgICAgPGFyZyB2YWx1ZT0iJHtjbGllbnQtcGtnLW5hbWV9LiR7Y2xpZW50fSIvPiAgICAKKyAgICAgICAgPGFyZyB2YWx1ZT0iJHtjbGllbnQtcGtnLW5hbWV9LiR7Y2xpZW50fSIvPgogICAgIDwvZXhlYz4KIDwvdGFyZ2V0PgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2FzeW5jL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2FzeW5jL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYjA4NGM1NC4uMzE3NTgyNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9hc3luYy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvYXN5bmMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsOSArMTUsOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iYXN5bmNzZXJ2aWNlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSIuL3dlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvYXN5bmMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9hc3luYy9idWlsZC54bWwKaW5kZXggODE3ZDY2OC4uMzZkZmRmYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9hc3luYy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9hc3luYy9idWlsZC54bWwKQEAgLTYzLDggKzYzLDggQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0id3NpbXBvcnQuYXJncyIKICAgICAgICAgICAgICAgIHZhbHVlPSIta2VlcCAtYiBjdXN0b20tY2xpZW50LnhtbCAtZCAke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQgaHR0cDovLyR7aHR0cC5ob3N0fToke2h0dHAucG9ydH0vJHthcHBuYW1lfS93ZWJzZXJ2aWNlL0FzeW5jU2VydmljZT9XU0RMIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiIAotICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9qMmVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy1ydC5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtdG9vbHMuamFyIiAKKyAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvajJlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtcnQuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXRvb2xzLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJjbGllbnQvKioiLz4KICAgICA8L3RhcmdldD4KIApAQCAtNzcsNyArNzcsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bmNsaWVudCI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi1jbGllbnQiPgogICAgICAgICA8cGFyYW0gbmFtZT0iY2xpZW50LWNsYXNzIiB2YWx1ZT0iY2xpZW50LkNsaWVudCIvPgpAQCAtODUsNyArODUsNyBAQAogICAgICAgPC9hbnRjYWxsPgogCiAKLTwhLS1yZXN0b3JlIHRoZSB0b2tlbnMgYmFjayBpbiBmaWxlLS0+IAorPCEtLXJlc3RvcmUgdGhlIHRva2VucyBiYWNrIGluIGZpbGUtLT4KICAgICAgICAgIDxyZXBsYWNlIGZpbGU9ImN1c3RvbS1jbGllbnQueG1sIiB0b2tlbj0iJHtodHRwLmhvc3R9IiB2YWx1ZT0iSFRUUF9IT1NUIi8+CiAgICAgICAgICA8cmVwbGFjZSBmaWxlPSJjdXN0b20tY2xpZW50LnhtbCIgdG9rZW49IiR7aHR0cC5wb3J0fSIgdmFsdWU9IkhUVFBfUE9SVCIvPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9hc3luYy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2FzeW5jL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA2NTE1YTkzLi5jODk1MjgyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2FzeW5jL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2FzeW5jL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzcsMjMgKzM3LDIzIEBACiAgICAgICAgIHN0YXRpYyBBZGROdW1iZXJzSW1wbFNlcnZpY2Ugc2VydmljZTsKIAogICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oImFzeW5jLXNlcnZpY2UiKTsKKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiYXN5bmMtc2VydmljZSIpOwogICAgICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKICAgICAgICAgICAgIGNsaWVudC5kb1N5bmNUZXN0KCk7CiAgICAgICAgICAgICBjbGllbnQuZG9BU3luY1BvbGxUZXN0KCk7CiAgICAgICAgICAgICBjbGllbnQuZG9BU3luY0NhbGxCYWNrVGVzdCgpOwotCSAgICBzdGF0LnByaW50U3VtbWFyeSgiYXN5bmMtc2VydmljZSIpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiYXN5bmMtc2VydmljZSIpOwogICAgICAgICB9CiAKICAgICAgICAgcHVibGljIHZvaWQgZG9TeW5jVGVzdCgpIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgQWRkTnVtYmVyc0ltcGwgcG9ydCA9IHNlcnZpY2UuZ2V0QWRkTnVtYmVyc0ltcGxQb3J0KCk7CiAgICAgICAgICAgICAgICAgaW50IHJldCA9IHBvcnQuYWRkTnVtYmVycygyMjIyLCAxMjM0KTsKLQkJaWYocmV0IT0oMjIyMisxMjM0KSkgeworICAgICAgICBpZihyZXQhPSgyMjIyKzEyMzQpKSB7CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBhZGQgcmVzdWx0ICIgKyByZXQpOwogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiYXN5bmMtc2VydmljZS1zeW5jLXRlc3QiLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0JCX0KKyAgICAgICAgfQogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXQpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJhc3luYy1zZXJ2aWNlLXN5bmMtdGVzdCIsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CkBAIC03MCwxMSArNzAsMTEgQEAKICAgICAgICAgICAgICAgICBUaHJlYWQuc2xlZXAgKDIwMDApOwogICAgICAgICAgICAgICAgIEFkZE51bWJlcnNSZXNwb25zZSBvdXRwdXQgPSByZXNwLmdldCgpOwogICAgICAgICAgICAgICAgIGludCByZXQgPSBvdXRwdXQuZ2V0UmV0dXJuKCk7Ci0JCWlmKHJldCE9KDEyMzQrNTY3OCkpIHsKKyAgICAgICAgaWYocmV0IT0oMTIzNCs1Njc4KSkgewogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgYWRkIHJlc3VsdCAiICsgcmV0KTsKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImFzeW5jLXNlcnZpY2UtcG9sbC10ZXN0Iiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCQl9CisgICAgICAgIH0KICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmV0KTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiYXN5bmMtc2VydmljZS1wb2xsLXRlc3QiLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewpAQCAtOTIsMTEgKzkyLDExIEBACiAgICAgICAgICAgICAgICAgVGhyZWFkLnNsZWVwICgyMDAwKTsKICAgICAgICAgICAgICAgICBBZGROdW1iZXJzUmVzcG9uc2Ugb3V0cHV0ID0gY2JoLmdldFJlc3BvbnNlICgpOwogICAgICAgICAgICAgICAgIGludCByZXQgPSBvdXRwdXQuZ2V0UmV0dXJuKCk7Ci0JCWlmKHJldCE9KDk4NzYrNTQzMikpIHsKKyAgICAgICAgaWYocmV0IT0oOTg3Nis1NDMyKSkgewogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgYWRkIHJlc3VsdCAiICsgcmV0KTsKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImFzeW5jLXNlcnZpY2UtY2FsbGJhY2toYW5kbGVyLXRlc3QiLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0JCX0KKyAgICAgICAgfQogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXQpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJhc3luYy1zZXJ2aWNlLWNhbGxiYWNraGFuZGxlci10ZXN0Iiwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvYXN5bmMvY3VzdG9tLWNsaWVudC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2FzeW5jL2N1c3RvbS1jbGllbnQueG1sCmluZGV4IGYzMGM3YWUuLmRmZDI1N2MgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvYXN5bmMvY3VzdG9tLWNsaWVudC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9hc3luYy9jdXN0b20tY2xpZW50LnhtbApAQCAtMjEsNyArMjEsNyBAQAogICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCiAgICAgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCiAgICAgd3NkbExvY2F0aW9uPSJodHRwOi8vSFRUUF9IT1NUOkhUVFBfUE9SVC9hc3luY3NlcnZpY2Uvd2Vic2VydmljZS9Bc3luY1NlcnZpY2U/V1NETCIKLSAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4d3MiPiAgICAKKyAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4d3MiPgogICAgIDxiaW5kaW5ncyBub2RlPSJuczE6ZGVmaW5pdGlvbnMiIHhtbG5zOm5zMT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgogICAgICAgICA8cGFja2FnZSBuYW1lPSJjbGllbnQiLz4KICAgICAgICAgPGVuYWJsZUFzeW5jTWFwcGluZz50cnVlPC9lbmFibGVBc3luY01hcHBpbmc+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2FzeW5jL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2FzeW5jL3dlYi54bWwKaW5kZXggZTY2NzcyNy4uNjRmYWFmOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9hc3luYy93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvYXN5bmMvd2ViLnhtbApAQCAtMTgsMTcgKzE4LDE3IEBACiAtLT4KIAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCi0JCQlodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KLQk8c2VydmxldD4KLQkJPHNlcnZsZXQtbmFtZT5BZGROdW1iZXJzSW1wbDwvc2VydmxldC1uYW1lPgotCQk8c2VydmxldC1jbGFzcz5lbmRwb2ludC5BZGROdW1iZXJzSW1wbDwvc2VydmxldC1jbGFzcz4KLQk8L3NlcnZsZXQ+Ci0JPHNlcnZsZXQtbWFwcGluZz4KLQkJPHNlcnZsZXQtbmFtZT5BZGROdW1iZXJzSW1wbDwvc2VydmxldC1uYW1lPgotCQk8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvQXN5bmNTZXJ2aWNlPC91cmwtcGF0dGVybj4KLQk8L3NlcnZsZXQtbWFwcGluZz4KKyAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCisgICAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KKyAgICA8c2VydmxldD4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5BZGROdW1iZXJzSW1wbDwvc2VydmxldC1uYW1lPgorICAgICAgICA8c2VydmxldC1jbGFzcz5lbmRwb2ludC5BZGROdW1iZXJzSW1wbDwvc2VydmxldC1jbGFzcz4KKyAgICA8L3NlcnZsZXQ+CisgICAgPHNlcnZsZXQtbWFwcGluZz4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5BZGROdW1iZXJzSW1wbDwvc2VydmxldC1uYW1lPgorICAgICAgICA8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvQXN5bmNTZXJ2aWNlPC91cmwtcGF0dGVybj4KKyAgICA8L3NlcnZsZXQtbWFwcGluZz4KIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2J1aWxkLnhtbAppbmRleCBmZjVlMGE4Li5hNjU1YjliIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2J1aWxkLnhtbApAQCAtMjEsNDYgKzIxLDQ2IEBACiBdPgogPHByb2plY3QgbmFtZT0ic2VydmxldCBlbmRwb2ludCBhbm5vdGF0aW9ucyIgZGVmYXVsdD0iYWxsIiBiYXNlZGlyPSIuIj4KICAgICA8dGFyZ2V0IG5hbWU9ImFsbCI+Ci0JPGFudCBkaXI9Im5vbmFtZSIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0ibm9uYW1lMiIgdGFyZ2V0PSJhbGwiLz4KLQk8IS0tYW50IGRpcj0iZXh0ZXJuYWx3c2RsIiB0YXJnZXQ9ImFsbCIvLS0+CisgICAgPGFudCBkaXI9Im5vbmFtZSIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0ibm9uYW1lMiIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8IS0tYW50IGRpcj0iZXh0ZXJuYWx3c2RsIiB0YXJnZXQ9ImFsbCIvLS0+CiAKLQk8YW50IGRpcj0iZG9sLW92ZXJyaWRlLTEiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9ImRvbC1vdmVycmlkZS0xIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0id2Vic2VydmljZXMxMy1hZGRyZXNzaW5nIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0id2Vic2VydmljZXJlZi1sb29rdXAiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxhbnQgZGlyPSJ3ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmctMiIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0icHJvdmlkZXIiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9InN2Y2hhbmRsZXItMSIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0ic3ZjaGFuZGxlci0yIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJzdmNoYW5kbGVyLTMiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9InN2Y2hhbmRsZXItNCIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0iY2xpZW50LWhhbmRsZXItMSIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0iY2xpZW50LWhhbmRsZXItMiIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0ibXRvbSIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0iY29udGFpbmVycmVzb2x2ZXIiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9ImVuZHBvaW50YWRkcmVzcyIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0iZmF1bHQiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9IndlYnNlcnZpY2VyZWZzIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJ3YXJzZXJ2aWNlIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJ3c2RsdG9qYXZhIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJ3c2N0eHQiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9InNvYXAxMiIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0ib25ld2F5IiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJtc2djdHh0IiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJub3dlYnhtbCIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0icHJvdmlkZXIiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9InN2Y2hhbmRsZXItMSIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0ic3ZjaGFuZGxlci0yIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJzdmNoYW5kbGVyLTMiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9InN2Y2hhbmRsZXItNCIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0iY2xpZW50LWhhbmRsZXItMSIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0iY2xpZW50LWhhbmRsZXItMiIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0ibXRvbSIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0iY29udGFpbmVycmVzb2x2ZXIiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9ImVuZHBvaW50YWRkcmVzcyIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0iZmF1bHQiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9IndlYnNlcnZpY2VyZWZzIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJ3YXJzZXJ2aWNlIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJ3c2RsdG9qYXZhIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJ3c2N0eHQiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9InNvYXAxMiIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0ib25ld2F5IiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJtc2djdHh0IiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJub3dlYnhtbCIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9IndlYnNlcnZpY2VzMTMtcmVzcGVjdGJpbmRpbmciIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9ImFzeW5jIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJyZXN0ZnVsIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJyZXN0ZnVsLTIiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9InBrZ2Vkd2Fyc2VydmljZSIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0ibWFwcGVkbmFtZSIgdGFyZ2V0PSJhbGwiLz4KLQk8IS0tPGFudCBkaXI9Im1ieXRlIiB0YXJnZXQ9ImFsbCIvPi0tPgotCTxhbnQgZGlyPSJwb3N0Y29uc3RydWN0IiB0YXJnZXQ9ImFsbCIvPgotPCEtLQk8YW50IGRpcj0iamF4cnBjaW5qZWN0aW9uIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJwcm92aWRlcmhhbmRsZXIiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9InByZXBrZ2VkLXN2Yy0xIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJsaWJkZXBlbmRlbnQiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9InNvYXB0Y3AiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9ImFzeW5jIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJyZXN0ZnVsIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJyZXN0ZnVsLTIiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9InBrZ2Vkd2Fyc2VydmljZSIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0ibWFwcGVkbmFtZSIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8IS0tPGFudCBkaXI9Im1ieXRlIiB0YXJnZXQ9ImFsbCIvPi0tPgorICAgIDxhbnQgZGlyPSJwb3N0Y29uc3RydWN0IiB0YXJnZXQ9ImFsbCIvPgorPCEtLSAgICA8YW50IGRpcj0iamF4cnBjaW5qZWN0aW9uIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJwcm92aWRlcmhhbmRsZXIiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9InByZXBrZ2VkLXN2Yy0xIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJsaWJkZXBlbmRlbnQiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9InNvYXB0Y3AiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxhbnQgZGlyPSJ3ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmctYXBwY2xpZW50IiB0YXJnZXQ9ImFsbCIvPgogLS0+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NsaWVudC1oYW5kbGVyLTEvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDc3YjBhMjIuLjA4ZTJjODggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNsaWVudC1oYW5kbGVyLTEiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9Ii4vd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iLi9zdW4td2ViLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0xL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMS9idWlsZC54bWwKaW5kZXggOTc3MjA2Ny4uZWU1YjI2ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0xL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NsaWVudC1oYW5kbGVyLTEvYnVpbGQueG1sCkBAIC0xMjcsMTEgKzEyNywxMSBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jbGllbnQiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVudGVzdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+Ci0gICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiIAotICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgCisgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9ImNsaWVudC8qKiIvPgogICAgICAgPHVuamFyIHNyYz0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIGRlc3Q9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgogICAgICAgPGphdmEgY2xhc3NuYW1lPSJjbGllbnQuVGVzdENsaWVudCI+CkBAIC0xNDEsNyArMTQxLDcgQEAKICAgICAgICAgPGFyZyB2YWx1ZT0iaHR0cDovLyR7aHR0cC5ob3N0fToke2h0dHAucG9ydH0vd3NjbGllbnQvUmVxdWVzdFByb2Nlc3NvciIvPgogICAgICAgPC9qYXZhPgogCi0gPCEtLXJlc3RvcmUgdGhlIHRva2VucyBiYWNrIGluIGZpbGUtLT4gCisgPCEtLXJlc3RvcmUgdGhlIHRva2VucyBiYWNrIGluIGZpbGUtLT4KICAgICAgICAgIDxyZXBsYWNlIGZpbGU9IndlYmNsaWVudC9DbGllbnQuamF2YSIgdG9rZW49IiR7aHR0cC5ob3N0fSIgdmFsdWU9IkhUVFBfSE9TVCIvPgogICAgICAgICAgPHJlcGxhY2UgZmlsZT0id2ViY2xpZW50L0NsaWVudC5qYXZhIiB0b2tlbj0iJHtodHRwLnBvcnR9IiB2YWx1ZT0iSFRUUF9QT1JUIi8+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NsaWVudC1oYW5kbGVyLTEvY2xpZW50LXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NsaWVudC1oYW5kbGVyLTEvY2xpZW50LXdlYi54bWwKaW5kZXggZDhhYTJlNS4uNGRjOGJlMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0xL2NsaWVudC13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMS9jbGllbnQtd2ViLnhtbApAQCAtMjAsNyArMjAsNyBAQAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLSAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIAorICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogICA8ZGVzY3JpcHRpb24+QSB0ZXN0IGFwcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KICAgPGRpc3BsYXktbmFtZT5XZWJUaWVyPC9kaXNwbGF5LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NsaWVudC1oYW5kbGVyLTEvY2xpZW50L1Rlc3RDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMS9jbGllbnQvVGVzdENsaWVudC5qYXZhCmluZGV4IGE2YjVmNWQuLjE5NjZiZWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMS9jbGllbnQvVGVzdENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMS9jbGllbnQvVGVzdENsaWVudC5qYXZhCkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnQgY29kZSA9IGludm9rZVNlcnZsZXQodXJsKTsKICAgICAgICAgICAgIHJlcG9ydChjb2RlKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICB9CkBAIC02Myw5ICs2Myw5IEBACiAgICAgICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgICAgICAgIGxvZyhsaW5lKTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiU28gdGhlIFJFU1VMVCBPRiBTVUJUUkFDVCBTRVJWSUNFIElTIikgIT0gLTEpCi0JCWZvdW5kMSA9IHRydWU7CisgICAgICAgIGZvdW5kMSA9IHRydWU7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIlsxMTA5XSIpICE9IC0xKQotCQlmb3VuZDIgPSB0cnVlOworICAgICAgICBmb3VuZDIgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjb2RlOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMS9jdXN0b20tY2xpZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMS9jdXN0b20tY2xpZW50LnhtbAppbmRleCA4MzlmY2IxLi40OGYxNzE2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NsaWVudC1oYW5kbGVyLTEvY3VzdG9tLWNsaWVudC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0xL2N1c3RvbS1jbGllbnQueG1sCkBAIC0xNywxMiArMTcsMTIgQEAKIAogLS0+CiAKLTxiaW5kaW5ncyAKKzxiaW5kaW5ncwogICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCiAgICAgeG1sbnM6amF4Yj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4YiIKICAgICB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKICAgICB3c2RsTG9jYXRpb249IlN1YnRyYWN0TnVtYmVycy53c2RsIgotICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXh3cyI+ICAgIAorICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXh3cyI+CiAgICAgPGJpbmRpbmdzIG5vZGU9Im5zMTpkZWZpbml0aW9ucyIgeG1sbnM6bnMxPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+CiAgICAgICAgIDxwYWNrYWdlIG5hbWU9ImNsaWVudCIvPgogICAgIDwvYmluZGluZ3M+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NsaWVudC1oYW5kbGVyLTEvY3VzdG9tLXNlcnZlci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NsaWVudC1oYW5kbGVyLTEvY3VzdG9tLXNlcnZlci54bWwKaW5kZXggMTcwZDY2Ny4uMDk4ODEyMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0xL2N1c3RvbS1zZXJ2ZXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMS9jdXN0b20tc2VydmVyLnhtbApAQCAtMTcsNyArMTcsNyBAQAogCiAtLT4KIAotPGJpbmRpbmdzIAorPGJpbmRpbmdzCiAgICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKICAgICB4bWxuczpqYXhiPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXhiIgogICAgIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0xL2VuZHBvaW50L1N1YnRyYWN0TnVtYmVyc0ltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMS9lbmRwb2ludC9TdWJ0cmFjdE51bWJlcnNJbXBsLmphdmEKaW5kZXggMzk4NzI3YS4uNDdlYTMwZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0xL2VuZHBvaW50L1N1YnRyYWN0TnVtYmVyc0ltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NsaWVudC1oYW5kbGVyLTEvZW5kcG9pbnQvU3VidHJhY3ROdW1iZXJzSW1wbC5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIEBqYWthcnRhLmp3cy5XZWJTZXJ2aWNlIChzZXJ2aWNlTmFtZT0ianVua2p1bmtqdW5rIiwgZW5kcG9pbnRJbnRlcmZhY2U9ImVuZHBvaW50LlN1YnRyYWN0TnVtYmVyc1BvcnRUeXBlIikKIHB1YmxpYyBjbGFzcyBTdWJ0cmFjdE51bWJlcnNJbXBsIGltcGxlbWVudHMgU3VidHJhY3ROdW1iZXJzUG9ydFR5cGUgewotICAgIAorCiAgICAgcHVibGljIGludCBzdWJ0cmFjdE51bWJlcnMgKGludCBudW1iZXIxLCBpbnQgbnVtYmVyMikgewogICAgICAgICByZXR1cm4gbnVtYmVyMSAtIG51bWJlcjI7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0xL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NsaWVudC1oYW5kbGVyLTEvd2ViLnhtbAppbmRleCA0MzQyNDM0Li40YTFiMjgzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NsaWVudC1oYW5kbGVyLTEvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NsaWVudC1oYW5kbGVyLTEvd2ViLnhtbApAQCAtMTgsMjkgKzE4LDI5IEBACiAtLT4KIAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCi0JCQlodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KKyAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCisgICAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KIAotCTxkZXNjcmlwdGlvbj5TdWJ0cmFjdE51bWJlcnMgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgPGRlc2NyaXB0aW9uPlN1YnRyYWN0TnVtYmVycyBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KIAotCTxzZXJ2bGV0PgotCQk8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIFN1YnRyYWN0TnVtYmVycyBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JCTxkaXNwbGF5LW5hbWU+U3VidHJhY3ROdW1iZXJzV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgotCQk8c2VydmxldC1uYW1lPlN1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3NlcnZsZXQtbmFtZT4KLQkJPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuU3VidHJhY3ROdW1iZXJzSW1wbDwvc2VydmxldC1jbGFzcz4KLQkJPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+Ci0JPC9zZXJ2bGV0PgorICAgIDxzZXJ2bGV0PgorICAgICAgICA8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIFN1YnRyYWN0TnVtYmVycyBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgICAgIDxkaXNwbGF5LW5hbWU+U3VidHJhY3ROdW1iZXJzV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgorICAgICAgICA8c2VydmxldC1uYW1lPlN1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuU3VidHJhY3ROdW1iZXJzSW1wbDwvc2VydmxldC1jbGFzcz4KKyAgICAgICAgPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+CisgICAgPC9zZXJ2bGV0PgogCi0JPHNlcnZsZXQtbWFwcGluZz4KLQkJPHNlcnZsZXQtbmFtZT5TdWJ0cmFjdE51bWJlcnNTZXJ2aWNlPC9zZXJ2bGV0LW5hbWU+Ci0JCTx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9TdWJ0cmFjdE51bWJlcnNTZXJ2aWNlPC91cmwtcGF0dGVybj4KLQk8L3NlcnZsZXQtbWFwcGluZz4KKyAgICA8c2VydmxldC1tYXBwaW5nPgorICAgICAgICA8c2VydmxldC1uYW1lPlN1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL1N1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3VybC1wYXR0ZXJuPgorICAgIDwvc2VydmxldC1tYXBwaW5nPgogCi0JPHNlc3Npb24tY29uZmlnPgotCQk8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+Ci0JPC9zZXNzaW9uLWNvbmZpZz4KKyAgICA8c2Vzc2lvbi1jb25maWc+CisgICAgICAgIDxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KKyAgICA8L3Nlc3Npb24tY29uZmlnPgogCiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMS93ZWJjbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NsaWVudC1oYW5kbGVyLTEvd2ViY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDFmNzlhOTQuLjk1MDY3MTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMS93ZWJjbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0xL3dlYmNsaWVudC9DbGllbnQuamF2YQpAQCAtMjcsOCArMjcsOCBAQAogCiAgICAgICAgQFdlYlNlcnZpY2VSZWYod3NkbExvY2F0aW9uPSJXRUItSU5GL3dzZGwvU3VidHJhY3ROdW1iZXJzLndzZGwiKSBTdWJ0cmFjdE51bWJlcnNTZXJ2aWNlIHNlcnZpY2U7CiAKLSAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApIAotCQl0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24geworICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkKKyAgICAgICAgdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgICAgZG9Qb3N0KHJlcSwgcmVzcCk7CiAgICAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NsaWVudC1oYW5kbGVyLTEvd2ViY2xpZW50L1Rlc3RIYW5kbGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NsaWVudC1oYW5kbGVyLTEvd2ViY2xpZW50L1Rlc3RIYW5kbGVyLmphdmEKaW5kZXggMzVkNzA1My4uYzUzYjIyZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0xL3dlYmNsaWVudC9UZXN0SGFuZGxlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMS93ZWJjbGllbnQvVGVzdEhhbmRsZXIuamF2YQpAQCAtMjgsMTEgKzI4LDExIEBACiBpbXBvcnQgamFrYXJ0YS54bWwuc29hcC4qOwogCiBwdWJsaWMgY2xhc3MgVGVzdEhhbmRsZXIgaW1wbGVtZW50cyBTT0FQSGFuZGxlcjxTT0FQTWVzc2FnZUNvbnRleHQ+IHsKLSAgICAKKwogICAgIHB1YmxpYyBTZXQ8UU5hbWU+IGdldEhlYWRlcnMoKSB7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KLSAgICAKKwogICAgIFN0cmluZyBwb3N0Q29uc3RTdHJpbmcgPSAiTk9UX0lOSVRJQUxJWkVEIjsKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHB1YmxpYyB2b2lkIGluaXQoKSB7CkBAIC01MCw3ICs1MCw3IEBACiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIYW5kbGVyIFBvc3RDb25zdHJ1Y3Qgbm90IGNhbGxlZCBwcm9wZXJ0eSIpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigicG9zdENvbnN0U3RyaW5nID0gIiArIHBvc3RDb25zdFN0cmluZyk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfSAgICAgICAgICAgIAorICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCJ1bmRlZmluZWQiLmVxdWFscyhpbmplY3RlZFN0cmluZykpIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhhbmRsZXIgbm90IGluamVjdGVkIHByb3BlcnR5Iik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTksNyArNTksNyBAQAogICAgICAgICAgICAgU09BUE1lc3NhZ2VDb250ZXh0IHNtYyA9IChTT0FQTWVzc2FnZUNvbnRleHQpIGNvbnRleHQ7CiAgICAgICAgICAgICBTT0FQTWVzc2FnZSBtZXNzYWdlID0gc21jLmdldE1lc3NhZ2UoKTsKICAgICAgICAgICAgIFNPQVBCb2R5IGJvZHkgPSBtZXNzYWdlLmdldFNPQVBCb2R5KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU09BUEVsZW1lbnQgcGFyYW1FbGVtZW50ID0KICAgICAgICAgICAgICAgICAoU09BUEVsZW1lbnQpIGJvZHkuZ2V0Rmlyc3RDaGlsZCgpLmdldEZpcnN0Q2hpbGQoKTsKICAgICAgICAgICAgIGludCBudW1iZXIgPSBJbnRlZ2VyLnBhcnNlSW50KHBhcmFtRWxlbWVudC5nZXRWYWx1ZSgpKTsKQEAgLTY5LDExICs2OSwxMSBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGhhbmRsZUZhdWx0KFNPQVBNZXNzYWdlQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGNsb3NlKE1lc3NhZ2VDb250ZXh0IGNvbnRleHQpIHt9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0yL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMGE3Njk1Yy4uOWM1NTE5YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0yL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0yL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2xpZW50LWhhbmRsZXItMiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iLi93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSIuL3N1bi13ZWIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NsaWVudC1oYW5kbGVyLTIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0yL2J1aWxkLnhtbAppbmRleCA3YmM4NTA2Li5iMTNiMTIyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NsaWVudC1oYW5kbGVyLTIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMi9idWlsZC54bWwKQEAgLTg3LDcgKzg3LDcgQEAKICAgICAgIDxyZXBsYWNlIGZpbGU9IndlYmNsaWVudC9DbGllbnQuamF2YSIgdmFsdWU9IiR7aHR0cC5ob3N0fSIgdG9rZW49IkhUVFBfSE9TVCIvPgogICAgICAgPHJlcGxhY2UgZmlsZT0id2ViY2xpZW50L0NsaWVudC5qYXZhIiB2YWx1ZT0iJHtodHRwLnBvcnR9IiB0b2tlbj0iSFRUUF9QT1JUIi8+CiAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi9jbGFzc2VzIgotICAgICAgICAgICAgY2xhc3NwYXRocmVmPSJjbGFzcy5wYXRoIiAKKyAgICAgICAgICAgIGNsYXNzcGF0aHJlZj0iY2xhc3MucGF0aCIKICAgICAgICAgICAgIGluY2x1ZGVzPSJ3ZWJjbGllbnQvKioiLz4KICAgICAgIDxjb3B5IGZpbGU9Ii4vY2xpZW50LXdlYi54bWwiIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvd2ViLnhtbCIvPgogICAgICAgPGNvcHkgZmlsZT0iLi9jbGllbnQtc3VuLXdlYi54bWwiIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvc3VuLXdlYi54bWwiLz4KQEAgLTEyOSwxMSArMTI5LDExIEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNsaWVudCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW5jbGllbnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgotICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IiAKLSAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIAorICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJjbGllbnQvKioiLz4KICAgICAgIDx1bmphciBzcmM9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiBkZXN0PSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iY2xpZW50LlRlc3RDbGllbnQiPgpAQCAtMTQzLDcgKzE0Myw3IEBACiAgICAgICAgIDxhcmcgdmFsdWU9Imh0dHA6Ly8ke2h0dHAuaG9zdH06JHtodHRwLnBvcnR9L3dzY2xpZW50L1JlcXVlc3RQcm9jZXNzb3IiLz4KICAgICAgIDwvamF2YT4KIAotPCEtLXJlc3RvcmUgdGhlIHRva2VucyBiYWNrIGluIGZpbGUtLT4gCis8IS0tcmVzdG9yZSB0aGUgdG9rZW5zIGJhY2sgaW4gZmlsZS0tPgogICAgICAgICAgPHJlcGxhY2UgZmlsZT0id2ViY2xpZW50L0NsaWVudC5qYXZhIiB0b2tlbj0iJHtodHRwLmhvc3R9IiB2YWx1ZT0iSFRUUF9IT1NUIi8+CiAgICAgICAgICA8cmVwbGFjZSBmaWxlPSJ3ZWJjbGllbnQvQ2xpZW50LmphdmEiIHRva2VuPSIke2h0dHAucG9ydH0iIHZhbHVlPSJIVFRQX1BPUlQiLz4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMi9jbGllbnQtd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMi9jbGllbnQtd2ViLnhtbAppbmRleCAwMjdkZmNlLi5iNGJiZjViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NsaWVudC1oYW5kbGVyLTIvY2xpZW50LXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0yL2NsaWVudC13ZWIueG1sCkBAIC0yMCw3ICsyMCw3IEBACiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgCisgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAgIDxkZXNjcmlwdGlvbj5BIHRlc3QgYXBwbGljYXRpb248L2Rlc2NyaXB0aW9uPgogICA8ZGlzcGxheS1uYW1lPldlYlRpZXI8L2Rpc3BsYXktbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMi9jbGllbnQvVGVzdENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0yL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKaW5kZXggMTg2MDU0OS4uOWU2ODY1ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0yL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0yL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludCBjb2RlID0gaW52b2tlU2VydmxldCh1cmwpOwogICAgICAgICAgICAgcmVwb3J0KGNvZGUpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KQEAgLTYzLDkgKzYzLDkgQEAKICAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nKGxpbmUpOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJTbyB0aGUgUkVTVUxUIE9GIFNVQlRSQUNUIFNFUlZJQ0UgSVMiKSAhPSAtMSkKLQkJZm91bmQxID0gdHJ1ZTsKKyAgICAgICAgZm91bmQxID0gdHJ1ZTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiWzExMTVdIikgIT0gLTEpCi0JCWZvdW5kMiA9IHRydWU7CisgICAgICAgIGZvdW5kMiA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNvZGU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0yL2N1c3RvbS1jbGllbnQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0yL2N1c3RvbS1jbGllbnQueG1sCmluZGV4IDgzOWZjYjEuLjQ4ZjE3MTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMi9jdXN0b20tY2xpZW50LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NsaWVudC1oYW5kbGVyLTIvY3VzdG9tLWNsaWVudC54bWwKQEAgLTE3LDEyICsxNywxMiBAQAogCiAtLT4KIAotPGJpbmRpbmdzIAorPGJpbmRpbmdzCiAgICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKICAgICB4bWxuczpqYXhiPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXhiIgogICAgIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgogICAgIHdzZGxMb2NhdGlvbj0iU3VidHJhY3ROdW1iZXJzLndzZGwiCi0gICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheHdzIj4gICAgCisgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheHdzIj4KICAgICA8YmluZGluZ3Mgbm9kZT0ibnMxOmRlZmluaXRpb25zIiB4bWxuczpuczE9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KICAgICAgICAgPHBhY2thZ2UgbmFtZT0iY2xpZW50Ii8+CiAgICAgPC9iaW5kaW5ncz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMi9jdXN0b20tc2VydmVyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMi9jdXN0b20tc2VydmVyLnhtbAppbmRleCAxNzBkNjY3Li4wOTg4MTIyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NsaWVudC1oYW5kbGVyLTIvY3VzdG9tLXNlcnZlci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0yL2N1c3RvbS1zZXJ2ZXIueG1sCkBAIC0xNyw3ICsxNyw3IEBACiAKIC0tPgogCi08YmluZGluZ3MgCis8YmluZGluZ3MKICAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgogICAgIHhtbG5zOmpheGI9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheGIiCiAgICAgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NsaWVudC1oYW5kbGVyLTIvZW5kcG9pbnQvU3VidHJhY3ROdW1iZXJzSW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0yL2VuZHBvaW50L1N1YnRyYWN0TnVtYmVyc0ltcGwuamF2YQppbmRleCBmNjA3ZTYyLi41ZTA1MDk5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NsaWVudC1oYW5kbGVyLTIvZW5kcG9pbnQvU3VidHJhY3ROdW1iZXJzSW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMi9lbmRwb2ludC9TdWJ0cmFjdE51bWJlcnNJbXBsLmphdmEKQEAgLTE5LDcgKzE5LDcgQEAKIEBqYWthcnRhLmp3cy5IYW5kbGVyQ2hhaW4obmFtZT0ic29tZSBuYW1lIiwgZmlsZT0ibXloYW5kbGVyLnhtbCIpCiBAamFrYXJ0YS5qd3MuV2ViU2VydmljZSAoc2VydmljZU5hbWU9Imp1bmtqdW5ranVuayIsIGVuZHBvaW50SW50ZXJmYWNlPSJlbmRwb2ludC5TdWJ0cmFjdE51bWJlcnNQb3J0VHlwZSIpCiBwdWJsaWMgY2xhc3MgU3VidHJhY3ROdW1iZXJzSW1wbCBpbXBsZW1lbnRzIFN1YnRyYWN0TnVtYmVyc1BvcnRUeXBlIHsKLSAgICAKKwogICAgIHB1YmxpYyBpbnQgc3VidHJhY3ROdW1iZXJzIChpbnQgbnVtYmVyMSwgaW50IG51bWJlcjIpIHsKIFN5c3RlbS5vdXQucHJpbnRsbigiSSBnb3QgbjEgPSAiICsgbnVtYmVyMSArICIgYW5kIG4yID0gIiArIG51bWJlcjIpOwogICAgICAgICByZXR1cm4gbnVtYmVyMSAtIG51bWJlcjI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NsaWVudC1oYW5kbGVyLTIvZW5kcG9pbnQvVGVzdEhhbmRsZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMi9lbmRwb2ludC9UZXN0SGFuZGxlci5qYXZhCmluZGV4IDZlZTdhMmMuLjQ0MjcyMTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMi9lbmRwb2ludC9UZXN0SGFuZGxlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMi9lbmRwb2ludC9UZXN0SGFuZGxlci5qYXZhCkBAIC0yNiwxNyArMjYsMTcgQEAKIGltcG9ydCBqYWthcnRhLnhtbC5zb2FwLio7CiAKIHB1YmxpYyBjbGFzcyBUZXN0SGFuZGxlciBpbXBsZW1lbnRzIFNPQVBIYW5kbGVyPFNPQVBNZXNzYWdlQ29udGV4dD4gewotICAgIAorCiAgICAgcHVibGljIFNldDxRTmFtZT4gZ2V0SGVhZGVycygpIHsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gaGFuZGxlTWVzc2FnZShTT0FQTWVzc2FnZUNvbnRleHQgY29udGV4dCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgU09BUE1lc3NhZ2VDb250ZXh0IHNtYyA9IChTT0FQTWVzc2FnZUNvbnRleHQpIGNvbnRleHQ7CiAgICAgICAgICAgICBTT0FQTWVzc2FnZSBtZXNzYWdlID0gc21jLmdldE1lc3NhZ2UoKTsKICAgICAgICAgICAgIFNPQVBCb2R5IGJvZHkgPSBtZXNzYWdlLmdldFNPQVBCb2R5KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU09BUEVsZW1lbnQgcGFyYW1FbGVtZW50ID0KICAgICAgICAgICAgICAgICAoU09BUEVsZW1lbnQpIGJvZHkuZ2V0Rmlyc3RDaGlsZCgpLmdldEZpcnN0Q2hpbGQoKTsKICAgICAgICAgICAgIGludCBudW1iZXIgPSBJbnRlZ2VyLnBhcnNlSW50KHBhcmFtRWxlbWVudC5nZXRWYWx1ZSgpKTsKQEAgLTQ0LDE2ICs0NCwxNiBAQAogICAgICAgICB9IGNhdGNoIChTT0FQRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLQlTeXN0ZW0ub3V0LnByaW50bG4oIlZJSidzIFNFUlZFUiBTSURFIFRFU1QgSEFORExFUiBDQUxMRUQiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlZJSidzIFNFUlZFUiBTSURFIFRFU1QgSEFORExFUiBDQUxMRUQiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gaGFuZGxlRmF1bHQoU09BUE1lc3NhZ2VDb250ZXh0IGNvbnRleHQpIHsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHt9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBjbG9zZShNZXNzYWdlQ29udGV4dCBjb250ZXh0KSB7fQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NsaWVudC1oYW5kbGVyLTIvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMi93ZWIueG1sCmluZGV4IDQzNDI0MzQuLjRhMWIyODMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMi93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMi93ZWIueG1sCkBAIC0xOCwyOSArMTgsMjkgQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKLQkJCWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgorICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKKyAgICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogCi0JPGRlc2NyaXB0aW9uPlN1YnRyYWN0TnVtYmVycyBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICA8ZGVzY3JpcHRpb24+U3VidHJhY3ROdW1iZXJzIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgogCi0JPHNlcnZsZXQ+Ci0JCTxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgU3VidHJhY3ROdW1iZXJzIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQkJPGRpc3BsYXktbmFtZT5TdWJ0cmFjdE51bWJlcnNXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+Ci0JCTxzZXJ2bGV0LW5hbWU+U3VidHJhY3ROdW1iZXJzU2VydmljZTwvc2VydmxldC1uYW1lPgotCQk8c2VydmxldC1jbGFzcz5lbmRwb2ludC5TdWJ0cmFjdE51bWJlcnNJbXBsPC9zZXJ2bGV0LWNsYXNzPgotCQk8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KLQk8L3NlcnZsZXQ+CisgICAgPHNlcnZsZXQ+CisgICAgICAgIDxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgU3VidHJhY3ROdW1iZXJzIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgPGRpc3BsYXktbmFtZT5TdWJ0cmFjdE51bWJlcnNXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+U3VidHJhY3ROdW1iZXJzU2VydmljZTwvc2VydmxldC1uYW1lPgorICAgICAgICA8c2VydmxldC1jbGFzcz5lbmRwb2ludC5TdWJ0cmFjdE51bWJlcnNJbXBsPC9zZXJ2bGV0LWNsYXNzPgorICAgICAgICA8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KKyAgICA8L3NlcnZsZXQ+CiAKLQk8c2VydmxldC1tYXBwaW5nPgotCQk8c2VydmxldC1uYW1lPlN1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3NlcnZsZXQtbmFtZT4KLQkJPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL1N1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3VybC1wYXR0ZXJuPgotCTwvc2VydmxldC1tYXBwaW5nPgorICAgIDxzZXJ2bGV0LW1hcHBpbmc+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+U3VidHJhY3ROdW1iZXJzU2VydmljZTwvc2VydmxldC1uYW1lPgorICAgICAgICA8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvU3VidHJhY3ROdW1iZXJzU2VydmljZTwvdXJsLXBhdHRlcm4+CisgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiAKLQk8c2Vzc2lvbi1jb25maWc+Ci0JCTxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KLQk8L3Nlc3Npb24tY29uZmlnPgorICAgIDxzZXNzaW9uLWNvbmZpZz4KKyAgICAgICAgPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgorICAgIDwvc2Vzc2lvbi1jb25maWc+CiAKIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0yL3dlYmNsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMi93ZWJjbGllbnQvQ2xpZW50LmphdmEKaW5kZXggZDAxZWE0NS4uYjRmNjNiZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0yL3dlYmNsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NsaWVudC1oYW5kbGVyLTIvd2ViY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yOCw4ICsyOCw4IEBACiAgICAgICAgIEBqYWthcnRhLmp3cy5IYW5kbGVyQ2hhaW4obmFtZT0ic29tZSBuYW1lIiwgZmlsZT0ibXloYW5kbGVyLnhtbCIpCiAgICAgICAgIEBXZWJTZXJ2aWNlUmVmIFN1YnRyYWN0TnVtYmVyc1NlcnZpY2Ugc2VydmljZTsKIAotICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkgCi0JCXRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CisgICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQorICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICAgICBkb1Bvc3QocmVxLCByZXNwKTsKICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMi93ZWJjbGllbnQvVGVzdEhhbmRsZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY2xpZW50LWhhbmRsZXItMi93ZWJjbGllbnQvVGVzdEhhbmRsZXIuamF2YQppbmRleCA0YTZhZDVmLi40ODQwZGU1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NsaWVudC1oYW5kbGVyLTIvd2ViY2xpZW50L1Rlc3RIYW5kbGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jbGllbnQtaGFuZGxlci0yL3dlYmNsaWVudC9UZXN0SGFuZGxlci5qYXZhCkBAIC0yNiwxNyArMjYsMTcgQEAKIGltcG9ydCBqYWthcnRhLnhtbC5zb2FwLio7CiAKIHB1YmxpYyBjbGFzcyBUZXN0SGFuZGxlciBpbXBsZW1lbnRzIFNPQVBIYW5kbGVyPFNPQVBNZXNzYWdlQ29udGV4dD4gewotICAgIAorCiAgICAgcHVibGljIFNldDxRTmFtZT4gZ2V0SGVhZGVycygpIHsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gaGFuZGxlTWVzc2FnZShTT0FQTWVzc2FnZUNvbnRleHQgY29udGV4dCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgU09BUE1lc3NhZ2VDb250ZXh0IHNtYyA9IChTT0FQTWVzc2FnZUNvbnRleHQpIGNvbnRleHQ7CiAgICAgICAgICAgICBTT0FQTWVzc2FnZSBtZXNzYWdlID0gc21jLmdldE1lc3NhZ2UoKTsKICAgICAgICAgICAgIFNPQVBCb2R5IGJvZHkgPSBtZXNzYWdlLmdldFNPQVBCb2R5KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU09BUEVsZW1lbnQgcGFyYW1FbGVtZW50ID0KICAgICAgICAgICAgICAgICAoU09BUEVsZW1lbnQpIGJvZHkuZ2V0Rmlyc3RDaGlsZCgpLmdldEZpcnN0Q2hpbGQoKTsKICAgICAgICAgICAgIGludCBudW1iZXIgPSBJbnRlZ2VyLnBhcnNlSW50KHBhcmFtRWxlbWVudC5nZXRWYWx1ZSgpKTsKQEAgLTQ0LDE2ICs0NCwxNiBAQAogICAgICAgICB9IGNhdGNoIChTT0FQRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLQlTeXN0ZW0ub3V0LnByaW50bG4oIlZJSidzIENMSUVOVCBTSURFIFRFU1QgSEFORExFUiBDQUxMRUQiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlZJSidzIENMSUVOVCBTSURFIFRFU1QgSEFORExFUiBDQUxMRUQiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gaGFuZGxlRmF1bHQoU09BUE1lc3NhZ2VDb250ZXh0IGNvbnRleHQpIHsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHt9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBjbG9zZShNZXNzYWdlQ29udGV4dCBjb250ZXh0KSB7fQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NvbnRhaW5lcnJlc29sdmVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY29udGFpbmVycmVzb2x2ZXIvYnVpbGQueG1sCmluZGV4IDdjM2ZhODYuLjE4ZDA5NmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY29udGFpbmVycmVzb2x2ZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY29udGFpbmVycmVzb2x2ZXIvYnVpbGQueG1sCkBAIC0yMSwxMiArMjEsMTIgQEAKIF0+CiA8cHJvamVjdCBuYW1lPSJzZXJ2bGV0IGVuZHBvaW50IGFubm90YXRpb25zIiBkZWZhdWx0PSJhbGwiIGJhc2VkaXI9Ii4iPgogICAgIDx0YXJnZXQgbmFtZT0iYWxsIj4KLQk8YW50IGRpcj0ic3ZjMSIgdGFyZ2V0PSJzZXR1cCIvPgotCTxhbnQgZGlyPSJzdmMyIiB0YXJnZXQ9InNldHVwIi8+Ci0JPGFudCBkaXI9ImNsaWVudCIgdGFyZ2V0PSJzZXR1cCIvPgotCTxhbnQgZGlyPSJjbGllbnQiIHRhcmdldD0icnVudGVzdCIvPgotCTxhbnQgZGlyPSJzdmMxIiB0YXJnZXQ9ImNsZWFudXAiLz4KLQk8YW50IGRpcj0ic3ZjMiIgdGFyZ2V0PSJjbGVhbnVwIi8+Ci0JPGFudCBkaXI9ImNsaWVudCIgdGFyZ2V0PSJjbGVhbnVwIi8+CisgICAgPGFudCBkaXI9InN2YzEiIHRhcmdldD0ic2V0dXAiLz4KKyAgICA8YW50IGRpcj0ic3ZjMiIgdGFyZ2V0PSJzZXR1cCIvPgorICAgIDxhbnQgZGlyPSJjbGllbnQiIHRhcmdldD0ic2V0dXAiLz4KKyAgICA8YW50IGRpcj0iY2xpZW50IiB0YXJnZXQ9InJ1bnRlc3QiLz4KKyAgICA8YW50IGRpcj0ic3ZjMSIgdGFyZ2V0PSJjbGVhbnVwIi8+CisgICAgPGFudCBkaXI9InN2YzIiIHRhcmdldD0iY2xlYW51cCIvPgorICAgIDxhbnQgZGlyPSJjbGllbnQiIHRhcmdldD0iY2xlYW51cCIvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jb250YWluZXJyZXNvbHZlci9jbGllbnQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY29udGFpbmVycmVzb2x2ZXIvY2xpZW50L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMmQ1OTUyZS4uYjFhZWNkYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jb250YWluZXJyZXNvbHZlci9jbGllbnQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NvbnRhaW5lcnJlc29sdmVyL2NsaWVudC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNvbnRhaW5lcnJlc29sdmVyLWNsaWVudCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iLi93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSIuL3N1bi13ZWIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NvbnRhaW5lcnJlc29sdmVyL2NsaWVudC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NvbnRhaW5lcnJlc29sdmVyL2NsaWVudC9idWlsZC54bWwKaW5kZXggOTAxMzM1Yi4uMzIzYzAwZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jb250YWluZXJyZXNvbHZlci9jbGllbnQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY29udGFpbmVycmVzb2x2ZXIvY2xpZW50L2J1aWxkLnhtbApAQCAtNjgsNyArNjgsNyBAQAogICAgICAgPHJlcGxhY2UgZmlsZT0id2ViY2xpZW50L0NsaWVudC5qYXZhIiB2YWx1ZT0iJHtodHRwLmhvc3R9IiB0b2tlbj0iSFRUUF9IT1NUIi8+CiAgICAgICA8cmVwbGFjZSBmaWxlPSJ3ZWJjbGllbnQvQ2xpZW50LmphdmEiIHZhbHVlPSIke2h0dHAucG9ydH0iIHRva2VuPSJIVFRQX1BPUlQiLz4KICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL2NsYXNzZXMiCi0gICAgICAgICAgICAgCisKICAgICAgICAgICAgIGluY2x1ZGVzPSJ3ZWJjbGllbnQvKioiPgogICAgICAgIDxjbGFzc3BhdGggcmVmaWQ9ImNsYXNzcGF0aCIvPgogICAgICAgPC9qYXZhYz4KQEAgLTEwMyw4ICsxMDMsOCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJydW50ZXN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KLSAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIgCi0gICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiAKKyAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iY2xpZW50LyoqIi8+CiAgICAgICA8dW5qYXIgc3JjPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgZGVzdD0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+CiAgICAgICA8amF2YSBjbGFzc25hbWU9ImNsaWVudC5UZXN0Q2xpZW50Ij4KQEAgLTExNSw3ICsxMTUsNyBAQAogICAgICAgPC9qYXZhPgogCiAKLTwhLS1yZXN0b3JlIHRoZSB0b2tlbnMgYmFjayBpbiBmaWxlLS0+IAorPCEtLXJlc3RvcmUgdGhlIHRva2VucyBiYWNrIGluIGZpbGUtLT4KICAgICAgICAgIDxyZXBsYWNlIGZpbGU9IndlYmNsaWVudC9DbGllbnQuamF2YSIgdG9rZW49IiR7aHR0cC5ob3N0fSIgdmFsdWU9IkhUVFBfSE9TVCIvPgogICAgICAgICAgPHJlcGxhY2UgZmlsZT0id2ViY2xpZW50L0NsaWVudC5qYXZhIiB0b2tlbj0iJHtodHRwLnBvcnR9IiB2YWx1ZT0iSFRUUF9QT1JUIi8+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NvbnRhaW5lcnJlc29sdmVyL2NsaWVudC9jbGllbnQtd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY29udGFpbmVycmVzb2x2ZXIvY2xpZW50L2NsaWVudC13ZWIueG1sCmluZGV4IDAyN2RmY2UuLmI0YmJmNWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY29udGFpbmVycmVzb2x2ZXIvY2xpZW50L2NsaWVudC13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY29udGFpbmVycmVzb2x2ZXIvY2xpZW50L2NsaWVudC13ZWIueG1sCkBAIC0yMCw3ICsyMCw3IEBACiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgCisgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAgIDxkZXNjcmlwdGlvbj5BIHRlc3QgYXBwbGljYXRpb248L2Rlc2NyaXB0aW9uPgogICA8ZGlzcGxheS1uYW1lPldlYlRpZXI8L2Rpc3BsYXktbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY29udGFpbmVycmVzb2x2ZXIvY2xpZW50L2NsaWVudC9UZXN0Q2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NvbnRhaW5lcnJlc29sdmVyL2NsaWVudC9jbGllbnQvVGVzdENsaWVudC5qYXZhCmluZGV4IDY3YTBjNDUuLjZkZWVjM2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY29udGFpbmVycmVzb2x2ZXIvY2xpZW50L2NsaWVudC9UZXN0Q2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jb250YWluZXJyZXNvbHZlci9jbGllbnQvY2xpZW50L1Rlc3RDbGllbnQuamF2YQpAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgaW50IGNvZGUgPSBpbnZva2VTZXJ2bGV0KHVybCk7CiAgICAgICAgICAgICByZXBvcnQoY29kZSk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgfQpAQCAtNjMsMTEgKzYzLDExIEBACiAgICAgICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgICAgICAgIGxvZyhsaW5lKTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiU28gdGhlIFJFU1VMVCBPRiBTRVJWSUNFIElTIikgIT0gLTEpCi0JCWZvdW5kMSA9IHRydWU7CisgICAgICAgIGZvdW5kMSA9IHRydWU7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIltXZWJTdmNUZXN0LUhlbGxvMiBIaV0iKSAhPSAtMSkKLQkJZm91bmQyID0gdHJ1ZTsKKyAgICAgICAgZm91bmQyID0gdHJ1ZTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiW1dlYlN2Y1Rlc3QtSGVsbG8xIEhpXSIpICE9IC0xKQotCQlmb3VuZDIgPSB0cnVlOworICAgICAgICBmb3VuZDIgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjb2RlOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY29udGFpbmVycmVzb2x2ZXIvY2xpZW50L3dlYmNsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY29udGFpbmVycmVzb2x2ZXIvY2xpZW50L3dlYmNsaWVudC9DbGllbnQuamF2YQppbmRleCBmMDZjMTFjLi43YTA1ZDNhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NvbnRhaW5lcnJlc29sdmVyL2NsaWVudC93ZWJjbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jb250YWluZXJyZXNvbHZlci9jbGllbnQvd2ViY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMSw4ICszMSw4IEBACiAgICAgICAgQFdlYlNlcnZpY2VSZWYod3NkbExvY2F0aW9uPSJodHRwOi8vSFRUUF9IT1NUOkhUVFBfUE9SVC9jb250YWluZXJyZXNvbHZlci1hcHAxL0hlbGxvMVNlcnZpY2U/d3NkbCIpIEhlbGxvMVNlcnZpY2Ugc2VydmljZTE7CiAgICAgICAgQFdlYlNlcnZpY2VSZWYod3NkbExvY2F0aW9uPSJodHRwOi8vSFRUUF9IT1NUOkhUVFBfUE9SVC9jb250YWluZXJyZXNvbHZlci1hcHAyL0hlbGxvMlNlcnZpY2U/d3NkbCIpIEhlbGxvMlNlcnZpY2Ugc2VydmljZTI7CiAKLSAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApIAotCQl0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24geworICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkKKyAgICAgICAgdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgICAgZG9Qb3N0KHJlcSwgcmVzcCk7CiAgICAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NvbnRhaW5lcnJlc29sdmVyL3N2YzEvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY29udGFpbmVycmVzb2x2ZXIvc3ZjMS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGJmMDI2NTQuLmQyZGE0MjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY29udGFpbmVycmVzb2x2ZXIvc3ZjMS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY29udGFpbmVycmVzb2x2ZXIvc3ZjMS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw4ICsxNSw4IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjb250YWluZXJyZXNvbHZlci1hcHAxIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jb250YWluZXJyZXNvbHZlci9zdmMxL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY29udGFpbmVycmVzb2x2ZXIvc3ZjMS9idWlsZC54bWwKaW5kZXggNmVlZTU5NS4uZmFhZTEyOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jb250YWluZXJyZXNvbHZlci9zdmMxL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NvbnRhaW5lcnJlc29sdmVyL3N2YzEvYnVpbGQueG1sCkBAIC02NSw2ICs2NSw2IEBACiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogPC9wcm9qZWN0PgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NvbnRhaW5lcnJlc29sdmVyL3N2YzEvZW5kcG9pbnQxL0hlbGxvMS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jb250YWluZXJyZXNvbHZlci9zdmMxL2VuZHBvaW50MS9IZWxsbzEuamF2YQppbmRleCA2OTFjMzk4Li40YTQ2NGYxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NvbnRhaW5lcnJlc29sdmVyL3N2YzEvZW5kcG9pbnQxL0hlbGxvMS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY29udGFpbmVycmVzb2x2ZXIvc3ZjMS9lbmRwb2ludDEvSGVsbG8xLmphdmEKQEAgLTI1LDEwICsyNSwxMCBAQAogICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2V4YW1wbGUuY29tL0hlbGxvMSIKICkKIHB1YmxpYyBjbGFzcyBIZWxsbzEgewotCXB1YmxpYyBIZWxsbzEoKSB7fQorICAgIHB1YmxpYyBIZWxsbzEoKSB7fQogCi0JQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJzYXlIZWxsbzEiLCBhY3Rpb249InVybjpTYXlIZWxsbzEiKQotCXB1YmxpYyBTdHJpbmcgc2F5SGVsbG8xKFN0cmluZyB3aG8pIHsKLQkJcmV0dXJuICJXZWJTdmNUZXN0LUhlbGxvMSAiICsgd2hvOwotCX0KKyAgICBAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9InNheUhlbGxvMSIsIGFjdGlvbj0idXJuOlNheUhlbGxvMSIpCisgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbzEoU3RyaW5nIHdobykgeworICAgICAgICByZXR1cm4gIldlYlN2Y1Rlc3QtSGVsbG8xICIgKyB3aG87CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jb250YWluZXJyZXNvbHZlci9zdmMyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NvbnRhaW5lcnJlc29sdmVyL3N2YzIvYnVpbGQucHJvcGVydGllcwppbmRleCBlM2IyODA5Li4zY2U3MTI3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NvbnRhaW5lcnJlc29sdmVyL3N2YzIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NvbnRhaW5lcnJlc29sdmVyL3N2YzIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsOCArMTUsOCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY29udGFpbmVycmVzb2x2ZXItYXBwMiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY29udGFpbmVycmVzb2x2ZXIvc3ZjMi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NvbnRhaW5lcnJlc29sdmVyL3N2YzIvYnVpbGQueG1sCmluZGV4IDEwODFkYjQuLmJhYTZkNWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY29udGFpbmVycmVzb2x2ZXIvc3ZjMi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jb250YWluZXJyZXNvbHZlci9zdmMyL2J1aWxkLnhtbApAQCAtNjUsNiArNjUsNiBAQAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKIDwvcHJvamVjdD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jb250YWluZXJyZXNvbHZlci9zdmMyL2VuZHBvaW50Mi9IZWxsbzIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvY29udGFpbmVycmVzb2x2ZXIvc3ZjMi9lbmRwb2ludDIvSGVsbG8yLmphdmEKaW5kZXggYzMyZmU3ZC4uMjU5MzEzMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9jb250YWluZXJyZXNvbHZlci9zdmMyL2VuZHBvaW50Mi9IZWxsbzIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2NvbnRhaW5lcnJlc29sdmVyL3N2YzIvZW5kcG9pbnQyL0hlbGxvMi5qYXZhCkBAIC0yNSwxMCArMjUsMTAgQEAKICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9leGFtcGxlLmNvbS9IZWxsbzIiCiApCiBwdWJsaWMgY2xhc3MgSGVsbG8yIHsKLQlwdWJsaWMgSGVsbG8yKCkge30KKyAgICBwdWJsaWMgSGVsbG8yKCkge30KIAotCUBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0ic2F5SGVsbG8yIiwgYWN0aW9uPSJ1cm46U2F5SGVsbG8yIikKLQlwdWJsaWMgU3RyaW5nIHNheUhlbGxvMihTdHJpbmcgd2hvKSB7Ci0JCXJldHVybiAiV2ViU3ZjVGVzdC1IZWxsbzIgIiArIHdobzsKLQl9CisgICAgQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJzYXlIZWxsbzIiLCBhY3Rpb249InVybjpTYXlIZWxsbzIiKQorICAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8yKFN0cmluZyB3aG8pIHsKKyAgICAgICAgcmV0dXJuICJXZWJTdmNUZXN0LUhlbGxvMiAiICsgd2hvOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZG9sLW92ZXJyaWRlLTEvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZG9sLW92ZXJyaWRlLTEvYnVpbGQucHJvcGVydGllcwppbmRleCA0NTY3YWI5Li45NDY2NTg3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2RvbC1vdmVycmlkZS0xL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9kb2wtb3ZlcnJpZGUtMS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImRvbC1vdmVycmlkZS0xIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSIuL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9Ii4vc3VuLXdlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZG9sLW92ZXJyaWRlLTEvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9kb2wtb3ZlcnJpZGUtMS9idWlsZC54bWwKaW5kZXggOGY5NjQ1NC4uNGI5OWUxZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9kb2wtb3ZlcnJpZGUtMS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9kb2wtb3ZlcnJpZGUtMS9idWlsZC54bWwKQEAgLTY2LDcgKzY2LDcgQEAKICAgICAgICAgICB2YWx1ZT0iLXdzZGxsb2NhdGlvbiBXRUItSU5GL3dzZGwvU3VidHJhY3ROdW1iZXJzLndzZGwgLWIgY3VzdG9tLXNlcnZlci54bWwgLWtlZXAgLWQgJHtidWlsZC5jbGFzc2VzLmRpcn0gJHtlbnYuQVBTX0hPTUV9L2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZG9sLW92ZXJyaWRlLTEvU3VidHJhY3ROdW1iZXJzLndzZGwiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZSIvPgotICAgICA8Y29weSBmaWxlPSJTdWJ0cmFjdE51bWJlcnMud3NkbCIgdG9kaXI9IiR7ZW52LkFQU19IT01FfS9idWlsZC9sb2NhbHdzZGwiLz4gCisgICAgIDxjb3B5IGZpbGU9IlN1YnRyYWN0TnVtYmVycy53c2RsIiB0b2Rpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL2xvY2Fsd3NkbCIvPgogICAgICAgPGNvcHkgZmlsZT0ic3VuLXdlYi54bWwudGVtcGxhdGUiIHRvZmlsZT0ic3VuLXdlYi54bWwiLz4KICAgICAgIDxyZXBsYWNlIGZpbGU9InN1bi13ZWIueG1sIj4KICAgICAgICAgPHJlcGxhY2VmaWx0ZXIgdG9rZW49IiVUT0tFTiUiIHZhbHVlPSJmaWxlOiR7ZW52LkFQU19IT01FfS9idWlsZC9sb2NhbHdzZGwiLz4KQEAgLTEzNywxMSArMTM3LDExIEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNsaWVudCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW50ZXN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KLSAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIgCi0gICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiAKKyAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iY2xpZW50LyoqIi8+CiAgICAgICA8dW5qYXIgc3JjPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgZGVzdD0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+CiAgICAgICA8amF2YSBjbGFzc25hbWU9ImNsaWVudC5UZXN0Q2xpZW50Ij4KQEAgLTE1MSw3ICsxNTEsNyBAQAogICAgICAgICA8YXJnIHZhbHVlPSJodHRwOi8vJHtodHRwLmhvc3R9OiR7aHR0cC5wb3J0fS93c2NsaWVudC9SZXF1ZXN0UHJvY2Vzc29yIi8+CiAgICAgICA8L2phdmE+CiAKLSAgICAgICAgICA8IS0tcmVzdG9yZSB0aGUgdG9rZW5zIGJhY2sgaW4gZmlsZS0tPiAKKyAgICAgICAgICA8IS0tcmVzdG9yZSB0aGUgdG9rZW5zIGJhY2sgaW4gZmlsZS0tPgogICAgICAgICAgPHJlcGxhY2UgZmlsZT0id2ViY2xpZW50L0NsaWVudC5qYXZhIiB0b2tlbj0iJHtodHRwLmhvc3R9IiB2YWx1ZT0iSFRUUF9IT1NUIi8+CiAgICAgICAgICA8cmVwbGFjZSBmaWxlPSJ3ZWJjbGllbnQvQ2xpZW50LmphdmEiIHRva2VuPSIke2h0dHAucG9ydH0iIHZhbHVlPSJIVFRQX1BPUlQiLz4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZG9sLW92ZXJyaWRlLTEvY2xpZW50LXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2RvbC1vdmVycmlkZS0xL2NsaWVudC13ZWIueG1sCmluZGV4IDAyN2RmY2UuLmI0YmJmNWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZG9sLW92ZXJyaWRlLTEvY2xpZW50LXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9kb2wtb3ZlcnJpZGUtMS9jbGllbnQtd2ViLnhtbApAQCAtMjAsNyArMjAsNyBAQAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLSAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIAorICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogICA8ZGVzY3JpcHRpb24+QSB0ZXN0IGFwcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KICAgPGRpc3BsYXktbmFtZT5XZWJUaWVyPC9kaXNwbGF5LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2RvbC1vdmVycmlkZS0xL2NsaWVudC9UZXN0Q2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2RvbC1vdmVycmlkZS0xL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKaW5kZXggZTBlOTNkMC4uNWIxODFiNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9kb2wtb3ZlcnJpZGUtMS9jbGllbnQvVGVzdENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZG9sLW92ZXJyaWRlLTEvY2xpZW50L1Rlc3RDbGllbnQuamF2YQpAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgaW50IGNvZGUgPSBpbnZva2VTZXJ2bGV0KHVybCk7CiAgICAgICAgICAgICByZXBvcnQoY29kZSk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgfQpAQCAtNjMsOSArNjMsOSBAQAogICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICBsb2cobGluZSk7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIlNvIHRoZSBSRVNVTFQgT0YgU1VCVFJBQ1QgU0VSVklDRSBJUyIpICE9IC0xKQotCQlmb3VuZDEgPSB0cnVlOworICAgICAgICBmb3VuZDEgPSB0cnVlOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJbMTExMV0iKSAhPSAtMSkKLQkJZm91bmQyID0gdHJ1ZTsKKyAgICAgICAgZm91bmQyID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY29kZTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2RvbC1vdmVycmlkZS0xL2N1c3RvbS1jbGllbnQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9kb2wtb3ZlcnJpZGUtMS9jdXN0b20tY2xpZW50LnhtbAppbmRleCA4MzlmY2IxLi40OGYxNzE2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2RvbC1vdmVycmlkZS0xL2N1c3RvbS1jbGllbnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZG9sLW92ZXJyaWRlLTEvY3VzdG9tLWNsaWVudC54bWwKQEAgLTE3LDEyICsxNywxMiBAQAogCiAtLT4KIAotPGJpbmRpbmdzIAorPGJpbmRpbmdzCiAgICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKICAgICB4bWxuczpqYXhiPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXhiIgogICAgIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgogICAgIHdzZGxMb2NhdGlvbj0iU3VidHJhY3ROdW1iZXJzLndzZGwiCi0gICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheHdzIj4gICAgCisgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheHdzIj4KICAgICA8YmluZGluZ3Mgbm9kZT0ibnMxOmRlZmluaXRpb25zIiB4bWxuczpuczE9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KICAgICAgICAgPHBhY2thZ2UgbmFtZT0iY2xpZW50Ii8+CiAgICAgPC9iaW5kaW5ncz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZG9sLW92ZXJyaWRlLTEvY3VzdG9tLXNlcnZlci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2RvbC1vdmVycmlkZS0xL2N1c3RvbS1zZXJ2ZXIueG1sCmluZGV4IDE3MGQ2NjcuLjA5ODgxMjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZG9sLW92ZXJyaWRlLTEvY3VzdG9tLXNlcnZlci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9kb2wtb3ZlcnJpZGUtMS9jdXN0b20tc2VydmVyLnhtbApAQCAtMTcsNyArMTcsNyBAQAogCiAtLT4KIAotPGJpbmRpbmdzIAorPGJpbmRpbmdzCiAgICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKICAgICB4bWxuczpqYXhiPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXhiIgogICAgIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9kb2wtb3ZlcnJpZGUtMS9lbmRwb2ludC9TdWJ0cmFjdE51bWJlcnNJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2RvbC1vdmVycmlkZS0xL2VuZHBvaW50L1N1YnRyYWN0TnVtYmVyc0ltcGwuamF2YQppbmRleCBkYzhhMjMwLi45YTlmZGZjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2RvbC1vdmVycmlkZS0xL2VuZHBvaW50L1N1YnRyYWN0TnVtYmVyc0ltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2RvbC1vdmVycmlkZS0xL2VuZHBvaW50L1N1YnRyYWN0TnVtYmVyc0ltcGwuamF2YQpAQCAtMTgsNyArMTgsNyBAQAogCiBAamFrYXJ0YS5qd3MuV2ViU2VydmljZSAoc2VydmljZU5hbWU9Imp1bmtqdW5ranVuayIsIHBvcnROYW1lPSJTdWJ0cmFjdE51bWJlcnNQb3J0VHlwZSIsIGVuZHBvaW50SW50ZXJmYWNlPSJlbmRwb2ludC5TdWJ0cmFjdE51bWJlcnNQb3J0VHlwZSIpCiBwdWJsaWMgY2xhc3MgU3VidHJhY3ROdW1iZXJzSW1wbCBpbXBsZW1lbnRzIFN1YnRyYWN0TnVtYmVyc1BvcnRUeXBlIHsKLSAgICAKKwogICAgIHB1YmxpYyBpbnQgc3VidHJhY3ROdW1iZXJzIChpbnQgbnVtYmVyMSwgaW50IG51bWJlcjIpIHsKICAgICAgICAgcmV0dXJuIG51bWJlcjEgLSBudW1iZXIyOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZG9sLW92ZXJyaWRlLTEvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZG9sLW92ZXJyaWRlLTEvd2ViLnhtbAppbmRleCA0MzQyNDM0Li40YTFiMjgzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2RvbC1vdmVycmlkZS0xL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9kb2wtb3ZlcnJpZGUtMS93ZWIueG1sCkBAIC0xOCwyOSArMTgsMjkgQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKLQkJCWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgorICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKKyAgICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogCi0JPGRlc2NyaXB0aW9uPlN1YnRyYWN0TnVtYmVycyBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICA8ZGVzY3JpcHRpb24+U3VidHJhY3ROdW1iZXJzIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgogCi0JPHNlcnZsZXQ+Ci0JCTxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgU3VidHJhY3ROdW1iZXJzIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQkJPGRpc3BsYXktbmFtZT5TdWJ0cmFjdE51bWJlcnNXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+Ci0JCTxzZXJ2bGV0LW5hbWU+U3VidHJhY3ROdW1iZXJzU2VydmljZTwvc2VydmxldC1uYW1lPgotCQk8c2VydmxldC1jbGFzcz5lbmRwb2ludC5TdWJ0cmFjdE51bWJlcnNJbXBsPC9zZXJ2bGV0LWNsYXNzPgotCQk8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KLQk8L3NlcnZsZXQ+CisgICAgPHNlcnZsZXQ+CisgICAgICAgIDxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgU3VidHJhY3ROdW1iZXJzIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgPGRpc3BsYXktbmFtZT5TdWJ0cmFjdE51bWJlcnNXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+U3VidHJhY3ROdW1iZXJzU2VydmljZTwvc2VydmxldC1uYW1lPgorICAgICAgICA8c2VydmxldC1jbGFzcz5lbmRwb2ludC5TdWJ0cmFjdE51bWJlcnNJbXBsPC9zZXJ2bGV0LWNsYXNzPgorICAgICAgICA8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KKyAgICA8L3NlcnZsZXQ+CiAKLQk8c2VydmxldC1tYXBwaW5nPgotCQk8c2VydmxldC1uYW1lPlN1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3NlcnZsZXQtbmFtZT4KLQkJPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL1N1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3VybC1wYXR0ZXJuPgotCTwvc2VydmxldC1tYXBwaW5nPgorICAgIDxzZXJ2bGV0LW1hcHBpbmc+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+U3VidHJhY3ROdW1iZXJzU2VydmljZTwvc2VydmxldC1uYW1lPgorICAgICAgICA8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvU3VidHJhY3ROdW1iZXJzU2VydmljZTwvdXJsLXBhdHRlcm4+CisgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiAKLQk8c2Vzc2lvbi1jb25maWc+Ci0JCTxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KLQk8L3Nlc3Npb24tY29uZmlnPgorICAgIDxzZXNzaW9uLWNvbmZpZz4KKyAgICAgICAgPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgorICAgIDwvc2Vzc2lvbi1jb25maWc+CiAKIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9kb2wtb3ZlcnJpZGUtMS93ZWJjbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2RvbC1vdmVycmlkZS0xL3dlYmNsaWVudC9DbGllbnQuamF2YQppbmRleCBjOGMxNTBkLi4wNWJjOTJiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2RvbC1vdmVycmlkZS0xL3dlYmNsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2RvbC1vdmVycmlkZS0xL3dlYmNsaWVudC9DbGllbnQuamF2YQpAQCAtMjcsOCArMjcsOCBAQAogCiAgICAgICAgIEBXZWJTZXJ2aWNlUmVmIFN1YnRyYWN0TnVtYmVyc1NlcnZpY2Ugc2VydmljZTsKIAotICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkgCi0JCXRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CisgICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQorICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICAgICBkb1Bvc3QocmVxLCByZXNwKTsKICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZW5kcG9pbnRhZGRyZXNzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2VuZHBvaW50YWRkcmVzcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGY1NWE1M2YuLmQyNjEwNDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZW5kcG9pbnRhZGRyZXNzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9lbmRwb2ludGFkZHJlc3MvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsOSArMTUsOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZW5kcG9pbnRhZGRyZXNzIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSIuL3dlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZW5kcG9pbnRhZGRyZXNzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZW5kcG9pbnRhZGRyZXNzL2J1aWxkLnhtbAppbmRleCBkY2ViN2M4Li4zMmE3MDRhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2VuZHBvaW50YWRkcmVzcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9lbmRwb2ludGFkZHJlc3MvYnVpbGQueG1sCkBAIC03NSw3ICs3NSw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgPHRhcmdldCBuYW1lPSJydW5jbGllbnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgogICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9lbmRwb2ludGFkZHJlc3MvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9lbmRwb2ludGFkZHJlc3MvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDMyNjg1MjYuLmI4OTA3MDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZW5kcG9pbnRhZGRyZXNzL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2VuZHBvaW50YWRkcmVzcy9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTMwLDEwICszMCwxMCBAQAogCiAKICAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCSAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJlbmRwb2ludGFkZHJlc3MiKTsKKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiZW5kcG9pbnRhZGRyZXNzIik7CiAgICAgICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAgICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzKTsKLQkgICAgc3RhdC5wcmludFN1bW1hcnkoImVuZHBvaW50YWRkcmVzcyIpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiZW5kcG9pbnRhZGRyZXNzIik7CiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTQxLDE3ICs0MSwxNyBAQAogCiAgICAgICAgICAgICAgICAgVVJMIHNlcnZpY2VJbmZvID0gbmV3IFVSTCAoYXJnc1swXSk7CiAgICAgICAgICAgICAgICAgVVJMQ29ubmVjdGlvbiBjb24gPSBzZXJ2aWNlSW5mby5vcGVuQ29ubmVjdGlvbigpOwotICAgICAgICAgICAgICAgQnVmZmVyZWRSZWFkZXIgaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGNvbi5nZXRJbnB1dFN0cmVhbSgpKSk7IAorICAgICAgICAgICAgICAgQnVmZmVyZWRSZWFkZXIgaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGNvbi5nZXRJbnB1dFN0cmVhbSgpKSk7CiAKICAgICAgICAgICAgICAgICBTdHJpbmcgaW5wdXRMaW5lOwotICAgICAgICAgICAgICAgIGludCBpbmRleD0wOyAKKyAgICAgICAgICAgICAgICBpbnQgaW5kZXg9MDsKICAgICAgICAgICAgICAgICB3aGlsZSAoKGlucHV0TGluZSA9IGluLnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoKGluZGV4PSBpbnB1dExpbmUuaW5kZXhPZigiaHJlZj0iKSk+MCl7CiAKLSAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdXJsID0gaW5wdXRMaW5lLnN1YnN0cmluZyhpbmRleCsxKTsgIAorICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyB1cmwgPSBpbnB1dExpbmUuc3Vic3RyaW5nKGluZGV4KzEpOwogICAgICAgICAgICAgICAgICAgICAgIGlmICh1cmwuaW5kZXhPZigiaHR0cDoiKT4wKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVuZHBvaW50YWRkcmVzcyIsIHN0YXQuUEFTUyk7Ci0gICAgICAgICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGlucHV0TGluZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZW5kcG9pbnRhZGRyZXNzL2VuZHBvaW50L0hlbGxvLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2VuZHBvaW50YWRkcmVzcy9lbmRwb2ludC9IZWxsby5qYXZhCmluZGV4IGM1NzI3YjIuLjE0YjZlMGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZW5kcG9pbnRhZGRyZXNzL2VuZHBvaW50L0hlbGxvLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9lbmRwb2ludGFkZHJlc3MvZW5kcG9pbnQvSGVsbG8uamF2YQpAQCAtMjUsMTAgKzI1LDEwIEBACiAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZXhhbXBsZS5jb20vSGVsbG8iCiApCiBwdWJsaWMgY2xhc3MgSGVsbG8gewotCXB1YmxpYyBIZWxsbygpIHt9CisgICAgcHVibGljIEhlbGxvKCkge30KIAotCUBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0ic2F5SGVsbG8iLCBhY3Rpb249InVybjpTYXlIZWxsbyIpCi0JcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgd2hvKSB7Ci0JCXJldHVybiAiV2ViU3ZjVGVzdC1IZWxsbyAiICsgd2hvOwotCX0KKyAgICBAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9InNheUhlbGxvIiwgYWN0aW9uPSJ1cm46U2F5SGVsbG8iKQorICAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIHdobykgeworICAgICAgICByZXR1cm4gIldlYlN2Y1Rlc3QtSGVsbG8gIiArIHdobzsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2VuZHBvaW50YWRkcmVzcy93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9lbmRwb2ludGFkZHJlc3Mvd2ViLnhtbAppbmRleCBmNTFjY2MwLi41NjRjZDRmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2VuZHBvaW50YWRkcmVzcy93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZW5kcG9pbnRhZGRyZXNzL3dlYi54bWwKQEAgLTE4LDMwICsxOCwzMCBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotCQkJaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CisgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQorICAgICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAKLQk8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIEhlbGxvIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCTxkaXNwbGF5LW5hbWU+SGVsbG9XQVI8L2Rpc3BsYXktbmFtZT4KKyAgICA8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIEhlbGxvIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgIDxkaXNwbGF5LW5hbWU+SGVsbG9XQVI8L2Rpc3BsYXktbmFtZT4KIAotCTxzZXJ2bGV0PgotCQk8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIEhlbGxvIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQkJPGRpc3BsYXktbmFtZT5IZWxsb1dlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KLQkJPHNlcnZsZXQtbmFtZT5IZWxsbzwvc2VydmxldC1uYW1lPgotCQk8c2VydmxldC1jbGFzcz5lbmRwb2ludC5IZWxsbzwvc2VydmxldC1jbGFzcz4KLQkJPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+Ci0JPC9zZXJ2bGV0PgorICAgIDxzZXJ2bGV0PgorICAgICAgICA8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIEhlbGxvIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgPGRpc3BsYXktbmFtZT5IZWxsb1dlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5IZWxsbzwvc2VydmxldC1uYW1lPgorICAgICAgICA8c2VydmxldC1jbGFzcz5lbmRwb2ludC5IZWxsbzwvc2VydmxldC1jbGFzcz4KKyAgICAgICAgPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+CisgICAgPC9zZXJ2bGV0PgogCi0JPHNlcnZsZXQtbWFwcGluZz4KLQkJPHNlcnZsZXQtbmFtZT5IZWxsbzwvc2VydmxldC1uYW1lPgotCQk8dXJsLXBhdHRlcm4+L0hlbGxvU2VydmljZTwvdXJsLXBhdHRlcm4+Ci0JPC9zZXJ2bGV0LW1hcHBpbmc+CisgICAgPHNlcnZsZXQtbWFwcGluZz4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5IZWxsbzwvc2VydmxldC1uYW1lPgorICAgICAgICA8dXJsLXBhdHRlcm4+L0hlbGxvU2VydmljZTwvdXJsLXBhdHRlcm4+CisgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiAKLQk8c2Vzc2lvbi1jb25maWc+Ci0JCTxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KLQk8L3Nlc3Npb24tY29uZmlnPgorICAgIDxzZXNzaW9uLWNvbmZpZz4KKyAgICAgICAgPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgorICAgIDwvc2Vzc2lvbi1jb25maWc+CiAKIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9leHRlcm5hbHdzZGwvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZXh0ZXJuYWx3c2RsL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMDU4Zjk2MS4uMTUzMjVhNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9leHRlcm5hbHdzZGwvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2V4dGVybmFsd3NkbC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw5ICsxNSw5IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJleHRlcm5hbHdzZGwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9Ii4vdGVzdC13ZWIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2V4dGVybmFsd3NkbC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2V4dGVybmFsd3NkbC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggM2FlNTQ2ZC4uYTUyMWY2ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9leHRlcm5hbHdzZGwvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZXh0ZXJuYWx3c2RsL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjgsMTUgKzI4LDE1IEBACiAgICAgICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKLSAgICAgICAgCi0JQFdlYlNlcnZpY2VSZWYJCi0Jc3RhdGljIEhlbGxvU2VydmljZSBzZXJ2aWNlOworCisgICAgQFdlYlNlcnZpY2VSZWYKKyAgICBzdGF0aWMgSGVsbG9TZXJ2aWNlIHNlcnZpY2U7CiAKICAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCSAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ3ZWJzZXJ2aWNlcy1zaW1wbGUtYW5ub3RhdGlvbiIpOworICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ3ZWJzZXJ2aWNlcy1zaW1wbGUtYW5ub3RhdGlvbiIpOwogICAgICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKICAgICAgICAgICAgIGNsaWVudC5kb1Rlc3QoYXJncyk7Ci0JICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3ZWJzZXJ2aWNlcy1hbm5vdGF0aW9uIik7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3ZWJzZXJ2aWNlcy1hbm5vdGF0aW9uIik7CiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTQ0LDE2ICs0NCwxNiBAQAogICAgICAgICAgICAgICAgIEhlbGxvIHBvcnQgPSBzZXJ2aWNlLmdldEhlbGxvKCk7CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaT0wO2k8MTA7aSsrKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyByZXQgPSBwb3J0LnNheUhlbGxvKCJBcHBzZXJ2ZXIgVGVzdGVyICEiICsgYXJnc1swXSk7Ci0JCSAgICBpZihyZXQuaW5kZXhPZigiV2ViU3ZjVGVzdC1IZWxsbyIpID09IC0xKSB7CisgICAgICAgICAgICBpZihyZXQuaW5kZXhPZigiV2ViU3ZjVGVzdC1IZWxsbyIpID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhhcmdzWzBdLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCQkgICAgfQotCQkgICAgaWYocmV0LmluZGV4T2YoYXJnc1swXSkgPT0gLTEpIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKHJldC5pbmRleE9mKGFyZ3NbMF0pID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhhcmdzWzBdLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCQkgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmV0KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoYXJnc1swXSwgc3RhdC5QQVNTKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZXh0ZXJuYWx3c2RsL2VuZHBvaW50L0hlbGxvLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2V4dGVybmFsd3NkbC9lbmRwb2ludC9IZWxsby5qYXZhCmluZGV4IDc0NzVjNjUuLjEyNTdhOTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZXh0ZXJuYWx3c2RsL2VuZHBvaW50L0hlbGxvLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9leHRlcm5hbHdzZGwvZW5kcG9pbnQvSGVsbG8uamF2YQpAQCAtMjYsMTAgKzI2LDEwIEBACiAgICAgd3NkbExvY2F0aW9uPSJodHRwOi8vbG9jYWxob3N0OjgwODAvd3NkbC9IZWxsb1NlcnZpY2Uud3NkbCIKICkKIHB1YmxpYyBjbGFzcyBIZWxsbyB7Ci0JcHVibGljIEhlbGxvKCkge30KKyAgICBwdWJsaWMgSGVsbG8oKSB7fQogCi0JQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJzYXlIZWxsbyIsIGFjdGlvbj0idXJuOlNheUhlbGxvIikKLQlwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyB3aG8pIHsKLQkJcmV0dXJuICJXZWJTdmNUZXN0LUhlbGxvICIgKyB3aG87Ci0JfQorICAgIEBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0ic2F5SGVsbG8iLCBhY3Rpb249InVybjpTYXlIZWxsbyIpCisgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgd2hvKSB7CisgICAgICAgIHJldHVybiAiV2ViU3ZjVGVzdC1IZWxsbyAiICsgd2hvOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZXh0ZXJuYWx3c2RsL2hvc3Qtd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZXh0ZXJuYWx3c2RsL2hvc3Qtd2ViLnhtbAppbmRleCA3MjliMDEzLi4yMDliMmQzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2V4dGVybmFsd3NkbC9ob3N0LXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9leHRlcm5hbHdzZGwvaG9zdC13ZWIueG1sCkBAIC0xOCw4ICsxOCw4IEBACiAtLT4KIAogPHdlYi1hcHAgdmVyc2lvbj0iMi41IgotICAgICAgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIgCi0gICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKKyAgICAgICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAgIDxkaXNwbGF5LW5hbWU+ZXh0ZXJuYWx3c2RsPC9kaXNwbGF5LW5hbWU+CiAgIDx3ZWxjb21lLWZpbGUtbGlzdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZXh0ZXJuYWx3c2RsL3Rlc3Qtd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZXh0ZXJuYWx3c2RsL3Rlc3Qtd2ViLnhtbAppbmRleCA1YjZiZmNhLi41NTgwOTRhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2V4dGVybmFsd3NkbC90ZXN0LXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9leHRlcm5hbHdzZGwvdGVzdC13ZWIueG1sCkBAIC0xOCwzMCArMTgsMzAgQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKLQkJCWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgorICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKKyAgICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogCi0JPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBIZWxsbyBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQk8ZGlzcGxheS1uYW1lPkhlbGxvV0FSPC9kaXNwbGF5LW5hbWU+CisgICAgPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBIZWxsbyBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICA8ZGlzcGxheS1uYW1lPkhlbGxvV0FSPC9kaXNwbGF5LW5hbWU+CiAKLQk8c2VydmxldD4KLQkJPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBIZWxsbyBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JCTxkaXNwbGF5LW5hbWU+SGVsbG9XZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+Ci0JCTxzZXJ2bGV0LW5hbWU+SGVsbG9TZXJ2aWNlPC9zZXJ2bGV0LW5hbWU+Ci0JCTxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkhlbGxvPC9zZXJ2bGV0LWNsYXNzPgotCQk8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KLQk8L3NlcnZsZXQ+CisgICAgPHNlcnZsZXQ+CisgICAgICAgIDxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgSGVsbG8gV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgICAgICA8ZGlzcGxheS1uYW1lPkhlbGxvV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgorICAgICAgICA8c2VydmxldC1uYW1lPkhlbGxvU2VydmljZTwvc2VydmxldC1uYW1lPgorICAgICAgICA8c2VydmxldC1jbGFzcz5lbmRwb2ludC5IZWxsbzwvc2VydmxldC1jbGFzcz4KKyAgICAgICAgPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+CisgICAgPC9zZXJ2bGV0PgogCi0JPHNlcnZsZXQtbWFwcGluZz4KLQkJPHNlcnZsZXQtbmFtZT5IZWxsb1NlcnZpY2U8L3NlcnZsZXQtbmFtZT4KLQkJPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL0hlbGxvU2VydmljZTwvdXJsLXBhdHRlcm4+Ci0JPC9zZXJ2bGV0LW1hcHBpbmc+CisgICAgPHNlcnZsZXQtbWFwcGluZz4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5IZWxsb1NlcnZpY2U8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL0hlbGxvU2VydmljZTwvdXJsLXBhdHRlcm4+CisgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiAKLQk8c2Vzc2lvbi1jb25maWc+Ci0JCTxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KLQk8L3Nlc3Npb24tY29uZmlnPgorICAgIDxzZXNzaW9uLWNvbmZpZz4KKyAgICAgICAgPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgorICAgIDwvc2Vzc2lvbi1jb25maWc+CiAKIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9mYXVsdC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9mYXVsdC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGUyNmVjZmQuLmU1MjA5OWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZmF1bHQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2ZhdWx0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDkgKzE1LDkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImZhdWx0Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSIuL3dlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZmF1bHQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9mYXVsdC9idWlsZC54bWwKaW5kZXggYWZiYmEzYi4uZWI5MDQxZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9mYXVsdC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9mYXVsdC9idWlsZC54bWwKQEAgLTcyLDE0ICs3MiwxNCBAQAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bmNsaWVudCI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi1jbGllbnQiPgogICAgICAgICA8cGFyYW0gbmFtZT0iY2xpZW50LWNsYXNzIiB2YWx1ZT0iY2xpZW50LkNsaWVudCIvPgogICAgICAgICA8cGFyYW0gbmFtZT0ib3RoZXItYXJncyIgdmFsdWU9IndlYnNlcnZpY2Utd2l0aC1mYXVsdCIvPgogICAgICAgPC9hbnRjYWxsPgogCi0gPCEtLXJlc3RvcmUgdGhlIHRva2VucyBiYWNrIGluIGZpbGUtLT4gCisgPCEtLXJlc3RvcmUgdGhlIHRva2VucyBiYWNrIGluIGZpbGUtLT4KICAgICAgICAgIDxyZXBsYWNlIGZpbGU9ImNsaWVudC9DbGllbnQuamF2YSIgdG9rZW49IiR7aHR0cC5ob3N0fSIgdmFsdWU9IkhUVFBfSE9TVCIvPgogICAgICAgICAgPHJlcGxhY2UgZmlsZT0iY2xpZW50L0NsaWVudC5qYXZhIiB0b2tlbj0iJHtodHRwLnBvcnR9IiB2YWx1ZT0iSFRUUF9QT1JUIi8+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2ZhdWx0L2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZmF1bHQvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGJjMmE2OWIuLjAzZDdhYWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZmF1bHQvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZmF1bHQvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMywxMCArMzMsMTAgQEAKICAgICAgICAgc3RhdGljIE15U2VydmljZSBzZXJ2aWNlOwogCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQkgICAgc3RhdC5hZGREZXNjcmlwdGlvbigid2Vic2VydmljZXMtZmF1bHQiKTsKKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigid2Vic2VydmljZXMtZmF1bHQiKTsKICAgICAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7CiAgICAgICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3MpOwotCSAgICBzdGF0LnByaW50U3VtbWFyeSgid2Vic2VydmljZXMtZmF1bHQiKTsKKyAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoIndlYnNlcnZpY2VzLWZhdWx0Iik7CiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTYyLDE2ICs2MiwxNiBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBTdHJpbmcgcmV0ID0gcG9ydC5zYXlIZWxsbygiQXBwc2VydmVyIFRlc3RlciAhIiArIGFyZ3NbMF0pOwotCQlpZihyZXQuaW5kZXhPZigiV2ViU3ZjVGVzdC1IZWxsbyIpID09IC0xKSB7CisgICAgICAgIGlmKHJldC5pbmRleE9mKCJXZWJTdmNUZXN0LUhlbGxvIikgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXQpOwogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhhcmdzWzBdLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0JCX0KLQkJaWYocmV0LmluZGV4T2YoYXJnc1swXSkgPT0gLTEpIHsKKyAgICAgICAgfQorICAgICAgICBpZihyZXQuaW5kZXhPZihhcmdzWzBdKSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJldCk7CiAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGFyZ3NbMF0sIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQkJfQorICAgICAgICB9CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJldCk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoYXJnc1swXSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZmF1bHQvZW5kcG9pbnQvSGVsbG8uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZmF1bHQvZW5kcG9pbnQvSGVsbG8uamF2YQppbmRleCA0NTRiM2NlLi5iNmE0NjBlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2ZhdWx0L2VuZHBvaW50L0hlbGxvLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9mYXVsdC9lbmRwb2ludC9IZWxsby5qYXZhCkBAIC0yNSwxMyArMjUsMTMgQEAKICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9leGFtcGxlLmNvbS9IZWxsbyIKICkKIHB1YmxpYyBjbGFzcyBIZWxsbyB7Ci0JcHVibGljIEhlbGxvKCkge30KKyAgICBwdWJsaWMgSGVsbG8oKSB7fQogCi0JQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJzYXlIZWxsbyIsIGFjdGlvbj0idXJuOlNheUhlbGxvIikKLQlwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyB3aG8pIHRocm93cyBNeUV4Y2VwdGlvbiB7Ci0JCWlmKHdobyA9PSBudWxsKQotCQkJdGhyb3cgbmV3IE15RXhjZXB0aW9uKCJJTlBVVCBJUyBOVUxMIik7Ci0JCWVsc2UKLQkJCXJldHVybiAiV2ViU3ZjVGVzdC1IZWxsbyAiICsgd2hvOwotCX0KKyAgICBAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9InNheUhlbGxvIiwgYWN0aW9uPSJ1cm46U2F5SGVsbG8iKQorICAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIHdobykgdGhyb3dzIE15RXhjZXB0aW9uIHsKKyAgICAgICAgaWYod2hvID09IG51bGwpCisgICAgICAgICAgICB0aHJvdyBuZXcgTXlFeGNlcHRpb24oIklOUFVUIElTIE5VTEwiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuICJXZWJTdmNUZXN0LUhlbGxvICIgKyB3aG87CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9mYXVsdC9lbmRwb2ludC9NeUV4Y2VwdGlvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9mYXVsdC9lbmRwb2ludC9NeUV4Y2VwdGlvbi5qYXZhCmluZGV4IDk5NDQ5YjMuLmEyZjFkNjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZmF1bHQvZW5kcG9pbnQvTXlFeGNlcHRpb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2ZhdWx0L2VuZHBvaW50L015RXhjZXB0aW9uLmphdmEKQEAgLTE3LDE1ICsxNywxNSBAQAogcGFja2FnZSBlbmRwb2ludDsKIAogcHVibGljIGNsYXNzIE15RXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uIHsKLQlwcml2YXRlIFN0cmluZyBtZXNzYWdlID0gIiI7CisgICAgcHJpdmF0ZSBTdHJpbmcgbWVzc2FnZSA9ICIiOwogCi0JcHVibGljIE15RXhjZXB0aW9uKFN0cmluZyBtZXNzYWdlKSB7Ci0JCXN1cGVyKG1lc3NhZ2UpOwotCQl0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOwotCX0KKyAgICBwdWJsaWMgTXlFeGNlcHRpb24oU3RyaW5nIG1lc3NhZ2UpIHsKKyAgICAgICAgc3VwZXIobWVzc2FnZSk7CisgICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7CisgICAgfQogCi0JcHVibGljIFN0cmluZyBnZXRNZXNzYWdlKCkgewotCQlyZXR1cm4gbWVzc2FnZTsKLQl9CisgICAgcHVibGljIFN0cmluZyBnZXRNZXNzYWdlKCkgeworICAgICAgICByZXR1cm4gbWVzc2FnZTsKKyAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZmF1bHQvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvZmF1bHQvd2ViLnhtbAppbmRleCAwNzA4YzVjLi41ZjFiOTczIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2ZhdWx0L3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9mYXVsdC93ZWIueG1sCkBAIC0xOCwzMCArMTgsMzAgQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKLQkJCWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgorICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKKyAgICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogCi0JPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBIZWxsbyBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQk8ZGlzcGxheS1uYW1lPkhlbGxvV0FSPC9kaXNwbGF5LW5hbWU+CisgICAgPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBIZWxsbyBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICA8ZGlzcGxheS1uYW1lPkhlbGxvV0FSPC9kaXNwbGF5LW5hbWU+CiAKLQk8c2VydmxldD4KLQkJPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBIZWxsbyBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JCTxkaXNwbGF5LW5hbWU+SGVsbG9XZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+Ci0JCTxzZXJ2bGV0LW5hbWU+TXlIZWxsbzwvc2VydmxldC1uYW1lPgotCQk8c2VydmxldC1jbGFzcz5lbmRwb2ludC5IZWxsbzwvc2VydmxldC1jbGFzcz4KLQkJPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+Ci0JPC9zZXJ2bGV0PgorICAgIDxzZXJ2bGV0PgorICAgICAgICA8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIEhlbGxvIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgPGRpc3BsYXktbmFtZT5IZWxsb1dlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5NeUhlbGxvPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkhlbGxvPC9zZXJ2bGV0LWNsYXNzPgorICAgICAgICA8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KKyAgICA8L3NlcnZsZXQ+CiAKLQk8c2VydmxldC1tYXBwaW5nPgotCQk8c2VydmxldC1uYW1lPk15SGVsbG88L3NlcnZsZXQtbmFtZT4KLQkJPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL0hlbGxvU2VydmljZTwvdXJsLXBhdHRlcm4+Ci0JPC9zZXJ2bGV0LW1hcHBpbmc+CisgICAgPHNlcnZsZXQtbWFwcGluZz4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5NeUhlbGxvPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9IZWxsb1NlcnZpY2U8L3VybC1wYXR0ZXJuPgorICAgIDwvc2VydmxldC1tYXBwaW5nPgogCi0JPHNlc3Npb24tY29uZmlnPgotCQk8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+Ci0JPC9zZXNzaW9uLWNvbmZpZz4KKyAgICA8c2Vzc2lvbi1jb25maWc+CisgICAgICAgIDxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KKyAgICA8L3Nlc3Npb24tY29uZmlnPgogCiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvamF4cnBjaW5qZWN0aW9uL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2pheHJwY2luamVjdGlvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDFiYjI1YjMuLmZjNzFjZTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvamF4cnBjaW5qZWN0aW9uL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9qYXhycGNpbmplY3Rpb24vYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjYgKzE1LDI2IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqYXhycGNpbmplY3Rpb24iLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iZWpiamFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgCis8cHJvcGVydHkgbmFtZT0iZWpiamFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9IndlYnNlcnZpY2VzLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2Vic2VydmljZXMueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcENsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2pheHJwY2luamVjdGlvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2pheHJwY2luamVjdGlvbi9idWlsZC54bWwKaW5kZXggN2IwNjlmOC4uZDQ4MjE5NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9qYXhycGNpbmplY3Rpb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvamF4cnBjaW5qZWN0aW9uL2J1aWxkLnhtbApAQCAtMzAsOSArMzAsOSBAQAogICAgICZ0ZXN0cHJvcGVydGllczsKIAogICA8dGFyZ2V0IG5hbWU9InJ1bi53c2NvbXBpbGUiPgotCTxleGVjIGV4ZWN1dGFibGU9IiR7V1NDT01QSUxFfSIgZmFpbG9uZXJyb3I9InRydWUiID4KLSAgICAgICAgPGFyZyBsaW5lPSIke3dzY29tcGlsZS5jb21tYW5kfSIgLz4gICAgICAgIAotCTwvZXhlYz4KKyAgICA8ZXhlYyBleGVjdXRhYmxlPSIke1dTQ09NUElMRX0iIGZhaWxvbmVycm9yPSJ0cnVlIiA+CisgICAgICAgIDxhcmcgbGluZT0iJHt3c2NvbXBpbGUuY29tbWFuZH0iIC8+CisgICAgPC9leGVjPgogICA8L3RhcmdldD4KIAogPCEtLSBOT1RFLiB0aGUgc2ltcGxlIG1hcHBpbmcgdGVzdCBhbmQgZnVsbCBtYXBwaW5nIHRlc3QgY2FuCkBAIC00Niw1MyArNDYsNTMgQEAKICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJzZXJ2bGV0Ii8+CiAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJnZW4tc2VydmxldC13c2RsIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vV0VCLUlORi93c2RsIi8+IAorICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L1dFQi1JTkYvd3NkbCIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLndzY29tcGlsZSI+Ci0gICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiIAotICAgdmFsdWU9Ii1kZWZpbmUgLW1hcHBpbmcgJHtidWlsZC5jbGFzc2VzLmRpcn0vU2ltcGxlSGFuZGxlck1hcHBpbmdfc2VydmxldC54bWwgLWNwICR7YnVpbGQuY2xhc3Nlcy5kaXJ9IC1rZWVwIC1kICR7YnVpbGQuY2xhc3Nlcy5kaXJ9L1dFQi1JTkYvd3NkbCBjb25maWctaW50ZXJmYWNlLnhtbCIvPiAKKyAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIKKyAgIHZhbHVlPSItZGVmaW5lIC1tYXBwaW5nICR7YnVpbGQuY2xhc3Nlcy5kaXJ9L1NpbXBsZUhhbmRsZXJNYXBwaW5nX3NlcnZsZXQueG1sIC1jcCAke2J1aWxkLmNsYXNzZXMuZGlyfSAta2VlcCAtZCAke2J1aWxkLmNsYXNzZXMuZGlyfS9XRUItSU5GL3dzZGwgY29uZmlnLWludGVyZmFjZS54bWwiLz4KICAgICA8L2FudGNhbGw+Ci0gIDwvdGFyZ2V0PiAgICAKLSAgIAorICA8L3RhcmdldD4KKwogICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlLXdlYiIgZGVwZW5kcz0iaW5pdC1jb21tb24sIGNvbXBpbGUsIGdlbi1zZXJ2bGV0LXdzZGwiPgogICAgIDxhbnRjYWxsIHRhcmdldD0id2ViY2xpZW50LXdhci1jb21tb24iPgotICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+ICAgCisgICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4KICAgICAgICAgPHBhcmFtIG5hbWU9Im1hcHBpbmdmaWxlLmxvY2F0aW9uIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICAgICAgPHBhcmFtIG5hbWU9Im1hcHBpbmdmaWxlLm5hbWUiIHZhbHVlPSJTaW1wbGVIYW5kbGVyTWFwcGluZ19zZXJ2bGV0LnhtbCIvPgogICAgICAgICA8cGFyYW0gbmFtZT0id3NkbGZpbGUubG9jYXRpb24iIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9XRUItSU5GL3dzZGwiLz4KICAgICAgICAgPHBhcmFtIG5hbWU9IndzZGxmaWxlLm5hbWUiIHZhbHVlPSJTaW1wbGVIYW5kbGVyU2VydmxldC53c2RsIi8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJ3YXIuY2xhc3NlcyIgdmFsdWU9InNlcnZsZXQvKi5jbGFzcyIvPgotICAgICA8L2FudGNhbGw+ICAKKyAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KLSAgICAgICAgICAgICAKKwogICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIiBkZXBlbmRzPSJhc3NlbWJsZS13ZWIsIGFzc2VtYmxlLWNsaWVudCIvPgotICAKKwogICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlLWNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY2xpZW50Ii8+Ci0gICAgPC9hbnRjYWxsPiAgICAKLSAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi93c2RsIi8+ICAgICAKLSAgICA8Y29weSBmaWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9XRUItSU5GL3dzZGwvU2ltcGxlSGFuZGxlclNlcnZsZXQud3NkbCIgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3dzZGwiLz4gICAgCisgICAgPC9hbnRjYWxsPgorICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3dzZGwiLz4KKyAgICA8Y29weSBmaWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9XRUItSU5GL3dzZGwvU2ltcGxlSGFuZGxlclNlcnZsZXQud3NkbCIgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3dzZGwiLz4KICAgICA8dW5qYXIgc3JjPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgZGVzdD0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFwcGNsaWVudC1qYXItY29tbW9uIj4KLSAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgdmFsdWU9IlNpbXBsZUhhbmRsZXJNYXBwaW5nX3NlcnZsZXQueG1sLE1FVEEtSU5GL3dzZGwvKiosc2ltcGxlaGFuZGxlci8qKixzZXJ2bGV0L1NpbXBsZVNlcnZlci5jbGFzcyxjb20vKioiIC8+Ci0gICAgPC9hbnRjYWxsPiAgCisgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KLSAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPgogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9Imh0dHA6Ly8ke2h0dHAuaG9zdH06JHtodHRwLnBvcnR9L1NlcnZsZXRIYW5kbGVyVGVzdC9TZXJ2bGV0SGFuZGxlclRlc3QiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgIDwvdGFyZ2V0PiAgCisgICAgPC90YXJnZXQ+CiAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iU2VydmxldEhhbmRsZXJUZXN0Ii8+ICAgCi0gICAgICAgIDwvYW50Y2FsbD4gICAgICAgIAorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iU2VydmxldEhhbmRsZXJUZXN0Ii8+CisgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY2xpZW50LWNvbW1vbiIvPgogICAgICAgICA8bW92ZSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnRDbGllbnQuamFyIiB0b0ZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwQ2xpZW50LmphciIvPgogICAgIDwvdGFyZ2V0PgpAQCAtMTAwLDEwICsxMDAsMTAgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jbGllbnQtY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9qYXhycGNpbmplY3Rpb24vY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9qYXhycGNpbmplY3Rpb24vY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDM2OWY0ODQuLmQ3M2Y1MmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvamF4cnBjaW5qZWN0aW9uL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2pheHJwY2luamVjdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTMwLDI4ICszMCwyOCBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ3ZWJzZXJ2aWNlcy1qYXhycGMtaGFuZGxlci1pbmplY3Rpb24iKTsKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoIndlYnNlcnZpY2VzLWpheHJwYy1oYW5kbGVyLWluamVjdGlvbiIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmdbXSBhcmdzKSB7Ci0gICAgCXRyeSB7Ci0gICAgICAgICAgICAKKyAgICAgICAgdHJ5IHsKKwogICAgICAgICAgICAgU3RyaW5nIHRhcmdldEVuZHBvaW50QWRkcmVzcyA9IGFyZ3NbMF07Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFNlcnZpY2UgdGVzdFNlcnZpY2UgPSAoU2VydmljZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3NlcnZpY2Uvc2ltcGxlaGFuZGxlciIpOwogICAgICAgICAgICAgU2ltcGxlU2VydmVyIHRlc3QgPSAoU2ltcGxlU2VydmVyKQogICAgICAgICAgICAgdGVzdFNlcnZpY2UuZ2V0UG9ydChTaW1wbGVTZXJ2ZXIuY2xhc3MpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgICgoU3R1Yil0ZXN0KS5fc2V0UHJvcGVydHkoU3R1Yi5FTkRQT0lOVF9BRERSRVNTX1BST1BFUlRZLAogICAgICAgICAgICAgICAgICAgICB0YXJnZXRFbmRwb2ludEFkZHJlc3MpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZW5kcG9pbnQgYWRkcmVzcyA9ICIgKyB0YXJnZXRFbmRwb2ludEFkZHJlc3MpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbnZvY2F0aW9uIHJldHVybmVkICIgKyB0ZXN0LnNheUhlbGxvKCJqZXJvbWUiKSk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9qYXhycGNpbmplY3Rpb24vY29uZmlnLWludGVyZmFjZS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2pheHJwY2luamVjdGlvbi9jb25maWctaW50ZXJmYWNlLnhtbAppbmRleCAwN2UxY2IwLi40YjA4MDU5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2pheHJwY2luamVjdGlvbi9jb25maWctaW50ZXJmYWNlLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2pheHJwY2luamVjdGlvbi9jb25maWctaW50ZXJmYWNlLnhtbApAQCAtMTksMTEgKzE5LDExIEBACiAKIDxjb25maWd1cmF0aW9uCiAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+Ci0gIDxzZXJ2aWNlIAotICAgICAgbmFtZT0iU2ltcGxlSGFuZGxlclNlcnZsZXQiIAotICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJ1cm46SGFuZGxlclRlc3QiIAotICAgICAgdHlwZU5hbWVzcGFjZT0idXJuOkhhbmRsZXJUZXN0IiAKKyAgPHNlcnZpY2UKKyAgICAgIG5hbWU9IlNpbXBsZUhhbmRsZXJTZXJ2bGV0IgorICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJ1cm46SGFuZGxlclRlc3QiCisgICAgICB0eXBlTmFtZXNwYWNlPSJ1cm46SGFuZGxlclRlc3QiCiAgICAgICBwYWNrYWdlTmFtZT0iaGFuZGxlcnRlc3QiPgogICAgICAgPGludGVyZmFjZSBuYW1lPSJzZXJ2bGV0LlNpbXBsZVNlcnZlciIvPgogICA8L3NlcnZpY2U+Ci08L2NvbmZpZ3VyYXRpb24+IAorPC9jb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9qYXhycGNpbmplY3Rpb24vZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9qYXhycGNpbmplY3Rpb24vZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sCmluZGV4IGMxNGJiN2EuLmQyZDgzMDEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvamF4cnBjaW5qZWN0aW9uL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2pheHJwY2luamVjdGlvbi9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwKQEAgLTI0LDExICsyNCwxMSBAQAogICAgIDxkZXNjcmlwdGlvbj5zaW1wbGUgaGFuZGxlciBzZXJ2aWNlIHJlZjwvZGVzY3JpcHRpb24+CiAgICAgPHNlcnZpY2UtcmVmLW5hbWU+c2VydmljZS9zaW1wbGVoYW5kbGVyPC9zZXJ2aWNlLXJlZi1uYW1lPgogICAgIDxzZXJ2aWNlLWludGVyZmFjZT5qYXZheC54bWwucnBjLlNlcnZpY2U8L3NlcnZpY2UtaW50ZXJmYWNlPgotICAgIDx3c2RsLWZpbGU+TUVUQS1JTkYvd3NkbC9TaW1wbGVIYW5kbGVyU2VydmxldC53c2RsPC93c2RsLWZpbGU+ICAgIAorICAgIDx3c2RsLWZpbGU+TUVUQS1JTkYvd3NkbC9TaW1wbGVIYW5kbGVyU2VydmxldC53c2RsPC93c2RsLWZpbGU+CiAgICAgPGpheHJwYy1tYXBwaW5nLWZpbGU+U2ltcGxlSGFuZGxlck1hcHBpbmdfc2VydmxldC54bWw8L2pheHJwYy1tYXBwaW5nLWZpbGU+Ci0gICAgPHNlcnZpY2UtcW5hbWUgeG1sbnM6c2VydmljZW5zPSJ1cm46SGFuZGxlclRlc3QiPnNlcnZpY2VuczpTaW1wbGVIYW5kbGVyU2VydmxldDwvc2VydmljZS1xbmFtZT4gICAgICAgICAgICAgICAKKyAgICA8c2VydmljZS1xbmFtZSB4bWxuczpzZXJ2aWNlbnM9InVybjpIYW5kbGVyVGVzdCI+c2VydmljZW5zOlNpbXBsZUhhbmRsZXJTZXJ2bGV0PC9zZXJ2aWNlLXFuYW1lPgogICAgIDxwb3J0LWNvbXBvbmVudC1yZWY+CiAgICAgICA8c2VydmljZS1lbmRwb2ludC1pbnRlcmZhY2U+ZWpiLlNpbXBsZVNlcnZlcjwvc2VydmljZS1lbmRwb2ludC1pbnRlcmZhY2U+Ci0gICAgPC9wb3J0LWNvbXBvbmVudC1yZWY+ICAgICAgICAgIAorICAgIDwvcG9ydC1jb21wb25lbnQtcmVmPgogICA8L3NlcnZpY2UtcmVmPgogPC9hcHBsaWNhdGlvbi1jbGllbnQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2pheHJwY2luamVjdGlvbi9zZXJ2bGV0L1NlcnZsZXRIYW5kbGVyVGVzdEltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvamF4cnBjaW5qZWN0aW9uL3NlcnZsZXQvU2VydmxldEhhbmRsZXJUZXN0SW1wbC5qYXZhCmluZGV4IDMzNmU0ZjguLmY5ZjIxMTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvamF4cnBjaW5qZWN0aW9uL3NlcnZsZXQvU2VydmxldEhhbmRsZXJUZXN0SW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvamF4cnBjaW5qZWN0aW9uL3NlcnZsZXQvU2VydmxldEhhbmRsZXJUZXN0SW1wbC5qYXZhCkBAIC0yMiwyMyArMjIsMjMgQEAKIAogcHVibGljIGNsYXNzIFNlcnZsZXRIYW5kbGVyVGVzdEltcGwgaW1wbGVtZW50cyBTZXNzaW9uQmVhbiB7CiAgICAgU2Vzc2lvbkNvbnRleHQgc2M7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyBoZWxsbykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiAic2FsdXQgIiArIGhlbGxvOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2ltcGxlU2VydmVyOjo6ZWpiQ3JlYXRlICEhIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW1wbGVTZXJ2ZXI6OjplamJDcmVhdGUgISEiKTsKICAgICB9Ci0gICAgCisKICAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgc2MpIHsKLQkKKwogICAgICAgICB0aGlzLnNjID0gc2M7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7fQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7fQotICAgIAotICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHt9ICAgCisKKyAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7fQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9qYXhycGNpbmplY3Rpb24vc2VydmxldC9TaW1wbGVIYW5kbGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2pheHJwY2luamVjdGlvbi9zZXJ2bGV0L1NpbXBsZUhhbmRsZXIuamF2YQppbmRleCBlZDljZTFkLi41YTgxZjE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2pheHJwY2luamVjdGlvbi9zZXJ2bGV0L1NpbXBsZUhhbmRsZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2pheHJwY2luamVjdGlvbi9zZXJ2bGV0L1NpbXBsZUhhbmRsZXIuamF2YQpAQCAtMjIsOSArMjIsOSBAQAogaW1wb3J0IGpha2FydGEuYW5ub3RhdGlvbi5SZXNvdXJjZTsKIAogcHVibGljIGNsYXNzIFNpbXBsZUhhbmRsZXIgZXh0ZW5kcyBHZW5lcmljSGFuZGxlciB7Ci0gICAgCisKICAgICBwcm90ZWN0ZWQgSGFuZGxlckluZm8gaW5mbyA9IG51bGw7Ci0gICAgCisKIC8qCiAgICAgQFJlc291cmNlKG5hbWU9InN0cmluZ1ZhbHVlIikKICAgICBTdHJpbmcgaW5qZWN0ZWRTdHJpbmcgPSAidW5kZWZpbmVkIjsKQEAgLTMzLDcgKzMzLDcgQEAKICAgICBwdWJsaWMgdm9pZCBpbml0KEhhbmRsZXJJbmZvIGluZm8pIHsKICAgICAgICAgdGhpcy5pbmZvID0gaW5mbzsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBoYW5kbGVSZXF1ZXN0KE1lc3NhZ2VDb250ZXh0IGNvbnRleHQpIHsKIC8qCiAgICAgICAgIGlmICgidW5kZWZpbmVkIi5lcXVhbHMoaW5qZWN0ZWRTdHJpbmcpKSB7CkBAIC01MCw3ICs1MCw3IEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gaGFuZGxlUmVzcG9uc2UoTWVzc2FnZUNvbnRleHQgY29udGV4dCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgRGF0ZSBzdGFydFRpbWUgPSAoRGF0ZSkgY29udGV4dC5nZXRQcm9wZXJ0eSgic3RhcnRUaW1lIik7CkBAIC02Miw3ICs2Miw3IEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFFOYW1lW10gZ2V0SGVhZGVycygpIHsKICAgICAgICAgcmV0dXJuIG5ldyBRTmFtZVswXTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2pheHJwY2luamVjdGlvbi9zZXJ2bGV0L1NpbXBsZVNlcnZlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9qYXhycGNpbmplY3Rpb24vc2VydmxldC9TaW1wbGVTZXJ2ZXIuamF2YQppbmRleCBkYzVjZjI2Li4wNjc1Y2QyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2pheHJwY2luamVjdGlvbi9zZXJ2bGV0L1NpbXBsZVNlcnZlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvamF4cnBjaW5qZWN0aW9uL3NlcnZsZXQvU2ltcGxlU2VydmVyLmphdmEKQEAgLTE5LDcgKzE5LDcgQEAKIGltcG9ydCBqYXZhLnJtaS4qOwogCiBwdWJsaWMgaW50ZXJmYWNlIFNpbXBsZVNlcnZlciBleHRlbmRzIFJlbW90ZSB7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyBzb3VyY2UpIHRocm93cyBSZW1vdGVFeGNlcHRpb247Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvamF4d3N0b29scy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2pheHdzdG9vbHMueG1sCmluZGV4IGI2YjBiMzQuLjlhNWVhY2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvamF4d3N0b29scy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9qYXh3c3Rvb2xzLnhtbApAQCAtNDcsNyArNDcsNyBAQAogICAgICAgICA8cGFyYW0gbmFtZT0id3NpbXBvcnQuYXJncyIKICAgICAgICAgICAgICAgIHZhbHVlPSIta2VlcCAgLVhlbmRvcnNlZCAgLWQgJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IGh0dHA6Ly8ke2h0dHAuaG9zdH06JHtodHRwLnBvcnR9LyR7dGVzdC13c2RsLXVyaX0iLz4KICAgICA8L2FudGNhbGw+Ci0gICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IiAKKyAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiCiAgICAgICAgICAgICBpbmNsdWRlcz0iJHtjbGllbnQtc3JjfS8qKiI+CiAgICAgICAgIDxjbGFzc3BhdGggcmVmaWQ9ImNsYXNzcGF0aCIvPgogICAgIDwvamF2YWM+CkBAIC01Niw4ICs1Niw4IEBACiA8dGFyZ2V0IG5hbWU9InJ1bi1jbGllbnQiPgogICAgIDx1bmphciBzcmM9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiBkZXN0PSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FQUENMSUVOVH0iIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ij4KLSAgICAgIDxhcmcgdmFsdWU9IiR7Y2xpZW50LWNsYXNzfSIvPiAgICAKLSAgICAgIDxhcmcgdmFsdWU9IiR7b3RoZXItYXJnc30iLz4gICAgCisgICAgICA8YXJnIHZhbHVlPSIke2NsaWVudC1jbGFzc30iLz4KKyAgICAgIDxhcmcgdmFsdWU9IiR7b3RoZXItYXJnc30iLz4KICAgICA8L2V4ZWM+CiA8L3RhcmdldD4KIApAQCAtNzUsNyArNzUsNyBAQAogICA8Y29weSB2ZXJib3NlPSJ0cnVlIiB0b0Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvIj4KICAgICAgIDxmaWxlc2V0IGRpcj0iJHtiYXNlZGlyfSIgaW5jbHVkZXM9IndlYmxvZ2ljLXdlYnNlcnZpY2VzLnhtbCIvPgogICA8L2NvcHk+Ci0gIAorCiAgIDxjb3B5IGZpbGU9IiR7d3NkbGZpbGUubG9jYXRpb259LyR7d3NkbGZpbGUubmFtZX0iCiAgICAgICAgIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvd3NkbC8ke3dzZGxmaWxlLm5hbWV9IgogICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiLz4KQEAgLTEwNiw3ICsxMDYsNyBAQAogICAgICAgPGluY2x1ZGUgbmFtZT0iV0VCLUlORi93ZWIueG1sIi8+CiAgICAgICA8aW5jbHVkZSBuYW1lPSJXRUItSU5GL3N1bi13ZWIueG1sIi8+CiAgICAgICA8aW5jbHVkZSBuYW1lPSJXRUItSU5GL3dlYnNlcnZpY2VzLnhtbCIvPgotICAgICAgPGluY2x1ZGUgbmFtZT0iV0VCLUlORi93ZWJsb2dpYy13ZWJzZXJ2aWNlcy54bWwiLz4gIAorICAgICAgPGluY2x1ZGUgbmFtZT0iV0VCLUlORi93ZWJsb2dpYy13ZWJzZXJ2aWNlcy54bWwiLz4KICAgICAgIDxpbmNsdWRlIG5hbWU9IldFQi1JTkYvamF4LXdzLWNhdGFsb2cueG1sIi8+CiAgICAgICA8aW5jbHVkZSBuYW1lPSJXRUItSU5GL3dzZGwvJHt3c2RsZmlsZS5uYW1lfSIvPgogICAgICAgPGluY2x1ZGUgbmFtZT0iV0VCLUlORi93c2RsLyR7c2NoZW1hZmlsZS5uYW1lfSIvPgpAQCAtMTM3LDUgKzEzNyw1IEBACiAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvd3NpdC9lamIiIGNhc2VzZW5zaXRpdmU9InllcyI+CiAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi8qKiIvPgogICAgIDwvZmlsZXNldD4KLSAgPC9qYXI+ICAgICAgICAgICAgCisgIDwvamFyPgogPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2xpYmRlcGVuZGVudC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9saWJkZXBlbmRlbnQvYnVpbGQucHJvcGVydGllcwppbmRleCBhNzIzNmY4Li4zY2I5ZTUyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2xpYmRlcGVuZGVudC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbGliZGVwZW5kZW50L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDkgKzE1LDkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImxpYmRlcGVuZGVudCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iLi93ZWIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2xpYmRlcGVuZGVudC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2xpYmRlcGVuZGVudC9idWlsZC54bWwKaW5kZXggMzFjOGEyNi4uYmFjZTg0YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9saWJkZXBlbmRlbnQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbGliZGVwZW5kZW50L2J1aWxkLnhtbApAQCAtOTcsNyArOTcsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bmNsaWVudCI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi1jbGllbnQiPgogICAgICAgICA8cGFyYW0gbmFtZT0iY2xpZW50LWNsYXNzIiB2YWx1ZT0iY2xpZW50LkNsaWVudCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9saWJkZXBlbmRlbnQvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9saWJkZXBlbmRlbnQvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGU3MTM2MmIuLjQ2ZDI5MzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbGliZGVwZW5kZW50L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2xpYmRlcGVuZGVudC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTMzLDEwICszMywxMCBAQAogICAgICAgICBzdGF0aWMgSGVsbG9TZXJ2aWNlIHNlcnZpY2U7CiAKICAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCSAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ3ZWJzZXJ2aWNlcy1zaW1wbGUtYW5ub3RhdGlvbiIpOworICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ3ZWJzZXJ2aWNlcy1zaW1wbGUtYW5ub3RhdGlvbiIpOwogICAgICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKICAgICAgICAgICAgIGNsaWVudC5kb1Rlc3QoYXJncyk7Ci0JICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3ZWJzZXJ2aWNlcy1hbm5vdGF0aW9uIik7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3ZWJzZXJ2aWNlcy1hbm5vdGF0aW9uIik7CiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTQ0LDE2ICs0NCwxNiBAQAogICAgICAgICAgICAgICAgIEhlbGxvIHBvcnQgPSBzZXJ2aWNlLmdldEhlbGxvUG9ydCgpOwogICAgICAgICAgICAgICAgIGZvciAoaW50IGk9MDtpPDEwO2krKykgewogICAgICAgICAgICAgICAgICAgICBSZXRWYWwgcmV0ID0gcG9ydC5zYXlIZWxsbygiQXBwc2VydmVyIFRlc3RlciAhIiArIGFyZ3NbMF0pOwotCQkgICAgaWYocmV0LmdldFJldFZhbCgpLmluZGV4T2YoIldlYlN2Y1Rlc3QtSGVsbG8iKSA9PSAtMSkgeworICAgICAgICAgICAgaWYocmV0LmdldFJldFZhbCgpLmluZGV4T2YoIldlYlN2Y1Rlc3QtSGVsbG8iKSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoYXJnc1swXSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQkJICAgIH0KLQkJICAgIGlmKHJldC5nZXRSZXRWYWwoKS5pbmRleE9mKGFyZ3NbMF0pID09IC0xKSB7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZihyZXQuZ2V0UmV0VmFsKCkuaW5kZXhPZihhcmdzWzBdKSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoYXJnc1swXSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQkJICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJldCk7CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXQuZ2V0UmV0VmFsKCkpOwogICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbGliZGVwZW5kZW50L2VuZHBvaW50L0hlbGxvLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2xpYmRlcGVuZGVudC9lbmRwb2ludC9IZWxsby5qYXZhCmluZGV4IGQ0OWYxNTguLjU1YmZjNzQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbGliZGVwZW5kZW50L2VuZHBvaW50L0hlbGxvLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9saWJkZXBlbmRlbnQvZW5kcG9pbnQvSGVsbG8uamF2YQpAQCAtMjcsOSArMjcsOSBAQAogICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2V4YW1wbGUuY29tL0hlbGxvIgogKQogcHVibGljIGNsYXNzIEhlbGxvIHsKLQlwdWJsaWMgSGVsbG8oKSB7fQorICAgIHB1YmxpYyBIZWxsbygpIHt9CiAKLQlwdWJsaWMgUmV0VmFsIHNheUhlbGxvKFN0cmluZyB3aG8pIHsKLQkJcmV0dXJuIG5ldyBSZXRWYWwoIldlYlN2Y1Rlc3QtSGVsbG8gIiArIHdobyk7Ci0JfQorICAgIHB1YmxpYyBSZXRWYWwgc2F5SGVsbG8oU3RyaW5nIHdobykgeworICAgICAgICByZXR1cm4gbmV3IFJldFZhbCgiV2ViU3ZjVGVzdC1IZWxsbyAiICsgd2hvKTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2xpYmRlcGVuZGVudC93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9saWJkZXBlbmRlbnQvd2ViLnhtbAppbmRleCAzN2NlMTgyLi5jYzY0MTFmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL2xpYmRlcGVuZGVudC93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbGliZGVwZW5kZW50L3dlYi54bWwKQEAgLTE4LDMwICsxOCwzMCBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotCQkJaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CisgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQorICAgICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAKLQk8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIEhlbGxvIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCTxkaXNwbGF5LW5hbWU+SGVsbG9XQVI8L2Rpc3BsYXktbmFtZT4KKyAgICA8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIEhlbGxvIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgIDxkaXNwbGF5LW5hbWU+SGVsbG9XQVI8L2Rpc3BsYXktbmFtZT4KIAotCTxzZXJ2bGV0PgotCQk8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIEhlbGxvIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQkJPGRpc3BsYXktbmFtZT5IZWxsb1dlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KLQkJPHNlcnZsZXQtbmFtZT5IZWxsbzwvc2VydmxldC1uYW1lPgotCQk8c2VydmxldC1jbGFzcz5lbmRwb2ludC5IZWxsbzwvc2VydmxldC1jbGFzcz4KLQkJPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+Ci0JPC9zZXJ2bGV0PgorICAgIDxzZXJ2bGV0PgorICAgICAgICA8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIEhlbGxvIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgPGRpc3BsYXktbmFtZT5IZWxsb1dlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5IZWxsbzwvc2VydmxldC1uYW1lPgorICAgICAgICA8c2VydmxldC1jbGFzcz5lbmRwb2ludC5IZWxsbzwvc2VydmxldC1jbGFzcz4KKyAgICAgICAgPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+CisgICAgPC9zZXJ2bGV0PgogCi0JPHNlcnZsZXQtbWFwcGluZz4KLQkJPHNlcnZsZXQtbmFtZT5IZWxsbzwvc2VydmxldC1uYW1lPgotCQk8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvSGVsbG9TZXJ2aWNlPC91cmwtcGF0dGVybj4KLQk8L3NlcnZsZXQtbWFwcGluZz4KKyAgICA8c2VydmxldC1tYXBwaW5nPgorICAgICAgICA8c2VydmxldC1uYW1lPkhlbGxvPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9IZWxsb1NlcnZpY2U8L3VybC1wYXR0ZXJuPgorICAgIDwvc2VydmxldC1tYXBwaW5nPgogCi0JPHNlc3Npb24tY29uZmlnPgotCQk8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+Ci0JPC9zZXNzaW9uLWNvbmZpZz4KKyAgICA8c2Vzc2lvbi1jb25maWc+CisgICAgICAgIDxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KKyAgICA8L3Nlc3Npb24tY29uZmlnPgogCiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbWFwcGVkbmFtZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tYXBwZWRuYW1lL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMzk0MjAzMS4uZTJkYzYyZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tYXBwZWRuYW1lL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tYXBwZWRuYW1lL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ibWFwcGVkbmFtZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iLi93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSIuL3N1bi13ZWIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL21hcHBlZG5hbWUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tYXBwZWRuYW1lL2J1aWxkLnhtbAppbmRleCA4ZWZlMmYxLi4yYjhkYWY1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL21hcHBlZG5hbWUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbWFwcGVkbmFtZS9idWlsZC54bWwKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVuZHBvaW50Ii8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveS1hcHAiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktd2FyLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0iLz4KQEAgLTEwNiw3ICsxMDYsNyBAQAogICAgIDwvdGFyZ2V0PgogCiAKLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIKQEAgLTEyMCw3ICsxMjAsNyBAQAogICAgICAgICA8YXJnIHZhbHVlPSJodHRwOi8vJHtodHRwLmhvc3R9OiR7aHR0cC5wb3J0fS9lbmRwb2ludGFkZHJlc3MvSGVsbG9TZXJ2aWNlIi8+CiAgICAgICA8L2phdmE+CiAKLSA8IS0tcmVzdG9yZSB0aGUgdG9rZW5zIGJhY2sgaW4gZmlsZS0tPiAKKyA8IS0tcmVzdG9yZSB0aGUgdG9rZW5zIGJhY2sgaW4gZmlsZS0tPgogICAgICAgICAgPHJlcGxhY2UgZmlsZT0id2ViY2xpZW50L0NsaWVudC5qYXZhIiB0b2tlbj0iJHtodHRwLmhvc3R9IiB2YWx1ZT0iSFRUUF9IT1NUIi8+CiAgICAgICAgICA8cmVwbGFjZSBmaWxlPSJ3ZWJjbGllbnQvQ2xpZW50LmphdmEiIHRva2VuPSIke2h0dHAucG9ydH0iIHZhbHVlPSJIVFRQX1BPUlQiLz4KICAgICAgICAgIDxyZXBsYWNlIGZpbGU9ImNsaWVudC9DbGllbnQuamF2YSIgdG9rZW49IiR7aHR0cC5ob3N0fSIgdmFsdWU9IkhUVFBfSE9TVCIvPgpAQCAtMTY4LDcgKzE2OCw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InJlcG9ydC1mYWlsdXJlIj4KICAgICAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IlRlc3QgRkFJTEVEIi8+Ci0gICAgPC90YXJnZXQ+ICAgCQorICAgIDwvdGFyZ2V0PgogCi0gICAgCisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbWFwcGVkbmFtZS9jbGllbnQtd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbWFwcGVkbmFtZS9jbGllbnQtd2ViLnhtbAppbmRleCAwMjdkZmNlLi5iNGJiZjViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL21hcHBlZG5hbWUvY2xpZW50LXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tYXBwZWRuYW1lL2NsaWVudC13ZWIueG1sCkBAIC0yMCw3ICsyMCw3IEBACiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgCisgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAgIDxkZXNjcmlwdGlvbj5BIHRlc3QgYXBwbGljYXRpb248L2Rlc2NyaXB0aW9uPgogICA8ZGlzcGxheS1uYW1lPldlYlRpZXI8L2Rpc3BsYXktbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbWFwcGVkbmFtZS9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL21hcHBlZG5hbWUvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDk4N2Q4NTcuLjlkYzljODkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbWFwcGVkbmFtZS9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tYXBwZWRuYW1lL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzAsMzcgKzMwLDM3IEBACiAgICAgICAgIHN0YXRpYyBIZWxsb1NlcnZpY2Ugc2VydmljZTsKIAogICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIndlYnNlcnZpY2VzLW1hcHBlZC1uYW1lIik7CisgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIndlYnNlcnZpY2VzLW1hcHBlZC1uYW1lIik7CiAgICAgICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAgICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzKTsKLQkgICAgc3RhdC5wcmludFN1bW1hcnkoIndlYnNlcnZpY2VzLW1hcHBlZC1uYW1lIik7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3ZWJzZXJ2aWNlcy1tYXBwZWQtbmFtZSIpOwogICAgICAgIH0KIAogICAgICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmdbXSBhcmdzKSB7Ci0JICAgIGJvb2xlYW4gZ290RXggPSBmYWxzZTsKKyAgICAgICAgYm9vbGVhbiBnb3RFeCA9IGZhbHNlOwogICAgICAgICAgICAgdHJ5IHsKLQkJamF2YXgubmFtaW5nLkluaXRpYWxDb250ZXh0IGljID0gbmV3IGphdmF4Lm5hbWluZy5Jbml0aWFsQ29udGV4dCgpOwotCQlPYmplY3QgcmVzID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2lnbm9yZWROYW1lIik7Ci0JICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQ2F1Z2h0IEV4cGVjdGVkIGV4Y2VwdGlvbiAtICIgKyBleC5nZXRNZXNzYWdlKCkpOwotCQlnb3RFeCA9IHRydWU7Ci0JICAgIH0gCi0JICAgIGlmKCFnb3RFeCkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIk1hcHBlZCBuYW1lIG5vdCBtYXBwZWQgYXMgZXhwZWN0ZWQiKTsKKyAgICAgICAgamF2YXgubmFtaW5nLkluaXRpYWxDb250ZXh0IGljID0gbmV3IGphdmF4Lm5hbWluZy5Jbml0aWFsQ29udGV4dCgpOworICAgICAgICBPYmplY3QgcmVzID0gaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L2lnbm9yZWROYW1lIik7CisgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2F1Z2h0IEV4cGVjdGVkIGV4Y2VwdGlvbiAtICIgKyBleC5nZXRNZXNzYWdlKCkpOworICAgICAgICBnb3RFeCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYoIWdvdEV4KSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTWFwcGVkIG5hbWUgbm90IG1hcHBlZCBhcyBleHBlY3RlZCIpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJTaW1wbGUtbWFwcGVkLW5hbWUiLCBzdGF0LkZBSUwpOwotCQlyZXR1cm47Ci0JICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgICAgICAgICB0cnkgewotCQlqYXZheC5uYW1pbmcuSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgamF2YXgubmFtaW5nLkluaXRpYWxDb250ZXh0KCk7Ci0JCU9iamVjdCByZXMgPSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvTXlNYXBwZWROYW1lIik7CisgICAgICAgIGphdmF4Lm5hbWluZy5Jbml0aWFsQ29udGV4dCBpYyA9IG5ldyBqYXZheC5uYW1pbmcuSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgT2JqZWN0IHJlcyA9IGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9NeU1hcHBlZE5hbWUiKTsKICAgICAgICAgICAgICAgICBIZWxsbyBwb3J0ID0gc2VydmljZS5nZXRIZWxsb1BvcnQoKTsKICAgICAgICAgICAgICAgICBmb3IgKGludCBpPTA7aTwxMDtpKyspIHsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJldCA9IHBvcnQuc2F5SGVsbG8oIkFwcHNlcnZlciBUZXN0ZXIgISIpOwotCQkgICAgaWYocmV0LmluZGV4T2YoIldlYlN2Y1Rlc3QtSGVsbG8iKSA9PSAtMSkgeworICAgICAgICAgICAgaWYocmV0LmluZGV4T2YoIldlYlN2Y1Rlc3QtSGVsbG8iKSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIlNpbXBsZS1Bbm5vdGF0aW9uIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQkJICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJldCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJTaW1wbGUtbWFwcGVkLW5hbWUiLCBzdGF0LlBBU1MpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tYXBwZWRuYW1lL2NsaWVudC9UZXN0Q2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL21hcHBlZG5hbWUvY2xpZW50L1Rlc3RDbGllbnQuamF2YQppbmRleCA3MGYwYWQyLi43NzU4ZDQ0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL21hcHBlZG5hbWUvY2xpZW50L1Rlc3RDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL21hcHBlZG5hbWUvY2xpZW50L1Rlc3RDbGllbnQuamF2YQpAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgaW50IGNvZGUgPSBpbnZva2VTZXJ2bGV0KHVybCk7CiAgICAgICAgICAgICByZXBvcnQoY29kZSk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgfQpAQCAtNjMsOSArNjMsOSBAQAogICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICBsb2cobGluZSk7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIlNvIHRoZSBSRVNVTFQgT0YgSEVMTE8gU0VSVklDRSBJUyIpICE9IC0xKQotCQlmb3VuZDEgPSB0cnVlOworICAgICAgICBmb3VuZDEgPSB0cnVlOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJbSGVsbG8gQWxsXSIpICE9IC0xKQotCQlmb3VuZDIgPSB0cnVlOworICAgICAgICBmb3VuZDIgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjb2RlOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbWFwcGVkbmFtZS9lbmRwb2ludC9IZWxsby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tYXBwZWRuYW1lL2VuZHBvaW50L0hlbGxvLmphdmEKaW5kZXggZjJlY2M5My4uZTFmZDFmNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tYXBwZWRuYW1lL2VuZHBvaW50L0hlbGxvLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tYXBwZWRuYW1lL2VuZHBvaW50L0hlbGxvLmphdmEKQEAgLTIwLDggKzIwLDggQEAKIAogQFdlYlNlcnZpY2UKIHB1YmxpYyBjbGFzcyBIZWxsbyB7Ci0JCisKICAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyBwYXJhbSkgewotCXJldHVybiAiSGVsbG8gIiArIHBhcmFtOworICAgIHJldHVybiAiSGVsbG8gIiArIHBhcmFtOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbWFwcGVkbmFtZS93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tYXBwZWRuYW1lL3dlYi54bWwKaW5kZXggZjUxY2NjMC4uNTY0Y2Q0ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tYXBwZWRuYW1lL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tYXBwZWRuYW1lL3dlYi54bWwKQEAgLTE4LDMwICsxOCwzMCBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotCQkJaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CisgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQorICAgICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAKLQk8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIEhlbGxvIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCTxkaXNwbGF5LW5hbWU+SGVsbG9XQVI8L2Rpc3BsYXktbmFtZT4KKyAgICA8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIEhlbGxvIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgIDxkaXNwbGF5LW5hbWU+SGVsbG9XQVI8L2Rpc3BsYXktbmFtZT4KIAotCTxzZXJ2bGV0PgotCQk8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIEhlbGxvIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQkJPGRpc3BsYXktbmFtZT5IZWxsb1dlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KLQkJPHNlcnZsZXQtbmFtZT5IZWxsbzwvc2VydmxldC1uYW1lPgotCQk8c2VydmxldC1jbGFzcz5lbmRwb2ludC5IZWxsbzwvc2VydmxldC1jbGFzcz4KLQkJPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+Ci0JPC9zZXJ2bGV0PgorICAgIDxzZXJ2bGV0PgorICAgICAgICA8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIEhlbGxvIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgPGRpc3BsYXktbmFtZT5IZWxsb1dlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5IZWxsbzwvc2VydmxldC1uYW1lPgorICAgICAgICA8c2VydmxldC1jbGFzcz5lbmRwb2ludC5IZWxsbzwvc2VydmxldC1jbGFzcz4KKyAgICAgICAgPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+CisgICAgPC9zZXJ2bGV0PgogCi0JPHNlcnZsZXQtbWFwcGluZz4KLQkJPHNlcnZsZXQtbmFtZT5IZWxsbzwvc2VydmxldC1uYW1lPgotCQk8dXJsLXBhdHRlcm4+L0hlbGxvU2VydmljZTwvdXJsLXBhdHRlcm4+Ci0JPC9zZXJ2bGV0LW1hcHBpbmc+CisgICAgPHNlcnZsZXQtbWFwcGluZz4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5IZWxsbzwvc2VydmxldC1uYW1lPgorICAgICAgICA8dXJsLXBhdHRlcm4+L0hlbGxvU2VydmljZTwvdXJsLXBhdHRlcm4+CisgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiAKLQk8c2Vzc2lvbi1jb25maWc+Ci0JCTxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KLQk8L3Nlc3Npb24tY29uZmlnPgorICAgIDxzZXNzaW9uLWNvbmZpZz4KKyAgICAgICAgPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgorICAgIDwvc2Vzc2lvbi1jb25maWc+CiAKIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tYXBwZWRuYW1lL3dlYmNsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbWFwcGVkbmFtZS93ZWJjbGllbnQvQ2xpZW50LmphdmEKaW5kZXggYTMyNjIyNS4uNzhiZTZhOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tYXBwZWRuYW1lL3dlYmNsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL21hcHBlZG5hbWUvd2ViY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMCw4ICszMCw4IEBACiAgQFdlYlNlcnZpY2VSZWYobmFtZT0iaWdub3JlZE5hbWUiLCBtYXBwZWROYW1lPSJNeU1hcHBlZE5hbWUiLCB3c2RsTG9jYXRpb249Imh0dHA6Ly9IVFRQX0hPU1Q6SFRUUF9QT1JUL21hcHBlZG5hbWUvSGVsbG9TZXJ2aWNlP1dTREwiKQogICAgICAgICBIZWxsb1NlcnZpY2Ugc2VydmljZTsKIAotICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkgCi0JCXRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CisgICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQorICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICAgICBkb1Bvc3QocmVxLCByZXNwKTsKICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbWJ5dGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbWJ5dGUvYnVpbGQucHJvcGVydGllcwppbmRleCA5Y2MzNjA3Li5hZGE3MjNlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL21ieXRlL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tYnl0ZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw4ICsxNSw4IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJtYnl0ZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbWJ5dGUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tYnl0ZS9idWlsZC54bWwKaW5kZXggOTBjNDhmNi4uY2UxODM5YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tYnl0ZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tYnl0ZS9idWlsZC54bWwKQEAgLTcwLDcgKzcwLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW5jbGllbnQiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4tY2xpZW50Ij4KICAgICAgICAgPHBhcmFtIG5hbWU9ImNsaWVudC1jbGFzcyIgdmFsdWU9ImNsaWVudC5DbGllbnQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbWJ5dGUvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tYnl0ZS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggNTM2NjVhNS4uZmY4NGQzNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tYnl0ZS9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tYnl0ZS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTMyLDM4ICszMiwzOCBAQAogICAgICAgICBzdGF0aWMgSGVsbG/uU2VydmljZSBzZXJ2aWNlOwogCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQkgICAgc3RhdC5hZGREZXNjcmlwdGlvbigic2VydmljZS13aXRoLW1ieXRlLWNoYXIiKTsKKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigic2VydmljZS13aXRoLW1ieXRlLWNoYXIiKTsKICAgICAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7CiAgICAgICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3MpOwotCSAgICBzdGF0LnByaW50U3VtbWFyeSgic2VydmljZS13aXRoLW1ieXRlLWNoYXIiKTsKKyAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoInNlcnZpY2Utd2l0aC1tYnl0ZS1jaGFyIik7CiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgSGVsbG8gcG9ydCA9IHNlcnZpY2UuZ2V0SGVsbG9Qb3J0KCk7CiAgICAgICAgICAgICAgICAgU3RyaW5nIHJldCA9IHBvcnQuc2F5SGVsbG8oIkFwcHNlcnZlciBUZXN0ZXIgISIgKyBhcmdzWzBdKTsKLQkJaWYocmV0LmluZGV4T2YoIldlYlN2Y1Rlc3QtSGVsbG8iKSA9PSAtMSkgeworICAgICAgICBpZihyZXQuaW5kZXhPZigiV2ViU3ZjVGVzdC1IZWxsbyIpID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBncmVldGluZyAiICsgcmV0KTsKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoYXJnc1swXSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCQl9Ci0JCWlmKHJldC5pbmRleE9mKGFyZ3NbMF0pID09IC0xKSB7CisgICAgICAgIH0KKyAgICAgICAgaWYocmV0LmluZGV4T2YoYXJnc1swXSkgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXQpOwogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhhcmdzWzBdLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0JCX0KKyAgICAgICAgfQogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXQpOwogICAgICAgICAgICAgICAgIHJldCA9IHBvcnQuc2F5RG91YmxlSGVsbG8oIkFwcHNlcnZlciBUZXN0ZXIgISIgKyBhcmdzWzBdKTsKLQkJaWYocmV0LmluZGV4T2YoIldlYlN2Y1Rlc3QtRG91YmxlLUhlbGxvIikgPT0gLTEpIHsKKyAgICAgICAgaWYocmV0LmluZGV4T2YoIldlYlN2Y1Rlc3QtRG91YmxlLUhlbGxvIikgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXQpOwogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhhcmdzWzBdLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0JCX0KLQkJaWYocmV0LmluZGV4T2YoYXJnc1swXSkgPT0gLTEpIHsKKyAgICAgICAgfQorICAgICAgICBpZihyZXQuaW5kZXhPZihhcmdzWzBdKSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJldCk7CiAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGFyZ3NbMF0sIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQkJfQorICAgICAgICB9CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJldCk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoYXJnc1swXSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbWJ5dGUvZW5kcG9pbnQvSGVsbG8uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbWJ5dGUvZW5kcG9pbnQvSGVsbG8uamF2YQppbmRleCBhMDBkMThhLi42ZTgxYWMwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL21ieXRlL2VuZHBvaW50L0hlbGxvLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tYnl0ZS9lbmRwb2ludC9IZWxsby5qYXZhCkBAIC0yNSwxNSArMjUsMTUgQEAKICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9leGFtcGxlLmNvbS9IZWxsbyIKICkKIHB1YmxpYyBjbGFzcyBIZWxsbyB7Ci0JcHVibGljIEhlbGxvKCkge30KKyAgICBwdWJsaWMgSGVsbG8oKSB7fQogCi0JQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJzYXlIZWxsbyIsIGFjdGlvbj0idXJuOlNheUhlbGxvIikKLQlwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyB3aG8pIHsKLQkJcmV0dXJuICJXZWJTdmNUZXN0LUhlbGxvICIgKyB3aG87Ci0JfQorICAgIEBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0ic2F5SGVsbG8iLCBhY3Rpb249InVybjpTYXlIZWxsbyIpCisgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgd2hvKSB7CisgICAgICAgIHJldHVybiAiV2ViU3ZjVGVzdC1IZWxsbyAiICsgd2hvOworICAgIH0KIAotCUBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0ic2F5RG91YmxlSGVsbG8iLCBhY3Rpb249InVybjpTYXlIZWxsbyIpCi0JcHVibGljIFN0cmluZyBzYXlEb3VibGVIZWxsbyhTdHJpbmcgd2hvKSB7Ci0JCXJldHVybiAiV2ViU3ZjVGVzdC1Eb3VibGUtSGVsbG8gIiArIHdobyArICIgQU5EICIgKyB3aG87Ci0JfQorICAgIEBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0ic2F5RG91YmxlSGVsbG8iLCBhY3Rpb249InVybjpTYXlIZWxsbyIpCisgICAgcHVibGljIFN0cmluZyBzYXlEb3VibGVIZWxsbyhTdHJpbmcgd2hvKSB7CisgICAgICAgIHJldHVybiAiV2ViU3ZjVGVzdC1Eb3VibGUtSGVsbG8gIiArIHdobyArICIgQU5EICIgKyB3aG87CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tc2djdHh0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL21zZ2N0eHQvYnVpbGQucHJvcGVydGllcwppbmRleCAyZTY0OTYxLi5jYzc0MmExIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL21zZ2N0eHQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL21zZ2N0eHQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ibXNnY3R4dCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXNnY3R4dC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL21zZ2N0eHQvYnVpbGQueG1sCmluZGV4IDIwM2E3NGQuLjA3NmUxMDYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXNnY3R4dC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tc2djdHh0L2J1aWxkLnhtbApAQCAtNjksNyArNjksNyBAQAogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iaHR0cDovLyR7aHR0cC5ob3N0fToke2h0dHAucG9ydH0vd3NjbGllbnQvUmVxdWVzdFByb2Nlc3NvciIvPgogICAgICAgICAgIDwvamF2YT4KIAotPCEtLXJlc3RvcmUgdGhlIHRva2VucyBiYWNrIGluIGZpbGUtLT4gCis8IS0tcmVzdG9yZSB0aGUgdG9rZW5zIGJhY2sgaW4gZmlsZS0tPgogICAgICAgICAgPHJlcGxhY2UgZmlsZT0id2ViY2xpZW50L0NsaWVudC5qYXZhIiB0b2tlbj0iJHtodHRwLmhvc3R9IiB2YWx1ZT0iSFRUUF9IT1NUIi8+CiAgICAgICAgICA8cmVwbGFjZSBmaWxlPSJ3ZWJjbGllbnQvQ2xpZW50LmphdmEiIHRva2VuPSIke2h0dHAucG9ydH0iIHZhbHVlPSJIVFRQX1BPUlQiLz4KICAgICAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL21zZ2N0eHQvY2xpZW50LXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL21zZ2N0eHQvY2xpZW50LXdlYi54bWwKaW5kZXggMDI3ZGZjZS4uYjRiYmY1YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tc2djdHh0L2NsaWVudC13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXNnY3R4dC9jbGllbnQtd2ViLnhtbApAQCAtMjAsNyArMjAsNyBAQAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLSAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIAorICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogICA8ZGVzY3JpcHRpb24+QSB0ZXN0IGFwcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KICAgPGRpc3BsYXktbmFtZT5XZWJUaWVyPC9kaXNwbGF5LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL21zZ2N0eHQvY2xpZW50L1Rlc3RDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXNnY3R4dC9jbGllbnQvVGVzdENsaWVudC5qYXZhCmluZGV4IGQ5MDNlOWUuLjQ2N2U2YjkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXNnY3R4dC9jbGllbnQvVGVzdENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXNnY3R4dC9jbGllbnQvVGVzdENsaWVudC5qYXZhCkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnQgY29kZSA9IGludm9rZVNlcnZsZXQodXJsKTsKICAgICAgICAgICAgIHJlcG9ydChjb2RlKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICB9CkBAIC02MCw3ICs2MCw3IEBACiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gYzEuZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgaW5wdXQgPSBuZXcgQnVmZmVyZWRSZWFkZXIgKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwogICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7Ci0gICAgICAgCisKICAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nKGxpbmUpOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJTbyB0aGUgUkVTVUxUIE9GIEhFTExPIFNFUlZJQ0UgSVMiKSAhPSAtMSkKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXNnY3R4dC9lbmRwb2ludC9IZWxsby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tc2djdHh0L2VuZHBvaW50L0hlbGxvLmphdmEKaW5kZXggOGIxMjEwOS4uMTYwYzViYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tc2djdHh0L2VuZHBvaW50L0hlbGxvLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tc2djdHh0L2VuZHBvaW50L0hlbGxvLmphdmEKQEAgLTIyLDcgKzIyLDcgQEAKIAogQFdlYlNlcnZpY2UKIHB1YmxpYyBjbGFzcyBIZWxsbyB7Ci0JCisKICAgICBAUmVzb3VyY2UgV2ViU2VydmljZUNvbnRleHQgd3NjOwogCiAgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgcGFyYW0pIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXNnY3R4dC93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tc2djdHh0L3dlYi54bWwKaW5kZXggZDRlZTRiNS4uMjdmOWYyMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tc2djdHh0L3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tc2djdHh0L3dlYi54bWwKQEAgLTE4LDMwICsxOCwzMCBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotCQkJaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CisgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQorICAgICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAKLQk8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIEhlbGxvIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCTxkaXNwbGF5LW5hbWU+SGVsbG9XQVI8L2Rpc3BsYXktbmFtZT4KKyAgICA8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIEhlbGxvIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgIDxkaXNwbGF5LW5hbWU+SGVsbG9XQVI8L2Rpc3BsYXktbmFtZT4KIAotCTxzZXJ2bGV0PgotCQk8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIEhlbGxvIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQkJPGRpc3BsYXktbmFtZT5IZWxsb1dlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KLQkJPHNlcnZsZXQtbmFtZT5IZWxsbzwvc2VydmxldC1uYW1lPgotCQk8c2VydmxldC1jbGFzcz5lbmRwb2ludC5IZWxsbzwvc2VydmxldC1jbGFzcz4KLQkJPGxvYWQtb24tc3RhcnR1cD4xPC9sb2FkLW9uLXN0YXJ0dXA+Ci0JPC9zZXJ2bGV0PgorICAgIDxzZXJ2bGV0PgorICAgICAgICA8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIEhlbGxvIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgPGRpc3BsYXktbmFtZT5IZWxsb1dlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5IZWxsbzwvc2VydmxldC1uYW1lPgorICAgICAgICA8c2VydmxldC1jbGFzcz5lbmRwb2ludC5IZWxsbzwvc2VydmxldC1jbGFzcz4KKyAgICAgICAgPGxvYWQtb24tc3RhcnR1cD4xPC9sb2FkLW9uLXN0YXJ0dXA+CisgICAgPC9zZXJ2bGV0PgogCi0JPHNlcnZsZXQtbWFwcGluZz4KLQkJPHNlcnZsZXQtbmFtZT5IZWxsbzwvc2VydmxldC1uYW1lPgotCQk8dXJsLXBhdHRlcm4+L0hlbGxvU2VydmljZTwvdXJsLXBhdHRlcm4+Ci0JPC9zZXJ2bGV0LW1hcHBpbmc+CisgICAgPHNlcnZsZXQtbWFwcGluZz4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5IZWxsbzwvc2VydmxldC1uYW1lPgorICAgICAgICA8dXJsLXBhdHRlcm4+L0hlbGxvU2VydmljZTwvdXJsLXBhdHRlcm4+CisgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiAKLQk8c2Vzc2lvbi1jb25maWc+Ci0JCTxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KLQk8L3Nlc3Npb24tY29uZmlnPgorICAgIDxzZXNzaW9uLWNvbmZpZz4KKyAgICAgICAgPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgorICAgIDwvc2Vzc2lvbi1jb25maWc+CiAKIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tc2djdHh0L3dlYmNsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXNnY3R4dC93ZWJjbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMTY4NzU2ZC4uMDMxMzNjNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tc2djdHh0L3dlYmNsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL21zZ2N0eHQvd2ViY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiAgICAgICAgIEhlbGxvU2VydmljZSBzZXJ2aWNlOwogCiAgICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQotCQl0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24geworICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICAgICBkb1Bvc3QocmVxLCByZXNwKTsKICAgICAgICB9CiAKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgICAgICAgdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKIAogICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgSGVsbG8gcG9ydCA9IHNlcnZpY2UuZ2V0SGVsbG9Qb3J0KCk7CiAKICAgICAgICAgICAgICAgICBTdHJpbmcgcmV0ID0gcG9ydC5zYXlIZWxsbygiQWxsIik7CkBAIC02Miw3ICs2Miw3IEBACiAgICAgICAgICAgICAgICAgb3V0LmNsb3NlKCk7CiAgICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgfQogICAgICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXRvbS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tdG9tL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNjJiYzA4Ny4uNzRiMDUyYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tdG9tL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tdG9tL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ibXRvbSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iLi93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSIuL3N1bi13ZWIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL210b20vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tdG9tL2J1aWxkLnhtbAppbmRleCA1ZDU4MmY2Li43NGY5ZTEyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL210b20vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXRvbS9idWlsZC54bWwKQEAgLTEzMSwxMSArMTMxLDExIEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNsaWVudCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW50ZXN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KLSAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIgCi0gICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiAKKyAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iY2xpZW50LyoqIi8+CiAgICAgICA8dW5qYXIgc3JjPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgZGVzdD0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+CiAgICAgICA8amF2YSBjbGFzc25hbWU9ImNsaWVudC5UZXN0Q2xpZW50Ij4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXRvbS9jbGllbnQtd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXRvbS9jbGllbnQtd2ViLnhtbAppbmRleCBhY2E2OWFiLi5iMDhmZjgyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL210b20vY2xpZW50LXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tdG9tL2NsaWVudC13ZWIueG1sCkBAIC0yMCw3ICsyMCw3IEBACiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgCisgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAgIDxkZXNjcmlwdGlvbj5BIHRlc3QgYXBwbGljYXRpb248L2Rlc2NyaXB0aW9uPgogICA8ZGlzcGxheS1uYW1lPldlYlRpZXI8L2Rpc3BsYXktbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXRvbS9jbGllbnQvVGVzdENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tdG9tL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKaW5kZXggYzU4ZWU1My4uYzMxYzc3OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tdG9tL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tdG9tL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludCBjb2RlID0gaW52b2tlU2VydmxldCh1cmwpOwogICAgICAgICAgICAgcmVwb3J0KGNvZGUpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KQEAgLTYzLDkgKzYzLDkgQEAKICAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nKGxpbmUpOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJTbyB0aGUgUkVTVUxUIE9GIFNVQlRSQUNUIFNFUlZJQ0UgSVMiKSAhPSAtMSkKLQkJZm91bmQxID0gdHJ1ZTsKKyAgICAgICAgZm91bmQxID0gdHJ1ZTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiWzExMTExXSIpICE9IC0xKQotCQlmb3VuZDIgPSB0cnVlOworICAgICAgICBmb3VuZDIgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjb2RlOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXRvbS9jdXN0b20tY2xpZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXRvbS9jdXN0b20tY2xpZW50LnhtbAppbmRleCA4MzlmY2IxLi40OGYxNzE2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL210b20vY3VzdG9tLWNsaWVudC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tdG9tL2N1c3RvbS1jbGllbnQueG1sCkBAIC0xNywxMiArMTcsMTIgQEAKIAogLS0+CiAKLTxiaW5kaW5ncyAKKzxiaW5kaW5ncwogICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCiAgICAgeG1sbnM6amF4Yj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4YiIKICAgICB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKICAgICB3c2RsTG9jYXRpb249IlN1YnRyYWN0TnVtYmVycy53c2RsIgotICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXh3cyI+ICAgIAorICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXh3cyI+CiAgICAgPGJpbmRpbmdzIG5vZGU9Im5zMTpkZWZpbml0aW9ucyIgeG1sbnM6bnMxPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+CiAgICAgICAgIDxwYWNrYWdlIG5hbWU9ImNsaWVudCIvPgogICAgIDwvYmluZGluZ3M+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL210b20vY3VzdG9tLXNlcnZlci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL210b20vY3VzdG9tLXNlcnZlci54bWwKaW5kZXggMTcwZDY2Ny4uMDk4ODEyMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tdG9tL2N1c3RvbS1zZXJ2ZXIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXRvbS9jdXN0b20tc2VydmVyLnhtbApAQCAtMTcsNyArMTcsNyBAQAogCiAtLT4KIAotPGJpbmRpbmdzIAorPGJpbmRpbmdzCiAgICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKICAgICB4bWxuczpqYXhiPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXhiIgogICAgIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tdG9tL2VuZHBvaW50L1N1YnRyYWN0TnVtYmVyc0ltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXRvbS9lbmRwb2ludC9TdWJ0cmFjdE51bWJlcnNJbXBsLmphdmEKaW5kZXggZGM4YTIzMC4uOWE5ZmRmYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tdG9tL2VuZHBvaW50L1N1YnRyYWN0TnVtYmVyc0ltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL210b20vZW5kcG9pbnQvU3VidHJhY3ROdW1iZXJzSW1wbC5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAKIEBqYWthcnRhLmp3cy5XZWJTZXJ2aWNlIChzZXJ2aWNlTmFtZT0ianVua2p1bmtqdW5rIiwgcG9ydE5hbWU9IlN1YnRyYWN0TnVtYmVyc1BvcnRUeXBlIiwgZW5kcG9pbnRJbnRlcmZhY2U9ImVuZHBvaW50LlN1YnRyYWN0TnVtYmVyc1BvcnRUeXBlIikKIHB1YmxpYyBjbGFzcyBTdWJ0cmFjdE51bWJlcnNJbXBsIGltcGxlbWVudHMgU3VidHJhY3ROdW1iZXJzUG9ydFR5cGUgewotICAgIAorCiAgICAgcHVibGljIGludCBzdWJ0cmFjdE51bWJlcnMgKGludCBudW1iZXIxLCBpbnQgbnVtYmVyMikgewogICAgICAgICByZXR1cm4gbnVtYmVyMSAtIG51bWJlcjI7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tdG9tL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL210b20vd2ViLnhtbAppbmRleCA0MzQyNDM0Li40YTFiMjgzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL210b20vd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL210b20vd2ViLnhtbApAQCAtMTgsMjkgKzE4LDI5IEBACiAtLT4KIAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCi0JCQlodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KKyAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCisgICAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KIAotCTxkZXNjcmlwdGlvbj5TdWJ0cmFjdE51bWJlcnMgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgPGRlc2NyaXB0aW9uPlN1YnRyYWN0TnVtYmVycyBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KIAotCTxzZXJ2bGV0PgotCQk8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIFN1YnRyYWN0TnVtYmVycyBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JCTxkaXNwbGF5LW5hbWU+U3VidHJhY3ROdW1iZXJzV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgotCQk8c2VydmxldC1uYW1lPlN1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3NlcnZsZXQtbmFtZT4KLQkJPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuU3VidHJhY3ROdW1iZXJzSW1wbDwvc2VydmxldC1jbGFzcz4KLQkJPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+Ci0JPC9zZXJ2bGV0PgorICAgIDxzZXJ2bGV0PgorICAgICAgICA8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIFN1YnRyYWN0TnVtYmVycyBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgICAgIDxkaXNwbGF5LW5hbWU+U3VidHJhY3ROdW1iZXJzV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgorICAgICAgICA8c2VydmxldC1uYW1lPlN1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuU3VidHJhY3ROdW1iZXJzSW1wbDwvc2VydmxldC1jbGFzcz4KKyAgICAgICAgPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+CisgICAgPC9zZXJ2bGV0PgogCi0JPHNlcnZsZXQtbWFwcGluZz4KLQkJPHNlcnZsZXQtbmFtZT5TdWJ0cmFjdE51bWJlcnNTZXJ2aWNlPC9zZXJ2bGV0LW5hbWU+Ci0JCTx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9TdWJ0cmFjdE51bWJlcnNTZXJ2aWNlPC91cmwtcGF0dGVybj4KLQk8L3NlcnZsZXQtbWFwcGluZz4KKyAgICA8c2VydmxldC1tYXBwaW5nPgorICAgICAgICA8c2VydmxldC1uYW1lPlN1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL1N1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3VybC1wYXR0ZXJuPgorICAgIDwvc2VydmxldC1tYXBwaW5nPgogCi0JPHNlc3Npb24tY29uZmlnPgotCQk8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+Ci0JPC9zZXNzaW9uLWNvbmZpZz4KKyAgICA8c2Vzc2lvbi1jb25maWc+CisgICAgICAgIDxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KKyAgICA8L3Nlc3Npb24tY29uZmlnPgogCiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXRvbS93ZWJjbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL210b20vd2ViY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDM2MWEwYjcuLjM4MjA3ZGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXRvbS93ZWJjbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tdG9tL3dlYmNsaWVudC9DbGllbnQuamF2YQpAQCAtMjcsOCArMjcsOCBAQAogCiAgICAgICAgIEBXZWJTZXJ2aWNlUmVmIFN1YnRyYWN0TnVtYmVyc1NlcnZpY2Ugc2VydmljZTsKIAotICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkgCi0JCXRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CisgICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQorICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICAgICBkb1Bvc3QocmVxLCByZXNwKTsKICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXRvbS93ZWJzZXJ2aWNlcy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL210b20vd2Vic2VydmljZXMueG1sCmluZGV4IGY4Y2E0ODUuLjg0MjMzNjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXRvbS93ZWJzZXJ2aWNlcy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tdG9tL3dlYnNlcnZpY2VzLnhtbApAQCAtMjksNyArMjksNyBAQAogICAgICAgICAgICAgPHBvcnQtY29tcG9uZW50LW5hbWU+U3VidHJhY3ROdW1iZXJzSW1wbDwvcG9ydC1jb21wb25lbnQtbmFtZT4KICAgICAgICAgICAgIDx3c2RsLXNlcnZpY2UgeG1sbnM6d3NkbC1wb3J0X25zX189Imh0dHA6Ly9kdWtlLm9yZyI+d3NkbC1wb3J0X25zX186U3VidHJhY3ROdW1iZXJzU2VydmljZTwvd3NkbC1zZXJ2aWNlPgogICAgICAgICAgICAgPHdzZGwtcG9ydCB4bWxuczp3c2RsLXBvcnRfbnNfXz0iaHR0cDovL2R1a2Uub3JnIj53c2RsLXBvcnRfbnNfXzpTdWJ0cmFjdE51bWJlcnNQb3J0VHlwZTwvd3NkbC1wb3J0PgotCSAgICA8ZW5hYmxlLW10b20+dHJ1ZTwvZW5hYmxlLW10b20+CisgICAgICAgIDxlbmFibGUtbXRvbT50cnVlPC9lbmFibGUtbXRvbT4KICAgICAgICAgICAgIDxzZXJ2aWNlLWVuZHBvaW50LWludGVyZmFjZT5lbmRwb2ludC5TdWJ0cmFjdE51bWJlcnNQb3J0VHlwZTwvc2VydmljZS1lbmRwb2ludC1pbnRlcmZhY2U+CiAgICAgICAgICAgICA8c2VydmljZS1pbXBsLWJlYW4+CiAgICAgICAgICAgICAgICAgPHNlcnZsZXQtbGluaz5TdWJ0cmFjdE51bWJlcnNTZXJ2aWNlPC9zZXJ2bGV0LWxpbms+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL211bHRpcG9ydC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tdWx0aXBvcnQvYnVpbGQucHJvcGVydGllcwppbmRleCBiODRlYzIzLi43YmY3NDMyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL211bHRpcG9ydC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXVsdGlwb3J0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDkgKzE1LDkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9Im11bHRpcG9ydCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iLi93ZWIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL211bHRpcG9ydC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL211bHRpcG9ydC9idWlsZC54bWwKaW5kZXggMWNhNTIxNC4uYzNlYzllOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tdWx0aXBvcnQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXVsdGlwb3J0L2J1aWxkLnhtbApAQCAtNjksOCArNjksOCBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndzaW1wb3J0LmFyZ3MiCiAgICAgICAgICAgICAgICB2YWx1ZT0iLWtlZXAgLXdzZGxsb2NhdGlvbiAke2Vudi5BUFNfSE9NRX0vZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tdWx0aXBvcnQvSHR0cFRlc3RTZXJ2aWNlLndzZGwgLWIgY3VzdG9tY2xpZW50LnhtbCAtZCAke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQgSHR0cFRlc3RTZXJ2aWNlLndzZGwiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiIAotICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9qMmVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy1ydC5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtdG9vbHMuamFyIiAKKyAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9qMmVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy1ydC5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtdG9vbHMuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9ImNsaWVudC8qKiIvPgogICAgIDwvdGFyZ2V0PgogCkBAIC04Myw3ICs4Myw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVudGVzdCI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi1jbGllbnQiPgogICAgICAgICA8cGFyYW0gbmFtZT0iY2xpZW50LWNsYXNzIiB2YWx1ZT0iY2xpZW50LkNsaWVudCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tdWx0aXBvcnQvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tdWx0aXBvcnQvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGYzNWNkZGIuLjA4ZTk4MmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXVsdGlwb3J0L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL211bHRpcG9ydC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTIyLDUwICsyMiw1MCBAQAogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKIAotCXByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgICAgIEBXZWJTZXJ2aWNlUmVmIHN0YXRpYyBIdHRwVGVzdFNlcnZpY2Ugc2VydmljZTsKIAogICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIndlYnNlcnZpY2VzLXNpbXBsZS1hbm5vdGF0aW9uIik7CisgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIndlYnNlcnZpY2VzLXNpbXBsZS1hbm5vdGF0aW9uIik7CiAgICAgICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAgICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzKTsKLQkgICAgc3RhdC5wcmludFN1bW1hcnkoIndlYnNlcnZpY2VzLWFubm90YXRpb24iKTsKKyAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoIndlYnNlcnZpY2VzLWFubm90YXRpb24iKTsKICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nW10gYXJncykgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBIZWxsbyBwb3J0ID0gbmV3IEh0dHBUZXN0U2VydmljZSgpLmdldEhlbGxvUG9ydCgpOwotCQlIZWxsb1JlcXVlc3QgcmVxID0gbmV3IEhlbGxvUmVxdWVzdCgpOwotCQlyZXEuc2V0U3RyaW5nKCJGcm9tIFZpamF5ICIpOwotCQlIZWxsb1Jlc3BvbnNlIHJlc3AgPSBwb3J0LmhlbGxvKHJlcSk7Ci0JCWlmKHJlc3AuZ2V0U3RyaW5nKCkuaW5kZXhPZigiRnJvbSBWaWpheSIpID09IC0xKSB7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJlc3AuZ2V0U3RyaW5nKCkpOwotCQkgICAgc3RhdC5hZGRTdGF0dXMoYXJnc1swXSwgc3RhdC5GQUlMKTsKLQkJfQotCQlpZihyZXNwLmdldFN0cmluZygpLmluZGV4T2YoIkhlbGxvMSIpICE9IC0xKSB7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJlc3AuZ2V0U3RyaW5nKCkpOwotCQkgICAgc3RhdC5hZGRTdGF0dXMoYXJnc1swXSwgc3RhdC5GQUlMKTsKLQkJfQotCQlTeXN0ZW0ub3V0LnByaW50bG4ocmVzcC5nZXRTdHJpbmcoKSk7CisgICAgICAgIEhlbGxvUmVxdWVzdCByZXEgPSBuZXcgSGVsbG9SZXF1ZXN0KCk7CisgICAgICAgIHJlcS5zZXRTdHJpbmcoIkZyb20gVmlqYXkgIik7CisgICAgICAgIEhlbGxvUmVzcG9uc2UgcmVzcCA9IHBvcnQuaGVsbG8ocmVxKTsKKyAgICAgICAgaWYocmVzcC5nZXRTdHJpbmcoKS5pbmRleE9mKCJGcm9tIFZpamF5IikgPT0gLTEpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBncmVldGluZyAiICsgcmVzcC5nZXRTdHJpbmcoKSk7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhhcmdzWzBdLCBzdGF0LkZBSUwpOworICAgICAgICB9CisgICAgICAgIGlmKHJlc3AuZ2V0U3RyaW5nKCkuaW5kZXhPZigiSGVsbG8xIikgIT0gLTEpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBncmVldGluZyAiICsgcmVzcC5nZXRTdHJpbmcoKSk7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhhcmdzWzBdLCBzdGF0LkZBSUwpOworICAgICAgICB9CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXNwLmdldFN0cmluZygpKTsKICAgICAgICAgICAgICAgICBIZWxsbzEgcG9ydDEgPSBzZXJ2aWNlLmdldEhlbGxvMVBvcnQoKTsKLQkJSGVsbG8xUmVxdWVzdCByZXExID0gbmV3IEhlbGxvMVJlcXVlc3QoKTsKLQkJcmVxMS5zZXRTdHJpbmcoIkZyb20gVmlqYXkgIik7Ci0JCUhlbGxvMVJlc3BvbnNlIHJlc3AxID0gcG9ydDEuaGVsbG8xKHJlcTEpOwotCQlpZihyZXNwMS5nZXRTdHJpbmcoKS5pbmRleE9mKCJGcm9tIFZpamF5IikgPT0gLTEpIHsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBncmVldGluZyAiICsgcmVzcDEuZ2V0U3RyaW5nKCkpOwotCQkgICAgc3RhdC5hZGRTdGF0dXMoYXJnc1swXSwgc3RhdC5GQUlMKTsKLQkJfQotCQlpZihyZXNwMS5nZXRTdHJpbmcoKS5pbmRleE9mKCJIZWxsbzEiKSA9PSAtMSkgewotCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXNwMS5nZXRTdHJpbmcoKSk7Ci0JCSAgICBzdGF0LmFkZFN0YXR1cyhhcmdzWzBdLCBzdGF0LkZBSUwpOwotCQl9Ci0JCVN5c3RlbS5vdXQucHJpbnRsbihyZXNwMS5nZXRTdHJpbmcoKSk7Ci0JCXN0YXQuYWRkU3RhdHVzKGFyZ3NbMF0sIHN0YXQuUEFTUyk7CisgICAgICAgIEhlbGxvMVJlcXVlc3QgcmVxMSA9IG5ldyBIZWxsbzFSZXF1ZXN0KCk7CisgICAgICAgIHJlcTEuc2V0U3RyaW5nKCJGcm9tIFZpamF5ICIpOworICAgICAgICBIZWxsbzFSZXNwb25zZSByZXNwMSA9IHBvcnQxLmhlbGxvMShyZXExKTsKKyAgICAgICAgaWYocmVzcDEuZ2V0U3RyaW5nKCkuaW5kZXhPZigiRnJvbSBWaWpheSIpID09IC0xKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJlc3AxLmdldFN0cmluZygpKTsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGFyZ3NbMF0sIHN0YXQuRkFJTCk7CisgICAgICAgIH0KKyAgICAgICAgaWYocmVzcDEuZ2V0U3RyaW5nKCkuaW5kZXhPZigiSGVsbG8xIikgPT0gLTEpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBncmVldGluZyAiICsgcmVzcDEuZ2V0U3RyaW5nKCkpOworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoYXJnc1swXSwgc3RhdC5GQUlMKTsKKyAgICAgICAgfQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmVzcDEuZ2V0U3RyaW5nKCkpOworICAgICAgICBzdGF0LmFkZFN0YXR1cyhhcmdzWzBdLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCSAgICBzdGF0LmFkZFN0YXR1cyhhcmdzWzBdLCBzdGF0LkZBSUwpOworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoYXJnc1swXSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KICAgICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL211bHRpcG9ydC9jdXN0b21jbGllbnQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tdWx0aXBvcnQvY3VzdG9tY2xpZW50LnhtbAppbmRleCA3YzMzNzJmLi45OWRmNjMyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL211bHRpcG9ydC9jdXN0b21jbGllbnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXVsdGlwb3J0L2N1c3RvbWNsaWVudC54bWwKQEAgLTIzLDkgKzIzLDkgQEAKICAgICAgICAgPHBhY2thZ2UgbmFtZT0iY2xpZW50Ii8+CiAgICAgPC9iaW5kaW5ncz4KIAotICAgIDxiaW5kaW5ncyBub2RlPSJuczE6ZGVmaW5pdGlvbnMvbnMxOnR5cGVzL3hzOnNjaGVtYVtAdGFyZ2V0TmFtZXNwYWNlPSdodHRwOi8vaHR0cHRlc3RzZXJ2aWNlLm9yZy90eXBlcyddIiAKLQl4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotCXhtbG5zOm5zMT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgorICAgIDxiaW5kaW5ncyBub2RlPSJuczE6ZGVmaW5pdGlvbnMvbnMxOnR5cGVzL3hzOnNjaGVtYVtAdGFyZ2V0TmFtZXNwYWNlPSdodHRwOi8vaHR0cHRlc3RzZXJ2aWNlLm9yZy90eXBlcyddIgorICAgIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKKyAgICB4bWxuczpuczE9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KICAgICAgICAgPG5zMjpzY2hlbWFCaW5kaW5ncyB4bWxuczpuczI9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheGIiPgogICAgICAgICAgICAgPG5zMjpwYWNrYWdlIG5hbWU9ImNsaWVudCIvPgogICAgICAgICA8L25zMjpzY2hlbWFCaW5kaW5ncz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXVsdGlwb3J0L2N1c3RvbXNlcnZpY2UueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tdWx0aXBvcnQvY3VzdG9tc2VydmljZS54bWwKaW5kZXggMjQyNjExYi4uNThjNTVlMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tdWx0aXBvcnQvY3VzdG9tc2VydmljZS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tdWx0aXBvcnQvY3VzdG9tc2VydmljZS54bWwKQEAgLTIzLDkgKzIzLDkgQEAKICAgICAgICAgPHBhY2thZ2UgbmFtZT0ic2VydmljZSIvPgogICAgIDwvYmluZGluZ3M+CiAKLSAgICA8YmluZGluZ3Mgbm9kZT0ibnMxOmRlZmluaXRpb25zL25zMTp0eXBlcy94czpzY2hlbWFbQHRhcmdldE5hbWVzcGFjZT0naHR0cDovL2h0dHB0ZXN0c2VydmljZS5vcmcvdHlwZXMnXSIgCi0JeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLQl4bWxuczpuczE9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KKyAgICA8YmluZGluZ3Mgbm9kZT0ibnMxOmRlZmluaXRpb25zL25zMTp0eXBlcy94czpzY2hlbWFbQHRhcmdldE5hbWVzcGFjZT0naHR0cDovL2h0dHB0ZXN0c2VydmljZS5vcmcvdHlwZXMnXSIKKyAgICB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCisgICAgeG1sbnM6bnMxPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+CiAgICAgICAgIDxuczI6c2NoZW1hQmluZGluZ3MgeG1sbnM6bnMyPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXhiIj4KICAgICAgICAgICAgIDxuczI6cGFja2FnZSBuYW1lPSJzZXJ2aWNlIi8+CiAgICAgICAgIDwvbnMyOnNjaGVtYUJpbmRpbmdzPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tdWx0aXBvcnQvc2VydmljZS9IZWxsbzFJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL211bHRpcG9ydC9zZXJ2aWNlL0hlbGxvMUltcGwuamF2YQppbmRleCBhNTUxYzIzLi4yNjU4NjExIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL211bHRpcG9ydC9zZXJ2aWNlL0hlbGxvMUltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL211bHRpcG9ydC9zZXJ2aWNlL0hlbGxvMUltcGwuamF2YQpAQCAtMzgsOCArMzgsOCBAQAogCiAgICAgcHVibGljIEhlbGxvMVJlc3BvbnNlIGhlbGxvMShIZWxsbzFSZXF1ZXN0IHJlcSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvMSwgIiArIHJlcS5nZXRTdHJpbmcoKSArICIhIik7Ci0JSGVsbG8xUmVzcG9uc2UgcmVzcCA9IG5ldyBIZWxsbzFSZXNwb25zZSgpOwotCXJlc3Auc2V0U3RyaW5nKCJIZWxsbzEsICIgKyByZXEuZ2V0U3RyaW5nKCkgKyAiISIpOworICAgIEhlbGxvMVJlc3BvbnNlIHJlc3AgPSBuZXcgSGVsbG8xUmVzcG9uc2UoKTsKKyAgICByZXNwLnNldFN0cmluZygiSGVsbG8xLCAiICsgcmVxLmdldFN0cmluZygpICsgIiEiKTsKICAgICAgICAgcmV0dXJuIHJlc3A7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tdWx0aXBvcnQvc2VydmljZS9IZWxsb0ltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXVsdGlwb3J0L3NlcnZpY2UvSGVsbG9JbXBsLmphdmEKaW5kZXggODJmNGVmZS4uMjBlMWU1OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tdWx0aXBvcnQvc2VydmljZS9IZWxsb0ltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL211bHRpcG9ydC9zZXJ2aWNlL0hlbGxvSW1wbC5qYXZhCkBAIC0zOCw4ICszOCw4IEBACiAKICAgICBwdWJsaWMgSGVsbG9SZXNwb25zZSBoZWxsbyhIZWxsb1JlcXVlc3QgcmVxKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG8sICIgKyByZXEuZ2V0U3RyaW5nKCkgKyAiISIpOwotCUhlbGxvUmVzcG9uc2UgcmVzcCA9IG5ldyBIZWxsb1Jlc3BvbnNlKCk7Ci0JcmVzcC5zZXRTdHJpbmcoIkhlbGxvLCAiICsgcmVxLmdldFN0cmluZygpICsgIiEiKTsKKyAgICBIZWxsb1Jlc3BvbnNlIHJlc3AgPSBuZXcgSGVsbG9SZXNwb25zZSgpOworICAgIHJlc3Auc2V0U3RyaW5nKCJIZWxsbywgIiArIHJlcS5nZXRTdHJpbmcoKSArICIhIik7CiAgICAgICAgIHJldHVybiByZXNwOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXVsdGlwb3J0L3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL211bHRpcG9ydC93ZWIueG1sCmluZGV4IGYzYjZjYzYuLmFmODI0OGIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbXVsdGlwb3J0L3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9tdWx0aXBvcnQvd2ViLnhtbApAQCAtMTgsNyArMTgsNyBAQAogLS0+CiAKIDx3ZWItYXBwIHZlcnNpb249IjIuNSIgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLSAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAorICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogCiAgIDxkaXNwbGF5LW5hbWU+V1NXMkpSTEh0dHBUZXN0QXBwPC9kaXNwbGF5LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL25vbmFtZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9ub25hbWUvYnVpbGQucHJvcGVydGllcwppbmRleCA2ZWY1MTNhLi40YmM5ZWFiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL25vbmFtZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbm9uYW1lL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9Im5vbmFtZSIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbm9uYW1lL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbm9uYW1lL2J1aWxkLnhtbAppbmRleCBlNzUyYzkyLi43MWY2NTEyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL25vbmFtZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9ub25hbWUvYnVpbGQueG1sCkBAIC00Nyw3ICs0Nyw3IEBACiAgICAgICAgIDxwYXJhbSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9IiR7YXBwbmFtZX0iLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY2xpZW50Ii8+CkBAIC0xMzEsNiArMTMxLDYgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0icmVwb3J0LWZhaWx1cmUiPgogICAgICAgICAgICAgPGVjaG8gbWVzc2FnZT0iVGVzdCBGQUlMRUQiLz4KLSAgICA8L3RhcmdldD4gICAJCi0gICAgCisgICAgPC90YXJnZXQ+CisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbm9uYW1lL2NsaWVudC13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9ub25hbWUvY2xpZW50LXdlYi54bWwKaW5kZXggMDI3ZGZjZS4uYjRiYmY1YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9ub25hbWUvY2xpZW50LXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9ub25hbWUvY2xpZW50LXdlYi54bWwKQEAgLTIwLDcgKzIwLDcgQEAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0gICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSAKKyAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KICAgPGRlc2NyaXB0aW9uPkEgdGVzdCBhcHBsaWNhdGlvbjwvZGVzY3JpcHRpb24+CiAgIDxkaXNwbGF5LW5hbWU+V2ViVGllcjwvZGlzcGxheS1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9ub25hbWUvY2xpZW50L1Rlc3RDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbm9uYW1lL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKaW5kZXggZTdlZTRhMi4uNjBkZjc2ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9ub25hbWUvY2xpZW50L1Rlc3RDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL25vbmFtZS9jbGllbnQvVGVzdENsaWVudC5qYXZhCkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnQgY29kZSA9IGludm9rZVNlcnZsZXQodXJsKTsKICAgICAgICAgICAgIHJlcG9ydChjb2RlKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICB9CkBAIC02Myw5ICs2Myw5IEBACiAgICAgICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgICAgICAgIGxvZyhsaW5lKTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiU28gdGhlIFJFU1VMVCBPRiBIRUxMTyBTRVJWSUNFIElTIikgIT0gLTEpCi0JCWZvdW5kMSA9IHRydWU7CisgICAgICAgIGZvdW5kMSA9IHRydWU7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIldlYlN2Y1Rlc3QtSGVsbG8gQWxsIikgIT0gLTEpCi0JCWZvdW5kMiA9IHRydWU7CisgICAgICAgIGZvdW5kMiA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNvZGU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9ub25hbWUvZW5kcG9pbnQvSGVsbG8uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbm9uYW1lL2VuZHBvaW50L0hlbGxvLmphdmEKaW5kZXggMjRhNzhkMS4uNTQ2NmVkYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9ub25hbWUvZW5kcG9pbnQvSGVsbG8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL25vbmFtZS9lbmRwb2ludC9IZWxsby5qYXZhCkBAIC0yMCw4ICsyMCw4IEBACiAKIEBXZWJTZXJ2aWNlCiBwdWJsaWMgY2xhc3MgSGVsbG8gewotCQorCiAgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgcGFyYW0pIHsKLQlyZXR1cm4gIldlYlN2Y1Rlc3QtSGVsbG8gIiArIHBhcmFtOworICAgIHJldHVybiAiV2ViU3ZjVGVzdC1IZWxsbyAiICsgcGFyYW07CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9ub25hbWUvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbm9uYW1lL3dlYi54bWwKaW5kZXggZjUxY2NjMC4uNTY0Y2Q0ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9ub25hbWUvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL25vbmFtZS93ZWIueG1sCkBAIC0xOCwzMCArMTgsMzAgQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKLQkJCWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgorICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKKyAgICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogCi0JPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBIZWxsbyBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQk8ZGlzcGxheS1uYW1lPkhlbGxvV0FSPC9kaXNwbGF5LW5hbWU+CisgICAgPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBIZWxsbyBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICA8ZGlzcGxheS1uYW1lPkhlbGxvV0FSPC9kaXNwbGF5LW5hbWU+CiAKLQk8c2VydmxldD4KLQkJPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBIZWxsbyBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JCTxkaXNwbGF5LW5hbWU+SGVsbG9XZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+Ci0JCTxzZXJ2bGV0LW5hbWU+SGVsbG88L3NlcnZsZXQtbmFtZT4KLQkJPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuSGVsbG88L3NlcnZsZXQtY2xhc3M+Ci0JCTxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgotCTwvc2VydmxldD4KKyAgICA8c2VydmxldD4KKyAgICAgICAgPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBIZWxsbyBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgICAgIDxkaXNwbGF5LW5hbWU+SGVsbG9XZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+SGVsbG88L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuSGVsbG88L3NlcnZsZXQtY2xhc3M+CisgICAgICAgIDxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgorICAgIDwvc2VydmxldD4KIAotCTxzZXJ2bGV0LW1hcHBpbmc+Ci0JCTxzZXJ2bGV0LW5hbWU+SGVsbG88L3NlcnZsZXQtbmFtZT4KLQkJPHVybC1wYXR0ZXJuPi9IZWxsb1NlcnZpY2U8L3VybC1wYXR0ZXJuPgotCTwvc2VydmxldC1tYXBwaW5nPgorICAgIDxzZXJ2bGV0LW1hcHBpbmc+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+SGVsbG88L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHVybC1wYXR0ZXJuPi9IZWxsb1NlcnZpY2U8L3VybC1wYXR0ZXJuPgorICAgIDwvc2VydmxldC1tYXBwaW5nPgogCi0JPHNlc3Npb24tY29uZmlnPgotCQk8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+Ci0JPC9zZXNzaW9uLWNvbmZpZz4KKyAgICA8c2Vzc2lvbi1jb25maWc+CisgICAgICAgIDxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KKyAgICA8L3Nlc3Npb24tY29uZmlnPgogCiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbm9uYW1lL3dlYmNsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbm9uYW1lL3dlYmNsaWVudC9DbGllbnQuamF2YQppbmRleCAxOTcyYzU5Li5jMDIxNjI1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL25vbmFtZS93ZWJjbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9ub25hbWUvd2ViY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMSwxNCArMzEsMTQgQEAKICAgICAgICAgSGVsbG9TZXJ2aWNlIHNlcnZpY2U7CiAKICAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCi0JCXRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CisgICAgICAgIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgICAgIGRvUG9zdChyZXEsIHJlc3ApOwogICAgICAgIH0KIAogICAgICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCiAgICAgICAgICAgICAgIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBIZWxsbyBwb3J0ID0gc2VydmljZS5nZXRIZWxsb1BvcnQoKTsKIAogICAgICAgICAgICAgICAgIFN0cmluZyByZXQgPSBwb3J0LnNheUhlbGxvKCJBbGwiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbm9uYW1lMi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9ub25hbWUyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYWQyZDRjYS4uNzg5NWUyZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9ub25hbWUyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9ub25hbWUyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9Im5vbmFtZTIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL25vbmFtZTIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9ub25hbWUyL2J1aWxkLnhtbAppbmRleCAyMjdhZWE0Li4zODEwNmI4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL25vbmFtZTIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbm9uYW1lMi9idWlsZC54bWwKQEAgLTY4LDcgKzY4LDcgQEAKICAgICAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iaHR0cDovLyR7aHR0cC5ob3N0fToke2h0dHAucG9ydH0vd3NjbGllbnQvUmVxdWVzdFByb2Nlc3NvciIvPgogICAgICAgICAgIDwvamF2YT4KLSAgICAgICAgPCEtLXJlc3RvcmUgdGhlIHRva2VucyBiYWNrIGluIGZpbGUtLT4gCisgICAgICAgIDwhLS1yZXN0b3JlIHRoZSB0b2tlbnMgYmFjayBpbiBmaWxlLS0+CiAgICAgICAgICA8cmVwbGFjZSBmaWxlPSJ3ZWJjbGllbnQvQ2xpZW50LmphdmEiIHRva2VuPSIke2h0dHAuaG9zdH0iIHZhbHVlPSJIVFRQX0hPU1QiLz4KICAgICAgICAgIDxyZXBsYWNlIGZpbGU9IndlYmNsaWVudC9DbGllbnQuamF2YSIgdG9rZW49IiR7aHR0cC5wb3J0fSIgdmFsdWU9IkhUVFBfUE9SVCIvPgogICAgICAgICA8L3RhcmdldD4KQEAgLTE0MSw1ICsxNDEsNSBAQAogCiAgICAgPC9wcm9qZWN0PgogCi0gICAgCi0gICAKKworCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL25vbmFtZTIvY2xpZW50LXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL25vbmFtZTIvY2xpZW50LXdlYi54bWwKaW5kZXggMDI3ZGZjZS4uYjRiYmY1YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9ub25hbWUyL2NsaWVudC13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbm9uYW1lMi9jbGllbnQtd2ViLnhtbApAQCAtMjAsNyArMjAsNyBAQAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLSAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIAorICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogICA8ZGVzY3JpcHRpb24+QSB0ZXN0IGFwcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KICAgPGRpc3BsYXktbmFtZT5XZWJUaWVyPC9kaXNwbGF5LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL25vbmFtZTIvY2xpZW50L1Rlc3RDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbm9uYW1lMi9jbGllbnQvVGVzdENsaWVudC5qYXZhCmluZGV4IDZhOWE1YmEuLjdmMTNlOTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbm9uYW1lMi9jbGllbnQvVGVzdENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbm9uYW1lMi9jbGllbnQvVGVzdENsaWVudC5qYXZhCkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnQgY29kZSA9IGludm9rZVNlcnZsZXQodXJsKTsKICAgICAgICAgICAgIHJlcG9ydChjb2RlKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL25vbmFtZTIvZW5kcG9pbnQvSGVsbG8yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL25vbmFtZTIvZW5kcG9pbnQvSGVsbG8yLmphdmEKaW5kZXggNGFlZjkyMi4uNzA1YmNkYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9ub25hbWUyL2VuZHBvaW50L0hlbGxvMi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbm9uYW1lMi9lbmRwb2ludC9IZWxsbzIuamF2YQpAQCAtMjQsOCArMjQsOCBAQAogICAgIHBvcnROYW1lPSJIZWxsbyIKICkKIHB1YmxpYyBjbGFzcyBIZWxsbzIgewotCQorCiAgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgcGFyYW0pIHsKLQlyZXR1cm4gIldlYlN2Y1Rlc3QtSGVsbG8gIiArIHBhcmFtOworICAgIHJldHVybiAiV2ViU3ZjVGVzdC1IZWxsbyAiICsgcGFyYW07CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9ub25hbWUyL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL25vbmFtZTIvd2ViLnhtbAppbmRleCAwYzQ1OGY0Li5hODJkY2MwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL25vbmFtZTIvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL25vbmFtZTIvd2ViLnhtbApAQCAtMTgsMzAgKzE4LDMwIEBACiAtLT4KIAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCi0JCQlodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KKyAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCisgICAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KIAotCTxkZXNjcmlwdGlvbj5XZWJUaWVyIGZvciB0aGUgSGVsbG8gU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JPGRpc3BsYXktbmFtZT5IZWxsb1dBUjwvZGlzcGxheS1uYW1lPgorICAgIDxkZXNjcmlwdGlvbj5XZWJUaWVyIGZvciB0aGUgSGVsbG8gU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgPGRpc3BsYXktbmFtZT5IZWxsb1dBUjwvZGlzcGxheS1uYW1lPgogCi0JPHNlcnZsZXQ+Ci0JCTxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgSGVsbG8gV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCQk8ZGlzcGxheS1uYW1lPkhlbGxvV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgotCQk8c2VydmxldC1uYW1lPkhlbGxvPC9zZXJ2bGV0LW5hbWU+Ci0JCTxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkhlbGxvMjwvc2VydmxldC1jbGFzcz4KLQkJPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+Ci0JPC9zZXJ2bGV0PgorICAgIDxzZXJ2bGV0PgorICAgICAgICA8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIEhlbGxvIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgPGRpc3BsYXktbmFtZT5IZWxsb1dlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5IZWxsbzwvc2VydmxldC1uYW1lPgorICAgICAgICA8c2VydmxldC1jbGFzcz5lbmRwb2ludC5IZWxsbzI8L3NlcnZsZXQtY2xhc3M+CisgICAgICAgIDxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgorICAgIDwvc2VydmxldD4KIAotCTxzZXJ2bGV0LW1hcHBpbmc+Ci0JCTxzZXJ2bGV0LW5hbWU+SGVsbG88L3NlcnZsZXQtbmFtZT4KLQkJPHVybC1wYXR0ZXJuPi9IZWxsb1NlcnZpY2U8L3VybC1wYXR0ZXJuPgotCTwvc2VydmxldC1tYXBwaW5nPgorICAgIDxzZXJ2bGV0LW1hcHBpbmc+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+SGVsbG88L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHVybC1wYXR0ZXJuPi9IZWxsb1NlcnZpY2U8L3VybC1wYXR0ZXJuPgorICAgIDwvc2VydmxldC1tYXBwaW5nPgogCi0JPHNlc3Npb24tY29uZmlnPgotCQk8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+Ci0JPC9zZXNzaW9uLWNvbmZpZz4KKyAgICA8c2Vzc2lvbi1jb25maWc+CisgICAgICAgIDxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KKyAgICA8L3Nlc3Npb24tY29uZmlnPgogCiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbm9uYW1lMi93ZWJjbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL25vbmFtZTIvd2ViY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGZkN2JkNjAuLjE3YWIyNDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbm9uYW1lMi93ZWJjbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9ub25hbWUyL3dlYmNsaWVudC9DbGllbnQuamF2YQpAQCAtMzEsMTQgKzMxLDE0IEBACiAgICAgICAgIEhlbGxvU2VydmljZSBzZXJ2aWNlOwogCiAgICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQotCQl0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24geworICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICAgICBkb1Bvc3QocmVxLCByZXNwKTsKICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQogICAgICAgICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgSGVsbG8gcG9ydCA9IHNlcnZpY2UuZ2V0SGVsbG8oKTsKIAogICAgICAgICAgICAgICAgIFN0cmluZyByZXQgPSBwb3J0LnNheUhlbGxvKCJBbGwiKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbm93ZWJ4bWwvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbm93ZWJ4bWwvYnVpbGQucHJvcGVydGllcwppbmRleCA5MWU5MTI1Li40NGU2ODJhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL25vd2VieG1sL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9ub3dlYnhtbC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw4ICsxNSw4IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJub3dlYnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbm93ZWJ4bWwvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9ub3dlYnhtbC9idWlsZC54bWwKaW5kZXggNWJkMzRmZC4uNWE0MzZlNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9ub3dlYnhtbC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9ub3dlYnhtbC9idWlsZC54bWwKQEAgLTczLDcgKzczLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW5jbGllbnQiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4tY2xpZW50Ij4KICAgICAgICAgPHBhcmFtIG5hbWU9ImNsaWVudC1jbGFzcyIgdmFsdWU9ImNsaWVudC5DbGllbnQiLz4KQEAgLTgxLDcgKzgxLDcgQEAKICAgICAgIDwvYW50Y2FsbD4KIAogCi08IS0tcmVzdG9yZSB0aGUgdG9rZW5zIGJhY2sgaW4gZmlsZS0tPiAKKzwhLS1yZXN0b3JlIHRoZSB0b2tlbnMgYmFjayBpbiBmaWxlLS0+CiAgICAgICAgICA8cmVwbGFjZSBmaWxlPSJjbGllbnQvQ2xpZW50LmphdmEiIHRva2VuPSIke2h0dHAuaG9zdH0iIHZhbHVlPSJIVFRQX0hPU1QiLz4KICAgICAgICAgIDxyZXBsYWNlIGZpbGU9ImNsaWVudC9DbGllbnQuamF2YSIgdG9rZW49IiR7aHR0cC5wb3J0fSIgdmFsdWU9IkhUVFBfUE9SVCIvPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9ub3dlYnhtbC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL25vd2VieG1sL2NsaWVudC9DbGllbnQuamF2YQppbmRleCAwZjY3ZmQyLi5kY2I0ZmU4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL25vd2VieG1sL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL25vd2VieG1sL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzIsMzggKzMyLDM4IEBACiAgICAgICAgIHN0YXRpYyBIZWxsb1NlcnZpY2Ugc2VydmljZTsKIAogICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oInNlcnZpY2Utd2l0aC1uby13ZWJ4bWwiKTsKKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigic2VydmljZS13aXRoLW5vLXdlYnhtbCIpOwogICAgICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKICAgICAgICAgICAgIGNsaWVudC5kb1Rlc3QoYXJncyk7Ci0JICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJzZXJ2aWNlLXdpdGgtbm8td2VieG1sIik7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJzZXJ2aWNlLXdpdGgtbm8td2VieG1sIik7CiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgSGVsbG8gcG9ydCA9IHNlcnZpY2UuZ2V0SGVsbG9Qb3J0KCk7CiAgICAgICAgICAgICAgICAgU3RyaW5nIHJldCA9IHBvcnQuc2F5SGVsbG8oIkFwcHNlcnZlciBUZXN0ZXIgISIgKyBhcmdzWzBdKTsKLQkJaWYocmV0LmluZGV4T2YoIldlYlN2Y1Rlc3QtSGVsbG8iKSA9PSAtMSkgeworICAgICAgICBpZihyZXQuaW5kZXhPZigiV2ViU3ZjVGVzdC1IZWxsbyIpID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBncmVldGluZyAiICsgcmV0KTsKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoYXJnc1swXSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCQl9Ci0JCWlmKHJldC5pbmRleE9mKGFyZ3NbMF0pID09IC0xKSB7CisgICAgICAgIH0KKyAgICAgICAgaWYocmV0LmluZGV4T2YoYXJnc1swXSkgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXQpOwogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhhcmdzWzBdLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0JCX0KKyAgICAgICAgfQogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXQpOwogICAgICAgICAgICAgICAgIHJldCA9IHBvcnQuc2F5RG91YmxlSGVsbG8oIkFwcHNlcnZlciBUZXN0ZXIgISIgKyBhcmdzWzBdKTsKLQkJaWYocmV0LmluZGV4T2YoIldlYlN2Y1Rlc3QtRG91YmxlLUhlbGxvIikgPT0gLTEpIHsKKyAgICAgICAgaWYocmV0LmluZGV4T2YoIldlYlN2Y1Rlc3QtRG91YmxlLUhlbGxvIikgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXQpOwogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhhcmdzWzBdLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0JCX0KLQkJaWYocmV0LmluZGV4T2YoYXJnc1swXSkgPT0gLTEpIHsKKyAgICAgICAgfQorICAgICAgICBpZihyZXQuaW5kZXhPZihhcmdzWzBdKSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJldCk7CiAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGFyZ3NbMF0sIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQkJfQorICAgICAgICB9CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJldCk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoYXJnc1swXSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbm93ZWJ4bWwvZW5kcG9pbnQvSGVsbG8uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvbm93ZWJ4bWwvZW5kcG9pbnQvSGVsbG8uamF2YQppbmRleCAyZTBlMGFlLi45NGYxMDIxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL25vd2VieG1sL2VuZHBvaW50L0hlbGxvLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9ub3dlYnhtbC9lbmRwb2ludC9IZWxsby5qYXZhCkBAIC0yNSwxNSArMjUsMTUgQEAKICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9leGFtcGxlLmNvbS9IZWxsbyIKICkKIHB1YmxpYyBjbGFzcyBIZWxsbyB7Ci0JcHVibGljIEhlbGxvKCkge30KKyAgICBwdWJsaWMgSGVsbG8oKSB7fQogCi0JQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJzYXlIZWxsbyIsIGFjdGlvbj0idXJuOlNheUhlbGxvIikKLQlwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyB3aG8pIHsKLQkJcmV0dXJuICJXZWJTdmNUZXN0LUhlbGxvICIgKyB3aG87Ci0JfQorICAgIEBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0ic2F5SGVsbG8iLCBhY3Rpb249InVybjpTYXlIZWxsbyIpCisgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgd2hvKSB7CisgICAgICAgIHJldHVybiAiV2ViU3ZjVGVzdC1IZWxsbyAiICsgd2hvOworICAgIH0KIAotCUBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0ic2F5RG91YmxlSGVsbG8iLCBhY3Rpb249InVybjpTYXlIZWxsbyIpCi0JcHVibGljIFN0cmluZyBzYXlEb3VibGVIZWxsbyhTdHJpbmcgd2hvKSB7Ci0JCXJldHVybiAiV2ViU3ZjVGVzdC1Eb3VibGUtSGVsbG8gIiArIHdobyArICIgQU5EICIgKyB3aG87Ci0JfQorICAgIEBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0ic2F5RG91YmxlSGVsbG8iLCBhY3Rpb249InVybjpTYXlIZWxsbyIpCisgICAgcHVibGljIFN0cmluZyBzYXlEb3VibGVIZWxsbyhTdHJpbmcgd2hvKSB7CisgICAgICAgIHJldHVybiAiV2ViU3ZjVGVzdC1Eb3VibGUtSGVsbG8gIiArIHdobyArICIgQU5EICIgKyB3aG87CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9vbmV3YXkvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvb25ld2F5L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNzMzOGNlZS4uNmI5MzY1MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9vbmV3YXkvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL29uZXdheS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJvbmV3YXkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL29uZXdheS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL29uZXdheS9idWlsZC54bWwKaW5kZXggYTVkZjgyYy4uZDRhZWEzYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9vbmV3YXkvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvb25ld2F5L2J1aWxkLnhtbApAQCAtNjgsNyArNjgsNyBAQAogICAgICAgICAgICAgPC9jbGFzc3BhdGg+CiAgICAgICAgICAgICA8YXJnIHZhbHVlPSJodHRwOi8vJHtodHRwLmhvc3R9OiR7aHR0cC5wb3J0fS93c2NsaWVudC9SZXF1ZXN0UHJvY2Vzc29yIi8+CiAgICAgICAgICAgPC9qYXZhPgotICAgICAgICAgIDwhLS1yZXN0b3JlIHRoZSB0b2tlbnMgYmFjayBpbiBmaWxlLS0+IAorICAgICAgICAgIDwhLS1yZXN0b3JlIHRoZSB0b2tlbnMgYmFjayBpbiBmaWxlLS0+CiAgICAgICAgICAgPHJlcGxhY2UgZmlsZT0id2ViY2xpZW50L0NsaWVudC5qYXZhIiB0b2tlbj0iJHtodHRwLmhvc3R9IiB2YWx1ZT0iSFRUUF9IT1NUIi8+CiAgICAgICAgICAgPHJlcGxhY2UgZmlsZT0id2ViY2xpZW50L0NsaWVudC5qYXZhIiB0b2tlbj0iJHtodHRwLnBvcnR9IiB2YWx1ZT0iSFRUUF9QT1JUIi8+CiAgICAgICAgIDwvdGFyZ2V0PgpAQCAtMTU0LDcgKzE1NCw3IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi1jbGllbnQiPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJEZXBsb3llZCBwYXNzZWQiLz4KLSAgICA8L3RhcmdldD4JCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlcG9ydC1zdWNjZXNzIj4KICAgICAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IlRlc3QgUEFTU0VEIi8+CkBAIC0xNjIsNyArMTYyLDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0icmVwb3J0LWZhaWx1cmUiPgogICAgICAgICAgICAgPGVjaG8gbWVzc2FnZT0iVGVzdCBGQUlMRUQiLz4KLSAgICA8L3RhcmdldD4gICAJCi0gICAgCisgICAgPC90YXJnZXQ+CisKIDwvcHJvamVjdD4KIC0tPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9vbmV3YXkvY2xpZW50LXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL29uZXdheS9jbGllbnQtd2ViLnhtbAppbmRleCAwMjdkZmNlLi5iNGJiZjViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL29uZXdheS9jbGllbnQtd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL29uZXdheS9jbGllbnQtd2ViLnhtbApAQCAtMjAsNyArMjAsNyBAQAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLSAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIAorICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogICA8ZGVzY3JpcHRpb24+QSB0ZXN0IGFwcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KICAgPGRpc3BsYXktbmFtZT5XZWJUaWVyPC9kaXNwbGF5LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL29uZXdheS9jbGllbnQvVGVzdENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9vbmV3YXkvY2xpZW50L1Rlc3RDbGllbnQuamF2YQppbmRleCA2MTU4NzZjLi5kM2UzOWIxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL29uZXdheS9jbGllbnQvVGVzdENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvb25ld2F5L2NsaWVudC9UZXN0Q2xpZW50LmphdmEKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludCBjb2RlID0gaW52b2tlU2VydmxldCh1cmwpOwogICAgICAgICAgICAgcmVwb3J0KGNvZGUpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KQEAgLTYwLDcgKzYwLDcgQEAKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBjMS5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlciAobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CiAgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKLSAgICAgICAKKwogICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICBsb2cobGluZSk7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIlNvIHRoZSBSRVNVTFQgT0YgSEVMTE8gU0VSVklDRSBJUyIpICE9IC0xKQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9vbmV3YXkvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvb25ld2F5L3dlYi54bWwKaW5kZXggZDRlZTRiNS4uMjdmOWYyMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9vbmV3YXkvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL29uZXdheS93ZWIueG1sCkBAIC0xOCwzMCArMTgsMzAgQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKLQkJCWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgorICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKKyAgICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogCi0JPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBIZWxsbyBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQk8ZGlzcGxheS1uYW1lPkhlbGxvV0FSPC9kaXNwbGF5LW5hbWU+CisgICAgPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBIZWxsbyBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICA8ZGlzcGxheS1uYW1lPkhlbGxvV0FSPC9kaXNwbGF5LW5hbWU+CiAKLQk8c2VydmxldD4KLQkJPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBIZWxsbyBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JCTxkaXNwbGF5LW5hbWU+SGVsbG9XZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+Ci0JCTxzZXJ2bGV0LW5hbWU+SGVsbG88L3NlcnZsZXQtbmFtZT4KLQkJPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuSGVsbG88L3NlcnZsZXQtY2xhc3M+Ci0JCTxsb2FkLW9uLXN0YXJ0dXA+MTwvbG9hZC1vbi1zdGFydHVwPgotCTwvc2VydmxldD4KKyAgICA8c2VydmxldD4KKyAgICAgICAgPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBIZWxsbyBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgICAgIDxkaXNwbGF5LW5hbWU+SGVsbG9XZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+SGVsbG88L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuSGVsbG88L3NlcnZsZXQtY2xhc3M+CisgICAgICAgIDxsb2FkLW9uLXN0YXJ0dXA+MTwvbG9hZC1vbi1zdGFydHVwPgorICAgIDwvc2VydmxldD4KIAotCTxzZXJ2bGV0LW1hcHBpbmc+Ci0JCTxzZXJ2bGV0LW5hbWU+SGVsbG88L3NlcnZsZXQtbmFtZT4KLQkJPHVybC1wYXR0ZXJuPi9IZWxsb1NlcnZpY2U8L3VybC1wYXR0ZXJuPgotCTwvc2VydmxldC1tYXBwaW5nPgorICAgIDxzZXJ2bGV0LW1hcHBpbmc+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+SGVsbG88L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHVybC1wYXR0ZXJuPi9IZWxsb1NlcnZpY2U8L3VybC1wYXR0ZXJuPgorICAgIDwvc2VydmxldC1tYXBwaW5nPgogCi0JPHNlc3Npb24tY29uZmlnPgotCQk8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+Ci0JPC9zZXNzaW9uLWNvbmZpZz4KKyAgICA8c2Vzc2lvbi1jb25maWc+CisgICAgICAgIDxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KKyAgICA8L3Nlc3Npb24tY29uZmlnPgogCiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvb25ld2F5L3dlYmNsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvb25ld2F5L3dlYmNsaWVudC9DbGllbnQuamF2YQppbmRleCA1MzM3MjM2Li4zZTdiODhiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL29uZXdheS93ZWJjbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9vbmV3YXkvd2ViY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiAgICAgICAgIEhlbGxvU2VydmljZSBzZXJ2aWNlOwogCiAgICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQotCQl0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24geworICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICAgICBkb1Bvc3QocmVxLCByZXNwKTsKICAgICAgICB9CiAKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgICAgICAgdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgICAgU3RyaW5nIHJldD0iT25ld2F5IHdvcmtzIjsKICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIEhlbGxvIHBvcnQgPSBzZXJ2aWNlLmdldEhlbGxvUG9ydCgpOwogCiAgICAgICAgICAgICAgICAgcG9ydC5zYXlIZWxsbygiQWxsIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3BrZ2Vkd2Fyc2VydmljZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wa2dlZHdhcnNlcnZpY2UvYnVpbGQucHJvcGVydGllcwppbmRleCAyZGMxNmNkLi43YjA3NzBjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3BrZ2Vkd2Fyc2VydmljZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcGtnZWR3YXJzZXJ2aWNlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0icGtnaGVsbG8iLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9Ii4vd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iLi9zdW4td2ViLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wa2dlZHdhcnNlcnZpY2UvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wa2dlZHdhcnNlcnZpY2UvYnVpbGQueG1sCmluZGV4IGMxODUyMzQuLjJlZGU2ZDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcGtnZWR3YXJzZXJ2aWNlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3BrZ2Vkd2Fyc2VydmljZS9idWlsZC54bWwKQEAgLTg4LDE0ICs4OCwxNCBAQAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bmNsaWVudCI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi1jbGllbnQiPgogICAgICAgICA8cGFyYW0gbmFtZT0iY2xpZW50LWNsYXNzIiB2YWx1ZT0iY2xpZW50LkNsaWVudCIvPgogICAgICAgICA8cGFyYW0gbmFtZT0ib3RoZXItYXJncyIgdmFsdWU9Indhci13aXRoLXBhY2thZ2VkLXdzZGwtYW5kLXNjaGVtYSIvPgogICAgICAgPC9hbnRjYWxsPgogCi08IS0tcmVzdG9yZSB0aGUgdG9rZW5zIGJhY2sgaW4gZmlsZS0tPiAKKzwhLS1yZXN0b3JlIHRoZSB0b2tlbnMgYmFjayBpbiBmaWxlLS0+CiAgICAgICAgICA8cmVwbGFjZSBmaWxlPSJjbGllbnQvQ2xpZW50LmphdmEiIHRva2VuPSIke2h0dHAuaG9zdH0iIHZhbHVlPSJIVFRQX0hPU1QiLz4KICAgICAgICAgIDxyZXBsYWNlIGZpbGU9ImNsaWVudC9DbGllbnQuamF2YSIgdG9rZW49IiR7aHR0cC5wb3J0fSIgdmFsdWU9IkhUVFBfUE9SVCIvPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wa2dlZHdhcnNlcnZpY2UvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wa2dlZHdhcnNlcnZpY2UvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGMyNzA2NDguLjJhOTUwOTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcGtnZWR3YXJzZXJ2aWNlL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3BrZ2Vkd2Fyc2VydmljZS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTMyLDEwICszMiwxMCBAQAogICAgICAgICBzdGF0aWMgSGVsbG9TZXJ2aWNlIHNlcnZpY2U7CiAKICAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCSAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ3ZWJzZXJ2aWNlcy1zaW1wbGUtYW5ub3RhdGlvbiIpOworICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ3ZWJzZXJ2aWNlcy1zaW1wbGUtYW5ub3RhdGlvbiIpOwogICAgICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKICAgICAgICAgICAgIGNsaWVudC5kb1Rlc3QoYXJncyk7Ci0JICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3ZWJzZXJ2aWNlcy1hbm5vdGF0aW9uIik7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3ZWJzZXJ2aWNlcy1hbm5vdGF0aW9uIik7CiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTQzLDE2ICs0MywxNiBAQAogICAgICAgICAgICAgICAgIEhlbGxvIHBvcnQgPSBzZXJ2aWNlLmdldE15UG9ydCgpOwogICAgICAgICAgICAgICAgIGZvciAoaW50IGk9MDtpPDEwO2krKykgewogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcmV0ID0gcG9ydC5zYXlIZWxsbygiQXBwc2VydmVyIFRlc3RlciAhIiArIGFyZ3NbMF0pOwotCQkgICAgaWYocmV0LmluZGV4T2YoIldlYlN2Y1Rlc3QtSGVsbG8iKSA9PSAtMSkgeworICAgICAgICAgICAgaWYocmV0LmluZGV4T2YoIldlYlN2Y1Rlc3QtSGVsbG8iKSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoYXJnc1swXSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQkJICAgIH0KLQkJICAgIGlmKHJldC5pbmRleE9mKGFyZ3NbMF0pID09IC0xKSB7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZihyZXQuaW5kZXhPZihhcmdzWzBdKSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoYXJnc1swXSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQkJICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJldCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGFyZ3NbMF0sIHN0YXQuUEFTUyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3BrZ2Vkd2Fyc2VydmljZS9lbmRwb2ludC9IZWxsby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wa2dlZHdhcnNlcnZpY2UvZW5kcG9pbnQvSGVsbG8uamF2YQppbmRleCA1OGYyMzM2Li4xMjdiY2MwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3BrZ2Vkd2Fyc2VydmljZS9lbmRwb2ludC9IZWxsby5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcGtnZWR3YXJzZXJ2aWNlL2VuZHBvaW50L0hlbGxvLmphdmEKQEAgLTI3LDEwICsyNywxMCBAQAogICAgIHdzZGxMb2NhdGlvbj0iV0VCLUlORi93c2RsL0hlbGxvU2VydmljZS53c2RsIgogKQogcHVibGljIGNsYXNzIEhlbGxvIHsKLQlwdWJsaWMgSGVsbG8oKSB7fQorICAgIHB1YmxpYyBIZWxsbygpIHt9CiAKLQlAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9InNheUhlbGxvIiwgYWN0aW9uPSJ1cm46U2F5SGVsbG8iKQotCXB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIHdobykgewotCQlyZXR1cm4gIldlYlN2Y1Rlc3QtSGVsbG8gIiArIHdobzsKLQl9CisgICAgQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJzYXlIZWxsbyIsIGFjdGlvbj0idXJuOlNheUhlbGxvIikKKyAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyB3aG8pIHsKKyAgICAgICAgcmV0dXJuICJXZWJTdmNUZXN0LUhlbGxvICIgKyB3aG87CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wa2dlZHdhcnNlcnZpY2Uvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcGtnZWR3YXJzZXJ2aWNlL3dlYi54bWwKaW5kZXggMzdjZTE4Mi4uY2M2NDExZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wa2dlZHdhcnNlcnZpY2Uvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3BrZ2Vkd2Fyc2VydmljZS93ZWIueG1sCkBAIC0xOCwzMCArMTgsMzAgQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKLQkJCWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgorICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKKyAgICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogCi0JPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBIZWxsbyBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQk8ZGlzcGxheS1uYW1lPkhlbGxvV0FSPC9kaXNwbGF5LW5hbWU+CisgICAgPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBIZWxsbyBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICA8ZGlzcGxheS1uYW1lPkhlbGxvV0FSPC9kaXNwbGF5LW5hbWU+CiAKLQk8c2VydmxldD4KLQkJPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBIZWxsbyBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JCTxkaXNwbGF5LW5hbWU+SGVsbG9XZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+Ci0JCTxzZXJ2bGV0LW5hbWU+SGVsbG88L3NlcnZsZXQtbmFtZT4KLQkJPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuSGVsbG88L3NlcnZsZXQtY2xhc3M+Ci0JCTxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgotCTwvc2VydmxldD4KKyAgICA8c2VydmxldD4KKyAgICAgICAgPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBIZWxsbyBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgICAgIDxkaXNwbGF5LW5hbWU+SGVsbG9XZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+SGVsbG88L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuSGVsbG88L3NlcnZsZXQtY2xhc3M+CisgICAgICAgIDxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgorICAgIDwvc2VydmxldD4KIAotCTxzZXJ2bGV0LW1hcHBpbmc+Ci0JCTxzZXJ2bGV0LW5hbWU+SGVsbG88L3NlcnZsZXQtbmFtZT4KLQkJPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL0hlbGxvU2VydmljZTwvdXJsLXBhdHRlcm4+Ci0JPC9zZXJ2bGV0LW1hcHBpbmc+CisgICAgPHNlcnZsZXQtbWFwcGluZz4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5IZWxsbzwvc2VydmxldC1uYW1lPgorICAgICAgICA8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvSGVsbG9TZXJ2aWNlPC91cmwtcGF0dGVybj4KKyAgICA8L3NlcnZsZXQtbWFwcGluZz4KIAotCTxzZXNzaW9uLWNvbmZpZz4KLQkJPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgotCTwvc2Vzc2lvbi1jb25maWc+CisgICAgPHNlc3Npb24tY29uZmlnPgorICAgICAgICA8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+CisgICAgPC9zZXNzaW9uLWNvbmZpZz4KIAogPC93ZWItYXBwPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Bvc3Rjb25zdHJ1Y3QvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcG9zdGNvbnN0cnVjdC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGM5NDRjYmMuLmU0MDc2ZGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcG9zdGNvbnN0cnVjdC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcG9zdGNvbnN0cnVjdC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJwb3N0Y29uc3RydWN0Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wb3N0Y29uc3RydWN0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcG9zdGNvbnN0cnVjdC9idWlsZC54bWwKaW5kZXggNmE1MmMzZi4uZDNjYzFhZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wb3N0Y29uc3RydWN0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Bvc3Rjb25zdHJ1Y3QvYnVpbGQueG1sCkBAIC02OSw3ICs2OSw3IEBACiAgICAgICAgICAgICA8YXJnIHZhbHVlPSJodHRwOi8vJHtodHRwLmhvc3R9OiR7aHR0cC5wb3J0fS93c2NsaWVudC9SZXF1ZXN0UHJvY2Vzc29yIi8+CiAgICAgICAgICAgPC9qYXZhPgogCi0gICAgICAgICA8IS0tcmVzdG9yZSB0aGUgdG9rZW5zIGJhY2sgaW4gZmlsZS0tPiAKKyAgICAgICAgIDwhLS1yZXN0b3JlIHRoZSB0b2tlbnMgYmFjayBpbiBmaWxlLS0+CiAgICAgICAgICA8cmVwbGFjZSBmaWxlPSJ3ZWJjbGllbnQvQ2xpZW50LmphdmEiIHRva2VuPSIke2h0dHAuaG9zdH0iIHZhbHVlPSJIVFRQX0hPU1QiLz4KICAgICAgICAgIDxyZXBsYWNlIGZpbGU9IndlYmNsaWVudC9DbGllbnQuamF2YSIgdG9rZW49IiR7aHR0cC5wb3J0fSIgdmFsdWU9IkhUVFBfUE9SVCIvPgogICAgICAgICA8L3RhcmdldD4KQEAgLTIwMiw3ICsyMDIsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bmNsaWVudCI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi1jbGllbnQiPgogICAgICAgICA8cGFyYW0gbmFtZT0iY2xpZW50LWNsYXNzIiB2YWx1ZT0iY2xpZW50LkNsaWVudCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wb3N0Y29uc3RydWN0L2NsaWVudC13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wb3N0Y29uc3RydWN0L2NsaWVudC13ZWIueG1sCmluZGV4IDAyN2RmY2UuLmI0YmJmNWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcG9zdGNvbnN0cnVjdC9jbGllbnQtd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Bvc3Rjb25zdHJ1Y3QvY2xpZW50LXdlYi54bWwKQEAgLTIwLDcgKzIwLDcgQEAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0gICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSAKKyAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KICAgPGRlc2NyaXB0aW9uPkEgdGVzdCBhcHBsaWNhdGlvbjwvZGVzY3JpcHRpb24+CiAgIDxkaXNwbGF5LW5hbWU+V2ViVGllcjwvZGlzcGxheS1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wb3N0Y29uc3RydWN0L2NsaWVudC9UZXN0Q2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Bvc3Rjb25zdHJ1Y3QvY2xpZW50L1Rlc3RDbGllbnQuamF2YQppbmRleCBlNDU4ZjM2Li45MGJmMThmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Bvc3Rjb25zdHJ1Y3QvY2xpZW50L1Rlc3RDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Bvc3Rjb25zdHJ1Y3QvY2xpZW50L1Rlc3RDbGllbnQuamF2YQpAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgaW50IGNvZGUgPSBpbnZva2VTZXJ2bGV0KHVybCk7CiAgICAgICAgICAgICByZXBvcnQoY29kZSk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgfQpAQCAtNjAsNyArNjAsNyBAQAogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IGMxLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyIChuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKICAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOwotICAgICAgIAorCiAgICAgICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgICAgICAgIGxvZyhsaW5lKTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiU28gdGhlIFJFU1VMVCBPRiBIRUxMTyBTRVJWSUNFIElTIikgIT0gLTEpCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Bvc3Rjb25zdHJ1Y3Qvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcG9zdGNvbnN0cnVjdC93ZWIueG1sCmluZGV4IDhmYWViMDcuLjM3ZTI3OTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcG9zdGNvbnN0cnVjdC93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcG9zdGNvbnN0cnVjdC93ZWIueG1sCkBAIC0xOCwzMCArMTgsMzAgQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKLQkJCWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgorICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKKyAgICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogCi0JPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBIZWxsbyBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQk8ZGlzcGxheS1uYW1lPkhlbGxvV0FSPC9kaXNwbGF5LW5hbWU+CisgICAgPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBIZWxsbyBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICA8ZGlzcGxheS1uYW1lPkhlbGxvV0FSPC9kaXNwbGF5LW5hbWU+CiAKLQk8c2VydmxldD4KLQkJPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBIZWxsbyBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JCTxkaXNwbGF5LW5hbWU+SGVsbG9XZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+Ci0JCTxzZXJ2bGV0LW5hbWU+SGVsbG88L3NlcnZsZXQtbmFtZT4KLQkJPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuSGVsbG88L3NlcnZsZXQtY2xhc3M+Ci0JCTxsb2FkLW9uLXN0YXJ0dXA+MTwvbG9hZC1vbi1zdGFydHVwPgotCTwvc2VydmxldD4KKyAgICA8c2VydmxldD4KKyAgICAgICAgPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBIZWxsbyBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgICAgIDxkaXNwbGF5LW5hbWU+SGVsbG9XZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+SGVsbG88L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuSGVsbG88L3NlcnZsZXQtY2xhc3M+CisgICAgICAgIDxsb2FkLW9uLXN0YXJ0dXA+MTwvbG9hZC1vbi1zdGFydHVwPgorICAgIDwvc2VydmxldD4KIAotCTxzZXJ2bGV0LW1hcHBpbmc+Ci0JCTxzZXJ2bGV0LW5hbWU+SGVsbG88L3NlcnZsZXQtbmFtZT4KLQkJPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL0hlbGxvU2VydmljZTwvdXJsLXBhdHRlcm4+Ci0JPC9zZXJ2bGV0LW1hcHBpbmc+CisgICAgPHNlcnZsZXQtbWFwcGluZz4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5IZWxsbzwvc2VydmxldC1uYW1lPgorICAgICAgICA8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvSGVsbG9TZXJ2aWNlPC91cmwtcGF0dGVybj4KKyAgICA8L3NlcnZsZXQtbWFwcGluZz4KIAotCTxzZXNzaW9uLWNvbmZpZz4KLQkJPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgotCTwvc2Vzc2lvbi1jb25maWc+CisgICAgPHNlc3Npb24tY29uZmlnPgorICAgICAgICA8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+CisgICAgPC9zZXNzaW9uLWNvbmZpZz4KIAogPC93ZWItYXBwPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Bvc3Rjb25zdHJ1Y3Qvd2ViY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wb3N0Y29uc3RydWN0L3dlYmNsaWVudC9DbGllbnQuamF2YQppbmRleCA1ZDhlZTEyLi41ODQwY2ExIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Bvc3Rjb25zdHJ1Y3Qvd2ViY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcG9zdGNvbnN0cnVjdC93ZWJjbGllbnQvQ2xpZW50LmphdmEKQEAgLTMxLDE0ICszMSwxNCBAQAogICAgICAgICBIZWxsb1NlcnZpY2Ugc2VydmljZTsKIAogICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkKLQkJdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKKyAgICAgICAgdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgICAgZG9Qb3N0KHJlcSwgcmVzcCk7CiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkKICAgICAgICAgICAgICAgdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIEhlbGxvIHBvcnQgPSBzZXJ2aWNlLmdldEhlbGxvUG9ydCgpOwogCiAgICAgICAgICAgICAgICAgU3RyaW5nIHJldCA9IHBvcnQuc2F5SGVsbG8oIkFsbCIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wcmVwa2dlZC1zdmMtMS9hcHBjbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3ByZXBrZ2VkLXN2Yy0xL2FwcGNsaWVudC9DbGllbnQuamF2YQppbmRleCAzOWMxYjkzLi4zNDFlZTZiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3ByZXBrZ2VkLXN2Yy0xL2FwcGNsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3ByZXBrZ2VkLXN2Yy0xL2FwcGNsaWVudC9DbGllbnQuamF2YQpAQCAtMzAsMTAgKzMwLDEwIEBACiAgICAgICAgIEBXZWJTZXJ2aWNlUmVmKG5hbWU9InNlcnZpY2UvTXlTZXJ2aWNlIikgc3RhdGljIEFkZE51bWJlcnNTZXJ2aWNlIHNlcnZpY2U7CiAKICAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCSAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ3ZWJzZXJ2aWNlcy1zaW1wbGUtYW5ub3RhdGlvbiIpOworICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ3ZWJzZXJ2aWNlcy1zaW1wbGUtYW5ub3RhdGlvbiIpOwogICAgICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKICAgICAgICAgICAgIGNsaWVudC5kb1Rlc3QoYXJncyk7Ci0JICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3ZWJzZXJ2aWNlcy1hbm5vdGF0aW9uIik7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3ZWJzZXJ2aWNlcy1hbm5vdGF0aW9uIik7CiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgICAgICAgICBBZGROdW1iZXJzUG9ydFR5cGUgcG9ydCA9IHNlcnZpY2UuZ2V0QWRkTnVtYmVyc1BvcnRUeXBlKCk7CiAgICAgICAgICAgICAgICAgKChCaW5kaW5nUHJvdmlkZXIpcG9ydCkuZ2V0UmVxdWVzdENvbnRleHQoKS5wdXQoQmluZGluZ1Byb3ZpZGVyLkVORFBPSU5UX0FERFJFU1NfUFJPUEVSVFksImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9wcmVwa2dlZC1zdmMtMS93ZWJzZXJ2aWNlL0FkZE51bWJlcnNTZXJ2aWNlP1dTREwiKTsKICAgICAgICAgICAgICAgICBpbnQgcmV0ID0gcG9ydC5hZGROdW1iZXJzKDEwMCwgMjAwKTsKLQkJaWYocmV0ICE9IDMwMCkgeworICAgICAgICBpZihyZXQgIT0gMzAwKSB7CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBncmVldGluZyAiICsgcmV0KTsKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoInByZS1wa2dlZC1hcHBjbGllbnQiLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3ByZXBrZ2VkLXN2Yy0xL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3ByZXBrZ2VkLXN2Yy0xL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggM2Y2NzBiNC4uOWIyNDczMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wcmVwa2dlZC1zdmMtMS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJlcGtnZWQtc3ZjLTEvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJwcmVwa2dlZC1zdmMtMSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iLi93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSIuL3N1bi13ZWIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3ByZXBrZ2VkLXN2Yy0xL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJlcGtnZWQtc3ZjLTEvYnVpbGQueG1sCmluZGV4IGE1ZWZhOGIuLjYwZjUzYzQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJlcGtnZWQtc3ZjLTEvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJlcGtnZWQtc3ZjLTEvYnVpbGQueG1sCkBAIC04Myw3ICs4Myw3IEBACiAgICAgICAgIDxwYXJhbSBuYW1lPSJ3c2ltcG9ydC5hcmdzIgogICAgICAgICAgIHZhbHVlPSItYiBjdXN0b20tY2xpZW50LnhtbCAta2VlcCAtZCAke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi9jbGFzc2VzICR7ZW52LkFQU19IT01FfS9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3ByZXBrZ2VkLXN2Yy0xL0FkZE51bWJlcnMud3NkbCIvPgogICAgICAgPC9hbnRjYWxsPgotICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvY2xhc3NlcyIgCisgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi9jbGFzc2VzIgogICAgICAgICAgICAgaW5jbHVkZXM9IndlYmNsaWVudC8qKiI+CiAgPGNsYXNzcGF0aCByZWZpZD0iY2xhc3NwYXRoIi8+CiA8L2phdmFjPgpAQCAtMTAzLDcgKzEwMyw3IEBACiAgICAgICAgIDxwYXJhbSBuYW1lPSJ3c2ltcG9ydC5hcmdzIgogICAgICAgICAgIHZhbHVlPSItYiBjdXN0b20tY2xpZW50LnhtbCAta2VlcCAtZCAke2J1aWxkLmNsYXNzZXMuZGlyfS9hcHBjbGllbnQgJHtlbnYuQVBTX0hPTUV9L2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJlcGtnZWQtc3ZjLTEvQWRkTnVtYmVycy53c2RsIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcHBjbGllbnQiICAKKyAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FwcGNsaWVudCIKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvajJlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtcnQuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXRvb2xzLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJhcHBjbGllbnQvKioiLz4KICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FwcGNsaWVudC9NRVRBLUlORi93c2RsIi8+CkBAIC0xNjIsMTEgKzE2MiwxMSBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNsaWVudCIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVudGVzdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+Ci0gICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiIAotICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgCisgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9ImNsaWVudC8qKiIvPgogICAgICAgPHVuamFyIHNyYz0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIGRlc3Q9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgogICAgICAgPGphdmEgY2xhc3NuYW1lPSJjbGllbnQuVGVzdENsaWVudCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3ByZXBrZ2VkLXN2Yy0xL2NsaWVudC13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wcmVwa2dlZC1zdmMtMS9jbGllbnQtd2ViLnhtbAppbmRleCBlNjkxYTg5Li45NjNmNmFlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3ByZXBrZ2VkLXN2Yy0xL2NsaWVudC13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJlcGtnZWQtc3ZjLTEvY2xpZW50LXdlYi54bWwKQEAgLTIwLDcgKzIwLDcgQEAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0gICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSAKKyAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KICAgPGRlc2NyaXB0aW9uPkEgdGVzdCBhcHBsaWNhdGlvbjwvZGVzY3JpcHRpb24+CiAgIDxkaXNwbGF5LW5hbWU+V2ViVGllcjwvZGlzcGxheS1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wcmVwa2dlZC1zdmMtMS9jbGllbnQvVGVzdENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wcmVwa2dlZC1zdmMtMS9jbGllbnQvVGVzdENsaWVudC5qYXZhCmluZGV4IDExMzkyZDkuLjQ0ZjdjYmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJlcGtnZWQtc3ZjLTEvY2xpZW50L1Rlc3RDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3ByZXBrZ2VkLXN2Yy0xL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludCBjb2RlID0gaW52b2tlU2VydmxldCh1cmwpOwogICAgICAgICAgICAgcmVwb3J0KGNvZGUpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KQEAgLTYzLDkgKzYzLDkgQEAKICAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nKGxpbmUpOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJTbyB0aGUgUkVTVUxUIE9GIEFERCBTRVJWSUNFIElTIikgIT0gLTEpCi0JCWZvdW5kMSA9IHRydWU7CisgICAgICAgIGZvdW5kMSA9IHRydWU7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIlszMDBdIikgIT0gLTEpCi0JCWZvdW5kMiA9IHRydWU7CisgICAgICAgIGZvdW5kMiA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNvZGU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wcmVwa2dlZC1zdmMtMS9jdXN0b20tY2xpZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJlcGtnZWQtc3ZjLTEvY3VzdG9tLWNsaWVudC54bWwKaW5kZXggNmExMzVhZC4uZmUzZjczNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wcmVwa2dlZC1zdmMtMS9jdXN0b20tY2xpZW50LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3ByZXBrZ2VkLXN2Yy0xL2N1c3RvbS1jbGllbnQueG1sCkBAIC0xNywxMiArMTcsMTIgQEAKIAogLS0+CiAKLTxiaW5kaW5ncyAKKzxiaW5kaW5ncwogICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCiAgICAgeG1sbnM6amF4Yj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4YiIKICAgICB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKICAgICB3c2RsTG9jYXRpb249IkFkZE51bWJlcnMud3NkbCIKLSAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4d3MiPiAgICAKKyAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4d3MiPgogICAgIDxiaW5kaW5ncyBub2RlPSJuczE6ZGVmaW5pdGlvbnMiIHhtbG5zOm5zMT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgogICAgICAgICA8cGFja2FnZSBuYW1lPSJjbGllbnQiLz4KICAgICA8L2JpbmRpbmdzPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wcmVwa2dlZC1zdmMtMS9jdXN0b20tc2VydmVyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJlcGtnZWQtc3ZjLTEvY3VzdG9tLXNlcnZlci54bWwKaW5kZXggNGNmYmI1OS4uZTZiYjIzNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wcmVwa2dlZC1zdmMtMS9jdXN0b20tc2VydmVyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3ByZXBrZ2VkLXN2Yy0xL2N1c3RvbS1zZXJ2ZXIueG1sCkBAIC0xNyw3ICsxNyw3IEBACiAKIC0tPgogCi08YmluZGluZ3MgCis8YmluZGluZ3MKICAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgogICAgIHhtbG5zOmpheGI9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheGIiCiAgICAgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3ByZXBrZ2VkLXN2Yy0xL2VuZHBvaW50L0FkZE51bWJlcnNJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3ByZXBrZ2VkLXN2Yy0xL2VuZHBvaW50L0FkZE51bWJlcnNJbXBsLmphdmEKaW5kZXggZTdiZGE3Yy4uMzBhYzY5OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wcmVwa2dlZC1zdmMtMS9lbmRwb2ludC9BZGROdW1iZXJzSW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJlcGtnZWQtc3ZjLTEvZW5kcG9pbnQvQWRkTnVtYmVyc0ltcGwuamF2YQpAQCAtMTgsNyArMTgsNyBAQAogCiBAamFrYXJ0YS5qd3MuV2ViU2VydmljZSAod3NkbExvY2F0aW9uPSJXRUItSU5GL3dzZGwvQWRkTnVtYmVycy53c2RsIiwgc2VydmljZU5hbWU9IkFkZE51bWJlcnNTZXJ2aWNlIiwgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZHVrZS5vcmciLCBwb3J0TmFtZT0iQWRkTnVtYmVyc1BvcnRUeXBlIiwgZW5kcG9pbnRJbnRlcmZhY2U9ImVuZHBvaW50LkFkZE51bWJlcnNQb3J0VHlwZSIpCiBwdWJsaWMgY2xhc3MgQWRkTnVtYmVyc0ltcGwgaW1wbGVtZW50cyBBZGROdW1iZXJzUG9ydFR5cGUgewotICAgIAorCiAgICAgcHVibGljIGludCBhZGROdW1iZXJzIChpbnQgbnVtYmVyMSwgaW50IG51bWJlcjIpIHsKICAgICAgICAgcmV0dXJuIG51bWJlcjEgKyBudW1iZXIyOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJlcGtnZWQtc3ZjLTEvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJlcGtnZWQtc3ZjLTEvd2ViLnhtbAppbmRleCA2MjU2MTUzLi4xODg5ZWI0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3ByZXBrZ2VkLXN2Yy0xL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wcmVwa2dlZC1zdmMtMS93ZWIueG1sCkBAIC0xOCwyOSArMTgsMjkgQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKLQkJCWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgorICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKKyAgICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogCi0JPGRlc2NyaXB0aW9uPkFkZE51bWJlcnMgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgPGRlc2NyaXB0aW9uPkFkZE51bWJlcnMgU2VydmljZTwvZGVzY3JpcHRpb24+CiAKLQk8c2VydmxldD4KLQkJPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBBZGROdW1iZXJzIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQkJPGRpc3BsYXktbmFtZT5BZGROdW1iZXJzV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgotCQk8c2VydmxldC1uYW1lPkFkZE51bWJlcnNJbXBsPC9zZXJ2bGV0LW5hbWU+Ci0JCTxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkFkZE51bWJlcnNJbXBsPC9zZXJ2bGV0LWNsYXNzPgotCQk8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KLQk8L3NlcnZsZXQ+CisgICAgPHNlcnZsZXQ+CisgICAgICAgIDxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgQWRkTnVtYmVycyBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgICAgIDxkaXNwbGF5LW5hbWU+QWRkTnVtYmVyc1dlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5BZGROdW1iZXJzSW1wbDwvc2VydmxldC1uYW1lPgorICAgICAgICA8c2VydmxldC1jbGFzcz5lbmRwb2ludC5BZGROdW1iZXJzSW1wbDwvc2VydmxldC1jbGFzcz4KKyAgICAgICAgPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+CisgICAgPC9zZXJ2bGV0PgogCi0JPHNlcnZsZXQtbWFwcGluZz4KLQkJPHNlcnZsZXQtbmFtZT5BZGROdW1iZXJzSW1wbDwvc2VydmxldC1uYW1lPgotCQk8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvQWRkTnVtYmVyc1NlcnZpY2U8L3VybC1wYXR0ZXJuPgotCTwvc2VydmxldC1tYXBwaW5nPgorICAgIDxzZXJ2bGV0LW1hcHBpbmc+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+QWRkTnVtYmVyc0ltcGw8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL0FkZE51bWJlcnNTZXJ2aWNlPC91cmwtcGF0dGVybj4KKyAgICA8L3NlcnZsZXQtbWFwcGluZz4KIAotCTxzZXNzaW9uLWNvbmZpZz4KLQkJPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgotCTwvc2Vzc2lvbi1jb25maWc+CisgICAgPHNlc3Npb24tY29uZmlnPgorICAgICAgICA8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+CisgICAgPC9zZXNzaW9uLWNvbmZpZz4KIAogPC93ZWItYXBwPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3ByZXBrZ2VkLXN2Yy0xL3dlYmNsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJlcGtnZWQtc3ZjLTEvd2ViY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDA0NTI0OGEuLmRjNWJiNzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJlcGtnZWQtc3ZjLTEvd2ViY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJlcGtnZWQtc3ZjLTEvd2ViY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNyw4ICsyNyw4IEBACiAKICAgICAgICAgQFdlYlNlcnZpY2VSZWYobmFtZT0ic2VydmljZS9NeVNlcnZpY2UiKSBBZGROdW1iZXJzU2VydmljZSBzZXJ2aWNlOwogCi0gICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKSAKLQkJdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKKyAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCisgICAgICAgIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgICAgIGRvUG9zdChyZXEsIHJlc3ApOwogICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wcm92aWRlci1lamJpbndlYi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Byb3ZpZGVyLWVqYmlud2ViL2J1aWxkLnhtbAppbmRleCBmNTM0Nzc3Li40ZjgzMTk1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Byb3ZpZGVyLWVqYmlud2ViL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Byb3ZpZGVyLWVqYmlud2ViL2J1aWxkLnhtbApAQCAtMjgsNyArMjgsNyBAQAogICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGllbnQtc3JjLW5hbWUiIHZhbHVlPSJjbGllbnQvQ2xpZW50LmphdmEiLz4KICAgICA8YmFzZW5hbWUgZmlsZT0iJHtzcmMtbmFtZX0iIHByb3BlcnR5PSJzZXJ2ZXIiIHN1ZmZpeD0iLmphdmEiLz4KICAgICA8ZGlybmFtZSBmaWxlPSIke3NyYy1uYW1lfSIgcHJvcGVydHk9ImRpcmVjdG9yeSIvPgotICAgIDxiYXNlbmFtZSBmaWxlPSIke2RpcmVjdG9yeX0iIHByb3BlcnR5PSJwa2ctbmFtZSIvPiAKKyAgICA8YmFzZW5hbWUgZmlsZT0iJHtkaXJlY3Rvcnl9IiBwcm9wZXJ0eT0icGtnLW5hbWUiLz4KICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iY2xlYW4iPgogICAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi93c2ltcG9ydCI+CiAgICAgICAgICAgICA8YXJnIGxpbmU9Ii1rZWVwIC1kICR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3NlcyBlbmRwb2ludC93c2RsL0hlbGxvSW1wbFNlcnZpY2Uud3NkbCIvPgpAQCAtMzcsOSArMzcsOSBAQAogICAgICAgICA8d2FyIGRlc3RmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9hdXRvZGVwbG95LyR7c2VydmVyfS53YXIiIG5lZWR4bWxmaWxlPSJmYWxzZSI+CiAgICAgICAgICAgICA8d2ViaW5mIGRpcj0iJHtwa2ctbmFtZX0iCiAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVzPSIqLnhtbCAqKi8qLndzZGwgKiovKi54c2QiLz4KLSAgICAgICAgICAgIDxjbGFzc2VzIGRpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzIiAKKyAgICAgICAgICAgIDxjbGFzc2VzIGRpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzIgogICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZXM9IiR7cGtnLW5hbWV9LyoqIi8+Ci0gICAgICAgIDwvd2FyPiAgCisgICAgICAgIDwvd2FyPgogICAgICAgICA8d2FpdGZvciBtYXh3YWl0PSIxMDAiIG1heHdhaXR1bml0PSJzZWNvbmQiPgogICAgICAgICAgICAgPG9yPgogICAgICAgICAgICAgICAgIDxhdmFpbGFibGUgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvYXV0b2RlcGxveS8ke3NlcnZlcn0ud2FyX2RlcGxveWVkIi8+CkBAIC01Niw3ICs1Niw3IEBACiAgICAgICAgIDxmYWlsIGlmPSJkZXBsb3lfZmFpbGVkIiBtZXNzYWdlPSJEZXBsb3ltZW50IGZhaWxlZCIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY2xpZW50Ii8+CiAgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL3dzaW1wb3J0Ij4KLSAgICAgICAgICAgIDxhcmcgbGluZT0iLWtlZXAgLWQgJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzIGh0dHA6Ly8ke2h0dHAuaG9zdH06JHtodHRwLnBvcnR9LyR7c2VydmVyfS8ke3NlcnZlcn1TZXJ2aWNlP1dTREwiLz4JCisgICAgICAgICAgICA8YXJnIGxpbmU9Ii1rZWVwIC1kICR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3NlcyBodHRwOi8vJHtodHRwLmhvc3R9OiR7aHR0cC5wb3J0fS8ke3NlcnZlcn0vJHtzZXJ2ZXJ9U2VydmljZT9XU0RMIi8+CiAgICAgICAgIDwvZXhlYz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmphci1jbGllbnQtdXRpbHMiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJpbnRlcm5hbC1ydW4iLz4KQEAgLTg2LDYgKzg2LDYgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0icmVwb3J0LWZhaWx1cmUiPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJUZXN0IGZhaWxlZCIvPgotICAgIDwvdGFyZ2V0PiAgIAkKLSAgICAKKyAgICA8L3RhcmdldD4KKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wcm92aWRlci1lamJpbndlYi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Byb3ZpZGVyLWVqYmlud2ViL2NsaWVudC9DbGllbnQuamF2YQppbmRleCAzN2VkMmFmLi41YzgyNTMxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Byb3ZpZGVyLWVqYmlud2ViL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Byb3ZpZGVyLWVqYmlud2ViL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzAsMTAgKzMwLDEwIEBACiAKIAogICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oInNlcnZsZXQtcHJvdmlkZXItYW5ub3RhdGlvbiIpOworICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJzZXJ2bGV0LXByb3ZpZGVyLWFubm90YXRpb24iKTsKICAgICAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7CiAgICAgICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3MpOwotCSAgICBzdGF0LnByaW50U3VtbWFyeSgic2VydmxldC1wcm92aWRlci1hbm5vdGF0aW9uIik7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJzZXJ2bGV0LXByb3ZpZGVyLWFubm90YXRpb24iKTsKICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nW10gYXJncykgewpAQCAtNDEsMTEgKzQxLDExIEBACiAgICAgICAgICAgICAgICAgSGVsbG9JbXBsIHBvcnQgPSBuZXcgSGVsbG9JbXBsU2VydmljZSgpLmdldEhlbGxvSW1wbCgpOwogICAgICAgICAgICAgICAgIGZvciAoaW50IGk9MDtpPDEwO2krKykgewogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcmV0ID0gcG9ydC5zYXlIZWxsbygiQXBwc2VydmVyIFRlc3RlciAhIik7Ci0JCSAgICBpZihyZXQuaW5kZXhPZigiV2ViU3ZjVGVzdC1IZWxsbyIpID09IC0xKSB7CisgICAgICAgICAgICBpZihyZXQuaW5kZXhPZigiV2ViU3ZjVGVzdC1IZWxsbyIpID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiU2ltcGxlLUFubm90YXRpb24iLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCQkgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmV0KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoInNlcnZsZXQtcHJvdmlkZXItYW5ub3RhdGlvbiIsIHN0YXQuUEFTUyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Byb3ZpZGVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJvdmlkZXIvYnVpbGQueG1sCmluZGV4IDgyZDMzY2UuLjNiY2M4ZDMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJvdmlkZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJvdmlkZXIvYnVpbGQueG1sCkBAIC0yOCwyNSArMjgsMjUgQEAKICAgICA8cHJvcGVydHkgbmFtZT0iY2xpZW50LXNyYy1uYW1lIiB2YWx1ZT0iY2xpZW50L0NsaWVudC5qYXZhIi8+CiAgICAgPGJhc2VuYW1lIGZpbGU9IiR7c3JjLW5hbWV9IiBwcm9wZXJ0eT0ic2VydmVyIiBzdWZmaXg9Ii5qYXZhIi8+CiAgICAgPGRpcm5hbWUgZmlsZT0iJHtzcmMtbmFtZX0iIHByb3BlcnR5PSJkaXJlY3RvcnkiLz4KLSAgICA8YmFzZW5hbWUgZmlsZT0iJHtkaXJlY3Rvcnl9IiBwcm9wZXJ0eT0icGtnLW5hbWUiLz4gCisgICAgPGJhc2VuYW1lIGZpbGU9IiR7ZGlyZWN0b3J5fSIgcHJvcGVydHk9InBrZy1uYW1lIi8+CiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImNsZWFuIj4KICAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vd3NpbXBvcnQiPgogICAgICAgICAgICAgPGFyZyBsaW5lPSIta2VlcCAtZCAke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMgZW5kcG9pbnQvd3NkbC9IZWxsb0ltcGxTZXJ2aWNlLndzZGwiLz4KICAgICAgICAgPC9leGVjPgotCTxhbnRjYWxsIHRhcmdldD0idGVzdC1jb21waWxlIi8+Ci0JPHdhciBkZXN0ZmlsZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvYXV0b2RlcGxveS8ke3NlcnZlcn0ud2FyIgotCSAgICB3ZWJ4bWw9IndlYi54bWwiPgotCSAgICA8d2ViaW5mIGRpcj0iJHtwa2ctbmFtZX0iCi0JCWluY2x1ZGVzPSIqLnhtbCAqKi8qLndzZGwgKiovKi54c2QiLz4KLQkgICAgPGNsYXNzZXMgZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMiIAotCQlpbmNsdWRlcz0iJHtwa2ctbmFtZX0vKioiLz4KLQk8L3dhcj4gIAotCTx3YWl0Zm9yIG1heHdhaXQ9IjEwMCIgbWF4d2FpdHVuaXQ9InNlY29uZCI+Ci0JICA8b3I+Ci0JICAgICA8YXZhaWxhYmxlIGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2F1dG9kZXBsb3kvJHtzZXJ2ZXJ9Lndhcl9kZXBsb3llZCIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0idGVzdC1jb21waWxlIi8+CisgICAgPHdhciBkZXN0ZmlsZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvYXV0b2RlcGxveS8ke3NlcnZlcn0ud2FyIgorICAgICAgICB3ZWJ4bWw9IndlYi54bWwiPgorICAgICAgICA8d2ViaW5mIGRpcj0iJHtwa2ctbmFtZX0iCisgICAgICAgIGluY2x1ZGVzPSIqLnhtbCAqKi8qLndzZGwgKiovKi54c2QiLz4KKyAgICAgICAgPGNsYXNzZXMgZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMiCisgICAgICAgIGluY2x1ZGVzPSIke3BrZy1uYW1lfS8qKiIvPgorICAgIDwvd2FyPgorICAgIDx3YWl0Zm9yIG1heHdhaXQ9IjEwMCIgbWF4d2FpdHVuaXQ9InNlY29uZCI+CisgICAgICA8b3I+CisgICAgICAgICA8YXZhaWxhYmxlIGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2F1dG9kZXBsb3kvJHtzZXJ2ZXJ9Lndhcl9kZXBsb3llZCIvPgogICAgICAgICAgICAgPGF2YWlsYWJsZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9hdXRvZGVwbG95LyR7c2VydmVyfS53YXJfZGVwbG95RmFpbGVkIi8+Ci0gICAgICAgCSAgPC9vcj4KLQk8L3dhaXRmb3I+CisgICAgICAgICAgICAgPC9vcj4KKyAgICA8L3dhaXRmb3I+CiAgICAgICAgIDxjb25kaXRpb24gcHJvcGVydHk9ImRlcGxveV9zdWNjZWVkZWQiPgogICAgICAgICAgIDxhdmFpbGFibGUgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvYXV0b2RlcGxveS8ke3NlcnZlcn0ud2FyX2RlcGxveWVkIi8+CiAgICAgICAgIDwvY29uZGl0aW9uPgpAQCAtNTUsMTQgKzU1LDE0IEBACiAgICAgICAgIDwvY29uZGl0aW9uPgogCiAgICAgICAgIDxmYWlsIGlmPSJkZXBsb3lfZmFpbGVkIiBtZXNzYWdlPSJEZXBsb3ltZW50IGZhaWxlZCIvPgotCTxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jbGllbnQiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY2xpZW50Ii8+CiAgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL3dzaW1wb3J0Ij4KLSAgICAgICAgICAgIDxhcmcgbGluZT0iLWtlZXAgLWQgJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzIGh0dHA6Ly8ke2h0dHAuaG9zdH06JHtodHRwLnBvcnR9LyR7c2VydmVyfS8ke3NlcnZlcn1TZXJ2aWNlP1dTREwiLz4JCisgICAgICAgICAgICA8YXJnIGxpbmU9Ii1rZWVwIC1kICR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3NlcyBodHRwOi8vJHtodHRwLmhvc3R9OiR7aHR0cC5wb3J0fS8ke3NlcnZlcn0vJHtzZXJ2ZXJ9U2VydmljZT9XU0RMIi8+CiAgICAgPC9leGVjPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuamFyLWNsaWVudC11dGlscyIvPgotCTxhbnRjYWxsIHRhcmdldD0iaW50ZXJuYWwtcnVuIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJpbnRlcm5hbC1ydW4iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhdXRvdW5kZXBsb3ktZmlsZSI+Ci0gIAkgICAgPHBhcmFtIG5hbWU9ImZpbGVuYW1lIiB2YWx1ZT0iJHtzZXJ2ZXJ9LndhciIvPgorICAgICAgICAgIDxwYXJhbSBuYW1lPSJmaWxlbmFtZSIgdmFsdWU9IiR7c2VydmVyfS53YXIiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8Y29uZGl0aW9uIHByb3BlcnR5PSJ1bmRlcGxveV9zdWNjZWVkZWQiPgogICAgICAgICAgIDxhdmFpbGFibGUgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvYXV0b2RlcGxveS8ke3NlcnZlcn0uamFyX3VuZGVwbG95ZWQiLz4KQEAgLTcxLDE0ICs3MSwxNCBAQAogICAgICAgICAgIDxhdmFpbGFibGUgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvYXV0b2RlcGxveS8ke3NlcnZlcn0uamFyX3VuZGVwbG95RmFpbGVkIi8+CiAgICAgICAgIDwvY29uZGl0aW9uPgogICAgICAgICA8ZmFpbCBpZj0idW5kZXBsb3lfZmFpbGVkIiBtZXNzYWdlPSJ1bmRlcGxveW1lbnQgZmFpbGVkIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJyZXBvcnQiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InJlcG9ydCIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ0ZXN0X2J1aWxkIj4KLQk8ZXhlYyBleGVjdXRhYmxlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi93c2ltcG9ydCI+Ci0gICAgICAgIAk8YXJnIGxpbmU9Ii1rZWVwIC1kICR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3NlcyBlbmRwb2ludC93c2RsL0hlbGxvSW1wbFNlcnZpY2Uud3NkbCIvPgotCTwvZXhlYz4KLQk8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkIi8+CisgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vd3NpbXBvcnQiPgorICAgICAgICAgICAgPGFyZyBsaW5lPSIta2VlcCAtZCAke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMgZW5kcG9pbnQvd3NkbC9IZWxsb0ltcGxTZXJ2aWNlLndzZGwiLz4KKyAgICA8L2V4ZWM+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJidWlsZCIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZXBvcnQtc3VjY2VzcyI+CkBAIC04Nyw2ICs4Nyw2IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InJlcG9ydC1mYWlsdXJlIj4KICAgICAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IlRlc3QgZmFpbGVkIi8+Ci0gICAgPC90YXJnZXQ+ICAgCQotICAgIAorICAgIDwvdGFyZ2V0PgorCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Byb3ZpZGVyL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJvdmlkZXIvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDM3ZWQyYWYuLjVjODI1MzEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJvdmlkZXIvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJvdmlkZXIvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMCwxMCArMzAsMTAgQEAKIAogCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQkgICAgc3RhdC5hZGREZXNjcmlwdGlvbigic2VydmxldC1wcm92aWRlci1hbm5vdGF0aW9uIik7CisgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oInNlcnZsZXQtcHJvdmlkZXItYW5ub3RhdGlvbiIpOwogICAgICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKICAgICAgICAgICAgIGNsaWVudC5kb1Rlc3QoYXJncyk7Ci0JICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJzZXJ2bGV0LXByb3ZpZGVyLWFubm90YXRpb24iKTsKKyAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoInNlcnZsZXQtcHJvdmlkZXItYW5ub3RhdGlvbiIpOwogICAgICAgIH0KIAogICAgICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmdbXSBhcmdzKSB7CkBAIC00MSwxMSArNDEsMTEgQEAKICAgICAgICAgICAgICAgICBIZWxsb0ltcGwgcG9ydCA9IG5ldyBIZWxsb0ltcGxTZXJ2aWNlKCkuZ2V0SGVsbG9JbXBsKCk7CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaT0wO2k8MTA7aSsrKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyByZXQgPSBwb3J0LnNheUhlbGxvKCJBcHBzZXJ2ZXIgVGVzdGVyICEiKTsKLQkJICAgIGlmKHJldC5pbmRleE9mKCJXZWJTdmNUZXN0LUhlbGxvIikgPT0gLTEpIHsKKyAgICAgICAgICAgIGlmKHJldC5pbmRleE9mKCJXZWJTdmNUZXN0LUhlbGxvIikgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBncmVldGluZyAiICsgcmV0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJTaW1wbGUtQW5ub3RhdGlvbiIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0JCSAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygic2VydmxldC1wcm92aWRlci1hbm5vdGF0aW9uIiwgc3RhdC5QQVNTKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJvdmlkZXIvZW5kcG9pbnQvSGVsbG9JbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Byb3ZpZGVyL2VuZHBvaW50L0hlbGxvSW1wbC5qYXZhCmluZGV4IDdjNTI1YjQuLjhhOTZmZjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJvdmlkZXIvZW5kcG9pbnQvSGVsbG9JbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wcm92aWRlci9lbmRwb2ludC9IZWxsb0ltcGwuamF2YQpAQCAtMjEsNyArMjEsNyBAQAogaW1wb3J0IGpha2FydGEueG1sLndzLlByb3ZpZGVyOwogaW1wb3J0IGpha2FydGEueG1sLndzLldlYlNlcnZpY2VQcm92aWRlcjsKIGltcG9ydCBqYWthcnRhLnhtbC53cy5TZXJ2aWNlTW9kZTsKLWltcG9ydCBqYWthcnRhLnhtbC53cy5TZXJ2aWNlCTsJCitpbXBvcnQgamFrYXJ0YS54bWwud3MuU2VydmljZSAgICA7CiBpbXBvcnQgamFrYXJ0YS54bWwuc29hcC5TT0FQTWVzc2FnZTsKIGltcG9ydCBqYWthcnRhLmVqYi5TdGF0ZWxlc3M7CiAKQEAgLTQxLDExICs0MSwxMSBAQAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEpBWEJDb250ZXh0IGpheGJDb250ZXh0ID0gY3JlYXRlSkFYQkNvbnRleHQoKTsKICAgICBwcml2YXRlIGludCBjb21ibzsKICAgICBwcml2YXRlIGludCBib2R5SW5kZXg7Ci0gICAgCisKICAgICBwdWJsaWMgamFrYXJ0YS54bWwuYmluZC5KQVhCQ29udGV4dCBnZXRKQVhCQ29udGV4dCgpewogICAgICAgICByZXR1cm4gamF4YkNvbnRleHQ7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgamFrYXJ0YS54bWwuYmluZC5KQVhCQ29udGV4dCBjcmVhdGVKQVhCQ29udGV4dCgpewogICAgICAgICB0cnl7CiAgICAgICAgICAgICByZXR1cm4gamFrYXJ0YS54bWwuYmluZC5KQVhCQ29udGV4dC5uZXdJbnN0YW5jZShPYmplY3RGYWN0b3J5LmNsYXNzKTsKQEAgLTUzLDI3ICs1MywyNyBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IFdlYlNlcnZpY2VFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCksIGUpOwogICAgICAgICB9CiAgICAgfQotICAgIAotICAgIAorCisKICAgICBwdWJsaWMgU291cmNlIGludm9rZShTb3VyY2UgcmVxdWVzdCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmVjdkJlYW4ocmVxdWVzdCk7CiAgICAgICAgICAgICByZXR1cm4gc2VuZEJlYW4oKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgICAgIHRocm93IG5ldyBXZWJTZXJ2aWNlRXhjZXB0aW9uKCJQcm92aWRlciBlbmRwb2ludCBmYWlsZWQiLCBlKTsgICAgICAgICAgICAKKyAgICAgICAgICAgIHRocm93IG5ldyBXZWJTZXJ2aWNlRXhjZXB0aW9uKCJQcm92aWRlciBlbmRwb2ludCBmYWlsZWQiLCBlKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCByZWN2QmVhbihTb3VyY2Ugc291cmNlKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqIHJlY3ZCZWFuICoqKioqKiIpOwogICAgICAgICBKQVhCRWxlbWVudCBlbGVtZW50ID0gKEpBWEJFbGVtZW50KSBqYXhiQ29udGV4dC5jcmVhdGVVbm1hcnNoYWxsZXIoKS51bm1hcnNoYWwoc291cmNlKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJuYW1lPSIrZWxlbWVudC5nZXROYW1lKCkrICIgdmFsdWU9IiArIGVsZW1lbnQuZ2V0VmFsdWUoKSk7ICAgICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJuYW1lPSIrZWxlbWVudC5nZXROYW1lKCkrICIgdmFsdWU9IiArIGVsZW1lbnQuZ2V0VmFsdWUoKSk7CiAgICAgICAgIGlmIChlbGVtZW50LmdldFZhbHVlKCkgaW5zdGFuY2VvZiBTYXlIZWxsbykgewotICAgICAgICAgICAgU2F5SGVsbG8gaGVsbG8gPSAoU2F5SGVsbG8pIGVsZW1lbnQuZ2V0VmFsdWUoKTsgCisgICAgICAgICAgICBTYXlIZWxsbyBoZWxsbyA9IChTYXlIZWxsbykgZWxlbWVudC5nZXRWYWx1ZSgpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTYXkgSGVsbG8gZnJvbSAiICsgaGVsbG8uZ2V0QXJnMCgpKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgIH0KIAogICAgIHByaXZhdGUgU291cmNlIHNlbmRCZWFuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CkBAIC04MSw5ICs4MSw5IEBACiAgICAgICAgIFNheUhlbGxvUmVzcG9uc2UgcmVzcCA9IG5ldyBTYXlIZWxsb1Jlc3BvbnNlKCk7CiAgICAgICAgIHJlc3Auc2V0UmV0dXJuKCJXZWJTdmNUZXN0LUhlbGxvIik7CiAgICAgICAgIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBib3V0ID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwotICAgICAgICBPYmplY3RGYWN0b3J5IGZhY3RvcnkgPSBuZXcgT2JqZWN0RmFjdG9yeSgpOyAKKyAgICAgICAgT2JqZWN0RmFjdG9yeSBmYWN0b3J5ID0gbmV3IE9iamVjdEZhY3RvcnkoKTsKICAgICAgICAgamF4YkNvbnRleHQuY3JlYXRlTWFyc2hhbGxlcigpLm1hcnNoYWwoZmFjdG9yeS5jcmVhdGVTYXlIZWxsb1Jlc3BvbnNlKHJlc3ApLCBib3V0KTsKICAgICAgICAgcmV0dXJuIG5ldyBTdHJlYW1Tb3VyY2UobmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGJvdXQudG9CeXRlQXJyYXkoKSkpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wcm92aWRlci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wcm92aWRlci93ZWIueG1sCmluZGV4IDViOGRiMGMuLmZiZjJlZDYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJvdmlkZXIvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Byb3ZpZGVyL3dlYi54bWwKQEAgLTE4LDMwICsxOCwzMCBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotCQkJaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CisgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQorICAgICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAKLQk8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIEhlbGxvIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCTxkaXNwbGF5LW5hbWU+SGVsbG9XQVI8L2Rpc3BsYXktbmFtZT4KKyAgICA8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIEhlbGxvIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgIDxkaXNwbGF5LW5hbWU+SGVsbG9XQVI8L2Rpc3BsYXktbmFtZT4KIAotCTxzZXJ2bGV0PgotCQk8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIEhlbGxvIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQkJPGRpc3BsYXktbmFtZT5IZWxsb1dlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KLQkJPHNlcnZsZXQtbmFtZT5lbmRwb2ludC5IZWxsb0ltcGw8L3NlcnZsZXQtbmFtZT4KLQkJPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuSGVsbG9JbXBsPC9zZXJ2bGV0LWNsYXNzPgotCQk8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KLQk8L3NlcnZsZXQ+CisgICAgPHNlcnZsZXQ+CisgICAgICAgIDxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgSGVsbG8gV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgICAgICA8ZGlzcGxheS1uYW1lPkhlbGxvV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgorICAgICAgICA8c2VydmxldC1uYW1lPmVuZHBvaW50LkhlbGxvSW1wbDwvc2VydmxldC1uYW1lPgorICAgICAgICA8c2VydmxldC1jbGFzcz5lbmRwb2ludC5IZWxsb0ltcGw8L3NlcnZsZXQtY2xhc3M+CisgICAgICAgIDxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgorICAgIDwvc2VydmxldD4KIAotCTxzZXJ2bGV0LW1hcHBpbmc+Ci0JCTxzZXJ2bGV0LW5hbWU+ZW5kcG9pbnQuSGVsbG9JbXBsPC9zZXJ2bGV0LW5hbWU+Ci0JCTx1cmwtcGF0dGVybj4vSGVsbG9JbXBsU2VydmljZTwvdXJsLXBhdHRlcm4+Ci0JPC9zZXJ2bGV0LW1hcHBpbmc+CisgICAgPHNlcnZsZXQtbWFwcGluZz4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5lbmRwb2ludC5IZWxsb0ltcGw8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHVybC1wYXR0ZXJuPi9IZWxsb0ltcGxTZXJ2aWNlPC91cmwtcGF0dGVybj4KKyAgICA8L3NlcnZsZXQtbWFwcGluZz4KIAotCTxzZXNzaW9uLWNvbmZpZz4KLQkJPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgotCTwvc2Vzc2lvbi1jb25maWc+CisgICAgPHNlc3Npb24tY29uZmlnPgorICAgICAgICA8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+CisgICAgPC9zZXNzaW9uLWNvbmZpZz4KIAogPC93ZWItYXBwPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Byb3ZpZGVyaGFuZGxlci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Byb3ZpZGVyaGFuZGxlci9idWlsZC54bWwKaW5kZXggODJkMzNjZS4uM2JjYzhkMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wcm92aWRlcmhhbmRsZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJvdmlkZXJoYW5kbGVyL2J1aWxkLnhtbApAQCAtMjgsMjUgKzI4LDI1IEBACiAgICAgPHByb3BlcnR5IG5hbWU9ImNsaWVudC1zcmMtbmFtZSIgdmFsdWU9ImNsaWVudC9DbGllbnQuamF2YSIvPgogICAgIDxiYXNlbmFtZSBmaWxlPSIke3NyYy1uYW1lfSIgcHJvcGVydHk9InNlcnZlciIgc3VmZml4PSIuamF2YSIvPgogICAgIDxkaXJuYW1lIGZpbGU9IiR7c3JjLW5hbWV9IiBwcm9wZXJ0eT0iZGlyZWN0b3J5Ii8+Ci0gICAgPGJhc2VuYW1lIGZpbGU9IiR7ZGlyZWN0b3J5fSIgcHJvcGVydHk9InBrZy1uYW1lIi8+IAorICAgIDxiYXNlbmFtZSBmaWxlPSIke2RpcmVjdG9yeX0iIHByb3BlcnR5PSJwa2ctbmFtZSIvPgogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJjbGVhbiI+CiAgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL3dzaW1wb3J0Ij4KICAgICAgICAgICAgIDxhcmcgbGluZT0iLWtlZXAgLWQgJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzIGVuZHBvaW50L3dzZGwvSGVsbG9JbXBsU2VydmljZS53c2RsIi8+CiAgICAgICAgIDwvZXhlYz4KLQk8YW50Y2FsbCB0YXJnZXQ9InRlc3QtY29tcGlsZSIvPgotCTx3YXIgZGVzdGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2F1dG9kZXBsb3kvJHtzZXJ2ZXJ9LndhciIKLQkgICAgd2VieG1sPSJ3ZWIueG1sIj4KLQkgICAgPHdlYmluZiBkaXI9IiR7cGtnLW5hbWV9IgotCQlpbmNsdWRlcz0iKi54bWwgKiovKi53c2RsICoqLyoueHNkIi8+Ci0JICAgIDxjbGFzc2VzIGRpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzIiAKLQkJaW5jbHVkZXM9IiR7cGtnLW5hbWV9LyoqIi8+Ci0JPC93YXI+ICAKLQk8d2FpdGZvciBtYXh3YWl0PSIxMDAiIG1heHdhaXR1bml0PSJzZWNvbmQiPgotCSAgPG9yPgotCSAgICAgPGF2YWlsYWJsZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9hdXRvZGVwbG95LyR7c2VydmVyfS53YXJfZGVwbG95ZWQiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9InRlc3QtY29tcGlsZSIvPgorICAgIDx3YXIgZGVzdGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2F1dG9kZXBsb3kvJHtzZXJ2ZXJ9LndhciIKKyAgICAgICAgd2VieG1sPSJ3ZWIueG1sIj4KKyAgICAgICAgPHdlYmluZiBkaXI9IiR7cGtnLW5hbWV9IgorICAgICAgICBpbmNsdWRlcz0iKi54bWwgKiovKi53c2RsICoqLyoueHNkIi8+CisgICAgICAgIDxjbGFzc2VzIGRpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzIgorICAgICAgICBpbmNsdWRlcz0iJHtwa2ctbmFtZX0vKioiLz4KKyAgICA8L3dhcj4KKyAgICA8d2FpdGZvciBtYXh3YWl0PSIxMDAiIG1heHdhaXR1bml0PSJzZWNvbmQiPgorICAgICAgPG9yPgorICAgICAgICAgPGF2YWlsYWJsZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9hdXRvZGVwbG95LyR7c2VydmVyfS53YXJfZGVwbG95ZWQiLz4KICAgICAgICAgICAgIDxhdmFpbGFibGUgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvYXV0b2RlcGxveS8ke3NlcnZlcn0ud2FyX2RlcGxveUZhaWxlZCIvPgotICAgICAgIAkgIDwvb3I+Ci0JPC93YWl0Zm9yPgorICAgICAgICAgICAgIDwvb3I+CisgICAgPC93YWl0Zm9yPgogICAgICAgICA8Y29uZGl0aW9uIHByb3BlcnR5PSJkZXBsb3lfc3VjY2VlZGVkIj4KICAgICAgICAgICA8YXZhaWxhYmxlIGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2F1dG9kZXBsb3kvJHtzZXJ2ZXJ9Lndhcl9kZXBsb3llZCIvPgogICAgICAgICA8L2NvbmRpdGlvbj4KQEAgLTU1LDE0ICs1NSwxNCBAQAogICAgICAgICA8L2NvbmRpdGlvbj4KIAogICAgICAgICA8ZmFpbCBpZj0iZGVwbG95X2ZhaWxlZCIgbWVzc2FnZT0iRGVwbG95bWVudCBmYWlsZWQiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY2xpZW50Ii8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNsaWVudCIvPgogICAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi93c2ltcG9ydCI+Ci0gICAgICAgICAgICA8YXJnIGxpbmU9Ii1rZWVwIC1kICR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3NlcyBodHRwOi8vJHtodHRwLmhvc3R9OiR7aHR0cC5wb3J0fS8ke3NlcnZlcn0vJHtzZXJ2ZXJ9U2VydmljZT9XU0RMIi8+CQorICAgICAgICAgICAgPGFyZyBsaW5lPSIta2VlcCAtZCAke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMgaHR0cDovLyR7aHR0cC5ob3N0fToke2h0dHAucG9ydH0vJHtzZXJ2ZXJ9LyR7c2VydmVyfVNlcnZpY2U/V1NETCIvPgogICAgIDwvZXhlYz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmphci1jbGllbnQtdXRpbHMiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9ImludGVybmFsLXJ1biIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0iaW50ZXJuYWwtcnVuIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXV0b3VuZGVwbG95LWZpbGUiPgotICAJICAgIDxwYXJhbSBuYW1lPSJmaWxlbmFtZSIgdmFsdWU9IiR7c2VydmVyfS53YXIiLz4KKyAgICAgICAgICA8cGFyYW0gbmFtZT0iZmlsZW5hbWUiIHZhbHVlPSIke3NlcnZlcn0ud2FyIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGNvbmRpdGlvbiBwcm9wZXJ0eT0idW5kZXBsb3lfc3VjY2VlZGVkIj4KICAgICAgICAgICA8YXZhaWxhYmxlIGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2F1dG9kZXBsb3kvJHtzZXJ2ZXJ9Lmphcl91bmRlcGxveWVkIi8+CkBAIC03MSwxNCArNzEsMTQgQEAKICAgICAgICAgICA8YXZhaWxhYmxlIGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2F1dG9kZXBsb3kvJHtzZXJ2ZXJ9Lmphcl91bmRlcGxveUZhaWxlZCIvPgogICAgICAgICA8L2NvbmRpdGlvbj4KICAgICAgICAgPGZhaWwgaWY9InVuZGVwbG95X2ZhaWxlZCIgbWVzc2FnZT0idW5kZXBsb3ltZW50IGZhaWxlZCIvPgotCTxhbnRjYWxsIHRhcmdldD0icmVwb3J0Ii8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJyZXBvcnQiLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idGVzdF9idWlsZCI+Ci0JPGV4ZWMgZXhlY3V0YWJsZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vd3NpbXBvcnQiPgotICAgICAgICAJPGFyZyBsaW5lPSIta2VlcCAtZCAke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMgZW5kcG9pbnQvd3NkbC9IZWxsb0ltcGxTZXJ2aWNlLndzZGwiLz4KLQk8L2V4ZWM+Ci0JPGFudGNhbGwgdGFyZ2V0PSJidWlsZCIvPgorICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL3dzaW1wb3J0Ij4KKyAgICAgICAgICAgIDxhcmcgbGluZT0iLWtlZXAgLWQgJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzIGVuZHBvaW50L3dzZGwvSGVsbG9JbXBsU2VydmljZS53c2RsIi8+CisgICAgPC9leGVjPgorICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQiLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVwb3J0LXN1Y2Nlc3MiPgpAQCAtODcsNiArODcsNiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJyZXBvcnQtZmFpbHVyZSI+CiAgICAgICAgICAgICA8ZWNobyBtZXNzYWdlPSJUZXN0IGZhaWxlZCIvPgotICAgIDwvdGFyZ2V0PiAgIAkKLSAgICAKKyAgICA8L3RhcmdldD4KKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wcm92aWRlcmhhbmRsZXIvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wcm92aWRlcmhhbmRsZXIvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGE1YTRhMDEuLmVlZTY5MjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJvdmlkZXJoYW5kbGVyL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Byb3ZpZGVyaGFuZGxlci9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTMyLDEwICszMiwxMCBAQAogICAgICAgICBzdGF0aWMgSGVsbG9JbXBsU2VydmljZSBzZXJ2aWNlOwogCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQkgICAgc3RhdC5hZGREZXNjcmlwdGlvbigic2VydmxldC1wcm92aWRlci1hbm5vdGF0aW9uIik7CisgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oInNlcnZsZXQtcHJvdmlkZXItYW5ub3RhdGlvbiIpOwogICAgICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKICAgICAgICAgICAgIGNsaWVudC5kb1Rlc3QoYXJncyk7Ci0JICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJzZXJ2bGV0LXByb3ZpZGVyLWFubm90YXRpb24iKTsKKyAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoInNlcnZsZXQtcHJvdmlkZXItYW5ub3RhdGlvbiIpOwogICAgICAgIH0KIAogICAgICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmdbXSBhcmdzKSB7CkBAIC00MywxMSArNDMsMTEgQEAKICAgICAgICAgICAgICAgICBIZWxsb0ltcGwgcG9ydCA9IHNlcnZpY2UuZ2V0SGVsbG9JbXBsKCk7CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaT0wO2k8MTA7aSsrKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyByZXQgPSBwb3J0LnNheUhlbGxvKCJpbmplY3RlZFZhbHVlIEFwcHNlcnZlciBUZXN0ZXIgISIpOwotCQkgICAgaWYocmV0LmluZGV4T2YoIldlYlN2Y1Rlc3QtSGVsbG8iKSA9PSAtMSkgeworICAgICAgICAgICAgaWYocmV0LmluZGV4T2YoIldlYlN2Y1Rlc3QtSGVsbG8iKSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIlNpbXBsZS1Bbm5vdGF0aW9uIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQkJICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJldCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJzZXJ2bGV0LXByb3ZpZGVyLWFubm90YXRpb24iLCBzdGF0LlBBU1MpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wcm92aWRlcmhhbmRsZXIvZW5kcG9pbnQvSGVsbG9JbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Byb3ZpZGVyaGFuZGxlci9lbmRwb2ludC9IZWxsb0ltcGwuamF2YQppbmRleCA0YjQ3ZmMxLi4wYzlkOTU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Byb3ZpZGVyaGFuZGxlci9lbmRwb2ludC9IZWxsb0ltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Byb3ZpZGVyaGFuZGxlci9lbmRwb2ludC9IZWxsb0ltcGwuamF2YQpAQCAtMjEsNyArMjEsNyBAQAogaW1wb3J0IGpha2FydGEueG1sLndzLlByb3ZpZGVyOwogaW1wb3J0IGpha2FydGEueG1sLndzLldlYlNlcnZpY2VQcm92aWRlcjsKIGltcG9ydCBqYWthcnRhLnhtbC53cy5TZXJ2aWNlTW9kZTsKLWltcG9ydCBqYWthcnRhLnhtbC53cy5TZXJ2aWNlCTsJCitpbXBvcnQgamFrYXJ0YS54bWwud3MuU2VydmljZSAgICA7CiBpbXBvcnQgamFrYXJ0YS54bWwuc29hcC5TT0FQTWVzc2FnZTsKIGltcG9ydCBqYWthcnRhLmVqYi5TdGF0ZWxlc3M7CiAKQEAgLTQyLDExICs0MiwxMSBAQAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEpBWEJDb250ZXh0IGpheGJDb250ZXh0ID0gY3JlYXRlSkFYQkNvbnRleHQoKTsKICAgICBwcml2YXRlIGludCBjb21ibzsKICAgICBwcml2YXRlIGludCBib2R5SW5kZXg7Ci0gICAgCisKICAgICBwdWJsaWMgamFrYXJ0YS54bWwuYmluZC5KQVhCQ29udGV4dCBnZXRKQVhCQ29udGV4dCgpewogICAgICAgICByZXR1cm4gamF4YkNvbnRleHQ7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgamFrYXJ0YS54bWwuYmluZC5KQVhCQ29udGV4dCBjcmVhdGVKQVhCQ29udGV4dCgpewogICAgICAgICB0cnl7CiAgICAgICAgICAgICByZXR1cm4gamFrYXJ0YS54bWwuYmluZC5KQVhCQ29udGV4dC5uZXdJbnN0YW5jZShPYmplY3RGYWN0b3J5LmNsYXNzKTsKQEAgLTU0LDI4ICs1NCwyOCBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IFdlYlNlcnZpY2VFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCksIGUpOwogICAgICAgICB9CiAgICAgfQotICAgIAotICAgIAorCisKICAgICBwdWJsaWMgU291cmNlIGludm9rZShTb3VyY2UgcmVxdWVzdCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmVjdkJlYW4ocmVxdWVzdCk7CiAgICAgICAgICAgICByZXR1cm4gc2VuZEJlYW4oKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgICAgIHRocm93IG5ldyBXZWJTZXJ2aWNlRXhjZXB0aW9uKCJQcm92aWRlciBlbmRwb2ludCBmYWlsZWQiLCBlKTsgICAgICAgICAgICAKKyAgICAgICAgICAgIHRocm93IG5ldyBXZWJTZXJ2aWNlRXhjZXB0aW9uKCJQcm92aWRlciBlbmRwb2ludCBmYWlsZWQiLCBlKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCByZWN2QmVhbihTb3VyY2Ugc291cmNlKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqIHJlY3ZCZWFuICoqKioqKiIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oamF4YkNvbnRleHQuY3JlYXRlVW5tYXJzaGFsbGVyKCkudW5tYXJzaGFsKHNvdXJjZSkpOwogICAgICAgICBKQVhCRWxlbWVudCBlbGVtZW50ID0gKEpBWEJFbGVtZW50KSBqYXhiQ29udGV4dC5jcmVhdGVVbm1hcnNoYWxsZXIoKS51bm1hcnNoYWwoc291cmNlKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJuYW1lPSIrZWxlbWVudC5nZXROYW1lKCkrICIgdmFsdWU9IiArIGVsZW1lbnQuZ2V0VmFsdWUoKSk7ICAgICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJuYW1lPSIrZWxlbWVudC5nZXROYW1lKCkrICIgdmFsdWU9IiArIGVsZW1lbnQuZ2V0VmFsdWUoKSk7CiAgICAgICAgIGlmIChlbGVtZW50LmdldFZhbHVlKCkgaW5zdGFuY2VvZiBTYXlIZWxsbykgewotICAgICAgICAgICAgU2F5SGVsbG8gaGVsbG8gPSAoU2F5SGVsbG8pIGVsZW1lbnQuZ2V0VmFsdWUoKTsgCisgICAgICAgICAgICBTYXlIZWxsbyBoZWxsbyA9IChTYXlIZWxsbykgZWxlbWVudC5nZXRWYWx1ZSgpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTYXkgSGVsbG8gZnJvbSAiICsgaGVsbG8uZ2V0QXJnMCgpKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgIH0KIAogICAgIHByaXZhdGUgU291cmNlIHNlbmRCZWFuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CkBAIC04Myw5ICs4Myw5IEBACiAgICAgICAgIFNheUhlbGxvUmVzcG9uc2UgcmVzcCA9IG5ldyBTYXlIZWxsb1Jlc3BvbnNlKCk7CiAgICAgICAgIHJlc3Auc2V0UmV0dXJuKCJXZWJTdmNUZXN0LUhlbGxvIik7CiAgICAgICAgIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBib3V0ID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwotICAgICAgICBPYmplY3RGYWN0b3J5IGZhY3RvcnkgPSBuZXcgT2JqZWN0RmFjdG9yeSgpOyAKKyAgICAgICAgT2JqZWN0RmFjdG9yeSBmYWN0b3J5ID0gbmV3IE9iamVjdEZhY3RvcnkoKTsKICAgICAgICAgamF4YkNvbnRleHQuY3JlYXRlTWFyc2hhbGxlcigpLm1hcnNoYWwoZmFjdG9yeS5jcmVhdGVTYXlIZWxsb1Jlc3BvbnNlKHJlc3ApLCBib3V0KTsKICAgICAgICAgcmV0dXJuIG5ldyBTdHJlYW1Tb3VyY2UobmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGJvdXQudG9CeXRlQXJyYXkoKSkpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wcm92aWRlcmhhbmRsZXIvZW5kcG9pbnQvVGVzdEhhbmRsZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJvdmlkZXJoYW5kbGVyL2VuZHBvaW50L1Rlc3RIYW5kbGVyLmphdmEKaW5kZXggZmJhNjA1MS4uNjQ5NDU3ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wcm92aWRlcmhhbmRsZXIvZW5kcG9pbnQvVGVzdEhhbmRsZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Byb3ZpZGVyaGFuZGxlci9lbmRwb2ludC9UZXN0SGFuZGxlci5qYXZhCkBAIC0yOCwxMSArMjgsMTEgQEAKIGltcG9ydCBqYWthcnRhLnhtbC5zb2FwLio7CiAKIHB1YmxpYyBjbGFzcyBUZXN0SGFuZGxlciBpbXBsZW1lbnRzIFNPQVBIYW5kbGVyPFNPQVBNZXNzYWdlQ29udGV4dD4gewotICAgIAorCiAgICAgcHVibGljIFNldDxRTmFtZT4gZ2V0SGVhZGVycygpIHsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotICAgIAorCiAgICAgU3RyaW5nIHBvc3RDb25zdFN0cmluZyA9ICJOT1RfSU5JVElBTElaRUQiOwogICAgIEBQb3N0Q29uc3RydWN0CiAgICAgcHVibGljIHZvaWQgaW5pdCgpIHsKQEAgLTQwLDggKzQwLDggQEAKICAgICB9CiAKICAgICBAUmVzb3VyY2UobmFtZT0ic3RyaW5nVmFsdWUiKQotICAgIFN0cmluZyBpbmplY3RlZFN0cmluZyA9ICJ1bmRlZmluZWQiOyAgICAKLSAgICAKKyAgICBTdHJpbmcgaW5qZWN0ZWRTdHJpbmcgPSAidW5kZWZpbmVkIjsKKwogICAgIHB1YmxpYyBib29sZWFuIGhhbmRsZU1lc3NhZ2UoU09BUE1lc3NhZ2VDb250ZXh0IGNvbnRleHQpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGlmICgiUFJPUEVSTFlfSU5JVElBTElaRUQiLmVxdWFscyhwb3N0Q29uc3RTdHJpbmcpKSB7CkBAIC01MCwzMyArNTAsMzMgQEAKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhhbmRsZXIgUG9zdENvbnN0cnVjdCBub3QgY2FsbGVkIHByb3BlcnR5Iik7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJwb3N0Q29uc3RTdHJpbmcgPSAiICsgcG9zdENvbnN0U3RyaW5nKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9ICAgICAgICAgICAgCisgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoInVuZGVmaW5lZCIuZXF1YWxzKGluamVjdGVkU3RyaW5nKSkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGFuZGxlciBub3QgaW5qZWN0ZWQgcHJvcGVydHkiKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW5qZWN0ZWRTdHJpbmcgPSAiICsgaW5qZWN0ZWRTdHJpbmcpOwotICAgICAgICAgICAgfSAgICAgICAgICAgIAorICAgICAgICAgICAgfQogICAgICAgICAgICAgU09BUE1lc3NhZ2VDb250ZXh0IHNtYyA9IChTT0FQTWVzc2FnZUNvbnRleHQpIGNvbnRleHQ7CiAgICAgICAgICAgICBTT0FQTWVzc2FnZSBtZXNzYWdlID0gc21jLmdldE1lc3NhZ2UoKTsKICAgICAgICAgICAgIFNPQVBCb2R5IGJvZHkgPSBtZXNzYWdlLmdldFNPQVBCb2R5KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU09BUEVsZW1lbnQgcGFyYW1FbGVtZW50ID0KICAgICAgICAgICAgICAgICAoU09BUEVsZW1lbnQpIGJvZHkuZ2V0Rmlyc3RDaGlsZCgpLmdldEZpcnN0Q2hpbGQoKTsKICAgICAgICAgICAgIHBhcmFtRWxlbWVudC5zZXRWYWx1ZShpbmplY3RlZFN0cmluZyArICIgIiArIHBhcmFtRWxlbWVudC5nZXRWYWx1ZSgpKTsKICAgICAgICAgfSBjYXRjaCAoU09BUEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9Ci0JU3lzdGVtLm91dC5wcmludGxuKCJWSUoncyBURVNUIEhBTkRMRVIgQ0FMTEVEIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJWSUoncyBURVNUIEhBTkRMRVIgQ0FMTEVEIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGhhbmRsZUZhdWx0KFNPQVBNZXNzYWdlQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3koKSB7fQotICAgIAorCiAgICAgcHVibGljIHZvaWQgY2xvc2UoTWVzc2FnZUNvbnRleHQgY29udGV4dCkge30KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wcm92aWRlcmhhbmRsZXIvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcHJvdmlkZXJoYW5kbGVyL3dlYi54bWwKaW5kZXggMjJlNWM4Yi4uYTE3MTdkNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9wcm92aWRlcmhhbmRsZXIvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Byb3ZpZGVyaGFuZGxlci93ZWIueG1sCkBAIC0xOCwzMCArMTgsMzAgQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKLQkJCWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgorICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKKyAgICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogCi0JPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBIZWxsbyBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQk8ZGlzcGxheS1uYW1lPkhlbGxvV0FSPC9kaXNwbGF5LW5hbWU+CisgICAgPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBIZWxsbyBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICA8ZGlzcGxheS1uYW1lPkhlbGxvV0FSPC9kaXNwbGF5LW5hbWU+CiAKLQk8c2VydmxldD4KLQkJPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBIZWxsbyBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JCTxkaXNwbGF5LW5hbWU+SGVsbG9XZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+Ci0JCTxzZXJ2bGV0LW5hbWU+ZW5kcG9pbnQuSGVsbG9JbXBsPC9zZXJ2bGV0LW5hbWU+Ci0JCTxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkhlbGxvSW1wbDwvc2VydmxldC1jbGFzcz4KLQkJPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+Ci0JPC9zZXJ2bGV0PgorICAgIDxzZXJ2bGV0PgorICAgICAgICA8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIEhlbGxvIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgPGRpc3BsYXktbmFtZT5IZWxsb1dlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5lbmRwb2ludC5IZWxsb0ltcGw8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuSGVsbG9JbXBsPC9zZXJ2bGV0LWNsYXNzPgorICAgICAgICA8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KKyAgICA8L3NlcnZsZXQ+CiAKLQk8c2VydmxldC1tYXBwaW5nPgotCQk8c2VydmxldC1uYW1lPmVuZHBvaW50LkhlbGxvSW1wbDwvc2VydmxldC1uYW1lPgotCQk8dXJsLXBhdHRlcm4+L0hlbGxvSW1wbFNlcnZpY2U8L3VybC1wYXR0ZXJuPgotCTwvc2VydmxldC1tYXBwaW5nPgorICAgIDxzZXJ2bGV0LW1hcHBpbmc+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+ZW5kcG9pbnQuSGVsbG9JbXBsPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDx1cmwtcGF0dGVybj4vSGVsbG9JbXBsU2VydmljZTwvdXJsLXBhdHRlcm4+CisgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiAKLQk8c2Vzc2lvbi1jb25maWc+Ci0JCTxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KLQk8L3Nlc3Npb24tY29uZmlnPgorICAgIDxzZXNzaW9uLWNvbmZpZz4KKyAgICAgICAgPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgorICAgIDwvc2Vzc2lvbi1jb25maWc+CiAKICAgICAgICAgPGVudi1lbnRyeT4KICAgICAgICAgICAgIDxlbnYtZW50cnktbmFtZT5zdHJpbmdWYWx1ZTwvZW52LWVudHJ5LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Jlc3RmdWwtMi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9yZXN0ZnVsLTIvYnVpbGQucHJvcGVydGllcwppbmRleCA0ZjVkZjA0Li5mMDUwNjNjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Jlc3RmdWwtMi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcmVzdGZ1bC0yL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDkgKzE1LDkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InJlc3RmdWwtMiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iLi93ZWIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Jlc3RmdWwtMi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Jlc3RmdWwtMi9idWlsZC54bWwKaW5kZXggMWY2NjQ4Zi4uNzEzODc0YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9yZXN0ZnVsLTIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcmVzdGZ1bC0yL2J1aWxkLnhtbApAQCAtNTksOCArNTksOCBAQAogCiAgPHJlcGxhY2UgZmlsZT0iY2xpZW50L0NsaWVudC5qYXZhIiB2YWx1ZT0iJHtodHRwLmhvc3R9IiB0b2tlbj0iSFRUUF9IT1NUIi8+CiAgICAgICA8cmVwbGFjZSBmaWxlPSJjbGllbnQvQ2xpZW50LmphdmEiIHZhbHVlPSIke2h0dHAucG9ydH0iIHRva2VuPSJIVFRQX1BPUlQiLz4KLSAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIgCi0gICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2oyZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXJ0Lmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy10b29scy5qYXIiIAorICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9qMmVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy1ydC5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtdG9vbHMuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9ImNsaWVudC8qKiIvPgogICAgIDwvdGFyZ2V0PgogCkBAIC03MywxNCArNzMsMTQgQEAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW5jbGllbnQiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4tY2xpZW50Ij4KICAgICAgICAgPHBhcmFtIG5hbWU9ImNsaWVudC1jbGFzcyIgdmFsdWU9ImNsaWVudC5DbGllbnQiLz4KICAgICAgICAgPHBhcmFtIG5hbWU9Im90aGVyLWFyZ3MiIHZhbHVlPSJyZXN0ZnVsLXN2Yy0yIi8+CiAgICAgICA8L2FudGNhbGw+CiAKLTwhLS1yZXN0b3JlIHRoZSB0b2tlbnMgYmFjayBpbiBmaWxlLS0+IAorPCEtLXJlc3RvcmUgdGhlIHRva2VucyBiYWNrIGluIGZpbGUtLT4KICAgICAgICAgIDxyZXBsYWNlIGZpbGU9ImNsaWVudC9DbGllbnQuamF2YSIgdG9rZW49IiR7aHR0cC5ob3N0fSIgdmFsdWU9IkhUVFBfSE9TVCIvPgogICAgICAgICAgPHJlcGxhY2UgZmlsZT0iY2xpZW50L0NsaWVudC5qYXZhIiB0b2tlbj0iJHtodHRwLnBvcnR9IiB2YWx1ZT0iSFRUUF9QT1JUIi8+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Jlc3RmdWwtMi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Jlc3RmdWwtMi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggYjRiMzM1Ni4uMDZkMjYwMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9yZXN0ZnVsLTIvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcmVzdGZ1bC0yL2NsaWVudC9DbGllbnQuamF2YQpAQCAtNTMsNyArNTMsNyBAQAogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBxdWVyeVN0cmluZyA9ICJudW0xPTMwJm51bTI9MjAiOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24gewotCXN0YXQuYWRkRGVzY3JpcHRpb24oIndlYnNlcnZpY2VzLXNpbXBsZS1yZXN0ZnVsLXN2YyIpOworICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIndlYnNlcnZpY2VzLXNpbXBsZS1yZXN0ZnVsLXN2YyIpOwogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAgICAgICBTZXJ2aWNlIHNlcnZpY2UgPSBjbGllbnQuY3JlYXRlU2VydmljZSgpOwogICAgICAgICBVUkkgZW5kcG9pbnRVUkkgPSBuZXcgVVJJKGVuZHBvaW50QWRkcmVzcyk7CkBAIC03Miw3ICs3Miw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoIkludm9raW5nIFJlc3RmdWwgR0VUIFJlcXVlc3Qgd2l0aCBxdWVyeSBzdHJpbmcgIiArIHF1ZXJ5U3RyaW5nKTsKICAgICAgICAgU291cmNlIHJlc3VsdCA9IGQuaW52b2tlKG51bGwpOwogICAgICAgICBwcmludFNvdXJjZShyZXN1bHQpOwotCXN0YXQucHJpbnRTdW1tYXJ5KCJ3ZWJzZXJ2aWNlcy1zaW1wbGUtcmVzdGZ1bC1zdmMiKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgid2Vic2VydmljZXMtc2ltcGxlLXJlc3RmdWwtc3ZjIik7CiAgICAgfQogCiAgICAgcHJpdmF0ZSBTZXJ2aWNlIGNyZWF0ZVNlcnZpY2UoKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Jlc3RmdWwtMi9lbmRwb2ludC9BZGROdW1iZXJzSW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9yZXN0ZnVsLTIvZW5kcG9pbnQvQWRkTnVtYmVyc0ltcGwuamF2YQppbmRleCAwZmFhYWIyLi4zNzI4YzgxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Jlc3RmdWwtMi9lbmRwb2ludC9BZGROdW1iZXJzSW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcmVzdGZ1bC0yL2VuZHBvaW50L0FkZE51bWJlcnNJbXBsLmphdmEKQEAgLTYwLDcgKzYwLDcgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBIVFRQRXhjZXB0aW9uKDUwMCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIFNvdXJjZSBjcmVhdGVTb3VyY2UoU3RyaW5nIHN0cikgewogICAgICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHN0ciwgIj0mLyIpOwogICAgICAgICBTdHJpbmcgdG9rZW4gPSBzdC5uZXh0VG9rZW4oKTsKQEAgLTc2LDUgKzc2LDUgQEAKICAgICAgICAgICAgIG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShib2R5LmdldEJ5dGVzKCkpKTsKICAgICAgICAgcmV0dXJuIHNvdXJjZTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcmVzdGZ1bC0yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Jlc3RmdWwtMi93ZWIueG1sCmluZGV4IDJmZjY3NGYuLjkzYmFmMjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcmVzdGZ1bC0yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9yZXN0ZnVsLTIvd2ViLnhtbApAQCAtMTgsMjMgKzE4LDIzIEBACiAtLT4KIAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCi0JCQlodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KKyAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCisgICAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KIAotCTxkZXNjcmlwdGlvbj5XZWJUaWVyIGZvciB0aGUgUmVzdGZ1bCBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQk8ZGlzcGxheS1uYW1lPkhlbGxvV0FSPC9kaXNwbGF5LW5hbWU+CisgICAgPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBSZXN0ZnVsIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgIDxkaXNwbGF5LW5hbWU+SGVsbG9XQVI8L2Rpc3BsYXktbmFtZT4KIAotCTxzZXJ2bGV0PgotCQk8c2VydmxldC1uYW1lPmVuZHBvaW50LkFkZE51bWJlcnNJbXBsPC9zZXJ2bGV0LW5hbWU+Ci0JCTxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkFkZE51bWJlcnNJbXBsPC9zZXJ2bGV0LWNsYXNzPgotCQk8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KLQk8L3NlcnZsZXQ+CisgICAgPHNlcnZsZXQ+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+ZW5kcG9pbnQuQWRkTnVtYmVyc0ltcGw8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuQWRkTnVtYmVyc0ltcGw8L3NlcnZsZXQtY2xhc3M+CisgICAgICAgIDxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgorICAgIDwvc2VydmxldD4KIAotCTxzZXJ2bGV0LW1hcHBpbmc+Ci0JCTxzZXJ2bGV0LW5hbWU+ZW5kcG9pbnQuQWRkTnVtYmVyc0ltcGw8L3NlcnZsZXQtbmFtZT4KLQkJPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL0FkZE51bWJlcnNTZXJ2aWNlPC91cmwtcGF0dGVybj4KLQk8L3NlcnZsZXQtbWFwcGluZz4KKyAgICA8c2VydmxldC1tYXBwaW5nPgorICAgICAgICA8c2VydmxldC1uYW1lPmVuZHBvaW50LkFkZE51bWJlcnNJbXBsPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9BZGROdW1iZXJzU2VydmljZTwvdXJsLXBhdHRlcm4+CisgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcmVzdGZ1bC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9yZXN0ZnVsL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZWVkMTk4Yi4uYTFlYzExMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9yZXN0ZnVsL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9yZXN0ZnVsL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDkgKzE1LDkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InJlc3RmdWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9Ii4vd2ViLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9yZXN0ZnVsL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcmVzdGZ1bC9idWlsZC54bWwKaW5kZXggMGM3YjVjNy4uODU4NTJkZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9yZXN0ZnVsL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Jlc3RmdWwvYnVpbGQueG1sCkBAIC01OCw4ICs1OCw4IEBACiAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KIDxyZXBsYWNlIGZpbGU9ImNsaWVudC9DbGllbnQuamF2YSIgdmFsdWU9IiR7aHR0cC5ob3N0fSIgdG9rZW49IkhUVFBfSE9TVCIvPgogICAgICAgPHJlcGxhY2UgZmlsZT0iY2xpZW50L0NsaWVudC5qYXZhIiB2YWx1ZT0iJHtodHRwLnBvcnR9IiB0b2tlbj0iSFRUUF9QT1JUIi8+Ci0gICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiIAotICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9qMmVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy1ydC5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtdG9vbHMuamFyIiAKKyAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvajJlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtcnQuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXRvb2xzLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJjbGllbnQvKioiLz4KIAogCkBAIC03NCw3ICs3NCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuY2xpZW50Ij4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLWNsaWVudCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJjbGllbnQtY2xhc3MiIHZhbHVlPSJjbGllbnQuQ2xpZW50Ii8+CkBAIC04Miw3ICs4Miw3IEBACiAgICAgICA8L2FudGNhbGw+CiAKIAotPCEtLXJlc3RvcmUgdGhlIHRva2VucyBiYWNrIGluIGZpbGUtLT4gCis8IS0tcmVzdG9yZSB0aGUgdG9rZW5zIGJhY2sgaW4gZmlsZS0tPgogICAgICAgICAgPHJlcGxhY2UgZmlsZT0iY2xpZW50L0NsaWVudC5qYXZhIiB0b2tlbj0iJHtodHRwLmhvc3R9IiB2YWx1ZT0iSFRUUF9IT1NUIi8+CiAgICAgICAgICA8cmVwbGFjZSBmaWxlPSJjbGllbnQvQ2xpZW50LmphdmEiIHRva2VuPSIke2h0dHAucG9ydH0iIHZhbHVlPSJIVFRQX1BPUlQiLz4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcmVzdGZ1bC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Jlc3RmdWwvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDdmZDY3ZGUuLjJlNWNlZjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcmVzdGZ1bC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9yZXN0ZnVsL2NsaWVudC9DbGllbnQuamF2YQpAQCAtNDAsMTMgKzQwLDEzIEBACiAgICAgICAgICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24gewotCXN0YXQuYWRkRGVzY3JpcHRpb24oIndlYnNlcnZpY2VzLXNpbXBsZS1yZXN0ZnVsLXN2YyIpOwotICAgICAgICBTdHJpbmcgZW5kcG9pbnRBZGRyZXNzID0gCisgICAgc3RhdC5hZGREZXNjcmlwdGlvbigid2Vic2VydmljZXMtc2ltcGxlLXJlc3RmdWwtc3ZjIik7CisgICAgICAgIFN0cmluZyBlbmRwb2ludEFkZHJlc3MgPQogICAgICAgICAgICAgImh0dHA6Ly9IVFRQX0hPU1Q6SFRUUF9QT1JUL3Jlc3RmdWwvd2Vic2VydmljZS9BZGROdW1iZXJzU2VydmljZSI7CiAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKGVuZHBvaW50QWRkcmVzcysiP251bTE9MTAmbnVtMj0yMCIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCJJbnZva2luZyBVUkw9Iit1cmwpOwogICAgICAgICBwcm9jZXNzKHVybCwgYXJncyk7Ci0Jc3RhdC5wcmludFN1bW1hcnkoIndlYnNlcnZpY2VzLXNpbXBsZS1yZXN0ZnVsLXN2YyIpOworICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3ZWJzZXJ2aWNlcy1zaW1wbGUtcmVzdGZ1bC1zdmMiKTsKICAgICB9CiAKICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHByb2Nlc3MoVVJMIHVybCwgU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7CkBAIC02NCwxMiArNjQsMTIgQEAKICAgICAgICAgICAgIG9wcm9wcy5wdXQoT3V0cHV0S2V5cy5PTUlUX1hNTF9ERUNMQVJBVElPTiwgInllcyIpOwogICAgICAgICAgICAgdHJhbnMuc2V0T3V0cHV0UHJvcGVydGllcyhvcHJvcHMpOwogICAgICAgICAgICAgdHJhbnMudHJhbnNmb3JtKHNvdXJjZSwgc3IpOwotCSAgICBTdHJpbmcgcmVzcCA9IGJvcy50b1N0cmluZygpOworICAgICAgICBTdHJpbmcgcmVzcCA9IGJvcy50b1N0cmluZygpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqIFJlc3BvbnNlICoqKioqKiIrcmVzcCk7CiAgICAgICAgICAgICBib3MuY2xvc2UoKTsKLQkgICAgaWYocmVzcC5pbmRleE9mKCI8bnM6cmV0dXJuPjMwPC9uczpyZXR1cm4+IikgIT0gLTEpCisgICAgICAgIGlmKHJlc3AuaW5kZXhPZigiPG5zOnJldHVybj4zMDwvbnM6cmV0dXJuPiIpICE9IC0xKQogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGFyZ3NbMF0sIHN0YXQuUEFTUyk7Ci0JICAgIGVsc2UKKyAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGFyZ3NbMF0sIHN0YXQuRkFJTCk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Jlc3RmdWwvZW5kcG9pbnQvQWRkTnVtYmVyc0ltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcmVzdGZ1bC9lbmRwb2ludC9BZGROdW1iZXJzSW1wbC5qYXZhCmluZGV4IDBmYWFhYjIuLjM3MjhjODEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcmVzdGZ1bC9lbmRwb2ludC9BZGROdW1iZXJzSW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcmVzdGZ1bC9lbmRwb2ludC9BZGROdW1iZXJzSW1wbC5qYXZhCkBAIC02MCw3ICs2MCw3IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgSFRUUEV4Y2VwdGlvbig1MDApOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBTb3VyY2UgY3JlYXRlU291cmNlKFN0cmluZyBzdHIpIHsKICAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihzdHIsICI9Ji8iKTsKICAgICAgICAgU3RyaW5nIHRva2VuID0gc3QubmV4dFRva2VuKCk7CkBAIC03Niw1ICs3Niw1IEBACiAgICAgICAgICAgICBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oYm9keS5nZXRCeXRlcygpKSk7CiAgICAgICAgIHJldHVybiBzb3VyY2U7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3Jlc3RmdWwvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcmVzdGZ1bC93ZWIueG1sCmluZGV4IDJmZjY3NGYuLjkzYmFmMjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcmVzdGZ1bC93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvcmVzdGZ1bC93ZWIueG1sCkBAIC0xOCwyMyArMTgsMjMgQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKLQkJCWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgorICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKKyAgICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogCi0JPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBSZXN0ZnVsIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCTxkaXNwbGF5LW5hbWU+SGVsbG9XQVI8L2Rpc3BsYXktbmFtZT4KKyAgICA8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIFJlc3RmdWwgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgPGRpc3BsYXktbmFtZT5IZWxsb1dBUjwvZGlzcGxheS1uYW1lPgogCi0JPHNlcnZsZXQ+Ci0JCTxzZXJ2bGV0LW5hbWU+ZW5kcG9pbnQuQWRkTnVtYmVyc0ltcGw8L3NlcnZsZXQtbmFtZT4KLQkJPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuQWRkTnVtYmVyc0ltcGw8L3NlcnZsZXQtY2xhc3M+Ci0JCTxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgotCTwvc2VydmxldD4KKyAgICA8c2VydmxldD4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5lbmRwb2ludC5BZGROdW1iZXJzSW1wbDwvc2VydmxldC1uYW1lPgorICAgICAgICA8c2VydmxldC1jbGFzcz5lbmRwb2ludC5BZGROdW1iZXJzSW1wbDwvc2VydmxldC1jbGFzcz4KKyAgICAgICAgPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+CisgICAgPC9zZXJ2bGV0PgogCi0JPHNlcnZsZXQtbWFwcGluZz4KLQkJPHNlcnZsZXQtbmFtZT5lbmRwb2ludC5BZGROdW1iZXJzSW1wbDwvc2VydmxldC1uYW1lPgotCQk8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvQWRkTnVtYmVyc1NlcnZpY2U8L3VybC1wYXR0ZXJuPgotCTwvc2VydmxldC1tYXBwaW5nPgorICAgIDxzZXJ2bGV0LW1hcHBpbmc+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+ZW5kcG9pbnQuQWRkTnVtYmVyc0ltcGw8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL0FkZE51bWJlcnNTZXJ2aWNlPC91cmwtcGF0dGVybj4KKyAgICA8L3NlcnZsZXQtbWFwcGluZz4KIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zb2FwMTIvYXBwY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zb2FwMTIvYXBwY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDExNTRkM2UuLjNjYjcxN2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc29hcDEyL2FwcGNsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3NvYXAxMi9hcHBjbGllbnQvQ2xpZW50LmphdmEKQEAgLTMwLDEwICszMCwxMCBAQAogICAgICAgICBAV2ViU2VydmljZVJlZihuYW1lPSJzZXJ2aWNlL015U2VydmljZSIpIHN0YXRpYyBBZGROdW1iZXJzU2VydmljZSBzZXJ2aWNlOwogCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQkgICAgc3RhdC5hZGREZXNjcmlwdGlvbigid2Vic2VydmljZXMtc2ltcGxlLWFubm90YXRpb24iKTsKKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigid2Vic2VydmljZXMtc2ltcGxlLWFubm90YXRpb24iKTsKICAgICAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7CiAgICAgICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3MpOwotCSAgICBzdGF0LnByaW50U3VtbWFyeSgid2Vic2VydmljZXMtYW5ub3RhdGlvbiIpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgid2Vic2VydmljZXMtYW5ub3RhdGlvbiIpOwogICAgICAgIH0KIAogICAgICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmdbXSBhcmdzKSB7CkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgICAgICAgICAgQWRkTnVtYmVyc1BvcnRUeXBlIHBvcnQgPSBzZXJ2aWNlLmdldEFkZE51bWJlcnNQb3J0KCk7CiAgICAgICAgICAgICAgICAgKChCaW5kaW5nUHJvdmlkZXIpcG9ydCkuZ2V0UmVxdWVzdENvbnRleHQoKS5wdXQoQmluZGluZ1Byb3ZpZGVyLkVORFBPSU5UX0FERFJFU1NfUFJPUEVSVFksImh0dHA6Ly9IVFRQX0hPU1Q6SFRUUF9QT1JUL3NvYXAxMi93ZWJzZXJ2aWNlL0FkZE51bWJlcnNTZXJ2aWNlP1dTREwiKTsKICAgICAgICAgICAgICAgICBpbnQgcmV0ID0gcG9ydC5hZGROdW1iZXJzKDEwMCwgMjAwKTsKLQkJaWYocmV0ICE9IDMwMCkgeworICAgICAgICBpZihyZXQgIT0gMzAwKSB7CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBncmVldGluZyAiICsgcmV0KTsKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoInNvYXAxMiIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc29hcDEyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3NvYXAxMi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGQ0OTY4MzguLmYwYzFjMDYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc29hcDEyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zb2FwMTIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzb2FwMTIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9Ii4vd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iLi9zdW4td2ViLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zb2FwMTIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zb2FwMTIvYnVpbGQueG1sCmluZGV4IDU1NTc5MGMuLmVmMDkxOTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc29hcDEyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3NvYXAxMi9idWlsZC54bWwKQEAgLTc0LDcgKzc0LDcgQEAKICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxyZXBsYWNlIGZpbGU9ImFwcGNsaWVudC9DbGllbnQuamF2YSIgdmFsdWU9IiR7aHR0cC5ob3N0fSIgdG9rZW49IkhUVFBfSE9TVCIvPgogICAgICAgPHJlcGxhY2UgZmlsZT0iYXBwY2xpZW50L0NsaWVudC5qYXZhIiB2YWx1ZT0iJHtodHRwLnBvcnR9IiB0b2tlbj0iSFRUUF9QT1JUIi8+Ci0gICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcHBjbGllbnQiICAKKyAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FwcGNsaWVudCIKICAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvajJlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtcnQuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXRvb2xzLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJhcHBjbGllbnQvKioiLz4KICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FwcGNsaWVudC9NRVRBLUlORi93c2RsIi8+CkBAIC0xMDgsNyArMTA4LDcgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY2xpZW50LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW50ZXN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSJodHRwOi8vJHtodHRwLmhvc3R9OiR7aHR0cC5wb3J0fSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zb2FwMTIvY3VzdG9tLWNsaWVudC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3NvYXAxMi9jdXN0b20tY2xpZW50LnhtbAppbmRleCA2YTEzNWFkLi5mZTNmNzM2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3NvYXAxMi9jdXN0b20tY2xpZW50LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3NvYXAxMi9jdXN0b20tY2xpZW50LnhtbApAQCAtMTcsMTIgKzE3LDEyIEBACiAKIC0tPgogCi08YmluZGluZ3MgCis8YmluZGluZ3MKICAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgogICAgIHhtbG5zOmpheGI9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheGIiCiAgICAgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCiAgICAgd3NkbExvY2F0aW9uPSJBZGROdW1iZXJzLndzZGwiCi0gICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheHdzIj4gICAgCisgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheHdzIj4KICAgICA8YmluZGluZ3Mgbm9kZT0ibnMxOmRlZmluaXRpb25zIiB4bWxuczpuczE9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KICAgICAgICAgPHBhY2thZ2UgbmFtZT0iY2xpZW50Ii8+CiAgICAgPC9iaW5kaW5ncz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc29hcDEyL2N1c3RvbS1zZXJ2ZXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zb2FwMTIvY3VzdG9tLXNlcnZlci54bWwKaW5kZXggNGNmYmI1OS4uZTZiYjIzNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zb2FwMTIvY3VzdG9tLXNlcnZlci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zb2FwMTIvY3VzdG9tLXNlcnZlci54bWwKQEAgLTE3LDcgKzE3LDcgQEAKIAogLS0+CiAKLTxiaW5kaW5ncyAKKzxiaW5kaW5ncwogICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCiAgICAgeG1sbnM6amF4Yj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4YiIKICAgICB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc29hcDEyL2VuZHBvaW50L0FkZE51bWJlcnNJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3NvYXAxMi9lbmRwb2ludC9BZGROdW1iZXJzSW1wbC5qYXZhCmluZGV4IDM3NGY1YmQuLmMzZDJiOTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc29hcDEyL2VuZHBvaW50L0FkZE51bWJlcnNJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zb2FwMTIvZW5kcG9pbnQvQWRkTnVtYmVyc0ltcGwuamF2YQpAQCAtMTksNyArMTksNyBAQAogQGpha2FydGEueG1sLndzLkJpbmRpbmdUeXBlKGpha2FydGEueG1sLndzLnNvYXAuU09BUEJpbmRpbmcuU09BUDEySFRUUF9CSU5ESU5HKQogQGpha2FydGEuandzLldlYlNlcnZpY2UgKHdzZGxMb2NhdGlvbj0iV0VCLUlORi93c2RsL0FkZE51bWJlcnMud3NkbCIsIHNlcnZpY2VOYW1lPSJBZGROdW1iZXJzU2VydmljZSIsIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2R1a2Uub3JnIiwgcG9ydE5hbWU9IkFkZE51bWJlcnNQb3J0IiwgZW5kcG9pbnRJbnRlcmZhY2U9ImVuZHBvaW50LkFkZE51bWJlcnNQb3J0VHlwZSIpCiBwdWJsaWMgY2xhc3MgQWRkTnVtYmVyc0ltcGwgaW1wbGVtZW50cyBBZGROdW1iZXJzUG9ydFR5cGUgewotICAgIAorCiAgICAgcHVibGljIGludCBhZGROdW1iZXJzIChpbnQgbnVtYmVyMSwgaW50IG51bWJlcjIpIHsKICAgICAgICAgcmV0dXJuIG51bWJlcjEgKyBudW1iZXIyOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc29hcDEyL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3NvYXAxMi93ZWIueG1sCmluZGV4IDYyNTYxNTMuLjE4ODllYjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc29hcDEyL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zb2FwMTIvd2ViLnhtbApAQCAtMTgsMjkgKzE4LDI5IEBACiAtLT4KIAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCi0JCQlodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KKyAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCisgICAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KIAotCTxkZXNjcmlwdGlvbj5BZGROdW1iZXJzIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgIDxkZXNjcmlwdGlvbj5BZGROdW1iZXJzIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgogCi0JPHNlcnZsZXQ+Ci0JCTxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgQWRkTnVtYmVycyBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JCTxkaXNwbGF5LW5hbWU+QWRkTnVtYmVyc1dlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KLQkJPHNlcnZsZXQtbmFtZT5BZGROdW1iZXJzSW1wbDwvc2VydmxldC1uYW1lPgotCQk8c2VydmxldC1jbGFzcz5lbmRwb2ludC5BZGROdW1iZXJzSW1wbDwvc2VydmxldC1jbGFzcz4KLQkJPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+Ci0JPC9zZXJ2bGV0PgorICAgIDxzZXJ2bGV0PgorICAgICAgICA8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIEFkZE51bWJlcnMgV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgICAgICA8ZGlzcGxheS1uYW1lPkFkZE51bWJlcnNXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+QWRkTnVtYmVyc0ltcGw8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuQWRkTnVtYmVyc0ltcGw8L3NlcnZsZXQtY2xhc3M+CisgICAgICAgIDxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgorICAgIDwvc2VydmxldD4KIAotCTxzZXJ2bGV0LW1hcHBpbmc+Ci0JCTxzZXJ2bGV0LW5hbWU+QWRkTnVtYmVyc0ltcGw8L3NlcnZsZXQtbmFtZT4KLQkJPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL0FkZE51bWJlcnNTZXJ2aWNlPC91cmwtcGF0dGVybj4KLQk8L3NlcnZsZXQtbWFwcGluZz4KKyAgICA8c2VydmxldC1tYXBwaW5nPgorICAgICAgICA8c2VydmxldC1uYW1lPkFkZE51bWJlcnNJbXBsPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9BZGROdW1iZXJzU2VydmljZTwvdXJsLXBhdHRlcm4+CisgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiAKLQk8c2Vzc2lvbi1jb25maWc+Ci0JCTxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KLQk8L3Nlc3Npb24tY29uZmlnPgorICAgIDxzZXNzaW9uLWNvbmZpZz4KKyAgICAgICAgPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgorICAgIDwvc2Vzc2lvbi1jb25maWc+CiAKIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zb2FwdGNwL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3NvYXB0Y3AvYnVpbGQucHJvcGVydGllcwppbmRleCAzYjIzNDI0Li5mYThhNzUwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3NvYXB0Y3AvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3NvYXB0Y3AvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzb2FwdGNwIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSIuL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamIud3NpdC5kZXNjcmlwdG9ycyIgdmFsdWU9Ii4vZXRjL2VqYiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zb2FwdGNwL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc29hcHRjcC9idWlsZC54bWwKaW5kZXggZTRmMDkxNi4uZGI2M2JiNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zb2FwdGNwL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3NvYXB0Y3AvYnVpbGQueG1sCkBAIC0yNiwxMyArMjYsMTMgQEAKIF0+CiAKIDxwcm9qZWN0IG5hbWU9IndlYnNlcnZpY2VyZWZzIiBkZWZhdWx0PSJhbGwiIGJhc2VkaXI9Ii4iPgotICAgIAorCiAgICAgJmNvbW1vblNldHVwOwogICAgICZjb21tb25CdWlsZDsKICAgICAmY29tbW9uUnVuOwogICAgICZ0ZXN0cHJvcGVydGllczsKICAgICAmamF4d3NUb29sczsKLSAgICAKKwogICAgIDxwYXRoIGlkPSJjbGllbnQtY2xhc3NwYXRoIj4KICAgICAgICAgPHBhdGhlbGVtZW50IHBhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIi8+CiAgICAgICAgIDxwYXRoZWxlbWVudCBwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9qMmVlLmphciIvPgpAQCAtNDEsMTYgKzQxLDE2IEBACiAgICAgICAgIDxwYXRoZWxlbWVudCBwYXRoPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9hY3RpdmF0aW9uLmphciIvPgogICAgICAgICA8cGF0aGVsZW1lbnQgcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIvYXBwc2Vydi1ydC5qYXIiLz4KICAgICA8L3BhdGg+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iY2xlYW4sIHNldHVwLXdlYiwgY2xlYW4sIHNldHVwLWVqYiwgYXNzZW1ibGUtY2xpZW50LCBydW5jbGllbnQsIHVuZGVwbG95Ii8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwLXdlYiIgZGVwZW5kcz0iYXNzZW1ibGUtd2ViLCBkZXBsb3ktd2ViLWFwcCIvPgogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAtZWpiIiBkZXBlbmRzPSJhc3NlbWJsZS1lamIsIGRlcGxveS1lamItamFyIi8+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlLWVqYiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYl9lbmRwb2ludCIvPgpAQCAtNjMsNyArNjMsNyBAQAogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Imphci5maWxlIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphciIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlLXdlYiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNlcnZsZXRfZW5kcG9pbnQiLz4KQEAgLTczLDcgKzczLDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3YXIuZmlsZSIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZS1jbGllbnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IndzaW1wb3J0aW5nIGh0dHA6Ly8ke2h0dHAuaG9zdH06JHtodHRwLnBvcnR9LyR7YXBwbmFtZX0vd2Vic2VydmljZS9TZXJ2bGV0SGVsbG9TZXJ2aWNlP1dTREwiLz4KQEAgLTg2LDcgKzg2LDcgQEAKICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3c2ltcG9ydC5hcmdzIgogICAgICAgICAgICAgICAgICAgIHZhbHVlPSIta2VlcCAtZCAke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQgaHR0cDovLyR7aHR0cC5ob3N0fToke2h0dHAucG9ydH0vV1NIZWxsb0VKQlNlcnZpY2UvV1NIZWxsb0VKQj9XU0RMIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IiAKKyAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IgogICAgICAgICAgICAgICAgaW5jbHVkZXM9ImNsaWVudC8qKiI+CiAgICAgICAgICAgICA8Y2xhc3NwYXRoIHJlZmlkPSJjbGllbnQtY2xhc3NwYXRoIi8+CiAgICAgICAgIDwvamF2YWM+CkBAIC05NCwyMiArOTQsMjIgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtjbGllbnQud3NpdC5kZXNjcmlwdG9yc30iLz4KICAgICAgICAgPC9jb3B5PgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3ktd2ViLWFwcCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iJHthcHBuYW1lfSIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveS1lamItamFyIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktamFyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qYXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bmNsaWVudCI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi1jbGllbnQiPgogICAgICAgICA8cGFyYW0gbmFtZT0iY2xpZW50LWNsYXNzIiB2YWx1ZT0iY2xpZW50LkNsaWVudCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zb2FwdGNwL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc29hcHRjcC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggNjZkZGQwOS4uNTRhOGJmZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zb2FwdGNwL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3NvYXB0Y3AvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zOCwxNSArMzgsMTUgQEAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLlNpbXBsZVJlcG9ydGVyQWRhcHRlcjsKIAogcHVibGljIGNsYXNzIENsaWVudCB7Ci0gICAgCisKICAgICBAUmVzb3VyY2UKICAgICBzdGF0aWMgamFrYXJ0YS50cmFuc2FjdGlvbi5Vc2VyVHJhbnNhY3Rpb24gdXQ7Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUSU1FX09VVCA9IDEwMDAgKiA2MDsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigic29hcHRjcC10ZXN0Iik7CiAgICAgICAgIFN0cmluZyBob3N0ID0gImxvY2FsaG9zdCI7CkBAIC01NCwxMiArNTQsMTIgQEAKICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09IDEpIHsgLy8gcnVuIHdpdGggYXBwY2xpZW50PwogICAgICAgICAgICAgYXJncyA9IGFyZ3NbMF0uc3BsaXQoIiAiKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAoYXJncy5sZW5ndGggPj0gMikgewogICAgICAgICAgICAgaG9zdCA9IGFyZ3NbMF07CiAgICAgICAgICAgICBwb3J0ID0gSW50ZWdlci5wYXJzZUludChhcmdzWzFdKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbm5lY3RpbmcgdG8gaG9zdDogIiArIGhvc3QgKyAiIHBvcnQ6ICIgKyBwb3J0KTsKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKICAgICAgICAgaWYgKGNsaWVudC5kb1BvcnRVbmlmaWNhdGlvblRlc3QoaG9zdCwgcG9ydCkpIHsKQEAgLTcyLDEyICs3MiwxMiBAQAogCiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJzb2FwdGNwLXRlc3QiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1NlcnZsZXRUZXN0KCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgU2VydmxldEhlbGxvU2VydmljZSBzdmMgPSBuZXcgU2VydmxldEhlbGxvU2VydmljZSgpOwogICAgICAgICAgICAgU2VydmxldEhlbGxvIHBvcnQgPSBzdmMuZ2V0U2VydmxldEhlbGxvUG9ydCgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGZvciAoaW50IGk9MDtpPDEwO2krKykgewogICAgICAgICAgICAgICAgIFN0cmluZyByZXQgPSBwb3J0LnNheVNlcnZsZXRIZWxsbygiQXBwc2VydmVyIFRlc3RlciAhIik7CiAgICAgICAgICAgICAgICAgaWYocmV0LmluZGV4T2YoIldlYlN2Y1Rlc3QtU2VydmxldC1IZWxsbyIpID09IC0xKSB7CkBAIC05Myw3ICs5Myw3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiU09BUC9UQ1AtU2VydmxldC1FbmRwb2ludCIsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb0VqYlRlc3QoKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBXU0hlbGxvRUpCU2VydmljZSBzdmMgPSBuZXcgIFdTSGVsbG9FSkJTZXJ2aWNlKCk7CkBAIC0xMTQsNyArMTE0LDcgQEAKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJTT0FQL1RDUC1FSkItRW5kcG9pbnQiLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gZG9Qb3J0VW5pZmljYXRpb25UZXN0KFN0cmluZyBob3N0LCBpbnQgcG9ydCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgU29ja2V0IHMgPSBuZXcgU29ja2V0KCJsb2NhbGhvc3QiLCA4MDgwKTsKQEAgLTEyMiwyNCArMTIyLDI0IEBACiAgICAgICAgICAgICBmaW5hbCBWZXJzaW9uQ29udHJvbGxlciB2ZXJzaW9uQ29udHJvbGxlciA9IFZlcnNpb25Db250cm9sbGVyLmdldEluc3RhbmNlKCk7CiAgICAgICAgICAgICBmaW5hbCBWZXJzaW9uIGZyYW1pbmdWZXJzaW9uID0gdmVyc2lvbkNvbnRyb2xsZXIuZ2V0RnJhbWluZ1ZlcnNpb24oKTsKICAgICAgICAgICAgIGZpbmFsIFZlcnNpb24gY29ubmVjdGlvbk1hbmFnZW1lbnRWZXJzaW9uID0gdmVyc2lvbkNvbnRyb2xsZXIuZ2V0Q29ubmVjdGlvbk1hbmFnZW1lbnRWZXJzaW9uKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgZmluYWwgT3V0cHV0U3RyZWFtIG91dHB1dFN0cmVhbSA9IHMuZ2V0T3V0cHV0U3RyZWFtKCk7CiAgICAgICAgICAgICBvdXRwdXRTdHJlYW0ud3JpdGUoVENQQ29uc3RhbnRzLlBST1RPQ09MX1NDSEVNQS5nZXRCeXRlcygiVVMtQVNDSUkiKSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgRGF0YUluT3V0VXRpbHMud3JpdGVJbnRzNChvdXRwdXRTdHJlYW0sIGZyYW1pbmdWZXJzaW9uLmdldE1ham9yKCksCiAgICAgICAgICAgICAgICAgICAgIGZyYW1pbmdWZXJzaW9uLmdldE1pbm9yKCksCiAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25NYW5hZ2VtZW50VmVyc2lvbi5nZXRNYWpvcigpLAogICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uTWFuYWdlbWVudFZlcnNpb24uZ2V0TWlub3IoKSk7CiAgICAgICAgICAgICBvdXRwdXRTdHJlYW0uZmx1c2goKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBmaW5hbCBJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IHMuZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgICAgIGZpbmFsIGludFtdIHZlcnNpb25JbmZvID0gbmV3IGludFs0XTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBEYXRhSW5PdXRVdGlscy5yZWFkSW50czQoaW5wdXRTdHJlYW0sIHZlcnNpb25JbmZvLCA0KTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBmaW5hbCBWZXJzaW9uIHNlcnZlckZyYW1pbmdWZXJzaW9uID0gbmV3IFZlcnNpb24odmVyc2lvbkluZm9bMF0sIHZlcnNpb25JbmZvWzFdKTsKICAgICAgICAgICAgIGZpbmFsIFZlcnNpb24gc2VydmVyQ29ubmVjdGlvbk1hbmFnZW1lbnRWZXJzaW9uID0gbmV3IFZlcnNpb24odmVyc2lvbkluZm9bMl0sIHZlcnNpb25JbmZvWzNdKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBmaW5hbCBib29sZWFuIHN1Y2Nlc3MgPSB2ZXJzaW9uQ29udHJvbGxlci5pc1ZlcnNpb25TdXBwb3J0ZWQoc2VydmVyRnJhbWluZ1ZlcnNpb24sIHNlcnZlckNvbm5lY3Rpb25NYW5hZ2VtZW50VmVyc2lvbik7CiAgICAgICAgICAgICBpZiAoc3VjY2VzcykgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJTT0FQL1RDUC1Qb3J0VW5pZmljYXRpb24iLCBzdGF0LlBBU1MpOwpAQCAtMTUzLDcgKzE1Myw3IEBACiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIlNPQVAvVENQLVBvcnRVbmlmaWNhdGlvbiIsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc29hcHRjcC9ldGMvY2xpZW50L3dzaXQtY2xpZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc29hcHRjcC9ldGMvY2xpZW50L3dzaXQtY2xpZW50LnhtbAppbmRleCAzNGNlNDFmLi5mYWUzYjQwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3NvYXB0Y3AvZXRjL2NsaWVudC93c2l0LWNsaWVudC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zb2FwdGNwL2V0Yy9jbGllbnQvd3NpdC1jbGllbnQueG1sCkBAIC0xOCwxMCArMTgsMTAgQEAKIC0tPgogCiAgPGRlZmluaXRpb25zCi0geG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiAKLSB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgCi0geG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0geG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgbmFtZT0ibWFpbmNsaWVudGNvbmZpZyIgCisgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgorIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgorIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCisgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgbmFtZT0ibWFpbmNsaWVudGNvbmZpZyIKICA+CiAgICAgPGltcG9ydCBsb2NhdGlvbj0iU2VydmljZUNoYW5uZWxXU0ltcGwud3NkbCIgbmFtZXNwYWNlPSJodHRwOi8vc2VydmljZWNoYW5uZWwudGNwLnRyYW5zcG9ydC53cy54bWwuc3VuLmNvbS8iLz4KICAgICA8aW1wb3J0IGxvY2F0aW9uPSJTZXJ2bGV0SGVsbG9TZXJ2aWNlLndzZGwiIG5hbWVzcGFjZT0iaHR0cDovL3NlcnZsZXRfZW5kcG9pbnQvIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3NvYXB0Y3AvZXRjL2VqYi93c2l0LWVqYl9lbmRwb2ludC5XU0hlbGxvRUpCLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc29hcHRjcC9ldGMvZWpiL3dzaXQtZWpiX2VuZHBvaW50LldTSGVsbG9FSkIueG1sCmluZGV4IDY0MWE2NzAuLmIyOWQyZTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc29hcHRjcC9ldGMvZWpiL3dzaXQtZWpiX2VuZHBvaW50LldTSGVsbG9FSkIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc29hcHRjcC9ldGMvZWpiL3dzaXQtZWpiX2VuZHBvaW50LldTSGVsbG9FSkIueG1sCkBAIC0xOCwxMCArMTgsMTAgQEAKIC0tPgogCiAgPGRlZmluaXRpb25zCi0geG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiAKLSB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgCi0geG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0geG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgbmFtZT0iV1NIZWxsb0VKQlNlcnZpY2UiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2VqYl9lbmRwb2ludC8iIHhtbG5zOnRucz0iaHR0cDovL2VqYl9lbmRwb2ludC8iIHhtbG5zOndzcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNC8wOS9wb2xpY3kiIHhtbG5zOndzdT0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy13c3NlY3VyaXR5LXV0aWxpdHktMS4wLnhzZCIgeG1sbnM6d3Nhd3M9Imh0dHA6Ly93d3cudzMub3JnLzIwMDUvMDgvYWRkcmVzc2luZyIgeG1sbnM6dGNwPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy93c2l0LzIwMDYvMDkvcG9saWN5L3NvYXB0Y3Avc2VydmljZSIgCisgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgorIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgorIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCisgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgbmFtZT0iV1NIZWxsb0VKQlNlcnZpY2UiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2VqYl9lbmRwb2ludC8iIHhtbG5zOnRucz0iaHR0cDovL2VqYl9lbmRwb2ludC8iIHhtbG5zOndzcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNC8wOS9wb2xpY3kiIHhtbG5zOndzdT0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy13c3NlY3VyaXR5LXV0aWxpdHktMS4wLnhzZCIgeG1sbnM6d3Nhd3M9Imh0dHA6Ly93d3cudzMub3JnLzIwMDUvMDgvYWRkcmVzc2luZyIgeG1sbnM6dGNwPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy93c2l0LzIwMDYvMDkvcG9saWN5L3NvYXB0Y3Avc2VydmljZSIKICA+CiAgICAgPHBvcnRUeXBlIG5hbWU9IldTSGVsbG9FSkIiLz4KICAgICA8YmluZGluZyBuYW1lPSJXU0hlbGxvRUpCUG9ydEJpbmRpbmciIHR5cGU9InRuczpXU0hlbGxvRUpCIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc29hcHRjcC9ldGMvd2ViL3dzaXQtc2VydmxldF9lbmRwb2ludC5TZXJ2bGV0SGVsbG8ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zb2FwdGNwL2V0Yy93ZWIvd3NpdC1zZXJ2bGV0X2VuZHBvaW50LlNlcnZsZXRIZWxsby54bWwKaW5kZXggNGE2M2Y3Ni4uZWZjNDZiNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zb2FwdGNwL2V0Yy93ZWIvd3NpdC1zZXJ2bGV0X2VuZHBvaW50LlNlcnZsZXRIZWxsby54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zb2FwdGNwL2V0Yy93ZWIvd3NpdC1zZXJ2bGV0X2VuZHBvaW50LlNlcnZsZXRIZWxsby54bWwKQEAgLTE4LDEwICsxOCwxMCBAQAogLS0+CiAKICA8ZGVmaW5pdGlvbnMKLSB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIAotIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiAKLSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIiBuYW1lPSJTZXJ2bGV0SGVsbG9TZXJ2aWNlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9zZXJ2bGV0X2VuZHBvaW50LyIgeG1sbnM6dG5zPSJodHRwOi8vc2VydmxldF9lbmRwb2ludC8iIHhtbG5zOndzcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNC8wOS9wb2xpY3kiIHhtbG5zOndzdT0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy13c3NlY3VyaXR5LXV0aWxpdHktMS4wLnhzZCIgeG1sbnM6d3Nhd3M9Imh0dHA6Ly93d3cudzMub3JnLzIwMDUvMDgvYWRkcmVzc2luZyIgeG1sbnM6dGNwPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy93c2l0LzIwMDYvMDkvcG9saWN5L3NvYXB0Y3Avc2VydmljZSIgCisgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgorIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgorIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCisgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgbmFtZT0iU2VydmxldEhlbGxvU2VydmljZSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vc2VydmxldF9lbmRwb2ludC8iIHhtbG5zOnRucz0iaHR0cDovL3NlcnZsZXRfZW5kcG9pbnQvIiB4bWxuczp3c3A9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDQvMDkvcG9saWN5IiB4bWxuczp3c3U9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3Mtd3NzZWN1cml0eS11dGlsaXR5LTEuMC54c2QiIHhtbG5zOndzYXdzPSJodHRwOi8vd3d3LnczLm9yZy8yMDA1LzA4L2FkZHJlc3NpbmciIHhtbG5zOnRjcD0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvd3NpdC8yMDA2LzA5L3BvbGljeS9zb2FwdGNwL3NlcnZpY2UiCiAgPgogICAgIDxwb3J0VHlwZSBuYW1lPSJTZXJ2bGV0SGVsbG8iLz4KICAgICA8YmluZGluZyBuYW1lPSJTZXJ2bGV0SGVsbG9Qb3J0QmluZGluZyIgdHlwZT0idG5zOlNlcnZsZXRIZWxsbyI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3NvYXB0Y3Avc2VydmxldF9lbmRwb2ludC9TZXJ2bGV0SGVsbG8uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc29hcHRjcC9zZXJ2bGV0X2VuZHBvaW50L1NlcnZsZXRIZWxsby5qYXZhCmluZGV4IDc5YjA3MjUuLmU5MzFiZDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc29hcHRjcC9zZXJ2bGV0X2VuZHBvaW50L1NlcnZsZXRIZWxsby5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc29hcHRjcC9zZXJ2bGV0X2VuZHBvaW50L1NlcnZsZXRIZWxsby5qYXZhCkBAIC0yMCw4ICsyMCw4IEBACiAKIEBXZWJTZXJ2aWNlCiBwdWJsaWMgY2xhc3MgU2VydmxldEhlbGxvIHsKLQkKKwogICAgIHB1YmxpYyBTdHJpbmcgc2F5U2VydmxldEhlbGxvKFN0cmluZyBwYXJhbSkgewotCXJldHVybiAiV2ViU3ZjVGVzdC1TZXJ2bGV0LUhlbGxvICIgKyBwYXJhbTsKKyAgICByZXR1cm4gIldlYlN2Y1Rlc3QtU2VydmxldC1IZWxsbyAiICsgcGFyYW07CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zb2FwdGNwL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3NvYXB0Y3Avd2ViLnhtbAppbmRleCBmMDZmNzRjLi4wYWRkODFkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3NvYXB0Y3Avd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3NvYXB0Y3Avd2ViLnhtbApAQCAtMTgsMjUgKzE4LDI1IEBACiAtLT4KIAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCi0JCQlodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KKyAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCisgICAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KIAotCTxkZXNjcmlwdGlvbj5XZWJUaWVyIGZvciB0aGUgU2VydmxldCBIZWxsbyBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQk8ZGlzcGxheS1uYW1lPlNlcnZsZXQgSGVsbG9XQVI8L2Rpc3BsYXktbmFtZT4KKyAgICA8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIFNlcnZsZXQgSGVsbG8gU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgPGRpc3BsYXktbmFtZT5TZXJ2bGV0IEhlbGxvV0FSPC9kaXNwbGF5LW5hbWU+CiAKLQk8c2VydmxldD4KLQkJPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBTZXJ2bGV0IEhlbGxvIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQkJPGRpc3BsYXktbmFtZT5TZXJ2bGV0SGVsbG9XZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+Ci0JCTxzZXJ2bGV0LW5hbWU+U2VydmxldEhlbGxvPC9zZXJ2bGV0LW5hbWU+Ci0JCTxzZXJ2bGV0LWNsYXNzPnNlcnZsZXRfZW5kcG9pbnQuU2VydmxldEhlbGxvPC9zZXJ2bGV0LWNsYXNzPgotCQk8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KLQk8L3NlcnZsZXQ+CisgICAgPHNlcnZsZXQ+CisgICAgICAgIDxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgU2VydmxldCBIZWxsbyBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldEhlbGxvV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgorICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRIZWxsbzwvc2VydmxldC1uYW1lPgorICAgICAgICA8c2VydmxldC1jbGFzcz5zZXJ2bGV0X2VuZHBvaW50LlNlcnZsZXRIZWxsbzwvc2VydmxldC1jbGFzcz4KKyAgICAgICAgPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+CisgICAgPC9zZXJ2bGV0PgogCi0JPHNlcnZsZXQtbWFwcGluZz4KLQkJPHNlcnZsZXQtbmFtZT5TZXJ2bGV0SGVsbG88L3NlcnZsZXQtbmFtZT4KLQkJPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL1NlcnZsZXRIZWxsb1NlcnZpY2U8L3VybC1wYXR0ZXJuPgotCTwvc2VydmxldC1tYXBwaW5nPgorICAgIDxzZXJ2bGV0LW1hcHBpbmc+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+U2VydmxldEhlbGxvPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9TZXJ2bGV0SGVsbG9TZXJ2aWNlPC91cmwtcGF0dGVybj4KKyAgICA8L3NlcnZsZXQtbWFwcGluZz4KIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTEvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0xL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNWMxYjRhYi4uNjIyODMzNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTEvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InN2Y2hhbmRsZXItMSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iLi93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSIuL3N1bi13ZWIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMS9idWlsZC54bWwKaW5kZXggNGE3YTYxZC4uMTE4ODUzNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTEvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0xL2J1aWxkLnhtbApAQCAtODMsNyArODMsNyBAQAogICAgICAgPHJlcGxhY2UgZmlsZT0id2ViY2xpZW50L0NsaWVudC5qYXZhIiB2YWx1ZT0iJHtodHRwLmhvc3R9IiB0b2tlbj0iSFRUUF9IT1NUIi8+CiAgICAgICA8cmVwbGFjZSBmaWxlPSJ3ZWJjbGllbnQvQ2xpZW50LmphdmEiIHZhbHVlPSIke2h0dHAucG9ydH0iIHRva2VuPSJIVFRQX1BPUlQiLz4KICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL2NsYXNzZXMiCi0gICAgICAgICAgICBjbGFzc3BhdGhyZWY9ImNsYXNzLnBhdGgiIAorICAgICAgICAgICAgY2xhc3NwYXRocmVmPSJjbGFzcy5wYXRoIgogICAgICAgICAgICAgaW5jbHVkZXM9IndlYmNsaWVudC8qKiIvPgogICAgICAgPGNvcHkgZmlsZT0iLi9jbGllbnQtd2ViLnhtbCIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi93ZWIueG1sIi8+CiAgICAgICA8Y29weSBmaWxlPSIuL2NsaWVudC1zdW4td2ViLnhtbCIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi9zdW4td2ViLnhtbCIvPgpAQCAtMTI0LDExICsxMjQsMTEgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY2xpZW50Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bnRlc3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgotICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IiAKLSAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIAorICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJjbGllbnQvKioiLz4KICAgICAgIDx1bmphciBzcmM9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiBkZXN0PSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iY2xpZW50LlRlc3RDbGllbnQiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTEvY2xpZW50LXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMS9jbGllbnQtd2ViLnhtbAppbmRleCAwMjdkZmNlLi5iNGJiZjViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMS9jbGllbnQtd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMS9jbGllbnQtd2ViLnhtbApAQCAtMjAsNyArMjAsNyBAQAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLSAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIAorICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogICA8ZGVzY3JpcHRpb24+QSB0ZXN0IGFwcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KICAgPGRpc3BsYXktbmFtZT5XZWJUaWVyPC9kaXNwbGF5LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMS9jbGllbnQvVGVzdENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTEvY2xpZW50L1Rlc3RDbGllbnQuamF2YQppbmRleCBiODkzYjlhLi4xNDk0OTU5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMS9jbGllbnQvVGVzdENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0xL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludCBjb2RlID0gaW52b2tlU2VydmxldCh1cmwpOwogICAgICAgICAgICAgcmVwb3J0KGNvZGUpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KQEAgLTYzLDkgKzYzLDkgQEAKICAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nKGxpbmUpOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJTbyB0aGUgUkVTVUxUIE9GIFNVQlRSQUNUIFNFUlZJQ0UgSVMiKSAhPSAtMSkKLQkJZm91bmQxID0gdHJ1ZTsKKyAgICAgICAgZm91bmQxID0gdHJ1ZTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiWzExMTNdIikgIT0gLTEpCi0JCWZvdW5kMiA9IHRydWU7CisgICAgICAgIGZvdW5kMiA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNvZGU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTEvY3VzdG9tLWNsaWVudC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMS9jdXN0b20tY2xpZW50LnhtbAppbmRleCA4MzlmY2IxLi40OGYxNzE2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMS9jdXN0b20tY2xpZW50LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMS9jdXN0b20tY2xpZW50LnhtbApAQCAtMTcsMTIgKzE3LDEyIEBACiAKIC0tPgogCi08YmluZGluZ3MgCis8YmluZGluZ3MKICAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgogICAgIHhtbG5zOmpheGI9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheGIiCiAgICAgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCiAgICAgd3NkbExvY2F0aW9uPSJTdWJ0cmFjdE51bWJlcnMud3NkbCIKLSAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4d3MiPiAgICAKKyAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4d3MiPgogICAgIDxiaW5kaW5ncyBub2RlPSJuczE6ZGVmaW5pdGlvbnMiIHhtbG5zOm5zMT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgogICAgICAgICA8cGFja2FnZSBuYW1lPSJjbGllbnQiLz4KICAgICA8L2JpbmRpbmdzPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTEvY3VzdG9tLXNlcnZlci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMS9jdXN0b20tc2VydmVyLnhtbAppbmRleCAxNzBkNjY3Li4wOTg4MTIyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMS9jdXN0b20tc2VydmVyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMS9jdXN0b20tc2VydmVyLnhtbApAQCAtMTcsNyArMTcsNyBAQAogCiAtLT4KIAotPGJpbmRpbmdzIAorPGJpbmRpbmdzCiAgICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKICAgICB4bWxuczpqYXhiPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXhiIgogICAgIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTEvZW5kcG9pbnQvU3VidHJhY3ROdW1iZXJzSW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTEvZW5kcG9pbnQvU3VidHJhY3ROdW1iZXJzSW1wbC5qYXZhCmluZGV4IDY1OWM0OGUuLjgxMDE0NTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0xL2VuZHBvaW50L1N1YnRyYWN0TnVtYmVyc0ltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMS9lbmRwb2ludC9TdWJ0cmFjdE51bWJlcnNJbXBsLmphdmEKQEAgLTE4LDcgKzE4LDcgQEAKIAogQGpha2FydGEuandzLldlYlNlcnZpY2UgKHNlcnZpY2VOYW1lPSJqdW5ranVua2p1bmsiLCBlbmRwb2ludEludGVyZmFjZT0iZW5kcG9pbnQuU3VidHJhY3ROdW1iZXJzUG9ydFR5cGUiKQogcHVibGljIGNsYXNzIFN1YnRyYWN0TnVtYmVyc0ltcGwgaW1wbGVtZW50cyBTdWJ0cmFjdE51bWJlcnNQb3J0VHlwZSB7Ci0gICAgCisKICAgICBwdWJsaWMgaW50IHN1YnRyYWN0TnVtYmVycyAoaW50IG51bWJlcjEsIGludCBudW1iZXIyKSB7CiBTeXN0ZW0ub3V0LnByaW50bG4oIkkgZ290IG4xID0gIiArIG51bWJlcjEgKyAiIGFuZCBuMiA9ICIgKyBudW1iZXIyKTsKICAgICAgICAgcmV0dXJuIG51bWJlcjEgLSBudW1iZXIyOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTEvZW5kcG9pbnQvVGVzdEhhbmRsZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0xL2VuZHBvaW50L1Rlc3RIYW5kbGVyLmphdmEKaW5kZXggZTBhNTc2Ny4uNDY5ZDZiZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTEvZW5kcG9pbnQvVGVzdEhhbmRsZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMS9lbmRwb2ludC9UZXN0SGFuZGxlci5qYXZhCkBAIC0yOCwxMSArMjgsMTEgQEAKIGltcG9ydCBqYWthcnRhLmFubm90YXRpb24uUG9zdENvbnN0cnVjdDsKIAogcHVibGljIGNsYXNzIFRlc3RIYW5kbGVyIGltcGxlbWVudHMgU09BUEhhbmRsZXI8U09BUE1lc3NhZ2VDb250ZXh0PiB7Ci0gICAgCisKICAgICBwdWJsaWMgU2V0PFFOYW1lPiBnZXRIZWFkZXJzKCkgewogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICBTdHJpbmcgcG9zdENvbnN0U3RyaW5nID0gIk5PVF9JTklUSUFMSVpFRCI7CiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwdWJsaWMgdm9pZCBpbml0KCkgewpAQCAtNDksNyArNDksNyBAQAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIYW5kbGVyIFBvc3RDb25zdHJ1Y3Qgbm90IGNhbGxlZCBwcm9wZXJ0eSIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJwb3N0Q29uc3RTdHJpbmcgPSAiICsgcG9zdENvbnN0U3RyaW5nKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfSAgICAgICAgICAgIAorICAgICAgICB9CiAgICAgICAgIGlmICgidW5kZWZpbmVkIi5lcXVhbHMoaW5qZWN0ZWRTdHJpbmcpKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhhbmRsZXIgbm90IGluamVjdGVkIHByb3BlcnR5Iik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC01OSw3ICs1OSw3IEBACiAgICAgICAgICAgICBTT0FQTWVzc2FnZUNvbnRleHQgc21jID0gKFNPQVBNZXNzYWdlQ29udGV4dCkgY29udGV4dDsKICAgICAgICAgICAgIFNPQVBNZXNzYWdlIG1lc3NhZ2UgPSBzbWMuZ2V0TWVzc2FnZSgpOwogICAgICAgICAgICAgU09BUEJvZHkgYm9keSA9IG1lc3NhZ2UuZ2V0U09BUEJvZHkoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTT0FQRWxlbWVudCBwYXJhbUVsZW1lbnQgPQogICAgICAgICAgICAgICAgIChTT0FQRWxlbWVudCkgYm9keS5nZXRGaXJzdENoaWxkKCkuZ2V0Rmlyc3RDaGlsZCgpOwogICAgICAgICAgICAgaW50IG51bWJlciA9IEludGVnZXIucGFyc2VJbnQocGFyYW1FbGVtZW50LmdldFZhbHVlKCkpOwpAQCAtNjcsMTYgKzY3LDE2IEBACiAgICAgICAgIH0gY2F0Y2ggKFNPQVBFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotCVN5c3RlbS5vdXQucHJpbnRsbigiVklKJ3MgVEVTVCBIQU5ETEVSIENBTExFRCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVklKJ3MgVEVTVCBIQU5ETEVSIENBTExFRCIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBoYW5kbGVGYXVsdChTT0FQTWVzc2FnZUNvbnRleHQgY29udGV4dCkgewogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkge30KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGNsb3NlKE1lc3NhZ2VDb250ZXh0IGNvbnRleHQpIHt9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0xL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMS93ZWIueG1sCmluZGV4IDhmNDNhNmQuLmNlNmNkMjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0xL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTEvd2ViLnhtbApAQCAtMTgsMjkgKzE4LDI5IEBACiAtLT4KIAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCi0JCQlodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KKyAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCisgICAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KIAotCTxkZXNjcmlwdGlvbj5TdWJ0cmFjdE51bWJlcnMgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgPGRlc2NyaXB0aW9uPlN1YnRyYWN0TnVtYmVycyBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KIAotCTxzZXJ2bGV0PgotCQk8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIFN1YnRyYWN0TnVtYmVycyBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JCTxkaXNwbGF5LW5hbWU+U3VidHJhY3ROdW1iZXJzV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgotCQk8c2VydmxldC1uYW1lPlN1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3NlcnZsZXQtbmFtZT4KLQkJPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuU3VidHJhY3ROdW1iZXJzSW1wbDwvc2VydmxldC1jbGFzcz4KLQkJPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+Ci0JPC9zZXJ2bGV0PgorICAgIDxzZXJ2bGV0PgorICAgICAgICA8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIFN1YnRyYWN0TnVtYmVycyBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgICAgIDxkaXNwbGF5LW5hbWU+U3VidHJhY3ROdW1iZXJzV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgorICAgICAgICA8c2VydmxldC1uYW1lPlN1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuU3VidHJhY3ROdW1iZXJzSW1wbDwvc2VydmxldC1jbGFzcz4KKyAgICAgICAgPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+CisgICAgPC9zZXJ2bGV0PgogCi0JPHNlcnZsZXQtbWFwcGluZz4KLQkJPHNlcnZsZXQtbmFtZT5TdWJ0cmFjdE51bWJlcnNTZXJ2aWNlPC9zZXJ2bGV0LW5hbWU+Ci0JCTx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9TdWJ0cmFjdE51bWJlcnNTZXJ2aWNlPC91cmwtcGF0dGVybj4KLQk8L3NlcnZsZXQtbWFwcGluZz4KKyAgICA8c2VydmxldC1tYXBwaW5nPgorICAgICAgICA8c2VydmxldC1uYW1lPlN1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL1N1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3VybC1wYXR0ZXJuPgorICAgIDwvc2VydmxldC1tYXBwaW5nPgogCi0JPHNlc3Npb24tY29uZmlnPgotCQk8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+Ci0JPC9zZXNzaW9uLWNvbmZpZz4KKyAgICA8c2Vzc2lvbi1jb25maWc+CisgICAgICAgIDxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KKyAgICA8L3Nlc3Npb24tY29uZmlnPgogCiAgPGVudi1lbnRyeT4KICAgPGVudi1lbnRyeS1uYW1lPnN0cmluZ1ZhbHVlPC9lbnYtZW50cnktbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0xL3dlYmNsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0xL3dlYmNsaWVudC9DbGllbnQuamF2YQppbmRleCAxNTAyZmZkLi5iNzlmYzhlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMS93ZWJjbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTEvd2ViY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNyw4ICsyNyw4IEBACiAKICAgICAgICAgQFdlYlNlcnZpY2VSZWYgU3VidHJhY3ROdW1iZXJzU2VydmljZSBzZXJ2aWNlOwogCi0gICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKSAKLQkJdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKKyAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCisgICAgICAgIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgICAgIGRvUG9zdChyZXEsIHJlc3ApOwogICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0yL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNGRkYjlkZi4uMTQ1OTU2MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InN2Y2hhbmRsZXItMiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iLi93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSIuL3N1bi13ZWIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMi9idWlsZC54bWwKaW5kZXggNzdiMjI3Ny4uNDkzMWNhZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0yL2J1aWxkLnhtbApAQCAtODcsNyArODcsNyBAQAogICAgICAgPHJlcGxhY2UgZmlsZT0id2ViY2xpZW50L0NsaWVudC5qYXZhIiB2YWx1ZT0iJHtodHRwLmhvc3R9IiB0b2tlbj0iSFRUUF9IT1NUIi8+CiAgICAgICA8cmVwbGFjZSBmaWxlPSJ3ZWJjbGllbnQvQ2xpZW50LmphdmEiIHZhbHVlPSIke2h0dHAucG9ydH0iIHRva2VuPSJIVFRQX1BPUlQiLz4KICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL2NsYXNzZXMiCi0gICAgICAgICAgICBjbGFzc3BhdGhyZWY9ImNsYXNzLnBhdGgiIAorICAgICAgICAgICAgY2xhc3NwYXRocmVmPSJjbGFzcy5wYXRoIgogICAgICAgICAgICAgaW5jbHVkZXM9IndlYmNsaWVudC8qKiIvPgogICAgICAgPGNvcHkgZmlsZT0iLi9jbGllbnQtd2ViLnhtbCIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi93ZWIueG1sIi8+CiAgICAgICA8Y29weSBmaWxlPSIuL2NsaWVudC1zdW4td2ViLnhtbCIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi9zdW4td2ViLnhtbCIvPgpAQCAtMTMzLDExICsxMzMsMTEgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY2xpZW50Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bmNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+Ci0gICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiIAotICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgCisgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9ImNsaWVudC8qKiIvPgogICAgICAgPHVuamFyIHNyYz0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIGRlc3Q9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgogICAgICAgPGphdmEgY2xhc3NuYW1lPSJjbGllbnQuVGVzdENsaWVudCI+CkBAIC0xNDcsNyArMTQ3LDcgQEAKICAgICAgICAgPGFyZyB2YWx1ZT0iaHR0cDovLyR7aHR0cC5ob3N0fToke2h0dHAucG9ydH0vd3NjbGllbnQvUmVxdWVzdFByb2Nlc3NvciIvPgogICAgICAgPC9qYXZhPgogCi0gICAgICA8IS0tcmVzdG9yZSB0aGUgdG9rZW5zIGJhY2sgaW4gZmlsZS0tPiAKKyAgICAgIDwhLS1yZXN0b3JlIHRoZSB0b2tlbnMgYmFjayBpbiBmaWxlLS0+CiAgICAgICA8cmVwbGFjZSBmaWxlPSJ3ZWJjbGllbnQvQ2xpZW50LmphdmEiIHRva2VuPSIke2h0dHAuaG9zdH0iIHZhbHVlPSJIVFRQX0hPU1QiLz4KICAgICAgIDxyZXBsYWNlIGZpbGU9IndlYmNsaWVudC9DbGllbnQuamF2YSIgdG9rZW49IiR7aHR0cC5wb3J0fSIgdmFsdWU9IkhUVFBfUE9SVCIvPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTIvY2xpZW50LXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMi9jbGllbnQtd2ViLnhtbAppbmRleCAwMjdkZmNlLi5iNGJiZjViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMi9jbGllbnQtd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMi9jbGllbnQtd2ViLnhtbApAQCAtMjAsNyArMjAsNyBAQAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLSAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIAorICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogICA8ZGVzY3JpcHRpb24+QSB0ZXN0IGFwcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KICAgPGRpc3BsYXktbmFtZT5XZWJUaWVyPC9kaXNwbGF5LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMi9jbGllbnQvVGVzdENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTIvY2xpZW50L1Rlc3RDbGllbnQuamF2YQppbmRleCBkMDMzYzMxLi45ZjcwMDNiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMi9jbGllbnQvVGVzdENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0yL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludCBjb2RlID0gaW52b2tlU2VydmxldCh1cmwpOwogICAgICAgICAgICAgcmVwb3J0KGNvZGUpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KQEAgLTYzLDkgKzYzLDkgQEAKICAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nKGxpbmUpOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJTbyB0aGUgUkVTVUxUIE9GIFNVQlRSQUNUIFNFUlZJQ0UgSVMiKSAhPSAtMSkKLQkJZm91bmQxID0gdHJ1ZTsKKyAgICAgICAgZm91bmQxID0gdHJ1ZTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiWzExMTNdIikgIT0gLTEpCi0JCWZvdW5kMiA9IHRydWU7CisgICAgICAgIGZvdW5kMiA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNvZGU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTIvY3VzdG9tLWNsaWVudC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMi9jdXN0b20tY2xpZW50LnhtbAppbmRleCA4MzlmY2IxLi40OGYxNzE2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMi9jdXN0b20tY2xpZW50LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMi9jdXN0b20tY2xpZW50LnhtbApAQCAtMTcsMTIgKzE3LDEyIEBACiAKIC0tPgogCi08YmluZGluZ3MgCis8YmluZGluZ3MKICAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgogICAgIHhtbG5zOmpheGI9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheGIiCiAgICAgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCiAgICAgd3NkbExvY2F0aW9uPSJTdWJ0cmFjdE51bWJlcnMud3NkbCIKLSAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4d3MiPiAgICAKKyAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4d3MiPgogICAgIDxiaW5kaW5ncyBub2RlPSJuczE6ZGVmaW5pdGlvbnMiIHhtbG5zOm5zMT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgogICAgICAgICA8cGFja2FnZSBuYW1lPSJjbGllbnQiLz4KICAgICA8L2JpbmRpbmdzPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTIvY3VzdG9tLXNlcnZlci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMi9jdXN0b20tc2VydmVyLnhtbAppbmRleCAxNzBkNjY3Li4wOTg4MTIyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMi9jdXN0b20tc2VydmVyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMi9jdXN0b20tc2VydmVyLnhtbApAQCAtMTcsNyArMTcsNyBAQAogCiAtLT4KIAotPGJpbmRpbmdzIAorPGJpbmRpbmdzCiAgICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKICAgICB4bWxuczpqYXhiPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXhiIgogICAgIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTIvZW5kcG9pbnQvU3VidHJhY3ROdW1iZXJzSW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTIvZW5kcG9pbnQvU3VidHJhY3ROdW1iZXJzSW1wbC5qYXZhCmluZGV4IGY2MDdlNjIuLjVlMDUwOTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0yL2VuZHBvaW50L1N1YnRyYWN0TnVtYmVyc0ltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMi9lbmRwb2ludC9TdWJ0cmFjdE51bWJlcnNJbXBsLmphdmEKQEAgLTE5LDcgKzE5LDcgQEAKIEBqYWthcnRhLmp3cy5IYW5kbGVyQ2hhaW4obmFtZT0ic29tZSBuYW1lIiwgZmlsZT0ibXloYW5kbGVyLnhtbCIpCiBAamFrYXJ0YS5qd3MuV2ViU2VydmljZSAoc2VydmljZU5hbWU9Imp1bmtqdW5ranVuayIsIGVuZHBvaW50SW50ZXJmYWNlPSJlbmRwb2ludC5TdWJ0cmFjdE51bWJlcnNQb3J0VHlwZSIpCiBwdWJsaWMgY2xhc3MgU3VidHJhY3ROdW1iZXJzSW1wbCBpbXBsZW1lbnRzIFN1YnRyYWN0TnVtYmVyc1BvcnRUeXBlIHsKLSAgICAKKwogICAgIHB1YmxpYyBpbnQgc3VidHJhY3ROdW1iZXJzIChpbnQgbnVtYmVyMSwgaW50IG51bWJlcjIpIHsKIFN5c3RlbS5vdXQucHJpbnRsbigiSSBnb3QgbjEgPSAiICsgbnVtYmVyMSArICIgYW5kIG4yID0gIiArIG51bWJlcjIpOwogICAgICAgICByZXR1cm4gbnVtYmVyMSAtIG51bWJlcjI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMi9lbmRwb2ludC9UZXN0SGFuZGxlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTIvZW5kcG9pbnQvVGVzdEhhbmRsZXIuamF2YQppbmRleCBmOTA4MTI4Li4zNjA4N2FjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMi9lbmRwb2ludC9UZXN0SGFuZGxlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0yL2VuZHBvaW50L1Rlc3RIYW5kbGVyLmphdmEKQEAgLTI4LDExICsyOCwxMSBAQAogaW1wb3J0IGpha2FydGEueG1sLnNvYXAuKjsKIAogcHVibGljIGNsYXNzIFRlc3RIYW5kbGVyIGltcGxlbWVudHMgU09BUEhhbmRsZXI8U09BUE1lc3NhZ2VDb250ZXh0PiB7Ci0gICAgCisKICAgICBwdWJsaWMgU2V0PFFOYW1lPiBnZXRIZWFkZXJzKCkgewogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICBTdHJpbmcgcG9zdENvbnN0U3RyaW5nID0gIk5PVF9JTklUSUFMSVpFRCI7CiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwdWJsaWMgdm9pZCBpbml0KCkgewpAQCAtNDAsOCArNDAsOCBAQAogICAgIH0KIAogICAgIEBSZXNvdXJjZShuYW1lPSJzdHJpbmdWYWx1ZSIpCi0gICAgU3RyaW5nIGluamVjdGVkU3RyaW5nID0gInVuZGVmaW5lZCI7ICAgIAotICAgIAorICAgIFN0cmluZyBpbmplY3RlZFN0cmluZyA9ICJ1bmRlZmluZWQiOworCiAgICAgcHVibGljIGJvb2xlYW4gaGFuZGxlTWVzc2FnZShTT0FQTWVzc2FnZUNvbnRleHQgY29udGV4dCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgaWYgKCJQUk9QRVJMWV9JTklUSUFMSVpFRCIuZXF1YWxzKHBvc3RDb25zdFN0cmluZykpIHsKQEAgLTUwLDE3ICs1MCwxNyBAQAogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGFuZGxlciBQb3N0Q29uc3RydWN0IG5vdCBjYWxsZWQgcHJvcGVydHkiKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInBvc3RDb25zdFN0cmluZyA9ICIgKyBwb3N0Q29uc3RTdHJpbmcpOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0gICAgICAgICAgICAKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICgidW5kZWZpbmVkIi5lcXVhbHMoaW5qZWN0ZWRTdHJpbmcpKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIYW5kbGVyIG5vdCBpbmplY3RlZCBwcm9wZXJ0eSIpOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbmplY3RlZFN0cmluZyA9ICIgKyBpbmplY3RlZFN0cmluZyk7Ci0gICAgICAgICAgICB9ICAgICAgICAgICAgCisgICAgICAgICAgICB9CiAgICAgICAgICAgICBTT0FQTWVzc2FnZUNvbnRleHQgc21jID0gKFNPQVBNZXNzYWdlQ29udGV4dCkgY29udGV4dDsKICAgICAgICAgICAgIFNPQVBNZXNzYWdlIG1lc3NhZ2UgPSBzbWMuZ2V0TWVzc2FnZSgpOwogICAgICAgICAgICAgU09BUEJvZHkgYm9keSA9IG1lc3NhZ2UuZ2V0U09BUEJvZHkoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTT0FQRWxlbWVudCBwYXJhbUVsZW1lbnQgPQogICAgICAgICAgICAgICAgIChTT0FQRWxlbWVudCkgYm9keS5nZXRGaXJzdENoaWxkKCkuZ2V0Rmlyc3RDaGlsZCgpOwogICAgICAgICAgICAgaW50IG51bWJlciA9IEludGVnZXIucGFyc2VJbnQocGFyYW1FbGVtZW50LmdldFZhbHVlKCkpOwpAQCAtNjgsMTYgKzY4LDE2IEBACiAgICAgICAgIH0gY2F0Y2ggKFNPQVBFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotCVN5c3RlbS5vdXQucHJpbnRsbigiVklKJ3MgVEVTVCBIQU5ETEVSIENBTExFRCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVklKJ3MgVEVTVCBIQU5ETEVSIENBTExFRCIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBoYW5kbGVGYXVsdChTT0FQTWVzc2FnZUNvbnRleHQgY29udGV4dCkgewogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkge30KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGNsb3NlKE1lc3NhZ2VDb250ZXh0IGNvbnRleHQpIHt9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0yL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMi93ZWIueG1sCmluZGV4IDU0ZDIwYzQuLjZjY2I1MGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTIvd2ViLnhtbApAQCAtMTgsMzAgKzE4LDMwIEBACiAtLT4KIAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCi0JCQlodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KKyAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCisgICAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KIAotCTxkZXNjcmlwdGlvbj5TdWJ0cmFjdE51bWJlcnMgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgPGRlc2NyaXB0aW9uPlN1YnRyYWN0TnVtYmVycyBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KIAotCTxzZXJ2bGV0PgotCQk8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIFN1YnRyYWN0TnVtYmVycyBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JCTxkaXNwbGF5LW5hbWU+U3VidHJhY3ROdW1iZXJzV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgotCQk8c2VydmxldC1uYW1lPlN1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3NlcnZsZXQtbmFtZT4KLQkJPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuU3VidHJhY3ROdW1iZXJzSW1wbDwvc2VydmxldC1jbGFzcz4KLQkJPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+Ci0JPC9zZXJ2bGV0PgorICAgIDxzZXJ2bGV0PgorICAgICAgICA8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIFN1YnRyYWN0TnVtYmVycyBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgICAgIDxkaXNwbGF5LW5hbWU+U3VidHJhY3ROdW1iZXJzV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgorICAgICAgICA8c2VydmxldC1uYW1lPlN1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuU3VidHJhY3ROdW1iZXJzSW1wbDwvc2VydmxldC1jbGFzcz4KKyAgICAgICAgPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+CisgICAgPC9zZXJ2bGV0PgogCi0JPHNlcnZsZXQtbWFwcGluZz4KLQkJPHNlcnZsZXQtbmFtZT5TdWJ0cmFjdE51bWJlcnNTZXJ2aWNlPC9zZXJ2bGV0LW5hbWU+Ci0JCTx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9TdWJ0cmFjdE51bWJlcnNTZXJ2aWNlPC91cmwtcGF0dGVybj4KLQk8L3NlcnZsZXQtbWFwcGluZz4KKyAgICA8c2VydmxldC1tYXBwaW5nPgorICAgICAgICA8c2VydmxldC1uYW1lPlN1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL1N1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3VybC1wYXR0ZXJuPgorICAgIDwvc2VydmxldC1tYXBwaW5nPgogCi0JPHNlc3Npb24tY29uZmlnPgotCQk8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+Ci0JPC9zZXNzaW9uLWNvbmZpZz4KLSAgICAgICAgCisgICAgPHNlc3Npb24tY29uZmlnPgorICAgICAgICA8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+CisgICAgPC9zZXNzaW9uLWNvbmZpZz4KKwogICAgICAgICA8ZW52LWVudHJ5PgogICAgICAgICAgICAgPGVudi1lbnRyeS1uYW1lPnN0cmluZ1ZhbHVlPC9lbnYtZW50cnktbmFtZT4KICAgICAgICAgICAgIDxlbnYtZW50cnktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9lbnYtZW50cnktdHlwZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0yL3dlYmNsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0yL3dlYmNsaWVudC9DbGllbnQuamF2YQppbmRleCBhNTExNjZmLi44YTYzNmRmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMi93ZWJjbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTIvd2ViY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNyw4ICsyNyw4IEBACiAKICAgICAgICAgQFdlYlNlcnZpY2VSZWYgU3VidHJhY3ROdW1iZXJzU2VydmljZSBzZXJ2aWNlOwogCi0gICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKSAKLQkJdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKKyAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCisgICAgICAgIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgICAgIGRvUG9zdChyZXEsIHJlc3ApOwogICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0zL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZTBkMDUyMS4uZTk0ZTgxNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InN2Y2hhbmRsZXItMyIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iLi93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSIuL3N1bi13ZWIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMy9idWlsZC54bWwKaW5kZXggZjU1OTUwNS4uZTcyYTg4MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0zL2J1aWxkLnhtbApAQCAtODUsNyArODUsNyBAQAogICAgICAgPHJlcGxhY2UgZmlsZT0id2ViY2xpZW50L0NsaWVudC5qYXZhIiB2YWx1ZT0iJHtodHRwLmhvc3R9IiB0b2tlbj0iSFRUUF9IT1NUIi8+CiAgICAgICA8cmVwbGFjZSBmaWxlPSJ3ZWJjbGllbnQvQ2xpZW50LmphdmEiIHZhbHVlPSIke2h0dHAucG9ydH0iIHRva2VuPSJIVFRQX1BPUlQiLz4KICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL2NsYXNzZXMiCi0gICAgICAgICAgICBjbGFzc3BhdGhyZWY9ImNsYXNzLnBhdGgiIAorICAgICAgICAgICAgY2xhc3NwYXRocmVmPSJjbGFzcy5wYXRoIgogICAgICAgICAgICAgaW5jbHVkZXM9IndlYmNsaWVudC8qKiIvPgogICAgICAgPGNvcHkgZmlsZT0iLi9jbGllbnQtd2ViLnhtbCIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi93ZWIueG1sIi8+CiAgICAgICA8Y29weSBmaWxlPSIuL2NsaWVudC1zdW4td2ViLnhtbCIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi9zdW4td2ViLnhtbCIvPgpAQCAtMTI2LDExICsxMjYsMTEgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY2xpZW50Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bnRlc3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgotICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IiAKLSAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIAorICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJjbGllbnQvKioiLz4KICAgICAgIDx1bmphciBzcmM9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiBkZXN0PSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iY2xpZW50LlRlc3RDbGllbnQiPgpAQCAtMTQxLDcgKzE0MSw3IEBACiAgICAgICA8L2phdmE+CiAKIAotIDwhLS1yZXN0b3JlIHRoZSB0b2tlbnMgYmFjayBpbiBmaWxlLS0+IAorIDwhLS1yZXN0b3JlIHRoZSB0b2tlbnMgYmFjayBpbiBmaWxlLS0+CiAgICAgICAgICA8cmVwbGFjZSBmaWxlPSJ3ZWJjbGllbnQvQ2xpZW50LmphdmEiIHRva2VuPSIke2h0dHAuaG9zdH0iIHZhbHVlPSJIVFRQX0hPU1QiLz4KICAgICAgICAgIDxyZXBsYWNlIGZpbGU9IndlYmNsaWVudC9DbGllbnQuamF2YSIgdG9rZW49IiR7aHR0cC5wb3J0fSIgdmFsdWU9IkhUVFBfUE9SVCIvPgogICAgIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTMvY2xpZW50LXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMy9jbGllbnQtd2ViLnhtbAppbmRleCAwMjdkZmNlLi5iNGJiZjViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMy9jbGllbnQtd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMy9jbGllbnQtd2ViLnhtbApAQCAtMjAsNyArMjAsNyBAQAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLSAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIAorICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogICA8ZGVzY3JpcHRpb24+QSB0ZXN0IGFwcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KICAgPGRpc3BsYXktbmFtZT5XZWJUaWVyPC9kaXNwbGF5LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMy9jbGllbnQvVGVzdENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTMvY2xpZW50L1Rlc3RDbGllbnQuamF2YQppbmRleCA1NjU0OWZhLi40ZDYwMjZjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMy9jbGllbnQvVGVzdENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0zL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludCBjb2RlID0gaW52b2tlU2VydmxldCh1cmwpOwogICAgICAgICAgICAgcmVwb3J0KGNvZGUpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KQEAgLTYzLDkgKzYzLDkgQEAKICAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nKGxpbmUpOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJTbyB0aGUgUkVTVUxUIE9GIFNVQlRSQUNUIFNFUlZJQ0UgSVMiKSAhPSAtMSkKLQkJZm91bmQxID0gdHJ1ZTsKKyAgICAgICAgZm91bmQxID0gdHJ1ZTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiWzExMTFdIikgIT0gLTEpCi0JCWZvdW5kMiA9IHRydWU7CisgICAgICAgIGZvdW5kMiA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNvZGU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTMvY3VzdG9tLWNsaWVudC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMy9jdXN0b20tY2xpZW50LnhtbAppbmRleCA4MzlmY2IxLi40OGYxNzE2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMy9jdXN0b20tY2xpZW50LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMy9jdXN0b20tY2xpZW50LnhtbApAQCAtMTcsMTIgKzE3LDEyIEBACiAKIC0tPgogCi08YmluZGluZ3MgCis8YmluZGluZ3MKICAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgogICAgIHhtbG5zOmpheGI9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheGIiCiAgICAgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCiAgICAgd3NkbExvY2F0aW9uPSJTdWJ0cmFjdE51bWJlcnMud3NkbCIKLSAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4d3MiPiAgICAKKyAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4d3MiPgogICAgIDxiaW5kaW5ncyBub2RlPSJuczE6ZGVmaW5pdGlvbnMiIHhtbG5zOm5zMT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgogICAgICAgICA8cGFja2FnZSBuYW1lPSJjbGllbnQiLz4KICAgICA8L2JpbmRpbmdzPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTMvY3VzdG9tLXNlcnZlci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMy9jdXN0b20tc2VydmVyLnhtbAppbmRleCAxNzBkNjY3Li4wOTg4MTIyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMy9jdXN0b20tc2VydmVyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMy9jdXN0b20tc2VydmVyLnhtbApAQCAtMTcsNyArMTcsNyBAQAogCiAtLT4KIAotPGJpbmRpbmdzIAorPGJpbmRpbmdzCiAgICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKICAgICB4bWxuczpqYXhiPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXhiIgogICAgIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTMvZW5kcG9pbnQvU3VidHJhY3ROdW1iZXJzSW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTMvZW5kcG9pbnQvU3VidHJhY3ROdW1iZXJzSW1wbC5qYXZhCmluZGV4IGY2MDdlNjIuLjVlMDUwOTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0zL2VuZHBvaW50L1N1YnRyYWN0TnVtYmVyc0ltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMy9lbmRwb2ludC9TdWJ0cmFjdE51bWJlcnNJbXBsLmphdmEKQEAgLTE5LDcgKzE5LDcgQEAKIEBqYWthcnRhLmp3cy5IYW5kbGVyQ2hhaW4obmFtZT0ic29tZSBuYW1lIiwgZmlsZT0ibXloYW5kbGVyLnhtbCIpCiBAamFrYXJ0YS5qd3MuV2ViU2VydmljZSAoc2VydmljZU5hbWU9Imp1bmtqdW5ranVuayIsIGVuZHBvaW50SW50ZXJmYWNlPSJlbmRwb2ludC5TdWJ0cmFjdE51bWJlcnNQb3J0VHlwZSIpCiBwdWJsaWMgY2xhc3MgU3VidHJhY3ROdW1iZXJzSW1wbCBpbXBsZW1lbnRzIFN1YnRyYWN0TnVtYmVyc1BvcnRUeXBlIHsKLSAgICAKKwogICAgIHB1YmxpYyBpbnQgc3VidHJhY3ROdW1iZXJzIChpbnQgbnVtYmVyMSwgaW50IG51bWJlcjIpIHsKIFN5c3RlbS5vdXQucHJpbnRsbigiSSBnb3QgbjEgPSAiICsgbnVtYmVyMSArICIgYW5kIG4yID0gIiArIG51bWJlcjIpOwogICAgICAgICByZXR1cm4gbnVtYmVyMSAtIG51bWJlcjI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMy9lbmRwb2ludC9UZXN0SGFuZGxlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTMvZW5kcG9pbnQvVGVzdEhhbmRsZXIuamF2YQppbmRleCAyZGU0Yzk5Li4yOTY2YzRhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMy9lbmRwb2ludC9UZXN0SGFuZGxlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0zL2VuZHBvaW50L1Rlc3RIYW5kbGVyLmphdmEKQEAgLTI2LDE3ICsyNiwxNyBAQAogaW1wb3J0IGpha2FydGEueG1sLnNvYXAuKjsKIAogcHVibGljIGNsYXNzIFRlc3RIYW5kbGVyIGltcGxlbWVudHMgU09BUEhhbmRsZXI8U09BUE1lc3NhZ2VDb250ZXh0PiB7Ci0gICAgCisKICAgICBwdWJsaWMgU2V0PFFOYW1lPiBnZXRIZWFkZXJzKCkgewogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBoYW5kbGVNZXNzYWdlKFNPQVBNZXNzYWdlQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBTT0FQTWVzc2FnZUNvbnRleHQgc21jID0gKFNPQVBNZXNzYWdlQ29udGV4dCkgY29udGV4dDsKICAgICAgICAgICAgIFNPQVBNZXNzYWdlIG1lc3NhZ2UgPSBzbWMuZ2V0TWVzc2FnZSgpOwogICAgICAgICAgICAgU09BUEJvZHkgYm9keSA9IG1lc3NhZ2UuZ2V0U09BUEJvZHkoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTT0FQRWxlbWVudCBwYXJhbUVsZW1lbnQgPQogICAgICAgICAgICAgICAgIChTT0FQRWxlbWVudCkgYm9keS5nZXRGaXJzdENoaWxkKCkuZ2V0Rmlyc3RDaGlsZCgpOwogICAgICAgICAgICAgaW50IG51bWJlciA9IEludGVnZXIucGFyc2VJbnQocGFyYW1FbGVtZW50LmdldFZhbHVlKCkpOwpAQCAtNDQsMTQgKzQ0LDE0IEBACiAgICAgICAgIH0gY2F0Y2ggKFNPQVBFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotCVN5c3RlbS5vdXQucHJpbnRsbigiVklKJ3MgVEVTVCBIQU5ETEVSIENBTExFRCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVklKJ3MgVEVTVCBIQU5ETEVSIENBTExFRCIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBoYW5kbGVGYXVsdChTT0FQTWVzc2FnZUNvbnRleHQgY29udGV4dCkgewogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBjbG9zZShNZXNzYWdlQ29udGV4dCBjb250ZXh0KSB7fQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMy93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTMvd2ViLnhtbAppbmRleCA0MzQyNDM0Li40YTFiMjgzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMy93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0zL3dlYi54bWwKQEAgLTE4LDI5ICsxOCwyOSBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotCQkJaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CisgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQorICAgICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAKLQk8ZGVzY3JpcHRpb24+U3VidHJhY3ROdW1iZXJzIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgIDxkZXNjcmlwdGlvbj5TdWJ0cmFjdE51bWJlcnMgU2VydmljZTwvZGVzY3JpcHRpb24+CiAKLQk8c2VydmxldD4KLQkJPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBTdWJ0cmFjdE51bWJlcnMgV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCQk8ZGlzcGxheS1uYW1lPlN1YnRyYWN0TnVtYmVyc1dlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KLQkJPHNlcnZsZXQtbmFtZT5TdWJ0cmFjdE51bWJlcnNTZXJ2aWNlPC9zZXJ2bGV0LW5hbWU+Ci0JCTxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LlN1YnRyYWN0TnVtYmVyc0ltcGw8L3NlcnZsZXQtY2xhc3M+Ci0JCTxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgotCTwvc2VydmxldD4KKyAgICA8c2VydmxldD4KKyAgICAgICAgPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBTdWJ0cmFjdE51bWJlcnMgV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgICAgICA8ZGlzcGxheS1uYW1lPlN1YnRyYWN0TnVtYmVyc1dlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5TdWJ0cmFjdE51bWJlcnNTZXJ2aWNlPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LlN1YnRyYWN0TnVtYmVyc0ltcGw8L3NlcnZsZXQtY2xhc3M+CisgICAgICAgIDxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgorICAgIDwvc2VydmxldD4KIAotCTxzZXJ2bGV0LW1hcHBpbmc+Ci0JCTxzZXJ2bGV0LW5hbWU+U3VidHJhY3ROdW1iZXJzU2VydmljZTwvc2VydmxldC1uYW1lPgotCQk8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvU3VidHJhY3ROdW1iZXJzU2VydmljZTwvdXJsLXBhdHRlcm4+Ci0JPC9zZXJ2bGV0LW1hcHBpbmc+CisgICAgPHNlcnZsZXQtbWFwcGluZz4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5TdWJ0cmFjdE51bWJlcnNTZXJ2aWNlPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9TdWJ0cmFjdE51bWJlcnNTZXJ2aWNlPC91cmwtcGF0dGVybj4KKyAgICA8L3NlcnZsZXQtbWFwcGluZz4KIAotCTxzZXNzaW9uLWNvbmZpZz4KLQkJPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgotCTwvc2Vzc2lvbi1jb25maWc+CisgICAgPHNlc3Npb24tY29uZmlnPgorICAgICAgICA8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+CisgICAgPC9zZXNzaW9uLWNvbmZpZz4KIAogPC93ZWItYXBwPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMy93ZWJjbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItMy93ZWJjbGllbnQvQ2xpZW50LmphdmEKaW5kZXggNTEyNzdjYi4uNDNmNjBiMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTMvd2ViY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci0zL3dlYmNsaWVudC9DbGllbnQuamF2YQpAQCAtMjcsOCArMjcsOCBAQAogCiAgICAgICAgIEBXZWJTZXJ2aWNlUmVmIFN1YnRyYWN0TnVtYmVyc1NlcnZpY2Ugc2VydmljZTsKIAotICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkgCi0JCXRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CisgICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQorICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICAgICBkb1Bvc3QocmVxLCByZXNwKTsKICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci00L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItNC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGI4NzI0YmMuLjAyMTJlY2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci00L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzdmNoYW5kbGVyLTQiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9Ii4vd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iLi9zdW4td2ViLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTQvYnVpbGQueG1sCmluZGV4IDRkZTQxOWYuLjE2MDYyODkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci00L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItNC9idWlsZC54bWwKQEAgLTEzMCwxMSArMTMwLDExIEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNsaWVudCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW5jbGllbnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgotICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IiAKLSAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIAorICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJjbGllbnQvKioiLz4KICAgICAgIDx1bmphciBzcmM9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiBkZXN0PSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iY2xpZW50LlRlc3RDbGllbnQiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTQvY2xpZW50LXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItNC9jbGllbnQtd2ViLnhtbAppbmRleCAwMjdkZmNlLi5iNGJiZjViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItNC9jbGllbnQtd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItNC9jbGllbnQtd2ViLnhtbApAQCAtMjAsNyArMjAsNyBAQAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLSAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIAorICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogICA8ZGVzY3JpcHRpb24+QSB0ZXN0IGFwcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KICAgPGRpc3BsYXktbmFtZT5XZWJUaWVyPC9kaXNwbGF5LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItNC9jbGllbnQvVGVzdENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTQvY2xpZW50L1Rlc3RDbGllbnQuamF2YQppbmRleCA2MWJjODIwLi42NjkwZWU3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItNC9jbGllbnQvVGVzdENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci00L2NsaWVudC9UZXN0Q2xpZW50LmphdmEKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludCBjb2RlID0gaW52b2tlU2VydmxldCh1cmwpOwogICAgICAgICAgICAgcmVwb3J0KGNvZGUpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KQEAgLTYzLDkgKzYzLDkgQEAKICAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nKGxpbmUpOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJTbyB0aGUgUkVTVUxUIE9GIFNVQlRSQUNUIFNFUlZJQ0UgSVMiKSAhPSAtMSkKLQkJZm91bmQxID0gdHJ1ZTsKKyAgICAgICAgZm91bmQxID0gdHJ1ZTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiWzExMTNdIikgIT0gLTEpCi0JCWZvdW5kMiA9IHRydWU7CisgICAgICAgIGZvdW5kMiA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNvZGU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTQvY3VzdG9tLWNsaWVudC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItNC9jdXN0b20tY2xpZW50LnhtbAppbmRleCA4MzlmY2IxLi40OGYxNzE2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItNC9jdXN0b20tY2xpZW50LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItNC9jdXN0b20tY2xpZW50LnhtbApAQCAtMTcsMTIgKzE3LDEyIEBACiAKIC0tPgogCi08YmluZGluZ3MgCis8YmluZGluZ3MKICAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgogICAgIHhtbG5zOmpheGI9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheGIiCiAgICAgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCiAgICAgd3NkbExvY2F0aW9uPSJTdWJ0cmFjdE51bWJlcnMud3NkbCIKLSAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4d3MiPiAgICAKKyAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4d3MiPgogICAgIDxiaW5kaW5ncyBub2RlPSJuczE6ZGVmaW5pdGlvbnMiIHhtbG5zOm5zMT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgogICAgICAgICA8cGFja2FnZSBuYW1lPSJjbGllbnQiLz4KICAgICA8L2JpbmRpbmdzPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTQvY3VzdG9tLXNlcnZlci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItNC9jdXN0b20tc2VydmVyLnhtbAppbmRleCAxNzBkNjY3Li4wOTg4MTIyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItNC9jdXN0b20tc2VydmVyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItNC9jdXN0b20tc2VydmVyLnhtbApAQCAtMTcsNyArMTcsNyBAQAogCiAtLT4KIAotPGJpbmRpbmdzIAorPGJpbmRpbmdzCiAgICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKICAgICB4bWxuczpqYXhiPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXhiIgogICAgIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTQvZW5kcG9pbnQvU3VidHJhY3ROdW1iZXJzSW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTQvZW5kcG9pbnQvU3VidHJhY3ROdW1iZXJzSW1wbC5qYXZhCmluZGV4IGY2MDdlNjIuLjVlMDUwOTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci00L2VuZHBvaW50L1N1YnRyYWN0TnVtYmVyc0ltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItNC9lbmRwb2ludC9TdWJ0cmFjdE51bWJlcnNJbXBsLmphdmEKQEAgLTE5LDcgKzE5LDcgQEAKIEBqYWthcnRhLmp3cy5IYW5kbGVyQ2hhaW4obmFtZT0ic29tZSBuYW1lIiwgZmlsZT0ibXloYW5kbGVyLnhtbCIpCiBAamFrYXJ0YS5qd3MuV2ViU2VydmljZSAoc2VydmljZU5hbWU9Imp1bmtqdW5ranVuayIsIGVuZHBvaW50SW50ZXJmYWNlPSJlbmRwb2ludC5TdWJ0cmFjdE51bWJlcnNQb3J0VHlwZSIpCiBwdWJsaWMgY2xhc3MgU3VidHJhY3ROdW1iZXJzSW1wbCBpbXBsZW1lbnRzIFN1YnRyYWN0TnVtYmVyc1BvcnRUeXBlIHsKLSAgICAKKwogICAgIHB1YmxpYyBpbnQgc3VidHJhY3ROdW1iZXJzIChpbnQgbnVtYmVyMSwgaW50IG51bWJlcjIpIHsKIFN5c3RlbS5vdXQucHJpbnRsbigiSSBnb3QgbjEgPSAiICsgbnVtYmVyMSArICIgYW5kIG4yID0gIiArIG51bWJlcjIpOwogICAgICAgICByZXR1cm4gbnVtYmVyMSAtIG51bWJlcjI7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItNC9lbmRwb2ludC9UZXN0SGFuZGxlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTQvZW5kcG9pbnQvVGVzdEhhbmRsZXIuamF2YQppbmRleCBmOTA4MTI4Li4zNjA4N2FjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItNC9lbmRwb2ludC9UZXN0SGFuZGxlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci00L2VuZHBvaW50L1Rlc3RIYW5kbGVyLmphdmEKQEAgLTI4LDExICsyOCwxMSBAQAogaW1wb3J0IGpha2FydGEueG1sLnNvYXAuKjsKIAogcHVibGljIGNsYXNzIFRlc3RIYW5kbGVyIGltcGxlbWVudHMgU09BUEhhbmRsZXI8U09BUE1lc3NhZ2VDb250ZXh0PiB7Ci0gICAgCisKICAgICBwdWJsaWMgU2V0PFFOYW1lPiBnZXRIZWFkZXJzKCkgewogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICBTdHJpbmcgcG9zdENvbnN0U3RyaW5nID0gIk5PVF9JTklUSUFMSVpFRCI7CiAgICAgQFBvc3RDb25zdHJ1Y3QKICAgICBwdWJsaWMgdm9pZCBpbml0KCkgewpAQCAtNDAsOCArNDAsOCBAQAogICAgIH0KIAogICAgIEBSZXNvdXJjZShuYW1lPSJzdHJpbmdWYWx1ZSIpCi0gICAgU3RyaW5nIGluamVjdGVkU3RyaW5nID0gInVuZGVmaW5lZCI7ICAgIAotICAgIAorICAgIFN0cmluZyBpbmplY3RlZFN0cmluZyA9ICJ1bmRlZmluZWQiOworCiAgICAgcHVibGljIGJvb2xlYW4gaGFuZGxlTWVzc2FnZShTT0FQTWVzc2FnZUNvbnRleHQgY29udGV4dCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgaWYgKCJQUk9QRVJMWV9JTklUSUFMSVpFRCIuZXF1YWxzKHBvc3RDb25zdFN0cmluZykpIHsKQEAgLTUwLDE3ICs1MCwxNyBAQAogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGFuZGxlciBQb3N0Q29uc3RydWN0IG5vdCBjYWxsZWQgcHJvcGVydHkiKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInBvc3RDb25zdFN0cmluZyA9ICIgKyBwb3N0Q29uc3RTdHJpbmcpOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0gICAgICAgICAgICAKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICgidW5kZWZpbmVkIi5lcXVhbHMoaW5qZWN0ZWRTdHJpbmcpKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIYW5kbGVyIG5vdCBpbmplY3RlZCBwcm9wZXJ0eSIpOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbmplY3RlZFN0cmluZyA9ICIgKyBpbmplY3RlZFN0cmluZyk7Ci0gICAgICAgICAgICB9ICAgICAgICAgICAgCisgICAgICAgICAgICB9CiAgICAgICAgICAgICBTT0FQTWVzc2FnZUNvbnRleHQgc21jID0gKFNPQVBNZXNzYWdlQ29udGV4dCkgY29udGV4dDsKICAgICAgICAgICAgIFNPQVBNZXNzYWdlIG1lc3NhZ2UgPSBzbWMuZ2V0TWVzc2FnZSgpOwogICAgICAgICAgICAgU09BUEJvZHkgYm9keSA9IG1lc3NhZ2UuZ2V0U09BUEJvZHkoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTT0FQRWxlbWVudCBwYXJhbUVsZW1lbnQgPQogICAgICAgICAgICAgICAgIChTT0FQRWxlbWVudCkgYm9keS5nZXRGaXJzdENoaWxkKCkuZ2V0Rmlyc3RDaGlsZCgpOwogICAgICAgICAgICAgaW50IG51bWJlciA9IEludGVnZXIucGFyc2VJbnQocGFyYW1FbGVtZW50LmdldFZhbHVlKCkpOwpAQCAtNjgsMTYgKzY4LDE2IEBACiAgICAgICAgIH0gY2F0Y2ggKFNPQVBFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotCVN5c3RlbS5vdXQucHJpbnRsbigiVklKJ3MgVEVTVCBIQU5ETEVSIENBTExFRCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVklKJ3MgVEVTVCBIQU5ETEVSIENBTExFRCIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBoYW5kbGVGYXVsdChTT0FQTWVzc2FnZUNvbnRleHQgY29udGV4dCkgewogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkge30KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGNsb3NlKE1lc3NhZ2VDb250ZXh0IGNvbnRleHQpIHt9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci00L3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItNC93ZWIueG1sCmluZGV4IDU0ZDIwYzQuLjZjY2I1MGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci00L3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTQvd2ViLnhtbApAQCAtMTgsMzAgKzE4LDMwIEBACiAtLT4KIAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCi0JCQlodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KKyAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCisgICAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KIAotCTxkZXNjcmlwdGlvbj5TdWJ0cmFjdE51bWJlcnMgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgPGRlc2NyaXB0aW9uPlN1YnRyYWN0TnVtYmVycyBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KIAotCTxzZXJ2bGV0PgotCQk8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIFN1YnRyYWN0TnVtYmVycyBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JCTxkaXNwbGF5LW5hbWU+U3VidHJhY3ROdW1iZXJzV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgotCQk8c2VydmxldC1uYW1lPlN1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3NlcnZsZXQtbmFtZT4KLQkJPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuU3VidHJhY3ROdW1iZXJzSW1wbDwvc2VydmxldC1jbGFzcz4KLQkJPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+Ci0JPC9zZXJ2bGV0PgorICAgIDxzZXJ2bGV0PgorICAgICAgICA8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIFN1YnRyYWN0TnVtYmVycyBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgICAgIDxkaXNwbGF5LW5hbWU+U3VidHJhY3ROdW1iZXJzV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgorICAgICAgICA8c2VydmxldC1uYW1lPlN1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuU3VidHJhY3ROdW1iZXJzSW1wbDwvc2VydmxldC1jbGFzcz4KKyAgICAgICAgPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+CisgICAgPC9zZXJ2bGV0PgogCi0JPHNlcnZsZXQtbWFwcGluZz4KLQkJPHNlcnZsZXQtbmFtZT5TdWJ0cmFjdE51bWJlcnNTZXJ2aWNlPC9zZXJ2bGV0LW5hbWU+Ci0JCTx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9TdWJ0cmFjdE51bWJlcnNTZXJ2aWNlPC91cmwtcGF0dGVybj4KLQk8L3NlcnZsZXQtbWFwcGluZz4KKyAgICA8c2VydmxldC1tYXBwaW5nPgorICAgICAgICA8c2VydmxldC1uYW1lPlN1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL1N1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3VybC1wYXR0ZXJuPgorICAgIDwvc2VydmxldC1tYXBwaW5nPgogCi0JPHNlc3Npb24tY29uZmlnPgotCQk8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+Ci0JPC9zZXNzaW9uLWNvbmZpZz4KLSAgICAgICAgCisgICAgPHNlc3Npb24tY29uZmlnPgorICAgICAgICA8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+CisgICAgPC9zZXNzaW9uLWNvbmZpZz4KKwogICAgICAgICA8ZW52LWVudHJ5PgogICAgICAgICAgICAgPGVudi1lbnRyeS1uYW1lPnN0cmluZ1ZhbHVlPC9lbnYtZW50cnktbmFtZT4KICAgICAgICAgICAgIDxlbnYtZW50cnktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9lbnYtZW50cnktdHlwZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci00L3dlYmNsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci00L3dlYmNsaWVudC9DbGllbnQuamF2YQppbmRleCA0ZTJiNzU4Li5hNDE5YjEzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3N2Y2hhbmRsZXItNC93ZWJjbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyLTQvd2ViY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yNyw4ICsyNyw4IEBACiAKICAgICAgICAgQFdlYlNlcnZpY2VSZWYgU3VidHJhY3ROdW1iZXJzU2VydmljZSBzZXJ2aWNlOwogCi0gICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKSAKLQkJdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKKyAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCisgICAgICAgIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgICAgIGRvUG9zdChyZXEsIHJlc3ApOwogICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93YXJzZXJ2aWNlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dhcnNlcnZpY2UvYnVpbGQucHJvcGVydGllcwppbmRleCA4MzI2YzgzLi4yNDcxNTU5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dhcnNlcnZpY2UvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dhcnNlcnZpY2UvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsOSArMTUsOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2Fyc2VydmljZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iLi93ZWIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dhcnNlcnZpY2UvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93YXJzZXJ2aWNlL2J1aWxkLnhtbAppbmRleCA4M2RkMzlkLi4wNDcyNWYxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dhcnNlcnZpY2UvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Fyc2VydmljZS9idWlsZC54bWwKQEAgLTczLDcgKzczLDcgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1zZXJ2ZXItaW5zdGFuY2UtY29tbW9uIi8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudCIvPgogCi0gICAgICA8IS0tcmVzdG9yZSB0aGUgdG9rZW5zIGJhY2sgaW4gZmlsZS0tPiAKKyAgICAgIDwhLS1yZXN0b3JlIHRoZSB0b2tlbnMgYmFjayBpbiBmaWxlLS0+CiAgICAgICA8cmVwbGFjZSBmaWxlPSJjbGllbnQvQ2xpZW50LmphdmEiIHRva2VuPSIke2h0dHAuaG9zdH0iIHZhbHVlPSJIVFRQX0hPU1QiLz4KICAgICAgIDxyZXBsYWNlIGZpbGU9ImNsaWVudC9DbGllbnQuamF2YSIgdG9rZW49IiR7aHR0cC5wb3J0fSIgdmFsdWU9IkhUVFBfUE9SVCIvPgogICAgIDwvdGFyZ2V0PgpAQCAtODEsNyArODEsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bmNsaWVudCI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi1jbGllbnQiPgogICAgICAgICA8cGFyYW0gbmFtZT0iY2xpZW50LWNsYXNzIiB2YWx1ZT0iY2xpZW50LkNsaWVudCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93YXJzZXJ2aWNlL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Fyc2VydmljZS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMDBhMmFhYS4uMGY5YTQ3ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93YXJzZXJ2aWNlL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dhcnNlcnZpY2UvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMiwxMCArMzIsMTAgQEAKICAgICAgICAgc3RhdGljIEhlbGxvU2VydmljZSBzZXJ2aWNlOwogCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQkgICAgc3RhdC5hZGREZXNjcmlwdGlvbigid2Vic2VydmljZXMtc2ltcGxlLWFubm90YXRpb24iKTsKKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigid2Vic2VydmljZXMtc2ltcGxlLWFubm90YXRpb24iKTsKICAgICAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7CiAgICAgICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3MpOwotCSAgICBzdGF0LnByaW50U3VtbWFyeSgid2Vic2VydmljZXMtYW5ub3RhdGlvbiIpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgid2Vic2VydmljZXMtYW5ub3RhdGlvbiIpOwogICAgICAgIH0KIAogICAgICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmdbXSBhcmdzKSB7CkBAIC00MywxNiArNDMsMTYgQEAKICAgICAgICAgICAgICAgICBIZWxsbyBwb3J0ID0gc2VydmljZS5nZXRIZWxsb1BvcnQoKTsKICAgICAgICAgICAgICAgICBmb3IgKGludCBpPTA7aTwxMDtpKyspIHsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJldCA9IHBvcnQuc2F5SGVsbG8oIkFwcHNlcnZlciBUZXN0ZXIgISIgKyBhcmdzWzBdKTsKLQkJICAgIGlmKHJldC5pbmRleE9mKCJXZWJTdmNUZXN0LUhlbGxvIikgPT0gLTEpIHsKKyAgICAgICAgICAgIGlmKHJldC5pbmRleE9mKCJXZWJTdmNUZXN0LUhlbGxvIikgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBncmVldGluZyAiICsgcmV0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGFyZ3NbMF0sIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0JCSAgICB9Ci0JCSAgICBpZihyZXQuaW5kZXhPZihhcmdzWzBdKSA9PSAtMSkgeworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYocmV0LmluZGV4T2YoYXJnc1swXSkgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBncmVldGluZyAiICsgcmV0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGFyZ3NbMF0sIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0JCSAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhhcmdzWzBdLCBzdGF0LlBBU1MpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93YXJzZXJ2aWNlL2VuZHBvaW50L0hlbGxvLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dhcnNlcnZpY2UvZW5kcG9pbnQvSGVsbG8uamF2YQppbmRleCBjNTcyN2IyLi4xNGI2ZTBiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dhcnNlcnZpY2UvZW5kcG9pbnQvSGVsbG8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dhcnNlcnZpY2UvZW5kcG9pbnQvSGVsbG8uamF2YQpAQCAtMjUsMTAgKzI1LDEwIEBACiAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZXhhbXBsZS5jb20vSGVsbG8iCiApCiBwdWJsaWMgY2xhc3MgSGVsbG8gewotCXB1YmxpYyBIZWxsbygpIHt9CisgICAgcHVibGljIEhlbGxvKCkge30KIAotCUBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0ic2F5SGVsbG8iLCBhY3Rpb249InVybjpTYXlIZWxsbyIpCi0JcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgd2hvKSB7Ci0JCXJldHVybiAiV2ViU3ZjVGVzdC1IZWxsbyAiICsgd2hvOwotCX0KKyAgICBAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9InNheUhlbGxvIiwgYWN0aW9uPSJ1cm46U2F5SGVsbG8iKQorICAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIHdobykgeworICAgICAgICByZXR1cm4gIldlYlN2Y1Rlc3QtSGVsbG8gIiArIHdobzsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dhcnNlcnZpY2Uvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Fyc2VydmljZS93ZWIueG1sCmluZGV4IDM3Y2UxODIuLmNjNjQxMWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Fyc2VydmljZS93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Fyc2VydmljZS93ZWIueG1sCkBAIC0xOCwzMCArMTgsMzAgQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKLQkJCWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgorICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKKyAgICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogCi0JPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBIZWxsbyBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQk8ZGlzcGxheS1uYW1lPkhlbGxvV0FSPC9kaXNwbGF5LW5hbWU+CisgICAgPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBIZWxsbyBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICA8ZGlzcGxheS1uYW1lPkhlbGxvV0FSPC9kaXNwbGF5LW5hbWU+CiAKLQk8c2VydmxldD4KLQkJPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBIZWxsbyBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JCTxkaXNwbGF5LW5hbWU+SGVsbG9XZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+Ci0JCTxzZXJ2bGV0LW5hbWU+SGVsbG88L3NlcnZsZXQtbmFtZT4KLQkJPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuSGVsbG88L3NlcnZsZXQtY2xhc3M+Ci0JCTxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgotCTwvc2VydmxldD4KKyAgICA8c2VydmxldD4KKyAgICAgICAgPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBIZWxsbyBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgICAgIDxkaXNwbGF5LW5hbWU+SGVsbG9XZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+SGVsbG88L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuSGVsbG88L3NlcnZsZXQtY2xhc3M+CisgICAgICAgIDxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgorICAgIDwvc2VydmxldD4KIAotCTxzZXJ2bGV0LW1hcHBpbmc+Ci0JCTxzZXJ2bGV0LW5hbWU+SGVsbG88L3NlcnZsZXQtbmFtZT4KLQkJPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL0hlbGxvU2VydmljZTwvdXJsLXBhdHRlcm4+Ci0JPC9zZXJ2bGV0LW1hcHBpbmc+CisgICAgPHNlcnZsZXQtbWFwcGluZz4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5IZWxsbzwvc2VydmxldC1uYW1lPgorICAgICAgICA8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvSGVsbG9TZXJ2aWNlPC91cmwtcGF0dGVybj4KKyAgICA8L3NlcnZsZXQtbWFwcGluZz4KIAotCTxzZXNzaW9uLWNvbmZpZz4KLQkJPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgotCTwvc2Vzc2lvbi1jb25maWc+CisgICAgPHNlc3Npb24tY29uZmlnPgorICAgICAgICA8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+CisgICAgPC9zZXNzaW9uLWNvbmZpZz4KIAogPC93ZWItYXBwPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VyZWYtY29idW5kbGUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXJlZi1jb2J1bmRsZS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDIwOWQ5NTEuLmE1MDE0NzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXJlZi1jb2J1bmRsZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXJlZi1jb2J1bmRsZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IiR7YW50LnByb2plY3QubmFtZX0iLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9Ii4vd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iLi9zdW4td2ViLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlcmVmLWNvYnVuZGxlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXJlZi1jb2J1bmRsZS9idWlsZC54bWwKaW5kZXggNWQwMDNkMi4uZjFmNDhlOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlcmVmLWNvYnVuZGxlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VyZWYtY29idW5kbGUvYnVpbGQueG1sCkBAIC0xMjIsMTEgKzEyMiwxMSBAQAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bnRlc3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgotICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IiAKLSAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIAorICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJjbGllbnQvKioiLz4KICAgICAgIDx1bmphciBzcmM9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiBkZXN0PSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iY2xpZW50LlRlc3RDbGllbnQiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlcmVmLWNvYnVuZGxlL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VyZWYtY29idW5kbGUvd2ViLnhtbAppbmRleCAwZmIwZjFiLi4wMTU0OWFjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VyZWYtY29idW5kbGUvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VyZWYtY29idW5kbGUvd2ViLnhtbApAQCAtMjAsNyArMjAsNyBAQAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLSAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIAorICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogICA8ZGVzY3JpcHRpb24+QSB0ZXN0IGFwcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KICAgPGRpc3BsYXktbmFtZT5XZWJUaWVyPC9kaXNwbGF5LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VyZWYtbG9va3VwL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VyZWYtbG9va3VwL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYjQ2OWJhYi4uMTcwNWQyOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlcmVmLWxvb2t1cC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXJlZi1sb29rdXAvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWJzZXJ2aWNlcmVmLWxvb2t1cCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iLi93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSIuL3N1bi13ZWIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VyZWYtbG9va3VwL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXJlZi1sb29rdXAvYnVpbGQueG1sCmluZGV4IGQyYThmNzIuLjQyMTA0OTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXJlZi1sb29rdXAvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXJlZi1sb29rdXAvYnVpbGQueG1sCkBAIC04Myw3ICs4Myw3IEBACiAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi9jbGFzc2VzIgogICAgICAgICAgICAgaW5jbHVkZXM9IndlYmNsaWVudC8qKiI+CiAgICAgICAgICA8Y2xhc3NwYXRoIHJlZmlkPSJjbGFzc3BhdGgiLz4KLSAKKwogICAgICAgPC9qYXZhYz4KICAgICAgIDxjb3B5IGZpbGU9ImNsaWVudC13ZWIueG1sIiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL3dlYi54bWwiLz4KICAgICAgIDxjb3B5IGZpbGU9ImNsaWVudC1zdW4td2ViLnhtbCIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi9zdW4td2ViLnhtbCIvPgpAQCAtMTI0LDExICsxMjQsMTEgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY2xpZW50Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bnRlc3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgotICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IiAKLSAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIAorICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJjbGllbnQvKioiLz4KICAgICAgIDx1bmphciBzcmM9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiBkZXN0PSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iY2xpZW50LlRlc3RDbGllbnQiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlcmVmLWxvb2t1cC9jbGllbnQtd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXJlZi1sb29rdXAvY2xpZW50LXdlYi54bWwKaW5kZXggMDI3ZGZjZS4uYjRiYmY1YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlcmVmLWxvb2t1cC9jbGllbnQtd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VyZWYtbG9va3VwL2NsaWVudC13ZWIueG1sCkBAIC0yMCw3ICsyMCw3IEBACiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgCisgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAgIDxkZXNjcmlwdGlvbj5BIHRlc3QgYXBwbGljYXRpb248L2Rlc2NyaXB0aW9uPgogICA8ZGlzcGxheS1uYW1lPldlYlRpZXI8L2Rpc3BsYXktbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXJlZi1sb29rdXAvY2xpZW50L1Rlc3RDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXJlZi1sb29rdXAvY2xpZW50L1Rlc3RDbGllbnQuamF2YQppbmRleCAwZGVmNzBkLi5jZTgyNTkyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VyZWYtbG9va3VwL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlcmVmLWxvb2t1cC9jbGllbnQvVGVzdENsaWVudC5qYXZhCkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnQgY29kZSA9IGludm9rZVNlcnZsZXQodXJsKTsKICAgICAgICAgICAgIHJlcG9ydChjb2RlKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICB9CkBAIC02Myw5ICs2Myw5IEBACiAgICAgICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgICAgICAgIGxvZyhsaW5lKTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiU28gdGhlIFJFU1VMVCBPRiBTVUJUUkFDVCBTRVJWSUNFIElTIikgIT0gLTEpCi0JCWZvdW5kMSA9IHRydWU7CisgICAgICAgIGZvdW5kMSA9IHRydWU7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIls1NTU1XSIpICE9IC0xKQotCQlmb3VuZDIgPSB0cnVlOworICAgICAgICBmb3VuZDIgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjb2RlOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXJlZi1sb29rdXAvZW5kcG9pbnQvU3VidHJhY3ROdW1iZXJzSW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlcmVmLWxvb2t1cC9lbmRwb2ludC9TdWJ0cmFjdE51bWJlcnNJbXBsLmphdmEKaW5kZXggNGQ2MzM5Mi4uYWQ5Zjc5MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlcmVmLWxvb2t1cC9lbmRwb2ludC9TdWJ0cmFjdE51bWJlcnNJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlcmVmLWxvb2t1cC9lbmRwb2ludC9TdWJ0cmFjdE51bWJlcnNJbXBsLmphdmEKQEAgLTE4LDcgKzE4LDcgQEAKIAogQGpha2FydGEuandzLldlYlNlcnZpY2UKIHB1YmxpYyBjbGFzcyBTdWJ0cmFjdE51bWJlcnNJbXBsICB7Ci0gICAgCisKICAgICBwdWJsaWMgaW50IHN1YnRyYWN0TnVtYmVycyAoaW50IG51bWJlcjEsIGludCBudW1iZXIyKSB7CiAgICAgICAgIHJldHVybiBudW1iZXIxIC0gbnVtYmVyMjsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VyZWYtbG9va3VwL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VyZWYtbG9va3VwL3dlYi54bWwKaW5kZXggNDM0MjQzNC4uNGExYjI4MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlcmVmLWxvb2t1cC93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXJlZi1sb29rdXAvd2ViLnhtbApAQCAtMTgsMjkgKzE4LDI5IEBACiAtLT4KIAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCi0JCQlodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KKyAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCisgICAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KIAotCTxkZXNjcmlwdGlvbj5TdWJ0cmFjdE51bWJlcnMgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgPGRlc2NyaXB0aW9uPlN1YnRyYWN0TnVtYmVycyBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KIAotCTxzZXJ2bGV0PgotCQk8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIFN1YnRyYWN0TnVtYmVycyBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JCTxkaXNwbGF5LW5hbWU+U3VidHJhY3ROdW1iZXJzV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgotCQk8c2VydmxldC1uYW1lPlN1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3NlcnZsZXQtbmFtZT4KLQkJPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuU3VidHJhY3ROdW1iZXJzSW1wbDwvc2VydmxldC1jbGFzcz4KLQkJPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+Ci0JPC9zZXJ2bGV0PgorICAgIDxzZXJ2bGV0PgorICAgICAgICA8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIFN1YnRyYWN0TnVtYmVycyBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgICAgIDxkaXNwbGF5LW5hbWU+U3VidHJhY3ROdW1iZXJzV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgorICAgICAgICA8c2VydmxldC1uYW1lPlN1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuU3VidHJhY3ROdW1iZXJzSW1wbDwvc2VydmxldC1jbGFzcz4KKyAgICAgICAgPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+CisgICAgPC9zZXJ2bGV0PgogCi0JPHNlcnZsZXQtbWFwcGluZz4KLQkJPHNlcnZsZXQtbmFtZT5TdWJ0cmFjdE51bWJlcnNTZXJ2aWNlPC9zZXJ2bGV0LW5hbWU+Ci0JCTx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9TdWJ0cmFjdE51bWJlcnNTZXJ2aWNlPC91cmwtcGF0dGVybj4KLQk8L3NlcnZsZXQtbWFwcGluZz4KKyAgICA8c2VydmxldC1tYXBwaW5nPgorICAgICAgICA8c2VydmxldC1uYW1lPlN1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL1N1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3VybC1wYXR0ZXJuPgorICAgIDwvc2VydmxldC1tYXBwaW5nPgogCi0JPHNlc3Npb24tY29uZmlnPgotCQk8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+Ci0JPC9zZXNzaW9uLWNvbmZpZz4KKyAgICA8c2Vzc2lvbi1jb25maWc+CisgICAgICAgIDxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KKyAgICA8L3Nlc3Npb24tY29uZmlnPgogCiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXJlZi1sb29rdXAvd2ViY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlcmVmLWxvb2t1cC93ZWJjbGllbnQvQ2xpZW50LmphdmEKaW5kZXggNDljZDIwMy4uMWVmMjAyMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlcmVmLWxvb2t1cC93ZWJjbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlcmVmLWxvb2t1cC93ZWJjbGllbnQvQ2xpZW50LmphdmEKQEAgLTI3LDE0ICsyNywxNCBAQAogcHVibGljIGNsYXNzIENsaWVudCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKIAogICAgICAgICBAamFrYXJ0YS54bWwud3MuV2ViU2VydmljZVJlZihuYW1lPSJmb28vYmFyIiApCi0gICAgICAgIEBBZGRyZXNzaW5nIAorICAgICAgICBAQWRkcmVzc2luZwogICAgICAgICBTdWJ0cmFjdE51bWJlcnNTZXJ2aWNlIHNlcnZpY2U7CiAKICAgICAgICAgQGpha2FydGEueG1sLndzLldlYlNlcnZpY2VSZWYobG9va3VwPSJqYXZhOmNvbXAvZW52L2Zvby9iYXIiKQogICAgICAgICBTdWJ0cmFjdE51bWJlcnNTZXJ2aWNlIHNlcnZpY2UyOwogCi0gICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKSAKLQkJdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKKyAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCisgICAgICAgIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgICAgIGRvUG9zdChyZXEsIHJlc3ApOwogICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlcmVmcy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlcmVmcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDU4YzZjYjcuLjAzMmU2MTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXJlZnMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VyZWZzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDkgKzE1LDkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYnNlcnZpY2VyZWZzIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSIuL3dlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXJlZnMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlcmVmcy9idWlsZC54bWwKaW5kZXggZTFjMDUxMy4uOGFjYTNlYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlcmVmcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlcmVmcy9idWlsZC54bWwKQEAgLTc4LDggKzc4LDggQEAKICAgICAgIDxyZXBsYWNlIGZpbGU9ImNsaWVudC9DbGllbnQuamF2YSIgdmFsdWU9IiR7aHR0cC5ob3N0fSIgdG9rZW49IkhUVFBfSE9TVCIvPgogICAgICAgPHJlcGxhY2UgZmlsZT0iY2xpZW50L0NsaWVudC5qYXZhIiB2YWx1ZT0iJHtodHRwLnBvcnR9IiB0b2tlbj0iSFRUUF9QT1JUIi8+CiAKLSAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIgCi0gICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2oyZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXJ0Lmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy10b29scy5qYXIiIAorICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9qMmVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy1ydC5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtdG9vbHMuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9ImNsaWVudC8qKiIvPgogICAgIDwvdGFyZ2V0PgogCkBAIC05Nyw3ICs5Nyw3IEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWphci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuY2xpZW50Ij4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLWNsaWVudCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJjbGllbnQtY2xhc3MiIHZhbHVlPSJjbGllbnQuQ2xpZW50Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VyZWZzL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXJlZnMvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDcwYTZkNDAuLjdjYmI3OTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXJlZnMvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXJlZnMvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zNiwxMSArMzYsMTEgQEAKICAgICAgICAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCSAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ3ZWJzZXJ2aWNlcmVmcy10ZXN0Iik7CisgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIndlYnNlcnZpY2VyZWZzLXRlc3QiKTsKICAgICAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7CiAgICAgICAgICAgICBjbGllbnQuZG9TZXJ2bGV0VGVzdCgpOwogICAgICAgICAgICAgY2xpZW50LmRvRWpiVGVzdCgpOwotCSAgICBzdGF0LnByaW50U3VtbWFyeSgid2Vic2VydmljZXJlZnMtdGVzdCIpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgid2Vic2VydmljZXJlZnMtdGVzdCIpOwogICAgICAgIH0KIAogICAgICAgIHB1YmxpYyB2b2lkIGRvU2VydmxldFRlc3QoKSB7CkBAIC01MCwxMSArNTAsMTEgQEAKICAgICAgICAgICAgICAgICBTZXJ2bGV0SGVsbG8gcG9ydCA9IHN2Yy5nZXRTZXJ2bGV0SGVsbG9Qb3J0KCk7CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaT0wO2k8MTA7aSsrKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyByZXQgPSBwb3J0LnNheVNlcnZsZXRIZWxsbygiQXBwc2VydmVyIFRlc3RlciAhIik7Ci0JCSAgICBpZihyZXQuaW5kZXhPZigiV2ViU3ZjVGVzdC1TZXJ2bGV0LUhlbGxvIikgPT0gLTEpIHsKKyAgICAgICAgICAgIGlmKHJldC5pbmRleE9mKCJXZWJTdmNUZXN0LVNlcnZsZXQtSGVsbG8iKSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIldlYlNlcnZpY2VSZWZzLVNlcnZsZXQtRW5kcG9pbnQiLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCQkgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmV0KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIldlYlNlcnZpY2VSZWZzLVNlcnZsZXQtRW5kcG9pbnQiLCBzdGF0LlBBU1MpOwpAQCAtNzEsMTEgKzcxLDExIEBACiAgICAgICAgICAgICAgICAgV1NIZWxsbyBwb3J0ID0gc3ZjLmdldFdTSGVsbG9FSkJQb3J0KCk7CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaT0wO2k8MTA7aSsrKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyByZXQgPSBwb3J0LnNheUVqYkhlbGxvKCJBcHBzZXJ2ZXIgVGVzdGVyICEiKTsKLQkJICAgIGlmKHJldC5pbmRleE9mKCJXZWJTdmNUZXN0LUVKQi1IZWxsbyIpID09IC0xKSB7CisgICAgICAgICAgICBpZihyZXQuaW5kZXhPZigiV2ViU3ZjVGVzdC1FSkItSGVsbG8iKSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIldlYlNlcnZpY2VSZWZzLUVKQi1FbmRwb2ludCIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0JCSAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiV2ViU2VydmljZVJlZnMtRUpCLUVuZHBvaW50Iiwgc3RhdC5QQVNTKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXJlZnMvZWpiX2VuZHBvaW50L1dTSGVsbG8uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXJlZnMvZWpiX2VuZHBvaW50L1dTSGVsbG8uamF2YQppbmRleCA3M2QzYTU0Li5iYjJmYTcyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VyZWZzL2VqYl9lbmRwb2ludC9XU0hlbGxvLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlcmVmcy9lamJfZW5kcG9pbnQvV1NIZWxsby5qYXZhCkBAIC0yMSw1ICsyMSw1IEBACiBAV2ViU2VydmljZQogcHVibGljIGludGVyZmFjZSBXU0hlbGxvIHsKIAotCXB1YmxpYyBTdHJpbmcgc2F5RWpiSGVsbG8oU3RyaW5nIHdobyk7CisgICAgcHVibGljIFN0cmluZyBzYXlFamJIZWxsbyhTdHJpbmcgd2hvKTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXJlZnMvc2VydmxldF9lbmRwb2ludC9TZXJ2bGV0SGVsbG8uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXJlZnMvc2VydmxldF9lbmRwb2ludC9TZXJ2bGV0SGVsbG8uamF2YQppbmRleCA3OWIwNzI1Li5lOTMxYmQ0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VyZWZzL3NlcnZsZXRfZW5kcG9pbnQvU2VydmxldEhlbGxvLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlcmVmcy9zZXJ2bGV0X2VuZHBvaW50L1NlcnZsZXRIZWxsby5qYXZhCkBAIC0yMCw4ICsyMCw4IEBACiAKIEBXZWJTZXJ2aWNlCiBwdWJsaWMgY2xhc3MgU2VydmxldEhlbGxvIHsKLQkKKwogICAgIHB1YmxpYyBTdHJpbmcgc2F5U2VydmxldEhlbGxvKFN0cmluZyBwYXJhbSkgewotCXJldHVybiAiV2ViU3ZjVGVzdC1TZXJ2bGV0LUhlbGxvICIgKyBwYXJhbTsKKyAgICByZXR1cm4gIldlYlN2Y1Rlc3QtU2VydmxldC1IZWxsbyAiICsgcGFyYW07CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlcmVmcy93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlcmVmcy93ZWIueG1sCmluZGV4IGYwNmY3NGMuLjBhZGQ4MWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXJlZnMvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VyZWZzL3dlYi54bWwKQEAgLTE4LDI1ICsxOCwyNSBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotCQkJaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CisgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQorICAgICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAKLQk8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIFNlcnZsZXQgSGVsbG8gU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JPGRpc3BsYXktbmFtZT5TZXJ2bGV0IEhlbGxvV0FSPC9kaXNwbGF5LW5hbWU+CisgICAgPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBTZXJ2bGV0IEhlbGxvIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgIDxkaXNwbGF5LW5hbWU+U2VydmxldCBIZWxsb1dBUjwvZGlzcGxheS1uYW1lPgogCi0JPHNlcnZsZXQ+Ci0JCTxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgU2VydmxldCBIZWxsbyBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JCTxkaXNwbGF5LW5hbWU+U2VydmxldEhlbGxvV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgotCQk8c2VydmxldC1uYW1lPlNlcnZsZXRIZWxsbzwvc2VydmxldC1uYW1lPgotCQk8c2VydmxldC1jbGFzcz5zZXJ2bGV0X2VuZHBvaW50LlNlcnZsZXRIZWxsbzwvc2VydmxldC1jbGFzcz4KLQkJPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+Ci0JPC9zZXJ2bGV0PgorICAgIDxzZXJ2bGV0PgorICAgICAgICA8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIFNlcnZsZXQgSGVsbG8gV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgICAgICA8ZGlzcGxheS1uYW1lPlNlcnZsZXRIZWxsb1dlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5TZXJ2bGV0SGVsbG88L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtY2xhc3M+c2VydmxldF9lbmRwb2ludC5TZXJ2bGV0SGVsbG88L3NlcnZsZXQtY2xhc3M+CisgICAgICAgIDxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgorICAgIDwvc2VydmxldD4KIAotCTxzZXJ2bGV0LW1hcHBpbmc+Ci0JCTxzZXJ2bGV0LW5hbWU+U2VydmxldEhlbGxvPC9zZXJ2bGV0LW5hbWU+Ci0JCTx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9TZXJ2bGV0SGVsbG9TZXJ2aWNlPC91cmwtcGF0dGVybj4KLQk8L3NlcnZsZXQtbWFwcGluZz4KKyAgICA8c2VydmxldC1tYXBwaW5nPgorICAgICAgICA8c2VydmxldC1uYW1lPlNlcnZsZXRIZWxsbzwvc2VydmxldC1uYW1lPgorICAgICAgICA8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvU2VydmxldEhlbGxvU2VydmljZTwvdXJsLXBhdHRlcm4+CisgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nLTIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nLTIvYnVpbGQucHJvcGVydGllcwppbmRleCBlNDZhODEwLi45OWM0YzdlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy0yL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmctMi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy0yIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSIuL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9Ii4vc3VuLXdlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nLTIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmctMi9idWlsZC54bWwKaW5kZXggNjM4OWU3My4uMDk2MTE2MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmctMi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmctMi9idWlsZC54bWwKQEAgLTgzLDcgKzgzLDcgQEAKICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL2NsYXNzZXMiCiAgICAgICAgICAgICBpbmNsdWRlcz0id2ViY2xpZW50LyoqIj4KICAgICAgICAgIDxjbGFzc3BhdGggcmVmaWQ9ImNsYXNzcGF0aCIvPgotIAorCiAgICAgICA8L2phdmFjPgogICAgICAgPGNvcHkgZmlsZT0iY2xpZW50LXdlYi54bWwiIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvd2ViLnhtbCIvPgogICAgICAgPGNvcHkgZmlsZT0iY2xpZW50LXN1bi13ZWIueG1sIiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL3N1bi13ZWIueG1sIi8+CkBAIC0xMjQsMTEgKzEyNCwxMSBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jbGllbnQiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVudGVzdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+Ci0gICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiIAotICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgCisgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9ImNsaWVudC8qKiIvPgogICAgICAgPHVuamFyIHNyYz0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIGRlc3Q9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgogICAgICAgPGphdmEgY2xhc3NuYW1lPSJjbGllbnQuVGVzdENsaWVudCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy0yL2NsaWVudC13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmctMi9jbGllbnQtd2ViLnhtbAppbmRleCAwMjdkZmNlLi5iNGJiZjViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy0yL2NsaWVudC13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nLTIvY2xpZW50LXdlYi54bWwKQEAgLTIwLDcgKzIwLDcgQEAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0gICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSAKKyAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KICAgPGRlc2NyaXB0aW9uPkEgdGVzdCBhcHBsaWNhdGlvbjwvZGVzY3JpcHRpb24+CiAgIDxkaXNwbGF5LW5hbWU+V2ViVGllcjwvZGlzcGxheS1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmctMi9jbGllbnQvVGVzdENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmctMi9jbGllbnQvVGVzdENsaWVudC5qYXZhCmluZGV4IDJhOTJlMzUuLjNjZTg3MWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nLTIvY2xpZW50L1Rlc3RDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy0yL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludCBjb2RlID0gaW52b2tlU2VydmxldCh1cmwpOwogICAgICAgICAgICAgcmVwb3J0KGNvZGUpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KQEAgLTYzLDkgKzYzLDkgQEAKICAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nKGxpbmUpOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJTbyB0aGUgUkVTVUxUIE9GIFNVQlRSQUNUIFNFUlZJQ0UgSVMiKSAhPSAtMSkKLQkJZm91bmQxID0gdHJ1ZTsKKyAgICAgICAgZm91bmQxID0gdHJ1ZTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiWzU1NTVdIikgIT0gLTEpCi0JCWZvdW5kMiA9IHRydWU7CisgICAgICAgIGZvdW5kMiA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNvZGU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmctMi9lbmRwb2ludC9TdWJ0cmFjdE51bWJlcnNJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy0yL2VuZHBvaW50L1N1YnRyYWN0TnVtYmVyc0ltcGwuamF2YQppbmRleCA0ZDYzMzkyLi5hZDlmNzkxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy0yL2VuZHBvaW50L1N1YnRyYWN0TnVtYmVyc0ltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy0yL2VuZHBvaW50L1N1YnRyYWN0TnVtYmVyc0ltcGwuamF2YQpAQCAtMTgsNyArMTgsNyBAQAogCiBAamFrYXJ0YS5qd3MuV2ViU2VydmljZQogcHVibGljIGNsYXNzIFN1YnRyYWN0TnVtYmVyc0ltcGwgIHsKLSAgICAKKwogICAgIHB1YmxpYyBpbnQgc3VidHJhY3ROdW1iZXJzIChpbnQgbnVtYmVyMSwgaW50IG51bWJlcjIpIHsKICAgICAgICAgcmV0dXJuIG51bWJlcjEgLSBudW1iZXIyOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nLTIvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nLTIvd2ViLnhtbAppbmRleCA0MzQyNDM0Li40YTFiMjgzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy0yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmctMi93ZWIueG1sCkBAIC0xOCwyOSArMTgsMjkgQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKLQkJCWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgorICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKKyAgICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogCi0JPGRlc2NyaXB0aW9uPlN1YnRyYWN0TnVtYmVycyBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICA8ZGVzY3JpcHRpb24+U3VidHJhY3ROdW1iZXJzIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgogCi0JPHNlcnZsZXQ+Ci0JCTxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgU3VidHJhY3ROdW1iZXJzIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQkJPGRpc3BsYXktbmFtZT5TdWJ0cmFjdE51bWJlcnNXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+Ci0JCTxzZXJ2bGV0LW5hbWU+U3VidHJhY3ROdW1iZXJzU2VydmljZTwvc2VydmxldC1uYW1lPgotCQk8c2VydmxldC1jbGFzcz5lbmRwb2ludC5TdWJ0cmFjdE51bWJlcnNJbXBsPC9zZXJ2bGV0LWNsYXNzPgotCQk8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KLQk8L3NlcnZsZXQ+CisgICAgPHNlcnZsZXQ+CisgICAgICAgIDxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgU3VidHJhY3ROdW1iZXJzIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgPGRpc3BsYXktbmFtZT5TdWJ0cmFjdE51bWJlcnNXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+U3VidHJhY3ROdW1iZXJzU2VydmljZTwvc2VydmxldC1uYW1lPgorICAgICAgICA8c2VydmxldC1jbGFzcz5lbmRwb2ludC5TdWJ0cmFjdE51bWJlcnNJbXBsPC9zZXJ2bGV0LWNsYXNzPgorICAgICAgICA8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KKyAgICA8L3NlcnZsZXQ+CiAKLQk8c2VydmxldC1tYXBwaW5nPgotCQk8c2VydmxldC1uYW1lPlN1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3NlcnZsZXQtbmFtZT4KLQkJPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL1N1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3VybC1wYXR0ZXJuPgotCTwvc2VydmxldC1tYXBwaW5nPgorICAgIDxzZXJ2bGV0LW1hcHBpbmc+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+U3VidHJhY3ROdW1iZXJzU2VydmljZTwvc2VydmxldC1uYW1lPgorICAgICAgICA8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvU3VidHJhY3ROdW1iZXJzU2VydmljZTwvdXJsLXBhdHRlcm4+CisgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiAKLQk8c2Vzc2lvbi1jb25maWc+Ci0JCTxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KLQk8L3Nlc3Npb24tY29uZmlnPgorICAgIDxzZXNzaW9uLWNvbmZpZz4KKyAgICAgICAgPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgorICAgIDwvc2Vzc2lvbi1jb25maWc+CiAKIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmctMi93ZWJjbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy0yL3dlYmNsaWVudC9DbGllbnQuamF2YQppbmRleCBhNDc4ZDgxLi4zZGViZDNkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy0yL3dlYmNsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy0yL3dlYmNsaWVudC9DbGllbnQuamF2YQpAQCAtMjgsMTEgKzI4LDExIEBACiAKICAgICAgICAgQGpha2FydGEueG1sLndzLldlYlNlcnZpY2VSZWYobmFtZT0iZm9vL2JhciIgLHZhbHVlID1TdWJ0cmFjdE51bWJlcnNTZXJ2aWNlLmNsYXNzKQogICAgICAgIEBBZGRyZXNzaW5nIChlbmFibGVkPWZhbHNlKQotICAgICAgICAvL0BBZGRyZXNzaW5nIAorICAgICAgICAvL0BBZGRyZXNzaW5nCiAgICAgICAgIFN1YnRyYWN0TnVtYmVyc0ltcGwgcG9ydDsKIAotICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkgCi0JCXRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CisgICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQorICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICAgICBkb1Bvc3QocmVxLCByZXNwKTsKICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nLWFwcGNsaWVudC9hcHBjbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy1hcHBjbGllbnQvYXBwY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDk3YmQ0MzYuLjc5OGNmMGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nLWFwcGNsaWVudC9hcHBjbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmctYXBwY2xpZW50L2FwcGNsaWVudC9DbGllbnQuamF2YQpAQCAtMzIsMTAgKzMyLDEwIEBACiAgICAgICAgIEBXZWJTZXJ2aWNlUmVmKG5hbWU9InNlcnZpY2UvTXlTZXJ2aWNlIikgc3RhdGljIEFkZE51bWJlcnNTZXJ2aWNlIHNlcnZpY2U7CiAKICAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCSAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ3ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmctYXBwY2xpZW50IHRlc3QiKTsKKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigid2Vic2VydmljZXMxMy1hZGRyZXNzaW5nLWFwcGNsaWVudCB0ZXN0Iik7CiAgICAgICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAgICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzKTsKLQkgICAgc3RhdC5wcmludFN1bW1hcnkoIndlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy1hcHBjbGllbnRJRCIpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgid2Vic2VydmljZXMxMy1hZGRyZXNzaW5nLWFwcGNsaWVudElEIik7CiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICAgICAgICAgICAgICBBZGROdW1iZXJzUG9ydFR5cGUgcG9ydCA9IHNlcnZpY2UuZ2V0QWRkTnVtYmVyc1BvcnQoKTsKICAgICAgICAgICAgICAgICAoKEJpbmRpbmdQcm92aWRlcilwb3J0KS5nZXRSZXF1ZXN0Q29udGV4dCgpLnB1dChCaW5kaW5nUHJvdmlkZXIuRU5EUE9JTlRfQUREUkVTU19QUk9QRVJUWSwiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy1hcHBjbGllbnQvd2Vic2VydmljZS9BZGROdW1iZXJzU2VydmljZT9XU0RMIik7CiAgICAgICAgICAgICAgICAgaW50IHJldCA9IHBvcnQuYWRkTnVtYmVycygxMDAsIDIwMCk7Ci0JCWlmKHJldCAhPSAzMDApIHsKKyAgICAgICAgaWYocmV0ICE9IDMwMCkgewogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJldCk7CiAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmctYXBwY2xpZW50Iiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmctYXBwY2xpZW50L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy1hcHBjbGllbnQvYnVpbGQucHJvcGVydGllcwppbmRleCAwMTljNjg2Li41YzczOWM0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy1hcHBjbGllbnQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy1hcHBjbGllbnQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmctYXBwY2xpZW50Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSIuL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9Ii4vc3VuLXdlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nLWFwcGNsaWVudC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy1hcHBjbGllbnQvYnVpbGQueG1sCmluZGV4IDdmZmE3YjAuLjM5MjBjZmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nLWFwcGNsaWVudC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmctYXBwY2xpZW50L2J1aWxkLnhtbApAQCAtMTA5LDcgKzEwOSw3IEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNsaWVudC1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVudGVzdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iaHR0cDovLyR7aHR0cC5ob3N0fToke2h0dHAucG9ydH0iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nLWFwcGNsaWVudC9jdXN0b20tY2xpZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nLWFwcGNsaWVudC9jdXN0b20tY2xpZW50LnhtbAppbmRleCA2YTEzNWFkLi5mZTNmNzM2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy1hcHBjbGllbnQvY3VzdG9tLWNsaWVudC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmctYXBwY2xpZW50L2N1c3RvbS1jbGllbnQueG1sCkBAIC0xNywxMiArMTcsMTIgQEAKIAogLS0+CiAKLTxiaW5kaW5ncyAKKzxiaW5kaW5ncwogICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCiAgICAgeG1sbnM6amF4Yj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4YiIKICAgICB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKICAgICB3c2RsTG9jYXRpb249IkFkZE51bWJlcnMud3NkbCIKLSAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4d3MiPiAgICAKKyAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4d3MiPgogICAgIDxiaW5kaW5ncyBub2RlPSJuczE6ZGVmaW5pdGlvbnMiIHhtbG5zOm5zMT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgogICAgICAgICA8cGFja2FnZSBuYW1lPSJjbGllbnQiLz4KICAgICA8L2JpbmRpbmdzPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmctYXBwY2xpZW50L2N1c3RvbS1zZXJ2ZXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmctYXBwY2xpZW50L2N1c3RvbS1zZXJ2ZXIueG1sCmluZGV4IDRjZmJiNTkuLmU2YmIyMzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nLWFwcGNsaWVudC9jdXN0b20tc2VydmVyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy1hcHBjbGllbnQvY3VzdG9tLXNlcnZlci54bWwKQEAgLTE3LDcgKzE3LDcgQEAKIAogLS0+CiAKLTxiaW5kaW5ncyAKKzxiaW5kaW5ncwogICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCiAgICAgeG1sbnM6amF4Yj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4YiIKICAgICB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nLWFwcGNsaWVudC9lbmRwb2ludC9BZGROdW1iZXJzSW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmctYXBwY2xpZW50L2VuZHBvaW50L0FkZE51bWJlcnNJbXBsLmphdmEKaW5kZXggMzc0ZjViZC4uYzNkMmI5OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmctYXBwY2xpZW50L2VuZHBvaW50L0FkZE51bWJlcnNJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmctYXBwY2xpZW50L2VuZHBvaW50L0FkZE51bWJlcnNJbXBsLmphdmEKQEAgLTE5LDcgKzE5LDcgQEAKIEBqYWthcnRhLnhtbC53cy5CaW5kaW5nVHlwZShqYWthcnRhLnhtbC53cy5zb2FwLlNPQVBCaW5kaW5nLlNPQVAxMkhUVFBfQklORElORykKIEBqYWthcnRhLmp3cy5XZWJTZXJ2aWNlICh3c2RsTG9jYXRpb249IldFQi1JTkYvd3NkbC9BZGROdW1iZXJzLndzZGwiLCBzZXJ2aWNlTmFtZT0iQWRkTnVtYmVyc1NlcnZpY2UiLCB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9kdWtlLm9yZyIsIHBvcnROYW1lPSJBZGROdW1iZXJzUG9ydCIsIGVuZHBvaW50SW50ZXJmYWNlPSJlbmRwb2ludC5BZGROdW1iZXJzUG9ydFR5cGUiKQogcHVibGljIGNsYXNzIEFkZE51bWJlcnNJbXBsIGltcGxlbWVudHMgQWRkTnVtYmVyc1BvcnRUeXBlIHsKLSAgICAKKwogICAgIHB1YmxpYyBpbnQgYWRkTnVtYmVycyAoaW50IG51bWJlcjEsIGludCBudW1iZXIyKSB7CiAgICAgICAgIHJldHVybiBudW1iZXIxICsgbnVtYmVyMjsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy1hcHBjbGllbnQvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nLWFwcGNsaWVudC93ZWIueG1sCmluZGV4IDYyNTYxNTMuLjE4ODllYjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nLWFwcGNsaWVudC93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nLWFwcGNsaWVudC93ZWIueG1sCkBAIC0xOCwyOSArMTgsMjkgQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKLQkJCWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgorICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKKyAgICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogCi0JPGRlc2NyaXB0aW9uPkFkZE51bWJlcnMgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgPGRlc2NyaXB0aW9uPkFkZE51bWJlcnMgU2VydmljZTwvZGVzY3JpcHRpb24+CiAKLQk8c2VydmxldD4KLQkJPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBBZGROdW1iZXJzIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQkJPGRpc3BsYXktbmFtZT5BZGROdW1iZXJzV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgotCQk8c2VydmxldC1uYW1lPkFkZE51bWJlcnNJbXBsPC9zZXJ2bGV0LW5hbWU+Ci0JCTxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkFkZE51bWJlcnNJbXBsPC9zZXJ2bGV0LWNsYXNzPgotCQk8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KLQk8L3NlcnZsZXQ+CisgICAgPHNlcnZsZXQ+CisgICAgICAgIDxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgQWRkTnVtYmVycyBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgICAgIDxkaXNwbGF5LW5hbWU+QWRkTnVtYmVyc1dlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5BZGROdW1iZXJzSW1wbDwvc2VydmxldC1uYW1lPgorICAgICAgICA8c2VydmxldC1jbGFzcz5lbmRwb2ludC5BZGROdW1iZXJzSW1wbDwvc2VydmxldC1jbGFzcz4KKyAgICAgICAgPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+CisgICAgPC9zZXJ2bGV0PgogCi0JPHNlcnZsZXQtbWFwcGluZz4KLQkJPHNlcnZsZXQtbmFtZT5BZGROdW1iZXJzSW1wbDwvc2VydmxldC1uYW1lPgotCQk8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvQWRkTnVtYmVyc1NlcnZpY2U8L3VybC1wYXR0ZXJuPgotCTwvc2VydmxldC1tYXBwaW5nPgorICAgIDxzZXJ2bGV0LW1hcHBpbmc+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+QWRkTnVtYmVyc0ltcGw8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL0FkZE51bWJlcnNTZXJ2aWNlPC91cmwtcGF0dGVybj4KKyAgICA8L3NlcnZsZXQtbWFwcGluZz4KIAotCTxzZXNzaW9uLWNvbmZpZz4KLQkJPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgotCTwvc2Vzc2lvbi1jb25maWc+CisgICAgPHNlc3Npb24tY29uZmlnPgorICAgICAgICA8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+CisgICAgPC9zZXNzaW9uLWNvbmZpZz4KIAogPC93ZWItYXBwPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmcvYnVpbGQucHJvcGVydGllcwppbmRleCA4MGJiMWMxLi5iNzExY2IzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2Vic2VydmljZXMxMy1hZGRyZXNzaW5nIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSIuL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9Ii4vc3VuLXdlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nL2J1aWxkLnhtbAppbmRleCBiY2NjN2FiLi40YWUzMDE4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmcvYnVpbGQueG1sCkBAIC04Myw3ICs4Myw3IEBACiAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi9jbGFzc2VzIgogICAgICAgICAgICAgaW5jbHVkZXM9IndlYmNsaWVudC8qKiI+CiAgICAgICAgICA8Y2xhc3NwYXRoIHJlZmlkPSJjbGFzc3BhdGgiLz4KLSAKKwogICAgICAgPC9qYXZhYz4KICAgICAgIDxjb3B5IGZpbGU9ImNsaWVudC13ZWIueG1sIiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL3dlYi54bWwiLz4KICAgICAgIDxjb3B5IGZpbGU9ImNsaWVudC1zdW4td2ViLnhtbCIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi9zdW4td2ViLnhtbCIvPgpAQCAtMTI0LDExICsxMjQsMTEgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY2xpZW50Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bnRlc3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgotICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IiAKLSAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIAorICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJjbGllbnQvKioiLz4KICAgICAgIDx1bmphciBzcmM9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiBkZXN0PSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iY2xpZW50LlRlc3RDbGllbnQiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmcvY2xpZW50LXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy9jbGllbnQtd2ViLnhtbAppbmRleCAwMjdkZmNlLi5iNGJiZjViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy9jbGllbnQtd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy9jbGllbnQtd2ViLnhtbApAQCAtMjAsNyArMjAsNyBAQAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLSAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIAorICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogICA8ZGVzY3JpcHRpb24+QSB0ZXN0IGFwcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KICAgPGRpc3BsYXktbmFtZT5XZWJUaWVyPC9kaXNwbGF5LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy9jbGllbnQvVGVzdENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmcvY2xpZW50L1Rlc3RDbGllbnQuamF2YQppbmRleCAyZDE1NzFkLi4zNWI3YTFhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy9jbGllbnQvVGVzdENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludCBjb2RlID0gaW52b2tlU2VydmxldCh1cmwpOwogICAgICAgICAgICAgcmVwb3J0KGNvZGUpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KQEAgLTYzLDkgKzYzLDkgQEAKICAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nKGxpbmUpOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJTbyB0aGUgUkVTVUxUIE9GIFNVQlRSQUNUIFNFUlZJQ0UgSVMiKSAhPSAtMSkKLQkJZm91bmQxID0gdHJ1ZTsKKyAgICAgICAgZm91bmQxID0gdHJ1ZTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiWzU1NTVdIikgIT0gLTEpCi0JCWZvdW5kMiA9IHRydWU7CisgICAgICAgIGZvdW5kMiA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNvZGU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmcvZW5kcG9pbnQvU3VidHJhY3ROdW1iZXJzSW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWFkZHJlc3NpbmcvZW5kcG9pbnQvU3VidHJhY3ROdW1iZXJzSW1wbC5qYXZhCmluZGV4IDRkNjMzOTIuLmFkOWY3OTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nL2VuZHBvaW50L1N1YnRyYWN0TnVtYmVyc0ltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy9lbmRwb2ludC9TdWJ0cmFjdE51bWJlcnNJbXBsLmphdmEKQEAgLTE4LDcgKzE4LDcgQEAKIAogQGpha2FydGEuandzLldlYlNlcnZpY2UKIHB1YmxpYyBjbGFzcyBTdWJ0cmFjdE51bWJlcnNJbXBsICB7Ci0gICAgCisKICAgICBwdWJsaWMgaW50IHN1YnRyYWN0TnVtYmVycyAoaW50IG51bWJlcjEsIGludCBudW1iZXIyKSB7CiAgICAgICAgIHJldHVybiBudW1iZXIxIC0gbnVtYmVyMjsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWFkZHJlc3Npbmcvd2ViLnhtbAppbmRleCA0MzQyNDM0Li40YTFiMjgzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nL3dlYi54bWwKQEAgLTE4LDI5ICsxOCwyOSBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotCQkJaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CisgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQorICAgICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAKLQk8ZGVzY3JpcHRpb24+U3VidHJhY3ROdW1iZXJzIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgIDxkZXNjcmlwdGlvbj5TdWJ0cmFjdE51bWJlcnMgU2VydmljZTwvZGVzY3JpcHRpb24+CiAKLQk8c2VydmxldD4KLQkJPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBTdWJ0cmFjdE51bWJlcnMgV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCQk8ZGlzcGxheS1uYW1lPlN1YnRyYWN0TnVtYmVyc1dlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KLQkJPHNlcnZsZXQtbmFtZT5TdWJ0cmFjdE51bWJlcnNTZXJ2aWNlPC9zZXJ2bGV0LW5hbWU+Ci0JCTxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LlN1YnRyYWN0TnVtYmVyc0ltcGw8L3NlcnZsZXQtY2xhc3M+Ci0JCTxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgotCTwvc2VydmxldD4KKyAgICA8c2VydmxldD4KKyAgICAgICAgPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBTdWJ0cmFjdE51bWJlcnMgV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgICAgICA8ZGlzcGxheS1uYW1lPlN1YnRyYWN0TnVtYmVyc1dlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5TdWJ0cmFjdE51bWJlcnNTZXJ2aWNlPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LlN1YnRyYWN0TnVtYmVyc0ltcGw8L3NlcnZsZXQtY2xhc3M+CisgICAgICAgIDxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgorICAgIDwvc2VydmxldD4KIAotCTxzZXJ2bGV0LW1hcHBpbmc+Ci0JCTxzZXJ2bGV0LW5hbWU+U3VidHJhY3ROdW1iZXJzU2VydmljZTwvc2VydmxldC1uYW1lPgotCQk8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvU3VidHJhY3ROdW1iZXJzU2VydmljZTwvdXJsLXBhdHRlcm4+Ci0JPC9zZXJ2bGV0LW1hcHBpbmc+CisgICAgPHNlcnZsZXQtbWFwcGluZz4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5TdWJ0cmFjdE51bWJlcnNTZXJ2aWNlPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9TdWJ0cmFjdE51bWJlcnNTZXJ2aWNlPC91cmwtcGF0dGVybj4KKyAgICA8L3NlcnZsZXQtbWFwcGluZz4KIAotCTxzZXNzaW9uLWNvbmZpZz4KLQkJPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgotCTwvc2Vzc2lvbi1jb25maWc+CisgICAgPHNlc3Npb24tY29uZmlnPgorICAgICAgICA8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+CisgICAgPC9zZXNzaW9uLWNvbmZpZz4KIAogPC93ZWItYXBwPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy93ZWJjbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtYWRkcmVzc2luZy93ZWJjbGllbnQvQ2xpZW50LmphdmEKaW5kZXggNTVmNDA1Zi4uZmRkYjI0MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWFkZHJlc3Npbmcvd2ViY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1hZGRyZXNzaW5nL3dlYmNsaWVudC9DbGllbnQuamF2YQpAQCAtMjgsMTEgKzI4LDExIEBACiAKICAgICAgICAgQGpha2FydGEueG1sLndzLldlYlNlcnZpY2VSZWYoU3VidHJhY3ROdW1iZXJzU2VydmljZS5jbGFzcykKICAgICAgICAvL0BBZGRyZXNzaW5nIChyZXF1aXJlZCA9IHRydWUsZW5hYmxlZD10cnVlICxyZXNwb25zZXM9QWRkcmVzc2luZ0ZlYXR1cmUuUmVzcG9uc2VzLk5PTl9BTk9OWU1PVVMpCi0gICAgICAgIC8vQEFkZHJlc3NpbmcgCisgICAgICAgIC8vQEFkZHJlc3NpbmcKICAgICAgICAgU3VidHJhY3ROdW1iZXJzSW1wbCBwb3J0OwogCi0gICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKSAKLQkJdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKKyAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCisgICAgICAgIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgICAgIGRvUG9zdChyZXEsIHJlc3ApOwogICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWNsaWVudGRkcy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWNsaWVudGRkcy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDA1ZWU4MjkuLjM3NmY1OWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1jbGllbnRkZHMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtY2xpZW50ZGRzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id2Vic2VydmljZXMxMy1jbGllbnRkZHMiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9Ii4vd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iLi9zdW4td2ViLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWNsaWVudGRkcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtY2xpZW50ZGRzL2J1aWxkLnhtbAppbmRleCBlODVlYjBkLi44ZWYxMGFhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtY2xpZW50ZGRzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtY2xpZW50ZGRzL2J1aWxkLnhtbApAQCAtNjQsNyArNjQsNyBAQAogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3c2ltcG9ydCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJ3c2ltcG9ydC5hcmdzIgogICAgICAgICAgIHZhbHVlPSIgLVhlbmRvcnNlZCAtcCBlbmRwb2ludCAta2VlcCAtZCAke2J1aWxkLmNsYXNzZXMuZGlyfSAke2Vudi5BUFNfSE9NRX0vZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWNsaWVudGRkcy9TdWJ0cmFjdE51bWJlcnMud3NkbCIvPgotICAgICAgPC9hbnRjYWxsPiAKKyAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZSIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwa2ctd2FyIj4KICAgICAgICAgPHBhcmFtIG5hbWU9IndzZGxmaWxlLmxvY2F0aW9uIiB2YWx1ZT0iJHtlbnYuQVBTX0hPTUV9L2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1jbGllbnRkZHMiLz4KQEAgLTgzLDcgKzgzLDcgQEAKICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL2NsYXNzZXMiCiAgICAgICAgICAgICBpbmNsdWRlcz0id2ViY2xpZW50LyoqIj4KICAgICAgICAgIDxjbGFzc3BhdGggcmVmaWQ9ImNsYXNzcGF0aCIvPgotIAorCiAgICAgICA8L2phdmFjPgogICAgICAgPGNvcHkgZmlsZT0iY2xpZW50LXdlYi54bWwiIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvd2ViLnhtbCIvPgogICAgICAgPGNvcHkgZmlsZT0iY2xpZW50LXN1bi13ZWIueG1sIiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL3N1bi13ZWIueG1sIi8+CkBAIC0xMjUsMTEgKzEyNSwxMSBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jbGllbnQiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVudGVzdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+Ci0gICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiIAotICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgCisgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9ImNsaWVudC8qKiIvPgogICAgICAgPHVuamFyIHNyYz0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIGRlc3Q9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgogICAgICAgPGphdmEgY2xhc3NuYW1lPSJjbGllbnQuVGVzdENsaWVudCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtY2xpZW50ZGRzL2NsaWVudC9UZXN0Q2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtY2xpZW50ZGRzL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKaW5kZXggZmJkM2FmMi4uMmVkM2E5MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWNsaWVudGRkcy9jbGllbnQvVGVzdENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1jbGllbnRkZHMvY2xpZW50L1Rlc3RDbGllbnQuamF2YQpAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgaW50IGNvZGUgPSBpbnZva2VTZXJ2bGV0KHVybCk7CiAgICAgICAgICAgICByZXBvcnQoY29kZSk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgfQpAQCAtNjMsOSArNjMsOSBAQAogICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICBsb2cobGluZSk7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIlNvIHRoZSBSRVNVTFQgT0YgU1VCVFJBQ1QgU0VSVklDRSBJUyIpICE9IC0xKQotCQlmb3VuZDEgPSB0cnVlOworICAgICAgICBmb3VuZDEgPSB0cnVlOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJbNTU1NV0iKSAhPSAtMSkKLQkJZm91bmQyID0gdHJ1ZTsKKyAgICAgICAgZm91bmQyID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY29kZTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtY2xpZW50ZGRzL2VuZHBvaW50L1N1YnRyYWN0TnVtYmVyc0ltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1jbGllbnRkZHMvZW5kcG9pbnQvU3VidHJhY3ROdW1iZXJzSW1wbC5qYXZhCmluZGV4IDhkMTBlZmQuLjRjOWJjNGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1jbGllbnRkZHMvZW5kcG9pbnQvU3VidHJhY3ROdW1iZXJzSW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1jbGllbnRkZHMvZW5kcG9pbnQvU3VidHJhY3ROdW1iZXJzSW1wbC5qYXZhCkBAIC0yNiw3ICsyNiw3IEBACiAgICAgZW5kcG9pbnRJbnRlcmZhY2U9ImVuZHBvaW50LlN1YnRyYWN0TnVtYmVyc1BvcnRUeXBlIikKIAogcHVibGljIGNsYXNzIFN1YnRyYWN0TnVtYmVyc0ltcGwgIHsKLSAgICAKKwogICAgIHB1YmxpYyBpbnQgc3VidHJhY3ROdW1iZXJzIChpbnQgbnVtYmVyMSwgaW50IG51bWJlcjIpIHsKICAgICAgICAgcmV0dXJuIG51bWJlcjEgLSBudW1iZXIyOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1jbGllbnRkZHMvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1jbGllbnRkZHMvd2ViLnhtbAppbmRleCA0MzQyNDM0Li40YTFiMjgzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtY2xpZW50ZGRzL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWNsaWVudGRkcy93ZWIueG1sCkBAIC0xOCwyOSArMTgsMjkgQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKLQkJCWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgorICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKKyAgICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogCi0JPGRlc2NyaXB0aW9uPlN1YnRyYWN0TnVtYmVycyBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICA8ZGVzY3JpcHRpb24+U3VidHJhY3ROdW1iZXJzIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgogCi0JPHNlcnZsZXQ+Ci0JCTxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgU3VidHJhY3ROdW1iZXJzIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQkJPGRpc3BsYXktbmFtZT5TdWJ0cmFjdE51bWJlcnNXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+Ci0JCTxzZXJ2bGV0LW5hbWU+U3VidHJhY3ROdW1iZXJzU2VydmljZTwvc2VydmxldC1uYW1lPgotCQk8c2VydmxldC1jbGFzcz5lbmRwb2ludC5TdWJ0cmFjdE51bWJlcnNJbXBsPC9zZXJ2bGV0LWNsYXNzPgotCQk8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KLQk8L3NlcnZsZXQ+CisgICAgPHNlcnZsZXQ+CisgICAgICAgIDxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgU3VidHJhY3ROdW1iZXJzIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgPGRpc3BsYXktbmFtZT5TdWJ0cmFjdE51bWJlcnNXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+U3VidHJhY3ROdW1iZXJzU2VydmljZTwvc2VydmxldC1uYW1lPgorICAgICAgICA8c2VydmxldC1jbGFzcz5lbmRwb2ludC5TdWJ0cmFjdE51bWJlcnNJbXBsPC9zZXJ2bGV0LWNsYXNzPgorICAgICAgICA8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KKyAgICA8L3NlcnZsZXQ+CiAKLQk8c2VydmxldC1tYXBwaW5nPgotCQk8c2VydmxldC1uYW1lPlN1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3NlcnZsZXQtbmFtZT4KLQkJPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL1N1YnRyYWN0TnVtYmVyc1NlcnZpY2U8L3VybC1wYXR0ZXJuPgotCTwvc2VydmxldC1tYXBwaW5nPgorICAgIDxzZXJ2bGV0LW1hcHBpbmc+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+U3VidHJhY3ROdW1iZXJzU2VydmljZTwvc2VydmxldC1uYW1lPgorICAgICAgICA8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvU3VidHJhY3ROdW1iZXJzU2VydmljZTwvdXJsLXBhdHRlcm4+CisgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiAKLQk8c2Vzc2lvbi1jb25maWc+Ci0JCTxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KLQk8L3Nlc3Npb24tY29uZmlnPgorICAgIDxzZXNzaW9uLWNvbmZpZz4KKyAgICAgICAgPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgorICAgIDwvc2Vzc2lvbi1jb25maWc+CiAKIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLWNsaWVudGRkcy93ZWJjbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtY2xpZW50ZGRzL3dlYmNsaWVudC9DbGllbnQuamF2YQppbmRleCAyMTA4N2QyLi44ZmFkMGQ0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtY2xpZW50ZGRzL3dlYmNsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtY2xpZW50ZGRzL3dlYmNsaWVudC9DbGllbnQuamF2YQpAQCAtMjgsMTEgKzI4LDExIEBACiAKICAgICAgICAgLy9AamFrYXJ0YS54bWwud3MuV2ViU2VydmljZVJlZihTdWJ0cmFjdE51bWJlcnNTZXJ2aWNlLmNsYXNzKQogICAgICAgIC8vQEFkZHJlc3NpbmcgKHJlcXVpcmVkID0gdHJ1ZSxlbmFibGVkPXRydWUgLHJlc3BvbnNlcz1BZGRyZXNzaW5nRmVhdHVyZS5SZXNwb25zZXMuTk9OX0FOT05ZTU9VUykKLSAgICAgICAgLy9AQWRkcmVzc2luZyAKKyAgICAgICAgLy9AQWRkcmVzc2luZwogICAgICAgICBTdWJ0cmFjdE51bWJlcnNQb3J0VHlwZSBwb3J0OwogCi0gICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKSAKLQkJdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKKyAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCisgICAgICAgIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgICAgIGRvUG9zdChyZXEsIHJlc3ApOwogICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLXJlc3BlY3RiaW5kaW5nL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtcmVzcGVjdGJpbmRpbmcvYnVpbGQucHJvcGVydGllcwppbmRleCA5ZjBlYjUxLi41NWRjZjBiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtcmVzcGVjdGJpbmRpbmcvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtcmVzcGVjdGJpbmRpbmcvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3ZWJzZXJ2aWNlczEzLXJlc3BlY3RiaW5kaW5nIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSIuL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9Ii4vc3VuLXdlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1yZXNwZWN0YmluZGluZy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtcmVzcGVjdGJpbmRpbmcvYnVpbGQueG1sCmluZGV4IGE4NmEyMzcuLjEyOTIyZTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1yZXNwZWN0YmluZGluZy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLXJlc3BlY3RiaW5kaW5nL2J1aWxkLnhtbApAQCAtODYsNyArODYsNyBAQAogICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvY2xhc3NlcyIKICAgICAgICAgICAgIGluY2x1ZGVzPSJ3ZWJjbGllbnQvKioiPgogICAgICAgICAgPGNsYXNzcGF0aCByZWZpZD0iY2xhc3NwYXRoIi8+Ci0gCisKICAgICAgIDwvamF2YWM+CiAgICAgICA8Y29weSBmaWxlPSJjbGllbnQtd2ViLnhtbCIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi93ZWIueG1sIi8+CiAgICAgICA8Y29weSBmaWxlPSJjbGllbnQtc3VuLXdlYi54bWwiIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvc3VuLXdlYi54bWwiLz4KQEAgLTEyNywxMSArMTI3LDExIEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNsaWVudCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW50ZXN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KLSAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIgCi0gICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiAKKyAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iY2xpZW50LyoqIi8+CiAgICAgICA8dW5qYXIgc3JjPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgZGVzdD0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+CiAgICAgICA8amF2YSBjbGFzc25hbWU9ImNsaWVudC5UZXN0Q2xpZW50Ij4KQEAgLTE0MSw3ICsxNDEsNyBAQAogICAgICAgICA8YXJnIHZhbHVlPSJodHRwOi8vJHtodHRwLmhvc3R9OiR7aHR0cC5wb3J0fS93c2NsaWVudC9SZXF1ZXN0UHJvY2Vzc29yIi8+CiAgICAgICA8L2phdmE+CiAKLTwhLS1yZXN0b3JlIHRoZSB0b2tlbnMgYmFjayBpbiBmaWxlLS0+IAorPCEtLXJlc3RvcmUgdGhlIHRva2VucyBiYWNrIGluIGZpbGUtLT4KICAgICAgICAgIDxyZXBsYWNlIGZpbGU9IndlYmNsaWVudC9DbGllbnQuamF2YSIgdG9rZW49IiR7aHR0cC5ob3N0fSIgdmFsdWU9IkhUVFBfSE9TVCIvPgogICAgICAgICAgPHJlcGxhY2UgZmlsZT0id2ViY2xpZW50L0NsaWVudC5qYXZhIiB0b2tlbj0iJHtodHRwLnBvcnR9IiB2YWx1ZT0iSFRUUF9QT1JUIi8+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtcmVzcGVjdGJpbmRpbmcvY2xpZW50LXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtcmVzcGVjdGJpbmRpbmcvY2xpZW50LXdlYi54bWwKaW5kZXggMDI3ZGZjZS4uYjRiYmY1YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLXJlc3BlY3RiaW5kaW5nL2NsaWVudC13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1yZXNwZWN0YmluZGluZy9jbGllbnQtd2ViLnhtbApAQCAtMjAsNyArMjAsNyBAQAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLSAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIAorICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogICA8ZGVzY3JpcHRpb24+QSB0ZXN0IGFwcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KICAgPGRpc3BsYXktbmFtZT5XZWJUaWVyPC9kaXNwbGF5LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtcmVzcGVjdGJpbmRpbmcvY2xpZW50L1Rlc3RDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1yZXNwZWN0YmluZGluZy9jbGllbnQvVGVzdENsaWVudC5qYXZhCmluZGV4IDk4NzU1MWQuLjc3ZTJjYWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1yZXNwZWN0YmluZGluZy9jbGllbnQvVGVzdENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1yZXNwZWN0YmluZGluZy9jbGllbnQvVGVzdENsaWVudC5qYXZhCkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnQgY29kZSA9IGludm9rZVNlcnZsZXQodXJsKTsKICAgICAgICAgICAgIHJlcG9ydChjb2RlKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICB9CkBAIC02Myw5ICs2Myw5IEBACiAgICAgICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgICAgICAgIGxvZyhsaW5lKTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiU28gdGhlIFJFU1VMVCBPRiBTVUJUUkFDVCBTRVJWSUNFIElTIikgIT0gLTEpCi0JCWZvdW5kMSA9IHRydWU7CisgICAgICAgIGZvdW5kMSA9IHRydWU7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIls1NTU1XSIpICE9IC0xKQotCQlmb3VuZDIgPSB0cnVlOworICAgICAgICBmb3VuZDIgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjb2RlOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1yZXNwZWN0YmluZGluZy9lbmRwb2ludC9TdWJ0cmFjdE51bWJlcnNJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtcmVzcGVjdGJpbmRpbmcvZW5kcG9pbnQvU3VidHJhY3ROdW1iZXJzSW1wbC5qYXZhCmluZGV4IDRkNjMzOTIuLmFkOWY3OTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1yZXNwZWN0YmluZGluZy9lbmRwb2ludC9TdWJ0cmFjdE51bWJlcnNJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLXJlc3BlY3RiaW5kaW5nL2VuZHBvaW50L1N1YnRyYWN0TnVtYmVyc0ltcGwuamF2YQpAQCAtMTgsNyArMTgsNyBAQAogCiBAamFrYXJ0YS5qd3MuV2ViU2VydmljZQogcHVibGljIGNsYXNzIFN1YnRyYWN0TnVtYmVyc0ltcGwgIHsKLSAgICAKKwogICAgIHB1YmxpYyBpbnQgc3VidHJhY3ROdW1iZXJzIChpbnQgbnVtYmVyMSwgaW50IG51bWJlcjIpIHsKICAgICAgICAgcmV0dXJuIG51bWJlcjEgLSBudW1iZXIyOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1yZXNwZWN0YmluZGluZy93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLXJlc3BlY3RiaW5kaW5nL3dlYi54bWwKaW5kZXggNDM0MjQzNC4uNGExYjI4MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLXJlc3BlY3RiaW5kaW5nL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLXJlc3BlY3RiaW5kaW5nL3dlYi54bWwKQEAgLTE4LDI5ICsxOCwyOSBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotCQkJaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CisgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQorICAgICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAKLQk8ZGVzY3JpcHRpb24+U3VidHJhY3ROdW1iZXJzIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgIDxkZXNjcmlwdGlvbj5TdWJ0cmFjdE51bWJlcnMgU2VydmljZTwvZGVzY3JpcHRpb24+CiAKLQk8c2VydmxldD4KLQkJPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBTdWJ0cmFjdE51bWJlcnMgV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCQk8ZGlzcGxheS1uYW1lPlN1YnRyYWN0TnVtYmVyc1dlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KLQkJPHNlcnZsZXQtbmFtZT5TdWJ0cmFjdE51bWJlcnNTZXJ2aWNlPC9zZXJ2bGV0LW5hbWU+Ci0JCTxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LlN1YnRyYWN0TnVtYmVyc0ltcGw8L3NlcnZsZXQtY2xhc3M+Ci0JCTxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgotCTwvc2VydmxldD4KKyAgICA8c2VydmxldD4KKyAgICAgICAgPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBTdWJ0cmFjdE51bWJlcnMgV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgICAgICA8ZGlzcGxheS1uYW1lPlN1YnRyYWN0TnVtYmVyc1dlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5TdWJ0cmFjdE51bWJlcnNTZXJ2aWNlPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LlN1YnRyYWN0TnVtYmVyc0ltcGw8L3NlcnZsZXQtY2xhc3M+CisgICAgICAgIDxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgorICAgIDwvc2VydmxldD4KIAotCTxzZXJ2bGV0LW1hcHBpbmc+Ci0JCTxzZXJ2bGV0LW5hbWU+U3VidHJhY3ROdW1iZXJzU2VydmljZTwvc2VydmxldC1uYW1lPgotCQk8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvU3VidHJhY3ROdW1iZXJzU2VydmljZTwvdXJsLXBhdHRlcm4+Ci0JPC9zZXJ2bGV0LW1hcHBpbmc+CisgICAgPHNlcnZsZXQtbWFwcGluZz4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5TdWJ0cmFjdE51bWJlcnNTZXJ2aWNlPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9TdWJ0cmFjdE51bWJlcnNTZXJ2aWNlPC91cmwtcGF0dGVybj4KKyAgICA8L3NlcnZsZXQtbWFwcGluZz4KIAotCTxzZXNzaW9uLWNvbmZpZz4KLQkJPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgotCTwvc2Vzc2lvbi1jb25maWc+CisgICAgPHNlc3Npb24tY29uZmlnPgorICAgICAgICA8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+CisgICAgPC9zZXNzaW9uLWNvbmZpZz4KIAogPC93ZWItYXBwPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtcmVzcGVjdGJpbmRpbmcvd2ViY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93ZWJzZXJ2aWNlczEzLXJlc3BlY3RiaW5kaW5nL3dlYmNsaWVudC9DbGllbnQuamF2YQppbmRleCAyYzc1ZjMzLi4yNDIxMTQzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dlYnNlcnZpY2VzMTMtcmVzcGVjdGJpbmRpbmcvd2ViY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd2Vic2VydmljZXMxMy1yZXNwZWN0YmluZGluZy93ZWJjbGllbnQvQ2xpZW50LmphdmEKQEAgLTI4LDExICsyOCwxMSBAQAogCiAgICAgICAgIEBqYWthcnRhLnhtbC53cy5XZWJTZXJ2aWNlUmVmKFN1YnRyYWN0TnVtYmVyc1NlcnZpY2UuY2xhc3MpCiAgICAgICAgLy9AQWRkcmVzc2luZyAocmVxdWlyZWQgPSB0cnVlLGVuYWJsZWQ9dHJ1ZSAscmVzcG9uc2VzPUFkZHJlc3NpbmdGZWF0dXJlLlJlc3BvbnNlcy5OT05fQU5PTllNT1VTKQotICAgICAgICAvL0BBZGRyZXNzaW5nIAorICAgICAgICAvL0BBZGRyZXNzaW5nCiAgICAgICAgIFN1YnRyYWN0TnVtYmVyc0ltcGwgcG9ydDsKIAotICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkgCi0JCXRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CisgICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQorICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICAgICBkb1Bvc3QocmVxLCByZXNwKTsKICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd3NjdHh0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dzY3R4dC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGNlZjQ4ZjguLjczZGY2NTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd3NjdHh0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93c2N0eHQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3c2N0eCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iLi93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSIuL3N1bi13ZWIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dzY3R4dC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dzY3R4dC9idWlsZC54bWwKaW5kZXggNGU3MDY2OC4uOTdjODE5OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93c2N0eHQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd3NjdHh0L2J1aWxkLnhtbApAQCAtNTYsMTIgKzU2LDEyIEBACiAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY2xpZW50Ii8+CiAgICAgPC90YXJnZXQ+Ci0gIAorCiAKICAgICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlLWNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvY2xhc3NlcyIvPgpAQCAtNzgsNyArNzgsNyBAQAogICAgICAgPGNvcHkgZmlsZT0iY2xpZW50LXN1bi13ZWIueG1sIiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL3N1bi13ZWIueG1sIi8+CiAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vd3NjbGllbnQud2FyIiBiYXNlZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQiIGluY2x1ZGVzPSIqKiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95LWNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPHByb3BlcnR5IG5hbWU9ImNsaWVudC53YXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vd3NjbGllbnQud2FyIi8+CiAgICAgICA8ZWNobyBtZXNzYWdlPSJEZXBsb3lpbmcgJHt3c2RsLndhcn0gZnJvbSAke2Jhc2VkaXJ9LiIgbGV2ZWw9InZlcmJvc2UiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd3NjdHh0L2NsaWVudC13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93c2N0eHQvY2xpZW50LXdlYi54bWwKaW5kZXggMDI3ZGZjZS4uYjRiYmY1YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93c2N0eHQvY2xpZW50LXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93c2N0eHQvY2xpZW50LXdlYi54bWwKQEAgLTIwLDcgKzIwLDcgQEAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0gICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSAKKyAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KICAgPGRlc2NyaXB0aW9uPkEgdGVzdCBhcHBsaWNhdGlvbjwvZGVzY3JpcHRpb24+CiAgIDxkaXNwbGF5LW5hbWU+V2ViVGllcjwvZGlzcGxheS1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93c2N0eHQvY2xpZW50L1Rlc3RDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd3NjdHh0L2NsaWVudC9UZXN0Q2xpZW50LmphdmEKaW5kZXggNTU3MTEwZi4uMDgzZGM2OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93c2N0eHQvY2xpZW50L1Rlc3RDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dzY3R4dC9jbGllbnQvVGVzdENsaWVudC5qYXZhCkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnQgY29kZSA9IGludm9rZVNlcnZsZXQodXJsKTsKICAgICAgICAgICAgIHJlcG9ydChjb2RlKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICB9CkBAIC02Myw5ICs2Myw5IEBACiAgICAgICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgICAgICAgIGxvZyhsaW5lKTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiU28gdGhlIFJFU1VMVCBPRiBIRUxMTyBTRVJWSUNFIElTIikgIT0gLTEpCi0JCWZvdW5kMSA9IHRydWU7CisgICAgICAgIGZvdW5kMSA9IHRydWU7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIltIZWxsbyBBbGxIZWxsb1dBUl0iKSAhPSAtMSkKLQkJZm91bmQyID0gdHJ1ZTsKKyAgICAgICAgZm91bmQyID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY29kZTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dzY3R4dC9lbmRwb2ludC9IZWxsby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93c2N0eHQvZW5kcG9pbnQvSGVsbG8uamF2YQppbmRleCA0YWY2YjQzLi5iMmRkNzFjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dzY3R4dC9lbmRwb2ludC9IZWxsby5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd3NjdHh0L2VuZHBvaW50L0hlbGxvLmphdmEKQEAgLTI2LDIwICsyNiwyMCBAQAogCiBAV2ViU2VydmljZQogcHVibGljIGNsYXNzIEhlbGxvIHsKLQkKKwogICAgIEBSZXNvdXJjZSBXZWJTZXJ2aWNlQ29udGV4dCB3c2M7CiAKICAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyBwYXJhbSkgewotCVN5c3RlbS5vdXQucHJpbnRsbigid3NjdHh0LXNlcnZsZXQgd3NjID0gIiArIHdzYyk7Ci0JaWYod3NjICE9IG51bGwpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIndzY3R4dC1zZXJ2bGV0IHdzYyA9ICIgKyB3c2MpOworICAgIGlmKHdzYyAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgIFNlcnZsZXRDb250ZXh0IHNjID0KIChTZXJ2bGV0Q29udGV4dCl3c2MuZ2V0TWVzc2FnZUNvbnRleHQoKS5nZXQoTWVzc2FnZUNvbnRleHQuU0VSVkxFVF9DT05URVhUKTsKICAgICAgICAgICAgICAgICBTdHJpbmcgYSA9IG51bGw7CiAgICAgICAgICAgICAgICAgaWYgKHNjIT0gbnVsbCApIHsKICAgICAgICAgICAgICAgICAgYSA9IHNjLmdldFNlcnZsZXRDb250ZXh0TmFtZSgpOwogICAgICAgICAgICAgICAgIH0KLQkJcmV0dXJuICJIZWxsbyAiICsgcGFyYW0gK2E7CisgICAgICAgIHJldHVybiAiSGVsbG8gIiArIHBhcmFtICthOwogICAgICAgICB9Ci0JcmV0dXJuICJXZWJTZXJ2aWNlIENvbnRleHQgaW5qZWN0aW9uIGZhaWxlZCI7CisgICAgcmV0dXJuICJXZWJTZXJ2aWNlIENvbnRleHQgaW5qZWN0aW9uIGZhaWxlZCI7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93c2N0eHQvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd3NjdHh0L3dlYi54bWwKaW5kZXggZjUxY2NjMC4uNTY0Y2Q0ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93c2N0eHQvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dzY3R4dC93ZWIueG1sCkBAIC0xOCwzMCArMTgsMzAgQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKLQkJCWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgorICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKKyAgICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogCi0JPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBIZWxsbyBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQk8ZGlzcGxheS1uYW1lPkhlbGxvV0FSPC9kaXNwbGF5LW5hbWU+CisgICAgPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBIZWxsbyBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICA8ZGlzcGxheS1uYW1lPkhlbGxvV0FSPC9kaXNwbGF5LW5hbWU+CiAKLQk8c2VydmxldD4KLQkJPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBIZWxsbyBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JCTxkaXNwbGF5LW5hbWU+SGVsbG9XZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+Ci0JCTxzZXJ2bGV0LW5hbWU+SGVsbG88L3NlcnZsZXQtbmFtZT4KLQkJPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuSGVsbG88L3NlcnZsZXQtY2xhc3M+Ci0JCTxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgotCTwvc2VydmxldD4KKyAgICA8c2VydmxldD4KKyAgICAgICAgPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBIZWxsbyBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgICAgIDxkaXNwbGF5LW5hbWU+SGVsbG9XZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+SGVsbG88L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuSGVsbG88L3NlcnZsZXQtY2xhc3M+CisgICAgICAgIDxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgorICAgIDwvc2VydmxldD4KIAotCTxzZXJ2bGV0LW1hcHBpbmc+Ci0JCTxzZXJ2bGV0LW5hbWU+SGVsbG88L3NlcnZsZXQtbmFtZT4KLQkJPHVybC1wYXR0ZXJuPi9IZWxsb1NlcnZpY2U8L3VybC1wYXR0ZXJuPgotCTwvc2VydmxldC1tYXBwaW5nPgorICAgIDxzZXJ2bGV0LW1hcHBpbmc+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+SGVsbG88L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHVybC1wYXR0ZXJuPi9IZWxsb1NlcnZpY2U8L3VybC1wYXR0ZXJuPgorICAgIDwvc2VydmxldC1tYXBwaW5nPgogCi0JPHNlc3Npb24tY29uZmlnPgotCQk8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+Ci0JPC9zZXNzaW9uLWNvbmZpZz4KKyAgICA8c2Vzc2lvbi1jb25maWc+CisgICAgICAgIDxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KKyAgICA8L3Nlc3Npb24tY29uZmlnPgogCiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd3NjdHh0L3dlYmNsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd3NjdHh0L3dlYmNsaWVudC9DbGllbnQuamF2YQppbmRleCA0MGZjMjg1Li45NWNiNzNmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dzY3R4dC93ZWJjbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93c2N0eHQvd2ViY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yOSw4ICsyOSw4IEBACiAgICAgICAgIEBqYWthcnRhLnhtbC53cy5XZWJTZXJ2aWNlUmVmKEhlbGxvU2VydmljZS5jbGFzcykKICAgICAgICAgSGVsbG8gcG9ydDsKIAotICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkgCi0JCXRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CisgICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQorICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICAgICBkb1Bvc3QocmVxLCByZXNwKTsKICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd3NkbHRvamF2YS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93c2RsdG9qYXZhL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNTVkZTkzYS4uZWZiZDdhYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93c2RsdG9qYXZhL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93c2RsdG9qYXZhL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDkgKzE1LDkgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndzZGx0b2phdmEiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9Ii4vd2ViLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93c2RsdG9qYXZhL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd3NkbHRvamF2YS9idWlsZC54bWwKaW5kZXggZTU0OTlmNS4uN2M0MTYwNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93c2RsdG9qYXZhL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dzZGx0b2phdmEvYnVpbGQueG1sCkBAIC03MSw4ICs3MSw4IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0id3NpbXBvcnQuYXJncyIKICAgICAgICAgICAgICAgIHZhbHVlPSIta2VlcCAtd3NkbGxvY2F0aW9uICR7ZW52LkFQU19IT01FfS9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dzZGx0b2phdmEvSHR0cFRlc3RTZXJ2aWNlLndzZGwgLWIgY3VzdG9tY2xpZW50LnhtbCAtZCAke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQgSHR0cFRlc3RTZXJ2aWNlLndzZGwiLz4KICAgICAgICAgPC9hbnRjYWxsPgotICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiIAotICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9qMmVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy1ydC5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtdG9vbHMuamFyIiAKKyAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9qMmVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy1ydC5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtdG9vbHMuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9ImNsaWVudC8qKiIvPgogICAgIDwvdGFyZ2V0PgogCkBAIC04NSwxNCArODUsMTQgQEAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW50ZXN0Ij4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLWNsaWVudCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJjbGllbnQtY2xhc3MiIHZhbHVlPSJjbGllbnQuQ2xpZW50Ii8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJvdGhlci1hcmdzIiB2YWx1ZT0iYmFzaWMtd3NkbC10by1qYXZhLXRlc3QtY2FzZSIvPgogICAgICAgPC9hbnRjYWxsPgogCi0gICAgICA8IS0tcmVzdG9yZSB0aGUgdG9rZW5zIGJhY2sgaW4gZmlsZS0tPiAKKyAgICAgIDwhLS1yZXN0b3JlIHRoZSB0b2tlbnMgYmFjayBpbiBmaWxlLS0+CiAgICAgICA8cmVwbGFjZSBmaWxlPSJIdHRwVGVzdFNlcnZpY2Uud3NkbCIgdG9rZW49IiR7aHR0cC5ob3N0fSIgdmFsdWU9IkhUVFBfSE9TVCIvPgogICAgICAgPHJlcGxhY2UgZmlsZT0iSHR0cFRlc3RTZXJ2aWNlLndzZGwiIHRva2VuPSIke2h0dHAucG9ydH0iIHZhbHVlPSJIVFRQX1BPUlQiLz4KICAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd3NkbHRvamF2YS9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dzZGx0b2phdmEvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGU1NDRkZTUuLjQ3MjAwZDAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd3NkbHRvamF2YS9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93c2RsdG9qYXZhL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjIsMzMgKzIyLDMzIEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0JcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICAgICAgQFdlYlNlcnZpY2VSZWYgc3RhdGljIEh0dHBUZXN0U2VydmljZSBzZXJ2aWNlOwogCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQkgICAgc3RhdC5hZGREZXNjcmlwdGlvbigid2Vic2VydmljZXMtc2ltcGxlLWFubm90YXRpb24iKTsKKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigid2Vic2VydmljZXMtc2ltcGxlLWFubm90YXRpb24iKTsKICAgICAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7CiAgICAgICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3MpOwotCSAgICBzdGF0LnByaW50U3VtbWFyeSgid2Vic2VydmljZXMtYW5ub3RhdGlvbiIpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgid2Vic2VydmljZXMtYW5ub3RhdGlvbiIpOwogICAgICAgIH0KIAogICAgICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIEhlbGxvIHBvcnQgPSBzZXJ2aWNlLmdldEhlbGxvUG9ydCgpOwotCQlIZWxsb1JlcXVlc3QgcmVxID0gbmV3IEhlbGxvUmVxdWVzdCgpOwotCQlyZXEuc2V0U3RyaW5nKCJGcm9tIFZpamF5ICIpOwotCQlIZWxsb1Jlc3BvbnNlIHJlc3AgPSBwb3J0LmhlbGxvKHJlcSk7Ci0JCWlmKHJlc3AuZ2V0U3RyaW5nKCkuaW5kZXhPZigiRnJvbSBWaWpheSIpID09IC0xKSB7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJlc3AuZ2V0U3RyaW5nKCkpOwotCQkgICAgc3RhdC5hZGRTdGF0dXMoYXJnc1swXSwgc3RhdC5GQUlMKTsKLQkJfQotCQlTeXN0ZW0ub3V0LnByaW50bG4ocmVzcC5nZXRTdHJpbmcoKSk7Ci0JCXN0YXQuYWRkU3RhdHVzKGFyZ3NbMF0sIHN0YXQuUEFTUyk7CisgICAgICAgIEhlbGxvUmVxdWVzdCByZXEgPSBuZXcgSGVsbG9SZXF1ZXN0KCk7CisgICAgICAgIHJlcS5zZXRTdHJpbmcoIkZyb20gVmlqYXkgIik7CisgICAgICAgIEhlbGxvUmVzcG9uc2UgcmVzcCA9IHBvcnQuaGVsbG8ocmVxKTsKKyAgICAgICAgaWYocmVzcC5nZXRTdHJpbmcoKS5pbmRleE9mKCJGcm9tIFZpamF5IikgPT0gLTEpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBncmVldGluZyAiICsgcmVzcC5nZXRTdHJpbmcoKSk7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhhcmdzWzBdLCBzdGF0LkZBSUwpOworICAgICAgICB9CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXNwLmdldFN0cmluZygpKTsKKyAgICAgICAgc3RhdC5hZGRTdGF0dXMoYXJnc1swXSwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCQkgICAgc3RhdC5hZGRTdGF0dXMoYXJnc1swXSwgc3RhdC5GQUlMKTsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGFyZ3NbMF0sIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9CiAgICAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93c2RsdG9qYXZhL2N1c3RvbWNsaWVudC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dzZGx0b2phdmEvY3VzdG9tY2xpZW50LnhtbAppbmRleCA3YzMzNzJmLi45OWRmNjMyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dzZGx0b2phdmEvY3VzdG9tY2xpZW50LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dzZGx0b2phdmEvY3VzdG9tY2xpZW50LnhtbApAQCAtMjMsOSArMjMsOSBAQAogICAgICAgICA8cGFja2FnZSBuYW1lPSJjbGllbnQiLz4KICAgICA8L2JpbmRpbmdzPgogCi0gICAgPGJpbmRpbmdzIG5vZGU9Im5zMTpkZWZpbml0aW9ucy9uczE6dHlwZXMveHM6c2NoZW1hW0B0YXJnZXROYW1lc3BhY2U9J2h0dHA6Ly9odHRwdGVzdHNlcnZpY2Uub3JnL3R5cGVzJ10iIAotCXhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0JeG1sbnM6bnMxPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+CisgICAgPGJpbmRpbmdzIG5vZGU9Im5zMTpkZWZpbml0aW9ucy9uczE6dHlwZXMveHM6c2NoZW1hW0B0YXJnZXROYW1lc3BhY2U9J2h0dHA6Ly9odHRwdGVzdHNlcnZpY2Uub3JnL3R5cGVzJ10iCisgICAgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgorICAgIHhtbG5zOm5zMT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgogICAgICAgICA8bnMyOnNjaGVtYUJpbmRpbmdzIHhtbG5zOm5zMj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4YiI+CiAgICAgICAgICAgICA8bnMyOnBhY2thZ2UgbmFtZT0iY2xpZW50Ii8+CiAgICAgICAgIDwvbnMyOnNjaGVtYUJpbmRpbmdzPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93c2RsdG9qYXZhL2N1c3RvbXNlcnZpY2UueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93c2RsdG9qYXZhL2N1c3RvbXNlcnZpY2UueG1sCmluZGV4IDI0MjYxMWIuLjU4YzU1ZTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd3NkbHRvamF2YS9jdXN0b21zZXJ2aWNlLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dzZGx0b2phdmEvY3VzdG9tc2VydmljZS54bWwKQEAgLTIzLDkgKzIzLDkgQEAKICAgICAgICAgPHBhY2thZ2UgbmFtZT0ic2VydmljZSIvPgogICAgIDwvYmluZGluZ3M+CiAKLSAgICA8YmluZGluZ3Mgbm9kZT0ibnMxOmRlZmluaXRpb25zL25zMTp0eXBlcy94czpzY2hlbWFbQHRhcmdldE5hbWVzcGFjZT0naHR0cDovL2h0dHB0ZXN0c2VydmljZS5vcmcvdHlwZXMnXSIgCi0JeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLQl4bWxuczpuczE9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KKyAgICA8YmluZGluZ3Mgbm9kZT0ibnMxOmRlZmluaXRpb25zL25zMTp0eXBlcy94czpzY2hlbWFbQHRhcmdldE5hbWVzcGFjZT0naHR0cDovL2h0dHB0ZXN0c2VydmljZS5vcmcvdHlwZXMnXSIKKyAgICB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCisgICAgeG1sbnM6bnMxPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+CiAgICAgICAgIDxuczI6c2NoZW1hQmluZGluZ3MgeG1sbnM6bnMyPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXhiIj4KICAgICAgICAgICAgIDxuczI6cGFja2FnZSBuYW1lPSJzZXJ2aWNlIi8+CiAgICAgICAgIDwvbnMyOnNjaGVtYUJpbmRpbmdzPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93c2RsdG9qYXZhL3NlcnZpY2UvSGVsbG9JbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dzZGx0b2phdmEvc2VydmljZS9IZWxsb0ltcGwuamF2YQppbmRleCBhOTNkOGQxLi42NTRjZTcyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dzZGx0b2phdmEvc2VydmljZS9IZWxsb0ltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL3dzZGx0b2phdmEvc2VydmljZS9IZWxsb0ltcGwuamF2YQpAQCAtMzgsOCArMzgsOCBAQAogCiAgICAgcHVibGljIEhlbGxvUmVzcG9uc2UgaGVsbG8oSGVsbG9SZXF1ZXN0IHJlcSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvLCAiICsgcmVxLmdldFN0cmluZygpICsgIiEiKTsKLQlIZWxsb1Jlc3BvbnNlIHJlc3AgPSBuZXcgSGVsbG9SZXNwb25zZSgpOwotCXJlc3Auc2V0U3RyaW5nKCJIZWxsbywgIiArIHJlcS5nZXRTdHJpbmcoKSArICIhIik7CisgICAgSGVsbG9SZXNwb25zZSByZXNwID0gbmV3IEhlbGxvUmVzcG9uc2UoKTsKKyAgICByZXNwLnNldFN0cmluZygiSGVsbG8sICIgKyByZXEuZ2V0U3RyaW5nKCkgKyAiISIpOwogICAgICAgICByZXR1cm4gcmVzcDsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5ub3RhdGlvbnMvd3NkbHRvamF2YS93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93c2RsdG9qYXZhL3dlYi54bWwKaW5kZXggNjQwNDMzYS4uOTU2NjVmOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93c2RsdG9qYXZhL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm5vdGF0aW9ucy93c2RsdG9qYXZhL3dlYi54bWwKQEAgLTE4LDcgKzE4LDcgQEAKIC0tPgogCiA8d2ViLWFwcCB2ZXJzaW9uPSIyLjUiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0gICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKKyAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KIAogICA8ZGlzcGxheS1uYW1lPldTVzJKUkxIdHRwVGVzdEFwcDwvZGlzcGxheS1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm9ueW1vdXMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm9ueW1vdXMvYnVpbGQueG1sCmluZGV4IDI1MjliYzEuLjBhNTA2NzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5vbnltb3VzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fub255bW91cy9idWlsZC54bWwKQEAgLTM5LDEwICszOSwxMCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+Ci0JCVVzYWdlOgotCQkJYW50IGRvY2xpdCAKLQkJCWFudCBhbGwKLQk8L2VjaG8+CisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IGRvY2xpdAorICAgICAgICAgICAgYW50IGFsbAorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5vbnltb3VzL2RvY2xpdC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm9ueW1vdXMvZG9jbGl0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMzEwMjlmZi4uZGMzZjYzMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm9ueW1vdXMvZG9jbGl0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm9ueW1vdXMvZG9jbGl0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIyICsxNSwyMiBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZG9jbGl0Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9IndlYnNlcnZpY2VzLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2Vic2VydmljZXMueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5vbnltb3VzL2RvY2xpdC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fub255bW91cy9kb2NsaXQvYnVpbGQueG1sCmluZGV4IDY0OGVjNTMuLjk1ZDk0MTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5vbnltb3VzL2RvY2xpdC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm9ueW1vdXMvZG9jbGl0L2J1aWxkLnhtbApAQCAtMzMsOSArMzMsOSBAQAogCiAKICAgPHRhcmdldCBuYW1lPSJydW4ud3Njb21waWxlIj4KLQk8ZXhlYyBleGVjdXRhYmxlPSIke1dTQ09NUElMRX0iIGZhaWxvbmVycm9yPSJ0cnVlIiA+Ci0gICAgICAgIDxhcmcgbGluZT0iLXNvdXJjZSAxLjEuMiAke3dzY29tcGlsZS5jb21tYW5kfSIgLz4gICAgICAgIAotCTwvZXhlYz4KKyAgICA8ZXhlYyBleGVjdXRhYmxlPSIke1dTQ09NUElMRX0iIGZhaWxvbmVycm9yPSJ0cnVlIiA+CisgICAgICAgIDxhcmcgbGluZT0iLXNvdXJjZSAxLjEuMiAke3dzY29tcGlsZS5jb21tYW5kfSIgLz4KKyAgICA8L2V4ZWM+CiAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImluaXQtY29tbW9uLCBjbGVhbiI+CkBAIC02MSw3ICs2MSw3IEBACiAKICAgPHRhcmdldCBuYW1lPSJnZW4tcG9ydGFibGUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi53c2NvbXBpbGUiPgotICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIiAKKyAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIKICAgICAgICB2YWx1ZT0iLWltcG9ydCAtY3AgLiAtbWFwcGluZyBtYXBwaW5nLnhtbCAke2ZlYXR1cmVzfSBjb25maWcueG1sIi8+CiAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KQEAgLTcwLDcgKzcwLDcgQEAKICAgPCEtLSBOTyBmZWF0dXJlIGZsYWdzIGFzIG1hcHBpbmcgZmlsZSBzaG91bGQgY29udGFpbiBlbm91Z2ggaW5mbyAtLT4KICAgPHRhcmdldCBuYW1lPSJnZW4tbm9uLXBvcnRhYmxlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4ud3Njb21waWxlIj4KLSAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIgCisgICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiCiAgICAgICAgdmFsdWU9Ii1nZW46Ym90aCAtY3AgLiAtZjp3c2kgbWFwcGluZy5jb25maWcueG1sIi8+CiAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5vbnltb3VzL3JwY2xpdC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm9ueW1vdXMvcnBjbGl0L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYjM3NWY1MC4uOGMzMzllMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm9ueW1vdXMvcnBjbGl0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm9ueW1vdXMvcnBjbGl0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIyICsxNSwyMiBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0icnBjbGl0Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9IndlYnNlcnZpY2VzLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2Vic2VydmljZXMueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5vbnltb3VzL3JwY2xpdC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fub255bW91cy9ycGNsaXQvYnVpbGQueG1sCmluZGV4IGM3NDI2MGEuLmUzNmJhZWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYW5vbnltb3VzL3JwY2xpdC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9hbm9ueW1vdXMvcnBjbGl0L2J1aWxkLnhtbApAQCAtMzMsOSArMzMsOSBAQAogCiAKICAgPHRhcmdldCBuYW1lPSJydW4ud3Njb21waWxlIj4KLQk8ZXhlYyBleGVjdXRhYmxlPSIke1dTQ09NUElMRX0iIGZhaWxvbmVycm9yPSJ0cnVlIiA+Ci0gICAgICAgIDxhcmcgbGluZT0iLXNvdXJjZSAxLjEuMiAke3dzY29tcGlsZS5jb21tYW5kfSIgLz4gICAgICAgIAotCTwvZXhlYz4KKyAgICA8ZXhlYyBleGVjdXRhYmxlPSIke1dTQ09NUElMRX0iIGZhaWxvbmVycm9yPSJ0cnVlIiA+CisgICAgICAgIDxhcmcgbGluZT0iLXNvdXJjZSAxLjEuMiAke3dzY29tcGlsZS5jb21tYW5kfSIgLz4KKyAgICA8L2V4ZWM+CiAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0iYnVpbGQiIGRlcGVuZHM9ImluaXQtY29tbW9uLCBjbGVhbiI+CkBAIC02MSw3ICs2MSw3IEBACiAKICAgPHRhcmdldCBuYW1lPSJnZW4tcG9ydGFibGUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi53c2NvbXBpbGUiPgotICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIiAKKyAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIKICAgICAgICB2YWx1ZT0iLWltcG9ydCAtY3AgLiAtbWFwcGluZyBtYXBwaW5nLnhtbCAke2ZlYXR1cmVzfSBjb25maWcueG1sIi8+CiAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KQEAgLTcwLDcgKzcwLDcgQEAKICAgPCEtLSBOTyBmZWF0dXJlIGZsYWdzIGFzIG1hcHBpbmcgZmlsZSBzaG91bGQgY29udGFpbiBlbm91Z2ggaW5mbyAtLT4KICAgPHRhcmdldCBuYW1lPSJnZW4tbm9uLXBvcnRhYmxlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4ud3Njb21waWxlIj4KLSAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIgCisgICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiCiAgICAgICAgdmFsdWU9Ii1nZW46Ym90aCAtY3AgLiAtZjp3c2kgbWFwcGluZy5jb25maWcueG1sIi8+CiAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9idWlsZC54bWwKaW5kZXggYzYwZGM0Zi4uNmU1ZmFhYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9idWlsZC54bWwKQEAgLTM5LDE2ICszOSwxNiBAQAogICAgICAgICA8YW50IGRpcj0iamF4cnBjLWhlbGxvLWVqYiIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGRlbGV0ZSBkaXI9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUiLz4KICAgICAgICAgPGFudCBkaXI9ImpheHJwYy1oZWxsby13ZWIiIHRhcmdldD0iYWxsIi8+Ci08IS0tCTxhbnQgZGlyPSJnb29nbGVzZXJ2ZXIiIHRhcmdldD0iYWxsIi8+LS0+IDwhLS0gMyB0ZXN0cyAtLT4KKzwhLS0gICAgPGFudCBkaXI9Imdvb2dsZXNlcnZlciIgdGFyZ2V0PSJhbGwiLz4tLT4gPCEtLSAzIHRlc3RzIC0tPgogICAgICAgICA8YW50IGRpcj0ieHNkYW55IiB0YXJnZXQ9ImFsbCIvPiA8IS0tIDEgdGVzdCAtLT4KICAgICAgICAgPGFudCBkaXI9ImZpbHRlcl91cmxoYW5kbGluZyIgdGFyZ2V0PSJhbGwiLz4gPCEtLSAxIHRlc3QgLS0+CiAgICAgPCEtLSAgICA8YW50IGRpcj0ic2VjdXJpdHkiIHRhcmdldD0iYWxsIi8+LS0+ICAgICAgICAgPCEtLSA5IHRlc3QgLS0+Ci08IS0tCTxhbnQgZGlyPSJzaW1wbGVmYXVsdCIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0iaGFuZGxlciIgdGFyZ2V0PSJhbGwiLz4gCi0gICAgICAgIDxhbnQgZGlyPSJ3ZWJzdHViX3Byb3BlcnRpZXMiIHRhcmdldD0iYWxsIi8+IAotCTxhbnQgZGlyPSJzZXJ2bGV0aGFuZGxlciIgdGFyZ2V0PSJhbGwiLz4tLT4gCi0JPGFudCBkaXI9ImFubm90YXRpb25zIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJlamJfYW5ub3RhdGlvbnMiIHRhcmdldD0iYWxsIi8+Cis8IS0tICAgIDxhbnQgZGlyPSJzaW1wbGVmYXVsdCIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0iaGFuZGxlciIgdGFyZ2V0PSJhbGwiLz4KKyAgICAgICAgPGFudCBkaXI9IndlYnN0dWJfcHJvcGVydGllcyIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0ic2VydmxldGhhbmRsZXIiIHRhcmdldD0iYWxsIi8+LS0+CisgICAgPGFudCBkaXI9ImFubm90YXRpb25zIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJlamJfYW5ub3RhdGlvbnMiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxhbnQgZGlyPSJtYXBwaW5nL2oydy9zaWduYXR1cmUiIHRhcmdldD0iYWxsIi8+IDwhLS0gMiB0ZXN0cyAtLT4KICAgICAgICAgPGFudCBkaXI9Imdvb2dsZSIgdGFyZ2V0PSJhbGwiLz4gPCEtLSAxIHRlc3QgLS0+CiAgICAgICAgIDxhbnQgZGlyPSJnZl9kZC9lbmRwb2ludF9hZGRyZXNzX3VyaSIgdGFyZ2V0PSJhbGwiLz4gPCEtLSAxIHRlc3QgLS0+CkBAIC04NywyNCArODcsMjQgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iPgogICAgICAgICA8ZGVsZXRlPgotICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Jhc2VkaXJ9IiAKKyAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtiYXNlZGlyfSIKICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVzPSIqKi5vdXRwdXQsIGNvdW50LnR4dCIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICAgICAgPGFudCBkaXI9Imdvb2dsZSIgdGFyZ2V0PSJjbGVhbiIvPgogICAgICAgICA8YW50IGRpcj0ieHNkYW55IiB0YXJnZXQ9ImNsZWFuIi8+CiAgICAgICAgIDxhbnQgZGlyPSJtYXBwaW5nL2oydy9zaWduYXR1cmUiIHRhcmdldD0iY2xlYW4iLz4KICAgICAgICAgPGFudCBkaXI9IndlYnN0dWJfcHJvcGVydGllcyIgdGFyZ2V0PSJjbGVhbiIvPgotICAgICAgICA8YW50IGRpcj0iZmlsdGVyX3VybGhhbmRsaW5nIiB0YXJnZXQ9ImNsZWFuIi8+ICAgICAgICAKKyAgICAgICAgPGFudCBkaXI9ImZpbHRlcl91cmxoYW5kbGluZyIgdGFyZ2V0PSJjbGVhbiIvPgogICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPgotCQlVc2FnZToKLQkJCWFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgd2Vic2VydmljZSB0ZXN0cykKKyAgICA8ZWNobz4KKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyBhbGwgdGhlIHdlYnNlcnZpY2UgdGVzdHMpCiAKLQkJCWFudCBnb29nbGUgKEV4ZWN1dGVzIHRoZSBnb29nbGUgdGVzdHMpCi0JCQlhbnQgeHNkYW55IChFeGVjdXRlcyB0aGUgeHNkYW55IHRlc3RzKQotCTwvZWNobz4KKyAgICAgICAgICAgIGFudCBnb29nbGUgKEV4ZWN1dGVzIHRoZSBnb29nbGUgdGVzdHMpCisgICAgICAgICAgICBhbnQgeHNkYW55IChFeGVjdXRlcyB0aGUgeHNkYW55IHRlc3RzKQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9jb21tb24vdGFyZ2V0cy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2NvbW1vbi90YXJnZXRzLnhtbAppbmRleCBlN2YyMTFlLi5kNmRlYTUzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2NvbW1vbi90YXJnZXRzLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2NvbW1vbi90YXJnZXRzLnhtbApAQCAtODQsMTQgKzg0LDE0IEBACiAgIDwvdGFyZ2V0PgogCiAKLSAKIAogCi0gIAorCisKICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgPgogICAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGR9IiAvPgogICAgICAgPGRlbGV0ZSBkaXI9IiR7ZW52LkFQU19IT01FfS9idWlsZCIgLz4KLSAgICAgIDxkZWxldGUgZGlyPSIke2Rpc3R9IiAvPiAgICAKKyAgICAgIDxkZWxldGUgZGlyPSIke2Rpc3R9IiAvPgogICAgICAgPGRlbGV0ZSBkaXI9IiR7YXNzZW1ibGV9IiAvPgogICAgICAgPGRlbGV0ZSBkaXI9IiR7YXNzZW1ibGUuZGlyfSIgLz4KICAgICAgIDxkZWxldGUgZmlsZT0iJHtlYXIubmFtZX0iIC8+CkBAIC0xOTEsNyArMTkxLDcgQEAKICAgICAgICAgICBvbmVycm9yPSJhYm9ydCIgPgogICAgICAgICAgIDx0cmFuc2FjdGlvbiBzcmM9IiR7c3FsLnNjcmlwdH0iLz4KICAgICAgIDwvc3FsPgotICA8L3RhcmdldD4gIAorICA8L3RhcmdldD4KIAogICA8dGFyZ2V0IG5hbWU9ImRlbGV0ZS1kYiIKICAgICAgIGRlc2NyaXB0aW9uPSJEZWxldGVzIHRoZSBkYXRhYmFzZSB0YWJsZXMuIiA+CkBAIC0yMjEsMzkgKzIyMSwzOSBAQAogICAgICAgICAgIDxlcXVhbHMgYXJnMT0iJHtkYi5waW5nLnJlc3VsdH0iIGFyZzI9IjAiIC8+CiAgICAgICA8L2NvbmRpdGlvbj4KICAgPC90YXJnZXQ+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0ic3RhcnQtZGIiCiAgICAgICB1bmxlc3M9ImRiLnJ1bm5pbmciCiAgICAgICBkZXNjcmlwdGlvbj0iU3RhcnRzIHRoZSBEZXJieSBkYXRhYnNlIHNlcnZlci4iCiAgICAgICBkZXBlbmRzPSJwaW5nLWRiIj4KLSAgCQkJCQorCiAgICAgICA8c3VuLWFwcHNlcnYtYWRtaW4KICAgICAgIGV4cGxpY2l0Y29tbWFuZD0ic3RhcnQtZGF0YWJhc2UiIC8+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9InN0b3AtZGIiCiAgICAgICBkZXNjcmlwdGlvbj0iU3RvcHMgdGhlIERlcmJ5IGRhdGFiYXNlIHNlcnZlci4iCiAgICAgICBkZXBlbmRzPSJwaW5nLWRiIgogICAgICAgaWY9ImRiLnJ1bm5pbmciPgogICAgICAgPHN1bi1hcHBzZXJ2LWFkbWluCiAgICAgICBleHBsaWNpdGNvbW1hbmQ9InN0b3AtZGF0YWJhc2UiIC8+Ci0gIDwvdGFyZ2V0PiAgCi0gIAorICA8L3RhcmdldD4KKwogICA8dGFyZ2V0IG5hbWU9ImFkbWluX2NvbW1hbmRfY29tbW9uIj4KICAgICAgIDxlY2hvIG1lc3NhZ2U9IkRvaW5nIGFkbWluIHRhc2sgJHthZG1pbi5jb21tYW5kfSIvPgotICAgICAgPHN1bi1hcHBzZXJ2LWFkbWluIAorICAgICAgPHN1bi1hcHBzZXJ2LWFkbWluCiAgICAgICBjb21tYW5kPSIke2FkbWluLmNvbW1hbmR9IgotICAgICAgdXNlcj0iJHthZG1pbi51c2VyfSIgCi0gICAgICBwYXNzd29yZGZpbGU9IiR7YWRtaW4ucGFzc3dvcmQuZmlsZX0iIAotICAgICAgaG9zdD0iJHthZG1pbi5ob3N0fSIgCi0gICAgICBwb3J0PSIke2FkbWluLnBvcnR9IiAKKyAgICAgIHVzZXI9IiR7YWRtaW4udXNlcn0iCisgICAgICBwYXNzd29yZGZpbGU9IiR7YWRtaW4ucGFzc3dvcmQuZmlsZX0iCisgICAgICBob3N0PSIke2FkbWluLmhvc3R9IgorICAgICAgcG9ydD0iJHthZG1pbi5wb3J0fSIKICAgICAgIGFzaW5zdGFsbGRpcj0iJHtqMmVlLmhvbWV9IiAvPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtamRiYy1yZXNvdXJjZV9jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhZG1pbl9jb21tYW5kX2NvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiCi0gICAgICAgICAgdmFsdWU9ImNyZWF0ZS1qZGJjLXJlc291cmNlIAorICAgICAgICAgIHZhbHVlPSJjcmVhdGUtamRiYy1yZXNvdXJjZQogICAgICAgICAgIC0tY29ubmVjdGlvbnBvb2xpZCAke2NvbnBvb2wubmFtZX0gJHtqZGJjLnJlc291cmNlLm5hbWV9IiAvPgogICAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZG9jbGl0L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2RvY2xpdC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGU4NmYwMDUuLmU5ZmYxMTMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZG9jbGl0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9kb2NsaXQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJkb2NsaXQiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9kb2NsaXQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9kb2NsaXQvYnVpbGQueG1sCmluZGV4IDdiMzFlZGYuLjZjNDVhMDYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZG9jbGl0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2RvY2xpdC9idWlsZC54bWwKQEAgLTMzLDkgKzMzLDkgQEAKIAogCiAgIDx0YXJnZXQgbmFtZT0icnVuLndzY29tcGlsZSI+Ci0JPGV4ZWMgZXhlY3V0YWJsZT0iJHtXU0NPTVBJTEV9IiBmYWlsb25lcnJvcj0idHJ1ZSIgPgotICAgICAgICA8YXJnIGxpbmU9Ii1zb3VyY2UgMS4xLjIgJHt3c2NvbXBpbGUuY29tbWFuZH0iIC8+ICAgICAgICAKLQk8L2V4ZWM+CisgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtXU0NPTVBJTEV9IiBmYWlsb25lcnJvcj0idHJ1ZSIgPgorICAgICAgICA8YXJnIGxpbmU9Ii1zb3VyY2UgMS4xLjIgJHt3c2NvbXBpbGUuY29tbWFuZH0iIC8+CisgICAgPC9leGVjPgogICA8L3RhcmdldD4KIAogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9IiI+CkBAIC01MiwxNiArNTIsMTYgQEAKICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZSIgZGVwZW5kcz0iaW5pdC1jb21tb24sIGJ1aWxkLCBjb21waWxlIj4KICAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvd3NkbCIKICAgICAgIGZpbGU9IlNpbXBsZVRlc3Qud3NkbCIvPgotICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgCi0JIGZpbGU9IkRvY0xpdE1hcHBpbmcueG1sIi8+CisgICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgorICAgICBmaWxlPSJEb2NMaXRNYXBwaW5nLnhtbCIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZWpiLWphci1jb21tb24iPgotICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICB2YWx1ZT0iRG9jTGl0TWFwcGluZy54bWwsTUVUQS1JTkYvd3NkbC8qKixkb2NsaXQvKi5jbGFzcyIgLz4KIAogICAgIDwvYW50Y2FsbD4KLSAgPC90YXJnZXQ+IAorICA8L3RhcmdldD4KIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktamFyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNzUsMTkgKzc1LDE5IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWphci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gIAorICAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0id3Njb21waWxlLWVqYiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxta2RpciBkaXI9Im91dHB1dCIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLndzY29tcGlsZSI+Ci0gICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiIAorICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIgogICAgICAgIHZhbHVlPSItaW1wb3J0IC1rZWVwIC1kIG91dHB1dCAtcyBvdXRwdXQgLWNsYXNzcGF0aCAuIHdzY29tcGlsZV9jb25maWcueG1sIi8+CiAgICAgPC9hbnRjYWxsPgogICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9kb2NsaXQiPgotICAgICAgIDxmaWxlc2V0IGRpcj0ib3V0cHV0L2RvY2xpdCIgCisgICAgICAgPGZpbGVzZXQgZGlyPSJvdXRwdXQvZG9jbGl0IgogICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJTaW1wbGVUZXN0LmNsYXNzIi8+CiAgICAgPC9jb3B5PgogICAgIDxkZWxldGUgZGlyPSJvdXRwdXQiLz4KQEAgLTk4LDIzICs5OCwyMyBAQAogICAgIDxta2RpciBkaXI9Im91dHB1dCIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLndzY29tcGlsZSI+CiAgICAgICA8IS0tIHVzZSBtb2RlbCAtLT4KLSAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIgCi0gICAgICAgdmFsdWU9Ii1nZW4gLWNwIC4gLWtlZXAgLWQgb3V0cHV0IC1YZGVidWdtb2RlbDphbnlScGNNb2RlbC50eHQgLW1vZGVsIERvY0xpdE1hcHBpbmcueG1sIHdzY29tcGlsZV9jb25maWcueG1sIi8+IAorICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIgorICAgICAgIHZhbHVlPSItZ2VuIC1jcCAuIC1rZWVwIC1kIG91dHB1dCAtWGRlYnVnbW9kZWw6YW55UnBjTW9kZWwudHh0IC1tb2RlbCBEb2NMaXRNYXBwaW5nLnhtbCB3c2NvbXBpbGVfY29uZmlnLnhtbCIvPgogCiAgICAgICA8IS0tIHVzZSBtYXBwaW5nIC0tPgotPCEtLSAKLSAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIgCi0gICAgICAgdmFsdWU9Ii1nZW4gLWNwIC4gLWtlZXAgLWQgb3V0cHV0IC1YZGVidWdtb2RlbDphbnlScGNNb2RlbC50eHQgLW1hcHBpbmcgUnBjTGl0TWFwcGluZy54bWwgd3Njb21waWxlX2NvbmZpZy54bWwiLz4gCis8IS0tCisgICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiCisgICAgICAgdmFsdWU9Ii1nZW4gLWNwIC4gLWtlZXAgLWQgb3V0cHV0IC1YZGVidWdtb2RlbDphbnlScGNNb2RlbC50eHQgLW1hcHBpbmcgUnBjTGl0TWFwcGluZy54bWwgd3Njb21waWxlX2NvbmZpZy54bWwiLz4KIC0tPgogICAgIDwvYW50Y2FsbD4KICAgICA8ZGVsZXRlIGRpcj0ib3V0cHV0Ii8+CiAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+Ci0JCVVzYWdlOgotCQkJYW50IGFsbCAoRXhlY3V0ZXMgdGhlIFdlYlNlcnZpY2VzIHRlc3QpCi0JCQlhbnQgY2xlYW4gCi0JPC9lY2hvPgorICAgIDxlY2hvPgorICAgICAgICBVc2FnZToKKyAgICAgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIHRoZSBXZWJTZXJ2aWNlcyB0ZXN0KQorICAgICAgICAgICAgYW50IGNsZWFuCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9kb2NsaXQvZG9jbGl0L1NpbXBsZVRlc3RJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2RvY2xpdC9kb2NsaXQvU2ltcGxlVGVzdEltcGwuamF2YQppbmRleCBlNmUxMDBlLi4zNjU5N2JiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2RvY2xpdC9kb2NsaXQvU2ltcGxlVGVzdEltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2RvY2xpdC9kb2NsaXQvU2ltcGxlVGVzdEltcGwuamF2YQpAQCAtMTUsNyArMTUsNyBAQAogICovCiAKIC8qCi0gKiBAKCMpU2ltcGxlVGVzdEltcGwuamF2YQkxLjMgMDIvMDQvMDUKKyAqIEAoIylTaW1wbGVUZXN0SW1wbC5qYXZhICAgIDEuMyAwMi8wNC8wNQogICovCiAKIHBhY2thZ2UgZG9jbGl0OwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9kb2NsaXQvd3Njb21waWxlX2NvbmZpZy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2RvY2xpdC93c2NvbXBpbGVfY29uZmlnLnhtbAppbmRleCBkYjA0NTFlLi5hN2NlZTAyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2RvY2xpdC93c2NvbXBpbGVfY29uZmlnLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2RvY2xpdC93c2NvbXBpbGVfY29uZmlnLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8Y29uZmlndXJhdGlvbgogICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4LXJwYy9yaS9jb25maWciPgotICA8d3NkbCAKKyAgPHdzZGwKICAgICAgIGxvY2F0aW9uPSJTaW1wbGVUZXN0LndzZGwiCiAgICAgICBwYWNrYWdlTmFtZT0iZG9jbGl0Ii8+CiA8L2NvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9hbm5vdGF0aW9ucy1jb21tb24ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvYW5ub3RhdGlvbnMtY29tbW9uLnhtbAppbmRleCA3NDNhNDE4Li44MmU2MTcyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9hbm5vdGF0aW9ucy1jb21tb24ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2Fubm90YXRpb25zLWNvbW1vbi54bWwKQEAgLTE3LDE2ICsxNywxNiBAQAogLS0+CiAKIDxwcm9wZXJ0eSBlbnZpcm9ubWVudD0iZW52Ii8+Ci08cHJvcGVydHkgZmlsZT0iJHtlbnYuQVBTX0hPTUV9L2NvbmZpZy5wcm9wZXJ0aWVzIi8+ICAgCis8cHJvcGVydHkgZmlsZT0iJHtlbnYuQVBTX0hPTUV9L2NvbmZpZy5wcm9wZXJ0aWVzIi8+CiAKIDx0YXJnZXQgbmFtZT0idGVzdC1hbGwiIGRlcGVuZHM9ImNsZWFuIj4KICAgICA8YmFzZW5hbWUgZmlsZT0iJHtzcmMtbmFtZX0iIHByb3BlcnR5PSJzZXJ2ZXIiIHN1ZmZpeD0iLmphdmEiLz4KICAgICA8ZGlybmFtZSBmaWxlPSIke3NyYy1uYW1lfSIgcHJvcGVydHk9ImRpcmVjdG9yeSIvPgogICAgIDxlY2hvIG1lc3NhZ2U9IlN0YXJ0aW5nIFRlc3QgJHtkaXJlY3Rvcnl9Ii8+Ci0gICAgPGJhc2VuYW1lIGZpbGU9IiR7ZGlyZWN0b3J5fSIgcHJvcGVydHk9InBrZy1uYW1lIi8+IAorICAgIDxiYXNlbmFtZSBmaWxlPSIke2RpcmVjdG9yeX0iIHByb3BlcnR5PSJwa2ctbmFtZSIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95Ij4KLQk8cGFyYW0gbmFtZT0icGtnLW5hbWUiIHZhbHVlPSIke3BrZy1uYW1lfSIvPgotICAgIDwvYW50Y2FsbD4gCisgICAgPHBhcmFtIG5hbWU9InBrZy1uYW1lIiB2YWx1ZT0iJHtwa2ctbmFtZX0iLz4KKyAgICA8L2FudGNhbGw+CiAgICAgPGNvbmRpdGlvbiBwcm9wZXJ0eT0iZGVwbG95X3N1Y2NlZWRlZCI+CiAgICAgICAgIDxhdmFpbGFibGUgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvYXV0b2RlcGxveS8ke3NlcnZlcn0uamFyX2RlcGxveWVkIi8+CiAgICAgPC9jb25kaXRpb24+CkBAIC00MiwxMSArNDIsMTEgQEAKIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImNsZWFuIj4KLSAgICA8ZWNobyBtZXNzYWdlPSJDbGVhbiBmcm9tICR7YW50LmZpbGV9Ii8+IAorICAgIDxlY2hvIG1lc3NhZ2U9IkNsZWFuIGZyb20gJHthbnQuZmlsZX0iLz4KICAgICA8ZGVsZXRlIGRpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzIi8+Ci0gICAgPGRlbGV0ZSBkaXI9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvYXJjaGl2ZSIvPiAgICAKLSAgICA8bWtkaXIgZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMiLz4gICAKLSAgICA8bWtkaXIgZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2FyY2hpdmUiLz4gICAKKyAgICA8ZGVsZXRlIGRpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9hcmNoaXZlIi8+CisgICAgPG1rZGlyIGRpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzIi8+CisgICAgPG1rZGlyIGRpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9hcmNoaXZlIi8+CiA8L3RhcmdldD4KICA8cGF0aCBpZD0iY2xhc3NwYXRoIj4KIApAQCAtNjgsMTQgKzY4LDE0IEBACiAKIDx0YXJnZXQgbmFtZT0idGVzdC1jb21waWxlIj4KICAgICA8ZWNobyBtZXNzYWdlPSJDb21waWxpbmcgaW50byAke3BrZy1uYW1lfS8ke3NlcnZlcn0uY2xhc3MiLz4KLSAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMiIAorICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3NlcyIKICAgICAgICAgaW5jbHVkZXM9IiR7cGtnLW5hbWV9LyouamF2YSI+CiAgPGNsYXNzcGF0aCByZWZpZD0iY2xhc3NwYXRoIi8+CiA8L2phdmFjPgogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0iY29tcGlsZS1jbGllbnQiPgotICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3NlcyIgCisgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzIgogICAgICAgICBpbmNsdWRlcz0iJHtjbGllbnQtc3JjLW5hbWV9Ij4KICAgICAgICAgPGNsYXNzcGF0aCByZWZpZD0iY2xhc3NwYXRoIi8+CiAgICAgPC9qYXZhYz4KQEAgLTg0LDE1ICs4NCwxNSBAQAogPHRhcmdldCBuYW1lPSJidWlsZCI+CiAgICAgPGJhc2VuYW1lIGZpbGU9IiR7c3JjLW5hbWV9IiBwcm9wZXJ0eT0ic2VydmVyIiBzdWZmaXg9Ii5qYXZhIi8+CiAgICAgPGRpcm5hbWUgZmlsZT0iJHtzcmMtbmFtZX0iIHByb3BlcnR5PSJkaXJlY3RvcnkiLz4KLSAgICA8YmFzZW5hbWUgZmlsZT0iJHtkaXJlY3Rvcnl9IiBwcm9wZXJ0eT0icGtnLW5hbWUiLz4gCisgICAgPGJhc2VuYW1lIGZpbGU9IiR7ZGlyZWN0b3J5fSIgcHJvcGVydHk9InBrZy1uYW1lIi8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJ0ZXN0LWNvbXBpbGUiLz4KICAgICA8ZWNobyBtZXNzYWdlPSJCdWlsZGluZyB3aXRoIHBhY2thZ2UgJHtwa2ctbmFtZX0iLz4KICAgICA8amFyIGRlc3RmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9hdXRvZGVwbG95LyR7c2VydmVyfS5qYXIiCiAgICAgICAgIGJhc2VkaXI9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3NlcyIKICAgICAgICAgaW5jbHVkZXM9IiR7cGtnLW5hbWV9LyoqIj4KLQk8bWV0YWluZiBkaXI9IiR7cGtnLW5hbWV9IgotCQlpbmNsdWRlcz0iKi54bWwgKiovKi53c2RsICoqLyoueHNkIi8+Ci0gICAgPC9qYXI+ICAgICAgICAgICAgCisgICAgPG1ldGFpbmYgZGlyPSIke3BrZy1uYW1lfSIKKyAgICAgICAgaW5jbHVkZXM9IioueG1sICoqLyoud3NkbCAqKi8qLnhzZCIvPgorICAgIDwvamFyPgogPC90YXJnZXQ+CiAKIDx0YXJnZXQgbmFtZT0iZGVwbG95Ij4KQEAgLTEwOSw3ICsxMDksNyBAQAogPHRhcmdldCBuYW1lPSJ1bmRlcGxveSI+CiAgICAgPGJhc2VuYW1lIGZpbGU9IiR7c3JjLW5hbWV9IiBwcm9wZXJ0eT0ic2VydmVyIiBzdWZmaXg9Ii5qYXZhIi8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJhdXRvdW5kZXBsb3ktZmlsZSI+Ci0JPHBhcmFtIG5hbWU9ImZpbGVuYW1lIiB2YWx1ZT0iJHtzZXJ2ZXJ9LmphciIvPgorICAgIDxwYXJhbSBuYW1lPSJmaWxlbmFtZSIgdmFsdWU9IiR7c2VydmVyfS5qYXIiLz4KICAgICA8L2FudGNhbGw+CiAgICAgPGNvbmRpdGlvbiBwcm9wZXJ0eT0idW5kZXBsb3lfc3VjY2VlZGVkIj4KICAgICAgICAgPGF2YWlsYWJsZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9hdXRvZGVwbG95LyR7c2VydmVyfS5qYXJfdW5kZXBsb3llZCIvPgpAQCAtMTMyLDcgKzEzMiw3IEBACiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJyZXBvcnQiIGRlcGVuZHM9ImludGVybmFsLXJlcG9ydC1zdWNjZXNzLCBpbnRlcm5hbC1yZXBvcnQtZmFpbHVyZSI+Ci0gICAgPGRlbGV0ZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9hdXRvZGVwbG95LyR7Y2xhc3MtbmFtZX1fKiIvPiAgICAKKyAgICA8ZGVsZXRlIGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2F1dG9kZXBsb3kvJHtjbGFzcy1uYW1lfV8qIi8+CiA8L3RhcmdldD4KIAogPHRhcmdldCBuYW1lPSJydW4iPgpAQCAtMTQ1LDcgKzE0NSw3IEBACiAgICAgPC9jb25kaXRpb24+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJwcmVwYXJlLWNsaWVudCIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0iaW50ZXJuYWwtcnVuIi8+Ci08IS0tcmVzdG9yZSB0aGUgdG9rZW5zIGJhY2sgaW4gZmlsZS0tPiAKKzwhLS1yZXN0b3JlIHRoZSB0b2tlbnMgYmFjayBpbiBmaWxlLS0+CiAgICAgICAgICA8cmVwbGFjZSBmaWxlPSJjbGllbnQvQ2xpZW50LmphdmEiIHRva2VuPSIke2h0dHAuaG9zdH0iIHZhbHVlPSJIVFRQX0hPU1QiLz4KICAgICAgICAgIDxyZXBsYWNlIGZpbGU9ImNsaWVudC9DbGllbnQuamF2YSIgdG9rZW49IiR7aHR0cC5wb3J0fSIgdmFsdWU9IkhUVFBfUE9SVCIvPgogPC90YXJnZXQ+CkBAIC0xNTksNyArMTU5LDcgQEAKIDwvdGFyZ2V0PgogCiA8dGFyZ2V0IG5hbWU9ImNvbmZpZ3VyYWJsZS13c2RsLWltcG9ydCI+Ci0gICAgPGVjaG8gbWVzc2FnZT0id3NpbXBvcnRpbmcgJHtwcm90b2NvbH06Ly8ke2hvc3QtbmFtZX06JHtob3N0LXBvcnR9LyR7c2VydmVyfVNlcnZpY2UvJHtwb3J0fT9XU0RMOyBzcGVjaWFsIGFyZ3MgYXJlICR7d3NpbXBvcnQtc3BlY2lhbC1hcmdzfSIvPiAgCisgICAgPGVjaG8gbWVzc2FnZT0id3NpbXBvcnRpbmcgJHtwcm90b2NvbH06Ly8ke2hvc3QtbmFtZX06JHtob3N0LXBvcnR9LyR7c2VydmVyfVNlcnZpY2UvJHtwb3J0fT9XU0RMOyBzcGVjaWFsIGFyZ3MgYXJlICR7d3NpbXBvcnQtc3BlY2lhbC1hcmdzfSIvPgogICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL3dzaW1wb3J0Ij4KICAgICAgICAgPGFyZyBsaW5lPSIta2VlcCAtZCAke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMgJHtwcm90b2NvbH06Ly8ke2hvc3QtbmFtZX06JHtob3N0LXBvcnR9LyR7c2VydmVyfVNlcnZpY2UvJHtwb3J0fT9XU0RMIi8+CiAgICAgPC9leGVjPgpAQCAtMTY5LDEzICsxNjksMTMgQEAKICAgICA8IS0tYmFzZW5hbWUgZmlsZT0iJHtzZXJ2ZXJ9IiBwcm9wZXJ0eT0icG9ydCIgc3VmZml4PSJFSkIiLy0tPgogICAgIDxiYXNlbmFtZSBmaWxlPSIke3NlcnZlcn0iIHByb3BlcnR5PSJwb3J0Ii8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3c2RsLWltcG9ydCI+Ci0JPHBhcmFtIG5hbWU9InNlcnZlciIgdmFsdWU9IiR7c2VydmVyfSIvPgotCTxwYXJhbSBuYW1lPSJwb3J0IiB2YWx1ZT0iJHtwb3J0fSIvPgorICAgIDxwYXJhbSBuYW1lPSJzZXJ2ZXIiIHZhbHVlPSIke3NlcnZlcn0iLz4KKyAgICA8cGFyYW0gbmFtZT0icG9ydCIgdmFsdWU9IiR7cG9ydH0iLz4KICAgICA8L2FudGNhbGw+CiAKICAgICAgIDxyZXBsYWNlIGZpbGU9ImNsaWVudC9DbGllbnQuamF2YSIgdmFsdWU9IiR7aHR0cC5ob3N0fSIgdG9rZW49IkhUVFBfSE9TVCIvPgogICAgICAgPHJlcGxhY2UgZmlsZT0iY2xpZW50L0NsaWVudC5qYXZhIiB2YWx1ZT0iJHtodHRwLnBvcnR9IiB0b2tlbj0iSFRUUF9QT1JUIi8+Ci0gICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNsaWVudCIvPiAgIAorICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jbGllbnQiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuamFyLWNsaWVudC11dGlscyIvPgogPC90YXJnZXQ+CiAKQEAgLTE4NiwxMSArMTg2LDExIEBACiA8dGFyZ2V0IG5hbWU9ImludGVybmFsLXJ1biIgaWY9ImRlcGxveV9zdWNjZWVkZWQiPgogICAgIDxiYXNlbmFtZSBmaWxlPSIke2NsaWVudC1zcmMtbmFtZX0iIHByb3BlcnR5PSJjbGllbnQiIHN1ZmZpeD0iLmphdmEiLz4KICAgICA8ZGlybmFtZSBmaWxlPSIke2NsaWVudC1zcmMtbmFtZX0iIHByb3BlcnR5PSJjbGllbnQtZGlyZWN0b3J5Ii8+Ci0gICAgPGJhc2VuYW1lIGZpbGU9IiR7Y2xpZW50LWRpcmVjdG9yeX0iIHByb3BlcnR5PSJjbGllbnQtcGtnLW5hbWUiLz4gCisgICAgPGJhc2VuYW1lIGZpbGU9IiR7Y2xpZW50LWRpcmVjdG9yeX0iIHByb3BlcnR5PSJjbGllbnQtcGtnLW5hbWUiLz4KICAgICA8cHJvcGVydHkgbmFtZT0iY2xpZW50LWNsYXNzLW5hbWUiIHZhbHVlPSIke2NsaWVudC1wa2ctbmFtZX0vJHtjbGllbnR9LmNsYXNzIi8+CiAgICAgPGVjaG8gbWVzc2FnZT0iUnVubmluZyBhcHBjbGllbnQgd2l0aCAke2NsaWVudC1wa2ctbmFtZX0uJHtjbGllbnR9ICR7YXBwLWNsaWVudC1wYXJhbWV0ZXJzfSAke2FwcC1jbGllbnQtZXh0cmEtcGFyYW1ldGVyc30iLz4KICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi9hcHBjbGllbnQiIGRpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzIj4KLSAgICAgICAgPGFyZyBsaW5lPSIke2NsaWVudC1wa2ctbmFtZX0uJHtjbGllbnR9ICR7YXBwLWNsaWVudC1wYXJhbWV0ZXJzfSAke2FwcC1jbGllbnQtZXh0cmEtcGFyYW1ldGVyc30iLz4gICAgCisgICAgICAgIDxhcmcgbGluZT0iJHtjbGllbnQtcGtnLW5hbWV9LiR7Y2xpZW50fSAke2FwcC1jbGllbnQtcGFyYW1ldGVyc30gJHthcHAtY2xpZW50LWV4dHJhLXBhcmFtZXRlcnN9Ii8+CiAgICAgPC9leGVjPgogPC90YXJnZXQ+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2FzeW5jL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9hc3luYy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGU5MDk2MzYuLmM0OWU0MGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2FzeW5jL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvYXN5bmMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsOCArMTUsOCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iYXN5bmMiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9hc3luYy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9hc3luYy9idWlsZC54bWwKaW5kZXggZDNlM2EyOC4uZTAyNjEzZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvYXN5bmMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2FzeW5jL2J1aWxkLnhtbApAQCAtNjAsOCArNjAsOCBAQAogICAgICAgICA8cGFyYW0gbmFtZT0id3NpbXBvcnQuYXJncyIKICAgICAgICAgICAgICAgIHZhbHVlPSIta2VlcCAtYiBjdXN0b20tY2xpZW50LnhtbCAtZCAke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQgaHR0cDovLyR7aHR0cC5ob3N0fToke2h0dHAucG9ydH0vQWRkTnVtYmVyc0ltcGxTZXJ2aWNlL0FkZE51bWJlcnNJbXBsP1dTREwiLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIgCi0gICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2oyZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXJ0Lmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy10b29scy5qYXIiIAorICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9qMmVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy1ydC5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtdG9vbHMuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9ImNsaWVudC8qKiIvPgogICAgIDwvdGFyZ2V0PgogCkBAIC03MiwxMyArNzIsMTMgQEAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamFyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW5jbGllbnQiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4tY2xpZW50Ij4KICAgICAgICAgPHBhcmFtIG5hbWU9ImNsaWVudC1jbGFzcyIgdmFsdWU9ImNsaWVudC5DbGllbnQiLz4KICAgICAgICAgPHBhcmFtIG5hbWU9Im90aGVyLWFyZ3MiIHZhbHVlPSJhc3luYy1lamItdGVzdCIvPgogICAgICAgPC9hbnRjYWxsPgotICAgICAgPCEtLXJlc3RvcmUgdGhlIHRva2VucyBiYWNrIGluIGZpbGUtLT4gCisgICAgICA8IS0tcmVzdG9yZSB0aGUgdG9rZW5zIGJhY2sgaW4gZmlsZS0tPgogICAgICAgPHJlcGxhY2UgZmlsZT0iY3VzdG9tLWNsaWVudC54bWwiIHRva2VuPSIke2h0dHAuaG9zdH0iIHZhbHVlPSJIVFRQX0hPU1QiLz4KICAgICAgIDxyZXBsYWNlIGZpbGU9ImN1c3RvbS1jbGllbnQueG1sIiB0b2tlbj0iJHtodHRwLnBvcnR9IiB2YWx1ZT0iSFRUUF9QT1JUIi8+CiAgICAgPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9hc3luYy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9hc3luYy9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggYjkyZjM1Yi4uNjZmZThkMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvYXN5bmMvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2FzeW5jL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzcsMjMgKzM3LDIzIEBACiAgICAgICAgIHN0YXRpYyBBZGROdW1iZXJzSW1wbFNlcnZpY2Ugc2VydmljZTsKIAogICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oImFzeW5jLWVqYi1zZXJ2aWNlIik7CisgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oImFzeW5jLWVqYi1zZXJ2aWNlIik7CiAgICAgICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAgICAgICAgICAgY2xpZW50LmRvU3luY1Rlc3QoKTsKICAgICAgICAgICAgIGNsaWVudC5kb0FTeW5jUG9sbFRlc3QoKTsKICAgICAgICAgICAgIGNsaWVudC5kb0FTeW5jQ2FsbEJhY2tUZXN0KCk7Ci0JICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJhc3luYy1lamItc2VydmljZSIpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiYXN5bmMtZWpiLXNlcnZpY2UiKTsKICAgICAgICAgfQogCiAgICAgICAgIHB1YmxpYyB2b2lkIGRvU3luY1Rlc3QoKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIEFkZE51bWJlcnNJbXBsIHBvcnQgPSBzZXJ2aWNlLmdldEFkZE51bWJlcnNJbXBsUG9ydCgpOwogICAgICAgICAgICAgICAgIGludCByZXQgPSBwb3J0LmFkZE51bWJlcnMoMjIyMiwgMTIzNCk7Ci0JCWlmKHJldCE9KDIyMjIrMTIzNCkpIHsKKyAgICAgICAgaWYocmV0IT0oMjIyMisxMjM0KSkgewogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgYWRkIHJlc3VsdCAiICsgcmV0KTsKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImFzeW5jLWVqYi1zZXJ2aWNlLXN5bmMtdGVzdCIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQkJfQorICAgICAgICB9CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJldCk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImFzeW5jLWVqYi1zZXJ2aWNlLXN5bmMtdGVzdCIsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CkBAIC03MCwxMSArNzAsMTEgQEAKICAgICAgICAgICAgICAgICBUaHJlYWQuc2xlZXAgKDIwMDApOwogICAgICAgICAgICAgICAgIEFkZE51bWJlcnNSZXNwb25zZSBvdXRwdXQgPSByZXNwLmdldCgpOwogICAgICAgICAgICAgICAgIGludCByZXQgPSBvdXRwdXQuZ2V0UmV0dXJuKCk7Ci0JCWlmKHJldCE9KDEyMzQrNTY3OCkpIHsKKyAgICAgICAgaWYocmV0IT0oMTIzNCs1Njc4KSkgewogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgYWRkIHJlc3VsdCAiICsgcmV0KTsKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImFzeW5jLWVqYi1zZXJ2aWNlLXBvbGwtdGVzdCIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQkJfQorICAgICAgICB9CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJldCk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImFzeW5jLWVqYi1zZXJ2aWNlLXBvbGwtdGVzdCIsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CkBAIC05MiwxMSArOTIsMTEgQEAKICAgICAgICAgICAgICAgICBUaHJlYWQuc2xlZXAgKDIwMDApOwogICAgICAgICAgICAgICAgIEFkZE51bWJlcnNSZXNwb25zZSBvdXRwdXQgPSBjYmguZ2V0UmVzcG9uc2UgKCk7CiAgICAgICAgICAgICAgICAgaW50IHJldCA9IG91dHB1dC5nZXRSZXR1cm4oKTsKLQkJaWYocmV0IT0oOTg3Nis1NDMyKSkgeworICAgICAgICBpZihyZXQhPSg5ODc2KzU0MzIpKSB7CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBhZGQgcmVzdWx0ICIgKyByZXQpOwogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiYXN5bmMtZWpiLXNlcnZpY2UtY2FsbGJhY2toYW5kbGVyLXRlc3QiLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0JCX0KKyAgICAgICAgfQogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXQpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJhc3luYy1lamItc2VydmljZS1jYWxsYmFja2hhbmRsZXItdGVzdCIsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9hc3luYy9jdXN0b20tY2xpZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2FzeW5jL2N1c3RvbS1jbGllbnQueG1sCmluZGV4IDYzM2Y3MTIuLjBlM2FjYTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2FzeW5jL2N1c3RvbS1jbGllbnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2FzeW5jL2N1c3RvbS1jbGllbnQueG1sCkBAIC0yMSw3ICsyMSw3IEBACiAgICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKICAgICB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKICAgICB3c2RsTG9jYXRpb249Imh0dHA6Ly9IVFRQX0hPU1Q6SFRUUF9QT1JUL0FkZE51bWJlcnNJbXBsU2VydmljZS9BZGROdW1iZXJzSW1wbD9XU0RMIgotICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXh3cyI+ICAgIAorICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXh3cyI+CiAgICAgPGJpbmRpbmdzIG5vZGU9Im5zMTpkZWZpbml0aW9ucyIgeG1sbnM6bnMxPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+CiAgICAgICAgIDxwYWNrYWdlIG5hbWU9ImNsaWVudCIvPgogICAgICAgICA8ZW5hYmxlQXN5bmNNYXBwaW5nPnRydWU8L2VuYWJsZUFzeW5jTWFwcGluZz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2FzeW5jZWpiY2xpZW50L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2FzeW5jZWpiY2xpZW50L2J1aWxkLnhtbAppbmRleCBkMDY2OWRlLi4xYzliOWZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9hc3luY2VqYmNsaWVudC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvYXN5bmNlamJjbGllbnQvYnVpbGQueG1sCkBAIC0yMiw3ICsyMiw3IEBACiBdPgogCiA8cHJvamVjdCBuYW1lPSJIZWxsbyIgZGVmYXVsdD0iY29yZSIgYmFzZWRpcj0iLiI+Ci0gCisKIAogICAgICZjb21tb25CdWlsZDsKICAgICA8cHJvcGVydHkgbmFtZT0ic3JjLW5hbWUiIHZhbHVlPSJlbmRwb2ludC9XZWJTZXJ2aWNlRUpCLmphdmEiLz4KQEAgLTMyLDE4ICszMiwxOCBAQAogCiAKICAgICA8dGFyZ2V0IG5hbWU9InByaXZhdGUtdW5kZXBsb3kiPgotCTxhbnRjYWxsIHRhcmdldD0iYXV0b3VuZGVwbG95LWZpbGUiPgotCQk8cGFyYW0gbmFtZT0iZmlsZW5hbWUiIHZhbHVlPSJFamJDbGllbnQuamFyIi8+Ci0JPC9hbnRjYWxsPgotCTxhbnRjYWxsIHRhcmdldD0iYXV0b3VuZGVwbG95LWZpbGUiPgotCQk8cGFyYW0gbmFtZT0iZmlsZW5hbWUiIHZhbHVlPSJXZWJTZXJ2aWNlRUpCLmphciIvPgotCTwvYW50Y2FsbD4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImF1dG91bmRlcGxveS1maWxlIj4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImZpbGVuYW1lIiB2YWx1ZT0iRWpiQ2xpZW50LmphciIvPgorICAgIDwvYW50Y2FsbD4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImF1dG91bmRlcGxveS1maWxlIj4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImZpbGVuYW1lIiB2YWx1ZT0iV2ViU2VydmljZUVKQi5qYXIiLz4KKyAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKIAogICAgIDx0YXJnZXQgbmFtZT0icHJpdmF0ZS1ydW4iPgotCTxhbnRjYWxsIHRhcmdldD0iY2xlYW4iLz4KLSAgICAgICAgPGVjaG8gbWVzc2FnZT0id3NpbXBvcnRpbmcgaHR0cDovLyR7aHR0cC5ob3N0fToke2h0dHAucG9ydH0vV2ViU2VydmljZUVKQlNlcnZpY2UvV2ViU2VydmljZUVKQj9XU0RMIi8+ICAKKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuIi8+CisgICAgICAgIDxlY2hvIG1lc3NhZ2U9IndzaW1wb3J0aW5nIGh0dHA6Ly8ke2h0dHAuaG9zdH06JHtodHRwLnBvcnR9L1dlYlNlcnZpY2VFSkJTZXJ2aWNlL1dlYlNlcnZpY2VFSkI/V1NETCIvPgogICAgICAgIDxyZXBsYWNlIGZpbGU9ImN1c3RvbS1jbGllbnQueG1sIiB2YWx1ZT0iJHtodHRwLmhvc3R9IiB0b2tlbj0iSFRUUF9IT1NUIi8+CiAgICAgICAgPHJlcGxhY2UgZmlsZT0iY3VzdG9tLWNsaWVudC54bWwiIHZhbHVlPSIke2h0dHAucG9ydH0iIHRva2VuPSJIVFRQX1BPUlQiLz4KICAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vd3NpbXBvcnQiPgpAQCAtNTQsMTAgKzU0LDEwIEBACiAgICAgICAgICAgICA8Y2xhc3NwYXRoIHJlZmlkPSJjbGFzc3BhdGgiLz4KICAgICAgICAgPC9qYXZhYz4KICAgICAgICAgPGphciBkZXN0ZmlsZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvYXV0b2RlcGxveS9FamJDbGllbnQuamFyIgotCSAgICBiYXNlZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMiCi0JICAgIGluY2x1ZGVzPSJlamIvKiosZW5kcG9pbnQvKioiLz4KLQk8d2FpdGZvciBtYXh3YWl0PSIxMDAiIG1heHdhaXR1bml0PSJzZWNvbmQiPgotICAgICAgIAkgICAgPG9yPgorICAgICAgICBiYXNlZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMiCisgICAgICAgIGluY2x1ZGVzPSJlamIvKiosZW5kcG9pbnQvKioiLz4KKyAgICA8d2FpdGZvciBtYXh3YWl0PSIxMDAiIG1heHdhaXR1bml0PSJzZWNvbmQiPgorICAgICAgICAgICAgICAgPG9yPgogICAgICAgICAgICAgICAgIDxhdmFpbGFibGUgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvYXV0b2RlcGxveS9FamJDbGllbnQuamFyX2RlcGxveWVkIi8+CiAgICAgICAgICAgICAgICAgPGF2YWlsYWJsZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9hdXRvZGVwbG95L0VqYkNsaWVudC5qYXJfZGVwbG95RmFpbGVkIi8+CiAgICAgICAgICAgICA8L29yPgpAQCAtNjgsMjAgKzY4LDIwIEBACiAgICAgICAgIDxjb25kaXRpb24gcHJvcGVydHk9ImRlcGxveV9mYWlsZWQiPgogICAgICAgICAgICAgPGF2YWlsYWJsZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9hdXRvZGVwbG95L0VqYkNsaWVudC5qYXJfZGVwbG95RmFpbGVkIi8+CiAgICAgICAgIDwvY29uZGl0aW9uPgotCTxmYWlsIGlmPSJkZXBsb3lfZmFpbGVkIiBtZXNzYWdlPSJEZXBsb3ltZW50IGZhaWxlZCIvPgorICAgIDxmYWlsIGlmPSJkZXBsb3lfZmFpbGVkIiBtZXNzYWdlPSJEZXBsb3ltZW50IGZhaWxlZCIvPgogICAgICAgICA8YmFzZW5hbWUgZmlsZT0iJHtjbGllbnQtc3JjLW5hbWV9IiBwcm9wZXJ0eT0iY2xpZW50IiBzdWZmaXg9Ii5qYXZhIi8+CiAgICAgICAgIDxkaXJuYW1lIGZpbGU9IiR7Y2xpZW50LXNyYy1uYW1lfSIgcHJvcGVydHk9ImNsaWVudC1kaXJlY3RvcnkiLz4KLSAgICAgICAgPGJhc2VuYW1lIGZpbGU9IiR7Y2xpZW50LWRpcmVjdG9yeX0iIHByb3BlcnR5PSJjbGllbnQtcGtnLW5hbWUiLz4gCisgICAgICAgIDxiYXNlbmFtZSBmaWxlPSIke2NsaWVudC1kaXJlY3Rvcnl9IiBwcm9wZXJ0eT0iY2xpZW50LXBrZy1uYW1lIi8+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGllbnQtY2xhc3MtbmFtZSIgdmFsdWU9IiR7Y2xpZW50LXBrZy1uYW1lfS8ke2NsaWVudH0uY2xhc3MiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY2xpZW50Ii8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNsaWVudCIvPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJSdW5uaW5nIGFwcGNsaWVudCB3aXRoICR7Y2xpZW50LXBrZy1uYW1lfS4ke2NsaWVudH0iLz4KICAgICAgICAgPHVuamFyIHNyYz0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIGRlc3Q9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3NlcyIvPgogICAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi9hcHBjbGllbnQiIGRpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzIj4KLSAgICAgICAgICAgIDxhcmcgdmFsdWU9Ii1Eb3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsUG9ydD0ke29yYi5wb3J0fSIvPiAKLSAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7Y2xpZW50LXBrZy1uYW1lfS4ke2NsaWVudH0iLz4gICAgCisgICAgICAgICAgICA8YXJnIHZhbHVlPSItRG9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQ9JHtvcmIucG9ydH0iLz4KKyAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7Y2xpZW50LXBrZy1uYW1lfS4ke2NsaWVudH0iLz4KICAgICAgICAgPC9leGVjPgogCi08IS0tcmVzdG9yZSB0aGUgdG9rZW5zIGJhY2sgaW4gZmlsZS0tPiAKKzwhLS1yZXN0b3JlIHRoZSB0b2tlbnMgYmFjayBpbiBmaWxlLS0+CiAgICAgICAgICA8cmVwbGFjZSBmaWxlPSJjdXN0b20tY2xpZW50LnhtbCIgdG9rZW49IiR7aHR0cC5ob3N0fSIgdmFsdWU9IkhUVFBfSE9TVCIvPgogICAgICAgICAgPHJlcGxhY2UgZmlsZT0iY3VzdG9tLWNsaWVudC54bWwiIHRva2VuPSIke2h0dHAucG9ydH0iIHZhbHVlPSJIVFRQX1BPUlQiLz4KICAgICA8L3RhcmdldD4KQEAgLTkyLDYgKzkyLDYgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0icmVwb3J0LWZhaWx1cmUiPgogICAgICAgICAgICAgPGVjaG8gbWVzc2FnZT0iVGVzdCBGQUlMRUQiLz4KLSAgICA8L3RhcmdldD4gICAJCi0gICAgCisgICAgPC90YXJnZXQ+CisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2FzeW5jZWpiY2xpZW50L2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2FzeW5jZWpiY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQppbmRleCAzNzJmYWNkLi40Y2E5YmE0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9hc3luY2VqYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvYXN5bmNlamJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0xNyw3ICsxNyw3IEBACiBwYWNrYWdlIGNsaWVudDsKIAogaW1wb3J0IGpha2FydGEuZWpiLkVKQjsKLWltcG9ydCBlamIuSGVsbG87IAoraW1wb3J0IGVqYi5IZWxsbzsKIAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuU2ltcGxlUmVwb3J0ZXJBZGFwdGVyOwogCkBAIC0yNywyNSArMjcsMjUgQEAKICAgICAgICAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICAgICAgQEVKQihtYXBwZWROYW1lPSJlamIuSGVsbG8iKQotCXN0YXRpYyBIZWxsbyBoZWxsbzsKKyAgICBzdGF0aWMgSGVsbG8gaGVsbG87CiAKICAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCSAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJhc3luYy1lamItY2xpZW50Iik7CisgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oImFzeW5jLWVqYi1jbGllbnQiKTsKICAgICAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7CiAgICAgICAgICAgICBjbGllbnQuZG9TeW5jVGVzdCgpOwogICAgICAgICAgICAgY2xpZW50LmRvQXN5bmNQb2xsVGVzdCgpOwogICAgICAgICAgICAgY2xpZW50LmRvQXN5bmNDYWxsYmFja1Rlc3QoKTsKLQkgICAgc3RhdC5wcmludFN1bW1hcnkoImFzeW5jLWVqYi1jbGllbnQiKTsKKyAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImFzeW5jLWVqYi1jbGllbnQiKTsKICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBkb1N5bmNUZXN0KCkgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBTdHJpbmcgcmV0ID0gaGVsbG8uaW52b2tlU3luYygiSGVsbG8gVGVzdGVyICEiKTsKLQkJaWYocmV0LmluZGV4T2YoIlNZTkMgQ0FMTCIpID09IC0xKSB7CisgICAgICAgIGlmKHJldC5pbmRleE9mKCJTWU5DIENBTEwiKSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJldCk7CiAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJhc3luYy1zeW5jLWVqYi1jbGllbnQiLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0JCX0KKyAgICAgICAgfQogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXQpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJhc3luYy1zeW5jLWVqYi1jbGllbnQiLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewpAQCAtNTcsMTEgKzU3LDExIEBACiAgICAgICAgcHVibGljIHZvaWQgZG9Bc3luY1BvbGxUZXN0KCkgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBTdHJpbmcgcmV0ID0gaGVsbG8uaW52b2tlQXN5bmNQb2xsKCJIZWxsbyBUZXN0ZXIgISIpOwotCQlpZihyZXQuaW5kZXhPZigiQVNZTkMgUE9MTCBDQUxMIikgPT0gLTEpIHsKKyAgICAgICAgaWYocmV0LmluZGV4T2YoIkFTWU5DIFBPTEwgQ0FMTCIpID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBncmVldGluZyAiICsgcmV0KTsKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImFzeW5jLXBvbGwtZWpiLWNsaWVudCIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQkJfQorICAgICAgICB9CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJldCk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImFzeW5jLXBvbGwtZWpiLWNsaWVudCIsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CkBAIC03MywxMSArNzMsMTEgQEAKICAgICAgICBwdWJsaWMgdm9pZCBkb0FzeW5jQ2FsbGJhY2tUZXN0KCkgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBTdHJpbmcgcmV0ID0gaGVsbG8uaW52b2tlQXN5bmNDYWxsQmFjaygiSGVsbG8gVGVzdGVyICEiKTsKLQkJaWYocmV0LmluZGV4T2YoIkFTWU5DIENBTEwgQkFDSyBDQUxMIikgPT0gLTEpIHsKKyAgICAgICAgaWYocmV0LmluZGV4T2YoIkFTWU5DIENBTEwgQkFDSyBDQUxMIikgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXQpOwogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiYXN5bmMtY2FsbGJhY2stZWpiLWNsaWVudCIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQkJfQorICAgICAgICB9CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJldCk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImFzeW5jLWNhbGxiYWNrLWVqYi1jbGllbnQiLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvYXN5bmNlamJjbGllbnQvY3VzdG9tLWNsaWVudC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9hc3luY2VqYmNsaWVudC9jdXN0b20tY2xpZW50LnhtbAppbmRleCA4ODU3Y2NhLi42N2RmNTliIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9hc3luY2VqYmNsaWVudC9jdXN0b20tY2xpZW50LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9hc3luY2VqYmNsaWVudC9jdXN0b20tY2xpZW50LnhtbApAQCAtMjEsNyArMjEsNyBAQAogICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCiAgICAgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCiAgICAgd3NkbExvY2F0aW9uPSJodHRwOi8vSFRUUF9IT1NUOkhUVFBfUE9SVC9XZWJTZXJ2aWNlRUpCU2VydmljZS9XZWJTZXJ2aWNlRUpCP1dTREwiCi0gICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheHdzIj4gICAgCisgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheHdzIj4KICAgICA8YmluZGluZ3Mgbm9kZT0ibnMxOmRlZmluaXRpb25zIiB4bWxuczpuczE9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KICAgICAgICAgPHBhY2thZ2UgbmFtZT0iZWpiIi8+CiAgICAgICAgIDxlbmFibGVBc3luY01hcHBpbmc+dHJ1ZTwvZW5hYmxlQXN5bmNNYXBwaW5nPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvYXN5bmNlamJjbGllbnQvZWpiL0hlbGxvLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9hc3luY2VqYmNsaWVudC9lamIvSGVsbG8uamF2YQppbmRleCAyYmFhMGYwLi41OTA3Mjg0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9hc3luY2VqYmNsaWVudC9lamIvSGVsbG8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9hc3luY2VqYmNsaWVudC9lamIvSGVsbG8uamF2YQpAQCAtMjAsNyArMjAsNyBAQAogCiBAUmVtb3RlCiBwdWJsaWMgaW50ZXJmYWNlIEhlbGxvIHsKLQlwdWJsaWMgU3RyaW5nIGludm9rZVN5bmMoU3RyaW5nIG1zZyk7Ci0JcHVibGljIFN0cmluZyBpbnZva2VBc3luY1BvbGwoU3RyaW5nIG1zZyk7Ci0JcHVibGljIFN0cmluZyBpbnZva2VBc3luY0NhbGxCYWNrKFN0cmluZyBtc2cpOworICAgIHB1YmxpYyBTdHJpbmcgaW52b2tlU3luYyhTdHJpbmcgbXNnKTsKKyAgICBwdWJsaWMgU3RyaW5nIGludm9rZUFzeW5jUG9sbChTdHJpbmcgbXNnKTsKKyAgICBwdWJsaWMgU3RyaW5nIGludm9rZUFzeW5jQ2FsbEJhY2soU3RyaW5nIG1zZyk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9hc3luY2VqYmNsaWVudC9lamIvSGVsbG9FSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2FzeW5jZWpiY2xpZW50L2VqYi9IZWxsb0VKQi5qYXZhCmluZGV4IDNmZTIzZWUuLmM4OTczMzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2FzeW5jZWpiY2xpZW50L2VqYi9IZWxsb0VKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2FzeW5jZWpiY2xpZW50L2VqYi9IZWxsb0VKQi5qYXZhCkBAIC0yNywyNCArMjcsMjQgQEAKIAogaW1wb3J0IGVuZHBvaW50LlNheUhlbGxvUmVzcG9uc2U7CiAKLUBTdGF0ZWxlc3MgCitAU3RhdGVsZXNzCiBwdWJsaWMgY2xhc3MgSGVsbG9FSkIgaW1wbGVtZW50cyBIZWxsbyB7CiAKIAogICAgQFdlYlNlcnZpY2VSZWYKICAgIFdlYlNlcnZpY2VFSkJTZXJ2aWNlIHdlYlNlcnZpY2U7Ci0gCisKICAgICBwdWJsaWMgU3RyaW5nIGludm9rZVN5bmMoU3RyaW5nIHN0cmluZykgewotCVdlYlNlcnZpY2VFSkIgZWpiID0gd2ViU2VydmljZS5nZXRXZWJTZXJ2aWNlRUpCUG9ydCgpOwotCXJldHVybiBlamIuc2F5SGVsbG8oIlNZTkMgQ0FMTCIgKyBzdHJpbmcpOworICAgIFdlYlNlcnZpY2VFSkIgZWpiID0gd2ViU2VydmljZS5nZXRXZWJTZXJ2aWNlRUpCUG9ydCgpOworICAgIHJldHVybiBlamIuc2F5SGVsbG8oIlNZTkMgQ0FMTCIgKyBzdHJpbmcpOwogICAgfQogCiAgICBwdWJsaWMgU3RyaW5nIGludm9rZUFzeW5jUG9sbChTdHJpbmcgbXNnKSB7CiAgICAgICAgdHJ5IHsKLQkgICAgV2ViU2VydmljZUVKQiBlamIgPSB3ZWJTZXJ2aWNlLmdldFdlYlNlcnZpY2VFSkJQb3J0KCk7CisgICAgICAgIFdlYlNlcnZpY2VFSkIgZWpiID0gd2ViU2VydmljZS5nZXRXZWJTZXJ2aWNlRUpCUG9ydCgpOwogICAgICAgICAgICAgUmVzcG9uc2U8U2F5SGVsbG9SZXNwb25zZT4gcmVzcCA9IGVqYi5zYXlIZWxsb0FzeW5jKCJBU1lOQyBQT0xMIENBTEwiICsgbXNnKTsKLQkgICAgVGhyZWFkLnNsZWVwICgyMDAwKTsKLQkgICAgU2F5SGVsbG9SZXNwb25zZSBvdXQgPSByZXNwLmdldCgpOworICAgICAgICBUaHJlYWQuc2xlZXAgKDIwMDApOworICAgICAgICBTYXlIZWxsb1Jlc3BvbnNlIG91dCA9IHJlc3AuZ2V0KCk7CiAgICAgICAgICAgICByZXR1cm4ob3V0LmdldFJldHVybigpKTsKICAgICAgICB9IGNhdGNoKFRocm93YWJsZSB0KSB7CiAgICAgICAgICAgICByZXR1cm4odC5nZXRNZXNzYWdlKCkpOwpAQCAtNTIsOSArNTIsOSBAQAogICAgfQogCiAgICBwdWJsaWMgU3RyaW5nIGludm9rZUFzeW5jQ2FsbEJhY2soU3RyaW5nIG1zZykgewotCXRyeSB7CisgICAgdHJ5IHsKIFN5c3RlbS5vdXQucHJpbnRsbigiVklKIC0gaW52b2tpbmcgYXN5bmMgY2FsbCBiYWNrIik7Ci0JICAgIFdlYlNlcnZpY2VFSkIgZWpiID0gd2ViU2VydmljZS5nZXRXZWJTZXJ2aWNlRUpCUG9ydCgpOworICAgICAgICBXZWJTZXJ2aWNlRUpCIGVqYiA9IHdlYlNlcnZpY2UuZ2V0V2ViU2VydmljZUVKQlBvcnQoKTsKICAgICAgICAgICAgIE15Q2FsbEJhY2tIYW5kbGVyIGNiaCA9IG5ldyBNeUNhbGxCYWNrSGFuZGxlcigpOwogICAgICAgICAgICAgRnV0dXJlPD8+IHJlc3BvbnNlID0KICAgICAgICAgICAgICAgICBlamIuc2F5SGVsbG9Bc3luYygiQVNZTkMgQ0FMTCBCQUNLIENBTEwiICsgbXNnLCBjYmgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvYmlnaW50L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9iaWdpbnQvYnVpbGQucHJvcGVydGllcwppbmRleCAyNWFmZDg1Li40ZjliNjFlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9iaWdpbnQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9iaWdpbnQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsOCArMTUsOCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iYmlnaW50Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvYmlnaW50L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2JpZ2ludC9idWlsZC54bWwKaW5kZXggYzRiZDMzMy4uNWE4OGZjMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvYmlnaW50L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9iaWdpbnQvYnVpbGQueG1sCkBAIC01MSw3ICs1MSw3IEBACiAgICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1lamIuamFyIgogICAgICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgICAgICBpbmNsdWRlcz0iKioiPgotICAgICAgPC9qYXI+ICAgICAgICAgICAgCisgICAgICA8L2phcj4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUtY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC02MSw4ICs2MSw4IEBACiAgICAgICAgIDxwYXJhbSBuYW1lPSJ3c2ltcG9ydC5hcmdzIgogICAgICAgICAgICAgICAgdmFsdWU9Ii1rZWVwIC1kICR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCBodHRwOi8vJHtodHRwLmhvc3R9OiR7aHR0cC5wb3J0fS9DdXN0b21lck1hbmFnZXJTZXJ2aWNlL0N1c3RvbWVyTWFuYWdlcj9XU0RMIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiIAotICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9qMmVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy1ydC5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtdG9vbHMuamFyIiAKKyAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvajJlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtcnQuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXRvb2xzLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJjbGllbnQvKioiLz4KICAgICA8L3RhcmdldD4KIApAQCAtNzUsNyArNzUsNyBAQAogICAgICAgICA8YXJnIGxpbmU9IiR7YXMucHJvcHN9Ii8+CiAgICAgICAgIDxhcmcgbGluZT0iLS11cGxvYWQ9dHJ1ZSIvPgogICAgICAgICA8YXJnIGxpbmU9Ii0tZHJvcGFuZGNyZWF0ZXRhYmxlcyIvPgotICAgICAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CQorICAgICAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgICAgICAgIDxhcmcgbGluZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphciIvPgogICAgICAgPC9leGVjPgogICAgIDwvdGFyZ2V0PgpAQCAtODYsMTQgKzg2LDE0IEBACiAgICAgICAgICAgPGFyZyBsaW5lPSIke2FzLnByb3BzfSIvPgogICAgICAgICAgIDxhcmcgbGluZT0iLS1kcm9wdGFibGVzPXRydWUiLz4KICAgICAgICAgICA8YXJnIGxpbmU9Ii0tY2FzY2FkZT10cnVlIi8+Ci0gICAgICAgICAgPGFyZyBsaW5lPSItLXRhcmdldCAke2FwcHNlcnZlci5pbnN0YW5jZS5uYW1lfSIvPgkKKyAgICAgICAgICA8YXJnIGxpbmU9Ii0tdGFyZ2V0ICR7YXBwc2VydmVyLmluc3RhbmNlLm5hbWV9Ii8+CiAgICAgICAgICAgPGFyZyBsaW5lPSIke2FwcG5hbWV9LWVqYiIvPgogICAgICAgICA8L2V4ZWM+CiAgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iIGZhaWxvbmVycm9yPSJ0cnVlIj4KICAgICAgICAgICA8YXJnIGxpbmU9InN0b3AtZGF0YWJhc2UiLz4KICAgICAgICAgPC9leGVjPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW5jbGllbnQiPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4tY2xpZW50Ij4KICAgICAgICAgPHBhcmFtIG5hbWU9ImNsaWVudC1jbGFzcyIgdmFsdWU9ImNsaWVudC5DbGllbnQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2JpZ2ludC9lbmRwb2ludC9DdXN0b21lck1hbmFnZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2JpZ2ludC9lbmRwb2ludC9DdXN0b21lck1hbmFnZXIuamF2YQppbmRleCAyNzQyN2YxLi5jNDQ4YjhjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9iaWdpbnQvZW5kcG9pbnQvQ3VzdG9tZXJNYW5hZ2VyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvYmlnaW50L2VuZHBvaW50L0N1c3RvbWVyTWFuYWdlci5qYXZhCkBAIC00Nyw2ICs0Nyw2IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigicmVtb3ZlQ3VzdG9tZXIiKTsKICAgICAgICAgU3RyaW5nIGVqYlFMID0gIkRFTEVURSBGUk9NIEN1c3RvbWVyIGMgV0hFUkUgYy5uYW1lID0gXCIiK2lkKyJcIiI7CiAgICAgICAgIGludCByZXQgPSBlbS5jcmVhdGVRdWVyeSggZWpiUUwgKS5leGVjdXRlVXBkYXRlKCk7Ci0gCXJldHVybiByZXQ7CisgICAgIHJldHVybiByZXQ7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvYnVpbGQueG1sCmluZGV4IDAzNjkwNmEuLjVkNGEyNmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9idWlsZC54bWwKQEAgLTI0LDQxICsyNCw0MSBAQAogICAgIDx0YXJnZXQgbmFtZT0iYWxsIj4KICAgICAgICAgPGFudCBkaXI9Im5vbmFtZSIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9Im5vaW50ZiIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0ic2VjdXJpdHkiIHRhcmdldD0iYWxsIi8+Ci0JPCEtLWFudCBkaXI9InByb3ZpZGVyIiB0YXJnZXQ9ImFsbCIvLS0+Ci0JPGFudCBkaXI9Im9uZXdheSIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0id3NjdHh0aW50ZXJjZXB0b3IiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9InNlY3VyaXR5IiB0YXJnZXQ9ImFsbCIvPgorICAgIDwhLS1hbnQgZGlyPSJwcm92aWRlciIgdGFyZ2V0PSJhbGwiLy0tPgorICAgIDxhbnQgZGlyPSJvbmV3YXkiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9IndzY3R4dGludGVyY2VwdG9yIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0iZWpiY2xpZW50IiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJtc2djdHh0IiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJhc3luY2VqYmNsaWVudCIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0ibXNnY3R4dCIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0iYXN5bmNlamJjbGllbnQiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxhbnQgZGlyPSJzZXJ2aWNlZWpiY2xpZW50IiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJwb3J0ZWpiY2xpZW50IiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJsb2NhbHJlbW90ZWVqYndlYnNlcnZpY2UiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9ImxpYmRlcGVuZGVudCIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0ibWVzc2FnZWN0eHQiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9InNpbmdsZXRvbiIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0ibXNnY3R4aW50ZXJjZXB0b3IiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9ImVqYndlYnNlcnZpY2VzaW53YXIiIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9ImVqYndlYnNlcnZpY2VzaW53YXItMiIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0iZWpid2Vic2VydmljZXNpbndhci0zIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJlamJ3ZWJzZXJ2aWNlc2lud2FyLXNlc3Npb25jb250ZXh0IiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJlamJ3ZWJzZXJ2aWNlc2lud2FyLWludGVyY2VwdG9yIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJwb3J0ZWpiY2xpZW50IiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJsb2NhbHJlbW90ZWVqYndlYnNlcnZpY2UiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9ImxpYmRlcGVuZGVudCIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0ibWVzc2FnZWN0eHQiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9InNpbmdsZXRvbiIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0ibXNnY3R4aW50ZXJjZXB0b3IiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9ImVqYndlYnNlcnZpY2VzaW53YXIiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9ImVqYndlYnNlcnZpY2VzaW53YXItMiIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0iZWpid2Vic2VydmljZXNpbndhci0zIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJlamJ3ZWJzZXJ2aWNlc2lud2FyLXNlc3Npb25jb250ZXh0IiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJlamJ3ZWJzZXJ2aWNlc2lud2FyLWludGVyY2VwdG9yIiB0YXJnZXQ9ImFsbCIvPgogICAgIDxhbnQgZGlyPSJlamJzZXJ2bGV0d2Vic2VydmljZXNpbndhciIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0iYXN5bmMiIHRhcmdldD0iYWxsIi8+Ci0JPCEtLTxhbnQgZGlyPSJiaWdpbnQiIHRhcmdldD0iYWxsIi8+LS0+Ci0JPGFudCBkaXI9ImxpYmRlcGVuZGVudCIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0ibGliZGVwZW5kZW50LTIiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9ImFzeW5jIiB0YXJnZXQ9ImFsbCIvPgorICAgIDwhLS08YW50IGRpcj0iYmlnaW50IiB0YXJnZXQ9ImFsbCIvPi0tPgorICAgIDxhbnQgZGlyPSJsaWJkZXBlbmRlbnQiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9ImxpYmRlcGVuZGVudC0yIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0ic3ZjaGFuZGxlciIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0id3NjdHh0IiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJzZXNzaW9uY3R4IiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJ3c25hbWVlamJuYW1lIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJkZXBlbmRlbmN5bm9pbmplY3Rpb24iIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9ImV4Y2VwdGlvbiIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0ibWV0aG9kaW5qZWN0aW9uIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJpbnZhbGlkbWV0aG9kaW5qZWN0aW9uIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJ3c2N0eHQiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9InNlc3Npb25jdHgiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9IndzbmFtZWVqYm5hbWUiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9ImRlcGVuZGVuY3lub2luamVjdGlvbiIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0iZXhjZXB0aW9uIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJtZXRob2RpbmplY3Rpb24iIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9ImludmFsaWRtZXRob2RpbmplY3Rpb24iIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxhbnQgZGlyPSJwb3J0ZGVwZW5kZW5jeW5vaW5qZWN0aW9uIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJwb3J0ZmllbGRpbmplY3Rpb24iIHRhcmdldD0iYWxsIi8+Ci0JPGFudCBkaXI9InBvcnRtZXRob2RpbmplY3Rpb24iIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9InBvcnRmaWVsZGluamVjdGlvbiIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0icG9ydG1ldGhvZGluamVjdGlvbiIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9IndzUmVmLXdlYnNlcnZpY2UtZmVhdHVyZXMiIHRhcmdldD0iYWxsIi8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9kZXBlbmRlbmN5bm9pbmplY3Rpb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZGVwZW5kZW5jeW5vaW5qZWN0aW9uL2J1aWxkLnhtbAppbmRleCBhOTRmYjUyLi5jOTk3N2E0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9kZXBlbmRlbmN5bm9pbmplY3Rpb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2RlcGVuZGVuY3lub2luamVjdGlvbi9idWlsZC54bWwKQEAgLTM0LDYgKzM0LDYgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0icmVwb3J0LWZhaWx1cmUiPgogICAgICAgICAgICAgPGVjaG8gbWVzc2FnZT0iVGVzdCBmYWlsZWQiLz4KLSAgICA8L3RhcmdldD4gICAJCi0gICAgCisgICAgPC90YXJnZXQ+CisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2RlcGVuZGVuY3lub2luamVjdGlvbi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9kZXBlbmRlbmN5bm9pbmplY3Rpb24vY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDdhYmY2MzguLjU0NjFlMWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2RlcGVuZGVuY3lub2luamVjdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZGVwZW5kZW5jeW5vaW5qZWN0aW9uL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzQsMjIgKzM0LDIyIEBACiAgICAgICAgIHN0YXRpYyBIZWxsb0ltcGxTZXJ2aWNlIHNlcnZpY2U7CiAKICAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCSAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ3cy1kZXBlbmRlbmN5LW5vLWluamVjdGlvbiIpOworICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ3cy1kZXBlbmRlbmN5LW5vLWluamVjdGlvbiIpOwogICAgICAgICAgICAgdHJ5IHsKLQkgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisgICAgICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogCi0gICAgICAgIAkgICAgc2VydmljZSA9IChIZWxsb0ltcGxTZXJ2aWNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvc2VydmljZS9oZWxsb3NlcnZpY2UiKTsKLQkgICAgfSBjYXRjaChUaHJvd2FibGUgdCkgewotCQl0LnByaW50U3RhY2tUcmFjZSgpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkRlcGVuZGVuY3kgbG9va3VwIGZhaWxlZCA6ICIgKyB0LmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndzLWRlcGVuZGVuY3ktbm8taW5qZWN0aW9uIiwgc3RhdC5GQUlMKTsJCQotCSAgICB9Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VydmljZSBpcyAiICsgc2VydmljZSk7Ci0JICAgIGlmIChzZXJ2aWNlIT1udWxsKSB7Ci0JICAgICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKLQkgICAgICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3MpOwotCSAgICB9Ci0JICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3cy1kZXBlbmRlbmN5LW5vLWluamVjdGlvbiIpOworICAgICAgICAgICAgICAgIHNlcnZpY2UgPSAoSGVsbG9JbXBsU2VydmljZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3NlcnZpY2UvaGVsbG9zZXJ2aWNlIik7CisgICAgICAgIH0gY2F0Y2goVGhyb3dhYmxlIHQpIHsKKyAgICAgICAgdC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEZXBlbmRlbmN5IGxvb2t1cCBmYWlsZWQgOiAiICsgdC5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3cy1kZXBlbmRlbmN5LW5vLWluamVjdGlvbiIsIHN0YXQuRkFJTCk7CisgICAgICAgIH0KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZXJ2aWNlIGlzICIgKyBzZXJ2aWNlKTsKKyAgICAgICAgaWYgKHNlcnZpY2UhPW51bGwpIHsKKyAgICAgICAgICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOworICAgICAgICAgICAgICAgIGNsaWVudC5kb1Rlc3QoYXJncyk7CisgICAgICAgIH0KKyAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoIndzLWRlcGVuZGVuY3ktbm8taW5qZWN0aW9uIik7CiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTU3LDExICs1NywxMSBAQAogICAgICAgICAgICAgICAgIEhlbGxvSW1wbCBwb3J0ID0gc2VydmljZS5nZXRIZWxsb0ltcGxQb3J0KCk7CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaT0wO2k8MTA7aSsrKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyByZXQgPSBwb3J0LnNheUhlbGxvKCJBcHBzZXJ2ZXIgVGVzdGVyICEiKTsKLQkJICAgIGlmKHJldC5pbmRleE9mKCJXZWJTdmNUZXN0LUhlbGxvIikgPT0gLTEpIHsKKyAgICAgICAgICAgIGlmKHJldC5pbmRleE9mKCJXZWJTdmNUZXN0LUhlbGxvIikgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBncmVldGluZyAiICsgcmV0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3cy1lamItbWV0aG9kLWluamVjdGlvbiIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0JCSAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid3MtZGVwZW5kZW5jeS1uby1pbmplY3Rpb24iLCBzdGF0LlBBU1MpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpiY2xpZW50L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYmNsaWVudC9idWlsZC54bWwKaW5kZXggZjdjYTQzOC4uNmRkMGRmZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpiY2xpZW50L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJjbGllbnQvYnVpbGQueG1sCkBAIC0yMiw3ICsyMiw3IEBACiBdPgogCiA8cHJvamVjdCBuYW1lPSJIZWxsbyIgZGVmYXVsdD0iY29yZSIgYmFzZWRpcj0iLiI+Ci0gCisKIAogICAgICZjb21tb25CdWlsZDsKICAgICA8cHJvcGVydHkgbmFtZT0ic3JjLW5hbWUiIHZhbHVlPSJlbmRwb2ludC9XZWJTZXJ2aWNlRUpCLmphdmEiLz4KQEAgLTMyLDMwICszMiwzMCBAQAogCiAKICAgICA8dGFyZ2V0IG5hbWU9InByaXZhdGUtdW5kZXBsb3kiPgotCTxhbnRjYWxsIHRhcmdldD0iYXV0b3VuZGVwbG95LWZpbGUiPgotCQk8cGFyYW0gbmFtZT0iZmlsZW5hbWUiIHZhbHVlPSJFamJDbGllbnQuamFyIi8+Ci0JPC9hbnRjYWxsPgotCTxhbnRjYWxsIHRhcmdldD0iYXV0b3VuZGVwbG95LWZpbGUiPgotCQk8cGFyYW0gbmFtZT0iZmlsZW5hbWUiIHZhbHVlPSJXZWJTZXJ2aWNlRUpCLmphciIvPgotCTwvYW50Y2FsbD4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImF1dG91bmRlcGxveS1maWxlIj4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImZpbGVuYW1lIiB2YWx1ZT0iRWpiQ2xpZW50LmphciIvPgorICAgIDwvYW50Y2FsbD4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImF1dG91bmRlcGxveS1maWxlIj4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImZpbGVuYW1lIiB2YWx1ZT0iV2ViU2VydmljZUVKQi5qYXIiLz4KKyAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKIAogICAgIDx0YXJnZXQgbmFtZT0icHJpdmF0ZS1ydW4iPgotCTxhbnRjYWxsIHRhcmdldD0iY2xlYW4iLz4KLQk8YW50Y2FsbCB0YXJnZXQ9IndzZGwtaW1wb3J0Ij4KLQkJPHBhcmFtIG5hbWU9InNlcnZlciIgdmFsdWU9IldlYlNlcnZpY2VFSkIiLz4KLQkJPHBhcmFtIG5hbWU9InBvcnQiIHZhbHVlPSJXZWJTZXJ2aWNlRUpCIi8+Ci0JPC9hbnRjYWxsPgorICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4iLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9IndzZGwtaW1wb3J0Ij4KKyAgICAgICAgPHBhcmFtIG5hbWU9InNlcnZlciIgdmFsdWU9IldlYlNlcnZpY2VFSkIiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InBvcnQiIHZhbHVlPSJXZWJTZXJ2aWNlRUpCIi8+CisgICAgPC9hbnRjYWxsPgogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMiCiAgICAgICAgICAgICBpbmNsdWRlcz0iZWpiL0hlbGxvRUpCLmphdmEiPgogICAgICAgICAgICAgPGNsYXNzcGF0aCByZWZpZD0iY2xhc3NwYXRoIi8+CiAgICAgICAgIDwvamF2YWM+CiAgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2F1dG9kZXBsb3kvRWpiQ2xpZW50LmphciIKLQkgICAgYmFzZWRpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzIgotCSAgICBpbmNsdWRlcz0iZWpiLyoqLGVuZHBvaW50LyoqIi8+Ci0JPHdhaXRmb3IgbWF4d2FpdD0iMTAwIiBtYXh3YWl0dW5pdD0ic2Vjb25kIj4KLSAgICAgICAJICAgIDxvcj4KKyAgICAgICAgYmFzZWRpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzIgorICAgICAgICBpbmNsdWRlcz0iZWpiLyoqLGVuZHBvaW50LyoqIi8+CisgICAgPHdhaXRmb3IgbWF4d2FpdD0iMTAwIiBtYXh3YWl0dW5pdD0ic2Vjb25kIj4KKyAgICAgICAgICAgICAgIDxvcj4KICAgICAgICAgICAgICAgICA8YXZhaWxhYmxlIGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2F1dG9kZXBsb3kvRWpiQ2xpZW50Lmphcl9kZXBsb3llZCIvPgogICAgICAgICAgICAgICAgIDxhdmFpbGFibGUgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvYXV0b2RlcGxveS9FamJDbGllbnQuamFyX2RlcGxveUZhaWxlZCIvPgogICAgICAgICAgICAgPC9vcj4KQEAgLTY2LDE3ICs2NiwxNyBAQAogICAgICAgICA8Y29uZGl0aW9uIHByb3BlcnR5PSJkZXBsb3lfZmFpbGVkIj4KICAgICAgICAgICAgIDxhdmFpbGFibGUgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvYXV0b2RlcGxveS9FamJDbGllbnQuamFyX2RlcGxveUZhaWxlZCIvPgogICAgICAgICA8L2NvbmRpdGlvbj4KLQk8ZmFpbCBpZj0iZGVwbG95X2ZhaWxlZCIgbWVzc2FnZT0iRGVwbG95bWVudCBmYWlsZWQiLz4KKyAgICA8ZmFpbCBpZj0iZGVwbG95X2ZhaWxlZCIgbWVzc2FnZT0iRGVwbG95bWVudCBmYWlsZWQiLz4KICAgICAgICAgPGJhc2VuYW1lIGZpbGU9IiR7Y2xpZW50LXNyYy1uYW1lfSIgcHJvcGVydHk9ImNsaWVudCIgc3VmZml4PSIuamF2YSIvPgogICAgICAgICA8ZGlybmFtZSBmaWxlPSIke2NsaWVudC1zcmMtbmFtZX0iIHByb3BlcnR5PSJjbGllbnQtZGlyZWN0b3J5Ii8+Ci0gICAgICAgIDxiYXNlbmFtZSBmaWxlPSIke2NsaWVudC1kaXJlY3Rvcnl9IiBwcm9wZXJ0eT0iY2xpZW50LXBrZy1uYW1lIi8+IAorICAgICAgICA8YmFzZW5hbWUgZmlsZT0iJHtjbGllbnQtZGlyZWN0b3J5fSIgcHJvcGVydHk9ImNsaWVudC1wa2ctbmFtZSIvPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0iY2xpZW50LWNsYXNzLW5hbWUiIHZhbHVlPSIke2NsaWVudC1wa2ctbmFtZX0vJHtjbGllbnR9LmNsYXNzIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNsaWVudCIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jbGllbnQiLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iUnVubmluZyBhcHBjbGllbnQgd2l0aCAke2NsaWVudC1wa2ctbmFtZX0uJHtjbGllbnR9Ii8+CiAgICAgICAgIDx1bmphciBzcmM9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiBkZXN0PSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMiLz4KICAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vYXBwY2xpZW50IiBkaXI9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3NlcyI+Ci0gICAgICAgICAgICA8YXJnIHZhbHVlPSItRG9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQ9JHtvcmIucG9ydH0iLz4gCi0gICAgICAgICAgICA8YXJnIHZhbHVlPSIke2NsaWVudC1wa2ctbmFtZX0uJHtjbGllbnR9Ii8+ICAgIAorICAgICAgICAgICAgPGFyZyB2YWx1ZT0iLURvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0PSR7b3JiLnBvcnR9Ii8+CisgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2NsaWVudC1wa2ctbmFtZX0uJHtjbGllbnR9Ii8+CiAgICAgICAgIDwvZXhlYz4KICAgICA8L3RhcmdldD4KIApAQCAtODYsNiArODYsNiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJyZXBvcnQtZmFpbHVyZSI+CiAgICAgICAgICAgICA8ZWNobyBtZXNzYWdlPSJUZXN0IEZBSUxFRCIvPgotICAgIDwvdGFyZ2V0PiAgIAkKLSAgICAKKyAgICA8L3RhcmdldD4KKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpiY2xpZW50L2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggNzZkYmNkMC4uZmRhZjQzZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpiY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0xNyw3ICsxNyw3IEBACiBwYWNrYWdlIGNsaWVudDsKIAogaW1wb3J0IGpha2FydGEuZWpiLkVKQjsKLWltcG9ydCBlamIuSGVsbG87IAoraW1wb3J0IGVqYi5IZWxsbzsKIAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuU2ltcGxlUmVwb3J0ZXJBZGFwdGVyOwogCkBAIC0yNywyNCArMjcsMjQgQEAKICAgICAgICAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICAgICAgQEVKQihtYXBwZWROYW1lPSJlamIuSGVsbG8iKQotCXN0YXRpYyBIZWxsbyBoZWxsbzsKKyAgICBzdGF0aWMgSGVsbG8gaGVsbG87CiAKICAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCSAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJlamJjbGllbnQtYW5ub3RhdGlvbiIpOworICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJlamJjbGllbnQtYW5ub3RhdGlvbiIpOwogICAgICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKICAgICAgICAgICAgIGNsaWVudC5kb1Rlc3QoYXJncyk7Ci0JICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJlamJjbGllbnQtYW5ub3RhdGlvbiIpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiZWpiY2xpZW50LWFubm90YXRpb24iKTsKICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nW10gYXJncykgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBmb3IgKGludCBpPTA7aTwxMDtpKyspIHsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJldCA9IGhlbGxvLmludm9rZSgiSGVsbG8gVGVzdGVyICEiKTsKLQkJICAgIGlmKHJldC5pbmRleE9mKCJIZWxsbyBUZXN0ZXIiKSA9PSAtMSkgeworICAgICAgICAgICAgaWYocmV0LmluZGV4T2YoIkhlbGxvIFRlc3RlciIpID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiU2ltcGxlLUFubm90YXRpb24iLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCQkgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmV0KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYmNsaWVudC1hbm5vdGF0aW9uIiwgc3RhdC5QQVNTKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYmNsaWVudC9lamIvSGVsbG8uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYmNsaWVudC9lamIvSGVsbG8uamF2YQppbmRleCA4NmFkNDRmLi44NmVkNjhkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJjbGllbnQvZWpiL0hlbGxvLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpiY2xpZW50L2VqYi9IZWxsby5qYXZhCkBAIC0yMCw1ICsyMCw1IEBACiAKIEBSZW1vdGUKIHB1YmxpYyBpbnRlcmZhY2UgSGVsbG8gewotCXB1YmxpYyBTdHJpbmcgaW52b2tlKFN0cmluZyBtc2cpOworICAgIHB1YmxpYyBTdHJpbmcgaW52b2tlKFN0cmluZyBtc2cpOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpiY2xpZW50L2VqYi9IZWxsb0VKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpiY2xpZW50L2VqYi9IZWxsb0VKQi5qYXZhCmluZGV4IGQ5NWYzOTEuLjk1MDdmOTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYmNsaWVudC9lamIvSGVsbG9FSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJjbGllbnQvZWpiL0hlbGxvRUpCLmphdmEKQEAgLTIyLDE4ICsyMiwxOCBAQAogaW1wb3J0IGVuZHBvaW50LldlYlNlcnZpY2VFSkJTZXJ2aWNlOwogaW1wb3J0IGVuZHBvaW50LldlYlNlcnZpY2VFSkI7CiAKLUBTdGF0ZWxlc3MgCitAU3RhdGVsZXNzCiBwdWJsaWMgY2xhc3MgSGVsbG9FSkIgaW1wbGVtZW50cyBIZWxsbyB7CiAKIAogICAgQFdlYlNlcnZpY2VSZWYKICAgIFdlYlNlcnZpY2VFSkJTZXJ2aWNlIHdlYlNlcnZpY2U7Ci0gCisKICAgICBwdWJsaWMgU3RyaW5nIGludm9rZShTdHJpbmcgc3RyaW5nKSB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaW52b2tlZCB3aXRoICIgKyBzdHJpbmcpOyAKLQlTeXN0ZW0ub3V0LnByaW50bG4oImdldHRpbmcgdGhlIHBvcnQgbm93IGZyb20gIiArIHdlYlNlcnZpY2UpOwotCVdlYlNlcnZpY2VFSkIgZWpiID0gd2ViU2VydmljZS5nZXRXZWJTZXJ2aWNlRUpCUG9ydCgpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiZ290ICIgKyBlamIpOwotCXJldHVybiBlamIuc2F5SGVsbG8oc3RyaW5nKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnZva2VkIHdpdGggIiArIHN0cmluZyk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJnZXR0aW5nIHRoZSBwb3J0IG5vdyBmcm9tICIgKyB3ZWJTZXJ2aWNlKTsKKyAgICBXZWJTZXJ2aWNlRUpCIGVqYiA9IHdlYlNlcnZpY2UuZ2V0V2ViU2VydmljZUVKQlBvcnQoKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImdvdCAiICsgZWpiKTsKKyAgICByZXR1cm4gZWpiLnNheUhlbGxvKHN0cmluZyk7CiAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJzZXJ2bGV0d2Vic2VydmljZXNpbndhci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpic2VydmxldHdlYnNlcnZpY2VzaW53YXIvYnVpbGQucHJvcGVydGllcwppbmRleCBiMWZkY2FmLi4yZjE1ZDE1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJzZXJ2bGV0d2Vic2VydmljZXNpbndhci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYnNlcnZsZXR3ZWJzZXJ2aWNlc2lud2FyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpic2VydmxldHdlYnNlcnZpY2VzaW53YXIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9Ii4vd2ViLnhtbCIvPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJzZXJ2bGV0d2Vic2VydmljZXNpbndhci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJzZXJ2bGV0d2Vic2VydmljZXNpbndhci9idWlsZC54bWwKaW5kZXggYjY1MzkwMC4uMjNmYzcxOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpic2VydmxldHdlYnNlcnZpY2VzaW53YXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYnNlcnZsZXR3ZWJzZXJ2aWNlc2lud2FyL2J1aWxkLnhtbApAQCAtMzMsNyArMzMsNyBAQAogICAgICZ0ZXN0cHJvcGVydGllczsKICAgICAmamF4d3NUb29sczsKIAotICAKKwogICAgIDxwYXRoIGlkPSJjbGFzc3BhdGgiPgogICAgICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LlMxQVNfSE9NRX0vbW9kdWxlcyI+CiAgICAgICAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KQEAgLTExNCw3ICsxMTQsNyBAQAogICAgICAgICA8YXJnIGxpbmU9Ii0tcG9ydCAke2FkbWluLnBvcnR9Ii8+CiAgICAgICAgIDxhcmcgbGluZT0iJHtjbGllbnQud2FyfSIvPgogICAgICAgPC9leGVjPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveS1jbGllbnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iPgpAQCAtMTQwLDYgKzE0MCw2IEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY2xpZW50Ii8+CiAgICAgPC90YXJnZXQ+CiAKLSAgICAKKwogPC9wcm9qZWN0PgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJzZXJ2bGV0d2Vic2VydmljZXNpbndhci9jbGllbnQtd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYnNlcnZsZXR3ZWJzZXJ2aWNlc2lud2FyL2NsaWVudC13ZWIueG1sCmluZGV4IDBmYjBmMWIuLjAxNTQ5YWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYnNlcnZsZXR3ZWJzZXJ2aWNlc2lud2FyL2NsaWVudC13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYnNlcnZsZXR3ZWJzZXJ2aWNlc2lud2FyL2NsaWVudC13ZWIueG1sCkBAIC0yMCw3ICsyMCw3IEBACiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgCisgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAgIDxkZXNjcmlwdGlvbj5BIHRlc3QgYXBwbGljYXRpb248L2Rlc2NyaXB0aW9uPgogICA8ZGlzcGxheS1uYW1lPldlYlRpZXI8L2Rpc3BsYXktbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYnNlcnZsZXR3ZWJzZXJ2aWNlc2lud2FyL2NsaWVudC9UZXN0Q2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJzZXJ2bGV0d2Vic2VydmljZXNpbndhci9jbGllbnQvVGVzdENsaWVudC5qYXZhCmluZGV4IGU0MjI3NjAuLmI4ZThkZmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYnNlcnZsZXR3ZWJzZXJ2aWNlc2lud2FyL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpic2VydmxldHdlYnNlcnZpY2VzaW53YXIvY2xpZW50L1Rlc3RDbGllbnQuamF2YQpAQCAtNDcsNyArNDcsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgaW50IGNvZGUgPSBpbnZva2VTZXJ2bGV0KHVybCk7CiAgICAgICAgICAgICByZXBvcnQoY29kZSk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpic2VydmxldHdlYnNlcnZpY2VzaW53YXIvZW5kcG9pbnQvSGVsbG9FamIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYnNlcnZsZXR3ZWJzZXJ2aWNlc2lud2FyL2VuZHBvaW50L0hlbGxvRWpiLmphdmEKaW5kZXggZjNjYTMzYy4uNDUwNTA1MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpic2VydmxldHdlYnNlcnZpY2VzaW53YXIvZW5kcG9pbnQvSGVsbG9FamIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJzZXJ2bGV0d2Vic2VydmljZXNpbndhci9lbmRwb2ludC9IZWxsb0VqYi5qYXZhCkBAIC0zMywxMCArMzMsMTAgQEAKIEBSZXNvdXJjZQogICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBzYzsKIAotCXB1YmxpYyBIZWxsb0VqYigpIHt9CisgICAgcHVibGljIEhlbGxvRWpiKCkge30KIAotCUBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0ic2F5SGVsbG8iLCBhY3Rpb249InVybjpTYXlIZWxsbyIpCi0JcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgd2hvKSB7Ci0JCXJldHVybiAiRUpCIFdTOiIgKyB3aG87Ci0JfQorICAgIEBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0ic2F5SGVsbG8iLCBhY3Rpb249InVybjpTYXlIZWxsbyIpCisgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgd2hvKSB7CisgICAgICAgIHJldHVybiAiRUpCIFdTOiIgKyB3aG87CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpic2VydmxldHdlYnNlcnZpY2VzaW53YXIvZW5kcG9pbnQvSGVsbG9XUy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpic2VydmxldHdlYnNlcnZpY2VzaW53YXIvZW5kcG9pbnQvSGVsbG9XUy5qYXZhCmluZGV4IDFiNDkyN2UuLmFiMDg1NGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYnNlcnZsZXR3ZWJzZXJ2aWNlc2lud2FyL2VuZHBvaW50L0hlbGxvV1MuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJzZXJ2bGV0d2Vic2VydmljZXNpbndhci9lbmRwb2ludC9IZWxsb1dTLmphdmEKQEAgLTI4LDEwICsyOCwxMCBAQAogKQogcHVibGljIGNsYXNzIEhlbGxvV1MgewogCi0JcHVibGljIEhlbGxvV1MoKSB7fQorICAgIHB1YmxpYyBIZWxsb1dTKCkge30KIAotCUBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0ic2F5SGVsbG8iLCBhY3Rpb249InVybjpTYXlIZWxsbyIpCi0JcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgd2hvKSB7Ci0JCXJldHVybiAiU2VydmxldCBXUzoiICsgd2hvOwotCX0KKyAgICBAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9InNheUhlbGxvIiwgYWN0aW9uPSJ1cm46U2F5SGVsbG8iKQorICAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIHdobykgeworICAgICAgICByZXR1cm4gIlNlcnZsZXQgV1M6IiArIHdobzsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJzZXJ2bGV0d2Vic2VydmljZXNpbndhci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpic2VydmxldHdlYnNlcnZpY2VzaW53YXIvd2ViLnhtbAppbmRleCBhYWU1MjdlLi5mYmEwOTAyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJzZXJ2bGV0d2Vic2VydmljZXNpbndhci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYnNlcnZsZXR3ZWJzZXJ2aWNlc2lud2FyL3dlYi54bWwKQEAgLTE4LDEwICsxOCwxMCBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotCQkJaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CisgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQorICAgICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAKIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJzZXJ2bGV0d2Vic2VydmljZXNpbndhci93ZWJjbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJzZXJ2bGV0d2Vic2VydmljZXNpbndhci93ZWJjbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMzc5Nzk0MS4uMzhjOGRkYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpic2VydmxldHdlYnNlcnZpY2VzaW53YXIvd2ViY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYnNlcnZsZXR3ZWJzZXJ2aWNlc2lud2FyL3dlYmNsaWVudC9DbGllbnQuamF2YQpAQCAtMzIsOCArMzIsOCBAQAogICAgIEBqYWthcnRhLnhtbC53cy5XZWJTZXJ2aWNlUmVmKHdlYmNsaWVudC5IZWxsb1NlcnZpY2UuY2xhc3MpCiAgICAgICAgICAgICB3ZWJjbGllbnQuSGVsbG8gaGlwb3J0MjsKIAotICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkgCi0JCXRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CisgICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQorICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICAgICBkb1Bvc3QocmVxLCByZXNwKTsKICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItMi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci0yL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMTg1MzhkNC4uZTgzMzRhOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci0yL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci0yL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpid2Vic2VydmljZXNpbndhci0yIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSIuL3dlYi54bWwiLz4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci0yL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItMi9idWlsZC54bWwKaW5kZXggNzMxY2M1Zi4uZjc4ODU3NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci0yL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLTIvYnVpbGQueG1sCkBAIC0zMyw3ICszMyw3IEBACiAgICAgJnRlc3Rwcm9wZXJ0aWVzOwogICAgICZqYXh3c1Rvb2xzOwogCi0gIAorCiAgICAgPHBhdGggaWQ9ImNsYXNzcGF0aCI+CiAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuUzFBU19IT01FfS9tb2R1bGVzIj4KICAgICAgICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLmphciIvPgpAQCAtMTA5LDcgKzEwOSw3IEBACiAgICAgICAgIDxhcmcgbGluZT0iLS1wb3J0ICR7YWRtaW4ucG9ydH0iLz4KICAgICAgICAgPGFyZyBsaW5lPSIke2NsaWVudC53YXJ9Ii8+CiAgICAgICA8L2V4ZWM+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95LWNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSI+CkBAIC0xMzUsNiArMTM1LDYgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jbGllbnQiLz4KICAgICA8L3RhcmdldD4KIAotICAgIAorCiA8L3Byb2plY3Q+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItMi9jbGllbnQtd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItMi9jbGllbnQtd2ViLnhtbAppbmRleCAwMjdkZmNlLi5iNGJiZjViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLTIvY2xpZW50LXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci0yL2NsaWVudC13ZWIueG1sCkBAIC0yMCw3ICsyMCw3IEBACiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgCisgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAgIDxkZXNjcmlwdGlvbj5BIHRlc3QgYXBwbGljYXRpb248L2Rlc2NyaXB0aW9uPgogICA8ZGlzcGxheS1uYW1lPldlYlRpZXI8L2Rpc3BsYXktbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItMi9lbmRwb2ludC9IZWxsby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci0yL2VuZHBvaW50L0hlbGxvLmphdmEKaW5kZXggZDVhN2FlOC4uNGUyYTY1YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci0yL2VuZHBvaW50L0hlbGxvLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci0yL2VuZHBvaW50L0hlbGxvLmphdmEKQEAgLTMyLDEwICszMiwxMCBAQAogLy9AUmVzb3VyY2UKICAvLyAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBzYzsKIAotCXB1YmxpYyBIZWxsbygpIHt9CisgICAgcHVibGljIEhlbGxvKCkge30KIAotCUBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0ic2F5SGVsbG8iLCBhY3Rpb249InVybjpTYXlIZWxsbyIpCi0JcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgd2hvKSB7Ci0JCXJldHVybiAiSGVsbG8gIiArIHdobzsKLQl9CisgICAgQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJzYXlIZWxsbyIsIGFjdGlvbj0idXJuOlNheUhlbGxvIikKKyAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyB3aG8pIHsKKyAgICAgICAgcmV0dXJuICJIZWxsbyAiICsgd2hvOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItMi93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci0yL3dlYi54bWwKaW5kZXggYWFlNTI3ZS4uZmJhMDkwMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci0yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci0yL3dlYi54bWwKQEAgLTE4LDEwICsxOCwxMCBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotCQkJaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CisgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQorICAgICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAKIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLTIvd2ViY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci0yL3dlYmNsaWVudC9DbGllbnQuamF2YQppbmRleCBiMjYzZWUwLi44OTQzYTVhYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci0yL3dlYmNsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLTIvd2ViY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yOCw4ICsyOCw4IEBACiAgICAgICAgIEBqYWthcnRhLnhtbC53cy5XZWJTZXJ2aWNlUmVmKEhlbGxvU2VydmljZS5jbGFzcykKICAgICAgICAgSGVsbG8gaGlwb3J0OwogCi0gICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKSAKLQkJdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKKyAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCisgICAgICAgIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgICAgIGRvUG9zdChyZXEsIHJlc3ApOwogICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci0zL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLTMvYnVpbGQucHJvcGVydGllcwppbmRleCBkOGY0ODFiLi43MDFjYjg3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLTMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLTMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamJ3ZWJzZXJ2aWNlc2lud2FyLTMiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9Ii4vd2ViLnhtbCIvPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLTMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci0zL2J1aWxkLnhtbAppbmRleCA3MzFjYzVmLi5mNzg4NTc1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLTMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItMy9idWlsZC54bWwKQEAgLTMzLDcgKzMzLDcgQEAKICAgICAmdGVzdHByb3BlcnRpZXM7CiAgICAgJmpheHdzVG9vbHM7CiAKLSAgCisKICAgICA8cGF0aCBpZD0iY2xhc3NwYXRoIj4KICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5TMUFTX0hPTUV9L21vZHVsZXMiPgogICAgICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IiouamFyIi8+CkBAIC0xMDksNyArMTA5LDcgQEAKICAgICAgICAgPGFyZyBsaW5lPSItLXBvcnQgJHthZG1pbi5wb3J0fSIvPgogICAgICAgICA8YXJnIGxpbmU9IiR7Y2xpZW50Lndhcn0iLz4KICAgICAgIDwvZXhlYz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3ktY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59Ij4KQEAgLTEzNSw2ICsxMzUsNiBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNsaWVudCIvPgogICAgIDwvdGFyZ2V0PgogCi0gICAgCisKIDwvcHJvamVjdD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci0zL2NsaWVudC13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci0zL2NsaWVudC13ZWIueG1sCmluZGV4IDAyN2RmY2UuLmI0YmJmNWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItMy9jbGllbnQtd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLTMvY2xpZW50LXdlYi54bWwKQEAgLTIwLDcgKzIwLDcgQEAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0gICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSAKKyAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KICAgPGRlc2NyaXB0aW9uPkEgdGVzdCBhcHBsaWNhdGlvbjwvZGVzY3JpcHRpb24+CiAgIDxkaXNwbGF5LW5hbWU+V2ViVGllcjwvZGlzcGxheS1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci0zL2NsaWVudC9UZXN0Q2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLTMvY2xpZW50L1Rlc3RDbGllbnQuamF2YQppbmRleCBlMTY2NWIzLi5jMWI3ZGFiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLTMvY2xpZW50L1Rlc3RDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLTMvY2xpZW50L1Rlc3RDbGllbnQuamF2YQpAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgaW50IGNvZGUgPSBpbnZva2VTZXJ2bGV0KHVybCk7CiAgICAgICAgICAgICByZXBvcnQoY29kZSk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgfQpAQCAtNjMsOSArNjMsOSBAQAogICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICBsb2cobGluZSk7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIlNvIHRoZSBSRVNVTFQgT0YgSEVMTE8gU0VSVklDRSBJUyIpICE9IC0xKQotCQlmb3VuZDEgPSB0cnVlOworICAgICAgICBmb3VuZDEgPSB0cnVlOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJbSGVsbG8gQWxsXSIpICE9IC0xKQotCQlmb3VuZDIgPSB0cnVlOworICAgICAgICBmb3VuZDIgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjb2RlOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItMy9lbmRwb2ludC9IZWxsby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci0zL2VuZHBvaW50L0hlbGxvLmphdmEKaW5kZXggZDk2NGU4Zi4uYWI4NWM4MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci0zL2VuZHBvaW50L0hlbGxvLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci0zL2VuZHBvaW50L0hlbGxvLmphdmEKQEAgLTMzLDEwICszMywxMCBAQAogQFJlc291cmNlCiAgICBwcml2YXRlIFdlYlNlcnZpY2VDb250ZXh0IHNjOwogCi0JcHVibGljIEhlbGxvKCkge30KKyAgICBwdWJsaWMgSGVsbG8oKSB7fQogCi0JQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJzYXlIZWxsbyIsIGFjdGlvbj0idXJuOlNheUhlbGxvIikKLQlwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyB3aG8pIHsKLQkJcmV0dXJuICJIZWxsbyAiICsgd2hvOwotCX0KKyAgICBAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9InNheUhlbGxvIiwgYWN0aW9uPSJ1cm46U2F5SGVsbG8iKQorICAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIHdobykgeworICAgICAgICByZXR1cm4gIkhlbGxvICIgKyB3aG87CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci0zL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLTMvd2ViLnhtbAppbmRleCBhYWU1MjdlLi5mYmEwOTAyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLTMvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLTMvd2ViLnhtbApAQCAtMTgsMTAgKzE4LDEwIEBACiAtLT4KIAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCi0JCQlodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KKyAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCisgICAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KIAogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItMy93ZWJjbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLTMvd2ViY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGIyNjNlZTAuLjg5NDNhNWFjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLTMvd2ViY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItMy93ZWJjbGllbnQvQ2xpZW50LmphdmEKQEAgLTI4LDggKzI4LDggQEAKICAgICAgICAgQGpha2FydGEueG1sLndzLldlYlNlcnZpY2VSZWYoSGVsbG9TZXJ2aWNlLmNsYXNzKQogICAgICAgICBIZWxsbyBoaXBvcnQ7CiAKLSAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApIAotCQl0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24geworICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkKKyAgICAgICAgdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgICAgZG9Qb3N0KHJlcSwgcmVzcCk7CiAgICAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLWludGVyY2VwdG9yL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLWludGVyY2VwdG9yL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOGZhMGFiYi4uZWFmNDZkMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci1pbnRlcmNlcHRvci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItaW50ZXJjZXB0b3IvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamJ3ZWJzZXJ2aWNlc2lud2FyLWludGVyY2VwdG9yIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSIuL3dlYi54bWwiLz4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci1pbnRlcmNlcHRvci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLWludGVyY2VwdG9yL2J1aWxkLnhtbAppbmRleCA3MzFjYzVmLi5mNzg4NTc1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLWludGVyY2VwdG9yL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLWludGVyY2VwdG9yL2J1aWxkLnhtbApAQCAtMzMsNyArMzMsNyBAQAogICAgICZ0ZXN0cHJvcGVydGllczsKICAgICAmamF4d3NUb29sczsKIAotICAKKwogICAgIDxwYXRoIGlkPSJjbGFzc3BhdGgiPgogICAgICAgICA8ZmlsZXNldCBkaXI9IiR7ZW52LlMxQVNfSE9NRX0vbW9kdWxlcyI+CiAgICAgICAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi5qYXIiLz4KQEAgLTEwOSw3ICsxMDksNyBAQAogICAgICAgICA8YXJnIGxpbmU9Ii0tcG9ydCAke2FkbWluLnBvcnR9Ii8+CiAgICAgICAgIDxhcmcgbGluZT0iJHtjbGllbnQud2FyfSIvPgogICAgICAgPC9leGVjPgotICAgIDwvdGFyZ2V0PiAgIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveS1jbGllbnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iPgpAQCAtMTM1LDYgKzEzNSw2IEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY2xpZW50Ii8+CiAgICAgPC90YXJnZXQ+CiAKLSAgICAKKwogPC9wcm9qZWN0PgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLWludGVyY2VwdG9yL2NsaWVudC13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci1pbnRlcmNlcHRvci9jbGllbnQtd2ViLnhtbAppbmRleCAwMjdkZmNlLi5iNGJiZjViIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLWludGVyY2VwdG9yL2NsaWVudC13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItaW50ZXJjZXB0b3IvY2xpZW50LXdlYi54bWwKQEAgLTIwLDcgKzIwLDcgQEAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0gICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSAKKyAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KICAgPGRlc2NyaXB0aW9uPkEgdGVzdCBhcHBsaWNhdGlvbjwvZGVzY3JpcHRpb24+CiAgIDxkaXNwbGF5LW5hbWU+V2ViVGllcjwvZGlzcGxheS1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci1pbnRlcmNlcHRvci9jbGllbnQvVGVzdENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci1pbnRlcmNlcHRvci9jbGllbnQvVGVzdENsaWVudC5qYXZhCmluZGV4IDRjMDI1ZDkuLmE1MmM5Y2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItaW50ZXJjZXB0b3IvY2xpZW50L1Rlc3RDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLWludGVyY2VwdG9yL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludCBjb2RlID0gaW52b2tlU2VydmxldCh1cmwpOwogICAgICAgICAgICAgcmVwb3J0KGNvZGUpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KQEAgLTYzLDkgKzYzLDkgQEAKICAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nKGxpbmUpOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJTbyB0aGUgUkVTVUxUIE9GIEhFTExPIFNFUlZJQ0UgSVMiKSAhPSAtMSkKLQkJZm91bmQxID0gdHJ1ZTsKKyAgICAgICAgZm91bmQxID0gdHJ1ZTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiW3NheUhlbGxvXSIpICE9IC0xKQotCQlmb3VuZDIgPSB0cnVlOworICAgICAgICBmb3VuZDIgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjb2RlOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItaW50ZXJjZXB0b3IvZW5kcG9pbnQvSGVsbG8uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItaW50ZXJjZXB0b3IvZW5kcG9pbnQvSGVsbG8uamF2YQppbmRleCBhMDQ0Nzc4Li5lMGJlYzQ1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLWludGVyY2VwdG9yL2VuZHBvaW50L0hlbGxvLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci1pbnRlcmNlcHRvci9lbmRwb2ludC9IZWxsby5qYXZhCkBAIC0zMiwxMiArMzIsMTIgQEAKIEBSZXNvdXJjZQogICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBzYzsKIAotCXB1YmxpYyBIZWxsbygpIHt9CisgICAgcHVibGljIEhlbGxvKCkge30KIAotCUBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0ic2F5SGVsbG8iLCBhY3Rpb249InVybjpTYXlIZWxsbyIpCisgICAgQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJzYXlIZWxsbyIsIGFjdGlvbj0idXJuOlNheUhlbGxvIikKICAgICAgICAgQGpha2FydGEuaW50ZXJjZXB0b3IuSW50ZXJjZXB0b3JzKFNpbXBsZUludGVyY2VwdG9yLmNsYXNzKQotCXB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oT2JqZWN0IHdobykgewotCQlyZXR1cm4gIkhlbGxvICIgKyB3aG8gIDsKKyAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKE9iamVjdCB3aG8pIHsKKyAgICAgICAgcmV0dXJuICJIZWxsbyAiICsgd2hvICA7CiAKLQl9CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci1pbnRlcmNlcHRvci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci1pbnRlcmNlcHRvci93ZWIueG1sCmluZGV4IGFhZTUyN2UuLmZiYTA5MDIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItaW50ZXJjZXB0b3Ivd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLWludGVyY2VwdG9yL3dlYi54bWwKQEAgLTE4LDEwICsxOCwxMCBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotCQkJaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CisgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQorICAgICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAKIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLWludGVyY2VwdG9yL3dlYmNsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItaW50ZXJjZXB0b3Ivd2ViY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGIyNjNlZTAuLjg5NDNhNWFjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLWludGVyY2VwdG9yL3dlYmNsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLWludGVyY2VwdG9yL3dlYmNsaWVudC9DbGllbnQuamF2YQpAQCAtMjgsOCArMjgsOCBAQAogICAgICAgICBAamFrYXJ0YS54bWwud3MuV2ViU2VydmljZVJlZihIZWxsb1NlcnZpY2UuY2xhc3MpCiAgICAgICAgIEhlbGxvIGhpcG9ydDsKIAotICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkgCi0JCXRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CisgICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQorICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICAgICBkb1Bvc3QocmVxLCByZXNwKTsKICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItc2Vzc2lvbmNvbnRleHQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItc2Vzc2lvbmNvbnRleHQvYnVpbGQucHJvcGVydGllcwppbmRleCA1ODFhZjc3Li4zNDViZDQ4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLXNlc3Npb25jb250ZXh0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci1zZXNzaW9uY29udGV4dC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImVqYndlYnNlcnZpY2VzaW53YXItc2Vzc2lvbmNvbnRleHQiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9Ii4vd2ViLnhtbCIvPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLXNlc3Npb25jb250ZXh0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItc2Vzc2lvbmNvbnRleHQvYnVpbGQueG1sCmluZGV4IDczMWNjNWYuLmY3ODg1NzUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItc2Vzc2lvbmNvbnRleHQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItc2Vzc2lvbmNvbnRleHQvYnVpbGQueG1sCkBAIC0zMyw3ICszMyw3IEBACiAgICAgJnRlc3Rwcm9wZXJ0aWVzOwogICAgICZqYXh3c1Rvb2xzOwogCi0gIAorCiAgICAgPHBhdGggaWQ9ImNsYXNzcGF0aCI+CiAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuUzFBU19IT01FfS9tb2R1bGVzIj4KICAgICAgICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLmphciIvPgpAQCAtMTA5LDcgKzEwOSw3IEBACiAgICAgICAgIDxhcmcgbGluZT0iLS1wb3J0ICR7YWRtaW4ucG9ydH0iLz4KICAgICAgICAgPGFyZyBsaW5lPSIke2NsaWVudC53YXJ9Ii8+CiAgICAgICA8L2V4ZWM+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95LWNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSI+CkBAIC0xMzUsNiArMTM1LDYgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jbGllbnQiLz4KICAgICA8L3RhcmdldD4KIAotICAgIAorCiA8L3Byb2plY3Q+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItc2Vzc2lvbmNvbnRleHQvY2xpZW50LXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLXNlc3Npb25jb250ZXh0L2NsaWVudC13ZWIueG1sCmluZGV4IDAyN2RmY2UuLmI0YmJmNWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItc2Vzc2lvbmNvbnRleHQvY2xpZW50LXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci1zZXNzaW9uY29udGV4dC9jbGllbnQtd2ViLnhtbApAQCAtMjAsNyArMjAsNyBAQAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLSAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIAorICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogICA8ZGVzY3JpcHRpb24+QSB0ZXN0IGFwcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KICAgPGRpc3BsYXktbmFtZT5XZWJUaWVyPC9kaXNwbGF5LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLXNlc3Npb25jb250ZXh0L2NsaWVudC9UZXN0Q2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLXNlc3Npb25jb250ZXh0L2NsaWVudC9UZXN0Q2xpZW50LmphdmEKaW5kZXggYTM5Y2UyNy4uZTMyOTg4MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci1zZXNzaW9uY29udGV4dC9jbGllbnQvVGVzdENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItc2Vzc2lvbmNvbnRleHQvY2xpZW50L1Rlc3RDbGllbnQuamF2YQpAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgaW50IGNvZGUgPSBpbnZva2VTZXJ2bGV0KHVybCk7CiAgICAgICAgICAgICByZXBvcnQoY29kZSk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgfQpAQCAtNjMsOSArNjMsOSBAQAogICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICBsb2cobGluZSk7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIlNvIHRoZSBSRVNVTFQgT0YgSEVMTE8gU0VSVklDRSBJUyIpICE9IC0xKQotCQlmb3VuZDEgPSB0cnVlOworICAgICAgICBmb3VuZDEgPSB0cnVlOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJbSGVsbG8gQWxsXSIpICE9IC0xKQotCQlmb3VuZDIgPSB0cnVlOworICAgICAgICBmb3VuZDIgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjb2RlOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItc2Vzc2lvbmNvbnRleHQvZW5kcG9pbnQvSGVsbG8uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItc2Vzc2lvbmNvbnRleHQvZW5kcG9pbnQvSGVsbG8uamF2YQppbmRleCA4NmZhODJjLi4zMjMyMWZlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLXNlc3Npb25jb250ZXh0L2VuZHBvaW50L0hlbGxvLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci1zZXNzaW9uY29udGV4dC9lbmRwb2ludC9IZWxsby5qYXZhCkBAIC0zMiwxMSArMzIsMTEgQEAKIEBSZXNvdXJjZQogICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBzYzsKIAotCXB1YmxpYyBIZWxsbygpIHt9CisgICAgcHVibGljIEhlbGxvKCkge30KIAotCUBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0ic2F5SGVsbG8iLCBhY3Rpb249InVybjpTYXlIZWxsbyIpCi0JcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgd2hvKSB7Ci0JCXJldHVybiAiSGVsbG8gIiArIHdobyAgOworICAgIEBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0ic2F5SGVsbG8iLCBhY3Rpb249InVybjpTYXlIZWxsbyIpCisgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgd2hvKSB7CisgICAgICAgIHJldHVybiAiSGVsbG8gIiArIHdobyAgOwogCi0JfQorICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItc2Vzc2lvbmNvbnRleHQvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXItc2Vzc2lvbmNvbnRleHQvd2ViLnhtbAppbmRleCBhYWU1MjdlLi5mYmEwOTAyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLXNlc3Npb25jb250ZXh0L3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci1zZXNzaW9uY29udGV4dC93ZWIueG1sCkBAIC0xOCwxMCArMTgsMTAgQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKLQkJCWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgorICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKKyAgICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogCiAKIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci1zZXNzaW9uY29udGV4dC93ZWJjbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyLXNlc3Npb25jb250ZXh0L3dlYmNsaWVudC9DbGllbnQuamF2YQppbmRleCBiMjYzZWUwLi44OTQzYTVhYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci1zZXNzaW9uY29udGV4dC93ZWJjbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci1zZXNzaW9uY29udGV4dC93ZWJjbGllbnQvQ2xpZW50LmphdmEKQEAgLTI4LDggKzI4LDggQEAKICAgICAgICAgQGpha2FydGEueG1sLndzLldlYlNlcnZpY2VSZWYoSGVsbG9TZXJ2aWNlLmNsYXNzKQogICAgICAgICBIZWxsbyBoaXBvcnQ7CiAKLSAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApIAotCQl0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24geworICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkKKyAgICAgICAgdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgICAgZG9Qb3N0KHJlcSwgcmVzcCk7CiAgICAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMThiNGNjYy4uMWQzOTUzZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsOSArMTUsOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZWpid2Vic2VydmljZXNpbndhciIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iLi93ZWIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXIvYnVpbGQueG1sCmluZGV4IDE0Y2M1ZmQuLjEwYjZhNGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXIvYnVpbGQueG1sCkBAIC03NSw3ICs3NSw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgPHRhcmdldCBuYW1lPSJydW5jbGllbnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgogICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA3N2RmZDA3Li5kMDMyOTM0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzAsMTAgKzMwLDEwIEBACiAKIAogICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oImVqYndlYnNlcnZpY2VzaW53YXIiKTsKKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiZWpid2Vic2VydmljZXNpbndhciIpOwogICAgICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKICAgICAgICAgICAgIGNsaWVudC5kb1Rlc3QoYXJncyk7Ci0JICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJlamJ3ZWJzZXJ2aWNlc2lud2FyIik7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJlamJ3ZWJzZXJ2aWNlc2lud2FyIik7CiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTQxLDE3ICs0MSwxNyBAQAogCiAgICAgICAgICAgICAgICAgVVJMIHNlcnZpY2VJbmZvID0gbmV3IFVSTCAoYXJnc1swXSk7CiAgICAgICAgICAgICAgICAgVVJMQ29ubmVjdGlvbiBjb24gPSBzZXJ2aWNlSW5mby5vcGVuQ29ubmVjdGlvbigpOwotICAgICAgICAgICAgICAgQnVmZmVyZWRSZWFkZXIgaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGNvbi5nZXRJbnB1dFN0cmVhbSgpKSk7IAorICAgICAgICAgICAgICAgQnVmZmVyZWRSZWFkZXIgaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGNvbi5nZXRJbnB1dFN0cmVhbSgpKSk7CiAKICAgICAgICAgICAgICAgICBTdHJpbmcgaW5wdXRMaW5lOwotICAgICAgICAgICAgICAgIGludCBpbmRleD0wOyAKKyAgICAgICAgICAgICAgICBpbnQgaW5kZXg9MDsKICAgICAgICAgICAgICAgICB3aGlsZSAoKGlucHV0TGluZSA9IGluLnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoKGluZGV4PSBpbnB1dExpbmUuaW5kZXhPZigibWVzc2FnZT0iKSk+MCl7CiAKLSAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdXJsID0gaW5wdXRMaW5lLnN1YnN0cmluZyhpbmRleCs3KTsgIAorICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyB1cmwgPSBpbnB1dExpbmUuc3Vic3RyaW5nKGluZGV4KzcpOwogICAgICAgICAgICAgICAgICAgICAgIGlmICh1cmwuaW5kZXhPZigic2F5SGVsbG8iKT4wKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYndlYnNlcnZpY2VzaW53YXIiLCBzdGF0LlBBU1MpOwotICAgICAgICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihpbnB1dExpbmUpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyL2VuZHBvaW50L0hlbGxvLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyL2VuZHBvaW50L0hlbGxvLmphdmEKaW5kZXggNjY1NjkwYS4uMmJlNjlmMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci9lbmRwb2ludC9IZWxsby5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXIvZW5kcG9pbnQvSGVsbG8uamF2YQpAQCAtMzMsMTAgKzMzLDEwIEBACiBAUmVzb3VyY2UKICAgIHByaXZhdGUgU2Vzc2lvbkNvbnRleHQgc2M7CiAKLQlwdWJsaWMgSGVsbG8oKSB7fQorICAgIHB1YmxpYyBIZWxsbygpIHt9CiAKLQlAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9InNheUhlbGxvIiwgYWN0aW9uPSJ1cm46U2F5SGVsbG8iKQotCXB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIHdobykgewotCQlyZXR1cm4gIldlYlN2Y1Rlc3QtSGVsbG8gIiArIHdobzsKLQl9CisgICAgQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJzYXlIZWxsbyIsIGFjdGlvbj0idXJuOlNheUhlbGxvIikKKyAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyB3aG8pIHsKKyAgICAgICAgcmV0dXJuICJXZWJTdmNUZXN0LUhlbGxvICIgKyB3aG87CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid2Vic2VydmljZXNpbndhci93ZWIueG1sCmluZGV4IGFhZTUyN2UuLmZiYTA5MDIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndlYnNlcnZpY2VzaW53YXIvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3ZWJzZXJ2aWNlc2lud2FyL3dlYi54bWwKQEAgLTE4LDEwICsxOCwxMCBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotCQkJaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CisgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQorICAgICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAKIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3c2lud2Fyd2l0aHdzZGwvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndzaW53YXJ3aXRod3NkbC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGZkZTM3OWEuLmQyNjIzZjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndzaW53YXJ3aXRod3NkbC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndzaW53YXJ3aXRod3NkbC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw5ICsxNSw5IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamJ3c2lud2Fyd2l0aHdzZGwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9Ii4vd2ViLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid3NpbndhcndpdGh3c2RsL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndzaW53YXJ3aXRod3NkbC9idWlsZC54bWwKaW5kZXggODhjYzc1OC4uZTkzYzBmZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid3NpbndhcndpdGh3c2RsL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3c2lud2Fyd2l0aHdzZGwvYnVpbGQueG1sCkBAIC00OCw3ICs0OCw3IEBACiAgICAgICAgICAgICAgICB2YWx1ZT0iLXdzZGxsb2NhdGlvbiBXRUItSU5GL3dzZGwvSGVsbG9TZXJ2aWNlLndzZGwgLWtlZXAgLWQgJHtidWlsZC5jbGFzc2VzLmRpcn0gSGVsbG9TZXJ2aWNlLndzZGwiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlbmRwb2ludCIvPgpAQCAtOTcsNiArOTcsNiBAQAogICAgICAgICA8cGFyYW0gbmFtZT0ib3RoZXItYXJncyIgdmFsdWU9ImVqYndzaW53YXJ3aXRod3NkbCIvPgogICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotICAKKwogPC9wcm9qZWN0PgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3c2lud2Fyd2l0aHdzZGwvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid3NpbndhcndpdGh3c2RsL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBjMjc3MGUzLi42OTFhMDEyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9lamJ3c2lud2Fyd2l0aHdzZGwvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndzaW53YXJ3aXRod3NkbC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTMwLDEwICszMCwxMCBAQAogCiAKICAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCSAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJlamJ3c2lud2Fyd2l0aHdzZGwiKTsKKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiZWpid3NpbndhcndpdGh3c2RsIik7CiAgICAgICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAgICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzKTsKLQkgICAgc3RhdC5wcmludFN1bW1hcnkoImVqYndzaW53YXJ3aXRod3NkbCIpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiZWpid3NpbndhcndpdGh3c2RsIik7CiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTUwLDE3ICs1MCwxNyBAQAogICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgVVJMIHNlcnZpY2VJbmZvID0gbmV3IFVSTCAoYXJnc1swXSk7CiAgICAgICAgICAgICAgICAgVVJMQ29ubmVjdGlvbiBjb24gPSBzZXJ2aWNlSW5mby5vcGVuQ29ubmVjdGlvbigpOwotICAgICAgICAgICAgICAgQnVmZmVyZWRSZWFkZXIgaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGNvbi5nZXRJbnB1dFN0cmVhbSgpKSk7IAorICAgICAgICAgICAgICAgQnVmZmVyZWRSZWFkZXIgaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGNvbi5nZXRJbnB1dFN0cmVhbSgpKSk7CiAKICAgICAgICAgICAgICAgICBTdHJpbmcgaW5wdXRMaW5lOwotICAgICAgICAgICAgICAgIGludCBpbmRleD0wOyAKKyAgICAgICAgICAgICAgICBpbnQgaW5kZXg9MDsKICAgICAgICAgICAgICAgICB3aGlsZSAoKGlucHV0TGluZSA9IGluLnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoKGluZGV4PSBpbnB1dExpbmUuaW5kZXhPZigiaHJlZj0iKSk+MCl7CiAKLSAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdXJsID0gaW5wdXRMaW5lLnN1YnN0cmluZyhpbmRleCsxKTsgIAorICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyB1cmwgPSBpbnB1dExpbmUuc3Vic3RyaW5nKGluZGV4KzEpOwogICAgICAgICAgICAgICAgICAgICAgIGlmICh1cmwuaW5kZXhPZigiaHR0cDoiKT4wKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYndzaW53YXJ3aXRod3NkbCIsIHN0YXQuUEFTUyk7Ci0gICAgICAgICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGlucHV0TGluZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndzaW53YXJ3aXRod3NkbC9lbmRwb2ludC9IZWxsby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid3NpbndhcndpdGh3c2RsL2VuZHBvaW50L0hlbGxvLmphdmEKaW5kZXggMzRhYjY1Zi4uNWM2NDA1MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid3NpbndhcndpdGh3c2RsL2VuZHBvaW50L0hlbGxvLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid3NpbndhcndpdGh3c2RsL2VuZHBvaW50L0hlbGxvLmphdmEKQEAgLTMwLDkgKzMwLDkgQEAKIEBSZXNvdXJjZQogICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBzYzsKIAotCXB1YmxpYyBIZWxsbygpIHt9CisgICAgcHVibGljIEhlbGxvKCkge30KIAotCXB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIHdobykgewotCQlyZXR1cm4gIldlYlN2Y1Rlc3QtSGVsbG8gIiArIHdobzsKLQl9CisgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgd2hvKSB7CisgICAgICAgIHJldHVybiAiV2ViU3ZjVGVzdC1IZWxsbyAiICsgd2hvOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2VqYndzaW53YXJ3aXRod3NkbC93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid3NpbndhcndpdGh3c2RsL3dlYi54bWwKaW5kZXggYWFlNTI3ZS4uZmJhMDkwMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid3NpbndhcndpdGh3c2RsL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZWpid3NpbndhcndpdGh3c2RsL3dlYi54bWwKQEAgLTE4LDEwICsxOCwxMCBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotCQkJaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CisgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQorICAgICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAKIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9leGNlcHRpb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZXhjZXB0aW9uL2J1aWxkLnhtbAppbmRleCAzMDQ5NGY3Li42YWEyMDExIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9leGNlcHRpb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2V4Y2VwdGlvbi9idWlsZC54bWwKQEAgLTM0LDYgKzM0LDYgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0icmVwb3J0LWZhaWx1cmUiPgogICAgICAgICAgICAgPGVjaG8gbWVzc2FnZT0iVGVzdCBmYWlsZWQiLz4KLSAgICA8L3RhcmdldD4gICAJCi0gICAgCisgICAgPC90YXJnZXQ+CisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2V4Y2VwdGlvbi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9leGNlcHRpb24vY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGFjNmUzYmQuLmI4ZTkwYmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2V4Y2VwdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZXhjZXB0aW9uL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzIsMTAgKzMyLDEwIEBACiAgICAgICAgIHN0YXRpYyBIZWxsb0ltcGxTZXJ2aWNlIHNlcnZpY2U7CiAKICAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCSAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJlamItZXhjZXB0aW9uIik7CisgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oImVqYi1leGNlcHRpb24iKTsKICAgICAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7CiAgICAgICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3MpOwotCSAgICBzdGF0LnByaW50U3VtbWFyeSgiZWpiLWV4Y2VwdGlvbiIpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiZWpiLWV4Y2VwdGlvbiIpOwogICAgICAgIH0KIAogICAgICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmdbXSBhcmdzKSB7CkBAIC00MywxNSArNDMsMTUgQEAKICAgICAgICAgICAgICAgICBIZWxsb0ltcGwgcG9ydCA9IHNlcnZpY2UuZ2V0SGVsbG9JbXBsUG9ydCgpOwogICAgICAgICAgICAgICAgIGZvciAoaW50IGk9MDtpPDEwO2krKykgewogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcmV0ID0gcG9ydC5zYXlIZWxsbygiQXBwc2VydmVyIFRlc3RlciAhIik7Ci0JCSAgICBpZihyZXQuaW5kZXhPZigiV2ViU3ZjVGVzdC1IZWxsbyIpID09IC0xKSB7CisgICAgICAgICAgICBpZihyZXQuaW5kZXhPZigiV2ViU3ZjVGVzdC1IZWxsbyIpID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiU2ltcGxlLUFubm90YXRpb24iLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCQkgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmV0KTsKICAgICAgICAgICAgICAgICB9CiAKLQkJLy8gd2Ugd2VyZSBzdXBwb3NlZCB0byBmYWlsICEKKyAgICAgICAgLy8gd2Ugd2VyZSBzdXBwb3NlZCB0byBmYWlsICEKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiLWV4Y2VwdGlvbiIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgZXhwZWN0ZWQgZXhjZXB0aW9uICIgKyBlLmdldE1lc3NhZ2UoKSk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9leGNlcHRpb24vZW5kcG9pbnQvSGVsbG9JbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9leGNlcHRpb24vZW5kcG9pbnQvSGVsbG9JbXBsLmphdmEKaW5kZXggNzAwODRhYy4uYThmN2IxMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvZXhjZXB0aW9uL2VuZHBvaW50L0hlbGxvSW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2V4Y2VwdGlvbi9lbmRwb2ludC9IZWxsb0ltcGwuamF2YQpAQCAtMjQsNiArMjQsNiBAQAogcHVibGljIGNsYXNzIEhlbGxvSW1wbCB7CiAKICAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyB3aG8pIHsKLQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiSSBhbSBhIGJhZCBiYWQgZWpiIGVuZHBvaW50Iik7CisgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkkgYW0gYSBiYWQgYmFkIGVqYiBlbmRwb2ludCIpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2ludmFsaWRtZXRob2RpbmplY3Rpb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvaW52YWxpZG1ldGhvZGluamVjdGlvbi9idWlsZC54bWwKaW5kZXggOGIyZjU3Ni4uYTU0NTFhOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvaW52YWxpZG1ldGhvZGluamVjdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvaW52YWxpZG1ldGhvZGluamVjdGlvbi9idWlsZC54bWwKQEAgLTM0LDYgKzM0LDYgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0icmVwb3J0LWZhaWx1cmUiPgogICAgICAgICAgICAgPGVjaG8gbWVzc2FnZT0iVGVzdCBmYWlsZWQiLz4KLSAgICA8L3RhcmdldD4gICAJCi0gICAgCisgICAgPC90YXJnZXQ+CisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2ludmFsaWRtZXRob2RpbmplY3Rpb24vY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvaW52YWxpZG1ldGhvZGluamVjdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMGExZWQ4NC4uZmE2Mzc4MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvaW52YWxpZG1ldGhvZGluamVjdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvaW52YWxpZG1ldGhvZGluamVjdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI5LDI4ICsyOSwyOCBAQAogICAgICAgICAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgICAgICBAV2ViU2VydmljZVJlZih3c2RsTG9jYXRpb249Imh0dHA6Ly9IVFRQX0hPU1Q6SFRUUF9QT1JUL0hlbGxvSW1wbFNlcnZpY2UvSGVsbG9JbXBsP1dTREwiKQotCXN0YXRpYyB2b2lkIHNldFNlcnZpY2UoSGVsbG9JbXBsU2VydmljZSBzKSB7Ci0JCi0JCVN5c3RlbS5vdXQucHJpbnRsbigiSW5qZWN0aW9uIHN1Y2Vzc2Z1bCB3aXRoICIrcy5nZXRDbGFzcygpLnRvU3RyaW5nKCkpOwotCQlzZXJ2aWNlID0gczsKLQl9CisgICAgc3RhdGljIHZvaWQgc2V0U2VydmljZShIZWxsb0ltcGxTZXJ2aWNlIHMpIHsKIAotCUBXZWJTZXJ2aWNlUmVmKHdzZGxMb2NhdGlvbj0iaHR0cDovL0hUVFBfSE9TVDpIVFRQX1BPUlQvSGVsbG9JbXBsU2VydmljZS9IZWxsb0ltcGw/V1NETCIpCi0Jc3RhdGljIGludCBzZXRGb28oSGVsbG9JbXBsU2VydmljZSBzKSB7Ci0JCXNlcnZpY2UxID0gczsKLQkJcmV0dXJuIDA7Ci0JfQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluamVjdGlvbiBzdWNlc3NmdWwgd2l0aCAiK3MuZ2V0Q2xhc3MoKS50b1N0cmluZygpKTsKKyAgICAgICAgc2VydmljZSA9IHM7CisgICAgfQogCi0JQFdlYlNlcnZpY2VSZWYod3NkbExvY2F0aW9uPSJodHRwOi8vSFRUUF9IT1NUOkhUVFBfUE9SVC9IZWxsb0ltcGxTZXJ2aWNlL0hlbGxvSW1wbD9XU0RMIikKLQlzdGF0aWMgdm9pZCBteVNlcnZpY2UoU3RyaW5nIGZvbywgSGVsbG9JbXBsU2VydmljZSBzKSB7Ci0JCXNlcnZpY2UyID0gczsKLQl9CisgICAgQFdlYlNlcnZpY2VSZWYod3NkbExvY2F0aW9uPSJodHRwOi8vSFRUUF9IT1NUOkhUVFBfUE9SVC9IZWxsb0ltcGxTZXJ2aWNlL0hlbGxvSW1wbD9XU0RMIikKKyAgICBzdGF0aWMgaW50IHNldEZvbyhIZWxsb0ltcGxTZXJ2aWNlIHMpIHsKKyAgICAgICAgc2VydmljZTEgPSBzOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBAV2ViU2VydmljZVJlZih3c2RsTG9jYXRpb249Imh0dHA6Ly9IVFRQX0hPU1Q6SFRUUF9QT1JUL0hlbGxvSW1wbFNlcnZpY2UvSGVsbG9JbXBsP1dTREwiKQorICAgIHN0YXRpYyB2b2lkIG15U2VydmljZShTdHJpbmcgZm9vLCBIZWxsb0ltcGxTZXJ2aWNlIHMpIHsKKyAgICAgICAgc2VydmljZTIgPSBzOworICAgIH0KIAogICAgICAgICBAV2ViU2VydmljZVJlZih3c2RsTG9jYXRpb249Imh0dHA6Ly9IVFRQX0hPU1Q6SFRUUF9QT1JUL0hlbGxvSW1wbFNlcnZpY2UvSGVsbG9JbXBsP1dTREwiKQotCXZvaWQgc2V0TXlTZXJ2aWNlKEhlbGxvSW1wbFNlcnZpY2UgcykgewotCQotCQlzZXJ2aWNlMyA9IHM7Ci0JfQorICAgIHZvaWQgc2V0TXlTZXJ2aWNlKEhlbGxvSW1wbFNlcnZpY2UgcykgeworCisgICAgICAgIHNlcnZpY2UzID0gczsKKyAgICB9CiAKIAogICAgICAgICBzdGF0aWMgSGVsbG9JbXBsU2VydmljZSBzZXJ2aWNlMT1udWxsOwpAQCAtNjMsMjggKzYzLDI4IEBACiAgICAgICAgIHN0YXRpYyBIZWxsb0ltcGxTZXJ2aWNlIHNlcnZpY2U7CiAKICAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCSAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ3cy1lamItaW52YWxpZG1ldGhvZGluamVjdGlvbiIpOworICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ3cy1lamItaW52YWxpZG1ldGhvZGluamVjdGlvbiIpOwogICAgICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKICAgICAgICAgICAgIGNsaWVudC5kb1Rlc3QoYXJncyk7Ci0JICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3cy1lamItaW52YWxpZG1ldGhvZGluamVjdGlvbiIpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgid3MtZWpiLWludmFsaWRtZXRob2RpbmplY3Rpb24iKTsKICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nW10gYXJncykgewogICAgICAgICAgICAgdHJ5IHsKLQkJaWYgKHNlcnZpY2UxIT1udWxsIHx8IHNlcnZpY2UyIT1udWxsIHx8IHNlcnZpY2UzIT1udWxsKSB7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZhaWxlZCA6IGludmFsaWQgaW5qZWN0aW9uIG1ldGhvZCBnb3QgaW5qZWN0ZWQgISIpOworICAgICAgICBpZiAoc2VydmljZTEhPW51bGwgfHwgc2VydmljZTIhPW51bGwgfHwgc2VydmljZTMhPW51bGwpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRmFpbGVkIDogaW52YWxpZCBpbmplY3Rpb24gbWV0aG9kIGdvdCBpbmplY3RlZCAhIik7CiAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3cy1lamItaW52YWxpZG1ldGhvZGluamVjdGlvbiIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2VzcyA6IGludmFsaWQgcmVmZXJlbmNlcyB3ZXJlIG5vdCBpbmplY3RlZCIpOwotIAkgICAgICAgIH0KKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2VzcyA6IGludmFsaWQgcmVmZXJlbmNlcyB3ZXJlIG5vdCBpbmplY3RlZCIpOworICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBIZWxsb0ltcGwgcG9ydCA9IHNlcnZpY2UuZ2V0SGVsbG9JbXBsUG9ydCgpOwogICAgICAgICAgICAgICAgIGZvciAoaW50IGk9MDtpPDEwO2krKykgewogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcmV0ID0gcG9ydC5zYXlIZWxsbygiQXBwc2VydmVyIFRlc3RlciAhIik7Ci0JCSAgICBpZihyZXQuaW5kZXhPZigiV2ViU3ZjVGVzdC1IZWxsbyIpID09IC0xKSB7CisgICAgICAgICAgICBpZihyZXQuaW5kZXhPZigiV2ViU3ZjVGVzdC1IZWxsbyIpID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid3MtZWpiLWludmFsaWRtZXRob2RpbmplY3Rpb24iLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCQkgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmV0KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndzLWVqYi1pbnZhbGlkbWV0aG9kaW5qZWN0aW9uIiwgc3RhdC5QQVNTKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2xpYmRlcGVuZGVudC0yL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9saWJkZXBlbmRlbnQtMi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGRhYThlMTAuLmExZDBiMmQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2xpYmRlcGVuZGVudC0yL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbGliZGVwZW5kZW50LTIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsOCArMTUsOCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ibGliZGVwZW5kZW50LTIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9saWJkZXBlbmRlbnQtMi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9saWJkZXBlbmRlbnQtMi9idWlsZC54bWwKaW5kZXggNDgxOTlkYy4uOTExYzY1YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbGliZGVwZW5kZW50LTIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2xpYmRlcGVuZGVudC0yL2J1aWxkLnhtbApAQCAtNzAsOCArNzAsOCBAQAogICAgICAgICA8cGFyYW0gbmFtZT0id3NpbXBvcnQuYXJncyIKICAgICAgICAgICAgICAgIHZhbHVlPSIta2VlcCAtZCAke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQgaHR0cDovLyR7aHR0cC5ob3N0fToke2h0dHAucG9ydH0vSGVsbG9JbXBsU2VydmljZS9IZWxsb0ltcGw/V1NETCIvPgogICAgICAgPC9hbnRjYWxsPgotICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IiAKLSAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvajJlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtcnQuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXRvb2xzLmphciIgCisgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2oyZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXJ0Lmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy10b29scy5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iY2xpZW50LyoqIi8+CiAgICAgPC90YXJnZXQ+CiAKQEAgLTgyLDcgKzgyLDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bmNsaWVudCI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi1jbGllbnQiPgogICAgICAgICA8cGFyYW0gbmFtZT0iY2xpZW50LWNsYXNzIiB2YWx1ZT0iY2xpZW50LkNsaWVudCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbGliZGVwZW5kZW50LTIvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbGliZGVwZW5kZW50LTIvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDk5OTUxODYuLjYxYWZhMTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2xpYmRlcGVuZGVudC0yL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9saWJkZXBlbmRlbnQtMi9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTM3LDIxICszNywyMSBAQAogICAgICAgICBzdGF0aWMgSGVsbG9JbXBsU2VydmljZSBzZXJ2aWNlOwogCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQkgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiZWpiLWxpYmRlcGVuZGVudC0yLXNlcnZpY2UiKTsKKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiZWpiLWxpYmRlcGVuZGVudC0yLXNlcnZpY2UiKTsKICAgICAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7CiAgICAgICAgICAgICBjbGllbnQuZG9TeW5jVGVzdCgpOwotCSAgICBzdGF0LnByaW50U3VtbWFyeSgiZWpiLWxpYmRlcGVuZGVudC0yLXNlcnZpY2UiKTsKKyAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImVqYi1saWJkZXBlbmRlbnQtMi1zZXJ2aWNlIik7CiAgICAgICAgIH0KIAogICAgICAgICBwdWJsaWMgdm9pZCBkb1N5bmNUZXN0KCkgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBIZWxsb0ltcGwgcG9ydCA9IHNlcnZpY2UuZ2V0SGVsbG9JbXBsUG9ydCgpOwogICAgICAgICAgICAgICAgIFJldFZhbCByZXQgPSBwb3J0LnNheUhlbGxvKCJIaSBMaWJEZXBlbmRlbnQiKTsKLQkJaWYocmV0LmdldFJldFZhbCgpLmluZGV4T2YoIkxpYkRlcCIpID09IC0xKSB7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldST05HIEdSRUVUSU5HICIgKyByZXQuZ2V0UmV0VmFsKCkpOworICAgICAgICBpZihyZXQuZ2V0UmV0VmFsKCkuaW5kZXhPZigiTGliRGVwIikgPT0gLTEpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiV1JPTkcgR1JFRVRJTkcgIiArIHJldC5nZXRSZXRWYWwoKSk7CiAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamItbGliZGVwZW5kZW50LTItc2VydmljZS10ZXN0Iiwgc3RhdC5GQUlMKTsKLQkJICAgIHJldHVybjsKLQkJfQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJldCk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJldC5nZXRSZXRWYWwoKSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYi1saWJkZXBlbmRlbnQtMi1zZXJ2aWNlLXRlc3QiLCBzdGF0LlBBU1MpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbGliZGVwZW5kZW50L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9saWJkZXBlbmRlbnQvYnVpbGQucHJvcGVydGllcwppbmRleCAwODUwODUyLi4wNDE3MzU0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9saWJkZXBlbmRlbnQvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9saWJkZXBlbmRlbnQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsOCArMTUsOCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ibGliZGVwZW5kZW50Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbGliZGVwZW5kZW50L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2xpYmRlcGVuZGVudC9idWlsZC54bWwKaW5kZXggOWEzN2Q1OC4uOTk1Y2RiNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbGliZGVwZW5kZW50L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9saWJkZXBlbmRlbnQvYnVpbGQueG1sCkBAIC02OSw4ICs2OSw4IEBACiAgICAgICAgIDxwYXJhbSBuYW1lPSJ3c2ltcG9ydC5hcmdzIgogICAgICAgICAgICAgICAgdmFsdWU9Ii1rZWVwICAtWGVuZG9yc2VkIC1kICR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCBodHRwOi8vJHtodHRwLmhvc3R9OiR7aHR0cC5wb3J0fS9IZWxsb0ltcGxTZXJ2aWNlL0hlbGxvSW1wbD9XU0RMIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgICA8amF2YWMgdmVyYm9zZT0idHJ1ZSIgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiIAotICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9qMmVlLmphcjoke2Vudi5TMUFTX0hPTUV9L21vZHVsZXMvd2Vic2VydmljZXMtb3NnaS5qYXI6JHtlbnYuUzFBU19IT01FfS9tb2R1bGVzL3dlYnNlcnZpY2VzLWFwaS1vc2dpLmphcjoke2Vudi5TMUFTX0hPTUV9L21vZHVsZXMvamF4Yi1vc2dpLmphcjoke2Vudi5TMUFTX0hPTUV9L21vZHVsZXMvamF4Yi1hcGktb3NnaS5qYXIiIAorICAgICAgPGphdmFjIHZlcmJvc2U9InRydWUiIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9qMmVlLmphcjoke2Vudi5TMUFTX0hPTUV9L21vZHVsZXMvd2Vic2VydmljZXMtb3NnaS5qYXI6JHtlbnYuUzFBU19IT01FfS9tb2R1bGVzL3dlYnNlcnZpY2VzLWFwaS1vc2dpLmphcjoke2Vudi5TMUFTX0hPTUV9L21vZHVsZXMvamF4Yi1vc2dpLmphcjoke2Vudi5TMUFTX0hPTUV9L21vZHVsZXMvamF4Yi1hcGktb3NnaS5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iY2xpZW50LyoqIi8+CiAgICAgPC90YXJnZXQ+CiAKQEAgLTg2LDcgKzg2LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bmNsaWVudCI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi1jbGllbnQiPgogICAgICAgICA8cGFyYW0gbmFtZT0iY2xpZW50LWNsYXNzIiB2YWx1ZT0iY2xpZW50LkNsaWVudCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbGliZGVwZW5kZW50L2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2xpYmRlcGVuZGVudC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggZGFkYmE2Ni4uMzUxMDM3NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbGliZGVwZW5kZW50L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9saWJkZXBlbmRlbnQvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zNywxMCArMzcsMTAgQEAKICAgICAgICAvLyBzdGF0aWMgSGVsbG9JbXBsU2VydmljZSBzZXJ2aWNlOwogCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQkgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiZWpiLWxpYmRlcGVuZGVudC1zZXJ2aWNlIik7CisgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oImVqYi1saWJkZXBlbmRlbnQtc2VydmljZSIpOwogICAgICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKICAgICAgICAgICAgIGNsaWVudC5kb1N5bmNUZXN0KCk7Ci0JICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJlamItbGliZGVwZW5kZW50LXNlcnZpY2UiKTsKKyAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImVqYi1saWJkZXBlbmRlbnQtc2VydmljZSIpOwogICAgICAgICB9CiAKICAgICAgICAgcHVibGljIHZvaWQgZG9TeW5jVGVzdCgpIHsKQEAgLTQ4LDExICs0OCwxMSBAQAogICAgICAgICAgICAgICAgIEhlbGxvSW1wbFNlcnZpY2Ugc2VydmljZSA9IG5ldyBIZWxsb0ltcGxTZXJ2aWNlKCk7CiAgICAgICAgICAgICAgICAgSGVsbG9JbXBsIHBvcnQgPSBzZXJ2aWNlLmdldEhlbGxvSW1wbFBvcnQoKTsKICAgICAgICAgICAgICAgICBSZXRWYWwgcmV0ID0gcG9ydC5zYXlIZWxsbygiSGkgTGliRGVwZW5kZW50Iik7Ci0JCWlmKHJldC5nZXRSZXRWYWwoKS5pbmRleE9mKCJMaWJEZXAiKSA9PSAtMSkgewotCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJXUk9ORyBHUkVFVElORyAiICsgcmV0LmdldFJldFZhbCgpKTsKKyAgICAgICAgaWYocmV0LmdldFJldFZhbCgpLmluZGV4T2YoIkxpYkRlcCIpID09IC0xKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIldST05HIEdSRUVUSU5HICIgKyByZXQuZ2V0UmV0VmFsKCkpOwogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiLWxpYmRlcGVuZGVudC1zZXJ2aWNlLXRlc3QiLCBzdGF0LkZBSUwpOwotCQkgICAgcmV0dXJuOwotCQl9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmV0KTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmV0LmdldFJldFZhbCgpKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiLWxpYmRlcGVuZGVudC1zZXJ2aWNlLXRlc3QiLCBzdGF0LlBBU1MpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbG9jYWxyZW1vdGVlamJ3ZWJzZXJ2aWNlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2xvY2FscmVtb3RlZWpid2Vic2VydmljZS9idWlsZC54bWwKaW5kZXggZjdjYTQzOC4uNmRkMGRmZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbG9jYWxyZW1vdGVlamJ3ZWJzZXJ2aWNlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9sb2NhbHJlbW90ZWVqYndlYnNlcnZpY2UvYnVpbGQueG1sCkBAIC0yMiw3ICsyMiw3IEBACiBdPgogCiA8cHJvamVjdCBuYW1lPSJIZWxsbyIgZGVmYXVsdD0iY29yZSIgYmFzZWRpcj0iLiI+Ci0gCisKIAogICAgICZjb21tb25CdWlsZDsKICAgICA8cHJvcGVydHkgbmFtZT0ic3JjLW5hbWUiIHZhbHVlPSJlbmRwb2ludC9XZWJTZXJ2aWNlRUpCLmphdmEiLz4KQEAgLTMyLDMwICszMiwzMCBAQAogCiAKICAgICA8dGFyZ2V0IG5hbWU9InByaXZhdGUtdW5kZXBsb3kiPgotCTxhbnRjYWxsIHRhcmdldD0iYXV0b3VuZGVwbG95LWZpbGUiPgotCQk8cGFyYW0gbmFtZT0iZmlsZW5hbWUiIHZhbHVlPSJFamJDbGllbnQuamFyIi8+Ci0JPC9hbnRjYWxsPgotCTxhbnRjYWxsIHRhcmdldD0iYXV0b3VuZGVwbG95LWZpbGUiPgotCQk8cGFyYW0gbmFtZT0iZmlsZW5hbWUiIHZhbHVlPSJXZWJTZXJ2aWNlRUpCLmphciIvPgotCTwvYW50Y2FsbD4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImF1dG91bmRlcGxveS1maWxlIj4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImZpbGVuYW1lIiB2YWx1ZT0iRWpiQ2xpZW50LmphciIvPgorICAgIDwvYW50Y2FsbD4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImF1dG91bmRlcGxveS1maWxlIj4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImZpbGVuYW1lIiB2YWx1ZT0iV2ViU2VydmljZUVKQi5qYXIiLz4KKyAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKIAogICAgIDx0YXJnZXQgbmFtZT0icHJpdmF0ZS1ydW4iPgotCTxhbnRjYWxsIHRhcmdldD0iY2xlYW4iLz4KLQk8YW50Y2FsbCB0YXJnZXQ9IndzZGwtaW1wb3J0Ij4KLQkJPHBhcmFtIG5hbWU9InNlcnZlciIgdmFsdWU9IldlYlNlcnZpY2VFSkIiLz4KLQkJPHBhcmFtIG5hbWU9InBvcnQiIHZhbHVlPSJXZWJTZXJ2aWNlRUpCIi8+Ci0JPC9hbnRjYWxsPgorICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4iLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9IndzZGwtaW1wb3J0Ij4KKyAgICAgICAgPHBhcmFtIG5hbWU9InNlcnZlciIgdmFsdWU9IldlYlNlcnZpY2VFSkIiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InBvcnQiIHZhbHVlPSJXZWJTZXJ2aWNlRUpCIi8+CisgICAgPC9hbnRjYWxsPgogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMiCiAgICAgICAgICAgICBpbmNsdWRlcz0iZWpiL0hlbGxvRUpCLmphdmEiPgogICAgICAgICAgICAgPGNsYXNzcGF0aCByZWZpZD0iY2xhc3NwYXRoIi8+CiAgICAgICAgIDwvamF2YWM+CiAgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2F1dG9kZXBsb3kvRWpiQ2xpZW50LmphciIKLQkgICAgYmFzZWRpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzIgotCSAgICBpbmNsdWRlcz0iZWpiLyoqLGVuZHBvaW50LyoqIi8+Ci0JPHdhaXRmb3IgbWF4d2FpdD0iMTAwIiBtYXh3YWl0dW5pdD0ic2Vjb25kIj4KLSAgICAgICAJICAgIDxvcj4KKyAgICAgICAgYmFzZWRpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzIgorICAgICAgICBpbmNsdWRlcz0iZWpiLyoqLGVuZHBvaW50LyoqIi8+CisgICAgPHdhaXRmb3IgbWF4d2FpdD0iMTAwIiBtYXh3YWl0dW5pdD0ic2Vjb25kIj4KKyAgICAgICAgICAgICAgIDxvcj4KICAgICAgICAgICAgICAgICA8YXZhaWxhYmxlIGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2F1dG9kZXBsb3kvRWpiQ2xpZW50Lmphcl9kZXBsb3llZCIvPgogICAgICAgICAgICAgICAgIDxhdmFpbGFibGUgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvYXV0b2RlcGxveS9FamJDbGllbnQuamFyX2RlcGxveUZhaWxlZCIvPgogICAgICAgICAgICAgPC9vcj4KQEAgLTY2LDE3ICs2NiwxNyBAQAogICAgICAgICA8Y29uZGl0aW9uIHByb3BlcnR5PSJkZXBsb3lfZmFpbGVkIj4KICAgICAgICAgICAgIDxhdmFpbGFibGUgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvYXV0b2RlcGxveS9FamJDbGllbnQuamFyX2RlcGxveUZhaWxlZCIvPgogICAgICAgICA8L2NvbmRpdGlvbj4KLQk8ZmFpbCBpZj0iZGVwbG95X2ZhaWxlZCIgbWVzc2FnZT0iRGVwbG95bWVudCBmYWlsZWQiLz4KKyAgICA8ZmFpbCBpZj0iZGVwbG95X2ZhaWxlZCIgbWVzc2FnZT0iRGVwbG95bWVudCBmYWlsZWQiLz4KICAgICAgICAgPGJhc2VuYW1lIGZpbGU9IiR7Y2xpZW50LXNyYy1uYW1lfSIgcHJvcGVydHk9ImNsaWVudCIgc3VmZml4PSIuamF2YSIvPgogICAgICAgICA8ZGlybmFtZSBmaWxlPSIke2NsaWVudC1zcmMtbmFtZX0iIHByb3BlcnR5PSJjbGllbnQtZGlyZWN0b3J5Ii8+Ci0gICAgICAgIDxiYXNlbmFtZSBmaWxlPSIke2NsaWVudC1kaXJlY3Rvcnl9IiBwcm9wZXJ0eT0iY2xpZW50LXBrZy1uYW1lIi8+IAorICAgICAgICA8YmFzZW5hbWUgZmlsZT0iJHtjbGllbnQtZGlyZWN0b3J5fSIgcHJvcGVydHk9ImNsaWVudC1wa2ctbmFtZSIvPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0iY2xpZW50LWNsYXNzLW5hbWUiIHZhbHVlPSIke2NsaWVudC1wa2ctbmFtZX0vJHtjbGllbnR9LmNsYXNzIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNsaWVudCIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jbGllbnQiLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iUnVubmluZyBhcHBjbGllbnQgd2l0aCAke2NsaWVudC1wa2ctbmFtZX0uJHtjbGllbnR9Ii8+CiAgICAgICAgIDx1bmphciBzcmM9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiBkZXN0PSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMiLz4KICAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vYXBwY2xpZW50IiBkaXI9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3NlcyI+Ci0gICAgICAgICAgICA8YXJnIHZhbHVlPSItRG9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnQ9JHtvcmIucG9ydH0iLz4gCi0gICAgICAgICAgICA8YXJnIHZhbHVlPSIke2NsaWVudC1wa2ctbmFtZX0uJHtjbGllbnR9Ii8+ICAgIAorICAgICAgICAgICAgPGFyZyB2YWx1ZT0iLURvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0PSR7b3JiLnBvcnR9Ii8+CisgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2NsaWVudC1wa2ctbmFtZX0uJHtjbGllbnR9Ii8+CiAgICAgICAgIDwvZXhlYz4KICAgICA8L3RhcmdldD4KIApAQCAtODYsNiArODYsNiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJyZXBvcnQtZmFpbHVyZSI+CiAgICAgICAgICAgICA8ZWNobyBtZXNzYWdlPSJUZXN0IEZBSUxFRCIvPgotICAgIDwvdGFyZ2V0PiAgIAkKLSAgICAKKyAgICA8L3RhcmdldD4KKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbG9jYWxyZW1vdGVlamJ3ZWJzZXJ2aWNlL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2xvY2FscmVtb3RlZWpid2Vic2VydmljZS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMWVmN2ExMy4uZTg3OGU3YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbG9jYWxyZW1vdGVlamJ3ZWJzZXJ2aWNlL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9sb2NhbHJlbW90ZWVqYndlYnNlcnZpY2UvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0xNyw3ICsxNyw3IEBACiBwYWNrYWdlIGNsaWVudDsKIAogaW1wb3J0IGpha2FydGEuZWpiLkVKQjsKLWltcG9ydCBlamIuSGVsbG87IAoraW1wb3J0IGVqYi5IZWxsbzsKIAogaW1wb3J0IGNvbS5zdW4uZWp0ZS5jY2wucmVwb3J0ZXIuU2ltcGxlUmVwb3J0ZXJBZGFwdGVyOwogCkBAIC0yNywyNCArMjcsMjQgQEAKICAgICAgICAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICAgICAgQEVKQihtYXBwZWROYW1lPSJlamIuSGVsbG8iKQotCXN0YXRpYyBIZWxsbyBoZWxsbzsKKyAgICBzdGF0aWMgSGVsbG8gaGVsbG87CiAKICAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCSAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJsb2NhbHJlbW90ZWVqYndlYnNlcnZpY2UtaXNzdWUiKTsKKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigibG9jYWxyZW1vdGVlamJ3ZWJzZXJ2aWNlLWlzc3VlIik7CiAgICAgICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAgICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzKTsKLQkgICAgc3RhdC5wcmludFN1bW1hcnkoImxvY2FscmVtb3RlZWpid2Vic2VydmljZS1pc3N1ZSIpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgibG9jYWxyZW1vdGVlamJ3ZWJzZXJ2aWNlLWlzc3VlIik7CiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaT0wO2k8MTA7aSsrKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyByZXQgPSBoZWxsby5pbnZva2UoIkhlbGxvIFRlc3RlciAhIik7Ci0JCSAgICBpZihyZXQuaW5kZXhPZigiSGVsbG8gVGVzdGVyIikgPT0gLTEpIHsKKyAgICAgICAgICAgIGlmKHJldC5pbmRleE9mKCJIZWxsbyBUZXN0ZXIiKSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIlNpbXBsZS1Bbm5vdGF0aW9uIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQkJICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJldCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJsb2NhbHJlbW90ZWVqYndlYnNlcnZpY2UtaXNzdWUiLCBzdGF0LlBBU1MpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbG9jYWxyZW1vdGVlamJ3ZWJzZXJ2aWNlL2VqYi9IZWxsby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbG9jYWxyZW1vdGVlamJ3ZWJzZXJ2aWNlL2VqYi9IZWxsby5qYXZhCmluZGV4IDg2YWQ0NGYuLjg2ZWQ2OGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2xvY2FscmVtb3RlZWpid2Vic2VydmljZS9lamIvSGVsbG8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9sb2NhbHJlbW90ZWVqYndlYnNlcnZpY2UvZWpiL0hlbGxvLmphdmEKQEAgLTIwLDUgKzIwLDUgQEAKIAogQFJlbW90ZQogcHVibGljIGludGVyZmFjZSBIZWxsbyB7Ci0JcHVibGljIFN0cmluZyBpbnZva2UoU3RyaW5nIG1zZyk7CisgICAgcHVibGljIFN0cmluZyBpbnZva2UoU3RyaW5nIG1zZyk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9sb2NhbHJlbW90ZWVqYndlYnNlcnZpY2UvZWpiL0hlbGxvRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9sb2NhbHJlbW90ZWVqYndlYnNlcnZpY2UvZWpiL0hlbGxvRUpCLmphdmEKaW5kZXggZDk1ZjM5MS4uOTUwN2Y5NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbG9jYWxyZW1vdGVlamJ3ZWJzZXJ2aWNlL2VqYi9IZWxsb0VKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2xvY2FscmVtb3RlZWpid2Vic2VydmljZS9lamIvSGVsbG9FSkIuamF2YQpAQCAtMjIsMTggKzIyLDE4IEBACiBpbXBvcnQgZW5kcG9pbnQuV2ViU2VydmljZUVKQlNlcnZpY2U7CiBpbXBvcnQgZW5kcG9pbnQuV2ViU2VydmljZUVKQjsKIAotQFN0YXRlbGVzcyAKK0BTdGF0ZWxlc3MKIHB1YmxpYyBjbGFzcyBIZWxsb0VKQiBpbXBsZW1lbnRzIEhlbGxvIHsKIAogCiAgICBAV2ViU2VydmljZVJlZgogICAgV2ViU2VydmljZUVKQlNlcnZpY2Ugd2ViU2VydmljZTsKLSAKKwogICAgIHB1YmxpYyBTdHJpbmcgaW52b2tlKFN0cmluZyBzdHJpbmcpIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpbnZva2VkIHdpdGggIiArIHN0cmluZyk7IAotCVN5c3RlbS5vdXQucHJpbnRsbigiZ2V0dGluZyB0aGUgcG9ydCBub3cgZnJvbSAiICsgd2ViU2VydmljZSk7Ci0JV2ViU2VydmljZUVKQiBlamIgPSB3ZWJTZXJ2aWNlLmdldFdlYlNlcnZpY2VFSkJQb3J0KCk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJnb3QgIiArIGVqYik7Ci0JcmV0dXJuIGVqYi5zYXlIZWxsbyhzdHJpbmcpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImludm9rZWQgd2l0aCAiICsgc3RyaW5nKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oImdldHRpbmcgdGhlIHBvcnQgbm93IGZyb20gIiArIHdlYlNlcnZpY2UpOworICAgIFdlYlNlcnZpY2VFSkIgZWpiID0gd2ViU2VydmljZS5nZXRXZWJTZXJ2aWNlRUpCUG9ydCgpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZ290ICIgKyBlamIpOworICAgIHJldHVybiBlamIuc2F5SGVsbG8oc3RyaW5nKTsKICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2xvY2FscmVtb3RlZWpid2Vic2VydmljZS9lbmRwb2ludC9OZXdTZXNzaW9uQmVhbkxvY2FsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9sb2NhbHJlbW90ZWVqYndlYnNlcnZpY2UvZW5kcG9pbnQvTmV3U2Vzc2lvbkJlYW5Mb2NhbC5qYXZhCmluZGV4IGI5YjU3MmYuLjllNmE5YjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2xvY2FscmVtb3RlZWpid2Vic2VydmljZS9lbmRwb2ludC9OZXdTZXNzaW9uQmVhbkxvY2FsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbG9jYWxyZW1vdGVlamJ3ZWJzZXJ2aWNlL2VuZHBvaW50L05ld1Nlc3Npb25CZWFuTG9jYWwuamF2YQpAQCAtMjQsNiArMjQsNiBAQAogICovCiBATG9jYWwKIHB1YmxpYyBpbnRlcmZhY2UgTmV3U2Vzc2lvbkJlYW5Mb2NhbCB7Ci0gICAKKwogfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9sb2NhbHJlbW90ZWVqYndlYnNlcnZpY2UvZW5kcG9pbnQvTmV3U2Vzc2lvbkJlYW5SZW1vdGUuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2xvY2FscmVtb3RlZWpid2Vic2VydmljZS9lbmRwb2ludC9OZXdTZXNzaW9uQmVhblJlbW90ZS5qYXZhCmluZGV4IDYzNDQ0NDAuLjAyZjkyNTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2xvY2FscmVtb3RlZWpid2Vic2VydmljZS9lbmRwb2ludC9OZXdTZXNzaW9uQmVhblJlbW90ZS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL2xvY2FscmVtb3RlZWpid2Vic2VydmljZS9lbmRwb2ludC9OZXdTZXNzaW9uQmVhblJlbW90ZS5qYXZhCkBAIC0yNCw2ICsyNCw2IEBACiAgKi8KIEBSZW1vdGUKIHB1YmxpYyBpbnRlcmZhY2UgTmV3U2Vzc2lvbkJlYW5SZW1vdGUgewotICAgCisKIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbWVzc2FnZWN0eHQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbWVzc2FnZWN0eHQvYnVpbGQueG1sCmluZGV4IDMwNDk0ZjcuLjZhYTIwMTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL21lc3NhZ2VjdHh0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9tZXNzYWdlY3R4dC9idWlsZC54bWwKQEAgLTM0LDYgKzM0LDYgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0icmVwb3J0LWZhaWx1cmUiPgogICAgICAgICAgICAgPGVjaG8gbWVzc2FnZT0iVGVzdCBmYWlsZWQiLz4KLSAgICA8L3RhcmdldD4gICAJCi0gICAgCisgICAgPC90YXJnZXQ+CisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL21lc3NhZ2VjdHh0L2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL21lc3NhZ2VjdHh0L2NsaWVudC9DbGllbnQuamF2YQppbmRleCA5ODM3NDU2Li5lNzljZWJjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9tZXNzYWdlY3R4dC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbWVzc2FnZWN0eHQvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMiwxMCArMzIsMTAgQEAKICAgICAgICAgc3RhdGljIEhlbGxvSW1wbFNlcnZpY2Ugc2VydmljZTsKIAogICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIndlYnNlcnZpY2VzLWVqYi1tc2djdHh0Iik7CisgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIndlYnNlcnZpY2VzLWVqYi1tc2djdHh0Iik7CiAgICAgICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAgICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzKTsKLQkgICAgc3RhdC5wcmludFN1bW1hcnkoIndlYnNlcnZpY2VzLWVqYi1tc2djdHh0Iik7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3ZWJzZXJ2aWNlcy1lamItbXNnY3R4dCIpOwogICAgICAgIH0KIAogICAgICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmdbXSBhcmdzKSB7CkBAIC00MywxMSArNDMsMTEgQEAKICAgICAgICAgICAgICAgICBIZWxsb0ltcGwgcG9ydCA9IHNlcnZpY2UuZ2V0SGVsbG9JbXBsUG9ydCgpOwogICAgICAgICAgICAgICAgIGZvciAoaW50IGk9MDtpPDEwO2krKykgewogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcmV0ID0gcG9ydC5zYXlIZWxsbygiQXBwc2VydmVyIFRlc3RlciAhIik7Ci0JCSAgICBpZihyZXQuaW5kZXhPZigiV2ViU3ZjVGVzdC1IZWxsbyIpID09IC0xKSB7CisgICAgICAgICAgICBpZihyZXQuaW5kZXhPZigiV2ViU3ZjVGVzdC1IZWxsbyIpID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiLW1zZ2N0eHQiLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCQkgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmV0KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYi1tc2djdHh0Iiwgc3RhdC5QQVNTKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL21lc3NhZ2VjdHh0L2VuZHBvaW50L0hlbGxvSW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbWVzc2FnZWN0eHQvZW5kcG9pbnQvSGVsbG9JbXBsLmphdmEKaW5kZXggOTFmNjQ1OS4uNTZjN2QzOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbWVzc2FnZWN0eHQvZW5kcG9pbnQvSGVsbG9JbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbWVzc2FnZWN0eHQvZW5kcG9pbnQvSGVsbG9JbXBsLmphdmEKQEAgLTMwLDExICszMCwxMSBAQAogCiAKICAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyB3aG8pIHsKLQlpZihlamJzYyAhPSBudWxsKSB7CisgICAgaWYoZWpic2MgIT0gbnVsbCkgewogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZWpic2MuZ2V0TWVzc2FnZUNvbnRleHQoKSk7CiAgICAgICAgICAgIGlmIChlamJzYy5nZXRNZXNzYWdlQ29udGV4dCgpIGluc3RhbmNlb2YgamFrYXJ0YS54bWwud3MuaGFuZGxlci5NZXNzYWdlQ29udGV4dCl7CiAgICAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJZWVlZWSIgK2VqYnNjLmdldE1lc3NhZ2VDb250ZXh0KCkuZ2V0Q2xhc3MoKSk7Ci0gICAgICAgIAlyZXR1cm4gIldlYlN2Y1Rlc3QtSGVsbG8gIiArIHdobzsKKyAgICAgICAgICAgIHJldHVybiAiV2ViU3ZjVGVzdC1IZWxsbyAiICsgd2hvOwogfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oIk5OTiAiICsgZWpic2MuZ2V0TWVzc2FnZUNvbnRleHQoKS5nZXRDbGFzcygpKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL21ldGhvZGluamVjdGlvbi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9tZXRob2RpbmplY3Rpb24vYnVpbGQueG1sCmluZGV4IGE5NGZiNTIuLmM5OTc3YTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL21ldGhvZGluamVjdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbWV0aG9kaW5qZWN0aW9uL2J1aWxkLnhtbApAQCAtMzQsNiArMzQsNiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJyZXBvcnQtZmFpbHVyZSI+CiAgICAgICAgICAgICA8ZWNobyBtZXNzYWdlPSJUZXN0IGZhaWxlZCIvPgotICAgIDwvdGFyZ2V0PiAgIAkKLSAgICAKKyAgICA8L3RhcmdldD4KKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbWV0aG9kaW5qZWN0aW9uL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL21ldGhvZGluamVjdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMTgxODk0OS4uZTBjYTUzMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbWV0aG9kaW5qZWN0aW9uL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9tZXRob2RpbmplY3Rpb24vY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yOCwxOCArMjgsMTggQEAKICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAotCUBXZWJTZXJ2aWNlUmVmKHdzZGxMb2NhdGlvbj0iaHR0cDovL0hUVFBfSE9TVDpIVFRQX1BPUlQvSGVsbG9JbXBsU2VydmljZS9IZWxsb0ltcGw/V1NETCIpCi0Jc3RhdGljIHZvaWQgc2V0U2VydmljZShIZWxsb0ltcGxTZXJ2aWNlIHMpIHsKLQkJc2VydmljZSA9IHM7Ci0JfQorICAgIEBXZWJTZXJ2aWNlUmVmKHdzZGxMb2NhdGlvbj0iaHR0cDovL0hUVFBfSE9TVDpIVFRQX1BPUlQvSGVsbG9JbXBsU2VydmljZS9IZWxsb0ltcGw/V1NETCIpCisgICAgc3RhdGljIHZvaWQgc2V0U2VydmljZShIZWxsb0ltcGxTZXJ2aWNlIHMpIHsKKyAgICAgICAgc2VydmljZSA9IHM7CisgICAgfQogCiAgICAgICAgIHN0YXRpYyBIZWxsb0ltcGxTZXJ2aWNlIHNlcnZpY2U7CiAKICAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCSAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ3cy1lamItbWV0aG9kLWluamVjdGlvbiIpOworICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ3cy1lamItbWV0aG9kLWluamVjdGlvbiIpOwogICAgICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKICAgICAgICAgICAgIGNsaWVudC5kb1Rlc3QoYXJncyk7Ci0JICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3cy1lamItbWV0aG9kLWluamVjdGlvbiIpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgid3MtZWpiLW1ldGhvZC1pbmplY3Rpb24iKTsKICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nW10gYXJncykgewpAQCAtNDcsMTEgKzQ3LDExIEBACiAgICAgICAgICAgICAgICAgSGVsbG9JbXBsIHBvcnQgPSBzZXJ2aWNlLmdldEhlbGxvSW1wbFBvcnQoKTsKICAgICAgICAgICAgICAgICBmb3IgKGludCBpPTA7aTwxMDtpKyspIHsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJldCA9IHBvcnQuc2F5SGVsbG8oIkFwcHNlcnZlciBUZXN0ZXIgISIpOwotCQkgICAgaWYocmV0LmluZGV4T2YoIldlYlN2Y1Rlc3QtSGVsbG8iKSA9PSAtMSkgeworICAgICAgICAgICAgaWYocmV0LmluZGV4T2YoIldlYlN2Y1Rlc3QtSGVsbG8iKSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndzLWVqYi1tZXRob2QtaW5qZWN0aW9uIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQkJICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJldCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3cy1lamItbWV0aG9kLWluamVjdGlvbiIsIHN0YXQuUEFTUyk7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9tc2djdHhpbnRlcmNlcHRvci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9tc2djdHhpbnRlcmNlcHRvci9idWlsZC54bWwKaW5kZXggMDZjN2FjYy4uYTRmYmM0OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbXNnY3R4aW50ZXJjZXB0b3IvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL21zZ2N0eGludGVyY2VwdG9yL2J1aWxkLnhtbApAQCAtMzQsNiArMzQsNiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJyZXBvcnQtZmFpbHVyZSI+CiAgICAgICAgICAgICA8ZWNobyBtZXNzYWdlPSJUZXN0IGZhaWxlZCIvPgotICAgIDwvdGFyZ2V0PiAgIAkKLSAgICAKKyAgICA8L3RhcmdldD4KKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbXNnY3R4aW50ZXJjZXB0b3IvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbXNnY3R4aW50ZXJjZXB0b3IvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGQ0NTVjM2EuLjJhY2EyOTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL21zZ2N0eGludGVyY2VwdG9yL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9tc2djdHhpbnRlcmNlcHRvci9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTMyLDIxICszMiwyMSBAQAogICAgICAgICBzdGF0aWMgSGVsbG9FSkJTZXJ2aWNlIHNlcnZpY2U7CiAKICAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCSAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJtc2djdHh0LWludm9jYXRpb25oYW5kbGVyY3R4dCIpOworICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJtc2djdHh0LWludm9jYXRpb25oYW5kbGVyY3R4dCIpOwogICAgICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKICAgICAgICAgICAgIGNsaWVudC5kb1Rlc3QoYXJncyk7Ci0JICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJtc2djdHh0LWludm9jYXRpb25oYW5kbGVyY3R4dCIpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgibXNnY3R4dC1pbnZvY2F0aW9uaGFuZGxlcmN0eHQiKTsKICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nW10gYXJncykgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBIZWxsbyBwb3J0ID0gc2VydmljZS5nZXRIZWxsb0VKQlBvcnQoKTsKICAgICAgICAgICAgICAgICBTdHJpbmcgcmV0ID0gcG9ydC5zYXlIZWxsbygiQXBwc2VydmVyIFRlc3RlciAhIik7Ci0JCWlmKHJldCA9PSBudWxsKSB7CisgICAgICAgIGlmKHJldCA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBncmVldGluZyAiICsgcmV0KTsKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIm1zZ2N0eHQtaW52b2NhdGlvbmhhbmRsZXJjdHh0Iiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCQl9CisgICAgICAgIH0KICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmV0KTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygibXNnY3R4dC1pbnZvY2F0aW9uaGFuZGxlcmN0eHQiLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbXNnY3R4aW50ZXJjZXB0b3IvZW5kcG9pbnQvSGVsbG8uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL21zZ2N0eGludGVyY2VwdG9yL2VuZHBvaW50L0hlbGxvLmphdmEKaW5kZXggZGQ0YjY0Mi4uNGI4ZjllZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbXNnY3R4aW50ZXJjZXB0b3IvZW5kcG9pbnQvSGVsbG8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9tc2djdHhpbnRlcmNlcHRvci9lbmRwb2ludC9IZWxsby5qYXZhCkBAIC0yMSw1ICsyMSw1IEBACiBAV2ViU2VydmljZQogcHVibGljIGludGVyZmFjZSBIZWxsbyB7CiAKLQlwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyB3aG8pOworICAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIHdobyk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9tc2djdHhpbnRlcmNlcHRvci9lbmRwb2ludC9IZWxsb0VKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbXNnY3R4aW50ZXJjZXB0b3IvZW5kcG9pbnQvSGVsbG9FSkIuamF2YQppbmRleCAxMDIwYTFiLi4xMWFhMmIxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9tc2djdHhpbnRlcmNlcHRvci9lbmRwb2ludC9IZWxsb0VKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL21zZ2N0eGludGVyY2VwdG9yL2VuZHBvaW50L0hlbGxvRUpCLmphdmEKQEAgLTQwLDcgKzQwLDcgQEAKIAogICAgIEBBcm91bmRJbnZva2UKICAgICBwcml2YXRlIE9iamVjdCBpbnRlcmNlcHRCdXNpbmVzc01ldGhvZChJbnZvY2F0aW9uQ29udGV4dCBpbnZDdHgpIHsKLQl0cnkgeworICAgIHRyeSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbnRleHREYXRhIiArIGludkN0eC5nZXRDb250ZXh0RGF0YSgpKTsKICAgICAgICAgICAgIC8vVGhpcyBpcyBqdXN0IHRvIGdldCB0aGUgaW52b2NhdGlvbiB0cmFjZQogICAgICAgICAgICAgLy9yZW1vdmUgb25jZSBidWcgaXMgZml4ZWQKQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9Ci0JfSBjYXRjaChUaHJvd2FibGUgdCkgeyB0LnByaW50U3RhY2tUcmFjZSgpO30KKyAgICB9IGNhdGNoKFRocm93YWJsZSB0KSB7IHQucHJpbnRTdGFja1RyYWNlKCk7fQogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9tc2djdHh0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL21zZ2N0eHQvYnVpbGQueG1sCmluZGV4IDMwNDk0ZjcuLjZhYTIwMTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL21zZ2N0eHQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL21zZ2N0eHQvYnVpbGQueG1sCkBAIC0zNCw2ICszNCw2IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InJlcG9ydC1mYWlsdXJlIj4KICAgICAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IlRlc3QgZmFpbGVkIi8+Ci0gICAgPC90YXJnZXQ+ICAgCQotICAgIAorICAgIDwvdGFyZ2V0PgorCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9tc2djdHh0L2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL21zZ2N0eHQvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDk4Mzc0NTYuLmU3OWNlYmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL21zZ2N0eHQvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL21zZ2N0eHQvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMiwxMCArMzIsMTAgQEAKICAgICAgICAgc3RhdGljIEhlbGxvSW1wbFNlcnZpY2Ugc2VydmljZTsKIAogICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIndlYnNlcnZpY2VzLWVqYi1tc2djdHh0Iik7CisgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIndlYnNlcnZpY2VzLWVqYi1tc2djdHh0Iik7CiAgICAgICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAgICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzKTsKLQkgICAgc3RhdC5wcmludFN1bW1hcnkoIndlYnNlcnZpY2VzLWVqYi1tc2djdHh0Iik7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3ZWJzZXJ2aWNlcy1lamItbXNnY3R4dCIpOwogICAgICAgIH0KIAogICAgICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmdbXSBhcmdzKSB7CkBAIC00MywxMSArNDMsMTEgQEAKICAgICAgICAgICAgICAgICBIZWxsb0ltcGwgcG9ydCA9IHNlcnZpY2UuZ2V0SGVsbG9JbXBsUG9ydCgpOwogICAgICAgICAgICAgICAgIGZvciAoaW50IGk9MDtpPDEwO2krKykgewogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcmV0ID0gcG9ydC5zYXlIZWxsbygiQXBwc2VydmVyIFRlc3RlciAhIik7Ci0JCSAgICBpZihyZXQuaW5kZXhPZigiV2ViU3ZjVGVzdC1IZWxsbyIpID09IC0xKSB7CisgICAgICAgICAgICBpZihyZXQuaW5kZXhPZigiV2ViU3ZjVGVzdC1IZWxsbyIpID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiLW1zZ2N0eHQiLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCQkgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmV0KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYi1tc2djdHh0Iiwgc3RhdC5QQVNTKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL21zZ2N0eHQvZW5kcG9pbnQvSGVsbG9JbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9tc2djdHh0L2VuZHBvaW50L0hlbGxvSW1wbC5qYXZhCmluZGV4IGMwNmYxODMuLjdkNzA3NWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL21zZ2N0eHQvZW5kcG9pbnQvSGVsbG9JbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbXNnY3R4dC9lbmRwb2ludC9IZWxsb0ltcGwuamF2YQpAQCAtMjgsMTIgKzI4LDEyIEBACiAgICAgQFJlc291cmNlIFdlYlNlcnZpY2VDb250ZXh0IGVqYnNjOwogCiAgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgd2hvKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJFSkIgV1NDVFhUIHdzYyA9ICIgKyBlamJzYyk7Ci0JamFrYXJ0YS54bWwud3MuaGFuZGxlci5NZXNzYWdlQ29udGV4dCBtID0gZWpic2MuZ2V0TWVzc2FnZUNvbnRleHQoKTsKLQlpZihtID09IG51bGwpCi0JCXJldHVybiAiV2ViU2VydmljZSBDb250ZXh0IGluamVjdGlvbiBmYWlsZWQiOwotCWlmKGVqYnNjICE9IG51bGwpCi0gICAgICAgIAlyZXR1cm4gIldlYlN2Y1Rlc3QtSGVsbG8gIiArIHdobzsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVKQiBXU0NUWFQgd3NjID0gIiArIGVqYnNjKTsKKyAgICBqYWthcnRhLnhtbC53cy5oYW5kbGVyLk1lc3NhZ2VDb250ZXh0IG0gPSBlamJzYy5nZXRNZXNzYWdlQ29udGV4dCgpOworICAgIGlmKG0gPT0gbnVsbCkKKyAgICAgICAgcmV0dXJuICJXZWJTZXJ2aWNlIENvbnRleHQgaW5qZWN0aW9uIGZhaWxlZCI7CisgICAgaWYoZWpic2MgIT0gbnVsbCkKKyAgICAgICAgICAgIHJldHVybiAiV2ViU3ZjVGVzdC1IZWxsbyAiICsgd2hvOwogICAgICAgICByZXR1cm4gIkVKQiBXZWJTZXJ2aWNlQ29udGV4dCBpbmplY3Rpb24gZmFpbGVkIjsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9tdWx0aXBvcnQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL211bHRpcG9ydC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGZiNTEyNTYuLjMxMWRkN2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL211bHRpcG9ydC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL211bHRpcG9ydC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw4ICsxNSw4IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJtdWx0aXBvcnQiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9tdWx0aXBvcnQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbXVsdGlwb3J0L2J1aWxkLnhtbAppbmRleCBiOGM1NDI0Li5jZmQwMGY0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9tdWx0aXBvcnQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL211bHRpcG9ydC9idWlsZC54bWwKQEAgLTYzLDExICs2MywxMSBAQAogICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+CiAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi93c2RsIi8+CiAgICAgICA8Y29weSBmaWxlPSJIdHRwVGVzdFNlcnZpY2Uud3NkbCIgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3dzZGwiLz4KLSAgICAgIDxlY2hvIG1lc3NhZ2U9Im15IGJ1aWxkIGNsYXNzZXMgZGlyIGlzOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiBsZXZlbD0idmVyYm9zZSIvPiAKKyAgICAgIDxlY2hvIG1lc3NhZ2U9Im15IGJ1aWxkIGNsYXNzZXMgZGlyIGlzOiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiBsZXZlbD0idmVyYm9zZSIvPgogICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphciIKICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCiAgICAgICAgIGluY2x1ZGVzPSJzZXJ2aWNlLyoqLE1FVEEtSU5GLyoqIj4KLSAgICAgIDwvamFyPiAgICAgICAgICAgIAorICAgICAgPC9qYXI+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlLWNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtNzcsMTUgKzc3LDE1IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0id3NpbXBvcnQuYXJncyIKICAgICAgICAgICAgICAgIHZhbHVlPSIta2VlcCAtd3NkbGxvY2F0aW9uICR7ZW52LkFQU19IT01FfS9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2Fubm90YXRpb25zL211bHRpcG9ydC9IdHRwVGVzdFNlcnZpY2Uud3NkbCAtYiBjdXN0b21jbGllbnQueG1sIC1kICR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCBIdHRwVGVzdFNlcnZpY2Uud3NkbCIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIgCi0gICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2oyZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXJ0Lmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy10b29scy5qYXIiIAorICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2oyZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXJ0Lmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy10b29scy5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iY2xpZW50LyoqIi8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamFyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4tY2xpZW50Ij4KICAgICAgICAgPHBhcmFtIG5hbWU9ImNsaWVudC1jbGFzcyIgdmFsdWU9ImNsaWVudC5DbGllbnQiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL211bHRpcG9ydC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9tdWx0aXBvcnQvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDIwMTVkZWMuLmI5YzVlMjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL211bHRpcG9ydC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbXVsdGlwb3J0L2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjIsNTAgKzIyLDUwIEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0JcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQorICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICAgICAgQFdlYlNlcnZpY2VSZWYgc3RhdGljIEh0dHBUZXN0U2VydmljZSBzZXJ2aWNlOwogCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQkgICAgc3RhdC5hZGREZXNjcmlwdGlvbigid2Vic2VydmljZXMtc2ltcGxlLWFubm90YXRpb24iKTsKKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigid2Vic2VydmljZXMtc2ltcGxlLWFubm90YXRpb24iKTsKICAgICAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7CiAgICAgICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3MpOwotCSAgICBzdGF0LnByaW50U3VtbWFyeSgid2Vic2VydmljZXMtYW5ub3RhdGlvbiIpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgid2Vic2VydmljZXMtYW5ub3RhdGlvbiIpOwogICAgICAgIH0KIAogICAgICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIEhlbGxvIHBvcnQgPSBzZXJ2aWNlLmdldEhlbGxvUG9ydCgpOwotCQlIZWxsb1JlcXVlc3QgcmVxID0gbmV3IEhlbGxvUmVxdWVzdCgpOwotCQlyZXEuc2V0U3RyaW5nKCJGcm9tIFZpamF5ICIpOwotCQlIZWxsb1Jlc3BvbnNlIHJlc3AgPSBwb3J0LmhlbGxvKHJlcSk7Ci0JCWlmKHJlc3AuZ2V0U3RyaW5nKCkuaW5kZXhPZigiRnJvbSBWaWpheSIpID09IC0xKSB7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJlc3AuZ2V0U3RyaW5nKCkpOwotCQkgICAgc3RhdC5hZGRTdGF0dXMoYXJnc1swXSwgc3RhdC5GQUlMKTsKLQkJfQotCQlpZihyZXNwLmdldFN0cmluZygpLmluZGV4T2YoIkhlbGxvMSIpICE9IC0xKSB7Ci0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJlc3AuZ2V0U3RyaW5nKCkpOwotCQkgICAgc3RhdC5hZGRTdGF0dXMoYXJnc1swXSwgc3RhdC5GQUlMKTsKLQkJfQotCQlTeXN0ZW0ub3V0LnByaW50bG4ocmVzcC5nZXRTdHJpbmcoKSk7CisgICAgICAgIEhlbGxvUmVxdWVzdCByZXEgPSBuZXcgSGVsbG9SZXF1ZXN0KCk7CisgICAgICAgIHJlcS5zZXRTdHJpbmcoIkZyb20gVmlqYXkgIik7CisgICAgICAgIEhlbGxvUmVzcG9uc2UgcmVzcCA9IHBvcnQuaGVsbG8ocmVxKTsKKyAgICAgICAgaWYocmVzcC5nZXRTdHJpbmcoKS5pbmRleE9mKCJGcm9tIFZpamF5IikgPT0gLTEpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBncmVldGluZyAiICsgcmVzcC5nZXRTdHJpbmcoKSk7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhhcmdzWzBdLCBzdGF0LkZBSUwpOworICAgICAgICB9CisgICAgICAgIGlmKHJlc3AuZ2V0U3RyaW5nKCkuaW5kZXhPZigiSGVsbG8xIikgIT0gLTEpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBncmVldGluZyAiICsgcmVzcC5nZXRTdHJpbmcoKSk7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhhcmdzWzBdLCBzdGF0LkZBSUwpOworICAgICAgICB9CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXNwLmdldFN0cmluZygpKTsKICAgICAgICAgICAgICAgICBIZWxsbzEgcG9ydDEgPSBzZXJ2aWNlLmdldEhlbGxvMVBvcnQoKTsKLQkJSGVsbG8xUmVxdWVzdCByZXExID0gbmV3IEhlbGxvMVJlcXVlc3QoKTsKLQkJcmVxMS5zZXRTdHJpbmcoIkZyb20gVmlqYXkgIik7Ci0JCUhlbGxvMVJlc3BvbnNlIHJlc3AxID0gcG9ydDEuaGVsbG8xKHJlcTEpOwotCQlpZihyZXNwMS5nZXRTdHJpbmcoKS5pbmRleE9mKCJGcm9tIFZpamF5IikgPT0gLTEpIHsKLQkJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBncmVldGluZyAiICsgcmVzcDEuZ2V0U3RyaW5nKCkpOwotCQkgICAgc3RhdC5hZGRTdGF0dXMoYXJnc1swXSwgc3RhdC5GQUlMKTsKLQkJfQotCQlpZihyZXNwMS5nZXRTdHJpbmcoKS5pbmRleE9mKCJIZWxsbzEiKSA9PSAtMSkgewotCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXNwMS5nZXRTdHJpbmcoKSk7Ci0JCSAgICBzdGF0LmFkZFN0YXR1cyhhcmdzWzBdLCBzdGF0LkZBSUwpOwotCQl9Ci0JCVN5c3RlbS5vdXQucHJpbnRsbihyZXNwMS5nZXRTdHJpbmcoKSk7Ci0JCXN0YXQuYWRkU3RhdHVzKGFyZ3NbMF0sIHN0YXQuUEFTUyk7CisgICAgICAgIEhlbGxvMVJlcXVlc3QgcmVxMSA9IG5ldyBIZWxsbzFSZXF1ZXN0KCk7CisgICAgICAgIHJlcTEuc2V0U3RyaW5nKCJGcm9tIFZpamF5ICIpOworICAgICAgICBIZWxsbzFSZXNwb25zZSByZXNwMSA9IHBvcnQxLmhlbGxvMShyZXExKTsKKyAgICAgICAgaWYocmVzcDEuZ2V0U3RyaW5nKCkuaW5kZXhPZigiRnJvbSBWaWpheSIpID09IC0xKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJlc3AxLmdldFN0cmluZygpKTsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGFyZ3NbMF0sIHN0YXQuRkFJTCk7CisgICAgICAgIH0KKyAgICAgICAgaWYocmVzcDEuZ2V0U3RyaW5nKCkuaW5kZXhPZigiSGVsbG8xIikgPT0gLTEpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBncmVldGluZyAiICsgcmVzcDEuZ2V0U3RyaW5nKCkpOworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoYXJnc1swXSwgc3RhdC5GQUlMKTsKKyAgICAgICAgfQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmVzcDEuZ2V0U3RyaW5nKCkpOworICAgICAgICBzdGF0LmFkZFN0YXR1cyhhcmdzWzBdLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCSAgICBzdGF0LmFkZFN0YXR1cyhhcmdzWzBdLCBzdGF0LkZBSUwpOworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoYXJnc1swXSwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KICAgICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9tdWx0aXBvcnQvY3VzdG9tY2xpZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL211bHRpcG9ydC9jdXN0b21jbGllbnQueG1sCmluZGV4IDdjMzM3MmYuLjk5ZGY2MzIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL211bHRpcG9ydC9jdXN0b21jbGllbnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL211bHRpcG9ydC9jdXN0b21jbGllbnQueG1sCkBAIC0yMyw5ICsyMyw5IEBACiAgICAgICAgIDxwYWNrYWdlIG5hbWU9ImNsaWVudCIvPgogICAgIDwvYmluZGluZ3M+CiAKLSAgICA8YmluZGluZ3Mgbm9kZT0ibnMxOmRlZmluaXRpb25zL25zMTp0eXBlcy94czpzY2hlbWFbQHRhcmdldE5hbWVzcGFjZT0naHR0cDovL2h0dHB0ZXN0c2VydmljZS5vcmcvdHlwZXMnXSIgCi0JeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLQl4bWxuczpuczE9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KKyAgICA8YmluZGluZ3Mgbm9kZT0ibnMxOmRlZmluaXRpb25zL25zMTp0eXBlcy94czpzY2hlbWFbQHRhcmdldE5hbWVzcGFjZT0naHR0cDovL2h0dHB0ZXN0c2VydmljZS5vcmcvdHlwZXMnXSIKKyAgICB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCisgICAgeG1sbnM6bnMxPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI+CiAgICAgICAgIDxuczI6c2NoZW1hQmluZGluZ3MgeG1sbnM6bnMyPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXhiIj4KICAgICAgICAgICAgIDxuczI6cGFja2FnZSBuYW1lPSJjbGllbnQiLz4KICAgICAgICAgPC9uczI6c2NoZW1hQmluZGluZ3M+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9tdWx0aXBvcnQvY3VzdG9tc2VydmljZS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9tdWx0aXBvcnQvY3VzdG9tc2VydmljZS54bWwKaW5kZXggMjQyNjExYi4uNThjNTVlMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbXVsdGlwb3J0L2N1c3RvbXNlcnZpY2UueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL211bHRpcG9ydC9jdXN0b21zZXJ2aWNlLnhtbApAQCAtMjMsOSArMjMsOSBAQAogICAgICAgICA8cGFja2FnZSBuYW1lPSJzZXJ2aWNlIi8+CiAgICAgPC9iaW5kaW5ncz4KIAotICAgIDxiaW5kaW5ncyBub2RlPSJuczE6ZGVmaW5pdGlvbnMvbnMxOnR5cGVzL3hzOnNjaGVtYVtAdGFyZ2V0TmFtZXNwYWNlPSdodHRwOi8vaHR0cHRlc3RzZXJ2aWNlLm9yZy90eXBlcyddIiAKLQl4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotCXhtbG5zOm5zMT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iPgorICAgIDxiaW5kaW5ncyBub2RlPSJuczE6ZGVmaW5pdGlvbnMvbnMxOnR5cGVzL3hzOnNjaGVtYVtAdGFyZ2V0TmFtZXNwYWNlPSdodHRwOi8vaHR0cHRlc3RzZXJ2aWNlLm9yZy90eXBlcyddIgorICAgIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKKyAgICB4bWxuczpuczE9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KICAgICAgICAgPG5zMjpzY2hlbWFCaW5kaW5ncyB4bWxuczpuczI9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheGIiPgogICAgICAgICAgICAgPG5zMjpwYWNrYWdlIG5hbWU9InNlcnZpY2UiLz4KICAgICAgICAgPC9uczI6c2NoZW1hQmluZGluZ3M+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9tdWx0aXBvcnQvc2VydmljZS9IZWxsbzFJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9tdWx0aXBvcnQvc2VydmljZS9IZWxsbzFJbXBsLmphdmEKaW5kZXggZWI4NDdjYS4uOWE0NGVjNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbXVsdGlwb3J0L3NlcnZpY2UvSGVsbG8xSW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL211bHRpcG9ydC9zZXJ2aWNlL0hlbGxvMUltcGwuamF2YQpAQCAtMzksOCArMzksOCBAQAogCiAgICAgcHVibGljIEhlbGxvMVJlc3BvbnNlIGhlbGxvMShIZWxsbzFSZXF1ZXN0IHJlcSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvMSwgIiArIHJlcS5nZXRTdHJpbmcoKSArICIhIik7Ci0JSGVsbG8xUmVzcG9uc2UgcmVzcCA9IG5ldyBIZWxsbzFSZXNwb25zZSgpOwotCXJlc3Auc2V0U3RyaW5nKCJIZWxsbzEsICIgKyByZXEuZ2V0U3RyaW5nKCkgKyAiISIpOworICAgIEhlbGxvMVJlc3BvbnNlIHJlc3AgPSBuZXcgSGVsbG8xUmVzcG9uc2UoKTsKKyAgICByZXNwLnNldFN0cmluZygiSGVsbG8xLCAiICsgcmVxLmdldFN0cmluZygpICsgIiEiKTsKICAgICAgICAgcmV0dXJuIHJlc3A7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbXVsdGlwb3J0L3NlcnZpY2UvSGVsbG9JbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9tdWx0aXBvcnQvc2VydmljZS9IZWxsb0ltcGwuamF2YQppbmRleCA2N2RmNGJiLi43YzZhYjBlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9tdWx0aXBvcnQvc2VydmljZS9IZWxsb0ltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9tdWx0aXBvcnQvc2VydmljZS9IZWxsb0ltcGwuamF2YQpAQCAtMzksOCArMzksOCBAQAogCiAgICAgcHVibGljIEhlbGxvUmVzcG9uc2UgaGVsbG8oSGVsbG9SZXF1ZXN0IHJlcSkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvLCAiICsgcmVxLmdldFN0cmluZygpICsgIiEiKTsKLQlIZWxsb1Jlc3BvbnNlIHJlc3AgPSBuZXcgSGVsbG9SZXNwb25zZSgpOwotCXJlc3Auc2V0U3RyaW5nKCJIZWxsbywgIiArIHJlcS5nZXRTdHJpbmcoKSArICIhIik7CisgICAgSGVsbG9SZXNwb25zZSByZXNwID0gbmV3IEhlbGxvUmVzcG9uc2UoKTsKKyAgICByZXNwLnNldFN0cmluZygiSGVsbG8sICIgKyByZXEuZ2V0U3RyaW5nKCkgKyAiISIpOwogICAgICAgICByZXR1cm4gcmVzcDsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9ub2ludGYvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbm9pbnRmL2J1aWxkLnhtbAppbmRleCAzMDQ5NGY3Li42YWEyMDExIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9ub2ludGYvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL25vaW50Zi9idWlsZC54bWwKQEAgLTM0LDYgKzM0LDYgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0icmVwb3J0LWZhaWx1cmUiPgogICAgICAgICAgICAgPGVjaG8gbWVzc2FnZT0iVGVzdCBmYWlsZWQiLz4KLSAgICA8L3RhcmdldD4gICAJCi0gICAgCisgICAgPC90YXJnZXQ+CisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL25vaW50Zi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9ub2ludGYvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDE4ODEwNWUuLjU1ZGU2NzEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL25vaW50Zi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbm9pbnRmL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzIsMTAgKzMyLDEwIEBACiAgICAgICAgIHN0YXRpYyBIZWxsb0ltcGxTZXJ2aWNlIHNlcnZpY2U7CiAKICAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCSAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ3ZWJzZXJ2aWNlcy1lamItbm9pbnRmLWFubm90YXRpb24iKTsKKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigid2Vic2VydmljZXMtZWpiLW5vaW50Zi1hbm5vdGF0aW9uIik7CiAgICAgICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAgICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzKTsKLQkgICAgc3RhdC5wcmludFN1bW1hcnkoIndlYnNlcnZpY2VzLWVqYi1ub2ludGYtYW5ub3RhdGlvbiIpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgid2Vic2VydmljZXMtZWpiLW5vaW50Zi1hbm5vdGF0aW9uIik7CiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTQzLDExICs0MywxMSBAQAogICAgICAgICAgICAgICAgIEhlbGxvSW1wbCBwb3J0ID0gc2VydmljZS5nZXRIZWxsb0ltcGxQb3J0KCk7CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaT0wO2k8MTA7aSsrKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyByZXQgPSBwb3J0LnNheUhlbGxvKCJBcHBzZXJ2ZXIgVGVzdGVyICEiKTsKLQkJICAgIGlmKHJldC5pbmRleE9mKCJXZWJTdmNUZXN0LUhlbGxvIikgPT0gLTEpIHsKKyAgICAgICAgICAgIGlmKHJldC5pbmRleE9mKCJXZWJTdmNUZXN0LUhlbGxvIikgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBncmVldGluZyAiICsgcmV0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJTaW1wbGUtQW5ub3RhdGlvbiIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0JCSAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiLW5vaW50Zi1hbm5vdGF0aW9uIiwgc3RhdC5QQVNTKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL25vbmFtZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9ub25hbWUvYnVpbGQueG1sCmluZGV4IDA2YzdhY2MuLmE0ZmJjNDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL25vbmFtZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbm9uYW1lL2J1aWxkLnhtbApAQCAtMzQsNiArMzQsNiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJyZXBvcnQtZmFpbHVyZSI+CiAgICAgICAgICAgICA8ZWNobyBtZXNzYWdlPSJUZXN0IGZhaWxlZCIvPgotICAgIDwvdGFyZ2V0PiAgIAkKLSAgICAKKyAgICA8L3RhcmdldD4KKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbm9uYW1lL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL25vbmFtZS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMjljNDQyMS4uN2RhOTJiYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbm9uYW1lL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9ub25hbWUvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMiwxMCArMzIsMTAgQEAKICAgICAgICAgc3RhdGljIEhlbGxvRUpCU2VydmljZSBzZXJ2aWNlOwogCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQkgICAgc3RhdC5hZGREZXNjcmlwdGlvbigid2Vic2VydmljZXMtZWpiLW5vbmFtZS1hbm5vdGF0aW9uIik7CisgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIndlYnNlcnZpY2VzLWVqYi1ub25hbWUtYW5ub3RhdGlvbiIpOwogICAgICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKICAgICAgICAgICAgIGNsaWVudC5kb1Rlc3QoYXJncyk7Ci0JICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3ZWJzZXJ2aWNlcy1lamItbm9uYW1lLWFubm90YXRpb24iKTsKKyAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoIndlYnNlcnZpY2VzLWVqYi1ub25hbWUtYW5ub3RhdGlvbiIpOwogICAgICAgIH0KIAogICAgICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmdbXSBhcmdzKSB7CkBAIC00MywxMSArNDMsMTEgQEAKICAgICAgICAgICAgICAgICBIZWxsbyBwb3J0ID0gc2VydmljZS5nZXRIZWxsb0VKQlBvcnQoKTsKICAgICAgICAgICAgICAgICBmb3IgKGludCBpPTA7aTwxMDtpKyspIHsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJldCA9IHBvcnQuc2F5SGVsbG8oIkFwcHNlcnZlciBUZXN0ZXIgISIpOwotCQkgICAgaWYocmV0LmluZGV4T2YoIldlYlN2Y1Rlc3QtSGVsbG8iKSA9PSAtMSkgeworICAgICAgICAgICAgaWYocmV0LmluZGV4T2YoIldlYlN2Y1Rlc3QtSGVsbG8iKSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIlNpbXBsZS1Bbm5vdGF0aW9uIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQkJICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJldCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamItbm9uYW1lLWFubm90YXRpb24iLCBzdGF0LlBBU1MpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvbm9uYW1lL2VuZHBvaW50L0hlbGxvLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9ub25hbWUvZW5kcG9pbnQvSGVsbG8uamF2YQppbmRleCBkZDRiNjQyLi40YjhmOWVlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9ub25hbWUvZW5kcG9pbnQvSGVsbG8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9ub25hbWUvZW5kcG9pbnQvSGVsbG8uamF2YQpAQCAtMjEsNSArMjEsNSBAQAogQFdlYlNlcnZpY2UKIHB1YmxpYyBpbnRlcmZhY2UgSGVsbG8gewogCi0JcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgd2hvKTsKKyAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyB3aG8pOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvb25ld2F5L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL29uZXdheS9idWlsZC54bWwKaW5kZXggMDZjN2FjYy4uYTRmYmM0OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvb25ld2F5L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9vbmV3YXkvYnVpbGQueG1sCkBAIC0zNCw2ICszNCw2IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InJlcG9ydC1mYWlsdXJlIj4KICAgICAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IlRlc3QgZmFpbGVkIi8+Ci0gICAgPC90YXJnZXQ+ICAgCQotICAgIAorICAgIDwvdGFyZ2V0PgorCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9vbmV3YXkvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvb25ld2F5L2NsaWVudC9DbGllbnQuamF2YQppbmRleCA1ZGViNmQyLi4zYzQyMGZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9vbmV3YXkvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL29uZXdheS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTMyLDEwICszMiwxMCBAQAogICAgICAgICBzdGF0aWMgSGVsbG9FSkJTZXJ2aWNlIHNlcnZpY2U7CiAKICAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCSAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJlamItb25ld2F5LWFubm90YXRpb24iKTsKKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiZWpiLW9uZXdheS1hbm5vdGF0aW9uIik7CiAgICAgICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAgICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzKTsKLQkgICAgc3RhdC5wcmludFN1bW1hcnkoImVqYi1vbmV3YXktYW5ub3RhdGlvbiIpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiZWpiLW9uZXdheS1hbm5vdGF0aW9uIik7CiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL29uZXdheS9lbmRwb2ludC9IZWxsby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvb25ld2F5L2VuZHBvaW50L0hlbGxvLmphdmEKaW5kZXggMDFjZWY0Ni4uN2Q1YzQzMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvb25ld2F5L2VuZHBvaW50L0hlbGxvLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvb25ld2F5L2VuZHBvaW50L0hlbGxvLmphdmEKQEAgLTI1LDUgKzI1LDUgQEAKIAogICAgICAgICBAV2ViTWV0aG9kCiAgICAgICAgIEBPbmV3YXkKLQlwdWJsaWMgdm9pZCBzYXlIZWxsbyhTdHJpbmcgd2hvKTsKKyAgICBwdWJsaWMgdm9pZCBzYXlIZWxsbyhTdHJpbmcgd2hvKTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3BvcnRkZXBlbmRlbmN5bm9pbmplY3Rpb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvcG9ydGRlcGVuZGVuY3lub2luamVjdGlvbi9idWlsZC54bWwKaW5kZXggYTk0ZmI1Mi4uYzk5NzdhNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvcG9ydGRlcGVuZGVuY3lub2luamVjdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvcG9ydGRlcGVuZGVuY3lub2luamVjdGlvbi9idWlsZC54bWwKQEAgLTM0LDYgKzM0LDYgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0icmVwb3J0LWZhaWx1cmUiPgogICAgICAgICAgICAgPGVjaG8gbWVzc2FnZT0iVGVzdCBmYWlsZWQiLz4KLSAgICA8L3RhcmdldD4gICAJCi0gICAgCisgICAgPC90YXJnZXQ+CisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3BvcnRkZXBlbmRlbmN5bm9pbmplY3Rpb24vY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvcG9ydGRlcGVuZGVuY3lub2luamVjdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggN2ZkODkwNy4uZDE4OTllNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvcG9ydGRlcGVuZGVuY3lub2luamVjdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvcG9ydGRlcGVuZGVuY3lub2luamVjdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTM0LDMzICszNCwzMyBAQAogICAgICAgICBzdGF0aWMgSGVsbG9JbXBsIHBvcnQ7CiAKICAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCSAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ3cy1wb3J0ZGVwZW5kZW5jeS1uby1pbmplY3Rpb24iKTsKKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigid3MtcG9ydGRlcGVuZGVuY3ktbm8taW5qZWN0aW9uIik7CiAgICAgICAgICAgICB0cnkgewotCSAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAKLSAgICAgICAgCSAgICBwb3J0ID0gKEhlbGxvSW1wbCkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3NlcnZpY2UvaGVsbG9wb3J0Iik7Ci0JICAgIH0gY2F0Y2goVGhyb3dhYmxlIHQpIHsKLQkJdC5wcmludFN0YWNrVHJhY2UoKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJEZXBlbmRlbmN5IGxvb2t1cCBmYWlsZWQgOiAiICsgdC5nZXRNZXNzYWdlKCkpOwotICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3cy1kZXBlbmRlbmN5LW5vLWluamVjdGlvbiIsIHN0YXQuRkFJTCk7CQkKLQkgICAgfQotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBvcnQgaXMgIiArIHBvcnQpOwotCSAgICBpZiAocG9ydCE9bnVsbCkgewotCSAgICAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7Ci0JICAgICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzKTsKLQkgICAgfQotCSAgICBzdGF0LnByaW50U3VtbWFyeSgid3MtcG9ydGRlcGVuZGVuY3ktbm8taW5qZWN0aW9uIik7CisgICAgICAgICAgICAgICAgcG9ydCA9IChIZWxsb0ltcGwpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9zZXJ2aWNlL2hlbGxvcG9ydCIpOworICAgICAgICB9IGNhdGNoKFRocm93YWJsZSB0KSB7CisgICAgICAgIHQucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGVwZW5kZW5jeSBsb29rdXAgZmFpbGVkIDogIiArIHQuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid3MtZGVwZW5kZW5jeS1uby1pbmplY3Rpb24iLCBzdGF0LkZBSUwpOworICAgICAgICB9CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUG9ydCBpcyAiICsgcG9ydCk7CisgICAgICAgIGlmIChwb3J0IT1udWxsKSB7CisgICAgICAgICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKKyAgICAgICAgICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3MpOworICAgICAgICB9CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3cy1wb3J0ZGVwZW5kZW5jeS1uby1pbmplY3Rpb24iKTsKICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nW10gYXJncykgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBmb3IgKGludCBpPTA7aTwxMDtpKyspIHsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJldCA9IHBvcnQuc2F5SGVsbG8oIkFwcHNlcnZlciBUZXN0ZXIgISIpOwotCQkgICAgaWYocmV0LmluZGV4T2YoIldlYlN2Y1Rlc3QtSGVsbG8iKSA9PSAtMSkgeworICAgICAgICAgICAgaWYocmV0LmluZGV4T2YoIldlYlN2Y1Rlc3QtSGVsbG8iKSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndzLXBvcnRkZXBlbmRlbmN5LW5vLWluamVjdGlvbiIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0JCSAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid3MtcG9ydGRlcGVuZGVuY3ktbm8taW5qZWN0aW9uIiwgc3RhdC5QQVNTKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3BvcnRlamJjbGllbnQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvcG9ydGVqYmNsaWVudC9idWlsZC54bWwKaW5kZXggZDc2MzYzMi4uZDQyOWIyMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvcG9ydGVqYmNsaWVudC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvcG9ydGVqYmNsaWVudC9idWlsZC54bWwKQEAgLTI0LDMxICsyNCwzMSBAQAogPHByb2plY3QgbmFtZT0ibWV0aG9kaW5qZWN0aW9uIiBkZWZhdWx0PSJjb3JlIiBiYXNlZGlyPSIuIj4KIAogICAgICZjb21tb25CdWlsZDsKLSAgICA8cHJvcGVydHkgZmlsZT0iJHtlbnYuQVBTX0hPTUV9L2NvbmZpZy5wcm9wZXJ0aWVzIi8+ICAgCisgICAgPHByb3BlcnR5IGZpbGU9IiR7ZW52LkFQU19IT01FfS9jb25maWcucHJvcGVydGllcyIvPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJzcmMtbmFtZSIgdmFsdWU9ImVuZHBvaW50L0hlbGxvSW1wbC5qYXZhIi8+CiAgICAgPHByb3BlcnR5IG5hbWU9ImNsaWVudC1zcmMtbmFtZSIgdmFsdWU9ImNsaWVudC9DbGllbnQuamF2YSIvPgogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJjbGVhbiwgcHJpdmF0ZS1kZXBsb3ksIHByaXZhdGUtcnVuLCBwcml2YXRlLXVuZGVwbG95LCByZXBvcnQiLz4KIAogICAgIDx0YXJnZXQgbmFtZT0icHJpdmF0ZS1kZXBsb3kiPgotCTxhbnRjYWxsIHRhcmdldD0iZGVwbG95Ii8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJjbGVhbiIvPgotCTxhbnRjYWxsIHRhcmdldD0id3NkbC1pbXBvcnQiPgotCQk8cGFyYW0gbmFtZT0ic2VydmVyIiB2YWx1ZT0iSGVsbG9JbXBsIi8+Ci0JCTxwYXJhbSBuYW1lPSJwb3J0IiB2YWx1ZT0iSGVsbG9JbXBsIi8+Ci0JPC9hbnRjYWxsPgorICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95Ii8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbiIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0id3NkbC1pbXBvcnQiPgorICAgICAgICA8cGFyYW0gbmFtZT0ic2VydmVyIiB2YWx1ZT0iSGVsbG9JbXBsIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJwb3J0IiB2YWx1ZT0iSGVsbG9JbXBsIi8+CisgICAgPC9hbnRjYWxsPgogICAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMiCiAgICAgICAgICAgICBpbmNsdWRlcz0iZWpiL0dhdGV3YXlJbXBsLmphdmEiPgogICAgICAgICAgICAgPGNsYXNzcGF0aCByZWZpZD0iY2xhc3NwYXRoIi8+CiAgICAgICAgIDwvamF2YWM+Ci0gCTxta2RpciBkaXI9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3Nlcy93c2RsL3dzZGwiLz4KLQk8Z2V0IHNyYz0iaHR0cDovLyR7aHR0cC5ob3N0fToke2h0dHAucG9ydH0vSGVsbG9JbXBsU2VydmljZS9IZWxsb0ltcGw/V1NETCIgZGVzdD0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzLy93c2RsL3dzZGwvSGVsbG9JbXBsU2VydmljZS53c2RsIi8+CisgICAgIDxta2RpciBkaXI9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3Nlcy93c2RsL3dzZGwiLz4KKyAgICA8Z2V0IHNyYz0iaHR0cDovLyR7aHR0cC5ob3N0fToke2h0dHAucG9ydH0vSGVsbG9JbXBsU2VydmljZS9IZWxsb0ltcGw/V1NETCIgZGVzdD0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzLy93c2RsL3dzZGwvSGVsbG9JbXBsU2VydmljZS53c2RsIi8+CiAgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2F1dG9kZXBsb3kvRWpiQ2xpZW50LmphciIKLQkgICAgYmFzZWRpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzIgotCSAgICBpbmNsdWRlcz0iZWpiLyoqLGVuZHBvaW50LyoqIj4KLQkgICAgPG1ldGFpbmYgZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMvd3NkbCIvPgotCTwvamFyPgotCTx3YWl0Zm9yIG1heHdhaXQ9IjEwMCIgbWF4d2FpdHVuaXQ9InNlY29uZCI+Ci0gICAgICAgCSAgICA8b3I+CisgICAgICAgIGJhc2VkaXI9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3NlcyIKKyAgICAgICAgaW5jbHVkZXM9ImVqYi8qKixlbmRwb2ludC8qKiI+CisgICAgICAgIDxtZXRhaW5mIGRpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzL3dzZGwiLz4KKyAgICA8L2phcj4KKyAgICA8d2FpdGZvciBtYXh3YWl0PSIxMDAiIG1heHdhaXR1bml0PSJzZWNvbmQiPgorICAgICAgICAgICAgICAgPG9yPgogICAgICAgICAgICAgICAgIDxhdmFpbGFibGUgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvYXV0b2RlcGxveS9FamJDbGllbnQuamFyX2RlcGxveWVkIi8+CiAgICAgICAgICAgICAgICAgPGF2YWlsYWJsZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9hdXRvZGVwbG95L0VqYkNsaWVudC5qYXJfZGVwbG95RmFpbGVkIi8+CiAgICAgICAgICAgICA8L29yPgpAQCAtNTksMzAgKzU5LDMwIEBACiAgICAgICAgIDxjb25kaXRpb24gcHJvcGVydHk9ImRlcGxveV9mYWlsZWQiPgogICAgICAgICAgICAgPGF2YWlsYWJsZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9hdXRvZGVwbG95L0VqYkNsaWVudC5qYXJfZGVwbG95RmFpbGVkIi8+CiAgICAgICAgIDwvY29uZGl0aW9uPgotCTxmYWlsIGlmPSJkZXBsb3lfZmFpbGVkIiBtZXNzYWdlPSJEZXBsb3ltZW50IGZhaWxlZCIvPgorICAgIDxmYWlsIGlmPSJkZXBsb3lfZmFpbGVkIiBtZXNzYWdlPSJEZXBsb3ltZW50IGZhaWxlZCIvPgogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgbmFtZT0icHJpdmF0ZS1ydW4iPgogICAgICAgICA8YmFzZW5hbWUgZmlsZT0iJHtjbGllbnQtc3JjLW5hbWV9IiBwcm9wZXJ0eT0iY2xpZW50IiBzdWZmaXg9Ii5qYXZhIi8+CiAgICAgICAgIDxkaXJuYW1lIGZpbGU9IiR7Y2xpZW50LXNyYy1uYW1lfSIgcHJvcGVydHk9ImNsaWVudC1kaXJlY3RvcnkiLz4KLSAgICAgICAgPGJhc2VuYW1lIGZpbGU9IiR7Y2xpZW50LWRpcmVjdG9yeX0iIHByb3BlcnR5PSJjbGllbnQtcGtnLW5hbWUiLz4gCisgICAgICAgIDxiYXNlbmFtZSBmaWxlPSIke2NsaWVudC1kaXJlY3Rvcnl9IiBwcm9wZXJ0eT0iY2xpZW50LXBrZy1uYW1lIi8+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGllbnQtY2xhc3MtbmFtZSIgdmFsdWU9IiR7Y2xpZW50LXBrZy1uYW1lfS8ke2NsaWVudH0uY2xhc3MiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJ3c2RsLWltcG9ydCI+Ci0JCTxwYXJhbSBuYW1lPSJzZXJ2ZXIiIHZhbHVlPSJHYXRld2F5SW1wbCIvPgotCQk8cGFyYW0gbmFtZT0icG9ydCIgdmFsdWU9IkdhdGV3YXlJbXBsIi8+Ci0JPC9hbnRjYWxsPgotCTxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jbGllbnQiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJ3c2RsLWltcG9ydCI+CisgICAgICAgIDxwYXJhbSBuYW1lPSJzZXJ2ZXIiIHZhbHVlPSJHYXRld2F5SW1wbCIvPgorICAgICAgICA8cGFyYW0gbmFtZT0icG9ydCIgdmFsdWU9IkdhdGV3YXlJbXBsIi8+CisgICAgPC9hbnRjYWxsPgorICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jbGllbnQiLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iUnVubmluZyBhcHBjbGllbnQgd2l0aCAke2NsaWVudC1wa2ctbmFtZX0uJHtjbGllbnR9Ii8+CiAgICAgICAgIDx1bmphciBzcmM9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiBkZXN0PSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMiLz4KICAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vYXBwY2xpZW50IiBkaXI9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3NlcyI+Ci0gICAgICAgICAgICA8YXJnIHZhbHVlPSIke2NsaWVudC1wa2ctbmFtZX0uJHtjbGllbnR9Ii8+ICAgIAorICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtjbGllbnQtcGtnLW5hbWV9LiR7Y2xpZW50fSIvPgogICAgICAgICA8L2V4ZWM+CiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBuYW1lPSJwcml2YXRlLXVuZGVwbG95Ij4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveSIvPgotCTxhbnRjYWxsIHRhcmdldD0iYXV0b3VuZGVwbG95LWZpbGUiPgotCQk8cGFyYW0gbmFtZT0iZmlsZW5hbWUiIHZhbHVlPSJFamJDbGllbnQuamFyIi8+Ci0JPC9hbnRjYWxsPgorICAgIDxhbnRjYWxsIHRhcmdldD0iYXV0b3VuZGVwbG95LWZpbGUiPgorICAgICAgICA8cGFyYW0gbmFtZT0iZmlsZW5hbWUiIHZhbHVlPSJFamJDbGllbnQuamFyIi8+CisgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJyZXBvcnQtc3VjY2VzcyI+CkBAIC05MSw2ICs5MSw2IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InJlcG9ydC1mYWlsdXJlIj4KICAgICAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IlRlc3QgZmFpbGVkIi8+Ci0gICAgPC90YXJnZXQ+ICAgCQotICAgIAorICAgIDwvdGFyZ2V0PgorCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9wb3J0ZWpiY2xpZW50L2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3BvcnRlamJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDdmYTc2MjAuLmY1N2Q1NzQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3BvcnRlamJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3BvcnRlamJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yOCw0MyArMjgsNDMgQEAKICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAotCXByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBkZXNjID0gIndzLWVqYi1wb3J0LWZpZWxkLWluamVjdGlvbiI7CisgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIGRlc2MgPSAid3MtZWpiLXBvcnQtZmllbGQtaW5qZWN0aW9uIjsKIAotCUBXZWJTZXJ2aWNlUmVmKEdhdGV3YXlJbXBsU2VydmljZS5jbGFzcykKKyAgICBAV2ViU2VydmljZVJlZihHYXRld2F5SW1wbFNlcnZpY2UuY2xhc3MpCiAgICAgICAgIHN0YXRpYyBHYXRld2F5SW1wbCBwb3J0OwogCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQkgICAgc3RhdC5hZGREZXNjcmlwdGlvbihkZXNjKTsKKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbihkZXNjKTsKICAgICAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7CiAgICAgICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3MpOwotCSAgICBzdGF0LnByaW50U3VtbWFyeShkZXNjKTsKKyAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoZGVzYyk7CiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgICAgIHRyeSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiTWV0aG9kIGluamVjdGVkIHJlZmVyZW5jZSB0ZXN0Li4uIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTWV0aG9kIGluamVjdGVkIHJlZmVyZW5jZSB0ZXN0Li4uIik7CiAgICAgICAgICAgICAgICAgU3RyaW5nIHJldCA9IHBvcnQuaW52b2tlTWV0aG9kKCJBcHBzZXJ2ZXIgVGVzdGVyICEiKTsKLQkJaWYocmV0LmluZGV4T2YoIk1FVEhPRCBXZWJTdmNUZXN0LUhlbGxvIikgPT0gLTEpIHsKKyAgICAgICAgaWYocmV0LmluZGV4T2YoIk1FVEhPRCBXZWJTdmNUZXN0LUhlbGxvIikgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXQpOwogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0JCX0KKyAgICAgICAgfQogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VydmVyIHJldHVybmVkICIgKyByZXQgKyAiIDogUEFTU0VEIik7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiRmllbGQgaW5qZWN0ZWQgcmVmZXJlbmNlIHRlc3QuLi4iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGaWVsZCBpbmplY3RlZCByZWZlcmVuY2UgdGVzdC4uLiIpOwogICAgICAgICAgICAgICAgIHJldCA9IHBvcnQuaW52b2tlRmllbGQoIkFwcHNlcnZlciBUZXN0ZXIgISIpOwotCQlpZihyZXQuaW5kZXhPZigiRklFTEQgV2ViU3ZjVGVzdC1IZWxsbyIpID09IC0xKSB7CisgICAgICAgIGlmKHJldC5pbmRleE9mKCJGSUVMRCBXZWJTdmNUZXN0LUhlbGxvIikgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXQpOwogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0JCX0KKyAgICAgICAgfQogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VydmVyIHJldHVybmVkICIgKyByZXQgKyAiIDogUEFTU0VEIik7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiRGVwZW5kZW5jeSBqbmRpIGxvb3VwIHJlZmVyZW5jZSB0ZXN0Li4uIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGVwZW5kZW5jeSBqbmRpIGxvb3VwIHJlZmVyZW5jZSB0ZXN0Li4uIik7CiAgICAgICAgICAgICAgICAgcmV0ID0gcG9ydC5pbnZva2VEZXBlbmRlbmN5KCJBcHBzZXJ2ZXIgVGVzdGVyICEiKTsKLQkJaWYocmV0LmluZGV4T2YoIkpOREkgV2ViU3ZjVGVzdC1IZWxsbyIpID09IC0xKSB7CisgICAgICAgIGlmKHJldC5pbmRleE9mKCJKTkRJIFdlYlN2Y1Rlc3QtSGVsbG8iKSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJldCk7CiAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2MsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQkJfQorICAgICAgICB9CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZXJ2ZXIgcmV0dXJuZWQgIiArIHJldCArICIgOiBQQVNTRUQiKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvcG9ydGVqYmNsaWVudC9lamIvR2F0ZXdheUltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3BvcnRlamJjbGllbnQvZWpiL0dhdGV3YXlJbXBsLmphdmEKaW5kZXggMDk5ZDUzMC4uYzFkZDM3MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvcG9ydGVqYmNsaWVudC9lamIvR2F0ZXdheUltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9wb3J0ZWpiY2xpZW50L2VqYi9HYXRld2F5SW1wbC5qYXZhCkBAIC0zOSwxNiArMzksMTYgQEAKIAogICAgIEhlbGxvSW1wbCBwb3J0TWV0aG9kPW51bGw7CiAKLSAgICAvLyBtZXRob2QgaW5qZWN0aW9uIGhhcyB0byBiZSBwcml2YXRlIHRvIGF2b2lkIGJlaW5nIHBhcnQgb2YgdGhlIAorICAgIC8vIG1ldGhvZCBpbmplY3Rpb24gaGFzIHRvIGJlIHByaXZhdGUgdG8gYXZvaWQgYmVpbmcgcGFydCBvZiB0aGUKICAgICAvLyB3ZWIgc2VydmljZSBpbnRlcmZhY2UuCiAgICAgQFdlYlNlcnZpY2VSZWYoSGVsbG9JbXBsU2VydmljZS5jbGFzcykKICAgICBwcml2YXRlIHZvaWQgc2V0UG9ydChIZWxsb0ltcGwgcG9ydCkgewotCXBvcnRNZXRob2QgPSBwb3J0OworICAgIHBvcnRNZXRob2QgPSBwb3J0OwogICAgIH0KIAogICAgIEBXZWJNZXRob2QKICAgICBwdWJsaWMgU3RyaW5nIGludm9rZU1ldGhvZChTdHJpbmcgd2hvKSB7Ci0JcmV0dXJuICJNRVRIT0QgIiArIHBvcnRNZXRob2Quc2F5SGVsbG8od2hvKTsKKyAgICByZXR1cm4gIk1FVEhPRCAiICsgcG9ydE1ldGhvZC5zYXlIZWxsbyh3aG8pOwogICAgIH0KIAogICAgIEBXZWJNZXRob2QKQEAgLTU4LDE3ICs1OCwxNyBAQAogCiAgICAgQFdlYk1ldGhvZAogICAgIHB1YmxpYyBTdHJpbmcgaW52b2tlRGVwZW5kZW5jeShTdHJpbmcgd2hvKSB7Ci0JdHJ5IHsKLQkJQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotLy8JCUhlbGxvSW1wbFNlcnZpY2Ugc2VydmljZSA9IChIZWxsb0ltcGxTZXJ2aWNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvc2VydmljZS9oZWxsb3NlcnZpY2UiKTsKLS8vCQlIZWxsb0ltcGwgcG9ydCA9IHNlcnZpY2UuZ2V0UG9ydChIZWxsb0ltcGwuY2xhc3MpOwotLy8JCVN5c3RlbS5vdXQucHJpbnRsbigiRnJvbSBzZXJ2aWNlLi4uICIgKyBwb3J0LnNheUhlbGxvKHdobykpOwotCQlIZWxsb0ltcGwgcG9ydCA9IChIZWxsb0ltcGwpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9zZXJ2aWNlL2hlbGxvcG9ydCIpOwotCQlyZXR1cm4gIkpOREkgIiArIHBvcnQuc2F5SGVsbG8od2hvKTsKLQl9IGNhdGNoKFRocm93YWJsZSB0KSB7Ci0JCXQucHJpbnRTdGFja1RyYWNlKCk7Ci0JCXJldHVybiAiRkFJTEVEIjsKLQl9CisgICAgdHJ5IHsKKyAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworLy8gICAgICAgIEhlbGxvSW1wbFNlcnZpY2Ugc2VydmljZSA9IChIZWxsb0ltcGxTZXJ2aWNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvc2VydmljZS9oZWxsb3NlcnZpY2UiKTsKKy8vICAgICAgICBIZWxsb0ltcGwgcG9ydCA9IHNlcnZpY2UuZ2V0UG9ydChIZWxsb0ltcGwuY2xhc3MpOworLy8gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRnJvbSBzZXJ2aWNlLi4uICIgKyBwb3J0LnNheUhlbGxvKHdobykpOworICAgICAgICBIZWxsb0ltcGwgcG9ydCA9IChIZWxsb0ltcGwpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9zZXJ2aWNlL2hlbGxvcG9ydCIpOworICAgICAgICByZXR1cm4gIkpOREkgIiArIHBvcnQuc2F5SGVsbG8od2hvKTsKKyAgICB9IGNhdGNoKFRocm93YWJsZSB0KSB7CisgICAgICAgIHQucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIHJldHVybiAiRkFJTEVEIjsKKyAgICB9CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9wb3J0ZmllbGRpbmplY3Rpb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvcG9ydGZpZWxkaW5qZWN0aW9uL2J1aWxkLnhtbAppbmRleCBhOTRmYjUyLi5jOTk3N2E0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9wb3J0ZmllbGRpbmplY3Rpb24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3BvcnRmaWVsZGluamVjdGlvbi9idWlsZC54bWwKQEAgLTM0LDYgKzM0LDYgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0icmVwb3J0LWZhaWx1cmUiPgogICAgICAgICAgICAgPGVjaG8gbWVzc2FnZT0iVGVzdCBmYWlsZWQiLz4KLSAgICA8L3RhcmdldD4gICAJCi0gICAgCisgICAgPC90YXJnZXQ+CisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3BvcnRmaWVsZGluamVjdGlvbi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9wb3J0ZmllbGRpbmplY3Rpb24vY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDBjMDY1MWUuLjdlNGRiMWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3BvcnRmaWVsZGluamVjdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvcG9ydGZpZWxkaW5qZWN0aW9uL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjgsMjcgKzI4LDI3IEBACiAgICAgICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKLQlwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgZGVzYyA9ICJ3cy1lamItcG9ydC1maWVsZC1pbmplY3Rpb24iOworICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBkZXNjID0gIndzLWVqYi1wb3J0LWZpZWxkLWluamVjdGlvbiI7CiAKLQlAV2ViU2VydmljZVJlZihIZWxsb0ltcGxTZXJ2aWNlLmNsYXNzKQorICAgIEBXZWJTZXJ2aWNlUmVmKEhlbGxvSW1wbFNlcnZpY2UuY2xhc3MpCiAgICAgICAgIHN0YXRpYyBIZWxsb0ltcGwgcG9ydDsKIAogICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oZGVzYyk7CisgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oZGVzYyk7CiAgICAgICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAgICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzKTsKLQkgICAgc3RhdC5wcmludFN1bW1hcnkoZGVzYyk7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KGRlc2MpOwogICAgICAgIH0KIAogICAgICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGZvciAoaW50IGk9MDtpPDEwO2krKykgewogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcmV0ID0gcG9ydC5zYXlIZWxsbygiQXBwc2VydmVyIFRlc3RlciAhIik7Ci0JCSAgICBpZihyZXQuaW5kZXhPZigiV2ViU3ZjVGVzdC1IZWxsbyIpID09IC0xKSB7CisgICAgICAgICAgICBpZihyZXQuaW5kZXhPZigiV2ViU3ZjVGVzdC1IZWxsbyIpID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCQkgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmV0KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzYywgc3RhdC5QQVNTKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3BvcnRtZXRob2RpbmplY3Rpb24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvcG9ydG1ldGhvZGluamVjdGlvbi9idWlsZC54bWwKaW5kZXggYTk0ZmI1Mi4uYzk5NzdhNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvcG9ydG1ldGhvZGluamVjdGlvbi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvcG9ydG1ldGhvZGluamVjdGlvbi9idWlsZC54bWwKQEAgLTM0LDYgKzM0LDYgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0icmVwb3J0LWZhaWx1cmUiPgogICAgICAgICAgICAgPGVjaG8gbWVzc2FnZT0iVGVzdCBmYWlsZWQiLz4KLSAgICA8L3RhcmdldD4gICAJCi0gICAgCisgICAgPC90YXJnZXQ+CisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3BvcnRtZXRob2RpbmplY3Rpb24vY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvcG9ydG1ldGhvZGluamVjdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggNjcwNjE3MS4uZGJiNmE1YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvcG9ydG1ldGhvZGluamVjdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvcG9ydG1ldGhvZGluamVjdGlvbi9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI4LDMxICsyOCwzMSBAQAogICAgICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCi0JcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIGRlc2MgPSAid3MtZWpiLXBvcnQtbWV0aG9kLWluamVjdGlvbiI7CisgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIGRlc2MgPSAid3MtZWpiLXBvcnQtbWV0aG9kLWluamVjdGlvbiI7CiAKLQlAV2ViU2VydmljZVJlZihIZWxsb0ltcGxTZXJ2aWNlLmNsYXNzKQotCXN0YXRpYyB2b2lkIHNldFBvcnQoSGVsbG9JbXBsIHMpIHsKLQkJcG9ydCA9IHM7Ci0JfQorICAgIEBXZWJTZXJ2aWNlUmVmKEhlbGxvSW1wbFNlcnZpY2UuY2xhc3MpCisgICAgc3RhdGljIHZvaWQgc2V0UG9ydChIZWxsb0ltcGwgcykgeworICAgICAgICBwb3J0ID0gczsKKyAgICB9CiAKICAgICAgICAgc3RhdGljIEhlbGxvSW1wbCBwb3J0OwogCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQkgICAgc3RhdC5hZGREZXNjcmlwdGlvbihkZXNjKTsKKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbihkZXNjKTsKICAgICAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7CiAgICAgICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3MpOwotCSAgICBzdGF0LnByaW50U3VtbWFyeShkZXNjKTsKKyAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoZGVzYyk7CiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaT0wO2k8MTA7aSsrKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyByZXQgPSBwb3J0LnNheUhlbGxvKCJBcHBzZXJ2ZXIgVGVzdGVyICEiKTsKLQkJICAgIGlmKHJldC5pbmRleE9mKCJXZWJTdmNUZXN0LUhlbGxvIikgPT0gLTEpIHsKKyAgICAgICAgICAgIGlmKHJldC5pbmRleE9mKCJXZWJTdmNUZXN0LUhlbGxvIikgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBncmVldGluZyAiICsgcmV0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2MsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0JCSAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjLCBzdGF0LlBBU1MpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvcHJvdmlkZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvcHJvdmlkZXIvYnVpbGQueG1sCmluZGV4IDgyNTA2NmEuLjE4OTRlM2UgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3Byb3ZpZGVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9wcm92aWRlci9idWlsZC54bWwKQEAgLTI3LDI4ICsyNywyOCBAQAogICAgIDxwcm9wZXJ0eSBuYW1lPSJzcmMtbmFtZSIgdmFsdWU9ImVuZHBvaW50L0hlbGxvSW1wbC5qYXZhIi8+CiAgICAgPHByb3BlcnR5IG5hbWU9ImNsaWVudC1zcmMtbmFtZSIgdmFsdWU9ImNsaWVudC9DbGllbnQuamF2YSIvPgogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJjbGVhbiI+Ci0JPGFudGNhbGwgdGFyZ2V0PSJ0ZXN0X2J1aWxkIi8+Ci0gICAgCTxiYXNlbmFtZSBmaWxlPSIke3NyYy1uYW1lfSIgcHJvcGVydHk9InNlcnZlciIgc3VmZml4PSIuamF2YSIvPgotCTx3YWl0Zm9yIG1heHdhaXQ9IjEwMCIgbWF4d2FpdHVuaXQ9InNlY29uZCI+Ci0JICA8b3I+Ci0JICAgICA8YXZhaWxhYmxlIGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2F1dG9kZXBsb3kvJHtzZXJ2ZXJ9Lmphcl9kZXBsb3llZCIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0idGVzdF9idWlsZCIvPgorICAgICAgICA8YmFzZW5hbWUgZmlsZT0iJHtzcmMtbmFtZX0iIHByb3BlcnR5PSJzZXJ2ZXIiIHN1ZmZpeD0iLmphdmEiLz4KKyAgICA8d2FpdGZvciBtYXh3YWl0PSIxMDAiIG1heHdhaXR1bml0PSJzZWNvbmQiPgorICAgICAgPG9yPgorICAgICAgICAgPGF2YWlsYWJsZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9hdXRvZGVwbG95LyR7c2VydmVyfS5qYXJfZGVwbG95ZWQiLz4KICAgICAgICAgICAgIDxhdmFpbGFibGUgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvYXV0b2RlcGxveS8ke3NlcnZlcn0uamFyX2RlcGxveUZhaWxlZCIvPgotICAgICAgIAkgIDwvb3I+Ci0JPC93YWl0Zm9yPgorICAgICAgICAgICAgIDwvb3I+CisgICAgPC93YWl0Zm9yPgogICAgICAgICA8Y29uZGl0aW9uIHByb3BlcnR5PSJkZXBsb3lfc3VjY2VlZGVkIj4KICAgICAgICAgICAgIDxhdmFpbGFibGUgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvYXV0b2RlcGxveS8ke3NlcnZlcn0uamFyX2RlcGxveWVkIi8+CiAgICAgICAgIDwvY29uZGl0aW9uPgotICAgICAgICAKKwogICAgIDxhbnRjYWxsIHRhcmdldD0icnVuIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveSIvPgotCTxhbnRjYWxsIHRhcmdldD0icmVwb3J0Ii8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveSIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0icmVwb3J0Ii8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InRlc3RfYnVpbGQiPgotCTxleGVjIGV4ZWN1dGFibGU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL3dzaW1wb3J0Ij4KLSAgICAgICAgCTxhcmcgbGluZT0iLWtlZXAgLWQgJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzIGVuZHBvaW50L3dzZGwvSGVsbG9JbXBsU2VydmljZS53c2RsIi8+Ci0JPC9leGVjPgotCTxhbnRjYWxsIHRhcmdldD0iYnVpbGQiLz4KKyAgICA8ZXhlYyBleGVjdXRhYmxlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi93c2ltcG9ydCI+CisgICAgICAgICAgICA8YXJnIGxpbmU9Ii1rZWVwIC1kICR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3NlcyBlbmRwb2ludC93c2RsL0hlbGxvSW1wbFNlcnZpY2Uud3NkbCIvPgorICAgIDwvZXhlYz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkIi8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlcG9ydC1zdWNjZXNzIj4KQEAgLTU3LDYgKzU3LDYgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0icmVwb3J0LWZhaWx1cmUiPgogICAgICAgICAgICAgPGVjaG8gbWVzc2FnZT0iVGVzdCBmYWlsZWQiLz4KLSAgICA8L3RhcmdldD4gICAJCi0gICAgCisgICAgPC90YXJnZXQ+CisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3Byb3ZpZGVyL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3Byb3ZpZGVyL2NsaWVudC9DbGllbnQuamF2YQppbmRleCBkMjY1YmI1Li5mYjVmZjI1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9wcm92aWRlci9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvcHJvdmlkZXIvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMiwxMCArMzIsMTAgQEAKICAgICAgICAgc3RhdGljIEhlbGxvSW1wbFNlcnZpY2Ugc2VydmljZTsKIAogICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oImVqYi1wcm92aWRlci1hbm5vdGF0aW9uIik7CisgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oImVqYi1wcm92aWRlci1hbm5vdGF0aW9uIik7CiAgICAgICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAgICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzKTsKLQkgICAgc3RhdC5wcmludFN1bW1hcnkoImVqYi1wcm92aWRlci1hbm5vdGF0aW9uIik7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJlamItcHJvdmlkZXItYW5ub3RhdGlvbiIpOwogICAgICAgIH0KIAogICAgICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmdbXSBhcmdzKSB7CkBAIC00MywxMSArNDMsMTEgQEAKICAgICAgICAgICAgICAgICBIZWxsb0ltcGwgcG9ydCA9IHNlcnZpY2UuZ2V0SGVsbG9JbXBsKCk7CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaT0wO2k8MTA7aSsrKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyByZXQgPSBwb3J0LnNheUhlbGxvKCJBcHBzZXJ2ZXIgVGVzdGVyICEiKTsKLQkJICAgIGlmKHJldC5pbmRleE9mKCJXZWJTdmNUZXN0LUhlbGxvIikgPT0gLTEpIHsKKyAgICAgICAgICAgIGlmKHJldC5pbmRleE9mKCJXZWJTdmNUZXN0LUhlbGxvIikgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBncmVldGluZyAiICsgcmV0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJTaW1wbGUtQW5ub3RhdGlvbiIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0JCSAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiLXByb3ZpZGVyLWFubm90YXRpb24iLCBzdGF0LlBBU1MpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvcHJvdmlkZXIvZW5kcG9pbnQvSGVsbG9JbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9wcm92aWRlci9lbmRwb2ludC9IZWxsb0ltcGwuamF2YQppbmRleCA1YTI4MTIzLi5hNWMwOWVmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9wcm92aWRlci9lbmRwb2ludC9IZWxsb0ltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9wcm92aWRlci9lbmRwb2ludC9IZWxsb0ltcGwuamF2YQpAQCAtMjEsNyArMjEsNyBAQAogaW1wb3J0IGpha2FydGEueG1sLndzLlByb3ZpZGVyOwogaW1wb3J0IGpha2FydGEueG1sLndzLldlYlNlcnZpY2VQcm92aWRlcjsKIGltcG9ydCBqYWthcnRhLnhtbC53cy5TZXJ2aWNlTW9kZTsKLWltcG9ydCBqYWthcnRhLnhtbC53cy5TZXJ2aWNlCTsJCitpbXBvcnQgamFrYXJ0YS54bWwud3MuU2VydmljZSAgICA7CiBpbXBvcnQgamFrYXJ0YS54bWwuc29hcC5TT0FQTWVzc2FnZTsKIGltcG9ydCBqYWthcnRhLmVqYi5TdGF0ZWxlc3M7CiAKQEAgLTQzLDExICs0MywxMSBAQAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEpBWEJDb250ZXh0IGpheGJDb250ZXh0ID0gY3JlYXRlSkFYQkNvbnRleHQoKTsKICAgICBwcml2YXRlIGludCBjb21ibzsKICAgICBwcml2YXRlIGludCBib2R5SW5kZXg7Ci0gICAgCisKICAgICBwdWJsaWMgamFrYXJ0YS54bWwuYmluZC5KQVhCQ29udGV4dCBnZXRKQVhCQ29udGV4dCgpewogICAgICAgICByZXR1cm4gamF4YkNvbnRleHQ7CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgamFrYXJ0YS54bWwuYmluZC5KQVhCQ29udGV4dCBjcmVhdGVKQVhCQ29udGV4dCgpewogICAgICAgICB0cnl7CiAgICAgICAgICAgICByZXR1cm4gamFrYXJ0YS54bWwuYmluZC5KQVhCQ29udGV4dC5uZXdJbnN0YW5jZShPYmplY3RGYWN0b3J5LmNsYXNzKTsKQEAgLTU1LDI4ICs1NSwyOCBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IFdlYlNlcnZpY2VFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCksIGUpOwogICAgICAgICB9CiAgICAgfQotICAgIAotICAgIAorCisKICAgICBwdWJsaWMgU291cmNlIGludm9rZShTb3VyY2UgcmVxdWVzdCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmVjdkJlYW4ocmVxdWVzdCk7CiAgICAgICAgICAgICByZXR1cm4gc2VuZEJlYW4oKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgICAgIHRocm93IG5ldyBXZWJTZXJ2aWNlRXhjZXB0aW9uKCJQcm92aWRlciBlbmRwb2ludCBmYWlsZWQiLCBlKTsgICAgICAgICAgICAKKyAgICAgICAgICAgIHRocm93IG5ldyBXZWJTZXJ2aWNlRXhjZXB0aW9uKCJQcm92aWRlciBlbmRwb2ludCBmYWlsZWQiLCBlKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCByZWN2QmVhbihTb3VyY2Ugc291cmNlKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqIHJlY3ZCZWFuICoqKioqKiIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oamF4YkNvbnRleHQuY3JlYXRlVW5tYXJzaGFsbGVyKCkudW5tYXJzaGFsKHNvdXJjZSkpOwogICAgICAgICBKQVhCRWxlbWVudCBlbGVtZW50ID0gKEpBWEJFbGVtZW50KSBqYXhiQ29udGV4dC5jcmVhdGVVbm1hcnNoYWxsZXIoKS51bm1hcnNoYWwoc291cmNlKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJuYW1lPSIrZWxlbWVudC5nZXROYW1lKCkrICIgdmFsdWU9IiArIGVsZW1lbnQuZ2V0VmFsdWUoKSk7ICAgICAgICAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJuYW1lPSIrZWxlbWVudC5nZXROYW1lKCkrICIgdmFsdWU9IiArIGVsZW1lbnQuZ2V0VmFsdWUoKSk7CiAgICAgICAgIGlmIChlbGVtZW50LmdldFZhbHVlKCkgaW5zdGFuY2VvZiBTYXlIZWxsbykgewotICAgICAgICAgICAgU2F5SGVsbG8gaGVsbG8gPSAoU2F5SGVsbG8pIGVsZW1lbnQuZ2V0VmFsdWUoKTsgCisgICAgICAgICAgICBTYXlIZWxsbyBoZWxsbyA9IChTYXlIZWxsbykgZWxlbWVudC5nZXRWYWx1ZSgpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTYXkgSGVsbG8gZnJvbSAiICsgaGVsbG8uZ2V0QXJnMCgpKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgIH0KIAogICAgIHByaXZhdGUgU291cmNlIHNlbmRCZWFuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CkBAIC04NCw5ICs4NCw5IEBACiAgICAgICAgIFNheUhlbGxvUmVzcG9uc2UgcmVzcCA9IG5ldyBTYXlIZWxsb1Jlc3BvbnNlKCk7CiAgICAgICAgIHJlc3Auc2V0UmV0dXJuKCJXZWJTdmNUZXN0LUhlbGxvIik7CiAgICAgICAgIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBib3V0ID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwotICAgICAgICBPYmplY3RGYWN0b3J5IGZhY3RvcnkgPSBuZXcgT2JqZWN0RmFjdG9yeSgpOyAKKyAgICAgICAgT2JqZWN0RmFjdG9yeSBmYWN0b3J5ID0gbmV3IE9iamVjdEZhY3RvcnkoKTsKICAgICAgICAgamF4YkNvbnRleHQuY3JlYXRlTWFyc2hhbGxlcigpLm1hcnNoYWwoZmFjdG9yeS5jcmVhdGVTYXlIZWxsb1Jlc3BvbnNlKHJlc3ApLCBib3V0KTsKICAgICAgICAgcmV0dXJuIG5ldyBTdHJlYW1Tb3VyY2UobmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGJvdXQudG9CeXRlQXJyYXkoKSkpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvcmVzdGZ1bC1lamIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3Jlc3RmdWwtZWpiL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNDdkYmFiZC4uZDAzNzYwZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvcmVzdGZ1bC1lamIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9yZXN0ZnVsLWVqYi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw4ICsxNSw4IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJyZXN0ZnVsLWVqYiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3Jlc3RmdWwtZWpiL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3Jlc3RmdWwtZWpiL2J1aWxkLnhtbAppbmRleCA3NmM2NGQyLi5kZjZlMWYzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9yZXN0ZnVsLWVqYi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvcmVzdGZ1bC1lamIvYnVpbGQueG1sCkBAIC01Nyw4ICs1Nyw4IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlLWNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+Ci0gICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiIAotICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9qMmVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy1ydC5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtdG9vbHMuamFyIiAKKyAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvajJlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtcnQuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXRvb2xzLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJjbGllbnQvKioiLz4KICAgICA8L3RhcmdldD4KIApAQCAtNjksNyArNjksNyBAQAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuY2xpZW50Ij4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLWNsaWVudCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJjbGllbnQtY2xhc3MiIHZhbHVlPSJjbGllbnQuQ2xpZW50Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9yZXN0ZnVsLWVqYi9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9yZXN0ZnVsLWVqYi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggZjZkN2VjYS4uNjc1NzA3MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvcmVzdGZ1bC1lamIvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3Jlc3RmdWwtZWpiL2NsaWVudC9DbGllbnQuamF2YQpAQCAtNDAsMTMgKzQwLDEzIEBACiAgICAgICAgICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24gewotCXN0YXQuYWRkRGVzY3JpcHRpb24oIndlYnNlcnZpY2VzLXNpbXBsZS1yZXN0ZnVsLXN2YyIpOwotICAgICAgICBTdHJpbmcgZW5kcG9pbnRBZGRyZXNzID0gCisgICAgc3RhdC5hZGREZXNjcmlwdGlvbigid2Vic2VydmljZXMtc2ltcGxlLXJlc3RmdWwtc3ZjIik7CisgICAgICAgIFN0cmluZyBlbmRwb2ludEFkZHJlc3MgPQogICAgICAgICAgICAgImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9BZGROdW1iZXJzSW1wbFNlcnZpY2UvZW5kcG9pbnQuQWRkTnVtYmVyc0ltcGwiOwogICAgICAgICBVUkwgdXJsID0gbmV3IFVSTChlbmRwb2ludEFkZHJlc3MrIj9udW0xPTEwJm51bTI9MjAiKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICgiSW52b2tpbmcgVVJMPSIrdXJsKTsKICAgICAgICAgcHJvY2Vzcyh1cmwsIGFyZ3MpOwotCXN0YXQucHJpbnRTdW1tYXJ5KCJ3ZWJzZXJ2aWNlcy1zaW1wbGUtcmVzdGZ1bC1zdmMiKTsKKyAgICBzdGF0LnByaW50U3VtbWFyeSgid2Vic2VydmljZXMtc2ltcGxlLXJlc3RmdWwtc3ZjIik7CiAgICAgfQogCiAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBwcm9jZXNzKFVSTCB1cmwsIFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24gewpAQCAtNjQsMTIgKzY0LDEyIEBACiAgICAgICAgICAgICBvcHJvcHMucHV0KE91dHB1dEtleXMuT01JVF9YTUxfREVDTEFSQVRJT04sICJ5ZXMiKTsKICAgICAgICAgICAgIHRyYW5zLnNldE91dHB1dFByb3BlcnRpZXMob3Byb3BzKTsKICAgICAgICAgICAgIHRyYW5zLnRyYW5zZm9ybShzb3VyY2UsIHNyKTsKLQkgICAgU3RyaW5nIHJlc3AgPSBib3MudG9TdHJpbmcoKTsKKyAgICAgICAgU3RyaW5nIHJlc3AgPSBib3MudG9TdHJpbmcoKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKiBSZXNwb25zZSAqKioqKioiK3Jlc3ApOwogICAgICAgICAgICAgYm9zLmNsb3NlKCk7Ci0JICAgIGlmKHJlc3AuaW5kZXhPZigiPG5zOnJldHVybj4zMDwvbnM6cmV0dXJuPiIpICE9IC0xKQorICAgICAgICBpZihyZXNwLmluZGV4T2YoIjxuczpyZXR1cm4+MzA8L25zOnJldHVybj4iKSAhPSAtMSkKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhhcmdzWzBdLCBzdGF0LlBBU1MpOwotCSAgICBlbHNlCisgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhhcmdzWzBdLCBzdGF0LkZBSUwpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvcmVzdGZ1bC1lamIvZW5kcG9pbnQvQWRkTnVtYmVyc0ltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3Jlc3RmdWwtZWpiL2VuZHBvaW50L0FkZE51bWJlcnNJbXBsLmphdmEKaW5kZXggY2I0YjQxZi4uMDMwMGE1MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvcmVzdGZ1bC1lamIvZW5kcG9pbnQvQWRkTnVtYmVyc0ltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9yZXN0ZnVsLWVqYi9lbmRwb2ludC9BZGROdW1iZXJzSW1wbC5qYXZhCkBAIC02Miw3ICs2Miw3IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgSFRUUEV4Y2VwdGlvbig1MDApOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHJpdmF0ZSBTb3VyY2UgY3JlYXRlU291cmNlKFN0cmluZyBzdHIpIHsKICAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihzdHIsICI9Ji8iKTsKICAgICAgICAgU3RyaW5nIHRva2VuID0gc3QubmV4dFRva2VuKCk7CkBAIC03OCw1ICs3OCw1IEBACiAgICAgICAgICAgICBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oYm9keS5nZXRCeXRlcygpKSk7CiAgICAgICAgIHJldHVybiBzb3VyY2U7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9zZWN1cml0eS9yb2xlcy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9zZWN1cml0eS9yb2xlcy9idWlsZC54bWwKaW5kZXggNDQ2YzU4NC4uYWJkMGVmMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvc2VjdXJpdHkvcm9sZXMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3NlY3VyaXR5L3JvbGVzL2J1aWxkLnhtbApAQCAtMjksOSArMjksOSBAQAogICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGllbnQtc3JjLW5hbWUiIHZhbHVlPSJjbGllbnQvQ2xpZW50LmphdmEiLz4KICAgICA8cHJvcGVydHkgbmFtZT0iYXBwLWNsaWVudC1wYXJhbWV0ZXJzIiB2YWx1ZT0iLXhtbCAke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvJHthZG1pbi5kb21haW59L2NvbmZpZy9nbGFzc2Zpc2gtYWNjLnhtbCIvPgogICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJjbGVhbiI+Ci0JPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3kiLz4KLSAgICAgICAgPGJhc2VuYW1lIGZpbGU9IiR7c3JjLW5hbWV9IiBwcm9wZXJ0eT0ic2VydmVyIiBzdWZmaXg9Ii5qYXZhIi8+ICAgIAotCTxjb25kaXRpb24gcHJvcGVydHk9ImRlcGxveV9zdWNjZWVkZWQiPgorICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95Ii8+CisgICAgICAgIDxiYXNlbmFtZSBmaWxlPSIke3NyYy1uYW1lfSIgcHJvcGVydHk9InNlcnZlciIgc3VmZml4PSIuamF2YSIvPgorICAgIDxjb25kaXRpb24gcHJvcGVydHk9ImRlcGxveV9zdWNjZWVkZWQiPgogICAgICAgICAgICAgPGF2YWlsYWJsZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9hdXRvZGVwbG95LyR7c2VydmVyfS5qYXJfZGVwbG95ZWQiLz4KICAgICAgICAgPC9jb25kaXRpb24+CiAgICAgICAgIDxjb25kaXRpb24gcHJvcGVydHk9ImRlcGxveV9mYWlsZWQiPgpAQCAtMzksMzkgKzM5LDM5IEBACiAgICAgICAgIDwvY29uZGl0aW9uPgogICAgICAgICA8ZmFpbCBtZXNzYWdlPSJEZXBsb3ltZW50IGZhaWxlZCIgaWY9ImRlcGxveV9mYWlsZWQiLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iRGVwbG95bWVudCBwYXNzZWQgJHtkZXBsb3lfc3VjY2VlZGVkfSIvPgotCTxlY2hvIG1lc3NhZ2U9IkFMTCBXRUJTRVJWSUNFIElOVk9DQVRJT04gU0hPVUxEIEZBSUwuLi4iLz4gICAgICAgIAorICAgIDxlY2hvIG1lc3NhZ2U9IkFMTCBXRUJTRVJWSUNFIElOVk9DQVRJT04gU0hPVUxEIEZBSUwuLi4iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4iPgotCSAgICA8cGFyYW0gbmFtZT0iYXBwLWNsaWVudC1leHRyYS1wYXJhbWV0ZXJzIiB2YWx1ZT0iLXVzZXIgbm91c2VyIC1wYXNzd29yZCBub3Bhc3MiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImFwcC1jbGllbnQtZXh0cmEtcGFyYW1ldGVycyIgdmFsdWU9Ii11c2VyIG5vdXNlciAtcGFzc3dvcmQgbm9wYXNzIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLQk8ZWNobyBtZXNzYWdlPSJDUkVBVElORyBVU0VSUy4uLiIvPgorICAgIDxlY2hvIG1lc3NhZ2U9IkNSRUFUSU5HIFVTRVJTLi4uIi8+CiAgICAgICAgIDxjb3B5IGZpbGU9IiR7YWRtaW4ucGFzc3dvcmQuZmlsZX0iIHRvZmlsZT0iLi9wYXNzd29yZGZpbGUiIG92ZXJ3cml0ZT0idHJ1ZSIvPgogICAgICAgICA8ZWNobyBmaWxlPSIuL3Bhc3N3b3JkZmlsZSIgYXBwZW5kPSJ0cnVlIj4KIEFTX0FETUlOX1VTRVJQQVNTV09SRD10ZXN0ZXIKICAgICAgICAgPC9lY2hvPgotCTxleGVjIGV4ZWN1dGFibGU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL2FzYWRtaW4iPgotICAgICAgICAgICAgPGFyZyBsaW5lPSJjcmVhdGUtZmlsZS11c2VyIC0tcG9ydCAke2FkbWluLnBvcnR9IC0tdXNlciAke2FkbWluLnVzZXJ9IC0tcGFzc3dvcmRmaWxlIC4vcGFzc3dvcmRmaWxlIC0tZ3JvdXBzIHdlYnNlcnZpY2V0ZXN0ZXIgLS1hdXRocmVhbG1uYW1lIGZpbGUgd2Vic2VydmljZXRlc3RlciIvPiAgICAKLSAgICAJPC9leGVjPgorICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL2FzYWRtaW4iPgorICAgICAgICAgICAgPGFyZyBsaW5lPSJjcmVhdGUtZmlsZS11c2VyIC0tcG9ydCAke2FkbWluLnBvcnR9IC0tdXNlciAke2FkbWluLnVzZXJ9IC0tcGFzc3dvcmRmaWxlIC4vcGFzc3dvcmRmaWxlIC0tZ3JvdXBzIHdlYnNlcnZpY2V0ZXN0ZXIgLS1hdXRocmVhbG1uYW1lIGZpbGUgd2Vic2VydmljZXRlc3RlciIvPgorICAgICAgICA8L2V4ZWM+CiAgICAgICAgIDxjb3B5IGZpbGU9IiR7YWRtaW4ucGFzc3dvcmQuZmlsZX0iIHRvZmlsZT0iLi9wYXNzd29yZGZpbGUiIG92ZXJ3cml0ZT0idHJ1ZSIvPgogICAgICAgICA8ZWNobyBmaWxlPSIuL3Bhc3N3b3JkZmlsZSIgYXBwZW5kPSJ0cnVlIj4KIEFTX0FETUlOX1VTRVJQQVNTV09SRD10ZXN0ZXIyCiAgICAgICAgIDwvZWNobz4KLQk8ZXhlYyBleGVjdXRhYmxlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi9hc2FkbWluIj4KLSAgICAgICAgICAgIDxhcmcgbGluZT0iY3JlYXRlLWZpbGUtdXNlciAtLXBvcnQgJHthZG1pbi5wb3J0fSAtLXVzZXIgJHthZG1pbi51c2VyfSAtLXBhc3N3b3JkZmlsZSAuL3Bhc3N3b3JkZmlsZSAtLWdyb3VwcyB3ZWJzZXJ2aWNldGVzdGVyMiAtLWF1dGhyZWFsbW5hbWUgZmlsZSB3ZWJzZXJ2aWNldGVzdGVyMiIvPiAgICAKLSAgICAJPC9leGVjPgorICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL2FzYWRtaW4iPgorICAgICAgICAgICAgPGFyZyBsaW5lPSJjcmVhdGUtZmlsZS11c2VyIC0tcG9ydCAke2FkbWluLnBvcnR9IC0tdXNlciAke2FkbWluLnVzZXJ9IC0tcGFzc3dvcmRmaWxlIC4vcGFzc3dvcmRmaWxlIC0tZ3JvdXBzIHdlYnNlcnZpY2V0ZXN0ZXIyIC0tYXV0aHJlYWxtbmFtZSBmaWxlIHdlYnNlcnZpY2V0ZXN0ZXIyIi8+CisgICAgICAgIDwvZXhlYz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJpbnRlcm5hbC1ydW4iPgotCSAgICA8cGFyYW0gbmFtZT0iYXBwLWNsaWVudC1leHRyYS1wYXJhbWV0ZXJzIiB2YWx1ZT0iLXVzZXIgbm91c2VyIC1wYXNzd29yZCBub3Bhc3Mgd2Vic2VydmljZXRlc3RlciB0ZXN0ZXIiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImFwcC1jbGllbnQtZXh0cmEtcGFyYW1ldGVycyIgdmFsdWU9Ii11c2VyIG5vdXNlciAtcGFzc3dvcmQgbm9wYXNzIHdlYnNlcnZpY2V0ZXN0ZXIgdGVzdGVyIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJpbnRlcm5hbC1ydW4iPgotCSAgICA8cGFyYW0gbmFtZT0iYXBwLWNsaWVudC1leHRyYS1wYXJhbWV0ZXJzIiB2YWx1ZT0iLXVzZXIgbm91c2VyIC1wYXNzd29yZCBub3Bhc3Mgd2Vic2VydmljZXRlc3RlcjIgdGVzdGVyMiBGQUlMVVJFIi8+Ci0gICAgICAgIDwvYW50Y2FsbD4gICAgICAgIAotCTxlY2hvIG1lc3NhZ2U9IkRFTEVUSU5HIFVTRVJTLi4uIi8+Ci0JPGV4ZWMgZXhlY3V0YWJsZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vYXNhZG1pbiI+Ci0gICAgICAgICAgICA8YXJnIGxpbmU9ImRlbGV0ZS1maWxlLXVzZXIgLS1wb3J0ICR7YWRtaW4ucG9ydH0gLS11c2VyICR7YWRtaW4udXNlcn0gLS1wYXNzd29yZGZpbGUgJHthZG1pbi5wYXNzd29yZC5maWxlfSAtLWF1dGhyZWFsbW5hbWUgZmlsZSB3ZWJzZXJ2aWNldGVzdGVyIi8+ICAgIAotICAgIAk8L2V4ZWM+Ci0JPGV4ZWMgZXhlY3V0YWJsZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vYXNhZG1pbiI+Ci0gICAgICAgICAgICA8YXJnIGxpbmU9ImRlbGV0ZS1maWxlLXVzZXIgLS1wb3J0ICR7YWRtaW4ucG9ydH0gLS11c2VyICR7YWRtaW4udXNlcn0gLS1wYXNzd29yZGZpbGUgJHthZG1pbi5wYXNzd29yZC5maWxlfSAtLWF1dGhyZWFsbW5hbWUgZmlsZSB3ZWJzZXJ2aWNldGVzdGVyMiIvPiAgICAKLSAgICAJPC9leGVjPgotCTxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3kiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9ImFwcC1jbGllbnQtZXh0cmEtcGFyYW1ldGVycyIgdmFsdWU9Ii11c2VyIG5vdXNlciAtcGFzc3dvcmQgbm9wYXNzIHdlYnNlcnZpY2V0ZXN0ZXIyIHRlc3RlcjIgRkFJTFVSRSIvPgorICAgICAgICA8L2FudGNhbGw+CisgICAgPGVjaG8gbWVzc2FnZT0iREVMRVRJTkcgVVNFUlMuLi4iLz4KKyAgICA8ZXhlYyBleGVjdXRhYmxlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi9hc2FkbWluIj4KKyAgICAgICAgICAgIDxhcmcgbGluZT0iZGVsZXRlLWZpbGUtdXNlciAtLXBvcnQgJHthZG1pbi5wb3J0fSAtLXVzZXIgJHthZG1pbi51c2VyfSAtLXBhc3N3b3JkZmlsZSAke2FkbWluLnBhc3N3b3JkLmZpbGV9IC0tYXV0aHJlYWxtbmFtZSBmaWxlIHdlYnNlcnZpY2V0ZXN0ZXIiLz4KKyAgICAgICAgPC9leGVjPgorICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL2FzYWRtaW4iPgorICAgICAgICAgICAgPGFyZyBsaW5lPSJkZWxldGUtZmlsZS11c2VyIC0tcG9ydCAke2FkbWluLnBvcnR9IC0tdXNlciAke2FkbWluLnVzZXJ9IC0tcGFzc3dvcmRmaWxlICR7YWRtaW4ucGFzc3dvcmQuZmlsZX0gLS1hdXRocmVhbG1uYW1lIGZpbGUgd2Vic2VydmljZXRlc3RlcjIiLz4KKyAgICAgICAgPC9leGVjPgorICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3kiLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0icmVwb3J0LXN1Y2Nlc3MiPgpAQCAtODAsNiArODAsNiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJyZXBvcnQtZmFpbHVyZSI+CiAgICAgICAgICAgICA8ZWNobyBtZXNzYWdlPSJUZXN0IGZhaWxlZCIvPgotICAgIDwvdGFyZ2V0PiAgIAkKLSAgICAKKyAgICA8L3RhcmdldD4KKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvc2VjdXJpdHkvcm9sZXMvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvc2VjdXJpdHkvcm9sZXMvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDkzMTM3YTUuLjk1M2QxNGMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3NlY3VyaXR5L3JvbGVzL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9zZWN1cml0eS9yb2xlcy9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTM4LDI2ICszOCwyNiBAQAogICAgICAgICAgICAgU3RyaW5nIHBhc3N3b3JkPW51bGw7CiAgICAgICAgICAgICBib29sZWFuIHN1Y2Nlc3NFeHBlY3RlZD10cnVlOwogICAgICAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uOwotCSAgICBpZiAoYXJncy5sZW5ndGg+MSkgeworICAgICAgICBpZiAoYXJncy5sZW5ndGg+MSkgewogICAgICAgICAgICAgICAgIHVzZXJuYW1lPWFyZ3NbMF07CiAgICAgICAgICAgICAgICAgcGFzc3dvcmQ9YXJnc1sxXTsKLQkJZGVzY3JpcHRpb249IndlYnNlcnZpY2VzLWVqYi1yb2xlc0FsbG93ZWQtYW5ub3RhdGlvbi1wb3NpdGl2ZSI7CisgICAgICAgIGRlc2NyaXB0aW9uPSJ3ZWJzZXJ2aWNlcy1lamItcm9sZXNBbGxvd2VkLWFubm90YXRpb24tcG9zaXRpdmUiOwogICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aD4yKSB7CiAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJ3ZWJzZXJ2aWNlcy1lamItcm9sZXNBbGxvd2VkLWFubm90YXRpb24tbmVnYXRpdmUtMiI7CiAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3NFeHBlY3RlZCA9ICEoYXJnc1syXS5lcXVhbHNJZ25vcmVDYXNlKCJGQUlMVVJFIikpOwotICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBzdWNjZXNzRXhwZWN0ZWQgPSBmYWxzZTsKLQkJZGVzY3JpcHRpb249IndlYnNlcnZpY2VzLWVqYi1yb2xlc0FsbG93ZWQtYW5ub3RhdGlvbi1uZWdhdGl2ZSI7Ci0JICAgIH0KLQkgICAgc3RhdC5hZGREZXNjcmlwdGlvbihkZXNjcmlwdGlvbik7CisgICAgICAgIGRlc2NyaXB0aW9uPSJ3ZWJzZXJ2aWNlcy1lamItcm9sZXNBbGxvd2VkLWFubm90YXRpb24tbmVnYXRpdmUiOworICAgICAgICB9CisgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pOwogICAgICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKICAgICAgICAgICAgIGNsaWVudC5kb1Rlc3QoZGVzY3JpcHRpb24sIHVzZXJuYW1lLCBwYXNzd29yZCwgc3VjY2Vzc0V4cGVjdGVkKTsKLQkgICAgc3RhdC5wcmludFN1bW1hcnkoZGVzY3JpcHRpb24pOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeShkZXNjcmlwdGlvbik7CiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZyBkZXNjLCBTdHJpbmcgdXNlcm5hbWUsIFN0cmluZyBwYXNzd29yZCwgYm9vbGVhbiBzdWNjZXNzRXhwZWN0ZWQpIHsKLSAgICAgICAgICAgCisKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgSGVsbG9JbXBsIHBvcnQgPSBzZXJ2aWNlLmdldEhlbGxvSW1wbFBvcnQoKTsKICAgICAgICAgICAgICAgICBpZiAodXNlcm5hbWUhPW51bGwgJiYgcGFzc3dvcmQhPW51bGwpIHsKQEAgLTY2LDcgKzY2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdENvbnRleHQucHV0KCJqYWthcnRhLnhtbC53cy5zZWN1cml0eS5hdXRoLnVzZXJuYW1lIix1c2VybmFtZSk7CiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RDb250ZXh0LnB1dCgiamFrYXJ0YS54bWwud3Muc2VjdXJpdHkuYXV0aC5wYXNzd29yZCIscGFzc3dvcmQpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIC8vIEBQZXJtaXRBbGwgaW52b2NhdGlvbiwgaXQgc2hvdWxkIGFsd2F5cyB3b3JrCiAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJldCA9IHBvcnQucGVybWl0QWxsKCJBcHBzZXJ2ZXIgVGVzdGVyICEiKTsKQEAgLTgxLDEwICs4MSwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJAUGVybWl0QWxsIG1ldGhvZCBpbnZvY2F0aW9uIGZhaWxlZCAtIFRFU1QgRkFJTEVEIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJAUGVybWl0QWxsIG1ldGhvZCBpbnZvY2F0aW9uIGZhaWxlZCAtIGdvb2QuLi4iKTsgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQFBlcm1pdEFsbCBtZXRob2QgaW52b2NhdGlvbiBmYWlsZWQgLSBnb29kLi4uIik7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBARGVueUFsbCBpbnZvY2F0aW9uLCBpdCBzaG91bGQgYWx3YXlzIGZhaWxlCiAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJldCA9IHBvcnQuZGVueUFsbCgiQXBwc2VydmVyIFRlc3RlciAhIik7CkBAIC05Niw3ICs5Niw3IEBACiAgICAgICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkBEZW55QWxsIG1ldGhvZCBpbnZvY2F0aW9uIGZhaWxlZCAtIGdvb2QuLi4iKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyByb2xlIGJhc2VkIGludm9jYXRpb24KICAgICAgICAgICAgICAgICBTdHJpbmcgcmV0ID0gcG9ydC5yb2xlQmFzZWQoIkFwcHNlcnZlciBUZXN0ZXIgISIpOwogICAgICAgICAgICAgICAgIGlmKHJldC5pbmRleE9mKCJXZWJTdmNUZXN0LUhlbGxvIikgPT0gLTEpIHsKQEAgLTEwNSwxOSArMTA1LDE5IEBACiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJldCk7Ci0JCWlmIChzdWNjZXNzRXhwZWN0ZWQpCi0JICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2MsIHN0YXQuUEFTUyk7Ci0JCWVsc2UgCi0JICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2MsIHN0YXQuRkFJTCk7Ci0gICAgICAgICAgICAgICAgCisgICAgICAgIGlmIChzdWNjZXNzRXhwZWN0ZWQpCisgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2MsIHN0YXQuUEFTUyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzYywgc3RhdC5GQUlMKTsKKwogICAgICAgICAgICAgfSBjYXRjaChUaHJvd2FibGUgdCkgewotCQlpZiAoc3VjY2Vzc0V4cGVjdGVkKSB7Ci0JICAgICAgICAgICAgICAgIHQucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2MsIHN0YXQuRkFJTCk7Ci0JCX0gZWxzZSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkdvdCBleHBlY3RlZCBmYWlsdXJlICIgKyB0LmdldE1lc3NhZ2UoKSk7IAotCSAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjLCBzdGF0LlBBU1MpOwotCQl9CisgICAgICAgIGlmIChzdWNjZXNzRXhwZWN0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgdC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzYywgc3RhdC5GQUlMKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR290IGV4cGVjdGVkIGZhaWx1cmUgIiArIHQuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoZGVzYywgc3RhdC5QQVNTKTsKKyAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3NlY3VyaXR5L3JvbGVzL2VuZHBvaW50L0hlbGxvSW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvc2VjdXJpdHkvcm9sZXMvZW5kcG9pbnQvSGVsbG9JbXBsLmphdmEKaW5kZXggYWRjOWJmYy4uYmRhYzQ0ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvc2VjdXJpdHkvcm9sZXMvZW5kcG9pbnQvSGVsbG9JbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvc2VjdXJpdHkvcm9sZXMvZW5kcG9pbnQvSGVsbG9JbXBsLmphdmEKQEAgLTMwLDcgKzMwLDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIHJvbGVCYXNlZChTdHJpbmcgd2hvKSB7CiAgICAgICAgIHJldHVybiAiV2ViU3ZjVGVzdC1IZWxsbyAiICsgd2hvOwogICAgIH0KLSAgICAKKwogICAgIEBEZW55QWxsCiAgICAgcHVibGljIFN0cmluZyBkZW55QWxsKFN0cmluZyB3aG8pIHsKICAgICAgICAgcmV0dXJuICJXZWJTdmNUZXN0LUhlbGxvICIgKyB3aG87CkBAIC0zOSw1ICszOSw1IEBACiAgICBAUGVybWl0QWxsCiAgICAgcHVibGljIFN0cmluZyBwZXJtaXRBbGwoU3RyaW5nIHdobykgewogICAgICAgICByZXR1cm4gIldlYlN2Y1Rlc3QtSGVsbG8gIiArIHdobzsKLSAgICB9ICAgIAorICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3NlY3VyaXR5L3JvbGVzL2VuZHBvaW50L3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3NlY3VyaXR5L3JvbGVzL2VuZHBvaW50L3N1bi1lamItamFyLnhtbAppbmRleCBkOWFlOTY0Li4wYjRlZjBkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9zZWN1cml0eS9yb2xlcy9lbmRwb2ludC9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvc2VjdXJpdHkvcm9sZXMvZW5kcG9pbnQvc3VuLWVqYi1qYXIueG1sCkBAIC0yNywxMCArMjcsMTAgQEAKICAgICA8ZWpiPgogICAgICAgPGVqYi1uYW1lPkhlbGxvSW1wbDwvZWpiLW5hbWU+CiAgICAgICA8d2Vic2VydmljZS1lbmRwb2ludD4KLQk8cG9ydC1jb21wb25lbnQtbmFtZT5IZWxsb0ltcGw8L3BvcnQtY29tcG9uZW50LW5hbWU+Ci0JPGxvZ2luLWNvbmZpZz4KLQkgIDxhdXRoLW1ldGhvZD5CQVNJQzwvYXV0aC1tZXRob2Q+Ci0JPC9sb2dpbi1jb25maWc+CisgICAgPHBvcnQtY29tcG9uZW50LW5hbWU+SGVsbG9JbXBsPC9wb3J0LWNvbXBvbmVudC1uYW1lPgorICAgIDxsb2dpbi1jb25maWc+CisgICAgICA8YXV0aC1tZXRob2Q+QkFTSUM8L2F1dGgtbWV0aG9kPgorICAgIDwvbG9naW4tY29uZmlnPgogICAgICAgPC93ZWJzZXJ2aWNlLWVuZHBvaW50PgogICAgIDwvZWpiPgogICAgPC9lbnRlcnByaXNlLWJlYW5zPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvc2VydmljZWVqYmNsaWVudC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9zZXJ2aWNlZWpiY2xpZW50L2J1aWxkLnhtbAppbmRleCBkNzYzNjMyLi5kNDI5YjIyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9zZXJ2aWNlZWpiY2xpZW50L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9zZXJ2aWNlZWpiY2xpZW50L2J1aWxkLnhtbApAQCAtMjQsMzEgKzI0LDMxIEBACiA8cHJvamVjdCBuYW1lPSJtZXRob2RpbmplY3Rpb24iIGRlZmF1bHQ9ImNvcmUiIGJhc2VkaXI9Ii4iPgogCiAgICAgJmNvbW1vbkJ1aWxkOwotICAgIDxwcm9wZXJ0eSBmaWxlPSIke2Vudi5BUFNfSE9NRX0vY29uZmlnLnByb3BlcnRpZXMiLz4gICAKKyAgICA8cHJvcGVydHkgZmlsZT0iJHtlbnYuQVBTX0hPTUV9L2NvbmZpZy5wcm9wZXJ0aWVzIi8+CiAgICAgPHByb3BlcnR5IG5hbWU9InNyYy1uYW1lIiB2YWx1ZT0iZW5kcG9pbnQvSGVsbG9JbXBsLmphdmEiLz4KICAgICA8cHJvcGVydHkgbmFtZT0iY2xpZW50LXNyYy1uYW1lIiB2YWx1ZT0iY2xpZW50L0NsaWVudC5qYXZhIi8+CiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImNsZWFuLCBwcml2YXRlLWRlcGxveSwgcHJpdmF0ZS1ydW4sIHByaXZhdGUtdW5kZXBsb3ksIHJlcG9ydCIvPgogCiAgICAgPHRhcmdldCBuYW1lPSJwcml2YXRlLWRlcGxveSI+Ci0JPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3kiLz4KLQk8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuIi8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJ3c2RsLWltcG9ydCI+Ci0JCTxwYXJhbSBuYW1lPSJzZXJ2ZXIiIHZhbHVlPSJIZWxsb0ltcGwiLz4KLQkJPHBhcmFtIG5hbWU9InBvcnQiIHZhbHVlPSJIZWxsb0ltcGwiLz4KLQk8L2FudGNhbGw+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3kiLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuIi8+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJ3c2RsLWltcG9ydCI+CisgICAgICAgIDxwYXJhbSBuYW1lPSJzZXJ2ZXIiIHZhbHVlPSJIZWxsb0ltcGwiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InBvcnQiIHZhbHVlPSJIZWxsb0ltcGwiLz4KKyAgICA8L2FudGNhbGw+CiAgICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3NlcyIKICAgICAgICAgICAgIGluY2x1ZGVzPSJlamIvR2F0ZXdheUltcGwuamF2YSI+CiAgICAgICAgICAgICA8Y2xhc3NwYXRoIHJlZmlkPSJjbGFzc3BhdGgiLz4KICAgICAgICAgPC9qYXZhYz4KLSAJPG1rZGlyIGRpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzL3dzZGwvd3NkbCIvPgotCTxnZXQgc3JjPSJodHRwOi8vJHtodHRwLmhvc3R9OiR7aHR0cC5wb3J0fS9IZWxsb0ltcGxTZXJ2aWNlL0hlbGxvSW1wbD9XU0RMIiBkZXN0PSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMvL3dzZGwvd3NkbC9IZWxsb0ltcGxTZXJ2aWNlLndzZGwiLz4KKyAgICAgPG1rZGlyIGRpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzL3dzZGwvd3NkbCIvPgorICAgIDxnZXQgc3JjPSJodHRwOi8vJHtodHRwLmhvc3R9OiR7aHR0cC5wb3J0fS9IZWxsb0ltcGxTZXJ2aWNlL0hlbGxvSW1wbD9XU0RMIiBkZXN0PSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMvL3dzZGwvd3NkbC9IZWxsb0ltcGxTZXJ2aWNlLndzZGwiLz4KICAgICAgICAgPGphciBkZXN0ZmlsZT0iJHtlbnYuUzFBU19IT01FfS9kb21haW5zL2RvbWFpbjEvYXV0b2RlcGxveS9FamJDbGllbnQuamFyIgotCSAgICBiYXNlZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMiCi0JICAgIGluY2x1ZGVzPSJlamIvKiosZW5kcG9pbnQvKioiPgotCSAgICA8bWV0YWluZiBkaXI9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3Nlcy93c2RsIi8+Ci0JPC9qYXI+Ci0JPHdhaXRmb3IgbWF4d2FpdD0iMTAwIiBtYXh3YWl0dW5pdD0ic2Vjb25kIj4KLSAgICAgICAJICAgIDxvcj4KKyAgICAgICAgYmFzZWRpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzIgorICAgICAgICBpbmNsdWRlcz0iZWpiLyoqLGVuZHBvaW50LyoqIj4KKyAgICAgICAgPG1ldGFpbmYgZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMvd3NkbCIvPgorICAgIDwvamFyPgorICAgIDx3YWl0Zm9yIG1heHdhaXQ9IjEwMCIgbWF4d2FpdHVuaXQ9InNlY29uZCI+CisgICAgICAgICAgICAgICA8b3I+CiAgICAgICAgICAgICAgICAgPGF2YWlsYWJsZSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvZG9tYWluMS9hdXRvZGVwbG95L0VqYkNsaWVudC5qYXJfZGVwbG95ZWQiLz4KICAgICAgICAgICAgICAgICA8YXZhaWxhYmxlIGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2F1dG9kZXBsb3kvRWpiQ2xpZW50Lmphcl9kZXBsb3lGYWlsZWQiLz4KICAgICAgICAgICAgIDwvb3I+CkBAIC01OSwzMCArNTksMzAgQEAKICAgICAgICAgPGNvbmRpdGlvbiBwcm9wZXJ0eT0iZGVwbG95X2ZhaWxlZCI+CiAgICAgICAgICAgICA8YXZhaWxhYmxlIGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy9kb21haW4xL2F1dG9kZXBsb3kvRWpiQ2xpZW50Lmphcl9kZXBsb3lGYWlsZWQiLz4KICAgICAgICAgPC9jb25kaXRpb24+Ci0JPGZhaWwgaWY9ImRlcGxveV9mYWlsZWQiIG1lc3NhZ2U9IkRlcGxveW1lbnQgZmFpbGVkIi8+CisgICAgPGZhaWwgaWY9ImRlcGxveV9mYWlsZWQiIG1lc3NhZ2U9IkRlcGxveW1lbnQgZmFpbGVkIi8+CiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBuYW1lPSJwcml2YXRlLXJ1biI+CiAgICAgICAgIDxiYXNlbmFtZSBmaWxlPSIke2NsaWVudC1zcmMtbmFtZX0iIHByb3BlcnR5PSJjbGllbnQiIHN1ZmZpeD0iLmphdmEiLz4KICAgICAgICAgPGRpcm5hbWUgZmlsZT0iJHtjbGllbnQtc3JjLW5hbWV9IiBwcm9wZXJ0eT0iY2xpZW50LWRpcmVjdG9yeSIvPgotICAgICAgICA8YmFzZW5hbWUgZmlsZT0iJHtjbGllbnQtZGlyZWN0b3J5fSIgcHJvcGVydHk9ImNsaWVudC1wa2ctbmFtZSIvPiAKKyAgICAgICAgPGJhc2VuYW1lIGZpbGU9IiR7Y2xpZW50LWRpcmVjdG9yeX0iIHByb3BlcnR5PSJjbGllbnQtcGtnLW5hbWUiLz4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImNsaWVudC1jbGFzcy1uYW1lIiB2YWx1ZT0iJHtjbGllbnQtcGtnLW5hbWV9LyR7Y2xpZW50fS5jbGFzcyIvPgotCTxhbnRjYWxsIHRhcmdldD0iY2xlYW4iLz4KLQk8YW50Y2FsbCB0YXJnZXQ9IndzZGwtaW1wb3J0Ij4KLQkJPHBhcmFtIG5hbWU9InNlcnZlciIgdmFsdWU9IkdhdGV3YXlJbXBsIi8+Ci0JCTxwYXJhbSBuYW1lPSJwb3J0IiB2YWx1ZT0iR2F0ZXdheUltcGwiLz4KLQk8L2FudGNhbGw+Ci0JPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNsaWVudCIvPgorICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4iLz4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9IndzZGwtaW1wb3J0Ij4KKyAgICAgICAgPHBhcmFtIG5hbWU9InNlcnZlciIgdmFsdWU9IkdhdGV3YXlJbXBsIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJwb3J0IiB2YWx1ZT0iR2F0ZXdheUltcGwiLz4KKyAgICA8L2FudGNhbGw+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNsaWVudCIvPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJSdW5uaW5nIGFwcGNsaWVudCB3aXRoICR7Y2xpZW50LXBrZy1uYW1lfS4ke2NsaWVudH0iLz4KICAgICAgICAgPHVuamFyIHNyYz0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIGRlc3Q9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3NlcyIvPgogICAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi9hcHBjbGllbnQiIGRpcj0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9jbGFzc2VzIj4KLSAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7Y2xpZW50LXBrZy1uYW1lfS4ke2NsaWVudH0iLz4gICAgCisgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2NsaWVudC1wa2ctbmFtZX0uJHtjbGllbnR9Ii8+CiAgICAgICAgIDwvZXhlYz4KICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IG5hbWU9InByaXZhdGUtdW5kZXBsb3kiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95Ii8+Ci0JPGFudGNhbGwgdGFyZ2V0PSJhdXRvdW5kZXBsb3ktZmlsZSI+Ci0JCTxwYXJhbSBuYW1lPSJmaWxlbmFtZSIgdmFsdWU9IkVqYkNsaWVudC5qYXIiLz4KLQk8L2FudGNhbGw+CisgICAgPGFudGNhbGwgdGFyZ2V0PSJhdXRvdW5kZXBsb3ktZmlsZSI+CisgICAgICAgIDxwYXJhbSBuYW1lPSJmaWxlbmFtZSIgdmFsdWU9IkVqYkNsaWVudC5qYXIiLz4KKyAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJlcG9ydC1zdWNjZXNzIj4KQEAgLTkxLDYgKzkxLDYgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0icmVwb3J0LWZhaWx1cmUiPgogICAgICAgICAgICAgPGVjaG8gbWVzc2FnZT0iVGVzdCBmYWlsZWQiLz4KLSAgICA8L3RhcmdldD4gICAJCi0gICAgCisgICAgPC90YXJnZXQ+CisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3NlcnZpY2VlamJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvc2VydmljZWVqYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMDNlOWI2Ny4uMGMyNjBkZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvc2VydmljZWVqYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvc2VydmljZWVqYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI4LDQzICsyOCw0MyBAQAogICAgICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCi0JcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIGRlc2MgPSAid3MtZWpiLXNldmljZS1maWVsZC1pbmplY3Rpb24iOworICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBkZXNjID0gIndzLWVqYi1zZXZpY2UtZmllbGQtaW5qZWN0aW9uIjsKIAotCUBXZWJTZXJ2aWNlUmVmKEdhdGV3YXlJbXBsU2VydmljZS5jbGFzcykKKyAgICBAV2ViU2VydmljZVJlZihHYXRld2F5SW1wbFNlcnZpY2UuY2xhc3MpCiAgICAgICAgIHN0YXRpYyBHYXRld2F5SW1wbCBwb3J0OwogCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQkgICAgc3RhdC5hZGREZXNjcmlwdGlvbihkZXNjKTsKKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbihkZXNjKTsKICAgICAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7CiAgICAgICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3MpOwotCSAgICBzdGF0LnByaW50U3VtbWFyeShkZXNjKTsKKyAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoZGVzYyk7CiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgICAgIHRyeSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiTWV0aG9kIGluamVjdGVkIHJlZmVyZW5jZSB0ZXN0Li4uIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTWV0aG9kIGluamVjdGVkIHJlZmVyZW5jZSB0ZXN0Li4uIik7CiAgICAgICAgICAgICAgICAgU3RyaW5nIHJldCA9IHBvcnQuaW52b2tlTWV0aG9kKCJBcHBzZXJ2ZXIgVGVzdGVyICEiKTsKLQkJaWYocmV0LmluZGV4T2YoIk1FVEhPRCBXZWJTdmNUZXN0LUhlbGxvIikgPT0gLTEpIHsKKyAgICAgICAgaWYocmV0LmluZGV4T2YoIk1FVEhPRCBXZWJTdmNUZXN0LUhlbGxvIikgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXQpOwogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0JCX0KKyAgICAgICAgfQogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VydmVyIHJldHVybmVkICIgKyByZXQgKyAiIDogUEFTU0VEIik7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiRmllbGQgaW5qZWN0ZWQgcmVmZXJlbmNlIHRlc3QuLi4iKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGaWVsZCBpbmplY3RlZCByZWZlcmVuY2UgdGVzdC4uLiIpOwogICAgICAgICAgICAgICAgIHJldCA9IHBvcnQuaW52b2tlRmllbGQoIkFwcHNlcnZlciBUZXN0ZXIgISIpOwotCQlpZihyZXQuaW5kZXhPZigiRklFTEQgV2ViU3ZjVGVzdC1IZWxsbyIpID09IC0xKSB7CisgICAgICAgIGlmKHJldC5pbmRleE9mKCJGSUVMRCBXZWJTdmNUZXN0LUhlbGxvIikgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXQpOwogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0JCX0KKyAgICAgICAgfQogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VydmVyIHJldHVybmVkICIgKyByZXQgKyAiIDogUEFTU0VEIik7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiRGVwZW5kZW5jeSBqbmRpIGxvb3VwIHJlZmVyZW5jZSB0ZXN0Li4uIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGVwZW5kZW5jeSBqbmRpIGxvb3VwIHJlZmVyZW5jZSB0ZXN0Li4uIik7CiAgICAgICAgICAgICAgICAgcmV0ID0gcG9ydC5pbnZva2VEZXBlbmRlbmN5KCJBcHBzZXJ2ZXIgVGVzdGVyICEiKTsKLQkJaWYocmV0LmluZGV4T2YoIkpOREkgV2ViU3ZjVGVzdC1IZWxsbyIpID09IC0xKSB7CisgICAgICAgIGlmKHJldC5pbmRleE9mKCJKTkRJIFdlYlN2Y1Rlc3QtSGVsbG8iKSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJldCk7CiAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKGRlc2MsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQkJfQorICAgICAgICB9CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZXJ2ZXIgcmV0dXJuZWQgIiArIHJldCArICIgOiBQQVNTRUQiKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyhkZXNjLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvc2VydmljZWVqYmNsaWVudC9lamIvR2F0ZXdheUltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3NlcnZpY2VlamJjbGllbnQvZWpiL0dhdGV3YXlJbXBsLmphdmEKaW5kZXggYTA0MDNkYy4uMTVhY2VmNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvc2VydmljZWVqYmNsaWVudC9lamIvR2F0ZXdheUltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9zZXJ2aWNlZWpiY2xpZW50L2VqYi9HYXRld2F5SW1wbC5qYXZhCkBAIC0zOCwzOCArMzgsMzggQEAKIAogICAgIEhlbGxvSW1wbFNlcnZpY2Ugc2VydmljZU1ldGhvZD1udWxsOwogCi0gICAgLy8gbWV0aG9kIGluamVjdGlvbiBoYXMgdG8gYmUgcHJpdmF0ZSB0byBhdm9pZCBiZWluZyBwYXJ0IG9mIHRoZSAKKyAgICAvLyBtZXRob2QgaW5qZWN0aW9uIGhhcyB0byBiZSBwcml2YXRlIHRvIGF2b2lkIGJlaW5nIHBhcnQgb2YgdGhlCiAgICAgLy8gd2ViIHNlcnZpY2UgaW50ZXJmYWNlLgogICAgIEBXZWJTZXJ2aWNlUmVmKCkKICAgICBwcml2YXRlIHZvaWQgc2V0U2VydmljZShIZWxsb0ltcGxTZXJ2aWNlIHNlcnZpY2UpIHsKLQlzZXJ2aWNlTWV0aG9kID0gc2VydmljZTsKKyAgICBzZXJ2aWNlTWV0aG9kID0gc2VydmljZTsKICAgICB9CiAKICAgICBAV2ViTWV0aG9kCiAgICAgcHVibGljIFN0cmluZyBpbnZva2VNZXRob2QoU3RyaW5nIHdobykgewotICAgICAgICBIZWxsb0ltcGwgcG9ydCA9IHNlcnZpY2VNZXRob2QuZ2V0UG9ydChIZWxsb0ltcGwuY2xhc3MpOyAgICAgICAKLQlyZXR1cm4gIk1FVEhPRCAiICsgcG9ydC5zYXlIZWxsbyh3aG8pOworICAgICAgICBIZWxsb0ltcGwgcG9ydCA9IHNlcnZpY2VNZXRob2QuZ2V0UG9ydChIZWxsb0ltcGwuY2xhc3MpOworICAgIHJldHVybiAiTUVUSE9EICIgKyBwb3J0LnNheUhlbGxvKHdobyk7CiAgICAgfQogCiAgICAgQFdlYk1ldGhvZAogICAgIHB1YmxpYyBTdHJpbmcgaW52b2tlRmllbGQoU3RyaW5nIHdobykgewotICAgICAgICBIZWxsb0ltcGwgcG9ydCA9IHNlcnZpY2VGaWVsZC5nZXRQb3J0KEhlbGxvSW1wbC5jbGFzcyk7ICAgICAgICAKKyAgICAgICAgSGVsbG9JbXBsIHBvcnQgPSBzZXJ2aWNlRmllbGQuZ2V0UG9ydChIZWxsb0ltcGwuY2xhc3MpOwogICAgICAgICByZXR1cm4gIkZJRUxEICIgKyBwb3J0LnNheUhlbGxvKHdobyk7CiAgICAgfQogCiAgICAgQFdlYk1ldGhvZAogICAgIHB1YmxpYyBTdHJpbmcgaW52b2tlRGVwZW5kZW5jeShTdHJpbmcgd2hvKSB7CiAgICAgICAgIFN0cmluZyByZXN1bHQgPSBudWxsOwotCXRyeSB7Ci0JCUNvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLQkJSGVsbG9JbXBsU2VydmljZSBzZXJ2aWNlID0gKEhlbGxvSW1wbFNlcnZpY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9zZXJ2aWNlL2hlbGxvc2VydmljZSIpOwotCQlIZWxsb0ltcGwgcG9ydCA9IHNlcnZpY2UuZ2V0UG9ydChIZWxsb0ltcGwuY2xhc3MpOworICAgIHRyeSB7CisgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgSGVsbG9JbXBsU2VydmljZSBzZXJ2aWNlID0gKEhlbGxvSW1wbFNlcnZpY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9zZXJ2aWNlL2hlbGxvc2VydmljZSIpOworICAgICAgICBIZWxsb0ltcGwgcG9ydCA9IHNlcnZpY2UuZ2V0UG9ydChIZWxsb0ltcGwuY2xhc3MpOwogICAgICAgICAgICAgICAgIHJlc3VsdCA9ICJKTkRJICIgKyBwb3J0LnNheUhlbGxvKHdobyk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbihyZXN1bHQpOwotCX0gY2F0Y2goVGhyb3dhYmxlIHQpIHsKLQkJdC5wcmludFN0YWNrVHJhY2UoKTsKLQkJcmV0dXJuICJGQUlMRUQiOwotCX0KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJlc3VsdCk7CisgICAgfSBjYXRjaChUaHJvd2FibGUgdCkgeworICAgICAgICB0LnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICByZXR1cm4gIkZBSUxFRCI7CisgICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvc2Vzc2lvbmN0eC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9zZXNzaW9uY3R4L2J1aWxkLnhtbAppbmRleCAzMDQ5NGY3Li42YWEyMDExIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9zZXNzaW9uY3R4L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9zZXNzaW9uY3R4L2J1aWxkLnhtbApAQCAtMzQsNiArMzQsNiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJyZXBvcnQtZmFpbHVyZSI+CiAgICAgICAgICAgICA8ZWNobyBtZXNzYWdlPSJUZXN0IGZhaWxlZCIvPgotICAgIDwvdGFyZ2V0PiAgIAkKLSAgICAKKyAgICA8L3RhcmdldD4KKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvc2Vzc2lvbmN0eC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9zZXNzaW9uY3R4L2NsaWVudC9DbGllbnQuamF2YQppbmRleCBkYWYyZGVlLi44ZGU3ODE3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9zZXNzaW9uY3R4L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9zZXNzaW9uY3R4L2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzIsMTAgKzMyLDEwIEBACiAgICAgICAgIHN0YXRpYyBIZWxsb0ltcGxTZXJ2aWNlIHNlcnZpY2U7CiAKICAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCSAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ3ZWJzZXJ2aWNlcy1lamItc2Vzc2lvbmN0eCIpOworICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ3ZWJzZXJ2aWNlcy1lamItc2Vzc2lvbmN0eCIpOwogICAgICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKICAgICAgICAgICAgIGNsaWVudC5kb1Rlc3QoYXJncyk7Ci0JICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3ZWJzZXJ2aWNlcy1lamItc2Vzc2lvbmN0eCIpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgid2Vic2VydmljZXMtZWpiLXNlc3Npb25jdHgiKTsKICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nW10gYXJncykgewpAQCAtNDMsMTEgKzQzLDExIEBACiAgICAgICAgICAgICAgICAgSGVsbG9JbXBsIHBvcnQgPSBzZXJ2aWNlLmdldEhlbGxvSW1wbFBvcnQoKTsKICAgICAgICAgICAgICAgICBmb3IgKGludCBpPTA7aTwxMDtpKyspIHsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJldCA9IHBvcnQuc2F5SGVsbG8oIkFwcHNlcnZlciBUZXN0ZXIgISIpOwotCQkgICAgaWYocmV0LmluZGV4T2YoIldlYlN2Y1Rlc3QtSGVsbG8gQU5PTllNT1VTIikgPT0gLTEpIHsKKyAgICAgICAgICAgIGlmKHJldC5pbmRleE9mKCJXZWJTdmNUZXN0LUhlbGxvIEFOT05ZTU9VUyIpID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZWpiLXNlc3Npb25jdHgiLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCQkgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmV0KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYi1zZXNzaW9uY3R4Iiwgc3RhdC5QQVNTKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3Nlc3Npb25jdHgvZW5kcG9pbnQvSGVsbG9JbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9zZXNzaW9uY3R4L2VuZHBvaW50L0hlbGxvSW1wbC5qYXZhCmluZGV4IDVlY2JjYjEuLjFhZTE5NWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3Nlc3Npb25jdHgvZW5kcG9pbnQvSGVsbG9JbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvc2Vzc2lvbmN0eC9lbmRwb2ludC9IZWxsb0ltcGwuamF2YQpAQCAtMzAsOSArMzAsOSBAQAogICAgIEBSZXNvdXJjZSBTZXNzaW9uQ29udGV4dCBlamJzYzsKIAogICAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIHdobykgewotCVN5c3RlbS5vdXQucHJpbnRsbigiRUpCIFdTQ1RYVCB3c2MgPSAiICsgZWpic2MpOwotCWlmKGVqYnNjICE9IG51bGwpCi0gICAgICAgIAlyZXR1cm4gIldlYlN2Y1Rlc3QtSGVsbG8gIiArIGVqYnNjLmdldENhbGxlclByaW5jaXBhbCgpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRUpCIFdTQ1RYVCB3c2MgPSAiICsgZWpic2MpOworICAgIGlmKGVqYnNjICE9IG51bGwpCisgICAgICAgICAgICByZXR1cm4gIldlYlN2Y1Rlc3QtSGVsbG8gIiArIGVqYnNjLmdldENhbGxlclByaW5jaXBhbCgpOwogICAgICAgICByZXR1cm4gIkVKQiBXZWJTZXJ2aWNlQ29udGV4dCBpbmplY3Rpb24gZmFpbGVkIjsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9zaW5nbGV0b24vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3NpbmdsZXRvbi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDExZTRkNGUuLmJkM2ZkZTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3NpbmdsZXRvbi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3NpbmdsZXRvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw4ICsxNSw4IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzaW5nbGV0b24iLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9zaW5nbGV0b24vYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvc2luZ2xldG9uL2J1aWxkLnhtbAppbmRleCBmMDI5ZWEzLi41NjNiZWQzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9zaW5nbGV0b24vYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3NpbmdsZXRvbi9idWlsZC54bWwKQEAgLTY5LDggKzY5LDggQEAKICAgICAgICAgPHBhcmFtIG5hbWU9IndzaW1wb3J0LmFyZ3MiCiAgICAgICAgICAgICAgICB2YWx1ZT0iLWtlZXAgIC1YZW5kb3JzZWQgLWQgJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IGh0dHA6Ly8ke2h0dHAuaG9zdH06JHtodHRwLnBvcnR9L0hlbGxvSW1wbFNlcnZpY2UvSGVsbG9JbXBsP1dTREwiLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICAgIDxqYXZhYyB2ZXJib3NlPSJ0cnVlIiBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIgCi0gICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2oyZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbW9kdWxlcy93ZWJzZXJ2aWNlcy1vc2dpLmphcjoke2Vudi5TMUFTX0hPTUV9L21vZHVsZXMvd2Vic2VydmljZXMtYXBpLW9zZ2kuamFyOiR7ZW52LlMxQVNfSE9NRX0vbW9kdWxlcy9qYXhiLW9zZ2kuamFyOiR7ZW52LlMxQVNfSE9NRX0vbW9kdWxlcy9qYXhiLWFwaS1vc2dpLmphciIgCisgICAgICA8amF2YWMgdmVyYm9zZT0idHJ1ZSIgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2oyZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbW9kdWxlcy93ZWJzZXJ2aWNlcy1vc2dpLmphcjoke2Vudi5TMUFTX0hPTUV9L21vZHVsZXMvd2Vic2VydmljZXMtYXBpLW9zZ2kuamFyOiR7ZW52LlMxQVNfSE9NRX0vbW9kdWxlcy9qYXhiLW9zZ2kuamFyOiR7ZW52LlMxQVNfSE9NRX0vbW9kdWxlcy9qYXhiLWFwaS1vc2dpLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJjbGllbnQvKioiLz4KICAgICA8L3RhcmdldD4KIApAQCAtODYsNyArODYsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuY2xpZW50Ij4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLWNsaWVudCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJjbGllbnQtY2xhc3MiIHZhbHVlPSJjbGllbnQuQ2xpZW50Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9zaW5nbGV0b24vY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvc2luZ2xldG9uL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA4Y2ViMDYyLi44NDZjZDNhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9zaW5nbGV0b24vY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3NpbmdsZXRvbi9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTM3LDEwICszNywxMCBAQAogICAgICAgIC8vIHN0YXRpYyBIZWxsb0ltcGxTZXJ2aWNlIHNlcnZpY2U7CiAKICAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCSAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJlamItc2luZ2xldG9uLXNlcnZpY2UiKTsKKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiZWpiLXNpbmdsZXRvbi1zZXJ2aWNlIik7CiAgICAgICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAgICAgICAgICAgY2xpZW50LmRvU3luY1Rlc3QoKTsKLQkgICAgc3RhdC5wcmludFN1bW1hcnkoImVqYi1zaW5nbGV0b24tc2VydmljZSIpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiZWpiLXNpbmdsZXRvbi1zZXJ2aWNlIik7CiAgICAgICAgIH0KIAogICAgICAgICBwdWJsaWMgdm9pZCBkb1N5bmNUZXN0KCkgewpAQCAtNDgsMTEgKzQ4LDExIEBACiAgICAgICAgICAgICAgICAgSGVsbG9JbXBsU2VydmljZSBzZXJ2aWNlID0gbmV3IEhlbGxvSW1wbFNlcnZpY2UoKTsKICAgICAgICAgICAgICAgICBIZWxsb0ltcGwgcG9ydCA9IHNlcnZpY2UuZ2V0SGVsbG9JbXBsUG9ydCgpOwogICAgICAgICAgICAgICAgIFJldFZhbCByZXQgPSBwb3J0LnNheUhlbGxvKCJIaSBTaW5nbGV0b24iKTsKLQkJaWYocmV0LmdldFJldFZhbCgpLmluZGV4T2YoIlNpbmciKSA9PSAtMSkgewotCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCJXUk9ORyBHUkVFVElORyAiICsgcmV0LmdldFJldFZhbCgpKTsKKyAgICAgICAgaWYocmV0LmdldFJldFZhbCgpLmluZGV4T2YoIlNpbmciKSA9PSAtMSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJXUk9ORyBHUkVFVElORyAiICsgcmV0LmdldFJldFZhbCgpKTsKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYi1zaW5nbGV0b24tc2VydmljZS10ZXN0Iiwgc3RhdC5GQUlMKTsKLQkJICAgIHJldHVybjsKLQkJfQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJldCk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJldC5nZXRSZXRWYWwoKSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImVqYi1zaW5nbGV0b24tc2VydmljZS10ZXN0Iiwgc3RhdC5QQVNTKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3N2Y2hhbmRsZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci9idWlsZC54bWwKaW5kZXggMDZjN2FjYy4uYTRmYmM0OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci9idWlsZC54bWwKQEAgLTM0LDYgKzM0LDYgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0icmVwb3J0LWZhaWx1cmUiPgogICAgICAgICAgICAgPGVjaG8gbWVzc2FnZT0iVGVzdCBmYWlsZWQiLz4KLSAgICA8L3RhcmdldD4gICAJCi0gICAgCisgICAgPC90YXJnZXQ+CisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3N2Y2hhbmRsZXIvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggNDY2MThlYy4uYzg3NGIzMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTMyLDEwICszMiwxMCBAQAogICAgICAgICAvL3N0YXRpYyBIZWxsb0VKQlNlcnZpY2Ugc2VydmljZTsKIAogICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oImhhbmRsZXItY2hhaW4tYW5ub3RhdGlvbiIpOworICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJoYW5kbGVyLWNoYWluLWFubm90YXRpb24iKTsKICAgICAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7CiAgICAgICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3MpOwotCSAgICBzdGF0LnByaW50U3VtbWFyeSgiaGFuZGxlci1jaGFpbi1hbm5vdGF0aW9uIik7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJoYW5kbGVyLWNoYWluLWFubm90YXRpb24iKTsKICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nW10gYXJncykgewpAQCAtNDMsMTEgKzQzLDExIEBACiAgICAgICAgICAgICAgICAgSGVsbG8gcG9ydCA9bmV3IEhlbGxvRUpCU2VydmljZSgpLmdldEhlbGxvRUpCUG9ydCgpOwogICAgICAgICAgICAgICAgIGZvciAoaW50IGk9MDtpPDEwO2krKykgewogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcmV0ID0gcG9ydC5zYXlIZWxsbygiQXBwc2VydmVyIFRlc3RlciAhIik7Ci0JCSAgICBpZihyZXQuaW5kZXhPZigiV2ViU3ZjVGVzdC1IZWxsbyBpbmplY3RlZFZhbHVlIikgPT0gLTEpIHsKKyAgICAgICAgICAgIGlmKHJldC5pbmRleE9mKCJXZWJTdmNUZXN0LUhlbGxvIGluamVjdGVkVmFsdWUiKSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImhhbmRsZXItY2hhaW4tYW5ub3RhdGlvbiIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0JCSAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiaGFuZGxlci1jaGFpbi1hbm5vdGF0aW9uIiwgc3RhdC5QQVNTKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3N2Y2hhbmRsZXIvZW5kcG9pbnQvSGVsbG8uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3N2Y2hhbmRsZXIvZW5kcG9pbnQvSGVsbG8uamF2YQppbmRleCBkZDRiNjQyLi40YjhmOWVlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyL2VuZHBvaW50L0hlbGxvLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci9lbmRwb2ludC9IZWxsby5qYXZhCkBAIC0yMSw1ICsyMSw1IEBACiBAV2ViU2VydmljZQogcHVibGljIGludGVyZmFjZSBIZWxsbyB7CiAKLQlwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyB3aG8pOworICAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIHdobyk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyL2VuZHBvaW50L1Rlc3RIYW5kbGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy9zdmNoYW5kbGVyL2VuZHBvaW50L1Rlc3RIYW5kbGVyLmphdmEKaW5kZXggZmJhNjA1MS4uNjQ5NDU3ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvc3ZjaGFuZGxlci9lbmRwb2ludC9UZXN0SGFuZGxlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3N2Y2hhbmRsZXIvZW5kcG9pbnQvVGVzdEhhbmRsZXIuamF2YQpAQCAtMjgsMTEgKzI4LDExIEBACiBpbXBvcnQgamFrYXJ0YS54bWwuc29hcC4qOwogCiBwdWJsaWMgY2xhc3MgVGVzdEhhbmRsZXIgaW1wbGVtZW50cyBTT0FQSGFuZGxlcjxTT0FQTWVzc2FnZUNvbnRleHQ+IHsKLSAgICAKKwogICAgIHB1YmxpYyBTZXQ8UU5hbWU+IGdldEhlYWRlcnMoKSB7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KLSAgICAKKwogICAgIFN0cmluZyBwb3N0Q29uc3RTdHJpbmcgPSAiTk9UX0lOSVRJQUxJWkVEIjsKICAgICBAUG9zdENvbnN0cnVjdAogICAgIHB1YmxpYyB2b2lkIGluaXQoKSB7CkBAIC00MCw4ICs0MCw4IEBACiAgICAgfQogCiAgICAgQFJlc291cmNlKG5hbWU9InN0cmluZ1ZhbHVlIikKLSAgICBTdHJpbmcgaW5qZWN0ZWRTdHJpbmcgPSAidW5kZWZpbmVkIjsgICAgCi0gICAgCisgICAgU3RyaW5nIGluamVjdGVkU3RyaW5nID0gInVuZGVmaW5lZCI7CisKICAgICBwdWJsaWMgYm9vbGVhbiBoYW5kbGVNZXNzYWdlKFNPQVBNZXNzYWdlQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpZiAoIlBST1BFUkxZX0lOSVRJQUxJWkVEIi5lcXVhbHMocG9zdENvbnN0U3RyaW5nKSkgewpAQCAtNTAsMzMgKzUwLDMzIEBACiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIYW5kbGVyIFBvc3RDb25zdHJ1Y3Qgbm90IGNhbGxlZCBwcm9wZXJ0eSIpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigicG9zdENvbnN0U3RyaW5nID0gIiArIHBvc3RDb25zdFN0cmluZyk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfSAgICAgICAgICAgIAorICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCJ1bmRlZmluZWQiLmVxdWFscyhpbmplY3RlZFN0cmluZykpIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhhbmRsZXIgbm90IGluamVjdGVkIHByb3BlcnR5Iik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImluamVjdGVkU3RyaW5nID0gIiArIGluamVjdGVkU3RyaW5nKTsKLSAgICAgICAgICAgIH0gICAgICAgICAgICAKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIFNPQVBNZXNzYWdlQ29udGV4dCBzbWMgPSAoU09BUE1lc3NhZ2VDb250ZXh0KSBjb250ZXh0OwogICAgICAgICAgICAgU09BUE1lc3NhZ2UgbWVzc2FnZSA9IHNtYy5nZXRNZXNzYWdlKCk7CiAgICAgICAgICAgICBTT0FQQm9keSBib2R5ID0gbWVzc2FnZS5nZXRTT0FQQm9keSgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFNPQVBFbGVtZW50IHBhcmFtRWxlbWVudCA9CiAgICAgICAgICAgICAgICAgKFNPQVBFbGVtZW50KSBib2R5LmdldEZpcnN0Q2hpbGQoKS5nZXRGaXJzdENoaWxkKCk7CiAgICAgICAgICAgICBwYXJhbUVsZW1lbnQuc2V0VmFsdWUoaW5qZWN0ZWRTdHJpbmcgKyAiICIgKyBwYXJhbUVsZW1lbnQuZ2V0VmFsdWUoKSk7CiAgICAgICAgIH0gY2F0Y2ggKFNPQVBFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotCVN5c3RlbS5vdXQucHJpbnRsbigiVklKJ3MgVEVTVCBIQU5ETEVSIENBTExFRCIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVklKJ3MgVEVTVCBIQU5ETEVSIENBTExFRCIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBoYW5kbGVGYXVsdChTT0FQTWVzc2FnZUNvbnRleHQgY29udGV4dCkgewogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkge30KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGNsb3NlKE1lc3NhZ2VDb250ZXh0IGNvbnRleHQpIHt9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3dzUmVmLXdlYnNlcnZpY2UtZmVhdHVyZXMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3dzUmVmLXdlYnNlcnZpY2UtZmVhdHVyZXMvYnVpbGQucHJvcGVydGllcwppbmRleCAyZTc2YTM5Li4wMjZhYTQ0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy93c1JlZi13ZWJzZXJ2aWNlLWZlYXR1cmVzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvd3NSZWYtd2Vic2VydmljZS1mZWF0dXJlcy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndzUmVmLXdlYnNlcnZpY2UtZmVhdHVyZXMiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9Ii4vd2ViLnhtbCIvPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy93c1JlZi13ZWJzZXJ2aWNlLWZlYXR1cmVzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3dzUmVmLXdlYnNlcnZpY2UtZmVhdHVyZXMvYnVpbGQueG1sCmluZGV4IDcxYzcxNjcuLjZhY2Y3ZmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3dzUmVmLXdlYnNlcnZpY2UtZmVhdHVyZXMvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3dzUmVmLXdlYnNlcnZpY2UtZmVhdHVyZXMvYnVpbGQueG1sCkBAIC0zMyw3ICszMyw3IEBACiAgICAgJnRlc3Rwcm9wZXJ0aWVzOwogICAgICZqYXh3c1Rvb2xzOwogCi0gIAorCiAgICAgPHBhdGggaWQ9ImNsYXNzcGF0aCI+CiAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtlbnYuUzFBU19IT01FfS9tb2R1bGVzIj4KICAgICAgICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLmphciIvPgpAQCAtMTE1LDcgKzExNSw3IEBACiAgICAgICAgIDxhcmcgbGluZT0iLS1wb3J0ICR7YWRtaW4ucG9ydH0iLz4KICAgICAgICAgPGFyZyBsaW5lPSIke2NsaWVudC53YXJ9Ii8+CiAgICAgICA8L2V4ZWM+Ci0gICAgPC90YXJnZXQ+ICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95LWNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSI+CkBAIC0xNDEsNiArMTQxLDYgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jbGllbnQiLz4KICAgICA8L3RhcmdldD4KIAotICAgIAorCiA8L3Byb2plY3Q+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3dzUmVmLXdlYnNlcnZpY2UtZmVhdHVyZXMvY2xpZW50LXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy93c1JlZi13ZWJzZXJ2aWNlLWZlYXR1cmVzL2NsaWVudC13ZWIueG1sCmluZGV4IDAyN2RmY2UuLmI0YmJmNWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3dzUmVmLXdlYnNlcnZpY2UtZmVhdHVyZXMvY2xpZW50LXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvd3NSZWYtd2Vic2VydmljZS1mZWF0dXJlcy9jbGllbnQtd2ViLnhtbApAQCAtMjAsNyArMjAsNyBAQAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLSAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIAorICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogICA8ZGVzY3JpcHRpb24+QSB0ZXN0IGFwcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KICAgPGRpc3BsYXktbmFtZT5XZWJUaWVyPC9kaXNwbGF5LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy93c1JlZi13ZWJzZXJ2aWNlLWZlYXR1cmVzL2NsaWVudC9UZXN0Q2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy93c1JlZi13ZWJzZXJ2aWNlLWZlYXR1cmVzL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKaW5kZXggZmZkNzZmNS4uMzBmOTVlMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvd3NSZWYtd2Vic2VydmljZS1mZWF0dXJlcy9jbGllbnQvVGVzdENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3dzUmVmLXdlYnNlcnZpY2UtZmVhdHVyZXMvY2xpZW50L1Rlc3RDbGllbnQuamF2YQpAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgaW50IGNvZGUgPSBpbnZva2VTZXJ2bGV0KHVybCk7CiAgICAgICAgICAgICByZXBvcnQoY29kZSk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgfQpAQCAtNjMsOSArNjMsOSBAQAogICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICBsb2cobGluZSk7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIlNvIHRoZSBSRVNVTFQgT0YgSEVMTE8gU0VSVklDRSBJUyIpICE9IC0xKQotCQlmb3VuZDEgPSB0cnVlOworICAgICAgICBmb3VuZDEgPSB0cnVlOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJbSGVsbG8gQWxsXSIpICE9IC0xKQotCQlmb3VuZDIgPSB0cnVlOworICAgICAgICBmb3VuZDIgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjb2RlOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3dzUmVmLXdlYnNlcnZpY2UtZmVhdHVyZXMvZW5kcG9pbnQvSGVsbG8uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3dzUmVmLXdlYnNlcnZpY2UtZmVhdHVyZXMvZW5kcG9pbnQvSGVsbG8uamF2YQppbmRleCA5M2I3OTljLi40MDhjZTQ4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy93c1JlZi13ZWJzZXJ2aWNlLWZlYXR1cmVzL2VuZHBvaW50L0hlbGxvLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvd3NSZWYtd2Vic2VydmljZS1mZWF0dXJlcy9lbmRwb2ludC9IZWxsby5qYXZhCkBAIC0yNiwxMCArMjYsMTAgQEAKICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9leGFtcGxlLmNvbS9IZWxsbyIKICkKIHB1YmxpYyBjbGFzcyBIZWxsbyB7Ci0JcHVibGljIEhlbGxvKCkge30KKyAgICBwdWJsaWMgSGVsbG8oKSB7fQogCi0JQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJzYXlIZWxsbyIsIGFjdGlvbj0idXJuOlNheUhlbGxvIikKLQlwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyB3aG8pIHsKLQkJcmV0dXJuICJIZWxsbyAiICsgd2hvOwotCX0KKyAgICBAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9InNheUhlbGxvIiwgYWN0aW9uPSJ1cm46U2F5SGVsbG8iKQorICAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIHdobykgeworICAgICAgICByZXR1cm4gIkhlbGxvICIgKyB3aG87CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvd3NSZWYtd2Vic2VydmljZS1mZWF0dXJlcy93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvd3NSZWYtd2Vic2VydmljZS1mZWF0dXJlcy93ZWIueG1sCmluZGV4IGFhZTUyN2UuLmZiYTA5MDIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3dzUmVmLXdlYnNlcnZpY2UtZmVhdHVyZXMvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy93c1JlZi13ZWJzZXJ2aWNlLWZlYXR1cmVzL3dlYi54bWwKQEAgLTE4LDEwICsxOCwxMCBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotCQkJaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CisgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQorICAgICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAKIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy93c1JlZi13ZWJzZXJ2aWNlLWZlYXR1cmVzL3dlYmNsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3dzUmVmLXdlYnNlcnZpY2UtZmVhdHVyZXMvd2ViY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDgwNTIwOTUuLjVmM2M4MDkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3dzUmVmLXdlYnNlcnZpY2UtZmVhdHVyZXMvd2ViY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3dzUmVmLXdlYnNlcnZpY2UtZmVhdHVyZXMvd2ViY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMCwxMSArMzAsMTEgQEAKICAgICAgICAgQE1UT00oZW5hYmxlZD10cnVlKQogICAgICAgICBAUmVzcGVjdEJpbmRpbmcKICAgICAgICAgQEFkZHJlc3NpbmcgKHJlcXVpcmVkID0gZmFsc2UsZW5hYmxlZD10cnVlKQotIAorCiAgICAgICAgIEhlbGxvIGhpcG9ydDsKIAotICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkgCi0JCXRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CisgICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQorICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICAgICBkb1Bvc3QocmVxLCByZXNwKTsKICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3dzY3R4dC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy93c2N0eHQvYnVpbGQueG1sCmluZGV4IDMwNDk0ZjcuLjZhYTIwMTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3dzY3R4dC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvd3NjdHh0L2J1aWxkLnhtbApAQCAtMzQsNiArMzQsNiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJyZXBvcnQtZmFpbHVyZSI+CiAgICAgICAgICAgICA8ZWNobyBtZXNzYWdlPSJUZXN0IGZhaWxlZCIvPgotICAgIDwvdGFyZ2V0PiAgIAkKLSAgICAKKyAgICA8L3RhcmdldD4KKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvd3NjdHh0L2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3dzY3R4dC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggODlhZDg3Ni4uNmVmNzdhYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvd3NjdHh0L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy93c2N0eHQvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMiwxMCArMzIsMTAgQEAKICAgICAgICAgc3RhdGljIEhlbGxvSW1wbFNlcnZpY2Ugc2VydmljZTsKIAogICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIndlYnNlcnZpY2VzLWVqYi13c2N0eHQiKTsKKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigid2Vic2VydmljZXMtZWpiLXdzY3R4dCIpOwogICAgICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKICAgICAgICAgICAgIGNsaWVudC5kb1Rlc3QoYXJncyk7Ci0JICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3ZWJzZXJ2aWNlcy1lamItd3NjdHh0Iik7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3ZWJzZXJ2aWNlcy1lamItd3NjdHh0Iik7CiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTQzLDExICs0MywxMSBAQAogICAgICAgICAgICAgICAgIEhlbGxvSW1wbCBwb3J0ID0gc2VydmljZS5nZXRIZWxsb0ltcGxQb3J0KCk7CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaT0wO2k8MTA7aSsrKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyByZXQgPSBwb3J0LnNheUhlbGxvKCJBcHBzZXJ2ZXIgVGVzdGVyICEiKTsKLQkJICAgIGlmKHJldC5pbmRleE9mKCJXZWJTdmNUZXN0LUhlbGxvIikgPT0gLTEpIHsKKyAgICAgICAgICAgIGlmKHJldC5pbmRleE9mKCJXZWJTdmNUZXN0LUhlbGxvIikgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBncmVldGluZyAiICsgcmV0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamItd3NjdHh0Iiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQkJICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJldCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJlamItd3NjdHh0Iiwgc3RhdC5QQVNTKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3dzY3R4dC9lbmRwb2ludC9IZWxsb0ltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3dzY3R4dC9lbmRwb2ludC9IZWxsb0ltcGwuamF2YQppbmRleCBjYThkZDI1Li40OTA5YzcxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy93c2N0eHQvZW5kcG9pbnQvSGVsbG9JbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvd3NjdHh0L2VuZHBvaW50L0hlbGxvSW1wbC5qYXZhCkBAIC0zMSw4ICszMSw4IEBACiAKIAogICAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIHdobykgewotCVN5c3RlbS5vdXQucHJpbnRsbigiRUpCIFdTQ1RYVCB3c2MgPSAiICsgZWpic2MpOwotCWlmKGVqYnNjICE9IG51bGwpIHsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVKQiBXU0NUWFQgd3NjID0gIiArIGVqYnNjKTsKKyAgICBpZihlamJzYyAhPSBudWxsKSB7CiBTeXN0ZW0ub3V0LnByaW50bG4oZWpic2MuZ2V0TWVzc2FnZUNvbnRleHQoKSk7CiBpZiAoZWpic2MuZ2V0TWVzc2FnZUNvbnRleHQoKSBpbnN0YW5jZW9mIGpha2FydGEueG1sLndzLmhhbmRsZXIuTWVzc2FnZUNvbnRleHQpewogU3lzdGVtLm91dC5wcmludGxuKCJZWVlZWSIgK2VqYnNjLmdldE1lc3NhZ2VDb250ZXh0KCkuZ2V0Q2xhc3MoKSk7CkBAIC00MSw5ICs0MSw5IEBACiBTeXN0ZW0ub3V0LnByaW50bG4oIk5OTiAiICsgZWpic2MuZ2V0TWVzc2FnZUNvbnRleHQoKS5nZXRDbGFzcygpKTsKIAogfQotICAgICAgICAJcmV0dXJuICJXZWJTdmNUZXN0LUhlbGxvICIgKyB3aG87CisgICAgICAgICAgICByZXR1cm4gIldlYlN2Y1Rlc3QtSGVsbG8gIiArIHdobzsKICAgICAgICAgfQotLyoJaWYoc2MgIT0gbnVsbCkgeworLyogICAgaWYoc2MgIT0gbnVsbCkgewogU3lzdGVtLm91dC5wcmludGxuKHNjLmdldENvbnRleHREYXRhKCkuZ2V0Q2xhc3MoKSk7CiBTeXN0ZW0ub3V0LnByaW50bG4oc2MuZ2V0Q29udGV4dERhdGEoKSk7CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3dzY3R4dGludGVyY2VwdG9yL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3dzY3R4dGludGVyY2VwdG9yL2J1aWxkLnhtbAppbmRleCAwNmM3YWNjLi5hNGZiYzQ4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy93c2N0eHRpbnRlcmNlcHRvci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvd3NjdHh0aW50ZXJjZXB0b3IvYnVpbGQueG1sCkBAIC0zNCw2ICszNCw2IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InJlcG9ydC1mYWlsdXJlIj4KICAgICAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IlRlc3QgZmFpbGVkIi8+Ci0gICAgPC90YXJnZXQ+ICAgCQotICAgIAorICAgIDwvdGFyZ2V0PgorCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy93c2N0eHRpbnRlcmNlcHRvci9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy93c2N0eHRpbnRlcmNlcHRvci9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggN2M4NjQ0MS4uMWFiZjRiNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvd3NjdHh0aW50ZXJjZXB0b3IvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3dzY3R4dGludGVyY2VwdG9yL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzIsMzEgKzMyLDMxIEBACiAgICAgICAgIHN0YXRpYyBIZWxsb0VKQlNlcnZpY2Ugc2VydmljZTsKIAogICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIndzY3R4dC1pbnZvY2F0aW9uaGFuZGxlcmN0eHQiKTsKKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigid3NjdHh0LWludm9jYXRpb25oYW5kbGVyY3R4dCIpOwogICAgICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKICAgICAgICAgICAgIGNsaWVudC5kb1Rlc3QoYXJncyk7Ci0JICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3c2N0eHQtaW52b2NhdGlvbmhhbmRsZXJjdHh0Iik7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3c2N0eHQtaW52b2NhdGlvbmhhbmRsZXJjdHh0Iik7CiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgSGVsbG8gcG9ydCA9IHNlcnZpY2UuZ2V0SGVsbG9FSkJQb3J0KCk7CiAgICAgICAgICAgICAgICAgU3RyaW5nIHJldCA9IHBvcnQuc2F5SGVsbG8oIkFwcHNlcnZlciBUZXN0ZXIgISIpOwotCQlpZihyZXQuaW5kZXhPZigiMTIzNCIpID09IC0xKSB7CisgICAgICAgIGlmKHJldC5pbmRleE9mKCIxMjM0IikgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXQpOwogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid3NjdHh0LWludm9jYXRpb25oYW5kbGVyY3R4dCIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQkJfQotCQlpZihyZXQuaW5kZXhPZigiNDUiKSA9PSAtMSkgeworICAgICAgICB9CisgICAgICAgIGlmKHJldC5pbmRleE9mKCI0NSIpID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5leHBlY3RlZCBncmVldGluZyAiICsgcmV0KTsKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndzY3R4dC1pbnZvY2F0aW9uaGFuZGxlcmN0eHQiLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0JCX0KLQkJaWYocmV0LmluZGV4T2YoIldlYlN2Y1Rlc3QtSGVsbG8iKSA9PSAtMSkgeworICAgICAgICB9CisgICAgICAgIGlmKHJldC5pbmRleE9mKCJXZWJTdmNUZXN0LUhlbGxvIikgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXQpOwogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid3NjdHh0LWludm9jYXRpb25oYW5kbGVyY3R4dCIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQkJfQorICAgICAgICB9CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJldCk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndzY3R4dC1pbnZvY2F0aW9uaGFuZGxlcmN0eHQiLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvd3NjdHh0aW50ZXJjZXB0b3IvZW5kcG9pbnQvSGVsbG8uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3dzY3R4dGludGVyY2VwdG9yL2VuZHBvaW50L0hlbGxvLmphdmEKaW5kZXggZGQ0YjY0Mi4uNGI4ZjllZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvd3NjdHh0aW50ZXJjZXB0b3IvZW5kcG9pbnQvSGVsbG8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy93c2N0eHRpbnRlcmNlcHRvci9lbmRwb2ludC9IZWxsby5qYXZhCkBAIC0yMSw1ICsyMSw1IEBACiBAV2ViU2VydmljZQogcHVibGljIGludGVyZmFjZSBIZWxsbyB7CiAKLQlwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyB3aG8pOworICAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIHdobyk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy93c2N0eHRpbnRlcmNlcHRvci9lbmRwb2ludC9IZWxsb0VKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvd3NjdHh0aW50ZXJjZXB0b3IvZW5kcG9pbnQvSGVsbG9FSkIuamF2YQppbmRleCBiODJiY2ZhLi4xNTliMzA1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy93c2N0eHRpbnRlcmNlcHRvci9lbmRwb2ludC9IZWxsb0VKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3dzY3R4dGludGVyY2VwdG9yL2VuZHBvaW50L0hlbGxvRUpCLmphdmEKQEAgLTQwLDEyICs0MCwxMiBAQAogCiAgICAgQEFyb3VuZEludm9rZQogICAgIHByaXZhdGUgT2JqZWN0IGludGVyY2VwdEJ1c2luZXNzTWV0aG9kKEludm9jYXRpb25Db250ZXh0IGludkN0eCkgewotCXRyeSB7CisgICAgdHJ5IHsKICAgICAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBtYXAgPSBpbnZDdHguZ2V0Q29udGV4dERhdGEoKTsKICAgICAgICAgICAgbWFwLnB1dCgiaW50VmFsIiwgbmV3IEludGVnZXIoNDUpKTsKICAgICAgICAgICAgbWFwLnB1dCgibG9uZ1ZhbCIsIG5ldyBMb25nKDEyMzQpKTsKICAgICAgICAgICAgcmV0dXJuIGludkN0eC5wcm9jZWVkKCk7Ci0JfSBjYXRjaChUaHJvd2FibGUgdCkge30KKyAgICB9IGNhdGNoKFRocm93YWJsZSB0KSB7fQogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy93c25hbWVlamJuYW1lL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy93c25hbWVlamJuYW1lL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNTAwNzA5Yy4uYzY3Y2EwZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvd3NuYW1lZWpibmFtZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3dzbmFtZWVqYm5hbWUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsOCArMTUsOCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0id3NuYW1lZWpibmFtZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3dzbmFtZWVqYm5hbWUvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvd3NuYW1lZWpibmFtZS9idWlsZC54bWwKaW5kZXggZDgxZThmNC4uNjQzNWFlMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvd3NuYW1lZWpibmFtZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9lamJfYW5ub3RhdGlvbnMvd3NuYW1lZWpibmFtZS9idWlsZC54bWwKQEAgLTU4LDggKzU4LDggQEAKICAgICAgICAgPHBhcmFtIG5hbWU9IndzaW1wb3J0LmFyZ3MiCiAgICAgICAgICAgICAgICB2YWx1ZT0iLWtlZXAgLWQgJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IGh0dHA6Ly8ke2h0dHAuaG9zdH06JHtodHRwLnBvcnR9L0FkZE51bWJlcnNJbXBsU2VydmljZS9UaGlzU2hvdWxkQmVJZ25vcmVkP1dTREwiLz4KICAgICAgIDwvYW50Y2FsbD4KLSAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIgCi0gICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2oyZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXJ0Lmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy10b29scy5qYXIiIAorICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9qMmVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy1ydC5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtdG9vbHMuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9ImNsaWVudC8qKiIvPgogICAgIDwvdGFyZ2V0PgogCkBAIC03MCw3ICs3MCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWphci1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuY2xpZW50Ij4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLWNsaWVudCI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJjbGllbnQtY2xhc3MiIHZhbHVlPSJjbGllbnQuQ2xpZW50Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2VqYl9hbm5vdGF0aW9ucy93c25hbWVlamJuYW1lL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3dzbmFtZWVqYm5hbWUvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDdlMzdmY2YuLmQwZDYwYmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3dzbmFtZWVqYm5hbWUvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZWpiX2Fubm90YXRpb25zL3dzbmFtZWVqYm5hbWUvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zNywyMSArMzcsMjEgQEAKICAgICAgICAgc3RhdGljIEFkZE51bWJlcnNJbXBsU2VydmljZSBzZXJ2aWNlOwogCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQkgICAgc3RhdC5hZGREZXNjcmlwdGlvbigid3NuYW1lLWVqYm5hbWUtc2VydmljZSIpOworICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ3c25hbWUtZWpibmFtZS1zZXJ2aWNlIik7CiAgICAgICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAgICAgICAgICAgY2xpZW50LmRvU3luY1Rlc3QoKTsKLQkgICAgc3RhdC5wcmludFN1bW1hcnkoIndzbmFtZS1lamJuYW1lLXNlcnZpY2UiKTsKKyAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoIndzbmFtZS1lamJuYW1lLXNlcnZpY2UiKTsKICAgICAgICAgfQogCiAgICAgICAgIHB1YmxpYyB2b2lkIGRvU3luY1Rlc3QoKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIFRoaXNTaG91bGRCZUlnbm9yZWQgcG9ydCA9IHNlcnZpY2UuZ2V0VGhpc1Nob3VsZEJlSWdub3JlZFBvcnQoKTsKICAgICAgICAgICAgICAgICBpbnQgcmV0ID0gcG9ydC5hZGROdW1iZXJzKDIyMjIsIDEyMzQpOwotCQlpZihyZXQhPSgyMjIyKzEyMzQpKSB7CisgICAgICAgIGlmKHJldCE9KDIyMjIrMTIzNCkpIHsKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGFkZCByZXN1bHQgIiArIHJldCk7CiAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3c25hbWUtZWpibmFtZS1zZXJ2aWNlLXRlc3QiLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0JCX0KKyAgICAgICAgfQogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXQpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3c25hbWUtZWpibmFtZS1zZXJ2aWNlLXRlc3QiLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9maWx0ZXJfdXJsaGFuZGxpbmcvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9maWx0ZXJfdXJsaGFuZGxpbmcvYnVpbGQueG1sCmluZGV4IDMxOGRlZDMuLjAzZWU4NmEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZmlsdGVyX3VybGhhbmRsaW5nL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2ZpbHRlcl91cmxoYW5kbGluZy9idWlsZC54bWwKQEAgLTE4LDcgKzE4LDcgQEAKIAogPCFET0NUWVBFIHByb2plY3QgWwogPCFFTlRJVFkgY29tbW9uU2V0dXAgU1lTVEVNICJmaWxlOi4vLi4vLi4vLi4vY29uZmlnL3Byb3BlcnRpZXMueG1sIj4KLTwhRU5USVRZIGNvbW1vbkJ1aWxkIFNZU1RFTSAiZmlsZTouLy4uLy4uLy4uL2NvbmZpZy9jb21tb24ueG1sIj4gCis8IUVOVElUWSBjb21tb25CdWlsZCBTWVNURU0gImZpbGU6Li8uLi8uLi8uLi9jb25maWcvY29tbW9uLnhtbCI+CiBdPgogCiA8cHJvamVjdCBuYW1lPSJGaWx0ZXIgVVJMIGhhbmRsaW5nIHRlc3QiIGRlZmF1bHQ9ImFsbCIgYmFzZWRpcj0iLiI+CkBAIC0zNCw3ICszNCw3IEBACiAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iY2xpZW50Ii8+CiAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8amF2YSBjbGFzc25hbWU9ImNsaWVudC5DbGllbnQiPgogICAgICAgICA8YXJnIHZhbHVlPSJodHRwOi8vJHtodHRwLmhvc3R9OiR7aHR0cC5wb3J0fS8iLz4KQEAgLTQyLDExICs0MiwxMSBAQAogICAgICAgICAgICAgPHBhdGhlbGVtZW50IHBhdGg9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CiAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIi8+CiAgICAgICAgIDwvY2xhc3NwYXRoPgotICAgIDwvamF2YT4gICAgCisgICAgPC9qYXZhPgogICA8L3RhcmdldD4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJjbGVhbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+Ci0gIAorCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2ZpbHRlcl91cmxoYW5kbGluZy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2ZpbHRlcl91cmxoYW5kbGluZy9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggOTM1MmY3NC4uZjExZDEzNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9maWx0ZXJfdXJsaGFuZGxpbmcvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZmlsdGVyX3VybGhhbmRsaW5nL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzAsMjAgKzMwLDIwIEBACiAgKi8KIAogcHVibGljIGNsYXNzIENsaWVudCB7Ci0gICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9Ci0gICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsgICAgCisgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigid2Vic2VydmljZXMtZmlsdGVyLXVybC1oYW5kbGluZyIpOwogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3MpOwotICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgid2Vic2VydmljZXMtZmlsdGVyLXVybC1oYW5kbGluZyIpOyAgICAgICAgCisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3ZWJzZXJ2aWNlcy1maWx0ZXItdXJsLWhhbmRsaW5nIik7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIFN0cmluZyB3ZWJVUkwgPSBhcmdzWzBdOyAgICAgICAgICAgIAorICAgICAgICAgICAgU3RyaW5nIHdlYlVSTCA9IGFyZ3NbMF07CiAgICAgICAgICAgICBVUkwgdXJsID0gbmV3IFVSTChhcmdzWzBdICsgIi8vIik7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkludm9raW5nICIgKyB1cmwudG9FeHRlcm5hbEZvcm0oKSk7CiAgICAgICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gKEh0dHBVUkxDb25uZWN0aW9uKSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKQEAgLTU5LDcgKzU5LDcgQEAKICAgICAgICAgICAgIGlmIChIdHRwVVJMQ29ubmVjdGlvbi5IVFRQX0lOVEVSTkFMX0VSUk9SID09IHJlc3BvbnNlQ29kZSkgewogICAgICAgICAgICAgICAgIC8vIHNlcnZlciBub3Qgc3RhcnRlZAogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXJyb3IsIHNlcnZlciBpcyBkb3duID8iKTsKLSAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2Vic2VydmljZSBmaWx0ZXIgdXJsIGhhbmRsaW5nIiwgc3RhdC5GQUlMKTsgICAgICAgIAorICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3ZWJzZXJ2aWNlIGZpbHRlciB1cmwgaGFuZGxpbmciLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChIdHRwVVJMQ29ubmVjdGlvbi5IVFRQX09LID09IHJlc3BvbnNlQ29kZSkgewpAQCAtNjgsMjMgKzY4LDIzIEBACiAgICAgICAgICAgICAgICAgaW50IGxlbmd0aCA9IGNvbm5lY3Rpb24uZ2V0Q29udGVudExlbmd0aCgpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29udGVudC1sZW5ndGggIiArIGxlbmd0aCk7CiAgICAgICAgICAgICAgICAgaWYgKGxlbmd0aD09LTEpIHsKLSAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndlYnNlcnZpY2UgZmlsdGVyIHVybCBoYW5kbGluZyIsIHN0YXQuRkFJTCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2Vic2VydmljZSBmaWx0ZXIgdXJsIGhhbmRsaW5nIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2Vic2VydmljZSBmaWx0ZXIgdXJsIGhhbmRsaW5nIiwgc3RhdC5QQVNTKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3ZWJzZXJ2aWNlIGZpbHRlciB1cmwgaGFuZGxpbmciLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2Vic2VydmljZSBmaWx0ZXIgdXJsIGhhbmRsaW5nIiwgc3RhdC5GQUlMKTsgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2Vic2VydmljZSBmaWx0ZXIgdXJsIGhhbmRsaW5nIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFUlJPUiAtIFVua25vdyByZXR1cm4gY29kZSAiICsgcmVzcG9uc2VDb2RlKTsKICAgICAgICAgICAgICAgICBNYXAgbWFwID0gY29ubmVjdGlvbi5nZXRIZWFkZXJGaWVsZHMoKTsKICAgICAgICAgICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0cj1tYXAua2V5U2V0KCkuaXRlcmF0b3IoKTtpdHIuaGFzTmV4dCgpOykgewogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgaGVhZGVyID0gKFN0cmluZykgaXRyLm5leHQoKTsKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIZWFkZXIgIiArIGhlYWRlciArICItLT4iICsgbWFwLmdldChoZWFkZXIpKTsKLSAgICAgICAgICAgICAgICB9ICAgCi0gICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndlYnNlcnZpY2UgZmlsdGVyIHVybCBoYW5kbGluZyIsIHN0YXQuRkFJTCk7ICAgICAgICAKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndlYnNlcnZpY2UgZmlsdGVyIHVybCBoYW5kbGluZyIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXJycm9yIC0gZXhjZXB0aW9uICIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2Vic2VydmljZSBmaWx0ZXIgdXJsIGhhbmRsaW5nIiwgc3RhdC5GQUlMKTsgICAgICAgIAorICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndlYnNlcnZpY2UgZmlsdGVyIHVybCBoYW5kbGluZyIsIHN0YXQuRkFJTCk7CiAgICAgICAgIH0KLSAgICB9ICAgIAorICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ2ZfZGQvZW5kcG9pbnRfYWRkcmVzc191cmkvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ2ZfZGQvZW5kcG9pbnRfYWRkcmVzc191cmkvYnVpbGQucHJvcGVydGllcwppbmRleCBjNGY4NWVhLi4zNWFjZjQ5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dmX2RkL2VuZHBvaW50X2FkZHJlc3NfdXJpL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nZl9kZC9lbmRwb2ludF9hZGRyZXNzX3VyaS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzZXJ2aWNlX2VuZHBvaW50X2FkZHJlc3MiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGUvYnVpbGQucHJvcGVydGllcwppbmRleCA2ZWI3NWMzLi5iNjg3ZDZiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDIyICsxNSwyMiBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZ29vZ2xlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9IndlYnNlcnZpY2VzLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2Vic2VydmljZXMueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlL2J1aWxkLnhtbAppbmRleCBhZDdmZDQ5Li4xYzJkMmY3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGUvYnVpbGQueG1sCkBAIC0zMyw5ICszMyw5IEBACiAKIAogICA8dGFyZ2V0IG5hbWU9InJ1bi53c2NvbXBpbGUiPgotCTxleGVjIGV4ZWN1dGFibGU9IiR7V1NDT01QSUxFfSIgZmFpbG9uZXJyb3I9InRydWUiID4KLSAgICAgICAgPGFyZyBsaW5lPSItc291cmNlIDEuMS4yICR7d3Njb21waWxlLmNvbW1hbmR9IiAvPiAgICAgICAgCi0JPC9leGVjPgorICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7V1NDT01QSUxFfSIgZmFpbG9uZXJyb3I9InRydWUiID4KKyAgICAgICAgPGFyZyBsaW5lPSItc291cmNlIDEuMS4yICR7d3Njb21waWxlLmNvbW1hbmR9IiAvPgorICAgIDwvZXhlYz4KICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSIiPgpAQCAtNDMsNyArNDMsNyBAQAogICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNsaWVudCIvPgogICAgIDwvYW50Y2FsbD4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ibWVqYmNsaWVudCIvPgorICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJtZWpiY2xpZW50Ii8+CiAgICAgPC9hbnRjYWxsPgogICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgpAQCAtNjEsMTEgKzYxLDExIEBACiAgIDx0YXJnZXQgbmFtZT0id3Njb21waWxlLWFwcGNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxta2RpciBkaXI9Im91dHB1dCIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLndzY29tcGlsZSI+Ci0gICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiIAorICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIgogICAgICAgIHZhbHVlPSItaW1wb3J0IC1rZWVwIC1kIG91dHB1dCAtcyBvdXRwdXQgLWNsYXNzcGF0aCAuIHdzY29tcGlsZV9jb25maWdfYXBwY2xpZW50LnhtbCIvPgogICAgIDwvYW50Y2FsbD4KICAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vZ29vZ2xlIj4KLSAgICAgICA8ZmlsZXNldCBkaXI9Im91dHB1dC9nb29nbGUiIAorICAgICAgIDxmaWxlc2V0IGRpcj0ib3V0cHV0L2dvb2dsZSIKICAgICAgICAgaW5jbHVkZXM9IkRpcmVjdG9yeUNhdGVnb3J5LmNsYXNzLCBHb29nbGVTZWFyY2hSZXN1bHQuY2xhc3MsIEdvb2dsZVNlYXJjaFNlcnZpY2UuY2xhc3MsIEdvb2dsZVNlYXJjaFBvcnQuY2xhc3MsIFJlc3VsdEVsZW1lbnQuY2xhc3MiLz4KICAgICA8L2NvcHk+CiAgICAgPGRlbGV0ZSBkaXI9Im91dHB1dCIvPgpAQCAtNzQsMTEgKzc0LDExIEBACiAgIDx0YXJnZXQgbmFtZT0id3Njb21waWxlLWVqYiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxta2RpciBkaXI9Im91dHB1dCIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLndzY29tcGlsZSI+Ci0gICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiIAorICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIgogICAgICAgIHZhbHVlPSItaW1wb3J0IC1rZWVwIC1kIG91dHB1dCAtcyBvdXRwdXQgLWNsYXNzcGF0aCAuIHdzY29tcGlsZV9jb25maWdfZWpiLnhtbCIvPgogICAgIDwvYW50Y2FsbD4KICAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vZ29vZ2xlZWpiIj4KLSAgICAgICA8ZmlsZXNldCBkaXI9Im91dHB1dC9nb29nbGVlamIiIAorICAgICAgIDxmaWxlc2V0IGRpcj0ib3V0cHV0L2dvb2dsZWVqYiIKICAgICAgICAgaW5jbHVkZXM9IkRpcmVjdG9yeUNhdGVnb3J5LmNsYXNzLCBHb29nbGVTZWFyY2hSZXN1bHQuY2xhc3MsIEdvb2dsZVNlYXJjaFBvcnQuY2xhc3MsIFJlc3VsdEVsZW1lbnQuY2xhc3MiLz4KICAgICA8L2NvcHk+CiAgICAgPGRlbGV0ZSBkaXI9Im91dHB1dCIvPgpAQCAtODcsMzUgKzg3LDM1IEBACiAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUiIGRlcGVuZHM9ImluaXQtY29tbW9uLCBjb21waWxlIj4KICAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvd3NkbCIKICAgICAgIGZpbGU9Ikdvb2dsZVNlYXJjaC53c2RsIi8+Ci0gICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiAKLQkgZmlsZT0iR29vZ2xlTWFwcGluZ19hcHBjbGllbnQueG1sIi8+CisgICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgorICAgICBmaWxlPSJHb29nbGVNYXBwaW5nX2FwcGNsaWVudC54bWwiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFwcGNsaWVudC1qYXItY29tbW9uIj4KLSAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgdmFsdWU9Ikdvb2dsZU1hcHBpbmdfYXBwY2xpZW50LnhtbCxNRVRBLUlORi93c2RsLyoqLGdvb2dsZS8qLmNsYXNzIiAvPgogCiAgICAgPC9hbnRjYWxsPgotICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgCi0JIGZpbGU9Ikdvb2dsZU1hcHBpbmdfZWpiLnhtbCIvPgorICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKKyAgICAgZmlsZT0iR29vZ2xlTWFwcGluZ19lamIueG1sIi8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJlamItamFyLWNvbW1vbiI+Ci0gICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgIHZhbHVlPSJHb29nbGVNYXBwaW5nX2VqYi54bWwsTUVUQS1JTkYvd3NkbC8qKixnb29nbGVlamIvKi5jbGFzcyIgLz4KIAogICAgIDwvYW50Y2FsbD4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVhci1jb21tb24iIC8+Ci0gIDwvdGFyZ2V0PiAKKyAgPC90YXJnZXQ+CiAKLSAgIDx0YXJnZXQgbmFtZT0iYnVpbGQtbWVqYiIgZGVwZW5kcz0iaW5pdC1jb21tb24sIGNvbXBpbGUiPiAgCisgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLW1lamIiIGRlcGVuZHM9ImluaXQtY29tbW9uLCBjb21waWxlIj4KICAgICA8Y29weSBmaWxlPSJtZWpiY2xpZW50L2FwcGxpY2F0aW9uLWNsaWVudC54bWwiIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogICAgIDxjb3B5IGZpbGU9Im1lamJjbGllbnQvc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KICAgICA8bWtkaXIgZGlyPSIke2Fzc2VtYmxlLmRpcn0iLz4KLSAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmRpcn0vbWVqYmNsaWVudC5qYXIiIG1hbmlmZXN0PSJtZWpiY2xpZW50L01BTklGRVNULk1GIj4JCi0JPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKLQkJaW5jbHVkZXM9Imdvb2dsZS9NRUpCQ2xpZW50LmNsYXNzIE1FVEEtSU5GL2FwcGxpY2F0aW9uLWNsaWVudC54bWwgTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiCi0JLz4KLSAgICA8L2phcj4gCisgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9L21lamJjbGllbnQuamFyIiBtYW5pZmVzdD0ibWVqYmNsaWVudC9NQU5JRkVTVC5NRiI+CisgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKKyAgICAgICAgaW5jbHVkZXM9Imdvb2dsZS9NRUpCQ2xpZW50LmNsYXNzIE1FVEEtSU5GL2FwcGxpY2F0aW9uLWNsaWVudC54bWwgTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiCisgICAgLz4KKyAgICA8L2phcj4KICAgIDwvdGFyZ2V0PgogCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTEzMSwxMyArMTMxLDEzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1bi1tZWpiY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gIAk8ZXhlYyBleGVjdXRhYmxlPSIke0FQUENMSUVOVH0iIGZhaWxvbmVycm9yPSJ0cnVlIj4KLSAgICAJCTxhcmcgbGluZT0iLWNsaWVudCAke2Fzc2VtYmxlLmRpcn0vbWVqYmNsaWVudC5qYXIiLz4KLQkJPGFyZyBsaW5lPSItdGV4dGF1dGgiLz4KLQkJPGFyZyBsaW5lPSItdXNlciBqMmVlIi8+Ci0gICAgCQk8YXJnIGxpbmU9Ii1wYXNzd29yZCBqMmVlIi8+Ci0gICAgCQk8YXJnIGxpbmU9IiR7YXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3N9Ii8+Ci0gIAk8L2V4ZWM+CisgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FQUENMSUVOVH0iIGZhaWxvbmVycm9yPSJ0cnVlIj4KKyAgICAgICAgICAgIDxhcmcgbGluZT0iLWNsaWVudCAke2Fzc2VtYmxlLmRpcn0vbWVqYmNsaWVudC5qYXIiLz4KKyAgICAgICAgPGFyZyBsaW5lPSItdGV4dGF1dGgiLz4KKyAgICAgICAgPGFyZyBsaW5lPSItdXNlciBqMmVlIi8+CisgICAgICAgICAgICA8YXJnIGxpbmU9Ii1wYXNzd29yZCBqMmVlIi8+CisgICAgICAgICAgICA8YXJnIGxpbmU9IiR7YXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3N9Ii8+CisgICAgICA8L2V4ZWM+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtMTQ1LDEwICsxNDUsMTAgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSJzcGVsbG5nIGh0dHA6Ly8ke2h0dHAuaG9zdH06JHtodHRwLnBvcnR9L2dvb2dsZWVqYi9Hb29nbGVTZWFyY2giLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgCisgICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJjb250YWN0Z29vZ2xlIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1jb21tb24iPgpAQCAtMTU4LDIzICsxNTgsMjMgQEAKIAogICA8dGFyZ2V0IG5hbWU9Imdlbi1tYXBwaW5nLWFwcGNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLndzY29tcGlsZSI+Ci0gICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiIAorICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIgogICAgICAgIHZhbHVlPSItZ2VuIC1jcCAuIC1tYXBwaW5nIEdvb2dsZU1hcHBpbmdfYXBwY2xpZW50LnhtbCB3c2NvbXBpbGVfY29uZmlnX2FwcGNsaWVudC54bWwiLz4KICAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0iZ2VuLW1hcHBpbmctZWpiIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4ud3Njb21waWxlIj4KLSAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIgCisgICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiCiAgICAgICAgdmFsdWU9Ii1nZW4gLWNwIC4gLW1hcHBpbmcgR29vZ2xlTWFwcGluZ19lamIueG1sIHdzY29tcGlsZV9jb25maWdfZWpiLnhtbCIvPgogICAgIDwvYW50Y2FsbD4KICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgYWxsIChFeGVjdXRlcyB0aGUgV2ViU2VydmljZXMgdGVzdCkKLQkJCWFudCBjb250YWN0Z29vZ2xlIChFeGVjdXRlcyB0aGUgYXBwY2xpZW50IGNvbnRhY3RpbmcgdGhlIEdvb2dsZS5jb20gV2ViU2VydmljZXMpCi0JPC9lY2hvPgorICAgIDxlY2hvPgorICAgICAgICBVc2FnZToKKyAgICAgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIHRoZSBXZWJTZXJ2aWNlcyB0ZXN0KQorICAgICAgICAgICAgYW50IGNvbnRhY3Rnb29nbGUgKEV4ZWN1dGVzIHRoZSBhcHBjbGllbnQgY29udGFjdGluZyB0aGUgR29vZ2xlLmNvbSBXZWJTZXJ2aWNlcykKKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZS9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggYmQ4YzI0Mi4uYTI0ZWE2YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGUvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjYsNyArMjYsNyBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7Ci0gICAgCisKICAgICBwcml2YXRlIFN0cmluZyBnb29nbGVLZXk7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewpAQCAtMzUsMjMgKzM1LDIzIEBACiAgICAgICAgIGNsaWVudC5kb1Rlc3QoYXJncyk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3ZWJzZXJ2aWNlcy1nb29nbGVJRCIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIFN0cmluZyB3b3JkID0gKGFyZ3MubGVuZ3RoID09IDApID8KICAgICAgICAgICAgICJzcGVsbG5nIiA6IGFyZ3NbMF07CiAgICAgICAgIFN0cmluZyB0YXJnZXRFbmRwb2ludEFkZHJlc3MgPSAoYXJncy5sZW5ndGggPT0gMikgPwogICAgICAgICAgICAgYXJnc1sxXSA6ICJodHRwOi8vYXBpLmdvb2dsZS5jb20vc2VhcmNoL2JldGEyIjsKIAotICAgIAl0cnkgewotCSAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworCisKICAgICAgICAgICAgIFN0cmluZyBnb29nbGVLZXkgPSAoU3RyaW5nKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZ29vZ2xla2V5Iik7CiAgICAgICAgICAgICBHb29nbGVTZWFyY2hTZXJ2aWNlIGdvb2dsZVNlYXJjaFNlcnZpY2UgPQogICAgICAgICAgICAgICAgIChHb29nbGVTZWFyY2hTZXJ2aWNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvc2VydmljZS9Hb29nbGVTZWFyY2giKTsKLSAgICAgICAgICAgIEdvb2dsZVNlYXJjaFBvcnQgZ29vZ2xlUG9ydCA9IAorICAgICAgICAgICAgR29vZ2xlU2VhcmNoUG9ydCBnb29nbGVQb3J0ID0KICAgICAgICAgICAgICAgICBnb29nbGVTZWFyY2hTZXJ2aWNlLmdldEdvb2dsZVNlYXJjaFBvcnQoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAoKFN0dWIpZ29vZ2xlUG9ydCkuX3NldFByb3BlcnR5KFN0dWIuRU5EUE9JTlRfQUREUkVTU19QUk9QRVJUWSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0RW5kcG9pbnRBZGRyZXNzKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29udGFjdGluZyBnb29nbGUgZm9yIGEgc3BlbGxpbmcgc3VnZ2VzdGlvbiBhdCAiICsgdGFyZ2V0RW5kcG9pbnRBZGRyZXNzKTsKQEAgLTYzLDExICs2MywxMSBAQAogCiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZ29vZ2xlY2xpZW50IG1haW4iLCBzdGF0LlBBU1MpOwogCi0gICAgCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZ29vZ2xlIGNsaWVudCB0ZXN0IGZhaWxlZCIpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiZ29vZ2xlY2xpZW50IG1haW4iICwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIC8vU3lzdGVtLmV4aXQoMTUpOwotCX0gCisgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbAppbmRleCA5NGNmNzMzLi41NTkwZDM0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZS9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGUvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sCkBAIC0zMiw2ICszMiw2IEBACiAgICAgPHdzZGwtZmlsZT5NRVRBLUlORi93c2RsL0dvb2dsZVNlYXJjaC53c2RsPC93c2RsLWZpbGU+CiAgICAgPGpheHJwYy1tYXBwaW5nLWZpbGU+R29vZ2xlTWFwcGluZ19hcHBjbGllbnQueG1sPC9qYXhycGMtbWFwcGluZy1maWxlPgogICAgIDxzZXJ2aWNlLXFuYW1lIHhtbG5zOnNlcnZpY2Vucz0idXJuOkdvb2dsZVNlYXJjaCI+c2VydmljZW5zOkdvb2dsZVNlYXJjaFNlcnZpY2UKLSAgICA8L3NlcnZpY2UtcW5hbWU+ICAgICAgICAgICAgICAgCisgICAgPC9zZXJ2aWNlLXFuYW1lPgogICA8L3NlcnZpY2UtcmVmPgogPC9hcHBsaWNhdGlvbi1jbGllbnQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZS9lamIvR29vZ2xlRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZS9lamIvR29vZ2xlRUpCLmphdmEKaW5kZXggMWJiMGFkZi4uZTgyZWEwYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGUvZWpiL0dvb2dsZUVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlL2VqYi9Hb29nbGVFSkIuamF2YQpAQCAtMTcsNyArMTcsNyBAQAogcGFja2FnZSBnb29nbGVlamI7CiAKIGltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKLWltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247IAoraW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQmVhbjsKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dDsKIGltcG9ydCBqYWthcnRhLmVqYi5FSkJFeGNlcHRpb247CkBAIC0yOSwxOCArMjksMTggQEAKICAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IHNjOwogCiAgICAgcHVibGljIEdvb2dsZUVKQigpe30KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gR29vZ2xlRUpCOjplamJDcmVhdGUgISEiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEdvb2dsZUVKQjo6ZWpiQ3JlYXRlICEhIik7CiAgICAgfQogCi0gICAgcHVibGljIGJ5dGVbXSBkb0dldENhY2hlZFBhZ2UoamF2YS5sYW5nLlN0cmluZyBrZXksIGphdmEubGFuZy5TdHJpbmcgdXJsKSAKLSAgICB7IAotICAgICAgICByZXR1cm4gbnVsbDsgCisgICAgcHVibGljIGJ5dGVbXSBkb0dldENhY2hlZFBhZ2UoamF2YS5sYW5nLlN0cmluZyBrZXksIGphdmEubGFuZy5TdHJpbmcgdXJsKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQogCi0gICAgcHVibGljIFN0cmluZyBkb1NwZWxsaW5nU3VnZ2VzdGlvbihqYXZhLmxhbmcuU3RyaW5nIGtleSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmxhbmcuU3RyaW5nIHBocmFzZSkgCisgICAgcHVibGljIFN0cmluZyBkb1NwZWxsaW5nU3VnZ2VzdGlvbihqYXZhLmxhbmcuU3RyaW5nIGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEubGFuZy5TdHJpbmcgcGhyYXNlKQogICAgIHsKIAogICAgICAgICB0cnkgewpAQCAtNTMsOSArNTMsOSBAQAogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBFSkJFeGNlcHRpb24gZWpiRXggPSBuZXcgRUpCRXhjZXB0aW9uKCJnZXRDYWxsZXJQcmluY2lwYWwgZXhjZXB0aW9uIik7CiAgICAgICAgICAgICBlamJFeC5pbml0Q2F1c2UoZSk7Ci0gICAgICAgICAgICB0aHJvdyBlamJFeDsgICAgICAgICAgCisgICAgICAgICAgICB0aHJvdyBlamJFeDsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBNZXNzYWdlQ29udGV4dCBtc2dDb250ZXh0ID0gc2MuZ2V0TWVzc2FnZUNvbnRleHQoKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJtc2dDb250ZXh0ID0gIiArIG1zZ0NvbnRleHQpOwogCkBAIC02OCwyMCArNjgsMjAgQEAKIAogICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiAgICAgfQotICAgICAgICAKKwogICAgIHB1YmxpYyBHb29nbGVTZWFyY2hSZXN1bHQgZG9Hb29nbGVTZWFyY2goamF2YS5sYW5nLlN0cmluZyBrZXksIGphdmEubGFuZy5TdHJpbmcgcSwgaW50IHN0YXJ0LCBpbnQgbWF4UmVzdWx0cywgYm9vbGVhbiBmaWx0ZXIsIGphdmEubGFuZy5TdHJpbmcgcmVzdHJpY3QsIGJvb2xlYW4gc2FmZVNlYXJjaCwgamF2YS5sYW5nLlN0cmluZyBsciwgamF2YS5sYW5nLlN0cmluZyBpZSwgamF2YS5sYW5nLlN0cmluZyBvZSkgewogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgewotCQorCiAgICAgICAgIHRoaXMuc2MgPSBzYzsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHt9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHt9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7fQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZS9tZWpiY2xpZW50L01FSkJDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlL21lamJjbGllbnQvTUVKQkNsaWVudC5qYXZhCmluZGV4IDVmZmE1NjQuLmJhODM1MDMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlL21lamJjbGllbnQvTUVKQkNsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlL21lamJjbGllbnQvTUVKQkNsaWVudC5qYXZhCkBAIC0zMSwxMSArMzEsMTEgQEAKIC8vICAgIHByaXZhdGUgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogLy8gICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsgCi0gICAgICAgIE1FSkJDbGllbnQgY2xpZW50ID0gbmV3IE1FSkJDbGllbnQoKTsgCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworICAgICAgICBNRUpCQ2xpZW50IGNsaWVudCA9IG5ldyBNRUpCQ2xpZW50KCk7CiAKICAgICAgICAgLy8gcnVuIHRoZSB0ZXN0cwotICAgICAgICBjbGllbnQucnVuVGVzdENsaWVudCgpOyAgIAorICAgICAgICBjbGllbnQucnVuVGVzdENsaWVudCgpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHJ1blRlc3RDbGllbnQoKSB7CkBAIC00OCw3OCArNDgsNzggQEAKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgdGVzdDAxKCkgewotCQotCS8vIGluc3RhbmNpYXRlIHRoZSBtZWpiCi0gICAJdHJ5IHsKLSAgICAgICAgICAgIAotCSAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqQ3JlYXRlZCBpbml0aWFsIGNvbnRleHQiKTsKLSAgICAgICAgICAgIAotCSAgICBqYXZhLmxhbmcuT2JqZWN0IG9ianJlZiA9IGljLmxvb2t1cCgiZWpiL21nbXQvTUVKQiIpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKkxvb2tlZCB1cCBNYW5hZ2VtZW50SG9tZSEhIik7CiAKLQkgICAgTWFuYWdlbWVudEhvbWUgIGhvbWUgPSAoTWFuYWdlbWVudEhvbWUpUG9ydGFibGVSZW1vdGVPYmplY3QubmFycm93KAotCQkJICAgICAgICAgICAgICAgICAgICAgb2JqcmVmLCBNYW5hZ2VtZW50SG9tZS5jbGFzcyk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqTmFycm93ZWQgTWFuYWdlbWVudEhvbWUhISIpOworICAgIC8vIGluc3RhbmNpYXRlIHRoZSBtZWpiCisgICAgICAgdHJ5IHsKIAotCSAgICBNYW5hZ2VtZW50IG1lamIgPSBob21lLmNyZWF0ZSgpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKkdvdCB0aGUgTUVKQiEhIik7CisgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKipDcmVhdGVkIGluaXRpYWwgY29udGV4dCIpOwogCi0JICAgIFN0cmluZyBkb21haW4gPSBtZWpiLmdldERlZmF1bHREb21haW4oKTsKLQkgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKipNRUpCIGRlZmF1bHQgZG9tYWluID0gIitkb21haW4pOwotCSAgICBpbnQgbWJlYW5Db3VudCA9IG1lamIuZ2V0TUJlYW5Db3VudCgpLmludFZhbHVlKCk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqTUJlYW5Db3VudCA9ICIrbWJlYW5Db3VudCk7CisgICAgICAgIGphdmEubGFuZy5PYmplY3Qgb2JqcmVmID0gaWMubG9va3VwKCJlamIvbWdtdC9NRUpCIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqTG9va2VkIHVwIE1hbmFnZW1lbnRIb21lISEiKTsKIAotCSAgICAvLyBQcmludCBhdHRyaWJ1dGVzIG9mIGFsbCBNQmVhbnMgCisgICAgICAgIE1hbmFnZW1lbnRIb21lICBob21lID0gKE1hbmFnZW1lbnRIb21lKVBvcnRhYmxlUmVtb3RlT2JqZWN0Lm5hcnJvdygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ianJlZiwgTWFuYWdlbWVudEhvbWUuY2xhc3MpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKk5hcnJvd2VkIE1hbmFnZW1lbnRIb21lISEiKTsKKworICAgICAgICBNYW5hZ2VtZW50IG1lamIgPSBob21lLmNyZWF0ZSgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKkdvdCB0aGUgTUVKQiEhIik7CisKKyAgICAgICAgU3RyaW5nIGRvbWFpbiA9IG1lamIuZ2V0RGVmYXVsdERvbWFpbigpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKk1FSkIgZGVmYXVsdCBkb21haW4gPSAiK2RvbWFpbik7CisgICAgICAgIGludCBtYmVhbkNvdW50ID0gbWVqYi5nZXRNQmVhbkNvdW50KCkuaW50VmFsdWUoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKipNQmVhbkNvdW50ID0gIittYmVhbkNvdW50KTsKKworICAgICAgICAvLyBQcmludCBhdHRyaWJ1dGVzIG9mIGFsbCBNQmVhbnMKICAgICAgICAgICAgIE9iamVjdE5hbWUgcXVlcnkgPSBuZXcgT2JqZWN0TmFtZSgiKjpqMmVlVHlwZT1KMkVFQXBwbGljYXRpb24sbmFtZT1nb29nbGVBcHAsKiIpOwotCSAgICBTZXQgbWJlYW5OYW1lcyA9IG1lamIucXVlcnlOYW1lcyhxdWVyeSwgbnVsbCk7Ci0JICAgIGlmICggbWJlYW5OYW1lcy5zaXplKCkgIT0gMSApIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCIqKipFUlJPUjogbWJlYW5zIHJldHVybmVkIGJ5IHF1ZXJ5IGlzICIKKyAgICAgICAgU2V0IG1iZWFuTmFtZXMgPSBtZWpiLnF1ZXJ5TmFtZXMocXVlcnksIG51bGwpOworICAgICAgICBpZiAoIG1iZWFuTmFtZXMuc2l6ZSgpICE9IDEgKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqRVJST1I6IG1iZWFucyByZXR1cm5lZCBieSBxdWVyeSBpcyAiCiAgICAgICAgICAgICAgICAgK21iZWFuTmFtZXMuc2l6ZSgpICsgIiBpdCBzaG91bGQgYmUgMSIpOwotCSAgICB9Ci0JCQotCSAgICBJdGVyYXRvciBpdCA9IG1iZWFuTmFtZXMuaXRlcmF0b3IoKTsKLQkgICAgT2JqZWN0TmFtZSBuYW1lID0gKE9iamVjdE5hbWUpaXQubmV4dCgpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk9idGFpbmVkIGpzcjc3IG1iZWFuIGZvciBnb29nbGVBcHAgPSAiK25hbWUpOworICAgICAgICB9CiAKLQkJLy8gR2V0IGF0dHIgdmFsdWVzIGZyb20gTUVKQiBhbmQgcHJpbnQgdGhlbQotICAgICAgICAgICAgICAgIHRyeXsgICAgICAgICAgICAgICAgICAgIAorICAgICAgICBJdGVyYXRvciBpdCA9IG1iZWFuTmFtZXMuaXRlcmF0b3IoKTsKKyAgICAgICAgT2JqZWN0TmFtZSBuYW1lID0gKE9iamVjdE5hbWUpaXQubmV4dCgpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk9idGFpbmVkIGpzcjc3IG1iZWFuIGZvciBnb29nbGVBcHAgPSAiK25hbWUpOworCisgICAgICAgIC8vIEdldCBhdHRyIHZhbHVlcyBmcm9tIE1FSkIgYW5kIHByaW50IHRoZW0KKyAgICAgICAgICAgICAgICB0cnl7CiAgICAgICAgICAgICAgICAgICAgIE9iamVjdCBhdHRyID0gbWVqYi5nZXRBdHRyaWJ1dGUobmFtZSwgImhhc1dlYlNlcnZpY2VzIik7Ci0JCSAgICBib29sZWFuIGhhc1dlYlNlcnZpY2VzPWZhbHNlOwotCQkgICAgaWYgKGF0dHIgaW5zdGFuY2VvZiBCb29sZWFuKSB7Ci0JCQloYXNXZWJTZXJ2aWNlcyA9ICgoQm9vbGVhbikgYXR0cikuYm9vbGVhblZhbHVlKCk7Ci0JCSAgICB9Ci0JCSAgICAJCi0JCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZvciBIYXNXZWJTZXJ2aWNlcyAiK2hhc1dlYlNlcnZpY2VzKTsKKyAgICAgICAgICAgIGJvb2xlYW4gaGFzV2ViU2VydmljZXM9ZmFsc2U7CisgICAgICAgICAgICBpZiAoYXR0ciBpbnN0YW5jZW9mIEJvb2xlYW4pIHsKKyAgICAgICAgICAgIGhhc1dlYlNlcnZpY2VzID0gKChCb29sZWFuKSBhdHRyKS5ib29sZWFuVmFsdWUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGb3IgSGFzV2ViU2VydmljZXMgIitoYXNXZWJTZXJ2aWNlcyk7CiAKICAgICAgICAgICAgICAgICAgICAgYXR0ciA9IG1lamIuZ2V0QXR0cmlidXRlKG5hbWUsICJlbmRwb2ludEFkZHJlc3NlcyIpOwotCQkgICAgaWYgKGF0dHIgaW5zdGFuY2VvZiBTdHJpbmdbXSkgewotCQkJU3RyaW5nW10gYWRkcmVzc2VzID0gKFN0cmluZ1tdKSBhdHRyOwotCQkJZm9yIChpbnQgaT0wO2k8YWRkcmVzc2VzLmxlbmd0aDtpKyspIHsKLQkJCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlZ2lzdGVyZWQgYWRkcmVzc2VzICIgKyBhZGRyZXNzZXNbaV0pOworICAgICAgICAgICAgaWYgKGF0dHIgaW5zdGFuY2VvZiBTdHJpbmdbXSkgeworICAgICAgICAgICAgU3RyaW5nW10gYWRkcmVzc2VzID0gKFN0cmluZ1tdKSBhdHRyOworICAgICAgICAgICAgZm9yIChpbnQgaT0wO2k8YWRkcmVzc2VzLmxlbmd0aDtpKyspIHsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlZ2lzdGVyZWQgYWRkcmVzc2VzICIgKyBhZGRyZXNzZXNbaV0pOwogCi0JCQkgICAgLy8gcmV0cmlldmUgdGhlIHdzZGwgIGZpbGUKLQkJCSAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovL2xvY2FsaG9zdDo4MDgwLyIrYWRkcmVzc2VzW2ldKyI/d3NkbCIpOwotCQkJICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOwotCQkJICAgIGNvbm5lY3Rpb24uc2V0UmVxdWVzdE1ldGhvZCgiR0VUIik7Ci0JCQkgICAgY29ubmVjdGlvbi5jb25uZWN0KCk7Ci0JCQkgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm5lY3Rpb24uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0JCQkgICAgaWYgKHJlc3BvbnNlQ29kZSE9SHR0cFVSTENvbm5lY3Rpb24uSFRUUF9PSykgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQ2Fubm90IHJldHJpZXZlIHdzZGwgZm9yICIgKyBhZGRyZXNzZXNbaV0gKyAiIGVycm9yIGlzICIgKyBjb25uZWN0aW9uLmdldFJlc3BvbnNlTWVzc2FnZSgpKTsKLQkJCSAgICB9IGVsc2UgewotCQkJCUlucHV0U3RyZWFtIGlzID0gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0oY29ubmVjdGlvbi5nZXRJbnB1dFN0cmVhbSgpKTsKLQkJCQlieXRlW10gYnVmZmVyID0gbmV3IGJ5dGVbMTAwXTsKLQkJCQlpbnQgcmVhZDsKLQkJCQlkbyB7Ci0JCQkJICAgIHJlYWQgPSBpcy5yZWFkKGJ1ZmZlciwwLCAxMDApOwotCQkJCSAgICBTeXN0ZW0ub3V0LnByaW50bG4obmV3IFN0cmluZyhidWZmZXIsMCwgcmVhZCkpOwotCQkJCX0gd2hpbGUocmVhZD09MTAwICYmIHJlYWQhPS0xKTsKLQkJCSAgICB9Ci0JCQl9Ci0JCSAgICB9Ci0gICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gcmV0cmlldmUgdGhlIHdzZGwgIGZpbGUKKyAgICAgICAgICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovL2xvY2FsaG9zdDo4MDgwLyIrYWRkcmVzc2VzW2ldKyI/d3NkbCIpOworICAgICAgICAgICAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSAoSHR0cFVSTENvbm5lY3Rpb24pIHVybC5vcGVuQ29ubmVjdGlvbigpOworICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uc2V0UmVxdWVzdE1ldGhvZCgiR0VUIik7CisgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5jb25uZWN0KCk7CisgICAgICAgICAgICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm5lY3Rpb24uZ2V0UmVzcG9uc2VDb2RlKCk7CisgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlQ29kZSE9SHR0cFVSTENvbm5lY3Rpb24uSFRUUF9PSykgeworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2Fubm90IHJldHJpZXZlIHdzZGwgZm9yICIgKyBhZGRyZXNzZXNbaV0gKyAiIGVycm9yIGlzICIgKyBjb25uZWN0aW9uLmdldFJlc3BvbnNlTWVzc2FnZSgpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIElucHV0U3RyZWFtIGlzID0gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0oY29ubmVjdGlvbi5nZXRJbnB1dFN0cmVhbSgpKTsKKyAgICAgICAgICAgICAgICBieXRlW10gYnVmZmVyID0gbmV3IGJ5dGVbMTAwXTsKKyAgICAgICAgICAgICAgICBpbnQgcmVhZDsKKyAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgIHJlYWQgPSBpcy5yZWFkKGJ1ZmZlciwwLCAxMDApOworICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obmV3IFN0cmluZyhidWZmZXIsMCwgcmVhZCkpOworICAgICAgICAgICAgICAgIH0gd2hpbGUocmVhZD09MTAwICYmIHJlYWQhPS0xKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY2F0Y2goRXhjZXB0aW9uIGV4cCl7CiAgICAgICAgICAgICAgICAgICAgIC8vZXhwLnByaW50U3RhY2tUcmFjZSgpOwpAQCAtMTI3LDE0ICsxMjcsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWNjZXNzaW5nIG1iZWFuIGRldGFpbHM6ICBLZWVwIGNvbnRpbnVpbmdcbiIpOwogICAgICAgICAgICAgICAgIH0KIAotCSAgICBtZWpiLnJlbW92ZSgpOworICAgICAgICBtZWpiLnJlbW92ZSgpOwogCi0JfSBjYXRjaChOYW1pbmdFeGNlcHRpb24gbmUpeworICAgIH0gY2F0Y2goTmFtaW5nRXhjZXB0aW9uIG5lKXsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqRXhjZXB0aW9uIHdoaWxlIGluaXRpYWxpemluZyBjb250ZXh0LlxuIik7CiAgICAgICAgICAgICBuZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9IGNhdGNoKEV4Y2VwdGlvbiByZSkgeworICAgIH0gY2F0Y2goRXhjZXB0aW9uIHJlKSB7CiAgICAgICAgICAgICByZS5wcmludFN0YWNrVHJhY2UoKTsKLQl9IAkKKyAgICB9CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZS93c2NvbXBpbGVfY29uZmlnX2FwcGNsaWVudC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZS93c2NvbXBpbGVfY29uZmlnX2FwcGNsaWVudC54bWwKaW5kZXggOThjODY1NS4uNTI5ODQ4OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGUvd3Njb21waWxlX2NvbmZpZ19hcHBjbGllbnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlL3dzY29tcGlsZV9jb25maWdfYXBwY2xpZW50LnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8Y29uZmlndXJhdGlvbgogICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4LXJwYy9yaS9jb25maWciPgotICA8d3NkbCAKKyAgPHdzZGwKICAgICAgIGxvY2F0aW9uPSJHb29nbGVTZWFyY2gud3NkbCIKICAgICAgIHBhY2thZ2VOYW1lPSJnb29nbGUiLz4KIDwvY29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlL3dzY29tcGlsZV9jb25maWdfZWpiLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlL3dzY29tcGlsZV9jb25maWdfZWpiLnhtbAppbmRleCBjZDdiY2VjLi5iZWI4NDZjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZS93c2NvbXBpbGVfY29uZmlnX2VqYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGUvd3Njb21waWxlX2NvbmZpZ19lamIueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxjb25maWd1cmF0aW9uCiAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+Ci0gIDx3c2RsIAorICA8d3NkbAogICAgICAgbG9jYXRpb249Ikdvb2dsZVNlYXJjaC53c2RsIgogICAgICAgcGFja2FnZU5hbWU9Imdvb2dsZWVqYiIvPgogPC9jb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGVzZXJ2ZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlc2VydmVyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZmIyOWRjZS4uYWY3OTAzNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGVzZXJ2ZXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZXNlcnZlci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMyArMTUsMjMgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9Imdvb2dsZXNlcnZlciIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWJzZXJ2aWNlcy54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYnNlcnZpY2VzLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93YXIvd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93YXIvc3VuLXdlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlc2VydmVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlc2VydmVyL2J1aWxkLnhtbAppbmRleCAwNWQxMmIwLi42MGQ5ZjE3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZXNlcnZlci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGVzZXJ2ZXIvYnVpbGQueG1sCkBAIC0zNSw5ICszNSw5IEBACiAKIAogICA8dGFyZ2V0IG5hbWU9InJ1bi53c2NvbXBpbGUiPgotCTxleGVjIGV4ZWN1dGFibGU9IiR7V1NDT01QSUxFfSIgZmFpbG9uZXJyb3I9InRydWUiID4KLSAgICAgICAgPGFyZyBsaW5lPSItc291cmNlIDEuMS4yICR7d3Njb21waWxlLmNvbW1hbmR9IiAvPiAgICAgICAgCi0JPC9leGVjPgorICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7V1NDT01QSUxFfSIgZmFpbG9uZXJyb3I9InRydWUiID4KKyAgICAgICAgPGFyZyBsaW5lPSItc291cmNlIDEuMS4yICR7d3Njb21waWxlLmNvbW1hbmR9IiAvPgorICAgIDwvZXhlYz4KICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSIiPgpAQCAtNjYsMTEgKzY2LDExIEBACiAgIDx0YXJnZXQgbmFtZT0id3Njb21waWxlLWFwcGNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxta2RpciBkaXI9Im91dHB1dCIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLndzY29tcGlsZSI+Ci0gICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiIAorICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIgogICAgICAgIHZhbHVlPSItaW1wb3J0IC1mOm5vcnBjc3RydWN0dXJlcyAta2VlcCAtZCBvdXRwdXQgLXMgb3V0cHV0IC1jbGFzc3BhdGggLiAtbW9kZWwgZ29vZ2xlY2xpZW50Lm1vZGVsIHdzY29tcGlsZV9jb25maWdfYXBwY2xpZW50LnhtbCIvPgogICAgIDwvYW50Y2FsbD4KICAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vZ29vZ2xlY2xpZW50Ij4KLSAgICAgICA8ZmlsZXNldCBkaXI9Im91dHB1dC9nb29nbGVjbGllbnQiIAorICAgICAgIDxmaWxlc2V0IGRpcj0ib3V0cHV0L2dvb2dsZWNsaWVudCIKICAgICAgICAgaW5jbHVkZXM9IkRpcmVjdG9yeUNhdGVnb3J5LmNsYXNzLCBHb29nbGVTZWFyY2hSZXN1bHQuY2xhc3MsIEdvb2dsZVNlYXJjaFNlcnZpY2UuY2xhc3MsIEdvb2dsZVNlYXJjaFBvcnQuY2xhc3MsIFJlc3VsdEVsZW1lbnQuY2xhc3MiLz4KICAgICA8L2NvcHk+CiAgICAgPCEtLSA8ZGVsZXRlIGRpcj0ib3V0cHV0Ii8+IC0tPgpAQCAtNzksMTEgKzc5LDExIEBACiAgIDx0YXJnZXQgbmFtZT0id3Njb21waWxlLWVqYiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxta2RpciBkaXI9Im91dHB1dCIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLndzY29tcGlsZSI+Ci0gICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiIAorICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIgogICAgICAgIHZhbHVlPSItaW1wb3J0IC1mOm5vcnBjc3RydWN0dXJlcyAta2VlcCAtZCBvdXRwdXQgLXMgb3V0cHV0IC1jbGFzc3BhdGggLiB3c2NvbXBpbGVfY29uZmlnX2VqYi54bWwiLz4KICAgICA8L2FudGNhbGw+CiAgICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2dvb2dsZXNlcnZlciI+Ci0gICAgICAgPGZpbGVzZXQgZGlyPSJvdXRwdXQvZ29vZ2xlc2VydmVyIiAKKyAgICAgICA8ZmlsZXNldCBkaXI9Im91dHB1dC9nb29nbGVzZXJ2ZXIiCiAgICAgICAgIGluY2x1ZGVzPSJEaXJlY3RvcnlDYXRlZ29yeS5jbGFzcywgR29vZ2xlU2VhcmNoUmVzdWx0LmNsYXNzLCBHb29nbGVTZWFyY2hQb3J0LmNsYXNzLCBSZXN1bHRFbGVtZW50LmNsYXNzIi8+CiAgICAgPC9jb3B5PgogICAgIDxkZWxldGUgZGlyPSJvdXRwdXQiLz4KQEAgLTkyLDM3ICs5MiwzNyBAQAogICA8dGFyZ2V0IG5hbWU9IndzY29tcGlsZS13ZWIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8bWtkaXIgZGlyPSJvdXRwdXQiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi53c2NvbXBpbGUiPgotICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIiAKKyAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIKICAgICAgICAgICAgIHZhbHVlPSItaW1wb3J0IC1mOm5vcnBjc3RydWN0dXJlcyAta2VlcCAtZCBvdXRwdXQgLXMgb3V0cHV0IC1tb2RlbCBnb29nbGV3ZWIubW9kZWwgLWNsYXNzcGF0aCAuIHdzY29tcGlsZV9jb25maWdfd2ViLnhtbCIvPgogICAgIDwvYW50Y2FsbD4KICAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vZ29vZ2xlc2VydmVyd2ViIj4KLSAgICAgICA8ZmlsZXNldCBkaXI9Im91dHB1dC9nb29nbGVzZXJ2ZXJ3ZWIiIAorICAgICAgIDxmaWxlc2V0IGRpcj0ib3V0cHV0L2dvb2dsZXNlcnZlcndlYiIKICAgICAgICAgaW5jbHVkZXM9IkRpcmVjdG9yeUNhdGVnb3J5LmNsYXNzLCBHb29nbGVTZWFyY2hSZXN1bHQuY2xhc3MsIEdvb2dsZVNlYXJjaFBvcnQuY2xhc3MsIFJlc3VsdEVsZW1lbnQuY2xhc3MiLz4KICAgICA8L2NvcHk+CiAgICAgPGRlbGV0ZSBkaXI9Im91dHB1dCIvPgogICA8L3RhcmdldD4KIAogICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiwgY29tcGlsZSI+Ci0gICAgPCEtLSAKLQlFSkIgbW9kdWxlIGNyZWF0aW9uCisgICAgPCEtLQorICAgIEVKQiBtb2R1bGUgY3JlYXRpb24KICAgICAtLT4KICAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvd3NkbCIKICAgICAgIGZpbGU9Ikdvb2dsZVNlYXJjaC53c2RsIi8+CiAgICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3dzZGwiCiAgICAgICBmaWxlPSJHb29nbGVTZWFyY2hfdHlwZXMud3NkbCIvPgotICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgCi0JIGZpbGU9Ikdvb2dsZU1hcHBpbmdfZWpiLnhtbCIvPgorICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKKyAgICAgZmlsZT0iR29vZ2xlTWFwcGluZ19lamIueG1sIi8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJlamItamFyLWNvbW1vbiI+Ci0gICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgIHZhbHVlPSJHb29nbGVNYXBwaW5nX2VqYi54bWwsTUVUQS1JTkYvd3NkbC8qKixnb29nbGVzZXJ2ZXIvKi5jbGFzcyIgLz4KIAogICAgIDwvYW50Y2FsbD4KLSAgICA8IS0tIAotCVdhciBtb2R1bGUgY3JlYXRpb24gCisgICAgPCEtLQorICAgIFdhciBtb2R1bGUgY3JlYXRpb24KICAgICAtLT4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLXdhci1maWxlIi8+Ci0gICAgPCEtLSAKLQlBcHBDbGllbnQgbW9kdWxlIGNyZWF0aW9uCisgICAgPCEtLQorICAgIEFwcENsaWVudCBtb2R1bGUgY3JlYXRpb24KICAgICAtLT4KICAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvd3NkbCIKICAgICAgIGZpbGU9Ikdvb2dsZVNlYXJjaC53c2RsIi8+CkBAIC0xMzAsMzYgKzEzMCwzNiBAQAogICAgICAgZmlsZT0iR29vZ2xlU2VhcmNoX3R5cGVzLndzZGwiLz4KICAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvd3NkbCIKICAgICAgIGZpbGU9Ikdvb2dsZVNlYXJjaF9wYXJ0aWFsLndzZGwiLz4KLSAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIAotCSBmaWxlPSJHb29nbGVNYXBwaW5nX2FwcGNsaWVudC54bWwiLz4KLSAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIAotCSBmaWxlPSJnb29nbGVjbGllbnQubW9kZWwiLz4KKyAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCisgICAgIGZpbGU9Ikdvb2dsZU1hcHBpbmdfYXBwY2xpZW50LnhtbCIvPgorICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKKyAgICAgZmlsZT0iZ29vZ2xlY2xpZW50Lm1vZGVsIi8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJhcHBjbGllbnQtamFyLWNvbW1vbiI+Ci0gICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgIHZhbHVlPSJnb29nbGVjbGllbnQubW9kZWwsR29vZ2xlTWFwcGluZ19hcHBjbGllbnQueG1sLE1FVEEtSU5GL3dzZGwvKiosZ29vZ2xlY2xpZW50LyouY2xhc3MiIC8+CiAKICAgICA8L2FudGNhbGw+Ci0gICAgPCEtLSAKLQlFQVIgZmlsZSBjcmVhdGlvbiAKKyAgICA8IS0tCisgICAgRUFSIGZpbGUgY3JlYXRpb24KICAgICAtLT4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVhci1jb21tb24iIC8+CiAgICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GIgogICAgICAgZmlsZT0iJHtzdW4tYXBwbGljYXRpb24ueG1sfSIvPgotICAgIDxqYXIgZGVzdGZpbGUgPSAiJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIiAKLQl1cGRhdGU9InRydWUiPgorICAgIDxqYXIgZGVzdGZpbGUgPSAiJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHAuZWFyIgorICAgIHVwZGF0ZT0idHJ1ZSI+CiAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ij4KLQk8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9zdW4tYXBwbGljYXRpb24ueG1sIi8+CisgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogICAgICAgPC9maWxlc2V0PgogICAgIDwvamFyPgotCQotICA8L3RhcmdldD4gCisKKyAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJidWlsZC1hcHBjbGllbnQtZmlsZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICA8L3RhcmdldD4KIAogICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXdhci1maWxlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGVjaG8gbWVzc2FnZT0ibXkgYnVpbGQgY2xhc3NlcyBkaXIgaXM6JHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KLSAgICA8ZGVsZXRlIGZpbGU9IiR7d2FyLmZpbGV9Ii8+ICAKKyAgICA8ZGVsZXRlIGZpbGU9IiR7d2FyLmZpbGV9Ii8+CiAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wIi8+CiAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYiLz4KICAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYiCkBAIC0xNzMsMTAgKzE3MywxMCBAQAogICAgICAgZmlsZT0iR29vZ2xlU2VhcmNoLndzZGwiLz4KICAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvd3NkbCIKICAgICAgIGZpbGU9Ikdvb2dsZVNlYXJjaF90eXBlcy53c2RsIi8+Ci0gICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcCIgCi0JIGZpbGU9Ikdvb2dsZU1hcHBpbmdfd2ViLnhtbCIvPgotICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAiIAotCSBmaWxlPSJnb29nbGV3ZWIubW9kZWwiLz4KKyAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wIgorICAgICBmaWxlPSJHb29nbGVNYXBwaW5nX3dlYi54bWwiLz4KKyAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wIgorICAgICBmaWxlPSJnb29nbGV3ZWIubW9kZWwiLz4KICAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvY2xhc3Nlcy9nb29nbGVzZXJ2ZXJ3ZWIiPgogICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2dvb2dsZXNlcnZlcndlYiI+CiAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi8qLmNsYXNzIi8+CkBAIC0xODYsMTIgKzE4NiwxMiBAQAogICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAiIGNhc2VzZW5zaXRpdmU9InllcyI+CiAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKiovKioiLz4KICAgICAgIDwvZmlsZXNldD4KLSAgICA8L2phcj4JCisgICAgPC9qYXI+CiAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcCIvPgogICA8L3RhcmdldD4KIAogCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTIyMiw3ICsyMjIsNyBAQAogCiAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXN0YW5kYWxvbmUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLndzY29tcGlsZSI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIgCisgICAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIKICAgICAgICAgIHZhbHVlPSItZ2VuOmNsaWVudCAta2VlcCAtZCAke2J1aWxkLmNsYXNzZXMuZGlyfSAtcyAke2J1aWxkLmNsYXNzZXMuZGlyfSAtY2xhc3NwYXRoIC4gd3Njb21waWxlX2NvbmZpZ19zdGFuZGFsb25lLnhtbCIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CkBAIC0yNDIsNyArMjQyLDcgQEAKICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9hcHBzZXJ2LXJ0LmphciIvPgogICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXJ0LmphciIvPgogICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXRvb2xzLmphciIvPgotCSAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIi8+CisgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiLz4KICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgogICAgICAgPC9jbGFzc3BhdGg+CiAKQEAgLTI1MCwxMCArMjUwLDEwIEBACiAgICAgICA8c3lzcHJvcGVydHkga2V5PSJodHRwLnByb3h5UG9ydCIgdmFsdWU9IjgwODAiLz4KICAgICA8L2phdmE+CiAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gIAorICAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0iY29udGFjdGdvb2dsZSI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KQEAgLTI2MywzNCArMjYzLDM0IEBACiAKICAgPHRhcmdldCBuYW1lPSJnZW4tbWFwcGluZy1hcHBjbGllbnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi53c2NvbXBpbGUiPgotICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIiAKKyAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIKICAgICAgICB2YWx1ZT0iLWdlbiAtY3AgLiAtbWFwcGluZyBHb29nbGVNYXBwaW5nX2FwcGNsaWVudC54bWwgd3Njb21waWxlX2NvbmZpZ19hcHBjbGllbnQueG1sIi8+CiAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KIAogICA8dGFyZ2V0IG5hbWU9Imdlbi1tYXBwaW5nLWVqYiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLndzY29tcGlsZSI+Ci0gICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiIAorICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIgogICAgICAgIHZhbHVlPSItZ2VuIC1jcCAuIC1tYXBwaW5nIEdvb2dsZU1hcHBpbmdfZWpiLnhtbCB3c2NvbXBpbGVfY29uZmlnX2VqYi54bWwiLz4KICAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0iZ2VuLW1hcHBpbmctd2ViIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4ud3Njb21waWxlIj4KLSAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIgCisgICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiCiAgICAgICAgdmFsdWU9Ii1nZW4gLWNwIC4gLW1hcHBpbmcgR29vZ2xlTWFwcGluZ193ZWIueG1sIHdzY29tcGlsZV9jb25maWdfd2ViLnhtbCIvPgogICAgIDwvYW50Y2FsbD4KICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS11c2VyIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtdXNlci1jb21tb24iPgotCSAgICA8cGFyYW0gbmFtZT0idXNlciIgdmFsdWU9ImoyZWUiLz4KLQkgICAgPHBhcmFtIG5hbWU9InBhc3N3b3JkIiB2YWx1ZT0iajJlZSIvPgotCSAgICA8cGFyYW0gbmFtZT0iZ3JvdXBzIiB2YWx1ZT0ic3RhZmYiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9InVzZXIiIHZhbHVlPSJqMmVlIi8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJwYXNzd29yZCIgdmFsdWU9ImoyZWUiLz4KKyAgICAgICAgPHBhcmFtIG5hbWU9Imdyb3VwcyIgdmFsdWU9InN0YWZmIi8+CiAgICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJyZWNvbmZpZy1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXVzZXIiPgogICAgICAgPCEtLSByZW1vdmUgdGVzdCB1c2VycywganVzdCBjbGVhbnVwLiAtLT4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLXVzZXItY29tbW9uIj4KQEAgLTMwMywxMCArMzAzLDEwIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgYWxsIChFeGVjdXRlcyB0aGUgV2ViU2VydmljZXMgdGVzdCkKLQkJCWFudCBjb250YWN0Z29vZ2xlIChFeGVjdXRlcyB0aGUgYXBwY2xpZW50IGNvbnRhY3RpbmcgdGhlIEdvb2dsZS5jb20gV2ViU2VydmljZXMpCi0JPC9lY2hvPgorICAgIDxlY2hvPgorICAgICAgICBVc2FnZToKKyAgICAgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIHRoZSBXZWJTZXJ2aWNlcyB0ZXN0KQorICAgICAgICAgICAgYW50IGNvbnRhY3Rnb29nbGUgKEV4ZWN1dGVzIHRoZSBhcHBjbGllbnQgY29udGFjdGluZyB0aGUgR29vZ2xlLmNvbSBXZWJTZXJ2aWNlcykKKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZXNlcnZlci9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZXNlcnZlci9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggYmRkZTIwMi4uNGQ3ZjdkYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGVzZXJ2ZXIvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlc2VydmVyL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjksMTAgKzI5LDEwIEBACiAKIHB1YmxpYyBjbGFzcyBDbGllbnQgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFFOYW1lIFBPUlRfUU5BTUUgPSAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBRTmFtZSBQT1JUX1FOQU1FID0KICAgICAgICAgbmV3IFFOYW1lKCJ1cm46R29vZ2xlU2VhcmNoIiwgIkdvb2dsZVNlYXJjaFBvcnQiKTsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBRTmFtZSBPUEVSQVRJT05fUU5BTUUgPQogICAgICAgICBuZXcgUU5hbWUoInVybjpHb29nbGVTZWFyY2giLCAiZG9TcGVsbGluZ1N1Z2dlc3Rpb24iKTsKQEAgLTQyLDEyICs0MiwxMiBAQAogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKIAotICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJnb29nbGVzZXJ2ZXIgYXBwY2xpZW50Iik7CQorICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJnb29nbGVzZXJ2ZXIgYXBwY2xpZW50Iik7CiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KGFyZ3MpOwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJnb29nbGVzZXJ2ZXItYXBwbGllbnRJRCIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBDbGllbnQoU3RyaW5nW10gYXJncykgewogICAgICAgICB3b3JkID0gKGFyZ3MubGVuZ3RoID4gMCkgPyBhcmdzWzBdIDogInNwZWxsbmciOwogICAgICAgICB0YXJnZXRFbmRwb2ludEFkZHJlc3MgPSAoYXJncy5sZW5ndGggPiAxKSA/IGFyZ3NbMV0gOiBudWxsOwpAQCAtNTUsNyArNTUsNyBAQAogCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogCi0gICAgCXRyeSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBTdHJpbmcgZ29vZ2xlS2V5ID0gKFN0cmluZykKICAgICAgICAgICAgICAgICBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvZ29vZ2xla2V5Iik7CkBAIC04MCw3ICs4MCw3IEBACiAKICAgICAgICAgICAgIGRvRHluYW1pY1Byb3h5VGVzdChnb29nbGVTZWFyY2hTZXJ2aWNlLCBnb29nbGVLZXkpOwogCi0gICAgICAgICAgICBHb29nbGVTZWFyY2hQb3J0IGdvb2dsZVNlYXJjaFBvcnQgPSAKKyAgICAgICAgICAgIEdvb2dsZVNlYXJjaFBvcnQgZ29vZ2xlU2VhcmNoUG9ydCA9CiAgICAgICAgICAgICAgICAgZ29vZ2xlU2VhcmNoU2VydmljZS5nZXRHb29nbGVTZWFyY2hQb3J0KCk7CiAgICAgICAgICAgICBkb1NwZWxsaW5nU3VnZ2VzdGlvbihnb29nbGVTZWFyY2hQb3J0LCBnb29nbGVLZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRFbmRwb2ludEFkZHJlc3MpOwpAQCAtMTA2LDcgKzEwNiw3IEBACiAgICAgICAgICAgICAgICAgcGFydGlhbFdzZGxTZXJ2aWNlR2VuZXJpYy5nZXRQb3J0KEdvb2dsZVNlYXJjaFBvcnQuY2xhc3MpOwogICAgICAgICAgICAgZ29vZ2xlU2VhcmNoLmRvU3BlbGxpbmdTdWdnZXN0aW9uKGdvb2dsZUtleSwgd29yZCk7CiAKLS8qKiAgICAgICAgICAgIEdvb2dsZVNlYXJjaFNlcnZpY2UgcGFydGlhbFdzZGxTZXJ2aWNlR2VuZXJhdGVkID0gCisvKiogICAgICAgICAgICBHb29nbGVTZWFyY2hTZXJ2aWNlIHBhcnRpYWxXc2RsU2VydmljZUdlbmVyYXRlZCA9CiAgICAgICAgICAgICAgICAgKEdvb2dsZVNlYXJjaFNlcnZpY2UpCiAgICAgICAgICAgICAgICAgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3NlcnZpY2UvcGFydGlhbEdlbmVyYXRlZCIpOwogICAgICAgICAgICAgZ29vZ2xlU2VhcmNoID0gcGFydGlhbFdzZGxTZXJ2aWNlR2VuZXJhdGVkLmdldEdvb2dsZVNlYXJjaFBvcnQoKTsKQEAgLTExNSwxNyArMTE1LDE3IEBACiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygiYXBwY2xpZW50IG1haW4iLCBzdGF0LlBBU1MpOwogCiAKLSAgICAJfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJnb29nbGUgY2xpZW50IHRlc3QgZmFpbGVkIik7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJhcHBjbGllbnQgbWFpbiIgLCBzdGF0LkZBSUwpOwotCX0gCisgICAgfQogCiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGRvU3BlbGxpbmdTdWdnZXN0aW9uKEdvb2dsZVNlYXJjaFBvcnQgZ29vZ2xlU2VhcmNoUG9ydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGdvb2dsZUtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGVuZHBvaW50QWRkcmVzcykgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBlbmRwb2ludEFkZHJlc3MpCiAgICAgICAgIHRocm93cyBFeGNlcHRpb24gewogCiAgICAgICAgIGlmKCBlbmRwb2ludEFkZHJlc3MgIT0gbnVsbCApIHsKQEAgLTE0Miw3ICsxNDIsNyBAQAogCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29udGFjdGluZyBnb29nbGUgZm9yIHNwZWxsaW5nICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1Z2dlc3Rpb24gYXQgIiArIGVuZHBvaW50QWRkcmVzcyk7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyBzcGVsbGluZ1N1Z2dlc3Rpb24gPQogICAgICAgICAgICAgZ29vZ2xlU2VhcmNoUG9ydC5kb1NwZWxsaW5nU3VnZ2VzdGlvbihnb29nbGVLZXksIHdvcmQpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdhdmUgZ29vZ2xlIHRoZSB3b3JkICciICsgd29yZCArICInIC4uLiAiICsKQEAgLTE1NSwyMSArMTU1LDIxIEBACiAgICAgICAgIENhbGwgYzEgPSBzZXJ2aWNlLmNyZWF0ZUNhbGwoKTsKICAgICAgICAgQ2FsbCBjMiA9IHNlcnZpY2UuY3JlYXRlQ2FsbChQT1JUX1FOQU1FKTsKICAgICAgICAgQ2FsbCBjMyA9IHNlcnZpY2UuY3JlYXRlQ2FsbChQT1JUX1FOQU1FLCBPUEVSQVRJT05fUU5BTUUpOwotICAgICAgICBDYWxsIGM0ID0gc2VydmljZS5jcmVhdGVDYWxsKFBPUlRfUU5BTUUsIAorICAgICAgICBDYWxsIGM0ID0gc2VydmljZS5jcmVhdGVDYWxsKFBPUlRfUU5BTUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1BFUkFUSU9OX1FOQU1FLmdldExvY2FsUGFydCgpKTsKICAgICAgICAgQ2FsbFtdIGNhbGxzID0gc2VydmljZS5nZXRDYWxscyhQT1JUX1FOQU1FKTsKIAogICAgICAgICBpZiggdGFyZ2V0RW5kcG9pbnRBZGRyZXNzICE9IG51bGwgKSB7Ci0gICAgICAgICAgICBjMy5zZXRUYXJnZXRFbmRwb2ludEFkZHJlc3ModGFyZ2V0RW5kcG9pbnRBZGRyZXNzKTsgICAgICAgICAgICAKLSAgICAgICAgfSAKKyAgICAgICAgICAgIGMzLnNldFRhcmdldEVuZHBvaW50QWRkcmVzcyh0YXJnZXRFbmRwb2ludEFkZHJlc3MpOworICAgICAgICB9CiAgICAgICAgIE9iamVjdCBwYXJhbXNbXSA9IG5ldyBPYmplY3RbXSB7Z29vZ2xlS2V5LCAiaGVsbG8iIH07CiAgICAgICAgIFN0cmluZyByZXNwb25zZSA9IChTdHJpbmcpIGMzLmludm9rZShwYXJhbXMpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc3BvbnNlID0gIiArIHJlc3BvbnNlKTsKIAogICAgICAgICAvLyBjb250YWluZXItbWFuYWdlZCBwb3J0IHNlbGVjdGlvbgotICAgICAgICBHb29nbGVTZWFyY2hQb3J0IHNlaSA9IChHb29nbGVTZWFyY2hQb3J0KSAKKyAgICAgICAgR29vZ2xlU2VhcmNoUG9ydCBzZWkgPSAoR29vZ2xlU2VhcmNoUG9ydCkKICAgICAgICAgICAgIHNlcnZpY2UuZ2V0UG9ydChHb29nbGVTZWFyY2hQb3J0LmNsYXNzKTsKLSAgICAgICAgc2VpID0gKEdvb2dsZVNlYXJjaFBvcnQpIAorICAgICAgICBzZWkgPSAoR29vZ2xlU2VhcmNoUG9ydCkKICAgICAgICAgICAgIHNlcnZpY2UuZ2V0UG9ydChQT1JUX1FOQU1FLCBHb29nbGVTZWFyY2hQb3J0LmNsYXNzKTsKIAogICAgICAgICBRTmFtZSBzZXJ2aWNlTmFtZSA9IHNlcnZpY2UuZ2V0U2VydmljZU5hbWUoKTsKQEAgLTE4MiwxOCArMTgyLDE4IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbGluZyBvbmV3YXkgb3BlcmF0aW9uIik7CiAgICAgICAgIENhbGwgb25ld2F5ID0gc2VydmljZS5jcmVhdGVDYWxsKFBPUlRfUU5BTUUsICJoZWxsb09uZVdheSIpOwogICAgICAgICBpZiggdGFyZ2V0RW5kcG9pbnRBZGRyZXNzICE9IG51bGwgKSB7Ci0gICAgICAgICAgICBvbmV3YXkuc2V0VGFyZ2V0RW5kcG9pbnRBZGRyZXNzKHRhcmdldEVuZHBvaW50QWRkcmVzcyk7ICAgICAgICAgICAgCi0gICAgICAgIH0gCisgICAgICAgICAgICBvbmV3YXkuc2V0VGFyZ2V0RW5kcG9pbnRBZGRyZXNzKHRhcmdldEVuZHBvaW50QWRkcmVzcyk7CisgICAgICAgIH0KIAogICAgICAgICBsb25nIG9uZVdheU1ldGhvZFdhaXRUaW1lSW5NaWxsaXMgPSA3MDAwOwogCi0gICAgICAgIERhdGUgYmVmb3JlID0gbmV3IERhdGUoKTsgICAgICAgIAotICAgICAgICBvbmV3YXkuaW52b2tlT25lV2F5KG5ldyBPYmplY3RbXSAKKyAgICAgICAgRGF0ZSBiZWZvcmUgPSBuZXcgRGF0ZSgpOworICAgICAgICBvbmV3YXkuaW52b2tlT25lV2F5KG5ldyBPYmplY3RbXQogICAgICAgICAgICAgICAgeyBvbmVXYXlNZXRob2RXYWl0VGltZUluTWlsbGlzICsgIiIgfSk7CiAgICAgICAgIERhdGUgYWZ0ZXIgPSBuZXcgRGF0ZSgpOwogICAgICAgICBsb25nIGVsYXBzZWRUaW1lID0gYWZ0ZXIuZ2V0VGltZSgpIC0gYmVmb3JlLmdldFRpbWUoKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvbmUgd2F5IG9wZXJhdGlvbiBiZWdhbiBhdCAiICsgYmVmb3JlICsgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiIGFuZCByZXR1cm5lZCBhdCAiICsgYWZ0ZXIgKyAKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvbmUgd2F5IG9wZXJhdGlvbiBiZWdhbiBhdCAiICsgYmVmb3JlICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIgYW5kIHJldHVybmVkIGF0ICIgKyBhZnRlciArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGFuZCB0b29rICIgKyAgZWxhcHNlZFRpbWUgKyAiIG1pbGxpLXNlY29uZHMiKTsKICAgICAgICAgaWYoIGVsYXBzZWRUaW1lID4gb25lV2F5TWV0aG9kV2FpdFRpbWVJbk1pbGxpcyApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIm9uZSB3YXkgb3BlcmF0aW9uIGJsb2NrZWQgZm9yIHRvbyBsb25nICIpOwpAQCAtMjA0LDcgKzIwNCw3IEBACiAgICAgICAgIC8vIHRvIHVuZGVwbG95LCBidXQgdGhlIGVuZHBvaW50IGlzIHN0aWxsIGV4ZWN1dGluZyBpdHMKICAgICAgICAgLy8gb25ld2F5IG9wZXJhdGlvbi4KICAgICAgICAgbG9uZyBzbGVlcFRpbWUgPSAob25lV2F5TWV0aG9kV2FpdFRpbWVJbk1pbGxpcyAtIGVsYXBzZWRUaW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJub3cgc2xlZXBpbmcgZm9yICIgKyBzbGVlcFRpbWUgKyAiIG1pbGxpIHNlY3MiKTsKICAgICAgICAgVGhyZWFkLnNsZWVwKHNsZWVwVGltZSk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigicmV0dXJuaW5nIGZyb20gZG9EeW5hbWljUHJveHlUZXN0Iik7CkBAIC0yNjAsNyArMjYwLDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IGNhdWdodCB1bnN1cHBvcnRlZCBvcGVyYXRpb24gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvciBTZXJ2aWNlLmdldFBvcnQoU0VJKSIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBSZW1vdGUgcmVtb3RlID0gc2VydmljZS5nZXRQb3J0KFBPUlRfUU5BTUUsIEdvb2dsZVNlYXJjaFBvcnQuY2xhc3MpOwogICAgICAgICB9IGNhdGNoKGphdmEubGFuZy5VbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiB1b2UpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlc2VydmVyL2NsaWVudC9DbGllbnRIYW5kbGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZXNlcnZlci9jbGllbnQvQ2xpZW50SGFuZGxlci5qYXZhCmluZGV4IGY3MTA1YzkuLjM2ZDc5NjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlc2VydmVyL2NsaWVudC9DbGllbnRIYW5kbGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGVzZXJ2ZXIvY2xpZW50L0NsaWVudEhhbmRsZXIuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogaW1wb3J0IGphdmF4Lm5hbWluZy5Jbml0aWFsQ29udGV4dDsKIAogcHVibGljIGNsYXNzIENsaWVudEhhbmRsZXIgZXh0ZW5kcyBHZW5lcmljSGFuZGxlciB7Ci0gIAorCiAgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBDbGllbnRIYW5kbGVyOjpkZXN0cm95KCkiKTsKICAgICB9CkBAIC00MCwxNyArNDAsMTcgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBDbGllbnRIYW5kbGVyOjpoYW5kbGVGYXVsdCgpIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICAgICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBoYW5kbGVSZXF1ZXN0KE1lc3NhZ2VDb250ZXh0IGNvbnRleHQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBDbGllbnRIYW5kbGVyOjpoYW5kbGVSZXF1ZXN0KCkiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgICAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGhhbmRsZVJlc3BvbnNlKE1lc3NhZ2VDb250ZXh0IGNvbnRleHQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBDbGllbnRIYW5kbGVyOjpoYW5kbGVSZXNwb25zZSgpIik7CiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gCi0gICAgICAgIAorICAgIH0KKwogICAgIHB1YmxpYyB2b2lkIGluaXQoSGFuZGxlckluZm8gY29uZmlnKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gQ2xpZW50SGFuZGxlcjo6aW5pdCgpIik7CiAgICAgICAgIHRyeSB7CkBAIC02MCw5ICs2MCw5IEBACiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIYW5kbGVyIGluaXQgcGFyYW1zID0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcuZ2V0SGFuZGxlckNvbmZpZygpKTsKLSAgICB9IAotICAgCisgICAgfQorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZXNlcnZlci9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZXNlcnZlci9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwKaW5kZXggY2MwMWNhMi4uNGU3NDQ1YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGVzZXJ2ZXIvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlc2VydmVyL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbApAQCAtOTAsNyArOTAsNyBAQAogICAgICAgPC9zZXJ2aWNlLWVuZHBvaW50LWludGVyZmFjZT4KICAgICAgIDxwb3J0LWNvbXBvbmVudC1saW5rPmdvb2dsZXNlcnZlci13ZWIud2FyI0dvb2dsZVNlYXJjaFBvcnQ8L3BvcnQtY29tcG9uZW50LWxpbms+CiAgICAgPC9wb3J0LWNvbXBvbmVudC1yZWY+Ci0gIDwvc2VydmljZS1yZWY+ICAKKyAgPC9zZXJ2aWNlLXJlZj4KIDwhLS0gIDxzZXJ2aWNlLXJlZj4KICAgICA8ZGVzY3JpcHRpb24+cGFydGlhbCB3c2RsIHRlc3QgZ29vZ2xlIHNlcnZpY2UgcmVmPC9kZXNjcmlwdGlvbj4KICAgICA8c2VydmljZS1yZWYtbmFtZT5zZXJ2aWNlL3BhcnRpYWxHZW5lcmF0ZWQ8L3NlcnZpY2UtcmVmLW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZXNlcnZlci9kZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZXNlcnZlci9kZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwKaW5kZXggMjFjZGU3Ni4uYzUzNGQ3OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGVzZXJ2ZXIvZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlc2VydmVyL2Rlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbApAQCAtMzMsNSArMzMsNSBAQAogICAgIDxncm91cC1uYW1lPmVuZzwvZ3JvdXAtbmFtZT4KICAgICA8Z3JvdXAtbmFtZT5tZ3I8L2dyb3VwLW5hbWU+CiAgICAgPGdyb3VwLW5hbWU+Z3Vlc3Q8L2dyb3VwLW5hbWU+Ci0gIDwvc2VjdXJpdHktcm9sZS1tYXBwaW5nPgkKKyAgPC9zZWN1cml0eS1yb2xlLW1hcHBpbmc+CiA8L3N1bi1hcHBsaWNhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlc2VydmVyL2VqYi9Gb29IYW5kbGVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZXNlcnZlci9lamIvRm9vSGFuZGxlci5qYXZhCmluZGV4IGZmYjYxZjUuLmFiZTI3MjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlc2VydmVyL2VqYi9Gb29IYW5kbGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGVzZXJ2ZXIvZWpiL0Zvb0hhbmRsZXIuamF2YQpAQCAtMjcsNyArMjcsNyBAQAogaW1wb3J0IGphdmF4Lm5hbWluZy5Jbml0aWFsQ29udGV4dDsKIAogcHVibGljIGNsYXNzIEZvb0hhbmRsZXIgZXh0ZW5kcyBHZW5lcmljSGFuZGxlciB7Ci0gIAorCiAgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29IYW5kbGVyOjpkZXN0cm95KCkiKTsKICAgICB9CkBAIC00MCwxNyArNDAsMTcgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29IYW5kbGVyOjpoYW5kbGVGYXVsdCgpIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICAgICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBoYW5kbGVSZXF1ZXN0KE1lc3NhZ2VDb250ZXh0IGNvbnRleHQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29IYW5kbGVyOjpoYW5kbGVSZXF1ZXN0KCkiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgICAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGhhbmRsZVJlc3BvbnNlKE1lc3NhZ2VDb250ZXh0IGNvbnRleHQpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29IYW5kbGVyOjpoYW5kbGVSZXNwb25zZSgpIik7CiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gCi0gICAgICAgIAorICAgIH0KKwogICAgIHB1YmxpYyB2b2lkIGluaXQoSGFuZGxlckluZm8gY29uZmlnKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRm9vSGFuZGxlcjo6aW5pdCgpIik7CiAgICAgICAgIHRyeSB7CkBAIC02MCw5ICs2MCw5IEBACiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIYW5kbGVyIGluaXQgcGFyYW1zID0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcuZ2V0SGFuZGxlckNvbmZpZygpKTsKLSAgICB9IAotICAgCisgICAgfQorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZXNlcnZlci9lamIvR29vZ2xlRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZXNlcnZlci9lamIvR29vZ2xlRUpCLmphdmEKaW5kZXggNmI5MzVjYi4uMzE4NmFjZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGVzZXJ2ZXIvZWpiL0dvb2dsZUVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlc2VydmVyL2VqYi9Hb29nbGVFSkIuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogaW1wb3J0IGphdmF4LnhtbC5ycGMuU2VydmljZTsKIGltcG9ydCBqYXZheC54bWwucnBjLkNhbGw7CiBpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7Ci1pbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOyAKK2ltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkJlYW47CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQ7CiBpbXBvcnQgamFrYXJ0YS5lamIuRUpCRXhjZXB0aW9uOwpAQCAtMzMsMjQgKzMzLDI0IEBACiBwdWJsaWMgY2xhc3MgR29vZ2xlRUpCIGltcGxlbWVudHMgU2Vzc2lvbkJlYW4gewogICAgIHByaXZhdGUgU2Vzc2lvbkNvbnRleHQgc2M7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBRTmFtZSBQT1JUX1FOQU1FID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgUU5hbWUgUE9SVF9RTkFNRSA9CiAgICAgICAgIG5ldyBRTmFtZSgidXJuOkdvb2dsZVNlYXJjaCIsICJHb29nbGVTZWFyY2hQb3J0Iik7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgUU5hbWUgT1BFUkFUSU9OX1FOQU1FID0KICAgICAgICAgbmV3IFFOYW1lKCJ1cm46R29vZ2xlU2VhcmNoIiwgImRvU3BlbGxpbmdTdWdnZXN0aW9uIik7Ci0gICAgCisKICAgICBwdWJsaWMgR29vZ2xlRUpCKCl7fQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBHb29nbGVFSkI6OmVqYkNyZWF0ZSAhISIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gR29vZ2xlRUpCOjplamJDcmVhdGUgISEiKTsKICAgICB9CiAKLSAgICBwdWJsaWMgYnl0ZVtdIGRvR2V0Q2FjaGVkUGFnZShqYXZhLmxhbmcuU3RyaW5nIGtleSwgamF2YS5sYW5nLlN0cmluZyB1cmwpIAotICAgIHsgCi0gICAgICAgIHJldHVybiBudWxsOyAKKyAgICBwdWJsaWMgYnl0ZVtdIGRvR2V0Q2FjaGVkUGFnZShqYXZhLmxhbmcuU3RyaW5nIGtleSwgamF2YS5sYW5nLlN0cmluZyB1cmwpCisgICAgeworICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9CiAKLSAgICBwdWJsaWMgU3RyaW5nIGRvU3BlbGxpbmdTdWdnZXN0aW9uKGphdmEubGFuZy5TdHJpbmcga2V5LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEubGFuZy5TdHJpbmcgcGhyYXNlKSAKKyAgICBwdWJsaWMgU3RyaW5nIGRvU3BlbGxpbmdTdWdnZXN0aW9uKGphdmEubGFuZy5TdHJpbmcga2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5sYW5nLlN0cmluZyBwaHJhc2UpCiAgICAgICAgewogCiAgICAgICAgIHRyeSB7CkBAIC03NSw5ICs3NSw5IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJHb29nbGVFSkIuZG9TcGVsbGluZ1N1Z2dlc3Rpb24oKTpVbmV4cGVjdGVkIGV4Y2VwdGlvbiBjYXVnaHQgLSAiLCBleCk7ICAgICAgICAKKyAgICAgICAgICAgIHRocm93IG5ldyBFSkJFeGNlcHRpb24oIkdvb2dsZUVKQi5kb1NwZWxsaW5nU3VnZ2VzdGlvbigpOlVuZXhwZWN0ZWQgZXhjZXB0aW9uIGNhdWdodCAtICIsIGV4KTsKICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGJvb2xlYW4gcmVzdWx0ID0gc2MuaXNDYWxsZXJJblJvbGUoImZvbyIpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKApAQCAtODcsNyArODcsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAgICAgdGhyb3cgbmV3IEVKQkV4Y2VwdGlvbigiR29vZ2xlRUpCLmRvU3BlbGxpbmdTdWdnZXN0aW9uKCk6VW5leHBlY3RlZCBleGNlcHRpb24gY2F1Z2h0IGluIGlzQ2FsbGVySW5Sb2xlKGZvbykgY2FsbCAiLCBleCk7ICAgICAgICAgICAgCisgICAgICAgICAgICB0aHJvdyBuZXcgRUpCRXhjZXB0aW9uKCJHb29nbGVFSkIuZG9TcGVsbGluZ1N1Z2dlc3Rpb24oKTpVbmV4cGVjdGVkIGV4Y2VwdGlvbiBjYXVnaHQgaW4gaXNDYWxsZXJJblJvbGUoZm9vKSBjYWxsICIsIGV4KTsKICAgICAgICAgfQogCiAgICAgICAgIFN0cmluZyByZXR1cm5WYWx1ZSA9ICJzcGVsbGluZyBzdWdnZXN0aW9uIGZyb20gZWpiIjsKQEAgLTk2LDEwICs5NiwxMCBAQAogICAgICAgICAgICAgU2VydmljZSBnZW5lcmljU2VydmljZVdpdGhXU0RMID0gbnVsbDsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgICAgICAgICBTZXJ2aWNlIHNlcnZpY2UgPSAoU2VydmljZSkgCisgICAgICAgICAgICAgICAgU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2UpCiAgICAgICAgICAgICAgICAgICAgIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9zZXJ2aWNlL1dlYkRJSVJlZmVyZW5jZSIpOwogICAgICAgICAgICAgICAgIGRvRHluYW1pY1Byb3h5VGVzdChzZXJ2aWNlKTsKLSAgICAgICAgICAgICAgICBHb29nbGVTZWFyY2hQb3J0IHdlYlBvcnQgPSAoR29vZ2xlU2VhcmNoUG9ydCkgCisgICAgICAgICAgICAgICAgR29vZ2xlU2VhcmNoUG9ydCB3ZWJQb3J0ID0gKEdvb2dsZVNlYXJjaFBvcnQpCiAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UuZ2V0UG9ydChHb29nbGVTZWFyY2hQb3J0LmNsYXNzKTsKICAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHdlYlBvcnQuZG9TcGVsbGluZ1N1Z2dlc3Rpb24oa2V5LCBwaHJhc2UpOwogICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewpAQCAtMTExLDcgKzExMSw3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR29vZ2xlRUpCIHJldHVybmluZyAiICsgcmV0dXJuVmFsdWUpOwogICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiAgICAgfQotICAgICAgICAKKwogICAgIHB1YmxpYyB2b2lkIGhlbGxvT25lV2F5KFN0cmluZyBzMSkgewogCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gR29vZ2xlRUpCOjpoZWxsb09uZVdheS4gcGFyYW0gPSAiICsKQEAgLTEzMSwxNiArMTMxLDE2IEBACiAgICAgcHVibGljIGdvb2dsZXNlcnZlci5Hb29nbGVTZWFyY2hSZXN1bHQgZG9Hb29nbGVTZWFyY2goamF2YS5sYW5nLlN0cmluZyBrZXksIGphdmEubGFuZy5TdHJpbmcgcSwgaW50IHN0YXJ0LCBpbnQgbWF4UmVzdWx0cywgYm9vbGVhbiBmaWx0ZXIsIGphdmEubGFuZy5TdHJpbmcgcmVzdHJpY3QsIGJvb2xlYW4gc2FmZVNlYXJjaCwgamF2YS5sYW5nLlN0cmluZyBsciwgamF2YS5sYW5nLlN0cmluZyBpZSwgamF2YS5sYW5nLlN0cmluZyBvZSkgewogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgewotCQorCiAgICAgICAgIHRoaXMuc2MgPSBzYzsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHt9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHt9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7fQogCiAgICAgcHJpdmF0ZSB2b2lkIGRvRHluYW1pY1Byb3h5VGVzdChTZXJ2aWNlIHNlcnZpY2UpIHRocm93cyBFeGNlcHRpb24gewpAQCAtMTQ4LDE0ICsxNDgsMTQgQEAKICAgICAgICAgQ2FsbCBjMSA9IHNlcnZpY2UuY3JlYXRlQ2FsbCgpOwogICAgICAgICBDYWxsIGMyID0gc2VydmljZS5jcmVhdGVDYWxsKFBPUlRfUU5BTUUpOwogICAgICAgICBDYWxsIGMzID0gc2VydmljZS5jcmVhdGVDYWxsKFBPUlRfUU5BTUUsIE9QRVJBVElPTl9RTkFNRSk7Ci0gICAgICAgIENhbGwgYzQgPSBzZXJ2aWNlLmNyZWF0ZUNhbGwoUE9SVF9RTkFNRSwgCisgICAgICAgIENhbGwgYzQgPSBzZXJ2aWNlLmNyZWF0ZUNhbGwoUE9SVF9RTkFNRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPUEVSQVRJT05fUU5BTUUuZ2V0TG9jYWxQYXJ0KCkpOwogICAgICAgICBDYWxsW10gY2FsbHMgPSBzZXJ2aWNlLmdldENhbGxzKFBPUlRfUU5BTUUpOwogCiAgICAgICAgIC8vIGNvbnRhaW5lci1tYW5hZ2VkIHBvcnQgc2VsZWN0aW9uCi0gICAgICAgIEdvb2dsZVNlYXJjaFBvcnQgc2VpID0gKEdvb2dsZVNlYXJjaFBvcnQpIAorICAgICAgICBHb29nbGVTZWFyY2hQb3J0IHNlaSA9IChHb29nbGVTZWFyY2hQb3J0KQogICAgICAgICAgICAgc2VydmljZS5nZXRQb3J0KEdvb2dsZVNlYXJjaFBvcnQuY2xhc3MpOwotICAgICAgICBzZWkgPSAoR29vZ2xlU2VhcmNoUG9ydCkgCisgICAgICAgIHNlaSA9IChHb29nbGVTZWFyY2hQb3J0KQogICAgICAgICAgICAgc2VydmljZS5nZXRQb3J0KFBPUlRfUU5BTUUsIEdvb2dsZVNlYXJjaFBvcnQuY2xhc3MpOwogCiAgICAgICAgIFFOYW1lIHNlcnZpY2VOYW1lID0gc2VydmljZS5nZXRTZXJ2aWNlTmFtZSgpOwpAQCAtMTY0LDcgKzE2NCw3IEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIndzZGxMb2NhdGlvbiA9ICIgKyB3c2RsTG9jYXRpb24pOwogICAgICAgICB9CiAgICAgICAgIEl0ZXJhdG9yIHBvcnRzID0gc2VydmljZS5nZXRQb3J0cygpOwotICAgICAgICAKKwogICAgIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZXNlcnZlci9zdGFuZGFsb25lL1N0YW5kQWxvbmVDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlc2VydmVyL3N0YW5kYWxvbmUvU3RhbmRBbG9uZUNsaWVudC5qYXZhCmluZGV4IDA4ZjI3ZmIuLjIwYzg2NmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlc2VydmVyL3N0YW5kYWxvbmUvU3RhbmRBbG9uZUNsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlc2VydmVyL3N0YW5kYWxvbmUvU3RhbmRBbG9uZUNsaWVudC5qYXZhCkBAIC0yNCw3ICsyNCw3IEBACiAKIHB1YmxpYyBjbGFzcyBTdGFuZEFsb25lQ2xpZW50IHsKIAotICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0gCisgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKICAgICBwcml2YXRlIFN0cmluZyB3b3JkOwpAQCAtMzIsMTIgKzMyLDEyIEBACiAgICAgcHJpdmF0ZSBTdHJpbmcgZ29vZ2xlS2V5OwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKLSAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigiZ29vZ2xlc2VydmVyIHN0YW5kYWxvbmUiKTsJCisgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oImdvb2dsZXNlcnZlciBzdGFuZGFsb25lIik7CiAgICAgICAgIFN0YW5kQWxvbmVDbGllbnQgY2xpZW50ID0gbmV3IFN0YW5kQWxvbmVDbGllbnQoYXJncyk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoImdvb2dsZXNlcnZlci1zdGFuZGFsb25lSUQiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RhbmRBbG9uZUNsaWVudChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHdvcmQgPSAoYXJncy5sZW5ndGggPiAwKSA/ICJzcGVsbG5nIiA6IGFyZ3NbMF07CiAgICAgICAgIHRhcmdldEVuZHBvaW50QWRkcmVzcyA9IChhcmdzLmxlbmd0aCA+IDEpID8KQEAgLTQ3LDExICs0NywxMSBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAJdHJ5IHsKLSAgICAgICAgICAgIEdvb2dsZVNlYXJjaFNlcnZpY2UgZ29vZ2xlU2VhcmNoU2VydmljZSA9IAorICAgICAgICB0cnkgeworICAgICAgICAgICAgR29vZ2xlU2VhcmNoU2VydmljZSBnb29nbGVTZWFyY2hTZXJ2aWNlID0KICAgICAgICAgICAgICAgICBuZXcgR29vZ2xlU2VhcmNoU2VydmljZV9JbXBsKCk7CiAKLSAgICAgICAgICAgIEdvb2dsZVNlYXJjaFBvcnQgZ29vZ2xlU2VhcmNoUG9ydCA9IAorICAgICAgICAgICAgR29vZ2xlU2VhcmNoUG9ydCBnb29nbGVTZWFyY2hQb3J0ID0KICAgICAgICAgICAgICAgICBnb29nbGVTZWFyY2hTZXJ2aWNlLmdldEdvb2dsZVNlYXJjaFBvcnQoKTsKIAogICAgICAgICAgICAgKChTdHViKWdvb2dsZVNlYXJjaFBvcnQpLl9zZXRQcm9wZXJ0eQpAQCAtNzIsMTUgKzcyLDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlbGxpbmdTdWdnZXN0aW9uICsgIiciKTsKIAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImFwcGNsaWVudCBtYWluIiwgc3RhdC5QQVNTKTsKLSAgICAgICAgICAgICAgICAKLSAgICAJfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImdvb2dsZSBjbGllbnQgdGVzdCBmYWlsZWQiKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoImFwcGNsaWVudCBtYWluIiAsIHN0YXQuRkFJTCk7CiAKLQl9IAorICAgIH0KIAogICAgIH0KLSAgICAgICAgCisKIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGVzZXJ2ZXIvd2ViL0Zvb0hhbmRsZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlc2VydmVyL3dlYi9Gb29IYW5kbGVyLmphdmEKaW5kZXggN2E1MTUwNy4uY2JlNTNmZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGVzZXJ2ZXIvd2ViL0Zvb0hhbmRsZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZXNlcnZlci93ZWIvRm9vSGFuZGxlci5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiBpbXBvcnQgamF2YXgubmFtaW5nLkluaXRpYWxDb250ZXh0OwogCiBwdWJsaWMgY2xhc3MgRm9vSGFuZGxlciBleHRlbmRzIEdlbmVyaWNIYW5kbGVyIHsKLSAgCisKICAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb0hhbmRsZXI6OmRlc3Ryb3koKSIpOwogICAgIH0KQEAgLTQwLDE3ICs0MCwxNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb0hhbmRsZXI6OmhhbmRsZUZhdWx0KCkiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgICAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGhhbmRsZVJlcXVlc3QoTWVzc2FnZUNvbnRleHQgY29udGV4dCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb0hhbmRsZXI6OmhhbmRsZVJlcXVlc3QoKSIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gaGFuZGxlUmVzcG9uc2UoTWVzc2FnZUNvbnRleHQgY29udGV4dCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZvb0hhbmRsZXI6OmhhbmRsZVJlc3BvbnNlKCkiKTsKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSAKLSAgICAgICAgCisgICAgfQorCiAgICAgcHVibGljIHZvaWQgaW5pdChIYW5kbGVySW5mbyBjb25maWcpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBGb29IYW5kbGVyOjppbml0KCkiKTsKICAgICAgICAgdHJ5IHsKQEAgLTYwLDkgKzYwLDkgQEAKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhhbmRsZXIgaW5pdCBwYXJhbXMgPSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5nZXRIYW5kbGVyQ29uZmlnKCkpOwotICAgIH0gCi0gICAKKyAgICB9CisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlc2VydmVyL3dlYi9Hb29nbGVTZXJ2bGV0SW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGVzZXJ2ZXIvd2ViL0dvb2dsZVNlcnZsZXRJbXBsLmphdmEKaW5kZXggOTE2ZjUyZS4uYjQxYzIwMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGVzZXJ2ZXIvd2ViL0dvb2dsZVNlcnZsZXRJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGVzZXJ2ZXIvd2ViL0dvb2dsZVNlcnZsZXRJbXBsLmphdmEKQEAgLTIyLDcgKzIyLDcgQEAKIGltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwogaW1wb3J0IGphdmF4LnhtbC5ycGMuQ2FsbDsKIGltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKLWltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247IAoraW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBqYXZheC5uYW1pbmcuKjsKIGltcG9ydCBqYXZheC54bWwucnBjLlNlcnZpY2U7CiBpbXBvcnQgamF2YXgueG1sLnJwYy5zZXJ2ZXIuU2VydmljZUxpZmVjeWNsZTsKQEAgLTMwLDExICszMCwxMSBAQAogCiBwdWJsaWMgY2xhc3MgR29vZ2xlU2VydmxldEltcGwgaW1wbGVtZW50cyBqYWthcnRhLnNlcnZsZXQuU2luZ2xlVGhyZWFkTW9kZWwsIFNlcnZpY2VMaWZlY3ljbGUgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgUU5hbWUgUE9SVF9RTkFNRSA9IAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFFOYW1lIFBPUlRfUU5BTUUgPQogICAgICAgICBuZXcgUU5hbWUoInVybjpHb29nbGVTZWFyY2giLCAiR29vZ2xlU2VhcmNoUG9ydCIpOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFFOYW1lIE9QRVJBVElPTl9RTkFNRSA9CiAgICAgICAgIG5ldyBRTmFtZSgidXJuOkdvb2dsZVNlYXJjaCIsICJkb1NwZWxsaW5nU3VnZ2VzdGlvbiIpOwotICAgIAorCiAgICAgcHJpdmF0ZSBib29sZWFuIGdvdEluaXQgPSBmYWxzZTsKIAogICAgIHB1YmxpYyBHb29nbGVTZXJ2bGV0SW1wbCgpIHsKQEAgLTUwLDkgKzUwLDkgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgU2VydmljZUxpZmVjeWNsZTo6ZGVzdHJveSBjYWxsIik7CiAgICAgfQogCi0gICAgcHVibGljIGJ5dGVbXSBkb0dldENhY2hlZFBhZ2UoamF2YS5sYW5nLlN0cmluZyBrZXksIGphdmEubGFuZy5TdHJpbmcgdXJsKSAKLSAgICB7IAotICAgICAgICByZXR1cm4gbnVsbDsgCisgICAgcHVibGljIGJ5dGVbXSBkb0dldENhY2hlZFBhZ2UoamF2YS5sYW5nLlN0cmluZyBrZXksIGphdmEubGFuZy5TdHJpbmcgdXJsKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgaGVsbG9PbmVXYXkoU3RyaW5nIHMxKSB7CkBAIC03MSw4ICs3MSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRGF0ZSgpKTsKICAgICB9CiAKLSAgICBwdWJsaWMgU3RyaW5nIGRvU3BlbGxpbmdTdWdnZXN0aW9uKGphdmEubGFuZy5TdHJpbmcga2V5LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEubGFuZy5TdHJpbmcgcGhyYXNlKSAKKyAgICBwdWJsaWMgU3RyaW5nIGRvU3BlbGxpbmdTdWdnZXN0aW9uKGphdmEubGFuZy5TdHJpbmcga2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YS5sYW5nLlN0cmluZyBwaHJhc2UpCiAKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiR29vZ2xlU2VydmxldEltcGwuZG9TcGVsbGluZ1N1Z2dlc3Rpb24oKSAiICsKQEAgLTg4LDIyICs4OCwyMiBAQAogICAgICAgICAgICAgU2VydmljZSBnZW5lcmljU2VydmljZVdpdGhXU0RMID0gbnVsbDsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgSW5pdGlhbENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgICAgICAgICBTZXJ2aWNlIHNlcnZpY2UgPSAoU2VydmljZSkgCisgICAgICAgICAgICAgICAgU2VydmljZSBzZXJ2aWNlID0gKFNlcnZpY2UpCiAgICAgICAgICAgICAgICAgICAgIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9zZXJ2aWNlL0VqYkRJSVJlZmVyZW5jZSIpOwogICAgICAgICAgICAgICAgIGRvRHluYW1pY1Byb3h5VGVzdChzZXJ2aWNlKTsKLSAgICAgICAgICAgICAgICBHb29nbGVTZWFyY2hQb3J0IGVqYlBvcnQgPSAoR29vZ2xlU2VhcmNoUG9ydCkgCisgICAgICAgICAgICAgICAgR29vZ2xlU2VhcmNoUG9ydCBlamJQb3J0ID0gKEdvb2dsZVNlYXJjaFBvcnQpCiAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UuZ2V0UG9ydChHb29nbGVTZWFyY2hQb3J0LmNsYXNzKTsKICAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IGVqYlBvcnQuZG9TcGVsbGluZ1N1Z2dlc3Rpb24oa2V5LCBwaHJhc2UpOwogICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlbW90ZUV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSwgZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gICAgICAgICAgICAgICAKLSAgICAgICAgCisgICAgICAgIH0KKwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdvb2dsZVNlcnZsZXRJbXBsIHJldHVybmluZyAiICsgcmV0dXJuVmFsdWUpOwogICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiAgICAgfQotICAgICAgICAKKwogICAgIHB1YmxpYyBHb29nbGVTZWFyY2hSZXN1bHQgZG9Hb29nbGVTZWFyY2goamF2YS5sYW5nLlN0cmluZyBrZXksIGphdmEubGFuZy5TdHJpbmcgcSwgaW50IHN0YXJ0LCBpbnQgbWF4UmVzdWx0cywgYm9vbGVhbiBmaWx0ZXIsIGphdmEubGFuZy5TdHJpbmcgcmVzdHJpY3QsIGJvb2xlYW4gc2FmZVNlYXJjaCwgamF2YS5sYW5nLlN0cmluZyBsciwgamF2YS5sYW5nLlN0cmluZyBpZSwgamF2YS5sYW5nLlN0cmluZyBvZSkgewogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9CkBAIC0xMTMsMTQgKzExMywxNCBAQAogICAgICAgICBDYWxsIGMxID0gc2VydmljZS5jcmVhdGVDYWxsKCk7CiAgICAgICAgIENhbGwgYzIgPSBzZXJ2aWNlLmNyZWF0ZUNhbGwoUE9SVF9RTkFNRSk7CiAgICAgICAgIENhbGwgYzMgPSBzZXJ2aWNlLmNyZWF0ZUNhbGwoUE9SVF9RTkFNRSwgT1BFUkFUSU9OX1FOQU1FKTsKLSAgICAgICAgQ2FsbCBjNCA9IHNlcnZpY2UuY3JlYXRlQ2FsbChQT1JUX1FOQU1FLCAKKyAgICAgICAgQ2FsbCBjNCA9IHNlcnZpY2UuY3JlYXRlQ2FsbChQT1JUX1FOQU1FLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9QRVJBVElPTl9RTkFNRS5nZXRMb2NhbFBhcnQoKSk7CiAgICAgICAgIENhbGxbXSBjYWxscyA9IHNlcnZpY2UuZ2V0Q2FsbHMoUE9SVF9RTkFNRSk7CiAKICAgICAgICAgLy8gY29udGFpbmVyLW1hbmFnZWQgcG9ydCBzZWxlY3Rpb24KLSAgICAgICAgR29vZ2xlU2VhcmNoUG9ydCBzZWkgPSAoR29vZ2xlU2VhcmNoUG9ydCkgCisgICAgICAgIEdvb2dsZVNlYXJjaFBvcnQgc2VpID0gKEdvb2dsZVNlYXJjaFBvcnQpCiAgICAgICAgICAgICBzZXJ2aWNlLmdldFBvcnQoR29vZ2xlU2VhcmNoUG9ydC5jbGFzcyk7Ci0gICAgICAgIHNlaSA9IChHb29nbGVTZWFyY2hQb3J0KSAKKyAgICAgICAgc2VpID0gKEdvb2dsZVNlYXJjaFBvcnQpCiAgICAgICAgICAgICBzZXJ2aWNlLmdldFBvcnQoUE9SVF9RTkFNRSwgR29vZ2xlU2VhcmNoUG9ydC5jbGFzcyk7CiAKICAgICAgICAgUU5hbWUgc2VydmljZU5hbWUgPSBzZXJ2aWNlLmdldFNlcnZpY2VOYW1lKCk7CkBAIC0xMjksNyArMTI5LDcgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigid3NkbExvY2F0aW9uID0gIiArIHdzZGxMb2NhdGlvbik7CiAgICAgICAgIH0KICAgICAgICAgSXRlcmF0b3IgcG9ydHMgPSBzZXJ2aWNlLmdldFBvcnRzKCk7Ci0gICAgICAgIAorCiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZXNlcnZlci93c2NvbXBpbGVfY29uZmlnX2FwcGNsaWVudC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZXNlcnZlci93c2NvbXBpbGVfY29uZmlnX2FwcGNsaWVudC54bWwKaW5kZXggNWZmZGViOS4uNTYzNGMxNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGVzZXJ2ZXIvd3Njb21waWxlX2NvbmZpZ19hcHBjbGllbnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlc2VydmVyL3dzY29tcGlsZV9jb25maWdfYXBwY2xpZW50LnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8Y29uZmlndXJhdGlvbgogICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4LXJwYy9yaS9jb25maWciPgotICA8d3NkbCAKKyAgPHdzZGwKICAgICAgIGxvY2F0aW9uPSJHb29nbGVTZWFyY2gud3NkbCIKICAgICAgIHBhY2thZ2VOYW1lPSJnb29nbGVjbGllbnQiLz4KIDwvY29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlc2VydmVyL3dzY29tcGlsZV9jb25maWdfZWpiLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlc2VydmVyL3dzY29tcGlsZV9jb25maWdfZWpiLnhtbAppbmRleCBjYzdhODM4Li5mMWE4MTE2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZXNlcnZlci93c2NvbXBpbGVfY29uZmlnX2VqYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGVzZXJ2ZXIvd3Njb21waWxlX2NvbmZpZ19lamIueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxjb25maWd1cmF0aW9uCiAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+Ci0gIDx3c2RsIAorICA8d3NkbAogICAgICAgbG9jYXRpb249Ikdvb2dsZVNlYXJjaC53c2RsIgogICAgICAgcGFja2FnZU5hbWU9Imdvb2dsZXNlcnZlciIvPgogPC9jb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGVzZXJ2ZXIvd3Njb21waWxlX2NvbmZpZ19zdGFuZGFsb25lLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlc2VydmVyL3dzY29tcGlsZV9jb25maWdfc3RhbmRhbG9uZS54bWwKaW5kZXggZDljY2ZlNi4uOTlhZDkxYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGVzZXJ2ZXIvd3Njb21waWxlX2NvbmZpZ19zdGFuZGFsb25lLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZXNlcnZlci93c2NvbXBpbGVfY29uZmlnX3N0YW5kYWxvbmUueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxjb25maWd1cmF0aW9uCiAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+Ci0gIDx3c2RsIAorICA8d3NkbAogICAgICAgbG9jYXRpb249Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9Hb29nbGVTZXJ2bGV0L0dvb2dsZVNlYXJjaD9XU0RMIgogICAgICAgcGFja2FnZU5hbWU9InN0YW5kYWxvbmUiLz4KIDwvY29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlc2VydmVyL3dzY29tcGlsZV9jb25maWdfd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvZ29vZ2xlc2VydmVyL3dzY29tcGlsZV9jb25maWdfd2ViLnhtbAppbmRleCBkZDZlNzY2Li5kYjBjYTc3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2dvb2dsZXNlcnZlci93c2NvbXBpbGVfY29uZmlnX3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9nb29nbGVzZXJ2ZXIvd3Njb21waWxlX2NvbmZpZ193ZWIueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxjb25maWd1cmF0aW9uCiAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+Ci0gIDx3c2RsIAorICA8d3NkbAogICAgICAgbG9jYXRpb249Ikdvb2dsZVNlYXJjaC53c2RsIgogICAgICAgcGFja2FnZU5hbWU9Imdvb2dsZXNlcnZlcndlYiIvPgogPC9jb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9oYW5kbGVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2hhbmRsZXIvYnVpbGQucHJvcGVydGllcwppbmRleCA1NGJkODUwLi5mOTUyMGRjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2hhbmRsZXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2hhbmRsZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjYgKzE1LDI2IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzaW1wbGVoYW5kbGVyIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImVqYmphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgIAorPHByb3BlcnR5IG5hbWU9ImVqYmphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWJzZXJ2aWNlcy54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYnNlcnZpY2VzLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHBDbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9oYW5kbGVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvaGFuZGxlci9idWlsZC54bWwKaW5kZXggZWYwNWRkNS4uYWY3OThhOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9oYW5kbGVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2hhbmRsZXIvYnVpbGQueG1sCkBAIC0zMCw5ICszMCw5IEBACiAgICAgJnRlc3Rwcm9wZXJ0aWVzOwogCiAgIDx0YXJnZXQgbmFtZT0icnVuLndzY29tcGlsZSI+Ci0JPGV4ZWMgZXhlY3V0YWJsZT0iJHtXU0NPTVBJTEV9IiBmYWlsb25lcnJvcj0idHJ1ZSIgPgotICAgICAgICA8YXJnIGxpbmU9Ii1zb3VyY2UgMS4xLjIgJHt3c2NvbXBpbGUuY29tbWFuZH0iIC8+ICAgICAgICAKLQk8L2V4ZWM+CisgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtXU0NPTVBJTEV9IiBmYWlsb25lcnJvcj0idHJ1ZSIgPgorICAgICAgICA8YXJnIGxpbmU9Ii1zb3VyY2UgMS4xLjIgJHt3c2NvbXBpbGUuY29tbWFuZH0iIC8+CisgICAgPC9leGVjPgogICA8L3RhcmdldD4KIAogPCEtLSBOT1RFLiB0aGUgc2ltcGxlIG1hcHBpbmcgdGVzdCBhbmQgZnVsbCBtYXBwaW5nIHRlc3QgY2FuCkBAIC00OSw0NSArNDksNDUgQEAKICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KICAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgotICAKKwogICA8dGFyZ2V0IG5hbWU9Imdlbi1lamItd3NkbCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3dzZGwiLz4gCisgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvd3NkbCIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLndzY29tcGlsZSI+Ci0gICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiIAotICAgdmFsdWU9Ii1kZWZpbmUgLW1hcHBpbmcgJHtidWlsZC5jbGFzc2VzLmRpcn0vU2ltcGxlSGFuZGxlck1hcHBpbmdfZWpiLnhtbCAtY3AgJHtidWlsZC5jbGFzc2VzLmRpcn0gLWtlZXAgLWQgJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvd3NkbCBjb25maWctaW50ZXJmYWNlLnhtbCIvPiAKKyAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIKKyAgIHZhbHVlPSItZGVmaW5lIC1tYXBwaW5nICR7YnVpbGQuY2xhc3Nlcy5kaXJ9L1NpbXBsZUhhbmRsZXJNYXBwaW5nX2VqYi54bWwgLWNwICR7YnVpbGQuY2xhc3Nlcy5kaXJ9IC1rZWVwIC1kICR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3dzZGwgY29uZmlnLWludGVyZmFjZS54bWwiLz4KICAgICA8L2FudGNhbGw+Ci0gIDwvdGFyZ2V0PiAgICAKLSAgIAorICA8L3RhcmdldD4KKwogICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlLWVqYiIgZGVwZW5kcz0iaW5pdC1jb21tb24sIGNvbXBpbGUsIGdlbi1lamItd3NkbCI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJlamItamFyLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgdmFsdWU9IlNpbXBsZUhhbmRsZXJNYXBwaW5nX2VqYi54bWwsTUVUQS1JTkYvd3NkbC8qKixlamIvKi5jbGFzcyIvPgogICAgIDwvYW50Y2FsbD4KICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAgCisKICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZSIgZGVwZW5kcz0iYXNzZW1ibGUtZWpiLCBhc3NlbWJsZS1jbGllbnQiLz4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZS1jbGllbnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNsaWVudCIvPgotICAgIDwvYW50Y2FsbD4gICAgCisgICAgPC9hbnRjYWxsPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZ2VuLWVqYi13c2RsIi8+CiAgICAgPHVuamFyIHNyYz0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgIGRlc3Q9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJhcHBjbGllbnQtamFyLWNvbW1vbiI+Ci0gICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgIHZhbHVlPSJTaW1wbGVIYW5kbGVyTWFwcGluZ19lamIueG1sLE1FVEEtSU5GL3dzZGwvKiosc2ltcGxlaGFuZGxlci8qKixlamIvU2ltcGxlU2VydmVyLmNsYXNzLGNvbS8qKiIgLz4KLSAgICA8L2FudGNhbGw+ICAKKyAgICA8L2FudGNhbGw+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY2xpZW50LWNvbW1vbiIvPgogICAgIDxtb3ZlIGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudENsaWVudC5qYXIiIHRvRmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHBDbGllbnQuamFyIi8+CiAgIDwvdGFyZ2V0PgotICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiI+CiAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIiB2YWx1ZT0iaHR0cDovLyR7aHR0cC5ob3N0fToke2h0dHAucG9ydH0vc2ltcGxlaGFuZGxlciIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+ICAKKyAgICA8L3RhcmdldD4KIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktamFyLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtOTUsMTAgKzk1LDEwIEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1qYXItY29tbW9uIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY2xpZW50LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgCi0gICAgCisgICAgPC90YXJnZXQ+CisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvaGFuZGxlci9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2hhbmRsZXIvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGZiMDBmODguLmY4MjAxYTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvaGFuZGxlci9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9oYW5kbGVyL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzAsMjggKzMwLDI4IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIndlYnNlcnZpY2VzLXNpbXBsZS1zb2FwZmF1bHQiKTsKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoIndlYnNlcnZpY2VzLXNvYXBmYXVsdElEIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKLSAgICAJdHJ5IHsKLSAgICAgICAgICAgIAorICAgICAgICB0cnkgeworCiAgICAgICAgICAgICBTdHJpbmcgdGFyZ2V0RW5kcG9pbnRBZGRyZXNzID0gYXJnc1swXTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU2VydmljZSB0ZXN0U2VydmljZSA9IChTZXJ2aWNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvc2VydmljZS9zaW1wbGVoYW5kbGVyIik7CiAgICAgICAgICAgICBTaW1wbGVTZXJ2ZXIgdGVzdCA9IChTaW1wbGVTZXJ2ZXIpCiAgICAgICAgICAgICB0ZXN0U2VydmljZS5nZXRQb3J0KFNpbXBsZVNlcnZlci5jbGFzcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgKChTdHViKXRlc3QpLl9zZXRQcm9wZXJ0eShTdHViLkVORFBPSU5UX0FERFJFU1NfUFJPUEVSVFksCiAgICAgICAgICAgICAgICAgICAgIHRhcmdldEVuZHBvaW50QWRkcmVzcyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJlbmRwb2ludCBhZGRyZXNzID0gIiArIHRhcmdldEVuZHBvaW50QWRkcmVzcyk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkludm9jYXRpb24gcmV0dXJuZWQgIiArIHRlc3Quc2F5SGVsbG8oImplcm9tZSIpKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2hhbmRsZXIvY29uZmlnLWludGVyZmFjZS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2hhbmRsZXIvY29uZmlnLWludGVyZmFjZS54bWwKaW5kZXggMzA1NDk0OS4uZDdkYmEyMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9oYW5kbGVyL2NvbmZpZy1pbnRlcmZhY2UueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvaGFuZGxlci9jb25maWctaW50ZXJmYWNlLnhtbApAQCAtMTksMTEgKzE5LDExIEBACiAKIDxjb25maWd1cmF0aW9uCiAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+Ci0gIDxzZXJ2aWNlIAotICAgICAgbmFtZT0iU2ltcGxlSGFuZGxlclNlcnZlciIgCi0gICAgICB0YXJnZXROYW1lc3BhY2U9InVybjpIYW5kbGVyVGVzdCIgCi0gICAgICB0eXBlTmFtZXNwYWNlPSJ1cm46SGFuZGxlclRlc3QiIAorICA8c2VydmljZQorICAgICAgbmFtZT0iU2ltcGxlSGFuZGxlclNlcnZlciIKKyAgICAgIHRhcmdldE5hbWVzcGFjZT0idXJuOkhhbmRsZXJUZXN0IgorICAgICAgdHlwZU5hbWVzcGFjZT0idXJuOkhhbmRsZXJUZXN0IgogICAgICAgcGFja2FnZU5hbWU9ImhhbmRsZXJ0ZXN0Ij4KICAgICAgIDxpbnRlcmZhY2UgbmFtZT0iZWpiLlNpbXBsZVNlcnZlciIvPgogICA8L3NlcnZpY2U+Ci08L2NvbmZpZ3VyYXRpb24+IAorPC9jb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9oYW5kbGVyL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvaGFuZGxlci9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwKaW5kZXggOGU1MDI5ZC4uY2I3ZmJlMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9oYW5kbGVyL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2hhbmRsZXIvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sCkBAIC0yNCwxMSArMjQsMTEgQEAKICAgICA8ZGVzY3JpcHRpb24+c2ltcGxlIGhhbmRsZXIgc2VydmljZSByZWY8L2Rlc2NyaXB0aW9uPgogICAgIDxzZXJ2aWNlLXJlZi1uYW1lPnNlcnZpY2Uvc2ltcGxlaGFuZGxlcjwvc2VydmljZS1yZWYtbmFtZT4KICAgICA8c2VydmljZS1pbnRlcmZhY2U+amF2YXgueG1sLnJwYy5TZXJ2aWNlPC9zZXJ2aWNlLWludGVyZmFjZT4KLSAgICA8d3NkbC1maWxlPk1FVEEtSU5GL3dzZGwvU2ltcGxlSGFuZGxlclNlcnZlci53c2RsPC93c2RsLWZpbGU+ICAgIAorICAgIDx3c2RsLWZpbGU+TUVUQS1JTkYvd3NkbC9TaW1wbGVIYW5kbGVyU2VydmVyLndzZGw8L3dzZGwtZmlsZT4KICAgICA8amF4cnBjLW1hcHBpbmctZmlsZT5TaW1wbGVIYW5kbGVyTWFwcGluZ19lamIueG1sPC9qYXhycGMtbWFwcGluZy1maWxlPgotICAgIDxzZXJ2aWNlLXFuYW1lIHhtbG5zOnNlcnZpY2Vucz0idXJuOkhhbmRsZXJUZXN0Ij5zZXJ2aWNlbnM6U2ltcGxlSGFuZGxlclNlcnZlcjwvc2VydmljZS1xbmFtZT4gICAgICAgICAgICAgICAKKyAgICA8c2VydmljZS1xbmFtZSB4bWxuczpzZXJ2aWNlbnM9InVybjpIYW5kbGVyVGVzdCI+c2VydmljZW5zOlNpbXBsZUhhbmRsZXJTZXJ2ZXI8L3NlcnZpY2UtcW5hbWU+CiAgICAgPHBvcnQtY29tcG9uZW50LXJlZj4KICAgICAgIDxzZXJ2aWNlLWVuZHBvaW50LWludGVyZmFjZT5lamIuU2ltcGxlU2VydmVyPC9zZXJ2aWNlLWVuZHBvaW50LWludGVyZmFjZT4KLSAgICA8L3BvcnQtY29tcG9uZW50LXJlZj4gICAgICAgICAgCisgICAgPC9wb3J0LWNvbXBvbmVudC1yZWY+CiAgIDwvc2VydmljZS1yZWY+CiA8L2FwcGxpY2F0aW9uLWNsaWVudD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvaGFuZGxlci9lamIvU2ltcGxlSGFuZGxlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9oYW5kbGVyL2VqYi9TaW1wbGVIYW5kbGVyLmphdmEKaW5kZXggNzRkZDcxMS4uZDJhYzM1YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9oYW5kbGVyL2VqYi9TaW1wbGVIYW5kbGVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9oYW5kbGVyL2VqYi9TaW1wbGVIYW5kbGVyLmphdmEKQEAgLTIxLDEzICsyMSwxMyBAQAogaW1wb3J0IGphdmF4LnhtbC5ycGMuaGFuZGxlci4qOwogCiBwdWJsaWMgY2xhc3MgU2ltcGxlSGFuZGxlciBleHRlbmRzIEdlbmVyaWNIYW5kbGVyIHsKLSAgICAKKwogICAgIHByb3RlY3RlZCBIYW5kbGVySW5mbyBpbmZvID0gbnVsbDsKLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoSGFuZGxlckluZm8gaW5mbykgewogICAgICAgICB0aGlzLmluZm8gPSBpbmZvOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGhhbmRsZVJlcXVlc3QoTWVzc2FnZUNvbnRleHQgY29udGV4dCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgRGF0ZSBzdGFydFRpbWUgPSBuZXcgRGF0ZSgpOwpAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGhhbmRsZVJlc3BvbnNlKE1lc3NhZ2VDb250ZXh0IGNvbnRleHQpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIERhdGUgc3RhcnRUaW1lID0gKERhdGUpIGNvbnRleHQuZ2V0UHJvcGVydHkoInN0YXJ0VGltZSIpOwpAQCAtNDksNyArNDksNyBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBRTmFtZVtdIGdldEhlYWRlcnMoKSB7CiAgICAgICAgIHJldHVybiBuZXcgUU5hbWVbMF07CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9oYW5kbGVyL2VqYi9TaW1wbGVTZXJ2ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvaGFuZGxlci9lamIvU2ltcGxlU2VydmVyLmphdmEKaW5kZXggYjc4ZmE2Mi4uNjUzZDQ0YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9oYW5kbGVyL2VqYi9TaW1wbGVTZXJ2ZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2hhbmRsZXIvZWpiL1NpbXBsZVNlcnZlci5qYXZhCkBAIC0xOSw3ICsxOSw3IEBACiBpbXBvcnQgamF2YS5ybWkuKjsKIAogcHVibGljIGludGVyZmFjZSBTaW1wbGVTZXJ2ZXIgZXh0ZW5kcyBSZW1vdGUgewotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgc291cmNlKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2hhbmRsZXIvZWpiL1NpbXBsZVNlcnZlckltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvaGFuZGxlci9lamIvU2ltcGxlU2VydmVySW1wbC5qYXZhCmluZGV4IGIzNGNlNTEuLjk3ZWQyYzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvaGFuZGxlci9lamIvU2ltcGxlU2VydmVySW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvaGFuZGxlci9lamIvU2ltcGxlU2VydmVySW1wbC5qYXZhCkBAIC0yMiwyMyArMjIsMjMgQEAKIAogcHVibGljIGNsYXNzIFNpbXBsZVNlcnZlckltcGwgaW1wbGVtZW50cyBTZXNzaW9uQmVhbiB7CiAgICAgU2Vzc2lvbkNvbnRleHQgc2M7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyBoZWxsbykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiAic2FsdXQgIiArIGhlbGxvOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2ltcGxlU2VydmVyOjo6ZWpiQ3JlYXRlICEhIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW1wbGVTZXJ2ZXI6OjplamJDcmVhdGUgISEiKTsKICAgICB9Ci0gICAgCisKICAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgc2MpIHsKLQkKKwogICAgICAgICB0aGlzLnNjID0gc2M7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7fQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7fQotICAgIAotICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHt9ICAgCisKKyAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7fQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYXhycGMtaGVsbG8tZWpiL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2pheHJwYy1oZWxsby1lamIvYnVpbGQucHJvcGVydGllcwppbmRleCA0ZjljYzRjLi44M2ViNzEzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2pheHJwYy1oZWxsby1lamIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2pheHJwYy1oZWxsby1lamIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsNyArMTUsNyBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iamF4cnBjLWhlbGxvLWVqYiIvPgogPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4KQEAgLTMwLDExICszMCwxMSBAQAogPHByb3BlcnR5IG5hbWU9IndlYnNlcnZpY2VzLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2Vic2VydmljZXMueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIgotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIgotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHBDbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYXhycGMtaGVsbG8tZWpiL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamF4cnBjLWhlbGxvLWVqYi9idWlsZC54bWwKaW5kZXggYzBjOGMyNy4uYTViZTZlZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYXhycGMtaGVsbG8tZWpiL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2pheHJwYy1oZWxsby1lamIvYnVpbGQueG1sCkBAIC01Niw4ICs1Niw4IEBACiAgICAgIDxkZWxldGUgZmlsZT0iJHthc3NlbWJsZS5lYXJ9LyR7ZWpiamFyLmZpbGV9IiAvPgogICAgICA8ZGVsZXRlIGRpcj0iJHthc3NlbWJsZS5lYXJ9L01FVEEtSU5GIiAvPgogICAgICA8Y29weSB0b2Rpcj0iJHthc3NlbWJsZS5lYXJ9Ij4KLSAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZH0vIiAKLSAgICAgICAgICAgICAgICAgIGluY2x1ZGVzPSIqKi8qLmNsYXNzIiAKKyAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZH0vIgorICAgICAgICAgICAgICAgICAgaW5jbHVkZXM9IioqLyouY2xhc3MiCiAgICAgICAgICAgICAgICAgICBleGNsdWRlcz0iKiovKkNsaWVudC5jbGFzcywgKiovKi53c2RsLCAqKi8qbWFwcGluZy54bWwiLz4KICAgICAgPC9jb3B5PgogICAgICA8Y29weSBmaWxlPSIke2J1aWxkfS9NeUhlbGxvU2VydmljZS53c2RsIiB0b2Rpcj0iJHthc3NlbWJsZS5lYXJ9L01FVEEtSU5GL3dzZGwiIC8+CkBAIC02NSw3ICs2NSw3IEBACiAgICAgIDxjb3B5IGZpbGU9IndlYnNlcnZpY2VzLnhtbCIgdG9kaXI9IiR7YXNzZW1ibGUuZWFyfS9NRVRBLUlORiIgLz4KICAgICAgPGNvcHkgZmlsZT0iZWpiLWphci54bWwiIHRvZGlyPSIke2Fzc2VtYmxlLmVhcn0vTUVUQS1JTkYiIC8+CiAgICAgIDxjb3B5IGZpbGU9InN1bi1lamItamFyLnhtbCIgdG9kaXI9IiR7YXNzZW1ibGUuZWFyfS9NRVRBLUlORiIgLz4KLSAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5lYXJ9LyR7ZWpiamFyLmZpbGV9IiAKKyAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5lYXJ9LyR7ZWpiamFyLmZpbGV9IgogICAgICAgICAgICA+CiAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLmVhcn0iIGluY2x1ZGVzPSJNRVRBLUlORi8qKiwgYnVpbGQvKiosaGVsbG9zZXJ2aWNlLyoqIiAvPgogICAgICA8L2phcj4KQEAgLTc4LDcgKzc4LDcgQEAKIAogICA8dGFyZ2V0IG5hbWU9ImNyZWF0ZS1lYXIiIGRlcGVuZHM9ImNyZWF0ZS1lamItamFyIgogICAgICBkZXNjcmlwdGlvbj0iRXhlY3V0ZXMgdGhlIHRhcmdldHMgbmVlZGVkIHRvIGNyZWF0ZSB0aGUgZWpiIGphci4iPgotICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmVhcn0vJHtlYXIuZmlsZX0iIAorICAgICA8amFyIGRlc3RmaWxlPSIke2Fzc2VtYmxlLmVhcn0vJHtlYXIuZmlsZX0iCiAgICAgICAgICAgID4KICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YXNzZW1ibGUuZWFyfSIgaW5jbHVkZXM9IiR7ZWpiamFyLmZpbGV9IiAvPgogICAgICA8L2phcj4KQEAgLTEyMCw3ICsxMjAsNyBAQAogCiAKIAotICAgICAgICAgCisKICAgICAgICAgICA8Y29weSBmaWxlPSJjbGllbnQtc3VuLXdlYi54bWwiIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvc3VuLXdlYi54bWwiLz4KICAgICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgogICAgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUuZGlyfS93c2NsaWVudC53YXIiIGJhc2VkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudCIgaW5jbHVkZXM9IioqIi8+CkBAIC0xODMsNiArMTgzLDYgQEAKICAgICAgICAgIDxyZXBsYWNlIGZpbGU9IndlYmNsaWVudC9DbGllbnQuamF2YSIgdG9rZW49IiR7aHR0cC5ob3N0fSIgdmFsdWU9IkhUVFBfSE9TVCIvPgogICAgICAgICAgPHJlcGxhY2UgZmlsZT0id2ViY2xpZW50L0NsaWVudC5qYXZhIiB0b2tlbj0iJHtodHRwLnBvcnR9IiB2YWx1ZT0iSFRUUF9QT1JUIi8+CiAgICAgICAgPC90YXJnZXQ+Ci0gICAgCisKIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYXhycGMtaGVsbG8tZWpiL2NsaWVudC13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYXhycGMtaGVsbG8tZWpiL2NsaWVudC13ZWIueG1sCmluZGV4IDRjMmIzYjEuLmRjY2ZiYzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamF4cnBjLWhlbGxvLWVqYi9jbGllbnQtd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2pheHJwYy1oZWxsby1lamIvY2xpZW50LXdlYi54bWwKQEAgLTIwLDcgKzIwLDcgQEAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0gICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSAKKyAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KICAgPGRlc2NyaXB0aW9uPkEgdGVzdCBhcHBsaWNhdGlvbjwvZGVzY3JpcHRpb24+CiAgIDxkaXNwbGF5LW5hbWU+V2ViVGllcjwvZGlzcGxheS1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYXhycGMtaGVsbG8tZWpiL2NsaWVudC9UZXN0Q2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2pheHJwYy1oZWxsby1lamIvY2xpZW50L1Rlc3RDbGllbnQuamF2YQppbmRleCBmOTNhMWQ1Li41MDYyMThjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2pheHJwYy1oZWxsby1lamIvY2xpZW50L1Rlc3RDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2pheHJwYy1oZWxsby1lamIvY2xpZW50L1Rlc3RDbGllbnQuamF2YQpAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgaW50IGNvZGUgPSBpbnZva2VTZXJ2bGV0KHVybCk7CiAgICAgICAgICAgICByZXBvcnQoY29kZSk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgfQpAQCAtNjMsOSArNjMsOSBAQAogICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICBsb2cobGluZSk7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIlNvIHRoZSBSRVNVTFQgT0YgamF4cnBjIHdlYiBTRVJWSUNFIElTIikgIT0gLTEpCi0JCWZvdW5kMSA9IHRydWU7CisgICAgICAgIGZvdW5kMSA9IHRydWU7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIltIZWxsbyBBbGxdIikgIT0gLTEpCi0JCWZvdW5kMiA9IHRydWU7CisgICAgICAgIGZvdW5kMiA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNvZGU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYXhycGMtaGVsbG8tZWpiL2NvbmZpZy1pbnRlcmZhY2UueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYXhycGMtaGVsbG8tZWpiL2NvbmZpZy1pbnRlcmZhY2UueG1sCmluZGV4IDU0MTY2OTEuLmIxM2E1NzUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamF4cnBjLWhlbGxvLWVqYi9jb25maWctaW50ZXJmYWNlLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2pheHJwYy1oZWxsby1lamIvY29uZmlnLWludGVyZmFjZS54bWwKQEAgLTE5LDEwICsxOSwxMCBAQAogCiA8Y29uZmlndXJhdGlvbgogICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4LXJwYy9yaS9jb25maWciPgotICA8c2VydmljZSAKLSAgICAgIG5hbWU9Ik15SGVsbG9TZXJ2aWNlIiAKLSAgICAgIHRhcmdldE5hbWVzcGFjZT0idXJuOkZvbyIgCi0gICAgICB0eXBlTmFtZXNwYWNlPSJ1cm46Rm9vIiAKKyAgPHNlcnZpY2UKKyAgICAgIG5hbWU9Ik15SGVsbG9TZXJ2aWNlIgorICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJ1cm46Rm9vIgorICAgICAgdHlwZU5hbWVzcGFjZT0idXJuOkZvbyIKICAgICAgIHBhY2thZ2VOYW1lPSJoZWxsb3NlcnZpY2UiPgogICAgICAgPGludGVyZmFjZSBuYW1lPSJoZWxsb3NlcnZpY2UuSGVsbG9JRiIvPgogICA8L3NlcnZpY2U+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2pheHJwYy1oZWxsby1lamIvY29uZmlnLXdzZGwueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYXhycGMtaGVsbG8tZWpiL2NvbmZpZy13c2RsLnhtbAppbmRleCAzZDE0NDBmLi4wYzFiYmJiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2pheHJwYy1oZWxsby1lamIvY29uZmlnLXdzZGwueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamF4cnBjLWhlbGxvLWVqYi9jb25maWctd3NkbC54bWwKQEAgLTE4LDcgKzE4LDcgQEAKIC0tPgogCiA8Y29uZmlndXJhdGlvbgotIAl4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4LXJwYy9yaS9jb25maWciPgorICAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4LXJwYy9yaS9jb25maWciPgogICA8d3NkbCBsb2NhdGlvbj0iYnVpbGQvTXlIZWxsb1NlcnZpY2Uud3NkbCIKICAgICAgICBwYWNrYWdlTmFtZT0iaGVsbG9zZXJ2aWNlIi8+CiA8L2NvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2pheHJwYy1oZWxsby1lamIvd2ViY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYXhycGMtaGVsbG8tZWpiL3dlYmNsaWVudC9DbGllbnQuamF2YQppbmRleCBiNmUyNzg0Li41NTlmZGJlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2pheHJwYy1oZWxsby1lamIvd2ViY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamF4cnBjLWhlbGxvLWVqYi93ZWJjbGllbnQvQ2xpZW50LmphdmEKQEAgLTMxLDggKzMxLDggQEAKIHB1YmxpYyBjbGFzcyBDbGllbnQgZXh0ZW5kcyBIdHRwU2VydmxldCB7CiAKIAotICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkgCi0JCXRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CisgICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQorICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICAgICBkb1Bvc3QocmVxLCByZXNwKTsKICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamF4cnBjLWhlbGxvLXdlYi9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYXhycGMtaGVsbG8td2ViL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZmZmOGZhYy4uNzljZTQwZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYXhycGMtaGVsbG8td2ViL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYXhycGMtaGVsbG8td2ViL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImpheHJwYy1oZWxsby13ZWIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+CkBAIC0zMCwxMSArMzAsMTEgQEAKIDxwcm9wZXJ0eSBuYW1lPSJ3ZWJzZXJ2aWNlcy54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYnNlcnZpY2VzLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwQ2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamF4cnBjLWhlbGxvLXdlYi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2pheHJwYy1oZWxsby13ZWIvYnVpbGQueG1sCmluZGV4IDhlZmVjMmIuLjQ0ODc4NWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamF4cnBjLWhlbGxvLXdlYi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYXhycGMtaGVsbG8td2ViL2J1aWxkLnhtbApAQCAtNTEsMjIgKzUxLDIyIEBACiAgICAgPC9wYXRoPgogCiAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJjbGVhbixkZXBsb3ksYXNzZW1ibGUtY2xpZW50LGRlcGxveS1jbGllbnQscnVudGVzdCx1bmRlcGxveSIvPgotICAKKwogCiAgIDx0YXJnZXQgbmFtZT0iY3JlYXRlLXdhciIgZGVzY3JpcHRpb249IlBhY2thZ2VzIHRoZSBXQVIgZmlsZSI+CiAgICAgIDxlY2hvIG1lc3NhZ2U9IkNyZWF0aW5nIHRoZSBXQVIuLi4uIi8+CiAgICAgIDxkZWxldGUgZmlsZT0iJHthc3NlbWJsZS53YXJ9LyR7d2FyLmZpbGV9IiAvPgogICAgICA8ZGVsZXRlIGRpcj0iJHthc3NlbWJsZS53YXJ9L1dFQi1JTkYiIC8+CiAgICAgIDxjb3B5IHRvZGlyPSIke2Fzc2VtYmxlLndhcn0vV0VCLUlORi9jbGFzc2VzLyI+Ci0gICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGR9LyIgCi0gICAgICAgICAgICAgICAgICBpbmNsdWRlcz0iKiovKi5jbGFzcyIgCisgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGR9LyIKKyAgICAgICAgICAgICAgICAgIGluY2x1ZGVzPSIqKi8qLmNsYXNzIgogICAgICAgICAgICAgICAgICAgZXhjbHVkZXM9IioqLypDbGllbnQuY2xhc3MsICoqLyoud3NkbCwgKiovKm1hcHBpbmcueG1sIi8+CiAgICAgIDwvY29weT4KICAgICAgPGNvcHkgZmlsZT0iJHtidWlsZH0vTXlIZWxsb1NlcnZpY2Uud3NkbCIgdG9kaXI9IiR7YXNzZW1ibGUud2FyfS9XRUItSU5GL3dzZGwiIC8+CiAgICAgIDxjb3B5IGZpbGU9IiR7YnVpbGR9L21hcHBpbmcueG1sIiB0b2Rpcj0iJHthc3NlbWJsZS53YXJ9LyR7YnVpbGR9LyIgLz4KICAgICAgPGNvcHkgZmlsZT0ic3VuLXdlYi54bWwiIHRvZGlyPSIke2Fzc2VtYmxlLndhcn0vV0VCLUlORiIgLz4KICAgICAgPGNvcHkgZmlsZT0id2Vic2VydmljZXMueG1sIiB0b2Rpcj0iJHthc3NlbWJsZS53YXJ9L1dFQi1JTkYiIC8+Ci0gICAgIDx3YXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUud2FyfS8ke3dhci5maWxlfSIgCisgICAgIDx3YXIgZGVzdGZpbGU9IiR7YXNzZW1ibGUud2FyfS8ke3dhci5maWxlfSIKICAgICAgICAgICB3ZWJ4bWw9Ii4vd2ViLnhtbCIgZmlsZXNvbmx5PSJ0cnVlIiA+CiAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Fzc2VtYmxlLndhcn0iIGluY2x1ZGVzPSJXRUItSU5GLyoqLCBidWlsZC8qKiIgLz4KICAgICAgPC93YXI+CkBAIC0xMDIsNyArMTAyLDcgQEAKICAgICAgICAgPGFyZyBsaW5lPSIke3dhcm5hbWV9Ii8+CiAgICAgICA8L2V4ZWM+CiAgICAgPC90YXJnZXQ+Ci0gCisKIAogIDwhLS0gPHRhcmdldCBuYW1lPSJidWlsZC1jbGllbnQiIGRlcGVuZHM9ImJ1aWxkLXN0YXRpYyIKICAgICAgZGVzY3JpcHRpb249IkV4ZWN1dGVzIHRoZSB0YXJnZXRzIG5lZWRlZCB0byBidWlsZCBhIHN0YXRpYyBzdHViIGNsaWVudC4iPgpAQCAtMTMzLDcgKzEzMyw3IEBACiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjbGllbnQiLz4KICAgICA8L2FudGNhbGw+CiAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvd3NkbCIvPgotICAgIDxjb3B5IGZpbGU9IiR7YXNzZW1ibGUud2FyfS9XRUItSU5GL3dzZGwvTXlIZWxsb1NlcnZpY2Uud3NkbCIgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3dzZGwiLz4gICAgCisgICAgPGNvcHkgZmlsZT0iJHthc3NlbWJsZS53YXJ9L1dFQi1JTkYvd3NkbC9NeUhlbGxvU2VydmljZS53c2RsIiB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvd3NkbCIvPgogICAgIDx1bmphciBzcmM9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICBkZXN0PSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0iYXBwY2xpZW50LWphci1jb21tb24iPgpAQCAtMjAxLDcgKzIwMSw3IEBACiAgICAgICAgICA8L3RhcmdldD4KIAogICAgICAgIDx0YXJnZXQgIG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJ1bmRlcGxveS13YXIxLHVuZGVwbG95LWNsaWVudCIvPgotICAgIAorCiAgICAgICAgPHRhcmdldCBuYW1lPSJydW50ZXN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+CiAgICAgICAgICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYXhycGMtaGVsbG8td2ViL2NsaWVudC13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYXhycGMtaGVsbG8td2ViL2NsaWVudC13ZWIueG1sCmluZGV4IDRjMmIzYjEuLmRjY2ZiYzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamF4cnBjLWhlbGxvLXdlYi9jbGllbnQtd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2pheHJwYy1oZWxsby13ZWIvY2xpZW50LXdlYi54bWwKQEAgLTIwLDcgKzIwLDcgQEAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0gICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSAKKyAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KICAgPGRlc2NyaXB0aW9uPkEgdGVzdCBhcHBsaWNhdGlvbjwvZGVzY3JpcHRpb24+CiAgIDxkaXNwbGF5LW5hbWU+V2ViVGllcjwvZGlzcGxheS1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYXhycGMtaGVsbG8td2ViL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamF4cnBjLWhlbGxvLXdlYi9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggOTBjNWY2ZS4uOWNlNTQzZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYXhycGMtaGVsbG8td2ViL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2pheHJwYy1oZWxsby13ZWIvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMSwzMCArMzEsMzAgQEAKIAogIC8qICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJqYXhycGMtaGVsbG8td2ViLWNsaWVudCIpOwogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3MpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgiamF4cnBjLWhlbGxvLXdlYi1jbGllbnQiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nW10gYXJncykgewotICAgIAl0cnkgewotICAgICAgICAgICAgCisgICAgICAgIHRyeSB7CisKICAgICAgICAgICAgIFN0cmluZyB0YXJnZXRFbmRwb2ludEFkZHJlc3MgPSBhcmdzWzBdOwogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogCiAgICAgICAgICAgICBNeUhlbGxvU2VydmljZSBteUhlbGxvU2VydmljZSA9CiAgICAgICAgICAgICAgICAgKE15SGVsbG9TZXJ2aWNlKSBpYy5sb29rdXAoCiAgICAgICAgICAgICAgICAgICAgICJqYXZhOmNvbXAvZW52L3NlcnZpY2UvaGVsbG9zZXJ2aWNlIik7Ci0gCisKICAgICAgICAgICAgSGVsbG9JRiBoZWxsb1BvcnQgPSBteUhlbGxvU2VydmljZS5nZXRIZWxsb0lGUG9ydCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAKKworCiAgICAgICAgICAgICAoKFN0dWIpaGVsbG9Qb3J0KS5fc2V0UHJvcGVydHkoU3R1Yi5FTkRQT0lOVF9BRERSRVNTX1BST1BFUlRZLAogICAgICAgICAgICAgICAgICAgICB0YXJnZXRFbmRwb2ludEFkZHJlc3MpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZW5kcG9pbnQgYWRkcmVzcyA9ICIgKyB0YXJnZXRFbmRwb2ludEFkZHJlc3MpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbnZvY2F0aW9uIHJldHVybmVkICIgKyBoZWxsb1BvcnQuc2F5SGVsbG8oIkFsbCIpKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2pheHJwYy1oZWxsby13ZWIvY2xpZW50L1Rlc3RDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamF4cnBjLWhlbGxvLXdlYi9jbGllbnQvVGVzdENsaWVudC5qYXZhCmluZGV4IDIwMjlhZGIuLmQxYmYzNTQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamF4cnBjLWhlbGxvLXdlYi9jbGllbnQvVGVzdENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamF4cnBjLWhlbGxvLXdlYi9jbGllbnQvVGVzdENsaWVudC5qYXZhCkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnQgY29kZSA9IGludm9rZVNlcnZsZXQodXJsKTsKICAgICAgICAgICAgIHJlcG9ydChjb2RlKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICB9CkBAIC02Myw5ICs2Myw5IEBACiAgICAgICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgICAgICAgIGxvZyhsaW5lKTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiU28gdGhlIFJFU1VMVCBPRiBqYXhycGMgd2ViIFNFUlZJQ0UgSVMiKSAhPSAtMSkKLQkJZm91bmQxID0gdHJ1ZTsKKyAgICAgICAgZm91bmQxID0gdHJ1ZTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiW0hlbGxvIEFsbF0iKSAhPSAtMSkKLQkJZm91bmQyID0gdHJ1ZTsKKyAgICAgICAgZm91bmQyID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY29kZTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2pheHJwYy1oZWxsby13ZWIvY29uZmlnLWludGVyZmFjZS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2pheHJwYy1oZWxsby13ZWIvY29uZmlnLWludGVyZmFjZS54bWwKaW5kZXggNTQxNjY5MS4uYjEzYTU3NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYXhycGMtaGVsbG8td2ViL2NvbmZpZy1pbnRlcmZhY2UueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamF4cnBjLWhlbGxvLXdlYi9jb25maWctaW50ZXJmYWNlLnhtbApAQCAtMTksMTAgKzE5LDEwIEBACiAKIDxjb25maWd1cmF0aW9uCiAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+Ci0gIDxzZXJ2aWNlIAotICAgICAgbmFtZT0iTXlIZWxsb1NlcnZpY2UiIAotICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJ1cm46Rm9vIiAKLSAgICAgIHR5cGVOYW1lc3BhY2U9InVybjpGb28iIAorICA8c2VydmljZQorICAgICAgbmFtZT0iTXlIZWxsb1NlcnZpY2UiCisgICAgICB0YXJnZXROYW1lc3BhY2U9InVybjpGb28iCisgICAgICB0eXBlTmFtZXNwYWNlPSJ1cm46Rm9vIgogICAgICAgcGFja2FnZU5hbWU9ImhlbGxvc2VydmljZSI+CiAgICAgICA8aW50ZXJmYWNlIG5hbWU9ImhlbGxvc2VydmljZS5IZWxsb0lGIi8+CiAgIDwvc2VydmljZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamF4cnBjLWhlbGxvLXdlYi9jb25maWctd3NkbC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2pheHJwYy1oZWxsby13ZWIvY29uZmlnLXdzZGwueG1sCmluZGV4IDNkMTQ0MGYuLjBjMWJiYmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamF4cnBjLWhlbGxvLXdlYi9jb25maWctd3NkbC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYXhycGMtaGVsbG8td2ViL2NvbmZpZy13c2RsLnhtbApAQCAtMTgsNyArMTgsNyBAQAogLS0+CiAKIDxjb25maWd1cmF0aW9uCi0gCXhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+CisgICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+CiAgIDx3c2RsIGxvY2F0aW9uPSJidWlsZC9NeUhlbGxvU2VydmljZS53c2RsIgogICAgICAgIHBhY2thZ2VOYW1lPSJoZWxsb3NlcnZpY2UiLz4KIDwvY29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamF4cnBjLWhlbGxvLXdlYi9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2pheHJwYy1oZWxsby13ZWIvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sCmluZGV4IGViOWU5N2QuLjQwODM2NDIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamF4cnBjLWhlbGxvLXdlYi9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYXhycGMtaGVsbG8td2ViL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbApAQCAtMjQsMTEgKzI0LDExIEBACiAgICAgPGRlc2NyaXB0aW9uPnNpbXBsZSBqYXhycGMgc2VydmljZSByZWY8L2Rlc2NyaXB0aW9uPgogICAgIDxzZXJ2aWNlLXJlZi1uYW1lPnNlcnZpY2UvaGVsbG9zZXJ2aWNlPC9zZXJ2aWNlLXJlZi1uYW1lPgogICAgIDxzZXJ2aWNlLWludGVyZmFjZT5qYXZheC54bWwucnBjLlNlcnZpY2U8L3NlcnZpY2UtaW50ZXJmYWNlPgotICAgIDx3c2RsLWZpbGU+TUVUQS1JTkYvd3NkbC9NeUhlbGxvU2VydmljZS53c2RsPC93c2RsLWZpbGU+ICAgIAorICAgIDx3c2RsLWZpbGU+TUVUQS1JTkYvd3NkbC9NeUhlbGxvU2VydmljZS53c2RsPC93c2RsLWZpbGU+CiAgICAgPGpheHJwYy1tYXBwaW5nLWZpbGU+bWFwcGluZy54bWw8L2pheHJwYy1tYXBwaW5nLWZpbGU+Ci0gICAgPHNlcnZpY2UtcW5hbWUgeG1sbnM6c2VydmljZW5zPSJ1cm46Rm9vIj5zZXJ2aWNlbnM6SGVsbG9JRjwvc2VydmljZS1xbmFtZT4gICAgICAgICAgICAgICAKKyAgICA8c2VydmljZS1xbmFtZSB4bWxuczpzZXJ2aWNlbnM9InVybjpGb28iPnNlcnZpY2VuczpIZWxsb0lGPC9zZXJ2aWNlLXFuYW1lPgogICAgIDxwb3J0LWNvbXBvbmVudC1yZWY+CiAgICAgICA8c2VydmljZS1lbmRwb2ludC1pbnRlcmZhY2U+aGVsbG9zZXJ2aWNlLkhlbGxvSUY8L3NlcnZpY2UtZW5kcG9pbnQtaW50ZXJmYWNlPgotICAgIDwvcG9ydC1jb21wb25lbnQtcmVmPiAgICAgICAgICAKKyAgICA8L3BvcnQtY29tcG9uZW50LXJlZj4KICAgPC9zZXJ2aWNlLXJlZj4KIDwvYXBwbGljYXRpb24tY2xpZW50PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYXhycGMtaGVsbG8td2ViL3dlYmNsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamF4cnBjLWhlbGxvLXdlYi93ZWJjbGllbnQvQ2xpZW50LmphdmEKaW5kZXggYzcxMmVmZS4uNGUxMmFmYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYXhycGMtaGVsbG8td2ViL3dlYmNsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2pheHJwYy1oZWxsby13ZWIvd2ViY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMSw4ICszMSw4IEBACiBwdWJsaWMgY2xhc3MgQ2xpZW50IGV4dGVuZHMgSHR0cFNlcnZsZXQgewogCiAKLSAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApIAotCQl0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24geworICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkKKyAgICAgICAgdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgICAgZG9Qb3N0KHJlcSwgcmVzcCk7CiAgICAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2JhcmVfZG9jX2xpdGVyYWwvYmNfY29uc3VtZXJfc2VfcHJvdmlkZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvYmFyZV9kb2NfbGl0ZXJhbC9iY19jb25zdW1lcl9zZV9wcm92aWRlci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDdkZGE5ODQuLjA5MTgwNmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvYmFyZV9kb2NfbGl0ZXJhbC9iY19jb25zdW1lcl9zZV9wcm92aWRlci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvYmFyZV9kb2NfbGl0ZXJhbC9iY19jb25zdW1lcl9zZV9wcm92aWRlci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImJhcmVfZG9jX2xpdGVyYWwtYmNfY29uc3VtZXJfc2VfcHJvdmlkZXIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9Ii4vd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImpiaS1jb21wb25lbnQtc3UtYXNzZW1ibHkiIHZhbHVlPSJ3ZWJfY2FsY3VsYXRvcl9jb25zdW1lcl9hc3NlbWJseSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9iYXJlX2RvY19saXRlcmFsL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvYmFyZV9kb2NfbGl0ZXJhbC9iY19jb25zdW1lcl9zZV9wcm92aWRlci9idWlsZC54bWwKaW5kZXggMmU1ODYxMS4uZjU5MTZhZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9iYXJlX2RvY19saXRlcmFsL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2JhcmVfZG9jX2xpdGVyYWwvYmNfY29uc3VtZXJfc2VfcHJvdmlkZXIvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgJmpheHdzVG9vbHM7CiAgICAgJmpiaWNvbW1vbjsKICAgICAmamJpcHJvcGVydGllczsKLSAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iY2xlYW4sIHNldHVwLCBydW50ZXN0LHVuZGVwbG95Ii8+IAorICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJjbGVhbiwgc2V0dXAsIHJ1bnRlc3QsdW5kZXBsb3kiLz4KIAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2JhcmVfZG9jX2xpdGVyYWwvYmNfY29uc3VtZXJfc2VfcHJvdmlkZXIvY2xpZW50L1NPQVBXZWJDb25zdW1lci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9iYXJlX2RvY19saXRlcmFsL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2NsaWVudC9TT0FQV2ViQ29uc3VtZXIuamF2YQppbmRleCA0NDk4NDBiLi42YjhlNDU5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2JhcmVfZG9jX2xpdGVyYWwvYmNfY29uc3VtZXJfc2VfcHJvdmlkZXIvY2xpZW50L1NPQVBXZWJDb25zdW1lci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvYmFyZV9kb2NfbGl0ZXJhbC9iY19jb25zdW1lcl9zZV9wcm92aWRlci9jbGllbnQvU09BUFdlYkNvbnN1bWVyLmphdmEKQEAgLTI4LDQxICsyOCw0MSBAQAogICAgIHN0YXRpYyBDYWxjdWxhdG9yU2VydmljZSBzZXJ2aWNlOwogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7Ci0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RJZCA9ICJqYmktc2VydmljZWVuZ2luZS9iYXJlX2RvY19saXRlcmFsL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyIjsKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdElkID0gImpiaS1zZXJ2aWNlZW5naW5lL2JhcmVfZG9jX2xpdGVyYWwvYmNfY29uc3VtZXJfc2VfcHJvdmlkZXIiOwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24odGVzdElkKTsKLQlTT0FQV2ViQ29uc3VtZXIgY2xpZW50ID0gbmV3IFNPQVBXZWJDb25zdW1lcigpOwotCWNsaWVudC5hZGRVc2luZ1NPQVBDb25zdW1lcigpOworICAgIFNPQVBXZWJDb25zdW1lciBjbGllbnQgPSBuZXcgU09BUFdlYkNvbnN1bWVyKCk7CisgICAgY2xpZW50LmFkZFVzaW5nU09BUENvbnN1bWVyKCk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KHRlc3RJZCk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGFkZFVzaW5nU09BUENvbnN1bWVyKCkgewotCWNvbS5leGFtcGxlLmNhbGN1bGF0b3IuQ2FsY3VsYXRvciBwb3J0PSBudWxsOwotCXRyeSB7CisgICAgY29tLmV4YW1wbGUuY2FsY3VsYXRvci5DYWxjdWxhdG9yIHBvcnQ9IG51bGw7CisgICAgdHJ5IHsKIAotCQlTeXN0ZW0ub3V0LnByaW50bG4oIiBBZnRlciBjcmVhdGluZyBDYWxjdWxhdG9yU2VydmljZSIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBBZnRlciBjcmVhdGluZyBDYWxjdWxhdG9yU2VydmljZSIpOwogCiAgICAgICAgICAgICAgICAgcG9ydCA9IHNlcnZpY2UuZ2V0Q2FsY3VsYXRvclBvcnQoKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCIgQWZ0ZXIgZ2V0dGluZyBwb3J0Iik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIEFmdGVyIGdldHRpbmcgcG9ydCIpOwogCi0JCS8vIEdldCBTdHViCi0JCUJpbmRpbmdQcm92aWRlciBzdHViID0gKEJpbmRpbmdQcm92aWRlcilwb3J0OwotCQlTdHJpbmcgZW5kcG9pbnRVUkkgPSJodHRwOi8vbG9jYWxob3N0OjEyMDExL2NhbGN1bGF0b3JlbmRwb2ludCI7Ci0JCXN0dWIuZ2V0UmVxdWVzdENvbnRleHQoKS5wdXQoQmluZGluZ1Byb3ZpZGVyLkVORFBPSU5UX0FERFJFU1NfUFJPUEVSVFksCi0JCSAgICAgIGVuZHBvaW50VVJJKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCIgQWZ0ZXIgc2V0dGluZyBlbmRwb2ludCBhZGRyZXNzIFVSSSIpOwotCSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgVXNpbmcgU09BUCBiaW5kaW5nJ3MgY29uc3VtZXIgdG8gYWRkIDUwMCArIDUwID0gIiArIHBvcnQuYWRkKDUwKSk7Ci0JICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsIHN0YXQuUEFTUyk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiIE5vIEV4Y2VwdGlvbiB0aHJvd24iKTsKKyAgICAgICAgLy8gR2V0IFN0dWIKKyAgICAgICAgQmluZGluZ1Byb3ZpZGVyIHN0dWIgPSAoQmluZGluZ1Byb3ZpZGVyKXBvcnQ7CisgICAgICAgIFN0cmluZyBlbmRwb2ludFVSSSA9Imh0dHA6Ly9sb2NhbGhvc3Q6MTIwMTEvY2FsY3VsYXRvcmVuZHBvaW50IjsKKyAgICAgICAgc3R1Yi5nZXRSZXF1ZXN0Q29udGV4dCgpLnB1dChCaW5kaW5nUHJvdmlkZXIuRU5EUE9JTlRfQUREUkVTU19QUk9QRVJUWSwKKyAgICAgICAgICAgICAgZW5kcG9pbnRVUkkpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBBZnRlciBzZXR0aW5nIGVuZHBvaW50IGFkZHJlc3MgVVJJIik7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBVc2luZyBTT0FQIGJpbmRpbmcncyBjb25zdW1lciB0byBhZGQgNTAwICsgNTAgPSAiICsgcG9ydC5hZGQoNTApKTsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5QQVNTKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgTm8gRXhjZXB0aW9uIHRocm93biIpOwogCi0JfSBjYXRjaChFeGNlcHRpb24gZSkgewotCQkvL2UucHJpbnRTdGFja1RyYWNlKCk7Ci0JCWlmKGUgaW5zdGFuY2VvZiBqYWthcnRhLnhtbC53cy5zb2FwLlNPQVBGYXVsdEV4Y2VwdGlvbikgCi0gICAgICAgICAgICAgICAgCXN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5GQUlMKTsKLQkJZWxzZSB7Ci0JICAgICAgICAJc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LkZBSUwpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCIgU09BUEZhdWx0RXhjZXB0aW9uIE5vdCB0aHJvd24iKTsKLQkJfQotCX0KKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIC8vZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgaWYoZSBpbnN0YW5jZW9mIGpha2FydGEueG1sLndzLnNvYXAuU09BUEZhdWx0RXhjZXB0aW9uKQorICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsIHN0YXQuRkFJTCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5GQUlMKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFNPQVBGYXVsdEV4Y2VwdGlvbiBOb3QgdGhyb3duIik7CisgICAgICAgIH0KKyAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9iYXJlX2RvY19saXRlcmFsL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2VuZHBvaW50L0NhbGN1bGF0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvYmFyZV9kb2NfbGl0ZXJhbC9iY19jb25zdW1lcl9zZV9wcm92aWRlci9lbmRwb2ludC9DYWxjdWxhdG9yLmphdmEKaW5kZXggYTRkYTA3ZC4uMzRjOTI2MyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9iYXJlX2RvY19saXRlcmFsL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2VuZHBvaW50L0NhbGN1bGF0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2JhcmVfZG9jX2xpdGVyYWwvYmNfY29uc3VtZXJfc2VfcHJvdmlkZXIvZW5kcG9pbnQvQ2FsY3VsYXRvci5qYXZhCkBAIC0yNiwxNiArMjYsMTYgQEAKICkKIEBTT0FQQmluZGluZyhwYXJhbWV0ZXJTdHlsZSA9IFNPQVBCaW5kaW5nLlBhcmFtZXRlclN0eWxlLkJBUkUpCiBwdWJsaWMgY2xhc3MgQ2FsY3VsYXRvciB7Ci0JcHVibGljIENhbGN1bGF0b3IoKSB7fQorICAgIHB1YmxpYyBDYWxjdWxhdG9yKCkge30KIAotCUBXZWJNZXRob2QKLQlwdWJsaWMgaW50IGFkZCgKLQkJCUBXZWJQYXJhbShuYW1lID0gIm51bWJlcjEiLCB0YXJnZXROYW1lc3BhY2UgPSAiaHR0cDovL2V4YW1wbGUuY29tL0NhbGN1bGF0b3IiLCBwYXJ0TmFtZSA9ICJwYXJ0MSIpCi0JCQlpbnQgagotCQkJKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJCQlpbnQgaSA9IDUwMDsKKyAgICBAV2ViTWV0aG9kCisgICAgcHVibGljIGludCBhZGQoCisgICAgICAgICAgICBAV2ViUGFyYW0obmFtZSA9ICJudW1iZXIxIiwgdGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly9leGFtcGxlLmNvbS9DYWxjdWxhdG9yIiwgcGFydE5hbWUgPSAicGFydDEiKQorICAgICAgICAgICAgaW50IGoKKyAgICAgICAgICAgICkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgICAgICAgICAgaW50IGkgPSA1MDA7CiAgICAgICAgICAgICAgICAgaW50IGsgPSBpICtqIDsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkpCSSBUZXN0IDo6IGJhcmUtcnBjLWxpdGVyYWwgYmNfY29uc3VtZXJfc2VfcHJvdmlkZXIgOiAiICsgaSArICIrIiArIGogKyIgPSAiICsgayk7Ci0JCXJldHVybiBrOwotCX0KKyAgICAgICAgcmV0dXJuIGs7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9iYXJlX2RvY19saXRlcmFsL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL3NvYXAtYmluZGluZy1zdS1hbGFza2EvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvYmFyZV9kb2NfbGl0ZXJhbC9iY19jb25zdW1lcl9zZV9wcm92aWRlci9zb2FwLWJpbmRpbmctc3UtYWxhc2thL2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKaW5kZXggYjRkYTk4Ni4uNDMzNzhlMiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9iYXJlX2RvY19saXRlcmFsL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL3NvYXAtYmluZGluZy1zdS1hbGFza2EvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2JhcmVfZG9jX2xpdGVyYWwvYmNfY29uc3VtZXJfc2VfcHJvdmlkZXIvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCkBAIC0xOSw5ICsxOSw5IEBACiAKIDwhLS0gamJpLnhtbCBmaWxlIGZvciB0aGUgU09BUCBiaW5kaW5nIGRlcGxveW1lbnRzIGJpbmRpbmcuIC0tPgogPGpiaQotICAgIHZlcnNpb249IjEuMCIgCi0gICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIgCi0gICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCisgICAgdmVyc2lvbj0iMS4wIgorICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSAuL2piaS54c2QiPgogICA8c2VydmljZS1hc3NlbWJseT4KICAgICA8aWRlbnRpZmljYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2JhcmVfZG9jX2xpdGVyYWwvYmNfY29uc3VtZXJfc2VfcHJvdmlkZXIvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9zdS9NRVRBLUlORi9qYmkueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9iYXJlX2RvY19saXRlcmFsL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL3NvYXAtYmluZGluZy1zdS1hbGFza2Evc3UvTUVUQS1JTkYvamJpLnhtbAppbmRleCAyZDFlN2U4Li42NWNhOTZmIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2JhcmVfZG9jX2xpdGVyYWwvYmNfY29uc3VtZXJfc2VfcHJvdmlkZXIvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9zdS9NRVRBLUlORi9qYmkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvYmFyZV9kb2NfbGl0ZXJhbC9iY19jb25zdW1lcl9zZV9wcm92aWRlci9zb2FwLWJpbmRpbmctc3UtYWxhc2thL3N1L01FVEEtSU5GL2piaS54bWwKQEAgLTE4LDE2ICsxOCwxNiBAQAogLS0+CiAKIDxqYmkgdmVyc2lvbj0iMS4wIgotCSB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKLQkgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIgCi0gCSB4bWxuczpqYXZhZXNiPSJodHRwOi8vamF2YS5zdW4uY29tIgotCSB4bWxuczp0bnM9Imh0dHA6Ly9leGFtcGxlLmNvbS9DYWxjdWxhdG9yIgotCSB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSBqYmkueHNkIj4KLQk8c2VydmljZXMgYmluZGluZy1jb21wb25lbnQ9InRydWUiPgkJCi0JCTxjb25zdW1lcyBpbnRlcmZhY2UtbmFtZT0idG5zOkNhbGN1bGF0b3JTZXJ2aWNlIgotCQkJICBsaW5rLXR5cGU9InN0YW5kYXJkIgotICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLW5hbWU9InRuczpDYWxjdWxhdG9yU2VydmljZSIgCisgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiCisgICAgICB4bWxuczpqYXZhZXNiPSJodHRwOi8vamF2YS5zdW4uY29tIgorICAgICB4bWxuczp0bnM9Imh0dHA6Ly9leGFtcGxlLmNvbS9DYWxjdWxhdG9yIgorICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSBqYmkueHNkIj4KKyAgICA8c2VydmljZXMgYmluZGluZy1jb21wb25lbnQ9InRydWUiPgorICAgICAgICA8Y29uc3VtZXMgaW50ZXJmYWNlLW5hbWU9InRuczpDYWxjdWxhdG9yU2VydmljZSIKKyAgICAgICAgICAgICAgbGluay10eXBlPSJzdGFuZGFyZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS1uYW1lPSJ0bnM6Q2FsY3VsYXRvclNlcnZpY2UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50LW5hbWU9IkNhbGN1bGF0b3JQb3J0Ii8+CiAgICAgICAgIDxqYXZhZXNiOmFydGlmYWN0c3R5cGU+V1NETDExPC9qYXZhZXNiOmFydGlmYWN0c3R5cGU+Ci0JPC9zZXJ2aWNlcz4KKyAgICA8L3NlcnZpY2VzPgogPC9qYmk+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2JhcmVfZG9jX2xpdGVyYWwvYmNfY29uc3VtZXJfc2VfcHJvdmlkZXIvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvYmFyZV9kb2NfbGl0ZXJhbC9iY19jb25zdW1lcl9zZV9wcm92aWRlci93ZWIueG1sCmluZGV4IDA3ZTE0NzcuLjc5OGM2OWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvYmFyZV9kb2NfbGl0ZXJhbC9iY19jb25zdW1lcl9zZV9wcm92aWRlci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvYmFyZV9kb2NfbGl0ZXJhbC9iY19jb25zdW1lcl9zZV9wcm92aWRlci93ZWIueG1sCkBAIC0xOCwzMCArMTgsMzAgQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKLQkJCWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgorICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKKyAgICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogCi0JPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBDYWxjdWxhdG9yIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCTxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldBUjwvZGlzcGxheS1uYW1lPgorICAgIDxkZXNjcmlwdGlvbj5XZWJUaWVyIGZvciB0aGUgQ2FsY3VsYXRvciBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICA8ZGlzcGxheS1uYW1lPkNhbGN1bGF0b3JXQVI8L2Rpc3BsYXktbmFtZT4KIAotCTxzZXJ2bGV0PgotCQk8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIENhbGN1bGF0b3IgV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCQk8ZGlzcGxheS1uYW1lPkNhbGN1bGF0b3JXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+Ci0JCTxzZXJ2bGV0LW5hbWU+Q2FsY3VsYXRvcjwvc2VydmxldC1uYW1lPgotCQk8c2VydmxldC1jbGFzcz5lbmRwb2ludC5DYWxjdWxhdG9yPC9zZXJ2bGV0LWNsYXNzPgotCQk8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KLQk8L3NlcnZsZXQ+CisgICAgPHNlcnZsZXQ+CisgICAgICAgIDxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgQ2FsY3VsYXRvciBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgICAgIDxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkNhbGN1bGF0b3I8L3NlcnZsZXQtY2xhc3M+CisgICAgICAgIDxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgorICAgIDwvc2VydmxldD4KIAotCTxzZXJ2bGV0LW1hcHBpbmc+Ci0JCTxzZXJ2bGV0LW5hbWU+Q2FsY3VsYXRvcjwvc2VydmxldC1uYW1lPgotCQk8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvQ2FsY3VsYXRvclNlcnZpY2U8L3VybC1wYXR0ZXJuPgotCTwvc2VydmxldC1tYXBwaW5nPgorICAgIDxzZXJ2bGV0LW1hcHBpbmc+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+Q2FsY3VsYXRvcjwvc2VydmxldC1uYW1lPgorICAgICAgICA8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvQ2FsY3VsYXRvclNlcnZpY2U8L3VybC1wYXR0ZXJuPgorICAgIDwvc2VydmxldC1tYXBwaW5nPgogCi0JPHNlc3Npb24tY29uZmlnPgotCQk8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+Ci0JPC9zZXNzaW9uLWNvbmZpZz4KKyAgICA8c2Vzc2lvbi1jb25maWc+CisgICAgICAgIDxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KKyAgICA8L3Nlc3Npb24tY29uZmlnPgogCiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvYmFyZV9kb2NfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9iYXJlX2RvY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMzA4MTE5NS4uYTUwYWM4OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9iYXJlX2RvY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9iYXJlX2RvY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iYmFyZV9kb2NfbGl0ZXJhbC1zZV9jb25zdW1lcl9zZV9wcm92aWRlciIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iLi93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSIuL3N1bi13ZWIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2JhcmVfZG9jX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9iYXJlX2RvY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2J1aWxkLnhtbAppbmRleCA4YzcxNWYxLi40ZjQ2ZjYxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2JhcmVfZG9jX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvYmFyZV9kb2NfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9idWlsZC54bWwKQEAgLTM4LDkgKzM4LDkgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+Ci0JICA8ZGVsZXRlIGZpbGU9IiR7amJpLWNvbXBvbmVudC1zdS1kaXJ9L2Fzc2VtYmx5LyR7YXBwbmFtZX0td2ViLndhciIvPgotCSAgPGRlbGV0ZSBmaWxlPSIke2Jhc2VkaXJ9L1JlcFJ1bkNvbmYudHh0Ii8+Ci0JICA8ZGVsZXRlIGRpcj0iJHtiYXNlZGlyfS9jb21tb246ZW5kcG9pbnQiLz4KKyAgICAgIDxkZWxldGUgZmlsZT0iJHtqYmktY29tcG9uZW50LXN1LWRpcn0vYXNzZW1ibHkvJHthcHBuYW1lfS13ZWIud2FyIi8+CisgICAgICA8ZGVsZXRlIGZpbGU9IiR7YmFzZWRpcn0vUmVwUnVuQ29uZi50eHQiLz4KKyAgICAgIDxkZWxldGUgZGlyPSIke2Jhc2VkaXJ9L2NvbW1vbjplbmRwb2ludCIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iY2xlYW4sIGFzc2VtYmxlLXdlYiwgZGVwbG95LWFwcCxhc3NlbWJsZS1jbGllbnQsZGVwbG95LWNsaWVudCIvPgpAQCAtNTIsOCArNTIsOCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZS13ZWIiIGRlcGVuZHM9ImluaXQtY29tbW9uLCBjb21waWxlIj4KLQkgIDxlY2hvIG1lc3NhZ2U9ImNsYXNzZXMgZGlyID0gJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KLQkgIDxlY2hvIG1lc3NhZ2U9ImFzc2VtYmxlLmRpciA9ICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIiLz4KKyAgICAgIDxlY2hvIG1lc3NhZ2U9ImNsYXNzZXMgZGlyID0gJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KKyAgICAgIDxlY2hvIG1lc3NhZ2U9ImFzc2VtYmxlLmRpciA9ICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIiLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGtnLXdhciI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJ3YXIuY2xhc3NlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJ3YXIuZmlsZSIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIiLz4KQEAgLTY5LDcgKzY5LDcgQEAKICAgICAgICAgICAgICAgIHZhbHVlPSIta2VlcCAtZCAke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi9jbGFzc2VzIGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9iYXJlX2RvY19saXRlcmFsLXNlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL3dlYnNlcnZpY2UvQ2FsY3VsYXRvclNlcnZpY2U/V1NETCIvPgogICAgIDwvYW50Y2FsbD4KICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL2NsYXNzZXMiCi0gICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2oyZWUuamFyIiAKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvajJlZS5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iY29tbW9uLyoqLCB3ZWJjbGllbnQvKioiLz4KICAgICAgIDxjb3B5IGZpbGU9Ii4vY2xpZW50LXdlYi54bWwiIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvd2ViLnhtbCIvPgogICAgICAgPGNvcHkgZmlsZT0iLi9jbGllbnQtc3VuLXdlYi54bWwiIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvc3VuLXdlYi54bWwiLz4KQEAgLTEyNSwxMSArMTI1LDExIEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY2xpZW50Ii8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktYXBwIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bnRlc3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgotICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IiAKLSAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIAorICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJjb21tb24vKiosIGNsaWVudC8qKiIvPgogICAgICAgPHVuamFyIHNyYz0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIGRlc3Q9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgogICAgICAgPGphdmEgY2xhc3NuYW1lPSJjbGllbnQuVGVzdENsaWVudCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2JhcmVfZG9jX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvY2xpZW50LXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2JhcmVfZG9jX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvY2xpZW50LXdlYi54bWwKaW5kZXggZWViNzMwZC4uNzk1YjA1MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9iYXJlX2RvY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2NsaWVudC13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvYmFyZV9kb2NfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9jbGllbnQtd2ViLnhtbApAQCAtMjAsNyArMjAsNyBAQAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLSAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIAorICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogICA8ZGVzY3JpcHRpb24+QSB0ZXN0IGFwcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KICAgPGRpc3BsYXktbmFtZT5XZWJUaWVyPC9kaXNwbGF5LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2JhcmVfZG9jX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvY2xpZW50L1Rlc3RDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvYmFyZV9kb2NfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9jbGllbnQvVGVzdENsaWVudC5qYXZhCmluZGV4IDA3NmMxN2YuLmJhYjYzZmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvYmFyZV9kb2NfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9jbGllbnQvVGVzdENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvYmFyZV9kb2NfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9jbGllbnQvVGVzdENsaWVudC5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdElkID0gImpiaS1zZXJ2aWNlZW5naW5lL2JhcmVfZG9jX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIiOworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0SWQgPSAiamJpLXNlcnZpY2VlbmdpbmUvYmFyZV9kb2NfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlciI7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKHRlc3RJZCk7CkBAIC00NSw4ICs0NSw4IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnQgY29kZSA9IGludm9rZVNlcnZsZXQodXJsKTsKICAgICAgICAgICAgIHJlcG9ydChjb2RlKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICBmYWlsKCk7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZmFpbCgpOwogICAgICAgICB9CiAgICAgfQogCkBAIC01NywxNSArNTcsMTUgQEAKICAgICAgICAgaW50IGNvZGUgPSBjMS5nZXRSZXNwb25zZUNvZGUoKTsKICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBjMS5nZXRJbnB1dFN0cmVhbSgpOwogICAgICAgICBCdWZmZXJlZFJlYWRlciBpbnB1dCA9IG5ldyBCdWZmZXJlZFJlYWRlciAobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7Ci0JCVN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICAgICAgIFN0cmluZyBsaW5lID0gbnVsbDsKLQkJYm9vbGVhbiBmb3VuZCA9IGZhbHNlOworICAgICAgICBib29sZWFuIGZvdW5kID0gZmFsc2U7CiAgICAgICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKLQkJCWlmKGxpbmUuaW5kZXhPZigiU1VDQ0VTUyIpICE9IC0xKSBmb3VuZCA9IHRydWU7CQotCQkJYnVmZmVyLmFwcGVuZChsaW5lICsgIlxuIik7CisgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIlNVQ0NFU1MiKSAhPSAtMSkgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChsaW5lICsgIlxuIik7CiAgICAgICAgIH0KICAgICAgICAgbG9nKGJ1ZmZlci50b1N0cmluZygpKTsKLQkgICAgaWYoIWZvdW5kKSByZXR1cm4gNTA1OwkKKyAgICAgICAgaWYoIWZvdW5kKSByZXR1cm4gNTA1OwogICAgICAgICByZXR1cm4gY29kZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvYmFyZV9kb2NfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9jb21tb24vSW5jb21lVGF4RGV0YWlscy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9iYXJlX2RvY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2NvbW1vbi9JbmNvbWVUYXhEZXRhaWxzLmphdmEKaW5kZXggNTdiMDBlOC4uMzUwYjE2ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9iYXJlX2RvY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2NvbW1vbi9JbmNvbWVUYXhEZXRhaWxzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9iYXJlX2RvY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2NvbW1vbi9JbmNvbWVUYXhEZXRhaWxzLmphdmEKQEAgLTE3LDEwICsxNywxMCBAQAogcGFja2FnZSBjb21tb247CiAKIHB1YmxpYyBjbGFzcyBJbmNvbWVUYXhEZXRhaWxzIHsKLQlwdWJsaWMgU3RyaW5nIGZpcnN0TmFtZTsKLQlwdWJsaWMgU3RyaW5nIGxhc3ROYW1lOwotCXB1YmxpYyBTdHJpbmcgc3RhdHVzOyAvLyBzYWxhcmllZCwgc2VsZi1lbXBsb3llZCwgc3R1ZGVudC4KLQlwdWJsaWMgbG9uZyBhbm51YWxJbmNvbWU7CisgICAgcHVibGljIFN0cmluZyBmaXJzdE5hbWU7CisgICAgcHVibGljIFN0cmluZyBsYXN0TmFtZTsKKyAgICBwdWJsaWMgU3RyaW5nIHN0YXR1czsgLy8gc2FsYXJpZWQsIHNlbGYtZW1wbG95ZWQsIHN0dWRlbnQuCisgICAgcHVibGljIGxvbmcgYW5udWFsSW5jb21lOwogfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvYmFyZV9kb2NfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9lbmRwb2ludC9DYWxjdWxhdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2JhcmVfZG9jX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvZW5kcG9pbnQvQ2FsY3VsYXRvci5qYXZhCmluZGV4IGZkNTM3MjYuLjBmN2ZkY2QgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvYmFyZV9kb2NfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9lbmRwb2ludC9DYWxjdWxhdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9iYXJlX2RvY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2VuZHBvaW50L0NhbGN1bGF0b3IuamF2YQpAQCAtMjgsMjAgKzI4LDIwIEBACiApCiBAU09BUEJpbmRpbmcocGFyYW1ldGVyU3R5bGUgPSBTT0FQQmluZGluZy5QYXJhbWV0ZXJTdHlsZS5CQVJFKQogcHVibGljIGNsYXNzIENhbGN1bGF0b3IgewotCXB1YmxpYyBDYWxjdWxhdG9yKCkge30KKyAgICBwdWJsaWMgQ2FsY3VsYXRvcigpIHt9CiAKLQlAV2ViTWV0aG9kCi0JcHVibGljIGludCBhZGQoCi0JCQkvKgotCQkJQFdlYlBhcmFtKG5hbWUgPSAibnVtYmVyMSIsIHRhcmdldE5hbWVzcGFjZSA9ICJodHRwOi8vZXhhbXBsZS53ZWIuc2VydmljZS9DYWxjdWxhdG9yIiwgcGFydE5hbWUgPSAicGFydDEiKQotCQkJaW50IGkgLCAqLwotCQkJQFdlYlBhcmFtKG5hbWUgPSAibnVtYmVyMiIsIHRhcmdldE5hbWVzcGFjZSA9ICJodHRwOi8vZXhhbXBsZS53ZWIuc2VydmljZS9DYWxjdWxhdG9yIiwgcGFydE5hbWUgPSAicGFydDIiKQotCQkJaW50IGoKLQkJCSkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCQkJaW50IGkgPSA1MDsKKyAgICBAV2ViTWV0aG9kCisgICAgcHVibGljIGludCBhZGQoCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgQFdlYlBhcmFtKG5hbWUgPSAibnVtYmVyMSIsIHRhcmdldE5hbWVzcGFjZSA9ICJodHRwOi8vZXhhbXBsZS53ZWIuc2VydmljZS9DYWxjdWxhdG9yIiwgcGFydE5hbWUgPSAicGFydDEiKQorICAgICAgICAgICAgaW50IGkgLCAqLworICAgICAgICAgICAgQFdlYlBhcmFtKG5hbWUgPSAibnVtYmVyMiIsIHRhcmdldE5hbWVzcGFjZSA9ICJodHRwOi8vZXhhbXBsZS53ZWIuc2VydmljZS9DYWxjdWxhdG9yIiwgcGFydE5hbWUgPSAicGFydDIiKQorICAgICAgICAgICAgaW50IGoKKyAgICAgICAgICAgICkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgICAgICAgICAgaW50IGkgPSA1MDsKICAgICAgICAgICAgICAgICBpbnQgayA9IGkgK2ogOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSkJJIFRlc3QgOjogYmFyZS1ycGMtbGl0ZXJhbCBzZV9jb25zdW1lcl9zZV9wcm92aWRlciA6ICIgKyBpICsgIisiICsgaiArIiA9ICIgKyBrKTsKLQkJcmV0dXJuIGs7Ci0JfQorICAgICAgICByZXR1cm4gazsKKyAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvYmFyZV9kb2NfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9iYXJlX2RvY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL3dlYi54bWwKaW5kZXggMDdlMTQ3Ny4uNzk4YzY5YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9iYXJlX2RvY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9iYXJlX2RvY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL3dlYi54bWwKQEAgLTE4LDMwICsxOCwzMCBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotCQkJaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CisgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQorICAgICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAKLQk8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIENhbGN1bGF0b3IgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV0FSPC9kaXNwbGF5LW5hbWU+CisgICAgPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBDYWxjdWxhdG9yIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgIDxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldBUjwvZGlzcGxheS1uYW1lPgogCi0JPHNlcnZsZXQ+Ci0JCTxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgQ2FsY3VsYXRvciBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JCTxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KLQkJPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+Ci0JCTxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkNhbGN1bGF0b3I8L3NlcnZsZXQtY2xhc3M+Ci0JCTxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgotCTwvc2VydmxldD4KKyAgICA8c2VydmxldD4KKyAgICAgICAgPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBDYWxjdWxhdG9yIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgorICAgICAgICA8c2VydmxldC1uYW1lPkNhbGN1bGF0b3I8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuQ2FsY3VsYXRvcjwvc2VydmxldC1jbGFzcz4KKyAgICAgICAgPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+CisgICAgPC9zZXJ2bGV0PgogCi0JPHNlcnZsZXQtbWFwcGluZz4KLQkJPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+Ci0JCTx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9DYWxjdWxhdG9yU2VydmljZTwvdXJsLXBhdHRlcm4+Ci0JPC9zZXJ2bGV0LW1hcHBpbmc+CisgICAgPHNlcnZsZXQtbWFwcGluZz4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9DYWxjdWxhdG9yU2VydmljZTwvdXJsLXBhdHRlcm4+CisgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiAKLQk8c2Vzc2lvbi1jb25maWc+Ci0JCTxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KLQk8L3Nlc3Npb24tY29uZmlnPgorICAgIDxzZXNzaW9uLWNvbmZpZz4KKyAgICAgICAgPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgorICAgIDwvc2Vzc2lvbi1jb25maWc+CiAKIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9iYXJlX2RvY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2JhcmVfZG9jX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQppbmRleCBjNmFiZDNjLi4xYzQ4NmJjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2JhcmVfZG9jX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2JhcmVfZG9jX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzAsMzggKzMwLDM4IEBACiAKICAgICAgICBAV2ViU2VydmljZVJlZihuYW1lPSJzdW4td2ViLnNlcnZpY2VyZWYvY2FsY3VsYXRvciIpIENhbGN1bGF0b3JTZXJ2aWNlIHNlcnZpY2U7CiAKLSAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApIAotCQl0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24geworICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkKKyAgICAgICAgdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgICAgZG9Qb3N0KHJlcSwgcmVzcCk7CiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkKICAgICAgICAgICAgICAgdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKLQkgICAgUHJpbnRXcml0ZXIgb3V0PW51bGw7CisgICAgICAgIFByaW50V3JpdGVyIG91dD1udWxsOwogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBTZXJ2aWNlIGlzIDoiICsgc2VydmljZSk7CiAgICAgICAgICAgICAgICAgcmVzcC5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7Ci0gICAgICAgICAgICAJb3V0ID0gcmVzcC5nZXRXcml0ZXIoKTsKKyAgICAgICAgICAgICAgICBvdXQgPSByZXNwLmdldFdyaXRlcigpOwogICAgICAgICAgICAgICAgIENhbGN1bGF0b3IgcG9ydCA9IHNlcnZpY2UuZ2V0Q2FsY3VsYXRvclBvcnQoKTsKIAotCQlpbnQgayA9IHBvcnQuYWRkKDUwNSk7Ci0JCXByaW50U3VjY2VzcygiU1VDQ0VTUyA6OiBTdW0gb2YgNTA1IGFuZCA1MCBpcyA6ICIsIG91dCxrKTsKKyAgICAgICAgaW50IGsgPSBwb3J0LmFkZCg1MDUpOworICAgICAgICBwcmludFN1Y2Nlc3MoIlNVQ0NFU1MgOjogU3VtIG9mIDUwNSBhbmQgNTAgaXMgOiAiLCBvdXQsayk7CiAKIAogICAgICAgICAgICAgfSBjYXRjaChqYXZhLmxhbmcuRXhjZXB0aW9uIGUpIHsKLQkJLy9lLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICAJcHJpbnRGYWlsdXJlKG91dCwgZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAvL2UucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICBwcmludEZhaWx1cmUob3V0LCBlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICB9IGZpbmFsbHkgewotCQlpZihvdXQgIT0gbnVsbCkgeworICAgICAgICBpZihvdXQgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICBvdXQuZmx1c2goKTsKICAgICAgICAgICAgICAgICAgICAgb3V0LmNsb3NlKCk7Ci0JCX0KLQkgICAgfQorICAgICAgICB9CisgICAgICAgIH0KICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBwcmludEZhaWx1cmUoUHJpbnRXcml0ZXIgb3V0LCBTdHJpbmcgZXJyTXNnKSB7Ci0JCWlmKG91dCA9PSBudWxsKSByZXR1cm47Ci0JCW91dC5wcmludGxuKCI8aHRtbD4iKTsKKyAgICAgICAgaWYob3V0ID09IG51bGwpIHJldHVybjsKKyAgICAgICAgb3V0LnByaW50bG4oIjxodG1sPiIpOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aGVhZD4iKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPHRpdGxlPlRlc3RTZXJ2bGV0PC90aXRsZT4iKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9oZWFkPiIpOwpAQCAtNzQsMTMgKzc0LDEzIEBACiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgcHJpbnRTdWNjZXNzKFN0cmluZyBtZXNzYWdlLCBQcmludFdyaXRlciBvdXQsIGxvbmcgcmVzdWx0KSB7Ci0JCWlmKG91dCA9PSBudWxsKSByZXR1cm47CisgICAgICAgIGlmKG91dCA9PSBudWxsKSByZXR1cm47CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIlxuXG4iKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbihtZXNzYWdlICsgcmVzdWx0KTsKICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBwcmludFN1Y2Nlc3MoU3RyaW5nIG1lc3NhZ2UsIFByaW50V3JpdGVyIG91dCwgU3RyaW5nIHJlc3VsdCkgewotCQlpZihvdXQgPT0gbnVsbCkgcmV0dXJuOworICAgICAgICBpZihvdXQgPT0gbnVsbCkgcmV0dXJuOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJcblxuIik7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4obWVzc2FnZSArIHJlc3VsdCk7CiAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2J1aWxkLnhtbAppbmRleCAwMDYwZjA4Li41Y2UzY2EyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2J1aWxkLnhtbApAQCAtMzMsNyArMzMsNyBAQAogICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7ZW52LkFQU19IT01FfS90ZXN0X3Jlc3VsdHMueG1sIi8+CiAgICAgICAgIDxyZWNvcmQgbmFtZT0iamJpLXNlcnZpY2VlbmdpbmUub3V0cHV0IiBhY3Rpb249InN0YXJ0IiAvPgogICAgICAgICA8YW50IGRpcj0ic2VydmVyIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJjbGllbnQiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9ImNsaWVudCIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9ImpheC1ycGMiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxhbnQgZGlyPSJzb2FwZmF1bHQiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxhbnQgZGlyPSJvbmV3YXkiIHRhcmdldD0iYWxsIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2NsaWVudC93ZWIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvY2xpZW50L3dlYi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDNmODMwMTAuLmUzMDJkNWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvY2xpZW50L3dlYi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvY2xpZW50L3dlYi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImpzcjIwOC1pbnRlZ3JhdGlvbi13ZWItY2xpZW50Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSIuL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9Ii4vc3VuLXdlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvY2xpZW50L3dlYi9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2NsaWVudC93ZWIvYnVpbGQueG1sCmluZGV4IDNmMWNhYzkuLjNhYmM4YmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvY2xpZW50L3dlYi9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9jbGllbnQvd2ViL2J1aWxkLnhtbApAQCAtNjQsNyArNjQsNyBAQAogICAgICAgICAgICAgICAgdmFsdWU9Ii1rZWVwIC1kICR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL2NsYXNzZXMgaHR0cDovL2xvY2FsaG9zdDo4MDgwL2pzcjIwOC1pbnRlZ3JhdGlvbi13ZWItY2xpZW50L3dlYnNlcnZpY2UvQ2FsY3VsYXRvclNlcnZpY2U/V1NETCIvPgogICAgIDwvYW50Y2FsbD4KICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL2NsYXNzZXMiCi0gICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2oyZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXJ0Lmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy10b29scy5qYXIiIAorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9qMmVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy1ydC5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtdG9vbHMuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IndlYmNsaWVudC8qKiIvPgogICAgICAgPGNvcHkgZmlsZT0iLi9jbGllbnQtd2ViLnhtbCIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi93ZWIueG1sIi8+CiAgICAgICA8Y29weSBmaWxlPSIuL2NsaWVudC1zdW4td2ViLnhtbCIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi9zdW4td2ViLnhtbCIvPgpAQCAtMTEwLDExICsxMTAsMTEgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY2xpZW50Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bnRlc3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgotICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IiAKLSAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIAorICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJjbGllbnQvKioiLz4KICAgICAgIDx1bmphciBzcmM9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiBkZXN0PSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iY2xpZW50LlRlc3RDbGllbnQiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9jbGllbnQvd2ViL2NsaWVudC13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9jbGllbnQvd2ViL2NsaWVudC13ZWIueG1sCmluZGV4IGVlYjczMGQuLjc5NWIwNTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvY2xpZW50L3dlYi9jbGllbnQtd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2NsaWVudC93ZWIvY2xpZW50LXdlYi54bWwKQEAgLTIwLDcgKzIwLDcgQEAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0gICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSAKKyAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KICAgPGRlc2NyaXB0aW9uPkEgdGVzdCBhcHBsaWNhdGlvbjwvZGVzY3JpcHRpb24+CiAgIDxkaXNwbGF5LW5hbWU+V2ViVGllcjwvZGlzcGxheS1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9jbGllbnQvd2ViL2NsaWVudC9UZXN0Q2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2NsaWVudC93ZWIvY2xpZW50L1Rlc3RDbGllbnQuamF2YQppbmRleCBhYWU5Y2I0Li5kZDRlNzBjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2NsaWVudC93ZWIvY2xpZW50L1Rlc3RDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2NsaWVudC93ZWIvY2xpZW50L1Rlc3RDbGllbnQuamF2YQpAQCAtMjksNyArMjksNyBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7Ci0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RJZCA9ICJqYmktc2VydmljZWVuZ2luZS9jbGllbnQvd2ViIjsKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdElkID0gImpiaS1zZXJ2aWNlZW5naW5lL2NsaWVudC93ZWIiOwogCiAgICAgcHVibGljIGJvb2xlYW4gZm91bmQxID0gZmFsc2U7CiAgICAgcHVibGljIGJvb2xlYW4gZm91bmQyID0gZmFsc2U7CkBAIC00Nyw3ICs0Nyw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnQgY29kZSA9IGludm9rZVNlcnZsZXQodXJsKTsKICAgICAgICAgICAgIHJlcG9ydChjb2RlKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICB9CkBAIC02NCw5ICs2NCw5IEBACiAgICAgICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgICAgICAgIGxvZyhsaW5lKTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiU28gdGhlIFJFU1VMVCBPRiBDYWxjdWxhdG9yIGFkZCBTRVJWSUNFIElTIikgIT0gLTEpCi0JCWZvdW5kMSA9IHRydWU7CisgICAgICAgIGZvdW5kMSA9IHRydWU7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIlszXSIpICE9IC0xKQotCQlmb3VuZDIgPSB0cnVlOworICAgICAgICBmb3VuZDIgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjb2RlOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvY2xpZW50L3dlYi9lbmRwb2ludC9DYWxjdWxhdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2NsaWVudC93ZWIvZW5kcG9pbnQvQ2FsY3VsYXRvci5qYXZhCmluZGV4IDY5NTEzMjAuLmJlZDFlMGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvY2xpZW50L3dlYi9lbmRwb2ludC9DYWxjdWxhdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9jbGllbnQvd2ViL2VuZHBvaW50L0NhbGN1bGF0b3IuamF2YQpAQCAtMjUsMTMgKzI1LDEzIEBACiAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZXhhbXBsZS53ZWIuc2VydmljZS9DYWxjdWxhdG9yIgogKQogcHVibGljIGNsYXNzIENhbGN1bGF0b3IgewotCXB1YmxpYyBDYWxjdWxhdG9yKCkge30KKyAgICBwdWJsaWMgQ2FsY3VsYXRvcigpIHt9CiAKLQlAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9ImFkZCIsIGFjdGlvbj0idXJuOkFkZCIpCi0JcHVibGljIGludCBhZGQoaW50IGksIGludCBqKSB7CisgICAgQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJhZGQiLCBhY3Rpb249InVybjpBZGQiKQorICAgIHB1YmxpYyBpbnQgYWRkKGludCBpLCBpbnQgaikgewogICAgICAgICAgICAgICAgIGludCBrID0gaSAraiA7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGkgKyAiKyIgKyBqICsiID0gIiArIGspOwotIAotCQlyZXR1cm4gazsKLQl9CisKKyAgICAgICAgcmV0dXJuIGs7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9jbGllbnQvd2ViL3NvYXAtYmluZGluZy1zdS1hbGFza2EvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvY2xpZW50L3dlYi9zb2FwLWJpbmRpbmctc3UtYWxhc2thL2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKaW5kZXggM2JjODBiOS4uODBmMmU1ZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9jbGllbnQvd2ViL3NvYXAtYmluZGluZy1zdS1hbGFza2EvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2NsaWVudC93ZWIvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCkBAIC0xOSw5ICsxOSw5IEBACiAKIDwhLS0gamJpLnhtbCBmaWxlIGZvciB0aGUgU09BUCBiaW5kaW5nIGRlcGxveW1lbnRzIGJpbmRpbmcuIC0tPgogPGpiaQotICAgIHZlcnNpb249IjEuMCIgCi0gICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIgCi0gICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCisgICAgdmVyc2lvbj0iMS4wIgorICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSAuL2piaS54c2QiPgogICA8c2VydmljZS1hc3NlbWJseT4KICAgICA8aWRlbnRpZmljYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2NsaWVudC93ZWIvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9zdS9NRVRBLUlORi9qYmkueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9jbGllbnQvd2ViL3NvYXAtYmluZGluZy1zdS1hbGFza2Evc3UvTUVUQS1JTkYvamJpLnhtbAppbmRleCAzMzk3NGY5Li40MzNiZDE5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2NsaWVudC93ZWIvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9zdS9NRVRBLUlORi9qYmkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvY2xpZW50L3dlYi9zb2FwLWJpbmRpbmctc3UtYWxhc2thL3N1L01FVEEtSU5GL2piaS54bWwKQEAgLTE4LDE1ICsxOCwxNSBAQAogLS0+CiAKIDxqYmkgdmVyc2lvbj0iMS4wIgotCSB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKLQkgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIgCi0JIHhtbG5zOmphdmFlc2I9Imh0dHA6Ly9qYXZhLnN1bi5jb20iCi0JIHhtbG5zOnRucz0iaHR0cDovL2V4YW1wbGUud2ViLnNlcnZpY2UvQ2FsY3VsYXRvciIKLQkgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgamJpLnhzZCI+Ci0JPHNlcnZpY2VzIGJpbmRpbmctY29tcG9uZW50PSJ0cnVlIj4JCQotCSA8cHJvdmlkZXMgaW50ZXJmYWNlLW5hbWU9InRuczpDYWxjdWxhdG9yU2VydmljZUludGVyZmFjZSIKKyAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIKKyAgICAgeG1sbnM6amF2YWVzYj0iaHR0cDovL2phdmEuc3VuLmNvbSIKKyAgICAgeG1sbnM6dG5zPSJodHRwOi8vZXhhbXBsZS53ZWIuc2VydmljZS9DYWxjdWxhdG9yIgorICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSBqYmkueHNkIj4KKyAgICA8c2VydmljZXMgYmluZGluZy1jb21wb25lbnQ9InRydWUiPgorICAgICA8cHJvdmlkZXMgaW50ZXJmYWNlLW5hbWU9InRuczpDYWxjdWxhdG9yU2VydmljZUludGVyZmFjZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS1uYW1lPSJ0bnM6Q2FsY3VsYXRvclNlcnZpY2UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50LW5hbWU9IkNhbGN1bGF0b3JQb3J0Ii8+CiAgICAgICAgICAgICAgICAgPGFydGlmYWN0cyB4bWxucz0iIiByb2xlPSJwcm92aWRlciIgZmlsZS1uYW1lPSJlbmRwb2ludHMueG1sIiB0eXBlPSJ4bWwiLz4KLQk8L3NlcnZpY2VzPgorICAgIDwvc2VydmljZXM+CiA8L2piaT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvY2xpZW50L3dlYi9zb2FwLWJpbmRpbmctc3UvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvY2xpZW50L3dlYi9zb2FwLWJpbmRpbmctc3UvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbAppbmRleCBkNWQ5ZDA5Li45ZTZjZjNlIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2NsaWVudC93ZWIvc29hcC1iaW5kaW5nLXN1L2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9jbGllbnQvd2ViL3NvYXAtYmluZGluZy1zdS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCkBAIC0xOSw5ICsxOSw5IEBACiAKIDwhLS0gamJpLnhtbCBmaWxlIGZvciB0aGUgU09BUCBiaW5kaW5nIGRlcGxveW1lbnRzIGJpbmRpbmcuIC0tPgogPGpiaQotICAgIHZlcnNpb249IjEuMCIgCi0gICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIgCi0gICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCisgICAgdmVyc2lvbj0iMS4wIgorICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSAuL2piaS54c2QiPgogICA8c2VydmljZS1hc3NlbWJseT4KICAgICA8aWRlbnRpZmljYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2NsaWVudC93ZWIvc29hcC1iaW5kaW5nLXN1L3N1L01FVEEtSU5GL2piaS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2NsaWVudC93ZWIvc29hcC1iaW5kaW5nLXN1L3N1L01FVEEtSU5GL2piaS54bWwKaW5kZXggZWEyMDI3Yy4uNDgzYzU1NyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9jbGllbnQvd2ViL3NvYXAtYmluZGluZy1zdS9zdS9NRVRBLUlORi9qYmkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvY2xpZW50L3dlYi9zb2FwLWJpbmRpbmctc3Uvc3UvTUVUQS1JTkYvamJpLnhtbApAQCAtMTgsMTQgKzE4LDE0IEBACiAtLT4KIAogPGpiaSB2ZXJzaW9uPSIxLjAiCi0JIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAotCSB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIiAKLQkgeG1sbnM6dG5zPSJodHRwOi8vZXhhbXBsZS53ZWIuc2VydmljZS9DYWxjdWxhdG9yIgotCSB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSBqYmkueHNkIj4KLQk8c2VydmljZXMgYmluZGluZy1jb21wb25lbnQ9InRydWUiPgkJCi0JCTxwcm92aWRlcyBpbnRlcmZhY2UtbmFtZT0idG5zOkNhbGN1bGF0b3JTZXJ2aWNlSW50ZXJmYWNlIgotICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLW5hbWU9InRuczpDYWxjdWxhdG9yU2VydmljZSIgCisgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiCisgICAgIHhtbG5zOnRucz0iaHR0cDovL2V4YW1wbGUud2ViLnNlcnZpY2UvQ2FsY3VsYXRvciIKKyAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgamJpLnhzZCI+CisgICAgPHNlcnZpY2VzIGJpbmRpbmctY29tcG9uZW50PSJ0cnVlIj4KKyAgICAgICAgPHByb3ZpZGVzIGludGVyZmFjZS1uYW1lPSJ0bnM6Q2FsY3VsYXRvclNlcnZpY2VJbnRlcmZhY2UiCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtbmFtZT0idG5zOkNhbGN1bGF0b3JTZXJ2aWNlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludC1uYW1lPSJDYWxjdWxhdG9yUG9ydCIvPgogICAgICAgICAgICAgICAgIDxhcnRpZmFjdHMgeG1sbnM9IiIgcm9sZT0icHJvdmlkZXIiIGZpbGUtbmFtZT0iZW5kcG9pbnRzLnhtbCIgdHlwZT0ieG1sIi8+Ci0JPC9zZXJ2aWNlcz4KKyAgICA8L3NlcnZpY2VzPgogPC9qYmk+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2NsaWVudC93ZWIvc29hcC1iaW5kaW5nLXN1L3N1L2VuZHBvaW50cy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2NsaWVudC93ZWIvc29hcC1iaW5kaW5nLXN1L3N1L2VuZHBvaW50cy54bWwKaW5kZXggMjQ4NDc1Mi4uZjY0MTY1NSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9jbGllbnQvd2ViL3NvYXAtYmluZGluZy1zdS9zdS9lbmRwb2ludHMueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvY2xpZW50L3dlYi9zb2FwLWJpbmRpbmctc3Uvc3UvZW5kcG9pbnRzLnhtbApAQCAtMjEsMjIgKzIxLDIyIEBACiAgICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cuc3VuLmNvbS9ucy9qYmkvY29tcG9uZW50L3NvYXAvZGVwbG95IC4vZW5kcG9pbnRzLnhzZCI+CiA8c2VydmljZS1uYW1lPgotCTxuYW1lc3BhY2UtdXJpPmh0dHA6Ly9leGFtcGxlLndlYi5zZXJ2aWNlL0NhbGN1bGF0b3I8L25hbWVzcGFjZS11cmk+Ci0JPGxvY2FsLXBhcnQ+Q2FsY3VsYXRvclNlcnZpY2U8L2xvY2FsLXBhcnQ+CisgICAgPG5hbWVzcGFjZS11cmk+aHR0cDovL2V4YW1wbGUud2ViLnNlcnZpY2UvQ2FsY3VsYXRvcjwvbmFtZXNwYWNlLXVyaT4KKyAgICA8bG9jYWwtcGFydD5DYWxjdWxhdG9yU2VydmljZTwvbG9jYWwtcGFydD4KICAgICA8L3NlcnZpY2UtbmFtZT4KICAgICA8ZW5kcG9pbnQtbmFtZT5DYWxjdWxhdG9yUG9ydDwvZW5kcG9pbnQtbmFtZT4KICAgICA8ZW5kcG9pbnQtcm9sZT5wcm92aWRlcjwvZW5kcG9pbnQtcm9sZT4KLSAgICA8YWRkcmVzcy1sb2NhdGlvbj5odHRwOi8vbG9jYWxob3N0OjgwODAvanNyMjA4LWludGVncmF0aW9uLXdlYi1jbGllbnQvd2Vic2VydmljZS9DYWxjdWxhdG9yU2VydmljZTwvYWRkcmVzcy1sb2NhdGlvbj4gCi0gICAgPHN0eWxlPmh0dHA6Ly93d3cudzMub3JnLzIwMDQvMDgvd3NkbC9zdHlsZS9ycGM8L3N0eWxlPiAgICAgICAgICAgICAKKyAgICA8YWRkcmVzcy1sb2NhdGlvbj5odHRwOi8vbG9jYWxob3N0OjgwODAvanNyMjA4LWludGVncmF0aW9uLXdlYi1jbGllbnQvd2Vic2VydmljZS9DYWxjdWxhdG9yU2VydmljZTwvYWRkcmVzcy1sb2NhdGlvbj4KKyAgICA8c3R5bGU+aHR0cDovL3d3dy53My5vcmcvMjAwNC8wOC93c2RsL3N0eWxlL3JwYzwvc3R5bGU+CiAgICAgPG9wZXJhdGlvbj4KICAgICAgICAgPG5hbWU+YWRkPC9uYW1lPgotICAgICAgICA8bWVwPmh0dHA6Ly93d3cudzMub3JnLzIwMDQvMDgvd3NkbC9pbi1vdXQ8L21lcD4gICAgICAgICAgICAgICAgICAgIAorICAgICAgICA8bWVwPmh0dHA6Ly93d3cudzMub3JnLzIwMDQvMDgvd3NkbC9pbi1vdXQ8L21lcD4KICAgICAgICAgPHNvYXBhY3Rpb24+IiI8L3NvYXBhY3Rpb24+CiAgICAgICAgIDxpbnB1dD4KICAgICAgICAgICA8bmFtZXNwYWNlLXVyaT5odHRwOi8vZXhhbXBsZS53ZWIuc2VydmljZS9DYWxjdWxhdG9yPC9uYW1lc3BhY2UtdXJpPgogICAgICAgICA8L2lucHV0PgogICAgICAgICA8b3V0cHV0PgogICAgICAgICAgIDxuYW1lc3BhY2UtdXJpPmh0dHA6Ly9leGFtcGxlLndlYi5zZXJ2aWNlL0NhbGN1bGF0b3I8L25hbWVzcGFjZS11cmk+Ci0gICAgICAgIDwvb3V0cHV0PiAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIDwvb3V0cHV0PgogICAgIDwvb3BlcmF0aW9uPgotPC9lbmRwb2ludD4gCis8L2VuZHBvaW50PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9jbGllbnQvd2ViL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2NsaWVudC93ZWIvd2ViLnhtbAppbmRleCAwN2UxNDc3Li43OThjNjliIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2NsaWVudC93ZWIvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2NsaWVudC93ZWIvd2ViLnhtbApAQCAtMTgsMzAgKzE4LDMwIEBACiAtLT4KIAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCi0JCQlodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KKyAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCisgICAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KIAotCTxkZXNjcmlwdGlvbj5XZWJUaWVyIGZvciB0aGUgQ2FsY3VsYXRvciBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQk8ZGlzcGxheS1uYW1lPkNhbGN1bGF0b3JXQVI8L2Rpc3BsYXktbmFtZT4KKyAgICA8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIENhbGN1bGF0b3IgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV0FSPC9kaXNwbGF5LW5hbWU+CiAKLQk8c2VydmxldD4KLQkJPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBDYWxjdWxhdG9yIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQkJPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgotCQk8c2VydmxldC1uYW1lPkNhbGN1bGF0b3I8L3NlcnZsZXQtbmFtZT4KLQkJPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuQ2FsY3VsYXRvcjwvc2VydmxldC1jbGFzcz4KLQkJPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+Ci0JPC9zZXJ2bGV0PgorICAgIDxzZXJ2bGV0PgorICAgICAgICA8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIENhbGN1bGF0b3IgV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgICAgICA8ZGlzcGxheS1uYW1lPkNhbGN1bGF0b3JXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+Q2FsY3VsYXRvcjwvc2VydmxldC1uYW1lPgorICAgICAgICA8c2VydmxldC1jbGFzcz5lbmRwb2ludC5DYWxjdWxhdG9yPC9zZXJ2bGV0LWNsYXNzPgorICAgICAgICA8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KKyAgICA8L3NlcnZsZXQ+CiAKLQk8c2VydmxldC1tYXBwaW5nPgotCQk8c2VydmxldC1uYW1lPkNhbGN1bGF0b3I8L3NlcnZsZXQtbmFtZT4KLQkJPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL0NhbGN1bGF0b3JTZXJ2aWNlPC91cmwtcGF0dGVybj4KLQk8L3NlcnZsZXQtbWFwcGluZz4KKyAgICA8c2VydmxldC1tYXBwaW5nPgorICAgICAgICA8c2VydmxldC1uYW1lPkNhbGN1bGF0b3I8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL0NhbGN1bGF0b3JTZXJ2aWNlPC91cmwtcGF0dGVybj4KKyAgICA8L3NlcnZsZXQtbWFwcGluZz4KIAotCTxzZXNzaW9uLWNvbmZpZz4KLQkJPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgotCTwvc2Vzc2lvbi1jb25maWc+CisgICAgPHNlc3Npb24tY29uZmlnPgorICAgICAgICA8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+CisgICAgPC9zZXNzaW9uLWNvbmZpZz4KIAogPC93ZWItYXBwPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2NsaWVudC93ZWIvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvY2xpZW50L3dlYi93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGU2NTNkNDYuLmIzOGNhN2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvY2xpZW50L3dlYi93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvY2xpZW50L3dlYi93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yOCw4ICsyOCw4IEBACiAKICAgICAgICBAV2ViU2VydmljZVJlZihuYW1lPSJzdW4td2ViLnNlcnZpY2VyZWYvY2FsY3VsYXRvciIpIENhbGN1bGF0b3JTZXJ2aWNlIHNlcnZpY2U7CiAKLSAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApIAotCQl0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24geworICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkKKyAgICAgICAgdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgICAgZG9Qb3N0KHJlcSwgcmVzcCk7CiAgICAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2VqYi1qbXNiYy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9lamItam1zYmMvYnVpbGQucHJvcGVydGllcwppbmRleCBkNDBiZTg2Li44NjNjOTNjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2VqYi1qbXNiYy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvZWpiLWptc2JjL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ianNyMjA4LWludGVncmF0aW9uIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSIuY29uc3VtZXIvL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9Ii4vY29uc3VtZXIvc3VuLXdlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvZWpiLWptc2JjL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvZWpiLWptc2JjL2J1aWxkLnhtbAppbmRleCA0ZjhkZDBiLi43NTIyMzQ0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2VqYi1qbXNiYy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9lamItam1zYmMvYnVpbGQueG1sCkBAIC01NCwxMCArNTQsMTAgQEAKICAgICAgIDxta2RpciBkaXI9IiR7YXNzZW1ibGUuZGlyfSIvPgogICAgICAgPGphciBkZXN0ZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tZWpiLmphciIKICAgICAgICAgYmFzZWRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCi0JaW5jbHVkZXM9ImVuZHBvaW50LyoqIj4KKyAgICBpbmNsdWRlcz0iZW5kcG9pbnQvKioiPgogICAgICAgPC9qYXI+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0icHJvdmlkZXIvZW5kcG9pbnQiLz4KQEAgLTk5LDggKzk5LDggQEAKICAgICAgICAgICAgICAgIHZhbHVlPSIta2VlcCAtZCAke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi9jbGFzc2VzIGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9IZWxsb0VKQlNlcnZpY2UvSGVsbG9FSkI/V1NETCIvPgogICAgICAgPC9hbnRjYWxsPgogICAgICAgPGphdmFjIHNyY2Rpcj0iY29uc3VtZXIiIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL2NsYXNzZXMiCi0gICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2oyZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXJ0Lmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy10b29scy5qYXIiIAotCSAgICBkZWJ1Zz0ib24iCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2oyZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXJ0Lmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy10b29scy5qYXIiCisgICAgICAgIGRlYnVnPSJvbiIKICAgICAgICAgICAgIGluY2x1ZGVzPSJ3ZWJjbGllbnQvKioiLz4KICAgICAgIDxjb3B5IGZpbGU9Ii4vY29uc3VtZXIvY2xpZW50LXdlYi54bWwiIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvd2ViLnhtbCIvPgogICAgICAgPGNvcHkgZmlsZT0iLi9jb25zdW1lci9jbGllbnQtc3VuLXdlYi54bWwiIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvc3VuLXdlYi54bWwiLz4KQEAgLTE3OCwxMiArMTc4LDEyIEBACiAgICAgICAgIDxhcmcgbGluZT0iJHthcHBuYW1lfS1lamIiLz4KICAgICAgIDwvZXhlYz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVudGVzdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGVjaG8gbWVzc2FnZT0iUnVubmluZyB0aGUgdGVzdCBjbGllbnQiLz4KICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgotICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IiAKLSAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIAorICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJjb25zdW1lci9jbGllbnQvKioiLz4KICAgICAgIDx1bmphciBzcmM9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiBkZXN0PSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iY2xpZW50LlRlc3RDbGllbnQiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9lamItam1zYmMvY29uc3VtZXIvY2xpZW50LXN1bi13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9lamItam1zYmMvY29uc3VtZXIvY2xpZW50LXN1bi13ZWIueG1sCmluZGV4IGQ2ZTg5ZGMuLmQ0YTBmM2UgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvZWpiLWptc2JjL2NvbnN1bWVyL2NsaWVudC1zdW4td2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2VqYi1qbXNiYy9jb25zdW1lci9jbGllbnQtc3VuLXdlYi54bWwKQEAgLTI2LDEyICsyNiwxMiBAQAogICAgIDxwb3J0LWluZm8+CiAgICAgICA8c2VydmljZS1lbmRwb2ludC1pbnRlcmZhY2U+ZW5kcG9pbnQuZWpiLkhlbGxvPC9zZXJ2aWNlLWVuZHBvaW50LWludGVyZmFjZT4KICAgICAgIDx3c2RsLXBvcnQ+Ci0JPG5hbWVzcGFjZVVSST5odHRwOi8vZW5kcG9pbnQvZWpiPC9uYW1lc3BhY2VVUkk+Ci0JPGxvY2FscGFydD5IZWxsb0VKQlBvcnQ8L2xvY2FscGFydD4KKyAgICA8bmFtZXNwYWNlVVJJPmh0dHA6Ly9lbmRwb2ludC9lamI8L25hbWVzcGFjZVVSST4KKyAgICA8bG9jYWxwYXJ0PkhlbGxvRUpCUG9ydDwvbG9jYWxwYXJ0PgogICAgICAgPC93c2RsLXBvcnQ+CiAgICAgICA8c3R1Yi1wcm9wZXJ0eT4KLQk8bmFtZT5qYmktZW5hYmxlZDwvbmFtZT4KLQk8dmFsdWU+dHJ1ZTwvdmFsdWU+CisgICAgPG5hbWU+amJpLWVuYWJsZWQ8L25hbWU+CisgICAgPHZhbHVlPnRydWU8L3ZhbHVlPgogICAgICAgPC9zdHViLXByb3BlcnR5PgogICAgIDwvcG9ydC1pbmZvPgogICAgIDx3c2RsLW92ZXJyaWRlPmh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9IZWxsb0VKQlNlcnZpY2UvSGVsbG9FSkI/V1NETDwvd3NkbC1vdmVycmlkZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvZWpiLWptc2JjL2NvbnN1bWVyL2NsaWVudC13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9lamItam1zYmMvY29uc3VtZXIvY2xpZW50LXdlYi54bWwKaW5kZXggMTBjMzI5NS4uMTljMTMxYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9lamItam1zYmMvY29uc3VtZXIvY2xpZW50LXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9lamItam1zYmMvY29uc3VtZXIvY2xpZW50LXdlYi54bWwKQEAgLTIwLDcgKzIwLDcgQEAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0gICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSAKKyAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KICAgPGRlc2NyaXB0aW9uPkEgdGVzdCBhcHBsaWNhdGlvbjwvZGVzY3JpcHRpb24+CiAgIDxkaXNwbGF5LW5hbWU+V2ViVGllcjwvZGlzcGxheS1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9lamItam1zYmMvY29uc3VtZXIvY2xpZW50L1Rlc3RDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvZWpiLWptc2JjL2NvbnN1bWVyL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKaW5kZXggMjcxMjgxZC4uMTdiZGIwNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9lamItam1zYmMvY29uc3VtZXIvY2xpZW50L1Rlc3RDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2VqYi1qbXNiYy9jb25zdW1lci9jbGllbnQvVGVzdENsaWVudC5qYXZhCkBAIC00Nyw3ICs0Nyw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnQgY29kZSA9IGludm9rZVNlcnZsZXQodXJsKTsKICAgICAgICAgICAgIHJlcG9ydChjb2RlKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICB9CkBAIC02NCw5ICs2NCw5IEBACiAgICAgICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgICAgICAgIGxvZyhsaW5lKTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiU28gdGhlIFJFU1VMVCBPRiBDYWxjdWxhdG9yIGFkZCBTRVJWSUNFIElTIikgIT0gLTEpCi0JCWZvdW5kMSA9IHRydWU7CisgICAgICAgIGZvdW5kMSA9IHRydWU7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIltXZWJTdmNUZXN0LUhlbGxvIEFwcHNlcnZlciBUZXN0ZXIgIV0iKSAhPSAtMSkKLQkJZm91bmQyID0gdHJ1ZTsKKyAgICAgICAgZm91bmQyID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY29kZTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2VqYi1qbXNiYy9jb25zdW1lci9qbXMtYmluZGluZy1zdS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9lamItam1zYmMvY29uc3VtZXIvam1zLWJpbmRpbmctc3UvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbAppbmRleCBkMzIxMWY2Li4xNjU4MGM4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2VqYi1qbXNiYy9jb25zdW1lci9qbXMtYmluZGluZy1zdS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvZWpiLWptc2JjL2NvbnN1bWVyL2ptcy1iaW5kaW5nLXN1L2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKQEAgLTIyLDEzICsyMiwxMyBAQAogICAgIHZlcnNpb249IjEuMCIKICAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIgogICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiPgotICAKKwogICA8c2VydmljZS1hc3NlbWJseT4KICAgICA8aWRlbnRpZmljYXRpb24+CiAgICAgICA8bmFtZT5jbGllbnRfZWpiX2NvbnN1bWVyX2Fzc2VtYmx5PC9uYW1lPgogICAgICAgPGRlc2NyaXB0aW9uPlRoaXMgaXMgYW4gU0EgZm9yIEpNUyBCaW5kaW5nPC9kZXNjcmlwdGlvbj4KICAgICA8L2lkZW50aWZpY2F0aW9uPgotIAorCiAgICAgPHNlcnZpY2UtdW5pdD4KICAgICAgIDxpZGVudGlmaWNhdGlvbj4KICAgICAgICAgIDxuYW1lPmNsaWVudF9lamJfY29uc3VtZXJfc3U8L25hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2VqYi1qbXNiYy9jb25zdW1lci9qbXMtYmluZGluZy1zdS9zdS9NRVRBLUlORi9qYmkueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9lamItam1zYmMvY29uc3VtZXIvam1zLWJpbmRpbmctc3Uvc3UvTUVUQS1JTkYvamJpLnhtbAppbmRleCBhMTljZWRmLi4xMWRiZGRkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2VqYi1qbXNiYy9jb25zdW1lci9qbXMtYmluZGluZy1zdS9zdS9NRVRBLUlORi9qYmkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvZWpiLWptc2JjL2NvbnN1bWVyL2ptcy1iaW5kaW5nLXN1L3N1L01FVEEtSU5GL2piaS54bWwKQEAgLTI3LDYgKzI3LDYgQEAKICAgICAgICAgICAgICAgICA8Y29uc3VtZXMgaW50ZXJmYWNlLW5hbWU9InRuczpIZWxsbyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS1uYW1lPSJ0bnM6SGVsbG9FSkJTZXJ2aWNlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludC1uYW1lPSJIZWxsb0VKQlBvcnQiLz4KLQkJPGphdmFlc2I6YXJ0aWZhY3RzdHlwZT5XU0RMMTE8L2phdmFlc2I6YXJ0aWZhY3RzdHlwZT4KLQk8L3NlcnZpY2VzPgorICAgICAgICA8amF2YWVzYjphcnRpZmFjdHN0eXBlPldTREwxMTwvamF2YWVzYjphcnRpZmFjdHN0eXBlPgorICAgIDwvc2VydmljZXM+CiA8L2piaT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvZWpiLWptc2JjL2NvbnN1bWVyL3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2VqYi1qbXNiYy9jb25zdW1lci93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGIwYzg2NjcuLjVjZGIwNDEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvZWpiLWptc2JjL2NvbnN1bWVyL3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9lamItam1zYmMvY29uc3VtZXIvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjksOCArMjksOCBAQAogICAgICAgIEBXZWJTZXJ2aWNlUmVmKG5hbWU9InN1bi13ZWIuc2VydmljZXJlZi9IZWxsb0VKQlNlcnZpY2UiKQogICAgICAgIEhlbGxvRUpCU2VydmljZSBzZXJ2aWNlOwogCi0gICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKSAKLQkJdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKKyAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCisgICAgICAgIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgICAgIGRvUG9zdChyZXEsIHJlc3ApOwogICAgICAgIH0KIApAQCAtMzgsNyArMzgsNyBAQAogICAgICAgICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBTZXJ2aWNlIGlzIDoiICsgc2VydmljZSk7Ci0JCUhlbGxvIHBvcnQgPSBzZXJ2aWNlLmdldEhlbGxvRUpCUG9ydCgpOworICAgICAgICBIZWxsbyBwb3J0ID0gc2VydmljZS5nZXRIZWxsb0VKQlBvcnQoKTsKICAgICAgICAgICAgICAgICAvLyBHZXQgU3R1YgogLyoKICAgICAgICAgICAgICAgICBCaW5kaW5nUHJvdmlkZXIgc3R1YiA9IChCaW5kaW5nUHJvdmlkZXIpcG9ydDsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvZWpiLWptc2JjL3Byb3ZpZGVyL2VuZHBvaW50L2VqYi9IZWxsby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9lamItam1zYmMvcHJvdmlkZXIvZW5kcG9pbnQvZWpiL0hlbGxvLmphdmEKaW5kZXggMjMxNjdlYi4uOTA3MzkzMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9lamItam1zYmMvcHJvdmlkZXIvZW5kcG9pbnQvZWpiL0hlbGxvLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9lamItam1zYmMvcHJvdmlkZXIvZW5kcG9pbnQvZWpiL0hlbGxvLmphdmEKQEAgLTIyLDUgKzIyLDUgQEAKIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2VuZHBvaW50L2VqYiIpCiBwdWJsaWMgaW50ZXJmYWNlIEhlbGxvIHsKIAotCXB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIHdobyk7CisgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgd2hvKTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvZWpiLWptc2JjL3Byb3ZpZGVyL2VuZHBvaW50L2VqYi9IZWxsb0VKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9lamItam1zYmMvcHJvdmlkZXIvZW5kcG9pbnQvZWpiL0hlbGxvRUpCLmphdmEKaW5kZXggYWZhYjY5Zi4uZWZmNjZhMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9lamItam1zYmMvcHJvdmlkZXIvZW5kcG9pbnQvZWpiL0hlbGxvRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9lamItam1zYmMvcHJvdmlkZXIvZW5kcG9pbnQvZWpiL0hlbGxvRUpCLmphdmEKQEAgLTI1LDcgKzI1LDcgQEAKIHB1YmxpYyBjbGFzcyBIZWxsb0VKQiBpbXBsZW1lbnRzIEhlbGxvIHsKIAogICAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIHdobykgewotCVN5c3RlbS5vdXQucHJpbnRsbigiKioqKiBFSkIgQ2FsbGVkIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqIEVKQiBDYWxsZWQiKTsKICAgICAgICAgcmV0dXJuICJXZWJTdmNUZXN0LUhlbGxvICIgKyB3aG87CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9lamItam1zYmMvcHJvdmlkZXIvam1zLWJpbmRpbmctc3UvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvZWpiLWptc2JjL3Byb3ZpZGVyL2ptcy1iaW5kaW5nLXN1L2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKaW5kZXggYTdiN2I1NS4uMDcyN2MzOCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9lamItam1zYmMvcHJvdmlkZXIvam1zLWJpbmRpbmctc3UvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2VqYi1qbXNiYy9wcm92aWRlci9qbXMtYmluZGluZy1zdS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCkBAIC0yMiwxMyArMjIsMTMgQEAKICAgICB2ZXJzaW9uPSIxLjAiCiAgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIKICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIj4KLSAgCisKICAgPHNlcnZpY2UtYXNzZW1ibHk+CiAgICAgPGlkZW50aWZpY2F0aW9uPgogICAgICAgPG5hbWU+Y2xpZW50X2VqYl9wcm92aWRlcl9hc3NlbWJseTwvbmFtZT4KICAgICAgIDxkZXNjcmlwdGlvbj5UaGlzIGlzIGFuIFNBIGZvciBKTVMgQmluZGluZzwvZGVzY3JpcHRpb24+CiAgICAgPC9pZGVudGlmaWNhdGlvbj4KLSAKKwogICAgIDxzZXJ2aWNlLXVuaXQ+CiAgICAgICA8aWRlbnRpZmljYXRpb24+CiAgICAgICAgICA8bmFtZT5jbGllbnRfZWpiX3Byb3ZpZGVyX3N1PC9uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9lamItam1zYmMvcHJvdmlkZXIvam1zLWJpbmRpbmctc3Uvc3UvTUVUQS1JTkYvamJpLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvZWpiLWptc2JjL3Byb3ZpZGVyL2ptcy1iaW5kaW5nLXN1L3N1L01FVEEtSU5GL2piaS54bWwKaW5kZXggYTQ3OWQ0MS4uYzY4ZWFjMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9lamItam1zYmMvcHJvdmlkZXIvam1zLWJpbmRpbmctc3Uvc3UvTUVUQS1JTkYvamJpLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2VqYi1qbXNiYy9wcm92aWRlci9qbXMtYmluZGluZy1zdS9zdS9NRVRBLUlORi9qYmkueG1sCkBAIC0yNyw2ICsyNyw2IEBACiAgICAgICAgICAgICAgICAgPHByb3ZpZGVzIGludGVyZmFjZS1uYW1lPSJ0bnM6SGVsbG8iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtbmFtZT0idG5zOkhlbGxvRUpCU2VydmljZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQtbmFtZT0iSGVsbG9FSkJQb3J0Ii8+Ci0JCTxqYXZhZXNiOmFydGlmYWN0c3R5cGU+V1NETDExPC9qYXZhZXNiOmFydGlmYWN0c3R5cGU+Ci0JPC9zZXJ2aWNlcz4KKyAgICAgICAgPGphdmFlc2I6YXJ0aWZhY3RzdHlwZT5XU0RMMTE8L2phdmFlc2I6YXJ0aWZhY3RzdHlwZT4KKyAgICA8L3NlcnZpY2VzPgogPC9qYmk+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2lub3V0LXNhbXBsZS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9pbm91dC1zYW1wbGUvYnVpbGQucHJvcGVydGllcwppbmRleCAwMzAwMTA4Li42MDAzYTdhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2lub3V0LXNhbXBsZS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvaW5vdXQtc2FtcGxlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2FsYy13ZWItY2xpZW50Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSIuL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9Ii4vc3VuLXdlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvaW5vdXQtc2FtcGxlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvaW5vdXQtc2FtcGxlL2J1aWxkLnhtbAppbmRleCBkYzYzZjAwLi42MzJlYjQxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2lub3V0LXNhbXBsZS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9pbm91dC1zYW1wbGUvYnVpbGQueG1sCkBAIC02NCw3ICs2NCw3IEBACiAgICAgICAgICAgICAgICB2YWx1ZT0iLWtlZXAgLWQgJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvY2xhc3NlcyBodHRwOi8vbG9jYWxob3N0OjgwODAvY2FsYy13ZWItY2xpZW50L3dlYnNlcnZpY2UvQWRkZXJTZXJ2aWNlP1dTREwiLz4KICAgICA8L2FudGNhbGw+CiAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi9jbGFzc2VzIgotICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9qMmVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy1ydC5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtdG9vbHMuamFyIiAKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvajJlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtcnQuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXRvb2xzLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJ3ZWJjbGllbnQvKioiLz4KICAgICAgIDxjb3B5IGZpbGU9Ii4vY2xpZW50LXdlYi54bWwiIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvd2ViLnhtbCIvPgogICAgICAgPGNvcHkgZmlsZT0iLi9jbGllbnQtc3VuLXdlYi54bWwiIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvc3VuLXdlYi54bWwiLz4KQEAgLTExNiwxMSArMTE2LDExIEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktd2FyLWNvbW1vbiIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNsaWVudCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW50ZXN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KLSAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIgCi0gICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiAKKyAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iY2xpZW50LyoqIi8+CiAgICAgICA8dW5qYXIgc3JjPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgZGVzdD0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+CiAgICAgICA8amF2YSBjbGFzc25hbWU9ImNsaWVudC5UZXN0Q2xpZW50Ij4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvaW5vdXQtc2FtcGxlL2NsaWVudC13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9pbm91dC1zYW1wbGUvY2xpZW50LXdlYi54bWwKaW5kZXggZWViNzMwZC4uNzk1YjA1MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9pbm91dC1zYW1wbGUvY2xpZW50LXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9pbm91dC1zYW1wbGUvY2xpZW50LXdlYi54bWwKQEAgLTIwLDcgKzIwLDcgQEAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0gICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSAKKyAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KICAgPGRlc2NyaXB0aW9uPkEgdGVzdCBhcHBsaWNhdGlvbjwvZGVzY3JpcHRpb24+CiAgIDxkaXNwbGF5LW5hbWU+V2ViVGllcjwvZGlzcGxheS1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9pbm91dC1zYW1wbGUvY2xpZW50L1Rlc3RDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvaW5vdXQtc2FtcGxlL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKaW5kZXggMjcwMTM2NS4uZTM0MjE3NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9pbm91dC1zYW1wbGUvY2xpZW50L1Rlc3RDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2lub3V0LXNhbXBsZS9jbGllbnQvVGVzdENsaWVudC5qYXZhCkBAIC0zMiw3ICszMiw3IEBACiAKICAgICBwdWJsaWMgYm9vbGVhbiBmb3VuZDEgPSBmYWxzZTsKIAotCXByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0SWQgPSAiamJpLXNlcnZpY2VlbmdpbmUvaW5vdXQtc2FtcGxlIjsKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdElkID0gImpiaS1zZXJ2aWNlZW5naW5lL2lub3V0LXNhbXBsZSI7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKHRlc3RJZCk7CkBAIC00NSwxMyArNDUsMTMgQEAKIAogICAgICAgICBTdHJpbmcgdXJsID0gYXJnc1swXTsKICAgICAgICAgdHJ5IHsKLQkJCS8vZm9yKGludCBpPTA7IGk8MTAwMDsgaSsrKSB7CisgICAgICAgICAgICAvL2ZvcihpbnQgaT0wOyBpPDEwMDA7IGkrKykgewogICAgICAgICAgICAgaW50IGNvZGUgPSBpbnZva2VTZXJ2bGV0KHVybCk7Ci0JCQkvL1N5c3RlbS5vdXQucHJpbnRsbigiY2xpZW50IElEIDogIiArIGkpOworICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oImNsaWVudCBJRCA6ICIgKyBpKTsKICAgICAgICAgICAgIHJlcG9ydChjb2RlKTsKLQkJCS8vfQotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIGZhaWwoKTsKKyAgICAgICAgICAgIC8vfQorICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGZhaWwoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNjYsNyArNjYsNyBAQAogICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICBsb2cobGluZSk7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIlZhbHVlIGlzIikgIT0gLTEpCi0JCWZvdW5kMSA9IHRydWU7CisgICAgICAgIGZvdW5kMSA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNvZGU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9pbm91dC1zYW1wbGUvZW5kcG9pbnQvQWRkZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvaW5vdXQtc2FtcGxlL2VuZHBvaW50L0FkZGVyLmphdmEKaW5kZXggNGZjMTAzZi4uOWY4MzVhYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9pbm91dC1zYW1wbGUvZW5kcG9pbnQvQWRkZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2lub3V0LXNhbXBsZS9lbmRwb2ludC9BZGRlci5qYXZhCkBAIC0yNiwxNyArMjYsMTcgQEAKICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9leGFtcGxlLndlYi5zZXJ2aWNlL0FkZGVyIgogKQogcHVibGljIGNsYXNzIEFkZGVyIHsKLQlwdWJsaWMgQWRkZXIoKSB7fQorICAgIHB1YmxpYyBBZGRlcigpIHt9CiAKLQlAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9ImFkZCIsIGFjdGlvbj0idXJuOkFkZCIpCi0JcHVibGljIGludCBhZGQoaW50IGksIGludCBqKSB7CisgICAgQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJhZGQiLCBhY3Rpb249InVybjpBZGQiKQorICAgIHB1YmxpYyBpbnQgYWRkKGludCBpLCBpbnQgaikgewogICAgICAgICAgICAgICAgIGludCBrID0gaSAtaiA7CiAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKGkgKyAiLSIgKyBqICsiID0gIiArIGspOwotCQkJCXJldHVybiBrOworICAgICAgICAgICAgICAgIHJldHVybiBrOwogCi0JCQkJLyoKLQkJaWYoaSA9PSAxMDEpCi0JCQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVGhpcyBpcyBteSBleGNlcHRpb24gaW4gYWRkIC4uLiIpOwotCQkJKi8KLQl9CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgaWYoaSA9PSAxMDEpCisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVGhpcyBpcyBteSBleGNlcHRpb24gaW4gYWRkIC4uLiIpOworICAgICAgICAgICAgKi8KKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2lub3V0LXNhbXBsZS9zb2FwLWJpbmRpbmctc3UtYWxhc2thL2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2lub3V0LXNhbXBsZS9zb2FwLWJpbmRpbmctc3UtYWxhc2thL2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKaW5kZXggM2JjODBiOS4uODBmMmU1ZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9pbm91dC1zYW1wbGUvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvaW5vdXQtc2FtcGxlL3NvYXAtYmluZGluZy1zdS1hbGFza2EvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbApAQCAtMTksOSArMTksOSBAQAogCiA8IS0tIGpiaS54bWwgZmlsZSBmb3IgdGhlIFNPQVAgYmluZGluZyBkZXBsb3ltZW50cyBiaW5kaW5nLiAtLT4KIDxqYmkKLSAgICB2ZXJzaW9uPSIxLjAiIAotICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiIAotICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAorICAgIHZlcnNpb249IjEuMCIKKyAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgLi9qYmkueHNkIj4KICAgPHNlcnZpY2UtYXNzZW1ibHk+CiAgICAgPGlkZW50aWZpY2F0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9pbm91dC1zYW1wbGUvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9zdS9NRVRBLUlORi9qYmkueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9pbm91dC1zYW1wbGUvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9zdS9NRVRBLUlORi9qYmkueG1sCmluZGV4IDdiYjk2YmMuLjcwYjllYTEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvaW5vdXQtc2FtcGxlL3NvYXAtYmluZGluZy1zdS1hbGFza2Evc3UvTUVUQS1JTkYvamJpLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2lub3V0LXNhbXBsZS9zb2FwLWJpbmRpbmctc3UtYWxhc2thL3N1L01FVEEtSU5GL2piaS54bWwKQEAgLTE4LDE1ICsxOCwxNSBAQAogLS0+CiAKIDxqYmkgdmVyc2lvbj0iMS4wIgotCSB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKLQkgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIgCi0JIHhtbG5zOmphdmFlc2I9Imh0dHA6Ly9qYXZhLnN1bi5jb20iCi0JIHhtbG5zOnRucz0iaHR0cDovL2V4YW1wbGUud2ViLnNlcnZpY2UvQWRkZXIiCi0JIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIGpiaS54c2QiPgotCTxzZXJ2aWNlcyBiaW5kaW5nLWNvbXBvbmVudD0idHJ1ZSI+CQkKLQkgPHByb3ZpZGVzIGludGVyZmFjZS1uYW1lPSJ0bnM6QWRkZXJTZXJ2aWNlSW50ZXJmYWNlIgorICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIgorICAgICB4bWxuczpqYXZhZXNiPSJodHRwOi8vamF2YS5zdW4uY29tIgorICAgICB4bWxuczp0bnM9Imh0dHA6Ly9leGFtcGxlLndlYi5zZXJ2aWNlL0FkZGVyIgorICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSBqYmkueHNkIj4KKyAgICA8c2VydmljZXMgYmluZGluZy1jb21wb25lbnQ9InRydWUiPgorICAgICA8cHJvdmlkZXMgaW50ZXJmYWNlLW5hbWU9InRuczpBZGRlclNlcnZpY2VJbnRlcmZhY2UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtbmFtZT0idG5zOkFkZGVyU2VydmljZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQtbmFtZT0iQWRkZXJQb3J0Ii8+CiAgICAgICAgICAgICAgICAgPGFydGlmYWN0cyB4bWxucz0iIiByb2xlPSJwcm92aWRlciIgZmlsZS1uYW1lPSJlbmRwb2ludHMueG1sIiB0eXBlPSJ4bWwiLz4KLQk8L3NlcnZpY2VzPgorICAgIDwvc2VydmljZXM+CiA8L2piaT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvaW5vdXQtc2FtcGxlL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2lub3V0LXNhbXBsZS93ZWIueG1sCmluZGV4IGRhODZiZjQuLmU1MzJjZTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvaW5vdXQtc2FtcGxlL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9pbm91dC1zYW1wbGUvd2ViLnhtbApAQCAtMTgsMzAgKzE4LDMwIEBACiAtLT4KIAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCi0JCQlodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KKyAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCisgICAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KIAotCTxkZXNjcmlwdGlvbj5XZWJUaWVyIGZvciB0aGUgQWRkZXIgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JPGRpc3BsYXktbmFtZT5BZGRlcldBUjwvZGlzcGxheS1uYW1lPgorICAgIDxkZXNjcmlwdGlvbj5XZWJUaWVyIGZvciB0aGUgQWRkZXIgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgPGRpc3BsYXktbmFtZT5BZGRlcldBUjwvZGlzcGxheS1uYW1lPgogCi0JPHNlcnZsZXQ+Ci0JCTxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgQWRkZXIgV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCQk8ZGlzcGxheS1uYW1lPkFkZGVyV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgotCQk8c2VydmxldC1uYW1lPkFkZGVyPC9zZXJ2bGV0LW5hbWU+Ci0JCTxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkFkZGVyPC9zZXJ2bGV0LWNsYXNzPgotCQk8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KLQk8L3NlcnZsZXQ+CisgICAgPHNlcnZsZXQ+CisgICAgICAgIDxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgQWRkZXIgV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgICAgICA8ZGlzcGxheS1uYW1lPkFkZGVyV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgorICAgICAgICA8c2VydmxldC1uYW1lPkFkZGVyPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkFkZGVyPC9zZXJ2bGV0LWNsYXNzPgorICAgICAgICA8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KKyAgICA8L3NlcnZsZXQ+CiAKLQk8c2VydmxldC1tYXBwaW5nPgotCQk8c2VydmxldC1uYW1lPkFkZGVyPC9zZXJ2bGV0LW5hbWU+Ci0JCTx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9BZGRlclNlcnZpY2U8L3VybC1wYXR0ZXJuPgotCTwvc2VydmxldC1tYXBwaW5nPgorICAgIDxzZXJ2bGV0LW1hcHBpbmc+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+QWRkZXI8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL0FkZGVyU2VydmljZTwvdXJsLXBhdHRlcm4+CisgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiAKLQk8c2Vzc2lvbi1jb25maWc+Ci0JCTxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KLQk8L3Nlc3Npb24tY29uZmlnPgorICAgIDxzZXNzaW9uLWNvbmZpZz4KKyAgICAgICAgPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgorICAgIDwvc2Vzc2lvbi1jb25maWc+CiAKIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9pbm91dC1zYW1wbGUvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvaW5vdXQtc2FtcGxlL3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggY2ZmYmZlOS4uMmZkZDhkZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9pbm91dC1zYW1wbGUvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2lub3V0LXNhbXBsZS93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yOCwzOSArMjgsMzkgQEAKIAogICAgICAgIEBXZWJTZXJ2aWNlUmVmKG5hbWU9InN1bi13ZWIuc2VydmljZXJlZi9hZGRlciIpIEFkZGVyU2VydmljZSBzZXJ2aWNlOwogCi0gICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKSAKLQkJdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKKyAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCisgICAgICAgIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgICAgIGRvUG9zdChyZXEsIHJlc3ApOwogICAgICAgIH0KIAogICAgICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCiAgICAgICAgICAgICAgIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7Ci0JICAgIFByaW50V3JpdGVyIG91dD1udWxsOworICAgICAgICBQcmludFdyaXRlciBvdXQ9bnVsbDsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgU2VydmljZSBpcyA6IiArIHNlcnZpY2UpOwogICAgICAgICAgICAgICAgIHJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwotICAgICAgICAgICAgCW91dCA9IHJlc3AuZ2V0V3JpdGVyKCk7CisgICAgICAgICAgICAgICAgb3V0ID0gcmVzcC5nZXRXcml0ZXIoKTsKICAgICAgICAgICAgICAgICBBZGRlciBwb3J0ID0gc2VydmljZS5nZXRBZGRlclBvcnQoKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInBvcnQgaXMgOiAiICsgcG9ydCk7CiAgICAgICAgICAgICAgICAgaW50IHJlc3VsdCA9IHBvcnQuYWRkKDEwMSwgMik7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJyZXN1bHQgaXMgOiAiICsgcmVzdWx0KTsKLQkJLy9wcmludEZhaWx1cmUob3V0KTsKLQkJcHJpbnRTdWNjZXNzKG91dCwgcmVzdWx0KTsKKyAgICAgICAgLy9wcmludEZhaWx1cmUob3V0KTsKKyAgICAgICAgcHJpbnRTdWNjZXNzKG91dCwgcmVzdWx0KTsKICAgICAgICAgICAgIH0gY2F0Y2goamF2YS5sYW5nLkV4Y2VwdGlvbiBlKSB7Ci0JCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIAkvL3ByaW50U3VjY2VzcyhvdXQpOwotCSAgICAJcHJpbnRGYWlsdXJlKG91dCk7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICAvL3ByaW50U3VjY2VzcyhvdXQpOworICAgICAgICAgICAgcHJpbnRGYWlsdXJlKG91dCk7CiAgICAgICAgICAgICB9IGZpbmFsbHkgewotCQlpZihvdXQgIT0gbnVsbCkgeworICAgICAgICBpZihvdXQgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICBvdXQuZmx1c2goKTsKICAgICAgICAgICAgICAgICAgICAgb3V0LmNsb3NlKCk7Ci0JCX0KLQkgICAgfQorICAgICAgICB9CisgICAgICAgIH0KICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBwcmludEZhaWx1cmUoUHJpbnRXcml0ZXIgb3V0KSB7Ci0JCWlmKG91dCA9PSBudWxsKSByZXR1cm47Ci0JCW91dC5wcmludGxuKCI8aHRtbD4iKTsKKyAgICAgICAgaWYob3V0ID09IG51bGwpIHJldHVybjsKKyAgICAgICAgb3V0LnByaW50bG4oIjxodG1sPiIpOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aGVhZD4iKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPHRpdGxlPlRlc3RTZXJ2bGV0PC90aXRsZT4iKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9oZWFkPiIpOwpAQCAtNzMsNyArNzMsNyBAQAogICAgICAgIH0KIAogICAgICAgIHB1YmxpYyB2b2lkIHByaW50U3VjY2VzcyhQcmludFdyaXRlciBvdXQsIGludCByZXN1bHQpIHsKLQkJaWYob3V0ID09IG51bGwpIHJldHVybjsKKyAgICAgICAgaWYob3V0ID09IG51bGwpIHJldHVybjsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGh0bWw+Iik7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoZWFkPiIpOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8dGl0bGU+VGVzdFNlcnZsZXQ8L3RpdGxlPiIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9idWlsZC54bWwKaW5kZXggOWY0ZjE2MS4uNGJiZmMyYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvYnVpbGQueG1sCkBAIC0yNSw2ICsyNSw2IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCI+CiAgICAgICAgIDxhbnQgZGlyPSJjb25zdW1lciIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0icHJvdmlkZXIiIHRhcmdldD0iYWxsIi8+CisgICAgPGFudCBkaXI9InByb3ZpZGVyIiB0YXJnZXQ9ImFsbCIvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2NvbnN1bWVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvY29uc3VtZXIvYnVpbGQucHJvcGVydGllcwppbmRleCBjMmE0NTY0Li5kNDFlYzBjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvY29uc3VtZXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvY29uc3VtZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJmaW5kaW50ZXJlc3QiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iamJpLWNvbXBvbmVudC1zdS1hc3NlbWJseSIgdmFsdWU9ImVqYl9maW5kaW50ZXJlc3RfcHJvdmlkZXJfYXNzZW1ibHkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJqYmktY29tcG9uZW50LXN1IiB2YWx1ZT0iZWpiX2pheHJwY19wcm92aWRlcl9zdSIvPgogPHByb3BlcnR5IG5hbWU9ImpiaS1jb21wb25lbnQtc3UtZGlyIiB2YWx1ZT0ic29hcC1iaW5kaW5nLXN1LWFsYXNrYSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2NvbnN1bWVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9jb25zdW1lci9idWlsZC54bWwKaW5kZXggYzM5YjBjMC4uMjZmNTkzNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2NvbnN1bWVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvY29uc3VtZXIvYnVpbGQueG1sCkBAIC0zOSw3ICszOSw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0icm9vdC5kaXIiIHZhbHVlPSIuIiAvPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0ic3JjLmRpciIgdmFsdWU9Ii4iIC8+Ci0JPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJGaW5kSW50ZXJlc3RBcHAiIC8+CisgICAgPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJGaW5kSW50ZXJlc3RBcHAiIC8+CiAKICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkLmRpciIgdmFsdWU9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUiIC8+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJidWlsZC5yZXBvc2l0b3J5IiB2YWx1ZT0iJHtidWlsZC5kaXJ9L2J1aWxkZWFycyIvPgpAQCAtNTgsMTMgKzU4LDEzIEBACiAKICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImRlYnVnIiB2YWx1ZT0ib24iIC8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJzZXR1cCI+Ci0JPGRlbGV0ZSBkaXI9IiR7YnVpbGQuZGlyfSIvPgorICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmRpcn0iLz4KICAgICAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQucmVwb3NpdG9yeX0iLz4KICAgICAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuYXBwY2xpZW50fSIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPCEtLSB0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0ic2V0dXAsY2xlYW4iIC0tPgogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0id3Njb21waWxlLHNldHVwIiA+CiAgICAgICAgIDwhLS0gYW50IHRhcmdldD0ibWFrZWRpcnMiLyAtLT4KQEAgLTk2LDggKzk2LDggQEAKICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqKi9GaW5kSW50ZXJlc3RfU2NoZW1hLnhzZCIgLz4KICAgICAgICAgICAgIDwvZmlsZXNldD4KICAgICAgICAgPC9qYXI+Ci0gICAgICAgIAotCTxhbnRjYWxsIHRhcmdldD0iY29weS10by13ZWJpbmYiIC8+CisKKyAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvcHktdG8td2ViaW5mIiAvPgogCiAgICAgICAgIDxqYXIgamFyZmlsZT0iJHtidWlsZC5qYXJzfS93ZWIud2FyIiA+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQud2ViaW5mfSI+CkBAIC0xMDYsNyArMTA2LDcgQEAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5tYXBwaW5nfSI+CiAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iSW50ckNsaWVudE1hcHBpbmcueG1sIiAvPgogICAgICAgICAgICAgPC9maWxlc2V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogCiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQud2ViaW5mfSI+CiAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKiovd2ViLnhtbCIgLz4KQEAgLTExNiw4ICsxMTYsOCBAQAogICAgICAgICAgICAgPC9maWxlc2V0PgogICAgICAgICA8L2phcj4KIAotICAgICAgICA8amFyIGphcmZpbGU9IiR7YnVpbGQuamFyc30vYXBwY2xpZW50LmphciIgCi0JICAgICBtYW5pZmVzdD0iJHtidWlsZC5kZXNjfS9jbGllbnQvTUFOSUZFU1QuTUYiPgorICAgICAgICA8amFyIGphcmZpbGU9IiR7YnVpbGQuamFyc30vYXBwY2xpZW50LmphciIKKyAgICAgICAgIG1hbmlmZXN0PSIke2J1aWxkLmRlc2N9L2NsaWVudC9NQU5JRkVTVC5NRiI+CiAKICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5tYXBwaW5nfSI+CiAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iSW50ckNsaWVudE1hcHBpbmcueG1sIiAvPgpAQCAtMTM4LDE4ICsxMzgsMTggQEAKICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iY29weS10by13ZWJpbmYiPgotCTxjb3B5ICB0b2Rpcj0iJHtidWlsZC53ZWJpbmZ9L1dFQi1JTkYvY2xhc3NlcyIgZmlsdGVyaW5nPSJvbiIgb3ZlcndyaXRlPSJ5ZXMiICA+Ci0JICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuZGVzdH0iPgotCSAgICA8aW5jbHVkZSBuYW1lPSJteWNsaWVudC8qLmNsYXNzIi8+Ci0JICA8L2ZpbGVzZXQ+Ci0JPC9jb3B5PgorICAgIDxjb3B5ICB0b2Rpcj0iJHtidWlsZC53ZWJpbmZ9L1dFQi1JTkYvY2xhc3NlcyIgZmlsdGVyaW5nPSJvbiIgb3ZlcndyaXRlPSJ5ZXMiICA+CisgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuZGVzdH0iPgorICAgICAgICA8aW5jbHVkZSBuYW1lPSJteWNsaWVudC8qLmNsYXNzIi8+CisgICAgICA8L2ZpbGVzZXQ+CisgICAgPC9jb3B5PgogICAgICAgPHVuamFyIHNyYz0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIGRlc3Q9IiR7YnVpbGQud2ViaW5mfS9XRUItSU5GL2NsYXNzZXMiLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZWFyIiBkZXBlbmRzPSJjbGVhbixqYXIiPgotICAgICAgICA8ZWFyIGVhcmZpbGU9IiR7YnVpbGQuZWFyfS8ke2FwcG5hbWV9LmVhciIgCi0JICAgICBhcHB4bWw9IiR7YnVpbGQuZGVzY30vYXBwbGljYXRpb24ueG1sIiAKLQkgICAgIG1hbmlmZXN0PSIke2J1aWxkLmRlc2N9L01BTklGRVNULk1GIj4KKyAgICAgICAgPGVhciBlYXJmaWxlPSIke2J1aWxkLmVhcn0vJHthcHBuYW1lfS5lYXIiCisgICAgICAgICBhcHB4bWw9IiR7YnVpbGQuZGVzY30vYXBwbGljYXRpb24ueG1sIgorICAgICAgICAgbWFuaWZlc3Q9IiR7YnVpbGQuZGVzY30vTUFOSUZFU1QuTUYiPgogCiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuamFyc30iIGluY2x1ZGVzPSIqLmphciwqLndhciIgZXhjbHVkZXM9ImVqYi5qYXIiLz4KIApAQCAtMTU4LDkgKzE1OCw5IEBACiAgICAgICAgICAgICA8L2ZpbGVzZXQ+CiAgICAgICAgIDwvZWFyPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9InNldHVwIj4KLQk8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59Ij4KKyAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59Ij4KICAgICAgICAgICAgIDxhcmcgdmFsdWU9ImRlcGxveSIgLz4KICAgICAgICAgICAgIDxhcmcgdmFsdWU9Ii0tdXNlciIgLz4KICAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7YWRtaW4udXNlcn0iIC8+CkBAIC0xNzEsNyArMTcxLDcgQEAKICAgICAgICAgICAgIDxhcmcgdmFsdWU9Ii0tcmV0cmlldmUiIC8+CiAgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2J1aWxkLmFwcGNsaWVudH0iIC8+CiAgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2J1aWxkLmVhcn0vJHthcHBuYW1lfS5lYXIiIC8+Ci0JPC9leGVjPiAKKyAgICA8L2V4ZWM+CiAgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iPgogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iZGVwbG95IiAvPgogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iLS11c2VyIiAvPgpAQCAtMTkyLDkgKzE5Miw5IEBACiAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktamJpLWNvbXBvbmVudC1zdSIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0ic2V0dXAiPgotCTxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iPgorICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iPgogICAgICAgICAgICAgPGFyZyB2YWx1ZT0idW5kZXBsb3kiIC8+CiAgICAgICAgICAgICA8YXJnIHZhbHVlPSItLXVzZXIiIC8+CiAgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2FkbWluLnVzZXJ9IiAvPgpAQCAtMjAzLDcgKzIwMyw3IEBACiAgICAgICAgICAgICA8YXJnIHZhbHVlPSItLXBvcnQiIC8+CiAgICAgICAgICAgICA8YXJnIHZhbHVlPSIke2FkbWluLnBvcnR9IiAvPgogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHthcHBuYW1lfSIgLz4KLQk8L2V4ZWM+IAorICAgIDwvZXhlYz4KICAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSI+CiAgICAgICAgICAgICA8YXJnIHZhbHVlPSJ1bmRlcGxveSIgLz4KICAgICAgICAgICAgIDxhcmcgdmFsdWU9Ii0tdXNlciIgLz4KQEAgLTIyMiwxMCArMjIyLDEwIEBACiAgICAgICAgPGVjaG8gbWVzc2FnZT0iRXhlY3V0aW5nIGFuIGFwcGNsaWVudCIvPgogICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVBQQ0xJRU5UfSI+CiAgICAgICAgICAgICA8ZW52IGtleT0iVk1BUkdTIiB2YWx1ZT0iLUR0ZXN0LnJlc3VsdHM9JHtyZXN1bHRzLmZpbGV9IiAvPgotCSAgICA8YXJnIHZhbHVlPSItY2xpZW50IiAvPgotCSAgICA8YXJnIHZhbHVlPSIke2J1aWxkLmFwcGNsaWVudH0vJHthcHBuYW1lfUNsaWVudC5qYXIiLz4KLQkgICAgPGFyZyB2YWx1ZT0iLW5hbWUiIC8+Ci0JICAgIDxhcmcgdmFsdWU9Ik15QXBwQ2xpZW50IiAvPgorICAgICAgICA8YXJnIHZhbHVlPSItY2xpZW50IiAvPgorICAgICAgICA8YXJnIHZhbHVlPSIke2J1aWxkLmFwcGNsaWVudH0vJHthcHBuYW1lfUNsaWVudC5qYXIiLz4KKyAgICAgICAgPGFyZyB2YWx1ZT0iLW5hbWUiIC8+CisgICAgICAgIDxhcmcgdmFsdWU9Ik15QXBwQ2xpZW50IiAvPgogICAgICAgIDwvZXhlYz4KICAgIDwvdGFyZ2V0PgogCkBAIC0yNjYsMTQgKzI2NiwxNCBAQAogICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioueG1sIiAvPgogICAgICAgICAgICAgPC9maWxlc2V0PgogICAgICAgICA8L2NvcHk+Ci0gICAgICAgIAorCiAgICAgICAgIDxjb3B5ICB0b2Rpcj0iJHtidWlsZC5kZXNjfS9jbGllbnQiIGZpbHRlcmluZz0ib24iIG92ZXJ3cml0ZT0ieWVzIiAgPgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke3NyYy5kaXJ9L2Rlc2NyaXB0b3IvY2xpZW50IiA+CiAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi54bWwiIC8+Ci0JCTxpbmNsdWRlIG5hbWU9Ik1BTklGRVNULk1GIiAvPgorICAgICAgICA8aW5jbHVkZSBuYW1lPSJNQU5JRkVTVC5NRiIgLz4KICAgICAgICAgICAgIDwvZmlsZXNldD4KICAgICAgICAgPC9jb3B5PgotICAgICAgICAKKwogICAgICAgICA8Y29weSAgdG9kaXI9IiR7YnVpbGQuZGVzY30iIGZpbHRlcmluZz0ib24iIG92ZXJ3cml0ZT0ieWVzIiAgPgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke3NyYy5kaXJ9L2Rlc2NyaXB0b3IiID4KICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIC8+CkBAIC0yODYsNyArMjg2LDcgQEAKICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJzdW4tajJlZS1yaS54bWwiIC8+CiAgICAgICAgICAgICA8L2ZpbGVzZXQ+CiAgICAgICAgIDwvY29weT4KLSAgICAgICAgCisKICAgICAgICAgPGNvcHkgIHRvZGlyPSIke2J1aWxkLmVqYnNyY30iIGZpbHRlcmluZz0ib24iIG92ZXJ3cml0ZT0ieWVzIiAgPgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke3NyYy5kaXJ9L2VqYiIgPgogICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqLyouamF2YSIgLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9jb25zdW1lci9jbGllbnQvRmluZEludGVyZXN0Q2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvY29uc3VtZXIvY2xpZW50L0ZpbmRJbnRlcmVzdENsaWVudC5qYXZhCmluZGV4IDkyN2Q1NGEuLjUyMTUyYzkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9jb25zdW1lci9jbGllbnQvRmluZEludGVyZXN0Q2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2NvbnN1bWVyL2NsaWVudC9GaW5kSW50ZXJlc3RDbGllbnQuamF2YQpAQCAtMzAsNyArMzAsNyBAQAogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0SWQgPSAiamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9jb25zdW1lciI7CiAKICAgICBwdWJsaWMgRmluZEludGVyZXN0Q2xpZW50KCkgewotCXN0YXR1cy5hZGREZXNjcmlwdGlvbih0ZXN0SWQpOworICAgIHN0YXR1cy5hZGREZXNjcmlwdGlvbih0ZXN0SWQpOwogICAgIH0KIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CkBAIC00MCwxNSArNDAsMTUgQEAKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAvLyAgICAgIGNsaWVudC5kb1NlcnZsZXRUZXN0KCk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGRvdWJsZSBkb1Rlc3QoKSB7CiAKICAgICAgICAgLy9TdHJpbmcgdGFyZ2V0RW5kcG9pbnRBZGRyZXNzID0KLQkvLwkJImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9maW5kaW50ci9GaW5kSW50ZXJlc3QiOworICAgIC8vICAgICAgICAiaHR0cDovL2xvY2FsaG9zdDo4MDgwL2ZpbmRpbnRyL0ZpbmRJbnRlcmVzdCI7CiAgICAgICAgIFN0cmluZyB0YXJnZXRFbmRwb2ludEFkZHJlc3MgPQotCQkJImh0dHA6Ly9sb2NhbGhvc3Q6MTIwMTMvSW50ZXJlc3RJRlBvcnQiOworICAgICAgICAgICAgImh0dHA6Ly9sb2NhbGhvc3Q6MTIwMTMvSW50ZXJlc3RJRlBvcnQiOwogCi0gICAgCXRyeSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBGaW5kSW50ZXJlc3QgZmluZEludHJTZXJ2aWNlID0gKEZpbmRJbnRlcmVzdCkKICAgICAgICAgICAgICAgICAgICAgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3NlcnZpY2UvRmluZEludGVyZXN0Iik7CkBAIC01NiwyOSArNTYsMjkgQEAKICAgICAgICAgICAgIEludGVyZXN0SUYgaW50ZXJlc3RJRlBvcnQgPSBmaW5kSW50clNlcnZpY2UuZ2V0SW50ZXJlc3RJRlBvcnQoKTsKIAogICAgICAgICAgICAgKChTdHViKWludGVyZXN0SUZQb3J0KS5fc2V0UHJvcGVydHkgKFN0dWIuRU5EUE9JTlRfQUREUkVTU19QUk9QRVJUWSwKLSAgICAgICAgICAgICAgICAgCQkJCXRhcmdldEVuZHBvaW50QWRkcmVzcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRFbmRwb2ludEFkZHJlc3MpOwogCi0JICAgIGRvdWJsZSBpbnRlcmVzdCA9IGludGVyZXN0SUZQb3J0LmNhbGN1bGF0ZUludGVyZXN0KGJhbGFuY2UsIHBlcmlvZCk7CisgICAgICAgIGRvdWJsZSBpbnRlcmVzdCA9IGludGVyZXN0SUZQb3J0LmNhbGN1bGF0ZUludGVyZXN0KGJhbGFuY2UsIHBlcmlvZCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkludGVyZXN0IG9uICQzMDAgZm9yIGEgcGVyaW9kIG9mIDMuNSB5ZWFycyBpcyAiCi0JCQkJKyBpbnRlcmVzdCk7Ci0gICAgICAgICAgICAgICAgCi0JICAgIGlmIChpbnRlcmVzdCA9PSAxMDUuMCkgewotCQlzdGF0dXMuYWRkU3RhdHVzKHRlc3RJZCArIjEgOiBFSkIgRW5kcG9pbnQgVGVzdCIsIHN0YXR1cy5QQVNTKTsKLQkgICAgfQorICAgICAgICAgICAgICAgICsgaW50ZXJlc3QpOworCisgICAgICAgIGlmIChpbnRlcmVzdCA9PSAxMDUuMCkgeworICAgICAgICBzdGF0dXMuYWRkU3RhdHVzKHRlc3RJZCArIjEgOiBFSkIgRW5kcG9pbnQgVGVzdCIsIHN0YXR1cy5QQVNTKTsKKyAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGludGVyZXN0OwogCi0gICAgCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQlzdGF0dXMuYWRkU3RhdHVzKHRlc3RJZCArIjEgOiBFSkIgRW5kcG9pbnQgYW5kIFNlcnZsZXQgRW5kcG9pbnQgVGVzdCIsIHN0YXR1cy5GQUlMKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIHN0YXR1cy5hZGRTdGF0dXModGVzdElkICsiMSA6IEVKQiBFbmRwb2ludCBhbmQgU2VydmxldCBFbmRwb2ludCBUZXN0Iiwgc3RhdHVzLkZBSUwpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJmaW5kaW50ciBjbGllbnQgZmFpbGVkIik7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLQl9IAorICAgIH0KICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAogICAgLyogcHVibGljIHZvaWQgZG9TZXJ2bGV0VGVzdCgpIHsKLSAgICAJdHJ5IHsKLQkgICAgU3RyaW5nIHRhcmdldEVuZHBvaW50QWRkcmVzcyA9Ci0JCSJodHRwOi8vbG9jYWxob3N0OjgwODAvRmluZEludGVyZXN0U2VydmxldC9GaW5kSW50ZXJlc3QiOworICAgICAgICB0cnkgeworICAgICAgICBTdHJpbmcgdGFyZ2V0RW5kcG9pbnRBZGRyZXNzID0KKyAgICAgICAgImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9GaW5kSW50ZXJlc3RTZXJ2bGV0L0ZpbmRJbnRlcmVzdCI7CiAKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIEZpbmRJbnRlcmVzdCBmaW5kSW50clNlcnZpY2UgPSAoRmluZEludGVyZXN0KQpAQCAtODcsMjIgKzg3LDIyIEBACiAgICAgICAgICAgICBJbnRlcmVzdElGIGludGVyZXN0SUZQb3J0ID0gZmluZEludHJTZXJ2aWNlLmdldEludGVyZXN0SUZQb3J0KCk7CiAKICAgICAgICAgICAgICgoU3R1YilpbnRlcmVzdElGUG9ydCkuX3NldFByb3BlcnR5IChTdHViLkVORFBPSU5UX0FERFJFU1NfUFJPUEVSVFksCi0JCQkJCQl0YXJnZXRFbmRwb2ludEFkZHJlc3MpOworICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0RW5kcG9pbnRBZGRyZXNzKTsKIAotCSAgICBkb3VibGUgaW50ZXJlc3QgPSBpbnRlcmVzdElGUG9ydC5jYWxjdWxhdGVJbnRlcmVzdChiYWxhbmNlLCBwZXJpb2QpOworICAgICAgICBkb3VibGUgaW50ZXJlc3QgPSBpbnRlcmVzdElGUG9ydC5jYWxjdWxhdGVJbnRlcmVzdChiYWxhbmNlLCBwZXJpb2QpOwogCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkludGVyZXN0IG9uICQzMDAgZm9yIGEgcGVyaW9kIG9mIDMuNSB5ZWFycyBpcyAiCi0JCQkJKyBpbnRlcmVzdCk7Ci0gICAgICAgICAgICAgICAgCi0JICAgIGlmIChpbnRlcmVzdCA9PSAyMTAuMCkgewotCQlzdGF0dXMuYWRkU3RhdHVzKFRFU1RfU1VJVEVfSUQrIjIgOiBFSkIgRW5kcG9pbnQgYW5kIFNlcnZsZXQgRW5kcG9pbnQgVGVzdCIsIHN0YXR1cy5QQVNTKTsKLQkgICAgfQotICAgIAl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJc3RhdHVzLmFkZFN0YXR1cyhURVNUX1NVSVRFX0lEKyIyIDogRUpCIEVuZHBvaW50IGFuZCBTZXJ2bGV0IEVuZHBvaW50IFRlc3QiLCBzdGF0dXMuRkFJTCk7CisgICAgICAgICAgICAgICAgKyBpbnRlcmVzdCk7CisKKyAgICAgICAgaWYgKGludGVyZXN0ID09IDIxMC4wKSB7CisgICAgICAgIHN0YXR1cy5hZGRTdGF0dXMoVEVTVF9TVUlURV9JRCsiMiA6IEVKQiBFbmRwb2ludCBhbmQgU2VydmxldCBFbmRwb2ludCBUZXN0Iiwgc3RhdHVzLlBBU1MpOworICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICBzdGF0dXMuYWRkU3RhdHVzKFRFU1RfU1VJVEVfSUQrIjIgOiBFSkIgRW5kcG9pbnQgYW5kIFNlcnZsZXQgRW5kcG9pbnQgVGVzdCIsIHN0YXR1cy5GQUlMKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZmluZGludHIgY2xpZW50IGZhaWxlZCIpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JfSAKLQlzdGF0dXMucHJpbnRTdW1tYXJ5KCJKU1IxMDkgLSBGaW5kSW50ZXJlc3RUZXN0Iik7CisgICAgfQorICAgIHN0YXR1cy5wcmludFN1bW1hcnkoIkpTUjEwOSAtIEZpbmRJbnRlcmVzdFRlc3QiKTsKICAgICB9Ki8KIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2NvbnN1bWVyL2NsaWVudC9GaW5kSW50ZXJlc3RDbGllbnROb25IdHRwQkMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9jb25zdW1lci9jbGllbnQvRmluZEludGVyZXN0Q2xpZW50Tm9uSHR0cEJDLmphdmEKaW5kZXggMjIxNGFmNS4uNGE1OGI4MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2NvbnN1bWVyL2NsaWVudC9GaW5kSW50ZXJlc3RDbGllbnROb25IdHRwQkMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvY29uc3VtZXIvY2xpZW50L0ZpbmRJbnRlcmVzdENsaWVudE5vbkh0dHBCQy5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RJZCA9ICJqYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2NvbnN1bWVyIjsKIAogICAgIHB1YmxpYyBGaW5kSW50ZXJlc3RDbGllbnROb25IdHRwQkMoKSB7Ci0Jc3RhdHVzLmFkZERlc2NyaXB0aW9uKHRlc3RJZCk7CisgICAgc3RhdHVzLmFkZERlc2NyaXB0aW9uKHRlc3RJZCk7CiAgICAgfQogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTQwLDEzICs0MCwxMyBAQAogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgIC8vICAgICAgY2xpZW50LmRvU2VydmxldFRlc3QoKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgZG91YmxlIGRvVGVzdCgpIHsKIAogICAgICAgICBTdHJpbmcgdGFyZ2V0RW5kcG9pbnRBZGRyZXNzID0KLQkJCSJodHRwOi8vbG9jYWxob3N0OjgwODAvZmluZGludHIvRmluZEludGVyZXN0IjsKKyAgICAgICAgICAgICJodHRwOi8vbG9jYWxob3N0OjgwODAvZmluZGludHIvRmluZEludGVyZXN0IjsKIAotICAgIAl0cnkgeworICAgICAgICB0cnkgewogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgRmluZEludGVyZXN0IGZpbmRJbnRyU2VydmljZSA9IChGaW5kSW50ZXJlc3QpCiAgICAgICAgICAgICAgICAgICAgIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9zZXJ2aWNlL0ZpbmRJbnRlcmVzdCIpOwpAQCAtNTQsMjkgKzU0LDI5IEBACiAgICAgICAgICAgICBJbnRlcmVzdElGIGludGVyZXN0SUZQb3J0ID0gZmluZEludHJTZXJ2aWNlLmdldEludGVyZXN0SUZQb3J0KCk7CiAKICAgICAgICAgICAgICgoU3R1YilpbnRlcmVzdElGUG9ydCkuX3NldFByb3BlcnR5IChTdHViLkVORFBPSU5UX0FERFJFU1NfUFJPUEVSVFksCi0gICAgICAgICAgICAgICAgIAkJCQl0YXJnZXRFbmRwb2ludEFkZHJlc3MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0RW5kcG9pbnRBZGRyZXNzKTsKIAotCSAgICBkb3VibGUgaW50ZXJlc3QgPSBpbnRlcmVzdElGUG9ydC5jYWxjdWxhdGVJbnRlcmVzdChiYWxhbmNlLCBwZXJpb2QpOworICAgICAgICBkb3VibGUgaW50ZXJlc3QgPSBpbnRlcmVzdElGUG9ydC5jYWxjdWxhdGVJbnRlcmVzdChiYWxhbmNlLCBwZXJpb2QpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbnRlcmVzdCBvbiAkMzAwIGZvciBhIHBlcmlvZCBvZiAzLjUgeWVhcnMgaXMgIgotCQkJCSsgaW50ZXJlc3QpOwotICAgICAgICAgICAgICAgIAotCSAgICBpZiAoaW50ZXJlc3QgPT0gMTA1LjApIHsKLQkJc3RhdHVzLmFkZFN0YXR1cyh0ZXN0SWQgKyIxIDogRUpCIEVuZHBvaW50IFRlc3QiLCBzdGF0dXMuUEFTUyk7Ci0JICAgIH0KKyAgICAgICAgICAgICAgICArIGludGVyZXN0KTsKKworICAgICAgICBpZiAoaW50ZXJlc3QgPT0gMTA1LjApIHsKKyAgICAgICAgc3RhdHVzLmFkZFN0YXR1cyh0ZXN0SWQgKyIxIDogRUpCIEVuZHBvaW50IFRlc3QiLCBzdGF0dXMuUEFTUyk7CisgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBpbnRlcmVzdDsKIAotICAgIAl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJc3RhdHVzLmFkZFN0YXR1cyh0ZXN0SWQgKyIxIDogRUpCIEVuZHBvaW50IGFuZCBTZXJ2bGV0IEVuZHBvaW50IFRlc3QiLCBzdGF0dXMuRkFJTCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICBzdGF0dXMuYWRkU3RhdHVzKHRlc3RJZCArIjEgOiBFSkIgRW5kcG9pbnQgYW5kIFNlcnZsZXQgRW5kcG9pbnQgVGVzdCIsIHN0YXR1cy5GQUlMKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZmluZGludHIgY2xpZW50IGZhaWxlZCIpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JfSAKKyAgICB9CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKICAgIC8qIHB1YmxpYyB2b2lkIGRvU2VydmxldFRlc3QoKSB7Ci0gICAgCXRyeSB7Ci0JICAgIFN0cmluZyB0YXJnZXRFbmRwb2ludEFkZHJlc3MgPQotCQkiaHR0cDovL2xvY2FsaG9zdDo4MDgwL0ZpbmRJbnRlcmVzdFNlcnZsZXQvRmluZEludGVyZXN0IjsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgU3RyaW5nIHRhcmdldEVuZHBvaW50QWRkcmVzcyA9CisgICAgICAgICJodHRwOi8vbG9jYWxob3N0OjgwODAvRmluZEludGVyZXN0U2VydmxldC9GaW5kSW50ZXJlc3QiOwogCiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBGaW5kSW50ZXJlc3QgZmluZEludHJTZXJ2aWNlID0gKEZpbmRJbnRlcmVzdCkKQEAgLTg1LDIyICs4NSwyMiBAQAogICAgICAgICAgICAgSW50ZXJlc3RJRiBpbnRlcmVzdElGUG9ydCA9IGZpbmRJbnRyU2VydmljZS5nZXRJbnRlcmVzdElGUG9ydCgpOwogCiAgICAgICAgICAgICAoKFN0dWIpaW50ZXJlc3RJRlBvcnQpLl9zZXRQcm9wZXJ0eSAoU3R1Yi5FTkRQT0lOVF9BRERSRVNTX1BST1BFUlRZLAotCQkJCQkJdGFyZ2V0RW5kcG9pbnRBZGRyZXNzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldEVuZHBvaW50QWRkcmVzcyk7CiAKLQkgICAgZG91YmxlIGludGVyZXN0ID0gaW50ZXJlc3RJRlBvcnQuY2FsY3VsYXRlSW50ZXJlc3QoYmFsYW5jZSwgcGVyaW9kKTsKKyAgICAgICAgZG91YmxlIGludGVyZXN0ID0gaW50ZXJlc3RJRlBvcnQuY2FsY3VsYXRlSW50ZXJlc3QoYmFsYW5jZSwgcGVyaW9kKTsKIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbnRlcmVzdCBvbiAkMzAwIGZvciBhIHBlcmlvZCBvZiAzLjUgeWVhcnMgaXMgIgotCQkJCSsgaW50ZXJlc3QpOwotICAgICAgICAgICAgICAgIAotCSAgICBpZiAoaW50ZXJlc3QgPT0gMjEwLjApIHsKLQkJc3RhdHVzLmFkZFN0YXR1cyhURVNUX1NVSVRFX0lEKyIyIDogRUpCIEVuZHBvaW50IGFuZCBTZXJ2bGV0IEVuZHBvaW50IFRlc3QiLCBzdGF0dXMuUEFTUyk7Ci0JICAgIH0KLSAgICAJfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCXN0YXR1cy5hZGRTdGF0dXMoVEVTVF9TVUlURV9JRCsiMiA6IEVKQiBFbmRwb2ludCBhbmQgU2VydmxldCBFbmRwb2ludCBUZXN0Iiwgc3RhdHVzLkZBSUwpOworICAgICAgICAgICAgICAgICsgaW50ZXJlc3QpOworCisgICAgICAgIGlmIChpbnRlcmVzdCA9PSAyMTAuMCkgeworICAgICAgICBzdGF0dXMuYWRkU3RhdHVzKFRFU1RfU1VJVEVfSUQrIjIgOiBFSkIgRW5kcG9pbnQgYW5kIFNlcnZsZXQgRW5kcG9pbnQgVGVzdCIsIHN0YXR1cy5QQVNTKTsKKyAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgc3RhdHVzLmFkZFN0YXR1cyhURVNUX1NVSVRFX0lEKyIyIDogRUpCIEVuZHBvaW50IGFuZCBTZXJ2bGV0IEVuZHBvaW50IFRlc3QiLCBzdGF0dXMuRkFJTCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZpbmRpbnRyIGNsaWVudCBmYWlsZWQiKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotCX0gCi0Jc3RhdHVzLnByaW50U3VtbWFyeSgiSlNSMTA5IC0gRmluZEludGVyZXN0VGVzdCIpOworICAgIH0KKyAgICBzdGF0dXMucHJpbnRTdW1tYXJ5KCJKU1IxMDkgLSBGaW5kSW50ZXJlc3RUZXN0Iik7CiAgICAgfSovCiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9jb25zdW1lci9jbGllbnQvRmluZEludGVyZXN0U2VydmxldENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2NvbnN1bWVyL2NsaWVudC9GaW5kSW50ZXJlc3RTZXJ2bGV0Q2xpZW50LmphdmEKaW5kZXggMDhjMDY1Ni4uODZjODllMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2NvbnN1bWVyL2NsaWVudC9GaW5kSW50ZXJlc3RTZXJ2bGV0Q2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2NvbnN1bWVyL2NsaWVudC9GaW5kSW50ZXJlc3RTZXJ2bGV0Q2xpZW50LmphdmEKQEAgLTIwLDEyICsyMCwxMiBAQAogaW1wb3J0IGpha2FydGEuc2VydmxldC5odHRwLio7CiBpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7CiBpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247IAoraW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBqYXZheC5uYW1pbmcuKjsKIGltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwogCiBwdWJsaWMgY2xhc3MgRmluZEludGVyZXN0U2VydmxldENsaWVudCBleHRlbmRzIEh0dHBTZXJ2bGV0Ci0JCQl7CisgICAgICAgICAgICB7CiAgICAgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwOwogICAgIHB1YmxpYyBGaW5kSW50ZXJlc3RTZXJ2bGV0Q2xpZW50KCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZpbmRJbnRlcmVzdFNlcnZsZXRJbXBsKCkgaW5zdGFudGlhdGVkIik7CkBAIC0zNiw3ICszNiw3IEBACiAgICAgICAgICAgIHRoaXMucmVzcCA9IHJlc3A7CiAgICAgICAgICAgIGRvUG9zdChyZXEsIHJlc3ApOwogICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQogICAgICAgICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgIHRyeXsKQEAgLTQ5LDkgKzQ5LDkgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBjYWxjdWxhdGVJbnRlcmVzdCgpIHRocm93cyBFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiY2FsY3VsYXRlSW50ZXJlc3QgaW52b2tlZCBmcm9tIHNlcnZsZXQgIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJjYWxjdWxhdGVJbnRlcmVzdCBpbnZva2VkIGZyb20gc2VydmxldCAiKTsKICAgICAgICAgRmluZEludGVyZXN0Q2xpZW50IGNsaWVudCA9IG5ldyBGaW5kSW50ZXJlc3RDbGllbnQoKTsKLQlkb3VibGUgaW50ZXJlc3Q9IGNsaWVudC5kb1Rlc3QoKTsKKyAgICBkb3VibGUgaW50ZXJlc3Q9IGNsaWVudC5kb1Rlc3QoKTsKICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcC5nZXRXcml0ZXIoKTsKICAgICAgICAgICAgICAgICByZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGh0bWw+Iik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvY29uc3VtZXIvY2xpZW50L1NPQVBFamJDb25zdW1lci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2NvbnN1bWVyL2NsaWVudC9TT0FQRWpiQ29uc3VtZXIuamF2YQppbmRleCAwNzk3NTViLi4zZGZmZmIxIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvY29uc3VtZXIvY2xpZW50L1NPQVBFamJDb25zdW1lci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9jb25zdW1lci9jbGllbnQvU09BUEVqYkNvbnN1bWVyLmphdmEKQEAgLTIzLDE5ICsyMywxOSBAQAogcHVibGljIGNsYXNzIFNPQVBFamJDb25zdW1lciB7CiAgICAgcHJpdmF0ZSBkb3VibGUgYmFsYW5jZSA9IDMwMC4wMDsKICAgICBwcml2YXRlIGRvdWJsZSBwZXJpb2QgPSAzLjU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXR1cyA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdElkID0gImpiaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvY29uc3VtZXIiOwogCiAgICAgcHVibGljIFNPQVBFamJDb25zdW1lcigpIHsKICAgICAgICAgc3RhdHVzLmFkZERlc2NyaXB0aW9uKHRlc3RJZCk7CiAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgIFNPQVBFamJDb25zdW1lciBjbGllbnQgPSBuZXcgU09BUEVqYkNvbnN1bWVyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICB9CiAKQEAgLTQ0LDIzICs0NCwyMyBAQAogICAgICAgICAgLy8gICAgICAgICAgICAgICAiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3NvYXAvd2ViL2ZpbmRpbnRlcmVzdCI7CiAgICAgICAgIFN0cmluZyB0YXJnZXRFbmRwb2ludEFkZHJlc3MgPQogICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9sb2NhbGhvc3Q6MTIwMTMvSW50ZXJlc3RJRlBvcnQiOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgRmluZEludGVyZXN0IGZpbmRJbnRyU2VydmljZSA9IChGaW5kSW50ZXJlc3QpCiAgICAgICAgICAgICAgICAgICAgIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9zZXJ2aWNlL0ZpbmRJbnRlcmVzdCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgSW50ZXJlc3RJRiBpbnRlcmVzdElGUG9ydCA9IGZpbmRJbnRyU2VydmljZS5nZXRJbnRlcmVzdElGUG9ydCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgKChTdHViKWludGVyZXN0SUZQb3J0KS5fc2V0UHJvcGVydHkgKFN0dWIuRU5EUE9JTlRfQUREUkVTU19QUk9QRVJUWSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRFbmRwb2ludEFkZHJlc3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgZG91YmxlIGludGVyZXN0ID0gaW50ZXJlc3RJRlBvcnQuY2FsY3VsYXRlSW50ZXJlc3QoYmFsYW5jZSwgcGVyaW9kKTsgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkludGVyZXN0IG9uICQzMDAgZm9yIGEgcGVyaW9kIG9mIDMuNSB5ZWFycyBpcyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgaW50ZXJlc3QpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKGludGVyZXN0ID09IDEwNS4wKSB7CiAgICAgICAgICAgICAgICAgc3RhdHVzLmFkZFN0YXR1cyh0ZXN0SWQgKyIxIDogRUpCIEVuZHBvaW50IFRlc3QiLCBzdGF0dXMuUEFTUyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgICAgIHN0YXR1cy5hZGRTdGF0dXModGVzdElkICsiMSA6IEVKQiBFbmRwb2ludCBUZXN0Iiwgc3RhdHVzLkZBSUwpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJmaW5kaW50ciBjbGllbnQgZmFpbGVkIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvY29uc3VtZXIvY2xpZW50L1NPQVBFamJDb25zdW1lck5vbkh0dHBCQy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2NvbnN1bWVyL2NsaWVudC9TT0FQRWpiQ29uc3VtZXJOb25IdHRwQkMuamF2YQppbmRleCA3YzRiZmJiLi44N2E3NWVkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvY29uc3VtZXIvY2xpZW50L1NPQVBFamJDb25zdW1lck5vbkh0dHBCQy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9jb25zdW1lci9jbGllbnQvU09BUEVqYkNvbnN1bWVyTm9uSHR0cEJDLmphdmEKQEAgLTIzLDQyICsyMyw0MiBAQAogcHVibGljIGNsYXNzIFNPQVBFamJDb25zdW1lck5vbkh0dHBCQyB7CiAgICAgcHJpdmF0ZSBkb3VibGUgYmFsYW5jZSA9IDMwMC4wMDsKICAgICBwcml2YXRlIGRvdWJsZSBwZXJpb2QgPSAzLjU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXR1cyA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKIAogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0SWQgPSAiamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9jb25zdW1lciI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgcHVibGljIFNPQVBFamJDb25zdW1lck5vbkh0dHBCQygpIHsKICAgICAgICAgc3RhdHVzLmFkZERlc2NyaXB0aW9uKHRlc3RJZCk7CiAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgIFNPQVBFamJDb25zdW1lck5vbkh0dHBCQyBjbGllbnQgPSBuZXcgU09BUEVqYkNvbnN1bWVyTm9uSHR0cEJDKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgZG9UZXN0KCkgewogICAgICAgICBTdHJpbmcgdGFyZ2V0RW5kcG9pbnRBZGRyZXNzID0KICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vbG9jYWxob3N0OjgwODAvc29hcC93ZWIvZmluZGludGVyZXN0IjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIEZpbmRJbnRlcmVzdCBmaW5kSW50clNlcnZpY2UgPSAoRmluZEludGVyZXN0KQogICAgICAgICAgICAgICAgICAgICBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvc2VydmljZS9GaW5kSW50ZXJlc3QiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIEludGVyZXN0SUYgaW50ZXJlc3RJRlBvcnQgPSBmaW5kSW50clNlcnZpY2UuZ2V0SW50ZXJlc3RJRlBvcnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICgoU3R1YilpbnRlcmVzdElGUG9ydCkuX3NldFByb3BlcnR5IChTdHViLkVORFBPSU5UX0FERFJFU1NfUFJPUEVSVFksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0RW5kcG9pbnRBZGRyZXNzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIGRvdWJsZSBpbnRlcmVzdCA9IGludGVyZXN0SUZQb3J0LmNhbGN1bGF0ZUludGVyZXN0KGJhbGFuY2UsIHBlcmlvZCk7ICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbnRlcmVzdCBvbiAkMzAwIGZvciBhIHBlcmlvZCBvZiAzLjUgeWVhcnMgaXMgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGludGVyZXN0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmIChpbnRlcmVzdCA9PSAxMDUuMCkgewogICAgICAgICAgICAgICAgIHN0YXR1cy5hZGRTdGF0dXModGVzdElkICsiMSA6IEVKQiBFbmRwb2ludCBUZXN0Iiwgc3RhdHVzLlBBU1MpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgICAgICBzdGF0dXMuYWRkU3RhdHVzKHRlc3RJZCArIjEgOiBFSkIgRW5kcG9pbnQgVGVzdCIsIHN0YXR1cy5GQUlMKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZmluZGludHIgY2xpZW50IGZhaWxlZCIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2NvbnN1bWVyL2NsaWVudC9TZXJ2bGV0SW52b2tlci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2NvbnN1bWVyL2NsaWVudC9TZXJ2bGV0SW52b2tlci5qYXZhCmluZGV4IDZhOGJhMzQuLjUwMmExMGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9jb25zdW1lci9jbGllbnQvU2VydmxldEludm9rZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvY29uc3VtZXIvY2xpZW50L1NlcnZsZXRJbnZva2VyLmphdmEKQEAgLTQ4LDcgKzQ4LDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludCBjb2RlID0gaW52b2tlU2VydmxldCh1cmwpOwogICAgICAgICAgICAgcmVwb3J0KGNvZGUpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KQEAgLTY1LDkgKzY1LDkgQEAKICAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nKGxpbmUpOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJTbyB0aGUgUkVTVUxUIE9GIEZpbmRJbnRlcmVzdCBTRVJWSUNFIElTIikgIT0gLTEpCi0JCWZvdW5kMSA9IHRydWU7CisgICAgICAgIGZvdW5kMSA9IHRydWU7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIlsxMDUuMF0iKSAhPSAtMSkKLQkJZm91bmQyID0gdHJ1ZTsKKyAgICAgICAgZm91bmQyID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY29kZTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvY29uc3VtZXIvZGVzY3JpcHRvci93ZWIvc3VuLXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvY29uc3VtZXIvZGVzY3JpcHRvci93ZWIvc3VuLXdlYi54bWwKaW5kZXggMzU0MmMwNi4uMmIwY2VjMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2NvbnN1bWVyL2Rlc2NyaXB0b3Ivd2ViL3N1bi13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9jb25zdW1lci9kZXNjcmlwdG9yL3dlYi9zdW4td2ViLnhtbApAQCAtMjYsNyArMjYsNyBAQAogICAgICAgICAgICA8d3NkbC1wb3J0PgogICAgIDxuYW1lc3BhY2VVUkk+aHR0cDovL2hlbGxvLm9yZy93c2RsPC9uYW1lc3BhY2VVUkk+CiAgICAgPGxvY2FscGFydD5JbnRlcmVzdElGUG9ydDwvbG9jYWxwYXJ0PgotPC93c2RsLXBvcnQ+IAorPC93c2RsLXBvcnQ+CiAgICAgICAgICAgICA8c3R1Yi1wcm9wZXJ0eSBuYW1lPSJqYmktZW5hYmxlZCIgdmFsdWU9InRydWUiLz4KICAgICAgICAgPC9wb3J0LWluZm8+CiAgICAgPC9zZXJ2aWNlLXJlZj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9jb25zdW1lci9lamIvSW50ZXJlc3RFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9jb25zdW1lci9lamIvSW50ZXJlc3RFSkIuamF2YQppbmRleCBkNmY5NGFmLi44ZDcwOTQxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvY29uc3VtZXIvZWpiL0ludGVyZXN0RUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2NvbnN1bWVyL2VqYi9JbnRlcmVzdEVKQi5qYXZhCkBAIC0xNyw3ICsxNyw3IEBACiBwYWNrYWdlIG15ZWpiOwogCiBpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7Ci1pbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOyAKK2ltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkJlYW47CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQ7CiBpbXBvcnQgamFrYXJ0YS5lamIuRUpCRXhjZXB0aW9uOwpAQCAtMjYsMTEgKzI2LDExIEBACiBwdWJsaWMgY2xhc3MgSW50ZXJlc3RFSkIgaW1wbGVtZW50cyBTZXNzaW9uQmVhbiB7CiAKICAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IHNjOwotICAgIAorCiAgICAgcHVibGljIEludGVyZXN0RUpCKCl7fQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBJbnRlcmVzdEVKQjo6ZWpiQ3JlYXRlICEhIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBJbnRlcmVzdEVKQjo6ZWpiQ3JlYXRlICEhIik7CiAgICAgfQogCiAgICAgcHVibGljIGRvdWJsZSBjYWxjdWxhdGVJbnRlcmVzdChkb3VibGUgYmFsYW5jZSwgZG91YmxlIHBlcmlvZCkgewpAQCAtMzksMTMgKzM5LDEzIEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgc2MpIHsKLQkKKwogICAgICAgICB0aGlzLnNjID0gc2M7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7fQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7fQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkge30KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9jb25zdW1lci9zb2FwLWJpbmRpbmctc3UtYWxhc2thL2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvY29uc3VtZXIvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCmluZGV4IGExZTlmZmEuLmFjMmU1ZTYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9jb25zdW1lci9zb2FwLWJpbmRpbmctc3UtYWxhc2thL2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2NvbnN1bWVyL3NvYXAtYmluZGluZy1zdS1hbGFza2EvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbApAQCAtMTksOSArMTksOSBAQAogCiA8IS0tIGpiaS54bWwgZmlsZSBmb3IgdGhlIFNPQVAgYmluZGluZyBkZXBsb3ltZW50cyBiaW5kaW5nLiAtLT4KIDxqYmkKLSAgICB2ZXJzaW9uPSIxLjAiIAotICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiIAotICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAorICAgIHZlcnNpb249IjEuMCIKKyAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgLi9qYmkueHNkIj4KICAgPHNlcnZpY2UtYXNzZW1ibHk+CiAgICAgPGlkZW50aWZpY2F0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2NvbnN1bWVyL3NvYXAtYmluZGluZy1zdS1hbGFza2Evc3UvTUVUQS1JTkYvamJpLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9jb25zdW1lci9zb2FwLWJpbmRpbmctc3UtYWxhc2thL3N1L01FVEEtSU5GL2piaS54bWwKaW5kZXggYzRmNmNjYi4uM2RmNTkxNCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2NvbnN1bWVyL3NvYXAtYmluZGluZy1zdS1hbGFza2Evc3UvTUVUQS1JTkYvamJpLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvY29uc3VtZXIvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9zdS9NRVRBLUlORi9qYmkueG1sCkBAIC0xOCwxNSArMTgsMTUgQEAKIC0tPgogCiA8amJpIHZlcnNpb249IjEuMCIKLQkgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCi0JIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiIAotCSB4bWxuczpqYXZhZXNiPSJodHRwOi8vamF2YS5zdW4uY29tIgotCSB4bWxuczp0bnM9Imh0dHA6Ly9oZWxsby5vcmcvd3NkbCIKLQkgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgamJpLnhzZCI+Ci0JPHNlcnZpY2VzIGJpbmRpbmctY29tcG9uZW50PSJ0cnVlIj4JCQotCTxwcm92aWRlcyBpbnRlcmZhY2UtbmFtZT0idG5zOkZpbmRJbnRlcmVzdEludGVyZmFjZSIKKyAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIKKyAgICAgeG1sbnM6amF2YWVzYj0iaHR0cDovL2phdmEuc3VuLmNvbSIKKyAgICAgeG1sbnM6dG5zPSJodHRwOi8vaGVsbG8ub3JnL3dzZGwiCisgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIGpiaS54c2QiPgorICAgIDxzZXJ2aWNlcyBiaW5kaW5nLWNvbXBvbmVudD0idHJ1ZSI+CisgICAgPHByb3ZpZGVzIGludGVyZmFjZS1uYW1lPSJ0bnM6RmluZEludGVyZXN0SW50ZXJmYWNlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLW5hbWU9InRuczpGaW5kSW50ZXJlc3QiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50LW5hbWU9IkludGVyZXN0SUZQb3J0Ii8+CiAgICAgICAgICAgICAgICAgPGFydGlmYWN0cyB4bWxucz0iIiByb2xlPSJjb25zdW1lciIgZmlsZS1uYW1lPSJlbmRwb2ludHMueG1sIiB0eXBlPSJ4bWwiLz4KLQk8L3NlcnZpY2VzPgorICAgIDwvc2VydmljZXM+CiA8L2piaT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9jb25zdW1lci9zb2FwLWJpbmRpbmctc3UvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9jb25zdW1lci9zb2FwLWJpbmRpbmctc3UvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbAppbmRleCAxYWNlYzk1Li43M2VmYjMyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvY29uc3VtZXIvc29hcC1iaW5kaW5nLXN1L2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2NvbnN1bWVyL3NvYXAtYmluZGluZy1zdS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCkBAIC0xOSw5ICsxOSw5IEBACiAKIDwhLS0gamJpLnhtbCBmaWxlIGZvciB0aGUgU09BUCBiaW5kaW5nIGRlcGxveW1lbnRzIGJpbmRpbmcuIC0tPgogPGpiaQotICAgIHZlcnNpb249IjEuMCIgCi0gICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIgCi0gICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCisgICAgdmVyc2lvbj0iMS4wIgorICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSAuL2piaS54c2QiPgogICA8c2VydmljZS1hc3NlbWJseT4KICAgICA8aWRlbnRpZmljYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvY29uc3VtZXIvc29hcC1iaW5kaW5nLXN1L3N1L01FVEEtSU5GL2piaS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvY29uc3VtZXIvc29hcC1iaW5kaW5nLXN1L3N1L01FVEEtSU5GL2piaS54bWwKaW5kZXggMTYxMGRlZS4uNzYyY2U0NSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2NvbnN1bWVyL3NvYXAtYmluZGluZy1zdS9zdS9NRVRBLUlORi9qYmkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9jb25zdW1lci9zb2FwLWJpbmRpbmctc3Uvc3UvTUVUQS1JTkYvamJpLnhtbApAQCAtMTgsMTQgKzE4LDE0IEBACiAtLT4KIAogPGpiaSB2ZXJzaW9uPSIxLjAiCi0JIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAotCSB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIiAKLQkgeG1sbnM6dG5zPSJodHRwOi8vaGVsbG8ub3JnL3dzZGwiCi0JIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIGpiaS54c2QiPgotCTxzZXJ2aWNlcyBiaW5kaW5nLWNvbXBvbmVudD0idHJ1ZSI+CQkKLQkJPGNvbnN1bWVzIGludGVyZmFjZS1uYW1lPSJ0bnM6RmluZEludGVyZXN0SW50ZXJmYWNlIgotICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLW5hbWU9InRuczpGaW5kSW50ZXJlc3QiIAorICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIgorICAgICB4bWxuczp0bnM9Imh0dHA6Ly9oZWxsby5vcmcvd3NkbCIKKyAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgamJpLnhzZCI+CisgICAgPHNlcnZpY2VzIGJpbmRpbmctY29tcG9uZW50PSJ0cnVlIj4KKyAgICAgICAgPGNvbnN1bWVzIGludGVyZmFjZS1uYW1lPSJ0bnM6RmluZEludGVyZXN0SW50ZXJmYWNlIgorICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLW5hbWU9InRuczpGaW5kSW50ZXJlc3QiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50LW5hbWU9IkludGVyZXN0SUZQb3J0Ii8+CiAgICAgICAgICAgICAgICAgPGFydGlmYWN0cyB4bWxucz0iIiByb2xlPSJjb25zdW1lciIgZmlsZS1uYW1lPSJlbmRwb2ludHMueG1sIiB0eXBlPSJ4bWwiLz4KLQk8L3NlcnZpY2VzPgorICAgIDwvc2VydmljZXM+CiA8L2piaT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9jb25zdW1lci9zb2FwLWJpbmRpbmctc3Uvc3UvZW5kcG9pbnRzLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9jb25zdW1lci9zb2FwLWJpbmRpbmctc3Uvc3UvZW5kcG9pbnRzLnhtbAppbmRleCA5YjA4MTJiLi5hNGRhNmFhIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvY29uc3VtZXIvc29hcC1iaW5kaW5nLXN1L3N1L2VuZHBvaW50cy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2NvbnN1bWVyL3NvYXAtYmluZGluZy1zdS9zdS9lbmRwb2ludHMueG1sCkBAIC0yMSwyMiArMjEsMjIgQEAKICAgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5zdW4uY29tL25zL2piaS9jb21wb25lbnQvc29hcC9kZXBsb3kgLi9lbmRwb2ludHMueHNkIj4KIDxzZXJ2aWNlLW5hbWU+Ci0JPG5hbWVzcGFjZS11cmk+aHR0cDovL2hlbGxvLm9yZy93c2RsPC9uYW1lc3BhY2UtdXJpPgotCTxsb2NhbC1wYXJ0PkZpbmRJbnRlcmVzdDwvbG9jYWwtcGFydD4KKyAgICA8bmFtZXNwYWNlLXVyaT5odHRwOi8vaGVsbG8ub3JnL3dzZGw8L25hbWVzcGFjZS11cmk+CisgICAgPGxvY2FsLXBhcnQ+RmluZEludGVyZXN0PC9sb2NhbC1wYXJ0PgogICAgIDwvc2VydmljZS1uYW1lPgogICAgIDxlbmRwb2ludC1uYW1lPkludGVyZXN0SUZQb3J0PC9lbmRwb2ludC1uYW1lPgogICAgIDxlbmRwb2ludC1yb2xlPnByb3ZpZGVyPC9lbmRwb2ludC1yb2xlPgotICAgIDxhZGRyZXNzLWxvY2F0aW9uPmh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9maW5kaW50ci9GaW5kSW50ZXJlc3Q8L2FkZHJlc3MtbG9jYXRpb24+IAotICAgIDxzdHlsZT5odHRwOi8vd3d3LnczLm9yZy8yMDA0LzA4L3dzZGwvc3R5bGUvcnBjPC9zdHlsZT4gICAgICAgICAgICAgCisgICAgPGFkZHJlc3MtbG9jYXRpb24+aHR0cDovL2xvY2FsaG9zdDo4MDgwL2ZpbmRpbnRyL0ZpbmRJbnRlcmVzdDwvYWRkcmVzcy1sb2NhdGlvbj4KKyAgICA8c3R5bGU+aHR0cDovL3d3dy53My5vcmcvMjAwNC8wOC93c2RsL3N0eWxlL3JwYzwvc3R5bGU+CiAgICAgPG9wZXJhdGlvbj4KICAgICAgICAgPG5hbWU+Y2FsY3VsYXRlSW50ZXJlc3Q8L25hbWU+Ci0gICAgICAgIDxtZXA+aHR0cDovL3d3dy53My5vcmcvMjAwNC8wOC93c2RsL2luLW91dDwvbWVwPiAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIDxtZXA+aHR0cDovL3d3dy53My5vcmcvMjAwNC8wOC93c2RsL2luLW91dDwvbWVwPgogICAgICAgICA8c29hcGFjdGlvbj4iIjwvc29hcGFjdGlvbj4KICAgICAgICAgPGlucHV0PgogICAgICAgICAgIDxuYW1lc3BhY2UtdXJpPmh0dHA6Ly9oZWxsby5vcmcvd3NkbDwvbmFtZXNwYWNlLXVyaT4KICAgICAgICAgPC9pbnB1dD4KICAgICAgICAgPG91dHB1dD4KICAgICAgICAgICA8bmFtZXNwYWNlLXVyaT5odHRwOi8vaGVsbG8ub3JnL3dzZGw8L25hbWVzcGFjZS11cmk+Ci0gICAgICAgIDwvb3V0cHV0PiAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIDwvb3V0cHV0PgogICAgIDwvb3BlcmF0aW9uPgotPC9lbmRwb2ludD4gCis8L2VuZHBvaW50PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2NvbnN1bWVyL3dlYi9GaW5kSW50ZXJlc3RTZXJ2bGV0SW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2NvbnN1bWVyL3dlYi9GaW5kSW50ZXJlc3RTZXJ2bGV0SW1wbC5qYXZhCmluZGV4IGRmNjYyMGQuLjQ5ZWQzNjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9jb25zdW1lci93ZWIvRmluZEludGVyZXN0U2VydmxldEltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvY29uc3VtZXIvd2ViL0ZpbmRJbnRlcmVzdFNlcnZsZXRJbXBsLmphdmEKQEAgLTIxLDE1ICsyMSwxNSBAQAogaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7CiBpbXBvcnQgamF2YXgueG1sLnJwYy5DYWxsOwogaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOwotaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsgCitpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGphdmF4Lm5hbWluZy4qOwogaW1wb3J0IGphdmF4LnhtbC5ycGMuU2VydmljZTsKIGltcG9ydCBqYXZheC54bWwucnBjLnNlcnZlci5TZXJ2aWNlTGlmZWN5Y2xlOwogaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7CiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0LlNpbmdsZVRocmVhZE1vZGVsOwogCi1wdWJsaWMgY2xhc3MgRmluZEludGVyZXN0U2VydmxldEltcGwgaW1wbGVtZW50cyAKLQkJCVNpbmdsZVRocmVhZE1vZGVsLCBTZXJ2aWNlTGlmZWN5Y2xlIHsKK3B1YmxpYyBjbGFzcyBGaW5kSW50ZXJlc3RTZXJ2bGV0SW1wbCBpbXBsZW1lbnRzCisgICAgICAgICAgICBTaW5nbGVUaHJlYWRNb2RlbCwgU2VydmljZUxpZmVjeWNsZSB7CiAKICAgICBwdWJsaWMgRmluZEludGVyZXN0U2VydmxldEltcGwoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRmluZEludGVyZXN0U2VydmxldEltcGwoKSBpbnN0YW50aWF0ZWQiKTsKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgZG91YmxlIGNhbGN1bGF0ZUludGVyZXN0KGRvdWJsZSBiYWxhbmNlLCBkb3VibGUgcGVyaW9kKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJjYWxjdWxhdGVJbnRlcmVzdCBpbnZva2VkIGZyb20gc2VydmxldCBlbmRwb2ludCIpOwotCXJldHVybiAwLjIqYmFsYW5jZSpwZXJpb2Q7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJjYWxjdWxhdGVJbnRlcmVzdCBpbnZva2VkIGZyb20gc2VydmxldCBlbmRwb2ludCIpOworICAgIHJldHVybiAwLjIqYmFsYW5jZSpwZXJpb2Q7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2NvbnN1bWVyL3dzY29tcGlsZV9jb25maWcueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2NvbnN1bWVyL3dzY29tcGlsZV9jb25maWcueG1sCmluZGV4IDRjZmI5NTQuLmMxMWI4ODYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9jb25zdW1lci93c2NvbXBpbGVfY29uZmlnLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvY29uc3VtZXIvd3Njb21waWxlX2NvbmZpZy54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPGNvbmZpZ3VyYXRpb24KICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheC1ycGMvcmkvY29uZmlnIj4KLSAgPHdzZGwgCisgIDx3c2RsCiAgICAgICBsb2NhdGlvbj0iRmluZEludGVyZXN0LndzZGwiCiAgICAgICBwYWNrYWdlTmFtZT0ibXllamIiLz4KIDwvY29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9jb25zdW1lci93c2NvbXBpbGVfY29uZmlnX2NsaWVudC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvY29uc3VtZXIvd3Njb21waWxlX2NvbmZpZ19jbGllbnQueG1sCmluZGV4IGViZmY2OWMuLjljMzE4YzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9jb25zdW1lci93c2NvbXBpbGVfY29uZmlnX2NsaWVudC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL2NvbnN1bWVyL3dzY29tcGlsZV9jb25maWdfY2xpZW50LnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8Y29uZmlndXJhdGlvbgogICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4LXJwYy9yaS9jb25maWciPgotICA8d3NkbCAKKyAgPHdzZGwKICAgICAgIGxvY2F0aW9uPSJGaW5kSW50ZXJlc3Qud3NkbCIKICAgICAgIHBhY2thZ2VOYW1lPSJteWNsaWVudCIvPgogPC9jb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyLW9uZXdheS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyLW9uZXdheS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGVkOTRjMDUuLmQ3Y2Q4YzAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci1vbmV3YXkvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXItb25ld2F5L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iZmluZGludGVyZXN0Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImpiaS1jb21wb25lbnQtc3UtYXNzZW1ibHkiIHZhbHVlPSJlamJfZmluZGludGVyZXN0X2Fzc2VtYmx5Ii8+CiA8cHJvcGVydHkgbmFtZT0iamJpLWNvbXBvbmVudC1zdSIgdmFsdWU9ImVqYl9qYXhycGNfY29uc3VtZXJfc3UiLz4KIDxwcm9wZXJ0eSBuYW1lPSJqYmktY29tcG9uZW50LXN1LWRpciIgdmFsdWU9InNvYXAtYmluZGluZy1zdS1hbGFza2EiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci1vbmV3YXkvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyLW9uZXdheS9idWlsZC54bWwKaW5kZXggNDg2YjY4NC4uY2Y5Y2QwYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyLW9uZXdheS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyLW9uZXdheS9idWlsZC54bWwKQEAgLTM3LDcgKzM3LDcgQEAKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyb290LmRpciIgdmFsdWU9Ii4iIC8+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzcmMuZGlyIiB2YWx1ZT0iLiIgLz4KLQk8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IkZpbmRJbnRlcmVzdEFwcCIgLz4KKyAgICA8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IkZpbmRJbnRlcmVzdEFwcCIgLz4KIAogICAgICAgICA8cHJvcGVydHkgbmFtZT0iYnVpbGQuZGlyIiB2YWx1ZT0iJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZSIgLz4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkLnJlcG9zaXRvcnkiIHZhbHVlPSIke2J1aWxkLmRpcn0vYnVpbGRlYXJzIi8+CkBAIC01NiwxMyArNTYsMTMgQEAKIAogICAgICAgICA8cHJvcGVydHkgbmFtZT0iZGVidWciIHZhbHVlPSJvbiIgLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9InNldHVwIj4KLQk8ZGVsZXRlIGRpcj0iJHtidWlsZC5kaXJ9Ii8+CisgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuZGlyfSIvPgogICAgICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5yZXBvc2l0b3J5fSIvPgogICAgICAgICA8ZGVsZXRlIGRpcj0iJHtidWlsZC5hcHBjbGllbnR9Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8IS0tIHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJzZXR1cCxjbGVhbiIgLS0+CiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJ3c2NvbXBpbGUsc2V0dXAiID4KICAgICAgICAgPCEtLSBhbnQgdGFyZ2V0PSJtYWtlZGlycyIvIC0tPgpAQCAtOTksOCArOTksOCBAQAogICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqL0ZpbmRJbnRlcmVzdF9TY2hlbWEueHNkIiAvPgogICAgICAgICAgICAgPC9maWxlc2V0PgogICAgICAgICA8L2phcj4KLSAgICAgICAgCi0JPGFudGNhbGwgdGFyZ2V0PSJjb3B5LXRvLXdlYmluZiIgLz4KKworICAgIDxhbnRjYWxsIHRhcmdldD0iY29weS10by13ZWJpbmYiIC8+CiAKICAgICAgICAgPGphciBqYXJmaWxlPSIke2J1aWxkLmphcnN9L3dlYi53YXIiID4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC53ZWJpbmZ9Ij4KQEAgLTEyNSw4ICsxMjUsOCBAQAogICAgICAgICAgICAgPC9maWxlc2V0PgogICAgICAgICA8L2phcj4KIAotICAgICAgICA8amFyIGphcmZpbGU9IiR7YnVpbGQuamFyc30vYXBwY2xpZW50LmphciIgCi0JICAgICBtYW5pZmVzdD0iJHtidWlsZC5kZXNjfS9jbGllbnQvTUFOSUZFU1QuTUYiPgorICAgICAgICA8amFyIGphcmZpbGU9IiR7YnVpbGQuamFyc30vYXBwY2xpZW50LmphciIKKyAgICAgICAgIG1hbmlmZXN0PSIke2J1aWxkLmRlc2N9L2NsaWVudC9NQU5JRkVTVC5NRiI+CiA8IS0tCiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iPgogICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IkZJTWFwcGluZ0NsaWVudC54bWwiIC8+CkBAIC0xNTIsMTcgKzE1MiwxNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjb3B5LXRvLXdlYmluZiI+Ci0JPGNvcHkgIHRvZGlyPSIke2J1aWxkLndlYmluZn0vV0VCLUlORi9jbGFzc2VzIiBmaWx0ZXJpbmc9Im9uIiBvdmVyd3JpdGU9InllcyIgID4KLQkgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5kZXN0fSI+Ci0JICAgIDxpbmNsdWRlIG5hbWU9Im15d2ViLyouY2xhc3MiLz4KLQkgIDwvZmlsZXNldD4KLQk8L2NvcHk+CisgICAgPGNvcHkgIHRvZGlyPSIke2J1aWxkLndlYmluZn0vV0VCLUlORi9jbGFzc2VzIiBmaWx0ZXJpbmc9Im9uIiBvdmVyd3JpdGU9InllcyIgID4KKyAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5kZXN0fSI+CisgICAgICAgIDxpbmNsdWRlIG5hbWU9Im15d2ViLyouY2xhc3MiLz4KKyAgICAgIDwvZmlsZXNldD4KKyAgICA8L2NvcHk+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImVhciIgZGVwZW5kcz0iY2xlYW4samFyIj4KLSAgICAgICAgPGVhciBlYXJmaWxlPSIke2J1aWxkLmVhcn0vJHthcHBuYW1lfS5lYXIiIAotCSAgICAgYXBweG1sPSIke2J1aWxkLmRlc2N9L2FwcGxpY2F0aW9uLnhtbCIgCi0JICAgICBtYW5pZmVzdD0iJHtidWlsZC5kZXNjfS9NQU5JRkVTVC5NRiI+CisgICAgICAgIDxlYXIgZWFyZmlsZT0iJHtidWlsZC5lYXJ9LyR7YXBwbmFtZX0uZWFyIgorICAgICAgICAgYXBweG1sPSIke2J1aWxkLmRlc2N9L2FwcGxpY2F0aW9uLnhtbCIKKyAgICAgICAgIG1hbmlmZXN0PSIke2J1aWxkLmRlc2N9L01BTklGRVNULk1GIj4KIAogICAgICAgICAgICAgPCEtLTxmaWxlc2V0IGRpcj0iJHtidWlsZC5qYXJzfSIgaW5jbHVkZXM9IiouamFyLC53YXIiLz4tLT4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5qYXJzfSIgaW5jbHVkZXM9IiouamFyIi8+CkBAIC0xNzIsOSArMTcyLDkgQEAKICAgICAgICAgICAgIDwvZmlsZXNldD4KICAgICAgICAgPC9lYXI+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0ic2V0dXAiPgotCTxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iPgorICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iPgogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iZGVwbG95IiAvPgogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iLS11c2VyIiAvPgogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHthZG1pbi51c2VyfSIgLz4KQEAgLTE4NSwxMiArMTg1LDEyIEBACiAgICAgICAgICAgICA8YXJnIHZhbHVlPSItLXJldHJpZXZlIiAvPgogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtidWlsZC5hcHBjbGllbnR9IiAvPgogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtidWlsZC5lYXJ9LyR7YXBwbmFtZX0uZWFyIiAvPgotCTwvZXhlYz4gCisgICAgPC9leGVjPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qYmktY29tcG9uZW50LXN1Ii8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJzZXR1cCI+Ci0JPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSI+CisgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSI+CiAgICAgICAgICAgICA8YXJnIHZhbHVlPSJ1bmRlcGxveSIgLz4KICAgICAgICAgICAgIDxhcmcgdmFsdWU9Ii0tdXNlciIgLz4KICAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7YWRtaW4udXNlcn0iIC8+CkBAIC0xOTksMTggKzE5OSwxOCBAQAogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iLS1wb3J0IiAvPgogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHthZG1pbi5wb3J0fSIgLz4KICAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7YXBwbmFtZX0iIC8+Ci0JPC9leGVjPiAKKyAgICA8L2V4ZWM+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamJpLWNvbXBvbmVudC1zdSIvPgogICAgIDwvdGFyZ2V0PgogCiAgICA8dGFyZ2V0IG5hbWU9InJ1bmNsaWVudCIgZGVwZW5kcz0ic2V0dXAiPgogICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVBQQ0xJRU5UfSI+CiAgICAgICAgICAgICA8ZW52IGtleT0iVk1BUkdTIiB2YWx1ZT0iLUR0ZXN0LnJlc3VsdHM9JHtyZXN1bHRzLmZpbGV9IiAvPgotCSAgICA8YXJnIHZhbHVlPSItY2xpZW50IiAvPgotCSAgICA8YXJnIHZhbHVlPSIke2J1aWxkLmFwcGNsaWVudH0vJHthcHBuYW1lfUNsaWVudC5qYXIiLz4KLQkgICAgPGFyZyB2YWx1ZT0iLW5hbWUiIC8+Ci0JICAgIDxhcmcgdmFsdWU9Ik15QXBwQ2xpZW50IiAvPgotICAgIDwvZXhlYz4gCisgICAgICAgIDxhcmcgdmFsdWU9Ii1jbGllbnQiIC8+CisgICAgICAgIDxhcmcgdmFsdWU9IiR7YnVpbGQuYXBwY2xpZW50fS8ke2FwcG5hbWV9Q2xpZW50LmphciIvPgorICAgICAgICA8YXJnIHZhbHVlPSItbmFtZSIgLz4KKyAgICAgICAgPGFyZyB2YWx1ZT0iTXlBcHBDbGllbnQiIC8+CisgICAgPC9leGVjPgogICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9Im1ha2VkaXJzIj4KQEAgLTI1MCwxNCArMjUwLDE0IEBACiAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi54bWwiIC8+CiAgICAgICAgICAgICA8L2ZpbGVzZXQ+CiAgICAgICAgIDwvY29weT4KLSAgICAgICAgCisKICAgICAgICAgPGNvcHkgIHRvZGlyPSIke2J1aWxkLmRlc2N9L2NsaWVudCIgZmlsdGVyaW5nPSJvbiIgb3ZlcndyaXRlPSJ5ZXMiICA+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7c3JjLmRpcn0vZGVzY3JpcHRvci9jbGllbnQiID4KICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLnhtbCIgLz4KLQkJPGluY2x1ZGUgbmFtZT0iTUFOSUZFU1QuTUYiIC8+CisgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1BTklGRVNULk1GIiAvPgogICAgICAgICAgICAgPC9maWxlc2V0PgogICAgICAgICA8L2NvcHk+Ci0gICAgICAgIAorCiAgICAgICAgIDxjb3B5ICB0b2Rpcj0iJHtidWlsZC5kZXNjfSIgZmlsdGVyaW5nPSJvbiIgb3ZlcndyaXRlPSJ5ZXMiICA+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7c3JjLmRpcn0vZGVzY3JpcHRvciIgPgogICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgLz4KQEAgLTI3MCw3ICsyNzAsNyBAQAogICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InN1bi1qMmVlLXJpLnhtbCIgLz4KICAgICAgICAgICAgIDwvZmlsZXNldD4KICAgICAgICAgPC9jb3B5PgotICAgICAgICAKKwogICAgICAgICA8Y29weSAgdG9kaXI9IiR7YnVpbGQuZWpic3JjfSIgZmlsdGVyaW5nPSJvbiIgb3ZlcndyaXRlPSJ5ZXMiICA+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7c3JjLmRpcn0vZWpiIiA+CiAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKiovKi5qYXZhIiAvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyLW9uZXdheS9jbGllbnQvRmluZEludGVyZXN0Q2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXItb25ld2F5L2NsaWVudC9GaW5kSW50ZXJlc3RDbGllbnQuamF2YQppbmRleCBlMDhmNTg2Li4xNTM3YzFhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXItb25ld2F5L2NsaWVudC9GaW5kSW50ZXJlc3RDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXItb25ld2F5L2NsaWVudC9GaW5kSW50ZXJlc3RDbGllbnQuamF2YQpAQCAtMzEsNyArMzEsNyBAQAogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0SWQgPSAiamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci1vbmV3YXkiOwogCiAgICAgcHVibGljIEZpbmRJbnRlcmVzdENsaWVudCgpIHsKLQlzdGF0dXMuYWRkRGVzY3JpcHRpb24odGVzdElkKTsKKyAgICBzdGF0dXMuYWRkRGVzY3JpcHRpb24odGVzdElkKTsKICAgICB9CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewpAQCAtNDEsMTUgKzQxLDE1IEBACiAgICAgICAgIGNsaWVudC5kb1Rlc3QoKTsKICAgLy8gICAgICBjbGllbnQuZG9TZXJ2bGV0VGVzdCgpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKIAogICAgICAgICAvL1N0cmluZyB0YXJnZXRFbmRwb2ludEFkZHJlc3MgPQotCS8vCQkiaHR0cDovL2xvY2FsaG9zdDo4MDgwL2ZpbmRpbnRyL0ZpbmRJbnRlcmVzdCI7CisgICAgLy8gICAgICAgICJodHRwOi8vbG9jYWxob3N0OjgwODAvZmluZGludHIvRmluZEludGVyZXN0IjsKICAgICAgICAgU3RyaW5nIHRhcmdldEVuZHBvaW50QWRkcmVzcyA9Ci0JCQkiaHR0cDovL2xvY2FsaG9zdDoxMjAxMy9JbnRlcmVzdElGUG9ydCI7CisgICAgICAgICAgICAiaHR0cDovL2xvY2FsaG9zdDoxMjAxMy9JbnRlcmVzdElGUG9ydCI7CiAKLSAgICAJdHJ5IHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIEZpbmRJbnRlcmVzdCBmaW5kSW50clNlcnZpY2UgPSAoRmluZEludGVyZXN0KQogICAgICAgICAgICAgICAgICAgICBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvc2VydmljZS9GaW5kSW50ZXJlc3QiKTsKQEAgLTU3LDIzICs1NywyMyBAQAogICAgICAgICAgICAgSW50ZXJlc3RJRiBpbnRlcmVzdElGUG9ydCA9IGZpbmRJbnRyU2VydmljZS5nZXRJbnRlcmVzdElGUG9ydCgpOwogCiAgICAgICAgICAgICAoKFN0dWIpaW50ZXJlc3RJRlBvcnQpLl9zZXRQcm9wZXJ0eSAoU3R1Yi5FTkRQT0lOVF9BRERSRVNTX1BST1BFUlRZLAotICAgICAgICAgICAgICAgICAJCQkJdGFyZ2V0RW5kcG9pbnRBZGRyZXNzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldEVuZHBvaW50QWRkcmVzcyk7CiAKLQkgICAgaW50ZXJlc3RJRlBvcnQuY2FsY3VsYXRlSW50ZXJlc3QoYmFsYW5jZSwgcGVyaW9kKTsKLSAgICAgICAgICAgICAgICAKLQkgICAgc3RhdHVzLmFkZFN0YXR1cyh0ZXN0SWQgKyAiMSA6IEVKQiBFbmRwb2ludCBhbmQgU2VydmxldCBFbmRwb2ludCBUZXN0Iiwgc3RhdHVzLlBBU1MpOworICAgICAgICBpbnRlcmVzdElGUG9ydC5jYWxjdWxhdGVJbnRlcmVzdChiYWxhbmNlLCBwZXJpb2QpOwogCi0gICAgCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQlzdGF0dXMuYWRkU3RhdHVzKHRlc3RJZCArICIxIDogRUpCIEVuZHBvaW50IGFuZCBTZXJ2bGV0IEVuZHBvaW50IFRlc3QiLCBzdGF0dXMuRkFJTCk7CisgICAgICAgIHN0YXR1cy5hZGRTdGF0dXModGVzdElkICsgIjEgOiBFSkIgRW5kcG9pbnQgYW5kIFNlcnZsZXQgRW5kcG9pbnQgVGVzdCIsIHN0YXR1cy5QQVNTKTsKKworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgc3RhdHVzLmFkZFN0YXR1cyh0ZXN0SWQgKyAiMSA6IEVKQiBFbmRwb2ludCBhbmQgU2VydmxldCBFbmRwb2ludCBUZXN0Iiwgc3RhdHVzLkZBSUwpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJmaW5kaW50ciBjbGllbnQgZmFpbGVkIik7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLQl9IAorICAgIH0KICAgICB9CiAKICAgIC8qIHB1YmxpYyB2b2lkIGRvU2VydmxldFRlc3QoKSB7Ci0gICAgCXRyeSB7Ci0JICAgIFN0cmluZyB0YXJnZXRFbmRwb2ludEFkZHJlc3MgPQotCQkiaHR0cDovL2xvY2FsaG9zdDo4MDgwL0ZpbmRJbnRlcmVzdFNlcnZsZXQvRmluZEludGVyZXN0IjsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgU3RyaW5nIHRhcmdldEVuZHBvaW50QWRkcmVzcyA9CisgICAgICAgICJodHRwOi8vbG9jYWxob3N0OjgwODAvRmluZEludGVyZXN0U2VydmxldC9GaW5kSW50ZXJlc3QiOwogCiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBGaW5kSW50ZXJlc3QgZmluZEludHJTZXJ2aWNlID0gKEZpbmRJbnRlcmVzdCkKQEAgLTgyLDIyICs4MiwyMiBAQAogICAgICAgICAgICAgSW50ZXJlc3RJRiBpbnRlcmVzdElGUG9ydCA9IGZpbmRJbnRyU2VydmljZS5nZXRJbnRlcmVzdElGUG9ydCgpOwogCiAgICAgICAgICAgICAoKFN0dWIpaW50ZXJlc3RJRlBvcnQpLl9zZXRQcm9wZXJ0eSAoU3R1Yi5FTkRQT0lOVF9BRERSRVNTX1BST1BFUlRZLAotCQkJCQkJdGFyZ2V0RW5kcG9pbnRBZGRyZXNzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldEVuZHBvaW50QWRkcmVzcyk7CiAKLQkgICAgZG91YmxlIGludGVyZXN0ID0gaW50ZXJlc3RJRlBvcnQuY2FsY3VsYXRlSW50ZXJlc3QoYmFsYW5jZSwgcGVyaW9kKTsKKyAgICAgICAgZG91YmxlIGludGVyZXN0ID0gaW50ZXJlc3RJRlBvcnQuY2FsY3VsYXRlSW50ZXJlc3QoYmFsYW5jZSwgcGVyaW9kKTsKIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbnRlcmVzdCBvbiAkMzAwIGZvciBhIHBlcmlvZCBvZiAzLjUgeWVhcnMgaXMgIgotCQkJCSsgaW50ZXJlc3QpOwotICAgICAgICAgICAgICAgIAotCSAgICBpZiAoaW50ZXJlc3QgPT0gMjEwLjApIHsKLQkJc3RhdHVzLmFkZFN0YXR1cyhURVNUX1NVSVRFX0lEKyIyIDogRUpCIEVuZHBvaW50IGFuZCBTZXJ2bGV0IEVuZHBvaW50IFRlc3QiLCBzdGF0dXMuUEFTUyk7Ci0JICAgIH0KLSAgICAJfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCXN0YXR1cy5hZGRTdGF0dXMoVEVTVF9TVUlURV9JRCsiMiA6IEVKQiBFbmRwb2ludCBhbmQgU2VydmxldCBFbmRwb2ludCBUZXN0Iiwgc3RhdHVzLkZBSUwpOworICAgICAgICAgICAgICAgICsgaW50ZXJlc3QpOworCisgICAgICAgIGlmIChpbnRlcmVzdCA9PSAyMTAuMCkgeworICAgICAgICBzdGF0dXMuYWRkU3RhdHVzKFRFU1RfU1VJVEVfSUQrIjIgOiBFSkIgRW5kcG9pbnQgYW5kIFNlcnZsZXQgRW5kcG9pbnQgVGVzdCIsIHN0YXR1cy5QQVNTKTsKKyAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgc3RhdHVzLmFkZFN0YXR1cyhURVNUX1NVSVRFX0lEKyIyIDogRUpCIEVuZHBvaW50IGFuZCBTZXJ2bGV0IEVuZHBvaW50IFRlc3QiLCBzdGF0dXMuRkFJTCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZpbmRpbnRyIGNsaWVudCBmYWlsZWQiKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotCX0gCi0Jc3RhdHVzLnByaW50U3VtbWFyeSgiSlNSMTA5IC0gRmluZEludGVyZXN0VGVzdCIpOworICAgIH0KKyAgICBzdGF0dXMucHJpbnRTdW1tYXJ5KCJKU1IxMDkgLSBGaW5kSW50ZXJlc3RUZXN0Iik7CiAgICAgfSovCiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci1vbmV3YXkvY2xpZW50L0ZpbmRJbnRlcmVzdENsaWVudE5vbkh0dHBCQy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyLW9uZXdheS9jbGllbnQvRmluZEludGVyZXN0Q2xpZW50Tm9uSHR0cEJDLmphdmEKaW5kZXggZWUyZjQyYS4uMjkzYTVjYiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyLW9uZXdheS9jbGllbnQvRmluZEludGVyZXN0Q2xpZW50Tm9uSHR0cEJDLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyLW9uZXdheS9jbGllbnQvRmluZEludGVyZXN0Q2xpZW50Tm9uSHR0cEJDLmphdmEKQEAgLTMxLDcgKzMxLDcgQEAKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdElkID0gImpiaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXItb25ld2F5IjsKIAogICAgIHB1YmxpYyBGaW5kSW50ZXJlc3RDbGllbnROb25IdHRwQkMoKSB7Ci0Jc3RhdHVzLmFkZERlc2NyaXB0aW9uKHRlc3RJZCk7CisgICAgc3RhdHVzLmFkZERlc2NyaXB0aW9uKHRlc3RJZCk7CiAgICAgfQogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTQxLDEzICs0MSwxMyBAQAogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgIC8vICAgICAgY2xpZW50LmRvU2VydmxldFRlc3QoKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAKICAgICAgICAgU3RyaW5nIHRhcmdldEVuZHBvaW50QWRkcmVzcyA9Ci0JCQkiaHR0cDovL2xvY2FsaG9zdDo4MDgwL2ZpbmRpbnRyL0ZpbmRJbnRlcmVzdCI7CisgICAgICAgICAgICAiaHR0cDovL2xvY2FsaG9zdDo4MDgwL2ZpbmRpbnRyL0ZpbmRJbnRlcmVzdCI7CiAKLSAgICAJdHJ5IHsKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIEZpbmRJbnRlcmVzdCBmaW5kSW50clNlcnZpY2UgPSAoRmluZEludGVyZXN0KQogICAgICAgICAgICAgICAgICAgICBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvc2VydmljZS9GaW5kSW50ZXJlc3QiKTsKQEAgLTU1LDIzICs1NSwyMyBAQAogICAgICAgICAgICAgSW50ZXJlc3RJRiBpbnRlcmVzdElGUG9ydCA9IGZpbmRJbnRyU2VydmljZS5nZXRJbnRlcmVzdElGUG9ydCgpOwogCiAgICAgICAgICAgICAoKFN0dWIpaW50ZXJlc3RJRlBvcnQpLl9zZXRQcm9wZXJ0eSAoU3R1Yi5FTkRQT0lOVF9BRERSRVNTX1BST1BFUlRZLAotICAgICAgICAgICAgICAgICAJCQkJdGFyZ2V0RW5kcG9pbnRBZGRyZXNzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldEVuZHBvaW50QWRkcmVzcyk7CiAKLQkgICAgaW50ZXJlc3RJRlBvcnQuY2FsY3VsYXRlSW50ZXJlc3QoYmFsYW5jZSwgcGVyaW9kKTsKLSAgICAgICAgICAgICAgICAKLQkgICAgc3RhdHVzLmFkZFN0YXR1cyh0ZXN0SWQgKyAiMSA6IEVKQiBFbmRwb2ludCBhbmQgU2VydmxldCBFbmRwb2ludCBUZXN0Iiwgc3RhdHVzLlBBU1MpOworICAgICAgICBpbnRlcmVzdElGUG9ydC5jYWxjdWxhdGVJbnRlcmVzdChiYWxhbmNlLCBwZXJpb2QpOwogCi0gICAgCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQlzdGF0dXMuYWRkU3RhdHVzKHRlc3RJZCArICIxIDogRUpCIEVuZHBvaW50IGFuZCBTZXJ2bGV0IEVuZHBvaW50IFRlc3QiLCBzdGF0dXMuRkFJTCk7CisgICAgICAgIHN0YXR1cy5hZGRTdGF0dXModGVzdElkICsgIjEgOiBFSkIgRW5kcG9pbnQgYW5kIFNlcnZsZXQgRW5kcG9pbnQgVGVzdCIsIHN0YXR1cy5QQVNTKTsKKworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgc3RhdHVzLmFkZFN0YXR1cyh0ZXN0SWQgKyAiMSA6IEVKQiBFbmRwb2ludCBhbmQgU2VydmxldCBFbmRwb2ludCBUZXN0Iiwgc3RhdHVzLkZBSUwpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJmaW5kaW50ciBjbGllbnQgZmFpbGVkIik7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLQl9IAorICAgIH0KICAgICB9CiAKICAgIC8qIHB1YmxpYyB2b2lkIGRvU2VydmxldFRlc3QoKSB7Ci0gICAgCXRyeSB7Ci0JICAgIFN0cmluZyB0YXJnZXRFbmRwb2ludEFkZHJlc3MgPQotCQkiaHR0cDovL2xvY2FsaG9zdDo4MDgwL0ZpbmRJbnRlcmVzdFNlcnZsZXQvRmluZEludGVyZXN0IjsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgU3RyaW5nIHRhcmdldEVuZHBvaW50QWRkcmVzcyA9CisgICAgICAgICJodHRwOi8vbG9jYWxob3N0OjgwODAvRmluZEludGVyZXN0U2VydmxldC9GaW5kSW50ZXJlc3QiOwogCiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBGaW5kSW50ZXJlc3QgZmluZEludHJTZXJ2aWNlID0gKEZpbmRJbnRlcmVzdCkKQEAgLTgwLDIyICs4MCwyMiBAQAogICAgICAgICAgICAgSW50ZXJlc3RJRiBpbnRlcmVzdElGUG9ydCA9IGZpbmRJbnRyU2VydmljZS5nZXRJbnRlcmVzdElGUG9ydCgpOwogCiAgICAgICAgICAgICAoKFN0dWIpaW50ZXJlc3RJRlBvcnQpLl9zZXRQcm9wZXJ0eSAoU3R1Yi5FTkRQT0lOVF9BRERSRVNTX1BST1BFUlRZLAotCQkJCQkJdGFyZ2V0RW5kcG9pbnRBZGRyZXNzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldEVuZHBvaW50QWRkcmVzcyk7CiAKLQkgICAgZG91YmxlIGludGVyZXN0ID0gaW50ZXJlc3RJRlBvcnQuY2FsY3VsYXRlSW50ZXJlc3QoYmFsYW5jZSwgcGVyaW9kKTsKKyAgICAgICAgZG91YmxlIGludGVyZXN0ID0gaW50ZXJlc3RJRlBvcnQuY2FsY3VsYXRlSW50ZXJlc3QoYmFsYW5jZSwgcGVyaW9kKTsKIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbnRlcmVzdCBvbiAkMzAwIGZvciBhIHBlcmlvZCBvZiAzLjUgeWVhcnMgaXMgIgotCQkJCSsgaW50ZXJlc3QpOwotICAgICAgICAgICAgICAgIAotCSAgICBpZiAoaW50ZXJlc3QgPT0gMjEwLjApIHsKLQkJc3RhdHVzLmFkZFN0YXR1cyhURVNUX1NVSVRFX0lEKyIyIDogRUpCIEVuZHBvaW50IGFuZCBTZXJ2bGV0IEVuZHBvaW50IFRlc3QiLCBzdGF0dXMuUEFTUyk7Ci0JICAgIH0KLSAgICAJfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCXN0YXR1cy5hZGRTdGF0dXMoVEVTVF9TVUlURV9JRCsiMiA6IEVKQiBFbmRwb2ludCBhbmQgU2VydmxldCBFbmRwb2ludCBUZXN0Iiwgc3RhdHVzLkZBSUwpOworICAgICAgICAgICAgICAgICsgaW50ZXJlc3QpOworCisgICAgICAgIGlmIChpbnRlcmVzdCA9PSAyMTAuMCkgeworICAgICAgICBzdGF0dXMuYWRkU3RhdHVzKFRFU1RfU1VJVEVfSUQrIjIgOiBFSkIgRW5kcG9pbnQgYW5kIFNlcnZsZXQgRW5kcG9pbnQgVGVzdCIsIHN0YXR1cy5QQVNTKTsKKyAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgc3RhdHVzLmFkZFN0YXR1cyhURVNUX1NVSVRFX0lEKyIyIDogRUpCIEVuZHBvaW50IGFuZCBTZXJ2bGV0IEVuZHBvaW50IFRlc3QiLCBzdGF0dXMuRkFJTCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZpbmRpbnRyIGNsaWVudCBmYWlsZWQiKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotCX0gCi0Jc3RhdHVzLnByaW50U3VtbWFyeSgiSlNSMTA5IC0gRmluZEludGVyZXN0VGVzdCIpOworICAgIH0KKyAgICBzdGF0dXMucHJpbnRTdW1tYXJ5KCJKU1IxMDkgLSBGaW5kSW50ZXJlc3RUZXN0Iik7CiAgICAgfSovCiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci1vbmV3YXkvY2xpZW50L1NPQVBFamJDb25zdW1lci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyLW9uZXdheS9jbGllbnQvU09BUEVqYkNvbnN1bWVyLmphdmEKaW5kZXggZmEwMmQ1Zi4uZTUzNmVkNiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyLW9uZXdheS9jbGllbnQvU09BUEVqYkNvbnN1bWVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyLW9uZXdheS9jbGllbnQvU09BUEVqYkNvbnN1bWVyLmphdmEKQEAgLTIzLDE5ICsyMywxOSBAQAogcHVibGljIGNsYXNzIFNPQVBFamJDb25zdW1lciB7CiAgICAgcHJpdmF0ZSBkb3VibGUgYmFsYW5jZSA9IDMwMC4wMDsKICAgICBwcml2YXRlIGRvdWJsZSBwZXJpb2QgPSAzLjU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXR1cyA9IG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdElkID0gImpiaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXItb25ld2F5IjsKIAogICAgIHB1YmxpYyBTT0FQRWpiQ29uc3VtZXIoKSB7CiAgICAgICAgIHN0YXR1cy5hZGREZXNjcmlwdGlvbih0ZXN0SWQpOwogICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICBTT0FQRWpiQ29uc3VtZXIgY2xpZW50ID0gbmV3IFNPQVBFamJDb25zdW1lcigpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXR1cy5wcmludFN1bW1hcnkodGVzdElkKTsKICAgIH0KQEAgLTQ1LDIwICs0NSwyMCBAQAogICAgICAgICAgLy8gICAgICAgICAgICAgICAiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3NvYXAvd2ViL2ZpbmRpbnRlcmVzdCI7CiAgICAgICAgIFN0cmluZyB0YXJnZXRFbmRwb2ludEFkZHJlc3MgPQogICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9sb2NhbGhvc3Q6MTIwMTMvSW50ZXJlc3RJRlBvcnQiOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgRmluZEludGVyZXN0IGZpbmRJbnRyU2VydmljZSA9IChGaW5kSW50ZXJlc3QpCiAgICAgICAgICAgICAgICAgICAgIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9zZXJ2aWNlL0ZpbmRJbnRlcmVzdCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgSW50ZXJlc3RJRiBpbnRlcmVzdElGUG9ydCA9IGZpbmRJbnRyU2VydmljZS5nZXRJbnRlcmVzdElGUG9ydCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgKChTdHViKWludGVyZXN0SUZQb3J0KS5fc2V0UHJvcGVydHkgKFN0dWIuRU5EUE9JTlRfQUREUkVTU19QUk9QRVJUWSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRFbmRwb2ludEFkZHJlc3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgaW50ZXJlc3RJRlBvcnQuY2FsY3VsYXRlSW50ZXJlc3QoYmFsYW5jZSwgcGVyaW9kKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIHN0YXR1cy5hZGRTdGF0dXModGVzdElkICsgIjEgOiBFSkIgRW5kcG9pbnQgVGVzdCIsIHN0YXR1cy5QQVNTKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICAgICAgc3RhdHVzLmFkZFN0YXR1cyh0ZXN0SWQgKyAiMSA6IEVKQiBFbmRwb2ludCBUZXN0Iiwgc3RhdHVzLkZBSUwpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJmaW5kaW50ciBjbGllbnQgZmFpbGVkIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXItb25ld2F5L2NsaWVudC9TT0FQRWpiQ29uc3VtZXJOb25IdHRwQkMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci1vbmV3YXkvY2xpZW50L1NPQVBFamJDb25zdW1lck5vbkh0dHBCQy5qYXZhCmluZGV4IDJiNTkzOTMuLjliYmFjZDUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci1vbmV3YXkvY2xpZW50L1NPQVBFamJDb25zdW1lck5vbkh0dHBCQy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci1vbmV3YXkvY2xpZW50L1NPQVBFamJDb25zdW1lck5vbkh0dHBCQy5qYXZhCkBAIC0yMywxOSArMjMsMTkgQEAKIHB1YmxpYyBjbGFzcyBTT0FQRWpiQ29uc3VtZXJOb25IdHRwQkMgewogICAgIHByaXZhdGUgZG91YmxlIGJhbGFuY2UgPSAzMDAuMDA7CiAgICAgcHJpdmF0ZSBkb3VibGUgcGVyaW9kID0gMy41OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0dXMgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RJZCA9ICJqYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyLW9uZXdheSI7CiAKICAgICBwdWJsaWMgU09BUEVqYkNvbnN1bWVyTm9uSHR0cEJDKCkgewogICAgICAgICBzdGF0dXMuYWRkRGVzY3JpcHRpb24odGVzdElkKTsKICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgU09BUEVqYkNvbnN1bWVyTm9uSHR0cEJDIGNsaWVudCA9IG5ldyBTT0FQRWpiQ29uc3VtZXJOb25IdHRwQkMoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0dXMucHJpbnRTdW1tYXJ5KHRlc3RJZCk7CiAgICB9CkBAIC00MywyMCArNDMsMjAgQEAKICAgICBwcml2YXRlIHZvaWQgZG9UZXN0KCkgewogICAgICAgICBTdHJpbmcgdGFyZ2V0RW5kcG9pbnRBZGRyZXNzID0KICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vbG9jYWxob3N0OjgwODAvc29hcC93ZWIvZmluZGludGVyZXN0IjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIEZpbmRJbnRlcmVzdCBmaW5kSW50clNlcnZpY2UgPSAoRmluZEludGVyZXN0KQogICAgICAgICAgICAgICAgICAgICBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvc2VydmljZS9GaW5kSW50ZXJlc3QiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIEludGVyZXN0SUYgaW50ZXJlc3RJRlBvcnQgPSBmaW5kSW50clNlcnZpY2UuZ2V0SW50ZXJlc3RJRlBvcnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICgoU3R1YilpbnRlcmVzdElGUG9ydCkuX3NldFByb3BlcnR5IChTdHViLkVORFBPSU5UX0FERFJFU1NfUFJPUEVSVFksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0RW5kcG9pbnRBZGRyZXNzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBpbnRlcmVzdElGUG9ydC5jYWxjdWxhdGVJbnRlcmVzdChiYWxhbmNlLCBwZXJpb2QpOyAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKKyAgICAgICAgICAgIGludGVyZXN0SUZQb3J0LmNhbGN1bGF0ZUludGVyZXN0KGJhbGFuY2UsIHBlcmlvZCk7CisKICAgICAgICAgICAgIHN0YXR1cy5hZGRTdGF0dXModGVzdElkICsgIjEgOiBFSkIgRW5kcG9pbnQgVGVzdCIsIHN0YXR1cy5QQVNTKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICAgICAgc3RhdHVzLmFkZFN0YXR1cyh0ZXN0SWQgKyAiMSA6IEVKQiBFbmRwb2ludCBUZXN0Iiwgc3RhdHVzLkZBSUwpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJmaW5kaW50ciBjbGllbnQgZmFpbGVkIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXItb25ld2F5L2VqYi9JbnRlcmVzdEVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyLW9uZXdheS9lamIvSW50ZXJlc3RFSkIuamF2YQppbmRleCA0ZDFmMTlmLi40MmRiYzVhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXItb25ld2F5L2VqYi9JbnRlcmVzdEVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci1vbmV3YXkvZWpiL0ludGVyZXN0RUpCLmphdmEKQEAgLTE3LDcgKzE3LDcgQEAKIHBhY2thZ2UgbXllamI7CiAKIGltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKLWltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247IAoraW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQmVhbjsKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dDsKIGltcG9ydCBqYWthcnRhLmVqYi5FSkJFeGNlcHRpb247CkBAIC0yNiwxMSArMjYsMTEgQEAKIHB1YmxpYyBjbGFzcyBJbnRlcmVzdEVKQiBpbXBsZW1lbnRzIFNlc3Npb25CZWFuIHsKIAogICAgIHByaXZhdGUgU2Vzc2lvbkNvbnRleHQgc2M7Ci0gICAgCisKICAgICBwdWJsaWMgSW50ZXJlc3RFSkIoKXt9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEludGVyZXN0RUpCOjplamJDcmVhdGUgISEiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEludGVyZXN0RUpCOjplamJDcmVhdGUgISEiKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBjYWxjdWxhdGVJbnRlcmVzdChkb3VibGUgYmFsYW5jZSwgZG91YmxlIHBlcmlvZCkgewpAQCAtMzgsMTMgKzM4LDEzIEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgc2MpIHsKLQkKKwogICAgICAgICB0aGlzLnNjID0gc2M7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7fQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7fQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkge30KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci1vbmV3YXkvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyLW9uZXdheS9zb2FwLWJpbmRpbmctc3UtYWxhc2thL2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKaW5kZXggZDE2YzE1Ny4uZjFiM2Y3YSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyLW9uZXdheS9zb2FwLWJpbmRpbmctc3UtYWxhc2thL2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyLW9uZXdheS9zb2FwLWJpbmRpbmctc3UtYWxhc2thL2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKQEAgLTE5LDkgKzE5LDkgQEAKIAogPCEtLSBqYmkueG1sIGZpbGUgZm9yIHRoZSBTT0FQIGJpbmRpbmcgZGVwbG95bWVudHMgYmluZGluZy4gLS0+CiA8amJpCi0gICAgdmVyc2lvbj0iMS4wIiAKLSAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIiAKLSAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKKyAgICB2ZXJzaW9uPSIxLjAiCisgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIC4vamJpLnhzZCI+CiAgIDxzZXJ2aWNlLWFzc2VtYmx5PgogICAgIDxpZGVudGlmaWNhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci1vbmV3YXkvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9zdS9NRVRBLUlORi9qYmkueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyLW9uZXdheS9zb2FwLWJpbmRpbmctc3UtYWxhc2thL3N1L01FVEEtSU5GL2piaS54bWwKaW5kZXggZjczMjAzYi4uY2Q2N2RmZSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyLW9uZXdheS9zb2FwLWJpbmRpbmctc3UtYWxhc2thL3N1L01FVEEtSU5GL2piaS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyLW9uZXdheS9zb2FwLWJpbmRpbmctc3UtYWxhc2thL3N1L01FVEEtSU5GL2piaS54bWwKQEAgLTE4LDEwICsxOCwxMCBAQAogLS0+CiAKIDxqYmkgdmVyc2lvbj0iMS4wIgotCSB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKLQkgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIgCi0JIHhtbG5zOnRucz0iaHR0cDovL2hlbGxvLm9yZy93c2RsIgotCSB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSBqYmkueHNkIj4KLQk8c2VydmljZXMgYmluZGluZy1jb21wb25lbnQ9InRydWUiPgkJCi0JPC9zZXJ2aWNlcz4KKyAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIKKyAgICAgeG1sbnM6dG5zPSJodHRwOi8vaGVsbG8ub3JnL3dzZGwiCisgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIGpiaS54c2QiPgorICAgIDxzZXJ2aWNlcyBiaW5kaW5nLWNvbXBvbmVudD0idHJ1ZSI+CisgICAgPC9zZXJ2aWNlcz4KIDwvamJpPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyLW9uZXdheS93ZWIvRmluZEludGVyZXN0U2VydmxldEltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci1vbmV3YXkvd2ViL0ZpbmRJbnRlcmVzdFNlcnZsZXRJbXBsLmphdmEKaW5kZXggNjdmMjI4OC4uZGYzOTdiNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyLW9uZXdheS93ZWIvRmluZEludGVyZXN0U2VydmxldEltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXItb25ld2F5L3dlYi9GaW5kSW50ZXJlc3RTZXJ2bGV0SW1wbC5qYXZhCkBAIC0yMSwxNSArMjEsMTUgQEAKIGltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwogaW1wb3J0IGphdmF4LnhtbC5ycGMuQ2FsbDsKIGltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKLWltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247IAoraW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBqYXZheC5uYW1pbmcuKjsKIGltcG9ydCBqYXZheC54bWwucnBjLlNlcnZpY2U7CiBpbXBvcnQgamF2YXgueG1sLnJwYy5zZXJ2ZXIuU2VydmljZUxpZmVjeWNsZTsKIGltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwogaW1wb3J0IGpha2FydGEuc2VydmxldC5TaW5nbGVUaHJlYWRNb2RlbDsKIAotcHVibGljIGNsYXNzIEZpbmRJbnRlcmVzdFNlcnZsZXRJbXBsIGltcGxlbWVudHMgCi0JCQlTaW5nbGVUaHJlYWRNb2RlbCwgU2VydmljZUxpZmVjeWNsZSB7CitwdWJsaWMgY2xhc3MgRmluZEludGVyZXN0U2VydmxldEltcGwgaW1wbGVtZW50cworICAgICAgICAgICAgU2luZ2xlVGhyZWFkTW9kZWwsIFNlcnZpY2VMaWZlY3ljbGUgewogCiAgICAgcHVibGljIEZpbmRJbnRlcmVzdFNlcnZsZXRJbXBsKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZpbmRJbnRlcmVzdFNlcnZsZXRJbXBsKCkgaW5zdGFudGlhdGVkIik7CkBAIC00NCw2ICs0NCw2IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgY2FsY3VsYXRlSW50ZXJlc3QoZG91YmxlIGJhbGFuY2UsIGRvdWJsZSBwZXJpb2QpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oImNhbGN1bGF0ZUludGVyZXN0IGludm9rZWQgZnJvbSBzZXJ2bGV0IGVuZHBvaW50ICIgKyAoMC4yKmJhbGFuY2UqcGVyaW9kKSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJjYWxjdWxhdGVJbnRlcmVzdCBpbnZva2VkIGZyb20gc2VydmxldCBlbmRwb2ludCAiICsgKDAuMipiYWxhbmNlKnBlcmlvZCkpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci1vbmV3YXkvd3Njb21waWxlX2NvbmZpZy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXItb25ld2F5L3dzY29tcGlsZV9jb25maWcueG1sCmluZGV4IDRjZmI5NTQuLmMxMWI4ODYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci1vbmV3YXkvd3Njb21waWxlX2NvbmZpZy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyLW9uZXdheS93c2NvbXBpbGVfY29uZmlnLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8Y29uZmlndXJhdGlvbgogICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4LXJwYy9yaS9jb25maWciPgotICA8d3NkbCAKKyAgPHdzZGwKICAgICAgIGxvY2F0aW9uPSJGaW5kSW50ZXJlc3Qud3NkbCIKICAgICAgIHBhY2thZ2VOYW1lPSJteWVqYiIvPgogPC9jb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyLW9uZXdheS93c2NvbXBpbGVfY29uZmlnX2NsaWVudC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXItb25ld2F5L3dzY29tcGlsZV9jb25maWdfY2xpZW50LnhtbAppbmRleCBlYmZmNjljLi45YzMxOGM4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXItb25ld2F5L3dzY29tcGlsZV9jb25maWdfY2xpZW50LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXItb25ld2F5L3dzY29tcGlsZV9jb25maWdfY2xpZW50LnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8Y29uZmlndXJhdGlvbgogICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4LXJwYy9yaS9jb25maWciPgotICA8d3NkbCAKKyAgPHdzZGwKICAgICAgIGxvY2F0aW9uPSJGaW5kSW50ZXJlc3Qud3NkbCIKICAgICAgIHBhY2thZ2VOYW1lPSJteWNsaWVudCIvPgogPC9jb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyLW9uZXdheS93c2NvbXBpbGVfY29uZmlnX3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXItb25ld2F5L3dzY29tcGlsZV9jb25maWdfd2ViLnhtbAppbmRleCA5ZDFlMTJmLi5lODAwMWNkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXItb25ld2F5L3dzY29tcGlsZV9jb25maWdfd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXItb25ld2F5L3dzY29tcGlsZV9jb25maWdfd2ViLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8Y29uZmlndXJhdGlvbgogICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4LXJwYy9yaS9jb25maWciPgotICA8d3NkbCAKKyAgPHdzZGwKICAgICAgIGxvY2F0aW9uPSJGaW5kSW50ZXJlc3Qud3NkbCIKICAgICAgIHBhY2thZ2VOYW1lPSJteXdlYiIvPgogPC9jb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXIvYnVpbGQucHJvcGVydGllcwppbmRleCBlZDk0YzA1Li5kN2NkOGMwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJmaW5kaW50ZXJlc3QiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iamJpLWNvbXBvbmVudC1zdS1hc3NlbWJseSIgdmFsdWU9ImVqYl9maW5kaW50ZXJlc3RfYXNzZW1ibHkiLz4KIDxwcm9wZXJ0eSBuYW1lPSJqYmktY29tcG9uZW50LXN1IiB2YWx1ZT0iZWpiX2pheHJwY19jb25zdW1lcl9zdSIvPgogPHByb3BlcnR5IG5hbWU9ImpiaS1jb21wb25lbnQtc3UtZGlyIiB2YWx1ZT0ic29hcC1iaW5kaW5nLXN1LWFsYXNrYSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci9idWlsZC54bWwKaW5kZXggZWY5ZGYzOS4uMzU5NjcxYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXIvYnVpbGQueG1sCkBAIC0zOSw3ICszOSw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0icm9vdC5kaXIiIHZhbHVlPSIuIiAvPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0ic3JjLmRpciIgdmFsdWU9Ii4iIC8+Ci0JPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJGaW5kSW50ZXJlc3RBcHAiIC8+CisgICAgPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJGaW5kSW50ZXJlc3RBcHAiIC8+CiAKICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJ1aWxkLmRpciIgdmFsdWU9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUiIC8+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJidWlsZC5yZXBvc2l0b3J5IiB2YWx1ZT0iJHtidWlsZC5kaXJ9L2J1aWxkZWFycyIvPgpAQCAtNTgsMTMgKzU4LDEzIEBACiAKICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImRlYnVnIiB2YWx1ZT0ib24iIC8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJzZXR1cCI+Ci0JPGRlbGV0ZSBkaXI9IiR7YnVpbGQuZGlyfSIvPgorICAgIDxkZWxldGUgZGlyPSIke2J1aWxkLmRpcn0iLz4KICAgICAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQucmVwb3NpdG9yeX0iLz4KICAgICAgICAgPGRlbGV0ZSBkaXI9IiR7YnVpbGQuYXBwY2xpZW50fSIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPCEtLSB0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0ic2V0dXAsY2xlYW4iIC0tPgogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0id3Njb21waWxlLHNldHVwIiA+CiAgICAgICAgIDwhLS0gYW50IHRhcmdldD0ibWFrZWRpcnMiLyAtLT4KQEAgLTEwMSw4ICsxMDEsOCBAQAogICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IioqL0ZpbmRJbnRlcmVzdF9TY2hlbWEueHNkIiAvPgogICAgICAgICAgICAgPC9maWxlc2V0PgogICAgICAgICA8L2phcj4KLSAgICAgICAgCi0JPGFudGNhbGwgdGFyZ2V0PSJjb3B5LXRvLXdlYmluZiIgLz4KKworICAgIDxhbnRjYWxsIHRhcmdldD0iY29weS10by13ZWJpbmYiIC8+CiAKICAgICAgICAgPGphciBqYXJmaWxlPSIke2J1aWxkLmphcnN9L3dlYi53YXIiID4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC53ZWJpbmZ9Ij4KQEAgLTEyNyw4ICsxMjcsOCBAQAogICAgICAgICAgICAgPC9maWxlc2V0PgogICAgICAgICA8L2phcj4KIAotICAgICAgICA8amFyIGphcmZpbGU9IiR7YnVpbGQuamFyc30vYXBwY2xpZW50LmphciIgCi0JICAgICBtYW5pZmVzdD0iJHtidWlsZC5kZXNjfS9jbGllbnQvTUFOSUZFU1QuTUYiPgorICAgICAgICA8amFyIGphcmZpbGU9IiR7YnVpbGQuamFyc30vYXBwY2xpZW50LmphciIKKyAgICAgICAgIG1hbmlmZXN0PSIke2J1aWxkLmRlc2N9L2NsaWVudC9NQU5JRkVTVC5NRiI+CiA8IS0tCiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4iPgogICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IkZJTWFwcGluZ0NsaWVudC54bWwiIC8+CkBAIC0xNTQsMTcgKzE1NCwxNyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjb3B5LXRvLXdlYmluZiI+Ci0JPGNvcHkgIHRvZGlyPSIke2J1aWxkLndlYmluZn0vV0VCLUlORi9jbGFzc2VzIiBmaWx0ZXJpbmc9Im9uIiBvdmVyd3JpdGU9InllcyIgID4KLQkgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5kZXN0fSI+Ci0JICAgIDxpbmNsdWRlIG5hbWU9Im15d2ViLyouY2xhc3MiLz4KLQkgIDwvZmlsZXNldD4KLQk8L2NvcHk+CisgICAgPGNvcHkgIHRvZGlyPSIke2J1aWxkLndlYmluZn0vV0VCLUlORi9jbGFzc2VzIiBmaWx0ZXJpbmc9Im9uIiBvdmVyd3JpdGU9InllcyIgID4KKyAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5kZXN0fSI+CisgICAgICAgIDxpbmNsdWRlIG5hbWU9Im15d2ViLyouY2xhc3MiLz4KKyAgICAgIDwvZmlsZXNldD4KKyAgICA8L2NvcHk+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImVhciIgZGVwZW5kcz0iY2xlYW4samFyIj4KLSAgICAgICAgPGVhciBlYXJmaWxlPSIke2J1aWxkLmVhcn0vJHthcHBuYW1lfS5lYXIiIAotCSAgICAgYXBweG1sPSIke2J1aWxkLmRlc2N9L2FwcGxpY2F0aW9uLnhtbCIgCi0JICAgICBtYW5pZmVzdD0iJHtidWlsZC5kZXNjfS9NQU5JRkVTVC5NRiI+CisgICAgICAgIDxlYXIgZWFyZmlsZT0iJHtidWlsZC5lYXJ9LyR7YXBwbmFtZX0uZWFyIgorICAgICAgICAgYXBweG1sPSIke2J1aWxkLmRlc2N9L2FwcGxpY2F0aW9uLnhtbCIKKyAgICAgICAgIG1hbmlmZXN0PSIke2J1aWxkLmRlc2N9L01BTklGRVNULk1GIj4KIAogICAgICAgICAgICAgPCEtLTxmaWxlc2V0IGRpcj0iJHtidWlsZC5qYXJzfSIgaW5jbHVkZXM9IiouamFyLC53YXIiLz4tLT4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5qYXJzfSIgaW5jbHVkZXM9IiouamFyIi8+CkBAIC0xNzQsOSArMTc0LDkgQEAKICAgICAgICAgICAgIDwvZmlsZXNldD4KICAgICAgICAgPC9lYXI+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0ic2V0dXAiPgotCTxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iPgorICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVNBRE1JTn0iPgogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iZGVwbG95IiAvPgogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iLS11c2VyIiAvPgogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHthZG1pbi51c2VyfSIgLz4KQEAgLTE4NywxMiArMTg3LDEyIEBACiAgICAgICAgICAgICA8YXJnIHZhbHVlPSItLXJldHJpZXZlIiAvPgogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtidWlsZC5hcHBjbGllbnR9IiAvPgogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtidWlsZC5lYXJ9LyR7YXBwbmFtZX0uZWFyIiAvPgotCTwvZXhlYz4gCisgICAgPC9leGVjPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qYmktY29tcG9uZW50LXN1Ii8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJzZXR1cCI+Ci0JPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSI+CisgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSI+CiAgICAgICAgICAgICA8YXJnIHZhbHVlPSJ1bmRlcGxveSIgLz4KICAgICAgICAgICAgIDxhcmcgdmFsdWU9Ii0tdXNlciIgLz4KICAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7YWRtaW4udXNlcn0iIC8+CkBAIC0yMDEsMTggKzIwMSwxOCBAQAogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iLS1wb3J0IiAvPgogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHthZG1pbi5wb3J0fSIgLz4KICAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7YXBwbmFtZX0iIC8+Ci0JPC9leGVjPiAKKyAgICA8L2V4ZWM+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamJpLWNvbXBvbmVudC1zdSIvPgogICAgIDwvdGFyZ2V0PgogCiAgICA8dGFyZ2V0IG5hbWU9InJ1bmNsaWVudCIgZGVwZW5kcz0ic2V0dXAiPgogICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVBQQ0xJRU5UfSI+CiAgICAgICAgICAgICA8ZW52IGtleT0iVk1BUkdTIiB2YWx1ZT0iLUR0ZXN0LnJlc3VsdHM9JHtyZXN1bHRzLmZpbGV9IiAvPgotCSAgICA8YXJnIHZhbHVlPSItY2xpZW50IiAvPgotCSAgICA8YXJnIHZhbHVlPSIke2J1aWxkLmFwcGNsaWVudH0vJHthcHBuYW1lfUNsaWVudC5qYXIiLz4KLQkgICAgPGFyZyB2YWx1ZT0iLW5hbWUiIC8+Ci0JICAgIDxhcmcgdmFsdWU9Ik15QXBwQ2xpZW50IiAvPgotICAgIDwvZXhlYz4gCisgICAgICAgIDxhcmcgdmFsdWU9Ii1jbGllbnQiIC8+CisgICAgICAgIDxhcmcgdmFsdWU9IiR7YnVpbGQuYXBwY2xpZW50fS8ke2FwcG5hbWV9Q2xpZW50LmphciIvPgorICAgICAgICA8YXJnIHZhbHVlPSItbmFtZSIgLz4KKyAgICAgICAgPGFyZyB2YWx1ZT0iTXlBcHBDbGllbnQiIC8+CisgICAgPC9leGVjPgogICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9Im1ha2VkaXJzIj4KQEAgLTI1MiwxNCArMjUyLDE0IEBACiAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKi54bWwiIC8+CiAgICAgICAgICAgICA8L2ZpbGVzZXQ+CiAgICAgICAgIDwvY29weT4KLSAgICAgICAgCisKICAgICAgICAgPGNvcHkgIHRvZGlyPSIke2J1aWxkLmRlc2N9L2NsaWVudCIgZmlsdGVyaW5nPSJvbiIgb3ZlcndyaXRlPSJ5ZXMiICA+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7c3JjLmRpcn0vZGVzY3JpcHRvci9jbGllbnQiID4KICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIqLnhtbCIgLz4KLQkJPGluY2x1ZGUgbmFtZT0iTUFOSUZFU1QuTUYiIC8+CisgICAgICAgIDxpbmNsdWRlIG5hbWU9Ik1BTklGRVNULk1GIiAvPgogICAgICAgICAgICAgPC9maWxlc2V0PgogICAgICAgICA8L2NvcHk+Ci0gICAgICAgIAorCiAgICAgICAgIDxjb3B5ICB0b2Rpcj0iJHtidWlsZC5kZXNjfSIgZmlsdGVyaW5nPSJvbiIgb3ZlcndyaXRlPSJ5ZXMiICA+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7c3JjLmRpcn0vZGVzY3JpcHRvciIgPgogICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgLz4KQEAgLTI3Miw3ICsyNzIsNyBAQAogICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InN1bi1qMmVlLXJpLnhtbCIgLz4KICAgICAgICAgICAgIDwvZmlsZXNldD4KICAgICAgICAgPC9jb3B5PgotICAgICAgICAKKwogICAgICAgICA8Y29weSAgdG9kaXI9IiR7YnVpbGQuZWpic3JjfSIgZmlsdGVyaW5nPSJvbiIgb3ZlcndyaXRlPSJ5ZXMiICA+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7c3JjLmRpcn0vZWpiIiA+CiAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iKiovKi5qYXZhIiAvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyL2NsaWVudC9GaW5kSW50ZXJlc3RDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci9jbGllbnQvRmluZEludGVyZXN0Q2xpZW50LmphdmEKaW5kZXggYzczYTVkMC4uNTU5ZWIzZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyL2NsaWVudC9GaW5kSW50ZXJlc3RDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXIvY2xpZW50L0ZpbmRJbnRlcmVzdENsaWVudC5qYXZhCkBAIC0zMSw3ICszMSw3IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RJZCA9ICJqYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyIjsKIAogICAgIHB1YmxpYyBGaW5kSW50ZXJlc3RDbGllbnQoKSB7Ci0Jc3RhdHVzLmFkZERlc2NyaXB0aW9uKHRlc3RJZCk7CisgICAgc3RhdHVzLmFkZERlc2NyaXB0aW9uKHRlc3RJZCk7CiAgICAgfQogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTQxLDE1ICs0MSwxNSBAQAogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgIC8vICAgICAgY2xpZW50LmRvU2VydmxldFRlc3QoKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7CiAKICAgICAgICAgLy9TdHJpbmcgdGFyZ2V0RW5kcG9pbnRBZGRyZXNzID0KLQkvLwkJImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9maW5kaW50ci9GaW5kSW50ZXJlc3QiOworICAgIC8vICAgICAgICAiaHR0cDovL2xvY2FsaG9zdDo4MDgwL2ZpbmRpbnRyL0ZpbmRJbnRlcmVzdCI7CiAgICAgICAgIFN0cmluZyB0YXJnZXRFbmRwb2ludEFkZHJlc3MgPQotCQkJImh0dHA6Ly9sb2NhbGhvc3Q6MTIwMTMvSW50ZXJlc3RJRlBvcnQiOworICAgICAgICAgICAgImh0dHA6Ly9sb2NhbGhvc3Q6MTIwMTMvSW50ZXJlc3RJRlBvcnQiOwogCi0gICAgCXRyeSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBGaW5kSW50ZXJlc3QgZmluZEludHJTZXJ2aWNlID0gKEZpbmRJbnRlcmVzdCkKICAgICAgICAgICAgICAgICAgICAgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3NlcnZpY2UvRmluZEludGVyZXN0Iik7CkBAIC01NywyNyArNTcsMjcgQEAKICAgICAgICAgICAgIEludGVyZXN0SUYgaW50ZXJlc3RJRlBvcnQgPSBmaW5kSW50clNlcnZpY2UuZ2V0SW50ZXJlc3RJRlBvcnQoKTsKIAogICAgICAgICAgICAgKChTdHViKWludGVyZXN0SUZQb3J0KS5fc2V0UHJvcGVydHkgKFN0dWIuRU5EUE9JTlRfQUREUkVTU19QUk9QRVJUWSwKLSAgICAgICAgICAgICAgICAgCQkJCXRhcmdldEVuZHBvaW50QWRkcmVzcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRFbmRwb2ludEFkZHJlc3MpOwogCi0JICAgIGRvdWJsZSBpbnRlcmVzdCA9IGludGVyZXN0SUZQb3J0LmNhbGN1bGF0ZUludGVyZXN0KGJhbGFuY2UsIHBlcmlvZCk7CisgICAgICAgIGRvdWJsZSBpbnRlcmVzdCA9IGludGVyZXN0SUZQb3J0LmNhbGN1bGF0ZUludGVyZXN0KGJhbGFuY2UsIHBlcmlvZCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkludGVyZXN0IG9uICQzMDAgZm9yIGEgcGVyaW9kIG9mIDMuNSB5ZWFycyBpcyAiCi0JCQkJKyBpbnRlcmVzdCk7Ci0gICAgICAgICAgICAgICAgCi0JICAgIGlmIChpbnRlcmVzdCA9PSAxMDUuMCkgewotCQlzdGF0dXMuYWRkU3RhdHVzKHRlc3RJZCArIjEgOiBFSkIgRW5kcG9pbnQgYW5kIFNlcnZsZXQgRW5kcG9pbnQgVGVzdCIsIHN0YXR1cy5QQVNTKTsKLQkgICAgfQorICAgICAgICAgICAgICAgICsgaW50ZXJlc3QpOwogCi0gICAgCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQlzdGF0dXMuYWRkU3RhdHVzKHRlc3RJZCArIjEgOiBFSkIgRW5kcG9pbnQgYW5kIFNlcnZsZXQgRW5kcG9pbnQgVGVzdCIsIHN0YXR1cy5GQUlMKTsKKyAgICAgICAgaWYgKGludGVyZXN0ID09IDEwNS4wKSB7CisgICAgICAgIHN0YXR1cy5hZGRTdGF0dXModGVzdElkICsiMSA6IEVKQiBFbmRwb2ludCBhbmQgU2VydmxldCBFbmRwb2ludCBUZXN0Iiwgc3RhdHVzLlBBU1MpOworICAgICAgICB9CisKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIHN0YXR1cy5hZGRTdGF0dXModGVzdElkICsiMSA6IEVKQiBFbmRwb2ludCBhbmQgU2VydmxldCBFbmRwb2ludCBUZXN0Iiwgc3RhdHVzLkZBSUwpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJmaW5kaW50ciBjbGllbnQgZmFpbGVkIik7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLQl9IAorICAgIH0KICAgICB9CiAKICAgIC8qIHB1YmxpYyB2b2lkIGRvU2VydmxldFRlc3QoKSB7Ci0gICAgCXRyeSB7Ci0JICAgIFN0cmluZyB0YXJnZXRFbmRwb2ludEFkZHJlc3MgPQotCQkiaHR0cDovL2xvY2FsaG9zdDo4MDgwL0ZpbmRJbnRlcmVzdFNlcnZsZXQvRmluZEludGVyZXN0IjsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgU3RyaW5nIHRhcmdldEVuZHBvaW50QWRkcmVzcyA9CisgICAgICAgICJodHRwOi8vbG9jYWxob3N0OjgwODAvRmluZEludGVyZXN0U2VydmxldC9GaW5kSW50ZXJlc3QiOwogCiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBGaW5kSW50ZXJlc3QgZmluZEludHJTZXJ2aWNlID0gKEZpbmRJbnRlcmVzdCkKQEAgLTg2LDIyICs4NiwyMiBAQAogICAgICAgICAgICAgSW50ZXJlc3RJRiBpbnRlcmVzdElGUG9ydCA9IGZpbmRJbnRyU2VydmljZS5nZXRJbnRlcmVzdElGUG9ydCgpOwogCiAgICAgICAgICAgICAoKFN0dWIpaW50ZXJlc3RJRlBvcnQpLl9zZXRQcm9wZXJ0eSAoU3R1Yi5FTkRQT0lOVF9BRERSRVNTX1BST1BFUlRZLAotCQkJCQkJdGFyZ2V0RW5kcG9pbnRBZGRyZXNzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldEVuZHBvaW50QWRkcmVzcyk7CiAKLQkgICAgZG91YmxlIGludGVyZXN0ID0gaW50ZXJlc3RJRlBvcnQuY2FsY3VsYXRlSW50ZXJlc3QoYmFsYW5jZSwgcGVyaW9kKTsKKyAgICAgICAgZG91YmxlIGludGVyZXN0ID0gaW50ZXJlc3RJRlBvcnQuY2FsY3VsYXRlSW50ZXJlc3QoYmFsYW5jZSwgcGVyaW9kKTsKIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbnRlcmVzdCBvbiAkMzAwIGZvciBhIHBlcmlvZCBvZiAzLjUgeWVhcnMgaXMgIgotCQkJCSsgaW50ZXJlc3QpOwotICAgICAgICAgICAgICAgIAotCSAgICBpZiAoaW50ZXJlc3QgPT0gMjEwLjApIHsKLQkJc3RhdHVzLmFkZFN0YXR1cyhURVNUX1NVSVRFX0lEKyIyIDogRUpCIEVuZHBvaW50IGFuZCBTZXJ2bGV0IEVuZHBvaW50IFRlc3QiLCBzdGF0dXMuUEFTUyk7Ci0JICAgIH0KLSAgICAJfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCXN0YXR1cy5hZGRTdGF0dXMoVEVTVF9TVUlURV9JRCsiMiA6IEVKQiBFbmRwb2ludCBhbmQgU2VydmxldCBFbmRwb2ludCBUZXN0Iiwgc3RhdHVzLkZBSUwpOworICAgICAgICAgICAgICAgICsgaW50ZXJlc3QpOworCisgICAgICAgIGlmIChpbnRlcmVzdCA9PSAyMTAuMCkgeworICAgICAgICBzdGF0dXMuYWRkU3RhdHVzKFRFU1RfU1VJVEVfSUQrIjIgOiBFSkIgRW5kcG9pbnQgYW5kIFNlcnZsZXQgRW5kcG9pbnQgVGVzdCIsIHN0YXR1cy5QQVNTKTsKKyAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgc3RhdHVzLmFkZFN0YXR1cyhURVNUX1NVSVRFX0lEKyIyIDogRUpCIEVuZHBvaW50IGFuZCBTZXJ2bGV0IEVuZHBvaW50IFRlc3QiLCBzdGF0dXMuRkFJTCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZpbmRpbnRyIGNsaWVudCBmYWlsZWQiKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotCX0gCi0Jc3RhdHVzLnByaW50U3VtbWFyeSgiSlNSMTA5IC0gRmluZEludGVyZXN0VGVzdCIpOworICAgIH0KKyAgICBzdGF0dXMucHJpbnRTdW1tYXJ5KCJKU1IxMDkgLSBGaW5kSW50ZXJlc3RUZXN0Iik7CiAgICAgfSovCiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci9jbGllbnQvRmluZEludGVyZXN0Q2xpZW50Tm9uSHR0cEJDLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXIvY2xpZW50L0ZpbmRJbnRlcmVzdENsaWVudE5vbkh0dHBCQy5qYXZhCmluZGV4IDhiOTY2MGMuLmM0ZTZkZjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci9jbGllbnQvRmluZEludGVyZXN0Q2xpZW50Tm9uSHR0cEJDLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyL2NsaWVudC9GaW5kSW50ZXJlc3RDbGllbnROb25IdHRwQkMuamF2YQpAQCAtMzEsNyArMzEsNyBAQAogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0SWQgPSAiamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlciI7CiAKICAgICBwdWJsaWMgRmluZEludGVyZXN0Q2xpZW50Tm9uSHR0cEJDKCkgewotCXN0YXR1cy5hZGREZXNjcmlwdGlvbih0ZXN0SWQpOworICAgIHN0YXR1cy5hZGREZXNjcmlwdGlvbih0ZXN0SWQpOwogICAgIH0KIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CkBAIC00MSwxMyArNDEsMTMgQEAKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAvLyAgICAgIGNsaWVudC5kb1NlcnZsZXRUZXN0KCk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewogCiAgICAgICAgIFN0cmluZyB0YXJnZXRFbmRwb2ludEFkZHJlc3MgPQotCQkJImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9maW5kaW50ci9GaW5kSW50ZXJlc3QiOworICAgICAgICAgICAgImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9maW5kaW50ci9GaW5kSW50ZXJlc3QiOwogCi0gICAgCXRyeSB7CisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBGaW5kSW50ZXJlc3QgZmluZEludHJTZXJ2aWNlID0gKEZpbmRJbnRlcmVzdCkKICAgICAgICAgICAgICAgICAgICAgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3NlcnZpY2UvRmluZEludGVyZXN0Iik7CkBAIC01NSwyNyArNTUsMjcgQEAKICAgICAgICAgICAgIEludGVyZXN0SUYgaW50ZXJlc3RJRlBvcnQgPSBmaW5kSW50clNlcnZpY2UuZ2V0SW50ZXJlc3RJRlBvcnQoKTsKIAogICAgICAgICAgICAgKChTdHViKWludGVyZXN0SUZQb3J0KS5fc2V0UHJvcGVydHkgKFN0dWIuRU5EUE9JTlRfQUREUkVTU19QUk9QRVJUWSwKLSAgICAgICAgICAgICAgICAgCQkJCXRhcmdldEVuZHBvaW50QWRkcmVzcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRFbmRwb2ludEFkZHJlc3MpOwogCi0JICAgIGRvdWJsZSBpbnRlcmVzdCA9IGludGVyZXN0SUZQb3J0LmNhbGN1bGF0ZUludGVyZXN0KGJhbGFuY2UsIHBlcmlvZCk7CisgICAgICAgIGRvdWJsZSBpbnRlcmVzdCA9IGludGVyZXN0SUZQb3J0LmNhbGN1bGF0ZUludGVyZXN0KGJhbGFuY2UsIHBlcmlvZCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkludGVyZXN0IG9uICQzMDAgZm9yIGEgcGVyaW9kIG9mIDMuNSB5ZWFycyBpcyAiCi0JCQkJKyBpbnRlcmVzdCk7Ci0gICAgICAgICAgICAgICAgCi0JICAgIGlmIChpbnRlcmVzdCA9PSAxMDUuMCkgewotCQlzdGF0dXMuYWRkU3RhdHVzKHRlc3RJZCArIjEgOiBFSkIgRW5kcG9pbnQgYW5kIFNlcnZsZXQgRW5kcG9pbnQgVGVzdCIsIHN0YXR1cy5QQVNTKTsKLQkgICAgfQorICAgICAgICAgICAgICAgICsgaW50ZXJlc3QpOwogCi0gICAgCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQlzdGF0dXMuYWRkU3RhdHVzKHRlc3RJZCArIjEgOiBFSkIgRW5kcG9pbnQgYW5kIFNlcnZsZXQgRW5kcG9pbnQgVGVzdCIsIHN0YXR1cy5GQUlMKTsKKyAgICAgICAgaWYgKGludGVyZXN0ID09IDEwNS4wKSB7CisgICAgICAgIHN0YXR1cy5hZGRTdGF0dXModGVzdElkICsiMSA6IEVKQiBFbmRwb2ludCBhbmQgU2VydmxldCBFbmRwb2ludCBUZXN0Iiwgc3RhdHVzLlBBU1MpOworICAgICAgICB9CisKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIHN0YXR1cy5hZGRTdGF0dXModGVzdElkICsiMSA6IEVKQiBFbmRwb2ludCBhbmQgU2VydmxldCBFbmRwb2ludCBUZXN0Iiwgc3RhdHVzLkZBSUwpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJmaW5kaW50ciBjbGllbnQgZmFpbGVkIik7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLQl9IAorICAgIH0KICAgICB9CiAKICAgIC8qIHB1YmxpYyB2b2lkIGRvU2VydmxldFRlc3QoKSB7Ci0gICAgCXRyeSB7Ci0JICAgIFN0cmluZyB0YXJnZXRFbmRwb2ludEFkZHJlc3MgPQotCQkiaHR0cDovL2xvY2FsaG9zdDo4MDgwL0ZpbmRJbnRlcmVzdFNlcnZsZXQvRmluZEludGVyZXN0IjsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgU3RyaW5nIHRhcmdldEVuZHBvaW50QWRkcmVzcyA9CisgICAgICAgICJodHRwOi8vbG9jYWxob3N0OjgwODAvRmluZEludGVyZXN0U2VydmxldC9GaW5kSW50ZXJlc3QiOwogCiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICBGaW5kSW50ZXJlc3QgZmluZEludHJTZXJ2aWNlID0gKEZpbmRJbnRlcmVzdCkKQEAgLTg0LDIyICs4NCwyMiBAQAogICAgICAgICAgICAgSW50ZXJlc3RJRiBpbnRlcmVzdElGUG9ydCA9IGZpbmRJbnRyU2VydmljZS5nZXRJbnRlcmVzdElGUG9ydCgpOwogCiAgICAgICAgICAgICAoKFN0dWIpaW50ZXJlc3RJRlBvcnQpLl9zZXRQcm9wZXJ0eSAoU3R1Yi5FTkRQT0lOVF9BRERSRVNTX1BST1BFUlRZLAotCQkJCQkJdGFyZ2V0RW5kcG9pbnRBZGRyZXNzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldEVuZHBvaW50QWRkcmVzcyk7CiAKLQkgICAgZG91YmxlIGludGVyZXN0ID0gaW50ZXJlc3RJRlBvcnQuY2FsY3VsYXRlSW50ZXJlc3QoYmFsYW5jZSwgcGVyaW9kKTsKKyAgICAgICAgZG91YmxlIGludGVyZXN0ID0gaW50ZXJlc3RJRlBvcnQuY2FsY3VsYXRlSW50ZXJlc3QoYmFsYW5jZSwgcGVyaW9kKTsKIAogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbnRlcmVzdCBvbiAkMzAwIGZvciBhIHBlcmlvZCBvZiAzLjUgeWVhcnMgaXMgIgotCQkJCSsgaW50ZXJlc3QpOwotICAgICAgICAgICAgICAgIAotCSAgICBpZiAoaW50ZXJlc3QgPT0gMjEwLjApIHsKLQkJc3RhdHVzLmFkZFN0YXR1cyhURVNUX1NVSVRFX0lEKyIyIDogRUpCIEVuZHBvaW50IGFuZCBTZXJ2bGV0IEVuZHBvaW50IFRlc3QiLCBzdGF0dXMuUEFTUyk7Ci0JICAgIH0KLSAgICAJfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCXN0YXR1cy5hZGRTdGF0dXMoVEVTVF9TVUlURV9JRCsiMiA6IEVKQiBFbmRwb2ludCBhbmQgU2VydmxldCBFbmRwb2ludCBUZXN0Iiwgc3RhdHVzLkZBSUwpOworICAgICAgICAgICAgICAgICsgaW50ZXJlc3QpOworCisgICAgICAgIGlmIChpbnRlcmVzdCA9PSAyMTAuMCkgeworICAgICAgICBzdGF0dXMuYWRkU3RhdHVzKFRFU1RfU1VJVEVfSUQrIjIgOiBFSkIgRW5kcG9pbnQgYW5kIFNlcnZsZXQgRW5kcG9pbnQgVGVzdCIsIHN0YXR1cy5QQVNTKTsKKyAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgc3RhdHVzLmFkZFN0YXR1cyhURVNUX1NVSVRFX0lEKyIyIDogRUpCIEVuZHBvaW50IGFuZCBTZXJ2bGV0IEVuZHBvaW50IFRlc3QiLCBzdGF0dXMuRkFJTCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImZpbmRpbnRyIGNsaWVudCBmYWlsZWQiKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotCX0gCi0Jc3RhdHVzLnByaW50U3VtbWFyeSgiSlNSMTA5IC0gRmluZEludGVyZXN0VGVzdCIpOworICAgIH0KKyAgICBzdGF0dXMucHJpbnRTdW1tYXJ5KCJKU1IxMDkgLSBGaW5kSW50ZXJlc3RUZXN0Iik7CiAgICAgfSovCiB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci9jbGllbnQvU09BUEVqYkNvbnN1bWVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXIvY2xpZW50L1NPQVBFamJDb25zdW1lci5qYXZhCmluZGV4IGUxMjNmZWEuLmQyNjE3NWEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci9jbGllbnQvU09BUEVqYkNvbnN1bWVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyL2NsaWVudC9TT0FQRWpiQ29uc3VtZXIuamF2YQpAQCAtMjMsMTkgKzIzLDE5IEBACiBwdWJsaWMgY2xhc3MgU09BUEVqYkNvbnN1bWVyIHsKICAgICBwcml2YXRlIGRvdWJsZSBiYWxhbmNlID0gMzAwLjAwOwogICAgIHByaXZhdGUgZG91YmxlIHBlcmlvZCA9IDMuNTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdHVzID0gbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0SWQgPSAiamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlciI7CiAKICAgICBwdWJsaWMgU09BUEVqYkNvbnN1bWVyKCkgewogICAgICAgICBzdGF0dXMuYWRkRGVzY3JpcHRpb24odGVzdElkKTsKICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgU09BUEVqYkNvbnN1bWVyIGNsaWVudCA9IG5ldyBTT0FQRWpiQ29uc3VtZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgY2xpZW50LmRvVGVzdCgpOwogICAgICAgICBzdGF0dXMucHJpbnRTdW1tYXJ5KHRlc3RJZCk7CiAgICB9CkBAIC00NSwyMyArNDUsMjMgQEAKICAgICAgICAgIC8vICAgICAgICAgICAgICAgImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9zb2FwL3dlYi9maW5kaW50ZXJlc3QiOwogICAgICAgICBTdHJpbmcgdGFyZ2V0RW5kcG9pbnRBZGRyZXNzID0KICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vbG9jYWxob3N0OjEyMDEzL0ludGVyZXN0SUZQb3J0IjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKICAgICAgICAgICAgIEZpbmRJbnRlcmVzdCBmaW5kSW50clNlcnZpY2UgPSAoRmluZEludGVyZXN0KQogICAgICAgICAgICAgICAgICAgICBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvc2VydmljZS9GaW5kSW50ZXJlc3QiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIEludGVyZXN0SUYgaW50ZXJlc3RJRlBvcnQgPSBmaW5kSW50clNlcnZpY2UuZ2V0SW50ZXJlc3RJRlBvcnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICgoU3R1YilpbnRlcmVzdElGUG9ydCkuX3NldFByb3BlcnR5IChTdHViLkVORFBPSU5UX0FERFJFU1NfUFJPUEVSVFksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0RW5kcG9pbnRBZGRyZXNzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIGRvdWJsZSBpbnRlcmVzdCA9IGludGVyZXN0SUZQb3J0LmNhbGN1bGF0ZUludGVyZXN0KGJhbGFuY2UsIHBlcmlvZCk7ICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbnRlcmVzdCBvbiAkMzAwIGZvciBhIHBlcmlvZCBvZiAzLjUgeWVhcnMgaXMgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGludGVyZXN0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmIChpbnRlcmVzdCA9PSAxMDUuMCkgewogICAgICAgICAgICAgICAgIHN0YXR1cy5hZGRTdGF0dXModGVzdElkICsiMSA6IEVKQiBFbmRwb2ludCBUZXN0Iiwgc3RhdHVzLlBBU1MpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgICAgICBzdGF0dXMuYWRkU3RhdHVzKHRlc3RJZCArIjEgOiBFSkIgRW5kcG9pbnQgVGVzdCIsIHN0YXR1cy5GQUlMKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZmluZGludHIgY2xpZW50IGZhaWxlZCIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyL2NsaWVudC9TT0FQRWpiQ29uc3VtZXJOb25IdHRwQkMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci9jbGllbnQvU09BUEVqYkNvbnN1bWVyTm9uSHR0cEJDLmphdmEKaW5kZXggNTJkZGI2Zi4uYTMyZDRlZiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyL2NsaWVudC9TT0FQRWpiQ29uc3VtZXJOb25IdHRwQkMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXIvY2xpZW50L1NPQVBFamJDb25zdW1lck5vbkh0dHBCQy5qYXZhCkBAIC0yMywxOSArMjMsMTkgQEAKIHB1YmxpYyBjbGFzcyBTT0FQRWpiQ29uc3VtZXJOb25IdHRwQkMgewogICAgIHByaXZhdGUgZG91YmxlIGJhbGFuY2UgPSAzMDAuMDA7CiAgICAgcHJpdmF0ZSBkb3VibGUgcGVyaW9kID0gMy41OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0dXMgPSBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RJZCA9ICJqYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyIjsKIAogICAgIHB1YmxpYyBTT0FQRWpiQ29uc3VtZXJOb25IdHRwQkMoKSB7CiAgICAgICAgIHN0YXR1cy5hZGREZXNjcmlwdGlvbih0ZXN0SWQpOwogICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICBTT0FQRWpiQ29uc3VtZXJOb25IdHRwQkMgY2xpZW50ID0gbmV3IFNPQVBFamJDb25zdW1lck5vbkh0dHBCQygpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICBjbGllbnQuZG9UZXN0KCk7CiAgICAgICAgIHN0YXR1cy5wcmludFN1bW1hcnkodGVzdElkKTsKICAgIH0KQEAgLTQzLDIzICs0MywyMyBAQAogICAgIHByaXZhdGUgdm9pZCBkb1Rlc3QoKSB7CiAgICAgICAgIFN0cmluZyB0YXJnZXRFbmRwb2ludEFkZHJlc3MgPQogICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9zb2FwL3dlYi9maW5kaW50ZXJlc3QiOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICB0cnkgewogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwogICAgICAgICAgICAgRmluZEludGVyZXN0IGZpbmRJbnRyU2VydmljZSA9IChGaW5kSW50ZXJlc3QpCiAgICAgICAgICAgICAgICAgICAgIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9zZXJ2aWNlL0ZpbmRJbnRlcmVzdCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgSW50ZXJlc3RJRiBpbnRlcmVzdElGUG9ydCA9IGZpbmRJbnRyU2VydmljZS5nZXRJbnRlcmVzdElGUG9ydCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgKChTdHViKWludGVyZXN0SUZQb3J0KS5fc2V0UHJvcGVydHkgKFN0dWIuRU5EUE9JTlRfQUREUkVTU19QUk9QRVJUWSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRFbmRwb2ludEFkZHJlc3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgZG91YmxlIGludGVyZXN0ID0gaW50ZXJlc3RJRlBvcnQuY2FsY3VsYXRlSW50ZXJlc3QoYmFsYW5jZSwgcGVyaW9kKTsgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkludGVyZXN0IG9uICQzMDAgZm9yIGEgcGVyaW9kIG9mIDMuNSB5ZWFycyBpcyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgaW50ZXJlc3QpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKGludGVyZXN0ID09IDEwNS4wKSB7CiAgICAgICAgICAgICAgICAgc3RhdHVzLmFkZFN0YXR1cyh0ZXN0SWQgKyIxIDogRUpCIEVuZHBvaW50IFRlc3QiLCBzdGF0dXMuUEFTUyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgICAgIHN0YXR1cy5hZGRTdGF0dXModGVzdElkICsiMSA6IEVKQiBFbmRwb2ludCBUZXN0Iiwgc3RhdHVzLkZBSUwpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJmaW5kaW50ciBjbGllbnQgZmFpbGVkIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXIvZWpiL0ludGVyZXN0RUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXIvZWpiL0ludGVyZXN0RUpCLmphdmEKaW5kZXggZDZmOTRhZi4uOGQ3MDk0MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyL2VqYi9JbnRlcmVzdEVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci9lamIvSW50ZXJlc3RFSkIuamF2YQpAQCAtMTcsNyArMTcsNyBAQAogcGFja2FnZSBteWVqYjsKIAogaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOwotaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsgCitpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25CZWFuOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0OwogaW1wb3J0IGpha2FydGEuZWpiLkVKQkV4Y2VwdGlvbjsKQEAgLTI2LDExICsyNiwxMSBAQAogcHVibGljIGNsYXNzIEludGVyZXN0RUpCIGltcGxlbWVudHMgU2Vzc2lvbkJlYW4gewogCiAgICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBzYzsKLSAgICAKKwogICAgIHB1YmxpYyBJbnRlcmVzdEVKQigpe30KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gSW50ZXJlc3RFSkI6OmVqYkNyZWF0ZSAhISIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gSW50ZXJlc3RFSkI6OmVqYkNyZWF0ZSAhISIpOwogICAgIH0KIAogICAgIHB1YmxpYyBkb3VibGUgY2FsY3VsYXRlSW50ZXJlc3QoZG91YmxlIGJhbGFuY2UsIGRvdWJsZSBwZXJpb2QpIHsKQEAgLTM5LDEzICszOSwxMyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7Ci0JCisKICAgICAgICAgdGhpcy5zYyA9IHNjOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24ge30KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkge30KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHt9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXIvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyL3NvYXAtYmluZGluZy1zdS1hbGFza2EvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbAppbmRleCBkMTZjMTU3Li5mMWIzZjdhIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXIvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci9zb2FwLWJpbmRpbmctc3UtYWxhc2thL2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKQEAgLTE5LDkgKzE5LDkgQEAKIAogPCEtLSBqYmkueG1sIGZpbGUgZm9yIHRoZSBTT0FQIGJpbmRpbmcgZGVwbG95bWVudHMgYmluZGluZy4gLS0+CiA8amJpCi0gICAgdmVyc2lvbj0iMS4wIiAKLSAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIiAKLSAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKKyAgICB2ZXJzaW9uPSIxLjAiCisgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIC4vamJpLnhzZCI+CiAgIDxzZXJ2aWNlLWFzc2VtYmx5PgogICAgIDxpZGVudGlmaWNhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci9zb2FwLWJpbmRpbmctc3UtYWxhc2thL3N1L01FVEEtSU5GL2piaS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXIvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9zdS9NRVRBLUlORi9qYmkueG1sCmluZGV4IGUwODkxNWMuLmJlZTY3YTkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci9zb2FwLWJpbmRpbmctc3UtYWxhc2thL3N1L01FVEEtSU5GL2piaS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyL3NvYXAtYmluZGluZy1zdS1hbGFza2Evc3UvTUVUQS1JTkYvamJpLnhtbApAQCAtMTgsMTQgKzE4LDE0IEBACiAtLT4KIAogPGpiaSB2ZXJzaW9uPSIxLjAiCi0JIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAotCSB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIiAKLQkgeG1sbnM6dG5zPSJodHRwOi8vaGVsbG8ub3JnL3dzZGwiCi0JIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIGpiaS54c2QiPgotCTxzZXJ2aWNlcyBiaW5kaW5nLWNvbXBvbmVudD0idHJ1ZSI+CQkKLQkgPGNvbnN1bWVzIGludGVyZmFjZS1uYW1lPSJ0bnM6RmluZEludGVyZXN0SW50ZXJmYWNlIgorICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIgorICAgICB4bWxuczp0bnM9Imh0dHA6Ly9oZWxsby5vcmcvd3NkbCIKKyAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgamJpLnhzZCI+CisgICAgPHNlcnZpY2VzIGJpbmRpbmctY29tcG9uZW50PSJ0cnVlIj4KKyAgICAgPGNvbnN1bWVzIGludGVyZmFjZS1uYW1lPSJ0bnM6RmluZEludGVyZXN0SW50ZXJmYWNlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLW5hbWU9InRuczpGaW5kSW50ZXJlc3QiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50LW5hbWU9IkludGVyZXN0SUZQb3J0Ii8+CiAgICAgICAgICAgICAgICAgPGFydGlmYWN0cyB4bWxucz0iIiByb2xlPSJjb25zdW1lciIgZmlsZS1uYW1lPSJlbmRwb2ludHMueG1sIiB0eXBlPSJ4bWwiLz4KLQk8L3NlcnZpY2VzPgorICAgIDwvc2VydmljZXM+CiA8L2piaT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci9zb2FwLWJpbmRpbmctc3UvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci9zb2FwLWJpbmRpbmctc3UvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbAppbmRleCBmY2MwMDA3Li4zODkxZDU1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXIvc29hcC1iaW5kaW5nLXN1L2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyL3NvYXAtYmluZGluZy1zdS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCkBAIC0xOSw5ICsxOSw5IEBACiAKIDwhLS0gamJpLnhtbCBmaWxlIGZvciB0aGUgU09BUCBiaW5kaW5nIGRlcGxveW1lbnRzIGJpbmRpbmcuIC0tPgogPGpiaQotICAgIHZlcnNpb249IjEuMCIgCi0gICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIgCi0gICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCisgICAgdmVyc2lvbj0iMS4wIgorICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSAuL2piaS54c2QiPgogICA8c2VydmljZS1hc3NlbWJseT4KICAgICA8aWRlbnRpZmljYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXIvc29hcC1iaW5kaW5nLXN1L3N1L01FVEEtSU5GL2piaS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXIvc29hcC1iaW5kaW5nLXN1L3N1L01FVEEtSU5GL2piaS54bWwKaW5kZXggMTYxMGRlZS4uNzYyY2U0NSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyL3NvYXAtYmluZGluZy1zdS9zdS9NRVRBLUlORi9qYmkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci9zb2FwLWJpbmRpbmctc3Uvc3UvTUVUQS1JTkYvamJpLnhtbApAQCAtMTgsMTQgKzE4LDE0IEBACiAtLT4KIAogPGpiaSB2ZXJzaW9uPSIxLjAiCi0JIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAotCSB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIiAKLQkgeG1sbnM6dG5zPSJodHRwOi8vaGVsbG8ub3JnL3dzZGwiCi0JIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIGpiaS54c2QiPgotCTxzZXJ2aWNlcyBiaW5kaW5nLWNvbXBvbmVudD0idHJ1ZSI+CQkKLQkJPGNvbnN1bWVzIGludGVyZmFjZS1uYW1lPSJ0bnM6RmluZEludGVyZXN0SW50ZXJmYWNlIgotICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLW5hbWU9InRuczpGaW5kSW50ZXJlc3QiIAorICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIgorICAgICB4bWxuczp0bnM9Imh0dHA6Ly9oZWxsby5vcmcvd3NkbCIKKyAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgamJpLnhzZCI+CisgICAgPHNlcnZpY2VzIGJpbmRpbmctY29tcG9uZW50PSJ0cnVlIj4KKyAgICAgICAgPGNvbnN1bWVzIGludGVyZmFjZS1uYW1lPSJ0bnM6RmluZEludGVyZXN0SW50ZXJmYWNlIgorICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLW5hbWU9InRuczpGaW5kSW50ZXJlc3QiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50LW5hbWU9IkludGVyZXN0SUZQb3J0Ii8+CiAgICAgICAgICAgICAgICAgPGFydGlmYWN0cyB4bWxucz0iIiByb2xlPSJjb25zdW1lciIgZmlsZS1uYW1lPSJlbmRwb2ludHMueG1sIiB0eXBlPSJ4bWwiLz4KLQk8L3NlcnZpY2VzPgorICAgIDwvc2VydmljZXM+CiA8L2piaT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci9zb2FwLWJpbmRpbmctc3Uvc3UvZW5kcG9pbnRzLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci9zb2FwLWJpbmRpbmctc3Uvc3UvZW5kcG9pbnRzLnhtbAppbmRleCAwYTc4NjlkLi4yYTI2NTRkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXIvc29hcC1iaW5kaW5nLXN1L3N1L2VuZHBvaW50cy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyL3NvYXAtYmluZGluZy1zdS9zdS9lbmRwb2ludHMueG1sCkBAIC0yMSwyMiArMjEsMjIgQEAKICAgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5zdW4uY29tL25zL2piaS9jb21wb25lbnQvc29hcC9kZXBsb3kgLi9lbmRwb2ludHMueHNkIj4KIDxzZXJ2aWNlLW5hbWU+Ci0JPG5hbWVzcGFjZS11cmk+aHR0cDovL2hlbGxvLm9yZy93c2RsPC9uYW1lc3BhY2UtdXJpPgotCTxsb2NhbC1wYXJ0PkZpbmRJbnRlcmVzdDwvbG9jYWwtcGFydD4KKyAgICA8bmFtZXNwYWNlLXVyaT5odHRwOi8vaGVsbG8ub3JnL3dzZGw8L25hbWVzcGFjZS11cmk+CisgICAgPGxvY2FsLXBhcnQ+RmluZEludGVyZXN0PC9sb2NhbC1wYXJ0PgogICAgIDwvc2VydmljZS1uYW1lPgogICAgIDxlbmRwb2ludC1uYW1lPkludGVyZXN0SUZQb3J0PC9lbmRwb2ludC1uYW1lPgogICAgIDxlbmRwb2ludC1yb2xlPmNvbnN1bWVyPC9lbmRwb2ludC1yb2xlPgotICAgIDxhZGRyZXNzLWxvY2F0aW9uPmh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9zb2FwL3dlYi9maW5kaW50ZXJlc3Q8L2FkZHJlc3MtbG9jYXRpb24+IAotICAgIDxzdHlsZT5odHRwOi8vd3d3LnczLm9yZy8yMDA0LzA4L3dzZGwvc3R5bGUvcnBjPC9zdHlsZT4gICAgICAgICAgICAgCisgICAgPGFkZHJlc3MtbG9jYXRpb24+aHR0cDovL2xvY2FsaG9zdDo4MDgwL3NvYXAvd2ViL2ZpbmRpbnRlcmVzdDwvYWRkcmVzcy1sb2NhdGlvbj4KKyAgICA8c3R5bGU+aHR0cDovL3d3dy53My5vcmcvMjAwNC8wOC93c2RsL3N0eWxlL3JwYzwvc3R5bGU+CiAgICAgPG9wZXJhdGlvbj4KICAgICAgICAgPG5hbWU+Y2FsY3VsYXRlSW50ZXJlc3Q8L25hbWU+Ci0gICAgICAgIDxtZXA+aHR0cDovL3d3dy53My5vcmcvMjAwNC8wOC93c2RsL2luLW91dDwvbWVwPiAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIDxtZXA+aHR0cDovL3d3dy53My5vcmcvMjAwNC8wOC93c2RsL2luLW91dDwvbWVwPgogICAgICAgICA8c29hcGFjdGlvbj4iIjwvc29hcGFjdGlvbj4KICAgICAgICAgPGlucHV0PgogICAgICAgICAgIDxuYW1lc3BhY2UtdXJpPmh0dHA6Ly9oZWxsby5vcmcvd3NkbDwvbmFtZXNwYWNlLXVyaT4KICAgICAgICAgPC9pbnB1dD4KICAgICAgICAgPG91dHB1dD4KICAgICAgICAgICA8bmFtZXNwYWNlLXVyaT5odHRwOi8vaGVsbG8ub3JnL3dzZGw8L25hbWVzcGFjZS11cmk+Ci0gICAgICAgIDwvb3V0cHV0PiAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIDwvb3V0cHV0PgogICAgIDwvb3BlcmF0aW9uPgotPC9lbmRwb2ludD4gCis8L2VuZHBvaW50PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyL3dlYi9GaW5kSW50ZXJlc3RTZXJ2bGV0SW1wbC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyL3dlYi9GaW5kSW50ZXJlc3RTZXJ2bGV0SW1wbC5qYXZhCmluZGV4IGRmNjYyMGQuLjQ5ZWQzNjcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci93ZWIvRmluZEludGVyZXN0U2VydmxldEltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXIvd2ViL0ZpbmRJbnRlcmVzdFNlcnZsZXRJbXBsLmphdmEKQEAgLTIxLDE1ICsyMSwxNSBAQAogaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7CiBpbXBvcnQgamF2YXgueG1sLnJwYy5DYWxsOwogaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOwotaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsgCitpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGphdmF4Lm5hbWluZy4qOwogaW1wb3J0IGphdmF4LnhtbC5ycGMuU2VydmljZTsKIGltcG9ydCBqYXZheC54bWwucnBjLnNlcnZlci5TZXJ2aWNlTGlmZWN5Y2xlOwogaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7CiBpbXBvcnQgamFrYXJ0YS5zZXJ2bGV0LlNpbmdsZVRocmVhZE1vZGVsOwogCi1wdWJsaWMgY2xhc3MgRmluZEludGVyZXN0U2VydmxldEltcGwgaW1wbGVtZW50cyAKLQkJCVNpbmdsZVRocmVhZE1vZGVsLCBTZXJ2aWNlTGlmZWN5Y2xlIHsKK3B1YmxpYyBjbGFzcyBGaW5kSW50ZXJlc3RTZXJ2bGV0SW1wbCBpbXBsZW1lbnRzCisgICAgICAgICAgICBTaW5nbGVUaHJlYWRNb2RlbCwgU2VydmljZUxpZmVjeWNsZSB7CiAKICAgICBwdWJsaWMgRmluZEludGVyZXN0U2VydmxldEltcGwoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRmluZEludGVyZXN0U2VydmxldEltcGwoKSBpbnN0YW50aWF0ZWQiKTsKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgZG91YmxlIGNhbGN1bGF0ZUludGVyZXN0KGRvdWJsZSBiYWxhbmNlLCBkb3VibGUgcGVyaW9kKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJjYWxjdWxhdGVJbnRlcmVzdCBpbnZva2VkIGZyb20gc2VydmxldCBlbmRwb2ludCIpOwotCXJldHVybiAwLjIqYmFsYW5jZSpwZXJpb2Q7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJjYWxjdWxhdGVJbnRlcmVzdCBpbnZva2VkIGZyb20gc2VydmxldCBlbmRwb2ludCIpOworICAgIHJldHVybiAwLjIqYmFsYW5jZSpwZXJpb2Q7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyL3dzY29tcGlsZV9jb25maWcueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyL3dzY29tcGlsZV9jb25maWcueG1sCmluZGV4IDRjZmI5NTQuLmMxMWI4ODYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci93c2NvbXBpbGVfY29uZmlnLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXIvd3Njb21waWxlX2NvbmZpZy54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPGNvbmZpZ3VyYXRpb24KICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheC1ycGMvcmkvY29uZmlnIj4KLSAgPHdzZGwgCisgIDx3c2RsCiAgICAgICBsb2NhdGlvbj0iRmluZEludGVyZXN0LndzZGwiCiAgICAgICBwYWNrYWdlTmFtZT0ibXllamIiLz4KIDwvY29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci93c2NvbXBpbGVfY29uZmlnX2NsaWVudC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXIvd3Njb21waWxlX2NvbmZpZ19jbGllbnQueG1sCmluZGV4IGViZmY2OWMuLjljMzE4YzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci93c2NvbXBpbGVfY29uZmlnX2NsaWVudC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyL3dzY29tcGlsZV9jb25maWdfY2xpZW50LnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8Y29uZmlndXJhdGlvbgogICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4LXJwYy9yaS9jb25maWciPgotICA8d3NkbCAKKyAgPHdzZGwKICAgICAgIGxvY2F0aW9uPSJGaW5kSW50ZXJlc3Qud3NkbCIKICAgICAgIHBhY2thZ2VOYW1lPSJteWNsaWVudCIvPgogPC9jb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyL3dzY29tcGlsZV9jb25maWdfd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamF4LXJwYy9wcm92aWRlci93c2NvbXBpbGVfY29uZmlnX3dlYi54bWwKaW5kZXggOWQxZTEyZi4uZTgwMDFjZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9qYXgtcnBjL3Byb3ZpZGVyL3dzY29tcGlsZV9jb25maWdfd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2pheC1ycGMvcHJvdmlkZXIvd3Njb21waWxlX2NvbmZpZ193ZWIueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxjb25maWd1cmF0aW9uCiAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+Ci0gIDx3c2RsIAorICA8d3NkbAogICAgICAgbG9jYXRpb249IkZpbmRJbnRlcmVzdC53c2RsIgogICAgICAgcGFja2FnZU5hbWU9Im15d2ViIi8+CiA8L2NvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL2piaV9jb21tb25zLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamJpX2NvbW1vbnMueG1sCmluZGV4IDAyZThjNTcuLmYzMzMzNWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamJpX2NvbW1vbnMueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvamJpX2NvbW1vbnMueG1sCkBAIC0zMCw3ICszMCw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJkZXBsb3ktc2VydmljZS1hc3NlbWJseSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPHByb3BlcnR5IG5hbWU9ImJhc2UtZGlyIiB2YWx1ZT0iLiIvPgogICAgICAgPHByb3BlcnR5IG5hbWU9InRlbXAiIHZhbHVlPSIke2Jhc2UtZGlyfS90ZW1wIiAvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InN1LWRpciIgdmFsdWU9IiR7YmFzZS1kaXJ9LyR7amJpLWNvbXBvbmVudC1zdS1kaXJ9Ii8+IAorICAgICAgPHByb3BlcnR5IG5hbWU9InN1LWRpciIgdmFsdWU9IiR7YmFzZS1kaXJ9LyR7amJpLWNvbXBvbmVudC1zdS1kaXJ9Ii8+CiAgICAgICA8bWtkaXIgZGlyPSIke3RlbXB9Ii8+CiAgICAgICA8amFyIGJhc2VkaXI9IiR7c3UtZGlyfS9zdSIgZGVzdGZpbGU9IiR7dGVtcH0vJHtqYmktY29tcG9uZW50LXN1fS5qYXIiLz4KICAgICAgIDxjb3B5IHRvZGlyPSIke3RlbXB9Ij4KQEAgLTUwLDcgKzUwLDcgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzaHV0LWRvd24tc2VydmljZS1hc3NlbWJseSIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXNlcnZpY2UtYXNzZW1ibHkiLz4KICAgICA8L3RhcmdldD4KLSAgCisKICAgICA8dGFyZ2V0IG5hbWU9InN0b3Atc2VydmljZS1hc3NlbWJseSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudCBkaXI9IiR7amJpLWluc3RhbGxhdGlvbn0vYmluIiBhbnRmaWxlPSIke2piaS1pbnN0YWxsYXRpb259L2Jpbi9qYmlfYWRtaW4ueG1sIiB0YXJnZXQ9CiAic3RvcC1zZXJ2aWNlLWFzc2VtYmx5Ij4KQEAgLTkyLDEyICs5MiwxMiBAQAogICAgICAgPC9hbnQ+CiAgICAgPC90YXJnZXQ+CiAKLSAgICA8IS0tIAotCUFyZ3VtZW50cyB0byB0aGlzIHRhcmdldCBhcmUtCi0JCWFwcE5hbWUgLSBhcHBsaWNhdGlvbiBuYW1lCi0JCXdzTmFtZSAgLSB3ZWIgc2VydmljZSBuYW1lCi0JCW1vZHVsZSAgLSBlamItbW9kdWxlfHdlYi1tb2R1bGV8ajJlZS1hcHBsaWNhdGlvbi5lamItbW9kdWxlfGoyZWUtYXBwbGljYXRpb24ud2ViLW1vZHVsZQotCQlmbGFnCS0gdHJ1ZXxmYWxzZQorICAgIDwhLS0KKyAgICBBcmd1bWVudHMgdG8gdGhpcyB0YXJnZXQgYXJlLQorICAgICAgICBhcHBOYW1lIC0gYXBwbGljYXRpb24gbmFtZQorICAgICAgICB3c05hbWUgIC0gd2ViIHNlcnZpY2UgbmFtZQorICAgICAgICBtb2R1bGUgIC0gZWpiLW1vZHVsZXx3ZWItbW9kdWxlfGoyZWUtYXBwbGljYXRpb24uZWpiLW1vZHVsZXxqMmVlLWFwcGxpY2F0aW9uLndlYi1tb2R1bGUKKyAgICAgICAgZmxhZyAgICAtIHRydWV8ZmFsc2UKICAgICAtLT4KICAgICA8dGFyZ2V0IG5hbWU9InNldC1qYmktZW5hYmxlZCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJhc2FkbWluLWNvbW1vbiI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL29uZXdheS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9vbmV3YXkvYnVpbGQucHJvcGVydGllcwppbmRleCA1NzlkZWM2Li41ZWQwZWI3IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL29uZXdheS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvb25ld2F5L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2FsYy13ZWItY2xpZW50Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSIuL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9Ii4vc3VuLXdlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvb25ld2F5L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvb25ld2F5L2J1aWxkLnhtbAppbmRleCBhMmU3MzYwLi4xYmZjMTY0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL29uZXdheS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9vbmV3YXkvYnVpbGQueG1sCkBAIC02NCw3ICs2NCw3IEBACiAgICAgICAgICAgICAgICB2YWx1ZT0iLWtlZXAgLWQgJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvY2xhc3NlcyBodHRwOi8vbG9jYWxob3N0OjgwODAvY2FsYy13ZWItY2xpZW50L3dlYnNlcnZpY2UvT25lV2F5U2VydmljZT9XU0RMIi8+CiAgICAgPC9hbnRjYWxsPgogICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvY2xhc3NlcyIKLSAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvajJlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtcnQuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXRvb2xzLmphciIgCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2oyZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXJ0Lmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy10b29scy5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0id2ViY2xpZW50LyoqIi8+CiAgICAgICA8Y29weSBmaWxlPSIuL2NsaWVudC13ZWIueG1sIiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL3dlYi54bWwiLz4KICAgICAgIDxjb3B5IGZpbGU9Ii4vY2xpZW50LXN1bi13ZWIueG1sIiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL3N1bi13ZWIueG1sIi8+CkBAIC0xMDksMTEgKzEwOSwxMSBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jbGllbnQiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVudGVzdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+Ci0gICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiIAotICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgCisgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9ImNsaWVudC8qKiIvPgogICAgICAgPHVuamFyIHNyYz0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIGRlc3Q9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgogICAgICAgPGphdmEgY2xhc3NuYW1lPSJjbGllbnQuVGVzdENsaWVudCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL29uZXdheS9jbGllbnQtd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvb25ld2F5L2NsaWVudC13ZWIueG1sCmluZGV4IGVlYjczMGQuLjc5NWIwNTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvb25ld2F5L2NsaWVudC13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvb25ld2F5L2NsaWVudC13ZWIueG1sCkBAIC0yMCw3ICsyMCw3IEBACiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgCisgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAgIDxkZXNjcmlwdGlvbj5BIHRlc3QgYXBwbGljYXRpb248L2Rlc2NyaXB0aW9uPgogICA8ZGlzcGxheS1uYW1lPldlYlRpZXI8L2Rpc3BsYXktbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvb25ld2F5L2NsaWVudC9UZXN0Q2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL29uZXdheS9jbGllbnQvVGVzdENsaWVudC5qYXZhCmluZGV4IGQ3NjYyZWYuLmRhN2NjMTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvb25ld2F5L2NsaWVudC9UZXN0Q2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9vbmV3YXkvY2xpZW50L1Rlc3RDbGllbnQuamF2YQpAQCAtMzAsNyArMzAsNyBAQAogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RJZCA9ICJqYmktc2VydmljZWVuZ2luZS9vbmV3YXkiOworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0SWQgPSAiamJpLXNlcnZpY2VlbmdpbmUvb25ld2F5IjsKICAgICBwdWJsaWMgYm9vbGVhbiBmb3VuZDEgPSBmYWxzZTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CkBAIC00NCwxMiArNDQsMTIgQEAKIAogICAgICAgICBTdHJpbmcgdXJsID0gYXJnc1swXTsKICAgICAgICAgdHJ5IHsKLQkJCS8vZm9yKGludCBpPTA7IGk8MTAwOyBpKyspIHsKKyAgICAgICAgICAgIC8vZm9yKGludCBpPTA7IGk8MTAwOyBpKyspIHsKICAgICAgICAgICAgIGludCBjb2RlID0gaW52b2tlU2VydmxldCh1cmwpOwogICAgICAgICAgICAgcmVwb3J0KGNvZGUpOwotCQkJLy99Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgZmFpbCgpOworICAgICAgICAgICAgLy99CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZmFpbCgpOwogICAgICAgICB9CiAgICAgfQogCkBAIC02NSw3ICs2NSw3IEBACiAgICAgICAgICAgICBsb2cobGluZSk7CiAgICAgICAgICAgICAvL2lmKGxpbmUuaW5kZXhPZigiRXhjZXB0aW9uIHRocm93biBTdWNjZXNzZnVsbHkiKSAhPSAtMSkKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiRW5kcG9pbnQgaXMgaW52b2tlZCBzdWNjZXNzZnVsbHkiKSAhPSAtMSkKLQkJZm91bmQxID0gdHJ1ZTsKKyAgICAgICAgZm91bmQxID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY29kZTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL29uZXdheS9lbmRwb2ludC9PbmVXYXkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvb25ld2F5L2VuZHBvaW50L09uZVdheS5qYXZhCmluZGV4IGYwOWIzOGIuLjA4MmI0NzUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvb25ld2F5L2VuZHBvaW50L09uZVdheS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvb25ld2F5L2VuZHBvaW50L09uZVdheS5qYXZhCkBAIC0yNiwyMCArMjYsMjAgQEAKICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9leGFtcGxlLndlYi5zZXJ2aWNlL09uZVdheSIKICkKIHB1YmxpYyBjbGFzcyBPbmVXYXkgewotCXB1YmxpYyBPbmVXYXkoKSB7fQorICAgIHB1YmxpYyBPbmVXYXkoKSB7fQogCi0JQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJzdWJ0cmFjdCIsIGFjdGlvbj0idXJuOlN1YnRyYWN0IikKLQlAT25ld2F5Ci0JcHVibGljIHZvaWQgc3VidHJhY3QoaW50IGksIGludCBqKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiKioqIEluc2lkZSBzdWJ0cmFjdCgiK2krIiwgIitqKyIpIik7CisgICAgQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJzdWJ0cmFjdCIsIGFjdGlvbj0idXJuOlN1YnRyYWN0IikKKyAgICBAT25ld2F5CisgICAgcHVibGljIHZvaWQgc3VidHJhY3QoaW50IGksIGludCBqKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqIEluc2lkZSBzdWJ0cmFjdCgiK2krIiwgIitqKyIpIik7CiAgICAgICAgICAgICAgICAgaW50IGsgPSBpIC1qIDsKLQkJaWYoaSA9PSAxMDEpCi0JCQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVGhpcyBpcyBteSBleGNlcHRpb24gaW4gc3VidHJhY3QgLi4uIik7Ci0JfQorICAgICAgICBpZihpID09IDEwMSkKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJUaGlzIGlzIG15IGV4Y2VwdGlvbiBpbiBzdWJ0cmFjdCAuLi4iKTsKKyAgICB9CiAKLQlAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9InNheUhpIiwgYWN0aW9uPSJ1cm46U2F5SGkiKQotCUBPbmV3YXkKLQlwdWJsaWMgdm9pZCBzYXlIaSgpIHsKKyAgICBAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9InNheUhpIiwgYWN0aW9uPSJ1cm46U2F5SGkiKQorICAgIEBPbmV3YXkKKyAgICBwdWJsaWMgdm9pZCBzYXlIaSgpIHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKiBIaSBmcm9tIE9uZVdheSIpOwotCX0KKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL29uZXdheS9zb2FwLWJpbmRpbmctc3UtYWxhc2thL2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL29uZXdheS9zb2FwLWJpbmRpbmctc3UtYWxhc2thL2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKaW5kZXggOTU4NzM3Ni4uZTM1ZTE0OCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9vbmV3YXkvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvb25ld2F5L3NvYXAtYmluZGluZy1zdS1hbGFza2EvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbApAQCAtMTksOSArMTksOSBAQAogCiA8IS0tIGpiaS54bWwgZmlsZSBmb3IgdGhlIFNPQVAgYmluZGluZyBkZXBsb3ltZW50cyBiaW5kaW5nLiAtLT4KIDxqYmkKLSAgICB2ZXJzaW9uPSIxLjAiIAotICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiIAotICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAorICAgIHZlcnNpb249IjEuMCIKKyAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgLi9qYmkueHNkIj4KICAgPHNlcnZpY2UtYXNzZW1ibHk+CiAgICAgPGlkZW50aWZpY2F0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9vbmV3YXkvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9zdS9NRVRBLUlORi9qYmkueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9vbmV3YXkvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9zdS9NRVRBLUlORi9qYmkueG1sCmluZGV4IDUzNTBmNWUuLmMzM2YxNjUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvb25ld2F5L3NvYXAtYmluZGluZy1zdS1hbGFza2Evc3UvTUVUQS1JTkYvamJpLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL29uZXdheS9zb2FwLWJpbmRpbmctc3UtYWxhc2thL3N1L01FVEEtSU5GL2piaS54bWwKQEAgLTE4LDE1ICsxOCwxNSBAQAogLS0+CiAKIDxqYmkgdmVyc2lvbj0iMS4wIgotCSB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKLQkgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIgCi0JIHhtbG5zOmphdmFlc2I9Imh0dHA6Ly9qYXZhLnN1bi5jb20iCi0JIHhtbG5zOnRucz0iaHR0cDovL2V4YW1wbGUud2ViLnNlcnZpY2UvT25lV2F5IgotCSB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSBqYmkueHNkIj4KLQk8c2VydmljZXMgYmluZGluZy1jb21wb25lbnQ9InRydWUiPgkJCi0JIDxwcm92aWRlcyBpbnRlcmZhY2UtbmFtZT0idG5zOk9uZVdheVNlcnZpY2VJbnRlcmZhY2UiCisgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiCisgICAgIHhtbG5zOmphdmFlc2I9Imh0dHA6Ly9qYXZhLnN1bi5jb20iCisgICAgIHhtbG5zOnRucz0iaHR0cDovL2V4YW1wbGUud2ViLnNlcnZpY2UvT25lV2F5IgorICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSBqYmkueHNkIj4KKyAgICA8c2VydmljZXMgYmluZGluZy1jb21wb25lbnQ9InRydWUiPgorICAgICA8cHJvdmlkZXMgaW50ZXJmYWNlLW5hbWU9InRuczpPbmVXYXlTZXJ2aWNlSW50ZXJmYWNlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLW5hbWU9InRuczpPbmVXYXlTZXJ2aWNlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludC1uYW1lPSJPbmVXYXlQb3J0Ii8+CiAgICAgICAgICAgICAgICAgPGFydGlmYWN0cyB4bWxucz0iIiByb2xlPSJwcm92aWRlciIgZmlsZS1uYW1lPSJlbmRwb2ludHMueG1sIiB0eXBlPSJ4bWwiLz4KLQk8L3NlcnZpY2VzPgorICAgIDwvc2VydmljZXM+CiA8L2piaT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvb25ld2F5L3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL29uZXdheS93ZWIueG1sCmluZGV4IDIyNmY2NTQuLmMwODkwMWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvb25ld2F5L3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9vbmV3YXkvd2ViLnhtbApAQCAtMTgsMzAgKzE4LDMwIEBACiAtLT4KIAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCi0JCQlodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KKyAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCisgICAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KIAotCTxkZXNjcmlwdGlvbj5XZWJUaWVyIGZvciB0aGUgT25lV2F5IFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCTxkaXNwbGF5LW5hbWU+T25lV2F5V0FSPC9kaXNwbGF5LW5hbWU+CisgICAgPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBPbmVXYXkgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgPGRpc3BsYXktbmFtZT5PbmVXYXlXQVI8L2Rpc3BsYXktbmFtZT4KIAotCTxzZXJ2bGV0PgotCQk8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIE9uZVdheSBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JCTxkaXNwbGF5LW5hbWU+T25lV2F5V2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgotCQk8c2VydmxldC1uYW1lPk9uZVdheTwvc2VydmxldC1uYW1lPgotCQk8c2VydmxldC1jbGFzcz5lbmRwb2ludC5PbmVXYXk8L3NlcnZsZXQtY2xhc3M+Ci0JCTxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgotCTwvc2VydmxldD4KKyAgICA8c2VydmxldD4KKyAgICAgICAgPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBPbmVXYXkgV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgICAgICA8ZGlzcGxheS1uYW1lPk9uZVdheVdlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5PbmVXYXk8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuT25lV2F5PC9zZXJ2bGV0LWNsYXNzPgorICAgICAgICA8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KKyAgICA8L3NlcnZsZXQ+CiAKLQk8c2VydmxldC1tYXBwaW5nPgotCQk8c2VydmxldC1uYW1lPk9uZVdheTwvc2VydmxldC1uYW1lPgotCQk8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvT25lV2F5U2VydmljZTwvdXJsLXBhdHRlcm4+Ci0JPC9zZXJ2bGV0LW1hcHBpbmc+CisgICAgPHNlcnZsZXQtbWFwcGluZz4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5PbmVXYXk8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL09uZVdheVNlcnZpY2U8L3VybC1wYXR0ZXJuPgorICAgIDwvc2VydmxldC1tYXBwaW5nPgogCi0JPHNlc3Npb24tY29uZmlnPgotCQk8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+Ci0JPC9zZXNzaW9uLWNvbmZpZz4KKyAgICA8c2Vzc2lvbi1jb25maWc+CisgICAgICAgIDxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KKyAgICA8L3Nlc3Npb24tY29uZmlnPgogCiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvb25ld2F5L3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL29uZXdheS93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDFlOGI2YWEuLjE0MTNmOGUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvb25ld2F5L3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9vbmV3YXkvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjcsNDAgKzI3LDQwIEBACiBwdWJsaWMgY2xhc3MgQ2xpZW50IGV4dGVuZHMgSHR0cFNlcnZsZXQgewogCiAgICAgICAgQFdlYlNlcnZpY2VSZWYobmFtZT0ic3VuLXdlYi5zZXJ2aWNlcmVmL29uZXdheSIpIE9uZVdheVNlcnZpY2Ugc2VydmljZTsKLQkgICAvL3N0YXRpYyBPbmVXYXkgcG9ydDsKKyAgICAgICAvL3N0YXRpYyBPbmVXYXkgcG9ydDsKIAotICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkgCi0JCXRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CisgICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQorICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICAgICBkb1Bvc3QocmVxLCByZXNwKTsKICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQogICAgICAgICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewotCSAgICBQcmludFdyaXRlciBvdXQ9bnVsbDsKKyAgICAgICAgUHJpbnRXcml0ZXIgb3V0PW51bGw7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFNlcnZpY2UgaXMgOiIgKyBzZXJ2aWNlKTsKICAgICAgICAgICAgICAgICByZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKLSAgICAgICAgICAgIAlvdXQgPSByZXNwLmdldFdyaXRlcigpOworICAgICAgICAgICAgICAgIG91dCA9IHJlc3AuZ2V0V3JpdGVyKCk7CiAgICAgICAgICAgICAgICAgT25lV2F5IHBvcnQgPSBzZXJ2aWNlLmdldE9uZVdheVBvcnQoKTsKLQkJCQkvL2lmIChwb3J0ID09IG51bGwpIHBvcnQgPSBzZXJ2aWNlLmdldE9uZVdheVBvcnQoKTsKKyAgICAgICAgICAgICAgICAvL2lmIChwb3J0ID09IG51bGwpIHBvcnQgPSBzZXJ2aWNlLmdldE9uZVdheVBvcnQoKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInBvcnQgaXMgOiAiICsgcG9ydCk7CiAgICAgICAgICAgICAgICAgcG9ydC5zdWJ0cmFjdCgxMDEsIDIpOwogICAgICAgICAgICAgICAgIHBvcnQuc2F5SGkoKTsKLQkJCQlwcmludFN1Y2Nlc3Mob3V0KTsKKyAgICAgICAgICAgICAgICBwcmludFN1Y2Nlc3Mob3V0KTsKICAgICAgICAgICAgIH0gY2F0Y2goamF2YS5sYW5nLkV4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgCQlwcmludEZhaWx1cmUob3V0KTsKKyAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAgICAgICAgIHByaW50RmFpbHVyZShvdXQpOwogICAgICAgICAgICAgfSBmaW5hbGx5IHsKLQkJCQlpZihvdXQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGlmKG91dCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIG91dC5mbHVzaCgpOwogICAgICAgICAgICAgICAgICAgICBvdXQuY2xvc2UoKTsKLQkJCQl9Ci0JICAgIAl9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgIH0KIAogICAgICAgIHB1YmxpYyB2b2lkIHByaW50RmFpbHVyZShQcmludFdyaXRlciBvdXQpIHsKLQkJaWYob3V0ID09IG51bGwpIHJldHVybjsKLQkJb3V0LnByaW50bG4oIjxodG1sPiIpOworICAgICAgICBpZihvdXQgPT0gbnVsbCkgcmV0dXJuOworICAgICAgICBvdXQucHJpbnRsbigiPGh0bWw+Iik7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoZWFkPiIpOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8dGl0bGU+VGVzdFNlcnZsZXQ8L3RpdGxlPiIpOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L2hlYWQ+Iik7CkBAIC03Myw3ICs3Myw3IEBACiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgcHJpbnRTdWNjZXNzKFByaW50V3JpdGVyIG91dCkgewotCQlpZihvdXQgPT0gbnVsbCkgcmV0dXJuOworICAgICAgICBpZihvdXQgPT0gbnVsbCkgcmV0dXJuOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aHRtbD4iKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGhlYWQ+Iik7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjx0aXRsZT5UZXN0U2VydmxldDwvdGl0bGU+Iik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JlcG9ydC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JlcG9ydC54bWwKaW5kZXggNjVhMzJhZS4uMDk0ZTM2NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9yZXBvcnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcmVwb3J0LnhtbApAQCAtMjMsNyArMjMsNyBAQAogPHRhcmdldCBuYW1lPSJyZXBvcnQiPgogPGVjaG8gbWVzc2FnZT0iQ29tcGFyaW5nIHJlc3VsdHMgd2l0aCBleHBlY3RlZCByZXN1bHRzIi8+CiAKLSAKKwogICAgIDx4c2x0IHN0eWxlPSIke3N0eWxlc2hlZXR9IgogICAgICAgICAgICAgaW49IiR7eG1sZmlsZX0iIG91dD0iJHtodG1sZmlsZX0iCiAgICAgICAgICAgICBiYXNlZGlyPSIuIiBkZXN0ZGlyPSIuIiAvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9iY19jb25zdW1lcl9zY19wcm92aWRlci9idW5kbGVkLXdzZGwvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvYmNfY29uc3VtZXJfc2NfcHJvdmlkZXIvYnVuZGxlZC13c2RsL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOTFhZDg5OS4uZjE4ZDJkYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9iY19jb25zdW1lcl9zY19wcm92aWRlci9idW5kbGVkLXdzZGwvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL2JjX2NvbnN1bWVyX3NjX3Byb3ZpZGVyL2J1bmRsZWQtd3NkbC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InJwYy1saXRlcmFsLWJ1bmRsZWQtd3NkbC1iYy1jb25zdW1lci1zZS1wcm92aWRlciIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iLi93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iamJpLWNvbXBvbmVudC1zdS1hc3NlbWJseSIgdmFsdWU9IndlYl9jYWxjdWxhdG9yX2NvbnN1bWVyX2Fzc2VtYmx5Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL2JjX2NvbnN1bWVyX3NjX3Byb3ZpZGVyL2J1bmRsZWQtd3NkbC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL2JjX2NvbnN1bWVyX3NjX3Byb3ZpZGVyL2J1bmRsZWQtd3NkbC9idWlsZC54bWwKaW5kZXggMmU1NjQyMS4uZDVmZTA0MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9iY19jb25zdW1lcl9zY19wcm92aWRlci9idW5kbGVkLXdzZGwvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvYmNfY29uc3VtZXJfc2NfcHJvdmlkZXIvYnVuZGxlZC13c2RsL2J1aWxkLnhtbApAQCAtMzQsMTEgKzM0LDExIEBACiAgICAgJmpheHdzVG9vbHM7CiAgICAgJmpiaWNvbW1vbjsKICAgICAmamJpcHJvcGVydGllczsKLSAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iY2xlYW4sIHNldHVwLCBydW50ZXN0LHVuZGVwbG95Ii8+IAorICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJjbGVhbiwgc2V0dXAsIHJ1bnRlc3QsdW5kZXBsb3kiLz4KIAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+Ci0JICA8ZGVsZXRlIGRpcj0iY29tbW9uOmVuZHBvaW50Ii8+CisgICAgICA8ZGVsZXRlIGRpcj0iY29tbW9uOmVuZHBvaW50Ii8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InNldHVwIiBkZXBlbmRzPSJhc3NlbWJsZS13ZWIsIGRlcGxveS1hcHAsIGFzc2VtYmxlLWNsaWVudCIvPgpAQCAtNTQsMTYgKzU0LDE2IEBACiAgICAgICAgIDxwYXJhbSBuYW1lPSJ3YXIuY2xhc3NlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJ3YXIuZmlsZSIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIiLz4KICAgICAgICA8L2FudGNhbGw+Ci0JICAgPCEtLSBBZGQgdGhlIFdTREwgLS0+Ci0JICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvd3NkbCIvPgotCSAgIDxjb3B5IGZpbGU9IiR7YmFzZWRpcn0vd3NkbC9DYWxjdWxhdG9yU2VydmljZV9zY2hlbWExLnhzZCIgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL3dzZGwiLz4KLQkgICA8Y29weSBmaWxlPSIke2Jhc2VkaXJ9L3dzZGwvQ2FsY3VsYXRvclNlcnZpY2Uud3NkbCIgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL3dzZGwiLz4KLQkgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIiIHVwZGF0ZT0idHJ1ZSI+Ci0JICAgCQk8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcCI+Ci0JCQkJPGluY2x1ZGUgbmFtZT0iV0VCLUlORi93c2RsL0NhbGN1bGF0b3JTZXJ2aWNlX3NjaGVtYTEueHNkIi8+Ci0JCQkJPGluY2x1ZGUgbmFtZT0iV0VCLUlORi93c2RsL0NhbGN1bGF0b3JTZXJ2aWNlLndzZGwiLz4KLQkJCTwvZmlsZXNldD4KLQkgICA8L2phcj4KKyAgICAgICA8IS0tIEFkZCB0aGUgV1NETCAtLT4KKyAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi93c2RsIi8+CisgICAgICAgPGNvcHkgZmlsZT0iJHtiYXNlZGlyfS93c2RsL0NhbGN1bGF0b3JTZXJ2aWNlX3NjaGVtYTEueHNkIiB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvd3NkbCIvPgorICAgICAgIDxjb3B5IGZpbGU9IiR7YmFzZWRpcn0vd3NkbC9DYWxjdWxhdG9yU2VydmljZS53c2RsIiB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvd3NkbCIvPgorICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciIgdXBkYXRlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wIj4KKyAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJXRUItSU5GL3dzZGwvQ2FsY3VsYXRvclNlcnZpY2Vfc2NoZW1hMS54c2QiLz4KKyAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJXRUItSU5GL3dzZGwvQ2FsY3VsYXRvclNlcnZpY2Uud3NkbCIvPgorICAgICAgICAgICAgPC9maWxlc2V0PgorICAgICAgIDwvamFyPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZS1jbGllbnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvYmNfY29uc3VtZXJfc2NfcHJvdmlkZXIvYnVuZGxlZC13c2RsL2NsaWVudC9TT0FQV2ViQ29uc3VtZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvYmNfY29uc3VtZXJfc2NfcHJvdmlkZXIvYnVuZGxlZC13c2RsL2NsaWVudC9TT0FQV2ViQ29uc3VtZXIuamF2YQppbmRleCBmOWQ1ZTY5Li5jNWRkOTkwIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL2JjX2NvbnN1bWVyX3NjX3Byb3ZpZGVyL2J1bmRsZWQtd3NkbC9jbGllbnQvU09BUFdlYkNvbnN1bWVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9iY19jb25zdW1lcl9zY19wcm92aWRlci9idW5kbGVkLXdzZGwvY2xpZW50L1NPQVBXZWJDb25zdW1lci5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RJZCA9ICJqYmktc2VydmljZWVuZ2luZS9ycGMtbGl0ZXJhbC9iY19jb25zdW1lcl9zY19wcm92aWRlci9idW5kbGVkLXdzZGwiOworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0SWQgPSAiamJpLXNlcnZpY2VlbmdpbmUvcnBjLWxpdGVyYWwvYmNfY29uc3VtZXJfc2NfcHJvdmlkZXIvYnVuZGxlZC13c2RsIjsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbih0ZXN0SWQpOwpAQCAtMzgsMjkgKzM4LDI5IEBACiAgICAgICAgIGNsaWVudC5hZGRVc2luZ1NPQVBDb25zdW1lcigpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSh0ZXN0SWQpOwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgdm9pZCBhZGRVc2luZ1NPQVBDb25zdW1lcigpIHsKICAgICAgICAgQ2FsY3VsYXRvciBwb3J0PSBudWxsOwogICAgICAgICB0cnkgewotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIEFmdGVyIGNyZWF0aW5nIENhbGN1bGF0b3JTZXJ2aWNlIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgcG9ydCA9IHNlcnZpY2UuZ2V0Q2FsY3VsYXRvclBvcnQoKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIEFmdGVyIGdldHRpbmcgcG9ydCIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8vIEdldCBTdHViCiAgICAgICAgICAgICBCaW5kaW5nUHJvdmlkZXIgc3R1YiA9IChCaW5kaW5nUHJvdmlkZXIpcG9ydDsKICAgICAgICAgICAgIFN0cmluZyBlbmRwb2ludFVSSSA9Imh0dHA6Ly9sb2NhbGhvc3Q6MTIwMTEvY2FsY3VsYXRvcmVuZHBvaW50IjsKICAgICAgICAgICAgIHN0dWIuZ2V0UmVxdWVzdENvbnRleHQoKS5wdXQoQmluZGluZ1Byb3ZpZGVyLkVORFBPSU5UX0FERFJFU1NfUFJPUEVSVFksCiAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50VVJJKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIEFmdGVyIHNldHRpbmcgZW5kcG9pbnQgYWRkcmVzcyBVUkkiKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBJbmNvbWVUYXhEZXRhaWxzIGl0RGV0YWlscyA9IG5ldyBJbmNvbWVUYXhEZXRhaWxzKCk7CiAgICAgICAgICAgICBpdERldGFpbHMuc2V0Rmlyc3ROYW1lKCAiYmhhdmFuaSIpOwogICAgICAgICAgICAgaXREZXRhaWxzLnNldExhc3ROYW1lKCJzIik7CiAgICAgICAgICAgICBpdERldGFpbHMuc2V0QW5udWFsSW5jb21lKCA0MDAwMDApOwogICAgICAgICAgICAgaXREZXRhaWxzLnNldFN0YXR1cygic2FsYXJpZWQiKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBsb25nIHN0YXJ0VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwogICAgICAgICAgICAgbG9uZyByZXQgPSAwOwogICAgICAgICAgICAgLy8gTWFrZSAxMDAgY2FsbHMgdG8gc2VlIGhvdyBtdWNoIHRpbWUgaXQgdGFrZXMuCkBAIC03OCwzNyArNzgsMzcgQEAKICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgIC8vfQogICAgICAgICAgICAgbG9uZyB0aW1lVGFrZW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIHN0YXJ0VGltZTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvL2ludCByZXQgPSBwb3J0LmFkZCgxLCAyKTsKICAgICAgICAgICAgIHByaW50U3VjY2VzcygiWW91ciBpbmNvbWUgdGF4IGlzIDogUnMgIiwgcmV0LCB0aW1lVGFrZW4pOwogICAgICAgICAgICAgc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAgICAgICAgICAgICBpbnQgayA9IHBvcnQuYWRkKDUwNSwgNTApOwogICAgICAgICAgICAgdGltZVRha2VuID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBzdGFydFRpbWU7CiAgICAgICAgICAgICBwcmludFN1Y2Nlc3MoIlN1bSBvZiA1MDUgYW5kIDUwIGlzIDogIiwgaywgdGltZVRha2VuKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKICAgICAgICAgICAgIFN0cmluZyBoaSA9IHBvcnQuc2F5SGkoKTsKICAgICAgICAgICAgIHRpbWVUYWtlbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gc3RhcnRUaW1lOwogICAgICAgICAgICAgcHJpbnRTdWNjZXNzKCJPdXRwdXQgZnJvbSB3ZWJzZXJ2aWNlIDogIiwgIGhpLCB0aW1lVGFrZW4pOwotICAgICAgICAgICAgCi0JCQkvKgorCisgICAgICAgICAgICAvKgogICAgICAgICAgICAgc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAgICAgICAgICAgICBwb3J0LnByaW50SGkoKTsKICAgICAgICAgICAgIHRpbWVUYWtlbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gc3RhcnRUaW1lOwogICAgICAgICAgICAgcHJpbnRTdWNjZXNzKCJTVUNDRVNTIDogIiwgICJXZWJzZXJ2aWNlIGhhcyBzdWNjZXNzZnVsbHkgcHJpbnRlZCBoaSBpbiBzZXJ2ZXIubG9nIiwgdGltZVRha2VuKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKICAgICAgICAgICAgIHBvcnQucHJpbnRIaVRvTWUoIkphdmFFRVNlcnZpY2VFbmdpbmUiKTsKICAgICAgICAgICAgIHRpbWVUYWtlbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gc3RhcnRUaW1lOwogICAgICAgICAgICAgcHJpbnRTdWNjZXNzKCJTVUNDRVNTIDogIiwgICJXZWJzZXJ2aWNlIGhhcyBzdWNjZXNzZnVsbHkgcHJpbnRlZCBoaSB0byBtZSBpbiBzZXJ2ZXIubG9nIiwgdGltZVRha2VuKTsKICAgICAgICAgICAgICovCiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsIHN0YXQuUEFTUyk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoKGphdmEubGFuZy5FeGNlcHRpb24gZSkgewogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LkZBSUwpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgcHJpbnRGYWlsdXJlKFN0cmluZyBlcnJNc2cpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI8aHRtbD4iKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI8aGVhZD4iKTsKQEAgLTEyMSwxNyArMTIxLDE3IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPC9ib2R5PiIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIjwvaHRtbD4iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBwcmludFN1Y2Nlc3MoU3RyaW5nIG1lc3NhZ2UsIGxvbmcgcmVzdWx0LCBsb25nIHRpbWVUYWtlbikgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuXG4iKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKG1lc3NhZ2UgKyByZXN1bHQpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRpbWUgdGFrZW4gdG8gaW52b2tlIHRoZSBlbmRwb2ludCBvcGVyYXRpb24gaXMgIDogICIgKyB0aW1lVGFrZW4gKyAiIG1pbGxpc2Vjb25kcy4iKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBwcmludFN1Y2Nlc3MoU3RyaW5nIG1lc3NhZ2UsIFN0cmluZyByZXN1bHQsIGxvbmcgdGltZVRha2VuKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG5cbiIpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obWVzc2FnZSArIHJlc3VsdCk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGltZSB0YWtlbiB0byBpbnZva2UgdGhlIGVuZHBvaW50IG9wZXJhdGlvbiBpcyAgOiAgIiArIHRpbWVUYWtlbiArICIgbWlsbGlzZWNvbmRzLiIpOwogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9iY19jb25zdW1lcl9zY19wcm92aWRlci9idW5kbGVkLXdzZGwvY29tbW9uL0luY29tZVRheERldGFpbHMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvYmNfY29uc3VtZXJfc2NfcHJvdmlkZXIvYnVuZGxlZC13c2RsL2NvbW1vbi9JbmNvbWVUYXhEZXRhaWxzLmphdmEKaW5kZXggNTdiMDBlOC4uMzUwYjE2ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9iY19jb25zdW1lcl9zY19wcm92aWRlci9idW5kbGVkLXdzZGwvY29tbW9uL0luY29tZVRheERldGFpbHMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL2JjX2NvbnN1bWVyX3NjX3Byb3ZpZGVyL2J1bmRsZWQtd3NkbC9jb21tb24vSW5jb21lVGF4RGV0YWlscy5qYXZhCkBAIC0xNywxMCArMTcsMTAgQEAKIHBhY2thZ2UgY29tbW9uOwogCiBwdWJsaWMgY2xhc3MgSW5jb21lVGF4RGV0YWlscyB7Ci0JcHVibGljIFN0cmluZyBmaXJzdE5hbWU7Ci0JcHVibGljIFN0cmluZyBsYXN0TmFtZTsKLQlwdWJsaWMgU3RyaW5nIHN0YXR1czsgLy8gc2FsYXJpZWQsIHNlbGYtZW1wbG95ZWQsIHN0dWRlbnQuCi0JcHVibGljIGxvbmcgYW5udWFsSW5jb21lOworICAgIHB1YmxpYyBTdHJpbmcgZmlyc3ROYW1lOworICAgIHB1YmxpYyBTdHJpbmcgbGFzdE5hbWU7CisgICAgcHVibGljIFN0cmluZyBzdGF0dXM7IC8vIHNhbGFyaWVkLCBzZWxmLWVtcGxveWVkLCBzdHVkZW50LgorICAgIHB1YmxpYyBsb25nIGFubnVhbEluY29tZTsKIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL2JjX2NvbnN1bWVyX3NjX3Byb3ZpZGVyL2J1bmRsZWQtd3NkbC9lbmRwb2ludC9DYWxjdWxhdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL2JjX2NvbnN1bWVyX3NjX3Byb3ZpZGVyL2J1bmRsZWQtd3NkbC9lbmRwb2ludC9DYWxjdWxhdG9yLmphdmEKaW5kZXggNjljOWFjYy4uNTViOTRjNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9iY19jb25zdW1lcl9zY19wcm92aWRlci9idW5kbGVkLXdzZGwvZW5kcG9pbnQvQ2FsY3VsYXRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvYmNfY29uc3VtZXJfc2NfcHJvdmlkZXIvYnVuZGxlZC13c2RsL2VuZHBvaW50L0NhbGN1bGF0b3IuamF2YQpAQCAtMjksMTIgKzI5LDEyIEBACiAgICAgICAgIHdzZGxMb2NhdGlvbiA9ICJXRUItSU5GL3dzZGwvQ2FsY3VsYXRvclNlcnZpY2Uud3NkbCIKICAgICAgICAgKQogICAgICAgICBAU09BUEJpbmRpbmcoc3R5bGU9U09BUEJpbmRpbmcuU3R5bGUuUlBDLCB1c2U9U09BUEJpbmRpbmcuVXNlLkxJVEVSQUwpCi0gICAgICAgIAorCiAgICAgICAgIHB1YmxpYyBjbGFzcyBDYWxjdWxhdG9yIHsKLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIHRlc3ROYW1lID0gIlxuVGVzdCA6OiBycGMtbGl0ZXJhbC1idW5kbGVkLXdzZGwtYmMtY29uc3VtZXItc2UtcHJvdmlkZXIgOiAiOwogICAgIHB1YmxpYyBDYWxjdWxhdG9yKCkge30KLSAgICAKKwogICAgIEBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0iYWRkIiwgYWN0aW9uPSJ1cm46QWRkIikKICAgICBwdWJsaWMgaW50IGFkZCgKICAgICAgICAgICAgIEBXZWJQYXJhbShuYW1lID0gImludF8xIiwgcGFydE5hbWUgPSAiaW50XzEiKSBpbnQgaSwKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHRlc3ROYW1lICsgaSArICIrIiArIGogKyIgPSAiICsgayk7CiAgICAgICAgIHJldHVybiBrOwogICAgIH0KLSAgICAKKwogICAgIEBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0iY2FsY3VsYXRlSW5jb21lVGF4IiwgYWN0aW9uPSJ1cm46Q2FsY3VsYXRlSW5jb21lVGF4IikKICAgICBwdWJsaWMgbG9uZyBjYWxjdWxhdGVJbmNvbWVUYXgoSW5jb21lVGF4RGV0YWlscyBkZXRhaWxzCiAgICAgICAgICAgICAsIEluY29tZVRheERldGFpbHMgZGV0YWlsczIKQEAgLTY0LDE4ICs2NCwxOCBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odGVzdE5hbWUgKyJUYXggdG8gYmUgcGFpZCA9ICIgKyB0YXhUb0JlUGFpZCk7CiAgICAgICAgIHJldHVybiB0YXhUb0JlUGFpZDsKICAgICB9Ci0gICAgCisKICAgICBAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9InNheUhpIiwgYWN0aW9uPSJ1cm46U2F5SGkiKQogICAgIHB1YmxpYyBTdHJpbmcgc2F5SGkoKSB7CiAgICAgICAgIHJldHVybiB0ZXN0TmFtZSArICJIaSBmcm9tIHNheUhpKCkiOwogICAgIH0KLSAgICAKKwogICAgIEBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0icHJpbnRIaSIsIGFjdGlvbj0idXJuOlByaW50SGkiKQogICAgIEBPbmV3YXkKICAgICBwdWJsaWMgdm9pZCBwcmludEhpKCkgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odGVzdE5hbWUgKyJIaSBmcm9tIHByaW50SGkoKSIpOwogICAgIH0KLSAgICAKKwogICAgIEBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0icHJpbnRIaVRvTWUiLCBhY3Rpb249InVybjpQcmludEhpVG9NZSIpCiAgICAgQE9uZXdheQogICAgIHB1YmxpYyB2b2lkIHByaW50SGlUb01lKFN0cmluZyBuYW1lKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL2JjX2NvbnN1bWVyX3NjX3Byb3ZpZGVyL2J1bmRsZWQtd3NkbC9zb2FwLWJpbmRpbmctc3UtYWxhc2thL2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL2JjX2NvbnN1bWVyX3NjX3Byb3ZpZGVyL2J1bmRsZWQtd3NkbC9zb2FwLWJpbmRpbmctc3UtYWxhc2thL2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKaW5kZXggYjRkYTk4Ni4uNDMzNzhlMiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9iY19jb25zdW1lcl9zY19wcm92aWRlci9idW5kbGVkLXdzZGwvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvYmNfY29uc3VtZXJfc2NfcHJvdmlkZXIvYnVuZGxlZC13c2RsL3NvYXAtYmluZGluZy1zdS1hbGFza2EvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbApAQCAtMTksOSArMTksOSBAQAogCiA8IS0tIGpiaS54bWwgZmlsZSBmb3IgdGhlIFNPQVAgYmluZGluZyBkZXBsb3ltZW50cyBiaW5kaW5nLiAtLT4KIDxqYmkKLSAgICB2ZXJzaW9uPSIxLjAiIAotICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiIAotICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAorICAgIHZlcnNpb249IjEuMCIKKyAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgLi9qYmkueHNkIj4KICAgPHNlcnZpY2UtYXNzZW1ibHk+CiAgICAgPGlkZW50aWZpY2F0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9iY19jb25zdW1lcl9zY19wcm92aWRlci9idW5kbGVkLXdzZGwvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9zdS9NRVRBLUlORi9qYmkueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9iY19jb25zdW1lcl9zY19wcm92aWRlci9idW5kbGVkLXdzZGwvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9zdS9NRVRBLUlORi9qYmkueG1sCmluZGV4IDgxYzUzMDkuLmNmMzU0OTYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvYmNfY29uc3VtZXJfc2NfcHJvdmlkZXIvYnVuZGxlZC13c2RsL3NvYXAtYmluZGluZy1zdS1hbGFza2Evc3UvTUVUQS1JTkYvamJpLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL2JjX2NvbnN1bWVyX3NjX3Byb3ZpZGVyL2J1bmRsZWQtd3NkbC9zb2FwLWJpbmRpbmctc3UtYWxhc2thL3N1L01FVEEtSU5GL2piaS54bWwKQEAgLTE4LDE2ICsxOCwxNiBAQAogLS0+CiAKIDxqYmkgdmVyc2lvbj0iMS4wIgotCSB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKLQkgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIgCi0gCSB4bWxuczpqYXZhZXNiPSJodHRwOi8vamF2YS5zdW4uY29tIgotCSB4bWxuczp0bnM9Imh0dHA6Ly9leGFtcGxlLndlYi5zZXJ2aWNlL0NhbGN1bGF0b3IiCi0JIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIGpiaS54c2QiPgotCTxzZXJ2aWNlcyBiaW5kaW5nLWNvbXBvbmVudD0idHJ1ZSI+CQkKLQkJPGNvbnN1bWVzIGludGVyZmFjZS1uYW1lPSJ0bnM6Q2FsY3VsYXRvclNlcnZpY2UiCi0JCQkgIGxpbmstdHlwZT0ic3RhbmRhcmQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtbmFtZT0idG5zOkNhbGN1bGF0b3JTZXJ2aWNlIiAKKyAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIKKyAgICAgIHhtbG5zOmphdmFlc2I9Imh0dHA6Ly9qYXZhLnN1bi5jb20iCisgICAgIHhtbG5zOnRucz0iaHR0cDovL2V4YW1wbGUud2ViLnNlcnZpY2UvQ2FsY3VsYXRvciIKKyAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgamJpLnhzZCI+CisgICAgPHNlcnZpY2VzIGJpbmRpbmctY29tcG9uZW50PSJ0cnVlIj4KKyAgICAgICAgPGNvbnN1bWVzIGludGVyZmFjZS1uYW1lPSJ0bnM6Q2FsY3VsYXRvclNlcnZpY2UiCisgICAgICAgICAgICAgIGxpbmstdHlwZT0ic3RhbmRhcmQiCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtbmFtZT0idG5zOkNhbGN1bGF0b3JTZXJ2aWNlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludC1uYW1lPSJDYWxjdWxhdG9yUG9ydCIvPgogICAgICAgICA8amF2YWVzYjphcnRpZmFjdHN0eXBlPldTREwxMTwvamF2YWVzYjphcnRpZmFjdHN0eXBlPgotCTwvc2VydmljZXM+CisgICAgPC9zZXJ2aWNlcz4KIDwvamJpPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9iY19jb25zdW1lcl9zY19wcm92aWRlci9idW5kbGVkLXdzZGwvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvYmNfY29uc3VtZXJfc2NfcHJvdmlkZXIvYnVuZGxlZC13c2RsL3dlYi54bWwKaW5kZXggMDdlMTQ3Ny4uNzk4YzY5YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9iY19jb25zdW1lcl9zY19wcm92aWRlci9idW5kbGVkLXdzZGwvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL2JjX2NvbnN1bWVyX3NjX3Byb3ZpZGVyL2J1bmRsZWQtd3NkbC93ZWIueG1sCkBAIC0xOCwzMCArMTgsMzAgQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKLQkJCWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgorICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKKyAgICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogCi0JPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBDYWxjdWxhdG9yIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCTxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldBUjwvZGlzcGxheS1uYW1lPgorICAgIDxkZXNjcmlwdGlvbj5XZWJUaWVyIGZvciB0aGUgQ2FsY3VsYXRvciBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICA8ZGlzcGxheS1uYW1lPkNhbGN1bGF0b3JXQVI8L2Rpc3BsYXktbmFtZT4KIAotCTxzZXJ2bGV0PgotCQk8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIENhbGN1bGF0b3IgV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCQk8ZGlzcGxheS1uYW1lPkNhbGN1bGF0b3JXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+Ci0JCTxzZXJ2bGV0LW5hbWU+Q2FsY3VsYXRvcjwvc2VydmxldC1uYW1lPgotCQk8c2VydmxldC1jbGFzcz5lbmRwb2ludC5DYWxjdWxhdG9yPC9zZXJ2bGV0LWNsYXNzPgotCQk8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KLQk8L3NlcnZsZXQ+CisgICAgPHNlcnZsZXQ+CisgICAgICAgIDxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgQ2FsY3VsYXRvciBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgICAgIDxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkNhbGN1bGF0b3I8L3NlcnZsZXQtY2xhc3M+CisgICAgICAgIDxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgorICAgIDwvc2VydmxldD4KIAotCTxzZXJ2bGV0LW1hcHBpbmc+Ci0JCTxzZXJ2bGV0LW5hbWU+Q2FsY3VsYXRvcjwvc2VydmxldC1uYW1lPgotCQk8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvQ2FsY3VsYXRvclNlcnZpY2U8L3VybC1wYXR0ZXJuPgotCTwvc2VydmxldC1tYXBwaW5nPgorICAgIDxzZXJ2bGV0LW1hcHBpbmc+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+Q2FsY3VsYXRvcjwvc2VydmxldC1uYW1lPgorICAgICAgICA8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvQ2FsY3VsYXRvclNlcnZpY2U8L3VybC1wYXR0ZXJuPgorICAgIDwvc2VydmxldC1tYXBwaW5nPgogCi0JPHNlc3Npb24tY29uZmlnPgotCQk8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+Ci0JPC9zZXNzaW9uLWNvbmZpZz4KKyAgICA8c2Vzc2lvbi1jb25maWc+CisgICAgICAgIDxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KKyAgICA8L3Nlc3Npb24tY29uZmlnPgogCiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvYmNfY29uc3VtZXJfc2NfcHJvdmlkZXIvd3NkbC1pbXBvcnQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvYmNfY29uc3VtZXJfc2NfcHJvdmlkZXIvd3NkbC1pbXBvcnQvYnVpbGQucHJvcGVydGllcwppbmRleCAxMDYwYzdhLi5iMTNmYjA5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL2JjX2NvbnN1bWVyX3NjX3Byb3ZpZGVyL3dzZGwtaW1wb3J0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9iY19jb25zdW1lcl9zY19wcm92aWRlci93c2RsLWltcG9ydC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InJwYy1saXRlcmFsLWJ1bmRsZWQtd3NkbC1iYy1jb25zdW1lci1zZS1wcm92aWRlciIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iLi93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iamJpLWNvbXBvbmVudC1zdS1hc3NlbWJseSIgdmFsdWU9IndlYl9jYWxjdWxhdG9yX2NvbnN1bWVyX2Fzc2VtYmx5Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL2JjX2NvbnN1bWVyX3NjX3Byb3ZpZGVyL3dzZGwtaW1wb3J0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvYmNfY29uc3VtZXJfc2NfcHJvdmlkZXIvd3NkbC1pbXBvcnQvYnVpbGQueG1sCmluZGV4IDJkNGMzOTMuLmUwYmJhNGQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvYmNfY29uc3VtZXJfc2NfcHJvdmlkZXIvd3NkbC1pbXBvcnQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvYmNfY29uc3VtZXJfc2NfcHJvdmlkZXIvd3NkbC1pbXBvcnQvYnVpbGQueG1sCkBAIC0zNCwxMSArMzQsMTEgQEAKICAgICAmamF4d3NUb29sczsKICAgICAmamJpY29tbW9uOwogICAgICZqYmlwcm9wZXJ0aWVzOwotICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJjbGVhbiwgc2V0dXAsIHJ1bnRlc3QsdW5kZXBsb3kiLz4gCisgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImNsZWFuLCBzZXR1cCwgcnVudGVzdCx1bmRlcGxveSIvPgogCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KLQkgIDxkZWxldGUgZGlyPSJjb21tb246ZW5kcG9pbnQiLz4KKyAgICAgIDxkZWxldGUgZGlyPSJjb21tb246ZW5kcG9pbnQiLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImFzc2VtYmxlLXdlYiwgZGVwbG95LWFwcCwgYXNzZW1ibGUtY2xpZW50Ii8+CkBAIC01NCwxOCArNTQsMTggQEAKICAgICAgICAgPHBhcmFtIG5hbWU9Indhci5jbGFzc2VzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICAgICAgPHBhcmFtIG5hbWU9Indhci5maWxlIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciIvPgogICAgICAgIDwvYW50Y2FsbD4KLQkgICA8IS0tIEFkZCB0aGUgV1NETCAtLT4KLQkgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi93c2RsIi8+Ci0JICAgPGNvcHkgZmlsZT0iJHtiYXNlZGlyfS93c2RsL0NhbGN1bGF0b3JTZXJ2aWNlX3NjaGVtYTEueHNkIiB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvd3NkbCIvPgotCSAgIDxjb3B5IGZpbGU9IiR7YmFzZWRpcn0vd3NkbC9DYWxjdWxhdG9yU2VydmljZS53c2RsIiB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvd3NkbCIvPgotCSAgIDxjb3B5IGZpbGU9IiR7YmFzZWRpcn0vd3NkbC9NZXNzYWdlVHlwZXMud3NkbCIgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL3dzZGwiLz4KLQkgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIiIHVwZGF0ZT0idHJ1ZSI+Ci0JICAgCQk8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcCI+Ci0JCQkJPGluY2x1ZGUgbmFtZT0iV0VCLUlORi93c2RsL0NhbGN1bGF0b3JTZXJ2aWNlX3NjaGVtYTEueHNkIi8+Ci0JCQkJPGluY2x1ZGUgbmFtZT0iV0VCLUlORi93c2RsL0NhbGN1bGF0b3JTZXJ2aWNlLndzZGwiLz4KLQkJCQk8aW5jbHVkZSBuYW1lPSJXRUItSU5GL3dzZGwvTWVzc2FnZVR5cGVzLndzZGwiLz4KLQkJCTwvZmlsZXNldD4KLQkgICA8L2phcj4KKyAgICAgICA8IS0tIEFkZCB0aGUgV1NETCAtLT4KKyAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi93c2RsIi8+CisgICAgICAgPGNvcHkgZmlsZT0iJHtiYXNlZGlyfS93c2RsL0NhbGN1bGF0b3JTZXJ2aWNlX3NjaGVtYTEueHNkIiB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvd3NkbCIvPgorICAgICAgIDxjb3B5IGZpbGU9IiR7YmFzZWRpcn0vd3NkbC9DYWxjdWxhdG9yU2VydmljZS53c2RsIiB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvd3NkbCIvPgorICAgICAgIDxjb3B5IGZpbGU9IiR7YmFzZWRpcn0vd3NkbC9NZXNzYWdlVHlwZXMud3NkbCIgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL3dzZGwiLz4KKyAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIiIHVwZGF0ZT0idHJ1ZSI+CisgICAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcCI+CisgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iV0VCLUlORi93c2RsL0NhbGN1bGF0b3JTZXJ2aWNlX3NjaGVtYTEueHNkIi8+CisgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iV0VCLUlORi93c2RsL0NhbGN1bGF0b3JTZXJ2aWNlLndzZGwiLz4KKyAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJXRUItSU5GL3dzZGwvTWVzc2FnZVR5cGVzLndzZGwiLz4KKyAgICAgICAgICAgIDwvZmlsZXNldD4KKyAgICAgICA8L2phcj4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUtY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL2JjX2NvbnN1bWVyX3NjX3Byb3ZpZGVyL3dzZGwtaW1wb3J0L2NsaWVudC9TT0FQV2ViQ29uc3VtZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvYmNfY29uc3VtZXJfc2NfcHJvdmlkZXIvd3NkbC1pbXBvcnQvY2xpZW50L1NPQVBXZWJDb25zdW1lci5qYXZhCmluZGV4IGM1NDcxNmYuLmRhYjBkMmUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvYmNfY29uc3VtZXJfc2NfcHJvdmlkZXIvd3NkbC1pbXBvcnQvY2xpZW50L1NPQVBXZWJDb25zdW1lci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvYmNfY29uc3VtZXJfc2NfcHJvdmlkZXIvd3NkbC1pbXBvcnQvY2xpZW50L1NPQVBXZWJDb25zdW1lci5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RJZCA9ICJqYmktc2VydmljZWVuZ2luZS9ycGMtbGl0ZXJhbC9iY19jb25zdW1lcl9zY19wcm92aWRlci93c2RsLWltcG9ydCI7CisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RJZCA9ICJqYmktc2VydmljZWVuZ2luZS9ycGMtbGl0ZXJhbC9iY19jb25zdW1lcl9zY19wcm92aWRlci93c2RsLWltcG9ydCI7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24odGVzdElkKTsKQEAgLTM4LDI5ICszOCwyOSBAQAogICAgICAgICBjbGllbnQuYWRkVXNpbmdTT0FQQ29uc3VtZXIoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkodGVzdElkKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIHZvaWQgYWRkVXNpbmdTT0FQQ29uc3VtZXIoKSB7CiAgICAgICAgIENhbGN1bGF0b3IgcG9ydD0gbnVsbDsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBBZnRlciBjcmVhdGluZyBDYWxjdWxhdG9yU2VydmljZSIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHBvcnQgPSBzZXJ2aWNlLmdldENhbGN1bGF0b3JQb3J0KCk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBBZnRlciBnZXR0aW5nIHBvcnQiKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyBHZXQgU3R1YgogICAgICAgICAgICAgQmluZGluZ1Byb3ZpZGVyIHN0dWIgPSAoQmluZGluZ1Byb3ZpZGVyKXBvcnQ7CiAgICAgICAgICAgICBTdHJpbmcgZW5kcG9pbnRVUkkgPSJodHRwOi8vbG9jYWxob3N0OjEyMDExL2NhbGN1bGF0b3JlbmRwb2ludCI7CiAgICAgICAgICAgICBzdHViLmdldFJlcXVlc3RDb250ZXh0KCkucHV0KEJpbmRpbmdQcm92aWRlci5FTkRQT0lOVF9BRERSRVNTX1BST1BFUlRZLAogICAgICAgICAgICAgICAgICAgICBlbmRwb2ludFVSSSk7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBBZnRlciBzZXR0aW5nIGVuZHBvaW50IGFkZHJlc3MgVVJJIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgSW5jb21lVGF4RGV0YWlscyBpdERldGFpbHMgPSBuZXcgSW5jb21lVGF4RGV0YWlscygpOwogICAgICAgICAgICAgaXREZXRhaWxzLnNldEZpcnN0TmFtZSggImJoYXZhbmkiKTsKICAgICAgICAgICAgIGl0RGV0YWlscy5zZXRMYXN0TmFtZSgicyIpOwogICAgICAgICAgICAgaXREZXRhaWxzLnNldEFubnVhbEluY29tZSggNDAwMDAwKTsKICAgICAgICAgICAgIGl0RGV0YWlscy5zZXRTdGF0dXMoInNhbGFyaWVkIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgbG9uZyBzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKICAgICAgICAgICAgIGxvbmcgcmV0ID0gMDsKICAgICAgICAgICAgIC8vIE1ha2UgMTAwIGNhbGxzIHRvIHNlZSBob3cgbXVjaCB0aW1lIGl0IHRha2VzLgpAQCAtNzgsMzcgKzc4LDM3IEBACiAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAvL30KICAgICAgICAgICAgIGxvbmcgdGltZVRha2VuID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBzdGFydFRpbWU7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgLy9pbnQgcmV0ID0gcG9ydC5hZGQoMSwgMik7CiAgICAgICAgICAgICBwcmludFN1Y2Nlc3MoIllvdXIgaW5jb21lIHRheCBpcyA6IFJzICIsIHJldCwgdGltZVRha2VuKTsKICAgICAgICAgICAgIHN0YXJ0VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwogICAgICAgICAgICAgaW50IGsgPSBwb3J0LmFkZCg1MDUsIDUwKTsKICAgICAgICAgICAgIHRpbWVUYWtlbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gc3RhcnRUaW1lOwogICAgICAgICAgICAgcHJpbnRTdWNjZXNzKCJTdW0gb2YgNTA1IGFuZCA1MCBpcyA6ICIsIGssIHRpbWVUYWtlbik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAgICAgICAgICAgICBTdHJpbmcgaGkgPSBwb3J0LnNheUhpKCk7CiAgICAgICAgICAgICB0aW1lVGFrZW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIHN0YXJ0VGltZTsKICAgICAgICAgICAgIHByaW50U3VjY2VzcygiT3V0cHV0IGZyb20gd2Vic2VydmljZSA6ICIsICBoaSwgdGltZVRha2VuKTsKLSAgICAgICAgICAgIAotCQkJLyoKKworICAgICAgICAgICAgLyoKICAgICAgICAgICAgIHN0YXJ0VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwogICAgICAgICAgICAgcG9ydC5wcmludEhpKCk7CiAgICAgICAgICAgICB0aW1lVGFrZW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIHN0YXJ0VGltZTsKICAgICAgICAgICAgIHByaW50U3VjY2VzcygiU1VDQ0VTUyA6ICIsICAiV2Vic2VydmljZSBoYXMgc3VjY2Vzc2Z1bGx5IHByaW50ZWQgaGkgaW4gc2VydmVyLmxvZyIsIHRpbWVUYWtlbik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAgICAgICAgICAgICBwb3J0LnByaW50SGlUb01lKCJKYXZhRUVTZXJ2aWNlRW5naW5lIik7CiAgICAgICAgICAgICB0aW1lVGFrZW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIHN0YXJ0VGltZTsKICAgICAgICAgICAgIHByaW50U3VjY2VzcygiU1VDQ0VTUyA6ICIsICAiV2Vic2VydmljZSBoYXMgc3VjY2Vzc2Z1bGx5IHByaW50ZWQgaGkgdG8gbWUgaW4gc2VydmVyLmxvZyIsIHRpbWVUYWtlbik7CiAgICAgICAgICAgICAqLwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LlBBU1MpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaChqYXZhLmxhbmcuRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHByaW50RmFpbHVyZShTdHJpbmcgZXJyTXNnKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPGh0bWw+Iik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPGhlYWQ+Iik7CkBAIC0xMjEsMTcgKzEyMSwxNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIjwvYm9keT4iKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI8L2h0bWw+Iik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgcHJpbnRTdWNjZXNzKFN0cmluZyBtZXNzYWdlLCBsb25nIHJlc3VsdCwgbG9uZyB0aW1lVGFrZW4pIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcblxuIik7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihtZXNzYWdlICsgcmVzdWx0KTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaW1lIHRha2VuIHRvIGludm9rZSB0aGUgZW5kcG9pbnQgb3BlcmF0aW9uIGlzICA6ICAiICsgdGltZVRha2VuICsgIiBtaWxsaXNlY29uZHMuIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgcHJpbnRTdWNjZXNzKFN0cmluZyBtZXNzYWdlLCBTdHJpbmcgcmVzdWx0LCBsb25nIHRpbWVUYWtlbikgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuXG4iKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKG1lc3NhZ2UgKyByZXN1bHQpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRpbWUgdGFrZW4gdG8gaW52b2tlIHRoZSBlbmRwb2ludCBvcGVyYXRpb24gaXMgIDogICIgKyB0aW1lVGFrZW4gKyAiIG1pbGxpc2Vjb25kcy4iKTsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvYmNfY29uc3VtZXJfc2NfcHJvdmlkZXIvd3NkbC1pbXBvcnQvY29tbW9uL0luY29tZVRheERldGFpbHMuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvYmNfY29uc3VtZXJfc2NfcHJvdmlkZXIvd3NkbC1pbXBvcnQvY29tbW9uL0luY29tZVRheERldGFpbHMuamF2YQppbmRleCA1N2IwMGU4Li4zNTBiMTZmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL2JjX2NvbnN1bWVyX3NjX3Byb3ZpZGVyL3dzZGwtaW1wb3J0L2NvbW1vbi9JbmNvbWVUYXhEZXRhaWxzLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9iY19jb25zdW1lcl9zY19wcm92aWRlci93c2RsLWltcG9ydC9jb21tb24vSW5jb21lVGF4RGV0YWlscy5qYXZhCkBAIC0xNywxMCArMTcsMTAgQEAKIHBhY2thZ2UgY29tbW9uOwogCiBwdWJsaWMgY2xhc3MgSW5jb21lVGF4RGV0YWlscyB7Ci0JcHVibGljIFN0cmluZyBmaXJzdE5hbWU7Ci0JcHVibGljIFN0cmluZyBsYXN0TmFtZTsKLQlwdWJsaWMgU3RyaW5nIHN0YXR1czsgLy8gc2FsYXJpZWQsIHNlbGYtZW1wbG95ZWQsIHN0dWRlbnQuCi0JcHVibGljIGxvbmcgYW5udWFsSW5jb21lOworICAgIHB1YmxpYyBTdHJpbmcgZmlyc3ROYW1lOworICAgIHB1YmxpYyBTdHJpbmcgbGFzdE5hbWU7CisgICAgcHVibGljIFN0cmluZyBzdGF0dXM7IC8vIHNhbGFyaWVkLCBzZWxmLWVtcGxveWVkLCBzdHVkZW50LgorICAgIHB1YmxpYyBsb25nIGFubnVhbEluY29tZTsKIH0KIAogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL2JjX2NvbnN1bWVyX3NjX3Byb3ZpZGVyL3dzZGwtaW1wb3J0L2VuZHBvaW50L0NhbGN1bGF0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvYmNfY29uc3VtZXJfc2NfcHJvdmlkZXIvd3NkbC1pbXBvcnQvZW5kcG9pbnQvQ2FsY3VsYXRvci5qYXZhCmluZGV4IDY5YzlhY2MuLjU1Yjk0YzYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvYmNfY29uc3VtZXJfc2NfcHJvdmlkZXIvd3NkbC1pbXBvcnQvZW5kcG9pbnQvQ2FsY3VsYXRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvYmNfY29uc3VtZXJfc2NfcHJvdmlkZXIvd3NkbC1pbXBvcnQvZW5kcG9pbnQvQ2FsY3VsYXRvci5qYXZhCkBAIC0yOSwxMiArMjksMTIgQEAKICAgICAgICAgd3NkbExvY2F0aW9uID0gIldFQi1JTkYvd3NkbC9DYWxjdWxhdG9yU2VydmljZS53c2RsIgogICAgICAgICApCiAgICAgICAgIEBTT0FQQmluZGluZyhzdHlsZT1TT0FQQmluZGluZy5TdHlsZS5SUEMsIHVzZT1TT0FQQmluZGluZy5Vc2UuTElURVJBTCkKLSAgICAgICAgCisKICAgICAgICAgcHVibGljIGNsYXNzIENhbGN1bGF0b3IgewotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgdGVzdE5hbWUgPSAiXG5UZXN0IDo6IHJwYy1saXRlcmFsLWJ1bmRsZWQtd3NkbC1iYy1jb25zdW1lci1zZS1wcm92aWRlciA6ICI7CiAgICAgcHVibGljIENhbGN1bGF0b3IoKSB7fQotICAgIAorCiAgICAgQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJhZGQiLCBhY3Rpb249InVybjpBZGQiKQogICAgIHB1YmxpYyBpbnQgYWRkKAogICAgICAgICAgICAgQFdlYlBhcmFtKG5hbWUgPSAiaW50XzEiLCBwYXJ0TmFtZSA9ICJpbnRfMSIpIGludCBpLApAQCAtNDQsNyArNDQsNyBAQAogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odGVzdE5hbWUgKyBpICsgIisiICsgaiArIiA9ICIgKyBrKTsKICAgICAgICAgcmV0dXJuIGs7CiAgICAgfQotICAgIAorCiAgICAgQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJjYWxjdWxhdGVJbmNvbWVUYXgiLCBhY3Rpb249InVybjpDYWxjdWxhdGVJbmNvbWVUYXgiKQogICAgIHB1YmxpYyBsb25nIGNhbGN1bGF0ZUluY29tZVRheChJbmNvbWVUYXhEZXRhaWxzIGRldGFpbHMKICAgICAgICAgICAgICwgSW5jb21lVGF4RGV0YWlscyBkZXRhaWxzMgpAQCAtNjQsMTggKzY0LDE4IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0ZXN0TmFtZSArIlRheCB0byBiZSBwYWlkID0gIiArIHRheFRvQmVQYWlkKTsKICAgICAgICAgcmV0dXJuIHRheFRvQmVQYWlkOwogICAgIH0KLSAgICAKKwogICAgIEBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0ic2F5SGkiLCBhY3Rpb249InVybjpTYXlIaSIpCiAgICAgcHVibGljIFN0cmluZyBzYXlIaSgpIHsKICAgICAgICAgcmV0dXJuIHRlc3ROYW1lICsgIkhpIGZyb20gc2F5SGkoKSI7CiAgICAgfQotICAgIAorCiAgICAgQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJwcmludEhpIiwgYWN0aW9uPSJ1cm46UHJpbnRIaSIpCiAgICAgQE9uZXdheQogICAgIHB1YmxpYyB2b2lkIHByaW50SGkoKSB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0ZXN0TmFtZSArIkhpIGZyb20gcHJpbnRIaSgpIik7CiAgICAgfQotICAgIAorCiAgICAgQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJwcmludEhpVG9NZSIsIGFjdGlvbj0idXJuOlByaW50SGlUb01lIikKICAgICBAT25ld2F5CiAgICAgcHVibGljIHZvaWQgcHJpbnRIaVRvTWUoU3RyaW5nIG5hbWUpIHsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvYmNfY29uc3VtZXJfc2NfcHJvdmlkZXIvd3NkbC1pbXBvcnQvc3VuLWh0dHAtYmluZGluZy9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9iY19jb25zdW1lcl9zY19wcm92aWRlci93c2RsLWltcG9ydC9zdW4taHR0cC1iaW5kaW5nL2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKaW5kZXggYjRkYTk4Ni4uNDMzNzhlMiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9iY19jb25zdW1lcl9zY19wcm92aWRlci93c2RsLWltcG9ydC9zdW4taHR0cC1iaW5kaW5nL2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9iY19jb25zdW1lcl9zY19wcm92aWRlci93c2RsLWltcG9ydC9zdW4taHR0cC1iaW5kaW5nL2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKQEAgLTE5LDkgKzE5LDkgQEAKIAogPCEtLSBqYmkueG1sIGZpbGUgZm9yIHRoZSBTT0FQIGJpbmRpbmcgZGVwbG95bWVudHMgYmluZGluZy4gLS0+CiA8amJpCi0gICAgdmVyc2lvbj0iMS4wIiAKLSAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIiAKLSAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKKyAgICB2ZXJzaW9uPSIxLjAiCisgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIC4vamJpLnhzZCI+CiAgIDxzZXJ2aWNlLWFzc2VtYmx5PgogICAgIDxpZGVudGlmaWNhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvYmNfY29uc3VtZXJfc2NfcHJvdmlkZXIvd3NkbC1pbXBvcnQvc3VuLWh0dHAtYmluZGluZy9zdS9NRVRBLUlORi9qYmkueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9iY19jb25zdW1lcl9zY19wcm92aWRlci93c2RsLWltcG9ydC9zdW4taHR0cC1iaW5kaW5nL3N1L01FVEEtSU5GL2piaS54bWwKaW5kZXggODFjNTMwOS4uY2YzNTQ5NiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9iY19jb25zdW1lcl9zY19wcm92aWRlci93c2RsLWltcG9ydC9zdW4taHR0cC1iaW5kaW5nL3N1L01FVEEtSU5GL2piaS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9iY19jb25zdW1lcl9zY19wcm92aWRlci93c2RsLWltcG9ydC9zdW4taHR0cC1iaW5kaW5nL3N1L01FVEEtSU5GL2piaS54bWwKQEAgLTE4LDE2ICsxOCwxNiBAQAogLS0+CiAKIDxqYmkgdmVyc2lvbj0iMS4wIgotCSB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKLQkgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIgCi0gCSB4bWxuczpqYXZhZXNiPSJodHRwOi8vamF2YS5zdW4uY29tIgotCSB4bWxuczp0bnM9Imh0dHA6Ly9leGFtcGxlLndlYi5zZXJ2aWNlL0NhbGN1bGF0b3IiCi0JIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIGpiaS54c2QiPgotCTxzZXJ2aWNlcyBiaW5kaW5nLWNvbXBvbmVudD0idHJ1ZSI+CQkKLQkJPGNvbnN1bWVzIGludGVyZmFjZS1uYW1lPSJ0bnM6Q2FsY3VsYXRvclNlcnZpY2UiCi0JCQkgIGxpbmstdHlwZT0ic3RhbmRhcmQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtbmFtZT0idG5zOkNhbGN1bGF0b3JTZXJ2aWNlIiAKKyAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIKKyAgICAgIHhtbG5zOmphdmFlc2I9Imh0dHA6Ly9qYXZhLnN1bi5jb20iCisgICAgIHhtbG5zOnRucz0iaHR0cDovL2V4YW1wbGUud2ViLnNlcnZpY2UvQ2FsY3VsYXRvciIKKyAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgamJpLnhzZCI+CisgICAgPHNlcnZpY2VzIGJpbmRpbmctY29tcG9uZW50PSJ0cnVlIj4KKyAgICAgICAgPGNvbnN1bWVzIGludGVyZmFjZS1uYW1lPSJ0bnM6Q2FsY3VsYXRvclNlcnZpY2UiCisgICAgICAgICAgICAgIGxpbmstdHlwZT0ic3RhbmRhcmQiCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtbmFtZT0idG5zOkNhbGN1bGF0b3JTZXJ2aWNlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludC1uYW1lPSJDYWxjdWxhdG9yUG9ydCIvPgogICAgICAgICA8amF2YWVzYjphcnRpZmFjdHN0eXBlPldTREwxMTwvamF2YWVzYjphcnRpZmFjdHN0eXBlPgotCTwvc2VydmljZXM+CisgICAgPC9zZXJ2aWNlcz4KIDwvamJpPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9iY19jb25zdW1lcl9zY19wcm92aWRlci93c2RsLWltcG9ydC93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9iY19jb25zdW1lcl9zY19wcm92aWRlci93c2RsLWltcG9ydC93ZWIueG1sCmluZGV4IDA3ZTE0NzcuLjc5OGM2OWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvYmNfY29uc3VtZXJfc2NfcHJvdmlkZXIvd3NkbC1pbXBvcnQvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL2JjX2NvbnN1bWVyX3NjX3Byb3ZpZGVyL3dzZGwtaW1wb3J0L3dlYi54bWwKQEAgLTE4LDMwICsxOCwzMCBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotCQkJaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CisgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQorICAgICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAKLQk8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIENhbGN1bGF0b3IgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV0FSPC9kaXNwbGF5LW5hbWU+CisgICAgPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBDYWxjdWxhdG9yIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgIDxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldBUjwvZGlzcGxheS1uYW1lPgogCi0JPHNlcnZsZXQ+Ci0JCTxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgQ2FsY3VsYXRvciBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JCTxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KLQkJPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+Ci0JCTxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkNhbGN1bGF0b3I8L3NlcnZsZXQtY2xhc3M+Ci0JCTxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgotCTwvc2VydmxldD4KKyAgICA8c2VydmxldD4KKyAgICAgICAgPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBDYWxjdWxhdG9yIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgorICAgICAgICA8c2VydmxldC1uYW1lPkNhbGN1bGF0b3I8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuQ2FsY3VsYXRvcjwvc2VydmxldC1jbGFzcz4KKyAgICAgICAgPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+CisgICAgPC9zZXJ2bGV0PgogCi0JPHNlcnZsZXQtbWFwcGluZz4KLQkJPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+Ci0JCTx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9DYWxjdWxhdG9yU2VydmljZTwvdXJsLXBhdHRlcm4+Ci0JPC9zZXJ2bGV0LW1hcHBpbmc+CisgICAgPHNlcnZsZXQtbWFwcGluZz4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9DYWxjdWxhdG9yU2VydmljZTwvdXJsLXBhdHRlcm4+CisgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiAKLQk8c2Vzc2lvbi1jb25maWc+Ci0JCTxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KLQk8L3Nlc3Npb24tY29uZmlnPgorICAgIDxzZXNzaW9uLWNvbmZpZz4KKyAgICAgICAgPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgorICAgIDwvc2Vzc2lvbi1jb25maWc+CiAKIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL2J1aWxkLnhtbAppbmRleCA5MGQwNWU5Li5hN2I3ZTkxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL2J1aWxkLnhtbApAQCAtMjUsNyArMjUsNyBAQAogICAgIDx0YXJnZXQgbmFtZT0iYWxsIj4KICAgICAgICAgPGFudCBkaXI9InNlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2dlbmVyYXRlZF93c2RsIiB0YXJnZXQ9ImFsbCIvPgogICAgICAgICA8YW50IGRpcj0ic2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvYnVuZGxlZF93c2RsIiB0YXJnZXQ9ImFsbCIvPgotCQk8YW50IGRpcj0iYmNfY29uc3VtZXJfc2NfcHJvdmlkZXIvd3NkbC1pbXBvcnQiIHRhcmdldD0iYWxsIi8+Ci0JCTxhbnQgZGlyPSJiY19jb25zdW1lcl9zY19wcm92aWRlci9idW5kbGVkLXdzZGwiIHRhcmdldD0iYWxsIi8+CisgICAgICAgIDxhbnQgZGlyPSJiY19jb25zdW1lcl9zY19wcm92aWRlci93c2RsLWltcG9ydCIgdGFyZ2V0PSJhbGwiLz4KKyAgICAgICAgPGFudCBkaXI9ImJjX2NvbnN1bWVyX3NjX3Byb3ZpZGVyL2J1bmRsZWQtd3NkbCIgdGFyZ2V0PSJhbGwiLz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvYnVuZGxlZF93c2RsL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2J1bmRsZWRfd3NkbC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDg0OWM1NTUuLmQ3OTUzZjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvYnVuZGxlZF93c2RsL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9idW5kbGVkX3dzZGwvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJycGMtbGl0ZXJhbC1idW5kbGVkLXdzZGwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9Ii4vd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iLi9zdW4td2ViLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9idW5kbGVkX3dzZGwvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9idW5kbGVkX3dzZGwvYnVpbGQueG1sCmluZGV4IDg3YzQyNGEuLmRmODNhYWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvYnVuZGxlZF93c2RsL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2J1bmRsZWRfd3NkbC9idWlsZC54bWwKQEAgLTM4LDkgKzM4LDkgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+Ci0JICA8ZGVsZXRlIGZpbGU9IiR7amJpLWNvbXBvbmVudC1zdS1kaXJ9L2Fzc2VtYmx5LyR7YXBwbmFtZX0td2ViLndhciIvPgotCSAgPGRlbGV0ZSBmaWxlPSIke2Jhc2VkaXJ9L1JlcFJ1bkNvbmYudHh0Ii8+Ci0JICA8ZGVsZXRlIGRpcj0iJHtiYXNlZGlyfS9jb21tb246ZW5kcG9pbnQiLz4KKyAgICAgIDxkZWxldGUgZmlsZT0iJHtqYmktY29tcG9uZW50LXN1LWRpcn0vYXNzZW1ibHkvJHthcHBuYW1lfS13ZWIud2FyIi8+CisgICAgICA8ZGVsZXRlIGZpbGU9IiR7YmFzZWRpcn0vUmVwUnVuQ29uZi50eHQiLz4KKyAgICAgIDxkZWxldGUgZGlyPSIke2Jhc2VkaXJ9L2NvbW1vbjplbmRwb2ludCIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iYXNzZW1ibGUtd2ViLCBkZXBsb3ktamJpLWNvbXBvbmVudC1zdSxhc3NlbWJsZS1jbGllbnQsZGVwbG95LWNsaWVudCIvPgpAQCAtNTIsMzUgKzUyLDM1IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlLXdlYiIgZGVwZW5kcz0iaW5pdC1jb21tb24sIGNvbXBpbGUiPgotCSAgPGVjaG8gbWVzc2FnZT0iY2xhc3NlcyBkaXIgPSAke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgotCSAgPGVjaG8gbWVzc2FnZT0iYXNzZW1ibGUuZGlyID0gJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciIvPgorICAgICAgPGVjaG8gbWVzc2FnZT0iY2xhc3NlcyBkaXIgPSAke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgorICAgICAgPGVjaG8gbWVzc2FnZT0iYXNzZW1ibGUuZGlyID0gJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwa2ctd2FyIj4KICAgICAgICAgPHBhcmFtIG5hbWU9Indhci5jbGFzc2VzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICAgICAgPHBhcmFtIG5hbWU9Indhci5maWxlIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciIvPgogICAgICAgIDwvYW50Y2FsbD4KLQkgICA8IS0tIEFkZCBNRVRBLUlORi9qYmkueG1sIHRvIC53YXIgZmlsZSAtLT4KLQkgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvTUVUQS1JTkYiLz4KLQkgICA8ZWNobyBtZXNzYWdlPSJjcmVhdGVkIGRpciA9ICR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9NRVRBLUlORiIvPgotCSAgIDxjb3B5IGZpbGU9IiR7amJpLWNvbXBvbmVudC1zdS1kaXJ9L3N1L01FVEEtSU5GL2piaS54bWwiIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL01FVEEtSU5GL2piaS54bWwiLz4KLQkgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIiIHVwZGF0ZT0idHJ1ZSI+Ci0JICAgCQk8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcCI+Ci0JCQkJPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvamJpLnhtbCIvPgotCQkJPC9maWxlc2V0PgotCSAgIDwvamFyPgorICAgICAgIDwhLS0gQWRkIE1FVEEtSU5GL2piaS54bWwgdG8gLndhciBmaWxlIC0tPgorICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9NRVRBLUlORiIvPgorICAgICAgIDxlY2hvIG1lc3NhZ2U9ImNyZWF0ZWQgZGlyID0gJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL01FVEEtSU5GIi8+CisgICAgICAgPGNvcHkgZmlsZT0iJHtqYmktY29tcG9uZW50LXN1LWRpcn0vc3UvTUVUQS1JTkYvamJpLnhtbCIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvTUVUQS1JTkYvamJpLnhtbCIvPgorICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciIgdXBkYXRlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wIj4KKyAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9qYmkueG1sIi8+CisgICAgICAgICAgICA8L2ZpbGVzZXQ+CisgICAgICAgPC9qYXI+CiAKLQkgICA8IS0tIEFkZCB0aGUgV1NETCAtLT4KLQkgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi93c2RsIi8+Ci0JICAgPGNvcHkgZmlsZT0iJHtiYXNlZGlyfS93c2RsL0NhbGN1bGF0b3JTZXJ2aWNlX3NjaGVtYTEueHNkIiB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvd3NkbCIvPgotCSAgIDxjb3B5IGZpbGU9IiR7YmFzZWRpcn0vd3NkbC9DYWxjdWxhdG9yU2VydmljZS53c2RsIiB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL1dFQi1JTkYvd3NkbCIvPgotCSAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciIgdXBkYXRlPSJ0cnVlIj4KLQkgICAJCTxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wIj4KLQkJCQk8aW5jbHVkZSBuYW1lPSJXRUItSU5GL3dzZGwvQ2FsY3VsYXRvclNlcnZpY2Vfc2NoZW1hMS54c2QiLz4KLQkJCQk8aW5jbHVkZSBuYW1lPSJXRUItSU5GL3dzZGwvQ2FsY3VsYXRvclNlcnZpY2Uud3NkbCIvPgotCQkJPC9maWxlc2V0PgotCSAgIDwvamFyPgorICAgICAgIDwhLS0gQWRkIHRoZSBXU0RMIC0tPgorICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9XRUItSU5GL3dzZGwiLz4KKyAgICAgICA8Y29weSBmaWxlPSIke2Jhc2VkaXJ9L3dzZGwvQ2FsY3VsYXRvclNlcnZpY2Vfc2NoZW1hMS54c2QiIHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi93c2RsIi8+CisgICAgICAgPGNvcHkgZmlsZT0iJHtiYXNlZGlyfS93c2RsL0NhbGN1bGF0b3JTZXJ2aWNlLndzZGwiIHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvV0VCLUlORi93c2RsIi8+CisgICAgICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIiB1cGRhdGU9InRydWUiPgorICAgICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAiPgorICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IldFQi1JTkYvd3NkbC9DYWxjdWxhdG9yU2VydmljZV9zY2hlbWExLnhzZCIvPgorICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IldFQi1JTkYvd3NkbC9DYWxjdWxhdG9yU2VydmljZS53c2RsIi8+CisgICAgICAgICAgICA8L2ZpbGVzZXQ+CisgICAgICAgPC9qYXI+CiAKLQkgICA8IS0tIENvcHkgdGhlIEphdmFFRSBhcHAgdG8gdGhlIHNlcnZpY2UgYXNzZW1ibHkgLS0+Ci0JICA8Y29weSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIiB0b2Rpcj0iJHtqYmktY29tcG9uZW50LXN1LWRpcn0vYXNzZW1ibHkiLz4KKyAgICAgICA8IS0tIENvcHkgdGhlIEphdmFFRSBhcHAgdG8gdGhlIHNlcnZpY2UgYXNzZW1ibHkgLS0+CisgICAgICA8Y29weSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIiB0b2Rpcj0iJHtqYmktY29tcG9uZW50LXN1LWRpcn0vYXNzZW1ibHkiLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUtY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CkBAIC05Miw3ICs5Miw3IEBACiAgICAgICAgICAgICAgICB2YWx1ZT0iLWtlZXAgLWQgJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvY2xhc3NlcyBodHRwOi8vbG9jYWxob3N0OjgwODAvcnBjLWxpdGVyYWwtYnVuZGxlZC13c2RsL3dlYnNlcnZpY2UvQ2FsY3VsYXRvclNlcnZpY2U/V1NETCIvPgogICAgIDwvYW50Y2FsbD4KICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL2NsYXNzZXMiCi0gICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2oyZWUuamFyIiAKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvajJlZS5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iY29tbW9uLyoqLHdlYmNsaWVudC8qKiIvPgogICAgICAgPGNvcHkgZmlsZT0iLi9jbGllbnQtd2ViLnhtbCIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi93ZWIueG1sIi8+CiAgICAgICA8Y29weSBmaWxlPSIuL2NsaWVudC1zdW4td2ViLnhtbCIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi9zdW4td2ViLnhtbCIvPgpAQCAtMTMxLDExICsxMzEsMTEgQEAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY2xpZW50Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bnRlc3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgotICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IiAKLSAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIAorICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJjb21tb24vKiosY2xpZW50LyoqIi8+CiAgICAgICA8dW5qYXIgc3JjPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgZGVzdD0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+CiAgICAgICA8amF2YSBjbGFzc25hbWU9ImNsaWVudC5UZXN0Q2xpZW50Ij4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvYnVuZGxlZF93c2RsL2NsaWVudC13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9idW5kbGVkX3dzZGwvY2xpZW50LXdlYi54bWwKaW5kZXggZWViNzMwZC4uNzk1YjA1MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9idW5kbGVkX3dzZGwvY2xpZW50LXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9idW5kbGVkX3dzZGwvY2xpZW50LXdlYi54bWwKQEAgLTIwLDcgKzIwLDcgQEAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0gICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSAKKyAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KICAgPGRlc2NyaXB0aW9uPkEgdGVzdCBhcHBsaWNhdGlvbjwvZGVzY3JpcHRpb24+CiAgIDxkaXNwbGF5LW5hbWU+V2ViVGllcjwvZGlzcGxheS1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9idW5kbGVkX3dzZGwvY2xpZW50L1Rlc3RDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvYnVuZGxlZF93c2RsL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKaW5kZXggNDI5NmE3Zi4uNjI4MjUzZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9idW5kbGVkX3dzZGwvY2xpZW50L1Rlc3RDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2J1bmRsZWRfd3NkbC9jbGllbnQvVGVzdENsaWVudC5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdElkID0gImpiaS1zZXJ2aWNlZW5naW5lL3JwYy1saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2J1bmRsZWRfd3NkbCI7CisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RJZCA9ICJqYmktc2VydmljZWVuZ2luZS9ycGMtbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9idW5kbGVkX3dzZGwiOwogCiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewpAQCAtNDYsOCArNDYsOCBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgaW50IGNvZGUgPSBpbnZva2VTZXJ2bGV0KHVybCk7CiAgICAgICAgICAgICByZXBvcnQoY29kZSk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgZmFpbCgpOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGZhaWwoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNTgsMTUgKzU4LDE1IEBACiAgICAgICAgIGludCBjb2RlID0gYzEuZ2V0UmVzcG9uc2VDb2RlKCk7CiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gYzEuZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgaW5wdXQgPSBuZXcgQnVmZmVyZWRSZWFkZXIgKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwotCQlTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7Ci0JCWJvb2xlYW4gZm91bmQgPSBmYWxzZTsKKyAgICAgICAgYm9vbGVhbiBmb3VuZCA9IGZhbHNlOwogICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7Ci0JCQlpZihsaW5lLmluZGV4T2YoIlNVQ0NFU1MiKSAhPSAtMSkgZm91bmQgPSB0cnVlOwkKLQkJCWJ1ZmZlci5hcHBlbmQobGluZSArICJcbiIpOworICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJTVUNDRVNTIikgIT0gLTEpIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQobGluZSArICJcbiIpOwogICAgICAgICB9CiAgICAgICAgIGxvZyhidWZmZXIudG9TdHJpbmcoKSk7Ci0JICAgIGlmKCFmb3VuZCkgcmV0dXJuIDUwNTsJCisgICAgICAgIGlmKCFmb3VuZCkgcmV0dXJuIDUwNTsKICAgICAgICAgcmV0dXJuIGNvZGU7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2J1bmRsZWRfd3NkbC9jb21tb24vSW5jb21lVGF4RGV0YWlscy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9idW5kbGVkX3dzZGwvY29tbW9uL0luY29tZVRheERldGFpbHMuamF2YQppbmRleCA1N2IwMGU4Li4zNTBiMTZmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2J1bmRsZWRfd3NkbC9jb21tb24vSW5jb21lVGF4RGV0YWlscy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvYnVuZGxlZF93c2RsL2NvbW1vbi9JbmNvbWVUYXhEZXRhaWxzLmphdmEKQEAgLTE3LDEwICsxNywxMCBAQAogcGFja2FnZSBjb21tb247CiAKIHB1YmxpYyBjbGFzcyBJbmNvbWVUYXhEZXRhaWxzIHsKLQlwdWJsaWMgU3RyaW5nIGZpcnN0TmFtZTsKLQlwdWJsaWMgU3RyaW5nIGxhc3ROYW1lOwotCXB1YmxpYyBTdHJpbmcgc3RhdHVzOyAvLyBzYWxhcmllZCwgc2VsZi1lbXBsb3llZCwgc3R1ZGVudC4KLQlwdWJsaWMgbG9uZyBhbm51YWxJbmNvbWU7CisgICAgcHVibGljIFN0cmluZyBmaXJzdE5hbWU7CisgICAgcHVibGljIFN0cmluZyBsYXN0TmFtZTsKKyAgICBwdWJsaWMgU3RyaW5nIHN0YXR1czsgLy8gc2FsYXJpZWQsIHNlbGYtZW1wbG95ZWQsIHN0dWRlbnQuCisgICAgcHVibGljIGxvbmcgYW5udWFsSW5jb21lOwogfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvYnVuZGxlZF93c2RsL2VuZHBvaW50L0NhbGN1bGF0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvYnVuZGxlZF93c2RsL2VuZHBvaW50L0NhbGN1bGF0b3IuamF2YQppbmRleCAyMzhkZmQ4Li5iNGJjOGEzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2J1bmRsZWRfd3NkbC9lbmRwb2ludC9DYWxjdWxhdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9idW5kbGVkX3dzZGwvZW5kcG9pbnQvQ2FsY3VsYXRvci5qYXZhCkBAIC0yNiwxNSArMjYsMTUgQEAKICAgICAgICAgbmFtZT0iQ2FsY3VsYXRvciIsCiAgICAgICAgIHNlcnZpY2VOYW1lPSJDYWxjdWxhdG9yU2VydmljZSIsCiAgICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2V4YW1wbGUud2ViLnNlcnZpY2UvQ2FsY3VsYXRvciIsCi0JCXdzZGxMb2NhdGlvbiA9ICJXRUItSU5GL3dzZGwvQ2FsY3VsYXRvclNlcnZpY2Uud3NkbCIKKyAgICAgICAgd3NkbExvY2F0aW9uID0gIldFQi1JTkYvd3NkbC9DYWxjdWxhdG9yU2VydmljZS53c2RsIgogICAgICAgICApCiBAU09BUEJpbmRpbmcoc3R5bGU9U09BUEJpbmRpbmcuU3R5bGUuUlBDLCB1c2U9U09BUEJpbmRpbmcuVXNlLkxJVEVSQUwpCiAKIHB1YmxpYyBjbGFzcyBDYWxjdWxhdG9yIHsKIAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIHRlc3ROYW1lID0gIlxuVGVzdCA6OiBycGMtbGl0ZXJhbC1idW5kbGVkLXdzZGwgOiAiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIHRlc3ROYW1lID0gIlxuVGVzdCA6OiBycGMtbGl0ZXJhbC1idW5kbGVkLXdzZGwgOiAiOwogICAgIHB1YmxpYyBDYWxjdWxhdG9yKCkge30KLSAgICAKKwogICAgIEBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0iYWRkIiwgYWN0aW9uPSJ1cm46QWRkIikKICAgICBwdWJsaWMgaW50IGFkZCgKICAgICAgICAgICAgIEBXZWJQYXJhbShuYW1lID0gImludF8xIiwgcGFydE5hbWUgPSAiaW50XzEiKSBpbnQgaSwKQEAgLTQ1LDM4ICs0NSwzOCBAQAogICAgICAgICByZXR1cm4gazsKICAgICB9CiAKLQlAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9ImNhbGN1bGF0ZUluY29tZVRheCIsIGFjdGlvbj0idXJuOkNhbGN1bGF0ZUluY29tZVRheCIpCi0JcHVibGljIGxvbmcgY2FsY3VsYXRlSW5jb21lVGF4KEluY29tZVRheERldGFpbHMgZGV0YWlscwotCQkJICwgSW5jb21lVGF4RGV0YWlscyBkZXRhaWxzMgotCQkJICwgSW5jb21lVGF4RGV0YWlscyBkZXRhaWxzMwotCQkJICwgSW5jb21lVGF4RGV0YWlscyBkZXRhaWxzNAotCQkJICwgSW5jb21lVGF4RGV0YWlscyBkZXRhaWxzNQotCQkJICwgSW5jb21lVGF4RGV0YWlscyBkZXRhaWxzNgotCQkJICwgSW5jb21lVGF4RGV0YWlscyBkZXRhaWxzNwotCQkJICwgSW5jb21lVGF4RGV0YWlscyBkZXRhaWxzOAotCQkJICwgSW5jb21lVGF4RGV0YWlscyBkZXRhaWxzOQotCQkJICwgSW5jb21lVGF4RGV0YWlscyBkZXRhaWxzMTAKLQkJCSkgewotCQlsb25nIGluY29tZSA9IGRldGFpbHMuYW5udWFsSW5jb21lOwotCQlTeXN0ZW0ub3V0LnByaW50bG4odGVzdE5hbWUgKyAiQW5udWFsIGluY29tZSA9ICIgKyBpbmNvbWUpOwotCQlsb25nIHRheFJhdGUgPSAzMDsgLy8gMzAlCi0JCWxvbmcgdGF4VG9CZVBhaWQgPSBpbmNvbWUgLyB0YXhSYXRlOwotCQlTeXN0ZW0ub3V0LnByaW50bG4odGVzdE5hbWUgKyJUYXggdG8gYmUgcGFpZCA9ICIgKyB0YXhUb0JlUGFpZCk7Ci0JCXJldHVybiB0YXhUb0JlUGFpZDsKLQl9CisgICAgQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJjYWxjdWxhdGVJbmNvbWVUYXgiLCBhY3Rpb249InVybjpDYWxjdWxhdGVJbmNvbWVUYXgiKQorICAgIHB1YmxpYyBsb25nIGNhbGN1bGF0ZUluY29tZVRheChJbmNvbWVUYXhEZXRhaWxzIGRldGFpbHMKKyAgICAgICAgICAgICAsIEluY29tZVRheERldGFpbHMgZGV0YWlsczIKKyAgICAgICAgICAgICAsIEluY29tZVRheERldGFpbHMgZGV0YWlsczMKKyAgICAgICAgICAgICAsIEluY29tZVRheERldGFpbHMgZGV0YWlsczQKKyAgICAgICAgICAgICAsIEluY29tZVRheERldGFpbHMgZGV0YWlsczUKKyAgICAgICAgICAgICAsIEluY29tZVRheERldGFpbHMgZGV0YWlsczYKKyAgICAgICAgICAgICAsIEluY29tZVRheERldGFpbHMgZGV0YWlsczcKKyAgICAgICAgICAgICAsIEluY29tZVRheERldGFpbHMgZGV0YWlsczgKKyAgICAgICAgICAgICAsIEluY29tZVRheERldGFpbHMgZGV0YWlsczkKKyAgICAgICAgICAgICAsIEluY29tZVRheERldGFpbHMgZGV0YWlsczEwCisgICAgICAgICAgICApIHsKKyAgICAgICAgbG9uZyBpbmNvbWUgPSBkZXRhaWxzLmFubnVhbEluY29tZTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHRlc3ROYW1lICsgIkFubnVhbCBpbmNvbWUgPSAiICsgaW5jb21lKTsKKyAgICAgICAgbG9uZyB0YXhSYXRlID0gMzA7IC8vIDMwJQorICAgICAgICBsb25nIHRheFRvQmVQYWlkID0gaW5jb21lIC8gdGF4UmF0ZTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHRlc3ROYW1lICsiVGF4IHRvIGJlIHBhaWQgPSAiICsgdGF4VG9CZVBhaWQpOworICAgICAgICByZXR1cm4gdGF4VG9CZVBhaWQ7CisgICAgfQogCi0JQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJzYXlIaSIsIGFjdGlvbj0idXJuOlNheUhpIikKLQlwdWJsaWMgU3RyaW5nIHNheUhpKCkgewotCQlyZXR1cm4gdGVzdE5hbWUgKyAiSGkgZnJvbSBzYXlIaSgpIjsKLQl9CisgICAgQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJzYXlIaSIsIGFjdGlvbj0idXJuOlNheUhpIikKKyAgICBwdWJsaWMgU3RyaW5nIHNheUhpKCkgeworICAgICAgICByZXR1cm4gdGVzdE5hbWUgKyAiSGkgZnJvbSBzYXlIaSgpIjsKKyAgICB9CiAKLQlAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9InByaW50SGkiLCBhY3Rpb249InVybjpQcmludEhpIikKLQlwdWJsaWMgdm9pZCBwcmludEhpKCkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4odGVzdE5hbWUgKyJIaSBmcm9tIHByaW50SGkoKSIpOwotCX0KKyAgICBAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9InByaW50SGkiLCBhY3Rpb249InVybjpQcmludEhpIikKKyAgICBwdWJsaWMgdm9pZCBwcmludEhpKCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odGVzdE5hbWUgKyJIaSBmcm9tIHByaW50SGkoKSIpOworICAgIH0KIAotCUBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0icHJpbnRIaVRvTWUiLCBhY3Rpb249InVybjpQcmludEhpVG9NZSIpCi0JcHVibGljIHZvaWQgcHJpbnRIaVRvTWUoU3RyaW5nIG5hbWUpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKHRlc3ROYW1lICsiSGkgdG8gIiArIG5hbWUgKyAiIGZyb20gcHJpbnRIaVRvTWUoKSIpOwotCX0KKyAgICBAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9InByaW50SGlUb01lIiwgYWN0aW9uPSJ1cm46UHJpbnRIaVRvTWUiKQorICAgIHB1YmxpYyB2b2lkIHByaW50SGlUb01lKFN0cmluZyBuYW1lKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0ZXN0TmFtZSArIkhpIHRvICIgKyBuYW1lICsgIiBmcm9tIHByaW50SGlUb01lKCkiKTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2J1bmRsZWRfd3NkbC9qYXZhZWUtc2Utc2VydmljZXVuaXQvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvYnVuZGxlZF93c2RsL2phdmFlZS1zZS1zZXJ2aWNldW5pdC9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCmluZGV4IDFjMDg3MmMuLjhkMzY3OGYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvYnVuZGxlZF93c2RsL2phdmFlZS1zZS1zZXJ2aWNldW5pdC9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvYnVuZGxlZF93c2RsL2phdmFlZS1zZS1zZXJ2aWNldW5pdC9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCkBAIC0xOSwxNiArMTksMTYgQEAKIAogPCEtLSBqYmkueG1sIGZpbGUgZm9yIHRoZSBTT0FQIGJpbmRpbmcgZGVwbG95bWVudHMgYmluZGluZy4gLS0+CiA8amJpCi0gICAgdmVyc2lvbj0iMS4wIiAKLSAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIiAKLSAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKKyAgICB2ZXJzaW9uPSIxLjAiCisgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIC4vamJpLnhzZCI+CiAgIDxzZXJ2aWNlLWFzc2VtYmx5PgogICAgIDxpZGVudGlmaWNhdGlvbj4KICAgICAgIDxuYW1lPnJwYy1saXRlcmFsLWJ1bmRsZWQtd3NkbC1zZS1jb25zdW1lci1zZS1wcm92aWRlcjwvbmFtZT4KICAgICAgIDxkZXNjcmlwdGlvbj5DbGllbnQgd2ViIGNhbGN1bGF0b3Igc2VydmljZSBhc3NlbWJseTwvZGVzY3JpcHRpb24+CiAgICAgPC9pZGVudGlmaWNhdGlvbj4KLQk8c2VydmljZS11bml0PgorICAgIDxzZXJ2aWNlLXVuaXQ+CiAgICAgICA8aWRlbnRpZmljYXRpb24+CiAgICAgICAgICA8bmFtZT5ycGMtbGl0ZXJhbC1idW5kbGVkLXdzZGw8L25hbWU+CiAgICAgICAgICA8ZGVzY3JpcHRpb24+cHJvdmlkZXIgc2VydmljZTwvZGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2J1bmRsZWRfd3NkbC9qYXZhZWUtc2Utc2VydmljZXVuaXQvc3UvTUVUQS1JTkYvamJpLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvYnVuZGxlZF93c2RsL2phdmFlZS1zZS1zZXJ2aWNldW5pdC9zdS9NRVRBLUlORi9qYmkueG1sCmluZGV4IDlhMjAxYTAuLjllMTE0OTkgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvYnVuZGxlZF93c2RsL2phdmFlZS1zZS1zZXJ2aWNldW5pdC9zdS9NRVRBLUlORi9qYmkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvYnVuZGxlZF93c2RsL2phdmFlZS1zZS1zZXJ2aWNldW5pdC9zdS9NRVRBLUlORi9qYmkueG1sCkBAIC0xOCwxNCArMTgsMTQgQEAKIC0tPgogCiA8amJpIHZlcnNpb249IjEuMCIKLQkgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCi0JIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiIAotCSB4bWxuczpqYXZhZXNiPSJodHRwOi8vamF2YS5zdW4uY29tIgotCSB4bWxuczp0bnM9Imh0dHA6Ly9leGFtcGxlLndlYi5zZXJ2aWNlL0NhbGN1bGF0b3IiCi0JIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIGpiaS54c2QiPgotCTxzZXJ2aWNlcyBiaW5kaW5nLWNvbXBvbmVudD0iZmFsc2UiPgkJCi0JIDxwcm92aWRlcyBpbnRlcmZhY2UtbmFtZT0idG5zOkNhbGN1bGF0b3JTZXJ2aWNlSW50ZXJmYWNlIgorICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIgorICAgICB4bWxuczpqYXZhZXNiPSJodHRwOi8vamF2YS5zdW4uY29tIgorICAgICB4bWxuczp0bnM9Imh0dHA6Ly9leGFtcGxlLndlYi5zZXJ2aWNlL0NhbGN1bGF0b3IiCisgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIGpiaS54c2QiPgorICAgIDxzZXJ2aWNlcyBiaW5kaW5nLWNvbXBvbmVudD0iZmFsc2UiPgorICAgICA8cHJvdmlkZXMgaW50ZXJmYWNlLW5hbWU9InRuczpDYWxjdWxhdG9yU2VydmljZUludGVyZmFjZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS1uYW1lPSJ0bnM6Q2FsY3VsYXRvclNlcnZpY2UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50LW5hbWU9IkNhbGN1bGF0b3JQb3J0Ii8+Ci0JPC9zZXJ2aWNlcz4KKyAgICA8L3NlcnZpY2VzPgogPC9qYmk+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2J1bmRsZWRfd3NkbC93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9idW5kbGVkX3dzZGwvd2ViLnhtbAppbmRleCAwN2UxNDc3Li43OThjNjliIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2J1bmRsZWRfd3NkbC93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvYnVuZGxlZF93c2RsL3dlYi54bWwKQEAgLTE4LDMwICsxOCwzMCBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotCQkJaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CisgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQorICAgICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAKLQk8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIENhbGN1bGF0b3IgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV0FSPC9kaXNwbGF5LW5hbWU+CisgICAgPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBDYWxjdWxhdG9yIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgIDxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldBUjwvZGlzcGxheS1uYW1lPgogCi0JPHNlcnZsZXQ+Ci0JCTxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgQ2FsY3VsYXRvciBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JCTxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KLQkJPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+Ci0JCTxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkNhbGN1bGF0b3I8L3NlcnZsZXQtY2xhc3M+Ci0JCTxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgotCTwvc2VydmxldD4KKyAgICA8c2VydmxldD4KKyAgICAgICAgPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBDYWxjdWxhdG9yIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgorICAgICAgICA8c2VydmxldC1uYW1lPkNhbGN1bGF0b3I8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuQ2FsY3VsYXRvcjwvc2VydmxldC1jbGFzcz4KKyAgICAgICAgPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+CisgICAgPC9zZXJ2bGV0PgogCi0JPHNlcnZsZXQtbWFwcGluZz4KLQkJPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+Ci0JCTx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9DYWxjdWxhdG9yU2VydmljZTwvdXJsLXBhdHRlcm4+Ci0JPC9zZXJ2bGV0LW1hcHBpbmc+CisgICAgPHNlcnZsZXQtbWFwcGluZz4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9DYWxjdWxhdG9yU2VydmljZTwvdXJsLXBhdHRlcm4+CisgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiAKLQk8c2Vzc2lvbi1jb25maWc+Ci0JCTxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KLQk8L3Nlc3Npb24tY29uZmlnPgorICAgIDxzZXNzaW9uLWNvbmZpZz4KKyAgICAgICAgPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgorICAgIDwvc2Vzc2lvbi1jb25maWc+CiAKIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9idW5kbGVkX3dzZGwvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvYnVuZGxlZF93c2RsL3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggODljNmY2Mi4uZjkzNTU3NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9idW5kbGVkX3dzZGwvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2J1bmRsZWRfd3NkbC93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMCw3OSArMzAsNzkgQEAKIAogICAgICAgIEBXZWJTZXJ2aWNlUmVmKG5hbWU9InN1bi13ZWIuc2VydmljZXJlZi9jYWxjdWxhdG9yIikgQ2FsY3VsYXRvclNlcnZpY2Ugc2VydmljZTsKIAotICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkgCi0JCXRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CisgICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQorICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICAgICBkb1Bvc3QocmVxLCByZXNwKTsKICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQogICAgICAgICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewotCSAgICBQcmludFdyaXRlciBvdXQ9bnVsbDsKKyAgICAgICAgUHJpbnRXcml0ZXIgb3V0PW51bGw7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFNlcnZpY2UgaXMgOiIgKyBzZXJ2aWNlKTsKICAgICAgICAgICAgICAgICByZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKLSAgICAgICAgICAgIAlvdXQgPSByZXNwLmdldFdyaXRlcigpOworICAgICAgICAgICAgICAgIG91dCA9IHJlc3AuZ2V0V3JpdGVyKCk7CiAgICAgICAgICAgICAgICAgQ2FsY3VsYXRvciBwb3J0ID0gc2VydmljZS5nZXRDYWxjdWxhdG9yUG9ydCgpOwotCQkJCUluY29tZVRheERldGFpbHMgaXREZXRhaWxzID0gbmV3IEluY29tZVRheERldGFpbHMoKTsKLQkJCQlpdERldGFpbHMuc2V0Rmlyc3ROYW1lICggImJoYXZhbmkiKTsKLQkJCQlpdERldGFpbHMuc2V0TGFzdE5hbWUgKCJzIik7Ci0JCQkJaXREZXRhaWxzLnNldEFubnVhbEluY29tZSAoIDQwMDAwMCk7Ci0JCQkJaXREZXRhaWxzLnNldFN0YXR1cyAoInNhbGFyaWVkIik7CisgICAgICAgICAgICAgICAgSW5jb21lVGF4RGV0YWlscyBpdERldGFpbHMgPSBuZXcgSW5jb21lVGF4RGV0YWlscygpOworICAgICAgICAgICAgICAgIGl0RGV0YWlscy5zZXRGaXJzdE5hbWUgKCAiYmhhdmFuaSIpOworICAgICAgICAgICAgICAgIGl0RGV0YWlscy5zZXRMYXN0TmFtZSAoInMiKTsKKyAgICAgICAgICAgICAgICBpdERldGFpbHMuc2V0QW5udWFsSW5jb21lICggNDAwMDAwKTsKKyAgICAgICAgICAgICAgICBpdERldGFpbHMuc2V0U3RhdHVzICgic2FsYXJpZWQiKTsKIAotCQkJCWxvbmcgc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCQkJbG9uZyByZXQgPSAwOwotCQkJCS8vIE1ha2UgMTAwIGNhbGxzIHRvIHNlZSBob3cgbXVjaCB0aW1lIGl0IHRha2VzLgotCQkJCS8vZm9yKGludCBpPTA7IGk8MTAwMDsgaSsrKSB7Ci0JCQkJCXJldCA9IHBvcnQuY2FsY3VsYXRlSW5jb21lVGF4KGl0RGV0YWlscwotCQkJCQkJCSwgaXREZXRhaWxzCi0JCQkJCQkJLCBpdERldGFpbHMKLQkJCQkJCQksIGl0RGV0YWlscwotCQkJCQkJCSwgaXREZXRhaWxzCi0JCQkJCQkJLCBpdERldGFpbHMKLQkJCQkJCQksIGl0RGV0YWlscwotCQkJCQkJCSwgaXREZXRhaWxzCi0JCQkJCQkJLCBpdERldGFpbHMKLQkJCQkJCQksIGl0RGV0YWlscwotCQkJCQkJCSk7Ci0JCQkJLy99Ci0JCQkJbG9uZyB0aW1lVGFrZW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIHN0YXJ0VGltZTsKLQkJCQkKKyAgICAgICAgICAgICAgICBsb25nIHN0YXJ0VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgICAgICAgICAgICAgIGxvbmcgcmV0ID0gMDsKKyAgICAgICAgICAgICAgICAvLyBNYWtlIDEwMCBjYWxscyB0byBzZWUgaG93IG11Y2ggdGltZSBpdCB0YWtlcy4KKyAgICAgICAgICAgICAgICAvL2ZvcihpbnQgaT0wOyBpPDEwMDA7IGkrKykgeworICAgICAgICAgICAgICAgICAgICByZXQgPSBwb3J0LmNhbGN1bGF0ZUluY29tZVRheChpdERldGFpbHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIGl0RGV0YWlscworICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgaXREZXRhaWxzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBpdERldGFpbHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIGl0RGV0YWlscworICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgaXREZXRhaWxzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBpdERldGFpbHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIGl0RGV0YWlscworICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgaXREZXRhaWxzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBpdERldGFpbHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIC8vfQorICAgICAgICAgICAgICAgIGxvbmcgdGltZVRha2VuID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBzdGFydFRpbWU7CisKICAgICAgICAgICAgICAgICAvL2ludCByZXQgPSBwb3J0LmFkZCgxLCAyKTsKLQkJcHJpbnRTdWNjZXNzKCJZb3VyIGluY29tZSB0YXggaXMgOiBScyAiLCBvdXQscmV0LCB0aW1lVGFrZW4pOwotCQlzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJaW50IGsgPSBwb3J0LmFkZCg1MDUsIDUwKTsKLQkJCQl0aW1lVGFrZW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIHN0YXJ0VGltZTsKLQkJcHJpbnRTdWNjZXNzKCJTdW0gb2YgNTA1IGFuZCA1MCBpcyA6ICIsIG91dCxrLCB0aW1lVGFrZW4pOworICAgICAgICBwcmludFN1Y2Nlc3MoIllvdXIgaW5jb21lIHRheCBpcyA6IFJzICIsIG91dCxyZXQsIHRpbWVUYWtlbik7CisgICAgICAgIHN0YXJ0VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgICAgICBpbnQgayA9IHBvcnQuYWRkKDUwNSwgNTApOworICAgICAgICAgICAgICAgIHRpbWVUYWtlbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gc3RhcnRUaW1lOworICAgICAgICBwcmludFN1Y2Nlc3MoIlN1bSBvZiA1MDUgYW5kIDUwIGlzIDogIiwgb3V0LGssIHRpbWVUYWtlbik7CiAKLQkJc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCVN0cmluZyBoaSA9IHBvcnQuc2F5SGkoKTsKLQkJCQl0aW1lVGFrZW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIHN0YXJ0VGltZTsKLQkJcHJpbnRTdWNjZXNzKCJPdXRwdXQgZnJvbSB3ZWJzZXJ2aWNlIDogIiwgb3V0LCBoaSwgdGltZVRha2VuKTsKKyAgICAgICAgc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgICAgIFN0cmluZyBoaSA9IHBvcnQuc2F5SGkoKTsKKyAgICAgICAgICAgICAgICB0aW1lVGFrZW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIHN0YXJ0VGltZTsKKyAgICAgICAgcHJpbnRTdWNjZXNzKCJPdXRwdXQgZnJvbSB3ZWJzZXJ2aWNlIDogIiwgb3V0LCBoaSwgdGltZVRha2VuKTsKIAotCQlzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJcG9ydC5wcmludEhpKCk7Ci0JCQkJdGltZVRha2VuID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBzdGFydFRpbWU7Ci0JCXByaW50U3VjY2VzcygiU1VDQ0VTUyA6ICIsIG91dCwgIldlYnNlcnZpY2UgaGFzIHN1Y2Nlc3NmdWxseSBwcmludGVkIGhpIGluIHNlcnZlci5sb2ciLCB0aW1lVGFrZW4pOworICAgICAgICBzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICAgICAgcG9ydC5wcmludEhpKCk7CisgICAgICAgICAgICAgICAgdGltZVRha2VuID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBzdGFydFRpbWU7CisgICAgICAgIHByaW50U3VjY2VzcygiU1VDQ0VTUyA6ICIsIG91dCwgIldlYnNlcnZpY2UgaGFzIHN1Y2Nlc3NmdWxseSBwcmludGVkIGhpIGluIHNlcnZlci5sb2ciLCB0aW1lVGFrZW4pOwogCi0JCXN0YXJ0VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQlwb3J0LnByaW50SGlUb01lKCJKYXZhRUVTZXJ2aWNlRW5naW5lIik7Ci0JCQkJdGltZVRha2VuID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBzdGFydFRpbWU7Ci0JCXByaW50U3VjY2VzcygiU1VDQ0VTUyA6ICIsIG91dCwgIldlYnNlcnZpY2UgaGFzIHN1Y2Nlc3NmdWxseSBwcmludGVkIGhpIHRvIG1lIGluIHNlcnZlci5sb2ciLCB0aW1lVGFrZW4pOworICAgICAgICBzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICAgICAgcG9ydC5wcmludEhpVG9NZSgiSmF2YUVFU2VydmljZUVuZ2luZSIpOworICAgICAgICAgICAgICAgIHRpbWVUYWtlbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gc3RhcnRUaW1lOworICAgICAgICBwcmludFN1Y2Nlc3MoIlNVQ0NFU1MgOiAiLCBvdXQsICJXZWJzZXJ2aWNlIGhhcyBzdWNjZXNzZnVsbHkgcHJpbnRlZCBoaSB0byBtZSBpbiBzZXJ2ZXIubG9nIiwgdGltZVRha2VuKTsKIAogICAgICAgICAgICAgfSBjYXRjaChqYXZhLmxhbmcuRXhjZXB0aW9uIGUpIHsKLQkJLy9lLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICAJcHJpbnRGYWlsdXJlKG91dCwgZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAvL2UucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICBwcmludEZhaWx1cmUob3V0LCBlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICB9IGZpbmFsbHkgewotCQlpZihvdXQgIT0gbnVsbCkgeworICAgICAgICBpZihvdXQgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICBvdXQuZmx1c2goKTsKICAgICAgICAgICAgICAgICAgICAgb3V0LmNsb3NlKCk7Ci0JCX0KLQkgICAgfQorICAgICAgICB9CisgICAgICAgIH0KICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBwcmludEZhaWx1cmUoUHJpbnRXcml0ZXIgb3V0LCBTdHJpbmcgZXJyTXNnKSB7Ci0JCWlmKG91dCA9PSBudWxsKSByZXR1cm47Ci0JCW91dC5wcmludGxuKCI8aHRtbD4iKTsKKyAgICAgICAgaWYob3V0ID09IG51bGwpIHJldHVybjsKKyAgICAgICAgb3V0LnByaW50bG4oIjxodG1sPiIpOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aGVhZD4iKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPHRpdGxlPlRlc3RTZXJ2bGV0PC90aXRsZT4iKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9oZWFkPiIpOwpAQCAtMTE1LDE0ICsxMTUsMTQgQEAKICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBwcmludFN1Y2Nlc3MoU3RyaW5nIG1lc3NhZ2UsIFByaW50V3JpdGVyIG91dCwgbG9uZyByZXN1bHQsIGxvbmcgdGltZVRha2VuKSB7Ci0JCWlmKG91dCA9PSBudWxsKSByZXR1cm47CisgICAgICAgIGlmKG91dCA9PSBudWxsKSByZXR1cm47CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIlxuXG4iKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbihtZXNzYWdlICsgcmVzdWx0KTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiVGltZSB0YWtlbiB0byBpbnZva2UgdGhlIGVuZHBvaW50IG9wZXJhdGlvbiBpcyAgOiAgIiArIHRpbWVUYWtlbiArICIgbWlsbGlzZWNvbmRzLiIpOwogICAgICAgIH0KIAogICAgICAgIHB1YmxpYyB2b2lkIHByaW50U3VjY2VzcyhTdHJpbmcgbWVzc2FnZSwgUHJpbnRXcml0ZXIgb3V0LCBTdHJpbmcgcmVzdWx0LCBsb25nIHRpbWVUYWtlbikgewotCQlpZihvdXQgPT0gbnVsbCkgcmV0dXJuOworICAgICAgICBpZihvdXQgPT0gbnVsbCkgcmV0dXJuOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJcblxuIik7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4obWVzc2FnZSArIHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIlRpbWUgdGFrZW4gdG8gaW52b2tlIHRoZSBlbmRwb2ludCBvcGVyYXRpb24gaXMgIDogICIgKyB0aW1lVGFrZW4gKyAiIG1pbGxpc2Vjb25kcy4iKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvZ2VuZXJhdGVkX3dzZGwvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvZ2VuZXJhdGVkX3dzZGwvYnVpbGQucHJvcGVydGllcwppbmRleCAxOThjNTQ5Li5jMmI2NWRlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2dlbmVyYXRlZF93c2RsL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9nZW5lcmF0ZWRfd3NkbC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InJwYy1saXRlcmFsLWdlbmVyYXRlZC13c2RsIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSIuL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9Ii4vc3VuLXdlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvZ2VuZXJhdGVkX3dzZGwvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9nZW5lcmF0ZWRfd3NkbC9idWlsZC54bWwKaW5kZXggMGM2ODJiOC4uM2ZhNTQwNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9nZW5lcmF0ZWRfd3NkbC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9nZW5lcmF0ZWRfd3NkbC9idWlsZC54bWwKQEAgLTM4LDkgKzM4LDkgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+Ci0JICA8ZGVsZXRlIGZpbGU9IiR7amJpLWNvbXBvbmVudC1zdS1kaXJ9L2Fzc2VtYmx5LyR7YXBwbmFtZX0td2ViLndhciIvPgotCSAgPGRlbGV0ZSBmaWxlPSIke2Jhc2VkaXJ9L1JlcFJ1bkNvbmYudHh0Ii8+Ci0JICA8ZGVsZXRlIGRpcj0iJHtiYXNlZGlyfS9jb21tb246ZW5kcG9pbnQiLz4KKyAgICAgIDxkZWxldGUgZmlsZT0iJHtqYmktY29tcG9uZW50LXN1LWRpcn0vYXNzZW1ibHkvJHthcHBuYW1lfS13ZWIud2FyIi8+CisgICAgICA8ZGVsZXRlIGZpbGU9IiR7YmFzZWRpcn0vUmVwUnVuQ29uZi50eHQiLz4KKyAgICAgIDxkZWxldGUgZGlyPSIke2Jhc2VkaXJ9L2NvbW1vbjplbmRwb2ludCIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iY2xlYW4sIGFzc2VtYmxlLXdlYiwgZGVwbG95LWFwcCxhc3NlbWJsZS1jbGllbnQsZGVwbG95LWNsaWVudCIvPgpAQCAtNTIsOCArNTIsOCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZS13ZWIiIGRlcGVuZHM9ImluaXQtY29tbW9uLCBjb21waWxlIj4KLQkgIDxlY2hvIG1lc3NhZ2U9ImNsYXNzZXMgZGlyID0gJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KLQkgIDxlY2hvIG1lc3NhZ2U9ImFzc2VtYmxlLmRpciA9ICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIiLz4KKyAgICAgIDxlY2hvIG1lc3NhZ2U9ImNsYXNzZXMgZGlyID0gJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KKyAgICAgIDxlY2hvIG1lc3NhZ2U9ImFzc2VtYmxlLmRpciA9ICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIiLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGtnLXdhciI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJ3YXIuY2xhc3NlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJ3YXIuZmlsZSIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIiLz4KQEAgLTY5LDcgKzY5LDcgQEAKICAgICAgICAgICAgICAgIHZhbHVlPSIta2VlcCAtZCAke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi9jbGFzc2VzIGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9ycGMtbGl0ZXJhbC1nZW5lcmF0ZWQtd3NkbC93ZWJzZXJ2aWNlL0NhbGN1bGF0b3JTZXJ2aWNlP1dTREwiLz4KICAgICA8L2FudGNhbGw+CiAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi9jbGFzc2VzIgotICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9qMmVlLmphciIgCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2oyZWUuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9ImNvbW1vbi8qKiwgd2ViY2xpZW50LyoqIi8+CiAgICAgICA8Y29weSBmaWxlPSIuL2NsaWVudC13ZWIueG1sIiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL3dlYi54bWwiLz4KICAgICAgIDxjb3B5IGZpbGU9Ii4vY2xpZW50LXN1bi13ZWIueG1sIiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL3N1bi13ZWIueG1sIi8+CkBAIC0xMjUsMTEgKzEyNSwxMSBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNsaWVudCIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWFwcCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW50ZXN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KLSAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIgCi0gICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiAKKyAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iY29tbW9uLyoqLCBjbGllbnQvKioiLz4KICAgICAgIDx1bmphciBzcmM9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiBkZXN0PSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iY2xpZW50LlRlc3RDbGllbnQiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9nZW5lcmF0ZWRfd3NkbC9jbGllbnQtd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvZ2VuZXJhdGVkX3dzZGwvY2xpZW50LXdlYi54bWwKaW5kZXggZWViNzMwZC4uNzk1YjA1MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9nZW5lcmF0ZWRfd3NkbC9jbGllbnQtd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2dlbmVyYXRlZF93c2RsL2NsaWVudC13ZWIueG1sCkBAIC0yMCw3ICsyMCw3IEBACiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgCisgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAgIDxkZXNjcmlwdGlvbj5BIHRlc3QgYXBwbGljYXRpb248L2Rlc2NyaXB0aW9uPgogICA8ZGlzcGxheS1uYW1lPldlYlRpZXI8L2Rpc3BsYXktbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvZ2VuZXJhdGVkX3dzZGwvY2xpZW50L1Rlc3RDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvZ2VuZXJhdGVkX3dzZGwvY2xpZW50L1Rlc3RDbGllbnQuamF2YQppbmRleCBhOTRjMDhlLi5iMzFiNzFlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2dlbmVyYXRlZF93c2RsL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9nZW5lcmF0ZWRfd3NkbC9jbGllbnQvVGVzdENsaWVudC5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7CiAKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdElkID0gImpiaS1zZXJ2aWNlZW5naW5lL3JwYy1saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2dlbmVyYXRlZF93c2RsIjsKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdElkID0gImpiaS1zZXJ2aWNlZW5naW5lL3JwYy1saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2dlbmVyYXRlZF93c2RsIjsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24odGVzdElkKTsKQEAgLTQ1LDggKzQ1LDggQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludCBjb2RlID0gaW52b2tlU2VydmxldCh1cmwpOwogICAgICAgICAgICAgcmVwb3J0KGNvZGUpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIGZhaWwoKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTU3LDE1ICs1NywxNSBAQAogICAgICAgICBpbnQgY29kZSA9IGMxLmdldFJlc3BvbnNlQ29kZSgpOwogICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IGMxLmdldElucHV0U3RyZWFtKCk7CiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGlucHV0ID0gbmV3IEJ1ZmZlcmVkUmVhZGVyIChuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsKLQkJU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKyAgICAgICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOwotCQlib29sZWFuIGZvdW5kID0gZmFsc2U7CisgICAgICAgIGJvb2xlYW4gZm91bmQgPSBmYWxzZTsKICAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewotCQkJaWYobGluZS5pbmRleE9mKCJTVUNDRVNTIikgIT0gLTEpIGZvdW5kID0gdHJ1ZTsJCi0JCQlidWZmZXIuYXBwZW5kKGxpbmUgKyAiXG4iKTsKKyAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiU1VDQ0VTUyIpICE9IC0xKSBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICBidWZmZXIuYXBwZW5kKGxpbmUgKyAiXG4iKTsKICAgICAgICAgfQogICAgICAgICBsb2coYnVmZmVyLnRvU3RyaW5nKCkpOwotCSAgICBpZighZm91bmQpIHJldHVybiA1MDU7CQorICAgICAgICBpZighZm91bmQpIHJldHVybiA1MDU7CiAgICAgICAgIHJldHVybiBjb2RlOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9nZW5lcmF0ZWRfd3NkbC9jb21tb24vSW5jb21lVGF4RGV0YWlscy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9nZW5lcmF0ZWRfd3NkbC9jb21tb24vSW5jb21lVGF4RGV0YWlscy5qYXZhCmluZGV4IDU3YjAwZTguLjM1MGIxNmYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvZ2VuZXJhdGVkX3dzZGwvY29tbW9uL0luY29tZVRheERldGFpbHMuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2dlbmVyYXRlZF93c2RsL2NvbW1vbi9JbmNvbWVUYXhEZXRhaWxzLmphdmEKQEAgLTE3LDEwICsxNywxMCBAQAogcGFja2FnZSBjb21tb247CiAKIHB1YmxpYyBjbGFzcyBJbmNvbWVUYXhEZXRhaWxzIHsKLQlwdWJsaWMgU3RyaW5nIGZpcnN0TmFtZTsKLQlwdWJsaWMgU3RyaW5nIGxhc3ROYW1lOwotCXB1YmxpYyBTdHJpbmcgc3RhdHVzOyAvLyBzYWxhcmllZCwgc2VsZi1lbXBsb3llZCwgc3R1ZGVudC4KLQlwdWJsaWMgbG9uZyBhbm51YWxJbmNvbWU7CisgICAgcHVibGljIFN0cmluZyBmaXJzdE5hbWU7CisgICAgcHVibGljIFN0cmluZyBsYXN0TmFtZTsKKyAgICBwdWJsaWMgU3RyaW5nIHN0YXR1czsgLy8gc2FsYXJpZWQsIHNlbGYtZW1wbG95ZWQsIHN0dWRlbnQuCisgICAgcHVibGljIGxvbmcgYW5udWFsSW5jb21lOwogfQogCiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvZ2VuZXJhdGVkX3dzZGwvZW5kcG9pbnQvQ2FsY3VsYXRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9nZW5lcmF0ZWRfd3NkbC9lbmRwb2ludC9DYWxjdWxhdG9yLmphdmEKaW5kZXggMWM0MTRjYS4uZTBmMmE0NCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9nZW5lcmF0ZWRfd3NkbC9lbmRwb2ludC9DYWxjdWxhdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9nZW5lcmF0ZWRfd3NkbC9lbmRwb2ludC9DYWxjdWxhdG9yLmphdmEKQEAgLTMxLDQ5ICszMSw0OSBAQAogQFNPQVBCaW5kaW5nKHN0eWxlPVNPQVBCaW5kaW5nLlN0eWxlLlJQQywgdXNlPVNPQVBCaW5kaW5nLlVzZS5MSVRFUkFMKQogcHVibGljIGNsYXNzIENhbGN1bGF0b3IgewogCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgdGVzdE5hbWUgPSAiXG5UZXN0IDo6IHJwYy1saXRlcmFsLWdlbmVyYXRlZC13c2RsIDogIjsKLQlwdWJsaWMgQ2FsY3VsYXRvcigpIHt9CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgdGVzdE5hbWUgPSAiXG5UZXN0IDo6IHJwYy1saXRlcmFsLWdlbmVyYXRlZC13c2RsIDogIjsKKyAgICBwdWJsaWMgQ2FsY3VsYXRvcigpIHt9CiAKLQlAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9ImFkZCIsIGFjdGlvbj0idXJuOkFkZCIpCi0JcHVibGljIGludCBhZGQoaW50IGksIGludCBqKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9ImFkZCIsIGFjdGlvbj0idXJuOkFkZCIpCisgICAgcHVibGljIGludCBhZGQoaW50IGksIGludCBqKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgICAgICAgICBpbnQgayA9IGkgK2ogOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0ZXN0TmFtZSArIGkgKyAiKyIgKyBqICsiID0gIiArIGspOwotCQkvL3Rocm93IG5ldyBqYXZhLmxhbmcuRXhjZXB0aW9uKCJUaGlzIGlzIG15IGV4Y2VwdGlvbiIpOyAKLQkJcmV0dXJuIGs7Ci0JfQorICAgICAgICAvL3Rocm93IG5ldyBqYXZhLmxhbmcuRXhjZXB0aW9uKCJUaGlzIGlzIG15IGV4Y2VwdGlvbiIpOworICAgICAgICByZXR1cm4gazsKKyAgICB9CiAKLQlAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9ImNhbGN1bGF0ZUluY29tZVRheCIsIGFjdGlvbj0idXJuOkNhbGN1bGF0ZUluY29tZVRheCIpCi0JcHVibGljIGxvbmcgY2FsY3VsYXRlSW5jb21lVGF4KEluY29tZVRheERldGFpbHMgZGV0YWlscwotCQkJICwgSW5jb21lVGF4RGV0YWlscyBkZXRhaWxzMgotCQkJICwgSW5jb21lVGF4RGV0YWlscyBkZXRhaWxzMwotCQkJICwgSW5jb21lVGF4RGV0YWlscyBkZXRhaWxzNAotCQkJICwgSW5jb21lVGF4RGV0YWlscyBkZXRhaWxzNQotCQkJICwgSW5jb21lVGF4RGV0YWlscyBkZXRhaWxzNgotCQkJICwgSW5jb21lVGF4RGV0YWlscyBkZXRhaWxzNwotCQkJICwgSW5jb21lVGF4RGV0YWlscyBkZXRhaWxzOAotCQkJICwgSW5jb21lVGF4RGV0YWlscyBkZXRhaWxzOQotCQkJICwgSW5jb21lVGF4RGV0YWlscyBkZXRhaWxzMTAKLQkJCSkgewotCQlsb25nIGluY29tZSA9IGRldGFpbHMuYW5udWFsSW5jb21lOwotCQlTeXN0ZW0ub3V0LnByaW50bG4odGVzdE5hbWUgKyAiQW5udWFsIGluY29tZSA9ICIgKyBpbmNvbWUpOwotCQlsb25nIHRheFJhdGUgPSAzMDsgLy8gMzAlCi0JCWxvbmcgdGF4VG9CZVBhaWQgPSBpbmNvbWUgLyB0YXhSYXRlOwotCQlTeXN0ZW0ub3V0LnByaW50bG4odGVzdE5hbWUgKyJUYXggdG8gYmUgcGFpZCA9ICIgKyB0YXhUb0JlUGFpZCk7Ci0JCXJldHVybiB0YXhUb0JlUGFpZDsKLQl9CisgICAgQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJjYWxjdWxhdGVJbmNvbWVUYXgiLCBhY3Rpb249InVybjpDYWxjdWxhdGVJbmNvbWVUYXgiKQorICAgIHB1YmxpYyBsb25nIGNhbGN1bGF0ZUluY29tZVRheChJbmNvbWVUYXhEZXRhaWxzIGRldGFpbHMKKyAgICAgICAgICAgICAsIEluY29tZVRheERldGFpbHMgZGV0YWlsczIKKyAgICAgICAgICAgICAsIEluY29tZVRheERldGFpbHMgZGV0YWlsczMKKyAgICAgICAgICAgICAsIEluY29tZVRheERldGFpbHMgZGV0YWlsczQKKyAgICAgICAgICAgICAsIEluY29tZVRheERldGFpbHMgZGV0YWlsczUKKyAgICAgICAgICAgICAsIEluY29tZVRheERldGFpbHMgZGV0YWlsczYKKyAgICAgICAgICAgICAsIEluY29tZVRheERldGFpbHMgZGV0YWlsczcKKyAgICAgICAgICAgICAsIEluY29tZVRheERldGFpbHMgZGV0YWlsczgKKyAgICAgICAgICAgICAsIEluY29tZVRheERldGFpbHMgZGV0YWlsczkKKyAgICAgICAgICAgICAsIEluY29tZVRheERldGFpbHMgZGV0YWlsczEwCisgICAgICAgICAgICApIHsKKyAgICAgICAgbG9uZyBpbmNvbWUgPSBkZXRhaWxzLmFubnVhbEluY29tZTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHRlc3ROYW1lICsgIkFubnVhbCBpbmNvbWUgPSAiICsgaW5jb21lKTsKKyAgICAgICAgbG9uZyB0YXhSYXRlID0gMzA7IC8vIDMwJQorICAgICAgICBsb25nIHRheFRvQmVQYWlkID0gaW5jb21lIC8gdGF4UmF0ZTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHRlc3ROYW1lICsiVGF4IHRvIGJlIHBhaWQgPSAiICsgdGF4VG9CZVBhaWQpOworICAgICAgICByZXR1cm4gdGF4VG9CZVBhaWQ7CisgICAgfQogCi0JQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJzYXlIaSIsIGFjdGlvbj0idXJuOlNheUhpIikKLQlwdWJsaWMgU3RyaW5nIHNheUhpKCkgewotCQlyZXR1cm4gdGVzdE5hbWUgKyAiSGkgZnJvbSBzYXlIaSgpIjsKLQl9CisgICAgQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJzYXlIaSIsIGFjdGlvbj0idXJuOlNheUhpIikKKyAgICBwdWJsaWMgU3RyaW5nIHNheUhpKCkgeworICAgICAgICByZXR1cm4gdGVzdE5hbWUgKyAiSGkgZnJvbSBzYXlIaSgpIjsKKyAgICB9CiAKLQlAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9InByaW50SGkiLCBhY3Rpb249InVybjpQcmludEhpIikKLQlwdWJsaWMgdm9pZCBwcmludEhpKCkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4odGVzdE5hbWUgKyJIaSBmcm9tIHByaW50SGkoKSIpOwotCX0KKyAgICBAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9InByaW50SGkiLCBhY3Rpb249InVybjpQcmludEhpIikKKyAgICBwdWJsaWMgdm9pZCBwcmludEhpKCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4odGVzdE5hbWUgKyJIaSBmcm9tIHByaW50SGkoKSIpOworICAgIH0KIAotCUBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0icHJpbnRIaVRvTWUiLCBhY3Rpb249InVybjpQcmludEhpVG9NZSIpCi0JcHVibGljIHZvaWQgcHJpbnRIaVRvTWUoU3RyaW5nIG5hbWUpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKHRlc3ROYW1lICsiSGkgdG8gIiArIG5hbWUgKyAiIGZyb20gcHJpbnRIaVRvTWUoKSIpOwotCX0KKyAgICBAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9InByaW50SGlUb01lIiwgYWN0aW9uPSJ1cm46UHJpbnRIaVRvTWUiKQorICAgIHB1YmxpYyB2b2lkIHByaW50SGlUb01lKFN0cmluZyBuYW1lKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih0ZXN0TmFtZSArIkhpIHRvICIgKyBuYW1lICsgIiBmcm9tIHByaW50SGlUb01lKCkiKTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2dlbmVyYXRlZF93c2RsL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2dlbmVyYXRlZF93c2RsL3dlYi54bWwKaW5kZXggMDdlMTQ3Ny4uNzk4YzY5YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9nZW5lcmF0ZWRfd3NkbC93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvZ2VuZXJhdGVkX3dzZGwvd2ViLnhtbApAQCAtMTgsMzAgKzE4LDMwIEBACiAtLT4KIAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCi0JCQlodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KKyAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCisgICAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KIAotCTxkZXNjcmlwdGlvbj5XZWJUaWVyIGZvciB0aGUgQ2FsY3VsYXRvciBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQk8ZGlzcGxheS1uYW1lPkNhbGN1bGF0b3JXQVI8L2Rpc3BsYXktbmFtZT4KKyAgICA8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIENhbGN1bGF0b3IgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV0FSPC9kaXNwbGF5LW5hbWU+CiAKLQk8c2VydmxldD4KLQkJPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBDYWxjdWxhdG9yIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQkJPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgotCQk8c2VydmxldC1uYW1lPkNhbGN1bGF0b3I8L3NlcnZsZXQtbmFtZT4KLQkJPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuQ2FsY3VsYXRvcjwvc2VydmxldC1jbGFzcz4KLQkJPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+Ci0JPC9zZXJ2bGV0PgorICAgIDxzZXJ2bGV0PgorICAgICAgICA8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIENhbGN1bGF0b3IgV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgICAgICA8ZGlzcGxheS1uYW1lPkNhbGN1bGF0b3JXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+Q2FsY3VsYXRvcjwvc2VydmxldC1uYW1lPgorICAgICAgICA8c2VydmxldC1jbGFzcz5lbmRwb2ludC5DYWxjdWxhdG9yPC9zZXJ2bGV0LWNsYXNzPgorICAgICAgICA8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KKyAgICA8L3NlcnZsZXQ+CiAKLQk8c2VydmxldC1tYXBwaW5nPgotCQk8c2VydmxldC1uYW1lPkNhbGN1bGF0b3I8L3NlcnZsZXQtbmFtZT4KLQkJPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL0NhbGN1bGF0b3JTZXJ2aWNlPC91cmwtcGF0dGVybj4KLQk8L3NlcnZsZXQtbWFwcGluZz4KKyAgICA8c2VydmxldC1tYXBwaW5nPgorICAgICAgICA8c2VydmxldC1uYW1lPkNhbGN1bGF0b3I8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL0NhbGN1bGF0b3JTZXJ2aWNlPC91cmwtcGF0dGVybj4KKyAgICA8L3NlcnZsZXQtbWFwcGluZz4KIAotCTxzZXNzaW9uLWNvbmZpZz4KLQkJPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgotCTwvc2Vzc2lvbi1jb25maWc+CisgICAgPHNlc3Npb24tY29uZmlnPgorICAgICAgICA8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+CisgICAgPC9zZXNzaW9uLWNvbmZpZz4KIAogPC93ZWItYXBwPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2dlbmVyYXRlZF93c2RsL3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3JwY19saXRlcmFsL3NlX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2dlbmVyYXRlZF93c2RsL3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggODljNmY2Mi4uZjkzNTU3NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9ycGNfbGl0ZXJhbC9zZV9jb25zdW1lcl9zZV9wcm92aWRlci9nZW5lcmF0ZWRfd3NkbC93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvcnBjX2xpdGVyYWwvc2VfY29uc3VtZXJfc2VfcHJvdmlkZXIvZ2VuZXJhdGVkX3dzZGwvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzAsNzkgKzMwLDc5IEBACiAKICAgICAgICBAV2ViU2VydmljZVJlZihuYW1lPSJzdW4td2ViLnNlcnZpY2VyZWYvY2FsY3VsYXRvciIpIENhbGN1bGF0b3JTZXJ2aWNlIHNlcnZpY2U7CiAKLSAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApIAotCQl0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24geworICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkKKyAgICAgICAgdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgICAgZG9Qb3N0KHJlcSwgcmVzcCk7CiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkKICAgICAgICAgICAgICAgdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKLQkgICAgUHJpbnRXcml0ZXIgb3V0PW51bGw7CisgICAgICAgIFByaW50V3JpdGVyIG91dD1udWxsOwogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBTZXJ2aWNlIGlzIDoiICsgc2VydmljZSk7CiAgICAgICAgICAgICAgICAgcmVzcC5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7Ci0gICAgICAgICAgICAJb3V0ID0gcmVzcC5nZXRXcml0ZXIoKTsKKyAgICAgICAgICAgICAgICBvdXQgPSByZXNwLmdldFdyaXRlcigpOwogICAgICAgICAgICAgICAgIENhbGN1bGF0b3IgcG9ydCA9IHNlcnZpY2UuZ2V0Q2FsY3VsYXRvclBvcnQoKTsKLQkJCQlJbmNvbWVUYXhEZXRhaWxzIGl0RGV0YWlscyA9IG5ldyBJbmNvbWVUYXhEZXRhaWxzKCk7Ci0JCQkJaXREZXRhaWxzLnNldEZpcnN0TmFtZSAoICJiaGF2YW5pIik7Ci0JCQkJaXREZXRhaWxzLnNldExhc3ROYW1lICgicyIpOwotCQkJCWl0RGV0YWlscy5zZXRBbm51YWxJbmNvbWUgKCA0MDAwMDApOwotCQkJCWl0RGV0YWlscy5zZXRTdGF0dXMgKCJzYWxhcmllZCIpOworICAgICAgICAgICAgICAgIEluY29tZVRheERldGFpbHMgaXREZXRhaWxzID0gbmV3IEluY29tZVRheERldGFpbHMoKTsKKyAgICAgICAgICAgICAgICBpdERldGFpbHMuc2V0Rmlyc3ROYW1lICggImJoYXZhbmkiKTsKKyAgICAgICAgICAgICAgICBpdERldGFpbHMuc2V0TGFzdE5hbWUgKCJzIik7CisgICAgICAgICAgICAgICAgaXREZXRhaWxzLnNldEFubnVhbEluY29tZSAoIDQwMDAwMCk7CisgICAgICAgICAgICAgICAgaXREZXRhaWxzLnNldFN0YXR1cyAoInNhbGFyaWVkIik7CiAKLQkJCQlsb25nIHN0YXJ0VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQkJCWxvbmcgcmV0ID0gMDsKLQkJCQkvLyBNYWtlIDEwMCBjYWxscyB0byBzZWUgaG93IG11Y2ggdGltZSBpdCB0YWtlcy4KLQkJCQkvL2ZvcihpbnQgaT0wOyBpPDEwMDA7IGkrKykgewotCQkJCQlyZXQgPSBwb3J0LmNhbGN1bGF0ZUluY29tZVRheChpdERldGFpbHMKLQkJCQkJCQksIGl0RGV0YWlscwotCQkJCQkJCSwgaXREZXRhaWxzCi0JCQkJCQkJLCBpdERldGFpbHMKLQkJCQkJCQksIGl0RGV0YWlscwotCQkJCQkJCSwgaXREZXRhaWxzCi0JCQkJCQkJLCBpdERldGFpbHMKLQkJCQkJCQksIGl0RGV0YWlscwotCQkJCQkJCSwgaXREZXRhaWxzCi0JCQkJCQkJLCBpdERldGFpbHMKLQkJCQkJCQkpOwotCQkJCS8vfQotCQkJCWxvbmcgdGltZVRha2VuID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBzdGFydFRpbWU7Ci0JCQkJCisgICAgICAgICAgICAgICAgbG9uZyBzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICAgICAgICAgICAgICBsb25nIHJldCA9IDA7CisgICAgICAgICAgICAgICAgLy8gTWFrZSAxMDAgY2FsbHMgdG8gc2VlIGhvdyBtdWNoIHRpbWUgaXQgdGFrZXMuCisgICAgICAgICAgICAgICAgLy9mb3IoaW50IGk9MDsgaTwxMDAwOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gcG9ydC5jYWxjdWxhdGVJbmNvbWVUYXgoaXREZXRhaWxzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBpdERldGFpbHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIGl0RGV0YWlscworICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgaXREZXRhaWxzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBpdERldGFpbHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIGl0RGV0YWlscworICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgaXREZXRhaWxzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBpdERldGFpbHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIGl0RGV0YWlscworICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgaXREZXRhaWxzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAvL30KKyAgICAgICAgICAgICAgICBsb25nIHRpbWVUYWtlbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gc3RhcnRUaW1lOworCiAgICAgICAgICAgICAgICAgLy9pbnQgcmV0ID0gcG9ydC5hZGQoMSwgMik7Ci0JCXByaW50U3VjY2VzcygiWW91ciBpbmNvbWUgdGF4IGlzIDogUnMgIiwgb3V0LHJldCwgdGltZVRha2VuKTsKLQkJc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCWludCBrID0gcG9ydC5hZGQoNTA1LCA1MCk7Ci0JCQkJdGltZVRha2VuID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBzdGFydFRpbWU7Ci0JCXByaW50U3VjY2VzcygiU3VtIG9mIDUwNSBhbmQgNTAgaXMgOiAiLCBvdXQsaywgdGltZVRha2VuKTsKKyAgICAgICAgcHJpbnRTdWNjZXNzKCJZb3VyIGluY29tZSB0YXggaXMgOiBScyAiLCBvdXQscmV0LCB0aW1lVGFrZW4pOworICAgICAgICBzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICAgICAgaW50IGsgPSBwb3J0LmFkZCg1MDUsIDUwKTsKKyAgICAgICAgICAgICAgICB0aW1lVGFrZW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIHN0YXJ0VGltZTsKKyAgICAgICAgcHJpbnRTdWNjZXNzKCJTdW0gb2YgNTA1IGFuZCA1MCBpcyA6ICIsIG91dCxrLCB0aW1lVGFrZW4pOwogCi0JCXN0YXJ0VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQlTdHJpbmcgaGkgPSBwb3J0LnNheUhpKCk7Ci0JCQkJdGltZVRha2VuID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBzdGFydFRpbWU7Ci0JCXByaW50U3VjY2VzcygiT3V0cHV0IGZyb20gd2Vic2VydmljZSA6ICIsIG91dCwgaGksIHRpbWVUYWtlbik7CisgICAgICAgIHN0YXJ0VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgICAgICBTdHJpbmcgaGkgPSBwb3J0LnNheUhpKCk7CisgICAgICAgICAgICAgICAgdGltZVRha2VuID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBzdGFydFRpbWU7CisgICAgICAgIHByaW50U3VjY2VzcygiT3V0cHV0IGZyb20gd2Vic2VydmljZSA6ICIsIG91dCwgaGksIHRpbWVUYWtlbik7CiAKLQkJc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCXBvcnQucHJpbnRIaSgpOwotCQkJCXRpbWVUYWtlbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gc3RhcnRUaW1lOwotCQlwcmludFN1Y2Nlc3MoIlNVQ0NFU1MgOiAiLCBvdXQsICJXZWJzZXJ2aWNlIGhhcyBzdWNjZXNzZnVsbHkgcHJpbnRlZCBoaSBpbiBzZXJ2ZXIubG9nIiwgdGltZVRha2VuKTsKKyAgICAgICAgc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgICAgIHBvcnQucHJpbnRIaSgpOworICAgICAgICAgICAgICAgIHRpbWVUYWtlbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gc3RhcnRUaW1lOworICAgICAgICBwcmludFN1Y2Nlc3MoIlNVQ0NFU1MgOiAiLCBvdXQsICJXZWJzZXJ2aWNlIGhhcyBzdWNjZXNzZnVsbHkgcHJpbnRlZCBoaSBpbiBzZXJ2ZXIubG9nIiwgdGltZVRha2VuKTsKIAotCQlzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJcG9ydC5wcmludEhpVG9NZSgiSmF2YUVFU2VydmljZUVuZ2luZSIpOwotCQkJCXRpbWVUYWtlbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gc3RhcnRUaW1lOwotCQlwcmludFN1Y2Nlc3MoIlNVQ0NFU1MgOiAiLCBvdXQsICJXZWJzZXJ2aWNlIGhhcyBzdWNjZXNzZnVsbHkgcHJpbnRlZCBoaSB0byBtZSBpbiBzZXJ2ZXIubG9nIiwgdGltZVRha2VuKTsKKyAgICAgICAgc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgICAgIHBvcnQucHJpbnRIaVRvTWUoIkphdmFFRVNlcnZpY2VFbmdpbmUiKTsKKyAgICAgICAgICAgICAgICB0aW1lVGFrZW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIHN0YXJ0VGltZTsKKyAgICAgICAgcHJpbnRTdWNjZXNzKCJTVUNDRVNTIDogIiwgb3V0LCAiV2Vic2VydmljZSBoYXMgc3VjY2Vzc2Z1bGx5IHByaW50ZWQgaGkgdG8gbWUgaW4gc2VydmVyLmxvZyIsIHRpbWVUYWtlbik7CiAKICAgICAgICAgICAgIH0gY2F0Y2goamF2YS5sYW5nLkV4Y2VwdGlvbiBlKSB7Ci0JCS8vZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgCXByaW50RmFpbHVyZShvdXQsIGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgLy9lLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAgICAgcHJpbnRGYWlsdXJlKG91dCwgZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgfSBmaW5hbGx5IHsKLQkJaWYob3V0ICE9IG51bGwpIHsKKyAgICAgICAgaWYob3V0ICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgb3V0LmZsdXNoKCk7CiAgICAgICAgICAgICAgICAgICAgIG91dC5jbG9zZSgpOwotCQl9Ci0JICAgIH0KKyAgICAgICAgfQorICAgICAgICB9CiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgcHJpbnRGYWlsdXJlKFByaW50V3JpdGVyIG91dCwgU3RyaW5nIGVyck1zZykgewotCQlpZihvdXQgPT0gbnVsbCkgcmV0dXJuOwotCQlvdXQucHJpbnRsbigiPGh0bWw+Iik7CisgICAgICAgIGlmKG91dCA9PSBudWxsKSByZXR1cm47CisgICAgICAgIG91dC5wcmludGxuKCI8aHRtbD4iKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGhlYWQ+Iik7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjx0aXRsZT5UZXN0U2VydmxldDwvdGl0bGU+Iik7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvaGVhZD4iKTsKQEAgLTExNSwxNCArMTE1LDE0IEBACiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgcHJpbnRTdWNjZXNzKFN0cmluZyBtZXNzYWdlLCBQcmludFdyaXRlciBvdXQsIGxvbmcgcmVzdWx0LCBsb25nIHRpbWVUYWtlbikgewotCQlpZihvdXQgPT0gbnVsbCkgcmV0dXJuOworICAgICAgICBpZihvdXQgPT0gbnVsbCkgcmV0dXJuOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJcblxuIik7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4obWVzc2FnZSArIHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIlRpbWUgdGFrZW4gdG8gaW52b2tlIHRoZSBlbmRwb2ludCBvcGVyYXRpb24gaXMgIDogICIgKyB0aW1lVGFrZW4gKyAiIG1pbGxpc2Vjb25kcy4iKTsKICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBwcmludFN1Y2Nlc3MoU3RyaW5nIG1lc3NhZ2UsIFByaW50V3JpdGVyIG91dCwgU3RyaW5nIHJlc3VsdCwgbG9uZyB0aW1lVGFrZW4pIHsKLQkJaWYob3V0ID09IG51bGwpIHJldHVybjsKKyAgICAgICAgaWYob3V0ID09IG51bGwpIHJldHVybjsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiXG5cbiIpOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKG1lc3NhZ2UgKyByZXN1bHQpOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJUaW1lIHRha2VuIHRvIGludm9rZSB0aGUgZW5kcG9pbnQgb3BlcmF0aW9uIGlzICA6ICAiICsgdGltZVRha2VuICsgIiBtaWxsaXNlY29uZHMuIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlY3VyaXR5L2pzZV9vbmx5L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlY3VyaXR5L2pzZV9vbmx5L2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMDRhZWQ4MC4uNWFlZDEyNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZWN1cml0eS9qc2Vfb25seS9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VjdXJpdHkvanNlX29ubHkvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzZWN1cmVkLWVqYldTIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSIuL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9Ii4vc3VuLXdlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VjdXJpdHkvanNlX29ubHkvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZWN1cml0eS9qc2Vfb25seS9idWlsZC54bWwKaW5kZXggMzFmMjRhNy4uZWE5YmZhMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZWN1cml0eS9qc2Vfb25seS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZWN1cml0eS9qc2Vfb25seS9idWlsZC54bWwKQEAgLTUwLDE1ICs1MCwxNSBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJjcmVhdGUtdXNlciIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjcmVhdGUtdXNlci1jb21tb24iPgotCTxwYXJhbSBuYW1lPSJ1c2VyIiB2YWx1ZT0iJHtmaWxlVXNlcn0iLz4KLQk8cGFyYW0gbmFtZT0icGFzc3dvcmQiIHZhbHVlPSIke2ZpbGVVc2VyUGFzc3dvcmR9Ii8+Ci0JPHBhcmFtIG5hbWU9Imdyb3VwcyIgdmFsdWU9IiR7ZmlsZVVzZXJHcm91cHN9Ii8+CisgICAgPHBhcmFtIG5hbWU9InVzZXIiIHZhbHVlPSIke2ZpbGVVc2VyfSIvPgorICAgIDxwYXJhbSBuYW1lPSJwYXNzd29yZCIgdmFsdWU9IiR7ZmlsZVVzZXJQYXNzd29yZH0iLz4KKyAgICA8cGFyYW0gbmFtZT0iZ3JvdXBzIiB2YWx1ZT0iJHtmaWxlVXNlckdyb3Vwc30iLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0iZGVsZXRlLXVzZXIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVsZXRlLXVzZXItY29tbW9uIj4KLQk8cGFyYW0gbmFtZT0idXNlciIgdmFsdWU9IiR7ZmlsZVVzZXJ9Ii8+CisgICAgPHBhcmFtIG5hbWU9InVzZXIiIHZhbHVlPSIke2ZpbGVVc2VyfSIvPgogICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCkBAIC0xMDcsMTAgKzEwNywxMCBAQAogICAgICAgICA8cGFyYW0gbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSIke2FwcG5hbWV9Ii8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InNldC1qYmktZW5hYmxlZCI+Ci0JPHBhcmFtIG5hbWU9ImFwcE5hbWUiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPgotCTxwYXJhbSBuYW1lPSJ3c05hbWUiIHZhbHVlPSJIZWxsb0VKQiIvPgotCTxwYXJhbSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItbW9kdWxlIi8+Ci0JPHBhcmFtIG5hbWU9ImZsYWciIHZhbHVlPSJ0cnVlIi8+CisgICAgPHBhcmFtIG5hbWU9ImFwcE5hbWUiIHZhbHVlPSIke2FwcG5hbWV9LWVqYiIvPgorICAgIDxwYXJhbSBuYW1lPSJ3c05hbWUiIHZhbHVlPSJIZWxsb0VKQiIvPgorICAgIDxwYXJhbSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJlamItbW9kdWxlIi8+CisgICAgPHBhcmFtIG5hbWU9ImZsYWciIHZhbHVlPSJ0cnVlIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKQEAgLTExOCw3ICsxMTgsNyBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWFwcCIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNsaWVudCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveS1jbGllbnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxlY2hvIG1lc3NhZ2U9IlVuZGVwbG95aW5nIGNsaWVudCBhcHBsaWNhdGlvbiIvPgogICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSI+CkBAIC0xNDUsOCArMTQ1LDggQEAKIAogICAgIDx0YXJnZXQgbmFtZT0icnVudGVzdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+Ci0gICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiIAotICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgCisgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9ImNsaWVudC8qKiIvPgogICAgICAgPHVuamFyIHNyYz0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIGRlc3Q9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgogICAgICAgPGphdmEgY2xhc3NuYW1lPSJjbGllbnQuVGVzdENsaWVudCI+CkBAIC0xNTQsNyArMTU0LDcgQEAKICAgICAgICAgICA8cGF0aGVsZW1lbnQgcGF0aD0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+CiAgICAgICAgIDwvY2xhc3NwYXRoPgogICAgICAgICA8YXJnIHZhbHVlPSJodHRwOi8vJHtodHRwLmhvc3R9OiR7aHR0cC5wb3J0fS93c2NsaWVudC93ZWJjbGllbnQvUmVxdWVzdFByb2Nlc3NvciIvPgotCTxhcmcgdmFsdWU9IiR7ZmlsZVVzZXJ9OiR7ZmlsZVVzZXJQYXNzd29yZH0iLz4KKyAgICA8YXJnIHZhbHVlPSIke2ZpbGVVc2VyfToke2ZpbGVVc2VyUGFzc3dvcmR9Ii8+CiAgICAgICA8L2phdmE+CiAgICAgPC90YXJnZXQ+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VjdXJpdHkvanNlX29ubHkvY2xpZW50LXN1bi13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZWN1cml0eS9qc2Vfb25seS9jbGllbnQtc3VuLXdlYi54bWwKaW5kZXggNjMyN2IxMy4uNGYwZjY2YSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZWN1cml0eS9qc2Vfb25seS9jbGllbnQtc3VuLXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZWN1cml0eS9qc2Vfb25seS9jbGllbnQtc3VuLXdlYi54bWwKQEAgLTI5LDE1ICsyOSwxNSBAQAogICA8c2VydmljZS1yZWY+CiAgICAgPHNlcnZpY2UtcmVmLW5hbWU+c3VuLXdlYi5zZXJ2aWNlcmVmL0hlbGxvRUpCU2VydmljZTwvc2VydmljZS1yZWYtbmFtZT4KICAgICA8cG9ydC1pbmZvPgotCTxzZXJ2aWNlLWVuZHBvaW50LWludGVyZmFjZT5lbmRwb2ludC5lamIuSGVsbG88L3NlcnZpY2UtZW5kcG9pbnQtaW50ZXJmYWNlPgotCTx3c2RsLXBvcnQ+Ci0gICAgCSAgPG5hbWVzcGFjZVVSST5odHRwOi8vZW5kcG9pbnQvZWpiPC9uYW1lc3BhY2VVUkk+Ci0gICAgCSAgPGxvY2FscGFydD5IZWxsb0VKQlBvcnQ8L2xvY2FscGFydD4KLQk8L3dzZGwtcG9ydD4KLSAgICAJPHN0dWItcHJvcGVydHk+Ci0JICA8bmFtZT5qYmktZW5hYmxlZDwvbmFtZT4KLQkgIDx2YWx1ZT50cnVlPC92YWx1ZT4KLQk8L3N0dWItcHJvcGVydHk+CisgICAgPHNlcnZpY2UtZW5kcG9pbnQtaW50ZXJmYWNlPmVuZHBvaW50LmVqYi5IZWxsbzwvc2VydmljZS1lbmRwb2ludC1pbnRlcmZhY2U+CisgICAgPHdzZGwtcG9ydD4KKyAgICAgICAgICA8bmFtZXNwYWNlVVJJPmh0dHA6Ly9lbmRwb2ludC9lamI8L25hbWVzcGFjZVVSST4KKyAgICAgICAgICA8bG9jYWxwYXJ0PkhlbGxvRUpCUG9ydDwvbG9jYWxwYXJ0PgorICAgIDwvd3NkbC1wb3J0PgorICAgICAgICA8c3R1Yi1wcm9wZXJ0eT4KKyAgICAgIDxuYW1lPmpiaS1lbmFibGVkPC9uYW1lPgorICAgICAgPHZhbHVlPnRydWU8L3ZhbHVlPgorICAgIDwvc3R1Yi1wcm9wZXJ0eT4KICAgICA8L3BvcnQtaW5mbz4KICAgICA8d3NkbC1vdmVycmlkZT5odHRwOi8vbG9jYWxob3N0OjgwODAvSGVsbG9FSkJTZXJ2aWNlL0hlbGxvRUpCP1dTREw8L3dzZGwtb3ZlcnJpZGU+CiAgIDwvc2VydmljZS1yZWY+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlY3VyaXR5L2pzZV9vbmx5L2NsaWVudC13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZWN1cml0eS9qc2Vfb25seS9jbGllbnQtd2ViLnhtbAppbmRleCAxZDFmM2ZlLi44ZTJjNjQ2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlY3VyaXR5L2pzZV9vbmx5L2NsaWVudC13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VjdXJpdHkvanNlX29ubHkvY2xpZW50LXdlYi54bWwKQEAgLTIwLDcgKzIwLDcgQEAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0gICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSAKKyAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KICAgPGRlc2NyaXB0aW9uPkEgdGVzdCBhcHBsaWNhdGlvbjwvZGVzY3JpcHRpb24+CiAgIDxkaXNwbGF5LW5hbWU+V2ViVGllcjwvZGlzcGxheS1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZWN1cml0eS9qc2Vfb25seS9jbGllbnQvVGVzdENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZWN1cml0eS9qc2Vfb25seS9jbGllbnQvVGVzdENsaWVudC5qYXZhCmluZGV4IDA4NmZmNDkuLmMxNzMyZTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VjdXJpdHkvanNlX29ubHkvY2xpZW50L1Rlc3RDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlY3VyaXR5L2pzZV9vbmx5L2NsaWVudC9UZXN0Q2xpZW50LmphdmEKQEAgLTQ4LDcgKzQ4LDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludCBjb2RlID0gaW52b2tlU2VydmxldCh1cmwscGFzc3dkKTsKICAgICAgICAgICAgIHJlcG9ydChjb2RlKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICB9CkBAIC01Nyw5ICs1Nyw5IEBACiAgICAgcHJpdmF0ZSBpbnQgaW52b2tlU2VydmxldChTdHJpbmcgdXJsLCBTdHJpbmcgdXNlclBhc3N3b3JkKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgbG9nKCJJbnZva2luZyB1cmwgPSAiICsgdXJsKyIsIHBhc3N3b3JkID0gIiArIHVzZXJQYXNzd29yZCk7CiAgICAgICAgIFVSTCB1ID0gbmV3IFVSTCh1cmwpOwotCVN0cmluZyBlbmNvZGluZyA9IG5ldyBzdW4ubWlzYy5CQVNFNjRFbmNvZGVyKCkuZW5jb2RlICh1c2VyUGFzc3dvcmQuZ2V0Qnl0ZXMoKSk7CisgICAgU3RyaW5nIGVuY29kaW5nID0gbmV3IHN1bi5taXNjLkJBU0U2NEVuY29kZXIoKS5lbmNvZGUgKHVzZXJQYXNzd29yZC5nZXRCeXRlcygpKTsKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gYzEgPSAoSHR0cFVSTENvbm5lY3Rpb24pdS5vcGVuQ29ubmVjdGlvbigpOwotCWMxLnNldFJlcXVlc3RQcm9wZXJ0eSAoIkF1dGhvcml6YXRpb24iLCAiQmFzaWMgIiArIGVuY29kaW5nKTsKKyAgICBjMS5zZXRSZXF1ZXN0UHJvcGVydHkgKCJBdXRob3JpemF0aW9uIiwgIkJhc2ljICIgKyBlbmNvZGluZyk7CiAgICAgICAgIGludCBjb2RlID0gYzEuZ2V0UmVzcG9uc2VDb2RlKCk7CiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gYzEuZ2V0SW5wdXRTdHJlYW0oKTsKICAgICAgICAgQnVmZmVyZWRSZWFkZXIgaW5wdXQgPSBuZXcgQnVmZmVyZWRSZWFkZXIgKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwpAQCAtNjcsOSArNjcsOSBAQAogICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICBsb2cobGluZSk7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIlNvIHRoZSBSRVNVTFQgT0YgRUpCIHdlYnNlcnZpY2UgSVMiKSAhPSAtMSkKLQkJZm91bmQxID0gdHJ1ZTsKKyAgICAgICAgZm91bmQxID0gdHJ1ZTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiW0pCSS1TZWN1cml0eVRlc3QgUHJpbmNpcGFsU2VudD11c2VyIFByaW5jaXBhbEdvdD11c2VyXSIpICE9IC0xKQotCQlmb3VuZDIgPSB0cnVlOworICAgICAgICBmb3VuZDIgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjb2RlOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VjdXJpdHkvanNlX29ubHkvZW5kcG9pbnQvZWpiL0hlbGxvLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlY3VyaXR5L2pzZV9vbmx5L2VuZHBvaW50L2VqYi9IZWxsby5qYXZhCmluZGV4IDIzMTY3ZWIuLjkwNzM5MzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VjdXJpdHkvanNlX29ubHkvZW5kcG9pbnQvZWpiL0hlbGxvLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZWN1cml0eS9qc2Vfb25seS9lbmRwb2ludC9lamIvSGVsbG8uamF2YQpAQCAtMjIsNSArMjIsNSBAQAogdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZW5kcG9pbnQvZWpiIikKIHB1YmxpYyBpbnRlcmZhY2UgSGVsbG8gewogCi0JcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgd2hvKTsKKyAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyB3aG8pOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZWN1cml0eS9qc2Vfb25seS9lbmRwb2ludC9lamIvSGVsbG9FSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VjdXJpdHkvanNlX29ubHkvZW5kcG9pbnQvZWpiL0hlbGxvRUpCLmphdmEKaW5kZXggMTQwMjgxYy4uZjZmNWIwNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZWN1cml0eS9qc2Vfb25seS9lbmRwb2ludC9lamIvSGVsbG9FSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlY3VyaXR5L2pzZV9vbmx5L2VuZHBvaW50L2VqYi9IZWxsb0VKQi5qYXZhCkBAIC0zMCwxMCArMzAsMTAgQEAKICAgICBAUmVzb3VyY2UgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBjdHg7CiAKICAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyB3aG8pIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIioqKiogc2F5SGVsbG8oIisgd2hvKyIpIik7Ci0JUHJpbmNpcGFsIHAgPSBjdHguZ2V0Q2FsbGVyUHJpbmNpcGFsKCk7Ci0JU3RyaW5nIHByaW5jaXBhbCA9IChwID09IG51bGwpPyAiTlVMTCI6IHAudG9TdHJpbmcoKTsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIioqKipFSkI6IHByaW5jaXBhbCA9ICIgKyBwcmluY2lwYWwpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKiBzYXlIZWxsbygiKyB3aG8rIikiKTsKKyAgICBQcmluY2lwYWwgcCA9IGN0eC5nZXRDYWxsZXJQcmluY2lwYWwoKTsKKyAgICBTdHJpbmcgcHJpbmNpcGFsID0gKHAgPT0gbnVsbCk/ICJOVUxMIjogcC50b1N0cmluZygpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKkVKQjogcHJpbmNpcGFsID0gIiArIHByaW5jaXBhbCk7CiAgICAgICAgIHJldHVybiAiSkJJLVNlY3VyaXR5VGVzdCAiICsgd2hvICsgIiBQcmluY2lwYWxHb3Q9IitwcmluY2lwYWw7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZWN1cml0eS9qc2Vfb25seS93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZWN1cml0eS9qc2Vfb25seS93ZWIueG1sCmluZGV4IDA3ZTE0NzcuLjc5OGM2OWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VjdXJpdHkvanNlX29ubHkvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlY3VyaXR5L2pzZV9vbmx5L3dlYi54bWwKQEAgLTE4LDMwICsxOCwzMCBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotCQkJaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CisgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQorICAgICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAKLQk8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIENhbGN1bGF0b3IgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV0FSPC9kaXNwbGF5LW5hbWU+CisgICAgPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBDYWxjdWxhdG9yIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgIDxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldBUjwvZGlzcGxheS1uYW1lPgogCi0JPHNlcnZsZXQ+Ci0JCTxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgQ2FsY3VsYXRvciBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JCTxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KLQkJPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+Ci0JCTxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkNhbGN1bGF0b3I8L3NlcnZsZXQtY2xhc3M+Ci0JCTxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgotCTwvc2VydmxldD4KKyAgICA8c2VydmxldD4KKyAgICAgICAgPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBDYWxjdWxhdG9yIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgorICAgICAgICA8c2VydmxldC1uYW1lPkNhbGN1bGF0b3I8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuQ2FsY3VsYXRvcjwvc2VydmxldC1jbGFzcz4KKyAgICAgICAgPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+CisgICAgPC9zZXJ2bGV0PgogCi0JPHNlcnZsZXQtbWFwcGluZz4KLQkJPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+Ci0JCTx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9DYWxjdWxhdG9yU2VydmljZTwvdXJsLXBhdHRlcm4+Ci0JPC9zZXJ2bGV0LW1hcHBpbmc+CisgICAgPHNlcnZsZXQtbWFwcGluZz4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9DYWxjdWxhdG9yU2VydmljZTwvdXJsLXBhdHRlcm4+CisgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiAKLQk8c2Vzc2lvbi1jb25maWc+Ci0JCTxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KLQk8L3Nlc3Npb24tY29uZmlnPgorICAgIDxzZXNzaW9uLWNvbmZpZz4KKyAgICAgICAgPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgorICAgIDwvc2Vzc2lvbi1jb25maWc+CiAKIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZWN1cml0eS9qc2Vfb25seS93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZWN1cml0eS9qc2Vfb25seS93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDg2ZmEzZTQuLjJhYzIxY2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VjdXJpdHkvanNlX29ubHkvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlY3VyaXR5L2pzZV9vbmx5L3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTM4LDEzICszOCwxMyBAQAogICAgICAgICAgICAgdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFByaW5jaXBhbCBwID0gcmVxLmdldFVzZXJQcmluY2lwYWwoKTsKLQkgICAgU3RyaW5nIHByaW5jaXBhbCA9IChwPT1udWxsKT8gIk5VTEwiOiBwLnRvU3RyaW5nKCk7CisgICAgICAgIFN0cmluZyBwcmluY2lwYWwgPSAocD09bnVsbCk/ICJOVUxMIjogcC50b1N0cmluZygpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqU2VydmxldDogcHJpbmNpcGFsID0gIiArIHByaW5jaXBhbCk7CiAKICAgICAgICAgICAgIEhlbGxvIHBvcnQgPSBzZXJ2aWNlLmdldEhlbGxvRUpCUG9ydCgpOwotCSAgICBTdHJpbmcgcmV0ID0gcG9ydC5zYXlIZWxsbygiUHJpbmNpcGFsU2VudD0iK3ByaW5jaXBhbCk7CisgICAgICAgIFN0cmluZyByZXQgPSBwb3J0LnNheUhlbGxvKCJQcmluY2lwYWxTZW50PSIrcHJpbmNpcGFsKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmV0dXJuIHZhbHVlIGZyb20gd2Vic2VydmljZToiK3JldCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcC5nZXRXcml0ZXIoKTsKICAgICAgICAgICAgIHJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICAgICAgb3V0LnByaW50bG4oIjxodG1sPiIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvYnVpbGQueG1sCmluZGV4IDQ3NWIxZjQuLjBjYjg2YjAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9idWlsZC54bWwKQEAgLTI1LDYgKzI1LDYgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iYWxsIj4KICAgICAgICAgPGFudCBkaXI9IndlYiIgdGFyZ2V0PSJhbGwiLz4KLQk8YW50IGRpcj0iZWpiIiB0YXJnZXQ9ImFsbCIvPgorICAgIDxhbnQgZGlyPSJlamIiIHRhcmdldD0iYWxsIi8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2J1aWxkLnhtbAppbmRleCAyZTc2ZmMxLi4zZWFlZWEzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9idWlsZC54bWwKQEAgLTIxLDYgKzIxLDYgQEAKIF0+CiA8cHJvamVjdCBuYW1lPSJqc3IxMDgtaW50ZWdyYXRpb24gdGVzdHMiIGRlZmF1bHQ9ImFsbCIgYmFzZWRpcj0iLiI+CiAgICAgPHRhcmdldCBuYW1lPSJhbGwiPgotCTxhbnQgZGlyPSJoZWxsbyIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0iaGVsbG8iIHRhcmdldD0iYWxsIi8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vYW5vdGhlcl9lamIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9hbm90aGVyX2VqYi9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGViNzQyZmUuLmJjOTYwMzQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9hbm90aGVyX2VqYi9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9hbm90aGVyX2VqYi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJqYmktY29tcG9uZW50LXN1LWFzc2VtYmx5IiB2YWx1ZT0iZWpiX25vbmFtZV9IaUVKQl9jb25zdW1lcl9hc3NlbWJseSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL2Fub3RoZXJfZWpiL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9hbm90aGVyX2VqYi9idWlsZC54bWwKaW5kZXggNWRmNDc5ZS4uZDNjNDA2MiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL2Fub3RoZXJfZWpiL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vYW5vdGhlcl9lamIvYnVpbGQueG1sCkBAIC00Miw3ICs0Miw3IEBACiAgICAgPHRhcmdldCBuYW1lPSJteS13c2RsLWltcG9ydCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0id3NkbC1pbXBvcnQiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNlcnZlciIgdmFsdWU9IiR7c2VydmVyfSIvPgotIAkgICAgPHBhcmFtIG5hbWU9InBvcnQiIHZhbHVlPSJIaUVKQiIvPgorICAgICAgICAgPHBhcmFtIG5hbWU9InBvcnQiIHZhbHVlPSJIaUVKQiIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+CiAKQEAgLTUyLDYgKzUyLDYgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0icmVwb3J0LWZhaWx1cmUiPgogICAgICAgICAgICAgPGVjaG8gbWVzc2FnZT0iVGVzdCBmYWlsZWQiLz4KLSAgICA8L3RhcmdldD4gICAJCi0gICAgCisgICAgPC90YXJnZXQ+CisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9hbm90aGVyX2VqYi9lbmRwb2ludC9qYXh3cy9IaS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL2Fub3RoZXJfZWpiL2VuZHBvaW50L2pheHdzL0hpLmphdmEKaW5kZXggZGJlMDdjZS4uZjIxZTlmNSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL2Fub3RoZXJfZWpiL2VuZHBvaW50L2pheHdzL0hpLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL2Fub3RoZXJfZWpiL2VuZHBvaW50L2pheHdzL0hpLmphdmEKQEAgLTIyLDUgKzIyLDUgQEAKIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2VuZHBvaW50L2pheHdzIikKIHB1YmxpYyBpbnRlcmZhY2UgSGkgewogCi0JcHVibGljIFN0cmluZyBzYXlIaShTdHJpbmcgd2hvKTsKKyAgICBwdWJsaWMgU3RyaW5nIHNheUhpKFN0cmluZyB3aG8pOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL2Fub3RoZXJfZWpiL2VuZHBvaW50L2pheHdzL0hpRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vYW5vdGhlcl9lamIvZW5kcG9pbnQvamF4d3MvSGlFSkIuamF2YQppbmRleCBmOTgwMWJiLi4wMzUzMmFkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vYW5vdGhlcl9lamIvZW5kcG9pbnQvamF4d3MvSGlFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vYW5vdGhlcl9lamIvZW5kcG9pbnQvamF4d3MvSGlFSkIuamF2YQpAQCAtMjQsNyArMjQsNyBAQAogcHVibGljIGNsYXNzIEhpRUpCIGltcGxlbWVudHMgSGkgewogCiAgICAgcHVibGljIFN0cmluZyBzYXlIaShTdHJpbmcgd2hvKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBFSkIyIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBFSkIyIik7CiAgICAgICAgIHJldHVybiAiV2ViU3ZjVGVzdC1IaSIgKyB3aG87CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL2Fub3RoZXJfZWpiL3NvYXAtYmluZGluZy1zdS1hbGFza2EvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9hbm90aGVyX2VqYi9zb2FwLWJpbmRpbmctc3UtYWxhc2thL2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKaW5kZXggNDVlYzIzMy4uMzk5ZTNiNyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL2Fub3RoZXJfZWpiL3NvYXAtYmluZGluZy1zdS1hbGFza2EvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vYW5vdGhlcl9lamIvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCkBAIC0xOSw5ICsxOSw5IEBACiAKIDwhLS0gamJpLnhtbCBmaWxlIGZvciB0aGUgU09BUCBiaW5kaW5nIGRlcGxveW1lbnRzIGJpbmRpbmcuIC0tPgogPGpiaQotICAgIHZlcnNpb249IjEuMCIgCi0gICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIgCi0gICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCisgICAgdmVyc2lvbj0iMS4wIgorICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSAuL2piaS54c2QiPgogICA8c2VydmljZS1hc3NlbWJseT4KICAgICA8aWRlbnRpZmljYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vYW5vdGhlcl9lamIvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9zdS9NRVRBLUlORi9qYmkueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL2Fub3RoZXJfZWpiL3NvYXAtYmluZGluZy1zdS1hbGFza2Evc3UvTUVUQS1JTkYvamJpLnhtbAppbmRleCBjM2JjNDFmLi45MzA2YWY1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vYW5vdGhlcl9lamIvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9zdS9NRVRBLUlORi9qYmkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9hbm90aGVyX2VqYi9zb2FwLWJpbmRpbmctc3UtYWxhc2thL3N1L01FVEEtSU5GL2piaS54bWwKQEAgLTE4LDE1ICsxOCwxNSBAQAogLS0+CiAKIDxqYmkgdmVyc2lvbj0iMS4wIgotCSB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKLQkgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIgCi0JIHhtbG5zOmphdmFlc2I9Imh0dHA6Ly9qYXZhLnN1bi5jb20iCi0JIHhtbG5zOnRucz0iaHR0cDovL2VuZHBvaW50L2pheHdzIgotCSB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSBqYmkueHNkIj4KLQk8c2VydmljZXMgYmluZGluZy1jb21wb25lbnQ9InRydWUiPgkJCisgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiCisgICAgIHhtbG5zOmphdmFlc2I9Imh0dHA6Ly9qYXZhLnN1bi5jb20iCisgICAgIHhtbG5zOnRucz0iaHR0cDovL2VuZHBvaW50L2pheHdzIgorICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSBqYmkueHNkIj4KKyAgICA8c2VydmljZXMgYmluZGluZy1jb21wb25lbnQ9InRydWUiPgogICAgICAgICA8Y29uc3VtZXMgaW50ZXJmYWNlLW5hbWU9InRuczpIaUVKQlNlcnZpY2VJbnRlcmZhY2UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtbmFtZT0idG5zOkhpRUpCU2VydmljZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQtbmFtZT0iSGlFSkJQb3J0Ii8+CiAgICAgICAgICAgICAgICAgPGFydGlmYWN0cyB4bWxucz0iIiByb2xlPSJjb25zdW1lciIgZmlsZS1uYW1lPSJlbmRwb2ludHMueG1sIiB0eXBlPSJ4bWwiLz4KLQk8L3NlcnZpY2VzPgorICAgIDwvc2VydmljZXM+CiA8L2piaT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9hbm90aGVyX3NlcnZsZXQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9hbm90aGVyX3NlcnZsZXQvYnVpbGQucHJvcGVydGllcwppbmRleCA2OWQyY2ExLi4wNzQwNjYyIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vYW5vdGhlcl9zZXJ2bGV0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL2Fub3RoZXJfc2VydmxldC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InN1YnRyYWN0b3JzZXJ2aWNlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSIuL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9Ii4vc3VuLXdlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9hbm90aGVyX3NlcnZsZXQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL2Fub3RoZXJfc2VydmxldC9idWlsZC54bWwKaW5kZXggM2FhYjhiNS4uMGY5Njc2ZSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL2Fub3RoZXJfc2VydmxldC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL2Fub3RoZXJfc2VydmxldC9idWlsZC54bWwKQEAgLTc1LDcgKzc1LDcgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamJpLWNvbXBvbmVudC1zdSIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJjb25maWd1cmUtd2Vic2VydmljZS1tYW5hZ2VtZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJjb25maWd1cmUtd2Vic2VydmljZS1tYW5hZ2VtZW50Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vYW5vdGhlcl9zZXJ2bGV0L2NsaWVudC13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL2Fub3RoZXJfc2VydmxldC9jbGllbnQtd2ViLnhtbAppbmRleCBhZmFlOGU3Li4yMmRmNWU2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vYW5vdGhlcl9zZXJ2bGV0L2NsaWVudC13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9hbm90aGVyX3NlcnZsZXQvY2xpZW50LXdlYi54bWwKQEAgLTIwLDcgKzIwLDcgQEAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0gICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSAKKyAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KICAgPGRlc2NyaXB0aW9uPkEgdGVzdCBhcHBsaWNhdGlvbjwvZGVzY3JpcHRpb24+CiAgIDxkaXNwbGF5LW5hbWU+V2ViVGllcjwvZGlzcGxheS1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL2Fub3RoZXJfc2VydmxldC9lbmRwb2ludC9TdWJ0cmFjdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vYW5vdGhlcl9zZXJ2bGV0L2VuZHBvaW50L1N1YnRyYWN0b3IuamF2YQppbmRleCAxYjY2YjlkLi45ZjlkNGFmIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vYW5vdGhlcl9zZXJ2bGV0L2VuZHBvaW50L1N1YnRyYWN0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vYW5vdGhlcl9zZXJ2bGV0L2VuZHBvaW50L1N1YnRyYWN0b3IuamF2YQpAQCAtMjUsMTUgKzI1LDE1IEBACiAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZXhhbXBsZS5jb20vU3VidHJhY3RvciIKICkKIHB1YmxpYyBjbGFzcyBTdWJ0cmFjdG9yIHsKLQlzdGF0aWMgaW50IGNvdW50ID0gMDsKLQlwdWJsaWMgU3VidHJhY3RvcigpIHt9CisgICAgc3RhdGljIGludCBjb3VudCA9IDA7CisgICAgcHVibGljIFN1YnRyYWN0b3IoKSB7fQogCi0JQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJhZGQiLCBhY3Rpb249InVybjpBZGQiKQotCXB1YmxpYyBpbnQgYWRkKGludCBpLCBpbnQgaikgeworICAgIEBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0iYWRkIiwgYWN0aW9uPSJ1cm46QWRkIikKKyAgICBwdWJsaWMgaW50IGFkZChpbnQgaSwgaW50IGopIHsKICAgICAgICAgICAgICAgICBpbnQgayA9IGkgLWogOwotCQljb3VudCsrOworICAgICAgICBjb3VudCsrOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihpICsgIi0iICsgaiArIiA9ICIgKyBrKTsKLSAJCVN5c3RlbS5vdXQucHJpbnRsbigiQ291bnQgaXM6ICIrY291bnQpOwotCQlyZXR1cm4gazsKLQl9CisgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvdW50IGlzOiAiK2NvdW50KTsKKyAgICAgICAgcmV0dXJuIGs7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL2Fub3RoZXJfc2VydmxldC9zb2FwLWJpbmRpbmctc3UtYWxhc2thL2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vYW5vdGhlcl9zZXJ2bGV0L3NvYXAtYmluZGluZy1zdS1hbGFza2EvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbAppbmRleCAxNjU4YTQwLi45ZDVmYjI2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vYW5vdGhlcl9zZXJ2bGV0L3NvYXAtYmluZGluZy1zdS1hbGFza2EvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vYW5vdGhlcl9zZXJ2bGV0L3NvYXAtYmluZGluZy1zdS1hbGFza2EvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbApAQCAtMTksOSArMTksOSBAQAogCiA8IS0tIGpiaS54bWwgZmlsZSBmb3IgdGhlIFNPQVAgYmluZGluZyBkZXBsb3ltZW50cyBiaW5kaW5nLiAtLT4KIDxqYmkKLSAgICB2ZXJzaW9uPSIxLjAiIAotICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiIAotICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAorICAgIHZlcnNpb249IjEuMCIKKyAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgLi9qYmkueHNkIj4KICAgPHNlcnZpY2UtYXNzZW1ibHk+CiAgICAgPGlkZW50aWZpY2F0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL2Fub3RoZXJfc2VydmxldC9zb2FwLWJpbmRpbmctc3UtYWxhc2thL3N1L01FVEEtSU5GL2piaS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vYW5vdGhlcl9zZXJ2bGV0L3NvYXAtYmluZGluZy1zdS1hbGFza2Evc3UvTUVUQS1JTkYvamJpLnhtbAppbmRleCA2YjliMDM1Li4xM2MzM2RlIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vYW5vdGhlcl9zZXJ2bGV0L3NvYXAtYmluZGluZy1zdS1hbGFza2Evc3UvTUVUQS1JTkYvamJpLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vYW5vdGhlcl9zZXJ2bGV0L3NvYXAtYmluZGluZy1zdS1hbGFza2Evc3UvTUVUQS1JTkYvamJpLnhtbApAQCAtMTgsMTYgKzE4LDE2IEBACiAtLT4KIAogPGpiaSB2ZXJzaW9uPSIxLjAiCi0JIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAotCSB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIiAKLQkgeG1sbnM6amF2YWVzYj0iaHR0cDovL2phdmEuc3VuLmNvbSIKLQkgeG1sbnM6dG5zPSJodHRwOi8vZXhhbXBsZS5jb20vU3VidHJhY3RvciIKLQkgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgamJpLnhzZCI+Ci0JPHNlcnZpY2VzIGJpbmRpbmctY29tcG9uZW50PSJ0cnVlIj4JCQotCSA8Y29uc3VtZXMgaW50ZXJmYWNlLW5hbWU9InRuczpTdWJ0cmFjdG9yU2VydmljZSIKKyAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIKKyAgICAgeG1sbnM6amF2YWVzYj0iaHR0cDovL2phdmEuc3VuLmNvbSIKKyAgICAgeG1sbnM6dG5zPSJodHRwOi8vZXhhbXBsZS5jb20vU3VidHJhY3RvciIKKyAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgamJpLnhzZCI+CisgICAgPHNlcnZpY2VzIGJpbmRpbmctY29tcG9uZW50PSJ0cnVlIj4KKyAgICAgPGNvbnN1bWVzIGludGVyZmFjZS1uYW1lPSJ0bnM6U3VidHJhY3RvclNlcnZpY2UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmstdHlwZT0ic3RhbmRhcmQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtbmFtZT0idG5zOlN1YnRyYWN0b3JTZXJ2aWNlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludC1uYW1lPSJTdWJ0cmFjdG9yUG9ydCIvPgogICAgICAgICAgPGphdmFlc2I6YXJ0aWZhY3RzdHlwZT5XU0RMMTE8L2phdmFlc2I6YXJ0aWZhY3RzdHlwZT4KLQk8L3NlcnZpY2VzPgorICAgIDwvc2VydmljZXM+CiA8L2piaT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9hbm90aGVyX3NlcnZsZXQvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9hbm90aGVyX3NlcnZsZXQvd2ViLnhtbAppbmRleCBlNGM5YTU2Li4xYTg0ZmYwIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vYW5vdGhlcl9zZXJ2bGV0L3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL2Fub3RoZXJfc2VydmxldC93ZWIueG1sCkBAIC0xOCwzMCArMTgsMzAgQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKLQkJCWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgorICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKKyAgICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogCi0JPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBTdWJ0cmFjdG9yIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCTxkaXNwbGF5LW5hbWU+U3VidHJhY3RvcldBUjwvZGlzcGxheS1uYW1lPgorICAgIDxkZXNjcmlwdGlvbj5XZWJUaWVyIGZvciB0aGUgU3VidHJhY3RvciBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICA8ZGlzcGxheS1uYW1lPlN1YnRyYWN0b3JXQVI8L2Rpc3BsYXktbmFtZT4KIAotCTxzZXJ2bGV0PgotCQk8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIFN1YnRyYWN0b3IgV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCQk8ZGlzcGxheS1uYW1lPlN1YnRyYWN0b3JXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+Ci0JCTxzZXJ2bGV0LW5hbWU+U3VidHJhY3Rvcjwvc2VydmxldC1uYW1lPgotCQk8c2VydmxldC1jbGFzcz5lbmRwb2ludC5TdWJ0cmFjdG9yPC9zZXJ2bGV0LWNsYXNzPgotCQk8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KLQk8L3NlcnZsZXQ+CisgICAgPHNlcnZsZXQ+CisgICAgICAgIDxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgU3VidHJhY3RvciBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgICAgIDxkaXNwbGF5LW5hbWU+U3VidHJhY3RvcldlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5TdWJ0cmFjdG9yPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LlN1YnRyYWN0b3I8L3NlcnZsZXQtY2xhc3M+CisgICAgICAgIDxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgorICAgIDwvc2VydmxldD4KIAotCTxzZXJ2bGV0LW1hcHBpbmc+Ci0JCTxzZXJ2bGV0LW5hbWU+U3VidHJhY3Rvcjwvc2VydmxldC1uYW1lPgotCQk8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvU3VidHJhY3RvclNlcnZpY2U8L3VybC1wYXR0ZXJuPgotCTwvc2VydmxldC1tYXBwaW5nPgorICAgIDxzZXJ2bGV0LW1hcHBpbmc+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+U3VidHJhY3Rvcjwvc2VydmxldC1uYW1lPgorICAgICAgICA8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvU3VidHJhY3RvclNlcnZpY2U8L3VybC1wYXR0ZXJuPgorICAgIDwvc2VydmxldC1tYXBwaW5nPgogCi0JPHNlc3Npb24tY29uZmlnPgotCQk8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+Ci0JPC9zZXNzaW9uLWNvbmZpZz4KKyAgICA8c2Vzc2lvbi1jb25maWc+CisgICAgICAgIDxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KKyAgICA8L3Nlc3Npb24tY29uZmlnPgogCiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9hbm90aGVyX3NlcnZsZXQvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9hbm90aGVyX3NlcnZsZXQvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQppbmRleCBiMjNjOTBmLi4zNjY3YTdkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vYW5vdGhlcl9zZXJ2bGV0L3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL2Fub3RoZXJfc2VydmxldC93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yOCw4ICsyOCw4IEBACiAKICAgICAgICBAV2ViU2VydmljZVJlZihuYW1lPSJzdW4td2ViLnNlcnZpY2VyZWYvc3VidHJhY3RvciIpIFN1YnRyYWN0b3JTZXJ2aWNlIHNlcnZpY2U7CiAKLSAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApIAotCQl0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24geworICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkKKyAgICAgICAgdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgICAgZG9Qb3N0KHJlcSwgcmVzcCk7CiAgICAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDg4OTI1YjMuLjQ2ZTFhNTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSw3ICsxNSw3IEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJqYmktY29tcG9uZW50LXN1LWFzc2VtYmx5IiB2YWx1ZT0iZWpiX25vbmFtZV9IZWxsb0VKQl9jb25zdW1lcl9hc3NlbWJseSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9idWlsZC54bWwKaW5kZXggYzE5ZWFjNC4uMWQwODVmNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vYnVpbGQueG1sCkBAIC00NCw4ICs0NCw4IEBACiAKICAgICA8dGFyZ2V0IG5hbWU9InJlcG9ydC1mYWlsdXJlIj4KICAgICAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IlRlc3QgZmFpbGVkIi8+Ci0gICAgPC90YXJnZXQ+ICAgCQotICAgCisgICAgPC90YXJnZXQ+CisKICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95LXRlc3QiIGRlcGVuZHM9ImNsZWFuIj4KICAgICA8YmFzZW5hbWUgZmlsZT0iJHtzcmMtbmFtZX0iIHByb3BlcnR5PSJzZXJ2ZXIiIHN1ZmZpeD0iLmphdmEiLz4KICAgICA8ZGlybmFtZSBmaWxlPSIke3NyYy1uYW1lfSIgcHJvcGVydHk9ImRpcmVjdG9yeSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL2NsaWVudC9KQVhXU0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL2NsaWVudC9KQVhXU0NsaWVudC5qYXZhCmluZGV4IDU2YjMyMTYuLjNhZTE2M2UgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9jbGllbnQvSkFYV1NDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vY2xpZW50L0pBWFdTQ2xpZW50LmphdmEKQEAgLTI3LDE2ICsyNywxNiBAQAogCiAgICAgICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7Ci0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RJZCA9ICJqYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvIjsKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdElkID0gImpiaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8iOwogCiAgICAgICAgIEBXZWJTZXJ2aWNlUmVmCiAgICAgICAgIHN0YXRpYyBIZWxsb0VKQlNlcnZpY2Ugc2VydmljZTsKIAogICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JICAgIHN0YXQuYWRkRGVzY3JpcHRpb24odGVzdElkKTsKKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbih0ZXN0SWQpOwogICAgICAgICAgICAgSkFYV1NDbGllbnQgY2xpZW50ID0gbmV3IEpBWFdTQ2xpZW50KCk7CiAgICAgICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3MpOwotCSAgICBzdGF0LnByaW50U3VtbWFyeSh0ZXN0SWQpOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeSh0ZXN0SWQpOwogICAgICAgIH0KIAogICAgICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmdbXSBhcmdzKSB7CkBAIC00NCwxMSArNDQsMTEgQEAKICAgICAgICAgICAgICAgICBIZWxsbyBwb3J0ID0gc2VydmljZS5nZXRIZWxsb0VKQlBvcnQoKTsKICAgICAgICAgICAgICAgICBmb3IgKGludCBpPTA7aTwxMDtpKyspIHsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJldCA9IHBvcnQuc2F5SGVsbG8oIkFwcHNlcnZlciBUZXN0ZXIgISIpOwotCQkgICAgaWYocmV0LmluZGV4T2YoIldlYlN2Y1Rlc3QtSGVsbG8iKSA9PSAtMSkgeworICAgICAgICAgICAgaWYocmV0LmluZGV4T2YoIldlYlN2Y1Rlc3QtSGVsbG8iKSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCQkgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmV0KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LlBBU1MpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL2NsaWVudC9TT0FQRWpiQ29uc3VtZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9jbGllbnQvU09BUEVqYkNvbnN1bWVyLmphdmEKaW5kZXggN2NjZmVlNC4uMTg5MDA3OCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL2NsaWVudC9TT0FQRWpiQ29uc3VtZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vY2xpZW50L1NPQVBFamJDb25zdW1lci5qYXZhCkBAIC0yOSwxNSArMjksMTUgQEAKICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAotCXByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0SWQgPSAiamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsbyI7CisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RJZCA9ICJqYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvIjsKICAgICAgICAgQFdlYlNlcnZpY2VSZWYKICAgICAgICAgc3RhdGljIEhlbGxvRUpCU2VydmljZSBzZXJ2aWNlOwogCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQkgICAgc3RhdC5hZGREZXNjcmlwdGlvbih0ZXN0SWQpOworICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKHRlc3RJZCk7CiAgICAgICAgICAgICBTT0FQRWpiQ29uc3VtZXIgY2xpZW50ID0gbmV3IFNPQVBFamJDb25zdW1lcigpOwogICAgICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzKTsKLQkgICAgc3RhdC5wcmludFN1bW1hcnkodGVzdElkKTsKKyAgICAgICAgc3RhdC5wcmludFN1bW1hcnkodGVzdElkKTsKICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nW10gYXJncykgewpAQCAtNTEsMTEgKzUxLDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnRVUkkpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIEFmdGVyIHNldHRpbmcgZW5kcG9pbnQgYWRkcmVzcyBVUkkiKTsKICAgICAgICAgICAgICAgICBTdHJpbmcgcmV0ID0gcG9ydC5zYXlIZWxsbygiQXBwc2VydmVyIFRlc3RlciAhIik7Ci0JCWlmKHJldC5pbmRleE9mKCJXZWJTdmNUZXN0LUhlbGxvIikgPT0gLTEpIHsKKyAgICAgICAgaWYocmV0LmluZGV4T2YoIldlYlN2Y1Rlc3QtSGVsbG8iKSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJldCk7CiAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCQl9CisgICAgICAgIH0KICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocmV0KTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vY2xpZW50L1NPQVBFamJDb25zdW1lck5vbkh0dHBCQy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL2NsaWVudC9TT0FQRWpiQ29uc3VtZXJOb25IdHRwQkMuamF2YQppbmRleCBiNmY3ZmQxLi5iYzk2Y2Q2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vY2xpZW50L1NPQVBFamJDb25zdW1lck5vbkh0dHBCQy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9jbGllbnQvU09BUEVqYkNvbnN1bWVyTm9uSHR0cEJDLmphdmEKQEAgLTI4LDE2ICsyOCwxNiBAQAogCiAgICAgICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7Ci0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RJZCA9ICJqYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvIjsKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdElkID0gImpiaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8iOwogCiAgICAgICAgIEBXZWJTZXJ2aWNlUmVmCiAgICAgICAgIHN0YXRpYyBIZWxsb0VKQlNlcnZpY2Ugc2VydmljZTsKIAogICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JICAgIHN0YXQuYWRkRGVzY3JpcHRpb24odGVzdElkKTsKKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbih0ZXN0SWQpOwogICAgICAgICAgICAgU09BUEVqYkNvbnN1bWVyTm9uSHR0cEJDIGNsaWVudCA9IG5ldyBTT0FQRWpiQ29uc3VtZXJOb25IdHRwQkMoKTsKICAgICAgICAgICAgIGNsaWVudC5kb1Rlc3QoYXJncyk7Ci0JICAgIHN0YXQucHJpbnRTdW1tYXJ5KHRlc3RJZCk7CisgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KHRlc3RJZCk7CiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKQEAgLTUwLDExICs1MCwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50VVJJKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBBZnRlciBzZXR0aW5nIGVuZHBvaW50IGFkZHJlc3MgVVJJIik7CiAgICAgICAgICAgICAgICAgU3RyaW5nIHJldCA9IHBvcnQuc2F5SGVsbG8oIkFwcHNlcnZlciBUZXN0ZXIgISIpOwotCQlpZihyZXQuaW5kZXhPZigiV2ViU3ZjVGVzdC1IZWxsbyIpID09IC0xKSB7CisgICAgICAgIGlmKHJldC5pbmRleE9mKCJXZWJTdmNUZXN0LUhlbGxvIikgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXQpOwogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQkJfQorICAgICAgICB9CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJldCk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL2VuZHBvaW50L2pheHdzL0hlbGxvLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vZW5kcG9pbnQvamF4d3MvSGVsbG8uamF2YQppbmRleCBmZDRmNmYwLi4yMjZiZjVmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vZW5kcG9pbnQvamF4d3MvSGVsbG8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vZW5kcG9pbnQvamF4d3MvSGVsbG8uamF2YQpAQCAtMjIsNSArMjIsNSBAQAogdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZW5kcG9pbnQvamF4d3MiKQogcHVibGljIGludGVyZmFjZSBIZWxsbyB7CiAKLQlwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyB3aG8pOworICAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIHdobyk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL3NvYXAtYmluZGluZy1zdS1hbGFza2EvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbAppbmRleCA4NzYyYzRlLi4xM2FlNGYzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9zb2FwLWJpbmRpbmctc3UtYWxhc2thL2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKQEAgLTE5LDkgKzE5LDkgQEAKIAogPCEtLSBqYmkueG1sIGZpbGUgZm9yIHRoZSBTT0FQIGJpbmRpbmcgZGVwbG95bWVudHMgYmluZGluZy4gLS0+CiA8amJpCi0gICAgdmVyc2lvbj0iMS4wIiAKLSAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIiAKLSAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKKyAgICB2ZXJzaW9uPSIxLjAiCisgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIC4vamJpLnhzZCI+CiAgIDxzZXJ2aWNlLWFzc2VtYmx5PgogICAgIDxpZGVudGlmaWNhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9zb2FwLWJpbmRpbmctc3UtYWxhc2thL3N1L01FVEEtSU5GL2piaS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9zdS9NRVRBLUlORi9qYmkueG1sCmluZGV4IDhlZWM2MzYuLmZjZTI0N2QgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9zb2FwLWJpbmRpbmctc3UtYWxhc2thL3N1L01FVEEtSU5GL2piaS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL3NvYXAtYmluZGluZy1zdS1hbGFza2Evc3UvTUVUQS1JTkYvamJpLnhtbApAQCAtMTgsMTUgKzE4LDE1IEBACiAtLT4KIAogPGpiaSB2ZXJzaW9uPSIxLjAiCi0JIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAotCSB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIiAKLQkgeG1sbnM6amF2YWVzYj0iaHR0cDovL2phdmEuc3VuLmNvbSIKLQkgeG1sbnM6dG5zPSJodHRwOi8vZW5kcG9pbnQvamF4d3MiCi0JIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIGpiaS54c2QiPgotCTxzZXJ2aWNlcyBiaW5kaW5nLWNvbXBvbmVudD0idHJ1ZSI+CQkKKyAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIKKyAgICAgeG1sbnM6amF2YWVzYj0iaHR0cDovL2phdmEuc3VuLmNvbSIKKyAgICAgeG1sbnM6dG5zPSJodHRwOi8vZW5kcG9pbnQvamF4d3MiCisgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIGpiaS54c2QiPgorICAgIDxzZXJ2aWNlcyBiaW5kaW5nLWNvbXBvbmVudD0idHJ1ZSI+CiAgICAgICAgIDxjb25zdW1lcyBpbnRlcmZhY2UtbmFtZT0idG5zOkhlbGxvRUpCU2VydmljZUludGVyZmFjZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS1uYW1lPSJ0bnM6SGVsbG9FSkJTZXJ2aWNlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludC1uYW1lPSJIZWxsb0VKQlBvcnQiLz4KICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RzIHhtbG5zPSIiIHJvbGU9ImNvbnN1bWVyIiBmaWxlLW5hbWU9ImVuZHBvaW50cy54bWwiIHR5cGU9InhtbCIvPgotCTwvc2VydmljZXM+CisgICAgPC9zZXJ2aWNlcz4KIDwvamJpPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL3NvYXAtYmluZGluZy1zdS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL3NvYXAtYmluZGluZy1zdS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCmluZGV4IGM5NWJhOWEuLjllNzFhNjEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9zb2FwLWJpbmRpbmctc3UvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vc29hcC1iaW5kaW5nLXN1L2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKQEAgLTE5LDkgKzE5LDkgQEAKIAogPCEtLSBqYmkueG1sIGZpbGUgZm9yIHRoZSBTT0FQIGJpbmRpbmcgZGVwbG95bWVudHMgYmluZGluZy4gLS0+CiA8amJpCi0gICAgdmVyc2lvbj0iMS4wIiAKLSAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIiAKLSAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKKyAgICB2ZXJzaW9uPSIxLjAiCisgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIC4vamJpLnhzZCI+CiAgIDxzZXJ2aWNlLWFzc2VtYmx5PgogICAgIDxpZGVudGlmaWNhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9zb2FwLWJpbmRpbmctc3Uvc3UvTUVUQS1JTkYvamJpLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9zb2FwLWJpbmRpbmctc3Uvc3UvTUVUQS1JTkYvamJpLnhtbAppbmRleCAxNjU4ZDE2Li4wOTU2N2NjIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vc29hcC1iaW5kaW5nLXN1L3N1L01FVEEtSU5GL2piaS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL3NvYXAtYmluZGluZy1zdS9zdS9NRVRBLUlORi9qYmkueG1sCkBAIC0xOCwxNCArMTgsMTQgQEAKIC0tPgogCiA8amJpIHZlcnNpb249IjEuMCIKLQkgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCi0JIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiIAotCSB4bWxuczp0bnM9Imh0dHA6Ly9lbmRwb2ludC9qYXh3cyIKLQkgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgamJpLnhzZCI+Ci0JPHNlcnZpY2VzIGJpbmRpbmctY29tcG9uZW50PSJ0cnVlIj4JCQotCQk8Y29uc3VtZXMgaW50ZXJmYWNlLW5hbWU9InRuczpIZWxsb0VKQlNlcnZpY2VJbnRlcmZhY2UiCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtbmFtZT0idG5zOkhlbGxvRUpCU2VydmljZSIgCisgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiCisgICAgIHhtbG5zOnRucz0iaHR0cDovL2VuZHBvaW50L2pheHdzIgorICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSBqYmkueHNkIj4KKyAgICA8c2VydmljZXMgYmluZGluZy1jb21wb25lbnQ9InRydWUiPgorICAgICAgICA8Y29uc3VtZXMgaW50ZXJmYWNlLW5hbWU9InRuczpIZWxsb0VKQlNlcnZpY2VJbnRlcmZhY2UiCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtbmFtZT0idG5zOkhlbGxvRUpCU2VydmljZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQtbmFtZT0iSGVsbG9FSkJQb3J0Ii8+CiAgICAgICAgICAgICAgICAgPGFydGlmYWN0cyB4bWxucz0iIiByb2xlPSJjb25zdW1lciIgZmlsZS1uYW1lPSJlbmRwb2ludHMueG1sIiB0eXBlPSJ4bWwiLz4KLQk8L3NlcnZpY2VzPgorICAgIDwvc2VydmljZXM+CiA8L2piaT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9zb2FwLWJpbmRpbmctc3Uvc3UvZW5kcG9pbnRzLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9zb2FwLWJpbmRpbmctc3Uvc3UvZW5kcG9pbnRzLnhtbAppbmRleCBkMjQ5MmI2Li5kMzFmY2ZhIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vc29hcC1iaW5kaW5nLXN1L3N1L2VuZHBvaW50cy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL3NvYXAtYmluZGluZy1zdS9zdS9lbmRwb2ludHMueG1sCkBAIC0yMSwyMiArMjEsMjIgQEAKICAgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5zdW4uY29tL25zL2piaS9jb21wb25lbnQvc29hcC9kZXBsb3kgLi9lbmRwb2ludHMueHNkIj4KIDxzZXJ2aWNlLW5hbWU+Ci0JPG5hbWVzcGFjZS11cmk+aHR0cDovL2VuZHBvaW50L2pheHdzPC9uYW1lc3BhY2UtdXJpPgotCTxsb2NhbC1wYXJ0PkhlbGxvRUpCU2VydmljZTwvbG9jYWwtcGFydD4KKyAgICA8bmFtZXNwYWNlLXVyaT5odHRwOi8vZW5kcG9pbnQvamF4d3M8L25hbWVzcGFjZS11cmk+CisgICAgPGxvY2FsLXBhcnQ+SGVsbG9FSkJTZXJ2aWNlPC9sb2NhbC1wYXJ0PgogICAgIDwvc2VydmljZS1uYW1lPgogICAgIDxlbmRwb2ludC1uYW1lPkhlbGxvRUpCUG9ydDwvZW5kcG9pbnQtbmFtZT4KICAgICA8ZW5kcG9pbnQtcm9sZT5jb25zdW1lcjwvZW5kcG9pbnQtcm9sZT4KLSAgICA8YWRkcmVzcy1sb2NhdGlvbj5odHRwOi8vbG9jYWxob3N0OjgwODAvc29hcC9lamIvbm9uYW1lL2hlbGxvZW5kcG9pbnQ8L2FkZHJlc3MtbG9jYXRpb24+IAotICAgIDxzdHlsZT5odHRwOi8vd3d3LnczLm9yZy8yMDA0LzA4L3dzZGwvc3R5bGUvcnBjPC9zdHlsZT4gICAgICAgICAgICAgCisgICAgPGFkZHJlc3MtbG9jYXRpb24+aHR0cDovL2xvY2FsaG9zdDo4MDgwL3NvYXAvZWpiL25vbmFtZS9oZWxsb2VuZHBvaW50PC9hZGRyZXNzLWxvY2F0aW9uPgorICAgIDxzdHlsZT5odHRwOi8vd3d3LnczLm9yZy8yMDA0LzA4L3dzZGwvc3R5bGUvcnBjPC9zdHlsZT4KICAgICA8b3BlcmF0aW9uPgogICAgICAgICA8bmFtZT5zYXlIZWxsbzwvbmFtZT4KLSAgICAgICAgPG1lcD5odHRwOi8vd3d3LnczLm9yZy8yMDA0LzA4L3dzZGwvaW4tb3V0PC9tZXA+ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgPG1lcD5odHRwOi8vd3d3LnczLm9yZy8yMDA0LzA4L3dzZGwvaW4tb3V0PC9tZXA+CiAgICAgICAgIDxzb2FwYWN0aW9uPiIiPC9zb2FwYWN0aW9uPgogICAgICAgICA8aW5wdXQ+CiAgICAgICAgICAgPG5hbWVzcGFjZS11cmk+aHR0cDovL2VuZHBvaW50L2pheHdzPC9uYW1lc3BhY2UtdXJpPgogICAgICAgICA8L2lucHV0PgogICAgICAgICA8b3V0cHV0PgogICAgICAgICAgIDxuYW1lc3BhY2UtdXJpPmh0dHA6Ly9lbmRwb2ludC9qYXh3czwvbmFtZXNwYWNlLXVyaT4KLSAgICAgICAgPC9vdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgPC9vdXRwdXQ+CiAgICAgPC9vcGVyYXRpb24+Ci08L2VuZHBvaW50PiAKKzwvZW5kcG9pbnQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vc3RyZXNzLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9zdHJlc3MueG1sCmluZGV4IGQ2ZTM3MzEuLmY0MmQ2ZDYgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9zdHJlc3MueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9zdHJlc3MueG1sCkBAIC03Niw3ICs3Niw3IEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImFub3RoZXJfc2VydmxldCI+Ci0gICAgICAgPGFudCBpbmhlcml0QWxsPSJmYWxzZSIgZGlyPSIuL2Fub3RoZXJfc2VydmxldCIvPiAKKyAgICAgICA8YW50IGluaGVyaXRBbGw9ImZhbHNlIiBkaXI9Ii4vYW5vdGhlcl9zZXJ2bGV0Ii8+CiAgICAgPC90YXJnZXQ+CiAKIApAQCAtOTEsNiArOTEsNiBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJyZXBvcnQtZmFpbHVyZSI+CiAgICAgICAgICAgICA8ZWNobyBtZXNzYWdlPSJUZXN0IGZhaWxlZCIvPgotICAgIDwvdGFyZ2V0PiAgIAkKLSAgICAKKyAgICA8L3RhcmdldD4KKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL3N0cmVzc2NsaWVudC9TdHJlc3NDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9zdHJlc3NjbGllbnQvU3RyZXNzQ2xpZW50LmphdmEKaW5kZXggNjUxMWI0OC4uNjQ5YTI5YiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL3N0cmVzc2NsaWVudC9TdHJlc3NDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vc3RyZXNzY2xpZW50L1N0cmVzc0NsaWVudC5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiAKIGltcG9ydCBjb20uZXhhbXBsZS5zdWJ0cmFjdG9yLlN1YnRyYWN0b3JTZXJ2aWNlOwogaW1wb3J0IGNvbS5leGFtcGxlLnN1YnRyYWN0b3IuU3VidHJhY3RvcjsKLSAKKwogaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CiBpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwpAQCAtMzcsNDIgKzM3LDQyIEBACiAKIGltcG9ydCBjb20uc3VuLmVqdGUuY2NsLnJlcG9ydGVyLlNpbXBsZVJlcG9ydGVyQWRhcHRlcjsKIAotcHVibGljIGNsYXNzIFN0cmVzc0NsaWVudCBleHRlbmRzIFRocmVhZCB7IAorcHVibGljIGNsYXNzIFN0cmVzc0NsaWVudCBleHRlbmRzIFRocmVhZCB7CiAKICAgICBpbnQgY2xpZW50SWQ7CiAgICAgSGVsbG8gcG9ydDsKICAgICBIaSBwb3J0MTsKICAgICBTdWJ0cmFjdG9yIHBvcnQyOwogCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RJZCA9ICJqYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL3N0cmVzc2NsaWVudCI7CisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RJZCA9ICJqYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL3N0cmVzc2NsaWVudCI7CiAKICAgICAgc3RhdGljIGxvbmcgc3RhcnRUaW1lICA9IDA7CiAgICAgIHN0YXRpYyBpbnQgbWludXRlc1RvUnVuID0gMDsKICAgICAgc3RhdGljIGxvbmcgZW5kVGltZSA9IDA7Ci0JCSAgICAgCisKIAogICAgICAgIHByaXZhdGUgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgOwotICAgCisKICAgICAgICBIZWxsb0VKQlNlcnZpY2Ugc2VydmljZTsKICAgICAgICBIaUVKQlNlcnZpY2Ugc2VydmljZTE7CiAgICAgICAgU3VidHJhY3RvclNlcnZpY2Ugc2VydmljZTI7CiAKICAgICAgICBTdHJlc3NDbGllbnQoaW50IGksU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQpIHsKICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbnN0YW50aWF0aW5nIGEgc3RyZXNzIGNsaWVudCIpOwotCSAgIC8vc3RhdC5hZGREZXNjcmlwdGlvbigianNyMTA4LXNlcnZlcnNpZGUtd2Vic2VydmljZXMtZWpiLW5vbmFtZS1hbm5vdGF0aW9uIik7CisgICAgICAgLy9zdGF0LmFkZERlc2NyaXB0aW9uKCJqc3IxMDgtc2VydmVyc2lkZS13ZWJzZXJ2aWNlcy1lamItbm9uYW1lLWFubm90YXRpb24iKTsKICAgICAgICAgICAgY2xpZW50SWQgPSBpOwotCSAgIHRoaXMuc3RhdCA9IHN0YXQ7CisgICAgICAgdGhpcy5zdGF0ID0gc3RhdDsKICAgICAgICB9CiAKICAgICAgICB2b2lkIHNldFNlcnZpY2VIYW5kbGUoIEhlbGxvRUpCU2VydmljZSBzZXIsIEhpRUpCU2VydmljZSBzZXIxLCBTdWJ0cmFjdG9yU2VydmljZSBzZXIyKXsKICAgICAgICAgICAgc2VydmljZSA9IHNlcjsKLQkgICBzZXJ2aWNlMSA9IHNlcjE7Ci0JICAgc2VydmljZTIgPSBzZXIyOworICAgICAgIHNlcnZpY2UxID0gc2VyMTsKKyAgICAgICBzZXJ2aWNlMiA9IHNlcjI7CiAgICAgICAgfQogCiAgICAgICAgc3RhdGljIHZvaWQgc2V0VGltZVRvUnVuKCBpbnQgbWludXRlcyApIHsKICAgICAgICAgICAgbWludXRlc1RvUnVuID0gbWludXRlczsKLQkgICBzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICAgICBzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CkBAIC04NCw2MyArODQsNjMgQEAKICAgICAgICAgICAgICAgICBlbmRwb2ludFVSSSk7CiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjbGllbnRJZCArICI6IiArICIgQWZ0ZXIgc2V0dGluZyBlbmRwb2ludCBhZGRyZXNzIFVSSSIpOwogCi0JICAgIHBvcnQxID0gc2VydmljZTEuZ2V0SGlFSkJQb3J0KCk7Ci0JICAgIEJpbmRpbmdQcm92aWRlciBzdHViMSA9IChCaW5kaW5nUHJvdmlkZXIpcG9ydDE7CisgICAgICAgIHBvcnQxID0gc2VydmljZTEuZ2V0SGlFSkJQb3J0KCk7CisgICAgICAgIEJpbmRpbmdQcm92aWRlciBzdHViMSA9IChCaW5kaW5nUHJvdmlkZXIpcG9ydDE7CiAgICAgICAgICAgICBTdHJpbmcgZW5kcG9pbnRVUkkxID0iaHR0cDovL2xvY2FsaG9zdDoxMjAxNy9IaUVKQlBvcnQiOwogICAgICAgICAgICAgc3R1YjEuZ2V0UmVxdWVzdENvbnRleHQoKS5wdXQoQmluZGluZ1Byb3ZpZGVyLkVORFBPSU5UX0FERFJFU1NfUFJPUEVSVFksCi0gICAgICAgIAkJICAgICAgICAgICAgICAgICAgZW5kcG9pbnRVUkkxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludFVSSTEpOwogCi0JICAgICBwb3J0MiA9IHNlcnZpY2UyLmdldFN1YnRyYWN0b3JQb3J0KCk7Ci0JICAgICBCaW5kaW5nUHJvdmlkZXIgc3R1YjIgPSAoQmluZGluZ1Byb3ZpZGVyKXBvcnQyOyAKKyAgICAgICAgIHBvcnQyID0gc2VydmljZTIuZ2V0U3VidHJhY3RvclBvcnQoKTsKKyAgICAgICAgIEJpbmRpbmdQcm92aWRlciBzdHViMiA9IChCaW5kaW5nUHJvdmlkZXIpcG9ydDI7CiAgICAgICAgICAgICAgU3RyaW5nIGVuZHBvaW50VVJJMiA9Imh0dHA6Ly9sb2NhbGhvc3Q6MTIwMTgvc3VidHJhY3RvcmVuZHBvaW50IjsKICAgICAgICAgICAgICBzdHViMi5nZXRSZXF1ZXN0Q29udGV4dCgpLnB1dChCaW5kaW5nUHJvdmlkZXIuRU5EUE9JTlRfQUREUkVTU19QUk9QRVJUWSwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludFVSSTIpOwotCQkgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnRVUkkyKTsKIAotCSAgIHdoaWxlKChlbmRUaW1lIC0gc3RhcnRUaW1lKSA8IG1pbnV0ZXNUb1J1bio2MCoxMDAwKSB7CisKKyAgICAgICB3aGlsZSgoZW5kVGltZSAtIHN0YXJ0VGltZSkgPCBtaW51dGVzVG9SdW4qNjAqMTAwMCkgewogICAgICAgICAgICAgICAgLy8gSXRlcmF0aXZlIHRlc3RlciBmb3Igc3RyZXNzLCBwZXIgVGhyZWFkCiAgICAgICAgICAgICAgICBmb3IgKCBpbnQgaT0wIDsgaSA8IDEwOyBpKyspCi0JICAgICAgICAgICBkb1Rlc3QoIlN0cmVzcyBUZXN0ZXIiLGkpOwotCSAgICAgICBlbmRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JICAgfQorICAgICAgICAgICAgICAgZG9UZXN0KCJTdHJlc3MgVGVzdGVyIixpKTsKKyAgICAgICAgICAgZW5kVGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwogICAgICAgIH0KLSAgICAgICAgIAorICAgICAgIH0KKwogICAgICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmcgdG9TZW5kLCBpbnQgaWQpIHsKICAgICAgICAgICAgIHRyeSB7Ci0JICAgICAgICBJbnRlZ2VyIGkgPSAoSW50ZWdlcilpZDsKKyAgICAgICAgICAgIEludGVnZXIgaSA9IChJbnRlZ2VyKWlkOwogCiAgICAgICAgICAgICAgICAgU3RyaW5nIHJldCA9IHBvcnQuc2F5SGVsbG8odG9TZW5kK2kpOwotCQlTdHJpbmcgcmV0MSA9IHBvcnQxLnNheUhpKHRvU2VuZCtpKTsKLQkJaW50IHJlcyA9IHBvcnQyLmFkZCg1LDIpOworICAgICAgICBTdHJpbmcgcmV0MSA9IHBvcnQxLnNheUhpKHRvU2VuZCtpKTsKKyAgICAgICAgaW50IHJlcyA9IHBvcnQyLmFkZCg1LDIpOwogCi0JCWlmKHJldC5pbmRleE9mKCJXZWJTdmNUZXN0LUhlbGxvIikgPT0gLTEgfHwgcmV0LmluZGV4T2YoaS50b1N0cmluZygpKSA9PSAtMSkgeworICAgICAgICBpZihyZXQuaW5kZXhPZigiV2ViU3ZjVGVzdC1IZWxsbyIpID09IC0xIHx8IHJldC5pbmRleE9mKGkudG9TdHJpbmcoKSkgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGNsaWVudElkICsgIjoiICsgIlVuZXhwZWN0ZWQgZ3JlZXRpbmcgIiArIHJldCk7CiAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5GQUlMKTsKLQkgICAgICAgICAgICBzdGF0LnByaW50U3VtbWFyeSh0ZXN0SWQpOworICAgICAgICAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KHRlc3RJZCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQkJfQotCQkvL3Bhc3MoKTsKKyAgICAgICAgfQorICAgICAgICAvL3Bhc3MoKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oY2xpZW50SWQgKyAiOiIgKyByZXQpOwogCi0JCSBpZihyZXQxLmluZGV4T2YoIldlYlN2Y1Rlc3QtSGkiKSA9PSAtMSB8fCByZXQxLmluZGV4T2YoaS50b1N0cmluZygpKSA9PSAtMSkgewotCSAgICAgICAJICAgICBTeXN0ZW0ub3V0LnByaW50bG4oY2xpZW50SWQgKyAiOiIgKyAiVW5leHBlY3RlZCBncmVldGluZyAiICsgcmV0MSk7Ci0JCSAgICAgc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LkZBSUwpOwotCQkgICAgIHJldHVybjsKLQkJIH0KLQkJIC8vcGFzcygpOwotCQkgU3lzdGVtLm91dC5wcmludGxuKGNsaWVudElkICsgIjoiICsgcmV0MSk7CisgICAgICAgICBpZihyZXQxLmluZGV4T2YoIldlYlN2Y1Rlc3QtSGkiKSA9PSAtMSB8fCByZXQxLmluZGV4T2YoaS50b1N0cmluZygpKSA9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oY2xpZW50SWQgKyAiOiIgKyAiVW5leHBlY3RlZCBncmVldGluZyAiICsgcmV0MSk7CisgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LkZBSUwpOworICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgIH0KKyAgICAgICAgIC8vcGFzcygpOworICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGNsaWVudElkICsgIjoiICsgcmV0MSk7CiAKLQkJIGlmKCByZXMgIT0gMykgewotCSAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGNsaWVudElkICsgIjoiICsgIlVuZXhwZWN0ZWQgcmVzdWx0ICIgKyByZXMpOwotCQkgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsIHN0YXQuRkFJTCk7Ci0JCSAgICAgIHJldHVybjsKLQkgICAgICAgICB9CisgICAgICAgICBpZiggcmVzICE9IDMpIHsKKyAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjbGllbnRJZCArICI6IiArICJVbmV4cGVjdGVkIHJlc3VsdCAiICsgcmVzKTsKKyAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LkZBSUwpOworICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAvL3Bhc3MoKTsKLQkJIFN5c3RlbS5vdXQucHJpbnRsbihjbGllbnRJZCArICJSZXN1bHQgaXMgOiIgKyByZXMpOworICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGNsaWVudElkICsgIlJlc3VsdCBpcyA6IiArIHJlcyk7CiAKLQkgICAgIH0gIGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICB9ICBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5GQUlMKTsKLQkgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KHRlc3RJZCk7CisgICAgICAgICAgICBzdGF0LnByaW50U3VtbWFyeSh0ZXN0SWQpOwogICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL3N0cmVzc2NsaWVudC9TdHJlc3NTT0FQRWpiQ29uc3VtZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9zdHJlc3NjbGllbnQvU3RyZXNzU09BUEVqYkNvbnN1bWVyLmphdmEKaW5kZXggZDBkZTY5NC4uZGVmYTkyOSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvZWpiL2hlbGxvL3N0cmVzc2NsaWVudC9TdHJlc3NTT0FQRWpiQ29uc3VtZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci9lamIvaGVsbG8vc3RyZXNzY2xpZW50L1N0cmVzc1NPQVBFamJDb25zdW1lci5qYXZhCkBAIC0zMSwxMiArMzEsMTIgQEAKIAogICAgICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwotCXByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0SWQgPSAiamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9zdHJlc3NjbGllbnQiOworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0SWQgPSAiamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL2VqYi9oZWxsby9zdHJlc3NjbGllbnQiOwogCiAgICAgICAgIEBXZWJTZXJ2aWNlUmVmCiAgICAgICAgIHN0YXRpYyBIZWxsb0VKQlNlcnZpY2Ugc2VydmljZTsKIAotCSBAV2ViU2VydmljZVJlZgorICAgICBAV2ViU2VydmljZVJlZgogICAgICAgICAgc3RhdGljIEhpRUpCU2VydmljZSBzZXJ2aWNlMTsKIAogICAgICAgICAgQFdlYlNlcnZpY2VSZWYod3NkbExvY2F0aW9uPSJodHRwOi8vbG9jYWxob3N0OjgwODAvc3VidHJhY3RvcnNlcnZpY2Uvd2Vic2VydmljZS9TdWJ0cmFjdG9yU2VydmljZT9XU0RMIikKQEAgLTQ0LDMyICs0NCwzMiBAQAogCiAKICAgICAgICAgc3RhdGljIGxvbmcgc3RhcnRUaW1lICA9IDA7Ci0Jc3RhdGljIGludCBtaW51dGVzVG9SdW4gPSAwOwotCXN0YXRpYyBsb25nIGVuZFRpbWUgPSAwOworICAgIHN0YXRpYyBpbnQgbWludXRlc1RvUnVuID0gMDsKKyAgICBzdGF0aWMgbG9uZyBlbmRUaW1lID0gMDsKIAogICAgICAgICBTdHJlc3NTT0FQRWpiQ29uc3VtZXIoKSB7Ci0JICAgIC8vY3JlYXRlIG11bHRpcGxlIGluc3RhbmNlcyBvZiBpdGVyYXRpdmUgdGVzdCBjbGllbnRzLgorICAgICAgICAvL2NyZWF0ZSBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgaXRlcmF0aXZlIHRlc3QgY2xpZW50cy4KICAgICAgICAgICAgIFN0cmVzc0NsaWVudCBjbGllbnRzW10gPSBuZXcgU3RyZXNzQ2xpZW50WzEwMF07CiAgICAgICAgICAgICBmb3IoaW50IGkgPSAwIDsgaSA8IDEwMCA7IGkrKykgewotCSAgICAgICAgY2xpZW50c1tpXSA9IG5ldyBTdHJlc3NDbGllbnQoaSxzdGF0KTsKKyAgICAgICAgICAgIGNsaWVudHNbaV0gPSBuZXcgU3RyZXNzQ2xpZW50KGksc3RhdCk7CiAgICAgICAgICAgICAgICAgY2xpZW50c1tpXS5zZXRTZXJ2aWNlSGFuZGxlKHNlcnZpY2Usc2VydmljZTEsc2VydmljZTIpOwogICAgICAgICAgICAgICAgIGNsaWVudHNbaV0uc3RhcnQoKTsKICAgICAgICAgICAgIH0KLQl9CisgICAgfQogICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbih0ZXN0SWQpOwotCSAgIAotCSAgIGlmKCBhcmdzICE9IG51bGwgJiYgYXJncy5sZW5ndGggPiAwICYmIGFyZ3NbMF0gIT0gbnVsbCkgCi0JICAgICAgIHRyeSB7CisKKyAgICAgICBpZiggYXJncyAhPSBudWxsICYmIGFyZ3MubGVuZ3RoID4gMCAmJiBhcmdzWzBdICE9IG51bGwpCisgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgbWludXRlc1RvUnVuID0gSW50ZWdlci5wYXJzZUludChhcmdzWzBdKTsKLQkgICAgICAgfSBjYXRjaChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbnVtRXgpIHsKLQkJICAgbWludXRlc1RvUnVuID0gMzsKLQkgICAgICAgfQotCSAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGltZSB0byBydW4gaXM6ICIrbWludXRlc1RvUnVuKTsgCi0JICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCgyMDAwKTsKLQkgICBTdHJlc3NDbGllbnQuc2V0VGltZVRvUnVuKG1pbnV0ZXNUb1J1bik7CisgICAgICAgICAgIH0gY2F0Y2goTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG51bUV4KSB7CisgICAgICAgICAgIG1pbnV0ZXNUb1J1biA9IDM7CisgICAgICAgICAgIH0KKyAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRpbWUgdG8gcnVuIGlzOiAiK21pbnV0ZXNUb1J1bik7CisgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zbGVlcCgyMDAwKTsKKyAgICAgICBTdHJlc3NDbGllbnQuc2V0VGltZVRvUnVuKG1pbnV0ZXNUb1J1bik7CiAgICAgICAgICAgIFN0cmVzc1NPQVBFamJDb25zdW1lciBzdHJlc3NDbGllbnQgPSBuZXcgU3RyZXNzU09BUEVqYkNvbnN1bWVyKCk7CiAgICAgICAgICAgIC8vc3RhdC5hZGRTdGF0dXMoImpzcjEwOC1zZXJ2ZXJzaWRlLXdlYnNlcnZpY2VzLWVqYi1ub25hbWUtYW5ub3RhdGlvbiIsIHN0YXQuUEFTUyk7Ci0JICAgLy9zdGF0LnByaW50U3VtbWFyeSgianNyMTA4LXNlcnZlcnNpZGUtd2Vic2VydmljZXMtZWpiLW5vbmFtZS1hbm5vdGF0aW9uIik7CisgICAgICAgLy9zdGF0LnByaW50U3VtbWFyeSgianNyMTA4LXNlcnZlcnNpZGUtd2Vic2VydmljZXMtZWpiLW5vbmFtZS1hbm5vdGF0aW9uIik7CiAgICAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvd2ViL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci93ZWIvYnVpbGQucHJvcGVydGllcwppbmRleCA2ODk4N2JkLi43MjAwZjMyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci93ZWIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci93ZWIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjYWxjdWxhdG9yc2VydmljZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iLi93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iamJpLWNvbXBvbmVudC1zdS1hc3NlbWJseSIgdmFsdWU9IndlYl9jYWxjdWxhdG9yX2NvbnN1bWVyX2Fzc2VtYmx5Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci93ZWIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvd2ViL2J1aWxkLnhtbAppbmRleCA0MDRmZmY4Li5kMDQxODg5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci93ZWIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL3dlYi9idWlsZC54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICAmamF4d3NUb29sczsKICAgICAmamJpY29tbW9uOwogICAgICZqYmlwcm9wZXJ0aWVzOwotICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJjbGVhbiwgc2V0dXAsIHJ1bnRlc3QsdW5kZXBsb3kiLz4gCisgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImNsZWFuLCBzZXR1cCwgcnVudGVzdCx1bmRlcGxveSIvPgogCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KQEAgLTg1LDcgKzg1LDcgQEAKICAgICAgIDxlY2hvIG1lc3NhZ2U9IlJ1bm5pbmcgbmVnYXRpdmUgdGVzdCBieSBzZXR0aW5nIGpiaS1lbmFibGVkIGZsYWcgdG8gZmFsc2UiLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVudGVzdC1qYmktZW5hYmxlZC1mYWxzZSIvPgogICAgICAgPGVjaG8gbWVzc2FnZT0iUnVubmluZyBKQVhXUyBjbGllbnQiLz4KLSAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVudGVzdC1qYXh3cyIvPiAKKyAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVudGVzdC1qYXh3cyIvPgogICAgICAgPGVjaG8gbWVzc2FnZT0iUnVubmluZyBwb3NpdGl2ZSB0ZXN0IGJ5IHNldHRpbmcgamJpLWVuYWJsZWQgZmxhZyB0byB0cnVlIi8+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bnRlc3QtamJpLWVuYWJsZWQtdHJ1ZSIvPgogCkBAIC0xMDEsNyArMTAxLDcgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgogICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9InNlcnZlci5hcHBsaWNhdGlvbnMud2ViLW1vZHVsZS4ke2FwcG5hbWV9LXdlYi53ZWItc2VydmljZS1lbmRwb2ludC5DYWxjdWxhdG9yLmpiaS1lbmFibGVkPWZhbHNlIi8+Ci0gICAgICA8L2FudGNhbGw+IAorICAgICAgPC9hbnRjYWxsPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4tY2xpZW50Ij4KICAgICAgICAgPHBhcmFtIG5hbWU9ImNsaWVudC1jbGFzcyIgdmFsdWU9ImNsaWVudC5TT0FQV2ViQ29uc3VtZXJOb25IdHRwQkMiLz4KICAgICAgICAgPHBhcmFtIG5hbWU9Im90aGVyLWFyZ3MiIHZhbHVlPSJqYmktZW5hYmxlZC1mYWxzZSIvPgpAQCAtMTEyLDE0ICsxMTIsMTQgQEAKICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYXNhZG1pbi1jb21tb24iPgogICAgICAgICA8cGFyYW0gbmFtZT0iYWRtaW4uY29tbWFuZCIgdmFsdWU9InNldCIvPgogICAgICAgICA8cGFyYW0gbmFtZT0ib3BlcmFuZC5wcm9wcyIgdmFsdWU9InNlcnZlci5hcHBsaWNhdGlvbnMud2ViLW1vZHVsZS4ke2FwcG5hbWV9LXdlYi53ZWItc2VydmljZS1lbmRwb2ludC5DYWxjdWxhdG9yLmpiaS1lbmFibGVkPXRydWUiLz4KLSAgICAgIDwvYW50Y2FsbD4gCisgICAgICA8L2FudGNhbGw+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bnRlc3Qtc29hcC1iaW5kaW5nIi8+CiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBuYW1lPSJjb25maWd1cmUtd2Vic2VydmljZS1tYW5hZ2VtZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFzYWRtaW4tY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9ImFkbWluLmNvbW1hbmQiIHZhbHVlPSJjb25maWd1cmUtd2Vic2VydmljZS1tYW5hZ2VtZW50Ii8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJvcGVyYW5kLnByb3BzIiB2YWx1ZT0iJHthcHBuYW1lfS13ZWIjQ2FsY3VsYXRvciIvPgotICAgICAgPC9hbnRjYWxsPiAKKyAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvd2ViL2NsaWVudC9KQVhXU0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvd2ViL2NsaWVudC9KQVhXU0NsaWVudC5qYXZhCmluZGV4IDg5NDYyNDMuLjMzMzlmZDQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL3dlYi9jbGllbnQvSkFYV1NDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci93ZWIvY2xpZW50L0pBWFdTQ2xpZW50LmphdmEKQEAgLTI3LDE4ICsyNywxOCBAQAogCiAgICAgICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7Ci0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RJZCA9ICJqYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvd2ViL2NsaWVudCI7Ci0gICAgICAgIAorICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0SWQgPSAiamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL3dlYi9jbGllbnQiOworCiAgICAgICAgICAgICBAV2ViU2VydmljZVJlZih3c2RsTG9jYXRpb249Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9jYWxjdWxhdG9yc2VydmljZS93ZWJzZXJ2aWNlL0NhbGN1bGF0b3JTZXJ2aWNlP1dTREwiKQogICAgICAgICAgICAgc3RhdGljIENhbGN1bGF0b3JTZXJ2aWNlIHNlcnZpY2U7CiAKICAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICAgICAgdHJ5IHsKLQkgICAgc3RhdC5hZGREZXNjcmlwdGlvbih0ZXN0SWQpOworICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKHRlc3RJZCk7CiAgICAgICAgICAgICAvL0NhbGN1bGF0b3JTZXJ2aWNlIHNlcnZpY2UgPSBuZXcgQ2FsY3VsYXRvclNlcnZpY2UoKTsKICAgICAgICAgICAgIEpBWFdTQ2xpZW50IGNsaWVudCA9IG5ldyBKQVhXU0NsaWVudCgpOwogICAgICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzLCBzZXJ2aWNlKTsKLQkgICAgc3RhdC5wcmludFN1bW1hcnkodGVzdElkKTsKKyAgICAgICAgc3RhdC5wcmludFN1bW1hcnkodGVzdElkKTsKICAgICAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICB9CkBAIC01MCwxMSArNTAsMTEgQEAKICAgICAgICAgICAgICAgICBDYWxjdWxhdG9yIHBvcnQgPSBzZXJ2aWNlLmdldENhbGN1bGF0b3JQb3J0KCk7CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaT0wO2k8MTA7aSsrKSB7CiAgICAgICAgICAgICAgICAgICAgIGludCByZXQgPSBwb3J0LmFkZChpLCAxMCk7Ci0JCSAgICBpZihyZXQgIT0gKGkgKyAxMCkpIHsKKyAgICAgICAgICAgIGlmKHJldCAhPSAoaSArIDEwKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCQkgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBBZGRpbmcgOiAiICsgaSArICIgKyAxMCA9ICIgICsgcmV0KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LlBBU1MpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvd2ViL2NsaWVudC9TT0FQV2ViQ29uc3VtZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL3dlYi9jbGllbnQvU09BUFdlYkNvbnN1bWVyLmphdmEKaW5kZXggYTkwODhkMC4uODU3OTI1NSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvd2ViL2NsaWVudC9TT0FQV2ViQ29uc3VtZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci93ZWIvY2xpZW50L1NPQVBXZWJDb25zdW1lci5qYXZhCkBAIC0yOCw0MiArMjgsNDIgQEAKICAgICBzdGF0aWMgQ2FsY3VsYXRvclNlcnZpY2Ugc2VydmljZTsKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwotCXByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0SWQgPSAiamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL3dlYi9jbGllbnQiOworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0SWQgPSAiamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL3dlYi9jbGllbnQiOwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24odGVzdElkICsgYXJnc1swXSk7Ci0JU09BUFdlYkNvbnN1bWVyIGNsaWVudCA9IG5ldyBTT0FQV2ViQ29uc3VtZXIoKTsKLQljbGllbnQuYWRkVXNpbmdTT0FQQ29uc3VtZXIoYXJncyk7CisgICAgU09BUFdlYkNvbnN1bWVyIGNsaWVudCA9IG5ldyBTT0FQV2ViQ29uc3VtZXIoKTsKKyAgICBjbGllbnQuYWRkVXNpbmdTT0FQQ29uc3VtZXIoYXJncyk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KHRlc3RJZCArIGFyZ3NbMF0pOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBhZGRVc2luZ1NPQVBDb25zdW1lcihTdHJpbmdbXSBhcmdzKSB7Ci0JY29tLmV4YW1wbGUuY2FsY3VsYXRvci5DYWxjdWxhdG9yIHBvcnQ9IG51bGw7Ci0JdHJ5IHsKKyAgICBjb20uZXhhbXBsZS5jYWxjdWxhdG9yLkNhbGN1bGF0b3IgcG9ydD0gbnVsbDsKKyAgICB0cnkgewogCi0JCVN5c3RlbS5vdXQucHJpbnRsbigiIEFmdGVyIGNyZWF0aW5nIENhbGN1bGF0b3JTZXJ2aWNlIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIEFmdGVyIGNyZWF0aW5nIENhbGN1bGF0b3JTZXJ2aWNlIik7CiAKICAgICAgICAgICAgICAgICBwb3J0ID0gc2VydmljZS5nZXRDYWxjdWxhdG9yUG9ydCgpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIiBBZnRlciBnZXR0aW5nIHBvcnQiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgQWZ0ZXIgZ2V0dGluZyBwb3J0Iik7CiAKLQkJLy8gR2V0IFN0dWIKLQkJQmluZGluZ1Byb3ZpZGVyIHN0dWIgPSAoQmluZGluZ1Byb3ZpZGVyKXBvcnQ7Ci0JCS8vU3RyaW5nIGVuZHBvaW50VVJJID0iaHR0cDovL2xvY2FsaG9zdDo4MDgwL3NvYXAvd2ViL2NhbGN1bGF0b3JlbmRwb2ludCI7Ci0JCVN0cmluZyBlbmRwb2ludFVSSSA9Imh0dHA6Ly9sb2NhbGhvc3Q6MTIwMTEvY2FsY3VsYXRvcmVuZHBvaW50IjsKLQkJc3R1Yi5nZXRSZXF1ZXN0Q29udGV4dCgpLnB1dChCaW5kaW5nUHJvdmlkZXIuRU5EUE9JTlRfQUREUkVTU19QUk9QRVJUWSwKLQkJICAgICAgZW5kcG9pbnRVUkkpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIiBBZnRlciBzZXR0aW5nIGVuZHBvaW50IGFkZHJlc3MgVVJJIik7Ci0JICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBVc2luZyBTT0FQIGJpbmRpbmcncyBjb25zdW1lciB0byBhZGQgMSArIDIgPSAiICsgcG9ydC5hZGQoMSwyKSk7CisgICAgICAgIC8vIEdldCBTdHViCisgICAgICAgIEJpbmRpbmdQcm92aWRlciBzdHViID0gKEJpbmRpbmdQcm92aWRlcilwb3J0OworICAgICAgICAvL1N0cmluZyBlbmRwb2ludFVSSSA9Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9zb2FwL3dlYi9jYWxjdWxhdG9yZW5kcG9pbnQiOworICAgICAgICBTdHJpbmcgZW5kcG9pbnRVUkkgPSJodHRwOi8vbG9jYWxob3N0OjEyMDExL2NhbGN1bGF0b3JlbmRwb2ludCI7CisgICAgICAgIHN0dWIuZ2V0UmVxdWVzdENvbnRleHQoKS5wdXQoQmluZGluZ1Byb3ZpZGVyLkVORFBPSU5UX0FERFJFU1NfUFJPUEVSVFksCisgICAgICAgICAgICAgIGVuZHBvaW50VVJJKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgQWZ0ZXIgc2V0dGluZyBlbmRwb2ludCBhZGRyZXNzIFVSSSIpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgVXNpbmcgU09BUCBiaW5kaW5nJ3MgY29uc3VtZXIgdG8gYWRkIDEgKyAyID0gIiArIHBvcnQuYWRkKDEsMikpOwogICAgICAgICAgICAgICAgIGlmKGFyZ3NbMF0uZXF1YWxzKCJqYmktZW5hYmxlZC10cnVlIikpCi0JCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsIHN0YXQuUEFTUyk7Ci0gICAgICAgICAgICAgICAgZWxzZSAKLQkgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsIHN0YXQuRkFJTCk7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsIHN0YXQuUEFTUyk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5GQUlMKTsKIAotCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICAgICAgaWYoYXJnc1swXS5lcXVhbHMoImpiaS1lbmFibGVkLWZhbHNlIikpCiAgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgICAgICBlbHNlCi0JCSAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsIHN0YXQuRkFJTCk7Ci0JfQorICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LkZBSUwpOworICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci93ZWIvY2xpZW50L1NPQVBXZWJDb25zdW1lck5vbkh0dHBCQy5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvd2ViL2NsaWVudC9TT0FQV2ViQ29uc3VtZXJOb25IdHRwQkMuamF2YQppbmRleCBmMzM2YjhkLi4yOWQwZjY3IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci93ZWIvY2xpZW50L1NPQVBXZWJDb25zdW1lck5vbkh0dHBCQy5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL3dlYi9jbGllbnQvU09BUFdlYkNvbnN1bWVyTm9uSHR0cEJDLmphdmEKQEAgLTI4LDQyICsyOCw0MiBAQAogICAgIHN0YXRpYyBDYWxjdWxhdG9yU2VydmljZSBzZXJ2aWNlOwogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7Ci0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RJZCA9ICJqYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvd2ViL2NsaWVudCI7CisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RJZCA9ICJqYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvd2ViL2NsaWVudCI7CiAKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKHRlc3RJZCArIGFyZ3NbMF0pOwotCVNPQVBXZWJDb25zdW1lck5vbkh0dHBCQyBjbGllbnQgPSBuZXcgU09BUFdlYkNvbnN1bWVyTm9uSHR0cEJDKCk7Ci0JY2xpZW50LmFkZFVzaW5nU09BUENvbnN1bWVyKGFyZ3MpOworICAgIFNPQVBXZWJDb25zdW1lck5vbkh0dHBCQyBjbGllbnQgPSBuZXcgU09BUFdlYkNvbnN1bWVyTm9uSHR0cEJDKCk7CisgICAgY2xpZW50LmFkZFVzaW5nU09BUENvbnN1bWVyKGFyZ3MpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSh0ZXN0SWQgKyBhcmdzWzBdKTsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgYWRkVXNpbmdTT0FQQ29uc3VtZXIoU3RyaW5nW10gYXJncykgewotCWNvbS5leGFtcGxlLmNhbGN1bGF0b3IuQ2FsY3VsYXRvciBwb3J0PSBudWxsOwotCXRyeSB7CisgICAgY29tLmV4YW1wbGUuY2FsY3VsYXRvci5DYWxjdWxhdG9yIHBvcnQ9IG51bGw7CisgICAgdHJ5IHsKIAotCQlTeXN0ZW0ub3V0LnByaW50bG4oIiBBZnRlciBjcmVhdGluZyBDYWxjdWxhdG9yU2VydmljZSIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBBZnRlciBjcmVhdGluZyBDYWxjdWxhdG9yU2VydmljZSIpOwogCiAgICAgICAgICAgICAgICAgcG9ydCA9IHNlcnZpY2UuZ2V0Q2FsY3VsYXRvclBvcnQoKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCIgQWZ0ZXIgZ2V0dGluZyBwb3J0Iik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIEFmdGVyIGdldHRpbmcgcG9ydCIpOwogCi0JCS8vIEdldCBTdHViCi0JCUJpbmRpbmdQcm92aWRlciBzdHViID0gKEJpbmRpbmdQcm92aWRlcilwb3J0OwotCQlTdHJpbmcgZW5kcG9pbnRVUkkgPSJodHRwOi8vbG9jYWxob3N0OjEyMDExL2NhbGN1bGF0b3JlbmRwb2ludCI7Ci0JCXN0dWIuZ2V0UmVxdWVzdENvbnRleHQoKS5wdXQoQmluZGluZ1Byb3ZpZGVyLkVORFBPSU5UX0FERFJFU1NfUFJPUEVSVFksCi0JCSAgICAgIGVuZHBvaW50VVJJKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCIgQWZ0ZXIgc2V0dGluZyBlbmRwb2ludCBhZGRyZXNzIFVSSSIpOwotCSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgVXNpbmcgU09BUCBiaW5kaW5nJ3MgY29uc3VtZXIgdG8gYWRkIDEgKyAyID0gIiArIHBvcnQuYWRkKDEsMikpOworICAgICAgICAvLyBHZXQgU3R1YgorICAgICAgICBCaW5kaW5nUHJvdmlkZXIgc3R1YiA9IChCaW5kaW5nUHJvdmlkZXIpcG9ydDsKKyAgICAgICAgU3RyaW5nIGVuZHBvaW50VVJJID0iaHR0cDovL2xvY2FsaG9zdDoxMjAxMS9jYWxjdWxhdG9yZW5kcG9pbnQiOworICAgICAgICBzdHViLmdldFJlcXVlc3RDb250ZXh0KCkucHV0KEJpbmRpbmdQcm92aWRlci5FTkRQT0lOVF9BRERSRVNTX1BST1BFUlRZLAorICAgICAgICAgICAgICBlbmRwb2ludFVSSSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIEFmdGVyIHNldHRpbmcgZW5kcG9pbnQgYWRkcmVzcyBVUkkiKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFVzaW5nIFNPQVAgYmluZGluZydzIGNvbnN1bWVyIHRvIGFkZCAxICsgMiA9ICIgKyBwb3J0LmFkZCgxLDIpKTsKICAgICAgICAgICAgICAgICBpZihhcmdzWzBdLmVxdWFscygiamJpLWVuYWJsZWQtdHJ1ZSIpKQotCQkgICAgc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LlBBU1MpOwotICAgICAgICAgICAgICAgIGVsc2UgCi0JICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LkZBSUwpOworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LlBBU1MpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsIHN0YXQuRkFJTCk7CiAKLQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JCWUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgICAgIGlmKGFyZ3NbMF0uZXF1YWxzKCJqYmktZW5hYmxlZC1mYWxzZSIpKQogICAgICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICAgICAgZWxzZQotCQkgICAgc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LkZBSUwpOwotCX0KKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5GQUlMKTsKKyAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvd2ViL2VuZHBvaW50L0NhbGN1bGF0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL3dlYi9lbmRwb2ludC9DYWxjdWxhdG9yLmphdmEKaW5kZXggZjU5ZjQzMC4uMzZhOTlkOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvd2ViL2VuZHBvaW50L0NhbGN1bGF0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci93ZWIvZW5kcG9pbnQvQ2FsY3VsYXRvci5qYXZhCkBAIC0yNSwxMyArMjUsMTMgQEAKICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9leGFtcGxlLmNvbS9DYWxjdWxhdG9yIgogKQogcHVibGljIGNsYXNzIENhbGN1bGF0b3IgewotCXB1YmxpYyBDYWxjdWxhdG9yKCkge30KKyAgICBwdWJsaWMgQ2FsY3VsYXRvcigpIHt9CiAKLQlAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9ImFkZCIsIGFjdGlvbj0idXJuOkFkZCIpCi0JcHVibGljIGludCBhZGQoaW50IGksIGludCBqKSB7CisgICAgQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJhZGQiLCBhY3Rpb249InVybjpBZGQiKQorICAgIHB1YmxpYyBpbnQgYWRkKGludCBpLCBpbnQgaikgewogICAgICAgICAgICAgICAgIGludCBrID0gaSAraiA7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGkgKyAiKyIgKyBqICsiID0gIiArIGspOwotIAotCQlyZXR1cm4gazsKLQl9CisKKyAgICAgICAgcmV0dXJuIGs7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvd2ViL3NvYXAtYmluZGluZy1zdS1hbGFza2EvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL3dlYi9zb2FwLWJpbmRpbmctc3UtYWxhc2thL2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKaW5kZXggYjRkYTk4Ni4uNDMzNzhlMiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvd2ViL3NvYXAtYmluZGluZy1zdS1hbGFza2EvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci93ZWIvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCkBAIC0xOSw5ICsxOSw5IEBACiAKIDwhLS0gamJpLnhtbCBmaWxlIGZvciB0aGUgU09BUCBiaW5kaW5nIGRlcGxveW1lbnRzIGJpbmRpbmcuIC0tPgogPGpiaQotICAgIHZlcnNpb249IjEuMCIgCi0gICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIgCi0gICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCisgICAgdmVyc2lvbj0iMS4wIgorICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSAuL2piaS54c2QiPgogICA8c2VydmljZS1hc3NlbWJseT4KICAgICA8aWRlbnRpZmljYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci93ZWIvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9zdS9NRVRBLUlORi9qYmkueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvd2ViL3NvYXAtYmluZGluZy1zdS1hbGFza2Evc3UvTUVUQS1JTkYvamJpLnhtbAppbmRleCAyZDFlN2U4Li42NWNhOTZmIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci93ZWIvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9zdS9NRVRBLUlORi9qYmkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL3dlYi9zb2FwLWJpbmRpbmctc3UtYWxhc2thL3N1L01FVEEtSU5GL2piaS54bWwKQEAgLTE4LDE2ICsxOCwxNiBAQAogLS0+CiAKIDxqYmkgdmVyc2lvbj0iMS4wIgotCSB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKLQkgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIgCi0gCSB4bWxuczpqYXZhZXNiPSJodHRwOi8vamF2YS5zdW4uY29tIgotCSB4bWxuczp0bnM9Imh0dHA6Ly9leGFtcGxlLmNvbS9DYWxjdWxhdG9yIgotCSB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSBqYmkueHNkIj4KLQk8c2VydmljZXMgYmluZGluZy1jb21wb25lbnQ9InRydWUiPgkJCi0JCTxjb25zdW1lcyBpbnRlcmZhY2UtbmFtZT0idG5zOkNhbGN1bGF0b3JTZXJ2aWNlIgotCQkJICBsaW5rLXR5cGU9InN0YW5kYXJkIgotICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLW5hbWU9InRuczpDYWxjdWxhdG9yU2VydmljZSIgCisgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiCisgICAgICB4bWxuczpqYXZhZXNiPSJodHRwOi8vamF2YS5zdW4uY29tIgorICAgICB4bWxuczp0bnM9Imh0dHA6Ly9leGFtcGxlLmNvbS9DYWxjdWxhdG9yIgorICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSBqYmkueHNkIj4KKyAgICA8c2VydmljZXMgYmluZGluZy1jb21wb25lbnQ9InRydWUiPgorICAgICAgICA8Y29uc3VtZXMgaW50ZXJmYWNlLW5hbWU9InRuczpDYWxjdWxhdG9yU2VydmljZSIKKyAgICAgICAgICAgICAgbGluay10eXBlPSJzdGFuZGFyZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS1uYW1lPSJ0bnM6Q2FsY3VsYXRvclNlcnZpY2UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50LW5hbWU9IkNhbGN1bGF0b3JQb3J0Ii8+CiAgICAgICAgIDxqYXZhZXNiOmFydGlmYWN0c3R5cGU+V1NETDExPC9qYXZhZXNiOmFydGlmYWN0c3R5cGU+Ci0JPC9zZXJ2aWNlcz4KKyAgICA8L3NlcnZpY2VzPgogPC9qYmk+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci93ZWIvc29hcC1iaW5kaW5nLXN1L2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci93ZWIvc29hcC1iaW5kaW5nLXN1L2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKaW5kZXggOGU2MmEwZi4uZWQyNzRhZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvd2ViL3NvYXAtYmluZGluZy1zdS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL3dlYi9zb2FwLWJpbmRpbmctc3UvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbApAQCAtMTksOSArMTksOSBAQAogCiA8IS0tIGpiaS54bWwgZmlsZSBmb3IgdGhlIFNPQVAgYmluZGluZyBkZXBsb3ltZW50cyBiaW5kaW5nLiAtLT4KIDxqYmkKLSAgICB2ZXJzaW9uPSIxLjAiIAotICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiIAotICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAorICAgIHZlcnNpb249IjEuMCIKKyAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgLi9qYmkueHNkIj4KICAgPHNlcnZpY2UtYXNzZW1ibHk+CiAgICAgPGlkZW50aWZpY2F0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvd2ViL3NvYXAtYmluZGluZy1zdS9zdS9NRVRBLUlORi9qYmkueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvd2ViL3NvYXAtYmluZGluZy1zdS9zdS9NRVRBLUlORi9qYmkueG1sCmluZGV4IDQxOTBhYzcuLjg1MTZjZmQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL3dlYi9zb2FwLWJpbmRpbmctc3Uvc3UvTUVUQS1JTkYvamJpLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci93ZWIvc29hcC1iaW5kaW5nLXN1L3N1L01FVEEtSU5GL2piaS54bWwKQEAgLTE4LDE0ICsxOCwxNCBAQAogLS0+CiAKIDxqYmkgdmVyc2lvbj0iMS4wIgotCSB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKLQkgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIgCi0JIHhtbG5zOnRucz0iaHR0cDovL2V4YW1wbGUuY29tL0NhbGN1bGF0b3IiCi0JIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIGpiaS54c2QiPgotCTxzZXJ2aWNlcyBiaW5kaW5nLWNvbXBvbmVudD0idHJ1ZSI+CQkKLQkJPGNvbnN1bWVzIGludGVyZmFjZS1uYW1lPSJ0bnM6Q2FsY3VsYXRvclNlcnZpY2VJbnRlcmZhY2UiCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtbmFtZT0idG5zOkNhbGN1bGF0b3JTZXJ2aWNlIiAKKyAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIKKyAgICAgeG1sbnM6dG5zPSJodHRwOi8vZXhhbXBsZS5jb20vQ2FsY3VsYXRvciIKKyAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgamJpLnhzZCI+CisgICAgPHNlcnZpY2VzIGJpbmRpbmctY29tcG9uZW50PSJ0cnVlIj4KKyAgICAgICAgPGNvbnN1bWVzIGludGVyZmFjZS1uYW1lPSJ0bnM6Q2FsY3VsYXRvclNlcnZpY2VJbnRlcmZhY2UiCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtbmFtZT0idG5zOkNhbGN1bGF0b3JTZXJ2aWNlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludC1uYW1lPSJDYWxjdWxhdG9yUG9ydCIvPgogICAgICAgICAgICAgICAgIDxhcnRpZmFjdHMgcm9sZT0iY29uc3VtZXIiIHhtbG5zPSIiIGZpbGUtbmFtZT0iZW5kcG9pbnRzLnhtbCIgdHlwZT0ieG1sIi8+Ci0JPC9zZXJ2aWNlcz4KKyAgICA8L3NlcnZpY2VzPgogPC9qYmk+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci93ZWIvc29hcC1iaW5kaW5nLXN1L3N1L2VuZHBvaW50cy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci93ZWIvc29hcC1iaW5kaW5nLXN1L3N1L2VuZHBvaW50cy54bWwKaW5kZXggNGJlZjU4YS4uNWM4NDg2OCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2ZXIvd2ViL3NvYXAtYmluZGluZy1zdS9zdS9lbmRwb2ludHMueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL3dlYi9zb2FwLWJpbmRpbmctc3Uvc3UvZW5kcG9pbnRzLnhtbApAQCAtMjEsMjIgKzIxLDIyIEBACiAgICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cuc3VuLmNvbS9ucy9qYmkvY29tcG9uZW50L3NvYXAvZGVwbG95IC4vZW5kcG9pbnRzLnhzZCI+CiA8c2VydmljZS1uYW1lPgotCTxuYW1lc3BhY2UtdXJpPmh0dHA6Ly9leGFtcGxlLmNvbS9DYWxjdWxhdG9yPC9uYW1lc3BhY2UtdXJpPgotCTxsb2NhbC1wYXJ0PkNhbGN1bGF0b3JTZXJ2aWNlPC9sb2NhbC1wYXJ0PgorICAgIDxuYW1lc3BhY2UtdXJpPmh0dHA6Ly9leGFtcGxlLmNvbS9DYWxjdWxhdG9yPC9uYW1lc3BhY2UtdXJpPgorICAgIDxsb2NhbC1wYXJ0PkNhbGN1bGF0b3JTZXJ2aWNlPC9sb2NhbC1wYXJ0PgogICAgIDwvc2VydmljZS1uYW1lPgogICAgIDxlbmRwb2ludC1uYW1lPkNhbGN1bGF0b3JQb3J0PC9lbmRwb2ludC1uYW1lPgogICAgIDxlbmRwb2ludC1yb2xlPmNvbnN1bWVyPC9lbmRwb2ludC1yb2xlPgotICAgIDxhZGRyZXNzLWxvY2F0aW9uPmh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9zb2FwL3dlYi9jYWxjdWxhdG9yZW5kcG9pbnQ8L2FkZHJlc3MtbG9jYXRpb24+IAotICAgIDxzdHlsZT5odHRwOi8vd3d3LnczLm9yZy8yMDA0LzA4L3dzZGwvc3R5bGUvcnBjPC9zdHlsZT4gICAgICAgICAgICAgCisgICAgPGFkZHJlc3MtbG9jYXRpb24+aHR0cDovL2xvY2FsaG9zdDo4MDgwL3NvYXAvd2ViL2NhbGN1bGF0b3JlbmRwb2ludDwvYWRkcmVzcy1sb2NhdGlvbj4KKyAgICA8c3R5bGU+aHR0cDovL3d3dy53My5vcmcvMjAwNC8wOC93c2RsL3N0eWxlL3JwYzwvc3R5bGU+CiAgICAgPG9wZXJhdGlvbj4KICAgICAgICAgPG5hbWU+YWRkPC9uYW1lPgotICAgICAgICA8bWVwPmh0dHA6Ly93d3cudzMub3JnLzIwMDQvMDgvd3NkbC9pbi1vdXQ8L21lcD4gICAgICAgICAgICAgICAgICAgIAorICAgICAgICA8bWVwPmh0dHA6Ly93d3cudzMub3JnLzIwMDQvMDgvd3NkbC9pbi1vdXQ8L21lcD4KICAgICAgICAgPHNvYXBhY3Rpb24+IiI8L3NvYXBhY3Rpb24+CiAgICAgICAgIDxpbnB1dD4KICAgICAgICAgICA8bmFtZXNwYWNlLXVyaT5odHRwOi8vZXhhbXBsZS5jb20vQ2FsY3VsYXRvcjwvbmFtZXNwYWNlLXVyaT4KICAgICAgICAgPC9pbnB1dD4KICAgICAgICAgPG91dHB1dD4KICAgICAgICAgICA8bmFtZXNwYWNlLXVyaT5odHRwOi8vZXhhbXBsZS5jb20vQ2FsY3VsYXRvcjwvbmFtZXNwYWNlLXVyaT4KLSAgICAgICAgPC9vdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgPC9vdXRwdXQ+CiAgICAgPC9vcGVyYXRpb24+Ci08L2VuZHBvaW50PiAKKzwvZW5kcG9pbnQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZlci93ZWIvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL3dlYi93ZWIueG1sCmluZGV4IDA3ZTE0NzcuLjc5OGM2OWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL3dlYi93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmVyL3dlYi93ZWIueG1sCkBAIC0xOCwzMCArMTgsMzAgQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKLQkJCWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgorICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKKyAgICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogCi0JPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBDYWxjdWxhdG9yIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCTxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldBUjwvZGlzcGxheS1uYW1lPgorICAgIDxkZXNjcmlwdGlvbj5XZWJUaWVyIGZvciB0aGUgQ2FsY3VsYXRvciBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICA8ZGlzcGxheS1uYW1lPkNhbGN1bGF0b3JXQVI8L2Rpc3BsYXktbmFtZT4KIAotCTxzZXJ2bGV0PgotCQk8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIENhbGN1bGF0b3IgV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCQk8ZGlzcGxheS1uYW1lPkNhbGN1bGF0b3JXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+Ci0JCTxzZXJ2bGV0LW5hbWU+Q2FsY3VsYXRvcjwvc2VydmxldC1uYW1lPgotCQk8c2VydmxldC1jbGFzcz5lbmRwb2ludC5DYWxjdWxhdG9yPC9zZXJ2bGV0LWNsYXNzPgotCQk8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KLQk8L3NlcnZsZXQ+CisgICAgPHNlcnZsZXQ+CisgICAgICAgIDxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgQ2FsY3VsYXRvciBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgICAgIDxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkNhbGN1bGF0b3I8L3NlcnZsZXQtY2xhc3M+CisgICAgICAgIDxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgorICAgIDwvc2VydmxldD4KIAotCTxzZXJ2bGV0LW1hcHBpbmc+Ci0JCTxzZXJ2bGV0LW5hbWU+Q2FsY3VsYXRvcjwvc2VydmxldC1uYW1lPgotCQk8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvQ2FsY3VsYXRvclNlcnZpY2U8L3VybC1wYXR0ZXJuPgotCTwvc2VydmxldC1tYXBwaW5nPgorICAgIDxzZXJ2bGV0LW1hcHBpbmc+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+Q2FsY3VsYXRvcjwvc2VydmxldC1uYW1lPgorICAgICAgICA8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvQ2FsY3VsYXRvclNlcnZpY2U8L3VybC1wYXR0ZXJuPgorICAgIDwvc2VydmxldC1tYXBwaW5nPgogCi0JPHNlc3Npb24tY29uZmlnPgotCQk8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+Ci0JPC9zZXNzaW9uLWNvbmZpZz4KKyAgICA8c2Vzc2lvbi1jb25maWc+CisgICAgICAgIDxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KKyAgICA8L3Nlc3Npb24tY29uZmlnPgogCiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2FkZC1udW1iZXJzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9hZGQtbnVtYmVycy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGQ3MGZlMDQuLmZjYzA2ODUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2FkZC1udW1iZXJzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvYWRkLW51bWJlcnMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjYWxjLXdlYi1jbGllbnQiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9Ii4vd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iLi9zdW4td2ViLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvYWRkLW51bWJlcnMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvYWRkLW51bWJlcnMvYnVpbGQueG1sCmluZGV4IGMxYWI5M2IuLjE4YTM4YWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2FkZC1udW1iZXJzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9hZGQtbnVtYmVycy9idWlsZC54bWwKQEAgLTM4LDcgKzM4LDcgQEAKIAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+Ci0JICA8ZGVsZXRlIGZpbGU9IiR7amJpLWNvbXBvbmVudC1zdS1kaXJ9L2Fzc2VtYmx5LyR7YXBwbmFtZX0td2ViLndhciIvPgorICAgICAgPGRlbGV0ZSBmaWxlPSIke2piaS1jb21wb25lbnQtc3UtZGlyfS9hc3NlbWJseS8ke2FwcG5hbWV9LXdlYi53YXIiLz4KICAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAiIGRlcGVuZHM9ImFzc2VtYmxlLXdlYiwgZGVwbG95LWpiaS1jb21wb25lbnQtc3UsYXNzZW1ibGUtY2xpZW50LGRlcGxveS1jbGllbnQiLz4KQEAgLTUwLDIzICs1MCwyMyBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZS13ZWIiIGRlcGVuZHM9ImluaXQtY29tbW9uLCBjb21waWxlIj4KLQkgIDxlY2hvIG1lc3NhZ2U9ImNsYXNzZXMgZGlyID0gJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KLQkgIDxlY2hvIG1lc3NhZ2U9ImFzc2VtYmxlLmRpciA9ICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIiLz4KKyAgICAgIDxlY2hvIG1lc3NhZ2U9ImNsYXNzZXMgZGlyID0gJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KKyAgICAgIDxlY2hvIG1lc3NhZ2U9ImFzc2VtYmxlLmRpciA9ICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIiLz4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGtnLXdhciI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJ3YXIuY2xhc3NlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJ3YXIuZmlsZSIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIiLz4KICAgICAgICA8L2FudGNhbGw+Ci0JICAgPCEtLSBBZGQgTUVUQS1JTkYvamJpLnhtbCB0byAud2FyIGZpbGUgLS0+Ci0JICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL01FVEEtSU5GIi8+Ci0JICAgPGVjaG8gbWVzc2FnZT0iY3JlYXRlZCBkaXIgPSAke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvTUVUQS1JTkYiLz4KLQkgICA8Y29weSBmaWxlPSIke2piaS1jb21wb25lbnQtc3UtZGlyfS9zdS9NRVRBLUlORi9qYmkueG1sIiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9NRVRBLUlORi9qYmkueG1sIi8+Ci0JICAgPGphciBqYXJmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIiB1cGRhdGU9InRydWUiPgotCSAgIAkJPGZpbGVzZXQgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAiPgotCQkJCTxpbmNsdWRlIG5hbWU9Ik1FVEEtSU5GL2piaS54bWwiLz4KLQkJCTwvZmlsZXNldD4KLQkgICA8L2phcj4KLQkgICA8IS0tIENvcHkgdGhlIEphdmFFRSBhcHAgdG8gdGhlIHNlcnZpY2UgYXNzZW1ibHkgLS0+Ci0JICA8Y29weSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIiB0b2Rpcj0iJHtqYmktY29tcG9uZW50LXN1LWRpcn0vYXNzZW1ibHkiLz4KKyAgICAgICA8IS0tIEFkZCBNRVRBLUlORi9qYmkueG1sIHRvIC53YXIgZmlsZSAtLT4KKyAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvTUVUQS1JTkYiLz4KKyAgICAgICA8ZWNobyBtZXNzYWdlPSJjcmVhdGVkIGRpciA9ICR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9NRVRBLUlORiIvPgorICAgICAgIDxjb3B5IGZpbGU9IiR7amJpLWNvbXBvbmVudC1zdS1kaXJ9L3N1L01FVEEtSU5GL2piaS54bWwiIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL01FVEEtSU5GL2piaS54bWwiLz4KKyAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIiIHVwZGF0ZT0idHJ1ZSI+CisgICAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcCI+CisgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvamJpLnhtbCIvPgorICAgICAgICAgICAgPC9maWxlc2V0PgorICAgICAgIDwvamFyPgorICAgICAgIDwhLS0gQ29weSB0aGUgSmF2YUVFIGFwcCB0byB0aGUgc2VydmljZSBhc3NlbWJseSAtLT4KKyAgICAgIDxjb3B5IGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIiIHRvZGlyPSIke2piaS1jb21wb25lbnQtc3UtZGlyfS9hc3NlbWJseSIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZS1jbGllbnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KQEAgLTc4LDcgKzc4LDcgQEAKICAgICAgICAgICAgICAgIHZhbHVlPSIta2VlcCAtZCAke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi9jbGFzc2VzIGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9jYWxjLXdlYi1jbGllbnQtd2ViL3dlYnNlcnZpY2UvQWRkTnVtYmVyU2VydmljZT9XU0RMIi8+CiAgICAgPC9hbnRjYWxsPgogICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvY2xhc3NlcyIKLSAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvajJlZS5qYXIiIAorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9qMmVlLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJ3ZWJjbGllbnQvKioiLz4KICAgICAgIDxjb3B5IGZpbGU9Ii4vY2xpZW50LXdlYi54bWwiIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvd2ViLnhtbCIvPgogICAgICAgPGNvcHkgZmlsZT0iLi9jbGllbnQtc3VuLXdlYi54bWwiIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvc3VuLXdlYi54bWwiLz4KQEAgLTExNywxMSArMTE3LDExIEBACiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNsaWVudCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW50ZXN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KLSAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIgCi0gICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiAKKyAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iY2xpZW50LyoqIi8+CiAgICAgICA8dW5qYXIgc3JjPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgZGVzdD0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+CiAgICAgICA8amF2YSBjbGFzc25hbWU9ImNsaWVudC5UZXN0Q2xpZW50Ij4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2FkZC1udW1iZXJzL2NsaWVudC13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvYWRkLW51bWJlcnMvY2xpZW50LXdlYi54bWwKaW5kZXggZWViNzMwZC4uNzk1YjA1MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvYWRkLW51bWJlcnMvY2xpZW50LXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvYWRkLW51bWJlcnMvY2xpZW50LXdlYi54bWwKQEAgLTIwLDcgKzIwLDcgQEAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0gICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSAKKyAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KICAgPGRlc2NyaXB0aW9uPkEgdGVzdCBhcHBsaWNhdGlvbjwvZGVzY3JpcHRpb24+CiAgIDxkaXNwbGF5LW5hbWU+V2ViVGllcjwvZGlzcGxheS1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvYWRkLW51bWJlcnMvY2xpZW50L1Rlc3RDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2FkZC1udW1iZXJzL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKaW5kZXggYmYyZGIyMy4uZTNmMTExNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvYWRkLW51bWJlcnMvY2xpZW50L1Rlc3RDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9hZGQtbnVtYmVycy9jbGllbnQvVGVzdENsaWVudC5qYXZhCkBAIC0yOSw3ICsyOSw3IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdElkID0gImpiaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9hZGQtbnVtYmVycyI7CisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RJZCA9ICJqYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvYWRkLW51bWJlcnMiOwogCiAgICAgcHVibGljIGJvb2xlYW4gZm91bmQxID0gZmFsc2U7CiAKQEAgLTQ2LDggKzQ2LDggQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludCBjb2RlID0gaW52b2tlU2VydmxldCh1cmwpOwogICAgICAgICAgICAgcmVwb3J0KGNvZGUpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JICAgIGZhaWwoKTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTYyLDcgKzYyLDcgQEAKICAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nKGxpbmUpOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJSZXN1bHQgaXMiKSAhPSAtMSkKLQkJZm91bmQxID0gdHJ1ZTsKKyAgICAgICAgZm91bmQxID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY29kZTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9hZGQtbnVtYmVycy9lbmRwb2ludC9BZGROdW1iZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2FkZC1udW1iZXJzL2VuZHBvaW50L0FkZE51bWJlci5qYXZhCmluZGV4IDg0MGM2YzkuLmYyOWI5MTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2FkZC1udW1iZXJzL2VuZHBvaW50L0FkZE51bWJlci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2FkZC1udW1iZXJzL2VuZHBvaW50L0FkZE51bWJlci5qYXZhCkBAIC0yNiwxMyArMjYsMTMgQEAKICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9leGFtcGxlLndlYi5zZXJ2aWNlL0FkZE51bWJlciIKICkKIHB1YmxpYyBjbGFzcyBBZGROdW1iZXIgewotCXB1YmxpYyBBZGROdW1iZXIoKSB7fQorICAgIHB1YmxpYyBBZGROdW1iZXIoKSB7fQogCi0JQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJhZGQiLCBhY3Rpb249InVybjpBZGQiKQotCXB1YmxpYyBpbnQgYWRkKGludCBpLCBpbnQgaikgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJhZGQiLCBhY3Rpb249InVybjpBZGQiKQorICAgIHB1YmxpYyBpbnQgYWRkKGludCBpLCBpbnQgaikgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgICAgICAgICAgaW50IGsgPSBpICtqIDsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaSArICIrIiArIGogKyIgPSAiICsgayk7Ci0JCS8vdGhyb3cgbmV3IGphdmEubGFuZy5FeGNlcHRpb24oIlRoaXMgaXMgbXkgZXhjZXB0aW9uIik7IAotCQlyZXR1cm4gazsKLQl9CisgICAgICAgIC8vdGhyb3cgbmV3IGphdmEubGFuZy5FeGNlcHRpb24oIlRoaXMgaXMgbXkgZXhjZXB0aW9uIik7CisgICAgICAgIHJldHVybiBrOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2FkZC1udW1iZXJzL2phdmFlZS1zZS1zZXJ2aWNldW5pdC9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvYWRkLW51bWJlcnMvamF2YWVlLXNlLXNlcnZpY2V1bml0L2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKaW5kZXggYWVhMTVhNi4uYjA0NTE2MCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvYWRkLW51bWJlcnMvamF2YWVlLXNlLXNlcnZpY2V1bml0L2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvYWRkLW51bWJlcnMvamF2YWVlLXNlLXNlcnZpY2V1bml0L2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKQEAgLTE5LDE2ICsxOSwxNiBAQAogCiA8IS0tIGpiaS54bWwgZmlsZSBmb3IgdGhlIFNPQVAgYmluZGluZyBkZXBsb3ltZW50cyBiaW5kaW5nLiAtLT4KIDxqYmkKLSAgICB2ZXJzaW9uPSIxLjAiIAotICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiIAotICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAorICAgIHZlcnNpb249IjEuMCIKKyAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgLi9qYmkueHNkIj4KICAgPHNlcnZpY2UtYXNzZW1ibHk+CiAgICAgPGlkZW50aWZpY2F0aW9uPgogICAgICAgPG5hbWU+Y2xpZW50X3dlYl9jYWxjdWxhdG9yX3NlcnZpY2VfYXNzZW1ibHk8L25hbWU+CiAgICAgICA8ZGVzY3JpcHRpb24+Q2xpZW50IHdlYiBjYWxjdWxhdG9yIHNlcnZpY2UgYXNzZW1ibHk8L2Rlc2NyaXB0aW9uPgogICAgIDwvaWRlbnRpZmljYXRpb24+Ci0JPHNlcnZpY2UtdW5pdD4KKyAgICA8c2VydmljZS11bml0PgogICAgICAgPGlkZW50aWZpY2F0aW9uPgogICAgICAgICAgPG5hbWU+Y2FsYy13ZWItY2xpZW50PC9uYW1lPgogICAgICAgICAgPGRlc2NyaXB0aW9uPnByb3ZpZGVyIHNlcnZpY2U8L2Rlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvYWRkLW51bWJlcnMvamF2YWVlLXNlLXNlcnZpY2V1bml0L3N1L01FVEEtSU5GL2piaS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9hZGQtbnVtYmVycy9qYXZhZWUtc2Utc2VydmljZXVuaXQvc3UvTUVUQS1JTkYvamJpLnhtbAppbmRleCAyZmYxZjBjLi5lZWM2YjA2IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9hZGQtbnVtYmVycy9qYXZhZWUtc2Utc2VydmljZXVuaXQvc3UvTUVUQS1JTkYvamJpLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9hZGQtbnVtYmVycy9qYXZhZWUtc2Utc2VydmljZXVuaXQvc3UvTUVUQS1JTkYvamJpLnhtbApAQCAtMTgsMTQgKzE4LDE0IEBACiAtLT4KIAogPGpiaSB2ZXJzaW9uPSIxLjAiCi0JIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAotCSB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIiAKLQkgeG1sbnM6amF2YWVzYj0iaHR0cDovL2phdmEuc3VuLmNvbSIKLQkgeG1sbnM6dG5zPSJodHRwOi8vZXhhbXBsZS53ZWIuc2VydmljZS9BZGROdW1iZXIiCi0JIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIGpiaS54c2QiPgotCTxzZXJ2aWNlcyBiaW5kaW5nLWNvbXBvbmVudD0iZmFsc2UiPgkJCi0JIDxwcm92aWRlcyBpbnRlcmZhY2UtbmFtZT0idG5zOkFkZE51bWJlclNlcnZpY2VJbnRlcmZhY2UiCisgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiCisgICAgIHhtbG5zOmphdmFlc2I9Imh0dHA6Ly9qYXZhLnN1bi5jb20iCisgICAgIHhtbG5zOnRucz0iaHR0cDovL2V4YW1wbGUud2ViLnNlcnZpY2UvQWRkTnVtYmVyIgorICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSBqYmkueHNkIj4KKyAgICA8c2VydmljZXMgYmluZGluZy1jb21wb25lbnQ9ImZhbHNlIj4KKyAgICAgPHByb3ZpZGVzIGludGVyZmFjZS1uYW1lPSJ0bnM6QWRkTnVtYmVyU2VydmljZUludGVyZmFjZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS1uYW1lPSJ0bnM6QWRkTnVtYmVyU2VydmljZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQtbmFtZT0iQWRkTnVtYmVyUG9ydCIvPgotCTwvc2VydmljZXM+CisgICAgPC9zZXJ2aWNlcz4KIDwvamJpPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvYWRkLW51bWJlcnMvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2FkZC1udW1iZXJzL3dlYi54bWwKaW5kZXggMTA0YjU4MC4uMjA4NWVkMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvYWRkLW51bWJlcnMvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9hZGQtbnVtYmVycy93ZWIueG1sCkBAIC0xOCwzMCArMTgsMzAgQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKLQkJCWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgorICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKKyAgICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogCi0JPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBBZGROdW1iZXIgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JPGRpc3BsYXktbmFtZT5BZGROdW1iZXJXQVI8L2Rpc3BsYXktbmFtZT4KKyAgICA8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIEFkZE51bWJlciBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICA8ZGlzcGxheS1uYW1lPkFkZE51bWJlcldBUjwvZGlzcGxheS1uYW1lPgogCi0JPHNlcnZsZXQ+Ci0JCTxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgQWRkTnVtYmVyIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQkJPGRpc3BsYXktbmFtZT5BZGROdW1iZXJXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+Ci0JCTxzZXJ2bGV0LW5hbWU+QWRkTnVtYmVyPC9zZXJ2bGV0LW5hbWU+Ci0JCTxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkFkZE51bWJlcjwvc2VydmxldC1jbGFzcz4KLQkJPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+Ci0JPC9zZXJ2bGV0PgorICAgIDxzZXJ2bGV0PgorICAgICAgICA8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIEFkZE51bWJlciBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgICAgIDxkaXNwbGF5LW5hbWU+QWRkTnVtYmVyV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgorICAgICAgICA8c2VydmxldC1uYW1lPkFkZE51bWJlcjwvc2VydmxldC1uYW1lPgorICAgICAgICA8c2VydmxldC1jbGFzcz5lbmRwb2ludC5BZGROdW1iZXI8L3NlcnZsZXQtY2xhc3M+CisgICAgICAgIDxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgorICAgIDwvc2VydmxldD4KIAotCTxzZXJ2bGV0LW1hcHBpbmc+Ci0JCTxzZXJ2bGV0LW5hbWU+QWRkTnVtYmVyPC9zZXJ2bGV0LW5hbWU+Ci0JCTx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9BZGROdW1iZXJTZXJ2aWNlPC91cmwtcGF0dGVybj4KLQk8L3NlcnZsZXQtbWFwcGluZz4KKyAgICA8c2VydmxldC1tYXBwaW5nPgorICAgICAgICA8c2VydmxldC1uYW1lPkFkZE51bWJlcjwvc2VydmxldC1uYW1lPgorICAgICAgICA8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvQWRkTnVtYmVyU2VydmljZTwvdXJsLXBhdHRlcm4+CisgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiAKLQk8c2Vzc2lvbi1jb25maWc+Ci0JCTxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KLQk8L3Nlc3Npb24tY29uZmlnPgorICAgIDxzZXNzaW9uLWNvbmZpZz4KKyAgICAgICAgPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgorICAgIDwvc2Vzc2lvbi1jb25maWc+CiAKIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvYWRkLW51bWJlcnMvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2FkZC1udW1iZXJzL3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggN2RlNWNmNi4uZDc5ZWVhYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvYWRkLW51bWJlcnMvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9hZGQtbnVtYmVycy93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yOCwzNSArMjgsMzUgQEAKIAogICAgICAgIEBXZWJTZXJ2aWNlUmVmKG5hbWU9InN1bi13ZWIuc2VydmljZXJlZi9jYWxjdWxhdG9yIikgQWRkTnVtYmVyU2VydmljZSBzZXJ2aWNlOwogCi0gICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKSAKLQkJdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKKyAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCisgICAgICAgIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgICAgIGRvUG9zdChyZXEsIHJlc3ApOwogICAgICAgIH0KIAogICAgICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCiAgICAgICAgICAgICAgIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7Ci0JICAgIFByaW50V3JpdGVyIG91dD1udWxsOworICAgICAgICBQcmludFdyaXRlciBvdXQ9bnVsbDsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgU2VydmljZSBpcyA6IiArIHNlcnZpY2UpOwogICAgICAgICAgICAgICAgIHJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwotICAgICAgICAgICAgCW91dCA9IHJlc3AuZ2V0V3JpdGVyKCk7CisgICAgICAgICAgICAgICAgb3V0ID0gcmVzcC5nZXRXcml0ZXIoKTsKICAgICAgICAgICAgICAgICBBZGROdW1iZXIgcG9ydCA9IHNlcnZpY2UuZ2V0QWRkTnVtYmVyUG9ydCgpOwogICAgICAgICAgICAgICAgIGludCByZXQgPSBwb3J0LmFkZCgxLCAyKTsKLQkJcHJpbnRTdWNjZXNzKG91dCxyZXQpOworICAgICAgICBwcmludFN1Y2Nlc3Mob3V0LHJldCk7CiAgICAgICAgICAgICB9IGNhdGNoKGphdmEubGFuZy5FeGNlcHRpb24gZSkgewotCQkvL2UucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIAlwcmludEZhaWx1cmUob3V0LCBlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIC8vZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgIHByaW50RmFpbHVyZShvdXQsIGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIH0gZmluYWxseSB7Ci0JCWlmKG91dCAhPSBudWxsKSB7CisgICAgICAgIGlmKG91dCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIG91dC5mbHVzaCgpOwogICAgICAgICAgICAgICAgICAgICBvdXQuY2xvc2UoKTsKLQkJfQotCSAgICB9CisgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgIH0KIAogICAgICAgIHB1YmxpYyB2b2lkIHByaW50RmFpbHVyZShQcmludFdyaXRlciBvdXQsIFN0cmluZyBlcnJNc2cpIHsKLQkJaWYob3V0ID09IG51bGwpIHJldHVybjsKLQkJb3V0LnByaW50bG4oIjxodG1sPiIpOworICAgICAgICBpZihvdXQgPT0gbnVsbCkgcmV0dXJuOworICAgICAgICBvdXQucHJpbnRsbigiPGh0bWw+Iik7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoZWFkPiIpOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8dGl0bGU+VGVzdFNlcnZsZXQ8L3RpdGxlPiIpOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L2hlYWQ+Iik7CkBAIC02OSw3ICs2OSw3IEBACiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgcHJpbnRTdWNjZXNzKFByaW50V3JpdGVyIG91dCwgaW50IHJlc3VsdCkgewotCQlpZihvdXQgPT0gbnVsbCkgcmV0dXJuOworICAgICAgICBpZihvdXQgPT0gbnVsbCkgcmV0dXJuOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aHRtbD4iKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGhlYWQ+Iik7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjx0aXRsZT5UZXN0U2VydmxldDwvdGl0bGU+Iik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9idWlsZC54bWwKaW5kZXggZjcwYTljMC4uZWYxNGE3ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2J1aWxkLnhtbApAQCAtMzgsNiArMzgsNiBAQAogICAgICAgICA8YW50IGRpcj0iZW5kcG9pbnRfbWFwcGluZ19jb25zdW1lciIgdGFyZ2V0PSJjbGVhbiIvPgogICAgICAgICA8YW50IGRpcj0iYWRkLW51bWJlcnMiIHRhcmdldD0iY2xlYW4iLz4KICAgICAgICAgPGFudCBkaXI9ImVudGVycHJpc2VfYXBwIiB0YXJnZXQ9ImNsZWFuIi8+Ci0JPC90YXJnZXQ+CisgICAgPC90YXJnZXQ+CiAKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtY2xpZW50L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9jb21wQXBwLWNsaWVudC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGUzMThjNDMuLmNhNmEwMzkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtY2xpZW50L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvY29tcEFwcC1jbGllbnQvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqc3IyMDgtaW50ZWdyYXRpb24td2ViLWNsaWVudCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iLi93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSIuL3N1bi13ZWIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9jb21wQXBwLWNsaWVudC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9jb21wQXBwLWNsaWVudC9idWlsZC54bWwKaW5kZXggOWViYTQxOC4uYTI0MzE0NyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvY29tcEFwcC1jbGllbnQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtY2xpZW50L2J1aWxkLnhtbApAQCAtNzYsNyArNzYsNyBAQAogICAgICAgICAgICAgICAgdmFsdWU9Ii1rZWVwIC1kICR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL2NsYXNzZXMgaHR0cDovL2xvY2FsaG9zdDo4MDgwL2pzcjIwOC1pbnRlZ3JhdGlvbi13ZWItY2xpZW50LXdlYi93ZWJzZXJ2aWNlL0NhbGN1bGF0b3JTZXJ2aWNlP1dTREwiLz4KICAgICA8L2FudGNhbGw+CiAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi9jbGFzc2VzIgotICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9qMmVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy1ydC5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtdG9vbHMuamFyIiAKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvajJlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtcnQuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXRvb2xzLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJ3ZWJjbGllbnQvKioiLz4KICAgICAgIDxjb3B5IGZpbGU9Ii4vY2xpZW50LXdlYi54bWwiIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvd2ViLnhtbCIvPgogICAgICAgPGNvcHkgZmlsZT0iLi9jbGllbnQtc3VuLXdlYi54bWwiIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvc3VuLXdlYi54bWwiLz4KQEAgLTk4LDExICs5OCwxMSBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jbGllbnQiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVudGVzdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+Ci0gICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiIAotICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgCisgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9ImNsaWVudC8qKiIvPgogICAgICAgPHVuamFyIHNyYz0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIGRlc3Q9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgogICAgICAgPGphdmEgY2xhc3NuYW1lPSJjbGllbnQuVGVzdENsaWVudCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9jb21wQXBwLWNsaWVudC9jbGllbnQtd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtY2xpZW50L2NsaWVudC13ZWIueG1sCmluZGV4IGVlYjczMGQuLjc5NWIwNTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtY2xpZW50L2NsaWVudC13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtY2xpZW50L2NsaWVudC13ZWIueG1sCkBAIC0yMCw3ICsyMCw3IEBACiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgCisgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAgIDxkZXNjcmlwdGlvbj5BIHRlc3QgYXBwbGljYXRpb248L2Rlc2NyaXB0aW9uPgogICA8ZGlzcGxheS1uYW1lPldlYlRpZXI8L2Rpc3BsYXktbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtY2xpZW50L2NsaWVudC9UZXN0Q2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9jb21wQXBwLWNsaWVudC9jbGllbnQvVGVzdENsaWVudC5qYXZhCmluZGV4IGFmZDE3OGEuLmI0ODQ3YTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtY2xpZW50L2NsaWVudC9UZXN0Q2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvY29tcEFwcC1jbGllbnQvY2xpZW50L1Rlc3RDbGllbnQuamF2YQpAQCAtMjksNyArMjksNyBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7Ci0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RJZCA9ICJqYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvY29tcEFwcC1jbGllbnQiOworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0SWQgPSAiamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtY2xpZW50IjsKIAogICAgIHB1YmxpYyBib29sZWFuIGZvdW5kMSA9IGZhbHNlOwogICAgIHB1YmxpYyBib29sZWFuIGZvdW5kMiA9IGZhbHNlOwpAQCAtNDcsNyArNDcsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgaW50IGNvZGUgPSBpbnZva2VTZXJ2bGV0KHVybCk7CiAgICAgICAgICAgICByZXBvcnQoY29kZSk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgfQpAQCAtNjQsOSArNjQsOSBAQAogICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICBsb2cobGluZSk7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIlNvIHRoZSBSRVNVTFQgT0YgQ2FsY3VsYXRvciBhZGQgU0VSVklDRSBJUyIpICE9IC0xKQotCQlmb3VuZDEgPSB0cnVlOworICAgICAgICBmb3VuZDEgPSB0cnVlOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJbM10iKSAhPSAtMSkKLQkJZm91bmQyID0gdHJ1ZTsKKyAgICAgICAgZm91bmQyID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY29kZTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9jb21wQXBwLWNsaWVudC9lbmRwb2ludC9DYWxjdWxhdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9jb21wQXBwLWNsaWVudC9lbmRwb2ludC9DYWxjdWxhdG9yLmphdmEKaW5kZXggNjk1MTMyMC4uYmVkMWUwZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvY29tcEFwcC1jbGllbnQvZW5kcG9pbnQvQ2FsY3VsYXRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtY2xpZW50L2VuZHBvaW50L0NhbGN1bGF0b3IuamF2YQpAQCAtMjUsMTMgKzI1LDEzIEBACiAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZXhhbXBsZS53ZWIuc2VydmljZS9DYWxjdWxhdG9yIgogKQogcHVibGljIGNsYXNzIENhbGN1bGF0b3IgewotCXB1YmxpYyBDYWxjdWxhdG9yKCkge30KKyAgICBwdWJsaWMgQ2FsY3VsYXRvcigpIHt9CiAKLQlAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9ImFkZCIsIGFjdGlvbj0idXJuOkFkZCIpCi0JcHVibGljIGludCBhZGQoaW50IGksIGludCBqKSB7CisgICAgQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJhZGQiLCBhY3Rpb249InVybjpBZGQiKQorICAgIHB1YmxpYyBpbnQgYWRkKGludCBpLCBpbnQgaikgewogICAgICAgICAgICAgICAgIGludCBrID0gaSAraiA7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGkgKyAiKyIgKyBqICsiID0gIiArIGspOwotIAotCQlyZXR1cm4gazsKLQl9CisKKyAgICAgICAgcmV0dXJuIGs7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvY29tcEFwcC1jbGllbnQvamJpLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtY2xpZW50L2piaS54bWwKaW5kZXggMWZhOTJiZC4uNTNmOWM4NiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvY29tcEFwcC1jbGllbnQvamJpLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9jb21wQXBwLWNsaWVudC9qYmkueG1sCkBAIC0xOCwxNCArMTgsMTQgQEAKIC0tPgogCiA8amJpIHZlcnNpb249IjEuMCIKLQkgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCi0JIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiIAotCSB4bWxuczpqYXZhZXNiPSJodHRwOi8vamF2YS5zdW4uY29tIgotCSB4bWxuczp0bnM9Imh0dHA6Ly9leGFtcGxlLndlYi5zZXJ2aWNlL0NhbGN1bGF0b3IiCi0JIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIGpiaS54c2QiPgotCTxzZXJ2aWNlcyBiaW5kaW5nLWNvbXBvbmVudD0iZmFsc2UiPgotCSA8Y29uc3VtZXMgaW50ZXJmYWNlLW5hbWU9InRuczpDYWxjdWxhdG9yU2VydmljZUludGVyZmFjZSIKKyAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIKKyAgICAgeG1sbnM6amF2YWVzYj0iaHR0cDovL2phdmEuc3VuLmNvbSIKKyAgICAgeG1sbnM6dG5zPSJodHRwOi8vZXhhbXBsZS53ZWIuc2VydmljZS9DYWxjdWxhdG9yIgorICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSBqYmkueHNkIj4KKyAgICA8c2VydmljZXMgYmluZGluZy1jb21wb25lbnQ9ImZhbHNlIj4KKyAgICAgPGNvbnN1bWVzIGludGVyZmFjZS1uYW1lPSJ0bnM6Q2FsY3VsYXRvclNlcnZpY2VJbnRlcmZhY2UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtbmFtZT0idG5zOkNhbGN1bGF0b3JTZXJ2aWNlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludC1uYW1lPSJDYWxjdWxhdG9yUG9ydCIvPgotCTwvc2VydmljZXM+CisgICAgPC9zZXJ2aWNlcz4KIDwvamJpPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvY29tcEFwcC1jbGllbnQvc29hcC1iaW5kaW5nLXN1L2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9jb21wQXBwLWNsaWVudC9zb2FwLWJpbmRpbmctc3UvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbAppbmRleCBmOTE3MWM5Li40ZGM0ZjMxIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9jb21wQXBwLWNsaWVudC9zb2FwLWJpbmRpbmctc3UvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9jb21wQXBwLWNsaWVudC9zb2FwLWJpbmRpbmctc3UvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbApAQCAtMTksOSArMTksOSBAQAogCiA8IS0tIGpiaS54bWwgZmlsZSBmb3IgdGhlIFNPQVAgYmluZGluZyBkZXBsb3ltZW50cyBiaW5kaW5nLiAtLT4KIDxqYmkKLSAgICB2ZXJzaW9uPSIxLjAiIAotICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiIAotICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAorICAgIHZlcnNpb249IjEuMCIKKyAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgLi9qYmkueHNkIj4KICAgPHNlcnZpY2UtYXNzZW1ibHk+CiAgICAgPGlkZW50aWZpY2F0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvY29tcEFwcC1jbGllbnQvc29hcC1iaW5kaW5nLXN1L3N1L01FVEEtSU5GL2piaS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9jb21wQXBwLWNsaWVudC9zb2FwLWJpbmRpbmctc3Uvc3UvTUVUQS1JTkYvamJpLnhtbAppbmRleCAzMzk3NGY5Li40MzNiZDE5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9jb21wQXBwLWNsaWVudC9zb2FwLWJpbmRpbmctc3Uvc3UvTUVUQS1JTkYvamJpLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9jb21wQXBwLWNsaWVudC9zb2FwLWJpbmRpbmctc3Uvc3UvTUVUQS1JTkYvamJpLnhtbApAQCAtMTgsMTUgKzE4LDE1IEBACiAtLT4KIAogPGpiaSB2ZXJzaW9uPSIxLjAiCi0JIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAotCSB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIiAKLQkgeG1sbnM6amF2YWVzYj0iaHR0cDovL2phdmEuc3VuLmNvbSIKLQkgeG1sbnM6dG5zPSJodHRwOi8vZXhhbXBsZS53ZWIuc2VydmljZS9DYWxjdWxhdG9yIgotCSB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSBqYmkueHNkIj4KLQk8c2VydmljZXMgYmluZGluZy1jb21wb25lbnQ9InRydWUiPgkJCi0JIDxwcm92aWRlcyBpbnRlcmZhY2UtbmFtZT0idG5zOkNhbGN1bGF0b3JTZXJ2aWNlSW50ZXJmYWNlIgorICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIgorICAgICB4bWxuczpqYXZhZXNiPSJodHRwOi8vamF2YS5zdW4uY29tIgorICAgICB4bWxuczp0bnM9Imh0dHA6Ly9leGFtcGxlLndlYi5zZXJ2aWNlL0NhbGN1bGF0b3IiCisgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIGpiaS54c2QiPgorICAgIDxzZXJ2aWNlcyBiaW5kaW5nLWNvbXBvbmVudD0idHJ1ZSI+CisgICAgIDxwcm92aWRlcyBpbnRlcmZhY2UtbmFtZT0idG5zOkNhbGN1bGF0b3JTZXJ2aWNlSW50ZXJmYWNlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLW5hbWU9InRuczpDYWxjdWxhdG9yU2VydmljZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQtbmFtZT0iQ2FsY3VsYXRvclBvcnQiLz4KICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RzIHhtbG5zPSIiIHJvbGU9InByb3ZpZGVyIiBmaWxlLW5hbWU9ImVuZHBvaW50cy54bWwiIHR5cGU9InhtbCIvPgotCTwvc2VydmljZXM+CisgICAgPC9zZXJ2aWNlcz4KIDwvamJpPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvY29tcEFwcC1jbGllbnQvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtY2xpZW50L3dlYi54bWwKaW5kZXggMDdlMTQ3Ny4uNzk4YzY5YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvY29tcEFwcC1jbGllbnQvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9jb21wQXBwLWNsaWVudC93ZWIueG1sCkBAIC0xOCwzMCArMTgsMzAgQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKLQkJCWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgorICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKKyAgICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogCi0JPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBDYWxjdWxhdG9yIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCTxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldBUjwvZGlzcGxheS1uYW1lPgorICAgIDxkZXNjcmlwdGlvbj5XZWJUaWVyIGZvciB0aGUgQ2FsY3VsYXRvciBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICA8ZGlzcGxheS1uYW1lPkNhbGN1bGF0b3JXQVI8L2Rpc3BsYXktbmFtZT4KIAotCTxzZXJ2bGV0PgotCQk8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIENhbGN1bGF0b3IgV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCQk8ZGlzcGxheS1uYW1lPkNhbGN1bGF0b3JXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+Ci0JCTxzZXJ2bGV0LW5hbWU+Q2FsY3VsYXRvcjwvc2VydmxldC1uYW1lPgotCQk8c2VydmxldC1jbGFzcz5lbmRwb2ludC5DYWxjdWxhdG9yPC9zZXJ2bGV0LWNsYXNzPgotCQk8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KLQk8L3NlcnZsZXQ+CisgICAgPHNlcnZsZXQ+CisgICAgICAgIDxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgQ2FsY3VsYXRvciBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgICAgIDxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkNhbGN1bGF0b3I8L3NlcnZsZXQtY2xhc3M+CisgICAgICAgIDxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgorICAgIDwvc2VydmxldD4KIAotCTxzZXJ2bGV0LW1hcHBpbmc+Ci0JCTxzZXJ2bGV0LW5hbWU+Q2FsY3VsYXRvcjwvc2VydmxldC1uYW1lPgotCQk8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvQ2FsY3VsYXRvclNlcnZpY2U8L3VybC1wYXR0ZXJuPgotCTwvc2VydmxldC1tYXBwaW5nPgorICAgIDxzZXJ2bGV0LW1hcHBpbmc+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+Q2FsY3VsYXRvcjwvc2VydmxldC1uYW1lPgorICAgICAgICA8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvQ2FsY3VsYXRvclNlcnZpY2U8L3VybC1wYXR0ZXJuPgorICAgIDwvc2VydmxldC1tYXBwaW5nPgogCi0JPHNlc3Npb24tY29uZmlnPgotCQk8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+Ci0JPC9zZXNzaW9uLWNvbmZpZz4KKyAgICA8c2Vzc2lvbi1jb25maWc+CisgICAgICAgIDxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KKyAgICA8L3Nlc3Npb24tY29uZmlnPgogCiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtY2xpZW50L3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9jb21wQXBwLWNsaWVudC93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGVkNzhiY2IuLmVlMmZmMjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtY2xpZW50L3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvY29tcEFwcC1jbGllbnQvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjgsOCArMjgsOCBAQAogCiAgICAgICAgQFdlYlNlcnZpY2VSZWYgQ2FsY3VsYXRvclNlcnZpY2Ugc2VydmljZTsKIAotICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkgCi0JCXRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CisgICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQorICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICAgICBkb1Bvc3QocmVxLCByZXNwKTsKICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtc2VydmVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9jb21wQXBwLXNlcnZlci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDcyYzI2NDUuLmQ3ZTQwY2UgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtc2VydmVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvY29tcEFwcC1zZXJ2ZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjYWxjdWxhdG9yc2VydmljZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iLi93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iamJpLWNvbXBvbmVudC1zdS1hc3NlbWJseSIgdmFsdWU9IndlYl9jYWxjdWxhdG9yX2NvbnN1bWVyX2Fzc2VtYmx5Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9jb21wQXBwLXNlcnZlci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9jb21wQXBwLXNlcnZlci9idWlsZC54bWwKaW5kZXggODY4ZDM5Ni4uYjBlZTVhNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvY29tcEFwcC1zZXJ2ZXIvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtc2VydmVyL2J1aWxkLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgICZqYXh3c1Rvb2xzOwogICAgICZqYmljb21tb247CiAgICAgJmpiaXByb3BlcnRpZXM7Ci0gICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImNsZWFuLCBzZXR1cCwgcnVudGVzdCx1bmRlcGxveSIvPiAKKyAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iY2xlYW4sIHNldHVwLCBydW50ZXN0LHVuZGVwbG95Ii8+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgpAQCAtNTQsNyArNTQsNyBAQAogICAgICAgICA8cGFyYW0gbmFtZT0id2FyLmZpbGUiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS13ZWIud2FyIi8+CiAgICAgICA8L2FudGNhbGw+CiAgICAgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIiIHVwZGF0ZT0idHJ1ZSI+Ci0JPG1ldGFpbmYgZmlsZT0iamJpLnhtbCIvPgorICAgIDxtZXRhaW5mIGZpbGU9ImpiaS54bWwiLz4KICAgICAgIDwvamFyPgogICAgIDwvdGFyZ2V0PgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9jb21wQXBwLXNlcnZlci9jbGllbnQvU09BUFdlYkNvbnN1bWVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9jb21wQXBwLXNlcnZlci9jbGllbnQvU09BUFdlYkNvbnN1bWVyLmphdmEKaW5kZXggMGI3M2MxMy4uYjk0YmIxMyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvY29tcEFwcC1zZXJ2ZXIvY2xpZW50L1NPQVBXZWJDb25zdW1lci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtc2VydmVyL2NsaWVudC9TT0FQV2ViQ29uc3VtZXIuamF2YQpAQCAtMjgsNDIgKzI4LDQyIEBACiAgICAgc3RhdGljIENhbGN1bGF0b3JTZXJ2aWNlIHNlcnZpY2U7CiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdElkID0gImpiaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9jb21wQXBwLXNlcnZlciI7CisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RJZCA9ICJqYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvY29tcEFwcC1zZXJ2ZXIiOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbih0ZXN0SWQgKyBhcmdzWzBdKTsKLQlTT0FQV2ViQ29uc3VtZXIgY2xpZW50ID0gbmV3IFNPQVBXZWJDb25zdW1lcigpOwotCWNsaWVudC5hZGRVc2luZ1NPQVBDb25zdW1lcihhcmdzKTsKKyAgICBTT0FQV2ViQ29uc3VtZXIgY2xpZW50ID0gbmV3IFNPQVBXZWJDb25zdW1lcigpOworICAgIGNsaWVudC5hZGRVc2luZ1NPQVBDb25zdW1lcihhcmdzKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkodGVzdElkICsgYXJnc1swXSk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGFkZFVzaW5nU09BUENvbnN1bWVyKFN0cmluZ1tdIGFyZ3MpIHsKLQljb20uZXhhbXBsZS5jYWxjdWxhdG9yLkNhbGN1bGF0b3IgcG9ydD0gbnVsbDsKLQl0cnkgeworICAgIGNvbS5leGFtcGxlLmNhbGN1bGF0b3IuQ2FsY3VsYXRvciBwb3J0PSBudWxsOworICAgIHRyeSB7CiAKLQkJU3lzdGVtLm91dC5wcmludGxuKCIgQWZ0ZXIgY3JlYXRpbmcgQ2FsY3VsYXRvclNlcnZpY2UiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgQWZ0ZXIgY3JlYXRpbmcgQ2FsY3VsYXRvclNlcnZpY2UiKTsKIAogICAgICAgICAgICAgICAgIHBvcnQgPSBzZXJ2aWNlLmdldENhbGN1bGF0b3JQb3J0KCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiIEFmdGVyIGdldHRpbmcgcG9ydCIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBBZnRlciBnZXR0aW5nIHBvcnQiKTsKIAotCQkvLyBHZXQgU3R1YgotCQlCaW5kaW5nUHJvdmlkZXIgc3R1YiA9IChCaW5kaW5nUHJvdmlkZXIpcG9ydDsKLQkJU3RyaW5nIGVuZHBvaW50VVJJID0iaHR0cDovL2xvY2FsaG9zdDoxMjAxMS9jYWxjdWxhdG9yZW5kcG9pbnQiOwotCQlzdHViLmdldFJlcXVlc3RDb250ZXh0KCkucHV0KEJpbmRpbmdQcm92aWRlci5FTkRQT0lOVF9BRERSRVNTX1BST1BFUlRZLAotCQkgICAgICBlbmRwb2ludFVSSSk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiIEFmdGVyIHNldHRpbmcgZW5kcG9pbnQgYWRkcmVzcyBVUkkiKTsKLQkgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFVzaW5nIFNPQVAgYmluZGluZydzIGNvbnN1bWVyIHRvIGFkZCAxICsgMiA9ICIgKyBwb3J0LmFkZCgxLDIpKTsKKyAgICAgICAgLy8gR2V0IFN0dWIKKyAgICAgICAgQmluZGluZ1Byb3ZpZGVyIHN0dWIgPSAoQmluZGluZ1Byb3ZpZGVyKXBvcnQ7CisgICAgICAgIFN0cmluZyBlbmRwb2ludFVSSSA9Imh0dHA6Ly9sb2NhbGhvc3Q6MTIwMTEvY2FsY3VsYXRvcmVuZHBvaW50IjsKKyAgICAgICAgc3R1Yi5nZXRSZXF1ZXN0Q29udGV4dCgpLnB1dChCaW5kaW5nUHJvdmlkZXIuRU5EUE9JTlRfQUREUkVTU19QUk9QRVJUWSwKKyAgICAgICAgICAgICAgZW5kcG9pbnRVUkkpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBBZnRlciBzZXR0aW5nIGVuZHBvaW50IGFkZHJlc3MgVVJJIik7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBVc2luZyBTT0FQIGJpbmRpbmcncyBjb25zdW1lciB0byBhZGQgMSArIDIgPSAiICsgcG9ydC5hZGQoMSwyKSk7CiAgICAgICAgICAgICAgICAgaWYoYXJnc1swXS5lcXVhbHMoImpiaS1lbmFibGVkLXRydWUiKSkKLQkJICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5QQVNTKTsKLSAgICAgICAgICAgICAgICBlbHNlIAotCSAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5GQUlMKTsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5QQVNTKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LkZBSUwpOwogCi0JfSBjYXRjaChFeGNlcHRpb24gZSkgewotCQllLnByaW50U3RhY2tUcmFjZSgpOworICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgICAgICBpZihhcmdzWzBdLmVxdWFscygiamJpLWVuYWJsZWQtZmFsc2UiKSkKICAgICAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgICAgIGVsc2UKLQkJICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5GQUlMKTsKLQl9CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsIHN0YXQuRkFJTCk7CisgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtc2VydmVyL2VuZHBvaW50L0NhbGN1bGF0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtc2VydmVyL2VuZHBvaW50L0NhbGN1bGF0b3IuamF2YQppbmRleCBmNTlmNDMwLi4zNmE5OWQ5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9jb21wQXBwLXNlcnZlci9lbmRwb2ludC9DYWxjdWxhdG9yLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvY29tcEFwcC1zZXJ2ZXIvZW5kcG9pbnQvQ2FsY3VsYXRvci5qYXZhCkBAIC0yNSwxMyArMjUsMTMgQEAKICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9leGFtcGxlLmNvbS9DYWxjdWxhdG9yIgogKQogcHVibGljIGNsYXNzIENhbGN1bGF0b3IgewotCXB1YmxpYyBDYWxjdWxhdG9yKCkge30KKyAgICBwdWJsaWMgQ2FsY3VsYXRvcigpIHt9CiAKLQlAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9ImFkZCIsIGFjdGlvbj0idXJuOkFkZCIpCi0JcHVibGljIGludCBhZGQoaW50IGksIGludCBqKSB7CisgICAgQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJhZGQiLCBhY3Rpb249InVybjpBZGQiKQorICAgIHB1YmxpYyBpbnQgYWRkKGludCBpLCBpbnQgaikgewogICAgICAgICAgICAgICAgIGludCBrID0gaSAraiA7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGkgKyAiKyIgKyBqICsiID0gIiArIGspOwotIAotCQlyZXR1cm4gazsKLQl9CisKKyAgICAgICAgcmV0dXJuIGs7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvY29tcEFwcC1zZXJ2ZXIvamJpLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtc2VydmVyL2piaS54bWwKaW5kZXggZjkxNWRjMi4uODA1MzllMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvY29tcEFwcC1zZXJ2ZXIvamJpLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9jb21wQXBwLXNlcnZlci9qYmkueG1sCkBAIC0xOCwxNSArMTgsMTUgQEAKIC0tPgogCiA8amJpIHZlcnNpb249IjEuMCIKLQkgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCi0JIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiIAotIAkgeG1sbnM6amF2YWVzYj0iaHR0cDovL2phdmEuc3VuLmNvbSIKLQkgeG1sbnM6dG5zPSJodHRwOi8vZXhhbXBsZS5jb20vQ2FsY3VsYXRvciIKLQkgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgamJpLnhzZCI+Ci0JPHNlcnZpY2VzIGJpbmRpbmctY29tcG9uZW50PSJmYWxzZSI+Ci0JCTxwcm92aWRlcyBpbnRlcmZhY2UtbmFtZT0idG5zOkNhbGN1bGF0b3JTZXJ2aWNlIgotICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLW5hbWU9InRuczpDYWxjdWxhdG9yU2VydmljZSIgCisgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiCisgICAgICB4bWxuczpqYXZhZXNiPSJodHRwOi8vamF2YS5zdW4uY29tIgorICAgICB4bWxuczp0bnM9Imh0dHA6Ly9leGFtcGxlLmNvbS9DYWxjdWxhdG9yIgorICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSBqYmkueHNkIj4KKyAgICA8c2VydmljZXMgYmluZGluZy1jb21wb25lbnQ9ImZhbHNlIj4KKyAgICAgICAgPHByb3ZpZGVzIGludGVyZmFjZS1uYW1lPSJ0bnM6Q2FsY3VsYXRvclNlcnZpY2UiCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtbmFtZT0idG5zOkNhbGN1bGF0b3JTZXJ2aWNlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludC1uYW1lPSJDYWxjdWxhdG9yUG9ydCIvPgogICAgICAgICA8amF2YWVzYjphcnRpZmFjdHN0eXBlPldTREwxMTwvamF2YWVzYjphcnRpZmFjdHN0eXBlPgotCTwvc2VydmljZXM+CisgICAgPC9zZXJ2aWNlcz4KIDwvamJpPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvY29tcEFwcC1zZXJ2ZXIvc29hcC1iaW5kaW5nLXN1L2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9jb21wQXBwLXNlcnZlci9zb2FwLWJpbmRpbmctc3UvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbAppbmRleCAwOTBiNDMwLi40NDM0ZTVjIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9jb21wQXBwLXNlcnZlci9zb2FwLWJpbmRpbmctc3UvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9jb21wQXBwLXNlcnZlci9zb2FwLWJpbmRpbmctc3UvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbApAQCAtMTksOSArMTksOSBAQAogCiA8IS0tIGpiaS54bWwgZmlsZSBmb3IgdGhlIFNPQVAgYmluZGluZyBkZXBsb3ltZW50cyBiaW5kaW5nLiAtLT4KIDxqYmkKLSAgICB2ZXJzaW9uPSIxLjAiIAotICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiIAotICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAorICAgIHZlcnNpb249IjEuMCIKKyAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgLi9qYmkueHNkIj4KICAgPHNlcnZpY2UtYXNzZW1ibHk+CiAgICAgPGlkZW50aWZpY2F0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvY29tcEFwcC1zZXJ2ZXIvc29hcC1iaW5kaW5nLXN1L3N1L01FVEEtSU5GL2piaS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9jb21wQXBwLXNlcnZlci9zb2FwLWJpbmRpbmctc3Uvc3UvTUVUQS1JTkYvamJpLnhtbAppbmRleCAyZDFlN2U4Li42NWNhOTZmIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9jb21wQXBwLXNlcnZlci9zb2FwLWJpbmRpbmctc3Uvc3UvTUVUQS1JTkYvamJpLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9jb21wQXBwLXNlcnZlci9zb2FwLWJpbmRpbmctc3Uvc3UvTUVUQS1JTkYvamJpLnhtbApAQCAtMTgsMTYgKzE4LDE2IEBACiAtLT4KIAogPGpiaSB2ZXJzaW9uPSIxLjAiCi0JIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAotCSB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIiAKLSAJIHhtbG5zOmphdmFlc2I9Imh0dHA6Ly9qYXZhLnN1bi5jb20iCi0JIHhtbG5zOnRucz0iaHR0cDovL2V4YW1wbGUuY29tL0NhbGN1bGF0b3IiCi0JIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIGpiaS54c2QiPgotCTxzZXJ2aWNlcyBiaW5kaW5nLWNvbXBvbmVudD0idHJ1ZSI+CQkKLQkJPGNvbnN1bWVzIGludGVyZmFjZS1uYW1lPSJ0bnM6Q2FsY3VsYXRvclNlcnZpY2UiCi0JCQkgIGxpbmstdHlwZT0ic3RhbmRhcmQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtbmFtZT0idG5zOkNhbGN1bGF0b3JTZXJ2aWNlIiAKKyAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIKKyAgICAgIHhtbG5zOmphdmFlc2I9Imh0dHA6Ly9qYXZhLnN1bi5jb20iCisgICAgIHhtbG5zOnRucz0iaHR0cDovL2V4YW1wbGUuY29tL0NhbGN1bGF0b3IiCisgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIGpiaS54c2QiPgorICAgIDxzZXJ2aWNlcyBiaW5kaW5nLWNvbXBvbmVudD0idHJ1ZSI+CisgICAgICAgIDxjb25zdW1lcyBpbnRlcmZhY2UtbmFtZT0idG5zOkNhbGN1bGF0b3JTZXJ2aWNlIgorICAgICAgICAgICAgICBsaW5rLXR5cGU9InN0YW5kYXJkIgorICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLW5hbWU9InRuczpDYWxjdWxhdG9yU2VydmljZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQtbmFtZT0iQ2FsY3VsYXRvclBvcnQiLz4KICAgICAgICAgPGphdmFlc2I6YXJ0aWZhY3RzdHlwZT5XU0RMMTE8L2phdmFlc2I6YXJ0aWZhY3RzdHlwZT4KLQk8L3NlcnZpY2VzPgorICAgIDwvc2VydmljZXM+CiA8L2piaT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtc2VydmVyL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9jb21wQXBwLXNlcnZlci93ZWIueG1sCmluZGV4IDA3ZTE0NzcuLjc5OGM2OWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2NvbXBBcHAtc2VydmVyL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvY29tcEFwcC1zZXJ2ZXIvd2ViLnhtbApAQCAtMTgsMzAgKzE4LDMwIEBACiAtLT4KIAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCi0JCQlodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KKyAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCisgICAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KIAotCTxkZXNjcmlwdGlvbj5XZWJUaWVyIGZvciB0aGUgQ2FsY3VsYXRvciBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQk8ZGlzcGxheS1uYW1lPkNhbGN1bGF0b3JXQVI8L2Rpc3BsYXktbmFtZT4KKyAgICA8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIENhbGN1bGF0b3IgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV0FSPC9kaXNwbGF5LW5hbWU+CiAKLQk8c2VydmxldD4KLQkJPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBDYWxjdWxhdG9yIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQkJPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgotCQk8c2VydmxldC1uYW1lPkNhbGN1bGF0b3I8L3NlcnZsZXQtbmFtZT4KLQkJPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuQ2FsY3VsYXRvcjwvc2VydmxldC1jbGFzcz4KLQkJPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+Ci0JPC9zZXJ2bGV0PgorICAgIDxzZXJ2bGV0PgorICAgICAgICA8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIENhbGN1bGF0b3IgV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgICAgICA8ZGlzcGxheS1uYW1lPkNhbGN1bGF0b3JXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+Q2FsY3VsYXRvcjwvc2VydmxldC1uYW1lPgorICAgICAgICA8c2VydmxldC1jbGFzcz5lbmRwb2ludC5DYWxjdWxhdG9yPC9zZXJ2bGV0LWNsYXNzPgorICAgICAgICA8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KKyAgICA8L3NlcnZsZXQ+CiAKLQk8c2VydmxldC1tYXBwaW5nPgotCQk8c2VydmxldC1uYW1lPkNhbGN1bGF0b3I8L3NlcnZsZXQtbmFtZT4KLQkJPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL0NhbGN1bGF0b3JTZXJ2aWNlPC91cmwtcGF0dGVybj4KLQk8L3NlcnZsZXQtbWFwcGluZz4KKyAgICA8c2VydmxldC1tYXBwaW5nPgorICAgICAgICA8c2VydmxldC1uYW1lPkNhbGN1bGF0b3I8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL0NhbGN1bGF0b3JTZXJ2aWNlPC91cmwtcGF0dGVybj4KKyAgICA8L3NlcnZsZXQtbWFwcGluZz4KIAotCTxzZXNzaW9uLWNvbmZpZz4KLQkJPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgotCTwvc2Vzc2lvbi1jb25maWc+CisgICAgPHNlc3Npb24tY29uZmlnPgorICAgICAgICA8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+CisgICAgPC9zZXNzaW9uLWNvbmZpZz4KIAogPC93ZWItYXBwPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggZDcwZmUwNC4uZmNjMDY4NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW5kcG9pbnRfbWFwcGluZy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmcvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjYWxjLXdlYi1jbGllbnQiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9Ii4vd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iLi9zdW4td2ViLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW5kcG9pbnRfbWFwcGluZy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nL2J1aWxkLnhtbAppbmRleCBkYjUxMWVhLi40ODdiOTljIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nL2J1aWxkLnhtbApAQCAtMzgsNyArMzgsNyBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KLQkgIDxkZWxldGUgZmlsZT0iJHtqYmktY29tcG9uZW50LXN1LWRpcn0vYXNzZW1ibHkvJHthcHBuYW1lfS13ZWIud2FyIi8+CisgICAgICA8ZGVsZXRlIGZpbGU9IiR7amJpLWNvbXBvbmVudC1zdS1kaXJ9L2Fzc2VtYmx5LyR7YXBwbmFtZX0td2ViLndhciIvPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iYXNzZW1ibGUtd2ViLCBkZXBsb3ktamJpLWNvbXBvbmVudC1zdSxhc3NlbWJsZS1jbGllbnQsZGVwbG95LWNsaWVudCIvPgpAQCAtNTAsMjMgKzUwLDIzIEBACiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlLXdlYiIgZGVwZW5kcz0iaW5pdC1jb21tb24sIGNvbXBpbGUiPgotCSAgPGVjaG8gbWVzc2FnZT0iY2xhc3NlcyBkaXIgPSAke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgotCSAgPGVjaG8gbWVzc2FnZT0iYXNzZW1ibGUuZGlyID0gJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciIvPgorICAgICAgPGVjaG8gbWVzc2FnZT0iY2xhc3NlcyBkaXIgPSAke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgorICAgICAgPGVjaG8gbWVzc2FnZT0iYXNzZW1ibGUuZGlyID0gJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciIvPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwa2ctd2FyIj4KICAgICAgICAgPHBhcmFtIG5hbWU9Indhci5jbGFzc2VzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4KICAgICAgICAgPHBhcmFtIG5hbWU9Indhci5maWxlIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciIvPgogICAgICAgIDwvYW50Y2FsbD4KLQkgICA8IS0tIEFkZCBNRVRBLUlORi9qYmkueG1sIHRvIC53YXIgZmlsZSAtLT4KLQkgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvTUVUQS1JTkYiLz4KLQkgICA8ZWNobyBtZXNzYWdlPSJjcmVhdGVkIGRpciA9ICR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9NRVRBLUlORiIvPgotCSAgIDxjb3B5IGZpbGU9IiR7amJpLWNvbXBvbmVudC1zdS1kaXJ9L3N1L01FVEEtSU5GL2piaS54bWwiIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL01FVEEtSU5GL2piaS54bWwiLz4KLQkgICA8amFyIGphcmZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIiIHVwZGF0ZT0idHJ1ZSI+Ci0JICAgCQk8ZmlsZXNldCBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcCI+Ci0JCQkJPGluY2x1ZGUgbmFtZT0iTUVUQS1JTkYvamJpLnhtbCIvPgotCQkJPC9maWxlc2V0PgotCSAgIDwvamFyPgotCSAgIDwhLS0gQ29weSB0aGUgSmF2YUVFIGFwcCB0byB0aGUgc2VydmljZSBhc3NlbWJseSAtLT4KLQkgIDxjb3B5IGZpbGU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LXdlYi53YXIiIHRvZGlyPSIke2piaS1jb21wb25lbnQtc3UtZGlyfS9hc3NlbWJseSIvPgorICAgICAgIDwhLS0gQWRkIE1FVEEtSU5GL2piaS54bWwgdG8gLndhciBmaWxlIC0tPgorICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3RtcC9NRVRBLUlORiIvPgorICAgICAgIDxlY2hvIG1lc3NhZ2U9ImNyZWF0ZWQgZGlyID0gJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wL01FVEEtSU5GIi8+CisgICAgICAgPGNvcHkgZmlsZT0iJHtqYmktY29tcG9uZW50LXN1LWRpcn0vc3UvTUVUQS1JTkYvamJpLnhtbCIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS90bXAvTUVUQS1JTkYvamJpLnhtbCIvPgorICAgICAgIDxqYXIgamFyZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciIgdXBkYXRlPSJ0cnVlIj4KKyAgICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vdG1wIj4KKyAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9qYmkueG1sIi8+CisgICAgICAgICAgICA8L2ZpbGVzZXQ+CisgICAgICAgPC9qYXI+CisgICAgICAgPCEtLSBDb3B5IHRoZSBKYXZhRUUgYXBwIHRvIHRoZSBzZXJ2aWNlIGFzc2VtYmx5IC0tPgorICAgICAgPGNvcHkgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciIgdG9kaXI9IiR7amJpLWNvbXBvbmVudC1zdS1kaXJ9L2Fzc2VtYmx5Ii8+CiAgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlLWNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgpAQCAtNzgsNyArNzgsNyBAQAogICAgICAgICAgICAgICAgdmFsdWU9Ii1rZWVwIC1kICR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL2NsYXNzZXMgaHR0cDovL2xvY2FsaG9zdDo4MDgwL2NhbGMtd2ViLWNsaWVudC13ZWIvd2Vic2VydmljZS9FbmRwb2ludE1hcHBpbmdTZXJ2aWNlP1dTREwiLz4KICAgICA8L2FudGNhbGw+CiAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi9jbGFzc2VzIgotICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9qMmVlLmphciIgCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2oyZWUuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IndlYmNsaWVudC8qKiIvPgogICAgICAgPGNvcHkgZmlsZT0iLi9jbGllbnQtd2ViLnhtbCIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi93ZWIueG1sIi8+CiAgICAgICA8Y29weSBmaWxlPSIuL2NsaWVudC1zdW4td2ViLnhtbCIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi9zdW4td2ViLnhtbCIvPgpAQCAtMTE3LDExICsxMTcsMTEgQEAKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY2xpZW50Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bnRlc3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgotICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IiAKLSAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIAorICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJjbGllbnQvKioiLz4KICAgICAgIDx1bmphciBzcmM9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiBkZXN0PSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iY2xpZW50LlRlc3RDbGllbnQiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW5kcG9pbnRfbWFwcGluZy9jbGllbnQtd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmcvY2xpZW50LXdlYi54bWwKaW5kZXggZWViNzMwZC4uNzk1YjA1MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW5kcG9pbnRfbWFwcGluZy9jbGllbnQtd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nL2NsaWVudC13ZWIueG1sCkBAIC0yMCw3ICsyMCw3IEBACiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgCisgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAgIDxkZXNjcmlwdGlvbj5BIHRlc3QgYXBwbGljYXRpb248L2Rlc2NyaXB0aW9uPgogICA8ZGlzcGxheS1uYW1lPldlYlRpZXI8L2Rpc3BsYXktbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmcvY2xpZW50L1Rlc3RDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmcvY2xpZW50L1Rlc3RDbGllbnQuamF2YQppbmRleCBlZWQ4ZTVhLi43YmRiNDNhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW5kcG9pbnRfbWFwcGluZy9jbGllbnQvVGVzdENsaWVudC5qYXZhCkBAIC0yOSw3ICsyOSw3IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdElkID0gImpiaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludC1uYW1pbmciOworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0SWQgPSAiamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50LW5hbWluZyI7CiAKICAgICBwdWJsaWMgYm9vbGVhbiBmb3VuZDEgPSBmYWxzZTsKIApAQCAtNDYsOCArNDYsOCBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgaW50IGNvZGUgPSBpbnZva2VTZXJ2bGV0KHVybCk7CiAgICAgICAgICAgICByZXBvcnQoY29kZSk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgZmFpbCgpOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGZhaWwoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNjIsNyArNjIsNyBAQAogICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICBsb2cobGluZSk7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIlJlc3VsdCBpcyIpICE9IC0xKQotCQlmb3VuZDEgPSB0cnVlOworICAgICAgICBmb3VuZDEgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjb2RlOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmcvZW5kcG9pbnQvRW5kcG9pbnRNYXBwaW5nLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nL2VuZHBvaW50L0VuZHBvaW50TWFwcGluZy5qYXZhCmluZGV4IDZhOGMwMzcuLjdhNWIyZDMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmcvZW5kcG9pbnQvRW5kcG9pbnRNYXBwaW5nLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW5kcG9pbnRfbWFwcGluZy9lbmRwb2ludC9FbmRwb2ludE1hcHBpbmcuamF2YQpAQCAtMjYsMTMgKzI2LDEzIEBACiAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZXhhbXBsZS53ZWIuc2VydmljZS9FbmRwb2ludE1hcHBpbmciCiApCiBwdWJsaWMgY2xhc3MgRW5kcG9pbnRNYXBwaW5nIHsKLQlwdWJsaWMgRW5kcG9pbnRNYXBwaW5nKCkge30KKyAgICBwdWJsaWMgRW5kcG9pbnRNYXBwaW5nKCkge30KIAotCUBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0iYWRkIiwgYWN0aW9uPSJ1cm46QWRkIikKLQlwdWJsaWMgaW50IGFkZChpbnQgaSwgaW50IGopIHRocm93cyBFeGNlcHRpb24geworICAgIEBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0iYWRkIiwgYWN0aW9uPSJ1cm46QWRkIikKKyAgICBwdWJsaWMgaW50IGFkZChpbnQgaSwgaW50IGopIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICAgICAgICAgIGludCBrID0gaSAraiA7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGkgKyAiKyIgKyBqICsiID0gIiArIGspOwotCQkvL3Rocm93IG5ldyBqYXZhLmxhbmcuRXhjZXB0aW9uKCJUaGlzIGlzIG15IGV4Y2VwdGlvbiIpOyAKLQkJcmV0dXJuIGs7Ci0JfQorICAgICAgICAvL3Rocm93IG5ldyBqYXZhLmxhbmcuRXhjZXB0aW9uKCJUaGlzIGlzIG15IGV4Y2VwdGlvbiIpOworICAgICAgICByZXR1cm4gazsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nL2phdmFlZS1zZS1zZXJ2aWNldW5pdC9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW5kcG9pbnRfbWFwcGluZy9qYXZhZWUtc2Utc2VydmljZXVuaXQvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbAppbmRleCA5NTYxODZiLi5kZDJmMTljIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nL2phdmFlZS1zZS1zZXJ2aWNldW5pdC9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmcvamF2YWVlLXNlLXNlcnZpY2V1bml0L2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKQEAgLTE5LDE3ICsxOSwxNyBAQAogCiA8IS0tIGpiaS54bWwgZmlsZSBmb3IgdGhlIFNPQVAgYmluZGluZyBkZXBsb3ltZW50cyBiaW5kaW5nLiAtLT4KIDxqYmkKLSAgICB2ZXJzaW9uPSIxLjAiIAotICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiIAorICAgIHZlcnNpb249IjEuMCIKKyAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIgogICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0JeG1sbnM6bnMwPSJodHRwOi8vZXhhbXBsZS53ZWIuc2VydmljZS9FbmRwb2ludE1hcHBpbmciCisgICAgeG1sbnM6bnMwPSJodHRwOi8vZXhhbXBsZS53ZWIuc2VydmljZS9FbmRwb2ludE1hcHBpbmciCiAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgLi9qYmkueHNkIj4KICAgPHNlcnZpY2UtYXNzZW1ibHk+CiAgICAgPGlkZW50aWZpY2F0aW9uPgogICAgICAgPG5hbWU+Y2xpZW50X3dlYl9jYWxjdWxhdG9yX3NlcnZpY2VfYXNzZW1ibHk8L25hbWU+CiAgICAgICA8ZGVzY3JpcHRpb24+Q2xpZW50IHdlYiBjYWxjdWxhdG9yIHNlcnZpY2UgYXNzZW1ibHk8L2Rlc2NyaXB0aW9uPgogICAgIDwvaWRlbnRpZmljYXRpb24+Ci0JPHNlcnZpY2UtdW5pdD4KKyAgICA8c2VydmljZS11bml0PgogICAgICAgPGlkZW50aWZpY2F0aW9uPgogICAgICAgICAgPG5hbWU+Y2FsYy13ZWItY2xpZW50PC9uYW1lPgogICAgICAgICAgPGRlc2NyaXB0aW9uPnByb3ZpZGVyIHNlcnZpY2U8L2Rlc2NyaXB0aW9uPgpAQCAtNDEsMTAgKzQxLDEwIEBACiAgICAgPC9zZXJ2aWNlLXVuaXQ+CiAKICAgIDxjb25uZWN0aW9ucz4KLSAgIAk8Y29ubmVjdGlvbj4KLQkJPGNvbnN1bWVyIGVuZHBvaW50LW5hbWU9IkVuZHBvaW50TWFwcGluZ1BvcnQiIHNlcnZpY2UtbmFtZT0ibnMwOkVuZHBvaW50TWFwcGluZ1NlcnZpY2UiLz4KLQkgICAJPHByb3ZpZGVyIGVuZHBvaW50LW5hbWU9ImphdmFlZV9FbmRwb2ludE1hcHBpbmdQb3J0IiBzZXJ2aWNlLW5hbWU9Im5zMDpFbmRwb2ludE1hcHBpbmdTZXJ2aWNlIi8+Ci0JPC9jb25uZWN0aW9uPgorICAgICAgIDxjb25uZWN0aW9uPgorICAgICAgICA8Y29uc3VtZXIgZW5kcG9pbnQtbmFtZT0iRW5kcG9pbnRNYXBwaW5nUG9ydCIgc2VydmljZS1uYW1lPSJuczA6RW5kcG9pbnRNYXBwaW5nU2VydmljZSIvPgorICAgICAgICAgICA8cHJvdmlkZXIgZW5kcG9pbnQtbmFtZT0iamF2YWVlX0VuZHBvaW50TWFwcGluZ1BvcnQiIHNlcnZpY2UtbmFtZT0ibnMwOkVuZHBvaW50TWFwcGluZ1NlcnZpY2UiLz4KKyAgICA8L2Nvbm5lY3Rpb24+CiAgICA8L2Nvbm5lY3Rpb25zPgogICAgPC9zZXJ2aWNlLWFzc2VtYmx5PgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nL2phdmFlZS1zZS1zZXJ2aWNldW5pdC9zdS9NRVRBLUlORi9qYmkueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW5kcG9pbnRfbWFwcGluZy9qYXZhZWUtc2Utc2VydmljZXVuaXQvc3UvTUVUQS1JTkYvamJpLnhtbAppbmRleCA1NGZlODA0Li4xOTg2MzNiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nL2phdmFlZS1zZS1zZXJ2aWNldW5pdC9zdS9NRVRBLUlORi9qYmkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmcvamF2YWVlLXNlLXNlcnZpY2V1bml0L3N1L01FVEEtSU5GL2piaS54bWwKQEAgLTE4LDEzICsxOCwxMyBAQAogLS0+CiAKIDxqYmkgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIgeG1sbnM6amF2YWVlX2V4dD0iaHR0cDovL2phdmFlZS5zZXJ2aWNlZW5naW5lLnN1bi5jb20vZW5kcG9pbnQvbmFtaW5nL2V4dGVuc2lvbiIgeG1sbnM6bnMwPSJodHRwOi8vZXhhbXBsZS53ZWIuc2VydmljZS9FbmRwb2ludE1hcHBpbmciIHZlcnNpb249IjEuMCI+Ci0JPHNlcnZpY2VzIGJpbmRpbmctY29tcG9uZW50PSJmYWxzZSI+IAotCQk8cHJvdmlkZXMgZW5kcG9pbnQtbmFtZT0iamF2YWVlX0VuZHBvaW50TWFwcGluZ1BvcnQiIGludGVyZmFjZS1uYW1lPSJuczA6RW5kcG9pbnRNYXBwaW5nU2VydmljZUludGVyZmFjZSIgc2VydmljZS1uYW1lPSJuczA6RW5kcG9pbnRNYXBwaW5nU2VydmljZSIvPgotCQk8amF2YWVlX2V4dDplcHQtbWFwcGluZ3M+Ci0JCQk8amF2YWVlX2V4dDplcHQtbWFwcGluZz4KLQkJCQk8amF2YWVlX2V4dDpqYXZhLWVwdCBlbmRwb2ludC1uYW1lPSJqYXZhZWVfRW5kcG9pbnRNYXBwaW5nUG9ydCIgaW50ZXJmYWNlLW5hbWU9Im5zMDpFbmRwb2ludE1hcHBpbmdTZXJ2aWNlSW50ZXJmYWNlIiBzZXJ2aWNlLW5hbWU9Im5zMDpFbmRwb2ludE1hcHBpbmdTZXJ2aWNlIiB0eXBlPSJwcm92aWRlciIvPgotCQkJCTxqYXZhZWVfZXh0OndzZGwtZXB0IGVuZHBvaW50LW5hbWU9IkVuZHBvaW50TWFwcGluZ1BvcnQiIGludGVyZmFjZS1uYW1lPSJuczA6RW5kcG9pbnRNYXBwaW5nU2VydmljZUludGVyZmFjZSIgc2VydmljZS1uYW1lPSJuczA6RW5kcG9pbnRNYXBwaW5nU2VydmljZSIgdHlwZT0icHJvdmlkZXIiLz4KLQkJCTwvamF2YWVlX2V4dDplcHQtbWFwcGluZz4KLQkJPC9qYXZhZWVfZXh0OmVwdC1tYXBwaW5ncz4KLQk8L3NlcnZpY2VzPiAKKyAgICA8c2VydmljZXMgYmluZGluZy1jb21wb25lbnQ9ImZhbHNlIj4KKyAgICAgICAgPHByb3ZpZGVzIGVuZHBvaW50LW5hbWU9ImphdmFlZV9FbmRwb2ludE1hcHBpbmdQb3J0IiBpbnRlcmZhY2UtbmFtZT0ibnMwOkVuZHBvaW50TWFwcGluZ1NlcnZpY2VJbnRlcmZhY2UiIHNlcnZpY2UtbmFtZT0ibnMwOkVuZHBvaW50TWFwcGluZ1NlcnZpY2UiLz4KKyAgICAgICAgPGphdmFlZV9leHQ6ZXB0LW1hcHBpbmdzPgorICAgICAgICAgICAgPGphdmFlZV9leHQ6ZXB0LW1hcHBpbmc+CisgICAgICAgICAgICAgICAgPGphdmFlZV9leHQ6amF2YS1lcHQgZW5kcG9pbnQtbmFtZT0iamF2YWVlX0VuZHBvaW50TWFwcGluZ1BvcnQiIGludGVyZmFjZS1uYW1lPSJuczA6RW5kcG9pbnRNYXBwaW5nU2VydmljZUludGVyZmFjZSIgc2VydmljZS1uYW1lPSJuczA6RW5kcG9pbnRNYXBwaW5nU2VydmljZSIgdHlwZT0icHJvdmlkZXIiLz4KKyAgICAgICAgICAgICAgICA8amF2YWVlX2V4dDp3c2RsLWVwdCBlbmRwb2ludC1uYW1lPSJFbmRwb2ludE1hcHBpbmdQb3J0IiBpbnRlcmZhY2UtbmFtZT0ibnMwOkVuZHBvaW50TWFwcGluZ1NlcnZpY2VJbnRlcmZhY2UiIHNlcnZpY2UtbmFtZT0ibnMwOkVuZHBvaW50TWFwcGluZ1NlcnZpY2UiIHR5cGU9InByb3ZpZGVyIi8+CisgICAgICAgICAgICA8L2phdmFlZV9leHQ6ZXB0LW1hcHBpbmc+CisgICAgICAgIDwvamF2YWVlX2V4dDplcHQtbWFwcGluZ3M+CisgICAgPC9zZXJ2aWNlcz4KIDwvamJpPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW5kcG9pbnRfbWFwcGluZy93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW5kcG9pbnRfbWFwcGluZy93ZWIueG1sCmluZGV4IDM1ODc0MGEuLmYzYzZkNWQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmcvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nL3dlYi54bWwKQEAgLTE4LDMwICsxOCwzMCBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotCQkJaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CisgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQorICAgICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAKLQk8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIEVuZHBvaW50TWFwcGluZyBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQk8ZGlzcGxheS1uYW1lPkVuZHBvaW50TWFwcGluZ1dBUjwvZGlzcGxheS1uYW1lPgorICAgIDxkZXNjcmlwdGlvbj5XZWJUaWVyIGZvciB0aGUgRW5kcG9pbnRNYXBwaW5nIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgIDxkaXNwbGF5LW5hbWU+RW5kcG9pbnRNYXBwaW5nV0FSPC9kaXNwbGF5LW5hbWU+CiAKLQk8c2VydmxldD4KLQkJPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBFbmRwb2ludE1hcHBpbmcgV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCQk8ZGlzcGxheS1uYW1lPkVuZHBvaW50TWFwcGluZ1dlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KLQkJPHNlcnZsZXQtbmFtZT5FbmRwb2ludE1hcHBpbmc8L3NlcnZsZXQtbmFtZT4KLQkJPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuRW5kcG9pbnRNYXBwaW5nPC9zZXJ2bGV0LWNsYXNzPgotCQk8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KLQk8L3NlcnZsZXQ+CisgICAgPHNlcnZsZXQ+CisgICAgICAgIDxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgRW5kcG9pbnRNYXBwaW5nIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgPGRpc3BsYXktbmFtZT5FbmRwb2ludE1hcHBpbmdXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+RW5kcG9pbnRNYXBwaW5nPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkVuZHBvaW50TWFwcGluZzwvc2VydmxldC1jbGFzcz4KKyAgICAgICAgPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+CisgICAgPC9zZXJ2bGV0PgogCi0JPHNlcnZsZXQtbWFwcGluZz4KLQkJPHNlcnZsZXQtbmFtZT5FbmRwb2ludE1hcHBpbmc8L3NlcnZsZXQtbmFtZT4KLQkJPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL0VuZHBvaW50TWFwcGluZ1NlcnZpY2U8L3VybC1wYXR0ZXJuPgotCTwvc2VydmxldC1tYXBwaW5nPgorICAgIDxzZXJ2bGV0LW1hcHBpbmc+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+RW5kcG9pbnRNYXBwaW5nPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9FbmRwb2ludE1hcHBpbmdTZXJ2aWNlPC91cmwtcGF0dGVybj4KKyAgICA8L3NlcnZsZXQtbWFwcGluZz4KIAotCTxzZXNzaW9uLWNvbmZpZz4KLQkJPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgotCTwvc2Vzc2lvbi1jb25maWc+CisgICAgPHNlc3Npb24tY29uZmlnPgorICAgICAgICA8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+CisgICAgPC9zZXNzaW9uLWNvbmZpZz4KIAogPC93ZWItYXBwPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nL3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nL3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggZjdiZjQ2Ny4uZjA1YmRjNCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW5kcG9pbnRfbWFwcGluZy93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmcvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjgsMzUgKzI4LDM1IEBACiAKICAgICAgICBAV2ViU2VydmljZVJlZihuYW1lPSJzdW4td2ViLnNlcnZpY2VyZWYvY2FsY3VsYXRvciIpIEVuZHBvaW50TWFwcGluZ1NlcnZpY2Ugc2VydmljZTsKIAotICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkgCi0JCXRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CisgICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQorICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICAgICBkb1Bvc3QocmVxLCByZXNwKTsKICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQogICAgICAgICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewotCSAgICBQcmludFdyaXRlciBvdXQ9bnVsbDsKKyAgICAgICAgUHJpbnRXcml0ZXIgb3V0PW51bGw7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFNlcnZpY2UgaXMgOiIgKyBzZXJ2aWNlKTsKICAgICAgICAgICAgICAgICByZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKLSAgICAgICAgICAgIAlvdXQgPSByZXNwLmdldFdyaXRlcigpOworICAgICAgICAgICAgICAgIG91dCA9IHJlc3AuZ2V0V3JpdGVyKCk7CiAgICAgICAgICAgICAgICAgRW5kcG9pbnRNYXBwaW5nIHBvcnQgPSBzZXJ2aWNlLmdldEVuZHBvaW50TWFwcGluZ1BvcnQoKTsKICAgICAgICAgICAgICAgICBpbnQgcmV0ID0gcG9ydC5hZGQoMSwgMik7Ci0JCXByaW50U3VjY2VzcyhvdXQscmV0KTsKKyAgICAgICAgcHJpbnRTdWNjZXNzKG91dCxyZXQpOwogICAgICAgICAgICAgfSBjYXRjaChqYXZhLmxhbmcuRXhjZXB0aW9uIGUpIHsKLQkJLy9lLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICAJcHJpbnRGYWlsdXJlKG91dCwgZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAvL2UucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICBwcmludEZhaWx1cmUob3V0LCBlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICB9IGZpbmFsbHkgewotCQlpZihvdXQgIT0gbnVsbCkgeworICAgICAgICBpZihvdXQgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICBvdXQuZmx1c2goKTsKICAgICAgICAgICAgICAgICAgICAgb3V0LmNsb3NlKCk7Ci0JCX0KLQkgICAgfQorICAgICAgICB9CisgICAgICAgIH0KICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBwcmludEZhaWx1cmUoUHJpbnRXcml0ZXIgb3V0LCBTdHJpbmcgZXJyTXNnKSB7Ci0JCWlmKG91dCA9PSBudWxsKSByZXR1cm47Ci0JCW91dC5wcmludGxuKCI8aHRtbD4iKTsKKyAgICAgICAgaWYob3V0ID09IG51bGwpIHJldHVybjsKKyAgICAgICAgb3V0LnByaW50bG4oIjxodG1sPiIpOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aGVhZD4iKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPHRpdGxlPlRlc3RTZXJ2bGV0PC90aXRsZT4iKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9oZWFkPiIpOwpAQCAtNjksNyArNjksNyBAQAogICAgICAgIH0KIAogICAgICAgIHB1YmxpYyB2b2lkIHByaW50U3VjY2VzcyhQcmludFdyaXRlciBvdXQsIGludCByZXN1bHQpIHsKLQkJaWYob3V0ID09IG51bGwpIHJldHVybjsKKyAgICAgICAgaWYob3V0ID09IG51bGwpIHJldHVybjsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGh0bWw+Iik7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoZWFkPiIpOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8dGl0bGU+VGVzdFNlcnZsZXQ8L3RpdGxlPiIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW5kcG9pbnRfbWFwcGluZ19jb25zdW1lci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW5kcG9pbnRfbWFwcGluZ19jb25zdW1lci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGFjYzU3ZjMuLmMyZjdhNTAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmdfY29uc3VtZXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nX2NvbnN1bWVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ianNyMjA4LWludGVncmF0aW9uLXdlYi1jbGllbnQiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9Ii4vd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iLi9zdW4td2ViLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW5kcG9pbnRfbWFwcGluZ19jb25zdW1lci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nX2NvbnN1bWVyL2J1aWxkLnhtbAppbmRleCBmYzg4NTVmLi42YzZkOTEwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nX2NvbnN1bWVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nX2NvbnN1bWVyL2J1aWxkLnhtbApAQCAtNzYsNyArNzYsNyBAQAogICAgICAgICAgICAgICAgdmFsdWU9Ii1rZWVwIC1kICR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL2NsYXNzZXMgLi93ZWJjbGllbnQvY2xpZW50L3dzZGwvRW5kcG9pbnRNYXBwaW5nQ29uc3VtZXJTZXJ2aWNlLndzZGwiLz4KICAgICA8L2FudGNhbGw+CiAgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi9jbGFzc2VzIgotICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9qMmVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy1ydC5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtdG9vbHMuamFyIiAKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvajJlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtcnQuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXRvb2xzLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJ3ZWJjbGllbnQvKioiLz4KICAgICAgIDxjb3B5IGZpbGU9Ii4vY2xpZW50LXdlYi54bWwiIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvd2ViLnhtbCIvPgogICAgICAgPGNvcHkgZmlsZT0iLi9jbGllbnQtc3VuLXdlYi54bWwiIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvc3VuLXdlYi54bWwiLz4KQEAgLTk4LDExICs5OCwxMSBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jbGllbnQiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVudGVzdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+Ci0gICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiIAotICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgCisgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9ImNsaWVudC8qKiIvPgogICAgICAgPHVuamFyIHNyYz0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIGRlc3Q9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgogICAgICAgPGphdmEgY2xhc3NuYW1lPSJjbGllbnQuVGVzdENsaWVudCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nX2NvbnN1bWVyL2NsaWVudC13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW5kcG9pbnRfbWFwcGluZ19jb25zdW1lci9jbGllbnQtd2ViLnhtbAppbmRleCBlZWI3MzBkLi43OTViMDUyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nX2NvbnN1bWVyL2NsaWVudC13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmdfY29uc3VtZXIvY2xpZW50LXdlYi54bWwKQEAgLTIwLDcgKzIwLDcgQEAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCiAgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0gICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSAKKyAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCiAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KICAgPGRlc2NyaXB0aW9uPkEgdGVzdCBhcHBsaWNhdGlvbjwvZGVzY3JpcHRpb24+CiAgIDxkaXNwbGF5LW5hbWU+V2ViVGllcjwvZGlzcGxheS1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW5kcG9pbnRfbWFwcGluZ19jb25zdW1lci9jbGllbnQvVGVzdENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW5kcG9pbnRfbWFwcGluZ19jb25zdW1lci9jbGllbnQvVGVzdENsaWVudC5qYXZhCmluZGV4IDZiNjQ5MjIuLjc1NTQ5YzIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmdfY29uc3VtZXIvY2xpZW50L1Rlc3RDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nX2NvbnN1bWVyL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKQEAgLTI5LDcgKzI5LDcgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwotCXByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0SWQgPSAiamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmdfY29uc3VtZXIiOworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0SWQgPSAiamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmdfY29uc3VtZXIiOwogCiAgICAgcHVibGljIGJvb2xlYW4gZm91bmQxID0gZmFsc2U7CiAgICAgcHVibGljIGJvb2xlYW4gZm91bmQyID0gZmFsc2U7CkBAIC00Nyw3ICs0Nyw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnQgY29kZSA9IGludm9rZVNlcnZsZXQodXJsKTsKICAgICAgICAgICAgIHJlcG9ydChjb2RlKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICB9CkBAIC02NCw5ICs2NCw5IEBACiAgICAgICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgICAgICAgIGxvZyhsaW5lKTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiU28gdGhlIFJFU1VMVCBPRiBFbmRwb2ludE1hcHBpbmdDb25zdW1lciBhZGQgU0VSVklDRSBJUyIpICE9IC0xKQotCQlmb3VuZDEgPSB0cnVlOworICAgICAgICBmb3VuZDEgPSB0cnVlOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJbM10iKSAhPSAtMSkKLQkJZm91bmQyID0gdHJ1ZTsKKyAgICAgICAgZm91bmQyID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY29kZTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nX2NvbnN1bWVyL2VuZHBvaW50L0VuZHBvaW50TWFwcGluZ0NvbnN1bWVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nX2NvbnN1bWVyL2VuZHBvaW50L0VuZHBvaW50TWFwcGluZ0NvbnN1bWVyLmphdmEKaW5kZXggYjhiZDc4Yi4uZTUwZWE0ZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW5kcG9pbnRfbWFwcGluZ19jb25zdW1lci9lbmRwb2ludC9FbmRwb2ludE1hcHBpbmdDb25zdW1lci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmdfY29uc3VtZXIvZW5kcG9pbnQvRW5kcG9pbnRNYXBwaW5nQ29uc3VtZXIuamF2YQpAQCAtMjUsMTMgKzI1LDEzIEBACiAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZXhhbXBsZS53ZWIuc2VydmljZS9FbmRwb2ludE1hcHBpbmdDb25zdW1lciIKICkKIHB1YmxpYyBjbGFzcyBFbmRwb2ludE1hcHBpbmdDb25zdW1lciB7Ci0JcHVibGljIEVuZHBvaW50TWFwcGluZ0NvbnN1bWVyKCkge30KKyAgICBwdWJsaWMgRW5kcG9pbnRNYXBwaW5nQ29uc3VtZXIoKSB7fQogCi0JQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJhZGQiLCBhY3Rpb249InVybjpBZGQiKQotCXB1YmxpYyBpbnQgYWRkKGludCBpLCBpbnQgaikgeworICAgIEBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0iYWRkIiwgYWN0aW9uPSJ1cm46QWRkIikKKyAgICBwdWJsaWMgaW50IGFkZChpbnQgaSwgaW50IGopIHsKICAgICAgICAgICAgICAgICBpbnQgayA9IGkgK2ogOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihpICsgIisiICsgaiArIiA9ICIgKyBrKTsKLSAKLQkJcmV0dXJuIGs7Ci0JfQorCisgICAgICAgIHJldHVybiBrOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmdfY29uc3VtZXIvamJpLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmdfY29uc3VtZXIvamJpLnhtbAppbmRleCAzZTE3YjhjLi5kYjM1NTFhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nX2NvbnN1bWVyL2piaS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW5kcG9pbnRfbWFwcGluZ19jb25zdW1lci9qYmkueG1sCkBAIC0xOCwyMSArMTgsMjEgQEAKIC0tPgogCiA8amJpIHZlcnNpb249IjEuMCIKLQkgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCi0JIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiIAotCSB4bWxuczpqYXZhZXNiPSJodHRwOi8vamF2YS5zdW4uY29tIgotCSB4bWxuczpuczA9Imh0dHA6Ly9leGFtcGxlLndlYi5zZXJ2aWNlL0VuZHBvaW50TWFwcGluZ0NvbnN1bWVyIgotCSB4bWxuczpqYXZhZWVfZXh0PSJodHRwOi8vamF2YWVlLnNlcnZpY2VlbmdpbmUuc3VuLmNvbS9lbmRwb2ludC9uYW1pbmcvZXh0ZW5zaW9uIgotCSB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSBqYmkueHNkIj4KLQk8c2VydmljZXMgYmluZGluZy1jb21wb25lbnQ9ImZhbHNlIj4KLQkgPGNvbnN1bWVzIGludGVyZmFjZS1uYW1lPSJuczA6RW5kcG9pbnRNYXBwaW5nQ29uc3VtZXJTZXJ2aWNlSW50ZXJmYWNlIgorICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIgorICAgICB4bWxuczpqYXZhZXNiPSJodHRwOi8vamF2YS5zdW4uY29tIgorICAgICB4bWxuczpuczA9Imh0dHA6Ly9leGFtcGxlLndlYi5zZXJ2aWNlL0VuZHBvaW50TWFwcGluZ0NvbnN1bWVyIgorICAgICB4bWxuczpqYXZhZWVfZXh0PSJodHRwOi8vamF2YWVlLnNlcnZpY2VlbmdpbmUuc3VuLmNvbS9lbmRwb2ludC9uYW1pbmcvZXh0ZW5zaW9uIgorICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSBqYmkueHNkIj4KKyAgICA8c2VydmljZXMgYmluZGluZy1jb21wb25lbnQ9ImZhbHNlIj4KKyAgICAgPGNvbnN1bWVzIGludGVyZmFjZS1uYW1lPSJuczA6RW5kcG9pbnRNYXBwaW5nQ29uc3VtZXJTZXJ2aWNlSW50ZXJmYWNlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLW5hbWU9Im5zMDpFbmRwb2ludE1hcHBpbmdDb25zdW1lclNlcnZpY2UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50LW5hbWU9ImphdmFlZV9FbmRwb2ludE1hcHBpbmdDb25zdW1lclBvcnQiLz4KLQkJPGphdmFlZV9leHQ6ZXB0LW1hcHBpbmdzPgotCQkJPGphdmFlZV9leHQ6ZXB0LW1hcHBpbmc+Ci0JCQkJPGphdmFlZV9leHQ6amF2YS1lcHQgZW5kcG9pbnQtbmFtZT0iamF2YWVlX0VuZHBvaW50TWFwcGluZ0NvbnN1bWVyUG9ydCIgaW50ZXJmYWNlLW5hbWU9Im5zMDpFbmRwb2ludE1hcHBpbmdDb25zdW1lclNlcnZpY2VJbnRlcmZhY2UiIHNlcnZpY2UtbmFtZT0ibnMwOkVuZHBvaW50TWFwcGluZ0NvbnN1bWVyU2VydmljZSIgdHlwZT0iY29uc3VtZXIiLz4KLQkJCQk8amF2YWVlX2V4dDp3c2RsLWVwdCBlbmRwb2ludC1uYW1lPSJFbmRwb2ludE1hcHBpbmdDb25zdW1lclBvcnQiIGludGVyZmFjZS1uYW1lPSJuczA6RW5kcG9pbnRNYXBwaW5nQ29uc3VtZXJTZXJ2aWNlSW50ZXJmYWNlIiBzZXJ2aWNlLW5hbWU9Im5zMDpFbmRwb2ludE1hcHBpbmdDb25zdW1lclNlcnZpY2UiIHR5cGU9ImNvbnN1bWVyIi8+Ci0JCQk8L2phdmFlZV9leHQ6ZXB0LW1hcHBpbmc+Ci0JCTwvamF2YWVlX2V4dDplcHQtbWFwcGluZ3M+Ci0JPC9zZXJ2aWNlcz4KKyAgICAgICAgPGphdmFlZV9leHQ6ZXB0LW1hcHBpbmdzPgorICAgICAgICAgICAgPGphdmFlZV9leHQ6ZXB0LW1hcHBpbmc+CisgICAgICAgICAgICAgICAgPGphdmFlZV9leHQ6amF2YS1lcHQgZW5kcG9pbnQtbmFtZT0iamF2YWVlX0VuZHBvaW50TWFwcGluZ0NvbnN1bWVyUG9ydCIgaW50ZXJmYWNlLW5hbWU9Im5zMDpFbmRwb2ludE1hcHBpbmdDb25zdW1lclNlcnZpY2VJbnRlcmZhY2UiIHNlcnZpY2UtbmFtZT0ibnMwOkVuZHBvaW50TWFwcGluZ0NvbnN1bWVyU2VydmljZSIgdHlwZT0iY29uc3VtZXIiLz4KKyAgICAgICAgICAgICAgICA8amF2YWVlX2V4dDp3c2RsLWVwdCBlbmRwb2ludC1uYW1lPSJFbmRwb2ludE1hcHBpbmdDb25zdW1lclBvcnQiIGludGVyZmFjZS1uYW1lPSJuczA6RW5kcG9pbnRNYXBwaW5nQ29uc3VtZXJTZXJ2aWNlSW50ZXJmYWNlIiBzZXJ2aWNlLW5hbWU9Im5zMDpFbmRwb2ludE1hcHBpbmdDb25zdW1lclNlcnZpY2UiIHR5cGU9ImNvbnN1bWVyIi8+CisgICAgICAgICAgICA8L2phdmFlZV9leHQ6ZXB0LW1hcHBpbmc+CisgICAgICAgIDwvamF2YWVlX2V4dDplcHQtbWFwcGluZ3M+CisgICAgPC9zZXJ2aWNlcz4KIDwvamJpPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW5kcG9pbnRfbWFwcGluZ19jb25zdW1lci9zdW4taHR0cC1iaW5kaW5nL2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nX2NvbnN1bWVyL3N1bi1odHRwLWJpbmRpbmcvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbAppbmRleCBjMzIyZGY3Li4xOTM1YWM1IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nX2NvbnN1bWVyL3N1bi1odHRwLWJpbmRpbmcvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nX2NvbnN1bWVyL3N1bi1odHRwLWJpbmRpbmcvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbApAQCAtMTksMTAgKzE5LDEwIEBACiAKIDwhLS0gamJpLnhtbCBmaWxlIGZvciB0aGUgU09BUCBiaW5kaW5nIGRlcGxveW1lbnRzIGJpbmRpbmcuIC0tPgogPGpiaQotICAgIHZlcnNpb249IjEuMCIgCi0gICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIgCi0gICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCi0JIHhtbG5zOm5zMD0iaHR0cDovL2V4YW1wbGUud2ViLnNlcnZpY2UvRW5kcG9pbnRNYXBwaW5nQ29uc3VtZXIiCisgICAgdmVyc2lvbj0iMS4wIgorICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgeG1sbnM6bnMwPSJodHRwOi8vZXhhbXBsZS53ZWIuc2VydmljZS9FbmRwb2ludE1hcHBpbmdDb25zdW1lciIKICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSAuL2piaS54c2QiPgogICA8c2VydmljZS1hc3NlbWJseT4KICAgICA8aWRlbnRpZmljYXRpb24+CkBAIC01MiwxMCArNTIsMTAgQEAKICAgICA8L3NlcnZpY2UtdW5pdD4KIAogICAgPGNvbm5lY3Rpb25zPgotICAgCTxjb25uZWN0aW9uPgotCQk8Y29uc3VtZXIgZW5kcG9pbnQtbmFtZT0iamF2YWVlX0VuZHBvaW50TWFwcGluZ0NvbnN1bWVyUG9ydCIgc2VydmljZS1uYW1lPSJuczA6RW5kcG9pbnRNYXBwaW5nQ29uc3VtZXJTZXJ2aWNlIi8+Ci0JICAgCTxwcm92aWRlciBlbmRwb2ludC1uYW1lPSJFbmRwb2ludE1hcHBpbmdDb25zdW1lclBvcnQiIHNlcnZpY2UtbmFtZT0ibnMwOkVuZHBvaW50TWFwcGluZ0NvbnN1bWVyU2VydmljZSIvPgotCTwvY29ubmVjdGlvbj4KKyAgICAgICA8Y29ubmVjdGlvbj4KKyAgICAgICAgPGNvbnN1bWVyIGVuZHBvaW50LW5hbWU9ImphdmFlZV9FbmRwb2ludE1hcHBpbmdDb25zdW1lclBvcnQiIHNlcnZpY2UtbmFtZT0ibnMwOkVuZHBvaW50TWFwcGluZ0NvbnN1bWVyU2VydmljZSIvPgorICAgICAgICAgICA8cHJvdmlkZXIgZW5kcG9pbnQtbmFtZT0iRW5kcG9pbnRNYXBwaW5nQ29uc3VtZXJQb3J0IiBzZXJ2aWNlLW5hbWU9Im5zMDpFbmRwb2ludE1hcHBpbmdDb25zdW1lclNlcnZpY2UiLz4KKyAgICA8L2Nvbm5lY3Rpb24+CiAgICA8L2Nvbm5lY3Rpb25zPgogCiAgICA8L3NlcnZpY2UtYXNzZW1ibHk+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nX2NvbnN1bWVyL3N1bi1odHRwLWJpbmRpbmcvc3UvTUVUQS1JTkYvamJpLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmdfY29uc3VtZXIvc3VuLWh0dHAtYmluZGluZy9zdS9NRVRBLUlORi9qYmkueG1sCmluZGV4IDBmOTU5YzkuLjE5YmJhZmUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmdfY29uc3VtZXIvc3VuLWh0dHAtYmluZGluZy9zdS9NRVRBLUlORi9qYmkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmdfY29uc3VtZXIvc3VuLWh0dHAtYmluZGluZy9zdS9NRVRBLUlORi9qYmkueG1sCkBAIC0xOCwxNSArMTgsMTUgQEAKIC0tPgogCiA8amJpIHZlcnNpb249IjEuMCIKLQkgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCi0JIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiIAotCSB4bWxuczpqYXZhZXNiPSJodHRwOi8vamF2YS5zdW4uY29tIgotCSB4bWxuczp0bnM9Imh0dHA6Ly9leGFtcGxlLndlYi5zZXJ2aWNlL0VuZHBvaW50TWFwcGluZ0NvbnN1bWVyIgotCSB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSBqYmkueHNkIj4KLQk8c2VydmljZXMgYmluZGluZy1jb21wb25lbnQ9InRydWUiPgkJCi0JIDxwcm92aWRlcyBpbnRlcmZhY2UtbmFtZT0idG5zOkVuZHBvaW50TWFwcGluZ0NvbnN1bWVyU2VydmljZUludGVyZmFjZSIKKyAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIKKyAgICAgeG1sbnM6amF2YWVzYj0iaHR0cDovL2phdmEuc3VuLmNvbSIKKyAgICAgeG1sbnM6dG5zPSJodHRwOi8vZXhhbXBsZS53ZWIuc2VydmljZS9FbmRwb2ludE1hcHBpbmdDb25zdW1lciIKKyAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgamJpLnhzZCI+CisgICAgPHNlcnZpY2VzIGJpbmRpbmctY29tcG9uZW50PSJ0cnVlIj4KKyAgICAgPHByb3ZpZGVzIGludGVyZmFjZS1uYW1lPSJ0bnM6RW5kcG9pbnRNYXBwaW5nQ29uc3VtZXJTZXJ2aWNlSW50ZXJmYWNlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLW5hbWU9InRuczpFbmRwb2ludE1hcHBpbmdDb25zdW1lclNlcnZpY2UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50LW5hbWU9IkVuZHBvaW50TWFwcGluZ0NvbnN1bWVyUG9ydCIvPgogICAgICAgICAgICAgICAgIDxhcnRpZmFjdHMgeG1sbnM9IiIgcm9sZT0icHJvdmlkZXIiIGZpbGUtbmFtZT0iZW5kcG9pbnRzLnhtbCIgdHlwZT0ieG1sIi8+Ci0JPC9zZXJ2aWNlcz4KKyAgICA8L3NlcnZpY2VzPgogPC9qYmk+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nX2NvbnN1bWVyL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nX2NvbnN1bWVyL3dlYi54bWwKaW5kZXggYzM0NDBjMy4uM2IwMzVlYSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW5kcG9pbnRfbWFwcGluZ19jb25zdW1lci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmdfY29uc3VtZXIvd2ViLnhtbApAQCAtMTgsMzAgKzE4LDMwIEBACiAtLT4KIAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCi0JCQlodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KKyAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCisgICAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KIAotCTxkZXNjcmlwdGlvbj5XZWJUaWVyIGZvciB0aGUgRW5kcG9pbnRNYXBwaW5nQ29uc3VtZXIgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JPGRpc3BsYXktbmFtZT5FbmRwb2ludE1hcHBpbmdDb25zdW1lcldBUjwvZGlzcGxheS1uYW1lPgorICAgIDxkZXNjcmlwdGlvbj5XZWJUaWVyIGZvciB0aGUgRW5kcG9pbnRNYXBwaW5nQ29uc3VtZXIgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgPGRpc3BsYXktbmFtZT5FbmRwb2ludE1hcHBpbmdDb25zdW1lcldBUjwvZGlzcGxheS1uYW1lPgogCi0JPHNlcnZsZXQ+Ci0JCTxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgRW5kcG9pbnRNYXBwaW5nQ29uc3VtZXIgV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCQk8ZGlzcGxheS1uYW1lPkVuZHBvaW50TWFwcGluZ0NvbnN1bWVyV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgotCQk8c2VydmxldC1uYW1lPkVuZHBvaW50TWFwcGluZ0NvbnN1bWVyPC9zZXJ2bGV0LW5hbWU+Ci0JCTxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkVuZHBvaW50TWFwcGluZ0NvbnN1bWVyPC9zZXJ2bGV0LWNsYXNzPgotCQk8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KLQk8L3NlcnZsZXQ+CisgICAgPHNlcnZsZXQ+CisgICAgICAgIDxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgRW5kcG9pbnRNYXBwaW5nQ29uc3VtZXIgV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgICAgICA8ZGlzcGxheS1uYW1lPkVuZHBvaW50TWFwcGluZ0NvbnN1bWVyV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgorICAgICAgICA8c2VydmxldC1uYW1lPkVuZHBvaW50TWFwcGluZ0NvbnN1bWVyPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkVuZHBvaW50TWFwcGluZ0NvbnN1bWVyPC9zZXJ2bGV0LWNsYXNzPgorICAgICAgICA8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KKyAgICA8L3NlcnZsZXQ+CiAKLQk8c2VydmxldC1tYXBwaW5nPgotCQk8c2VydmxldC1uYW1lPkVuZHBvaW50TWFwcGluZ0NvbnN1bWVyPC9zZXJ2bGV0LW5hbWU+Ci0JCTx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9FbmRwb2ludE1hcHBpbmdDb25zdW1lclNlcnZpY2U8L3VybC1wYXR0ZXJuPgotCTwvc2VydmxldC1tYXBwaW5nPgorICAgIDxzZXJ2bGV0LW1hcHBpbmc+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+RW5kcG9pbnRNYXBwaW5nQ29uc3VtZXI8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL0VuZHBvaW50TWFwcGluZ0NvbnN1bWVyU2VydmljZTwvdXJsLXBhdHRlcm4+CisgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiAKLQk8c2Vzc2lvbi1jb25maWc+Ci0JCTxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KLQk8L3Nlc3Npb24tY29uZmlnPgorICAgIDxzZXNzaW9uLWNvbmZpZz4KKyAgICAgICAgPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgorICAgIDwvc2Vzc2lvbi1jb25maWc+CiAKIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW5kcG9pbnRfbWFwcGluZ19jb25zdW1lci93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW5kcG9pbnRfbWFwcGluZ19jb25zdW1lci93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDE3NzhkMmIuLjFiOTViMzkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VuZHBvaW50X21hcHBpbmdfY29uc3VtZXIvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbmRwb2ludF9tYXBwaW5nX2NvbnN1bWVyL3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI4LDggKzI4LDggQEAKIAogICAgICAgIEBXZWJTZXJ2aWNlUmVmIEVuZHBvaW50TWFwcGluZ0NvbnN1bWVyU2VydmljZSBzZXJ2aWNlOwogCi0gICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKSAKLQkJdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKKyAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCisgICAgICAgIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgICAgIGRvUG9zdChyZXEsIHJlc3ApOwogICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW50ZXJwcmlzZV9hcHAvRW50QXBwL0VudEFwcC1lamIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW50ZXJwcmlzZV9hcHAvRW50QXBwL0VudEFwcC1lamIvYnVpbGQueG1sCmluZGV4IGZlNDQwYzAuLjNlYmU1MmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VudGVycHJpc2VfYXBwL0VudEFwcC9FbnRBcHAtZWpiL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbnRlcnByaXNlX2FwcC9FbnRBcHAvRW50QXBwLWVqYi9idWlsZC54bWwKQEAgLTI1LDIzICsyNSwyMyBAQAogICAgIDxpbXBvcnQgZmlsZT0ibmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIi8+CiAgICAgPCEtLQogCi0gICAgVGhlcmUgZXhpc3Qgc2V2ZXJhbCB0YXJnZXRzIHdoaWNoIGFyZSBieSBkZWZhdWx0IGVtcHR5IGFuZCB3aGljaCBjYW4gYmUgCi0gICAgdXNlZCBmb3IgZXhlY3V0aW9uIG9mIHlvdXIgdGFza3MuIFRoZXNlIHRhcmdldHMgYXJlIHVzdWFsbHkgZXhlY3V0ZWQgCi0gICAgYmVmb3JlIGFuZCBhZnRlciBzb21lIG1haW4gdGFyZ2V0cy4gVGhleSBhcmU6IAorICAgIFRoZXJlIGV4aXN0IHNldmVyYWwgdGFyZ2V0cyB3aGljaCBhcmUgYnkgZGVmYXVsdCBlbXB0eSBhbmQgd2hpY2ggY2FuIGJlCisgICAgdXNlZCBmb3IgZXhlY3V0aW9uIG9mIHlvdXIgdGFza3MuIFRoZXNlIHRhcmdldHMgYXJlIHVzdWFsbHkgZXhlY3V0ZWQKKyAgICBiZWZvcmUgYW5kIGFmdGVyIHNvbWUgbWFpbiB0YXJnZXRzLiBUaGV5IGFyZToKIAotICAgICAgcHJlLWluaXQ6ICAgICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGluaXRpYWxpemF0aW9uIG9mIHByb2plY3QgcHJvcGVydGllcyAKLSAgICAgIHBvc3QtaW5pdDogICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGluaXRpYWxpemF0aW9uIG9mIHByb2plY3QgcHJvcGVydGllcyAKLSAgICAgIHByZS1jb21waWxlOiAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBqYXZhYyBjb21waWxhdGlvbiAKLSAgICAgIHBvc3QtY29tcGlsZTogICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGphdmFjIGNvbXBpbGF0aW9uIAorICAgICAgcHJlLWluaXQ6ICAgICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGluaXRpYWxpemF0aW9uIG9mIHByb2plY3QgcHJvcGVydGllcworICAgICAgcG9zdC1pbml0OiAgICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgaW5pdGlhbGl6YXRpb24gb2YgcHJvamVjdCBwcm9wZXJ0aWVzCisgICAgICBwcmUtY29tcGlsZTogICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgamF2YWMgY29tcGlsYXRpb24KKyAgICAgIHBvc3QtY29tcGlsZTogICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGphdmFjIGNvbXBpbGF0aW9uCiAgICAgICBwcmUtY29tcGlsZS1zaW5nbGU6ICAgICAgIGNhbGxlZCBiZWZvcmUgamF2YWMgY29tcGlsYXRpb24gb2Ygc2luZ2xlIGZpbGUKICAgICAgIHBvc3QtY29tcGlsZS1zaW5nbGU6ICAgICAgY2FsbGVkIGFmdGVyIGphdmFjIGNvbXBpbGF0aW9uIG9mIHNpbmdsZSBmaWxlCi0gICAgICBwcmUtZGlzdDogICAgICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgamFyIGJ1aWxkaW5nIAotICAgICAgcG9zdC1kaXN0OiAgICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgamFyIGJ1aWxkaW5nIAotICAgICAgcG9zdC1jbGVhbjogICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgY2xlYW5pbmcgYnVpbGQgcHJvZHVjdHMgCisgICAgICBwcmUtZGlzdDogICAgICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgamFyIGJ1aWxkaW5nCisgICAgICBwb3N0LWRpc3Q6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBqYXIgYnVpbGRpbmcKKyAgICAgIHBvc3QtY2xlYW46ICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGNsZWFuaW5nIGJ1aWxkIHByb2R1Y3RzCiAgICAgICBwcmUtcnVuLWRlcGxveTogICAgICAgICAgIGNhbGxlZCBiZWZvcmUgZGVwbG95aW5nCiAgICAgICBwb3N0LXJ1bi1kZXBsb3k6ICAgICAgICAgIGNhbGxlZCBhZnRlciBkZXBsb3lpbmcKIAotICAgIEV4YW1wbGUgb2YgcGx1Z2luZyBhbiBvYmZ1c2NhdG9yIGFmdGVyIHRoZSBjb21waWxhdGlvbiBjb3VsZCBsb29rIGxpa2UgCisgICAgRXhhbXBsZSBvZiBwbHVnaW5nIGFuIG9iZnVzY2F0b3IgYWZ0ZXIgdGhlIGNvbXBpbGF0aW9uIGNvdWxkIGxvb2sgbGlrZQogCiAgICAgICAgIDx0YXJnZXQgbmFtZT0icG9zdC1jb21waWxlIj4KICAgICAgICAgICAgIDxvYmZ1c2NhdGU+CkBAIC00OSwyMCArNDksMjAgQEAKICAgICAgICAgICAgIDwvb2JmdXNjYXRlPgogICAgICAgICA8L3RhcmdldD4KIAotICAgIEZvciBsaXN0IG9mIGF2YWlsYWJsZSBwcm9wZXJ0aWVzIGNoZWNrIHRoZSBpbXBvcnRlZCAKLSAgICBuYnByb2plY3QvYnVpbGQtaW1wbC54bWwgZmlsZS4gCisgICAgRm9yIGxpc3Qgb2YgYXZhaWxhYmxlIHByb3BlcnRpZXMgY2hlY2sgdGhlIGltcG9ydGVkCisgICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuCiAKIAogICAgIE90aGVyIHdheSBob3cgdG8gY3VzdG9taXplIHRoZSBidWlsZCBpcyBieSBvdmVycmlkaW5nIGV4aXN0aW5nIG1haW4gdGFyZ2V0cy4KLSAgICBUaGUgdGFyZ2V0IG9mIGludGVyZXN0IGFyZTogCisgICAgVGhlIHRhcmdldCBvZiBpbnRlcmVzdCBhcmU6CiAKICAgICAgIGluaXQtbWFjcm9kZWYtamF2YWM6ICAgIGRlZmluZXMgbWFjcm8gZm9yIGphdmFjIGNvbXBpbGF0aW9uCiAgICAgICBpbml0LW1hY3JvZGVmLWRlYnVnOiAgICBkZWZpbmVzIG1hY3JvIGZvciBjbGFzcyBkZWJ1Z2dpbmcKICAgICAgIGRvLWRpc3Q6ICAgICAgICAgICAgICAgIGphciBhcmNoaXZlIGJ1aWxkaW5nCi0gICAgICBydW46ICAgICAgICAgICAgICAgICAgICBleGVjdXRpb24gb2YgcHJvamVjdCAKLSAgICAgIGphdmFkb2MtYnVpbGQ6ICAgICAgICAgIGphdmFkb2MgZ2VuZXJhdGlvbiAKKyAgICAgIHJ1bjogICAgICAgICAgICAgICAgICAgIGV4ZWN1dGlvbiBvZiBwcm9qZWN0CisgICAgICBqYXZhZG9jLWJ1aWxkOiAgICAgICAgICBqYXZhZG9jIGdlbmVyYXRpb24KIAotICAgIEV4YW1wbGUgb2Ygb3ZlcnJpZGluZyB0aGUgdGFyZ2V0IGZvciBwcm9qZWN0IGV4ZWN1dGlvbiBjb3VsZCBsb29rIGxpa2UgCisgICAgRXhhbXBsZSBvZiBvdmVycmlkaW5nIHRoZSB0YXJnZXQgZm9yIHByb2plY3QgZXhlY3V0aW9uIGNvdWxkIGxvb2sgbGlrZQogCiAgICAgICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSI8UFJPSk5BTUU+LWltcGwuamFyIj4KICAgICAgICAgICAgIDxleGVjIGRpcj0iYmluIiBleGVjdXRhYmxlPSJsYXVuY2hlci5leGUiPgpAQCAtNzAsMTAgKzcwLDEwIEBACiAgICAgICAgICAgICA8L2V4ZWM+CiAgICAgICAgIDwvdGFyZ2V0PgogCi0gICAgTm90aWNlIHRoYXQgb3ZlcnJpZGRlbiB0YXJnZXQgZGVwZW5kcyBvbiBqYXIgdGFyZ2V0IGFuZCBub3Qgb25seSBvbiAKLSAgICBjb21waWxlIHRhcmdldCBhcyByZWd1bGFyIHJ1biB0YXJnZXQgZG9lcy4gQWdhaW4sIGZvciBsaXN0IG9mIGF2YWlsYWJsZSAKLSAgICBwcm9wZXJ0aWVzIHdoaWNoIHlvdSBjYW4gdXNlIGNoZWNrIHRoZSB0YXJnZXQgeW91IGFyZSBvdmVycmlkaW5nIGluIAotICAgIG5icHJvamVjdC9idWlsZC1pbXBsLnhtbCBmaWxlLiAKKyAgICBOb3RpY2UgdGhhdCBvdmVycmlkZGVuIHRhcmdldCBkZXBlbmRzIG9uIGphciB0YXJnZXQgYW5kIG5vdCBvbmx5IG9uCisgICAgY29tcGlsZSB0YXJnZXQgYXMgcmVndWxhciBydW4gdGFyZ2V0IGRvZXMuIEFnYWluLCBmb3IgbGlzdCBvZiBhdmFpbGFibGUKKyAgICBwcm9wZXJ0aWVzIHdoaWNoIHlvdSBjYW4gdXNlIGNoZWNrIHRoZSB0YXJnZXQgeW91IGFyZSBvdmVycmlkaW5nIGluCisgICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuCiAKICAgICAtLT4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VudGVycHJpc2VfYXBwL0VudEFwcC9FbnRBcHAtZWpiL25icHJvamVjdC9hbnQtZGVwbG95LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VudGVycHJpc2VfYXBwL0VudEFwcC9FbnRBcHAtZWpiL25icHJvamVjdC9hbnQtZGVwbG95LnhtbAppbmRleCAxNDRkNjMwLi5jYjA4Mzg1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbnRlcnByaXNlX2FwcC9FbnRBcHAvRW50QXBwLWVqYi9uYnByb2plY3QvYW50LWRlcGxveS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW50ZXJwcmlzZV9hcHAvRW50QXBwL0VudEFwcC1lamIvbmJwcm9qZWN0L2FudC1kZXBsb3kueG1sCkBAIC0yNSw3ICsyNSw3IEBACiAgICAgICAgIDx0ZW1wZmlsZSBwcmVmaXg9InNqc2FzIiBwcm9wZXJ0eT0ic2pzYXMucGFzc3dvcmQuZmlsZSIgZGVzdGRpcj0iJHtqYXZhLmlvLnRtcGRpcn0iLz4gIDwhLS0gZG8gbm90IGZvcmdldCB0byBkZWxldGUgdGhpcyEgLS0+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkFTX0FETUlOX1BBU1NXT1JEPSR7c2pzYXMucGFzc3dvcmR9IiBmaWxlPSIke3Nqc2FzLnBhc3N3b3JkLmZpbGV9Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9Ii1wYXJzZS1zdW4td2ViIiBkZXBlbmRzPSItaW5pdC1jbC1kZXBsb3ltZW50LWVudiIgaWY9InN1bi53ZWIucHJlc2VudCI+CiAgICAgICAgIDx0ZW1wZmlsZSBwcmVmaXg9InNqc2FzIiBwcm9wZXJ0eT0idGVtcC5zdW4ud2ViIiBkZXN0ZGlyPSIke2phdmEuaW8udG1wZGlyfSIvPgogICAgICAgICA8Y29weSBmaWxlPSIke2RlcGxveS5hbnQuZG9jYmFzZS5kaXJ9L1dFQi1JTkYvc3VuLXdlYi54bWwiIHRvZmlsZT0iJHt0ZW1wLnN1bi53ZWJ9Ii8+CkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgICAgICA8cmVwbGFjZXZhbHVlPjwhW0NEQVRBWy0tPiA8c3VuLXdlYi1hcHBdXT48L3JlcGxhY2V2YWx1ZT4KICAgICAgICAgPC9yZXBsYWNlPgogICAgICAgICA8eG1scHJvcGVydHkgZmlsZT0iJHt0ZW1wLnN1bi53ZWJ9IiB2YWxpZGF0ZT0iZmFsc2UiPgotICAgICAgICA8L3htbHByb3BlcnR5PiAgICAKKyAgICAgICAgPC94bWxwcm9wZXJ0eT4KICAgICAgICAgPGRlbGV0ZSBmaWxlPSIke3RlbXAuc3VuLndlYn0iLz4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImRlcGxveS5hbnQuY2xpZW50LnVybCIgdmFsdWU9IiR7c2pzYXMudXJsfSR7c3VuLXdlYi1hcHAuY29udGV4dC1yb290fSIvPgogICAgIDwvdGFyZ2V0PgpAQCAtNDksMTEgKzQ5LDExIEBACiAgICAgICAgIDxta2RpciBkaXI9IiR7c2pzYXMucmVzb3VyY2VzLmRpcn0vTUVUQS1JTkYiLz4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9InNqc2FzLnJlc291cmNlcy5maWxlIiB2YWx1ZT0iJHtzanNhcy5yZXNvdXJjZXMuZGlyfS9NRVRBLUlORi9zdW4tcmVzb3VyY2VzLnhtbCIvPgogICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGVmdHkiIHZhbHVlPSImbHQ7Ii8+Ci0gICAgICAgICAKKwogICAgICAgICA8cHJvcGVydHkgbmFtZT0icmlnaHR5IiB2YWx1ZT0iJmd0OyIvPgogICAgICAgICA8Y29uY2F0IGRlc3RmaWxlPSIke3Nqc2FzLnJlc291cmNlcy5maWxlfSI+JHtsZWZ0eX0/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8ke3JpZ2h0eX0KLSR7bGVmdHl9IURPQ1RZUEUgcmVzb3VyY2VzIFBVQkxJQyAKLSAgICItLy9TdW4gTWljcm9zeXN0ZW1zIEluYy4vL0RURCBBcHBsaWNhdGlvbiBTZXJ2ZXIgOS4wIFJlc291cmNlIERlZmluaXRpb25zIC8vRU4iIAorJHtsZWZ0eX0hRE9DVFlQRSByZXNvdXJjZXMgUFVCTElDCisgICAiLS8vU3VuIE1pY3Jvc3lzdGVtcyBJbmMuLy9EVEQgQXBwbGljYXRpb24gU2VydmVyIDkuMCBSZXNvdXJjZSBEZWZpbml0aW9ucyAvL0VOIgogICAgIiR7c2pzYXMucm9vdH0vbGliL2R0ZHMvc3VuLXJlc291cmNlc18xXzIuZHRkIiR7cmlnaHR5fQogJHtsZWZ0eX1yZXNvdXJjZXMke3JpZ2h0eX0KICR7bGVmdHl9L3Jlc291cmNlcyR7cmlnaHR5fQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW50ZXJwcmlzZV9hcHAvRW50QXBwL0VudEFwcC1lamIvbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW50ZXJwcmlzZV9hcHAvRW50QXBwL0VudEFwcC1lamIvbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sCmluZGV4IDYyMTM1YWEuLjQxMjg1MjggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VudGVycHJpc2VfYXBwL0VudEFwcC9FbnRBcHAtZWpiL25icHJvamVjdC9idWlsZC1pbXBsLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbnRlcnByaXNlX2FwcC9FbnRBcHAvRW50QXBwLWVqYi9uYnByb2plY3QvYnVpbGQtaW1wbC54bWwKQEAgLTM2LDggKzM2LDggQEAKIDxwcm9qZWN0IG5hbWU9IkVudEFwcC1lamItaW1wbCIgZGVmYXVsdD0iYnVpbGQiIGJhc2VkaXI9Ii4uIiB4bWxuczplamJqYXJwcm9qZWN0Mz0iaHR0cDovL3d3dy5uZXRiZWFucy5vcmcvbnMvajJlZS1lamJqYXJwcm9qZWN0LzMiIHhtbG5zOmVqYmphcnByb2plY3QyPSJodHRwOi8vd3d3Lm5ldGJlYW5zLm9yZy9ucy9qMmVlLWVqYmphcnByb2plY3QvMiIgeG1sbnM6ZWpiamFycHJvamVjdDE9Imh0dHA6Ly93d3cubmV0YmVhbnMub3JnL25zL2oyZWUtZWpiamFycHJvamVjdC8xIiB4bWxuczpqYXh3cz0iaHR0cDovL3d3dy5uZXRiZWFucy5vcmcvbnMvamF4LXdzLzEiPgogICAgIDxpbXBvcnQgZmlsZT0iYW50LWRlcGxveS54bWwiLz4KICAgICA8dGFyZ2V0IG5hbWU9ImRlZmF1bHQiIGRlcGVuZHM9ImRpc3QsamF2YWRvYyIgZGVzY3JpcHRpb249IkJ1aWxkIHdob2xlIHByb2plY3QuIi8+Ci0gICAgPCEtLSAKLSAgICAgICAgICAgICAgICBJTklUSUFMSVpBVElPTiBTRUNUSU9OIAorICAgIDwhLS0KKyAgICAgICAgICAgICAgICBJTklUSUFMSVpBVElPTiBTRUNUSU9OCiAgICAgICAgICAgICAtLT4KICAgICA8dGFyZ2V0IG5hbWU9Ii1wcmUtaW5pdCI+CiAgICAgICAgIDwhLS0gRW1wdHkgcGxhY2Vob2xkZXIgZm9yIGVhc2llciBjdXN0b21pemF0aW9uLiAtLT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VudGVycHJpc2VfYXBwL0VudEFwcC9FbnRBcHAtZWpiL3NyYy9qYXZhL2VudGFwcC9lamIvSGVsbG9FSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VudGVycHJpc2VfYXBwL0VudEFwcC9FbnRBcHAtZWpiL3NyYy9qYXZhL2VudGFwcC9lamIvSGVsbG9FSkIuamF2YQppbmRleCAyNzg4ZTdjLi42MzIxY2RmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbnRlcnByaXNlX2FwcC9FbnRBcHAvRW50QXBwLWVqYi9zcmMvamF2YS9lbnRhcHAvZWpiL0hlbGxvRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW50ZXJwcmlzZV9hcHAvRW50QXBwL0VudEFwcC1lamIvc3JjL2phdmEvZW50YXBwL2VqYi9IZWxsb0VKQi5qYXZhCkBAIC00OSw1ICs0OSw1IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihoZWxsbyk7CiAgICAgICAgIHJldHVybiBoZWxsbzsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VudGVycHJpc2VfYXBwL0VudEFwcC9FbnRBcHAtd2FyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VudGVycHJpc2VfYXBwL0VudEFwcC9FbnRBcHAtd2FyL2J1aWxkLnhtbAppbmRleCBhMTUxYWMxLi4wMjdlYTJiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbnRlcnByaXNlX2FwcC9FbnRBcHAvRW50QXBwLXdhci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW50ZXJwcmlzZV9hcHAvRW50QXBwL0VudEFwcC13YXIvYnVpbGQueG1sCkBAIC0yNSwyNyArMjUsMjcgQEAKICAgICA8aW1wb3J0IGZpbGU9Im5icHJvamVjdC9idWlsZC1pbXBsLnhtbCIvPgogICAgIDwhLS0KIAotICAgIFRoZXJlIGV4aXN0IHNldmVyYWwgdGFyZ2V0cyB3aGljaCBhcmUgYnkgZGVmYXVsdCBlbXB0eSBhbmQgd2hpY2ggY2FuIGJlIAotICAgIHVzZWQgZm9yIGV4ZWN1dGlvbiBvZiB5b3VyIHRhc2tzLiBUaGVzZSB0YXJnZXRzIGFyZSB1c3VhbGx5IGV4ZWN1dGVkIAotICAgIGJlZm9yZSBhbmQgYWZ0ZXIgc29tZSBtYWluIHRhcmdldHMuIFRoZXkgYXJlOiAKKyAgICBUaGVyZSBleGlzdCBzZXZlcmFsIHRhcmdldHMgd2hpY2ggYXJlIGJ5IGRlZmF1bHQgZW1wdHkgYW5kIHdoaWNoIGNhbiBiZQorICAgIHVzZWQgZm9yIGV4ZWN1dGlvbiBvZiB5b3VyIHRhc2tzLiBUaGVzZSB0YXJnZXRzIGFyZSB1c3VhbGx5IGV4ZWN1dGVkCisgICAgYmVmb3JlIGFuZCBhZnRlciBzb21lIG1haW4gdGFyZ2V0cy4gVGhleSBhcmU6CiAKLSAgICAgIC1wcmUtaW5pdDogICAgICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgaW5pdGlhbGl6YXRpb24gb2YgcHJvamVjdCBwcm9wZXJ0aWVzIAotICAgICAgLXBvc3QtaW5pdDogICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGluaXRpYWxpemF0aW9uIG9mIHByb2plY3QgcHJvcGVydGllcyAKLSAgICAgIC1wcmUtY29tcGlsZTogICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgamF2YWMgY29tcGlsYXRpb24gCi0gICAgICAtcG9zdC1jb21waWxlOiAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgamF2YWMgY29tcGlsYXRpb24gCisgICAgICAtcHJlLWluaXQ6ICAgICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGluaXRpYWxpemF0aW9uIG9mIHByb2plY3QgcHJvcGVydGllcworICAgICAgLXBvc3QtaW5pdDogICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGluaXRpYWxpemF0aW9uIG9mIHByb2plY3QgcHJvcGVydGllcworICAgICAgLXByZS1jb21waWxlOiAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBqYXZhYyBjb21waWxhdGlvbgorICAgICAgLXBvc3QtY29tcGlsZTogICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGphdmFjIGNvbXBpbGF0aW9uCiAgICAgICAtcHJlLWNvbXBpbGUtc2luZ2xlOiAgICAgICBjYWxsZWQgYmVmb3JlIGphdmFjIGNvbXBpbGF0aW9uIG9mIHNpbmdsZSBmaWxlCiAgICAgICAtcG9zdC1jb21waWxlLXNpbmdsZTogICAgICBjYWxsZWQgYWZ0ZXIgamF2YWMgY29tcGlsYXRpb24gb2Ygc2luZ2xlIGZpbGUKICAgICAgIC1wcmUtY29tcGlsZS10ZXN0OiAgICAgICAgIGNhbGxlZCBiZWZvcmUgamF2YWMgY29tcGlsYXRpb24gb2YgSlVuaXQgdGVzdHMKICAgICAgIC1wb3N0LWNvbXBpbGUtdGVzdDogICAgICAgIGNhbGxlZCBhZnRlciBqYXZhYyBjb21waWxhdGlvbiBvZiBKVW5pdCB0ZXN0cwogICAgICAgLXByZS1jb21waWxlLXRlc3Qtc2luZ2xlOiAgY2FsbGVkIGJlZm9yZSBqYXZhYyBjb21waWxhdGlvbiBvZiBzaW5nbGUgSlVuaXQgdGVzdAogICAgICAgLXBvc3QtY29tcGlsZS10ZXN0LXNpbmdsZTogY2FsbGVkIGFmdGVyIGphdmFjIGNvbXBpbGF0aW9uIG9mIHNpbmdsZSBKVXVuaXQgdGVzdAotICAgICAgLXByZS1kaXN0OiAgICAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBqYXIgYnVpbGRpbmcgCi0gICAgICAtcG9zdC1kaXN0OiAgICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgamFyIGJ1aWxkaW5nIAotICAgICAgLXBvc3QtY2xlYW46ICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGNsZWFuaW5nIGJ1aWxkIHByb2R1Y3RzIAorICAgICAgLXByZS1kaXN0OiAgICAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBqYXIgYnVpbGRpbmcKKyAgICAgIC1wb3N0LWRpc3Q6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBqYXIgYnVpbGRpbmcKKyAgICAgIC1wb3N0LWNsZWFuOiAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBjbGVhbmluZyBidWlsZCBwcm9kdWN0cwogICAgICAgLXByZS1ydW4tZGVwbG95OiAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBkZXBsb3lpbmcKICAgICAgIC1wb3N0LXJ1bi1kZXBsb3k6ICAgICAgICAgIGNhbGxlZCBhZnRlciBkZXBsb3lpbmcKIAotICAgIEV4YW1wbGUgb2YgcGx1Z2luZyBhbiBvYmZ1c2NhdG9yIGFmdGVyIHRoZSBjb21waWxhdGlvbiBjb3VsZCBsb29rIGxpa2UgCisgICAgRXhhbXBsZSBvZiBwbHVnaW5nIGFuIG9iZnVzY2F0b3IgYWZ0ZXIgdGhlIGNvbXBpbGF0aW9uIGNvdWxkIGxvb2sgbGlrZQogCiAgICAgICAgIDx0YXJnZXQgbmFtZT0icG9zdC1jb21waWxlIj4KICAgICAgICAgICAgIDxvYmZ1c2NhdGU+CkBAIC01MywyMSArNTMsMjEgQEAKICAgICAgICAgICAgIDwvb2JmdXNjYXRlPgogICAgICAgICA8L3RhcmdldD4KIAotICAgIEZvciBsaXN0IG9mIGF2YWlsYWJsZSBwcm9wZXJ0aWVzIGNoZWNrIHRoZSBpbXBvcnRlZCAKLSAgICBuYnByb2plY3QvYnVpbGQtaW1wbC54bWwgZmlsZS4gCisgICAgRm9yIGxpc3Qgb2YgYXZhaWxhYmxlIHByb3BlcnRpZXMgY2hlY2sgdGhlIGltcG9ydGVkCisgICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuCiAKIAogICAgIE90aGVyIHdheSBob3cgdG8gY3VzdG9taXplIHRoZSBidWlsZCBpcyBieSBvdmVycmlkaW5nIGV4aXN0aW5nIG1haW4gdGFyZ2V0cy4KLSAgICBUaGUgdGFyZ2V0IG9mIGludGVyZXN0IGFyZTogCisgICAgVGhlIHRhcmdldCBvZiBpbnRlcmVzdCBhcmU6CiAKICAgICAgIGluaXQtbWFjcm9kZWYtamF2YWM6ICAgIGRlZmluZXMgbWFjcm8gZm9yIGphdmFjIGNvbXBpbGF0aW9uCiAgICAgICBpbml0LW1hY3JvZGVmLWp1bml0OiAgIGRlZmluZXMgbWFjcm8gZm9yIGp1bml0IGV4ZWN1dGlvbgogICAgICAgaW5pdC1tYWNyb2RlZi1kZWJ1ZzogICAgZGVmaW5lcyBtYWNybyBmb3IgY2xhc3MgZGVidWdnaW5nCiAgICAgICBkby1kaXN0OiAgICAgICAgICAgICAgICBqYXIgYXJjaGl2ZSBidWlsZGluZwotICAgICAgcnVuOiAgICAgICAgICAgICAgICAgICAgZXhlY3V0aW9uIG9mIHByb2plY3QgCi0gICAgICBqYXZhZG9jLWJ1aWxkOiAgICAgICAgICBqYXZhZG9jIGdlbmVyYXRpb24gCisgICAgICBydW46ICAgICAgICAgICAgICAgICAgICBleGVjdXRpb24gb2YgcHJvamVjdAorICAgICAgamF2YWRvYy1idWlsZDogICAgICAgICAgamF2YWRvYyBnZW5lcmF0aW9uCiAKLSAgICBFeGFtcGxlIG9mIG92ZXJyaWRpbmcgdGhlIHRhcmdldCBmb3IgcHJvamVjdCBleGVjdXRpb24gY291bGQgbG9vayBsaWtlIAorICAgIEV4YW1wbGUgb2Ygb3ZlcnJpZGluZyB0aGUgdGFyZ2V0IGZvciBwcm9qZWN0IGV4ZWN1dGlvbiBjb3VsZCBsb29rIGxpa2UKIAogICAgICAgICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iPFBST0pOQU1FPi1pbXBsLmphciI+CiAgICAgICAgICAgICA8ZXhlYyBkaXI9ImJpbiIgZXhlY3V0YWJsZT0ibGF1bmNoZXIuZXhlIj4KQEAgLTc1LDEwICs3NSwxMCBAQAogICAgICAgICAgICAgPC9leGVjPgogICAgICAgICA8L3RhcmdldD4KIAotICAgIE5vdGljZSB0aGF0IG92ZXJyaWRkZW4gdGFyZ2V0IGRlcGVuZHMgb24gamFyIHRhcmdldCBhbmQgbm90IG9ubHkgb24gCi0gICAgY29tcGlsZSB0YXJnZXQgYXMgcmVndWxhciBydW4gdGFyZ2V0IGRvZXMuIEFnYWluLCBmb3IgbGlzdCBvZiBhdmFpbGFibGUgCi0gICAgcHJvcGVydGllcyB3aGljaCB5b3UgY2FuIHVzZSBjaGVjayB0aGUgdGFyZ2V0IHlvdSBhcmUgb3ZlcnJpZGluZyBpbiAKLSAgICBuYnByb2plY3QvYnVpbGQtaW1wbC54bWwgZmlsZS4gCisgICAgTm90aWNlIHRoYXQgb3ZlcnJpZGRlbiB0YXJnZXQgZGVwZW5kcyBvbiBqYXIgdGFyZ2V0IGFuZCBub3Qgb25seSBvbgorICAgIGNvbXBpbGUgdGFyZ2V0IGFzIHJlZ3VsYXIgcnVuIHRhcmdldCBkb2VzLiBBZ2FpbiwgZm9yIGxpc3Qgb2YgYXZhaWxhYmxlCisgICAgcHJvcGVydGllcyB3aGljaCB5b3UgY2FuIHVzZSBjaGVjayB0aGUgdGFyZ2V0IHlvdSBhcmUgb3ZlcnJpZGluZyBpbgorICAgIG5icHJvamVjdC9idWlsZC1pbXBsLnhtbCBmaWxlLgogCiAgICAgLS0+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbnRlcnByaXNlX2FwcC9FbnRBcHAvRW50QXBwLXdhci9uYnByb2plY3QvYW50LWRlcGxveS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbnRlcnByaXNlX2FwcC9FbnRBcHAvRW50QXBwLXdhci9uYnByb2plY3QvYW50LWRlcGxveS54bWwKaW5kZXggMTQ0ZDYzMC4uY2IwODM4NSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW50ZXJwcmlzZV9hcHAvRW50QXBwL0VudEFwcC13YXIvbmJwcm9qZWN0L2FudC1kZXBsb3kueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VudGVycHJpc2VfYXBwL0VudEFwcC9FbnRBcHAtd2FyL25icHJvamVjdC9hbnQtZGVwbG95LnhtbApAQCAtMjUsNyArMjUsNyBAQAogICAgICAgICA8dGVtcGZpbGUgcHJlZml4PSJzanNhcyIgcHJvcGVydHk9InNqc2FzLnBhc3N3b3JkLmZpbGUiIGRlc3RkaXI9IiR7amF2YS5pby50bXBkaXJ9Ii8+ICA8IS0tIGRvIG5vdCBmb3JnZXQgdG8gZGVsZXRlIHRoaXMhIC0tPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJBU19BRE1JTl9QQVNTV09SRD0ke3Nqc2FzLnBhc3N3b3JkfSIgZmlsZT0iJHtzanNhcy5wYXNzd29yZC5maWxlfSIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSItcGFyc2Utc3VuLXdlYiIgZGVwZW5kcz0iLWluaXQtY2wtZGVwbG95bWVudC1lbnYiIGlmPSJzdW4ud2ViLnByZXNlbnQiPgogICAgICAgICA8dGVtcGZpbGUgcHJlZml4PSJzanNhcyIgcHJvcGVydHk9InRlbXAuc3VuLndlYiIgZGVzdGRpcj0iJHtqYXZhLmlvLnRtcGRpcn0iLz4KICAgICAgICAgPGNvcHkgZmlsZT0iJHtkZXBsb3kuYW50LmRvY2Jhc2UuZGlyfS9XRUItSU5GL3N1bi13ZWIueG1sIiB0b2ZpbGU9IiR7dGVtcC5zdW4ud2VifSIvPgpAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgICAgPHJlcGxhY2V2YWx1ZT48IVtDREFUQVstLT4gPHN1bi13ZWItYXBwXV0+PC9yZXBsYWNldmFsdWU+CiAgICAgICAgIDwvcmVwbGFjZT4KICAgICAgICAgPHhtbHByb3BlcnR5IGZpbGU9IiR7dGVtcC5zdW4ud2VifSIgdmFsaWRhdGU9ImZhbHNlIj4KLSAgICAgICAgPC94bWxwcm9wZXJ0eT4gICAgCisgICAgICAgIDwveG1scHJvcGVydHk+CiAgICAgICAgIDxkZWxldGUgZmlsZT0iJHt0ZW1wLnN1bi53ZWJ9Ii8+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkZXBsb3kuYW50LmNsaWVudC51cmwiIHZhbHVlPSIke3Nqc2FzLnVybH0ke3N1bi13ZWItYXBwLmNvbnRleHQtcm9vdH0iLz4KICAgICA8L3RhcmdldD4KQEAgLTQ5LDExICs0OSwxMSBAQAogICAgICAgICA8bWtkaXIgZGlyPSIke3Nqc2FzLnJlc291cmNlcy5kaXJ9L01FVEEtSU5GIi8+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzanNhcy5yZXNvdXJjZXMuZmlsZSIgdmFsdWU9IiR7c2pzYXMucmVzb3VyY2VzLmRpcn0vTUVUQS1JTkYvc3VuLXJlc291cmNlcy54bWwiLz4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxlZnR5IiB2YWx1ZT0iJmx0OyIvPgotICAgICAgICAgCisKICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJpZ2h0eSIgdmFsdWU9IiZndDsiLz4KICAgICAgICAgPGNvbmNhdCBkZXN0ZmlsZT0iJHtzanNhcy5yZXNvdXJjZXMuZmlsZX0iPiR7bGVmdHl9P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/JHtyaWdodHl9Ci0ke2xlZnR5fSFET0NUWVBFIHJlc291cmNlcyBQVUJMSUMgCi0gICAiLS8vU3VuIE1pY3Jvc3lzdGVtcyBJbmMuLy9EVEQgQXBwbGljYXRpb24gU2VydmVyIDkuMCBSZXNvdXJjZSBEZWZpbml0aW9ucyAvL0VOIiAKKyR7bGVmdHl9IURPQ1RZUEUgcmVzb3VyY2VzIFBVQkxJQworICAgIi0vL1N1biBNaWNyb3N5c3RlbXMgSW5jLi8vRFREIEFwcGxpY2F0aW9uIFNlcnZlciA5LjAgUmVzb3VyY2UgRGVmaW5pdGlvbnMgLy9FTiIKICAgICIke3Nqc2FzLnJvb3R9L2xpYi9kdGRzL3N1bi1yZXNvdXJjZXNfMV8yLmR0ZCIke3JpZ2h0eX0KICR7bGVmdHl9cmVzb3VyY2VzJHtyaWdodHl9CiAke2xlZnR5fS9yZXNvdXJjZXMke3JpZ2h0eX0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VudGVycHJpc2VfYXBwL0VudEFwcC9FbnRBcHAtd2FyL25icHJvamVjdC9idWlsZC1pbXBsLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VudGVycHJpc2VfYXBwL0VudEFwcC9FbnRBcHAtd2FyL25icHJvamVjdC9idWlsZC1pbXBsLnhtbAppbmRleCAzYjRhN2NiLi43ZmU5N2IxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbnRlcnByaXNlX2FwcC9FbnRBcHAvRW50QXBwLXdhci9uYnByb2plY3QvYnVpbGQtaW1wbC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW50ZXJwcmlzZV9hcHAvRW50QXBwL0VudEFwcC13YXIvbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sCkBAIC02NjIsNyArNjYyLDcgQEAKICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IG5hbWU9ImphdmFkb2MiIGRlcGVuZHM9ImluaXQsamF2YWRvYy1idWlsZCxqYXZhZG9jLWJyb3dzZSIgZGVzY3JpcHRpb249IkJ1aWxkIEphdmFkb2MuIi8+CiAgICAgPCEtLQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgSlVOSVQgQ09NUElMQVRJT04gU0VDVElPTgogICAgICAgICAgICAgLS0+CiAgICAgPHRhcmdldCBuYW1lPSItcHJlLXByZS1jb21waWxlLXRlc3QiIGlmPSJoYXZlLnRlc3RzIiBkZXBlbmRzPSJpbml0LGNvbXBpbGUiPgpAQCAtNzA0LDcgKzcwNCw3IEBACiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlLXRlc3Qtc2luZ2xlIiBkZXBlbmRzPSJpbml0LGNvbXBpbGUsLXByZS1wcmUtY29tcGlsZS10ZXN0LC1wcmUtY29tcGlsZS10ZXN0LXNpbmdsZSwtZG8tY29tcGlsZS10ZXN0LXNpbmdsZSwtcG9zdC1jb21waWxlLXRlc3Qtc2luZ2xlIi8+CiAgICAgPCEtLQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgSlVOSVQgRVhFQ1VUSU9OIFNFQ1RJT04KICAgICAgICAgICAgIC0tPgogICAgIDx0YXJnZXQgbmFtZT0iLXByZS10ZXN0LXJ1biIgaWY9ImhhdmUudGVzdHMiIGRlcGVuZHM9ImluaXQiPgpAQCAtNzMxLDcgKzczMSw3IEBACiAgICAgPC90YXJnZXQ+CiAgICAgPHRhcmdldCBuYW1lPSJ0ZXN0LXNpbmdsZSIgZGVwZW5kcz0iaW5pdCxjb21waWxlLXRlc3Qtc2luZ2xlLC1wcmUtdGVzdC1ydW4tc2luZ2xlLC1kby10ZXN0LXJ1bi1zaW5nbGUsLXBvc3QtdGVzdC1ydW4tc2luZ2xlIiBkZXNjcmlwdGlvbj0iUnVuIHNpbmdsZSB1bml0IHRlc3QuIi8+CiAgICAgPCEtLQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgSlVOSVQgREVCVUdHSU5HIFNFQ1RJT04KICAgICAgICAgICAgIC0tPgogICAgIDx0YXJnZXQgbmFtZT0iLWRlYnVnLXN0YXJ0LWRlYnVnZ2VlLXRlc3QiIGlmPSJoYXZlLnRlc3RzIiBkZXBlbmRzPSJpbml0LGNvbXBpbGUtdGVzdCI+CkBAIC03NDcsNyArNzQ3LDcgQEAKICAgICA8L3RhcmdldD4KICAgICA8dGFyZ2V0IG5hbWU9ImRlYnVnLWZpeC10ZXN0IiBpZj0ibmV0YmVhbnMuaG9tZSIgZGVwZW5kcz0iaW5pdCwtcHJlLWRlYnVnLWZpeCwtZG8tZGVidWctZml4LXRlc3QiLz4KICAgICA8IS0tCi0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBDTEVBTlVQIFNFQ1RJT04KICAgICAgICAgICAgIC0tPgogICAgIDx0YXJnZXQgbmFtZT0iZGVwcy1jbGVhbiIgZGVwZW5kcz0iaW5pdCIgaWY9Im5vLmRpc3QuZWFyLmRpciIgdW5sZXNzPSJuby5kZXBzIj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VudGVycHJpc2VfYXBwL0VudEFwcC9FbnRBcHAtd2FyL3NyYy9qYXZhL2VudGFwcC93ZWIvSGVsbG9XZWIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VudGVycHJpc2VfYXBwL0VudEFwcC9FbnRBcHAtd2FyL3NyYy9qYXZhL2VudGFwcC93ZWIvSGVsbG9XZWIuamF2YQppbmRleCBjMWVhMDRiLi4xYWZlZWYzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbnRlcnByaXNlX2FwcC9FbnRBcHAvRW50QXBwLXdhci9zcmMvamF2YS9lbnRhcHAvd2ViL0hlbGxvV2ViLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW50ZXJwcmlzZV9hcHAvRW50QXBwL0VudEFwcC13YXIvc3JjL2phdmEvZW50YXBwL3dlYi9IZWxsb1dlYi5qYXZhCkBAIC00Niw1ICs0Niw1IEBACiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihoZWxsbyk7CiAgICAgICAgIHJldHVybiBoZWxsbzsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VudGVycHJpc2VfYXBwL0VudEFwcC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbnRlcnByaXNlX2FwcC9FbnRBcHAvYnVpbGQueG1sCmluZGV4IDc2OGUyYzMuLjcxNWNjZmUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VudGVycHJpc2VfYXBwL0VudEFwcC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW50ZXJwcmlzZV9hcHAvRW50QXBwL2J1aWxkLnhtbApAQCAtMjUsMjEgKzI1LDIxIEBACiAgICAgPGltcG9ydCBmaWxlPSJuYnByb2plY3QvYnVpbGQtaW1wbC54bWwiLz4KICAgICA8IS0tCiAKLSAgICBUaGVyZSBleGlzdCBzZXZlcmFsIHRhcmdldHMgd2hpY2ggYXJlIGJ5IGRlZmF1bHQgZW1wdHkgYW5kIHdoaWNoIGNhbiBiZSAKLSAgICB1c2VkIGZvciBleGVjdXRpb24gb2YgeW91ciB0YXNrcy4gVGhlc2UgdGFyZ2V0cyBhcmUgdXN1YWxseSBleGVjdXRlZCAKLSAgICBiZWZvcmUgYW5kIGFmdGVyIHNvbWUgbWFpbiB0YXJnZXRzLiBUaGV5IGFyZTogCisgICAgVGhlcmUgZXhpc3Qgc2V2ZXJhbCB0YXJnZXRzIHdoaWNoIGFyZSBieSBkZWZhdWx0IGVtcHR5IGFuZCB3aGljaCBjYW4gYmUKKyAgICB1c2VkIGZvciBleGVjdXRpb24gb2YgeW91ciB0YXNrcy4gVGhlc2UgdGFyZ2V0cyBhcmUgdXN1YWxseSBleGVjdXRlZAorICAgIGJlZm9yZSBhbmQgYWZ0ZXIgc29tZSBtYWluIHRhcmdldHMuIFRoZXkgYXJlOgogCi0gICAgICBwcmUtaW5pdDogICAgICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgaW5pdGlhbGl6YXRpb24gb2YgcHJvamVjdCBwcm9wZXJ0aWVzIAotICAgICAgcG9zdC1pbml0OiAgICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgaW5pdGlhbGl6YXRpb24gb2YgcHJvamVjdCBwcm9wZXJ0aWVzIAotICAgICAgcHJlLWNvbXBpbGU6ICAgICAgICAgICAgICBjYWxsZWQgYmVmb3JlIGphdmFjIGNvbXBpbGF0aW9uIAotICAgICAgcG9zdC1jb21waWxlOiAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgamF2YWMgY29tcGlsYXRpb24gCi0gICAgICBwcmUtZGlzdDogICAgICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgamFyIGJ1aWxkaW5nIAotICAgICAgcG9zdC1kaXN0OiAgICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgamFyIGJ1aWxkaW5nIAotICAgICAgcG9zdC1jbGVhbjogICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgY2xlYW5pbmcgYnVpbGQgcHJvZHVjdHMgCisgICAgICBwcmUtaW5pdDogICAgICAgICAgICAgICAgIGNhbGxlZCBiZWZvcmUgaW5pdGlhbGl6YXRpb24gb2YgcHJvamVjdCBwcm9wZXJ0aWVzCisgICAgICBwb3N0LWluaXQ6ICAgICAgICAgICAgICAgIGNhbGxlZCBhZnRlciBpbml0aWFsaXphdGlvbiBvZiBwcm9qZWN0IHByb3BlcnRpZXMKKyAgICAgIHByZS1jb21waWxlOiAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBqYXZhYyBjb21waWxhdGlvbgorICAgICAgcG9zdC1jb21waWxlOiAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgamF2YWMgY29tcGlsYXRpb24KKyAgICAgIHByZS1kaXN0OiAgICAgICAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBqYXIgYnVpbGRpbmcKKyAgICAgIHBvc3QtZGlzdDogICAgICAgICAgICAgICAgY2FsbGVkIGFmdGVyIGphciBidWlsZGluZworICAgICAgcG9zdC1jbGVhbjogICAgICAgICAgICAgICBjYWxsZWQgYWZ0ZXIgY2xlYW5pbmcgYnVpbGQgcHJvZHVjdHMKICAgICAgIHByZS1ydW4tZGVwbG95OiAgICAgICAgICAgY2FsbGVkIGJlZm9yZSBkZXBsb3lpbmcKICAgICAgIHBvc3QtcnVuLWRlcGxveTogICAgICAgICAgY2FsbGVkIGFmdGVyIGRlcGxveWluZwogCi0gICAgRXhhbXBsZSBvZiBwbHVnaW5nIGFuIG9iZnVzY2F0b3IgYWZ0ZXIgdGhlIGNvbXBpbGF0aW9uIGNvdWxkIGxvb2sgbGlrZSAKKyAgICBFeGFtcGxlIG9mIHBsdWdpbmcgYW4gb2JmdXNjYXRvciBhZnRlciB0aGUgY29tcGlsYXRpb24gY291bGQgbG9vayBsaWtlCiAKICAgICAgICAgPHRhcmdldCBuYW1lPSJwb3N0LWNvbXBpbGUiPgogICAgICAgICAgICAgPG9iZnVzY2F0ZT4KQEAgLTQ3LDE3ICs0NywxNyBAQAogICAgICAgICAgICAgPC9vYmZ1c2NhdGU+CiAgICAgICAgIDwvdGFyZ2V0PgogCi0gICAgRm9yIGxpc3Qgb2YgYXZhaWxhYmxlIHByb3BlcnRpZXMgY2hlY2sgdGhlIGltcG9ydGVkIAotICAgIG5icHJvamVjdC9idWlsZC1pbXBsLnhtbCBmaWxlLiAKKyAgICBGb3IgbGlzdCBvZiBhdmFpbGFibGUgcHJvcGVydGllcyBjaGVjayB0aGUgaW1wb3J0ZWQKKyAgICBuYnByb2plY3QvYnVpbGQtaW1wbC54bWwgZmlsZS4KIAogCiAgICAgT3RoZXIgd2F5IGhvdyB0byBjdXN0b21pemUgdGhlIGJ1aWxkIGlzIGJ5IG92ZXJyaWRpbmcgZXhpc3RpbmcgbWFpbiB0YXJnZXRzLgotICAgIFRoZSB0YXJnZXQgb2YgaW50ZXJlc3QgYXJlOiAKKyAgICBUaGUgdGFyZ2V0IG9mIGludGVyZXN0IGFyZToKIAogICAgICAgZG8tZGlzdDogICAgICAgICAgICAgICAgamFyIGFyY2hpdmUgYnVpbGRpbmcKLSAgICAgIHJ1bjogICAgICAgICAgICAgICAgICAgIGV4ZWN1dGlvbiBvZiBwcm9qZWN0IAorICAgICAgcnVuOiAgICAgICAgICAgICAgICAgICAgZXhlY3V0aW9uIG9mIHByb2plY3QKIAotICAgIEV4YW1wbGUgb2Ygb3ZlcnJpZGluZyB0aGUgdGFyZ2V0IGZvciBwcm9qZWN0IGV4ZWN1dGlvbiBjb3VsZCBsb29rIGxpa2UgCisgICAgRXhhbXBsZSBvZiBvdmVycmlkaW5nIHRoZSB0YXJnZXQgZm9yIHByb2plY3QgZXhlY3V0aW9uIGNvdWxkIGxvb2sgbGlrZQogCiAgICAgICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSI8UFJPSk5BTUU+LWltcGwuamFyIj4KICAgICAgICAgICAgIDxleGVjIGRpcj0iYmluIiBleGVjdXRhYmxlPSJsYXVuY2hlci5leGUiPgpAQCAtNjUsMTAgKzY1LDEwIEBACiAgICAgICAgICAgICA8L2V4ZWM+CiAgICAgICAgIDwvdGFyZ2V0PgogCi0gICAgTm90aWNlIHRoYXQgb3ZlcnJpZGRlbiB0YXJnZXQgZGVwZW5kcyBvbiBqYXIgdGFyZ2V0IGFuZCBub3Qgb25seSBvbiAKLSAgICBjb21waWxlIHRhcmdldCBhcyByZWd1bGFyIHJ1biB0YXJnZXQgZG9lcy4gQWdhaW4sIGZvciBsaXN0IG9mIGF2YWlsYWJsZSAKLSAgICBwcm9wZXJ0aWVzIHdoaWNoIHlvdSBjYW4gdXNlIGNoZWNrIHRoZSB0YXJnZXQgeW91IGFyZSBvdmVycmlkaW5nIGluIAotICAgIG5icHJvamVjdC9idWlsZC1pbXBsLnhtbCBmaWxlLiAKKyAgICBOb3RpY2UgdGhhdCBvdmVycmlkZGVuIHRhcmdldCBkZXBlbmRzIG9uIGphciB0YXJnZXQgYW5kIG5vdCBvbmx5IG9uCisgICAgY29tcGlsZSB0YXJnZXQgYXMgcmVndWxhciBydW4gdGFyZ2V0IGRvZXMuIEFnYWluLCBmb3IgbGlzdCBvZiBhdmFpbGFibGUKKyAgICBwcm9wZXJ0aWVzIHdoaWNoIHlvdSBjYW4gdXNlIGNoZWNrIHRoZSB0YXJnZXQgeW91IGFyZSBvdmVycmlkaW5nIGluCisgICAgbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sIGZpbGUuCiAKICAgICAtLT4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VudGVycHJpc2VfYXBwL0VudEFwcC9uYnByb2plY3QvYW50LWRlcGxveS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbnRlcnByaXNlX2FwcC9FbnRBcHAvbmJwcm9qZWN0L2FudC1kZXBsb3kueG1sCmluZGV4IDE0NGQ2MzAuLmNiMDgzODUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VudGVycHJpc2VfYXBwL0VudEFwcC9uYnByb2plY3QvYW50LWRlcGxveS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW50ZXJwcmlzZV9hcHAvRW50QXBwL25icHJvamVjdC9hbnQtZGVwbG95LnhtbApAQCAtMjUsNyArMjUsNyBAQAogICAgICAgICA8dGVtcGZpbGUgcHJlZml4PSJzanNhcyIgcHJvcGVydHk9InNqc2FzLnBhc3N3b3JkLmZpbGUiIGRlc3RkaXI9IiR7amF2YS5pby50bXBkaXJ9Ii8+ICA8IS0tIGRvIG5vdCBmb3JnZXQgdG8gZGVsZXRlIHRoaXMhIC0tPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJBU19BRE1JTl9QQVNTV09SRD0ke3Nqc2FzLnBhc3N3b3JkfSIgZmlsZT0iJHtzanNhcy5wYXNzd29yZC5maWxlfSIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSItcGFyc2Utc3VuLXdlYiIgZGVwZW5kcz0iLWluaXQtY2wtZGVwbG95bWVudC1lbnYiIGlmPSJzdW4ud2ViLnByZXNlbnQiPgogICAgICAgICA8dGVtcGZpbGUgcHJlZml4PSJzanNhcyIgcHJvcGVydHk9InRlbXAuc3VuLndlYiIgZGVzdGRpcj0iJHtqYXZhLmlvLnRtcGRpcn0iLz4KICAgICAgICAgPGNvcHkgZmlsZT0iJHtkZXBsb3kuYW50LmRvY2Jhc2UuZGlyfS9XRUItSU5GL3N1bi13ZWIueG1sIiB0b2ZpbGU9IiR7dGVtcC5zdW4ud2VifSIvPgpAQCAtMzksNyArMzksNyBAQAogICAgICAgICAgICAgPHJlcGxhY2V2YWx1ZT48IVtDREFUQVstLT4gPHN1bi13ZWItYXBwXV0+PC9yZXBsYWNldmFsdWU+CiAgICAgICAgIDwvcmVwbGFjZT4KICAgICAgICAgPHhtbHByb3BlcnR5IGZpbGU9IiR7dGVtcC5zdW4ud2VifSIgdmFsaWRhdGU9ImZhbHNlIj4KLSAgICAgICAgPC94bWxwcm9wZXJ0eT4gICAgCisgICAgICAgIDwveG1scHJvcGVydHk+CiAgICAgICAgIDxkZWxldGUgZmlsZT0iJHt0ZW1wLnN1bi53ZWJ9Ii8+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkZXBsb3kuYW50LmNsaWVudC51cmwiIHZhbHVlPSIke3Nqc2FzLnVybH0ke3N1bi13ZWItYXBwLmNvbnRleHQtcm9vdH0iLz4KICAgICA8L3RhcmdldD4KQEAgLTQ5LDExICs0OSwxMSBAQAogICAgICAgICA8bWtkaXIgZGlyPSIke3Nqc2FzLnJlc291cmNlcy5kaXJ9L01FVEEtSU5GIi8+CiAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzanNhcy5yZXNvdXJjZXMuZmlsZSIgdmFsdWU9IiR7c2pzYXMucmVzb3VyY2VzLmRpcn0vTUVUQS1JTkYvc3VuLXJlc291cmNlcy54bWwiLz4KICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxlZnR5IiB2YWx1ZT0iJmx0OyIvPgotICAgICAgICAgCisKICAgICAgICAgPHByb3BlcnR5IG5hbWU9InJpZ2h0eSIgdmFsdWU9IiZndDsiLz4KICAgICAgICAgPGNvbmNhdCBkZXN0ZmlsZT0iJHtzanNhcy5yZXNvdXJjZXMuZmlsZX0iPiR7bGVmdHl9P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/JHtyaWdodHl9Ci0ke2xlZnR5fSFET0NUWVBFIHJlc291cmNlcyBQVUJMSUMgCi0gICAiLS8vU3VuIE1pY3Jvc3lzdGVtcyBJbmMuLy9EVEQgQXBwbGljYXRpb24gU2VydmVyIDkuMCBSZXNvdXJjZSBEZWZpbml0aW9ucyAvL0VOIiAKKyR7bGVmdHl9IURPQ1RZUEUgcmVzb3VyY2VzIFBVQkxJQworICAgIi0vL1N1biBNaWNyb3N5c3RlbXMgSW5jLi8vRFREIEFwcGxpY2F0aW9uIFNlcnZlciA5LjAgUmVzb3VyY2UgRGVmaW5pdGlvbnMgLy9FTiIKICAgICIke3Nqc2FzLnJvb3R9L2xpYi9kdGRzL3N1bi1yZXNvdXJjZXNfMV8yLmR0ZCIke3JpZ2h0eX0KICR7bGVmdHl9cmVzb3VyY2VzJHtyaWdodHl9CiAke2xlZnR5fS9yZXNvdXJjZXMke3JpZ2h0eX0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VudGVycHJpc2VfYXBwL0VudEFwcC9uYnByb2plY3QvYnVpbGQtaW1wbC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbnRlcnByaXNlX2FwcC9FbnRBcHAvbmJwcm9qZWN0L2J1aWxkLWltcGwueG1sCmluZGV4IGNkNWM3Y2YuLjY5MTdlNWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VudGVycHJpc2VfYXBwL0VudEFwcC9uYnByb2plY3QvYnVpbGQtaW1wbC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW50ZXJwcmlzZV9hcHAvRW50QXBwL25icHJvamVjdC9idWlsZC1pbXBsLnhtbApAQCAtMzUsOCArMzUsOCBAQAogPHByb2plY3QgbmFtZT0iRW50QXBwLWltcGwiIGRlZmF1bHQ9ImJ1aWxkIiBiYXNlZGlyPSIuLiIgeG1sbnM6ZWFyMj0iaHR0cDovL3d3dy5uZXRiZWFucy5vcmcvbnMvajJlZS1lYXJwcm9qZWN0LzIiPgogICAgIDxpbXBvcnQgZmlsZT0iYW50LWRlcGxveS54bWwiLz4KICAgICA8dGFyZ2V0IG5hbWU9ImRlZmF1bHQiIGRlcGVuZHM9ImRpc3QiIGRlc2NyaXB0aW9uPSJCdWlsZCB3aG9sZSBwcm9qZWN0LiIvPgotICAgIDwhLS0gCi0gICAgSU5JVElBTElaQVRJT04gU0VDVElPTiAKKyAgICA8IS0tCisgICAgSU5JVElBTElaQVRJT04gU0VDVElPTgogICAgIC0tPgogICAgIDx0YXJnZXQgbmFtZT0icHJlLWluaXQiPgogICAgICAgICA8IS0tIEVtcHR5IHBsYWNlaG9sZGVyIGZvciBlYXNpZXIgY3VzdG9taXphdGlvbi4gLS0+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbnRlcnByaXNlX2FwcC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW50ZXJwcmlzZV9hcHAvYnVpbGQucHJvcGVydGllcwppbmRleCAwNjhmODRlLi4xZGZiMDdlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbnRlcnByaXNlX2FwcC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VudGVycHJpc2VfYXBwL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogICBEb24ndCByZW5hbWUgamRrLmhvbWUgYXMgamF2YS5ob21lCiBqZGsuaG9tZT0ke2Vudi5KQVZBX0hPTUV9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbnRlcnByaXNlX2FwcC9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbnRlcnByaXNlX2FwcC9idWlsZC54bWwKaW5kZXggZDViMGY0Ny4uODEwMmM3OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW50ZXJwcmlzZV9hcHAvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VudGVycHJpc2VfYXBwL2J1aWxkLnhtbApAQCAtMTksMTY4ICsxOSwxNjggQEAKIAogPHByb2plY3QgbmFtZT0iUGxhaW4gRUpCIGludm9jYXRpb24gZnJvbSBKQkkiIGRlZmF1bHQ9ImFsbCIgYmFzZWRpcj0iLiI+CiAKLQk8cHJvcGVydHkgZW52aXJvbm1lbnQ9ImVudiIvPgorICAgIDxwcm9wZXJ0eSBlbnZpcm9ubWVudD0iZW52Ii8+CiAgICAgPHByb3BlcnR5IGZpbGU9ImJ1aWxkLnByb3BlcnRpZXMiLz4KLSAgIAotICAgCTx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJjbGVhbiwgc2V0dXAsIHJ1bnRlc3QsIHVuZGVwbG95Ij4KLQkJPGFudGNhbGwgdGFyZ2V0PSJjbGVhbiIvPgotCTwvdGFyZ2V0PgorCisgICAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImNsZWFuLCBzZXR1cCwgcnVudGVzdCwgdW5kZXBsb3kiPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuIi8+CisgICAgPC90YXJnZXQ+CiAKIAotCTx0YXJnZXQgbmFtZT0ic2V0dXAiPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtZW50YXBwIi8+Ci0JCTxhbnRjYWxsIHRhcmdldD0id3NnZW4tc3VuLWh0dHAtYmluZGluZyIvPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImJ1aWxkLXNlcnZpY2Vhc3NlbWJseSIvPgotCQk8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1zZXJ2aWNlYXNzZW1ibHkiLz4KLQk8L3RhcmdldD4JCisgICAgPHRhcmdldCBuYW1lPSJzZXR1cCI+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1lbnRhcHAiLz4KKyAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3c2dlbi1zdW4taHR0cC1iaW5kaW5nIi8+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iYnVpbGQtc2VydmljZWFzc2VtYmx5Ii8+CisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXNlcnZpY2Vhc3NlbWJseSIvPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJydW50ZXN0Ij4KKyAgICA8dGFyZ2V0IG5hbWU9InJ1bnRlc3QiPgogCi0JCTwhLS0gQnVpbGQgdGhlIGNsaWVudCAtLT4KLQkJPGV4ZWMgZXhlY3V0YWJsZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vd3NpbXBvcnQiPgotCQkJPGFyZyBsaW5lPSItZCIvPgotCQkJPGFyZyBsaW5lPSJidWlsZCIvPgotCQkJPGFyZyBsaW5lPSIta2VlcCIvPgotCQkJPGFyZyBsaW5lPSJzZXJ2aWNlLWFzc2VtYmx5L3N1bi1odHRwLWJpbmRpbmcvJHtlamIud2Vic2VydmljZS5uYW1lfVNlcnZpY2Uud3NkbCIvPgotCQk8L2V4ZWM+Ci0JCTxleGVjIGV4ZWN1dGFibGU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL3dzaW1wb3J0Ij4KLQkJCTxhcmcgbGluZT0iLWQiLz4KLQkJCTxhcmcgbGluZT0iYnVpbGQiLz4KLQkJCTxhcmcgbGluZT0iLWtlZXAiLz4KLQkJCTxhcmcgbGluZT0ic2VydmljZS1hc3NlbWJseS9zdW4taHR0cC1iaW5kaW5nLyR7d2ViLndlYnNlcnZpY2UubmFtZX1TZXJ2aWNlLndzZGwiLz4KLQkJPC9leGVjPgorICAgICAgICA8IS0tIEJ1aWxkIHRoZSBjbGllbnQgLS0+CisgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL3dzaW1wb3J0Ij4KKyAgICAgICAgICAgIDxhcmcgbGluZT0iLWQiLz4KKyAgICAgICAgICAgIDxhcmcgbGluZT0iYnVpbGQiLz4KKyAgICAgICAgICAgIDxhcmcgbGluZT0iLWtlZXAiLz4KKyAgICAgICAgICAgIDxhcmcgbGluZT0ic2VydmljZS1hc3NlbWJseS9zdW4taHR0cC1iaW5kaW5nLyR7ZWpiLndlYnNlcnZpY2UubmFtZX1TZXJ2aWNlLndzZGwiLz4KKyAgICAgICAgPC9leGVjPgorICAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi93c2ltcG9ydCI+CisgICAgICAgICAgICA8YXJnIGxpbmU9Ii1kIi8+CisgICAgICAgICAgICA8YXJnIGxpbmU9ImJ1aWxkIi8+CisgICAgICAgICAgICA8YXJnIGxpbmU9Ii1rZWVwIi8+CisgICAgICAgICAgICA8YXJnIGxpbmU9InNlcnZpY2UtYXNzZW1ibHkvc3VuLWh0dHAtYmluZGluZy8ke3dlYi53ZWJzZXJ2aWNlLm5hbWV9U2VydmljZS53c2RsIi8+CisgICAgICAgIDwvZXhlYz4KIAotCQk8amF2YWMgc3JjZGlyPSJjbGllbnQiIGluY2x1ZGVzPSJDbGllbnQuamF2YSIgZGVzdGRpcj0iYnVpbGQiIGNsYXNzcGF0aD0iJHtjbGllbnQuY2xhc3NwYXRofSIgZGVidWc9InRydWUiLz4KKyAgICAgICAgPGphdmFjIHNyY2Rpcj0iY2xpZW50IiBpbmNsdWRlcz0iQ2xpZW50LmphdmEiIGRlc3RkaXI9ImJ1aWxkIiBjbGFzc3BhdGg9IiR7Y2xpZW50LmNsYXNzcGF0aH0iIGRlYnVnPSJ0cnVlIi8+CiAKLQkJPGphdmEgY2xhc3NuYW1lPSJjbGllbnQuQ2xpZW50IiBjbGFzc3BhdGg9IiR7Y2xpZW50LmNsYXNzcGF0aH0iIGZvcms9InRydWUiLz4KLQotCTwvdGFyZ2V0PgotCi0gICAJPHRhcmdldCBuYW1lPSJjbGVhbiI+Ci0KLQkJPGV4ZWMgZGlyPSIke2VudC5hcHB9IiBleGVjdXRhYmxlPSIke2Vudi5BTlRfSE9NRX0vYmluL2FudCI+Ci0JCQk8YXJnIGxpbmU9ImNsZWFuIi8+Ci0JCTwvZXhlYz4KLQotCQk8ZGVsZXRlIGRpcj0iYnVpbGQiLz4KLQotCQk8ZGVsZXRlIGluY2x1ZGVlbXB0eWRpcnM9InRydWUiIGZhaWxvbmVycm9yPSJmYWxzZSI+Ci0JICAgCQk8ZmlsZXNldCBkaXI9InNlcnZpY2UtYXNzZW1ibHkvc3VuLWh0dHAtYmluZGluZyIgaW5jbHVkZXM9Iioud3NkbCwgKi54c2QiLz4KLQkgICAJCTxmaWxlc2V0IGRpcj0ic2VydmljZS1hc3NlbWJseS9zdW4taHR0cC1iaW5kaW5nL2VudGFwcCIvPgotCQk8L2RlbGV0ZT4KLQotCTwvdGFyZ2V0PgkKLQotICAgCTx0YXJnZXQgbmFtZT0idW5kZXBsb3kiPgotCQk8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXNlcnZpY2Vhc3NlbWJseSIvPgotCTwvdGFyZ2V0PgotCi0JPHRhcmdldCBuYW1lPSJjb21waWxlLWVudGFwcCI+Ci0JCTxleGVjIGRpcj0iJHtlbnQuYXBwfSIgZXhlY3V0YWJsZT0iJHtlbnYuQU5UX0hPTUV9L2Jpbi9hbnQiLz4KLQkJPCEtLQotCQk8YW50IGRpcj0iJHtlbnQuYXBwfSIvPgotCQktLT4KLQotCQk8IS0tIEFkZCBqYmkueG1sIGZpbGUgdG8gdGhlIC5lYXIgZmlsZSAtLT4KLQkJPGphciBkZXN0ZmlsZT0iJHtlbnQuYXBwfS9kaXN0L0VudEFwcC5lYXIiCi0JCQkgYmFzZWRpcj0ic2VydmljZS1hc3NlbWJseS9zdW4tamF2YWVlLWVuZ2luZSIKLQkJCSBpbmNsdWRlcz0iTUVUQS1JTkYvamJpLnhtbCIKLQkJCSB1cGRhdGU9InRydWUiCi0JCS8+Ci0JPC90YXJnZXQ+Ci0gICAgCi0gICAgPHRhcmdldCBuYW1lPSJ3c2dlbi1zdW4taHR0cC1iaW5kaW5nIj4KLQkJPCEtLSBnZW5lcmF0ZSBXU0RMIGZvciB0aGUgRUpCIHdlYiBzZXJ2aWNlIC0tPgotCQk8ZXhlYyBleGVjdXRhYmxlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi93c2dlbiI+Ci0JCQk8YXJnIGxpbmU9Ii1jcCIvPgotCQkJPGFyZyBsaW5lPSIke2VudC5hcHB9LyR7ZWpiLm1vZHVsZX0vYnVpbGQvZWFyLW1vZHVsZSIvPgotCQkJPGFyZyBsaW5lPSIke2VqYi53ZWJzZXJ2aWNlLmNsYXNzfSIvPgotCQkJPGFyZyBsaW5lPSItd3NkbCIvPgotCQkJPGFyZyBsaW5lPSItZCIvPgotCQkJPGFyZyBsaW5lPSJzZXJ2aWNlLWFzc2VtYmx5L3N1bi1odHRwLWJpbmRpbmciLz4KLQkJPC9leGVjPgotCQk8IS0tIFJlcGxhY2UgUkVQTEFDRV9XSVRIX0FDVFVBTF9VUkwgd2l0aCBzb21lIHZhbHVlIC0tPgotCQk8cmVwbGFjZSBmaWxlPSJzZXJ2aWNlLWFzc2VtYmx5L3N1bi1odHRwLWJpbmRpbmcvJHtlamIud2Vic2VydmljZS5uYW1lfVNlcnZpY2Uud3NkbCI+Ci0JCQk8cmVwbGFjZXRva2VuPlJFUExBQ0VfV0lUSF9BQ1RVQUxfVVJMPC9yZXBsYWNldG9rZW4+Ci0JCQk8cmVwbGFjZXZhbHVlPmh0dHA6Ly9sb2NhbGhvc3Q6MTIwMDAvZW50YXBwL2VqYi9IZWxsb0VKQjwvcmVwbGFjZXZhbHVlPgotCQk8L3JlcGxhY2U+Ci0KLQkJPCEtLSBnZW5lcmF0ZSBXU0RMIGZvciB0aGUgU2VydmxldCB3ZWIgc2VydmljZSAtLT4KLQkJPGV4ZWMgZXhlY3V0YWJsZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vd3NnZW4iPgotCQkJPGFyZyBsaW5lPSItY3AiLz4KLQkJCTxhcmcgbGluZT0iJHtlbnQuYXBwfS8ke3dlYi5tb2R1bGV9L2J1aWxkL2Vhci1tb2R1bGUvV0VCLUlORi9jbGFzc2VzIi8+Ci0JCQk8YXJnIGxpbmU9IiR7d2ViLndlYnNlcnZpY2UuY2xhc3N9Ii8+Ci0JCQk8YXJnIGxpbmU9Ii13c2RsIi8+Ci0JCQk8YXJnIGxpbmU9Ii1kIi8+Ci0JCQk8YXJnIGxpbmU9InNlcnZpY2UtYXNzZW1ibHkvc3VuLWh0dHAtYmluZGluZyIvPgotCQk8L2V4ZWM+Ci0JCTwhLS0gUmVwbGFjZSBSRVBMQUNFX1dJVEhfQUNUVUFMX1VSTCB3aXRoIHNvbWUgdmFsdWUgLS0+Ci0JCTxyZXBsYWNlIGZpbGU9InNlcnZpY2UtYXNzZW1ibHkvc3VuLWh0dHAtYmluZGluZy8ke3dlYi53ZWJzZXJ2aWNlLm5hbWV9U2VydmljZS53c2RsIj4KLQkJCTxyZXBsYWNldG9rZW4+UkVQTEFDRV9XSVRIX0FDVFVBTF9VUkw8L3JlcGxhY2V0b2tlbj4KLQkJCTxyZXBsYWNldmFsdWU+aHR0cDovL2xvY2FsaG9zdDoxMjAwMC9lbnRhcHAvd2ViL0hlbGxvRUpCPC9yZXBsYWNldmFsdWU+Ci0JCTwvcmVwbGFjZT4KKyAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJjbGllbnQuQ2xpZW50IiBjbGFzc3BhdGg9IiR7Y2xpZW50LmNsYXNzcGF0aH0iIGZvcms9InRydWUiLz4KIAogICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJidWlsZC1zZXJ2aWNlYXNzZW1ibHkiPgotCQk8bWtkaXIgZGlyPSJidWlsZCIvPgorICAgICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iPgogCi0JCTwhLS0gQnVpbGQgdGhlIHNlcnZpY2UgdW5pdCAmIGFzc2VtYmx5IGphcnMgLS0+Ci0JCTxqYXIgZGVzdGZpbGU9ImJ1aWxkL3N1bi1odHRwLWJpbmRpbmcuamFyIgotCQkJIGJhc2VkaXI9InNlcnZpY2UtYXNzZW1ibHkvc3VuLWh0dHAtYmluZGluZyIKLQkJCSBpbmNsdWRlcz0iKi53c2RsLCAqLnhzZCwgTUVUQS1JTkYvamJpLnhtbCIKLQkJLz4KLQkJPGphciBkZXN0ZmlsZT0iYnVpbGQvRW50QXBwLnppcCIKLQkJCSBiYXNlZGlyPSJidWlsZCIKLQkJCSBpbmNsdWRlcz0ic3VuLWh0dHAtYmluZGluZy5qYXIiCi0JCS8+Ci0JCTxqYXIgZGVzdGZpbGU9ImJ1aWxkL0VudEFwcC56aXAiCi0JCQkgdXBkYXRlPSJ0cnVlIgotCQkJIGJhc2VkaXI9IiR7ZW50LmFwcH0vZGlzdCIKLQkJCSBpbmNsdWRlcz0iRW50QXBwLmVhciIKLQkJLz4KLQkJPGphciBkZXN0ZmlsZT0iYnVpbGQvRW50QXBwLnppcCIKLQkJCSBiYXNlZGlyPSJzZXJ2aWNlLWFzc2VtYmx5IgotCQkJIGluY2x1ZGVzPSJNRVRBLUlORi9qYmkueG1sIgotCQkJIHVwZGF0ZT0idHJ1ZSIKLQkJLz4KLQk8L3RhcmdldD4KKyAgICAgICAgPGV4ZWMgZGlyPSIke2VudC5hcHB9IiBleGVjdXRhYmxlPSIke2Vudi5BTlRfSE9NRX0vYmluL2FudCI+CisgICAgICAgICAgICA8YXJnIGxpbmU9ImNsZWFuIi8+CisgICAgICAgIDwvZXhlYz4KIAotCTx0YXJnZXQgbmFtZT0iZGVwbG95LXNlcnZpY2Vhc3NlbWJseSI+Ci0JCTxleGVjIGV4ZWN1dGFibGU9IiR7YXNhZG1pbi5jb21tYW5kfSI+Ci0JCQk8YXJnIGxpbmU9ImRlcGxveS1qYmktc2VydmljZS1hc3NlbWJseSIvPgotCQkJPGFyZyBsaW5lPSJidWlsZC9FbnRBcHAuemlwIi8+Ci0JCTwvZXhlYz4KLQkJPGV4ZWMgZXhlY3V0YWJsZT0iJHthc2FkbWluLmNvbW1hbmR9Ij4KLQkJCTxhcmcgbGluZT0ic3RhcnQtamJpLXNlcnZpY2UtYXNzZW1ibHkiLz4KLQkJCTxhcmcgbGluZT0iRW50QXBwIi8+Ci0JCTwvZXhlYz4KLQk8L3RhcmdldD4KLSAgICAKLQk8dGFyZ2V0IG5hbWU9InVuZGVwbG95LXNlcnZpY2Vhc3NlbWJseSI+Ci0JCTxleGVjIGV4ZWN1dGFibGU9IiR7YXNhZG1pbi5jb21tYW5kfSI+Ci0JCQk8YXJnIGxpbmU9InN0b3AtamJpLXNlcnZpY2UtYXNzZW1ibHkiLz4KLQkJCTxhcmcgbGluZT0iRW50QXBwIi8+Ci0JCTwvZXhlYz4KLQkJPGV4ZWMgZXhlY3V0YWJsZT0iJHthc2FkbWluLmNvbW1hbmR9Ij4KLQkJCTxhcmcgbGluZT0ic2h1dC1kb3duLWpiaS1zZXJ2aWNlLWFzc2VtYmx5Ii8+Ci0JCQk8YXJnIGxpbmU9IkVudEFwcCIvPgotCQk8L2V4ZWM+Ci0JCTxleGVjIGV4ZWN1dGFibGU9IiR7YXNhZG1pbi5jb21tYW5kfSI+Ci0JCQk8YXJnIGxpbmU9InVuZGVwbG95LWpiaS1zZXJ2aWNlLWFzc2VtYmx5Ii8+Ci0JCQk8YXJnIGxpbmU9IkVudEFwcCIvPgotCQk8L2V4ZWM+Ci0JPC90YXJnZXQ+CisgICAgICAgIDxkZWxldGUgZGlyPSJidWlsZCIvPgogCi0JPHRhcmdldCBuYW1lPSJyZXN0YXJ0LWVqYm1vZHVsZSI+Ci0JCTxleGVjIGV4ZWN1dGFibGU9IiR7YXNhZG1pbi5jb21tYW5kfSI+Ci0JCQk8YXJnIGxpbmU9ImRpc2FibGUiLz4KLQkJCTxhcmcgbGluZT0iJHtlamIubW9kdWxlfSIvPgotCQk8L2V4ZWM+Ci0JCTxleGVjIGV4ZWN1dGFibGU9IiR7YXNhZG1pbi5jb21tYW5kfSI+Ci0JCQk8YXJnIGxpbmU9ImVuYWJsZSIvPgotCQkJPGFyZyBsaW5lPSIke2VqYi5tb2R1bGV9Ii8+Ci0JCTwvZXhlYz4KLQk8L3RhcmdldD4KKyAgICAgICAgPGRlbGV0ZSBpbmNsdWRlZW1wdHlkaXJzPSJ0cnVlIiBmYWlsb25lcnJvcj0iZmFsc2UiPgorICAgICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSJzZXJ2aWNlLWFzc2VtYmx5L3N1bi1odHRwLWJpbmRpbmciIGluY2x1ZGVzPSIqLndzZGwsICoueHNkIi8+CisgICAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9InNlcnZpY2UtYXNzZW1ibHkvc3VuLWh0dHAtYmluZGluZy9lbnRhcHAiLz4KKyAgICAgICAgPC9kZWxldGU+CisKKyAgICA8L3RhcmdldD4KKworICAgICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiPgorICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXNlcnZpY2Vhc3NlbWJseSIvPgorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJjb21waWxlLWVudGFwcCI+CisgICAgICAgIDxleGVjIGRpcj0iJHtlbnQuYXBwfSIgZXhlY3V0YWJsZT0iJHtlbnYuQU5UX0hPTUV9L2Jpbi9hbnQiLz4KKyAgICAgICAgPCEtLQorICAgICAgICA8YW50IGRpcj0iJHtlbnQuYXBwfSIvPgorICAgICAgICAtLT4KKworICAgICAgICA8IS0tIEFkZCBqYmkueG1sIGZpbGUgdG8gdGhlIC5lYXIgZmlsZSAtLT4KKyAgICAgICAgPGphciBkZXN0ZmlsZT0iJHtlbnQuYXBwfS9kaXN0L0VudEFwcC5lYXIiCisgICAgICAgICAgICAgYmFzZWRpcj0ic2VydmljZS1hc3NlbWJseS9zdW4tamF2YWVlLWVuZ2luZSIKKyAgICAgICAgICAgICBpbmNsdWRlcz0iTUVUQS1JTkYvamJpLnhtbCIKKyAgICAgICAgICAgICB1cGRhdGU9InRydWUiCisgICAgICAgIC8+CisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9IndzZ2VuLXN1bi1odHRwLWJpbmRpbmciPgorICAgICAgICA8IS0tIGdlbmVyYXRlIFdTREwgZm9yIHRoZSBFSkIgd2ViIHNlcnZpY2UgLS0+CisgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL3dzZ2VuIj4KKyAgICAgICAgICAgIDxhcmcgbGluZT0iLWNwIi8+CisgICAgICAgICAgICA8YXJnIGxpbmU9IiR7ZW50LmFwcH0vJHtlamIubW9kdWxlfS9idWlsZC9lYXItbW9kdWxlIi8+CisgICAgICAgICAgICA8YXJnIGxpbmU9IiR7ZWpiLndlYnNlcnZpY2UuY2xhc3N9Ii8+CisgICAgICAgICAgICA8YXJnIGxpbmU9Ii13c2RsIi8+CisgICAgICAgICAgICA8YXJnIGxpbmU9Ii1kIi8+CisgICAgICAgICAgICA8YXJnIGxpbmU9InNlcnZpY2UtYXNzZW1ibHkvc3VuLWh0dHAtYmluZGluZyIvPgorICAgICAgICA8L2V4ZWM+CisgICAgICAgIDwhLS0gUmVwbGFjZSBSRVBMQUNFX1dJVEhfQUNUVUFMX1VSTCB3aXRoIHNvbWUgdmFsdWUgLS0+CisgICAgICAgIDxyZXBsYWNlIGZpbGU9InNlcnZpY2UtYXNzZW1ibHkvc3VuLWh0dHAtYmluZGluZy8ke2VqYi53ZWJzZXJ2aWNlLm5hbWV9U2VydmljZS53c2RsIj4KKyAgICAgICAgICAgIDxyZXBsYWNldG9rZW4+UkVQTEFDRV9XSVRIX0FDVFVBTF9VUkw8L3JlcGxhY2V0b2tlbj4KKyAgICAgICAgICAgIDxyZXBsYWNldmFsdWU+aHR0cDovL2xvY2FsaG9zdDoxMjAwMC9lbnRhcHAvZWpiL0hlbGxvRUpCPC9yZXBsYWNldmFsdWU+CisgICAgICAgIDwvcmVwbGFjZT4KKworICAgICAgICA8IS0tIGdlbmVyYXRlIFdTREwgZm9yIHRoZSBTZXJ2bGV0IHdlYiBzZXJ2aWNlIC0tPgorICAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke2Vudi5TMUFTX0hPTUV9L2Jpbi93c2dlbiI+CisgICAgICAgICAgICA8YXJnIGxpbmU9Ii1jcCIvPgorICAgICAgICAgICAgPGFyZyBsaW5lPSIke2VudC5hcHB9LyR7d2ViLm1vZHVsZX0vYnVpbGQvZWFyLW1vZHVsZS9XRUItSU5GL2NsYXNzZXMiLz4KKyAgICAgICAgICAgIDxhcmcgbGluZT0iJHt3ZWIud2Vic2VydmljZS5jbGFzc30iLz4KKyAgICAgICAgICAgIDxhcmcgbGluZT0iLXdzZGwiLz4KKyAgICAgICAgICAgIDxhcmcgbGluZT0iLWQiLz4KKyAgICAgICAgICAgIDxhcmcgbGluZT0ic2VydmljZS1hc3NlbWJseS9zdW4taHR0cC1iaW5kaW5nIi8+CisgICAgICAgIDwvZXhlYz4KKyAgICAgICAgPCEtLSBSZXBsYWNlIFJFUExBQ0VfV0lUSF9BQ1RVQUxfVVJMIHdpdGggc29tZSB2YWx1ZSAtLT4KKyAgICAgICAgPHJlcGxhY2UgZmlsZT0ic2VydmljZS1hc3NlbWJseS9zdW4taHR0cC1iaW5kaW5nLyR7d2ViLndlYnNlcnZpY2UubmFtZX1TZXJ2aWNlLndzZGwiPgorICAgICAgICAgICAgPHJlcGxhY2V0b2tlbj5SRVBMQUNFX1dJVEhfQUNUVUFMX1VSTDwvcmVwbGFjZXRva2VuPgorICAgICAgICAgICAgPHJlcGxhY2V2YWx1ZT5odHRwOi8vbG9jYWxob3N0OjEyMDAwL2VudGFwcC93ZWIvSGVsbG9FSkI8L3JlcGxhY2V2YWx1ZT4KKyAgICAgICAgPC9yZXBsYWNlPgorCisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkLXNlcnZpY2Vhc3NlbWJseSI+CisgICAgICAgIDxta2RpciBkaXI9ImJ1aWxkIi8+CisKKyAgICAgICAgPCEtLSBCdWlsZCB0aGUgc2VydmljZSB1bml0ICYgYXNzZW1ibHkgamFycyAtLT4KKyAgICAgICAgPGphciBkZXN0ZmlsZT0iYnVpbGQvc3VuLWh0dHAtYmluZGluZy5qYXIiCisgICAgICAgICAgICAgYmFzZWRpcj0ic2VydmljZS1hc3NlbWJseS9zdW4taHR0cC1iaW5kaW5nIgorICAgICAgICAgICAgIGluY2x1ZGVzPSIqLndzZGwsICoueHNkLCBNRVRBLUlORi9qYmkueG1sIgorICAgICAgICAvPgorICAgICAgICA8amFyIGRlc3RmaWxlPSJidWlsZC9FbnRBcHAuemlwIgorICAgICAgICAgICAgIGJhc2VkaXI9ImJ1aWxkIgorICAgICAgICAgICAgIGluY2x1ZGVzPSJzdW4taHR0cC1iaW5kaW5nLmphciIKKyAgICAgICAgLz4KKyAgICAgICAgPGphciBkZXN0ZmlsZT0iYnVpbGQvRW50QXBwLnppcCIKKyAgICAgICAgICAgICB1cGRhdGU9InRydWUiCisgICAgICAgICAgICAgYmFzZWRpcj0iJHtlbnQuYXBwfS9kaXN0IgorICAgICAgICAgICAgIGluY2x1ZGVzPSJFbnRBcHAuZWFyIgorICAgICAgICAvPgorICAgICAgICA8amFyIGRlc3RmaWxlPSJidWlsZC9FbnRBcHAuemlwIgorICAgICAgICAgICAgIGJhc2VkaXI9InNlcnZpY2UtYXNzZW1ibHkiCisgICAgICAgICAgICAgaW5jbHVkZXM9Ik1FVEEtSU5GL2piaS54bWwiCisgICAgICAgICAgICAgdXBkYXRlPSJ0cnVlIgorICAgICAgICAvPgorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3ktc2VydmljZWFzc2VtYmx5Ij4KKyAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHthc2FkbWluLmNvbW1hbmR9Ij4KKyAgICAgICAgICAgIDxhcmcgbGluZT0iZGVwbG95LWpiaS1zZXJ2aWNlLWFzc2VtYmx5Ii8+CisgICAgICAgICAgICA8YXJnIGxpbmU9ImJ1aWxkL0VudEFwcC56aXAiLz4KKyAgICAgICAgPC9leGVjPgorICAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke2FzYWRtaW4uY29tbWFuZH0iPgorICAgICAgICAgICAgPGFyZyBsaW5lPSJzdGFydC1qYmktc2VydmljZS1hc3NlbWJseSIvPgorICAgICAgICAgICAgPGFyZyBsaW5lPSJFbnRBcHAiLz4KKyAgICAgICAgPC9leGVjPgorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveS1zZXJ2aWNlYXNzZW1ibHkiPgorICAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke2FzYWRtaW4uY29tbWFuZH0iPgorICAgICAgICAgICAgPGFyZyBsaW5lPSJzdG9wLWpiaS1zZXJ2aWNlLWFzc2VtYmx5Ii8+CisgICAgICAgICAgICA8YXJnIGxpbmU9IkVudEFwcCIvPgorICAgICAgICA8L2V4ZWM+CisgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7YXNhZG1pbi5jb21tYW5kfSI+CisgICAgICAgICAgICA8YXJnIGxpbmU9InNodXQtZG93bi1qYmktc2VydmljZS1hc3NlbWJseSIvPgorICAgICAgICAgICAgPGFyZyBsaW5lPSJFbnRBcHAiLz4KKyAgICAgICAgPC9leGVjPgorICAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke2FzYWRtaW4uY29tbWFuZH0iPgorICAgICAgICAgICAgPGFyZyBsaW5lPSJ1bmRlcGxveS1qYmktc2VydmljZS1hc3NlbWJseSIvPgorICAgICAgICAgICAgPGFyZyBsaW5lPSJFbnRBcHAiLz4KKyAgICAgICAgPC9leGVjPgorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJyZXN0YXJ0LWVqYm1vZHVsZSI+CisgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7YXNhZG1pbi5jb21tYW5kfSI+CisgICAgICAgICAgICA8YXJnIGxpbmU9ImRpc2FibGUiLz4KKyAgICAgICAgICAgIDxhcmcgbGluZT0iJHtlamIubW9kdWxlfSIvPgorICAgICAgICA8L2V4ZWM+CisgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7YXNhZG1pbi5jb21tYW5kfSI+CisgICAgICAgICAgICA8YXJnIGxpbmU9ImVuYWJsZSIvPgorICAgICAgICAgICAgPGFyZyBsaW5lPSIke2VqYi5tb2R1bGV9Ii8+CisgICAgICAgIDwvZXhlYz4KKyAgICA8L3RhcmdldD4KIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW50ZXJwcmlzZV9hcHAvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW50ZXJwcmlzZV9hcHAvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IDA5M2YwMWUuLmMxMWYzNmIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VudGVycHJpc2VfYXBwL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbnRlcnByaXNlX2FwcC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI1LDMzICsyNSwzMyBAQAogcHVibGljIGNsYXNzIENsaWVudCB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdElkID0gImpiaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbnRlcnByaXNlX2FwcCI7CisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RJZCA9ICJqYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW50ZXJwcmlzZV9hcHAiOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbih0ZXN0SWQpOwotCQlDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwotCQljbGllbnQuaW52b2tlKCk7CisgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7CisgICAgICAgIGNsaWVudC5pbnZva2UoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkodGVzdElkICk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGludm9rZSgpIHsKLQkJdHJ5IHsKKyAgICAgICAgdHJ5IHsKIAotCQkJSGVsbG9FSkJTZXJ2aWNlIGhlbGxvRUpCU2VydmljZSA9IG5ldyBIZWxsb0VKQlNlcnZpY2UoKTsKLQkJCUhlbGxvRUpCIHBvcnQgPSBoZWxsb0VKQlNlcnZpY2UuZ2V0SGVsbG9FSkJQb3J0KCk7Ci0JCQlTdHJpbmcgaGVsbG8gPSBwb3J0LnNheUhlbGxvKCJCaGF2YW5pIik7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIk91dHB1dCA6OiAiICsgaGVsbG8pOworICAgICAgICAgICAgSGVsbG9FSkJTZXJ2aWNlIGhlbGxvRUpCU2VydmljZSA9IG5ldyBIZWxsb0VKQlNlcnZpY2UoKTsKKyAgICAgICAgICAgIEhlbGxvRUpCIHBvcnQgPSBoZWxsb0VKQlNlcnZpY2UuZ2V0SGVsbG9FSkJQb3J0KCk7CisgICAgICAgICAgICBTdHJpbmcgaGVsbG8gPSBwb3J0LnNheUhlbGxvKCJCaGF2YW5pIik7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk91dHB1dCA6OiAiICsgaGVsbG8pOwogCi0JCQlIZWxsb1dlYlNlcnZpY2UgaGVsbG9XZWJTZXJ2aWNlID0gbmV3IEhlbGxvV2ViU2VydmljZSgpOwotCQkJSGVsbG9XZWIgd2ViUG9ydCA9IGhlbGxvV2ViU2VydmljZS5nZXRIZWxsb1dlYlBvcnQoKTsKLQkJCWhlbGxvID0gd2ViUG9ydC5zYXlIZWxsbygiQmhhdmFuaSIpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJPdXRwdXQgOjogIiArIGhlbGxvKTsKKyAgICAgICAgICAgIEhlbGxvV2ViU2VydmljZSBoZWxsb1dlYlNlcnZpY2UgPSBuZXcgSGVsbG9XZWJTZXJ2aWNlKCk7CisgICAgICAgICAgICBIZWxsb1dlYiB3ZWJQb3J0ID0gaGVsbG9XZWJTZXJ2aWNlLmdldEhlbGxvV2ViUG9ydCgpOworICAgICAgICAgICAgaGVsbG8gPSB3ZWJQb3J0LnNheUhlbGxvKCJCaGF2YW5pIik7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk91dHB1dCA6OiAiICsgaGVsbG8pOwogCi0JCQlzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsIHN0YXQuUEFTUyk7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsIHN0YXQuUEFTUyk7CiAKLQkJfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKLQkJCWV4LnByaW50U3RhY2tUcmFjZSgpOwotCSAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LkZBSUwpOwotICAgIAl9Ci0JfQorICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsIHN0YXQuRkFJTCk7CisgICAgICAgIH0KKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbnRlcnByaXNlX2FwcC9zZXJ2aWNlLWFzc2VtYmx5L01FVEEtSU5GL2piaS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbnRlcnByaXNlX2FwcC9zZXJ2aWNlLWFzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKaW5kZXggOTk2MjI4MS4uMmVkZmViOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW50ZXJwcmlzZV9hcHAvc2VydmljZS1hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VudGVycHJpc2VfYXBwL3NlcnZpY2UtYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbApAQCAtMTksMTAgKzE5LDEwIEBACiAKIDwhLS0gamJpLnhtbCBmaWxlIGZvciB0aGUgU09BUCBiaW5kaW5nIGRlcGxveW1lbnRzIGJpbmRpbmcuIC0tPgogPGpiaQotICAgIHZlcnNpb249IjEuMCIgCi0gICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIgCi0gICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCi0JeG1sbnM6dG5zPSJodHRwOi8vZ2xhc3NmaXNoLnNhbXBsZXMuc3VuLmNvbS8iCisgICAgdmVyc2lvbj0iMS4wIgorICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICB4bWxuczp0bnM9Imh0dHA6Ly9nbGFzc2Zpc2guc2FtcGxlcy5zdW4uY29tLyIKICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSAuL2piaS54c2QiPgogICA8c2VydmljZS1hc3NlbWJseT4KICAgICA8aWRlbnRpZmljYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbnRlcnByaXNlX2FwcC9zZXJ2aWNlLWFzc2VtYmx5L3N1bi1odHRwLWJpbmRpbmcvTUVUQS1JTkYvamJpLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VudGVycHJpc2VfYXBwL3NlcnZpY2UtYXNzZW1ibHkvc3VuLWh0dHAtYmluZGluZy9NRVRBLUlORi9qYmkueG1sCmluZGV4IDliZDJhMjEuLjM0NzAwNzcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VudGVycHJpc2VfYXBwL3NlcnZpY2UtYXNzZW1ibHkvc3VuLWh0dHAtYmluZGluZy9NRVRBLUlORi9qYmkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VudGVycHJpc2VfYXBwL3NlcnZpY2UtYXNzZW1ibHkvc3VuLWh0dHAtYmluZGluZy9NRVRBLUlORi9qYmkueG1sCkBAIC0xOCwxOCArMTgsMTggQEAKIC0tPgogCiA8amJpIHZlcnNpb249IjEuMCIKLQkgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCi0JIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiIAotIAkgeG1sbnM6amF2YWVzYj0iaHR0cDovL2phdmEuc3VuLmNvbSIKLQkgeG1sbnM6ZWpiPSJodHRwOi8vZWpiLmVudGFwcC8iCi0JIHhtbG5zOndlYj0iaHR0cDovL3dlYi5lbnRhcHAvIgotCSB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSBqYmkueHNkIj4KLQk8c2VydmljZXMgYmluZGluZy1jb21wb25lbnQ9InRydWUiPgkJCi0JCTxjb25zdW1lcyBpbnRlcmZhY2UtbmFtZT0iZWpiOkhlbGxvRUpCU2VydmljZSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS1uYW1lPSJlamI6SGVsbG9FSkJTZXJ2aWNlIiAKKyAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIKKyAgICAgIHhtbG5zOmphdmFlc2I9Imh0dHA6Ly9qYXZhLnN1bi5jb20iCisgICAgIHhtbG5zOmVqYj0iaHR0cDovL2VqYi5lbnRhcHAvIgorICAgICB4bWxuczp3ZWI9Imh0dHA6Ly93ZWIuZW50YXBwLyIKKyAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgamJpLnhzZCI+CisgICAgPHNlcnZpY2VzIGJpbmRpbmctY29tcG9uZW50PSJ0cnVlIj4KKyAgICAgICAgPGNvbnN1bWVzIGludGVyZmFjZS1uYW1lPSJlamI6SGVsbG9FSkJTZXJ2aWNlIgorICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLW5hbWU9ImVqYjpIZWxsb0VKQlNlcnZpY2UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50LW5hbWU9IkhlbGxvRUpCUG9ydCIvPgotCQk8Y29uc3VtZXMgaW50ZXJmYWNlLW5hbWU9IndlYjpIZWxsb1dlYlNlcnZpY2UiCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtbmFtZT0id2ViOkhlbGxvV2ViU2VydmljZSIgCisgICAgICAgIDxjb25zdW1lcyBpbnRlcmZhY2UtbmFtZT0id2ViOkhlbGxvV2ViU2VydmljZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS1uYW1lPSJ3ZWI6SGVsbG9XZWJTZXJ2aWNlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludC1uYW1lPSJIZWxsb1dlYlBvcnQiLz4KLQk8L3NlcnZpY2VzPgorICAgIDwvc2VydmljZXM+CiA8L2piaT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VudGVycHJpc2VfYXBwL3NlcnZpY2UtYXNzZW1ibHkvc3VuLWphdmFlZS1lbmdpbmUvTUVUQS1JTkYvamJpLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc2VydmljZV91bml0L2VudGVycHJpc2VfYXBwL3NlcnZpY2UtYXNzZW1ibHkvc3VuLWphdmFlZS1lbmdpbmUvTUVUQS1JTkYvamJpLnhtbAppbmRleCA1M2IxMmYwLi44MzhkMzgwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NlcnZpY2VfdW5pdC9lbnRlcnByaXNlX2FwcC9zZXJ2aWNlLWFzc2VtYmx5L3N1bi1qYXZhZWUtZW5naW5lL01FVEEtSU5GL2piaS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zZXJ2aWNlX3VuaXQvZW50ZXJwcmlzZV9hcHAvc2VydmljZS1hc3NlbWJseS9zdW4tamF2YWVlLWVuZ2luZS9NRVRBLUlORi9qYmkueG1sCkBAIC0xOCwxOCArMTgsMTggQEAKIC0tPgogCiA8amJpIHZlcnNpb249IjEuMCIKLQkgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCi0JIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiIAotIAkgeG1sbnM6amF2YWVzYj0iaHR0cDovL2phdmEuc3VuLmNvbSIKLQkgeG1sbnM6ZWpiPSJodHRwOi8vZWpiLmVudGFwcC8iCi0JIHhtbG5zOndlYj0iaHR0cDovL3dlYi5lbnRhcHAvIgotCSB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSBqYmkueHNkIj4KLQk8c2VydmljZXMgYmluZGluZy1jb21wb25lbnQ9ImZhbHNlIj4JCQotCQk8cHJvdmlkZXMgaW50ZXJmYWNlLW5hbWU9ImVqYjpIZWxsb0VKQlNlcnZpY2UiCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtbmFtZT0iZWpiOkhlbGxvRUpCU2VydmljZSIgCisgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiCisgICAgICB4bWxuczpqYXZhZXNiPSJodHRwOi8vamF2YS5zdW4uY29tIgorICAgICB4bWxuczplamI9Imh0dHA6Ly9lamIuZW50YXBwLyIKKyAgICAgeG1sbnM6d2ViPSJodHRwOi8vd2ViLmVudGFwcC8iCisgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIGpiaS54c2QiPgorICAgIDxzZXJ2aWNlcyBiaW5kaW5nLWNvbXBvbmVudD0iZmFsc2UiPgorICAgICAgICA8cHJvdmlkZXMgaW50ZXJmYWNlLW5hbWU9ImVqYjpIZWxsb0VKQlNlcnZpY2UiCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtbmFtZT0iZWpiOkhlbGxvRUpCU2VydmljZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQtbmFtZT0iSGVsbG9FSkJQb3J0Ii8+Ci0JCTxwcm92aWRlcyBpbnRlcmZhY2UtbmFtZT0id2ViOkhlbGxvV2ViU2VydmljZSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS1uYW1lPSJ3ZWI6SGVsbG9XZWJTZXJ2aWNlIiAKKyAgICAgICAgPHByb3ZpZGVzIGludGVyZmFjZS1uYW1lPSJ3ZWI6SGVsbG9XZWJTZXJ2aWNlIgorICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLW5hbWU9IndlYjpIZWxsb1dlYlNlcnZpY2UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50LW5hbWU9IkhlbGxvV2ViUG9ydCIvPgotCTwvc2VydmljZXM+CisgICAgPC9zZXJ2aWNlcz4KIDwvamJpPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zbS9iY19jb25zdW1lcl9zZV9wcm92aWRlci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zbS9iY19jb25zdW1lcl9zZV9wcm92aWRlci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGFjNTk2NDIuLmMyN2MxMjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc20vYmNfY29uc3VtZXJfc2VfcHJvdmlkZXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NtL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0icHJvdmlkZXJfc3UiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9Ii4vZW5kcG9pbnQvd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImpiaS1jb21wb25lbnQtc3UtYXNzZW1ibHkiIHZhbHVlPSJzYW1wbGVfc2VydmljZV9hc3NlbWJseSIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zbS9iY19jb25zdW1lcl9zZV9wcm92aWRlci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NtL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2J1aWxkLnhtbAppbmRleCBkZTk0YzM2Li45YmYwYmVhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NtL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NtL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2J1aWxkLnhtbApAQCAtMjcsMjQgKzI3LDI0IEBACiBdPgogCiA8cHJvamVjdCBuYW1lPSJ3YXJzZXJ2aWNlIiBkZWZhdWx0PSJhbGwiIGJhc2VkaXI9Ii4iPgotICAgIAorCiAgICAgJmNvbW1vblNldHVwOwogICAgICZjb21tb25CdWlsZDsKICAgICAmdGVzdHByb3BlcnRpZXM7CiAgICAgJmpheHdzVG9vbHM7CiAgICAgJmpiaWNvbW1vbjsKICAgICAmamJpcHJvcGVydGllczsKLSAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iY2xlYW4sIGRlcGxveSwgcnVudGVzdCwgdW5kZXBsb3ksIGNsZWFuIi8+IAotICAgIAorICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJjbGVhbiwgZGVwbG95LCBydW50ZXN0LCB1bmRlcGxveSwgY2xlYW4iLz4KKwogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2Jhc2VkaXJ9L3NlcnZpY2VfYXNzZW1ibHkvJHthcHBuYW1lfS53YXIiLz4KICAgICAgICAgPGRlbGV0ZSBmaWxlPSIke2Jhc2VkaXJ9L3NlcnZpY2VfYXNzZW1ibHkvJHtodHRwLXNvYXAtYmMtc3V9LmphciIvPgogICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7YmFzZWRpcn0vc2VydmljZV9hc3NlbWJseS8ke2piaS1jb21wb25lbnQtc3UtYXNzZW1ibHl9LnppcCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZSIgZGVwZW5kcz0iaW5pdC1jb21tb24sIGNvbXBpbGUiPgotICAgICAgICAKKwogICAgICAgICA8IS0tIFN0ZXAxLiBCdWlsZCB0aGUgcHJvdmlkZXIgc2VydmljZSB1bml0IC0tPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJjbGFzc2VzIGRpciA9ICR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9ImFzc2VtYmxlLmRpciA9ICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LndhciIvPgpAQCAtNjMsNyArNjMsNyBAQAogICAgICAgICA8L2phcj4KICAgICAgICAgPCEtLSBDb3B5IHRoZSBKYXZhRUUgYXBwIHRvIHRoZSBzZXJ2aWNlIGFzc2VtYmx5IC0tPgogICAgICAgICA8Y29weSBmaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS53YXIiIHRvZGlyPSIke2Jhc2VkaXJ9L3NlcnZpY2VfYXNzZW1ibHkiLz4KLSAgICAgICAgCisKICAgICAgICAgPCEtLSBTdGVwMi4gQnVpbGQgdGhlIGNvbnN1bWVyIHNlcnZpY2UgdW5pdCAtLT4KICAgICAgICAgPGphciBqYXJmaWxlPSIke2Jhc2VkaXJ9L3NlcnZpY2VfYXNzZW1ibHkvJHtodHRwLXNvYXAtYmMtc3V9LmphciI+CiAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7YmFzZWRpcn0vc2VydmljZV9hc3NlbWJseS9zZXJ2aWNlX3VuaXRzL3NvYXAtYmMtc3UiPgpAQCAtNzMsNjQgKzczLDY0IEBACiAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0iQ2FsY3VsYXRvclNlcnZpY2Vfc2NoZW1hMS54c2QiLz4KICAgICAgICAgICAgIDwvZmlsZXNldD4KICAgICAgICAgPC9qYXI+Ci0gICAgICAgIAorCiAgICAgICAgIDwhLS0gU3RlcDIuIEJ1aWxkIHRoZSBzZXJ2aWNlIGFzc2VtYmx5IC0tPgogICAgICAgICA8emlwIGRlc3RmaWxlPSIke2Jhc2VkaXJ9L3NlcnZpY2VfYXNzZW1ibHkvJHtqYmktY29tcG9uZW50LXN1LWFzc2VtYmx5fS56aXAiIGJhc2VkaXI9IiR7YmFzZWRpcn0vc2VydmljZV9hc3NlbWJseSI+CiAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJNRVRBLUlORi9qYmkueG1sIi8+CiAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIke2h0dHAtc29hcC1iYy1zdX0uamFyIi8+CiAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSIke2phdmFlZS1zZS1zdX0ud2FyIi8+CiAgICAgICAgIDwvemlwPgotICAgICAgICAKKwogICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJpbnN0YWxsIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0JCTxjb3B5IGZpbGU9IiR7ZW52LlMxQVNfSE9NRX0vamJpL3NoYXJlZGxpYnJhcmllcy93c2RsL2luc3RhbGxlci93c2Rsc2wuamFyIiB0b2Rpcj0iJHtzZXJ2aWNlbWl4LWF1dG9kZXBsb3ktZGlyfSIvPgotCQk8ZWNobyBtZXNzYWdlPSJJbnN0YWxsaW5nIFN1bldTRExTaGFyZWRMaWJyYXJ5Li4uIi8+Ci0JCTxzbGVlcCBzZWNvbmRzPSIxMCIvPgotCQk8Y29weSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2piaS9jb21wb25lbnRzL2phdmFlZXNlcnZpY2VlbmdpbmUvaW5zdGFsbGVyL2FwcHNlcnYtamJpc2UuamFyIiB0b2Rpcj0iJHtzZXJ2aWNlbWl4LWF1dG9kZXBsb3ktZGlyfSIvPgotCQk8ZWNobyBtZXNzYWdlPSJJbnN0YWxsaW5nIEphdmEgRUUgU2VydmljZSBFbmdpbmUuLi4iLz4KLQkJPHNsZWVwIHNlY29uZHM9IjE1Ii8+Ci0JPC90YXJnZXQ+ICAgCi0JCi0JPHRhcmdldCBuYW1lPSJ1bmluc3RhbGwiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLQkJPGRlbGV0ZSBmaWxlPSIke3NlcnZpY2VtaXgtYXV0b2RlcGxveS1kaXJ9L2FwcHNlcnYtamJpc2UuamFyIi8+Ci0JCTxlY2hvIG1lc3NhZ2U9IlVuaW5zdGFsbGluZyBKYXZhIEVFIFNlcnZpY2UgRW5naW5lLi4uIi8+Ci0JCTxzbGVlcCBzZWNvbmRzPSIxMCIvPgotCQk8ZGVsZXRlIGZpbGU9IiR7c2VydmljZW1peC1hdXRvZGVwbG95LWRpcn0vd3NkbHNsLmphciIvPgotCQk8ZWNobyBtZXNzYWdlPSJVbmluc3RhbGxpbmcgU3VuV1NETFNoYXJlZExpYnJhcnkuLi4iLz4KLQkJPHNsZWVwIHNlY29uZHM9IjEwIi8+Ci0JPC90YXJnZXQ+ICAgCi0gICAgICAKLQk8dGFyZ2V0IG5hbWU9ImRlcGxveSIgZGVwZW5kcz0iYXNzZW1ibGUiPgotCQk8Y29weSBmaWxlPSIke2Jhc2VkaXJ9L3NlcnZpY2VfYXNzZW1ibHkvJHtqYmktY29tcG9uZW50LXN1LWFzc2VtYmx5fS56aXAiIHRvZGlyPSIke3NlcnZpY2VtaXgtYXV0b2RlcGxveS1kaXJ9Ii8+Ci0JCTxzbGVlcCBzZWNvbmRzPSIxNSIvPgotCTwvdGFyZ2V0PiAgIAorICAgIDx0YXJnZXQgbmFtZT0iaW5zdGFsbCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8Y29weSBmaWxlPSIke2Vudi5TMUFTX0hPTUV9L2piaS9zaGFyZWRsaWJyYXJpZXMvd3NkbC9pbnN0YWxsZXIvd3NkbHNsLmphciIgdG9kaXI9IiR7c2VydmljZW1peC1hdXRvZGVwbG95LWRpcn0iLz4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iSW5zdGFsbGluZyBTdW5XU0RMU2hhcmVkTGlicmFyeS4uLiIvPgorICAgICAgICA8c2xlZXAgc2Vjb25kcz0iMTAiLz4KKyAgICAgICAgPGNvcHkgZmlsZT0iJHtlbnYuUzFBU19IT01FfS9qYmkvY29tcG9uZW50cy9qYXZhZWVzZXJ2aWNlZW5naW5lL2luc3RhbGxlci9hcHBzZXJ2LWpiaXNlLmphciIgdG9kaXI9IiR7c2VydmljZW1peC1hdXRvZGVwbG95LWRpcn0iLz4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iSW5zdGFsbGluZyBKYXZhIEVFIFNlcnZpY2UgRW5naW5lLi4uIi8+CisgICAgICAgIDxzbGVlcCBzZWNvbmRzPSIxNSIvPgorICAgIDwvdGFyZ2V0PgogCi0JPHRhcmdldCBuYW1lPSJ1bmRlcGxveSI+Ci0JCTxkZWxldGUgZmlsZT0iJHtzZXJ2aWNlbWl4LWF1dG9kZXBsb3ktZGlyfS8ke2piaS1jb21wb25lbnQtc3UtYXNzZW1ibHl9LnppcCIvPgotCQk8c2xlZXAgc2Vjb25kcz0iMTUiLz4KLQk8L3RhcmdldD4gICAKKyAgICA8dGFyZ2V0IG5hbWU9InVuaW5zdGFsbCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgorICAgICAgICA8ZGVsZXRlIGZpbGU9IiR7c2VydmljZW1peC1hdXRvZGVwbG95LWRpcn0vYXBwc2Vydi1qYmlzZS5qYXIiLz4KKyAgICAgICAgPGVjaG8gbWVzc2FnZT0iVW5pbnN0YWxsaW5nIEphdmEgRUUgU2VydmljZSBFbmdpbmUuLi4iLz4KKyAgICAgICAgPHNsZWVwIHNlY29uZHM9IjEwIi8+CisgICAgICAgIDxkZWxldGUgZmlsZT0iJHtzZXJ2aWNlbWl4LWF1dG9kZXBsb3ktZGlyfS93c2Rsc2wuamFyIi8+CisgICAgICAgIDxlY2hvIG1lc3NhZ2U9IlVuaW5zdGFsbGluZyBTdW5XU0RMU2hhcmVkTGlicmFyeS4uLiIvPgorICAgICAgICA8c2xlZXAgc2Vjb25kcz0iMTAiLz4KKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiBkZXBlbmRzPSJhc3NlbWJsZSI+CisgICAgICAgIDxjb3B5IGZpbGU9IiR7YmFzZWRpcn0vc2VydmljZV9hc3NlbWJseS8ke2piaS1jb21wb25lbnQtc3UtYXNzZW1ibHl9LnppcCIgdG9kaXI9IiR7c2VydmljZW1peC1hdXRvZGVwbG95LWRpcn0iLz4KKyAgICAgICAgPHNsZWVwIHNlY29uZHM9IjE1Ii8+CisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95Ij4KKyAgICAgICAgPGRlbGV0ZSBmaWxlPSIke3NlcnZpY2VtaXgtYXV0b2RlcGxveS1kaXJ9LyR7amJpLWNvbXBvbmVudC1zdS1hc3NlbWJseX0uemlwIi8+CisgICAgICAgIDxzbGVlcCBzZWNvbmRzPSIxNSIvPgorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jb21tb24iPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVuZHBvaW50Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUtd2ViIiBkZXBlbmRzPSJpbml0LWNvbW1vbiwgY29tcGlsZSI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icGtnLXdhciI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2FyLmNsYXNzZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9Indhci5maWxlIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlLWNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY2xpZW50Ij4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ0ZXN0LXdzZGwtdXJpIiB2YWx1ZT0icHJvdmlkZXIvd2Vic2VydmljZS9DYWxjdWxhdG9yU2VydmljZT9XU0RMIi8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iY2xpZW50LXNyYyIgdmFsdWU9ImNsaWVudCIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bnRlc3QiIGRlcGVuZHM9ImFzc2VtYmxlLWNsaWVudCI+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IlJ1bm5pbmcgU09BUCBCaW5kaW5nIGNsaWVudCIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi1jbGllbnQiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zbS9iY19jb25zdW1lcl9zZV9wcm92aWRlci9jbGllbnQvU09BUFdlYkNvbnN1bWVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NtL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2NsaWVudC9TT0FQV2ViQ29uc3VtZXIuamF2YQppbmRleCBjMmZlZmU4Li5lZjkzZGFiIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NtL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2NsaWVudC9TT0FQV2ViQ29uc3VtZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NtL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2NsaWVudC9TT0FQV2ViQ29uc3VtZXIuamF2YQpAQCAtMjgsNDEgKzI4LDQxIEBACiAgICAgc3RhdGljIENhbGN1bGF0b3JTZXJ2aWNlIHNlcnZpY2U7CiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdElkID0gImpiaS1zZXJ2aWNlZW5naW5lL3NtL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyIjsKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdElkID0gImpiaS1zZXJ2aWNlZW5naW5lL3NtL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyIjsKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKHRlc3RJZCk7Ci0JU09BUFdlYkNvbnN1bWVyIGNsaWVudCA9IG5ldyBTT0FQV2ViQ29uc3VtZXIoKTsKLQljbGllbnQuYWRkVXNpbmdTT0FQQ29uc3VtZXIoKTsKKyAgICBTT0FQV2ViQ29uc3VtZXIgY2xpZW50ID0gbmV3IFNPQVBXZWJDb25zdW1lcigpOworICAgIGNsaWVudC5hZGRVc2luZ1NPQVBDb25zdW1lcigpOwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSh0ZXN0SWQgKTsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgYWRkVXNpbmdTT0FQQ29uc3VtZXIoKSB7Ci0JY29tLmV4YW1wbGUuY2FsY3VsYXRvci5DYWxjdWxhdG9yIHBvcnQ9IG51bGw7Ci0JdHJ5IHsKKyAgICBjb20uZXhhbXBsZS5jYWxjdWxhdG9yLkNhbGN1bGF0b3IgcG9ydD0gbnVsbDsKKyAgICB0cnkgewogCi0JCVN5c3RlbS5vdXQucHJpbnRsbigiIEFmdGVyIGNyZWF0aW5nIENhbGN1bGF0b3JTZXJ2aWNlIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIEFmdGVyIGNyZWF0aW5nIENhbGN1bGF0b3JTZXJ2aWNlIik7CiAKICAgICAgICAgICAgICAgICBwb3J0ID0gc2VydmljZS5nZXRDYWxjdWxhdG9yUG9ydCgpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIiBBZnRlciBnZXR0aW5nIHBvcnQiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgQWZ0ZXIgZ2V0dGluZyBwb3J0Iik7CiAKLQkJLy8gR2V0IFN0dWIKLQkJQmluZGluZ1Byb3ZpZGVyIHN0dWIgPSAoQmluZGluZ1Byb3ZpZGVyKXBvcnQ7Ci0JCVN0cmluZyBlbmRwb2ludFVSSSA9Imh0dHA6Ly9sb2NhbGhvc3Q6ODE5Mi9jYWxjdWxhdG9yZW5kcG9pbnQvIjsKLQkJc3R1Yi5nZXRSZXF1ZXN0Q29udGV4dCgpLnB1dChCaW5kaW5nUHJvdmlkZXIuRU5EUE9JTlRfQUREUkVTU19QUk9QRVJUWSwKLQkJICAgICAgZW5kcG9pbnRVUkkpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIiBBZnRlciBzZXR0aW5nIGVuZHBvaW50IGFkZHJlc3MgVVJJIik7Ci0JICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBVc2luZyBTT0FQIGJpbmRpbmcncyBjb25zdW1lciB0byBhZGQgMSArIDIgPSAiICsgcG9ydC5hZGQoMSwyKSk7Ci0JICAgICAgICBzdGF0LmFkZFN0YXR1cyh0ZXN0SWQsIHN0YXQuUEFTUyk7Ci0JCS8vU3lzdGVtLm91dC5wcmludGxuKCIgTm8gRXhjZXB0aW9uIHRocm93biIpOworICAgICAgICAvLyBHZXQgU3R1YgorICAgICAgICBCaW5kaW5nUHJvdmlkZXIgc3R1YiA9IChCaW5kaW5nUHJvdmlkZXIpcG9ydDsKKyAgICAgICAgU3RyaW5nIGVuZHBvaW50VVJJID0iaHR0cDovL2xvY2FsaG9zdDo4MTkyL2NhbGN1bGF0b3JlbmRwb2ludC8iOworICAgICAgICBzdHViLmdldFJlcXVlc3RDb250ZXh0KCkucHV0KEJpbmRpbmdQcm92aWRlci5FTkRQT0lOVF9BRERSRVNTX1BST1BFUlRZLAorICAgICAgICAgICAgICBlbmRwb2ludFVSSSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIEFmdGVyIHNldHRpbmcgZW5kcG9pbnQgYWRkcmVzcyBVUkkiKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFVzaW5nIFNPQVAgYmluZGluZydzIGNvbnN1bWVyIHRvIGFkZCAxICsgMiA9ICIgKyBwb3J0LmFkZCgxLDIpKTsKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5QQVNTKTsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIiBObyBFeGNlcHRpb24gdGhyb3duIik7CiAKLQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCWlmKGUgaW5zdGFuY2VvZiBqYWthcnRhLnhtbC53cy5zb2FwLlNPQVBGYXVsdEV4Y2VwdGlvbikgCi0gICAgICAgICAgICAgICAgCXN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5QQVNTKTsKLQkJZWxzZSB7Ci0JICAgICAgICAJc3RhdC5hZGRTdGF0dXModGVzdElkLCAgc3RhdC5GQUlMKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiIFNPQVBGYXVsdEV4Y2VwdGlvbiBOb3QgdGhyb3duIik7Ci0JCX0KLQl9CisgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICBpZihlIGluc3RhbmNlb2YgamFrYXJ0YS54bWwud3Muc29hcC5TT0FQRmF1bHRFeGNlcHRpb24pCisgICAgICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5QQVNTKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdElkLCAgc3RhdC5GQUlMKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFNPQVBGYXVsdEV4Y2VwdGlvbiBOb3QgdGhyb3duIik7CisgICAgICAgIH0KKyAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zbS9iY19jb25zdW1lcl9zZV9wcm92aWRlci9lbmRwb2ludC9DYWxjdWxhdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NtL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2VuZHBvaW50L0NhbGN1bGF0b3IuamF2YQppbmRleCBhMjc5YTJiLi5mMWMwZjMxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NtL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2VuZHBvaW50L0NhbGN1bGF0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NtL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2VuZHBvaW50L0NhbGN1bGF0b3IuamF2YQpAQCAtMjUsMTIgKzI1LDEyIEBACiAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZXhhbXBsZS5jb20vQ2FsY3VsYXRvciIKICkKIHB1YmxpYyBjbGFzcyBDYWxjdWxhdG9yIHsKLQlwdWJsaWMgQ2FsY3VsYXRvcigpIHt9CisgICAgcHVibGljIENhbGN1bGF0b3IoKSB7fQogCi0JQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJhZGQiLCBhY3Rpb249InVybjpBZGQiKQotCXB1YmxpYyBpbnQgYWRkKGludCBpLCBpbnQgaikgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJhZGQiLCBhY3Rpb249InVybjpBZGQiKQorICAgIHB1YmxpYyBpbnQgYWRkKGludCBpLCBpbnQgaikgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgICAgICAgICAgaW50IGsgPSBpICtqIDsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaSArICIrIiArIGogKyIgPSAiICsgayk7Ci0JCXJldHVybiBrOwotCX0KKyAgICAgICAgcmV0dXJuIGs7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zbS9iY19jb25zdW1lcl9zZV9wcm92aWRlci9lbmRwb2ludC93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zbS9iY19jb25zdW1lcl9zZV9wcm92aWRlci9lbmRwb2ludC93ZWIueG1sCmluZGV4IDA3ZTE0NzcuLjc5OGM2OWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc20vYmNfY29uc3VtZXJfc2VfcHJvdmlkZXIvZW5kcG9pbnQvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NtL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL2VuZHBvaW50L3dlYi54bWwKQEAgLTE4LDMwICsxOCwzMCBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotCQkJaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CisgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQorICAgICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAKLQk8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIENhbGN1bGF0b3IgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV0FSPC9kaXNwbGF5LW5hbWU+CisgICAgPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBDYWxjdWxhdG9yIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgIDxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldBUjwvZGlzcGxheS1uYW1lPgogCi0JPHNlcnZsZXQ+Ci0JCTxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgQ2FsY3VsYXRvciBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JCTxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KLQkJPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+Ci0JCTxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkNhbGN1bGF0b3I8L3NlcnZsZXQtY2xhc3M+Ci0JCTxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgotCTwvc2VydmxldD4KKyAgICA8c2VydmxldD4KKyAgICAgICAgPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBDYWxjdWxhdG9yIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgorICAgICAgICA8c2VydmxldC1uYW1lPkNhbGN1bGF0b3I8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuQ2FsY3VsYXRvcjwvc2VydmxldC1jbGFzcz4KKyAgICAgICAgPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+CisgICAgPC9zZXJ2bGV0PgogCi0JPHNlcnZsZXQtbWFwcGluZz4KLQkJPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+Ci0JCTx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9DYWxjdWxhdG9yU2VydmljZTwvdXJsLXBhdHRlcm4+Ci0JPC9zZXJ2bGV0LW1hcHBpbmc+CisgICAgPHNlcnZsZXQtbWFwcGluZz4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9DYWxjdWxhdG9yU2VydmljZTwvdXJsLXBhdHRlcm4+CisgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiAKLQk8c2Vzc2lvbi1jb25maWc+Ci0JCTxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KLQk8L3Nlc3Npb24tY29uZmlnPgorICAgIDxzZXNzaW9uLWNvbmZpZz4KKyAgICAgICAgPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgorICAgIDwvc2Vzc2lvbi1jb25maWc+CiAKIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zbS9iY19jb25zdW1lcl9zZV9wcm92aWRlci9zZXJ2aWNlX2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NtL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL3NlcnZpY2VfYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbAppbmRleCAyODdjMDUwLi5mMDdkZjMzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NtL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL3NlcnZpY2VfYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NtL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL3NlcnZpY2VfYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbApAQCAtMTksOSArMTksOSBAQAogCiA8IS0tIGpiaS54bWwgZmlsZSBmb3IgdGhlIFNPQVAgYmluZGluZyBkZXBsb3ltZW50cyBiaW5kaW5nLiAtLT4KIDxqYmkKLSAgICB2ZXJzaW9uPSIxLjAiIAotICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiIAotICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAorICAgIHZlcnNpb249IjEuMCIKKyAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgLi9qYmkueHNkIj4KICAgICA8c2VydmljZS1hc3NlbWJseT4KICAgICAgICAgPGlkZW50aWZpY2F0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zbS9iY19jb25zdW1lcl9zZV9wcm92aWRlci9zZXJ2aWNlX2Fzc2VtYmx5L3NlcnZpY2VfdW5pdHMvamF2YWVlLXNlLXN1L01FVEEtSU5GL2piaS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NtL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL3NlcnZpY2VfYXNzZW1ibHkvc2VydmljZV91bml0cy9qYXZhZWUtc2Utc3UvTUVUQS1JTkYvamJpLnhtbAppbmRleCA5MzA2OTNiLi5kYzI2NjgwIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NtL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL3NlcnZpY2VfYXNzZW1ibHkvc2VydmljZV91bml0cy9qYXZhZWUtc2Utc3UvTUVUQS1JTkYvamJpLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NtL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL3NlcnZpY2VfYXNzZW1ibHkvc2VydmljZV91bml0cy9qYXZhZWUtc2Utc3UvTUVUQS1JTkYvamJpLnhtbApAQCAtMTgsMTQgKzE4LDE0IEBACiAtLT4KIAogPGpiaSB2ZXJzaW9uPSIxLjAiCi0JIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAotCSB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIiAKLQkgeG1sbnM6amF2YWVzYj0iaHR0cDovL2phdmEuc3VuLmNvbSIKLQkgeG1sbnM6dG5zPSJodHRwOi8vZXhhbXBsZS5jb20vQ2FsY3VsYXRvciIKLQkgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgamJpLnhzZCI+Ci0JPHNlcnZpY2VzIGJpbmRpbmctY29tcG9uZW50PSJmYWxzZSI+CQkKLQkgPHByb3ZpZGVzIGludGVyZmFjZS1uYW1lPSJ0bnM6Q2FsY3VsYXRvclNlcnZpY2VJbnRlcmZhY2UiCisgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiCisgICAgIHhtbG5zOmphdmFlc2I9Imh0dHA6Ly9qYXZhLnN1bi5jb20iCisgICAgIHhtbG5zOnRucz0iaHR0cDovL2V4YW1wbGUuY29tL0NhbGN1bGF0b3IiCisgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIGpiaS54c2QiPgorICAgIDxzZXJ2aWNlcyBiaW5kaW5nLWNvbXBvbmVudD0iZmFsc2UiPgorICAgICA8cHJvdmlkZXMgaW50ZXJmYWNlLW5hbWU9InRuczpDYWxjdWxhdG9yU2VydmljZUludGVyZmFjZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS1uYW1lPSJ0bnM6Q2FsY3VsYXRvclNlcnZpY2UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50LW5hbWU9IkNhbGN1bGF0b3JQb3J0Ii8+Ci0JPC9zZXJ2aWNlcz4KKyAgICA8L3NlcnZpY2VzPgogPC9qYmk+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NtL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL3NlcnZpY2VfYXNzZW1ibHkvc2VydmljZV91bml0cy9zb2FwLWJjLXN1L01FVEEtSU5GL2piaS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NtL2JjX2NvbnN1bWVyX3NlX3Byb3ZpZGVyL3NlcnZpY2VfYXNzZW1ibHkvc2VydmljZV91bml0cy9zb2FwLWJjLXN1L01FVEEtSU5GL2piaS54bWwKaW5kZXggN2I0OGZkYS4uZTczYmQzMiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zbS9iY19jb25zdW1lcl9zZV9wcm92aWRlci9zZXJ2aWNlX2Fzc2VtYmx5L3NlcnZpY2VfdW5pdHMvc29hcC1iYy1zdS9NRVRBLUlORi9qYmkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc20vYmNfY29uc3VtZXJfc2VfcHJvdmlkZXIvc2VydmljZV9hc3NlbWJseS9zZXJ2aWNlX3VuaXRzL3NvYXAtYmMtc3UvTUVUQS1JTkYvamJpLnhtbApAQCAtMTgsMTUgKzE4LDE1IEBACiAtLT4KIAogPGpiaSB2ZXJzaW9uPSIxLjAiCi0gICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAotICAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIiAKKyAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIKICAgICAgeG1sbnM6amF2YWVzYj0iaHR0cDovL2phdmEuc3VuLmNvbSIKICAgICAgeG1sbnM6dG5zPSJodHRwOi8vZXhhbXBsZS5jb20vQ2FsY3VsYXRvciIKICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgamJpLnhzZCI+Ci0gICAgPHNlcnZpY2VzIGJpbmRpbmctY29tcG9uZW50PSJ0cnVlIj4JCQorICAgIDxzZXJ2aWNlcyBiaW5kaW5nLWNvbXBvbmVudD0idHJ1ZSI+CiAgICAgICAgIDxjb25zdW1lcyBpbnRlcmZhY2UtbmFtZT0idG5zOkNhbGN1bGF0b3JTZXJ2aWNlIgogICAgIGxpbmstdHlwZT0ic3RhbmRhcmQiCi0gICAgc2VydmljZS1uYW1lPSJ0bnM6Q2FsY3VsYXRvclNlcnZpY2UiIAorICAgIHNlcnZpY2UtbmFtZT0idG5zOkNhbGN1bGF0b3JTZXJ2aWNlIgogICAgIGVuZHBvaW50LW5hbWU9IkNhbGN1bGF0b3JQb3J0Ii8+CiAgICAgICAgIDxqYXZhZXNiOmFydGlmYWN0c3R5cGU+V1NETDExPC9qYXZhZXNiOmFydGlmYWN0c3R5cGU+CiAgICAgPC9zZXJ2aWNlcz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc20vYmNfY29uc3VtZXJfc2VfcHJvdmlkZXIvc2VydmljZV9hc3NlbWJseS9zZXJ2aWNlX3VuaXRzL3NvYXAtYmMtc3UveGJlYW4ueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zbS9iY19jb25zdW1lcl9zZV9wcm92aWRlci9zZXJ2aWNlX2Fzc2VtYmx5L3NlcnZpY2VfdW5pdHMvc29hcC1iYy1zdS94YmVhbi54bWwKaW5kZXggMmYwZWNlMy4uYzY3OTIxMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zbS9iY19jb25zdW1lcl9zZV9wcm92aWRlci9zZXJ2aWNlX2Fzc2VtYmx5L3NlcnZpY2VfdW5pdHMvc29hcC1iYy1zdS94YmVhbi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zbS9iY19jb25zdW1lcl9zZV9wcm92aWRlci9zZXJ2aWNlX2Fzc2VtYmx5L3NlcnZpY2VfdW5pdHMvc29hcC1iYy1zdS94YmVhbi54bWwKQEAgLTI2LDUgKzI2LDUgQEAKICAgICAgICAgICAgIGxvY2F0aW9uVVJJPSJodHRwOi8vbG9jYWxob3N0OjgxOTIvY2FsY3VsYXRvcmVuZHBvaW50IgogICAgICAgICAgICAgZGVmYXVsdE1lcD0iaHR0cDovL3d3dy53My5vcmcvMjAwNC8wOC93c2RsL2luLW91dCIKICAgICAvPgotICAgIAorCiA8L2JlYW5zPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvYnVpbGQueG1sCmluZGV4IGE4MzYwZWMuLjI2MzkyNzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9idWlsZC54bWwKQEAgLTI2LDYgKzI2LDYgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCI+CiAgICAgICAgIDxhbnQgZGlyPSJzZV9jb25zdW1lck5wcm92aWRlciIgdGFyZ2V0PSJhbGwiLz4KICAgICAgICAgPGFudCBkaXI9InNlX3Byb3ZpZGVyIiB0YXJnZXQ9ImFsbCIvPgotCTxhbnQgZGlyPSJzZV9jb25zdW1lciIgdGFyZ2V0PSJhbGwiLz4KKyAgICA8YW50IGRpcj0ic2VfY29uc3VtZXIiIHRhcmdldD0iYWxsIi8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9jb25zdW1lci9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfY29uc3VtZXIvYnVpbGQucHJvcGVydGllcwppbmRleCAwMzAwMTA4Li42MDAzYTdhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9jb25zdW1lci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX2NvbnN1bWVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0iY2FsYy13ZWItY2xpZW50Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSIuL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9Ii4vc3VuLXdlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX2NvbnN1bWVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX2NvbnN1bWVyL2J1aWxkLnhtbAppbmRleCA2NWQ2ZGM1Li5iYjk4ZjBmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9jb25zdW1lci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfY29uc3VtZXIvYnVpbGQueG1sCkBAIC02NCw3ICs2NCw3IEBACiAgICAgICAgICAgICAgICB2YWx1ZT0iLWtlZXAgLWQgJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvY2xhc3NlcyBodHRwOi8vbG9jYWxob3N0OjgwODAvY2FsYy13ZWItY2xpZW50L3dlYnNlcnZpY2UvQ2FsY3VsYXRvclNlcnZpY2U/V1NETCIvPgogICAgIDwvYW50Y2FsbD4KICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL2NsYXNzZXMiCi0gICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2oyZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXJ0Lmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy10b29scy5qYXIiIAorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9qMmVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy1ydC5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtdG9vbHMuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IndlYmNsaWVudC8qKiIvPgogICAgICAgPGNvcHkgZmlsZT0iLi9jbGllbnQtd2ViLnhtbCIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi93ZWIueG1sIi8+CiAgICAgICA8Y29weSBmaWxlPSIuL2NsaWVudC1zdW4td2ViLnhtbCIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi9zdW4td2ViLnhtbCIvPgpAQCAtMTEwLDExICsxMTAsMTEgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY2xpZW50Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bnRlc3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgotICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IiAKLSAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIAorICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJjbGllbnQvKioiLz4KICAgICAgIDx1bmphciBzcmM9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiBkZXN0PSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iY2xpZW50LlRlc3RDbGllbnQiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfY29uc3VtZXIvY2xpZW50LXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9jb25zdW1lci9jbGllbnQtd2ViLnhtbAppbmRleCBlZWI3MzBkLi43OTViMDUyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9jb25zdW1lci9jbGllbnQtd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9jb25zdW1lci9jbGllbnQtd2ViLnhtbApAQCAtMjAsNyArMjAsNyBAQAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLSAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIAorICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogICA8ZGVzY3JpcHRpb24+QSB0ZXN0IGFwcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KICAgPGRpc3BsYXktbmFtZT5XZWJUaWVyPC9kaXNwbGF5LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9jb25zdW1lci9jbGllbnQvVGVzdENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfY29uc3VtZXIvY2xpZW50L1Rlc3RDbGllbnQuamF2YQppbmRleCBlNmFhZmU3Li4yZTVjZTRiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9jb25zdW1lci9jbGllbnQvVGVzdENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX2NvbnN1bWVyL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKQEAgLTMwLDcgKzMwLDcgQEAKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKIAotCXByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0SWQgPSAiamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX2NvbnN1bWVyIjsKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdElkID0gImpiaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9jb25zdW1lciI7CiAKICAgICBwdWJsaWMgYm9vbGVhbiBmb3VuZDEgPSBmYWxzZTsKIApAQCAtNDcsOCArNDcsOCBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgaW50IGNvZGUgPSBpbnZva2VTZXJ2bGV0KHVybCk7CiAgICAgICAgICAgICByZXBvcnQoY29kZSk7Ci0JfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkgICAgZmFpbCgpOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGZhaWwoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNjMsNyArNjMsNyBAQAogICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICBsb2cobGluZSk7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIkV4Y2VwdGlvbiB0aHJvd24gU3VjY2Vzc2Z1bGx5IikgIT0gLTEpCi0JCWZvdW5kMSA9IHRydWU7CisgICAgICAgIGZvdW5kMSA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNvZGU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfY29uc3VtZXIvZW5kcG9pbnQvQ2FsY3VsYXRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfY29uc3VtZXIvZW5kcG9pbnQvQ2FsY3VsYXRvci5qYXZhCmluZGV4IGRjMGI5MGYuLmZjM2IzNTggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX2NvbnN1bWVyL2VuZHBvaW50L0NhbGN1bGF0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9jb25zdW1lci9lbmRwb2ludC9DYWxjdWxhdG9yLmphdmEKQEAgLTI2LDEzICsyNiwxMyBAQAogICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2V4YW1wbGUud2ViLnNlcnZpY2UvQ2FsY3VsYXRvciIKICkKIHB1YmxpYyBjbGFzcyBDYWxjdWxhdG9yIHsKLQlwdWJsaWMgQ2FsY3VsYXRvcigpIHt9CisgICAgcHVibGljIENhbGN1bGF0b3IoKSB7fQogCi0JQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJhZGQiLCBhY3Rpb249InVybjpBZGQiKQotCXB1YmxpYyBpbnQgYWRkKGludCBpLCBpbnQgaikgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJhZGQiLCBhY3Rpb249InVybjpBZGQiKQorICAgIHB1YmxpYyBpbnQgYWRkKGludCBpLCBpbnQgaikgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgICAgICAgICAgaW50IGsgPSBpICtqIDsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaSArICIrIiArIGogKyIgPSAiICsgayk7Ci0JCXRocm93IG5ldyBqYXZhLmxhbmcuRXhjZXB0aW9uKCJUaGlzIGlzIG15IGV4Y2VwdGlvbiIpOyAKLQkJLy9yZXR1cm4gazsKLQl9CisgICAgICAgIHRocm93IG5ldyBqYXZhLmxhbmcuRXhjZXB0aW9uKCJUaGlzIGlzIG15IGV4Y2VwdGlvbiIpOworICAgICAgICAvL3JldHVybiBrOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX2NvbnN1bWVyL3NvYXAtYmluZGluZy1zdS1hbGFza2EvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX2NvbnN1bWVyL3NvYXAtYmluZGluZy1zdS1hbGFza2EvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbAppbmRleCAzYmM4MGI5Li44MGYyZTVkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9jb25zdW1lci9zb2FwLWJpbmRpbmctc3UtYWxhc2thL2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfY29uc3VtZXIvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCkBAIC0xOSw5ICsxOSw5IEBACiAKIDwhLS0gamJpLnhtbCBmaWxlIGZvciB0aGUgU09BUCBiaW5kaW5nIGRlcGxveW1lbnRzIGJpbmRpbmcuIC0tPgogPGpiaQotICAgIHZlcnNpb249IjEuMCIgCi0gICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIgCi0gICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCisgICAgdmVyc2lvbj0iMS4wIgorICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSAuL2piaS54c2QiPgogICA8c2VydmljZS1hc3NlbWJseT4KICAgICA8aWRlbnRpZmljYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9jb25zdW1lci9zb2FwLWJpbmRpbmctc3UtYWxhc2thL3N1L01FVEEtSU5GL2piaS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9jb25zdW1lci9zb2FwLWJpbmRpbmctc3UtYWxhc2thL3N1L01FVEEtSU5GL2piaS54bWwKaW5kZXggMzM5NzRmOS4uNDMzYmQxOSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfY29uc3VtZXIvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9zdS9NRVRBLUlORi9qYmkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX2NvbnN1bWVyL3NvYXAtYmluZGluZy1zdS1hbGFza2Evc3UvTUVUQS1JTkYvamJpLnhtbApAQCAtMTgsMTUgKzE4LDE1IEBACiAtLT4KIAogPGpiaSB2ZXJzaW9uPSIxLjAiCi0JIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAotCSB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIiAKLQkgeG1sbnM6amF2YWVzYj0iaHR0cDovL2phdmEuc3VuLmNvbSIKLQkgeG1sbnM6dG5zPSJodHRwOi8vZXhhbXBsZS53ZWIuc2VydmljZS9DYWxjdWxhdG9yIgotCSB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSBqYmkueHNkIj4KLQk8c2VydmljZXMgYmluZGluZy1jb21wb25lbnQ9InRydWUiPgkJCi0JIDxwcm92aWRlcyBpbnRlcmZhY2UtbmFtZT0idG5zOkNhbGN1bGF0b3JTZXJ2aWNlSW50ZXJmYWNlIgorICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIgorICAgICB4bWxuczpqYXZhZXNiPSJodHRwOi8vamF2YS5zdW4uY29tIgorICAgICB4bWxuczp0bnM9Imh0dHA6Ly9leGFtcGxlLndlYi5zZXJ2aWNlL0NhbGN1bGF0b3IiCisgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIGpiaS54c2QiPgorICAgIDxzZXJ2aWNlcyBiaW5kaW5nLWNvbXBvbmVudD0idHJ1ZSI+CisgICAgIDxwcm92aWRlcyBpbnRlcmZhY2UtbmFtZT0idG5zOkNhbGN1bGF0b3JTZXJ2aWNlSW50ZXJmYWNlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLW5hbWU9InRuczpDYWxjdWxhdG9yU2VydmljZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQtbmFtZT0iQ2FsY3VsYXRvclBvcnQiLz4KICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RzIHhtbG5zPSIiIHJvbGU9InByb3ZpZGVyIiBmaWxlLW5hbWU9ImVuZHBvaW50cy54bWwiIHR5cGU9InhtbCIvPgotCTwvc2VydmljZXM+CisgICAgPC9zZXJ2aWNlcz4KIDwvamJpPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfY29uc3VtZXIvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX2NvbnN1bWVyL3dlYi54bWwKaW5kZXggMDdlMTQ3Ny4uNzk4YzY5YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfY29uc3VtZXIvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9jb25zdW1lci93ZWIueG1sCkBAIC0xOCwzMCArMTgsMzAgQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKLQkJCWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgorICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKKyAgICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogCi0JPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBDYWxjdWxhdG9yIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCTxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldBUjwvZGlzcGxheS1uYW1lPgorICAgIDxkZXNjcmlwdGlvbj5XZWJUaWVyIGZvciB0aGUgQ2FsY3VsYXRvciBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICA8ZGlzcGxheS1uYW1lPkNhbGN1bGF0b3JXQVI8L2Rpc3BsYXktbmFtZT4KIAotCTxzZXJ2bGV0PgotCQk8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIENhbGN1bGF0b3IgV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCQk8ZGlzcGxheS1uYW1lPkNhbGN1bGF0b3JXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+Ci0JCTxzZXJ2bGV0LW5hbWU+Q2FsY3VsYXRvcjwvc2VydmxldC1uYW1lPgotCQk8c2VydmxldC1jbGFzcz5lbmRwb2ludC5DYWxjdWxhdG9yPC9zZXJ2bGV0LWNsYXNzPgotCQk8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KLQk8L3NlcnZsZXQ+CisgICAgPHNlcnZsZXQ+CisgICAgICAgIDxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgQ2FsY3VsYXRvciBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgICAgIDxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkNhbGN1bGF0b3I8L3NlcnZsZXQtY2xhc3M+CisgICAgICAgIDxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgorICAgIDwvc2VydmxldD4KIAotCTxzZXJ2bGV0LW1hcHBpbmc+Ci0JCTxzZXJ2bGV0LW5hbWU+Q2FsY3VsYXRvcjwvc2VydmxldC1uYW1lPgotCQk8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvQ2FsY3VsYXRvclNlcnZpY2U8L3VybC1wYXR0ZXJuPgotCTwvc2VydmxldC1tYXBwaW5nPgorICAgIDxzZXJ2bGV0LW1hcHBpbmc+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+Q2FsY3VsYXRvcjwvc2VydmxldC1uYW1lPgorICAgICAgICA8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvQ2FsY3VsYXRvclNlcnZpY2U8L3VybC1wYXR0ZXJuPgorICAgIDwvc2VydmxldC1tYXBwaW5nPgogCi0JPHNlc3Npb24tY29uZmlnPgotCQk8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+Ci0JPC9zZXNzaW9uLWNvbmZpZz4KKyAgICA8c2Vzc2lvbi1jb25maWc+CisgICAgICAgIDxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KKyAgICA8L3Nlc3Npb24tY29uZmlnPgogCiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX2NvbnN1bWVyL3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9jb25zdW1lci93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGU0OGE0MDguLjk0NjRiMDEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX2NvbnN1bWVyL3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfY29uc3VtZXIvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQpAQCAtMjgsMzcgKzI4LDM3IEBACiAKICAgICAgICBAV2ViU2VydmljZVJlZihuYW1lPSJzdW4td2ViLnNlcnZpY2VyZWYvY2FsY3VsYXRvciIpIENhbGN1bGF0b3JTZXJ2aWNlIHNlcnZpY2U7CiAKLSAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApIAotCQl0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24geworICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkKKyAgICAgICAgdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgICAgZG9Qb3N0KHJlcSwgcmVzcCk7CiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkKICAgICAgICAgICAgICAgdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKLQkgICAgUHJpbnRXcml0ZXIgb3V0PW51bGw7CisgICAgICAgIFByaW50V3JpdGVyIG91dD1udWxsOwogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBTZXJ2aWNlIGlzIDoiICsgc2VydmljZSk7CiAgICAgICAgICAgICAgICAgcmVzcC5zZXRDb250ZW50VHlwZSgidGV4dC9odG1sIik7Ci0gICAgICAgICAgICAJb3V0ID0gcmVzcC5nZXRXcml0ZXIoKTsKKyAgICAgICAgICAgICAgICBvdXQgPSByZXNwLmdldFdyaXRlcigpOwogICAgICAgICAgICAgICAgIENhbGN1bGF0b3IgcG9ydCA9IHNlcnZpY2UuZ2V0Q2FsY3VsYXRvclBvcnQoKTsKICAgICAgICAgICAgICAgICBpbnQgcmV0ID0gcG9ydC5hZGQoMSwgMik7Ci0JCXByaW50RmFpbHVyZShvdXQpOworICAgICAgICBwcmludEZhaWx1cmUob3V0KTsKICAgICAgICAgICAgIH0gY2F0Y2goamF2YS5sYW5nLkV4Y2VwdGlvbiBlKSB7Ci0JCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQlpZihlIGluc3RhbmNlb2Ygc2VydmljZS53ZWIuZXhhbXBsZS5jYWxjdWxhdG9yLkV4Y2VwdGlvbl9FeGNlcHRpb24pIHsKLQkgICAgCQlwcmludFN1Y2Nlc3Mob3V0KTsKLQkJCX0KKyAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgIGlmKGUgaW5zdGFuY2VvZiBzZXJ2aWNlLndlYi5leGFtcGxlLmNhbGN1bGF0b3IuRXhjZXB0aW9uX0V4Y2VwdGlvbikgeworICAgICAgICAgICAgICAgIHByaW50U3VjY2VzcyhvdXQpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBmaW5hbGx5IHsKLQkJaWYob3V0ICE9IG51bGwpIHsKKyAgICAgICAgaWYob3V0ICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgb3V0LmZsdXNoKCk7CiAgICAgICAgICAgICAgICAgICAgIG91dC5jbG9zZSgpOwotCQl9Ci0JICAgIH0KKyAgICAgICAgfQorICAgICAgICB9CiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgcHJpbnRGYWlsdXJlKFByaW50V3JpdGVyIG91dCkgewotCQlpZihvdXQgPT0gbnVsbCkgcmV0dXJuOwotCQlvdXQucHJpbnRsbigiPGh0bWw+Iik7CisgICAgICAgIGlmKG91dCA9PSBudWxsKSByZXR1cm47CisgICAgICAgIG91dC5wcmludGxuKCI8aHRtbD4iKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGhlYWQ+Iik7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjx0aXRsZT5UZXN0U2VydmxldDwvdGl0bGU+Iik7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvaGVhZD4iKTsKQEAgLTcxLDcgKzcxLDcgQEAKICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBwcmludFN1Y2Nlc3MoUHJpbnRXcml0ZXIgb3V0KSB7Ci0JCWlmKG91dCA9PSBudWxsKSByZXR1cm47CisgICAgICAgIGlmKG91dCA9PSBudWxsKSByZXR1cm47CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxodG1sPiIpOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aGVhZD4iKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPHRpdGxlPlRlc3RTZXJ2bGV0PC90aXRsZT4iKTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX2NvbnN1bWVyTnByb3ZpZGVyL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9jb25zdW1lck5wcm92aWRlci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDAzMDAxMDguLjYwMDNhN2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX2NvbnN1bWVyTnByb3ZpZGVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfY29uc3VtZXJOcHJvdmlkZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJjYWxjLXdlYi1jbGllbnQiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9Ii4vd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iLi9zdW4td2ViLnhtbCIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfY29uc3VtZXJOcHJvdmlkZXIvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfY29uc3VtZXJOcHJvdmlkZXIvYnVpbGQueG1sCmluZGV4IDk0MjRlODguLmQyNTFiNzUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX2NvbnN1bWVyTnByb3ZpZGVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9jb25zdW1lck5wcm92aWRlci9idWlsZC54bWwKQEAgLTY0LDcgKzY0LDcgQEAKICAgICAgICAgICAgICAgIHZhbHVlPSIta2VlcCAtZCAke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi9jbGFzc2VzIGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9jYWxjLXdlYi1jbGllbnQvd2Vic2VydmljZS9DYWxjdWxhdG9yU2VydmljZT9XU0RMIi8+CiAgICAgPC9hbnRjYWxsPgogICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvY2xhc3NlcyIKLSAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvajJlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtcnQuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXRvb2xzLmphciIgCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2oyZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXJ0Lmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy10b29scy5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0id2ViY2xpZW50LyoqIi8+CiAgICAgICA8Y29weSBmaWxlPSIuL2NsaWVudC13ZWIueG1sIiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL3dlYi54bWwiLz4KICAgICAgIDxjb3B5IGZpbGU9Ii4vY2xpZW50LXN1bi13ZWIueG1sIiB0b2ZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL3N1bi13ZWIueG1sIi8+CkBAIC0xMTAsMTEgKzExMCwxMSBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LXdhci1jb21tb24iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jbGllbnQiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVudGVzdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+Ci0gICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiIAotICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgCisgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9ImNsaWVudC8qKiIvPgogICAgICAgPHVuamFyIHNyYz0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIGRlc3Q9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgogICAgICAgPGphdmEgY2xhc3NuYW1lPSJjbGllbnQuVGVzdENsaWVudCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9jb25zdW1lck5wcm92aWRlci9jbGllbnQtd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX2NvbnN1bWVyTnByb3ZpZGVyL2NsaWVudC13ZWIueG1sCmluZGV4IGVlYjczMGQuLjc5NWIwNTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX2NvbnN1bWVyTnByb3ZpZGVyL2NsaWVudC13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX2NvbnN1bWVyTnByb3ZpZGVyL2NsaWVudC13ZWIueG1sCkBAIC0yMCw3ICsyMCw3IEBACiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgCisgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAgIDxkZXNjcmlwdGlvbj5BIHRlc3QgYXBwbGljYXRpb248L2Rlc2NyaXB0aW9uPgogICA8ZGlzcGxheS1uYW1lPldlYlRpZXI8L2Rpc3BsYXktbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX2NvbnN1bWVyTnByb3ZpZGVyL2NsaWVudC9UZXN0Q2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9jb25zdW1lck5wcm92aWRlci9jbGllbnQvVGVzdENsaWVudC5qYXZhCmluZGV4IDYxYzZlNDMuLjUyMGYyZWEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX2NvbnN1bWVyTnByb3ZpZGVyL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfY29uc3VtZXJOcHJvdmlkZXIvY2xpZW50L1Rlc3RDbGllbnQuamF2YQpAQCAtMzAsNyArMzAsNyBAQAogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RJZCA9ICJqYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfY29uc3VtZXJOcHJvdmlkZXIiOworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0SWQgPSAiamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX2NvbnN1bWVyTnByb3ZpZGVyIjsKIAogICAgIHB1YmxpYyBib29sZWFuIGZvdW5kMSA9IGZhbHNlOwogCkBAIC00Nyw4ICs0Nyw4IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnQgY29kZSA9IGludm9rZVNlcnZsZXQodXJsKTsKICAgICAgICAgICAgIHJlcG9ydChjb2RlKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCSAgICBmYWlsKCk7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgZmFpbCgpOwogICAgICAgICB9CiAgICAgfQogCkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgICAgICAgIGxvZyhsaW5lKTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiRXhjZXB0aW9uIHRocm93biBTdWNjZXNzZnVsbHkiKSAhPSAtMSkKLQkJZm91bmQxID0gdHJ1ZTsKKyAgICAgICAgZm91bmQxID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY29kZTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9jb25zdW1lck5wcm92aWRlci9lbmRwb2ludC9DYWxjdWxhdG9yLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9jb25zdW1lck5wcm92aWRlci9lbmRwb2ludC9DYWxjdWxhdG9yLmphdmEKaW5kZXggMDk4ZmE5ZC4uNDk4OTRmZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfY29uc3VtZXJOcHJvdmlkZXIvZW5kcG9pbnQvQ2FsY3VsYXRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX2NvbnN1bWVyTnByb3ZpZGVyL2VuZHBvaW50L0NhbGN1bGF0b3IuamF2YQpAQCAtMjYsMjMgKzI2LDIzIEBACiAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZXhhbXBsZS53ZWIuc2VydmljZS9DYWxjdWxhdG9yIgogKQogcHVibGljIGNsYXNzIENhbGN1bGF0b3IgewotCXB1YmxpYyBDYWxjdWxhdG9yKCkge30KKyAgICBwdWJsaWMgQ2FsY3VsYXRvcigpIHt9CiAKLQlAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9ImFkZCIsIGFjdGlvbj0idXJuOkFkZCIpCi0JcHVibGljIGludCBhZGQoaW50IGksIGludCBqKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9ImFkZCIsIGFjdGlvbj0idXJuOkFkZCIpCisgICAgcHVibGljIGludCBhZGQoaW50IGksIGludCBqKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgICAgICAgICBpbnQgayA9IGkgK2ogOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihpICsgIisiICsgaiArIiA9ICIgKyBrKTsKLQkJdGhyb3cgbmV3IGphdmEubGFuZy5FeGNlcHRpb24oIlRoaXMgaXMgbXkgZXhjZXB0aW9uLi4uIik7IAotCQkvL3JldHVybiBrOwotCX0KKyAgICAgICAgdGhyb3cgbmV3IGphdmEubGFuZy5FeGNlcHRpb24oIlRoaXMgaXMgbXkgZXhjZXB0aW9uLi4uIik7CisgICAgICAgIC8vcmV0dXJuIGs7CisgICAgfQogLyoKLQlAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9InN1YnRyYWN0IiwgYWN0aW9uPSJ1cm46U3VidHJhY3QiKQotCUBPbmV3YXkKLQlwdWJsaWMgdm9pZCBzdWJ0cmFjdChpbnQgaSwgaW50IGopIHsKKyAgICBAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9InN1YnRyYWN0IiwgYWN0aW9uPSJ1cm46U3VidHJhY3QiKQorICAgIEBPbmV3YXkKKyAgICBwdWJsaWMgdm9pZCBzdWJ0cmFjdChpbnQgaSwgaW50IGopIHsKICAgICAgICAgICAgICAgICBpbnQgayA9IGkgLWogOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihpICsgIi0iICsgaiArIiA9ICIgKyBrKTsKLQkJaWYoaSA9PSAxMDEpCi0JCQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVGhpcyBpcyBteSBleGNlcHRpb24gaW4gc3VidHJhY3QgLi4uIik7Ci0JfQorICAgICAgICBpZihpID09IDEwMSkKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJUaGlzIGlzIG15IGV4Y2VwdGlvbiBpbiBzdWJ0cmFjdCAuLi4iKTsKKyAgICB9CiAqLwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfY29uc3VtZXJOcHJvdmlkZXIvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfY29uc3VtZXJOcHJvdmlkZXIvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCmluZGV4IDNiYzgwYjkuLjgwZjJlNWQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX2NvbnN1bWVyTnByb3ZpZGVyL3NvYXAtYmluZGluZy1zdS1hbGFza2EvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9jb25zdW1lck5wcm92aWRlci9zb2FwLWJpbmRpbmctc3UtYWxhc2thL2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKQEAgLTE5LDkgKzE5LDkgQEAKIAogPCEtLSBqYmkueG1sIGZpbGUgZm9yIHRoZSBTT0FQIGJpbmRpbmcgZGVwbG95bWVudHMgYmluZGluZy4gLS0+CiA8amJpCi0gICAgdmVyc2lvbj0iMS4wIiAKLSAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIiAKLSAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKKyAgICB2ZXJzaW9uPSIxLjAiCisgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIC4vamJpLnhzZCI+CiAgIDxzZXJ2aWNlLWFzc2VtYmx5PgogICAgIDxpZGVudGlmaWNhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX2NvbnN1bWVyTnByb3ZpZGVyL3NvYXAtYmluZGluZy1zdS1hbGFza2Evc3UvTUVUQS1JTkYvamJpLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX2NvbnN1bWVyTnByb3ZpZGVyL3NvYXAtYmluZGluZy1zdS1hbGFza2Evc3UvTUVUQS1JTkYvamJpLnhtbAppbmRleCAzMzk3NGY5Li40MzNiZDE5IDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9jb25zdW1lck5wcm92aWRlci9zb2FwLWJpbmRpbmctc3UtYWxhc2thL3N1L01FVEEtSU5GL2piaS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfY29uc3VtZXJOcHJvdmlkZXIvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9zdS9NRVRBLUlORi9qYmkueG1sCkBAIC0xOCwxNSArMTgsMTUgQEAKIC0tPgogCiA8amJpIHZlcnNpb249IjEuMCIKLQkgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCi0JIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiIAotCSB4bWxuczpqYXZhZXNiPSJodHRwOi8vamF2YS5zdW4uY29tIgotCSB4bWxuczp0bnM9Imh0dHA6Ly9leGFtcGxlLndlYi5zZXJ2aWNlL0NhbGN1bGF0b3IiCi0JIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIGpiaS54c2QiPgotCTxzZXJ2aWNlcyBiaW5kaW5nLWNvbXBvbmVudD0idHJ1ZSI+CQkKLQkgPHByb3ZpZGVzIGludGVyZmFjZS1uYW1lPSJ0bnM6Q2FsY3VsYXRvclNlcnZpY2VJbnRlcmZhY2UiCisgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiCisgICAgIHhtbG5zOmphdmFlc2I9Imh0dHA6Ly9qYXZhLnN1bi5jb20iCisgICAgIHhtbG5zOnRucz0iaHR0cDovL2V4YW1wbGUud2ViLnNlcnZpY2UvQ2FsY3VsYXRvciIKKyAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgamJpLnhzZCI+CisgICAgPHNlcnZpY2VzIGJpbmRpbmctY29tcG9uZW50PSJ0cnVlIj4KKyAgICAgPHByb3ZpZGVzIGludGVyZmFjZS1uYW1lPSJ0bnM6Q2FsY3VsYXRvclNlcnZpY2VJbnRlcmZhY2UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtbmFtZT0idG5zOkNhbGN1bGF0b3JTZXJ2aWNlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludC1uYW1lPSJDYWxjdWxhdG9yUG9ydCIvPgogICAgICAgICAgICAgICAgIDxhcnRpZmFjdHMgeG1sbnM9IiIgcm9sZT0icHJvdmlkZXIiIGZpbGUtbmFtZT0iZW5kcG9pbnRzLnhtbCIgdHlwZT0ieG1sIi8+Ci0JPC9zZXJ2aWNlcz4KKyAgICA8L3NlcnZpY2VzPgogPC9qYmk+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9jb25zdW1lck5wcm92aWRlci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfY29uc3VtZXJOcHJvdmlkZXIvd2ViLnhtbAppbmRleCAwN2UxNDc3Li43OThjNjliIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9jb25zdW1lck5wcm92aWRlci93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX2NvbnN1bWVyTnByb3ZpZGVyL3dlYi54bWwKQEAgLTE4LDMwICsxOCwzMCBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotCQkJaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CisgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQorICAgICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAKLQk8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIENhbGN1bGF0b3IgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV0FSPC9kaXNwbGF5LW5hbWU+CisgICAgPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBDYWxjdWxhdG9yIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgIDxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldBUjwvZGlzcGxheS1uYW1lPgogCi0JPHNlcnZsZXQ+Ci0JCTxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgQ2FsY3VsYXRvciBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JCTxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KLQkJPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+Ci0JCTxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkNhbGN1bGF0b3I8L3NlcnZsZXQtY2xhc3M+Ci0JCTxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgotCTwvc2VydmxldD4KKyAgICA8c2VydmxldD4KKyAgICAgICAgPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBDYWxjdWxhdG9yIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgorICAgICAgICA8c2VydmxldC1uYW1lPkNhbGN1bGF0b3I8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuQ2FsY3VsYXRvcjwvc2VydmxldC1jbGFzcz4KKyAgICAgICAgPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+CisgICAgPC9zZXJ2bGV0PgogCi0JPHNlcnZsZXQtbWFwcGluZz4KLQkJPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+Ci0JCTx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9DYWxjdWxhdG9yU2VydmljZTwvdXJsLXBhdHRlcm4+Ci0JPC9zZXJ2bGV0LW1hcHBpbmc+CisgICAgPHNlcnZsZXQtbWFwcGluZz4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9DYWxjdWxhdG9yU2VydmljZTwvdXJsLXBhdHRlcm4+CisgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiAKLQk8c2Vzc2lvbi1jb25maWc+Ci0JCTxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KLQk8L3Nlc3Npb24tY29uZmlnPgorICAgIDxzZXNzaW9uLWNvbmZpZz4KKyAgICAgICAgPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgorICAgIDwvc2Vzc2lvbi1jb25maWc+CiAKIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfY29uc3VtZXJOcHJvdmlkZXIvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX2NvbnN1bWVyTnByb3ZpZGVyL3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggZDE4NWY2Zi4uMmY3YjQ3OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfY29uc3VtZXJOcHJvdmlkZXIvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9jb25zdW1lck5wcm92aWRlci93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yOCwzNSArMjgsMzUgQEAKIAogICAgICAgIEBXZWJTZXJ2aWNlUmVmKG5hbWU9InN1bi13ZWIuc2VydmljZXJlZi9jYWxjdWxhdG9yIikgQ2FsY3VsYXRvclNlcnZpY2Ugc2VydmljZTsKIAotICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkgCi0JCXRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CisgICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQorICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICAgICBkb1Bvc3QocmVxLCByZXNwKTsKICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQogICAgICAgICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewotCSAgICBQcmludFdyaXRlciBvdXQ9bnVsbDsKKyAgICAgICAgUHJpbnRXcml0ZXIgb3V0PW51bGw7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFNlcnZpY2UgaXMgOiIgKyBzZXJ2aWNlKTsKICAgICAgICAgICAgICAgICByZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKLSAgICAgICAgICAgIAlvdXQgPSByZXNwLmdldFdyaXRlcigpOworICAgICAgICAgICAgICAgIG91dCA9IHJlc3AuZ2V0V3JpdGVyKCk7CiAgICAgICAgICAgICAgICAgQ2FsY3VsYXRvciBwb3J0ID0gc2VydmljZS5nZXRDYWxjdWxhdG9yUG9ydCgpOwogICAgICAgICAgICAgICAgIGludCByZXQgPSBwb3J0LmFkZCgxLCAyKTsKLQkJcHJpbnRGYWlsdXJlKG91dCk7CisgICAgICAgIHByaW50RmFpbHVyZShvdXQpOwogICAgICAgICAgICAgfSBjYXRjaChqYXZhLmxhbmcuRXhjZXB0aW9uIGUpIHsKLQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkgICAgCXByaW50U3VjY2VzcyhvdXQpOworICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAgICAgcHJpbnRTdWNjZXNzKG91dCk7CiAgICAgICAgICAgICB9IGZpbmFsbHkgewotCQlpZihvdXQgIT0gbnVsbCkgeworICAgICAgICBpZihvdXQgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICBvdXQuZmx1c2goKTsKICAgICAgICAgICAgICAgICAgICAgb3V0LmNsb3NlKCk7Ci0JCX0KLQkgICAgfQorICAgICAgICB9CisgICAgICAgIH0KICAgICAgICB9CiAKICAgICAgICBwdWJsaWMgdm9pZCBwcmludEZhaWx1cmUoUHJpbnRXcml0ZXIgb3V0KSB7Ci0JCWlmKG91dCA9PSBudWxsKSByZXR1cm47Ci0JCW91dC5wcmludGxuKCI8aHRtbD4iKTsKKyAgICAgICAgaWYob3V0ID09IG51bGwpIHJldHVybjsKKyAgICAgICAgb3V0LnByaW50bG4oIjxodG1sPiIpOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aGVhZD4iKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPHRpdGxlPlRlc3RTZXJ2bGV0PC90aXRsZT4iKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9oZWFkPiIpOwpAQCAtNjksNyArNjksNyBAQAogICAgICAgIH0KIAogICAgICAgIHB1YmxpYyB2b2lkIHByaW50U3VjY2VzcyhQcmludFdyaXRlciBvdXQpIHsKLQkJaWYob3V0ID09IG51bGwpIHJldHVybjsKKyAgICAgICAgaWYob3V0ID09IG51bGwpIHJldHVybjsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGh0bWw+Iik7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjxoZWFkPiIpOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8dGl0bGU+VGVzdFNlcnZsZXQ8L3RpdGxlPiIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfcHJvdmlkZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX3Byb3ZpZGVyL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggNjg5ODdiZC4uNzIwMGYzMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfcHJvdmlkZXIvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9wcm92aWRlci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImNhbGN1bGF0b3JzZXJ2aWNlIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSIuL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJqYmktY29tcG9uZW50LXN1LWFzc2VtYmx5IiB2YWx1ZT0id2ViX2NhbGN1bGF0b3JfY29uc3VtZXJfYXNzZW1ibHkiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX3Byb3ZpZGVyL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX3Byb3ZpZGVyL2J1aWxkLnhtbAppbmRleCA4ZmU1NjBiLi4yNDJhYmYzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9wcm92aWRlci9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfcHJvdmlkZXIvYnVpbGQueG1sCkBAIC0zNCw3ICszNCw3IEBACiAgICAgJmpheHdzVG9vbHM7CiAgICAgJmpiaWNvbW1vbjsKICAgICAmamJpcHJvcGVydGllczsKLSAgICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0iY2xlYW4sIHNldHVwLCBydW50ZXN0LHVuZGVwbG95Ii8+IAorICAgIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXBlbmRzPSJjbGVhbiwgc2V0dXAsIHJ1bnRlc3QsdW5kZXBsb3kiLz4KIAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY2xlYW4tY29tbW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9wcm92aWRlci9jbGllbnQvU09BUFdlYkNvbnN1bWVyLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9wcm92aWRlci9jbGllbnQvU09BUFdlYkNvbnN1bWVyLmphdmEKaW5kZXggYzc1MDYwZC4uYjQzM2UzZCAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfcHJvdmlkZXIvY2xpZW50L1NPQVBXZWJDb25zdW1lci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX3Byb3ZpZGVyL2NsaWVudC9TT0FQV2ViQ29uc3VtZXIuamF2YQpAQCAtMjgsNTMgKzI4LDUzIEBACiAgICAgc3RhdGljIENhbGN1bGF0b3JTZXJ2aWNlIHNlcnZpY2U7CiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdElkID0gImpiaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9wcm92aWRlciI7CisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RJZCA9ICJqYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfcHJvdmlkZXIiOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbih0ZXN0SWQpOwotCVNPQVBXZWJDb25zdW1lciBjbGllbnQgPSBuZXcgU09BUFdlYkNvbnN1bWVyKCk7Ci0JY2xpZW50LmFkZFVzaW5nU09BUENvbnN1bWVyKCk7CisgICAgU09BUFdlYkNvbnN1bWVyIGNsaWVudCA9IG5ldyBTT0FQV2ViQ29uc3VtZXIoKTsKKyAgICBjbGllbnQuYWRkVXNpbmdTT0FQQ29uc3VtZXIoKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkodGVzdElkICk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGFkZFVzaW5nU09BUENvbnN1bWVyKCkgewotCWNvbS5leGFtcGxlLmNhbGN1bGF0b3IuQ2FsY3VsYXRvciBwb3J0PSBudWxsOworICAgIGNvbS5leGFtcGxlLmNhbGN1bGF0b3IuQ2FsY3VsYXRvciBwb3J0PSBudWxsOwogCiAgICAgICAgICAgICAgICAgcG9ydCA9IHNlcnZpY2UuZ2V0Q2FsY3VsYXRvclBvcnQoKTsKIAotCQkvLyBHZXQgU3R1YgotCQlCaW5kaW5nUHJvdmlkZXIgc3R1YiA9IChCaW5kaW5nUHJvdmlkZXIpcG9ydDsKLQkJU3RyaW5nIGVuZHBvaW50VVJJID0iaHR0cDovL2xvY2FsaG9zdDoxMjAxMS9jYWxjdWxhdG9yZW5kcG9pbnQiOwotCQlzdHViLmdldFJlcXVlc3RDb250ZXh0KCkucHV0KEJpbmRpbmdQcm92aWRlci5FTkRQT0lOVF9BRERSRVNTX1BST1BFUlRZLAotCQkgICAgICBlbmRwb2ludFVSSSk7CisgICAgICAgIC8vIEdldCBTdHViCisgICAgICAgIEJpbmRpbmdQcm92aWRlciBzdHViID0gKEJpbmRpbmdQcm92aWRlcilwb3J0OworICAgICAgICBTdHJpbmcgZW5kcG9pbnRVUkkgPSJodHRwOi8vbG9jYWxob3N0OjEyMDExL2NhbGN1bGF0b3JlbmRwb2ludCI7CisgICAgICAgIHN0dWIuZ2V0UmVxdWVzdENvbnRleHQoKS5wdXQoQmluZGluZ1Byb3ZpZGVyLkVORFBPSU5UX0FERFJFU1NfUFJPUEVSVFksCisgICAgICAgICAgICAgIGVuZHBvaW50VVJJKTsKIAotCQlTdHJpbmcgZmFpbGVkTXNnID0gbnVsbDsKKyAgICAgICAgU3RyaW5nIGZhaWxlZE1zZyA9IG51bGw7CiAKLQkJdHJ5IHsKLQkgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG5JbnZva2luZyB0aHJvd1J1bnRpbWVFeGNlcHRpb24iKTsKLQkJICAgCXBvcnQudGhyb3dSdW50aW1lRXhjZXB0aW9uKCJiaGF2YW5pIik7Ci0JCX0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oZXgpOwotCQkJaWYoIShleCBpbnN0YW5jZW9mIFJ1bnRpbWVFeGNlcHRpb24pIHx8IAotCQkJCQkhKGV4LmdldE1lc3NhZ2UoKS5lcXVhbHMoIkNhbGN1bGF0b3IgOjogVGhyZXcgUnVudGltZSBFeGNlcHRpb24iKSkpIHsKLQkJCQlmYWlsZWRNc2cgPSAicG9ydC50aHJvd1J1bnRpbWVFeGNlcHRpb24oKSBkaWQgbm90IHJlY2VpdmUgUnVudGltZUV4Y2VwdGlvbiAnQ2FsY3VsYXRvciA6OiBUaHJldyBSdW50aW1lIEV4Y2VwdGlvbiciOwotCQkJfQotCQl9CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuSW52b2tpbmcgdGhyb3dSdW50aW1lRXhjZXB0aW9uIik7CisgICAgICAgICAgICAgICBwb3J0LnRocm93UnVudGltZUV4Y2VwdGlvbigiYmhhdmFuaSIpOworICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGV4KTsKKyAgICAgICAgICAgIGlmKCEoZXggaW5zdGFuY2VvZiBSdW50aW1lRXhjZXB0aW9uKSB8fAorICAgICAgICAgICAgICAgICAgICAhKGV4LmdldE1lc3NhZ2UoKS5lcXVhbHMoIkNhbGN1bGF0b3IgOjogVGhyZXcgUnVudGltZSBFeGNlcHRpb24iKSkpIHsKKyAgICAgICAgICAgICAgICBmYWlsZWRNc2cgPSAicG9ydC50aHJvd1J1bnRpbWVFeGNlcHRpb24oKSBkaWQgbm90IHJlY2VpdmUgUnVudGltZUV4Y2VwdGlvbiAnQ2FsY3VsYXRvciA6OiBUaHJldyBSdW50aW1lIEV4Y2VwdGlvbiciOworICAgICAgICAgICAgfQorICAgICAgICB9CiAKLQkJdHJ5IHsKLQkgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG5JbnZva2luZyB0aHJvd0FwcGxpY2F0aW9uRXhjZXB0aW9uIik7Ci0JCSAgIAlwb3J0LnRocm93QXBwbGljYXRpb25FeGNlcHRpb24oImJoYXZhbmkiKTsKLQkJfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihleCk7Ci0JCQlpZighKGV4IGluc3RhbmNlb2YgY29tLmV4YW1wbGUuY2FsY3VsYXRvci5FeGNlcHRpb25fRXhjZXB0aW9uKSkgewotCQkJCWZhaWxlZE1zZyA9ICJwb3J0LnRocm93QXBwbGljYXRpb25FeGNlcHRpb24oKSBkaWQgbm90IHRocm93IEFwcGxpY2F0aW9uRXhjZXB0aW9uIjsKLQkJCX0KLQkJfQorICAgICAgICB0cnkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcbkludm9raW5nIHRocm93QXBwbGljYXRpb25FeGNlcHRpb24iKTsKKyAgICAgICAgICAgICAgIHBvcnQudGhyb3dBcHBsaWNhdGlvbkV4Y2VwdGlvbigiYmhhdmFuaSIpOworICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGV4KTsKKyAgICAgICAgICAgIGlmKCEoZXggaW5zdGFuY2VvZiBjb20uZXhhbXBsZS5jYWxjdWxhdG9yLkV4Y2VwdGlvbl9FeGNlcHRpb24pKSB7CisgICAgICAgICAgICAgICAgZmFpbGVkTXNnID0gInBvcnQudGhyb3dBcHBsaWNhdGlvbkV4Y2VwdGlvbigpIGRpZCBub3QgdGhyb3cgQXBwbGljYXRpb25FeGNlcHRpb24iOworICAgICAgICAgICAgfQorICAgICAgICB9CiAKLQkJaWYoZmFpbGVkTXNnICE9IG51bGwpIHsKLQkgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5GQUlMKTsKLQkJfSBlbHNlIHsKLSAgICAgICAgCXN0YXQuYWRkU3RhdHVzKHRlc3RJZCwgc3RhdC5QQVNTKTsKLQkJfQorICAgICAgICBpZihmYWlsZWRNc2cgIT0gbnVsbCkgeworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LkZBSUwpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdElkLCBzdGF0LlBBU1MpOworICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfcHJvdmlkZXIvZW5kcG9pbnQvQ2FsY3VsYXRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfcHJvdmlkZXIvZW5kcG9pbnQvQ2FsY3VsYXRvci5qYXZhCmluZGV4IDZkODc2MzQuLjEwMTkwY2EgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX3Byb3ZpZGVyL2VuZHBvaW50L0NhbGN1bGF0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9wcm92aWRlci9lbmRwb2ludC9DYWxjdWxhdG9yLmphdmEKQEAgLTI4LDcgKzI4LDcgQEAKIHB1YmxpYyBjbGFzcyBDYWxjdWxhdG9yIHsKICAgICBwdWJsaWMgQ2FsY3VsYXRvcigpIHt9CiAKLSAgICAKKwogICAgIEBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0idGhyb3dSdW50aW1lRXhjZXB0aW9uIiwgYWN0aW9uPSJ1cm46VGhyb3dSdW50aW1lRXhjZXB0aW9uIikKICAgICBwdWJsaWMgU3RyaW5nIHRocm93UnVudGltZUV4Y2VwdGlvbihTdHJpbmcgbmFtZSkgewogICAgICAgICBTdHJpbmcgZXhjZXB0aW9uTXNnID0gIkNhbGN1bGF0b3IgOjogVGhyZXcgUnVudGltZSBFeGNlcHRpb24iOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfcHJvdmlkZXIvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfcHJvdmlkZXIvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCmluZGV4IGI0ZGE5ODYuLjQzMzc4ZTIgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX3Byb3ZpZGVyL3NvYXAtYmluZGluZy1zdS1hbGFza2EvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9wcm92aWRlci9zb2FwLWJpbmRpbmctc3UtYWxhc2thL2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKQEAgLTE5LDkgKzE5LDkgQEAKIAogPCEtLSBqYmkueG1sIGZpbGUgZm9yIHRoZSBTT0FQIGJpbmRpbmcgZGVwbG95bWVudHMgYmluZGluZy4gLS0+CiA8amJpCi0gICAgdmVyc2lvbj0iMS4wIiAKLSAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIiAKLSAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKKyAgICB2ZXJzaW9uPSIxLjAiCisgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIC4vamJpLnhzZCI+CiAgIDxzZXJ2aWNlLWFzc2VtYmx5PgogICAgIDxpZGVudGlmaWNhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX3Byb3ZpZGVyL3NvYXAtYmluZGluZy1zdS1hbGFza2Evc3UvTUVUQS1JTkYvamJpLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX3Byb3ZpZGVyL3NvYXAtYmluZGluZy1zdS1hbGFza2Evc3UvTUVUQS1JTkYvamJpLnhtbAppbmRleCAyZDFlN2U4Li42NWNhOTZmIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9wcm92aWRlci9zb2FwLWJpbmRpbmctc3UtYWxhc2thL3N1L01FVEEtSU5GL2piaS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfcHJvdmlkZXIvc29hcC1iaW5kaW5nLXN1LWFsYXNrYS9zdS9NRVRBLUlORi9qYmkueG1sCkBAIC0xOCwxNiArMTgsMTYgQEAKIC0tPgogCiA8amJpIHZlcnNpb249IjEuMCIKLQkgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCi0JIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiIAotIAkgeG1sbnM6amF2YWVzYj0iaHR0cDovL2phdmEuc3VuLmNvbSIKLQkgeG1sbnM6dG5zPSJodHRwOi8vZXhhbXBsZS5jb20vQ2FsY3VsYXRvciIKLQkgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgamJpLnhzZCI+Ci0JPHNlcnZpY2VzIGJpbmRpbmctY29tcG9uZW50PSJ0cnVlIj4JCQotCQk8Y29uc3VtZXMgaW50ZXJmYWNlLW5hbWU9InRuczpDYWxjdWxhdG9yU2VydmljZSIKLQkJCSAgbGluay10eXBlPSJzdGFuZGFyZCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS1uYW1lPSJ0bnM6Q2FsY3VsYXRvclNlcnZpY2UiIAorICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamJpIgorICAgICAgeG1sbnM6amF2YWVzYj0iaHR0cDovL2phdmEuc3VuLmNvbSIKKyAgICAgeG1sbnM6dG5zPSJodHRwOi8vZXhhbXBsZS5jb20vQ2FsY3VsYXRvciIKKyAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkgamJpLnhzZCI+CisgICAgPHNlcnZpY2VzIGJpbmRpbmctY29tcG9uZW50PSJ0cnVlIj4KKyAgICAgICAgPGNvbnN1bWVzIGludGVyZmFjZS1uYW1lPSJ0bnM6Q2FsY3VsYXRvclNlcnZpY2UiCisgICAgICAgICAgICAgIGxpbmstdHlwZT0ic3RhbmRhcmQiCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtbmFtZT0idG5zOkNhbGN1bGF0b3JTZXJ2aWNlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludC1uYW1lPSJDYWxjdWxhdG9yUG9ydCIvPgogICAgICAgICA8amF2YWVzYjphcnRpZmFjdHN0eXBlPldTREwxMTwvamF2YWVzYjphcnRpZmFjdHN0eXBlPgotCTwvc2VydmljZXM+CisgICAgPC9zZXJ2aWNlcz4KIDwvamJpPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfcHJvdmlkZXIvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcGZhdWx0L3NlX3Byb3ZpZGVyL3dlYi54bWwKaW5kZXggMDdlMTQ3Ny4uNzk4YzY5YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2FwZmF1bHQvc2VfcHJvdmlkZXIvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBmYXVsdC9zZV9wcm92aWRlci93ZWIueG1sCkBAIC0xOCwzMCArMTgsMzAgQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKLQkJCWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgorICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKKyAgICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogCi0JPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBDYWxjdWxhdG9yIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCTxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldBUjwvZGlzcGxheS1uYW1lPgorICAgIDxkZXNjcmlwdGlvbj5XZWJUaWVyIGZvciB0aGUgQ2FsY3VsYXRvciBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICA8ZGlzcGxheS1uYW1lPkNhbGN1bGF0b3JXQVI8L2Rpc3BsYXktbmFtZT4KIAotCTxzZXJ2bGV0PgotCQk8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIENhbGN1bGF0b3IgV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCQk8ZGlzcGxheS1uYW1lPkNhbGN1bGF0b3JXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+Ci0JCTxzZXJ2bGV0LW5hbWU+Q2FsY3VsYXRvcjwvc2VydmxldC1uYW1lPgotCQk8c2VydmxldC1jbGFzcz5lbmRwb2ludC5DYWxjdWxhdG9yPC9zZXJ2bGV0LWNsYXNzPgotCQk8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KLQk8L3NlcnZsZXQ+CisgICAgPHNlcnZsZXQ+CisgICAgICAgIDxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgQ2FsY3VsYXRvciBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgICAgIDxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkNhbGN1bGF0b3I8L3NlcnZsZXQtY2xhc3M+CisgICAgICAgIDxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgorICAgIDwvc2VydmxldD4KIAotCTxzZXJ2bGV0LW1hcHBpbmc+Ci0JCTxzZXJ2bGV0LW5hbWU+Q2FsY3VsYXRvcjwvc2VydmxldC1uYW1lPgotCQk8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvQ2FsY3VsYXRvclNlcnZpY2U8L3VybC1wYXR0ZXJuPgotCTwvc2VydmxldC1tYXBwaW5nPgorICAgIDxzZXJ2bGV0LW1hcHBpbmc+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+Q2FsY3VsYXRvcjwvc2VydmxldC1uYW1lPgorICAgICAgICA8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvQ2FsY3VsYXRvclNlcnZpY2U8L3VybC1wYXR0ZXJuPgorICAgIDwvc2VydmxldC1tYXBwaW5nPgogCi0JPHNlc3Npb24tY29uZmlnPgotCQk8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+Ci0JPC9zZXNzaW9uLWNvbmZpZz4KKyAgICA8c2Vzc2lvbi1jb25maWc+CisgICAgICAgIDxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KKyAgICA8L3Nlc3Npb24tY29uZmlnPgogCiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcG92ZXJqbXMvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcG92ZXJqbXMvYnVpbGQucHJvcGVydGllcwppbmRleCA2YWU0OWM4Li4wYzhkZWE1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBvdmVyam1zL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2Fwb3Zlcmptcy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImpzcjIwOC1pbnRlZ3JhdGlvbi13ZWItY2xpZW50Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSIuY29uc3VtZXIvL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9Ii4vY29uc3VtZXIvc3VuLXdlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcG92ZXJqbXMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2Fwb3Zlcmptcy9idWlsZC54bWwKaW5kZXggMjc5OTczOC4uMTU3ZTU0MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2Fwb3Zlcmptcy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2Fwb3Zlcmptcy9idWlsZC54bWwKQEAgLTU2LDcgKzU2LDcgQEAKICAgICAgICAgPHBhcmFtIG5hbWU9Indhci5maWxlIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0td2ViLndhciIvPgogICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJwcm92aWRlci9lbmRwb2ludCIvPgpAQCAtOTgsNyArOTgsNyBAQAogICAgICAgICAgICAgICAgdmFsdWU9Ii1rZWVwIC1kICR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL2NsYXNzZXMgaHR0cDovL2xvY2FsaG9zdDo4MDgwL2pzcjIwOC1pbnRlZ3JhdGlvbi13ZWItY2xpZW50L0NhbGN1bGF0b3JTZXJ2aWNlP1dTREwiLz4KICAgICAgIDwvYW50Y2FsbD4KICAgICAgIDxqYXZhYyBzcmNkaXI9ImNvbnN1bWVyIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi9jbGFzc2VzIgotICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9qMmVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy1ydC5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtdG9vbHMuamFyIiAKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvajJlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtcnQuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXRvb2xzLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJ3ZWJjbGllbnQvKioiLz4KICAgICAgIDxjb3B5IGZpbGU9Ii4vY29uc3VtZXIvY2xpZW50LXdlYi54bWwiIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvd2ViLnhtbCIvPgogICAgICAgPGNvcHkgZmlsZT0iLi9jb25zdW1lci9jbGllbnQtc3VuLXdlYi54bWwiIHRvZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vd2ViY2xpZW50L1dFQi1JTkYvc3VuLXdlYi54bWwiLz4KQEAgLTE3NiwxMiArMTc2LDEyIEBACiAgICAgICAgIDxhcmcgbGluZT0iJHthcHBuYW1lfS13ZWIiLz4KICAgICAgIDwvZXhlYz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0icnVudGVzdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGVjaG8gbWVzc2FnZT0iUnVubmluZyB0aGUgdGVzdCBjbGllbnQiLz4KICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgotICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IiAKLSAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIAorICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJjb25zdW1lci9jbGllbnQvKioiLz4KICAgICAgIDx1bmphciBzcmM9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiBkZXN0PSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iY2xpZW50LlRlc3RDbGllbnQiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2Fwb3Zlcmptcy9jb25zdW1lci9jbGllbnQtd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcG92ZXJqbXMvY29uc3VtZXIvY2xpZW50LXdlYi54bWwKaW5kZXggZWViNzMwZC4uNzk1YjA1MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2Fwb3Zlcmptcy9jb25zdW1lci9jbGllbnQtd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBvdmVyam1zL2NvbnN1bWVyL2NsaWVudC13ZWIueG1sCkBAIC0yMCw3ICsyMCw3IEBACiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgCisgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAgIDxkZXNjcmlwdGlvbj5BIHRlc3QgYXBwbGljYXRpb248L2Rlc2NyaXB0aW9uPgogICA8ZGlzcGxheS1uYW1lPldlYlRpZXI8L2Rpc3BsYXktbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcG92ZXJqbXMvY29uc3VtZXIvY2xpZW50L1Rlc3RDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcG92ZXJqbXMvY29uc3VtZXIvY2xpZW50L1Rlc3RDbGllbnQuamF2YQppbmRleCA0NjZlMzVjLi5iNzY2MmQyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBvdmVyam1zL2NvbnN1bWVyL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2Fwb3Zlcmptcy9jb25zdW1lci9jbGllbnQvVGVzdENsaWVudC5qYXZhCkBAIC00Nyw3ICs0Nyw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnQgY29kZSA9IGludm9rZVNlcnZsZXQodXJsKTsKICAgICAgICAgICAgIHJlcG9ydChjb2RlKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICB9CkBAIC02NCw5ICs2NCw5IEBACiAgICAgICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgICAgICAgIGxvZyhsaW5lKTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiU28gdGhlIFJFU1VMVCBPRiBDYWxjdWxhdG9yIGFkZCBTRVJWSUNFIElTIikgIT0gLTEpCi0JCWZvdW5kMSA9IHRydWU7CisgICAgICAgIGZvdW5kMSA9IHRydWU7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIlszXSIpICE9IC0xKQotCQlmb3VuZDIgPSB0cnVlOworICAgICAgICBmb3VuZDIgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjb2RlOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcG92ZXJqbXMvY29uc3VtZXIvam1zLWJpbmRpbmctc3UvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcG92ZXJqbXMvY29uc3VtZXIvam1zLWJpbmRpbmctc3UvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbAppbmRleCA5MThhOTU3Li5kNjM1ZjUzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBvdmVyam1zL2NvbnN1bWVyL2ptcy1iaW5kaW5nLXN1L2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2Fwb3Zlcmptcy9jb25zdW1lci9qbXMtYmluZGluZy1zdS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCkBAIC0yMiwxMyArMjIsMTMgQEAKICAgICB2ZXJzaW9uPSIxLjAiCiAgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2piaSIKICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIj4KLSAgCisKICAgPHNlcnZpY2UtYXNzZW1ibHk+CiAgICAgPGlkZW50aWZpY2F0aW9uPgogICAgICAgPG5hbWU+Y2xpZW50X3dlYl9jYWxjdWxhdG9yX2NvbnN1bWVyX2Fzc2VtYmx5PC9uYW1lPgogICAgICAgPGRlc2NyaXB0aW9uPlRoaXMgaXMgYW4gU0EgZm9yIEpNUyBCaW5kaW5nPC9kZXNjcmlwdGlvbj4KICAgICA8L2lkZW50aWZpY2F0aW9uPgotIAorCiAgICAgPHNlcnZpY2UtdW5pdD4KICAgICAgIDxpZGVudGlmaWNhdGlvbj4KICAgICAgICAgIDxuYW1lPmNsaWVudF93ZWJfY2FsY3VsYXRvcl9jb25zdW1lcl9zdTwvbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcG92ZXJqbXMvY29uc3VtZXIvam1zLWJpbmRpbmctc3Uvc3UvTUVUQS1JTkYvamJpLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcG92ZXJqbXMvY29uc3VtZXIvam1zLWJpbmRpbmctc3Uvc3UvTUVUQS1JTkYvamJpLnhtbAppbmRleCA1YzY2YjllLi4wNmY2YWFhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBvdmVyam1zL2NvbnN1bWVyL2ptcy1iaW5kaW5nLXN1L3N1L01FVEEtSU5GL2piaS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2Fwb3Zlcmptcy9jb25zdW1lci9qbXMtYmluZGluZy1zdS9zdS9NRVRBLUlORi9qYmkueG1sCkBAIC0yOCw1ICsyOCw1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtbmFtZT0idG5zOkNhbGN1bGF0b3JTZXJ2aWNlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludC1uYW1lPSJDYWxjdWxhdG9yIi8+CiA8amF2YWVzYjphcnRpZmFjdHN0eXBlPldTREwyMDwvamF2YWVzYjphcnRpZmFjdHN0eXBlPgotCTwvc2VydmljZXM+CisgICAgPC9zZXJ2aWNlcz4KIDwvamJpPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2Fwb3Zlcmptcy9jb25zdW1lci93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2Fwb3Zlcmptcy9jb25zdW1lci93ZWIueG1sCmluZGV4IDY3NmRlMjAuLjM1NDVhZTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcG92ZXJqbXMvY29uc3VtZXIvd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBvdmVyam1zL2NvbnN1bWVyL3dlYi54bWwKQEAgLTE4LDMwICsxOCwzMCBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotCQkJaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CisgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQorICAgICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAKLQk8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIENhbGN1bGF0b3IgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV0FSPC9kaXNwbGF5LW5hbWU+CisgICAgPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBDYWxjdWxhdG9yIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgIDxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldBUjwvZGlzcGxheS1uYW1lPgogCi0JPHNlcnZsZXQ+Ci0JCTxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgQ2FsY3VsYXRvciBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JCTxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KLQkJPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yUG9ydDwvc2VydmxldC1uYW1lPgotCQk8c2VydmxldC1jbGFzcz5lbmRwb2ludC5DYWxjdWxhdG9yPC9zZXJ2bGV0LWNsYXNzPgotCQk8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KLQk8L3NlcnZsZXQ+CisgICAgPHNlcnZsZXQ+CisgICAgICAgIDxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgQ2FsY3VsYXRvciBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgICAgIDxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yUG9ydDwvc2VydmxldC1uYW1lPgorICAgICAgICA8c2VydmxldC1jbGFzcz5lbmRwb2ludC5DYWxjdWxhdG9yPC9zZXJ2bGV0LWNsYXNzPgorICAgICAgICA8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KKyAgICA8L3NlcnZsZXQ+CiAKLQk8c2VydmxldC1tYXBwaW5nPgotCQk8c2VydmxldC1uYW1lPkNhbGN1bGF0b3JQb3J0PC9zZXJ2bGV0LW5hbWU+Ci0JCTx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9DYWxjdWxhdG9yU2VydmljZTwvdXJsLXBhdHRlcm4+Ci0JPC9zZXJ2bGV0LW1hcHBpbmc+CisgICAgPHNlcnZsZXQtbWFwcGluZz4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yUG9ydDwvc2VydmxldC1uYW1lPgorICAgICAgICA8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvQ2FsY3VsYXRvclNlcnZpY2U8L3VybC1wYXR0ZXJuPgorICAgIDwvc2VydmxldC1tYXBwaW5nPgogCi0JPHNlc3Npb24tY29uZmlnPgotCQk8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+Ci0JPC9zZXNzaW9uLWNvbmZpZz4KKyAgICA8c2Vzc2lvbi1jb25maWc+CisgICAgICAgIDxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KKyAgICA8L3Nlc3Npb24tY29uZmlnPgogCiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcG92ZXJqbXMvY29uc3VtZXIvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcG92ZXJqbXMvY29uc3VtZXIvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQppbmRleCBlNjUzZDQ2Li5iMzhjYTdhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBvdmVyam1zL2NvbnN1bWVyL3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2Fwb3Zlcmptcy9jb25zdW1lci93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yOCw4ICsyOCw4IEBACiAKICAgICAgICBAV2ViU2VydmljZVJlZihuYW1lPSJzdW4td2ViLnNlcnZpY2VyZWYvY2FsY3VsYXRvciIpIENhbGN1bGF0b3JTZXJ2aWNlIHNlcnZpY2U7CiAKLSAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApIAotCQl0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24geworICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkKKyAgICAgICAgdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgICAgZG9Qb3N0KHJlcSwgcmVzcCk7CiAgICAgICAgfQogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBvdmVyam1zL3Byb3ZpZGVyL2VuZHBvaW50L0NhbGN1bGF0b3IuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcG92ZXJqbXMvcHJvdmlkZXIvZW5kcG9pbnQvQ2FsY3VsYXRvci5qYXZhCmluZGV4IDY5NTEzMjAuLmJlZDFlMGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcG92ZXJqbXMvcHJvdmlkZXIvZW5kcG9pbnQvQ2FsY3VsYXRvci5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcG92ZXJqbXMvcHJvdmlkZXIvZW5kcG9pbnQvQ2FsY3VsYXRvci5qYXZhCkBAIC0yNSwxMyArMjUsMTMgQEAKICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9leGFtcGxlLndlYi5zZXJ2aWNlL0NhbGN1bGF0b3IiCiApCiBwdWJsaWMgY2xhc3MgQ2FsY3VsYXRvciB7Ci0JcHVibGljIENhbGN1bGF0b3IoKSB7fQorICAgIHB1YmxpYyBDYWxjdWxhdG9yKCkge30KIAotCUBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0iYWRkIiwgYWN0aW9uPSJ1cm46QWRkIikKLQlwdWJsaWMgaW50IGFkZChpbnQgaSwgaW50IGopIHsKKyAgICBAV2ViTWV0aG9kKG9wZXJhdGlvbk5hbWU9ImFkZCIsIGFjdGlvbj0idXJuOkFkZCIpCisgICAgcHVibGljIGludCBhZGQoaW50IGksIGludCBqKSB7CiAgICAgICAgICAgICAgICAgaW50IGsgPSBpICtqIDsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaSArICIrIiArIGogKyIgPSAiICsgayk7Ci0gCi0JCXJldHVybiBrOwotCX0KKworICAgICAgICByZXR1cm4gazsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBvdmVyam1zL3Byb3ZpZGVyL2ptcy1iaW5kaW5nLXN1L2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBvdmVyam1zL3Byb3ZpZGVyL2ptcy1iaW5kaW5nLXN1L2Fzc2VtYmx5L01FVEEtSU5GL2piaS54bWwKaW5kZXggZGY4MTQ1NS4uNzc0YWM2ZCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2Fwb3Zlcmptcy9wcm92aWRlci9qbXMtYmluZGluZy1zdS9hc3NlbWJseS9NRVRBLUlORi9qYmkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcG92ZXJqbXMvcHJvdmlkZXIvam1zLWJpbmRpbmctc3UvYXNzZW1ibHkvTUVUQS1JTkYvamJpLnhtbApAQCAtMjIsMTMgKzIyLDEzIEBACiAgICAgdmVyc2lvbj0iMS4wIgogICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYmkiCiAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSI+Ci0gIAorCiAgIDxzZXJ2aWNlLWFzc2VtYmx5PgogICAgIDxpZGVudGlmaWNhdGlvbj4KICAgICAgIDxuYW1lPmNsaWVudF93ZWJfY2FsY3VsYXRvcl9wcm92aWRlcl9hc3NlbWJseTwvbmFtZT4KICAgICAgIDxkZXNjcmlwdGlvbj5UaGlzIGlzIGFuIFNBIGZvciBKTVMgQmluZGluZzwvZGVzY3JpcHRpb24+CiAgICAgPC9pZGVudGlmaWNhdGlvbj4KLSAKKwogICAgIDxzZXJ2aWNlLXVuaXQ+CiAgICAgICA8aWRlbnRpZmljYXRpb24+CiAgICAgICAgICA8bmFtZT5jbGllbnRfd2ViX2NhbGN1bGF0b3JfcHJvdmlkZXJfc3U8L25hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBvdmVyam1zL3Byb3ZpZGVyL2ptcy1iaW5kaW5nLXN1L3N1L01FVEEtSU5GL2piaS54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3NvYXBvdmVyam1zL3Byb3ZpZGVyL2ptcy1iaW5kaW5nLXN1L3N1L01FVEEtSU5GL2piaS54bWwKaW5kZXggOGYzOGQwNy4uNzU0NmVjOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS9zb2Fwb3Zlcmptcy9wcm92aWRlci9qbXMtYmluZGluZy1zdS9zdS9NRVRBLUlORi9qYmkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvc29hcG92ZXJqbXMvcHJvdmlkZXIvam1zLWJpbmRpbmctc3Uvc3UvTUVUQS1JTkYvamJpLnhtbApAQCAtMjgsNSArMjgsNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLW5hbWU9InRuczpDYWxjdWxhdG9yU2VydmljZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQtbmFtZT0iQ2FsY3VsYXRvciIvPgogPGphdmFlc2I6YXJ0aWZhY3RzdHlwZT5XU0RMMjA8L2phdmFlc2I6YXJ0aWZhY3RzdHlwZT4KLQk8L3NlcnZpY2VzPgorICAgIDwvc2VydmljZXM+CiA8L2piaT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDNmODMwMTAuLmUzMDJkNWYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHkvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJqc3IyMDgtaW50ZWdyYXRpb24td2ViLWNsaWVudCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iLi93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSIuL3N1bi13ZWIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seS9idWlsZC54bWwKaW5kZXggZGJhMDY5Yi4uZmUyM2E4OCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHkvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5L2J1aWxkLnhtbApAQCAtNjQsNyArNjQsNyBAQAogICAgICAgICAgICAgICAgdmFsdWU9Ii1rZWVwIC1kICR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL2NsYXNzZXMgaHR0cDovL2xvY2FsaG9zdDo4MDgwL2pzcjIwOC1pbnRlZ3JhdGlvbi13ZWItY2xpZW50L3dlYnNlcnZpY2UvQ2FsY3VsYXRvclNlcnZpY2U/V1NETCIvPgogICAgIDwvYW50Y2FsbD4KICAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3dlYmNsaWVudC9XRUItSU5GL2NsYXNzZXMiCi0gICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL2oyZWUuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXJ0Lmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy10b29scy5qYXIiIAorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9qMmVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy1ydC5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtdG9vbHMuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9IndlYmNsaWVudC8qKiIvPgogICAgICAgPGNvcHkgZmlsZT0iLi9jbGllbnQtd2ViLnhtbCIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi93ZWIueG1sIi8+CiAgICAgICA8Y29weSBmaWxlPSIuL2NsaWVudC1zdW4td2ViLnhtbCIgdG9maWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS93ZWJjbGllbnQvV0VCLUlORi9zdW4td2ViLnhtbCIvPgpAQCAtMTExLDExICsxMTEsMTEgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY2xpZW50Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJ1bnRlc3QiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgotICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IiAKLSAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIAorICAgICAgPGphdmFjIHNyY2Rpcj0iLiIgZGVzdGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50IgorICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJjbGllbnQvKioiLz4KICAgICAgIDx1bmphciBzcmM9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiBkZXN0PSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iY2xpZW50LlRlc3RDbGllbnQiPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHkvY2xpZW50LXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seS9jbGllbnQtd2ViLnhtbAppbmRleCBlZWI3MzBkLi43OTViMDUyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seS9jbGllbnQtd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seS9jbGllbnQtd2ViLnhtbApAQCAtMjAsNyArMjAsNyBAQAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLSAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIAorICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogICA8ZGVzY3JpcHRpb24+QSB0ZXN0IGFwcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KICAgPGRpc3BsYXktbmFtZT5XZWJUaWVyPC9kaXNwbGF5LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seS9jbGllbnQvVGVzdENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHkvY2xpZW50L1Rlc3RDbGllbnQuamF2YQppbmRleCA1ZTg2NWQwLi5jNDlmNWIxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seS9jbGllbnQvVGVzdENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5L2NsaWVudC9UZXN0Q2xpZW50LmphdmEKQEAgLTQ4LDcgKzQ4LDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludCBjb2RlID0gaW52b2tlU2VydmxldCh1cmwpOwogICAgICAgICAgICAgcmVwb3J0KGNvZGUpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KQEAgLTY1LDkgKzY1LDkgQEAKICAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nKGxpbmUpOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJTbyB0aGUgUkVTVUxUIE9GIENhbGN1bGF0b3IgYWRkIFNFUlZJQ0UgSVMiKSAhPSAtMSkKLQkJZm91bmQxID0gdHJ1ZTsKKyAgICAgICAgZm91bmQxID0gdHJ1ZTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiWzNdIikgIT0gLTEpCi0JCWZvdW5kMiA9IHRydWU7CisgICAgICAgIGZvdW5kMiA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNvZGU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHkvZW5kcG9pbnQvQ2FsY3VsYXRvci5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHkvZW5kcG9pbnQvQ2FsY3VsYXRvci5qYXZhCmluZGV4IGI1MjJiOWYuLjIzMjgxN2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5L2VuZHBvaW50L0NhbGN1bGF0b3IuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seS9lbmRwb2ludC9DYWxjdWxhdG9yLmphdmEKQEAgLTI3LDE0ICsyNywxNCBAQAogICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2V4YW1wbGUud2ViLnNlcnZpY2UvQ2FsY3VsYXRvciIKICkKIHB1YmxpYyBjbGFzcyBDYWxjdWxhdG9yIHsKLQlwdWJsaWMgQ2FsY3VsYXRvcigpIHt9CisgICAgcHVibGljIENhbGN1bGF0b3IoKSB7fQogCi0JQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5SRVFVSVJFU19ORVcpCi0JQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lPSJhZGQiLCBhY3Rpb249InVybjpBZGQiKQotCXB1YmxpYyBpbnQgYWRkKGludCBpLCBpbnQgaikgeworICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuUkVRVUlSRVNfTkVXKQorICAgIEBXZWJNZXRob2Qob3BlcmF0aW9uTmFtZT0iYWRkIiwgYWN0aW9uPSJ1cm46QWRkIikKKyAgICBwdWJsaWMgaW50IGFkZChpbnQgaSwgaW50IGopIHsKICAgICAgICAgICAgICAgICBpbnQgayA9IGkgK2ogOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihpICsgIisiICsgaiArIiA9ICIgKyBrKTsKLSAKLQkJcmV0dXJuIGs7Ci0JfQorCisgICAgICAgIHJldHVybiBrOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5L3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seS93ZWIueG1sCmluZGV4IDA3ZTE0NzcuLjc5OGM2OWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5L3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHkvd2ViLnhtbApAQCAtMTgsMzAgKzE4LDMwIEBACiAtLT4KIAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCi0JCQlodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KKyAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCisgICAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KIAotCTxkZXNjcmlwdGlvbj5XZWJUaWVyIGZvciB0aGUgQ2FsY3VsYXRvciBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQk8ZGlzcGxheS1uYW1lPkNhbGN1bGF0b3JXQVI8L2Rpc3BsYXktbmFtZT4KKyAgICA8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIENhbGN1bGF0b3IgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV0FSPC9kaXNwbGF5LW5hbWU+CiAKLQk8c2VydmxldD4KLQkJPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBDYWxjdWxhdG9yIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQkJPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgotCQk8c2VydmxldC1uYW1lPkNhbGN1bGF0b3I8L3NlcnZsZXQtbmFtZT4KLQkJPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuQ2FsY3VsYXRvcjwvc2VydmxldC1jbGFzcz4KLQkJPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+Ci0JPC9zZXJ2bGV0PgorICAgIDxzZXJ2bGV0PgorICAgICAgICA8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIENhbGN1bGF0b3IgV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgICAgICA8ZGlzcGxheS1uYW1lPkNhbGN1bGF0b3JXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+Q2FsY3VsYXRvcjwvc2VydmxldC1uYW1lPgorICAgICAgICA8c2VydmxldC1jbGFzcz5lbmRwb2ludC5DYWxjdWxhdG9yPC9zZXJ2bGV0LWNsYXNzPgorICAgICAgICA8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KKyAgICA8L3NlcnZsZXQ+CiAKLQk8c2VydmxldC1tYXBwaW5nPgotCQk8c2VydmxldC1uYW1lPkNhbGN1bGF0b3I8L3NlcnZsZXQtbmFtZT4KLQkJPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL0NhbGN1bGF0b3JTZXJ2aWNlPC91cmwtcGF0dGVybj4KLQk8L3NlcnZsZXQtbWFwcGluZz4KKyAgICA8c2VydmxldC1tYXBwaW5nPgorICAgICAgICA8c2VydmxldC1uYW1lPkNhbGN1bGF0b3I8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL0NhbGN1bGF0b3JTZXJ2aWNlPC91cmwtcGF0dGVybj4KKyAgICA8L3NlcnZsZXQtbWFwcGluZz4KIAotCTxzZXNzaW9uLWNvbmZpZz4KLQkJPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgotCTwvc2Vzc2lvbi1jb25maWc+CisgICAgPHNlc3Npb24tY29uZmlnPgorICAgICAgICA8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+CisgICAgPC9zZXNzaW9uLWNvbmZpZz4KIAogPC93ZWItYXBwPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seS93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHkvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQppbmRleCBiYTQ2NjE5Li4zZGI1N2JmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seS93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5L3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTMwLDIyICszMCwyMiBAQAogCiAgICAgICAgQFdlYlNlcnZpY2VSZWYobmFtZT0ic3VuLXdlYi5zZXJ2aWNlcmVmL2NhbGN1bGF0b3IiKSBDYWxjdWxhdG9yU2VydmljZSBzZXJ2aWNlOwogCi0gICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKSAKLQkJdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKKyAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCisgICAgICAgIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgICAgIGRvUG9zdChyZXEsIHJlc3ApOwogICAgICAgIH0KIAogICAgICAgIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApCiAgICAgICAgICAgICAgIHRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7Ci0JICAgIFVzZXJUcmFuc2FjdGlvbiB1dCA9IG51bGw7CisgICAgICAgIFVzZXJUcmFuc2FjdGlvbiB1dCA9IG51bGw7CiAgICAgICAgICAgICB0cnkgewotCQl1dCA9IChVc2VyVHJhbnNhY3Rpb24pIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpjb21wL1VzZXJUcmFuc2FjdGlvbiIpOwotCQl1dC5iZWdpbigpOworICAgICAgICB1dCA9IChVc2VyVHJhbnNhY3Rpb24pIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpjb21wL1VzZXJUcmFuc2FjdGlvbiIpOworICAgICAgICB1dC5iZWdpbigpOwogCiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgU2VydmljZSBpcyA6IiArIHNlcnZpY2UpOwogICAgICAgICAgICAgICAgIENhbGN1bGF0b3IgcG9ydCA9IHNlcnZpY2UuZ2V0Q2FsY3VsYXRvclBvcnQoKTsKICAgICAgICAgICAgICAgICBpbnQgcmV0ID0gcG9ydC5hZGQoMSwgMik7Ci0JCXV0LmNvbW1pdCgpOworICAgICAgICB1dC5jb21taXQoKTsKICAgICAgICAgICAgICAgICBQcmludFdyaXRlciBvdXQgPSByZXNwLmdldFdyaXRlcigpOwogICAgICAgICAgICAgICAgIHJlc3Auc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8aHRtbD4iKTsKQEAgLTYyLDEyICs2MiwxMiBAQAogICAgICAgICAgICAgICAgIG91dC5mbHVzaCgpOwogICAgICAgICAgICAgICAgIG91dC5jbG9zZSgpOwogICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewotCQl0cnkgewotCQkJaWYodXQgIT0gbnVsbCkKLQkJCQl1dC5yb2xsYmFjaygpOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgICAgICAJZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGlmKHV0ICE9IG51bGwpCisgICAgICAgICAgICAgICAgdXQucm9sbGJhY2soKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CiAgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIH0KICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJjb21taXQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYmNvbW1pdC9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDAzMzE2MjQuLjkwZDg0NTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYmNvbW1pdC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYmNvbW1pdC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImpzcjIwOC1pbnRlZ3JhdGlvbiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iLi93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSIuL3N1bi13ZWIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJjb21taXQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpiY29tbWl0L2J1aWxkLnhtbAppbmRleCBjMTY5ZDIxLi4wNWVjZDFlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJjb21taXQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYmNvbW1pdC9idWlsZC54bWwKQEAgLTEwNSw3ICsxMDUsNyBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWFwcCIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNsaWVudCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveS1jbGllbnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxlY2hvIG1lc3NhZ2U9IlVuZGVwbG95aW5nIGNsaWVudCBhcHBsaWNhdGlvbiIvPgogICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSI+CkBAIC0xMzIsOCArMTMyLDggQEAKIAogICAgIDx0YXJnZXQgbmFtZT0icnVudGVzdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+Ci0gICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiIAotICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgCisgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9ImNsaWVudC8qKiIvPgogICAgICAgPHVuamFyIHNyYz0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIGRlc3Q9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgogICAgICAgPGphdmEgY2xhc3NuYW1lPSJjbGllbnQuVGVzdENsaWVudCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJjb21taXQvY2xpZW50LXN1bi13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpiY29tbWl0L2NsaWVudC1zdW4td2ViLnhtbAppbmRleCBkNDNlNzBmLi45MGFlZmYxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJjb21taXQvY2xpZW50LXN1bi13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYmNvbW1pdC9jbGllbnQtc3VuLXdlYi54bWwKQEAgLTI0LDE1ICsyNCwxNSBAQAogICA8c2VydmljZS1yZWY+CiAgICAgPHNlcnZpY2UtcmVmLW5hbWU+c3VuLXdlYi5zZXJ2aWNlcmVmL0hlbGxvRUpCU2VydmljZTwvc2VydmljZS1yZWYtbmFtZT4KICAgICA8cG9ydC1pbmZvPgotCTxzZXJ2aWNlLWVuZHBvaW50LWludGVyZmFjZT5lbmRwb2ludC5lamIuSGVsbG88L3NlcnZpY2UtZW5kcG9pbnQtaW50ZXJmYWNlPgotCTx3c2RsLXBvcnQ+Ci0gICAgCSAgPG5hbWVzcGFjZVVSST5odHRwOi8vZW5kcG9pbnQvZWpiPC9uYW1lc3BhY2VVUkk+Ci0gICAgCSAgPGxvY2FscGFydD5IZWxsb0VKQlBvcnQ8L2xvY2FscGFydD4KLQk8L3dzZGwtcG9ydD4KLSAgICAJPHN0dWItcHJvcGVydHk+Ci0JICA8bmFtZT5qYmktZW5hYmxlZDwvbmFtZT4KLQkgIDx2YWx1ZT50cnVlPC92YWx1ZT4KLQk8L3N0dWItcHJvcGVydHk+CisgICAgPHNlcnZpY2UtZW5kcG9pbnQtaW50ZXJmYWNlPmVuZHBvaW50LmVqYi5IZWxsbzwvc2VydmljZS1lbmRwb2ludC1pbnRlcmZhY2U+CisgICAgPHdzZGwtcG9ydD4KKyAgICAgICAgICA8bmFtZXNwYWNlVVJJPmh0dHA6Ly9lbmRwb2ludC9lamI8L25hbWVzcGFjZVVSST4KKyAgICAgICAgICA8bG9jYWxwYXJ0PkhlbGxvRUpCUG9ydDwvbG9jYWxwYXJ0PgorICAgIDwvd3NkbC1wb3J0PgorICAgICAgICA8c3R1Yi1wcm9wZXJ0eT4KKyAgICAgIDxuYW1lPmpiaS1lbmFibGVkPC9uYW1lPgorICAgICAgPHZhbHVlPnRydWU8L3ZhbHVlPgorICAgIDwvc3R1Yi1wcm9wZXJ0eT4KICAgICA8L3BvcnQtaW5mbz4KICAgICA8d3NkbC1vdmVycmlkZT5odHRwOi8vbG9jYWxob3N0OjgwODAvSGVsbG9FSkJTZXJ2aWNlL0hlbGxvRUpCP1dTREw8L3dzZGwtb3ZlcnJpZGU+CiAgIDwvc2VydmljZS1yZWY+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJjb21taXQvY2xpZW50LXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJjb21taXQvY2xpZW50LXdlYi54bWwKaW5kZXggNWFjMjY0OS4uY2Q5NThhOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpiY29tbWl0L2NsaWVudC13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYmNvbW1pdC9jbGllbnQtd2ViLnhtbApAQCAtMjAsNyArMjAsNyBAQAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLSAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIAorICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogICA8ZGVzY3JpcHRpb24+QSB0ZXN0IGFwcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KICAgPGRpc3BsYXktbmFtZT5XZWJUaWVyPC9kaXNwbGF5LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJjb21taXQvY2xpZW50L1Rlc3RDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYmNvbW1pdC9jbGllbnQvVGVzdENsaWVudC5qYXZhCmluZGV4IDkzZGY2YmYuLmQ1YTgxOWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYmNvbW1pdC9jbGllbnQvVGVzdENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYmNvbW1pdC9jbGllbnQvVGVzdENsaWVudC5qYXZhCkBAIC00OCw3ICs0OCw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnQgY29kZSA9IGludm9rZVNlcnZsZXQodXJsKTsKICAgICAgICAgICAgIHJlcG9ydChjb2RlKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICB9CkBAIC02NSw5ICs2NSw5IEBACiAgICAgICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgICAgICAgIGxvZyhsaW5lKTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiU28gdGhlIFJFU1VMVCBPRiBFSkIgd2Vic2VydmljZSBJUyIpICE9IC0xKQotCQlmb3VuZDEgPSB0cnVlOworICAgICAgICBmb3VuZDEgPSB0cnVlOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJbV2ViU3ZjVGVzdC1IZWxsbyBBcHBzZXJ2ZXIgVGVzdGVyICFdIikgIT0gLTEpCi0JCWZvdW5kMiA9IHRydWU7CisgICAgICAgIGZvdW5kMiA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNvZGU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpiY29tbWl0L2VuZHBvaW50L2VqYi9IZWxsby5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpiY29tbWl0L2VuZHBvaW50L2VqYi9IZWxsby5qYXZhCmluZGV4IDIzMTY3ZWIuLjkwNzM5MzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYmNvbW1pdC9lbmRwb2ludC9lamIvSGVsbG8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJjb21taXQvZW5kcG9pbnQvZWpiL0hlbGxvLmphdmEKQEAgLTIyLDUgKzIyLDUgQEAKIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2VuZHBvaW50L2VqYiIpCiBwdWJsaWMgaW50ZXJmYWNlIEhlbGxvIHsKIAotCXB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIHdobyk7CisgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgd2hvKTsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYmNvbW1pdC9lbmRwb2ludC9lamIvSGVsbG9FSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYmNvbW1pdC9lbmRwb2ludC9lamIvSGVsbG9FSkIuamF2YQppbmRleCAyNDlkZjkwLi40NTJjNjk0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJjb21taXQvZW5kcG9pbnQvZWpiL0hlbGxvRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpiY29tbWl0L2VuZHBvaW50L2VqYi9IZWxsb0VKQi5qYXZhCkBAIC0zNSwzNiArMzUsMzYgQEAKIAogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuUkVRVUlSRUQpCiAgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgd2hvKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCIqKioqIEVKQiBDYWxsZWQiKTsKLQlDb25uZWN0aW9uIGNvbj1udWxsOwotCVN0cmluZyB0YWJsZU5hbWUgPSAiQ1VTVE9NRVJfY20iOwotCXRyeSB7Ci0JY29uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiKioqKiBhdXRvIGNvbW1pdCA9ICIgKyBjb24uZ2V0QXV0b0NvbW1pdCgpKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKiogRUpCIENhbGxlZCIpOworICAgIENvbm5lY3Rpb24gY29uPW51bGw7CisgICAgU3RyaW5nIHRhYmxlTmFtZSA9ICJDVVNUT01FUl9jbSI7CisgICAgdHJ5IHsKKyAgICBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqIGF1dG8gY29tbWl0ID0gIiArIGNvbi5nZXRBdXRvQ29tbWl0KCkpOwogCi0JdXBkYXRlVGFibGUoY29uLCB0YWJsZU5hbWUsICJWaWthcyIsICJ2aWthc0BzdW4uY29tIik7Ci0JcmVhZERhdGEoY29uLCB0YWJsZU5hbWUpOworICAgIHVwZGF0ZVRhYmxlKGNvbiwgdGFibGVOYW1lLCAiVmlrYXMiLCAidmlrYXNAc3VuLmNvbSIpOworICAgIHJlYWREYXRhKGNvbiwgdGFibGVOYW1lKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGV4KTsKICAgICAgICAgfSBmaW5hbGx5IHsKLQkgICAgdHJ5IHsKLQkgICAgaWYoY29uICE9IG51bGwpIGNvbi5jbG9zZSgpOwotCSAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gc2UpIHt9Ci0JfQotCS8vY3R4LnNldFJvbGxiYWNrT25seSgpOworICAgICAgICB0cnkgeworICAgICAgICBpZihjb24gIT0gbnVsbCkgY29uLmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBzZSkge30KKyAgICB9CisgICAgLy9jdHguc2V0Um9sbGJhY2tPbmx5KCk7CiAgICAgICAgIHJldHVybiAiV2ViU3ZjVGVzdC1IZWxsbyAiICsgd2hvOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCB1cGRhdGVUYWJsZShDb25uZWN0aW9uIGNvbiwgU3RyaW5nIHRhYmxlTmFtZSwgU3RyaW5nIG5hbWUsIFN0cmluZyBlbWFpbCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHBTdG10ID0gCisgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHBTdG10ID0KICAgICAgICAgICAgICBjb24ucHJlcGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gIisgdGFibGVOYW1lICsiIChOQU1FLCBFTUFJTCkgVkFMVUVTKD8sPykiKTsKLQlwU3RtdC5zZXRTdHJpbmcoMSwgbmFtZSk7Ci0JcFN0bXQuc2V0U3RyaW5nKDIsIGVtYWlsKTsKKyAgICBwU3RtdC5zZXRTdHJpbmcoMSwgbmFtZSk7CisgICAgcFN0bXQuc2V0U3RyaW5nKDIsIGVtYWlsKTsKICAgICAgICAgcFN0bXQuZXhlY3V0ZVVwZGF0ZSgpOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCByZWFkRGF0YShDb25uZWN0aW9uIGNvbiwgU3RyaW5nIHRhYmxlTmFtZSkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHBTdG10ID0gCisgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHBTdG10ID0KICAgICAgICAgICAgICBjb24ucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIE5BTUUsIEVNQUlMIEZST00gIit0YWJsZU5hbWUpOwogICAgICAgICBSZXN1bHRTZXQgcnMgPSBwU3RtdC5leGVjdXRlUXVlcnkoKTsKICAgICAgICAgd2hpbGUocnMubmV4dCgpKXsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYmNvbW1pdC93ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpiY29tbWl0L3dlYi54bWwKaW5kZXggMDdlMTQ3Ny4uNzk4YzY5YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpiY29tbWl0L3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpiY29tbWl0L3dlYi54bWwKQEAgLTE4LDMwICsxOCwzMCBAQAogLS0+CiAKIDx3ZWItYXBwIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQotCQkJaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CisgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQorICAgICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAKLQk8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIENhbGN1bGF0b3IgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV0FSPC9kaXNwbGF5LW5hbWU+CisgICAgPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBDYWxjdWxhdG9yIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgIDxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldBUjwvZGlzcGxheS1uYW1lPgogCi0JPHNlcnZsZXQ+Ci0JCTxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgQ2FsY3VsYXRvciBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+Ci0JCTxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KLQkJPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+Ci0JCTxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkNhbGN1bGF0b3I8L3NlcnZsZXQtY2xhc3M+Ci0JCTxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgotCTwvc2VydmxldD4KKyAgICA8c2VydmxldD4KKyAgICAgICAgPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBDYWxjdWxhdG9yIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgorICAgICAgICA8c2VydmxldC1uYW1lPkNhbGN1bGF0b3I8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuQ2FsY3VsYXRvcjwvc2VydmxldC1jbGFzcz4KKyAgICAgICAgPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+CisgICAgPC9zZXJ2bGV0PgogCi0JPHNlcnZsZXQtbWFwcGluZz4KLQkJPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+Ci0JCTx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9DYWxjdWxhdG9yU2VydmljZTwvdXJsLXBhdHRlcm4+Ci0JPC9zZXJ2bGV0LW1hcHBpbmc+CisgICAgPHNlcnZsZXQtbWFwcGluZz4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDx1cmwtcGF0dGVybj4vd2Vic2VydmljZS9DYWxjdWxhdG9yU2VydmljZTwvdXJsLXBhdHRlcm4+CisgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiAKLQk8c2Vzc2lvbi1jb25maWc+Ci0JCTxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KLQk8L3Nlc3Npb24tY29uZmlnPgorICAgIDxzZXNzaW9uLWNvbmZpZz4KKyAgICAgICAgPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgorICAgIDwvc2Vzc2lvbi1jb25maWc+CiAKIDwvd2ViLWFwcD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpiY29tbWl0L3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJjb21taXQvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQppbmRleCA1MmE2NTU0Li4xNWI0NDc5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJjb21taXQvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJjb21taXQvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzYsOCArMzYsOCBAQAogICAgICAgIEhlbGxvRUpCU2VydmljZSBzZXJ2aWNlOwogICAgICAgIEBSZXNvdXJjZShtYXBwZWROYW1lPSJqZGJjL19fZGVmYXVsdCIpIHByaXZhdGUgRGF0YVNvdXJjZSBkczsKIAotICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkgCi0JCXRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CisgICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQorICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICAgICBkb1Bvc3QocmVxLCByZXNwKTsKICAgICAgICB9CiAKQEAgLTQ1LDIxICs0NSwyMSBAQAogICAgICAgICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICAgICAgVXNlclRyYW5zYWN0aW9uIHV0ID0gbnVsbDsKICAgICAgICAgICAgIC8vIENyZWF0ZSBUYWJsZSB3aXRoIG5hbWUgQ1VTVE9NRVJfY20uIFRoaXMgbmFtZSB3aWxsIGJlIHVzZWQgaW4gdGhlIEVKQgotCSAgICBTdHJpbmcgdGFibGVOYW1lID0gIkNVU1RPTUVSX2NtIjsKLQkgICAgU3RyaW5nIG5hbWVFbnRyeSA9ICJWaWthcyI7Ci0JICAgIFN0cmluZyBlbWFpbEVudHJ5PSAidmlrYXNAc3VuLmNvbSI7CisgICAgICAgIFN0cmluZyB0YWJsZU5hbWUgPSAiQ1VTVE9NRVJfY20iOworICAgICAgICBTdHJpbmcgbmFtZUVudHJ5ID0gIlZpa2FzIjsKKyAgICAgICAgU3RyaW5nIGVtYWlsRW50cnk9ICJ2aWthc0BzdW4uY29tIjsKICAgICAgICAgICAgIHRyeSB7Ci0JICAgICAgICBDb25uZWN0aW9uIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKKyAgICAgICAgICAgIENvbm5lY3Rpb24gY29uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwogICAgICAgICAgICAgICAgIC8vIGF1dG9jb21taXQgaXMgbWFkZSB0cnVlIHNvIHRoYXQgdGhlIHRhYmxlIGlzIGNyZWF0ZWQgYW5kIGRyb3BwZWQgaW1tZWRpYXRlbHkKICAgICAgICAgICAgICAgICBjb24uc2V0QXV0b0NvbW1pdCh0cnVlKTsKLQkgICAgICAgIGNyZWF0ZVRhYmxlKGNvbiwgdGFibGVOYW1lKTsKKyAgICAgICAgICAgIGNyZWF0ZVRhYmxlKGNvbiwgdGFibGVOYW1lKTsKICAgICAgICAgICAgICAgICB1dCA9IChVc2VyVHJhbnNhY3Rpb24pIG5ldyBJbml0aWFsQ29udGV4dCgpLmxvb2t1cCgiamF2YTpjb21wL1VzZXJUcmFuc2FjdGlvbiIpOwogICAgICAgICAgICAgICAgIHV0LmJlZ2luKCk7CiAKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBTZXJ2aWNlIGlzIDoiICsgc2VydmljZSk7Ci0JCUhlbGxvIHBvcnQgPSBzZXJ2aWNlLmdldEhlbGxvRUpCUG9ydCgpOwotICAgICAgICAgICAgICAgIAotCQlTdHJpbmcgcmV0ID0gcG9ydC5zYXlIZWxsbygiQXBwc2VydmVyIFRlc3RlciAhIik7CisgICAgICAgIEhlbGxvIHBvcnQgPSBzZXJ2aWNlLmdldEhlbGxvRUpCUG9ydCgpOworCisgICAgICAgIFN0cmluZyByZXQgPSBwb3J0LnNheUhlbGxvKCJBcHBzZXJ2ZXIgVGVzdGVyICEiKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJldHVybiB2YWx1ZSBmcm9tIHdlYnNlcnZpY2U6IityZXQpOwogCiAgICAgICAgICAgICAgICAgaWYodXQuZ2V0U3RhdHVzKCkgIT0gU3RhdHVzLlNUQVRVU19BQ1RJVkUpIHsKQEAgLTg1LDE1ICs4NSwxNSBAQAogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJbIiArIHJldCArICJdIik7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvYm9keT4iKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9odG1sPiIpOwotCQlkcm9wVGFibGUoY29uLCB0YWJsZU5hbWUpOworICAgICAgICBkcm9wVGFibGUoY29uLCB0YWJsZU5hbWUpOwogICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIH0KKyAgICAgICAgfQogICAgICAgIH0KIAogICAgICAgIC8vIHVzZSB0aGlzIHRhYmxlIGluIHRoZSBFSkIgd2Vic2VydmljZQogICAgICAgIHByaXZhdGUgdm9pZCBjcmVhdGVUYWJsZShDb25uZWN0aW9uIGNvbiwgU3RyaW5nIHRhYmxlTmFtZSkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKiBhdXRvIGNvbW1pdCA9ICIgKyBjb24uZ2V0QXV0b0NvbW1pdCgpKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqIGF1dG8gY29tbWl0ID0gIiArIGNvbi5nZXRBdXRvQ29tbWl0KCkpOwogICAgICAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcFN0bXQgPQogICAgICAgICAgICAgY29uLnByZXBhcmVTdGF0ZW1lbnQoIkNSRUFURSBUQUJMRSAiK3RhYmxlTmFtZSsiIChOQU1FIFZBUkNIQVIoMzApIE5PVCBOVUxMIFBSSU1BUlkgS0VZLCBFTUFJTCBWQVJDSEFSKDMwKSkiKTsKICAgICAgICAgICAgIHBTdG10LmV4ZWN1dGVVcGRhdGUoKTsKQEAgLTEwNiwxOSArMTA2LDE5IEBACiAKICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSBFSkIgd2Vic2VydmljZSBoYXMgdXBkYXRlZCB0aGUgZGF0YSBpbiB0aGUgdGFibGUuCiAgICAgICAgcHJpdmF0ZSBib29sZWFuIGlzRGF0YVVwZGF0ZWQoQ29ubmVjdGlvbiBjb24sIFN0cmluZyB0YWJsZU5hbWUsIFN0cmluZyBuYW1lLCBTdHJpbmcgZW1haWwpIHRocm93cyBFeGNlcHRpb24gewotCSAgICBQcmVwYXJlZFN0YXRlbWVudCBwU3RtdCA9IGNvbi5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgTkFNRSwgRU1BSUwgRlJPTSAiK3RhYmxlTmFtZSk7Ci0JICAgIFJlc3VsdFNldCBycyA9IHBTdG10LmV4ZWN1dGVRdWVyeSgpOwotCSAgICB0cnkgewotCSAgICAgIHdoaWxlKHJzLm5leHQoKSkgewotCQlTdHJpbmcgZGJfTmFtZSAgPSBycy5nZXRTdHJpbmcoMSk7Ci0JCVN0cmluZyBkYl9FbWFpbCA9IHJzLmdldFN0cmluZygyKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJOQU1FPSIrZGJfTmFtZSsiLCBFTUFJTD0iK2RiX0VtYWlsKTsKLQkJaWYoZGJfTmFtZS5lcXVhbHMobmFtZSkgJiYgZGJfRW1haWwuZXF1YWxzKGVtYWlsKSkKLQkJICAgIHJldHVybiB0cnVlOwotCSAgICAgIH0KLQkgICAgfSBmaW5hbGx5IHsKLQkgICAgICBycy5jbG9zZSgpOwotCSAgICB9Ci0JICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcFN0bXQgPSBjb24ucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIE5BTUUsIEVNQUlMIEZST00gIit0YWJsZU5hbWUpOworICAgICAgICBSZXN1bHRTZXQgcnMgPSBwU3RtdC5leGVjdXRlUXVlcnkoKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICB3aGlsZShycy5uZXh0KCkpIHsKKyAgICAgICAgU3RyaW5nIGRiX05hbWUgID0gcnMuZ2V0U3RyaW5nKDEpOworICAgICAgICBTdHJpbmcgZGJfRW1haWwgPSBycy5nZXRTdHJpbmcoMik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTkFNRT0iK2RiX05hbWUrIiwgRU1BSUw9IitkYl9FbWFpbCk7CisgICAgICAgIGlmKGRiX05hbWUuZXF1YWxzKG5hbWUpICYmIGRiX0VtYWlsLmVxdWFscyhlbWFpbCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICB9CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgcnMuY2xvc2UoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpiY29tbWl0MS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpiY29tbWl0MS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDAzMzE2MjQuLjkwZDg0NTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYmNvbW1pdDEvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJjb21taXQxL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ianNyMjA4LWludGVncmF0aW9uIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSIuL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9Ii4vc3VuLXdlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYmNvbW1pdDEvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpiY29tbWl0MS9idWlsZC54bWwKaW5kZXggYzE2OWQyMS4uMDVlY2QxZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpiY29tbWl0MS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpiY29tbWl0MS9idWlsZC54bWwKQEAgLTEwNSw3ICsxMDUsNyBAQAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWFwcCIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNsaWVudCIvPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveS1jbGllbnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxlY2hvIG1lc3NhZ2U9IlVuZGVwbG95aW5nIGNsaWVudCBhcHBsaWNhdGlvbiIvPgogICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSI+CkBAIC0xMzIsOCArMTMyLDggQEAKIAogICAgIDx0YXJnZXQgbmFtZT0icnVudGVzdCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+Ci0gICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiIAotICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgCisgICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiCisgICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICAgICAgaW5jbHVkZXM9ImNsaWVudC8qKiIvPgogICAgICAgPHVuamFyIHNyYz0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiIGRlc3Q9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIvPgogICAgICAgPGphdmEgY2xhc3NuYW1lPSJjbGllbnQuVGVzdENsaWVudCI+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJjb21taXQxL2NsaWVudC1zdW4td2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYmNvbW1pdDEvY2xpZW50LXN1bi13ZWIueG1sCmluZGV4IGQ0M2U3MGYuLjkwYWVmZjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYmNvbW1pdDEvY2xpZW50LXN1bi13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYmNvbW1pdDEvY2xpZW50LXN1bi13ZWIueG1sCkBAIC0yNCwxNSArMjQsMTUgQEAKICAgPHNlcnZpY2UtcmVmPgogICAgIDxzZXJ2aWNlLXJlZi1uYW1lPnN1bi13ZWIuc2VydmljZXJlZi9IZWxsb0VKQlNlcnZpY2U8L3NlcnZpY2UtcmVmLW5hbWU+CiAgICAgPHBvcnQtaW5mbz4KLQk8c2VydmljZS1lbmRwb2ludC1pbnRlcmZhY2U+ZW5kcG9pbnQuZWpiLkhlbGxvPC9zZXJ2aWNlLWVuZHBvaW50LWludGVyZmFjZT4KLQk8d3NkbC1wb3J0PgotICAgIAkgIDxuYW1lc3BhY2VVUkk+aHR0cDovL2VuZHBvaW50L2VqYjwvbmFtZXNwYWNlVVJJPgotICAgIAkgIDxsb2NhbHBhcnQ+SGVsbG9FSkJQb3J0PC9sb2NhbHBhcnQ+Ci0JPC93c2RsLXBvcnQ+Ci0gICAgCTxzdHViLXByb3BlcnR5PgotCSAgPG5hbWU+amJpLWVuYWJsZWQ8L25hbWU+Ci0JICA8dmFsdWU+dHJ1ZTwvdmFsdWU+Ci0JPC9zdHViLXByb3BlcnR5PgorICAgIDxzZXJ2aWNlLWVuZHBvaW50LWludGVyZmFjZT5lbmRwb2ludC5lamIuSGVsbG88L3NlcnZpY2UtZW5kcG9pbnQtaW50ZXJmYWNlPgorICAgIDx3c2RsLXBvcnQ+CisgICAgICAgICAgPG5hbWVzcGFjZVVSST5odHRwOi8vZW5kcG9pbnQvZWpiPC9uYW1lc3BhY2VVUkk+CisgICAgICAgICAgPGxvY2FscGFydD5IZWxsb0VKQlBvcnQ8L2xvY2FscGFydD4KKyAgICA8L3dzZGwtcG9ydD4KKyAgICAgICAgPHN0dWItcHJvcGVydHk+CisgICAgICA8bmFtZT5qYmktZW5hYmxlZDwvbmFtZT4KKyAgICAgIDx2YWx1ZT50cnVlPC92YWx1ZT4KKyAgICA8L3N0dWItcHJvcGVydHk+CiAgICAgPC9wb3J0LWluZm8+CiAgICAgPHdzZGwtb3ZlcnJpZGU+aHR0cDovL2xvY2FsaG9zdDo4MDgwL0hlbGxvRUpCU2VydmljZS9IZWxsb0VKQj9XU0RMPC93c2RsLW92ZXJyaWRlPgogICA8L3NlcnZpY2UtcmVmPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpiY29tbWl0MS9jbGllbnQtd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYmNvbW1pdDEvY2xpZW50LXdlYi54bWwKaW5kZXggNWFjMjY0OS4uY2Q5NThhOSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpiY29tbWl0MS9jbGllbnQtd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJjb21taXQxL2NsaWVudC13ZWIueG1sCkBAIC0yMCw3ICsyMCw3IEBACiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgCisgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAgIDxkZXNjcmlwdGlvbj5BIHRlc3QgYXBwbGljYXRpb248L2Rlc2NyaXB0aW9uPgogICA8ZGlzcGxheS1uYW1lPldlYlRpZXI8L2Rpc3BsYXktbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYmNvbW1pdDEvY2xpZW50L1Rlc3RDbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYmNvbW1pdDEvY2xpZW50L1Rlc3RDbGllbnQuamF2YQppbmRleCA4OTM1M2MxLi5hZjUxMmRjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJjb21taXQxL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpiY29tbWl0MS9jbGllbnQvVGVzdENsaWVudC5qYXZhCkBAIC00OCw3ICs0OCw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpbnQgY29kZSA9IGludm9rZVNlcnZsZXQodXJsKTsKICAgICAgICAgICAgIHJlcG9ydChjb2RlKTsKLQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICB9CkBAIC02NSw5ICs2NSw5IEBACiAgICAgICAgIHdoaWxlICgobGluZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgICAgICAgIGxvZyhsaW5lKTsKICAgICAgICAgICAgIGlmKGxpbmUuaW5kZXhPZigiU28gdGhlIFJFU1VMVCBPRiBFSkIgd2Vic2VydmljZSBJUyIpICE9IC0xKQotCQlmb3VuZDEgPSB0cnVlOworICAgICAgICBmb3VuZDEgPSB0cnVlOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJbV2ViU3ZjVGVzdC1IZWxsbyBBcHBzZXJ2ZXIgVGVzdGVyICFdIikgIT0gLTEpCi0JCWZvdW5kMiA9IHRydWU7CisgICAgICAgIGZvdW5kMiA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNvZGU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpiY29tbWl0MS9lbmRwb2ludC9lamIvSGVsbG8uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYmNvbW1pdDEvZW5kcG9pbnQvZWpiL0hlbGxvLmphdmEKaW5kZXggMjMxNjdlYi4uOTA3MzkzMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpiY29tbWl0MS9lbmRwb2ludC9lamIvSGVsbG8uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJjb21taXQxL2VuZHBvaW50L2VqYi9IZWxsby5qYXZhCkBAIC0yMiw1ICsyMiw1IEBACiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9lbmRwb2ludC9lamIiKQogcHVibGljIGludGVyZmFjZSBIZWxsbyB7CiAKLQlwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyB3aG8pOworICAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIHdobyk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJjb21taXQxL2VuZHBvaW50L2VqYi9IZWxsb0VKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpiY29tbWl0MS9lbmRwb2ludC9lamIvSGVsbG9FSkIuamF2YQppbmRleCBiMGI1MDRlLi5iNWU4NGIzIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJjb21taXQxL2VuZHBvaW50L2VqYi9IZWxsb0VKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYmNvbW1pdDEvZW5kcG9pbnQvZWpiL0hlbGxvRUpCLmphdmEKQEAgLTM1LDM5ICszNSwzOSBAQAogCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5SRVFVSVJFRCkKICAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyB3aG8pIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIioqKiogRUpCIENhbGxlZCIpOwotCUNvbm5lY3Rpb24gY29uPW51bGw7Ci0JU3RyaW5nIHRhYmxlTmFtZSA9ICJDVVNUT01FUl9jbTEiOwotCVN0cmluZyBuYW1lRW50cnkgPSAiVmlrYXMiOwotCVN0cmluZyBlbWFpbEVudHJ5PSAidmlrYXNAc3VuLmNvbSI7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqIEVKQiBDYWxsZWQiKTsKKyAgICBDb25uZWN0aW9uIGNvbj1udWxsOworICAgIFN0cmluZyB0YWJsZU5hbWUgPSAiQ1VTVE9NRVJfY20xIjsKKyAgICBTdHJpbmcgbmFtZUVudHJ5ID0gIlZpa2FzIjsKKyAgICBTdHJpbmcgZW1haWxFbnRyeT0gInZpa2FzQHN1bi5jb20iOwogCi0JdHJ5IHsKLQljb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCIqKioqIGF1dG8gY29tbWl0ID0gIiArIGNvbi5nZXRBdXRvQ29tbWl0KCkpOworICAgIHRyeSB7CisgICAgY29uID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKiBhdXRvIGNvbW1pdCA9ICIgKyBjb24uZ2V0QXV0b0NvbW1pdCgpKTsKIAotCXVwZGF0ZVRhYmxlKGNvbiwgdGFibGVOYW1lLCBuYW1lRW50cnksIGVtYWlsRW50cnkpOwotCXJlYWREYXRhKGNvbiwgdGFibGVOYW1lKTsKKyAgICB1cGRhdGVUYWJsZShjb24sIHRhYmxlTmFtZSwgbmFtZUVudHJ5LCBlbWFpbEVudHJ5KTsKKyAgICByZWFkRGF0YShjb24sIHRhYmxlTmFtZSk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihleCk7CiAgICAgICAgIH0gZmluYWxseSB7Ci0JICAgIHRyeSB7Ci0JICAgIGlmKGNvbiAhPSBudWxsKSBjb24uY2xvc2UoKTsKLQkgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIHNlKSB7fQotCX0KLQkvL2N0eC5zZXRSb2xsYmFja09ubHkoKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgaWYoY29uICE9IG51bGwpIGNvbi5jbG9zZSgpOworICAgICAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gc2UpIHt9CisgICAgfQorICAgIC8vY3R4LnNldFJvbGxiYWNrT25seSgpOwogICAgICAgICByZXR1cm4gIldlYlN2Y1Rlc3QtSGVsbG8gIiArIHdobzsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgdXBkYXRlVGFibGUoQ29ubmVjdGlvbiBjb24sIFN0cmluZyB0YWJsZU5hbWUsIFN0cmluZyBuYW1lLCBTdHJpbmcgZW1haWwpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwU3RtdCA9IAorICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwU3RtdCA9CiAgICAgICAgICAgICAgY29uLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPICIrIHRhYmxlTmFtZSArIiAoTkFNRSwgRU1BSUwpIFZBTFVFUyg/LD8pIik7Ci0JcFN0bXQuc2V0U3RyaW5nKDEsIG5hbWUpOwotCXBTdG10LnNldFN0cmluZygyLCBlbWFpbCk7CisgICAgcFN0bXQuc2V0U3RyaW5nKDEsIG5hbWUpOworICAgIHBTdG10LnNldFN0cmluZygyLCBlbWFpbCk7CiAgICAgICAgIHBTdG10LmV4ZWN1dGVVcGRhdGUoKTsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgcmVhZERhdGEoQ29ubmVjdGlvbiBjb24sIFN0cmluZyB0YWJsZU5hbWUpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwU3RtdCA9IAorICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwU3RtdCA9CiAgICAgICAgICAgICAgY29uLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBOQU1FLCBFTUFJTCBGUk9NICIrdGFibGVOYW1lKTsKICAgICAgICAgUmVzdWx0U2V0IHJzID0gcFN0bXQuZXhlY3V0ZVF1ZXJ5KCk7CiAgICAgICAgIHdoaWxlKHJzLm5leHQoKSl7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJjb21taXQxL3dlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJjb21taXQxL3dlYi54bWwKaW5kZXggMDdlMTQ3Ny4uNzk4YzY5YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpiY29tbWl0MS93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYmNvbW1pdDEvd2ViLnhtbApAQCAtMTgsMzAgKzE4LDMwIEBACiAtLT4KIAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCi0JeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCi0JCQlodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KKyAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCisgICAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KIAotCTxkZXNjcmlwdGlvbj5XZWJUaWVyIGZvciB0aGUgQ2FsY3VsYXRvciBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQk8ZGlzcGxheS1uYW1lPkNhbGN1bGF0b3JXQVI8L2Rpc3BsYXktbmFtZT4KKyAgICA8ZGVzY3JpcHRpb24+V2ViVGllciBmb3IgdGhlIENhbGN1bGF0b3IgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV0FSPC9kaXNwbGF5LW5hbWU+CiAKLQk8c2VydmxldD4KLQkJPGRlc2NyaXB0aW9uPkVuZHBvaW50IGZvciBDYWxjdWxhdG9yIFdlYiBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KLQkJPGRpc3BsYXktbmFtZT5DYWxjdWxhdG9yV2ViU2VydmljZTwvZGlzcGxheS1uYW1lPgotCQk8c2VydmxldC1uYW1lPkNhbGN1bGF0b3I8L3NlcnZsZXQtbmFtZT4KLQkJPHNlcnZsZXQtY2xhc3M+ZW5kcG9pbnQuQ2FsY3VsYXRvcjwvc2VydmxldC1jbGFzcz4KLQkJPGxvYWQtb24tc3RhcnR1cD4wPC9sb2FkLW9uLXN0YXJ0dXA+Ci0JPC9zZXJ2bGV0PgorICAgIDxzZXJ2bGV0PgorICAgICAgICA8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIENhbGN1bGF0b3IgV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgorICAgICAgICA8ZGlzcGxheS1uYW1lPkNhbGN1bGF0b3JXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+Q2FsY3VsYXRvcjwvc2VydmxldC1uYW1lPgorICAgICAgICA8c2VydmxldC1jbGFzcz5lbmRwb2ludC5DYWxjdWxhdG9yPC9zZXJ2bGV0LWNsYXNzPgorICAgICAgICA8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KKyAgICA8L3NlcnZsZXQ+CiAKLQk8c2VydmxldC1tYXBwaW5nPgotCQk8c2VydmxldC1uYW1lPkNhbGN1bGF0b3I8L3NlcnZsZXQtbmFtZT4KLQkJPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL0NhbGN1bGF0b3JTZXJ2aWNlPC91cmwtcGF0dGVybj4KLQk8L3NlcnZsZXQtbWFwcGluZz4KKyAgICA8c2VydmxldC1tYXBwaW5nPgorICAgICAgICA8c2VydmxldC1uYW1lPkNhbGN1bGF0b3I8L3NlcnZsZXQtbmFtZT4KKyAgICAgICAgPHVybC1wYXR0ZXJuPi93ZWJzZXJ2aWNlL0NhbGN1bGF0b3JTZXJ2aWNlPC91cmwtcGF0dGVybj4KKyAgICA8L3NlcnZsZXQtbWFwcGluZz4KIAotCTxzZXNzaW9uLWNvbmZpZz4KLQkJPHNlc3Npb24tdGltZW91dD41NDwvc2Vzc2lvbi10aW1lb3V0PgotCTwvc2Vzc2lvbi1jb25maWc+CisgICAgPHNlc3Npb24tY29uZmlnPgorICAgICAgICA8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+CisgICAgPC9zZXNzaW9uLWNvbmZpZz4KIAogPC93ZWItYXBwPgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJjb21taXQxL3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJjb21taXQxL3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggNWQ0NTc5Ni4uZmNmMGQwMCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpiY29tbWl0MS93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYmNvbW1pdDEvd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzYsOCArMzYsOCBAQAogICAgICAgIEhlbGxvRUpCU2VydmljZSBzZXJ2aWNlOwogICAgICAgIEBSZXNvdXJjZShtYXBwZWROYW1lPSJqZGJjL19fZGVmYXVsdCIpIHByaXZhdGUgRGF0YVNvdXJjZSBkczsKIAotICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkgCi0JCXRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CisgICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQorICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICAgICBkb1Bvc3QocmVxLCByZXNwKTsKICAgICAgICB9CiAKQEAgLTQ1LDMxICs0NSwzMSBAQAogICAgICAgICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICAgICAgVXNlclRyYW5zYWN0aW9uIHV0ID0gbnVsbDsKICAgICAgICAgICAgIC8vIENyZWF0ZSBUYWJsZSB3aXRoIG5hbWUgQ1VTVE9NRVJfY20xLiBUaGlzIG5hbWUgd2lsbCBiZSB1c2VkIGluIHRoZSBFSkIKLQkgICAgU3RyaW5nIHRhYmxlTmFtZSA9ICJDVVNUT01FUl9jbTEiOwotCSAgICBTdHJpbmdbXSBuYW1lcyA9IHsiVmlrYXMiLCAiVmlrYXNBd2FzdGhpIn07Ci0JICAgIFN0cmluZ1tdIGVtYWlscz0geyJ2aWthc0BzdW4uY29tIiwgIlZpa2FzQUBzdW4uY29tIn07CisgICAgICAgIFN0cmluZyB0YWJsZU5hbWUgPSAiQ1VTVE9NRVJfY20xIjsKKyAgICAgICAgU3RyaW5nW10gbmFtZXMgPSB7IlZpa2FzIiwgIlZpa2FzQXdhc3RoaSJ9OworICAgICAgICBTdHJpbmdbXSBlbWFpbHM9IHsidmlrYXNAc3VuLmNvbSIsICJWaWthc0FAc3VuLmNvbSJ9OwogICAgICAgICAgICAgdHJ5IHsKLQkgICAgICAgIENvbm5lY3Rpb24gY29uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCSAgICAgICAgY3JlYXRlVGFibGUoY29uLCB0YWJsZU5hbWUpOworICAgICAgICAgICAgQ29ubmVjdGlvbiBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgICAgICBjcmVhdGVUYWJsZShjb24sIHRhYmxlTmFtZSk7CiAgICAgICAgICAgICAgICAgdXQgPSAoVXNlclRyYW5zYWN0aW9uKSBuZXcgSW5pdGlhbENvbnRleHQoKS5sb29rdXAoImphdmE6Y29tcC9Vc2VyVHJhbnNhY3Rpb24iKTsKICAgICAgICAgICAgICAgICB1dC5iZWdpbigpOwogCi0JCXVwZGF0ZVRhYmxlKGNvbiwgdGFibGVOYW1lLCBuYW1lc1sxXSwgZW1haWxzWzFdKTsKKyAgICAgICAgdXBkYXRlVGFibGUoY29uLCB0YWJsZU5hbWUsIG5hbWVzWzFdLCBlbWFpbHNbMV0pOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFNlcnZpY2UgaXMgOiIgKyBzZXJ2aWNlKTsKLQkJSGVsbG8gcG9ydCA9IHNlcnZpY2UuZ2V0SGVsbG9FSkJQb3J0KCk7Ci0gICAgICAgICAgICAgICAgCi0JCVN0cmluZyByZXQgPSBwb3J0LnNheUhlbGxvKCJBcHBzZXJ2ZXIgVGVzdGVyICEiKTsKKyAgICAgICAgSGVsbG8gcG9ydCA9IHNlcnZpY2UuZ2V0SGVsbG9FSkJQb3J0KCk7CisKKyAgICAgICAgU3RyaW5nIHJldCA9IHBvcnQuc2F5SGVsbG8oIkFwcHNlcnZlciBUZXN0ZXIgISIpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmV0dXJuIHZhbHVlIGZyb20gd2Vic2VydmljZToiK3JldCk7CiAKLQkJaWYodXQuZ2V0U3RhdHVzKCkgIT0gU3RhdHVzLlNUQVRVU19BQ1RJVkUpIHsKKyAgICAgICAgaWYodXQuZ2V0U3RhdHVzKCkgIT0gU3RhdHVzLlNUQVRVU19BQ1RJVkUpIHsKICAgICAgICAgICAgICAgICAgICAgcmV0ICs9ICJGQUlMRUQiOwotCQl9IGVsc2UgewotCQkgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqIGNvbW1pdHRpbmcgdHJhbnNhY3Rpb24iKTsKLQkJICAgIHV0LmNvbW1pdCgpOwotCQkgICAgaWYoIWlzRGF0YVVwZGF0ZWQoY29uLCB0YWJsZU5hbWUsIG5hbWVzLCBlbWFpbHMpKSB7Ci0gICAgICAgICAgICAgICAgCXJldCArPSAiRkFJTEVEIjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKiBjb21taXR0aW5nIHRyYW5zYWN0aW9uIik7CisgICAgICAgICAgICB1dC5jb21taXQoKTsKKyAgICAgICAgICAgIGlmKCFpc0RhdGFVcGRhdGVkKGNvbiwgdGFibGVOYW1lLCBuYW1lcywgZW1haWxzKSkgeworICAgICAgICAgICAgICAgICAgICByZXQgKz0gIkZBSUxFRCI7CiAgICAgICAgICAgICAgICAgICAgIH0KLQkJfQorICAgICAgICB9CiAgICAgICAgICAgICAgICAgUHJpbnRXcml0ZXIgb3V0ID0gcmVzcC5nZXRXcml0ZXIoKTsKICAgICAgICAgICAgICAgICByZXNwLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPGh0bWw+Iik7CkBAIC04Myw1NSArODMsNTUgQEAKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiWyIgKyByZXQgKyAiXSIpOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L2JvZHk+Iik7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvaHRtbD4iKTsKLQkJZHJvcFRhYmxlKGNvbiwgdGFibGVOYW1lKTsKKyAgICAgICAgZHJvcFRhYmxlKGNvbiwgdGFibGVOYW1lKTsKICAgICAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICB9CisgICAgICAgIH0KICAgICAgICB9CiAKICAgICAgICAvLyB1c2UgdGhpcyB0YWJsZSBpbiB0aGUgRUpCIHdlYnNlcnZpY2UKICAgICAgICBwcml2YXRlIHZvaWQgY3JlYXRlVGFibGUoQ29ubmVjdGlvbiBjb24sIFN0cmluZyB0YWJsZU5hbWUpIHRocm93cyBFeGNlcHRpb24gewotCSAgICAvLyBhdXRvY29tbWl0IGlzIG1hZGUgdHJ1ZSBzbyB0aGF0IHRoZSB0YWJsZSBpcyBjcmVhdGVkIGltbWVkaWF0ZWx5Ci0JICAgIGJvb2xlYW4gYXV0b0NvbW1pdCA9IGNvbi5nZXRBdXRvQ29tbWl0KCk7Ci0JICAgIGNvbi5zZXRBdXRvQ29tbWl0KHRydWUpOwotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKiogYXV0byBjb21taXQgPSAiICsgY29uLmdldEF1dG9Db21taXQoKSk7CisgICAgICAgIC8vIGF1dG9jb21taXQgaXMgbWFkZSB0cnVlIHNvIHRoYXQgdGhlIHRhYmxlIGlzIGNyZWF0ZWQgaW1tZWRpYXRlbHkKKyAgICAgICAgYm9vbGVhbiBhdXRvQ29tbWl0ID0gY29uLmdldEF1dG9Db21taXQoKTsKKyAgICAgICAgY29uLnNldEF1dG9Db21taXQodHJ1ZSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKiBhdXRvIGNvbW1pdCA9ICIgKyBjb24uZ2V0QXV0b0NvbW1pdCgpKTsKICAgICAgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHBTdG10ID0KICAgICAgICAgICAgIGNvbi5wcmVwYXJlU3RhdGVtZW50KCJDUkVBVEUgVEFCTEUgIit0YWJsZU5hbWUrIiAoTkFNRSBWQVJDSEFSKDMwKSBOT1QgTlVMTCBQUklNQVJZIEtFWSwgRU1BSUwgVkFSQ0hBUigzMCkpIik7CiAgICAgICAgICAgICBwU3RtdC5leGVjdXRlVXBkYXRlKCk7Ci0JICAgIGNvbi5zZXRBdXRvQ29tbWl0KGF1dG9Db21taXQpOworICAgICAgICBjb24uc2V0QXV0b0NvbW1pdChhdXRvQ29tbWl0KTsKICAgICAgICB9CiAKICAgICAgICBwcml2YXRlIHZvaWQgZHJvcFRhYmxlKENvbm5lY3Rpb24gY29uLCBTdHJpbmcgdGFibGVOYW1lKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkgICAgYm9vbGVhbiBhdXRvQ29tbWl0ID0gY29uLmdldEF1dG9Db21taXQoKTsKLQkgICAgY29uLnNldEF1dG9Db21taXQodHJ1ZSk7CisgICAgICAgIGJvb2xlYW4gYXV0b0NvbW1pdCA9IGNvbi5nZXRBdXRvQ29tbWl0KCk7CisgICAgICAgIGNvbi5zZXRBdXRvQ29tbWl0KHRydWUpOwogICAgICAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcFN0bXQgPSBjb24ucHJlcGFyZVN0YXRlbWVudCgiRFJPUCBUQUJMRSAiK3RhYmxlTmFtZSk7CiAgICAgICAgICAgICBwU3RtdC5leGVjdXRlVXBkYXRlKCk7Ci0JICAgIGNvbi5zZXRBdXRvQ29tbWl0KGF1dG9Db21taXQpOworICAgICAgICBjb24uc2V0QXV0b0NvbW1pdChhdXRvQ29tbWl0KTsKICAgICAgICB9CiAKICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSBFSkIgd2Vic2VydmljZSBoYXMgdXBkYXRlZCB0aGUgZGF0YSBpbiB0aGUgdGFibGUuCiAgICAgICAgcHJpdmF0ZSBib29sZWFuIGlzRGF0YVVwZGF0ZWQoQ29ubmVjdGlvbiBjb24sIFN0cmluZyB0YWJsZU5hbWUsIFN0cmluZ1tdIG5hbWVzLCBTdHJpbmdbXSBlbWFpbHMpIHRocm93cyBFeGNlcHRpb24gewotCSAgICBQcmVwYXJlZFN0YXRlbWVudCBwU3RtdCA9IGNvbi5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgTkFNRSwgRU1BSUwgRlJPTSAiK3RhYmxlTmFtZSk7Ci0JICAgIFJlc3VsdFNldCBycyA9IHBTdG10LmV4ZWN1dGVRdWVyeSgpOwotCSAgICBpbnQgYWxsRGF0YUNvdW50ID0gMDsKLQkgICAgd2hpbGUocnMubmV4dCgpKSB7Ci0JCVN0cmluZyBkYl9OYW1lICA9IHJzLmdldFN0cmluZygxKTsKLQkJU3RyaW5nIGRiX0VtYWlsID0gcnMuZ2V0U3RyaW5nKDIpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIk5BTUU9IitkYl9OYW1lKyIsIEVNQUlMPSIrZGJfRW1haWwpOwotCSAgICAgIAlmb3IgKGludCBpPTA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykgCi0JCSAgICBpZihkYl9OYW1lLmVxdWFscyhuYW1lc1tpXSkgJiYgZGJfRW1haWwuZXF1YWxzKGVtYWlsc1tpXSkpCi0JCQlhbGxEYXRhQ291bnQrKzsKLQkgICAgfQotCSAgICBycy5jbG9zZSgpOwotCSAgICByZXR1cm4gKGFsbERhdGFDb3VudCA9PSBuYW1lcy5sZW5ndGgpOworICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwU3RtdCA9IGNvbi5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgTkFNRSwgRU1BSUwgRlJPTSAiK3RhYmxlTmFtZSk7CisgICAgICAgIFJlc3VsdFNldCBycyA9IHBTdG10LmV4ZWN1dGVRdWVyeSgpOworICAgICAgICBpbnQgYWxsRGF0YUNvdW50ID0gMDsKKyAgICAgICAgd2hpbGUocnMubmV4dCgpKSB7CisgICAgICAgIFN0cmluZyBkYl9OYW1lICA9IHJzLmdldFN0cmluZygxKTsKKyAgICAgICAgU3RyaW5nIGRiX0VtYWlsID0gcnMuZ2V0U3RyaW5nKDIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk5BTUU9IitkYl9OYW1lKyIsIEVNQUlMPSIrZGJfRW1haWwpOworICAgICAgICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykKKyAgICAgICAgICAgIGlmKGRiX05hbWUuZXF1YWxzKG5hbWVzW2ldKSAmJiBkYl9FbWFpbC5lcXVhbHMoZW1haWxzW2ldKSkKKyAgICAgICAgICAgIGFsbERhdGFDb3VudCsrOworICAgICAgICB9CisgICAgICAgIHJzLmNsb3NlKCk7CisgICAgICAgIHJldHVybiAoYWxsRGF0YUNvdW50ID09IG5hbWVzLmxlbmd0aCk7CiAgICAgICAgfQogCi0gICAgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVRhYmxlKENvbm5lY3Rpb24gY29uLCBTdHJpbmcgdGFibGVOYW1lLCBTdHJpbmcgbmFtZSwgU3RyaW5nIGVtYWlsKSAKLQkJdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JICAgUHJlcGFyZWRTdGF0ZW1lbnQgcFN0bXQgPSAKLQkJY29uLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPICIrIHRhYmxlTmFtZSArIiAoTkFNRSwgRU1BSUwpIFZBTFVFUyg/LD8pIik7Ci0JICAgcFN0bXQuc2V0U3RyaW5nKDEsIG5hbWUpOwotCSAgIHBTdG10LnNldFN0cmluZygyLCBlbWFpbCk7Ci0JICAgcFN0bXQuZXhlY3V0ZVVwZGF0ZSgpOworICAgICAgIHByaXZhdGUgdm9pZCB1cGRhdGVUYWJsZShDb25uZWN0aW9uIGNvbiwgU3RyaW5nIHRhYmxlTmFtZSwgU3RyaW5nIG5hbWUsIFN0cmluZyBlbWFpbCkKKyAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcFN0bXQgPQorICAgICAgICBjb24ucHJlcGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gIisgdGFibGVOYW1lICsiIChOQU1FLCBFTUFJTCkgVkFMVUVTKD8sPykiKTsKKyAgICAgICBwU3RtdC5zZXRTdHJpbmcoMSwgbmFtZSk7CisgICAgICAgcFN0bXQuc2V0U3RyaW5nKDIsIGVtYWlsKTsKKyAgICAgICBwU3RtdC5leGVjdXRlVXBkYXRlKCk7CiAgICAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpicm9sbGJhY2svYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYnJvbGxiYWNrL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMDMzMTYyNC4uOTBkODQ1MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpicm9sbGJhY2svYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJyb2xsYmFjay9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9ImpzcjIwOC1pbnRlZ3JhdGlvbiIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iLi93ZWIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSIuL3N1bi13ZWIueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJyb2xsYmFjay9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJyb2xsYmFjay9idWlsZC54bWwKaW5kZXggYzE2OWQyMS4uMDVlY2QxZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpicm9sbGJhY2svYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYnJvbGxiYWNrL2J1aWxkLnhtbApAQCAtMTA1LDcgKzEwNSw3IEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktYXBwIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY2xpZW50Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95LWNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGVjaG8gbWVzc2FnZT0iVW5kZXBsb3lpbmcgY2xpZW50IGFwcGxpY2F0aW9uIi8+CiAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59Ij4KQEAgLTEzMiw4ICsxMzIsOCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJydW50ZXN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KLSAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIgCi0gICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiAKKyAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iY2xpZW50LyoqIi8+CiAgICAgICA8dW5qYXIgc3JjPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgZGVzdD0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+CiAgICAgICA8amF2YSBjbGFzc25hbWU9ImNsaWVudC5UZXN0Q2xpZW50Ij4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYnJvbGxiYWNrL2NsaWVudC1zdW4td2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYnJvbGxiYWNrL2NsaWVudC1zdW4td2ViLnhtbAppbmRleCBkNDNlNzBmLi45MGFlZmYxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJyb2xsYmFjay9jbGllbnQtc3VuLXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpicm9sbGJhY2svY2xpZW50LXN1bi13ZWIueG1sCkBAIC0yNCwxNSArMjQsMTUgQEAKICAgPHNlcnZpY2UtcmVmPgogICAgIDxzZXJ2aWNlLXJlZi1uYW1lPnN1bi13ZWIuc2VydmljZXJlZi9IZWxsb0VKQlNlcnZpY2U8L3NlcnZpY2UtcmVmLW5hbWU+CiAgICAgPHBvcnQtaW5mbz4KLQk8c2VydmljZS1lbmRwb2ludC1pbnRlcmZhY2U+ZW5kcG9pbnQuZWpiLkhlbGxvPC9zZXJ2aWNlLWVuZHBvaW50LWludGVyZmFjZT4KLQk8d3NkbC1wb3J0PgotICAgIAkgIDxuYW1lc3BhY2VVUkk+aHR0cDovL2VuZHBvaW50L2VqYjwvbmFtZXNwYWNlVVJJPgotICAgIAkgIDxsb2NhbHBhcnQ+SGVsbG9FSkJQb3J0PC9sb2NhbHBhcnQ+Ci0JPC93c2RsLXBvcnQ+Ci0gICAgCTxzdHViLXByb3BlcnR5PgotCSAgPG5hbWU+amJpLWVuYWJsZWQ8L25hbWU+Ci0JICA8dmFsdWU+dHJ1ZTwvdmFsdWU+Ci0JPC9zdHViLXByb3BlcnR5PgorICAgIDxzZXJ2aWNlLWVuZHBvaW50LWludGVyZmFjZT5lbmRwb2ludC5lamIuSGVsbG88L3NlcnZpY2UtZW5kcG9pbnQtaW50ZXJmYWNlPgorICAgIDx3c2RsLXBvcnQ+CisgICAgICAgICAgPG5hbWVzcGFjZVVSST5odHRwOi8vZW5kcG9pbnQvZWpiPC9uYW1lc3BhY2VVUkk+CisgICAgICAgICAgPGxvY2FscGFydD5IZWxsb0VKQlBvcnQ8L2xvY2FscGFydD4KKyAgICA8L3dzZGwtcG9ydD4KKyAgICAgICAgPHN0dWItcHJvcGVydHk+CisgICAgICA8bmFtZT5qYmktZW5hYmxlZDwvbmFtZT4KKyAgICAgIDx2YWx1ZT50cnVlPC92YWx1ZT4KKyAgICA8L3N0dWItcHJvcGVydHk+CiAgICAgPC9wb3J0LWluZm8+CiAgICAgPHdzZGwtb3ZlcnJpZGU+aHR0cDovL2xvY2FsaG9zdDo4MDgwL0hlbGxvRUpCU2VydmljZS9IZWxsb0VKQj9XU0RMPC93c2RsLW92ZXJyaWRlPgogICA8L3NlcnZpY2UtcmVmPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpicm9sbGJhY2svY2xpZW50LXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJyb2xsYmFjay9jbGllbnQtd2ViLnhtbAppbmRleCA1YWMyNjQ5Li5jZDk1OGE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJyb2xsYmFjay9jbGllbnQtd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJyb2xsYmFjay9jbGllbnQtd2ViLnhtbApAQCAtMjAsNyArMjAsNyBAQAogPHdlYi1hcHAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKICAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHZlcnNpb249IjIuNSIKLSAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIAorICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogICA8ZGVzY3JpcHRpb24+QSB0ZXN0IGFwcGxpY2F0aW9uPC9kZXNjcmlwdGlvbj4KICAgPGRpc3BsYXktbmFtZT5XZWJUaWVyPC9kaXNwbGF5LW5hbWU+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJyb2xsYmFjay9jbGllbnQvVGVzdENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpicm9sbGJhY2svY2xpZW50L1Rlc3RDbGllbnQuamF2YQppbmRleCAxZDMzZWFiLi42ZGI4M2MwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJyb2xsYmFjay9jbGllbnQvVGVzdENsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYnJvbGxiYWNrL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludCBjb2RlID0gaW52b2tlU2VydmxldCh1cmwpOwogICAgICAgICAgICAgcmVwb3J0KGNvZGUpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KQEAgLTY0LDkgKzY0LDkgQEAKICAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nKGxpbmUpOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJTbyB0aGUgUkVTVUxUIE9GIEVKQiB3ZWJzZXJ2aWNlIElTIikgIT0gLTEpCi0JCWZvdW5kMSA9IHRydWU7CisgICAgICAgIGZvdW5kMSA9IHRydWU7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIltXZWJTdmNUZXN0LUhlbGxvIEFwcHNlcnZlciBUZXN0ZXIgIV0iKSAhPSAtMSkKLQkJZm91bmQyID0gdHJ1ZTsKKyAgICAgICAgZm91bmQyID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY29kZTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJyb2xsYmFjay9lbmRwb2ludC9lamIvSGVsbG8uamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYnJvbGxiYWNrL2VuZHBvaW50L2VqYi9IZWxsby5qYXZhCmluZGV4IDIzMTY3ZWIuLjkwNzM5MzMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYnJvbGxiYWNrL2VuZHBvaW50L2VqYi9IZWxsby5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYnJvbGxiYWNrL2VuZHBvaW50L2VqYi9IZWxsby5qYXZhCkBAIC0yMiw1ICsyMiw1IEBACiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9lbmRwb2ludC9lamIiKQogcHVibGljIGludGVyZmFjZSBIZWxsbyB7CiAKLQlwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyB3aG8pOworICAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIHdobyk7CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJyb2xsYmFjay9lbmRwb2ludC9lamIvSGVsbG9FSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYnJvbGxiYWNrL2VuZHBvaW50L2VqYi9IZWxsb0VKQi5qYXZhCmluZGV4IDkxZWE3ZTYuLjA1M2RkYmIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYnJvbGxiYWNrL2VuZHBvaW50L2VqYi9IZWxsb0VKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYnJvbGxiYWNrL2VuZHBvaW50L2VqYi9IZWxsb0VKQi5qYXZhCkBAIC0zNSwzNiArMzUsMzYgQEAKIAogICAgIEBUcmFuc2FjdGlvbkF0dHJpYnV0ZShUcmFuc2FjdGlvbkF0dHJpYnV0ZVR5cGUuUkVRVUlSRUQpCiAgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgd2hvKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCIqKioqIEVKQiBDYWxsZWQiKTsKLQlDb25uZWN0aW9uIGNvbj1udWxsOwotCVN0cmluZyB0YWJsZU5hbWUgPSAiQ1VTVE9NRVJfcmIiOwotCXRyeSB7Ci0JY29uID0gZHMuZ2V0Q29ubmVjdGlvbigpOwotCVN5c3RlbS5vdXQucHJpbnRsbigiKioqKiBhdXRvIGNvbW1pdCA9ICIgKyBjb24uZ2V0QXV0b0NvbW1pdCgpKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKiogRUpCIENhbGxlZCIpOworICAgIENvbm5lY3Rpb24gY29uPW51bGw7CisgICAgU3RyaW5nIHRhYmxlTmFtZSA9ICJDVVNUT01FUl9yYiI7CisgICAgdHJ5IHsKKyAgICBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqIGF1dG8gY29tbWl0ID0gIiArIGNvbi5nZXRBdXRvQ29tbWl0KCkpOwogCi0JdXBkYXRlVGFibGUoY29uLCB0YWJsZU5hbWUsICJWaWthcyIsICJ2aWthc0BzdW4uY29tIik7Ci0JcmVhZERhdGEoY29uLCB0YWJsZU5hbWUpOworICAgIHVwZGF0ZVRhYmxlKGNvbiwgdGFibGVOYW1lLCAiVmlrYXMiLCAidmlrYXNAc3VuLmNvbSIpOworICAgIHJlYWREYXRhKGNvbiwgdGFibGVOYW1lKTsKICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGV4KTsKICAgICAgICAgfSBmaW5hbGx5IHsKLQkgICAgdHJ5IHsKLQkgICAgaWYoY29uICE9IG51bGwpIGNvbi5jbG9zZSgpOwotCSAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gc2UpIHt9Ci0JfQotCWN0eC5zZXRSb2xsYmFja09ubHkoKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgaWYoY29uICE9IG51bGwpIGNvbi5jbG9zZSgpOworICAgICAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gc2UpIHt9CisgICAgfQorICAgIGN0eC5zZXRSb2xsYmFja09ubHkoKTsKICAgICAgICAgcmV0dXJuICJXZWJTdmNUZXN0LUhlbGxvICIgKyB3aG87CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVRhYmxlKENvbm5lY3Rpb24gY29uLCBTdHJpbmcgdGFibGVOYW1lLCBTdHJpbmcgbmFtZSwgU3RyaW5nIGVtYWlsKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcFN0bXQgPSAKKyAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcFN0bXQgPQogICAgICAgICAgICAgIGNvbi5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQgSU5UTyAiKyB0YWJsZU5hbWUgKyIgKE5BTUUsIEVNQUlMKSBWQUxVRVMoPyw/KSIpOwotCXBTdG10LnNldFN0cmluZygxLCBuYW1lKTsKLQlwU3RtdC5zZXRTdHJpbmcoMiwgZW1haWwpOworICAgIHBTdG10LnNldFN0cmluZygxLCBuYW1lKTsKKyAgICBwU3RtdC5zZXRTdHJpbmcoMiwgZW1haWwpOwogICAgICAgICBwU3RtdC5leGVjdXRlVXBkYXRlKCk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHJlYWREYXRhKENvbm5lY3Rpb24gY29uLCBTdHJpbmcgdGFibGVOYW1lKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcFN0bXQgPSAKKyAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcFN0bXQgPQogICAgICAgICAgICAgIGNvbi5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgTkFNRSwgRU1BSUwgRlJPTSAiK3RhYmxlTmFtZSk7CiAgICAgICAgIFJlc3VsdFNldCBycyA9IHBTdG10LmV4ZWN1dGVRdWVyeSgpOwogICAgICAgICB3aGlsZShycy5uZXh0KCkpewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpicm9sbGJhY2svd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYnJvbGxiYWNrL3dlYi54bWwKaW5kZXggMDdlMTQ3Ny4uNzk4YzY5YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpicm9sbGJhY2svd2ViLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJyb2xsYmFjay93ZWIueG1sCkBAIC0xOCwzMCArMTgsMzAgQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKLQkJCWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgorICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKKyAgICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogCi0JPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBDYWxjdWxhdG9yIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCTxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldBUjwvZGlzcGxheS1uYW1lPgorICAgIDxkZXNjcmlwdGlvbj5XZWJUaWVyIGZvciB0aGUgQ2FsY3VsYXRvciBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICA8ZGlzcGxheS1uYW1lPkNhbGN1bGF0b3JXQVI8L2Rpc3BsYXktbmFtZT4KIAotCTxzZXJ2bGV0PgotCQk8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIENhbGN1bGF0b3IgV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCQk8ZGlzcGxheS1uYW1lPkNhbGN1bGF0b3JXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+Ci0JCTxzZXJ2bGV0LW5hbWU+Q2FsY3VsYXRvcjwvc2VydmxldC1uYW1lPgotCQk8c2VydmxldC1jbGFzcz5lbmRwb2ludC5DYWxjdWxhdG9yPC9zZXJ2bGV0LWNsYXNzPgotCQk8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KLQk8L3NlcnZsZXQ+CisgICAgPHNlcnZsZXQ+CisgICAgICAgIDxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgQ2FsY3VsYXRvciBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgICAgIDxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkNhbGN1bGF0b3I8L3NlcnZsZXQtY2xhc3M+CisgICAgICAgIDxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgorICAgIDwvc2VydmxldD4KIAotCTxzZXJ2bGV0LW1hcHBpbmc+Ci0JCTxzZXJ2bGV0LW5hbWU+Q2FsY3VsYXRvcjwvc2VydmxldC1uYW1lPgotCQk8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvQ2FsY3VsYXRvclNlcnZpY2U8L3VybC1wYXR0ZXJuPgotCTwvc2VydmxldC1tYXBwaW5nPgorICAgIDxzZXJ2bGV0LW1hcHBpbmc+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+Q2FsY3VsYXRvcjwvc2VydmxldC1uYW1lPgorICAgICAgICA8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvQ2FsY3VsYXRvclNlcnZpY2U8L3VybC1wYXR0ZXJuPgorICAgIDwvc2VydmxldC1tYXBwaW5nPgogCi0JPHNlc3Npb24tY29uZmlnPgotCQk8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+Ci0JPC9zZXNzaW9uLWNvbmZpZz4KKyAgICA8c2Vzc2lvbi1jb25maWc+CisgICAgICAgIDxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KKyAgICA8L3Nlc3Npb24tY29uZmlnPgogCiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYnJvbGxiYWNrL3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJyb2xsYmFjay93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGIyM2YwZmIuLjlmMDBhY2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYnJvbGxiYWNrL3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpicm9sbGJhY2svd2ViY2xpZW50L2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzYsOCArMzYsOCBAQAogICAgICAgIEhlbGxvRUpCU2VydmljZSBzZXJ2aWNlOwogICAgICAgIEBSZXNvdXJjZShtYXBwZWROYW1lPSJqZGJjL19fZGVmYXVsdCIpIHByaXZhdGUgRGF0YVNvdXJjZSBkczsKIAotICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkgCi0JCXRocm93cyBqYWthcnRhLnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7CisgICAgICAgcHVibGljIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKQorICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICAgICBkb1Bvc3QocmVxLCByZXNwKTsKICAgICAgICB9CiAKQEAgLTQ1LDI2ICs0NSwyNiBAQAogICAgICAgICAgICAgICB0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewogICAgICAgICAgICAgVXNlclRyYW5zYWN0aW9uIHV0ID0gbnVsbDsKICAgICAgICAgICAgIC8vIENyZWF0ZSBUYWJsZSB3aXRoIG5hbWUgQ1VTVE9NRVJfcmIuIFRoaXMgbmFtZSB3aWxsIGJlIHVzZWQgaW4gdGhlIEVKQgotCSAgICBTdHJpbmcgdGFibGVOYW1lID0gIkNVU1RPTUVSX3JiIjsKKyAgICAgICAgU3RyaW5nIHRhYmxlTmFtZSA9ICJDVVNUT01FUl9yYiI7CiAgICAgICAgICAgICB0cnkgewotCSAgICAgICAgQ29ubmVjdGlvbiBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JCWNvbi5zZXRBdXRvQ29tbWl0KHRydWUpOwotCSAgICAgICAgY3JlYXRlVGFibGUoY29uLCB0YWJsZU5hbWUpOworICAgICAgICAgICAgQ29ubmVjdGlvbiBjb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7CisgICAgICAgIGNvbi5zZXRBdXRvQ29tbWl0KHRydWUpOworICAgICAgICAgICAgY3JlYXRlVGFibGUoY29uLCB0YWJsZU5hbWUpOwogICAgICAgICAgICAgICAgIHV0ID0gKFVzZXJUcmFuc2FjdGlvbikgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmNvbXAvVXNlclRyYW5zYWN0aW9uIik7CiAgICAgICAgICAgICAgICAgdXQuYmVnaW4oKTsKIAogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFNlcnZpY2UgaXMgOiIgKyBzZXJ2aWNlKTsKLQkJSGVsbG8gcG9ydCA9IHNlcnZpY2UuZ2V0SGVsbG9FSkJQb3J0KCk7Ci0gICAgICAgICAgICAgICAgCi0JCVN0cmluZyByZXQgPSBwb3J0LnNheUhlbGxvKCJBcHBzZXJ2ZXIgVGVzdGVyICEiKTsKKyAgICAgICAgSGVsbG8gcG9ydCA9IHNlcnZpY2UuZ2V0SGVsbG9FSkJQb3J0KCk7CisKKyAgICAgICAgU3RyaW5nIHJldCA9IHBvcnQuc2F5SGVsbG8oIkFwcHNlcnZlciBUZXN0ZXIgISIpOwogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmV0dXJuIHZhbHVlIGZyb20gd2Vic2VydmljZToiK3JldCk7CiAKLQkJaWYodXQuZ2V0U3RhdHVzKCkgIT0gU3RhdHVzLlNUQVRVU19NQVJLRURfUk9MTEJBQ0spIHsKKyAgICAgICAgaWYodXQuZ2V0U3RhdHVzKCkgIT0gU3RhdHVzLlNUQVRVU19NQVJLRURfUk9MTEJBQ0spIHsKICAgICAgICAgICAgICAgICAgICAgcmV0ICs9ICJGQUlMRUQiOwotCQl9Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiKioqKiByb2xsYmFja2luZyB0cmFuc2FjdGlvbiIpOwotCQl1dC5yb2xsYmFjaygpOwotCQlpZihpc0RhdGFQcmVzZW50KGNvbiwgdGFibGVOYW1lKSkgeworICAgICAgICB9CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKiByb2xsYmFja2luZyB0cmFuc2FjdGlvbiIpOworICAgICAgICB1dC5yb2xsYmFjaygpOworICAgICAgICBpZihpc0RhdGFQcmVzZW50KGNvbiwgdGFibGVOYW1lKSkgewogICAgICAgICAgICAgICAgICAgICByZXQgKz0gIkZBSUxFRCI7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IHJlc3AuZ2V0V3JpdGVyKCk7CkBAIC04MCwxNSArODAsMTUgQEAKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiWyIgKyByZXQgKyAiXSIpOwogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCI8L2JvZHk+Iik7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvaHRtbD4iKTsKLQkJZHJvcFRhYmxlKGNvbiwgdGFibGVOYW1lKTsKKyAgICAgICAgZHJvcFRhYmxlKGNvbiwgdGFibGVOYW1lKTsKICAgICAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotCSAgICB9CisgICAgICAgIH0KICAgICAgICB9CiAKICAgICAgICAvLyB1c2UgdGhpcyB0YWJsZSBpbiB0aGUgRUpCIHdlYnNlcnZpY2UKICAgICAgICBwcml2YXRlIHZvaWQgY3JlYXRlVGFibGUoQ29ubmVjdGlvbiBjb24sIFN0cmluZyB0YWJsZU5hbWUpIHRocm93cyBFeGNlcHRpb24gewotCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKiogYXV0byBjb21taXQgPSAiICsgY29uLmdldEF1dG9Db21taXQoKSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKiBhdXRvIGNvbW1pdCA9ICIgKyBjb24uZ2V0QXV0b0NvbW1pdCgpKTsKICAgICAgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHBTdG10ID0KICAgICAgICAgICAgIGNvbi5wcmVwYXJlU3RhdGVtZW50KCJDUkVBVEUgVEFCTEUgIit0YWJsZU5hbWUrIiAoTkFNRSBWQVJDSEFSKDMwKSBOT1QgTlVMTCBQUklNQVJZIEtFWSwgRU1BSUwgVkFSQ0hBUigzMCkpIik7CiAgICAgICAgICAgICBwU3RtdC5leGVjdXRlVXBkYXRlKCk7CkBAIC0xMDEsMTUgKzEwMSwxNSBAQAogCiAgICAgICAgLy8gQ2hlY2sgd2hldGhlciB0aGUgRUpCIHdlYnNlcnZpY2UgaGFzIHVwZGF0ZWQgdGhlIGRhdGEgaW4gdGhlIHRhYmxlLgogICAgICAgIHByaXZhdGUgYm9vbGVhbiBpc0RhdGFQcmVzZW50KENvbm5lY3Rpb24gY29uLCBTdHJpbmcgdGFibGVOYW1lKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcFN0bXQgPSBjb24ucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIE5BTUUsIEVNQUlMIEZST00gIit0YWJsZU5hbWUpOwotCSAgICBSZXN1bHRTZXQgcnMgPSBwU3RtdC5leGVjdXRlUXVlcnkoKTsKLQkgICAgd2hpbGUocnMubmV4dCgpKSB7Ci0JCVN0cmluZyBkYl9OYW1lICA9IHJzLmdldFN0cmluZygxKTsKLQkJU3RyaW5nIGRiX0VtYWlsID0gcnMuZ2V0U3RyaW5nKDIpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIk5BTUU9IitkYl9OYW1lKyIsIEVNQUlMPSIrZGJfRW1haWwpOwotCQlycy5jbG9zZSgpOwotCQlyZXR1cm4gdHJ1ZTsKLQkgICAgfQotCSAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFByZXBhcmVkU3RhdGVtZW50IHBTdG10ID0gY29uLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBOQU1FLCBFTUFJTCBGUk9NICIrdGFibGVOYW1lKTsKKyAgICAgICAgUmVzdWx0U2V0IHJzID0gcFN0bXQuZXhlY3V0ZVF1ZXJ5KCk7CisgICAgICAgIHdoaWxlKHJzLm5leHQoKSkgeworICAgICAgICBTdHJpbmcgZGJfTmFtZSAgPSBycy5nZXRTdHJpbmcoMSk7CisgICAgICAgIFN0cmluZyBkYl9FbWFpbCA9IHJzLmdldFN0cmluZygyKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJOQU1FPSIrZGJfTmFtZSsiLCBFTUFJTD0iK2RiX0VtYWlsKTsKKyAgICAgICAgcnMuY2xvc2UoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYnJvbGxiYWNrMS9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpicm9sbGJhY2sxL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggMDMzMTYyNC4uOTBkODQ1MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpicm9sbGJhY2sxL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpicm9sbGJhY2sxL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ianNyMjA4LWludGVncmF0aW9uIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSIuL3dlYi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9Ii4vc3VuLXdlYi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYnJvbGxiYWNrMS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJyb2xsYmFjazEvYnVpbGQueG1sCmluZGV4IGMxNjlkMjEuLjA1ZWNkMWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYnJvbGxiYWNrMS9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpicm9sbGJhY2sxL2J1aWxkLnhtbApAQCAtMTA1LDcgKzEwNSw3IEBACiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktYXBwIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY2xpZW50Ii8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95LWNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGVjaG8gbWVzc2FnZT0iVW5kZXBsb3lpbmcgY2xpZW50IGFwcGxpY2F0aW9uIi8+CiAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke0FTQURNSU59Ij4KQEAgLTEzMiw4ICsxMzIsOCBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJydW50ZXN0IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiLz4KLSAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIgCi0gICAgICAgICAgICBjbGFzc3BhdGg9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIiAKKyAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgICAgICBpbmNsdWRlcz0iY2xpZW50LyoqIi8+CiAgICAgICA8dW5qYXIgc3JjPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphciIgZGVzdD0iJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50Ii8+CiAgICAgICA8amF2YSBjbGFzc25hbWU9ImNsaWVudC5UZXN0Q2xpZW50Ij4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYnJvbGxiYWNrMS9jbGllbnQtc3VuLXdlYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJyb2xsYmFjazEvY2xpZW50LXN1bi13ZWIueG1sCmluZGV4IGQ0M2U3MGYuLjkwYWVmZjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYnJvbGxiYWNrMS9jbGllbnQtc3VuLXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpicm9sbGJhY2sxL2NsaWVudC1zdW4td2ViLnhtbApAQCAtMjQsMTUgKzI0LDE1IEBACiAgIDxzZXJ2aWNlLXJlZj4KICAgICA8c2VydmljZS1yZWYtbmFtZT5zdW4td2ViLnNlcnZpY2VyZWYvSGVsbG9FSkJTZXJ2aWNlPC9zZXJ2aWNlLXJlZi1uYW1lPgogICAgIDxwb3J0LWluZm8+Ci0JPHNlcnZpY2UtZW5kcG9pbnQtaW50ZXJmYWNlPmVuZHBvaW50LmVqYi5IZWxsbzwvc2VydmljZS1lbmRwb2ludC1pbnRlcmZhY2U+Ci0JPHdzZGwtcG9ydD4KLSAgICAJICA8bmFtZXNwYWNlVVJJPmh0dHA6Ly9lbmRwb2ludC9lamI8L25hbWVzcGFjZVVSST4KLSAgICAJICA8bG9jYWxwYXJ0PkhlbGxvRUpCUG9ydDwvbG9jYWxwYXJ0PgotCTwvd3NkbC1wb3J0PgotICAgIAk8c3R1Yi1wcm9wZXJ0eT4KLQkgIDxuYW1lPmpiaS1lbmFibGVkPC9uYW1lPgotCSAgPHZhbHVlPnRydWU8L3ZhbHVlPgotCTwvc3R1Yi1wcm9wZXJ0eT4KKyAgICA8c2VydmljZS1lbmRwb2ludC1pbnRlcmZhY2U+ZW5kcG9pbnQuZWpiLkhlbGxvPC9zZXJ2aWNlLWVuZHBvaW50LWludGVyZmFjZT4KKyAgICA8d3NkbC1wb3J0PgorICAgICAgICAgIDxuYW1lc3BhY2VVUkk+aHR0cDovL2VuZHBvaW50L2VqYjwvbmFtZXNwYWNlVVJJPgorICAgICAgICAgIDxsb2NhbHBhcnQ+SGVsbG9FSkJQb3J0PC9sb2NhbHBhcnQ+CisgICAgPC93c2RsLXBvcnQ+CisgICAgICAgIDxzdHViLXByb3BlcnR5PgorICAgICAgPG5hbWU+amJpLWVuYWJsZWQ8L25hbWU+CisgICAgICA8dmFsdWU+dHJ1ZTwvdmFsdWU+CisgICAgPC9zdHViLXByb3BlcnR5PgogICAgIDwvcG9ydC1pbmZvPgogICAgIDx3c2RsLW92ZXJyaWRlPmh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9IZWxsb0VKQlNlcnZpY2UvSGVsbG9FSkI/V1NETDwvd3NkbC1vdmVycmlkZT4KICAgPC9zZXJ2aWNlLXJlZj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYnJvbGxiYWNrMS9jbGllbnQtd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYnJvbGxiYWNrMS9jbGllbnQtd2ViLnhtbAppbmRleCA1YWMyNjQ5Li5jZDk1OGE5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJyb2xsYmFjazEvY2xpZW50LXdlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpicm9sbGJhY2sxL2NsaWVudC13ZWIueG1sCkBAIC0yMCw3ICsyMCw3IEBACiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgogICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgotICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUgCisgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZQogICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlL3dlYi1hcHBfMl81LnhzZCI+CiAgIDxkZXNjcmlwdGlvbj5BIHRlc3QgYXBwbGljYXRpb248L2Rlc2NyaXB0aW9uPgogICA8ZGlzcGxheS1uYW1lPldlYlRpZXI8L2Rpc3BsYXktbmFtZT4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYnJvbGxiYWNrMS9jbGllbnQvVGVzdENsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpicm9sbGJhY2sxL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKaW5kZXggMjkzYjgxNy4uYmU5ZDI1ZSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpicm9sbGJhY2sxL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpicm9sbGJhY2sxL2NsaWVudC9UZXN0Q2xpZW50LmphdmEKQEAgLTQ4LDcgKzQ4LDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGludCBjb2RlID0gaW52b2tlU2VydmxldCh1cmwpOwogICAgICAgICAgICAgcmVwb3J0KGNvZGUpOwotCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0KQEAgLTY1LDkgKzY1LDkgQEAKICAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgbG9nKGxpbmUpOwogICAgICAgICAgICAgaWYobGluZS5pbmRleE9mKCJTbyB0aGUgUkVTVUxUIE9GIEVKQiB3ZWJzZXJ2aWNlIElTIikgIT0gLTEpCi0JCWZvdW5kMSA9IHRydWU7CisgICAgICAgIGZvdW5kMSA9IHRydWU7CiAgICAgICAgICAgICBpZihsaW5lLmluZGV4T2YoIltXZWJTdmNUZXN0LUhlbGxvIEFwcHNlcnZlciBUZXN0ZXIgIV0iKSAhPSAtMSkKLQkJZm91bmQyID0gdHJ1ZTsKKyAgICAgICAgZm91bmQyID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY29kZTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJyb2xsYmFjazEvZW5kcG9pbnQvZWpiL0hlbGxvLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJyb2xsYmFjazEvZW5kcG9pbnQvZWpiL0hlbGxvLmphdmEKaW5kZXggMjMxNjdlYi4uOTA3MzkzMyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpicm9sbGJhY2sxL2VuZHBvaW50L2VqYi9IZWxsby5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYnJvbGxiYWNrMS9lbmRwb2ludC9lamIvSGVsbG8uamF2YQpAQCAtMjIsNSArMjIsNSBAQAogdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZW5kcG9pbnQvZWpiIikKIHB1YmxpYyBpbnRlcmZhY2UgSGVsbG8gewogCi0JcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgd2hvKTsKKyAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyB3aG8pOwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpicm9sbGJhY2sxL2VuZHBvaW50L2VqYi9IZWxsb0VKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpicm9sbGJhY2sxL2VuZHBvaW50L2VqYi9IZWxsb0VKQi5qYXZhCmluZGV4IDhkMjQ2OGQuLjQ5NGVjODEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYnJvbGxiYWNrMS9lbmRwb2ludC9lamIvSGVsbG9FSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJyb2xsYmFjazEvZW5kcG9pbnQvZWpiL0hlbGxvRUpCLmphdmEKQEAgLTM1LDM5ICszNSwzOSBAQAogCiAgICAgQFRyYW5zYWN0aW9uQXR0cmlidXRlKFRyYW5zYWN0aW9uQXR0cmlidXRlVHlwZS5SRVFVSVJFRCkKICAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyB3aG8pIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIioqKiogRUpCIENhbGxlZCIpOwotCUNvbm5lY3Rpb24gY29uPW51bGw7Ci0JU3RyaW5nIHRhYmxlTmFtZSA9ICJDVVNUT01FUl9yYjEiOwotCVN0cmluZyBuYW1lRW50cnkgPSAiVmlrYXMiOwotCVN0cmluZyBlbWFpbEVudHJ5PSAidmlrYXNAc3VuLmNvbSI7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqIEVKQiBDYWxsZWQiKTsKKyAgICBDb25uZWN0aW9uIGNvbj1udWxsOworICAgIFN0cmluZyB0YWJsZU5hbWUgPSAiQ1VTVE9NRVJfcmIxIjsKKyAgICBTdHJpbmcgbmFtZUVudHJ5ID0gIlZpa2FzIjsKKyAgICBTdHJpbmcgZW1haWxFbnRyeT0gInZpa2FzQHN1bi5jb20iOwogCi0JdHJ5IHsKLQljb24gPSBkcy5nZXRDb25uZWN0aW9uKCk7Ci0JU3lzdGVtLm91dC5wcmludGxuKCIqKioqIGF1dG8gY29tbWl0ID0gIiArIGNvbi5nZXRBdXRvQ29tbWl0KCkpOworICAgIHRyeSB7CisgICAgY29uID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKiBhdXRvIGNvbW1pdCA9ICIgKyBjb24uZ2V0QXV0b0NvbW1pdCgpKTsKIAotCXVwZGF0ZVRhYmxlKGNvbiwgdGFibGVOYW1lLCBuYW1lRW50cnksIGVtYWlsRW50cnkpOwotCXJlYWREYXRhKGNvbiwgdGFibGVOYW1lKTsKKyAgICB1cGRhdGVUYWJsZShjb24sIHRhYmxlTmFtZSwgbmFtZUVudHJ5LCBlbWFpbEVudHJ5KTsKKyAgICByZWFkRGF0YShjb24sIHRhYmxlTmFtZSk7CiAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihleCk7CiAgICAgICAgIH0gZmluYWxseSB7Ci0JICAgIHRyeSB7Ci0JICAgIGlmKGNvbiAhPSBudWxsKSBjb24uY2xvc2UoKTsKLQkgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIHNlKSB7fQotCX0KLQkvL2N0eC5zZXRSb2xsYmFja09ubHkoKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgaWYoY29uICE9IG51bGwpIGNvbi5jbG9zZSgpOworICAgICAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gc2UpIHt9CisgICAgfQorICAgIC8vY3R4LnNldFJvbGxiYWNrT25seSgpOwogICAgICAgICByZXR1cm4gIldlYlN2Y1Rlc3QtSGVsbG8gIiArIHdobzsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgdXBkYXRlVGFibGUoQ29ubmVjdGlvbiBjb24sIFN0cmluZyB0YWJsZU5hbWUsIFN0cmluZyBuYW1lLCBTdHJpbmcgZW1haWwpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwU3RtdCA9IAorICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwU3RtdCA9CiAgICAgICAgICAgICAgY29uLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPICIrIHRhYmxlTmFtZSArIiAoTkFNRSwgRU1BSUwpIFZBTFVFUyg/LD8pIik7Ci0JcFN0bXQuc2V0U3RyaW5nKDEsIG5hbWUpOwotCXBTdG10LnNldFN0cmluZygyLCBlbWFpbCk7CisgICAgcFN0bXQuc2V0U3RyaW5nKDEsIG5hbWUpOworICAgIHBTdG10LnNldFN0cmluZygyLCBlbWFpbCk7CiAgICAgICAgIHBTdG10LmV4ZWN1dGVVcGRhdGUoKTsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgcmVhZERhdGEoQ29ubmVjdGlvbiBjb24sIFN0cmluZyB0YWJsZU5hbWUpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwU3RtdCA9IAorICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwU3RtdCA9CiAgICAgICAgICAgICAgY29uLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBOQU1FLCBFTUFJTCBGUk9NICIrdGFibGVOYW1lKTsKICAgICAgICAgUmVzdWx0U2V0IHJzID0gcFN0bXQuZXhlY3V0ZVF1ZXJ5KCk7CiAgICAgICAgIHdoaWxlKHJzLm5leHQoKSl7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL2piaS1zZXJ2aWNlZW5naW5lL3RyYW5zYWN0aW9ucy9qc2Vfb25seV9lamJyb2xsYmFjazEvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYnJvbGxiYWNrMS93ZWIueG1sCmluZGV4IDA3ZTE0NzcuLjc5OGM2OWIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYnJvbGxiYWNrMS93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYnJvbGxiYWNrMS93ZWIueG1sCkBAIC0xOCwzMCArMTgsMzAgQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKLQkJCWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgorICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKKyAgICAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgogCi0JPGRlc2NyaXB0aW9uPldlYlRpZXIgZm9yIHRoZSBDYWxjdWxhdG9yIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCTxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldBUjwvZGlzcGxheS1uYW1lPgorICAgIDxkZXNjcmlwdGlvbj5XZWJUaWVyIGZvciB0aGUgQ2FsY3VsYXRvciBTZXJ2aWNlPC9kZXNjcmlwdGlvbj4KKyAgICA8ZGlzcGxheS1uYW1lPkNhbGN1bGF0b3JXQVI8L2Rpc3BsYXktbmFtZT4KIAotCTxzZXJ2bGV0PgotCQk8ZGVzY3JpcHRpb24+RW5kcG9pbnQgZm9yIENhbGN1bGF0b3IgV2ViIFNlcnZpY2U8L2Rlc2NyaXB0aW9uPgotCQk8ZGlzcGxheS1uYW1lPkNhbGN1bGF0b3JXZWJTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+Ci0JCTxzZXJ2bGV0LW5hbWU+Q2FsY3VsYXRvcjwvc2VydmxldC1uYW1lPgotCQk8c2VydmxldC1jbGFzcz5lbmRwb2ludC5DYWxjdWxhdG9yPC9zZXJ2bGV0LWNsYXNzPgotCQk8bG9hZC1vbi1zdGFydHVwPjA8L2xvYWQtb24tc3RhcnR1cD4KLQk8L3NlcnZsZXQ+CisgICAgPHNlcnZsZXQ+CisgICAgICAgIDxkZXNjcmlwdGlvbj5FbmRwb2ludCBmb3IgQ2FsY3VsYXRvciBXZWIgU2VydmljZTwvZGVzY3JpcHRpb24+CisgICAgICAgIDxkaXNwbGF5LW5hbWU+Q2FsY3VsYXRvcldlYlNlcnZpY2U8L2Rpc3BsYXktbmFtZT4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5DYWxjdWxhdG9yPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDxzZXJ2bGV0LWNsYXNzPmVuZHBvaW50LkNhbGN1bGF0b3I8L3NlcnZsZXQtY2xhc3M+CisgICAgICAgIDxsb2FkLW9uLXN0YXJ0dXA+MDwvbG9hZC1vbi1zdGFydHVwPgorICAgIDwvc2VydmxldD4KIAotCTxzZXJ2bGV0LW1hcHBpbmc+Ci0JCTxzZXJ2bGV0LW5hbWU+Q2FsY3VsYXRvcjwvc2VydmxldC1uYW1lPgotCQk8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvQ2FsY3VsYXRvclNlcnZpY2U8L3VybC1wYXR0ZXJuPgotCTwvc2VydmxldC1tYXBwaW5nPgorICAgIDxzZXJ2bGV0LW1hcHBpbmc+CisgICAgICAgIDxzZXJ2bGV0LW5hbWU+Q2FsY3VsYXRvcjwvc2VydmxldC1uYW1lPgorICAgICAgICA8dXJsLXBhdHRlcm4+L3dlYnNlcnZpY2UvQ2FsY3VsYXRvclNlcnZpY2U8L3VybC1wYXR0ZXJuPgorICAgIDwvc2VydmxldC1tYXBwaW5nPgogCi0JPHNlc3Npb24tY29uZmlnPgotCQk8c2Vzc2lvbi10aW1lb3V0PjU0PC9zZXNzaW9uLXRpbWVvdXQ+Ci0JPC9zZXNzaW9uLWNvbmZpZz4KKyAgICA8c2Vzc2lvbi1jb25maWc+CisgICAgICAgIDxzZXNzaW9uLXRpbWVvdXQ+NTQ8L3Nlc3Npb24tdGltZW91dD4KKyAgICA8L3Nlc3Npb24tY29uZmlnPgogCiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvamJpLXNlcnZpY2VlbmdpbmUvdHJhbnNhY3Rpb25zL2pzZV9vbmx5X2VqYnJvbGxiYWNrMS93ZWJjbGllbnQvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpicm9sbGJhY2sxL3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggNDQyODZjYi4uNTJjNWJlNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpicm9sbGJhY2sxL3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9qYmktc2VydmljZWVuZ2luZS90cmFuc2FjdGlvbnMvanNlX29ubHlfZWpicm9sbGJhY2sxL3dlYmNsaWVudC9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTM2LDggKzM2LDggQEAKICAgICAgICBIZWxsb0VKQlNlcnZpY2Ugc2VydmljZTsKICAgICAgICBAUmVzb3VyY2UobWFwcGVkTmFtZT0iamRiYy9fX2RlZmF1bHQiKSBwcml2YXRlIERhdGFTb3VyY2UgZHM7CiAKLSAgICAgICBwdWJsaWMgdm9pZCBkb0dldChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3ApIAotCQl0aHJvd3MgamFrYXJ0YS5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24geworICAgICAgIHB1YmxpYyB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkKKyAgICAgICAgdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgICAgZG9Qb3N0KHJlcSwgcmVzcCk7CiAgICAgICAgfQogCkBAIC00NSwyNSArNDUsMjUgQEAKICAgICAgICAgICAgICAgdGhyb3dzIGpha2FydGEuc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKICAgICAgICAgICAgIFVzZXJUcmFuc2FjdGlvbiB1dCA9IG51bGw7CiAgICAgICAgICAgICAvLyBDcmVhdGUgVGFibGUgd2l0aCBuYW1lIENVU1RPTUVSX3JiMS4gVGhpcyBuYW1lIHdpbGwgYmUgdXNlZCBpbiB0aGUgRUpCCi0JICAgIFN0cmluZyB0YWJsZU5hbWUgPSAiQ1VTVE9NRVJfcmIxIjsKKyAgICAgICAgU3RyaW5nIHRhYmxlTmFtZSA9ICJDVVNUT01FUl9yYjEiOwogICAgICAgICAgICAgU3RyaW5nW10gbmFtZXMgPSB7IlZpa2FzIiwgIlZpa2FzQXdhc3RoaSJ9OwogICAgICAgICAgICAgU3RyaW5nW10gZW1haWxzPSB7InZpa2FzQHN1bi5jb20iLCAiVmlrYXNBQHN1bi5jb20ifTsKICAgICAgICAgICAgIHRyeSB7Ci0JICAgICAgICBDb25uZWN0aW9uIGNvbiA9IGRzLmdldENvbm5lY3Rpb24oKTsKLQkgICAgICAgIGNyZWF0ZVRhYmxlKGNvbiwgdGFibGVOYW1lKTsKKyAgICAgICAgICAgIENvbm5lY3Rpb24gY29uID0gZHMuZ2V0Q29ubmVjdGlvbigpOworICAgICAgICAgICAgY3JlYXRlVGFibGUoY29uLCB0YWJsZU5hbWUpOwogICAgICAgICAgICAgICAgIHV0ID0gKFVzZXJUcmFuc2FjdGlvbikgbmV3IEluaXRpYWxDb250ZXh0KCkubG9va3VwKCJqYXZhOmNvbXAvVXNlclRyYW5zYWN0aW9uIik7CiAgICAgICAgICAgICAgICAgdXQuYmVnaW4oKTsKIAotCQl1cGRhdGVUYWJsZShjb24sIHRhYmxlTmFtZSwgbmFtZXNbMV0sIGVtYWlsc1sxXSk7CisgICAgICAgIHVwZGF0ZVRhYmxlKGNvbiwgdGFibGVOYW1lLCBuYW1lc1sxXSwgZW1haWxzWzFdKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBTZXJ2aWNlIGlzIDoiICsgc2VydmljZSk7Ci0JCUhlbGxvIHBvcnQgPSBzZXJ2aWNlLmdldEhlbGxvRUpCUG9ydCgpOwotICAgICAgICAgICAgICAgIAotCQlTdHJpbmcgcmV0ID0gcG9ydC5zYXlIZWxsbygiQXBwc2VydmVyIFRlc3RlciAhIik7CisgICAgICAgIEhlbGxvIHBvcnQgPSBzZXJ2aWNlLmdldEhlbGxvRUpCUG9ydCgpOworCisgICAgICAgIFN0cmluZyByZXQgPSBwb3J0LnNheUhlbGxvKCJBcHBzZXJ2ZXIgVGVzdGVyICEiKTsKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJldHVybiB2YWx1ZSBmcm9tIHdlYnNlcnZpY2U6IityZXQpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIioqKiogcm9sbGJhY2tpbmcgdHJhbnNhY3Rpb24iKTsKLQkJdXQucm9sbGJhY2soKTsKLQkJCi0JCWlmKGlzRGF0YVByZXNlbnQoY29uLCB0YWJsZU5hbWUpKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKiByb2xsYmFja2luZyB0cmFuc2FjdGlvbiIpOworICAgICAgICB1dC5yb2xsYmFjaygpOworCisgICAgICAgIGlmKGlzRGF0YVByZXNlbnQoY29uLCB0YWJsZU5hbWUpKSB7CiAgICAgICAgICAgICAgICAgICAgIHJldCArPSAiRkFJTEVEIjsKICAgICAgICAgICAgICAgICB9CiAKQEAgLTgwLDMwICs4MCwzMCBAQAogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCJbIiArIHJldCArICJdIik7CiAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjwvYm9keT4iKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiPC9odG1sPiIpOwotCQlkcm9wVGFibGUoY29uLCB0YWJsZU5hbWUpOworICAgICAgICBkcm9wVGFibGUoY29uLCB0YWJsZU5hbWUpOwogICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICAgIH0KKyAgICAgICAgfQogICAgICAgIH0KIAogICAgICAgIC8vIHVzZSB0aGlzIHRhYmxlIGluIHRoZSBFSkIgd2Vic2VydmljZQogICAgICAgIHByaXZhdGUgdm9pZCBjcmVhdGVUYWJsZShDb25uZWN0aW9uIGNvbiwgU3RyaW5nIHRhYmxlTmFtZSkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JICAgIC8vIGF1dG9jb21taXQgaXMgbWFkZSB0cnVlIHNvIHRoYXQgdGhlIHRhYmxlIGlzIGNyZWF0ZWQgaW1tZWRpYXRlbHkKLQkgICAgYm9vbGVhbiBhdXRvQ29tbWl0ID0gY29uLmdldEF1dG9Db21taXQoKTsKLQkgICAgY29uLnNldEF1dG9Db21taXQodHJ1ZSk7Ci0JICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqKiBhdXRvIGNvbW1pdCA9ICIgKyBjb24uZ2V0QXV0b0NvbW1pdCgpKTsKKyAgICAgICAgLy8gYXV0b2NvbW1pdCBpcyBtYWRlIHRydWUgc28gdGhhdCB0aGUgdGFibGUgaXMgY3JlYXRlZCBpbW1lZGlhdGVseQorICAgICAgICBib29sZWFuIGF1dG9Db21taXQgPSBjb24uZ2V0QXV0b0NvbW1pdCgpOworICAgICAgICBjb24uc2V0QXV0b0NvbW1pdCh0cnVlKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIqKioqIGF1dG8gY29tbWl0ID0gIiArIGNvbi5nZXRBdXRvQ29tbWl0KCkpOwogICAgICAgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcFN0bXQgPQogICAgICAgICAgICAgY29uLnByZXBhcmVTdGF0ZW1lbnQoIkNSRUFURSBUQUJMRSAiK3RhYmxlTmFtZSsiIChOQU1FIFZBUkNIQVIoMzApIE5PVCBOVUxMIFBSSU1BUlkgS0VZLCBFTUFJTCBWQVJDSEFSKDMwKSkiKTsKICAgICAgICAgICAgIHBTdG10LmV4ZWN1dGVVcGRhdGUoKTsKLQkgICAgY29uLnNldEF1dG9Db21taXQoYXV0b0NvbW1pdCk7CisgICAgICAgIGNvbi5zZXRBdXRvQ29tbWl0KGF1dG9Db21taXQpOwogICAgICAgIH0KIAogICAgICAgIHByaXZhdGUgdm9pZCBkcm9wVGFibGUoQ29ubmVjdGlvbiBjb24sIFN0cmluZyB0YWJsZU5hbWUpIHRocm93cyBFeGNlcHRpb24gewotCSAgICBib29sZWFuIGF1dG9Db21taXQgPSBjb24uZ2V0QXV0b0NvbW1pdCgpOwotCSAgICBjb24uc2V0QXV0b0NvbW1pdCh0cnVlKTsKKyAgICAgICAgYm9vbGVhbiBhdXRvQ29tbWl0ID0gY29uLmdldEF1dG9Db21taXQoKTsKKyAgICAgICAgY29uLnNldEF1dG9Db21taXQodHJ1ZSk7CiAgICAgICAgICAgICBQcmVwYXJlZFN0YXRlbWVudCBwU3RtdCA9IGNvbi5wcmVwYXJlU3RhdGVtZW50KCJEUk9QIFRBQkxFICIrdGFibGVOYW1lKTsKICAgICAgICAgICAgIHBTdG10LmV4ZWN1dGVVcGRhdGUoKTsKLQkgICAgY29uLnNldEF1dG9Db21taXQoYXV0b0NvbW1pdCk7CisgICAgICAgIGNvbi5zZXRBdXRvQ29tbWl0KGF1dG9Db21taXQpOwogICAgICAgIH0KIAogICAgICAgIC8vIENoZWNrIHdoZXRoZXIgdGhlIEVKQiB3ZWJzZXJ2aWNlIGhhcyB1cGRhdGVkIHRoZSBkYXRhIGluIHRoZSB0YWJsZS4KQEAgLTEyMCwxMiArMTIwLDEyIEBACiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogCi0gICAgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVRhYmxlKENvbm5lY3Rpb24gY29uLCBTdHJpbmcgdGFibGVOYW1lLCBTdHJpbmcgbmFtZSwgU3RyaW5nIGVtYWlsKSAKLQkJdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JICAgUHJlcGFyZWRTdGF0ZW1lbnQgcFN0bXQgPSAKLQkJY29uLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPICIrIHRhYmxlTmFtZSArIiAoTkFNRSwgRU1BSUwpIFZBTFVFUyg/LD8pIik7Ci0JICAgcFN0bXQuc2V0U3RyaW5nKDEsIG5hbWUpOwotCSAgIHBTdG10LnNldFN0cmluZygyLCBlbWFpbCk7Ci0JICAgcFN0bXQuZXhlY3V0ZVVwZGF0ZSgpOworICAgICAgIHByaXZhdGUgdm9pZCB1cGRhdGVUYWJsZShDb25uZWN0aW9uIGNvbiwgU3RyaW5nIHRhYmxlTmFtZSwgU3RyaW5nIG5hbWUsIFN0cmluZyBlbWFpbCkKKyAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgUHJlcGFyZWRTdGF0ZW1lbnQgcFN0bXQgPQorICAgICAgICBjb24ucHJlcGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gIisgdGFibGVOYW1lICsiIChOQU1FLCBFTUFJTCkgVkFMVUVTKD8sPykiKTsKKyAgICAgICBwU3RtdC5zZXRTdHJpbmcoMSwgbmFtZSk7CisgICAgICAgcFN0bXQuc2V0U3RyaW5nKDIsIGVtYWlsKTsKKyAgICAgICBwU3RtdC5leGVjdXRlVXBkYXRlKCk7CiAgICAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9tYXBwaW5nL2oydy9zaWduYXR1cmUvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvbWFwcGluZy9qMncvc2lnbmF0dXJlL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggN2JmYmE3OC4uMGFmZTcyMiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9tYXBwaW5nL2oydy9zaWduYXR1cmUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL21hcHBpbmcvajJ3L3NpZ25hdHVyZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMiArMTUsMjIgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InNpZ25hdHVyZSIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgCi0JdmFsdWU9IkNsaWVudCIvPgorPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50Ilx1MDAyMAorICAgIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWJzZXJ2aWNlcy54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYnNlcnZpY2VzLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWNsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL21hcHBpbmcvajJ3L3NpZ25hdHVyZS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL21hcHBpbmcvajJ3L3NpZ25hdHVyZS9idWlsZC54bWwKaW5kZXggYjU4Zjg3Ny4uZDViZWYwZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9tYXBwaW5nL2oydy9zaWduYXR1cmUvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvbWFwcGluZy9qMncvc2lnbmF0dXJlL2J1aWxkLnhtbApAQCAtMzMsOSArMzMsOSBAQAogCiAKICAgPHRhcmdldCBuYW1lPSJydW4ud3Njb21waWxlIj4KLQk8ZXhlYyBleGVjdXRhYmxlPSIke1dTQ09NUElMRX0iIGZhaWxvbmVycm9yPSJ0cnVlIiA+Ci0gICAgICAgIDxhcmcgbGluZT0iLXNvdXJjZSAxLjEuMiAke3dzY29tcGlsZS5jb21tYW5kfSIgLz4gICAgICAgIAotCTwvZXhlYz4KKyAgICA8ZXhlYyBleGVjdXRhYmxlPSIke1dTQ09NUElMRX0iIGZhaWxvbmVycm9yPSJ0cnVlIiA+CisgICAgICAgIDxhcmcgbGluZT0iLXNvdXJjZSAxLjEuMiAke3dzY29tcGlsZS5jb21tYW5kfSIgLz4KKyAgICA8L2V4ZWM+CiAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iIj4KQEAgLTUzLDExICs1MywxMSBAQAogICA8dGFyZ2V0IG5hbWU9IndzY29tcGlsZS1hcHBjbGllbnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8bWtkaXIgZGlyPSJvdXRwdXQiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi53c2NvbXBpbGUiPgotICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIiAKKyAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIKICAgICAgICB2YWx1ZT0iLWltcG9ydCAta2VlcCAtZCBvdXRwdXQgLXMgb3V0cHV0IC1jbGFzc3BhdGggLiAtbWFwcGluZyBTaWduYXR1cmVNYXBwaW5nX2FwcGNsaWVudC54bWwgLVhwcmludHN0YWNrdHJhY2UgLVhkZWJ1Z21vZGVsOmFwcGNsaWVudC5tb2RlbC50eHQgd3Njb21waWxlX2NvbmZpZ19hcHBjbGllbnQueG1sIi8+CiAgICAgPC9hbnRjYWxsPgogICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9zaWduYXR1cmUiPgotICAgICAgIDxmaWxlc2V0IGRpcj0ib3V0cHV0L3NpZ25hdHVyZSIgCisgICAgICAgPGZpbGVzZXQgZGlyPSJvdXRwdXQvc2lnbmF0dXJlIgogICAgICAgICBpbmNsdWRlcz0iU2lnbmF0dXJlVGVzdFNlcnZpY2UuY2xhc3MsIFNpZ25hdHVyZVRlc3QuY2xhc3MsIE15RGF0ZVZhbHVlVHlwZS5jbGFzcywgTXlTZWNvbmREYXRlVmFsdWVUeXBlLmNsYXNzIi8+CiAgICAgPC9jb3B5PgogPCEtLQpAQCAtNzAsNyArNzAsNyBAQAogICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InNpZ25hdHVyZWVqYiIvPgogICAgIDwvYW50Y2FsbD4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi53c2NvbXBpbGUiPgotICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIiAKKyAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIKICAgICAgICB2YWx1ZT0iLWRlZmluZSAtY2xhc3NwYXRoICR7YnVpbGQuY2xhc3Nlcy5kaXJ9IC1tYXBwaW5nIFNpZ25hdHVyZU1hcHBpbmdfZWpiLnhtbCAtWHByaW50c3RhY2t0cmFjZSAtWGRlYnVnbW9kZWw6ZWpiLm1vZGVsLnR4dCB3c2NvbXBpbGVfY29uZmlnX2VqYi54bWwiLz4KICAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgpAQCAtNzgsMjQgKzc4LDI0IEBACiAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUiIGRlcGVuZHM9ImluaXQtY29tbW9uLCBjb21waWxlIj4KICAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvd3NkbCIKICAgICAgIGZpbGU9IlNpZ25hdHVyZVRlc3RTZXJ2aWNlLndzZGwiLz4KLSAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIAotCSBmaWxlPSJTaWduYXR1cmVNYXBwaW5nX2FwcGNsaWVudC54bWwiLz4KKyAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCisgICAgIGZpbGU9IlNpZ25hdHVyZU1hcHBpbmdfYXBwY2xpZW50LnhtbCIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0iYXBwY2xpZW50LWphci1jb21tb24iPgotICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICB2YWx1ZT0iU2lnbmF0dXJlTWFwcGluZ19hcHBjbGllbnQueG1sLE1FVEEtSU5GL3dzZGwvKiosc2lnbmF0dXJlLyouY2xhc3MiIC8+CiAKICAgICA8L2FudGNhbGw+Ci0gICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiAKLQkgZmlsZT0iU2lnbmF0dXJlTWFwcGluZ19lamIueG1sIi8+CisgICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgorICAgICBmaWxlPSJTaWduYXR1cmVNYXBwaW5nX2VqYi54bWwiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVqYi1qYXItY29tbW9uIj4KLSAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgdmFsdWU9IlNpZ25hdHVyZU1hcHBpbmdfZWpiLnhtbCxNRVRBLUlORi93c2RsLyoqLHNpZ25hdHVyZWVqYi8qLmNsYXNzIiAvPgogCiAgICAgPC9hbnRjYWxsPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZWFyLWNvbW1vbiIgLz4KLSAgPC90YXJnZXQ+IAorICA8L3RhcmdldD4KIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC0xMTQsMTkgKzExNCwxOSBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVBQQ0xJRU5UfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KLSAgICAgICAgICA8YXJnIGxpbmU9Ii1jbGllbnQgJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHBDbGllbnQuamFyIi8+ICAgICAgCisgICAgICAgICAgPGFyZyBsaW5lPSItY2xpZW50ICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwQ2xpZW50LmphciIvPgogICAgICAgICAgIDxhcmcgbGluZT0iaHR0cDovLyR7aHR0cC5ob3N0fToke2h0dHAucG9ydH0vc2lnbmF0dXJlZWpiL1NpZ25hdHVyZVRlc3QiLz4KICAgICAgIDwvZXhlYz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gIAorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+Ci0JCVVzYWdlOgotCQkJYW50IGFsbCAoRXhlY3V0ZXMgdGhlIFdlYlNlcnZpY2VzIHRlc3QpCi0JPC9lY2hvPgorICAgIDxlY2hvPgorICAgICAgICBVc2FnZToKKyAgICAgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIHRoZSBXZWJTZXJ2aWNlcyB0ZXN0KQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvbWFwcGluZy9qMncvc2lnbmF0dXJlL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvbWFwcGluZy9qMncvc2lnbmF0dXJlL2NsaWVudC9DbGllbnQuamF2YQppbmRleCA4MGNhOTA4Li4xNzM4NDkwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL21hcHBpbmcvajJ3L3NpZ25hdHVyZS9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9tYXBwaW5nL2oydy9zaWduYXR1cmUvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0yOCwyNSArMjgsMjUgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KICAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwotICAgIAorCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigid2Vic2VydmljZXMtc2lnbmF0dXJlIik7CiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoYXJncyk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3ZWJzZXJ2aWNlcy1zaWduYXR1cmVJRCIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmdbXSBhcmdzKSB7Ci0gICAgCXRyeSB7CisgICAgICAgIHRyeSB7CiAKICAgICAgICAgICAgU3RyaW5nIHRhcmdldEVuZHBvaW50QWRkcmVzcyA9IGFyZ3NbMF07CiAKLQkgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICAgICAgICAgCisgICAgICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKKwogICAgICAgICAgICAgU2lnbmF0dXJlVGVzdFNlcnZpY2UgdGVzdFNlcnZpY2UgPQogICAgICAgICAgICAgICAgIChTaWduYXR1cmVUZXN0U2VydmljZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3NlcnZpY2Uvc2lnbmF0dXJlIik7CiAgICAgICAgICAgICBTaWduYXR1cmVUZXN0IHRlc3QgPSB0ZXN0U2VydmljZS5nZXRTaWduYXR1cmVUZXN0UG9ydCgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgICgoU3R1Yil0ZXN0KS5fc2V0UHJvcGVydHkoU3R1Yi5FTkRQT0lOVF9BRERSRVNTX1BST1BFUlRZLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRFbmRwb2ludEFkZHJlc3MpOwogCkBAIC01OCwxMyArNTgsMTMgQEAKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk1TRzogIiArIG1zZyk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoInNpZ25hdHVyZSBTRUkuc2F5SGVsbG8obXNnKSIsIHN0YXQuUEFTUyk7CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZTEpIHsKLQkJZTEucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIGUxLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJzaWduYXR1cmUgU0VJLnNheUhlbGxvKG1zZykiLCBzdGF0LkZBSUwpOwogICAgICAgICAgICAgfQogCiAKIC8qIHVuY29tbWVudCB0aGUgZm9sbG93aW5nIHdoZW4gdGhlIGRhdGUtPmNhbGVuZGFyIGlzIGRvbmUKLSAgICAgICAgICAgIE15U2Vjb25kRGF0ZVZhbHVlVHlwZSBkID0gCisgICAgICAgICAgICBNeVNlY29uZERhdGVWYWx1ZVR5cGUgZCA9CiAgICAgICAgICAgICAgICAgbmV3IE15U2Vjb25kRGF0ZVZhbHVlVHlwZShuZXcgamF2YS51dGlsLkdyZWdvcmlhbkNhbGVuZGFyKCksICJTdWNrIGl0IHVwIGFuZCBkbyBpdCEiKTsKICAgICAgICAgICAgIE15RGF0ZVZhbHVlVHlwZSBjID0gbmV3IE15RGF0ZVZhbHVlVHlwZSgpOwogICAgICAgICAgICAgYy5zZXREYXRlKG5ldyBqYXZhLnV0aWwuR3JlZ29yaWFuQ2FsZW5kYXIoKSk7CkBAIC04Myw3ICs4Myw3IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIHRlc3Quc2V0TXlEYXRlVmFsdWVUeXBlKGMpOwogICAgICAgICAgICAgICAgIE15RGF0ZVZhbHVlVHlwZSBkYXRlMiA9IHRlc3QuZ2V0TXlEYXRlVmFsdWVUeXBlKCk7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSRVRVUk5FRCBBTk9USEVSIExVQ0tZIERBVEUgPSAiIAorICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUkVUVVJORUQgQU5PVEhFUiBMVUNLWSBEQVRFID0gIgogICAgICAgICAgICAgICAgICAgICArIGRhdGUyLmdldERhdGUoKSArICI7IHdpdGggbWVzc2FnZSA9ICIgKyBkYXRlMi5nZXRXaGluZSgpKTsKICAgICAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygic2lnbmF0dXJlIFNFSS5zZXRWYWx1ZVR5cGVXaXRoRGF0ZSIsIHN0YXQuUEFTUyk7CiAKQEAgLTEwNywxMCArMTA3LDEwIEBACiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoInNpZ25hdHVyZSBTRUkuc2V0VmFsdWVUeXBlV2l0aERhdGVzIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KICovCi0gICAgCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigic2lnbmF0dXJlIGNsaWVudCB0ZXN0IGZhaWxlZCIpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygic2lnbmF0dXJlIGNsaWVudCBtYWluIiwgc3RhdC5GQUlMKTsKLQl9IAorICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL21hcHBpbmcvajJ3L3NpZ25hdHVyZS9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL21hcHBpbmcvajJ3L3NpZ25hdHVyZS9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwKaW5kZXggZmQzZjFhYi4uZGZmYWNiNiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9tYXBwaW5nL2oydy9zaWduYXR1cmUvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvbWFwcGluZy9qMncvc2lnbmF0dXJlL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbApAQCAtMjcsNiArMjcsNiBAQAogICAgIDx3c2RsLWZpbGU+TUVUQS1JTkYvd3NkbC9TaWduYXR1cmVUZXN0U2VydmljZS53c2RsPC93c2RsLWZpbGU+CiAgICAgPGpheHJwYy1tYXBwaW5nLWZpbGU+U2lnbmF0dXJlTWFwcGluZ19hcHBjbGllbnQueG1sPC9qYXhycGMtbWFwcGluZy1maWxlPgogICAgIDxzZXJ2aWNlLXFuYW1lIHhtbG5zOnNlcnZpY2Vucz0iaHR0cDovL3NpZ25hdHVyZS5vcmcvd3NkbCI+c2VydmljZW5zOlNpZ25hdHVyZVRlc3RTZXJ2aWNlCi0gICAgPC9zZXJ2aWNlLXFuYW1lPiAgICAgICAgICAgICAgIAorICAgIDwvc2VydmljZS1xbmFtZT4KICAgPC9zZXJ2aWNlLXJlZj4KIDwvYXBwbGljYXRpb24tY2xpZW50PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9tYXBwaW5nL2oydy9zaWduYXR1cmUvc2lnbmF0dXJlZWpiL015RGF0ZVZhbHVlVHlwZS5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9tYXBwaW5nL2oydy9zaWduYXR1cmUvc2lnbmF0dXJlZWpiL015RGF0ZVZhbHVlVHlwZS5qYXZhCmluZGV4IDY0ZjMwYjQuLjVjODY0ZGEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvbWFwcGluZy9qMncvc2lnbmF0dXJlL3NpZ25hdHVyZWVqYi9NeURhdGVWYWx1ZVR5cGUuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL21hcHBpbmcvajJ3L3NpZ25hdHVyZS9zaWduYXR1cmVlamIvTXlEYXRlVmFsdWVUeXBlLmphdmEKQEAgLTI1LDcgKzI1LDcgQEAKIAogICAgIHB1YmxpYyBNeURhdGVWYWx1ZVR5cGUoKSB7fQogCi0gICAgcHVibGljIE15RGF0ZVZhbHVlVHlwZShEYXRlIGRhdGUsIGphdmEubGFuZy5TdHJpbmcgd2hpbmUsIAorICAgIHB1YmxpYyBNeURhdGVWYWx1ZVR5cGUoRGF0ZSBkYXRlLCBqYXZhLmxhbmcuU3RyaW5nIHdoaW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE15U2Vjb25kRGF0ZVZhbHVlVHlwZVtdIGRhdGVzKSB7CiAgICAgICAgIHRoaXMuZGF0ZSA9IGRhdGU7CiAgICAgICAgIHRoaXMud2hpbmUgPSB3aGluZTsKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvbWFwcGluZy9qMncvc2lnbmF0dXJlL3NpZ25hdHVyZWVqYi9TaWduYXR1cmVFSkIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvbWFwcGluZy9qMncvc2lnbmF0dXJlL3NpZ25hdHVyZWVqYi9TaWduYXR1cmVFSkIuamF2YQppbmRleCAyNmZkNjEzLi5kNjBkM2ZhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL21hcHBpbmcvajJ3L3NpZ25hdHVyZS9zaWduYXR1cmVlamIvU2lnbmF0dXJlRUpCLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9tYXBwaW5nL2oydy9zaWduYXR1cmUvc2lnbmF0dXJlZWpiL1NpZ25hdHVyZUVKQi5qYXZhCkBAIC0xNyw3ICsxNyw3IEBACiBwYWNrYWdlIHNpZ25hdHVyZWVqYjsKIAogaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOwotaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsgCitpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25CZWFuOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0OwogaW1wb3J0IGpha2FydGEuZWpiLkVKQkV4Y2VwdGlvbjsKQEAgLTMzLDU1ICszMyw1NSBAQAogICAgIHByaXZhdGUgTXlEYXRlVmFsdWVUeXBlW10gbXlEYXRlczsKIAogICAgIHB1YmxpYyBTaWduYXR1cmVFSkIoKXt9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpZ25hdHVyZUVKQjo6ZWpiQ3JlYXRlICEhIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaWduYXR1cmVFSkI6OmVqYkNyZWF0ZSAhISIpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIFNldFRlc3REYXRlKGphdmEudXRpbC5EYXRlIHRlc3REYXRlKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaWduYXR1cmVFSkI6OnNldFRlc3REYXRlID0gIiArIHRlc3REYXRlKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpZ25hdHVyZUVKQjo6c2V0VGVzdERhdGUgPSAiICsgdGVzdERhdGUpOwogICAgICAgICBkYXRlID0gdGVzdERhdGU7CiAgICAgfQogCiAgICAgcHVibGljIGphdmEudXRpbC5EYXRlIEdldFRlc3REYXRlKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2lnbmF0dXJlRUpCOjpnZXRUZXN0RGF0ZSAhISIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2lnbmF0dXJlRUpCOjpnZXRUZXN0RGF0ZSAhISIpOwogICAgICAgICByZXR1cm4gZGF0ZTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRNeURhdGVWYWx1ZVR5cGUoTXlEYXRlVmFsdWVUeXBlIG15dGVzdGRhdGUpIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpZ25hdHVyZUVKQjo6c2V0TXlEYXRlVmFsdWVUeXBlOiBkYXRlID0gIiAKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpZ25hdHVyZUVKQjo6c2V0TXlEYXRlVmFsdWVUeXBlOiBkYXRlID0gIgogICAgICAgICAgICAgKyBteXRlc3RkYXRlLmdldERhdGUoKSArICIgOyB3aGluZSA9ICIgKyBteXRlc3RkYXRlLmdldFdoaW5lKCkpOwogICAgICAgICBteURhdGUgPSBteXRlc3RkYXRlOwogICAgIH0KIAogICAgIHB1YmxpYyBNeURhdGVWYWx1ZVR5cGUgZ2V0TXlEYXRlVmFsdWVUeXBlKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2lnbmF0dXJlRUpCOjpnZXRNeURhdGVWYWx1ZVR5cGUgISEiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpZ25hdHVyZUVKQjo6Z2V0TXlEYXRlVmFsdWVUeXBlICEhIik7CiAgICAgICAgIHJldHVybiBteURhdGU7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0TXlEYXRlVmFsdWVUeXBlcyhNeURhdGVWYWx1ZVR5cGVbXSBteXRlc3RkYXRlcykgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2lnbmF0dXJlRUpCOjpzZXRNeURhdGVWYWx1ZVR5cGVzOiBkYXRlcy5zaXplID0gIiAKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNpZ25hdHVyZUVKQjo6c2V0TXlEYXRlVmFsdWVUeXBlczogZGF0ZXMuc2l6ZSA9ICIKICAgICAgICAgICAgICsgbXl0ZXN0ZGF0ZXMubGVuZ3RoKTsKICAgICAgICAgbXlEYXRlcyA9IG15dGVzdGRhdGVzOwogICAgIH0KIAogICAgIHB1YmxpYyBNeURhdGVWYWx1ZVR5cGVbXSBnZXRNeURhdGVWYWx1ZVR5cGVzKCkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2lnbmF0dXJlRUpCOjpnZXRNeURhdGVWYWx1ZVR5cGVzICEhIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaWduYXR1cmVFSkI6OmdldE15RGF0ZVZhbHVlVHlwZXMgISEiKTsKICAgICAgICAgcmV0dXJuIG15RGF0ZXM7CiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyBTYXlIZWxsbyhTdHJpbmcgbXNnKSB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaWduYXR1cmVFSkI6OlNheUhlbGxvICEhIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaWduYXR1cmVFSkI6OlNheUhlbGxvICEhIik7CiAgICAgICAgIHJldHVybiAiSGVsbG8hICIgKyBtc2c7CiAgICAgfQotICAgICAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7CiAgICAgICAgIHRoaXMuc2MgPSBzYzsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHt9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHt9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7fQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9tYXBwaW5nL2oydy9zaWduYXR1cmUvd3Njb21waWxlX2NvbmZpZ19hcHBjbGllbnQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9tYXBwaW5nL2oydy9zaWduYXR1cmUvd3Njb21waWxlX2NvbmZpZ19hcHBjbGllbnQueG1sCmluZGV4IDg3MzJjM2MuLmNjNjk0ZGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvbWFwcGluZy9qMncvc2lnbmF0dXJlL3dzY29tcGlsZV9jb25maWdfYXBwY2xpZW50LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL21hcHBpbmcvajJ3L3NpZ25hdHVyZS93c2NvbXBpbGVfY29uZmlnX2FwcGNsaWVudC54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPGNvbmZpZ3VyYXRpb24KICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheC1ycGMvcmkvY29uZmlnIj4KLSAgPHdzZGwgCisgIDx3c2RsCiAgICAgICBsb2NhdGlvbj0iU2lnbmF0dXJlVGVzdFNlcnZpY2Uud3NkbCIKICAgICAgIHBhY2thZ2VOYW1lPSJzaWduYXR1cmUiLz4KIDwvY29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvbnMycGFja2FnZS93c2NvbXBpbGVfY29uZmlnX2VqYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL25zMnBhY2thZ2Uvd3Njb21waWxlX2NvbmZpZ19lamIueG1sCmluZGV4IGRlYWIxM2YuLjRhZmJmNWUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvbnMycGFja2FnZS93c2NvbXBpbGVfY29uZmlnX2VqYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9uczJwYWNrYWdlL3dzY29tcGlsZV9jb25maWdfZWpiLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8Y29uZmlndXJhdGlvbgogICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4LXJwYy9yaS9jb25maWciPgotICA8d3NkbCAKKyAgPHdzZGwKICAgICAgIGxvY2F0aW9uPSJuczJwYWNrYWdlLndzZGwiCiAgICAgICBwYWNrYWdlTmFtZT0ibnMycGFja2FnZSIvPgogPC9jb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9yZXBvcnQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9yZXBvcnQueG1sCmluZGV4IDY1YTMyYWUuLjA5NGUzNjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvcmVwb3J0LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3JlcG9ydC54bWwKQEAgLTIzLDcgKzIzLDcgQEAKIDx0YXJnZXQgbmFtZT0icmVwb3J0Ij4KIDxlY2hvIG1lc3NhZ2U9IkNvbXBhcmluZyByZXN1bHRzIHdpdGggZXhwZWN0ZWQgcmVzdWx0cyIvPgogCi0gCisKICAgICA8eHNsdCBzdHlsZT0iJHtzdHlsZXNoZWV0fSIKICAgICAgICAgICAgIGluPSIke3htbGZpbGV9IiBvdXQ9IiR7aHRtbGZpbGV9IgogICAgICAgICAgICAgYmFzZWRpcj0iLiIgZGVzdGRpcj0iLiIgLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvcnBjZW5jb2RlZF9vbmV3YXkvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvcnBjZW5jb2RlZF9vbmV3YXkvYnVpbGQucHJvcGVydGllcwppbmRleCAxOGQ4ZjBlLi5iMjUxYzY0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3JwY2VuY29kZWRfb25ld2F5L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9ycGNlbmNvZGVkX29uZXdheS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwxMCArMTUsMTAgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InJwY2VuY29kZWRPbmV3YXkiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgpAQCAtMjYsMTMgKzI2LDEzIEBACiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9IndlYnNlcnZpY2VzLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2Vic2VydmljZXMueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi13ZWIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgotPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcENsaWVudC5qYXIiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHAudHlwZSIgdmFsdWU9ImFwcGxpY2F0aW9uIi8+CiA8cHJvcGVydHkgbmFtZT0ibWFwcGluZ2ZpbGUubG9jYXRpb24iIHZhbHVlPSIke2Jhc2VkaXJ9Ii8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3JwY2VuY29kZWRfb25ld2F5L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvcnBjZW5jb2RlZF9vbmV3YXkvYnVpbGQueG1sCmluZGV4IGE1YWZkM2YuLjBmMzE0ZDAgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvcnBjZW5jb2RlZF9vbmV3YXkvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvcnBjZW5jb2RlZF9vbmV3YXkvYnVpbGQueG1sCkBAIC0zMCw5ICszMCw5IEBACiAgICAgJnRlc3Rwcm9wZXJ0aWVzOwogCiAgIDx0YXJnZXQgbmFtZT0icnVuLndzY29tcGlsZSI+Ci0JPGV4ZWMgZXhlY3V0YWJsZT0iJHtXU0NPTVBJTEV9IiBmYWlsb25lcnJvcj0idHJ1ZSIgPgotICAgICAgICA8YXJnIGxpbmU9Ii1zb3VyY2UgMS4xLjIgJHt3c2NvbXBpbGUuY29tbWFuZH0iIC8+ICAgICAgICAKLQk8L2V4ZWM+CisgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtXU0NPTVBJTEV9IiBmYWlsb25lcnJvcj0idHJ1ZSIgPgorICAgICAgICA8YXJnIGxpbmU9Ii1zb3VyY2UgMS4xLjIgJHt3c2NvbXBpbGUuY29tbWFuZH0iIC8+CisgICAgPC9leGVjPgogICA8L3RhcmdldD4KIAogPCEtLSBOT1RFLiB0aGUgc2ltcGxlIG1hcHBpbmcgdGVzdCBhbmQgZnVsbCBtYXBwaW5nIHRlc3QgY2FuCkBAIC00Myw5ICs0Myw5IEBACiAtLT4KIAogICA8dGFyZ2V0IG5hbWU9ImFsbCIgZGVwZW5kcz0ic2ltcGxlLW1hcHBpbmcsIGZ1bGwtbWFwcGluZyIvPgotICA8dGFyZ2V0IG5hbWU9InNpbXBsZS1tYXBwaW5nIiAKKyAgPHRhcmdldCBuYW1lPSJzaW1wbGUtbWFwcGluZyIKICAgICAgICAgICBkZXBlbmRzPSJidWlsZC1zaW1wbGUtbWFwcGluZyxkZXBsb3ksYXNzZW1ibGUtY2xpZW50LCBydW4sdW5kZXBsb3kiLz4KLSAgPHRhcmdldCBuYW1lPSJmdWxsLW1hcHBpbmciIAorICA8dGFyZ2V0IG5hbWU9ImZ1bGwtbWFwcGluZyIKICAgICAgICAgICBkZXBlbmRzPSJidWlsZC1mdWxsLW1hcHBpbmcsZGVwbG95LHJ1bix1bmRlcGxveSIvPgogCiAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iIj4KQEAgLTc3LDMyICs3NywzMiBAQAogICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgIDwvYW50Y2FsbD4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVhci1jb21tb24iIC8+Ci0gIDwvdGFyZ2V0PiAKLSAgCisgIDwvdGFyZ2V0PgorCiAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUtY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJjbGllbnQiLz4KLSAgICA8L2FudGNhbGw+ICAgIAorICAgIDwvYW50Y2FsbD4KICAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvd3NkbCIKICAgICAgIGZpbGU9IlNpbXBsZVRlc3Qud3NkbCIvPgotICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgCi0JIGZpbGU9Ik5vTWV0YWRhdGEuU2ltcGxlVGVzdC54bWwiLz4gCisgICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgorICAgICBmaWxlPSJOb01ldGFkYXRhLlNpbXBsZVRlc3QueG1sIi8+CiAgICAgPHVuamFyIHNyYz0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgIGRlc3Q9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJhcHBjbGllbnQtamFyLWNvbW1vbiI+Ci0gICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgIHZhbHVlPSJOb01ldGFkYXRhLlNpbXBsZVRlc3QueG1sLE1FVEEtSU5GL3dzZGwvKioscnBjZW5jb2RlZC8qLmNsYXNzLGNvbS8qKiIgLz4KLSAgICA8L2FudGNhbGw+ICAKKyAgICA8L2FudGNhbGw+CiAgICAgPG1vdmUgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIgdG9GaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcENsaWVudC5qYXIiLz4KICAgPC90YXJnZXQ+Ci0gIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSJodHRwOi8vJHtodHRwLmhvc3R9OiR7aHR0cC5wb3J0fS8vUlBDRW5jb2RlZE9uZXdheS9IZWxsbyIvPgogICAgICAgICA8L2FudGNhbGw+Ci0gICAgPC90YXJnZXQ+ICAKKyAgICA8L3RhcmdldD4KIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC0xMTYsMTkgKzExNiwxOSBAQAogICAgICAgPGRlbGV0ZSBmaWxlID0iL3RtcC9kZWJ1Z01vZGVsLnR4dCIvPgogICAgICAgPGRlbGV0ZSBmaWxlID0iL3RtcC9kZWJ1Z01vZGVsLm1vZGVsIi8+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAKKyAgICA8L3RhcmdldD4KIAogICA8dGFyZ2V0IG5hbWU9IndzY29tcGlsZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxta2RpciBkaXI9InZvX291dHB1dCIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLndzY29tcGlsZSI+Ci0gICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiIAorICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIgogICAgICAgIHZhbHVlPSItaW1wb3J0IC1rZWVwIC1kIHZvX291dHB1dCAtY2xhc3NwYXRoIC4gd3Njb21waWxlX2NvbmZpZy54bWwiLz4KICAgICA8L2FudGNhbGw+CiAgICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3JwY2VuY29kZWQiPgotICAgICAgIDxmaWxlc2V0IGRpcj0idm9fb3V0cHV0L3JwY2VuY29kZWQiIAorICAgICAgIDxmaWxlc2V0IGRpcj0idm9fb3V0cHV0L3JwY2VuY29kZWQiCiAgICAgICAgICAgICAgICAgaW5jbHVkZXM9IkhlbGxvLmNsYXNzIi8+CiAgICAgPC9jb3B5PgogICAgIDxkZWxldGUgZGlyPSJ2b19vdXRwdXQiLz4KQEAgLTEzOSwyMyArMTM5LDIzIEBACiAgICAgPG1rZGlyIGRpcj0ib3V0cHV0Ii8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4ud3Njb21waWxlIj4KICAgICAgIDwhLS0gdXNlIG1vZGVsIC0tPgotPCEtLSAKLSAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIgCi0gICAgICAgdmFsdWU9Ii1nZW4gLWNwIC4gLWtlZXAgLWQgb3V0cHV0IC1YZGVidWdtb2RlbDpvbmV3YXlNb2RlbC50eHQgLW1vZGVsICR7bWFwcGluZ2ZpbGUubmFtZX0gd3Njb21waWxlX2NvbmZpZy54bWwiLz4gCis8IS0tCisgICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiCisgICAgICAgdmFsdWU9Ii1nZW4gLWNwIC4gLWtlZXAgLWQgb3V0cHV0IC1YZGVidWdtb2RlbDpvbmV3YXlNb2RlbC50eHQgLW1vZGVsICR7bWFwcGluZ2ZpbGUubmFtZX0gd3Njb21waWxlX2NvbmZpZy54bWwiLz4KIC0tPgogCiAgICAgICA8IS0tIHVzZSBtYXBwaW5nIC0tPgotICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIiAKLSAgICAgICB2YWx1ZT0iLWltcG9ydCAtY3AgLiAta2VlcCAtZCBvdXRwdXQgLVhkZWJ1Z21vZGVsOm9uZXdheU1vZGVsLnR4dCAtbWFwcGluZyAke21hcHBpbmdmaWxlLm5hbWV9IHdzY29tcGlsZV9jb25maWcueG1sIi8+IAorICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIgorICAgICAgIHZhbHVlPSItaW1wb3J0IC1jcCAuIC1rZWVwIC1kIG91dHB1dCAtWGRlYnVnbW9kZWw6b25ld2F5TW9kZWwudHh0IC1tYXBwaW5nICR7bWFwcGluZ2ZpbGUubmFtZX0gd3Njb21waWxlX2NvbmZpZy54bWwiLz4KICAgICA8L2FudGNhbGw+CiAgICAgPGRlbGV0ZSBkaXI9Im91dHB1dCIvPgogICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPgotCQlVc2FnZToKLQkJCWFudCBhbGwgKEV4ZWN1dGVzIHRoZSBXZWJTZXJ2aWNlcyB0ZXN0KQotCQkJYW50IGNsZWFuIAotCTwvZWNobz4KKyAgICA8ZWNobz4KKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyB0aGUgV2ViU2VydmljZXMgdGVzdCkKKyAgICAgICAgICAgIGFudCBjbGVhbgorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvcnBjZW5jb2RlZF9vbmV3YXkvcnBjZW5jb2RlZC9IZWxsb0ltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvcnBjZW5jb2RlZF9vbmV3YXkvcnBjZW5jb2RlZC9IZWxsb0ltcGwuamF2YQppbmRleCAwM2YyNDA0Li5iM2JkMDZmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3JwY2VuY29kZWRfb25ld2F5L3JwY2VuY29kZWQvSGVsbG9JbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9ycGNlbmNvZGVkX29uZXdheS9ycGNlbmNvZGVkL0hlbGxvSW1wbC5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiBwdWJsaWMgY2xhc3MgSGVsbG9JbXBsIGltcGxlbWVudHMgamFrYXJ0YS5zZXJ2bGV0LlNpbmdsZVRocmVhZE1vZGVsLCBTZXJ2aWNlTGlmZWN5Y2xlIHsKIAogICAgIHByaXZhdGUgYm9vbGVhbiBnb3RJbml0ID0gZmFsc2U7Ci0gICAKKwogICAgIHB1YmxpYyB2b2lkIGluaXQoT2JqZWN0IG8pIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHb3QgU2VydmljZUxpZmVjeWNsZTo6aW5pdCBjYWxsICIgKyBvKTsKICAgICAgICAgZ290SW5pdCA9IHRydWU7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3JwY2VuY29kZWRfb25ld2F5L3dzY29tcGlsZV9jb25maWcueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9ycGNlbmNvZGVkX29uZXdheS93c2NvbXBpbGVfY29uZmlnLnhtbAppbmRleCBhMzI0OWU3Li4yMzVmZDQxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3JwY2VuY29kZWRfb25ld2F5L3dzY29tcGlsZV9jb25maWcueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvcnBjZW5jb2RlZF9vbmV3YXkvd3Njb21waWxlX2NvbmZpZy54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPGNvbmZpZ3VyYXRpb24KICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheC1ycGMvcmkvY29uZmlnIj4KLSAgPHdzZGwgCisgIDx3c2RsCiAgICAgICBsb2NhdGlvbj0iU2ltcGxlVGVzdC53c2RsIgogICAgICAgcGFja2FnZU5hbWU9InJwY2VuY29kZWQiPgogICA8L3dzZGw+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3JwY2xpdC9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9ycGNsaXQvYnVpbGQucHJvcGVydGllcwppbmRleCBmNTJiMzFlLi41YTI3NmRiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3JwY2xpdC9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvcnBjbGl0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDEwICsxNSwxMCBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0icnBjbGl0Ii8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvcnBjbGl0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvcnBjbGl0L2J1aWxkLnhtbAppbmRleCA5M2Y5MWEwLi5hMmViYTBhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3JwY2xpdC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9ycGNsaXQvYnVpbGQueG1sCkBAIC0zMyw5ICszMyw5IEBACiAKIAogICA8dGFyZ2V0IG5hbWU9InJ1bi53c2NvbXBpbGUiPgotCTxleGVjIGV4ZWN1dGFibGU9IiR7V1NDT01QSUxFfSIgZmFpbG9uZXJyb3I9InRydWUiID4KLSAgICAgICAgPGFyZyBsaW5lPSItc291cmNlIDEuMS4yICR7d3Njb21waWxlLmNvbW1hbmR9IiAvPiAgICAgICAgCi0JPC9leGVjPgorICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7V1NDT01QSUxFfSIgZmFpbG9uZXJyb3I9InRydWUiID4KKyAgICAgICAgPGFyZyBsaW5lPSItc291cmNlIDEuMS4yICR7d3Njb21waWxlLmNvbW1hbmR9IiAvPgorICAgIDwvZXhlYz4KICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSIiPgpAQCAtNTIsMTcgKzUyLDE3IEBACiAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUiIGRlcGVuZHM9ImluaXQtY29tbW9uLCBidWlsZCwgY29tcGlsZSI+CiAgICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3dzZGwiCiAgICAgICBmaWxlPSJTaW1wbGVUZXN0LndzZGwiLz4KLSAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIAotCSBmaWxlPSJScGNMaXRNYXBwaW5nLnhtbCIvPgorICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKKyAgICAgZmlsZT0iUnBjTGl0TWFwcGluZy54bWwiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVqYi1qYXItY29tbW9uIj4KLSAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgdmFsdWU9IlJwY0xpdE1hcHBpbmcueG1sLE1FVEEtSU5GL3dzZGwvKioscnBjbGl0LyouY2xhc3MiIC8+CiAKICAgICA8L2FudGNhbGw+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJlYXItY29tbW9uIiAvPgotICA8L3RhcmdldD4gCisgIDwvdGFyZ2V0PgogCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KQEAgLTc2LDE5ICs3NiwxOSBAQAogCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gIAorICAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0id3Njb21waWxlLWVqYiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxta2RpciBkaXI9Im91dHB1dCIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLndzY29tcGlsZSI+Ci0gICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiIAorICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIgogICAgICAgIHZhbHVlPSItaW1wb3J0IC1rZWVwIC1kIG91dHB1dCAtcyBvdXRwdXQgLWNsYXNzcGF0aCAuIHdzY29tcGlsZV9jb25maWcueG1sIi8+CiAgICAgPC9hbnRjYWxsPgogICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9ycGNsaXQiPgotICAgICAgIDxmaWxlc2V0IGRpcj0ib3V0cHV0L3JwY2xpdCIgCisgICAgICAgPGZpbGVzZXQgZGlyPSJvdXRwdXQvcnBjbGl0IgogICAgICAgICAgICAgICAgIGluY2x1ZGVzPSJTaW1wbGVUZXN0LmNsYXNzLEVjaG9TdHJpbmdUeXBlLmNsYXNzLFN0cmluZ1Jlc3BvbnNlTmFtZVR5cGUuY2xhc3MiLz4KICAgICA8L2NvcHk+CiAgICAgPGRlbGV0ZSBkaXI9Im91dHB1dCIvPgpAQCAtOTksMjMgKzk5LDIzIEBACiAgICAgPG1rZGlyIGRpcj0ib3V0cHV0Ii8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4ud3Njb21waWxlIj4KICAgICAgIDwhLS0gdXNlIG1vZGVsIC0tPgotICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIiAKLSAgICAgICB2YWx1ZT0iLWdlbiAtY3AgLiAta2VlcCAtZCBvdXRwdXQgLVhkZWJ1Z21vZGVsOmFueVJwY01vZGVsLnR4dCAtbW9kZWwgUnBjTGl0TWFwcGluZy54bWwgd3Njb21waWxlX2NvbmZpZy54bWwiLz4gCisgICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiCisgICAgICAgdmFsdWU9Ii1nZW4gLWNwIC4gLWtlZXAgLWQgb3V0cHV0IC1YZGVidWdtb2RlbDphbnlScGNNb2RlbC50eHQgLW1vZGVsIFJwY0xpdE1hcHBpbmcueG1sIHdzY29tcGlsZV9jb25maWcueG1sIi8+CiAKICAgICAgIDwhLS0gdXNlIG1hcHBpbmcgLS0+Ci08IS0tIAotICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIiAKLSAgICAgICB2YWx1ZT0iLWdlbiAtY3AgLiAta2VlcCAtZCBvdXRwdXQgLVhkZWJ1Z21vZGVsOmFueVJwY01vZGVsLnR4dCAtbWFwcGluZyBScGNMaXRNYXBwaW5nLnhtbCB3c2NvbXBpbGVfY29uZmlnLnhtbCIvPiAKKzwhLS0KKyAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIKKyAgICAgICB2YWx1ZT0iLWdlbiAtY3AgLiAta2VlcCAtZCBvdXRwdXQgLVhkZWJ1Z21vZGVsOmFueVJwY01vZGVsLnR4dCAtbWFwcGluZyBScGNMaXRNYXBwaW5nLnhtbCB3c2NvbXBpbGVfY29uZmlnLnhtbCIvPgogLS0+CiAgICAgPC9hbnRjYWxsPgogICAgIDxkZWxldGUgZGlyPSJvdXRwdXQiLz4KICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgYWxsIChFeGVjdXRlcyB0aGUgV2ViU2VydmljZXMgdGVzdCkKLQkJCWFudCBjbGVhbiAKLQk8L2VjaG8+CisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgdGhlIFdlYlNlcnZpY2VzIHRlc3QpCisgICAgICAgICAgICBhbnQgY2xlYW4KKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3JwY2xpdC9ycGNsaXQvU2ltcGxlVGVzdEltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvcnBjbGl0L3JwY2xpdC9TaW1wbGVUZXN0SW1wbC5qYXZhCmluZGV4IGMwYjU5MmUuLjFlMmI0ZjMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvcnBjbGl0L3JwY2xpdC9TaW1wbGVUZXN0SW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvcnBjbGl0L3JwY2xpdC9TaW1wbGVUZXN0SW1wbC5qYXZhCkBAIC0xNSw3ICsxNSw3IEBACiAgKi8KIAogLyoKLSAqIEAoIylTaW1wbGVUZXN0SW1wbC5qYXZhCTEuMyAwMi8wNC8wNQorICogQCgjKVNpbXBsZVRlc3RJbXBsLmphdmEgICAgMS4zIDAyLzA0LzA1CiAgKi8KIAogcGFja2FnZSBycGNsaXQ7CkBAIC0zNyw3ICszNyw3IEBACiAKICAgICBwdWJsaWMgU2ltcGxlVGVzdEltcGwoKXt9CiAKLSAgICBwdWJsaWMgRWNob1N0cmluZ1R5cGUgZWNob1N0cmluZyhTdHJpbmdSZXNwb25zZU5hbWVUeXBlIHYpIAorICAgIHB1YmxpYyBFY2hvU3RyaW5nVHlwZSBlY2hvU3RyaW5nKFN0cmluZ1Jlc3BvbnNlTmFtZVR5cGUgdikKICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbgogICAgIHsKICAgICAgICAgcmV0dXJuIG51bGw7ICAvL2ZvciBub3cKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvcnBjbGl0L3dzY29tcGlsZV9jb25maWcueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9ycGNsaXQvd3Njb21waWxlX2NvbmZpZy54bWwKaW5kZXggN2RmMGQzMy4uY2MyOTZkMSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9ycGNsaXQvd3Njb21waWxlX2NvbmZpZy54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9ycGNsaXQvd3Njb21waWxlX2NvbmZpZy54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPGNvbmZpZ3VyYXRpb24KICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheC1ycGMvcmkvY29uZmlnIj4KLSAgPHdzZGwgCisgIDx3c2RsCiAgICAgICBsb2NhdGlvbj0iU2ltcGxlVGVzdC53c2RsIgogICAgICAgcGFja2FnZU5hbWU9InJwY2xpdCIvPgogPC9jb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9ydW5fdGVzdC5zaCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UvcnVuX3Rlc3Quc2gKaW5kZXggN2YxZTUwNS4uMzRmODgyZiAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9ydW5fdGVzdC5zaAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3J1bl90ZXN0LnNoCkBAIC00NSwxMSArNDUsMTEgQEAKIH0KIAogZ2V0X3Rlc3RfdGFyZ2V0KCl7Ci0JY2FzZSAkezF9IGluCi0JCXdlYnNlcnZpY2VfYWxsICkKLQkJCVRBUkdFVD1hbGwKLQkJCWV4cG9ydCBUQVJHRVQ7OwotCWVzYWMKKyAgICBjYXNlICR7MX0gaW4KKyAgICAgICAgd2Vic2VydmljZV9hbGwgKQorICAgICAgICAgICAgVEFSR0VUPWFsbAorICAgICAgICAgICAgZXhwb3J0IFRBUkdFVDs7CisgICAgZXNhYwogfQogCiBPUFQ9JHsxfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZWN1cml0eS9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlY3VyaXR5L2J1aWxkLnhtbAppbmRleCAwYjM4YmVlLi5iYTkxM2YwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlY3VyaXR5L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlY3VyaXR5L2J1aWxkLnhtbApAQCAtMjgsNyArMjgsNyBAQAogICAgICZjb21tb25TZXR1cDsKICAgICAmY29tbW9uQnVpbGQ7CiAgICAgJnJlcG9ydGluZzsKLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0iY2hlY2stbnNzIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDwhLS0KICAgICAgICAgICBEZXRlcm1pbmUgaWYgd2UgbmVlZCB0byB1c2UgdGhlIGNlcnR1dGlsIG9yIHRoZSBrZXl0b29sIGNvbW1hbmQgdG8KQEAgLTQ3LDggKzQ3LDggQEAKICAgICAgICAgICAgIDwvYW5kPgogICAgICAgICA8L2NvbmRpdGlvbj4KICAgICA8L3RhcmdldD4KLSAgICAKLSAgICAKKworCiAgICAgPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iaW5pdC1jb21tb24sIGNoZWNrLW5zcyI+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkNyZWF0aW5nIHRoZSB2YWxpZCBjZXJ0aWZpY2F0ZSBpbiBrZXN0b3JlLmprcyIvPgogICAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke2phdmEuaG9tZX0vYmluL2tleXRvb2wiIGZhaWxvbmVycm9yPSJmYWxzZSI+CkBAIC03NywxMiArNzcsMTIgQEAKICAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7c3NsLnBhc3N3b3JkfSIvPgogICAgICAgICAgICAgPGFyZyB2YWx1ZT0iLWRuYW1lIi8+CiAgICAgICAgICAgICA8YXJnIHZhbHVlPSJjbj1Vbmtub3duIER1a2UsIG91PVByb2csIG89SGFja1NvZnQsIGM9VVMiLz4KLSAgICAgICAgPC9leGVjPiAgICAgICAgICAgCisgICAgICAgIDwvZXhlYz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJzZXR1cC1wZSIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InNldHVwLWVlIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCi0gICAgCisKKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAtcGUiIGRlcGVuZHM9ImluaXQtY29tbW9uIiB1bmxlc3M9InVzZS5jZXJ0dXRpbCI+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkV4cG9ydGluZyBhcHBzZXJ2ZXIgcHVibGljIGtleSBmcm9tICR7YWRtaW4uZG9tYWlufSIvPgogICAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke2phdmEuaG9tZX0vYmluL2tleXRvb2wiIGZhaWxvbmVycm9yPSJ0cnVlIj4KQEAgLTk1LDIwICs5NSwyMCBAQAogICAgICAgICA8ZWNobyBtZXNzYWdlPSJFeHRyYWN0aW5nIHRlc3RlciBwdWJsaWMga2V5Ii8+CiAgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7amF2YS5ob21lfS9iaW4va2V5dG9vbCIgZmFpbG9uZXJyb3I9InRydWUiPgogICAgICAgICAgICAgPGFyZyBsaW5lPSItZXhwb3J0IC1hbGlhcyBzMWFzdGVzdGVyIC1rZXlzdG9yZSBrZXlzdG9yZS5qa3MgLXN0b3JlcGFzcyAke3NzbC5wYXNzd29yZH0gLWZpbGUgY2xpZW50LmNlciIvPgotICAgICAgICA8L2V4ZWM+ICAgICAgICAKKyAgICAgICAgPC9leGVjPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJJbXBvcnRpbmcgdGVzdGVyIHB1YmxpYyBrZXkgaW4gYXBwc2VydmVyIHRydXN0ZWQgY2VydGlmaWNhdGVzIi8+CiAgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7amF2YS5ob21lfS9iaW4va2V5dG9vbCIgZmFpbG9uZXJyb3I9InRydWUiPgogICAgICAgICAgICAgPGFyZyBsaW5lPSItaW1wb3J0IC1ub3Byb21wdCAtYWxpYXMgczFhc3Rlc3RlciAta2V5c3RvcmUgJHtlbnYuUzFBU19IT01FfS9kb21haW5zLyR7YWRtaW4uZG9tYWlufS9jb25maWcvY2FjZXJ0cy5qa3MgLXN0b3JlcGFzcyAke3NzbC5wYXNzd29yZH0gLWZpbGUgY2xpZW50LmNlciIvPgogICAgICAgICA8L2V4ZWM+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1wZS1zZXJ2ZXIiLz4KICAgICA8L3RhcmdldD4KLSAgICAKKwogICAgIDx0YXJnZXQgbmFtZT0ic2V0dXAtZWUiIGRlcGVuZHM9ImluaXQtY29tbW9uIiBpZj0idXNlLmNlcnR1dGlsIj4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iRXhwb3J0aW5nIGFwcHNlcnZlciBwdWJsaWMga2V5IGZyb20gJHthZG1pbi5kb21haW59Ii8+CiAgICAgICAgIDxleGVjIGV4ZWN1dGFibGUgPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9jZXJ0dXRpbCIgZmFpbG9uZXJyb3I9InRydWUiPgogICAgICAgICAgICAgPGVudiBrZXk9IkxEX0xJQlJBUllfUEFUSCIgcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIiLz4KLSAgICAgICAgICAgIDxhcmcgbGluZT0iLUwgLW4gczFhcyAtZCAke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvJHthZG1pbi5kb21haW59L2NvbmZpZyAtYSAtbyBhcHBzZXJ2ZXIuY2VyIi8+ICAgICAgICAgICAgCi0gICAgICAgIDwvZXhlYz4gICAgICAgIAorICAgICAgICAgICAgPGFyZyBsaW5lPSItTCAtbiBzMWFzIC1kICR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy8ke2FkbWluLmRvbWFpbn0vY29uZmlnIC1hIC1vIGFwcHNlcnZlci5jZXIiLz4KKyAgICAgICAgPC9leGVjPgogCiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkltcG9ydGluZyB0aGUgQXBwc2VydmVyIGNlcnRpZmljYXRlIG9uIHRoZSBjbGllbnQga2V5c3RvcmUiLz4KICAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtqYXZhLmhvbWV9L2Jpbi9rZXl0b29sIiBmYWlsb25lcnJvcj0idHJ1ZSI+CkBAIC0xMTcsNyArMTE3LDcgQEAKICAgICAgICAgPGVjaG8gbWVzc2FnZT0iRXh0cmFjdGluZyB0ZXN0ZXIgcHVibGljIGtleSIvPgogICAgICAgICA8ZXhlYyBleGVjdXRhYmxlPSIke2phdmEuaG9tZX0vYmluL2tleXRvb2wiIGZhaWxvbmVycm9yPSJ0cnVlIj4KICAgICAgICAgICAgIDxhcmcgbGluZT0iLWV4cG9ydCAtcmZjIC1hbGlhcyBzMWFzdGVzdGVyIC1rZXlzdG9yZSBrZXlzdG9yZS5qa3MgLXN0b3JlcGFzcyAke3NzbC5wYXNzd29yZH0gLWZpbGUgY2xpZW50LmNlciIvPgotICAgICAgICA8L2V4ZWM+ICAgICAgICAKKyAgICAgICAgPC9leGVjPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJJbXBvcnRpbmcgdGVzdGVyIHB1YmxpYyBrZXkgaW4gYXBwc2VydmVyIHRydXN0ZWQgY2VydGlmaWNhdGVzIi8+CiAgICAgICAgIDxleGVjIGV4ZWN1dGFibGUgPSIke2Vudi5TMUFTX0hPTUV9L2xpYi9jZXJ0dXRpbCIgZmFpbG9uZXJyb3I9InRydWUiPgogICAgICAgICAgICAgPGVudiBrZXk9IkxEX0xJQlJBUllfUEFUSCIgcGF0aD0iJHtlbnYuUzFBU19IT01FfS9saWIiLz4KQEAgLTEyNSw3ICsxMjUsNyBAQAogICAgICAgICA8L2V4ZWM+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icmVzdGFydC1lZS1zZXJ2ZXIiLz4KICAgICA8L3RhcmdldD4KLSAgICAgICAgCisKICAgICA8dGFyZ2V0IG5hbWU9InJlc3RhcnQtcGUtc2VydmVyIj4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iUmVzdGFydGluZyBQRSBzZXJ2ZXIuLi4iLz4KICAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBU0FETUlOfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KQEAgLTE1MSwyMCArMTUxLDIwIEBACiAgICAgICAgIDxkZWxldGUgZmlsZT0iaW52YWxpZF9rZXlzdG9yZS5qa3MiLz4KICAgICAgICAgPGRlbGV0ZSBmaWxlPSJrZXlzdG9yZS5qa3MiLz4KICAgICAgICAgPGRlbGV0ZSBmaWxlPSJhcHBzZXJ2ZXIuY2VyIi8+Ci0gICAgICAgIDxkZWxldGUgZmlsZT0iY2xpZW50LmNlciIvPiAgICAgICAgCisgICAgICAgIDxkZWxldGUgZmlsZT0iY2xpZW50LmNlciIvPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuc2V0dXAtcGUiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bnNldHVwLWVlIi8+CiAgICAgPC90YXJnZXQ+Ci0gICAgCi0gICAgICAgIAorCisKICAgICA8dGFyZ2V0IG5hbWU9InVuc2V0dXAtcGUiIGRlcGVuZHM9ImluaXQtY29tbW9uIiB1bmxlc3M9InVzZS5jZXJ0dXRpbCI+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IlJlbW92aW5nIHRlc3RlciBwdWJsaWMga2V5IGZyb20gYXBwc2VydmVyIHRydXN0ZWQgY2VydGlmaWNhdGVzIi8+CiAgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7amF2YS5ob21lfS9iaW4va2V5dG9vbCIgZmFpbG9uZXJyb3I9InRydWUiPgogICAgICAgICAgICAgPGFyZyBsaW5lPSItZGVsZXRlIC1hbGlhcyBzMWFzdGVzdGVyIC1rZXlzdG9yZSAke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvJHthZG1pbi5kb21haW59L2NvbmZpZy9jYWNlcnRzLmprcyAtc3RvcmVwYXNzICR7c3NsLnBhc3N3b3JkfSIvPgotICAgICAgICA8L2V4ZWM+ICAgICAgICAKKyAgICAgICAgPC9leGVjPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQtcGUtc2VydmVyIi8+Ci0gICAgPC90YXJnZXQ+ICAgICAgICAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogICAgIDx0YXJnZXQgbmFtZT0idW5zZXR1cC1lZSIgZGVwZW5kcz0iaW5pdC1jb21tb24iIGlmPSJ1c2UuY2VydHV0aWwiPgogICAgICAgICA8ZWNobyBtZXNzYWdlPSJSZW1vdmluZyB0ZXN0ZXIgcHVibGljIGtleSBmcm9tIGFwcHNlcnZlciB0cnVzdGVkIGNlcnRpZmljYXRlcyIvPgogICAgICAgICA8ZXhlYyBleGVjdXRhYmxlID0iJHtlbnYuUzFBU19IT01FfS9saWIvY2VydHV0aWwiIGZhaWxvbmVycm9yPSJ0cnVlIj4KQEAgLTE3MiwyOCArMTcyLDI4IEBACiAgICAgICAgICAgICA8YXJnIGxpbmU9Ii1EIC1uIHMxYXN0ZXN0ZXIgLWQgJHtlbnYuUzFBU19IT01FfS9kb21haW5zLyR7YWRtaW4uZG9tYWlufS9jb25maWciLz4KICAgICAgICAgPC9leGVjPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJlc3RhcnQtZWUtc2VydmVyIi8+Ci0gICAgPC90YXJnZXQ+ICAgICAgCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImFsbCI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0ic2V0dXAiLz4KICAgICAgICAgPGFudCBkaXI9ImVqYl9zc2xfY2FjZXJ0IiB0YXJnZXQ9ImFsbCIvPgotICAgICAgICA8YW50IGRpcj0iZWpiM19zc2xfY2FjZXJ0IiB0YXJnZXQ9ImFsbCIvPiAgICAgICAgCisgICAgICAgIDxhbnQgZGlyPSJlamIzX3NzbF9jYWNlcnQiIHRhcmdldD0iYWxsIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5zZXR1cCIvPgogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iPgogICAgICAgICA8ZGVsZXRlPgotICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Jhc2VkaXJ9IiAKKyAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtiYXNlZGlyfSIKICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVzPSIqKi5vdXRwdXQsIGNvdW50LnR4dCIvPgogICAgICAgICA8L2RlbGV0ZT4KICAgICAgICAgPGFudCBkaXI9ImVqYl9zc2xfY2FjZXJ0IiB0YXJnZXQ9ImNsZWFuIi8+CiAgICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ1c2FnZSI+Ci0JPGVjaG8+Ci0JCVVzYWdlOgotCQkJYW50IGFsbCAoRXhlY3V0ZXMgYWxsIHRoZSB3ZWJzZXJ2aWNlIHNlY3VyaXR5IHRlc3RzKQorICAgIDxlY2hvPgorICAgICAgICBVc2FnZToKKyAgICAgICAgICAgIGFudCBhbGwgKEV4ZWN1dGVzIGFsbCB0aGUgd2Vic2VydmljZSBzZWN1cml0eSB0ZXN0cykKIAotCQkJYW50IGVqYl9zc2xfY2FjZXJ0IChFeGVjdXRlcyB0aGUgY2xpZW50IGNlcnRpZmljYXRlIGVqYiBzc2wgZW5kcG9pbnQgdGVzdCkKLQk8L2VjaG8+CisgICAgICAgICAgICBhbnQgZWpiX3NzbF9jYWNlcnQgKEV4ZWN1dGVzIHRoZSBjbGllbnQgY2VydGlmaWNhdGUgZWpiIHNzbCBlbmRwb2ludCB0ZXN0KQorICAgIDwvZWNobz4KICAgICA8L3RhcmdldD4KIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VjdXJpdHkvY29tbW9uLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VjdXJpdHkvY29tbW9uLnhtbAppbmRleCA3ZGQ2Zjc5Li42OTYxODkxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlY3VyaXR5L2NvbW1vbi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZWN1cml0eS9jb21tb24ueG1sCkBAIC0xOCwxNSArMTgsMTUgQEAKIAogICAgIDwhLS0gcnVuIGFwcGNsaWVudCBpbiBBcHBTZXJ2ICAtLT4KICAgICA8dGFyZ2V0IG5hbWU9InJ1bmNsaWVudC1zZWN1cmUiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgCisKICAgICAgIDxlY2hvIG1lc3NhZ2U9IkV4ZWN1dGluZyBhcHBjbGllbnQgYXQgQmFzZWRpcjoke2Jhc2VkaXJ9IiAvPgotICAgICAgPGVjaG8gbWVzc2FnZT0iQXBwY2xpZW50IGphcjogJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHBDbGllbnQuamFyIiAKKyAgICAgIDxlY2hvIG1lc3NhZ2U9IkFwcGNsaWVudCBqYXI6ICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwQ2xpZW50LmphciIKICAgICAgICAgICAvPgogICAgICAgPGVjaG8gbWVzc2FnZT0iQXBwbmFtZTogJHthcHBuYW1lfSIgLz4KICAgICAgIDxlY2hvIG1lc3NhZ2U9IkRpc3BsYXkgbmFtZSBmb3IgYXBwY2xpZW50OiAke2FwcG5hbWV9Q2xpZW50IiAvPgogICAgICAgPGVjaG8gbWVzc2FnZT0iYXBwY2xpZW50IC1jbGllbnQgJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHBDbGllbnQuamFyIC1uYW1lICR7YXBwbmFtZX1DbGllbnQgLXRleHRhdXRoIC11c2VyIGoyZWUgLXBhc3N3b3JkIGoyZWUgLXhtbCAke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvJHthZG1pbi5kb21haW59L2NvbmZpZy9nbGFzc2Zpc2gtYWNjLnhtbCAke2FwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzfSIvPgogICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtBUFBDTElFTlR9IiBmYWlsb25lcnJvcj0iZmFsc2UiPgotICAgIDxlbnYga2V5PSJWTUFSR1MiIHZhbHVlPSItRGphdmF4Lm5ldC5zc2wua2V5U3RvcmU9JHtiYXNlZGlyfS8uLi9rZXlzdG9yZS5qa3MgLURqYXZheC5uZXQuc3NsLmtleVN0b3JlUGFzc3dvcmQ9Y2hhbmdlaXQgLURqYXZheC5uZXQuc3NsLnRydXN0U3RvcmU9JHtiYXNlZGlyfS8uLi9jYWNlcnRzLmprcyAtRGphdmF4Lm5ldC5zc2wudHJ1c3RTdG9yZVBhc3N3b3JkPWNoYW5nZWl0Ii8+ICAgICAgICAgICAgICAgIAorICAgIDxlbnYga2V5PSJWTUFSR1MiIHZhbHVlPSItRGphdmF4Lm5ldC5zc2wua2V5U3RvcmU9JHtiYXNlZGlyfS8uLi9rZXlzdG9yZS5qa3MgLURqYXZheC5uZXQuc3NsLmtleVN0b3JlUGFzc3dvcmQ9Y2hhbmdlaXQgLURqYXZheC5uZXQuc3NsLnRydXN0U3RvcmU9JHtiYXNlZGlyfS8uLi9jYWNlcnRzLmprcyAtRGphdmF4Lm5ldC5zc2wudHJ1c3RTdG9yZVBhc3N3b3JkPWNoYW5nZWl0Ii8+CiAgICAgICAgIDxhcmcgbGluZT0iLWNsaWVudCAke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcENsaWVudC5qYXIiLz4KICAgICAgICAgPGFyZyBsaW5lPSItbmFtZSAke2FwcG5hbWV9Q2xpZW50Ii8+CiAgICAgICAgIDxhcmcgbGluZT0iLXRleHRhdXRoIi8+CkBAIC0zNSwxOSArMzUsMTkgQEAKICAgICAgICAgPGFyZyBsaW5lPSIteG1sICR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy8ke2FkbWluLmRvbWFpbn0vY29uZmlnL2dsYXNzZmlzaC1hY2MueG1sIi8+CiAgICAgICAgIDxhcmcgbGluZT0iJHthcHBjbGllbnQuYXBwbGljYXRpb24uYXJnc30iLz4KICAgICAgIDwvZXhlYz4KLSAgICA8L3RhcmdldD4gIAotICAgIAorICAgIDwvdGFyZ2V0PgorCiAgICAgPCEtLSBydW4gYXBwY2xpZW50IGluIEFwcFNlcnYgIC0tPgogICAgIDx0YXJnZXQgbmFtZT0icnVuY2xpZW50LWludmFsaWQtc2VjdXJlIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgICAgIAorCiAgICAgICA8ZWNobyBtZXNzYWdlPSJFeGVjdXRpbmcgYXBwY2xpZW50IGF0IEJhc2VkaXI6JHtiYXNlZGlyfSIgLz4KLSAgICAgIDxlY2hvIG1lc3NhZ2U9IkFwcGNsaWVudCBqYXI6ICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwQ2xpZW50LmphciIgCisgICAgICA8ZWNobyBtZXNzYWdlPSJBcHBjbGllbnQgamFyOiAke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcENsaWVudC5qYXIiCiAgICAgICAgICAgLz4KICAgICAgIDxlY2hvIG1lc3NhZ2U9IkFwcG5hbWU6ICR7YXBwbmFtZX0iIC8+CiAgICAgICA8ZWNobyBtZXNzYWdlPSJEaXNwbGF5IG5hbWUgZm9yIGFwcGNsaWVudDogJHthcHBuYW1lfUNsaWVudCIgLz4KICAgICAgIDxlY2hvIG1lc3NhZ2U9ImFwcGNsaWVudCAtY2xpZW50ICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwQ2xpZW50LmphciAtbmFtZSAke2FwcG5hbWV9Q2xpZW50IC10ZXh0YXV0aCAtdXNlciBqMmVlIC1wYXNzd29yZCBqMmVlIC14bWwgJHtlbnYuUzFBU19IT01FfS9kb21haW5zLyR7YWRtaW4uZG9tYWlufS9jb25maWcvZ2xhc3NmaXNoLWFjYy54bWwgJHthcHBjbGllbnQuYXBwbGljYXRpb24uYXJnc30iLz4KICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7QVBQQ0xJRU5UfSIgZmFpbG9uZXJyb3I9ImZhbHNlIj4KLSAgICA8ZW52IGtleT0iVk1BUkdTIiB2YWx1ZT0iLURqYXZheC5uZXQuc3NsLmtleVN0b3JlPSR7YmFzZWRpcn0vLi4vaW52YWxpZF9rZXlzdG9yZS5qa3MgLURqYXZheC5uZXQuc3NsLmtleVN0b3JlUGFzc3dvcmQ9Y2hhbmdlaXQgLURqYXZheC5uZXQuc3NsLnRydXN0U3RvcmU9JHtiYXNlZGlyfS8uLi9jYWNlcnRzLmprcyAtRGphdmF4Lm5ldC5zc2wudHJ1c3RTdG9yZVBhc3N3b3JkPWNoYW5nZWl0Ii8+ICAgICAgICAgICAgICAgIAorICAgIDxlbnYga2V5PSJWTUFSR1MiIHZhbHVlPSItRGphdmF4Lm5ldC5zc2wua2V5U3RvcmU9JHtiYXNlZGlyfS8uLi9pbnZhbGlkX2tleXN0b3JlLmprcyAtRGphdmF4Lm5ldC5zc2wua2V5U3RvcmVQYXNzd29yZD1jaGFuZ2VpdCAtRGphdmF4Lm5ldC5zc2wudHJ1c3RTdG9yZT0ke2Jhc2VkaXJ9Ly4uL2NhY2VydHMuamtzIC1EamF2YXgubmV0LnNzbC50cnVzdFN0b3JlUGFzc3dvcmQ9Y2hhbmdlaXQiLz4KICAgICAgICAgPGFyZyBsaW5lPSItY2xpZW50ICR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwQ2xpZW50LmphciIvPgogICAgICAgICA8YXJnIGxpbmU9Ii1uYW1lICR7YXBwbmFtZX1DbGllbnQiLz4KICAgICAgICAgPGFyZyBsaW5lPSItdGV4dGF1dGgiLz4KQEAgLTU2LDQgKzU2LDQgQEAKICAgICAgICAgPGFyZyBsaW5lPSIteG1sICR7ZW52LlMxQVNfSE9NRX0vZG9tYWlucy8ke2FkbWluLmRvbWFpbn0vY29uZmlnL2dsYXNzZmlzaC1hY2MueG1sIi8+CiAgICAgICAgIDxhcmcgbGluZT0iJHthcHBjbGllbnQuYXBwbGljYXRpb24uYXJnc30iLz4KICAgICAgIDwvZXhlYz4KLSAgICA8L3RhcmdldD4gICAgICAKKyAgICA8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VjdXJpdHkvZWpiM19zc2xfY2FjZXJ0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VjdXJpdHkvZWpiM19zc2xfY2FjZXJ0L2J1aWxkLnhtbAppbmRleCA3Yzg1NDA5Li4xNDE4YzVjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlY3VyaXR5L2VqYjNfc3NsX2NhY2VydC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZWN1cml0eS9lamIzX3NzbF9jYWNlcnQvYnVpbGQueG1sCkBAIC0yNiwxOCArMjYsMTggQEAKIAogPHByb2plY3QgbmFtZT0iRUpCM19TU0xfQ0FDRVJUIiBkZWZhdWx0PSJjb3JlIiBiYXNlZGlyPSIuIj4KIAotICAgICZjb21tb25Bbm5vdGF0aW9uczsgICAgCisgICAgJmNvbW1vbkFubm90YXRpb25zOwogICAgICZjb21tb25TZXR1cDsKICAgICAmY29tbW9uQnVpbGQ7CiAgICAgJmNvbW1vbjsKICAgICA8cHJvcGVydHkgbmFtZT0ic3JjLW5hbWUiIHZhbHVlPSJlbmRwb2ludC9IZWxsb0ltcGwuamF2YSIvPgogICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGllbnQtc3JjLW5hbWUiIHZhbHVlPSJjbGllbnQvQ2xpZW50LmphdmEiLz4KICAgICA8cHJvcGVydHkgbmFtZT0iYXBwLWNsaWVudC1wYXJhbWV0ZXJzIiB2YWx1ZT0iLXhtbCAke2Vudi5TMUFTX0hPTUV9L2RvbWFpbnMvJHthZG1pbi5kb21haW59L2NvbmZpZy9nbGFzc2Zpc2gtYWNjLnhtbCIvPgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJ0ZXN0LWJ1aWxkIj4KICAgICAgICAgPGJhc2VuYW1lIGZpbGU9IiR7c3JjLW5hbWV9IiBwcm9wZXJ0eT0ic2VydmVyIiBzdWZmaXg9Ii5qYXZhIi8+CiAgICAgICAgIDxkaXJuYW1lIGZpbGU9IiR7c3JjLW5hbWV9IiBwcm9wZXJ0eT0iZGlyZWN0b3J5Ii8+Ci0gICAgICAgIDxiYXNlbmFtZSBmaWxlPSIke2RpcmVjdG9yeX0iIHByb3BlcnR5PSJwa2ctbmFtZSIvPiAKKyAgICAgICAgPGJhc2VuYW1lIGZpbGU9IiR7ZGlyZWN0b3J5fSIgcHJvcGVydHk9InBrZy1uYW1lIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idGVzdC1jb21waWxlIi8+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9IkJ1aWxkaW5nIHdpdGggcGFja2FnZSAke3BrZy1uYW1lfSIvPgogICAgICAgICA8amFyIGRlc3RmaWxlPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2FyY2hpdmUvJHtzZXJ2ZXJ9LmphciIKQEAgLTQ1LDI4ICs0NSwyOCBAQAogICAgICAgICAgICAgaW5jbHVkZXM9IiR7cGtnLW5hbWV9LyoqIj4KICAgICAgICAgICAgIDxtZXRhaW5mIGRpcj0iJHtwa2ctbmFtZX0iCiAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVzPSIqLnhtbCIvPgotICAgICAgICA8L2phcj4gICAgICAgICAgICAgICAgICAgCisgICAgICAgIDwvamFyPgogICAgIDwvdGFyZ2V0PgotICAgIAorCiAgICAgPHRhcmdldCBuYW1lPSJ0ZXN0LWRlcGxveSIgZGVwZW5kcz0idGVzdC1idWlsZCI+Ci0gICAgICAgIDxiYXNlbmFtZSBmaWxlPSIke3NyYy1uYW1lfSIgcHJvcGVydHk9InNlcnZlciIgc3VmZml4PSIuamF2YSIvPiAgIAotICAgICAgICA8YmFzZW5hbWUgZmlsZT0iJHtzZXJ2ZXJ9IiBwcm9wZXJ0eT0icG9ydCIgc3VmZml4PSJFSkIiLz4gICAgIAorICAgICAgICA8YmFzZW5hbWUgZmlsZT0iJHtzcmMtbmFtZX0iIHByb3BlcnR5PSJzZXJ2ZXIiIHN1ZmZpeD0iLmphdmEiLz4KKyAgICAgICAgPGJhc2VuYW1lIGZpbGU9IiR7c2VydmVyfSIgcHJvcGVydHk9InBvcnQiIHN1ZmZpeD0iRUpCIi8+CiAgICAgICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7ZW52LlMxQVNfSE9NRX0vYmluL2FzYWRtaW4iIGZhaWxvbmVycm9yPSJ0cnVlIj4KICAgICAgICAgICAgIDxhcmcgbGluZT0iZGVwbG95IC0tcG9ydCAke2FkbWluLnBvcnR9IC0tdXNlciAke2FkbWluLnVzZXJ9IC0tcGFzc3dvcmRmaWxlICR7YWRtaW4ucGFzc3dvcmQuZmlsZX0gJHtlbnYuQVBTX0hPTUV9L2J1aWxkL21vZHVsZS9hcmNoaXZlLyR7c2VydmVyfS5qYXIiLz4KLSAgICAgICAgIDwvZXhlYz4gICAgICAgIAorICAgICAgICAgPC9leGVjPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ0ZXN0LXVuZGVwbG95Ij4KLSAgICAgICAgPGJhc2VuYW1lIGZpbGU9IiR7c3JjLW5hbWV9IiBwcm9wZXJ0eT0ic2VydmVyIiBzdWZmaXg9Ii5qYXZhIi8+ICAgCi0gICAgICAgIDxiYXNlbmFtZSBmaWxlPSIke3NlcnZlcn0iIHByb3BlcnR5PSJwb3J0IiBzdWZmaXg9IkVKQiIvPiAgICAgCisgICAgICAgIDxiYXNlbmFtZSBmaWxlPSIke3NyYy1uYW1lfSIgcHJvcGVydHk9InNlcnZlciIgc3VmZml4PSIuamF2YSIvPgorICAgICAgICA8YmFzZW5hbWUgZmlsZT0iJHtzZXJ2ZXJ9IiBwcm9wZXJ0eT0icG9ydCIgc3VmZml4PSJFSkIiLz4KICAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vYXNhZG1pbiIgZmFpbG9uZXJyb3I9InRydWUiPgogICAgICAgICAgICAgPGFyZyBsaW5lPSJ1bmRlcGxveSAtLXBvcnQgJHthZG1pbi5wb3J0fSAtLXVzZXIgJHthZG1pbi51c2VyfSAtLXBhc3N3b3JkZmlsZSAke2FkbWluLnBhc3N3b3JkLmZpbGV9ICR7c2VydmVyfSIvPgotICAgICAgICAgPC9leGVjPiAgICAgCi0gICAgPC90YXJnZXQ+ICAgIAorICAgICAgICAgPC9leGVjPgorICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJ0ZXN0LXByZXBhcmUtY2xpZW50Ij4KLSAgICAgICAgPGJhc2VuYW1lIGZpbGU9IiR7c3JjLW5hbWV9IiBwcm9wZXJ0eT0ic2VydmVyIiBzdWZmaXg9Ii5qYXZhIi8+ICAgCi0gICAgICAgIDxiYXNlbmFtZSBmaWxlPSIke3NlcnZlcn0iIHByb3BlcnR5PSJwb3J0IiBzdWZmaXg9IkVKQiIvPiAgICAgCisgICAgICAgIDxiYXNlbmFtZSBmaWxlPSIke3NyYy1uYW1lfSIgcHJvcGVydHk9InNlcnZlciIgc3VmZml4PSIuamF2YSIvPgorICAgICAgICA8YmFzZW5hbWUgZmlsZT0iJHtzZXJ2ZXJ9IiBwcm9wZXJ0eT0icG9ydCIgc3VmZml4PSJFSkIiLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbiIvPgogICAgICAgICA8bWtkaXIgZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMiLz4KICAgICAgICAgPGVjaG8gbWVzc2FnZT0iQ3JlYXRlIGFwcGNsaWVudCBqYXIgZmlsZSIvPgpAQCAtNzQsMzQgKzc0LDM0IEBACiAgICAgICAgICAgICA8YXJnIGxpbmU9Ii1rZWVwIC1kICR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvY2xhc3NlcyBsb2NhbHdzZGwvJHtzZXJ2ZXJ9U2VydmljZS53c2RsIi8+CiAgICAgICAgICA8L2V4ZWM+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iY29tcGlsZS1jbGllbnQiLz4KLSAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmphci1jbGllbnQtdXRpbHMiLz4gICAgICAgCisgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5qYXItY2xpZW50LXV0aWxzIi8+CiAgICAgICAgIDxqYXIgZGVzdGZpbGU9IiR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvYXJjaGl2ZS9IZWxsb0FwcENsaWVudC5qYXIiPgogICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2NsYXNzZXMiLz4KICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iLiIgaW5jbHVkZXM9ImxvY2Fsd3NkbC8qKiIvPgogICAgICAgICAgICAgPG1hbmlmZXN0PgotICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iTWFpbi1DbGFzcyIgdmFsdWU9ImNsaWVudC5DbGllbnQiLz4gICAgICAgICAgICAKKyAgICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9Ik1haW4tQ2xhc3MiIHZhbHVlPSJjbGllbnQuQ2xpZW50Ii8+CiAgICAgICAgICAgICA8L21hbmlmZXN0PgotICAgICAgICA8L2phcj4gICAgCi0gICAgPC90YXJnZXQ+ICAKKyAgICAgICAgPC9qYXI+CisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InRlc3QtcnVuIj4KLSAgICAgICAgPGJhc2VuYW1lIGZpbGU9IiR7c3JjLW5hbWV9IiBwcm9wZXJ0eT0ic2VydmVyIiBzdWZmaXg9Ii5qYXZhIi8+ICAgCi0gICAgICAgIDxiYXNlbmFtZSBmaWxlPSIke3NlcnZlcn0iIHByb3BlcnR5PSJwb3J0IiBzdWZmaXg9IkVKQiIvPiAgICAgCisgICAgICAgIDxiYXNlbmFtZSBmaWxlPSIke3NyYy1uYW1lfSIgcHJvcGVydHk9InNlcnZlciIgc3VmZml4PSIuamF2YSIvPgorICAgICAgICA8YmFzZW5hbWUgZmlsZT0iJHtzZXJ2ZXJ9IiBwcm9wZXJ0eT0icG9ydCIgc3VmZml4PSJFSkIiLz4KICAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtlbnYuUzFBU19IT01FfS9iaW4vYXBwY2xpZW50Ij4KLSAgICAgICAgICAgIDxhcmcgbGluZT0iLWNsaWVudCAke2Vudi5BUFNfSE9NRX0vYnVpbGQvbW9kdWxlL2FyY2hpdmUvSGVsbG9BcHBDbGllbnQuamFyIEZBSUxVUkUgZWpiLXNzbC1jYWNlcnQtbm8tY2VydGlmaWNhdGUtdGVzdCIvPiAgICAKLSAgICAgICAgPC9leGVjPiAgICAgICAgIAorICAgICAgICAgICAgPGFyZyBsaW5lPSItY2xpZW50ICR7ZW52LkFQU19IT01FfS9idWlsZC9tb2R1bGUvYXJjaGl2ZS9IZWxsb0FwcENsaWVudC5qYXIgRkFJTFVSRSBlamItc3NsLWNhY2VydC1uby1jZXJ0aWZpY2F0ZS10ZXN0Ii8+CisgICAgICAgIDwvZXhlYz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtaW52YWxpZC1zZWN1cmUiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJIZWxsbyIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIgogICAgICAgICAgICAgICAgIHZhbHVlPSJGQUlMVVJFIGVqYi1zc2wtY2FjZXJ0LWludmFsaWQtY2VydGlmaWNhdGUtdGVzdCIvPgotICAgICAgICA8L2FudGNhbGw+ICAgICAgICAKKyAgICAgICAgPC9hbnRjYWxsPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bmNsaWVudC1zZWN1cmUiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcG5hbWUiIHZhbHVlPSJIZWxsbyIvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIgogICAgICAgICAgICAgICAgIHZhbHVlPSJTVUNDRVNTIGVqYi1zc2wtY2FjZXJ0LXZhbGlkLWNlcnRpZmljYXRlLXRlc3QiLz4KLSAgICAgICAgPC9hbnRjYWxsPiAgICAgICAgICAgICAgICAgICAgICAKLSAgICA8L3RhcmdldD4gICAgICAKLSAgICAKKyAgICAgICAgPC9hbnRjYWxsPgorICAgIDwvdGFyZ2V0PgorCiAgICAgPHRhcmdldCBuYW1lPSJhbGwiIGRlcGVuZHM9ImNsZWFuLCB0ZXN0LWRlcGxveSwgdGVzdC1wcmVwYXJlLWNsaWVudCwgdGVzdC1ydW4sIHRlc3QtdW5kZXBsb3kiPgogICAgIDwvdGFyZ2V0PgogCmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlY3VyaXR5L2VqYjNfc3NsX2NhY2VydC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlY3VyaXR5L2VqYjNfc3NsX2NhY2VydC9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggODcyYTdiZi4uODJiNTk3MCAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZWN1cml0eS9lamIzX3NzbF9jYWNlcnQvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VjdXJpdHkvZWpiM19zc2xfY2FjZXJ0L2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzYsMjcgKzM2LDI3IEBACiAgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgICAgIGJvb2xlYW4gc3VjY2Vzc0V4cGVjdGVkPXRydWU7CiAgICAgICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb247Ci0JICAgIGlmIChhcmdzLmxlbmd0aD4xKSB7CisgICAgICAgIGlmIChhcmdzLmxlbmd0aD4xKSB7CiAgICAgICAgICAgICAgICAgaWYgKGFyZ3NbMF0uY29tcGFyZVRvSWdub3JlQ2FzZSgiRmFpbHVyZSIpPT0wKSB7CiAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3NFeHBlY3RlZD1mYWxzZTsKLSAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj1hcmdzWzFdOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBzdWNjZXNzRXhwZWN0ZWQgPSBmYWxzZTsKLQkJZGVzY3JpcHRpb249IndlYnNlcnZpY2VzLWVqYi1yb2xlc0FsbG93ZWQtYW5ub3RhdGlvbi1uZWdhdGl2ZSI7Ci0JICAgIH0KKyAgICAgICAgZGVzY3JpcHRpb249IndlYnNlcnZpY2VzLWVqYi1yb2xlc0FsbG93ZWQtYW5ub3RhdGlvbi1uZWdhdGl2ZSI7CisgICAgICAgIH0KICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhcnRpbmcgdGVzdCAiICsgZGVzY3JpcHRpb24pOwotCSAgICBzdGF0LmFkZERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKTsKKyAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbihkZXNjcmlwdGlvbik7CiAgICAgICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAgICAgICAgICAgY2xpZW50LmRvVGVzdChkZXNjcmlwdGlvbiwgc3VjY2Vzc0V4cGVjdGVkKTsKLQkgICAgc3RhdC5wcmludFN1bW1hcnkoZGVzY3JpcHRpb24pOworICAgICAgICBzdGF0LnByaW50U3VtbWFyeShkZXNjcmlwdGlvbik7CiAgICAgICAgfQogCiAgICAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZyBkZXNjLCBib29sZWFuIHN1Y2Nlc3NFeHBlY3RlZCkgewotICAgICAgICAgICAKKwogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgSGVsbG9JbXBsIHBvcnQgPSBzZXJ2aWNlLmdldEhlbGxvSW1wbFBvcnQoKTsKLSAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICBTdHJpbmcgcmV0ID0gcG9ydC5zYXlIZWxsbygiQXBwc2VydmVyIFRlc3RlciAhIik7CiAgICAgICAgICAgICAgICBpZihyZXQuaW5kZXhPZigiV2ViU3ZjVGVzdC1IZWxsbyIpID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmV4cGVjdGVkIGdyZWV0aW5nICIgKyByZXQpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZWN1cml0eS9lamIzX3NzbF9jYWNlcnQvZW5kcG9pbnQvSGVsbG9JbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlY3VyaXR5L2VqYjNfc3NsX2NhY2VydC9lbmRwb2ludC9IZWxsb0ltcGwuamF2YQppbmRleCAzYWMwZmI5Li42MTk4ODk2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlY3VyaXR5L2VqYjNfc3NsX2NhY2VydC9lbmRwb2ludC9IZWxsb0ltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlY3VyaXR5L2VqYjNfc3NsX2NhY2VydC9lbmRwb2ludC9IZWxsb0ltcGwuamF2YQpAQCAtMjYsNSArMjYsNSBAQAogICAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIHdobykgewogICAgICAgICByZXR1cm4gIldlYlN2Y1Rlc3QtSGVsbG8gIiArIHdobzsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VjdXJpdHkvZWpiM19zc2xfY2FjZXJ0L2VuZHBvaW50L3N1bi1lamItamFyLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VjdXJpdHkvZWpiM19zc2xfY2FjZXJ0L2VuZHBvaW50L3N1bi1lamItamFyLnhtbAppbmRleCA0YTE4MzFmLi45YmM5M2M0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlY3VyaXR5L2VqYjNfc3NsX2NhY2VydC9lbmRwb2ludC9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZWN1cml0eS9lamIzX3NzbF9jYWNlcnQvZW5kcG9pbnQvc3VuLWVqYi1qYXIueG1sCkBAIC0yMywxMSArMjMsMTEgQEAKICAgICA8ZWpiPgogICAgICAgPGVqYi1uYW1lPkhlbGxvSW1wbDwvZWpiLW5hbWU+CiAgICAgICA8d2Vic2VydmljZS1lbmRwb2ludD4KLQk8cG9ydC1jb21wb25lbnQtbmFtZT5IZWxsb0ltcGw8L3BvcnQtY29tcG9uZW50LW5hbWU+Ci0JPHRyYW5zcG9ydC1ndWFyYW50ZWU+Q09ORklERU5USUFMPC90cmFuc3BvcnQtZ3VhcmFudGVlPiAgICAgICAgCi0JPGxvZ2luLWNvbmZpZz4KLQkgIDxhdXRoLW1ldGhvZD5DTElFTlQtQ0VSVDwvYXV0aC1tZXRob2Q+Ci0JPC9sb2dpbi1jb25maWc+CisgICAgPHBvcnQtY29tcG9uZW50LW5hbWU+SGVsbG9JbXBsPC9wb3J0LWNvbXBvbmVudC1uYW1lPgorICAgIDx0cmFuc3BvcnQtZ3VhcmFudGVlPkNPTkZJREVOVElBTDwvdHJhbnNwb3J0LWd1YXJhbnRlZT4KKyAgICA8bG9naW4tY29uZmlnPgorICAgICAgPGF1dGgtbWV0aG9kPkNMSUVOVC1DRVJUPC9hdXRoLW1ldGhvZD4KKyAgICA8L2xvZ2luLWNvbmZpZz4KICAgICAgIDwvd2Vic2VydmljZS1lbmRwb2ludD4KICAgICA8L2VqYj4KICAgICA8d2Vic2VydmljZS1kZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VjdXJpdHkvZWpiX3NzbF9jYWNlcnQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VjdXJpdHkvZWpiX3NzbF9jYWNlcnQvYnVpbGQucHJvcGVydGllcwppbmRleCBmZjY4YTIwLi44ZDEyNzRmIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlY3VyaXR5L2VqYl9zc2xfY2FjZXJ0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZWN1cml0eS9lamJfc3NsX2NhY2VydC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyMiArMTUsMjIgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9IndzIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfS1lamJ0YXhjYWwiLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9LWVqYnRheGNhbCIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJjb20uc3VuLnMxcGVxZS53ZWJzZXJ2aWNlcy5lamIudGF4Y2FsLmNsaWVudC5UYXhDYWxDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iY29tLnN1bi5zMXBlcWUud2Vic2VydmljZXMuZWpiLnRheGNhbC5jbGllbnQuVGF4Q2FsQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDwhLS1wcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8tLT4KIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamIvc3VuLWVqYi1qYXIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvY2xpZW50L2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3IvY2xpZW50L3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2NsaWVudC9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvY2xpZW50L3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgogPHByb3BlcnR5IG5hbWU9IndzZGwtZmlsZSIgdmFsdWU9IndzZGwvVGF4Q2FsRWpiU2VydmljZS53c2RsIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlY3VyaXR5L2VqYl9zc2xfY2FjZXJ0L2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VjdXJpdHkvZWpiX3NzbF9jYWNlcnQvYnVpbGQueG1sCmluZGV4IDgwNjdjMjQuLmYyZjZlYzUgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VjdXJpdHkvZWpiX3NzbF9jYWNlcnQvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VjdXJpdHkvZWpiX3NzbF9jYWNlcnQvYnVpbGQueG1sCkBAIC0zMSwxNCArMzEsMTQgQEAKICAgICAmY29tbW9uU2VjdXJpdHk7CiAgICAgJnRlc3Rwcm9wZXJ0aWVzOwogCi0gICAgPHRhcmdldCBuYW1lPSJhbGwiIAorICAgIDx0YXJnZXQgbmFtZT0iYWxsIgogICAgIGRlcGVuZHM9ImNsZWFuLCBidWlsZCwgZGVwbG95LCBydW4sIHVuZGVwbG95Ii8+CiAgICAgPHRhcmdldCBuYW1lPSJydW4tdGVzdCIgZGVwZW5kcz0iY2xlYW4sIGJ1aWxkLCBkZXBsb3ksIHJ1biwgdW5kZXBsb3kiLz4KIAogICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iaW5pdC1jb21tb24sY2xlYW4tY29tbW9uLCBnZW5lcmF0ZS1hcnRpZmFjdHMiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJzcmMiIHZhbHVlPSJlamIiLz4KQEAgLTQ5LDE4ICs0OSwxOCBAQAogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJnZW5lcmF0ZS1hcnRpZmFjdHMiPgotCTxhbnRjYWxsIHRhcmdldD0iaW1wb3J0LXdzZGwiPgotCSAgICA8cGFyYW0gbmFtZT0ibWFwcGluZy5maWxlIgotCQl2YWx1ZT0iJHtlamItbWFwcGluZy54bWx9Ii8+Ci0JICAgIDxwYXJhbSBuYW1lPSJjb25maWctd3NkbC5maWxlIgotCQl2YWx1ZT0iY29uZmlnL2NvbmZpZy1lamIueG1sIi8+Ci0JPC9hbnRjYWxsPgotCTxhbnRjYWxsIHRhcmdldD0iaW1wb3J0LXdzZGwiPgotCSAgICA8cGFyYW0gbmFtZT0ibWFwcGluZy5maWxlIgotCQl2YWx1ZT0iJHtjbGllbnQtbWFwcGluZy54bWx9Ii8+Ci0JICAgIDxwYXJhbSBuYW1lPSJjb25maWctd3NkbC5maWxlIgotCQl2YWx1ZT0iY29uZmlnL2NvbmZpZy1jbGllbnQueG1sIi8+Ci0JPC9hbnRjYWxsPgorICAgIDxhbnRjYWxsIHRhcmdldD0iaW1wb3J0LXdzZGwiPgorICAgICAgICA8cGFyYW0gbmFtZT0ibWFwcGluZy5maWxlIgorICAgICAgICB2YWx1ZT0iJHtlamItbWFwcGluZy54bWx9Ii8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJjb25maWctd3NkbC5maWxlIgorICAgICAgICB2YWx1ZT0iY29uZmlnL2NvbmZpZy1lamIueG1sIi8+CisgICAgPC9hbnRjYWxsPgorICAgIDxhbnRjYWxsIHRhcmdldD0iaW1wb3J0LXdzZGwiPgorICAgICAgICA8cGFyYW0gbmFtZT0ibWFwcGluZy5maWxlIgorICAgICAgICB2YWx1ZT0iJHtjbGllbnQtbWFwcGluZy54bWx9Ii8+CisgICAgICAgIDxwYXJhbSBuYW1lPSJjb25maWctd3NkbC5maWxlIgorICAgICAgICB2YWx1ZT0iY29uZmlnL2NvbmZpZy1jbGllbnQueG1sIi8+CisgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogICAgIDx0YXJnZXQgbmFtZT0id3MtcGFja2FnZS1hcHBjbGllbnRqYXItY29tbW9uIj4KICAgICAgICAgPG1rZGlyIGRpcj0iJHthc3NlbWJsZS5kaXJ9Ii8+CkBAIC0xMjEsMTMgKzEyMSwxMyBAQAogICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXBlbmRzPSJpbml0LWNvbW1vbixjb21waWxlIj4KLQk8YW50Y2FsbCB0YXJnZXQ9IndzLXBhY2thZ2UtZWpiLWphci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICA8YW50Y2FsbCB0YXJnZXQ9IndzLXBhY2thZ2UtZWpiLWphci1jb21tb24iPgorICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgICB2YWx1ZT0iY29tL3N1bi9zMXBlcWUvd2Vic2VydmljZXMvZWpiL3RheGNhbC8qLmNsYXNzIiAvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZWpiLmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXIiLz4KLQk8L2FudGNhbGw+Ci0JPGFudGNhbGwgdGFyZ2V0PSJ3cy1wYWNrYWdlLWFwcGNsaWVudGphci1jb21tb24iPgorICAgIDwvYW50Y2FsbD4KKyAgICA8YW50Y2FsbCB0YXJnZXQ9IndzLXBhY2thZ2UtYXBwY2xpZW50amFyLWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgIHZhbHVlPSJjb20vc3VuL3MxcGVxZS93ZWJzZXJ2aWNlcy9lamIvdGF4Y2FsL2NsaWVudC8qLmNsYXNzIiAvPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIKQEAgLTEzNywyMCArMTM3LDIwIEBACiAgICAgICAgIDwvYW50Y2FsbD4KIAogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVhci1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gCisgICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uLCByZWNvbmZpZy1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAgICAKLSAgICAKKworCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9InN0YXRldGF4LWVqYi1lbmRwb2ludC11cmwiIAorICAgICAgICA8cHJvcGVydHkgbmFtZT0ic3RhdGV0YXgtZWpiLWVuZHBvaW50LXVybCIKICAgICAgICAgICAgIHZhbHVlPSJodHRwczovLyR7aHR0cC5ob3N0fToke2h0dHBzLnBvcnR9L3N0YXRldGF4ZWpiIi8+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJmZWR0YXgtZWpiLWVuZHBvaW50LXVybCIgCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJmZWR0YXgtZWpiLWVuZHBvaW50LXVybCIKICAgICAgICAgICAgIHZhbHVlPSJodHRwczovLyR7aHR0cC5ob3N0fToke2h0dHBzLnBvcnR9L2ZlZHRheGVqYiIvPgotIAorCiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9InByb3BlcnR5IHN0YXRldGF4LWVqYi1lbmRwb2ludC11cmwgaXMgc2V0IHRvOiAke3N0YXRldGF4LWVqYi1lbmRwb2ludC11cmx9Ii8+CiAgICAgICAgIDxlY2hvIG1lc3NhZ2U9InByb3BlcnR5IGZlZHRheC1lamItZW5kcG9pbnQtdXJsIGlzIHNldCB0bzogJHtmZWR0YXgtZWpiLWVuZHBvaW50LXVybH0iLz4KIApAQCAtMTYxLDIzICsxNjEsMjMgQEAKICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtaW52YWxpZC1zZWN1cmUiPgogICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudC5hcHBsaWNhdGlvbi5hcmdzIgogICAgICAgICAgICAgdmFsdWU9IiR7c3RhdGV0YXgtZWpiLWVuZHBvaW50LXVybH0gJHtmZWR0YXgtZWpiLWVuZHBvaW50LXVybH0gRmFsc2UgVHJ1ZSIvPgotICAgICAgICA8L2FudGNhbGw+IAorICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuY2xpZW50LWNvbW1vbiI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiCiAgICAgICAgICAgICB2YWx1ZT0iJHtzdGF0ZXRheC1lamItZW5kcG9pbnQtdXJsfSAke2ZlZHRheC1lamItZW5kcG9pbnQtdXJsfSBGYWxzZSBGYWxzZSIvPgotICAgICAgICA8L2FudGNhbGw+ICAgICAgICAgCisgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gICAKKyAgICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVzYWdlLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgogCi0gIDwhLS0gCi0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gCisgIDwhLS0KKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBVc2VyIERlZmluZWQgc3BlY2lmaWMgdGFyZ2V0cwogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIC0tPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZWN1cml0eS9lamJfc3NsX2NhY2VydC9jbGllbnQvVGF4Q2FsQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlY3VyaXR5L2VqYl9zc2xfY2FjZXJ0L2NsaWVudC9UYXhDYWxDbGllbnQuamF2YQppbmRleCAzNTBlMTU2Li5kOTE3NjJmIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlY3VyaXR5L2VqYl9zc2xfY2FjZXJ0L2NsaWVudC9UYXhDYWxDbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlY3VyaXR5L2VqYl9zc2xfY2FjZXJ0L2NsaWVudC9UYXhDYWxDbGllbnQuamF2YQpAQCAtMzAsMTIgKzMwLDEyIEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RTdWl0ZSA9ICJUYXhDYWxFamJiYXNlZFdTIjsKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdENhc2UgPSBudWxsOwogICAgIHByaXZhdGUgc3RhdGljIFRheENhbEVqYlNlcnZpY2UgdGF4Q2FsU2VydmljZSA9IG51bGw7Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0gICAgICAgIAorCiAgICAgICAgIGJvb2xlYW4gc3RhdGVUYXhJbnRlbmRlZFJlc3VsdD10cnVlOwogICAgICAgICBib29sZWFuIGZlZFRheEludGVuZGVkUmVzdWx0PXRydWU7Ci0gICAgICAgIAorCiAgICAgICAgIGlmKGFyZ3NbMF0gPT0gbnVsbCB8fCBhcmdzWzFdID09IG51bGwpewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUYXhDYWwgY2xpZW50OiBBcmd1bWVudCBtaXNzaW5nLiBQbGVhc2UgcHJvdmlkZSB0YXJnZXQiICsKICAgICAgICAgICAgICAgICAgICAgImVuZHBvaW50IGFkZHJlc3MgYXMgYXJndW1lbnQiKTsKQEAgLTQ4LDQ3ICs0OCw0NyBAQAogICAgICAgICAgICAgICAgIGZlZFRheEludGVuZGVkUmVzdWx0ID0gKG5ldyBCb29sZWFuKGFyZ3NbM10pKS5ib29sZWFuVmFsdWUoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJUaGlzIGlzIHRvIHRlc3QgZWpiIGJhc2VkIHdlYnNlcnZpY2UiKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFRheENhbENsaWVudCBjbGllbnQgPSBuZXcgVGF4Q2FsQ2xpZW50KCk7CiAgICAgICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CiAgICAgICAgICAgICB0YXhDYWxTZXJ2aWNlID0gKFRheENhbEVqYlNlcnZpY2UpCiAgICAgICAgICAgICBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvc2VydmljZS9UYXhDYWxFamJTZXJ2aWNlIik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgY2xpZW50LmNhbGxTdGF0ZVRheFNlcnZpY2Uoc3RhdGVUYXhJbnRlbmRlZFJlc3VsdCk7CiAgICAgICAgICAgICBjbGllbnQuY2FsbEZlZFRheFNlcnZpY2UoZmVkVGF4SW50ZW5kZWRSZXN1bHQpOwogICAgICAgICB9Y2F0Y2goRXhjZXB0aW9uIGUpewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBzdGF0LnByaW50U3VtbWFyeSh0ZXN0U3VpdGUpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGNhbGxTdGF0ZVRheFNlcnZpY2UoYm9vbGVhbiBpbnRlbmRlZFJlc3VsdCkgewogICAgICAgICBkb3VibGUgaW5jb21lID0gODUwMDAuMDA7CiAgICAgICAgIGRvdWJsZSBkZWR1Y3Rpb25zID0gNTAwMC4wMDsKLSAgICAgICAgCisKICAgICAgICAgLy9TdHJpbmcgdGFyZ2V0RW5kcG9pbnRBZGRyZXNzID0KLSAgICAgICAgLy8JImh0dHA6Ly9sb2NhbGhvc3Q6MTAyNC90YXhjYWxjdWxhdG9yIjsKLSAgICAgICAgCisgICAgICAgIC8vICAgICJodHRwOi8vbG9jYWxob3N0OjEwMjQvdGF4Y2FsY3VsYXRvciI7CisKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBTdGF0ZVRheElGIHRheENhbElGUG9ydCA9IHRheENhbFNlcnZpY2UuZ2V0U3RhdGVUYXhJRlBvcnQoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAoKFN0dWIpdGF4Q2FsSUZQb3J0KS5fc2V0UHJvcGVydHkoU3R1Yi5FTkRQT0lOVF9BRERSRVNTX1BST1BFUlRZLAogICAgICAgICAgICAgICAgICAgICBzdGF0ZVRheEVuZHBvaW50KTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBkb3VibGUgc3RhdGVUYXggPSB0YXhDYWxJRlBvcnQuZ2V0U3RhdGVUYXgoaW5jb21lLCBkZWR1Y3Rpb25zKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhdGUgdGF4IGZyb20gZWpiIGJhc2VkIFRheENhbFNlcnZpY2UgOiIgKyBzdGF0ZVRheCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYoc3RhdGVUYXggPT0gMjQwMDAuMDAgJiYgaW50ZW5kZWRSZXN1bHQpCiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiBTdGF0ZVRheFBvcnQiLCBzdGF0LlBBU1MpOwogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYWxsIHN1Y2NlZWRlZCB3aGlsZSBpdCBzaG91bGQgaGF2ZSBmYWlsZWQiKTsgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGwgc3VjY2VlZGVkIHdoaWxlIGl0IHNob3VsZCBoYXZlIGZhaWxlZCIpOwogICAgICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKHRlc3RTdWl0ZSArICIgU3RhdGVUYXhQb3J0Iiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgaWYgKGludGVuZGVkUmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUYXhDYWxFamJXZWJzZXJ2aWNlIGNsaWVudCBmYWlsZWQiKTsKQEAgLTEwMiwyNSArMTAyLDI1IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBjYWxsRmVkVGF4U2VydmljZShib29sZWFuIGludGVuZGVkUmVzdWx0KSB7CiAgICAgICAgIGRvdWJsZSBpbmNvbWUgPSA5NzAwMC4wMDsKICAgICAgICAgZG91YmxlIGRlZHVjdGlvbnMgPSA3MDAwLjAwOwogICAgICAgICB0cnkgewotICAgICAgICAgICAgCisKICAgICAgICAgICAgIEZlZFRheElGIHRheENhbElGUG9ydCA9IHRheENhbFNlcnZpY2UuZ2V0RmVkVGF4SUZQb3J0KCk7CiAgICAgICAgICAgICAoKFN0dWIpdGF4Q2FsSUZQb3J0KS5fc2V0UHJvcGVydHkoU3R1Yi5FTkRQT0lOVF9BRERSRVNTX1BST1BFUlRZLAogICAgICAgICAgICAgICAgICAgICBmZWRUYXhFbmRwb2ludCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgZG91YmxlIGZlZFRheCA9IHRheENhbElGUG9ydC5nZXRGZWRUYXgoaW5jb21lLCBkZWR1Y3Rpb25zKTsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRmVkIHRheCBmcm9tIEVqYiBiYXNlZCBUYXhDYWxTZXJ2aWNlIDoiICsgZmVkVGF4KTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZihmZWRUYXggPT0gMTgwMDAuMDAgJiYgaW50ZW5kZWRSZXN1bHQpCiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiBGZWRUYXhQb3J0Iiwgc3RhdC5QQVNTKTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbCBzdWNjZWVkZWQgd2hpbGUgaXQgc2hvdWxkIGhhdmUgZmFpbGVkIik7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIiBGZWRUYXhQb3J0Iiwgc3RhdC5GQUlMKTsKLSAgICAgICAgICAgIH0gICAgCisgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgaWYgKGludGVuZGVkUmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUYXhDYWxFamJXZWJTZXJ2aWNlIGNsaWVudCBmYWlsZWQiKTsKQEAgLTEzMCw3ICsxMzAsNyBAQAogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhwZWN0ZWQgRXhjZXB0aW9uIGNhdWdodCA6Iik7CiAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXModGVzdFN1aXRlICsgIkZlZFRheFBvcnQiLCBzdGF0LlBBU1MpOwotICAgICAgICAgICAgfSAgICAgICAgICAgIAorICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZWN1cml0eS9lamJfc3NsX2NhY2VydC9jb25maWcvY29uZmlnLWNsaWVudC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlY3VyaXR5L2VqYl9zc2xfY2FjZXJ0L2NvbmZpZy9jb25maWctY2xpZW50LnhtbAppbmRleCA5ZGY1M2QyLi5lNTUwOTZkIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlY3VyaXR5L2VqYl9zc2xfY2FjZXJ0L2NvbmZpZy9jb25maWctY2xpZW50LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlY3VyaXR5L2VqYl9zc2xfY2FjZXJ0L2NvbmZpZy9jb25maWctY2xpZW50LnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8Y29uZmlndXJhdGlvbgogICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4LXJwYy9yaS9jb25maWciPgotICA8d3NkbCAKKyAgPHdzZGwKICAgICAgIGxvY2F0aW9uPSJ3c2RsL1RheENhbEVqYlNlcnZpY2Uud3NkbCIKICAgICAgIHBhY2thZ2VOYW1lPSJjb20uc3VuLnMxcGVxZS53ZWJzZXJ2aWNlcy5lamIudGF4Y2FsLmNsaWVudCIvPgogPC9jb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZWN1cml0eS9lamJfc3NsX2NhY2VydC9jb25maWcvY29uZmlnLWVqYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlY3VyaXR5L2VqYl9zc2xfY2FjZXJ0L2NvbmZpZy9jb25maWctZWpiLnhtbAppbmRleCA3ODFhYjFiLi4yYWZkY2FhIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlY3VyaXR5L2VqYl9zc2xfY2FjZXJ0L2NvbmZpZy9jb25maWctZWpiLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlY3VyaXR5L2VqYl9zc2xfY2FjZXJ0L2NvbmZpZy9jb25maWctZWpiLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8Y29uZmlndXJhdGlvbgogICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4LXJwYy9yaS9jb25maWciPgotICA8d3NkbCAKKyAgPHdzZGwKICAgICAgIGxvY2F0aW9uPSJ3c2RsL1RheENhbEVqYlNlcnZpY2Uud3NkbCIKICAgICAgIHBhY2thZ2VOYW1lPSJjb20uc3VuLnMxcGVxZS53ZWJzZXJ2aWNlcy5lamIudGF4Y2FsIi8+CiA8L2NvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlY3VyaXR5L2VqYl9zc2xfY2FjZXJ0L2NvbmZpZy9jb25maWctc2VpLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VjdXJpdHkvZWpiX3NzbF9jYWNlcnQvY29uZmlnL2NvbmZpZy1zZWkueG1sCmluZGV4IDI1ODNjMTkuLjNhYTMzYjEgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VjdXJpdHkvZWpiX3NzbF9jYWNlcnQvY29uZmlnL2NvbmZpZy1zZWkueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VjdXJpdHkvZWpiX3NzbF9jYWNlcnQvY29uZmlnL2NvbmZpZy1zZWkueG1sCkBAIC0xOCwxNiArMTgsMTYgQEAKIC0tPgogCiA8Y29uZmlndXJhdGlvbgotCXhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+Ci0JPHNlcnZpY2UgbmFtZT0iVGF4Q2FsRWpiU2VydmljZSIKLQkJdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdGF4Lm9yZy93c2RsIgotCQl0eXBlTmFtZXNwYWNlPSJodHRwOi8vdGF4Lm9yZy90eXBlcyIKLQkJcGFja2FnZU5hbWU9ImNvbS5zdW4uczFwZXFlLndlYnNlcnZpY2VzLmVqYi50YXhjYWwiPgotCQk8aW50ZXJmYWNlIG5hbWU9ImNvbS5zdW4uczFwZXFlLndlYnNlcnZpY2VzLmVqYi50YXhjYWwuRmVkVGF4SUYiCi0JCQlzZXJ2YW50TmFtZT0iY29tLnN1bi5zMXBlcWUud2Vic2VydmljZXMuZWpiLnRheGNhbC5GZWRUYXhFamIiLz4KLQkJPGludGVyZmFjZSBuYW1lPSJjb20uc3VuLnMxcGVxZS53ZWJzZXJ2aWNlcy5lamIudGF4Y2FsLlN0YXRlVGF4SUYiCi0JCQlzZXJ2YW50TmFtZT0iY29tLnN1bi5zMXBlcWUud2Vic2VydmljZXMuZWpiLnRheGNhbC5TdGF0ZVRheEVqYiI+Ci0JCTwvaW50ZXJmYWNlPgotCTwvc2VydmljZT4KKyAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4LXJwYy9yaS9jb25maWciPgorICAgIDxzZXJ2aWNlIG5hbWU9IlRheENhbEVqYlNlcnZpY2UiCisgICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RheC5vcmcvd3NkbCIKKyAgICAgICAgdHlwZU5hbWVzcGFjZT0iaHR0cDovL3RheC5vcmcvdHlwZXMiCisgICAgICAgIHBhY2thZ2VOYW1lPSJjb20uc3VuLnMxcGVxZS53ZWJzZXJ2aWNlcy5lamIudGF4Y2FsIj4KKyAgICAgICAgPGludGVyZmFjZSBuYW1lPSJjb20uc3VuLnMxcGVxZS53ZWJzZXJ2aWNlcy5lamIudGF4Y2FsLkZlZFRheElGIgorICAgICAgICAgICAgc2VydmFudE5hbWU9ImNvbS5zdW4uczFwZXFlLndlYnNlcnZpY2VzLmVqYi50YXhjYWwuRmVkVGF4RWpiIi8+CisgICAgICAgIDxpbnRlcmZhY2UgbmFtZT0iY29tLnN1bi5zMXBlcWUud2Vic2VydmljZXMuZWpiLnRheGNhbC5TdGF0ZVRheElGIgorICAgICAgICAgICAgc2VydmFudE5hbWU9ImNvbS5zdW4uczFwZXFlLndlYnNlcnZpY2VzLmVqYi50YXhjYWwuU3RhdGVUYXhFamIiPgorICAgICAgICA8L2ludGVyZmFjZT4KKyAgICA8L3NlcnZpY2U+CiA8L2NvbmZpZ3VyYXRpb24+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VjdXJpdHkvZWpiX3NzbF9jYWNlcnQvZGVzY3JpcHRvci9lamIvc3VuLWVqYi1qYXIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZWN1cml0eS9lamJfc3NsX2NhY2VydC9kZXNjcmlwdG9yL2VqYi9zdW4tZWpiLWphci54bWwKaW5kZXggZmZmZGRjOS4uNWI3ZDcyOSAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZWN1cml0eS9lamJfc3NsX2NhY2VydC9kZXNjcmlwdG9yL2VqYi9zdW4tZWpiLWphci54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZWN1cml0eS9lamJfc3NsX2NhY2VydC9kZXNjcmlwdG9yL2VqYi9zdW4tZWpiLWphci54bWwKQEAgLTI4LDEwICsyOCwxMCBAQAogICAgICAgPHdlYnNlcnZpY2UtZW5kcG9pbnQ+CiAgICAgICAgIDxwb3J0LWNvbXBvbmVudC1uYW1lPlN0YXRlVGF4SUZQb3J0PC9wb3J0LWNvbXBvbmVudC1uYW1lPgogICAgICAgICA8ZW5kcG9pbnQtYWRkcmVzcy11cmk+c3RhdGV0YXhlamI8L2VuZHBvaW50LWFkZHJlc3MtdXJpPgotCTx0cmFuc3BvcnQtZ3VhcmFudGVlPkNPTkZJREVOVElBTDwvdHJhbnNwb3J0LWd1YXJhbnRlZT4KLQk8bG9naW4tY29uZmlnPgotCSAgPGF1dGgtbWV0aG9kPkNMSUVOVC1DRVJUPC9hdXRoLW1ldGhvZD4KLQk8L2xvZ2luLWNvbmZpZz4KKyAgICA8dHJhbnNwb3J0LWd1YXJhbnRlZT5DT05GSURFTlRJQUw8L3RyYW5zcG9ydC1ndWFyYW50ZWU+CisgICAgPGxvZ2luLWNvbmZpZz4KKyAgICAgIDxhdXRoLW1ldGhvZD5DTElFTlQtQ0VSVDwvYXV0aC1tZXRob2Q+CisgICAgPC9sb2dpbi1jb25maWc+CiAgICAgICA8L3dlYnNlcnZpY2UtZW5kcG9pbnQ+CiAgICAgPC9lamI+CiAgICAgPGVqYj4KQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgIDx3ZWJzZXJ2aWNlLWVuZHBvaW50PgogICAgICAgICA8cG9ydC1jb21wb25lbnQtbmFtZT5GZWRUYXhJRlBvcnQ8L3BvcnQtY29tcG9uZW50LW5hbWU+CiAgICAgICAgIDxlbmRwb2ludC1hZGRyZXNzLXVyaT5mZWR0YXhlamI8L2VuZHBvaW50LWFkZHJlc3MtdXJpPgotCTx0cmFuc3BvcnQtZ3VhcmFudGVlPkNPTkZJREVOVElBTDwvdHJhbnNwb3J0LWd1YXJhbnRlZT4KKyAgICA8dHJhbnNwb3J0LWd1YXJhbnRlZT5DT05GSURFTlRJQUw8L3RyYW5zcG9ydC1ndWFyYW50ZWU+CiAgICAgICA8L3dlYnNlcnZpY2UtZW5kcG9pbnQ+CiAgICAgPC9lamI+CiAgIDwvZW50ZXJwcmlzZS1iZWFucz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VjdXJpdHkvZWpiX3NzbF9jYWNlcnQvZWpiL0ZlZFRheEVqYi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZWN1cml0eS9lamJfc3NsX2NhY2VydC9lamIvRmVkVGF4RWpiLmphdmEKaW5kZXggZjQ1Y2I0NS4uZWRjZjI1YyAxMDA3NTUKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZWN1cml0eS9lamJfc3NsX2NhY2VydC9lamIvRmVkVGF4RWpiLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZWN1cml0eS9lamJfc3NsX2NhY2VydC9lamIvRmVkVGF4RWpiLmphdmEKQEAgLTE3LDcgKzE3LDcgQEAKIHBhY2thZ2UgY29tLnN1bi5zMXBlcWUud2Vic2VydmljZXMuZWpiLnRheGNhbDsKIAogaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOwotaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsgCitpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25CZWFuOwogaW1wb3J0IGpha2FydGEuZWpiLlNlc3Npb25Db250ZXh0OwogaW1wb3J0IGpha2FydGEuZWpiLkVKQkV4Y2VwdGlvbjsKQEAgLTI2LDExICsyNiwxMSBAQAogcHVibGljIGNsYXNzIEZlZFRheEVqYiBpbXBsZW1lbnRzIFNlc3Npb25CZWFuIHsKIAogICAgIHByaXZhdGUgU2Vzc2lvbkNvbnRleHQgc2M7Ci0gICAgCisKICAgICBwdWJsaWMgRmVkVGF4RWpiKCl7fQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBGZWRUYXhFamI6OmVqYkNyZWF0ZSAhISIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW4gRmVkVGF4RWpiOjplamJDcmVhdGUgISEiKTsKICAgICB9CiAKICAgICBwdWJsaWMgZG91YmxlIGdldEZlZFRheChkb3VibGUgaW5jb21lLCBkb3VibGUgZGVkdWN0aW9ucykgewpAQCAtMzgsMTMgKzM4LDEzIEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgc2MpIHsKLQkKKwogICAgICAgICB0aGlzLnNjID0gc2M7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7fQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7fQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkge30KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VjdXJpdHkvZWpiX3NzbF9jYWNlcnQvZWpiL0ZlZFRheElGLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlY3VyaXR5L2VqYl9zc2xfY2FjZXJ0L2VqYi9GZWRUYXhJRi5qYXZhCmluZGV4IGU0YzEzMjIuLjU0M2ZiNTQgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VjdXJpdHkvZWpiX3NzbF9jYWNlcnQvZWpiL0ZlZFRheElGLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZWN1cml0eS9lamJfc3NsX2NhY2VydC9lamIvRmVkVGF4SUYuamF2YQpAQCAtMjIsNiArMjIsNiBAQAogCiBwdWJsaWMgaW50ZXJmYWNlIEZlZFRheElGIGV4dGVuZHMgUmVtb3RlewogCi0JcHVibGljIGRvdWJsZSBnZXRGZWRUYXgoZG91YmxlIGluY29tZSwgZG91YmxlIGRlZHVjdGlvbnMpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgcHVibGljIGRvdWJsZSBnZXRGZWRUYXgoZG91YmxlIGluY29tZSwgZG91YmxlIGRlZHVjdGlvbnMpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VjdXJpdHkvZWpiX3NzbF9jYWNlcnQvZWpiL1N0YXRlVGF4RWpiLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlY3VyaXR5L2VqYl9zc2xfY2FjZXJ0L2VqYi9TdGF0ZVRheEVqYi5qYXZhCmluZGV4IDc4Y2VhNDUuLjMzNTdlY2MgMTAwNzU1Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VjdXJpdHkvZWpiX3NzbF9jYWNlcnQvZWpiL1N0YXRlVGF4RWpiLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZWN1cml0eS9lamJfc3NsX2NhY2VydC9lamIvU3RhdGVUYXhFamIuamF2YQpAQCAtMTcsNyArMTcsNyBAQAogcGFja2FnZSBjb20uc3VuLnMxcGVxZS53ZWJzZXJ2aWNlcy5lamIudGF4Y2FsOwogCiBpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7Ci1pbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOyAKK2ltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkJlYW47CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQ7CiBpbXBvcnQgamFrYXJ0YS5lamIuRUpCRXhjZXB0aW9uOwpAQCAtMjYsMTEgKzI2LDExIEBACiBwdWJsaWMgY2xhc3MgU3RhdGVUYXhFamIgaW1wbGVtZW50cyBTZXNzaW9uQmVhbiB7CiAKICAgICBwcml2YXRlIFNlc3Npb25Db250ZXh0IHNjOwotICAgIAorCiAgICAgcHVibGljIFN0YXRlVGF4RWpiKCl7fQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZVRheEVqYjo6ZWpiQ3JlYXRlICEhIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTdGF0ZVRheEVqYjo6ZWpiQ3JlYXRlICEhIik7CiAgICAgfQogCiAgICAgcHVibGljIGRvdWJsZSBnZXRTdGF0ZVRheChkb3VibGUgaW5jb21lLCBkb3VibGUgZGVkdWN0aW9ucykgewpAQCAtMzgsMTMgKzM4LDEzIEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgc2MpIHsKLQkKKwogICAgICAgICB0aGlzLnNjID0gc2M7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7fQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7fQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkge30KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VjdXJpdHkvZWpiX3NzbF9jYWNlcnQvZWpiL1N0YXRlVGF4SUYuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VjdXJpdHkvZWpiX3NzbF9jYWNlcnQvZWpiL1N0YXRlVGF4SUYuamF2YQppbmRleCAzZTg3YTIzLi4zOGFkNDUzIDEwMDc1NQotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlY3VyaXR5L2VqYl9zc2xfY2FjZXJ0L2VqYi9TdGF0ZVRheElGLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZWN1cml0eS9lamJfc3NsX2NhY2VydC9lamIvU3RhdGVUYXhJRi5qYXZhCkBAIC0yMiw2ICsyMiw2IEBACiAKIHB1YmxpYyBpbnRlcmZhY2UgU3RhdGVUYXhJRiBleHRlbmRzIFJlbW90ZXsKIAotCXB1YmxpYyBkb3VibGUgZ2V0U3RhdGVUYXgoZG91YmxlIGluY29tZSwgZG91YmxlIGRlZHVjdGlvbnMpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgcHVibGljIGRvdWJsZSBnZXRTdGF0ZVRheChkb3VibGUgaW5jb21lLCBkb3VibGUgZGVkdWN0aW9ucykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZWN1cml0eS9yZXBvcnQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZWN1cml0eS9yZXBvcnQueG1sCmluZGV4IDY1YTMyYWUuLjA5NGUzNjUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VjdXJpdHkvcmVwb3J0LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlY3VyaXR5L3JlcG9ydC54bWwKQEAgLTIzLDcgKzIzLDcgQEAKIDx0YXJnZXQgbmFtZT0icmVwb3J0Ij4KIDxlY2hvIG1lc3NhZ2U9IkNvbXBhcmluZyByZXN1bHRzIHdpdGggZXhwZWN0ZWQgcmVzdWx0cyIvPgogCi0gCisKICAgICA8eHNsdCBzdHlsZT0iJHtzdHlsZXNoZWV0fSIKICAgICAgICAgICAgIGluPSIke3htbGZpbGV9IiBvdXQ9IiR7aHRtbGZpbGV9IgogICAgICAgICAgICAgYmFzZWRpcj0iLiIgZGVzdGRpcj0iLiIgLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VydmxldGhhbmRsZXIvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VydmxldGhhbmRsZXIvYnVpbGQucHJvcGVydGllcwppbmRleCBlMmVhNDk4Li5kMDhhYTFkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlcnZsZXRoYW5kbGVyL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZXJ2bGV0aGFuZGxlci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyNiArMTUsMjYgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InNpbXBsZXNlcnZsZXRoYW5kbGVyIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2ViLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImVqYmphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgIAorPHByb3BlcnR5IG5hbWU9ImVqYmphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWJzZXJ2aWNlcy54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYnNlcnZpY2VzLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHBDbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZXJ2bGV0aGFuZGxlci9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlcnZsZXRoYW5kbGVyL2J1aWxkLnhtbAppbmRleCA0ZWJkMGY5Li40NmIyM2U0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlcnZsZXRoYW5kbGVyL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlcnZsZXRoYW5kbGVyL2J1aWxkLnhtbApAQCAtMzAsOSArMzAsOSBAQAogICAgICZ0ZXN0cHJvcGVydGllczsKIAogICA8dGFyZ2V0IG5hbWU9InJ1bi53c2NvbXBpbGUiPgotCTxleGVjIGV4ZWN1dGFibGU9IiR7V1NDT01QSUxFfSIgZmFpbG9uZXJyb3I9InRydWUiID4KLSAgICAgICAgPGFyZyBsaW5lPSItc291cmNlIDEuMS4yICR7d3Njb21waWxlLmNvbW1hbmR9IiAvPiAgICAgICAgCi0JPC9leGVjPgorICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7V1NDT01QSUxFfSIgZmFpbG9uZXJyb3I9InRydWUiID4KKyAgICAgICAgPGFyZyBsaW5lPSItc291cmNlIDEuMS4yICR7d3Njb21waWxlLmNvbW1hbmR9IiAvPgorICAgIDwvZXhlYz4KICAgPC90YXJnZXQ+CiAKIDwhLS0gTk9URS4gdGhlIHNpbXBsZSBtYXBwaW5nIHRlc3QgYW5kIGZ1bGwgbWFwcGluZyB0ZXN0IGNhbgpAQCAtNDYsNTMgKzQ2LDUzIEBACiAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0ic2VydmxldCIvPgogICAgIDwvYW50Y2FsbD4KICAgPC90YXJnZXQ+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iZ2VuLXNlcnZsZXQtd3NkbCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgotICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L1dFQi1JTkYvd3NkbCIvPiAKKyAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9XRUItSU5GL3dzZGwiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi53c2NvbXBpbGUiPgotICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIiAKLSAgIHZhbHVlPSItZGVmaW5lIC1tYXBwaW5nICR7YnVpbGQuY2xhc3Nlcy5kaXJ9L1NpbXBsZUhhbmRsZXJNYXBwaW5nX3NlcnZsZXQueG1sIC1jcCAke2J1aWxkLmNsYXNzZXMuZGlyfSAta2VlcCAtZCAke2J1aWxkLmNsYXNzZXMuZGlyfS9XRUItSU5GL3dzZGwgY29uZmlnLWludGVyZmFjZS54bWwiLz4gCisgICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiCisgICB2YWx1ZT0iLWRlZmluZSAtbWFwcGluZyAke2J1aWxkLmNsYXNzZXMuZGlyfS9TaW1wbGVIYW5kbGVyTWFwcGluZ19zZXJ2bGV0LnhtbCAtY3AgJHtidWlsZC5jbGFzc2VzLmRpcn0gLWtlZXAgLWQgJHtidWlsZC5jbGFzc2VzLmRpcn0vV0VCLUlORi93c2RsIGNvbmZpZy1pbnRlcmZhY2UueG1sIi8+CiAgICAgPC9hbnRjYWxsPgotICA8L3RhcmdldD4gICAgCi0gICAKKyAgPC90YXJnZXQ+CisKICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZS13ZWIiIGRlcGVuZHM9ImluaXQtY29tbW9uLCBjb21waWxlLCBnZW4tc2VydmxldC13c2RsIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9IndlYmNsaWVudC13YXItY29tbW9uIj4KLSAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPiAgIAorICAgICAgICA8cGFyYW0gbmFtZT0iaGFzV2ViY2xpZW50IiB2YWx1ZT0ieWVzIi8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJtYXBwaW5nZmlsZS5sb2NhdGlvbiIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJtYXBwaW5nZmlsZS5uYW1lIiB2YWx1ZT0iU2ltcGxlSGFuZGxlck1hcHBpbmdfc2VydmxldC54bWwiLz4KICAgICAgICAgPHBhcmFtIG5hbWU9IndzZGxmaWxlLmxvY2F0aW9uIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vV0VCLUlORi93c2RsIi8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJ3c2RsZmlsZS5uYW1lIiB2YWx1ZT0iU2ltcGxlSGFuZGxlclNlcnZsZXQud3NkbCIvPgogICAgICAgICA8cGFyYW0gbmFtZT0id2Vid2FyLmNsYXNzZXMiIHZhbHVlPSJzZXJ2bGV0LyouY2xhc3MiLz4KLSAgICAgPC9hbnRjYWxsPiAgCisgICAgIDwvYW50Y2FsbD4KICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAgCisKICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZSIgZGVwZW5kcz0iYXNzZW1ibGUtd2ViLCBhc3NlbWJsZS1jbGllbnQiLz4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZS1jbGllbnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNsaWVudCIvPgotICAgIDwvYW50Y2FsbD4gICAgCi0gICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvd3NkbCIvPiAgICAgCi0gICAgPGNvcHkgZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vV0VCLUlORi93c2RsL1NpbXBsZUhhbmRsZXJTZXJ2bGV0LndzZGwiIHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi93c2RsIi8+ICAgIAorICAgIDwvYW50Y2FsbD4KKyAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi93c2RsIi8+CisgICAgPGNvcHkgZmlsZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vV0VCLUlORi93c2RsL1NpbXBsZUhhbmRsZXJTZXJ2bGV0LndzZGwiIHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi93c2RsIi8+CiAgICAgPHVuamFyIHNyYz0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgIGRlc3Q9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJhcHBjbGllbnQtamFyLWNvbW1vbiI+Ci0gICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgIHZhbHVlPSJTaW1wbGVIYW5kbGVyTWFwcGluZ19zZXJ2bGV0LnhtbCxNRVRBLUlORi93c2RsLyoqLHNpbXBsZWhhbmRsZXIvKiosc2VydmxldC9TaW1wbGVTZXJ2ZXIuY2xhc3MsY29tLyoqIiAvPgotICAgIDwvYW50Y2FsbD4gIAorICAgIDwvYW50Y2FsbD4KICAgPC90YXJnZXQ+Ci0gIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSJodHRwOi8vJHtodHRwLmhvc3R9OiR7aHR0cC5wb3J0fS9TZXJ2bGV0SGFuZGxlclRlc3QvU2VydmxldEhhbmRsZXJUZXN0Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gIAorICAgIDwvdGFyZ2V0PgogCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS13YXItY29tbW9uIj4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9IlNlcnZsZXRIYW5kbGVyVGVzdCIvPiAgIAotICAgICAgICA8L2FudGNhbGw+ICAgICAgICAKKyAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJjb250ZXh0cm9vdCIgdmFsdWU9IlNlcnZsZXRIYW5kbGVyVGVzdCIvPgorICAgICAgICA8L2FudGNhbGw+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNsaWVudC1jb21tb24iLz4KICAgICAgICAgPG1vdmUgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50Q2xpZW50LmphciIgdG9GaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcENsaWVudC5qYXIiLz4KICAgICA8L3RhcmdldD4KQEAgLTEwMCwxMCArMTAwLDEwIEBACiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY2xpZW50LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgCi0gICAgCisgICAgPC90YXJnZXQ+CisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VydmxldGhhbmRsZXIvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZXJ2bGV0aGFuZGxlci9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggMzZmZTlmNS4uODZkZDBmZiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZXJ2bGV0aGFuZGxlci9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZXJ2bGV0aGFuZGxlci9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTMwLDI4ICszMCwyOCBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ3ZWJzZXJ2aWNlcy1zaW1wbGUtc29hcGZhdWx0Iik7CiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoYXJncyk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3ZWJzZXJ2aWNlcy1zb2FwZmF1bHRJRCIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGRvVGVzdChTdHJpbmdbXSBhcmdzKSB7Ci0gICAgCXRyeSB7Ci0gICAgICAgICAgICAKKyAgICAgICAgdHJ5IHsKKwogICAgICAgICAgICAgU3RyaW5nIHRhcmdldEVuZHBvaW50QWRkcmVzcyA9IGFyZ3NbMF07Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFNlcnZpY2UgdGVzdFNlcnZpY2UgPSAoU2VydmljZSkgaWMubG9va3VwKCJqYXZhOmNvbXAvZW52L3NlcnZpY2Uvc2ltcGxlaGFuZGxlciIpOwogICAgICAgICAgICAgU2ltcGxlU2VydmVyIHRlc3QgPSAoU2ltcGxlU2VydmVyKQogICAgICAgICAgICAgdGVzdFNlcnZpY2UuZ2V0UG9ydChTaW1wbGVTZXJ2ZXIuY2xhc3MpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgICgoU3R1Yil0ZXN0KS5fc2V0UHJvcGVydHkoU3R1Yi5FTkRQT0lOVF9BRERSRVNTX1BST1BFUlRZLAogICAgICAgICAgICAgICAgICAgICB0YXJnZXRFbmRwb2ludEFkZHJlc3MpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZW5kcG9pbnQgYWRkcmVzcyA9ICIgKyB0YXJnZXRFbmRwb2ludEFkZHJlc3MpOwogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbnZvY2F0aW9uIHJldHVybmVkICIgKyB0ZXN0LnNheUhlbGxvKCJqZXJvbWUiKSk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZXJ2bGV0aGFuZGxlci9jb25maWctaW50ZXJmYWNlLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VydmxldGhhbmRsZXIvY29uZmlnLWludGVyZmFjZS54bWwKaW5kZXggMDdlMWNiMC4uNGIwODA1OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZXJ2bGV0aGFuZGxlci9jb25maWctaW50ZXJmYWNlLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlcnZsZXRoYW5kbGVyL2NvbmZpZy1pbnRlcmZhY2UueG1sCkBAIC0xOSwxMSArMTksMTEgQEAKIAogPGNvbmZpZ3VyYXRpb24KICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheC1ycGMvcmkvY29uZmlnIj4KLSAgPHNlcnZpY2UgCi0gICAgICBuYW1lPSJTaW1wbGVIYW5kbGVyU2VydmxldCIgCi0gICAgICB0YXJnZXROYW1lc3BhY2U9InVybjpIYW5kbGVyVGVzdCIgCi0gICAgICB0eXBlTmFtZXNwYWNlPSJ1cm46SGFuZGxlclRlc3QiIAorICA8c2VydmljZQorICAgICAgbmFtZT0iU2ltcGxlSGFuZGxlclNlcnZsZXQiCisgICAgICB0YXJnZXROYW1lc3BhY2U9InVybjpIYW5kbGVyVGVzdCIKKyAgICAgIHR5cGVOYW1lc3BhY2U9InVybjpIYW5kbGVyVGVzdCIKICAgICAgIHBhY2thZ2VOYW1lPSJoYW5kbGVydGVzdCI+CiAgICAgICA8aW50ZXJmYWNlIG5hbWU9InNlcnZsZXQuU2ltcGxlU2VydmVyIi8+CiAgIDwvc2VydmljZT4KLTwvY29uZmlndXJhdGlvbj4gCis8L2NvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlcnZsZXRoYW5kbGVyL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VydmxldGhhbmRsZXIvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sCmluZGV4IGMxNGJiN2EuLmQyZDgzMDEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VydmxldGhhbmRsZXIvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VydmxldGhhbmRsZXIvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sCkBAIC0yNCwxMSArMjQsMTEgQEAKICAgICA8ZGVzY3JpcHRpb24+c2ltcGxlIGhhbmRsZXIgc2VydmljZSByZWY8L2Rlc2NyaXB0aW9uPgogICAgIDxzZXJ2aWNlLXJlZi1uYW1lPnNlcnZpY2Uvc2ltcGxlaGFuZGxlcjwvc2VydmljZS1yZWYtbmFtZT4KICAgICA8c2VydmljZS1pbnRlcmZhY2U+amF2YXgueG1sLnJwYy5TZXJ2aWNlPC9zZXJ2aWNlLWludGVyZmFjZT4KLSAgICA8d3NkbC1maWxlPk1FVEEtSU5GL3dzZGwvU2ltcGxlSGFuZGxlclNlcnZsZXQud3NkbDwvd3NkbC1maWxlPiAgICAKKyAgICA8d3NkbC1maWxlPk1FVEEtSU5GL3dzZGwvU2ltcGxlSGFuZGxlclNlcnZsZXQud3NkbDwvd3NkbC1maWxlPgogICAgIDxqYXhycGMtbWFwcGluZy1maWxlPlNpbXBsZUhhbmRsZXJNYXBwaW5nX3NlcnZsZXQueG1sPC9qYXhycGMtbWFwcGluZy1maWxlPgotICAgIDxzZXJ2aWNlLXFuYW1lIHhtbG5zOnNlcnZpY2Vucz0idXJuOkhhbmRsZXJUZXN0Ij5zZXJ2aWNlbnM6U2ltcGxlSGFuZGxlclNlcnZsZXQ8L3NlcnZpY2UtcW5hbWU+ICAgICAgICAgICAgICAgCisgICAgPHNlcnZpY2UtcW5hbWUgeG1sbnM6c2VydmljZW5zPSJ1cm46SGFuZGxlclRlc3QiPnNlcnZpY2VuczpTaW1wbGVIYW5kbGVyU2VydmxldDwvc2VydmljZS1xbmFtZT4KICAgICA8cG9ydC1jb21wb25lbnQtcmVmPgogICAgICAgPHNlcnZpY2UtZW5kcG9pbnQtaW50ZXJmYWNlPmVqYi5TaW1wbGVTZXJ2ZXI8L3NlcnZpY2UtZW5kcG9pbnQtaW50ZXJmYWNlPgotICAgIDwvcG9ydC1jb21wb25lbnQtcmVmPiAgICAgICAgICAKKyAgICA8L3BvcnQtY29tcG9uZW50LXJlZj4KICAgPC9zZXJ2aWNlLXJlZj4KIDwvYXBwbGljYXRpb24tY2xpZW50PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZXJ2bGV0aGFuZGxlci9zZXJ2bGV0L1NlcnZsZXRIYW5kbGVyVGVzdEltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VydmxldGhhbmRsZXIvc2VydmxldC9TZXJ2bGV0SGFuZGxlclRlc3RJbXBsLmphdmEKaW5kZXggMzM2ZTRmOC4uZjlmMjExNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZXJ2bGV0aGFuZGxlci9zZXJ2bGV0L1NlcnZsZXRIYW5kbGVyVGVzdEltcGwuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlcnZsZXRoYW5kbGVyL3NlcnZsZXQvU2VydmxldEhhbmRsZXJUZXN0SW1wbC5qYXZhCkBAIC0yMiwyMyArMjIsMjMgQEAKIAogcHVibGljIGNsYXNzIFNlcnZsZXRIYW5kbGVyVGVzdEltcGwgaW1wbGVtZW50cyBTZXNzaW9uQmVhbiB7CiAgICAgU2Vzc2lvbkNvbnRleHQgc2M7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyBoZWxsbykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiAic2FsdXQgIiArIGhlbGxvOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gU2ltcGxlU2VydmVyOjo6ZWpiQ3JlYXRlICEhIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBTaW1wbGVTZXJ2ZXI6OjplamJDcmVhdGUgISEiKTsKICAgICB9Ci0gICAgCisKICAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgc2MpIHsKLQkKKwogICAgICAgICB0aGlzLnNjID0gc2M7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7fQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7fQotICAgIAotICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHt9ICAgCisKKyAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7fQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZXJ2bGV0aGFuZGxlci9zZXJ2bGV0L1NpbXBsZUhhbmRsZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VydmxldGhhbmRsZXIvc2VydmxldC9TaW1wbGVIYW5kbGVyLmphdmEKaW5kZXggNjI4YTI1MS4uYzk4NTE1MiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZXJ2bGV0aGFuZGxlci9zZXJ2bGV0L1NpbXBsZUhhbmRsZXIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlcnZsZXRoYW5kbGVyL3NlcnZsZXQvU2ltcGxlSGFuZGxlci5qYXZhCkBAIC0yMSwxMyArMjEsMTMgQEAKIGltcG9ydCBqYXZheC54bWwucnBjLmhhbmRsZXIuKjsKIAogcHVibGljIGNsYXNzIFNpbXBsZUhhbmRsZXIgZXh0ZW5kcyBHZW5lcmljSGFuZGxlciB7Ci0gICAgCisKICAgICBwcm90ZWN0ZWQgSGFuZGxlckluZm8gaW5mbyA9IG51bGw7Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpbml0KEhhbmRsZXJJbmZvIGluZm8pIHsKICAgICAgICAgdGhpcy5pbmZvID0gaW5mbzsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBoYW5kbGVSZXF1ZXN0KE1lc3NhZ2VDb250ZXh0IGNvbnRleHQpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIERhdGUgc3RhcnRUaW1lID0gbmV3IERhdGUoKTsKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBoYW5kbGVSZXNwb25zZShNZXNzYWdlQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBEYXRlIHN0YXJ0VGltZSA9IChEYXRlKSBjb250ZXh0LmdldFByb3BlcnR5KCJzdGFydFRpbWUiKTsKQEAgLTQ5LDcgKzQ5LDcgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgUU5hbWVbXSBnZXRIZWFkZXJzKCkgewogICAgICAgICByZXR1cm4gbmV3IFFOYW1lWzBdOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VydmxldGhhbmRsZXIvc2VydmxldC9TaW1wbGVTZXJ2ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2VydmxldGhhbmRsZXIvc2VydmxldC9TaW1wbGVTZXJ2ZXIuamF2YQppbmRleCBkYzVjZjI2Li4wNjc1Y2QyIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NlcnZsZXRoYW5kbGVyL3NlcnZsZXQvU2ltcGxlU2VydmVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zZXJ2bGV0aGFuZGxlci9zZXJ2bGV0L1NpbXBsZVNlcnZlci5qYXZhCkBAIC0xOSw3ICsxOSw3IEBACiBpbXBvcnQgamF2YS5ybWkuKjsKIAogcHVibGljIGludGVyZmFjZSBTaW1wbGVTZXJ2ZXIgZXh0ZW5kcyBSZW1vdGUgewotICAgIAorCiAgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgc291cmNlKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NoYXJlZC93YXIvV2ViU2VydmljZVRlc3RJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NoYXJlZC93YXIvV2ViU2VydmljZVRlc3RJbXBsLmphdmEKaW5kZXggNGFjOWQ4Zi4uOTY1ZWVhYyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zaGFyZWQvd2FyL1dlYlNlcnZpY2VUZXN0SW1wbC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2hhcmVkL3dhci9XZWJTZXJ2aWNlVGVzdEltcGwuamF2YQpAQCAtMjEsMTMgKzIxLDEzIEBACiBpbXBvcnQgamF2YXgueG1sLnJwYy5zZXJ2ZXIuU2VydmxldEVuZHBvaW50Q29udGV4dDsKIAogcHVibGljIGNsYXNzIFdlYlNlcnZpY2VUZXN0SW1wbCBpbXBsZW1lbnRzIFNlcnZpY2VMaWZlY3ljbGUsIFdlYlNlcnZpY2VUZXN0IHsKLSAKKwogICAgIFdlYlNlcnZpY2VUZXN0IGRlbGVnYXRlOwotICAgIAorCiAgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEcml2ZXIgc2VydmxldCBkZXN0cm95ZWQiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpbml0KE9iamVjdCBjb250ZXh0KSB7CiAgICAgICAgIFNlcnZsZXRFbmRwb2ludENvbnRleHQgc2VDb250ZXh0ID0gKFNlcnZsZXRFbmRwb2ludENvbnRleHQpIGNvbnRleHQ7CiAgICAgICAgIFN0cmluZyB0ZXN0Q2xhc3NOYW1lID0gc2VDb250ZXh0LmdldFNlcnZsZXRDb250ZXh0KCkuZ2V0SW5pdFBhcmFtZXRlcigidGVzdGNsYXNzbmFtZSIpOwpAQCAtNTUsMTMgKzU1LDEzIEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIDogY2Fubm90IGxvYWQgZGVsZWdhdGUgIiArIHRlc3RDbGFzc05hbWUgKyAiICIgKyBlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGRvVGVzdChTdHJpbmdbXSBwYXJhbXMpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICBpZiAoZGVsZWdhdGUhPW51bGwpIHsKICAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5kb1Rlc3QocGFyYW1zKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSZW1vdGVFeGNlcHRpb24oIk5vIGRlbGVnYXRlIGZvciB0ZXN0IGhhcm5lc3MiKTsKICAgICAgICAgfQotICAgIH0gICAgCisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zaGFyZWQvd2FyL2NvbmZpZy54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NoYXJlZC93YXIvY29uZmlnLnhtbAppbmRleCAyMGEzZDQ1Li4yMWM4NGIwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NoYXJlZC93YXIvY29uZmlnLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NoYXJlZC93YXIvY29uZmlnLnhtbApAQCAtMTksMTEgKzE5LDExIEBACiAKIDxjb25maWd1cmF0aW9uCiAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+Ci0gIDxzZXJ2aWNlIAotICAgICAgbmFtZT0iV2ViU2VydmljZVNlcnZsZXRUZXN0IiAKLSAgICAgIHRhcmdldE5hbWVzcGFjZT0idXJuOldlYlNlcnZpY2VUZXN0IiAKLSAgICAgIHR5cGVOYW1lc3BhY2U9InVybjpXZWJTZXJ2aWNlVGVzdCIgCisgIDxzZXJ2aWNlCisgICAgICBuYW1lPSJXZWJTZXJ2aWNlU2VydmxldFRlc3QiCisgICAgICB0YXJnZXROYW1lc3BhY2U9InVybjpXZWJTZXJ2aWNlVGVzdCIKKyAgICAgIHR5cGVOYW1lc3BhY2U9InVybjpXZWJTZXJ2aWNlVGVzdCIKICAgICAgIHBhY2thZ2VOYW1lPSJ0ZXN0LndlYnNlcnZpY2UiPgogICAgICAgPGludGVyZmFjZSBuYW1lPSJ0ZXN0LndlYnNlcnZpY2UuV2ViU2VydmljZVRlc3QiLz4KICAgPC9zZXJ2aWNlPgotPC9jb25maWd1cmF0aW9uPiAKKzwvY29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2ltcGxlZmF1bHQvYnVpbGQucHJvcGVydGllcyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2ltcGxlZmF1bHQvYnVpbGQucHJvcGVydGllcwppbmRleCA0YWMzMzUyLi5hYTA3Zjk0IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NpbXBsZWZhdWx0L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zaW1wbGVmYXVsdC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xNSwyNiArMTUsMjYgQEAKICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBPUiBHUEwtMi4wIFdJVEggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAKIAogLS0+Ci0gCisKIAogPHByb3BlcnR5IG5hbWU9Im1vZHVsZSIgdmFsdWU9InNpbXBsZXNvYXBmYXVsdCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZSIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2FyY2hpdmUiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCIgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9IndlYi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3dlYi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJlamJqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAKKzxwcm9wZXJ0eSBuYW1lPSJlamJqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1lamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWVqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0id2Vic2VydmljZXMueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWJzZXJ2aWNlcy54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4td2ViLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLXdlYi54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50LmphciIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9QXBwQ2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2ltcGxlZmF1bHQvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zaW1wbGVmYXVsdC9idWlsZC54bWwKaW5kZXggOTlmMTZhNS4uZDkzZjE5OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zaW1wbGVmYXVsdC9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zaW1wbGVmYXVsdC9idWlsZC54bWwKQEAgLTMwLDkgKzMwLDkgQEAKICAgICAmdGVzdHByb3BlcnRpZXM7CiAKICAgPHRhcmdldCBuYW1lPSJydW4ud3Njb21waWxlIj4KLQk8ZXhlYyBleGVjdXRhYmxlPSIke1dTQ09NUElMRX0iIGZhaWxvbmVycm9yPSJ0cnVlIiA+Ci0gICAgICAgIDxhcmcgbGluZT0iLXNvdXJjZSAxLjEuMiAke3dzY29tcGlsZS5jb21tYW5kfSIgLz4gICAgICAgIAotCTwvZXhlYz4KKyAgICA8ZXhlYyBleGVjdXRhYmxlPSIke1dTQ09NUElMRX0iIGZhaWxvbmVycm9yPSJ0cnVlIiA+CisgICAgICAgIDxhcmcgbGluZT0iLXNvdXJjZSAxLjEuMiAke3dzY29tcGlsZS5jb21tYW5kfSIgLz4KKyAgICA8L2V4ZWM+CiAgIDwvdGFyZ2V0PgogCiA8IS0tIE5PVEUuIHRoZSBzaW1wbGUgbWFwcGluZyB0ZXN0IGFuZCBmdWxsIG1hcHBpbmcgdGVzdCBjYW4KQEAgLTQ5LDQ1ICs0OSw0NSBAQAogICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVqYiIvPgogICAgIDwvYW50Y2FsbD4KICAgPC90YXJnZXQ+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iZ2VuLWVqYi13c2RsIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvd3NkbCIvPiAKKyAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi93c2RsIi8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4ud3Njb21waWxlIj4KLSAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIgCi0gICB2YWx1ZT0iLWRlZmluZSAtbWFwcGluZyAke2J1aWxkLmNsYXNzZXMuZGlyfS9Tb2FwRmF1bHRNYXBwaW5nX2VqYi54bWwgLWNwICR7YnVpbGQuY2xhc3Nlcy5kaXJ9IC1rZWVwIC1kICR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3dzZGwgY29uZmlnLWludGVyZmFjZS54bWwiLz4gCisgICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiCisgICB2YWx1ZT0iLWRlZmluZSAtbWFwcGluZyAke2J1aWxkLmNsYXNzZXMuZGlyfS9Tb2FwRmF1bHRNYXBwaW5nX2VqYi54bWwgLWNwICR7YnVpbGQuY2xhc3Nlcy5kaXJ9IC1rZWVwIC1kICR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3dzZGwgY29uZmlnLWludGVyZmFjZS54bWwiLz4KICAgICA8L2FudGNhbGw+Ci0gIDwvdGFyZ2V0PiAgICAKLSAgIAorICA8L3RhcmdldD4KKwogICA8dGFyZ2V0IG5hbWU9ImFzc2VtYmxlLWVqYiIgZGVwZW5kcz0iaW5pdC1jb21tb24sIGNvbXBpbGUsIGdlbi1lamItd3NkbCI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJlamItamFyLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgdmFsdWU9IlNvYXBGYXVsdE1hcHBpbmdfZWpiLnhtbCxNRVRBLUlORi93c2RsLyoqLHNvYXBmYXVsdC9lamIvKi5jbGFzcyIvPgogICAgIDwvYW50Y2FsbD4KICAgPC90YXJnZXQ+Ci0gICAgICAgICAgICAgCisKICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZSIgZGVwZW5kcz0iYXNzZW1ibGUtZWpiLCBhc3NlbWJsZS1jbGllbnQiLz4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZS1jbGllbnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNsaWVudCIvPgotICAgIDwvYW50Y2FsbD4gICAgCisgICAgPC9hbnRjYWxsPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZ2VuLWVqYi13c2RsIi8+CiAgICAgPHVuamFyIHNyYz0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXIiCiAgICAgICAgIGRlc3Q9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJhcHBjbGllbnQtamFyLWNvbW1vbiI+Ci0gICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiIAorICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIgogICAgICAgICAgICAgIHZhbHVlPSJTb2FwRmF1bHRNYXBwaW5nX2VqYi54bWwsTUVUQS1JTkYvd3NkbC8qKixzb2FwZmF1bHQvKiosY29tLyoqIiAvPgotICAgIDwvYW50Y2FsbD4gIAorICAgIDwvYW50Y2FsbD4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1jbGllbnQtY29tbW9uIi8+CiAgICAgPG1vdmUgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50Q2xpZW50LmphciIgdG9GaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcENsaWVudC5qYXIiLz4KICAgPC90YXJnZXQ+Ci0gIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSJodHRwOi8vJHtodHRwLmhvc3R9OiR7aHR0cC5wb3J0fS9zb2FwZmF1bHQvU2ltcGxlU29hcEZhdWx0Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gIAorICAgIDwvdGFyZ2V0PgogCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qYXItY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC05NSwxMCArOTUsMTAgQEAKICAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuLWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWphci1jb21tb24iLz4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jbGllbnQtY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAKLSAgICAKKyAgICA8L3RhcmdldD4KKwogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zaW1wbGVmYXVsdC9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NpbXBsZWZhdWx0L2NsaWVudC9DbGllbnQuamF2YQppbmRleCA5NGJiN2MxLi5jMTQ3ZDM2IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NpbXBsZWZhdWx0L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NpbXBsZWZhdWx0L2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzAsMjYgKzMwLDI2IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIgc3RhdCA9CiAgICAgICAgIG5ldyBTaW1wbGVSZXBvcnRlckFkYXB0ZXIoImFwcHNlcnYtdGVzdHMiKTsKLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgIHN0YXQuYWRkRGVzY3JpcHRpb24oIndlYnNlcnZpY2VzLXNpbXBsZS1zb2FwZmF1bHQiKTsKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoIndlYnNlcnZpY2VzLXNvYXBmYXVsdElEIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKLSAgICAJdHJ5IHsKKyAgICAgICAgdHJ5IHsKIAogICAgICAgICAgICBTdHJpbmcgdGFyZ2V0RW5kcG9pbnRBZGRyZXNzID0gYXJnc1swXTsKIAotCSAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgICAgICAKKyAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworCiAgICAgICAgICAgICBTZXJ2aWNlIHRlc3RTZXJ2aWNlID0gKFNlcnZpY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9zZXJ2aWNlL3NvYXBmYXVsdCIpOwotICAgICAgICAgICAgU2ltcGxlU29hcEZhdWx0U0VJIHRlc3QgPSAoU2ltcGxlU29hcEZhdWx0U0VJKSAKKyAgICAgICAgICAgIFNpbXBsZVNvYXBGYXVsdFNFSSB0ZXN0ID0gKFNpbXBsZVNvYXBGYXVsdFNFSSkKICAgICAgICAgICAgICAgICB0ZXN0U2VydmljZS5nZXRQb3J0KG5ldyBRTmFtZSgidXJuOlNvYXBGYXVsdFRlc3QiLCAiU2ltcGxlU29hcEZhdWx0U0VJUG9ydCIpLAogICAgICAgICAgICAgICAgICAgICBTaW1wbGVTb2FwRmF1bHRTRUkuY2xhc3MpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgICgoU3R1Yil0ZXN0KS5fc2V0UHJvcGVydHkoU3R1Yi5FTkRQT0lOVF9BRERSRVNTX1BST1BFUlRZLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRFbmRwb2ludEFkZHJlc3MpOwogCkBAIC02MiwxMSArNjIsMTEgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoInNvYXBmYXVsdHNjbGllbnQgbWFpbiIsIHN0YXQuUEFTUyk7Ci0gICAgCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigic29hcGZhdWx0cyBjbGllbnQgdGVzdCBmYWlsZWQiKTsKICAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoInNvYXBmYXVsdHNjbGllbnQgbWFpbiIsIHN0YXQuRkFJTCk7CiAgICAgICAgICAgICAvL1N5c3RlbS5leGl0KDE1KTsKLQl9IAorICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NpbXBsZWZhdWx0L2NvbmZpZy1pbnRlcmZhY2UueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zaW1wbGVmYXVsdC9jb25maWctaW50ZXJmYWNlLnhtbAppbmRleCA3YmJkZmFjLi44YmVmMjY1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NpbXBsZWZhdWx0L2NvbmZpZy1pbnRlcmZhY2UueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2ltcGxlZmF1bHQvY29uZmlnLWludGVyZmFjZS54bWwKQEAgLTE5LDExICsxOSwxMSBAQAogCiA8Y29uZmlndXJhdGlvbgogICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4LXJwYy9yaS9jb25maWciPgotICA8c2VydmljZSAKLSAgICAgIG5hbWU9IlNvYXBGYXVsdFNlcnZpY2UiIAotICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJ1cm46U29hcEZhdWx0VGVzdCIgCi0gICAgICB0eXBlTmFtZXNwYWNlPSJ1cm46U29hcEZhdWx0VGVzdCIgCisgIDxzZXJ2aWNlCisgICAgICBuYW1lPSJTb2FwRmF1bHRTZXJ2aWNlIgorICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJ1cm46U29hcEZhdWx0VGVzdCIKKyAgICAgIHR5cGVOYW1lc3BhY2U9InVybjpTb2FwRmF1bHRUZXN0IgogICAgICAgcGFja2FnZU5hbWU9InNvYXBmYXVsdCI+CiAgICAgICA8aW50ZXJmYWNlIG5hbWU9InNvYXBmYXVsdC5lamIuU2ltcGxlU29hcEZhdWx0U0VJIi8+CiAgIDwvc2VydmljZT4KLTwvY29uZmlndXJhdGlvbj4gCis8L2NvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NpbXBsZWZhdWx0L2Rlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2ltcGxlZmF1bHQvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sCmluZGV4IGEyNWQwZWMuLjg3YmEwMjQgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2ltcGxlZmF1bHQvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2ltcGxlZmF1bHQvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sCkBAIC0yNCwxMSArMjQsMTEgQEAKICAgICA8ZGVzY3JpcHRpb24+c2ltcGxlIHNvYXBmYXVsdCBzZXJ2aWNlIHJlZjwvZGVzY3JpcHRpb24+CiAgICAgPHNlcnZpY2UtcmVmLW5hbWU+c2VydmljZS9zb2FwZmF1bHQ8L3NlcnZpY2UtcmVmLW5hbWU+CiAgICAgPHNlcnZpY2UtaW50ZXJmYWNlPmphdmF4LnhtbC5ycGMuU2VydmljZTwvc2VydmljZS1pbnRlcmZhY2U+Ci0gICAgPHdzZGwtZmlsZT5NRVRBLUlORi93c2RsL1NvYXBGYXVsdFNlcnZpY2Uud3NkbDwvd3NkbC1maWxlPiAgICAKKyAgICA8d3NkbC1maWxlPk1FVEEtSU5GL3dzZGwvU29hcEZhdWx0U2VydmljZS53c2RsPC93c2RsLWZpbGU+CiAgICAgPGpheHJwYy1tYXBwaW5nLWZpbGU+U29hcEZhdWx0TWFwcGluZ19lamIueG1sPC9qYXhycGMtbWFwcGluZy1maWxlPgotICAgIDxzZXJ2aWNlLXFuYW1lIHhtbG5zOnNlcnZpY2Vucz0idXJuOlNvYXBGYXVsdFRlc3QiPnNlcnZpY2VuczpTb2FwRmF1bHRTZXJ2aWNlPC9zZXJ2aWNlLXFuYW1lPiAgICAgICAgICAgICAgIAorICAgIDxzZXJ2aWNlLXFuYW1lIHhtbG5zOnNlcnZpY2Vucz0idXJuOlNvYXBGYXVsdFRlc3QiPnNlcnZpY2VuczpTb2FwRmF1bHRTZXJ2aWNlPC9zZXJ2aWNlLXFuYW1lPgogICAgIDxwb3J0LWNvbXBvbmVudC1yZWY+CiAgICAgICA8c2VydmljZS1lbmRwb2ludC1pbnRlcmZhY2U+c29hcGZhdWx0LmVqYi5TaW1wbGVTb2FwRmF1bHRTRUk8L3NlcnZpY2UtZW5kcG9pbnQtaW50ZXJmYWNlPgotICAgIDwvcG9ydC1jb21wb25lbnQtcmVmPiAgICAgICAgICAKKyAgICA8L3BvcnQtY29tcG9uZW50LXJlZj4KICAgPC9zZXJ2aWNlLXJlZj4KIDwvYXBwbGljYXRpb24tY2xpZW50PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zaW1wbGVmYXVsdC9lamIvU2ltcGxlU29hcEV4Y2VwdGlvbi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zaW1wbGVmYXVsdC9lamIvU2ltcGxlU29hcEV4Y2VwdGlvbi5qYXZhCmluZGV4IGIwYmYxNzAuLjBjNTg1NDUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2ltcGxlZmF1bHQvZWpiL1NpbXBsZVNvYXBFeGNlcHRpb24uamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NpbXBsZWZhdWx0L2VqYi9TaW1wbGVTb2FwRXhjZXB0aW9uLmphdmEKQEAgLTE3LDEzICsxNywxMyBAQAogcGFja2FnZSBzb2FwZmF1bHQuZWpiOwogCiBwdWJsaWMgY2xhc3MgU2ltcGxlU29hcEV4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbiB7Ci0gICAgCisKICAgICBwcml2YXRlIFN0cmluZyByZWFzb247Ci0gICAgCisKICAgICBwdWJsaWMgU2ltcGxlU29hcEV4Y2VwdGlvbihTdHJpbmcgcmVhc29uKSB7CiAgICAgICAgIHRoaXMucmVhc29uID0gcmVhc29uOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0UmVhc29uKCkgewogICAgICAgICByZXR1cm4gcmVhc29uOwogICAgIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2ltcGxlZmF1bHQvZWpiL1NpbXBsZVNvYXBGYXVsdEltcGwuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2ltcGxlZmF1bHQvZWpiL1NpbXBsZVNvYXBGYXVsdEltcGwuamF2YQppbmRleCA0ZjY4NzIzLi44NjQ2NTU1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NpbXBsZWZhdWx0L2VqYi9TaW1wbGVTb2FwRmF1bHRJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zaW1wbGVmYXVsdC9lamIvU2ltcGxlU29hcEZhdWx0SW1wbC5qYXZhCkBAIC0yNSwzOCArMjUsMzggQEAKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQmVhbjsKIGltcG9ydCBqYWthcnRhLmVqYi5TZXNzaW9uQ29udGV4dDsKIGltcG9ydCBqYWthcnRhLmVqYi5FSkJFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOyAKK2ltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiAKIC8qKgogICoKICAqIEBhdXRob3IgZG9jaGV6CiAgKi8KIHB1YmxpYyBjbGFzcyBTaW1wbGVTb2FwRmF1bHRJbXBsIGltcGxlbWVudHMgU2Vzc2lvbkJlYW4gewotICAgIAorCiAgICAgU2Vzc2lvbkNvbnRleHQgc2M7Ci0gICAgCisKICAgICAvKiogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBTaW1wbGVTZXJ2ZXJJbXBsICovCiAgICAgcHVibGljIFNpbXBsZVNvYXBGYXVsdEltcGwoKSB7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBHb29nbGVFSkI6OmVqYkNyZWF0ZSAhISIpOwotfSAgICAKLSAgICAKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIEdvb2dsZUVKQjo6ZWpiQ3JlYXRlICEhIik7Cit9CisKICAgICBwdWJsaWMgU3RyaW5nIHNpbXBsZU1ldGhvZCgpCiAgICAgICAgIHRocm93cyBTaW1wbGVTb2FwRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAKKwogICAgICAgICB0aHJvdyBuZXcgU2ltcGxlU29hcEV4Y2VwdGlvbigiSSBvbmx5IHJhaXNlIGV4Y2VwdGlvbnMgISIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7Ci0JCisKICAgICAgICAgdGhpcy5zYyA9IHNjOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24ge30KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkge30KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHt9CiB9CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NpbXBsZWZhdWx0L2VqYi9TaW1wbGVTb2FwRmF1bHRTRUkuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2ltcGxlZmF1bHQvZWpiL1NpbXBsZVNvYXBGYXVsdFNFSS5qYXZhCmluZGV4IDc0ZGYwNDguLjExM2Q4ZjEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2ltcGxlZmF1bHQvZWpiL1NpbXBsZVNvYXBGYXVsdFNFSS5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc2ltcGxlZmF1bHQvZWpiL1NpbXBsZVNvYXBGYXVsdFNFSS5qYXZhCkBAIC0yMCw3ICsyMCw3IEBACiBpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogCiBwdWJsaWMgaW50ZXJmYWNlIFNpbXBsZVNvYXBGYXVsdFNFSSBleHRlbmRzIFJlbW90ZSB7Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIHNpbXBsZU1ldGhvZCgpIHRocm93cyBTaW1wbGVTb2FwRXhjZXB0aW9uLCBSZW1vdGVFeGNlcHRpb247Ci0gICAgICAgICAgICAKKwogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zb2FwZmF1bHRzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NvYXBmYXVsdHMvYnVpbGQucHJvcGVydGllcwppbmRleCAwYmE2NmMyLi4yNGM5Y2Q1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NvYXBmYXVsdHMvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NvYXBmYXVsdHMvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjIgKzE1LDIyIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJzb2FwZmF1bHRzIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgotPHByb3BlcnR5IG5hbWU9InRlc3QuY2xpZW50IiAKLQl2YWx1ZT0iQ2xpZW50Ii8+Cis8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiXHUwMDIwCisgICAgdmFsdWU9IkNsaWVudCIvPgogPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9IndlYnNlcnZpY2VzLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3Ivd2Vic2VydmljZXMueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0ic3VuLWVqYi1qYXIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0ic3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIvPgogPHByb3BlcnR5IG5hbWU9ImFwcC50eXBlIiB2YWx1ZT0iYXBwbGljYXRpb24iLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc29hcGZhdWx0cy9idWlsZC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NvYXBmYXVsdHMvYnVpbGQueG1sCmluZGV4IGQ4Zjc3NWMuLmIzYjQwZDggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc29hcGZhdWx0cy9idWlsZC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zb2FwZmF1bHRzL2J1aWxkLnhtbApAQCAtMzMsOSArMzMsOSBAQAogCiAKICAgPHRhcmdldCBuYW1lPSJydW4ud3Njb21waWxlIj4KLQk8ZXhlYyBleGVjdXRhYmxlPSIke1dTQ09NUElMRX0iIGZhaWxvbmVycm9yPSJ0cnVlIiA+Ci0gICAgICAgIDxhcmcgbGluZT0iLXNvdXJjZSAxLjEuMiAke3dzY29tcGlsZS5jb21tYW5kfSIgLz4gICAgICAgIAotCTwvZXhlYz4KKyAgICA8ZXhlYyBleGVjdXRhYmxlPSIke1dTQ09NUElMRX0iIGZhaWxvbmVycm9yPSJ0cnVlIiA+CisgICAgICAgIDxhcmcgbGluZT0iLXNvdXJjZSAxLjEuMiAke3dzY29tcGlsZS5jb21tYW5kfSIgLz4KKyAgICA8L2V4ZWM+CiAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iIj4KQEAgLTU4LDExICs1OCwxMSBAQAogICA8dGFyZ2V0IG5hbWU9IndzY29tcGlsZS1hcHBjbGllbnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8bWtkaXIgZGlyPSJvdXRwdXQiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi53c2NvbXBpbGUiPgotICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIiAKKyAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIKICAgICAgICB2YWx1ZT0iLWltcG9ydCAta2VlcCAtZCBvdXRwdXQgLXMgb3V0cHV0IC1jbGFzc3BhdGggLiAtZjpleHBsaWNpdGNvbnRleHQgd3Njb21waWxlX2NvbmZpZ19hcHBjbGllbnQueG1sIi8+CiAgICAgPC9hbnRjYWxsPgogICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9zb2FwZmF1bHRzIj4KLSAgICAgICA8ZmlsZXNldCBkaXI9Im91dHB1dC9zb2FwZmF1bHRzIiAKKyAgICAgICA8ZmlsZXNldCBkaXI9Im91dHB1dC9zb2FwZmF1bHRzIgogICAgICAgICBpbmNsdWRlcz0iVGVzdFNlcnZpY2UuY2xhc3MsIFRlc3QuY2xhc3MsIFRlc3QxUmVxdWVzdFR5cGUuY2xhc3MsIFRlc3QyUmVxdWVzdFR5cGUuY2xhc3MsIFRlc3QxUmVzcG9uc2VUeXBlLmNsYXNzLCBGYXVsdE9uZS5jbGFzcywgRmF1bHRUd28uY2xhc3MsIEZhdWx0VGhyZWUuY2xhc3MiLz4KICAgICA8L2NvcHk+CiAgICAgPGRlbGV0ZSBkaXI9Im91dHB1dCIvPgpAQCAtNzEsMTEgKzcxLDExIEBACiAgIDx0YXJnZXQgbmFtZT0id3Njb21waWxlLWVqYiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxta2RpciBkaXI9Im91dHB1dCIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLndzY29tcGlsZSI+Ci0gICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiIAorICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIgogICAgICAgIHZhbHVlPSItaW1wb3J0IC1rZWVwIC1kIG91dHB1dCAtcyBvdXRwdXQgLWNsYXNzcGF0aCAuIC1mOmV4cGxpY2l0Y29udGV4dCB3c2NvbXBpbGVfY29uZmlnX2VqYi54bWwiLz4KICAgICA8L2FudGNhbGw+CiAgICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3NvYXBmYXVsdHNlamIiPgotICAgICAgIDxmaWxlc2V0IGRpcj0ib3V0cHV0L3NvYXBmYXVsdHNlamIiIAorICAgICAgIDxmaWxlc2V0IGRpcj0ib3V0cHV0L3NvYXBmYXVsdHNlamIiCiAgICAgICAgIGluY2x1ZGVzPSJUZXN0U2VydmljZS5jbGFzcywgVGVzdC5jbGFzcywgVGVzdDFSZXF1ZXN0VHlwZS5jbGFzcywgVGVzdDJSZXF1ZXN0VHlwZS5jbGFzcywgVGVzdDFSZXNwb25zZVR5cGUuY2xhc3MsIEZhdWx0T25lLmNsYXNzLCBGYXVsdFR3by5jbGFzcywgRmF1bHRUaHJlZS5jbGFzcyIvPgogICAgIDwvY29weT4KICAgICA8ZGVsZXRlIGRpcj0ib3V0cHV0Ii8+CkBAIC04NCwyNCArODQsMjQgQEAKICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZSIgZGVwZW5kcz0iaW5pdC1jb21tb24sIGNvbXBpbGUiPgogICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi93c2RsIgogICAgICAgZmlsZT0ic29hcGZhdWx0cy53c2RsIi8+Ci0gICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiAKLQkgZmlsZT0ibWFwcGluZ19hcHBjbGllbnQueG1sIi8+CisgICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgorICAgICBmaWxlPSJtYXBwaW5nX2FwcGNsaWVudC54bWwiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFwcGNsaWVudC1qYXItY29tbW9uIj4KLSAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgdmFsdWU9Im1hcHBpbmdfYXBwY2xpZW50LnhtbCxNRVRBLUlORi93c2RsLyoqLHNvYXBmYXVsdHMvKi5jbGFzcyIgLz4KIAogICAgIDwvYW50Y2FsbD4KLSAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIAotCSBmaWxlPSJtYXBwaW5nX2VqYi54bWwiLz4KKyAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCisgICAgIGZpbGU9Im1hcHBpbmdfZWpiLnhtbCIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZWpiLWphci1jb21tb24iPgotICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIiAKKyAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICB2YWx1ZT0ibWFwcGluZ19lamIueG1sLE1FVEEtSU5GL3dzZGwvKiosc29hcGZhdWx0c2VqYi8qLmNsYXNzIiAvPgogCiAgICAgPC9hbnRjYWxsPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZWFyLWNvbW1vbiIgLz4KLSAgPC90YXJnZXQ+IAorICA8L3RhcmdldD4KIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC0xMjUsMjEgKzEyNSwyMSBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9Imh0dHA6Ly8ke2h0dHAuaG9zdH06JHtodHRwLnBvcnR9L3NvYXBmYXVsdHNlamIvU29hcEZhdWx0c1Rlc3QiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgotIAorCiAgICAgPHRhcmdldCBuYW1lPSJ1bmRlcGxveSIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9InVuZGVwbG95LWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgCisgICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJnZW4tbWFwcGluZy1hcHBjbGllbnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi53c2NvbXBpbGUiPgotICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIiAKKyAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIKICAgICAgICB2YWx1ZT0iLWltcG9ydCAtY3AgLiAtbWFwcGluZyBtYXBwaW5nX2FwcGNsaWVudC54bWwgLWY6ZXhwbGljaXRjb250ZXh0IHdzY29tcGlsZV9jb25maWdfYXBwY2xpZW50LnhtbCIvPgogICAgIDwvYW50Y2FsbD4KICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJnZW4tbWFwcGluZy1lamIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi53c2NvbXBpbGUiPgotICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIiAKKyAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIKICAgICAgICB2YWx1ZT0iLWltcG9ydCAtY3AgLiAtbWFwcGluZyBtYXBwaW5nX2VqYi54bWwgLWY6ZXhwbGljaXRjb250ZXh0IHdzY29tcGlsZV9jb25maWdfZWpiLnhtbCIvPgogICAgIDwvYW50Y2FsbD4KICAgPC90YXJnZXQ+CkBAIC0xNDgsNyArMTQ4LDcgQEAKICAgICA8ZGVsZXRlIGRpcj0ib3V0Ii8+CiAgICAgPG1rZGlyIGRpcj0ib3V0Ii8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4ud3Njb21waWxlIj4KLSAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIgCisgICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiCiAgICAgICAgdmFsdWU9Ii1pbXBvcnQgLWNwIC4gLWtlZXAgLWQgb3V0IC1YcHJpbnRzdGFja3RyYWNlIC1YZGVidWdtb2RlbDpnb29kLmRlYnVnTW9kZWwudHh0IC1tYXBwaW5nIG1hcHBpbmcueG1sIC1mOmV4cGxpY2l0Y29udGV4dCB3c2NvbXBpbGVfY29uZmlnX2VqYi54bWwiLz4KICAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgpAQCAtMTU3LDE2ICsxNTcsMTYgQEAKICAgICA8ZGVsZXRlIGRpcj0ib3V0Ii8+CiAgICAgPG1rZGlyIGRpcj0ib3V0Ii8+CiAgICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLndzY29tcGlsZSI+Ci0gICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIiAKKyAgICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiCiAgICAgICAgdmFsdWU9Ii1nZW46Ym90aCAtY3AgLiAta2VlcCAtZCBvdXQgLVhwcmludHN0YWNrdHJhY2UgLVhkZWJ1Z21vZGVsOmJhZC5kZWJ1Z01vZGVsLnR4dCAtZjpleHBsaWNpdGNvbnRleHQgY29uZmlnLnhtbCIvPgogICAgICAgPC9hbnRjYWxsPgogICAgPC90YXJnZXQ+CiAKIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPgotCQlVc2FnZToKLQkJCWFudCBhbGwgKEV4ZWN1dGVzIHRoZSBXZWJTZXJ2aWNlcyB0ZXN0KQotCTwvZWNobz4KKyAgICA8ZWNobz4KKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyB0aGUgV2ViU2VydmljZXMgdGVzdCkKKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NvYXBmYXVsdHMvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zb2FwZmF1bHRzL2NsaWVudC9DbGllbnQuamF2YQppbmRleCAxYTAxOGNhLi40ZTBhMjZkIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NvYXBmYXVsdHMvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc29hcGZhdWx0cy9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI3LDI1ICsyNywyNSBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ3ZWJzZXJ2aWNlcy1zb2FwZmF1bHRzIik7CiAgICAgICAgIENsaWVudCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7CiAgICAgICAgIGNsaWVudC5kb1Rlc3QoYXJncyk7CiAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3ZWJzZXJ2aWNlcy1zb2FwZmF1bHRzSUQiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nW10gYXJncykgewotICAgIAl0cnkgeworICAgICAgICB0cnkgewogCiAgICAgICAgICAgIFN0cmluZyB0YXJnZXRFbmRwb2ludEFkZHJlc3MgPSBhcmdzWzBdOwogCi0JICAgIENvbnRleHQgaWMgPSBuZXcgSW5pdGlhbENvbnRleHQoKTsKLSAgICAgICAgICAgIAorICAgICAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7CisKICAgICAgICAgICAgIFRlc3RTZXJ2aWNlIHRlc3RTZXJ2aWNlID0KICAgICAgICAgICAgICAgICAoVGVzdFNlcnZpY2UpIGljLmxvb2t1cCgiamF2YTpjb21wL2Vudi9zZXJ2aWNlL3NvYXBmYXVsdHMiKTsKICAgICAgICAgICAgIFRlc3QgdGVzdCA9IHRlc3RTZXJ2aWNlLmdldFRlc3RQb3J0KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgKChTdHViKXRlc3QpLl9zZXRQcm9wZXJ0eShTdHViLkVORFBPSU5UX0FERFJFU1NfUFJPUEVSVFksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldEVuZHBvaW50QWRkcmVzcyk7CiAKQEAgLTcyLDExICs3MiwxMSBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygic29hcGZhdWx0c2NsaWVudCBtYWluIiwgc3RhdC5QQVNTKTsKLSAgICAJfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJzb2FwZmF1bHRzIGNsaWVudCB0ZXN0IGZhaWxlZCIpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygic29hcGZhdWx0c2NsaWVudCBtYWluIiwgc3RhdC5GQUlMKTsKICAgICAgICAgICAgIC8vU3lzdGVtLmV4aXQoMTUpOwotCX0gCisgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc29hcGZhdWx0cy9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NvYXBmYXVsdHMvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sCmluZGV4IDA1ZDQ2NmMuLjllYzMzMTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc29hcGZhdWx0cy9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zb2FwZmF1bHRzL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbApAQCAtMjcsNiArMjcsNiBAQAogICAgIDx3c2RsLWZpbGU+TUVUQS1JTkYvd3NkbC9zb2FwZmF1bHRzLndzZGw8L3dzZGwtZmlsZT4KICAgICA8amF4cnBjLW1hcHBpbmctZmlsZT5tYXBwaW5nX2FwcGNsaWVudC54bWw8L2pheHJwYy1tYXBwaW5nLWZpbGU+CiAgICAgPHNlcnZpY2UtcW5hbWUgeG1sbnM6c2VydmljZW5zPSJ1cm46dGVzdCI+c2VydmljZW5zOlRlc3RTZXJ2aWNlCi0gICAgPC9zZXJ2aWNlLXFuYW1lPiAgICAgICAgICAgICAgIAorICAgIDwvc2VydmljZS1xbmFtZT4KICAgPC9zZXJ2aWNlLXJlZj4KIDwvYXBwbGljYXRpb24tY2xpZW50PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zb2FwZmF1bHRzL2VqYi9Tb2FwRmF1bHRzRUpCLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NvYXBmYXVsdHMvZWpiL1NvYXBGYXVsdHNFSkIuamF2YQppbmRleCA0ZWMwNTY2Li4yNjMzMDZlIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NvYXBmYXVsdHMvZWpiL1NvYXBGYXVsdHNFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NvYXBmYXVsdHMvZWpiL1NvYXBGYXVsdHNFSkIuamF2YQpAQCAtMTcsNyArMTcsNyBAQAogcGFja2FnZSBzb2FwZmF1bHRzZWpiOwogCiBpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7Ci1pbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOyAKK2ltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkJlYW47CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQ7CiBpbXBvcnQgamFrYXJ0YS5lamIuRUpCRXhjZXB0aW9uOwpAQCAtMjgsMTQgKzI4LDE0IEBACiAgICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBzYzsKIAogICAgIHB1YmxpYyBTb2FwRmF1bHRzRUpCKCl7fQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiQ3JlYXRlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0JU3lzdGVtLm91dC5wcmludGxuKCJJbiBTb2FwRmF1bHRzRUpCOjplamJDcmVhdGUgISEiKTsKKyAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIFNvYXBGYXVsdHNFSkI6OmVqYkNyZWF0ZSAhISIpOwogICAgIH0KIAogICAgIHB1YmxpYyBUZXN0MVJlc3BvbnNlVHlwZSB0ZXN0MShTdHJpbmcgYSwgU3RyaW5nIGIsCiAgICAgICAgICAgICAgICAgICAgICBUZXN0MlJlcXVlc3RUeXBlIGMpCi0gICAgICAgIHRocm93cyBGYXVsdE9uZSwgRmF1bHRUaHJlZSwgRmF1bHRUd28sIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbiAKKyAgICAgICAgdGhyb3dzIEZhdWx0T25lLCBGYXVsdFRocmVlLCBGYXVsdFR3bywgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uCiAgICAgewogICAgICAgICBNZXNzYWdlQ29udGV4dCBtc2dDb250ZXh0ID0gc2MuZ2V0TWVzc2FnZUNvbnRleHQoKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJtc2dDb250ZXh0ID0gIiArIG1zZ0NvbnRleHQpOwpAQCAtNjUsMTYgKzY1LDE2IEBACiAgICAgICAgIFRlc3QxUmVzcG9uc2VUeXBlIHQgPSBuZXcgVGVzdDFSZXNwb25zZVR5cGUoMSwyKTsKICAgICAgICAgcmV0dXJuIHQ7CiAgICAgfQotICAgICAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7Ci0JCisKICAgICAgICAgdGhpcy5zYyA9IHNjOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24ge30KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkge30KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHt9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc29hcGZhdWx0cy93c2NvbXBpbGVfY29uZmlnX2FwcGNsaWVudC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NvYXBmYXVsdHMvd3Njb21waWxlX2NvbmZpZ19hcHBjbGllbnQueG1sCmluZGV4IDM4ZDdhYWEuLjIwYTJmZGYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc29hcGZhdWx0cy93c2NvbXBpbGVfY29uZmlnX2FwcGNsaWVudC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zb2FwZmF1bHRzL3dzY29tcGlsZV9jb25maWdfYXBwY2xpZW50LnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8Y29uZmlndXJhdGlvbgogICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4LXJwYy9yaS9jb25maWciPgotICA8d3NkbCAKKyAgPHdzZGwKICAgICAgIGxvY2F0aW9uPSJzb2FwZmF1bHRzLndzZGwiCiAgICAgICBwYWNrYWdlTmFtZT0ic29hcGZhdWx0cyIvPgogPC9jb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zb2FwZmF1bHRzL3dzY29tcGlsZV9jb25maWdfZWpiLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvc29hcGZhdWx0cy93c2NvbXBpbGVfY29uZmlnX2VqYi54bWwKaW5kZXggNjE1MDk1MS4uYmIzNjM0YiAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS9zb2FwZmF1bHRzL3dzY29tcGlsZV9jb25maWdfZWpiLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3NvYXBmYXVsdHMvd3Njb21waWxlX2NvbmZpZ19lamIueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAKIDxjb25maWd1cmF0aW9uCiAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXgtcnBjL3JpL2NvbmZpZyI+Ci0gIDx3c2RsIAorICA8d3NkbAogICAgICAgbG9jYXRpb249InNvYXBmYXVsdHMud3NkbCIKICAgICAgIHBhY2thZ2VOYW1lPSJzb2FwZmF1bHRzZWpiIi8+CiA8L2NvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dlYnN0dWJfcHJvcGVydGllcy9idWlsZC5wcm9wZXJ0aWVzIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93ZWJzdHViX3Byb3BlcnRpZXMvYnVpbGQucHJvcGVydGllcwppbmRleCA0NmM4ODBmLi5hZTYzMWUxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dlYnN0dWJfcHJvcGVydGllcy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd2Vic3R1Yl9wcm9wZXJ0aWVzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDI2ICsxNSwyNiBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic3R1YnByb3BlcnRpZXMiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIHZhbHVlPSJDbGllbnQiLz4KIDxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJ3ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWIueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iZWpiamFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgCis8cHJvcGVydHkgbmFtZT0iZWpiamFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJlamItamFyLnhtbCIgdmFsdWU9ImRlc2NyaXB0b3IvZWpiLWphci54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9IndlYnNlcnZpY2VzLnhtbCIgdmFsdWU9IndlYnNlcnZpY2VzLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9InN1bi13ZWIueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4td2ViLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiAKLQl2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgICAKKzxwcm9wZXJ0eSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KKzxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCJcdTAwMjAKKyAgICB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLnhtbCIvPgorPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudGphci5maWxlcyIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+ICAgICAgICBcdTAwMjAKIDxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnQuamFyIiB2YWx1ZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX1BcHBDbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93ZWJzdHViX3Byb3BlcnRpZXMvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93ZWJzdHViX3Byb3BlcnRpZXMvYnVpbGQueG1sCmluZGV4IDI0YTE2NWMuLmU4NmYyYTkgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd2Vic3R1Yl9wcm9wZXJ0aWVzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dlYnN0dWJfcHJvcGVydGllcy9idWlsZC54bWwKQEAgLTMwLDkgKzMwLDkgQEAKICAgICAmdGVzdHByb3BlcnRpZXM7CiAKICAgPHRhcmdldCBuYW1lPSJydW4ud3Njb21waWxlIj4KLQk8ZXhlYyBleGVjdXRhYmxlPSIke1dTQ09NUElMRX0iIGZhaWxvbmVycm9yPSJ0cnVlIiA+Ci0gICAgICAgIDxhcmcgbGluZT0iLXNvdXJjZSAxLjEuMiAke3dzY29tcGlsZS5jb21tYW5kfSIgLz4gICAgICAgIAotCTwvZXhlYz4KKyAgICA8ZXhlYyBleGVjdXRhYmxlPSIke1dTQ09NUElMRX0iIGZhaWxvbmVycm9yPSJ0cnVlIiA+CisgICAgICAgIDxhcmcgbGluZT0iLXNvdXJjZSAxLjEuMiAke3dzY29tcGlsZS5jb21tYW5kfSIgLz4KKyAgICA8L2V4ZWM+CiAgIDwvdGFyZ2V0PgogCiA8IS0tIE5PVEUuIHRoZSBzaW1wbGUgbWFwcGluZyB0ZXN0IGFuZCBmdWxsIG1hcHBpbmcgdGVzdCBjYW4KQEAgLTQ5LDM0ICs0OSwzNCBAQAogICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9InN0dWJwcm9wcyIvPgogICAgIDwvYW50Y2FsbD4KICAgPC90YXJnZXQ+Ci0gIAorCiAgIDx0YXJnZXQgbmFtZT0iZ2VuLWVqYi13c2RsIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+Ci0gICAgPG1rZGlyIGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvd3NkbCIvPiAKKyAgICA8bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi93c2RsIi8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4ud3Njb21waWxlIj4KLSAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIgCi0gICB2YWx1ZT0iLWRlZmluZSAtbWFwcGluZyAke2J1aWxkLmNsYXNzZXMuZGlyfS9TYXlIZWxsb01hcHBpbmdfZWpiLnhtbCAtY3AgJHtidWlsZC5jbGFzc2VzLmRpcn0gLWtlZXAgLWQgJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvd3NkbCBjb25maWctaW50ZXJmYWNlLnhtbCIvPiAKKyAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIKKyAgIHZhbHVlPSItZGVmaW5lIC1tYXBwaW5nICR7YnVpbGQuY2xhc3Nlcy5kaXJ9L1NheUhlbGxvTWFwcGluZ19lamIueG1sIC1jcCAke2J1aWxkLmNsYXNzZXMuZGlyfSAta2VlcCAtZCAke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi93c2RsIGNvbmZpZy1pbnRlcmZhY2UueG1sIi8+CiAgICAgPC9hbnRjYWxsPgotICA8L3RhcmdldD4gICAgCi0gICAKKyAgPC90YXJnZXQ+CisKICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZS1lamIiIGRlcGVuZHM9ImluaXQtY29tbW9uLCBjb21waWxlLCBnZW4tZWpiLXdzZGwiPgogICAgIDxta2RpciBkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L1dFQi1JTkYvd3NkbCIvPgogICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9XRUItSU5GL3dzZGwiCi0gICAgICAgIGZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L01FVEEtSU5GL3dzZGwvU2F5SGVsbG9TZXJ2aWNlLndzZGwiLz4gICAgICAgIAorICAgICAgICBmaWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi93c2RsL1NheUhlbGxvU2VydmljZS53c2RsIi8+CiAgICAgPGNvcHkgdG9kaXI9Ii4iIGZpbGU9ImRlc2NyaXB0b3Ivd2Vic2VydmljZXMueG1sIi8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJlamItamFyLWNvbW1vbiI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgdmFsdWU9IlNheUhlbGxvTWFwcGluZ19lamIueG1sLE1FVEEtSU5GL3dzZGwvKiosc3R1YnByb3BzL1NpbXBsZSouY2xhc3MiLz4KICAgICA8L2FudGNhbGw+CiAgICAgPGRlbGV0ZSBmaWxlPSJ3ZWJzZXJ2aWNlcy54bWwiLz4KLSAgPC90YXJnZXQ+IAotICAKLSAgCisgIDwvdGFyZ2V0PgorCisKICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZS13ZWIiIGRlcGVuZHM9ImluaXQtY29tbW9uLCBjb21waWxlLCBnZW4td2ViLXdzZGwiPgogICAgIDxjb3B5IHRvZGlyPSIuIiBmaWxlPSIuLi9zaGFyZWQvd2FyL3dlYnNlcnZpY2VzLnhtbCIvPgogICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9XRUItSU5GIiBmaWxlPSIke3N1bi13ZWIueG1sfSIvPgogICAgIDxyZXBsYWNlIGZpbGU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L1dFQi1JTkYvc3VuLXdlYi54bWwiIHRva2VuPSJAd2ViSG9zdEAiIHZhbHVlPSIke2h0dHAuaG9zdH0iLz4KICAgICA8cmVwbGFjZSBmaWxlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9XRUItSU5GL3N1bi13ZWIueG1sIiB0b2tlbj0iQHdlYlBvcnRAIiB2YWx1ZT0iJHtodHRwLnBvcnR9Ii8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJ3ZWJjbGllbnQtd2FyLWNvbW1vbiI+Ci0gICAgICAgIDxwYXJhbSBuYW1lPSJoYXNXZWJjbGllbnQiIHZhbHVlPSJ5ZXMiLz4gICAKKyAgICAgICAgPHBhcmFtIG5hbWU9Imhhc1dlYmNsaWVudCIgdmFsdWU9InllcyIvPgogICAgICAgICA8cGFyYW0gbmFtZT0ic3VuLXdlYi54bWwiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9XRUItSU5GL3N1bi13ZWIueG1sIi8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJtYXBwaW5nZmlsZS5sb2NhdGlvbiIgdmFsdWU9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9Ii8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJtYXBwaW5nZmlsZS5uYW1lIiB2YWx1ZT0iV2ViU2VydmljZVRlc3RNYXBwaW5nLnhtbCIvPgpAQCAtODgsNjEgKzg4LDYxIEBACiAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIGNhc2VzZW5zaXRpdmU9InllcyI+CiAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJXRUItSU5GL3dzZGwvU2F5SGVsbG9TZXJ2aWNlLndzZGwiLz4KICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9IlNheUhlbGxvTWFwcGluZ19lamIueG1sIi8+Ci0gICAgICAgIDwvZmlsZXNldD4gICAgIAorICAgICAgICA8L2ZpbGVzZXQ+CiAgICAgIDwvamFyPgotICAgIDxkZWxldGUgZmlsZT0id2Vic2VydmljZXMueG1sIi8+ICAgICAKLSAgPC90YXJnZXQ+ICAgCi0gIAorICAgIDxkZWxldGUgZmlsZT0id2Vic2VydmljZXMueG1sIi8+CisgIDwvdGFyZ2V0PgorCiAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZS13ZWIiIGRlcGVuZHM9IiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJjb21waWxlLWNvbW1vbiI+CiAgICAgICA8cGFyYW0gbmFtZT0ic3JjIiB2YWx1ZT0iLi4vc2hhcmVkL3dhciIvPgogICAgIDwvYW50Y2FsbD4KLSAgPC90YXJnZXQ+IAotICAgIAorICA8L3RhcmdldD4KKwogICA8dGFyZ2V0IG5hbWU9Imdlbi13ZWItd3NkbCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDwhLS08bWtkaXIgZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9XRUItSU5GL3dzZGwiLz4gLS0+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4ud3Njb21waWxlIj4KLSAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIgCi0gICB2YWx1ZT0iLWRlZmluZSAtbWFwcGluZyAke2J1aWxkLmNsYXNzZXMuZGlyfS9XZWJTZXJ2aWNlVGVzdE1hcHBpbmcueG1sIC1jcCAke2J1aWxkLmNsYXNzZXMuZGlyfSAta2VlcCAtZCAke2J1aWxkLmNsYXNzZXMuZGlyfSAuLi9zaGFyZWQvd2FyL2NvbmZpZy54bWwiLz4gCisgICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiCisgICB2YWx1ZT0iLWRlZmluZSAtbWFwcGluZyAke2J1aWxkLmNsYXNzZXMuZGlyfS9XZWJTZXJ2aWNlVGVzdE1hcHBpbmcueG1sIC1jcCAke2J1aWxkLmNsYXNzZXMuZGlyfSAta2VlcCAtZCAke2J1aWxkLmNsYXNzZXMuZGlyfSAuLi9zaGFyZWQvd2FyL2NvbmZpZy54bWwiLz4KICAgICA8L2FudGNhbGw+Ci0gIDwvdGFyZ2V0PiAgICAgICAgCi0gICAgCisgIDwvdGFyZ2V0PgorCiAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUiIGRlcGVuZHM9ImFzc2VtYmxlLWVqYiwgYXNzZW1ibGUtd2ViLCBhc3NlbWJsZS1jbGllbnQiLz4KLSAgCisKICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZS1jbGllbnQiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImNsaWVudCIvPgotICAgIDwvYW50Y2FsbD4gICAgCisgICAgPC9hbnRjYWxsPgogICAgIDx1bmphciBzcmM9IiR7ZW52LkFQU19IT01FfS9saWIvcmVwb3J0ZXIuamFyIgogICAgICAgICBkZXN0PSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0iYXBwY2xpZW50LWphci1jb21tb24iPgotICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICB2YWx1ZT0iQ2xpZW50LmNsYXNzLCB0ZXN0LyoqLGNvbS8qKiIgLz4KLSAgICA8L2FudGNhbGw+ICAKKyAgICA8L2FudGNhbGw+CiAgICAgPG1vdmUgZmlsZT0iJHthc3NlbWJsZS5kaXJ9LyR7YXBwbmFtZX0tY2xpZW50LmphciIgdG9GaWxlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfUFwcENsaWVudC5qYXIiLz4KICAgPC90YXJnZXQ+Ci0gIAorCiAgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW5jbGllbnQtY29tbW9uIj4KICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSJodHRwOi8vJHtodHRwLmhvc3R9OiR7aHR0cC5wb3J0fS9XZWJTZXJ2aWNlVGVzdFNlcnZsZXQvV2ViU2VydmljZVRlc3RTZXJ2aWNlIi8+CiAgICAgICAgIDwvYW50Y2FsbD4KLSAgICA8L3RhcmdldD4gIAorICAgIDwvdGFyZ2V0PgogCi0gICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIAorICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IgogICAgICAgICAgICAgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImRlcGxveS1qYXItY29tbW9uIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LXdhci1jb21tb24iPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImNvbnRleHRyb290IiB2YWx1ZT0iV2ViU2VydmljZVRlc3RTZXJ2bGV0Ii8+ICAgICAgICAgICAgCisgICAgICAgICAgICA8cGFyYW0gbmFtZT0iY29udGV4dHJvb3QiIHZhbHVlPSJXZWJTZXJ2aWNlVGVzdFNlcnZsZXQiLz4KICAgICAgICAgPC9hbnRjYWxsPgogICAgIDwvdGFyZ2V0PgogCiAgICAgPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJjbGVhbi1jb21tb24iLz4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS13YXItY29tbW9uIi8+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktamFyLWNvbW1vbiIvPgotICAgIDwvdGFyZ2V0PiAgCi0gICAgCisgICAgPC90YXJnZXQ+CisKIDwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd2Vic3R1Yl9wcm9wZXJ0aWVzL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd2Vic3R1Yl9wcm9wZXJ0aWVzL2NsaWVudC9DbGllbnQuamF2YQppbmRleCAwNDI5MTYwLi4xMWExNjYwIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dlYnN0dWJfcHJvcGVydGllcy9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93ZWJzdHViX3Byb3BlcnRpZXMvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMSw0MyArMzEsNDMgQEAKICAqLwogCiBwdWJsaWMgY2xhc3MgQ2xpZW50IHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIFNpbXBsZVJlcG9ydGVyQWRhcHRlciBzdGF0ID0KLSAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOyAgICAKKyAgICAgICAgbmV3IFNpbXBsZVJlcG9ydGVyQWRhcHRlcigiYXBwc2Vydi10ZXN0cyIpOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ3ZWJzZXJ2aWNlcy13ZWItc3R1YnMtcHJvcGVydGllcyIpOwogICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAgICAgICBjbGllbnQuZG9UZXN0KGFyZ3MpOwotICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgid2Vic2VydmljZXMtd2ViLXN0dWJzLXByb3BlcnRpZXMiKTsgICAgICAgIAorICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgid2Vic2VydmljZXMtd2ViLXN0dWJzLXByb3BlcnRpZXMiKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoU3RyaW5nW10gYXJncykgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgZHluYW1pYyhhcmdzKTsKLSAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3ZWItc3R1YnMtcHJvcGVydGllcyBEeW5hbWljIFByb3h5Iiwgc3RhdC5QQVNTKTsgICAgICAgIAorICAgICAgICAgICAgc3RhdC5hZGRTdGF0dXMoIndlYi1zdHVicy1wcm9wZXJ0aWVzIER5bmFtaWMgUHJveHkiLCBzdGF0LlBBU1MpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZhaWx1cmUgIiArIGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygid2ViLXN0dWJzLXByb3BlcnRpZXMgRHluYW1pYyBQcm94eSIsIHN0YXQuRkFJTCk7ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ3ZWItc3R1YnMtcHJvcGVydGllcyBEeW5hbWljIFByb3h5Iiwgc3RhdC5GQUlMKTsKICAgICAgICAgfQogICAgIH0KLSAKKwogICAgIHB1YmxpYyB2b2lkIGR5bmFtaWMoU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFN0cmluZyBlbmRwb2ludCA9IGFyZ3NbMF07CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW52b2tpbmcgZHluYW1pYyBwcm94aWVzIHdpdGggZW5kcG9pbnQgYXQgIiArIGVuZHBvaW50KTsKICAgICAgICAgVVJMIHdzZGxVUkwgPSBuZXcgVVJMKGVuZHBvaW50KyI/V1NETCIpOwogICAgICAgICBTZXJ2aWNlRmFjdG9yeSBmYWN0b3J5ID0gU2VydmljZUZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLSAgICAgICAgU2VydmljZSBzZXJ2aWNlID0gZmFjdG9yeS5jcmVhdGVTZXJ2aWNlKHdzZGxVUkwsIAorICAgICAgICBTZXJ2aWNlIHNlcnZpY2UgPSBmYWN0b3J5LmNyZWF0ZVNlcnZpY2Uod3NkbFVSTCwKICAgICAgICAgICAgIG5ldyBRTmFtZSgidXJuOldlYlNlcnZpY2VUZXN0IiwiV2ViU2VydmljZVNlcnZsZXRUZXN0IikpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk9idGFpbmVkIFNlcnZpY2UiKTsKICAgICAgICAgV2ViU2VydmljZVRlc3QgaW50ZiA9IChXZWJTZXJ2aWNlVGVzdCkgc2VydmljZS5nZXRQb3J0KAotICAgICAgICAgICAgbmV3IFFOYW1lKCJ1cm46V2ViU2VydmljZVRlc3QiLCJXZWJTZXJ2aWNlVGVzdFBvcnQiKSwgICAgICAgICAgCisgICAgICAgICAgICBuZXcgUU5hbWUoInVybjpXZWJTZXJ2aWNlVGVzdCIsIldlYlNlcnZpY2VUZXN0UG9ydCIpLAogICAgICAgICAgICAgV2ViU2VydmljZVRlc3QuY2xhc3MpOwogICAgICAgICBTdHJpbmdbXSBwYXJhbXMgPSBuZXcgU3RyaW5nWzFdOwotICAgICAgICBwYXJhbXNbMF0gPSAiIGZyb20gY2xpZW50IjsgICAgICAgCisgICAgICAgIHBhcmFtc1swXSA9ICIgZnJvbSBjbGllbnQiOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaW50Zi5kb1Rlc3QocGFyYW1zKSk7CiAgICAgfQotICAgIAorCiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd2Vic3R1Yl9wcm9wZXJ0aWVzL2NvbmZpZy1pbnRlcmZhY2UueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93ZWJzdHViX3Byb3BlcnRpZXMvY29uZmlnLWludGVyZmFjZS54bWwKaW5kZXggMGUwYjYyNy4uNWM5ZWY5MSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93ZWJzdHViX3Byb3BlcnRpZXMvY29uZmlnLWludGVyZmFjZS54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93ZWJzdHViX3Byb3BlcnRpZXMvY29uZmlnLWludGVyZmFjZS54bWwKQEAgLTE5LDExICsxOSwxMSBAQAogCiA8Y29uZmlndXJhdGlvbgogICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4LXJwYy9yaS9jb25maWciPgotICA8c2VydmljZSAKLSAgICAgIG5hbWU9IlNheUhlbGxvU2VydmljZSIgCi0gICAgICB0YXJnZXROYW1lc3BhY2U9InVybjpXZWJTZXJ2aWNlVGVzdCIgCi0gICAgICB0eXBlTmFtZXNwYWNlPSJ1cm46V2ViU2VydmljZVRlc3QiIAorICA8c2VydmljZQorICAgICAgbmFtZT0iU2F5SGVsbG9TZXJ2aWNlIgorICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJ1cm46V2ViU2VydmljZVRlc3QiCisgICAgICB0eXBlTmFtZXNwYWNlPSJ1cm46V2ViU2VydmljZVRlc3QiCiAgICAgICBwYWNrYWdlTmFtZT0ic3R1YnByb3BzIj4KICAgICAgIDxpbnRlcmZhY2UgbmFtZT0ic3R1YnByb3BzLlNpbXBsZVNlcnZlciIvPgogICA8L3NlcnZpY2U+Ci08L2NvbmZpZ3VyYXRpb24+IAorPC9jb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93ZWJzdHViX3Byb3BlcnRpZXMvZGVzY3JpcHRvci9zdW4tZWpiLWphci54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dlYnN0dWJfcHJvcGVydGllcy9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAppbmRleCA5MDFmMmFhLi45MzJmMzdiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dlYnN0dWJfcHJvcGVydGllcy9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dlYnN0dWJfcHJvcGVydGllcy9kZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbApAQCAtMjYsNyArMjYsNyBAQAogICAgICAgPHdlYnNlcnZpY2UtZW5kcG9pbnQ+CiAgICAgICAgIDxwb3J0LWNvbXBvbmVudC1uYW1lPlNpbXBsZVNlcnZlclBvcnQ8L3BvcnQtY29tcG9uZW50LW5hbWU+CiAgICAgICAgIDxlbmRwb2ludC1hZGRyZXNzLXVyaT5zaW1wbGVzZXJ2ZXIvU2ltcGxlU2VydmVyPC9lbmRwb2ludC1hZGRyZXNzLXVyaT4KLQk8ZGVidWdnaW5nLWVuYWJsZWQ+dHJ1ZTwvZGVidWdnaW5nLWVuYWJsZWQ+CisgICAgPGRlYnVnZ2luZy1lbmFibGVkPnRydWU8L2RlYnVnZ2luZy1lbmFibGVkPgogICAgICAgPC93ZWJzZXJ2aWNlLWVuZHBvaW50PgogICAgIDwvZWpiPgogICA8L2VudGVycHJpc2UtYmVhbnM+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dlYnN0dWJfcHJvcGVydGllcy9kZXNjcmlwdG9yL3N1bi13ZWIueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93ZWJzdHViX3Byb3BlcnRpZXMvZGVzY3JpcHRvci9zdW4td2ViLnhtbAppbmRleCAxMmY2YzU5Li4zNjYwNWRhIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dlYnN0dWJfcHJvcGVydGllcy9kZXNjcmlwdG9yL3N1bi13ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd2Vic3R1Yl9wcm9wZXJ0aWVzL2Rlc2NyaXB0b3Ivc3VuLXdlYi54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICAgICAgPHN0dWItcHJvcGVydHk+CiAgICAgICAgICAgICA8bmFtZT5qYXZheC54bWwucnBjLnNlcnZpY2UuZW5kcG9pbnQuYWRkcmVzczwvbmFtZT4KICAgICAgICAgICAgIDx2YWx1ZT5odHRwOi8vQHdlYkhvc3RAOkB3ZWJQb3J0QC9zaW1wbGVzZXJ2ZXIvU2ltcGxlU2VydmVyIDwvdmFsdWU+Ci0gICAgICAgIDwvc3R1Yi1wcm9wZXJ0eT4gICAgICAgIAorICAgICAgICA8L3N0dWItcHJvcGVydHk+CiAgICAgPC9wb3J0LWluZm8+Ci0gPC9zZXJ2aWNlLXJlZj4gICAgICAKKyA8L3NlcnZpY2UtcmVmPgogPC9zdW4td2ViLWFwcD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd2Vic3R1Yl9wcm9wZXJ0aWVzL2Rlc2NyaXB0b3Ivd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd2Vic3R1Yl9wcm9wZXJ0aWVzL2Rlc2NyaXB0b3Ivd2ViLnhtbAppbmRleCA1NWU2N2NhLi4yODNhZDQ4IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dlYnN0dWJfcHJvcGVydGllcy9kZXNjcmlwdG9yL3dlYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93ZWJzdHViX3Byb3BlcnRpZXMvZGVzY3JpcHRvci93ZWIueG1sCkBAIC00MSw1ICs0MSw1IEBACiAgICAgPHBvcnQtY29tcG9uZW50LXJlZj4KICAgICAgIDxzZXJ2aWNlLWVuZHBvaW50LWludGVyZmFjZT5zdHVicHJvcHMuU2ltcGxlU2VydmVyPC9zZXJ2aWNlLWVuZHBvaW50LWludGVyZmFjZT4KICAgICA8L3BvcnQtY29tcG9uZW50LXJlZj4KLSAgIDwvc2VydmljZS1yZWY+IAorICAgPC9zZXJ2aWNlLXJlZj4KIDwvd2ViLWFwcD4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd2Vic3R1Yl9wcm9wZXJ0aWVzL3N0dWJwcm9wcy9TaW1wbGVTZXJ2ZXIuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd2Vic3R1Yl9wcm9wZXJ0aWVzL3N0dWJwcm9wcy9TaW1wbGVTZXJ2ZXIuamF2YQppbmRleCBiM2M1OTczLi44YzE4OWJjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dlYnN0dWJfcHJvcGVydGllcy9zdHVicHJvcHMvU2ltcGxlU2VydmVyLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93ZWJzdHViX3Byb3BlcnRpZXMvc3R1YnByb3BzL1NpbXBsZVNlcnZlci5qYXZhCkBAIC0yMiw4ICsyMiw4IEBACiAKIHBhY2thZ2Ugc3R1YnByb3BzOwogCi1pbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOyAKLWltcG9ydCBqYXZhLnJtaS5SZW1vdGU7IAoraW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnJtaS5SZW1vdGU7CiAKIC8qKgogICogU2ltcGxlIFdlYlNlcnZpY2VzIEludGVyZmFjZQpAQCAtMzEsNiArMzEsNiBAQAogICogQGF1dGhvciBKZXJvbWUgRG9jaGV6CiAgKi8KIHB1YmxpYyBpbnRlcmZhY2UgU2ltcGxlU2VydmVyIGV4dGVuZHMgUmVtb3RlIHsKLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIHdobykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd2Vic3R1Yl9wcm9wZXJ0aWVzL3N0dWJwcm9wcy9TaW1wbGVTZXJ2ZXJJbXBsLmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dlYnN0dWJfcHJvcGVydGllcy9zdHVicHJvcHMvU2ltcGxlU2VydmVySW1wbC5qYXZhCmluZGV4IGI3MWM0ZmUuLjRhODg5MTcgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd2Vic3R1Yl9wcm9wZXJ0aWVzL3N0dWJwcm9wcy9TaW1wbGVTZXJ2ZXJJbXBsLmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93ZWJzdHViX3Byb3BlcnRpZXMvc3R1YnByb3BzL1NpbXBsZVNlcnZlckltcGwuamF2YQpAQCAtMjUsMzYgKzI1LDM2IEBACiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkJlYW47CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQ7CiBpbXBvcnQgamFrYXJ0YS5lamIuRUpCRXhjZXB0aW9uOwotaW1wb3J0IGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbjsgCitpbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOwogCiAvKioKICAqCiAgKiBAYXV0aG9yIGRvY2hlegogICovCiBwdWJsaWMgY2xhc3MgU2ltcGxlU2VydmVySW1wbCBpbXBsZW1lbnRzIFNlc3Npb25CZWFuIHsKLSAgICAKKwogICAgIFNlc3Npb25Db250ZXh0IHNjOwotICAgIAorCiAgICAgLyoqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgU2ltcGxlU2VydmVySW1wbCAqLwogICAgIHB1YmxpYyBTaW1wbGVTZXJ2ZXJJbXBsKCkgewogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkNyZWF0ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gR29vZ2xlRUpCOjplamJDcmVhdGUgISEiKTsKLX0gICAgCi0gICAgCisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBHb29nbGVFSkI6OmVqYkNyZWF0ZSAhISIpOworfQorCiAgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgd2hvKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuICJoZWxsbyIgKyB3aG87Ci0gICAgfSAgICAKLSAgICAKKyAgICB9CisKICAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ29udGV4dChTZXNzaW9uQ29udGV4dCBzYykgewotCQorCiAgICAgICAgIHRoaXMuc2MgPSBzYzsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJSZW1vdmUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHt9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJBY3RpdmF0ZSgpIHt9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJQYXNzaXZhdGUoKSB7fQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93ZWJzdHViX3Byb3BlcnRpZXMvc3R1YnByb3BzL1Rlc3RTZXJ2bGV0LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dlYnN0dWJfcHJvcGVydGllcy9zdHVicHJvcHMvVGVzdFNlcnZsZXQuamF2YQppbmRleCAzZGI0ODk5Li45NDcwNmZmIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dlYnN0dWJfcHJvcGVydGllcy9zdHVicHJvcHMvVGVzdFNlcnZsZXQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dlYnN0dWJfcHJvcGVydGllcy9zdHVicHJvcHMvVGVzdFNlcnZsZXQuamF2YQpAQCAtMzMsMTYgKzMzLDE2IEBACiAgKiBAYXV0aG9yIGRvY2hlegogICovCiBwdWJsaWMgY2xhc3MgVGVzdFNlcnZsZXQgaW1wbGVtZW50cyBXZWJTZXJ2aWNlVGVzdCB7Ci0gICAgCisKICAgICBTaW1wbGVTZXJ2ZXIgcG9ydDsKLSAgICAKKwogICAgIC8qKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIFRlc3RTZXJ2bGV0ICovCiAgICAgcHVibGljIFRlc3RTZXJ2bGV0KCkgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3Qgc2VydmxldCBpbnN0YW50aWF0ZWQiKTsgICAgICAgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3Qgc2VydmxldCBpbnN0YW50aWF0ZWQiKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGRvVGVzdChTdHJpbmdbXSBwYXJhbWV0ZXJzKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgCisKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0IHNlcnZsZXQgaW52b2tlZCIpOwogICAgICAgICBTZXJ2aWNlIHJlZjsKICAgICAgICAgdHJ5IHsKQEAgLTYwLDcgKzYwLDcgQEAKICAgICAgICAgamF2YS51dGlsLkl0ZXJhdG9yIGl0ciA9IHJlZi5nZXRQb3J0cygpOwogICAgICAgICB3aGlsZSAoaXRyLmhhc05leHQoKSkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGl0ci5uZXh0KCkpOwotICAgICAgICAgICAgCisKICAgICAgICAgfQogCiAgICAgICAgICAgICBwb3J0ID0gKFNpbXBsZVNlcnZlcikgcmVmLmdldFBvcnQoU2ltcGxlU2VydmVyLmNsYXNzKTsKQEAgLTczLDYgKzczLDYgQEAKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZmFpbHVyZSA6IGNhbm5vdCBnZXQgcG9ydCIpOwogICAgICAgICAgICAgcmV0dXJuICJGYWlsZWQgLSBDYW5ub3QgZ2V0IHBvcnQiOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBwb3J0LnNheUhlbGxvKHBhcmFtZXRlcnNbMF0pOyAgICAgICAgCi0gICAgfSAgICAKKyAgICAgICAgcmV0dXJuIHBvcnQuc2F5SGVsbG8ocGFyYW1ldGVyc1swXSk7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93bHNfZGQvc2VydmljZV9lbmRwb2ludF9hZGRyZXNzL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dsc19kZC9zZXJ2aWNlX2VuZHBvaW50X2FkZHJlc3MvYnVpbGQucHJvcGVydGllcwppbmRleCAwYTQwYTA4Li5iM2VjZjBiIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dsc19kZC9zZXJ2aWNlX2VuZHBvaW50X2FkZHJlc3MvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dsc19kZC9zZXJ2aWNlX2VuZHBvaW50X2FkZHJlc3MvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsOSArMTUsOSBAQAogICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMAogCiAtLT4KLSAKKwogCiA8cHJvcGVydHkgbmFtZT0ibW9kdWxlIiB2YWx1ZT0ic2VydmljZV9lbmRwb2ludF9hZGRyZXNzIi8+Ci08cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcG5hbWUiIHZhbHVlPSIke21vZHVsZX0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFzc2VtYmxlIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0vYXJjaGl2ZSIvPgogPHByb3BlcnR5IG5hbWU9ImVqYi53c2l0LmRlc2NyaXB0b3JzIiB2YWx1ZT0iLi9kZXNjcmlwdG9ycyIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93bHNfZGQvc2VydmljZV9lbmRwb2ludF9hZGRyZXNzL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd2xzX2RkL3NlcnZpY2VfZW5kcG9pbnRfYWRkcmVzcy9idWlsZC54bWwKaW5kZXggZWRlM2ExMC4uMzQ4YWY1YyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93bHNfZGQvc2VydmljZV9lbmRwb2ludF9hZGRyZXNzL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dsc19kZC9zZXJ2aWNlX2VuZHBvaW50X2FkZHJlc3MvYnVpbGQueG1sCkBAIC00NSw3ICs0NSw3IEBACiAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNvbXBpbGUtY29tbW9uIj4KICAgICAgICAgPHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9ImVuZHBvaW50Ii8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgICAKKwogICAgICAgPGFudGNhbGwgdGFyZ2V0PSJwa2ctZWpiLWphciI+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqYXIuY2xhc3NlcyIgdmFsdWU9ImVuZHBvaW50Ii8+CiAgICAgICAgIDxwYXJhbSBuYW1lPSJqYXIuZmlsZSIgdmFsdWU9IiR7YXNzZW1ibGUuZGlyfS8ke2FwcG5hbWV9LWVqYi5qYXIiLz4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd2xzX2RkL3NlcnZpY2VfZW5kcG9pbnRfYWRkcmVzcy9jbGllbnQvQ2xpZW50LmphdmEgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dsc19kZC9zZXJ2aWNlX2VuZHBvaW50X2FkZHJlc3MvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGZjZDNjYjcuLmUxZTRkMmMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd2xzX2RkL3NlcnZpY2VfZW5kcG9pbnRfYWRkcmVzcy9jbGllbnQvQ2xpZW50LmphdmEKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93bHNfZGQvc2VydmljZV9lbmRwb2ludF9hZGRyZXNzL2NsaWVudC9DbGllbnQuamF2YQpAQCAtMzIsNyArMzIsNyBAQAogICAgICAgICBzdGF0aWMgQWRkTnVtYmVyc0ltcGxTZXJ2aWNlIHNlcnZpY2U7CiAKICAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCSAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigid2xzX2RkLnNlcnZpY2VfZW5kcG9pbnRfYWRkcmVzcyIpOworICAgICAgICAgICAgc3RhdC5hZGREZXNjcmlwdGlvbigid2xzX2RkLnNlcnZpY2VfZW5kcG9pbnRfYWRkcmVzcyIpOwogICAgICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKICAgICAgICAgICAgIGNsaWVudC5ydW5UZXN0KCk7CiAgICAgICAgICAgICBzdGF0LnByaW50U3VtbWFyeSgid2xzX2RkLnNlcnZpY2VfZW5kcG9pbnRfYWRkcmVzcyIpOwpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93bHNfZGQvd3NkbF9leHBvc2VkX2ZhbHNlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dsc19kZC93c2RsX2V4cG9zZWRfZmFsc2UvYnVpbGQucHJvcGVydGllcwppbmRleCA5YTRlMzEzLi4yMmI2NjExIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dsc19kZC93c2RsX2V4cG9zZWRfZmFsc2UvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dsc19kZC93c2RsX2V4cG9zZWRfZmFsc2UvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMTAgKzE1LDEwIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ3c2RsX2V4cG9zZWRfZmFsc2UiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+CiA8cHJvcGVydHkgbmFtZT0id2ViLnhtbCIgdmFsdWU9Ii4vd2ViLnhtbCIvPgogPHByb3BlcnR5IG5hbWU9IndlYnNlcnZpY2VzLnhtbCIgdmFsdWU9Ii4vd2Vic2VydmljZXMueG1sIi8+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dsc19kZC93c2RsX2V4cG9zZWRfZmFsc2UvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93bHNfZGQvd3NkbF9leHBvc2VkX2ZhbHNlL2J1aWxkLnhtbAppbmRleCBjY2E1ODRlLi43OGQ2NGI1IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dsc19kZC93c2RsX2V4cG9zZWRfZmFsc2UvYnVpbGQueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd2xzX2RkL3dzZGxfZXhwb3NlZF9mYWxzZS9idWlsZC54bWwKQEAgLTc1LDggKzc1LDggQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0id3NpbXBvcnQuYXJncyIKICAgICAgICAgICAgICAgIHZhbHVlPSIta2VlcCAtcCB3bHNfZGQuJHthbnQucHJvamVjdC5uYW1lfS5jbGllbnQgLWQgJHtidWlsZC5jbGFzc2VzLmRpcn0vY2xpZW50ICR7bG9jYWx3c2RsZGlyfS9BZGROdW1iZXJzU2VydmljZS53c2RsIi8+CiAgICAgICA8L2FudGNhbGw+Ci0gICAgICA8amF2YWMgc3JjZGlyPSIuIiBkZXN0ZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9jbGllbnQiIAotICAgICAgICAgICAgY2xhc3NwYXRoPSIke2Vudi5BUFNfSE9NRX0vbGliL3JlcG9ydGVyLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi9qMmVlLmphcjoke2Vudi5TMUFTX0hPTUV9L2xpYi93ZWJzZXJ2aWNlcy1ydC5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtdG9vbHMuamFyIiAKKyAgICAgIDxqYXZhYyBzcmNkaXI9Ii4iIGRlc3RkaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2NsaWVudCIKKyAgICAgICAgICAgIGNsYXNzcGF0aD0iJHtlbnYuQVBTX0hPTUV9L2xpYi9yZXBvcnRlci5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvajJlZS5qYXI6JHtlbnYuUzFBU19IT01FfS9saWIvd2Vic2VydmljZXMtcnQuamFyOiR7ZW52LlMxQVNfSE9NRX0vbGliL3dlYnNlcnZpY2VzLXRvb2xzLmphciIKICAgICAgICAgICAgIGluY2x1ZGVzPSJjbGllbnQvKioiLz4KICAgICA8L3RhcmdldD4KIApkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93bHNfZGQvd3NkbF9leHBvc2VkX2ZhbHNlL2NsaWVudC9DbGllbnQuamF2YSBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd2xzX2RkL3dzZGxfZXhwb3NlZF9mYWxzZS9jbGllbnQvQ2xpZW50LmphdmEKaW5kZXggY2MzMzFlMy4uOGQ2ZDYxNSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93bHNfZGQvd3NkbF9leHBvc2VkX2ZhbHNlL2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dsc19kZC93c2RsX2V4cG9zZWRfZmFsc2UvY2xpZW50L0NsaWVudC5qYXZhCkBAIC0zMiw3ICszMiw3IEBACiAgICAgICAgIHN0YXRpYyBBZGROdW1iZXJzSW1wbFNlcnZpY2Ugc2VydmljZTsKIAogICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ3bHNfZGQud3NkbF9leHBvc2VkX2ZhbHNlIik7CisgICAgICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ3bHNfZGQud3NkbF9leHBvc2VkX2ZhbHNlIik7CiAgICAgICAgICAgICBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAgICAgICAgICAgY2xpZW50LnJ1blRlc3QoKTsKICAgICAgICAgICAgIHN0YXQucHJpbnRTdW1tYXJ5KCJ3bHNfZGQud3NkbF9leHBvc2VkX2ZhbHNlIik7CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dsc19kZC93c2RsX2V4cG9zZWRfZmFsc2Uvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd2xzX2RkL3dzZGxfZXhwb3NlZF9mYWxzZS93ZWIueG1sCmluZGV4IDM5YmQxYTUuLjA2YzMwNTIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd2xzX2RkL3dzZGxfZXhwb3NlZF9mYWxzZS93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd2xzX2RkL3dzZGxfZXhwb3NlZF9mYWxzZS93ZWIueG1sCkBAIC0xOCwxNyArMTgsMTcgQEAKIC0tPgogCiA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlIgotCXhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIKLQl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB2ZXJzaW9uPSIyLjUiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUKLQkJCWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiPgotCTxzZXJ2bGV0PgotCQk8c2VydmxldC1uYW1lPkFkZE51bWJlcnNJbXBsPC9zZXJ2bGV0LW5hbWU+Ci0JCTxzZXJ2bGV0LWNsYXNzPndsc19kZC53c2RsX2V4cG9zZWRfZmFsc2UuZW5kcG9pbnQuQWRkTnVtYmVyc0ltcGw8L3NlcnZsZXQtY2xhc3M+Ci0JPC9zZXJ2bGV0PgotCTxzZXJ2bGV0LW1hcHBpbmc+Ci0JCTxzZXJ2bGV0LW5hbWU+QWRkTnVtYmVyc0ltcGw8L3NlcnZsZXQtbmFtZT4KLQkJPHVybC1wYXR0ZXJuPi9zZXJ2aWNlPC91cmwtcGF0dGVybj4KLQk8L3NlcnZsZXQtbWFwcGluZz4KKyAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgdmVyc2lvbj0iMi41IgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF2YWVlCisgICAgICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIj4KKyAgICA8c2VydmxldD4KKyAgICAgICAgPHNlcnZsZXQtbmFtZT5BZGROdW1iZXJzSW1wbDwvc2VydmxldC1uYW1lPgorICAgICAgICA8c2VydmxldC1jbGFzcz53bHNfZGQud3NkbF9leHBvc2VkX2ZhbHNlLmVuZHBvaW50LkFkZE51bWJlcnNJbXBsPC9zZXJ2bGV0LWNsYXNzPgorICAgIDwvc2VydmxldD4KKyAgICA8c2VydmxldC1tYXBwaW5nPgorICAgICAgICA8c2VydmxldC1uYW1lPkFkZE51bWJlcnNJbXBsPC9zZXJ2bGV0LW5hbWU+CisgICAgICAgIDx1cmwtcGF0dGVybj4vc2VydmljZTwvdXJsLXBhdHRlcm4+CisgICAgPC9zZXJ2bGV0LW1hcHBpbmc+CiA8L3dlYi1hcHA+CiAKZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd3NpLXNhbXBsZWFwcC9kZXNjcmlwdG9ycy9hcHBsaWNhdGlvbi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dzaS1zYW1wbGVhcHAvZGVzY3JpcHRvcnMvYXBwbGljYXRpb24ueG1sCmluZGV4IGVhMjY1MGEuLjFkMGY4YjYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd3NpLXNhbXBsZWFwcC9kZXNjcmlwdG9ycy9hcHBsaWNhdGlvbi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93c2ktc2FtcGxlYXBwL2Rlc2NyaXB0b3JzL2FwcGxpY2F0aW9uLnhtbApAQCAtMTgsOSArMTgsOSBAQAogLS0+CiAKIDxhcHBsaWNhdGlvbgotICB2ZXJzaW9uPSIxLjQiIAotICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIgCi0gIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIAorICB2ZXJzaW9uPSIxLjQiCisgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIgorICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgogICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS9hcHBsaWNhdGlvbl8xXzQueHNkIj4KIAogICA8ZGVzY3JpcHRpb24+V1NJIFNhbXBsZSBBcHBsaWNhdGlvbiBkZXNjcmlwdGlvbjwvZGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dzaS1zYW1wbGVhcHAvZGVzY3JpcHRvcnMvd2ViLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd3NpLXNhbXBsZWFwcC9kZXNjcmlwdG9ycy93ZWIueG1sCmluZGV4IDY2MzNjM2YuLjI1ZDdmZTUgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd3NpLXNhbXBsZWFwcC9kZXNjcmlwdG9ycy93ZWIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd3NpLXNhbXBsZWFwcC9kZXNjcmlwdG9ycy93ZWIueG1sCkBAIC0xOCw4ICsxOCw4IEBACiAtLT4KIAogPHdlYi1hcHAgdmVyc2lvbj0iMi40IgotICAgICAgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiIAotICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgCisgICAgICAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIKKyAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiPgogCiAgIDxkaXNwbGF5LW5hbWU+V1NJLVNhbXBsZS1BcHBsaWNhdGlvbjwvZGlzcGxheS1uYW1lPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93c2kvZmF1bHRjb2RlL2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dzaS9mYXVsdGNvZGUvYnVpbGQucHJvcGVydGllcwppbmRleCAwZjc5ZWFiLi45NWJmMTk5IDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dzaS9mYXVsdGNvZGUvYnVpbGQucHJvcGVydGllcworKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dzaS9mYXVsdGNvZGUvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjIgKzE1LDIyIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJmYXVsdGNvZGUiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0id2Vic2VydmljZXMueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWJzZXJ2aWNlcy54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93c2kvZmF1bHRjb2RlL2J1aWxkLnhtbCBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd3NpL2ZhdWx0Y29kZS9idWlsZC54bWwKaW5kZXggNDliNzkwNC4uZjIyN2Y5OSAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93c2kvZmF1bHRjb2RlL2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dzaS9mYXVsdGNvZGUvYnVpbGQueG1sCkBAIC0zMyw5ICszMyw5IEBACiAKIAogICA8dGFyZ2V0IG5hbWU9InJ1bi53c2NvbXBpbGUiPgotCTxleGVjIGV4ZWN1dGFibGU9IiR7V1NDT01QSUxFfSIgZmFpbG9uZXJyb3I9InRydWUiID4KLSAgICAgICAgPGFyZyBsaW5lPSItc291cmNlIDEuMS4yICR7d3Njb21waWxlLmNvbW1hbmR9IiAvPiAgICAgICAgCi0JPC9leGVjPgorICAgIDxleGVjIGV4ZWN1dGFibGU9IiR7V1NDT01QSUxFfSIgZmFpbG9uZXJyb3I9InRydWUiID4KKyAgICAgICAgPGFyZyBsaW5lPSItc291cmNlIDEuMS4yICR7d3Njb21waWxlLmNvbW1hbmR9IiAvPgorICAgIDwvZXhlYz4KICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSIiPgpAQCAtNTgsMTEgKzU4LDExIEBACiAgIDx0YXJnZXQgbmFtZT0id3Njb21waWxlLWFwcGNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxta2RpciBkaXI9Im91dHB1dCIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLndzY29tcGlsZSI+Ci0gICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiIAorICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIgogICAgICAgIHZhbHVlPSItaW1wb3J0IC1rZWVwIC1kIG91dHB1dCAtcyBvdXRwdXQgLWNsYXNzcGF0aCAuIHdzY29tcGlsZV9jb25maWdfYXBwY2xpZW50LnhtbCIvPgogICAgIDwvYW50Y2FsbD4KICAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vZmF1bHRjb2RlIj4KLSAgICAgICA8ZmlsZXNldCBkaXI9Im91dHB1dC9mYXVsdGNvZGUiIAorICAgICAgIDxmaWxlc2V0IGRpcj0ib3V0cHV0L2ZhdWx0Y29kZSIKICAgICAgICAgaW5jbHVkZXM9IlNpbXBsZVRlc3RTZXJ2aWNlLmNsYXNzLCBTaW1wbGVUZXN0LmNsYXNzIi8+CiAgICAgPC9jb3B5PgogICAgIDxkZWxldGUgZGlyPSJvdXRwdXQiLz4KQEAgLTcxLDExICs3MSwxMSBAQAogICA8dGFyZ2V0IG5hbWU9IndzY29tcGlsZS1lamIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8bWtkaXIgZGlyPSJvdXRwdXQiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi53c2NvbXBpbGUiPgotICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIiAKKyAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIKICAgICAgICB2YWx1ZT0iLWltcG9ydCAta2VlcCAtZCBvdXRwdXQgLXMgb3V0cHV0IC1jbGFzc3BhdGggLiB3c2NvbXBpbGVfY29uZmlnX2VqYi54bWwiLz4KICAgICA8L2FudGNhbGw+CiAgICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L2ZhdWx0Y29kZWVqYiI+Ci0gICAgICAgPGZpbGVzZXQgZGlyPSJvdXRwdXQvZmF1bHRjb2RlZWpiIiAKKyAgICAgICA8ZmlsZXNldCBkaXI9Im91dHB1dC9mYXVsdGNvZGVlamIiCiAgICAgICAgIGluY2x1ZGVzPSJTaW1wbGVUZXN0U2VydmljZS5jbGFzcywgU2ltcGxlVGVzdC5jbGFzcyIvPgogICAgIDwvY29weT4KICAgICA8ZGVsZXRlIGRpcj0ib3V0cHV0Ii8+CkBAIC04NCwyNCArODQsMjQgQEAKICAgPHRhcmdldCBuYW1lPSJhc3NlbWJsZSIgZGVwZW5kcz0iaW5pdC1jb21tb24sIGNvbXBpbGUiPgogICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9NRVRBLUlORi93c2RsIgogICAgICAgZmlsZT0iZmF1bHRjb2RlLndzZGwiLz4KLSAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iIAotCSBmaWxlPSJGYXVsdENvZGVNYXBwaW5nX2FwcGNsaWVudC54bWwiLz4KKyAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0iCisgICAgIGZpbGU9IkZhdWx0Q29kZU1hcHBpbmdfYXBwY2xpZW50LnhtbCIvPgogICAgIDxhbnRjYWxsIHRhcmdldD0iYXBwY2xpZW50LWphci1jb21tb24iPgotICAgICAgPHBhcmFtIG5hbWU9ImFwcGNsaWVudGphci5jbGFzc2VzIiAKKyAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIKICAgICAgICAgICAgICB2YWx1ZT0iRmF1bHRDb2RlTWFwcGluZ19hcHBjbGllbnQueG1sLE1FVEEtSU5GL3dzZGwvKiosZmF1bHRjb2RlLyouY2xhc3MiIC8+CiAKICAgICA8L2FudGNhbGw+Ci0gICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiAKLQkgZmlsZT0iRmF1bHRDb2RlTWFwcGluZ19lamIueG1sIi8+CisgICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgorICAgICBmaWxlPSJGYXVsdENvZGVNYXBwaW5nX2VqYi54bWwiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVqYi1qYXItY29tbW9uIj4KLSAgICAgIDxwYXJhbSBuYW1lPSJlamJqYXIuY2xhc3NlcyIgCisgICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgdmFsdWU9IkZhdWx0Q29kZU1hcHBpbmdfZWpiLnhtbCxNRVRBLUlORi93c2RsLyoqLGZhdWx0Y29kZWVqYi8qLmNsYXNzIiAvPgogCiAgICAgPC9hbnRjYWxsPgogICAgIDxhbnRjYWxsIHRhcmdldD0iZWFyLWNvbW1vbiIgLz4KLSAgPC90YXJnZXQ+IAorICA8L3RhcmdldD4KIAotICAgIDx0YXJnZXQgbmFtZT0iZGVwbG95IiAKKyAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIKICAgICAgICAgICAgIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJkZXBsb3ktY29tbW9uIi8+CiAgICAgPC90YXJnZXQ+CkBAIC0xMjEsMjkgKzEyMSwyOSBAQAogICAgICAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnQuYXBwbGljYXRpb24uYXJncyIgdmFsdWU9Imh0dHA6Ly8ke2h0dHAuaG9zdH06JHtodHRwLnBvcnR9L2ZhdWx0Y29kZWVqYi9GYXVsdENvZGVUZXN0Ii8+CiAgICAgICAgIDwvYW50Y2FsbD4KICAgICA8L3RhcmdldD4KLSAKKwogICAgIDx0YXJnZXQgbmFtZT0idW5kZXBsb3kiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICAgICAgPGFudGNhbGwgdGFyZ2V0PSJ1bmRlcGxveS1jb21tb24iLz4KLSAgICA8L3RhcmdldD4gIAorICAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0iZ2VuLW1hcHBpbmctYXBwY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4ud3Njb21waWxlIj4KLSAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIgCisgICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiCiAgICAgICAgdmFsdWU9Ii1nZW4gLWNwIC4gLW1hcHBpbmcgRmF1bHRDb2RlTWFwcGluZ19hcHBjbGllbnQueG1sIHdzY29tcGlsZV9jb25maWdfYXBwY2xpZW50LnhtbCIvPgogICAgIDwvYW50Y2FsbD4KICAgPC90YXJnZXQ+CiAKICAgPHRhcmdldCBuYW1lPSJnZW4tbWFwcGluZy1lamIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi53c2NvbXBpbGUiPgotICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIiAKKyAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIKICAgICAgICB2YWx1ZT0iLWdlbiAtY3AgLiAtbWFwcGluZyBGYXVsdENvZGVNYXBwaW5nX2VqYi54bWwgd3Njb21waWxlX2NvbmZpZ19lamIueG1sIi8+CiAgICAgPC9hbnRjYWxsPgogICA8L3RhcmdldD4KIAogICAgIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotCTxlY2hvPgotCQlVc2FnZToKLQkJCWFudCBhbGwgKEV4ZWN1dGVzIHRoZSBXZWJTZXJ2aWNlcyB0ZXN0KQotCTwvZWNobz4KKyAgICA8ZWNobz4KKyAgICAgICAgVXNhZ2U6CisgICAgICAgICAgICBhbnQgYWxsIChFeGVjdXRlcyB0aGUgV2ViU2VydmljZXMgdGVzdCkKKyAgICA8L2VjaG8+CiAgICAgPC90YXJnZXQ+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dzaS9mYXVsdGNvZGUvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93c2kvZmF1bHRjb2RlL2NsaWVudC9DbGllbnQuamF2YQppbmRleCAwOTUwNjgwLi43NWNmZDkxIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dzaS9mYXVsdGNvZGUvY2xpZW50L0NsaWVudC5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd3NpL2ZhdWx0Y29kZS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI3LDI1ICsyNywyNSBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ3ZWJzZXJ2aWNlcy1mYXVsdGNvZGUiKTsKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoIndlYnNlcnZpY2VzLWZhdWx0Y29kZUlEIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKLSAgICAJdHJ5IHsKKyAgICAgICAgdHJ5IHsKIAogICAgICAgICAgICBTdHJpbmcgdGFyZ2V0RW5kcG9pbnRBZGRyZXNzID0gYXJnc1swXTsKIAotCSAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgICAgICAKKyAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworCiAgICAgICAgICAgICBTaW1wbGVUZXN0U2VydmljZSB0ZXN0U2VydmljZSA9CiAgICAgICAgICAgICAgICAgKFNpbXBsZVRlc3RTZXJ2aWNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvc2VydmljZS9mYXVsdGNvZGUiKTsKICAgICAgICAgICAgIFNpbXBsZVRlc3QgdGVzdCA9IHRlc3RTZXJ2aWNlLmdldFNpbXBsZVRlc3QoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAoKFN0dWIpdGVzdCkuX3NldFByb3BlcnR5KFN0dWIuRU5EUE9JTlRfQUREUkVTU19QUk9QRVJUWSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0RW5kcG9pbnRBZGRyZXNzKTsKIApAQCAtNjUsMTEgKzY1LDExIEBACiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJFVFVSTiBMVUNLWSBOVU1CRVIgPSAiICsgcmV0KTsKICovCiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygieHNkYW55Y2xpZW50IG1haW4iLCBzdGF0LlBBU1MpOwotICAgICAgICAgICAgICAgIAotICAgIAl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigieHNkYW55IGNsaWVudCB0ZXN0IGZhaWxlZCIpOwogICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICBzdGF0LmFkZFN0YXR1cygieHNkYW55Y2xpZW50IG1haW4iLCBzdGF0LkZBSUwpOwotCX0gCisgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd3NpL2ZhdWx0Y29kZS9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dzaS9mYXVsdGNvZGUvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sCmluZGV4IDI1ZmY1YjUuLjFjY2FiOWMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd3NpL2ZhdWx0Y29kZS9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93c2kvZmF1bHRjb2RlL2Rlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbApAQCAtMjcsNiArMjcsNiBAQAogICAgIDx3c2RsLWZpbGU+TUVUQS1JTkYvd3NkbC9mYXVsdGNvZGUud3NkbDwvd3NkbC1maWxlPgogICAgIDxqYXhycGMtbWFwcGluZy1maWxlPkZhdWx0Q29kZU1hcHBpbmdfYXBwY2xpZW50LnhtbDwvamF4cnBjLW1hcHBpbmctZmlsZT4KICAgICA8c2VydmljZS1xbmFtZSB4bWxuczpzZXJ2aWNlbnM9InVybjp0ZXN0Ij5zZXJ2aWNlbnM6VGVzdFNlcnZpY2UKLSAgICA8L3NlcnZpY2UtcW5hbWU+ICAgICAgICAgICAgICAgCisgICAgPC9zZXJ2aWNlLXFuYW1lPgogICA8L3NlcnZpY2UtcmVmPgogPC9hcHBsaWNhdGlvbi1jbGllbnQ+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dzaS9mYXVsdGNvZGUvZWpiL0ZhdWx0Q29kZUVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93c2kvZmF1bHRjb2RlL2VqYi9GYXVsdENvZGVFSkIuamF2YQppbmRleCBlOTk3NTE0Li41NDhkNjFjIDEwMDY0NAotLS0gYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dzaS9mYXVsdGNvZGUvZWpiL0ZhdWx0Q29kZUVKQi5qYXZhCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd3NpL2ZhdWx0Y29kZS9lamIvRmF1bHRDb2RlRUpCLmphdmEKQEAgLTE3LDcgKzE3LDcgQEAKIHBhY2thZ2UgZmF1bHRjb2RlZWpiOwogCiBpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7Ci1pbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOyAKK2ltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkJlYW47CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQ7CiBpbXBvcnQgamFrYXJ0YS5lamIuRUpCRXhjZXB0aW9uOwpAQCAtMjgsMjUgKzI4LDI1IEBACiAgICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBzYzsKIAogICAgIHB1YmxpYyBGYXVsdENvZGVFSkIoKXt9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIEZhdWx0Q29kZUVKQjo6ZWpiQ3JlYXRlICEhIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBGYXVsdENvZGVFSkI6OmVqYkNyZWF0ZSAhISIpOwogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgZWNob1N0cmluZyhTdHJpbmcgYm9keSkgewotCVN5c3RlbS5vdXQucHJpbnRsbigiSW4gRmF1bHRDb2RlRUpCOjogIGVjaG9TdHJpbmcgPSAiICsgYm9keSk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBGYXVsdENvZGVFSkI6OiAgZWNob1N0cmluZyA9ICIgKyBib2R5KTsKICAgICAgICAgcmV0dXJuIGJvZHk7CiAgICAgfQotICAgICAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFNlc3Npb25Db250ZXh0KFNlc3Npb25Db250ZXh0IHNjKSB7Ci0JCisKICAgICAgICAgdGhpcy5zYyA9IHNjOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlJlbW92ZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24ge30KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYkFjdGl2YXRlKCkge30KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGVqYlBhc3NpdmF0ZSgpIHt9CiAKIH0KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd3NpL2ZhdWx0Y29kZS93c2NvbXBpbGVfY29uZmlnX2FwcGNsaWVudC54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dzaS9mYXVsdGNvZGUvd3Njb21waWxlX2NvbmZpZ19hcHBjbGllbnQueG1sCmluZGV4IDU5YmI0ZWEuLjFkZGUxMjIgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd3NpL2ZhdWx0Y29kZS93c2NvbXBpbGVfY29uZmlnX2FwcGNsaWVudC54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93c2kvZmF1bHRjb2RlL3dzY29tcGlsZV9jb25maWdfYXBwY2xpZW50LnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8Y29uZmlndXJhdGlvbgogICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4LXJwYy9yaS9jb25maWciPgotICA8d3NkbCAKKyAgPHdzZGwKICAgICAgIGxvY2F0aW9uPSJmYXVsdGNvZGUud3NkbCIKICAgICAgIHBhY2thZ2VOYW1lPSJmYXVsdGNvZGUiLz4KIDwvY29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd3NpL2ZhdWx0Y29kZS93c2NvbXBpbGVfY29uZmlnX2VqYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3dzaS9mYXVsdGNvZGUvd3Njb21waWxlX2NvbmZpZ19lamIueG1sCmluZGV4IGYwNjQ2NzQuLmFmNWU1M2YgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2Uvd3NpL2ZhdWx0Y29kZS93c2NvbXBpbGVfY29uZmlnX2VqYi54bWwKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS93c2kvZmF1bHRjb2RlL3dzY29tcGlsZV9jb25maWdfZWpiLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8Y29uZmlndXJhdGlvbgogICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4LXJwYy9yaS9jb25maWciPgotICA8d3NkbCAKKyAgPHdzZGwKICAgICAgIGxvY2F0aW9uPSJmYXVsdGNvZGUud3NkbCIKICAgICAgIHBhY2thZ2VOYW1lPSJmYXVsdGNvZGVlamIiLz4KIDwvY29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UveHNkYW55L2J1aWxkLnByb3BlcnRpZXMgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3hzZGFueS9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IGI4YjZhM2EuLjMyMGI4MTEgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UveHNkYW55L2J1aWxkLnByb3BlcnRpZXMKKysrIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS94c2RhbnkvYnVpbGQucHJvcGVydGllcwpAQCAtMTUsMjIgKzE1LDIyIEBACiAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgT1IgR1BMLTIuMCBXSVRIIENsYXNzcGF0aC1leGNlcHRpb24tMi4wCiAKIC0tPgotIAorCiAKIDxwcm9wZXJ0eSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ4c2RhbnkiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBuYW1lIiB2YWx1ZT0iJHttb2R1bGV9Ii8+ICAgICAgICAgCis8cHJvcGVydHkgbmFtZT0iYXBwbmFtZSIgdmFsdWU9IiR7bW9kdWxlfSIvPiAgICAgICAgXHUwMDIwCiA8cHJvcGVydHkgbmFtZT0iYXNzZW1ibGUiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfS9hcmNoaXZlIi8+Ci08cHJvcGVydHkgbmFtZT0idGVzdC5jbGllbnQiIAotCXZhbHVlPSJDbGllbnQiLz4KKzxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsaWVudCJcdTAwMjAKKyAgICB2YWx1ZT0iQ2xpZW50Ii8+CiA8cHJvcGVydHkgbmFtZT0iYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9hcHBsaWNhdGlvbi54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24ueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci9zdW4tYXBwbGljYXRpb24ueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0iZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL2VqYi1qYXIueG1sIi8+CiA8cHJvcGVydHkgbmFtZT0id2Vic2VydmljZXMueG1sIiB2YWx1ZT0iZGVzY3JpcHRvci93ZWJzZXJ2aWNlcy54bWwiLz4KIDxwcm9wZXJ0eSBuYW1lPSJzdW4tZWpiLWphci54bWwiIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1lamItamFyLnhtbCIvPgotPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiIAotCXZhbHVlPSJkZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJzdW4tYXBwbGljYXRpb24tY2xpZW50LnhtbCIgCi0JdmFsdWU9ImRlc2NyaXB0b3Ivc3VuLWFwcGxpY2F0aW9uLWNsaWVudC54bWwiLz4KLTxwcm9wZXJ0eSBuYW1lPSJhcHBjbGllbnRqYXIuZmlsZXMiIHZhbHVlPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIvPiAgICAgICAgIAorPHByb3BlcnR5IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudC54bWwiXHUwMDIwCisgICAgdmFsdWU9ImRlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbCIvPgorPHByb3BlcnR5IG5hbWU9InN1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIlx1MDAyMAorICAgIHZhbHVlPSJkZXNjcmlwdG9yL3N1bi1hcHBsaWNhdGlvbi1jbGllbnQueG1sIi8+Cis8cHJvcGVydHkgbmFtZT0iYXBwY2xpZW50amFyLmZpbGVzIiB2YWx1ZT0iJHtidWlsZC5jbGFzc2VzLmRpcn0iLz4gICAgICAgIFx1MDAyMAogPHByb3BlcnR5IG5hbWU9ImFwcGNsaWVudC5qYXIiIHZhbHVlPSIke2Fzc2VtYmxlLmRpcn0vJHthcHBuYW1lfS1jbGllbnQuamFyIi8+CiA8cHJvcGVydHkgbmFtZT0iYXBwLnR5cGUiIHZhbHVlPSJhcHBsaWNhdGlvbiIvPgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS94c2RhbnkvYnVpbGQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS94c2RhbnkvYnVpbGQueG1sCmluZGV4IGM2ODQxNWEuLjM1ODdmMDMgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UveHNkYW55L2J1aWxkLnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3hzZGFueS9idWlsZC54bWwKQEAgLTMzLDkgKzMzLDkgQEAKIAogCiAgIDx0YXJnZXQgbmFtZT0icnVuLndzY29tcGlsZSI+Ci0JPGV4ZWMgZXhlY3V0YWJsZT0iJHtXU0NPTVBJTEV9IiBmYWlsb25lcnJvcj0idHJ1ZSIgPgotICAgICAgICA8YXJnIGxpbmU9Ii1zb3VyY2UgMS4xLjIgJHt3c2NvbXBpbGUuY29tbWFuZH0iIC8+ICAgICAgICAKLQk8L2V4ZWM+CisgICAgPGV4ZWMgZXhlY3V0YWJsZT0iJHtXU0NPTVBJTEV9IiBmYWlsb25lcnJvcj0idHJ1ZSIgPgorICAgICAgICA8YXJnIGxpbmU9Ii1zb3VyY2UgMS4xLjIgJHt3c2NvbXBpbGUuY29tbWFuZH0iIC8+CisgICAgPC9leGVjPgogICA8L3RhcmdldD4KIAogICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9IiI+CkBAIC01OCwxMSArNTgsMTEgQEAKICAgPHRhcmdldCBuYW1lPSJ3c2NvbXBpbGUtYXBwY2xpZW50IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPG1rZGlyIGRpcj0ib3V0cHV0Ii8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4ud3Njb21waWxlIj4KLSAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIgCisgICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiCiAgICAgICAgdmFsdWU9Ii1pbXBvcnQgLWtlZXAgLWQgb3V0cHV0IC1zIG91dHB1dCAtY2xhc3NwYXRoIC4gd3Njb21waWxlX2NvbmZpZ19hcHBjbGllbnQueG1sIi8+CiAgICAgPC9hbnRjYWxsPgogICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfS94c2RhbnkiPgotICAgICAgIDxmaWxlc2V0IGRpcj0ib3V0cHV0L3hzZGFueSIgCisgICAgICAgPGZpbGVzZXQgZGlyPSJvdXRwdXQveHNkYW55IgogICAgICAgICBpbmNsdWRlcz0iVGVzdFNlcnZpY2UuY2xhc3MsIFRlc3QuY2xhc3MsIFNpbmdsZVdpbGRjYXJkVHlwZS5jbGFzcywgUmVwZWF0ZWRXaWxkY2FyZFR5cGUuY2xhc3MsIFRlc3QxUmVxdWVzdFR5cGUuY2xhc3MsIFRlc3QxUmVzcG9uc2VUeXBlLmNsYXNzIi8+CiAgICAgPC9jb3B5PgogICAgIDxkZWxldGUgZGlyPSJvdXRwdXQiLz4KQEAgLTcxLDExICs3MSwxMSBAQAogICA8dGFyZ2V0IG5hbWU9IndzY29tcGlsZS1lamIiIGRlcGVuZHM9ImluaXQtY29tbW9uIj4KICAgICA8bWtkaXIgZGlyPSJvdXRwdXQiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9InJ1bi53c2NvbXBpbGUiPgotICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIiAKKyAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIKICAgICAgICB2YWx1ZT0iLWltcG9ydCAta2VlcCAtZCBvdXRwdXQgLXMgb3V0cHV0IC1jbGFzc3BhdGggLiB3c2NvbXBpbGVfY29uZmlnX2VqYi54bWwiLz4KICAgICA8L2FudGNhbGw+CiAgICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9L3hzZGFueWVqYiI+Ci0gICAgICAgPGZpbGVzZXQgZGlyPSJvdXRwdXQveHNkYW55ZWpiIiAKKyAgICAgICA8ZmlsZXNldCBkaXI9Im91dHB1dC94c2RhbnllamIiCiAgICAgICAgIGluY2x1ZGVzPSJUZXN0U2VydmljZS5jbGFzcywgVGVzdC5jbGFzcywgU2luZ2xlV2lsZGNhcmRUeXBlLmNsYXNzLCBSZXBlYXRlZFdpbGRjYXJkVHlwZS5jbGFzcywgVGVzdDFSZXF1ZXN0VHlwZS5jbGFzcywgVGVzdDFSZXNwb25zZVR5cGUuY2xhc3MiLz4KICAgICA8L2NvcHk+CiAgICAgPGRlbGV0ZSBkaXI9Im91dHB1dCIvPgpAQCAtODQsMjQgKzg0LDI0IEBACiAgIDx0YXJnZXQgbmFtZT0iYXNzZW1ibGUiIGRlcGVuZHM9ImluaXQtY29tbW9uLCBjb21waWxlIj4KICAgICA8Y29weSB0b2Rpcj0iJHtidWlsZC5jbGFzc2VzLmRpcn0vTUVUQS1JTkYvd3NkbCIKICAgICAgIGZpbGU9InhzZGFueS53c2RsIi8+Ci0gICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IiAKLQkgZmlsZT0iWHNkQW55TWFwcGluZ19hcHBjbGllbnQueG1sIi8+CisgICAgPGNvcHkgdG9kaXI9IiR7YnVpbGQuY2xhc3Nlcy5kaXJ9IgorICAgICBmaWxlPSJYc2RBbnlNYXBwaW5nX2FwcGNsaWVudC54bWwiLz4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImFwcGNsaWVudC1qYXItY29tbW9uIj4KLSAgICAgIDxwYXJhbSBuYW1lPSJhcHBjbGllbnRqYXIuY2xhc3NlcyIgCisgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50amFyLmNsYXNzZXMiCiAgICAgICAgICAgICAgdmFsdWU9IlhzZEFueU1hcHBpbmdfYXBwY2xpZW50LnhtbCxNRVRBLUlORi93c2RsLyoqLHhzZGFueS8qLmNsYXNzIiAvPgogCiAgICAgPC9hbnRjYWxsPgotICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIgCi0JIGZpbGU9IlhzZEFueU1hcHBpbmdfZWpiLnhtbCIvPgorICAgIDxjb3B5IHRvZGlyPSIke2J1aWxkLmNsYXNzZXMuZGlyfSIKKyAgICAgZmlsZT0iWHNkQW55TWFwcGluZ19lamIueG1sIi8+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJlamItamFyLWNvbW1vbiI+Ci0gICAgICA8cGFyYW0gbmFtZT0iZWpiamFyLmNsYXNzZXMiIAorICAgICAgPHBhcmFtIG5hbWU9ImVqYmphci5jbGFzc2VzIgogICAgICAgICAgICAgIHZhbHVlPSJYc2RBbnlNYXBwaW5nX2VqYi54bWwsTUVUQS1JTkYvd3NkbC8qKix4c2RhbnllamIvKi5jbGFzcyIgLz4KIAogICAgIDwvYW50Y2FsbD4KICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVhci1jb21tb24iIC8+Ci0gIDwvdGFyZ2V0PiAKKyAgPC90YXJnZXQ+CiAKLSAgICA8dGFyZ2V0IG5hbWU9ImRlcGxveSIgCisgICAgPHRhcmdldCBuYW1lPSJkZXBsb3kiCiAgICAgICAgICAgICBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0iZGVwbG95LWNvbW1vbiIvPgogICAgIDwvdGFyZ2V0PgpAQCAtMTIxLDI5ICsxMjEsMjkgQEAKICAgICAgICAgICA8cGFyYW0gbmFtZT0iYXBwY2xpZW50LmFwcGxpY2F0aW9uLmFyZ3MiIHZhbHVlPSJodHRwOi8vJHtodHRwLmhvc3R9OiR7aHR0cC5wb3J0fS94c2RhbnllamIvWHNkQW55VGVzdCIvPgogICAgICAgICA8L2FudGNhbGw+CiAgICAgPC90YXJnZXQ+Ci0gCisKICAgICA8dGFyZ2V0IG5hbWU9InVuZGVwbG95IiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgICAgIDxhbnRjYWxsIHRhcmdldD0idW5kZXBsb3ktY29tbW9uIi8+Ci0gICAgPC90YXJnZXQ+ICAKKyAgICA8L3RhcmdldD4KIAogICA8dGFyZ2V0IG5hbWU9Imdlbi1tYXBwaW5nLWFwcGNsaWVudCIgZGVwZW5kcz0iaW5pdC1jb21tb24iPgogICAgIDxhbnRjYWxsIHRhcmdldD0icnVuLndzY29tcGlsZSI+Ci0gICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiIAorICAgICAgPHBhcmFtIG5hbWU9IndzY29tcGlsZS5jb21tYW5kIgogICAgICAgIHZhbHVlPSItZ2VuIC1jcCAuIC1tYXBwaW5nIFhzZEFueU1hcHBpbmdfYXBwY2xpZW50LnhtbCB3c2NvbXBpbGVfY29uZmlnX2FwcGNsaWVudC54bWwiLz4KICAgICA8L2FudGNhbGw+CiAgIDwvdGFyZ2V0PgogCiAgIDx0YXJnZXQgbmFtZT0iZ2VuLW1hcHBpbmctZWpiIiBkZXBlbmRzPSJpbml0LWNvbW1vbiI+CiAgICAgPGFudGNhbGwgdGFyZ2V0PSJydW4ud3Njb21waWxlIj4KLSAgICAgIDxwYXJhbSBuYW1lPSJ3c2NvbXBpbGUuY29tbWFuZCIgCisgICAgICA8cGFyYW0gbmFtZT0id3Njb21waWxlLmNvbW1hbmQiCiAgICAgICAgdmFsdWU9Ii1nZW4gLWNwIC4gLW1hcHBpbmcgWHNkQW55TWFwcGluZ19lamIueG1sIHdzY29tcGlsZV9jb25maWdfZWpiLnhtbCIvPgogICAgIDwvYW50Y2FsbD4KICAgPC90YXJnZXQ+CiAKICAgICA8dGFyZ2V0IG5hbWU9InVzYWdlIj4KLQk8ZWNobz4KLQkJVXNhZ2U6Ci0JCQlhbnQgYWxsIChFeGVjdXRlcyB0aGUgV2ViU2VydmljZXMgdGVzdCkKLQk8L2VjaG8+CisgICAgPGVjaG8+CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgYW50IGFsbCAoRXhlY3V0ZXMgdGhlIFdlYlNlcnZpY2VzIHRlc3QpCisgICAgPC9lY2hvPgogICAgIDwvdGFyZ2V0PgogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS94c2RhbnkvY2xpZW50L0NsaWVudC5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS94c2RhbnkvY2xpZW50L0NsaWVudC5qYXZhCmluZGV4IGIzZmFiOTcuLmVhYWM1OTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UveHNkYW55L2NsaWVudC9DbGllbnQuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3hzZGFueS9jbGllbnQvQ2xpZW50LmphdmEKQEAgLTI3LDI1ICsyNywyNSBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyIHN0YXQgPQogICAgICAgICBuZXcgU2ltcGxlUmVwb3J0ZXJBZGFwdGVyKCJhcHBzZXJ2LXRlc3RzIik7Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgewogICAgICAgICBzdGF0LmFkZERlc2NyaXB0aW9uKCJ3ZWJzZXJ2aWNlcy14c2RhbnkiKTsKICAgICAgICAgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQoKTsKICAgICAgICAgY2xpZW50LmRvVGVzdChhcmdzKTsKICAgICAgICAgc3RhdC5wcmludFN1bW1hcnkoIndlYnNlcnZpY2VzLXhzZGFueUlEIik7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZG9UZXN0KFN0cmluZ1tdIGFyZ3MpIHsKLSAgICAJdHJ5IHsKKyAgICAgICAgdHJ5IHsKIAogICAgICAgICAgICBTdHJpbmcgdGFyZ2V0RW5kcG9pbnRBZGRyZXNzID0gYXJnc1swXTsKIAotCSAgICBDb250ZXh0IGljID0gbmV3IEluaXRpYWxDb250ZXh0KCk7Ci0gICAgICAgICAgICAKKyAgICAgICAgQ29udGV4dCBpYyA9IG5ldyBJbml0aWFsQ29udGV4dCgpOworCiAgICAgICAgICAgICBUZXN0U2VydmljZSB0ZXN0U2VydmljZSA9CiAgICAgICAgICAgICAgICAgKFRlc3RTZXJ2aWNlKSBpYy5sb29rdXAoImphdmE6Y29tcC9lbnYvc2VydmljZS94c2RhbnkiKTsKICAgICAgICAgICAgIFRlc3QgdGVzdCA9IHRlc3RTZXJ2aWNlLmdldFRlc3RQb3J0KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgKChTdHViKXRlc3QpLl9zZXRQcm9wZXJ0eShTdHViLkVORFBPSU5UX0FERFJFU1NfUFJPUEVSVFksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldEVuZHBvaW50QWRkcmVzcyk7CiAKQEAgLTYzLDExICs2MywxMSBAQAogCiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJFVFVSTiBMVUNLWSBOVU1CRVIgPSAiICsgcmV0KTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ4c2RhbnljbGllbnQgbWFpbiIsIHN0YXQuUEFTUyk7Ci0gICAgICAgICAgICAgICAgCi0gICAgCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworCisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ4c2RhbnkgY2xpZW50IHRlc3QgZmFpbGVkIik7CiAgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgIHN0YXQuYWRkU3RhdHVzKCJ4c2RhbnljbGllbnQgbWFpbiIsIHN0YXQuRkFJTCk7Ci0JfSAKKyAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS94c2RhbnkvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS94c2RhbnkvZGVzY3JpcHRvci9hcHBsaWNhdGlvbi1jbGllbnQueG1sCmluZGV4IDVkY2E0MTcuLmYwMThlYzggMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UveHNkYW55L2Rlc2NyaXB0b3IvYXBwbGljYXRpb24tY2xpZW50LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3hzZGFueS9kZXNjcmlwdG9yL2FwcGxpY2F0aW9uLWNsaWVudC54bWwKQEAgLTI3LDYgKzI3LDYgQEAKICAgICA8d3NkbC1maWxlPk1FVEEtSU5GL3dzZGwveHNkYW55LndzZGw8L3dzZGwtZmlsZT4KICAgICA8amF4cnBjLW1hcHBpbmctZmlsZT5Yc2RBbnlNYXBwaW5nX2FwcGNsaWVudC54bWw8L2pheHJwYy1tYXBwaW5nLWZpbGU+CiAgICAgPHNlcnZpY2UtcW5hbWUgeG1sbnM6c2VydmljZW5zPSJ1cm46dGVzdCI+c2VydmljZW5zOlRlc3RTZXJ2aWNlCi0gICAgPC9zZXJ2aWNlLXFuYW1lPiAgICAgICAgICAgICAgIAorICAgIDwvc2VydmljZS1xbmFtZT4KICAgPC9zZXJ2aWNlLXJlZj4KIDwvYXBwbGljYXRpb24tY2xpZW50PgpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS94c2RhbnkvZWpiL1hzZEFueUVKQi5qYXZhIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS94c2RhbnkvZWpiL1hzZEFueUVKQi5qYXZhCmluZGV4IGJlNjY3ZDUuLjEwNDdjOTYgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UveHNkYW55L2VqYi9Yc2RBbnlFSkIuamF2YQorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3hzZGFueS9lamIvWHNkQW55RUpCLmphdmEKQEAgLTE3LDcgKzE3LDcgQEAKIHBhY2thZ2UgeHNkYW55ZWpiOwogCiBpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7Ci1pbXBvcnQgamF2YS5ybWkuUmVtb3RlRXhjZXB0aW9uOyAKK2ltcG9ydCBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkJlYW47CiBpbXBvcnQgamFrYXJ0YS5lamIuU2Vzc2lvbkNvbnRleHQ7CiBpbXBvcnQgamFrYXJ0YS5lamIuRUpCRXhjZXB0aW9uOwpAQCAtMjgsMTUgKzI4LDE1IEBACiAgICAgcHJpdmF0ZSBTZXNzaW9uQ29udGV4dCBzYzsKIAogICAgIHB1YmxpYyBYc2RBbnlFSkIoKXt9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBlamJDcmVhdGUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLQlTeXN0ZW0ub3V0LnByaW50bG4oIkluIFhzZEFueUVKQjo6ZWpiQ3JlYXRlICEhIik7CisgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbiBYc2RBbnlFSkI6OmVqYkNyZWF0ZSAhISIpOwogICAgIH0KIAotICAgIHB1YmxpYyBpbnQgdGVzdDEoaW50IGEsIAotICAgICAgICAgICAgICAgICAgICAgeHNkYW55ZWpiLlNpbmdsZVdpbGRjYXJkVHlwZSBjLCAKLSAgICAgICAgICAgICAgICAgICAgIHhzZGFueWVqYi5SZXBlYXRlZFdpbGRjYXJkVHlwZSBkKSAKLSAgICAgICAgdGhyb3dzIGphdmEucm1pLlJlbW90ZUV4Y2VwdGlvbiAKKyAgICBwdWJsaWMgaW50IHRlc3QxKGludCBhLAorICAgICAgICAgICAgICAgICAgICAgeHNkYW55ZWpiLlNpbmdsZVdpbGRjYXJkVHlwZSBjLAorICAgICAgICAgICAgICAgICAgICAgeHNkYW55ZWpiLlJlcGVhdGVkV2lsZGNhcmRUeXBlIGQpCisgICAgICAgIHRocm93cyBqYXZhLnJtaS5SZW1vdGVFeGNlcHRpb24KICAgICB7CiAgICAgICAgIE1lc3NhZ2VDb250ZXh0IG1zZ0NvbnRleHQgPSBzYy5nZXRNZXNzYWdlQ29udGV4dCgpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm1zZ0NvbnRleHQgPSAiICsgbXNnQ29udGV4dCk7CkBAIC01NywxNiArNTcsMTYgQEAKIAogICAgICAgICByZXR1cm4gYTsKICAgICB9Ci0gICAgICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkNvbnRleHQoU2Vzc2lvbkNvbnRleHQgc2MpIHsKLQkKKwogICAgICAgICB0aGlzLnNjID0gc2M7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUmVtb3ZlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7fQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiQWN0aXZhdGUoKSB7fQotICAgIAorCiAgICAgcHVibGljIHZvaWQgZWpiUGFzc2l2YXRlKCkge30KIAogfQpkaWZmIC0tZ2l0IGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS94c2Rhbnkvd3Njb21waWxlX2NvbmZpZ19hcHBjbGllbnQueG1sIGIvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS94c2Rhbnkvd3Njb21waWxlX2NvbmZpZ19hcHBjbGllbnQueG1sCmluZGV4IDg4MTg5MWYuLmJjYjk1M2IgMTAwNjQ0Ci0tLSBhL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UveHNkYW55L3dzY29tcGlsZV9jb25maWdfYXBwY2xpZW50LnhtbAorKysgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3hzZGFueS93c2NvbXBpbGVfY29uZmlnX2FwcGNsaWVudC54bWwKQEAgLTE5LDcgKzE5LDcgQEAKIAogPGNvbmZpZ3VyYXRpb24KICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheC1ycGMvcmkvY29uZmlnIj4KLSAgPHdzZGwgCisgIDx3c2RsCiAgICAgICBsb2NhdGlvbj0ieHNkYW55LndzZGwiCiAgICAgICBwYWNrYWdlTmFtZT0ieHNkYW55Ii8+CiA8L2NvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3hzZGFueS93c2NvbXBpbGVfY29uZmlnX2VqYi54bWwgYi9hcHBzZXJ2ZXIvdGVzdHMvYXBwc2Vydi10ZXN0cy9kZXZ0ZXN0cy93ZWJzZXJ2aWNlL3hzZGFueS93c2NvbXBpbGVfY29uZmlnX2VqYi54bWwKaW5kZXggYmJlYjI5Yi4uY2MyYjczNyAxMDA2NDQKLS0tIGEvYXBwc2VydmVyL3Rlc3RzL2FwcHNlcnYtdGVzdHMvZGV2dGVzdHMvd2Vic2VydmljZS94c2Rhbnkvd3Njb21waWxlX2NvbmZpZ19lamIueG1sCisrKyBiL2FwcHNlcnZlci90ZXN0cy9hcHBzZXJ2LXRlc3RzL2RldnRlc3RzL3dlYnNlcnZpY2UveHNkYW55L3dzY29tcGlsZV9jb25maWdfZWpiLnhtbApAQCAtMTksNyArMTksNyBAQAogCiA8Y29uZmlndXJhdGlvbgogICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvamF4LXJwYy9yaS9jb25maWciPgotICA8d3NkbCAKKyAgPHdzZGwKICAgICAgIGxvY2F0aW9uPSJ4c2Rhbnkud3NkbCIKICAgICAgIHBhY2thZ2VOYW1lPSJ4c2RhbnllamIiLz4KIDwvY29uZmlndXJhdGlvbj4K